ZGlmZiAtLWdpdCBhLy5jaXJydXMueW1sIGIvLmNpcnJ1cy55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJmNWZlMwotLS0gL2Rldi9udWxsCisrKyBiLy5jaXJydXMueW1sCkBAIC0wLDAgKzEsMTUgQEAKK2VudjoKKyAgQ0lSUlVTX0NMT05FX0RFUFRIOiAxCisKK2ZyZWVic2RfMTJfdGFzazoKKyAgZnJlZWJzZF9pbnN0YW5jZToKKyAgICBpbWFnZTogZnJlZWJzZC0xMi0xLXJlbGVhc2UtYW1kNjQKKyAgaW5zdGFsbF9zY3JpcHQ6CisgICAgcGtnIGluc3RhbGwgLXkgZ2V0dGV4dCBnbWFrZSBwZXJsNQorICBjcmVhdGVfdXNlcl9zY3JpcHQ6CisgICAgLSBwdyB1c2VyYWRkIGdpdAorICAgIC0gY2hvd24gLVIgZ2l0OmdpdCAuCisgIGJ1aWxkX3NjcmlwdDoKKyAgICAtIHN1IGdpdCAtYyBnbWFrZQorICB0ZXN0X3NjcmlwdDoKKyAgICAtIHN1IGdpdCAtYyAnZ21ha2UgdGVzdCcKZGlmZiAtLWdpdCBhLy5jbGFuZy1mb3JtYXQgYi8uY2xhbmctZm9ybWF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OTJkZGEKLS0tIC9kZXYvbnVsbAorKysgYi8uY2xhbmctZm9ybWF0CkBAIC0wLDAgKzEsMTg0IEBACisjIFRoaXMgZmlsZSBpcyBhbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZm9yIGNsYW5nLWZvcm1hdCA1LjAuCisjCisjIE5vdGUgdGhhdCB0aGlzIHN0eWxlIGRlZmluaXRpb24gc2hvdWxkIG9ubHkgYmUgdW5kZXJzdG9vZCBhcyBhIGhpbnQKKyMgZm9yIHdyaXRpbmcgbmV3IGNvZGUuIFRoZSBydWxlcyBhcmUgc3RpbGwgd29yay1pbi1wcm9ncmVzcyBhbmQgZG9lcworIyBub3QgeWV0IGV4YWN0bHkgbWF0Y2ggdGhlIHN0eWxlIHdlIGhhdmUgaW4gdGhlIGV4aXN0aW5nIGNvZGUuCisKKyMgVXNlIHRhYnMgd2hlbmV2ZXIgd2UgbmVlZCB0byBmaWxsIHdoaXRlc3BhY2UgdGhhdCBzcGFucyBhdCBsZWFzdCBmcm9tIG9uZSB0YWIKKyMgc3RvcCB0byB0aGUgbmV4dCBvbmUuCisjCisjIFRoZXNlIHNldHRpbmdzIGFyZSBtaXJyb3JlZCBpbiAuZWRpdG9yY29uZmlnLiAgS2VlcCB0aGVtIGluIHN5bmMuCitVc2VUYWI6IEFsd2F5cworVGFiV2lkdGg6IDgKK0luZGVudFdpZHRoOiA4CitDb250aW51YXRpb25JbmRlbnRXaWR0aDogOAorQ29sdW1uTGltaXQ6IDgwCisKKyMgQyBMYW5ndWFnZSBzcGVjaWZpY3MKK0xhbmd1YWdlOiBDcHAKKworIyBBbGlnbiBwYXJhbWV0ZXJzIG9uIHRoZSBvcGVuIGJyYWNrZXQKKyMgc29tZUxvbmdGdW5jdGlvbihhcmd1bWVudDEsCisjICAgICAgICAgICAgICAgICAgYXJndW1lbnQyKTsKK0FsaWduQWZ0ZXJPcGVuQnJhY2tldDogQWxpZ24KKworIyBEb24ndCBhbGlnbiBjb25zZWN1dGl2ZSBhc3NpZ25tZW50cworIyBpbnQgYWFhYSA9IDEyOworIyBpbnQgYiA9IDE0OworQWxpZ25Db25zZWN1dGl2ZUFzc2lnbm1lbnRzOiBmYWxzZQorCisjIERvbid0IGFsaWduIGNvbnNlY3V0aXZlIGRlY2xhcmF0aW9ucworIyBpbnQgYWFhYSA9IDEyOworIyBkb3VibGUgYiA9IDMuMTQ7CitBbGlnbkNvbnNlY3V0aXZlRGVjbGFyYXRpb25zOiBmYWxzZQorCisjIEFsaWduIGVzY2FwZWQgbmV3bGluZXMgYXMgZmFyIGxlZnQgYXMgcG9zc2libGUKKyMgI2RlZmluZSBBICAgXAorIyAgIGludCBhYWFhOyBcCisjICAgaW50IGI7ICAgIFwKKyMgICBpbnQgY2NjY2NjY2M7CitBbGlnbkVzY2FwZWROZXdsaW5lczogTGVmdAorCisjIEFsaWduIG9wZXJhbmRzIG9mIGJpbmFyeSBhbmQgdGVybmFyeSBleHByZXNzaW9ucworIyBpbnQgYWFhID0gYmJiYmJiYmJiYmIgKworIyAgICAgICAgICAgY2NjY2NjOworQWxpZ25PcGVyYW5kczogdHJ1ZQorCisjIERvbid0IGFsaWduIHRyYWlsaW5nIGNvbW1lbnRzCisjIGludCBhOyAvLyBDb21tZW50IGEKKyMgaW50IGIgPSAyOyAvLyBDb21tZW50IGIKK0FsaWduVHJhaWxpbmdDb21tZW50czogZmFsc2UKKworIyBCeSBkZWZhdWx0IGRvbid0IGFsbG93IHB1dHRpbmcgcGFyYW1ldGVycyBvbnRvIHRoZSBuZXh0IGxpbmUKKyMgbXlGdW5jdGlvbihmb28sIGJhciwgYmF6KTsKK0FsbG93QWxsUGFyYW1ldGVyc09mRGVjbGFyYXRpb25Pbk5leHRMaW5lOiBmYWxzZQorCisjIERvbid0IGFsbG93IHNob3J0IGJyYWNlZCBzdGF0ZW1lbnRzIHRvIGJlIG9uIGEgc2luZ2xlIGxpbmUKKyMgaWYgKGEpICAgICAgICAgICBub3QgICAgICAgaWYgKGEpIHJldHVybjsKKyMgICByZXR1cm47CitBbGxvd1Nob3J0QmxvY2tzT25BU2luZ2xlTGluZTogZmFsc2UKK0FsbG93U2hvcnRDYXNlTGFiZWxzT25BU2luZ2xlTGluZTogZmFsc2UKK0FsbG93U2hvcnRGdW5jdGlvbnNPbkFTaW5nbGVMaW5lOiBmYWxzZQorQWxsb3dTaG9ydElmU3RhdGVtZW50c09uQVNpbmdsZUxpbmU6IGZhbHNlCitBbGxvd1Nob3J0TG9vcHNPbkFTaW5nbGVMaW5lOiBmYWxzZQorCisjIEJ5IGRlZmF1bHQgZG9uJ3QgYWRkIGEgbGluZSBicmVhayBhZnRlciB0aGUgcmV0dXJuIHR5cGUgb2YgdG9wLWxldmVsIGZ1bmN0aW9ucworIyBpbnQgZm9vKCk7CitBbHdheXNCcmVha0FmdGVyUmV0dXJuVHlwZTogTm9uZQorCisjIFBhY2sgYXMgbWFueSBwYXJhbWV0ZXJzIG9yIGFyZ3VtZW50cyBvbnRvIHRoZSBzYW1lIGxpbmUgYXMgcG9zc2libGUKKyMgaW50IG15RnVuY3Rpb24oaW50IGFhYWFhYWFhYWFhYSwgaW50IGJiYmJiYmJiLAorIyAgICAgICAgICAgICAgICBpbnQgY2NjYyk7CitCaW5QYWNrQXJndW1lbnRzOiB0cnVlCitCaW5QYWNrUGFyYW1ldGVyczogdHJ1ZQorCisjIEF0dGFjaCBicmFjZXMgdG8gc3Vycm91bmRpbmcgY29udGV4dCBleGNlcHQgYnJlYWsgYmVmb3JlIGJyYWNlcyBvbiBmdW5jdGlvbgorIyBkZWZpbml0aW9ucy4KKyMgdm9pZCBmb28oKQorIyB7CisjICAgIGlmICh0cnVlKSB7CisjICAgIH0gZWxzZSB7CisjICAgIH0KKyMgfTsKK0JyZWFrQmVmb3JlQnJhY2VzOiBMaW51eAorCisjIEJyZWFrIGFmdGVyIG9wZXJhdG9ycworIyBpbnQgdmFsdXZlID0gYWFhYWFhYWFhYWFhYSArCisjICAgICAgICAgICAgICBiYmJiYmIgLQorIyAgICAgICAgICAgICAgY2NjY2NjY2NjY2M7CitCcmVha0JlZm9yZUJpbmFyeU9wZXJhdG9yczogTm9uZQorQnJlYWtCZWZvcmVUZXJuYXJ5T3BlcmF0b3JzOiBmYWxzZQorCisjIERvbid0IGJyZWFrIHN0cmluZyBsaXRlcmFscworQnJlYWtTdHJpbmdMaXRlcmFsczogZmFsc2UKKworIyBVc2UgdGhlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwgYXMgZm9yIHRoZSBzd2l0Y2ggc3RhdGVtZW50LgorIyBTd2l0Y2ggc3RhdGVtZW50IGJvZHkgaXMgYWx3YXlzIGluZGVudGVkIG9uZSBsZXZlbCBtb3JlIHRoYW4gY2FzZSBsYWJlbHMuCitJbmRlbnRDYXNlTGFiZWxzOiBmYWxzZQorCisjIERvbid0IGluZGVudCBhIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgZGVjbGFyYXRpb24gaWYgaXQgaXMgd3JhcHBlZCBhZnRlciB0aGUKKyMgdHlwZQorSW5kZW50V3JhcHBlZEZ1bmN0aW9uTmFtZXM6IGZhbHNlCisKKyMgQWxpZ24gcG9pbnRlciB0byB0aGUgcmlnaHQKKyMgaW50ICphOworUG9pbnRlckFsaWdubWVudDogUmlnaHQKKworIyBEb24ndCBpbnNlcnQgYSBzcGFjZSBhZnRlciBhIGNhc3QKKyMgeCA9IChpbnQzMil5OyAgICBub3QgICAgeCA9IChpbnQzMikgeTsKK1NwYWNlQWZ0ZXJDU3R5bGVDYXN0OiBmYWxzZQorCisjIEluc2VydCBzcGFjZXMgYmVmb3JlIGFuZCBhZnRlciBhc3NpZ25tZW50IG9wZXJhdG9ycworIyBpbnQgYSA9IDU7ICAgIG5vdCAgICBpbnQgYT01OworIyBhICs9IDQyOyAgICAgICAgICAgICBhKz00MjsKK1NwYWNlQmVmb3JlQXNzaWdubWVudE9wZXJhdG9yczogdHJ1ZQorCisjIFB1dCBhIHNwYWNlIGJlZm9yZSBvcGVuaW5nIHBhcmVudGhlc2VzIG9ubHkgYWZ0ZXIgY29udHJvbCBzdGF0ZW1lbnQga2V5d29yZHMuCisjIHZvaWQgZigpIHsKKyMgICBpZiAodHJ1ZSkgeworIyAgICAgZigpOworIyAgIH0KKyMgfQorU3BhY2VCZWZvcmVQYXJlbnM6IENvbnRyb2xTdGF0ZW1lbnRzCisKKyMgRG9uJ3QgaW5zZXJ0IHNwYWNlcyBpbnNpZGUgZW1wdHkgJygpJworU3BhY2VJbkVtcHR5UGFyZW50aGVzZXM6IGZhbHNlCisKKyMgVGhlIG51bWJlciBvZiBzcGFjZXMgYmVmb3JlIHRyYWlsaW5nIGxpbmUgY29tbWVudHMgKC8vIC0gY29tbWVudHMpLgorIyBUaGlzIGRvZXMgbm90IGFmZmVjdCB0cmFpbGluZyBibG9jayBjb21tZW50cyAoLyogLSBjb21tZW50cykuCitTcGFjZXNCZWZvcmVUcmFpbGluZ0NvbW1lbnRzOiAxCisKKyMgRG9uJ3QgaW5zZXJ0IHNwYWNlcyBpbiBjYXN0cworIyB4ID0gKGludDMyKSB5OyAgICBub3QgICAgeCA9ICggaW50MzIgKSB5OworU3BhY2VzSW5DU3R5bGVDYXN0UGFyZW50aGVzZXM6IGZhbHNlCisKKyMgRG9uJ3QgaW5zZXJ0IHNwYWNlcyBpbnNpZGUgY29udGFpbmVyIGxpdGVyYWxzCisjIHZhciBhcnIgPSBbMSwgMiwgM107ICAgIG5vdCAgICB2YXIgYXJyID0gWyAxLCAyLCAzIF07CitTcGFjZXNJbkNvbnRhaW5lckxpdGVyYWxzOiBmYWxzZQorCisjIERvbid0IGluc2VydCBzcGFjZXMgYWZ0ZXIgJygnIG9yIGJlZm9yZSAnKScKKyMgZihhcmcpOyAgICBub3QgICAgZiggYXJnICk7CitTcGFjZXNJblBhcmVudGhlc2VzOiBmYWxzZQorCisjIERvbid0IGluc2VydCBzcGFjZXMgYWZ0ZXIgJ1snIG9yIGJlZm9yZSAnXScKKyMgaW50IGFbNV07ICAgIG5vdCAgICBpbnQgYVsgNSBdOworU3BhY2VzSW5TcXVhcmVCcmFja2V0czogZmFsc2UKKworIyBJbnNlcnQgYSBzcGFjZSBhZnRlciAneycgYW5kIGJlZm9yZSAnfScgaW4gc3RydWN0IGluaXRpYWxpemVycworQ3BwMTFCcmFjZWRMaXN0U3R5bGU6IGZhbHNlCisKKyMgQSBsaXN0IG9mIG1hY3JvcyB0aGF0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBmb3JlYWNoIGxvb3BzIGluc3RlYWQgb2YgYXMKKyMgZnVuY3Rpb24gY2FsbHMuIFRha2VuIGZyb206CisjICAgZ2l0IGdyZXAgLWggJ14jZGVmaW5lIFteWzpzcGFjZTpdXSpmb3JfZWFjaFteWzpzcGFjZTpdXSooJyBcCisjICAgfCBzZWQgInMsXiNkZWZpbmUgXChbXls6c3BhY2U6XV0qZm9yX2VhY2hbXls6c3BhY2U6XV0qXCkoLiokLCAgLSAnXDEnLCIgXAorIyAgIHwgc29ydCB8IHVuaXEKK0ZvckVhY2hNYWNyb3M6CisgIC0gJ2Zvcl9lYWNoX2FiYnJldicKKyAgLSAnZm9yX2VhY2hfYnVpbHRpbicKKyAgLSAnZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbScKKyAgLSAnZm9yX2VhY2hfdXQnCisgIC0gJ2Zvcl9lYWNoX3dhbnRlZF9idWlsdGluJworICAtICdsaXN0X2Zvcl9lYWNoJworICAtICdsaXN0X2Zvcl9lYWNoX2RpcicKKyAgLSAnbGlzdF9mb3JfZWFjaF9wcmV2JworICAtICdsaXN0X2Zvcl9lYWNoX3ByZXZfc2FmZScKKyAgLSAnbGlzdF9mb3JfZWFjaF9zYWZlJworCisjIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25zZWN1dGl2ZSBlbXB0eSBsaW5lcyB0byBrZWVwLgorTWF4RW1wdHlMaW5lc1RvS2VlcDogMQorCisjIE5vIGVtcHR5IGxpbmUgYXQgdGhlIHN0YXJ0IG9mIGEgYmxvY2suCitLZWVwRW1wdHlMaW5lc0F0VGhlU3RhcnRPZkJsb2NrczogZmFsc2UKKworIyBQZW5hbHRpZXMKKyMgVGhpcyBkZWNpZGVzIHdoYXQgb3JkZXIgdGhpbmdzIHNob3VsZCBiZSBkb25lIGlmIGEgbGluZSBpcyB0b28gbG9uZworUGVuYWx0eUJyZWFrQXNzaWdubWVudDogMTAKK1BlbmFsdHlCcmVha0JlZm9yZUZpcnN0Q2FsbFBhcmFtZXRlcjogMzAKK1BlbmFsdHlCcmVha0NvbW1lbnQ6IDEwCitQZW5hbHR5QnJlYWtGaXJzdExlc3NMZXNzOiAwCitQZW5hbHR5QnJlYWtTdHJpbmc6IDEwCitQZW5hbHR5RXhjZXNzQ2hhcmFjdGVyOiAxMDAKK1BlbmFsdHlSZXR1cm5UeXBlT25JdHNPd25MaW5lOiA2MAorCisjIERvbid0IHNvcnQgI2luY2x1ZGUncworU29ydEluY2x1ZGVzOiBmYWxzZQpkaWZmIC0tZ2l0IGEvLmVkaXRvcmNvbmZpZyBiLy5lZGl0b3Jjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkODE5NgotLS0gL2Rldi9udWxsCisrKyBiLy5lZGl0b3Jjb25maWcKQEAgLTAsMCArMSwxNiBAQAorWypdCitjaGFyc2V0ID0gdXRmLTgKK2luc2VydF9maW5hbF9uZXdsaW5lID0gdHJ1ZQorCisjIFRoZSBzZXR0aW5ncyBmb3IgQyAoKi5jIGFuZCAqLmgpIGZpbGVzIGFyZSBtaXJyb3JlZCBpbiAuY2xhbmctZm9ybWF0LiAgS2VlcAorIyB0aGVtIGluIHN5bmMuCitbKi57YyxoLHNoLHBlcmwscGwscG0sdHh0fV0KK2luZGVudF9zdHlsZSA9IHRhYgordGFiX3dpZHRoID0gOAorCitbKi5weV0KK2luZGVudF9zdHlsZSA9IHNwYWNlCitpbmRlbnRfc2l6ZSA9IDQKKworW0NPTU1JVF9FRElUTVNHXQorbWF4X2xpbmVfbGVuZ3RoID0gNzIKZGlmZiAtLWdpdCBhLy5naXRhdHRyaWJ1dGVzIGIvLmdpdGF0dHJpYnV0ZXMKaW5kZXggNTljZDQxZC4uYjA4YTE0MSAxMDA2NDQKLS0tIGEvLmdpdGF0dHJpYnV0ZXMKKysrIGIvLmdpdGF0dHJpYnV0ZXMKQEAgLTEsNSArMSwxNyBAQAotKiAgICAgICAgICAgd2hpdGVzcGFjZT1pbmRlbnQtd2l0aC1ub24tdGFiLHRyYWlsaW5nLXNwYWNlLHNwYWNlLWJlZm9yZS10YWIsdGFid2lkdGg9NAotKiAgICAgICAgICAgZW5jb2Rpbmc9VVMtQVNDSUkKLWdpdC1ndWkuc2ggIGVuY29kaW5nPVVURi04Ci0vcG8vKi5wbyAgICBlbmNvZGluZz1VVEYtOAorKiB3aGl0ZXNwYWNlPSFpbmRlbnQsdHJhaWwsc3BhY2UKKyouW2NoXSB3aGl0ZXNwYWNlPWluZGVudCx0cmFpbCxzcGFjZSBkaWZmPWNwcAorKi5zaCB3aGl0ZXNwYWNlPWluZGVudCx0cmFpbCxzcGFjZSBlb2w9bGYKKyoucGVybCBlb2w9bGYgZGlmZj1wZXJsCisqLnBsIGVvZj1sZiBkaWZmPXBlcmwKKyoucG0gZW9sPWxmIGRpZmY9cGVybAorKi5weSBlb2w9bGYgZGlmZj1weXRob24KKyouYmF0IGVvbD1jcmxmCisvRG9jdW1lbnRhdGlvbi8qKi8qLnR4dCBlb2w9bGYKKy9jb21tYW5kLWxpc3QudHh0IGVvbD1sZgogL0dJVC1WRVJTSU9OLUdFTiBlb2w9bGYKKy9tZXJnZXRvb2xzLyogZW9sPWxmCisvdC9vaWQtaW5mby8qIGVvbD1sZgorL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dCBjb25mbGljdC1tYXJrZXItc2l6ZT0zMgorL0RvY3VtZW50YXRpb24vZ2l0ay50eHQgY29uZmxpY3QtbWFya2VyLXNpemU9MzIKKy9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dCBjb25mbGljdC1tYXJrZXItc2l6ZT0zMgorL3QvdD8/Pz8tKi5zaCBjb25mbGljdC1tYXJrZXItc2l6ZT0zMgpkaWZmIC0tZ2l0IGEvLmdpdGh1Yi9DT05UUklCVVRJTkcubWQgYi8uZ2l0aHViL0NPTlRSSUJVVElORy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2I0ZTJmCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGh1Yi9DT05UUklCVVRJTkcubWQKQEAgLTAsMCArMSwxOSBAQAorIyMgQ29udHJpYnV0aW5nIHRvIEdpdAorCitUaGFua3MgZm9yIHRha2luZyB0aGUgdGltZSB0byBjb250cmlidXRlIHRvIEdpdCEgUGxlYXNlIGJlIGFkdmlzZWQgdGhhdCB0aGUKK0dpdCBjb21tdW5pdHkgZG9lcyBub3QgdXNlIGdpdGh1Yi5jb20gZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbnMuIEluc3RlYWQsIHdlIHVzZQorYSBtYWlsaW5nIGxpc3QgKGdpdEB2Z2VyLmtlcm5lbC5vcmcpIGZvciBjb2RlIHN1Ym1pc3Npb25zLCBjb2RlCityZXZpZXdzLCBhbmQgYnVnIHJlcG9ydHMuCisKK05ldmVydGhlbGVzcywgeW91IGNhbiB1c2UgW0dpdEdpdEdhZGdldF0oaHR0cHM6Ly9naXRnaXRnYWRnZXQuZ2l0aHViLmlvLykgdG8KK2NvbnZlbmllbnRseSBzZW5kIHlvdXIgUHVsbCBSZXF1ZXN0cyBjb21taXRzIHRvIG91ciBtYWlsaW5nIGxpc3QuCisKK1BsZWFzZSByZWFkIFsiQSBub3RlIGZyb20gdGhlIG1haW50YWluZXIiXShodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQvcGxhaW4vTWFpbnROb3Rlcz9oPXRvZG8pCit0byBsZWFybiBob3cgdGhlIEdpdCBwcm9qZWN0IGlzIG1hbmFnZWQsIGFuZCBob3cgeW91IGNhbiB3b3JrIHdpdGggaXQuCitJbiBhZGRpdGlvbiwgd2UgaGlnaGx5IHJlY29tbWVuZCB5b3UgdG8gcmVhZCBbb3VyIHN1Ym1pc3Npb24gZ3VpZGVsaW5lc10oLi4vRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcykuCisKK0lmIHlvdSBwcmVmZXIgdmlkZW8sIHRoZW4gW3RoaXMgdGFsa10oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1RN2lfcVFXX19xNCZmZWF0dXJlPXlvdXR1LmJlJnQ9Nm00cykKK21pZ2h0IGJlIHVzZWZ1bCB0byB5b3UgYXMgdGhlIHByZXNlbnRlciB3YWxrcyB5b3UgdGhyb3VnaCB0aGUgY29udHJpYnV0aW9uCitwcm9jZXNzIGJ5IGV4YW1wbGUuCisKK1lvdXIgZnJpZW5kbHkgR2l0IGNvbW11bml0eSEKZGlmZiAtLWdpdCBhLy5naXRodWIvUFVMTF9SRVFVRVNUX1RFTVBMQVRFLm1kIGIvLmdpdGh1Yi9QVUxMX1JFUVVFU1RfVEVNUExBVEUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyYzdjMwotLS0gL2Rldi9udWxsCisrKyBiLy5naXRodWIvUFVMTF9SRVFVRVNUX1RFTVBMQVRFLm1kCkBAIC0wLDAgKzEsNyBAQAorVGhhbmtzIGZvciB0YWtpbmcgdGhlIHRpbWUgdG8gY29udHJpYnV0ZSB0byBHaXQhIFBsZWFzZSBiZSBhZHZpc2VkIHRoYXQgdGhlCitHaXQgY29tbXVuaXR5IGRvZXMgbm90IHVzZSBnaXRodWIuY29tIGZvciB0aGVpciBjb250cmlidXRpb25zLiBJbnN0ZWFkLCB3ZSB1c2UKK2EgbWFpbGluZyBsaXN0IChnaXRAdmdlci5rZXJuZWwub3JnKSBmb3IgY29kZSBzdWJtaXNzaW9ucywgY29kZSByZXZpZXdzLCBhbmQKK2J1ZyByZXBvcnRzLiBOZXZlcnRoZWxlc3MsIHlvdSBjYW4gdXNlIEdpdEdpdEdhZGdldCAoaHR0cHM6Ly9naXRnaXRnYWRnZXQuZ2l0aHViLmlvLykKK3RvIGNvbnZlbmllbnRseSBzZW5kIHlvdXIgUHVsbCBSZXF1ZXN0cyBjb21taXRzIHRvIG91ciBtYWlsaW5nIGxpc3QuCisKK1BsZWFzZSByZWFkIHRoZSAiZ3VpZGVsaW5lcyBmb3IgY29udHJpYnV0aW5nIiBsaW5rZWQgYWJvdmUhCmRpZmYgLS1naXQgYS8uZ2l0aHViL3dvcmtmbG93cy9tYWluLnltbCBiLy5naXRodWIvd29ya2Zsb3dzL21haW4ueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTVkY2YKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aHViL3dvcmtmbG93cy9tYWluLnltbApAQCAtMCwwICsxLDMwNSBAQAorbmFtZTogQ0kvUFIKKworb246IFtwdXNoLCBwdWxsX3JlcXVlc3RdCisKK2VudjoKKyAgREVWRUxPUEVSOiAxCisKK2pvYnM6CisgIGNpLWNvbmZpZzoKKyAgICAgIHJ1bnMtb246IHVidW50dS1sYXRlc3QKKyAgICAgIG91dHB1dHM6CisgICAgICAgIGVuYWJsZWQ6ICR7eyBzdGVwcy5jaGVjay1yZWYub3V0cHV0cy5lbmFibGVkIH19CisgICAgICBzdGVwczoKKyAgICAgICAgLSBuYW1lOiB0cnkgdG8gY2xvbmUgY2ktY29uZmlnIGJyYW5jaAorICAgICAgICAgIGNvbnRpbnVlLW9uLWVycm9yOiB0cnVlCisgICAgICAgICAgcnVuOiB8CisgICAgICAgICAgICBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIGNsb25lIFwKKyAgICAgICAgICAgICAgLS1uby10YWdzIFwKKyAgICAgICAgICAgICAgLS1zaW5nbGUtYnJhbmNoIFwKKyAgICAgICAgICAgICAgLWIgY2ktY29uZmlnIFwKKyAgICAgICAgICAgICAgLS1kZXB0aCAxIFwKKyAgICAgICAgICAgICAgLS1uby1jaGVja291dCBcCisgICAgICAgICAgICAgIC0tZmlsdGVyPWJsb2I6bm9uZSBcCisgICAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS8ke3sgZ2l0aHViLnJlcG9zaXRvcnkgfX0gXAorICAgICAgICAgICAgICBjb25maWctcmVwbyAmJgorICAgICAgICAgICAgICBjZCBjb25maWctcmVwbyAmJgorICAgICAgICAgICAgICBnaXQgY2hlY2tvdXQgSEVBRCAtLSBjaS9jb25maWcKKyAgICAgICAgLSBpZDogY2hlY2stcmVmCisgICAgICAgICAgbmFtZTogY2hlY2sgd2hldGhlciBDSSBpcyBlbmFibGVkIGZvciByZWYKKyAgICAgICAgICBydW46IHwKKyAgICAgICAgICAgIGVuYWJsZWQ9eWVzCisgICAgICAgICAgICBpZiB0ZXN0IC14IGNvbmZpZy1yZXBvL2NpL2NvbmZpZy9hbGxvdy1yZWYgJiYKKyAgICAgICAgICAgICAgICEgY29uZmlnLXJlcG8vY2kvY29uZmlnL2FsbG93LXJlZiAnJHt7IGdpdGh1Yi5yZWYgfX0nCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgIGVuYWJsZWQ9bm8KKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlY2hvICI6OnNldC1vdXRwdXQgbmFtZT1lbmFibGVkOjokZW5hYmxlZCIKKworICB3aW5kb3dzLWJ1aWxkOgorICAgIG5lZWRzOiBjaS1jb25maWcKKyAgICBpZjogbmVlZHMuY2ktY29uZmlnLm91dHB1dHMuZW5hYmxlZCA9PSAneWVzJworICAgIHJ1bnMtb246IHdpbmRvd3MtbGF0ZXN0CisgICAgc3RlcHM6CisgICAgLSB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QHYxCisgICAgLSBuYW1lOiBkb3dubG9hZCBnaXQtc2RrLTY0LW1pbmltYWwKKyAgICAgIHNoZWxsOiBiYXNoCisgICAgICBydW46IHwKKyAgICAgICAgIyMgR2V0IGFydGlmYWN0CisgICAgICAgIHVybGJhc2U9aHR0cHM6Ly9kZXYuYXp1cmUuY29tL2dpdC1mb3Itd2luZG93cy9naXQvX2FwaXMvYnVpbGQvYnVpbGRzCisgICAgICAgIGlkPSQoY3VybCAiJHVybGJhc2U/ZGVmaW5pdGlvbnM9MjImc3RhdHVzRmlsdGVyPWNvbXBsZXRlZCZyZXN1bHRGaWx0ZXI9c3VjY2VlZGVkJlwkdG9wPTEiIHwKKyAgICAgICAgICBqcSAtciAiLnZhbHVlW10gfCAuaWQiKQorICAgICAgICBkb3dubG9hZF91cmw9IiQoY3VybCAiJHVybGJhc2UvJGlkL2FydGlmYWN0cyIgfAorICAgICAgICAgIGpxIC1yICcudmFsdWVbXSB8IHNlbGVjdCgubmFtZSA9PSAiZ2l0LXNkay02NC1taW5pbWFsIikucmVzb3VyY2UuZG93bmxvYWRVcmwnKSIKKyAgICAgICAgY3VybCAtLWNvbm5lY3QtdGltZW91dCAxMCAtLXJldHJ5IDUgLS1yZXRyeS1kZWxheSAwIC0tcmV0cnktbWF4LXRpbWUgMjQwIFwKKyAgICAgICAgICAtbyBhcnRpZmFjdHMuemlwICIkZG93bmxvYWRfdXJsIgorCisgICAgICAgICMjIFVuemlwIGFuZCByZW1vdmUgdGhlIGFydGlmYWN0CisgICAgICAgIHVuemlwIGFydGlmYWN0cy56aXAKKyAgICAgICAgcm0gYXJ0aWZhY3RzLnppcAorICAgIC0gbmFtZTogYnVpbGQKKyAgICAgIHNoZWxsOiBwb3dlcnNoZWxsCisgICAgICBlbnY6CisgICAgICAgIEhPTUU6ICR7e3J1bm5lci53b3Jrc3BhY2V9fQorICAgICAgICBNU1lTVEVNOiBNSU5HVzY0CisgICAgICAgIE5PX1BFUkw6IDEKKyAgICAgIHJ1bjogfAorICAgICAgICAmIC5cZ2l0LXNkay02NC1taW5pbWFsXHVzclxiaW5cYmFzaC5leGUgLWxjIEAiCisgICAgICAgIHByaW50ZiAnJXNcbicgL2dpdC1zZGstNjQtbWluaW1hbC8gPj4uZ2l0L2luZm8vZXhjbHVkZQorCisgICAgICAgICAgY2kvbWFrZS10ZXN0LWFydGlmYWN0cy5zaCBhcnRpZmFjdHMKKyAgICAgICAgIkAKKyAgICAtIG5hbWU6IHVwbG9hZCBidWlsZCBhcnRpZmFjdHMKKyAgICAgIHVzZXM6IGFjdGlvbnMvdXBsb2FkLWFydGlmYWN0QHYxCisgICAgICB3aXRoOgorICAgICAgICBuYW1lOiB3aW5kb3dzLWFydGlmYWN0cworICAgICAgICBwYXRoOiBhcnRpZmFjdHMKKyAgICAtIG5hbWU6IHVwbG9hZCBnaXQtc2RrLTY0LW1pbmltYWwKKyAgICAgIHVzZXM6IGFjdGlvbnMvdXBsb2FkLWFydGlmYWN0QHYxCisgICAgICB3aXRoOgorICAgICAgICBuYW1lOiBnaXQtc2RrLTY0LW1pbmltYWwKKyAgICAgICAgcGF0aDogZ2l0LXNkay02NC1taW5pbWFsCisgIHdpbmRvd3MtdGVzdDoKKyAgICBydW5zLW9uOiB3aW5kb3dzLWxhdGVzdAorICAgIG5lZWRzOiBbd2luZG93cy1idWlsZF0KKyAgICBzdHJhdGVneToKKyAgICAgIG1hdHJpeDoKKyAgICAgICAgbnI6IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XQorICAgIHN0ZXBzOgorICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2MQorICAgIC0gbmFtZTogZG93bmxvYWQgYnVpbGQgYXJ0aWZhY3RzCisgICAgICB1c2VzOiBhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QHYxCisgICAgICB3aXRoOgorICAgICAgICBuYW1lOiB3aW5kb3dzLWFydGlmYWN0cworICAgICAgICBwYXRoOiAke3tnaXRodWIud29ya3NwYWNlfX0KKyAgICAtIG5hbWU6IGV4dHJhY3QgYnVpbGQgYXJ0aWZhY3RzCisgICAgICBzaGVsbDogYmFzaAorICAgICAgcnVuOiB0YXIgeGYgYXJ0aWZhY3RzLnRhci5negorICAgIC0gbmFtZTogZG93bmxvYWQgZ2l0LXNkay02NC1taW5pbWFsCisgICAgICB1c2VzOiBhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QHYxCisgICAgICB3aXRoOgorICAgICAgICBuYW1lOiBnaXQtc2RrLTY0LW1pbmltYWwKKyAgICAgICAgcGF0aDogJHt7Z2l0aHViLndvcmtzcGFjZX19L2dpdC1zZGstNjQtbWluaW1hbC8KKyAgICAtIG5hbWU6IHRlc3QKKyAgICAgIHNoZWxsOiBwb3dlcnNoZWxsCisgICAgICBydW46IHwKKyAgICAgICAgJiAuXGdpdC1zZGstNjQtbWluaW1hbFx1c3JcYmluXGJhc2guZXhlIC1sYyBAIgorICAgICAgICAgICMgTGV0IEdpdCBpZ25vcmUgdGhlIFNESworICAgICAgICAgIHByaW50ZiAnJXNcbicgL2dpdC1zZGstNjQtbWluaW1hbC8gPj4uZ2l0L2luZm8vZXhjbHVkZQorCisgICAgICAgICAgY2kvcnVuLXRlc3Qtc2xpY2Uuc2ggJHt7bWF0cml4Lm5yfX0gMTAKKyAgICAgICAgIkAKKyAgICAtIG5hbWU6IGNpL3ByaW50LXRlc3QtZmFpbHVyZXMuc2gKKyAgICAgIGlmOiBmYWlsdXJlKCkKKyAgICAgIHNoZWxsOiBwb3dlcnNoZWxsCisgICAgICBydW46IHwKKyAgICAgICAgJiAuXGdpdC1zZGstNjQtbWluaW1hbFx1c3JcYmluXGJhc2guZXhlIC1sYyBjaS9wcmludC10ZXN0LWZhaWx1cmVzLnNoCisgICAgLSBuYW1lOiBVcGxvYWQgZmFpbGVkIHRlc3RzJyBkaXJlY3RvcmllcworICAgICAgaWY6IGZhaWx1cmUoKSAmJiBlbnYuRkFJTEVEX1RFU1RfQVJUSUZBQ1RTICE9ICcnCisgICAgICB1c2VzOiBhY3Rpb25zL3VwbG9hZC1hcnRpZmFjdEB2MQorICAgICAgd2l0aDoKKyAgICAgICAgbmFtZTogZmFpbGVkLXRlc3RzLXdpbmRvd3MKKyAgICAgICAgcGF0aDogJHt7ZW52LkZBSUxFRF9URVNUX0FSVElGQUNUU319CisgIHZzLWJ1aWxkOgorICAgIG5lZWRzOiBjaS1jb25maWcKKyAgICBpZjogbmVlZHMuY2ktY29uZmlnLm91dHB1dHMuZW5hYmxlZCA9PSAneWVzJworICAgIGVudjoKKyAgICAgIE1TWVNURU06IE1JTkdXNjQKKyAgICAgIE5PX1BFUkw6IDEKKyAgICAgIEdJVF9DT05GSUdfUEFSQU1FVEVSUzogIid1c2VyLm5hbWU9Q0knICd1c2VyLmVtYWlsPWNpQGdpdCciCisgICAgcnVucy1vbjogd2luZG93cy1sYXRlc3QKKyAgICBzdGVwczoKKyAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjEKKyAgICAtIG5hbWU6IGRvd25sb2FkIGdpdC1zZGstNjQtbWluaW1hbAorICAgICAgc2hlbGw6IGJhc2gKKyAgICAgIHJ1bjogfAorICAgICAgICAjIyBHZXQgYXJ0aWZhY3QKKyAgICAgICAgdXJsYmFzZT1odHRwczovL2Rldi5henVyZS5jb20vZ2l0LWZvci13aW5kb3dzL2dpdC9fYXBpcy9idWlsZC9idWlsZHMKKyAgICAgICAgaWQ9JChjdXJsICIkdXJsYmFzZT9kZWZpbml0aW9ucz0yMiZzdGF0dXNGaWx0ZXI9Y29tcGxldGVkJnJlc3VsdEZpbHRlcj1zdWNjZWVkZWQmXCR0b3A9MSIgfAorICAgICAgICAgIGpxIC1yICIudmFsdWVbXSB8IC5pZCIpCisgICAgICAgIGRvd25sb2FkX3VybD0iJChjdXJsICIkdXJsYmFzZS8kaWQvYXJ0aWZhY3RzIiB8CisgICAgICAgICAganEgLXIgJy52YWx1ZVtdIHwgc2VsZWN0KC5uYW1lID09ICJnaXQtc2RrLTY0LW1pbmltYWwiKS5yZXNvdXJjZS5kb3dubG9hZFVybCcpIgorICAgICAgICBjdXJsIC0tY29ubmVjdC10aW1lb3V0IDEwIC0tcmV0cnkgNSAtLXJldHJ5LWRlbGF5IDAgLS1yZXRyeS1tYXgtdGltZSAyNDAgXAorICAgICAgICAgIC1vIGFydGlmYWN0cy56aXAgIiRkb3dubG9hZF91cmwiCisKKyAgICAgICAgIyMgVW56aXAgYW5kIHJlbW92ZSB0aGUgYXJ0aWZhY3QKKyAgICAgICAgdW56aXAgYXJ0aWZhY3RzLnppcAorICAgICAgICBybSBhcnRpZmFjdHMuemlwCisgICAgLSBuYW1lOiBnZW5lcmF0ZSBWaXN1YWwgU3R1ZGlvIHNvbHV0aW9uCisgICAgICBzaGVsbDogcG93ZXJzaGVsbAorICAgICAgcnVuOiB8CisgICAgICAgICYgLlxnaXQtc2RrLTY0LW1pbmltYWxcdXNyXGJpblxiYXNoLmV4ZSAtbGMgQCIKKyAgICAgICAgICBtYWtlIE5ERUJVRz0xIERFVkVMT1BFUj0xIHZjeHByb2oKKyAgICAgICAgIkAKKyAgICAgICAgaWYgKCEkPykgeyBleGl0KDEpIH0KKyAgICAtIG5hbWU6IGRvd25sb2FkIHZjcGtnIGFydGlmYWN0cworICAgICAgc2hlbGw6IHBvd2Vyc2hlbGwKKyAgICAgIHJ1bjogfAorICAgICAgICAkdXJsYmFzZSA9ICJodHRwczovL2Rldi5henVyZS5jb20vZ2l0L2dpdC9fYXBpcy9idWlsZC9idWlsZHMiCisgICAgICAgICRpZCA9ICgoSW52b2tlLVdlYlJlcXVlc3QgLVVzZUJhc2ljUGFyc2luZyAiJHt1cmxiYXNlfT9kZWZpbml0aW9ucz05JnN0YXR1c0ZpbHRlcj1jb21wbGV0ZWQmcmVzdWx0RmlsdGVyPXN1Y2NlZWRlZCZgJHRvcD0xIikuY29udGVudCB8IENvbnZlcnRGcm9tLUpTT04pLnZhbHVlWzBdLmlkCisgICAgICAgICRkb3dubG9hZFVybCA9ICgoSW52b2tlLVdlYlJlcXVlc3QgLVVzZUJhc2ljUGFyc2luZyAiJHt1cmxiYXNlfS8kaWQvYXJ0aWZhY3RzIikuY29udGVudCB8IENvbnZlcnRGcm9tLUpTT04pLnZhbHVlWzBdLnJlc291cmNlLmRvd25sb2FkVXJsCisgICAgICAgIChOZXctT2JqZWN0IE5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgkZG93bmxvYWRVcmwsICJjb21wYXQuemlwIikKKyAgICAgICAgRXhwYW5kLUFyY2hpdmUgY29tcGF0LnppcCAtRGVzdGluYXRpb25QYXRoIC4gLUZvcmNlCisgICAgICAgIFJlbW92ZS1JdGVtIGNvbXBhdC56aXAKKyAgICAtIG5hbWU6IGFkZCBtc2J1aWxkIHRvIFBBVEgKKyAgICAgIHVzZXM6IG1pY3Jvc29mdC9zZXR1cC1tc2J1aWxkQHYxLjAuMAorICAgIC0gbmFtZTogTVNCdWlsZAorICAgICAgcnVuOiBtc2J1aWxkIGdpdC5zbG4gLXByb3BlcnR5OkNvbmZpZ3VyYXRpb249UmVsZWFzZSAtcHJvcGVydHk6UGxhdGZvcm09eDY0IC1tYXhDcHVDb3VudDo0IC1wcm9wZXJ0eTpQbGF0Zm9ybVRvb2xzZXQ9djE0MgorICAgIC0gbmFtZTogYnVuZGxlIGFydGlmYWN0IHRhcgorICAgICAgc2hlbGw6IHBvd2Vyc2hlbGwKKyAgICAgIGVudjoKKyAgICAgICAgTVNWQzogMQorICAgICAgICBWQ1BLR19ST09UOiAke3tnaXRodWIud29ya3NwYWNlfX1cY29tcGF0XHZjYnVpbGRcdmNwa2cKKyAgICAgIHJ1bjogfAorICAgICAgICAmIGNvbXBhdFx2Y2J1aWxkXHZjcGtnX2NvcHlfZGxscy5iYXQgcmVsZWFzZQorICAgICAgICBpZiAoISQ/KSB7IGV4aXQoMSkgfQorICAgICAgICAmIGdpdC1zZGstNjQtbWluaW1hbFx1c3JcYmluXGJhc2guZXhlIC1sYyBAIgorICAgICAgICAgIG1rZGlyIC1wIGFydGlmYWN0cyAmJgorICAgICAgICAgIGV2YWwgXCJgJChtYWtlIC1uIGFydGlmYWN0cy10YXIgSU5DTFVERV9ETExTX0lOX0FSVElGQUNUUz1ZZXNQbGVhc2UgQVJUSUZBQ1RTX0RJUkVDVE9SWT1hcnRpZmFjdHMgMj4mMSB8IGdyZXAgXnRhcilcIgorICAgICAgICAiQAorICAgIC0gbmFtZTogdXBsb2FkIGJ1aWxkIGFydGlmYWN0cworICAgICAgdXNlczogYWN0aW9ucy91cGxvYWQtYXJ0aWZhY3RAdjEKKyAgICAgIHdpdGg6CisgICAgICAgIG5hbWU6IHZzLWFydGlmYWN0cworICAgICAgICBwYXRoOiBhcnRpZmFjdHMKKyAgdnMtdGVzdDoKKyAgICBydW5zLW9uOiB3aW5kb3dzLWxhdGVzdAorICAgIG5lZWRzOiBbdnMtYnVpbGQsIHdpbmRvd3MtYnVpbGRdCisgICAgc3RyYXRlZ3k6CisgICAgICBtYXRyaXg6CisgICAgICAgIG5yOiBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KKyAgICBzdGVwczoKKyAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjEKKyAgICAtIG5hbWU6IGRvd25sb2FkIGdpdC1zZGstNjQtbWluaW1hbAorICAgICAgdXNlczogYWN0aW9ucy9kb3dubG9hZC1hcnRpZmFjdEB2MQorICAgICAgd2l0aDoKKyAgICAgICAgbmFtZTogZ2l0LXNkay02NC1taW5pbWFsCisgICAgICAgIHBhdGg6ICR7e2dpdGh1Yi53b3Jrc3BhY2V9fS9naXQtc2RrLTY0LW1pbmltYWwvCisgICAgLSBuYW1lOiBkb3dubG9hZCBidWlsZCBhcnRpZmFjdHMKKyAgICAgIHVzZXM6IGFjdGlvbnMvZG93bmxvYWQtYXJ0aWZhY3RAdjEKKyAgICAgIHdpdGg6CisgICAgICAgIG5hbWU6IHZzLWFydGlmYWN0cworICAgICAgICBwYXRoOiAke3tnaXRodWIud29ya3NwYWNlfX0KKyAgICAtIG5hbWU6IGV4dHJhY3QgYnVpbGQgYXJ0aWZhY3RzCisgICAgICBzaGVsbDogYmFzaAorICAgICAgcnVuOiB0YXIgeGYgYXJ0aWZhY3RzLnRhci5negorICAgIC0gbmFtZTogdGVzdCAocGFyYWxsZWwpCisgICAgICBzaGVsbDogcG93ZXJzaGVsbAorICAgICAgZW52OgorICAgICAgICBNU1lTVEVNOiBNSU5HVzY0CisgICAgICAgIE5PX1NWTl9URVNUUzogMQorICAgICAgICBHSVRfVEVTVF9TS0lQX1JFQkFTRV9QOiAxCisgICAgICBydW46IHwKKyAgICAgICAgJiAuXGdpdC1zZGstNjQtbWluaW1hbFx1c3JcYmluXGJhc2guZXhlIC1sYyBAIgorICAgICAgICAgICMgTGV0IEdpdCBpZ25vcmUgdGhlIFNESyBhbmQgdGhlIHRlc3QtY2FjaGUKKyAgICAgICAgICBwcmludGYgJyVzXG4nIC9naXQtc2RrLTY0LW1pbmltYWwvIC90ZXN0LWNhY2hlLyA+Pi5naXQvaW5mby9leGNsdWRlCisKKyAgICAgICAgICBjZCB0ICYmCisgICAgICAgICAgUEFUSD1cImAkUFdEL2hlbHBlcjpgJFBBVEhcIiAmJgorICAgICAgICAgIHRlc3QtdG9vbC5leGUgcnVuLWNvbW1hbmQgdGVzdHN1aXRlIC0tam9icz0xMCAtViAteCAtLXdyaXRlLWp1bml0LXhtbCBcCisgICAgICAgICAgICAgICAgICBgJCh0ZXN0LXRvb2wuZXhlIHBhdGgtdXRpbHMgc2xpY2UtdGVzdHMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAke3ttYXRyaXgubnJ9fSAxMCB0WzAtOV0qLnNoKQorICAgICAgICAiQAorICByZWd1bGFyOgorICAgIG5lZWRzOiBjaS1jb25maWcKKyAgICBpZjogbmVlZHMuY2ktY29uZmlnLm91dHB1dHMuZW5hYmxlZCA9PSAneWVzJworICAgIHN0cmF0ZWd5OgorICAgICAgbWF0cml4OgorICAgICAgICB2ZWN0b3I6CisgICAgICAgICAgLSBqb2JuYW1lOiBsaW51eC1jbGFuZworICAgICAgICAgICAgY2M6IGNsYW5nCisgICAgICAgICAgICBwb29sOiB1YnVudHUtbGF0ZXN0CisgICAgICAgICAgLSBqb2JuYW1lOiBsaW51eC1nY2MKKyAgICAgICAgICAgIGNjOiBnY2MKKyAgICAgICAgICAgIHBvb2w6IHVidW50dS1sYXRlc3QKKyAgICAgICAgICAtIGpvYm5hbWU6IG9zeC1jbGFuZworICAgICAgICAgICAgY2M6IGNsYW5nCisgICAgICAgICAgICBwb29sOiBtYWNvcy1sYXRlc3QKKyAgICAgICAgICAtIGpvYm5hbWU6IG9zeC1nY2MKKyAgICAgICAgICAgIGNjOiBnY2MKKyAgICAgICAgICAgIHBvb2w6IG1hY29zLWxhdGVzdAorICAgICAgICAgIC0gam9ibmFtZTogR0VUVEVYVF9QT0lTT04KKyAgICAgICAgICAgIGNjOiBnY2MKKyAgICAgICAgICAgIHBvb2w6IHVidW50dS1sYXRlc3QKKyAgICBlbnY6CisgICAgICBDQzogJHt7bWF0cml4LnZlY3Rvci5jY319CisgICAgICBqb2JuYW1lOiAke3ttYXRyaXgudmVjdG9yLmpvYm5hbWV9fQorICAgIHJ1bnMtb246ICR7e21hdHJpeC52ZWN0b3IucG9vbH19CisgICAgc3RlcHM6CisgICAgLSB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QHYxCisgICAgLSBydW46IGNpL2luc3RhbGwtZGVwZW5kZW5jaWVzLnNoCisgICAgLSBydW46IGNpL3J1bi1idWlsZC1hbmQtdGVzdHMuc2gKKyAgICAtIHJ1bjogY2kvcHJpbnQtdGVzdC1mYWlsdXJlcy5zaAorICAgICAgaWY6IGZhaWx1cmUoKQorICAgIC0gbmFtZTogVXBsb2FkIGZhaWxlZCB0ZXN0cycgZGlyZWN0b3JpZXMKKyAgICAgIGlmOiBmYWlsdXJlKCkgJiYgZW52LkZBSUxFRF9URVNUX0FSVElGQUNUUyAhPSAnJworICAgICAgdXNlczogYWN0aW9ucy91cGxvYWQtYXJ0aWZhY3RAdjEKKyAgICAgIHdpdGg6CisgICAgICAgIG5hbWU6IGZhaWxlZC10ZXN0cy0ke3ttYXRyaXgudmVjdG9yLmpvYm5hbWV9fQorICAgICAgICBwYXRoOiAke3tlbnYuRkFJTEVEX1RFU1RfQVJUSUZBQ1RTfX0KKyAgZG9ja2VyaXplZDoKKyAgICBuZWVkczogY2ktY29uZmlnCisgICAgaWY6IG5lZWRzLmNpLWNvbmZpZy5vdXRwdXRzLmVuYWJsZWQgPT0gJ3llcycKKyAgICBzdHJhdGVneToKKyAgICAgIG1hdHJpeDoKKyAgICAgICAgdmVjdG9yOgorICAgICAgICAtIGpvYm5hbWU6IGxpbnV4LW11c2wKKyAgICAgICAgICBpbWFnZTogYWxwaW5lCisgICAgICAgIC0gam9ibmFtZTogTGludXgzMgorICAgICAgICAgIGltYWdlOiBkYWFsZC91YnVudHUzMjp4ZW5pYWwKKyAgICBlbnY6CisgICAgICBqb2JuYW1lOiAke3ttYXRyaXgudmVjdG9yLmpvYm5hbWV9fQorICAgIHJ1bnMtb246IHVidW50dS1sYXRlc3QKKyAgICBjb250YWluZXI6ICR7e21hdHJpeC52ZWN0b3IuaW1hZ2V9fQorICAgIHN0ZXBzOgorICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2MQorICAgIC0gcnVuOiBjaS9pbnN0YWxsLWRvY2tlci1kZXBlbmRlbmNpZXMuc2gKKyAgICAtIHJ1bjogY2kvcnVuLWJ1aWxkLWFuZC10ZXN0cy5zaAorICAgIC0gcnVuOiBjaS9wcmludC10ZXN0LWZhaWx1cmVzLnNoCisgICAgICBpZjogZmFpbHVyZSgpCisgICAgLSBuYW1lOiBVcGxvYWQgZmFpbGVkIHRlc3RzJyBkaXJlY3RvcmllcworICAgICAgaWY6IGZhaWx1cmUoKSAmJiBlbnYuRkFJTEVEX1RFU1RfQVJUSUZBQ1RTICE9ICcnCisgICAgICB1c2VzOiBhY3Rpb25zL3VwbG9hZC1hcnRpZmFjdEB2MQorICAgICAgd2l0aDoKKyAgICAgICAgbmFtZTogZmFpbGVkLXRlc3RzLSR7e21hdHJpeC52ZWN0b3Iuam9ibmFtZX19CisgICAgICAgIHBhdGg6ICR7e2Vudi5GQUlMRURfVEVTVF9BUlRJRkFDVFN9fQorICBzdGF0aWMtYW5hbHlzaXM6CisgICAgbmVlZHM6IGNpLWNvbmZpZworICAgIGlmOiBuZWVkcy5jaS1jb25maWcub3V0cHV0cy5lbmFibGVkID09ICd5ZXMnCisgICAgZW52OgorICAgICAgam9ibmFtZTogU3RhdGljQW5hbHlzaXMKKyAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0CisgICAgc3RlcHM6CisgICAgLSB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QHYxCisgICAgLSBydW46IGNpL2luc3RhbGwtZGVwZW5kZW5jaWVzLnNoCisgICAgLSBydW46IGNpL3J1bi1zdGF0aWMtYW5hbHlzaXMuc2gKKyAgZG9jdW1lbnRhdGlvbjoKKyAgICBuZWVkczogY2ktY29uZmlnCisgICAgaWY6IG5lZWRzLmNpLWNvbmZpZy5vdXRwdXRzLmVuYWJsZWQgPT0gJ3llcycKKyAgICBlbnY6CisgICAgICBqb2JuYW1lOiBEb2N1bWVudGF0aW9uCisgICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdAorICAgIHN0ZXBzOgorICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2MQorICAgIC0gcnVuOiBjaS9pbnN0YWxsLWRlcGVuZGVuY2llcy5zaAorICAgIC0gcnVuOiBjaS90ZXN0LWRvY3VtZW50YXRpb24uc2gKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDY0ODNiMjEuLmVlNTA5YTIgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMSw4ICsxLDI0MiBAQAotLkRTX1N0b3JlCi1jb25maWcubWFrCi1HaXQgR3VpLmFwcCoKLWdpdC1ndWkudGNsCi1HSVQtVkVSU0lPTi1GSUxFCi1HSVQtR1VJLVZBUlMKLWdpdC1ndWkKLWxpYi90Y2xJbmRleAorL2Z1enotY29tbWl0LWdyYXBoCisvZnV6el9jb3Jwb3JhCisvZnV6ei1wYWNrLWhlYWRlcnMKKy9mdXp6LXBhY2staWR4CisvR0lULUJVSUxELU9QVElPTlMKKy9HSVQtQ0ZMQUdTCisvR0lULUxERkxBR1MKKy9HSVQtUFJFRklYCisvR0lULVBFUkwtREVGSU5FUworL0dJVC1QRVJMLUhFQURFUgorL0dJVC1QWVRIT04tVkFSUworL0dJVC1TQ1JJUFQtREVGSU5FUworL0dJVC1VU0VSLUFHRU5UCisvR0lULVZFUlNJT04tRklMRQorL2Jpbi13cmFwcGVycy8KKy9naXQKKy9naXQtYWRkCisvZ2l0LWFkZC0taW50ZXJhY3RpdmUKKy9naXQtYW0KKy9naXQtYW5ub3RhdGUKKy9naXQtYXBwbHkKKy9naXQtYXJjaGltcG9ydAorL2dpdC1hcmNoaXZlCisvZ2l0LWJpc2VjdAorL2dpdC1iaXNlY3QtLWhlbHBlcgorL2dpdC1ibGFtZQorL2dpdC1icmFuY2gKKy9naXQtYnVncmVwb3J0CisvZ2l0LWJ1bmRsZQorL2dpdC1jYXQtZmlsZQorL2dpdC1jaGVjay1hdHRyCisvZ2l0LWNoZWNrLWlnbm9yZQorL2dpdC1jaGVjay1tYWlsbWFwCisvZ2l0LWNoZWNrLXJlZi1mb3JtYXQKKy9naXQtY2hlY2tvdXQKKy9naXQtY2hlY2tvdXQtaW5kZXgKKy9naXQtY2hlcnJ5CisvZ2l0LWNoZXJyeS1waWNrCisvZ2l0LWNsZWFuCisvZ2l0LWNsb25lCisvZ2l0LWNvbHVtbgorL2dpdC1jb21taXQKKy9naXQtY29tbWl0LWdyYXBoCisvZ2l0LWNvbW1pdC10cmVlCisvZ2l0LWNvbmZpZworL2dpdC1jb3VudC1vYmplY3RzCisvZ2l0LWNyZWRlbnRpYWwKKy9naXQtY3JlZGVudGlhbC1jYWNoZQorL2dpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24KKy9naXQtY3JlZGVudGlhbC1zdG9yZQorL2dpdC1jdnNleHBvcnRjb21taXQKKy9naXQtY3ZzaW1wb3J0CisvZ2l0LWN2c3NlcnZlcgorL2dpdC1kYWVtb24KKy9naXQtZGlmZgorL2dpdC1kaWZmLWZpbGVzCisvZ2l0LWRpZmYtaW5kZXgKKy9naXQtZGlmZi10cmVlCisvZ2l0LWRpZmZ0b29sCisvZ2l0LWRpZmZ0b29sLS1oZWxwZXIKKy9naXQtZGVzY3JpYmUKKy9naXQtZW52LS1oZWxwZXIKKy9naXQtZmFzdC1leHBvcnQKKy9naXQtZmFzdC1pbXBvcnQKKy9naXQtZmV0Y2gKKy9naXQtZmV0Y2gtcGFjaworL2dpdC1maWx0ZXItYnJhbmNoCisvZ2l0LWZtdC1tZXJnZS1tc2cKKy9naXQtZm9yLWVhY2gtcmVmCisvZ2l0LWZvcm1hdC1wYXRjaAorL2dpdC1mc2NrCisvZ2l0LWZzY2stb2JqZWN0cworL2dpdC1nYworL2dpdC1nZXQtdGFyLWNvbW1pdC1pZAorL2dpdC1ncmVwCisvZ2l0LWhhc2gtb2JqZWN0CisvZ2l0LWhlbHAKKy9naXQtaHR0cC1iYWNrZW5kCisvZ2l0LWh0dHAtZmV0Y2gKKy9naXQtaHR0cC1wdXNoCisvZ2l0LWltYXAtc2VuZAorL2dpdC1pbmRleC1wYWNrCisvZ2l0LWluaXQKKy9naXQtaW5pdC1kYgorL2dpdC1pbnRlcnByZXQtdHJhaWxlcnMKKy9naXQtaW5zdGF3ZWIKKy9naXQtbG9nCisvZ2l0LWxzLWZpbGVzCisvZ2l0LWxzLXJlbW90ZQorL2dpdC1scy10cmVlCisvZ2l0LW1haWxpbmZvCisvZ2l0LW1haWxzcGxpdAorL2dpdC1tZXJnZQorL2dpdC1tZXJnZS1iYXNlCisvZ2l0LW1lcmdlLWluZGV4CisvZ2l0LW1lcmdlLWZpbGUKKy9naXQtbWVyZ2UtdHJlZQorL2dpdC1tZXJnZS1vY3RvcHVzCisvZ2l0LW1lcmdlLW9uZS1maWxlCisvZ2l0LW1lcmdlLW91cnMKKy9naXQtbWVyZ2UtcmVjdXJzaXZlCisvZ2l0LW1lcmdlLXJlc29sdmUKKy9naXQtbWVyZ2Utc3VidHJlZQorL2dpdC1tZXJnZXRvb2wKKy9naXQtbWVyZ2V0b29sLS1saWIKKy9naXQtbWt0YWcKKy9naXQtbWt0cmVlCisvZ2l0LW11bHRpLXBhY2staW5kZXgKKy9naXQtbXYKKy9naXQtbmFtZS1yZXYKKy9naXQtbm90ZXMKKy9naXQtcDQKKy9naXQtcGFjay1yZWR1bmRhbnQKKy9naXQtcGFjay1vYmplY3RzCisvZ2l0LXBhY2stcmVmcworL2dpdC1wYXJzZS1yZW1vdGUKKy9naXQtcGF0Y2gtaWQKKy9naXQtcHJ1bmUKKy9naXQtcHJ1bmUtcGFja2VkCisvZ2l0LXB1bGwKKy9naXQtcHVzaAorL2dpdC1xdWlsdGltcG9ydAorL2dpdC1yYW5nZS1kaWZmCisvZ2l0LXJlYWQtdHJlZQorL2dpdC1yZWJhc2UKKy9naXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMKKy9naXQtcmVjZWl2ZS1wYWNrCisvZ2l0LXJlZmxvZworL2dpdC1yZW1vdGUKKy9naXQtcmVtb3RlLWh0dHAKKy9naXQtcmVtb3RlLWh0dHBzCisvZ2l0LXJlbW90ZS1mdHAKKy9naXQtcmVtb3RlLWZ0cHMKKy9naXQtcmVtb3RlLWZkCisvZ2l0LXJlbW90ZS1leHQKKy9naXQtcmVtb3RlLXRlc3RweQorL2dpdC1yZW1vdGUtdGVzdHN2bgorL2dpdC1yZXBhY2sKKy9naXQtcmVwbGFjZQorL2dpdC1yZXF1ZXN0LXB1bGwKKy9naXQtcmVyZXJlCisvZ2l0LXJlc2V0CisvZ2l0LXJlc3RvcmUKKy9naXQtcmV2LWxpc3QKKy9naXQtcmV2LXBhcnNlCisvZ2l0LXJldmVydAorL2dpdC1ybQorL2dpdC1zZW5kLWVtYWlsCisvZ2l0LXNlbmQtcGFjaworL2dpdC1zZXJ2ZQorL2dpdC1zaC1pMThuCisvZ2l0LXNoLWkxOG4tLWVudnN1YnN0CisvZ2l0LXNoLXNldHVwCisvZ2l0LXNoLWkxOG4KKy9naXQtc2hlbGwKKy9naXQtc2hvcnRsb2cKKy9naXQtc2hvdworL2dpdC1zaG93LWJyYW5jaAorL2dpdC1zaG93LWluZGV4CisvZ2l0LXNob3ctcmVmCisvZ2l0LXNwYXJzZS1jaGVja291dAorL2dpdC1zdGFnZQorL2dpdC1zdGFzaAorL2dpdC1zdGF0dXMKKy9naXQtc3RyaXBzcGFjZQorL2dpdC1zdWJtb2R1bGUKKy9naXQtc3VibW9kdWxlLS1oZWxwZXIKKy9naXQtc3ZuCisvZ2l0LXN3aXRjaAorL2dpdC1zeW1ib2xpYy1yZWYKKy9naXQtdGFnCisvZ2l0LXVucGFjay1maWxlCisvZ2l0LXVucGFjay1vYmplY3RzCisvZ2l0LXVwZGF0ZS1pbmRleAorL2dpdC11cGRhdGUtcmVmCisvZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbworL2dpdC11cGxvYWQtYXJjaGl2ZQorL2dpdC11cGxvYWQtcGFjaworL2dpdC12YXIKKy9naXQtdmVyaWZ5LWNvbW1pdAorL2dpdC12ZXJpZnktcGFjaworL2dpdC12ZXJpZnktdGFnCisvZ2l0LXdlYi0tYnJvd3NlCisvZ2l0LXdoYXRjaGFuZ2VkCisvZ2l0LXdvcmt0cmVlCisvZ2l0LXdyaXRlLXRyZWUKKy9naXQtY29yZS0qLz8qCisvZ2l0d2ViL0dJVFdFQi1CVUlMRC1PUFRJT05TCisvZ2l0d2ViL2dpdHdlYi5jZ2kKKy9naXR3ZWIvc3RhdGljL2dpdHdlYi5qcworL2dpdHdlYi9zdGF0aWMvZ2l0d2ViLm1pbi4qCisvY29uZmlnLWxpc3QuaAorL2NvbW1hbmQtbGlzdC5oCisqLnRhci5negorKi5kc2MKKyouZGViCisvZ2l0LnNwZWMKKyouZXhlCisqLlthb3NdCisqLnB5W2NvXQorLmRlcGVuZC8KKyouZ2NkYQorKi5nY25vCisqLmdjb3YKKy9jb3ZlcmFnZS11bnRlc3RlZC1mdW5jdGlvbnMKKy9jb3Zlcl9kYi8KKy9jb3Zlcl9kYl9odG1sLworKisKKy9jb25maWcubWFrCisvYXV0b200dGUuY2FjaGUKKy9jb25maWcuY2FjaGUKKy9jb25maWcubG9nCisvY29uZmlnLnN0YXR1cworL2NvbmZpZy5tYWsuYXV0b2dlbgorL2NvbmZpZy5tYWsuYXBwZW5kCisvY29uZmlndXJlCisvLnZzY29kZS8KKy90YWdzCisvVEFHUworL2NzY29wZSoKKyouaGNjCisqLm9iagorKi5saWIKKyoucmVzCisqLnNsbgorKi5zdW8KKyoubmNiCisqLnZjcHJvagorKi51c2VyCisqLmlkYgorKi5wZGIKKyouaWxrCisqLmlvYmoKKyouaXBkYgorKi5kbGwKKy52cy8KK0RlYnVnLworUmVsZWFzZS8KKy9VcGdyYWRlTG9nKi5odG0KKy9naXQuVkMuVkMub3BlbmRiCisvZ2l0LlZDLmRiCisqLmRTWU0KZGlmZiAtLWdpdCBhLy5naXRtb2R1bGVzIGIvLmdpdG1vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JlZWJkYQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRtb2R1bGVzCkBAIC0wLDAgKzEsNCBAQAorW3N1Ym1vZHVsZSAic2hhMWNvbGxpc2lvbmRldGVjdGlvbiJdCisJcGF0aCA9IHNoYTFjb2xsaXNpb25kZXRlY3Rpb24KKwl1cmwgPSBodHRwczovL2dpdGh1Yi5jb20vY3ItbWFyY3N0ZXZlbnMvc2hhMWNvbGxpc2lvbmRldGVjdGlvbi5naXQKKwlicmFuY2ggPSBtYXN0ZXIKZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlN2FiYQotLS0gL2Rldi9udWxsCisrKyBiLy5tYWlsbWFwCkBAIC0wLDAgKzEsMjk3IEBACisjCisjIFRoaXMgbGlzdCBpcyB1c2VkIGJ5IGdpdC1zaG9ydGxvZyB0byBmaXggYSBmZXcgYm90Y2hlZCBuYW1lIHRyYW5zbGF0aW9ucworIyBpbiB0aGUgZ2l0IGFyY2hpdmUsIGVpdGhlciBiZWNhdXNlIHRoZSBhdXRob3IncyBmdWxsIG5hbWUgd2FzIG1lc3NlZCB1cAorIyBhbmQvb3Igbm90IGFsd2F5cyB3cml0dGVuIHRoZSBzYW1lIHdheSwgbWFraW5nIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUKKyMgc2FtZSBwZXJzb24gYXBwZWFyaW5nIG5vdCB0byBiZSBzby4KKyMKKworPG5pY29AZmx1eG5pYy5uZXQ+IDxuaWNvQGNhbS5vcmc+CitBbGVqYW5kcm8gUi4gU2VkZcOxbyA8YXNlZGVub0BNSVQuRURVPiA8YXNlZGVub0BtaXQuZWR1PgorQWxleCBCZW5uw6llIDxrZXJuZWwtaGFja2VyQGJlbm5lZS5jb20+CitBbGV4IFJpZXNlbiA8cmFhLmxrbWxAZ21haWwuY29tPiA8Zm9yazBAdC1vbmxpbmUuZGU+CitBbGV4IFJpZXNlbiA8cmFhLmxrbWxAZ21haWwuY29tPiA8cmFhQGxpbWJvLmxvY2FsZG9tYWluPgorQWxleCBSaWVzZW4gPHJhYS5sa21sQGdtYWlsLmNvbT4gPHJhYUBzdGVlbC5ob21lPgorQWxleCBWYW5kaXZlciA8YWxleEBjaG1yci5uZXQ+IDxhbGV4bXZATUlULkVEVT4KK0FsZXhhbmRlciBHYXZyaWxvdiA8YW5nYXZyaWxvdkBnbWFpbC5jb20+CitBbGV4YW5kZXIgS3VsZXNob3YgPGt1bGVzaG92bWFpbEBnbWFpbC5jb20+CitBbGV4ZXkgU2h1bWtpbiA8YWxleC5jcmV6b2ZmQGdtYWlsLmNvbT4gPHphcHBlZEBtYWlsLnJ1PgorQWxleGV5IFNodW1raW4gPGFsZXguY3Jlem9mZkBnbWFpbC5jb20+IDxBbGV4LkNyZXpvZmZAZ21haWwuY29tPgorQW5kZXJzIEthc2VvcmcgPGFuZGVyc2tATUlULkVEVT4gPGFuZGVyc2tAa3NwbGljZS5jb20+CitBbmRlcnMgS2FzZW9yZyA8YW5kZXJza0BNSVQuRURVPiA8YW5kZXJza0BtaXQuZWR1PgorQW5kcmV5IE1hem8gPGFoaXBwb0B5YW5kZXguY29tPiBNYXpvLCBBbmRyZXkgPGFtYXpvQGNoZWNrdmlkZW8uY29tPgorQW5lZXNoIEt1bWFyIEsuViA8YW5lZXNoLmt1bWFyQGdtYWlsLmNvbT4KK0Ftb3MgV2F0ZXJsYW5kIDxhcHdAZGViaWFuLm9yZz4gPGFwd0Byb3NzYnkubWV0ci5vdS5lZHU+CitBbW9zIFdhdGVybGFuZCA8YXB3QGRlYmlhbi5vcmc+IDxhcHdAdXMuaWJtLmNvbT4KK0JlbiBQZWFydCA8YmVucGVhcnRAbWljcm9zb2Z0LmNvbT4gPEJlbi5QZWFydEBtaWNyb3NvZnQuY29tPgorQmVuIFBlYXJ0IDxiZW5wZWFydEBtaWNyb3NvZnQuY29tPiA8cGVhcnRiZW5AZ21haWwuY29tPgorQmVuIFdhbHRvbiA8YmR3YWx0b25AZ21haWwuY29tPiA8YndhbHRvbkBhcnRzY2kudXRvcm9udG8uY2E+CitCZW5vaXQgU2lnb3VyZSA8dHN1bmFuZXRAZ21haWwuY29tPiA8dHN1bmFAbHJkZS5lcGl0YS5mcj4KK0Jlcm50IEhhbnNlbiA8YmVybnRAbm9yYW5nLmNhPiA8YmVybnRAYWx1bW5pLnV3YXRlcmxvby5jYT4KK0JyYW5kb24gQ2FzZXkgPGRyYWZuZWxAZ21haWwuY29tPiA8Y2FzZXlAbnJsc3NjLm5hdnkubWlsPgorQnJhbmRvbiBXaWxsaWFtcyA8YndpbGxpYW1zLmVuZ0BnbWFpbC5jb20+IDxibXdpbGxAZ29vZ2xlLmNvbT4KK2JyaWFuIG0uIGNhcmxzb24gPHNhbmRhbHNAY3J1c3R5dG9vdGhwYXN0ZS5uZXQ+CiticmlhbiBtLiBjYXJsc29uIDxzYW5kYWxzQGNydXN0eXRvb3RocGFzdGUubmV0PiA8c2FuZGFsc0BjcnVzdHl0b290aHBhc3RlLmF0aC5jeD4KK2JyaWFuIG0uIGNhcmxzb24gPHNhbmRhbHNAY3J1c3R5dG9vdGhwYXN0ZS5uZXQ+IDxiazIyMDRAZ2l0aHViLmNvbT4KK0JyeWFuIExhcnNlbiA8YnJ5YW5AbGFyc2VuLnN0PiA8YnJ5YW4ubGFyc2VuQGdtYWlsLmNvbT4KK0JyeWFuIExhcnNlbiA8YnJ5YW5AbGFyc2VuLnN0PiA8YnJ5YW5sYXJzZW5AeWFob28uY29tPgorQ2hlbmcgUmVucXVhbiA8Y3JxdWFuQGdtYWlsLmNvbT4KK0NocmlzIFNob2VtYWtlciA8Yy5zaG9lbWFrZXJAY294Lm5ldD4KK0NocmlzIFdyaWdodCA8Y2hyaXN3QHNvdXMtc29sLm9yZz4gPGNocmlzd0Bvc2RsLm9yZz4KK0NocmlzdGlhbiBMdWR3aWcgPGNocmlzc2ljb29sQGdtYWlsLmNvbT4gPGNocmlzc2ljb29sQGdvb2dsZW1haWwuY29tPgorQ29yZCBTZWVsZSA8Y293b3NlQGdtYWlsLmNvbT4gPGNvd29zZUBnb29nbGVtYWlsLmNvbT4KK0NocmlzdGlhbiBDb3VkZXIgPGNocmlzY29vbEB0dXhmYW1pbHkub3JnPiA8Y2hyaXN0aWFuLmNvdWRlckBnbWFpbC5jb20+CitDaHJpc3RpYW4gU3RpbW1pbmcgPHN0aW1taW5nQHR1aGguZGU+IDxjaHNAY2tpc3RlLmdvZXRoZWFsbGVlPgorQ2hyaXN0b3BoZXIgRMOtYXogUml2ZXJvcyA8Y2hyaXNhZHJAZ2VudG9vLm9yZz4gQ2hyaXN0b3BoZXIgRGlheiBSaXZlcm9zCitDbGVtZW5zIEJ1Y2hhY2hlciA8ZHJpenpkQGdteC5uZXQ+IDxkcml6emRAYW9uLmF0PgorQ2xlbWVucyBCdWNoYWNoZXIgPGRyaXp6ZEBnbXgubmV0PiA8Y2xlbWVucy5idWNoYWNoZXJAaW50ZWwuY29tPgorQ3NhYmEgSGVuayA8Y3NhYmFAZ2x1c3Rlci5jb20+IDxjc2FiYUBsb3dsaWZlLmh1PgorRGFuIEpvaG5zb24gPGNvbXB1dGVyZHJ1aWRAZ21haWwuY29tPgorRGFuYSBMLiBIb3cgPGRhbmFob3dAZ21haWwuY29tPiA8aG93QGRlYXRodmFsbGV5LmNzd2l0Y2guY29tPgorRGFuYSBMLiBIb3cgPGRhbmFob3dAZ21haWwuY29tPiBEYW5hIEhvdworRGFuaWVsIEJhcmthbG93IDxiYXJrYWxvd0BpYWJlcnZvbi5vcmc+CitEYW5pZWwgS25pdHRsLUZyYW5rIDxrbml0dGw4OUBnb29nbGVtYWlsLmNvbT4ga25pdHRsCitEYW5pZWwgVHJzdGVuamFrIDxkYW5pZWwudHJzdGVuamFrQGdtYWlsLmNvbT4gPGRhbmllbC50cnN0ZW5qYWtAb25saW5lLmRlPgorRGFuaWVsIFRyc3RlbmphayA8ZGFuaWVsLnRyc3Rlbmpha0BnbWFpbC5jb20+IDx0cnN0ZW5Ac2NpZW5jZS1jb21wdXRpbmcuZGU+CitEYXZpZCBCcm93biA8Z2l0QGRhdmlkYi5vcmc+IDxkYXZpZGJAcXVpY2luYy5jb20+CitEYXZpZCBELiBLaWx6ZXIgPGRka2lsemVyQGtpbHplci5uZXQ+CitEYXZpZCBLw6VnZWRhbCA8ZGF2aWRrQGx5c2F0b3IubGl1LnNlPgorRGF2aWQgUmVpc3MgPGRyZWlzc0BmYWNlYm9vay5jb20+IDxkcmVpc3NAZHJlaXNzLXZtd2FyZS4obm9uZSk+CitEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitEYXZpZCBUdXJuZXIgPG5vdmFsaXNAbm92YWxpcy5vcmc+IDxkdHVybmVyQHR3b3BlbnNvdXJjZS5jb20+CitEYXZpZCBUdXJuZXIgPG5vdmFsaXNAbm92YWxpcy5vcmc+IDxkdHVybmVyQHR3b3NpZ21hLmNvbT4KK0RlcnJpY2sgU3RvbGVlIDxkc3RvbGVlQG1pY3Jvc29mdC5jb20+IDxzdG9sZWVAZ21haWwuY29tPgorRGVycmljayBTdG9sZWUgPGRzdG9sZWVAbWljcm9zb2Z0LmNvbT4gRGVycmljayBTdG9sZWUgdmlhIEdpdEdpdEdhZGdldCA8Z2l0Z2l0Z2FkZ2V0QGdtYWlsLmNvbT4KK0Rlc2tpbiBNaWxsZXIgPGRlc2tpbm1AdW1pY2guZWR1PgorxJBvw6BuIFRy4bqnbiBDw7RuZyBEYW5oIDxjb25nZGFuaHF4QGdtYWlsLmNvbT4gRG9hbiBUcmFuIENvbmcgRGFuaAorRGlyayBTw7xzc2Vyb3R0IDxuZXdzbGV0dGVyQGRpcmsubXkxLmNjPgorRXJpYyBCbGFrZSA8ZWJsYWtlQHJlZGhhdC5jb20+IDxlYmI5QGJ5dS5uZXQ+CitFcmljIEhhbmNocm93IDxlcmljLmhhbmNocm93QGdtYWlsLmNvbT4gPG9mZmJ5MUBibGFyZy5uZXQ+CitFcmljIFMuIFJheW1vbmQgPGVzckB0aHlyc3VzLmNvbT4KK0VyaWMgV29uZyA8ZUA4MHgyNC5vcmc+IDxub3JtYWxwZXJzb25AeWhidC5uZXQ+CitFcmlrIEZheWUtTHVuZCA8a3VzbWFiaXRlQGdtYWlsLmNvbT4gPGt1c21hYml0ZUBnb29nbGVtYWlsLmNvbT4KK0V5dmluZCBCZXJuaGFyZHNlbiA8ZXl2aW5kLmJlcm5oYXJkc2VuQGdtYWlsLmNvbT4gPGV5dmluZC1naXRAb3Jha2VsLm50bnUubm8+CitGYW5neWkgWmhvdSA8ZmFuZ3lpLnpob3VAeXVyaWtvLm1vZT4gWmhvdSBGYW5neWkKK0Zsb3JpYW4gQWNobGVpdG5lciA8Zmxvcmlhbi5hY2hsZWl0bmVyLjIuNi4zMUBnbWFpbC5jb20+IDxmbG9yaWFuLmFjaGxlaXRuZXIyLjYuMzFAZ21haWwuY29tPgorRnJhbmNrIEJ1aS1IdXUgPHZhZ2Fib24ueHl6QGdtYWlsLmNvbT4gPGZidWlodXVAZ21haWwuY29tPgorRnJhbmsgTGljaHRlbmhlbGQgPGZyYW5rQGxpY2h0ZW5oZWxkLmRlPiA8ZGpwaWdAZGViaWFuLm9yZz4KK0ZyYW5rIExpY2h0ZW5oZWxkIDxmcmFua0BsaWNodGVuaGVsZC5kZT4gPGZsaWNodGVuaGVsZEBhc3Rhcm8uY29tPgorRnJlZHJpayBLdWl2aW5lbiA8ZnJla3VpQGdtYWlsLmNvbT4gPGZyZWt1MDQ1QHN0dWRlbnQubGl1LnNlPgorRnLDqWTDqXJpYyBIZWl0em1hbm4gPGZyZWRlcmljLmhlaXR6bWFubkBnbWFpbC5jb20+CitHYXJyeSBEb2xsZXkgPGdkb2xsZXlAdWNsYS5lZHU+IDxnZG9sbGV5QGFycG5ldHdvcmtzLmNvbT4KK0dyZWcgUHJpY2UgPHByaWNlQG1pdC5lZHU+IDxwcmljZUBNSVQuRURVPgorR3JlZyBQcmljZSA8cHJpY2VAbWl0LmVkdT4gPHByaWNlQGtzcGxpY2UuY29tPgorSGVpa28gVm9pZ3QgPGh2b2lndEBodm9pZ3QubmV0PiA8Z2l0LWxpc3RAaHZvaWd0Lm5ldD4KK0guIE1lcmlqbiBCcmFuZCA8aC5tLmJyYW5kQHhzNGFsbC5ubD4gSC5NZXJpam4gQnJhbmQgPGgubS5icmFuZEB4czRhbGwubmw+CitILiBQZXRlciBBbnZpbiA8aHBhQHp5dG9yLmNvbT4gPGhwYUBib25kZS5zYy5vcmlvbm11bHRpLmNvbT4KK0guIFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPiA8aHBhQHNteXJuby5ob3MuYW52aW4ub3JnPgorSC4gUGV0ZXIgQW52aW4gPGhwYUB6eXRvci5jb20+IDxocGFAdGF6ZW5kYS5zYy5vcmlvbm11bHRpLmNvbT4KK0guIFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPiA8aHBhQHRyYW50b3IuaG9zLmFudmluLm9yZz4KK0hhbi1XZW4gTmllbmh1eXMgPGhhbndlbkBnb29nbGUuY29tPiBIYW4tV2VuIE5pZW5odXlzIDxoYW53ZW5AeHM0YWxsLm5sPgorSG9yc3QgSC4gdm9uIEJyYW5kIDx2b25icmFuZEBpbmYudXRmc20uY2w+CitKLiBCcnVjZSBGaWVsZHMgPGJmaWVsZHNAY2l0aS51bWljaC5lZHU+IDxiZmllbGRzQGZpZWxkc2VzLm9yZz4KK0ouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BjaXRpLnVtaWNoLmVkdT4gPGJmaWVsZHNAcGlnLmxpbnV4ZGV2LnVzLmRlbGwuY29tPgorSi4gQnJ1Y2UgRmllbGRzIDxiZmllbGRzQGNpdGkudW1pY2guZWR1PiA8YmZpZWxkc0BwdXp6bGUuZmllbGRzZXMub3JnPgorSmFrdWIgTmFyxJlic2tpIDxqbmFyZWJAZ21haWwuY29tPgorSmFtZXMgWSBLbmlnaHQgPGprbmlnaHRAaXRhc29mdHdhcmUuY29tPiA8Zm9vbUBmdWhtLm5ldD4KKyMgVGhlIDIgZm9sbG93aW5nIGF1dGhvcnMgYXJlIHByb2JhYmx5IHRoZSBzYW1lIHBlcnNvbiwKKyMgYnV0IGJvdGggZW1haWxzIGJvdW5jZS4KK0phc29uIE1jTXVsbGFuIDxqYXNvbi5tY211bGxhbkB0aW1lc3lzLmNvbT4KK0phc29uIE1jTXVsbGFuIDxtY211bGxhbkBuZXRhcHAuY29tPgorSmFzb24gUmllZHkgPGVqckBlZWNzLmJlcmtlbGV5LmVkdT4gPGVqckBFRUNTLkJlcmtlbGV5LkVEVT4KK0phc29uIFJpZWR5IDxlanJAZWVjcy5iZXJrZWxleS5lZHU+IDxlanJAY3MuYmVya2VsZXkuZWR1PgorSmF5IFNvZmZpYW4gPGpheXNvZmZpYW5AZ21haWwuY29tPiA8amF5c29mZmlhbitnaXRAZ21haWwuY29tPgorSmVhbi1Ob8OrbCBBdmlsYSA8am4uYXZpbGFAZnJlZS5mcj4gSmVhbi1Ob2VsIEF2aWxhCitKZWFuLU5vw6tsIEF2aWxhIDxqbi5hdmlsYUBmcmVlLmZyPiBKZWFuLU5vw6tsIEFWSUxBCitKZWZmIEtpbmcgPHBlZmZAcGVmZi5uZXQ+IDxwZWZmQGdpdGh1Yi5jb20+CitKZWZmIE11aXplbGFhciA8am11aXplbGFhckBtb3ppbGxhLmNvbT4gPGplZmZAaW5maWRpZ20ubmV0PgorSmVucyBBeGJvZSA8YXhib2VAa2VybmVsLmRrPiA8YXhib2VAc3VzZS5kZT4KK0plbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4gPGplbnMuYXhib2VAb3JhY2xlLmNvbT4KK0plbnMgTGluZHN0csO2bSA8amxAb3BlcmEuY29tPiBKZW5zIExpbmRzdHJvbSA8amxAb3BlcmEuY29tPgorSmltIE1leWVyaW5nIDxqaW1AbWV5ZXJpbmcubmV0PiA8bWV5ZXJpbmdAcmVkaGF0LmNvbT4KK0pvYWNoaW0gQmVyZGFsIEhhZ2EgPGNqaGFnYUBmeXMudWlvLm5vPgorSm9hY2hpbSBKYWJsb24gPGpvYWNoaW0uamFibG9uQHBlb3BsZS1kb2MuY29tPiA8ZXdqb2FjaGltQGdtYWlsLmNvbT4KK0pvaGFubmVzIFNjaGluZGVsaW4gPEpvaGFubmVzLlNjaGluZGVsaW5AZ214LmRlPiA8am9oYW5uZXMuc2NoaW5kZWxpbkBnbXguZGU+CitKb2hhbm5lcyBTY2hpbmRlbGluIDxKb2hhbm5lcy5TY2hpbmRlbGluQGdteC5kZT4gSm9oYW5uZXMgU2NoaW5kZWxpbiB2aWEgR2l0R2l0R2FkZ2V0IDxnaXRnaXRnYWRnZXRAZ21haWwuY29tPgorSm9oYW5uZXMgU2l4dCA8ajZ0QGtkYmcub3JnPiA8Si5TaXh0QGV1ZGFwdGljcy5jb20+CitKb2hhbm5lcyBTaXh0IDxqNnRAa2RiZy5vcmc+IDxqLnNpeHRAdmlzY292ZXJ5Lm5ldD4KK0pvaGFubmVzIFNpeHQgPGo2dEBrZGJnLm9yZz4gPGpvaGFubmVzLnNpeHRAdGVsZWNvbS5hdD4KK0pvaG4gJ1dhcnRob2c5JyBIYXdsZXkgPHdhcnRob2c5QGtlcm5lbC5vcmc+IDx3YXJ0aG9nOUBlYWdsZXNjcmFnLm5ldD4KK0pvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+IDxqZGxAZnJlZXNjYWxlLmNvbT4KK0pvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+IDxqZGxAZnJlZXNjYWxlLm9yZz4KK0pvbiBTZXltb3VyIDxqb24uc2V5bW91ckBnbWFpbC5jb20+IDxqb25AYmxhY2tjdWJlcy5keW5kbnMub3JnPgorSm9uYXRoYW4gTmllZGVyIDxqcm5pZWRlckBnbWFpbC5jb20+IDxqcm5pZWRlckB1Y2hpY2Fnby5lZHU+CitKb25hdGhhbiBkZWwgU3Ryb3RoZXIgPGpvbi5kZWxTdHJvdGhlckBiZXN0YmVmb3JlLnR2PiA8bWFpbGxpc3RAc3RlZWxza2llcy5jb20+CitKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+IDxqb3NoQGZyZWVkZXNrdG9wLm9yZz4KK0pvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4gPGpvc2h0QHVzLmlibS5jb20+CitKdWxpYW4gUGhpbGxpcHMgPGp1bGlhbkBxdWFudHVtZnlyZS5jby51az4gPGpwM0BxdWFudHVtZnlyZS5jby51az4KK0p1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gPGdpdHN0ZXJAcG9ib3guY29tPgorSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiA8anVuaW9AaGVyYS5rZXJuZWwub3JnPgorSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiA8anVuaW9Aa2VybmVsLm9yZz4KK0p1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gPGp1bmlvQHBvYm94LmNvbT4KK0p1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gPGp1bmlvQHR3aW5zdW4uY29tPgorSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiA8anVua2lvQGNveC5uZXQ+CitKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IDxqdW5raW9AdHdpbnN1bi5jb20+CitLYWFydGljIFNpdmFyYWFtIDxrYWFydGljLnNpdmFyYWFtQGdtYWlsLmNvbT4gPGthYXJ0aWNzaXZhcmFhbTkxMTk2QGdtYWlsLmNvbT4KK0thcmwgV2liZXJnIDxraGFAdHJlc2thbC5jb20+IEthcmwgIEhhc3NlbHN0csO2bQorS2FybCBXaWJlcmcgPGtoYUB0cmVza2FsLmNvbT4gPGtoYUB5b2dodXJ0LmhlbW1hLnRyZXNrYWwuY29tPgorS2Fyc3RlbiBCbGVlcyA8YmxlZXNAZGNvbi5kZT4gPGthcnN0ZW4uYmxlZXNAZGNvbi5kZT4KK0thcnN0ZW4gQmxlZXMgPGJsZWVzQGRjb24uZGU+IDxrYXJzdGVuLmJsZWVzQGdtYWlsLmNvbT4KK0theSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2cmZ5Lm9yZz4gPGtheS5zaWV2ZXJzQHN1c2UuZGU+CitLYXkgU2lldmVycyA8a2F5LnNpZXZlcnNAdnJmeS5vcmc+IDxrYXlAbWFtLihub25lKT4KK0thenVraSBTYWl0b2ggPGtzYWl0b2g1NjBAZ21haWwuY29tPiBrYXp1a2kgc2FpdG9oIDxrc2FpdG9oNTYwQGdtYWlsLmNvbT4KK0tlaXRoIENhc2NpbyA8a2VpdGhAQ1MuVUNMQS5FRFU+IDxrZWl0aEBjcy51Y2xhLmVkdT4KK0tlbnQgRW5nc3Ryb20gPGtlbnRAbHlzYXRvci5saXUuc2U+CitLZXZpbiBMZXVuZyA8a2V2aW5sc2tAZ21haWwuY29tPgorS2lyaWxsIFNtZWxrb3YgPGtpcnJAbmF2eXR1eC5zcGIucnU+IDxraXJyQGxhbmRhdS5waHlzLnNwYnUucnU+CitLaXJpbGwgU21lbGtvdiA8a2lyckBuYXZ5dHV4LnNwYi5ydT4gPGtpcnJAbW5zLnNwYi5ydT4KK0tudXQgRnJhbmtlIDxLbnV0LkZyYW5rZUBnbXguZGU+IDxrLmZyYW5rZUBzY2llbmNlLWNvbXB1dGluZy5kZT4KK0xhcnMgRG9lbGxlIDxsYXJzLmRvZWxsZUBvbi1saW5lICEgZGU+CitMYXJzIERvZWxsZSA8bGFycy5kb2VsbGVAb24tbGluZS5kZT4KK0xhcnMgTm9zY2hpbnNraSA8bGFyc0BwdWJsaWMubm9zY2hpbnNraS5kZT4gPGxhcnMubm9zY2hpbnNraUByd3RoLWFhY2hlbi5kZT4KK0xpIEhvbmcgPGxlZWhvbmdAcGt1LmVkdS5jbj4KK0xpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4gPHRvcnZhbGRzQGV2by5vc2RsLm9yZz4KK0xpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4gPHRvcnZhbGRzQGc1Lm9zZGwub3JnPgorTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPiA8dG9ydmFsZHNAb3NkbC5vcmc+CitMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+IDx0b3J2YWxkc0BwcGM5NzAub3NkbC5vcmcuKG5vbmUpPgorTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPiA8dG9ydmFsZHNAcHBjOTcwLm9zZGwub3JnPgorTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPiA8dG9ydmFsZHNAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CitMdWthcyBTYW5kc3Ryw7ZtIDxsdWtzYW5AZ21haWwuY29tPiA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CitNYXJjIEtob3V6YW0gPG1hcmMua2hvdXphbUBlcmljc3Nvbi5jb20+IDxtYXJjLmtob3V6YW1AZ21haWwuY29tPgorTWFyYy1BbmRyw6kgTHVyZWF1IDxtYXJjYW5kcmUubHVyZWF1QGdtYWlsLmNvbT4KK01hcmNvIENvc3RhbGJhIDxtY29zdGFsYmFAZ21haWwuY29tPiA8bWNvc3RhbGJhQHlhaG9vLml0PgorTWFyayBMZXZlZGFobCA8bWRsMTIzQHZlcml6b24ubmV0PiA8bWxldmVkYWhsQGdtYWlsLmNvbT4KK01hcmsgUmFkYSA8bWFyYWRhQHV3YXRlcmxvby5jYT4KK01hcnRpbiBMYW5naG9mZiA8bWFydGluQGxhcHRvcC5vcmc+IDxtYXJ0aW5AY2F0YWx5c3QubmV0Lm56PgorTWFydGluIHZvbiBad2VpZ2JlcmdrIDxtYXJ0aW52b256QGdtYWlsLmNvbT4gPG1hcnRpbi52b24uendlaWdiZXJna0BnbWFpbC5jb20+CitNYXNheWEgU3V6dWtpIDxtYXNheWFzdXp1a2lAZ29vZ2xlLmNvbT4gPGRyYWZ0Y29kZUBnbWFpbC5jb20+CitNYXR0IERyYWlzZXkgPG1hdHRAZHJhaXNleS5jYT4gPG1hdHRkcmFpc2V5QHN5bXBhdGljby5jYT4KK01hdHQgS3JhYWkgPGtyYWFpQGZ0YmZzLm9yZz4gPG1hdHQua3JhYWlAYW1vLmFiYm90dC5jb20+CitNYXR0IE1jQ3V0Y2hlbiA8bWF0dEBtYXR0bWNjdXRjaGVuLm5ldD4gPGhhc2hwcm9kdWN0QGdtYWlsLmNvbT4KK01hdHRoaWFzIEtlc3RlbmhvbHogPG1hdHRoaWFzQHNwaW5sb2NrLmNoPiA8bWtAc3BpbmxvY2suY2g+CitNYXR0aGlhcyBSw7xzdGVyIDxtYXR0aGlhcy5ydWVzdGVyQGdtYWlsLmNvbT4gTWF0dGhpYXMgUnVlc3RlcgorTWF0dGhpYXMgVXJsaWNocyA8bWF0dGhpYXNAdXJsaWNocy5kZT4gPHNtdXJmQGtpc3RlLihub25lKT4KK01hdHRoaWFzIFVybGljaHMgPG1hdHRoaWFzQHVybGljaHMuZGU+IDxzbXVyZkBzbXVyZi5ub3Jpcy5kZT4KK01hdHRoaWV1IE1veSA8Z2l0QG1hdHRoaWV1LW1veS5mcj4gPE1hdHRoaWV1Lk1veUBpbWFnLmZyPgorTWljaGFlbCBDb2xlbWFuIDx0dXR1ZmFuQGdtYWlsLmNvbT4KK01pY2hhZWwgSiBHcnViZXIgPGdpdEBncnViaXguZXU+IDxtaWNoYWVsamdydWJlcitnbWFuZUBmYXN0bWFpbC5mbT4KK01pY2hhZWwgSiBHcnViZXIgPGdpdEBncnViaXguZXU+IDxnaXRAZHJtaWNoYS53YXJwbWFpbC5uZXQ+CitNaWNoYWVsIFMuIFRzaXJraW4gPG1zdEBrZXJuZWwub3JnPiA8bXN0QHJlZGhhdC5jb20+CitNaWNoYWVsIFMuIFRzaXJraW4gPG1zdEBrZXJuZWwub3JnPiA8bXN0QG1lbGxhbm94LmNvLmlsPgorTWljaGFlbCBTLiBUc2lya2luIDxtc3RAa2VybmVsLm9yZz4gPG1zdEBkZXYubWVsbGFub3guY28uaWw+CitNaWNoYWVsIFcuIE9sc29uIDxtd29sc29uQGdudS5vcmc+CitNaWNoYWVsIFdpdHRlbiA8bWZ3aXR0ZW5AZ21haWwuY29tPiA8bWZ3aXR0ZW5ATUlULkVEVT4KK01pY2hhZWwgV2l0dGVuIDxtZndpdHRlbkBnbWFpbC5jb20+IDxtZndpdHRlbkBtaXQuZWR1PgorTWljaGFsIFJva29zIDxtaWNoYWwucm9rb3NAbmV4dHNvZnQuY3o+IDxyb2tvc0BuZXh0c29mdC5jej4KK01pY2hlbGUgQmFsbGFiaW8gPGJhcnJhX2N1ZGFAa2F0YW1haWwuY29tPgorTWlrbG9zIFZham5hIDx2bWlrbG9zQGZydWdhbHdhcmUub3JnPiA8dm1pa2xvc0BzdXNlLmN6PgorTmFtaHl1bmcgS2ltIDxuYW1oeXVuZ0BnbWFpbC5jb20+IDxuYW1oeXVuZy5raW1AbGdlLmNvbT4KK05hbWh5dW5nIEtpbSA8bmFtaHl1bmdAZ21haWwuY29tPiA8bmFtaHl1bmdAa2VybmVsLm9yZz4KK05hbmFrbyBTaGlyYWlzaGkgPG5hbmFrbzNAbGF2YWJpdC5jb20+IDxuYW5ha28zQGJsdWVib3R0bGUuY29tPgorTmFuYWtvIFNoaXJhaXNoaSA8bmFuYWtvM0BsYXZhYml0LmNvbT4KK05lbHNvbiBFbGhhZ2UgPG5lbGhhZ2VAbWl0LmVkdT4gPG5lbGhhZ2VATUlULkVEVT4KK05lbHNvbiBFbGhhZ2UgPG5lbGhhZ2VAbWl0LmVkdT4gPG5lbGhhZ2VAa3NwbGljZS5jb20+CitOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5IDxwY2xvdWRzQGdtYWlsLmNvbT4KK05pY2sgU3Rva29lIDxuaWNrQG5vb2RsZWZhY3RvcnkuY28udWs+IE5pY2sgV29vbGxleSA8bmlja0Bub29kbGVmYWN0b3J5LmNvLnVrPgorTmljayBTdG9rb2UgPG5pY2tAbm9vZGxlZmFjdG9yeS5jby51az4gTmljayBXb29sbGV5IDxuaWNrd29vbGxleUB5YWhvby5jby51az4KK05pY29sYXMgTW9yZXktQ2hhaXNlbWFydGluIDxkZXZlbC1naXRAbW9yZXktY2hhaXNlbWFydGluLmNvbT4gPG5pY29sYXMubW9yZXlAZnJlZS5mcj4KK05pY29sYXMgTW9yZXktQ2hhaXNlbWFydGluIDxkZXZlbC1naXRAbW9yZXktY2hhaXNlbWFydGluLmNvbT4gPG5tb3JleUBrYWxyYXkuZXU+CitOaWNvbGFzIE1vcmV5LUNoYWlzZW1hcnRpbiA8ZGV2ZWwtZ2l0QG1vcmV5LWNoYWlzZW1hcnRpbi5jb20+IDxuaWNvbGFzQG1vcmV5LWNoYWlzZW1hcnRpbi5jb20+CitOaWNvbGFzIE1vcmV5LUNoYWlzZW1hcnRpbiA8ZGV2ZWwtZ2l0QG1vcmV5LWNoYWlzZW1hcnRpbi5jb20+IDxOTW9yZXlDaGFpc2VtYXJ0aW5Ac3VzZS5jb20+CitOaWNvbGFzIE1vcmV5LUNoYWlzZW1hcnRpbiA8ZGV2ZWwtZ2l0QG1vcmV5LWNoYWlzZW1hcnRpbi5jb20+IDxubW9yZXljaGFpc2VtYXJ0aW5Ac3VzZS5jb20+CitOaWNvbGFzIFNlYnJlY2h0IDxuaWNvbGFzLnMuZGV2QGdteC5mcj4gPG5pLnNAbGFwb3N0ZS5uZXQ+CitPcmdhZCBTaGFuZWggPG9yZ2Fkc0BnbWFpbC5jb20+IDxvcmdhZC5zaGFuZWhAYXVkaW9jb2Rlcy5jb20+CitQYW9sbyBCb256aW5pIDxib256aW5pQGdudS5vcmc+IDxwYW9sby5ib256aW5pQGx1LnVuaXNpLmNoPgorUGFzY2FsIE9icnkgPHBhc2NhbEBvYnJ5Lm5ldD4gPHBhc2NhbC5vYnJ5QGdtYWlsLmNvbT4KK1Bhc2NhbCBPYnJ5IDxwYXNjYWxAb2JyeS5uZXQ+IDxwYXNjYWwub2JyeUB3YW5hZG9vLmZyPgorUGF0IE5vdHogPHBhdG5vdHpAZ21haWwuY29tPiA8cGtub3R6QHNhbmRpYS5nb3Y+CitQYXRyaWNrIFN0ZWluaGFyZHQgPHBzQHBrcy5pbT4gPHBhdHJpY2suc3RlaW5oYXJkdEBlbGVnby5kZT4KK1BhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPiA8cGF1bHVzQGRvcnJpZ28uKG5vbmUpPgorUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+IDxwYXVsdXNAcG9nby4obm9uZSk+CitQZXRlciBCYXVtYW5uIDx3YXN0ZS5tYW5hZ2VyQGdteC5kZT4gPFBldGVyLkIuQmF1bWFubkBzdHVkLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorUGV0ZXIgQmF1bWFubiA8d2FzdGUubWFuYWdlckBnbXguZGU+IDxzaXByYmF1bUBzdHVkLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+IDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+IDxwZXRlckBzdmFydGVuLmludGVybi5zb2Z0d29sdmVzLnBwLnNlPgorUGV0ciBCYXVkaXMgPHBhc2t5QHVjdy5jej4gPHBhc2t5QHN1c2UuY3o+CitQZXRyIEJhdWRpcyA8cGFza3lAdWN3LmN6PiA8eHBhc2t5QG1hY2hpbmU+CitQaGlsIEhvcmQgPGhvcmRwQGNpc2NvLmNvbT4gPHBoaWwuaG9yZEBnbWFpbC5jb20+CitQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcEBmb29saXAub3JnPiA8cGhpbGlwLmphZ2Vuc3RlZHRAZ21haWwuY29tPgorUGhpbGlwIE9ha2xleSA8cGhpbGlwb2FrbGV5QGllZS5lbWFpbD4gPHBoaWxpcG9ha2xleUBpZWUub3JnPiAjIHNlY29uZGFyeSA8cGhpbGlwb2FrbGV5QGR1bmVsbS5vcmcudWs+CitQaGlsaXBwIEEuIEhhcnRtYW5uIDxwYWhAcW8uY3g+IDxwaEBzb3JnaC5kZT4KK1BoaWxpcHBlIEJydWhhdCA8Ym9va0BjcGFuLm9yZz4KK1JhbGYgVGhpZWxvdyA8cmFsZi50aGllbG93QGdtYWlsLmNvbT4gPHJhbGYudGhpZWxvd0Bnb29nbGVtYWlsLmNvbT4KK1JhbXNheSBKb25lcyA8cmFtc2F5QHJhbXNheWpvbmVzLnBsdXMuY29tPiA8cmFtc2F5QHJhbXNheTEuZGVtb24uY28udWs+CitSYW5kYWxsIFMuIEJlY2tlciA8cmFuZGFsbC5iZWNrZXJAbmV4YnJpZGdlLmNhPiA8cnNiZWNrZXJAbmV4YnJpZGdlLmNvbT4KK1JlbsOpIFNjaGFyZmUgPGwucy5yQHdlYi5kZT4gPHJlbmUuc2NoYXJmZUBsc3JmaXJlLmF0aC5jeD4KK1JlbsOpIFNjaGFyZmUgPGwucy5yQHdlYi5kZT4gUmVuZSBTY2hhcmZlCitSaWNoYXJkIEhhbnNlbiA8cmhhbnNlbkByaGFuc2VuLm9yZz4gPGhhbnNlbnJAZ29vZ2xlLmNvbT4KK1JpY2hhcmQgSGFuc2VuIDxyaGFuc2VuQHJoYW5zZW4ub3JnPiA8cmhhbnNlbkBiYm4uY29tPgorUm9iZXJ0IEZpdHpzaW1vbnMgPHJvYmZpdHpAMjczay5uZXQ+CitSb2JlcnQgU2hlYXJtYW4gPHJvYmVydHNoZWFybWFuQGdtYWlsLmNvbT4gPHJvYkBjb2Rld2VhdmVycy5jb20+CitSb2JlcnQgWmVoIDxyb2JlcnQuYS56ZWhAZ21haWwuY29tPgorUm9iaW4gUm9zZW5iZXJnIDxyb2Jpbi5yb3NlbmJlcmdAZGV3aXJlLmNvbT4gPHJvYmluLnJvc2VuYmVyZy5saXN0c0BkZXdpcmUuY29tPgorUnV0Z2VyIE5pamx1bnNpbmcgPHJ1dGdlci5uaWpsdW5zaW5nQGdtYWlsLmNvbT4gPHJ1dGdlckBub3NwYW0uY29tPgorUnV0Z2VyIE5pamx1bnNpbmcgPHJ1dGdlci5uaWpsdW5zaW5nQGdtYWlsLmNvbT4gPGdpdEB0dXgudG1md2ViLm5sPgorUnlhbiBBbmRlcnNvbiA8cnlhbkBtaWNob25saW5lLmNvbT4gPHJkYUBnb29nbGUuY29tPgorU2FsaWtoIFpha2lyb3YgPHNhbGlraC56YWtpcm92QGdtYWlsLmNvbT4gPFNhbGlraC5aYWtpcm92QEludGVsLmNvbT4KK1NhbSBWaWxhaW4gPHNhbUB2aWxhaW4ubmV0PiA8c2FtLnZpbGFpbkBjYXRhbHlzdC5uZXQubno+CitTYW0gVmlsYWluIDxzYW1AdmlsYWluLm5ldD4gc2FtQHZpbGFpbi5uZXQKK1NhbnRpIELDqWphciA8c2FudGlAYWdvbGluYS5uZXQ+IDxzYmVqYXJAZ21haWwuY29tPgorU2VhbiBFc3RhYnJvb2tzIDxzZWFubGttbEBzeW1wYXRpY28uY2E+CitTZWJhc3RpYW4gU2NodWJlcnRoIDxzc2NodWJlcnRoQGdtYWlsLmNvbT4gPHNzY2h1YmVydGhAdmlzYWdlaW1hZ2luZy5jb20+CitTZXRoIEZhbGNvbiA8c2V0aEB1c2VycHJpbWFyeS5uZXQ+IDxzZmFsY29uQGZoY3JjLm9yZz4KK1NoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KK1dlaSBTaHV5dSA8d3N5QGRvZ2Jlbi5jb20+IFNodXl1IFdlaQorU2lkaGFudCBTaGFybWEgPHRpZ2Vya2lkMDAxQGdtYWlsLmNvbT4gU2lkaGFudCBTaGFybWEgWzp0a10KK1NpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPiA8c2ltb25AbHN0LmRlPgorU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+IDxzaGF1c21hbkB0cm9sbHRlY2guY29tPgorU3RlZmFuIEJlbGxlciA8c3RlZmFuYmVsbGVyQGdtYWlsLmNvbT4gPHN0ZWZhbmJlbGxlckBnb29nbGVtYWlsLmNvbT4KK1N0ZWZhbiBCZWxsZXIgPHN0ZWZhbmJlbGxlckBnbWFpbC5jb20+IDxzYmVsbGVyQGdvb2dsZS5jb20+CitTdGVmYW4gTmFld2UgPHN0ZWZhbi5uYWV3ZUBnbWFpbC5jb20+IDxzdGVmYW4ubmFld2VAYXRsYXMtZWxla3Ryb25pay5jb20+CitTdGVmYW4gTmFld2UgPHN0ZWZhbi5uYWV3ZUBnbWFpbC5jb20+IDxzdGVmYW4ubmFld2VAZ29vZ2xlbWFpbC5jb20+CitTdGVmYW4gU3BlcmxpbmcgPHN0c3BAZWxlZ28uZGU+IDxzdHNwQHN0c3AubmFtZT4KK8WgdMSbcMOhbiBOxJttZWMgPHN0ZXBuZW1AZ21haWwuY29tPiA8c3RlcGFuLm5lbWVjQGdtYWlsLmNvbT4KK1N0ZXBoZW4gQm95ZCA8YmViYXJpbm9AZ21haWwuY29tPiA8c2JveWRAY29kZWF1cm9yYS5vcmc+CitTdGV2ZW4gRHJha2UgPHNkcmFrZUB4bmV0LmNvLm56PiA8c2RyYWtlQGlodWcuY28ubno+CitTdGV2ZW4gR3JpbW0gPGtvcmV0aEBtaWR3aW50ZXIuY29tPiA8c2dyaW1tQHNncmltbS1tYnAubG9jYWw+CitTdGV2ZW4gR3JpbW0gPGtvcmV0aEBtaWR3aW50ZXIuY29tPiBrb3JldGhAbWlkd2ludGVyLmNvbQorU3RldmVuIFdhbHRlciA8c3RldmVucndhbHRlckBnbWFpbC5jb20+IDxzd2FsdGVyQGxleG1hcmsuY29tPgorU3RldmVuIFdhbHRlciA8c3RldmVucndhbHRlckBnbWFpbC5jb20+IDxzd2FsdGVyQGxwZGV2LnBydGRldi5sZXhtYXJrLmNvbT4KK1N2ZW4gVmVyZG9vbGFlZ2UgPHNraW1vQGtvdG5ldC5vcmc+IDxTdmVuLlZlcmRvb2xhZWdlQGNzLmt1bGV1dmVuLmFjLmJlPgorU3ZlbiBWZXJkb29sYWVnZSA8c2tpbW9Aa290bmV0Lm9yZz4gPHNraW1vQGxpYWNzLm5sPgorU1pFREVSIEfDoWJvciA8c3plZGVyLmRldkBnbWFpbC5jb20+IDxzemVkZXJAaXJhLnVrYS5kZT4KK1RhbyBRaW5neXVuIDx0YW9xeUBscy1hLm1lPiA8ODQ1NzY3NjU3QHFxLmNvbT4KK1RheSBSYXkgQ2h1YW4gPHJjdGF5ODlAZ21haWwuY29tPgorVGVkIFBlcmNpdmFsIDx0ZWRAbWlkZzN0Lm5ldD4gPHRlZC5wZXJjaXZhbEBxdWVzdC5jb20+CitUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorVGhvbWFzIEFja2VybWFubiA8dGguYWNrZXJAYXJjb3IuZGU+IDx0aC5hY2tlcjY2QGFyY29yLmRlPgorVGhvbWFzIFJhc3QgPHRyQHRob21hc3Jhc3QuY2g+IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitUaG9tYXMgUmFzdCA8dHJAdGhvbWFzcmFzdC5jaD4gPHRyYXN0QGluZi5ldGh6LmNoPgorVGhvbWFzIFJhc3QgPHRyQHRob21hc3Jhc3QuY2g+IDx0cmFzdEBnb29nbGUuY29tPgorVGltbyBIaXJ2b25lbiA8dGloaXJ2b25AZ21haWwuY29tPiA8dGloaXJ2b25AZWUub3VsdS5maT4KK1RvYnkgQWxsc29wcCA8VG9ieS5BbGxzb3BwQG5hdm1hbi5jby5uej4gPHRvYnkuYWxsc29wcEBuYXZtYW4uY28ubno+CitUb20gR3Jlbm5hbiA8dG1ncmVubmFuQGdtYWlsLmNvbT4gPHRncmVubmFuQHJlZGJhY2suY29tPgorVG9tbWkgVmlydGFuZW4gPHR2QGRlYmlhbi5vcmc+IDx0dkBlYWdhaW4ubmV0PgorVG9tbWkgVmlydGFuZW4gPHR2QGRlYmlhbi5vcmc+IDx0dkBpbm9pLmZpPgorVG9tbXkgVGhvcm4gPHRvbW15LWdpdEB0aG9ybi53cz4gPHR0MTcyOUB5YWhvby5jb20+CitUb255IEx1Y2sgPHRvbnkubHVja0BpbnRlbC5jb20+CitUb3IgQXJuZSBWZXN0YsO4IDx0b3Jhcm52QGdtYWlsLmNvbT4gPHRhdmVzdGJvQHRyb2xsdGVjaC5jb20+CitUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPiBUcmFuIE5nb2MgUXVhbiA8dm53aWxkbWFuQGdtYWlsLmNvbT4KK1RyZW50IFBpZXBobyA8dHBpZXBob0BnbWFpbC5jb20+IDx0cGllcGhvQGZyZWVzY2FsZS5jb20+CitUcmVudCBQaWVwaG8gPHRwaWVwaG9AZ21haWwuY29tPiA8eHl6enlAc3BlYWtlYXN5Lm9yZz4KK1V3ZSBLbGVpbmUtS8O2bmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+IDxVd2UuS2xlaW5lLUtvZW5pZ0BkaWdpLmNvbT4KK1V3ZSBLbGVpbmUtS8O2bmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+IDx1a2xlaW5la0BpbmZvcm1hdGlrLnVuaS1mcmVpYnVyZy5kZT4KK1V3ZSBLbGVpbmUtS8O2bmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+IDx1emVpc2JlcmdlckBpby5mc2ZvcnRoLmRlPgorVXdlIEtsZWluZS1Lw7ZuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4gPHplaXNiZXJnQGluZm9ybWF0aWsudW5pLWZyZWlidXJnLmRlPgorVmlsbGUgU2t5dHTDpCA8dmlsbGUuc2t5dHRhQGlraS5maT4gPHNjb3BAeGVtYWNzLm9yZz4KK1ZpdGFseSAiX1ZpIiBTaHVrZWxhIDx2aTBvc3NAZ21haWwuY29tPiA8cHVibGljX3ZpQHR1dC5ieT4KK1ZpdGFseSAiX1ZpIiBTaHVrZWxhIDx2aTBvc3NAZ21haWwuY29tPiBWaXRhbHkgX1ZpIFNodWtlbGEKK1cuIFRyZXZvciBLaW5nIDx3a2luZ0B0cmVtaWx5LnVzPiA8d2tpbmdAZHJleGVsLmVkdT4KK1dpbGxpYW0gUHVyc2VsbCA8YmlsbC5wdXJzZWxsQGdtYWlsLmNvbT4KK1lPTkVUQU5JIFRvbW9rYXp1IDx5MG4zdDRuMUBnbWFpbC5jb20+IDxxaHd0K2dpdEBsZXMuYXRoLmN4PgorWU9ORVRBTkkgVG9tb2thenUgPHkwbjN0NG4xQGdtYWlsLmNvbT4gPHkwbmV0YW4xQGRyYWdvbmZseWJzZC5vcmc+CitZT1NISUZVSkkgSGlkZWFraSA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CitZaS1KeXVuIFBhbiA8cGFuOTM0MTJAZ21haWwuY29tPgorIyB0aGUgdHdvIGFub255bW91cyBjb250cmlidXRvcnMgYXJlIGRpZmZlcmVudCBwZXJzb25zOgorYW5vbnltb3VzIDxsaW51eEBob3Jpem9uLmNvbT4KK2Fub255bW91cyA8bGludXhAaG9yaXpvbi5uZXQ+CivEsHNtYWlsIETDtm5tZXogPGlzbWFpbEBwYXJkdXMub3JnLnRyPgpkaWZmIC0tZ2l0IGEvLnRyYXZpcy55bWwgYi8udHJhdmlzLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWYzZTNmCi0tLSAvZGV2L251bGwKKysrIGIvLnRyYXZpcy55bWwKQEAgLTAsMCArMSw2MCBAQAorbGFuZ3VhZ2U6IGMKKworY2FjaGU6CisgIGRpcmVjdG9yaWVzOgorICAgIC0gJEhPTUUvdHJhdmlzLWNhY2hlCisKK29zOgorICAtIGxpbnV4CisgIC0gb3N4CisKK29zeF9pbWFnZTogeGNvZGUxMC4xCisKK2NvbXBpbGVyOgorICAtIGNsYW5nCisgIC0gZ2NjCisKK21hdHJpeDoKKyAgaW5jbHVkZToKKyAgICAtIGVudjogam9ibmFtZT1HRVRURVhUX1BPSVNPTgorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjoKKyAgICAgIGFkZG9uczoKKyAgICAgIGJlZm9yZV9pbnN0YWxsOgorICAgIC0gZW52OiBqb2JuYW1lPWxpbnV4LWdjYy00LjgKKyAgICAgIG9zOiBsaW51eAorICAgICAgZGlzdDogdHJ1c3R5CisgICAgICBjb21waWxlcjoKKyAgICAtIGVudjogam9ibmFtZT1MaW51eDMyCisgICAgICBvczogbGludXgKKyAgICAgIGNvbXBpbGVyOgorICAgICAgYWRkb25zOgorICAgICAgc2VydmljZXM6CisgICAgICAgIC0gZG9ja2VyCisgICAgICBiZWZvcmVfaW5zdGFsbDoKKyAgICAgIHNjcmlwdDogY2kvcnVuLWRvY2tlci5zaAorICAgIC0gZW52OiBqb2JuYW1lPWxpbnV4LW11c2wKKyAgICAgIG9zOiBsaW51eAorICAgICAgY29tcGlsZXI6CisgICAgICBhZGRvbnM6CisgICAgICBzZXJ2aWNlczoKKyAgICAgICAgLSBkb2NrZXIKKyAgICAgIGJlZm9yZV9pbnN0YWxsOgorICAgICAgc2NyaXB0OiBjaS9ydW4tZG9ja2VyLnNoCisgICAgLSBlbnY6IGpvYm5hbWU9U3RhdGljQW5hbHlzaXMKKyAgICAgIG9zOiBsaW51eAorICAgICAgY29tcGlsZXI6CisgICAgICBzY3JpcHQ6IGNpL3J1bi1zdGF0aWMtYW5hbHlzaXMuc2gKKyAgICAgIGFmdGVyX2ZhaWx1cmU6CisgICAgLSBlbnY6IGpvYm5hbWU9RG9jdW1lbnRhdGlvbgorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjoKKyAgICAgIHNjcmlwdDogY2kvdGVzdC1kb2N1bWVudGF0aW9uLnNoCisgICAgICBhZnRlcl9mYWlsdXJlOgorCitiZWZvcmVfaW5zdGFsbDogY2kvaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2gKK3NjcmlwdDogY2kvcnVuLWJ1aWxkLWFuZC10ZXN0cy5zaAorYWZ0ZXJfZmFpbHVyZTogY2kvcHJpbnQtdGVzdC1mYWlsdXJlcy5zaAorCitub3RpZmljYXRpb25zOgorICBlbWFpbDogZmFsc2UKZGlmZiAtLWdpdCBhLy50c2FuLXN1cHByZXNzaW9ucyBiLy50c2FuLXN1cHByZXNzaW9ucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmE4NmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvLnRzYW4tc3VwcHJlc3Npb25zCkBAIC0wLDAgKzEsMTYgQEAKKyMgU3VwcHJlc3Npb25zIGZvciBUaHJlYWRTYW5pdGl6ZXIgKHRzYW4pLgorIworIyBUaGlzIGZpbGUgaXMgdXNlZCBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBUU0FOX09QVElPTlMgdG8sIGUuZy4sCisjICJzdXBwcmVzc2lvbnM9JChwd2QpLy50c2FuLXN1cHByZXNzaW9ucyIuIE9ic2VydmUgdGhhdCByZWxhdGl2ZSBwYXRocyBzdWNoIGFzCisjICIudHNhbi1zdXBwcmVzc2lvbnMiIG1pZ2h0IG5vdCB3b3JrLgorCisjIEEgc3RhdGljIHZhcmlhYmxlIGlzIHdyaXR0ZW4gdG8gcmFjaWx5LCBidXQgd2UgYWx3YXlzIHdyaXRlIHRoZSBzYW1lIHZhbHVlLCBzbworIyBpbiBwcmFjdGljZSBpdCAoaG9wZWZ1bGx5ISkgZG9lc24ndCBtYXR0ZXIuCityYWNlOl53YW50X2NvbG9yJAorcmFjZTpedHJhbnNmZXJfZGVidWckCisKKyMgQSBib29sZWFuIHZhbHVlLCB3aGljaCB0ZWxscyB3aGV0aGVyIHRoZSByZXBsYWNlX21hcCBoYXMgYmVlbiBpbml0aWFsaXplZCBvcgorIyBub3QsIGlzIHJlYWQgcmFjaWx5IHdpdGggYW4gdXBkYXRlLiBBcyB0aGlzIHZhcmlhYmxlIGlzIHdyaXR0ZW4gdG8gb25seSBvbmNlLAorIyBhbmQgaXQncyBPSyBpZiB0aGUgdmFsdWUgY2hhbmdlIHJpZ2h0IGFmdGVyIHJlYWRpbmcgaXQsIHRoaXMgc2hvdWxkbid0IGJlIGEKKyMgcHJvYmxlbS4KK3JhY2U6Xmxvb2t1cF9yZXBsYWNlX29iamVjdCQKZGlmZiAtLWdpdCBhL0NPREVfT0ZfQ09ORFVDVC5tZCBiL0NPREVfT0ZfQ09ORFVDVC5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzQ2NDVkCi0tLSAvZGV2L251bGwKKysrIGIvQ09ERV9PRl9DT05EVUNULm1kCkBAIC0wLDAgKzEsOTMgQEAKKyMgR2l0IENvZGUgb2YgQ29uZHVjdAorCitUaGlzIGNvZGUgb2YgY29uZHVjdCBvdXRsaW5lcyBvdXIgZXhwZWN0YXRpb25zIGZvciBwYXJ0aWNpcGFudHMgd2l0aGluCit0aGUgR2l0IGNvbW11bml0eSwgYXMgd2VsbCBhcyBzdGVwcyBmb3IgcmVwb3J0aW5nIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KK1dlIGFyZSBjb21taXR0ZWQgdG8gcHJvdmlkaW5nIGEgd2VsY29taW5nIGFuZCBpbnNwaXJpbmcgY29tbXVuaXR5IGZvcgorYWxsIGFuZCBleHBlY3Qgb3VyIGNvZGUgb2YgY29uZHVjdCB0byBiZSBob25vcmVkLiBBbnlvbmUgd2hvIHZpb2xhdGVzCit0aGlzIGNvZGUgb2YgY29uZHVjdCBtYXkgYmUgYmFubmVkIGZyb20gdGhlIGNvbW11bml0eS4KKworIyMgT3VyIFBsZWRnZQorCitJbiB0aGUgaW50ZXJlc3Qgb2YgZm9zdGVyaW5nIGFuIG9wZW4gYW5kIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgd2UgYXMKK2NvbnRyaWJ1dG9ycyBhbmQgbWFpbnRhaW5lcnMgcGxlZGdlIHRvIG1ha2UgcGFydGljaXBhdGlvbiBpbiBvdXIgcHJvamVjdCBhbmQKK291ciBjb21tdW5pdHkgYSBoYXJhc3NtZW50LWZyZWUgZXhwZXJpZW5jZSBmb3IgZXZlcnlvbmUsIHJlZ2FyZGxlc3Mgb2YgYWdlLAorYm9keSBzaXplLCBkaXNhYmlsaXR5LCBldGhuaWNpdHksIHNleCBjaGFyYWN0ZXJpc3RpY3MsIGdlbmRlciBpZGVudGl0eSBhbmQKK2V4cHJlc3Npb24sIGxldmVsIG9mIGV4cGVyaWVuY2UsIGVkdWNhdGlvbiwgc29jaW8tZWNvbm9taWMgc3RhdHVzLAorbmF0aW9uYWxpdHksIHBlcnNvbmFsIGFwcGVhcmFuY2UsIHJhY2UsIHJlbGlnaW9uLCBvciBzZXh1YWwgaWRlbnRpdHkgYW5kCitvcmllbnRhdGlvbi4KKworIyMgT3VyIFN0YW5kYXJkcworCitFeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQKK2luY2x1ZGU6CisKKyogVXNpbmcgd2VsY29taW5nIGFuZCBpbmNsdXNpdmUgbGFuZ3VhZ2UKKyogQmVpbmcgcmVzcGVjdGZ1bCBvZiBkaWZmZXJpbmcgdmlld3BvaW50cyBhbmQgZXhwZXJpZW5jZXMKKyogR3JhY2VmdWxseSBhY2NlcHRpbmcgY29uc3RydWN0aXZlIGNyaXRpY2lzbQorKiBGb2N1c2luZyBvbiB3aGF0IGlzIGJlc3QgZm9yIHRoZSBjb21tdW5pdHkKKyogU2hvd2luZyBlbXBhdGh5IHRvd2FyZHMgb3RoZXIgY29tbXVuaXR5IG1lbWJlcnMKKworRXhhbXBsZXMgb2YgdW5hY2NlcHRhYmxlIGJlaGF2aW9yIGJ5IHBhcnRpY2lwYW50cyBpbmNsdWRlOgorCisqIFRoZSB1c2Ugb2Ygc2V4dWFsaXplZCBsYW5ndWFnZSBvciBpbWFnZXJ5IGFuZCB1bndlbGNvbWUgc2V4dWFsIGF0dGVudGlvbiBvcgorICBhZHZhbmNlcworKiBUcm9sbGluZywgaW5zdWx0aW5nL2Rlcm9nYXRvcnkgY29tbWVudHMsIGFuZCBwZXJzb25hbCBvciBwb2xpdGljYWwgYXR0YWNrcworKiBQdWJsaWMgb3IgcHJpdmF0ZSBoYXJhc3NtZW50CisqIFB1Ymxpc2hpbmcgb3RoZXJzJyBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IgZWxlY3Ryb25pYworICBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KKyogT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCisgIHByb2Zlc3Npb25hbCBzZXR0aW5nCisKKyMjIE91ciBSZXNwb25zaWJpbGl0aWVzCisKK1Byb2plY3QgbWFpbnRhaW5lcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjbGFyaWZ5aW5nIHRoZSBzdGFuZGFyZHMgb2YgYWNjZXB0YWJsZQorYmVoYXZpb3IgYW5kIGFyZSBleHBlY3RlZCB0byB0YWtlIGFwcHJvcHJpYXRlIGFuZCBmYWlyIGNvcnJlY3RpdmUgYWN0aW9uIGluCityZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KKworUHJvamVjdCBtYWludGFpbmVycyBoYXZlIHRoZSByaWdodCBhbmQgcmVzcG9uc2liaWxpdHkgdG8gcmVtb3ZlLCBlZGl0LCBvcgorcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlciBjb250cmlidXRpb25zCit0aGF0IGFyZSBub3QgYWxpZ25lZCB0byB0aGlzIENvZGUgb2YgQ29uZHVjdCwgb3IgdG8gYmFuIHRlbXBvcmFyaWx5IG9yCitwZXJtYW5lbnRseSBhbnkgY29udHJpYnV0b3IgZm9yIG90aGVyIGJlaGF2aW9ycyB0aGF0IHRoZXkgZGVlbSBpbmFwcHJvcHJpYXRlLAordGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KKworIyMgU2NvcGUKKworVGhpcyBDb2RlIG9mIENvbmR1Y3QgYXBwbGllcyB3aXRoaW4gYWxsIHByb2plY3Qgc3BhY2VzLCBhbmQgaXQgYWxzbyBhcHBsaWVzCit3aGVuIGFuIGluZGl2aWR1YWwgaXMgcmVwcmVzZW50aW5nIHRoZSBwcm9qZWN0IG9yIGl0cyBjb21tdW5pdHkgaW4gcHVibGljCitzcGFjZXMuIEV4YW1wbGVzIG9mIHJlcHJlc2VudGluZyBhIHByb2plY3Qgb3IgY29tbXVuaXR5IGluY2x1ZGUgdXNpbmcgYW4KK29mZmljaWFsIHByb2plY3QgZS1tYWlsIGFkZHJlc3MsIHBvc3RpbmcgdmlhIGFuIG9mZmljaWFsIHNvY2lhbCBtZWRpYSBhY2NvdW50LAorb3IgYWN0aW5nIGFzIGFuIGFwcG9pbnRlZCByZXByZXNlbnRhdGl2ZSBhdCBhbiBvbmxpbmUgb3Igb2ZmbGluZSBldmVudC4KK1JlcHJlc2VudGF0aW9uIG9mIGEgcHJvamVjdCBtYXkgYmUgZnVydGhlciBkZWZpbmVkIGFuZCBjbGFyaWZpZWQgYnkgcHJvamVjdAorbWFpbnRhaW5lcnMuCisKKyMjIEVuZm9yY2VtZW50CisKK0luc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5IGJlCityZXBvcnRlZCBieSBjb250YWN0aW5nIHRoZSBwcm9qZWN0IHRlYW0gYXQgZ2l0QHNmY29uc2VydmFuY3kub3JnLiBBbGwKK2NvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhIHJlc3BvbnNlCit0aGF0IGlzIGRlZW1lZCBuZWNlc3NhcnkgYW5kIGFwcHJvcHJpYXRlIHRvIHRoZSBjaXJjdW1zdGFuY2VzLiBUaGUgcHJvamVjdAordGVhbSBpcyBvYmxpZ2F0ZWQgdG8gbWFpbnRhaW4gY29uZmlkZW50aWFsaXR5IHdpdGggcmVnYXJkIHRvIHRoZSByZXBvcnRlciBvZgorYW4gaW5jaWRlbnQuIEZ1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudCBwb2xpY2llcyBtYXkgYmUgcG9zdGVkCitzZXBhcmF0ZWx5LgorCitQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbiBnb29kCitmYWl0aCBtYXkgZmFjZSB0ZW1wb3Jhcnkgb3IgcGVybWFuZW50IHJlcGVyY3Vzc2lvbnMgYXMgZGV0ZXJtaW5lZCBieSBvdGhlcgorbWVtYmVycyBvZiB0aGUgcHJvamVjdCdzIGxlYWRlcnNoaXAuCisKK1RoZSBwcm9qZWN0IGxlYWRlcnNoaXAgdGVhbSBjYW4gYmUgY29udGFjdGVkIGJ5IGVtYWlsIGFzIGEgd2hvbGUgYXQKK2dpdEBzZmNvbnNlcnZhbmN5Lm9yZywgb3IgaW5kaXZpZHVhbGx5OgorCisgIC0gw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+CisgIC0gQ2hyaXN0aWFuIENvdWRlciA8Y2hyaXN0aWFuLmNvdWRlckBnbWFpbC5jb20+CisgIC0gSmVmZiBLaW5nIDxwZWZmQHBlZmYubmV0PgorICAtIEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKworIyMgQXR0cmlidXRpb24KKworVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBbQ29udHJpYnV0b3IgQ292ZW5hbnRdW2hvbWVwYWdlXSwKK3ZlcnNpb24gMS40LCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNpb24vMS80L2NvZGUtb2YtY29uZHVjdC5odG1sCisKK1tob21lcGFnZV06IGh0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZworCitGb3IgYW5zd2VycyB0byBjb21tb24gcXVlc3Rpb25zIGFib3V0IHRoaXMgY29kZSBvZiBjb25kdWN0LCBzZWUKK2h0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZy9mYXEKZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNmU1NTUKLS0tIC9kZXYvbnVsbAorKysgYi9DT1BZSU5HCkBAIC0wLDAgKzEsMzYwIEBACisKKyBOb3RlIHRoYXQgdGhlIG9ubHkgdmFsaWQgdmVyc2lvbiBvZiB0aGUgR1BMIGFzIGZhciBhcyB0aGlzIHByb2plY3QKKyBpcyBjb25jZXJuZWQgaXMgX3RoaXNfIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSAoaWUgdjIsIG5vdAorIHYyLjIgb3IgdjMueCBvciB3aGF0ZXZlciksIHVubGVzcyBleHBsaWNpdGx5IG90aGVyd2lzZSBzdGF0ZWQuCisKKyBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKKyBhIGdvb2QgaWRlYSwgSSBhbHNvIGFzayB0aGF0IHBlb3BsZSBpbnZvbHZlZCB3aXRoIHRoZSBwcm9qZWN0IG1ha2UKKyB0aGVpciBwcmVmZXJlbmNlcyBrbm93bi4gSW4gcGFydGljdWxhciwgaWYgeW91IHRydXN0IG1lIHRvIG1ha2UgdGhhdAorIGRlY2lzaW9uLCB5b3UgbWlnaHQgbm90ZSBzbyBpbiB5b3VyIGNvcHlyaWdodCBtZXNzYWdlLCBpZSBzb21ldGhpbmcKKyBsaWtlCisKKwlUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Miwgb3IgYSBsYXRlciB2ZXJzaW9uCisJYXQgdGhlIGRpc2NyZXRpb24gb2YgTGludXMuCisKKyAgbWlnaHQgYXZvaWQgaXNzdWVzLiBCdXQgd2UgY2FuIGFsc28ganVzdCBkZWNpZGUgdG8gc3luY2hyb25pemUgYW5kCisgIGNvbnRhY3QgYWxsIGNvcHlyaWdodCBob2xkZXJzIG9uIHJlY29yZCBpZi93aGVuIHRoZSBvY2Nhc2lvbiBhcmlzZXMuCisKKwkJCUxpbnVzIFRvcnZhbGRzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uLy5naXRhdHRyaWJ1dGVzIGIvRG9jdW1lbnRhdGlvbi8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGIwMzAxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisqLnR4dCB3aGl0ZXNwYWNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uLy5naXRpZ25vcmUgYi9Eb2N1bWVudGF0aW9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyMmQ0OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDE3IEBACisqLnhtbAorKi5odG1sCisqLlsxLThdCisqLm1hZGUKKyoudGV4aQorKi5wZGYKK2dpdC5pbmZvCitnaXRtYW4uaW5mbworaG93dG8taW5kZXgudHh0Citkb2MuZGVwCitjbWRzLSoudHh0CittZXJnZXRvb2xzLSoudHh0CittYW5wYWdlLWJhc2UtdXJsLnhzbAorU3VibWl0dGluZ1BhdGNoZXMudHh0Cit0bXAtZG9jLWRpZmYvCitHSVQtQVNDSUlET0NGTEFHUworL0dJVC1FWENMVURFRC1QUk9HUkFNUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Db2RpbmdHdWlkZWxpbmVzIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdHdWlkZWxpbmVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyN2Y0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0NvZGluZ0d1aWRlbGluZXMKQEAgLTAsMCArMSw2NDUgQEAKK0xpa2Ugb3RoZXIgcHJvamVjdHMsIHdlIGFsc28gaGF2ZSBzb21lIGd1aWRlbGluZXMgdG8ga2VlcCB0byB0aGUKK2NvZGUuICBGb3IgR2l0IGluIGdlbmVyYWwsIGEgZmV3IHJvdWdoIHJ1bGVzIGFyZToKKworIC0gTW9zdCBpbXBvcnRhbnRseSwgd2UgbmV2ZXIgc2F5ICJJdCdzIGluIFBPU0lYOyB3ZSdsbCBoYXBwaWx5CisgICBpZ25vcmUgeW91ciBuZWVkcyBzaG91bGQgeW91ciBzeXN0ZW0gbm90IGNvbmZvcm0gdG8gaXQuIgorICAgV2UgbGl2ZSBpbiB0aGUgcmVhbCB3b3JsZC4KKworIC0gSG93ZXZlciwgd2Ugb2Z0ZW4gc2F5ICJMZXQncyBzdGF5IGF3YXkgZnJvbSB0aGF0IGNvbnN0cnVjdCwKKyAgIGl0J3Mgbm90IGV2ZW4gaW4gUE9TSVgiLgorCisgLSBJbiBzcGl0ZSBvZiB0aGUgYWJvdmUgdHdvIHJ1bGVzLCB3ZSBzb21ldGltZXMgc2F5ICJBbHRob3VnaAorICAgdGhpcyBpcyBub3QgaW4gUE9TSVgsIGl0IChpcyBzbyBjb252ZW5pZW50IHwgbWFrZXMgdGhlIGNvZGUKKyAgIG11Y2ggbW9yZSByZWFkYWJsZSB8IGhhcyBvdGhlciBnb29kIGNoYXJhY3RlcmlzdGljcykgYW5kCisgICBwcmFjdGljYWxseSBhbGwgdGhlIHBsYXRmb3JtcyB3ZSBjYXJlIGFib3V0IHN1cHBvcnQgaXQsIHNvCisgICBsZXQncyB1c2UgaXQiLgorCisgICBBZ2Fpbiwgd2UgbGl2ZSBpbiB0aGUgcmVhbCB3b3JsZCwgYW5kIGl0IGlzIHNvbWV0aW1lcyBhCisgICBqdWRnZW1lbnQgY2FsbCwgdGhlIGRlY2lzaW9uIGJhc2VkIG1vcmUgb24gcmVhbCB3b3JsZAorICAgY29uc3RyYWludHMgcGVvcGxlIGZhY2UgdGhhbiB3aGF0IHRoZSBwYXBlciBzdGFuZGFyZCBzYXlzLgorCisgLSBGaXhpbmcgc3R5bGUgdmlvbGF0aW9ucyB3aGlsZSB3b3JraW5nIG9uIGEgcmVhbCBjaGFuZ2UgYXMgYQorICAgcHJlcGFyYXRvcnkgY2xlYW4tdXAgc3RlcCBpcyBnb29kLCBidXQgb3RoZXJ3aXNlIGF2b2lkIHVzZWxlc3MgY29kZQorICAgY2h1cm4gZm9yIHRoZSBzYWtlIG9mIGNvbmZvcm1pbmcgdG8gdGhlIHN0eWxlLgorCisgICAiT25jZSBpdCBfaXNfIGluIHRoZSB0cmVlLCBpdCdzIG5vdCByZWFsbHkgd29ydGggdGhlIHBhdGNoIG5vaXNlIHRvCisgICBnbyBhbmQgZml4IGl0IHVwLiIKKyAgIENmLiBodHRwOi8vbGttbC5pdS5lZHUvaHlwZXJtYWlsL2xpbnV4L2tlcm5lbC8xMDAxLjMvMDEwNjkuaHRtbAorCitNYWtlIHlvdXIgY29kZSByZWFkYWJsZSBhbmQgc2Vuc2libGUsIGFuZCBkb24ndCB0cnkgdG8gYmUgY2xldmVyLgorCitBcyBmb3IgbW9yZSBjb25jcmV0ZSBndWlkZWxpbmVzLCBqdXN0IGltaXRhdGUgdGhlIGV4aXN0aW5nIGNvZGUKKyh0aGlzIGlzIGEgZ29vZCBndWlkZWxpbmUsIG5vIG1hdHRlciB3aGljaCBwcm9qZWN0IHlvdSBhcmUKK2NvbnRyaWJ1dGluZyB0bykuIEl0IGlzIGFsd2F5cyBwcmVmZXJhYmxlIHRvIG1hdGNoIHRoZSBfbG9jYWxfCitjb252ZW50aW9uLiBOZXcgY29kZSBhZGRlZCB0byBHaXQgc3VpdGUgaXMgZXhwZWN0ZWQgdG8gbWF0Y2gKK3RoZSBvdmVyYWxsIHN0eWxlIG9mIGV4aXN0aW5nIGNvZGUuIE1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcKK2NvZGUgaXMgZXhwZWN0ZWQgdG8gbWF0Y2ggdGhlIHN0eWxlIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFscmVhZHkKK3VzZXMgKGV2ZW4gaWYgaXQgZG9lc24ndCBtYXRjaCB0aGUgb3ZlcmFsbCBzdHlsZSBvZiBleGlzdGluZyBjb2RlKS4KKworQnV0IGlmIHlvdSBtdXN0IGhhdmUgYSBsaXN0IG9mIHJ1bGVzLCBoZXJlIHRoZXkgYXJlLgorCitGb3Igc2hlbGwgc2NyaXB0cyBzcGVjaWZpY2FsbHkgKG5vdCBleGhhdXN0aXZlKToKKworIC0gV2UgdXNlIHRhYnMgZm9yIGluZGVudGF0aW9uLgorCisgLSBDYXNlIGFybXMgYXJlIGluZGVudGVkIGF0IHRoZSBzYW1lIGRlcHRoIGFzIGNhc2UgYW5kIGVzYWMgbGluZXMsCisgICBsaWtlIHRoaXM6CisKKwljYXNlICIkdmFyaWFibGUiIGluCisJcGF0dGVybjEpCisJCWRvIHRoaXMKKwkJOzsKKwlwYXR0ZXJuMikKKwkJZG8gdGhhdAorCQk7OworCWVzYWMKKworIC0gUmVkaXJlY3Rpb24gb3BlcmF0b3JzIHNob3VsZCBiZSB3cml0dGVuIHdpdGggc3BhY2UgYmVmb3JlLCBidXQgbm8KKyAgIHNwYWNlIGFmdGVyIHRoZW0uICBJbiBvdGhlciB3b3Jkcywgd3JpdGUgJ2VjaG8gdGVzdCA+IiRmaWxlIicKKyAgIGluc3RlYWQgb2YgJ2VjaG8gdGVzdD4gJGZpbGUnIG9yICdlY2hvIHRlc3QgPiAkZmlsZScuICBOb3RlIHRoYXQKKyAgIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCByZXF1aXJlZCBieSBQT1NJWCB0byBkb3VibGUtcXVvdGUgdGhlCisgICByZWRpcmVjdGlvbiB0YXJnZXQgaW4gYSB2YXJpYWJsZSAoYXMgc2hvd24gYWJvdmUpLCBvdXIgY29kZSBkb2VzIHNvCisgICBiZWNhdXNlIHNvbWUgdmVyc2lvbnMgb2YgYmFzaCBpc3N1ZSBhIHdhcm5pbmcgd2l0aG91dCB0aGUgcXVvdGVzLgorCisJKGluY29ycmVjdCkKKwljYXQgaGVsbG8gPiB3b3JsZCA8IHVuaXZlcnNlCisJZWNobyBoZWxsbyA+JHdvcmxkCisKKwkoY29ycmVjdCkKKwljYXQgaGVsbG8gPndvcmxkIDx1bml2ZXJzZQorCWVjaG8gaGVsbG8gPiIkd29ybGQiCisKKyAtIFdlIHByZWZlciAkKCAuLi4gKSBmb3IgY29tbWFuZCBzdWJzdGl0dXRpb247IHVubGlrZSBgYCwgaXQKKyAgIHByb3Blcmx5IG5lc3RzLiAgSXQgc2hvdWxkIGhhdmUgYmVlbiB0aGUgd2F5IEJvdXJuZSBzcGVsbGVkCisgICBpdCBmcm9tIGRheSBvbmUsIGJ1dCB1bmZvcnR1bmF0ZWx5IGlzbid0LgorCisgLSBJZiB5b3Ugd2FudCB0byBmaW5kIG91dCBpZiBhIGNvbW1hbmQgaXMgYXZhaWxhYmxlIG9uIHRoZSB1c2VyJ3MKKyAgICRQQVRILCB5b3Ugc2hvdWxkIHVzZSAndHlwZSA8Y29tbWFuZD4nLCBpbnN0ZWFkIG9mICd3aGljaCA8Y29tbWFuZD4nLgorICAgVGhlIG91dHB1dCBvZiAnd2hpY2gnIGlzIG5vdCBtYWNoaW5lIHBhcnNhYmxlIGFuZCBpdHMgZXhpdCBjb2RlCisgICBpcyBub3QgcmVsaWFibGUgYWNyb3NzIHBsYXRmb3Jtcy4KKworIC0gV2UgdXNlIFBPU0lYIGNvbXBsaWFudCBwYXJhbWV0ZXIgc3Vic3RpdHV0aW9ucyBhbmQgYXZvaWQgYmFzaGlzbXM7CisgICBuYW1lbHk6CisKKyAgIC0gV2UgdXNlICR7cGFyYW1ldGVyLXdvcmR9IGFuZCBpdHMgWy09PytdIHNpYmxpbmdzLCBhbmQgdGhlaXIKKyAgICAgY29sb24nZWQgInVuc2V0IG9yIG51bGwiIGZvcm0uCisKKyAgIC0gV2UgdXNlICR7cGFyYW1ldGVyI3dvcmR9IGFuZCBpdHMgWyMlXSBzaWJsaW5ncywgYW5kIHRoZWlyCisgICAgIGRvdWJsZWQgImxvbmdlc3QgbWF0Y2hpbmciIGZvcm0uCisKKyAgIC0gTm8gIlN1YnN0cmluZyBFeHBhbnNpb24iICR7cGFyYW1ldGVyOm9mZnNldDpsZW5ndGh9LgorCisgICAtIE5vIHNoZWxsIGFycmF5cy4KKworICAgLSBObyBwYXR0ZXJuIHJlcGxhY2VtZW50ICR7cGFyYW1ldGVyL3BhdHRlcm4vc3RyaW5nfS4KKworIC0gV2UgdXNlIEFyaXRobWV0aWMgRXhwYW5zaW9uICQoKCAuLi4gKSkuCisKKyAtIFdlIGRvIG5vdCB1c2UgUHJvY2VzcyBTdWJzdGl0dXRpb24gPChsaXN0KSBvciA+KGxpc3QpLgorCisgLSBEbyBub3Qgd3JpdGUgY29udHJvbCBzdHJ1Y3R1cmVzIG9uIGEgc2luZ2xlIGxpbmUgd2l0aCBzZW1pY29sb24uCisgICAidGhlbiIgc2hvdWxkIGJlIG9uIHRoZSBuZXh0IGxpbmUgZm9yIGlmIHN0YXRlbWVudHMsIGFuZCAiZG8iCisgICBzaG91bGQgYmUgb24gdGhlIG5leHQgbGluZSBmb3IgIndoaWxlIiBhbmQgImZvciIuCisKKwkoaW5jb3JyZWN0KQorCWlmIHRlc3QgLWYgaGVsbG87IHRoZW4KKwkJZG8gdGhpcworCWZpCisKKwkoY29ycmVjdCkKKwlpZiB0ZXN0IC1mIGhlbGxvCisJdGhlbgorCQlkbyB0aGlzCisJZmkKKworIC0gSWYgYSBjb21tYW5kIHNlcXVlbmNlIGpvaW5lZCB3aXRoICYmIG9yIHx8IG9yIHwgc3BhbnMgbXVsdGlwbGUKKyAgIGxpbmVzLCBwdXQgZWFjaCBjb21tYW5kIG9uIGEgc2VwYXJhdGUgbGluZSBhbmQgcHV0ICYmIGFuZCB8fCBhbmQgfAorICAgb3BlcmF0b3JzIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lLCByYXRoZXIgdGhhbiB0aGUgc3RhcnQuIFRoaXMKKyAgIG1lYW5zIHlvdSBkb24ndCBuZWVkIHRvIHVzZSBcIHRvIGpvaW4gbGluZXMsIHNpbmNlIHRoZSBhYm92ZQorICAgb3BlcmF0b3JzIGltcGx5IHRoZSBzZXF1ZW5jZSBpc24ndCBmaW5pc2hlZC4KKworCShpbmNvcnJlY3QpCisJZ3JlcCBibG9iIHZlcmlmeV9wYWNrX3Jlc3VsdCBcCisJfCBhd2sgLWYgcHJpbnRfMS5hd2sgXAorCXwgc29ydCA+YWN0dWFsICYmCisJLi4uCisKKwkoY29ycmVjdCkKKwlncmVwIGJsb2IgdmVyaWZ5X3BhY2tfcmVzdWx0IHwKKwlhd2sgLWYgcHJpbnRfMS5hd2sgfAorCXNvcnQgPmFjdHVhbCAmJgorCS4uLgorCisgLSBXZSBwcmVmZXIgInRlc3QiIG92ZXIgIlsgLi4uIF0iLgorCisgLSBXZSBkbyBub3Qgd3JpdGUgdGhlIG5vaXNld29yZCAiZnVuY3Rpb24iIGluIGZyb250IG9mIHNoZWxsCisgICBmdW5jdGlvbnMuCisKKyAtIFdlIHByZWZlciBhIHNwYWNlIGJldHdlZW4gdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIHRoZSBwYXJlbnRoZXNlcywKKyAgIGFuZCBubyBzcGFjZSBpbnNpZGUgdGhlIHBhcmVudGhlc2VzLiBUaGUgb3BlbmluZyAieyIgc2hvdWxkIGFsc28KKyAgIGJlIG9uIHRoZSBzYW1lIGxpbmUuCisKKwkoaW5jb3JyZWN0KQorCW15X2Z1bmN0aW9uKCl7CisJCS4uLgorCisJKGNvcnJlY3QpCisJbXlfZnVuY3Rpb24gKCkgeworCQkuLi4KKworIC0gQXMgdG8gdXNlIG9mIGdyZXAsIHN0aWNrIHRvIGEgc3Vic2V0IG9mIEJSRSAobmFtZWx5LCBubyBce20sblx9LAorICAgWzo6XSwgWz09XSwgb3IgWy4uXSkgZm9yIHBvcnRhYmlsaXR5LgorCisgICAtIFdlIGRvIG5vdCB1c2UgXHttLG5cfTsKKworICAgLSBXZSBkbyBub3QgdXNlIC1FOworCisgICAtIFdlIGRvIG5vdCB1c2UgPyBvciArICh3aGljaCBhcmUgXHswLDFcfSBhbmQgXHsxLFx9CisgICAgIHJlc3BlY3RpdmVseSBpbiBCUkUpIGJ1dCB0aGF0IGdvZXMgd2l0aG91dCBzYXlpbmcgYXMgdGhlc2UKKyAgICAgYXJlIEVSRSBlbGVtZW50cyBub3QgQlJFIChub3RlIHRoYXQgXD8gYW5kIFwrIGFyZSBub3QgZXZlbiBwYXJ0CisgICAgIG9mIEJSRSAtLSBtYWtpbmcgdGhlbSBhY2Nlc3NpYmxlIGZyb20gQlJFIGlzIGEgR05VIGV4dGVuc2lvbikuCisKKyAtIFVzZSBHaXQncyBnZXR0ZXh0IHdyYXBwZXJzIGluIGdpdC1zaC1pMThuIHRvIG1ha2UgdGhlIHVzZXIKKyAgIGludGVyZmFjZSB0cmFuc2xhdGFibGUuIFNlZSAiTWFya2luZyBzdHJpbmdzIGZvciB0cmFuc2xhdGlvbiIgaW4KKyAgIHBvL1JFQURNRS4KKworIC0gV2UgZG8gbm90IHdyaXRlIG91ciAidGVzdCIgY29tbWFuZCB3aXRoICItYSIgYW5kICItbyIgYW5kIHVzZSAiJiYiCisgICBvciAifHwiIHRvIGNvbmNhdGVuYXRlIG11bHRpcGxlICJ0ZXN0IiBjb21tYW5kcyBpbnN0ZWFkLCBiZWNhdXNlCisgICB0aGUgdXNlIG9mICItYS8tbyIgaXMgb2Z0ZW4gZXJyb3ItcHJvbmUuICBFLmcuCisKKyAgICAgdGVzdCAtbiAiJHgiIC1hICIkYSIgPSAiJGIiCisKKyAgIGlzIGJ1Z2d5IGFuZCBicmVha3Mgd2hlbiAkeCBpcyAiPSIsIGJ1dAorCisgICAgIHRlc3QgLW4gIiR4IiAmJiB0ZXN0ICIkYSIgPSAiJGIiCisKKyAgIGRvZXMgbm90IGhhdmUgc3VjaCBhIHByb2JsZW0uCisKKworRm9yIEMgcHJvZ3JhbXM6CisKKyAtIFdlIHVzZSB0YWJzIHRvIGluZGVudCwgYW5kIGludGVycHJldCB0YWJzIGFzIHRha2luZyB1cCB0bworICAgOCBzcGFjZXMuCisKKyAtIFdlIHRyeSB0byBrZWVwIHRvIGF0IG1vc3QgODAgY2hhcmFjdGVycyBwZXIgbGluZS4KKworIC0gQXMgYSBHaXQgZGV2ZWxvcGVyIHdlIGFzc3VtZSB5b3UgaGF2ZSBhIHJlYXNvbmFibHkgbW9kZXJuIGNvbXBpbGVyCisgICBhbmQgd2UgcmVjb21tZW5kIHlvdSB0byBlbmFibGUgdGhlIERFVkVMT1BFUiBtYWtlZmlsZSBrbm9iIHRvCisgICBlbnN1cmUgeW91ciBwYXRjaCBpcyBjbGVhciBvZiBhbGwgY29tcGlsZXIgd2FybmluZ3Mgd2UgY2FyZSBhYm91dCwKKyAgIGJ5IGUuZy4gImVjaG8gREVWRUxPUEVSPTEgPj5jb25maWcubWFrIi4KKworIC0gV2UgdHJ5IHRvIHN1cHBvcnQgYSB3aWRlIHJhbmdlIG9mIEMgY29tcGlsZXJzIHRvIGNvbXBpbGUgR2l0IHdpdGgsCisgICBpbmNsdWRpbmcgb2xkIG9uZXMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgZmVhdHVyZXMgZnJvbSBuZXdlciBDCisgICBzdGFuZGFyZCwgZXZlbiBpZiB5b3VyIGNvbXBpbGVyIGdyb2tzIHRoZW0uCisKKyAgIFRoZXJlIGFyZSBhIGZldyBleGNlcHRpb25zIHRvIHRoaXMgZ3VpZGVsaW5lOgorCisgICAuIHNpbmNlIGVhcmx5IDIwMTIgd2l0aCBlMTMyNzAyM2VhLCB3ZSBoYXZlIGJlZW4gdXNpbmcgYW4gZW51bQorICAgICBkZWZpbml0aW9uIHdob3NlIGxhc3QgZWxlbWVudCBpcyBmb2xsb3dlZCBieSBhIGNvbW1hLiAgVGhpcywgbGlrZQorICAgICBhbiBhcnJheSBpbml0aWFsaXplciB0aGF0IGVuZHMgd2l0aCBhIHRyYWlsaW5nIGNvbW1hLCBjYW4gYmUgdXNlZAorICAgICB0byByZWR1Y2UgdGhlIHBhdGNoIG5vaXNlIHdoZW4gYWRkaW5nIGEgbmV3IGlkZW50aWZpZXIgYXQgdGhlIGVuZC4KKworICAgLiBzaW5jZSBtaWQgMjAxNyB3aXRoIGNiYzBmODFkLCB3ZSBoYXZlIGJlZW4gdXNpbmcgZGVzaWduYXRlZAorICAgICBpbml0aWFsaXplcnMgZm9yIHN0cnVjdCAoZS5nLiAic3RydWN0IHQgdiA9IHsgLnZhbCA9ICdhJyB9OyIpLgorCisgICAuIHNpbmNlIG1pZCAyMDE3IHdpdGggNTEyZjQxY2YsIHdlIGhhdmUgYmVlbiB1c2luZyBkZXNpZ25hdGVkCisgICAgIGluaXRpYWxpemVycyBmb3IgYXJyYXkgKGUuZy4gImludCBhcnJheVsxMF0gPSB7IFs1XSA9IDIgfSIpLgorCisgICBUaGVzZSB1c2VkIHRvIGJlIGZvcmJpZGRlbiwgYnV0IHdlIGhhdmUgbm90IGhlYXJkIGFueSBicmVha2FnZQorICAgcmVwb3J0LCBhbmQgdGhleSBhcmUgYXNzdW1lZCB0byBiZSBzYWZlLgorCisgLSBWYXJpYWJsZXMgaGF2ZSB0byBiZSBkZWNsYXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBibG9jaywgYmVmb3JlCisgICB0aGUgZmlyc3Qgc3RhdGVtZW50IChpLmUuIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50KS4KKworIC0gRGVjbGFyaW5nIGEgdmFyaWFibGUgaW4gdGhlIGZvciBsb29wICJmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIgorICAgaXMgc3RpbGwgbm90IGFsbG93ZWQgaW4gdGhpcyBjb2RlYmFzZS4KKworIC0gTlVMTCBwb2ludGVycyBzaGFsbCBiZSB3cml0dGVuIGFzIE5VTEwsIG5vdCBhcyAwLgorCisgLSBXaGVuIGRlY2xhcmluZyBwb2ludGVycywgdGhlIHN0YXIgc2lkZXMgd2l0aCB0aGUgdmFyaWFibGUKKyAgIG5hbWUsIGkuZS4gImNoYXIgKnN0cmluZyIsIG5vdCAiY2hhciogc3RyaW5nIiBvcgorICAgImNoYXIgKiBzdHJpbmciLiAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gdW5kZXJzdGFuZCBjb2RlCisgICBsaWtlICJjaGFyICpzdHJpbmcsIGM7Ii4KKworIC0gVXNlIHdoaXRlc3BhY2UgYXJvdW5kIG9wZXJhdG9ycyBhbmQga2V5d29yZHMsIGJ1dCBub3QgaW5zaWRlCisgICBwYXJlbnRoZXNlcyBhbmQgbm90IGFyb3VuZCBmdW5jdGlvbnMuIFNvOgorCisgICAgICAgIHdoaWxlIChjb25kaXRpb24pCisJCWZ1bmMoYmFyICsgMSk7CisKKyAgIGFuZCBub3Q6CisKKyAgICAgICAgd2hpbGUoIGNvbmRpdGlvbiApCisJCWZ1bmMgKGJhcisxKTsKKworIC0gRG8gbm90IGV4cGxpY2l0bHkgY29tcGFyZSBhbiBpbnRlZ3JhbCB2YWx1ZSB3aXRoIGNvbnN0YW50IDAgb3IgJ1wwJywKKyAgIG9yIGEgcG9pbnRlciB2YWx1ZSB3aXRoIGNvbnN0YW50IE5VTEwuICBGb3IgaW5zdGFuY2UsIHRvIHZhbGlkYXRlIHRoYXQKKyAgIGNvdW50ZWQgYXJyYXkgPHB0ciwgY250PiBpcyBpbml0aWFsaXplZCBidXQgaGFzIG5vIGVsZW1lbnRzLCB3cml0ZToKKworCWlmICghcHRyIHx8IGNudCkKKwkJQlVHKCJlbXB0eSBhcnJheSBleHBlY3RlZCIpOworCisgICBhbmQgbm90OgorCisJaWYgKHB0ciA9PSBOVUxMIHx8IGNudCAhPSAwKTsKKwkJQlVHKCJlbXB0eSBhcnJheSBleHBlY3RlZCIpOworCisgLSBXZSBhdm9pZCB1c2luZyBicmFjZXMgdW5uZWNlc3NhcmlseS4gIEkuZS4KKworCWlmIChibGEpIHsKKwkJeCA9IDE7CisJfQorCisgICBpcyBmcm93bmVkIHVwb24uIEJ1dCB0aGVyZSBhcmUgYSBmZXcgZXhjZXB0aW9uczoKKworCS0gV2hlbiB0aGUgc3RhdGVtZW50IGV4dGVuZHMgb3ZlciBhIGZldyBsaW5lcyAoZS5nLiwgYSB3aGlsZSBsb29wCisJICB3aXRoIGFuIGVtYmVkZGVkIGNvbmRpdGlvbmFsLCBvciBhIGNvbW1lbnQpLiBFLmcuOgorCisJCXdoaWxlIChmb28pIHsKKwkJCWlmICh4KQorCQkJCW9uZSgpOworCQkJZWxzZQorCQkJCXR3bygpOworCQl9CisKKwkJaWYgKGZvbykgeworCQkJLyoKKwkJCSAqIFRoaXMgb25lIHJlcXVpcmVzIHNvbWUgZXhwbGFuYXRpb24sCisJCQkgKiBzbyB3ZSdyZSBiZXR0ZXIgb2ZmIHdpdGggYnJhY2VzIHRvIG1ha2UKKwkJCSAqIGl0IG9idmlvdXMgdGhhdCB0aGUgaW5kZW50YXRpb24gaXMgY29ycmVjdC4KKwkJCSAqLworCQkJZG9pdCgpOworCQl9CisKKwktIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGFybXMgdG8gYSBjb25kaXRpb25hbCBhbmQgc29tZSBvZiB0aGVtCisJICByZXF1aXJlIGJyYWNlcywgZW5jbG9zZSBldmVuIGEgc2luZ2xlIGxpbmUgYmxvY2sgaW4gYnJhY2VzIGZvcgorCSAgY29uc2lzdGVuY3kuIEUuZy46CisKKwkJaWYgKGZvbykgeworCQkJZG9pdCgpOworCQl9IGVsc2UgeworCQkJb25lKCk7CisJCQl0d28oKTsKKwkJCXRocmVlKCk7CisJCX0KKworIC0gV2UgdHJ5IHRvIGF2b2lkIGFzc2lnbm1lbnRzIGluIHRoZSBjb25kaXRpb24gb2YgYW4gImlmIiBzdGF0ZW1lbnQuCisKKyAtIFRyeSB0byBtYWtlIHlvdXIgY29kZSB1bmRlcnN0YW5kYWJsZS4gIFlvdSBtYXkgcHV0IGNvbW1lbnRzCisgICBpbiwgYnV0IGNvbW1lbnRzIGludmFyaWFibHkgdGVuZCB0byBzdGFsZSBvdXQgd2hlbiB0aGUgY29kZQorICAgdGhleSB3ZXJlIGRlc2NyaWJpbmcgY2hhbmdlcy4gIE9mdGVuIHNwbGl0dGluZyBhIGZ1bmN0aW9uCisgICBpbnRvIHR3byBtYWtlcyB0aGUgaW50ZW50aW9uIG9mIHRoZSBjb2RlIG11Y2ggY2xlYXJlci4KKworIC0gTXVsdGktbGluZSBjb21tZW50cyBpbmNsdWRlIHRoZWlyIGRlbGltaXRlcnMgb24gc2VwYXJhdGUgbGluZXMgZnJvbQorICAgdGhlIHRleHQuICBFLmcuCisKKwkvKgorCSAqIEEgdmVyeSBsb25nCisJICogbXVsdGktbGluZSBjb21tZW50LgorCSAqLworCisgICBOb3RlIGhvd2V2ZXIgdGhhdCBhIGNvbW1lbnQgdGhhdCBleHBsYWlucyBhIHRyYW5zbGF0YWJsZSBzdHJpbmcgdG8KKyAgIHRyYW5zbGF0b3JzIHVzZXMgYSBjb252ZW50aW9uIG9mIHN0YXJ0aW5nIHdpdGggYSBtYWdpYyB0b2tlbgorICAgIlRSQU5TTEFUT1JTOiAiLCBlLmcuCisKKwkvKgorCSAqIFRSQU5TTEFUT1JTOiBoZXJlIGlzIGEgY29tbWVudCB0aGF0IGV4cGxhaW5zIHRoZSBzdHJpbmcgdG8KKwkgKiBiZSB0cmFuc2xhdGVkLCB0aGF0IGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQuCisJICovCisJXygiSGVyZSBpcyBhIHRyYW5zbGF0YWJsZSBzdHJpbmcgZXhwbGFpbmVkIGJ5IHRoZSBhYm92ZS4iKTsKKworIC0gRG91YmxlIG5lZ2F0aW9uIGlzIG9mdGVuIGhhcmRlciB0byB1bmRlcnN0YW5kIHRoYW4gbm8gbmVnYXRpb24KKyAgIGF0IGFsbC4KKworIC0gVGhlcmUgYXJlIHR3byBzY2hvb2xzIG9mIHRob3VnaHQgd2hlbiBpdCBjb21lcyB0byBjb21wYXJpc29uLAorICAgZXNwZWNpYWxseSBpbnNpZGUgYSBsb29wLiBTb21lIHBlb3BsZSBwcmVmZXIgdG8gaGF2ZSB0aGUgbGVzcyBzdGFibGUKKyAgIHZhbHVlIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBhbmQgdGhlIG1vcmUgc3RhYmxlIHZhbHVlIG9uIHRoZSByaWdodCBoYW5kCisgICBzaWRlLCBlLmcuIGlmIHlvdSBoYXZlIGEgbG9vcCB0aGF0IGNvdW50cyB2YXJpYWJsZSBpIGRvd24gdG8gdGhlCisgICBsb3dlciBib3VuZCwKKworCXdoaWxlIChpID4gbG93ZXJfYm91bmQpIHsKKwkJZG8gc29tZXRoaW5nOworCQlpLS07CisJfQorCisgICBPdGhlciBwZW9wbGUgcHJlZmVyIHRvIGhhdmUgdGhlIHRleHR1YWwgb3JkZXIgb2YgdmFsdWVzIG1hdGNoIHRoZQorICAgYWN0dWFsIG9yZGVyIG9mIHZhbHVlcyBpbiB0aGVpciBjb21wYXJpc29uLCBzbyB0aGF0IHRoZXkgY2FuCisgICBtZW50YWxseSBkcmF3IGEgbnVtYmVyIGxpbmUgZnJvbSBsZWZ0IHRvIHJpZ2h0IGFuZCBwbGFjZSB0aGVzZQorICAgdmFsdWVzIGluIG9yZGVyLCBpLmUuCisKKwl3aGlsZSAobG93ZXJfYm91bmQgPCBpKSB7CisJCWRvIHNvbWV0aGluZzsKKwkJaS0tOworCX0KKworICAgQm90aCBhcmUgdmFsaWQsIGFuZCB3ZSB1c2UgYm90aC4gIEhvd2V2ZXIsIHRoZSBtb3JlICJzdGFibGUiIHRoZQorICAgc3RhYmxlIHNpZGUgYmVjb21lcywgdGhlIG1vcmUgd2UgdGVuZCB0byBwcmVmZXIgdGhlIGZvcm1lcgorICAgKGNvbXBhcmlzb24gd2l0aCBhIGNvbnN0YW50LCAiaSA+IDAiLCBpcyBhbiBleHRyZW1lIGV4YW1wbGUpLgorICAgSnVzdCBkbyBub3QgbWl4IHN0eWxlcyBpbiB0aGUgc2FtZSBwYXJ0IG9mIHRoZSBjb2RlIGFuZCBtaW1pYworICAgZXhpc3Rpbmcgc3R5bGVzIGluIHRoZSBuZWlnaGJvdXJob29kLgorCisgLSBUaGVyZSBhcmUgdHdvIHNjaG9vbHMgb2YgdGhvdWdodCB3aGVuIGl0IGNvbWVzIHRvIHNwbGl0dGluZyBhIGxvbmcKKyAgIGxvZ2ljYWwgbGluZSBpbnRvIG11bHRpcGxlIGxpbmVzLiAgU29tZSBwZW9wbGUgcHVzaCB0aGUgc2Vjb25kIGFuZAorICAgc3Vic2VxdWVudCBsaW5lcyBmYXIgZW5vdWdoIHRvIHRoZSByaWdodCB3aXRoIHRhYnMgYW5kIGFsaWduIHRoZW06CisKKyAgICAgICAgaWYgKHRoZV9iZWdpbm5pbmdfb2ZfYV92ZXJ5X2xvbmdfZXhwcmVzc2lvbl90aGF0X2hhc190byB8fAorCQlzcGFuX21vcmVfdGhhbl9hX3NpbmdsZV9saW5lX29mIHx8CisJCXRoZV9zb3VyY2VfdGV4dCkgeworICAgICAgICAgICAgICAgIC4uLgorCisgICB3aGlsZSBvdGhlciBwZW9wbGUgcHJlZmVyIHRvIGFsaWduIHRoZSBzZWNvbmQgYW5kIHRoZSBzdWJzZXF1ZW50CisgICBsaW5lcyB3aXRoIHRoZSBjb2x1bW4gaW1tZWRpYXRlbHkgaW5zaWRlIHRoZSBvcGVuaW5nIHBhcmVudGhlc2lzLAorICAgd2l0aCB0YWJzIGFuZCBzcGFjZXMsIGZvbGxvd2luZyBvdXIgInRhYnN0b3AgaXMgYWx3YXlzIGEgbXVsdGlwbGUKKyAgIG9mIDgiIGNvbnZlbnRpb246CisKKyAgICAgICAgaWYgKHRoZV9iZWdpbm5pbmdfb2ZfYV92ZXJ5X2xvbmdfZXhwcmVzc2lvbl90aGF0X2hhc190byB8fAorCSAgICBzcGFuX21vcmVfdGhhbl9hX3NpbmdsZV9saW5lX29mIHx8CisJICAgIHRoZV9zb3VyY2VfdGV4dCkgeworICAgICAgICAgICAgICAgIC4uLgorCisgICBCb3RoIGFyZSB2YWxpZCwgYW5kIHdlIHVzZSBib3RoLiAgQWdhaW4sIGp1c3QgZG8gbm90IG1peCBzdHlsZXMgaW4KKyAgIHRoZSBzYW1lIHBhcnQgb2YgdGhlIGNvZGUgYW5kIG1pbWljIGV4aXN0aW5nIHN0eWxlcyBpbiB0aGUKKyAgIG5laWdoYm91cmhvb2QuCisKKyAtIFdoZW4gc3BsaXR0aW5nIGEgbG9uZyBsb2dpY2FsIGxpbmUsIHNvbWUgcGVvcGxlIGNoYW5nZSBsaW5lIGJlZm9yZQorICAgYSBiaW5hcnkgb3BlcmF0b3IsIHNvIHRoYXQgdGhlIHJlc3VsdCBsb29rcyBsaWtlIGEgcGFyc2UgdHJlZSB3aGVuCisgICB5b3UgdHVybiB5b3VyIGhlYWQgOTAtZGVncmVlcyBjb3VudGVyY2xvY2t3aXNlOgorCisgICAgICAgIGlmICh0aGVfYmVnaW5uaW5nX29mX2FfdmVyeV9sb25nX2V4cHJlc3Npb25fdGhhdF9oYXNfdG8KKwkgICAgfHwgc3Bhbl9tb3JlX3RoYW5fYV9zaW5nbGVfbGluZV9vZl90aGVfc291cmNlX3RleHQpIHsKKworICAgd2hpbGUgb3RoZXIgcGVvcGxlIHByZWZlciB0byBsZWF2ZSB0aGUgb3BlcmF0b3IgYXQgdGhlIGVuZCBvZiB0aGUKKyAgIGxpbmU6CisKKyAgICAgICAgaWYgKHRoZV9iZWdpbm5pbmdfb2ZfYV92ZXJ5X2xvbmdfZXhwcmVzc2lvbl90aGF0X2hhc190byB8fAorCSAgICBzcGFuX21vcmVfdGhhbl9hX3NpbmdsZV9saW5lX29mX3RoZV9zb3VyY2VfdGV4dCkgeworCisgICBCb3RoIGFyZSB2YWxpZCwgYnV0IHdlIHRlbmQgdG8gdXNlIHRoZSBsYXR0ZXIgbW9yZSwgdW5sZXNzIHRoZQorICAgZXhwcmVzc2lvbiBnZXRzIGZhaXJseSBjb21wbGV4LCBpbiB3aGljaCBjYXNlIHRoZSBmb3JtZXIgdGVuZHMgdG8KKyAgIGJlIGVhc2llciB0byByZWFkLiAgQWdhaW4sIGp1c3QgZG8gbm90IG1peCBzdHlsZXMgaW4gdGhlIHNhbWUgcGFydAorICAgb2YgdGhlIGNvZGUgYW5kIG1pbWljIGV4aXN0aW5nIHN0eWxlcyBpbiB0aGUgbmVpZ2hib3VyaG9vZC4KKworIC0gV2hlbiBzcGxpdHRpbmcgYSBsb25nIGxvZ2ljYWwgbGluZSwgd2l0aCBldmVyeXRoaW5nIGVsc2UgYmVpbmcKKyAgIGVxdWFsLCBpdCBpcyBwcmVmZXJhYmxlIHRvIHNwbGl0IGFmdGVyIHRoZSBvcGVyYXRvciBhdCBoaWdoZXIKKyAgIGxldmVsIGluIHRoZSBwYXJzZSB0cmVlLiAgVGhhdCBpcywgdGhpcyBpcyBtb3JlIHByZWZlcmFibGU6CisKKwlpZiAoYV92ZXJ5X2xvbmdfdmFyaWFibGUgKiB0aGF0X2lzX3VzZWRfaW4gKworCSAgICBhX3ZlcnlfbG9uZ19leHByZXNzaW9uKSB7CisJCS4uLgorCisgICB0aGFuCisKKwlpZiAoYV92ZXJ5X2xvbmdfdmFyaWFibGUgKgorCSAgICB0aGF0X2lzX3VzZWRfaW4gKyBhX3ZlcnlfbG9uZ19leHByZXNzaW9uKSB7CisJCS4uLgorCisgLSBTb21lIGNsZXZlciB0cmlja3MsIGxpa2UgdXNpbmcgdGhlICEhIG9wZXJhdG9yIHdpdGggYXJpdGhtZXRpYworICAgY29uc3RydWN0cywgY2FuIGJlIGV4dHJlbWVseSBjb25mdXNpbmcgdG8gb3RoZXJzLiAgQXZvaWQgdGhlbSwKKyAgIHVubGVzcyB0aGVyZSBpcyBhIGNvbXBlbGxpbmcgcmVhc29uIHRvIHVzZSB0aGVtLgorCisgLSBVc2UgdGhlIEFQSS4gIE5vLCByZWFsbHkuICBXZSBoYXZlIGEgc3RyYnVmICh2YXJpYWJsZSBsZW5ndGgKKyAgIHN0cmluZyksIHNldmVyYWwgYXJyYXlzIHdpdGggdGhlIEFMTE9DX0dST1coKSBtYWNybywgYQorICAgc3RyaW5nX2xpc3QgZm9yIHNvcnRlZCBzdHJpbmcgbGlzdHMsIGEgaGFzaCBtYXAgKG1hcHBpbmcgc3RydWN0CisgICBvYmplY3RzKSBuYW1lZCAic3RydWN0IGRlY29yYXRlIiwgYW1vbmdzdCBvdGhlciB0aGluZ3MuCisKKyAtIFdoZW4geW91IGNvbWUgdXAgd2l0aCBhbiBBUEksIGRvY3VtZW50IGl0cyBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMKKyAgIGluIHRoZSBoZWFkZXIgZmlsZSB0aGF0IGV4cG9zZXMgdGhlIEFQSSB0byBpdHMgY2FsbGVycy4gVXNlIHdoYXQgaXMKKyAgIGluICJzdHJidWYuaCIgYXMgYSBtb2RlbCBmb3IgdGhlIGFwcHJvcHJpYXRlIHRvbmUgYW5kIGxldmVsIG9mCisgICBkZXRhaWwuCisKKyAtIFRoZSBmaXJzdCAjaW5jbHVkZSBpbiBDIGZpbGVzLCBleGNlcHQgaW4gcGxhdGZvcm0gc3BlY2lmaWMgY29tcGF0LworICAgaW1wbGVtZW50YXRpb25zLCBtdXN0IGJlIGVpdGhlciAiZ2l0LWNvbXBhdC11dGlsLmgiLCAiY2FjaGUuaCIgb3IKKyAgICJidWlsdGluLmgiLiAgWW91IGRvIG5vdCBoYXZlIHRvIGluY2x1ZGUgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZS4KKworIC0gQSBDIGZpbGUgbXVzdCBkaXJlY3RseSBpbmNsdWRlIHRoZSBoZWFkZXIgZmlsZXMgdGhhdCBkZWNsYXJlIHRoZQorICAgZnVuY3Rpb25zIGFuZCB0aGUgdHlwZXMgaXQgdXNlcywgZXhjZXB0IGZvciB0aGUgZnVuY3Rpb25zIGFuZCB0eXBlcworICAgdGhhdCBhcmUgbWFkZSBhdmFpbGFibGUgdG8gaXQgYnkgaW5jbHVkaW5nIG9uZSBvZiB0aGUgaGVhZGVyIGZpbGVzCisgICBpdCBtdXN0IGluY2x1ZGUgYnkgdGhlIHByZXZpb3VzIHJ1bGUuCisKKyAtIElmIHlvdSBhcmUgcGxhbm5pbmcgYSBuZXcgY29tbWFuZCwgY29uc2lkZXIgd3JpdGluZyBpdCBpbiBzaGVsbAorICAgb3IgcGVybCBmaXJzdCwgc28gdGhhdCBjaGFuZ2VzIGluIHNlbWFudGljcyBjYW4gYmUgZWFzaWx5CisgICBjaGFuZ2VkIGFuZCBkaXNjdXNzZWQuICBNYW55IEdpdCBjb21tYW5kcyBzdGFydGVkIG91dCBsaWtlCisgICB0aGF0LCBhbmQgYSBmZXcgYXJlIHN0aWxsIHNjcmlwdHMuCisKKyAtIEF2b2lkIGludHJvZHVjaW5nIGEgbmV3IGRlcGVuZGVuY3kgaW50byBHaXQuIFRoaXMgbWVhbnMgeW91CisgICB1c3VhbGx5IHNob3VsZCBzdGF5IGF3YXkgZnJvbSBzY3JpcHRpbmcgbGFuZ3VhZ2VzIG5vdCBhbHJlYWR5CisgICB1c2VkIGluIHRoZSBHaXQgY29yZSBjb21tYW5kIHNldCAodW5sZXNzIHlvdXIgY29tbWFuZCBpcyBjbGVhcmx5CisgICBzZXBhcmF0ZSBmcm9tIGl0LCBzdWNoIGFzIGFuIGltcG9ydGVyIHRvIGNvbnZlcnQgcmFuZG9tLXNjbS1YCisgICByZXBvc2l0b3JpZXMgdG8gR2l0KS4KKworIC0gV2hlbiB3ZSBwYXNzIDxzdHJpbmcsIGxlbmd0aD4gcGFpciB0byBmdW5jdGlvbnMsIHdlIHNob3VsZCB0cnkgdG8KKyAgIHBhc3MgdGhlbSBpbiB0aGF0IG9yZGVyLgorCisgLSBVc2UgR2l0J3MgZ2V0dGV4dCB3cmFwcGVycyB0byBtYWtlIHRoZSB1c2VyIGludGVyZmFjZQorICAgdHJhbnNsYXRhYmxlLiBTZWUgIk1hcmtpbmcgc3RyaW5ncyBmb3IgdHJhbnNsYXRpb24iIGluIHBvL1JFQURNRS4KKworIC0gVmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgbG9jYWwgdG8gYSBnaXZlbiBzb3VyY2UgZmlsZSBzaG91bGQgYmUgbWFya2VkCisgICB3aXRoICJzdGF0aWMiLiBWYXJpYWJsZXMgdGhhdCBhcmUgdmlzaWJsZSB0byBvdGhlciBzb3VyY2UgZmlsZXMKKyAgIG11c3QgYmUgZGVjbGFyZWQgd2l0aCAiZXh0ZXJuIiBpbiBoZWFkZXIgZmlsZXMuIEhvd2V2ZXIsIGZ1bmN0aW9uCisgICBkZWNsYXJhdGlvbnMgc2hvdWxkIG5vdCB1c2UgImV4dGVybiIsIGFzIHRoYXQgaXMgYWxyZWFkeSB0aGUgZGVmYXVsdC4KKworIC0gWW91IGNhbiBsYXVuY2ggZ2RiIGFyb3VuZCB5b3VyIHByb2dyYW0gdXNpbmcgdGhlIHNob3J0aGFuZCBHSVRfREVCVUdHRVIuCisgICBSdW4gYEdJVF9ERUJVR0dFUj0xIC4vYmluLXdyYXBwZXJzL2dpdCBmb29gIHRvIHNpbXBseSB1c2UgZ2RiIGFzIGlzLCBvcgorICAgcnVuIGBHSVRfREVCVUdHRVI9IjxkZWJ1Z2dlcj4gPGRlYnVnZ2VyLWFyZ3M+IiAuL2Jpbi13cmFwcGVycy9naXQgZm9vYCB0bworICAgdXNlIHlvdXIgb3duIGRlYnVnZ2VyIGFuZCBhcmd1bWVudHMuIEV4YW1wbGU6IGBHSVRfREVCVUdHRVI9ImRkZCAtLWdkYiIKKyAgIC4vYmluLXdyYXBwZXJzL2dpdCBsb2dgIChTZWUgYHdyYXAtZm9yLWJpbi5zaGAuKQorCitGb3IgUGVybCBwcm9ncmFtczoKKworIC0gTW9zdCBvZiB0aGUgQyBndWlkZWxpbmVzIGFib3ZlIGFwcGx5LgorCisgLSBXZSB0cnkgdG8gc3VwcG9ydCBQZXJsIDUuOCBhbmQgbGF0ZXIgKCJ1c2UgUGVybCA1LjAwOCIpLgorCisgLSB1c2Ugc3RyaWN0IGFuZCB1c2Ugd2FybmluZ3MgYXJlIHN0cm9uZ2x5IHByZWZlcnJlZC4KKworIC0gRG9uJ3Qgb3ZlcnVzZSBzdGF0ZW1lbnQgbW9kaWZpZXJzIHVubGVzcyB1c2luZyB0aGVtIG1ha2VzIHRoZQorICAgcmVzdWx0IGVhc2llciB0byBmb2xsb3cuCisKKwkuLi4gZG8gc29tZXRoaW5nIC4uLgorCWRvX3RoaXMoKSB1bmxlc3MgKGNvbmRpdGlvbik7CisgICAgICAgIC4uLiBkbyBzb21ldGhpbmcgZWxzZSAuLi4KKworICAgaXMgbW9yZSByZWFkYWJsZSB0aGFuOgorCisJLi4uIGRvIHNvbWV0aGluZyAuLi4KKwl1bmxlc3MgKGNvbmRpdGlvbikgeworCQlkb190aGlzKCk7CisJfQorICAgICAgICAuLi4gZG8gc29tZXRoaW5nIGVsc2UgLi4uCisKKyAgICpvbmx5KiB3aGVuIHRoZSBjb25kaXRpb24gaXMgc28gcmFyZSB0aGF0IGRvX3RoaXMoKSB3aWxsIGJlIGFsbW9zdAorICAgYWx3YXlzIGNhbGxlZC4KKworIC0gV2UgdHJ5IHRvIGF2b2lkIGFzc2lnbm1lbnRzIGluc2lkZSAiaWYgKCkiIGNvbmRpdGlvbnMuCisKKyAtIExlYXJuIGFuZCB1c2UgR2l0LnBtIGlmIHlvdSBuZWVkIHRoYXQgZnVuY3Rpb25hbGl0eS4KKworIC0gRm9yIEVtYWNzLCBpdCdzIHVzZWZ1bCB0byBwdXQgdGhlIGZvbGxvd2luZyBpbgorICAgR0lUX0NIRUNLT1VULy5kaXItbG9jYWxzLmVsLCBhc3N1bWluZyB5b3UgdXNlIGNwZXJsLW1vZGU6CisKKyAgICA7OyBub3RlIHRoZSBmaXJzdCBwYXJ0IGlzIHVzZWZ1bCBmb3IgQyBlZGl0aW5nLCB0b28KKyAgICAoKG5pbCAuICgoaW5kZW50LXRhYnMtbW9kZSAuIHQpCisgICAgICAgICAgICAgICAgICAodGFiLXdpZHRoIC4gOCkKKyAgICAgICAgICAgICAgICAgIChmaWxsLWNvbHVtbiAuIDgwKSkpCisgICAgIChjcGVybC1tb2RlIC4gKChjcGVybC1pbmRlbnQtbGV2ZWwgLiA4KQorICAgICAgICAgICAgICAgICAgICAoY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2UgLiBuaWwpCisgICAgICAgICAgICAgICAgICAgIChjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlIC4gdCkpKSkKKworRm9yIFB5dGhvbiBzY3JpcHRzOgorCisgLSBXZSBmb2xsb3cgUEVQLTggKGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDAwOC8pLgorCisgLSBBcyBhIG1pbmltdW0sIHdlIGFpbSB0byBiZSBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuNiBhbmQgMi43LgorCisgLSBXaGVyZSByZXF1aXJlZCBsaWJyYXJpZXMgZG8gbm90IHJlc3RyaWN0IHVzIHRvIFB5dGhvbiAyLCB3ZSB0cnkgdG8KKyAgIGFsc28gYmUgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzLjEgYW5kIGxhdGVyLgorCisgLSBXaGVuIHlvdSBtdXN0IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBVbmljb2RlIGxpdGVyYWxzIGFuZCBieXRlIHN0cmluZworICAgbGl0ZXJhbHMsIGl0IGlzIE9LIHRvIHVzZSB0aGUgJ2InIHByZWZpeC4gIEV2ZW4gdGhvdWdoIHRoZSBQeXRob24KKyAgIGRvY3VtZW50YXRpb24gZm9yIHZlcnNpb24gMi42IGRvZXMgbm90IG1lbnRpb24gdGhpcyBwcmVmaXgsIGl0IGhhcworICAgYmVlbiBzdXBwb3J0ZWQgc2luY2UgdmVyc2lvbiAyLjYuMC4KKworRXJyb3IgTWVzc2FnZXMKKworIC0gRG8gbm90IGVuZCBlcnJvciBtZXNzYWdlcyB3aXRoIGEgZnVsbCBzdG9wLgorCisgLSBEbyBub3QgY2FwaXRhbGl6ZSAoInVuYWJsZSB0byBvcGVuICVzIiwgbm90ICJVbmFibGUgdG8gb3BlbiAlcyIpCisKKyAtIFNheSB3aGF0IHRoZSBlcnJvciBpcyBmaXJzdCAoImNhbm5vdCBvcGVuICVzIiwgbm90ICIlczogY2Fubm90IG9wZW4iKQorCisKK0V4dGVybmFsbHkgVmlzaWJsZSBOYW1lcworCisgLSBGb3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1lcywgZm9sbG93IHRoZSBleGlzdGluZyBjb252ZW50aW9uOgorCisgICAuIFRoZSBzZWN0aW9uIG5hbWUgaW5kaWNhdGVzIHRoZSBhZmZlY3RlZCBzdWJzeXN0ZW0uCisKKyAgIC4gVGhlIHN1YnNlY3Rpb24gbmFtZSwgaWYgYW55LCBpbmRpY2F0ZXMgd2hpY2ggb2YgYW4gdW5ib3VuZGVkIHNldAorICAgICBvZiB0aGluZ3MgdG8gc2V0IHRoZSB2YWx1ZSBmb3IuCisKKyAgIC4gVGhlIHZhcmlhYmxlIG5hbWUgZGVzY3JpYmVzIHRoZSBlZmZlY3Qgb2YgdHdlYWtpbmcgdGhpcyBrbm9iLgorCisgICBUaGUgc2VjdGlvbiBhbmQgdmFyaWFibGUgbmFtZXMgdGhhdCBjb25zaXN0IG9mIG11bHRpcGxlIHdvcmRzIGFyZQorICAgZm9ybWVkIGJ5IGNvbmNhdGVuYXRpbmcgdGhlIHdvcmRzIHdpdGhvdXQgcHVuY3R1YXRpb25zIChlLmcuIGAtYCksCisgICBhbmQgYXJlIGJyb2tlbiB1c2luZyBidW1weUNhcHMgaW4gZG9jdW1lbnRhdGlvbiBhcyBhIGhpbnQgdG8gdGhlCisgICByZWFkZXIuCisKKyAgIFdoZW4gY2hvb3NpbmcgdGhlIHZhcmlhYmxlIG5hbWVzcGFjZSwgZG8gbm90IHVzZSB2YXJpYWJsZSBuYW1lIGZvcgorICAgc3BlY2lmeWluZyBwb3NzaWJseSB1bmJvdW5kZWQgc2V0IG9mIHRoaW5ncywgbW9zdCBub3RhYmx5IGFueXRoaW5nCisgICBhbiBlbmQgdXNlciBjYW4gZnJlZWx5IGNvbWUgdXAgd2l0aCAoZS5nLiBicmFuY2ggbmFtZXMpLiAgSW5zdGVhZCwKKyAgIHVzZSBzdWJzZWN0aW9uIG5hbWVzIG9yIHZhcmlhYmxlIHZhbHVlcywgbGlrZSB0aGUgZXhpc3RpbmcgdmFyaWFibGUKKyAgIGJyYW5jaC48bmFtZT4uZGVzY3JpcHRpb24gZG9lcy4KKworCitXcml0aW5nIERvY3VtZW50YXRpb246CisKKyBNb3N0IChpZiBub3QgYWxsKSBvZiB0aGUgZG9jdW1lbnRhdGlvbiBwYWdlcyBhcmUgd3JpdHRlbiBpbiB0aGUKKyBBc2NpaURvYyBmb3JtYXQgaW4gKi50eHQgZmlsZXMgKGUuZy4gRG9jdW1lbnRhdGlvbi9naXQudHh0KSwgYW5kCisgcHJvY2Vzc2VkIGludG8gSFRNTCBhbmQgbWFucGFnZXMgKGUuZy4gZ2l0Lmh0bWwgYW5kIGdpdC4xIGluIHRoZQorIHNhbWUgZGlyZWN0b3J5KS4KKworIFRoZSBkb2N1bWVudGF0aW9uIGxpYmVyYWxseSBtaXhlcyBVUyBhbmQgVUsgRW5nbGlzaCAoZW5fVVMvVUspCisgbm9ybXMgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFyLCB3aGljaCBpcyBzb21ld2hhdCB1bmZvcnR1bmF0ZS4KKyBJbiBhbiBpZGVhbCB3b3JsZCwgaXQgd291bGQgaGF2ZSBiZWVuIGJldHRlciBpZiBpdCBjb25zaXN0ZW50bHkKKyB1c2VkIG9ubHkgb25lIGFuZCBub3QgdGhlIG90aGVyLCBhbmQgd2Ugd291bGQgaGF2ZSBwaWNrZWQgZW5fVVMKKyAoaWYgeW91IHdpc2ggdG8gY29ycmVjdCB0aGUgRW5nbGlzaCBvZiBzb21lIG9mIHRoZSBleGlzdGluZworIGRvY3VtZW50YXRpb24sIHBsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24tcmVsYXRlZCBhZHZpY2UgaW4gdGhlCisgRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBmaWxlKS4KKworIEV2ZXJ5IHVzZXItdmlzaWJsZSBjaGFuZ2Ugc2hvdWxkIGJlIHJlZmxlY3RlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyBUaGUgc2FtZSBnZW5lcmFsIHJ1bGUgYXMgZm9yIGNvZGUgYXBwbGllcyAtLSBpbWl0YXRlIHRoZSBleGlzdGluZworIGNvbnZlbnRpb25zLgorCisgQSBmZXcgY29tbWVudGVkIGV4YW1wbGVzIGZvbGxvdyB0byBwcm92aWRlIHJlZmVyZW5jZSB3aGVuIHdyaXRpbmcgb3IKKyBtb2RpZnlpbmcgY29tbWFuZCB1c2FnZSBzdHJpbmdzIGFuZCBzeW5vcHNpcyBzZWN0aW9ucyBpbiB0aGUgbWFudWFsCisgcGFnZXM6CisKKyBQbGFjZWhvbGRlcnMgYXJlIHNwZWxsZWQgaW4gbG93ZXJjYXNlIGFuZCBlbmNsb3NlZCBpbiBhbmdsZSBicmFja2V0czoKKyAgIDxmaWxlPgorICAgLS1zb3J0PTxrZXk+CisgICAtLWFiYnJldls9PG4+XQorCisgSWYgYSBwbGFjZWhvbGRlciBoYXMgbXVsdGlwbGUgd29yZHMsIHRoZXkgYXJlIHNlcGFyYXRlZCBieSBkYXNoZXM6CisgICA8bmV3LWJyYW5jaC1uYW1lPgorICAgLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5PgorCisgUG9zc2liaWxpdHkgb2YgbXVsdGlwbGUgb2NjdXJyZW5jZXMgaXMgaW5kaWNhdGVkIGJ5IHRocmVlIGRvdHM6CisgICA8ZmlsZT4uLi4KKyAgIChPbmUgb3IgbW9yZSBvZiA8ZmlsZT4uKQorCisgT3B0aW9uYWwgcGFydHMgYXJlIGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0czoKKyAgIFs8ZXh0cmE+XQorICAgKFplcm8gb3Igb25lIDxleHRyYT4uKQorCisgICAtLWV4ZWMtcGF0aFs9PHBhdGg+XQorICAgKE9wdGlvbiB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50LiAgTm90ZSB0aGF0IHRoZSAiPSIgaXMgaW5zaWRlIHRoZQorICAgYnJhY2tldHMuKQorCisgICBbPHBhdGNoPi4uLl0KKyAgIChaZXJvIG9yIG1vcmUgb2YgPHBhdGNoPi4gIE5vdGUgdGhhdCB0aGUgZG90cyBhcmUgaW5zaWRlLCBub3QKKyAgIG91dHNpZGUgdGhlIGJyYWNrZXRzLikKKworIE11bHRpcGxlIGFsdGVybmF0aXZlcyBhcmUgaW5kaWNhdGVkIHdpdGggdmVydGljYWwgYmFyczoKKyAgIFstcSB8IC0tcXVpZXRdCisgICBbLS11dGY4IHwgLS1uby11dGY4XQorCisgUGFyZW50aGVzZXMgYXJlIHVzZWQgZm9yIGdyb3VwaW5nOgorICAgWyg8cmV2PiB8IDxyYW5nZT4pLi4uXQorICAgKEFueSBudW1iZXIgb2YgZWl0aGVyIDxyZXY+IG9yIDxyYW5nZT4uICBQYXJlbnMgYXJlIG5lZWRlZCB0byBtYWtlCisgICBpdCBjbGVhciB0aGF0ICIuLi4iIHBlcnRhaW5zIHRvIGJvdGggPHJldj4gYW5kIDxyYW5nZT4uKQorCisgICBbKC1wIDxwYXJlbnQ+KS4uLl0KKyAgIChBbnkgbnVtYmVyIG9mIG9wdGlvbiAtcCwgZWFjaCB3aXRoIG9uZSA8cGFyZW50PiBhcmd1bWVudC4pCisKKyAgIGdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC1kIHwgPGJyYW5jaD4pCisgICAoT25lIGFuZCBvbmx5IG9uZSBvZiAiLWEiLCAiLWQiIG9yICI8YnJhbmNoPiIgX211c3RfIChubyBzcXVhcmUKKyAgIGJyYWNrZXRzKSBiZSBwcm92aWRlZC4pCisKKyBBbmQgYSBzb21ld2hhdCBtb3JlIGNvbnRyaXZlZCBleGFtcGxlOgorICAgLS1kaWZmLWZpbHRlcj1bKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0KKyAgIEhlcmUgIj0iIGlzIG91dHNpZGUgdGhlIGJyYWNrZXRzLCBiZWNhdXNlICItLWRpZmYtZmlsdGVyPSIgaXMgYQorICAgdmFsaWQgdXNhZ2UuICAiKiIgaGFzIGl0cyBvd24gcGFpciBvZiBicmFja2V0cywgYmVjYXVzZSBpdCBjYW4KKyAgIChvcHRpb25hbGx5KSBiZSBzcGVjaWZpZWQgb25seSB3aGVuIG9uZSBvciBtb3JlIG9mIHRoZSBsZXR0ZXJzIGlzCisgICBhbHNvIHByb3ZpZGVkLgorCisgIEEgbm90ZSBvbiBub3RhdGlvbjoKKyAgIFVzZSAnZ2l0JyAoYWxsIGxvd2VyY2FzZSkgd2hlbiB0YWxraW5nIGFib3V0IGNvbW1hbmRzIGkuZS4gc29tZXRoaW5nCisgICB0aGUgdXNlciB3b3VsZCB0eXBlIGludG8gYSBzaGVsbCBhbmQgdXNlICdHaXQnICh1cHBlcmNhc2UgZmlyc3QgbGV0dGVyKQorICAgd2hlbiB0YWxraW5nIGFib3V0IHRoZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIGFuZCBpdHMgcHJvcGVydGllcy4KKworIEEgZmV3IGNvbW1lbnRlZCBleGFtcGxlcyBmb2xsb3cgdG8gcHJvdmlkZSByZWZlcmVuY2Ugd2hlbiB3cml0aW5nIG9yCisgbW9kaWZ5aW5nIHBhcmFncmFwaHMgb3Igb3B0aW9uL2NvbW1hbmQgZXhwbGFuYXRpb25zIHRoYXQgY29udGFpbiBvcHRpb25zCisgb3IgY29tbWFuZHM6CisKKyBMaXRlcmFsIGV4YW1wbGVzIChlLmcuIHVzZSBvZiBjb21tYW5kLWxpbmUgb3B0aW9ucywgY29tbWFuZCBuYW1lcywKKyBicmFuY2ggbmFtZXMsIFVSTHMsIHBhdGhuYW1lcyAoZmlsZXMgYW5kIGRpcmVjdG9yaWVzKSwgY29uZmlndXJhdGlvbiBhbmQKKyBlbnZpcm9ubWVudCB2YXJpYWJsZXMpIG11c3QgYmUgdHlwZXNldCBpbiBtb25vc3BhY2UgKGkuZS4gd3JhcHBlZCB3aXRoCisgYmFja3RpY2tzKToKKyAgIGAtLXByZXR0eT1vbmVsaW5lYAorICAgYGdpdCByZXYtbGlzdGAKKyAgIGByZW1vdGUucHVzaERlZmF1bHRgCisgICBgaHR0cDovL2dpdC5leGFtcGxlLmNvbWAKKyAgIGAuZ2l0L2NvbmZpZ2AKKyAgIGBHSVRfRElSYAorICAgYEhFQURgCisKKyBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBtdXN0IGJlIHByZWZpeGVkIHdpdGggIiQiIG9ubHkgd2hlbiByZWZlcnJpbmcgdG8gaXRzCisgdmFsdWUgYW5kIG5vdCB3aGVuIHJlZmVycmluZyB0byB0aGUgdmFyaWFibGUgaXRzZWxmLCBpbiB0aGlzIGNhc2UgdGhlcmUgaXMKKyBub3RoaW5nIHRvIGFkZCBleGNlcHQgdGhlIGJhY2t0aWNrczoKKyAgIGBHSVRfRElSYCBpcyBzcGVjaWZpZWQKKyAgIGAkR0lUX0RJUi9ob29rcy9wcmUtcmVjZWl2ZWAKKworIFdvcmQgcGhyYXNlcyBlbmNsb3NlZCBpbiBgYmFja3RpY2sgY2hhcmFjdGVyc2AgYXJlIHJlbmRlcmVkIGxpdGVyYWxseQorIGFuZCB3aWxsIG5vdCBiZSBmdXJ0aGVyIGV4cGFuZGVkLiBUaGUgdXNlIG9mIGBiYWNrdGlja3NgIHRvIGFjaGlldmUgdGhlCisgcHJldmlvdXMgcnVsZSBtZWFucyB0aGF0IGxpdGVyYWwgZXhhbXBsZXMgc2hvdWxkIG5vdCB1c2UgQXNjaWlEb2MKKyBlc2NhcGVzLgorICAgQ29ycmVjdDoKKyAgICAgIGAtLXByZXR0eT1vbmVsaW5lYAorICAgSW5jb3JyZWN0OgorICAgICAgYFwtLXByZXR0eT1vbmVsaW5lYAorCisgSWYgc29tZSBwbGFjZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBuZWVkcyB0byB0eXBlc2V0IGEgY29tbWFuZCB1c2FnZQorIGV4YW1wbGUgd2l0aCBpbmxpbmUgc3Vic3RpdHV0aW9ucywgaXQgaXMgZmluZSB0byB1c2UgK21vbm9zcGFjZWQgYW5kCisgaW5saW5lIHN1YnN0aXR1dGVkIHRleHQrIGluc3RlYWQgb2YgYG1vbm9zcGFjZWQgbGl0ZXJhbCB0ZXh0YCwgYW5kIHdpdGgKKyB0aGUgZm9ybWVyLCB0aGUgcGFydCB0aGF0IHNob3VsZCBub3QgZ2V0IHN1YnN0aXR1dGVkIG11c3QgYmUKKyBxdW90ZWQvZXNjYXBlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZDlkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCkBAIC0wLDAgKzEsNDY5IEBACisjIEd1YXJkIGFnYWluc3QgZW52aXJvbm1lbnQgdmFyaWFibGVzCitNQU4xX1RYVCA9CitNQU41X1RYVCA9CitNQU43X1RYVCA9CitURUNIX0RPQ1MgPQorQVJUSUNMRVMgPQorU1BfQVJUSUNMRVMgPQorT0JTT0xFVEVfSFRNTCA9CisKKy1pbmNsdWRlIEdJVC1FWENMVURFRC1QUk9HUkFNUworCitNQU4xX1RYVCArPSAkKGZpbHRlci1vdXQgXAorCQkkKHBhdHN1YnN0ICUsJS50eHQsJChFWENMVURFRF9QUk9HUkFNUykpIFwKKwkJJChhZGRzdWZmaXggLnR4dCwgJChBUlRJQ0xFUykgJChTUF9BUlRJQ0xFUykpLCBcCisJCSQod2lsZGNhcmQgZ2l0LSoudHh0KSkKK01BTjFfVFhUICs9IGdpdC50eHQKK01BTjFfVFhUICs9IGdpdGsudHh0CitNQU4xX1RYVCArPSBnaXR3ZWIudHh0CisKK01BTjVfVFhUICs9IGdpdGF0dHJpYnV0ZXMudHh0CitNQU41X1RYVCArPSBnaXRob29rcy50eHQKK01BTjVfVFhUICs9IGdpdGlnbm9yZS50eHQKK01BTjVfVFhUICs9IGdpdG1vZHVsZXMudHh0CitNQU41X1RYVCArPSBnaXRyZXBvc2l0b3J5LWxheW91dC50eHQKK01BTjVfVFhUICs9IGdpdHdlYi5jb25mLnR4dAorCitNQU43X1RYVCArPSBnaXRjbGkudHh0CitNQU43X1RYVCArPSBnaXRjb3JlLXR1dG9yaWFsLnR4dAorTUFON19UWFQgKz0gZ2l0Y3JlZGVudGlhbHMudHh0CitNQU43X1RYVCArPSBnaXRjdnMtbWlncmF0aW9uLnR4dAorTUFON19UWFQgKz0gZ2l0ZGlmZmNvcmUudHh0CitNQU43X1RYVCArPSBnaXRldmVyeWRheS50eHQKK01BTjdfVFhUICs9IGdpdGZhcS50eHQKK01BTjdfVFhUICs9IGdpdGdsb3NzYXJ5LnR4dAorTUFON19UWFQgKz0gZ2l0bmFtZXNwYWNlcy50eHQKK01BTjdfVFhUICs9IGdpdHJlbW90ZS1oZWxwZXJzLnR4dAorTUFON19UWFQgKz0gZ2l0cmV2aXNpb25zLnR4dAorTUFON19UWFQgKz0gZ2l0c3VibW9kdWxlcy50eHQKK01BTjdfVFhUICs9IGdpdHR1dG9yaWFsLTIudHh0CitNQU43X1RYVCArPSBnaXR0dXRvcmlhbC50eHQKK01BTjdfVFhUICs9IGdpdHdvcmtmbG93cy50eHQKKworaWZkZWYgTUFOX0ZJTFRFUgorTUFOX1RYVCA9ICQoZmlsdGVyICQoTUFOX0ZJTFRFUiksJChNQU4xX1RYVCkgJChNQU41X1RYVCkgJChNQU43X1RYVCkpCitlbHNlCitNQU5fVFhUID0gJChNQU4xX1RYVCkgJChNQU41X1RYVCkgJChNQU43X1RYVCkKK01BTl9GSUxURVIgPSAkKE1BTl9UWFQpCitlbmRpZgorCitNQU5fWE1MID0gJChwYXRzdWJzdCAlLnR4dCwlLnhtbCwkKE1BTl9UWFQpKQorTUFOX0hUTUwgPSAkKHBhdHN1YnN0ICUudHh0LCUuaHRtbCwkKE1BTl9UWFQpKQorR0lUX01BTl9SRUYgPSBtYXN0ZXIKKworT0JTT0xFVEVfSFRNTCArPSBldmVyeWRheS5odG1sCitPQlNPTEVURV9IVE1MICs9IGdpdC1yZW1vdGUtaGVscGVycy5odG1sCisKK0FSVElDTEVTICs9IGhvd3RvLWluZGV4CitBUlRJQ0xFUyArPSBnaXQtdG9vbHMKK0FSVElDTEVTICs9IGdpdC1iaXNlY3QtbGsyMDA5CisjIHdpdGggdGhlaXIgb3duIGZvcm1hdHRpbmcgcnVsZXMuCitTUF9BUlRJQ0xFUyArPSB1c2VyLW1hbnVhbAorU1BfQVJUSUNMRVMgKz0gaG93dG8vbmV3LWNvbW1hbmQKK1NQX0FSVElDTEVTICs9IGhvd3RvL3JldmVydC1icmFuY2gtcmViYXNlCitTUF9BUlRJQ0xFUyArPSBob3d0by91c2luZy1tZXJnZS1zdWJ0cmVlCitTUF9BUlRJQ0xFUyArPSBob3d0by91c2luZy1zaWduZWQtdGFnLWluLXB1bGwtcmVxdWVzdAorU1BfQVJUSUNMRVMgKz0gaG93dG8vdXNlLWdpdC1kYWVtb24KK1NQX0FSVElDTEVTICs9IGhvd3RvL3VwZGF0ZS1ob29rLWV4YW1wbGUKK1NQX0FSVElDTEVTICs9IGhvd3RvL3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwCitTUF9BUlRJQ0xFUyArPSBob3d0by9zZXBhcmF0aW5nLXRvcGljLWJyYW5jaGVzCitTUF9BUlRJQ0xFUyArPSBob3d0by9yZXZlcnQtYS1mYXVsdHktbWVyZ2UKK1NQX0FSVElDTEVTICs9IGhvd3RvL3JlY292ZXItY29ycnVwdGVkLWJsb2Itb2JqZWN0CitTUF9BUlRJQ0xFUyArPSBob3d0by9yZWNvdmVyLWNvcnJ1cHRlZC1vYmplY3QtaGFyZGVyCitTUF9BUlRJQ0xFUyArPSBob3d0by9yZWJ1aWxkLWZyb20tdXBkYXRlLWhvb2sKK1NQX0FSVElDTEVTICs9IGhvd3RvL3JlYmFzZS1mcm9tLWludGVybmFsLWJyYW5jaAorU1BfQVJUSUNMRVMgKz0gaG93dG8va2VlcC1jYW5vbmljYWwtaGlzdG9yeS1jb3JyZWN0CitTUF9BUlRJQ0xFUyArPSBob3d0by9tYWludGFpbi1naXQKK0FQSV9ET0NTID0gJChwYXRzdWJzdCAlLnR4dCwlLCQoZmlsdGVyLW91dCB0ZWNobmljYWwvYXBpLWluZGV4LXNrZWwudHh0IHRlY2huaWNhbC9hcGktaW5kZXgudHh0LCAkKHdpbGRjYXJkIHRlY2huaWNhbC9hcGktKi50eHQpKSkKK1NQX0FSVElDTEVTICs9ICQoQVBJX0RPQ1MpCisKK1RFQ0hfRE9DUyArPSBNeUZpcnN0Q29udHJpYnV0aW9uCitURUNIX0RPQ1MgKz0gTXlGaXJzdE9iamVjdFdhbGsKK1RFQ0hfRE9DUyArPSBTdWJtaXR0aW5nUGF0Y2hlcworVEVDSF9ET0NTICs9IHRlY2huaWNhbC9oYXNoLWZ1bmN0aW9uLXRyYW5zaXRpb24KK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvaHR0cC1wcm90b2NvbAorVEVDSF9ET0NTICs9IHRlY2huaWNhbC9pbmRleC1mb3JtYXQKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvbG9uZy1ydW5uaW5nLXByb2Nlc3MtcHJvdG9jb2wKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvbXVsdGktcGFjay1pbmRleAorVEVDSF9ET0NTICs9IHRlY2huaWNhbC9wYWNrLWZvcm1hdAorVEVDSF9ET0NTICs9IHRlY2huaWNhbC9wYWNrLWhldXJpc3RpY3MKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvcGFjay1wcm90b2NvbAorVEVDSF9ET0NTICs9IHRlY2huaWNhbC9wYXJ0aWFsLWNsb25lCitURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL3Byb3RvY29sLWNhcGFiaWxpdGllcworVEVDSF9ET0NTICs9IHRlY2huaWNhbC9wcm90b2NvbC1jb21tb24KK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvcHJvdG9jb2wtdjIKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvcmFjeS1naXQKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvc2VuZC1wYWNrLXBpcGVsaW5lCitURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL3NoYWxsb3cKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvc2lnbmF0dXJlLWZvcm1hdAorVEVDSF9ET0NTICs9IHRlY2huaWNhbC90cml2aWFsLW1lcmdlCitTUF9BUlRJQ0xFUyArPSAkKFRFQ0hfRE9DUykKK1NQX0FSVElDTEVTICs9IHRlY2huaWNhbC9hcGktaW5kZXgKKworQVJUSUNMRVNfSFRNTCArPSAkKHBhdHN1YnN0ICUsJS5odG1sLCQoQVJUSUNMRVMpICQoU1BfQVJUSUNMRVMpKQorSFRNTF9GSUxURVIgPz0gJChBUlRJQ0xFU19IVE1MKSAkKE9CU09MRVRFX0hUTUwpCitET0NfSFRNTCA9ICQoTUFOX0hUTUwpICQoZmlsdGVyICQoSFRNTF9GSUxURVIpLCQoQVJUSUNMRVNfSFRNTCkgJChPQlNPTEVURV9IVE1MKSkKKworRE9DX01BTjEgPSAkKHBhdHN1YnN0ICUudHh0LCUuMSwkKGZpbHRlciAkKE1BTl9GSUxURVIpLCQoTUFOMV9UWFQpKSkKK0RPQ19NQU41ID0gJChwYXRzdWJzdCAlLnR4dCwlLjUsJChmaWx0ZXIgJChNQU5fRklMVEVSKSwkKE1BTjVfVFhUKSkpCitET0NfTUFONyA9ICQocGF0c3Vic3QgJS50eHQsJS43LCQoZmlsdGVyICQoTUFOX0ZJTFRFUiksJChNQU43X1RYVCkpKQorCitwcmVmaXggPz0gJChIT01FKQorYmluZGlyID89ICQocHJlZml4KS9iaW4KK2h0bWxkaXIgPz0gJChwcmVmaXgpL3NoYXJlL2RvYy9naXQtZG9jCitpbmZvZGlyID89ICQocHJlZml4KS9zaGFyZS9pbmZvCitwZGZkaXIgPz0gJChwcmVmaXgpL3NoYXJlL2RvYy9naXQtZG9jCittYW5kaXIgPz0gJChwcmVmaXgpL3NoYXJlL21hbgorbWFuMWRpciA9ICQobWFuZGlyKS9tYW4xCittYW41ZGlyID0gJChtYW5kaXIpL21hbjUKK21hbjdkaXIgPSAkKG1hbmRpcikvbWFuNworIyBERVNURElSID0KKworQVNDSUlET0MgPSBhc2NpaWRvYworQVNDSUlET0NfRVhUUkEgPQorQVNDSUlET0NfSFRNTCA9IHhodG1sMTEKK0FTQ0lJRE9DX0RPQ0JPT0sgPSBkb2Nib29rCitBU0NJSURPQ19DT05GID0gLWYgYXNjaWlkb2MuY29uZgorQVNDSUlET0NfQ09NTU9OID0gJChBU0NJSURPQykgJChBU0NJSURPQ19FWFRSQSkgJChBU0NJSURPQ19DT05GKSBcCisJCS1hbWFudmVyc2lvbj0kKEdJVF9WRVJTSU9OKSBcCisJCS1hbWFubWFudWFsPSdHaXQgTWFudWFsJyAtYW1hbnNvdXJjZT0nR2l0JworVFhUX1RPX0hUTUwgPSAkKEFTQ0lJRE9DX0NPTU1PTikgLWIgJChBU0NJSURPQ19IVE1MKQorVFhUX1RPX1hNTCA9ICQoQVNDSUlET0NfQ09NTU9OKSAtYiAkKEFTQ0lJRE9DX0RPQ0JPT0spCitNQU5QQUdFX1hTTCA9IG1hbnBhZ2Utbm9ybWFsLnhzbAorWE1MVE8gPSB4bWx0bworWE1MVE9fRVhUUkEgPQorSU5TVEFMTCA/PSBpbnN0YWxsCitSTSA/PSBybSAtZgorTUFOX1JFUE8gPSAuLi8uLi9naXQtbWFucGFnZXMKK0hUTUxfUkVQTyA9IC4uLy4uL2dpdC1odG1sZG9jcworCitNQUtFSU5GTyA9IG1ha2VpbmZvCitJTlNUQUxMX0lORk8gPSBpbnN0YWxsLWluZm8KK0RPQ0JPT0syWF9URVhJID0gZG9jYm9vazJ4LXRleGkKK0RCTEFURVggPSBkYmxhdGV4CitBU0NJSURPQ19EQkxBVEVYX0RJUiA9IC9ldGMvYXNjaWlkb2MvZGJsYXRleAorREJMQVRFWF9DT01NT04gPSAtcCAkKEFTQ0lJRE9DX0RCTEFURVhfRElSKS9hc2NpaWRvYy1kYmxhdGV4LnhzbCAtcyAkKEFTQ0lJRE9DX0RCTEFURVhfRElSKS9hc2NpaWRvYy1kYmxhdGV4LnN0eQoraWZuZGVmIFBFUkxfUEFUSAorCVBFUkxfUEFUSCA9IC91c3IvYmluL3BlcmwKK2VuZGlmCisKKy1pbmNsdWRlIC4uL2NvbmZpZy5tYWsuYXV0b2dlbgorLWluY2x1ZGUgLi4vY29uZmlnLm1haworCitpZm5kZWYgTk9fTUFOX0JPTERfTElURVJBTAorWE1MVE9fRVhUUkEgKz0gLW0gbWFucGFnZS1ib2xkLWxpdGVyYWwueHNsCitlbmRpZgorCisjIE5ld2VyIERvY0Jvb2sgc3R5bGVzaGVldCBlbWl0cyB3YXJuaW5nIGNydWZ0IGluIHRoZSBvdXRwdXQgd2hlbgorIyB0aGlzIGlzIG5vdCBzZXQsIGFuZCBpZiBzZXQgaXQgc2hvd3MgYW4gYWJzb2x1dGUgbGluay4gIE9sZGVyCisjIHN0eWxlc2hlZXRzIHNpbXBseSBpZ25vcmUgdGhpcyBwYXJhbWV0ZXIuCisjCisjIERpc3Ryb3MgbWF5IHdhbnQgdG8gdXNlIE1BTl9CQVNFX1VSTD1maWxlOi8vL3BhdGgvdG8vZ2l0L2RvY3MvCisjIG9yIHNpbWlsYXIuCitpZm5kZWYgTUFOX0JBU0VfVVJMCitNQU5fQkFTRV9VUkwgPSBmaWxlOi8vJChodG1sZGlyKS8KK2VuZGlmCitYTUxUT19FWFRSQSArPSAtbSBtYW5wYWdlLWJhc2UtdXJsLnhzbAorCisjIElmIHlvdXIgdGFyZ2V0IHN5c3RlbSB1c2VzIEdOVSBncm9mZiwgaXQgbWF5IHRyeSB0byByZW5kZXIKKyMgYXBvc3Ryb3BoZXMgYXMgYSAicHJldHR5IiBhcG9zdHJvcGhlIHVzaW5nIHVuaWNvZGUuICBUaGlzIGJyZWFrcworIyBjdXQmcGFzdGUsIHNvIHlvdSBzaG91bGQgc2V0IEdOVV9ST0ZGIHRvIGZvcmNlIHRoZW0gdG8gYmUgQVNDSUkKKyMgYXBvc3Ryb3BoZXMuICBVbmZvcnR1bmF0ZWx5IGRvZXMgbm90IHdvcmsgd2l0aCBub24tR05VIHJvZmYuCitpZmRlZiBHTlVfUk9GRgorWE1MVE9fRVhUUkEgKz0gLW0gbWFucGFnZS1xdW90ZS1hcG9zLnhzbAorZW5kaWYKKworaWZkZWYgVVNFX0FTQ0lJRE9DVE9SCitBU0NJSURPQyA9IGFzY2lpZG9jdG9yCitBU0NJSURPQ19DT05GID0KK0FTQ0lJRE9DX0hUTUwgPSB4aHRtbDUKK0FTQ0lJRE9DX0RPQ0JPT0sgPSBkb2Nib29rNQorQVNDSUlET0NfRVhUUkEgKz0gLWFjb21wYXQtbW9kZSAtYXRhYnNpemU9OAorQVNDSUlET0NfRVhUUkEgKz0gLUkuIC1yYXNjaWlkb2N0b3ItZXh0ZW5zaW9ucworQVNDSUlET0NfRVhUUkEgKz0gLWFsaXRkZD0nJlwjeDJkOyZcI3gyZDsnCitEQkxBVEVYX0NPTU1PTiA9CitYTUxUT19FWFRSQSArPSAtLXNraXAtdmFsaWRhdGlvbgorWE1MVE9fRVhUUkEgKz0gLXggbWFucGFnZS54c2wKK2VuZGlmCisKK1NIRUxMX1BBVEggPz0gJChTSEVMTCkKKyMgU2hlbGwgcXVvdGU7CitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKKworaWZkZWYgREVGQVVMVF9QQUdFUgorREVGQVVMVF9QQUdFUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVGQVVMVF9QQUdFUikpCitBU0NJSURPQ19FWFRSQSArPSAtYSAnZ2l0LWRlZmF1bHQtcGFnZXI9JChERUZBVUxUX1BBR0VSX1NRKScKK2VuZGlmCisKK2lmZGVmIERFRkFVTFRfRURJVE9SCitERUZBVUxUX0VESVRPUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVGQVVMVF9FRElUT1IpKQorQVNDSUlET0NfRVhUUkEgKz0gLWEgJ2dpdC1kZWZhdWx0LWVkaXRvcj0kKERFRkFVTFRfRURJVE9SX1NRKScKK2VuZGlmCisKK1FVSUVUX1NVQkRJUjAgID0gKyQoTUFLRSkgLUMgIyBzcGFjZSB0byBzZXBhcmF0ZSAtQyBhbmQgc3ViZGlyCitRVUlFVF9TVUJESVIxICA9CisKK2lmbmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHcpLHcpCitQUklOVF9ESVIgPSAtLW5vLXByaW50LWRpcmVjdG9yeQorZWxzZSAjICJtYWtlIC13IgorTk9fU1VCRElSID0gOgorZW5kaWYKKworaWZuZXEgKCQoZmluZHN0cmluZyAkKE1BS0VGTEFHUykscykscykKK2lmbmRlZiBWCisJUVVJRVRfQVNDSUlET0MJPSBAZWNobyAnICAgJyBBU0NJSURPQyAkQDsKKwlRVUlFVF9YTUxUTwk9IEBlY2hvICcgICAnIFhNTFRPICRAOworCVFVSUVUX0RCMlRFWEkJPSBAZWNobyAnICAgJyBEQjJURVhJICRAOworCVFVSUVUX01BS0VJTkZPCT0gQGVjaG8gJyAgICcgTUFLRUlORk8gJEA7CisJUVVJRVRfREJMQVRFWAk9IEBlY2hvICcgICAnIERCTEFURVggJEA7CisJUVVJRVRfWFNMVFBST0MJPSBAZWNobyAnICAgJyBYU0xUUFJPQyAkQDsKKwlRVUlFVF9HRU4JPSBAZWNobyAnICAgJyBHRU4gJEA7CisJUVVJRVRfTElOVAk9IEBlY2hvICcgICAnIExJTlQgJEA7CisJUVVJRVRfU1RERVJSCT0gMj4gL2Rldi9udWxsCisJUVVJRVRfU1VCRElSMAk9ICtAc3ViZGlyPQorCVFVSUVUX1NVQkRJUjEJPSA7JChOT19TVUJESVIpIGVjaG8gJyAgICcgU1VCRElSICQkc3ViZGlyOyBcCisJCQkgICQoTUFLRSkgJChQUklOVF9ESVIpIC1DICQkc3ViZGlyCisJZXhwb3J0IFYKK2VuZGlmCitlbmRpZgorCithbGw6IGh0bWwgbWFuCisKK2h0bWw6ICQoRE9DX0hUTUwpCisKK21hbjogbWFuMSBtYW41IG1hbjcKK21hbjE6ICQoRE9DX01BTjEpCittYW41OiAkKERPQ19NQU41KQorbWFuNzogJChET0NfTUFONykKKworaW5mbzogZ2l0LmluZm8gZ2l0bWFuLmluZm8KKworcGRmOiB1c2VyLW1hbnVhbC5wZGYKKworaW5zdGFsbDogaW5zdGFsbC1tYW4KKworaW5zdGFsbC1tYW46IG1hbgorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoREVTVERJUikkKG1hbjFkaXIpCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQobWFuNWRpcikKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKERFU1RESVIpJChtYW43ZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0ICQoRE9DX01BTjEpICQoREVTVERJUikkKG1hbjFkaXIpCisJJChJTlNUQUxMKSAtbSA2NDQgJChET0NfTUFONSkgJChERVNURElSKSQobWFuNWRpcikKKwkkKElOU1RBTEwpIC1tIDY0NCAkKERPQ19NQU43KSAkKERFU1RESVIpJChtYW43ZGlyKQorCitpbnN0YWxsLWluZm86IGluZm8KKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKERFU1RESVIpJChpbmZvZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0IGdpdC5pbmZvIGdpdG1hbi5pbmZvICQoREVTVERJUikkKGluZm9kaXIpCisJaWYgdGVzdCAtciAkKERFU1RESVIpJChpbmZvZGlyKS9kaXI7IHRoZW4gXAorCSAgJChJTlNUQUxMX0lORk8pIC0taW5mby1kaXI9JChERVNURElSKSQoaW5mb2RpcikgZ2l0LmluZm8gO1wKKwkgICQoSU5TVEFMTF9JTkZPKSAtLWluZm8tZGlyPSQoREVTVERJUikkKGluZm9kaXIpIGdpdG1hbi5pbmZvIDtcCisJZWxzZSBcCisJICBlY2hvICJObyBkaXJlY3RvcnkgZm91bmQgaW4gJChERVNURElSKSQoaW5mb2RpcikiID4mMiA7IFwKKwlmaQorCitpbnN0YWxsLXBkZjogcGRmCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQocGRmZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0IHVzZXItbWFudWFsLnBkZiAkKERFU1RESVIpJChwZGZkaXIpCisKK2luc3RhbGwtaHRtbDogaHRtbAorCSckKFNIRUxMX1BBVEhfU1EpJyAuL2luc3RhbGwtd2ViZG9jLnNoICQoREVTVERJUikkKGh0bWxkaXIpCisKKy4uL0dJVC1WRVJTSU9OLUZJTEU6IEZPUkNFCisJJChRVUlFVF9TVUJESVIwKS4uLyAkKFFVSUVUX1NVQkRJUjEpIEdJVC1WRVJTSU9OLUZJTEUKKworLWluY2x1ZGUgLi4vR0lULVZFUlNJT04tRklMRQorCisjCisjIERldGVybWluZSAiaW5jbHVkZTo6IiBmaWxlIHJlZmVyZW5jZXMgaW4gYXNjaWlkb2MgZmlsZXMuCisjCitkb2NkZXBfcHJlcmVxcyA9IFwKKwltZXJnZXRvb2xzLWxpc3QubWFkZSAkKG1lcmdldG9vbHNfdHh0KSBcCisJY21kLWxpc3QubWFkZSAkKGNtZHNfdHh0KQorCitkb2MuZGVwIDogJChkb2NkZXBfcHJlcmVxcykgJCh3aWxkY2FyZCAqLnR4dCkgJCh3aWxkY2FyZCBjb25maWcvKi50eHQpIGJ1aWxkLWRvY2RlcC5wZXJsCisJJChRVUlFVF9HRU4pJChSTSkgJEArICRAICYmIFwKKwkkKFBFUkxfUEFUSCkgLi9idWlsZC1kb2NkZXAucGVybCA+JEArICQoUVVJRVRfU1RERVJSKSAmJiBcCisJbXYgJEArICRACisKKy1pbmNsdWRlIGRvYy5kZXAKKworY21kc190eHQgPSBjbWRzLWFuY2lsbGFyeWludGVycm9nYXRvcnMudHh0IFwKKwljbWRzLWFuY2lsbGFyeW1hbmlwdWxhdG9ycy50eHQgXAorCWNtZHMtbWFpbnBvcmNlbGFpbi50eHQgXAorCWNtZHMtcGx1bWJpbmdpbnRlcnJvZ2F0b3JzLnR4dCBcCisJY21kcy1wbHVtYmluZ21hbmlwdWxhdG9ycy50eHQgXAorCWNtZHMtc3luY2hpbmdyZXBvc2l0b3JpZXMudHh0IFwKKwljbWRzLXN5bmNoZWxwZXJzLnR4dCBcCisJY21kcy1wdXJlaGVscGVycy50eHQgXAorCWNtZHMtZm9yZWlnbnNjbWludGVyZmFjZS50eHQKKworJChjbWRzX3R4dCk6IGNtZC1saXN0Lm1hZGUKKworY21kLWxpc3QubWFkZTogY21kLWxpc3QucGVybCAuLi9jb21tYW5kLWxpc3QudHh0ICQoTUFOMV9UWFQpCisJJChRVUlFVF9HRU4pJChSTSkgJEAgJiYgXAorCSQoUEVSTF9QQVRIKSAuL2NtZC1saXN0LnBlcmwgLi4vY29tbWFuZC1saXN0LnR4dCAkKFFVSUVUX1NUREVSUikgJiYgXAorCWRhdGUgPiRACisKK21lcmdldG9vbHNfdHh0ID0gbWVyZ2V0b29scy1kaWZmLnR4dCBtZXJnZXRvb2xzLW1lcmdlLnR4dAorCiskKG1lcmdldG9vbHNfdHh0KTogbWVyZ2V0b29scy1saXN0Lm1hZGUKKworbWVyZ2V0b29scy1saXN0Lm1hZGU6IC4uL2dpdC1tZXJnZXRvb2wtLWxpYi5zaCAkKHdpbGRjYXJkIC4uL21lcmdldG9vbHMvKikKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCAmJiBcCisJJChTSEVMTF9QQVRIKSAtYyAnTUVSR0VfVE9PTFNfRElSPS4uL21lcmdldG9vbHMgJiYgXAorCQkuIC4uL2dpdC1tZXJnZXRvb2wtLWxpYi5zaCAmJiBcCisJCXNob3dfdG9vbF9uYW1lcyBjYW5fZGlmZiAiKiAiIHx8IDonID5tZXJnZXRvb2xzLWRpZmYudHh0ICYmIFwKKwkkKFNIRUxMX1BBVEgpIC1jICdNRVJHRV9UT09MU19ESVI9Li4vbWVyZ2V0b29scyAmJiBcCisJCS4gLi4vZ2l0LW1lcmdldG9vbC0tbGliLnNoICYmIFwKKwkJc2hvd190b29sX25hbWVzIGNhbl9tZXJnZSAiKiAiIHx8IDonID5tZXJnZXRvb2xzLW1lcmdlLnR4dCAmJiBcCisJZGF0ZSA+JEAKKworVFJBQ0tfQVNDSUlET0NGTEFHUyA9ICQoc3Vic3QgJywnXCcnLCQoQVNDSUlET0NfQ09NTU9OKTokKEFTQ0lJRE9DX0hUTUwpOiQoQVNDSUlET0NfRE9DQk9PSykpCisKK0dJVC1BU0NJSURPQ0ZMQUdTOiBGT1JDRQorCUBGTEFHUz0nJChUUkFDS19BU0NJSURPQ0ZMQUdTKSc7IFwKKwkgICAgaWYgdGVzdCB4IiQkRkxBR1MiICE9IHgiYGNhdCBHSVQtQVNDSUlET0NGTEFHUyAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gPiYyICIgICAgKiBuZXcgYXNjaWlkb2MgZmxhZ3MiOyBcCisJCWVjaG8gIiQkRkxBR1MiID5HSVQtQVNDSUlET0NGTEFHUzsgXAorICAgICAgICAgICAgZmkKKworY2xlYW46CisJJChSTSkgKi54bWwgKi54bWwrICouaHRtbCAqLmh0bWwrICouMSAqLjUgKi43CisJJChSTSkgKi50ZXhpICoudGV4aSsgKi50ZXhpKysgZ2l0LmluZm8gZ2l0bWFuLmluZm8KKwkkKFJNKSAqLnBkZgorCSQoUk0pIGhvd3RvLWluZGV4LnR4dCBob3d0by8qLmh0bWwgZG9jLmRlcAorCSQoUk0pIHRlY2huaWNhbC8qLmh0bWwgdGVjaG5pY2FsL2FwaS1pbmRleC50eHQKKwkkKFJNKSBTdWJtaXR0aW5nUGF0Y2hlcy50eHQKKwkkKFJNKSAkKGNtZHNfdHh0KSAkKG1lcmdldG9vbHNfdHh0KSAqLm1hZGUKKwkkKFJNKSBtYW5wYWdlLWJhc2UtdXJsLnhzbAorCSQoUk0pIEdJVC1BU0NJSURPQ0ZMQUdTCisKKyQoTUFOX0hUTUwpOiAlLmh0bWwgOiAlLnR4dCBhc2NpaWRvYy5jb25mIGFzY2lpZG9jdG9yLWV4dGVuc2lvbnMucmIgR0lULUFTQ0lJRE9DRkxBR1MKKwkkKFFVSUVUX0FTQ0lJRE9DKSQoUk0pICRAKyAkQCAmJiBcCisJJChUWFRfVE9fSFRNTCkgLWQgbWFucGFnZSAtbyAkQCsgJDwgJiYgXAorCW12ICRAKyAkQAorCiskKE9CU09MRVRFX0hUTUwpOiAlLmh0bWwgOiAlLnR4dG8gYXNjaWlkb2MuY29uZiBhc2NpaWRvY3Rvci1leHRlbnNpb25zLnJiIEdJVC1BU0NJSURPQ0ZMQUdTCisJJChRVUlFVF9BU0NJSURPQykkKFJNKSAkQCsgJEAgJiYgXAorCSQoVFhUX1RPX0hUTUwpIC1vICRAKyAkPCAmJiBcCisJbXYgJEArICRACisKK21hbnBhZ2UtYmFzZS11cmwueHNsOiBtYW5wYWdlLWJhc2UtdXJsLnhzbC5pbgorCSQoUVVJRVRfR0VOKXNlZCAic3xAQE1BTl9CQVNFX1VSTEBAfCQoTUFOX0JBU0VfVVJMKXwiICQ8ID4gJEAKKworJS4xICUuNSAlLjcgOiAlLnhtbCBtYW5wYWdlLWJhc2UtdXJsLnhzbCAkKHdpbGRjYXJkIG1hbnBhZ2UqLnhzbCkKKwkkKFFVSUVUX1hNTFRPKSQoUk0pICRAICYmIFwKKwkkKFhNTFRPKSAtbSAkKE1BTlBBR0VfWFNMKSAkKFhNTFRPX0VYVFJBKSBtYW4gJDwKKworJS54bWwgOiAlLnR4dCBhc2NpaWRvYy5jb25mIGFzY2lpZG9jdG9yLWV4dGVuc2lvbnMucmIgR0lULUFTQ0lJRE9DRkxBR1MKKwkkKFFVSUVUX0FTQ0lJRE9DKSQoUk0pICRAKyAkQCAmJiBcCisJJChUWFRfVE9fWE1MKSAtZCBtYW5wYWdlIC1vICRAKyAkPCAmJiBcCisJbXYgJEArICRACisKK3VzZXItbWFudWFsLnhtbDogdXNlci1tYW51YWwudHh0IHVzZXItbWFudWFsLmNvbmYgYXNjaWlkb2N0b3ItZXh0ZW5zaW9ucy5yYiBHSVQtQVNDSUlET0NGTEFHUworCSQoUVVJRVRfQVNDSUlET0MpJChSTSkgJEArICRAICYmIFwKKwkkKFRYVF9UT19YTUwpIC1kIGJvb2sgLW8gJEArICQ8ICYmIFwKKwltdiAkQCsgJEAKKwordGVjaG5pY2FsL2FwaS1pbmRleC50eHQ6IHRlY2huaWNhbC9hcGktaW5kZXgtc2tlbC50eHQgXAorCXRlY2huaWNhbC9hcGktaW5kZXguc2ggJChwYXRzdWJzdCAlLCUudHh0LCQoQVBJX0RPQ1MpKQorCSQoUVVJRVRfR0VOKWNkIHRlY2huaWNhbCAmJiAnJChTSEVMTF9QQVRIX1NRKScgLi9hcGktaW5kZXguc2gKKwordGVjaG5pY2FsLyUuaHRtbDogQVNDSUlET0NfRVhUUkEgKz0gLWEgZ2l0LXJlbGF0aXZlLWh0bWwtcHJlZml4PS4uLworJChwYXRzdWJzdCAlLCUuaHRtbCwkKEFQSV9ET0NTKSB0ZWNobmljYWwvYXBpLWluZGV4ICQoVEVDSF9ET0NTKSk6ICUuaHRtbCA6ICUudHh0IFwKKwlhc2NpaWRvYy5jb25mIEdJVC1BU0NJSURPQ0ZMQUdTCisJJChRVUlFVF9BU0NJSURPQykkKFRYVF9UT19IVE1MKSAkKi50eHQKKworU3VibWl0dGluZ1BhdGNoZXMudHh0OiBTdWJtaXR0aW5nUGF0Y2hlcworCSQoUVVJRVRfR0VOKSBjcCAkPCAkQAorCitYU0xUID0gZG9jYm9vay54c2wKK1hTTFRPUFRTID0gLS14aW5jbHVkZSAtLXN0cmluZ3BhcmFtIGh0bWwuc3R5bGVzaGVldCBkb2Nib29rLXhzbC5jc3MKKwordXNlci1tYW51YWwuaHRtbDogdXNlci1tYW51YWwueG1sICQoWFNMVCkKKwkkKFFVSUVUX1hTTFRQUk9DKSQoUk0pICRAKyAkQCAmJiBcCisJeHNsdHByb2MgJChYU0xUT1BUUykgLW8gJEArICQoWFNMVCkgJDwgJiYgXAorCW12ICRAKyAkQAorCitnaXQuaW5mbzogdXNlci1tYW51YWwudGV4aQorCSQoUVVJRVRfTUFLRUlORk8pJChNQUtFSU5GTykgLS1uby1zcGxpdCAtbyAkQCB1c2VyLW1hbnVhbC50ZXhpCisKK3VzZXItbWFudWFsLnRleGk6IHVzZXItbWFudWFsLnhtbAorCSQoUVVJRVRfREIyVEVYSSkkKFJNKSAkQCsgJEAgJiYgXAorCSQoRE9DQk9PSzJYX1RFWEkpIHVzZXItbWFudWFsLnhtbCAtLWVuY29kaW5nPVVURi04IC0tdG8tc3Rkb3V0ID4kQCsrICYmIFwKKwkkKFBFUkxfUEFUSCkgZml4LXRleGkucGVybCA8JEArKyA+JEArICYmIFwKKwlybSAkQCsrICYmIFwKKwltdiAkQCsgJEAKKwordXNlci1tYW51YWwucGRmOiB1c2VyLW1hbnVhbC54bWwKKwkkKFFVSUVUX0RCTEFURVgpJChSTSkgJEArICRAICYmIFwKKwkkKERCTEFURVgpIC1vICRAKyAkKERCTEFURVhfQ09NTU9OKSAkPCAmJiBcCisJbXYgJEArICRACisKK2dpdG1hbi50ZXhpOiAkKE1BTl9YTUwpIGNhdC10ZXhpLnBlcmwgdGV4aS54c2wKKwkkKFFVSUVUX0RCMlRFWEkpJChSTSkgJEArICRAICYmIFwKKwkoJChmb3JlYWNoIHhtbCwkKHNvcnQgJChNQU5fWE1MKSkseHNsdHByb2MgLW8gJCh4bWwpKyB0ZXhpLnhzbCAkKHhtbCkgJiYgXAorCQkkKERPQ0JPT0syWF9URVhJKSAtLWVuY29kaW5nPVVURi04IC0tdG8tc3Rkb3V0ICQoeG1sKSsgJiYgXAorCQlybSAkKHhtbCkrICYmKSB0cnVlKSA+ICRAKysgJiYgXAorCSQoUEVSTF9QQVRIKSBjYXQtdGV4aS5wZXJsICRAIDwkQCsrID4kQCsgJiYgXAorCXJtICRAKysgJiYgXAorCW12ICRAKyAkQAorCitnaXRtYW4uaW5mbzogZ2l0bWFuLnRleGkKKwkkKFFVSUVUX01BS0VJTkZPKSQoTUFLRUlORk8pIC0tbm8tc3BsaXQgLS1uby12YWxpZGF0ZSAkKi50ZXhpCisKKyQocGF0c3Vic3QgJS50eHQsJS50ZXhpLCQoTUFOX1RYVCkpOiAlLnRleGkgOiAlLnhtbAorCSQoUVVJRVRfREIyVEVYSSkkKFJNKSAkQCsgJEAgJiYgXAorCSQoRE9DQk9PSzJYX1RFWEkpIC0tdG8tc3Rkb3V0ICQqLnhtbCA+JEArICYmIFwKKwltdiAkQCsgJEAKKworaG93dG8taW5kZXgudHh0OiBob3d0by1pbmRleC5zaCAkKHdpbGRjYXJkIGhvd3RvLyoudHh0KQorCSQoUVVJRVRfR0VOKSQoUk0pICRAKyAkQCAmJiBcCisJJyQoU0hFTExfUEFUSF9TUSknIC4vaG93dG8taW5kZXguc2ggJChzb3J0ICQod2lsZGNhcmQgaG93dG8vKi50eHQpKSA+JEArICYmIFwKKwltdiAkQCsgJEAKKworJChwYXRzdWJzdCAlLCUuaHRtbCwkKEFSVElDTEVTKSkgOiAlLmh0bWwgOiAlLnR4dAorCSQoUVVJRVRfQVNDSUlET0MpJChUWFRfVE9fSFRNTCkgJCoudHh0CisKK1dFQkRPQ19ERVNUID0gL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MKKworaG93dG8vJS5odG1sOiBBU0NJSURPQ19FWFRSQSArPSAtYSBnaXQtcmVsYXRpdmUtaHRtbC1wcmVmaXg9Li4vCiskKHBhdHN1YnN0ICUudHh0LCUuaHRtbCwkKHdpbGRjYXJkIGhvd3RvLyoudHh0KSk6ICUuaHRtbCA6ICUudHh0IEdJVC1BU0NJSURPQ0ZMQUdTCisJJChRVUlFVF9BU0NJSURPQykkKFJNKSAkQCsgJEAgJiYgXAorCXNlZCAtZSAnMSwvXiQkL2QnICQ8IHwgXAorCSQoVFhUX1RPX0hUTUwpIC0gPiRAKyAmJiBcCisJbXYgJEArICRACisKK2luc3RhbGwtd2ViZG9jIDogaHRtbAorCSckKFNIRUxMX1BBVEhfU1EpJyAuL2luc3RhbGwtd2ViZG9jLnNoICQoV0VCRE9DX0RFU1QpCisKKyMgWW91IG11c3QgaGF2ZSBhIGNsb25lIG9mICdnaXQtaHRtbGRvY3MnIGFuZCAnZ2l0LW1hbnBhZ2VzJyByZXBvc2l0b3JpZXMKKyMgbmV4dCB0byB0aGUgJ2dpdCcgcmVwb3NpdG9yeSBpdHNlbGYgZm9yIHRoZSBmb2xsb3dpbmcgdG8gd29yay4KKworcXVpY2staW5zdGFsbDogcXVpY2staW5zdGFsbC1tYW4KKworcmVxdWlyZS1tYW5yZXBvOjoKKwlAaWYgdGVzdCAhIC1kICQoTUFOX1JFUE8pOyBcCisJdGhlbiBlY2hvICJnaXQtbWFucGFnZXMgcmVwb3NpdG9yeSBtdXN0IGV4aXN0IGF0ICQoTUFOX1JFUE8pIjsgZXhpdCAxOyBmaQorCitxdWljay1pbnN0YWxsLW1hbjogcmVxdWlyZS1tYW5yZXBvCisJJyQoU0hFTExfUEFUSF9TUSknIC4vaW5zdGFsbC1kb2MtcXVpY2suc2ggJChNQU5fUkVQTykgJChERVNURElSKSQobWFuZGlyKSAkKEdJVF9NQU5fUkVGKQorCityZXF1aXJlLWh0bWxyZXBvOjoKKwlAaWYgdGVzdCAhIC1kICQoSFRNTF9SRVBPKTsgXAorCXRoZW4gZWNobyAiZ2l0LWh0bWxkb2NzIHJlcG9zaXRvcnkgbXVzdCBleGlzdCBhdCAkKEhUTUxfUkVQTykiOyBleGl0IDE7IGZpCisKK3F1aWNrLWluc3RhbGwtaHRtbDogcmVxdWlyZS1odG1scmVwbworCSckKFNIRUxMX1BBVEhfU1EpJyAuL2luc3RhbGwtZG9jLXF1aWNrLnNoICQoSFRNTF9SRVBPKSAkKERFU1RESVIpJChodG1sZGlyKSAkKEdJVF9NQU5fUkVGKQorCitwcmludC1tYW4xOgorCUBmb3IgaSBpbiAkKE1BTjFfVFhUKTsgZG8gZWNobyAkJGk7IGRvbmUKKworbGludC1kb2NzOjoKKwkkKFFVSUVUX0xJTlQpJChQRVJMX1BBVEgpIGxpbnQtZ2l0bGluay5wZXJsCisKK2lmZXEgKCQod2lsZGNhcmQgcG8vTWFrZWZpbGUpLHBvL01ha2VmaWxlKQorZG9jLWwxMG4gaW5zdGFsbC1sMTBuOjoKKwkkKE1BS0UpIC1DIHBvICRACitlbmRpZgorCisuUEhPTlk6IEZPUkNFCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL015Rmlyc3RDb250cmlidXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9NeUZpcnN0Q29udHJpYnV0aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjcyNzRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9NeUZpcnN0Q29udHJpYnV0aW9uLnR4dApAQCAtMCwwICsxLDEyMTcgQEAKK015IEZpcnN0IENvbnRyaWJ1dGlvbiB0byB0aGUgR2l0IFByb2plY3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzpzZWN0YW5jaG9yczoKKworW1tzdW1tYXJ5XV0KKz09IFN1bW1hcnkKKworVGhpcyBpcyBhIHR1dG9yaWFsIGRlbW9uc3RyYXRpbmcgdGhlIGVuZC10by1lbmQgd29ya2Zsb3cgb2YgY3JlYXRpbmcgYSBjaGFuZ2UgdG8KK3RoZSBHaXQgdHJlZSwgc2VuZGluZyBpdCBmb3IgcmV2aWV3LCBhbmQgbWFraW5nIGNoYW5nZXMgYmFzZWQgb24gY29tbWVudHMuCisKK1tbcHJlcmVxdWlzaXRlc11dCis9PT0gUHJlcmVxdWlzaXRlcworCitUaGlzIHR1dG9yaWFsIGFzc3VtZXMgeW91J3JlIGFscmVhZHkgZmFpcmx5IGZhbWlsaWFyIHdpdGggdXNpbmcgR2l0IHRvIG1hbmFnZQorc291cmNlIGNvZGUuICBUaGUgR2l0IHdvcmtmbG93IHN0ZXBzIHdpbGwgbGFyZ2VseSByZW1haW4gdW5leHBsYWluZWQuCisKK1tbcmVsYXRlZC1yZWFkaW5nXV0KKz09PSBSZWxhdGVkIFJlYWRpbmcKKworVGhpcyB0dXRvcmlhbCBhaW1zIHRvIHN1bW1hcml6ZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cywgYnV0IHRoZSByZWFkZXIgbWF5IGZpbmQKK3VzZWZ1bCBhZGRpdGlvbmFsIGNvbnRleHQ6CisKKy0gYERvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXNgCistIGBEb2N1bWVudGF0aW9uL2hvd3RvL25ldy1jb21tYW5kLnR4dGAKKworW1tnZXR0aW5nLWhlbHBdXQorPT09IEdldHRpbmcgSGVscAorCitJZiB5b3UgZ2V0IHN0dWNrLCB5b3UgY2FuIHNlZWsgaGVscCBpbiB0aGUgZm9sbG93aW5nIHBsYWNlcy4KKworPT09PSBnaXRAdmdlci5rZXJuZWwub3JnCisKK1RoaXMgaXMgdGhlIG1haW4gR2l0IHByb2plY3QgbWFpbGluZyBsaXN0IHdoZXJlIGNvZGUgcmV2aWV3cywgdmVyc2lvbgorYW5ub3VuY2VtZW50cywgZGVzaWduIGRpc2N1c3Npb25zLCBhbmQgbW9yZSB0YWtlIHBsYWNlLiBUaG9zZSBpbnRlcmVzdGVkIGluCitjb250cmlidXRpbmcgYXJlIHdlbGNvbWUgdG8gcG9zdCBxdWVzdGlvbnMgaGVyZS4gVGhlIEdpdCBsaXN0IHJlcXVpcmVzCitwbGFpbi10ZXh0LW9ubHkgZW1haWxzIGFuZCBwcmVmZXJzIGlubGluZSBhbmQgYm90dG9tLXBvc3Rpbmcgd2hlbiByZXBseWluZyB0bworbWFpbDsgeW91IHdpbGwgYmUgQ0MnZCBpbiBhbGwgcmVwbGllcyB0byB5b3UuIE9wdGlvbmFsbHksIHlvdSBjYW4gc3Vic2NyaWJlIHRvCit0aGUgbGlzdCBieSBzZW5kaW5nIGFuIGVtYWlsIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcgd2l0aCAic3Vic2NyaWJlIGdpdCIKK2luIHRoZSBib2R5LiBUaGUgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0W2FyY2hpdmVdIG9mIHRoaXMgbWFpbGluZyBsaXN0IGlzCithdmFpbGFibGUgdG8gdmlldyBpbiBhIGJyb3dzZXIuCisKKz09PT0gaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9mb3J1bS8jIWZvcnVtL2dpdC1tZW50b3JpbmdbZ2l0LW1lbnRvcmluZ0Bnb29nbGVncm91cHMuY29tXQorCitUaGlzIG1haWxpbmcgbGlzdCBpcyB0YXJnZXRlZCB0byBuZXcgY29udHJpYnV0b3JzIGFuZCB3YXMgY3JlYXRlZCBhcyBhIHBsYWNlIHRvCitwb3N0IHF1ZXN0aW9ucyBhbmQgcmVjZWl2ZSBhbnN3ZXJzIG91dHNpZGUgb2YgdGhlIHB1YmxpYyBleWUgb2YgdGhlIG1haW4gbGlzdC4KK1ZldGVyYW4gY29udHJpYnV0b3JzIHdobyBhcmUgZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhlbHBpbmcgbWVudG9yIG5ld2NvbWVycworYXJlIHByZXNlbnQgb24gdGhlIGxpc3QuIEluIG9yZGVyIHRvIGF2b2lkIHNlYXJjaCBpbmRleGVycywgZ3JvdXAgbWVtYmVyc2hpcCBpcworcmVxdWlyZWQgdG8gdmlldyBtZXNzYWdlczsgYW55b25lIGNhbiBqb2luIGFuZCBubyBhcHByb3ZhbCBpcyByZXF1aXJlZC4KKworPT09PSBodHRwczovL3dlYmNoYXQuZnJlZW5vZGUubmV0LyNnaXQtZGV2ZWxbI2dpdC1kZXZlbF0gb24gRnJlZW5vZGUKKworVGhpcyBJUkMgY2hhbm5lbCBpcyBmb3IgY29udmVyc2F0aW9ucyBiZXR3ZWVuIEdpdCBjb250cmlidXRvcnMuIElmIHNvbWVvbmUgaXMKK2N1cnJlbnRseSBvbmxpbmUgYW5kIGtub3dzIHRoZSBhbnN3ZXIgdG8geW91ciBxdWVzdGlvbiwgeW91IGNhbiByZWNlaXZlIGhlbHAKK2luIHJlYWwgdGltZS4gT3RoZXJ3aXNlLCB5b3UgY2FuIHJlYWQgdGhlCitodHRwczovL2NvbGFidGkub3JnL2lyY2xvZ2dlci9pcmNsb2dnZXJfbG9ncy9naXQtZGV2ZWxbc2Nyb2xsYmFja10gdG8gc2VlCit3aGV0aGVyIHNvbWVvbmUgYW5zd2VyZWQgeW91LiBJUkMgZG9lcyBub3QgYWxsb3cgb2ZmbGluZSBwcml2YXRlIG1lc3NhZ2luZywgc28KK2lmIHlvdSB0cnkgdG8gcHJpdmF0ZSBtZXNzYWdlIHNvbWVvbmUgYW5kIHRoZW4gbG9nIG91dCBvZiBJUkMsIHRoZXkgY2Fubm90CityZXNwb25kIHRvIHlvdS4gSXQncyBiZXR0ZXIgdG8gYXNrIHlvdXIgcXVlc3Rpb25zIGluIHRoZSBjaGFubmVsIHNvIHRoYXQgeW91CitjYW4gYmUgYW5zd2VyZWQgaWYgeW91IGRpc2Nvbm5lY3QgYW5kIHNvIHRoYXQgb3RoZXJzIGNhbiBsZWFybiBmcm9tIHRoZQorY29udmVyc2F0aW9uLgorCitbW2dldHRpbmctc3RhcnRlZF1dCis9PSBHZXR0aW5nIFN0YXJ0ZWQKKworW1tjbG9uaW5nXV0KKz09PSBDbG9uZSB0aGUgR2l0IFJlcG9zaXRvcnkKKworR2l0IGlzIG1pcnJvcmVkIGluIGEgbnVtYmVyIG9mIGxvY2F0aW9ucy4gQ2xvbmUgdGhlIHJlcG9zaXRvcnkgZnJvbSBvbmUgb2YgdGhlbTsKK2h0dHBzOi8vZ2l0LXNjbS5jb20vZG93bmxvYWRzIHN1Z2dlc3RzIG9uZSBvZiB0aGUgYmVzdCBwbGFjZXMgdG8gY2xvbmUgZnJvbSBpcwordGhlIG1pcnJvciBvbiBHaXRIdWIuCisKKy0tLS0KKyQgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQvZ2l0IGdpdAorJCBjZCBnaXQKKy0tLS0KKworW1tkZXBlbmRlbmNpZXNdXQorPT09IEluc3RhbGxpbmcgRGVwZW5kZW5jaWVzCisKK1RvIGJ1aWxkIEdpdCBmcm9tIHNvdXJjZSwgeW91IG5lZWQgdG8gaGF2ZSBhIGhhbmRmdWwgb2YgZGVwZW5kZW5jaWVzIGluc3RhbGxlZAorb24geW91ciBzeXN0ZW0uIEZvciBhIGhpbnQgb2Ygd2hhdCdzIG5lZWRlZCwgeW91IGNhbiB0YWtlIGEgbG9vayBhdAorYElOU1RBTExgLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzZWN0aW9uIGFib3V0IEdpdCdzIGRlcGVuZGVuY2llcyBvbgorZXh0ZXJuYWwgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcy4gVGhhdCBkb2N1bWVudCBtZW50aW9ucyBhIHdheSB0byAidGVzdC1kcml2ZSIKK291ciBmcmVzaGx5IGJ1aWx0IEdpdCB3aXRob3V0IGluc3RhbGxpbmc7IHRoYXQncyB0aGUgbWV0aG9kIHdlJ2xsIGJlIHVzaW5nIGluCit0aGlzIHR1dG9yaWFsLgorCitNYWtlIHN1cmUgdGhhdCB5b3VyIGVudmlyb25tZW50IGhhcyBldmVyeXRoaW5nIHlvdSBuZWVkIGJ5IGJ1aWxkaW5nIHlvdXIgYnJhbmQKK25ldyBjbG9uZSBvZiBHaXQgZnJvbSB0aGUgYWJvdmUgc3RlcDoKKworLS0tLQorJCBtYWtlCistLS0tCisKK05PVEU6IFRoZSBHaXQgYnVpbGQgaXMgcGFyYWxsZWxpemFibGUuIGAtaiNgIGlzIG5vdCBpbmNsdWRlZCBhYm92ZSBidXQgeW91IGNhbgordXNlIGl0IGFzIHlvdSBwcmVmZXIsIGhlcmUgYW5kIGVsc2V3aGVyZS4KKworW1tpZGVudGlmeS1wcm9ibGVtXV0KKz09PSBJZGVudGlmeSBQcm9ibGVtIHRvIFNvbHZlCisKKy8vLy8KK1VzZSArIHRvIGluZGljYXRlIGZpeGVkLXdpZHRoIGhlcmU7IGNvdWxkbid0IGdldCBgIHRvIHdvcmsgbmljZWx5IHdpdGggdGhlCitxdW90ZXMgYXJvdW5kICJQb255IFNheWluZyAnVW0sIEhlbGxvJyIuCisvLy8vCitJbiB0aGlzIHR1dG9yaWFsLCB3ZSB3aWxsIGFkZCBhIG5ldyBjb21tYW5kLCArZ2l0IHBzdWgrLCBzaG9ydCBmb3IgYGBQb255IFNheWluZworYFVtLCBIZWxsbycnJyAtIGEgZmVhdHVyZSB3aGljaCBoYXMgZ29uZSB1bmltcGxlbWVudGVkIGRlc3BpdGUgYSBoaWdoIGZyZXF1ZW5jeQorb2YgaW52b2NhdGlvbiBkdXJpbmcgdXNlcnMnIHR5cGljYWwgZGFpbHkgd29ya2Zsb3cuCisKKyhXZSd2ZSBzZWVuIHNvbWUgb3RoZXIgZWZmb3J0IGluIHRoaXMgc3BhY2Ugd2l0aCB0aGUgaW1wbGVtZW50YXRpb24gb2YgcG9wdWxhcgorY29tbWFuZHMgc3VjaCBhcyBgc2xgLikKKworW1tzZXR1cC13b3Jrc3BhY2VdXQorPT09IFNldCBVcCBZb3VyIFdvcmtzcGFjZQorCitMZXQncyBzdGFydCBieSBtYWtpbmcgYSBkZXZlbG9wbWVudCBicmFuY2ggdG8gd29yayBvbiBvdXIgY2hhbmdlcy4gUGVyCitgRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlc2AsIHNpbmNlIGEgYnJhbmQgbmV3IGNvbW1hbmQgaXMgYSBuZXcgZmVhdHVyZSwKK2l0J3MgZmluZSB0byBiYXNlIHlvdXIgd29yayBvbiBgbWFzdGVyYC4gSG93ZXZlciwgaW4gdGhlIGZ1dHVyZSBmb3IgYnVnZml4ZXMsCitldGMuLCB5b3Ugc2hvdWxkIGNoZWNrIHRoYXQgZG9jdW1lbnQgYW5kIGJhc2UgaXQgb24gdGhlIGFwcHJvcHJpYXRlIGJyYW5jaC4KKworRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRvY3VtZW50LCB3ZSB3aWxsIGJhc2UgYWxsIG91ciB3b3JrIG9uIHRoZSBgbWFzdGVyYAorYnJhbmNoIG9mIHRoZSB1cHN0cmVhbSBwcm9qZWN0LiBDcmVhdGUgdGhlIGBwc3VoYCBicmFuY2ggeW91IHdpbGwgdXNlIGZvcgorZGV2ZWxvcG1lbnQgbGlrZSBzbzoKKworLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgcHN1aCBvcmlnaW4vbWFzdGVyCistLS0tCisKK1dlJ2xsIG1ha2UgYSBudW1iZXIgb2YgY29tbWl0cyBoZXJlIGluIG9yZGVyIHRvIGRlbW9uc3RyYXRlIGhvdyB0byBzZW5kIGEgdG9waWMKK3dpdGggbXVsdGlwbGUgcGF0Y2hlcyB1cCBmb3IgcmV2aWV3IHNpbXVsdGFuZW91c2x5LgorCitbW2NvZGUtaXQtdXBdXQorPT0gQ29kZSBJdCBVcCEKKworTk9URTogQSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gY2FuIGJlIGZvdW5kIGF0CitodHRwczovL2dpdGh1Yi5jb20vbmFzYW11ZmZpbi9naXQvdHJlZS9wc3VoLgorCitbW2FkZC1uZXctY29tbWFuZF1dCis9PT0gQWRkaW5nIGEgTmV3IENvbW1hbmQKKworTG90cyBvZiB0aGUgc3ViY29tbWFuZHMgYXJlIHdyaXR0ZW4gYXMgYnVpbHRpbnMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlCitpbXBsZW1lbnRlZCBpbiBDIGFuZCBjb21waWxlZCBpbnRvIHRoZSBtYWluIGBnaXRgIGV4ZWN1dGFibGUuIEltcGxlbWVudGluZyB0aGUKK3Zlcnkgc2ltcGxlIGBwc3VoYCBjb21tYW5kIGFzIGEgYnVpbHQtaW4gd2lsbCBkZW1vbnN0cmF0ZSB0aGUgc3RydWN0dXJlIG9mIHRoZQorY29kZWJhc2UsIHRoZSBpbnRlcm5hbCBBUEksIGFuZCB0aGUgcHJvY2VzcyBvZiB3b3JraW5nIHRvZ2V0aGVyIGFzIGEgY29udHJpYnV0b3IKK3dpdGggdGhlIHJldmlld2VycyBhbmQgbWFpbnRhaW5lciB0byBpbnRlZ3JhdGUgdGhpcyBjaGFuZ2UgaW50byB0aGUgc3lzdGVtLgorCitCdWlsdC1pbiBzdWJjb21tYW5kcyBhcmUgdHlwaWNhbGx5IGltcGxlbWVudGVkIGluIGEgZnVuY3Rpb24gbmFtZWQgImNtZF8iCitmb2xsb3dlZCBieSB0aGUgbmFtZSBvZiB0aGUgc3ViY29tbWFuZCwgaW4gYSBzb3VyY2UgZmlsZSBuYW1lZCBhZnRlciB0aGUKK3N1YmNvbW1hbmQgYW5kIGNvbnRhaW5lZCB3aXRoaW4gYGJ1aWx0aW4vYC4gU28gaXQgbWFrZXMgc2Vuc2UgdG8gaW1wbGVtZW50IHlvdXIKK2NvbW1hbmQgaW4gYGJ1aWx0aW4vcHN1aC5jYC4gQ3JlYXRlIHRoYXQgZmlsZSwgYW5kIHdpdGhpbiBpdCwgd3JpdGUgdGhlIGVudHJ5Citwb2ludCBmb3IgeW91ciBjb21tYW5kIGluIGEgZnVuY3Rpb24gbWF0Y2hpbmcgdGhlIHN0eWxlIGFuZCBzaWduYXR1cmU6CisKKy0tLS0KK2ludCBjbWRfcHN1aChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKKy0tLS0KKworV2UnbGwgYWxzbyBuZWVkIHRvIGFkZCB0aGUgZGVjbGFyYXRpb24gb2YgcHN1aDsgb3BlbiB1cCBgYnVpbHRpbi5oYCwgZmluZCB0aGUKK2RlY2xhcmF0aW9uIGZvciBgY21kX3B1bGxgLCBhbmQgYWRkIGEgbmV3IGxpbmUgZm9yIGBwc3VoYCBpbW1lZGlhdGVseSBiZWZvcmUgaXQsCitpbiBvcmRlciB0byBrZWVwIHRoZSBkZWNsYXJhdGlvbnMgYWxwaGFiZXRpY2FsbHkgc29ydGVkOgorCistLS0tCitpbnQgY21kX3BzdWgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworLS0tLQorCitCZSBzdXJlIHRvIGAjaW5jbHVkZSAiYnVpbHRpbi5oImAgaW4geW91ciBgcHN1aC5jYC4KKworR28gYWhlYWQgYW5kIGFkZCBzb21lIHRocm93YXdheSBwcmludGYgdG8gdGhhdCBmdW5jdGlvbi4gVGhpcyBpcyBhIGRlY2VudAorc3RhcnRpbmcgcG9pbnQgYXMgd2UgY2FuIG5vdyBhZGQgYnVpbGQgcnVsZXMgYW5kIHJlZ2lzdGVyIHRoZSBjb21tYW5kLgorCitOT1RFOiBZb3VyIHRocm93YXdheSB0ZXh0LCBhcyB3ZWxsIGFzIG11Y2ggb2YgdGhlIHRleHQgeW91IHdpbGwgYmUgYWRkaW5nIG92ZXIKK3RoZSBjb3Vyc2Ugb2YgdGhpcyB0dXRvcmlhbCwgaXMgdXNlci1mYWNpbmcuIFRoYXQgbWVhbnMgaXQgbmVlZHMgdG8gYmUKK2xvY2FsaXphYmxlLiBUYWtlIGEgbG9vayBhdCBgcG8vUkVBRE1FYCB1bmRlciAiTWFya2luZyBzdHJpbmdzIGZvciB0cmFuc2xhdGlvbiIuCitUaHJvdWdob3V0IHRoZSB0dXRvcmlhbCwgd2Ugd2lsbCBtYXJrIHN0cmluZ3MgZm9yIHRyYW5zbGF0aW9uIGFzIG5lY2Vzc2FyeTsgeW91CitzaG91bGQgYWxzbyBkbyBzbyB3aGVuIHdyaXRpbmcgeW91ciB1c2VyLWZhY2luZyBjb21tYW5kcyBpbiB0aGUgZnV0dXJlLgorCistLS0tCitpbnQgY21kX3BzdWgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJcHJpbnRmKF8oIlBvbnkgc2F5aW5nIGhlbGxvIGdvZXMgaGVyZS5cbiIpKTsKKwlyZXR1cm4gMDsKK30KKy0tLS0KKworTGV0J3MgdHJ5IHRvIGJ1aWxkIGl0LiAgT3BlbiBgTWFrZWZpbGVgLCBmaW5kIHdoZXJlIGBidWlsdGluL3B1bGwub2AgaXMgYWRkZWQKK3RvIGBCVUlMVElOX09CSlNgLCBhbmQgYWRkIGBidWlsdGluL3BzdWgub2AgaW4gdGhlIHNhbWUgd2F5IG5leHQgdG8gaXQgaW4KK2FscGhhYmV0aWNhbCBvcmRlci4gT25jZSB5b3UndmUgZG9uZSBzbywgbW92ZSB0byB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBhbmQKK2J1aWxkIHNpbXBseSB3aXRoIGBtYWtlYC4gQWxzbyBhZGQgdGhlIGBERVZFTE9QRVI9MWAgdmFyaWFibGUgdG8gdHVybiBvbgorc29tZSBhZGRpdGlvbmFsIHdhcm5pbmdzOgorCistLS0tCiskIGVjaG8gREVWRUxPUEVSPTEgPmNvbmZpZy5tYWsKKyQgbWFrZQorLS0tLQorCitOT1RFOiBXaGVuIHlvdSBhcmUgZGV2ZWxvcGluZyB0aGUgR2l0IHByb2plY3QsIGl0J3MgcHJlZmVycmVkIHRoYXQgeW91IHVzZSB0aGUKK2BERVZFTE9QRVJgIGZsYWc7IGlmIHRoZXJlJ3Mgc29tZSByZWFzb24gaXQgZG9lc24ndCB3b3JrIGZvciB5b3UsIHlvdSBjYW4gdHVybgoraXQgb2ZmLCBidXQgaXQncyBhIGdvb2QgaWRlYSB0byBtZW50aW9uIHRoZSBwcm9ibGVtIHRvIHRoZSBtYWlsaW5nIGxpc3QuCisKK0dyZWF0LCBub3cgeW91ciBuZXcgY29tbWFuZCBidWlsZHMgaGFwcGlseSBvbiBpdHMgb3duLiBCdXQgbm9ib2R5IGludm9rZXMgaXQuCitMZXQncyBjaGFuZ2UgdGhhdC4KKworVGhlIGxpc3Qgb2YgY29tbWFuZHMgbGl2ZXMgaW4gYGdpdC5jYC4gV2UgY2FuIHJlZ2lzdGVyIGEgbmV3IGNvbW1hbmQgYnkgYWRkaW5nCithIGBjbWRfc3RydWN0YCB0byB0aGUgYGNvbW1hbmRzW11gIGFycmF5LiBgc3RydWN0IGNtZF9zdHJ1Y3RgIHRha2VzIGEgc3RyaW5nCit3aXRoIHRoZSBjb21tYW5kIG5hbWUsIGEgZnVuY3Rpb24gcG9pbnRlciB0byB0aGUgY29tbWFuZCBpbXBsZW1lbnRhdGlvbiwgYW5kIGEKK3NldHVwIG9wdGlvbiBmbGFnLiBGb3Igbm93LCBsZXQncyBrZWVwIG1pbWlja2luZyBgcHVzaGAuIEZpbmQgdGhlIGxpbmUgd2hlcmUKK2BjbWRfcHVzaGAgaXMgcmVnaXN0ZXJlZCwgY29weSBpdCwgYW5kIG1vZGlmeSBpdCBmb3IgYGNtZF9wc3VoYCwgcGxhY2luZyB0aGUgbmV3CitsaW5lIGluIGFscGhhYmV0aWNhbCBvcmRlciAoaW1tZWRpYXRlbHkgYmVmb3JlIGBjbWRfcHVsbGApLgorCitUaGUgb3B0aW9ucyBhcmUgZG9jdW1lbnRlZCBpbiBgYnVpbHRpbi5oYCB1bmRlciAiQWRkaW5nIGEgbmV3IGJ1aWx0LWluLiIgU2luY2UKK3dlIGhvcGUgdG8gcHJpbnQgc29tZSBkYXRhIGFib3V0IHRoZSB1c2VyJ3MgY3VycmVudCB3b3Jrc3BhY2UgY29udGV4dCBsYXRlciwKK3dlIG5lZWQgYSBHaXQgZGlyZWN0b3J5LCBzbyBjaG9vc2UgYFJVTl9TRVRVUGAgYXMgeW91ciBvbmx5IG9wdGlvbi4KKworR28gYWhlYWQgYW5kIGJ1aWxkIGFnYWluLiBZb3Ugc2hvdWxkIHNlZSBhIGNsZWFuIGJ1aWxkLCBzbyBsZXQncyBraWNrIHRoZSB0aXJlcworYW5kIHNlZSBpZiBpdCB3b3Jrcy4gVGhlcmUncyBhIGJpbmFyeSB5b3UgY2FuIHVzZSB0byB0ZXN0IHdpdGggaW4gdGhlCitgYmluLXdyYXBwZXJzYCBkaXJlY3RvcnkuCisKKy0tLS0KKyQgLi9iaW4td3JhcHBlcnMvZ2l0IHBzdWgKKy0tLS0KKworQ2hlY2sgaXQgb3V0ISBZb3UndmUgZ290IGEgY29tbWFuZCEgTmljZSB3b3JrISBMZXQncyBjb21taXQgdGhpcy4KKworYGdpdCBzdGF0dXNgIHJldmVhbHMgbW9kaWZpZWQgYE1ha2VmaWxlYCwgYGJ1aWx0aW4uaGAsIGFuZCBgZ2l0LmNgIGFzIHdlbGwgYXMKK3VudHJhY2tlZCBgYnVpbHRpbi9wc3VoLmNgIGFuZCBgZ2l0LXBzdWhgLiBGaXJzdCwgbGV0J3MgdGFrZSBjYXJlIG9mIHRoZSBiaW5hcnksCit3aGljaCBzaG91bGQgYmUgaWdub3JlZC4gT3BlbiBgLmdpdGlnbm9yZWAgaW4geW91ciBlZGl0b3IsIGZpbmQgYC9naXQtcHVsbGAsIGFuZAorYWRkIGFuIGVudHJ5IGZvciB5b3VyIG5ldyBjb21tYW5kIGluIGFscGhhYmV0aWNhbCBvcmRlcjoKKworLS0tLQorLi4uCisvZ2l0LXBydW5lLXBhY2tlZAorL2dpdC1wc3VoCisvZ2l0LXB1bGwKKy9naXQtcHVzaAorL2dpdC1xdWlsdGltcG9ydAorL2dpdC1yYW5nZS1kaWZmCisuLi4KKy0tLS0KKworQ2hlY2tpbmcgYGdpdCBzdGF0dXNgIGFnYWluIHNob3VsZCBzaG93IHRoYXQgYGdpdC1wc3VoYCBoYXMgYmVlbiByZW1vdmVkIGZyb20KK3RoZSB1bnRyYWNrZWQgbGlzdCBhbmQgYC5naXRpZ25vcmVgIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBtb2RpZmllZCBsaXN0LiBOb3cgd2UKK2NhbiBzdGFnZSBhbmQgY29tbWl0OgorCistLS0tCiskIGdpdCBhZGQgTWFrZWZpbGUgYnVpbHRpbi5oIGJ1aWx0aW4vcHN1aC5jIGdpdC5jIC5naXRpZ25vcmUKKyQgZ2l0IGNvbW1pdCAtcworLS0tLQorCitZb3Ugd2lsbCBiZSBwcmVzZW50ZWQgd2l0aCB5b3VyIGVkaXRvciBpbiBvcmRlciB0byB3cml0ZSBhIGNvbW1pdCBtZXNzYWdlLiBTdGFydAordGhlIGNvbW1pdCB3aXRoIGEgNTAtY29sdW1uIG9yIGxlc3Mgc3ViamVjdCBsaW5lLCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlCitjb21wb25lbnQgeW91J3JlIHdvcmtpbmcgb24sIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSAoYWx3YXlzIHJlcXVpcmVkKSBhbmQgdGhlbgordGhlIGJvZHkgb2YgeW91ciBjb21taXQgbWVzc2FnZSwgd2hpY2ggc2hvdWxkIHByb3ZpZGUgdGhlIGJ1bGsgb2YgdGhlIGNvbnRleHQuCitSZW1lbWJlciB0byBiZSBleHBsaWNpdCBhbmQgcHJvdmlkZSB0aGUgIldoeSIgb2YgeW91ciBjaGFuZ2UsIGVzcGVjaWFsbHkgaWYgaXQKK2NvdWxkbid0IGVhc2lseSBiZSB1bmRlcnN0b29kIGZyb20geW91ciBkaWZmLiBXaGVuIGVkaXRpbmcgeW91ciBjb21taXQgbWVzc2FnZSwKK2Rvbid0IHJlbW92ZSB0aGUgU2lnbmVkLW9mZi1ieSBsaW5lIHdoaWNoIHdhcyBhZGRlZCBieSBgLXNgIGFib3ZlLgorCistLS0tCitwc3VoOiBhZGQgYSBidWlsdC1pbiBieSBwb3B1bGFyIGRlbWFuZAorCitJbnRlcm5hbCBtZXRyaWNzIGluZGljYXRlIHRoaXMgaXMgYSBjb21tYW5kIG1hbnkgdXNlcnMgZXhwZWN0IHRvIGJlCitwcmVzZW50LiBTbyBoZXJlJ3MgYW4gaW1wbGVtZW50YXRpb24gdG8gaGVscCBkcml2ZSBjdXN0b21lcgorc2F0aXNmYWN0aW9uIGFuZCBlbmdhZ2VtZW50OiBhIHBvbnkgd2hpY2ggZG91YnRmdWxseSBncmVldHMgdGhlIHVzZXIsCitvciwgYSBQb255IFNheWluZyAiVW0sIEhlbGxvIiAoUFNVSCkuCisKK1RoaXMgY29tbWl0IG1lc3NhZ2UgaXMgaW50ZW50aW9uYWxseSBmb3JtYXR0ZWQgdG8gNzIgY29sdW1ucyBwZXIgbGluZSwKK3N0YXJ0cyB3aXRoIGEgc2luZ2xlIGxpbmUgYXMgImNvbW1pdCBtZXNzYWdlIHN1YmplY3QiIHRoYXQgaXMgd3JpdHRlbiBhcworaWYgdG8gY29tbWFuZCB0aGUgY29kZWJhc2UgdG8gZG8gc29tZXRoaW5nIChhZGQgdGhpcywgdGVhY2ggYSBjb21tYW5kCit0aGF0KS4gVGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UgaXMgZGVzaWduZWQgdG8gYWRkIGluZm9ybWF0aW9uIGFib3V0IHRoZQorY29tbWl0IHRoYXQgaXMgbm90IHJlYWRpbHkgZGVkdWNlZCBmcm9tIHJlYWRpbmcgdGhlIGFzc29jaWF0ZWQgZGlmZiwKK3N1Y2ggYXMgYW5zd2VyaW5nIHRoZSBxdWVzdGlvbiAid2h5PyIuCisKK1NpZ25lZC1vZmYtYnk6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CistLS0tCisKK0dvIGFoZWFkIGFuZCBpbnNwZWN0IHlvdXIgbmV3IGNvbW1pdCB3aXRoIGBnaXQgc2hvd2AuICJwc3VoOiIgaW5kaWNhdGVzIHlvdQoraGF2ZSBtb2RpZmllZCBtYWlubHkgdGhlIGBwc3VoYCBjb21tYW5kLiBUaGUgc3ViamVjdCBsaW5lIGdpdmVzIHJlYWRlcnMgYW4gaWRlYQorb2Ygd2hhdCB5b3UndmUgY2hhbmdlZC4gVGhlIHNpZ24tb2ZmIGxpbmUgKGAtc2ApIGluZGljYXRlcyB0aGF0IHlvdSBhZ3JlZSB0bwordGhlIERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mIE9yaWdpbiAxLjEgKHNlZSB0aGUKK2BEb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzYCArKytbW2Rjb11dKysrIGhlYWRlcikuCisKK0ZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSB0dXRvcmlhbCwgdGhlIHN1YmplY3QgbGluZSBvbmx5IHdpbGwgYmUgbGlzdGVkIGZvciB0aGUKK3Nha2Ugb2YgYnJldml0eS4gSG93ZXZlciwgZnVsbHktZmxlc2hlZCBleGFtcGxlIGNvbW1pdCBtZXNzYWdlcyBhcmUgYXZhaWxhYmxlCitvbiB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGxpbmtlZCBhdCB0aGUgdG9wIG9mIHRoaXMgZG9jdW1lbnQuCisKK1tbaW1wbGVtZW50YXRpb25dXQorPT09IEltcGxlbWVudGF0aW9uCisKK0l0J3MgcHJvYmFibHkgdXNlZnVsIHRvIGRvIGF0IGxlYXN0IHNvbWV0aGluZyBiZXNpZGVzIHByaW50aW5nIG91dCBhIHN0cmluZy4KK0xldCdzIHN0YXJ0IGJ5IGhhdmluZyBhIGxvb2sgYXQgZXZlcnl0aGluZyB3ZSBnZXQuCisKK01vZGlmeSB5b3VyIGBjbWRfcHN1aGAgaW1wbGVtZW50YXRpb24gdG8gZHVtcCB0aGUgYXJncyB5b3UncmUgcGFzc2VkLCBrZWVwaW5nCitleGlzdGluZyBgcHJpbnRmKClgIGNhbGxzIGluIHBsYWNlOgorCistLS0tCisJaW50IGk7CisKKwkuLi4KKworCXByaW50ZihRXygiWW91ciBhcmdzICh0aGVyZSBpcyAlZCk6XG4iLAorCQkgICJZb3VyIGFyZ3MgKHRoZXJlIGFyZSAlZCk6XG4iLAorCQkgIGFyZ2MpLAorCSAgICAgICBhcmdjKTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQlwcmludGYoIiVkOiAlc1xuIiwgaSwgYXJndltpXSk7CisKKwlwcmludGYoXygiWW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5OlxuPHRvcC1sZXZlbD4lcyVzXG4iKSwKKwkgICAgICAgcHJlZml4ID8gIi8iIDogIiIsIHByZWZpeCA/IHByZWZpeCA6ICIiKTsKKworLS0tLQorCitCdWlsZCBhbmQgdHJ5IGl0LiBBcyB5b3UgbWF5IGV4cGVjdCwgdGhlcmUncyBwcmV0dHkgbXVjaCBqdXN0IHdoYXRldmVyIHdlIGdpdmUKK29uIHRoZSBjb21tYW5kIGxpbmUsIGluY2x1ZGluZyB0aGUgbmFtZSBvZiBvdXIgY29tbWFuZC4gKElmIGBwcmVmaXhgIGlzIGVtcHR5Citmb3IgeW91LCB0cnkgYGNkIERvY3VtZW50YXRpb24vICYmIC4uL2Jpbi13cmFwcGVycy9naXQgcHN1aGApLiBUaGF0J3Mgbm90IHNvCitoZWxwZnVsLiBTbyB3aGF0IG90aGVyIGNvbnRleHQgY2FuIHdlIGdldD8KKworQWRkIGEgbGluZSB0byBgI2luY2x1ZGUgImNvbmZpZy5oImAuIFRoZW4sIGFkZCB0aGUgZm9sbG93aW5nIGJpdHMgdG8gdGhlCitmdW5jdGlvbiBib2R5OgorCistLS0tCisJY29uc3QgY2hhciAqY2ZnX25hbWU7CisKKy4uLgorCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWlmIChnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3QoInVzZXIubmFtZSIsICZjZmdfbmFtZSkgPiAwKQorCQlwcmludGYoXygiTm8gbmFtZSBpcyBmb3VuZCBpbiBjb25maWdcbiIpKTsKKwllbHNlCisJCXByaW50ZihfKCJZb3VyIG5hbWU6ICVzXG4iKSwgY2ZnX25hbWUpOworLS0tLQorCitgZ2l0X2NvbmZpZygpYCB3aWxsIGdyYWIgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSBjb25maWcgZmlsZXMga25vd24gdG8gR2l0IGFuZAorYXBwbHkgc3RhbmRhcmQgcHJlY2VkZW5jZSBydWxlcy4gYGdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdCgpYCB3aWxsIGxvb2sgdXAKK2Egc3BlY2lmaWMga2V5ICgidXNlci5uYW1lIikgYW5kIGdpdmUgeW91IHRoZSB2YWx1ZS4gVGhlcmUgYXJlIGEgbnVtYmVyIG9mCitzaW5nbGUta2V5IGxvb2t1cCBmdW5jdGlvbnMgbGlrZSB0aGlzIG9uZTsgeW91IGNhbiBzZWUgdGhlbSBhbGwgKGFuZCBtb3JlIGluZm8KK2Fib3V0IGhvdyB0byB1c2UgYGdpdF9jb25maWcoKWApIGluIGBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktY29uZmlnLnR4dGAuCisKK1lvdSBzaG91bGQgc2VlIHRoYXQgdGhlIG5hbWUgcHJpbnRlZCBtYXRjaGVzIHRoZSBvbmUgeW91IHNlZSB3aGVuIHlvdSBydW46CisKKy0tLS0KKyQgZ2l0IGNvbmZpZyAtLWdldCB1c2VyLm5hbWUKKy0tLS0KKworR3JlYXQhIE5vdyB3ZSBrbm93IGhvdyB0byBjaGVjayBmb3IgdmFsdWVzIGluIHRoZSBHaXQgY29uZmlnLiBMZXQncyBjb21taXQgdGhpcwordG9vLCBzbyB3ZSBkb24ndCBsb3NlIG91ciBwcm9ncmVzcy4KKworLS0tLQorJCBnaXQgYWRkIGJ1aWx0aW4vcHN1aC5jCiskIGdpdCBjb21taXQgLXNtICJwc3VoOiBzaG93IHBhcmFtZXRlcnMgJiBjb25maWcgb3B0cyIKKy0tLS0KKworTk9URTogQWdhaW4sIHRoZSBhYm92ZSBpcyBmb3Igc2FrZSBvZiBicmV2aXR5IGluIHRoaXMgdHV0b3JpYWwuIEluIGEgcmVhbCBjaGFuZ2UKK3lvdSBzaG91bGQgbm90IHVzZSBgLW1gIGJ1dCBpbnN0ZWFkIHVzZSB0aGUgZWRpdG9yIHRvIHdyaXRlIGEgbWVhbmluZ2Z1bAorbWVzc2FnZS4KKworU3RpbGwsIGl0J2QgYmUgbmljZSB0byBrbm93IHdoYXQgdGhlIHVzZXIncyB3b3JraW5nIGNvbnRleHQgaXMgbGlrZS4gTGV0J3Mgc2VlCitpZiB3ZSBjYW4gcHJpbnQgdGhlIG5hbWUgb2YgdGhlIHVzZXIncyBjdXJyZW50IGJyYW5jaC4gV2UgY2FuIG1pbWljIHRoZQorYGdpdCBzdGF0dXNgIGltcGxlbWVudGF0aW9uOyB0aGUgcHJpbnRlciBpcyBsb2NhdGVkIGluIGB3dC1zdGF0dXMuY2AgYW5kIHdlIGNhbgorc2VlIHRoYXQgdGhlIGJyYW5jaCBpcyBoZWxkIGluIGEgYHN0cnVjdCB3dF9zdGF0dXNgLgorCitgd3Rfc3RhdHVzX3ByaW50KClgIGdldHMgaW52b2tlZCBieSBgY21kX3N0YXR1cygpYCBpbiBgYnVpbHRpbi9jb21taXQuY2AuCitMb29raW5nIGF0IHRoYXQgaW1wbGVtZW50YXRpb24gd2Ugc2VlIHRoZSBzdGF0dXMgY29uZmlnIGJlaW5nIHBvcHVsYXRlZCBsaWtlIHNvOgorCistLS0tCitzdGF0dXNfaW5pdF9jb25maWcoJnMsIGdpdF9zdGF0dXNfY29uZmlnKTsKKy0tLS0KKworQnV0IGFzIHdlIGRyaWxsIGRvd24sIHdlIGNhbiBmaW5kIHRoYXQgYHN0YXR1c19pbml0X2NvbmZpZygpYCB3cmFwcyBhIGNhbGwKK3RvIGBnaXRfY29uZmlnKClgLiBMZXQncyBtb2RpZnkgdGhlIGNvZGUgd2Ugd3JvdGUgaW4gdGhlIHByZXZpb3VzIGNvbW1pdC4KKworQmUgc3VyZSB0byBpbmNsdWRlIHRoZSBoZWFkZXIgdG8gYWxsb3cgeW91IHRvIHVzZSBgc3RydWN0IHd0X3N0YXR1c2A6CistLS0tCisjaW5jbHVkZSAid3Qtc3RhdHVzLmgiCistLS0tCisKK1RoZW4gbW9kaWZ5IHlvdXIgYGNtZF9wc3VoYCBpbXBsZW1lbnRhdGlvbiB0byBkZWNsYXJlIHlvdXIgYHN0cnVjdCB3dF9zdGF0dXNgLAorcHJlcGFyZSBpdCwgYW5kIHByaW50IGl0cyBjb250ZW50czoKKworLS0tLQorCXN0cnVjdCB3dF9zdGF0dXMgc3RhdHVzOworCisuLi4KKworCXd0X3N0YXR1c19wcmVwYXJlKHRoZV9yZXBvc2l0b3J5LCAmc3RhdHVzKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgJnN0YXR1cyk7CisKKy4uLgorCisJcHJpbnRmKF8oIllvdXIgY3VycmVudCBicmFuY2g6ICVzXG4iKSwgc3RhdHVzLmJyYW5jaCk7CistLS0tCisKK1J1biBpdCBhZ2Fpbi4gQ2hlY2sgaXQgb3V0IC0gaGVyZSdzIHRoZSAodmVyYm9zZSkgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIQorCitMZXQncyBjb21taXQgdGhpcyBhcyB3ZWxsLgorCistLS0tCiskIGdpdCBhZGQgYnVpbHRpbi9wc3VoLmMKKyQgZ2l0IGNvbW1pdCAtc20gInBzdWg6IHByaW50IHRoZSBjdXJyZW50IGJyYW5jaCIKKy0tLS0KKworTm93IGxldCdzIHNlZSBpZiB3ZSBjYW4gZ2V0IHNvbWUgaW5mbyBhYm91dCBhIHNwZWNpZmljIGNvbW1pdC4KKworTHVja2lseSwgdGhlcmUgYXJlIHNvbWUgaGVscGVycyBmb3IgdXMgaGVyZS4gYGNvbW1pdC5oYCBoYXMgYSBmdW5jdGlvbiBjYWxsZWQKK2Bsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9ieV9uYW1lYCB0byB3aGljaCB3ZSBjYW4gc2ltcGx5IHByb3ZpZGUgYSBoYXJkY29kZWQKK3N0cmluZzsgYHByZXR0eS5oYCBoYXMgYW4gZXh0cmVtZWx5IGhhbmR5IGBwcF9jb21taXRfZWFzeSgpYCBjYWxsIHdoaWNoIGRvZXNuJ3QKK3JlcXVpcmUgYSBmdWxsIGZvcm1hdCBvYmplY3QgdG8gYmUgcGFzc2VkLgorCitBZGQgdGhlIGZvbGxvd2luZyBpbmNsdWRlczoKKworLS0tLQorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInByZXR0eS5oIgorLS0tLQorCitUaGVuLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB3aXRoaW4geW91ciBpbXBsZW1lbnRhdGlvbiBvZiBgY21kX3BzdWgoKWAgbmVhcgordGhlIGRlY2xhcmF0aW9ucyBhbmQgdGhlIGxvZ2ljLCByZXNwZWN0aXZlbHkuCisKKy0tLS0KKwlzdHJ1Y3QgY29tbWl0ICpjID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdGxpbmUgPSBTVFJCVUZfSU5JVDsKKworLi4uCisKKwljID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZSgib3JpZ2luL21hc3RlciIpOworCisJaWYgKGMgIT0gTlVMTCkgeworCQlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9PTkVMSU5FLCBjLCAmY29tbWl0bGluZSk7CisJCXByaW50ZihfKCJDdXJyZW50IGNvbW1pdDogJXNcbiIpLCBjb21taXRsaW5lLmJ1Zik7CisJfQorLS0tLQorCitUaGUgYHN0cnVjdCBzdHJidWZgIHByb3ZpZGVzIHNvbWUgc2FmZXR5IGJlbHRzIHRvIHlvdXIgYmFzaWMgYGNoYXIqYCwgb25lIG9mCit3aGljaCBpcyBhIGxlbmd0aCBtZW1iZXIgdG8gcHJldmVudCBidWZmZXIgb3ZlcnJ1bnMuIEl0IG5lZWRzIHRvIGJlIGluaXRpYWxpemVkCituaWNlbHkgd2l0aCBgU1RSQlVGX0lOSVRgLiBLZWVwIGl0IGluIG1pbmQgd2hlbiB5b3UgbmVlZCB0byBwYXNzIGFyb3VuZCBgY2hhcipgLgorCitgbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZWAgcmVzb2x2ZXMgdGhlIG5hbWUgeW91IHBhc3MgaXQsIHNvIHlvdSBjYW4gcGxheQord2l0aCB0aGUgdmFsdWUgdGhlcmUgYW5kIHNlZSB3aGF0IGtpbmQgb2YgdGhpbmdzIHlvdSBjYW4gY29tZSB1cCB3aXRoLgorCitgcHBfY29tbWl0X2Vhc3lgIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBpbiBgcHJldHR5LmhgIHRoYXQgdGFrZXMgYSBzaW5nbGUKK2Zvcm1hdCBlbnVtIHNob3J0aGFuZCwgcmF0aGVyIHRoYW4gYW4gZW50aXJlIGZvcm1hdCBzdHJ1Y3QuIEl0IHRoZW4KK3ByZXR0eS1wcmludHMgdGhlIGNvbW1pdCBhY2NvcmRpbmcgdG8gdGhhdCBzaG9ydGhhbmQuIFRoZXNlIGFyZSBzaW1pbGFyIHRvIHRoZQorZm9ybWF0cyBhdmFpbGFibGUgd2l0aCBgLS1wcmV0dHk9Rk9PYCBpbiBtYW55IEdpdCBjb21tYW5kcy4KKworQnVpbGQgaXQgYW5kIHJ1biwgYW5kIGlmIHlvdSdyZSB1c2luZyB0aGUgc2FtZSBuYW1lIGluIHRoZSBleGFtcGxlLCB5b3Ugc2hvdWxkCitzZWUgdGhlIHN1YmplY3QgbGluZSBvZiB0aGUgbW9zdCByZWNlbnQgY29tbWl0IGluIGBvcmlnaW4vbWFzdGVyYCB0aGF0IHlvdSBrbm93CithYm91dC4gTmVhdCEgTGV0J3MgY29tbWl0IHRoYXQgYXMgd2VsbC4KKworLS0tLQorJCBnaXQgYWRkIGJ1aWx0aW4vcHN1aC5jCiskIGdpdCBjb21taXQgLXNtICJwc3VoOiBkaXNwbGF5IHRoZSB0b3Agb2Ygb3JpZ2luL21hc3RlciIKKy0tLS0KKworW1thZGQtZG9jdW1lbnRhdGlvbl1dCis9PT0gQWRkaW5nIERvY3VtZW50YXRpb24KKworQXdlc29tZSEgWW91J3ZlIGdvdCBhIGZhbnRhc3RpYyBuZXcgY29tbWFuZCB0aGF0IHlvdSdyZSByZWFkeSB0byBzaGFyZSB3aXRoIHRoZQorY29tbXVuaXR5LiBCdXQgaGFuZyBvbiBqdXN0IGEgbWludXRlIC0gdGhpcyBpc24ndCB2ZXJ5IHVzZXItZnJpZW5kbHkuIFJ1biB0aGUKK2ZvbGxvd2luZzoKKworLS0tLQorJCAuL2Jpbi13cmFwcGVycy9naXQgaGVscCBwc3VoCistLS0tCisKK1lvdXIgbmV3IGNvbW1hbmQgaXMgdW5kb2N1bWVudGVkISBMZXQncyBmaXggdGhhdC4KKworVGFrZSBhIGxvb2sgYXQgYERvY3VtZW50YXRpb24vZ2l0LSoudHh0YC4gVGhlc2UgYXJlIHRoZSBtYW5wYWdlcyBmb3IgdGhlCitzdWJjb21tYW5kcyB0aGF0IEdpdCBrbm93cyBhYm91dC4gWW91IGNhbiBvcGVuIHRoZXNlIHVwIGFuZCB0YWtlIGEgbG9vayB0byBnZXQKK2FjcXVhaW50ZWQgd2l0aCB0aGUgZm9ybWF0LCBidXQgdGhlbiBnbyBhaGVhZCBhbmQgbWFrZSBhIG5ldyBmaWxlCitgRG9jdW1lbnRhdGlvbi9naXQtcHN1aC50eHRgLiBMaWtlIHdpdGggbW9zdCBvZiB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgR2l0Citwcm9qZWN0LCBoZWxwIHBhZ2VzIGFyZSB3cml0dGVuIHdpdGggQXNjaWlEb2MgKHNlZSBDb2RpbmdHdWlkZWxpbmVzLCAiV3JpdGluZworRG9jdW1lbnRhdGlvbiIgc2VjdGlvbikuIFVzZSB0aGUgZm9sbG93aW5nIHRlbXBsYXRlIHRvIGZpbGwgb3V0IHlvdXIgb3duCittYW5wYWdlOgorCisvLyBTdXJwcmlzaW5nbHkgZGlmZmljdWx0IHRvIGVtYmVkIEFzY2lpRG9jIHNvdXJjZSB3aXRoaW4gQXNjaWlEb2MuCitbbGlzdGluZ10KKy4uLi4KK2dpdC1wc3VoKDEpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcHN1aCAtIERlbGlnaHQgdXNlcnMnIHR5cG8gd2l0aCBhIHNoeSBob3JzZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdC1wc3VoIFs8YXJnPi4uLl0nCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorLi4uCisKK09QVElPTlNbW09QVElPTlNdXQorLS0tLS0tLS0tLS0tLS0tLS0tCisuLi4KKworT1VUUFVUCistLS0tLS0KKy4uLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKKy4uLi4KKworVGhlIG1vc3QgaW1wb3J0YW50IHBpZWNlcyBvZiB0aGlzIHRvIG5vdGUgYXJlIHRoZSBmaWxlIGhlYWRlciwgdW5kZXJsaW5lZCBieSA9LAordGhlIE5BTUUgc2VjdGlvbiwgYW5kIHRoZSBTWU5PUFNJUywgd2hpY2ggd291bGQgbm9ybWFsbHkgY29udGFpbiB0aGUgZ3JhbW1hciBpZgoreW91ciBjb21tYW5kIHRvb2sgYXJndW1lbnRzLiBUcnkgdG8gdXNlIHdlbGwtZXN0YWJsaXNoZWQgbWFucGFnZSBoZWFkZXJzIHNvIHlvdXIKK2RvY3VtZW50YXRpb24gaXMgY29uc2lzdGVudCB3aXRoIG90aGVyIEdpdCBhbmQgVU5JWCBtYW5wYWdlczsgdGhpcyBtYWtlcyBsaWZlCitlYXNpZXIgZm9yIHlvdXIgdXNlciwgd2hvIGNhbiBza2lwIHRvIHRoZSBzZWN0aW9uIHRoZXkga25vdyBjb250YWlucyB0aGUKK2luZm9ybWF0aW9uIHRoZXkgbmVlZC4KKworTm93IHRoYXQgeW91J3ZlIHdyaXR0ZW4geW91ciBtYW5wYWdlLCB5b3UnbGwgbmVlZCB0byBidWlsZCBpdCBleHBsaWNpdGx5LiBXZQorY29udmVydCB5b3VyIEFzY2lpRG9jIHRvIHRyb2ZmIHdoaWNoIGlzIG1hbi1yZWFkYWJsZSBsaWtlIHNvOgorCistLS0tCiskIG1ha2UgYWxsIGRvYworJCBtYW4gRG9jdW1lbnRhdGlvbi9naXQtcHN1aC4xCistLS0tCisKK29yCisKKy0tLS0KKyQgbWFrZSAtQyBEb2N1bWVudGF0aW9uLyBnaXQtcHN1aC4xCiskIG1hbiBEb2N1bWVudGF0aW9uL2dpdC1wc3VoLjEKKy0tLS0KKworTk9URTogWW91IG1heSBuZWVkIHRvIGluc3RhbGwgdGhlIHBhY2thZ2UgYGFzY2lpZG9jYCB0byBnZXQgdGhpcyB0byB3b3JrLgorCitXaGlsZSB0aGlzIGlzbid0IGFzIHNhdGlzZnlpbmcgYXMgcnVubmluZyB0aHJvdWdoIGBnaXQgaGVscGAsIHlvdSBjYW4gYXQgbGVhc3QKK2NoZWNrIHRoYXQgeW91ciBoZWxwIHBhZ2UgbG9va3MgcmlnaHQuCisKK1lvdSBjYW4gYWxzbyBjaGVjayB0aGF0IHRoZSBkb2N1bWVudGF0aW9uIGNvdmVyYWdlIGlzIGdvb2QgKHRoYXQgaXMsIHRoZSBwcm9qZWN0CitzZWVzIHRoYXQgeW91ciBjb21tYW5kIGhhcyBiZWVuIGltcGxlbWVudGVkIGFzIHdlbGwgYXMgZG9jdW1lbnRlZCkgYnkgcnVubmluZworYG1ha2UgY2hlY2stZG9jc2AgZnJvbSB0aGUgdG9wLWxldmVsLgorCitHbyBhaGVhZCBhbmQgY29tbWl0IHlvdXIgbmV3IGRvY3VtZW50YXRpb24gY2hhbmdlLgorCitbW2FkZC11c2FnZV1dCis9PT0gQWRkaW5nIFVzYWdlIFRleHQKKworVHJ5IGFuZCBydW4gYC4vYmluLXdyYXBwZXJzL2dpdCBwc3VoIC1oYC4gWW91ciBjb21tYW5kIHNob3VsZCBjcmFzaCBhdCB0aGUgZW5kLgorVGhhdCdzIGJlY2F1c2UgYC1oYCBpcyBhIHNwZWNpYWwgY2FzZSB3aGljaCB5b3VyIGNvbW1hbmQgc2hvdWxkIGhhbmRsZSBieQorcHJpbnRpbmcgdXNhZ2UuCisKK1Rha2UgYSBsb29rIGF0IGBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGFyc2Utb3B0aW9ucy50eHRgLiBUaGlzIGlzIGEgaGFuZHkKK3Rvb2wgZm9yIHB1bGxpbmcgb3V0IG9wdGlvbnMgeW91IG5lZWQgdG8gYmUgYWJsZSB0byBoYW5kbGUsIGFuZCBpdCB0YWtlcyBhCit1c2FnZSBzdHJpbmcuCisKK0luIG9yZGVyIHRvIHVzZSBpdCwgd2UnbGwgbmVlZCB0byBwcmVwYXJlIGEgTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHVzYWdlCitzdHJpbmdzIGFuZCBhIGBidWlsdGluX3BzdWhfb3B0aW9uc2AgYXJyYXkuCisKK0FkZCBhIGxpbmUgdG8gYCNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiYC4KKworQXQgZ2xvYmFsIHNjb3BlLCBhZGQgeW91ciBhcnJheSBvZiB1c2FnZSBzdHJpbmdzOgorCistLS0tCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBzdWhfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHBzdWggWzxhcmc+Li4uXSIpLAorCU5VTEwsCit9OworLS0tLQorCitUaGVuLCB3aXRoaW4geW91ciBgY21kX3BzdWgoKWAgaW1wbGVtZW50YXRpb24sIHdlIGNhbiBkZWNsYXJlIGFuZCBwb3B1bGF0ZSBvdXIKK2BvcHRpb25gIHN0cnVjdC4gT3VycyBpcyBwcmV0dHkgYm9yaW5nIGJ1dCB5b3UgY2FuIGFkZCBtb3JlIHRvIGl0IGlmIHlvdSB3YW50IHRvCitleHBsb3JlIGBwYXJzZV9vcHRpb25zKClgIGluIG1vcmUgZGV0YWlsOgorCistLS0tCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CistLS0tCisKK0ZpbmFsbHksIGJlZm9yZSB5b3UgcHJpbnQgeW91ciBhcmdzIGFuZCBwcmVmaXgsIGFkZCB0aGUgY2FsbCB0bworYHBhcnNlLW9wdGlvbnMoKWA6CisKKy0tLS0KKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHBzdWhfdXNhZ2UsIDApOworLS0tLQorCitUaGlzIGNhbGwgd2lsbCBtb2RpZnkgeW91ciBgYXJndmAgcGFyYW1ldGVyLiBJdCB3aWxsIHN0cmlwIHRoZSBvcHRpb25zIHlvdQorc3BlY2lmaWVkIGluIGBvcHRpb25zYCBmcm9tIGBhcmd2YCBhbmQgdGhlIGxvY2F0aW9ucyBwb2ludGVkIHRvIGZyb20gYG9wdGlvbnNgCitlbnRyaWVzIHdpbGwgYmUgdXBkYXRlZC4gQmUgc3VyZSB0byByZXBsYWNlIHlvdXIgYGFyZ2NgIHdpdGggdGhlIHJlc3VsdCBmcm9tCitgcGFyc2Vfb3B0aW9ucygpYCwgb3IgeW91IHdpbGwgYmUgY29uZnVzZWQgaWYgeW91IHRyeSB0byBwYXJzZSBgYXJndmAgbGF0ZXIuCisKK0l0J3Mgd29ydGggbm90aW5nIHRoZSBzcGVjaWFsIGFyZ3VtZW50IGAtLWAuIEFzIHlvdSBtYXkgYmUgYXdhcmUsIG1hbnkgVW5peAorY29tbWFuZHMgdXNlIGAtLWAgdG8gaW5kaWNhdGUgImVuZCBvZiBuYW1lZCBwYXJhbWV0ZXJzIiAtIGFsbCBwYXJhbWV0ZXJzIGFmdGVyCit0aGUgYC0tYCBhcmUgaW50ZXJwcmV0ZWQgbWVyZWx5IGFzIHBvc2l0aW9uYWwgYXJndW1lbnRzLiAoVGhpcyBjYW4gYmUgaGFuZHkgaWYKK3lvdSB3YW50IHRvIHBhc3MgYXMgYSBwYXJhbWV0ZXIgc29tZXRoaW5nIHdoaWNoIHdvdWxkIHVzdWFsbHkgYmUgaW50ZXJwcmV0ZWQgYXMKK2EgZmxhZy4pIGBwYXJzZV9vcHRpb25zKClgIHdpbGwgdGVybWluYXRlIHBhcnNpbmcgd2hlbiBpdCByZWFjaGVzIGAtLWAgYW5kIGdpdmUKK3lvdSB0aGUgcmVzdCBvZiB0aGUgb3B0aW9ucyBhZnRlcndhcmRzLCB1bnRvdWNoZWQuCisKK05vdyB0aGF0IHlvdSBoYXZlIGEgdXNhZ2UgaGludCwgeW91IGNhbiB0ZWFjaCBHaXQgaG93IHRvIHNob3cgaXQgaW4gdGhlIGdlbmVyYWwKK2NvbW1hbmQgbGlzdCBzaG93biBieSBgZ2l0IGhlbHAgZ2l0YCBvciBgZ2l0IGhlbHAgLWFgLCB3aGljaCBpcyBnZW5lcmF0ZWQgZnJvbQorYGNvbW1hbmQtbGlzdC50eHRgLiBGaW5kIHRoZSBsaW5lIGZvciAnZ2l0LXB1bGwnIHNvIHlvdSBjYW4gYWRkIHlvdXIgJ2dpdC1wc3VoJworbGluZSBhYm92ZSBpdCBpbiBhbHBoYWJldGljYWwgb3JkZXIuIE5vdywgd2UgY2FuIGFkZCBzb21lIGF0dHJpYnV0ZXMgYWJvdXQgdGhlCitjb21tYW5kIHdoaWNoIGltcGFjdHMgd2hlcmUgaXQgc2hvd3MgdXAgaW4gdGhlIGFmb3JlbWVudGlvbmVkIGhlbHAgY29tbWFuZHMuIFRoZQordG9wIG9mIGBjb21tYW5kLWxpc3QudHh0YCBzaGFyZXMgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGVhY2ggYXR0cmlidXRlCittZWFuczsgaW4gdGhvc2UgaGVscCBwYWdlcywgdGhlIGNvbW1hbmRzIGFyZSBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZXNlCithdHRyaWJ1dGVzLiBgZ2l0IHBzdWhgIGlzIHVzZXItZmFjaW5nLCBvciBwb3JjZWxhaW4gLSBzbyB3ZSB3aWxsIG1hcmsgaXQgYXMKKyJtYWlucG9yY2VsYWluIi4gRm9yICJtYWlucG9yY2VsYWluIiBjb21tYW5kcywgdGhlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YKK2Bjb21tYW5kLWxpc3QudHh0YCBpbmRpY2F0ZSB3ZSBjYW4gYWxzbyBvcHRpb25hbGx5IGFkZCBhbiBhdHRyaWJ1dGUgZnJvbSBhbm90aGVyCitsaXN0OyBzaW5jZSBgZ2l0IHBzdWhgIHNob3dzIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXIncyB3b3Jrc3BhY2UgYnV0Citkb2Vzbid0IG1vZGlmeSBhbnl0aGluZywgbGV0J3MgbWFyayBpdCBhcyAiaW5mbyIuIE1ha2Ugc3VyZSB0byBrZWVwIHlvdXIKK2F0dHJpYnV0ZXMgaW4gdGhlIHNhbWUgc3R5bGUgYXMgdGhlIHJlc3Qgb2YgYGNvbW1hbmQtbGlzdC50eHRgIHVzaW5nIHNwYWNlcyB0bworYWxpZ24gYW5kIGRlbGluZWF0ZSB0aGVtOgorCistLS0tCitnaXQtcHJ1bmUtcGFja2VkICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1wc3VoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCQlpbmZvCitnaXQtcHVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgcmVtb3RlCitnaXQtcHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgcmVtb3RlCistLS0tCisKK0J1aWxkIGFnYWluLiBOb3csIHdoZW4geW91IHJ1biB3aXRoIGAtaGAsIHlvdSBzaG91bGQgc2VlIHlvdXIgdXNhZ2UgcHJpbnRlZCBhbmQKK3lvdXIgY29tbWFuZCB0ZXJtaW5hdGVkIGJlZm9yZSBhbnl0aGluZyBlbHNlIGludGVyZXN0aW5nIGhhcHBlbnMuIEdyZWF0IQorCitHbyBhaGVhZCBhbmQgY29tbWl0IHRoaXMgb25lLCB0b28uCisKK1tbdGVzdGluZ11dCis9PSBUZXN0aW5nCisKK0l0J3MgaW1wb3J0YW50IHRvIHRlc3QgeW91ciBjb2RlIC0gZXZlbiBmb3IgYSBsaXR0bGUgdG95IGNvbW1hbmQgbGlrZSB0aGlzIG9uZS4KK01vcmVvdmVyLCB5b3VyIHBhdGNoIHdvbid0IGJlIGFjY2VwdGVkIGludG8gdGhlIEdpdCB0cmVlIHdpdGhvdXQgdGVzdHMuIFlvdXIKK3Rlc3RzIHNob3VsZDoKKworKiBJbGx1c3RyYXRlIHRoZSBjdXJyZW50IGJlaGF2aW9yIG9mIHRoZSBmZWF0dXJlCisqIFByb3ZlIHRoZSBjdXJyZW50IGJlaGF2aW9yIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yCisqIEVuc3VyZSB0aGUgZXh0ZXJuYWxseS12aXNpYmxlIGJlaGF2aW9yIGlzbid0IGJyb2tlbiBpbiBsYXRlciBjaGFuZ2VzCisKK1NvIGxldCdzIHdyaXRlIHNvbWUgdGVzdHMuCisKK1JlbGF0ZWQgcmVhZGluZzogYHQvUkVBRE1FYAorCitbW292ZXJ2aWV3LXRlc3Qtc3RydWN0dXJlXV0KKz09PSBPdmVydmlldyBvZiBUZXN0aW5nIFN0cnVjdHVyZQorCitUaGUgdGVzdHMgaW4gR2l0IGxpdmUgaW4gYHQvYCBhbmQgYXJlIG5hbWVkIHdpdGggYSA0LWRpZ2l0IGRlY2ltYWwgbnVtYmVyIHVzaW5nCit0aGUgc2NoZW1hIHNob3duIGluIHRoZSBOYW1pbmcgVGVzdHMgc2VjdGlvbiBvZiBgdC9SRUFETUVgLgorCitbW3dyaXRlLW5ldy10ZXN0XV0KKz09PSBXcml0aW5nIFlvdXIgVGVzdAorCitTaW5jZSB0aGlzIGEgdG95IGNvbW1hbmQsIGxldCdzIGdvIGFoZWFkIGFuZCBuYW1lIHRoZSB0ZXN0IHdpdGggdDk5OTkuIEhvd2V2ZXIsCithcyBtYW55IG9mIHRoZSBmYW1pbHkvc3ViY21kIGNvbWJpbmF0aW9ucyBhcmUgZnVsbCwgYmVzdCBwcmFjdGljZSBzZWVtcyB0byBiZQordG8gZmluZCBhIGNvbW1hbmQgY2xvc2UgZW5vdWdoIHRvIHRoZSBvbmUgeW91J3ZlIGFkZGVkIGFuZCBzaGFyZSBpdHMgbmFtaW5nCitzcGFjZS4KKworQ3JlYXRlIGEgbmV3IGZpbGUgYHQvdDk5OTktcHN1aC10dXRvcmlhbC5zaGAuIEJlZ2luIHdpdGggdGhlIGhlYWRlciBhcyBzbyAoc2VlCisiV3JpdGluZyBUZXN0cyIgYW5kICJTb3VyY2UgJ3Rlc3QtbGliLnNoJyIgaW4gYHQvUkVBRE1FYCk6CisKKy0tLS0KKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtcHN1aCB0ZXN0CisKK1RoaXMgdGVzdCBydW5zIGdpdC1wc3VoIGFuZCBtYWtlcyBzdXJlIGl0IGRvZXMgbm90IGNyYXNoLicKKworLiAuL3Rlc3QtbGliLnNoCistLS0tCisKK1Rlc3RzIGFyZSBmcmFtZWQgaW5zaWRlIG9mIGEgYHRlc3RfZXhwZWN0X3N1Y2Nlc3NgIGluIG9yZGVyIHRvIG91dHB1dCBUQVAKK2Zvcm1hdHRlZCByZXN1bHRzLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgZ2l0IHBzdWhgIGRvZXNuJ3QgZXhpdCBwb29ybHkgYW5kIGRvZXMKK21lbnRpb24gdGhlIHJpZ2h0IGFuaW1hbCBzb21ld2hlcmU6CisKKy0tLS0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bnMgY29ycmVjdGx5IHdpdGggbm8gYXJncyBhbmQgZ29vZCBvdXRwdXQnICcKKwlnaXQgcHN1aCA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCBQb255IGFjdHVhbAorJworLS0tLQorCitJbmRpY2F0ZSB0aGF0IHlvdSd2ZSBydW4gZXZlcnl0aGluZyB5b3Ugd2FudGVkIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIGF0IHRoZQorYm90dG9tIG9mIHlvdXIgc2NyaXB0OgorCistLS0tCit0ZXN0X2RvbmUKKy0tLS0KKworTWFrZSBzdXJlIHlvdSBtYXJrIHlvdXIgdGVzdCBzY3JpcHQgZXhlY3V0YWJsZToKKworLS0tLQorJCBjaG1vZCAreCB0L3Q5OTk5LXBzdWgtdHV0b3JpYWwuc2gKKy0tLS0KKworWW91IGNhbiBnZXQgYW4gaWRlYSBvZiB3aGV0aGVyIHlvdSBjcmVhdGVkIHlvdXIgbmV3IHRlc3Qgc2NyaXB0IHN1Y2Nlc3NmdWxseQorYnkgcnVubmluZyBgbWFrZSAtQyB0IHRlc3QtbGludGAsIHdoaWNoIHdpbGwgY2hlY2sgZm9yIHRoaW5ncyBsaWtlIHRlc3QgbnVtYmVyCit1bmlxdWVuZXNzLCBleGVjdXRhYmxlIGJpdCwgYW5kIHNvIG9uLgorCitbW2xvY2FsLXRlc3RdXQorPT09IFJ1bm5pbmcgTG9jYWxseQorCitMZXQncyB0cnkgYW5kIHJ1biBsb2NhbGx5OgorCistLS0tCiskIG1ha2UKKyQgY2QgdC8gJiYgcHJvdmUgdDk5OTktcHN1aC10dXRvcmlhbC5zaAorLS0tLQorCitZb3UgY2FuIHJ1biB0aGUgZnVsbCB0ZXN0IHN1aXRlIGFuZCBlbnN1cmUgYGdpdC1wc3VoYCBkaWRuJ3QgYnJlYWsgYW55dGhpbmc6CisKKy0tLS0KKyQgY2QgdC8KKyQgcHJvdmUgLWokKG5wcm9jKSAtLXNodWZmbGUgdFswLTldKi5zaAorLS0tLQorCitOT1RFOiBZb3UgY2FuIGFsc28gZG8gdGhpcyB3aXRoIGBtYWtlIHRlc3RgIG9yIHVzZSBhbnkgdGVzdGluZyBoYXJuZXNzIHdoaWNoIGNhbgorc3BlYWsgVEFQLiBgcHJvdmVgIGNhbiBydW4gY29uY3VycmVudGx5LiBgc2h1ZmZsZWAgcmFuZG9taXplcyB0aGUgb3JkZXIgdGhlCit0ZXN0cyBhcmUgcnVuIGluLCB3aGljaCBtYWtlcyB0aGVtIHJlc2lsaWVudCBhZ2FpbnN0IHVud2FudGVkIGludGVyLXRlc3QKK2RlcGVuZGVuY2llcy4gYHByb3ZlYCBhbHNvIG1ha2VzIHRoZSBvdXRwdXQgbmljZXIuCisKK0dvIGFoZWFkIGFuZCBjb21taXQgdGhpcyBjaGFuZ2UsIGFzIHdlbGwuCisKK1tbcmVhZHktdG8tc2hhcmVdXQorPT0gR2V0dGluZyBSZWFkeSB0byBTaGFyZQorCitZb3UgbWF5IGhhdmUgbm90aWNlZCBhbHJlYWR5IHRoYXQgdGhlIEdpdCBwcm9qZWN0IHBlcmZvcm1zIGl0cyBjb2RlIHJldmlld3MgdmlhCitlbWFpbGVkIHBhdGNoZXMsIHdoaWNoIGFyZSB0aGVuIGFwcGxpZWQgYnkgdGhlIG1haW50YWluZXIgd2hlbiB0aGV5IGFyZSByZWFkeQorYW5kIGFwcHJvdmVkIGJ5IHRoZSBjb21tdW5pdHkuIFRoZSBHaXQgcHJvamVjdCBkb2VzIG5vdCBhY2NlcHQgcGF0Y2hlcyBmcm9tCitwdWxsIHJlcXVlc3RzLCBhbmQgdGhlIHBhdGNoZXMgZW1haWxlZCBmb3IgcmV2aWV3IG5lZWQgdG8gYmUgZm9ybWF0dGVkIGEKK3NwZWNpZmljIHdheS4gQXQgdGhpcyBwb2ludCB0aGUgdHV0b3JpYWwgZGl2ZXJnZXMsIGluIG9yZGVyIHRvIGRlbW9uc3RyYXRlIHR3bworZGlmZmVyZW50IG1ldGhvZHMgb2YgZm9ybWF0dGluZyB5b3VyIHBhdGNoc2V0IGFuZCBnZXR0aW5nIGl0IHJldmlld2VkLgorCitUaGUgZmlyc3QgbWV0aG9kIHRvIGJlIGNvdmVyZWQgaXMgR2l0R2l0R2FkZ2V0LCB3aGljaCBpcyB1c2VmdWwgZm9yIHRob3NlCithbHJlYWR5IGZhbWlsaWFyIHdpdGggR2l0SHViJ3MgY29tbW9uIHB1bGwgcmVxdWVzdCB3b3JrZmxvdy4gVGhpcyBtZXRob2QKK3JlcXVpcmVzIGEgR2l0SHViIGFjY291bnQuCisKK1RoZSBzZWNvbmQgbWV0aG9kIHRvIGJlIGNvdmVyZWQgaXMgYGdpdCBzZW5kLWVtYWlsYCwgd2hpY2ggY2FuIGdpdmUgc2xpZ2h0bHkKK21vcmUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgZW1haWxzIHRvIGJlIHNlbnQuIFRoaXMgbWV0aG9kIHJlcXVpcmVzIHNvbWUKK3NldHVwIHdoaWNoIGNhbiBjaGFuZ2UgZGVwZW5kaW5nIG9uIHlvdXIgc3lzdGVtIGFuZCB3aWxsIG5vdCBiZSBjb3ZlcmVkIGluIHRoaXMKK3R1dG9yaWFsLgorCitSZWdhcmRsZXNzIG9mIHdoaWNoIG1ldGhvZCB5b3UgY2hvb3NlLCB5b3VyIGVuZ2FnZW1lbnQgd2l0aCByZXZpZXdlcnMgd2lsbCBiZQordGhlIHNhbWU7IHRoZSByZXZpZXcgcHJvY2VzcyB3aWxsIGJlIGNvdmVyZWQgYWZ0ZXIgdGhlIHNlY3Rpb25zIG9uIEdpdEdpdEdhZGdldAorYW5kIGBnaXQgc2VuZC1lbWFpbGAuCisKK1tbaG93dG8tZ2dnXV0KKz09IFNlbmRpbmcgUGF0Y2hlcyB2aWEgR2l0R2l0R2FkZ2V0CisKK09uZSBvcHRpb24gZm9yIHNlbmRpbmcgcGF0Y2hlcyBpcyB0byBmb2xsb3cgYSB0eXBpY2FsIHB1bGwgcmVxdWVzdCB3b3JrZmxvdyBhbmQKK3NlbmQgeW91ciBwYXRjaGVzIG91dCB2aWEgR2l0R2l0R2FkZ2V0LiBHaXRHaXRHYWRnZXQgaXMgYSB0b29sIGNyZWF0ZWQgYnkKK0pvaGFubmVzIFNjaGluZGVsaW4gdG8gbWFrZSBsaWZlIGFzIGEgR2l0IGNvbnRyaWJ1dG9yIGVhc2llciBmb3IgdGhvc2UgdXNlZCB0bwordGhlIEdpdEh1YiBQUiB3b3JrZmxvdy4gSXQgYWxsb3dzIGNvbnRyaWJ1dG9ycyB0byBvcGVuIHB1bGwgcmVxdWVzdHMgYWdhaW5zdCBpdHMKK21pcnJvciBvZiB0aGUgR2l0IHByb2plY3QsIGFuZCBkb2VzIHNvbWUgbWFnaWMgdG8gdHVybiB0aGUgUFIgaW50byBhIHNldCBvZgorZW1haWxzIGFuZCBzZW5kIHRoZW0gb3V0IGZvciB5b3UuIEl0IGFsc28gcnVucyB0aGUgR2l0IGNvbnRpbnVvdXMgaW50ZWdyYXRpb24KK3N1aXRlIGZvciB5b3UuIEl0J3MgZG9jdW1lbnRlZCBhdCBodHRwOi8vZ2l0Z2l0Z2FkZ2V0LmdpdGh1Yi5pby4KKworW1tjcmVhdGUtZm9ya11dCis9PT0gRm9ya2luZyBgZ2l0L2dpdGAgb24gR2l0SHViCisKK0JlZm9yZSB5b3UgY2FuIHNlbmQgeW91ciBwYXRjaCBvZmYgdG8gYmUgcmV2aWV3ZWQgdXNpbmcgR2l0R2l0R2FkZ2V0LCB5b3Ugd2lsbAorbmVlZCB0byBmb3JrIHRoZSBHaXQgcHJvamVjdCBhbmQgdXBsb2FkIHlvdXIgY2hhbmdlcy4gRmlyc3QgdGhpbmcgLSBtYWtlIHN1cmUKK3lvdSBoYXZlIGEgR2l0SHViIGFjY291bnQuCisKK0hlYWQgdG8gdGhlIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQvZ2l0W0dpdEh1YiBtaXJyb3JdIGFuZCBsb29rIGZvciB0aGUgRm9yaworYnV0dG9uLiBQbGFjZSB5b3VyIGZvcmsgd2hlcmV2ZXIgeW91IGRlZW0gYXBwcm9wcmlhdGUgYW5kIGNyZWF0ZSBpdC4KKworW1t1cGxvYWQtdG8tZm9ya11dCis9PT0gVXBsb2FkaW5nIHRvIFlvdXIgT3duIEZvcmsKKworVG8gdXBsb2FkIHlvdXIgYnJhbmNoIHRvIHlvdXIgb3duIGZvcmssIHlvdSdsbCBuZWVkIHRvIGFkZCB0aGUgbmV3IGZvcmsgYXMgYQorcmVtb3RlLiBZb3UgY2FuIHVzZSBgZ2l0IHJlbW90ZSAtdmAgdG8gc2hvdyB0aGUgcmVtb3RlcyB5b3UgaGF2ZSBhZGRlZCBhbHJlYWR5LgorRnJvbSB5b3VyIG5ldyBmb3JrJ3MgcGFnZSBvbiBHaXRIdWIsIHlvdSBjYW4gcHJlc3MgIkNsb25lIG9yIGRvd25sb2FkIiB0byBnZXQKK3RoZSBVUkw7IHRoZW4geW91IG5lZWQgdG8gcnVuIHRoZSBmb2xsb3dpbmcgdG8gYWRkLCByZXBsYWNpbmcgeW91ciBvd24gVVJMIGFuZAorcmVtb3RlIG5hbWUgZm9yIHRoZSBleGFtcGxlcyBwcm92aWRlZDoKKworLS0tLQorJCBnaXQgcmVtb3RlIGFkZCByZW1vdGVuYW1lIGdpdEBnaXRodWIuY29tOnJlbW90ZW5hbWUvZ2l0LmdpdAorLS0tLQorCitvciB0byB1c2UgdGhlIEhUVFBTIFVSTDoKKworLS0tLQorJCBnaXQgcmVtb3RlIGFkZCByZW1vdGVuYW1lIGh0dHBzOi8vZ2l0aHViLmNvbS9yZW1vdGVuYW1lL2dpdC8uZ2l0CistLS0tCisKK1J1biBgZ2l0IHJlbW90ZSAtdmAgYWdhaW4gYW5kIHlvdSBzaG91bGQgc2VlIHRoZSBuZXcgcmVtb3RlIHNob3dpbmcgdXAuCitgZ2l0IGZldGNoIHJlbW90ZW5hbWVgICh3aXRoIHRoZSByZWFsIG5hbWUgb2YgeW91ciByZW1vdGUgcmVwbGFjZWQpIGluIG9yZGVyIHRvCitnZXQgcmVhZHkgdG8gcHVzaC4KKworTmV4dCwgZG91YmxlLWNoZWNrIHRoYXQgeW91J3ZlIGJlZW4gZG9pbmcgYWxsIHlvdXIgZGV2ZWxvcG1lbnQgaW4gYSBuZXcgYnJhbmNoCitieSBydW5uaW5nIGBnaXQgYnJhbmNoYC4gSWYgeW91IGRpZG4ndCwgbm93IGlzIGEgZ29vZCB0aW1lIHRvIG1vdmUgeW91ciBuZXcKK2NvbW1pdHMgdG8gdGhlaXIgb3duIGJyYW5jaC4KKworQXMgbWVudGlvbmVkIGJyaWVmbHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGRvY3VtZW50LCB3ZSBhcmUgYmFzaW5nIG91ciB3b3JrCitvbiBgbWFzdGVyYCwgc28gZ28gYWhlYWQgYW5kIHVwZGF0ZSBhcyBzaG93biBiZWxvdywgb3IgdXNpbmcgeW91ciBwcmVmZXJyZWQKK3dvcmtmbG93LgorCistLS0tCiskIGdpdCBjaGVja291dCBtYXN0ZXIKKyQgZ2l0IHB1bGwgLXIKKyQgZ2l0IHJlYmFzZSBtYXN0ZXIgcHN1aAorLS0tLQorCitGaW5hbGx5LCB5b3UncmUgcmVhZHkgdG8gcHVzaCB5b3VyIG5ldyB0b3BpYyBicmFuY2ghIChEdWUgdG8gb3VyIGJyYW5jaCBhbmQKK2NvbW1hbmQgbmFtZSBjaG9pY2VzLCBiZSBjYXJlZnVsIHdoZW4geW91IHR5cGUgdGhlIGNvbW1hbmQgYmVsb3cuKQorCistLS0tCiskIGdpdCBwdXNoIHJlbW90ZW5hbWUgcHN1aAorLS0tLQorCitOb3cgeW91IHNob3VsZCBiZSBhYmxlIHRvIGdvIGFuZCBjaGVjayBvdXQgeW91ciBuZXdseSBjcmVhdGVkIGJyYW5jaCBvbiBHaXRIdWIuCisKK1tbc2VuZC1wci1nZ2ddXQorPT09IFNlbmRpbmcgYSBQUiB0byBHaXRHaXRHYWRnZXQKKworSW4gb3JkZXIgdG8gaGF2ZSB5b3VyIGNvZGUgdGVzdGVkIGFuZCBmb3JtYXR0ZWQgZm9yIHJldmlldywgeW91IG5lZWQgdG8gc3RhcnQgYnkKK29wZW5pbmcgYSBQdWxsIFJlcXVlc3QgYWdhaW5zdCBgZ2l0Z2l0Z2FkZ2V0L2dpdGAuIEhlYWQgdG8KK2h0dHBzOi8vZ2l0aHViLmNvbS9naXRnaXRnYWRnZXQvZ2l0IGFuZCBvcGVuIGEgUFIgZWl0aGVyIHdpdGggdGhlICJOZXcgcHVsbAorcmVxdWVzdCIgYnV0dG9uIG9yIHRoZSBjb252ZW5pZW50ICJDb21wYXJlICYgcHVsbCByZXF1ZXN0IiBidXR0b24gdGhhdCBtYXkKK2FwcGVhciB3aXRoIHRoZSBuYW1lIG9mIHlvdXIgbmV3bHkgcHVzaGVkIGJyYW5jaC4KKworUmV2aWV3IHRoZSBQUidzIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiwgYXMgaXQncyB1c2VkIGJ5IEdpdEdpdEdhZGdldCBhcyB0aGUgY292ZXIKK2xldHRlciBmb3IgeW91ciBjaGFuZ2UuIFdoZW4geW91J3JlIGhhcHB5LCBzdWJtaXQgeW91ciBwdWxsIHJlcXVlc3QuCisKK1tbcnVuLWNpLWdnZ11dCis9PT0gUnVubmluZyBDSSBhbmQgR2V0dGluZyBSZWFkeSB0byBTZW5kCisKK0lmIGl0J3MgeW91ciBmaXJzdCB0aW1lIHVzaW5nIEdpdEdpdEdhZGdldCAod2hpY2ggaXMgbGlrZWx5LCBhcyB5b3UncmUgdXNpbmcKK3RoaXMgdHV0b3JpYWwpIHRoZW4gc29tZW9uZSB3aWxsIG5lZWQgdG8gZ2l2ZSB5b3UgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRvb2wuCitBcyBtZW50aW9uZWQgaW4gdGhlIEdpdEdpdEdhZGdldCBkb2N1bWVudGF0aW9uLCB5b3UganVzdCBuZWVkIHNvbWVvbmUgd2hvCithbHJlYWR5IHVzZXMgaXQgdG8gY29tbWVudCBvbiB5b3VyIFBSIHdpdGggYC9hbGxvdyA8dXNlcm5hbWU+YC4gR2l0R2l0R2FkZ2V0Cit3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIHlvdXIgUFJzIHRocm91Z2ggdGhlIENJIGV2ZW4gd2l0aG91dCB0aGUgcGVybWlzc2lvbiBnaXZlbgorYnV0IHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGAvc3VibWl0YCB5b3VyIGNoYW5nZXMgdW50aWwgc29tZW9uZSBhbGxvd3MgeW91IHRvCit1c2UgdGhlIHRvb2wuCisKK05PVEU6IFlvdSBjYW4gdHlwaWNhbGx5IGZpbmQgc29tZW9uZSB3aG8gY2FuIGAvYWxsb3dgIHlvdSBvbiBHaXRHaXRHYWRnZXQgYnkKK2VpdGhlciBleGFtaW5pbmcgcmVjZW50IHB1bGwgcmVxdWVzdHMgd2hlcmUgc29tZW9uZSBoYXMgYmVlbiBncmFudGVkIGAvYWxsb3dgCisoaHR0cHM6Ly9naXRodWIuY29tL2dpdGdpdGdhZGdldC9naXQvcHVsbHM/dXRmOD0lRTIlOUMlOTMmcT1pcyUzQXByK2lzJTNBb3BlbislMjIlMkZhbGxvdyUyMltTZWFyY2g6CitpczpwciBpczpvcGVuICIvYWxsb3ciXSksIGluIHdoaWNoIGNhc2UgYm90aCB0aGUgYXV0aG9yIGFuZCB0aGUgcGVyc29uIHdobworZ3JhbnRlZCB0aGUgYC9hbGxvd2AgY2FuIG5vdyBgL2FsbG93YCB5b3UsIG9yIGJ5IGlucXVpcmluZyBvbiB0aGUKK2h0dHBzOi8vd2ViY2hhdC5mcmVlbm9kZS5uZXQvI2dpdC1kZXZlbFsjZ2l0LWRldmVsXSBJUkMgY2hhbm5lbCBvbiBGcmVlbm9kZQorbGlua2luZyB5b3VyIHB1bGwgcmVxdWVzdCBhbmQgYXNraW5nIGZvciBzb21lb25lIHRvIGAvYWxsb3dgIHlvdS4KKworSWYgdGhlIENJIGZhaWxzLCB5b3UgY2FuIHVwZGF0ZSB5b3VyIGNoYW5nZXMgd2l0aCBgZ2l0IHJlYmFzZSAtaWAgYW5kIHB1c2ggeW91cgorYnJhbmNoIGFnYWluOgorCistLS0tCiskIGdpdCBwdXNoIC1mIHJlbW90ZW5hbWUgcHN1aAorLS0tLQorCitJbiBmYWN0LCB5b3Ugc2hvdWxkIGNvbnRpbnVlIHRvIG1ha2UgY2hhbmdlcyB0aGlzIHdheSB1cCB1bnRpbCB0aGUgcG9pbnQgd2hlbgoreW91ciBwYXRjaCBpcyBhY2NlcHRlZCBpbnRvIGBuZXh0YC4KKworLy8vLworVE9ETyBodHRwczovL2dpdGh1Yi5jb20vZ2l0Z2l0Z2FkZ2V0L2dpdGdpdGdhZGdldC9pc3N1ZXMvODMKK0l0J2QgYmUgbmljZSB0byBiZSBhYmxlIHRvIHZlcmlmeSB0aGF0IHRoZSBwYXRjaCBsb29rcyBnb29kIGJlZm9yZSBzZW5kaW5nIGl0Cit0byBldmVyeW9uZSBvbiBHaXQgbWFpbGluZyBsaXN0LgorW1tjaGVjay13b3JrLWdnZ11dCis9PT0gQ2hlY2sgWW91ciBXb3JrCisvLy8vCisKK1tbc2VuZC1tYWlsLWdnZ11dCis9PT0gU2VuZGluZyBZb3VyIFBhdGNoZXMKKworTm93IHRoYXQgeW91ciBDSSBpcyBwYXNzaW5nIGFuZCBzb21lb25lIGhhcyBncmFudGVkIHlvdSBwZXJtaXNzaW9uIHRvIHVzZQorR2l0R2l0R2FkZ2V0IHdpdGggdGhlIGAvYWxsb3dgIGNvbW1hbmQsIHNlbmRpbmcgb3V0IGZvciByZXZpZXcgaXMgYXMgc2ltcGxlIGFzCitjb21tZW50aW5nIG9uIHlvdXIgUFIgd2l0aCBgL3N1Ym1pdGAuCisKK1tbcmVzcG9uZGluZy1nZ2ddXQorPT09IFVwZGF0aW5nIFdpdGggQ29tbWVudHMKKworU2tpcCBhaGVhZCB0byA8PHJldmlld2luZyxSZXNwb25kaW5nIHRvIFJldmlld3M+PiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvCityZXBseSB0byByZXZpZXcgY29tbWVudHMgeW91IHdpbGwgcmVjZWl2ZSBvbiB0aGUgbWFpbGluZyBsaXN0LgorCitPbmNlIHlvdSBoYXZlIHlvdXIgYnJhbmNoIGFnYWluIGluIHRoZSBzaGFwZSB5b3Ugd2FudCBmb2xsb3dpbmcgYWxsIHJldmlldworY29tbWVudHMsIHlvdSBjYW4gc3VibWl0IGFnYWluOgorCistLS0tCiskIGdpdCBwdXNoIC1mIHJlbW90ZW5hbWUgcHN1aAorLS0tLQorCitOZXh0LCBnbyBsb29rIGF0IHlvdXIgcHVsbCByZXF1ZXN0IGFnYWluc3QgR2l0R2l0R2FkZ2V0OyB5b3Ugc2hvdWxkIHNlZSB0aGUgQ0kKK2hhcyBiZWVuIGtpY2tlZCBvZmYgYWdhaW4uIE5vdyB3aGlsZSB0aGUgQ0kgaXMgcnVubmluZyBpcyBhIGdvb2QgdGltZSBmb3IgeW91Cit0byBtb2RpZnkgeW91ciBkZXNjcmlwdGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBwdWxsIHJlcXVlc3QgdGhyZWFkOyBpdCB3aWxsIGJlCit1c2VkIGFnYWluIGFzIHRoZSBjb3ZlciBsZXR0ZXIuIFlvdSBzaG91bGQgdXNlIHRoaXMgc3BhY2UgdG8gZGVzY3JpYmUgd2hhdAoraGFzIGNoYW5nZWQgc2luY2UgeW91ciBwcmV2aW91cyB2ZXJzaW9uLCBzbyB0aGF0IHlvdXIgcmV2aWV3ZXJzIGhhdmUgc29tZSBpZGVhCitvZiB3aGF0IHRoZXkncmUgbG9va2luZyBhdC4gV2hlbiB0aGUgQ0kgaXMgZG9uZSBydW5uaW5nLCB5b3UgY2FuIGNvbW1lbnQgb25jZQorbW9yZSB3aXRoIGAvc3VibWl0YCAtIEdpdEdpdEdhZGdldCB3aWxsIGF1dG9tYXRpY2FsbHkgYWRkIGEgdjIgbWFyayB0byB5b3VyCitjaGFuZ2VzLgorCitbW2hvd3RvLWdpdC1zZW5kLWVtYWlsXV0KKz09IFNlbmRpbmcgUGF0Y2hlcyB3aXRoIGBnaXQgc2VuZC1lbWFpbGAKKworSWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIEdpdEdpdEdhZGdldCwgeW91IGNhbiBhbHNvIHVzZSBHaXQgaXRzZWxmIHRvIG1haWwgeW91cgorcGF0Y2hlcy4gU29tZSBiZW5lZml0cyBvZiB1c2luZyBHaXQgdGhpcyB3YXkgaW5jbHVkZSBmaW5lciBncmFpbmVkIGNvbnRyb2wgb2YKK3N1YmplY3QgbGluZSAoZm9yIGV4YW1wbGUsIGJlaW5nIGFibGUgdG8gdXNlIHRoZSB0YWcgW1JGQyBQQVRDSF0gaW4gdGhlIHN1YmplY3QpCithbmQgYmVpbmcgYWJsZSB0byBzZW5kIGEgYGBkcnkgcnVuJycgbWFpbCB0byB5b3Vyc2VsZiB0byBlbnN1cmUgaXQgYWxsIGxvb2tzCitnb29kIGJlZm9yZSBnb2luZyBvdXQgdG8gdGhlIGxpc3QuCisKK1tbc2V0dXAtZ2l0LXNlbmQtZW1haWxdXQorPT09IFByZXJlcXVpc2l0ZTogU2V0dGluZyBVcCBgZ2l0IHNlbmQtZW1haWxgCisKK0NvbmZpZ3VyYXRpb24gZm9yIGBzZW5kLWVtYWlsYCBjYW4gdmFyeSBiYXNlZCBvbiB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gYW5kIGVtYWlsCitwcm92aWRlciwgYW5kIHNvIHdpbGwgbm90IGJlIGNvdmVyZWQgaW4gdGhpcyB0dXRvcmlhbCwgYmV5b25kIHN0YXRpbmcgdGhhdCBpbgorbWFueSBkaXN0cmlidXRpb25zIG9mIExpbnV4LCBgZ2l0LXNlbmQtZW1haWxgIGlzIG5vdCBwYWNrYWdlZCBhbG9uZ3NpZGUgdGhlCit0eXBpY2FsIGBnaXRgIGluc3RhbGwuIFlvdSBtYXkgbmVlZCB0byBpbnN0YWxsIHRoaXMgYWRkaXRpb25hbCBwYWNrYWdlOyB0aGVyZQorYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBvbmxpbmUgdG8gaGVscCB5b3UgZG8gc28uIFlvdSB3aWxsIGFsc28gbmVlZCB0bworZGV0ZXJtaW5lIHRoZSByaWdodCB3YXkgdG8gY29uZmlndXJlIGl0IHRvIHVzZSB5b3VyIFNNVFAgc2VydmVyOyBhZ2FpbiwgYXMgdGhpcworY29uZmlndXJhdGlvbiBjYW4gY2hhbmdlIHNpZ25pZmljYW50bHkgYmFzZWQgb24geW91ciBzeXN0ZW0gYW5kIGVtYWlsIHNldHVwLCBpdAoraXMgb3V0IG9mIHNjb3BlIGZvciB0aGUgY29udGV4dCBvZiB0aGlzIHR1dG9yaWFsLgorCitbW2Zvcm1hdC1wYXRjaF1dCis9PT0gUHJlcGFyaW5nIEluaXRpYWwgUGF0Y2hzZXQKKworU2VuZGluZyBlbWFpbHMgd2l0aCBHaXQgaXMgYSB0d28tcGFydCBwcm9jZXNzOyBiZWZvcmUgeW91IGNhbiBwcmVwYXJlIHRoZSBlbWFpbHMKK3RoZW1zZWx2ZXMsIHlvdSdsbCBuZWVkIHRvIHByZXBhcmUgdGhlIHBhdGNoZXMuIEx1Y2tpbHksIHRoaXMgaXMgcHJldHR5IHNpbXBsZToKKworLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC1vIHBzdWgvIG1hc3Rlci4ucHN1aAorLS0tLQorCitUaGUgYC0tY292ZXItbGV0dGVyYCBwYXJhbWV0ZXIgdGVsbHMgYGZvcm1hdC1wYXRjaGAgdG8gY3JlYXRlIGEgY292ZXIgbGV0dGVyCit0ZW1wbGF0ZSBmb3IgeW91LiBZb3Ugd2lsbCBuZWVkIHRvIGZpbGwgaW4gdGhlIHRlbXBsYXRlIGJlZm9yZSB5b3UncmUgcmVhZHkKK3RvIHNlbmQgLSBidXQgZm9yIG5vdywgdGhlIHRlbXBsYXRlIHdpbGwgYmUgbmV4dCB0byB5b3VyIG90aGVyIHBhdGNoZXMuCisKK1RoZSBgLW8gcHN1aC9gIHBhcmFtZXRlciB0ZWxscyBgZm9ybWF0LXBhdGNoYCB0byBwbGFjZSB0aGUgcGF0Y2ggZmlsZXMgaW50byBhCitkaXJlY3RvcnkuIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgYGdpdCBzZW5kLWVtYWlsYCBjYW4gdGFrZSBhIGRpcmVjdG9yeSBhbmQKK3NlbmQgb3V0IGFsbCB0aGUgcGF0Y2hlcyBmcm9tIHRoZXJlLgorCitgbWFzdGVyLi5wc3VoYCB0ZWxscyBgZm9ybWF0LXBhdGNoYCB0byBnZW5lcmF0ZSBwYXRjaGVzIGZvciB0aGUgZGlmZmVyZW5jZQorYmV0d2VlbiBgbWFzdGVyYCBhbmQgYHBzdWhgLiBJdCB3aWxsIG1ha2Ugb25lIHBhdGNoIGZpbGUgcGVyIGNvbW1pdC4gQWZ0ZXIgeW91CitydW4sIHlvdSBjYW4gZ28gaGF2ZSBhIGxvb2sgYXQgZWFjaCBvZiB0aGUgcGF0Y2hlcyB3aXRoIHlvdXIgZmF2b3JpdGUgdGV4dAorZWRpdG9yIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBsb29rcyBhbHJpZ2h0OyBob3dldmVyLCBpdCdzIG5vdCByZWNvbW1lbmRlZCB0bworbWFrZSBjb2RlIGZpeHVwcyB2aWEgdGhlIHBhdGNoIGZpbGUuIEl0J3MgYSBiZXR0ZXIgaWRlYSB0byBtYWtlIHRoZSBjaGFuZ2UgdGhlCitub3JtYWwgd2F5IHVzaW5nIGBnaXQgcmViYXNlIC1pYCBvciBieSBhZGRpbmcgYSBuZXcgY29tbWl0IHRoYW4gYnkgbW9kaWZ5aW5nIGEKK3BhdGNoLgorCitOT1RFOiBPcHRpb25hbGx5LCB5b3UgY2FuIGFsc28gdXNlIHRoZSBgLS1yZmNgIGZsYWcgdG8gcHJlZml4IHlvdXIgcGF0Y2ggc3ViamVjdAord2l0aCBgYFtSRkMgUEFUQ0hdJycgaW5zdGVhZCBvZiBgYFtQQVRDSF0nJy4gUkZDIHN0YW5kcyBmb3IgYGByZXF1ZXN0IGZvcgorY29tbWVudHMnJyBhbmQgaW5kaWNhdGVzIHRoYXQgd2hpbGUgeW91ciBjb2RlIGlzbid0IHF1aXRlIHJlYWR5IGZvciBzdWJtaXNzaW9uLAoreW91J2QgbGlrZSB0byBiZWdpbiB0aGUgY29kZSByZXZpZXcgcHJvY2Vzcy4gVGhpcyBjYW4gYWxzbyBiZSB1c2VkIHdoZW4geW91cgorcGF0Y2ggaXMgYSBwcm9wb3NhbCwgYnV0IHlvdSBhcmVuJ3Qgc3VyZSB3aGV0aGVyIHRoZSBjb21tdW5pdHkgd2FudHMgdG8gc29sdmUKK3RoZSBwcm9ibGVtIHdpdGggdGhhdCBhcHByb2FjaCBvciBub3QgLSB0byBjb25kdWN0IGEgc29ydCBvZiBkZXNpZ24gcmV2aWV3LiBZb3UKK21heSBhbHNvIHNlZSBvbiB0aGUgbGlzdCBwYXRjaGVzIG1hcmtlZCBgYFdJUCcnIC0gdGhpcyBtZWFucyB0aGV5IGFyZSBpbmNvbXBsZXRlCitidXQgd2FudCByZXZpZXdlcnMgdG8gbG9vayBhdCB3aGF0IHRoZXkgaGF2ZSBzbyBmYXIuIFlvdSBjYW4gYWRkIHRoaXMgZmxhZyB3aXRoCitgLS1zdWJqZWN0LXByZWZpeD1XSVBgLgorCitDaGVjayBhbmQgbWFrZSBzdXJlIHRoYXQgeW91ciBwYXRjaGVzIGFuZCBjb3ZlciBsZXR0ZXIgdGVtcGxhdGUgZXhpc3QgaW4gdGhlCitkaXJlY3RvcnkgeW91IHNwZWNpZmllZCAtIHlvdSdyZSBuZWFybHkgcmVhZHkgdG8gc2VuZCBvdXQgeW91ciByZXZpZXchCisKK1tbY292ZXItbGV0dGVyXV0KKz09PSBQcmVwYXJpbmcgRW1haWwKKworSW4gYWRkaXRpb24gdG8gYW4gZW1haWwgcGVyIHBhdGNoLCB0aGUgR2l0IGNvbW11bml0eSBhbHNvIGV4cGVjdHMgeW91ciBwYXRjaGVzCit0byBjb21lIHdpdGggYSBjb3ZlciBsZXR0ZXIsIHR5cGljYWxseSB3aXRoIGEgc3ViamVjdCBsaW5lIFtQQVRDSCAwL3hdICh3aGVyZQoreCBpcyB0aGUgbnVtYmVyIG9mIHBhdGNoZXMgeW91J3JlIHNlbmRpbmcpLiBTaW5jZSB5b3UgaW52b2tlZCBgZm9ybWF0LXBhdGNoYAord2l0aCBgLS1jb3Zlci1sZXR0ZXJgLCB5b3UndmUgYWxyZWFkeSBnb3QgYSB0ZW1wbGF0ZSByZWFkeS4gT3BlbiBpdCB1cCBpbiB5b3VyCitmYXZvcml0ZSBlZGl0b3IuCisKK1lvdSBzaG91bGQgc2VlIGEgbnVtYmVyIG9mIGhlYWRlcnMgcHJlc2VudCBhbHJlYWR5LiBDaGVjayB0aGF0IHlvdXIgYEZyb206YAoraGVhZGVyIGlzIGNvcnJlY3QuIFRoZW4gbW9kaWZ5IHlvdXIgYFN1YmplY3Q6YCB0byBzb21ldGhpbmcgd2hpY2ggc3VjY2luY3RseQorY292ZXJzIHRoZSBwdXJwb3NlIG9mIHlvdXIgZW50aXJlIHRvcGljIGJyYW5jaCwgZm9yIGV4YW1wbGU6CisKKy0tLS0KK1N1YmplY3Q6IFtQQVRDSCAwLzddIGFkZGluZyB0aGUgJ3BzdWgnIGNvbW1hbmQKKy0tLS0KKworTWFrZSBzdXJlIHlvdSByZXRhaW4gdGhlIGBgW1BBVENIIDAvWF0nJyBwYXJ0OyB0aGF0J3Mgd2hhdCBpbmRpY2F0ZXMgdG8gdGhlIEdpdAorY29tbXVuaXR5IHRoYXQgdGhpcyBlbWFpbCBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgcmV2aWV3LCBhbmQgbWFueSByZXZpZXdlcnMKK2ZpbHRlciB0aGVpciBlbWFpbCBmb3IgdGhpcyB0eXBlIG9mIGZsYWcuCisKK1lvdSdsbCBuZWVkIHRvIGFkZCBzb21lIGV4dHJhIHBhcmFtZXRlcnMgd2hlbiB5b3UgaW52b2tlIGBnaXQgc2VuZC1lbWFpbGAgdG8gYWRkCit0aGUgY292ZXIgbGV0dGVyLgorCitOZXh0IHlvdSdsbCBoYXZlIHRvIGZpbGwgb3V0IHRoZSBib2R5IG9mIHlvdXIgY292ZXIgbGV0dGVyLiBUaGlzIGlzIGFuIGltcG9ydGFudAorY29tcG9uZW50IG9mIGNoYW5nZSBzdWJtaXNzaW9uIGFzIGl0IGV4cGxhaW5zIHRvIHRoZSBjb21tdW5pdHkgZnJvbSBhIGhpZ2ggbGV2ZWwKK3doYXQgeW91J3JlIHRyeWluZyB0byBkbywgYW5kIHdoeSwgaW4gYSB3YXkgdGhhdCdzIG1vcmUgYXBwYXJlbnQgdGhhbiBqdXN0Citsb29raW5nIGF0IHlvdXIgZGlmZi4gQmUgc3VyZSB0byBleHBsYWluIGFueXRoaW5nIHlvdXIgZGlmZiBkb2Vzbid0IG1ha2UgY2xlYXIKK29uIGl0cyBvd24uCisKK0hlcmUncyBhbiBleGFtcGxlIGJvZHkgZm9yIGBwc3VoYDoKKworLS0tLQorT3VyIGludGVybmFsIG1ldHJpY3MgaW5kaWNhdGUgd2lkZXNwcmVhZCBpbnRlcmVzdCBpbiB0aGUgY29tbWFuZAorZ2l0LXBzdWggLSB0aGF0IGlzLCBtYW55IHVzZXJzIGFyZSB0cnlpbmcgdG8gdXNlIGl0LCBidXQgZmluZGluZyBpdCBpcwordW5hdmFpbGFibGUsIHVzaW5nIHNvbWUgdW5rbm93biB3b3JrYXJvdW5kIGluc3RlYWQuCisKK1RoZSBmb2xsb3dpbmcgaGFuZGZ1bCBvZiBwYXRjaGVzIGFkZCB0aGUgcHN1aCBjb21tYW5kIGFuZCBpbXBsZW1lbnQgc29tZQoraGFuZHkgZmVhdHVyZXMgb24gdG9wIG9mIGl0LgorCitUaGlzIHBhdGNoc2V0IGlzIHBhcnQgb2YgdGhlIE15Rmlyc3RDb250cmlidXRpb24gdHV0b3JpYWwgYW5kIHNob3VsZCBub3QKK2JlIG1lcmdlZC4KKy0tLS0KKworVGhlIHRlbXBsYXRlIGNyZWF0ZWQgYnkgYGdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXJgIGluY2x1ZGVzIGEgZGlmZnN0YXQuCitUaGlzIGdpdmVzIHJldmlld2VycyBhIHN1bW1hcnkgb2Ygd2hhdCB0aGV5J3JlIGluIGZvciB3aGVuIHJldmlld2luZyB5b3VyIHRvcGljLgorVGhlIG9uZSBnZW5lcmF0ZWQgZm9yIGBwc3VoYCBmcm9tIHRoZSBzYW1wbGUgaW1wbGVtZW50YXRpb24gbG9va3MgbGlrZSB0aGlzOgorCistLS0tCisgRG9jdW1lbnRhdGlvbi9naXQtcHN1aC50eHQgfCA0MCArKysrKysrKysrKysrKysrKysrKysKKyBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAxICsKKyBidWlsdGluLmggICAgICAgICAgICAgICAgICB8ICAxICsKKyBidWlsdGluL3BzdWguYyAgICAgICAgICAgICB8IDczICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZ2l0LmMgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCisgdC90OTk5OS1wc3VoLXR1dG9yaWFsLnNoICAgfCAxMiArKysrKysrCisgNiBmaWxlcyBjaGFuZ2VkLCAxMjggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2dpdC1wc3VoLnR4dAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBidWlsdGluL3BzdWguYworIGNyZWF0ZSBtb2RlIDEwMDc1NSB0L3Q5OTk5LXBzdWgtdHV0b3JpYWwuc2gKKy0tLS0KKworRmluYWxseSwgdGhlIGxldHRlciB3aWxsIGluY2x1ZGUgdGhlIHZlcnNpb24gb2YgR2l0IHVzZWQgdG8gZ2VuZXJhdGUgdGhlCitwYXRjaGVzLiBZb3UgY2FuIGxlYXZlIHRoYXQgc3RyaW5nIGFsb25lLgorCitbW3NlbmRpbmctZ2l0LXNlbmQtZW1haWxdXQorPT09IFNlbmRpbmcgRW1haWwKKworQXQgdGhpcyBwb2ludCB5b3Ugc2hvdWxkIGhhdmUgYSBkaXJlY3RvcnkgYHBzdWgvYCB3aGljaCBpcyBmaWxsZWQgd2l0aCB5b3VyCitwYXRjaGVzIGFuZCBhIGNvdmVyIGxldHRlci4gVGltZSB0byBtYWlsIGl0IG91dCEgWW91IGNhbiBzZW5kIGl0IGxpa2UgdGhpczoKKworLS0tLQorJCBnaXQgc2VuZC1lbWFpbCAtLXRvPXRhcmdldEBleGFtcGxlLmNvbSBwc3VoLyoucGF0Y2gKKy0tLS0KKworTk9URTogQ2hlY2sgYGdpdCBoZWxwIHNlbmQtZW1haWxgIGZvciBzb21lIG90aGVyIG9wdGlvbnMgd2hpY2ggeW91IG1heSBmaW5kCit2YWx1YWJsZSwgc3VjaCBhcyBjaGFuZ2luZyB0aGUgUmVwbHktdG8gYWRkcmVzcyBvciBhZGRpbmcgbW9yZSBDQyBhbmQgQkNDIGxpbmVzLgorCitOT1RFOiBXaGVuIHlvdSBhcmUgc2VuZGluZyBhIHJlYWwgcGF0Y2gsIGl0IHdpbGwgZ28gdG8gZ2l0QHZnZXIua2VybmVsLm9yZyAtIGJ1dAorcGxlYXNlIGRvbid0IHNlbmQgeW91ciBwYXRjaHNldCBmcm9tIHRoZSB0dXRvcmlhbCB0byB0aGUgcmVhbCBtYWlsaW5nIGxpc3QhIEZvcgorbm93LCB5b3UgY2FuIHNlbmQgaXQgdG8geW91cnNlbGYsIHRvIG1ha2Ugc3VyZSB5b3UgdW5kZXJzdGFuZCBob3cgaXQgd2lsbCBsb29rLgorCitBZnRlciB5b3UgcnVuIHRoZSBjb21tYW5kIGFib3ZlLCB5b3Ugd2lsbCBiZSBwcmVzZW50ZWQgd2l0aCBhbiBpbnRlcmFjdGl2ZQorcHJvbXB0IGZvciBlYWNoIHBhdGNoIHRoYXQncyBhYm91dCB0byBnbyBvdXQuIFRoaXMgZ2l2ZXMgeW91IG9uZSBsYXN0IGNoYW5jZSB0bworZWRpdCBvciBxdWl0IHNlbmRpbmcgc29tZXRoaW5nIChidXQgYWdhaW4sIGRvbid0IGVkaXQgY29kZSB0aGlzIHdheSkuIE9uY2UgeW91CitwcmVzcyBgeWAgb3IgYGFgIGF0IHRoZXNlIHByb21wdHMgeW91ciBlbWFpbHMgd2lsbCBiZSBzZW50ISBDb25ncmF0dWxhdGlvbnMhCisKK0F3ZXNvbWUsIG5vdyB0aGUgY29tbXVuaXR5IHdpbGwgZHJvcCBldmVyeXRoaW5nIGFuZCByZXZpZXcgeW91ciBjaGFuZ2VzLiAoSnVzdAora2lkZGluZyAtIGJlIHBhdGllbnQhKQorCitbW3YyLWdpdC1zZW5kLWVtYWlsXV0KKz09PSBTZW5kaW5nIHYyCisKK1NraXAgYWhlYWQgdG8gPDxyZXZpZXdpbmcsUmVzcG9uZGluZyB0byBSZXZpZXdzPj4gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0bworaGFuZGxlIGNvbW1lbnRzIGZyb20gcmV2aWV3ZXJzLiBDb250aW51ZSB0aGlzIHNlY3Rpb24gd2hlbiB5b3VyIHRvcGljIGJyYW5jaCBpcworc2hhcGVkIHRoZSB3YXkgeW91IHdhbnQgaXQgdG8gbG9vayBmb3IgeW91ciBwYXRjaHNldCB2Mi4KKworV2hlbiB5b3UncmUgcmVhZHkgd2l0aCB0aGUgbmV4dCBpdGVyYXRpb24gb2YgeW91ciBwYXRjaCwgdGhlIHByb2Nlc3MgaXMgZmFpcmx5CitzaW1pbGFyLgorCitGaXJzdCwgZ2VuZXJhdGUgeW91ciB2MiBwYXRjaGVzIGFnYWluOgorCistLS0tCiskIGdpdCBmb3JtYXQtcGF0Y2ggLXYyIC0tY292ZXItbGV0dGVyIC1vIHBzdWgvIG1hc3Rlci4ucHN1aAorLS0tLQorCitUaGlzIHdpbGwgYWRkIHlvdXIgdjIgcGF0Y2hlcywgYWxsIG5hbWVkIGxpa2UgYHYyLTAwMG4tbXktY29tbWl0LXN1YmplY3QucGF0Y2hgLAordG8gdGhlIGBwc3VoL2AgZGlyZWN0b3J5LiBZb3UgbWF5IG5vdGljZSB0aGF0IHRoZXkgYXJlIHNpdHRpbmcgYWxvbmdzaWRlIHRoZSB2MQorcGF0Y2hlczsgdGhhdCdzIGZpbmUsIGJ1dCBiZSBjYXJlZnVsIHdoZW4geW91IGFyZSByZWFkeSB0byBzZW5kIHRoZW0uCisKK0VkaXQgeW91ciBjb3ZlciBsZXR0ZXIgYWdhaW4uIE5vdyBpcyBhIGdvb2QgdGltZSB0byBtZW50aW9uIHdoYXQncyBkaWZmZXJlbnQKK2JldHdlZW4geW91ciBsYXN0IHZlcnNpb24gYW5kIG5vdywgaWYgaXQncyBzb21ldGhpbmcgc2lnbmlmaWNhbnQuIFlvdSBkbyBub3QKK25lZWQgdGhlIGV4YWN0IHNhbWUgYm9keSBpbiB5b3VyIHNlY29uZCBjb3ZlciBsZXR0ZXI7IGZvY3VzIG9uIGV4cGxhaW5pbmcgdG8KK3Jldmlld2VycyB0aGUgY2hhbmdlcyB5b3UndmUgbWFkZSB0aGF0IG1heSBub3QgYmUgYXMgdmlzaWJsZS4KKworWW91IHdpbGwgYWxzbyBuZWVkIHRvIGdvIGFuZCBmaW5kIHRoZSBNZXNzYWdlLUlkIG9mIHlvdXIgcHJldmlvdXMgY292ZXIgbGV0dGVyLgorWW91IGNhbiBlaXRoZXIgbm90ZSBpdCB3aGVuIHlvdSBzZW5kIHRoZSBmaXJzdCBzZXJpZXMsIGZyb20gdGhlIG91dHB1dCBvZiBgZ2l0CitzZW5kLWVtYWlsYCwgb3IgeW91IGNhbiBsb29rIGl0IHVwIG9uIHRoZQoraHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0W21haWxpbmcgbGlzdF0uIEZpbmQgeW91ciBjb3ZlciBsZXR0ZXIgaW4gdGhlCithcmNoaXZlcywgY2xpY2sgb24gaXQsIHRoZW4gY2xpY2sgInBlcm1hbGluayIgb3IgInJhdyIgdG8gcmV2ZWFsIHRoZSBNZXNzYWdlLUlkCitoZWFkZXIuIEl0IHNob3VsZCBtYXRjaDoKKworLS0tLQorTWVzc2FnZS1JZDogPGZvby4xMjM0NS5hdXRob3JAZXhhbXBsZS5jb20+CistLS0tCisKK1lvdXIgTWVzc2FnZS1JZCBpcyBgPGZvby4xMjM0NS5hdXRob3JAZXhhbXBsZS5jb20+YC4gVGhpcyBleGFtcGxlIHdpbGwgYmUgdXNlZAorYmVsb3cgYXMgd2VsbDsgbWFrZSBzdXJlIHRvIHJlcGxhY2UgaXQgd2l0aCB0aGUgY29ycmVjdCBNZXNzYWdlLUlkIGZvciB5b3VyCisqKnByZXZpb3VzIGNvdmVyIGxldHRlcioqIC0gdGhhdCBpcywgaWYgeW91J3JlIHNlbmRpbmcgdjIsIHVzZSB0aGUgTWVzc2FnZS1JZAorZnJvbSB2MTsgaWYgeW91J3JlIHNlbmRpbmcgdjMsIHVzZSB0aGUgTWVzc2FnZS1JZCBmcm9tIHYyLgorCitXaGlsZSB5b3UncmUgbG9va2luZyBhdCB0aGUgZW1haWwsIHlvdSBzaG91bGQgYWxzbyBub3RlIHdobyBpcyBDQydkLCBhcyBpdCdzCitjb21tb24gcHJhY3RpY2UgaW4gdGhlIG1haWxpbmcgbGlzdCB0byBrZWVwIGFsbCBDQ3Mgb24gYSB0aHJlYWQuIFlvdSBjYW4gYWRkCit0aGVzZSBDQyBsaW5lcyBkaXJlY3RseSB0byB5b3VyIGNvdmVyIGxldHRlciB3aXRoIGEgbGluZSBsaWtlIHNvIGluIHRoZSBoZWFkZXIKKyhiZWZvcmUgdGhlIFN1YmplY3QgbGluZSk6CisKKy0tLS0KK0NDOiBhdXRob3JAZXhhbXBsZS5jb20sIE90aGUgUiA8b3RoZXJAZXhhbXBsZS5jb20+CistLS0tCisKK05vdyBzZW5kIHRoZSBlbWFpbHMgYWdhaW4sIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gd2hpY2ggbWVzc2FnZXMgeW91IHBhc3MgaW4KK3RvIHRoZSBjb21tYW5kOgorCistLS0tCiskIGdpdCBzZW5kLWVtYWlsIC0tdG89dGFyZ2V0QGV4YW1wbGUuY29tCisJCSAtLWluLXJlcGx5LXRvPSI8Zm9vLjEyMzQ1LmF1dGhvckBleGFtcGxlLmNvbT4iCisJCSBwc3VoL3YyKgorLS0tLQorCitbW3NpbmdsZS1wYXRjaF1dCis9PT0gQm9udXMgQ2hhcHRlcjogT25lLVBhdGNoIENoYW5nZXMKKworSW4gc29tZSBjYXNlcywgeW91ciB2ZXJ5IHNtYWxsIGNoYW5nZSBtYXkgY29uc2lzdCBvZiBvbmx5IG9uZSBwYXRjaC4gV2hlbiB0aGF0CitoYXBwZW5zLCB5b3Ugb25seSBuZWVkIHRvIHNlbmQgb25lIGVtYWlsLiBZb3VyIGNvbW1pdCBtZXNzYWdlIHNob3VsZCBhbHJlYWR5IGJlCittZWFuaW5nZnVsIGFuZCBleHBsYWluIGF0IGEgaGlnaCBsZXZlbCB0aGUgcHVycG9zZSAod2hhdCBpcyBoYXBwZW5pbmcgYW5kIHdoeSkKK29mIHlvdXIgcGF0Y2gsIGJ1dCBpZiB5b3UgbmVlZCB0byBzdXBwbHkgZXZlbiBtb3JlIGNvbnRleHQsIHlvdSBjYW4gZG8gc28gYmVsb3cKK3RoZSBgLS0tYCBpbiB5b3VyIHBhdGNoLiBUYWtlIHRoZSBleGFtcGxlIGJlbG93LCB3aGljaCB3YXMgZ2VuZXJhdGVkIHdpdGggYGdpdAorZm9ybWF0LXBhdGNoYCBvbiBhIHNpbmdsZSBjb21taXQsIGFuZCB0aGVuIGVkaXRlZCB0byBhZGQgdGhlIGNvbnRlbnQgYmV0d2VlbgordGhlIGAtLS1gIGFuZCB0aGUgZGlmZnN0YXQuCisKKy0tLS0KK0Zyb20gMTM0NWJiYjNmN2FjNzRhYmRlMDQwYzEyZTczNzIwNDY4OWE3MjcyMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUsIDE4IEFwciAyMDE5IDE1OjExOjAyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJFQURNRTogY2hhbmdlIHRoZSBncmFtbWFyCisKK0kgdGhpbmsgaXQgbG9va3MgYmV0dGVyIHRoaXMgd2F5LiBUaGlzIHBhcnQgb2YgdGhlIGNvbW1pdCBtZXNzYWdlIHdpbGwKK2VuZCB1cCBpbiB0aGUgY29tbWl0LWxvZy4KKworU2lnbmVkLW9mZi1ieTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKy0tLQorTGV0J3MgaGF2ZSBhIHdpbGQgZGlzY3Vzc2lvbiBhYm91dCBncmFtbWFyIG9uIHRoZSBtYWlsaW5nIGxpc3QuIFRoaXMKK3BhcnQgb2YgbXkgZW1haWwgd2lsbCBuZXZlciBlbmQgdXAgaW4gdGhlIGNvbW1pdCBsb2cuIEhlcmUgaXMgd2hlcmUgSQorY2FuIGFkZCBhZGRpdGlvbmFsIGNvbnRleHQgdG8gdGhlIG1haWxpbmcgbGlzdCBhYm91dCBteSBpbnRlbnQsIG91dHNpZGUKK29mIHRoZSBjb250ZXh0IG9mIHRoZSBjb21taXQgbG9nLiBUaGlzIHNlY3Rpb24gd2FzIGFkZGVkIGFmdGVyIGBnaXQKK2Zvcm1hdC1wYXRjaGAgd2FzIHJ1biwgYnkgZWRpdGluZyB0aGUgcGF0Y2ggZmlsZSBpbiBhIHRleHQgZWRpdG9yLgorCisgUkVBRE1FLm1kIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCitpbmRleCA4OGYxMjYxODRjLi4zOGRhNTkzYTYwIDEwMDY0NAorLS0tIGEvUkVBRE1FLm1kCisrKysgYi9SRUFETUUubWQKK0BAIC0zLDcgKzMsNyBAQAorIEdpdCAtIGZhc3QsIHNjYWxhYmxlLCBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistR2l0IGlzIGEgZmFzdCwgc2NhbGFibGUsIGRpc3RyaWJ1dGVkIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtIHdpdGggYW4KKytHaXQgaXMgYSBmYXN0LCBzY2FsYWJsZSwgYW5kIGRpc3RyaWJ1dGVkIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtIHdpdGggYW4KKyB1bnVzdWFsbHkgcmljaCBjb21tYW5kIHNldCB0aGF0IHByb3ZpZGVzIGJvdGggaGlnaC1sZXZlbCBvcGVyYXRpb25zCisgYW5kIGZ1bGwgYWNjZXNzIHRvIGludGVybmFscy4KKworLS0KKzIuMjEuMC4zOTIuZ2Y4ZjY3ODcxNTllLWdvb2cKKy0tLS0KKworW1tub3ctd2hhdF1dCis9PSBNeSBQYXRjaCBHb3QgRW1haWxlZCAtIE5vdyBXaGF0PworCitbW3Jldmlld2luZ11dCis9PT0gUmVzcG9uZGluZyB0byBSZXZpZXdzCisKK0FmdGVyIGEgZmV3IGRheXMsIHlvdSB3aWxsIGhvcGVmdWxseSByZWNlaXZlIGEgcmVwbHkgdG8geW91ciBwYXRjaHNldCB3aXRoIHNvbWUKK2NvbW1lbnRzLiBXb29ob28hIE5vdyB5b3UgY2FuIGdldCBiYWNrIHRvIHdvcmsuCisKK0l0J3MgZ29vZCBtYW5uZXJzIHRvIHJlcGx5IHRvIGVhY2ggY29tbWVudCwgbm90aWZ5aW5nIHRoZSByZXZpZXdlciB0aGF0IHlvdSBoYXZlCittYWRlIHRoZSBjaGFuZ2UgcmVxdWVzdGVkLCBmZWVsIHRoZSBvcmlnaW5hbCBpcyBiZXR0ZXIsIG9yIHRoYXQgdGhlIGNvbW1lbnQKK2luc3BpcmVkIHlvdSB0byBkbyBzb21ldGhpbmcgYSBuZXcgd2F5IHdoaWNoIGlzIHN1cGVyaW9yIHRvIGJvdGggdGhlIG9yaWdpbmFsCithbmQgdGhlIHN1Z2dlc3RlZCBjaGFuZ2UuIFRoaXMgd2F5IHJldmlld2VycyBkb24ndCBuZWVkIHRvIGluc3BlY3QgeW91ciB2MiB0bworZmlndXJlIG91dCB3aGV0aGVyIHlvdSBpbXBsZW1lbnRlZCB0aGVpciBjb21tZW50IG9yIG5vdC4KKworSWYgeW91IGFyZSBnb2luZyB0byBwdXNoIGJhY2sgb24gYSBjb21tZW50LCBiZSBwb2xpdGUgYW5kIGV4cGxhaW4gd2h5IHlvdSBmZWVsCit5b3VyIG9yaWdpbmFsIGlzIGJldHRlcjsgYmUgcHJlcGFyZWQgdGhhdCB0aGUgcmV2aWV3ZXIgbWF5IHN0aWxsIGRpc2FncmVlIHdpdGgKK3lvdSwgYW5kIHRoZSByZXN0IG9mIHRoZSBjb21tdW5pdHkgbWF5IHdlaWdoIGluIG9uIG9uZSBzaWRlIG9yIHRoZSBvdGhlci4gQXMKK3dpdGggYWxsIGNvZGUgcmV2aWV3cywgaXQncyBpbXBvcnRhbnQgdG8ga2VlcCBhbiBvcGVuIG1pbmQgdG8gZG9pbmcgc29tZXRoaW5nIGEKK2RpZmZlcmVudCB3YXkgdGhhbiB5b3Ugb3JpZ2luYWxseSBwbGFubmVkOyBvdGhlciByZXZpZXdlcnMgaGF2ZSBhIGRpZmZlcmVudAorcGVyc3BlY3RpdmUgb24gdGhlIHByb2plY3QgdGhhbiB5b3UgZG8sIGFuZCBtYXkgYmUgdGhpbmtpbmcgb2YgYSB2YWxpZCBzaWRlCitlZmZlY3Qgd2hpY2ggaGFkIG5vdCBvY2N1cnJlZCB0byB5b3UuIEl0IGlzIGFsd2F5cyBva2F5IHRvIGFzayBmb3IgY2xhcmlmaWNhdGlvbgoraWYgeW91IGFyZW4ndCBzdXJlIHdoeSBhIGNoYW5nZSB3YXMgc3VnZ2VzdGVkLCBvciB3aGF0IHRoZSByZXZpZXdlciBpcyBhc2tpbmcKK3lvdSB0byBkby4KKworTWFrZSBzdXJlIHlvdXIgZW1haWwgY2xpZW50IGhhcyBhIHBsYWludGV4dCBlbWFpbCBtb2RlIGFuZCBpdCBpcyB0dXJuZWQgb247IHRoZQorR2l0IGxpc3QgcmVqZWN0cyBIVE1MIGVtYWlsLiBQbGVhc2UgYWxzbyBmb2xsb3cgdGhlIG1haWxpbmcgbGlzdCBldGlxdWV0dGUKK291dGxpbmVkIGluIHRoZQoraHR0cHM6Ly9rZXJuZWwuZ29vZ2xlc291cmNlLmNvbS9wdWIvc2NtL2dpdC9naXQvKy90b2RvL01haW50Tm90ZXNbTWFpbnRhaW5lcidzCitOb3RlXSwgd2hpY2ggYXJlIHNpbWlsYXIgdG8gZXRpcXVldHRlIHJ1bGVzIGluIG1vc3Qgb3BlbiBzb3VyY2UgY29tbXVuaXRpZXMKK3N1cnJvdW5kaW5nIGJvdHRvbS1wb3N0aW5nIGFuZCBpbmxpbmUgcmVwbGllcy4KKworV2hlbiB5b3UncmUgbWFraW5nIGNoYW5nZXMgdG8geW91ciBjb2RlLCBpdCBpcyBjbGVhbmVzdCAtIHRoYXQgaXMsIHRoZSByZXN1bHRpbmcKK2NvbW1pdHMgYXJlIGVhc2llc3QgdG8gbG9vayBhdCAtIGlmIHlvdSB1c2UgYGdpdCByZWJhc2UgLWlgIChpbnRlcmFjdGl2ZQorcmViYXNlKS4gVGFrZSBhIGxvb2sgYXQgdGhpcworaHR0cHM6Ly93d3cub3JlaWxseS5jb20vbGlicmFyeS92aWV3L2dpdC1wb2NrZXQtZ3VpZGUvOTc4MTQ0OTMyNzUwNy9jaDEwLmh0bWxbb3ZlcnZpZXddCitmcm9tIE8nUmVpbGx5LiBUaGUgZ2VuZXJhbCBpZGVhIGlzIHRvIG1vZGlmeSBlYWNoIGNvbW1pdCB3aGljaCByZXF1aXJlcyBjaGFuZ2VzOwordGhpcyB3YXksIGluc3RlYWQgb2YgaGF2aW5nIGEgcGF0Y2ggQSB3aXRoIGEgbWlzdGFrZSwgYSBwYXRjaCBCIHdoaWNoIHdhcyBmaW5lCithbmQgcmVxdWlyZWQgbm8gdXBzdHJlYW0gcmV2aWV3cyBpbiB2MSwgYW5kIGEgcGF0Y2ggQyB3aGljaCBmaXhlcyBwYXRjaCBBIGZvcgordjIsIHlvdSBjYW4ganVzdCBzaGlwIGEgdjIgd2l0aCBhIGNvcnJlY3QgcGF0Y2ggQSBhbmQgY29ycmVjdCBwYXRjaCBCLiBUaGlzIGlzCitjaGFuZ2luZyBoaXN0b3J5LCBidXQgc2luY2UgaXQncyBsb2NhbCBoaXN0b3J5IHdoaWNoIHlvdSBoYXZlbid0IHNoYXJlZCB3aXRoCithbnlvbmUsIHRoYXQgaXMgb2theSBmb3Igbm93ISAoTGF0ZXIsIGl0IG1heSBub3QgbWFrZSBzZW5zZSB0byBkbyB0aGlzOyB0YWtlIGEKK2xvb2sgYXQgdGhlIHNlY3Rpb24gYmVsb3cgdGhpcyBvbmUgZm9yIHNvbWUgY29udGV4dC4pCisKK1tbYWZ0ZXItYXBwcm92YWxdXQorPT09IEFmdGVyIFJldmlldyBBcHByb3ZhbAorCitUaGUgR2l0IHByb2plY3QgaGFzIGZvdXIgaW50ZWdyYXRpb24gYnJhbmNoZXM6IGBwdWAsIGBuZXh0YCwgYG1hc3RlcmAsIGFuZAorYG1haW50YC4gWW91ciBjaGFuZ2Ugd2lsbCBiZSBwbGFjZWQgaW50byBgcHVgIGZhaXJseSBlYXJseSBvbiBieSB0aGUgbWFpbnRhaW5lcgord2hpbGUgaXQgaXMgc3RpbGwgaW4gdGhlIHJldmlldyBwcm9jZXNzOyBmcm9tIHRoZXJlLCB3aGVuIGl0IGlzIHJlYWR5IGZvciB3aWRlcgordGVzdGluZywgaXQgd2lsbCBiZSBtZXJnZWQgaW50byBgbmV4dGAuIFBsZW50eSBvZiBlYXJseSB0ZXN0ZXJzIHVzZSBgbmV4dGAgYW5kCittYXkgcmVwb3J0IGlzc3Vlcy4gRXZlbnR1YWxseSwgY2hhbmdlcyBpbiBgbmV4dGAgd2lsbCBtYWtlIGl0IHRvIGBtYXN0ZXJgLAord2hpY2ggaXMgdHlwaWNhbGx5IGNvbnNpZGVyZWQgc3RhYmxlLiBGaW5hbGx5LCB3aGVuIGEgbmV3IHJlbGVhc2UgaXMgY3V0LAorYG1haW50YCBpcyB1c2VkIHRvIGJhc2UgYnVnZml4ZXMgb250by4gQXMgbWVudGlvbmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcworZG9jdW1lbnQsIHlvdSBjYW4gcmVhZCBgRG9jdW1lbnRzL1N1Ym1pdHRpbmdQYXRjaGVzYCBmb3Igc29tZSBtb3JlIGluZm8gYWJvdXQKK3RoZSB1c2Ugb2YgdGhlIHZhcmlvdXMgaW50ZWdyYXRpb24gYnJhbmNoZXMuCisKK0JhY2sgdG8gbm93OiB5b3VyIGNvZGUgaGFzIGJlZW4gbGF1ZGVkIGJ5IHRoZSB1cHN0cmVhbSByZXZpZXdlcnMuIEl0IGlzIHBlcmZlY3QuCitJdCBpcyByZWFkeSB0byBiZSBhY2NlcHRlZC4gWW91IGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZWxzZTsgdGhlIG1haW50YWluZXIKK3dpbGwgbWVyZ2UgeW91ciB0b3BpYyBicmFuY2ggdG8gYG5leHRgIGFuZCBsaWZlIGlzIGdvb2QuCisKK0hvd2V2ZXIsIGlmIHlvdSBkaXNjb3ZlciBpdCBpc24ndCBzbyBwZXJmZWN0IGFmdGVyIHRoaXMgcG9pbnQsIHlvdSBtYXkgbmVlZCB0bwordGFrZSBzb21lIHNwZWNpYWwgc3RlcHMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBhcmUgaW4gdGhlIHByb2Nlc3MuCisKK0lmIHRoZSBtYWludGFpbmVyIGhhcyBhbm5vdW5jZWQgaW4gdGhlICJXaGF0J3MgY29va2luZyBpbiBnaXQuZ2l0IiBlbWFpbCB0aGF0Cit5b3VyIHRvcGljIGlzIG1hcmtlZCBmb3IgYG5leHRgIC0gdGhhdCBpcywgdGhhdCB0aGV5IHBsYW4gdG8gbWVyZ2UgaXQgdG8gYG5leHRgCitidXQgaGF2ZSBub3QgeWV0IGRvbmUgc28gLSB5b3Ugc2hvdWxkIHNlbmQgYW4gZW1haWwgYXNraW5nIHRoZSBtYWludGFpbmVyIHRvCit3YWl0IGEgbGl0dGxlIGxvbmdlcjogIkkndmUgc2VudCB2NCBvZiBteSBzZXJpZXMgYW5kIHlvdSBtYXJrZWQgaXQgZm9yIGBuZXh0YCwKK2J1dCBJIG5lZWQgdG8gY2hhbmdlIHRoaXMgYW5kIHRoYXQgLSBwbGVhc2Ugd2FpdCBmb3IgdjUgYmVmb3JlIHlvdSBtZXJnZSBpdC4iCisKK0lmIHRoZSB0b3BpYyBoYXMgYWxyZWFkeSBiZWVuIG1lcmdlZCB0byBgbmV4dGAsIHJhdGhlciB0aGFuIG1vZGlmeWluZyB5b3VyCitwYXRjaGVzIHdpdGggYGdpdCByZWJhc2UgLWlgLCB5b3Ugc2hvdWxkIG1ha2UgZnVydGhlciBjaGFuZ2VzIGluY3JlbWVudGFsbHkgLQordGhhdCBpcywgd2l0aCBhbm90aGVyIGNvbW1pdCwgYmFzZWQgb24gdG9wIG9mIHRoZSBtYWludGFpbmVyJ3MgdG9waWMgYnJhbmNoIGFzCitkZXRhaWxlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vZ2l0c3Rlci9naXQuIFlvdXIgd29yayBpcyBzdGlsbCBpbiB0aGUgc2FtZSB0b3BpYworYnV0IGlzIG5vdyBpbmNyZW1lbnRhbCwgcmF0aGVyIHRoYW4gYSB3aG9sZXNhbGUgcmV3cml0ZSBvZiB0aGUgdG9waWMgYnJhbmNoLgorCitUaGUgdG9waWMgYnJhbmNoZXMgaW4gdGhlIG1haW50YWluZXIncyBHaXRIdWIgYXJlIG1pcnJvcmVkIGluIEdpdEdpdEdhZGdldCwgc28KK2lmIHlvdSdyZSBzZW5kaW5nIHlvdXIgcmV2aWV3cyBvdXQgdGhhdCB3YXksIHlvdSBzaG91bGQgYmUgc3VyZSB0byBvcGVuIHlvdXIgUFIKK2FnYWluc3QgdGhlIGFwcHJvcHJpYXRlIEdpdEdpdEdhZGdldC9HaXQgYnJhbmNoLgorCitJZiB5b3UncmUgdXNpbmcgYGdpdCBzZW5kLWVtYWlsYCwgeW91IGNhbiB1c2UgaXQgdGhlIHNhbWUgd2F5IGFzIGJlZm9yZSwgYnV0IHlvdQorc2hvdWxkIGdlbmVyYXRlIHlvdXIgZGlmZnMgZnJvbSBgPHRvcGljPi4uPG15YnJhbmNoPmAgYW5kIGJhc2UgeW91ciB3b3JrIG9uCitgPHRvcGljPmAgaW5zdGVhZCBvZiBgbWFzdGVyYC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vTXlGaXJzdE9iamVjdFdhbGsudHh0IGIvRG9jdW1lbnRhdGlvbi9NeUZpcnN0T2JqZWN0V2Fsay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNmMmQxYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vTXlGaXJzdE9iamVjdFdhbGsudHh0CkBAIC0wLDAgKzEsOTAyIEBACis9IE15IEZpcnN0IE9iamVjdCBXYWxrCisKKz09IFdoYXQncyBhbiBPYmplY3QgV2Fsaz8KKworVGhlIG9iamVjdCB3YWxrIGlzIGEga2V5IGNvbmNlcHQgaW4gR2l0IC0gdGhpcyBpcyB0aGUgcHJvY2VzcyB0aGF0IHVuZGVycGlucworb3BlcmF0aW9ucyBsaWtlIG9iamVjdCB0cmFuc2ZlciBhbmQgZnNjay4gQmVnaW5uaW5nIGZyb20gYSBnaXZlbiBjb21taXQsIHRoZQorbGlzdCBvZiBvYmplY3RzIGlzIGZvdW5kIGJ5IHdhbGtpbmcgcGFyZW50IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBjb21taXRzIChjb21taXQKK1ggYmFzZWQgb24gY29tbWl0IFcpIGFuZCBjb250YWlubWVudCByZWxhdGlvbnNoaXBzIGJldHdlZW4gb2JqZWN0cyAodHJlZSBZIGlzCitjb250YWluZWQgd2l0aGluIGNvbW1pdCBYLCBhbmQgYmxvYiBaIGlzIGxvY2F0ZWQgd2l0aGluIHRyZWUgWSwgZ2l2aW5nIG91cgord29ya2luZyB0cmVlIGZvciBjb21taXQgWCBzb21ldGhpbmcgbGlrZSBgeS96LnR4dGApLgorCitBIHJlbGF0ZWQgY29uY2VwdCBpcyB0aGUgcmV2aXNpb24gd2Fsaywgd2hpY2ggaXMgZm9jdXNlZCBvbiBjb21taXQgb2JqZWN0cyBhbmQKK3RoZWlyIHBhcmVudCByZWxhdGlvbnNoaXBzIGFuZCBkb2VzIG5vdCBkZWx2ZSBpbnRvIG90aGVyIG9iamVjdCB0eXBlcy4gVGhlCityZXZpc2lvbiB3YWxrIGlzIHVzZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBgZ2l0IGxvZ2AuCisKKz09PSBSZWxhdGVkIFJlYWRpbmcKKworLSBgRG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC50eHRgIHVuZGVyICJIYWNraW5nIEdpdCIgY29udGFpbnMgc29tZSBjb3ZlcmFnZSBvZgorICB0aGUgcmV2aXNpb24gd2Fsa2VyIGluIGl0cyB2YXJpb3VzIGluY2FybmF0aW9ucy4KKy0gYHJldmlzaW9uLmhgCistIGh0dHBzOi8vZWFnYWluLm5ldC9hcnRpY2xlcy9naXQtZm9yLWNvbXB1dGVyLXNjaWVudGlzdHMvW0dpdCBmb3IgQ29tcHV0ZXIgU2NpZW50aXN0c10KKyAgZ2l2ZXMgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSB0eXBlcyBvZiBvYmplY3RzIGluIEdpdCBhbmQgd2hhdCB5b3VyIG9iamVjdAorICB3YWxrIGlzIHJlYWxseSBkZXNjcmliaW5nLgorCis9PSBTZXR0aW5nIFVwCisKK0NyZWF0ZSBhIG5ldyBicmFuY2ggZnJvbSBgbWFzdGVyYC4KKworLS0tLQorZ2l0IGNoZWNrb3V0IC1iIHJldndhbGsgb3JpZ2luL21hc3RlcgorLS0tLQorCitXZSdsbCBwdXQgb3VyIGZpZGRsaW5nIGludG8gYSBuZXcgY29tbWFuZC4gRm9yIGZ1biwgbGV0J3MgbmFtZSBpdCBgZ2l0IHdhbGtlbmAuCitPcGVuIHVwIGEgbmV3IGZpbGUgYGJ1aWx0aW4vd2Fsa2VuLmNgIGFuZCBzZXQgdXAgdGhlIGNvbW1hbmQgaGFuZGxlcjoKKworLS0tLQorLyoKKyAqICJnaXQgd2Fsa2VuIgorICoKKyAqIFBhcnQgb2YgdGhlICJNeSBGaXJzdCBPYmplY3QgV2FsayIgdHV0b3JpYWwuCisgKi8KKworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKworaW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJdHJhY2VfcHJpbnRmKF8oImNtZF93YWxrZW4gaW5jb21pbmcuLi5cbiIpKTsKKwlyZXR1cm4gMDsKK30KKy0tLS0KKworTk9URTogYHRyYWNlX3ByaW50ZigpYCBkaWZmZXJzIGZyb20gYHByaW50ZigpYCBpbiB0aGF0IGl0IGNhbiBiZSB0dXJuZWQgb24gb3IKK29mZiBhdCBydW50aW1lLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdHV0b3JpYWwsIHdlIHdpbGwgd3JpdGUgYHdhbGtlbmAgYXMKK3Rob3VnaCBpdCBpcyBpbnRlbmRlZCBmb3IgdXNlIGFzIGEgInBsdW1iaW5nIiBjb21tYW5kOiB0aGF0IGlzLCBhIGNvbW1hbmQgd2hpY2gKK2lzIHVzZWQgcHJpbWFyaWx5IGluIHNjcmlwdHMsIHJhdGhlciB0aGFuIGludGVyYWN0aXZlbHkgYnkgaHVtYW5zIChhICJwb3JjZWxhaW4iCitjb21tYW5kKS4gU28gd2Ugd2lsbCBzZW5kIG91ciBkZWJ1ZyBvdXRwdXQgdG8gYHRyYWNlX3ByaW50ZigpYCBpbnN0ZWFkLiBXaGVuCitydW5uaW5nLCBlbmFibGUgdHJhY2Ugb3V0cHV0IGJ5IHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBHSVRfVFJBQ0VgLgorCitBZGQgdXNhZ2UgdGV4dCBhbmQgYC1oYCBoYW5kbGluZywgbGlrZSBhbGwgc3ViY29tbWFuZHMgc2hvdWxkIGNvbnNpc3RlbnRseSBkbworKG91ciB0ZXN0IHN1aXRlIHdpbGwgbm90aWNlIGFuZCBjb21wbGFpbiBpZiB5b3UgZmFpbCB0byBkbyBzbykuCisKKy0tLS0KK2ludCBjbWRfd2Fsa2VuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKiBjb25zdCB3YWxrZW5fdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCB3YWxrZW4iKSwKKwkJTlVMTCwKKwl9CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHdhbGtlbl91c2FnZSwgMCk7CisKKwkuLi4KK30KKy0tLS0KKworQWxzbyBhZGQgdGhlIHJlbGV2YW50IGxpbmUgaW4gYGJ1aWx0aW4uaGAgbmVhciBgY21kX3doYXRjaGFuZ2VkKClgOgorCistLS0tCitpbnQgY21kX3dhbGtlbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CistLS0tCisKK0luY2x1ZGUgdGhlIGNvbW1hbmQgaW4gYGdpdC5jYCBpbiBgY29tbWFuZHNbXWAgbmVhciB0aGUgZW50cnkgZm9yIGB3aGF0Y2hhbmdlZGAsCittYWludGFpbmluZyBhbHBoYWJldGljYWwgb3JkZXJpbmc6CisKKy0tLS0KK3sgIndhbGtlbiIsIGNtZF93YWxrZW4sIFJVTl9TRVRVUCB9LAorLS0tLQorCitBZGQgaXQgdG8gdGhlIGBNYWtlZmlsZWAgbmVhciB0aGUgbGluZSBmb3IgYGJ1aWx0aW4vd29ya3RyZWUub2A6CisKKy0tLS0KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3dhbGtlbi5vCistLS0tCisKK0J1aWxkIGFuZCB0ZXN0IG91dCB5b3VyIGNvbW1hbmQsIHdpdGhvdXQgZm9yZ2V0dGluZyB0byBlbnN1cmUgdGhlIGBERVZFTE9QRVJgCitmbGFnIGlzIHNldCwgYW5kIHdpdGggYEdJVF9UUkFDRWAgZW5hYmxlZCBzbyB0aGUgZGVidWcgb3V0cHV0IGNhbiBiZSBzZWVuOgorCistLS0tCiskIGVjaG8gREVWRUxPUEVSPTEgPj5jb25maWcubWFrCiskIG1ha2UKKyQgR0lUX1RSQUNFPTEgLi9iaW4td3JhcHBlcnMvZ2l0IHdhbGtlbgorLS0tLQorCitOT1RFOiBGb3IgYSBtb3JlIGV4aGF1c3RpdmUgb3ZlcnZpZXcgb2YgdGhlIG5ldyBjb21tYW5kIHByb2Nlc3MsIHRha2UgYSBsb29rIGF0CitgRG9jdW1lbnRhdGlvbi9NeUZpcnN0Q29udHJpYnV0aW9uLnR4dGAuCisKK05PVEU6IEEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGNhbiBiZSBmb3VuZCBhdAoraHR0cHM6Ly9naXRodWIuY29tL25hc2FtdWZmaW4vZ2l0L3RyZWUvcmV2d2Fsay4KKworPT09IGBzdHJ1Y3QgcmV2X2NtZGxpbmVfaW5mb2AKKworVGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCByZXZfY21kbGluZV9pbmZvYCBjYW4gYmUgZm91bmQgaW4gYHJldmlzaW9uLmhgLgorCitUaGlzIHN0cnVjdCBpcyBjb250YWluZWQgd2l0aGluIHRoZSBgcmV2X2luZm9gIHN0cnVjdCBhbmQgaXMgdXNlZCB0byByZWZsZWN0CitwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIG92ZXIgdGhlIENMSS4KKworYG5yYCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgYHJldl9jbWRsaW5lX2VudHJ5YCBwcmVzZW50IGluIHRoZSBhcnJheS4KKworYGFsbG9jYCBpcyB1c2VkIGJ5IHRoZSBgQUxMT0NfR1JPV2AgbWFjcm8uIENoZWNrIGBjYWNoZS5oYCAtIHRoaXMgdmFyaWFibGUgaXMKK3VzZWQgdG8gdHJhY2sgdGhlIGFsbG9jYXRlZCBzaXplIG9mIHRoZSBsaXN0LgorCitQZXIgZW50cnksIHdlIGZpbmQ6CisKK2BpdGVtYCBpcyB0aGUgb2JqZWN0IHByb3ZpZGVkIHVwb24gd2hpY2ggdG8gYmFzZSB0aGUgb2JqZWN0IHdhbGsuIEl0ZW1zIGluIEdpdAorY2FuIGJlIGJsb2JzLCB0cmVlcywgY29tbWl0cywgb3IgdGFncy4gKFNlZSBgRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC0yLnR4dGAuKQorCitgbmFtZWAgaXMgdGhlIG9iamVjdCBJRCAoT0lEKSBvZiB0aGUgb2JqZWN0IC0gYSBoZXggc3RyaW5nIHlvdSBtYXkgYmUgZmFtaWxpYXIKK3dpdGggZnJvbSB1c2luZyBHaXQgdG8gb3JnYW5pemUgeW91ciBzb3VyY2UgaW4gdGhlIHBhc3QuIENoZWNrIHRoZSB0dXRvcmlhbAorbWVudGlvbmVkIGFib3ZlIHRvd2FyZHMgdGhlIHRvcCBmb3IgYSBkaXNjdXNzaW9uIG9mIHdoZXJlIHRoZSBPSUQgY2FuIGNvbWUKK2Zyb20uCisKK2B3aGVuY2VgIGluZGljYXRlcyBzb21lIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdG8gZG8gd2l0aCB0aGUgcGFyZW50cyBvZiB0aGUKK3NwZWNpZmllZCBvYmplY3QuIFdlJ2xsIGV4cGxvcmUgdGhpcyBmbGFnIG1vcmUgbGF0ZXIgb247IHRha2UgYSBsb29rIGF0CitgRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0YCB0byBnZXQgYW4gaWRlYSBvZiB3aGF0IGNvdWxkIHNldCB0aGUgYHdoZW5jZWAKK3ZhbHVlLgorCitgZmxhZ3NgIGFyZSB1c2VkIHRvIGhpbnQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmV2aXNpb24gd2FsayBhbmQgYXJlIHRoZSBmaXJzdAorYmxvY2sgdW5kZXIgdGhlIGAjaW5jbHVkZWBzIGluIGByZXZpc2lvbi5oYC4gVGhlIG1vc3QgbGlrZWx5IG9uZXMgdG8gYmUgc2V0IGluCit0aGUgYHJldl9jbWRsaW5lX2luZm9gIGFyZSBgVU5JTlRFUkVTVElOR2AgYW5kIGBCT1RUT01gLCBidXQgdGhlc2Ugc2FtZSBmbGFncworY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSB3YWxrLCBhcyB3ZWxsLgorCis9PT0gYHN0cnVjdCByZXZfaW5mb2AKKworVGhpcyBvbmUgaXMgcXVpdGUgYSBiaXQgbG9uZ2VyLCBhbmQgbWFueSBmaWVsZHMgYXJlIG9ubHkgdXNlZCBkdXJpbmcgdGhlIHdhbGsKK2J5IGByZXZpc2lvbi5jYCAtIG5vdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE1vc3Qgb2YgdGhlIGNvbmZpZ3VyYWJsZSBmbGFncyBpbgorYHN0cnVjdCByZXZfaW5mb2AgaGF2ZSBhIG1pcnJvciBpbiBgRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dGAuIEl0J3MgYQorZ29vZCBpZGVhIHRvIHRha2Ugc29tZSB0aW1lIGFuZCByZWFkIHRocm91Z2ggdGhhdCBkb2N1bWVudC4KKworPT0gQmFzaWMgQ29tbWl0IFdhbGsKKworRmlyc3QsIGxldCdzIHNlZSBpZiB3ZSBjYW4gcmVwbGljYXRlIHRoZSBvdXRwdXQgb2YgYGdpdCBsb2cgLS1vbmVsaW5lYC4gV2UnbGwKK3JlZmVyIGJhY2sgdG8gdGhlIGltcGxlbWVudGF0aW9uIGZyZXF1ZW50bHkgdG8gZGlzY292ZXIgbm9ybXMgd2hlbiBwZXJmb3JtaW5nCithbiBvYmplY3Qgd2FsayBvZiBvdXIgb3duLgorCitUbyBkbyBzbywgd2UnbGwgZmlyc3QgZmluZCBhbGwgdGhlIGNvbW1pdHMsIGluIG9yZGVyLCB3aGljaCBwcmVjZWRlZCB0aGUgY3VycmVudAorY29tbWl0LiBXZSdsbCBleHRyYWN0IHRoZSBuYW1lIGFuZCBzdWJqZWN0IG9mIHRoZSBjb21taXQgZnJvbSBlYWNoLgorCitJZGVhbGx5LCB3ZSB3aWxsIGFsc28gYmUgYWJsZSB0byBmaW5kIG91dCB3aGljaCBvbmVzIGFyZSBjdXJyZW50bHkgYXQgdGhlIHRpcCBvZgordmFyaW91cyBicmFuY2hlcy4KKworPT09IFNldHRpbmcgVXAKKworUHJlcGFyaW5nIGZvciB5b3VyIG9iamVjdCB3YWxrIGhhcyBzb21lIGRpc3RpbmN0IHN0YWdlcy4KKworMS4gUGVyZm9ybSBkZWZhdWx0IHNldHVwIGZvciB0aGlzIG1vZGUsIGFuZCBvdGhlcnMgd2hpY2ggbWF5IGJlIGludm9rZWQuCisyLiBDaGVjayBjb25maWd1cmF0aW9uIGZpbGVzIGZvciByZWxldmFudCBzZXR0aW5ncy4KKzMuIFNldCB1cCB0aGUgYHJldl9pbmZvYCBzdHJ1Y3QuCis0LiBUd2VhayB0aGUgaW5pdGlhbGl6ZWQgYHJldl9pbmZvYCB0byBzdWl0IHRoZSBjdXJyZW50IHdhbGsuCis1LiBQcmVwYXJlIHRoZSBgcmV2X2luZm9gIGZvciB0aGUgd2Fsay4KKzYuIEl0ZXJhdGUgb3ZlciB0aGUgb2JqZWN0cywgcHJvY2Vzc2luZyBlYWNoIG9uZS4KKworPT09PSBEZWZhdWx0IFNldHVwcworCitCZWZvcmUgZXhhbWluaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2hpY2ggbWF5IG1vZGlmeSBjb21tYW5kIGJlaGF2aW9yLCBzZXQgdXAKK2RlZmF1bHQgc3RhdGUgZm9yIHN3aXRjaGVzIG9yIG9wdGlvbnMgeW91ciBjb21tYW5kIG1heSBoYXZlLiBJZiB5b3VyIGNvbW1hbmQKK3V0aWxpemVzIG90aGVyIEdpdCBjb21wb25lbnRzLCBhc2sgdGhlbSB0byBzZXQgdXAgdGhlaXIgZGVmYXVsdCBzdGF0ZXMgYXMgd2VsbC4KK0ZvciBpbnN0YW5jZSwgYGdpdCBsb2dgIHRha2VzIGFkdmFudGFnZSBvZiBgZ3JlcGAgYW5kIGBkaWZmYCBmdW5jdGlvbmFsaXR5LCBzbworaXRzIGBpbml0X2xvZ19kZWZhdWx0cygpYCBzZXRzIGl0cyBvd24gc3RhdGUgKGBkZWNvcmF0aW9uX3N0eWxlYCkgYW5kIGFza3MKK2BncmVwYCBhbmQgYGRpZmZgIHRvIGluaXRpYWxpemUgdGhlbXNlbHZlcyBieSBjYWxsaW5nIGVhY2ggb2YgdGhlaXIKK2luaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4KKworRm9yIG91ciBmaXJzdCBleGFtcGxlIHdpdGhpbiBgZ2l0IHdhbGtlbmAsIHdlIGRvbid0IGludGVuZCB0byB1c2UgYW55IG90aGVyCitjb21wb25lbnRzIHdpdGhpbiBHaXQsIGFuZCB3ZSBkb24ndCBoYXZlIGFueSBjb25maWd1cmF0aW9uIHRvIGRvLiAgSG93ZXZlciwgd2UKK21heSB3YW50IHRvIGFkZCBzb21lIGxhdGVyLCBzbyBmb3Igbm93LCB3ZSBjYW4gYWRkIGFuIGVtcHR5IHBsYWNlaG9sZGVyLiBDcmVhdGUKK2EgbmV3IGZ1bmN0aW9uIGluIGBidWlsdGluL3dhbGtlbi5jYDoKKworLS0tLQorc3RhdGljIHZvaWQgaW5pdF93YWxrZW5fZGVmYXVsdHModm9pZCkKK3sKKwkvKgorCSAqIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIHNhbWUgY29tcG9uZW50cyBgZ2l0IGxvZ2AgZG9lczsgbGVhdmUgdGhpcworCSAqIGVtcHR5IGZvciBub3cuCisJICovCit9CistLS0tCisKK01ha2Ugc3VyZSB0byBhZGQgYSBsaW5lIGludm9raW5nIGl0IGluc2lkZSBvZiBgY21kX3dhbGtlbigpYC4KKworLS0tLQoraW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW5pdF93YWxrZW5fZGVmYXVsdHMoKTsKK30KKy0tLS0KKworPT09PSBDb25maWd1cmluZyBGcm9tIGAuZ2l0Y29uZmlnYAorCitOZXh0LCB3ZSBzaG91bGQgaGF2ZSBhIGxvb2sgYXQgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKGkuZS4sCitzZXR0aW5ncyByZWFkYWJsZSBhbmQgc2V0dGFibGUgZnJvbSBgZ2l0IGNvbmZpZ2ApLiBUaGlzIGlzIGRvbmUgYnkgcHJvdmlkaW5nIGEKK2NhbGxiYWNrIHRvIGBnaXRfY29uZmlnKClgOyB3aXRoaW4gdGhhdCBjYWxsYmFjaywgeW91IGNhbiBhbHNvIGludm9rZSBtZXRob2RzCitmcm9tIG90aGVyIGNvbXBvbmVudHMgeW91IG1heSBuZWVkIHRoYXQgbmVlZCB0byBpbnRlcmNlcHQgdGhlc2Ugb3B0aW9ucy4gWW91cgorY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIG9uY2UgcGVyIGVhY2ggY29uZmlndXJhdGlvbiB2YWx1ZSB3aGljaCBHaXQga25vd3MgYWJvdXQKKyhnbG9iYWwsIGxvY2FsLCB3b3JrdHJlZSwgZXRjLikuCisKK1NpbWlsYXJseSB0byB0aGUgZGVmYXVsdCB2YWx1ZXMsIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gZG8gaGVyZSB5ZXQKK291cnNlbHZlczsgaG93ZXZlciwgd2Ugc2hvdWxkIGNhbGwgYGdpdF9kZWZhdWx0X2NvbmZpZygpYCBpZiB3ZSBhcmVuJ3QgY2FsbGluZworYW55IG90aGVyIGV4aXN0aW5nIGNvbmZpZyBjYWxsYmFja3MuCisKK0FkZCBhIG5ldyBmdW5jdGlvbiB0byBgYnVpbHRpbi93YWxrZW4uY2A6CisKKy0tLS0KK3N0YXRpYyBpbnQgZ2l0X3dhbGtlbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJLyoKKwkgKiBGb3Igbm93LCB3ZSBkb24ndCBoYXZlIGFueSBjdXN0b20gY29uZmlndXJhdGlvbiwgc28gZmFsbCBiYWNrIHRvCisJICogdGhlIGRlZmF1bHQgY29uZmlnLgorCSAqLworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorLS0tLQorCitNYWtlIHN1cmUgdG8gaW52b2tlIGBnaXRfY29uZmlnKClgIHdpdGggaXQgaW4geW91ciBgY21kX3dhbGtlbigpYDoKKworLS0tLQoraW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJLi4uCisKKwlnaXRfY29uZmlnKGdpdF93YWxrZW5fY29uZmlnLCBOVUxMKTsKKworCS4uLgorfQorLS0tLQorCis9PT09IFNldHRpbmcgVXAgYHJldl9pbmZvYAorCitOb3cgdGhhdCB3ZSd2ZSBnYXRoZXJlZCBleHRlcm5hbCBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zLCBpdCdzIHRpbWUgdG8KK2luaXRpYWxpemUgdGhlIGByZXZfaW5mb2Agb2JqZWN0IHdoaWNoIHdlIHdpbGwgdXNlIHRvIHBlcmZvcm0gdGhlIHdhbGsuIFRoaXMgaXMKK3R5cGljYWxseSBkb25lIGJ5IGNhbGxpbmcgYHJlcG9faW5pdF9yZXZpc2lvbnMoKWAgd2l0aCB0aGUgcmVwb3NpdG9yeSB5b3UgaW50ZW5kCit0byB0YXJnZXQsIGFzIHdlbGwgYXMgdGhlIGBwcmVmaXhgIGFyZ3VtZW50IG9mIGBjbWRfd2Fsa2VuYCBhbmQgeW91ciBgcmV2X2luZm9gCitzdHJ1Y3QuCisKK0FkZCB0aGUgYHN0cnVjdCByZXZfaW5mb2AgYW5kIHRoZSBgcmVwb19pbml0X3JldmlzaW9ucygpYCBjYWxsOgorLS0tLQoraW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJLyogVGhpcyBjYW4gZ28gd2hlcmV2ZXIgeW91IGxpa2UgaW4geW91ciBkZWNsYXJhdGlvbnMuKi8KKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCS4uLgorCisJLyogVGhpcyBzaG91bGQgZ28gYWZ0ZXIgdGhlIGdpdF9jb25maWcoKSBjYWxsLiAqLworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIHByZWZpeCk7CisKKwkuLi4KK30KKy0tLS0KKworPT09PSBUd2Vha2luZyBgcmV2X2luZm9gIEZvciB0aGUgV2FsaworCitXZSdyZSBnZXR0aW5nIGNsb3NlLCBidXQgd2UncmUgc3RpbGwgbm90IHF1aXRlIHJlYWR5IHRvIGdvLiBOb3cgdGhhdCBgcmV2YCBpcworaW5pdGlhbGl6ZWQsIHdlIGNhbiBtb2RpZnkgaXQgdG8gZml0IG91ciBuZWVkcy4gVGhpcyBpcyB1c3VhbGx5IGRvbmUgd2l0aGluIGEKK2hlbHBlciBmb3IgY2xhcml0eSwgc28gbGV0J3MgYWRkIG9uZToKKworLS0tLQorc3RhdGljIHZvaWQgZmluYWxfcmV2X2luZm9fc2V0dXAoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJLyoKKwkgKiBXZSB3YW50IHRvIG1pbWljIHRoZSBhcHBlYXJhbmNlIG9mIGBnaXQgbG9nIC0tb25lbGluZWAsIHNvIGxldCdzCisJICogZm9yY2Ugb25lbGluZSBmb3JtYXQuCisJICovCisJZ2V0X2NvbW1pdF9mb3JtYXQoIm9uZWxpbmUiLCByZXYpOworCisJLyogU3RhcnQgb3VyIG9iamVjdCB3YWxrIGF0IEhFQUQuICovCisJYWRkX2hlYWRfdG9fcGVuZGluZyhyZXYpOworfQorLS0tLQorCitbTk9URV0KKz09PT0KK0luc3RlYWQgb2YgdXNpbmcgdGhlIHNob3J0aGFuZCBgYWRkX2hlYWRfdG9fcGVuZGluZygpYCwgeW91IGNvdWxkIGRvCitzb21ldGhpbmcgbGlrZSB0aGlzOgorLS0tLQorCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgb3B0OworCisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwlvcHQuZGVmID0gIkhFQUQiOworCW9wdC5yZXZhcmdfb3B0ID0gUkVWQVJHX0NPTU1JVFRJU0g7CisJc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsIHJldiwgJm9wdCk7CistLS0tCitVc2luZyBhIGBzZXR1cF9yZXZpc2lvbl9vcHRgIGdpdmVzIHlvdSBmaW5lciBjb250cm9sIG92ZXIgeW91ciB3YWxrJ3Mgc3RhcnRpbmcKK3BvaW50LgorPT09PQorCitUaGVuIGxldCdzIGludm9rZSBgZmluYWxfcmV2X2luZm9fc2V0dXAoKWAgYWZ0ZXIgdGhlIGNhbGwgdG8KK2ByZXBvX2luaXRfcmV2aXNpb25zKClgOgorCistLS0tCitpbnQgY21kX3dhbGtlbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwkuLi4KKworCWZpbmFsX3Jldl9pbmZvX3NldHVwKCZyZXYpOworCisJLi4uCit9CistLS0tCisKK0xhdGVyLCB3ZSBtYXkgd2lzaCB0byBhZGQgbW9yZSBhcmd1bWVudHMgdG8gYGZpbmFsX3Jldl9pbmZvX3NldHVwKClgLiBCdXQgZm9yCitub3csIHRoaXMgaXMgYWxsIHdlIG5lZWQuCisKKz09PT0gUHJlcGFyaW5nIGByZXZfaW5mb2AgRm9yIHRoZSBXYWxrCisKK05vdyB0aGF0IGByZXZgIGlzIGFsbCBpbml0aWFsaXplZCBhbmQgY29uZmlndXJlZCwgd2UndmUgZ290IG9uZSBtb3JlIHNldHVwIHN0ZXAKK2JlZm9yZSB3ZSBnZXQgcm9sbGluZy4gV2UgY2FuIGRvIHRoaXMgaW4gYSBoZWxwZXIsIHdoaWNoIHdpbGwgYm90aCBwcmVwYXJlIHRoZQorYHJldl9pbmZvYCBmb3IgdGhlIHdhbGssIGFuZCBwZXJmb3JtIHRoZSB3YWxrIGl0c2VsZi4gTGV0J3Mgc3RhcnQgdGhlIGhlbHBlcgord2l0aCB0aGUgY2FsbCB0byBgcHJlcGFyZV9yZXZpc2lvbl93YWxrKClgLCB3aGljaCBjYW4gcmV0dXJuIGFuIGVycm9yIHdpdGhvdXQKK2R5aW5nIG9uIGl0cyBvd246CisKKy0tLS0KK3N0YXRpYyB2b2lkIHdhbGtlbl9jb21taXRfd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldikpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKK30KKy0tLS0KKworTk9URTogYGRpZSgpYCBwcmludHMgdG8gYHN0ZGVycmAgYW5kIGV4aXRzIHRoZSBwcm9ncmFtLiBTaW5jZSBpdCB3aWxsIHByaW50IHRvCitgc3RkZXJyYCBpdCdzIGxpa2VseSB0byBiZSBzZWVuIGJ5IGEgaHVtYW4sIHNvIHdlIHdpbGwgbG9jYWxpemUgaXQuCisKKz09PT0gUGVyZm9ybWluZyB0aGUgV2FsayEKKworRmluYWxseSEgV2UgYXJlIHJlYWR5IHRvIGJlZ2luIHRoZSB3YWxrIGl0c2VsZi4gTm93IHdlIGNhbiBzZWUgdGhhdCBgcmV2X2luZm9gCitjYW4gYWxzbyBiZSB1c2VkIGFzIGFuIGl0ZXJhdG9yOyB3ZSBtb3ZlIHRvIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIHdhbGsgYnkgdXNpbmcKK2BnZXRfcmV2aXNpb24oKWAgcmVwZWF0ZWRseS4gQWRkIHRoZSBsaXN0ZWQgdmFyaWFibGUgZGVjbGFyYXRpb25zIGF0IHRoZSB0b3AgYW5kCit0aGUgd2FsayBsb29wIGJlbG93IHRoZSBgcHJlcGFyZV9yZXZpc2lvbl93YWxrKClgIGNhbGwgd2l0aGluIHlvdXIKK2B3YWxrZW5fY29tbWl0X3dhbGsoKWA6CisKKy0tLS0KK3N0YXRpYyB2b2lkIHdhbGtlbl9jb21taXRfd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IHN0cmJ1ZiBwcmV0dHlidWYgPSBTVFJCVUZfSU5JVDsKKworCS4uLgorCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ocmV2KSkpIHsKKwkJc3RyYnVmX3Jlc2V0KCZwcmV0dHlidWYpOworCQlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9PTkVMSU5FLCBjb21taXQsICZwcmV0dHlidWYpOworCQlwdXRzKHByZXR0eWJ1Zi5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmcHJldHR5YnVmKTsKK30KKy0tLS0KKworTk9URTogYHB1dHMoKWAgcHJpbnRzIGEgYGNoYXIqYCB0byBgc3Rkb3V0YC4gU2luY2UgdGhpcyBpcyB0aGUgcGFydCBvZiB0aGUKK2NvbW1hbmQgd2UgZXhwZWN0IHRvIGJlIG1hY2hpbmUtcGFyc2VkLCB3ZSdyZSBzZW5kaW5nIGl0IGRpcmVjdGx5IHRvIHN0ZG91dC4KKworR2l2ZSBpdCBhIHNob3QuCisKKy0tLS0KKyQgbWFrZQorJCAuL2Jpbi13cmFwcGVycy9naXQgd2Fsa2VuCistLS0tCisKK1lvdSBzaG91bGQgc2VlIGFsbCBvZiB0aGUgc3ViamVjdCBsaW5lcyBvZiBhbGwgdGhlIGNvbW1pdHMgaW4KK3lvdXIgdHJlZSdzIGhpc3RvcnksIGluIG9yZGVyLCBlbmRpbmcgd2l0aCB0aGUgaW5pdGlhbCBjb21taXQsICJJbml0aWFsIHJldmlzaW9uCitvZiAiZ2l0IiwgdGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsIi4gQ29uZ3JhdHVsYXRpb25zISBZb3UndmUgd3JpdHRlbgoreW91ciBmaXJzdCByZXZpc2lvbiB3YWxrLiBZb3UgY2FuIHBsYXkgd2l0aCBwcmludGluZyBzb21lIGFkZGl0aW9uYWwgZmllbGRzCitmcm9tIGVhY2ggY29tbWl0IGlmIHlvdSdyZSBjdXJpb3VzOyBoYXZlIGEgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbgorYGNvbW1pdC5oYC4KKworPT09IEFkZGluZyBhIEZpbHRlcgorCitOZXh0LCBsZXQncyB0cnkgdG8gZmlsdGVyIHRoZSBjb21taXRzIHdlIHNlZSBiYXNlZCBvbiB0aGVpciBhdXRob3IuIFRoaXMgaXMKK2VxdWl2YWxlbnQgdG8gcnVubmluZyBgZ2l0IGxvZyAtLWF1dGhvcj08cGF0dGVybj5gLiBXZSBjYW4gYWRkIGEgZmlsdGVyIGJ5Cittb2RpZnlpbmcgYHJldl9pbmZvLmdyZXBfZmlsdGVyYCwgd2hpY2ggaXMgYSBgc3RydWN0IGdyZXBfb3B0YC4KKworRmlyc3Qgc29tZSBzZXR1cC4gQWRkIGBpbml0X2dyZXBfZGVmYXVsdHMoKWAgdG8gYGluaXRfd2Fsa2VuX2RlZmF1bHRzKClgIGFuZCBhZGQKK2BncmVwX2NvbmZpZygpYCB0byBgZ2l0X3dhbGtlbl9jb25maWcoKWA6CisKKy0tLS0KK3N0YXRpYyB2b2lkIGluaXRfd2Fsa2VuX2RlZmF1bHRzKHZvaWQpCit7CisJaW5pdF9ncmVwX2RlZmF1bHRzKHRoZV9yZXBvc2l0b3J5KTsKK30KKworLi4uCisKK3N0YXRpYyBpbnQgZ2l0X3dhbGtlbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJZ3JlcF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorLS0tLQorCitOZXh0LCB3ZSBjYW4gbW9kaWZ5IHRoZSBgZ3JlcF9maWx0ZXJgLiBUaGlzIGlzIGRvbmUgd2l0aCBjb252ZW5pZW5jZSBmdW5jdGlvbnMKK2ZvdW5kIGluIGBncmVwLmhgLiBGb3IgZnVuLCB3ZSdyZSBmaWx0ZXJpbmcgdG8gb25seSBjb21taXRzIGZyb20gZm9sa3MgdXNpbmcgYQorYGdtYWlsLmNvbWAgZW1haWwgYWRkcmVzcyAtIGEgbm90LXZlcnktcHJlY2lzZSBndWVzcyBhdCB3aG8gbWF5IGJlIHdvcmtpbmcgb24KK0dpdCBhcyBhIGhvYmJ5LiBTaW5jZSB3ZSdyZSBjaGVja2luZyB0aGUgYXV0aG9yLCB3aGljaCBpcyBhIHNwZWNpZmljIGxpbmUgaW4gdGhlCitoZWFkZXIsIHdlJ2xsIHVzZSB0aGUgYGFwcGVuZF9oZWFkZXJfZ3JlcF9wYXR0ZXJuKClgIGhlbHBlci4gV2UgY2FuIHVzZQordGhlIGBlbnVtIGdyZXBfaGVhZGVyX2ZpZWxkYCB0byBpbmRpY2F0ZSB3aGljaCBwYXJ0IG9mIHRoZSBjb21taXQgaGVhZGVyIHdlIHdhbnQKK3RvIHNlYXJjaC4KKworSW4gYGZpbmFsX3Jldl9pbmZvX3NldHVwKClgLCBhZGQgeW91ciBmaWx0ZXIgbGluZToKKworLS0tLQorc3RhdGljIHZvaWQgZmluYWxfcmV2X2luZm9fc2V0dXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQljb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCS4uLgorCisJYXBwZW5kX2hlYWRlcl9ncmVwX3BhdHRlcm4oJnJldi0+Z3JlcF9maWx0ZXIsIEdSRVBfSEVBREVSX0FVVEhPUiwKKwkJImdtYWlsIik7CisJY29tcGlsZV9ncmVwX3BhdHRlcm5zKCZyZXYtPmdyZXBfZmlsdGVyKTsKKworCS4uLgorfQorLS0tLQorCitgYXBwZW5kX2hlYWRlcl9ncmVwX3BhdHRlcm4oKWAgYWRkcyB5b3VyIG5ldyAiZ21haWwiIHBhdHRlcm4gdG8gYHJldl9pbmZvYCwgYnV0CitpdCB3b24ndCB3b3JrIHVubGVzcyB3ZSBjb21waWxlIGl0IHdpdGggYGNvbXBpbGVfZ3JlcF9wYXR0ZXJucygpYC4KKworTk9URTogSWYgeW91IGFyZSB1c2luZyBgc2V0dXBfcmV2aXNpb25zKClgIChmb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBwYXNzaW5nIGEKK2BzZXR1cF9yZXZpc2lvbl9vcHRgIGluc3RlYWQgb2YgdXNpbmcgYGFkZF9oZWFkX3RvX3BlbmRpbmcoKWApLCB5b3UgZG9uJ3QgbmVlZAordG8gY2FsbCBgY29tcGlsZV9ncmVwX3BhdHRlcm5zKClgIGJlY2F1c2UgYHNldHVwX3JldmlzaW9ucygpYCBjYWxscyBpdCBmb3IgeW91LgorCitOT1RFOiBXZSBjb3VsZCBhZGQgdGhlIHNhbWUgZmlsdGVyIHZpYSB0aGUgYGFwcGVuZF9ncmVwX3BhdHRlcm4oKWAgaGVscGVyIGlmIHdlCit3YW50ZWQgdG8sIGJ1dCBgYXBwZW5kX2hlYWRlcl9ncmVwX3BhdHRlcm4oKWAgYWRkcyB0aGUgYGVudW0gZ3JlcF9jb250ZXh0YCBhbmQKK2BlbnVtIGdyZXBfcGF0X3Rva2VuYCBmb3IgdXMuCisKKz09PSBDaGFuZ2luZyB0aGUgT3JkZXIKKworVGhlcmUgYXJlIGEgZmV3IHdheXMgdGhhdCB3ZSBjYW4gY2hhbmdlIHRoZSBvcmRlciBvZiB0aGUgY29tbWl0cyBkdXJpbmcgYQorcmV2aXNpb24gd2Fsay4gRmlyc3RseSwgd2UgY2FuIHVzZSB0aGUgYGVudW0gcmV2X3NvcnRfb3JkZXJgIHRvIGNob29zZSBmcm9tIHNvbWUKK3R5cGljYWwgb3JkZXJpbmdzLgorCitgdG9wb19vcmRlcmAgaXMgdGhlIHNhbWUgYXMgYGdpdCBsb2cgLS10b3BvLW9yZGVyYDogd2UgYXZvaWQgc2hvd2luZyBhIHBhcmVudAorYmVmb3JlIGFsbCBvZiBpdHMgY2hpbGRyZW4gaGF2ZSBiZWVuIHNob3duLCBhbmQgd2UgYXZvaWQgbWl4aW5nIGNvbW1pdHMgd2hpY2gKK2FyZSBpbiBkaWZmZXJlbnQgbGluZXMgb2YgaGlzdG9yeS4gKGBnaXQgaGVscCBsb2dgJ3Mgc2VjdGlvbiBvbiBgLS10b3BvLW9yZGVyYAoraGFzIGEgdmVyeSBuaWNlIGRpYWdyYW0gdG8gaWxsdXN0cmF0ZSB0aGlzLikKKworTGV0J3Mgc2VlIHdoYXQgaGFwcGVucyB3aGVuIHdlIHJ1biB3aXRoIGBSRVZfU09SVF9CWV9DT01NSVRfREFURWAgYXMgb3Bwb3NlZCB0bworYFJFVl9TT1JUX0JZX0FVVEhPUl9EQVRFYC4gQWRkIHRoZSBmb2xsb3dpbmc6CisKKy0tLS0KK3N0YXRpYyB2b2lkIGZpbmFsX3Jldl9pbmZvX3NldHVwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwkuLi4KKworCXJldi0+dG9wb19vcmRlciA9IDE7CisJcmV2LT5zb3J0X29yZGVyID0gUkVWX1NPUlRfQllfQ09NTUlUX0RBVEU7CisKKwkuLi4KK30KKy0tLS0KKworTGV0J3Mgb3V0cHV0IHRoaXMgaW50byBhIGZpbGUgc28gd2UgY2FuIGVhc2lseSBkaWZmIGl0IHdpdGggdGhlIHdhbGsgc29ydGVkIGJ5CithdXRob3IgZGF0ZS4KKworLS0tLQorJCBtYWtlCiskIC4vYmluLXdyYXBwZXJzL2dpdCB3YWxrZW4gPiBjb21taXQtZGF0ZS50eHQKKy0tLS0KKworVGhlbiwgbGV0J3Mgc29ydCBieSBhdXRob3IgZGF0ZSBhbmQgcnVuIGl0IGFnYWluLgorCistLS0tCitzdGF0aWMgdm9pZCBmaW5hbF9yZXZfaW5mb19zZXR1cChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCWNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJLi4uCisKKwlyZXYtPnRvcG9fb3JkZXIgPSAxOworCXJldi0+c29ydF9vcmRlciA9IFJFVl9TT1JUX0JZX0FVVEhPUl9EQVRFOworCisJLi4uCit9CistLS0tCisKKy0tLS0KKyQgbWFrZQorJCAuL2Jpbi13cmFwcGVycy9naXQgd2Fsa2VuID4gYXV0aG9yLWRhdGUudHh0CistLS0tCisKK0ZpbmFsbHksIGNvbXBhcmUgdGhlIHR3by4gVGhpcyBpcyBhIGxpdHRsZSBsZXNzIGhlbHBmdWwgd2l0aG91dCBvYmplY3QgbmFtZXMgb3IKK2RhdGVzLCBidXQgaG9wZWZ1bGx5IHdlIGdldCB0aGUgaWRlYS4KKworLS0tLQorJCBkaWZmIC11IGNvbW1pdC1kYXRlLnR4dCBhdXRob3ItZGF0ZS50eHQKKy0tLS0KKworVGhpcyBkaXNwbGF5IGluZGljYXRlcyB0aGF0IGNvbW1pdHMgY2FuIGJlIHJlb3JkZXJlZCBhZnRlciB0aGV5J3JlIHdyaXR0ZW4sIGZvcgorZXhhbXBsZSB3aXRoIGBnaXQgcmViYXNlYC4KKworTGV0J3MgdHJ5IG9uZSBtb3JlIHJlb3JkZXJpbmcgb2YgY29tbWl0cy4gYHJldl9pbmZvYCBleHBvc2VzIGEgYHJldmVyc2VgIGZsYWcuCitTZXQgdGhhdCBmbGFnIHNvbWV3aGVyZSBpbnNpZGUgb2YgYGZpbmFsX3Jldl9pbmZvX3NldHVwKClgOgorCistLS0tCitzdGF0aWMgdm9pZCBmaW5hbF9yZXZfaW5mb19zZXR1cChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJLi4uCisKKwlyZXYtPnJldmVyc2UgPSAxOworCisJLi4uCit9CistLS0tCisKK1J1biB5b3VyIHdhbGsgYWdhaW4gYW5kIG5vdGUgdGhlIGRpZmZlcmVuY2UgaW4gb3JkZXIuIChJZiB5b3UgcmVtb3ZlIHRoZSBncmVwCitwYXR0ZXJuLCB5b3Ugc2hvdWxkIHNlZSB0aGUgbGFzdCBjb21taXQgdGhpcyBjYWxsIGdpdmVzIHlvdSBhcyB5b3VyIGN1cnJlbnQKK0hFQUQuKQorCis9PSBCYXNpYyBPYmplY3QgV2FsaworCitTbyBmYXIgd2UndmUgYmVlbiB3YWxraW5nIG9ubHkgY29tbWl0cy4gQnV0IEdpdCBoYXMgbW9yZSB0eXBlcyBvZiBvYmplY3RzIHRoYW4KK3RoYXQhIExldCdzIHNlZSBpZiB3ZSBjYW4gd2FsayBfYWxsXyBvYmplY3RzLCBhbmQgZmluZCBvdXQgc29tZSBpbmZvcm1hdGlvbgorYWJvdXQgZWFjaCBvbmUuCisKK1dlIGNhbiBiYXNlIG91ciB3b3JrIG9uIGFuIGV4YW1wbGUuIGBnaXQgcGFjay1vYmplY3RzYCBwcmVwYXJlcyBhbGwga2luZHMgb2YKK29iamVjdHMgZm9yIHBhY2tpbmcgaW50byBhIGJpdG1hcCBvciBwYWNrZmlsZS4gVGhlIHdvcmsgd2UgYXJlIGludGVyZXN0ZWQgaW4KK3Jlc2lkZXMgaW4gYGJ1aWx0aW5zL3BhY2stb2JqZWN0cy5jOmdldF9vYmplY3RfbGlzdCgpYDsgZXhhbWluYXRpb24gb2YgdGhhdAorZnVuY3Rpb24gc2hvd3MgdGhhdCB0aGUgYWxsLW9iamVjdCB3YWxrIGlzIGJlaW5nIHBlcmZvcm1lZCBieQorYHRyYXZlcnNlX2NvbW1pdF9saXN0KClgIG9yIGB0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgpYC4gVGhvc2UgdHdvCitmdW5jdGlvbnMgcmVzaWRlIGluIGBsaXN0LW9iamVjdHMuY2A7IGV4YW1pbmluZyB0aGUgc291cmNlIHNob3dzIHRoYXQsIGRlc3BpdGUKK3RoZSBuYW1lLCB0aGVzZSBmdW5jdGlvbnMgdHJhdmVyc2UgYWxsIGtpbmRzIG9mIG9iamVjdHMuIExldCdzIGhhdmUgYSBsb29rIGF0Cit0aGUgYXJndW1lbnRzIHRvIGB0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgpYCwgd2hpY2ggYXJlIGEgc3VwZXJzZXQgb2YgdGhlCithcmd1bWVudHMgdG8gdGhlIHVuZmlsdGVyZWQgdmVyc2lvbi4KKworLSBgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnNgOiBUaGlzIGlzIGEgc3RydWN0IHdoaWNoCisgIHN0b3JlcyBhIGZpbHRlci1zcGVjIGFzIG91dGxpbmVkIGluIGBEb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0YC4KKy0gYHN0cnVjdCByZXZfaW5mbyAqcmV2c2A6IFRoaXMgaXMgdGhlIGByZXZfaW5mb2AgdXNlZCBmb3IgdGhlIHdhbGsuCistIGBzaG93X2NvbW1pdF9mbiBzaG93X2NvbW1pdGA6IEEgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGhhbmRsZSBlYWNoCisgIGluZGl2aWR1YWwgY29tbWl0IG9iamVjdC4KKy0gYHNob3dfb2JqZWN0X2ZuIHNob3dfb2JqZWN0YDogQSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIHVzZWQgdG8gaGFuZGxlIGVhY2gKKyAgbm9uLWNvbW1pdCBvYmplY3QgKHNvIGVhY2ggYmxvYiwgdHJlZSwgb3IgdGFnKS4KKy0gYHZvaWQgKnNob3dfZGF0YWA6IEEgY29udGV4dCBidWZmZXIgd2hpY2ggaXMgcGFzc2VkIGluIHR1cm4gdG8gYHNob3dfY29tbWl0YAorICBhbmQgYHNob3dfb2JqZWN0YC4KKy0gYHN0cnVjdCBvaWRzZXQgKm9taXR0ZWRgOiBBIGxpbmtlZC1saXN0IG9mIG9iamVjdCBJRHMgd2hpY2ggdGhlIHByb3ZpZGVkCisgIGZpbHRlciBjYXVzZWQgdG8gYmUgb21pdHRlZC4KKworSXQgbG9va3MgbGlrZSB0aGlzIGB0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgpYCB1c2VzIGNhbGxiYWNrcyB3ZSBwcm92aWRlCitpbnN0ZWFkIG9mIG5lZWRpbmcgdXMgdG8gY2FsbCBpdCByZXBlYXRlZGx5IG91cnNlbHZlcy4gQ29vbCEgTGV0J3MgYWRkIHRoZQorY2FsbGJhY2tzIGZpcnN0LgorCitGb3IgdGhlIHNha2Ugb2YgdGhpcyB0dXRvcmlhbCwgd2UnbGwgc2ltcGx5IGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgb2YgZWFjaCBraW5kCitvZiBvYmplY3Qgd2UgZmluZC4gQXQgZmlsZSBzY29wZSBpbiBgYnVpbHRpbi93YWxrZW4uY2AgYWRkIHRoZSBmb2xsb3dpbmcKK3RyYWNraW5nIHZhcmlhYmxlczoKKworLS0tLQorc3RhdGljIGludCBjb21taXRfY291bnQ7CitzdGF0aWMgaW50IHRhZ19jb3VudDsKK3N0YXRpYyBpbnQgYmxvYl9jb3VudDsKK3N0YXRpYyBpbnQgdHJlZV9jb3VudDsKKy0tLS0KKworQ29tbWl0cyBhcmUgaGFuZGxlZCBieSBhIGRpZmZlcmVudCBjYWxsYmFjayB0aGFuIG90aGVyIG9iamVjdHM7IGxldCdzIGRvIHRoYXQKK29uZSBmaXJzdDoKKworLS0tLQorc3RhdGljIHZvaWQgd2Fsa2VuX3Nob3dfY29tbWl0KHN0cnVjdCBjb21taXQgKmNtdCwgdm9pZCAqYnVmKQoreworCWNvbW1pdF9jb3VudCsrOworfQorLS0tLQorCitUaGUgYGNtdGAgYXJndW1lbnQgaXMgZmFpcmx5IHNlbGYtZXhwbGFuYXRvcnkuIEJ1dCBpdCdzIHdvcnRoIG1lbnRpb25pbmcgdGhhdAordGhlIGBidWZgIGFyZ3VtZW50IGlzIGFjdHVhbGx5IHRoZSBjb250ZXh0IGJ1ZmZlciB0aGF0IHdlIGNhbiBwcm92aWRlIHRvIHRoZQordHJhdmVyc2FsIGNhbGxzIC0gYHNob3dfZGF0YWAsIHdoaWNoIHdlIG1lbnRpb25lZCBhIG1vbWVudCBhZ28uCisKK1NpbmNlIHdlIGhhdmUgdGhlIGBzdHJ1Y3QgY29tbWl0YCBvYmplY3QsIHdlIGNhbiBsb29rIGF0IGFsbCB0aGUgc2FtZSBwYXJ0cyB0aGF0Cit3ZSBsb29rZWQgYXQgaW4gb3VyIGVhcmxpZXIgY29tbWl0LW9ubHkgd2Fsay4gRm9yIHRoZSBzYWtlIG9mIHRoaXMgdHV0b3JpYWwsCit0aG91Z2gsIHdlJ2xsIGp1c3QgaW5jcmVtZW50IHRoZSBjb21taXQgY291bnRlciBhbmQgbW92ZSBvbi4KKworVGhlIGNhbGxiYWNrIGZvciBub24tY29tbWl0cyBpcyBhIGxpdHRsZSBkaWZmZXJlbnQsIGFzIHdlJ2xsIG5lZWQgdG8gY2hlY2sKK3doaWNoIGtpbmQgb2Ygb2JqZWN0IHdlJ3JlIGRlYWxpbmcgd2l0aDoKKworLS0tLQorc3RhdGljIHZvaWQgd2Fsa2VuX3Nob3dfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqc3RyLCB2b2lkICpidWYpCit7CisJc3dpdGNoIChvYmotPnR5cGUpIHsKKwljYXNlIE9CSl9UUkVFOgorCQl0cmVlX2NvdW50Kys7CisJCWJyZWFrOworCWNhc2UgT0JKX0JMT0I6CisJCWJsb2JfY291bnQrKzsKKwkJYnJlYWs7CisJY2FzZSBPQkpfVEFHOgorCQl0YWdfY291bnQrKzsKKwkJYnJlYWs7CisJY2FzZSBPQkpfQ09NTUlUOgorCQlCVUcoInVuZXhwZWN0ZWQgY29tbWl0IG9iamVjdCBpbiB3YWxrZW5fc2hvd19vYmplY3RcbiIpOworCWRlZmF1bHQ6CisJCUJVRygidW5leHBlY3RlZCBvYmplY3QgdHlwZSAlcyBpbiB3YWxrZW5fc2hvd19vYmplY3RcbiIsCisJCQl0eXBlX25hbWUob2JqLT50eXBlKSk7CisJfQorfQorLS0tLQorCitBZ2FpbiwgYG9iamAgaXMgZmFpcmx5IHNlbGYtZXhwbGFuYXRvcnksIGFuZCB3ZSBjYW4gZ3Vlc3MgdGhhdCBgYnVmYCBpcyB0aGUgc2FtZQorY29udGV4dCBwb2ludGVyIHRoYXQgYHdhbGtlbl9zaG93X2NvbW1pdCgpYCByZWNlaXZlczogdGhlIGBzaG93X2RhdGFgIGFyZ3VtZW50Cit0byBgdHJhdmVyc2VfY29tbWl0X2xpc3QoKWAgYW5kIGB0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgpYC4gRmluYWxseSwKK2BzdHJgIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QsIHdoaWNoIGVuZHMgdXAgYmVpbmcgc29tZXRoaW5nIGxpa2UKK2Bmb28udHh0YCAoYmxvYiksIGBiYXIvYmF6YCAodHJlZSksIG9yIGB2MS4yLjNgICh0YWcpLgorCitUbyBoZWxwIGFzc3VyZSB1cyB0aGF0IHdlIGFyZW4ndCBkb3VibGUtY291bnRpbmcgY29tbWl0cywgd2UnbGwgaW5jbHVkZSBzb21lCitjb21wbGFpbmluZyBpZiBhIGNvbW1pdCBvYmplY3QgaXMgcm91dGVkIHRocm91Z2ggb3VyIG5vbi1jb21taXQgY2FsbGJhY2s7IHdlJ2xsCithbHNvIGNvbXBsYWluIGlmIHdlIHNlZSBhbiBpbnZhbGlkIG9iamVjdCB0eXBlLiBTaW5jZSB0aG9zZSB0d28gY2FzZXMgc2hvdWxkIGJlCit1bnJlYWNoYWJsZSwgYW5kIHdvdWxkIG9ubHkgY2hhbmdlIGluIHRoZSBldmVudCBvZiBhIHNlbWFudGljIGNoYW5nZSB0byB0aGUgR2l0Citjb2RlYmFzZSwgd2UgY29tcGxhaW4gYnkgdXNpbmcgYEJVRygpYCAtIHdoaWNoIGlzIGEgc2lnbmFsIHRvIGEgZGV2ZWxvcGVyIHRoYXQKK3RoZSBjaGFuZ2UgdGhleSBtYWRlIGNhdXNlZCB1bmludGVuZGVkIGNvbnNlcXVlbmNlcywgYW5kIHRoZSByZXN0IG9mIHRoZQorY29kZWJhc2UgbmVlZHMgdG8gYmUgdXBkYXRlZCB0byB1bmRlcnN0YW5kIHRoYXQgY2hhbmdlLiBgQlVHKClgIGlzIG5vdCBpbnRlbmRlZAordG8gYmUgc2VlbiBieSB0aGUgcHVibGljLCBzbyBpdCBpcyBub3QgbG9jYWxpemVkLgorCitPdXIgbWFpbiBvYmplY3Qgd2FsayBpbXBsZW1lbnRhdGlvbiBpcyBzdWJzdGFudGlhbGx5IGRpZmZlcmVudCBmcm9tIG91ciBjb21taXQKK3dhbGsgaW1wbGVtZW50YXRpb24sIHNvIGxldCdzIG1ha2UgYSBuZXcgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgb2JqZWN0IHdhbGsuIFdlCitjYW4gcGVyZm9ybSBzZXR1cCB3aGljaCBpcyBhcHBsaWNhYmxlIHRvIGFsbCBvYmplY3RzIGhlcmUsIHRvbywgdG8ga2VlcCBzZXBhcmF0ZQorZnJvbSBzZXR1cCB3aGljaCBpcyBhcHBsaWNhYmxlIHRvIGNvbW1pdC1vbmx5IHdhbGtzLgorCitXZSdsbCBzdGFydCBieSBlbmFibGluZyBhbGwgdHlwZXMgb2Ygb2JqZWN0cyBpbiB0aGUgYHN0cnVjdCByZXZfaW5mb2AuICBXZSdsbAorYWxzbyB0dXJuIG9uIGB0cmVlX2Jsb2JzX2luX2NvbW1pdF9vcmRlcmAsIHdoaWNoIG1lYW5zIHRoYXQgd2Ugd2lsbCB3YWxrIGEKK2NvbW1pdCdzIHRyZWUgYW5kIGV2ZXJ5dGhpbmcgaXQgcG9pbnRzIHRvIGltbWVkaWF0ZWx5IGFmdGVyIHdlIGZpbmQgZWFjaCBjb21taXQsCithcyBvcHBvc2VkIHRvIHdhaXRpbmcgZm9yIHRoZSBlbmQgYW5kIHdhbGtpbmcgdGhyb3VnaCBhbGwgdHJlZXMgYWZ0ZXIgdGhlIGNvbW1pdAoraGlzdG9yeSBoYXMgYmVlbiBkaXNjb3ZlcmVkLiBXaXRoIHRoZSBhcHByb3ByaWF0ZSBzZXR0aW5ncyBjb25maWd1cmVkLCB3ZSBhcmUKK3JlYWR5IHRvIGNhbGwgYHByZXBhcmVfcmV2aXNpb25fd2FsaygpYC4KKworLS0tLQorc3RhdGljIHZvaWQgd2Fsa2VuX29iamVjdF93YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXJldi0+dHJlZV9vYmplY3RzID0gMTsKKwlyZXYtPmJsb2Jfb2JqZWN0cyA9IDE7CisJcmV2LT50YWdfb2JqZWN0cyA9IDE7CisJcmV2LT50cmVlX2Jsb2JzX2luX2NvbW1pdF9vcmRlciA9IDE7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldikpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKworCWNvbW1pdF9jb3VudCA9IDA7CisJdGFnX2NvdW50ID0gMDsKKwlibG9iX2NvdW50ID0gMDsKKwl0cmVlX2NvdW50ID0gMDsKKy0tLS0KKworTGV0J3Mgc3RhcnQgYnkgY2FsbGluZyBqdXN0IHRoZSB1bmZpbHRlcmVkIHdhbGsgYW5kIHJlcG9ydGluZyBvdXIgY291bnRzLgorQ29tcGxldGUgeW91ciBpbXBsZW1lbnRhdGlvbiBvZiBgd2Fsa2VuX29iamVjdF93YWxrKClgOgorCistLS0tCisJdHJhdmVyc2VfY29tbWl0X2xpc3QocmV2LCB3YWxrZW5fc2hvd19jb21taXQsIHdhbGtlbl9zaG93X29iamVjdCwgTlVMTCk7CisKKwlwcmludGYoImNvbW1pdHMgJWRcbmJsb2JzICVkXG50YWdzICVkXG50cmVlcyAlZFxuIiwgY29tbWl0X2NvdW50LAorCQlibG9iX2NvdW50LCB0YWdfY291bnQsIHRyZWVfY291bnQpOworfQorLS0tLQorCitOT1RFOiBUaGlzIG91dHB1dCBpcyBpbnRlbmRlZCB0byBiZSBtYWNoaW5lLXBhcnNlZC4gVGhlcmVmb3JlLCB3ZSBhcmUgbm90CitzZW5kaW5nIGl0IHRvIGB0cmFjZV9wcmludGYoKWAsIGFuZCB3ZSBhcmUgbm90IGxvY2FsaXppbmcgaXQgLSB3ZSBuZWVkIHNjcmlwdHMKK3RvIGJlIGFibGUgdG8gY291bnQgb24gdGhlIGZvcm1hdHRpbmcgdG8gYmUgZXhhY3RseSB0aGUgd2F5IGl0IGlzIHNob3duIGhlcmUuCitJZiB3ZSB3ZXJlIGludGVuZGluZyB0aGlzIG91dHB1dCB0byBiZSByZWFkIGJ5IGh1bWFucywgd2Ugd291bGQgbmVlZCB0byBsb2NhbGl6ZQoraXQgd2l0aCBgXygpYC4KKworRmluYWxseSwgd2UnbGwgYXNrIGBjbWRfd2Fsa2VuKClgIHRvIHVzZSB0aGUgb2JqZWN0IHdhbGsgaW5zdGVhZC4gRGlzY3Vzc2luZworY29tbWFuZCBsaW5lIG9wdGlvbnMgaXMgb3V0IG9mIHNjb3BlIGZvciB0aGlzIHR1dG9yaWFsLCBzbyB3ZSdsbCBqdXN0IGhhcmRjb2RlCithIGJyYW5jaCB3ZSBjYW4gY2hhbmdlIGF0IGNvbXBpbGUgdGltZS4gV2hlcmUgeW91IGNhbGwgYGZpbmFsX3Jldl9pbmZvX3NldHVwKClgCithbmQgYHdhbGtlbl9jb21taXRfd2FsaygpYCwgaW5zdGVhZCBicmFuY2ggbGlrZSBzbzoKKworLS0tLQorCWlmICgxKSB7CisJCWFkZF9oZWFkX3RvX3BlbmRpbmcoJnJldik7CisJCXdhbGtlbl9vYmplY3Rfd2FsaygmcmV2KTsKKwl9IGVsc2UgeworCQlmaW5hbF9yZXZfaW5mb19zZXR1cChhcmdjLCBhcmd2LCBwcmVmaXgsICZyZXYpOworCQl3YWxrZW5fY29tbWl0X3dhbGsoJnJldik7CisJfQorLS0tLQorCitOT1RFOiBGb3Igc2ltcGxpY2l0eSwgd2UndmUgYXZvaWRlZCBhbGwgdGhlIGZpbHRlcnMgYW5kIHNvcnRzIHdlIGFwcGxpZWQgaW4KK2BmaW5hbF9yZXZfaW5mb19zZXR1cCgpYCBhbmQgc2ltcGx5IGFkZGVkIGBIRUFEYCB0byBvdXIgcGVuZGluZyBxdWV1ZS4gSWYgeW91Cit3YW50LCB5b3UgY2FuIGNlcnRhaW5seSB1c2UgdGhlIGZpbHRlcnMgd2UgYWRkZWQgYmVmb3JlIGJ5IG1vdmluZworYGZpbmFsX3Jldl9pbmZvX3NldHVwKClgIG91dCBvZiB0aGUgY29uZGl0aW9uYWwgYW5kIHJlbW92aW5nIHRoZSBjYWxsIHRvCitgYWRkX2hlYWRfdG9fcGVuZGluZygpYC4KKworTm93IHdlIGNhbiB0cnkgdG8gcnVuIG91ciBjb21tYW5kISBJdCBzaG91bGQgdGFrZSBub3RpY2VhYmx5IGxvbmdlciB0aGFuIHRoZQorY29tbWl0IHdhbGssIGJ1dCBhbiBleGFtaW5hdGlvbiBvZiB0aGUgb3V0cHV0IHdpbGwgZ2l2ZSB5b3UgYW4gaWRlYSB3aHkuIFlvdXIKK291dHB1dCBzaG91bGQgbG9vayBzaW1pbGFyIHRvIHRoaXMgZXhhbXBsZSwgYnV0IHdpdGggZGlmZmVyZW50IGNvdW50czoKKworLS0tLQorT2JqZWN0IHdhbGsgY29tcGxldGVkLiBGb3VuZCA1NTczMyBjb21taXRzLCAxMDAyNzQgYmxvYnMsIDAgdGFncywgYW5kIDEwNDIxMCB0cmVlcy4KKy0tLS0KKworVGhpcyBtYWtlcyBzZW5zZS4gV2UgaGF2ZSBtb3JlIHRyZWVzIHRoYW4gY29tbWl0cyBiZWNhdXNlIHRoZSBHaXQgcHJvamVjdCBoYXMKK2xvdHMgb2Ygc3ViZGlyZWN0b3JpZXMgd2hpY2ggY2FuIGNoYW5nZSwgcGx1cyBhdCBsZWFzdCBvbmUgdHJlZSBwZXIgY29tbWl0LiBXZQoraGF2ZSBubyB0YWdzIGJlY2F1c2Ugd2Ugc3RhcnRlZCBvbiBhIGNvbW1pdCAoYEhFQURgKSBhbmQgd2hpbGUgdGFncyBjYW4gcG9pbnQgdG8KK2NvbW1pdHMsIGNvbW1pdHMgY2FuJ3QgcG9pbnQgdG8gdGFncy4KKworTk9URTogWW91IHdpbGwgaGF2ZSBkaWZmZXJlbnQgY291bnRzIHdoZW4geW91IHJ1biB0aGlzIHlvdXJzZWxmISBUaGUgbnVtYmVyIG9mCitvYmplY3RzIGdyb3dzIGFsb25nIHdpdGggdGhlIEdpdCBwcm9qZWN0LgorCis9PT0gQWRkaW5nIGEgRmlsdGVyCisKK1RoZXJlIGFyZSBhIGhhbmRmdWwgb2YgZmlsdGVycyB0aGF0IHdlIGNhbiBhcHBseSB0byB0aGUgb2JqZWN0IHdhbGsgbGFpZCBvdXQgaW4KK2BEb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0YC4gVGhlc2UgZmlsdGVycyBhcmUgdHlwaWNhbGx5IHVzZWZ1bCBmb3IKK29wZXJhdGlvbnMgc3VjaCBhcyBjcmVhdGluZyBwYWNrZmlsZXMgb3IgcGVyZm9ybWluZyBhIHBhcnRpYWwgY2xvbmUuIFRoZXkgYXJlCitkZWZpbmVkIGluIGBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaGAuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyB0dXRvcmlhbCB3ZQord2lsbCB1c2UgdGhlICJ0cmVlOjEiIGZpbHRlciwgd2hpY2ggY2F1c2VzIHRoZSB3YWxrIHRvIG9taXQgYWxsIHRyZWVzIGFuZCBibG9icword2hpY2ggYXJlIG5vdCBkaXJlY3RseSByZWZlcmVuY2VkIGJ5IGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gdGhlIGNvbW1pdCBpbgorYHBlbmRpbmdgIHdoZW4gdGhlIHdhbGsgYmVnaW5zLiAoYHBlbmRpbmdgIGlzIHRoZSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggbmVlZCB0bworYmUgdHJhdmVyc2VkIGR1cmluZyBhIHdhbGs7IHlvdSBjYW4gaW1hZ2luZSBhIGJyZWFkdGgtZmlyc3QgdHJlZSB0cmF2ZXJzYWwgdG8KK2hlbHAgdW5kZXJzdGFuZC4gSW4gb3VyIGNhc2UsIHRoYXQgbWVhbnMgd2Ugb21pdCB0cmVlcyBhbmQgYmxvYnMgbm90IGRpcmVjdGx5CityZWZlcmVuY2VkIGJ5IGBIRUFEYCBvciBgSEVBRGAncyBoaXN0b3J5LCBiZWNhdXNlIHdlIGJlZ2luIHRoZSB3YWxrIHdpdGggb25seQorYEhFQURgIGluIHRoZSBgcGVuZGluZ2AgbGlzdC4pCisKK0ZpcnN0LCB3ZSdsbCBuZWVkIHRvIGAjaW5jbHVkZSAibGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmhgIiBhbmQgc2V0IHVwIHRoZQorYHN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnNgIGF0IHRoZSB0b3Agb2YgdGhlIGZ1bmN0aW9uLgorCistLS0tCitzdGF0aWMgdm9pZCB3YWxrZW5fb2JqZWN0X3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyBmaWx0ZXJfb3B0aW9ucyA9IHt9OworCisJLi4uCistLS0tCisKK0ZvciBub3csIHdlIGFyZSBub3QgZ29pbmcgdG8gdHJhY2sgdGhlIG9taXR0ZWQgb2JqZWN0cywgc28gd2UnbGwgcmVwbGFjZSB0aG9zZQorcGFyYW1ldGVycyB3aXRoIGBOVUxMYC4gRm9yIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHksIHdlJ2xsIGFkZCBhIHNpbXBsZQorYnVpbGQtdGltZSBicmFuY2ggdG8gdXNlIG91ciBmaWx0ZXIgb3Igbm90LiBSZXBsYWNlIHRoZSBsaW5lIGNhbGxpbmcKK2B0cmF2ZXJzZV9jb21taXRfbGlzdCgpYCB3aXRoIHRoZSBmb2xsb3dpbmcsIHdoaWNoIHdpbGwgcmVtaW5kIHVzIHdoaWNoIGtpbmQgb2YKK3dhbGsgd2UndmUganVzdCBwZXJmb3JtZWQ6CisKKy0tLS0KKwlpZiAoMCkgeworCQkvKiBVbmZpbHRlcmVkOiAqLworCQl0cmFjZV9wcmludGYoXygiVW5maWx0ZXJlZCBvYmplY3Qgd2Fsay5cbiIpKTsKKwkJdHJhdmVyc2VfY29tbWl0X2xpc3QocmV2LCB3YWxrZW5fc2hvd19jb21taXQsCisJCQkJd2Fsa2VuX3Nob3dfb2JqZWN0LCBOVUxMKTsKKwl9IGVsc2UgeworCQl0cmFjZV9wcmludGYoCisJCQlfKCJGaWx0ZXJlZCBvYmplY3Qgd2FsayB3aXRoIGZpbHRlcnNwZWMgJ3RyZWU6MScuXG4iKSk7CisJCXBhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoJmZpbHRlcl9vcHRpb25zLCAidHJlZToxIik7CisKKwkJdHJhdmVyc2VfY29tbWl0X2xpc3RfZmlsdGVyZWQoJmZpbHRlcl9vcHRpb25zLCByZXYsCisJCQl3YWxrZW5fc2hvd19jb21taXQsIHdhbGtlbl9zaG93X29iamVjdCwgTlVMTCwgTlVMTCk7CisJfQorLS0tLQorCitgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9uc2AgaXMgdXN1YWxseSBidWlsdCBkaXJlY3RseSBmcm9tIGEgY29tbWFuZAorbGluZSBhcmd1bWVudCwgc28gdGhlIG1vZHVsZSBwcm92aWRlcyBhbiBlYXN5IHdheSB0byBidWlsZCBvbmUgZnJvbSBhIHN0cmluZy4KK0V2ZW4gdGhvdWdoIHdlIGFyZW4ndCB0YWtpbmcgdXNlciBpbnB1dCByaWdodCBub3csIHdlIGNhbiBzdGlsbCBidWlsZCBvbmUgd2l0aAorYSBoYXJkY29kZWQgc3RyaW5nIHVzaW5nIGBwYXJzZV9saXN0X29iamVjdHNfZmlsdGVyKClgLgorCitXaXRoIHRoZSBmaWx0ZXIgc3BlYyAidHJlZToxIiwgd2UgYXJlIGV4cGVjdGluZyB0byBzZWUgX29ubHlfIHRoZSByb290IHRyZWUgZm9yCitlYWNoIGNvbW1pdDsgdGhlcmVmb3JlLCB0aGUgdHJlZSBvYmplY3QgY291bnQgc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0bwordGhlIG51bWJlciBvZiBjb21taXRzLiAoRm9yIGFuIGV4YW1wbGUgb2Ygd2h5IHRoYXQncyB0cnVlOiBgZ2l0IGNvbW1pdCAtLXJldmVydGAKK3BvaW50cyB0byB0aGUgc2FtZSB0cmVlIG9iamVjdCBhcyBpdHMgZ3JhbmRwYXJlbnQuKQorCis9PT0gQ291bnRpbmcgT21pdHRlZCBPYmplY3RzCisKK1dlIGFsc28gaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBlbnVtZXJhdGUgYWxsIG9iamVjdHMgd2hpY2ggd2VyZSBvbWl0dGVkIGJ5IGEKK2ZpbHRlciwgbGlrZSB3aXRoIGBnaXQgbG9nIC0tZmlsdGVyPTxzcGVjPiAtLWZpbHRlci1wcmludC1vbWl0dGVkYC4gQXNraW5nCitgdHJhdmVyc2VfY29tbWl0X2xpc3RfZmlsdGVyZWQoKWAgdG8gcG9wdWxhdGUgdGhlIGBvbWl0dGVkYCBsaXN0IG1lYW5zIHRoYXQgb3VyCitvYmplY3Qgd2FsayBkb2VzIG5vdCBwZXJmb3JtIGFueSBiZXR0ZXIgdGhhbiBhbiB1bmZpbHRlcmVkIG9iamVjdCB3YWxrOyBhbGwKK3JlYWNoYWJsZSBvYmplY3RzIGFyZSB3YWxrZWQgaW4gb3JkZXIgdG8gcG9wdWxhdGUgdGhlIGxpc3QuCisKK0ZpcnN0LCBhZGQgdGhlIGBzdHJ1Y3Qgb2lkc2V0YCBhbmQgcmVsYXRlZCBpdGVtcyB3ZSB3aWxsIHVzZSB0byBpdGVyYXRlIGl0OgorCistLS0tCitzdGF0aWMgdm9pZCB3YWxrZW5fb2JqZWN0X3dhbGsoCisJLi4uCisKKwlzdHJ1Y3Qgb2lkc2V0IG9taXR0ZWQ7CisJc3RydWN0IG9pZHNldF9pdGVyIG9pdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSBOVUxMOworCWludCBvbWl0dGVkX2NvdW50ID0gMDsKKwlvaWRzZXRfaW5pdCgmb21pdHRlZCwgMCk7CisKKwkuLi4KKy0tLS0KKworTW9kaWZ5IHRoZSBjYWxsIHRvIGB0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgpYCB0byBpbmNsdWRlIHlvdXIgYG9taXR0ZWRgCitvYmplY3Q6CisKKy0tLS0KKwkuLi4KKworCQl0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgmZmlsdGVyX29wdGlvbnMsIHJldiwKKwkJCXdhbGtlbl9zaG93X2NvbW1pdCwgd2Fsa2VuX3Nob3dfb2JqZWN0LCBOVUxMLCAmb21pdHRlZCk7CisKKwkuLi4KKy0tLS0KKworVGhlbiwgYWZ0ZXIgeW91ciB0cmF2ZXJzYWwsIHRoZSBgb2lkc2V0YCB0cmF2ZXJzYWwgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KK0NvdW50IGFsbCB0aGUgb2JqZWN0cyB3aXRoaW4gYW5kIG1vZGlmeSB0aGUgcHJpbnQgc3RhdGVtZW50OgorCistLS0tCisJLyogQ291bnQgdGhlIG9taXR0ZWQgb2JqZWN0cy4gKi8KKwlvaWRzZXRfaXRlcl9pbml0KCZvbWl0dGVkLCAmb2l0KTsKKworCXdoaWxlICgob2lkID0gb2lkc2V0X2l0ZXJfbmV4dCgmb2l0KSkpCisJCW9taXR0ZWRfY291bnQrKzsKKworCXByaW50ZigiY29tbWl0cyAlZFxuYmxvYnMgJWRcbnRhZ3MgJWRcbnRyZWVzJWRcbm9taXR0ZWQgJWRcbiIsCisJCWNvbW1pdF9jb3VudCwgYmxvYl9jb3VudCwgdGFnX2NvdW50LCB0cmVlX2NvdW50LCBvbWl0dGVkX2NvdW50KTsKKy0tLS0KKworQnkgcnVubmluZyB5b3VyIHdhbGsgd2l0aCBhbmQgd2l0aG91dCB0aGUgZmlsdGVyLCB5b3Ugc2hvdWxkIGZpbmQgdGhhdCB0aGUgdG90YWwKK29iamVjdCBjb3VudCBpbiBlYWNoIGNhc2UgaXMgaWRlbnRpY2FsLiBZb3UgY2FuIGFsc28gdGltZSBlYWNoIGludm9jYXRpb24gb2YKK3RoZSBgd2Fsa2VuYCBzdWJjb21tYW5kLCB3aXRoIGFuZCB3aXRob3V0IGBvbWl0dGVkYCBiZWluZyBwYXNzZWQgaW4sIHRvIGNvbmZpcm0KK3RvIHlvdXJzZWxmIHRoZSBydW50aW1lIGltcGFjdCBvZiB0cmFja2luZyBhbGwgb21pdHRlZCBvYmplY3RzLgorCis9PT0gQ2hhbmdpbmcgdGhlIE9yZGVyCisKK0ZpbmFsbHksIGxldCdzIGRlbW9uc3RyYXRlIHRoYXQgeW91IGNhbiBhbHNvIHJlb3JkZXIgd2Fsa3Mgb2YgYWxsIG9iamVjdHMsIG5vdAoranVzdCB3YWxrcyBvZiBjb21taXRzLiBGaXJzdCwgd2UnbGwgbWFrZSBvdXIgaGFuZGxlcnMgY2hhdHRpZXIgLSBtb2RpZnkKK2B3YWxrZW5fc2hvd19jb21taXQoKWAgYW5kIGB3YWxrZW5fc2hvd19vYmplY3QoKWAgdG8gcHJpbnQgdGhlIG9iamVjdCBhcyB0aGV5CitnbzoKKworLS0tLQorc3RhdGljIHZvaWQgd2Fsa2VuX3Nob3dfY29tbWl0KHN0cnVjdCBjb21taXQgKmNtdCwgdm9pZCAqYnVmKQoreworCXRyYWNlX3ByaW50ZigiY29tbWl0OiAlc1xuIiwgb2lkX3RvX2hleCgmY210LT5vYmplY3Qub2lkKSk7CisJY29tbWl0X2NvdW50Kys7Cit9CisKK3N0YXRpYyB2b2lkIHdhbGtlbl9zaG93X29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnN0ciwgdm9pZCAqYnVmKQoreworCXRyYWNlX3ByaW50ZigiJXM6ICVzXG4iLCB0eXBlX25hbWUob2JqLT50eXBlKSwgb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKKworCS4uLgorfQorLS0tLQorCitOT1RFOiBTaW5jZSB3ZSB3aWxsIGJlIGV4YW1pbmluZyB0aGlzIG91dHB1dCBkaXJlY3RseSBhcyBodW1hbnMsIHdlJ2xsIHVzZQorYHRyYWNlX3ByaW50ZigpYCBoZXJlLiBBZGRpdGlvbmFsbHksIHNpbmNlIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYSBzaWduaWZpY2FudAorbnVtYmVyIG9mIHByaW50ZWQgbGluZXMsIHVzaW5nIGB0cmFjZV9wcmludGYoKWAgd2lsbCBhbGxvdyB1cyB0byBlYXNpbHkgc2lsZW5jZQordGhvc2UgbGluZXMgd2l0aG91dCBoYXZpbmcgdG8gcmVjb21waWxlLgorCisoTGVhdmUgdGhlIGNvdW50ZXIgaW5jcmVtZW50IGxvZ2ljIGluIHBsYWNlLikKKworV2l0aCBvbmx5IHRoYXQgY2hhbmdlLCBydW4gYWdhaW4gKGJ1dCBzYXZlIHlvdXJzZWxmIHNvbWUgc2Nyb2xsYmFjayk6CisKKy0tLS0KKyQgR0lUX1RSQUNFPTEgLi9iaW4td3JhcHBlcnMvZ2l0IHdhbGtlbiB8IGhlYWQgLW4gMTAKKy0tLS0KKworVGFrZSBhIGxvb2sgYXQgdGhlIHRvcCBjb21taXQgd2l0aCBgZ2l0IHNob3dgIGFuZCB0aGUgb2JqZWN0IElEIHlvdSBwcmludGVkOyBpdAorc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBvdXRwdXQgb2YgYGdpdCBzaG93IEhFQURgLgorCitOZXh0LCBsZXQncyBjaGFuZ2UgYSBzZXR0aW5nIG9uIG91ciBgc3RydWN0IHJldl9pbmZvYCB3aXRoaW4KK2B3YWxrZW5fb2JqZWN0X3dhbGsoKWAuIEZpbmQgd2hlcmUgeW91J3JlIGNoYW5naW5nIHRoZSBvdGhlciBzZXR0aW5ncyBvbiBgcmV2YCwKK3N1Y2ggYXMgYHJldi0+dHJlZV9vYmplY3RzYCBhbmQgYHJldi0+dHJlZV9ibG9ic19pbl9jb21taXRfb3JkZXJgLCBhbmQgYWRkIHRoZQorYHJldmVyc2VgIHNldHRpbmcgYXQgdGhlIGJvdHRvbToKKworLS0tLQorCS4uLgorCisJcmV2LT50cmVlX29iamVjdHMgPSAxOworCXJldi0+YmxvYl9vYmplY3RzID0gMTsKKwlyZXYtPnRhZ19vYmplY3RzID0gMTsKKwlyZXYtPnRyZWVfYmxvYnNfaW5fY29tbWl0X29yZGVyID0gMTsKKwlyZXYtPnJldmVyc2UgPSAxOworCisJLi4uCistLS0tCisKK05vdywgcnVuIGFnYWluLCBidXQgdGhpcyB0aW1lLCBsZXQncyBncmFiIHRoZSBsYXN0IGhhbmRmdWwgb2Ygb2JqZWN0cyBpbnN0ZWFkCitvZiB0aGUgZmlyc3QgaGFuZGZ1bDoKKworLS0tLQorJCBtYWtlCiskIEdJVF9UUkFDRT0xIC4vYmluLXdyYXBwZXJzIGdpdCB3YWxrZW4gfCB0YWlsIC1uIDEwCistLS0tCisKK1RoZSBsYXN0IGNvbW1pdCBvYmplY3QgZ2l2ZW4gc2hvdWxkIGhhdmUgdGhlIHNhbWUgT0lEIGFzIHRoZSBvbmUgd2Ugc2F3IGF0IHRoZQordG9wIGJlZm9yZSwgYW5kIHJ1bm5pbmcgYGdpdCBzaG93IDxvaWQ+YCB3aXRoIHRoYXQgT0lEIHNob3VsZCBnaXZlIHlvdSBhZ2FpbgordGhlIHNhbWUgcmVzdWx0cyBhcyBgZ2l0IHNob3cgSEVBRGAuIEZ1cnRoZXJtb3JlLCBpZiB5b3UgcnVuIGFuZCBleGFtaW5lIHRoZQorZmlyc3QgdGVuIGxpbmVzIGFnYWluICh3aXRoIGBoZWFkYCBpbnN0ZWFkIG9mIGB0YWlsYCBsaWtlIHdlIGRpZCBiZWZvcmUgYXBwbHlpbmcKK3RoZSBgcmV2ZXJzZWAgc2V0dGluZyksIHlvdSBzaG91bGQgc2VlIHRoYXQgbm93IHRoZSBmaXJzdCBjb21taXQgcHJpbnRlZCBpcyB0aGUKK2luaXRpYWwgY29tbWl0LCBgZTgzYzUxNjNgLgorCis9PSBXcmFwcGluZyBVcAorCitMZXQncyByZXZpZXcuIEluIHRoaXMgdHV0b3JpYWwsIHdlOgorCistIEJ1aWx0IGEgY29tbWl0IHdhbGsgZnJvbSB0aGUgZ3JvdW5kIHVwCistIEVuYWJsZWQgYSBncmVwIGZpbHRlciBmb3IgdGhhdCBjb21taXQgd2FsaworLSBDaGFuZ2VkIHRoZSBzb3J0IG9yZGVyIG9mIHRoYXQgZmlsdGVyZWQgY29tbWl0IHdhbGsKKy0gQnVpbHQgYW4gb2JqZWN0IHdhbGsgKHRhZ3MsIGNvbW1pdHMsIHRyZWVzLCBhbmQgYmxvYnMpIGZyb20gdGhlIGdyb3VuZCB1cAorLSBMZWFybmVkIGhvdyB0byBhZGQgYSBmaWx0ZXItc3BlYyB0byBhbiBvYmplY3Qgd2FsaworLSBDaGFuZ2VkIHRoZSBkaXNwbGF5IG9yZGVyIG9mIHRoZSBmaWx0ZXJlZCBvYmplY3Qgd2FsawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVhM2Y5OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuMS50eHQKQEAgLTAsMCArMSw0MiBAQAorR0lUIHYxLjUuMC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogRG9jdW1lbnRhdGlvbiB1cGRhdGVzCisKKyAgLSBDbGFyaWZpY2F0aW9ucyBhbmQgY29ycmVjdGlvbnMgdG8gMS41LjAgcmVsZWFzZSBub3Rlcy4KKworICAtIFRoZSBtYWluIGRvY3VtZW50YXRpb24gZGlkIG5vdCBsaW5rIHRvIGdpdC1yZW1vdGUgZG9jdW1lbnRhdGlvbi4KKworICAtIENsYXJpZmllZCBpbnRyb2R1Y3RvcnkgdGV4dCBvZiBnaXQtcmViYXNlIGRvY3VtZW50YXRpb24uCisKKyAgLSBDb252ZXJ0ZWQgcmVtYWluaW5nIG1lbnRpb25zIG9mIHVwZGF0ZS1pbmRleCBvbiBQb3JjZWxhaW4KKyAgICBkb2N1bWVudHMgdG8gZ2l0LWFkZC9naXQtcm0uCisKKyAgLSBTb21lIGkxOG4uKiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB3ZXJlIGluY29ycmVjdGx5CisgICAgZGVzY3JpYmVkIGFzIGNvcmUuKjsgZml4ZWQuCisKKyogQnVnZml4ZXMKKworICAtIGdpdC1hZGQgYW5kIGdpdC11cGRhdGUtaW5kZXggb24gYSBmaWxlc3lzdGVtIG9uIHdoaWNoCisgICAgZXhlY3V0YWJsZSBiaXRzIGFyZSB1bnJlbGlhYmxlIGluY29ycmVjdGx5IHJldXNlZCBzdF9tb2RlCisgICAgYml0cyBldmVuIHdoZW4gdGhlIHBhdGggY2hhbmdlZCBiZXR3ZWVuIHN5bWxpbmsgYW5kIHJlZ3VsYXIKKyAgICBmaWxlLgorCisgIC0gZ2l0LWRhZW1vbiBtYXJrcyB0aGUgbGlzdGVuaW5nIHNvY2tldHMgd2l0aCBGRF9DTE9FWEVDIHNvCisgICAgdGhhdCBpdCB3b24ndCBiZSBsZWFrZWQgaW50byB0aGUgY2hpbGRyZW4uCisKKyAgLSBzZWdmYXVsdCBmcm9tIGdpdC1ibGFtZSB3aGVuIHRoZSBtYW5kYXRvcnkgcGF0aG5hbWUKKyAgICBwYXJhbWV0ZXIgd2FzIG1pc3Npbmcgd2FzIGZpeGVkOyB1c2FnZSgpIG1lc3NhZ2UgaXMgZ2l2ZW4KKyAgICBpbnN0ZWFkLgorCisgIC0gZ2l0LXJldi1saXN0IGRpZCBub3QgcmVhZCAkR0lUX0RJUi9jb25maWcgZmlsZSwgd2hpY2ggbWVhbnMKKyAgICB0aGF0IGRpZCBub3QgaG9ub3IgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBjb3JyZWN0bHkuCisKKyogVHdlYWtzCisKKyAgLSBzbGlkaW5nIG1tYXAoKSBpbmVmZmljaWVudGx5IG1tYXBlZCB0aGUgc2FtZSByZWdpb24gb2YgYQorICAgIHBhY2tmaWxlIHdpdGggYW4gYWNjZXNzIHBhdHRlcm4gdGhhdCB1c2VkIG9iamVjdHMgaW4gdGhlCisgICAgcmV2ZXJzZSBvcmRlci4gIFRoaXMgaGFzIGJlZW4gbWFkZSBtb3JlIGVmZmljaWVudC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNjFlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjIudHh0CkBAIC0wLDAgKzEsNjUgQEAKK0dJVCB2MS41LjAuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjAuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gQXV0b21hdGVkIG1lcmdlIGNvbmZsaWN0IGhhbmRsaW5nIHdoZW4gY2hhbmdlcyB0byBzeW1ib2xpYworICAgIGxpbmtzIGNvbmZsaWN0ZWQgd2VyZSBjb21wbGV0ZWx5IGJyb2tlbi4gIFRoZSBtZXJnZS1yZXNvbHZlCisgICAgc3RyYXRlZ3kgY3JlYXRlZCBhIHJlZ3VsYXIgZmlsZSB3aXRoIGNvbmZsaWN0IG1hcmtlcnMgaW4gaXQKKyAgICBpbiBwbGFjZSBvZiB0aGUgc3ltYm9saWMgbGluay4gIFRoZSBkZWZhdWx0IHN0cmF0ZWd5LAorICAgIG1lcmdlLXJlY3Vyc2l2ZSB3YXMgZXZlbiBtb3JlIGJyb2tlbi4gIEl0IHJlbW92ZWQgdGhlIHBhdGgKKyAgICB0aGF0IHdhcyBwb2ludGVkIGF0IGJ5IHRoZSBzeW1ib2xpYyBsaW5rLiAgQm90aCBvZiB0aGVzZQorICAgIHByb2JsZW1zIGhhdmUgYmVlbiBmaXhlZC4KKworICAtICdnaXQgZGlmZiBtYWludCBtYXN0ZXIgbmV4dCcgZGlkIG5vdCBjb3JyZWN0bHkgZ2l2ZSBjb21iaW5lZAorICAgIGRpZmYgYWNyb3NzIHRocmVlIHRyZWVzLgorCisgIC0gJ2dpdCBmYXN0LWltcG9ydCcgcG9ydGFiaWxpdHkgZml4IGZvciBTb2xhcmlzLgorCisgIC0gJ2dpdCBzaG93LXJlZiAtLXZlcmlmeScgd2l0aG91dCBhcmd1bWVudHMgZGlkIG5vdCBlcnJvciBvdXQKKyAgICBidXQgc2VnZmF1bHRlZC4KKworICAtICdnaXQgZGlmZiA6dHJhY2tlZC1maWxlIGBwd2RgL2FuLXVudHJhY2tlZC1maWxlJyBnYXZlIGFuIGV4dHJhCisgICAgc2xhc2hlcyBhZnRlciBhLyBhbmQgYi8uCisKKyAgLSAnZ2l0IGZvcm1hdC1wYXRjaCcgcHJvZHVjZWQgdG9vIGxvbmcgZmlsZW5hbWVzIGlmIHRoZSBjb21taXQKKyAgICBtZXNzYWdlIGhhZCB0b28gbG9uZyBsaW5lIGF0IHRoZSBiZWdpbm5pbmcuCisKKyAgLSBSdW5uaW5nICdtYWtlIGFsbCcgYW5kIHRoZW4gd2l0aG91dCBjaGFuZ2luZyBhbnl0aGluZworICAgIHJ1bm5pbmcgJ21ha2UgaW5zdGFsbCcgc3RpbGwgcmVidWlsdCBzb21lIGZpbGVzLiAgVGhpcworICAgIHdhcyBpbmNvbnZlbmllbnQgd2hlbiBidWlsZGluZyBhcyB5b3Vyc2VsZiBhbmQgdGhlbgorICAgIGluc3RhbGxpbmcgYXMgcm9vdCAoZXNwZWNpYWxseSBwcm9ibGVtYXRpYyB3aGVuIHRoZSBzb3VyY2UKKyAgICBkaXJlY3RvcnkgaXMgb24gTkZTIGFuZCByb290IGlzIG1hcHBlZCB0byBub2JvZHkpLgorCisgIC0gJ2dpdC1yZXJlcmUnIGZhaWxlZCB0byBkZWFsIHdpdGggdHdvIHVuY29uZmxpY3RlZCBwYXRocyB0aGF0CisgICAgc29ydGVkIG5leHQgdG8gZWFjaCBvdGhlci4KKworICAtICdnaXQtcmVyZXJlJyBhdHRlbXB0ZWQgdG8gb3BlbigyKSBhIHN5bWxpbmsgYW5kIGZhaWxlZCBpZgorICAgIHRoZXJlIHdhcyBhIGNvbmZsaWN0LiAgU2luY2UgYSBjb25mbGljdGluZyBjaGFuZ2UgdG8gYQorICAgIHN5bWxpbmsgd291bGQgbm90IGJlbmVmaXQgZnJvbSByZXJlcmUgYW55d2F5LCB0aGUgY29tbWFuZAorICAgIG5vdyBpZ25vcmVzIGNvbmZsaWN0aW5nIGNoYW5nZXMgdG8gc3ltbGlua3MuCisKKyAgLSAnZ2l0LXJlcGFjaycgZGlkIG5vdCBsaWtlIHRvIHBhc3MgbW9yZSB0aGFuIDY0IGFyZ3VtZW50cworICAgIGludGVybmFsbHkgdG8gdW5kZXJseWluZyAncmV2LWxpc3QnIGxvZ2ljLCB3aGljaCBtYWRlIGl0CisgICAgaW1wb3NzaWJsZSB0byByZXBhY2sgYWZ0ZXIgYWNjdW11bGF0aW5nIG1hbnkgKHNtYWxsKSBwYWNrcworICAgIGluIHRoZSByZXBvc2l0b3J5LgorCisgIC0gJ2dpdC1kaWZmJyB0byByZXZpZXcgdGhlIGNvbWJpbmVkIGRpZmYgZHVyaW5nIGEgY29uZmxpY3RlZAorICAgIG1lcmdlIHdlcmUgbm90IHJlYWRpbmcgdGhlIHdvcmtpbmcgdHJlZSB2ZXJzaW9uIGNvcnJlY3RseQorICAgIHdoZW4gY2hhbmdlcyB0byBhIHN5bWJvbGljIGxpbmsgY29uZmxpY3RlZC4gIEl0IHNob3VsZCBoYXZlCisgICAgcmVhZCB0aGUgZGF0YSB1c2luZyByZWFkbGluaygyKSBidXQgcmVhZCBmcm9tIHRoZSByZWd1bGFyCisgICAgZmlsZSB0aGUgc3ltYm9saWMgbGluayBwb2ludGVkIGF0LgorCisgIC0gJ2dpdC1yZW1vdGUnIGRpZCBub3QgbGlrZSBwZXJpb2QgaW4gYSByZW1vdGUncyBuYW1lLgorCisqIERvY3VtZW50YXRpb24gdXBkYXRlcworCisgIC0gYWRkZWQgYW5kIGNsYXJpZmllZCBjb3JlLmJhcmUsIGNvcmUubGVnYWN5aGVhZGVycyBjb25maWd1cmF0aW9ucy4KKworICAtIHVwZGF0ZWQgImdpdC1jbG9uZSAtLWRlcHRoIiBkb2N1bWVudGF0aW9uLgorCisKKyogQXNzb3J0ZWQgZ2l0LWd1aSBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNTAwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjMudHh0CkBAIC0wLDAgKzEsNTggQEAKK0dJVCB2MS41LjAuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjAuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gJ2dpdC5lbCcgaG9ub3JzIHRoZSBjb21taXQgY29kaW5nIHN5c3RlbSBmcm9tIHRoZSBjb25maWd1cmF0aW9uLgorCisgIC0gJ2JsYW1ldmlldycgaW4gY29udHJpYi8gY29ycmVjdGx5IGRpZ3MgZGVlcGVyIHdoZW4gYSBsaW5lIGlzCisgICAgY2xpY2tlZC4KKworICAtICdodHRwLXB1c2gnIGNvcnJlY3RseSBtYWtlcyBzdXJlIHRoZSByZW1vdGUgc2lkZSBoYXMgbGVhZGluZworICAgIHBhdGguICBFYXJsaWVyIGl0IHN0YXJ0ZWQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgcGF0aCwgYW5kCisgICAgaW5jb3JyZWN0bHkuCisKKyAgLSAnZ2l0LW1lcmdlJyBkaWQgbm90IGV4aXQgd2l0aCBub24temVybyBzdGF0dXMgd2hlbiB0aGUKKyAgICB3b3JraW5nIHRyZWUgd2FzIGRpcnR5IGFuZCBjYW5ub3QgZmFzdCBmb3J3YXJkLiAgSXQgZG9lcworICAgIG5vdy4KKworICAtICdjdnNleHBvcnRjb21taXQnIGRvZXMgbm90IGxvc2UgeWV0LXRvLWJlLXVzZWQgbWVzc2FnZSBmaWxlLgorCisgIC0gaW50LXZzLXNpemVfdCB0eXBlZml4IHdoZW4gcnVubmluZyBjb21iaW5lZCBkaWZmIG9uIGZpbGVzCisgICAgb3ZlciAyR0IgbG9uZy4KKworICAtICdnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPXN0cmlwJyBzaG91bGQgbm90IHRvdWNoIHVubW9kaWZpZWQKKyAgICBsaW5lcy4KKworICAtICdnaXQtbWFpbGluZm8nIGNob2tlIHdoZW4gYSBsb2dpY2FsIGhlYWRlciBsaW5lIHdhcyB0b28gbG9uZy4KKworICAtICdnaXQgc2hvdyBBLi5CJyBkaWQgbm90IGVycm9yIG91dC4gIE5lZ2F0aXZlIHJlZiAoIm5vdCBBIiBpbgorICAgIHRoaXMgZXhhbXBsZSkgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhlCisgICAgY29tbWFuZCwgc28gbm93IGl0IGVycm9ycyBvdXQuCisKKyAgLSAnZ2l0IGZtdC1tZXJnZS1tc2cgLS1maWxlJyB3aXRob3V0IGZpbGUgcGFyYW1ldGVyIGRpZCBub3QKKyAgICBjb3JyZWN0bHkgZXJyb3Igb3V0LgorCisgIC0gJ2dpdCBhcmNoaW1wb3J0JyBiYXJmZWQgdXBvbiBlbmNvdW50ZXJpbmcgYSBjb21taXQgd2l0aG91dAorICAgIHN1bW1hcnkuCisKKyAgLSAnZ2l0IGluZGV4LXBhY2snIGRpZCBub3QgcHJvdGVjdCBpdHNlbGYgZnJvbSBnZXR0aW5nIGEgc2hvcnQKKyAgICByZWFkIG91dCBvZiBwcmVhZCgyKS4KKworICAtICdnaXQgaHR0cC1wdXNoJyBoYWQgYSBmZXcgYnVmZmVyIG92ZXJydW5zLgorCisgIC0gQnVpbGQgZGVwZW5kZW5jeSBmaXhlcyB0byByZWJ1aWxkIGZldGNoLm8gd2hlbiBvdGhlciBoZWFkZXJzCisgICAgY2hhbmdlLgorCisqIERvY3VtZW50YXRpb24gdXBkYXRlcworCisgIC0gdXNlci1tYW51YWwgdXBkYXRlcy4KKworICAtIE9wdGlvbnMgdG8gJ2dpdCByZW1vdGUgYWRkJyB3ZXJlIGRlc2NyaWJlZCBpbnN1ZmZpY2llbnRseS4KKworICAtIENvbmZpZ3VyYXRpb24gZm9ybWF0LnN1ZmZpeCB3YXMgbm90IGRvY3VtZW50ZWQuCisKKyAgLSBPdGhlciBmb3JtYXR0aW5nIGFuZCBzcGVsbGluZyBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZWZhNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjQudHh0CkBAIC0wLDAgKzEsMjIgQEAKK0dJVCB2MS41LjAuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjAuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gZ2l0LmVsIGRvZXMgbm90IGFkZCBkdXBsaWNhdGUgc2lnbi1vZmYgbGluZXMuCisKKyAgLSBnaXQtY29tbWl0IHNob3dzIHRoZSBmdWxsIHN0YXQgb2YgdGhlIHJlc3VsdGluZyBjb21taXQsIG5vdAorICAgIGp1c3QgYWJvdXQgdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgd2hlbiBydW4gZnJvbQorICAgIGEgc3ViZGlyZWN0b3J5LgorCisgIC0gImdpdC1jaGVja291dCAtbSAnQHs4IGhvdXJzIGFnb30nIiBoYWQgYSBmdW5ueSBmYWlsdXJlIGZyb20KKyAgICBldmFsOyBmaXhlZC4KKworICAtIGdpdC1ndWkgdXBkYXRlcy4KKworKiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMKKworKiBVc2VyIG1hbnVhbCB1cGRhdGVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWVjM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC41LnR4dApAQCAtMCwwICsxLDI2IEBACitHSVQgdjEuNS4wLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4wLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQnVnZml4ZXMKKworICAtIGdpdC1tZXJnZSAoaGVuY2UgZ2l0LXB1bGwpIGRpZCBub3QgcmVmdXNlIGZhc3QtZm9yd2FyZGluZworICAgIHdoZW4gdGhlIHdvcmtpbmcgdHJlZSBoYWQgbG9jYWwgY2hhbmdlcyB0aGF0IHdvdWxkIGhhdmUKKyAgICBjb25mbGljdGVkIHdpdGggaXQuCisKKyAgLSBnaXQuZWwgZG9lcyBub3QgYWRkIGR1cGxpY2F0ZSBzaWduLW9mZiBsaW5lcy4KKworICAtIGdpdC1jb21taXQgc2hvd3MgdGhlIGZ1bGwgc3RhdCBvZiB0aGUgcmVzdWx0aW5nIGNvbW1pdCwgbm90CisgICAganVzdCBhYm91dCB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGVuIHJ1biBmcm9tCisgICAgYSBzdWJkaXJlY3RvcnkuCisKKyAgLSAiZ2l0LWNoZWNrb3V0IC1tICdAezggaG91cnMgYWdvfSciIGhhZCBhIGZ1bm55IGZhaWx1cmUgZnJvbQorICAgIGV2YWw7IGZpeGVkLgorCisgIC0gZ2l0LWd1aSB1cGRhdGVzLgorCisqIERvY3VtZW50YXRpb24gdXBkYXRlcworCisqIFVzZXIgbWFudWFsIHVwZGF0ZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMjAxNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjYudHh0CkBAIC0wLDAgKzEsMjEgQEAKK0dJVCB2MS41LjAuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjAuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gYSBoYW5kZnVsIHNtYWxsIGZpeGVzIHRvIGdpdHdlYi4KKworICAtIGJ1aWxkIHByb2NlZHVyZSBmb3IgdXNlci1tYW51YWwgaXMgZml4ZWQgbm90IHRvIHJlcXVpcmUgbG9jYWxseQorICAgIGluc3RhbGxlZCBzdHlsZXNoZWV0cy4KKworICAtICJnaXQgY29tbWl0ICRwYXRocyIgb24gcGF0aHMgd2hvc2UgZWFybGllciBjb250ZW50cyB3ZXJlCisgICAgYWxyZWFkeSB1cGRhdGVkIGluIHRoZSBpbmRleCB3ZXJlIGZhaWxpbmcgb3V0LgorCisqIERvY3VtZW50YXRpb24KKworICAtIHVzZXItbWFudWFsIGhhcyBiZXR0ZXIgY3Jvc3MgcmVmZXJlbmNlcy4KKworICAtIGdpdHdlYiBpbnN0YWxsYXRpb24vZGVwbG95bWVudCBwcm9jZWR1cmUgaXMgbm93IGRvY3VtZW50ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzBhZDMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC43LnR4dApAQCAtMCwwICsxLDE4IEBACitHSVQgdjEuNS4wLjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4wLjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQnVnZml4ZXMKKworICAtIGdpdC11cGxvYWQtcGFjayBmYWlsZWQgdG8gY2xvc2UgdW51c2VkIHBpcGUgZW5kcywgcmVzdWx0aW5nCisgICAgaW4gbWFueSB6b21iaWVzIHRvIGhhbmcgYXJvdW5kLgorCisgIC0gZ2l0LXJlcmVyZSB3YXMgcmVjb3JkaW5nIHRoZSBjb250ZW50cyBvZiBlYXJsaWVyIGh1bmtzCisgICAgZHVwbGljYXRlZCBpbiBsYXRlciBodW5rcy4gIFRoaXMgcHJldmVudGVkIHJlc29sdmluZyB0aGUgc2FtZQorICAgIGNvbmZsaWN0IHdoZW4gcGVyZm9ybWluZyB0aGUgc2FtZSBtZXJnZSB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKworKiBEb2N1bWVudGF0aW9uCisKKyAgLSBhIGZldyBkb2N1bWVudGF0aW9uIGZpeGVzIGZyb20gRGViaWFuIHBhY2thZ2UgbWFpbnRhaW5lci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkNDJmMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAudHh0CkBAIC0wLDAgKzEsNDY5IEBACitHSVQgdjEuNS4wIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitPbGQgbmV3cworLS0tLS0tLS0KKworVGhpcyBzZWN0aW9uIGlzIGZvciBwZW9wbGUgd2hvIGFyZSB1cGdyYWRpbmcgZnJvbSBhbmNpZW50Cit2ZXJzaW9ucyBvZiBnaXQuICBBbHRob3VnaCBhbGwgb2YgdGhlIGNoYW5nZXMgaW4gdGhpcyBzZWN0aW9uCitoYXBwZW5lZCBiZWZvcmUgdGhlIGN1cnJlbnQgdjEuNC40IHJlbGVhc2UsIHRoZXkgYXJlIHN1bW1hcml6ZWQKK2hlcmUgaW4gdGhlIHYxLjUuMCByZWxlYXNlIG5vdGVzIGZvciBwZW9wbGUgd2hvIHNraXBwZWQgZWFybGllcgordmVyc2lvbnMuCisKK0FzIG9mIGdpdCB2MS41LjAgdGhlcmUgYXJlIHNvbWUgb3B0aW9uYWwgZmVhdHVyZXMgdGhhdCBjaGFuZ2VzCit0aGUgcmVwb3NpdG9yeSB0byBhbGxvdyBkYXRhIHRvIGJlIHN0b3JlZCBhbmQgdHJhbnNmZXJyZWQgbW9yZQorZWZmaWNpZW50bHkuICBUaGVzZSBmZWF0dXJlcyBhcmUgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCwgYXMgdGhleQord2lsbCBtYWtlIHRoZSByZXBvc2l0b3J5IHVudXNhYmxlIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgZ2l0LgorU3BlY2lmaWNhbGx5LCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOgorCisgLSBUaGVyZSBpcyBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29yZS5sZWdhY3loZWFkZXJzIHRoYXQKKyAgIGNoYW5nZXMgdGhlIGZvcm1hdCBvZiBsb29zZSBvYmplY3RzIHNvIHRoYXQgdGhleSBhcmUgbW9yZQorICAgZWZmaWNpZW50IHRvIHBhY2sgYW5kIHRvIHNlbmQgb3V0IG9mIHRoZSByZXBvc2l0b3J5IG92ZXIgZ2l0CisgICBuYXRpdmUgcHJvdG9jb2wsIHNpbmNlIHYxLjQuMi4gIEhvd2V2ZXIsIGxvb3NlIG9iamVjdHMKKyAgIHdyaXR0ZW4gaW4gdGhlIG5ldyBmb3JtYXQgY2Fubm90IGJlIHJlYWQgYnkgZ2l0IG9sZGVyIHRoYW4KKyAgIHRoYXQgdmVyc2lvbjsgcGVvcGxlIGZldGNoaW5nIGZyb20geW91ciByZXBvc2l0b3J5IHVzaW5nCisgICBvbGRlciBjbGllbnRzIG92ZXIgZHVtYiB0cmFuc3BvcnRzIChlLmcuIGh0dHApIHVzaW5nIG9sZGVyCisgICB2ZXJzaW9ucyBvZiBnaXQgd2lsbCBhbHNvIGJlIGFmZmVjdGVkLgorCisgICBUbyBsZXQgZ2l0IHVzZSB0aGUgbmV3IGxvb3NlIG9iamVjdCBmb3JtYXQsIHlvdSBoYXZlIHRvCisgICBzZXQgY29yZS5sZWdhY3loZWFkZXJzIHRvIGZhbHNlLgorCisgLSBTaW5jZSB2MS40LjMsIGNvbmZpZ3VyYXRpb24gcmVwYWNrLnVzZWRlbHRhYmFzZW9mZnNldCBhbGxvd3MKKyAgIHBhY2tmaWxlIHRvIGJlIGNyZWF0ZWQgaW4gbW9yZSBzcGFjZSBlZmZpY2llbnQgZm9ybWF0LCB3aGljaAorICAgY2Fubm90IGJlIHJlYWQgYnkgZ2l0IG9sZGVyIHRoYW4gdGhhdCB2ZXJzaW9uLgorCisgICBUbyBsZXQgZ2l0IHVzZSB0aGUgbmV3IGZvcm1hdCBmb3IgcGFja2ZpbGVzLCB5b3UgaGF2ZSB0bworICAgc2V0IHJlcGFjay51c2VkZWx0YWJhc2VvZmZzZXQgdG8gdHJ1ZS4KKworVGhlIGFib3ZlIHR3byBuZXcgZmVhdHVyZXMgYXJlIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQgYW5kIHlvdQoraGF2ZSB0byBleHBsaWNpdGx5IGFzayBmb3IgdGhlbSwgYmVjYXVzZSB0aGV5IG1ha2UgcmVwb3NpdG9yaWVzCit1bnJlYWRhYmxlIGJ5IG9sZGVyIHZlcnNpb25zIG9mIGdpdCwgYW5kIGluIHYxLjUuMCB3ZSBzdGlsbCBkbworbm90IGVuYWJsZSB0aGVtIGJ5IGRlZmF1bHQgZm9yIHRoZSBzYW1lIHJlYXNvbi4gIFdlIHdpbGwgY2hhbmdlCit0aGlzIGRlZmF1bHQgcHJvYmFibHkgMSB5ZWFyIGFmdGVyIDEuNC4yJ3MgcmVsZWFzZSwgd2hlbiBpdCBpcworcmVhc29uYWJsZSB0byBleHBlY3QgZXZlcnlib2R5IHRvIGhhdmUgbmV3IGVub3VnaCB2ZXJzaW9uIG9mCitnaXQuCisKKyAtICdnaXQgcGFjay1yZWZzJyBhcHBlYXJlZCBpbiB2MS40LjQ7IHRoaXMgY29tbWFuZCBhbGxvd3MgdGFncworICAgdG8gYmUgYWNjZXNzZWQgbXVjaCBtb3JlIGVmZmljaWVudGx5IHRoYW4gdGhlIHRyYWRpdGlvbmFsCisgICAnb25lLWZpbGUtcGVyLXRhZycgZm9ybWF0LiAgT2xkZXIgZ2l0LW5hdGl2ZSBjbGllbnRzIGNhbgorICAgc3RpbGwgZmV0Y2ggZnJvbSBhIHJlcG9zaXRvcnkgdGhhdCBwYWNrZWQgYW5kIHBydW5lZCByZWZzCisgICAodGhlIHNlcnZlciBzaWRlIG5lZWRzIHRvIHJ1biB0aGUgdXAtdG8tZGF0ZSB2ZXJzaW9uIG9mIGdpdCksCisgICBidXQgb2xkZXIgZHVtYiB0cmFuc3BvcnRzIGNhbm5vdC4gIFBhY2tpbmcgb2YgcmVmcyBpcyBkb25lIGJ5CisgICBhbiBleHBsaWNpdCB1c2VyIGFjdGlvbiwgZWl0aGVyIGJ5IHVzZSBvZiAiZ2l0IHBhY2stcmVmcworICAgLS1wcnVuZSIgY29tbWFuZCBvciBieSB1c2Ugb2YgImdpdCBnYyIgY29tbWFuZC4KKworIC0gJ2dpdCAtcCcgdG8gcGFnaW5hdGUgYW55dGhpbmcgLS0gbWFueSBjb21tYW5kcyBkbyBwYWdpbmF0aW9uCisgICBieSBkZWZhdWx0IG9uIGEgdHR5LiAgSW50cm9kdWNlZCBiZXR3ZWVuIHYxLjQuMSBhbmQgdjEuNC4yOworICAgdGhpcyBtYXkgc3VycHJpc2Ugb2xkIHRpbWVycy4KKworIC0gJ2dpdCBhcmNoaXZlJyBzdXBlcnNlZGVkICdnaXQgdGFyLXRyZWUnIGluIHYxLjQuMzsKKworIC0gJ2dpdCBjdnNzZXJ2ZXInIHdhcyBuZXcgaW52ZW50aW9uIGluIHYxLjMuMDsKKworIC0gJ2dpdCByZXBvLWNvbmZpZycsICdnaXQgZ3JlcCcsICdnaXQgcmViYXNlJyBhbmQgJ2dpdGsnIHdlcmUKKyAgIHNlcmlvdXNseSBlbmhhbmNlZCBkdXJpbmcgdjEuNC4wIHRpbWVwZXJpb2QuCisKKyAtICdnaXR3ZWInIGJlY2FtZSBwYXJ0IG9mIGdpdC5naXQgZHVyaW5nIHYxLjQuMCB0aW1lcGVyaW9kIGFuZAorICAgc2VyaW91c2x5IG1vZGlmaWVkIHNpbmNlIHRoZW4uCisKKyAtIHJlZmxvZyBpcyBhbiB2MS40LjAgaW52ZW50aW9uLiAgVGhpcyBhbGxvd3MgeW91IHRvIG5hbWUgYQorICAgcmV2aXNpb24gdGhhdCBhIGJyYW5jaCB1c2VkIHRvIGJlIGF0IChlLmcuICJnaXQgZGlmZgorICAgbWFzdGVyQHt5ZXN0ZXJkYXl9IG1hc3RlciIgYWxsb3dzIHlvdSB0byBzZWUgY2hhbmdlcyBzaW5jZQorICAgeWVzdGVyZGF5J3MgdGlwIG9mIHRoZSBicmFuY2gpLgorCisKK1VwZGF0ZXMgaW4gdjEuNS4wIHNpbmNlIHYxLjQuNCBzZXJpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBJbmRleCBtYW5pcHVsYXRpb24KKworIC0gZ2l0LWFkZCBpcyB0byBhZGQgY29udGVudHMgdG8gdGhlIGluZGV4IChha2EgInN0YWdpbmcgYXJlYSIKKyAgIGZvciB0aGUgbmV4dCBjb21taXQpLCB3aGV0aGVyIHRoZSBmaWxlIHRoZSBjb250ZW50cyBoYXBwZW4gdG8KKyAgIGJlIGlzIGFuIGV4aXN0aW5nIG9uZSBvciBhIG5ld2x5IGNyZWF0ZWQgb25lLgorCisgLSBnaXQtYWRkIHdpdGhvdXQgYW55IGFyZ3VtZW50IGRvZXMgbm90IGFkZCBldmVyeXRoaW5nCisgICBhbnltb3JlLiAgVXNlICdnaXQtYWRkIC4nIGluc3RlYWQuICBBbHNvIHlvdSBjYW4gYWRkCisgICBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyB3aXRoIGFuIC1mIG9wdGlvbi4KKworIC0gZ2l0LWFkZCB0cmllcyB0byBiZSBtb3JlIGZyaWVuZGx5IHRvIHVzZXJzIGJ5IG9mZmVyaW5nIGFuCisgICBpbnRlcmFjdGl2ZSBtb2RlICgiZ2l0LWFkZCAtaSIpLgorCisgLSBnaXQtY29tbWl0IDxwYXRoPiB1c2VkIHRvIHJlZnVzZSB0byBjb21taXQgaWYgPHBhdGg+IHdhcworICAgZGlmZmVyZW50IGJldHdlZW4gSEVBRCBhbmQgdGhlIGluZGV4IChpLmUuIHVwZGF0ZS1pbmRleCB3YXMKKyAgIHVzZWQgb24gaXQgZWFybGllcikuICBUaGlzIGNoZWNrIHdhcyByZW1vdmVkLgorCisgLSBnaXQtcm0gaXMgbXVjaCBzYW5lciBhbmQgc2FmZXIuICBJdCBpcyB1c2VkIHRvIHJlbW92ZSBwYXRocworICAgZnJvbSBib3RoIHRoZSBpbmRleCBmaWxlIGFuZCB0aGUgd29ya2luZyB0cmVlLCBhbmQgbWFrZXMgc3VyZQorICAgeW91IGFyZSBub3QgbG9zaW5nIGFueSBsb2NhbCBtb2RpZmljYXRpb24gYmVmb3JlIGRvaW5nIHNvLgorCisgLSBnaXQtcmVzZXQgPHRyZWU+IDxwYXRocz4uLi4gY2FuIGJlIHVzZWQgdG8gcmV2ZXJ0IGluZGV4CisgICBlbnRyaWVzIGZvciBzZWxlY3RlZCBwYXRocy4KKworIC0gZ2l0LXVwZGF0ZS1pbmRleCBpcyBtdWNoIGxlc3MgdmlzaWJsZS4gIE1hbnkgc3VnZ2VzdGlvbnMgdG8KKyAgIHVzZSB0aGUgY29tbWFuZCBpbiBnaXQgb3V0cHV0IGFuZCBkb2N1bWVudGF0aW9uIGhhdmUgbm93IGJlZW4KKyAgIHJlcGxhY2VkIGJ5IHNpbXBsZXIgY29tbWFuZHMgc3VjaCBhcyAiZ2l0IGFkZCIgb3IgImdpdCBybSIuCisKKworKiBSZXBvc2l0b3J5IGxheW91dCBhbmQgb2JqZWN0cyB0cmFuc2ZlcgorCisgLSBUaGUgZGF0YSBmb3Igb3JpZ2luIHJlcG9zaXRvcnkgaXMgc3RvcmVkIGluIHRoZSBjb25maWd1cmF0aW9uCisgICBmaWxlICRHSVRfRElSL2NvbmZpZywgbm90IGluICRHSVRfRElSL3JlbW90ZXMvLCBmb3IgbmV3bHkKKyAgIGNyZWF0ZWQgY2xvbmVzLiAgVGhlIGxhdHRlciBpcyBzdGlsbCBzdXBwb3J0ZWQgYW5kIHRoZXJlIGlzCisgICBubyBuZWVkIHRvIGNvbnZlcnQgeW91ciBleGlzdGluZyByZXBvc2l0b3J5IGlmIHlvdSBhcmUKKyAgIGFscmVhZHkgY29tZm9ydGFibGUgd2l0aCB5b3VyIHdvcmtmbG93IHdpdGggdGhlIGxheW91dC4KKworIC0gZ2l0LWNsb25lIGFsd2F5cyB1c2VzIHdoYXQgaXMga25vd24gYXMgInNlcGFyYXRlIHJlbW90ZSIKKyAgIGxheW91dCBmb3IgYSBuZXdseSBjcmVhdGVkIHJlcG9zaXRvcnkgd2l0aCBhIHdvcmtpbmcgdHJlZS4KKworICAgQSByZXBvc2l0b3J5IHdpdGggdGhlIHNlcGFyYXRlIHJlbW90ZSBsYXlvdXQgc3RhcnRzIHdpdGggb25seQorICAgb25lIGRlZmF1bHQgYnJhbmNoLCAnbWFzdGVyJywgdG8gYmUgdXNlZCBmb3IgeW91ciBvd24KKyAgIGRldmVsb3BtZW50LiAgVW5saWtlIHRoZSB0cmFkaXRpb25hbCBsYXlvdXQgdGhhdCBjb3BpZWQgYWxsCisgICB0aGUgdXBzdHJlYW0gYnJhbmNoZXMgaW50byB5b3VyIGJyYW5jaCBuYW1lc3BhY2UgKHdoaWxlCisgICByZW5hbWluZyB0aGVpciAnbWFzdGVyJyB0byB5b3VyICdvcmlnaW4nKSwgdGhlIG5ldyBsYXlvdXQKKyAgIHB1dHMgdXBzdHJlYW0gYnJhbmNoZXMgaW50byBsb2NhbCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorICAgd2l0aCB0aGVpciBvd24gbmFtZXNwYWNlLiBUaGVzZSBjYW4gYmUgcmVmZXJlbmNlZCB3aXRoIG5hbWVzCisgICBzdWNoIGFzICJvcmlnaW4vJHVwc3RyZWFtX2JyYW5jaF9uYW1lIiBhbmQgYXJlIHN0b3JlZCBpbgorICAgLmdpdC9yZWZzL3JlbW90ZXMgcmF0aGVyIHRoYW4gLmdpdC9yZWZzL2hlYWRzIHdoZXJlIG5vcm1hbAorICAgYnJhbmNoZXMgYXJlIHN0b3JlZC4KKworICAgVGhpcyBsYXlvdXQga2VlcHMgeW91ciBvd24gYnJhbmNoIG5hbWVzcGFjZSBsZXNzIGNsdXR0ZXJlZCwKKyAgIGF2b2lkcyBuYW1lIGNvbGxpc2lvbiB3aXRoIHlvdXIgdXBzdHJlYW0sIG1ha2VzIGl0IHBvc3NpYmxlCisgICB0byBhdXRvbWF0aWNhbGx5IHRyYWNrIG5ldyBicmFuY2hlcyBjcmVhdGVkIGF0IHRoZSByZW1vdGUKKyAgIGFmdGVyIHlvdSBjbG9uZSBmcm9tIGl0LCBhbmQgbWFrZXMgaXQgZWFzaWVyIHRvIGludGVyYWN0IHdpdGgKKyAgIG1vcmUgdGhhbiBvbmUgcmVtb3RlIHJlcG9zaXRvcnkgKHlvdSBjYW4gdXNlICJnaXQgcmVtb3RlIiB0bworICAgYWRkIG90aGVyIHJlcG9zaXRvcmllcyB0byB0cmFjaykuICBUaGVyZSBtaWdodCBiZSBzb21lCisgICBzdXJwcmlzZXM6CisKKyAgICogJ2dpdCBicmFuY2gnIGRvZXMgbm90IHNob3cgdGhlIHJlbW90ZSB0cmFja2luZyBicmFuY2hlcy4KKyAgICAgSXQgb25seSBsaXN0cyB5b3VyIG93biBicmFuY2hlcy4gIFVzZSAnLXInIG9wdGlvbiB0byB2aWV3CisgICAgIHRoZSB0cmFja2luZyBicmFuY2hlcy4KKworICAgKiBJZiB5b3UgYXJlIGZvcmtpbmcgb2ZmIG9mIGEgYnJhbmNoIG9idGFpbmVkIGZyb20gdGhlCisgICAgIHVwc3RyZWFtLCB5b3Ugd291bGQgaGF2ZSBkb25lIHNvbWV0aGluZyBsaWtlICdnaXQgYnJhbmNoCisgICAgIG15LW5leHQgbmV4dCcsIGJlY2F1c2UgdHJhZGl0aW9uYWwgbGF5b3V0IGRyb3BwZWQgdGhlCisgICAgIHRyYWNraW5nIGJyYW5jaCAnbmV4dCcgaW50byB5b3VyIG93biBicmFuY2ggbmFtZXNwYWNlLgorICAgICBXaXRoIHRoZSBzZXBhcmF0ZSByZW1vdGUgbGF5b3V0LCB5b3Ugc2F5ICdnaXQgYnJhbmNoIG5leHQKKyAgICAgb3JpZ2luL25leHQnLCB3aGljaCBhbGxvd3MgeW91IHRvIHVzZSB0aGUgbWF0Y2hpbmcgbmFtZQorICAgICAnbmV4dCcgZm9yIHlvdXIgb3duIGJyYW5jaC4gIEl0IGFsc28gYWxsb3dzIHlvdSB0byB0cmFjayBhCisgICAgIHJlbW90ZSBvdGhlciB0aGFuICdvcmlnaW4nIChpLmUuIHdoZXJlIHlvdSBpbml0aWFsbHkgY2xvbmVkCisgICAgIGZyb20pIGFuZCBmb3JrIG9mZiBvZiBhIGJyYW5jaCBmcm9tIHRoZXJlIHRoZSBzYW1lIHdheQorICAgICAoZS5nLiAiZ2l0IGJyYW5jaCBtaW5ndyBqNnQvbWFzdGVyIikuCisKKyAgIFJlcG9zaXRvcmllcyBpbml0aWFsaXplZCB3aXRoIHRoZSB0cmFkaXRpb25hbCBsYXlvdXQgY29udGludWUKKyAgIHRvIHdvcmsuCisKKyAtIE5ldyBicmFuY2hlcyB0aGF0IGFwcGVhciBvbiB0aGUgb3JpZ2luIHNpZGUgYWZ0ZXIgYSBjbG9uZSBpcworICAgbWFkZSBhcmUgYWxzbyB0cmFja2VkIGF1dG9tYXRpY2FsbHkuICBUaGlzIGlzIGRvbmUgd2l0aCBhbgorICAgd2lsZGNhcmQgcmVmc3BlYyAicmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIsIHdoaWNoCisgICBvbGRlciBnaXQgZG9lcyBub3QgdW5kZXJzdGFuZCwgc28gaWYgeW91IGNsb25lIHdpdGggMS41LjAsCisgICB5b3Ugd291bGQgbmVlZCB0byBkb3duZ3JhZGUgcmVtb3RlLiouZmV0Y2ggaW4gdGhlCisgICBjb25maWd1cmF0aW9uIGZpbGUgdG8gc3BlY2lmeSBlYWNoIGJyYW5jaCB5b3UgYXJlIGludGVyZXN0ZWQKKyAgIGluIGluZGl2aWR1YWxseSBpZiB5b3UgcGxhbiB0byBmZXRjaCBpbnRvIHRoZSByZXBvc2l0b3J5IHdpdGgKKyAgIG9sZGVyIHZlcnNpb25zIG9mIGdpdCAoYnV0IHdoeSB3b3VsZCB5b3U/KS4KKworIC0gU2ltaWxhcmx5LCB3aWxkY2FyZCByZWZzcGVjICJyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL21lLyoiCisgICBjYW4gYmUgZ2l2ZW4gdG8gImdpdC1wdXNoIiBjb21tYW5kIHRvIHVwZGF0ZSB0aGUgdHJhY2tpbmcKKyAgIGJyYW5jaGVzIHRoYXQgaXMgdXNlZCB0byB0cmFjayB0aGUgcmVwb3NpdG9yeSB5b3UgYXJlIHB1c2hpbmcKKyAgIGZyb20gb24gdGhlIHJlbW90ZSBzaWRlLgorCisgLSBnaXQtYnJhbmNoIGFuZCBnaXQtc2hvdy1icmFuY2gga25vdyByZW1vdGUgdHJhY2tpbmcgYnJhbmNoZXMKKyAgICh1c2UgdGhlIGNvbW1hbmQgbGluZSBzd2l0Y2ggIi1yIiB0byBsaXN0IG9ubHkgdHJhY2tlZCBicmFuY2hlcykuCisKKyAtIGdpdC1wdXNoIGNhbiBub3cgYmUgdXNlZCB0byBkZWxldGUgYSByZW1vdGUgYnJhbmNoIG9yIGEgdGFnLgorICAgVGhpcyByZXF1aXJlcyB0aGUgdXBkYXRlZCBnaXQgb24gdGhlIHJlbW90ZSBzaWRlICh1c2UgImdpdAorICAgcHVzaCA8cmVtb3RlPiA6cmVmcy9oZWFkcy88YnJhbmNoPiIgdG8gZGVsZXRlICJicmFuY2giKS4KKworIC0gZ2l0LXB1c2ggbW9yZSBhZ2dyZXNzaXZlbHkga2VlcHMgdGhlIHRyYW5zZmVycmVkIG9iamVjdHMKKyAgIHBhY2tlZC4gIEVhcmxpZXIgd2UgcmVjb21tZW5kZWQgdG8gbW9uaXRvciBhbW91bnQgb2YgbG9vc2UKKyAgIG9iamVjdHMgYW5kIHJlcGFjayByZWd1bGFybHksIGJ1dCB5b3Ugc2hvdWxkIHJlcGFjayB3aGVuIHlvdQorICAgYWNjdW11bGF0ZWQgdG9vIG1hbnkgc21hbGwgcGFja3MgdGhpcyB3YXkgYXMgd2VsbC4gIFVwZGF0ZWQKKyAgIGdpdC1jb3VudC1vYmplY3RzIGhlbHBzIHlvdSB3aXRoIHRoaXMuCisKKyAtIGdpdC1mZXRjaCBhbHNvIG1vcmUgYWdncmVzc2l2ZWx5IGtlZXBzIHRoZSB0cmFuc2ZlcnJlZCBvYmplY3RzCisgICBwYWNrZWQuICBUaGlzIGJlaGF2aW9yIG9mIGdpdC1wdXNoIGFuZCBnaXQtZmV0Y2ggY2FuIGJlCisgICB0d2Vha2VkIHdpdGggYSBzaW5nbGUgY29uZmlndXJhdGlvbiB0cmFuc2Zlci51bnBhY2tsaW1pdCAoYnV0CisgICB1c3VhbGx5IHRoZXJlIHNob3VsZCBub3QgYmUgYW55IG5lZWQgZm9yIGEgdXNlciB0byB0d2VhayBpdCkuCisKKyAtIEEgbmV3IGNvbW1hbmQsIGdpdC1yZW1vdGUsIGNhbiBoZWxwIHlvdSBtYW5hZ2UgeW91ciByZW1vdGUKKyAgIHRyYWNraW5nIGJyYW5jaCBkZWZpbml0aW9ucy4KKworIC0gWW91IG1heSBuZWVkIHRvIHNwZWNpZnkgZXhwbGljaXQgcGF0aHMgZm9yIHVwbG9hZC1wYWNrIGFuZC9vcgorICAgcmVjZWl2ZS1wYWNrIGR1ZSB0byB5b3VyIHNzaCBkYWVtb24gY29uZmlndXJhdGlvbiBvbiB0aGUKKyAgIG90aGVyIGVuZC4gIFRoaXMgY2FuIG5vdyBiZSBkb25lIHZpYSByZW1vdGUuKi51cGxvYWRwYWNrIGFuZAorICAgcmVtb3RlLioucmVjZWl2ZXBhY2sgY29uZmlndXJhdGlvbi4KKworCisqIEJhcmUgcmVwb3NpdG9yaWVzCisKKyAtIENlcnRhaW4gY29tbWFuZHMgY2hhbmdlIHRoZWlyIGJlaGF2aW9yIGluIGEgYmFyZSByZXBvc2l0b3J5CisgICAoaS5lLiBhIHJlcG9zaXRvcnkgd2l0aG91dCBhc3NvY2lhdGVkIHdvcmtpbmcgdHJlZSkuICBXZSB1c2UKKyAgIGEgZmFpcmx5IGNvbnNlcnZhdGl2ZSBoZXVyaXN0aWMgKGlmICRHSVRfRElSIGlzICIuZ2l0Iiwgb3IKKyAgIGVuZHMgd2l0aCAiLy5naXQiLCB0aGUgcmVwb3NpdG9yeSBpcyBub3QgYmFyZSkgdG8gZGVjaWRlIGlmIGEKKyAgIHJlcG9zaXRvcnkgaXMgYmFyZSwgYnV0ICJjb3JlLmJhcmUiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyAgIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBoZXVyaXN0aWMgd2hlbiBpdCBtaXNpZGVudGlmaWVzCisgICB5b3VyIHJlcG9zaXRvcnkuCisKKyAtIGdpdC1mZXRjaCB1c2VkIHRvIGNvbXBsYWluIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBidXQKKyAgIHRoaXMgaXMgbm93IGFsbG93ZWQgZm9yIGEgYmFyZSByZXBvc2l0b3J5LiAgU28gaXMgdGhlIHVzZSBvZgorICAgJ2dpdC1icmFuY2ggLWYnIHRvIHVwZGF0ZSB0aGUgY3VycmVudCBicmFuY2guCisKKyAtIFBvcmNlbGFpbi1pc2ggY29tbWFuZHMgdGhhdCByZXF1aXJlIGEgd29ya2luZyB0cmVlIHJlZnVzZXMgdG8KKyAgIHdvcmsgaW4gYSBiYXJlIHJlcG9zaXRvcnkuCisKKworKiBSZWZsb2cKKworIC0gUmVmbG9nIHJlY29yZHMgdGhlIGhpc3RvcnkgZnJvbSB0aGUgdmlldyBwb2ludCBvZiB0aGUgbG9jYWwKKyAgIHJlcG9zaXRvcnkuIEluIG90aGVyIHdvcmRzLCByZWdhcmRsZXNzIG9mIHRoZSByZWFsIGhpc3RvcnksCisgICB0aGUgcmVmbG9nIHNob3dzIHRoZSBoaXN0b3J5IGFzIHNlZW4gYnkgb25lIHBhcnRpY3VsYXIKKyAgIHJlcG9zaXRvcnkgKHRoaXMgZW5hYmxlcyB5b3UgdG8gYXNrICJ3aGF0IHdhcyB0aGUgY3VycmVudAorICAgcmV2aXNpb24gaW4gX3RoaXNfIHJlcG9zaXRvcnksIHllc3RlcmRheSBhdCAxcG0/IikuICBUaGlzCisgICBmYWNpbGl0eSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIHJlcG9zaXRvcmllcyB3aXRoIHdvcmtpbmcKKyAgIHRyZWVzLCBhbmQgY2FuIGJlIGFjY2Vzc2VkIHdpdGggdGhlICJicmFuY2hAe3RpbWV9IiBhbmQKKyAgICJicmFuY2hAe050aH0iIG5vdGF0aW9uLgorCisgLSAiZ2l0IHNob3ctYnJhbmNoIiBsZWFybmVkIHNob3dpbmcgdGhlIHJlZmxvZyBkYXRhIHdpdGggdGhlCisgICBuZXcgLWcgb3B0aW9uLiAgImdpdCBsb2ciIGhhcyAtZyBvcHRpb24gdG8gdmlldyByZWZsb2cKKyAgIGVudHJpZXMgaW4gYSBtb3JlIHZlcmJvc2UgbWFubmVyLgorCisgLSBnaXQtYnJhbmNoIGtub3dzIGhvdyB0byByZW5hbWUgYnJhbmNoZXMgYW5kIG1vdmVzIGV4aXN0aW5nCisgICByZWZsb2cgZGF0YSBmcm9tIHRoZSBvbGQgYnJhbmNoIHRvIHRoZSBuZXcgb25lLgorCisgLSBJbiBhZGRpdGlvbiB0byB0aGUgcmVmbG9nIHN1cHBvcnQgaW4gdjEuNC40IHNlcmllcywgSEVBRAorICAgcmVmZXJlbmNlIG1haW50YWlucyBpdHMgb3duIGxvZy4gICJIRUFEQHs1Lm1pbnV0ZXMuYWdvfSIKKyAgIG1lYW5zIHRoZSBjb21taXQgeW91IHdlcmUgYXQgNSBtaW51dGVzIGFnbywgd2hpY2ggdGFrZXMKKyAgIGJyYW5jaCBzd2l0Y2hpbmcgaW50byBhY2NvdW50LiAgSWYgeW91IHdhbnQgdG8ga25vdyB3aGVyZSB0aGUKKyAgIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIHdhcyBhdCA1IG1pbnV0ZXMgYWdvLCB5b3UgbmVlZCB0bworICAgZXhwbGljaXRseSBzYXkgaXRzIG5hbWUgKGUuZy4gIm1hc3RlckB7NS5taW51dGVzLmFnb30iKSBvcgorICAgb21pdCB0aGUgcmVmbmFtZSBhbHRvZ2V0aGVyIGkuZS4gIkB7NS5taW51dGVzLmFnb30iLgorCisgLSBUaGUgY29tbWl0cyByZWZlcnJlZCB0byBieSByZWZsb2cgZW50cmllcyBhcmUgbm93IHByb3RlY3RlZAorICAgYWdhaW5zdCBwcnVuaW5nLiAgVGhlIG5ldyBjb21tYW5kICJnaXQgcmVmbG9nIGV4cGlyZSIgY2FuIGJlCisgICB1c2VkIHRvIHRydW5jYXRlIG9sZGVyIHJlZmxvZyBlbnRyaWVzIGFuZCBlbnRyaWVzIHRoYXQgcmVmZXIKKyAgIHRvIGNvbW1pdHMgdGhhdCBoYXZlIGJlZW4gcHJ1bmVkIGF3YXkgcHJldmlvdXNseSB3aXRoIG9sZGVyCisgICB2ZXJzaW9ucyBvZiBnaXQuCisKKyAgIEV4aXN0aW5nIHJlcG9zaXRvcmllcyB0aGF0IGhhdmUgYmVlbiB1c2luZyByZWZsb2cgbWF5IGdldAorICAgY29tcGxhaW50cyBmcm9tIGZzY2stb2JqZWN0cyBhbmQgbWF5IG5vdCBiZSBhYmxlIHRvIHJ1bgorICAgZ2l0LXJlcGFjaywgaWYgeW91IGhhZCBydW4gZ2l0LXBydW5lIGZyb20gb2xkZXIgZ2l0OyBwbGVhc2UKKyAgIHJ1biAiZ2l0IHJlZmxvZyBleHBpcmUgLS1zdGFsZS1maXggLS1hbGwiIGZpcnN0IHRvIHJlbW92ZQorICAgcmVmbG9nIGVudHJpZXMgdGhhdCByZWZlciB0byBjb21taXRzIHRoYXQgYXJlIG5vIGxvbmdlciBpbgorICAgdGhlIHJlcG9zaXRvcnkgd2hlbiB0aGF0IGhhcHBlbnMuCisKKworKiBDcnVmdCByZW1vdmFsCisKKyAtIFdlIHVzZWQgdG8gc2F5ICJvbGQgY29tbWl0cyBhcmUgcmV0cmlldmFibGUgdXNpbmcgcmVmbG9nIGFuZAorICAgJ21hc3RlckB7eWVzdGVyZGF5fScgc3ludGF4IGFzIGxvbmcgYXMgeW91IGhhdmVuJ3QgcnVuCisgICBnaXQtcHJ1bmUiLiAgV2Ugbm8gbG9uZ2VyIGhhdmUgdG8gc2F5IHRoZSBsYXR0ZXIgaGFsZiBvZiB0aGUKKyAgIGFib3ZlIHNlbnRlbmNlLCBhcyBnaXQtcHJ1bmUgZG9lcyBub3QgcmVtb3ZlIHRoaW5ncyByZWFjaGFibGUKKyAgIGZyb20gcmVmbG9nIGVudHJpZXMuCisKKyAtIFRoZXJlIGlzIGEgdG9wbGV2ZWwgZ2FyYmFnZSBjb2xsZWN0b3Igc2NyaXB0LCAnZ2l0LWdjJywgdGhhdAorICAgcnVucyBwZXJpb2RpYyBjbGVhbnVwIGZ1bmN0aW9ucywgaW5jbHVkaW5nICdnaXQtcmVwYWNrIC1hIC1kJywKKyAgICdnaXQtcmVmbG9nIGV4cGlyZScsICdnaXQtcGFjay1yZWZzIC0tcHJ1bmUnLCBhbmQgJ2dpdC1yZXJlcmUKKyAgIGdjJy4KKworIC0gVGhlIG91dHB1dCBmcm9tIGZzY2sgKCJmc2NrLW9iamVjdHMiIGlzIGNhbGxlZCBqdXN0ICJmc2NrIgorICAgbm93LCBidXQgdGhlIG9sZCBuYW1lIGNvbnRpbnVlcyB0byB3b3JrKSB3YXMgbmVlZGxlc3NseQorICAgYWxhcm1pbmcgaW4gdGhhdCBpdCB3YXJuZWQgbWlzc2luZyBvYmplY3RzIHRoYXQgYXJlIHJlYWNoYWJsZQorICAgb25seSBmcm9tIGRhbmdsaW5nIG9iamVjdHMuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCBhbmQgdGhlCisgICBvdXRwdXQgaXMgbXVjaCBtb3JlIHVzZWZ1bC4KKworCisqIERldGFjaGVkIEhFQUQKKworIC0gWW91IGNhbiB1c2UgJ2dpdC1jaGVja291dCcgdG8gY2hlY2sgb3V0IGFuIGFyYml0cmFyeSByZXZpc2lvbgorICAgb3IgYSB0YWcgYXMgd2VsbCwgaW5zdGVhZCBvZiBuYW1lZCBicmFuY2hlcy4gIFRoaXMgd2lsbAorICAgZGlzc29jaWF0ZSB5b3VyIEhFQUQgZnJvbSB0aGUgYnJhbmNoIHlvdSBhcmUgY3VycmVudGx5IG9uLgorCisgICBBIHR5cGljYWwgdXNlIG9mIHRoaXMgZmVhdHVyZSBpcyB0byAibG9vayBhcm91bmQiLiAgRS5nLgorCisJJCBnaXQgY2hlY2tvdXQgdjIuNi4xNgorCS4uLiBjb21waWxlLCB0ZXN0LCBldGMuCisJJCBnaXQgY2hlY2tvdXQgdjIuNi4xNworCS4uLiBjb21waWxlLCB0ZXN0LCBldGMuCisKKyAtIEFmdGVyIGRldGFjaGluZyB5b3VyIEhFQUQsIHlvdSBjYW4gZ28gYmFjayB0byBhbiBleGlzdGluZworICAgYnJhbmNoIHdpdGggdXN1YWwgImdpdCBjaGVja291dCAkYnJhbmNoIi4gIEFsc28geW91IGNhbgorICAgc3RhcnQgYSBuZXcgYnJhbmNoIHVzaW5nICJnaXQgY2hlY2tvdXQgLWIgJG5ld2JyYW5jaCIgdG8KKyAgIHN0YXJ0IGEgbmV3IGJyYW5jaCBhdCB0aGF0IGNvbW1pdC4KKworIC0gWW91IGNhbiBldmVuIHB1bGwgZnJvbSBvdGhlciByZXBvc2l0b3JpZXMsIG1ha2UgbWVyZ2VzIGFuZAorICAgY29tbWl0cyB3aGlsZSB5b3VyIEhFQUQgaXMgZGV0YWNoZWQuICBBbHNvIHlvdSBjYW4gdXNlICJnaXQKKyAgIHJlc2V0IiB0byBqdW1wIHRvIGFyYml0cmFyeSBjb21taXQsIHdoaWxlIHN0aWxsIGtlZXBpbmcgeW91cgorICAgSEVBRCBkZXRhY2hlZC4KKworICAgUmVtZW1iZXIgdGhhdCBhIGRldGFjaGVkIHN0YXRlIGlzIHZvbGF0aWxlLCBpLmUuIGl0IHdpbGwgYmUgZm9yZ290dGVuCisgICBhcyBzb29uIGFzIHlvdSBtb3ZlIGF3YXkgZnJvbSBpdCB3aXRoIHRoZSBjaGVja291dCBvciByZXNldCBjb21tYW5kLAorICAgdW5sZXNzIGEgYnJhbmNoIGlzIGNyZWF0ZWQgZnJvbSBpdCBhcyBtZW50aW9uZWQgYWJvdmUuICBJdCBpcyBhbHNvCisgICBwb3NzaWJsZSB0byByZXNjdWUgYSBsb3N0IGRldGFjaGVkIHN0YXRlIGZyb20gdGhlIEhFQUQgcmVmbG9nLgorCisKKyogUGFja2VkIHJlZnMKKworIC0gUmVwb3NpdG9yaWVzIHdpdGggaHVuZHJlZHMgb2YgdGFncyBoYXZlIGJlZW4gcGF5aW5nIGxhcmdlCisgICBvdmVyaGVhZCwgYm90aCBpbiBzdG9yYWdlIGFuZCBpbiBydW50aW1lLCBkdWUgdG8gdGhlCisgICB0cmFkaXRpb25hbCBvbmUtcmVmLXBlci1maWxlIGZvcm1hdC4gIEEgbmV3IGNvbW1hbmQsCisgICBnaXQtcGFjay1yZWZzLCBjYW4gYmUgdXNlZCB0byAicGFjayIgdGhlbSBpbiBtb3JlIGVmZmljaWVudAorICAgcmVwcmVzZW50YXRpb24gKHlvdSBjYW4gbGV0IGdpdC1nYyBkbyB0aGlzIGZvciB5b3UpLgorCisgLSBDbG9uZXMgYW5kIGZldGNoZXMgb3ZlciBkdW1iIHRyYW5zcG9ydHMgYXJlIG5vdyBhd2FyZSBvZgorICAgcGFja2VkIHJlZnMgYW5kIGNhbiBkb3dubG9hZCBmcm9tIHJlcG9zaXRvcmllcyB0aGF0IHVzZQorICAgdGhlbS4KKworCisqIENvbmZpZ3VyYXRpb24KKworIC0gY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGNvbG9yIHNldHRpbmcgYXJlIGNvbnNvbGlkYXRlZCB1bmRlcgorICAgY29sb3IuKiBuYW1lc3BhY2UgKG9sZGVyIGRpZmYuY29sb3IuKiwgc3RhdHVzLmNvbG9yLiogYXJlCisgICBzdGlsbCBzdXBwb3J0ZWQpLgorCisgLSAnZ2l0LXJlcG8tY29uZmlnJyBjb21tYW5kIGlzIGFjY2Vzc2libGUgYXMgJ2dpdC1jb25maWcnIG5vdy4KKworCisqIFVwZGF0ZWQgZmVhdHVyZXMKKworIC0gZ2l0LWRlc2NyaWJlIHVzZXMgYmV0dGVyIGNyaXRlcmlhIHRvIHBpY2sgYSBiYXNlIHJlZi4gIEl0CisgICB1c2VkIHRvIHBpY2sgdGhlIG9uZSB3aXRoIHRoZSBuZXdlc3QgdGltZXN0YW1wLCBidXQgbm93IGl0CisgICBwaWNrcyB0aGUgb25lIHRoYXQgaXMgdG9wb2xvZ2ljYWxseSB0aGUgY2xvc2VzdCAodGhhdCBpcywKKyAgIGFtb25nIGFuY2VzdG9ycyBvZiBjb21taXQgQywgdGhlIHJlZiBUIHRoYXQgaGFzIHRoZSBzaG9ydGVzdAorICAgb3V0cHV0IGZyb20gImdpdC1yZXYtbGlzdCBULi5DIiBpcyBjaG9zZW4pLgorCisgLSBnaXQtZGVzY3JpYmUgZ2l2ZXMgdGhlIG51bWJlciBvZiBjb21taXRzIHNpbmNlIHRoZSBiYXNlIHJlZgorICAgYmV0d2VlbiB0aGUgcmVmbmFtZSBhbmQgdGhlIGhhc2ggc3VmZml4LiAgRS5nLiB0aGUgY29tbWl0IG9uZQorICAgYmVmb3JlIHYyLjYuMjAtcmM2IGluIHRoZSBrZXJuZWwgcmVwb3NpdG9yeSBpczoKKworCXYyLjYuMjAtcmM1LTMwNi1nYTIxYjA2OQorCisgICB3aGljaCB0ZWxscyB5b3UgdGhhdCBpdHMgb2JqZWN0IG5hbWUgYmVnaW5zIHdpdGggYTIxYjA2OSwKKyAgIHYyLjYuMjAtcmM1IGlzIGFuIGFuY2VzdG9yIG9mIGl0IChtZWFuaW5nLCB0aGUgY29tbWl0CisgICBjb250YWlucyBldmVyeXRoaW5nIC1yYzUgaGFzKSwgYW5kIHRoZXJlIGFyZSAzMDYgY29tbWl0cworICAgc2luY2UgdjIuNi4yMC1yYzUuCisKKyAtIGdpdC1kZXNjcmliZSB3aXRoIC0tYWJicmV2PTAgY2FuIGJlIHVzZWQgdG8gc2hvdyBvbmx5IHRoZQorICAgbmFtZSBvZiB0aGUgYmFzZSByZWYuCisKKyAtIGdpdC1ibGFtZSBsZWFybmVkIGEgbmV3IG9wdGlvbiwgLS1pbmNyZW1lbnRhbCwgdGhhdCB0ZWxscyBpdAorICAgdG8gb3V0cHV0IHRoZSBibGFtZXMgYXMgdGhleSBhcmUgYXNzaWduZWQuICBBIHNhbXBsZSBzY3JpcHQKKyAgIHRvIHVzZSBpdCBpcyBhbHNvIGluY2x1ZGVkIGFzIGNvbnRyaWIvYmxhbWV2aWV3LgorCisgLSBnaXQtYmxhbWUgc3RhcnRzIGFubm90YXRpbmcgZnJvbSB0aGUgd29ya2luZyB0cmVlIGJ5IGRlZmF1bHQuCisKKworKiBMZXNzIGV4dGVybmFsIGRlcGVuZGVuY3kKKworIC0gV2Ugbm8gbG9uZ2VyIHJlcXVpcmUgdGhlICJtZXJnZSIgcHJvZ3JhbSBmcm9tIHRoZSBSQ1Mgc3VpdGUuCisgICBBbGwgMy13YXkgZmlsZS1sZXZlbCBtZXJnZXMgYXJlIG5vdyBkb25lIGludGVybmFsbHkuCisKKyAtIFRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBvZiBnaXQtbWVyZ2UtcmVjdXJzaXZlIHdoaWNoIHdhcworICAgaW4gUHl0aG9uIGhhcyBiZWVuIHJlbW92ZWQ7IHdlIGhhdmUgYSBDIGltcGxlbWVudGF0aW9uIG9mIGl0CisgICBub3cuCisKKyAtIGdpdC1zaG9ydGxvZyBpcyBubyBsb25nZXIgYSBQZXJsIHNjcmlwdC4gIEl0IG5vIGxvbmdlcgorICAgcmVxdWlyZXMgb3V0cHV0IHBpcGVkIGZyb20gZ2l0LWxvZzsgaXQgY2FuIGFjY2VwdCByZXZpc2lvbgorICAgcGFyYW1ldGVycyBkaXJlY3RseSBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisKKyogSTE4bgorCisgLSBXZSBoYXZlIGFsd2F5cyBlbmNvdXJhZ2VkIHRoZSBjb21taXQgbWVzc2FnZSB0byBiZSBlbmNvZGVkIGluCisgICBVVEYtOCwgYnV0IHRoZSB1c2VycyBhcmUgYWxsb3dlZCB0byB1c2UgbGVnYWN5IGVuY29kaW5nIGFzCisgICBhcHByb3ByaWF0ZSBmb3IgdGhlaXIgcHJvamVjdHMuICBUaGlzIHdpbGwgY29udGludWUgdG8gYmUgdGhlCisgICBjYXNlLiAgSG93ZXZlciwgYSBub24gVVRGLTggY29tbWl0IGVuY29kaW5nIF9tdXN0XyBiZQorICAgZXhwbGljaXRseSBzZXQgd2l0aCBpMThuLmNvbW1pdGVuY29kaW5nIGluIHRoZSByZXBvc2l0b3J5CisgICB3aGVyZSBhIGNvbW1pdCBpcyBtYWRlOyBvdGhlcndpc2UgZ2l0LWNvbW1pdC10cmVlIHdpbGwKKyAgIGNvbXBsYWluIGlmIHRoZSBsb2cgbWVzc2FnZSBkb2VzIG5vdCBsb29rIGxpa2UgYSB2YWxpZCBVVEYtOAorICAgc3RyaW5nLgorCisgLSBUaGUgdmFsdWUgb2YgaTE4bi5jb21taXRlbmNvZGluZyBpbiB0aGUgb3JpZ2luYXRpbmcKKyAgIHJlcG9zaXRvcnkgaXMgcmVjb3JkZWQgaW4gdGhlIGNvbW1pdCBvYmplY3Qgb24gdGhlICJlbmNvZGluZyIKKyAgIGhlYWRlciwgaWYgaXQgaXMgbm90IFVURi04LiAgZ2l0LWxvZyBhbmQgZnJpZW5kcyBub3RpY2UgdGhpcywKKyAgIGFuZCByZS1lbmNvZGVzIHRoZSBtZXNzYWdlIHRvIHRoZSBsb2cgb3V0cHV0IGVuY29kaW5nIHdoZW4KKyAgIGRpc3BsYXlpbmcsIGlmIHRoZXkgYXJlIGRpZmZlcmVudC4gIFRoZSBsb2cgb3V0cHV0IGVuY29kaW5nCisgICBpcyBkZXRlcm1pbmVkIGJ5ICJnaXQgbG9nIC0tZW5jb2Rpbmc9PGVuY29kaW5nPiIsCisgICBpMThuLmxvZ291dHB1dGVuY29kaW5nIGNvbmZpZ3VyYXRpb24sIG9yIGkxOG4uY29tbWl0ZW5jb2RpbmcKKyAgIGNvbmZpZ3VyYXRpb24sIGluIHRoZSBkZWNyZWFzaW5nIG9yZGVyIG9mIHByZWZlcmVuY2UsIGFuZAorICAgZGVmYXVsdHMgdG8gVVRGLTguCisKKyAtIFRvb2xzIGZvciBlLW1haWxlZCBwYXRjaCBhcHBsaWNhdGlvbiBub3cgZGVmYXVsdCB0byAtdQorICAgYmVoYXZpb3I7IGkuZS4gaXQgYWx3YXlzIHJlLWNvZGVzIGZyb20gdGhlIGUtbWFpbGVkIGVuY29kaW5nCisgICB0byB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIHdpdGggaTE4bi5jb21taXRlbmNvZGluZy4gIFRoaXMKKyAgIHVuZm9ydHVuYXRlbHkgZm9yY2VzIHByb2plY3RzIHRoYXQgaGF2ZSBoYXBwaWx5IGJlZW4gdXNpbmcgYQorICAgbGVnYWN5IGVuY29kaW5nIHdpdGhvdXQgc2V0dGluZyBpMThuLmNvbW1pdGVuY29kaW5nIHRvIHNldAorICAgdGhlIGNvbmZpZ3VyYXRpb24sIGJ1dCB0YWtlbiB3aXRoIG90aGVyIGltcHJvdmVtZW50LCBwbGVhc2UKKyAgIGV4Y3VzZSB1cyBmb3IgdGhpcyB2ZXJ5IG1pbm9yIG9uZS10aW1lIGluY29udmVuaWVuY2UuCisKKworKiBlLW1haWxlZCBwYXRjaGVzCisKKyAtIFNlZSB0aGUgYWJvdmUgSTE4biBzZWN0aW9uLgorCisgLSBnaXQtZm9ybWF0LXBhdGNoIG5vdyBlbmFibGVzIC0tYmluYXJ5IHdpdGhvdXQgYmVpbmcgYXNrZWQuCisgICBnaXQtYW0gZG9lcyBfbm90XyBkZWZhdWx0IHRvIGl0LCBhcyBzZW5kaW5nIGJpbmFyeSBwYXRjaCB2aWEKKyAgIGUtbWFpbCBpcyB1bnVzdWFsIGFuZCBpcyBoYXJkZXIgdG8gcmV2aWV3IHRoYW4gdGV4dHVhbAorICAgcGF0Y2hlcyBhbmQgaXQgaXMgcHJ1ZGVudCB0byByZXF1aXJlIHRoZSBwZXJzb24gd2hvIGlzCisgICBhcHBseWluZyB0aGUgcGF0Y2ggdG8gZXhwbGljaXRseSBhc2sgZm9yIGl0LgorCisgLSBUaGUgZGVmYXVsdCBzdWZmaXggZm9yIGdpdC1mb3JtYXQtcGF0Y2ggb3V0cHV0IGlzIG5vdyAiLnBhdGNoIiwKKyAgIG5vdCAiLnR4dCIuICBUaGlzIGNhbiBiZSBjaGFuZ2VkIHdpdGggLS1zdWZmaXg9LnR4dCBvcHRpb24sCisgICBvciBzZXR0aW5nIHRoZSBjb25maWcgdmFyaWFibGUgImZvcm1hdC5zdWZmaXgiIHRvICIudHh0Ii4KKworCisqIEZvcmVpZ24gU0NNIGludGVyZmFjZXMKKworIC0gZ2l0LXN2biBub3cgcmVxdWlyZXMgdGhlIFBlcmwgU1ZOOjogbGlicmFyaWVzLCB0aGUKKyAgIGNvbW1hbmQtbGluZSBiYWNrZW5kIHdhcyB0b28gc2xvdyBhbmQgbGltaXRlZC4KKworIC0gdGhlICdjb21taXQnIHN1YmNvbW1hbmQgb2YgZ2l0LXN2biBoYXMgYmVlbiByZW5hbWVkIHRvCisgICAnc2V0LXRyZWUnLCBhbmQgJ2Rjb21taXQnIGlzIHRoZSByZWNvbW1lbmRlZCByZXBsYWNlbWVudCBmb3IKKyAgIGRheS10by1kYXkgd29yay4KKworIC0gZ2l0IGZhc3QtaW1wb3J0IGJhY2tlbmQuCisKKworKiBVc2VyIHN1cHBvcnQKKworIC0gUXVpdGUgYSBsb3Qgb2YgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCisgLSBCYXNoIGNvbXBsZXRpb24gc2NyaXB0cyBoYXZlIGJlZW4gdXBkYXRlZCBoZWF2aWx5LgorCisgLSBCZXR0ZXIgZXJyb3IgbWVzc2FnZXMgZm9yIG9mdGVuIHVzZWQgUG9yY2VsYWluaXNoIGNvbW1hbmRzLgorCisgLSBHaXQgR1VJLiAgVGhpcyBpcyBhIHNpbXBsZSBUayBiYXNlZCBncmFwaGljYWwgaW50ZXJmYWNlIGZvcgorICAgY29tbW9uIEdpdCBvcGVyYXRpb25zLgorCisKKyogU2xpZGluZyBtbWFwCisKKyAtIFdlIHVzZWQgdG8gYXNzdW1lIHRoYXQgd2UgY2FuIG1tYXAgdGhlIHdob2xlIHBhY2tmaWxlIHdoaWxlCisgICBpbiB1c2UsIGJ1dCB3aXRoIGEgbGFyZ2UgcHJvamVjdCB0aGlzIGNvbnN1bWVzIGh1Z2UgdmlydHVhbAorICAgbWVtb3J5IHNwYWNlIGFuZCB0cnVseSBodWdlIG9uZXMgd291bGQgbm90IGZpdCBpbiB0aGUKKyAgIHVzZXJsYW5kIGFkZHJlc3Mgc3BhY2Ugb24gMzItYml0IHBsYXRmb3Jtcy4gIFdlIG5vdyBtbWFwIGh1Z2UKKyAgIHBhY2tmaWxlIGluIHBpZWNlcyB0byBhdm9pZCB0aGlzIHByb2JsZW0uCisKKworKiBTaGFsbG93IGNsb25lcworCisgLSBUaGVyZSBpcyBhIHBhcnRpYWwgc3VwcG9ydCBmb3IgJ3NoYWxsb3cnIHJlcG9zaXRvcmllcyB0aGF0CisgICBrZWVwcyBvbmx5IHJlY2VudCBoaXN0b3J5LiAgQSAnc2hhbGxvdyBjbG9uZScgaXMgY3JlYXRlZCBieQorICAgc3BlY2lmeWluZyBob3cgZGVlcCB0aGF0IHRydW5jYXRlZCBoaXN0b3J5IHNob3VsZCBiZQorICAgKGUuZy4gImdpdCBjbG9uZSAtLWRlcHRoIDUgZ2l0Oi8vc29tZS53aGVyZS9yZXBvLmdpdCIpLgorCisgICBDdXJyZW50bHkgYSBzaGFsbG93IHJlcG9zaXRvcnkgaGFzIG51bWJlciBvZiBsaW1pdGF0aW9uczoKKworICAgLSBDbG9uaW5nIGFuZCBmZXRjaGluZyBfZnJvbV8gYSBzaGFsbG93IGNsb25lIGFyZSBub3QKKyAgICAgc3VwcG9ydGVkIChub3IgdGVzdGVkIC0tIHNvIHRoZXkgbWlnaHQgd29yayBieSBhY2NpZGVudCBidXQKKyAgICAgdGhleSBhcmUgbm90IGV4cGVjdGVkIHRvKS4KKworICAgLSBQdXNoaW5nIGZyb20gbm9yIGludG8gYSBzaGFsbG93IGNsb25lIGFyZSBub3QgZXhwZWN0ZWQgdG8KKyAgICAgd29yay4KKworICAgLSBNZXJnaW5nIGluc2lkZSBhIHNoYWxsb3cgcmVwb3NpdG9yeSB3b3VsZCB3b3JrIGFzIGxvbmcgYXMgYQorICAgICBtZXJnZSBiYXNlIGlzIGZvdW5kIGluIHRoZSByZWNlbnQgaGlzdG9yeSwgYnV0IG90aGVyd2lzZSBpdAorICAgICB3aWxsIGJlIGxpa2UgbWVyZ2luZyB1bnJlbGF0ZWQgaGlzdG9yaWVzIGFuZCBtYXkgcmVzdWx0IGluCisgICAgIGh1Z2UgY29uZmxpY3RzLgorCisgICBidXQgdGhpcyB3b3VsZCBiZSBtb3JlIHRoYW4gYWRlcXVhdGUgZm9yIHBlb3BsZSB3aG8gd2FudCB0bworICAgbG9vayBhdCBuZWFyIHRoZSB0aXAgb2YgYSBiaWcgcHJvamVjdCB3aXRoIGEgZGVlcCBoaXN0b3J5IGFuZAorICAgc2VuZCBwYXRjaGVzIGluIGUtbWFpbCBmb3JtYXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTQ3MTIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS4xLnR4dApAQCAtMCwwICsxLDY1IEBACitHSVQgdjEuNS4xLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4xCistLS0tLS0tLS0tLS0tLS0tLS0KKworKiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMKKworICAtIFRoZSAtLWxlZnQtcmlnaHQgb3B0aW9uIG9mIHJldi1saXN0IGFuZCBmcmllbmRzIGlzIGRvY3VtZW50ZWQuCisKKyAgLSBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgY3ZzaW1wb3J0IGhhcyBiZWVuIG1ham9ybHkgaW1wcm92ZWQuCisKKyAgLSAiZ2l0LXNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZyIgd2FzIGRvY3VtZW50ZWQuCisKKyogQnVnZml4ZXMKKworICAtIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiAtcCBvcHRpb24gaW4gImdpdCBjdnNleHBvcnRjb21taXQiIGhhZAorICAgIHRoZSBtZWFuaW5nIG9mIC1DIChjb250ZXh0IHJlZHVjdGlvbikgb3B0aW9uIHdyb25nLCBhbmQKKyAgICBsb29zZW5lZCB0aGUgY29udGV4dCByZXF1aXJlbWVudHMgd2hlbiBpdCB3YXMgdG9sZCB0byBiZQorICAgIHN0cmljdC4KKworICAtICJnaXQgY3Zzc2VydmVyIiBkaWQgbm90IGJlaGF2ZSBsaWtlIHRoZSByZWFsIGN2c3NlcnZlciB3aGVuCisgICAgY2xpZW50IHNpZGUgcmVtb3ZlZCBhIGZpbGUgZnJvbSB0aGUgd29ya2luZyB0cmVlIHdpdGhvdXQKKyAgICBkb2luZyBhbnl0aGluZyBlbHNlIG9uIHRoZSBwYXRoLiAgSW4gc3VjaCBhIGNhc2UsIGl0IHNob3VsZAorICAgIHJlc3RvcmUgaXQgZnJvbSB0aGUgY2hlY2tlZCBvdXQgcmV2aXNpb24uCisKKyAgLSAiZ2l0IGZzY2siIGlzc3VlZCBhbiBhbGFybWluZyBlcnJvciBtZXNzYWdlIG9uIGRldGFjaGVkCisgICAgSEVBRC4gIEl0IGlzIG5vdCBhbiBlcnJvciBzaW5jZSBhdCBsZWFzdCAxLjUuMC4KKworICAtICJnaXQgc2VuZC1lbWFpbCIgcHJvZHVjZWQgb2YgUmVmZXJlbmNlcyBoZWFkZXIgb2YgdW5ib3VuZGVkIGxlbmd0aDsKKyAgICBmaXhlZCB0aGlzIHdpdGggbGluZS1mb2xkaW5nLgorCisgIC0gImdpdCBhcmNoaXZlIiB0byBkb3dubG9hZCBmcm9tIHJlbW90ZSBzaXRlIHNob3VsZCBub3QKKyAgICByZXF1aXJlIHlvdSB0byBiZSBpbiBhIGdpdCByZXBvc2l0b3J5LCBidXQgaXQgaW5jb3JyZWN0bHkKKyAgICBkaWQuCisKKyAgLSAiZ2l0IGFwcGx5IiBpZ25vcmVkIC1wPG4+IGZvciAiZGlmZiAtLWdpdCIgZm9ybWF0dGVkCisgICAgcGF0Y2hlcy4KKworICAtICJnaXQgcmVyZXJlIiByZWNvcmRlZCBhIGNvbmZsaWN0IHRoYXQgaGFkIG9uZSBzaWRlIGVtcHR5CisgICAgKHRoZSBvdGhlciBzaWRlIGFkZHMpIGluY29ycmVjdGx5OyB0aGlzIG1hZGUgbWVyZ2luZyBpbiB0aGUKKyAgICBvdGhlciBkaXJlY3Rpb24gZmFpbCB0byB1c2UgcHJldmlvdXNseSByZWNvcmRlZCByZXNvbHV0aW9uLgorCisgIC0gdDQyMDAgdGVzdCB3YXMgYnJva2VuIHdoZXJlICJ3YyAtbCIgcGFkcyBpdHMgb3V0cHV0IHdpdGgKKyAgICBzcGFjZXMuCisKKyAgLSAiZ2l0IGJyYW5jaCAtbSBvbGQgbmV3IiB0byByZW5hbWUgYnJhbmNoIGRpZCBub3Qgd29yaworICAgIHdpdGhvdXQgYSBjb25maWd1cmF0aW9uIGZpbGUgaW4gIi5naXQvY29uZmlnIi4KKworICAtIFRoZSBzYW1wbGUgaG9vayBmb3Igbm90aWZpY2F0aW9uIGUtbWFpbCB3YXMgbWlzbmFtZWQuCisKKyAgLSBnaXR3ZWIgZGlkIG5vdCBzaG93IHR5cGUtY2hhbmdpbmcgcGF0Y2ggY29ycmVjdGx5IGluIHRoZQorICAgIGJsb2JkaWZmIHZpZXcuCisKKyAgLSBnaXQtc3ZuIGRpZCBub3QgZXJyb3Igb3V0IHdpdGggaW5jb3JyZWN0IGNvbW1hbmQgbGluZSBvcHRpb25zLgorCisgIC0gZ2l0LXN2biBmZWxsIGludG8gYW4gaW5maW5pdGUgbG9vcCB3aGVuIGluc2FuZWx5IGxvbmcgY29tbWl0CisgICAgbWVzc2FnZSB3YXMgZm91bmQuCisKKyAgLSBnaXQtc3ZuIGRjb21taXQgYW5kIHJlYmFzZSB3YXMgY29uZnVzZWQgYnkgcGF0Y2hlcyB0aGF0IHdlcmUKKyAgICBtZXJnZWQgZnJvbSBhbm90aGVyIGJyYW5jaCB0aGF0IGlzIG1hbmFnZWQgYnkgZ2l0LXN2bi4KKworICAtIGdpdC1zdm4gdXNlZCB0byBnZXQgY29uZnVzZWQgd2hlbiBnbG9iYmluZyByZW1vdGUgYnJhbmNoL3RhZworICAgIHNwZWMgKGUuZy4gImJyYW5jaGVzID0gcHJvai9icmFuY2hlcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpCisgICAgaXMgdXNlZCBhbmQgdGhlcmUgd2FzIGEgcGxhaW4gZmlsZSB0aGF0IG1hdGNoZWQgdGhlIGdsb2IuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODg0NTYzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS4yLnR4dApAQCAtMCwwICsxLDUwIEBACitHSVQgdjEuNS4xLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4xLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQnVnZml4ZXMKKworICAtICJnaXQgY2xvbmUiIG92ZXIgaHR0cCBmcm9tIGEgcmVwb3NpdG9yeSB0aGF0IGhhcyBsb3N0IHRoZQorICAgIGxvb3NlIHJlZnMgYnkgcnVubmluZyAiZ2l0IHBhY2stcmVmcyIgd2VyZSBicm9rZW4gKGEgY29kZSB0bworICAgIGRlYWwgd2l0aCB0aGlzIHdhcyBhZGRlZCB0byAiZ2l0IGZldGNoIiBpbiB2MS41LjAsIGJ1dCBpdAorICAgIHdhcyBtaXNzaW5nIGZyb20gImdpdCBjbG9uZSIpLgorCisgIC0gImdpdCBkaWZmIGEvIGIvIiBpbmNvcnJlY3RseSBmZWxsIGluICJkaWZmIGJldHdlZW4gdHdvCisgICAgZmlsZXN5c3RlbSBvYmplY3RzIiBjb2RlcGF0aCwgd2hlbiB0aGUgdXNlciBtb3N0IGxpa2VseQorICAgIHdhbnRlZCB0byBsaW1pdCB0aGUgZXh0ZW50IG9mIG91dHB1dCB0byB0d28gdHJhY2tlZAorICAgIGRpcmVjdG9yaWVzLgorCisgIC0gZ2l0LXF1aWx0aW1wb3J0IGhhZCB0aGUgc2FtZSBidWcgYXMgd2UgZml4ZWQgZm9yCisgICAgZ2l0LWFwcGx5bWJveCBpbiB2MS41LjEuMSAtLSBpdCBnYXZlIGFuIGFsYXJtaW5nICJkaWQgbm90CisgICAgaGF2ZSBhbnkgcGF0Y2giIG1lc3NhZ2UgKGJ1dCBkaWQgbm90IGFjdHVhbGx5IGZhaWwgYW5kIHdhcworICAgIGhhcm1sZXNzKS4KKworICAtIHZhcmlvdXMgZ2l0LXN2biBmaXhlcy4KKworICAtIFNhbXBsZSB1cGRhdGUgaG9vayBpbmNvcnJlY3RseSBhbHdheXMgcmVmdXNlZCByZXF1ZXN0cyB0bworICAgIGRlbGV0ZSBicmFuY2hlcyB0aHJvdWdoIHB1c2guCisKKyAgLSBnaXQtYmxhbWUgb24gYSB2ZXJ5IGxvbmcgd29ya2luZyB0cmVlIHBhdGggaGFkIGJ1ZmZlcgorICAgIG92ZXJydW4gcHJvYmxlbS4KKworICAtIGdpdC1hcHBseSBkaWQgbm90IGxpa2UgdG8gYmUgZmVkIHR3byBwYXRjaGVzIGluIGEgcm93IHRoYXQgY3JlYXRlZAorICAgIGFuZCB0aGVuIG1vZGlmaWVkIHRoZSBzYW1lIGZpbGUuCisKKyAgLSBnaXQtc3ZuIHdhcyBjb25mdXNlZCB3aGVuIGEgbm9uLXByb2plY3Qgd2FzIHN0b3JlZCBkaXJlY3RseSB1bmRlcgorICAgIHRydW5rLywgYnJhbmNoZXMvIGFuZCB0YWdzLy4KKworICAtIGdpdC1zdm4gd2FudHMgdGhlIEVycm9yLnBtIG1vZHVsZSB0aGF0IHdhcyBhdCBsZWFzdCBhcyBuZXcKKyAgICBhcyB3aGF0IHdlIHNoaXAgYXMgcGFydCBvZiBnaXQ7IGluc3RhbGwgb3VycyBpbiBvdXIgcHJpdmF0ZQorICAgIGluc3RhbGxhdGlvbiBsb2NhdGlvbiBpZiB0aGUgb25lIG9uIHRoZSBzeXN0ZW0gaXMgb2xkZXIuCisKKyAgLSBBbiBlYXJsaWVyIHVwZGF0ZSB0byBjb21tYW5kIGxpbmUgaW50ZWdlciBwYXJhbWV0ZXIgcGFyc2VyIHdhcworICAgIGJvdGNoZWQgYW5kIG1hZGUgJ3VwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbycgY29tcGxldGVseSB1c2VsZXNzLgorCisKKyogRG9jdW1lbnRhdGlvbiB1cGRhdGVzCisKKyAgLSBWYXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBmcm9tIEouIEJydWNlIEZpZWxkcywgRnJhbmsKKyAgICBMaWNodGVuaGVsZCwgQWxleCBSaWVzZW4gYW5kIG90aGVycy4gIEFuZHJldyBSdWRlciBzdGFydGVkIGEKKyAgICB3YXIgb24gdW5kb2N1bWVudGVkIG9wdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzY0MDhiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS4zLnR4dApAQCAtMCwwICsxLDQ1IEBACitHSVQgdjEuNS4xLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4xLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQnVnZml4ZXMKKworICAtIGdpdC1hZGQgdHJpZWQgdG8gb3B0aW1pemUgYnkgZmluZGluZyBjb21tb24gbGVhZGluZworICAgIGRpcmVjdG9yaWVzIGFjcm9zcyBpdHMgYXJndW1lbnRzIGJ1dCBib3RjaGVkLCBjYXVzaW5nIHZlcnkKKyAgICBjb25mdXNlZCBiZWhhdmlvdXIuCisKKyAgLSB1bm9mZmljaWFsIHJwbS5zcGVjIGZpbGUgc2hpcHBlZCB3aXRoIGdpdCB3YXMgbGV0dGluZworICAgIEVUQ19HSVRDT05GSUcgc2V0IHRvIC91c3IvZXRjL2dpdGNvbmZpZy4gIFR3ZWFrIHRoZSBvZmZpY2lhbAorICAgIE1ha2VmaWxlIHRvIG1ha2UgaXQgaGFyZGVyIGZvciBkaXN0cm8gcGVvcGxlIHRvIG1ha2UgdGhlCisgICAgc2FtZSBtaXN0YWtlLCBieSBzZXR0aW5nIHRoZSB2YXJpYWJsZSB0byAvZXRjL2dpdGNvbmZpZyBpZgorICAgIHByZWZpeCBpcyBzZXQgdG8gL3Vzci4KKworICAtIGdpdC1zdm4gaW5jb25zaXN0ZW50bHkgc3RyaXBwZWQgYXdheSB1c2VybmFtZSBmcm9tIHRoZSBVUkwKKyAgICBvbmx5IHdoZW4gc3Zuc3luY19wcm9wcyB3YXMgaW4gdXNlLgorCisgIC0gZ2l0LXN2biBnb3QgY29uZnVzZWQgd2hlbiBoYW5kbGluZyBzeW1saW5rcyBvbiBNYWMgT1MuCisKKyAgLSBnaXQtc2VuZC1lbWFpbCB3YXMgbm90IHF1b3RpbmcgcmVjaXBpZW50IG5hbWVzIHRoYXQgaGF2ZQorICAgIHBlcmlvZCAnLicgaW4gdGhlbS4gIEFsc28gaXQgZGlkIG5vdCBhbGxvdyBvdmVycmlkaW5nCisgICAgZW52ZWxvcGUgc2VuZGVyLCB3aGljaCBtYWRlIGl0IGltcG9zc2libGUgdG8gc2VuZCBwYXRjaGVzIHRvCisgICAgY2VydGFpbiBzdWJzY3JpYmVyLW9ubHkgbGlzdHMuCisKKyAgLSBidWlsdC1pbiB3cml0ZV90cmVlKCkgcm91dGluZSBoYWQgYSBzZXF1ZW5jZSB0aGF0IHJlbmFtZWQgYQorICAgIGZpbGUgdGhhdCBpcyBzdGlsbCBvcGVuLCB3aGljaCBzb21lIHN5c3RlbXMgZGlkIG5vdCBsaWtlLgorCisgIC0gd2hlbiBtZW1vcnkgaXMgdmVyeSB0aWdodCwgc2xpZGluZyBtbWFwIGNvZGUgdG8gcmVhZAorICAgIHBhY2tmaWxlcyBpbmNvcnJlY3RseSBjbG9zZWQgdGhlIGZkIHRoYXQgd2FzIHN0aWxsIGJlaW5nCisgICAgdXNlZCB0byByZWFkIHRoZSBwYWNrLgorCisgIC0gaW1wb3J0LXRhcnMgY29udHJpYnV0ZWQgZnJvbnQtZW5kIGZvciBmYXN0aW1wb3J0IHdhcyBwYXNzaW5nCisgICAgd3JvbmcgZGlyZWN0b3J5IG1vZGVzIHdpdGhvdXQgY2hlY2tpbmcuCisKKyAgLSBnaXQtZmFzdGltcG9ydCB0cnVzdGVkIGl0cyBpbnB1dCB0b28gbXVjaCBhbmQgYWxsb3dlZCB0bworICAgIGNyZWF0ZSBjb3JydXB0IHRyZWUgb2JqZWN0cyB3aXRoIGVudHJpZXMgd2l0aG91dCBhIG5hbWUuCisKKyAgLSBnaXQtZmV0Y2ggbmVlZGxlc3NseSBiYXJmZWQgd2hlbiB0b28gbG9uZyByZWZsb2cgYWN0aW9uCisgICAgZGVzY3JpcHRpb24gd2FzIGdpdmVuIGJ5IHRoZSBjYWxsZXIuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjJmNjZjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS40LnR4dApAQCAtMCwwICsxLDMwIEBACitHSVQgdjEuNS4xLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4xLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQnVnZml4ZXMKKworICAtICJnaXQtaHR0cC1mZXRjaCIgZGlkIG5vdCB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBsaWJjdXJsCisgICAgZWFybGllciB0aGFuIDcuMTYgKGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgpIHdhcyBicm9rZW4pLgorCisgIC0gImdpdCBjdnNzZXJ2ZXIiIGhhbmRsZXMgYSBmaWxlIHRoYXQgd2FzIG9uY2UgcmVtb3ZlZCBhbmQKKyAgICB0aGVuIGFkZGVkIGFnYWluIGNvcnJlY3RseS4KKworICAtIGltcG9ydC10YXJzIHNjcmlwdCAoaW4gY29udHJpYi8pIGhhbmRsZXMgR05VIHRhciBhcmNoaXZlcworICAgIHRoYXQgY29udGFpbiBwYXRobmFtZXMgbG9uZ2VyIHRoYW4gMTAwIGJ5dGVzIChsb25nLWxpbmsKKyAgICBleHRlbnNpb24pIGNvcnJlY3RseS4KKworICAtIHhkZWx0YSB0ZXN0IHByb2dyYW0gZGlkIG5vdCBidWlsZCBjb3JyZWN0bHkuCisKKyAgLSBnaXR3ZWIgc29tZXRpbWVzIHRyaWVkIGluY29ycmVjdGx5IHRvIGFwcGx5IGZ1bmN0aW9uIHRvCisgICAgZGVjb2RlIHV0ZjggdHdpY2UsIHJlc3VsdGluZyBpbiBjb3JydXB0IG91dHB1dC4KKworICAtICJnaXQgYmxhbWUgLUMiIG1pc2hhbmRsZWQgdGV4dCBhdCB0aGUgZW5kIG9mIGEgZ3JvdXAgb2YKKyAgICBsaW5lcy4KKworICAtICJnaXQgbG9nL3Jldi1saXN0IC0tYm91bmRhcnkiIGRpZCBub3QgcHJvZHVjZSBvdXRwdXQKKyAgICBjb3JyZWN0bHkgd2l0aG91dCAtLWxlZnQtcmlnaHQgb3B0aW9uLgorCisgIC0gTWFueSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGFiOGViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS41LnR4dApAQCAtMCwwICsxLDQyIEBACitHSVQgdjEuNS4xLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4xLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQnVnZml4ZXMKKworICAtIGdpdC1zZW5kLWVtYWlsIGRpZCBub3QgdW5kZXJzdGFuZCBhbGlhc2VzIGZpbGUgZm9yIG11dHQsIHdoaWNoCisgICAgYWxsb3dzIGxlYWRpbmcgd2hpdGVzcGFjZXMuCisKKyAgLSBnaXQtZm9ybWF0LXBhdGNoIGVtaXR0ZWQgQ29udGVudC1UeXBlIGFuZCBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nCisgICAgaGVhZGVycyBmb3Igbm9uIEFTQ0lJIGNvbnRlbnRzLCBidXQgZmFpbGVkIHRvIGFkZCBNSU1FLVZlcnNpb24uCisKKyAgLSBnaXQtbmFtZS1yZXYgaGFkIGEgYnVmZmVyIG92ZXJydW4gd2l0aCBhIGRlZXAgaGlzdG9yeS4KKworICAtIGNvbnRyaWJ1dGVkIHNjcmlwdCBpbXBvcnQtdGFycyBkaWQgbm90IGdldCB0aGUgZGlyZWN0b3J5IGluCisgICAgdGFyIGFyY2hpdmVzIGludGVycHJldGVkIGNvcnJlY3RseS4KKworICAtIGdpdC1zdm4gd2FzIHJlcG9ydGVkIHRvIHNlZ2ZhdWx0IGZvciBtYW55IHBlb3BsZSBvbiBsaXN0IGFuZAorICAgICNnaXQ7IGhvcGVmdWxseSB0aGlzIGhhcyBiZWVuIGZpeGVkLgorCisgIC0gImdpdC1zdm4gY2xvbmUiIGRvZXMgbm90IHRyeSB0byBtaW5pbWl6ZSB0aGUgVVJMCisgICAgKGkuZS4gY29ubmVjdCB0byBoaWdoZXIgbGV2ZWwgaGllcmFyY2h5KSBieSBkZWZhdWx0LCBhcyB0aGlzCisgICAgY2FuIHByZXZlbnQgY2xvbmUgdG8gZmFpbCBpZiBvbmx5IHBhcnQgb2YgdGhlIHJlcG9zaXRvcnkKKyAgICAoZS5nLiAndHJ1bmsnKSBpcyBvcGVuIHRvIHB1YmxpYy4KKworICAtICJnaXQgY2hlY2tvdXQgYnJhbmNoXjAiIGRpZCBub3QgZGV0YWNoIHRoZSBoZWFkIHdoZW4geW91IGFyZQorICAgIGFscmVhZHkgb24gJ2JyYW5jaCc7IGJhY2twb3J0ZWQgdGhlIGZpeCBmcm9tIHRoZSAnbWFzdGVyJy4KKworICAtICJnaXQtY29uZmlnIHNlY3Rpb24udmFyIiBkaWQgbm90IGNvcnJlY3RseSB3b3JrIHdoZW4KKyAgICBleGlzdGluZyBjb25maWd1cmF0aW9uIGZpbGUgaGFkIGJvdGggW3NlY3Rpb25dIGFuZCBbc2VjdGlvbiAibmFtZSJdCisgICAgbmV4dCB0byBlYWNoIG90aGVyLgorCisgIC0gImdpdCBjbG9uZSAuLi9vdGhlci1kaXJlY3RvcnkiIHdhcyBmb29sZWQgaWYgdGhlIGN1cnJlbnQKKyAgICBkaXJlY3RvcnkgJFBXRCBwb2ludHMgYXQgaXMgYSBzeW1ib2xpYyBsaW5rLgorCisgIC0gKGJ1aWxkKSB0cmVlX2VudHJ5X2V4dHJhY3QoKSBmdW5jdGlvbiB3YXMgYm90aCBzdGF0aWMgaW5saW5lCisgICAgYW5kIGV4dGVybiwgd2hpY2ggY2F1c2VkIHRyb3VibGUgY29tcGlsaW5nIHdpdGggRm9ydGUxMgorICAgIGNvbXBpbGVycyBvbiBTdW4uCisKKyAgLSBNYW55IG1hbnkgZG9jdW1lbnRhdGlvbiBmaXhlcyBhbmQgdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZjNhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjYudHh0CkBAIC0wLDAgKzEsNDUgQEAKK0dJVCB2MS41LjEuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjEuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gZ2l0LXNlbmQtZW1haWwgZGlkIG5vdCB1bmRlcnN0YW5kIGFsaWFzZXMgZmlsZSBmb3IgbXV0dCwgd2hpY2gKKyAgICBhbGxvd3MgbGVhZGluZyB3aGl0ZXNwYWNlcy4KKworICAtIGdpdC1mb3JtYXQtcGF0Y2ggZW1pdHRlZCBDb250ZW50LVR5cGUgYW5kIENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcKKyAgICBoZWFkZXJzIGZvciBub24gQVNDSUkgY29udGVudHMsIGJ1dCBmYWlsZWQgdG8gYWRkIE1JTUUtVmVyc2lvbi4KKworICAtIGdpdC1uYW1lLXJldiBoYWQgYSBidWZmZXIgb3ZlcnJ1biB3aXRoIGEgZGVlcCBoaXN0b3J5LgorCisgIC0gY29udHJpYnV0ZWQgc2NyaXB0IGltcG9ydC10YXJzIGRpZCBub3QgZ2V0IHRoZSBkaXJlY3RvcnkgaW4KKyAgICB0YXIgYXJjaGl2ZXMgaW50ZXJwcmV0ZWQgY29ycmVjdGx5LgorCisgIC0gZ2l0LXN2biB3YXMgcmVwb3J0ZWQgdG8gc2VnZmF1bHQgZm9yIG1hbnkgcGVvcGxlIG9uIGxpc3QgYW5kCisgICAgI2dpdDsgaG9wZWZ1bGx5IHRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAgLSBnaXQtc3ZuIGFsc28gaGFkIGEgYnVnIHRvIGNyYXNoIHN2bnNlcnZlIGJ5IHNlbmRpbmcgYSBiYWQKKyAgICBzZXF1ZW5jZSBvZiByZXF1ZXN0cy4KKworICAtICJnaXQtc3ZuIGNsb25lIiBkb2VzIG5vdCB0cnkgdG8gbWluaW1pemUgdGhlIFVSTAorICAgIChpLmUuIGNvbm5lY3QgdG8gaGlnaGVyIGxldmVsIGhpZXJhcmNoeSkgYnkgZGVmYXVsdCwgYXMgdGhpcworICAgIGNhbiBwcmV2ZW50IGNsb25lIHRvIGZhaWwgaWYgb25seSBwYXJ0IG9mIHRoZSByZXBvc2l0b3J5CisgICAgKGUuZy4gJ3RydW5rJykgaXMgb3BlbiB0byBwdWJsaWMuCisKKyAgLSAiZ2l0IGNoZWNrb3V0IGJyYW5jaF4wIiBkaWQgbm90IGRldGFjaCB0aGUgaGVhZCB3aGVuIHlvdSBhcmUKKyAgICBhbHJlYWR5IG9uICdicmFuY2gnOyBiYWNrcG9ydGVkIHRoZSBmaXggZnJvbSB0aGUgJ21hc3RlcicuCisKKyAgLSAiZ2l0LWNvbmZpZyBzZWN0aW9uLnZhciIgZGlkIG5vdCBjb3JyZWN0bHkgd29yayB3aGVuCisgICAgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBmaWxlIGhhZCBib3RoIFtzZWN0aW9uXSBhbmQgW3NlY3Rpb24gIm5hbWUiXQorICAgIG5leHQgdG8gZWFjaCBvdGhlci4KKworICAtICJnaXQgY2xvbmUgLi4vb3RoZXItZGlyZWN0b3J5IiB3YXMgZm9vbGVkIGlmIHRoZSBjdXJyZW50CisgICAgZGlyZWN0b3J5ICRQV0QgcG9pbnRzIGF0IGlzIGEgc3ltYm9saWMgbGluay4KKworICAtIChidWlsZCkgdHJlZV9lbnRyeV9leHRyYWN0KCkgZnVuY3Rpb24gd2FzIGJvdGggc3RhdGljIGlubGluZQorICAgIGFuZCBleHRlcm4sIHdoaWNoIGNhdXNlZCB0cm91YmxlIGNvbXBpbGluZyB3aXRoIEZvcnRlMTIKKyAgICBjb21waWxlcnMgb24gU3VuLgorCisgIC0gTWFueSBtYW55IGRvY3VtZW50YXRpb24gZml4ZXMgYW5kIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZWQzNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLnR4dApAQCAtMCwwICsxLDM3MSBAQAorR0lUIHYxLjUuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS41LjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogRGVwcmVjYXRlZCBjb21tYW5kcyBhbmQgb3B0aW9ucy4KKworICAtIGdpdC1kaWZmLXN0YWdlcyBhbmQgZ2l0LXJlc29sdmUgaGF2ZSBiZWVuIHJlbW92ZWQuCisKKyogTmV3IGNvbW1hbmRzIGFuZCBvcHRpb25zLgorCisgIC0gImdpdCBsb2ciIGFuZCBmcmllbmRzIHRha2UgLS1yZXZlcnNlLCB3aGljaCBpbnN0cnVjdHMgdGhlbQorICAgIHRvIGdpdmUgdGhlaXIgb3V0cHV0IGluIHRoZSBvcmRlciBvcHBvc2l0ZSBmcm9tIHRoZWlyIHVzdWFsLgorICAgIFRoZXkgdHlwaWNhbGx5IG91dHB1dCBmcm9tIG5ldyB0byBvbGQsIGJ1dCB3aXRoIHRoaXMgb3B0aW9uCisgICAgdGhlaXIgb3V0cHV0IHdvdWxkIHJlYWQgZnJvbSBvbGQgdG8gbmV3LiAgImdpdCBzaG9ydGxvZyIKKyAgICB1c3VhbGx5IGxpc3RzIG9sZGVyIGNvbW1pdHMgZmlyc3QsIGJ1dCB3aXRoIHRoaXMgb3B0aW9uLAorICAgIHRoZXkgYXJlIHNob3duIGZyb20gbmV3IHRvIG9sZC4KKworICAtICJnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDo8c3RyaW5nPiIgdG8gYWxsb3cgbW9yZSBmbGV4aWJsZQorICAgIGN1c3RvbSBsb2cgb3V0cHV0LgorCisgIC0gImdpdCBkaWZmIiBsZWFybmVkIC0taWdub3JlLXNwYWNlLWF0LWVvbC4gIFRoaXMgaXMgYSB3ZWFrZXIKKyAgICBmb3JtIG9mIC0taWdub3JlLXNwYWNlLWNoYW5nZS4KKworICAtICJnaXQgZGlmZiAtLW5vLWluZGV4IHBhdGhBIHBhdGhCIiBjYW4gYmUgdXNlZCBhcyBkaWZmCisgICAgcmVwbGFjZW1lbnQgd2l0aCBnaXQgc3BlY2lmaWMgZW5oYW5jZW1lbnRzLgorCisgIC0gImdpdCBkaWZmIC0tbm8taW5kZXgiIGNhbiByZWFkIGZyb20gJy0nIChzdGFuZGFyZCBpbnB1dCkuCisKKyAgLSAiZ2l0IGRpZmYiIGFsc28gbGVhcm5lZCAtLWV4aXQtY29kZSB0byBleGl0IHdpdGggbm9uLXplcm8KKyAgICBzdGF0dXMgd2hlbiBpdCBmb3VuZCBkaWZmZXJlbmNlcy4gIEluIHRoZSBmdXR1cmUgd2UgbWlnaHQKKyAgICB3YW50IHRvIG1ha2UgdGhpcyB0aGUgZGVmYXVsdCBidXQgdGhhdCB3b3VsZCBiZSBhIHJhdGhlciBiaWcKKyAgICBiYWNrd2FyZCBpbmNvbXBhdGlibGUgY2hhbmdlOyBpdCB3aWxsIHN0YXkgYXMgYW4gb3B0aW9uIGZvcgorICAgIG5vdy4KKworICAtICJnaXQgZGlmZiAtLXF1aWV0IiBpcyAtLWV4aXQtY29kZSB3aXRoIG91dHB1dCB0dXJuZWQgb2ZmLAorICAgIG1lYW50IGZvciBzY3JpcHRlZCB1c2UgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYW55CisgICAgdHJlZS1sZXZlbCBkaWZmZXJlbmNlLgorCisgIC0gVGV4dHVhbCBwYXRjaCBnZW5lcmF0aW9uIHdpdGggImdpdCBkaWZmIiB3aXRob3V0IC13Ly1iCisgICAgb3B0aW9uIGhhcyBiZWVuIHNpZ25pZmljYW50bHkgb3B0aW1pemVkLiAgImdpdCBibGFtZSIgZ290CisgICAgZmFzdGVyIGJlY2F1c2Ugb2YgdGhlIHNhbWUgY2hhbmdlLgorCisgIC0gImdpdCBsb2ciIGFuZCAiZ2l0IHJldi1saXN0IiBoYXMgYmVlbiBvcHRpbWl6ZWQKKyAgICBzaWduaWZpY2FudGx5IHdoZW4gdGhleSBhcmUgdXNlZCB3aXRoIHBhdGhzcGVjcy4KKworICAtICJnaXQgYnJhbmNoIC0tdHJhY2siIGNhbiBiZSB1c2VkIHRvIHNldCB1cCBjb25maWd1cmF0aW9uCisgICAgdmFyaWFibGVzIHRvIGhlbHAgaXQgZWFzaWVyIHRvIGJhc2UgeW91ciB3b3JrIG9uIGJyYW5jaGVzCisgICAgeW91IHRyYWNrIGZyb20gYSByZW1vdGUgc2l0ZS4KKworICAtICJnaXQgZm9ybWF0LXBhdGNoIC0tYXR0YWNoIiBub3cgZW1pdHMgYXR0YWNobWVudHMuICBVc2UKKyAgICAtLWlubGluZSB0byBnZXQgYW4gaW5saW5lZCBtdWx0aXBhcnQvbWl4ZWQuCisKKyAgLSAiZ2l0IG5hbWUtcmV2IiBsZWFybmVkIC0tcmVmcz08cGF0dGVybj4sIHRvIGxpbWl0IHRoZSB0YWdzCisgICAgdXNlZCBmb3IgbmFtaW5nIHRoZSBnaXZlbiByZXZpc2lvbnMgb25seSB0byB0aGUgb25lcworICAgIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXR0ZXJuLgorCisgIC0gImdpdCByZW1vdGUgdXBkYXRlIiBpcyB0byBydW4gImdpdCBmZXRjaCIgZm9yIGRlZmluZWQgcmVtb3RlcworICAgIHRvIHVwZGF0ZSB0cmFja2luZyBicmFuY2hlcy4KKworICAtICJnaXQgY3ZzaW1wb3J0IiBjYW4gbm93IHRha2UgJy1kJyB0byB0YWxrIHdpdGggYSBDVlMKKyAgICByZXBvc2l0b3J5IGRpZmZlcmVudCBmcm9tIHdoYXQgYXJlIHJlY29yZGVkIGluIENWUy9Sb290CisgICAgKG92ZXJyaWRpbmcgaXQgd2l0aCBlbnZpcm9ubWVudCBDVlNST09UIGRvZXMgbm90IHdvcmspLgorCisgIC0gImdpdCBidW5kbGUiIGNhbiBoZWxwIHNuZWFrZXItbmV0dGluZyB5b3VyIGNoYW5nZXMgYmV0d2VlbgorICAgIHJlcG9zaXRvcmllcy4KKworICAtICJnaXQgbWVyZ2V0b29sIiBjYW4gaGVscCAzLXdheSBmaWxlLWxldmVsIGNvbmZsaWN0CisgICAgcmVzb2x1dGlvbiB3aXRoIHlvdXIgZmF2b3JpdGUgZ3JhcGhpY2FsIG1lcmdlIHRvb2xzLgorCisgIC0gQSBuZXcgY29uZmlndXJhdGlvbiAiY29yZS5zeW1saW5rcyIgY2FuIGJlIHVzZWQgdG8gZGlzYWJsZQorICAgIHN5bWxpbmtzIG9uIGZpbGVzeXN0ZW1zIHRoYXQgZG8gbm90IHN1cHBvcnQgdGhlbTsgdGhleSBhcmUKKyAgICBjaGVja2VkIG91dCBhcyByZWd1bGFyIGZpbGVzIGluc3RlYWQuCisKKyAgLSBZb3UgY2FuIG5hbWUgYSBjb21taXQgb2JqZWN0IHdpdGggaXRzIGZpcnN0IGxpbmUgb2YgdGhlCisgICAgbWVzc2FnZS4gIFRoZSBzeW50YXggdG8gdXNlIGlzICc6L21lc3NhZ2UgdGV4dCcuICBFLmcuCisKKyAgICAkIGdpdCBzaG93ICI6L29iamVjdCBuYW1lOiBpbnRyb2R1Y2UgJzovPG9uZWxpbmUgcHJlZml4Picgbm90YXRpb24iCisKKyAgICBtZWFucyB0aGUgc2FtZSB0aGluZyBhczoKKworICAgICQgZ2l0IHNob3cgMjhhNGQ5NDA0NDM4MDY0MTJlZmZhMjQ2ZWNjNzc2OGEyMTU1M2VjNworCisgIC0gImdpdCBiaXNlY3QiIGxlYXJuZWQgYSBuZXcgY29tbWFuZCAicnVuIiB0aGF0IHRha2VzIGEgc2NyaXB0CisgICAgdG8gcnVuIGFmdGVyIGVhY2ggcmV2aXNpb24gaXMgY2hlY2tlZCBvdXQgdG8gZGV0ZXJtaW5lIGlmIGl0CisgICAgaXMgZ29vZCBvciBiYWQsIHRvIGF1dG9tYXRlIHRoZSBiaXNlY3Rpb24gcHJvY2Vzcy4KKworICAtICJnaXQgbG9nIiBmYW1pbHkgbGVhcm5lZCBhIG5ldyB0cmF2ZXJzYWwgb3B0aW9uIC0tZmlyc3QtcGFyZW50LAorICAgIHdoaWNoIGRvZXMgd2hhdCB0aGUgbmFtZSBzdWdnZXN0cy4KKworCisqIFVwZGF0ZWQgYmVoYXZpb3Igb2YgZXhpc3RpbmcgY29tbWFuZHMuCisKKyAgLSAiZ2l0LW1lcmdlLXJlY3Vyc2l2ZSIgdXNlZCB0byBiYXJmIHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbgorICAgIG9uZSBjb21tb24gYW5jZXN0b3JzIGZvciB0aGUgbWVyZ2UsIGFuZCBtZXJnaW5nIHRoZW0gaGFkIGEKKyAgICByZW5hbWUvcmVuYW1lIGNvbmZsaWN0LiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICAtICJnaXQgZnNjayIgZG9lcyBub3QgYmFyZiBvbiBjb3JydXB0IGxvb3NlIG9iamVjdHMuCisKKyAgLSAiZ2l0IHJtIiBkb2VzIG5vdCByZW1vdmUgbmV3bHkgYWRkZWQgZmlsZXMgd2l0aG91dCAtZi4KKworICAtICJnaXQgYXJjaGltcG9ydCIgYWxsb3dzIHJlbWFwcGluZyB3aGVuIGNvbWluZyB1cCB3aXRoIGdpdAorICAgIGJyYW5jaCBuYW1lcyBmcm9tIGFyY2ggbmFtZXMuCisKKyAgLSBnaXQtc3ZuIGdvdCBhbG1vc3QgYSByZXdyaXRlLgorCisgIC0gY29yZS5hdXRvY3JsZiBjb25maWd1cmF0aW9uLCB3aGVuIHNldCB0byAndHJ1ZScsIG1ha2VzIGdpdAorICAgIHRvIGNvbnZlcnQgQ1JMRiBhdCB0aGUgZW5kIG9mIGxpbmVzIGluIHRleHQgZmlsZXMgdG8gTEYgd2hlbgorICAgIHJlYWRpbmcgZnJvbSB0aGUgZmlsZXN5c3RlbSwgYW5kIGNvbnZlcnQgaW4gcmV2ZXJzZSB3aGVuCisgICAgd3JpdGluZyB0byB0aGUgZmlsZXN5c3RlbS4gIFRoZSB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvCisgICAgJ2lucHV0JywgaW4gd2hpY2ggY2FzZSB0aGUgY29udmVyc2lvbiBoYXBwZW5zIG9ubHkgd2hpbGUKKyAgICByZWFkaW5nIGZyb20gdGhlIGZpbGVzeXN0ZW0gYnV0IGZpbGVzIGFyZSB3cml0dGVuIG91dCB3aXRoCisgICAgTEYgYXQgdGhlIGVuZCBvZiBsaW5lcy4gIEN1cnJlbnRseSwgd2hpY2ggcGF0aHMgdG8gY29uc2lkZXIKKyAgICAndGV4dCcgKGkuZS4gYmUgc3ViamVjdGVkIHRvIHRoZSBhdXRvY3JsZiBtZWNoYW5pc20pIGlzCisgICAgZGVjaWRlZCBwdXJlbHkgYmFzZWQgb24gdGhlIGNvbnRlbnRzLCBidXQgdGhlIHBsYW4gaXMgdG8KKyAgICBhbGxvdyB1c2VycyB0byBleHBsaWNpdGx5IG92ZXJyaWRlIHRoaXMgaGV1cmlzdGljIGJhc2VkIG9uCisgICAgcGF0aHMuCisKKyAgLSBUaGUgYmVoYXZpb3Igb2YgJ2dpdC1hcHBseScsIHdoZW4gcnVuIGluIGEgc3ViZGlyZWN0b3J5LAorICAgIHdpdGhvdXQgLS1pbmRleCBub3IgLS1jYWNoZWQgd2VyZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGF0IG9mCisgICAgdGhlIGNvbW1hbmQgd2l0aCB0aGVzZSBvcHRpb25zLiAgVGhpcyB3YXMgZml4ZWQgdG8gbWF0Y2ggdGhlCisgICAgYmVoYXZpb3Igd2l0aCAtLWluZGV4LiAgQSBwYXRjaCB0aGF0IGlzIG1lYW50IHRvIGJlIGFwcGxpZWQKKyAgICB3aXRoIC1wMSBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgcHJvamVjdCB0cmVlIGNhbiBiZQorICAgIGFwcGxpZWQgd2l0aCBhbnkgY3VzdG9tIC1wPG4+IG9wdGlvbi4gIEEgcGF0Y2ggdGhhdCBpcyBub3QKKyAgICByZWxhdGl2ZSB0byB0aGUgdG9wbGV2ZWwgbmVlZHMgdG8gYmUgYXBwbGllZCB3aXRoIC1wPG4+CisgICAgb3B0aW9uIHdpdGggb3Igd2l0aG91dCAtLWluZGV4IChvciAtLWNhY2hlZCkuCisKKyAgLSAiZ2l0IGRpZmYiIG91dHB1dHMgYSB0cmFpbGluZyBIVCB3aGVuIHBhdGhuYW1lcyBoYXZlIGVtYmVkZGVkCisgICAgU1Agb24gKysrLy0tLSBoZWFkZXIgbGluZXMsIGluIG9yZGVyIHRvIGhlbHAgIkdOVSBwYXRjaCIgdG8KKyAgICBwYXJzZSBpdHMgb3V0cHV0LiAgImdpdCBhcHBseSIgd2FzIGFscmVhZHkgdXBkYXRlZCB0byBhY2NlcHQKKyAgICB0aGlzIG1vZGlmaWVkIG91dHB1dCBmb3JtYXQgc2luY2UgY2U3NDYxOGQgKFNlcCAyMiwgMjAwNikuCisKKyAgLSAiZ2l0IGN2c3NlcnZlciIgcnVucyBob29rcy91cGRhdGUgYW5kIGhvbm9ycyBpdHMgZXhpdCBzdGF0dXMuCisKKyAgLSAiZ2l0IGN2c3NlcnZlciIgY2FuIGJlIHRvbGQgdG8gc2VuZCBldmVyeXRoaW5nIHdpdGggLWtiLgorCisgIC0gImdpdCBkaWZmIC0tY2hlY2siIGFsc28gaG9ub3JzIHRoZSAtLWNvbG9yIG91dHB1dCBvcHRpb24uCisKKyAgLSAiZ2l0IG5hbWUtcmV2IiB1c2VkIHRvIHN0cmVzcyB0aGUgZmFjdCB0aGF0IGEgcmVmIGlzIGEgdGFnIHRvbworICAgIG11Y2gsIGJ5IHNheWluZyBzb21ldGhpbmcgbGlrZSAidjEuMi4zXjB+MjIiLiAgSXQgbm93IHNheXMKKyAgICAidjEuMi4zfjIyIiBpbiBzdWNoIGEgY2FzZSAoaXQgc3RpbGwgc2F5cyAidjEuMi4zXjAiIGlmIGl0IGRvZXMKKyAgICBub3QgdGFsayBhYm91dCBhbiBhbmNlc3RvciBvZiB0aGUgY29tbWl0IHRoYXQgaXMgdGFnZ2VkLCB3aGljaAorICAgIG1ha2VzIHNlbnNlKS4KKworICAtICJnaXQgcmV2LWxpc3QgLS1ib3VuZGFyeSIgbm93IHNob3dzIGJvdW5kYXJ5IG1hcmtlcnMgZm9yIHRoZQorICAgIGNvbW1pdHMgb21pdHRlZCBieSAtLW1heC1hZ2UgYW5kIC0tbWF4LWNvdW50IGNvbmRpdGlvbi4KKworICAtIFRoZSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbSBub3cgcmVhZHMgJChwcmVmaXgpL2V0Yy9naXRjb25maWcuCisKKyAgLSAiZ2l0IGFwcGx5IC0tdmVyYm9zZSIgc2hvd3Mgd2hhdCBwcmVpbWFnZSBsaW5lcyB3ZXJlIHdhbnRlZAorICAgIHdoZW4gaXQgY291bGRuJ3QgZmluZCB0aGVtLgorCisgIC0gImdpdCBzdGF0dXMiIGluIGEgcmVhZC1vbmx5IHJlcG9zaXRvcnkgZ290IGEgYml0IHNhbmVyLgorCisgIC0gImdpdCBmZXRjaCIgKGhlbmNlICJnaXQgY2xvbmUiIGFuZCAiZ2l0IHB1bGwiKSBhcmUgbGVzcworICAgIG5vaXN5IHdoZW4gdGhlIG91dHB1dCBkb2VzIG5vdCBnbyB0byB0dHkuCisKKyAgLSAiZ2l0IGZldGNoIiBiZXR3ZWVuIHJlcG9zaXRvcmllcyB3aXRoIG1hbnkgcmVmcyB3ZXJlIHNsb3cKKyAgICBldmVuIHdoZW4gdGhlcmUgYXJlIG5vdCBtYW55IGNoYW5nZXMgdGhhdCBuZWVkZWQKKyAgICB0cmFuc2ZlcnJpbmcuICBUaGlzIGhhcyBiZWVuIHNwZWQgdXAgYnkgcGFydGlhbGx5IHJld3JpdGluZworICAgIHRoZSBoZWF2aWVzdCBwYXJ0cyBpbiBDLgorCisgIC0gImdpdCBtYWlsaW5mbyIgd2hpY2ggc3BsaXRzIGFuIGUtbWFpbCBpbnRvIGEgcGF0Y2ggYW5kIHRoZQorICAgIG1ldGEtaW5mb3JtYXRpb24gd2FzIHJld3JpdHRlbiwgdGhhbmtzIHRvIERvbiBaaWNrdXMuICBJdAorICAgIGhhbmRsZXMgbmVzdGVkIG11bHRpcGFydCBiZXR0ZXIuICBUaGUgY29tbWFuZCB3YXMgYnJva2VuIGZvcgorICAgIGEgYnJpZWYgcGVyaW9kIG9uICdtYXN0ZXInIGJyYW5jaCBzaW5jZSAxLjUuMCBidXQgdGhlCisgICAgYnJlYWthZ2UgaXMgZml4ZWQgbm93LgorCisgIC0gc2VuZC1lbWFpbCBsZWFybmVkIGNvbmZpZ3VyYWJsZSBiY2MgYW5kIGNoYWluLXJlcGx5LXRvLgorCisgIC0gImdpdCByZW1vdGUgc2hvdyAkcmVtb3RlIiBhbHNvIHRhbGtzIGFib3V0IGJyYW5jaGVzIHRoYXQKKyAgICB3b3VsZCBiZSBwdXNoZWQgaWYgeW91IHJ1biAiZ2l0IHB1c2ggcmVtb3RlIi4KKworICAtIFVzaW5nIG9iamVjdHMgZnJvbSBwYWNrcyBpcyBub3cgc2VyaW91c2x5IG9wdGltaXplZCBieSBjbGV2ZXIKKyAgICB1c2Ugb2YgYSBjYWNoZS4gIFRoaXMgc2hvdWxkIGJlIG1vc3Qgbm90aWNlYWJsZSBpbiBnaXQtbG9nCisgICAgZmFtaWx5IG9mIGNvbW1hbmRzIHRoYXQgaW52b2x2ZSByZWFkaW5nIG1hbnkgdHJlZSBvYmplY3RzLgorICAgIEluIGFkZGl0aW9uLCB0cmF2ZXJzaW5nIHJldmlzaW9ucyB3aGlsZSBmaWx0ZXJpbmcgY2hhbmdlcworICAgIHdpdGggcGF0aHNwZWNzIGlzIG1hZGUgZmFzdGVyIGJ5IHRlcm1pbmF0aW5nIHRoZSBjb21wYXJpc29uCisgICAgYmV0d2VlbiB0aGUgdHJlZXMgYXMgZWFybHkgYXMgcG9zc2libGUuCisKKworKiBIb29rcworCisgIC0gVGhlIHBhcnQgdG8gc2VuZCBvdXQgbm90aWZpY2F0aW9uIGUtbWFpbHMgd2FzIHJlbW92ZWQgZnJvbQorICAgIHRoZSBzYW1wbGUgdXBkYXRlIGhvb2ssIGFzIGl0IHdhcyBub3QgYW4gYXBwcm9wcmlhdGUgcGxhY2UKKyAgICB0byBkbyBzby4gIFRoZSBwcm9wZXIgcGxhY2UgdG8gZG8gdGhpcyBpcyB0aGUgbmV3IHBvc3QtcmVjZWl2ZQorICAgIGhvb2suICBBbiBleGFtcGxlIGhvb2sgaGFzIGJlZW4gYWRkZWQgdG8gY29udHJpYi9ob29rcy8uCisKKworKiBPdGhlcnMKKworICAtIGdpdC1yZXZlcnQsIGdpdC1nYyBhbmQgZ2l0LWNoZXJyeS1waWNrIGFyZSBub3cgYnVpbHQtaW5zLgorCitGaXhlcyBzaW5jZSB2MS41LjAKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBhcmUgYWxsIGluIHYxLjUuMC54IHNlcmllcy4KKworKiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMKKworICAtIENsYXJpZmljYXRpb25zIGFuZCBjb3JyZWN0aW9ucyB0byAxLjUuMCByZWxlYXNlIG5vdGVzLgorCisgIC0gVGhlIG1haW4gZG9jdW1lbnRhdGlvbiBkaWQgbm90IGxpbmsgdG8gZ2l0LXJlbW90ZSBkb2N1bWVudGF0aW9uLgorCisgIC0gQ2xhcmlmaWVkIGludHJvZHVjdG9yeSB0ZXh0IG9mIGdpdC1yZWJhc2UgZG9jdW1lbnRhdGlvbi4KKworICAtIENvbnZlcnRlZCByZW1haW5pbmcgbWVudGlvbnMgb2YgdXBkYXRlLWluZGV4IG9uIFBvcmNlbGFpbgorICAgIGRvY3VtZW50cyB0byBnaXQtYWRkL2dpdC1ybS4KKworICAtIFNvbWUgaTE4bi4qIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHdlcmUgaW5jb3JyZWN0bHkKKyAgICBkZXNjcmliZWQgYXMgY29yZS4qOyBmaXhlZC4KKworICAtIGFkZGVkIGFuZCBjbGFyaWZpZWQgY29yZS5iYXJlLCBjb3JlLmxlZ2FjeWhlYWRlcnMgY29uZmlndXJhdGlvbnMuCisKKyAgLSB1cGRhdGVkICJnaXQtY2xvbmUgLS1kZXB0aCIgZG9jdW1lbnRhdGlvbi4KKworICAtIHVzZXItbWFudWFsIHVwZGF0ZXMuCisKKyAgLSBPcHRpb25zIHRvICdnaXQgcmVtb3RlIGFkZCcgd2VyZSBkZXNjcmliZWQgaW5zdWZmaWNpZW50bHkuCisKKyAgLSBDb25maWd1cmF0aW9uIGZvcm1hdC5zdWZmaXggd2FzIG5vdCBkb2N1bWVudGVkLgorCisgIC0gT3RoZXIgZm9ybWF0dGluZyBhbmQgc3BlbGxpbmcgZml4ZXMuCisKKyAgLSB1c2VyLW1hbnVhbCBoYXMgYmV0dGVyIGNyb3NzIHJlZmVyZW5jZXMuCisKKyAgLSBnaXR3ZWIgaW5zdGFsbGF0aW9uL2RlcGxveW1lbnQgcHJvY2VkdXJlIGlzIG5vdyBkb2N1bWVudGVkLgorCisKKyogQnVnZml4ZXMKKworICAtIGdpdC11cGxvYWQtcGFjayBjbG9zZXMgdW51c2VkIHBpcGUgZW5kczsgZWFybGllciB0aGlzIGNhdXNlZAorICAgIG1hbnkgem9tYmllcyB0byBoYW5nIGFyb3VuZC4KKworICAtIGdpdC1yZXJlcmUgd2FzIHJlY29yZGluZyB0aGUgY29udGVudHMgb2YgZWFybGllciBodW5rcworICAgIGR1cGxpY2F0ZWQgaW4gbGF0ZXIgaHVua3MuICBUaGlzIHByZXZlbnRlZCByZXNvbHZpbmcgdGhlIHNhbWUKKyAgICBjb25mbGljdCB3aGVuIHBlcmZvcm1pbmcgdGhlIHNhbWUgbWVyZ2UgdGhlIG90aGVyIHdheSBhcm91bmQuCisKKyAgLSBnaXQtYWRkIGFuZCBnaXQtdXBkYXRlLWluZGV4IG9uIGEgZmlsZXN5c3RlbSBvbiB3aGljaAorICAgIGV4ZWN1dGFibGUgYml0cyBhcmUgdW5yZWxpYWJsZSBpbmNvcnJlY3RseSByZXVzZWQgc3RfbW9kZQorICAgIGJpdHMgZXZlbiB3aGVuIHRoZSBwYXRoIGNoYW5nZWQgYmV0d2VlbiBzeW1saW5rIGFuZCByZWd1bGFyCisgICAgZmlsZS4KKworICAtIGdpdC1kYWVtb24gbWFya3MgdGhlIGxpc3RlbmluZyBzb2NrZXRzIHdpdGggRkRfQ0xPRVhFQyBzbworICAgIHRoYXQgaXQgd29uJ3QgYmUgbGVha2VkIGludG8gdGhlIGNoaWxkcmVuLgorCisgIC0gc2VnZmF1bHQgZnJvbSBnaXQtYmxhbWUgd2hlbiB0aGUgbWFuZGF0b3J5IHBhdGhuYW1lCisgICAgcGFyYW1ldGVyIHdhcyBtaXNzaW5nIHdhcyBmaXhlZDsgdXNhZ2UoKSBtZXNzYWdlIGlzIGdpdmVuCisgICAgaW5zdGVhZC4KKworICAtIGdpdC1yZXYtbGlzdCBkaWQgbm90IHJlYWQgJEdJVF9ESVIvY29uZmlnIGZpbGUsIHdoaWNoIG1lYW5zCisgICAgdGhhdCBkaWQgbm90IGhvbm9yIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgY29ycmVjdGx5LgorCisgIC0gQXV0b21hdGVkIG1lcmdlIGNvbmZsaWN0IGhhbmRsaW5nIHdoZW4gY2hhbmdlcyB0byBzeW1ib2xpYworICAgIGxpbmtzIGNvbmZsaWN0ZWQgd2VyZSBjb21wbGV0ZWx5IGJyb2tlbi4gIFRoZSBtZXJnZS1yZXNvbHZlCisgICAgc3RyYXRlZ3kgY3JlYXRlZCBhIHJlZ3VsYXIgZmlsZSB3aXRoIGNvbmZsaWN0IG1hcmtlcnMgaW4gaXQKKyAgICBpbiBwbGFjZSBvZiB0aGUgc3ltYm9saWMgbGluay4gIFRoZSBkZWZhdWx0IHN0cmF0ZWd5LAorICAgIG1lcmdlLXJlY3Vyc2l2ZSB3YXMgZXZlbiBtb3JlIGJyb2tlbi4gIEl0IHJlbW92ZWQgdGhlIHBhdGgKKyAgICB0aGF0IHdhcyBwb2ludGVkIGF0IGJ5IHRoZSBzeW1ib2xpYyBsaW5rLiAgQm90aCBvZiB0aGVzZQorICAgIHByb2JsZW1zIGhhdmUgYmVlbiBmaXhlZC4KKworICAtICdnaXQgZGlmZiBtYWludCBtYXN0ZXIgbmV4dCcgZGlkIG5vdCBjb3JyZWN0bHkgZ2l2ZSBjb21iaW5lZAorICAgIGRpZmYgYWNyb3NzIHRocmVlIHRyZWVzLgorCisgIC0gJ2dpdCBmYXN0LWltcG9ydCcgcG9ydGFiaWxpdHkgZml4IGZvciBTb2xhcmlzLgorCisgIC0gJ2dpdCBzaG93LXJlZiAtLXZlcmlmeScgd2l0aG91dCBhcmd1bWVudHMgZGlkIG5vdCBlcnJvciBvdXQKKyAgICBidXQgc2VnZmF1bHRlZC4KKworICAtICdnaXQgZGlmZiA6dHJhY2tlZC1maWxlIGBwd2RgL2FuLXVudHJhY2tlZC1maWxlJyBnYXZlIGFuIGV4dHJhCisgICAgc2xhc2hlcyBhZnRlciBhLyBhbmQgYi8uCisKKyAgLSAnZ2l0IGZvcm1hdC1wYXRjaCcgcHJvZHVjZWQgdG9vIGxvbmcgZmlsZW5hbWVzIGlmIHRoZSBjb21taXQKKyAgICBtZXNzYWdlIGhhZCB0b28gbG9uZyBsaW5lIGF0IHRoZSBiZWdpbm5pbmcuCisKKyAgLSBSdW5uaW5nICdtYWtlIGFsbCcgYW5kIHRoZW4gd2l0aG91dCBjaGFuZ2luZyBhbnl0aGluZworICAgIHJ1bm5pbmcgJ21ha2UgaW5zdGFsbCcgc3RpbGwgcmVidWlsdCBzb21lIGZpbGVzLiAgVGhpcworICAgIHdhcyBpbmNvbnZlbmllbnQgd2hlbiBidWlsZGluZyBhcyB5b3Vyc2VsZiBhbmQgdGhlbgorICAgIGluc3RhbGxpbmcgYXMgcm9vdCAoZXNwZWNpYWxseSBwcm9ibGVtYXRpYyB3aGVuIHRoZSBzb3VyY2UKKyAgICBkaXJlY3RvcnkgaXMgb24gTkZTIGFuZCByb290IGlzIG1hcHBlZCB0byBub2JvZHkpLgorCisgIC0gJ2dpdC1yZXJlcmUnIGZhaWxlZCB0byBkZWFsIHdpdGggdHdvIHVuY29uZmxpY3RlZCBwYXRocyB0aGF0CisgICAgc29ydGVkIG5leHQgdG8gZWFjaCBvdGhlci4KKworICAtICdnaXQtcmVyZXJlJyBhdHRlbXB0ZWQgdG8gb3BlbigyKSBhIHN5bWxpbmsgYW5kIGZhaWxlZCBpZgorICAgIHRoZXJlIHdhcyBhIGNvbmZsaWN0LiAgU2luY2UgYSBjb25mbGljdGluZyBjaGFuZ2UgdG8gYQorICAgIHN5bWxpbmsgd291bGQgbm90IGJlbmVmaXQgZnJvbSByZXJlcmUgYW55d2F5LCB0aGUgY29tbWFuZAorICAgIG5vdyBpZ25vcmVzIGNvbmZsaWN0aW5nIGNoYW5nZXMgdG8gc3ltbGlua3MuCisKKyAgLSAnZ2l0LXJlcGFjaycgZGlkIG5vdCBsaWtlIHRvIHBhc3MgbW9yZSB0aGFuIDY0IGFyZ3VtZW50cworICAgIGludGVybmFsbHkgdG8gdW5kZXJseWluZyAncmV2LWxpc3QnIGxvZ2ljLCB3aGljaCBtYWRlIGl0CisgICAgaW1wb3NzaWJsZSB0byByZXBhY2sgYWZ0ZXIgYWNjdW11bGF0aW5nIG1hbnkgKHNtYWxsKSBwYWNrcworICAgIGluIHRoZSByZXBvc2l0b3J5LgorCisgIC0gJ2dpdC1kaWZmJyB0byByZXZpZXcgdGhlIGNvbWJpbmVkIGRpZmYgZHVyaW5nIGEgY29uZmxpY3RlZAorICAgIG1lcmdlIHdlcmUgbm90IHJlYWRpbmcgdGhlIHdvcmtpbmcgdHJlZSB2ZXJzaW9uIGNvcnJlY3RseQorICAgIHdoZW4gY2hhbmdlcyB0byBhIHN5bWJvbGljIGxpbmsgY29uZmxpY3RlZC4gIEl0IHNob3VsZCBoYXZlCisgICAgcmVhZCB0aGUgZGF0YSB1c2luZyByZWFkbGluaygyKSBidXQgcmVhZCBmcm9tIHRoZSByZWd1bGFyCisgICAgZmlsZSB0aGUgc3ltYm9saWMgbGluayBwb2ludGVkIGF0LgorCisgIC0gJ2dpdC1yZW1vdGUnIGRpZCBub3QgbGlrZSBwZXJpb2QgaW4gYSByZW1vdGUncyBuYW1lLgorCisgIC0gJ2dpdC5lbCcgaG9ub3JzIHRoZSBjb21taXQgY29kaW5nIHN5c3RlbSBmcm9tIHRoZSBjb25maWd1cmF0aW9uLgorCisgIC0gJ2JsYW1ldmlldycgaW4gY29udHJpYi8gY29ycmVjdGx5IGRpZ3MgZGVlcGVyIHdoZW4gYSBsaW5lIGlzCisgICAgY2xpY2tlZC4KKworICAtICdodHRwLXB1c2gnIGNvcnJlY3RseSBtYWtlcyBzdXJlIHRoZSByZW1vdGUgc2lkZSBoYXMgbGVhZGluZworICAgIHBhdGguICBFYXJsaWVyIGl0IHN0YXJ0ZWQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgcGF0aCwgYW5kCisgICAgaW5jb3JyZWN0bHkuCisKKyAgLSAnZ2l0LW1lcmdlJyBkaWQgbm90IGV4aXQgd2l0aCBub24temVybyBzdGF0dXMgd2hlbiB0aGUKKyAgICB3b3JraW5nIHRyZWUgd2FzIGRpcnR5IGFuZCBjYW5ub3QgZmFzdCBmb3J3YXJkLiAgSXQgZG9lcworICAgIG5vdy4KKworICAtICdjdnNleHBvcnRjb21taXQnIGRvZXMgbm90IGxvc2UgeWV0LXRvLWJlLXVzZWQgbWVzc2FnZSBmaWxlLgorCisgIC0gaW50LXZzLXNpemVfdCB0eXBlZml4IHdoZW4gcnVubmluZyBjb21iaW5lZCBkaWZmIG9uIGZpbGVzCisgICAgb3ZlciAyR0IgbG9uZy4KKworICAtICdnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPXN0cmlwJyBzaG91bGQgbm90IHRvdWNoIHVubW9kaWZpZWQKKyAgICBsaW5lcy4KKworICAtICdnaXQtbWFpbGluZm8nIGNob2tlIHdoZW4gYSBsb2dpY2FsIGhlYWRlciBsaW5lIHdhcyB0b28gbG9uZy4KKworICAtICdnaXQgc2hvdyBBLi5CJyBkaWQgbm90IGVycm9yIG91dC4gIE5lZ2F0aXZlIHJlZiAoIm5vdCBBIiBpbgorICAgIHRoaXMgZXhhbXBsZSkgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhlCisgICAgY29tbWFuZCwgc28gbm93IGl0IGVycm9ycyBvdXQuCisKKyAgLSAnZ2l0IGZtdC1tZXJnZS1tc2cgLS1maWxlJyB3aXRob3V0IGZpbGUgcGFyYW1ldGVyIGRpZCBub3QKKyAgICBjb3JyZWN0bHkgZXJyb3Igb3V0LgorCisgIC0gJ2dpdCBhcmNoaW1wb3J0JyBiYXJmZWQgdXBvbiBlbmNvdW50ZXJpbmcgYSBjb21taXQgd2l0aG91dAorICAgIHN1bW1hcnkuCisKKyAgLSAnZ2l0IGluZGV4LXBhY2snIGRpZCBub3QgcHJvdGVjdCBpdHNlbGYgZnJvbSBnZXR0aW5nIGEgc2hvcnQKKyAgICByZWFkIG91dCBvZiBwcmVhZCgyKS4KKworICAtICdnaXQgaHR0cC1wdXNoJyBoYWQgYSBmZXcgYnVmZmVyIG92ZXJydW5zLgorCisgIC0gQnVpbGQgZGVwZW5kZW5jeSBmaXhlcyB0byByZWJ1aWxkIGZldGNoLm8gd2hlbiBvdGhlciBoZWFkZXJzCisgICAgY2hhbmdlLgorCisgIC0gZ2l0LmVsIGRvZXMgbm90IGFkZCBkdXBsaWNhdGUgc2lnbi1vZmYgbGluZXMuCisKKyAgLSBnaXQtY29tbWl0IHNob3dzIHRoZSBmdWxsIHN0YXQgb2YgdGhlIHJlc3VsdGluZyBjb21taXQsIG5vdAorICAgIGp1c3QgYWJvdXQgdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgd2hlbiBydW4gZnJvbQorICAgIGEgc3ViZGlyZWN0b3J5LgorCisgIC0gImdpdC1jaGVja291dCAtbSAnQHs4IGhvdXJzIGFnb30nIiBoYWQgYSBmdW5ueSBmYWlsdXJlIGZyb20KKyAgICBldmFsOyBmaXhlZC4KKworICAtIGdpdC1tZXJnZSAoaGVuY2UgZ2l0LXB1bGwpIGRpZCBub3QgcmVmdXNlIGZhc3QtZm9yd2FyZGluZworICAgIHdoZW4gdGhlIHdvcmtpbmcgdHJlZSBoYWQgbG9jYWwgY2hhbmdlcyB0aGF0IHdvdWxkIGhhdmUKKyAgICBjb25mbGljdGVkIHdpdGggaXQuCisKKyAgLSBhIGhhbmRmdWwgc21hbGwgZml4ZXMgdG8gZ2l0d2ViLgorCisgIC0gYnVpbGQgcHJvY2VkdXJlIGZvciB1c2VyLW1hbnVhbCBpcyBmaXhlZCBub3QgdG8gcmVxdWlyZSBsb2NhbGx5CisgICAgaW5zdGFsbGVkIHN0eWxlc2hlZXRzLgorCisgIC0gImdpdCBjb21taXQgJHBhdGhzIiBvbiBwYXRocyB3aG9zZSBlYXJsaWVyIGNvbnRlbnRzIHdlcmUKKyAgICBhbHJlYWR5IHVwZGF0ZWQgaW4gdGhlIGluZGV4IHdlcmUgZmFpbGluZyBvdXQuCisKKworKiBUd2Vha3MKKworICAtIHNsaWRpbmcgbW1hcCgpIGluZWZmaWNpZW50bHkgbW1hcGVkIHRoZSBzYW1lIHJlZ2lvbiBvZiBhCisgICAgcGFja2ZpbGUgd2l0aCBhbiBhY2Nlc3MgcGF0dGVybiB0aGF0IHVzZWQgb2JqZWN0cyBpbiB0aGUKKyAgICByZXZlcnNlIG9yZGVyLiAgVGhpcyBoYXMgYmVlbiBtYWRlIG1vcmUgZWZmaWNpZW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxOTg0ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuMS50eHQKQEAgLTAsMCArMSw0NyBAQAorR0lUIHYxLjUuMi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogQnVnZml4ZXMKKworICAtIFRlbXBvcmFyeSBmaWxlcyB0aGF0IGFyZSB1c2VkIHdoZW4gaW52b2tpbmcgZXh0ZXJuYWwgZGlmZgorICAgIHByb2dyYW1zIGRpZCBub3QgdG9sZXJhdGUgYSBsb25nIFRNUERJUi4KKworICAtIGdpdC1kYWVtb24gZGlkIG5vdCBub3RpY2Ugd2hlbiBpdCBjb3VsZCBub3Qgd3JpdGUgaW50byBpdHMKKyAgICBwaWQgZmlsZS4KKworICAtIGdpdC1zdGF0dXMgZGlkIG5vdCBob25vciBjb3JlLmV4Y2x1ZGVzRmlsZSBjb25maWd1cmF0aW9uIGxpa2UKKyAgICBnaXQtYWRkIGRpZC4KKworICAtIGdpdC1hbm5vdGF0ZSBkaWQgbm90IHdvcmsgZnJvbSBhIHN1YmRpcmVjdG9yeSB3aGlsZQorICAgIGdpdC1ibGFtZSBkaWQuCisKKyAgLSBnaXQtY3Zzc2VydmVyIHNob3VsZCBoYXZlIGRpc2FibGVkIGFjY2VzcyB0byBhIHJlcG9zaXRvcnkKKyAgICB3aXRoICJnaXRjdnMucHNlcnZlci5lbmFibGVkID0gZmFsc2UiIHNldCBldmVuIHdoZW4KKyAgICAiZ2l0Y3ZzLmVuYWJsZWQgPSB0cnVlIiB3YXMgc2V0IGF0IHRoZSBzYW1lIHRpbWUuICBJdAorICAgIGRpZG4ndC4KKworICAtIGdpdC1jdnNpbXBvcnQgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSBpbiBhIHJlcG9zaXRvcnkgd2l0aAorICAgIGl0cyBicmFuY2ggaGVhZHMgd2VyZSBwYWNrZWQgd2l0aCBwYWNrLXJlZnMuCisKKyAgLSBpZGVudCB1bmV4cGFuc2lvbiB0byBzcXVhc2ggIiRJZDogeHh4ICQiIHRoYXQgaXMgaW4gdGhlCisgICAgcmVwb3NpdG9yeSBjb3B5IHJlbW92ZWQgaW5jb3JyZWN0IG51bWJlciBvZiBieXRlcy4KKworICAtIGdpdC1zdm4gbWlzYmVoYXZlZCB3aGVuIHRoZSBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgZGlkIG5vdAorICAgIHByb3ZpZGUgTUQ1IGNoZWNrc3VtcyBmb3IgZmlsZXMuCisKKyAgLSBnaXQgcmViYXNlIChhbmQgZ2l0IGFtKSBtaXNiZWhhdmVkIG9uIGNvbW1pdHMgdGhhdCBoYXZlICdcbicKKyAgICAobGl0ZXJhbGx5IGJhY2tzbGFzaCBhbmQgZW4sIG5vdCBhIGxpbmVmZWVkKSBpbiB0aGUgdGl0bGUuCisKKyAgLSBjb2RlIHRvIGRlY29kZSBiYXNlODUgdXNlZCBpbiBiaW5hcnkgcGF0Y2hlcyBoYWQgb25lIGVycm9yCisgICAgcmV0dXJuIGNvZGVwYXRoIHdyb25nLgorCisgIC0gUkZDMjA0NyBRIGVuY29kaW5nIG91dHB1dCBieSBnaXQtZm9ybWF0LXBhdGNoIHVzZWQgJ18nIGZvciBhCisgICAgc3BhY2UsIHdoaWNoIGlzIG5vdCB1bmRlcnN0b29kIGJ5IHNvbWUgcHJvZ3JhbXMuICBJdCB1c2VzID0yMAorICAgIHdoaWNoIGlzIHNhZmVyLgorCisgIC0gZ2l0LWZhc3RpbXBvcnQgLS1pbXBvcnQtbWFya3Mgd2FzIGJyb2tlbjsgZml4ZWQuCisKKyAgLSBBIGxvdCBvZiBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGNsYXJpZmljYXRpb25zIGFuZCBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZmEzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjIudHh0CkBAIC0wLDAgKzEsNjEgQEAKK0dJVCB2MS41LjIuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjIuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBVc2FiaWxpdHkgZml4CisKKyAgLSBnaXQtZ3VpIGlzIHNoaXBwZWQgd2l0aCBpdHMgdXBkYXRlZCBibGFtZSBpbnRlcmZhY2UuICBJdCBpcworICAgIHJ1bW9yZWQgdGhhdCB0aGUgb2xkZXIgb25lIHdhcyBub3QganVzdCB1bnVzYWJsZSBidXQgd2FzCisgICAgYWN0aXZlIGhlYWx0aCBoYXphcmQsIGJ1dCB0aGlzIG9uZSBpcyBhY3R1YWxseSBwcmV0dHkuCisgICAgUGxlYXNlIHNlZSBmb3IgeW91cnNlbGYuCisKKyogQnVnZml4ZXMKKworICAtICJnaXQgY2hlY2tvdXQgZnViYXIiIHdhcyB1dHRlcmx5IGNvbmZ1c2VkIHdoZW4gdGhlcmUgaXMgYQorICAgIGJyYW5jaCBmdWJhciBhbmQgYSB0YWcgZnViYXIgYXQgdGhlIHNhbWUgdGltZS4gIEl0IGNvcnJlY3RseQorICAgIGNoZWNrcyBvdXQgdGhlIGJyYW5jaCBmdWJhciBub3cuCisKKyAgLSAiZ2l0IGNsb25lIC9wYXRoL2ZvbyIgdG8gY2xvbmUgYSBsb2NhbCAvcGF0aC9mb28uZ2l0CisgICAgcmVwb3NpdG9yeSBsZWZ0IGFuIGluY29ycmVjdCBjb25maWd1cmF0aW9uLgorCisgIC0gImdpdCBzZW5kLWVtYWlsIiBjb3JyZWN0bHkgdW5xdW90ZXMgUkZDIDIwNDcgcXVvdGVkIG5hbWVzIGluCisgICAgdGhlIHBhdGNoLWVtYWlsIGJlZm9yZSB1c2luZyB0aGVpciB2YWx1ZXMuCisKKyAgLSBXZSBkaWQgbm90IGFjY2VwdCBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBlcG9jaCBvbGRlciB0aGFuCisgICAgeWVhciAyMDAwIGFzIGEgdmFsaWQgdGltZXN0YW1wLiAgV2Ugbm93IGludGVycHJldCBwb3NpdGl2ZQorICAgIGludGVnZXJzIG1vcmUgdGhhbiA4IGRpZ2l0cyBhcyBzdWNoLCB3aGljaCBhbGxvd3MgdXMgdG8KKyAgICBleHByZXNzIHRpbWVzdGFtcHMgbW9yZSByZWNlbnQgdGhhbiBNYXJjaCAxOTczLgorCisgIC0gZ2l0LWN2c2ltcG9ydCBkaWQgbm90IHdvcmsgd2hlbiB5b3UgaGF2ZSBHSVRfRElSIHRvIHBvaW50CisgICAgeW91ciByZXBvc2l0b3J5IGF0IGEgbm9uc3RhbmRhcmQgbG9jYXRpb24uCisKKyAgLSBTb21lIHN5c3RlbXMgKG5vdGFibHksIFNvbGFyaXMpIGxhY2sgaHN0cmVycm9yKCkgdG8gbWFrZQorICAgIGhfZXJybm8gaHVtYW4gcmVhZGFibGU7IHByZXBhcmUgYSByZXBsYWNlbWVudAorICAgIGltcGxlbWVudGF0aW9uLgorCisgIC0gLmdpdGlnbm9yZSBmaWxlIGxpc3RlZCBnaXQtY29yZS5zcGVjIGJ1dCB3aGF0IHdlIGdlbmVyYXRlIGlzCisgICAgZ2l0LnNwZWMsIGFuZCBub2JvZHkgbm90aWNlZCBmb3IgYSBsb25nIHRpbWUuCisKKyAgLSAiZ2l0LW1lcmdlLXJlY3Vyc2l2ZSIgZG9lcyBub3QgdHJ5IHRvIHJ1biBmaWxlIGxldmVsIG1lcmdlCisgICAgb24gYmluYXJ5IGZpbGVzLgorCisgIC0gImdpdC1icmFuY2ggLS10cmFjayIgZGlkIG5vdCBjcmVhdGUgdHJhY2tpbmcgY29uZmlndXJhdGlvbgorICAgIGNvcnJlY3RseSB3aGVuIHRoZSBicmFuY2ggbmFtZSBoYWQgc2xhc2ggaW4gaXQuCisKKyAgLSBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciBzcGVjaWZpZWQgd2l0aCB1c2VyLmVtYWlsCisgICAgY29uZmlndXJhdGlvbiB3YXMgb3ZlcnJpZGRlbiBieSBFTUFJTCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAtIFRoZSB0cmVlIHBhcnNlciBkaWQgbm90IHdhcm4gYWJvdXQgdHJlZSBlbnRyaWVzIHdpdGgKKyAgICBub25zZW5zZSBmaWxlIG1vZGVzLCBhbmQgYXNzdW1lZCB0aGV5IG11c3QgYmUgYmxvYnMuCisKKyAgLSAiZ2l0IGxvZyAteiIgd2l0aG91dCBhbnkgb3RoZXIgcmVxdWVzdCB0byBnZW5lcmF0ZSBkaWZmIHN0aWxsCisgICAgaW52b2tlZCB0aGUgZGlmZiBtYWNoaW5lcnksIHdhc3RpbmcgY3ljbGVzLgorCisqIERvY3VtZW50YXRpb24KKworICAtIE1hbnkgdXBkYXRlcyB0byBmaXggc3RhbGUgb3IgbWlzc2luZyBkb2N1bWVudGF0aW9uLgorCisgIC0gQWx0aG91Z2ggb3VyIGRvY3VtZW50YXRpb24gd2FzIHByaW1hcmlseSBtZWFudCB0byBiZSBmb3JtYXR0ZWQKKyAgICB3aXRoIEFzY2lpRG9jNywgZm9ybWF0dGluZyB3aXRoIEFzY2lpRG9jOCBpcyBzdXBwb3J0ZWQgYmV0dGVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRkYjIyOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuMy50eHQKQEAgLTAsMCArMSwyNyBAQAorR0lUIHYxLjUuMi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMi4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCdWdmaXhlcworCisgICAtIFZlcnNpb24gMiBwYWNrIGluZGV4IGZvcm1hdCB3YXMgaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDEuNS4yCisgICAgIHRvIHN1cHBvcnQgcGFjayBmaWxlcyB0aGF0IGhhcyBvZmZzZXQgdGhhdCBjYW5ub3QgYmUKKyAgICAgcmVwcmVzZW50ZWQgaW4gMzItYml0LiAgVGhlIHJ1bnRpbWUgY29kZSB0byB2YWxpZGF0ZSBzdWNoCisgICAgIGFuIGluZGV4IG1pc2hhbmRsZWQgc3VjaCBhbiBpbmRleCBmb3IgYW4gZW1wdHkgcGFjay4KKworICAgLSBDb21taXQgd2Fsa2VycyAobW9zdCBub3RhYmx5LCBmZXRjaCBvdmVyIGh0dHAgcHJvdG9jb2wpCisgICAgIHRyaWVkIHRvIHRyYXZlcnNlIGNvbW1pdCBvYmplY3RzIGNvbnRhaW5lZCBpbiB0cmVlcyAoYWthCisgICAgIHN1YnByb2plY3QpOyB0aGV5IHNob3VsZG4ndC4KKworICAgLSBBIGJ1aWxkIG9wdGlvbiBOT19SX1RPX0dDQ19MSU5LRVIgd2FzIG5vdCBleHBsYWluZWQgaW4gTWFrZWZpbGUKKyAgICAgY29tbWVudCBjb3JyZWN0bHkuCisKKyAqIERvY3VtZW50YXRpb24gRml4ZXMgYW5kIFVwZGF0ZXMKKworICAgLSBnaXQtY29uZmlnIC0tcmVnZXhwIHdhcyBub3QgZG9jdW1lbnRlZCBwcm9wZXJseS4KKworICAgLSBnaXQtcmVwYWNrIC1hIHdhcyBub3QgZG9jdW1lbnRlZCBwcm9wZXJseS4KKworICAgLSBnaXQtcmVtb3RlIC1uIHdhcyBub3QgZG9jdW1lbnRlZCBwcm9wZXJseS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1Y2ZmNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjQudHh0CkBAIC0wLDAgKzEsMjggQEAKK0dJVCB2MS41LjIuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjIuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQnVnZml4ZXMKKworICAgLSAiZ2l0LWd1aSIgYnVnZml4ZXMsIGluY2x1ZGluZyBhIGhhbmRmdWwgZml4ZXMgdG8gcnVuIGl0CisgICAgIGJldHRlciBvbiBDeWd3aW4vTVNZUy4KKworICAgLSAiZ2l0IGNoZWNrb3V0IiBmYWlsZWQgdG8gc3dpdGNoIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KKyAgICAgYnJhbmNoZXMsIG9uZSBvZiB3aGljaCBoYXMgImZyb3R6IC0+IHh5enp5IiBzeW1saW5rIGFuZAorICAgICBmaWxlICJ4eXp6eS9maWxmcmUiLCB3aGlsZSB0aGUgb3RoZXIgb25lIGhhcyBhIGZpbGUKKyAgICAgImZyb3R6L2ZpbGZyZSIuCisKKyAgIC0gImdpdCBwcnVuZSIgdXNlZCB0byBzZWdmYXVsdCB1cG9uIHNlZWluZyBhIGNvbW1pdCB0aGF0IGlzCisgICAgIHJlZmVycmVkIHRvIGJ5IGEgdHJlZSBvYmplY3QgKGFrYSAic3VicHJvamVjdCIpLgorCisgICAtICJnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIC0tbm8taW5kZXgiIG1pc2hhbmRsZWQgYW4gYWRkZWQgZmlsZS4KKworICAgLSAiZ2l0IGFwcGx5IC0tcmV2ZXJzZSAtLXdoaXRlc3BhY2U9d2FybiIgc3RpbGwgY29tcGxhaW5lZAorICAgICBhYm91dCB3aGl0ZXNwYWNlcyB0aGF0IGEgZm9yd2FyZCBhcHBsaWNhdGlvbiB3b3VsZCBoYXZlCisgICAgIGludHJvZHVjZWQuCisKKyAqIERvY3VtZW50YXRpb24gRml4ZXMgYW5kIFVwZGF0ZXMKKworICAgLSBBIGhhbmRmdWwgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyODFjNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuNS50eHQKQEAgLTAsMCArMSwzMCBAQAorR0lUIHYxLjUuMi41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMi40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCdWdmaXhlcworCisgICAtICJnaXQgYWRkIC11IiBoYWQgYSBzZXJpb3VzIGRhdGEgY29ycnVwdGlvbiBwcm9ibGVtIGluIG9uZQorICAgICBzcGVjaWFsIGNhc2UgKHdoZW4gdGhlIGNoYW5nZXMgdG8gYSBzdWJkaXJlY3RvcnkncyBmaWxlcworICAgICBjb25zaXN0IG9ubHkgZGVsZXRpb24gb2YgZmlsZXMpLgorCisgICAtICJnaXQgYWRkIC11IDxwYXRoPiIgZGlkIG5vdCB3b3JrIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyAgIC0gImdpdCBhcHBseSIgbGVmdCBhbiBlbXB0eSBkaXJlY3RvcnkgYWZ0ZXIgYWxsIGl0cyBmaWxlcyBhcmUKKyAgICAgcmVuYW1lZCBhd2F5LgorCisgICAtICJnaXQgJGFueWNtZCBmb28vYmFyIiwgd2hlbiB0aGVyZSBpcyBhIGZpbGUgJ2ZvbycgaW4gdGhlCisgICAgIHdvcmtpbmcgdHJlZSwgY29tcGxhaW5lZCB0aGF0ICJnaXQgJGFueWNtZCBmb28vYmFyIC0tIiBmb3JtCisgICAgIHNob3VsZCBiZSB1c2VkIHRvIGRpc2FtYmlndWF0ZSBiZXR3ZWVuIHJldnMgYW5kIGZpbGVzLAorICAgICB3aGljaCB3YXMgY29tcGxldGVseSBib2d1cy4KKworICAgLSAiZ2l0IGNoZWNrb3V0LWluZGV4IiBhbmQgb3RoZXIgY29tbWFuZHMgdGhhdCBjaGVja3Mgb3V0CisgICAgIGZpbGVzIHRvIHRoZSB3b3JrIHRyZWUgdHJpZWQgdW5saW5rKDIpIG9uIGRpcmVjdG9yaWVzLAorICAgICB3aGljaCBpcyBhIHNhbmUgdGhpbmcgdG8gZG8gb24gc2FuZSBzeXN0ZW1zLCBidXQgbm90IG9uCisgICAgIFNvbGFyaXMgd2hlbiB5b3UgYXJlIHJvb3QuCisKKyAqIERvY3VtZW50YXRpb24gRml4ZXMgYW5kIFVwZGF0ZXMKKworICAgLSBBIGhhbmRmdWwgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzMjhkMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIudHh0CkBAIC0wLDAgKzEsMTk3IEBACitHSVQgdjEuNS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjUuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBQbHVtYmluZyBsZXZlbCBzdXBlcnByb2plY3Qgc3VwcG9ydC4KKworICBZb3UgY2FuIGluY2x1ZGUgYSBzdWJkaXJlY3RvcnkgdGhhdCBoYXMgYW4gaW5kZXBlbmRlbnQgZ2l0CisgIHJlcG9zaXRvcnkgaW4geW91ciBpbmRleCBhbmQgdHJlZSBvYmplY3RzIG9mIHlvdXIgcHJvamVjdAorICAoInN1cGVycHJvamVjdCIpLiAgVGhpcyBwbHVtYmluZyAoaS5lLiAiY29yZSIpIGxldmVsCisgIHN1cGVycHJvamVjdCBzdXBwb3J0IGV4cGxpY2l0bHkgZXhjbHVkZXMgcmVjdXJzaXZlIGJlaGF2aW91ci4KKworICBUaGUgInN1YnByb2plY3QiIGVudHJpZXMgaW4gdGhlIGluZGV4IGFuZCB0cmVlcyBvZiBhIHN1cGVycHJvamVjdAorICBhcmUgaW5jb21wYXRpYmxlIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgZ2l0LiAgRXhwZXJpbWVudGluZyB3aXRoCisgIHRoZSBwbHVtYmluZyBsZXZlbCBzdXBwb3J0IGlzIGVuY291cmFnZWQsIGJ1dCBiZSB3YXJuZWQgdGhhdAorICB1bmxlc3MgZXZlcnlib2R5IGluIHlvdXIgcHJvamVjdCB1cGRhdGVzIHRvIHRoaXMgcmVsZWFzZSBvcgorICBsYXRlciwgdXNpbmcgdGhpcyBmZWF0dXJlIHdvdWxkIG1ha2UgeW91ciBwcm9qZWN0CisgIGluYWNjZXNzaWJsZSBieSBwZW9wbGUgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBnaXQuCisKKyogUGx1bWJpbmcgbGV2ZWwgZ2l0YXR0cmlidXRlcyBzdXBwb3J0LgorCisgIFRoZSBnaXRhdHRyaWJ1dGVzIG1lY2hhbmlzbSBhbGxvd3MgeW91IHRvIGFkZCAnYXR0cmlidXRlcycgdG8KKyAgcGF0aHMgaW4geW91ciBwcm9qZWN0LCBhbmQgYWZmZWN0IHRoZSB3YXkgY2VydGFpbiBnaXQKKyAgb3BlcmF0aW9ucyB3b3JrLiAgQ3VycmVudGx5IHlvdSBjYW4gaW5mbHVlbmNlIGlmIGEgcGF0aCBpcworICBjb25zaWRlcmVkIGEgYmluYXJ5IG9yIHRleHQgKHRoZSBmb3JtZXIgd291bGQgYmUgdHJlYXRlZCBieQorICAnZ2l0IGRpZmYnIG5vdCB0byBwcm9kdWNlIHRleHR1YWwgb3V0cHV0OyB0aGUgbGF0dGVyIGNhbiBnbworICB0aHJvdWdoIHRoZSBsaW5lIGVuZGluZ3MgY29udmVyc2lvbiBwcm9jZXNzIGluIHJlcG9zaXRvcmllcworICB3aXRoIGNvcmUuYXV0b2NybGYgc2V0KSwgZXhwYW5kIGFuZCB1bmV4cGFuZCAnJElkJCcga2V5d29yZAorICB3aXRoIGJsb2Igb2JqZWN0IG5hbWUsIHNwZWNpZnkgYSBjdXN0b20gMy13YXkgbWVyZ2UgZHJpdmVyLAorICBhbmQgc3BlY2lmeSBhIGN1c3RvbSBkaWZmIGRyaXZlci4gIFlvdSBjYW4gYWxzbyBhcHBseQorICBhcmJpdHJhcnkgZmlsdGVyIHRvIGNvbnRlbnRzIG9uIGNoZWNrLWluL2NoZWNrLW91dCBjb2RlcGF0aAorICBidXQgdGhpcyBmZWF0dXJlIGlzIGFuIGV4dHJlbWVseSBzaGFycC1lZGdlZCByYXpvciBhbmQgbmVlZHMKKyAgdG8gYmUgaGFuZGxlZCB3aXRoIGNhdXRpb24gKGRvIG5vdCB1c2UgaXQgdW5sZXNzIHlvdQorICB1bmRlcnN0YW5kIHRoZSBlYXJsaWVyIG1haWxpbmcgbGlzdCBkaXNjdXNzaW9uIG9uIGtleXdvcmQKKyAgZXhwYW5zaW9uKS4gIFRoZXNlIGNvbnZlcnNpb25zIGFwcGx5IHdoZW4gY2hlY2tpbmcgZmlsZXMgaW4KKyAgb3Igb3V0LCBhbmQgZXhwb3J0aW5nIHZpYSBnaXQtYXJjaGl2ZS4KKworKiBUaGUgcGFja2ZpbGUgZm9ybWF0IG5vdyBvcHRpb25hbGx5IHN1cHBvcnRzIDY0LWJpdCBpbmRleC4KKworICBUaGlzIHJlbGVhc2Ugc3VwcG9ydHMgdGhlICJ2ZXJzaW9uIDIiIGZvcm1hdCBvZiB0aGUgLmlkeAorICBmaWxlLiAgVGhpcyBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBhIGh1Z2UgcGFja2ZpbGUKKyAgbmVlZHMgbW9yZSB0aGFuIDMyLWJpdCB0byBleHByZXNzIG9mZnNldHMgb2Ygb2JqZWN0cyBpbiB0aGUKKyAgcGFjay4KKworKiBDb21lcyB3aXRoIGFuIHVwZGF0ZWQgZ2l0LWd1aSAwLjcuMQorCisqIFVwZGF0ZWQgZ2l0d2ViOgorCisgIC0gY2FuIHNob3cgY29tYmluZWQgZGlmZiBmb3IgbWVyZ2VzOworICAtIHVzZXMgZm9udCBzaXplIG9mIHVzZXIncyBwcmVmZXJlbmNlLCBub3QgaGFyZGNvZGVkIGluIHBpeGVsczsKKyAgLSBjYW4gbm93ICdncmVwJzsKKworKiBOZXcgY29tbWFuZHMgYW5kIG9wdGlvbnMuCisKKyAgLSAiZ2l0IGJpc2VjdCBzdGFydCIgY2FuIG9wdGlvbmFsbHkgdGFrZSBhIHNpbmdsZSBiYWQgY29tbWl0IGFuZAorICAgIHplcm8gb3IgbW9yZSBnb29kIGNvbW1pdHMgb24gdGhlIGNvbW1hbmQgbGluZS4KKworICAtICJnaXQgc2hvcnRsb2ciIGNhbiBvcHRpb25hbGx5IGJlIHRvbGQgdG8gd3JhcCBpdHMgb3V0cHV0LgorCisgIC0gInN1YnRyZWUiIG1lcmdlIHN0cmF0ZWd5IGFsbG93cyBhbm90aGVyIHByb2plY3QgdG8gYmUgbWVyZ2VkIGluIGFzCisgICAgeW91ciBzdWJkaXJlY3RvcnkuCisKKyAgLSAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCBhIG5ldyAtLXN1YmplY3QtcHJlZml4PTxzdHJpbmc+CisgICAgb3B0aW9uLCB0byBvdmVycmlkZSB0aGUgYnVpbHQtaW4gIltQQVRDSF0iLgorCisgIC0gImdpdCBhZGQgLXUiIGlzIGEgcXVpY2sgd2F5IHRvIGRvIHRoZSBmaXJzdCBzdGFnZSBvZiAiZ2l0CisgICAgY29tbWl0IC1hIiAoaS5lLiB1cGRhdGUgdGhlIGluZGV4IHRvIG1hdGNoIHRoZSB3b3JraW5nCisgICAgdHJlZSk7IGl0IG9idmlvdXNseSBkb2VzIG5vdCBtYWtlIGEgY29tbWl0LgorCisgIC0gImdpdCBjbGVhbiIgaG9ub3JzIGEgbmV3IGNvbmZpZ3VyYXRpb24sICJjbGVhbi5yZXF1aXJlZm9yY2UiLiAgV2hlbgorICAgIHNldCB0byB0cnVlLCB0aGlzIG1ha2VzICJnaXQgY2xlYW4iIGEgbm8tb3AsIHByZXZlbnRpbmcgeW91CisgICAgZnJvbSBsb3NpbmcgZmlsZXMgYnkgdHlwaW5nICJnaXQgY2xlYW4iIHdoZW4geW91IG1lYW50IHRvCisgICAgc2F5ICJtYWtlIGNsZWFuIi4gIFlvdSBjYW4gc3RpbGwgc2F5ICJnaXQgY2xlYW4gLWYiIHRvCisgICAgb3ZlcnJpZGUgdGhpcy4KKworICAtICJnaXQgbG9nIiBmYW1pbHkgb2YgY29tbWFuZHMgbGVhcm5lZCAtLWRhdGU9e2xvY2FsLHJlbGF0aXZlLGRlZmF1bHR9CisgICAgb3B0aW9uLiAgLS1kYXRlPXJlbGF0aXZlIGlzIHN5bm9ueW0gdG8gdGhlIC0tcmVsYXRpdmUtZGF0ZS4KKyAgICAtLWRhdGU9bG9jYWwgZ2l2ZXMgdGhlIHRpbWVzdGFtcCBpbiBsb2NhbCB0aW1lem9uZS4KKworKiBVcGRhdGVkIGJlaGF2aW9yIG9mIGV4aXN0aW5nIGNvbW1hbmRzLgorCisgIC0gV2hlbiAkR0lUX0NPTU1JVFRFUl9FTUFJTCBvciAkR0lUX0FVVEhPUl9FTUFJTCBpcyBub3Qgc2V0CisgICAgYnV0ICRFTUFJTCBpcyBzZXQsIHRoZSBsYXR0ZXIgaXMgdXNlZCBhcyBhIHN1YnN0aXR1dGUuCisKKyAgLSAiZ2l0IGRpZmYgLS1zdGF0IiBzaG93cyBzaXplIG9mIHByZWltYWdlIGFuZCBwb3N0aW1hZ2UgYmxvYnMKKyAgICBmb3IgYmluYXJ5IGNvbnRlbnRzLiAgRWFybGllciBpdCBvbmx5IHNhaWQgIkJpbiIuCisKKyAgLSAiZ2l0IGxvc3QtZm91bmQiIHNob3dzIHN0dWZmIHRoYXQgYXJlIHVucmVhY2hhYmxlIGV4Y2VwdAorICAgIGZyb20gcmVmbG9ncy4KKworICAtICJnaXQgY2hlY2tvdXQgYnJhbmNoXjAiIG5vdyBkZXRhY2hlcyBIRUFEIGF0IHRoZSB0aXAgY29tbWl0CisgICAgb24gdGhlIG5hbWVkIGJyYW5jaCwgaW5zdGVhZCBvZiBqdXN0IHN3aXRjaGluZyB0byB0aGUKKyAgICBicmFuY2ggKHVzZSAiZ2l0IGNoZWNrb3V0IGJyYW5jaCIgdG8gc3dpdGNoIHRvIHRoZSBicmFuY2gsCisgICAgYXMgYmVmb3JlKS4KKworICAtICJnaXQgYmlzZWN0IG5leHQiIGNhbiBiZSB1c2VkIGFmdGVyIGdpdmluZyBvbmx5IGEgYmFkIGNvbW1pdAorICAgIHdpdGhvdXQgZ2l2aW5nIGEgZ29vZCBvbmUgKHRoaXMgc3RhcnRzIGJpc2VjdGlvbiBoYWxmLXdheSB0bworICAgIHRoZSByb290IGNvbW1pdCkuICBXZSB1c2VkIHRvIHJlZnVzZSB0byBvcGVyYXRlIHdpdGhvdXQgYQorICAgIGdvb2QgYW5kIGEgYmFkIGNvbW1pdC4KKworICAtICJnaXQgcHVzaCIsIHdoZW4gcHVzaGluZyBpbnRvIG1vcmUgdGhhbiBvbmUgcmVwb3NpdG9yeSwgZG9lcworICAgIG5vdCBzdG9wIGF0IHRoZSBmaXJzdCBlcnJvci4KKworICAtICJnaXQgYXJjaGl2ZSIgZG9lcyBub3QgaW5zaXN0IHlvdSB0byBnaXZlIC0tZm9ybWF0IHBhcmFtZXRlcgorICAgIGFueW1vcmU7IGl0IGRlZmF1bHRzIHRvICJ0YXIiLgorCisgIC0gImdpdCBjdnNzZXJ2ZXIiIGNhbiB1c2UgYmFja2VuZHMgb3RoZXIgdGhhbiBzcWxpdGUuCisKKyAgLSAiZ2l0dmlldyIgKGluIGNvbnRyaWIvIHNlY3Rpb24pIGxlYXJuZWQgdG8gYmV0dGVyIHN1cHBvcnQKKyAgICAiZ2l0LWFubm90YXRlIi4KKworICAtICJnaXQgZGlmZiAkY29tbWl0MTokcGF0aDIgJGNvbW1pdDI6JHBhdGgyIiBjYW4gbm93IHJlcG9ydAorICAgIG1vZGUgY2hhbmdlcyBiZXR3ZWVuIHRoZSB0d28gYmxvYnMuCisKKyAgLSBMb2NhbCAiZ2l0IGZldGNoIiBmcm9tIGEgcmVwb3NpdG9yeSB3aG9zZSBvYmplY3Qgc3RvcmUgaXMKKyAgICBvbmUgb2YgdGhlIGFsdGVybmF0ZXMgKGUuZy4gZmV0Y2hpbmcgZnJvbSB0aGUgb3JpZ2luIGluIGEKKyAgICByZXBvc2l0b3J5IGNyZWF0ZWQgd2l0aCAiZ2l0IGNsb25lIC1sIC1zIikgYXZvaWRzCisgICAgZG93bmxvYWRpbmcgb2JqZWN0cyB1bm5lY2Vzc2FyaWx5LgorCisgIC0gImdpdCBibGFtZSIgdXNlcyAubWFpbG1hcCB0byBjYW5vbmljYWxpemUgdGhlIGF1dGhvciBuYW1lCisgICAganVzdCBsaWtlICJnaXQgc2hvcnRsb2ciIGRvZXMuCisKKyAgLSAiZ2l0IHBhY2stb2JqZWN0cyIgcGF5cyBhdHRlbnRpb24gdG8gcGFjay5kZXB0aAorICAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAgLSAiZ2l0IGNoZXJyeS1waWNrIiBhbmQgImdpdCByZXZlcnQiIGRvZXMgbm90IHVzZSAubXNnIGZpbGUgaW4KKyAgICB0aGUgd29ya2luZyB0cmVlIHRvIHByZXBhcmUgY29tbWl0IG1lc3NhZ2U7IGluc3RlYWQgaXQgdXNlcworICAgICRHSVRfRElSL01FUkdFX01TRyBhcyBvdGhlciBjb21tYW5kcyBkby4KKworKiBCdWlsZHMKKworICAtIGdpdC1wNGltcG9ydCBoYXMgbmV2ZXIgYmVlbiBpbnN0YWxsZWQ7IG5vdyB0aGVyZSBpcyBhbgorICAgIGluc3RhbGxhdGlvbiBvcHRpb24gdG8gZG8gc28uCisKKyAgLSBnaXRrIGFuZCBnaXQtZ3VpIGNhbiBiZSBjb25maWd1cmVkIG91dC4KKworICAtIEdlbmVyYXRlZCBkb2N1bWVudGF0aW9uIHBhZ2VzIGF1dG9tYXRpY2FsbHkgZ2V0IHZlcnNpb24KKyAgICBpbmZvcm1hdGlvbiBmcm9tIEdJVF9WRVJTSU9OLgorCisgIC0gUGFyYWxsZWwgYnVpbGQgd2l0aCAibWFrZSAtaiIgZGVzY2VuZGluZyBpbnRvIHN1YmRpcmVjdG9yeQorICAgIHdhcyBmaXhlZC4KKworKiBQZXJmb3JtYW5jZSBUd2Vha3MKKworICAtIE9wdGltaXplZCAiZ2l0LXJldi1saXN0IC0tYmlzZWN0IiAoaGVuY2UgImdpdC1iaXNlY3QiKS4KKworICAtIE9wdGltaXplZCAiZ2l0LWFkZCAkcGF0aCIgaW4gYSBsYXJnZSBkaXJlY3RvcnksIG1vc3Qgb2YKKyAgICB3aG9zZSBjb250ZW50cyBhcmUgaWdub3JlZC4KKworICAtIE9wdGltaXplZCAiZ2l0LWRpZmYtdHJlZSIgZm9yIHJlZHVjZWQgbWVtb3J5IGZvb3RwcmludC4KKworICAtIFRoZSByZWN1cnNpdmUgbWVyZ2Ugc3RyYXRlZ3kgdXBkYXRlZCBhIHdvcmt0cmVlIGZpbGUgdGhhdAorICAgIHdhcyBjaGFuZ2VkIGlkZW50aWNhbGx5IGluIHR3byBicmFuY2hlcywgd2hlbiBvbmUgb2YgdGhlbQorICAgIHJlbmFtZWQgaXQuICBXZSBkbyBub3QgZG8gdGhhdCB3aGVuIHRoZXJlIGlzIG5vIHJlbmFtZSwgc28KKyAgICBtYXRjaCB0aGF0IGJlaGF2aW91ci4gIFRoaXMgYXZvaWRzIGV4Y2Vzc2l2ZSByZWJ1aWxkcy4KKworICAtIFRoZSBkZWZhdWx0IHBhY2sgZGVwdGggaGFzIGJlZW4gaW5jcmVhc2VkIHRvIDUwLCBhcyB0aGUKKyAgICByZWNlbnQgYWRkaXRpb24gb2YgZGVsdGFfYmFzZV9jYWNoZSBtYWtlcyBkZWVwZXIgZGVsdGEgY2hhaW5zCisgICAgbXVjaCBsZXNzIGV4cGVuc2l2ZSB0byBhY2Nlc3MuICBEZXBlbmRpbmcgb24gdGhlIHByb2plY3QsIGl0IHdhcworICAgIHJlcG9ydGVkIHRoYXQgdGhpcyByZWR1Y2VzIHRoZSByZXN1bHRpbmcgcGFjayBmaWxlIGJ5IDEwJQorICAgIG9yIHNvLgorCisKK0ZpeGVzIHNpbmNlIHYxLjUuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNS4xIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4KK3RoaXMgcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworKiBCdWdmaXhlcworCisgIC0gU3dpdGNoaW5nIGJyYW5jaGVzIHdpdGggImdpdCBjaGVja291dCIgcmVmdXNlZCB0byB3b3JrIHdoZW4KKyAgICBhIHBhdGggY2hhbmdlcyBmcm9tIGEgZmlsZSB0byBhIGRpcmVjdG9yeSBiZXR3ZWVuIHRoZQorICAgIGN1cnJlbnQgYnJhbmNoIGFuZCB0aGUgbmV3IGJyYW5jaCwgaW4gb3JkZXIgbm90IHRvIGxvc2UKKyAgICBwb3NzaWJsZSBsb2NhbCBjaGFuZ2VzIGluIHRoZSBkaXJlY3RvcnkgdGhhdCBpcyBiZWluZyB0dXJuZWQKKyAgICBpbnRvIGEgZmlsZSB3aXRoIHRoZSBzd2l0Y2guICBXZSBub3cgYWxsb3cgc3VjaCBhIGJyYW5jaAorICAgIHN3aXRjaCBhZnRlciBtYWtpbmcgc3VyZSB0aGF0IHRoZXJlIGlzIG5vIGxvY2FsbHkgbW9kaWZpZWQKKyAgICBmaWxlIG5vciB1bi1pZ25vcmVkIGZpbGUgaW4gdGhlIGRpcmVjdG9yeS4gIFRoaXMgaGFzIG5vdAorICAgIGJlZW4gYmFja3BvcnRlZCB0byAxLjUuMS54IHNlcmllcywgYXMgaXQgaXMgcmF0aGVyIGFuCisgICAgaW50cnVzaXZlIGNoYW5nZS4KKworICAtIE1lcmdpbmcgYnJhbmNoZXMgdGhhdCBoYXZlIGEgZmlsZSBpbiBvbmUgYW5kIGEgZGlyZWN0b3J5IGluCisgICAgYW5vdGhlciBhdCB0aGUgc2FtZSBwYXRoIHVzZWQgdG8gZ2V0IHF1aXRlIGNvbmZ1c2VkLiAgV2UKKyAgICBoYW5kbGUgc3VjaCBhIGNhc2UgYSBiaXQgbW9yZSBjYXJlZnVsbHksIGV2ZW4gdGhvdWdoIHRoYXQgaXMKKyAgICBzdGlsbCBsZWZ0IGFzIGEgY29uZmxpY3QgZm9yIHRoZSB1c2VyIHRvIHNvcnQgb3V0LiAgVGhpcworICAgIHdpbGwgbm90IGJlIGJhY2twb3J0ZWQgdG8gMS41LjEueCBzZXJpZXMsIGFzIGl0IGlzIHJhdGhlciBhbgorICAgIGludHJ1c2l2ZSBjaGFuZ2UuCisKKyAgLSBnaXQtZmV0Y2ggaGFkIHRyb3VibGUgd2l0aCBhIHJlbW90ZSB3aXRoIGluc2FuZWx5IGxhcmdlIG51bWJlcgorICAgIG9mIHJlZnMuCisKKyAgLSAiZ2l0IGNsZWFuIC1kIC1YIiBub3cgZG9lcyBub3QgcmVtb3ZlIG5vbi1leGNsdWRlZCBkaXJlY3Rvcmllcy4KKworICAtIHJlYmFzaW5nICh3aXRob3V0IC1tKSBhIHNlcmllcyB0aGF0IGNoYW5nZXMgYSBzeW1saW5rIHRvIGEgZGlyZWN0b3J5CisgICAgaW4gdGhlIG1pZGRsZSBvZiBhIHBhdGggY29uZnVzZWQgZ2l0LWFwcGx5IGdyZWF0bHkgYW5kIHJlZnVzZWQgdG8KKyAgICBvcGVyYXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZmNTQ2YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuMS50eHQKQEAgLTAsMCArMSwxMCBAQAorR0lUIHYxLjUuMy4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgc29sZWx5IHRvIGZpeCB0aGUgZ2VuZXJhdGVkIFJQTSdzIGRlcGVuZGVuY2llcy4gIFdlIHVzZWQKK3RvIGhhdmUgZ2l0LXA0IHBhY2thZ2UgYnV0IHdlIGRvIG5vdCBhbnltb3JlLiAgQXMgc3VnZ2VzdGVkIG9uCit0aGUgbWFpbGluZyBsaXN0LCB0aGlzIHJlbGVhc2UgbWFrZXMgZ2l0LWNvcmUgIk9ic29sZXRlIiBnaXQtcDQsCitzbyB0aGF0IHl1bSB1cGRhdGUgd291bGQgbm90IGNvbXBsYWluLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJiZGUzYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuMi50eHQKQEAgLTAsMCArMSw1OCBAQAorR0lUIHYxLjUuMy4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMy4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBnaXQtcHVzaCBzZW50IHRoaW4gcGFja3MgYnkgZGVmYXVsdCwgd2hpY2ggd2FzIG5vdCBnb29kIGZvcgorICAgdGhlIHB1YmxpYyBkaXN0cmlidXRpb24gc2VydmVyIChubyBwb2ludCBpbiBzYXZpbmcgdHJhbnNmZXIKKyAgIHdoaWxlIHB1c2hpbmc7IG5vIHBvaW50IGluIG1ha2luZyB0aGUgcmVzdWx0aW5nIHBhY2sgbGVzcworICAgb3B0aW11bSkuCisKKyAqIGdpdC1zdm4gc29tZXRpbWVzIHRlcm1pbmF0ZWQgd2l0aCAiTWFsZm9ybWVkIG5ldHdvcmsgZGF0YSIgd2hlbgorICAgdGFsa2luZyBvdmVyIHN2bjovLyBwcm90b2NvbC4KKworICogZ2l0LXNlbmQtZW1haWwgcmUtaXNzdWVkIHRoZSBzYW1lIG1lc3NhZ2UtaWQgYWJvdXQgMTAlIG9mIHRoZQorICAgdGltZSBpZiB5b3UgZmlyZWQgb2ZmIDMwIG1lc3NhZ2VzIHdpdGhpbiBhIHNpbmdsZSBzZWNvbmQuCisKKyAqIGdpdC1zdGFzaCB3YXMgbm90IHRlcm1pbmF0aW5nIHRoZSBsb2cgbWVzc2FnZSBvZiBjb21taXRzIGl0CisgICBpbnRlcm5hbGx5IGNyZWF0ZXMgd2l0aCBMRi4KKworICogZ2l0LWFwcGx5IGZhaWxlZCB0byBjaGVjayB0aGUgc2l6ZSBvZiB0aGUgcGF0Y2ggaHVuayB3aGVuIGl0cworICAgYmVnaW5uaW5nIHBhcnQgbWF0Y2hlZCB0aGUgcmVtYWluZGVyIG9mIHRoZSBwcmVpbWFnZSBleGFjdGx5LAorICAgZXZlbiB0aG91Z2ggdGhlIHByZWltYWdlIHJlY29yZGVkIGluIHRoZSBodW5rIHdhcyBtdWNoIGxhcmdlcgorICAgKHRoZXJlZm9yZSB0aGUgcGF0Y2ggc2hvdWxkIG5vdCBoYXZlIGFwcGxpZWQpLCBsZWFkaW5nIHRvIGEKKyAgIHNlZ2ZhdWx0LgorCisgKiAiZ2l0IHJtIGZvbyAmJiBnaXQgY29tbWl0IGZvbyIgY29tcGxhaW5lZCB0aGF0ICdmb28nIG5lZWRzIHRvCisgICBiZSBhZGRlZCBmaXJzdCwgaW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSByZW1vdmFsLCB3aGljaCB3YXMgYQorICAgbm9uc2Vuc2UuCisKKyAqIGdpdCBncmVwIC1jIHNhaWQgIi9kZXYvbnVsbDogMCIuCisKKyAqIGdpdC1hZGQgLXUgZmFpbGVkIHRvIHJlY29nbml6ZSBhIGJsb2Igd2hvc2UgdHlwZSBjaGFuZ2VkCisgICBiZXR3ZWVuIHRoZSBpbmRleCBhbmQgdGhlIHdvcmsgdHJlZS4KKworICogVGhlIGxpbWl0IHRvIHJlbmFtZSBkZXRlY3Rpb24gaGFzIGJlZW4gdGlnaHRlbmVkIGEgbG90IHRvCisgICByZWR1Y2UgcGVyZm9ybWFuY2UgcHJvYmxlbXMgd2l0aCBhIGh1Z2UgY2hhbmdlLgorCisgKiBjdnNpbXBvcnQgYW5kIHN2bmltcG9ydCBiYXJmZWQgd2hlbiB0aGUgaW5wdXQgdHJpZWQgdG8gbW92ZQorICAgYSB0YWcuCisKKyAqICJnaXQgYXBwbHkgLXBOIiBkaWQgbm90IGNob3AgdGhlIHJpZ2h0IG51bWJlciBvZiBkaXJlY3Rvcmllcy4KKworICogImdpdCBzdm5pbXBvcnQiIGRpZCBub3QgbGlrZSBTVk4gdGFncyB3aXRoIGZ1bm55IGNoYXJhY3RlcnMgaW4gdGhlbS4KKworICogZ2l0LWd1aSAwLjguMywgd2l0aCBhc3NvcnRlZCBmaXhlcywgaW5jbHVkaW5nOgorCisgICAtIGZvbnQtY2hvb3NlciBvbiBYMTEgd2FzIHVudXNhYmxlIHdpdGggbGFyZ2UgbnVtYmVyIG9mIGZvbnRzOworICAgLSBhIGRpZmYgdGhhdCBjb250YWluZWQgYSBkZWxldGVkIHN5bWxpbmsgbWFkZSBpdCBiYXJmOworICAgLSBhbiB1bnRyYWNrZWQgc3ltYm9saWMgbGluayB0byBhIGRpcmVjdG9yeSBtYWRlIGl0IGZhcnQ7CisgICAtIGEgZmlsZSB3aXRoICUgaW4gaXRzIG5hbWUgbWFkZSBpdCB2b21pdDsKKworCitEb2N1bWVudGF0aW9uIHVwZGF0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVc2VyIG1hbnVhbCBoYXMgYmVlbiBzb21ld2hhdCByZXN0cnVjdHVyZWQuICBJIHRoaW5rIHRoZSBuZXcKK29yZ2FuaXphdGlvbiBpcyBtdWNoIGVhc2llciB0byByZWFkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIxMzg0NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuMy50eHQKQEAgLTAsMCArMSwzMSBAQAorR0lUIHYxLjUuMy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMy4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBnaXQtcXVpbHRpbXBvcnQgZGlkIG5vdCBsaWtlIGl0IHdoZW4gYSBwYXRjaCBkZXNjcmliZWQgaW4gdGhlCisgICBzZXJpZXMgZmlsZSBkb2VzIG5vdCBleGlzdC4KKworICogcDQgaW1wb3J0ZXIgbWlzc2VkIGV4ZWN1dGFibGUgYml0IGluIHNvbWUgY2FzZXMuCisKKyAqIFRoZSBkZWZhdWx0IHNoZWxsIG9uIHNvbWUgRnJlZUJTRCBkaWQgbm90IGV4ZWN1dGUgdGhlCisgICBhcmd1bWVudCBwYXJzaW5nIGNvZGUgY29ycmVjdGx5IGFuZCBtYWRlIGdpdCB1bnVzYWJsZS4KKworICogZ2l0LXN2biBpbmNvcnJlY3RseSBzcGF3bmVkIHBhZ2VyIGV2ZW4gd2hlbiB0aGUgdXNlcgorICAgZXhwbGljaXRseSBhc2tlZCBub3QgdG8uCisKKyAqIHNhbXBsZSBwb3N0LXJlY2VpdmUgaG9vayBvdmVycXVvdGVkIHRoZSBlbnZlbG9wZSBzZW5kZXIKKyAgIHZhbHVlLgorCisgKiBnaXQtYW0gZ290IGNvbmZ1c2VkIHdoZW4gdGhlIHBhdGNoIGNvbnRhaW5lZCBhIGNoYW5nZSB0aGF0IGlzCisgICBvbmx5IGFib3V0IHR5cGUgYW5kIG5vdCBjb250ZW50cy4KKworICogZ2l0LW1lcmdldG9vbCBkaWQgbm90IHNob3cgb3VyIGFuZCB0aGVpciB2ZXJzaW9uIG9mIHRoZQorICAgY29uZmxpY3RlZCBmaWxlIHdoZW4gc3RhcnRlZCBmcm9tIGEgc3ViZGlyZWN0b3J5IG9mIHRoZQorICAgcHJvamVjdC4KKworICogZ2l0LW1lcmdldG9vbCBkaWQgbm90IHBhc3MgY29ycmVjdCBvcHRpb25zIHdoZW4gaW52b2tpbmcgZGlmZjMuCisKKyAqIGdpdC1sb2cgc29tZXRpbWVzIGludm9rZWQgdW5kZXJseWluZyAiZGlmZiIgbWFjaGluZXJ5CisgICB1bm5lY2Vzc2FyaWx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA0YjNhNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNC50eHQKQEAgLTAsMCArMSwzNSBAQAorR0lUIHYxLjUuMy40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMy4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDaGFuZ2UgdG8gImdpdC1scy1maWxlcyIgaW4gdjEuNS4zLjMgdGhhdCB3YXMgaW50cm9kdWNlZCB0byBzdXBwb3J0CisgICBwYXJ0aWFsIGNvbW1pdCBvZiByZW1vdmFsIGJldHRlciBoYWQgYSBzZWdmYXVsdGluZyBidWcsIHdoaWNoIHdhcworICAgZGlhZ25vc2VkIGFuZCBmaXhlZCBieSBLZWl0aCBhbmQgQ2FybC4KKworICogUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGZvciByZW5hbWUgZGV0ZWN0aW9uIGhhcyBiZWVuIGJhY2twb3J0ZWQKKyAgIGZyb20gdGhlICdtYXN0ZXInIGJyYW5jaC4KKworICogImdpdC1mb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUobnVtcGFyZW50KSciIHdhcyBub3Qgd29ya2luZworICAgY29ycmVjdGx5IGF0IGFsbCwgYW5kIC0tZm9ybWF0PSclKHBhcmVudCknIHdhcyBub3Qgd29ya2luZyBmb3IKKyAgIG1lcmdlIGNvbW1pdHMuCisKKyAqIFNhbXBsZSAicG9zdC1yZWNlaXZlLWhvb2siIGluY29ycmVjdGx5IHNlbnQgb3V0IHB1c2gKKyAgIG5vdGlmaWNhdGlvbiBlLW1haWxzIG1hcmtlZCBhcyAiRnJvbTogIiB0aGUgY29tbWl0dGVyIG9mIHRoZQorICAgY29tbWl0IHRoYXQgaGFwcGVuZWQgdG8gYmUgYXQgdGhlIHRpcCBvZiB0aGUgYnJhbmNoIHRoYXQgd2FzCisgICBwdXNoZWQsIG5vdCBmcm9tIHRoZSBwZXJzb24gd2hvIHB1c2hlZC4KKworICogImdpdC1yZW1vdGUiIGRpZCBub3QgZXhpdCBub24temVybyBzdGF0dXMgdXBvbiBlcnJvci4KKworICogImdpdC1hZGQgLWkiIGRpZCBub3QgcmVzcG9uZCB2ZXJ5IHdlbGwgdG8gRU9GIGZyb20gdHR5IG5vcgorICAgYm9ndXMgaW5wdXQuCisKKyAqICJnaXQtcmViYXNlIC1pIiBzcXVhc2ggc3ViY29tbWFuZCBpbmNvcnJlY3RseSBtYWRlIHRoZQorICAgYXV0aG9yIG9mIGxhdGVyIGNvbW1pdCB0aGUgYXV0aG9yIG9mIHJlc3VsdGluZyBjb21taXQsCisgICBpbnN0ZWFkIG9mIHRha2luZyBmcm9tIHRoZSBmaXJzdCBvbmUgaW4gdGhlIHNxdWFzaGVkIHNlcmllcy4KKworICogImdpdC1zdGFzaCBhcHBseSAtLWluZGV4IiB3YXMgbm90IGRvY3VtZW50ZWQuCisKKyAqIGF1dG9jb25maWd1cmF0aW9uIGxlYXJuZWQgdGhhdCAiYXIiIGNvbW1hbmQgaXMgZm91bmQgYXMgImdhcyIgb24KKyAgIHNvbWUgc3lzdGVtcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZjFkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjUudHh0CkBAIC0wLDAgKzEsOTQgQEAKK0dJVCB2MS41LjMuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjMuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQ29tZXMgd2l0aCBnaXQtZ3VpIDAuOC40LgorCisgKiAiZ2l0LWNvbmZpZyIgc2lsZW50bHkgaWdub3JlZCBvcHRpb25zIGFmdGVyIC0tbGlzdDsgbm93IGl0IHdpbGwKKyAgIGVycm9yIG91dCB3aXRoIGEgdXNhZ2UgbWVzc2FnZS4KKworICogImdpdC1jb25maWcgLS1maWxlIiBmYWlsZWQgaWYgdGhlIGFyZ3VtZW50IHVzZWQgYSByZWxhdGl2ZSBwYXRoCisgICBhcyBpdCBjaGFuZ2VkIGRpcmVjdG9yaWVzIGJlZm9yZSBvcGVuaW5nIHRoZSBmaWxlLgorCisgKiAiZ2l0LWNvbmZpZyAtLWZpbGUiIG5vdyBkaXNwbGF5cyBhIHByb3BlciBlcnJvciBtZXNzYWdlIGlmIGl0CisgICBjYW5ub3QgcmVhZCB0aGUgZmlsZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworICogImdpdC1jb25maWciLCAiZ2l0LWRpZmYiLCAiZ2l0LWFwcGx5IiBmYWlsZWQgaWYgcnVuIGZyb20gYQorICAgc3ViZGlyZWN0b3J5IHdpdGggcmVsYXRpdmUgR0lUX0RJUiBhbmQgR0lUX1dPUktfVFJFRSBzZXQuCisKKyAqICJnaXQtYmxhbWUiIGNyYXNoZWQgaWYgcnVuIGR1cmluZyBhIG1lcmdlIGNvbmZsaWN0LgorCisgKiAiZ2l0LWFkZCAtaSIgZGlkIG5vdCBoYW5kbGUgc2luZ2xlIGxpbmUgaHVua3MgY29ycmVjdGx5LgorCisgKiAiZ2l0LXJlYmFzZSAtaSIgYW5kICJnaXQtc3Rhc2ggYXBwbHkiIGZhaWxlZCBpZiBleHRlcm5hbCBkaWZmCisgICBkcml2ZXJzIHdlcmUgdXNlZCBmb3Igb25lIG9yIG1vcmUgZmlsZXMgaW4gYSBjb21taXQuICBUaGV5IG5vdworICAgYXZvaWQgY2FsbGluZyB0aGUgZXh0ZXJuYWwgZGlmZiBkcml2ZXJzLgorCisgKiAiZ2l0LWxvZyAtLWZvbGxvdyIgZGlkIG5vdCB3b3JrIHVubGVzcyBkaWZmIGdlbmVyYXRpb24gKGUuZy4gLXApCisgICB3YXMgYWxzbyByZXF1ZXN0ZWQuCisKKyAqICJnaXQtbG9nIC0tZm9sbG93IC1CIiBkaWQgbm90IHdvcmsgYXQgYWxsLiAgRml4ZWQuCisKKyAqICJnaXQtbG9nIC1NIC1CIiBkaWQgbm90IGNvcnJlY3RseSBoYW5kbGUgY2FzZXMgb2YgdmVyeSBsYXJnZSBmaWxlcworICAgYmVpbmcgcmVuYW1lZCBhbmQgcmVwbGFjZWQgYnkgdmVyeSBzbWFsbCBmaWxlcyBpbiB0aGUgc2FtZSBjb21taXQuCisKKyAqICJnaXQtbG9nIiBwcmludGVkIGV4dHJhIG5ld2xpbmVzIGJldHdlZW4gY29tbWl0cyB3aGVuIGEgZGlmZgorICAgd2FzIGdlbmVyYXRlZCBpbnRlcm5hbGx5IChlLmcuIC1TIG9yIC0tZm9sbG93KSBidXQgbm90IGRpc3BsYXllZC4KKworICogImdpdC1wdXNoIiBlcnJvciBtZXNzYWdlIGlzIG1vcmUgaGVscGZ1bCB3aGVuIHB1c2hpbmcgdG8gYQorICAgcmVwb3NpdG9yeSB3aXRoIG5vIG1hdGNoaW5nIHJlZnMgYW5kIG5vbmUgc3BlY2lmaWVkLgorCisgKiAiZ2l0LXB1c2giIG5vdyByZXNwZWN0cyArIChmb3JjZSBwdXNoKSBvbiB3aWxkY2FyZCByZWZzcGVjcywKKyAgIG1hdGNoaW5nIHRoZSBiZWhhdmlvciBvZiBnaXQtZmV0Y2guCisKKyAqICJnaXQtZmlsdGVyLWJyYW5jaCIgbm93IHVwZGF0ZXMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gaXQKKyAgIGhhcyBmaW5pc2hlZCBmaWx0ZXJpbmcgdGhlIGN1cnJlbnQgYnJhbmNoLgorCisgKiAiZ2l0LWluc3Rhd2ViIiBubyBsb25nZXIgZmFpbHMgb24gTWFjIE9TIFguCisKKyAqICJnaXQtY3ZzZXhwb3J0Y29tbWl0IiBkaWRuJ3QgYWx3YXlzIGNyZWF0ZSBuZXcgcGFyZW50IGRpcmVjdG9yaWVzCisgICBiZWZvcmUgdHJ5aW5nIHRvIGNyZWF0ZSBuZXcgY2hpbGQgZGlyZWN0b3JpZXMuICBGaXhlZC4KKworICogImdpdC1mZXRjaCIgcHJpbnRlZCBhIHNjYXJ5IChidXQgYm9ndXMpIGVycm9yIG1lc3NhZ2Ugd2hpbGUKKyAgIGZldGNoaW5nIGEgdGFnIHRoYXQgcG9pbnRlZCB0byBhIHRyZWUgb3IgYmxvYi4gIFRoZSBlcnJvciBkaWQKKyAgIG5vdCBpbXBhY3QgY29ycmVjdG5lc3MsIG9ubHkgdXNlciBwZXJjZXB0aW9uLiAgVGhlIGJvZ3VzIGVycm9yCisgICBpcyBubyBsb25nZXIgcHJpbnRlZC4KKworICogImdpdC1scy1maWxlcyAtLWlnbm9yZWQiIGRpZCBub3QgcHJvcGVybHkgZGVzY2VuZCBpbnRvIG5vbi1pZ25vcmVkCisgICBkaXJlY3RvcmllcyB0aGF0IHRoZW1zZWx2ZXMgY29udGFpbmVkIGlnbm9yZWQgZmlsZXMgaWYgZF90eXBlCisgICB3YXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZmlsZXN5c3RlbS4gIFRoaXMgYnVnIGltcGFjdGVkIHN5c3RlbXMKKyAgIHN1Y2ggYXMgQUZTLiAgRml4ZWQuCisKKyAqIEdpdCBzZWdmYXVsdGVkIHdoZW4gcmVhZGluZyBhbiBpbnZhbGlkIC5naXRhdHRyaWJ1dGVzIGZpbGUuICBGaXhlZC4KKworICogcG9zdC1yZWNlaXZlLWVtYWlsIGV4YW1wbGUgaG9vayB3YXMgZml4ZWQgZm9yIG5vbi1mYXN0LWZvcndhcmQKKyAgIHVwZGF0ZXMuCisKKyAqIERvY3VtZW50YXRpb24gdXBkYXRlcyBmb3Igc3VwcG9ydGVkIChidXQgcHJldmlvdXNseSB1bmRvY3VtZW50ZWQpCisgICBvcHRpb25zIG9mICJnaXQtYXJjaGl2ZSIgYW5kICJnaXQtcmVmbG9nIi4KKworICogIm1ha2UgY2xlYW4iIG5vIGxvbmdlciBkZWxldGVzIHRoZSBjb25maWd1cmUgc2NyaXB0IHRoYXQgc2hpcHMKKyAgIHdpdGggdGhlIGdpdCB0YXJiYWxsLCBtYWtpbmcgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlIGJ1aWxkcyBlYXNpZXIuCisKKyAqICJnaXQtcmVtb3RlIHNob3cgb3JpZ2luIiBzcGV3ZWQgYSB3YXJuaW5nIG1lc3NhZ2UgZnJvbSBQZXJsCisgICB3aGVuIG5vIHJlbW90ZSBpcyBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2ggdmlhCisgICBicmFuY2guPG5hbWU+LnJlbW90ZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLgorCisgKiBCdWlsZGluZyB3aXRoIE5PX1BFUkxfTUFLRU1BS0VSIGV4Y2Vzc2l2ZWx5IHJlYnVpbHQgY29udGVudHMKKyAgIG9mIHBlcmwvIHN1YmRpcmVjdG9yeSBieSByZXdyaXRpbmcgcGVybC5tYWsuCisKKyAqIGh0dHAuc3NsVmVyaWZ5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgd2VyZSBub3QgdXNlZCBpbiBzY3JpcHRlZAorICAgUG9yY2VsYWlucy4KKworICogImdpdC1hZGQiIGxlYWtlZCBhIGJpdCBvZiBtZW1vcnkgd2hpbGUgc2Nhbm5pbmcgZm9yIGZpbGVzIHRvIGFkZC4KKworICogQSBmZXcgd29ya2Fyb3VuZHMgdG8gc3F1ZWxjaCBmYWxzZSB3YXJuaW5ncyBmcm9tIHJlY2VudCBnY2MgaGF2ZQorICAgYmVlbiBhZGRlZC4KKworICogImdpdC1zZW5kLXBhY2sgJHJlbW90ZSBmcm90eiIgc2VnZmF1bHRlZCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcKKyAgIG5hbWVkICdmcm90eicgb24gdGhlIGxvY2FsIGVuZC4KKworICogImdpdC1yZWJhc2UgLS1pbnRlcmFjdGl2ZSIgZGlkIG5vdCBoYW5kbGUgaXRzICItLXN0cmF0ZWd5IiBvcHRpb24KKyAgIHByb3Blcmx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5YTJiMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNi50eHQKQEAgLTAsMCArMSw0OCBAQAorR0lUIHYxLjUuMy42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMy41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBnaXQtY3ZzZXhwb3J0Y29tbWl0IGhhbmRsZXMgcm9vdCBjb21taXRzIGJldHRlci4KKworICogZ2l0LXN2biBkY29tbWl0IHVzZWQgdG8gY2xvYmJlciB3aGVuIHNlbmRpbmcgYSBzZXJpZXMgb2YKKyAgIHBhdGNoZXMuCisKKyAqIGdpdC1zdm4gZGNvbW1pdCBmYWlsZWQgYWZ0ZXIgYXR0ZW1wdGluZyB0byByZWJhc2Ugd2hlbgorICAgc3RhcnRlZCB3aXRoIGEgZGlydHkgaW5kZXg7IG5vdyBpdCBzdG9wcyB1cGZyb250LgorCisgKiBnaXQtZ3JlcCBzb21ldGltZXMgcmVmdXNlZCB0byB3b3JrIHdoZW4geW91ciBpbmRleCB3YXMKKyAgIHVubWVyZ2VkLgorCisgKiAiZ2l0LWdyZXAgLUExIC1CMiIgYWN0ZWQgYXMgaWYgaXQgd2FzIHRvbGQgdG8gcnVuICJnaXQgLUExIC1CMjEiLgorCisgKiBnaXQtaGFzaC1vYmplY3QgZGlkIG5vdCBob25vciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcywgc3VjaCBhcworICAgY29yZS5jb21wcmVzc2lvbi4KKworICogZ2l0LWluZGV4LXBhY2sgY2hva2VkIG9uIGEgaHVnZSBwYWNrIG9uIDMyLWJpdCBtYWNoaW5lcywgZXZlbiB3aGVuCisgICBsYXJnZSBmaWxlIG9mZnNldHMgYXJlIHN1cHBvcnRlZC4KKworICogYXRvbSBmZWVkcyBmcm9tIGdpdC13ZWIgc2FpZCAiMTAiIGZvciB0aGUgbW9udGggb2YgTm92ZW1iZXIuCisKKyAqIGEgbWVtb3J5IGxlYWsgaW4gY29tbWl0IHdhbGtlciB3YXMgcGx1Z2dlZC4KKworICogV2hlbiBnaXQtc2VuZC1lbWFpbCBpbnNlcnRlZCB0aGUgb3JpZ2luYWwgYXV0aG9yJ3MgRnJvbToKKyAgIGFkZHJlc3MgaW4gYm9keSwgaXQgZGlkIG5vdCBtYXJrIHRoZSBtZXNzYWdlIHdpdGgKKyAgIENvbnRlbnQtdHlwZTogYXMgbmVlZGVkLgorCisgKiBnaXQtcmV2ZXJ0IGFuZCBnaXQtY2hlcnJ5LXBpY2sgaW5jb3JyZWN0bHkgcmVmdXNlZCB0byBzdGFydAorICAgd2hlbiB0aGUgd29yayB0cmVlIHdhcyBkaXJ0eS4KKworICogZ2l0LWNsZWFuIGRpZCBub3QgaG9ub3IgY29yZS5leGNsdWRlc2ZpbGUgY29uZmlndXJhdGlvbi4KKworICogZ2l0LWFkZCBtaXNoYW5kbGVkICIuZ2l0aWdub3JlIiBmaWxlcyB3aGVuIGFwcGx5aW5nIHRoZW0gdG8KKyAgIHN1YmRpcmVjdG9yaWVzLgorCisgKiBXaGlsZSBpbXBvcnRpbmcgYSB0b28gYnJhbmNoeSBoaXN0b3J5LCBnaXQtZmFzdGltcG9ydCBkaWQgbm90CisgICBob25vciBkZWx0YSBkZXB0aCBsaW1pdCBwcm9wZXJseS4KKworICogU3VwcG9ydCBmb3IgemxpYiBpbXBsZW1lbnRhdGlvbnMgdGhhdCBsYWNrIFpMSUJfVkVSTlVNIGFuZCBkZWZpbml0aW9uCisgICBvZiBkZWZsYXRlQm91bmQoKSBoYXMgYmVlbiBhZGRlZC4KKworICogUXVpdGUgYSBsb3Qgb2YgZG9jdW1lbnRhdGlvbiBjbGFyaWZpY2F0aW9ucy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNjkwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjcudHh0CkBAIC0wLDAgKzEsNDUgQEAKK0dJVCB2MS41LjMuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjMuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogZ2l0LXNlbmQtZW1haWwgYWRkZWQgOC1iaXQgY29udGVudHMgdG8gdGhlIHBheWxvYWQgd2l0aG91dAorICAgbWFya2luZyBpdCBhcyA4LWJpdCBpbiBhIENURSBoZWFkZXIuCisKKyAqICJnaXQtYnVuZGxlIGNyZWF0ZSBhLmJuZGwgSEVBRCIgZGVyZWZlcmVuY2VkIHRoZSBzeW1yZWYgYW5kCisgICBkaWQgbm90IHJlY29yZCB0aGUgcmVmIGFzICdIRUFEJzsgdGhpcyBwcmV2ZW50ZWQgYSBidW5kbGUKKyAgIGZyb20gYmVpbmcgdXNlZCBhcyBhIG5vcm1hbCBzb3VyY2Ugb2YgZ2l0LWNsb25lLgorCisgKiBUaGUgY29kZSB0byByZWplY3Qgbm9uc2Vuc2UgY29tbWFuZCBsaW5lIG9mIHRoZSBmb3JtCisgICAiZ2l0LWNvbW1pdCAtYSBwYXRocy4uLiIgYW5kICJnaXQtY29tbWl0IC0taW50ZXJhY3RpdmUKKyAgIHBhdGhzLi4uIiB3ZXJlIGJyb2tlbi4KKworICogQWRkaW5nIGEgc2lnbmF0dXJlIHRoYXQgaXMgbm90IEFTQ0lJLW9ubHkgdG8gYW4gb3JpZ2luYWwKKyAgIGNvbW1pdCB0aGF0IGlzIEFTQ0lJLW9ubHkgd291bGQgbWFrZSB0aGUgcmVzdWx0IG5vbi1BU0NJSS4KKyAgICJnaXQtZm9ybWF0LXBhdGNoIC1zIiBkaWQgbm90IG1hcmsgc3VjaCBhIG1lc3NhZ2UgY29ycmVjdGx5CisgICB3aXRoIE1JTUUgZW5jb2RpbmcgaGVhZGVyLgorCisgKiBnaXQtYWRkIHNvbWV0aW1lcyBkaWQgbm90IG1hcmsgdGhlIHJlc3VsdGluZyBpbmRleCBlbnRyeQorICAgc3RhdC1jbGVhbi4gIFRoaXMgYWZmZWN0ZWQgb25seSBjYXNlcyB3aGVuIGFkZGluZyB0aGUKKyAgIGNvbnRlbnRzIHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBwcmV2aW91c2x5IHN0YWdlZAorICAgY29udGVudHMsIGFuZCB0aGUgcHJldmlvdXMgc3RhZ2luZyBtYWRlIHRoZSBpbmRleCBlbnRyeQorICAgInJhY2lseSBjbGVhbiIuCisKKyAqIGdpdC1jb21taXQgZGlkIG5vdCBob25vciBHSVRfSU5ERVhfRklMRSB0aGUgdXNlciBoYWQgaW4gdGhlCisgICBlbnZpcm9ubWVudC4KKworICogV2hlbiBjaGVja2luZyBvdXQgYSByZXZpc2lvbiwgZ2l0LWNoZWNrb3V0IGRpZCBub3QgcmVwb3J0IHdoZXJlIHRoZQorICAgdXBkYXRlZCBIRUFEIGlzIGlmIHlvdSBoYXBwZW5lZCB0byBoYXZlIGEgZmlsZSBjYWxsZWQgSEVBRCBpbiB0aGUKKyAgIHdvcmsgdHJlZS4KKworICogImdpdC1yZXYtbGlzdCAtLW9iamVjdHMiIG1pc2hhbmRsZWQgYSB0cmVlIHRoYXQgcG9pbnRzIGF0IGEKKyAgIHN1Ym1vZHVsZS4KKworICogImdpdCBjdnNpbXBvcnQiIHdhcyBub3QgcmVhZHkgZm9yIHBhY2tlZCByZWZzIHRoYXQgImdpdCBnYyIgY2FuCisgICBwcm9kdWNlIGFuZCBnYXZlIGluY29ycmVjdCByZXN1bHRzLgorCisgKiBNYW55IHNjcmlwdGVkIFBvcmNlbGFpbnMgd2VyZSBjb25mdXNlZCB3aGVuIHlvdSBoYXBwZW5lZCB0byBoYXZlIGEKKyAgIGZpbGUgY2FsbGVkICJIRUFEIiBpbiB5b3VyIHdvcmsgdHJlZS4KKworQWxzbyBpdCBjb250YWlucyB1cGRhdGVzIHRvIHRoZSB1c2VyIG1hbnVhbCBhbmQgZG9jdW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuOC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlM2ZmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjgudHh0CkBAIC0wLDAgKzEsMjUgQEAKK0dJVCB2MS41LjMuOCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjMuNworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogU29tZSBkb2N1bWVudGF0aW9uIHVzZWQgImVtYWlsLmNvbSIgYXMgYW4gZXhhbXBsZSBkb21haW4uCisKKyAqIGdpdC1zdm4gZml4IHRvIGhhbmRsZSBmdW5reSBicmFuY2ggYW5kIHByb2plY3QgbmFtZXMgZ29pbmcgb3ZlcgorICAgaHR0cC9odHRwcyBjb3JyZWN0bHkuCisKKyAqIGdpdC1zdm4gZml4IHRvIHRvbmUgZG93biBhIG5lZWRsZXNzbHkgYWxhcm1pbmcgd2FybmluZyBtZXNzYWdlLgorCisgKiBnaXQtY2xvbmUgZGlkIG5vdCBjb3JyZWN0bHkgcmVwb3J0IGVycm9ycyB3aGlsZSBmZXRjaGluZyBvdmVyIGh0dHAuCisKKyAqIGdpdC1zZW5kLWVtYWlsIGFkZGVkIHJlZHVuZGFudCBNZXNzYWdlLUlkOiBoZWFkZXIgdG8gdGhlIG91dGdvaW5nCisgICBlLW1haWwgd2hlbiB0aGUgcGF0Y2ggdGV4dCBhbHJlYWR5IGhhZCBvbmUuCisKKyAqIGEgcmVhZC1iZXlvbmQtZW5kLW9mLWJ1ZmZlciBidWcgaW4gY29uZmlndXJhdGlvbiBmaWxlIHVwZGF0ZXIgd2FzIGZpeGVkLgorCisgKiBnaXQtZ3JlcCB1c2VkIHRvIHNob3cgdGhlIHNhbWUgaGl0IHJlcGVhdGVkbHkgZm9yIHVubWVyZ2VkIHBhdGhzLgorCisgKiBBZnRlciBhbWVuZGluZyB0aGUgcGF0Y2ggdGl0bGUgaW4gImdpdC1hbSAtaSIsIHRoZSBjb21tYW5kIGRpZCBub3QKKyAgIHJlcG9ydCB0aGUgcGF0Y2ggaXQgYXBwbGllZCB3aXRoIHRoZSB1cGRhdGVkIHRpdGxlLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NjhkM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLnR4dApAQCAtMCwwICsxLDM2NiBAQAorR0lUIHYxLjUuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS41LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIGNvbW1pdCB3YWxrZXJzIG90aGVyIHRoYW4gaHR0cCBhcmUgb2ZmaWNpYWxseSBkZXByZWNhdGVkLAorICBidXQgc3RpbGwgc3VwcG9ydGVkIGZvciBub3cuCisKKyogVGhlIHN1Ym1vZHVsZSBzdXBwb3J0IGhhcyBQb3JjZWxhaW4gbGF5ZXIuCisKKyAgTm90ZSB0aGF0IHRoZSBjdXJyZW50IHN1Ym1vZHVsZSBzdXBwb3J0IGlzIG1pbmltYWwgYW5kIHRoaXMgaXMKKyAgZGVsaWJlcmF0ZWx5IHNvLiAgQSBkZXNpZ24gZGVjaXNpb24gd2UgbWFkZSBpcyB0aGF0IG9wZXJhdGlvbnMKKyAgYXQgdGhlIHN1cGVybW9kdWxlIGxldmVsIGRvIG5vdCByZWN1cnNlIGludG8gc3VibW9kdWxlcyBieQorICBkZWZhdWx0LiAgVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgbGF0ZXIgd2Ugd291bGQgYWRkIGEKKyAgbWVjaGFuaXNtIHRvIHRlbGwgZ2l0IHdoaWNoIHN1Ym1vZHVsZXMgdGhlIHVzZXIgaXMgaW50ZXJlc3RlZAorICBpbiwgYW5kIHRoaXMgaW5mb3JtYXRpb24gbWlnaHQgYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlCisgIHJlY3Vyc2l2ZSBiZWhhdmlvdXIgb2YgY2VydGFpbiBjb21tYW5kcyAoZS5nLiAiZ2l0IGNoZWNrb3V0IgorICBhbmQgImdpdCBkaWZmIiksIGJ1dCBjdXJyZW50bHkgd2UgaGF2ZW4ndCBhZ3JlZWQgb24gd2hhdCB0aGF0CisgIG1lY2hhbmlzbSBzaG91bGQgbG9vayBsaWtlLiAgVGhlcmVmb3JlLCBpZiB5b3UgdXNlIHN1Ym1vZHVsZXMsCisgIHlvdSB3b3VsZCBwcm9iYWJseSBuZWVkICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgb24gdGhlCisgIHN1Ym1vZHVsZXMgeW91IGNhcmUgYWJvdXQgYWZ0ZXIgcnVubmluZyBhICJnaXQgY2hlY2tvdXQiIGF0CisgIHRoZSBzdXBlcm1vZHVsZSBsZXZlbC4KKworKiBUaGVyZSBhcmUgYSBoYW5kZnVsIHBhY2stb2JqZWN0cyBjaGFuZ2VzIHRvIGhlbHAgeW91IGNvcGUgYmV0dGVyCisgIHdpdGggcmVwb3NpdG9yaWVzIHdpdGggcGF0aG9sb2dpY2FsbHkgbGFyZ2UgYmxvYnMgaW4gdGhlbS4KKworKiBGb3IgcGVvcGxlIHdobyBuZWVkIHRvIGltcG9ydCBmcm9tIFBlcmZvcmNlLCBhIGZyb250LWVuZCBmb3IKKyAgZmFzdC1pbXBvcnQgaXMgaW4gY29udHJpYi9mYXN0LWltcG9ydC8uCisKKyogQ29tZXMgd2l0aCBnaXQtZ3VpIDAuOC4yLgorCisqIENvbWVzIHdpdGggdXBkYXRlZCBnaXRrLgorCisqIE5ldyBjb21tYW5kcyBhbmQgb3B0aW9ucy4KKworICAtICJnaXQgbG9nIC0tZGF0ZT08Zm9ybWF0PiIgY2FuIHVzZSBtb3JlIGZvcm1hdHM6IGlzbzg2MDEsIHJmYzI4MjIuCisKKyAgLSBUaGUgaHVuayBoZWFkZXIgb3V0cHV0IGZyb20gImdpdCBkaWZmIiBmYW1pbHkgY2FuIGJlIGN1c3RvbWl6ZWQKKyAgICB3aXRoIHRoZSBhdHRyaWJ1dGVzIG1lY2hhbmlzbS4gIFNlZSBnaXRhdHRyaWJ1dGVzKDUpIGZvciBkZXRhaWxzLgorCisgIC0gImdpdCBzdGFzaCIgYWxsb3dzIHlvdSB0byBxdWlja2x5IHNhdmUgYXdheSB5b3VyIHdvcmsgaW4KKyAgICBwcm9ncmVzcyBhbmQgcmVwbGF5IGl0IGxhdGVyIG9uIGFuIHVwZGF0ZWQgc3RhdGUuCisKKyAgLSAiZ2l0IHJlYmFzZSIgbGVhcm5lZCBhbiAiaW50ZXJhY3RpdmUiIG1vZGUgdGhhdCBsZXQgeW91CisgICAgcGljayBhbmQgcmVvcmRlciB3aGljaCBjb21taXRzIHRvIHJlYnVpbGQuCisKKyAgLSAiZ2l0IGZzY2siIGNhbiBzYXZlIGl0cyBmaW5kaW5ncyBpbiAkR0lUX0RJUi9sb3N0LWZvdW5kLCB3aXRob3V0IGEKKyAgICBzZXBhcmF0ZSBpbnZvY2F0aW9uIG9mICJnaXQgbG9zdC1mb3VuZCIgY29tbWFuZC4gIFRoZSBibG9icyBzdG9yZWQgYnkKKyAgICBsb3N0LWZvdW5kIGFyZSBzdG9yZWQgaW4gcGxhaW4gZm9ybWF0IHRvIGFsbG93IHlvdSB0byBncmVwIGluIHRoZW0uCisKKyAgLSAkR0lUX1dPUktfVFJFRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0b2dldGhlciB3aXRoCisgICAgJEdJVF9ESVIgdG8gd29yayBpbiBhIHN1YmRpcmVjdG9yeSBvZiBhIHdvcmtpbmcgdHJlZSB0aGF0IGlzCisgICAgbm90IGxvY2F0ZWQgYXQgIiRHSVRfRElSLy4uIi4KKworICAtIEdpdmluZyAiLS1maWxlPTxmaWxlPiIgb3B0aW9uIHRvICJnaXQgY29uZmlnIiBpcyB0aGUgc2FtZSBhcworICAgIHJ1bm5pbmcgdGhlIGNvbW1hbmQgd2l0aCBHSVRfQ09ORklHPTxmaWxlPiBlbnZpcm9ubWVudC4KKworICAtICJnaXQgbG9nIiBsZWFybmVkIGEgbmV3IG9wdGlvbiAiLS1mb2xsb3ciLCB0byBmb2xsb3cKKyAgICByZW5hbWluZyBoaXN0b3J5IG9mIGEgc2luZ2xlIGZpbGUuCisKKyAgLSAiZ2l0IGZpbHRlci1icmFuY2giIGxldHMgeW91IHJld3JpdGUgdGhlIHJldmlzaW9uIGhpc3Rvcnkgb2YKKyAgICBzcGVjaWZpZWQgYnJhbmNoZXMuIFlvdSBjYW4gc3BlY2lmeSBhIG51bWJlciBvZiBmaWx0ZXJzIHRvCisgICAgbW9kaWZ5IHRoZSBjb21taXRzLCBmaWxlcyBhbmQgdHJlZXMuCisKKyAgLSAiZ2l0IGN2c3NlcnZlciIgbGVhcm5lZCBuZXcgb3B0aW9ucyAoLS1iYXNlLXBhdGgsIC0tZXhwb3J0LWFsbCwKKyAgICAtLXN0cmljdC1wYXRocykgaW5zcGlyZWQgYnkgImdpdCBkYWVtb24iLgorCisgIC0gImdpdCBkYWVtb24gLS1iYXNlLXBhdGgtcmVsYXhlZCIgY2FuIGhlbHAgbWlncmF0aW5nIGEgcmVwb3NpdG9yeSBVUkwKKyAgICB0aGF0IGRpZCBub3QgdXNlIHRvIHVzZSAtLWJhc2UtcGF0aCB0byB1c2UgLS1iYXNlLXBhdGguCisKKyAgLSAiZ2l0IGNvbW1pdCIgY2FuIHVzZSAiLXQgdGVtcGxhdGVmaWxlIiBvcHRpb24gYW5kIGNvbW1pdC50ZW1wbGF0ZQorICAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gcHJpbWUgdGhlIGNvbW1pdCBtZXNzYWdlIGdpdmVuIHRvIHlvdSBpbiB0aGUKKyAgICBlZGl0b3IuCisKKyAgLSAiZ2l0IHN1Ym1vZHVsZSIgY29tbWFuZCBoZWxwcyB5b3UgbWFuYWdlIHRoZSBwcm9qZWN0cyBmcm9tCisgICAgdGhlIHN1cGVycHJvamVjdCB0aGF0IGNvbnRhaW4gdGhlbS4KKworICAtIEluIGFkZGl0aW9uIHRvIGNvcmUuY29tcHJlc3Npb24gY29uZmlndXJhdGlvbiBvcHRpb24sCisgICAgY29yZS5sb29zZWNvbXByZXNzaW9uIGFuZCBwYWNrLmNvbXByZXNzaW9uIG9wdGlvbnMgY2FuCisgICAgaW5kZXBlbmRlbnRseSB0d2VhayB6bGliIGNvbXByZXNzaW9uIGxldmVscyB1c2VkIGZvciBsb29zZQorICAgIGFuZCBwYWNrZWQgb2JqZWN0cy4KKworICAtICJnaXQgbHMtdHJlZSAtbCIgc2hvd3Mgc2l6ZSBvZiBibG9icyBwb2ludGVkIGF0IGJ5IHRoZQorICAgIHRyZWUgZW50cmllcywgc2ltaWxhciB0byAiL2Jpbi9scyAtbCIuCisKKyAgLSAiZ2l0IHJldi1saXN0IiBsZWFybmVkIC0tcmVnZXhwLWlnbm9yZS1jYXNlIGFuZAorICAgIC0tZXh0ZW5kZWQtcmVnZXhwIG9wdGlvbnMgdG8gdHdlYWsgaXRzIG1hdGNoaW5nIGxvZ2ljIHVzZWQKKyAgICBmb3IgLS1ncmVwIGZpbHRlcmluZy4KKworICAtICJnaXQgZGVzY3JpYmUgLS1jb250YWlucyIgaXMgYSBoYW5kaWVyIHdheSB0byBjYWxsIG1vcmUKKyAgICBvYnNjdXJlIGNvbW1hbmQgImdpdCBuYW1lLXJldiAtLXRhZ3MiLgorCisgIC0gImdpdCBnYyAtLWFnZ3Jlc3NpdmUiIHRlbGxzIHRoZSBjb21tYW5kIHRvIHNwZW5kIG1vcmUgY3ljbGVzCisgICAgdG8gb3B0aW1pemUgdGhlIHJlcG9zaXRvcnkgaGFyZGVyLgorCisgIC0gImdpdCByZXBhY2siIGxlYXJuZWQgYSAid2luZG93LW1lbW9yeSIgbGltaXQgd2hpY2gKKyAgICBkeW5hbWljYWxseSByZWR1Y2VzIHRoZSB3aW5kb3cgc2l6ZSB0byBzdGF5IHdpdGhpbiB0aGUKKyAgICBzcGVjaWZpZWQgbWVtb3J5IHVzYWdlLgorCisgIC0gImdpdCByZXBhY2siIGNhbiBiZSB0b2xkIHRvIHNwbGl0IHJlc3VsdGluZyBwYWNrcyB0byBhdm9pZAorICAgIGV4Y2VlZGluZyBsaW1pdCBzcGVjaWZpZWQgd2l0aCAiLS1tYXgtcGFjay1zaXplIi4KKworICAtICJnaXQgZnNjayIgZ2FpbmVkIC0tdmVyYm9zZSBvcHRpb24uICBUaGlzIGlzIHJlYWxseSByZWFsbHkKKyAgICB2ZXJib3NlIGJ1dCBpdCBtaWdodCBoZWxwIHlvdSBpZGVudGlmeSBleGFjdCBjb21taXQgdGhhdCBpcworICAgIGNvcnJ1cHQgaW4geW91ciByZXBvc2l0b3J5LgorCisgIC0gImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJuZWQgLS1udW1iZXJlZC1maWxlcyBvcHRpb24uICBUaGlzCisgICAgbWF5IGJlIHVzZWZ1bCBmb3IgTUggdXNlcnMuCisKKyAgLSAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCBmb3JtYXQuc3ViamVjdHByZWZpeCBjb25maWd1cmF0aW9uCisgICAgdmFyaWFibGUsIHdoaWNoIHNlcnZlcyB0aGUgc2FtZSBwdXJwb3NlIGFzICItLXN1YmplY3QtcHJlZml4IgorICAgIG9wdGlvbi4KKworICAtICJnaXQgdGFnIC1uIC1sIiBzaG93cyB0YWcgYW5ub3RhdGlvbnMgd2hpbGUgbGlzdGluZyB0YWdzLgorCisgIC0gImdpdCBjdnNpbXBvcnQiIGNhbiBvcHRpb25hbGx5IHVzZSB0aGUgc2VwYXJhdGUtcmVtb3RlIGxheW91dC4KKworICAtICJnaXQgYmxhbWUiIGNhbiBiZSB0b2xkIHRvIHNlZSB0aHJvdWdoIGNvbW1pdHMgdGhhdCBjaGFuZ2UKKyAgICB3aGl0ZXNwYWNlcyBhbmQgaW5kZW50YXRpb24gbGV2ZWxzIHdpdGggIi13IiBvcHRpb24uCisKKyAgLSAiZ2l0IHNlbmQtZW1haWwiIGNhbiBiZSB0b2xkIG5vdCB0byB0aHJlYWQgdGhlIG1lc3NhZ2VzIHdoZW4KKyAgICBzZW5kaW5nIG91dCBtb3JlIHRoYW4gb25lIHBhdGNoZXMuCisKKyAgLSAiZ2l0IHNlbmQtZW1haWwiIGNhbiBhbHNvIGJlIHRvbGQgaG93IHRvIGZpbmQgd2hvbSB0byBjYyB0aGUKKyAgICBtZXNzYWdlIHRvIGZvciBlYWNoIG1lc3NhZ2UgdmlhIC0tY2MtY21kLgorCisgIC0gImdpdCBjb25maWciIGxlYXJuZWQgTlVMIHRlcm1pbmF0ZWQgb3V0cHV0IGZvcm1hdCB2aWEgLXogdG8KKyAgICBoZWxwIHNjcmlwdHMuCisKKyAgLSAiZ2l0IGFkZCIgbGVhcm5lZCAiLS1yZWZyZXNoIDxwYXRocz4uLi4iIG9wdGlvbiB0byBzZWxlY3RpdmVseSByZWZyZXNoCisgICAgdGhlIGNhY2hlZCBzdGF0IGluZm9ybWF0aW9uLgorCisgIC0gImdpdCBpbml0IC1xIiBtYWtlcyB0aGUgY29tbWFuZCBxdWlldGVyLgorCisgIC0gImdpdCAtcCBjb21tYW5kIiBub3cgaGFzIGEgY291c2luIG9mIG9wcG9zaXRlIHNleCwgImdpdCAtLW5vLXBhZ2VyCisgICAgY29tbWFuZCIuCisKKyogVXBkYXRlZCBiZWhhdmlvciBvZiBleGlzdGluZyBjb21tYW5kcy4KKworICAtICJnaXR3ZWIiIGNhbiBvZmZlciBtdWx0aXBsZSBzbmFwc2hvdCBmb3JtYXRzLgorCisgICAgKioqTk9URSoqKiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGNoYW5nZXMgdGhlIGZvcm1hdCBvZiB0aGUKKyAgICAkZmVhdHVyZXtzbmFwc2hvdH17ZGVmYXVsdH0gZW50cnkgaW4gdGhlIHBlci1zaXRlCisgICAgY29uZmlndXJhdGlvbiBmaWxlICdnaXR3ZWJfY29uZmlnLnBlcmwnLiAgSXQgdXNlZCB0byBiZSBhCisgICAgdGhyZWUtZWxlbWVudCB0dXBsZSB0aGF0IGRlc2NyaWJlIGEgc2luZ2xlIGZvcm1hdDsgd2l0aCB0aGUKKyAgICBuZXcgY29uZmlndXJhdGlvbiBpdGVtIGZvcm1hdCwgeW91IG9ubHkgaGF2ZSB0byBzYXkgdGhlIG5hbWUKKyAgICBvZiB0aGUgZm9ybWF0ICgndGd6JywgJ3RiejInIG9yICd6aXAnKS4gIFBsZWFzZSB1cGRhdGUgdGhlCisgICAgeW91ciBjb25maWd1cmF0aW9uIGZpbGUgYWNjb3JkaW5nbHkuCisKKyAgLSAiZ2l0IGNsb25lIiB1c2VzIC1sIChoYXJkbGluayBmaWxlcyB1bmRlciAuZ2l0KSBieSBkZWZhdWx0IHdoZW4KKyAgICBjbG9uaW5nIGxvY2FsbHkuCisKKyAgLSBVUkwgdXNlZCBmb3IgImdpdCBjbG9uZSIgYW5kIGZyaWVuZHMgY2FuIHNwZWNpZnkgbm9uc3RhbmRhcmQgU1NIIHBvcnQKKyAgICBieSB1c2luZyBzc2g6Ly9ob3N0OnBvcnQvcGF0aC90by9yZXBvIHN5bnRheC4KKworICAtICJnaXQgYnVuZGxlIGNyZWF0ZSIgY2FuIG5vdyBjcmVhdGUgYSBidW5kbGUgd2l0aG91dCBuZWdhdGl2ZSByZWZzLAorICAgIGkuZS4gImV2ZXJ5dGhpbmcgc2luY2UgdGhlIGJlZ2lubmluZyB1cCB0byBjZXJ0YWluIHBvaW50cyIuCisKKyAgLSAiZ2l0IGRpZmYiIChidXQgbm90IHRoZSBwbHVtYmluZyBsZXZlbCAiZ2l0IGRpZmYtdHJlZSIpIG5vdworICAgIHJlY3Vyc2l2ZWx5IGRlc2NlbmRzIGludG8gdHJlZXMgYnkgZGVmYXVsdC4KKworICAtICJnaXQgZGlmZiIgZG9lcyBub3Qgc2hvdyBkaWZmZXJlbmNlcyB0aGF0IGNvbWUgb25seSBmcm9tCisgICAgc3RhdC1kaXJ0aW5lc3MgaW4gdGhlIGZvcm0gb2YgImRpZmYgLS1naXQiIGhlYWRlciBhbnltb3JlLgorICAgIEl0IHJ1bnMgInVwZGF0ZS1pbmRleCAtLXJlZnJlc2giIHNpbGVudGx5IGFzIG5lZWRlZC4KKworICAtICJnaXQgdGFnIC1sIiB1c2VkIHRvIG1hdGNoIHRhZ3MgYnkgZ2xvYmJpbmcgaXRzIHBhcmFtZXRlciBhcyBpZiBpdAorICAgIGhhcyB3aWxkY2FyZCAnKicgb24gYm90aCBlbmRzLCB3aGljaCBtYWRlICJnaXQgdGFnIC1sIGd1aSIgdG8gbWF0Y2gKKyAgICB0YWcgJ2dpdGd1aS0wLjcuMCc7IHRoaXMgd2FzIHZlcnkgYW5ub3lpbmcuICBZb3Ugbm93IGhhdmUgdG8gYWRkCisgICAgYXN0ZXJpc2sgb24gdGhlIHNpZGVzIHlvdSB3YW50IHRvIHdpbGRjYXJkIHlvdXJzZWxmLgorCisgIC0gVGhlIGVkaXRvciB0byB1c2Ugd2l0aCBtYW55IGludGVyYWN0aXZlIGNvbW1hbmRzIGNhbiBiZQorICAgIG92ZXJyaWRkZW4gd2l0aCBHSVRfRURJVE9SIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBpZiBpdAorICAgIGRvZXMgbm90IGV4aXN0LCB3aXRoIGNvcmUuZWRpdG9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBBcworICAgIGJlZm9yZSwgaWYgeW91IGhhdmUgbmVpdGhlciwgZW52aXJvbm1lbnQgdmFyaWFibGVzIFZJU1VBTAorICAgIGFuZCBFRElUT1IgYXJlIGNvbnN1bHRlZCBpbiB0aGlzIG9yZGVyLCBhbmQgdGhlbiBmaW5hbGx5IHdlCisgICAgZmFsbCBiYWNrIG9uICJ2aSIuCisKKyAgLSAiZ2l0IHJtIC0tY2FjaGVkIiBkb2VzIG5vdCBjb21wbGFpbiB3aGVuIHJlbW92aW5nIGEgbmV3bHkKKyAgICBhZGRlZCBmaWxlIGZyb20gdGhlIGluZGV4IGFueW1vcmUuCisKKyAgLSBPcHRpb25zIHRvICJnaXQgbG9nIiB0byBhZmZlY3QgaG93IC0tZ3JlcC8tLWF1dGhvciBvcHRpb25zIGxvb2sgZm9yCisgICAgZ2l2ZW4gc3RyaW5ncyBub3cgaGF2ZSBzaG9ydGVyIGFiYnJldmlhdGlvbnMuICAtaSBpcyBmb3IgaWdub3JlIGNhc2UsCisgICAgYW5kIC1FIGlzIGZvciBleHRlbmRlZCByZWdleHAuCisKKyAgLSAiZ2l0IGxvZyIgbGVhcm5lZCAtLWxvZy1zaXplIHRvIHNob3cgdGhlIG51bWJlciBvZiBieXRlcyBpbgorICAgIHRoZSBsb2cgbWVzc2FnZSBwYXJ0IG9mIHRoZSBvdXRwdXQgdG8gaGVscCBxZ2l0LgorCisgIC0gImdpdCBsb2cgLS1uYW1lLXN0YXR1cyIgZG9lcyBub3QgcmVxdWlyZSB5b3UgdG8gZ2l2ZSAiLXIiIGFueW1vcmUuCisgICAgQXMgYSBnZW5lcmFsIHJ1bGUsIFBvcmNlbGFpbiBjb21tYW5kcyBzaG91bGQgcmVjdXJzZSB3aGVuIHNob3dpbmcKKyAgICBkaWZmLgorCisgIC0gImdpdCBmb3JtYXQtcGF0Y2ggLS1yb290IEEiIGNhbiBiZSB1c2VkIHRvIGZvcm1hdCBldmVyeXRoaW5nCisgICAgc2luY2UgdGhlIGJlZ2lubmluZyB1cCB0byBBLiAgVGhpcyB3YXMgc3VwcG9ydGVkIHdpdGgKKyAgICAiZ2l0IGZvcm1hdC1wYXRjaCAtLXJvb3QgQSBBIiBmb3IgYSBsb25nIHRpbWUsIGJ1dCB3YXMgbm90CisgICAgcHJvcGVybHkgZG9jdW1lbnRlZC4KKworICAtICJnaXQgc3ZuIGRjb21taXQiIHJldGFpbnMgbG9jYWwgbWVyZ2UgaW5mb3JtYXRpb24uCisKKyAgLSAiZ2l0IHN2bmltcG9ydCIgYWxsb3dzIGFuIGVtcHR5IHN0cmluZyB0byBiZSBzcGVjaWZpZWQgYXMgdGhlCisgICAgdHJ1bmsvIGRpcmVjdG9yeS4gIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHN1Y2sgZGF0YSBmcm9tIGEgU1ZOCisgICAgcmVwb3NpdG9yeSB0aGF0IGRvZSBub3QgaGF2ZSB0cnVuay8gYnJhbmNoZXMvIGFuZCB0YWdzLyBvcmdhbml6YXRpb24KKyAgICBhdCBhbGwuCisKKyAgLSAiZ2l0IGNvbmZpZyIgdG8gc2V0IHZhbHVlcyBhbHNvIGhvbm9ycyB0eXBlIGZsYWdzIGxpa2UgLS1ib29sCisgICAgYW5kIC0taW50LgorCisgIC0gY29yZS5xdW90ZXBhdGggY29uZmlndXJhdGlvbiBjYW4gYmUgdXNlZCB0byBtYWtlIHRleHR1YWwgZ2l0CisgICAgb3V0cHV0IHRvIGVtaXQgbW9zdCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcGF0aCBsaXRlcmFsbHkuCisKKyAgLSAiZ2l0IG1lcmdldG9vbCIgY2hvb3NlcyBpdHMgYmFja2VuZCBtb3JlIHdpc2VseSwgdGFraW5nCisgICAgbm90aWNlIG9mIGl0cyBlbnZpcm9ubWVudCBzdWNoIGFzIHVzZSBvZiBYLCBHbm9tZS9LREUsIGV0Yy4KKworICAtICJnaXR3ZWIiIHNob3dzIG1lcmdlIGNvbW1pdHMgYSBsb3QgbmljZXIgdGhhbiBiZWZvcmUuICBUaGUKKyAgICBkZWZhdWx0IHZpZXcgdXNlcyBtb3JlIGNvbXBhY3QgLS1jYyBmb3JtYXQsIHdoaWxlIHRoZSBVSQorICAgIGFsbG93cyB0byBjaG9vc2Ugbm9ybWFsIGRpZmYgd2l0aCBhbnkgcGFyZW50LgorCisgIC0gc25hcHNob3QgZmlsZXMgImdpdHdlYiIgY3JlYXRlcyBmcm9tIGEgcmVwb3NpdG9yeSBhdAorICAgICRwYXRoLyRwcm9qZWN0Ly5naXQgYXJlIG1vcmUgdXNlZnVsLiAgV2UgdXNlICRwcm9qZWN0IHBhcnQKKyAgICBpbiB0aGUgZmlsZW5hbWUsIHdoaWNoIHdlIHVzZWQgdG8gZGlzY2FyZC4KKworICAtICJnaXQgY3ZzaW1wb3J0IiBjcmVhdGVzIGxpZ2h0d2VpZ2h0IHRhZ3M7IHRoZXJlIGlzIG5vCisgICAgaW50ZXJlc3RpbmcgaW5mb3JtYXRpb24gd2UgY2FuIHJlY29yZCBpbiBhbiBhbm5vdGF0ZWQgdGFnLAorICAgIGFuZCB0aGUgaGFuZGNyYWZ0ZWQgb25lcyB0aGUgb2xkIGNvZGUgY3JlYXRlZCB3YXMgbm90CisgICAgcHJvcGVybHkgZm9ybWVkIGFueXdheS4KKworICAtICJnaXQgcHVzaCIgcHJldGVuZHMgdGhhdCB5b3UgaW1tZWRpYXRlbHkgZmV0Y2hlZCBiYWNrIGZyb20KKyAgICB0aGUgcmVtb3RlIGJ5IHVwZGF0aW5nIGNvcnJlc3BvbmRpbmcgcmVtb3RlIHRyYWNraW5nCisgICAgYnJhbmNoZXMgaWYgeW91IGhhdmUgYW55LgorCisgIC0gVGhlIGRpZmZzdGF0IGdpdmVuIGFmdGVyIGEgbWVyZ2UgKG9yIGEgcHVsbCkgaG9ub3JzIHRoZQorICAgIGNvbG9yLmRpZmYgY29uZmlndXJhdGlvbi4KKworICAtICJnaXQgY29tbWl0IC0tYW1lbmQiIGlzIG5vdyBjb21wYXRpYmxlIHdpdGggdmFyaW91cyBtZXNzYWdlIHNvdXJjZQorICAgIG9wdGlvbnMgc3VjaCBhcyAtbS8tQy8tYy8tRi4KKworICAtICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPXN0cmlwIiByZW1vdmVzIGJsYW5rIGxpbmVzIGFkZGVkIGF0CisgICAgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKworICAtICJnaXQgZmV0Y2giIG92ZXIgZ2l0IG5hdGl2ZSBwcm90b2NvbHMgd2l0aCAiLXYiIG9wdGlvbiBzaG93cworICAgIGNvbm5lY3Rpb24gc3RhdHVzLCBhbmQgdGhlIElQIGFkZHJlc3Mgb2YgdGhlIG90aGVyIGVuZCwgdG8KKyAgICBoZWxwIGRpYWdub3NpbmcgcHJvYmxlbXMuCisKKyAgLSBXZSB1c2VkIHRvIGhhdmUgY29yZS5sZWdhY3loZWFkZXJzIGNvbmZpZ3VyYXRpb24sIHdoZW4KKyAgICBzZXQgdG8gZmFsc2UsIGFsbG93ZWQgZ2l0IHRvIHdyaXRlIGxvb3NlIG9iamVjdHMgaW4gYSBmb3JtYXQKKyAgICB0aGF0IG1pbWljcyB0aGUgZm9ybWF0IHVzZWQgYnkgb2JqZWN0cyBzdG9yZWQgaW4gcGFja3MuICBJdAorICAgIHR1cm5zIG91dCB0aGF0IHRoaXMgd2FzIG5vdCBzbyB1c2VmdWwuICBBbHRob3VnaCB3ZSB3aWxsCisgICAgY29udGludWUgdG8gcmVhZCBvYmplY3RzIHdyaXR0ZW4gaW4gdGhhdCBmb3JtYXQsIHdlIGRvIG5vdAorICAgIGhvbm9yIHRoYXQgY29uZmlndXJhdGlvbiBhbnltb3JlIGFuZCBjcmVhdGUgbG9vc2Ugb2JqZWN0cyBpbgorICAgIHRoZSBsZWdhY3kvdHJhZGl0aW9uYWwgZm9ybWF0LgorCisgIC0gIi0tZmluZC1jb3BpZXMtaGFyZGVyIiBvcHRpb24gdG8gZGlmZiBmYW1pbHkgY2FuIG5vdyBiZQorICAgIHNwZWxsZWQgYXMgIi1DIC1DIiBmb3IgYnJldml0eS4KKworICAtICJnaXQgbWFpbHNwbGl0IiAoaGVuY2UgImdpdCBhbSIpIGNhbiByZWFkIGZyb20gTWFpbGRpcgorICAgIGZvcm1hdHRlZCBtYWlsYm94ZXMuCisKKyAgLSAiZ2l0IGN2c3NlcnZlciIgZG9lcyBub3QgYmFyZiB1cG9uIHNlZWluZyAiY3ZzIGxvZ2luIgorICAgIHJlcXVlc3QuCisKKyAgLSAicGFjay1vYmplY3RzIiBob25vcnMgImRlbHRhIiBhdHRyaWJ1dGUgc2V0IGluCisgICAgLmdpdGF0dHJpYnV0ZXMuICBJdCBkb2VzIG5vdCBhdHRlbXB0IHRvIGRlbHRpZnkgYmxvYnMgdGhhdAorICAgIGNvbWUgZnJvbSBwYXRocyB3aXRoIGRlbHRhIGF0dHJpYnV0ZSBzZXQgdG8gZmFsc2UuCisKKyAgLSAibmV3LXdvcmtkaXIiIHNjcmlwdCAoaW4gY29udHJpYikgY2FuIG5vdyBiZSB1c2VkIHdpdGggYQorICAgIGJhcmUgcmVwb3NpdG9yeS4KKworICAtICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIHRvIHVzZSBndmltZGlmZi4KKworICAtICJnaXR2aWV3IiAoaW4gY29udHJpYikgaGFzIGEgYmV0dGVyIGJsYW1lIGludGVyZmFjZS4KKworICAtICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBkaWQgbm90IGhhbmRsZSBhIGNvbW1pdCBsb2cgbWVzc2FnZQorICAgIHRoYXQgaXMgbGFyZ2VyIHRoYW4gMTZrQjsgdGhleSBkbyBub3cuCisKKyAgLSAiLS1wcmV0dHk9b25lbGluZSIgb3V0cHV0IGZvcm1hdCBmb3IgImdpdCBsb2ciIGFuZCBmcmllbmRzCisgICAgZGVhbHMgd2l0aCAibWFsZm9ybWVkIiBjb21taXQgbG9nIG1lc3NhZ2VzIHRoYXQgaGF2ZSBtb3JlCisgICAgdGhhbiBvbmUgbGluZXMgaW4gdGhlIGZpcnN0IHBhcmFncmFwaCBiZXR0ZXIuICBXZSB1c2VkIHRvCisgICAgc2hvdyB0aGUgZmlyc3QgbGluZSwgY3V0dGluZyB0aGUgdGl0bGUgYXQgbWlkLXNlbnRlbmNlOyB3ZQorICAgIGNvbmNhdGVuYXRlIHRoZW0gaW50byBhIHNpbmdsZSBsaW5lIGFuZCB0cmVhdCB0aGUgcmVzdWx0IGFzCisgICAgIm9uZWxpbmUiLgorCisgIC0gImdpdCBwNGltcG9ydCIgaGFzIGJlZW4gZGVtb3RlZCB0byBjb250cmliIHN0YXR1cy4gIEZvcgorICAgIGEgc3VwZXJpb3Igb3B0aW9uLCBjaGVja291dCB0aGUgImdpdCBwNCIgZnJvbnQgZW5kIHRvCisgICAgImdpdCBmYXN0LWltcG9ydCIgKGFsc28gaW4gY29udHJpYikuICBUaGUgbWFuIHBhZ2UgYW5kIHA0CisgICAgcnBtIGhhdmUgYmVlbiByZW1vdmVkIGFzIHdlbGwuCisKKyAgLSAiZ2l0IG1haWxpbmZvIiAoaGVuY2UgImFtIikgbm93IHRyaWVzIHRvIHNlZSBpZiB0aGUgbWVzc2FnZQorICAgIGlzIGluIHV0Zi04IGZpcnN0LCBpbnN0ZWFkIG9mIGFzc3VtaW5nIGlzby04ODU5LTEsIGlmCisgICAgaW5jb21pbmcgZS1tYWlsIGRvZXMgbm90IHNheSB3aGF0IGVuY29kaW5nIGl0IGlzIGluLgorCisqIEJ1aWxkcworCisgIC0gb2xkLXN0eWxlIGZ1bmN0aW9uIGRlZmluaXRpb25zIChtb3N0IG5vdGFibHksIGEgZnVuY3Rpb24KKyAgICB3aXRob3V0IHBhcmFtZXRlciBkZWZpbmVkIHdpdGggImZ1bmMoKSIsIG5vdCAiZnVuYyh2b2lkKSIpCisgICAgaGF2ZSBiZWVuIGVyYWRpY2F0ZWQuCisKKyAgLSAiZ2l0IHRhZyIgYW5kICJnaXQgdmVyaWZ5LXRhZyIgaGF2ZSBiZWVuIHJld3JpdHRlbiBpbiBDLgorCisqIFBlcmZvcm1hbmNlIFR3ZWFrcworCisgIC0gImdpdCBwYWNrLW9iamVjdHMiIGF2b2lkcyByZS1kZWx0aWZpY2F0aW9uIGNvc3QgYnkgY2FjaGluZworICAgIHNtYWxsIGVub3VnaCBkZWx0YSByZXN1bHRzIGl0IGNyZWF0ZXMgd2hpbGUgbG9va2luZyBmb3IgdGhlCisgICAgYmVzdCBkZWx0YSBjYW5kaWRhdGVzLgorCisgIC0gImdpdCBwYWNrLW9iamVjdHMiIGxlYXJuZWQgYSBuZXcgaGV1cmlzdGljIHRvIHByZWZlciBkZWx0YQorICAgIHRoYXQgaXMgc2hhbGxvd2VyIGluIGRlcHRoIG92ZXIgdGhlIHNtYWxsZXN0IGRlbHRhCisgICAgcG9zc2libGUuICBUaGlzIGltcHJvdmVzIGJvdGggb3ZlcmFsbCBwYWNrZmlsZSBhY2Nlc3MKKyAgICBwZXJmb3JtYW5jZSBhbmQgcGFja2ZpbGUgZGVuc2l0eS4KKworICAtIGRpZmYtZGVsdGEgY29kZSB0aGF0IGlzIHVzZWQgZm9yIHBhY2tpbmcgaGFzIGJlZW4gaW1wcm92ZWQKKyAgICB0byB3b3JrIGJldHRlciBvbiBiaWcgZmlsZXMuCisKKyAgLSB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhY2sgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnksCisgICAgdGhlIHJ1bnRpbWUgdXNlZCB0byB0cnkgZmluZGluZyBhbiBvYmplY3QgYWx3YXlzIGZyb20gdGhlCisgICAgbmV3ZXN0IHBhY2tmaWxlOyBpdCBub3cgdHJpZXMgdGhlIHNhbWUgcGFja2ZpbGUgYXMgd2UgZm91bmQKKyAgICB0aGUgb2JqZWN0IHJlcXVlc3RlZCB0aGUgbGFzdCB0aW1lLCB3aGljaCBleHBsb2l0cyB0aGUKKyAgICBsb2NhbGl0eSBvZiByZWZlcmVuY2VzLgorCisgIC0gdmVyaWZ5aW5nIHBhY2sgY29udGVudHMgZG9uZSBieSAiZ2l0IGZzY2sgLS1mdWxsIiBnb3QgYm9vc3QKKyAgICBieSBjYXJlZnVsbHkgY2hvb3NpbmcgdGhlIG9yZGVyIHRvIHZlcmlmeSBvYmplY3RzIGluIHRoZW0uCisKKyAgLSAiZ2l0IHJlYWQtdHJlZSAtbSIgdG8gcmVhZCBpbnRvIGFuIGFscmVhZHkgcG9wdWxhdGVkIGluZGV4CisgICAgaGFzIGJlZW4gb3B0aW1pemVkIHZhc3RseS4gIFRoZSBlZmZlY3Qgb2YgdGhpcyBjYW4gYmUgc2VlbgorICAgIHdoZW4gc3dpdGNoaW5nIGJyYW5jaGVzIHRoYXQgaGF2ZSBkaWZmZXJlbmNlcyBpbiBvbmx5IGEKKyAgICBoYW5kZnVsIHBhdGhzLgorCisgIC0gImdpdCBhZGQgcGF0aHMuLi4iIGFuZCAiZ2l0IGNvbW1pdCBwYXRocy4uLiIgaGFzIGFsc28gYmVlbgorICAgIGhlYXZpbHkgb3B0aW1pemVkLgorCitGaXhlcyBzaW5jZSB2MS41LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjUuMiBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluCit0aGlzIHJlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKKyogQnVnZml4ZXMKKworICAtICJnaXR3ZWIiIGhhZCB0cm91YmxlIGhhbmRsaW5nIG5vbiBVVEYtOCB0ZXh0IHdpdGggb2xkZXIKKyAgICBFbmNvZGUucG0gUGVybCBtb2R1bGUuCisKKyAgLSAiZ2l0IHN2biIgbWlzcGFyc2VkIHRoZSBkYXRhIGZyb20gdGhlIGNvbW1pdHMgaW4gdGhlIHJlcG9zaXRvcnkgd2hlbgorICAgIHRoZSB1c2VyIGhhZCAiY29sb3IuZGlmZiA9IHRydWUiIGluIHRoZSBjb25maWd1cmF0aW9uLiAgVGhpcyBoYXMgYmVlbgorICAgIGZpeGVkLgorCisgIC0gVGhlcmUgd2FzIGEgY2FzZSB3aGVyZSAiZ2l0IHN2biBkY29tbWl0IiBjbG9iYmVyZWQgY2hhbmdlcyBtYWRlIG9uIHRoZQorICAgIFNWTiBzaWRlIHdoaWxlIGNvbW1pdHRpbmcgbXVsdGlwbGUgY2hhbmdlcy4KKworICAtICJnaXQtd3JpdGUtdHJlZSIgaGFkIGEgYmFkIGludGVyYWN0aW9uIHdpdGggcmFjeS1naXQgYXZvaWRhbmNlIGFuZAorICAgIGdpdGF0dHJpYnV0ZXMgbWVjaGFuaXNtcy4KKworICAtICJnaXQgLS1iYXJlIGNvbW1hbmQiIG92ZXJyb2RlIGV4aXN0aW5nIEdJVF9ESVIgc2V0dGluZyBhbmQgYWx3YXlzCisgICAgbWFkZSBpdCB0cmVhdCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhcyBHSVRfRElSLgorCisgIC0gImdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2giIGRvZXMgbm90IGNvbXBsYWluIGlmIHlvdSBnaXZlIHRoZQorICAgIHNhbWUgcGF0aCBwYXR0ZXJuIHR3aWNlIGJ5IG1pc3Rha2UuCisKKyAgLSAiZ2l0IGluaXQiIGF1dG9kZXRlY3RlZCBjb3JlLmZpbGVtb2RlIGJ1dCBub3QgY29yZS5zeW1saW5rcywgd2hpY2gKKyAgICBtYWRlIGEgbmV3IGRpcmVjdG9yeSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgImdpdCBjbG9uZSIgY3VtYmVyc29tZQorICAgIHRvIHVzZSBvbiBmaWxlc3lzdGVtcyB0aGF0IHJlcXVpcmUgdGhlc2UgY29uZmlndXJhdGlvbnMgdG8gYmUgc2V0LgorCisgIC0gImdpdCBsb2ciIGZhbWlseSBvZiBjb21tYW5kcyBiZWhhdmVkIGRpZmZlcmVudGx5IHdoZW4gcnVuIGFzICJnaXQKKyAgICBsb2ciIChubyBwYXRoc3BlYykgYW5kIGFzICJnaXQgbG9nIC0tIiAoYWdhaW4sIG5vIHBhdGhzcGVjKS4gIFRoaXMKKyAgICBpbmNvbnNpc3RlbmN5IHdhcyBpbnRyb2R1Y2VkIHNvbWV3aGVyZSBpbiB2MS4zLjAgc2VyaWVzIGJ1dCBub3cgaGFzCisgICAgYmVlbiBjb3JyZWN0ZWQuCisKKyAgLSAiZ2l0IHJlYmFzZSAtbSIgaW5jb3JyZWN0bHkgZGlzcGxheWVkIGNvbW1pdHMgdGhhdCB3ZXJlIHNraXBwZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGU0NGI4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC4xLnR4dApAQCAtMCwwICsxLDE3IEBACitHSVQgdjEuNS40LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdC1jb21taXQgLUMgJHRhZyIgdXNlZCB0byB3b3JrIGJ1dCByZXdyaXRlIGluIEMgZG9uZSBpbgorICAgMS41LjQgYnJva2UgaXQuCisKKyAqIEFuIGVudHJ5IGluIHRoZSAuZ2l0YXR0cmlidXRlcyBmaWxlIHRoYXQgbmFtZXMgYSBwYXR0ZXJuIGluIGEKKyAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3J5IGl0IGlzIGluIGRpZCBub3QgbWF0Y2gKKyAgIGNvcnJlY3RseSAoZS5nLiBwYXR0ZXJuICJiLyouYyIgaW4gImEvLmdpdGF0dHJpYnV0ZXMiIHNob3VsZAorICAgbWF0Y2ggImEvYi9mb28uYyIgYnV0IGl0IGRpZG4ndCkuCisKKyAqIEN1c3RvbWl6ZWQgY29sb3Igc3BlY2lmaWNhdGlvbiB3YXMgcGFyc2VkIGluY29ycmVjdGx5IHdoZW4KKyAgIG51bWVyaWMgY29sb3IgdmFsdWVzIGFyZSB1c2VkLiAgVGhpcyB3YXMgZml4ZWQgaW4gMS41LjQuMS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFkMGRmNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuMi50eHQKQEAgLTAsMCArMSw0MyBAQAorR0lUIHYxLjUuNC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHBhcnNlciB3YXMgbm90IHByZXBhcmVkIHRvIHNlZSBzdHJpbmcKKyAgIHZhbHVlZCB2YXJpYWJsZXMgbWlzc3BlbGxlZCBhcyBib29sZWFuIGFuZCBzZWdmYXVsdGVkLgorCisgKiBUZW1wb3JhcnkgZmlsZXMgbGVmdCBiZWhpbmQgZHVlIHRvIGludGVycnVwdGVkIG9iamVjdAorICAgdHJhbnNmZXJzIHdlcmUgbm90IGNsZWFuZWQgdXAgd2l0aCAiZ2l0IHBydW5lIi4KKworICogImdpdCBjb25maWcgLS11bnNldCIgd2FzIGNvbmZ1c2VkIHdoZW4gdGhlIHVuc2V0IHZhcmlhYmxlcworICAgd2VyZSBzcGVsbGVkIHdpdGggY29udGludWF0aW9uIGxpbmVzIGluIHRoZSBjb25maWcgZmlsZS4KKworICogVGhlIG1lcmdlIG1lc3NhZ2UgZGV0ZWN0aW9uIGluICJnaXQgY3ZzaW1wb3J0IiBkaWQgbm90IGNhdGNoCisgICBhIG1lc3NhZ2UgdGhhdCBiZWdhbiB3aXRoICJNZXJnZS4uLiIuCisKKyAqICJnaXQgc3RhdHVzIiBzdWdnZXN0cyAiZ2l0IHJtIC0tY2FjaGVkIiBmb3IgdW5zdGFnaW5nIHRoZQorICAgZWFybGllciAiZ2l0IGFkZCIgYmVmb3JlIHRoZSBpbml0aWFsIGNvbW1pdC4KKworICogImdpdCBzdGF0dXMiIG91dHB1dCB3YXMgaW5jb3JyZWN0IGR1cmluZyBhIHBhcnRpYWwgY29tbWl0LgorCisgKiAiZ2l0IGJpc2VjdCIgcmVmdXNlZCB0byBzdGFydCB3aGVuIHRoZSBIRUFEIHdhcyBkZXRhY2hlZC4KKworICogImdpdCBiaXNlY3QiIGFsbG93ZWQgYSB3aWxkY2FyZCBjaGFyYWN0ZXIgaW4gdGhlIGNvbW1pdAorICAgbWVzc2FnZSBleHBhbmRlZCB3aGlsZSB3cml0aW5nIGl0cyBsb2cgZmlsZS4KKworICogTWFudWFsIHBhZ2VzIHdlcmUgbm90IGZvcm1hdHRlZCBjb3JyZWN0bHkgd2l0aCBkb2Nib29rIHhzbAorICAgMS43MjsgYWRkZWQgYSB3b3JrYXJvdW5kLgorCisgKiAiZ2l0LWNvbW1pdCAtQyAkdGFnIiB1c2VkIHRvIHdvcmsgYnV0IHJld3JpdGUgaW4gQyBkb25lIGluCisgICAxLjUuNCBicm9rZSBpdC4gIFRoaXMgd2FzIGZpeGVkIGluIDEuNS40LjEuCisKKyAqIEFuIGVudHJ5IGluIHRoZSAuZ2l0YXR0cmlidXRlcyBmaWxlIHRoYXQgbmFtZXMgYSBwYXR0ZXJuIGluIGEKKyAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3J5IGl0IGlzIGluIGRpZCBub3QgbWF0Y2gKKyAgIGNvcnJlY3RseSAoZS5nLiBwYXR0ZXJuICJiLyouYyIgaW4gImEvLmdpdGF0dHJpYnV0ZXMiIHNob3VsZAorICAgbWF0Y2ggImEvYi9mb28uYyIgYnV0IGl0IGRpZG4ndCkuICBUaGlzIHdhcyBmaXhlZCBpbiAxLjUuNC4xLgorCisgKiBDdXN0b21pemVkIGNvbG9yIHNwZWNpZmljYXRpb24gd2FzIHBhcnNlZCBpbmNvcnJlY3RseSB3aGVuCisgICBudW1lcmljIGNvbG9yIHZhbHVlcyBhcmUgdXNlZC4gIFRoaXMgd2FzIGZpeGVkIGluIDEuNS40LjEuCisKKyAqIGh0dHAgdHJhbnNwb3J0IG1pc2JlaGF2ZWQgd2hlbiBsaW5rZWQgd2l0aCBjdXJsLWdudXRscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZmM2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjMudHh0CkBAIC0wLDAgKzEsMjcgQEAKK0dJVCB2MS41LjQuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjQuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogUlBNIHNwZWMgdXNlZCB0byBwdWxsIGluIGV2ZXJ5dGhpbmcgd2l0aCAnZ2l0Jy4gIFRoaXMgaGFzIGJlZW4KKyAgIGNoYW5nZWQgc28gdGhhdCAnZ2l0JyBwYWNrYWdlIGNvbnRhaW5zIGp1c3QgdGhlIGNvcmUgcGFydHMsCisgICBhbmQgd2Ugbm93IHN1cHBseSAnZ2l0LWFsbCcgbWV0YXBhY2thZ2UgdG8gc2x1cnAgaW4gZXZlcnl0aGluZy4KKyAgIFRoaXMgc2hvdWxkIG1hdGNoIGVuZCB1c2VyJ3MgZXhwZWN0YXRpb24gYmV0dGVyLgorCisgKiBXaGVuIHNvbWUgcmVmcyBmYWlsZWQgdG8gdXBkYXRlLCBnaXQtcHVzaCByZXBvcnRlZCAiZmFpbHVyZSIKKyAgIHdoaWNoIHdhcyB1bmNsZWFyIGlmIHNvbWUgb3RoZXIgcmVmcyB3ZXJlIHVwZGF0ZWQgb3IgYWxsIG9mCisgICB0aGVtIGZhaWxlZCBhdG9taWNhbGx5ICh0aGUgYW5zd2VyIGlzIHRoZSBmb3JtZXIpLiAgUmV3b3JkZWQKKyAgIHRoZSBtZXNzYWdlIHRvIGNsYXJpZnkgdGhpcy4KKworICogImdpdCBjbG9uZSIgZnJvbSBhIHJlcG9zaXRvcnkgd2hvc2UgSEVBRCB3YXMgbWlzY29uZmlndXJlZAorICAgZGlkIG5vdCBzZXQgdXAgdGhlIHJlbW90ZSBwcm9wZXJseS4gIE5vdyBpdCB0cmllcyB0byBkbworICAgYmV0dGVyLgorCisgKiBVcGRhdGVkIGdpdC1wdXNoIGRvY3VtZW50YXRpb24gdG8gY2xhcmlmeSB3aGF0ICJtYXRjaGluZyIKKyAgIG1lYW5zLCBpbiBvcmRlciB0byByZWR1Y2UgdXNlciBjb25mdXNpb24uCisKKyAqIFVwZGF0ZWQgZ2l0LWFkZCBkb2N1bWVudGF0aW9uIHRvIGNsYXJpZnkgImFkZCAtdSIgb3BlcmF0ZXMgaW4KKyAgIHRoZSBjdXJyZW50IHN1YmRpcmVjdG9yeSB5b3UgYXJlIGluLCBqdXN0IGxpa2Ugb3RoZXIgY29tbWFuZHMuCisKKyAqIGdpdC1ndWkgdXBkYXRlcyB0byB3b3JrIG9uIE9TWCBhbmQgV2luZG93cyBiZXR0ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjNjMWE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC40LnR4dApAQCAtMCwwICsxLDY2IEBACitHSVQgdjEuNS40LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS40LjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIHdpdGggYW4gb3ZlcnRpZ2h0IHVtYXNrIHN1Y2ggYXMgMDc3IG1hZGUKKyAgIGluc3RhbGxlZCB0ZW1wbGF0ZXMgdW5yZWFkYWJsZSBieSBvdGhlcnMsIHdoaWxlIHRoZSByZXN0IG9mIHRoZSBpbnN0YWxsCisgICBhcmUgZG9uZSBpbiBhIHdheSB0aGF0IGlzIGZyaWVuZGx5IHRvIHVtYXNrIDAyMi4KKworICogImdpdCBjdnNleHBvcnRjb21taXQgLXcgJGN2c2RpciIgbWlzYmVoYXZlZCB3aGVuIEdJVF9ESVIgaXMgc2V0IHRvIGEKKyAgIHJlbGF0aXZlIGRpcmVjdG9yeS4KKworICogImdpdCBodHRwLXB1c2giIGhhZCBhbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgdGhhdCBjb3VsZCBsZWFkIGl0IHRvCisgICBzZWdmYXVsdC4KKworICogV2hlbiAiZ2l0IHJlYmFzZSAtaSIgZ2F2ZSBjb250cm9sIGJhY2sgdG8gdGhlIHVzZXIgZm9yIGEgY29tbWl0IHRoYXQgaXMKKyAgIG1hcmtlZCB0byBiZSBlZGl0ZWQsIGl0IGp1c3Qgc2FpZCAibW9kaWZ5IGl0IHdpdGggY29tbWl0IC0tYW1lbmQiLAorICAgd2l0aG91dCBzYXlpbmcgd2hhdCB0byBkbyB0byBjb250aW51ZSBhZnRlciBtb2RpZnlpbmcgaXQuICBHaXZlIGFuCisgICBleHBsaWNpdCBpbnN0cnVjdGlvbiB0byBydW4gInJlYmFzZSAtLWNvbnRpbnVlIiB0byBiZSBtb3JlIGhlbHBmdWwuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgaW4gMS41LjQuMyBpc3N1ZWQgYSBib2d1cyBlbXB0eSBJbi1SZXBseS1UbzogaGVhZGVyLgorCisgKiAiZ2l0IGJpc2VjdCIgc2hvd2VkIG15c3RlcmlvdXMgIndvbid0IGJpc2VjdCBvbiBzZWVrZWQgdHJlZSIgZXJyb3IgbWVzc2FnZS4KKyAgIFRoaXMgd2FzIGxlZnRvdmVyIGZyb20gQ29naXRvIGRheXMgdG8gcHJldmVudCAiYmlzZWN0IiBzdGFydGluZyBmcm9tIGEKKyAgIGNnLXNlZWtlZCBzdGF0ZS4gIFdlIHN0aWxsIGtlZXAgdGhlIENvZ2l0byBzYWZldHksIGJ1dCBydW5uaW5nICJnaXQgYmlzZWN0CisgICBzdGFydCIgd2hlbiBhbm90aGVyIGJpc2VjdCB3YXMgaW4gZWZmZWN0IHdpbGwgY2xlYW4gdXAgYW5kIHN0YXJ0IG92ZXIuCisKKyAqICJnaXQgcHVzaCIgd2l0aCBhbiBleHBsaWNpdCBQQVRIIHRvIHJlY2VpdmUtcGFjayBkaWQgbm90IHF1aXRlIHdvcmsgaWYKKyAgIHJlY2VpdmUtcGFjayB3YXMgbm90IG9uIHVzdWFsIFBBVEguICBXZSBlYXJsaWVyIGZpeGVkIHRoZSBzYW1lIGlzc3VlCisgICB3aXRoICJnaXQgZmV0Y2giIGFuZCB1cGxvYWQtcGFjaywgYnV0IHNvbWVob3cgZm9yZ290IHRvIGRvIHNvIGluIHRoZQorICAgb3RoZXIgZGlyZWN0aW9uLgorCisgKiBnaXQtZ3VpJ3MgaW5mbyBkaWFsb2cgd2FzIG5vdCBkaXNwbGF5ZWQgY29ycmVjdGx5IHdoZW4gdGhlIHVzZXIgdHJpZXMKKyAgIHRvIGNvbW1pdCBub3RoaW5nIChpLmUuIHdpdGhvdXQgc3RhZ2luZyBhbnl0aGluZykuCisKKyAqICJnaXQgcmV2ZXJ0IiBkaWQgbm90IHByb3Blcmx5IGZhaWwgd2hlbiBhdHRlbXB0aW5nIHRvIHJ1biB3aXRoIGEKKyAgIGRpcnR5IGluZGV4LgorCisgKiAiZ2l0IG1lcmdlIC0tbm8tY29tbWl0IC0tbm8tZmYgPG90aGVyPiIgaW5jb3JyZWN0bHkgbWFkZSBjb21taXRzLgorCisgKiAiZ2l0IG1lcmdlIC0tc3F1YXNoIC0tbm8tZmYgPG90aGVyPiIsIHdoaWNoIGlzIGEgbm9uc2Vuc2UgY29tYmluYXRpb24KKyAgIG9mIG9wdGlvbnMsIHdhcyBub3QgcmVqZWN0ZWQuCisKKyAqICJnaXQgbHMtcmVtb3RlIiBhbmQgImdpdCByZW1vdGUgc2hvdyIgYWdhaW5zdCBhbiBlbXB0eSByZXBvc2l0b3J5CisgICBmYWlsZWQsIGluc3RlYWQgb2YganVzdCBnaXZpbmcgYW4gZW1wdHkgcmVzdWx0IChyZWdyZXNzaW9uKS4KKworICogImdpdCBmYXN0LWltcG9ydCIgZGlkIG5vdCBoYW5kbGUgYSByZW5hbWVkIHBhdGggd2hvc2UgbmFtZSBuZWVkcyB0byBiZQorICAgcXVvdGVkLCBkdWUgdG8gYSBidWcgaW4gdW5xdW90ZV9jX3N0eWxlKCkgZnVuY3Rpb24uCisKKyAqICJnaXQgY3ZzZXhwb3J0Y29tbWl0IiB3YXMgY29uZnVzZWQgd2hlbiBtdWx0aXBsZSBmaWxlcyB3aXRoIHRoZSBzYW1lCisgICBiYXNlbmFtZSBuZWVkZWQgdG8gYmUgcHVzaGVkIG91dCBpbiB0aGUgc2FtZSBjb21taXQuCisKKyAqICJnaXQgZGFlbW9uIiBkaWQgbm90IHNlbmQgZWFybHkgZXJyb3JzIHRvIHN5c2xvZy4KKworICogImdpdCBsb2cgLS1tZXJnZSIgZGlkIG5vdCB3b3JrIHdlbGwgd2l0aCAtLWxlZnQtcmlnaHQgb3B0aW9uLgorCisgKiAiZ2l0IHN2biIgcHJvbXB0ZWQgZm9yIGNsaWVudCBjZXJ0IHBhc3N3b3JkIGV2ZXJ5IHRpbWUgaXQgYWNjZXNzZWQgdGhlCisgICBzZXJ2ZXIuCisKKyAqIFRoZSByZXNldCBjb21tYW5kIGluICJnaXQgZmFzdC1pbXBvcnQiIGRhdGEgc3RyZWFtIHdhcyBkb2N1bWVudGVkIHRvCisgICBlbmQgd2l0aCBhbiBvcHRpb25hbCBMRiwgYnV0IGl0IGFjdHVhbGx5IHJlcXVpcmVkIG9uZS4KKworICogImdpdCBzdm4gZGNvbW1pdC9yZWJhc2UiIGRpZCBub3QgaG9ub3IgLS1yZXdyaXRlLXJvb3Qgb3B0aW9uLgorCitBbHNvIGluY2x1ZGVkIGFyZSBhIGhhbmRmdWwgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkMTMwZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuNS50eHQKQEAgLTAsMCArMSw1NiBAQAorR0lUIHYxLjUuNC41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNC40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGZldGNoIHRoZXJlIiB3aGVuIHRoZSBVUkwgaW5mb3JtYXRpb24gY2FtZSBmcm9tIHRoZSBDb2dpdG8gc3R5bGUKKyAgIGJyYW5jaGVzL3RoZXJlIGZpbGUgZGlkIG5vdCB1cGRhdGUgcmVmcy9oZWFkcy90aGVyZSAocmVncmVzc2lvbiBpbgorICAgMS41LjQpLgorCisgKiBCb2d1cyByZWZzcGVjIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyAicmVtb3RlLnRoZXJlLmZldGNoID0gPSIgd2VyZSBub3QKKyAgIGRldGVjdGVkIGFzIGVycm9ycyAocmVncmVzc2lvbiBpbiAxLjUuNCkuCisKKyAqIFlvdSBjb3VsZG4ndCBzcGVjaWZ5IGEgY3VzdG9tIGVkaXRvciB3aG9zZSBwYXRoIGNvbnRhaW5zIGEgd2hpdGVzcGFjZQorICAgdmlhIEdJVF9FRElUT1IgKGFuZCBjb3JlLmVkaXRvcikuCisKKyAqIFRoZSBzdWJkaXJlY3RvcnkgZmlsdGVyIHRvICJnaXQgZmlsdGVyLWJyYW5jaCIgbWlzaGFuZGxlZCBhIGhpc3RvcnkKKyAgIHdoZXJlIHRoZSBzdWJkaXJlY3RvcnkgYmVjb21lcyBlbXB0eSBhbmQgdGhlbiBsYXRlciBiZWNvbWVzIG5vbi1lbXB0eS4KKworICogImdpdCBzaG9ydGxvZyIgZ2F2ZSBhbiBlbXB0eSBsaW5lIGlmIHRoZSBvcmlnaW5hbCBjb21taXQgbWVzc2FnZSB3YXMKKyAgIG1hbGZvcm1lZCAoZS5nLiBhIGJvdGNoZWQgaW1wb3J0IGZyb20gZm9yZWlnbiBTQ00pLiAgTm93IGl0IGZpbmRzIHRoZQorICAgZmlyc3Qgbm9uLWVtcHR5IGxpbmUgYW5kIHVzZXMgaXQgZm9yIGJldHRlciBpbmZvcm1hdGlvbi4KKworICogV2hlbiB0aGUgdXNlciBmYWlscyB0byBnaXZlIGEgcmV2aXNpb24gcGFyYW1ldGVyIHRvICJnaXQgc3ZuIiwgYW4gZXJyb3IKKyAgIGZyb20gdGhlIFBlcmwgaW50ZXJwcmV0ZXIgd2FzIGlzc3VlZCBiZWNhdXNlIHRoZSBzY3JpcHQgbGFja2VkIHByb3BlcgorICAgZXJyb3IgY2hlY2tpbmcuCisKKyAqIEFmdGVyICJnaXQgcmViYXNlIiBzdG9wcGVkIGR1ZSB0byBjb25mbGljdHMsIGlmIHRoZSB1c2VyIHBsYXllZCB3aXRoCisgICAiZ2l0IHJlc2V0IiBhbmQgZnJpZW5kcywgImdpdCByZWJhc2UgLS1hYm9ydCIgZmFpbGVkIHRvIGdvIGJhY2sgdG8gdGhlCisgICBjb3JyZWN0IGNvbW1pdC4KKworICogQWRkaXRpb25hbCB3b3JrIHRyZWVzIHByZXBhcmVkIHdpdGggZ2l0LW5ldy13b3JrZGlyIChpbiBjb250cmliLykgZGlkCisgICBub3Qgc2hhcmUgZ2l0LXN2biBtZXRhZGF0YSBkaXJlY3RvcnkgLmdpdC9zdm4gd2l0aCB0aGUgb3JpZ2luYWwuCisKKyAqICJnaXQtbWVyZ2UtcmVjdXJzaXZlIiBkaWQgbm90IG1hcmsgYWRkaXRpb24gb2YgdGhlIHNhbWUgcGF0aCB3aXRoCisgICBkaWZmZXJlbnQgZmlsZW1vZGVzIGNvcnJlY3RseSBhcyBhIGNvbmZsaWN0LgorCisgKiAiZ2l0d2ViIiBnYXZlIG1hbGZvcm1lZCBVUkwgd2hlbiBwYXRoaW5mbyBzdHlwZSBwYXRocyBhcmUgaW4gdXNlLgorCisgKiAiLW4iIHN0YW5kcyBmb3IgIi0tbm8tdGFncyIgYWdhaW4gZm9yICJnaXQgZmV0Y2giLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgZGlkIG5vdCBkZXRlY3QgdGhlIG5lZWQgdG8gYWRkIDgtYml0IE1JTUUgaGVhZGVyCisgICB3aGVuIHRoZSB1c2VyIHVzZWQgZm9ybWF0LmhlYWRlciBjb25maWd1cmF0aW9uLgorCisgKiAicmV2fiIgcmV2aXNpb24gc3BlY2lmaWVyIHVzZWQgdG8gbWVhbiAicmV2Iiwgd2hpY2ggd2FzIGluY29uc2lzdGVudAorICAgd2l0aCBob3cgInJldl4iIHdvcmtlZC4gIE5vdyAicmV2fiIgaXMgdGhlIHNhbWUgYXMgInJldn4xIiAoaGVuY2UgaXQKKyAgIGFsc28gaXMgdGhlIHNhbWUgYXMgInJldl4xIiksIGFuZCAicmV2fjAiIGlzIHRoZSBzYW1lIGFzICJyZXZeMCIKKyAgIChpLmUuIGl0IGhhcyB0byBiZSBhIGNvbW1pdCkuCisKKyAqICJnaXQgcXVpbHRpbXBvcnQiIGRpZCBub3QgZ3JvayBlbXB0eSBsaW5lcywgbGluZXMgaW4gImZpbGUgLXBOTk4iCisgICBmb3JtYXQgdG8gc3BlY2lmeSB0aGUgcHJlZml4IGxldmVscyBhbmQgbGluZXMgd2l0aCB0cmFpbGluZyBjb21tZW50cy4KKworICogImdpdCByZWJhc2UgLW0iIHRyaWdnZXJlZCBwcmUtY29tbWl0IHZlcmlmaWNhdGlvbiwgd2hpY2ggbWFkZQorICAgInJlYmFzZSAtLWNvbnRpbnVlIiBpbXBvc3NpYmxlLgorCitBcyB1c3VhbCwgaXQgYWxzbyBjb21lcyB3aXRoIG1hbnkgZG9jdW1lbnRhdGlvbiBmaXhlcyBhbmQgY2xhcmlmaWNhdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTNjM2U1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC42LnR4dApAQCAtMCwwICsxLDQzIEBACitHSVQgdjEuNS40LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSSBwZXJzb25hbGx5IGRvIG5vdCB0aGluayB0aGVyZSBpcyBhbnkgcmVhc29uIGFueWJvZHkgc2hvdWxkIHdhbnQgdG8KK3J1biB2MS41LjQuWCBzZXJpZXMgdGhlc2UgZGF5cywgYmVjYXVzZSAnbWFzdGVyJyB2ZXJzaW9uIGlzIGFsd2F5cworbW9yZSBzdGFibGUgdGhhbiBhbnkgdGFnZ2VkIHJlbGVhc2VkIHZlcnNpb24gb2YgZ2l0LgorCitUaGlzIGlzIHByaW1hcmlseSB0byBmdXR1cmVwcm9vZiAiZ2l0LXNoZWxsIiB0byBhY2NlcHQgcmVxdWVzdHMKK3dpdGhvdXQgYSBkYXNoIGJldHdlZW4gImdpdCIgYW5kIHN1YmNvbW1hbmQgbmFtZSAoZS5nLiAiZ2l0Cit1cGxvYWQtcGFjayIpIHdoaWNoIHRoZSBuZXdlciBjbGllbnQgd2lsbCBzdGFydCB0byBtYWtlIHNvbWV0aW1lIGluCit0aGUgZnV0dXJlLgorCitGaXhlcyBzaW5jZSB2MS41LjQuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQ29tbWFuZCBsaW5lIG9wdGlvbiAiLW4iIHRvICJnaXQtcmVwYWNrIiB3YXMgbm90IGNvcnJlY3RseSBwYXJzZWQuCisKKyAqIEVycm9yIG1lc3NhZ2VzIGZyb20gImdpdC1hcHBseSIgd2hlbiB0aGUgcGF0Y2hmaWxlIGNhbm5vdCBiZSBvcGVuZWQKKyAgIGhhdmUgYmVlbiBpbXByb3ZlZC4KKworICogRXJyb3IgbWVzc2FnZXMgZnJvbSAiZ2l0LWJpc2VjdCIgd2hlbiBnaXZlbiBub25zZW5zZSByZXZpc2lvbnMgaGF2ZQorICAgYmVlbiBpbXByb3ZlZC4KKworICogcmVmbG9nIHN5bnRheCB0aGF0IHVzZXMgdGltZSBlLmcuICJIRUFEQHsxMCBzZWNvbmRzIGFnb306cGF0aCIgZGlkIG5vdAorICAgc3RvcCBwYXJzaW5nIGF0IHRoZSBjbG9zaW5nICJ9Ii4KKworICogImdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgXm1hc3Rlcl4yIiBwcmludGVkIHNvbGl0YXJ5ICJeIiwKKyAgIGJ1dCBpdCBzaG91bGQgcHJpbnQgbm90aGluZy4KKworICogImdpdCBhcHBseSIgZGlkIG5vdCBlbmZvcmNlICJtYXRjaCBhdCB0aGUgYmVnaW5uaW5nIiBjb3JyZWN0bHkuCisKKyAqIGEgcGF0aCBzcGVjaWZpY2F0aW9uICJhL2IiIGluIC5naXRhdHRyaWJ1dGVzIGZpbGUgc2hvdWxkIG5vdCBtYXRjaAorICAgInN1Yi9hL2IiLCBidXQgaXQgZGlkLgorCisgKiAiZ2l0IGxvZyAtLWRhdGUtb3JkZXIgLS10b3BvLW9yZGVyIiBkaWQgbm90IG92ZXJyaWRlIHRoZSBlYXJsaWVyCisgICBkYXRlLW9yZGVyIHdpdGggdG9wby1vcmRlciBhcyBleHBlY3RlZC4KKworICogImdpdCBmYXN0LWV4cG9ydCIgZGlkIG5vdCBleHBvcnQgb2N0b3B1cyBtZXJnZXMgY29ycmVjdGx5LgorCisgKiAiZ2l0IGFyY2hpdmUgLS1wcmVmaXg9JHBhdGgvIiBtaXNoYW5kbGVkIGdpdGF0dHJpYnV0ZXMuCisKK0FzIHVzdWFsLCBpdCBhbHNvIGNvbWVzIHdpdGggbWFueSBkb2N1bWVudGF0aW9uIGZpeGVzIGFuZCBjbGFyaWZpY2F0aW9ucy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2NWEwZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuNy50eHQKQEAgLTAsMCArMSwxMCBAQAorR0lUIHYxLjUuNC43IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIDEuNS40LjcKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogUmVtb3ZlZCBzdXBwb3J0IGZvciBhbiBvYnNvbGV0ZSBnaXR3ZWIgcmVxdWVzdCBVUkksIHdob3NlCisgICBpbXBsZW1lbnRhdGlvbiByYW4gImdpdCBkaWZmIiBQb3JjZWxhaW4sIGluc3RlYWQgb2YgdXNpbmcgcGx1bWJpbmcsCisgICB3aGljaCB3b3VsZCBoYXZlIHJ1biBhbiBleHRlcm5hbCBkaWZmIGNvbW1hbmQgc3BlY2lmaWVkIGluIHRoZQorICAgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGFzIHRoZSBnaXR3ZWIgdXNlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEzMjNiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQudHh0CkBAIC0wLDAgKzEsMzc3IEBACitHSVQgdjEuNS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitSZW1vdmFsCistLS0tLS0tCisKKyAqICJnaXQgc3ZuaW1wb3J0IiB3YXMgcmVtb3ZlZCBpbiBmYXZvciBvZiAiZ2l0IHN2biIuICBJdCBpcyBzdGlsbCB0aGVyZQorICAgaW4gdGhlIHNvdXJjZSB0cmVlIChjb250cmliL2V4YW1wbGVzKSBidXQgdW5zdXBwb3J0ZWQuCisKKyAqIEFzIGdpdC1jb21taXQgYW5kIGdpdC1zdGF0dXMgaGF2ZSBiZWVuIHJld3JpdHRlbiwgImdpdCBydW5zdGF0dXMiCisgICBoZWxwZXIgc2NyaXB0IGxvc3QgYWxsIGl0cyB1c2VycyBhbmQgaGFzIGJlZW4gcmVtb3ZlZC4KKworCitUZW1wb3JhcmlseSBkaXNhYmxlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBodHRwLXB1c2giIGlzIGtub3duIG5vdCB0byB3b3JrIHdlbGwgd2l0aCBjVVJMIGxpYnJhcnkgb2xkZXIKKyAgIHRoYW4gNy4xNiwgYW5kIHdlIGhhZCByZXBvcnRzIG9mIHJlcG9zaXRvcnkgY29ycnVwdGlvbi4gIEl0IGlzCisgICBkaXNhYmxlZCBvbiBzdWNoIHBsYXRmb3JtcyBmb3Igbm93LiAgVW5mb3J0dW5hdGVseSwgMS41LjMuOCBzaGFyZXMKKyAgIHRoZSBzYW1lIGlzc3VlLiAgSW4gb3RoZXIgd29yZHMsIHRoaXMgZG9lcyBub3QgbWVhbiB5b3Ugd2lsbCBiZQorICAgZmluZSBpZiB5b3Ugc3RpY2sgdG8gYW4gb2xkZXIgZ2l0IHJlbGVhc2UuICBGb3Igbm93LCBwbGVhc2UgZG8gbm90CisgICB1c2UgaHR0cC1wdXNoIGZyb20gb2xkZXIgZ2l0IHdpdGggY1VSTCBvbGRlciB0aGFuIDcuMTYgaWYgeW91CisgICB2YWx1ZSB5b3VyIGRhdGEuIEEgcHJvcGVyIGZpeCB3aWxsIGhvcGVmdWxseSBtYXRlcmlhbGl6ZSBpbgorICAgbGF0ZXIgdmVyc2lvbnMuCisKKworRGVwcmVjYXRpb24gbm90aWNlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBGcm9tIHYxLjYuMCwgZ2l0IHdpbGwgYnkgZGVmYXVsdCBpbnN0YWxsIGRhc2hlZCBmb3JtIG9mIGNvbW1hbmRzCisgICAoZS5nLiAiZ2l0LWNvbW1pdCIpIG91dHNpZGUgb2YgdXNlcnMnIG5vcm1hbCAkUEFUSCwgYW5kIHdpbGwgaW5zdGFsbAorICAgb25seSBzZWxlY3RlZCBjb21tYW5kcyAoImdpdCIgaXRzZWxmLCBhbmQgImdpdGsiKSBpbiAkUEFUSC4gIFRoaXMKKyAgIGltcGxpZXM6CisKKyAgIC0gVXNpbmcgZGFzaGVkIGZvcm1zIG9mIGdpdCBjb21tYW5kcyAoZS5nLiAiZ2l0LWNvbW1pdCIpIGZyb20gdGhlCisgICAgIGNvbW1hbmQgbGluZSBoYXMgYmVlbiBpbmZvcm1hbGx5IGRlcHJlY2F0ZWQgc2luY2UgZWFybHkgMjAwNiwgYnV0CisgICAgIG5vdyBpdCBvZmZpY2lhbGx5IGlzLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuICBVc2UKKyAgICAgZGFzaC1sZXNzIGZvcm1zIChlLmcuICJnaXQgY29tbWl0IikgaW5zdGVhZC4KKworICAgLSBVc2luZyBkYXNoZWQgZm9ybXMgZnJvbSB5b3VyIHNjcmlwdHMsIHdpdGhvdXQgZmlyc3QgcHJlcGVuZGluZyB0aGUKKyAgICAgcmV0dXJuIHZhbHVlIGZyb20gImdpdCAtLWV4ZWMtcGF0aCIgdG8gdGhlIHNjcmlwdHMnIFBBVEgsIGhhcyBiZWVuCisgICAgIGluZm9ybWFsbHkgZGVwcmVjYXRlZCBzaW5jZSBlYXJseSAyMDA2LCBidXQgbm93IGl0IG9mZmljaWFsbHkgaXMuCisKKyAgIC0gVXNlIG9mIGRhc2hlZCBmb3JtcyB3aXRoICJQQVRIPSQoZ2l0IC0tZXhlYy1wYXRoKTokUEFUSDsgZXhwb3J0CisgICAgIFBBVEgiIGVhcmx5IGluIHlvdXIgc2NyaXB0IGlzIG5vdCBkZXByZWNhdGVkIHdpdGggdGhpcyBjaGFuZ2UuCisKKyAgIFVzZXJzIGFyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIGFkanVzdCB0aGVpciBoYWJpdHMgYW5kIHNjcmlwdHMgbm93CisgICB0byBwcmVwYXJlIGZvciB0aGlzIGNoYW5nZS4KKworICogVGhlIHBvc3QtcmVjZWl2ZSBob29rIHdhcyBpbnRyb2R1Y2VkIGluIE1hcmNoIDIwMDcgdG8gc3VwZXJzZWRlCisgICB0aGUgcG9zdC11cGRhdGUgaG9vaywgcHJpbWFyaWx5IHRvIG92ZXJjb21lIHRoZSBjb21tYW5kIGxpbmUgbGVuZ3RoCisgICBsaW1pdGF0aW9uIG9mIHRoZSBsYXR0ZXIuICBVc2Ugb2YgcG9zdC11cGRhdGUgaG9vayB3aWxsIGJlIGRlcHJlY2F0ZWQKKyAgIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBnaXQsIHN0YXJ0aW5nIGZyb20gdjEuNi4wLgorCisgKiAiZ2l0IGxvc3QtZm91bmQiIHdhcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mICJnaXQgZnNjayIncyAtLWxvc3QtZm91bmQKKyAgIG9wdGlvbiwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLgorCisgKiAiZ2l0IHBlZWstcmVtb3RlIiBpcyBkZXByZWNhdGVkLCBhcyAiZ2l0IGxzLXJlbW90ZSIgd2FzIHdyaXR0ZW4gaW4gQworICAgYW5kIHdvcmtzIGZvciBhbGwgdHJhbnNwb3J0czsgImdpdCBwZWVrLXJlbW90ZSIgd2lsbCBiZSByZW1vdmVkIGluCisgICB0aGUgZnV0dXJlLgorCisgKiAiZ2l0IHJlcG8tY29uZmlnIiB3aGljaCB3YXMgYW4gb2xkIG5hbWUgZm9yICJnaXQgY29uZmlnIiBjb21tYW5kCisgICBoYXMgYmVlbiBzdXBwb3J0ZWQgd2l0aG91dCBiZWluZyBhZHZlcnRpc2VkIGZvciBhIGxvbmcgdGltZS4gIFRoZQorICAgbmV4dCBmZWF0dXJlIHJlbGVhc2Ugd2lsbCByZW1vdmUgaXQuCisKKyAqIEZyb20gdjEuNi4wLCB0aGUgcmVwYWNrLnVzZWRlbHRhYmFzZW9mZnNldCBjb25maWcgb3B0aW9uIHdpbGwgZGVmYXVsdAorICAgdG8gdHJ1ZSwgd2hpY2ggd2lsbCBnaXZlIGRlbnNlciBwYWNrZmlsZXMgKGkuZS4gbW9yZSBlZmZpY2llbnQgc3RvcmFnZSkuCisgICBUaGUgZG93bnNpZGUgaXMgdGhhdCBnaXQgb2xkZXIgdGhhbiB2ZXJzaW9uIDEuNC40IHdpbGwgbm90IGJlIGFibGUKKyAgIHRvIGRpcmVjdGx5IHVzZSBhIHJlcG9zaXRvcnkgcGFja2VkIHVzaW5nIHRoaXMgc2V0dGluZy4KKworICogRnJvbSB2MS42LjAsIHRoZSBwYWNrLmluZGV4dmVyc2lvbiBjb25maWcgb3B0aW9uIHdpbGwgZGVmYXVsdCB0byAyLAorICAgd2hpY2ggaXMgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQsIGFuZCBtYWtlcyByZXBhY2tpbmcgbW9yZSBpbW11bmUgdG8KKyAgIGRhdGEgY29ycnVwdGlvbnMuICBHaXQgb2xkZXIgdGhhbiB2ZXJzaW9uIDEuNS4yIG1heSByZXZlcnQgdG8gdmVyc2lvbiAxCisgICBvZiB0aGUgcGFjayBpbmRleCB3aXRoIGEgbWFudWFsICJnaXQgaW5kZXgtcGFjayIgdG8gYmUgYWJsZSB0byBkaXJlY3RseQorICAgYWNjZXNzIGNvcnJlc3BvbmRpbmcgcGFjayBmaWxlcy4KKworCitVcGRhdGVzIHNpbmNlIHYxLjUuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQ29tZXMgd2l0aCBtdWNoIGltcHJvdmVkIGdpdGssIHdpdGggaTE4bi4KKworICogQ29tZXMgd2l0aCBnaXQtZ3VpIDAuOS4yIHdpdGggaTE4bi4KKworICogZ2l0ayBpcyBub3cgbWVyZ2VkIGFzIGEgc3ViZGlyZWN0b3J5IG9mIGdpdC5naXQgcHJvamVjdCwgaW4KKyAgIHByZXBhcmF0aW9uIGZvciBpdHMgaTE4bi4KKworICogcHJvZ3Jlc3MgZGlzcGxheXMgZnJvbSBtYW55IGNvbW1hbmRzIGFyZSBhIGxvdCBuaWNlciB0byB0aGUgZXllLgorICAgVHJhbnNmZXIgY29tbWFuZHMgc2hvdyB0aHJvdWdocHV0IGRhdGEuCisKKyAqIG1hbnkgY29tbWFuZHMgdGhhdCBwYXkgYXR0ZW50aW9uIHRvIHBlci1kaXJlY3RvcnkgLmdpdGlnbm9yZSBub3cgZG8KKyAgIHNvIGxhemlseSwgd2hpY2ggbWFrZXMgdGhlIHVzdWFsIGNhc2UgZ28gbXVjaCBmYXN0ZXIuCisKKyAqIE91dHB1dCBwcm9jZXNzaW5nIGZvciAnLS1wcmV0dHk9Zm9ybWF0Ojx1c2VyIGZvcm1hdD4nIGhhcyBiZWVuCisgICBvcHRpbWl6ZWQuCisKKyAqIFJlbmFtZSBkZXRlY3Rpb24gb2YgZGlmZiBmYW1pbHkgd2hpbGUgZGV0ZWN0aW5nIGV4YWN0IG1hdGNoZXMgaGFzCisgICBiZWVuIGdyZWF0bHkgb3B0aW1pemVkLgorCisgKiBSZW5hbWUgZGV0ZWN0aW9uIG9mIGRpZmYgZmFtaWx5IHRyaWVzIHRvIG1ha2UgbW9yZSBuYXR1cmFsIGxvb2tpbmcKKyAgIHBhaXJpbmcuICBFYXJsaWVyLCBpZiBtdWx0aXBsZSBpZGVudGljYWwgcmVuYW1lIHNvdXJjZXMgd2VyZQorICAgZm91bmQgaW4gdGhlIHByZWltYWdlLCB0aGUgc291cmNlIHVzZWQgd2FzIHBpY2tlZCBwcmV0dHkgbXVjaCBhdCByYW5kb20uCisKKyAqIFZhbHVlICJ0cnVlIiBmb3IgY29sb3IuZGlmZiBhbmQgY29sb3Iuc3RhdHVzIGNvbmZpZ3VyYXRpb24gdXNlZCB0bworICAgbWVhbiAiYWx3YXlzIiAoZXZlbiB3aGVuIHRoZSBvdXRwdXQgaXMgbm90IGdvaW5nIHRvIGEgdGVybWluYWwpLgorICAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQgdG8gbWVhbiB0aGUgc2FtZSB0aGluZyBhcyAiYXV0byIuCisKKyAqICJnaXQgZGlmZiIgUG9yY2VsYWluIG5vdyByZXNwZWN0cyBkaWZmLmV4dGVybmFsIGNvbmZpZ3VyYXRpb24sIHdoaWNoCisgICBpcyBhbm90aGVyIHdheSB0byBzcGVjaWZ5IEdJVF9FWFRFUk5BTF9ESUZGLgorCisgKiAiZ2l0IGRpZmYiIGNhbiBiZSB0b2xkIHRvIHVzZSBkaWZmZXJlbnQgcHJlZml4ZXMgb3RoZXIgdGhhbgorICAgImEvIiBhbmQgImIvIiBlLmcuICJnaXQgZGlmZiAtLXNyYy1wcmVmaXg9bC8gLS1kc3QtcHJlZml4PWsvIi4KKworICogImdpdCBkaWZmIiBzb21ldGltZXMgZGlkIG5vdCBxdW90ZSBwYXRocyB3aXRoIGZ1bm55CisgICBjaGFyYWN0ZXJzIHByb3Blcmx5LgorCisgKiAiZ2l0IGxvZyIgKGFuZCBhbnkgcmV2aXNpb24gdHJhdmVyc2FsIGNvbW1hbmRzKSBtaXNiZWhhdmVkCisgICB3aGVuIC0tZGlmZi1maWx0ZXIgaXMgZ2l2ZW4gYnV0IHdhcyBub3QgYXNrZWQgdG8gYWN0dWFsbHkKKyAgIHByb2R1Y2UgZGlmZi4KKworICogSFRUUCBwcm94eSBjYW4gYmUgc3BlY2lmaWVkIHBlciByZW1vdGUgcmVwb3NpdG9yeSB1c2luZworICAgcmVtb3RlLiouaHR0cHByb3h5IGNvbmZpZ3VyYXRpb24sIG9yIGdsb2JhbCBodHRwLnByb3h5IGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlLgorCisgKiBWYXJpb3VzIFBlcmZvcmNlIGltcG9ydGVyIHVwZGF0ZXMuCisKKyAqIEV4YW1wbGUgdXBkYXRlIGFuZCBwb3N0LXJlY2VpdmUgaG9va3MgaGF2ZSBiZWVuIGltcHJvdmVkLgorCisgKiBBbnkgY29tbWFuZCB0aGF0IHdhbnRzIHRvIHRha2UgYSBjb21taXQgb2JqZWN0IG5hbWUgY2FuIG5vdyB1c2UKKyAgICI6L3N0cmluZyIgc3ludGF4IHRvIG5hbWUgYSBjb21taXQuCisKKyAqICJnaXQgcmVzZXQiIGlzIG5vdyBidWlsdC1pbiBhbmQgaXRzIG91dHB1dCBjYW4gYmUgc3F1ZWxjaGVkIHdpdGggLXEuCisKKyAqICJnaXQgcmVzZXQgLS1oYXJkIiBkb2VzIG5vdCBtYWtlIGFueSBzZW5zZSBpbiBhIGJhcmUKKyAgIHJlcG9zaXRvcnksIGJ1dCBkaWQgbm90IGVycm9yIG91dDsgZml4ZWQuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgY2FuIG9wdGlvbmFsbHkgdGFsayBvdmVyIHNzbXRwIGFuZCB1c2UgU01UUC1BVVRILgorCisgKiAiZ2l0IHJlYmFzZSIgbGVhcm5lZCAtLXdoaXRlc3BhY2Ugb3B0aW9uLgorCisgKiBJbiAiZ2l0IHJlYmFzZSIsIHdoZW4geW91IGRlY2lkZSBub3QgdG8gcmVwbGF5IGEgcGFydGljdWxhciBjaGFuZ2UKKyAgIGFmdGVyIHRoZSBjb21tYW5kIHN0b3BwZWQgd2l0aCBhIGNvbmZsaWN0LCB5b3UgY2FuIHNheSAiZ2l0IHJlYmFzZQorICAgLS1za2lwIiB3aXRob3V0IGZpcnN0IHJ1bm5pbmcgImdpdCByZXNldCAtLWhhcmQiLCBhcyB0aGUgY29tbWFuZCBub3cKKyAgIHJ1bnMgaXQgZm9yIHlvdS4KKworICogImdpdCByZWJhc2UgLS1pbnRlcmFjdGl2ZSIgbW9kZSBjYW4gbm93IHdvcmsgb24gZGV0YWNoZWQgSEVBRC4KKworICogT3RoZXIgbWlub3IgdG8gc2VyaW91cyBidWdzIGluICJnaXQgcmViYXNlIC1pIiBoYXZlIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgcmViYXNlIiBub3cgZGV0YWNoZXMgaGVhZCBkdXJpbmcgaXRzIG9wZXJhdGlvbiwgc28gYWZ0ZXIgYQorICAgc3VjY2Vzc2Z1bCAiZ2l0IHJlYmFzZSIgb3BlcmF0aW9uLCB0aGUgcmVmbG9nIGVudHJ5IGJyYW5jaEB7MX0gZm9yCisgICB0aGUgY3VycmVudCBicmFuY2ggcG9pbnRzIGF0IHRoZSBjb21taXQgYmVmb3JlIHRoZSByZWJhc2Ugd2FzCisgICBzdGFydGVkLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgYWxzbyB0cmlnZ2VycyByZXJlcmUgdG8gaGVscCB5b3VyIHJlcGVhdGVkIG1lcmdlcy4KKworICogImdpdCBtZXJnZSIgY2FuIGNhbGwgdGhlICJwb3N0LW1lcmdlIiBob29rLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgY2FuIG9wdGlvbmFsbHkgcnVuIGRlbHRpZmljYXRpb24gd2l0aCBtdWx0aXBsZQorICAgdGhyZWFkcy4KKworICogImdpdCBhcmNoaXZlIiBjYW4gb3B0aW9uYWxseSBzdWJzdGl0dXRlIGtleXdvcmRzIGluIGZpbGVzIG1hcmtlZCB3aXRoCisgICBleHBvcnQtc3Vic3QgYXR0cmlidXRlLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBtYWRlIGEgbWlzZ3VpZGVkIGF0dGVtcHQgdG8gcmVwZWF0IHRoZSBvcmlnaW5hbAorICAgY29tbWFuZCBsaW5lIGluIHRoZSBnZW5lcmF0ZWQgbG9nIG1lc3NhZ2UsIHdoZW4gdG9sZCB0byBjaGVycnktcGljayBhCisgICBjb21taXQgYnkgbmFtaW5nIGEgdGFnIHRoYXQgcG9pbnRzIGF0IGl0LiAgSXQgZG9lcyBub3QgYW55bW9yZS4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIGxlYXJuZWQgJSh4eHhkYXRlOjxkYXRlLWZvcm1hdD4pIHN5bnRheCB0byBzaG93IHRoZQorICAgdmFyaW91cyBkYXRlIGZpZWxkcyBpbiBkaWZmZXJlbnQgZm9ybWF0cy4KKworICogImdpdCBnYyAtLWF1dG8iIGlzIGEgbG93LWltcGFjdCB3YXkgdG8gYXV0b21hdGljYWxseSBydW4gYSB2YXJpYW50IG9mCisgICAiZ2l0IHJlcGFjayIgdGhhdCBkb2VzIG5vdCBsb3NlIHVucmVmZXJlbmNlZCBvYmplY3RzIChyZWFkOiBzYWZlcgorICAgdGhhbiB0aGUgdXN1YWwgb25lKSBhZnRlciB0aGUgdXNlciBhY2N1bXVsYXRlcyB0b28gbWFueSBsb29zZQorICAgb2JqZWN0cy4KKworICogImdpdCBjbGVhbiIgaGFzIGJlZW4gcmV3cml0dGVuIGluIEMuCisKKyAqIFlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IGNsZWFuLnJlcXVpcmVGb3JjZSB0byAiZmFsc2UiIHRvIGFsbG93CisgICAiZ2l0IGNsZWFuIiB3aXRob3V0IC1mIHRvIGRvIGFueSBkYW1hZ2UgKGxhY2sgb2YgdGhlIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIHVzZWQgdG8gbWVhbiAiZG8gbm90IHJlcXVpcmUgLWYgb3B0aW9uIHRvIGxvc2UgdW50cmFja2VkCisgICBmaWxlcyIsIGJ1dCB3ZSBub3cgdXNlIHRoZSBzYWZlciBkZWZhdWx0KS4KKworICogVGhlIGtpbmRzIG9mIHdoaXRlc3BhY2UgZXJyb3JzICJnaXQgZGlmZiIgYW5kICJnaXQgYXBwbHkiIG5vdGljZSAoYW5kCisgICBmaXgpIGNhbiBiZSBjb250cm9sbGVkIHZpYSAnY29yZS53aGl0ZXNwYWNlJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisgICBhbmQgJ3doaXRlc3BhY2UnIGF0dHJpYnV0ZSBpbiAuZ2l0YXR0cmlidXRlcyBmaWxlLgorCisgKiAiZ2l0IHB1c2giIGxlYXJuZWQgLS1kcnktcnVuIG9wdGlvbiB0byBzaG93IHdoYXQgd291bGQgaGFwcGVuIGlmIGEKKyAgIHB1c2ggaXMgcnVuLgorCisgKiAiZ2l0IHB1c2giIGRvZXMgbm90IHVwZGF0ZSBhIHRyYWNraW5nIHJlZiBvbiB0aGUgbG9jYWwgc2lkZSB3aGVuIHRoZQorICAgcmVtb3RlIHJlZnVzZWQgdG8gdXBkYXRlIHRoZSBjb3JyZXNwb25kaW5nIHJlZi4KKworICogImdpdCBwdXNoIiBsZWFybmVkIC0tbWlycm9yIG9wdGlvbi4gIFRoaXMgaXMgdG8gcHVzaCB0aGUgbG9jYWwgcmVmcworICAgb25lLXRvLW9uZSB0byB0aGUgcmVtb3RlLCBhbmQgZGVsZXRlcyByZWZzIGZyb20gdGhlIHJlbW90ZSB0aGF0IGRvCisgICBub3QgZXhpc3QgYW55bW9yZSBpbiB0aGUgcmVwb3NpdG9yeSBvbiB0aGUgcHVzaGluZyBzaWRlLgorCisgKiAiZ2l0IHB1c2giIGNhbiByZW1vdmUgYSBjb3JydXB0IHJlZiBhdCB0aGUgcmVtb3RlIHNpdGUgd2l0aCB0aGUgdXN1YWwKKyAgICI6cmVmIiByZWZzcGVjLgorCisgKiAiZ2l0IHJlbW90ZSIga25vd3MgLS1taXJyb3IgbW9kZS4gIFRoaXMgaXMgdG8gc2V0IHVwIGNvbmZpZ3VyYXRpb24gdG8KKyAgIHB1c2ggaW50byBhIHJlbW90ZSByZXBvc2l0b3J5IHRvIHN0b3JlIGxvY2FsIGJyYW5jaCBoZWFkcyB0byB0aGUgc2FtZQorICAgYnJhbmNoIG9uIHRoZSByZW1vdGUgc2lkZSwgYW5kIHJlbW92ZSBicmFuY2ggaGVhZHMgbG9jYWxseSByZW1vdmVkCisgICBmcm9tIGxvY2FsIHJlcG9zaXRvcnkgYXQgdGhlIHNhbWUgdGltZS4gIFN1aXRhYmxlIGZvciBwdXNoaW5nIGludG8gYQorICAgYmFjay11cCByZXBvc2l0b3J5LgorCisgKiAiZ2l0IHJlbW90ZSIgbGVhcm5lZCAicm0iIHN1YmNvbW1hbmQuCisKKyAqICJnaXQgY3Zzc2VydmVyIiBjYW4gYmUgcnVuIHZpYSAiZ2l0IHNoZWxsIi4gIEFsc28sICJjdnMiIGlzCisgICByZWNvZ25pemVkIGFzIGEgc3lub255bSBmb3IgImdpdCBjdnNzZXJ2ZXIiLCBzbyB0aGF0IENWUyB1c2VycworICAgY2FuIGJlIHN3aXRjaGVkIHRvIGdpdCBqdXN0IGJ5IGNoYW5naW5nIHRoZWlyIGxvZ2luIHNoZWxsLgorCisgKiAiZ2l0IGN2c3NlcnZlciIgYWN0cyBtb3JlIGxpa2UgcmVjZWl2ZS1wYWNrIGJ5IHJ1bm5pbmcgcG9zdC1yZWNlaXZlCisgICBhbmQgcG9zdC11cGRhdGUgaG9va3MuCisKKyAqICJnaXQgYW0iIGFuZCAiZ2l0IHJlYmFzZSIgYXJlIGZhciBsZXNzIHZlcmJvc2UuCisKKyAqICJnaXQgcHVsbCIgbGVhcm5lZCB0byBwYXNzIC0tW25vLV1mZiBvcHRpb24gdG8gdW5kZXJseWluZyAiZ2l0CisgICBtZXJnZSIuCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSIgaXMgYSBkaWZmZXJlbnQgd2F5IHRvIGludGVncmF0ZSB3aGF0IHlvdSBmZXRjaGVkCisgICBpbnRvIHlvdXIgY3VycmVudCBicmFuY2guCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIHByb2R1Y2VzIGRhdGEtc3RyZWFtIHRoYXQgY2FuIGJlIGZlZCB0byBmYXN0LWltcG9ydAorICAgdG8gcmVwcm9kdWNlIHRoZSBoaXN0b3J5IHJlY29yZGVkIGluIGEgZ2l0IHJlcG9zaXRvcnkuCisKKyAqICJnaXQgYWRkIC1pIiB0YWtlcyBwYXRoc3BlY3MgdG8gbGltaXQgdGhlIHNldCBvZiBmaWxlcyB0byB3b3JrIG9uLgorCisgKiAiZ2l0IGFkZCAtcCIgaXMgYSBzaG9ydC1oYW5kIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzZWxlY3RpdmUgcGF0Y2gKKyAgIHN1YmNvbW1hbmQgaW4gdGhlIGludGVyYWN0aXZlIGNvbW1hbmQgbG9vcCBhbmQgdG8gZXhpdCB3aGVuIGRvbmUuCisKKyAqICJnaXQgYWRkIC1pIiBVSSBoYXMgYmVlbiBjb2xvcml6ZWQuICBUaGUgaW50ZXJhY3RpdmUgcHJvbXB0CisgICBhbmQgbWVudSBjYW4gYmUgY29sb3JlZCBieSBzZXR0aW5nIGNvbG9yLmludGVyYWN0aXZlCisgICBjb25maWd1cmF0aW9uLiAgVGhlIGRpZmYgb3V0cHV0IChpbmNsdWRpbmcgdGhlIGh1bmsgcGlja2VyKQorICAgYXJlIGNvbG9yZWQgd2l0aCBjb2xvci5kaWZmIGNvbmZpZ3VyYXRpb24uCisKKyAqICJnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkiIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgc2luZ2xlLXBhcmVudAorICAgY29tbWl0IHRoYXQgcmVjb3JkcyB0aGUgc2FtZSB0cmVlIGFzIGl0cyBwYXJlbnQsIG92ZXJyaWRpbmcgdGhlIHVzdWFsCisgICBzYWZldHkgdmFsdmUuCisKKyAqICJnaXQgY29tbWl0IC0tYW1lbmQiIGNhbiBhbWVuZCBhIG1lcmdlIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSB0cmVlCisgICBmcm9tIGl0cyBmaXJzdCBwYXJlbnQuCisKKyAqICJnaXQgY29tbWl0IiB1c2VkIHRvIHVuY29uZGl0aW9uYWxseSBzdHJpcCBjb21tZW50IGxpbmVzIHRoYXQKKyAgIGJlZ2FuIHdpdGggJyMnIGFuZCByZW1vdmVkIGV4Y2VzcyBibGFuayBsaW5lcy4gIFRoaXMgYmVoYXZpb3IgaGFzCisgICBiZWVuIG1hZGUgY29uZmlndXJhYmxlLgorCisgKiAiZ2l0IGNvbW1pdCIgaGFzIGJlZW4gcmV3cml0dGVuIGluIEMuCisKKyAqICJnaXQgc3Rhc2ggcmFuZG9tLXRleHQiIGRvZXMgbm90IGNyZWF0ZSBhIG5ldyBzdGFzaCBhbnltb3JlLiAgSXQgd2FzCisgICBhIFVJIG1pc3Rha2UuICBVc2UgImdpdCBzdGFzaCBzYXZlIHJhbmRvbS10ZXh0Iiwgb3IgImdpdCBzdGFzaCIKKyAgICh3aXRob3V0IGV4dHJhIGFyZ3MpIGZvciB0aGF0LgorCisgKiAiZ2l0IHN0YXNoIGNsZWFyIGV4dHJhLXRleHQiIGRvZXMgbm90IGNsZWFyIHRoZSB3aG9sZSBzdGFzaAorICAgYW55bW9yZS4gIEl0IGlzIHRlbXB0aW5nIHRvIGV4cGVjdCAiZ2l0IHN0YXNoIGNsZWFyIHN0YXNoQHsyfSIKKyAgIHRvIGRyb3Agb25seSBhIHNpbmdsZSBuYW1lZCBzdGFzaCBlbnRyeSwgYW5kIGl0IGlzIHJ1ZGUgdG8KKyAgIGRpc2NhcmQgZXZlcnl0aGluZyB3aGVuIHRoYXQgaXMgYXNrZWQgKGJ1dCBub3QgcHJvdmlkZWQpLgorCisgKiAiZ2l0IHBydW5lIC0tZXhwaXJlIDx0aW1lPiIgY2FuIGV4ZW1wdCB5b3VuZyBsb29zZSBvYmplY3RzIGZyb20KKyAgIGdldHRpbmcgcHJ1bmVkLgorCisgKiAiZ2l0IGJyYW5jaCAtLWNvbnRhaW5zIDxjb21taXQ+IiBjYW4gbGlzdCBicmFuY2hlcyB0aGF0IGFyZQorICAgZGVzY2VuZGFudHMgb2YgYSBnaXZlbiBjb21taXQuCisKKyAqICJnaXQgbG9nIiBsZWFybmVkIC0tZWFybHktb3V0cHV0IG9wdGlvbiB0byBoZWxwIGludGVyYWN0aXZlIEdVSQorICAgaW1wbGVtZW50YXRpb25zLgorCisgKiAiZ2l0IGJpc2VjdCIgbGVhcm5lZCAic2tpcCIgYWN0aW9uIHRvIG1hcmsgdW50ZXN0YWJsZSBjb21taXRzLgorCisgKiAiZ2l0IGJpc2VjdCB2aXN1YWxpemUiIGxlYXJuZWQgYSBzaG9ydGVyIHN5bm9ueW0gImdpdCBiaXNlY3QgdmlldyIuCisKKyAqICJnaXQgYmlzZWN0IHZpc3VhbGl6ZSIgcnVucyAiZ2l0IGxvZyIgaW4gYSBub24td2luZG93ZWQKKyAgIGVudmlyb25tZW50cy4gIEl0IGFsc28gY2FuIGJlIHRvbGQgd2hhdCBjb21tYW5kIHRvIHJ1biAoZS5nLiAiZ2l0CisgICBiaXNlY3QgdmlzdWFsaXplIHRpZyIpLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCAiZm9ybWF0Lm51bWJlcmVkIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisgICB0byBhdXRvbWF0aWNhbGx5IHR1cm4gLS1udW1iZXJlZCBvcHRpb24gb24gd2hlbiBtb3JlIHRoYW4gb25lIGNvbW1pdHMKKyAgIGFyZSBmb3JtYXR0ZWQuCisKKyAqICJnaXQgbHMtZmlsZXMiIGxlYXJuZWQgIi0tZXhjbHVkZS1zdGFuZGFyZCIgdG8gdXNlIHRoZSBjYW5uZWQgc2V0IG9mCisgICBleGNsdWRlIGZpbGVzLgorCisgKiAiZ2l0IHRhZyAtYSAtZiBleGlzdGluZyIgYmVnaW5zIHRoZSBlZGl0b3Igc2Vzc2lvbiB1c2luZyB0aGUgZXhpc3RpbmcKKyAgIGFubm90YXRpb24gbWVzc2FnZS4KKworICogImdpdCB0YWcgLW0gb25lIC1tIGJhciIgKG11bHRpcGxlIC1tIG9wdGlvbnMpIGJlaGF2ZXMgc2ltaWxhcmx5IHRvCisgICAiZ2l0IGNvbW1pdCI7IHRoZSBwYXJhbWV0ZXJzIHRvIC1tIG9wdGlvbnMgYXJlIGZvcm1hdHRlZCBhcyBzZXBhcmF0ZQorICAgcGFyYWdyYXBocy4KKworICogVGhlIGZvcm1hdCAiZ2l0IHNob3ciIG91dHB1dHMgYW4gYW5ub3RhdGVkIHRhZyBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBpbmNsdWRlICJUYWdnZXI6ICIgYW5kICJEYXRlOiAiIGxpbmVzIGZyb20gdGhlIHRhZyBpdHNlbGYuICBTdHJpY3RseQorICAgc3BlYWtpbmcgdGhpcyBpcyBhIGJhY2t3YXJkIGluY29tcGF0aWJsZSBjaGFuZ2UsIGJ1dCB0aGlzIGlzIGEKKyAgIHJlYXNvbmFibGUgdXNhYmlsaXR5IGZpeCBhbmQgcGVvcGxlJ3Mgc2NyaXB0cyBzaG91bGRuJ3QgaGF2ZSBiZWVuCisgICByZWx5aW5nIG9uIHRoZSBleGFjdCBvdXRwdXQgZnJvbSAiZ2l0IHNob3ciIFBvcmNlbGFpbiBhbnl3YXkuCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBkaWQgbm90IG5vdGljZSBlcnJvcnMgZnJvbSB1bmRlcmx5aW5nICJjdnNwcyIKKyAgIGFuZCBwcm9kdWNlZCBhIGNvcnJ1cHQgaW1wb3J0IHNpbGVudGx5LgorCisgKiAiZ2l0IGN2c2V4cG9ydGNvbW1pdCIgbGVhcm5lZCAtdyBvcHRpb24gdG8gc3BlY2lmeSBhbmQgc3dpdGNoIHRvIHRoZQorICAgQ1ZTIHdvcmtpbmcgZGlyZWN0b3J5LgorCisgKiAiZ2l0IGNoZWNrb3V0IiBmcm9tIGEgc3ViZGlyZWN0b3J5IGxlYXJuZWQgdG8gdXNlICIuLi9wYXRoIiB0byBhbGxvdworICAgY2hlY2tpbmcgb3V0IGEgcGF0aCBvdXRzaWRlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aXRob3V0IGNkJ2luZyB1cC4KKworICogImdpdCBjaGVja291dCIgZnJvbSBhbmQgdG8gZGV0YWNoZWQgSEVBRCBsZWF2ZXMgYSBiaXQgbW9yZQorICAgaW5mb3JtYXRpb24gaW4gdGhlIHJlZmxvZy4KKworICogImdpdCBzZW5kLWVtYWlsIC0tZHJ5LXJ1biIgc2hvd3MgZnVsbCBoZWFkZXJzIGZvciBlYXNpZXIgZGlhZ25vc2lzLgorCisgKiAiZ2l0IG1lcmdlLW91cnMiIGlzIG5vdyBidWlsdC1pbi4KKworICogImdpdCBzdm4iIGxlYXJuZWQgImluZm8iIGFuZCAic2hvdy1leHRlcm5hbHMiIHN1YmNvbW1hbmRzLgorCisgKiAiZ2l0IHN2biIgcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkgZmFpbGVkIHRvIHJlYWQgc2V0dGluZ3MgZnJvbSB0aGUKKyAgIC5naXQvY29uZmlnLgorCisgKiAiZ2l0IHN2biIgbGVhcm5lZCAtLXVzZS1sb2ctYXV0aG9yIG9wdGlvbiwgd2hpY2ggcGlja3MgdXAgbW9yZQorICAgZGVzY3JpcHRpdmUgbmFtZSBmcm9tIEZyb206IGFuZCBTaWduZWQtb2ZmLWJ5OiBsaW5lcyBpbiB0aGUgY29tbWl0CisgICBtZXNzYWdlLgorCisgKiAiZ2l0IHN2biIgd2FzdGVkIHdheSB0b28gbXVjaCBkaXNrIHRvIHJlY29yZCByZXZpc2lvbiBtYXBwaW5ncworICAgYmV0d2VlbiBzdm4gYW5kIGdpdDsgYSBuZXcgcmVwcmVzZW50YXRpb24gdGhhdCBpcyBtdWNoIG1vcmUgY29tcGFjdAorICAgZm9yIHRoaXMgaW5mb3JtYXRpb24gaGFzIGJlZW4gaW50cm9kdWNlZCB0byBjb3JyZWN0IHRoaXMuCisKKyAqICJnaXQgc3ZuIiBsZWZ0IHRlbXBvcmFyeSBpbmRleCBmaWxlcyBpdCB1c2VkIHdpdGhvdXQgY2xlYW5pbmcgdGhlbQorICAgdXA7IHRoaXMgd2FzIGNvcnJlY3RlZC4KKworICogImdpdCBzdGF0dXMiIGZyb20gYSBzdWJkaXJlY3Rvcnkgbm93IHNob3dzIHJlbGF0aXZlIHBhdGhzLCB3aGljaAorICAgbWFrZXMgY29weS1hbmQtcGFzdGluZyBmb3IgZ2l0LWNoZWNrb3V0L2dpdC1hZGQvZ2l0LXJtIGVhc2llci4gIFRoZQorICAgdHJhZGl0aW9uYWwgYmVoYXZpb3IgdG8gc2hvdyB0aGUgZnVsbCBwYXRoIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YKKyAgIHRoZSB3b3JrIHRyZWUgY2FuIGJlIGhhZCBieSBzZXR0aW5nIHN0YXR1cy5yZWxhdGl2ZXBhdGhzCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGZhbHNlLgorCisgKiAiZ2l0IGJsYW1lIiBrZXB0IHRleHQgZm9yIGVhY2ggYW5ub3RhdGVkIHJldmlzaW9uIGluIGNvcmUgbmVlZGxlc3NseTsKKyAgIHRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHNob3J0bG9nIiBsZWFybmVkIHRvIGRlZmF1bHQgdG8gSEVBRCB3aGVuIHRoZSBzdGFuZGFyZCBpbnB1dCBpcworICAgYSB0ZXJtaW5hbCBhbmQgdGhlIHVzZXIgZGlkIG5vdCBnaXZlIGFueSByZXZpc2lvbiBwYXJhbWV0ZXIuCisKKyAqICJnaXQgc2hvcnRsb2ciIGxlYXJuZWQgIi1lIiBvcHRpb24gdG8gc2hvdyBlLW1haWwgYWRkcmVzc2VzIGFzIHdlbGwgYXMKKyAgIGF1dGhvcnMnIG5hbWVzLgorCisgKiAiZ2l0IGhlbHAiIGxlYXJuZWQgIi13IiBvcHRpb24gdG8gc2hvdyBkb2N1bWVudGF0aW9uIGluIGJyb3dzZXJzLgorCisgKiBJbiBhZGRpdGlvbiB0aGVyZSBhcmUgcXVpdGUgYSBmZXcgaW50ZXJuYWwgY2xlYW4tdXBzLiBOb3RhYmx5OgorCisgICAtIG1hbnkgZm9yay9leGVjIGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIHJ1bi1jb21tYW5kIEFQSSwKKyAgICAgYnJvdWdodCBmcm9tIHRoZSBtc3lzZ2l0IGVmZm9ydC4KKworICAgLSBpbnRyb2R1Y3Rpb24gYW5kIG1vcmUgdXNlIG9mIHRoZSBvcHRpb24gcGFyc2VyIEFQSS4KKworICAgLSBlbmhhbmNlbWVudCBhbmQgbW9yZSB1c2Ugb2YgdGhlIHN0cmJ1ZiBBUEkuCisKKyAqIE1ha2VmaWxlIHR3ZWFrcyB0byBzdXBwb3J0IEhQLVVYIGlzIGluLgorCitGaXhlcyBzaW5jZSB2MS41LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjUuMyBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluCit0aGlzIHJlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKK1RoZXNlIGZpeGVzIGFyZSBvbmx5IGluIHYxLjUuNCBhbmQgbm90IGJhY2twb3J0ZWQgdG8gdjEuNS4zIG1haW50ZW5hbmNlCitzZXJpZXMuCisKKyAqIFRoZSB3YXkgImdpdCBkaWZmIC0tY2hlY2siIGJlaGF2ZXMgaXMgbXVjaCBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgd2F5CisgICAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT13YXJuIiB3b3Jrcy4KKworICogImdpdCBzdm4iIHRhbGtpbmcgd2l0aCB0aGUgU1ZOIG92ZXIgSFRUUCB3aWxsIGNvcnJlY3RseSBxdW90ZSBicmFuY2gKKyAgIGFuZCBwcm9qZWN0IG5hbWVzLgorCisgKiAiZ2l0IGNvbmZpZyIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSBvbiBwbGF0Zm9ybXMgdGhhdCBkZWZpbmUKKyAgIFJFR19OT01BVENIIHRvIGFuIGV2ZW4gbnVtYmVyLgorCisgKiBSZWNlbnQgdmVyc2lvbnMgb2YgQXNjaWlEb2MgOCBoYXMgYSBjaGFuZ2UgdG8gYnJlYWsgb3VyCisgICBkb2N1bWVudGF0aW9uOyBhIHdvcmthcm91bmQgaGFzIGJlZW4gaW1wbGVtZW50ZWQuCisKKyAqICJnaXQgZGlmZiAtLWNvbG9yLXdvcmRzIiBjb2xvcmVkIGNvbnRleHQgbGluZXMgaW4gYSB3cm9uZyBjb2xvci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZTQxOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjEudHh0CkBAIC0wLDAgKzEsNDQgQEAKK0dJVCB2MS41LjUuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFyY2hpdmUgLS1wcmVmaXg9JHBhdGgvIiBtaXNoYW5kbGVkIGdpdGF0dHJpYnV0ZXMuCisKKyAqICJnaXQgZmV0Y2ggLXYiIHRoYXQgZmV0Y2hlcyBpbnRvIEZFVENIX0hFQUQgZGlkIG5vdCByZXBvcnQgdGhlIHN1bW1hcnkKKyAgIHRoZSBzYW1lIHdheSBhcyBkb25lIGZvciB1cGRhdGluZyB0aGUgdHJhY2tpbmcgcmVmcy4KKworICogImdpdCBzdm4iIG1pc2JlaGF2ZWQgd2hlbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGN1c3RvbWl6ZWQgdGhlICJnaXQKKyAgIGxvZyIgb3V0cHV0IGZvcm1hdCB1c2luZyBmb3JtYXQucHJldHR5LgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMiIGxlYWtlZCBhbiB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlLgorCisgKiAiZ2l0IGxvZyAtLWRhdGUtb3JkZXIgLS10b3BvLW9yZGVyIiBkaWQgbm90IG92ZXJyaWRlIHRoZSBlYXJsaWVyCisgICBkYXRlLW9yZGVyIHdpdGggdG9wby1vcmRlciBhcyBleHBlY3RlZC4KKworICogImdpdCBiaXNlY3QgZ29vZCAkdGhpcyIgZGlkIG5vdCBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIHJldmlzaW9uCisgICBnaXZlbiBwcm9wZXJseS4KKworICogInVybC48dGhlcmU+Lmluc3RlYWRPZiIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseS4KKworICogImdpdCBjbGVhbiIgcmFuIGluc2lkZSBzdWJkaXJlY3RvcnkgYmVoYXZlZCBhcyBpZiB0aGUgZGlyZWN0b3J5IHdhcworICAgZXhwbGljaXRseSBzcGVjaWZpZWQgZm9yIHJlbW92YWwgYnkgdGhlIGVuZCB1c2VyIGZyb20gdGhlIHRvcCBsZXZlbC4KKworICogImdpdCBiaXNlY3QiIGZyb20gYSBkZXRhY2hlZCBoZWFkIGxlYWtlZCBhbiB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlLgorCisgKiAiZ2l0IGJpc2VjdCBnb29kICRhICRiIiB3aGVuICRhIGlzIE9rIGJ1dCAkYiBpcyBib2d1cyBzaG91bGQgaGF2ZQorICAgYXRvbWljYWxseSBmYWlsZWQgYmVmb3JlIG1hcmtpbmcgJGEgYXMgZ29vZC4KKworICogImdpdCBmbXQtbWVyZ2UtbXNnIiBkaWQgbm90IGNsZWFuIHVwIGxlYWRpbmcgZW1wdHkgbGluZXMgZnJvbSBjb21taXQKKyAgIGxvZyBtZXNzYWdlcyBsaWtlICJnaXQgbG9nIiBmYW1pbHkgZG9lcy4KKworICogImdpdCBhbSIgcmVjb3JkZWQgYSBjb21taXQgd2l0aCBlbXB0eSBTdWJqZWN0OiBsaW5lIHdpdGhvdXQKKyAgIGNvbXBsYWluaW5nLgorCisgKiB3aGVuIGdpdmVuIGEgY29tbWl0IGxvZyBtZXNzYWdlIHdob3NlIGZpcnN0IHBhcmFncmFwaCBjb25zaXN0cyBvZgorICAgbXVsdGlwbGUgbGluZXMsICJnaXQgcmViYXNlIiBzcXVhc2hlZCBpdCBpbnRvIGEgc2luZ2xlIGxpbmUuCisKKyAqICJnaXQgcmVtb3RlIGFkZCAkYm9ndXNfbmFtZSAkdXJsIiBkaWQgbm90IGNvbXBsYWluIHByb3Blcmx5LgorCitBbHNvIGNvbWVzIHdpdGggdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTFhN2IwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS4yLnR4dApAQCAtMCwwICsxLDI3IEBACitHSVQgdjEuNS41LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS41LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgcmVwYWNrIC1uIiB3YXMgbWlzdGFrZW5seSBtYWRlIG5vLW9wIGVhcmxpZXIuCisKKyAqICJnaXQgaW1hcC1zZW5kIiB3YW50ZWQgdG8gYWx3YXlzIGhhdmUgaW1hcC5ob3N0IGV2ZW4gd2hlbiB1c2Ugb2YKKyAgIGltYXAudHVubmVsIG1hZGUgaXQgdW5uZWNlc3NhcnkuCisKKyAqIHJlZmxvZyBzeW50YXggdGhhdCB1c2VzIHRpbWUgZS5nLiAiSEVBREB7MTAgc2Vjb25kcyBhZ299OnBhdGgiIGRpZCBub3QKKyAgIHN0b3AgcGFyc2luZyBhdCB0aGUgY2xvc2luZyAifSIuCisKKyAqICJnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIF5tYXN0ZXJeMiIgcHJpbnRlZCBzb2xpdGFyeSAiXiIsCisgICBidXQgaXQgc2hvdWxkIHByaW50IG5vdGhpbmcuCisKKyAqICJnaXQgY29tbWl0IiBkaWQgbm90IGRldGVjdCB3aGVuIGl0IGZhaWxlZCB0byB3cml0ZSB0cmVlIG9iamVjdHMuCisKKyAqICJnaXQgZmV0Y2giIHNvbWV0aW1lcyB0cmFuc2ZlcnJlZCB0b28gbWFueSBvYmplY3RzIHVubmVjZXNzYXJpbHkuCisKKyAqIGEgcGF0aCBzcGVjaWZpY2F0aW9uICJhL2IiIGluIC5naXRhdHRyaWJ1dGVzIGZpbGUgc2hvdWxkIG5vdCBtYXRjaAorICAgInN1Yi9hL2IiLgorCisgKiB2YXJpb3VzIGdpdHdlYiBmaXhlcy4KKworQWxzbyBjb21lcyB3aXRoIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIyZjk4YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuMy50eHQKQEAgLTAsMCArMSwxMiBAQAorR0lUIHYxLjUuNS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IHNlbmQtZW1haWwgLS1jb21wb3NlIiBkaWQgbm90IG5vdGljZSB0aGF0IG5vbi1hc2NpaSBjb250ZW50cworICAgbmVlZGVkIHNvbWUgTUlNRSBtYWdpYy4KKworICogImdpdCBmYXN0LWV4cG9ydCIgZGlkIG5vdCBleHBvcnQgb2N0b3B1cyBtZXJnZXMgY29ycmVjdGx5LgorCitBbHNvIGNvbWVzIHdpdGggdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDAyNzllCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS40LnR4dApAQCAtMCwwICsxLDcgQEAKK0dJVCB2MS41LjUuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjUuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBuYW1lLXJldiAtLWFsbCIgdXNlZCB0byBzZWdmYXVsdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZmEzNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjUudHh0CkBAIC0wLDAgKzEsMTEgQEAKK0dJVCB2MS41LjUuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJIHBlcnNvbmFsbHkgZG8gbm90IHRoaW5rIHRoZXJlIGlzIGFueSByZWFzb24gYW55Ym9keSBzaG91bGQgd2FudCB0bworcnVuIHYxLjUuNS5YIHNlcmllcyB0aGVzZSBkYXlzLCBiZWNhdXNlICdtYXN0ZXInIHZlcnNpb24gaXMgYWx3YXlzCittb3JlIHN0YWJsZSB0aGFuIGFueSB0YWdnZWQgcmVsZWFzZWQgdmVyc2lvbiBvZiBnaXQuCisKK1RoaXMgaXMgcHJpbWFyaWx5IHRvIGZ1dHVyZXByb29mICJnaXQtc2hlbGwiIHRvIGFjY2VwdCByZXF1ZXN0cword2l0aG91dCBhIGRhc2ggYmV0d2VlbiAiZ2l0IiBhbmQgc3ViY29tbWFuZCBuYW1lIChlLmcuICJnaXQKK3VwbG9hZC1wYWNrIikgd2hpY2ggdGhlIG5ld2VyIGNsaWVudCB3aWxsIHN0YXJ0IHRvIG1ha2Ugc29tZXRpbWUgaW4KK3RoZSBmdXR1cmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWU4NWNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS42LnR4dApAQCAtMCwwICsxLDEwIEBACitHSVQgdjEuNS41LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgMS41LjUuNQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBSZW1vdmVkIHN1cHBvcnQgZm9yIGFuIG9ic29sZXRlIGdpdHdlYiByZXF1ZXN0IFVSSSwgd2hvc2UKKyAgIGltcGxlbWVudGF0aW9uIHJhbiAiZ2l0IGRpZmYiIFBvcmNlbGFpbiwgaW5zdGVhZCBvZiB1c2luZyBwbHVtYmluZywKKyAgIHdoaWNoIHdvdWxkIGhhdmUgcnVuIGFuIGV4dGVybmFsIGRpZmYgY29tbWFuZCBzcGVjaWZpZWQgaW4gdGhlCisgICByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gYXMgdGhlIGdpdHdlYiB1c2VyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTMyMjEyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS50eHQKQEAgLTAsMCArMSwyMDcgQEAKK0dJVCB2MS41LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNS40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworICogQ29tZXMgd2l0aCBnaXQtZ3VpIDAuMTAuMQorCisocG9ydGFiaWxpdHkpCisKKyAqIFdlIHNob3VsZG4ndCBhc2sgZm9yIEJTRCBncm91cCBvd25lcnNoaXAgc2VtYW50aWNzIGJ5IHNldHRpbmcgZytzIGJpdAorICAgb24gZGlyZWN0b3JpZXMgb24gb2xkZXIgQlNEIHN5c3RlbXMgdGhhdCByZWZ1c2VzIGNobW9kKCkgYnkgbm9uIHJvb3QKKyAgIHVzZXJzLiAgQlNEIHNlbWFudGljcyBpcyB0aGUgZGVmYXVsdCB0aGVyZSBhbnl3YXkuCisKKyAqIEJ1bmNoIG9mIHBvcnRhYmlsaXR5IGltcHJvdmVtZW50IHBhdGNoZXMgY29taW5nIGZyb20gYW4gZWZmb3J0IHRvIHBvcnQKKyAgIHRvIFNvbGFyaXMgaGFzIGJlZW4gYXBwbGllZC4KKworKHBlcmZvcm1hbmNlKQorCisgKiBPbiBwbGF0Zm9ybXMgd2l0aCBzdWJvcHRpbWFsIHFzb3J0KDMpIGltcGxlbWVudGF0aW9uLCB0aGVyZQorICAgaXMgYW4gb3B0aW9uIHRvIHVzZSBtb3JlIHJlYXNvbmFibGUgc3Vic3RpdHV0ZSB3ZSBzaGlwIHdpdGgKKyAgIG91ciBzb2Z0d2FyZS4KKworICogTmV3IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgInBhY2sucGFja3NpemVsaW1pdCIgY2FuIGJlIHVzZWQKKyAgIGluIHBsYWNlIG9mIGNvbW1hbmQgbGluZSBvcHRpb24gLS1tYXgtcGFjay1zaXplLgorCisgKiAiZ2l0IGZldGNoIiBvdmVyIHRoZSBuYXRpdmUgZ2l0IHByb3RvY29sIHVzZWQgdG8gbWFrZSBhCisgICBjb25uZWN0aW9uIHRvIGZpbmQgb3V0IHRoZSBzZXQgb2YgY3VycmVudCByZW1vdGUgcmVmcyBhbmQKKyAgIGFub3RoZXIgdG8gYWN0dWFsbHkgZG93bmxvYWQgdGhlIHBhY2sgZGF0YS4gIFdlIG5vdyB1c2Ugb25seQorICAgb25lIGNvbm5lY3Rpb24gZm9yIHRoZXNlIHRhc2tzLgorCisgKiAiZ2l0IGNvbW1pdCIgZG9lcyBub3QgcnVuIGxzdGF0KDIpIG1vcmUgdGhhbiBuZWNlc3NhcnkKKyAgIGFueW1vcmUuCisKKyh1c2FiaWxpdHksIGJlbGxzIGFuZCB3aGlzdGxlcykKKworICogQmFzaCBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYikgYXJlIGF3YXJlIG9mIG1vcmUgY29tbWFuZHMgYW5kCisgICBvcHRpb25zLgorCisgKiBZb3UgY2FuIGJlIHdhcm5lZCB3aGVuIGNvcmUuYXV0b2NybGYgY29udmVyc2lvbiBpcyBhcHBsaWVkIGluCisgICBzdWNoIGEgd2F5IHRoYXQgcmVzdWx0cyBpbiBhbiBpcnJldmVyc2libGUgY29udmVyc2lvbi4KKworICogQSBjYXRjaC1hbGwgImNvbG9yLnVpIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvCisgICBlbmFibGUgY29sb3Jpbmcgb2YgYWxsIGNvbG9yLWNhcGFibGUgY29tbWFuZHMsIGluc3RlYWQgb2YKKyAgIGluZGl2aWR1YWwgb25lcyBzdWNoIGFzICJjb2xvci5zdGF0dXMiIGFuZCAiY29sb3IuYnJhbmNoIi4KKworICogVGhlIGNvbW1hbmRzIHJlZnVzZWQgdG8gdGFrZSBhYnNvbHV0ZSBwYXRobmFtZXMgd2hlcmUgdGhleQorICAgcmVxdWlyZSBwYXRobmFtZXMgcmVsYXRpdmUgdG8gdGhlIHdvcmsgdHJlZSBvciB0aGUgY3VycmVudAorICAgc3ViZGlyZWN0b3J5LiAgVGhleSBub3cgY2FuIHRha2UgYWJzb2x1dGUgcGF0aG5hbWVzIGluIHN1Y2ggYQorICAgY2FzZSBhcyBsb25nIGFzIHRoZSBwYXRobmFtZXMgZG8gbm90IHJlZmVyIG91dHNpZGUgb2YgdGhlCisgICB3b3JrIHRyZWUuICBFLmcuICJnaXQgYWRkICQocHdkKS9mb28iIG5vdyB3b3Jrcy4KKworICogRXJyb3IgbWVzc2FnZXMgdXNlZCB0byBiZSBzZW50IHRvIHN0ZGVyciwgb25seSB0byBnZXQgaGlkZGVuLAorICAgd2hlbiAkUEFHRVIgd2FzIGluIHVzZS4gIFRoZXkgbm93IGFyZSBzZW50IHRvIHN0ZG91dCBhbG9uZworICAgd2l0aCB0aGUgY29tbWFuZCBvdXRwdXQgdG8gYmUgc2hvd24gaW4gdGhlICRQQUdFUi4KKworICogQSBwYXR0ZXJuICJmb28vIiBpbiAuZ2l0aWdub3JlIGZpbGUgbm93IG1hdGNoZXMgYSBkaXJlY3RvcnkKKyAgICJmb28iLiAgUGF0dGVybiAiZm9vIiBhbHNvIG1hdGNoZXMgYXMgYmVmb3JlLgorCisgKiBiYXNoIGNvbXBsZXRpb24ncyBwcm9tcHQgaGVscGVyIGZ1bmN0aW9uIGNhbiB0YWxrIGFib3V0CisgICBvcGVyYXRpb24gaW4tcHJvZ3Jlc3MgKGUuZy4gbWVyZ2UsIHJlYmFzZSwgZXRjLikuCisKKyAqIENvbmZpZ3VyYXRpb24gdmFyaWFibGVzICJ1cmwuPHVzZXRoaXM+Lmluc3RlYWRvZiA9IDxvdGhlcnVybD4iIGNhbiBiZQorICAgdXNlZCB0byB0ZWxsICJnaXQtZmV0Y2giIGFuZCAiZ2l0LXB1c2giIHRvIHVzZSBkaWZmZXJlbnQgVVJMIHRoYW4gd2hhdAorICAgaXMgZ2l2ZW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCisgKiAiZ2l0IGFkZCAtaSIgYmVoYXZlcyBiZXR0ZXIgZXZlbiBiZWZvcmUgeW91IG1ha2UgYW4gaW5pdGlhbCBjb21taXQuCisKKyAqICJnaXQgYW0iIHJlZnVzZWQgdG8gcnVuIGZyb20gYSBzdWJkaXJlY3Rvcnkgd2l0aG91dCBhIGdvb2QgcmVhc29uLgorCisgKiBBZnRlciAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXgiIGZpeGVzIHdoaXRlc3BhY2UgZXJyb3JzIGluIGEgcGF0Y2gsCisgICBhIGxpbmUgYmVmb3JlIHRoZSBmaXggY2FuIGFwcGVhciBhcyBhIGNvbnRleHQgb3IgcHJlaW1hZ2UgbGluZSBpbiBhCisgICBsYXRlciBwYXRjaCwgY2F1c2luZyB0aGUgcGF0Y2ggbm90IHRvIGFwcGx5LiAgVGhlIGNvbW1hbmQgbm93IGtub3dzIHRvCisgICBzZWUgdGhyb3VnaCB3aGl0ZXNwYWNlIGZpeGVzIGRvbmUgdG8gY29udGV4dCBsaW5lcyB0byBzdWNjZXNzZnVsbHkKKyAgIGFwcGx5IHN1Y2ggYSBwYXRjaCBzZXJpZXMuCisKKyAqICJnaXQgYnJhbmNoIiAoYW5kICJnaXQgY2hlY2tvdXQgLWIiKSB0byBicmFuY2ggZnJvbSBhIGxvY2FsIGJyYW5jaCBjYW4KKyAgIG9wdGlvbmFsbHkgc2V0ICJicmFuY2guPG5hbWU+Lm1lcmdlIiB0byBtYXJrIHRoZSBuZXcgYnJhbmNoIHRvIGJ1aWxkIG9uCisgICB0aGUgb3RoZXIgbG9jYWwgYnJhbmNoLCB3aGVuICJicmFuY2guYXV0b3NldHVwbWVyZ2UiIGlzIHNldCB0bworICAgImFsd2F5cyIsIG9yIHdoZW4gcGFzc2luZyB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiAiLS10cmFjayIgKHRoaXMgb3B0aW9uCisgICB3YXMgaWdub3JlZCB3aGVuIGJyYW5jaGluZyBmcm9tIGxvY2FsIGJyYW5jaGVzKS4gIEJ5IGRlZmF1bHQsIHRoaXMgZG9lcworICAgbm90IGhhcHBlbiB3aGVuIGJyYW5jaGluZyBmcm9tIGEgbG9jYWwgYnJhbmNoLgorCisgKiAiZ2l0IGNoZWNrb3V0IiB0byBzd2l0Y2ggdG8gYSBicmFuY2ggdGhhdCBoYXMgImJyYW5jaC48bmFtZT4ubWVyZ2UiIHNldAorICAgKGkuZS4gbWFya2VkIHRvIGJ1aWxkIG9uIGFub3RoZXIgYnJhbmNoKSByZXBvcnRzIGhvdyBtdWNoIHRoZSBicmFuY2gKKyAgIGFuZCB0aGUgb3RoZXIgYnJhbmNoIGRpdmVyZ2VkLgorCisgKiBXaGVuICJnaXQgY2hlY2tvdXQiIGhhcyB0byB1cGRhdGUgYSBsb3Qgb2YgcGF0aHMsIGl0IHVzZWQgdG8gYmUgc2lsZW50CisgICBmb3IgNCBzZWNvbmRzIGJlZm9yZSBpdCBzaG93ZWQgYW55IHByb2dyZXNzIHJlcG9ydC4gIEl0IGlzIG5vdyBhIGJpdAorICAgbW9yZSBpbXBhdGllbnQgYW5kIHN0YXJ0cyBzaG93aW5nIHByb2dyZXNzIHJlcG9ydCBlYXJseS4KKworICogImdpdCBjb21taXQiIGxlYXJuZWQgYSBuZXcgaG9vayAicHJlcGFyZS1jb21taXQtbXNnIiB0aGF0IGNhbgorICAgaW5zcGVjdCB3aGF0IGlzIGdvaW5nIHRvIGJlIGNvbW1pdHRlZCBhbmQgcHJlcGFyZSB0aGUgY29tbWl0CisgICBsb2cgbWVzc2FnZSB0ZW1wbGF0ZSB0byBiZSBlZGl0ZWQuCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBjYW4gbm93IHRha2UgbW9yZSB0aGFuIG9uZSAtTSBvcHRpb25zLgorCisgKiAiZ2l0IGRlc2NyaWJlIiBsZWFybmVkIHRvIGxpbWl0IHRoZSB0YWdzIHRvIGJlIHVzZWQgZm9yCisgICBuYW1pbmcgd2l0aCAtLW1hdGNoIG9wdGlvbi4KKworICogImdpdCBkZXNjcmliZSAtLWNvbnRhaW5zIiBub3cgYmFyZnMgd2hlbiB0aGUgbmFtZWQgY29tbWl0CisgICBjYW5ub3QgYmUgZGVzY3JpYmVkLgorCisgKiAiZ2l0IGRlc2NyaWJlIC0tZXhhY3QtbWF0Y2giIGRlc2NyaWJlcyBvbmx5IGNvbW1pdHMgdGhhdCBhcmUgdGFnZ2VkLgorCisgKiAiZ2l0IGRlc2NyaWJlIC0tbG9uZyIgZGVzY3JpYmVzIGEgdGFnZ2VkIGNvbW1pdCBhcyAkdGFnLTAtJHNoYTEsCisgICBpbnN0ZWFkIG9mIGp1c3Qgc2hvd2luZyB0aGUgZXhhY3QgdGFnbmFtZS4KKworICogImdpdCBkZXNjcmliZSIgd2FybnMgd2hlbiB1c2luZyBhIHRhZyB3aG9zZSBuYW1lIGFuZCBwYXRoIGNvbnRyYWRpY3QKKyAgIHdpdGggZWFjaCBvdGhlci4KKworICogImdpdCBkaWZmIiBsZWFybmVkICItLXJlbGF0aXZlIiBvcHRpb24gdG8gbGltaXQgYW5kIG91dHB1dCBwYXRocworICAgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoZW4gd29ya2luZyBpbiBhIHN1YmRpcmVjdG9yeS4KKworICogImdpdCBkaWZmIiBsZWFybmVkICItLWRpcnN0YXQiIG9wdGlvbiB0byBzaG93IGJpcmRzLWV5ZS1zdW1tYXJ5IG9mCisgICBjaGFuZ2VzIG1vcmUgY29uY2lzZWx5IHRoYW4gIi0tZGlmZnN0YXQiLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCAtLWNvdmVyLWxldHRlciBvcHRpb24gdG8gZ2VuZXJhdGUgYSBjb3ZlcgorICAgbGV0dGVyIHRlbXBsYXRlLgorCisgKiAiZ2l0IGdjIiBsZWFybmVkIC0tcXVpZXQgb3B0aW9uLgorCisgKiAiZ2l0IGdjIiBub3cgYXV0b21hdGljYWxseSBwcnVuZXMgdW5yZWFjaGFibGUgb2JqZWN0cyB0aGF0IGFyZSB0d28KKyAgIHdlZWtzIG9sZCBvciBvbGRlci4KKworICogImdpdCBnYyAtLWF1dG8iIGNhbiBiZSBkaXNhYmxlZCBtb3JlIGVhc2lseSBieSBqdXN0IHNldHRpbmcgZ2MuYXV0bworICAgdG8gemVyby4gIEl0IGFsc28gdG9sZXJhdGVzIG1vcmUgcGFja2ZpbGVzIGJ5IGRlZmF1bHQuCisKKyAqICJnaXQgZ3JlcCIgbm93IGtub3dzICItLW5hbWUtb25seSIgaXMgYSBzeW5vbnltIGZvciB0aGUgIi1sIiBvcHRpb24uCisKKyAqICJnaXQgaGVscCA8YWxpYXM+IiBub3cgcmVwb3J0cyAiJ2dpdCA8YWxpYXM+JyBpcyBhbGlhcyB0byA8d2hhdD4iLAorICAgaW5zdGVhZCBvZiBzYXlpbmcgIk5vIG1hbnVhbCBlbnRyeSBmb3IgZ2l0LTxhbGlhcz4iLgorCisgKiAiZ2l0IGhlbHAiIGNhbiB1c2UgZGlmZmVyZW50IGJhY2tlbmRzIHRvIHNob3cgbWFudWFsIHBhZ2VzIGFuZCB0aGlzIGNhbgorICAgYmUgY29uZmlndXJlZCB1c2luZyAibWFuLnZpZXdlciIgY29uZmlndXJhdGlvbi4KKworICogImdpdGsiIGRvZXMgbm90IHJlc3RvcmUgd2luZG93IHBvc2l0aW9uIGZyb20gJEhPTUUvLmdpdGsgYW55bW9yZSAoaXQKKyAgIHN0aWxsIHJlc3RvcmVzIHRoZSBzaXplKS4KKworICogImdpdCBsb2cgLS1ncmVwPTx3aGF0PiIgbGVhcm5lZCAiLS1maXhlZC1zdHJpbmdzIiBvcHRpb24gdG8gbG9vayBmb3IKKyAgIDx3aGF0PiB3aXRob3V0IHRyZWF0aW5nIGl0IGFzIGEgcmVndWxhciBleHByZXNzaW9uLgorCisgKiAiZ2l0IGd1aSIgbGVhcm5lZCBhbiBhdXRvLXNwZWxsIGNoZWNraW5nLgorCisgKiAiZ2l0IHB1c2ggPHNvbWV3aGVyZT4gSEVBRCIgYW5kICJnaXQgcHVzaCA8c29tZXdoZXJlPiArSEVBRCIgd29ya3MgYXMKKyAgIGV4cGVjdGVkOyB0aGV5IHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIChhbmQgb25seSB0aGUgY3VycmVudCBicmFuY2gpLgorICAgSW4gYWRkaXRpb24sIEhFQUQgY2FuIGJlIHdyaXR0ZW4gYXMgdGhlIHZhbHVlIG9mICJyZW1vdGUuPHRoZXJlPi5wdXNoIgorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworICogV2hlbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAicGFjay50aHJlYWRzIiBpcyBzZXQgdG8gMCwgImdpdAorICAgcmVwYWNrIiBhdXRvIGRldGVjdHMgdGhlIG51bWJlciBvZiBDUFVzIGFuZCB1c2VzIHRoYXQgbWFueSB0aHJlYWRzLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGxlYXJuZWQgdG8gcHJvbXB0IGZvciBwYXNzd29yZHMKKyAgIGludGVyYWN0aXZlbHkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCBhbiBlYXNpZXIgd2F5IHRvIHN1cHByZXNzIENDCisgICByZWNpcGllbnRzLgorCisgKiAiZ2l0IHN0YXNoIiBsZWFybmVkICJwb3AiIGNvbW1hbmQsIHRoYXQgYXBwbGllcyB0aGUgbGF0ZXN0IHN0YXNoIGFuZAorICAgcmVtb3ZlcyBpdCBmcm9tIHRoZSBzdGFzaCwgYW5kICJkcm9wIiBjb21tYW5kIHRvIGRpc2NhcmQgdGhlIG5hbWVkCisgICBzdGFzaCBlbnRyeS4KKworICogImdpdCBzdWJtb2R1bGUiIGxlYXJuZWQgYSBuZXcgc3ViY29tbWFuZCAic3VtbWFyeSIgdG8gc2hvdyB0aGUKKyAgIHN5bW1ldHJpYyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIEhFQUQgdmVyc2lvbiBhbmQgdGhlIHdvcmsgdHJlZSB2ZXJzaW9uCisgICBvZiB0aGUgc3VibW9kdWxlIGNvbW1pdHMuCisKKyAqIFZhcmlvdXMgImdpdCBjdnNpbXBvcnQiLCAiZ2l0IGN2c2V4cG9ydGNvbW1pdCIsICJnaXQgY3Zzc2VydmVyIiwKKyAgICJnaXQgc3ZuIiBhbmQgImdpdCBwNCIgaW1wcm92ZW1lbnRzLgorCisoaW50ZXJuYWwpCisKKyAqIER1cGxpY2F0ZWQgY29kZSBiZXR3ZWVuIGdpdC1oZWxwIGFuZCBnaXQtaW5zdGF3ZWIgdGhhdAorICAgbGF1bmNoZXMgdXNlcidzIHByZWZlcnJlZCBicm93c2VyIGhhcyBiZWVuIHJlZmFjdG9yZWQuCisKKyAqIEl0IGlzIG5vdyBlYXNpZXIgdG8gd3JpdGUgdGVzdCBzY3JpcHRzIHRoYXQgcmVjb3JkcyBrbm93bgorICAgYnJlYWthZ2VzLgorCisgKiAiZ2l0IGNoZWNrb3V0IiBpcyByZXdyaXR0ZW4gaW4gQy4KKworICogImdpdCByZW1vdGUiIGlzIHJld3JpdHRlbiBpbiBDLgorCisgKiBUd28gY29uZmxpY3QgaHVua3MgdGhhdCBhcmUgc2VwYXJhdGVkIGJ5IGEgdmVyeSBzaG9ydCBzcGFuIG9mIGNvbW1vbgorICAgbGluZXMgYXJlIG5vdyBjb2FsZXNjZWQgaW50byBvbmUgbGFyZ2VyIGh1bmssIHRvIG1ha2UgdGhlIHJlc3VsdCBlYXNpZXIKKyAgIHRvIHJlYWQuCisKKyAqIFJ1bi1jb21tYW5kIEFQSSdzIHVzZSBvZiBmaWxlIGRlc2NyaXB0b3JzIGlzIGRvY3VtZW50ZWQgY2xlYXJlciBhbmQKKyAgIGlzIG1vcmUgY29uc2lzdGVudCBub3cuCisKKyAqIGRpZmYgb3V0cHV0IGNhbiBiZSBzZW50IHRvIEZJTEUgKiB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHN0ZG91dC4gIFRoaXMKKyAgIHdpbGwgaGVscCByZWltcGxlbWVudGluZyBtb3JlIHRoaW5ncyBpbiBDLgorCitGaXhlcyBzaW5jZSB2MS41LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjUuNCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluCit0aGlzIHJlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKKyAqICJnaXQtaHR0cC1wdXNoIiBkaWQgbm90IGFsbG93IGRlbGV0aW9uIG9mIHJlbW90ZSByZWYgd2l0aCB0aGUgdXN1YWwKKyAgICJwdXNoIDxyZW1vdGU+IDo8YnJhbmNoPiIgc3ludGF4LgorCisgKiAiZ2l0LXJlYmFzZSAtLWFib3J0IiBkaWQgbm90IGdvIGJhY2sgdG8gdGhlIHJpZ2h0IGxvY2F0aW9uIGlmCisgICAiZ2l0LXJlc2V0IiB3YXMgcnVuIGR1cmluZyB0aGUgImdpdC1yZWJhc2UiIHNlc3Npb24uCisKKyAqICJnaXQgaW1hcC1zZW5kIiB3aXRob3V0IHNldHRpbmcgaW1hcC5ob3N0IGRpZCBub3QgZXJyb3Igb3V0IGJ1dAorICAgc2VnZmF1bHRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NjRiMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjEudHh0CkBAIC0wLDAgKzEsMjggQEAKK0dJVCB2MS41LjYuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjYKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisqIExhc3QgbWludXRlIGNoYW5nZSBicm9rZSBsb29zZSBvYmplY3QgY3JlYXRpb24gb24gQUlYLgorCisqIChwZXJmb3JtYW5jZSBmaXgpIFdlIHVzZWQgdG8gbWFrZSAkR0lUX0RJUiBhYnNvbHV0ZSBwYXRoIGVhcmx5IGluIHRoZQorICBwcm9ncmFtcyBidXQga2VlcGluZyBpdCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkgaW50ZXJuYWxseQorICBnaXZlcyAxLTMgcGVyLWNlbnQgcGVyZm9ybWFuY2UgYm9vc3QuCisKKyogYmFzaCBjb21wbGV0aW9uIGtub3dzIHRoZSBuZXcgLS1ncmFwaCBvcHRpb24gdG8gZ2l0LWxvZyBmYW1pbHkuCisKKworKiBnaXQtZGlmZiAtYy8tLWNjIHNob3dlZCB1bm5lY2Vzc2FyeSAiZGVsZXRpb24iIGxpbmVzIGF0IHRoZSBjb250ZXh0CisgIGJvdW5kYXJ5LgorCisqIGdpdC1mb3ItZWFjaC1yZWYgaWdub3JlZCAlKG9iamVjdCkgYW5kICUodHlwZSkgcmVxdWVzdHMgZm9yIHRhZworICBvYmplY3RzLgorCisqIGdpdC1tZXJnZSB1c2FnZSBoYWQgYSB0eXBvLgorCisqIFJlYnVpbGRpbmcgb2YgZ2l0LXN2biBtZXRhaW5mbyBkYXRhYmFzZSBkaWQgbm90IHRha2UgcmV3cml0ZVJvb3QKKyAgb3B0aW9uIGludG8gYWNjb3VudC4KKworKiBSdW5uaW5nICJnaXQtcmViYXNlIC0tY29udGludWUvLS1za2lwLy0tYWJvcnQiIGJlZm9yZSBzdGFydGluZyBhCisgIHJlYmFzZSBnYXZlIG5vbnNlbnNlIGVycm9yIG1lc3NhZ2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwMmE4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuMi50eHQKQEAgLTAsMCArMSw0MCBAQAorR0lUIHYxLjUuNi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0Z1dHVyZXByb29mCistLS0tLS0tLS0tLQorCisgKiAiZ2l0LXNoZWxsIiBhY2NlcHRzIHJlcXVlc3RzIHdpdGhvdXQgYSBkYXNoIGJldHdlZW4gImdpdCIgYW5kCisgICBzdWJjb21tYW5kIG5hbWUgKGUuZy4gImdpdCB1cGxvYWQtcGFjayIpIHdoaWNoIHRoZSBuZXdlciBjbGllbnQgd2lsbAorICAgc3RhcnQgdG8gbWFrZSBzb21ldGltZSBpbiB0aGUgZnV0dXJlLgorCitGaXhlcyBzaW5jZSB2MS41LjYuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGNsb25lIiBmcm9tIGEgcmVtb3RlIHRoYXQgaXMgbmFtZWQgd2l0aCB1cmwuaW5zdGVhZE9mIHNldHRpbmcgaW4KKyAgJEhPTUUvLmdpdGNvbmZpZyBkaWQgbm90IHdvcmsgd2VsbC4KKworKiAiZ2l0IGRlc2NyaWJlIC0tbG9uZyAtLXRhZ3MiIHNlZ2ZhdWx0ZWQgd2hlbiB0aGUgZGVzY3JpYmVkIHJldmlzaW9uIHdhcworICB0YWdnZWQgd2l0aCBhIGxpZ2h0d2VpZ2h0IHRhZy4KKworKiAiZ2l0IGRpZmYgLS1jaGVjayIgZGlkIG5vdCByZXBvcnQgdGhlIHJlc3VsdCB2aWEgaXRzIGV4aXQgc3RhdHVzCisgIHJlbGlhYmx5LgorCisqIFdoZW4gcmVtb3RlIHNpZGUgdXNlZCB0byBoYXZlIGJyYW5jaCAnZm9vJyBhbmQgZ2l0LWZldGNoIGZpbmRzIHRoYXQgbm93CisgIGl0IGhhcyBicmFuY2ggJ2Zvby9iYXInLCBpdCByZWZ1c2VzIHRvIGxvc2UgdGhlIGV4aXN0aW5nIHJlbW90ZSB0cmFja2luZworICBicmFuY2ggYW5kIGl0cyByZWZsb2cuICBUaGUgZXJyb3IgbWVzc2FnZSBoYXMgYmVlbiBpbXByb3ZlZCB0byBzdWdnZXN0CisgIHBydW5pbmcgdGhlIHJlbW90ZSBpZiB0aGUgdXNlciB3YW50cyB0byBwcm9jZWVkIGFuZCBnZXQgdGhlIGxhdGVzdCBzZXQKKyAgb2YgYnJhbmNoZXMgZnJvbSB0aGUgcmVtb3RlLCBpbmNsdWRpbmcgc3VjaCAnZm9vL2JhcicuCisKKyogImdpdCByZXNldCBmaWxlIiBzaG91bGQgbWVhbiB0aGUgc2FtZSB0aGluZyBhcyAiZ2l0IHJlc2V0IEhFQUQgZmlsZSIsCisgIGJ1dCB3ZSByZXF1aXJlZCBkaXNhbWJpZ3VhdGluZyAtLSBldmVuIHdoZW4gImZpbGUiIGlzIG5vdCBhbWJpZ3VvdXMuCisKKyogImdpdCBzaG93IiBzZWdmYXVsdGVkIHdoZW4gYW4gYW5ub3RhdGVkIHRhZyB0aGF0IHBvaW50cyBhdCBhbm90aGVyCisgIGFubm90YXRlZCB0YWcgd2FzIGdpdmVuIHRvIGl0LgorCisqIE9wdGltaXphdGlvbiBmb3IgYSBsYXJnZSBpbXBvcnQgdmlhICJnaXQtc3ZuIiBpbnRyb2R1Y2VkIGluIHYxLjUuNiBoYWQgYQorICBzZXJpb3VzIG1lbW9yeSBhbmQgdGVtcG9yYXJ5IGZpbGUgbGVhaywgd2hpY2ggbWFkZSBpdCB1bnVzYWJsZSBmb3IKKyAgbW9kZXJhdGVseSBsYXJnZSBpbXBvcnQuCisKKyogImdpdC1zdm4iIG1hbmdsZWQgcmVtb3RlIG5pY2tuYW1lIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQorICB1bm5lY2Vzc2FyaWx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxZGQzNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuMy50eHQKQEAgLTAsMCArMSw1MiBAQAorR0lUIHYxLjUuNi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNi4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFNldHRpbmcgY29yZS5zaGFyZWRyZXBvc2l0b3J5IHRvIHRyYWRpdGlvbmFsICJ0cnVlIiB2YWx1ZSB3YXMgc3VwcG9zZWQgdG8gbWFrZQorICB0aGUgcmVwb3NpdG9yeSBncm91cCB3cml0YWJsZSBidXQgc2hvdWxkIG5vdCBhZmZlY3QgcGVybWlzc2lvbiBmb3Igb3RoZXJzLgorICBIb3dldmVyLCBzaW5jZSAxLjUuNiwgaXQgd2FzIGJyb2tlbiB0byBkcm9wIHBlcm1pc3Npb24gZm9yIG90aGVycyB3aGVuIHVtYXNrIGlzCisgIDAyMiwgbWFraW5nIHRoZSByZXBvc2l0b3J5IHVucmVhZGFibGUgYnkgb3RoZXJzLgorCisqIFNldHRpbmcgR0lUX1RSQUNFIHdpbGwgcmVwb3J0IHNwYXduaW5nIG9mIGV4dGVybmFsIHByb2Nlc3MgdmlhIHJ1bl9jb21tYW5kKCkuCisKKyogVXNpbmcgYW4gb2JqZWN0IHdpdGggdmVyeSBkZWVwIGRlbHRhIGNoYWluIHBpbm5lZCBtZW1vcnkgbmVlZGVkIGZvciBleHRyYWN0aW5nCisgIGludGVybWVkaWF0ZSBiYXNlIG9iamVjdHMgdW5uZWNlc3NhcmlseSBsb25nLCBsZWFkaW5nIHRvIGV4Y2VzcyBtZW1vcnkgdXNhZ2UuCisKKyogQmFzaCBjb21wbGV0aW9uIHNjcmlwdCBkaWQgbm90IG5vdGljZSAnLS0nIG1hcmtlciBvbiB0aGUgY29tbWFuZAorICBsaW5lIGFuZCB0cmllZCB0aGUgcmVsYXRpdmVseSBzbG93ICJyZWYgY29tcGxldGlvbiIgZXZlbiB3aGVuCisgIGNvbXBsZXRpbmcgYXJndW1lbnRzIGFmdGVyIG9uZS4KKworKiBSZWdpc3RlcmluZyBhIG5vbi1lbXB0eSBibG9iIHJhY2lseSBhbmQgdGhlbiB0cnVuY2F0aW5nIHRoZSB3b3JraW5nCisgIHRyZWUgZmlsZSBmb3IgaXQgY29uZnVzZWQgInJhY3ktZ2l0IGF2b2lkYW5jZSIgbG9naWMgaW50byB0aGlua2luZworICB0aGF0IHRoZSBwYXRoIGlzIG5vdyB1bmNoYW5nZWQuCisKKyogVGhlIHNlY3Rpb24gdGhhdCBkZXNjcmliZXMgYXR0cmlidXRlcyByZWxhdGVkIHRvIGdpdC1hcmNoaXZlIHdlcmUgcGxhY2VkCisgIGluIGEgd3JvbmcgcGxhY2UgaW4gdGhlIGdpdGF0dHJpYnV0ZXMoNSkgbWFudWFsIHBhZ2UuCisKKyogImdpdCBhbSIgd2FzIG5vdCBoZWxwZnVsIHRvIHRoZSB1c2VycyB3aGVuIGl0IGRldGVjdGVkIHRoYXQgdGhlIGNvbW1pdHRlcgorICBpbmZvcm1hdGlvbiBpcyBub3Qgc2V0IHVwIHByb3Blcmx5IHlldC4KKworKiAiZ2l0IGNsb25lIiBoYWQgYSBsZWZ0b3ZlciBkZWJ1Z2dpbmcgZnByaW50ZigpLgorCisqICJnaXQgY2xvbmUgLXEiIHdhcyBub3QgcXVpZXQgZW5vdWdoIGFzIGl0IHVzZWQgdG8gYW5kIGdhdmUgb2JqZWN0IGNvdW50CisgIGFuZCBwcm9ncmVzcyByZXBvcnRzLgorCisqICJnaXQgY2xvbmUiIG1hcmtlZCBkb3dubG9hZGVkIHBhY2tmaWxlIHdpdGggLmtlZXA7IHRoaXMgY291bGQgYmUgYQorICBnb29kIHRoaW5nIGlmIHRoZSByZW1vdGUgc2lkZSBpcyB3ZWxsIHBhY2tlZCBidXQgb3RoZXJ3aXNlIG5vdCwKKyAgZXNwZWNpYWxseSBmb3IgYSBwcm9qZWN0IHRoYXQgaXMgbm90IHJlYWxseSBiaWcuCisKKyogImdpdCBkYWVtb24iIHVzZWQgdG8gY2FsbCBzeXNsb2coKSBmcm9tIGEgc2lnbmFsIGhhbmRsZXIsIHdoaWNoCisgIGNvdWxkIHJhaXNlIHNpZ25hbHMgb2YgaXRzIG93biBidXQgZ2VuZXJhbGx5IGlzIG5vdCByZWVudHJhbnQuICBUaGlzCisgIHdhcyBmaXhlZCBieSByZXN0cnVjdHVyaW5nIHRoZSBjb2RlIHRvIHJlcG9ydCBzeXNsb2coKSBhZnRlciB0aGUgaGFuZGxlcgorICByZXR1cm5zLgorCisqIFdoZW4gImdpdCBwdXNoIiB0cmllcyB0byByZW1vdmUgYSByZW1vdGUgcmVmLCBhbmQgY29ycmVzcG9uZGluZworICB0cmFja2luZyByZWYgaXMgbWlzc2luZywgd2UgdXNlZCB0byByZXBvcnQgZXJyb3IgKGkuZS4gZmFpbHVyZSB0bworICByZW1vdmUgc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QpLgorCisqICJnaXQgbWFpbGluZm8iIChoZW5jZSAiZ2l0IGFtIikgZGlkIG5vdCBoYW5kbGUgY29tbWl0IGxvZyBtZXNzYWdlcyBpbiBhCisgIE1JTUUgbXVsdGlwYXJ0IG1haWwgY29ycmVjdGx5LgorCitDb250YWlucyBvdGhlciB2YXJpb3VzIGRvY3VtZW50YXRpb24gZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODk2OGYxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi40LnR4dApAQCAtMCwwICsxLDQ3IEBACitHSVQgdjEuNS42LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS42LjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVmFyaW91cyBjb21tYW5kcyBjb3VsZCBvdmVyZmxvdyBpdHMgaW50ZXJuYWwgYnVmZmVyIG9uIGEgcGxhdGZvcm0KKyAgd2l0aCBzbWFsbCBQQVRIX01BWCB2YWx1ZSBpbiBhIHJlcG9zaXRvcnkgdGhhdCBoYXMgY29udGVudHMgd2l0aAorICBsb25nIHBhdGhuYW1lcy4KKworKiBUaGVyZSB3YXNuJ3QgYSB3YXkgdG8gbWFrZSAtLXByZXR0eT1mb3JtYXQ6JTw+IHNwZWNpZmllcnMgdG8gaG9ub3IKKyAgLm1haWxtYXAgbmFtZSByZXdyaXRpbmcgZm9yIGF1dGhvcnMgYW5kIGNvbW1pdHRlcnMuICBOb3cgeW91IGNhbiB3aXRoCisgICVhTiBhbmQgJWNOLgorCisqIEJhc2ggY29tcGxldGlvbiB3YXN0ZWQgdG9vIG1hbnkgY3ljbGVzOyB0aGlzIGhhcyBiZWVuIG9wdGltaXplZCB0byBiZQorICB1c2FibGUgYWdhaW4uCisKKyogQmFzaCBjb21wbGV0aW9uIGxvc3QgcmVmIHBhcnQgd2hlbiBjb21wbGV0aW5nIHNvbWV0aGluZyBsaWtlICJnaXQgc2hvdworICBwdTpNYWtlZmlsZSIuCisKKyogImdpdC1jdnNzZXJ2ZXIiIGRpZCBub3QgY2xlYW4gdXAgaXRzIHRlbXBvcmFyeSB3b3JraW5nIGFyZWEgYWZ0ZXIgYW5ub3RhdGUKKyAgcmVxdWVzdC4KKworKiAiZ2l0LWRhZW1vbiIgY2FsbGVkIHN5c2xvZygpIGZyb20gaXRzIHNpZ25hbCBoYW5kbGVyLCB3aGljaCB3YXMgYQorICBuby1uby4KKworKiAiZ2l0LWZldGNoIiBpbnRvIGFuIGVtcHR5IHJlcG9zaXRvcnkgdXNlZCB0byByZW1pbmQgdGhhdCB0aGUgZmV0Y2ggd2lsbAorICAgYmUgaHVnZSBieSBzYXlpbmcgIm5vIGNvbW1vbiBjb21taXRzIiwgYnV0IHRoaXMgd2FzIGFuIHVubmVjZXNzYXJ5CisgICBub2lzZTsgaXQgaXMgYWxyZWFkeSBrbm93biBieSB0aGUgdXNlciBhbnl3YXkuCisKKyogImdpdC1odHRwLWZldGNoIiB3b3VsZCBoYXZlIHNlZ2ZhdWx0ZWQgd2hlbiBwYWNrIGlkeCBmaWxlIHJldHJpZXZlZAorICBmcm9tIHRoZSBvdGhlciBzaWRlIHdhcyBjb3JydXB0LgorCisqICJnaXQtaW5kZXgtcGFjayIgdXNlZCB0b28gbXVjaCBtZW1vcnkgd2hlbiBkZWFsaW5nIHdpdGggYSBkZWVwIGRlbHRhIGNoYWluLgorCisqICJnaXQtbWFpbGluZm8iIChoZW5jZSAiZ2l0LWFtIikgZGlkIG5vdCBjb3JyZWN0bHkgaGFuZGxlIGluLWJvZHkgW1BBVENIXQorICBsaW5lIHRvIG92ZXJyaWRlIHRoZSBjb21taXQgdGl0bGUgdGFrZW4gZnJvbSB0aGUgbWFpbCBTdWJqZWN0IGhlYWRlci4KKworKiAiZ2l0LXJlYmFzZSAtaSAtcCIgbG9zdCBwYXJlbnRzIHRoYXQgYXJlIG5vdCBpbnZvbHZlZCBpbiB0aGUgaGlzdG9yeQorICBiZWluZyByZXdyaXR0ZW4uCisKKyogImdpdC1ybSIgbG9zdCB0cmFjayBvZiB3aGVyZSB0aGUgaW5kZXggZmlsZSB3YXMgd2hlbiBHSVRfRElSIHdhcworICBzcGVjaWZpZWQgYXMgYSByZWxhdGl2ZSBwYXRoLgorCisqICJnaXQtcmV2LWxpc3QgLS1xdWlldCIgd2FzIG5vdCBxdWlldCBhcyBhZHZlcnRpc2VkLgorCitDb250YWlucyBvdGhlciB2YXJpb3VzIGRvY3VtZW50YXRpb24gZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2NhMTcyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi41LnR4dApAQCAtMCwwICsxLDI5IEBACitHSVQgdjEuNS42LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS42LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBjdnNpbXBvcnQiIHVzZWQgdG8gc3BpdCBvdXQgIlVOS05PV04gTElORS4uLiIgZGlhZ25vc3RpY3MgdG8gc3Rkb3V0LgorCisqICJnaXQgY29tbWl0IC1GIGZpbGVuYW1lIiBhbmQgImdpdCB0YWcgLUYgZmlsZW5hbWUiIHJ1biBmcm9tIHN1YmRpcmVjdG9yaWVzCisgIGRpZCBub3QgcmVhZCB0aGUgcmlnaHQgZmlsZS4KKworKiAiZ2l0IGluaXQgLS10ZW1wbGF0ZT0iIHdpdGggYmxhbmsgInRlbXBsYXRlIiBwYXJhbWV0ZXIgbGlua2VkIGZpbGVzCisgIHVuZGVyIHJvb3QgZGlyZWN0b3JpZXMgdG8gLmdpdCwgd2hpY2ggd2FzIGEgdG90YWwgbm9uc2Vuc2UuICBJbnN0ZWFkLCBpdAorICBtZWFucyAiSSBkbyBub3Qgd2FudCB0byB1c2UgYW55dGhpbmcgZnJvbSB0aGUgdGVtcGxhdGUgZGlyZWN0b3J5Ii4KKworKiAiZ2l0IGRpZmYtdHJlZSIgYW5kIG90aGVyIGRpZmYgcGx1bWJpbmcgaWdub3JlZCBkaWZmLnJlbmFtZWxpbWl0IGNvbmZpZ3VyYXRpb24KKyAgdmFyaWFibGUgd2hlbiB0aGUgdXNlciBleHBsaWNpdGx5IGFza2VkIGZvciByZW5hbWUgZGV0ZWN0aW9uLgorCisqICJnaXQgbmFtZS1yZXYgLS1uYW1lLW9ubHkiIGRpZCBub3Qgd29yayB3aGVuICItLXN0ZGluIiBvcHRpb24gd2FzIGluIGVmZmVjdC4KKworKiAiZ2l0IHNob3ctYnJhbmNoIiBtaXNoYW5kbGVkIGl0cyA4dGggYnJhbmNoLgorCisqIEFkZGl0aW9uIG9mICJnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLXN1Ym1vZHVsZXMiIHRoYXQgaGFwcGVuZWQgZHVyaW5nCisgIDEuNS42IGN5Y2xlIGJyb2tlICJnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLW1pc3NpbmciLgorCisqICJnaXQgc2VuZC1lbWFpbCIgZGlkIG5vdCBwYXJzZSBjaGFyc2V0IGZyb20gYW4gZXhpc3RpbmcgQ29udGVudC10eXBlOgorICBoZWFkZXIgcHJvcGVybHkuCisKK0NvbnRhaW5zIG90aGVyIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZGEyM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjYudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0dJVCB2MS41LjYuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSAxLjUuNi41CistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFJlbW92ZWQgc3VwcG9ydCBmb3IgYW4gb2Jzb2xldGUgZ2l0d2ViIHJlcXVlc3QgVVJJLCB3aG9zZQorICAgaW1wbGVtZW50YXRpb24gcmFuICJnaXQgZGlmZiIgUG9yY2VsYWluLCBpbnN0ZWFkIG9mIHVzaW5nIHBsdW1iaW5nLAorICAgd2hpY2ggd291bGQgaGF2ZSBydW4gYW4gZXh0ZXJuYWwgZGlmZiBjb21tYW5kIHNwZWNpZmllZCBpbiB0aGUKKyAgIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBhcyB0aGUgZ2l0d2ViIHVzZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNDNkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LnR4dApAQCAtMCwwICsxLDExNSBAQAorR0lUIHYxLjUuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS41LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisqIENvbWVzIHdpdGggdXBkYXRlZCBnaXRrIGFuZCBnaXQtZ3VpLgorCisocG9ydGFiaWxpdHkpCisKKyogZ2l0IHdpbGwgYnVpbGQgb24gQUlYIGJldHRlciB0aGFuIGJlZm9yZSBub3cuCisKKyogY29yZS5pZ25vcmVjYXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gd29yayBiZXR0ZXIgb24KKyAgZmlsZXN5c3RlbXMgdGhhdCBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlLgorCisqICJnaXQgaW5pdCIgbm93IGF1dG9kZXRlY3RzIHRoZSBjYXNlIHNlbnNpdGl2aXR5IG9mIHRoZSBmaWxlc3lzdGVtIGFuZAorICBzZXRzIGNvcmUuaWdub3JlY2FzZSBhY2NvcmRpbmdseS4KKworKiBjcGlvIGlzIG5vIGxvbmdlciB1c2VkOyBuZWl0aGVyICJjdXJsIiBiaW5hcnkgKGxpYmN1cmwgaXMgc3RpbGwgdXNlZCkuCisKKyhkb2N1bWVudGF0aW9uKQorCisqIE1hbnkgZnJlZXN0YW5kaW5nIGRvY3VtZW50YXRpb24gcGFnZXMgaGF2ZSBiZWVuIGNvbnZlcnRlZCBhbmQgbWFkZQorICBhdmFpbGFibGUgdG8gImdpdCBoZWxwIiAoYWthICJtYW4gZ2l0PHNvbWV0aGluZz4iKSBhcyBzZWN0aW9uIDcgb2YKKyAgdGhlIG1hbnVhbCBwYWdlcy4gVGhpcyBtZWFucyBib29rbWFya3MgdG8gc29tZSBIVE1MIGRvY3VtZW50YXRpb24KKyAgZmlsZXMgbWF5IG5lZWQgdG8gYmUgdXBkYXRlZCAoZWcgInR1dG9yaWFsLmh0bWwiIGJlY2FtZQorICAiZ2l0dHV0b3JpYWwuaHRtbCIpLgorCisocGVyZm9ybWFuY2UpCisKKyogImdpdCBjbG9uZSIgd2FzIHJld3JpdHRlbiBpbiBDLiAgVGhpcyB3aWxsIGhvcGVmdWxseSBoZWxwIGNsb25pbmcgYQorICByZXBvc2l0b3J5IHdpdGggaW5zYW5lIG51bWJlciBvZiByZWZzLgorCisqICJnaXQgcmViYXNlIC0tb250byAkdGhlcmUgJGZyb20gJGJyYW5jaCIgdXNlZCB0byBzd2l0Y2ggdG8gdGhlIHRpcCBvZgorICAkYnJhbmNoIG9ubHkgdG8gaW1tZWRpYXRlbHkgcmVzZXQgYmFjayB0byAkZnJvbSwgc211ZGdpbmcgd29yayB0cmVlCisgIGZpbGVzIHVubmVjZXNzYXJpbHkuICBUaGlzIGhhcyBiZWVuIG9wdGltaXplZC4KKworKiBPYmplY3QgY3JlYXRpb24gY29kZXBhdGggaW4gImdpdC1zdm4iIGhhcyBiZWVuIG9wdGltaXplZCBieSBlbmhhbmNpbmcKKyAgcGx1bWJpbmcgY29tbWFuZHMgZ2l0LWNhdC1maWxlIGFuZCBnaXQtaGFzaC1vYmplY3QuCisKKyh1c2FiaWxpdHksIGJlbGxzIGFuZCB3aGlzdGxlcykKKworKiAiZ2l0IGFkZCAtcCIgKGFuZCB0aGUgInBhdGNoIiBzdWJjb21tYW5kIG9mICJnaXQgYWRkIC1pIikgY2FuIGNob29zZSB0bworICBhcHBseSAob3Igbm90IGFwcGx5KSBtb2RlIGNoYW5nZXMgaW5kZXBlbmRlbnRseSBmcm9tIGNvbnRlbnRzIGNoYW5nZXMuCisKKyogImdpdCBiaXNlY3QgaGVscCIgZ2l2ZXMgbG9uZ2VyIGFuZCBtb3JlIGhlbHBmdWwgdXNhZ2UgaW5mb3JtYXRpb24uCisKKyogImdpdCBiaXNlY3QiIGRvZXMgbm90IHVzZSBhIHNwZWNpYWwgYnJhbmNoICJiaXNlY3QiIGFueW1vcmU7IGluc3RlYWQsIGl0CisgIGRvZXMgaXRzIHdvcmsgb24gYSBkZXRhY2hlZCBIRUFELgorCisqICJnaXQgYnJhbmNoIiAoYW5kICJnaXQgY2hlY2tvdXQgLWIiKSBjYW4gYmUgdG9sZCB0byBzZXQgdXAKKyAgYnJhbmNoLjxuYW1lPi5yZWJhc2UgYXV0b21hdGljYWxseSwgc28gdGhhdCBsYXRlciB5b3UgY2FuIHNheSAiZ2l0IHB1bGwiCisgIGFuZCBtYWdpY2FsbHkgY2F1c2UgImdpdCBwdWxsIC0tcmViYXNlIiB0byBoYXBwZW4uCisKKyogImdpdCBicmFuY2ggLS1tZXJnZWQiIGFuZCAiZ2l0IGJyYW5jaCAtLW5vLW1lcmdlZCIgY2FuIGJlIHVzZWQgdG8gbGlzdAorICBicmFuY2hlcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIG1lcmdlZCAob3Igbm90IHlldCBtZXJnZWQpIHRvIHRoZQorICBjdXJyZW50IGJyYW5jaC4KKworKiAiZ2l0IGNoZXJyeS1waWNrIiBhbmQgImdpdCByZXZlcnQiIGNhbiBhZGQgYSBzaWduLW9mZi4KKworKiAiZ2l0IGNvbW1pdCIgbWVudGlvbnMgdGhlIGF1dGhvciBpZGVudGl0eSB3aGVuIHlvdSBhcmUgY29tbWl0dGluZworICBzb21lYm9keSBlbHNlJ3MgY2hhbmdlcy4KKworKiAiZ2l0IGRpZmYvbG9nIC0tZGlyc3RhdCIgb3V0cHV0IGlzIGNvbnNpc3RlbnQgYmV0d2VlbiBiaW5hcnkgYW5kIHRleHR1YWwKKyAgY2hhbmdlcy4KKworKiAiZ2l0IGZpbHRlci1icmFuY2giIHJld3JpdGVzIHNpZ25lZCB0YWdzIGJ5IGRlbW90aW5nIHRoZW0gdG8gYW5ub3RhdGVkLgorCisqICJnaXQgZm9ybWF0LXBhdGNoIC0tbm8tYmluYXJ5IiBjYW4gcHJvZHVjZSBhIHBhdGNoIHRoYXQgbGFjayBiaW5hcnkKKyAgY2hhbmdlcyAoaS5lLiBjYW5ub3QgYmUgdXNlZCB0byBwcm9wYWdhdGUgdGhlIHdob2xlIGNoYW5nZXMpIG1lYW50IG9ubHkKKyAgZm9yIHJldmlld2luZy4KKworKiAiZ2l0IGluaXQgLS1iYXJlIiBpcyBhIHN5bm9ueW0gZm9yICJnaXQgLS1iYXJlIGluaXQiIG5vdy4KKworKiAiZ2l0IGdjIC0tYXV0byIgaG9ub3JzIGEgbmV3IHByZS1hdXRvLWdjIGhvb2sgdG8gdGVtcG9yYXJpbHkgZGlzYWJsZSBpdC4KKworKiAiZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OjxjdXN0b20gZm9ybWF0PiIgZ2l2ZXMgYSBMRiBhZnRlciBlYWNoIGVudHJ5LAorICBpbnN0ZWFkIG9mIGdpdmluZyBhIExGIGJldHdlZW4gZWFjaCBwYWlyIG9mIGVudHJpZXMgd2hpY2ggaXMgaG93CisgICJnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDo8Y3VzdG9tIGZvcm1hdD4iIHdvcmtzLgorCisqICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBsZWFybmVkIHRoZSAiLS1ncmFwaCIgb3B0aW9uIHRvIHNob3cgdGhlIGFuY2VzdHJ5CisgIGdyYXBoIGF0IHRoZSBsZWZ0IG1hcmdpbiBvZiB0aGUgb3V0cHV0LgorCisqICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBjYW4gYmUgdG9sZCB0byB1c2UgZGF0ZSBmb3JtYXQgdGhhdCBpcyBkaWZmZXJlbnQKKyAgZnJvbSB0aGUgZGVmYXVsdCB2aWEgJ2xvZy5kYXRlJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisqICJnaXQgc2VuZC1lbWFpbCIgbm93IGNhbiBzZW5kIG91dCBtZXNzYWdlcyBvdXRzaWRlIGEgZ2l0IHJlcG9zaXRvcnkuCisKKyogImdpdCBzZW5kLWVtYWlsIC0tY29tcG9zZSIgd2FzIG1hZGUgYXdhcmUgb2YgcmZjMjA0NyBxdW90aW5nLgorCisqICJnaXQgc3RhdHVzIiBjYW4gb3B0aW9uYWxseSBpbmNsdWRlIG91dHB1dCBmcm9tICJnaXQgc3VibW9kdWxlCisgIHN1bW1hcnkiLgorCisqICJnaXQgc3ZuIiBsZWFybmVkIC0tYWRkLWF1dGhvci1mcm9tIG9wdGlvbiB0byBwcm9wYWdhdGUgdGhlIGF1dGhvcnNoaXAKKyAgYnkgbXVuZ2luZyB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLgorCisqIG5ldyBvYmplY3QgY3JlYXRpb24gYW5kIGxvb2tpbmcgdXAgaW4gImdpdCBzdm4iIGhhcyBiZWVuIG9wdGltaXplZC4KKworKiAiZ2l0d2ViIiBjYW4gcmVhZCBmcm9tIGEgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlLgorCisoaW50ZXJuYWwpCisKKyogImdpdCB1bnBhY2stb2JqZWN0cyIgYW5kICJnaXQgcmVjZWl2ZS1wYWNrIiBpcyBub3cgbW9yZSBzdHJpY3QgYWJvdXQKKyAgZGV0ZWN0aW5nIGJyZWFrYWdlIGluIHRoZSBvYmplY3RzIHRoZXkgcmVjZWl2ZSBvdmVyIHRoZSB3aXJlLgorCisKK0ZpeGVzIHNpbmNlIHYxLjUuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNS41IG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4KK3RoaXMgcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworQW5kIHRoZXJlIGFyZSB0b28gbnVtZXJvdXMgc21hbGwgZml4ZXMgdG8gb3RoZXJ3aXNlIG5vdGUgaGVyZSA7LSkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZDdhMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjEudHh0CkBAIC0wLDAgKzEsMzYgQEAKK0dJVCB2MS42LjAuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjAKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgZGlmZiAtLWNjIiBkaWQgbm90IGhvbm9yIGNvbnRlbnQgbWFuZ2xpbmcgc3BlY2lmaWVkIGJ5CisgIGdpdGF0dHJpYnV0ZXMgYW5kIGNvcmUuYXV0b2NybGYgd2hlbiByZWFkaW5nIGZyb20gdGhlIHdvcmsgdHJlZS4KKworKiAiZ2l0IGRpZmYgLS1jaGVjayIgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbmV3IHRyYWlsaW5nIGJsYW5rIGxpbmVzIHdoZW4KKyAgd2hpdGVzcGFjZSBjaGVjayB3YXMgaW4gZWZmZWN0LgorCisqICJnaXQgZm9yLWVhY2gtcmVmIiB0cmllZCB0byBkZXJlZmVyZW5jZSBOVUxMIHdoZW4gYXNrZWQgZm9yICclKGJvZHkpIiBvbgorICBhIHRhZyB3aXRoIGEgc2luZ2xlIGluY29tcGxldGUgbGluZSBhcyBpdHMgcGF5bG9hZC4KKworKiAiZ2l0IGZvcm1hdC1wYXRjaCIgcGVla2VkIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIGEgc3RyaW5nIHdoZW4KKyAgImZvcm1hdC5oZWFkZXJzIiB2YXJpYWJsZSBpcyBlbXB0eSAoYSBtaXNjb25maWd1cmF0aW9uKS4KKworKiAiZ2l0IGhlbHAgaGVscCIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseS4KKworKiAiZ2l0IG1haWxpbmZvIiAoaGVuY2UgImdpdCBhbSIpIHdhcyB1bmhhcHB5IHdoZW4gTUlNRSBtdWx0aXBhcnQgbWVzc2FnZQorICBjb250YWluZWQgZ2FyYmFnZSBhZnRlciB0aGUgZmluaXNoaW5nIGJvdW5kYXJ5LgorCisqICJnaXQgbWFpbGluZm8iIGFsc28gd2FzIHVuaGFwcHkgd2hlbiB0aGUgIkZyb206ICIgbGluZSBvbmx5IGhhZCBhIGJhcmUKKyAgZS1tYWlsIGFkZHJlc3MuCisKKyogImdpdCBtZXJnZSIgZGlkIG5vdCByZWZyZXNoIHRoZSBpbmRleCBjb3JyZWN0bHkgd2hlbiBhIG1lcmdlIHJlc3VsdGVkIGluCisgIGEgZmFzdC1mb3J3YXJkLgorCisqICJnaXQgbWVyZ2UiIGRpZCBub3QgcmVzb2x2ZSBhIHRydWx5IHRyaXZpYWwgbWVyZ2VzIHRoYXQgY2FuIGJlIGRvbmUKKyAgd2l0aG91dCBjb250ZW50IGxldmVsIG1lcmdlcy4KKworKiAiZ2l0IHN2biBkY29tbWl0IiB0byBhIHJlcG9zaXRvcnkgd2l0aCBVUkwgdGhhdCBoYXMgZW1iZWRkZWQgdXNlcm5hbWVzCisgIGRpZCBub3Qgd29yayBjb3JyZWN0bHkuCisKK0NvbnRhaW5zIG90aGVyIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOGZiODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjIudHh0CkBAIC0wLDAgKzEsODEgQEAKK0dJVCB2MS42LjAuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjAuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBJbnN0YWxsYXRpb24gb24gcGxhdGZvcm1zIHRoYXQgbmVlZHMgLmV4ZSBzdWZmaXggdG8gZ2l0LSogcHJvZ3JhbXMgd2VyZQorICBicm9rZW4gaW4gMS42LjAuMS4KKworKiBJbnN0YWxsYXRpb24gb24gZmlsZXN5c3RlbXMgd2l0aG91dCBzeW1ib2xpYyBsaW5rcyBzdXBwb3J0IGRpZCBub3QKKyAgd29yayB3ZWxsLgorCisqIEluLXRyZWUgZG9jdW1lbnRhdGlvbnMgYW5kIHRlc3Qgc2NyaXB0cyBub3cgdXNlICJnaXQgZm9vIiBmb3JtIHRvIHNldCBhCisgIGJldHRlciBleGFtcGxlLCBpbnN0ZWFkIG9mIHRoZSAiZ2l0LWZvbyIgZm9ybSAod2hpY2ggaXMgYW4gYWNjZXB0YWJsZQorICBmb3JtIGlmIHlvdSBoYXZlICJQQVRIPSQoZ2l0IC0tZXhlYy1wYXRoKTokUEFUSCIgaW4geW91ciBzY3JpcHQpCisKKyogTWFueSBjb21tYW5kcyBkaWQgbm90IHVzZSB0aGUgY29ycmVjdCB3b3JraW5nIHRyZWUgbG9jYXRpb24gd2hlbiB1c2VkCisgIHdpdGggR0lUX1dPUktfVFJFRSBlbnZpcm9ubWVudCBzZXR0aW5ncy4KKworKiBTb21lIHN5c3RlbXMgbmVlZCB0byB1c2UgY29tcGF0aWJpbGl0eSBmbm1hdGNoIGFuZCByZWdleCBsaWJyYXJpZXMKKyAgaW5kZXBlbmRlbnQgZnJvbSBlYWNoIG90aGVyOyB0aGUgY29tcGF0LyBhcmVhIGhhcyBiZWVuIHJlb3JnYW5pemVkIHRvCisgIGFsbG93IHRoaXMuCisKKworKiAiZ2l0IGFwcGx5IC0tdW5pZGlmZi16ZXJvIiBpbmNvcnJlY3RseSBhcHBsaWVkIGEgLVUwIHBhdGNoIHRoYXQgaW5zZXJ0cworICBhIG5ldyBsaW5lIGJlZm9yZSB0aGUgc2Vjb25kIGxpbmUuCisKKyogImdpdCBibGFtZSAtYyIgZGlkIG5vdCBleGFjdGx5IHdvcmsgbGlrZSAiZ2l0IGFubm90YXRlIiB3aGVuIHJhbmdlCisgIGJvdW5kYXJpZXMgYXJlIGludm9sdmVkLgorCisqICJnaXQgY2hlY2tvdXQgZmlsZSIgd2hlbiBmaWxlIGlzIHN0aWxsIHVubWVyZ2VkIGNoZWNrZWQgb3V0IGNvbnRlbnRzIGZyb20KKyAgYSByYW5kb20gaGlnaCBvcmRlciBzdGFnZSwgd2hpY2ggd2FzIGNvbmZ1c2luZy4KKworKiAiZ2l0IGNsb25lICR0aGVyZSAkaGVyZS8iIHdpdGggZXh0cmEgdHJhaWxpbmcgc2xhc2hlcyBhZnRlciBleHBsaWNpdAorICBsb2NhbCBkaXJlY3RvcnkgbmFtZSAkaGVyZSBkaWQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuCisKKyogImdpdCBkaWZmIiBvbiB0cmFja2VkIGNvbnRlbnRzIHdpdGggQ1JMRiBsaW5lIGVuZGluZ3MgZGlkIG5vdCBkcml2ZSAibGVzcyIKKyAgaW50ZWxsaWdlbnRseSB3aGVuIHNob3dpbmcgYWRkZWQgb3IgcmVtb3ZlZCBsaW5lcy4KKworKiAiZ2l0IGRpZmYgLS1kaXJzdGF0IC1NIiBkaWQgbm90IGFkZCBjaGFuZ2VzIGluIHN1YmRpcmVjdG9yaWVzIHVwCisgIGNvcnJlY3RseSBmb3IgcmVuYW1lZCBwYXRocy4KKworKiAiZ2l0IGRpZmYgLS1jdW11bGF0aXZlIiBkaWQgbm90IGltcGx5ICItLWRpcnN0YXQiLgorCisqICJnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvIiBkaWQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuCisKKyogImdpdCBndWkiIGFsbG93ZWQgdXNlcnMgdG8gZmVlZCBwYXRjaCB3aXRob3V0IGFueSBjb250ZXh0IHRvIGJlIGFwcGxpZWQuCisKKyogImdpdCBndWkiIGJvdGNoZWQgcGFyc2luZyAiZGlmZiIgb3V0cHV0IHdoZW4gYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGggdHdvCisgIGRhc2hlcyBhbmQgYSBzcGFjZSBnZXRzIHJlbW92ZWQgb3IgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGggdHdvIHBsdXNlcworICBhbmQgYSBzcGFjZSBnZXRzIGFkZGVkLgorCisqICJnaXQgZ3VpIiB0cmFuc2xhdGlvbiB1cGRhdGVzIGFuZCBpMThuIGZpeGVzLgorCisqICJnaXQgaW5kZXgtcGFjayIgaXMgbW9yZSBjYXJlZnVsIGFnYWluc3QgZGlzayBjb3JydXB0aW9uIHdoaWxlIGNvbXBsZXRpbmcKKyAgYSB0aGluIHBhY2suCisKKyogImdpdCBsb2cgLWkgLS1ncmVwPXBhdHRlcm4iIGRpZCBub3QgaWdub3JlIGNhc2U7IG5laXRoZXIgImdpdCBsb2cgLUUKKyAgLS1ncmVwPXBhdHRlcm4iIHRyaWdnZXJlZCBleHRlbmRlZCByZWdleHAuCisKKyogImdpdCBsb2cgLS1wcmV0dHk9IiVhZCIgLS1kYXRlPXNob3J0IiBkaWQgbm90IHVzZSBzaG9ydCBmb3JtYXQgd2hlbgorICBzaG93aW5nIHRoZSB0aW1lc3RhbXAuCisKKyogImdpdCBsb2cgLS1hdXRob3I9YXV0aG9yIiBtYXRjaCBpbmNvcnJlY3RseSBtYXRjaGVkIHdpdGggdGhlCisgIHRpbWVzdGFtcCBwYXJ0IG9mICJhdXRob3IgIiBsaW5lIGluIGNvbW1pdCBvYmplY3RzLgorCisqICJnaXQgbG9nIC1GIC0tYXV0aG9yPWF1dGhvciIgZGlkIG5vdCB3b3JrIGF0IGFsbC4KKworKiBCdWlsZCBwcm9jZWR1cmUgZm9yICJnaXQgc2hlbGwiIHRoYXQgdXNlZCBzdHViIHZlcnNpb25zIG9mIHNvbWUKKyAgZnVuY3Rpb25zIGFuZCBnbG9iYWxzIHdhcyBub3QgdW5kZXJzdG9vZCBieSBsaW5rZXJzIG9uIHNvbWUgcGxhdGZvcm1zLgorCisqICJnaXQgc3Rhc2giIHdhcyBmb29sZWQgYnkgYSBzdGF0LWRpcnR5IGJ1dCBvdGhlcndpc2UgdW5tb2RpZmllZCBwYXRocworICBhbmQgcmVmdXNlZCB0byB3b3JrIHVudGlsIHRoZSB1c2VyIHJlZnJlc2hlZCB0aGUgaW5kZXguCisKKyogImdpdCBzdm4iIHdhcyBicm9rZW4gb24gUGVybCBiZWZvcmUgNS44IHdpdGggcmVjZW50IGZpeGVzIHRvIHJlZHVjZQorICB1c2Ugb2YgdGVtcG9yYXJ5IGZpbGVzLgorCisqICJnaXQgdmVyaWZ5LXBhY2sgLXYiIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgd2hlbiBnaXZlbiBtb3JlIHRoYW4gb25lCisgIHBhY2tmaWxlLgorCitBbHNvIGNvbnRhaW5zIG1hbnkgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUwNTc3OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuMy50eHQKQEAgLTAsMCArMSwxMTcgQEAKK0dJVCB2MS42LjAuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjAuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIiBkaWQgbm90IGhvbm9yIGNvcmUuYXV0b2NybGYgd2hpbGUKKyAgLS1mb3JtYXQ9dGFyIGRpZC4KKworKiBDb250aW51aW5nICJnaXQgcmViYXNlIC1pIiB3YXMgdmVyeSBjb25mdXNlZCB3aGVuIHRoZSB1c2VyIGxlZnQgbW9kaWZpZWQKKyAgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSB3aGlsZSByZXNvbHZpbmcgY29uZmxpY3RzLgorCisqIENvbnRpbnVpbmcgImdpdCByZWJhc2UgLWkiIHdhcyBhbHNvIHZlcnkgY29uZnVzZWQgd2hlbiB0aGUgdXNlciBsZWZ0CisgIHNvbWUgc3RhZ2VkIGNoYW5nZXMgaW4gdGhlIGluZGV4IGFmdGVyICJlZGl0Ii4KKworKiAiZ2l0IHJlYmFzZSAtaSIgbm93IGhvbm9ycyB0aGUgcHJlLXJlYmFzZSBob29rLCBqdXN0IGxpa2UgdGhlCisgIG90aGVyIHJlYmFzZSBpbXBsZW1lbnRhdGlvbnMgImdpdCByZWJhc2UiIGFuZCAiZ2l0IHJlYmFzZSAtbSIuCisKKyogImdpdCByZWJhc2UgLWkiIGluY29ycmVjdGx5IGFib3J0ZWQgd2hlbiB0aGVyZSBpcyBubyBjb21taXQgdG8gcmVwbGF5LgorCisqIEJlaGF2aW91ciBvZiAiZ2l0IGRpZmYgLS1xdWlldCIgd2FzIGluY29uc2lzdGVudCB3aXRoICJkaWZmIC0tZXhpdC1jb2RlIgorICB3aXRoIHRoZSBvdXRwdXQgcmVkaXJlY3RlZCB0byAvZGV2L251bGwuCisKKyogImdpdCBkaWZmIC0tbm8taW5kZXgiIG9uIGJpbmFyeSBmaWxlcyBubyBsb25nZXIgb3V0cHV0cyBhIGJvZ3VzCisgICJkaWZmIC0tZ2l0IiBoZWFkZXIgbGluZS4KKworKiAiZ2l0IGRpZmYiIGh1bmsgaGVhZGVyIHBhdHRlcm5zIHdpdGggbXVsdGlwbGUgZWxlbWVudHMgc2VwYXJhdGVkIGJ5IExGCisgIHdlcmUgbm90IHVzZWQgY29ycmVjdGx5LgorCisqIEh1bmsgaGVhZGVycyBpbiAiZ2l0IGRpZmYiIGRlZmF1bHQgdG8gdXNpbmcgZXh0ZW5kZWQgcmVndWxhcgorICBleHByZXNzaW9ucywgZml4aW5nIHNvbWUgb2YgdGhlIGludGVybmFsIHBhdHRlcm5zIG9uIG5vbi1HTlUKKyAgcGxhdGZvcm1zLgorCisqIE5ldyBjb25maWcgImRpZmYuKi54ZnVuY25hbWUiIGV4cG9zZXMgZXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9ucworICBmb3IgdXNlciBzcGVjaWZpZWQgaHVuayBoZWFkZXIgcGF0dGVybnMuCisKKyogImdpdCBnYyIgd2hlbiBlamVjdGluZyBvdGhlcndpc2UgdW5yZWFjaGFibGUgb2JqZWN0cyBmcm9tIHBhY2tmaWxlcyBpbnRvCisgIGxvb3NlIGZvcm0gbGVha2VkIG1lbW9yeS4KKworKiAiZ2l0IGluZGV4LXBhY2siIHdhcyByZWNlbnRseSBicm9rZW4gYW5kIG1pc2hhbmRsZWQgb2JqZWN0cyBhZGRlZCBieQorICB0aGluLXBhY2sgY29tcGxldGlvbiBwcm9jZXNzaW5nIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KKworKiAiZ2l0IGluZGV4LXBhY2siIHdhcyByZWNlbnRseSBicm9rZW4gYW5kIG1pc2JlaGF2ZWQgd2hlbiBydW4gZnJvbSBpbnNpZGUKKyAgLmdpdC9vYmplY3RzL3BhY2svIGRpcmVjdG9yeS4KKworKiAiZ2l0IHN0YXNoIGFwcGx5IHNhc2hAezF9IiB3YXMgZml4ZWQgdG8gZXJyb3Igb3V0LiAgUHJpb3IgdmVyc2lvbnMKKyAgd291bGQgaGF2ZSBhcHBsaWVkIHN0YXNoQHswfSBpbmNvcnJlY3RseS4KKworKiAiZ2l0IHN0YXNoIGFwcGx5IiBub3cgb2ZmZXJzIGEgYmV0dGVyIHN1Z2dlc3Rpb24gb24gaG93IHRvIGNvbnRpbnVlCisgIGlmIHRoZSB3b3JraW5nIHRyZWUgaXMgY3VycmVudGx5IGRpcnR5LgorCisqICJnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSUoc3ViamVjdCkiIGZpeGVkIGZvciBjb21taXRzIHdpdGggbm8KKyAgbm8gbmV3bGluZSBpbiB0aGUgbWVzc2FnZSBib2R5LgorCisqICJnaXQgcmVtb3RlIiBmaXhlZCB0byBwcm90ZWN0IHByaW50ZiBmcm9tIHVzZXIgaW5wdXQuCisKKyogImdpdCByZW1vdGUgc2hvdyAtdiIgbm93IGRpc3BsYXlzIGFsbCBVUkxzIG9mIGEgcmVtb3RlLgorCisqICJnaXQgY2hlY2tvdXQgLWIgYnJhbmNoIiB3YXMgY29uZnVzZWQgd2hlbiBicmFuY2ggYWxyZWFkeSBleGlzdGVkLgorCisqICJnaXQgY2hlY2tvdXQgLXEiIG9uY2UgYWdhaW4gc3VwcHJlc3NlcyB0aGUgbG9jYWxseSBtb2RpZmllZCBmaWxlIGxpc3QuCisKKyogImdpdCBjbG9uZSAtcSIsICJnaXQgZmV0Y2ggLXEiIGFza3MgcmVtb3RlIHNpZGUgdG8gbm90IHNlbmQKKyAgcHJvZ3Jlc3MgbWVzc2FnZXMsIGFjdHVhbGx5IG1ha2luZyB0aGVpciBvdXRwdXQgcXVpZXQuCisKKyogQ3Jvc3MtZGlyZWN0b3J5IHJlbmFtZXMgYXJlIG5vIGxvbmdlciB1c2VkIHdoZW4gY3JlYXRpbmcgcGFja3MuICBUaGlzCisgIGFsbG93cyBtb3JlIGdyYWNlZnVsIGJlaGF2aW9yIG9uIGZpbGVzeXN0ZW1zIGxpa2Ugc3NoZnMuCisKKyogU3RhbGUgdGVtcG9yYXJ5IGZpbGVzIHVuZGVyICRHSVRfRElSL29iamVjdHMvcGFjayBhcmUgbm93IGNsZWFuZWQgdXAKKyAgYXV0b21hdGljYWxseSBieSAiZ2l0IHBydW5lIi4KKworKiAiZ2l0IG1lcmdlIiBvbmNlIGFnYWluIHJlbW92ZXMgZGlyZWN0b3JpZXMgYWZ0ZXIgdGhlIGxhc3QgZmlsZSBoYXMKKyAgYmVlbiByZW1vdmVkIGZyb20gaXQgZHVyaW5nIHRoZSBtZXJnZS4KKworKiAiZ2l0IG1lcmdlIiBkaWQgbm90IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmIHdoZW4KKyAgZW51bWVyYXRpbmcgdGhlIHBhcmVudHMgb2YgdGhlIHJlc3VsdGluZyBjb21taXQuCisKKyogImdpdCBibGFtZSAtQyAtQyIgbm8gbG9uZ2VyIHNlZ2ZhdWx0cyB3aGlsZSB0cnlpbmcgdG8gcGFzcyBibGFtZSBpZgorICAgaXQgZW5jb3VudGVycyBhIHN1Ym1vZHVsZSByZWZlcmVuY2UuCisKKyogImdpdCBybSIgaW5jb3JyZWN0bHkgY2xhaW1lZCB0aGF0IHlvdSBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnMgd2hlbiBhCisgIHBhdGggd2FzIG1lcmVseSBzdGF0LWRpcnR5LgorCisqICJnaXQgc3ZuIiBmaXhlZCB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiAnc2V0LXRyZWUnIGZhaWxlZCwKKyAgIGluc3RlYWQgb2YgYSBQZXJsIGNvbXBpbGUgZXJyb3IuCisKKyogImdpdCBzdWJtb2R1bGUiIGZpeGVkIHRvIGhhbmRsZSBjaGVja2luZyBvdXQgYSBkaWZmZXJlbnQgY29tbWl0CisgIHRoYW4gSEVBRCBhZnRlciBpbml0aWFsaXppbmcgdGhlIHN1Ym1vZHVsZS4KKworKiBUaGUgImdpdCBjb21taXQiIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGVyZSBhcmUgc3RpbGwgdW5tZXJnZWQKKyAgZmlsZXMgcHJlc2VudCB3YXMgY2xhcmlmaWVkIHRvIG1hdGNoICJnaXQgd3JpdGUtdHJlZSIuCisKKyogImdpdCBpbml0IiB3YXMgY29uZnVzZWQgd2hlbiBjb3JlLmJhcmUgb3IgY29yZS5zaGFyZWRSZXBvc2l0b3J5IGFyZSBzZXQKKyAgaW4gc3lzdGVtIG9yIHVzZXIgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBieSBtaXN0YWtlLiAgV2hlbiAtLWJhcmUgb3IKKyAgLS1zaGFyZWQgaXMgZ2l2ZW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB0aGVzZSBub3cgb3ZlcnJpZGUgc3VjaAorICBzZXR0aW5ncyBtYWRlIG91dHNpZGUgdGhlIHJlcG9zaXRvcmllcy4KKworKiBTb21lIHNlZ2ZhdWx0cyBkdWUgdG8gdW5jYXVnaHQgTlVMTCBwb2ludGVycyB3ZXJlIGZpeGVkIGluIG11bHRpcGxlCisgIHRvb2xzIHN1Y2ggYXMgYXBwbHksIHJlc2V0LCB1cGRhdGUtaW5kZXguCisKKyogU29sYXJpcyBidWlsZHMgbm93IGRlZmF1bHQgdG8gT0xEX0lDT05WPTEgdG8gYXZvaWQgY29tcGlsZSB3YXJuaW5nczsKKyAgU29sYXJpcyA4IGRvZXMgbm90IGRlZmluZSBORUVEU19MSUJJQ09OViBieSBkZWZhdWx0LgorCisqICJHaXQucG0iIHRlc3RzIHJlbGllZCBvbiB1bm5lY2Vzc2FyaWx5IG1vcmUgcmVjZW50IHZlcnNpb24gb2YgUGVybC4KKworKiAiZ2l0d2ViIiB0cmlnZ2VyZWQgdW5kZWYgd2FybmluZyBvbiBjb21taXRzIHdpdGhvdXQgbG9nIG1lc3NhZ2VzLgorCisqICJnaXR3ZWIiIHRyaWdnZXJlZCB1bmRlZiB3YXJuaW5ncyBvbiBtaXNzaW5nIHRyZWVzLgorCisqICJnaXR3ZWIiIG5vdyByZW1vdmVzIFBBVEhfSU5GTyBmcm9tIGl0cyBVUkxzIHNvIHVzZXJzIGRvbid0IGhhdmUKKyAgdG8gbWFudWFsbHkgc2V0IHRoZSBVUkwgaW4gdGhlIGdpdHdlYiBjb25maWd1cmF0aW9uLgorCisqIEJhc2ggY29tcGxldGlvbiByZW1vdmVkIHN1cHBvcnQgZm9yIGxlZ2FjeSAiZ2l0LWZldGNoIiwgImdpdC1wdXNoIgorICBhbmQgImdpdC1wdWxsIiBhcyB0aGVzZSBhcmUgbm8gbG9uZ2VyIGluc3RhbGxlZC4gIERhc2hsZXNzIGZvcm0KKyAgKCJnaXQgZmV0Y2giKSBpcyBzdGlsbCBob3dldmVyIHN1cHBvcnRlZC4KKworTWFueSBvdGhlciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIyNjYxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC40LnR4dApAQCAtMCwwICsxLDM5IEBACitHSVQgdjEuNi4wLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4wLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogJ2dpdCBhZGQgLXAnIHNhaWQgIk5vIGNoYW5nZXMiIHdoZW4gb25seSBiaW5hcnkgZmlsZXMgd2VyZSBjaGFuZ2VkLgorCisqICdnaXQgYXJjaGl2ZScgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSBpbiBiYXJlIHJlcG9zaXRvcmllcy4KKworKiAnZ2l0IGNoZWNrb3V0IC10IC1iIG5ld2JyYW5jaCcgd2hlbiB5b3UgYXJlIG9uIGRldGFjaGVkIEhFQUQgd2FzIGJyb2tlbi4KKworKiB3aGVuIHdlIHJlZnVzZSB0byBkZXRlY3QgcmVuYW1lcyBiZWNhdXNlIHRoZXJlIGFyZSB0b28gbWFueSBuZXcgb3IKKyAgZGVsZXRlZCBmaWxlcywgJ2dpdCBkaWZmJyBkaWQgbm90IHNheSBob3cgbWFueSB0aGVyZSBhcmUuCisKKyogJ2dpdCBwdXNoIC0tbWlycm9yJyB0cmllZCBhbmQgZmFpbGVkIHRvIHB1c2ggdGhlIHN0YXNoOyB0aGVyZSBpcyBubworICBwb2ludCBpbiBzZW5kaW5nIGl0IHRvIGJlZ2luIHdpdGguCisKKyogJ2dpdCBwdXNoJyBkaWQgbm90IHVwZGF0ZSB0aGUgcmVtb3RlIHRyYWNraW5nIHJlZmVyZW5jZSBpZiB0aGUgY29ycmVzcG9uZGluZworICByZWYgb24gdGhlIHJlbW90ZSBlbmQgaGFwcGVuZWQgdG8gYmUgYWxyZWFkeSB1cCB0byBkYXRlLgorCisqICdnaXQgcHVsbCAkdGhlcmUgJGJyYW5jaDokY3VycmVudF9icmFuY2gnIGRpZCBub3Qgd29yayB3aGVuIHlvdSB3ZXJlIG9uCisgIGEgYnJhbmNoIHlldCB0byBiZSBib3JuLgorCisqIHdoZW4gZ2l2aW5nIHVwIHJlc29sdmluZyBhIGNvbmZsaWN0ZWQgbWVyZ2UsICdnaXQgcmVzZXQgLS1oYXJkJyBmYWlsZWQKKyAgdG8gcmVtb3ZlIG5ldyBwYXRocyBmcm9tIHRoZSB3b3JraW5nIHRyZWUuCisKKyogJ2dpdCBzZW5kLWVtYWlsJyBoYWQgYSBzbWFsbCBmZCBsZWFrIHdoaWxlIHNjYW5uaW5nIGRpcmVjdG9yeS4KKworKiAnZ2l0IHN0YXR1cycgaW5jb3JyZWN0bHkgcmVwb3J0ZWQgYSBzdWJtb2R1bGUgZGlyZWN0b3J5IGFzIGFuIHVudHJhY2tlZAorICBkaXJlY3RvcnkuCisKKyogJ2dpdCBzdm4nIHVzZWQgZGVwcmVjYXRlZCAnZ2l0LWZvbycgZm9ybSBvZiBzdWJjb21tYW5kIGludm9jYXRpb24uCisKKyogJ2dpdCB1cGRhdGUtcmVmIC1kJyB0byByZW1vdmUgYSByZWZlcmVuY2UgZGlkIG5vdCBob25vciAtLW5vLWRlcmVmIG9wdGlvbi4KKworKiBQbHVnZ2VkIHNtYWxsIG1lbWxlYWtzIGhlcmUgYW5kIHRoZXJlLgorCisqIEFsc28gY29udGFpbnMgbWFueSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDhiYjk2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC41LnR4dApAQCAtMCwwICsxLDU2IEBACitHSVQgdjEuNi4wLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4wLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBjaGVja291dCIgdXNlZCB0byBjcmFzaCB3aGVuIHlvdXIgSEVBRCB3YXMgcG9pbnRpbmcgYXQgYSBkZWxldGVkCisgIGJyYW5jaC4KKworKiAiZ2l0IGNoZWNrb3V0IiBmcm9tIGFuIHVuLWNoZWNrZWQtb3V0IHN0YXRlIGRpZCBub3QgYWxsb3cgc3dpdGNoaW5nIG91dAorICBvZiB0aGUgY3VycmVudCBicmFuY2guCisKKyogImdpdCBkaWZmIiBhbHdheXMgYWxsb3dlZCBHSVRfRVhURVJOQUxfRElGRiBhbmQgLS1uby1leHQtZGlmZiB3YXMgbm8tb3AgZm9yCisgIHRoZSBjb21tYW5kLgorCisqIEdpdmluZyAzIG9yIG1vcmUgdHJlZS1pc2ggdG8gImdpdCBkaWZmIiBpcyBzdXBwb3NlZCB0byBzaG93IHRoZSBjb21iaW5lZAorICBkaWZmIGZyb20gc2Vjb25kIGFuZCBzdWJzZXF1ZW50IHRyZWVzIHRvIHRoZSBmaXJzdCBvbmUsIGJ1dCB0aGUgb3JkZXIgd2FzCisgIHNjcmV3ZWQgdXAuCisKKyogImdpdCBmYXN0LWV4cG9ydCIgZGlkIG5vdCBleHBvcnQgYWxsIHRhZ3MuCisKKyogImdpdCBscy1maWxlcyAtLXdpdGgtdHJlZT08dHJlZT4iIGRpZCBub3Qgd29yayB3aXRoIG9wdGlvbnMgb3RoZXIKKyAgdGhhbiAtYywgbW9zdCBub3RhYmx5IHdpdGggLW0uCisKKyogImdpdCBwYWNrLW9iamVjdHMiIGRpZCBub3QgbWFrZSBpdHMgYmVzdCBlZmZvcnQgdG8gaG9ub3IgLS1tYXgtcGFjay1zaXplCisgIG9wdGlvbiB3aGVuIGEgc2luZ2xlIGZpcnN0IG9iamVjdCBhbHJlYWR5IGJ1c3RlZCB0aGUgZ2l2ZW4gbGltaXQgYW5kCisgIHBsYWNlZCBtYW55IG9iamVjdHMgaW4gYSBzaW5nbGUgcGFjay4KKworKiAiZ2l0LXA0IiBmYXN0IGltcG9ydCBmcm9udGVuZCB3YXMgdG9vIGVhZ2VyIHRvIHRyaWdnZXIgaXRzIGtleXdvcmQgZXhwYW5zaW9uCisgIGxvZ2ljLCBldmVuIG9uIGEga2V5d29yZC1sb29raW5nIHN0cmluZyB0aGF0IGRvZXMgbm90IGhhdmUgY2xvc2luZyAnJCcgb24gdGhlCisgIHNhbWUgbGluZS4KKworKiAiZ2l0IHB1c2ggJHRoZXJlIiB3aGVuIHRoZSByZW1vdGUgJHRoZXJlIGlzIGRlZmluZWQgaW4gJEdJVF9ESVIvYnJhbmNoZXMvJHRoZXJlCisgIGJlaGF2ZXMgbW9yZSBsaWtlIHdoYXQgY2ctcHVzaCBmcm9tIENvZ2l0byB1c2VkIHRvIHdvcmsuCisKKyogd2hlbiBnaXZpbmcgdXAgcmVzb2x2aW5nIGEgY29uZmxpY3RlZCBtZXJnZSwgImdpdCByZXNldCAtLWhhcmQiIGZhaWxlZAorICB0byByZW1vdmUgbmV3IHBhdGhzIGZyb20gdGhlIHdvcmtpbmcgdHJlZS4KKworKiAiZ2l0IHRhZyIgZGlkIG5vdCBjb21wbGFpbiB3aGVuIGdpdmVuIG11dHVhbGx5IGluY29tcGF0aWJsZSBzZXQgb2Ygb3B0aW9ucy4KKworKiBUaGUgbWVzc2FnZSBjb25zdHJ1Y3RlZCBpbiB0aGUgaW50ZXJuYWwgZWRpdG9yIHdhcyBkaXNjYXJkZWQgd2hlbiAiZ2l0CisgIHRhZyAtcyIgZmFpbGVkIHRvIHNpZ24gdGhlIG1lc3NhZ2UsIHdoaWNoIHdhcyBvZnRlbiBjYXVzZWQgYnkgdGhlIHVzZXIKKyAgbm90IGNvbmZpZ3VyaW5nIEdQRyBjb3JyZWN0bHkuCisKKyogIm1ha2UgY2hlY2siIGNhbm5vdCBiZSBydW4gd2l0aG91dCBzcGFyc2U7IHBlb3BsZSBtYXkgaGF2ZSBtZWFudCB0byBzYXkKKyAgIm1ha2UgdGVzdCIgaW5zdGVhZCwgc28gc3VnZ2VzdCB0aGF0LgorCisqIEludGVybmFsIGRpZmYgbWFjaGluZXJ5IGhhZCBhIGNvcm5lciBjYXNlIHBlcmZvcm1hbmNlIGJ1ZyB0aGF0IGNob2tlZCBvbgorICBhIGxhcmdlIGZpbGUgd2l0aCBtYW55IHJlcGVhdGVkIGNvbnRlbnRzLgorCisqICJnaXQgcmVwYWNrIiB1c2VkIHRvIGdyYWIgb2JqZWN0cyBvdXQgb2YgcGFja3MgbWFya2VkIHdpdGggLmtlZXAKKyAgaW50byBhIG5ldyBwYWNrLgorCisqIE1hbnkgdW5zYWZlIGNhbGwgdG8gc3ByaW50ZigpIHN0eWxlIHZhcmFyZ3MgZnVuY3Rpb25zIGFyZSBjb3JyZWN0ZWQuCisKKyogQWxzbyBjb250YWlucyBxdWl0ZSBhIGZldyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGVjZTFmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC42LnR4dApAQCAtMCwwICsxLDMzIEBACitHSVQgdjEuNi4wLjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgMS42LjAuNQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGZzY2siIGhhZCBhIGRlZXAgcmVjdXJzaW9uIHRoYXQgd2FzdGVkIHN0YWNrIHNwYWNlLgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBhbmQgImdpdCBmYXN0LWltcG9ydCIgY2hva2VkIG9uIGFuIG9sZCBzdHlsZQorICAgYW5ub3RhdGVkIHRhZyB0aGF0IGxhY2sgdGhlIHRhZ2dlciBpbmZvcm1hdGlvbi4KKworICogImdpdCBtZXJnZXRvb2wgLS0gZmlsZSIgZGlkIG5vdCBjb3JyZWN0bHkgc2tpcCAiLS0iIG1hcmtlciB0aGF0CisgICBzaWduYWxzIHRoZSBlbmQgb2Ygb3B0aW9ucyBsaXN0LgorCisgKiAiZ2l0IHNob3cgJHRhZyIgc2VnZmF1bHRlZCB3aGVuIGFuIGFubm90YXRlZCAkdGFnIHBvaW50ZWQgYXQgYQorICAgbm9uZXhpc3RlbnQgb2JqZWN0LgorCisgKiAiZ2l0IHNob3cgMj5lcnJvciIgd2hlbiB0aGUgc3RhbmRhcmQgb3V0cHV0IGlzIGF1dG9tYXRpY2FsbHkgcmVkaXJlY3RlZAorICAgdG8gdGhlIHBhZ2VyIHJlZGlyZWN0ZWQgdGhlIHN0YW5kYXJkIGVycm9yIHRvIHRoZSBwYWdlciBhcyB3ZWxsOyB0aGVyZQorICAgd2FzIG5vIG5lZWQgdG8uCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZGlkIG5vdCBjb3JyZWN0bHkgaGFuZGxlIGxpc3Qgb2YgYWRkcmVzc2VzIHdoZW4KKyAgIHRoZXkgaGFkIHF1b3RlZCBjb21tYSAoZS5nLiAiTGFzdG5hbWUsIEdpdmVubmFtZSIgPG1haWxAYWRkcmUuc3M+KS4KKworICogTG9naWMgdG8gZGlzY292ZXIgYnJhbmNoIGFuY2VzdHJ5IGluICJnaXQgc3ZuIiB3YXMgdW5yZWxpYWJsZSB3aGVuCisgICB0aGUgcHJvY2VzcyB0byBmZXRjaCBoaXN0b3J5IHdhcyBpbnRlcnJ1cHRlZC4KKworICogUmVtb3ZlZCBzdXBwb3J0IGZvciBhbiBvYnNvbGV0ZSBnaXR3ZWIgcmVxdWVzdCBVUkksIHdob3NlCisgICBpbXBsZW1lbnRhdGlvbiByYW4gImdpdCBkaWZmIiBQb3JjZWxhaW4sIGluc3RlYWQgb2YgdXNpbmcgcGx1bWJpbmcsCisgICB3aGljaCB3b3VsZCBoYXZlIHJ1biBhbiBleHRlcm5hbCBkaWZmIGNvbW1hbmQgc3BlY2lmaWVkIGluIHRoZQorICAgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGFzIHRoZSBnaXR3ZWIgdXNlci4KKworQWxzbyBjb250YWlucyBudW1lcm91cyBkb2N1bWVudGF0aW9uIHR5cG9maXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU3ZWYxNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAudHh0CkBAIC0wLDAgKzEsMjU4IEBACitHSVQgdjEuNi4wIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVc2VyIHZpc2libGUgY2hhbmdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGUgZGVmYXVsdCBNYWtlZmlsZSBzZXR0aW5ncywgbW9zdCBvZiB0aGUgcHJvZ3JhbXMgYXJlIG5vdworaW5zdGFsbGVkIG91dHNpZGUgeW91ciAkUEFUSCwgZXhjZXB0IGZvciAiZ2l0IiwgImdpdGsiIGFuZAorc29tZSBzZXJ2ZXIgc2lkZSBwcm9ncmFtcyB0aGF0IG5lZWQgdG8gYmUgYWNjZXNzaWJsZSBmb3IgdGVjaG5pY2FsCityZWFzb25zLiAgSW52b2tpbmcgYSBnaXQgc3ViY29tbWFuZCBhcyAiZ2l0LXh5enp5IiBmcm9tIHRoZSBjb21tYW5kCitsaW5lIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgZWFybHkgMjAwNiAoYW5kIG9mZmljaWFsbHkgYW5ub3VuY2VkIGluCisxLjUuNCByZWxlYXNlIG5vdGVzKTsgdXNlIG9mIHRoZW0gZnJvbSB5b3VyIHNjcmlwdHMgYWZ0ZXIgYWRkaW5nCitvdXRwdXQgZnJvbSAiZ2l0IC0tZXhlYy1wYXRoIiB0byB0aGUgJFBBVEggaXMgc3RpbGwgc3VwcG9ydGVkIGluIHRoaXMKK3JlbGVhc2UsIGJ1dCB1c2VycyBhcmUgYWdhaW4gc3Ryb25nbHkgZW5jb3VyYWdlZCB0byBhZGp1c3QgdGhlaXIKK3NjcmlwdHMgdG8gdXNlICJnaXQgeHl6enkiIGZvcm0sIGFzIHdlIHdpbGwgc3RvcCBpbnN0YWxsaW5nCisiZ2l0LXh5enp5IiBoYXJkbGlua3MgZm9yIGJ1aWx0LWluIGNvbW1hbmRzIGluIGxhdGVyIHJlbGVhc2VzLgorCitBbiBlYXJsaWVyIGNoYW5nZSB0byBwYWdlICJnaXQgc3RhdHVzIiBvdXRwdXQgd2FzIG92ZXJ3aGVsbWluZ2x5IHVucG9wdWxhcgorYW5kIGhhcyBiZWVuIHJldmVydGVkLgorCitTb3VyY2UgY2hhbmdlcyBuZWVkZWQgZm9yIHBvcnRpbmcgdG8gTWluR1cgZW52aXJvbm1lbnQgYXJlIG5vdyBhbGwgaW4gdGhlCittYWluIGdpdC5naXQgY29kZWJhc2UuCisKK0J5IGRlZmF1bHQsIHBhY2tmaWxlcyBjcmVhdGVkIHdpdGggdGhpcyB2ZXJzaW9uIHVzZXMgZGVsdGEtYmFzZS1vZmZzZXQKK2VuY29kaW5nIGludHJvZHVjZWQgaW4gdjEuNC40LiAgUGFjayBpZHggZmlsZXMgYXJlIHVzaW5nIHZlcnNpb24gMiB0aGF0CithbGxvd3MgbGFyZ2VyIHBhY2tzIGFuZCBhZGRlZCByb2J1c3RuZXNzIHRoYW5rcyB0byBpdHMgQ1JDIGNoZWNraW5nLAoraW50cm9kdWNlZCBpbiB2MS41LjIgYW5kIHYxLjQuNC41LiAgSWYgeW91IHdhbnQgdG8ga2VlcCB5b3VyIHJlcG9zaXRvcmllcworYmFja3dhcmRzIGNvbXBhdGlibGUgcGFzdCB0aGVzZSB2ZXJzaW9ucywgc2V0IHJlcGFjay51c2VEZWx0YUJhc2VPZmZzZXQKK3RvIGZhbHNlIG9yIHBhY2suaW5kZXhWZXJzaW9uIHRvIDEsIHJlc3BlY3RpdmVseS4KKworV2UgdXNlZCB0byBwcmV2ZW50IHNhbXBsZSBob29rIHNjcmlwdHMgc2hpcHBlZCBpbiB0ZW1wbGF0ZXMvIGZyb20KK3RyaWdnZXJpbmcgYnkgZGVmYXVsdCBieSByZWx5aW5nIG9uIHRoZSBmYWN0IHRoYXQgd2UgaW5zdGFsbCB0aGVtIGFzCit1bmV4ZWN1dGFibGUsIGJ1dCBvbiBzb21lIGZpbGVzeXN0ZW1zLCB0aGlzIGFwcHJvYWNoIGRvZXMgbm90IHdvcmsuCitUaGV5IGFyZSBub3cgc2hpcHBlZCB3aXRoICIuc2FtcGxlIiBzdWZmaXguICBJZiB5b3Ugd2FudCB0byBhY3RpdmF0ZQorYW55IG9mIHRoZXNlIHNhbXBsZXMgYXMtaXMsIHJlbmFtZSB0aGVtIHRvIGRyb3AgdGhlICIuc2FtcGxlIiBzdWZmaXgsCitpbnN0ZWFkIG9mIHJ1bm5pbmcgImNobW9kICt4IiBvbiB0aGVtLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gcmVuYW1lCitob29rcy9wb3N0LXVwZGF0ZS5zYW1wbGUgdG8gaG9va3MvcG9zdC11cGRhdGUgdG8gZW5hYmxlIHRoZSBzYW1wbGUKK2hvb2sgdGhhdCBydW5zIHVwZGF0ZS1zZXJ2ZXItaW5mbywgaW4gb3JkZXIgdG8gbWFrZSByZXBvc2l0b3JpZXMKK2ZyaWVuZGx5IHRvIGR1bWIgcHJvdG9jb2xzIChpLmUuIEhUVFApLgorCitHSVRfQ09ORklHLCB3aGljaCB3YXMgb25seSBkb2N1bWVudGVkIGFzIGFmZmVjdGluZyAiZ2l0IGNvbmZpZyIsIGJ1dAorYWN0dWFsbHkgYWZmZWN0ZWQgYWxsIGdpdCBjb21tYW5kcywgbm93IG9ubHkgYWZmZWN0cyAiZ2l0IGNvbmZpZyIuCitHSVRfTE9DQUxfQ09ORklHLCBhbHNvIG9ubHkgZG9jdW1lbnRlZCBhcyBhZmZlY3RpbmcgImdpdCBjb25maWciIGFuZAorbm90IGRpZmZlcmVudCBmcm9tIEdJVF9DT05GSUcgaW4gYSB1c2VmdWwgd2F5LCBpcyByZW1vdmVkLgorCitUaGUgIi5kb3Rlc3QiIHRlbXBvcmFyeSBhcmVhICJnaXQgYW0iIGFuZCAiZ2l0IHJlYmFzZSIgdXNlIGlzIG5vdyBtb3ZlZAoraW5zaWRlIHRoZSAkR0lUX0RJUiwgdG8gYXZvaWQgbWlzdGFrZXMgb2YgYWRkaW5nIGl0IHRvIHRoZSBwcm9qZWN0IGJ5CithY2NpZGVudC4KKworQW4gYW5jaWVudCBtZXJnZSBzdHJhdGVneSAic3R1cGlkIiBoYXMgYmVlbiByZW1vdmVkLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuNS42CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworKiBnaXQtcDQgaW4gY29udHJpYiBsZWFybmVkICJhbGxvd1N1Ym1pdCIgY29uZmlndXJhdGlvbiB0byBjb250cm9sIG9uCisgIHdoaWNoIGJyYW5jaCB0byBhbGxvdyAic3VibWl0IiBzdWJjb21tYW5kLgorCisqIGdpdC1ndWkgbGVhcm5lZCB0byBzdGFnZSBjaGFuZ2VzIHBlci1saW5lLgorCisocG9ydGFiaWxpdHkpCisKKyogQ2hhbmdlcyBmb3IgTWluR1cgcG9ydCBoYXZlIGJlZW4gbWVyZ2VkLCB0aGFua3MgdG8gSm9oYW5uZXMgU2l4dCBhbmQKKyAgZ2FuZ3MuCisKKyogU2FtcGxlIGhvb2sgc2NyaXB0cyBzaGlwcGVkIGluIHRlbXBsYXRlcy8gYXJlIG5vdyBzdWZmaXhlZCB3aXRoCisgICouc2FtcGxlLgorCisqIHBlcmwncyBpbi1wbGFjZSBlZGl0ICgtaSkgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGhvdXQgYmFja3VwIGZpbGVzIG9uIFdpbmRvd3M7CisgIHNvbWUgdGVzdHMgYXJlIHJld3JpdHRlbiB0byBjb3BlIHdpdGggdGhpcy4KKworKGRvY3VtZW50YXRpb24pCisKKyogVXBkYXRlZCBob3d0by91cGRhdGUtaG9vay1leGFtcGxlCisKKyogR290IHJpZCBvZiB1c2FnZSBvZiAiZ2l0LWZvbyIgZnJvbSB0aGUgdHV0b3JpYWwgYW5kIG1hZGUgdHlwb2dyYXBoeQorICBtb3JlIGNvbnNpc3RlbnQuCisKKyogRGlzYW1iaWd1YXRpbmcgIi0tIiBiZXR3ZWVuIHJldnMgYW5kIHBhdGhzIGlzIGZpbmFsbHkgZG9jdW1lbnRlZC4KKworKHBlcmZvcm1hbmNlLCByb2J1c3RuZXNzLCBzYW5pdHkgZXRjLikKKworKiBpbmRleC1wYWNrIHVzZWQgdG9vIG11Y2ggbWVtb3J5IHdoZW4gZGVhbGluZyB3aXRoIGEgZGVlcCBkZWx0YSBjaGFpbi4KKyAgVGhpcyBoYXMgYmVlbiBvcHRpbWl6ZWQuCisKKyogcmVkdWNlZCBleGNlc3NpdmUgaW5saW5pbmcgdG8gc2hyaW5rIHNpemUgb2YgdGhlICJnaXQiIGJpbmFyeS4KKworKiB2ZXJpZnktcGFjayBjaGVja3MgdGhlIG9iamVjdCBDUkMgd2hlbiB1c2luZyB2ZXJzaW9uIDIgaWR4IGZpbGVzLgorCisqIFdoZW4gYW4gb2JqZWN0IGlzIGNvcnJ1cHQgaW4gYSBwYWNrLCB0aGUgb2JqZWN0IGJlY2FtZSB1bnVzYWJsZSBldmVuCisgIHdoZW4gdGhlIHNhbWUgb2JqZWN0IGlzIGF2YWlsYWJsZSBpbiBhIGxvb3NlIGZvcm0sICBXZSBub3cgdHJ5IGhhcmRlciB0bworICBmYWxsIGJhY2sgdG8gdGhlc2UgcmVkdW5kYW50IG9iamVjdHMgd2hlbiBhYmxlLiAgSW4gcGFydGljdWxhciwgImdpdAorICByZXBhY2sgLWEgLWYiIGNhbiBiZSB1c2VkIHRvIGZpeCBzdWNoIGEgY29ycnVwdGlvbiBhcyBsb25nIGFzIG5lY2Vzc2FyeQorICBvYmplY3RzIGFyZSBhdmFpbGFibGUuCisKKyogUGVyZm9ybWFuY2Ugb2YgImdpdC1ibGFtZSAtQyAtQyIgb3BlcmF0aW9uIGlzIHZhc3RseSBpbXByb3ZlZC4KKworKiBnaXQtY2xvbmUgZG9lcyBub3QgY3JlYXRlIHJlZnMgaW4gbG9vc2UgZm9ybSBhbnltb3JlIChpdCBiZWhhdmVzIGFzCisgIGlmIHlvdSBpbW1lZGlhdGVseSByYW4gZ2l0LXBhY2stcmVmcyBhZnRlciBjbG9uaW5nKS4gIFRoaXMgd2lsbCBoZWxwCisgIHJlcG9zaXRvcmllcyB3aXRoIGluc2FuZWx5IGxhcmdlIG51bWJlciBvZiByZWZzLgorCisqIGNvcmUuZnN5bmNvYmplY3RmaWxlcyBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBsb29zZQorICBvYmplY3RzIGNyZWF0ZWQgd2lsbCBiZSBmc3luYydlZCAodGhpcyBpcyBvbmx5IHVzZWZ1bCBvbiBmaWxlc3lzdGVtcworICB0aGF0IGRvZXMgbm90IG9yZGVyIGRhdGEgd3JpdGVzIHByb3Blcmx5KS4KKworKiAiZ2l0IGNvbW1pdC10cmVlIiBwbHVtYmluZyBjYW4gbWFrZSBPY3RvcHVzIHdpdGggbW9yZSB0aGFuIDE2IHBhcmVudHMuCisgICJnaXQgY29tbWl0IiBoYXMgYmVlbiBjYXBhYmxlIG9mIHRoaXMgZm9yIHF1aXRlIHNvbWUgdGltZS4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisqIGV2ZW4gbW9yZSBkb2N1bWVudGF0aW9uIHBhZ2VzIGFyZSBub3cgYWNjZXNzaWJsZSB2aWEgIm1hbiIgYW5kICJnaXQgaGVscCIuCisKKyogQSBuZXcgZW52aXJvbm1lbnQgdmFyaWFibGUgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgY2FuIGJlIHVzZWQgdG8gc3RvcAorICB0aGUgZGlzY292ZXJ5IHByb2Nlc3Mgb2YgdGhlIHRvcGxldmVsIG9mIHdvcmtpbmcgdHJlZTsgdGhpcyBtYXkgYmUgdXNlZnVsCisgIHdoZW4geW91IGFyZSB3b3JraW5nIGluIGEgc2xvdyBuZXR3b3JrIGRpc2sgYW5kIGFyZSBvdXRzaWRlIGFueSB3b3JraW5nIHRyZWUsCisgIGFzIGJhc2gtY29tcGxldGlvbiBhbmQgImdpdCBoZWxwIiBtYXkgc3RpbGwgbmVlZCB0byBydW4gaW4gdGhlc2UgcGxhY2VzLgorCisqIEJ5IGRlZmF1bHQsIHN0YXNoIGVudHJpZXMgbmV2ZXIgZXhwaXJlLiAgU2V0IHJlZmxvZ2V4cGlyZSBpbiBbZ2MKKyAgInJlZnMvc3Rhc2giXSB0byBhIHJlYXNvbmFibGUgdmFsdWUgdG8gZ2V0IHRyYWRpdGlvbmFsIGF1dG8tZXhwaXJhdGlvbgorICBiZWhhdmlvdXIgYmFjaworCisqIExvbmdzdGFuZGluZyBsYXRlbmN5IGlzc3VlIHdpdGggYmFzaCBjb21wbGV0aW9uIHNjcmlwdCBoYXMgYmVlbgorICBhZGRyZXNzZWQuICBUaGlzIHdpbGwgbmVlZCB0byBiZSBiYWNrbWVyZ2VkIHRvICdtYWludCcgbGF0ZXIuCisKKyogcGFnZXIuPGNtZD4gY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBlbmFibGUvZGlzYWJsZSB0aGUKKyAgZGVmYXVsdCBwYWdpbmcgYmVoYXZpb3VyIHBlciBjb21tYW5kLgorCisqICJnaXQtYWRkIC1pIiBoYXMgYSBuZXcgYWN0aW9uICdlL2RpdCcgdG8gYWxsb3cgeW91IGVkaXQgdGhlIHBhdGNoIGh1bmsKKyAgbWFudWFsbHkuCisKKyogZ2l0LWFtIHJlY29yZHMgdGhlIG9yaWdpbmFsIHRpcCBvZiB0aGUgYnJhbmNoIGluIE9SSUdfSEVBRCBiZWZvcmUgaXQKKyAgc3RhcnRzIGFwcGx5aW5nIHBhdGNoZXMuCisKKyogZ2l0LWFwcGx5IGNhbiBoYW5kbGUgYSBwYXRjaCB0aGF0IHRvdWNoZXMgdGhlIHNhbWUgcGF0aCBtb3JlIHRoYW4gb25jZQorICBtdWNoIGJldHRlciB0aGFuIGJlZm9yZS4KKworKiBnaXQtYXBwbHkgY2FuIGJlIHRvbGQgbm90IHRvIHRydXN0IHRoZSBsaW5lIGNvdW50cyByZWNvcmRlZCBpbiB0aGUgaW5wdXQKKyAgcGF0Y2ggYnV0IHJlY291bnQsIHdpdGggdGhlIG5ldyAtLXJlY291bnQgb3B0aW9uLgorCisqIGdpdC1hcHBseSBjYW4gYmUgdG9sZCB0byBhcHBseSBhIHBhdGNoIHRvIGEgcGF0aCBkZWVwZXIgdGhhbiB3aGF0IHRoZQorICBwYXRjaCByZWNvcmRzIHdpdGggLS1kaXJlY3Rvcnkgb3B0aW9uLgorCisqIGdpdC1hcmNoaXZlIGNhbiBiZSB0b2xkIHRvIG9taXQgY2VydGFpbiBwYXRocyBmcm9tIGl0cyBvdXRwdXQgdXNpbmcKKyAgZXhwb3J0LWlnbm9yZSBhdHRyaWJ1dGVzLgorCisqIGdpdC1hcmNoaXZlIHVzZXMgdGhlIHpsaWIgZGVmYXVsdCBjb21wcmVzc2lvbiBsZXZlbCB3aGVuIGNyZWF0aW5nCisgIHppcCBhcmNoaXZlLgorCisqIGdpdC1hcmNoaXZlJ3MgY29tbWFuZCBsaW5lIG9wdGlvbnMgLS1leGVjIGFuZCAtLXJlbW90ZSBjYW4gdGFrZSB0aGVpcgorICBwYXJhbWV0ZXJzIGFzIHNlcGFyYXRlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMsIHNpbWlsYXIgdG8gb3RoZXIgY29tbWFuZHMuCisgIElPVywgYm90aCAiLS1leGVjPXBhdGgiIGFuZCAiLS1leGVjIHBhdGgiIGFyZSBub3cgc3VwcG9ydGVkLgorCisqIFdpdGggLXYgb3B0aW9uLCBnaXQtYnJhbmNoIGRlc2NyaWJlcyB0aGUgcmVtb3RlIHRyYWNraW5nIHN0YXRpc3RpY3MKKyAgc2ltaWxhciB0byB0aGUgd2F5IGdpdC1jaGVja291dCByZXBvcnRzIGJ5IGhvdyBtYW55IGNvbW1pdHMgeW91ciBicmFuY2gKKyAgaXMgYWhlYWQvYmVoaW5kLgorCisqIGdpdC1icmFuY2gncyAtLWNvbnRhaW5zIG9wdGlvbiB1c2VkIHRvIGFsd2F5cyByZXF1aXJlIGEgY29tbWl0IHBhcmFtZXRlcgorICB0byBsaW1pdCB0aGUgYnJhbmNoZXMgd2l0aDsgaXQgbm93IGRlZmF1bHRzIHRvIGxpc3QgYnJhbmNoZXMgdGhhdAorICBjb250YWlucyBIRUFEIGlmIHRoaXMgcGFyYW1ldGVyIGlzIG9taXR0ZWQuCisKKyogZ2l0LWJyYW5jaCdzIC0tbWVyZ2VkIGFuZCAtLW5vLW1lcmdlZCBvcHRpb24gdXNlZCB0byBhbHdheXMgbGltaXQgdGhlCisgIGJyYW5jaGVzIHJlbGF0aXZlIHRvIHRoZSBIRUFELCBidXQgdGhleSBjYW4gbm93IHRha2UgYW4gb3B0aW9uYWwgY29tbWl0CisgIGFyZ3VtZW50IHRoYXQgaXMgdXNlZCBpbiBwbGFjZSBvZiBIRUFELgorCisqIGdpdC1idW5kbGUgY2FuIHJlYWQgdGhlIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KKworKiBnaXQtY2hlcnJ5LXBpY2sgY2FuIHJlcGxheSBhIHJvb3QgY29tbWl0IG5vdy4KKworKiBnaXQtY2xvbmUgY2FuIGNsb25lIGZyb20gYSByZW1vdGUgd2hvc2UgVVJMIHdvdWxkIGJlIHJld3JpdHRlbiBieQorICBjb25maWd1cmF0aW9uIHN0b3JlZCBpbiAkSE9NRS8uZ2l0Y29uZmlnIG5vdy4KKworKiAiZ2l0LWNsb25lIC0tbWlycm9yIiBpcyBhIGhhbmR5IHdheSB0byBzZXQgdXAgYSBiYXJlIG1pcnJvciByZXBvc2l0b3J5LgorCisqIGdpdC1jdnNzZXJ2ZXIgbGVhcm5lZCB0byByZXNwb25kIHRvICJjdnMgY28gLWMiLgorCisqIGdpdC1kaWZmIC0tY2hlY2sgbm93IGNoZWNrcyBsZWZ0b3ZlciBtZXJnZSBjb25mbGljdCBtYXJrZXJzLgorCisqICJnaXQtZGlmZiAtcCIgbGVhcm5lZCB0byBncmFiIGEgYmV0dGVyIGh1bmsgaGVhZGVyIGxpbmVzIGluCisgIEJpYlRleCwgUGFzY2FsL0RlbHBoaSwgYW5kIFJ1YnkgZmlsZXMgYW5kIGFsc28gcGF5cyBhdHRlbnRpb24gdG8KKyAgY2hhcHRlciBhbmQgcGFydCBib3VuZGFyeSBpbiBUZVggZG9jdW1lbnRzLgorCisqIFdoZW4gcmVtb3RlIHNpZGUgdXNlZCB0byBoYXZlIGJyYW5jaCAnZm9vJyBhbmQgZ2l0LWZldGNoIGZpbmRzIHRoYXQgbm93CisgIGl0IGhhcyBicmFuY2ggJ2Zvby9iYXInLCBpdCByZWZ1c2VzIHRvIGxvc2UgdGhlIGV4aXN0aW5nIHJlbW90ZSB0cmFja2luZworICBicmFuY2ggYW5kIGl0cyByZWZsb2cuICBUaGUgZXJyb3IgbWVzc2FnZSBoYXMgYmVlbiBpbXByb3ZlZCB0byBzdWdnZXN0CisgIHBydW5pbmcgdGhlIHJlbW90ZSBpZiB0aGUgdXNlciB3YW50cyB0byBwcm9jZWVkIGFuZCBnZXQgdGhlIGxhdGVzdCBzZXQKKyAgb2YgYnJhbmNoZXMgZnJvbSB0aGUgcmVtb3RlLCBpbmNsdWRpbmcgc3VjaCAnZm9vL2JhcicuCisKKyogZmFzdC1leHBvcnQgbGVhcm5lZCB0byBleHBvcnQgYW5kIGltcG9ydCBtYXJrcyBmaWxlOyB0aGlzIGNhbiBiZSB1c2VkIHRvCisgIGludGVyZmFjZSB3aXRoIGZhc3QtaW1wb3J0IGluY3JlbWVudGFsbHkuCisKKyogZmFzdC1pbXBvcnQgYW5kIGZhc3QtZXhwb3J0IGxlYXJuZWQgdG8gZXhwb3J0IGFuZCBpbXBvcnQgZ2l0bGlua3MuCisKKyogImdpdGsiIGxlZnQgYmFja2dyb3VuZCBwcm9jZXNzIGJlaGluZCBhZnRlciBiZWluZyBhc2tlZCB0byBkaWcgdmVyeSBkZWVwCisgIGhpc3RvcnkgYW5kIHRoZSB1c2VyIGtpbGxlZCB0aGUgVUk7IHRoZSBwcm9jZXNzIGlzIGtpbGxlZCB3aGVuIHRoZSBVSSBnb2VzCisgIGF3YXkgbm93LgorCisqIGdpdC1yZWJhc2UgcmVjb3JkcyB0aGUgb3JpZ2luYWwgdGlwIG9mIGJyYW5jaCBpbiBPUklHX0hFQUQgYmVmb3JlIGl0IGlzCisgIHJld291bmQuCisKKyogImdpdCByZXJlcmUiIGNhbiBiZSB0b2xkIHRvIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCBhdXRvLXJldXNlZCByZXNvbHV0aW9uCisgIHdpdGggcmVyZXJlLmF1dG91cGRhdGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworKiBnaXQtcmV2LXBhcnNlIGxlYXJuZWQgJGNvbW1pdF4hIGFuZCAkY29tbWl0XkAgbm90YXRpb25zIHVzZWQgaW4gImxvZyIKKyAgZmFtaWx5LiAgVGhlc2Ugbm90YXRpb25zIGFyZSBhdmFpbGFibGUgaW4gZ2l0ayBhcyB3ZWxsLCBiZWNhdXNlIHRoZSBnaXRrCisgIGNvbW1hbmQgaW50ZXJuYWxseSB1c2VzIHJldi1wYXJzZSB0byBpbnRlcnByZXQgaXRzIGFyZ3VtZW50cy4KKworKiBnaXQtcmV2LWxpc3QgbGVhcm5lZCAtLWNoaWxkcmVuIG9wdGlvbiB0byBzaG93IGNoaWxkIGNvbW1pdHMgaXQKKyAgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSB0cmF2ZXJzYWwsIGluc3RlYWQgb2Ygc2hvd2luZyBwYXJlbnQgY29tbWl0cy4KKworKiBnaXQtc2VuZC1tYWlsIGNhbiB0YWxrIG5vdCBqdXN0IG92ZXIgU1NMIGJ1dCBvdmVyIFRMUyBub3cuCisKKyogZ2l0LXNob3J0bG9nIGhvbm9ycyBjdXN0b20gb3V0cHV0IGZvcm1hdCBzcGVjaWZpZWQgd2l0aCAiLS1wcmV0dHk9Zm9ybWF0OiIuCisKKyogImdpdC1zdGFzaCBzYXZlIiBsZWFybmVkIC0ta2VlcC1pbmRleCBvcHRpb24uICBUaGlzIGxldHMgeW91IHN0YXNoIGF3YXkgdGhlCisgIGxvY2FsIGNoYW5nZXMgYW5kIGJyaW5nIHRoZSBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXggdG8geW91ciB3b3JraW5nCisgIHRyZWUgZm9yIGV4YW1pbmF0aW9uIGFuZCB0ZXN0aW5nLgorCisqIGdpdC1zdGFzaCBhbHNvIGxlYXJuZWQgYnJhbmNoIHN1YmNvbW1hbmQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBvdXQgb2YKKyAgc3Rhc2hlZCBjaGFuZ2VzLgorCisqIGdpdC1zdGF0dXMgZ2l2ZXMgdGhlIHJlbW90ZSB0cmFja2luZyBzdGF0aXN0aWNzIHNpbWlsYXIgdG8gdGhlIHdheQorICBnaXQtY2hlY2tvdXQgcmVwb3J0cyBieSBob3cgbWFueSBjb21taXRzIHlvdXIgYnJhbmNoIGlzIGFoZWFkL2JlaGluZC4KKworKiAiZ2l0LXN2biBkY29tbWl0IiBpcyBub3cgYXdhcmUgb2YgYXV0by1wcm9wcyBzZXR0aW5nIHRoZSBzdWJ2ZXJzaW9uIHVzZXIKKyAgaGFzLgorCisqIFlvdSBjYW4gdGVsbCAiZ2l0IHN0YXR1cyAtdSIgdG8gZXZlbiBtb3JlIGFnZ3Jlc3NpdmVseSBvbWl0IGNoZWNraW5nCisgIHVudHJhY2tlZCBmaWxlcyB3aXRoIC0tdW50cmFja2VkLWZpbGVzPW5vLgorCisqIE9yaWdpbmFsIFNIQS0xIHZhbHVlIGZvciAidXBkYXRlLXJlZiAtZCIgaXMgb3B0aW9uYWwgbm93LgorCisqIEVycm9yIGNvZGVzIGZyb20gZ2l0d2ViIGFyZSBtYWRlIG1vcmUgZGVzY3JpcHRpdmUgd2hlcmUgcG9zc2libGUsIHJhdGhlcgorICB0aGFuICI0MDMgZm9yYmlkZGVuIiBhcyB3ZSB1c2VkIHRvIGlzc3VlIGV2ZXJ5d2hlcmUuCisKKyhpbnRlcm5hbCkKKworKiBnaXQtbWVyZ2UgaGFzIGJlZW4gcmVpbXBsZW1lbnRlZCBpbiBDLgorCisKK0ZpeGVzIHNpbmNlIHYxLjUuNgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNS42IG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4KK3RoaXMgcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogZ2l0LWNsb25lIGlnbm9yZWQgaXRzIC11IG9wdGlvbjsgdGhlIGZpeCBuZWVkcyB0byBiZSBiYWNrcG9ydGVkIHRvCisgICAnbWFpbnQnOworCisgKiBnaXQtbXYgdXNlZCB0byBsb3NlIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGNoYW5nZXMgdGhhdCBhcmUgc3RhZ2VkCisgICBhbmQgdGhhdCBhcmUgb25seSBpbiB0aGUgd29ya2luZyB0cmVlLCBieSBzdGFnaW5nIGJvdGggaW4gdGhlIGluZGV4CisgICBhZnRlciBtb3Zpbmcgc3VjaCBhIHBhdGguCisKKyAqICJnaXQtcmViYXNlIC1pIC1wIiByZXdyb3RlIHRoZSBwYXJlbnRzIHRvIHdyb25nIG9uZXMgd2hlbiBhbWVuZGluZworICAgKGVpdGhlciBlZGl0IG9yIHNxdWFzaCkgd2FzIGludm9sdmVkLCBhbmQgZGlkIG5vdCB3b3JrIGNvcnJlY3RseQorICAgd2hlbiBmYXN0IGZvcndhcmRpbmcuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNTk0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjEudHh0CkBAIC0wLDAgKzEsNTkgQEAKK0dJVCB2MS42LjEuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgYWRkIGZyb3R6L25pdGZvbCIgd2hlbiAiZnJvdHoiIGlzIGEgc3VibW9kdWxlIHNob3VsZCBoYXZlIGVycm9yZWQKKyAgb3V0LCBidXQgaXQgZGlkbid0LgorCisqICJnaXQgYXBwbHkiIHRvb2sgZmlsZSBtb2RlcyBmcm9tIHRoZSBwYXRjaCB0ZXh0IGFuZCB1cGRhdGVkIHRoZSBtb2RlCisgIGJpdHMgb2YgdGhlIHRhcmdldCB0cmVlIGV2ZW4gd2hlbiB0aGUgcGF0Y2ggd2FzIG5vdCBhYm91dCBtb2RlIGNoYW5nZXMuCisKKyogImdpdCBiaXNlY3QgdmlldyIgb24gQ3lnd2luIGRpZCBub3QgbGF1bmNoIGdpdGsKKworKiAiZ2l0IGNoZWNrb3V0ICR0cmVlIiBkaWQgbm90IHRyaWdnZXIgYW4gZXJyb3IuCisKKyogImdpdCBjb21taXQiIHRyaWVkIHRvIHJlbW92ZSBDT01NSVRfRURJVE1TRyBmcm9tIHRoZSB3b3JrIHRyZWUgYnkgbWlzdGFrZS4KKworKiAiZ2l0IGRlc2NyaWJlIC0tYWxsIiBjb21wbGFpbmVkIHdoZW4gYSBjb21taXQgaXMgZGVzY3JpYmVkIHdpdGggYSB0YWcsCisgIHdoaWNoIHdhcyBub25zZW5zZS4KKworKiAiZ2l0IGRpZmYgLS1uby1pbmRleCAtLSIgZGlkIG5vdCB0cmlnZ2VyIG5vLWluZGV4IChha2EgInVzZSBnaXQtZGlmZiBhcworICBhIHJlcGxhY2VtZW50IG9mIGRpZmYgb24gdW50cmFja2VkIGZpbGVzIikgYmVoYXZpb3VyLgorCisqICJnaXQgZm9ybWF0LXBhdGNoIC0xIEhFQUQiIG9uIGEgcm9vdCBjb21taXQgZmFpbGVkIHRvIHByb2R1Y2UgcGF0Y2gKKyAgdGV4dC4KKworKiAiZ2l0IGZzY2sgYnJhbmNoIiBkaWQgbm90IHdvcmsgYXMgYWR2ZXJ0aXNlZDsgaW5zdGVhZCBpdCBiZWhhdmVkIHRoZSBzYW1lCisgIHdheSBhcyAiZ2l0IGZzY2siLgorCisqICJnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolcyIgZGlkIG5vdCBoYW5kbGUgYSBtdWx0aS1saW5lIHN1YmplY3QgdGhlCisgIHNhbWUgd2F5IGFzIGJ1aWx0LWluIGxvZyBsaXN0ZXJzIChpLmUuIHNob3J0bG9nLCAtLXByZXR0eT1vbmVsaW5lLCBldGMuKQorCisqICJnaXQgZGFlbW9uIiwgYW5kICJnaXQgbWVyZ2UtZmlsZSIgYXJlIG1vcmUgY2FyZWZ1bCB3aGVuIGZyZW9wZW4gZmFpbHMKKyAgYW5kIGJhcmYsIGluc3RlYWQgb2YgZ29pbmcgb24gYW5kIHdyaXRpbmcgdG8gdW5vcGVuZWQgZmlsZWhhbmRsZS4KKworKiAiZ2l0IGh0dHAtcHVzaCIgZGlkIG5vdCBsaWtlIHNvbWUgUkZDIDQ5MTggY29tcGxpYW50IERBViBzZXJ2ZXIKKyAgcmVzcG9uc2VzLgorCisqICJnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIiBtaXN0YWtlbmx5IG92ZXJ3cml0dGVuIGFuIHVudHJhY2tlZCBmaWxlIGluIHRoZQorICB3b3JrIHRyZWUgdXBvbiBkZWxldGUvbW9kaWZ5IGNvbmZsaWN0LgorCisqICJnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIiBkaWRuJ3QgbGVhdmUgdGhlIGluZGV4IHVubWVyZ2VkIGZvciBlbnRyaWVzIHdpdGgKKyAgcmVuYW1lL2RlbGV0ZSBjb25mbGljdHMuCisKKyogImdpdCBtZXJnZSAtcyByZWN1cnNpdmUiIGNsb2JiZXJlZCB1bnRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmsgdHJlZS4KKworKiAiZ2l0IG12IC1rIiB3aXRoIG1vcmUgdGhhbiBvbmUgZXJyb25lb3VzIHBhdGhzIG1pc2JlaGF2ZWQuCisKKyogImdpdCByZWFkLXRyZWUgLW0gLXUiIGhlbmNlIGJyYW5jaCBzd2l0Y2hpbmcgaW5jb3JyZWN0bHkgbG9zdCBhCisgIHN1YmRpcmVjdG9yeSBpbiByYXJlIGNhc2VzLgorCisqICJnaXQgcmViYXNlIC1pIiBpc3N1ZWQgYW4gdW5uZWNlc3NhcnkgZXJyb3IgbWVzc2FnZSB1cG9uIGEgdXNlciBlcnJvciBvZgorICBtYXJraW5nIHRoZSBmaXJzdCBjb21taXQgdG8gYmUgInNxdWFzaCJlZC4KKworKiAiZ2l0IHNob3J0bG9nIiBkaWQgbm90IGZvcm1hdCBhIGNvbW1pdCBtZXNzYWdlIHdpdGggbXVsdGktbGluZQorICBzdWJqZWN0IGNvcnJlY3RseS4KKworTWFueSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTM3Y2JiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS4yLnR4dApAQCAtMCwwICsxLDM5IEBACitHSVQgdjEuNi4xLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4xLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIGxvZ2ljIGZvciByZW5hbWUgZGV0ZWN0aW9uIGluIGludGVybmFsIGRpZmYgdXNlZCBieSBjb21tYW5kcyBsaWtlCisgICJnaXQgZGlmZiIgYW5kICJnaXQgYmxhbWUiIGhhcyBiZWVuIG9wdGltaXplZCB0byBhdm9pZCBsb2FkaW5nIHRoZSBzYW1lCisgIGJsb2IgcmVwZWF0ZWRseS4KKworKiBXZSBkaWQgbm90IGFsbG93IHdyaXRpbmcgb3V0IGEgYmxvYiB0aGF0IGlzIGxhcmdlciB0aGFuIDJHQiBmb3Igbm8gZ29vZAorICByZWFzb24uCisKKyogImdpdCBmb3JtYXQtcGF0Y2ggLW8gJGRpciIsIHdoZW4gJGRpciBpcyBhIHJlbGF0aXZlIGRpcmVjdG9yeSwgdXNlZCBpdAorICBhcyByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiB0aGUgd29yayB0cmVlLCBub3QgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQKKyAgZGlyZWN0b3J5LgorCisqIHYxLjYuMSBpbnRyb2R1Y2VkIGFuIG9wdGltaXphdGlvbiBmb3IgImdpdCBwdXNoIiBpbnRvIGEgcmVwb3NpdG9yeSAoQSkKKyAgdGhhdCBib3Jyb3dzIGl0cyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IChCKSB0byBhdm9pZCBzZW5kaW5nCisgIG9iamVjdHMgdGhhdCBhcmUgYXZhaWxhYmxlIGluIHJlcG9zaXRvcnkgQiwgd2hlbiB0aGV5IGFyZSBub3QgeWV0IHVzZWQKKyAgYnkgcmVwb3NpdG9yeSBBLiAgSG93ZXZlciB0aGUgY29kZSBvbiB0aGUgImdpdCBwdXNoIiBzZW5kZXIgc2lkZSB3YXMKKyAgYnVnZ3kgYW5kIGRpZCBub3Qgd29yayB3aGVuIHJlcG9zaXRvcnkgQiBoYWQgbmV3IG9iamVjdHMgdGhhdCBhcmUgbm90CisgIGtub3duIGJ5IHRoZSBzZW5kZXIuICBUaGlzIGNhdXNlZCBwdXNoaW5nIGludG8gYSAiZm9ya2VkIiByZXBvc2l0b3J5CisgIHNlcnZlZCBieSB2MS42LjEgc29mdHdhcmUgdXNpbmcgImdpdCBwdXNoIiBmcm9tIHYxLjYuMSBzb21ldGltZXMgZGlkIG5vdAorICB3b3JrLiAgVGhlIGJ1ZyB3YXMgcHVyZWx5IG9uIHRoZSAiZ2l0IHB1c2giIHNlbmRlciBzaWRlLCBhbmQgaGFzIGJlZW4KKyAgY29ycmVjdGVkLgorCisqICJnaXQgc3RhdHVzIC12IiBkaWQgbm90IHBhaW50IGl0cyBkaWZmIG91dHB1dCBpbiBjb2xvdXIgZXZlbiB3aGVuCisgIGNvbG9yLnVpIGNvbmZpZ3VyYXRpb24gd2FzIHNldC4KKworKiAiZ2l0IGxzLXRyZWUiIGxlYXJuZWQgLS1mdWxsLXRyZWUgb3B0aW9uIHRvIGhlbHAgUG9yY2VsYWluIHNjcmlwdHMgdGhhdAorICB3YW50IHRvIGFsd2F5cyBzZWUgdGhlIGZ1bGwgcGF0aCByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IHdvcmtpbmcKKyAgZGlyZWN0b3J5LgorCisqICJnaXQgZ3JlcCIgaW5jb3JyZWN0bHkgc2VhcmNoZWQgaW4gd29yayB0cmVlIHBhdGhzIGV2ZW4gd2hlbiB0aGV5IGFyZQorICBtYXJrZWQgYXMgYXNzdW1lLXVuY2hhbmdlZC4gIEl0IG5vdyBzZWFyY2hlcyBpbiB0aGUgaW5kZXggZW50cmllcy4KKworKiAiZ2l0IGdjIiB3aXRoIG5vIGdyYWNlIHBlcmlvZCBuZWVkbGVzc2x5IGVqZWN0ZWQgcGFja2VkIGJ1dCB1bnJlYWNoYWJsZQorICBvYmplY3RzIGluIHRoZWlyIGxvb3NlIGZvcm0sIG9ubHkgdG8gZGVsZXRlIHRoZW0gcmlnaHQgYXdheS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMDhkODEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjMudHh0CkBAIC0wLDAgKzEsMjggQEAKK0dJVCB2MS42LjEuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjEuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGRpZmYgLS1iaW5hcnkgfCBnaXQgYXBwbHkiIHBpcGVsaW5lIGRpZCBub3Qgd29yayB3ZWxsIHdoZW4KKyAgYSBiaW5hcnkgYmxvYiBpcyBjaGFuZ2VkIHRvIGEgc3ltYm9saWMgbGluay4KKworKiBTb21lIGNvbWJpbmF0aW9ucyBvZiAtYi8tdy8tLWlnbm9yZS1zcGFjZS1hdC1lb2wgdG8gImdpdCBkaWZmIiBkaWQKKyAgbm90IHdvcmsgYXMgZXhwZWN0ZWQuCisKKyogImdpdCBncmVwIiBkaWQgbm90IHBhc3MgdGhlIC1JIChpZ25vcmUgYmluYXJ5KSBvcHRpb24gd2hlbgorICBjYWxsaW5nIG91dCBhbiBleHRlcm5hbCBncmVwIHByb2dyYW0uCisKKyogImdpdCBsb2ciIGFuZCBmcmllbmRzIGluY2x1ZGUgSEVBRCB0byB0aGUgc2V0IG9mIHN0YXJ0aW5nIHBvaW50cworICB3aGVuIC0tYWxsIGlzIGdpdmVuLiAgVGhpcyBtYWtlcyBhIGRpZmZlcmVuY2Ugd2hlbiB5b3UgYXJlIG5vdAorICBvbiBhbnkgYnJhbmNoLgorCisqICJnaXQgbXYiIHRvIG1vdmUgYW4gdW50cmFja2VkIGZpbGUgdG8gb3ZlcndyaXRlIGEgdHJhY2tlZAorICBjb250ZW50cyBtaXNiZWhhdmVkLgorCisqICJnaXQgbWVyZ2UgLXMgb2N0b3B1cyIgd2l0aCBtYW55IHBvdGVudGlhbCBtZXJnZSBiYXNlcyBkaWQgbm90CisgIHdvcmsgY29ycmVjdGx5LgorCisqIFJQTSBiaW5hcnkgcGFja2FnZSBpbnN0YWxsZWQgdGhlIGh0bWwgbWFucGFnZXMgaW4gYSB3cm9uZyBwbGFjZS4KKworQWxzbyBpbmNsdWRlcyBtaW5vciBkb2N1bWVudGF0aW9uIGZpeGVzIGFuZCB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NiYWQ3OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuNC50eHQKQEAgLTAsMCArMSw0MSBAQAorR0lUIHYxLjYuMS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIC5naXRpZ25vcmUgbGVhcm5lZCB0byBoYW5kbGUgYmFja3NsYXNoIGFzIGEgcXVvdGluZyBtZWNoYW5pc20gZm9yCisgIGNvbW1lbnQgaW50cm9kdWN0aW9uIGNoYXJhY3RlciAiIyIuCisgIFRoaXMgZml4IHdhcyBmaXJzdCBtZXJnZWQgdG8gMS42LjIuMS4KKworKiAiZ2l0IGZhc3QtZXhwb3J0IiBwcm9kdWNlZCB3cm9uZyBvdXRwdXQgd2l0aCBzb21lIHBhcmVudHMgbWlzc2luZyBmcm9tCisgIGNvbW1pdHMsIHdoZW4gdGhlIGhpc3RvcnkgaXMgY2xvY2stc2tld2VkLgorCisqICJnaXQgZmFzdC1pbXBvcnQiIHNvbWV0aW1lcyBmYWlsZWQgdG8gcmVhZCBiYWNrIG9iamVjdHMgaXQganVzdCB3cm90ZQorICBvdXQgYW5kIGFib3J0ZWQsIGJlY2F1c2UgaXQgZmFpbGVkIHRvIGZsdXNoIHN0YWxlIGNhY2hlZCBkYXRhLgorCisqICJnaXQtbHMtdHJlZSIgYW5kICJnaXQtZGlmZi10cmVlIiB1c2VkIGEgcGF0aHNwZWMgY29ycmVjdGx5IHdoZW4KKyAgZGVjaWRpbmcgdG8gZGVzY2VuZCBpbnRvIGEgc3ViZGlyZWN0b3J5IGJ1dCB0aGV5IGRpZCBub3QgbWF0Y2ggdGhlCisgIGluZGl2aWR1YWwgcGF0aHMgY29ycmVjdGx5LiAgVGhpcyBjYXVzZWQgcGF0aHNwZWNzICJhYmMvZCBhYiIgdG8gbWF0Y2gKKyAgImFiYy8wIiAoImFiYy9kIiBtYWRlIHRoZW0gZGVjaWRlIHRvIGRlc2NlbmQgaW50byB0aGUgZGlyZWN0b3J5ICJhYmMvIiwKKyAgYW5kIHRoZW4gImFiIiBpbmNvcnJlY3RseSBtYXRjaGVkICJhYmMvMCIgd2hlbiBpdCBzaG91bGRuJ3QpLgorICBUaGlzIGZpeCB3YXMgZmlyc3QgbWVyZ2VkIHRvIDEuNi4yLjMuCisKKyogaW1wb3J0LXppcHMgc2NyaXB0IChpbiBjb250cmliKSBkaWQgbm90IGNvbXB1dGUgdGhlIGNvbW1vbiBkaXJlY3RvcnkKKyAgcHJlZml4IGNvcnJlY3RseS4KKyAgVGhpcyBmaXggd2FzIGZpcnN0IG1lcmdlZCB0byAxLjYuMi4yLgorCisqICJnaXQgaW5pdCIgc2VnZmF1bHRlZCB3aGVuIGdpdmVuIGFuIG92ZXJsb25nIHRlbXBsYXRlIGxvY2F0aW9uIHZpYQorICB0aGUgLS10ZW1wbGF0ZT0gb3B0aW9uLgorICBUaGlzIGZpeCB3YXMgZmlyc3QgbWVyZ2VkIHRvIDEuNi4yLjQuCisKKyogImdpdCByZXBhY2siIGRpZCBub3QgZXJyb3Igb3V0IHdoZW4gbmVjZXNzYXJ5IG9iamVjdCB3YXMgbWlzc2luZyBpbiB0aGUKKyAgcmVwb3NpdG9yeS4KKworKiBnaXQtcmVwYWNrIChpbnZva2VkIGZyb20gZ2l0LWdjKSBkaWQgbm90IHdvcmsgYXMgbmljZWx5IGFzIGl0IHNob3VsZCBpbgorICBhIHJlcG9zaXRvcnkgdGhhdCBib3Jyb3dzIG9iamVjdHMgZnJvbSBuZWlnaGJvdXJzIHZpYSBhbHRlcm5hdGVzCisgIG1lY2hhbmlzbSBlc3BlY2lhbGx5IHdoZW4gc29tZSBwYWNrcyBhcmUgbWFya2VkIHdpdGggdGhlICIua2VlcCIgZmxhZworICB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyByZXBhY2tlZC4KKyAgVGhpcyBmaXggd2FzIGZpcnN0IG1lcmdlZCB0byAxLjYuMi4zLgorCitBbHNvIGluY2x1ZGVzIG1pbm9yIGRvY3VtZW50YXRpb24gZml4ZXMgYW5kIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTUyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLnR4dApAQCAtMCwwICsxLDI4MCBAQAorR0lUIHYxLjYuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS42LjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gc29tZSBjb21tYW5kcyAoZS5nLiAiZ2l0IGxvZyIsICJnaXQgZGlmZiIpIHNwYXduIHBhZ2VyIGludGVybmFsbHksIHdlCit1c2VkIHRvIG1ha2UgdGhlIHBhZ2VyIHRoZSBwYXJlbnQgcHJvY2VzcyBvZiB0aGUgZ2l0IGNvbW1hbmQgdGhhdCBwcm9kdWNlcworb3V0cHV0LiAgVGhpcyBtZWFudCB0aGF0IHRoZSBleGl0IHN0YXR1cyBvZiB0aGUgd2hvbGUgdGhpbmcgY29tZXMgZnJvbSB0aGUKK3BhZ2VyLCBub3QgdGhlIHVuZGVybHlpbmcgZ2l0IGNvbW1hbmQuICBXZSBzd2FwcGVkIHRoZSBvcmRlciBvZiB0aGUKK3Byb2Nlc3NlcyBhcm91bmQgYW5kIHlvdSB3aWxsIHNlZSB0aGUgZXhpdCBjb2RlIGZyb20gdGhlIGNvbW1hbmQgZnJvbSBub3cKK29uLgorCisoc3Vic3lzdGVtcykKKworKiBnaXRrIGNhbiBjYWxsIG91dCB0byBnaXQtZ3VpIHRvIHZpZXcgImdpdCBibGFtZSIgb3V0cHV0OyBnaXQtZ3VpIGluIHR1cm4KKyAgY2FuIHJ1biBnaXRrIGZyb20gaXRzIGJsYW1lIHZpZXcuCisKKyogVmFyaW91cyBnaXQtZ3VpIHVwZGF0ZXMgaW5jbHVkaW5nIHVwZGF0ZWQgdHJhbnNsYXRpb25zLgorCisqIFZhcmlvdXMgZ2l0d2ViIHVwZGF0ZXMgZnJvbSByZXBvLm9yLmN6IGluc3RhbGxhdGlvbi4KKworKiBVcGRhdGVzIHRvIGVtYWNzIGJpbmRpbmdzLgorCisocG9ydGFiaWxpdHkpCisKKyogQSBmZXcgdGVzdCBzY3JpcHRzIHVzZWQgbm9ucG9ydGFibGUgImdyZXAiIHRoYXQgZGlkIG5vdCB3b3JrIHdlbGwgb24KKyAgc29tZSBwbGF0Zm9ybXMsIGUuZy4gU29sYXJpcy4KKworKiBTYW1wbGUgcHJlLWF1dG8tZ2Mgc2NyaXB0IGhhcyBPUyBYIHN1cHBvcnQuCisKKyogTWFrZWZpbGUgaGFzIHN1cHBvcnQgZm9yIChhbmNpZW50KSBGcmVlQlNEIDQuOS4KKworKHBlcmZvcm1hbmNlKQorCisqIE1hbnkgb3BlcmF0aW9ucyB0aGF0IGFyZSBsc3RhdCgzKSBoZWF2eSBjYW4gYmUgdG9sZCB0byBwcmUtZXhlY3V0ZQorICBuZWNlc3NhcnkgbHN0YXQoMykgaW4gcGFyYWxsZWwgYmVmb3JlIHRoZWlyIG1haW4gb3BlcmF0aW9ucywgd2hpY2gKKyAgcG90ZW50aWFsbHkgZ2l2ZXMgbXVjaCBpbXByb3ZlZCBwZXJmb3JtYW5jZSBmb3IgY29sZC1jYWNoZSBjYXNlcyBvciBpbgorICBlbnZpcm9ubWVudHMgd2l0aCB3ZWFrIG1ldGFkYXRhIGNhY2hpbmcgKGUuZy4gTkZTKS4KKworKiBUaGUgdW5kZXJseWluZyBkaWZmIG1hY2hpbmVyeSB0byBwcm9kdWNlIHRleHR1YWwgb3V0cHV0IGhhcyBiZWVuCisgIG9wdGltaXplZCwgd2hpY2ggd291bGQgcmVzdWx0IGluIGZhc3RlciAiZ2l0IGJsYW1lIiBwcm9jZXNzaW5nLgorCisqIE1vc3Qgb2YgdGhlIHRlc3Qgc2NyaXB0cyAoYnV0IG5vdCB0aGUgb25lcyB0aGF0IHRyeSB0byBydW4gc2VydmVycykKKyAgY2FuIGJlIHJ1biBpbiBwYXJhbGxlbC4KKworKiBCYXNoIGNvbXBsZXRpb24gb2YgcmVmbmFtZXMgaW4gYSByZXBvc2l0b3J5IHdpdGggbWFzc2l2ZSBudW1iZXIgb2YKKyAgcmVmcyBoYXMgYmVlbiBvcHRpbWl6ZWQuCisKKyogQ3lnd2luIHBvcnQgdXNlcyBuYXRpdmUgc3RhdC9sc3RhdCBpbXBsZW1lbnRhdGlvbnMgd2hlbiBhcHBsaWNhYmxlLAorICB3aGljaCBsZWFkcyB0byBpbXByb3ZlZCBwZXJmb3JtYW5jZS4KKworKiAiZ2l0IHB1c2giIHBheXMgYXR0ZW50aW9uIHRvIGFsdGVybmF0ZSByZXBvc2l0b3JpZXMgdG8gYXZvaWQgc2VuZGluZworICB1bm5lY2Vzc2FyeSBvYmplY3RzLgorCisqICJnaXQgc3ZuIiBjYW4gcmVidWlsZCBhbiBvdXQtb2YtZGF0ZSByZXZfbWFwIGZpbGUuCisKKyh1c2FiaWxpdHksIGJlbGxzIGFuZCB3aGlzdGxlcykKKworKiBXaGVuIHlvdSBtaXN0eXBlIGEgY29tbWFuZCBuYW1lLCBnaXQgaGVscGZ1bGx5IHN1Z2dlc3RzIHdoYXQgaXQgZ3Vlc3NlcworICB5b3UgbWlnaHQgaGF2ZSBtZWFudCB0byBzYXkuICBoZWxwLmF1dG9jb3JyZWN0IGNvbmZpZ3VyYXRpb24gY2FuIGJlIHNldAorICB0byBhIG5vbi16ZXJvIHZhbHVlIHRvIGFjY2VwdCB0aGUgc3VnZ2VzdGlvbiB3aGVuIGdpdCBjYW4gdW5pcXVlbHkKKyAgZ3Vlc3MuCisKKyogVGhlIHBhY2tmaWxlIG1hY2hpbmVyeSBob3BlZnVsbHkgaXMgbW9yZSByb2J1c3Qgd2hlbiBkZWFsaW5nIHdpdGgKKyAgY29ycnVwdCBwYWNrcyBpZiByZWR1bmRhbnQgb2JqZWN0cyBpbnZvbHZlZCBpbiB0aGUgY29ycnVwdGlvbiBhcmUKKyAgYXZhaWxhYmxlIGVsc2V3aGVyZS4KKworKiAiZ2l0IGFkZCAtTiBwYXRoLi4uIiBhZGRzIHRoZSBuYW1lZCBwYXRocyBhcyBhbiBlbXB0eSBibG9iLCBzbyB0aGF0CisgIHN1YnNlcXVlbnQgImdpdCBkaWZmIiB3aWxsIHNob3cgYSBkaWZmIGFzIGlmIHRoZXkgYXJlIGNyZWF0aW9uIGV2ZW50cy4KKworKiAiZ2l0IGFkZCIgZ2FpbmVkIGEgYnVpbHQtaW4gc3lub255bSBmb3IgcGVvcGxlIHdobyB3YW50IHRvIHNheSAic3RhZ2UKKyAgY2hhbmdlcyIgaW5zdGVhZCBvZiAiYWRkIGNvbnRlbnRzIHRvIHRoZSBzdGFnaW5nIGFyZWEiIHdoaWNoIGFtb3VudHMKKyAgdG8gdGhlIHNhbWUgdGhpbmcuCisKKyogImdpdCBhcHBseSIgbGVhcm5lZCAtLWluY2x1ZGU9cGF0aHMgb3B0aW9uLCBzaW1pbGFyIHRvIHRoZSBleGlzdGluZworICAtLWV4Y2x1ZGU9cGF0aHMgb3B0aW9uLgorCisqICJnaXQgYmlzZWN0IiBpcyBjYXJlZnVsIGFib3V0IGEgdXNlciBtaXN0YWtlIGFuZCBzdWdnZXN0cyB0ZXN0aW5nIG9mCisgIG1lcmdlIGJhc2UgZmlyc3Qgd2hlbiBnb29kIGlzIG5vdCBhIHN0cmljdCBhbmNlc3RvciBvZiBiYWQuCisKKyogImdpdCBiaXNlY3Qgc2tpcCIgY2FuIHRha2UgYSByYW5nZSBvZiBjb21taXRzLgorCisqICJnaXQgYmxhbWUiIHJlLWVuY29kZXMgdGhlIGNvbW1pdCBtZXRhaW5mbyB0byBVVEYtOCBmcm9tIGkxOG4uY29tbWl0RW5jb2RpbmcKKyAgYnkgZGVmYXVsdC4KKworKiAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiIgY2FuIGNoZWNrIGF0dHJpYnV0ZXMgZm9yIG11bHRpcGxlIHBhdGhzLgorCisqICJnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4vaGFjayIgdXNlZCB0byBiZSBhIHN5bnRheCBlcnJvci4gIEl0IG5vdworICBEV0lNcyB0byBjcmVhdGUgYSBjb3JyZXNwb25kaW5nIGxvY2FsIGJyYW5jaCAiaGFjayIsIGkuZS4gYWN0cyBhcyBpZiB5b3UKKyAgc2FpZCAiZ2l0IGNoZWNrb3V0IC0tdHJhY2sgLWIgaGFjayBvcmlnaW4vaGFjayIuCisKKyogImdpdCBjaGVja291dCAtLW91cnMvLS10aGVpcnMiIGNhbiBiZSB1c2VkIHRvIGNoZWNrIG91dCBvbmUgc2lkZSBvZiBhCisgIGNvbmZsaWN0aW5nIG1lcmdlIGR1cmluZyBjb25mbGljdCByZXNvbHV0aW9uLgorCisqICJnaXQgY2hlY2tvdXQgLW0iIGNhbiBiZSB1c2VkIHRvIHJlY3JlYXRlIHRoZSBpbml0aWFsIGNvbmZsaWN0ZWQgc3RhdGUKKyAgZHVyaW5nIGNvbmZsaWN0IHJlc29sdXRpb24uCisKKyogImdpdCBjaGVycnktcGljayIgY2FuIGFsc28gdXRpbGl6ZSByZXJlcmUgZm9yIGNvbmZsaWN0IHJlc29sdXRpb24uCisKKyogImdpdCBjbG9uZSIgbGVhcm5lZCB0byBiZSB2ZXJib3NlIHdpdGggLXYKKworKiAiZ2l0IGNvbW1pdCAtLWF1dGhvcj0kbmFtZSIgY2FuIGxvb2sgdXAgYXV0aG9yIG5hbWUgZnJvbSBleGlzdGluZworICBjb21taXRzLgorCisqIG91dHB1dCBmcm9tICJnaXQgY29tbWl0IiBoYXMgYmVlbiByZXdvcmRlZCBpbiBhIG1vcmUgY29uY2lzZSBhbmQgeWV0CisgIG1vcmUgaW5mb3JtYXRpdmUgd2F5LgorCisqICJnaXQgY291bnQtb2JqZWN0cyIgcmVwb3J0cyB0aGUgb24tZGlzayBmb290cHJpbnQgZm9yIHBhY2tmaWxlcyBhbmQKKyAgdGhlaXIgY29ycmVzcG9uZGluZyBpZHggZmlsZXMuCisKKyogImdpdCBkYWVtb24iIGxlYXJuZWQgLS1tYXgtY29ubmVjdGlvbnM9PGNvdW50PiBvcHRpb24uCisKKyogImdpdCBkYWVtb24iIGV4cG9ydHMgUkVNT1RFX0FERFIgdG8gcmVjb3JkIGNsaWVudCBhZGRyZXNzLCBzbyB0aGF0CisgIHNwYXduZWQgcHJvZ3JhbXMgY2FuIGFjdCBkaWZmZXJlbnRseSBvbiBpdC4KKworKiAiZ2l0IGRlc2NyaWJlIC0tdGFncyIgZmF2b3VycyBjbG9zZXIgbGlnaHR3ZWlnaHQgdGFncyB0aGFuIGZhcnRoZXIKKyAgYW5ub3RhdGVkIHRhZ3Mgbm93LgorCisqICJnaXQgZGlmZiIgbGVhcm5lZCB0byBtaW1pYyAtLXN1cHByZXNzLWJsYW5rLWVtcHR5IGZyb20gR05VIGRpZmYgdmlhIGEKKyAgY29uZmlndXJhdGlvbiBvcHRpb24uCisKKyogImdpdCBkaWZmIiBsZWFybmVkIHRvIHB1dCBtb3JlIHNlbnNpYmxlIGh1bmsgaGVhZGVycyBmb3IgUHl0aG9uLAorICBIVE1MIGFuZCBPYmpDIGNvbnRlbnRzLgorCisqICJnaXQgZGlmZiIgbGVhcm5lZCB0byB2YXJ5IHRoZSBhLyB2cyBiLyBwcmVmaXggZGVwZW5kaW5nIG9uIHdoYXQgYXJlCisgIGJlaW5nIGNvbXBhcmVkLCBjb250cm9sbGVkIGJ5IGRpZmYubW5lbW9uaWNwcmVmaXggY29uZmlndXJhdGlvbi4KKworKiAiZ2l0IGRpZmYiIGxlYXJuZWQgLS1kaXJzdGF0LWJ5LWZpbGUgdG8gY291bnQgY2hhbmdlZCBmaWxlcywgbm90IG51bWJlcgorICBvZiBsaW5lcywgd2hlbiBzdW1tYXJpemluZyB0aGUgZ2xvYmFsIHBpY3R1cmUuCisKKyogImdpdCBkaWZmIiBsZWFybmVkICJ0ZXh0Y29udiIgZmlsdGVycyAtLS0gYSBiaW5hcnkgb3IgaGFyZC10by1yZWFkCisgIGNvbnRlbnRzIGNhbiBiZSBtdW5nZWQgaW50byBodW1hbiByZWFkYWJsZSBmb3JtIGFuZCB0aGUgZGlmZmVyZW5jZQorICBiZXR3ZWVuIHRoZSByZXN1bHRzIG9mIHRoZSBjb252ZXJzaW9uIGNhbiBiZSB2aWV3ZWQgKG9idmlvdXNseSB0aGlzCisgIGNhbm5vdCBwcm9kdWNlIGEgcGF0Y2ggdGhhdCBjYW4gYmUgYXBwbGllZCwgc28gdGhpcyBpcyBkaXNhYmxlZCBpbgorICBmb3JtYXQtcGF0Y2ggYW1vbmcgb3RoZXIgdGhpbmdzKS4KKworKiAiLS1jYWNoZWQiIG9wdGlvbiB0byAiZ2l0IGRpZmYgaGFzIGFuIGVhc2llciB0byByZW1lbWJlciBzeW5vbnltICItLXN0YWdlZCIsCisgIHRvIGFzayAid2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBnaXZlbiBjb21taXQgYW5kIHRoZQorICBjb250ZW50cyBzdGFnZWQgaW4gdGhlIGluZGV4PyIKKworKiAiZ2l0IGZvci1lYWNoLXJlZiIgbGVhcm5lZCAicmVmbmFtZTpzaG9ydCIgdG9rZW4gdGhhdCBnaXZlcyBhbgorICB1bmFtYmlndW91c2x5IGFiYnJldmlhdGVkIHJlZm5hbWUuCisKKyogQXV0by1udW1iZXJpbmcgb2YgdGhlIHN1YmplY3QgbGluZXMgaXMgdGhlIGRlZmF1bHQgZm9yICJnaXQKKyAgZm9ybWF0LXBhdGNoIiBub3cuCisKKyogImdpdCBncmVwIiBsZWFybmVkIHRvIGFjY2VwdCAteiBzaW1pbGFyIHRvIEdOVSBncmVwLgorCisqICJnaXQgaGVscCIgbGVhcm5lZCB0byB1c2UgR0lUX01BTl9WSUVXRVIgZW52aXJvbm1lbnQgdmFyaWFibGUgYmVmb3JlCisgIHVzaW5nICJtYW4iIHByb2dyYW0uCisKKyogImdpdCBpbWFwLXNlbmQiIGNhbiBvcHRpb25hbGx5IHRhbGsgU1NMLgorCisqICJnaXQgaW5kZXgtcGFjayIgaXMgbW9yZSBjYXJlZnVsIGFnYWluc3QgZGlzayBjb3JydXB0aW9uIHdoaWxlCisgIGNvbXBsZXRpbmcgYSB0aGluIHBhY2suCisKKyogImdpdCBsb2cgLS1jaGVjayIgYW5kICJnaXQgbG9nIC0tZXhpdC1jb2RlIiBwYXNzZXMgdGhlaXIgdW5kZXJseWluZyBkaWZmCisgIHN0YXR1cyB3aXRoIHRoZWlyIGV4aXQgc3RhdHVzIGNvZGUuCisKKyogImdpdCBsb2ciIGxlYXJuZWQgLS1zaW1wbGlmeS1tZXJnZXMsIGEgbWlsZGVyIHZhcmlhbnQgb2YgLS1mdWxsLWhpc3Rvcnk7CisgICJnaXRrIC0tc2ltcGxpZnktbWVyZ2VzIiBpcyBlYXNpZXIgdG8gdmlldyB0aGFuIHdpdGggLS1mdWxsLWhpc3RvcnkuCisKKyogImdpdCBsb2ciIGxlYXJuZWQgIi0tc291cmNlIiB0byBzaG93IHdoYXQgcmVmIGVhY2ggY29tbWl0IHdhcyByZWFjaGVkCisgIGZyb20uCisKKyogImdpdCBsb2ciIGFsc28gbGVhcm5lZCAiLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uIiB0byBzaG93IHRoZQorICBiaXJkcy1leWUtdmlldyBvZiB0aGUgdG9wb2xvZ3kgb2YgdGhlIGhpc3RvcnkuCisKKyogImdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiIgbGVhcm5lZCAiJWQiIGZvcm1hdCBlbGVtZW50IHRoYXQgaW5zZXJ0cworICBuYW1lcyBvZiB0YWdzIHRoYXQgcG9pbnQgYXQgdGhlIGNvbW1pdC4KKworKiAiZ2l0IG1lcmdlIC0tc3F1YXNoIiBhbmQgImdpdCBtZXJnZSAtLW5vLWZmIiBpbnRvIGFuIHVuYm9ybiBicmFuY2ggYXJlCisgIG5vdGljZWQgYXMgdXNlciBlcnJvcnMuCisKKyogImdpdCBtZXJnZSAtcyAkc3RyYXRlZ3kiIGNhbiB1c2UgYSBjdXN0b20gYnVpbHQgc3RyYXRlZ3kgaWYgeW91IGhhdmUgYQorICBjb21tYW5kICJnaXQtbWVyZ2UtJHN0cmF0ZWd5IiBvbiB5b3VyICRQQVRILgorCisqICJnaXQgcHVsbCIgKGFuZCAiZ2l0IGZldGNoIikgY2FuIGJlIHRvbGQgdG8gb3BlcmF0ZSAiLXYiZXJib3NlbHkgb3IKKyAgIi1xInVpZXRseS4KKworKiAiZ2l0IHB1c2giIGNhbiBiZSB0b2xkIHRvIHJlamVjdCBkZWxldGlvbiBvZiByZWZzIHdpdGggcmVjZWl2ZS5kZW55RGVsZXRlcworICBjb25maWd1cmF0aW9uLgorCisqICJnaXQgcmViYXNlIiBob25vdXJzIHByZS1yZWJhc2UgaG9vazsgdXNlIC0tbm8tdmVyaWZ5IHRvIGJ5cGFzcyBpdC4KKworKiAiZ2l0IHJlYmFzZSAtcCIgdXNlcyBpbnRlcmFjdGl2ZSByZWJhc2UgbWFjaGluZXJ5IG5vdyB0byBwcmVzZXJ2ZSB0aGUgbWVyZ2VzLgorCisqICJnaXQgcmVmbG9nIGV4cGlyZSBicmFuY2giIGNhbiBiZSB1c2VkIGluIHBsYWNlIG9mICJnaXQgcmVmbG9nIGV4cGlyZQorICByZWZzL2hlYWRzL2JyYW5jaCIuCisKKyogImdpdCByZW1vdGUgc2hvdyAkcmVtb3RlIiBsaXN0cyByZW1vdGUgYnJhbmNoZXMgb25lLXBlci1saW5lIG5vdy4KKworKiAiZ2l0IHNlbmQtZW1haWwiIGNhbiBiZSBnaXZlbiByZXZpc2lvbiByYW5nZSBpbnN0ZWFkIG9mIGZpbGVzIGFuZAorICBtYWlsZGlycyBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgYXV0b21hdGljYWxseSBydW5zIGZvcm1hdC1wYXRjaCB0bworICBnZW5lcmF0ZSBwYXRjaGVzIGZvciB0aGUgZ2l2ZW4gcmV2aXNpb24gcmFuZ2UuCisKKyogImdpdCBzdWJtb2R1bGUgZm9yZWFjaCIgc3ViY29tbWFuZCBhbGxvd3MgeW91IHRvIGl0ZXJhdGUgb3ZlciBjaGVja2VkCisgIG91dCBzdWJtb2R1bGVzLgorCisqICJnaXQgc3VibW9kdWxlIHN5bmMiIHN1YmNvbW1hbmRzIGFsbG93cyB5b3UgdG8gdXBkYXRlIHRoZSBvcmlnaW4gVVJMCisgIHJlY29yZGVkIGluIHN1Ym1vZHVsZSBkaXJlY3RvcmllcyBmcm9tIHRoZSB0b3BsZXZlbCAuZ2l0bW9kdWxlcyBmaWxlLgorCisqICJnaXQgc3ZuIGJyYW5jaCIgY2FuIGNyZWF0ZSBuZXcgYnJhbmNoZXMgb24gdGhlIG90aGVyIGVuZC4KKworKiAiZ2l0d2ViIiBjYW4gdXNlIG1vcmUgc2FuZXIgUEFUSF9JTkZPIGJhc2VkIFVSTC4KKworKGludGVybmFsKQorCisqICJnaXQgaGFzaC1vYmplY3QiIGxlYXJuZWQgdG8gbGllIGFib3V0IHRoZSBwYXRoIGJlaW5nIGhhc2hlZCwgc28gdGhhdAorICBjb3JyZWN0IGdpdGF0dHJpYnV0ZXMgcHJvY2Vzc2luZyBjYW4gYmUgZG9uZSB3aGlsZSBoYXNoaW5nIGNvbnRlbnRzCisgIHN0b3JlZCBpbiBhIHRlbXBvcmFyeSBmaWxlLgorCisqIHZhcmlvdXMgY2FsbGVycyBvZiBnaXQtbWVyZ2UtcmVjdXJzaXZlIGF2b2lkIGZvcmtpbmcgaXQgYXMgYW4gZXh0ZXJuYWwKKyAgcHJvY2Vzcy4KKworKiBHaXQgY2xhc3MgZGVmaW5lZCBpbiAiR2l0LnBtIiBjYW4gYmUgc3ViY2xhc3NlcyBhIGJpdCBtb3JlIGVhc2lseS4KKworKiBXZSB1c2VkIHRvIGxpbmsgR05VIHJlZ2V4IGxpYnJhcnkgYXMgYSBjb21wYXRpYmlsaXR5IGxheWVyIGZvciBzb21lCisgIHBsYXRmb3JtcywgYnV0IGl0IHR1cm5zIG91dCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIG1vc3Qgb2YgdGhlbS4KKworKiBTb21lIHBhdGggaGFuZGxpbmcgcm91dGluZXMgdXNlZCBmaXhlZCBudW1iZXIgb2YgYnVmZmVycyB1c2VkIGFsdGVybmF0ZWx5CisgIGJ1dCBkZXBlbmRpbmcgb24gdGhlIGNhbGwgZGVwdGgsIHRoaXMgYXJyYW5nZW1lbnQgbGVkIHRvIGhhcmQgdG8gdHJhY2sKKyAgYnVncy4gIFRoaXMgaXNzdWUgaXMgYmVpbmcgYWRkcmVzc2VkLgorCisKK0ZpeGVzIHNpbmNlIHYxLjYuMAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNi4wLlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisqIFBvcmNlbGFpbnMgaW1wbGVtZW50ZWQgYXMgc2hlbGwgc2NyaXB0cyB3ZXJlIHV0dGVybHkgY29uZnVzZWQgd2hlbiB5b3UKKyAgZW50ZXJlZCB0byBhIHN1YmRpcmVjdG9yeSBvZiBhIHdvcmsgdHJlZSBmcm9tIHNpZGV3YXlzLCBmb2xsb3dpbmcgYQorICBzeW1ib2xpYyBsaW5rICh0aGlzIG1heSBuZWVkIHRvIGJlIGJhY2twb3J0ZWQgdG8gb2xkZXIgcmVsZWFzZXMgbGF0ZXIpLgorCisqIFRyYWNraW5nIHN5bWJvbGljIGxpbmtzIHdvdWxkIHdvcmsgYmV0dGVyIG9uIGZpbGVzeXN0ZW1zIHdob3NlIGxzdGF0KCkKKyAgcmV0dXJucyBpbmNvcnJlY3Qgc3Rfc2l6ZSB2YWx1ZSBmb3IgdGhlbS4KKworKiAiZ2l0IGFkZCIgYW5kICJnaXQgdXBkYXRlLWluZGV4IiBpbmNvcnJlY3RseSBhbGxvd2VkIGFkZGluZyBTL0Ygd2hlbiBTCisgIGlzIGEgdHJhY2tlZCBzeW1saW5rIHRoYXQgcG9pbnRzIGF0IGEgZGlyZWN0b3J5IEQgdGhhdCBoYXMgYSBwYXRoIEYgaW4KKyAgaXQgKHdlIHN0aWxsIG5lZWQgdG8gZml4IGEgc2ltaWxhciBub25zZW5zZSB3aGVuIFMgaXMgYSBzdWJtb2R1bGUgYW5kIEYKKyAgaXMgYSBwYXRoIGluIGl0KS4KKworKiAiZ2l0IGFtIiBhZnRlciBzdG9wcGluZyBhdCBhIGJyb2tlbiBwYXRjaCBsb3N0IC0td2hpdGVzcGFjZSwgLUMsIC1wIGFuZAorICAtLTN3YXkgb3B0aW9ucyBnaXZlbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUgaW5pdGlhbGx5LgorCisqICJnaXQgZGlmZiAtLXN0ZGluIiB1c2VkIHRvIHRha2UgdHdvIHRyZWVzIG9uIGEgbGluZSBhbmQgY29tcGFyZWQgdGhlbSwKKyAgYnV0IHdlIGRyb3BwZWQgc3VwcG9ydCBmb3Igc3VjaCBhIHVzZSBjYXNlIGxvbmcgdGltZSBhZ28uICBUaGlzIGhhcworICBiZWVuIHJlc3VycmVjdGVkLgorCisqICJnaXQgZmlsdGVyLWJyYW5jaCIgZmFpbGVkIHRvIHJld3JpdGUgYSB0YWcgbmFtZSB3aXRoIHNsYXNoZXMgaW4gaXQuCisKKyogImdpdCBodHRwLXB1c2giIGRpZCBub3QgdW5kZXJzdGFuZCBVUkkgc2NoZW1lIG90aGVyIHRoYW4gb3BhcXVlbG9ja3Rva2VuCisgIHdoZW4gYWNxdWlyaW5nIGEgbG9jayBmcm9tIHRoZSBzZXJ2ZXIgKHRoaXMgbWF5IG5lZWQgdG8gYmUgYmFja3BvcnRlZCB0bworICBvbGRlciByZWxlYXNlcyBsYXRlcikuCisKKyogQWZ0ZXIgImdpdCByZWJhc2UgLXAiIHN0b3BwZWQgd2l0aCBjb25mbGljdHMgd2hpbGUgcmVwbGF5aW5nIGEgbWVyZ2UsCisgImdpdCByZWJhc2UgLS1jb250aW51ZSIgZGlkIG5vdCB3b3JrIChtYXkgbmVlZCB0byBiZSBiYWNrcG9ydGVkIHRvIG9sZGVyCisgIHJlbGVhc2VzKS4KKworKiAiZ2l0IHJldmVydCIgcmVjb3JkcyByZWxhdGl2ZSB0byB3aGljaCBwYXJlbnQgYSByZXZlcnQgd2FzIG1hZGUgd2hlbgorICByZXZlcnRpbmcgYSBtZXJnZS4gIFRvZ2V0aGVyIHdpdGggbmV3IGRvY3VtZW50YXRpb24gdGhhdCBleHBsYWlucyBpc3N1ZXMKKyAgYXJvdW5kIHJldmVydGluZyBhIG1lcmdlIGFuZCBtZXJnaW5nIGZyb20gdGhlIHVwZGF0ZWQgYnJhbmNoIGxhdGVyLCB0aGlzCisgIGhvcGVmdWxseSB3aWxsIHJlZHVjZSB1c2VyIGNvbmZ1c2lvbiAodGhpcyBtYXkgbmVlZCB0byBiZSBiYWNrcG9ydGVkIHRvCisgIG9sZGVyIHJlbGVhc2VzIGxhdGVyKS4KKworKiAiZ2l0IHJtIC0tY2FjaGVkIiB1c2VkIHRvIGFsbG93IGFuIGVtcHR5IGJsb2IgdGhhdCB3YXMgYWRkZWQgZWFybGllciB0bworICBiZSByZW1vdmVkIHdpdGhvdXQgLS1mb3JjZSwgZXZlbiB3aGVuIHRoZSBmaWxlIGluIHRoZSB3b3JrIHRyZWUgaGFzCisgIHNpbmNlIGJlZW4gbW9kaWZpZWQuCisKKyogImdpdCBwdXNoIC0tdGFncyAtLWFsbCAkdGhlcmUiIGZhaWxlZCB3aXRoIGdlbmVyaWMgdXNhZ2UgbWVzc2FnZSB3aXRob3V0CisgIHRlbGxpbmcgc2F5aW5nIHRoZXNlIHR3byBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuCisKKyogImdpdCBsb2cgLS1hdXRob3IvLS1jb21taXR0ZXIiIG1hdGNoIHVzZWQgdG8gcG90ZW50aWFsbHkgbWF0Y2ggdGhlCisgIHRpbWVzdGFtcCBwYXJ0LCBleHBvc2luZyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuICBBbHNvIHRoZXNlIGRpZAorICBub3Qgd29yayB3aXRoIC0tZml4ZWQtc3RyaW5ncyBtYXRjaCBhdCBhbGwuCisKKyogImdpdHdlYiIgZGlkIG5vdCBtYXJrIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGltcG9ydGVkIGZyb20gZXh0ZXJuYWwgSFRNTCBmcmFnbWVudHMKKyAgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZhMzY0MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuMS50eHQKQEAgLTAsMCArMSwxOSBAQAorR0lUIHYxLjYuMi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogLmdpdGlnbm9yZSBsZWFybmVkIHRvIGhhbmRsZSBiYWNrc2xhc2ggYXMgYSBxdW90aW5nIG1lY2hhbmlzbSBmb3IKKyAgY29tbWVudCBpbnRyb2R1Y3Rpb24gY2hhcmFjdGVyICIjIi4KKworKiB0aW1lc3RhbXAgb3V0cHV0IGluIC0tZGF0ZT1yZWxhdGl2ZSBtb2RlIHVzZWQgdG8gZGlzcGxheSB0aW1lc3RhbXBzIHRoYXQKKyAgYXJlIGxvbmcgdGltZSBhZ28gaW4gdGhlIGRlZmF1bHQgbW9kZTsgaXQgbm93IHVzZXMgIk4geWVhcnMgTSBtb250aHMKKyAgYWdvIiwgYW5kICJOIHllYXJzIGFnbyIuCisKKyogZ2l0LWFkZCAtaS8tcCBub3cgd29ya3Mgd2l0aCBub24tQVNDSUkgcGF0aG5hbWVzLgorCisqICJnaXQgaGFzaC1vYmplY3QgLXciIGRpZCBub3QgcmVhZCBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZnJvbSB0aGUKKyAgY29ycmVjdCAuZ2l0IGRpcmVjdG9yeS4KKworKiBnaXQtc2VuZC1lbWFpbCBsZWFybmVkIHRvIGNvcnJlY3RseSBoYW5kbGUgbXVsdGlwbGUgQ2M6IGFkZHJlc3Nlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZmE5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjIudHh0CkBAIC0wLDAgKzEsNDUgQEAKK0dJVCB2MS42LjIuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjIuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBBIGxvbmdzdGFuZGluZyBjb25mdXNpbmcgZGVzY3JpcHRpb24gb2Ygd2hhdCAtLXBpY2theGUgb3B0aW9uIG9mCisgIGdpdC1kaWZmIGRvZXMgaGFzIGJlZW4gY2xhcmlmaWVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCisqICJnaXQtYmxhbWUgLVMiIGRpZCBub3QgcXVpdGUgd29yayBuZWFyIHRoZSBjb21taXRzIHRoYXQgd2VyZSBnaXZlbgorICBvbiB0aGUgY29tbWFuZCBsaW5lIGNvcnJlY3RseS4KKworKiAiZ2l0IGRpZmYgLS1waWNrYXhlLXJlZ2V4cCIgZGlkIG5vdCBjb3VudCBvdmVybGFwcGluZyBtYXRjaGVzCisgIGNvcnJlY3RseS4KKworKiAiZ2l0IGRpZmYiIGRpZCBub3QgZmVlZCBmaWxlcyBpbiB3b3JrLXRyZWUgcmVwcmVzZW50YXRpb24gdG8gZXh0ZXJuYWwKKyAgZGlmZiBhbmQgdGV4dGNvbnYuCisKKyogImdpdC1mZXRjaCIgaW4gYSByZXBvc2l0b3J5IHRoYXQgd2FzIG5vdCBjbG9uZWQgZnJvbSBhbnl3aGVyZSBzYWlkCisgIGl0IGNhbm5vdCBmaW5kICdvcmlnaW4nLCB3aGljaCB3YXMgaGFyZCB0byB1bmRlcnN0YW5kIGZvciBuZXcgcGVvcGxlLgorCisqICJnaXQtZm9ybWF0LXBhdGNoIC0tbnVtYmVyZWQtZmlsZXMgLS1zdGRvdXQiIGRpZCBub3QgaGF2ZSB0byBkaWUgb2YKKyAgaW5jb21wYXRpYmxlIG9wdGlvbnM7IGl0IG5vdyBzaW1wbHkgaWdub3JlcyAtLW51bWJlcmVkLWZpbGVzIGFzIG5vIGZpbGVzCisgIGFyZSBwcm9kdWNlZCBhbnl3YXkuCisKKyogImdpdC1scy1maWxlcyAtLWRlbGV0ZWQiIGRpZCBub3Qgd29yayB3ZWxsIHdpdGggR0lUX0RJUiZHSVRfV09SS19UUkVFLgorCisqICJnaXQtcmVhZC10cmVlIEEgQiBDLi4uIiB3aXRob3V0IC1tIG9wdGlvbiBoYXMgYmVlbiBicm9rZW4gZm9yIGEgbG9uZworICB0aW1lLgorCisqIGdpdC1zZW5kLWVtYWlsIGlnbm9yZWQgLS1pbi1yZXBseS10byB3aGVuIC0tbm8tdGhyZWFkIHdhcyBnaXZlbi4KKworKiAnZ2l0LXN1Ym1vZHVsZSBhZGQnIGRpZCBub3QgdG9sZXJhdGUgZXh0cmEgc2xhc2hlcyBhbmQgLi8gaW4gdGhlIHBhdGggaXQKKyAgYWNjZXB0ZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lOyBpdCBub3cgaXMgbW9yZSBsZW5pZW50LgorCisqIGdpdC1zdm4gbWlzYmVoYXZlZCB3aGVuIHRoZSBwcm9qZWN0IGNvbnRhaW5lZCBhIHBhdGggdGhhdCBiZWdhbiB3aXRoCisgIHR3byBkYXNoZXMuCisKKyogaW1wb3J0LXppcHMgc2NyaXB0IChpbiBjb250cmliKSBkaWQgbm90IGNvbXB1dGUgdGhlIGNvbW1vbiBkaXJlY3RvcnkKKyAgcHJlZml4IGNvcnJlY3RseS4KKworKiBtaXNjb21waWxhdGlvbiBvZiBuZWdhdGVkIGVudW0gY29uc3RhbnRzIGJ5IG9sZCBnY2MgKDIuOSkgYWZmZWN0ZWQgdGhlCisgIGNvZGVwYXRocyB0byBzcGF3biBzdWJwcm9jZXNzZXMuCisKK01hbnkgc21hbGwgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZCBhcyB3ZWxsLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzYzFhYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuMy50eHQKQEAgLTAsMCArMSwyMiBAQAorR0lUIHYxLjYuMi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMi4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFNldHRpbmcgYW4gb2N0YWwgbW9kZSB2YWx1ZSB0byBjb3JlLnNoYXJlZHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiB0bworICByZXN0cmljdCBhY2Nlc3MgdG8gdGhlIHJlcG9zaXRvcnkgdG8gZ3JvdXAgbWVtYmVycyBkaWQgbm90IHdvcmsgYXMKKyAgYWR2ZXJ0aXNlZC4KKworKiBBIGZhaXJseSBsYXJnZSBhbmQgdHJpdmlhbCBtZW1vcnkgbGVhayB3aGlsZSByZXYtbGlzdCBzaG93cyBsaXN0IG9mCisgIHJlYWNoYWJsZSBvYmplY3RzIGhhcyBiZWVuIGlkZW50aWZpZWQgYW5kIHBsdWdnZWQuCisKKyogImdpdC1jb21taXQgLS1pbnRlcmFjdGl2ZSIgZGlkIG5vdCBhYm9ydCB3aGVuIHVuZGVybHlpbmcgImdpdC1hZGQgLWkiCisgIHNpZ25hbGVkIGEgZmFpbHVyZS4KKworKiBnaXQtcmVwYWNrIChpbnZva2VkIGZyb20gZ2l0LWdjKSBkaWQgbm90IHdvcmsgYXMgbmljZWx5IGFzIGl0IHNob3VsZCBpbgorICBhIHJlcG9zaXRvcnkgdGhhdCBib3Jyb3dzIG9iamVjdHMgZnJvbSBuZWlnaGJvdXJzIHZpYSBhbHRlcm5hdGVzCisgIG1lY2hhbmlzbSBlc3BlY2lhbGx5IHdoZW4gc29tZSBwYWNrcyBhcmUgbWFya2VkIHdpdGggdGhlICIua2VlcCIgZmxhZworICB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyByZXBhY2tlZC4KKworTWFueSBzbWFsbCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkIGFzIHdlbGwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGJmMWQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi40LnR4dApAQCAtMCwwICsxLDM5IEBACitHSVQgdjEuNi4yLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4yLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIGNvbmZpZ3VyYXRpb24gcGFyc2VyIGhhZCBhIGJ1ZmZlciBvdmVyZmxvdyB3aGlsZSBwYXJzaW5nIGFuIG92ZXJsb25nCisgIHZhbHVlLgorCisqIHBydW5pbmcgcmVmbG9nIGVudHJpZXMgdGhhdCBhcmUgdW5yZWFjaGFibGUgZnJvbSB0aGUgdGlwIG9mIHRoZSByZWYKKyAgZHVyaW5nICJnaXQgcmVmbG9nIHBydW5lIiAoaGVuY2UgImdpdCBnYyIpIHdhcyB2ZXJ5IGluZWZmaWNpZW50LgorCisqICJnaXQtYWRkIC1wIiBsYWNrZWQgYSB3YXkgdG8gc2F5ICJxInVpdCB0byByZWZ1c2Ugc3RhZ2luZyBhbnkgaHVua3MgZm9yCisgIHRoZSByZW1haW5pbmcgcGF0aHMuICBZb3UgaGFkIHRvIHNheSAiZCIgYW5kIHRoZW4gXkMuCisKKyogImdpdC1jaGVja291dCA8dHJlZS1pc2g+IDxzdWJtb2R1bGU+IiBkaWQgbm90IHVwZGF0ZSB0aGUgaW5kZXggZW50cnkgYXQKKyAgdGhlIG5hbWVkIHBhdGg7IGl0IG5vdyBkb2VzLgorCisqICJnaXQtZmFzdC1leHBvcnQiIGNob2tlZCB3aGVuIHNlZWluZyBhIHRhZyB0aGF0IGRvZXMgbm90IHBvaW50IGF0IGNvbW1pdC4KKworKiAiZ2l0IGluaXQiIHNlZ2ZhdWx0ZWQgd2hlbiBnaXZlbiBhbiBvdmVybG9uZyB0ZW1wbGF0ZSBsb2NhdGlvbiB2aWEKKyAgdGhlIC0tdGVtcGxhdGU9IG9wdGlvbi4KKworKiAiZ2l0LWxzLXRyZWUiIGFuZCAiZ2l0LWRpZmYtdHJlZSIgdXNlZCBhIHBhdGhzcGVjIGNvcnJlY3RseSB3aGVuCisgIGRlY2lkaW5nIHRvIGRlc2NlbmQgaW50byBhIHN1YmRpcmVjdG9yeSBidXQgdGhleSBkaWQgbm90IG1hdGNoIHRoZQorICBpbmRpdmlkdWFsIHBhdGhzIGNvcnJlY3RseS4gIFRoaXMgY2F1c2VkIHBhdGhzcGVjcyAiYWJjL2QgYWIiIHRvIG1hdGNoCisgICJhYmMvMCIgKCJhYmMvZCIgbWFkZSB0aGVtIGRlY2lkZSB0byBkZXNjZW5kIGludG8gdGhlIGRpcmVjdG9yeSAiYWJjLyIsCisgIGFuZCB0aGVuICJhYiIgaW5jb3JyZWN0bHkgbWF0Y2hlZCAiYWJjLzAiIHdoZW4gaXQgc2hvdWxkbid0KS4KKworKiAiZ2l0LW1lcmdlLXJlY3Vyc2l2ZSIgd2FzIGJyb2tlbiB3aGVuIGEgc3VibW9kdWxlIGVudHJ5IHdhcyBpbnZvbHZlZCBpbgorICBhIGNyaXNzLWNyb3NzIG1lcmdlIHNpdHVhdGlvbi4KKworTWFueSBzbWFsbCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkIGFzIHdlbGwuCisKKy0tLQorZXhlYyA+L3Zhci90bXAvMQorZWNobyBPPSQoZ2l0IGRlc2NyaWJlIG1haW50KQorTz12MS42LjIuMy0zOC1nMzE4Yjg0NworZ2l0IHNob3J0bG9nIC0tbm8tbWVyZ2VzICRPLi5tYWludApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzZjllOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuNS50eHQKQEAgLTAsMCArMSwyMSBAQAorR0lUIHYxLjYuMi41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMi40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgYXBwbHkiIG1pc2hhbmRsZWQgaWYgeW91IGZlZCBhIGdpdCBnZW5lcmF0ZWQgcGF0Y2ggdGhhdCByZW5hbWVzCisgIGZpbGUgQSB0byBCIGFuZCBmaWxlIEIgdG8gQSBhdCB0aGUgc2FtZSB0aW1lLgorCisqICJnaXQgZGlmZiAtYyAtcCIgKGFuZCAiZGlmZiAtLWNjIikgZGlkIG5vdCBleHBlY3QgdG8gc2VlIHN1Ym1vZHVsZQorICBkaWZmZXJlbmNlcyBhbmQgaW5zdGVhZCByZWZ1c2VkIHRvIHdvcmsuCisKKyogImdpdCBncmVwIC1lICcoJyIgc2VnZmF1bHRlZCwgaW5zdGVhZCBvZiBkaWFnbm9zaW5nIGEgbWlzbWF0Y2hlZAorICBwYXJlbnRoZXNlcyBlcnJvci4KKworKiAiZ2l0IGZldGNoIiBnZW5lcmF0ZWQgcGFja3Mgd2l0aCBvZmZzZXQtZGVsdGEgZW5jb2Rpbmcgd2hlbiBib3RoIGVuZHMgb2YKKyAgdGhlIGNvbm5lY3Rpb24gYXJlIGNhcGFibGUgb2YgcHJvZHVjaW5nIG9uZTsgdGhpcyBjYW5ub3QgYmUgcmVhZCBieQorICBhbmNpZW50IGdpdCBhbmQgdGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gZGlzYWJsZSB0aGlzIGJ5IHNldHRpbmcKKyAgcmVwYWNrLnVzZWRlbHRhYmFzZW9mZnNldCBjb25maWd1cmF0aW9uIHRvIGZhbHNlLgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgwYWRmYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIudHh0CkBAIC0wLDAgKzEsMTY0IEBACitHSVQgdjEuNi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitXaXRoIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UsICJnaXQgcHVzaCIgaW50byBhIGJyYW5jaCB0aGF0IGlzCitjdXJyZW50bHkgY2hlY2tlZCBvdXQgd2lsbCBiZSByZWZ1c2VkIGJ5IGRlZmF1bHQuICBZb3UgY2FuIGNob29zZQord2hhdCBzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbgordmFyaWFibGUgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkuCisKK1RvIGVhc2UgdGhlIHRyYW5zaXRpb24gcGxhbiwgdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5IG9mIHN1Y2ggYQorcHVzaCBydW5uaW5nIHRoaXMgcmVsZWFzZSB3aWxsIGlzc3VlIGEgYmlnIHdhcm5pbmcgd2hlbiB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgbWlzc2luZy4gIFBsZWFzZSByZWZlciB0bzoKKworICBodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvR2l0RmFxI25vbi1iYXJlCisgIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83dmJwdGxzdXl2LmZzZkBnaXRzdGVyLnNpYW1lc2UuZHluZG5zLm9yZy8KKworZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmVhc29uIHdoeSB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kIHRoZQordHJhbnNpdGlvbiBwbGFuLgorCitGb3IgYSBzaW1pbGFyIHJlYXNvbiwgImdpdCBwdXNoICR0aGVyZSA6JGtpbGxlZCIgdG8gZGVsZXRlIHRoZSBicmFuY2gKKyRraWxsZWQgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSAkdGhlcmUsIGlmICRraWxsZWQgYnJhbmNoIGlzIHRoZSBjdXJyZW50CiticmFuY2ggcG9pbnRlZCBhdCBieSBpdHMgSEVBRCwgZ2V0cyBhIGxhcmdlIHdhcm5pbmcuICBZb3UgY2FuIGNob29zZSB3aGF0CitzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkuCisKKworVXBkYXRlcyBzaW5jZSB2MS42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisqIGdpdC1zdm4gdXBkYXRlcy4KKworKiBnaXR3ZWIgdXBkYXRlcywgaW5jbHVkaW5nIGEgbmV3IHBhdGNoIHZpZXcgYW5kIFJTUy9BdG9tIGZlZWQKKyAgaW1wcm92ZW1lbnRzLgorCisqIChjb250cmliL2VtYWNzKSBnaXQuZWwgbm93IGhhcyBjb21tYW5kcyBmb3IgY2hlY2tpbmcgb3V0IGEgYnJhbmNoLAorICBjcmVhdGluZyBhIGJyYW5jaCwgY2hlcnJ5LXBpY2tpbmcgYW5kIHJldmVydGluZyBjb21taXRzOyB2Yy1naXQuZWwKKyAgaXMgbm90IHNoaXBwZWQgd2l0aCBnaXQgYW55bW9yZSAoaXQgaXMgcGFydCBvZiBvZmZpY2lhbCBFbWFjcykuCisKKyhwZXJmb3JtYW5jZSkKKworKiBwYWNrLW9iamVjdHMgYXV0b2RldGVjdHMgdGhlIG51bWJlciBvZiBDUFVzIGF2YWlsYWJsZSBhbmQgdXNlcyB0aHJlYWRlZAorICB2ZXJzaW9uLgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyogYXV0b21hdGljIHR5cG8gY29ycmVjdGlvbiB3b3JrcyBvbiBhbGlhc2VzIGFzIHdlbGwKKworKiBAey0xfSBpcyBhIHdheSB0byByZWZlciB0byB0aGUgbGFzdCBicmFuY2ggeW91IHdlcmUgb24uICBUaGlzIGlzCisgIGFjY2VwdGVkIG5vdCBvbmx5IHdoZXJlIGFuIG9iamVjdCBuYW1lIGlzIGV4cGVjdGVkLCBidXQgYW55d2hlcmUKKyAgYSBicmFuY2ggbmFtZSBpcyBleHBlY3RlZCBhbmQgYWN0cyBhcyBpZiB5b3UgdHlwZWQgdGhlIGJyYW5jaCBuYW1lLgorICBFLmcuICJnaXQgYnJhbmNoIC0tdHJhY2sgbXlicmFuY2ggQHstMX0iLCAiZ2l0IG1lcmdlIEB7LTF9IiwgYW5kCisgICJnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIEB7LTF9IiB3b3VsZCB3b3JrIGFzIGV4cGVjdGVkLgorCisqIFdoZW4gcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIHBvaW50cyBhdCBhIHJlbW90ZSB0cmFja2luZyBicmFuY2ggdGhhdAorICBoYXMgYmVlbiBwcnVuZWQgYXdheSwgbWFueSBnaXQgb3BlcmF0aW9ucyBpc3N1ZWQgd2FybmluZyB3aGVuIHRoZXkKKyAgaW50ZXJuYWxseSBlbnVtZXJhdGVkIHRoZSByZWZzLiAgV2Ugbm93IHdhcm4gb25seSB3aGVuIHlvdSBzYXkgIm9yaWdpbiIKKyAgdG8gcmVmZXIgdG8gdGhhdCBwcnVuZWQgYnJhbmNoLgorCisqIFRoZSBsb2NhdGlvbiBvZiAubWFpbG1hcCBmaWxlIGNhbiBiZSBjb25maWd1cmVkLCBhbmQgaXRzIGZpbGUgZm9ybWF0IHdhcworICBlbmhhbmNlZCB0byBhbGxvdyBtYXBwaW5nIGFuIGluY29ycmVjdCBlLW1haWwgZmllbGQgYXMgd2VsbC4KKworKiAiZ2l0IGFkZCAtcCIgbGVhcm5lZCAnZydvdG8gYWN0aW9uIHRvIGp1bXAgZGlyZWN0bHkgdG8gYSBodW5rLgorCisqICJnaXQgYWRkIC1wIiBsZWFybmVkIHRvIGZpbmQgYSBodW5rIHdpdGggZ2l2ZW4gdGV4dCB3aXRoICcvJy4KKworKiAiZ2l0IGFkZCAtcCIgb3B0aW9uYWxseSBjYW4gYmUgdG9sZCB0byB3b3JrIHdpdGgganVzdCB0aGUgY29tbWFuZCBsZXR0ZXIKKyAgd2l0aG91dCBFbnRlci4KKworKiB3aGVuICJnaXQgYW0iIHN0b3BzIHVwb24gYSBwYXRjaCB0aGF0IGRvZXMgbm90IGFwcGx5LCBpdCBzaG93cyB0aGUKKyAgdGl0bGUgb2YgdGhlIG9mZmVuZGluZyBwYXRjaC4KKworKiAiZ2l0IGFtIC0tZGlyZWN0b3J5PTxkaXI+IiBhbmQgImdpdCBhbSAtLXJlamVjdCIgcGFzc2VzIHRoZXNlIG9wdGlvbnMKKyAgdG8gdW5kZXJseWluZyAiZ2l0IGFwcGx5Ii4KKworKiAiZ2l0IGFtIiBsZWFybmVkIC0taWdub3JlLWRhdGUgb3B0aW9uLgorCisqICJnaXQgYmxhbWUiIGFsaWducyBhdXRob3IgbmFtZXMgYmV0dGVyIHdoZW4gdGhleSBhcmUgc3BlbGxlZCBpbgorICBub24gVVMtQVNDSUkgZW5jb2RpbmcuCisKKyogImdpdCBjbG9uZSIgbm93IG1ha2VzIGl0cyBiZXN0IGVmZm9ydCB3aGVuIGNsb25pbmcgZnJvbSBhbiBlbXB0eQorICByZXBvc2l0b3J5IHRvIHNldCB1cCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0byByZWZlciB0byB0aGUgcmVtb3RlCisgIHJlcG9zaXRvcnkuCisKKyogImdpdCBjaGVja291dCAtIiBpcyBhIHNob3J0aGFuZCBmb3IgImdpdCBjaGVja291dCBAey0xfSIuCisKKyogImdpdCBjaGVycnkiIGRlZmF1bHRzIHRvIHdoYXRldmVyIHRoZSBjdXJyZW50IGJyYW5jaCBpcyB0cmFja2luZyAoaWYKKyAgZXhpc3RzKSB3aGVuIHRoZSA8dXBzdHJlYW0+IGFyZ3VtZW50IGlzIG5vdCBnaXZlbi4KKworKiAiZ2l0IGN2c3NlcnZlciIgY2FuIGJlIHRvbGQgbm90IHRvIGFkZCBleHRyYSAidmlhIGdpdC1DVlMgZW11bGF0b3IiIHRvCisgIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgaXQgc2VydmVzIHZpYSBnaXRjdnMuY29tbWl0bXNnYW5ub3RhdGlvbgorICBjb25maWd1cmF0aW9uLgorCisqICJnaXQgY3Zzc2VydmVyIiBsZWFybmVkIHRvIGhhbmRsZSAnbm9vcCcgY29tbWFuZCBzb21lIENWUyBjbGllbnRzIHNlZW0KKyAgdG8gZXhwZWN0IHRvIHdvcmsuCisKKyogImdpdCBkaWZmIiBsZWFybmVkIGEgbmV3IG9wdGlvbiAtLWludGVyLWh1bmstY29udGV4dCB0byBjb2FsZXNjZSBjbG9zZQorICBodW5rcyB0b2dldGhlciBhbmQgc2hvdyBjb250ZXh0IGJldHdlZW4gdGhlbS4KKworKiBUaGUgZGVmaW5pdGlvbiBvZiB3aGF0IGNvbnN0aXR1dGVzIGEgd29yZCBmb3IgImdpdCBkaWZmIC0tY29sb3Itd29yZHMiCisgIGNhbiBiZSBjdXN0b21pemVkIHZpYSBnaXRhdHRyaWJ1dGVzLCBjb21tYW5kIGxpbmUgb3IgYSBjb25maWd1cmF0aW9uLgorCisqICJnaXQgZGlmZiIgbGVhcm5lZCAtLXBhdGllbmNlIHRvIHJ1biAicGF0aWVuY2UgZGlmZiIgYWxnb3JpdGhtLgorCisqICJnaXQgZmlsdGVyLWJyYW5jaCIgbGVhcm5lZCAtLXBydW5lLWVtcHR5IG9wdGlvbiB0aGF0IGRpc2NhcmRzIGNvbW1pdHMKKyAgdGhhdCBkbyBub3QgY2hhbmdlIHRoZSBjb250ZW50cy4KKworKiAiZ2l0IGZzY2siIG5vdyBjaGVja3MgbG9vc2Ugb2JqZWN0cyBpbiBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlcywgaW5zdGVhZAorICBvZiBtaXNyZXBvcnRpbmcgdGhlbSBhcyBtaXNzaW5nLgorCisqICJnaXQgZ2MgLS1wcnVuZSIgd2FzIHJlc3VycmVjdGVkIHRvIGFsbG93ICJnaXQgZ2MgLS1uby1wcnVuZSIgYW5kCisgIGdpdmluZyBub24tZGVmYXVsdCBleHBpcmF0aW9uIHBlcmlvZCBlLmcuICJnaXQgZ2MgLS1wcnVuZT1ub3ciLgorCisqICJnaXQgZ3JlcCAtdyIgYW5kICJnaXQgZ3JlcCIgZm9yIGZpeGVkIHN0cmluZ3MgaGF2ZSBiZWVuIG9wdGltaXplZC4KKworKiAiZ2l0IG1lcmdldG9vbCIgbGVhcm5lZCAteSgtLW5vLXByb21wdCkgb3B0aW9uIHRvIGRpc2FibGUgcHJvbXB0aW5nLgorCisqICJnaXQgcmViYXNlIC1pIiBjYW4gdHJhbnNwbGFudCBhIGhpc3RvcnkgZG93biB0byByb290IHRvIGVsc2V3aGVyZQorICB3aXRoIC0tcm9vdCBvcHRpb24uCisKKyogImdpdCByZXNldCAtLW1lcmdlIiBpcyBhIG5ldyBtb2RlIHRoYXQgd29ya3Mgc2ltaWxhciB0byB0aGUgd2F5CisgICJnaXQgY2hlY2tvdXQiIHN3aXRjaGVzIGJyYW5jaGVzLCB0YWtpbmcgdGhlIGxvY2FsIGNoYW5nZXMgd2hpbGUKKyAgc3dpdGNoaW5nIHRvIGFub3RoZXIgY29tbWl0LgorCisqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgbGVhcm5lZCAtLW5vLWZldGNoIG9wdGlvbi4KKworKiAiZ2l0IHRhZyIgbGVhcm5lZCAtLWNvbnRhaW5zIHRoYXQgd29ya3MgdGhlIHNhbWUgd2F5IGFzIHRoZSBzYW1lIG9wdGlvbgorICBmcm9tICJnaXQgYnJhbmNoIi4KKworCitGaXhlcyBzaW5jZSB2MS42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjYuMS5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworSGVyZSBhcmUgZml4ZXMgdGhhdCB0aGlzIHJlbGVhc2UgaGFzLCBidXQgaGF2ZSBub3QgYmVlbiBiYWNrcG9ydGVkIHRvCit2MS42LjEuWCBzZXJpZXMuCisKKyogImdpdC1hZGQgc3ViL2ZpbGUiIHdoZW4gc3ViIGlzIGEgc3VibW9kdWxlIGluY29ycmVjdGx5IGFkZGVkIHRoZSBwYXRoIHRvCisgIHRoZSBzdXBlcnByb2plY3QuCisKKyogImdpdCBidW5kbGUiIGRpZCBub3QgZXhjbHVkZSBhbm5vdGF0ZWQgdGFncyBldmVuIHdoZW4gYSByYW5nZSBnaXZlbgorICBmcm9tIHRoZSBjb21tYW5kIGxpbmUgd2FudGVkIHRvLgorCisqICJnaXQgZmlsdGVyLWJyYW5jaCIgdW5uZWNlc3NhcmlseSByZWZ1c2VkIHRvIHdvcmsgd2hlbiB5b3UgaGFkCisgIGNoZWNrZWQgb3V0IGEgZGlmZmVyZW50IGNvbW1pdCBmcm9tIHdoYXQgaXMgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdAorICBpbmRleCBpbiBhIHN1Ym1vZHVsZS4KKworKiAiZ2l0IGZpbHRlci1icmFuY2giIGluY29ycmVjdGx5IHRyaWVkIHRvIHVwZGF0ZSBhIG5vbmV4aXN0ZW50IHdvcmsgdHJlZQorICBhdCB0aGUgZW5kIHdoZW4gaXQgaXMgcnVuIGluIGEgYmFyZSByZXBvc2l0b3J5LgorCisqICJnaXQgZ2MiIGRpZCBub3Qgd29yayBpZiB5b3VyIHJlcG9zaXRvcnkgd2FzIGNyZWF0ZWQgd2l0aCBhbiBhbmNpZW50IGdpdAorICBhbmQgbmV2ZXIgaGFkIGFueSBwYWNrIGZpbGVzIGluIGl0IGJlZm9yZS4KKworKiAiZ2l0IG1lcmdldG9vbCIgdXNlZCB0byBpZ25vcmUgYXV0b2NybGYgYW5kIG90aGVyIGF0dHJpYnV0ZXMKKyAgYmFzZWQgY29udGVudCByZXdyaXRpbmcuCisKKyogYnJhbmNoIHN3aXRjaGluZyBhbmQgbWVyZ2VzIGhhZCBhIHNpbGx5IGJ1ZyB0aGF0IGRpZCBub3QgdmFsaWRhdGUKKyAgdGhlIGNvcnJlY3QgZGlyZWN0b3J5IHdoZW4gbWFraW5nIHN1cmUgYW4gZXhpc3Rpbmcgc3ViZGlyZWN0b3J5IGlzCisgIGNsZWFuLgorCisqICJnaXQgLXAgY21kIiB3aGVuIGNtZCBpcyBub3QgYSBidWlsdC1pbiBvbmUgbGVmdCB0aGUgZGlzcGxheSBpbiBmdW5ueSBzdGF0ZQorICB3aGVuIGtpbGxlZCBpbiB0aGUgbWlkZGxlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQwMGI3MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuMS50eHQKQEAgLTAsMCArMSwxMCBAQAorR0lUIHYxLjYuMy4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBjaGVja291dCAtYiBuZXctYnJhbmNoIiB3aXRoIGEgc3RhZ2VkIGNoYW5nZSBpbiB0aGUgaW5kZXgKKyAgaW5jb3JyZWN0bHkgcHJpbWVkIHRoZSBpbi1pbmRleCBjYWNoZS10cmVlLCByZXN1bHRpbmcgYSB3cm9uZyB0cmVlCisgIG9iamVjdCB0byBiZSB3cml0dGVuIG91dCBvZiB0aGUgaW5kZXguICBUaGlzIGlzIGEgZ3JhdmUgcmVncmVzc2lvbgorICBzaW5jZSB0aGUgbGFzdCAxLjYuMi5YIG1haW50ZW5hbmNlIHJlbGVhc2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmYzZjAyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4yLnR4dApAQCAtMCwwICsxLDYxIEBACitHSVQgdjEuNi4zLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4zLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEEgZmV3IGNvZGVwYXRocyBwaWNrZWQgdXAgdGhlIGZpcnN0IGZldyBieXRlcyBmcm9tIGFuIHNoYTFbXSBieQorICAgY2FzdGluZyB0aGUgKGNoYXIgKikgcG9pbnRlciB0byAoaW50ICopOyBHQ0MgNC40IGRpZCBub3QgbGlrZSB0aGlzLAorICAgYW5kIGFib3J0ZWQgY29tcGlsYXRpb24uCisKKyAqIFNvbWUgdW5saW5rKDIpIGZhaWx1cmVzIHdlbnQgdW5kaWFnbm9zZWQuCisKKyAqIFRoZSAicmVjdXJzaXZlIiBtZXJnZSBzdHJhdGVneSBtaXNiZWhhdmVkIHdoZW4gZmFjZWQgcmVuYW1lL2RlbGV0ZQorICAgY29uZmxpY3RzIHdoaWxlIGNvbWluZyB1cCB3aXRoIGFuIGludGVybWVkaWF0ZSBtZXJnZSBiYXNlLgorCisgKiBUaGUgbG93LWxldmVsIG1lcmdlIGFsZ29yaXRobSBkaWQgbm90IGhhbmRsZSBhIGRlZ2VuZXJhdGUgY2FzZSBvZgorICAgbWVyZ2luZyBhIGZpbGUgd2l0aCBpdHNlbGYgdXNpbmcgaXRzZWxmIGFzIHRoZSBjb21tb24gYW5jZXN0b3IKKyAgIGdyYWNlZnVsbHkuICBJdCBzaG91bGQgcHJvZHVjZSB0aGUgZmlsZSBpdHNlbGYsIGJ1dCBpbnN0ZWFkCisgICBwcm9kdWNlZCBhbiBlbXB0eSByZXN1bHQuCisKKyAqIEdJVF9UUkFDRSBtZWNoYW5pc20gc2VnZmF1bHRlZCB3aGVuIHRyYWNpbmcgYSBzaGVsbC1xdW90ZWQgYWxpYXNlcy4KKworICogT3BlbkJTRCBhbHNvIHVzZXMgc3RfY3RpbXNwZWMgaW4gInN0cnVjdCBzdGF0IiwgaW5zdGVhZCBvZiAic3RfY3RpbSIuCisKKyAqIFdpdGggTk9fQ1JPU1NfRElSRUNUT1JZX0hBUkRMSU5LUywgIm1ha2UgaW5zdGFsbCIgY2FuIGJlIHRvbGQgbm90IHRvCisgICBjcmVhdGUgaGFyZGxpbmtzIGJldHdlZW4gJChnaXRleGVjZGlyKS9naXQtJGJ1aWx0aW5fY29tbWFuZHMgYW5kCisgICAkKGJpbmRpcikvZ2l0LgorCisgKiBjb21tYW5kIGNvbXBsZXRpb24gY29kZSBpbiBiYXNoIGRpZCBub3QgcmVsaWFibHkgZGV0ZWN0IHRoYXQgd2UgYXJlCisgICBpbiBhIGJhcmUgcmVwb3NpdG9yeS4KKworICogImdpdCBhZGQgLiIgaW4gYW4gZW1wdHkgZGlyZWN0b3J5IGNvbXBsYWluZWQgdGhhdCBwYXRoc3BlYyAiLiIgZGlkIG5vdAorICAgbWF0Y2ggYW55dGhpbmcsIHdoaWNoIG1heSBiZSB0ZWNobmljYWxseSBjb3JyZWN0LCBidXQgbm90IHVzZWZ1bC4gIFdlCisgICBzaWxlbnRseSBtYWtlIGl0IGEgbm8tb3Agbm93LgorCisgKiAiZ2l0IGFkZCAtcCIgKGFuZCAicGF0Y2giIGFjdGlvbiBpbiAiZ2l0IGFkZCAtaSIpIHdhcyBicm9rZW4gd2hlbgorICAgdGhlIGZpcnN0IGh1bmsgdGhhdCBhZGRzIGEgbGluZSBhdCB0aGUgdG9wIHdhcyBzcGxpdCBpbnRvIHR3byBhbmQKKyAgIGJvdGggaGFsdmVzIGFyZSBtYXJrZWQgdG8gYmUgdXNlZC4KKworICogImdpdCBibGFtZSBwYXRoIiBtaXNiZWhhdmVkIGF0IHRoZSBjb21taXQgd2hlcmUgcGF0aCBiZWNhbWUgZmlsZQorICAgZnJvbSBhIGRpcmVjdG9yeSB3aXRoIHNvbWUgZmlsZXMgaW4gaXQuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIiBoYWQgYSBzZWdmYXVsdGluZyBidWcgd2hlbiBkZWFsaW5nIHdpdGggYSB0YWcgb2JqZWN0CisgICBjcmVhdGVkIGJ5IGFuIGFuY2llbnQgZ2l0LgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCAtayIgc3RpbGwgYWRkZWQgcGF0Y2ggbnVtYmVycyBpZiBmb3JtYXQubnVtYmVyZWQKKyAgIGNvbmZpZ3VyYXRpb24gd2FzIHNldC4KKworICogImdpdCBncmVwIC0tY29sb3IgJyciIGRpZCBub3QgdGVybWluYXRlLiAgVGhlIGNvbW1hbmQgYWxzbyBoYWQKKyAgIHN1YnRsZSBidWdzIHdpdGggaXRzIC13IG9wdGlvbi4KKworICogaHR0cC1wdXNoIGhhZCBhIHNtYWxsIHVzZS1hZnRlci1mcmVlIGJ1Zy4KKworICogImdpdCBwdXNoIiB3YXMgY29udmVydGluZyBPRlNfREVMVEEgcGFjayByZXByZXNlbnRhdGlvbiBpbnRvIGxlc3MKKyAgIGVmZmljaWVudCBSRUZfREVMVEEgcmVwcmVzZW50YXRpb24gdW5jb25kaXRpb25hbGx5IHVwb24gdHJhbnNmZXIsCisgICBtYWtpbmcgdGhlIHRyYW5zZmVycmVkIGRhdGEgdW5uZWNlc3NhcmlseSBsYXJnZXIuCisKKyAqICJnaXQgcmVtb3RlIHNob3cgb3JpZ2luIiBzZWdmYXVsdGVkIHdoZW4gb3JpZ2luIHdhcyBzdGlsbCBlbXB0eS4KKworTWFueSBvdGhlciBnZW5lcmFsIHVzYWJpbGl0eSB1cGRhdGVzIGFyb3VuZCBoZWxwIHRleHQsIGRpYWdub3N0aWMgbWVzc2FnZXMKK2FuZCBkb2N1bWVudGF0aW9uIGFyZSBpbmNsdWRlZCBhcyB3ZWxsLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyODM5OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuMy50eHQKQEAgLTAsMCArMSwzOCBAQAorR0lUIHYxLjYuMy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMy4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFyY2hpdmUiIHJ1bm5pbmcgb24gQ3lnd2luIGNhbiBnZXQgc3R1Y2sgaW4gYW4gaW5maW5pdGUgbG9vcC4KKworICogImdpdCBkYWVtb24iIGRpZCBub3QgY29ycmVjdGx5IHBhcnNlIHRoZSBpbml0aWFsIGxpbmUgdGhhdCBjYXJyaWVzCisgICB2aXJ0dWFsIGhvc3QgcmVxdWVzdCBpbmZvcm1hdGlvbi4KKworICogImdpdCBkaWZmIC0tdGV4dGNvbnYiIGxlYWtlZCBtZW1vcnkgYmFkbHkgd2hlbiB0aGUgdGV4dGNvbnYgZmlsdGVyCisgICBlcnJvcmVkIG91dC4KKworICogVGhlIGJ1aWx0LWluIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gcGljayBmdW5jdGlvbiBuYW1lcyB0byBwdXQgb24KKyAgIGh1bmsgaGVhZGVyIGxpbmVzIGZvciBqYXZhIGFuZCBvYmpjIHdlcmUgdmVyeSBpbmVmZmljaWVudGx5IHdyaXR0ZW4uCisKKyAqIGluIGNlcnRhaW4gZXJyb3Igc2l0dWF0aW9ucyBnaXQtZmV0Y2ggKGFuZCBnaXQtY2xvbmUpIG9uIFdpbmRvd3MgZGlkbid0CisgICBkZXRlY3QgY29ubmVjdGlvbiBhYm9ydCBhbmQgZW5kZWQgdXAgd2FpdGluZyBpbmRlZmluaXRlbHkuCisKKyAqIGltcG9ydC10YXJzIHNjcmlwdCAoaW4gY29udHJpYikgZGlkIG5vdCBpbXBvcnQgc3ltYm9saWMgbGlua3MgY29ycmVjdGx5LgorCisgKiBodHRwLmMgdXNlZCBDVVJMT1BUX1NTTEtFWSBldmVuIG9uIGxpYmNVUkwgdmVyc2lvbiA3LjkuMiwgZXZlbiB0aG91Z2gKKyAgIGl0IHdhcyBvbmx5IGF2YWlsYWJsZSBzdGFydGluZyA3LjkuMy4KKworICogbG93LWxldmVsIGZpbGVsZXZlbCBtZXJnZSBkcml2ZXIgdXNlZCByZXR1cm4gdmFsdWUgZnJvbSBzdHJkdXAoKQorICAgd2l0aG91dCBjaGVja2luZyBpZiB3ZSByYW4gb3V0IG9mIG1lbW9yeS4KKworICogImdpdCByZWJhc2UgLWkiIGxlZnQgc3RyYXkgY2xvc2luZyBwYXJlbnRoZXNpcyBpbiBpdHMgcmVmbG9nIG1lc3NhZ2UuCisKKyAqICJnaXQgcmVtb3RlIHNob3ciIGRpZCBub3Qgc2hvdyBhbGwgdGhlIFVSTHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBuYW1lZAorICAgcmVtb3RlLCBldmVuIHRob3VnaCAiZ2l0IHJlbW90ZSAtdiIgZGlkLiAgTWFkZSB0aGVtIGNvbnNpc3RlbnQgYnkKKyAgIG1ha2luZyB0aGUgZm9ybWVyIHNob3cgYWxsIFVSTHMuCisKKyAqICJ3aGl0ZXNwYWNlIiBhdHRyaWJ1dGUgdGhhdCBpcyBzZXQgd2FzIG1lYW50IHRvIGRldGVjdCBhbGwgZXJyb3JzIGtub3duCisgICB0byBnaXQsIGJ1dCBpdCB0b2xkIGdpdCB0byBpZ25vcmUgdHJhaWxpbmcgY2FycmlhZ2UtcmV0dXJucy4KKworSW5jbHVkZXMgb3RoZXIgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZDQ2MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLjQudHh0CkBAIC0wLDAgKzEsMzYgQEAKK0dJVCB2MS42LjMuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjMuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhZGQgLS1uby1pZ25vcmUtZXJyb3JzIiBkaWQgbm90IG92ZXJyaWRlIGNvbmZpZ3VyZWQKKyAgIGFkZC5pZ25vcmUtZXJyb3JzIGNvbmZpZ3VyYXRpb24uCisKKyAqICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCIgZGlkIG5vdCBmaXggdHJhaWxpbmcgd2hpdGVzcGFjZSBvbiBhbgorICAgaW5jb21wbGV0ZSBsaW5lLgorCisgKiAiZ2l0IGJyYW5jaCIgb3BlbmVkIHRvbyBtYW55IGNvbW1pdCBvYmplY3RzIHVubmVjZXNzYXJpbHkuCisKKyAqICJnaXQgY2hlY2tvdXQgLWYgJGNvbW1pdCIgd2l0aCBhIHBhdGggdGhhdCBpcyBhIGZpbGUgKG9yIGEgc3ltbGluaykgaW4KKyAgIHRoZSB3b3JrIHRyZWUgdG8gYSBjb21taXQgdGhhdCBoYXMgYSBkaXJlY3RvcnkgYXQgdGhlIHBhdGggaXNzdWVkIGFuCisgICB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlLgorCisgKiAiZ2l0IGRpZmYgLWMvLS1jYyIgd2FzIHZlcnkgaW5lZmZpY2llbnQgaW4gY29hbGVzY2luZyB0aGUgcmVtb3ZlZCBsaW5lcworICAgc2hhcmVkIGJldHdlZW4gcGFyZW50cy4KKworICogImdpdCBkaWZmIC1jLy0tY2MiIHNob3dlZCByZW1vdmVkIGxpbmVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWxlCisgICBpbmNvcnJlY3RseS4KKworICogImdpdCByZW1vdGUgc2hvdyBuaWNrbmFtZSIgZGlkIG5vdCBob25vciBjb25maWd1cmVkCisgICByZW1vdGUubmlja25hbWUudXBsb2FkcGFjayB3aGVuIGluc3BlY3RpbmcgdGhlIGJyYW5jaGVzIGF0IHRoZSByZW1vdGUuCisKKyAqICJnaXQgcmVxdWVzdC1wdWxsIiB3aGVuIHRhbGtpbmcgdG8gdGhlIHRlcm1pbmFsIGZvciBhIHByZXZpZXcKKyAgIHNob3dlZCBzb21lIG9mIHRoZSBvdXRwdXQgaW4gdGhlIHBhZ2VyLgorCisgKiAiZ2l0IHJlcXVlc3QtcHVsbCBzdGFydCBuaWNrbmFtZSBbZW5kXSIgZGlkIG5vdCBob25vciBjb25maWd1cmVkCisgICByZW1vdGUubmlja25hbWUudXBsb2FkcGFjayB3aGVuIGl0IHJhbiBnaXQtbHMtcmVtb3RlIGFnYWluc3QgdGhlIHJlbW90ZQorICAgcmVwb3NpdG9yeSB0byBsZWFybiB0aGUgY3VycmVudCB0aXAgb2YgYnJhbmNoZXMuCisKK0luY2x1ZGVzIG90aGVyIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgbWlub3IgZml4ZXMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjZmY5NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMudHh0CkBAIC0wLDAgKzEsMTgyIEBACitHSVQgdjEuNi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitXaXRoIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UsICJnaXQgcHVzaCIgaW50byBhIGJyYW5jaCB0aGF0IGlzCitjdXJyZW50bHkgY2hlY2tlZCBvdXQgd2lsbCBiZSByZWZ1c2VkIGJ5IGRlZmF1bHQuICBZb3UgY2FuIGNob29zZQord2hhdCBzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbgordmFyaWFibGUgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkuCisKK1RvIGVhc2UgdGhlIHRyYW5zaXRpb24gcGxhbiwgdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5IG9mIHN1Y2ggYQorcHVzaCBydW5uaW5nIHRoaXMgcmVsZWFzZSB3aWxsIGlzc3VlIGEgYmlnIHdhcm5pbmcgd2hlbiB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgbWlzc2luZy4gIFBsZWFzZSByZWZlciB0bzoKKworICBodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvR2l0RmFxI25vbi1iYXJlCisgIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83dmJwdGxzdXl2LmZzZkBnaXRzdGVyLnNpYW1lc2UuZHluZG5zLm9yZy8KKworZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmVhc29uIHdoeSB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kIHRoZQordHJhbnNpdGlvbiBwbGFuLgorCitGb3IgYSBzaW1pbGFyIHJlYXNvbiwgImdpdCBwdXNoICR0aGVyZSA6JGtpbGxlZCIgdG8gZGVsZXRlIHRoZSBicmFuY2gKKyRraWxsZWQgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSAkdGhlcmUsIGlmICRraWxsZWQgYnJhbmNoIGlzIHRoZSBjdXJyZW50CiticmFuY2ggcG9pbnRlZCBhdCBieSBpdHMgSEVBRCwgZ2V0cyBhIGxhcmdlIHdhcm5pbmcuICBZb3UgY2FuIGNob29zZSB3aGF0CitzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkuCisKK1doZW4gdGhlIHVzZXIgZG9lcyBub3QgdGVsbCAiZ2l0IHB1c2giIHdoYXQgdG8gcHVzaCwgaXQgaGFzIGFsd2F5cworcHVzaGVkIG1hdGNoaW5nIHJlZnMuICBGb3Igc29tZSBwZW9wbGUgaXQgaXMgdW5leHBlY3RlZCwgYW5kIGEgbmV3Citjb25maWd1cmF0aW9uIHZhcmlhYmxlIHB1c2guZGVmYXVsdCBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIGFsbG93CitjaGFuZ2luZyBhIGRpZmZlcmVudCBkZWZhdWx0IGJlaGF2aW91ci4gIFRvIGFkdmVydGlzZSB0aGUgbmV3IGZlYXR1cmUsCithIGJpZyB3YXJuaW5nIGlzIGlzc3VlZCBpZiB0aGlzIGlzIG5vdCBjb25maWd1cmVkIGFuZCBhIGdpdCBwdXNoIHdpdGhvdXQKK2FyZ3VtZW50cyBpcyBhdHRlbXB0ZWQuCisKKworVXBkYXRlcyBzaW5jZSB2MS42LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisqIHZhcmlvdXMgZ2l0LXN2biB1cGRhdGVzLgorCisqIGdpdC1ndWkgdXBkYXRlcywgaW5jbHVkaW5nIGFuIHVwZGF0ZSB0byBSdXNzaWFuIHRyYW5zbGF0aW9uLCBhbmQgYQorICBmaXggdG8gYW4gaW5maW5pdGUgbG9vcCB3aGVuIHNob3dpbmcgYW4gZW1wdHkgZGlmZi4KKworKiBnaXRrIHVwZGF0ZXMsIGluY2x1ZGluZyBhbiB1cGRhdGUgdG8gUnVzc2lhbiB0cmFuc2xhdGlvbiBhbmQgaW1wcm92ZWQgV2luZG93cworICBzdXBwb3J0LgorCisocGVyZm9ybWFuY2UpCisKKyogbWFueSB1c2VzIG9mIGxzdGF0KDIpIGluIHRoZSBjb2RlcGF0aCBmb3IgImdpdCBjaGVja291dCIgaGF2ZSBiZWVuCisgIG9wdGltaXplZCBvdXQuCisKKyh1c2FiaWxpdHksIGJlbGxzIGFuZCB3aGlzdGxlcykKKworKiBCb29sZWFuIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgeWVzL25vIGNhbiBiZSB3cml0dGVuIGFzIG9uL29mZi4KKworKiByc3luYzovcGF0aC90by9yZXBvIGNhbiBiZSB1c2VkIHRvIHJ1biBnaXQgb3ZlciByc3luYyBmb3IgbG9jYWwKKyAgcmVwb3NpdG9yaWVzLiAgSXQgbWF5IG5vdCBiZSB1c2VmdWwgaW4gcHJhY3RpY2U7IG1lYW50IHByaW1hcmlseSBmb3IKKyAgdGVzdGluZy4KKworKiBodHRwIHRyYW5zcG9ydCBsZWFybmVkIHRvIHByb21wdCBhbmQgdXNlIHBhc3N3b3JkIHdoZW4gZmV0Y2hpbmcgZnJvbSBvcgorICBwdXNoaW5nIHRvIGh0dHA6Ly91c2VyQGhvc3QueHovIFVSTC4KKworKiAobXN5c2dpdCkgcHJvZ3Jlc3Mgb3V0cHV0IHRoYXQgaXMgc2VudCBvdmVyIHRoZSBzaWRlYmFuZCBwcm90b2NvbCBjYW4KKyAgYmUgaGFuZGxlZCBhcHByb3ByaWF0ZWx5IGluIFdpbmRvd3MgY29uc29sZS4KKworKiAiLS1wcmV0dHk9PHN0eWxlPiIgb3B0aW9uIHRvIHRoZSBsb2cgZmFtaWx5IG9mIGNvbW1hbmRzIGNhbiBub3cgYmUKKyAgc3BlbGxlZCBhcyAiLS1mb3JtYXQ9PHN0eWxlPiIuICBJbiBhZGRpdGlvbiwgLS1mb3JtYXQ9JWZvcm1hdHN0cmluZworICBpcyBhIHNob3J0LWhhbmQgZm9yIC0tcHJldHR5PXRmb3JtYXQ6JWZvcm1hdHN0cmluZy4KKworKiAiLS1vbmVsaW5lIiBpcyBhIHN5bm9ueW0gZm9yICItLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCIuCisKKyogIi0tZ3JhcGgiIHRvIHRoZSAiZ2l0IGxvZyIgZmFtaWx5IGNhbiBkcmF3IHRoZSBjb21taXQgYW5jZXN0cnkgZ3JhcGgKKyAgaW4gY29sb3JzLgorCisqIElmIHlvdSByZWFsaXplIHRoYXQgeW91IGJvdGNoZWQgdGhlIHBhdGNoIHdoZW4geW91IGFyZSBlZGl0aW5nIGh1bmtzCisgIHdpdGggdGhlICdlZGl0JyBhY3Rpb24gaW4gZ2l0LWFkZCAtaS8tcCwgeW91IGNhbiBhYm9ydCB0aGUgZWRpdG9yIHRvCisgIHRlbGwgZ2l0IG5vdCB0byBhcHBseSBpdC4KKworKiBAey0xfSBpcyBhIG5ldyB3YXkgdG8gcmVmZXIgdG8gdGhlIGxhc3QgYnJhbmNoIHlvdSB3ZXJlIG9uIGludHJvZHVjZWQgaW4KKyAgMS42LjIsIGJ1dCB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBkaWQgbm90IHRlYWNoIHRoaXMgdG8gYSBmZXcKKyAgY29tbWFuZHMuICBOb3cgdGhlIHN5bnRheCB3b3JrcyB3aXRoICJicmFuY2ggLW0gQHstMX0gbmV3bmFtZSIuCisKKyogZ2l0LWFyY2hpdmUgbGVhcm5lZCAtLW91dHB1dD08ZmlsZT4gb3B0aW9uLgorCisqIGdpdC1hcmNoaXZlIHRha2VzIGF0dHJpYnV0ZXMgZnJvbSB0aGUgdHJlZSBiZWluZyBhcmNoaXZlZDsgc3RyaWN0bHkKKyAgc3BlYWtpbmcsIHRoaXMgaXMgYW4gaW5jb21wYXRpYmxlIGJlaGF2aW91ciBjaGFuZ2UsIGJ1dCBpcyBhIGdvb2Qgb25lLgorICBVc2UgLS13b3JrdHJlZS1hdHRyaWJ1dGVzIG9wdGlvbiB0byBhbGxvdyBpdCB0byByZWFkIGF0dHJpYnV0ZXMgZnJvbQorICB0aGUgd29yayB0cmVlIGFzIGJlZm9yZSAoZGVwcmVjYXRlZCBnaXQtdGFyIHRyZWUgY29tbWFuZCBhbHdheXMgcmVhZHMKKyAgYXR0cmlidXRlcyBmcm9tIHRoZSB3b3JrIHRyZWUpLgorCisqIGdpdC1iaXNlY3Qgc2hvd3Mgbm90IGp1c3QgdGhlIG51bWJlciBvZiByZW1haW5pbmcgY29tbWl0cyB3aG9zZSBnb29kbmVzcworICBpcyB1bmtub3duLCBidXQgYWxzbyBzaG93cyB0aGUgZXN0aW1hdGVkIG51bWJlciBvZiByZW1haW5pbmcgcm91bmRzLgorCisqIFlvdSBjYW4gZ2l2ZSAtLWRhdGU9PGZvcm1hdD4gb3B0aW9uIHRvIGdpdC1ibGFtZS4KKworKiAiZ2l0LWJyYW5jaCAtciIgc2hvd3MgSEVBRCBzeW1yZWYgdGhhdCBwb2ludHMgYXQgYSByZW1vdGUgYnJhbmNoIGluCisgIGludGVyZXN0IG9mIGVhY2ggdHJhY2tlZCByZW1vdGUgcmVwb3NpdG9yeS4KKworKiAiZ2l0LWJyYW5jaCAtdiAtdiIgaXMgYSBuZXcgd2F5IHRvIGdldCBsaXN0IG9mIG5hbWVzIGZvciBicmFuY2hlcyBhbmQgdGhlCisgICJ1cHN0cmVhbSIgYnJhbmNoIGZvciB0aGVtLgorCisqIGdpdC1jb25maWcgbGVhcm5lZCAtZSBvcHRpb24gdG8gb3BlbiBhbiBlZGl0b3IgdG8gZWRpdCB0aGUgY29uZmlnIGZpbGUKKyAgZGlyZWN0bHkuCisKKyogZ2l0LWNsb25lIHJ1bnMgcG9zdC1jaGVja291dCBob29rIHdoZW4gcnVuIHdpdGhvdXQgLS1uby1jaGVja291dC4KKworKiBnaXQtZGlmZnRvb2wgaXMgbm93IHBhcnQgb2YgdGhlIG9mZmljaWFsbHkgc3VwcG9ydGVkIGNvbW1hbmQsIHByaW1hcmlseQorICBtYWludGFpbmVkIGJ5IERhdmlkIEFndWlsYXIuCisKKyogZ2l0LWZvci1lYWNoLXJlZiBsZWFybmVkIGEgbmV3ICJ1cHN0cmVhbSIgdG9rZW4uCisKKyogZ2l0LWZvcm1hdC1wYXRjaCBjYW4gYmUgdG9sZCB0byB1c2UgYXR0YWNobWVudCB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24sCisgIGZvcm1hdC5hdHRhY2guCisKKyogZ2l0LWZvcm1hdC1wYXRjaCBjYW4gYmUgdG9sZCB0byBwcm9kdWNlIGRlZXAgb3Igc2hhbGxvdyBtZXNzYWdlIHRocmVhZHMuCisKKyogZ2l0LWZvcm1hdC1wYXRjaCBjYW4gYmUgdG9sZCB0byBhbHdheXMgYWRkIHNpZ24tb2ZmIHdpdGggYSBjb25maWd1cmF0aW9uCisgIHZhcmlhYmxlLgorCisqIGdpdC1mb3JtYXQtcGF0Y2ggbGVhcm5lZCBmb3JtYXQuaGVhZGVycyBjb25maWd1cmF0aW9uIHRvIGFkZCBleHRyYQorICBoZWFkZXIgZmllbGRzIHRvIHRoZSBvdXRwdXQuICBUaGlzIGJlaGF2aW91ciBpcyBzaW1pbGFyIHRvIHRoZSBleGlzdGluZworICAtLWFkZC1oZWFkZXI9PGhlYWRlcj4gb3B0aW9uIG9mIHRoZSBjb21tYW5kLgorCisqIGdpdC1mb3JtYXQtcGF0Y2ggZ2l2ZXMgaHVtYW4gcmVhZGFibGUgbmFtZXMgdG8gdGhlIGF0dGFjaGVkIGZpbGVzLCB3aGVuCisgIHRvbGQgdG8gc2VuZCBwYXRjaGVzIGFzIGF0dGFjaG1lbnRzLgorCisqIGdpdC1ncmVwIGxlYXJuZWQgdG8gaGlnaGxpZ2h0IHRoZSBmb3VuZCBzdWJzdHJpbmdzIGluIGNvbG9yLgorCisqIGdpdC1pbWFwLXNlbmQgbGVhcm5lZCB0byB3b3JrIGFyb3VuZCBUaHVuZGVyYmlyZCdzIGluYWJpbGl0eSB0byBlYXNpbHkKKyAgZGlzYWJsZSBmb3JtYXQ9Zmxvd2VkIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbiwgaW1hcC5wcmVmb3JtYXR0ZWRIVE1MLgorCisqIGdpdC1yZWJhc2UgY2FuIGJlIHRvbGQgdG8gcmViYXNlIHRoZSBzZXJpZXMgZXZlbiBpZiB5b3VyIGJyYW5jaCBpcyBhCisgIGRlc2NlbmRhbnQgb2YgdGhlIGNvbW1pdCB5b3UgYXJlIHJlYmFzaW5nIG9udG8gd2l0aCAtLWZvcmNlLXJlYmFzZQorICBvcHRpb24uCisKKyogZ2l0LXJlYmFzZSBjYW4gYmUgdG9sZCB0byByZXBvcnQgZGlmZnN0YXQgd2l0aCB0aGUgLS1zdGF0IG9wdGlvbi4KKworKiBPdXRwdXQgZnJvbSBnaXQtcmVtb3RlIGNvbW1hbmQgaGFzIGJlZW4gdmFzdGx5IGltcHJvdmVkLgorCisqICJnaXQgcmVtb3RlIHVwZGF0ZSAtLXBydW5lICRyZW1vdGUiIHVwZGF0ZXMgZnJvbSB0aGUgbmFtZWQgcmVtb3RlIGFuZAorICB0aGVuIHBydW5lcyBzdGFsZSB0cmFja2luZyBicmFuY2hlcy4KKworKiBnaXQtc2VuZC1lbWFpbCBsZWFybmVkIC0tY29uZmlybSBvcHRpb24gdG8gcmV2aWV3IHRoZSBDYzogbGlzdCBiZWZvcmUKKyAgc2VuZGluZyB0aGUgbWVzc2FnZXMgb3V0LgorCisoZGV2ZWxvcGVycykKKworKiBUZXN0IHNjcmlwdHMgY2FuIGJlIHJ1biB1bmRlciB2YWxncmluZC4KKworKiBUZXN0IHNjcmlwdHMgY2FuIGJlIHJ1biB3aXRoIGluc3RhbGxlZCBnaXQuCisKKyogTWFrZWZpbGUgbGVhcm5lZCAnY292ZXJhZ2UnIG9wdGlvbiB0byBydW4gdGhlIHRlc3Qgc3VpdGVzIHdpdGgKKyAgY292ZXJhZ2UgdHJhY2tpbmcgZW5hYmxlZC4KKworKiBCdWlsZGluZyB0aGUgbWFucGFnZXMgd2l0aCBkb2Nib29rLXhzbCBiZXR3ZWVuIDEuNjkuMSBhbmQgMS43MS4xIG5vdworICByZXF1aXJlcyBzZXR0aW5nIERPQ0JPT0tfU1VQUFJFU1NfU1AgdG8gd29yayBhcm91bmQgYSBkb2Nib29rLXhzbCBidWcuCisgIFRoaXMgd29ya2Fyb3VuZCB1c2VkIHRvIGJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGNhdXNlcyBwcm9ibGVtcworICB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGRvY2Jvb2steHNsLiAgSW4gYWRkaXRpb24sIHRoZXJlIGFyZSBhIGZldyBtb3JlCisgIGtub2JzIHlvdSBjYW4gdHdlYWsgdG8gd29yayBhcm91bmQgaXNzdWVzIHdpdGggdmFyaW91cyB2ZXJzaW9ucyBvZiB0aGUKKyAgZG9jYm9vay14c2wgcGFja2FnZS4gIFNlZSBjb21tZW50cyBpbiBEb2N1bWVudGF0aW9uL01ha2VmaWxlIGZvciBkZXRhaWxzLgorCisqIFN1cHBvcnQgZm9yIGJ1aWxkaW5nIGFuZCB0ZXN0aW5nIGEgc3Vic2V0IG9mIGdpdCBvbiBhIHN5c3RlbSB3aXRob3V0IGEKKyAgd29ya2luZyBwZXJsIGhhcyBiZWVuIGltcHJvdmVkLgorCisKK0ZpeGVzIHNpbmNlIHYxLjYuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNi4yLlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCitIZXJlIGFyZSBmaXhlcyB0aGF0IHRoaXMgcmVsZWFzZSBoYXMsIGJ1dCBoYXZlIG5vdCBiZWVuIGJhY2twb3J0ZWQgdG8KK3YxLjYuMi5YIHNlcmllcy4KKworKiAiZ2l0LWFwcGx5IiByZWplY3RlZCBhIHBhdGNoIHRoYXQgc3dhcHMgdHdvIGZpbGVzIChpLmUuIHJlbmFtZXMgQSB0byBCCisgIGFuZCBCIHRvIEEgYXQgdGhlIHNhbWUgdGltZSkuICBNYXkgbmVlZCB0byBiZSBiYWNrcG9ydGVkIGJ5IGNoZXJyeQorICBwaWNraW5nIGQ4YzgxZGYgYW5kIHRoZW4gN2ZhYzBlZSkuCisKKyogVGhlIGluaXRpYWwgY2hlY2tvdXQgZGlkIG5vdCByZWFkIHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhlIC5naXRhdHRyaWJ1dGUKKyAgZmlsZSB0aGF0IGlzIGJlaW5nIGNoZWNrZWQgb3V0LgorCisqIGdpdC1nYyBzcGVudCBleGNlc3NpdmUgYW1vdW50IG9mIHRpbWUgdG8gZGVjaWRlIGlmIGFuIG9iamVjdCBhcHBlYXJzCisgIGluIGEgbG9jYWxseSBleGlzdGluZyBwYWNrIChpZiBuZWVkZWQsIGJhY2twb3J0IGJ5IG1lcmdpbmcgNjllMDIwYSkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDM5ZTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC4xLnR4dApAQCAtMCwwICsxLDQ2IEBACitHSVQgdjEuNi40LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gdW5xdW90ZWQgdmFsdWUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hlbiBpdCBjb250YWlucyBtb3JlIHRoYW4KKyAgIG9uZSB3aGl0ZXNwYWNlcyBpbiBhIHJvdywgZ290IHRoZW0gcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBzcGFjZS4KKworICogImdpdCBhbSIgdXNlZCB0byBhY2NlcHQgYSBzaW5nbGUgcGllY2Ugb2YgZS1tYWlsIHBlciBmaWxlIChub3QgYSBtYm94KQorICAgYXMgaXRzIGlucHV0LCBidXQgbXVsdGlwbGUgaW5wdXQgZm9ybWF0IHN1cHBvcnQgaW4gdjEuNi40IGJyb2tlIGl0LgorICAgQXBwYXJlbnRseSBtYW55IHBlb3BsZSBoYXZlIGJlZW4gZGVwZW5kaW5nIG9uIHRoaXMgZmVhdHVyZS4KKworICogVGhlIHNob3J0IGhlbHAgdGV4dCBmb3IgImdpdCBmaWx0ZXItYnJhbmNoIiBjb21tYW5kIHdhcyBhIHNpbmdsZSBsb25nCisgICBsaW5lLCB3cmFwcGVkIGJ5IHRlcm1pbmFscywgYW5kIHdhcyBoYXJkIHRvIHJlYWQuCisKKyAqIFRoZSAicmVjdXJzaXZlIiBzdHJhdGVneSBvZiAiZ2l0IG1lcmdlIiBzZWdmYXVsdGVkIHdoZW4gYSBtZXJnZSBoYXMKKyAgIG1vcmUgdGhhbiBvbmUgbWVyZ2UtYmFzZXMsIGFuZCBtZXJnaW5nIG9mIHRoZXNlIG1lcmdlLWJhc2VzIGludm9sdmVzCisgICBhIHJlbmFtZS9yZW5hbWUgb3IgYSByZW5hbWUvYWRkIGNvbmZsaWN0LgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UiIGRpZCBub3QgdXNlIHRoZSByaWdodCBmb3JrIHBvaW50IHdoZW4gdGhlCisgICByZXBvc2l0b3J5IGhhcyBhbHJlYWR5IGZldGNoZWQgZnJvbSB0aGUgdXBzdHJlYW0gdGhhdCByZXdpbmRzIHRoZQorICAgYnJhbmNoIGl0IGlzIGJhc2VkIG9uIGluIGFuIGVhcmxpZXIgZmV0Y2guCisKKyAqIEV4cGxhaW4gdGhlIGNvbmNlcHQgb2YgZmFzdC1mb3J3YXJkIG1vcmUgZnVsbHkgaW4gImdpdCBwdXNoIgorICAgZG9jdW1lbnRhdGlvbiwgYW5kIGhpbnQgdG8gcmVmZXIgdG8gaXQgZnJvbSBhbiBlcnJvciBtZXNzYWdlIHdoZW4gdGhlCisgICBjb21tYW5kIHJlZnVzZXMgYW4gdXBkYXRlIHRvIHByb3RlY3QgdGhlIHVzZXIuCisKKyAqIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBwYWNrLmRlbHRhY2FjaGVzaXplLCB1c2VkIGJ5ICJnaXQgcmVwYWNrIiwgaXMgbm93CisgICAyNTZNLCBpbnN0ZWFkIG9mIHVuYm91bmRlZC4gIE90aGVyd2lzZSBhIHJlcGFjayBvZiBhIG1vZGVyYXRlbHkgc2l6ZWQKKyAgIHJlcG9zaXRvcnkgd291bGQgbmVlZGxlc3NseSBlYXQgaW50byBzd2FwLgorCisgKiBEb2N1bWVudCBob3cgImdpdCByZXBhY2siIChoZW5jZSAiZ2l0IGdjIikgaW50ZXJhY3RzIHdpdGggYSByZXBvc2l0b3J5CisgICB0aGF0IGJvcnJvd3MgaXRzIG9iamVjdHMgZnJvbSBvdGhlciByZXBvc2l0b3JpZXMgKGUuZy4gb25lcyBjcmVhdGVkIGJ5CisgICAiZ2l0IGNsb25lIC1zIikuCisKKyAqICJnaXQgc2hvdyIgb24gYW4gYW5ub3RhdGVkIHRhZyBsYWNrZWQgYSBkZWxpbWl0aW5nIGJsYW5rIGxpbmUgYmV0d2VlbgorICAgdGhlIHRhZyBpdHNlbGYgYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0IGl0IHRhZ3MuCisKKyAqICJnaXQgdmVyaWZ5LXBhY2sgLXYiIGVycm9uZW91c2x5IHJlcG9ydGVkIG51bWJlciBvZiBvYmplY3RzIHdpdGggdG9vCisgICBkZWVwIGRlbHRhIGRlcHRocyBhcyAiY2hhaW4gbGVuZ3RoIDAiIG9iamVjdHMuCisKKyAqIExvbmcgbmFtZXMgb2YgYXV0aG9ycyBhbmQgY29tbWl0dGVycyBvdXRzaWRlIFVTLUFTQ0lJIHdlcmUgc29tZXRpbWVzCisgICBpbmNvcnJlY3RseSBzaG93biBpbiAiZ2l0d2ViIi4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMWVjMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjIudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dJVCB2MS42LjQuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjQuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAtLWRhdGU9cmVsYXRpdmUgb3V0cHV0IGJldHdlZW4gMSBhbmQgNSB5ZWFycyBhZ28gcm91bmRlZCB0aGUgbnVtYmVyIG9mCisgICAgeWVhcnMgd2hlbiBzYXlpbmcgWCB5ZWFycyBZIG1vbnRocyBhZ28sIGluc3RlYWQgb2Ygcm91bmRpbmcgaXQgZG93bi4KKworKiAiZ2l0IGFkZCAtcCIgZGlkIG5vdCBoYW5kbGUgY2hhbmdlcyBpbiBleGVjdXRhYmxlIGJpdHMgY29ycmVjdGx5CisgIChhIHJlZ3Jlc3Npb24gYXJvdW5kIDEuNi4zKS4KKworKiAiZ2l0IGFwcGx5IiBkaWQgbm90IGhvbm9yIEdOVSBkaWZmJ3MgY29udmVudGlvbiB0byBtYXJrIHRoZSBjcmVhdGlvbi9kZWxldGlvbgorICBldmVudCB3aXRoIFVOSVggZXBvY2ggdGltZXN0YW1wIG9uIG1pc3Npbmcgc2lkZS4KKworKiAiZ2l0IGNoZWNrb3V0IiBpbmNvcnJlY3RseSByZW1vdmVkIGZpbGVzIGluIGEgZGlyZWN0b3J5IHBvaW50ZWQgYnkgYQorICBzeW1ib2xpYyBsaW5rIGR1cmluZyBhIGJyYW5jaCBzd2l0Y2ggdGhhdCByZXBsYWNlcyBhIGRpcmVjdG9yeSB3aXRoCisgIGEgc3ltYm9saWMgbGluay4KKworKiAiZ2l0IGNsZWFuIC1kIC1mIiBoYXBwaWx5IGRlc2NlbmRlZCBpbnRvIGEgc3ViZGlyZWN0b3J5IHRoYXQgaXMgbWFuYWdlZCBieSBhCisgIHNlcGFyYXRlIGdpdCByZXBvc2l0b3J5LiAgSXQgbm93IHJlcXVpcmVzIHR3byAtZiBvcHRpb25zIGZvciBzYWZldHkuCisKKyogImdpdCBmZXRjaC9wdXNoIiBvdmVyIGh0dHAgdHJhbnNwb3J0cyBoYWQgdHdvIHJhdGhlciBncmF2ZSBidWdzLgorCisqICJnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIiBkaWQgbm90IHByZXBhcmUgdGhlIGNvdmVyIGxldHRlciBmaWxlCisgIGZvciB1c2Ugd2l0aCBub24tQVNDSUkgc3RyaW5ncyB3aGVuIHRoZXJlIGFyZSB0aGUgc2VyaWVzIGNvbnRyaWJ1dG9ycyB3aXRoCisgIG5vbi1BU0NJSSBuYW1lcy4KKworKiAiZ2l0IHB1bGwgb3JpZ2luIGJyYW5jaCIgYW5kICJnaXQgZmV0Y2ggb3JpZ2luICYmIGdpdCBtZXJnZSBvcmlnaW4vYnJhbmNoIgorICBsZWZ0IGRpZmZlcmVudCBtZXJnZSBtZXNzYWdlcyBpbiB0aGUgcmVzdWx0aW5nIGNvbW1pdC4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDNlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjMudHh0CkBAIC0wLDAgKzEsMjkgQEAKK0dJVCB2MS42LjQuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjQuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGNsb25lIiBmcm9tIGFuIGVtcHR5IHJlcG9zaXRvcnkgZ2F2ZSB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlLAorICBldmVuIHRob3VnaCBpdCBkaWQgZXZlcnl0aGluZyBlbHNlIGNvcnJlY3RseS4KKworKiAiZ2l0IGN2c3NlcnZlciIgaW52b2tlZCBnaXQgY29tbWFuZHMgdmlhICJnaXQtZm9vIiBzdHlsZSwgd2hpY2ggaGFzIGxvbmcKKyAgYmVlbiBkZXByZWNhdGVkLgorCisqICJnaXQgZmV0Y2giIGFuZCAiZ2l0IGNsb25lIiBoYWQgYW4gZXh0cmEgc2FuaXR5IGNoZWNrIHRvIHZlcmlmeSB0aGUKKyAgcHJlc2VuY2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmcgKi5wYWNrIGZpbGUgYmVmb3JlIGRvd25sb2FkaW5nICouaWR4CisgIGZpbGUgYnkgaXNzdWluZyBhIEhFQUQgcmVxdWVzdC4gIEdpdGh1YiBzZXJ2ZXIgaG93ZXZlciBzb21ldGltZXMKKyAgZ2F2ZSA1MDAgKEludGVybmFsIHNlcnZlciBlcnJvcikgcmVzcG9uc2UgdG8gSEVBRCBldmVuIGlmIGEgR0VUCisgIHJlcXVlc3QgZm9yICoucGFjayBmaWxlIHRvIHRoZSBzYW1lIFVSTCB3b3VsZCBoYXZlIHN1Y2NlZWRlZCwgYW5kIGJyb2tlCisgIGNsb25lIG92ZXIgSFRUUCBmcm9tIHNvbWUgb2YgdGhlaXIgcmVwb3NpdG9yaWVzLiAgQXMgYSB3b3JrYXJvdW5kLCB0aGlzCisgIHZlcmlmaWNhdGlvbiBoYXMgYmVlbiByZW1vdmVkIChhcyBpdCBpcyBub3QgYWJzb2x1dGVseSBuZWNlc3NhcnkpLgorCisqICJnaXQgZ3JlcCIgZGlkIG5vdCBsaWtlIHJlbGF0aXZlIHBhdGhuYW1lIHRvIHJlZmVyIG91dHNpZGUgdGhlIGN1cnJlbnQKKyAgZGlyZWN0b3J5IHdoZW4gcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyogYW4gZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgcHVzaCIgd2FzIGZvcm1hdHRlZCBpbiBhIHZlcnkgdWdseSB3YXkuCisKKyogImdpdCBzdm4iIGRpZCBub3QgcXVvdGUgdGhlIHN1YnZlcnNpb24gdXNlciBuYW1lIGNvcnJlY3RseSB3aGVuCisgIHJ1bm5pbmcgaXRzIGF1dGhvci1wcm9nIGhlbHBlciBwcm9ncmFtLgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVhZDQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuNC50eHQKQEAgLTAsMCArMSwyNiBAQAorR0lUIHYxLjYuNC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNC40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSB3b3JrYXJvdW5kIGZvciBHaXRodWIgc2VydmVyIHRoYXQgc29tZXRpbWVzIGdhdmUgNTAwIChJbnRlcm5hbCBzZXJ2ZXIKKyAgZXJyb3IpIHJlc3BvbnNlIHRvIEhFQUQgcmVxdWVzdHMgaW4gMS42LjQuMyBpbnRyb2R1Y2VkIGEgcmVncmVzc2lvbiB0aGF0CisgIGNhdXNlZCByZS1mZXRjaGluZyBwcm9qZWN0cyBvdmVyIGh0dHAgdG8gc2VnZmF1bHQgaW4gY2VydGFpbiBjYXNlcyBkdWUKKyAgdG8gdW5pbml0aWFsaXplZCBwb2ludGVyIGJlaW5nIGZyZWVkLgorCisqICJnaXQgcHVsbCIgb24gYW4gdW5ib3JuIGJyYW5jaCB1c2VkIHRvIGNvbnNpZGVyIGFueXRoaW5nIGluIHRoZSB3b3JrCisgIHRyZWUgYW5kIHRoZSBpbmRleCBkaXNjYXJkYWJsZS4KKworKiAiZ2l0IGRpZmYgLWIvdyIgZGlkIG5vdCB3b3JrIHdlbGwgb24gdGhlIGluY29tcGxldGUgbGluZSBhdCB0aGUgZW5kIG9mCisgIHRoZSBmaWxlLCBkdWUgdG8gYW4gaW5jb3JyZWN0IGhhc2hpbmcgb2YgbGluZXMgaW4gdGhlIGxvdy1sZXZlbCB4ZGlmZgorICByb3V0aW5lcy4KKworKiAiZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PSRzb21ld2hlcmUiIHVzZWQgdG8gd29yayB3aGVuICRzb21ld2hlcmUgaXMKKyAgYSBzeW1ib2xpYyBsaW5rIHRvIGEgZGlyZWN0b3J5IGVsc2V3aGVyZSwgYnV0IHYxLjYuNC4yIGJyb2tlIGl0LgorCisqICJnaXQgdW5wYWNrLW9iamVjdHMgLS1zdHJpY3QiLCBpbnZva2VkIHdoZW4gcmVjZWl2ZS5mc2Nrb2JqZWN0cworICBjb25maWd1cmF0aW9uIGlzIHNldCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgb2YgImdpdCBwdXNoIiwgZGlkIG5vdAorICBwcm9wZXJseSBjaGVjayB0aGUgb2JqZWN0cywgZXNwZWNpYWxseSB0aGUgc3VibW9kdWxlIGxpbmtzLCBpdCByZWNlaXZlZC4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjMwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjUudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0dpdCB2MS42LjQuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjQuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogU2ltcGxpZmllZCBiYXNlODUgaW1wbGVtZW50YXRpb24uCisKKyAqIEFuIG92ZXJsb25nIGxpbmUgYWZ0ZXIgIi5naXRkaXI6ICIgaW4gYSBnaXQgZmlsZSBjYXVzZWQgb3V0IG9mIGJvdW5kcworICAgYWNjZXNzIHRvIGFuIGFycmF5IG9uIHRoZSBzdGFjay4KKworICogImdpdCBjb3VudC1vYmplY3RzIiBkaWQgbm90IGhhbmRsZSBwYWNrcyBsYXJnZXIgdGhhbiA0Ry4KKworICogImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLXN0b3AtYXQtbm9uLW9wdGlvbiIgZGlkIG5vdCBzdG9wIGF0IG5vbiBvcHRpb24KKyAgIHdoZW4gLS1rZWVwLWRhc2hkYXNoIHdhcyBpbiBlZmZlY3QuCisKKyAqICJnaXR3ZWIiIGNhbiBzb21ldGltZXMgYmUgdHJpY2tlZCBpbnRvIHBhcnJvdHRpbmcgYSBmaWxlbmFtZSBhcmd1bWVudAorICAgZ2l2ZW4gaW4gYSByZXF1ZXN0IHdpdGhvdXQgcHJvcGVybHkgcXVvdGluZy4KKworT3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYTM0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LnR4dApAQCAtMCwwICsxLDE0NyBAQAorR0lUIHYxLjYuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworV2l0aCB0aGUgbmV4dCBtYWpvciByZWxlYXNlLCAiZ2l0IHB1c2giIGludG8gYSBicmFuY2ggdGhhdCBpcworY3VycmVudGx5IGNoZWNrZWQgb3V0IHdpbGwgYmUgcmVmdXNlZCBieSBkZWZhdWx0LiAgWW91IGNhbiBjaG9vc2UKK3doYXQgc2hvdWxkIGhhcHBlbiB1cG9uIHN1Y2ggYSBwdXNoIGJ5IHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5LgorCitUbyBlYXNlIHRoZSB0cmFuc2l0aW9uIHBsYW4sIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeSBvZiBzdWNoIGEKK3B1c2ggcnVubmluZyB0aGlzIHJlbGVhc2Ugd2lsbCBpc3N1ZSBhIGJpZyB3YXJuaW5nIHdoZW4gdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIG1pc3NpbmcuICBQbGVhc2UgcmVmZXIgdG86CisKKyAgaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0dpdEZhcSNub24tYmFyZQorICBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvN3ZicHRsc3V5di5mc2ZAZ2l0c3Rlci5zaWFtZXNlLmR5bmRucy5vcmcvCisKK2ZvciBtb3JlIGRldGFpbHMgb24gdGhlIHJlYXNvbiB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVlZGVkIGFuZCB0aGUKK3RyYW5zaXRpb24gcGxhbi4KKworRm9yIGEgc2ltaWxhciByZWFzb24sICJnaXQgcHVzaCAkdGhlcmUgOiRraWxsZWQiIHRvIGRlbGV0ZSB0aGUgYnJhbmNoCiska2lsbGVkIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkgJHRoZXJlLCBpZiAka2lsbGVkIGJyYW5jaCBpcyB0aGUgY3VycmVudAorYnJhbmNoIHBvaW50ZWQgYXQgYnkgaXRzIEhFQUQsIGdldHMgYSBsYXJnZSB3YXJuaW5nLiAgWW91IGNhbiBjaG9vc2Ugd2hhdAorc2hvdWxkIGhhcHBlbiB1cG9uIHN1Y2ggYSBwdXNoIGJ5IHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKK3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQgaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5LgorCisKK1VwZGF0ZXMgc2luY2UgdjEuNi4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworICogZ2l0d2ViIFBlcmwgc3R5bGUgY2xlYW4tdXAuCisKKyAqIGdpdC1zdm4gdXBkYXRlcywgaW5jbHVkaW5nIGEgbmV3IC0tYXV0aG9ycy1wcm9nIG9wdGlvbiB0byBtYXAgYXV0aG9yCisgICBuYW1lcyBieSBpbnZva2luZyBhbiBleHRlcm5hbCBwcm9ncmFtLCAnZ2l0IHN2biByZXNldCcgdG8gdW53aW5kCisgICAnZ2l0IHN2biBmZXRjaCcsIHN1cHBvcnQgZm9yIG1vcmUgdGhhbiBvbmUgYnJhbmNoZXMsIGRvY3VtZW50aW5nCisgICBvZiB0aGUgdXNlZnVsIC0tbWluaW1pemUtdXJsIGZlYXR1cmUsIG5ldyAiZ2l0IHN2biBnYyIgY29tbWFuZCwgZXRjLgorCisocG9ydGFiaWxpdHkpCisKKyAqIFdlIGZlZWQgaWNvbnYgd2l0aCAiVVRGLTgiIGluc3RlYWQgb2YgInV0ZjgiOyB0aGUgZm9ybWVyIGlzCisgICB1bmRlcnN0b29kIG1vcmUgd2lkZWx5LiAgU2ltaWxhcmx5IHVwZGF0ZWQgdGVzdCBzY3JpcHRzIHRvIHVzZQorICAgZW5jb2RpbmcgbmFtZXMgbW9yZSB3aWRlbHkgdW5kZXJzdG9vZCAoZS5nLiB1c2UgIklTTzg4NTktMSIgaW5zdGVhZAorICAgb2YgIklTTy04ODU5LTEiKS4KKworICogVmFyaW91cyBwb3J0YWJpbGl0eSBmaXhlcy93b3JrYXJvdW5kcyBmb3IgZGlmZmVyZW50IHZpbnRhZ2VzIG9mCisgICBTdW5PUywgSVJJWCwgYW5kIFdpbmRvd3MuCisKKyAqIEdpdC1vdmVyLXNzaCB0cmFuc3BvcnQgb24gV2luZG93cyBzdXBwb3J0cyBQdVRUWSBwbGluayBhbmQgVG9ydG9pc2VQbGluay4KKworKHBlcmZvcm1hbmNlKQorCisgKiBNYW55IHJlcGVhdGVkIHVzZSBvZiBsc3RhdCgpIGFyZSBvcHRpbWl6ZWQgb3V0IGluICJjaGVja291dCIgY29kZXBhdGguCisKKyAqIGdpdC1zdGF0dXMgKGFuZCB1bmRlcmx5aW5nIGdpdC1kaWZmLWluZGV4IC0tY2FjaGVkKSBhcmUgb3B0aW1pemVkCisgICB0byB0YWtlIGFkdmFudGFnZSBvZiBjYWNoZS10cmVlIGluZm9ybWF0aW9uIGluIHRoZSBpbmRleC4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisgKiAiZ2l0IGFkZCAtLWVkaXQiIGxldHMgdXNlcnMgZWRpdCB0aGUgd2hvbGUgcGF0Y2ggdGV4dCB0byBmaW5lLXR1bmUgd2hhdAorICAgaXMgYWRkZWQgdG8gdGhlIGluZGV4LgorCisgKiAiZ2l0IGFtIiBhY2NlcHRzIFN0R0lUIHNlcmllcyBmaWxlIGFzIGl0cyBpbnB1dC4KKworICogImdpdCBiaXNlY3Qgc2tpcCIgc2tpcHMgdG8gYSBtb3JlIHJhbmRvbWx5IGNob3NlbiBwbGFjZSBpbiB0aGUgaG9wZQorICAgdG8gYXZvaWQgdGVzdGluZyBhIGNvbW1pdCB0aGF0IGlzIHRvbyBjbG9zZSB0byBhIGNvbW1pdCB0aGF0IGlzCisgICBhbHJlYWR5IGtub3duIHRvIGJlIHVudGVzdGFibGUuCisKKyAqICJnaXQgY3ZzZXhwb3J0Y29tbWl0IiBsZWFybmVkIC1rIG9wdGlvbiB0byBzdG9wIENWUyBrZXl3b3JkcyBleHBhbnNpb24KKworICogImdpdCBmYXN0LWV4cG9ydCIgbGVhcm5lZCB0byBoYW5kbGUgaGlzdG9yeSBzaW1wbGlmaWNhdGlvbiBtb3JlCisgICBncmFjZWZ1bGx5LgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBsZWFybmVkIGFuIG9wdGlvbiAtLXRhZy1vZi1maWx0ZXJlZC1vYmplY3QgdG8gaGFuZGxlCisgICBkYW5nbGluZyB0YWdzIHJlc3VsdGluZyBmcm9tIGhpc3Rvcnkgc2ltcGxpZmljYXRpb24gbW9yZSB1c2VmdWxseS4KKworICogImdpdCBncmVwIiBsZWFybmVkIC1wIG9wdGlvbiB0byBzaG93IHRoZSBsb2NhdGlvbiBvZiB0aGUgbWF0Y2ggdXNpbmcgdGhlCisgICBzYW1lIGNvbnRleHQgaHVuayBtYXJrZXIgImdpdCBkaWZmIiB1c2VzLgorCisgKiBodHRwcyB0cmFuc3BvcnQgY2FuIG9wdGlvbmFsbHkgYmUgdG9sZCB0aGF0IHRoZSB1c2VkIGNsaWVudAorICAgY2VydGlmaWNhdGUgaXMgcGFzc3dvcmQgcHJvdGVjdGVkLCBpbiB3aGljaCBjYXNlIGl0IGFza3MgdGhlCisgICBwYXNzd29yZCBvbmx5IG9uY2UuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBpcyBJUHY2IGF3YXJlLgorCisgKiAiZ2l0IGxvZyAtLWdyYXBoIiBkcmF3cyBncmFwaHMgbW9yZSBjb21wYWN0bHkgYnkgdXNpbmcgaG9yaXpvbnRhbCBsaW5lcworICAgd2hlbiBhYmxlLgorCisgKiAiZ2l0IGxvZyAtLWRlY29yYXRlIiBzaG93cyBzaG9ydGVyIHJlZm5hbWVzIGJ5IHN0cmlwcGluZyB3ZWxsLWtub3duCisgICByZWZzLyogcHJlZml4LgorCisgKiAiZ2l0IHB1c2ggJG5hbWUiIGhvbm9ycyByZW1vdGUuJG5hbWUucHVzaHVybCBpZiBwcmVzZW50IGJlZm9yZQorICAgdXNpbmcgcmVtb3RlLiRuYW1lLnVybC4gIEluIG90aGVyIHdvcmRzLCB0aGUgVVJMIHVzZWQgZm9yIGZldGNoaW5nCisgICBhbmQgcHVzaGluZyBjYW4gYmUgZGlmZmVyZW50LgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIHVuZGVyc3RhbmRzIHF1b3RlZCBhbGlhc2VzIGluIC5tYWlscmMgZmlsZXMgKG1pZ2h0CisgICBoYXZlIHRvIGJlIGJhY2twb3J0ZWQgdG8gMS42LjMuWCkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgY2FuIGZldGNoIHRoZSBzZW5kZXIgYWRkcmVzcyBmcm9tIHRoZSBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZSAic2VuZG1haWwuZnJvbSIgKGFuZCAic2VuZG1haWwuPGlkZW50aXR5Pi5mcm9tIikuCisKKyAqICJnaXQgc2hvdy1icmFuY2giIGNhbiBjb2xvciBpdHMgb3V0cHV0LgorCisgKiAiYWRkIiBhbmQgInVwZGF0ZSIgc3ViY29tbWFuZHMgdG8gImdpdCBzdWJtb2R1bGUiIGxlYXJuZWQgLS1yZWZlcmVuY2UKKyAgIG9wdGlvbiB0byB1c2UgbG9jYWwgY2xvbmUgd2l0aCByZWZlcmVuY2VzLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGxlYXJuZWQgLS1yZWJhc2Ugb3B0aW9uIHRvIHVwZGF0ZSBjaGVja2VkCisgICBvdXQgc3VibW9kdWxlcyBieSByZWJhc2luZyB0aGUgbG9jYWwgY2hhbmdlcy4KKworICogImdpdHdlYiIgY2FuIG9wdGlvbmFsbHkgdXNlIGdyYXZhdGFyIHRvIGFkb3JuIGF1dGhvci9jb21taXR0ZXIgbmFtZXMuCisKKyhkZXZlbG9wZXJzKQorCisgKiBBIG1ham9yIHBhcnQgb2YgdGhlICJnaXQgYmlzZWN0IiB3cmFwcGVyIGhhcyBtb3ZlZCB0byBDLgorCisgKiBGb3JtYXR0aW5nIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIEFzY2lpRG9jIDguNC4xIGlzIG5vdyBzdXBwb3J0ZWQuCisKK0ZpeGVzIHNpbmNlIHYxLjYuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNi4zLlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCitIZXJlIGFyZSBmaXhlcyB0aGF0IHRoaXMgcmVsZWFzZSBoYXMsIGJ1dCBoYXZlIG5vdCBiZWVuIGJhY2twb3J0ZWQgdG8KK3YxLjYuMy5YIHNlcmllcy4KKworICogImdpdCBkaWZmLXRyZWUgLXIgLXQiIHVzZWQgdG8gb21pdCBuZXcgb3IgcmVtb3ZlZCBkaXJlY3RvcmllcyBmcm9tCisgICB0aGUgb3V0cHV0LiAgZGY1MzNmMyAoZGlmZi10cmVlIC1yIC10OiBpbmNsdWRlIGFkZGVkL3JlbW92ZWQKKyAgIGRpcmVjdG9yaWVzIGluIHRoZSBvdXRwdXQsIDIwMDktMDYtMTMpIG1heSBuZWVkIHRvIGJlIGNoZXJyeS1waWNrZWQKKyAgIHRvIGJhY2twb3J0IHRoaXMgZml4LgorCisgKiBUaGUgd2F5IEdpdC5wbSBzZXRzIHVwIGEgUmVwb3NpdG9yeSBvYmplY3Qgd2FzIG5vdCBmcmllbmRseSB0byBjYWxsZXJzCisgICB0aGF0IGNoZGlyIGFyb3VuZC4gIEl0IG5vdyBpbnRlcm5hbGx5IHJlY29yZHMgdGhlIHJlcG9zaXRvcnkgbG9jYXRpb24KKyAgIGFzIGFuIGFic29sdXRlIHBhdGggd2hlbiBhdXRvZGV0ZWN0ZWQuCisKKyAqIFJlbW92aW5nIGEgc2VjdGlvbiB3aXRoICJnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24iLCB3aGVuIGl0cworICAgc2VjdGlvbiBoZWFkZXIgaGFzIGEgdmFyaWFibGUgZGVmaW5pdGlvbiBvbiB0aGUgc2FtZSBsaW5lLCBsb3N0CisgICB0aGF0IHZhcmlhYmxlIGRlZmluaXRpb24uCisKKyAqICJnaXQgcmViYXNlIC1wIC0tb250byIgdXNlZCB0byBhbHdheXMgbGVhdmUgc2lkZSBicmFuY2hlcyBvZiBhIG1lcmdlCisgICBpbnRhY3QsIGV2ZW4gd2hlbiBib3RoIGJyYW5jaGVzIGFyZSBzdWJqZWN0IHRvIHJld3JpdGluZy4KKworICogImdpdCByZXBhY2siIHVzZWQgdG8gZmFpdGhmdWxseSBmb2xsb3cgZ3JhZnRzIGFuZCBjb25zaWRlcmVkIHRydWUKKyAgIHBhcmVudHMgcmVjb3JkZWQgaW4gdGhlIGNvbW1pdCBvYmplY3QgdW5yZWFjaGFibGUgZnJvbSB0aGUgY29tbWl0LgorICAgQWZ0ZXIgc3VjaCBhIHJlcGFja2luZywgeW91IGNhbm5vdCByZW1vdmUgZ3JhZnRzIHdpdGhvdXQgY29ycnVwdGluZworICAgdGhlIHJlcG9zaXRvcnkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZGlkIG5vdCBkZXRlY3QgZXJyb25lb3VzIGxvb3BzIGluIGFsaWFzIGV4cGFuc2lvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOWJhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjEudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0dJVCB2MS42LjUuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBjb3JydXB0IHBhY2sgY291bGQgbWFrZSBjb2RlcGF0aCB0byByZWFkIG9iamVjdHMgaW50byBhbgorICAgaW5maW5pdGUgbG9vcC4KKworICogRG93bmxvYWQgdGhyb3VnaHB1dCBkaXNwbGF5IHdhcyBhbHdheXMgc2hvd24gaW4gS2lCL3MgYnV0IG9uIGZhc3QgbGlua3MKKyAgIGl0IGlzIG1vcmUgYXBwcm9wcmlhdGUgdG8gc2hvdyBpdCBpbiBNaUIvcy4KKworICogImdpdCBncmVwIC1mIGZpbGVuYW1lIiB1c2VkIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYW5kIHNlZ2ZhdWx0ZWQuCisKKyAqICJnaXQgY2xvbmUgLWIgYnJhbmNoIiBnYXZlIGEgd3JvbmcgY29tbWl0IG9iamVjdCBuYW1lIHRvIHBvc3QtY2hlY2tvdXQKKyAgIGhvb2suCisKKyAqICJnaXQgcHVsbCIgb3ZlciBodHRwIGRpZCBub3Qgd29yayBvbiBtc3lzLgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3Y2NjZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuMi50eHQKQEAgLTAsMCArMSwxOSBAQAorR0lUIHYxLjYuNS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNS4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBJbnN0YWxsYXRpb24gb2YgdGVtcGxhdGVzIHRyaWdnZXJlZCBhIGJ1ZyBpbiBidXN5Ym94IHdoZW4gdXNpbmcgdGFyCisgICBpbXBsZW1lbnRhdGlvbiBmcm9tIGl0LgorCisgKiAiZ2l0IGFkZCAtaSIgaW5jb3JyZWN0bHkgaWdub3JlZCBwYXRocyB0aGF0IGFyZSBhbHJlYWR5IGluIHRoZSBpbmRleAorICAgaWYgdGhleSBtYXRjaGVkIC5naXRpZ25vcmUgcGF0dGVybnMuCisKKyAqICJnaXQgZGVzY3JpYmUgLS1hbHdheXMiIHNob3VsZCBoYXZlIHByb2R1Y2VkIHNvbWUgb3V0cHV0IGV2ZW4gdGhlcmUKKyAgIHdlcmUgbm8gdGFncyBpbiB0aGUgcmVwb3NpdG9yeSwgYnV0IGl0IGRpZG4ndC4KKworICogImdpdCBscy1maWxlcyIgd2hlbiBzaG93aW5nIHRyYWNrZWQgZmlsZXMgaW5jb3JyZWN0bHkgcGFpZCBhdHRlbnRpb24KKyAgIHRvIHRoZSBleGNsdWRlIHBhdHRlcm5zLgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmYWQxYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuMy50eHQKQEAgLTAsMCArMSw2MyBAQAorR2l0IHYxLjYuNS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBpbmZvL2dyYWZ0cyBmaWxlIGRpZG4ndCBpZ25vcmUgdHJhaWxpbmcgQ1IgYXQgdGhlIGVuZCBvZiBsaW5lcy4KKworICogUGFja2FnZXMgZ2VuZXJhdGVkIG9uIG5ld2VyIEZDIHdlcmUgdW5yZWFkYWJsZSBieSBvbGRlciB2ZXJzaW9ucyBvZgorICAgUlBNIGFzIHRoZSBuZXcgZGVmYXVsdCBpcyB0byB1c2Ugc3Ryb25nZXIgaGFzaC4KKworICogb3V0cHV0IGZyb20gImdpdCBibGFtZSIgd2FzIHVucmVhZGFibGUgd2hlbiB0aGUgZmlsZSBlbmRlZCBpbiBhbgorICAgaW5jb21wbGV0ZSBsaW5lLgorCisgKiAiZ2l0IGFkZCAtaS8tcCIgZGlkbid0IGhhbmRsZSBkZWxldGlvbiBvZiBlbXB0eSBmaWxlcyBjb3JyZWN0bHkuCisKKyAqICJnaXQgY2xvbmUiIHRha2VzIHVwIHRvIHR3byBwYXJhbWV0ZXJzLCBidXQgZGlkIG5vdCBjb21wbGFpbiB3aGVuCisgICBnaXZlbiBtb3JlIGFyZ3VtZW50cyB0aGFuIG5lY2Vzc2FyeSBhbmQgc2lsZW50bHkgaWdub3JlZCB0aGVtLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgZGlkIG5vdCByZWFkIGZpbGVzIGdpdmVuIGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKyAgIGNvcnJlY3RseSB3aGVuIGl0IGlzIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5LgorCisgKiAiZ2l0IGRpZmYgLS1jb2xvci13b3JkcyAtVTAiIGRpZG4ndCB3b3JrIGNvcnJlY3RseS4KKworICogVGhlIGhhbmRsaW5nIG9mIGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQgb2YgZmlsZSBieSAiZ2l0IGRpZmYvYXBwbHkKKyAgIC0td2hpdGVzcGFjZSIgd2FzIGluY29uc2lzdGVudCB3aXRoIHRoZSBvdGhlciBraW5kcyBvZiBlcnJvcnMuCisgICBUaGV5IGFyZSBub3cgY29sb3JlZCwgd2FybmVkIGFnYWluc3QsIGFuZCBmaXhlZCB0aGUgc2FtZSB3YXkgYXMgb3RoZXJzLgorCisgKiBUaGVyZSB3YXMgbm8gd2F5IHRvIGFsbG93IGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQgb2YgZmlsZSB3aXRob3V0CisgICBhbGxvd2luZyBleHRyYSBibGFua3MgYXQgdGhlIGVuZCBvZiBsaW5lcy4gIFlvdSBjYW4gdXNlIGJsYW5rLWF0LWVvZgorICAgYW5kIGJsYW5rLWF0LWVvbCB3aGl0ZXNwYWNlIGVycm9yIGNsYXNzIHRvIHNwZWNpZnkgdGhlbSBzZXBhcmF0ZWx5LgorICAgVGhlIG9sZCB0cmFpbGluZy1zcGFjZSBlcnJvciBjbGFzcyBpcyBub3cgYSBzaG9ydC1oYW5kIHRvIHNldCBib3RoLgorCisgKiAiLXAiIG9wdGlvbiB0byAiZ2l0IGZvcm1hdC1wYXRjaCIgd2FzIHN1cHBvc2VkIHRvIHN1cHByZXNzIGRpZmZzdGF0CisgICBnZW5lcmF0aW9uLCBidXQgaXQgd2FzIGJyb2tlbiBzaW5jZSAxLjYuMS4KKworICogImdpdCBpbWFwLXNlbmQiIGRpZCBub3QgY29tcGlsZSBjbGVhbmx5IHdpdGggbmV3ZXIgT3BlblNTTC4KKworICogImdpdCBoZWxwIC1hIiBvdXRzaWRlIG9mIGEgZ2l0IHJlcG9zaXRvcnkgd2FzIGJyb2tlbi4KKworICogImdpdCBscy1maWxlcyAtaSIgd2FzIHN1cHBvc2VkIHRvIGJlIGludmVyc2Ugb2YgImdpdCBscy1maWxlcyIgd2l0aG91dCAtaQorICAgd2l0aCByZXNwZWN0IHRvIGV4Y2x1ZGUgcGF0dGVybnMsIGJ1dCBpdCB3YXMgYnJva2VuIHNpbmNlIDEuNi41LjIuCisKKyAqICJnaXQgbHMtcmVtb3RlIiBvdXRzaWRlIG9mIGEgZ2l0IHJlcG9zaXRvcnkgb3ZlciBodHRwIHdhcyBicm9rZW4uCisKKyAqICJnaXQgcmViYXNlIC1pIiBnYXZlIGJvZ3VzIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgY29tbWFuZCB3b3JkIHdhcworICAgbWlzc3BlbGxlZC4KKworICogImdpdCByZWNlaXZlLXBhY2siIHRoYXQgaXMgcnVuIGluIHJlc3BvbnNlIHRvICJnaXQgcHVzaCIgZGlkIG5vdCBydW4KKyAgIGdhcmJhZ2UgY29sbGVjdGlvbiBub3IgdXBkYXRlLXNlcnZlci1pbmZvLCBidXQgaW4gbGFyZ2VyIGhvc3Rpbmcgc2l0ZXMsCisgICB0aGVzZSBhbG1vc3QgYWx3YXlzIG5lZWQgdG8gYmUgcnVuLiAgVG8gaGVscCBzaXRlIGFkbWluaXN0cmF0b3JzLCB0aGUKKyAgIGNvbW1hbmQgbm93IHJ1bnMgImdjIC0tYXV0byIgYW5kICJ1LXMtaSIgYnkgc2V0dGluZyByZWNlaXZlLmF1dG9nYworICAgYW5kIHJlY2VpdmUudXBkYXRlc2VydmVyaW5mbyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcywgcmVzcGVjdGl2ZWx5LgorCisgKiBSZWxlYXNlIG5vdGVzIHNwZWxsZWQgdGhlIHBhY2thZ2UgbmFtZSB3aXRoIGluY29ycmVjdCBjYXBpdGFsaXphdGlvbi4KKworICogImdpdHdlYiIgZGlkIG5vdCBlc2NhcGUgbm9uLWFzY2lpIGNoYXJhY3RlcnMgY29ycmVjdGx5IGluIHRoZSBVUkwuCisKKyAqICJnaXR3ZWIiIHNob3dlZCAicGF0Y2giIGxpbmsgZXZlbiBmb3IgbWVyZ2UgY29tbWl0cy4KKworICogImdpdHdlYiIgc2hvd2VkIGluY29ycmVjdCBsaW5rcyBmb3IgYmxvYiBsaW5lIG51bWJlcnMgaW4gcGF0aGluZm8gbW9kZS4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NDMzM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjQudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dpdCB2MS42LjUuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBoZWxwIiAod2l0aG91dCBhcmd1bWVudCkgdXNlZCB0byBjaGVjayBpZiB5b3UgYXJlIGluIGEgZGlyZWN0b3J5CisgICB1bmRlciBnaXQgY29udHJvbC4gVGhlcmUgd2FzIG5vIGJyZWFrYWdlIGluIGJlaGF2aW91ciBwZXItc2UsIGJ1dCB0aGlzCisgICB3YXMgdW5uZWNlc3NhcnkuCisKKyAqICJnaXQgcHJ1bmUtcGFja2VkIiBnYXZlIHByb2dyZXNzIG91dHB1dCBldmVuIHdoZW4gaXRzIHN0YW5kYXJkIGVycm9yIGlzCisgICBub3QgY29ubmVjdGVkIHRvIGEgdGVybWluYWw7IHRoaXMgY2F1c2VkIGNyb24gam9icyB0aGF0IHJ1biBpdCB0bworICAgcHJvZHVjZSBjcnVmdC4KKworICogImdpdCBwYWNrLW9iamVjdHMgLS1hbGwtcHJvZ3Jlc3MiIGlzIGFuIG9wdGlvbiB0byBhc2sgcHJvZ3Jlc3Mgb3V0cHV0CisgICBmcm9tIHdyaXRlLW9iamVjdCBwaGFzZSBfaWZfIHByb2dyZXNzIG91dHB1dCB3ZXJlIHRvIGJlIHByb2R1Y2VkLCBhbmQKKyAgIHNob3VsZG4ndCBoYXZlIGZvcmNlZCB0aGUgcHJvZ3Jlc3Mgb3V0cHV0LgorCisgKiAiZ2l0IGFwcGx5IC1wPG4+IC0tZGlyZWN0b3J5PTxlbHNld2hlcmU+IiBkaWQgbm90IHdvcmsgd2VsbCBmb3IgYQorICAgbm9uLWRlZmF1bHQgdmFsdWUgb2Ygbi4KKworICogImdpdCBtZXJnZSBmb28gSEVBRCIgd2FzIG1pc3BhcnNlZCBhcyBhbiBvbGQtc3R5bGUgaW52b2NhdGlvbiBvZiB0aGUKKyAgIGNvbW1hbmQgYW5kIHByb2R1Y2VkIGEgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2UuICBBcyBpdCBkb2VzIG5vdCBzcGVjaWZ5CisgICBhbnkgb3RoZXIgYnJhbmNoIHRvIG1lcmdlLCBpdCBzaG91bGRuJ3QgYmUgbWlzdGFrZW4gYXMgc3VjaC4gIFdlIHdpbGwKKyAgIHJlbW92ZSB0aGUgb2xkIHN0eWxlICJnaXQgbWVyZ2UgPG1lc3NhZ2U+IEhFQUQgPGNvbW1pdD4uLi4iICBzeW50YXggaW4KKyAgIGZ1dHVyZSB2ZXJzaW9ucywgYnV0IG5vdCBpbiB0aGlzIHJlbGVhc2UsCisKKyAqICJnaXQgbWVyZ2UgLW0gPG1lc3NhZ2U+IDxicmFuY2g+Li4uIiBhZGRlZCB0aGUgc3RhbmRhcmQgbWVyZ2UgbWVzc2FnZQorICAgb24gaXRzIG93biBhZnRlciB1c2VyLXN1cHBsaWVkIG1lc3NhZ2UsIHdoaWNoIHNob3VsZCBoYXZlIG92ZXJyaWRkZW4gdGhlCisgICBzdGFuZGFyZCBvbmUuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2ZjNTdkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS41LnR4dApAQCAtMCwwICsxLDQ5IEBACitHaXQgdjEuNi41LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi41LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE1hbnVhbCBwYWdlcyBjYW4gYmUgZm9ybWF0dGVkIHdpdGggb2xkZXIgeG1sdG8gYWdhaW4uCisKKyAqIEdSRVBfT1BUSU9OUyBleHBvcnRlZCBmcm9tIHVzZXIncyBlbnZpcm9ubWVudCBjb3VsZCBoYXZlIGJyb2tlbgorICAgb3VyIHNjcmlwdGVkIGNvbW1hbmRzLgorCisgKiBJbiBjb25maWd1cmF0aW9uIGZpbGVzLCBhIGZldyB2YXJpYWJsZXMgdGhhdCBuYW1lIHBhdGhzIGNhbiBiZWdpbiB3aXRoCisgICB+LyBhbmQgfnVzZXJuYW1lLyBhbmQgdGhleSBhcmUgZXhwYW5kZWQgYXMgZXhwZWN0ZWQuICBUaGlzIGlzIG5vdCBhCisgICBidWdmaXggYnV0IDEuNi42IHdpbGwgaGF2ZSB0aGlzIGFuZCB3aXRob3V0IGJhY2twb3J0aW5nIHVzZXJzIGNhbm5vdAorICAgZWFzaWx5IHVzZSB0aGUgc2FtZSB+Ly5naXRjb25maWcgYWNyb3NzIHZlcnNpb25zLgorCisgKiAiZ2l0IGRpZmYgLUIgLU0iIGRpZCB0aGUgc2FtZSBjb21wdXRhdGlvbiB0byBoYXNoIGxpbmVzIG9mIGNvbnRlbnRzCisgICB0d2ljZSwgYW5kIGhlbGQgb250byBtZW1vcnkgYWZ0ZXIgaXQgaGFzIHVzZWQgdGhlIGRhdGEgaW4gaXQKKyAgIHVubmVjZXNzYXJpbHkgYmVmb3JlIGl0IGZyZWVkLgorCisgKiAiZ2l0IGRpZmYgLUIiIGFuZCAiZ2l0IGRpZmYgLS1kaXJzdGF0IiB3YXMgbm90IGNvdW50aW5nIG5ld2x5IGFkZGVkCisgICBjb250ZW50cyBjb3JyZWN0bHkuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIHJldmlzaW9ucy4uLiAtLSBwYXRoIiBpc3N1ZWQgYW4gaW5jb3JyZWN0IGVycm9yCisgICBtZXNzYWdlIHRoYXQgc3VnZ2VzdGVkIHRvIHVzZSAiLS0iIG9uIHRoZSBjb21tYW5kIGxpbmUgd2hlbiBwYXRoCisgICBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY3VycmVudCB3b3JrIHRyZWUgKGl0IGlzIGEgc2VwYXJhdGUgbWF0dGVyIGlmCisgICBpdCBtYWtlcyBzZW5zZSB0byBsaW1pdCBmb3JtYXQtcGF0Y2ggd2l0aCBwYXRoc3BlY3MgbGlrZSB0aGF0CisgICB3aXRob3V0IHVzaW5nIHRoZSAtLWZ1bGwtZGlmZiBvcHRpb24pLgorCisgKiAiZ2l0IGdyZXAgLUYgLWkgU3RSaU5nIiBkaWQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuCisKKyAqIEVudW1lcmF0aW9uIG9mIGF2YWlsYWJsZSBtZXJnZSBzdHJhdGVnaWVzIGl0ZXJhdGVkIG92ZXIgdGhlIGxpc3Qgb2YKKyAgIGNvbW1hbmRzIGluIGEgd3Jvbmcgd2F5LCBzb21ldGltZXMgcHJvZHVjaW5nIGFuIGluY29ycmVjdCByZXN1bHQuCisKKyAqICJnaXQgc2hvcnRsb2ciIGRpZCBub3QgaG9ub3IgdGhlICJlbmNvZGluZyIgaGVhZGVyIGVtYmVkZGVkIGluIHRoZQorICAgY29tbWl0IG9iamVjdCBsaWtlICJnaXQgbG9nIiBkaWQuCisKKyAqIFJlYWRpbmcgcHJvZ3Jlc3MgbWVzc2FnZXMgdGhhdCBjb21lIGZyb20gdGhlIHJlbW90ZSBzaWRlIHdoaWxlIHJ1bm5pbmcKKyAgICJnaXQgcHVsbCIgaXMgZ2l2ZW4gcHJlY2VkZW5jZSBvdmVyIHJlYWRpbmcgdGhlIGFjdHVhbCBwYWNrIGRhdGEgdG8KKyAgIHByZXZlbnQgZ2FyYmxlZCBwcm9ncmVzcyBtZXNzYWdlIG9uIHRoZSB1c2VyJ3MgdGVybWluYWwuCisKKyAqICJnaXQgcmViYXNlIiBnb3QgY29uZnVzZWQgd2hlbiB0aGUgbG9nIG1lc3NhZ2UgYmVnYW4gd2l0aCBjZXJ0YWluCisgICBzdHJpbmdzIHRoYXQgbG9va2VkIGxpa2UgU3ViamVjdDosIERhdGU6IG9yIEZyb206IGhlYWRlci4KKworICogImdpdCByZXNldCIgYWNjaWRlbnRhbGx5IHJ1biBpbiAuZ2l0LyBkaXJlY3RvcnkgY2hlY2tlZCBvdXQgdGhlCisgICB3b3JrIHRyZWUgY29udGVudHMgaW4gdGhlcmUuCisKKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZWFmNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjYudHh0CkBAIC0wLDAgKzEsMjMgQEAKK0dpdCB2MS42LjUuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhZGQgLXAiIGhhZCBhIHJlZ3Jlc3Npb24gc2luY2UgdjEuNi41LjMgdGhhdCBicm9rZSBkZWxldGlvbiBvZgorICAgbm9uLWVtcHR5IGZpbGVzLgorCisgKiAiZ2l0IGFyY2hpdmUgLW8gby56aXAgLS0gTWFrZWZpbGUiIHByb2R1Y2VkIGFuIGFyY2hpdmUgaW4gby56aXAKKyAgIGJ1dCBpbiBQT1NJWCB0YXIgZm9ybWF0LgorCisgKiBFcnJvciBtZXNzYWdlIGdpdmVuIHRvICJnaXQgcHVsbCAtLXJlYmFzZSIgd2hlbiB0aGUgdXNlciBkaWRuJ3QgZ2l2ZQorICAgZW5vdWdoIGNsdWUgYXMgdG8gd2hhdCBicmFuY2ggdG8gaW50ZWdyYXRlIHdpdGggc3RpbGwgdGFsa2VkIGFib3V0CisgICAibWVyZ2luZyB3aXRoIiB0aGUgYnJhbmNoLgorCisgKiBFcnJvciBtZXNzYWdlcyBnaXZlbiBieSAiZ2l0IG1lcmdlIiB3aGVuIHRoZSBtZXJnZSByZXN1bHRlZCBpbiBhCisgICBmYXN0LWZvcndhcmQgc3RpbGwgd2VyZSBpbiBwbHVtYmluZyBsaW5nbywgZXZlbiB0aG91Z2ggaW4gdjEuNi41CisgICB3ZSByZXdvcmRlZCBtZXNzYWdlcyBpbiBvdGhlciBjYXNlcy4KKworICogVGhlIHBvc3QtdXBsb2FkLWhvb2sgcnVuIGJ5IHVwbG9hZC1wYWNrIGluIHJlc3BvbnNlIHRvICJnaXQgZmV0Y2giIGhhcworICAgYmVlbiByZW1vdmVkLCBkdWUgdG8gc2VjdXJpdHkgY29uY2VybnMgKHRoZSBob29rIGZpcnN0IGFwcGVhcmVkIGluCisgICAxLjYuNSkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzUzMDJjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS43LnR4dApAQCAtMCwwICsxLDE5IEBACitHaXQgdjEuNi41LjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi41LjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogSWYgYSB1c2VyIHNwZWNpZmllcyBhIGNvbG9yIGZvciBhIDxzbG90PiAoaS5lLiBhIGNsYXNzIG9mIHRoaW5ncyB0byBzaG93CisgIGluIGEgcGFydGljdWxhciBjb2xvcikgdGhhdCBpcyBrbm93biBvbmx5IGJ5IG5ld2VyIHZlcnNpb25zIG9mIGdpdAorICAoZS5nLiAiY29sb3IuZGlmZi5mdW5jIiB3YXMgcmVjZW50bHkgYWRkZWQgZm9yIHVwY29taW5nIDEuNi42IHJlbGVhc2UpLAorICBhbiBvbGRlciB2ZXJzaW9uIG9mIGdpdCBzaG91bGQganVzdCBpZ25vcmUgdGhlbS4gIEluc3RlYWQgd2UgZGlhZ25vc2VkCisgIGl0IGFzIGFuIGVycm9yLgorCisqIFdpdGggaGVscC5hdXRvY29ycmVjdCBzZXQgdG8gbm9uLXplcm8gdmFsdWUsIHRoZSBsb2dpYyB0byBndWVzcyB0eXBvcworICBpbiB0aGUgc3ViY29tbWFuZCBuYW1lIG1pc2ZpcmVkIGFuZCByYW4gYSByYW5kb20gbm9uc2Vuc2UgY29tbWFuZC4KKworKiBJZiBhIGNvbW1hbmQgaXMgcnVuIHdpdGggYW4gYWJzb2x1dGUgcGF0aCBhcyBhIHBhdGhzcGVjIGluc2lkZSBhIGJhcmUKKyAgcmVwb3NpdG9yeSwgZS5nLiAicmV2LWxpc3QgSEVBRCAtLSAvaG9tZSIsIHRoZSBjb2RlIHRyaWVkIHRvIHJ1bgorICBzdHJsZW4oKSBvbiBOVUxMLCB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIGdldF9naXRfd29ya190cmVlKCksIGFuZAorICBzZWdmYXVsdGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS44LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyNGJlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuOC50eHQKQEAgLTAsMCArMSwyOCBAQAorR2l0IHYxLjYuNS44IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNS43CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgY291bnQtb2JqZWN0cyIgZGlkIG5vdCBoYW5kbGUgcGFja2ZpbGVzIHRoYXQgYXJlIGJpZ2dlciB0aGFuIDRHIG9uCisgIHBsYXRmb3JtcyB3aXRoIDMyLWJpdCBvZmZfdC4KKworKiAiZ2l0IHJlYmFzZSAtaSIgZGlkIG5vdCBhYm9ydCBjbGVhbmx5IGlmIGl0IGZhaWxlZCB0byBsYXVuY2ggdGhlIGVkaXRvci4KKworKiAiZ2l0IGJsYW1lIiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIGNvbW1pdCBsYWNrZWQgdGhlIGF1dGhvciBuYW1lLgorCisqICJnaXQgZmFzdC1pbXBvcnQiIGNob2tlZCB3aGVuIGhhbmRsaW5nIGEgdGFnIHRoYXQgcG9pbnRzIGF0IGFuIG9iamVjdAorICB0aGF0IGlzIG5vdCBhIGNvbW1pdC4KKworKiAiZ2l0IHJlc2V0IC0taGFyZCIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIEdJVF9XT1JLX1RSRUUgZW52aXJvbm1lbnQKKyAgdmFyaWFibGUgaXMgdXNlZCB0byBwb2ludCBhdCB0aGUgcm9vdCBvZiB0aGUgdHJ1ZSB3b3JrIHRyZWUuCisKKyogImdpdCBncmVwIiBmZWQgYSBidWZmZXIgdGhhdCBpcyBub3QgTlVMLXRlcm1pbmF0ZWQgdG8gdW5kZXJseWluZworICByZWdleGVjKCkuCisKKyogImdpdCBjaGVja291dCAtbSBvdGhlciIgd2hpbGUgb24gYSBicmFuY2ggdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBjb21taXQKKyAgc2VnZmF1bHRlZCwgaW5zdGVhZCBvZiBmYWlsaW5nLgorCisqICJnaXQgYnJhbmNoIC1hIG90aGVyIiBzaG91bGQgaGF2ZSBkaWFnbm9zZWQgdGhlIGNvbW1hbmQgYXMgYW4gZXJyb3IuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgYWxzbyBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuOS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNDY5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjkudHh0CkBAIC0wLDAgKzEsMTggQEAKK0dpdCB2MS42LjUuOSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUuOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gb3ZlcmxvbmcgbGluZSBhZnRlciAiLmdpdGRpcjogIiBpbiBhIGdpdCBmaWxlIGNhdXNlZCBvdXQgb2YgYm91bmRzCisgICBhY2Nlc3MgdG8gYW4gYXJyYXkgb24gdGhlIHN0YWNrLgorCisgKiAiZ2l0IGJsYW1lIC1MICRzdGFydCwkZW5kIiBzZWdmYXVsdGVkIHdoZW4gdG9vIGxhcmdlICRzdGFydCB3YXMgZ2l2ZW4uCisKKyAqICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1zdG9wLWF0LW5vbi1vcHRpb24iIGRpZCBub3Qgc3RvcCBhdCBub24gb3B0aW9uCisgICB3aGVuIC0ta2VlcC1kYXNoZGFzaCB3YXMgaW4gZWZmZWN0LgorCisgKiAiZ2l0d2ViIiBjYW4gc29tZXRpbWVzIGJlIHRyaWNrZWQgaW50byBwYXJyb3R0aW5nIGEgZmlsZW5hbWUgYXJndW1lbnQKKyAgIGdpdmVuIGluIGEgcmVxdWVzdCB3aXRob3V0IHByb3Blcmx5IHF1b3RpbmcuCisKK090aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzdmN2RhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS50eHQKQEAgLTAsMCArMSwxNjkgQEAKK0dJVCB2MS42LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIGdpdCAxLjcuMCwgd2hpY2ggd2FzIHBsYW5uZWQgdG8gYmUgdGhlIHJlbGVhc2UgYWZ0ZXIgMS42LjUsICJnaXQKK3B1c2giIGludG8gYSBicmFuY2ggdGhhdCBpcyBjdXJyZW50bHkgY2hlY2tlZCBvdXQgd2lsbCBiZSByZWZ1c2VkIGJ5CitkZWZhdWx0LgorCitZb3UgY2FuIGNob29zZSB3aGF0IHNob3VsZCBoYXBwZW4gdXBvbiBzdWNoIGEgcHVzaCBieSBzZXR0aW5nIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGluIHRoZSByZWNlaXZpbmcKK3JlcG9zaXRvcnkuCisKK0Fsc28sICJnaXQgcHVzaCAkdGhlcmUgOiRraWxsZWQiIHRvIGRlbGV0ZSB0aGUgYnJhbmNoICRraWxsZWQgaW4gYSByZW1vdGUKK3JlcG9zaXRvcnkgJHRoZXJlLCB3aGVuICRraWxsZWQgYnJhbmNoIGlzIHRoZSBjdXJyZW50IGJyYW5jaCBwb2ludGVkIGF0IGJ5CitpdHMgSEVBRCwgd2lsbCBiZSByZWZ1c2VkIGJ5IGRlZmF1bHQuCisKK1lvdSBjYW4gY2hvb3NlIHdoYXQgc2hvdWxkIGhhcHBlbiB1cG9uIHN1Y2ggYSBwdXNoIGJ5IHNldHRpbmcgdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIHJlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQgaW4gdGhlIHJlY2VpdmluZworcmVwb3NpdG9yeS4KKworVG8gZWFzZSB0aGUgdHJhbnNpdGlvbiBwbGFuLCB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgb2Ygc3VjaCBhCitwdXNoIHJ1bm5pbmcgdGhpcyByZWxlYXNlIHdpbGwgaXNzdWUgYSBiaWcgd2FybmluZyB3aGVuIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBtaXNzaW5nLiAgUGxlYXNlIHJlZmVyIHRvOgorCisgIGh0dHA6Ly9naXQub3IuY3ovZ2l0d2lraS9HaXRGYXEjbm9uLWJhcmUKKyAgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0Lzd2YnB0bHN1eXYuZnNmQGdpdHN0ZXIuc2lhbWVzZS5keW5kbnMub3JnLworCitmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSByZWFzb24gd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZCBhbmQgdGhlCit0cmFuc2l0aW9uIHBsYW4uCisKK1VwZGF0ZXMgc2luY2UgdjEuNi40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworICogdmFyaW91cyB1cGRhdGVzIHRvIGdpdGssIGdpdC1zdm4gYW5kIGdpdHdlYi4KKworKHBvcnRhYmlsaXR5KQorCisgKiBtb3JlIGltcHJvdmVtZW50cyBvbiBtaW5ndyBwb3J0LgorCisgKiBtaW5ndyB3aWxsIGFsc28gZ2l2ZSBGUlNYIGFzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgTEVTUworICAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIG9uZS4KKworICogaW5pdGlhbCBzdXBwb3J0IHRvIGNvbXBpbGUgZ2l0IG9uIFdpbmRvd3Mgd2l0aCBNU1ZDLgorCisocGVyZm9ybWFuY2UpCisKKyAqIE9uIG1ham9yIHBsYXRmb3JtcywgdGhlIHN5c3RlbSBjYW4gYmUgY29tcGlsZWQgdG8gdXNlIHdpdGggTGludXMncworICAgYmxvY2stc2hhMSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU0hBLTEgaGFzaCBhbGdvcml0aG0sIHdoaWNoCisgICBvdXRwZXJmb3JtcyB0aGUgZGVmYXVsdCBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiB3ZSBib3Jyb3dlZCBmcm9tCisgICBNb3ppbGxhLgorCisgKiBVbm5lY2Vzc2FyeSBpbmVmZmljaWVuY3kgaW4gZGVlcGVuaW5nIG9mIGEgc2hhbGxvdyByZXBvc2l0b3J5IGhhcworICAgYmVlbiByZW1vdmVkLgorCisgKiAiZ2l0IGNsb25lIiBkb2VzIG5vdCBncmFiIG9iamVjdHMgdGhhdCBpdCBkb2VzIG5vdCBuZWVkIChpLmUuCisgICByZWZlcmVuY2VkIG9ubHkgZnJvbSByZWZzIG91dHNpZGUgcmVmcy9oZWFkcyBhbmQgcmVmcy90YWdzCisgICBoaWVyYXJjaHkpIGFueW1vcmUuCisKKyAqIFRoZSAiZ2l0IiBtYWluIGJpbmFyeSB1c2VkIHRvIGxpbmsgd2l0aCBsaWJjdXJsLCB3aGljaCB0aGVuIGRyYWdnZWQKKyAgIGluIGEgbGFyZ2UgbnVtYmVyIG9mIGV4dGVybmFsIGxpYnJhcmllcy4gIFdoZW4gdXNpbmcgYmFzaWMgcGx1bWJpbmcKKyAgIGNvbW1hbmRzIGluIHNjcmlwdHMsIHRoaXMgdW5uZWNlc3NhcmlseSBzbG93ZWQgdGhpbmdzIGRvd24uICBXZSBub3cKKyAgIGltcGxlbWVudCBodHRwL2h0dHBzL2Z0cCB0cmFuc2ZlciBhcyBhIHNlcGFyYXRlIGV4ZWN1dGFibGUgYXMgd2UKKyAgIHVzZWQgdG8uCisKKyAqICJnaXQgY2xvbmUiIHJ1biBsb2NhbGx5IGhhcmRsaW5rcyBvciBjb3BpZXMgdGhlIGZpbGVzIGluIC5naXQvIHRvCisgICBuZXdseSBjcmVhdGVkIHJlcG9zaXRvcnkuICBJdCB1c2VkIHRvIGdpdmUgbmV3IG10aW1lIHRvIGNvcGllZCBmaWxlcywKKyAgIGJ1dCB0aGlzIGRlbGF5ZWQgZ2FyYmFnZSBjb2xsZWN0aW9uIHRvIHRyaWdnZXIgdW5uZWNlc3NhcmlseSBpbiB0aGUKKyAgIGNsb25lZCByZXBvc2l0b3J5LiAgV2Ugbm93IHByZXNlcnZlIG10aW1lIGZvciB0aGVzZSBmaWxlcyB0byBhdm9pZAorICAgdGhpcyBpc3N1ZS4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisgKiBIdW1hbiB3cml0YWJsZSBkYXRlIGZvcm1hdCB0byB2YXJpb3VzIG9wdGlvbnMsIGUuZy4gLS1zaW5jZT15ZXN0ZXJkYXksCisgICBtYXN0ZXJAezIwMDAuMDkuMTd9LCBhcmUgdGF1Z2h0IHRvIGluZmVyIHNvbWUgb21pdHRlZCBpbnB1dCBwcm9wZXJseS4KKworICogQSBmZXcgcHJvZ3JhbXMgZ2F2ZSB2ZXJib3NlICJhZHZpY2UiIG1lc3NhZ2VzIHRvIGhlbHAgdW5pbml0aWF0ZWQKKyAgIHBlb3BsZSB3aGVuIGlzc3VpbmcgZXJyb3IgbWVzc2FnZXMuICBBbiBpbmZyYXN0cnVjdHVyZSB0byBhbGxvdworICAgdXNlcnMgdG8gc3F1ZWxjaCB0aGVtIGhhcyBiZWVuIGludHJvZHVjZWQsIGFuZCBhIGZldyBzdWNoIG1lc3NhZ2VzCisgICBjYW4gYmUgc2lsZW5jZWQgbm93LgorCisgKiByZWZzL3JlcGxhY2UvIGhpZXJhcmNoeSBpcyBkZXNpZ25lZCB0byBiZSB1c2FibGUgYXMgYSByZXBsYWNlbWVudAorICAgb2YgdGhlICJncmFmdHMiIG1lY2hhbmlzbSwgd2l0aCB0aGUgYWRkZWQgYWR2YW50YWdlIHRoYXQgaXQgY2FuIGJlCisgICB0cmFuc2ZlcnJlZCBhY3Jvc3MgcmVwb3NpdG9yaWVzLgorCisgKiAiZ2l0IGFtIiBsZWFybmVkIHRvIG9wdGlvbmFsbHkgaWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMuCisKKyAqICJnaXQgYW0iIGhhbmRsZXMgaW5wdXQgZS1tYWlsIGZpbGVzIHRoYXQgaGFzIENSTEYgbGluZSBlbmRpbmdzIHNlbnNpYmx5LgorCisgKiAiZ2l0IGFtIiBsZWFybmVkICItLXNjaXNzb3JzIiBvcHRpb24gdG8gYWxsb3cgeW91IHRvIGRpc2NhcmQgZWFybHkgcGFydAorICAgb2YgYW4gaW5jb21pbmcgZS1tYWlsLgorCisgKiAiZ2l0IGFyY2hpdmUgLW8gb3V0cHV0LnppcCIgd29ya3Mgd2l0aG91dCBiZWluZyB0b2xkIHdoYXQgZm9ybWF0IHRvCisgICB1c2Ugd2l0aCBhbiBleHBsaWNpdCAiLS1mb3JtYXQ9emlwIi5vcHRpb24uCisKKyAqICJnaXQgY2hlY2tvdXQiLCAiZ2l0IHJlc2V0IiBhbmQgImdpdCBzdGFzaCIgbGVhcm5lZCB0byBwaWNrIGFuZAorICAgY2hvb3NlIHRvIHVzZSBzZWxlY3RlZCBjaGFuZ2VzIHlvdSBtYWRlLCBzaW1pbGFyIHRvICJnaXQgYWRkIC1wIi4KKworICogImdpdCBjbG9uZSIgbGVhcm5lZCBhICItYiIgb3B0aW9uIHRvIHBpY2sgYSBIRUFEIHRvIGNoZWNrIG91dAorICAgZGlmZmVyZW50IGZyb20gdGhlIHJlbW90ZSdzIGRlZmF1bHQgYnJhbmNoLgorCisgKiAiZ2l0IGNsb25lIiBsZWFybmVkIC0tcmVjdXJzaXZlIG9wdGlvbi4KKworICogImdpdCBjbG9uZSIgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkgb24gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbSB1c2VkIHRvCisgICBjb3B5IGluZGl2aWR1YWwgb2JqZWN0IGZpbGVzIHdpdGhvdXQgcHJlc2VydmluZyB0aGUgb2xkIHRpbWVzdGFtcCwgZ2l2aW5nCisgICB0aGVtIGV4dHJhIGxpZmV0aW1lIGluIHRoZSBuZXcgcmVwb3NpdG9yeSB1bnRpbCB0aGV5IGdjJ2VkLgorCisgKiAiZ2l0IGNvbW1pdCAtLWRyeS1ydW4gJGFyZ3MiIGlzIGEgbmV3IHJlY29tbWVuZGVkIHdheSB0byBhc2sgIndoYXQgd291bGQKKyAgIGhhcHBlbiBpZiBJIHRyeSB0byBjb21taXQgd2l0aCB0aGVzZSBhcmd1bWVudHMuIgorCisgKiAiZ2l0IGNvbW1pdCAtLWRyeS1ydW4iIGFuZCAiZ2l0IHN0YXR1cyIgc2hvd3MgY29uZmxpY3RlZCBwYXRocyBpbiBhCisgICBzZXBhcmF0ZSBzZWN0aW9uIHRvIG1ha2UgdGhlbSBlYXNpZXIgdG8gc3BvdCBkdXJpbmcgYSBtZXJnZS4KKworICogImdpdCBjdnNpbXBvcnQiIG5vdyBzdXBwb3J0cyBwYXNzd29yZC1wcm90ZWN0ZWQgcHNlcnZlciBhY2Nlc3MgZXZlbgorICAgd2hlbiB0aGUgcGFzc3dvcmQgaXMgbm90IHRha2VuIGZyb20gfi8uY3ZzcGFzcyBmaWxlLgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBsZWFybmVkIC0tbm8tZGF0YSBvcHRpb24gdGhhdCBjYW4gYmUgdXNlZnVsIHdoZW4KKyAgIHJlb3JkZXJpbmcgY29tbWl0cyBhbmQgdHJlZXMgd2l0aG91dCB0b3VjaGluZyB0aGUgY29udGVudHMgb2YKKyAgIGJsb2JzLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBoYXMgYSBwYWlyIG9mIG5ldyBmcm9udC1lbmQgaW4gY29udHJpYi8gYXJlYS4KKworICogImdpdCBpbml0IiBsZWFybmVkIHRvIG1rZGlyL2NoZGlyIGludG8gYSBkaXJlY3Rvcnkgd2hlbiBnaXZlbiBhbgorICAgZXh0cmEgYXJndW1lbnQgKGkuZS4gImdpdCBpbml0IHRoaXMiKS4KKworICogImdpdCBpbnN0YXdlYiIgb3B0aW9uYWxseSBjYW4gdXNlIG1vbmdvb3NlIGFzIHRoZSB3ZWIgc2VydmVyLgorCisgKiAiZ2l0IGxvZyAtLWRlY29yYXRlIiBjYW4gb3B0aW9uYWxseSBiZSB0b2xkIHdpdGggLS1kZWNvcmF0ZT1mdWxsIHRvCisgICBnaXZlIHRoZSByZWZlcmVuY2UgbmFtZSBpbiBmdWxsLgorCisgKiAiZ2l0IG1lcmdlIiBpc3N1ZWQgYW4gdW5uZWNlc3NhcmlseSBzY2FyeSBtZXNzYWdlIHdoZW4gaXQgZGV0ZWN0ZWQKKyAgIHRoYXQgdGhlIG1lcmdlIG1heSBoYXZlIHRvIHRvdWNoIHRoZSBwYXRoIHRoYXQgdGhlIHVzZXIgaGFzIGxvY2FsCisgICB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvLiBUaGUgbWVzc2FnZSBoYXMgYmVlbiByZXdvcmRlZCB0byBtYWtlIGl0CisgICBjbGVhciB0aGF0IHRoZSBjb21tYW5kIGFib3J0ZWQsIHdpdGhvdXQgZG9pbmcgYW55IGhhcm0uCisKKyAqICJnaXQgcHVzaCIgY2FuIGJlIHRvbGQgdG8gYmUgLS1xdWlldC4KKworICogImdpdCBwdXNoIiBwYXlzIGF0dGVudGlvbiB0byB1cmwuJGJhc2UucHVzaEluc3RlYWRPZiBhbmQgdXNlcyBhIFVSTAorICAgdGhhdCBpcyBkZXJpdmVkIGZyb20gdGhlIFVSTCB1c2VkIGZvciBmZXRjaGluZy4KKworICogaW5mb3JtYXRpb25hbCBvdXRwdXQgZnJvbSAiZ2l0IHJlc2V0IiB0aGF0IGxpc3RzIHRoZSBsb2NhbGx5IG1vZGlmaWVkCisgICBwYXRocyBpcyBtYWRlIGNvbnNpc3RlbnQgd2l0aCB0aGF0IG9mICJnaXQgY2hlY2tvdXQgJGFub3RoZXJfYnJhbmNoIi4KKworICogImdpdCBzdWJtb2R1bGUiIGxlYXJuZWQgdG8gZ2l2ZSBzdWJtb2R1bGUgbmFtZSB0byBzY3JpcHRzIHJ1biB3aXRoCisgICAiZm9yZWFjaCIgc3ViY29tbWFuZC4KKworICogdmFyaW91cyBzdWJjb21tYW5kcyB0byAiZ2l0IHN1Ym1vZHVsZSIgbGVhcm5lZCAtLXJlY3Vyc2l2ZSBvcHRpb24uCisKKyAqICJnaXQgc3VibW9kdWxlIHN1bW1hcnkiIGxlYXJuZWQgLS1maWxlcyBvcHRpb24gdG8gY29tcGFyZSB0aGUgd29yaworICAgdHJlZSB2cyB0aGUgY29tbWl0IGJvdW5kIGF0IHN1Ym1vZHVsZSBwYXRoLCBpbnN0ZWFkIG9mIGNvbXBhcmluZworICAgdGhlIGluZGV4LgorCisgKiAiZ2l0IHVwbG9hZC1wYWNrIiwgd2hpY2ggaXMgdGhlIHNlcnZlciBzaWRlIHN1cHBvcnQgZm9yICJnaXQgY2xvbmUiIGFuZAorICAgImdpdCBmZXRjaCIsIGNhbiBjYWxsIGEgbmV3IHBvc3QtdXBsb2FkLXBhY2sgaG9vayBmb3Igc3RhdGlzdGljcyBwdXJwb3Nlcy4KKworKGRldmVsb3BlcnMpCisKKyAqIFdpdGggR0lUX1RFU1RfT1BUUz0iLS1yb290PS9wL2EvdC9oIiwgdGVzdHMgY2FuIGJlIHJ1biBvdXRzaWRlIHRoZQorICAgc291cmNlIGRpcmVjdG9yeTsgdXNpbmcgdG1wZnMgbWF5IGdpdmUgZmFzdGVyIHR1cm5hcm91bmQuCisKKyAqIFdpdGggTk9fUEVSTF9NQUtFTUFLRVIgc2V0LCBERVNURElSPSBpcyBub3cgaG9ub3VyZWQsIHNvIHlvdSBjYW4KKyAgIGJ1aWxkIGZvciBvbmUgbG9jYXRpb24sIGFuZCBpbnN0YWxsIGludG8gYW5vdGhlciBsb2NhdGlvbiB0byB0YXIgaXQKKyAgIHVwLgorCitGaXhlcyBzaW5jZSB2MS42LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjYuNC5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZDBhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LjEudHh0CkBAIC0wLDAgKzEsMzcgQEAKK0dpdCB2MS42LjYuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjYKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGJsYW1lIiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIGNvbW1pdCBsYWNrZWQgdGhlIGF1dGhvciBuYW1lLgorCisgKiAiZ2l0IGJyYW5jaCAtYSBuYW1lIiB3YXNuJ3QgZGlhZ25vc2VkIGFzIGFuIGVycm9yLgorCisgKiAiZ2l0IGNvdW50LW9iamVjdHMiIGRpZCBub3QgaGFuZGxlIHBhY2tmaWxlcyB0aGF0IGFyZSBiaWdnZXIgdGhhbiA0RyBvbgorICAgcGxhdGZvcm1zIHdpdGggMzItYml0IG9mZl90LgorCisgKiAiZ2l0IGNoZWNrb3V0IC1tIG90aGVyIiB3aGlsZSBvbiBhIGJyYW5jaCB0aGF0IGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdAorICAgc2VnZmF1bHRlZCwgaW5zdGVhZCBvZiBmYWlsaW5nLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBjaG9rZWQgd2hlbiBmZWQgYSB0YWcgdGhhdCBkbyBub3QgcG9pbnQgYXQgYQorICAgY29tbWl0LgorCisgKiAiZ2l0IGdyZXAiIGZpbmRpbmcgZnJvbSB3b3JrIHRyZWUgZmlsZXMgY291bGQgaGF2ZSBmZWQgZ2FyYmFnZSB0bworICAgdGhlIHVuZGVybHlpbmcgcmVnZXhlYygzKS4KKworICogImdpdCBncmVwIC1MIiBkaWRuJ3Qgc2hvdyBlbXB0eSBmaWxlcyAodGhleSBzaG91bGQgbmV2ZXIgbWF0Y2gsIGFuZAorICAgdGhleSBzaG91bGQgYWx3YXlzIGFwcGVhciBpbiAtTCBvdXRwdXQgYXMgdW5tYXRjaGluZykuCisKKyAqICJnaXQgcmViYXNlIC1pIiBkaWQgbm90IGFib3J0IGNsZWFubHkgaWYgaXQgZmFpbGVkIHRvIGxhdW5jaCB0aGUgZWRpdG9yLgorCisgKiAiZ2l0IHJlc2V0IC0taGFyZCIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIEdJVF9XT1JLX1RSRUUgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlIGlzIHVzZWQgdG8gcG9pbnQgYXQgdGhlIHJvb3Qgb2YgdGhlIHRydWUgd29yayB0cmVlLgorCisgKiBodHRwLWJhY2tlbmQgd2FzIG5vdCBsaXN0ZWQgaW4gdGhlIGNvbW1hbmQgbGlzdCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICogQnVpbGRpbmcgb24gRnJlZUJTRCAoYm90aCA3IGFuZCA4KSBuZWVkcyBPTERfSUNPTlYgc2V0IGluIHRoZSBNYWtlZmlsZQorCisgKiAiZ2l0IGNoZWNrb3V0IC1tIHNvbWUtYnJhbmNoIiB3aGlsZSBvbiBhbiB1bmJvcm4gYnJhbmNoIGNyYXNoZWQuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWFkZGMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi4yLnR4dApAQCAtMCwwICsxLDQ2IEBACitHaXQgdjEuNi42LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIHJlY3Vyc2l2ZSBtZXJnZSBkaWRuJ3QgY29ycmVjdGx5IGRpYWdub3NlIGl0cyBvd24gcHJvZ3JhbW1pbmcgZXJyb3JzLAorICAgYW5kIGluc3RlYWQgY2F1c2VkIHRoZSBjYWxsZXIgdG8gc2VnZmF1bHQuCisKKyAqIFRoZSBuZXcgInNtYXJ0IGh0dHAiIGF3YXJlIGNsaWVudHMgcHJvYmVkIHRoZSB3ZWIgc2VydmVycyB0byBzZWUgaWYKKyAgIHRoZXkgc3VwcG9ydCBzbWFydCBodHRwLCBidXQgZGlkIG5vdCBmYWxsIGJhY2sgdG8gZHVtYiBodHRwIHRyYW5zcG9ydAorICAgY29ycmVjdGx5IHdpdGggc29tZSBzZXJ2ZXJzLgorCisgKiBUaW1lIGJhc2VkIHJlZmxvZyBzeW50YXggZS5nLiAiQHt5ZXN0ZXJkYXl9IiBkaWRuJ3QgZGlhZ25vc2UgYSBtaXNzcGVsbGVkCisgICB0aW1lIHNwZWNpZmljYXRpb24gYW5kIGluc3RlYWQgYXNzdW1lZCAiQHtub3d9Ii4KKworICogImdpdCBhcmNoaXZlIEhFQUQgLS0gbm8tc3VjaC1kaXJlY3RvcnkiIHByb2R1Y2VkIGFuIGVtcHR5IGFyY2hpdmUKKyAgIHdpdGhvdXQgY29tcGxhaW5pbmcuCisKKyAqICJnaXQgYmxhbWUgLUwgc3RhcnQsZW5kIC0tIGZpbGUiIG1pc2JlaGF2ZWQgd2hlbiBnaXZlbiBhIHN0YXJ0IHRoYXQgaXMKKyAgIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGZpbGUuCisKKyAqICJnaXQgY2hlY2tvdXQgLW0iIGRpZG4ndCBjb3JyZWN0bHkgY2FsbCBjdXN0b20gbWVyZ2UgYmFja2VuZCBzdXBwbGllZAorICAgYnkgdGhlIGVuZCB1c2VyLgorCisgKiAiZ2l0IGNvbmZpZyAtZiA8ZmlsZT4iIG1pc2JlaGF2ZWQgd2hlbiBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeS4KKworICogImdpdCBjdnNzZXJ2ZXIiIGRpZG4ndCBsaWtlIGhhdmluZyByZWdleCBtZXRhY2hhcmFjdGVycyAoZS5nLiAnKycpIGluCisgICBDVlNST09UIGVudmlyb25tZW50LgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBkaWQgbm90IGNvcnJlY3RseSBoYW5kbGUgbGFyZ2UgYmxvYnMgdGhhdCBtYXkKKyAgIGJ1c3QgdGhlIHBhY2sgc2l6ZSBsaW1pdC4KKworICogImdpdCBndWkiIGlzIHN1cHBvc2VkIHRvIHdvcmsgZXZlbiB3aGVuIGxhdW5jaGVkIGZyb20gaW5zaWRlIGEgLmdpdAorICAgZGlyZWN0b3J5LgorCisgKiAiZ2l0IGd1aSIgbWlzYmVoYXZlZCB3aGVuIGFwcGx5aW5nIGEgaHVuayB0aGF0IGVuZHMgd2l0aCBkZWxldGlvbi4KKworICogImdpdCBpbWFwLXNlbmQiIGRpZCBub3QgaG9ub3IgaW1hcC5wcmVmb3JtYXR0ZWRIVE1MIGFzIGRvY3VtZW50ZWQuCisKKyAqICJnaXQgbG9nIiBmYW1pbHkgaW5jb3JyZWN0bHkgc2hvd2VkIHRoZSBjb21taXQgbm90ZXMgdW5jb25kaXRpb25hbGx5IGJ5CisgICBtaXN0YWtlLCB3aGljaCB3YXMgZXNwZWNpYWxseSBpcnJpdGF0aW5nIHdoZW4gcnVubmluZyAiZ2l0IGxvZyAtLW9uZWxpbmUiLgorCisgKiAiZ2l0IHN0YXR1cyIgc2hvdWxkbid0IHJlcXVpcmUgYW4gd3JpdGUgYWNjZXNzIHRvIHRoZSByZXBvc2l0b3J5LgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0ODNhYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYuMy50eHQKQEAgLTAsMCArMSwyMyBAQAorR2l0IHYxLjYuNi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNi4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBvdmVybG9uZyBsaW5lIGFmdGVyICIuZ2l0ZGlyOiAiIGluIGEgZ2l0IGZpbGUgY2F1c2VkIG91dCBvZiBib3VuZHMKKyAgIGFjY2VzcyB0byBhbiBhcnJheSBvbiB0aGUgc3RhY2suCisKKyAqICJnaXQgYmlzZWN0ICRwYXRoIiBkaWQgbm90IGNvcnJlY3RseSBkaWFnbm9zZSBhbiBlcnJvciB3aGVuIGdpdmVuIGEKKyAgIG5vbi1leGlzdGVudCBwYXRoLgorCisgKiAiZ2l0IGJsYW1lIC1MICRzdGFydCwkZW5kIiBzZWdmYXVsdGVkIHdoZW4gdG9vIGxhcmdlICRzdGFydCB3YXMgZ2l2ZW4uCisKKyAqICJnaXQgaW1hcC1zZW5kIiBkaWQgbm90IHdyaXRlIGRyYWZ0IGJveCB3aXRoIENSTEYgbGluZSBlbmRpbmdzIHBlciBSRkMuCisKKyAqICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1zdG9wLWF0LW5vbi1vcHRpb24iIGRpZCBub3Qgc3RvcCBhdCBub24gb3B0aW9uCisgICB3aGVuIC0ta2VlcC1kYXNoZGFzaCB3YXMgaW4gZWZmZWN0LgorCisgKiAiZ2l0d2ViIiBjYW4gc29tZXRpbWVzIGJlIHRyaWNrZWQgaW50byBwYXJyb3R0aW5nIGEgZmlsZW5hbWUgYXJndW1lbnQKKyAgIGdpdmVuIGluIGEgcmVxdWVzdCB3aXRob3V0IHByb3Blcmx5IHF1b3RpbmcuCisKK090aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWQxZTAxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi50eHQKQEAgLTAsMCArMSwyMjQgQEAKK0dpdCB2MS42LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdGVzIG9uIGJlaGF2aW91ciBjaGFuZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogSW4gdGhpcyByZWxlYXNlLCAiZ2l0IGZzY2siIGRlZmF1bHRzIHRvICJnaXQgZnNjayAtLWZ1bGwiIGFuZAorICAgY2hlY2tzIHBhY2tmaWxlcywgYW5kIGJlY2F1c2Ugb2YgdGhpcyBpdCB3aWxsIHRha2UgbXVjaCBsb25nZXIgdG8KKyAgIGNvbXBsZXRlIHRoYW4gYmVmb3JlLiAgSWYgeW91IHByZWZlciBhIHF1aWNrZXIgY2hlY2sgb25seSBvbiBsb29zZQorICAgb2JqZWN0cyAodGhlIG9sZCBkZWZhdWx0KSwgeW91IGNhbiBzYXkgImdpdCBmc2NrIC0tbm8tZnVsbCIuICBUaGlzCisgICBoYXMgYmVlbiBzdXBwb3J0ZWQgYnkgMS41LjQgYW5kIG5ld2VyIHZlcnNpb25zIG9mIGdpdCwgc28gaXQgaXMKKyAgIHNhZmUgdG8gd3JpdGUgaXQgaW4geW91ciBzY3JpcHQgZXZlbiBpZiB5b3UgdXNlIHNsaWdodGx5IG9sZGVyIGdpdAorICAgb24gc29tZSBvZiB5b3VyIG1hY2hpbmVzLgorCitQcmVwYXJpbmcgeW91cnNlbHZlcyBmb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMgaW4gMS43LjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBnaXQgMS43LjAsIHdoaWNoIGlzIHBsYW5uZWQgdG8gYmUgdGhlIHJlbGVhc2UgYWZ0ZXIgMS42LjYsIHRoZXJlIHdpbGwKK2JlIGEgaGFuZGZ1bCBvZiBiZWhhdmlvdXIgY2hhbmdlcyB0aGF0IHdpbGwgYnJlYWsgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworVGhlc2UgY2hhbmdlcyB3ZXJlIGRpc2N1c3NlZCBsb25nIHRpbWUgYWdvIGFuZCBleGlzdGluZyBiZWhhdmlvdXJzIGhhdmUKK2JlZW4gaWRlbnRpZmllZCBhcyBtb3JlIHByb2JsZW1hdGljIHRvIHRoZSB1c2VyYmFzZSB0aGFuIGtlZXBpbmcgdGhlbSBmb3IKK3RoZSBzYWtlIG9mIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKK1doZW4gbmVjZXNzYXJ5LCBhIHRyYW5zaXRpb24gc3RyYXRlZ3kgZm9yIGV4aXN0aW5nIHVzZXJzIGhhcyBiZWVuIGRlc2lnbmVkCitub3QgdG8gZm9yY2UgdGhlbSBydW5uaW5nIGFyb3VuZCBzZXR0aW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFuZAordXBkYXRpbmcgdGhlaXIgc2NyaXB0cyBpbiBvcmRlciB0byBlaXRoZXIga2VlcCB0aGUgdHJhZGl0aW9uYWwgYmVoYXZpb3VyCitvciBhZGp1c3QgdG8gdGhlIG5ldyBiZWhhdmlvdXIsIG9uIHRoZSBkYXkgdGhlaXIgc3lzYWRtaW4gZGVjaWRlcyB0byBpbnN0YWxsCit0aGUgbmV3IHZlcnNpb24gb2YgZ2l0LiAgV2hlbiB3ZSBzd2l0Y2hlZCBmcm9tICJnaXQtZm9vIiB0byAiZ2l0IGZvbyIgaW4KKzEuNi4wLCBldmVuIHRob3VnaCB0aGUgY2hhbmdlIGhhZCBiZWVuIGFkdmVydGlzZWQgYW5kIHRoZSB0cmFuc2l0aW9uCitndWlkZSBoYWQgYmVlbiBwcm92aWRlZCBmb3IgYSB2ZXJ5IGxvbmcgdGltZSwgdGhlIHVzZXJzIHByb2NyYXN0aW5hdGVkCitkdXJpbmcgdGhlIGVudGlyZSB0cmFuc2l0aW9uIHBlcmlvZCwgYW5kIGVuZGVkIHVwIHBhbmlja2luZyBvbiB0aGUgZGF5Cit0aGVpciBzeXNhZG1pbnMgdXBkYXRlZCB0aGVpciBnaXQgaW5zdGFsbGF0aW9uLiAgV2UgYXJlIHRyeWluZyB0byBhdm9pZAorcmVwZWF0aW5nIHRoYXQgdW5wbGVhc2FudG5lc3MgaW4gdGhlIDEuNy4wIHJlbGVhc2UuCisKK0ZvciBjaGFuZ2VzIGRlY2lkZWQgdG8gYmUgaW4gMS43LjAsIGNvbW1hbmRzIHRoYXQgd2lsbCBiZSBhZmZlY3RlZAoraGF2ZSBiZWVuIG11Y2ggbG91ZGVyIHRvIHN0cm9uZ2x5IGRpc2NvdXJhZ2Ugc3VjaCBwcm9jcmFzdGluYXRpb24sIGFuZAordGhleSBjb250aW51ZSB0byBiZSBpbiB0aGlzIHJlbGVhc2UuICBJZiB5b3UgaGF2ZSBiZWVuIHVzaW5nIHJlY2VudAordmVyc2lvbnMgb2YgZ2l0LCB5b3Ugd291bGQgaGF2ZSBzZWVuIHdhcm5pbmdzIGlzc3VlZCB3aGVuIHlvdSB1c2VkCitmZWF0dXJlcyB3aG9zZSBiZWhhdmlvdXIgd2lsbCBjaGFuZ2UsIHdpdGggYSBjbGVhciBpbnN0cnVjdGlvbiBvbiBob3cKK3RvIGtlZXAgdGhlIGV4aXN0aW5nIGJlaGF2aW91ciBpZiB5b3Ugd2FudCB0by4gIFlvdSBob3BlZnVsbHkgYXJlCithbHJlYWR5IHdlbGwgcHJlcGFyZWQuCisKK09mIGNvdXJzZSwgd2UgaGF2ZSBhbHNvIGJlZW4gZ2l2aW5nICJ0aGlzIGFuZCB0aGF0IHdpbGwgY2hhbmdlIGluCisxLjcuMDsgcHJlcGFyZSB5b3Vyc2VsdmVzIiB3YXJuaW5ncyBpbiB0aGUgcmVsZWFzZSBub3RlcyBhbmQKK2Fubm91bmNlbWVudCBtZXNzYWdlcyBmb3IgdGhlIHBhc3QgZmV3IHJlbGVhc2VzLiAgTGV0J3Mgc2VlIGhvdyB3ZWxsCit1c2VycyB3aWxsIGZhcmUgdGhpcyB0aW1lLgorCisgKiAiZ2l0IHB1c2giIGludG8gYSBicmFuY2ggdGhhdCBpcyBjdXJyZW50bHkgY2hlY2tlZCBvdXQgKGkuZS4gcG9pbnRlZCBieQorICAgSEVBRCBpbiBhIHJlcG9zaXRvcnkgdGhhdCBpcyBub3QgYmFyZSkgd2lsbCBiZSByZWZ1c2VkIGJ5IGRlZmF1bHQuCisKKyAgIFNpbWlsYXJseSwgImdpdCBwdXNoICR0aGVyZSA6JGtpbGxlZCIgdG8gZGVsZXRlIHRoZSBicmFuY2ggJGtpbGxlZAorICAgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSAkdGhlcmUsIHdoZW4gJGtpbGxlZCBicmFuY2ggaXMgdGhlIGN1cnJlbnQKKyAgIGJyYW5jaCBwb2ludGVkIGF0IGJ5IGl0cyBIRUFELCB3aWxsIGJlIHJlZnVzZWQgYnkgZGVmYXVsdC4KKworICAgU2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBhbmQKKyAgIHJlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQgdG8gJ2lnbm9yZScgaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5CisgICBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGVzZSBzYWZldHkgZmVhdHVyZXMuICBWZXJzaW9ucyBvZiBnaXQKKyAgIHNpbmNlIDEuNi4yIGhhdmUgaXNzdWVkIGEgbG91ZCB3YXJuaW5nIHdoZW4geW91IHRyaWVkIHRvIGRvIHRoZXNlCisgICBvcGVyYXRpb25zIHdpdGhvdXQgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiwgc28gcmVwb3NpdG9yaWVzIG9mCisgICBwZW9wbGUgd2hvIHN0aWxsIG5lZWQgdG8gYmUgYWJsZSB0byBwZXJmb3JtIHN1Y2ggYSBwdXNoIHNob3VsZAorICAgYWxyZWFkeSBoYXZlIGJlZW4gZnV0dXJlIHByb29mZWQuCisKKyAgIFBsZWFzZSByZWZlciB0bzoKKworICAgaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0dpdEZhcSNub24tYmFyZQorICAgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0Lzd2YnB0bHN1eXYuZnNmQGdpdHN0ZXIuc2lhbWVzZS5keW5kbnMub3JnLworCisgICBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSByZWFzb24gd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZCBhbmQgdGhlCisgICB0cmFuc2l0aW9uIHByb2Nlc3MgdGhhdCBhbHJlYWR5IHRvb2sgcGxhY2Ugc28gZmFyLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIHdpbGwgbm90IG1ha2UgZGVlcCB0aHJlYWRzIGJ5IGRlZmF1bHQgd2hlbiBzZW5kaW5nIGEKKyAgIHBhdGNoIHNlcmllcyB3aXRoIG1vcmUgdGhhbiB0d28gbWVzc2FnZXMuICBBbGwgbWVzc2FnZXMgd2lsbCBiZSBzZW50CisgICBhcyBhIHJlcGx5IHRvIHRoZSBmaXJzdCBtZXNzYWdlLCBpLmUuIGNvdmVyIGxldHRlci4gIEdpdCAxLjYuNiAodGhpcworICAgcmVsZWFzZSkgd2lsbCBpc3N1ZSBhIHdhcm5pbmcgYWJvdXQgdGhlIHVwY29taW5nIGRlZmF1bHQgY2hhbmdlLCB3aGVuCisgICBpdCB1c2VzIHRoZSB0cmFkaXRpb25hbCAiZGVlcCB0aHJlYWRpbmciIGJlaGF2aW91ciBhcyB0aGUgYnVpbHQtaW4KKyAgIGRlZmF1bHQuICBUbyBzcXVlbGNoIHRoZSB3YXJuaW5nIGJ1dCBzdGlsbCB1c2UgdGhlICJkZWVwIHRocmVhZGluZyIKKyAgIGJlaGF2aW91ciwgZ2l2ZSAtLWNoYWluLXJlcGx5LXRvIG9wdGlvbiBvciBzZXQgc2VuZGVtYWlsLmNoYWlucmVwbHl0bworICAgdG8gdHJ1ZS4KKworICAgSXQgaGFzIGJlZW4gcG9zc2libGUgdG8gY29uZmlndXJlIHNlbmQtZW1haWwgdG8gc2VuZCAic2hhbGxvdyB0aHJlYWQiCisgICBieSBzZXR0aW5nIHNlbmRlbWFpbC5jaGFpbnJlcGx5dG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBmYWxzZS4KKyAgIFRoZSBvbmx5IHRoaW5nIDEuNy4wIHJlbGVhc2Ugd2lsbCBkbyBpcyB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgd2hlbgorICAgeW91IGhhdmVuJ3QgY29uZmlndXJlZCB0aGF0IHZhcmlhYmxlLgorCisgKiAiZ2l0IHN0YXR1cyIgd2lsbCBub3QgYmUgImdpdCBjb21taXQgLS1kcnktcnVuIi4gIFRoaXMgY2hhbmdlIGRvZXMgbm90CisgICBhZmZlY3QgeW91IGlmIHlvdSBydW4gdGhlIGNvbW1hbmQgd2l0aG91dCBwYXRoc3BlYy4KKworICAgTm9ib2R5IHNhbmUgZm91bmQgdGhlIGN1cnJlbnQgYmVoYXZpb3VyIG9mICJnaXQgc3RhdHVzIE1ha2VmaWxlIiB1c2VmdWwKKyAgIG5vciBtZWFuaW5nZnVsLCBhbmQgaXQgY29uZnVzZWQgdXNlcnMuICAiZ2l0IGNvbW1pdCAtLWRyeS1ydW4iIGhhcyBiZWVuCisgICBwcm92aWRlZCBhcyBhIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgYmVoYXZpb3VyIG9mIHRoaXMgY29tbWFuZCBzaW5jZQorICAgMS42LjUuCisKKyAqICJnaXQgZGlmZiIgdHJhZGl0aW9uYWxseSB0cmVhdGVkIHZhcmlvdXMgImlnbm9yZSB3aGl0ZXNwYWNlIiBvcHRpb25zCisgICBvbmx5IGFzIGEgd2F5IHRvIGZpbHRlciB0aGUgcGF0Y2ggb3V0cHV0LiAgImdpdCBkaWZmIC0tZXhpdC1jb2RlIC1iIgorICAgZXhpdGVkIHdpdGggbm9uLXplcm8gc3RhdHVzIGV2ZW4gaWYgYWxsIGNoYW5nZXMgd2VyZSBhYm91dCBjaGFuZ2luZyB0aGUKKyAgIGFtb3VudCBvZiB3aGl0ZXNwYWNlIGFuZCBub3RoaW5nIGVsc2UuICBhbmQgImdpdCBkaWZmIC1iIiBzaG93ZWQgdGhlCisgICAiZGlmZiAtLWdpdCIgaGVhZGVyIGxpbmUgZm9yIHN1Y2ggYSBjaGFuZ2Ugd2l0aG91dCBwYXRjaCB0ZXh0LgorCisgICBJbiAxLjcuMCwgdGhlICJpZ25vcmUgd2hpdGVzcGFjZXMiIHdpbGwgYWZmZWN0IHRoZSBzZW1hbnRpY3Mgb2YgdGhlCisgICBkaWZmIG9wZXJhdGlvbiBpdHNlbGYuICBBIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFmZmVjdCBhbnl0aGluZyBidXQKKyAgIHdoaXRlc3BhY2VzIHdpbGwgYmUgcmVwb3J0ZWQgd2l0aCB6ZXJvIGV4aXQgc3RhdHVzIHdoZW4gcnVuIHdpdGgKKyAgIC0tZXhpdC1jb2RlLCBhbmQgdGhlcmUgd2lsbCBub3QgYmUgImRpZmYgLS1naXQiIGhlYWRlciBmb3Igc3VjaCBhCisgICBjaGFuZ2UuCisKKworVXBkYXRlcyBzaW5jZSB2MS42LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisgKiB2YXJpb3VzIGdpdGsgdXBkYXRlcyBpbmNsdWRpbmcgdXNlIG9mIHRoZW1lZCB3aWRnZXRzIHVuZGVyIFRrIDguNSwKKyAgIEphcGFuZXNlIHRyYW5zbGF0aW9uLCBhIGZpeCB0byBhIGJ1ZyB3aGVuIHJ1bm5pbmcgImd1aSBibGFtZSIgZnJvbQorICAgYSBzdWJkaXJlY3RvcnksIGV0Yy4KKworICogdmFyaW91cyBnaXQtZ3VpIHVwZGF0ZXMgaW5jbHVkaW5nIG5ldyB0cmFuc2xhdGlvbnMsIHdtIHN0YXRlcyBmaXhlcywKKyAgIFRrIGJ1ZyB3b3JrYXJvdW5kIGFmdGVyIHF1aXR0aW5nLCBpbXByb3ZlZCBoZXVyaXN0aWNzIHRvIHRyaWdnZXIgZ2MsCisgICBldGMuCisKKyAqIHZhcmlvdXMgZ2l0LXN2biB1cGRhdGVzLgorCisgKiAiZ2l0IGZldGNoIiBvdmVyIGh0dHAgbGVhcm5lZCBhIG5ldyBtb2RlIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlCisgICB0cmFkaXRpb25hbCAiZHVtYiBjb21taXQgd2Fsa2VyIi4KKworKHBvcnRhYmlsaXR5KQorCisgKiBpbWFwLXNlbmQgY2FuIGJlIGJ1aWx0IG9uIG1pbmd3IHBvcnQuCisKKyhwZXJmb3JtYW5jZSkKKworICogImdpdCBkaWZmIC1CIiBoYXMgc21hbGxlciBtZW1vcnkgZm9vdHByaW50LgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyAqIFRoZSBvYmplY3QgcmVwbGFjZSBtZWNoYW5pc20gY2FuIGJlIGJ5cGFzc2VkIHdpdGggLS1uby1yZXBsYWNlLW9iamVjdHMKKyAgIGdsb2JhbCBvcHRpb24gZ2l2ZW4gdG8gdGhlICJnaXQiIHByb2dyYW0uCisKKyAqIEluIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGEgZmV3IHZhcmlhYmxlcyB0aGF0IG5hbWUgcGF0aHMgY2FuIGJlZ2luIHdpdGggfi8KKyAgIGFuZCB+dXNlcm5hbWUvIGFuZCB0aGV5IGFyZSBleHBhbmRlZCBhcyBleHBlY3RlZC4KKworICogImdpdCBzdWJjbWQgLWgiIG5vdyBzaG93cyBzaG9ydCB1c2FnZSBoZWxwIGZvciBtYW55IG1vcmUgc3ViY29tbWFuZHMuCisKKyAqICJnaXQgYmlzZWN0IHJlc2V0IiBjYW4gcmVzZXQgdG8gYW4gYXJiaXRyYXJ5IGNvbW1pdC4KKworICogImdpdCBjaGVja291dCBmcm90eiIgd2hlbiB0aGVyZSBpcyBubyBsb2NhbCBicmFuY2ggImZyb3R6IiBidXQgdGhlcmUKKyAgIGlzIG9ubHkgb25lIHJlbW90ZSB0cmFja2luZyBicmFuY2ggImZyb3R6IiBpcyB0YWtlbiBhcyBhIHJlcXVlc3QgdG8KKyAgIHN0YXJ0IHRoZSBuYW1lZCBicmFuY2ggYXQgdGhlIGNvcnJlc3BvbmRpbmcgcmVtb3RlIHRyYWNraW5nIGJyYW5jaC4KKworICogImdpdCBjb21taXQgLWMvLUMvLS1hbWVuZCIgY2FuIGJlIHRvbGQgd2l0aCBhIG5ldyAiLS1yZXNldC1hdXRob3IiIG9wdGlvbgorICAgdG8gaWdub3JlIGF1dGhvcnNoaXAgaW5mb3JtYXRpb24gaW4gdGhlIGNvbW1pdCBpdCBpcyB0YWtpbmcgdGhlIG1lc3NhZ2UKKyAgIGZyb20uCisKKyAqICJnaXQgZGVzY3JpYmUiIGNhbiBiZSB0b2xkIHRvIGFkZCAiLWRpcnR5IiBzdWZmaXggd2l0aCAiLS1kaXJ0eSIgb3B0aW9uLgorCisgKiAiZ2l0IGRpZmYiIGxlYXJuZWQgLS1zdWJtb2R1bGUgb3B0aW9uIHRvIHNob3cgYSBsaXN0IG9mIG9uZS1saW5lIGxvZ3MKKyAgIGluc3RlYWQgb2YgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgY29tbWl0IG9iamVjdCBuYW1lcy4KKworICogImdpdCBkaWZmIiBsZWFybmVkIHRvIGhvbm9yIGRpZmYuY29sb3IuZnVuYyBjb25maWd1cmF0aW9uIHRvIHBhaW50CisgICBmdW5jdGlvbiBuYW1lIGhpbnQgcHJpbnRlZCBvbiB0aGUgaHVuayBoZWFkZXIgIkBAIC1qLGsgK2wsbSBAQCIgbGluZQorICAgaW4gdGhlIHNwZWNpZmllZCBjb2xvci4KKworICogImdpdCBmZXRjaCIgbGVhcm5lZCAtLWFsbCBhbmQgLS1tdWx0aXBsZSBvcHRpb25zLCB0byBydW4gZmV0Y2ggZnJvbQorICAgbWFueSByZXBvc2l0b3JpZXMsIGFuZCAtLXBydW5lIG9wdGlvbiB0byByZW1vdmUgcmVtb3RlIHRyYWNraW5nCisgICBicmFuY2hlcyB0aGF0IHdlbnQgc3RhbGUuICBUaGVzZSBtYWtlICJnaXQgcmVtb3RlIHVwZGF0ZSIgYW5kICJnaXQKKyAgIHJlbW90ZSBwcnVuZSIgbGVzcyBuZWNlc3NhcnkgKHRoZXJlIGlzIG5vIHBsYW4gdG8gcmVtb3ZlICJyZW1vdGUKKyAgIHVwZGF0ZSIgbm9yICJyZW1vdGUgcHJ1bmUiLCB0aG91Z2gpLgorCisgKiAiZ2l0IGZzY2siIGJ5IGRlZmF1bHQgY2hlY2tzIHRoZSBwYWNrZmlsZXMgKGkuZS4gIi0tZnVsbCIgaXMgdGhlCisgICBkZWZhdWx0KTsgeW91IGNhbiB0dXJuIGl0IG9mZiB3aXRoICJnaXQgZnNjayAtLW5vLWZ1bGwiLgorCisgKiAiZ2l0IGdyZXAiIGNhbiB1c2UgLUYgKGZpeGVkIHN0cmluZ3MpIGFuZCAtaSAoaWdub3JlIGNhc2UpIHRvZ2V0aGVyLgorCisgKiBpbXBvcnQtdGFycyBjb250cmlidXRlZCBmYXN0LWltcG9ydCBmcm9udGVuZCBsZWFybmVkIG1vcmUgdHlwZXMgb2YKKyAgIGNvbXByZXNzZWQgdGFyYmFsbHMuCisKKyAqICJnaXQgaW5zdGF3ZWIiIGtub3dzIGhvdyB0byB0YWxrIHdpdGggbW9kX2NnaWQgdG8gYXBhY2hlMi4KKworICogImdpdCBsb2cgLS1kZWNvcmF0ZSIgc2hvd3MgdGhlIGxvY2F0aW9uIG9mIEhFQUQgYXMgd2VsbC4KKworICogImdpdCBsb2ciIGFuZCAiZ2l0IHJldi1saXN0IiBsZWFybmVkIHRvIHRha2UgcmV2cyBhbmQgcGF0aHNwZWNzIGZyb20KKyAgIHRoZSBzdGFuZGFyZCBpbnB1dCB3aXRoIHRoZSBuZXcgIi0tc3RkaW4iIG9wdGlvbi4KKworICogIi0tcHJldHR5PWZvcm1hdCIgb3B0aW9uIHRvICJsb2ciIGZhbWlseSBvZiBjb21tYW5kcyBsZWFybmVkOgorCisgICAuIHRvIHdyYXAgdGV4dCB3aXRoIHRoZSAiJXcoKSIgc3BlY2lmaWVyLgorICAgLiB0byBzaG93IHJlZmxvZyBpbmZvcm1hdGlvbiB3aXRoICIlZ1tzZERdIiBzcGVjaWZpZXIuCisKKyAqICJnaXQgbm90ZXMiIGNvbW1hbmQgdG8gYW5ub3RhdGUgZXhpc3RpbmcgY29tbWl0cy4KKworICogImdpdCBtZXJnZSIgKGFuZCAiZ2l0IHB1bGwiKSBsZWFybmVkIC0tZmYtb25seSBvcHRpb24gdG8gbWFrZSBpdCBmYWlsCisgICBpZiB0aGUgbWVyZ2UgZG9lcyBub3QgcmVzdWx0IGluIGEgZmFzdC1mb3J3YXJkLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgbGVhcm5lZCB0byB1c2UgcDRtZXJnZS4KKworICogImdpdCByZWJhc2UgLWkiIGxlYXJuZWQgInJld29yZCIgdGhhdCBhY3RzIGxpa2UgImVkaXQiIGJ1dCBpbW1lZGlhdGVseQorICAgc3RhcnRzIGFuIGVkaXRvciB0byB0d2VhayB0aGUgbG9nIG1lc3NhZ2Ugd2l0aG91dCByZXR1cm5pbmcgY29udHJvbCB0bworICAgdGhlIHNoZWxsLCB3aGljaCBpcyBkb25lIGJ5ICJlZGl0IiB0byBnaXZlIGFuIG9wcG9ydHVuaXR5IHRvIHR3ZWFrIHRoZQorICAgY29udGVudHMuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgY2FuIGJlIHRvbGQgd2l0aCAiLS1lbnZlbG9wZS1zZW5kZXI9YXV0byIgdG8gdXNlIHRoZQorICAgc2FtZSBhZGRyZXNzIGFzICJGcm9tOiIgYWRkcmVzcyBhcyB0aGUgZW52ZWxvcGUgc2VuZGVyIGFkZHJlc3MuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgd2lsbCBpc3N1ZSBhIHdhcm5pbmcgd2hlbiBpdCBkZWZhdWx0cyB0byB0aGUKKyAgIC0tY2hhaW4tcmVwbHktdG8gYmVoYXZpb3VyIHdpdGhvdXQgYmVpbmcgdG9sZCBieSB0aGUgdXNlciBhbmQKKyAgIGluc3RydWN0cyB0byBwcmVwYXJlIGZvciB0aGUgY2hhbmdlIG9mIHRoZSBkZWZhdWx0IGluIDEuNy4wIHJlbGVhc2UuCisKKyAqIEluICJnaXQgc3VibW9kdWxlIGFkZCA8cmVwb3NpdG9yeT4gPHBhdGg+IiwgPHBhdGg+IGlzIG5vdyBvcHRpb25hbCBhbmQKKyAgIGluZmVycmVkIGZyb20gPHJlcG9zaXRvcnk+IHRoZSBzYW1lIHdheSAiZ2l0IGNsb25lIDxyZXBvc2l0b3J5PiIgZG9lcy4KKworICogImdpdCBzdm4iIGxlYXJuZWQgdG8gcmVhZCBTVk4gMS41KyBhbmQgU1ZLIG1lcmdlIHRpY2tldHMuCisKKyAqICJnaXQgc3ZuIiBsZWFybmVkIHRvIHJlY3JlYXRlIGVtcHR5IGRpcmVjdG9yaWVzIHRyYWNrZWQgb25seSBieSBTVk4uCisKKyAqICJnaXR3ZWIiIGNhbiBvcHRpb25hbGx5IHJlbmRlciBpdHMgImJsYW1lIiBvdXRwdXQgaW5jcmVtZW50YWxseSAodGhpcworICAgcmVxdWlyZXMgSmF2YVNjcmlwdCBvbiB0aGUgY2xpZW50IHNpZGUpLgorCisgKiBBdXRob3IgbmFtZXMgc2hvd24gaW4gZ2l0d2ViIG91dHB1dCBhcmUgbGlua3MgdG8gc2VhcmNoIGNvbW1pdHMgYnkgdGhlCisgICBhdXRob3IuCisKK0ZpeGVzIHNpbmNlIHYxLjYuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNi41LlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZmNWJjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuMS50eHQKQEAgLTAsMCArMSwzNSBAQAorR2l0IHYxLjcuMC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEluIGEgZnJlc2hseSBjcmVhdGVkIHJlcG9zaXRvcnkgInJldi1wYXJzZSBIRUFEXjAiIGNvbXBsYWluZWQgdGhhdAorICAgaXQgaXMgZGFuZ2xpbmcgc3ltcmVmLCBldmVuIHRob3VnaCAicmV2LXBhcnNlIEhFQUQiIGRpZG4ndC4KKworICogImdpdCBzaG93IDpuby1zdWNoLW5hbWUiIHRyaWVkIHRvIGFjY2VzcyB0aGUgaW5kZXggd2l0aG91dCBib3VuZHMKKyAgIGNoZWNrLCBsZWFkaW5nIHRvIGEgcG90ZW50aWFsIHNlZ2ZhdWx0LgorCisgKiBNZXNzYWdlIGZyb20gImdpdCBjaGVycnktcGljayIgd2FzIGhhcmRlciB0byByZWFkIGFuZCB1c2UgdGhhbiBuZWNlc3NhcnkKKyAgIHdoZW4gaXQgc3RvcHBlZCBkdWUgdG8gY29uZmxpY3RpbmcgY2hhbmdlcy4KKworICogV2UgcmVmZXJyZWQgdG8gIi5naXQvcmVmcy8iIHRocm91Z2hvdXQgdGhlIGRvY3VtZW50YXRpb24gd2hlbiB3ZQorICAgbWVhbnQgdG8gdGFsayBhYm91dCBhYnN0cmFjdCBub3Rpb24gb2YgInJlZiBuYW1lc3BhY2UiLiAgQmVjYXVzZQorICAgcGVvcGxlJ3MgcmVwb3NpdG9yaWVzIG9mdGVuIGhhdmUgcGFja2VkIHJlZnMgdGhlc2UgZGF5cywgdGhpcyB3YXMKKyAgIGNvbmZ1c2luZy4KKworICogImdpdCBkaWZmIC0tb3V0cHV0PS9wYXRoL3RoYXQvY2Fubm90L2JlL3dyaXR0ZW4iIGRpZCBub3QgY29ycmVjdGx5CisgICBlcnJvciBvdXQuCisKKyAqICJnaXQgZ3JlcCAtZSAtcGF0dGVybi10aGF0LWJlZ2luLXdpdGgtZGFzaCBwYXRocy4uLiIgY291bGQgbm90IGJlCisgICBzcGVsbGVkIGFzICJnaXQgZ3JlcCAtLSAtcGF0dGVybi10aGF0LWJlZ2luLXdpdGgtZGFzaCBwYXRocy4uLiIgd2hpY2gKKyAgIHdvdWxkIGJlIGEgR05VIHdheSB0byB1c2UgIi0tIiBhcyAiZW5kIG9mIG9wdGlvbnMiLgorCisgKiAiZ2l0IGdyZXAiIGNvbXBpbGVkIHdpdGggdGhyZWFkaW5nIHN1cHBvcnQgdHJpZWQgdG8gYWNjZXNzIGFuCisgICB1bmluaXRpYWxpemVkIG11dGV4IG9uIGJveGVzIHdpdGggYSBzaW5nbGUgQ1BVLgorCisgKiAiZ2l0IHN0YXNoIHBvcCAtcSAtLWluZGV4IiBmYWlsZWQgYmVjYXVzZSB0aGUgdW5uZWNlc3NhcnkgLS1pbmRleAorICAgb3B0aW9uIHdhcyBwcm9wYWdhdGVkIHRvICJnaXQgc3Rhc2ggZHJvcCIgdGhhdCBpcyBpbnRlcm5hbGx5IHJ1biBhdCB0aGUKKyAgIGVuZC4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2VkMmI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4yLnR4dApAQCAtMCwwICsxLDQwIEBACitHaXQgdjEuNy4wLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4wLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEdJVF9QQUdFUiB3YXMgbm90IGhvbm9yZWQgY29uc2lzdGVudGx5IGJ5IHNvbWUgc2NyaXB0ZWQgUG9yY2VsYWlucywgbW9zdAorICAgbm90YWJseSAiZ2l0IGFtIi4KKworICogdXBkYXRpbmcgd29ya2luZyB0cmVlIGZpbGVzIGFmdGVyIHRlbGxpbmcgZ2l0IHRvIGFkZCB0aGVtIHRvIHRoZQorICAgaW5kZXggYW5kIHdoaWxlIGl0IGlzIHN0aWxsIHdvcmtpbmcgY3JlYXRlZCBnYXJiYWdlIG9iamVjdCBmaWxlcyBpbgorICAgdGhlIHJlcG9zaXRvcnkgd2l0aG91dCBkaWFnbm9zaW5nIGl0IGFzIGFuIGVycm9yLgorCisgKiAiZ2l0IGJpc2VjdCAtLSBwYXRoc3BlYy4uLiIgZGlkIG5vdCBkaWFnbm9zZSBhbiBlcnJvciBjb25kaXRpb24gcHJvcGVybHkgd2hlbgorICAgdGhlIHNpbXBsaWZpY2F0aW9uIHdpdGggZ2l2ZW4gcGF0aHNwZWMgbWFkZSB0aGUgaGlzdG9yeSBlbXB0eS4KKworICogImdpdCByZXYtbGlzdCAtLWNoZXJyeS1waWNrIEEuLi5CIiBub3cgaGFzIGFuIG9idmlvdXMgb3B0aW1pemF0aW9uIHdoZW4gdGhlCisgICBoaXN0b3JpZXMgaGF2ZW4ndCBkaXZlcmdlZCAoaS5lLiB3aGVuIG9uZSBlbmQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIG90aGVyKS4KKworICogImdpdCBkaWZmIC0tcXVpZXQgLXciIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC4KKworICogImdpdCBmYXN0LWltcG9ydCIgZGlkbid0IHdvcmsgd2l0aCBhIGxhcmdlIGlucHV0LCBhcyBpdCBsYWNrZWQgc3VwcG9ydAorICAgZm9yIHByb2R1Y2luZyB0aGUgcGFjayBpbmRleCBpbiB2MiBmb3JtYXQuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBkaWRuJ3QgdXNlIENSTEYgbGluZSBlbmRpbmdzIG92ZXIgdGhlIGltYXAgcHJvdG9jb2wKKyAgIHdoZW4gc3RvcmluZyBpdHMgcGF5bG9hZCB0byB0aGUgZHJhZnQgYm94LCB2aW9sYXRpbmcgUkZDIDM1MDEuCisKKyAqICJnaXQgbG9nIC0tZm9ybWF0PScldyh4LHkseiklYiciIGFuZCBmcmllbmRzIHRoYXQgcmV3cmFwIG1lc3NhZ2UKKyAgIGhhcyBiZWVuIG9wdGltaXplZCBmb3IgdXRmLTggcGF5bG9hZC4KKworICogRXJyb3IgbWVzc2FnZXMgZ2VuZXJhdGVkIG9uIHRoZSByZWNlaXZpbmcgZW5kIGRpZCBub3QgY29tZSBiYWNrIHRvICJnaXQKKyAgIHB1c2giLgorCisgKiAiZ2l0IHN0YXR1cyIgaW4gMS43LjAgbGFja2VkIHRoZSBvcHRpbWl6YXRpb24gd2UgdXNlZCB0byBoYXZlIGluIDEuNi5YIHNlcmllcworICAgdG8gc3BlZWQgdXAgc2Nhbm5pbmcgb2YgbGFyZ2Ugd29ya2luZyB0cmVlLgorCisgKiAiZ2l0d2ViIiBkaWQgbm90IGRpYWdub3NlIHBhcnNpbmcgZXJyb3JzIHByb3Blcmx5IHdoaWxlIHJlYWRpbmcgaXRzIGNvbmZpZ3VyYXRpb24KKyAgIGZpbGUuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IzNTU3MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuMy50eHQKQEAgLTAsMCArMSwzNCBAQAorR2l0IHYxLjcuMC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBPYmplY3QgZmlsZXMgYXJlIGNyZWF0ZWQgaW4gYSBtb3JlIEFDTCBmcmllbmRseSB3YXkgaW4gcmVwb3NpdG9yaWVzCisgICB3aGVyZSBncm91cCBwZXJtaXNzaW9uIGlzIEFDTCBjb250cm9sbGVkLgorCisgKiAiZ2l0IGFkZCAtaSIgZGlkbid0IGhhbmRsZSBhIGRlbGV0ZWQgcGF0aCB2ZXJ5IHdlbGwuCisKKyAqICJnaXQgYmxhbWUiIHBhZGRlZCBsaW5lIG51bWJlcnMgd2l0aCBvbmUgZXh0cmEgU1Agd2hlbiB0aGUgdG90YWwgbnVtYmVyCisgICBvZiBsaW5lcyB3YXMgb25lIGxlc3MgdGhhbiBtdWx0aXBsZSBvZiB0ZW4gZHVlIHRvIGFuIG9mZi1ieS1vbmUgZXJyb3IuCisKKyAqICJnaXQgZmV0Y2ggLS1hbGwvLS1tdWx0aSIgdXNlZCB0byBkaXNjYXJkIGluZm9ybWF0aW9uIGZvciByZW1vdGVzIHRoYXQKKyAgIGFyZSBmZXRjaGVkIGVhcmxpZXIuCisKKyAqICJnaXQgbG9nIC0tYXV0aG9yPW1lIC0tZ3JlcD1pdCIgdHJpZWQgdG8gZmluZCBjb21taXRzIHRoYXQgaGF2ZSAiaXQiCisgICBvciBhcmUgd3JpdHRlbiBieSAibWUiLCBpbnN0ZWFkIG9mIHRoZSBvbmVzIHRoYXQgaGF2ZSAiaXQiIF9hbmRfIGFyZQorICAgd3JpdHRlbiBieSAibWUiLgorCisgKiAiZ2l0IGxvZyAtZyBicmFuY2giIG1pc2JlaGF2ZWQgd2hlbiB0aGVyZSB3YXMgbm8gZW50cmllcyBpbiB0aGUgcmVmbG9nCisgICBmb3IgdGhlIG5hbWVkIGJyYW5jaC4KKworICogImdpdCBtYWlsaW5mbyIgKGhlbmNlICJnaXQgYW0iKSBpbmNvcnJlY3RseSByZW1vdmVkIGluaXRpYWwgaW5kZW50IGZyb20KKyAgIHBhcmFncmFwaHMuCisKKyAqICJnaXQgcHJ1bmUiIGFuZCAiZ2l0IHJlZmxvZyIgKGhlbmNlICJnaXQgZ2MiIGFzIHdlbGwpIGRpZG4ndCBob25vcgorICAgYW4gaW5zdHJ1Y3Rpb24gbmV2ZXIgdG8gZXhwaXJlIGJ5IHNldHRpbmcgZ2MucmVmbG9nZXhwaXJlIHRvIG5ldmVyLgorCisgKiAiZ2l0IHB1c2giIG1pc2JlaGF2ZWQgd2hlbiBicmFuY2guPG5hbWU+Lm1lcmdlIHdhcyBjb25maWd1cmVkIHdpdGhvdXQKKyAgIG1hdGNoaW5nIGJyYW5jaC48bmFtZT4ucmVtb3RlLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmN2Y2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjQudHh0CkBAIC0wLDAgKzEsMjcgQEAKK0dpdCB2MS43LjAuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjAuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogT3B0aW1pemVkIG50b2hsL2h0b25sIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMgd2VyZSBicm9rZW4uCisKKyAqIENvbG9yIHZhbHVlcyBnaXZlbiB0byAiY29sb3IuPGNtZD4uPHNsb3Q+IiBjb25maWd1cmF0aW9uIGNhbiBub3cgaGF2ZQorICAgbW9yZSB0aGFuIG9uZSBhdHRyaWJ1dGVzIChlLmcuICJib2xkIHVsIikuCisKKyAqICJnaXQgYWRkIC11IG5vbmV4aXN0ZW50LXBhdGgiIGRpZCBub3QgY29tcGxhaW4uCisKKyAqICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCIgZGlkbid0IHdvcmsgd2VsbCB3aGVuIGFuIGVhcmx5IHBhdGNoIGluCisgICBhIHBhdGNoIHNlcmllcyBhZGRzIHRyYWlsaW5nIGJsYW5rIGxpbmVzIGFuZCBhIGxhdGVyIG9uZSBkZXBlbmRlZCBvbgorICAgc3VjaCBhIGJsb2NrIG9mIGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQuCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIGRpZG4ndCBjaGVjayBlcnJvciBzdGF0dXMgYW5kIHN0b3Agd2hlbiBtYXJrcyBmaWxlCisgICBjYW5ub3QgYmUgb3BlbmVkLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbSIgZ2F2ZSB1bndhcnJhbnRlZCBlcnJvcnMKKyAgIHdoZW4gdGhlIHJhbmdlIHdhcyBlbXB0eSwgaW5zdGVhZCBvZiBzaWxlbnRseSBmaW5pc2hpbmcuCisKKyAqICJnaXQgcmVtb3RlIHBydW5lIiBkaWQgbm90IGRldGVjdCByZW1vdGUgdHJhY2tpbmcgcmVmcyB0aGF0IGJlY2FtZQorICAgZGFuZ2xpbmcgY29ycmVjdGx5LgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNDljOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjUudHh0CkBAIC0wLDAgKzEsMjYgQEAKK0dpdCB2MS43LjAuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjAuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBkYWVtb24iIGZhaWxlZCB0byBjb21waWxlIG9uIHBsYXRmb3JtcyB3aXRob3V0IHNvY2thZGRyX3N0b3JhZ2UgdHlwZS4KKworICogT3V0cHV0IGZyb20gImdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIiB3YXMgdW5wYXJzYWJsZSB3aGVuIGEKKyAgIGNvbW1pdCBkaWQgbm90IGhhdmUgYW55IG1lc3NhZ2UsIHdoaWNoIGlzIGFibm9ybWFsIGJ1dCBwb3NzaWJsZSBpbiBhCisgICByZXBvc2l0b3J5IGNvbnZlcnRlZCBmcm9tIGZvcmVpZ24gc2NtLgorCisgKiAiZ2l0IHN0YXNoIHNob3cgPGNvbW1pdC10aGF0LWlzLW5vdC1hLXN0YXNoPiIgZ2F2ZSBhbiBlcnJvciBtZXNzYWdlCisgICB0aGF0IHdhcyBub3Qgc28gdXNlZnVsLiAgUmV3b3JkZWQgdGhlIG1lc3NhZ2UgdG8gIjxpdD4gaXMgbm90IGEKKyAgIHN0YXNoIi4KKworICogUHl0aG9uIHNjcmlwdHMgaW4gY29udHJpYi8gYXJlYSBub3cgc3RhcnQgd2l0aCAiIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIgorICAgdG8gaG9ub3IgdXNlcidzIFBBVEguCisKKyAqICJnaXQgaW1hcC1zZW5kIiB1c2VkIHRvIG1pc3Rha2UgYW55IGxpbmUgdGhhdCBiZWdpbnMgd2l0aCAiRnJvbSAiIGFzIGEKKyAgIG1lc3NhZ2Ugc2VwYXJhdG9yIGluIGZvcm1hdC1wYXRjaCBvdXRwdXQuCisKKyAqIFNtYXJ0IGh0dHAgc2VydmVyIGJhY2tlbmQgZmFpbGVkIHRvIHJlcG9ydCBhbiBpbnRlcm5hbCBzZXJ2ZXIgZXJyb3IgYW5kCisgICBpbmZpbml0ZWx5IGxvb3BlZCBpbnN0ZWFkIGFmdGVyIG91dHB1dCBwaXBlIHdhcyBjbG9zZWQuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4NTJiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNi50eHQKQEAgLTAsMCArMSwxMyBAQAorR2l0IHYxLjcuMC42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMC41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGRpZmYgLS1zdGF0IiB1c2VkICJpbnQiIHRvIGNvdW50IHRoZSBzaXplIG9mIGRpZmZlcmVuY2VzLAorICAgd2hpY2ggY291bGQgcmVzdWx0IGluIG92ZXJmbG93aW5nLgorCisgKiAiZ2l0IHJldi1saXN0IC0tYWJicmV2LWNvbW1pdCIgZGVmYXVsdGVkIHRvIDQwLWJ5dGUgYWJicmV2aWF0aW9ucywgdW5saWtlCisgICBuZXdlciB0b29scyBpbiB0aGUgZ2l0IHRvb2xzZXQuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjYjdjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNy50eHQKQEAgLTAsMCArMSwxNiBAQAorR2l0IHYxLjcuMC43IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMC42CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAibWFrZSBOT19DVVJMPU5vVGhhbmtzIGluc3RhbGwiIHdhcyBicm9rZW4uCisKKyAqIEFuIG92ZXJsb25nIGxpbmUgYWZ0ZXIgIi5naXRkaXI6ICIgaW4gYSBnaXQgZmlsZSBjYXVzZWQgb3V0IG9mIGJvdW5kcworICAgYWNjZXNzIHRvIGFuIGFycmF5IG9uIHRoZSBzdGFjay4KKworICogImdpdCBjb25maWcgLS1wYXRoIGNvbmYudmFyIiB0byBhdHRlbXB0IHRvIGV4cGFuZCBhIHZhcmlhYmxlIGNvbmYudmFyCisgICB0aGF0IHVzZXMgIn4vIiBzaG9ydC1oYW5kIHNlZ2ZhdWx0ZWQgd2hlbiAkSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgd2FzIG5vdCBzZXQuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC44LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwNWI0OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuOC50eHQKQEAgLTAsMCArMSwxMCBAQAorR2l0IHYxLjcuMC44IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgcHJpbWFyaWx5IHRvIGJhY2twb3J0IHN1cHBvcnQgZm9yIHRoZSBuZXcgImFkZC5pZ25vcmVFcnJvcnMiCituYW1lIGdpdmVuIHRvIHRoZSBleGlzdGluZyAiYWRkLmlnbm9yZS1lcnJvcnMiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKK1RoZSBuZXh0IHZlcnNpb24sIEdpdCAxLjcuNCwgYW5kIGZ1dHVyZSB2ZXJzaW9ucywgd2lsbCBzdXBwb3J0IGJvdGgKK29sZCBhbmQgaW5jb3JyZWN0IG5hbWUgYW5kIHRoZSBuZXcgY29ycmVjdGVkIG5hbWUsIGJ1dCB3aXRob3V0IHRoaXMKK2JhY2twb3J0LCB1c2VycyB3aG8gd2FudCB0byB1c2UgdGhlIG5ldyBuYW1lICJhZGQuaWdub3JlRXJyb3JzIiBpbgordGhlaXIgcmVwb3NpdG9yaWVzIGNhbm5vdCB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC45LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZiMzE2NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuOS50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjEuNy4wLjkgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4wLjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXR3ZWIiIGNhbiBzb21ldGltZXMgYmUgdHJpY2tlZCBpbnRvIHBhcnJvdHRpbmcgYSBmaWxlbmFtZSBhcmd1bWVudAorICAgZ2l2ZW4gaW4gYSByZXF1ZXN0IHdpdGhvdXQgcHJvcGVybHkgcXVvdGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiOGMwYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAudHh0CkBAIC0wLDAgKzEsMjE0IEBACitHaXQgdjEuNy4wIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitOb3RlcyBvbiBiZWhhdmlvdXIgY2hhbmdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgcHVzaCIgaW50byBhIGJyYW5jaCB0aGF0IGlzIGN1cnJlbnRseSBjaGVja2VkIG91dCAoaS5lLiBwb2ludGVkIGF0IGJ5CisgICBIRUFEIGluIGEgcmVwb3NpdG9yeSB0aGF0IGlzIG5vdCBiYXJlKSBpcyByZWZ1c2VkIGJ5IGRlZmF1bHQuCisKKyAgIFNpbWlsYXJseSwgImdpdCBwdXNoICR0aGVyZSA6JGtpbGxlZCIgdG8gZGVsZXRlIHRoZSBicmFuY2ggJGtpbGxlZAorICAgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSAkdGhlcmUsIHdoZW4gJGtpbGxlZCBicmFuY2ggaXMgdGhlIGN1cnJlbnQKKyAgIGJyYW5jaCBwb2ludGVkIGF0IGJ5IGl0cyBIRUFELCB3aWxsIGJlIHJlZnVzZWQgYnkgZGVmYXVsdC4KKworICAgU2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBhbmQKKyAgIHJlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQgdG8gJ2lnbm9yZScgaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5CisgICBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGVzZSBzYWZldHkgZmVhdHVyZXMuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZG9lcyBub3QgbWFrZSBkZWVwIHRocmVhZHMgYnkgZGVmYXVsdCB3aGVuIHNlbmRpbmcgYQorICAgcGF0Y2ggc2VyaWVzIHdpdGggbW9yZSB0aGFuIHR3byBtZXNzYWdlcy4gIEFsbCBtZXNzYWdlcyB3aWxsIGJlIHNlbnQKKyAgIGFzIGEgcmVwbHkgdG8gdGhlIGZpcnN0IG1lc3NhZ2UsIGkuZS4gY292ZXIgbGV0dGVyLgorCisgICBJdCBoYXMgYmVlbiBwb3NzaWJsZSBhbHJlYWR5IHRvIGNvbmZpZ3VyZSBzZW5kLWVtYWlsIHRvIHNlbmQgInNoYWxsb3cgdGhyZWFkIgorICAgYnkgc2V0dGluZyBzZW5kZW1haWwuY2hhaW5yZXBseXRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gZmFsc2UuICBUaGUKKyAgIG9ubHkgdGhpbmcgdGhpcyByZWxlYXNlIGRvZXMgaXMgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHdoZW4geW91IGhhdmVuJ3QKKyAgIGNvbmZpZ3VyZWQgdGhhdCB2YXJpYWJsZS4KKworICogImdpdCBzdGF0dXMiIGlzIG5vdCAiZ2l0IGNvbW1pdCAtLWRyeS1ydW4iIGFueW1vcmUuICBUaGlzIGNoYW5nZSBkb2VzCisgICBub3QgYWZmZWN0IHlvdSBpZiB5b3UgcnVuIHRoZSBjb21tYW5kIHdpdGhvdXQgYXJndW1lbnQuCisKKyAqICJnaXQgZGlmZiIgdHJhZGl0aW9uYWxseSB0cmVhdGVkIHZhcmlvdXMgImlnbm9yZSB3aGl0ZXNwYWNlIiBvcHRpb25zCisgICBvbmx5IGFzIGEgd2F5IHRvIGZpbHRlciB0aGUgcGF0Y2ggb3V0cHV0LiAgImdpdCBkaWZmIC0tZXhpdC1jb2RlIC1iIgorICAgZXhpdGVkIHdpdGggbm9uLXplcm8gc3RhdHVzIGV2ZW4gaWYgYWxsIGNoYW5nZXMgd2VyZSBhYm91dCBjaGFuZ2luZyB0aGUKKyAgIGFtb3VudCBvZiB3aGl0ZXNwYWNlIGFuZCBub3RoaW5nIGVsc2U7ICBhbmQgImdpdCBkaWZmIC1iIiBzaG93ZWQgdGhlCisgICAiZGlmZiAtLWdpdCIgaGVhZGVyIGxpbmUgZm9yIHN1Y2ggYSBjaGFuZ2Ugd2l0aG91dCBwYXRjaCB0ZXh0LgorCisgICBJbiB0aGlzIHJlbGVhc2UsIHRoZSAiaWdub3JlIHdoaXRlc3BhY2VzIiBvcHRpb25zIGFmZmVjdCB0aGUgc2VtYW50aWNzCisgICBvZiB0aGUgZGlmZiBvcGVyYXRpb24uICBBIGNoYW5nZSB0aGF0IGRvZXMgbm90IGFmZmVjdCBhbnl0aGluZyBidXQKKyAgIHdoaXRlc3BhY2VzIGlzIHJlcG9ydGVkIHdpdGggemVybyBleGl0IHN0YXR1cyB3aGVuIHJ1biB3aXRoCisgICAtLWV4aXQtY29kZSwgYW5kIHRoZXJlIGlzIG5vICJkaWZmIC0tZ2l0IiBoZWFkZXIgZm9yIHN1Y2ggYSBjaGFuZ2UuCisKKyAqIEV4dGVybmFsIGRpZmYgYW5kIHRleHRjb252IGhlbHBlcnMgYXJlIG5vdyBleGVjdXRlZCB1c2luZyB0aGUgc2hlbGwuCisgICBUaGlzIG1ha2VzIHRoZW0gY29uc2lzdGVudCB3aXRoIG90aGVyIHByb2dyYW1zIGV4ZWN1dGVkIGJ5IGdpdCwgYW5kCisgICBhbGxvd3MgeW91IHRvIHBhc3MgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMgdG8gdGhlIGhlbHBlcnMuIEFueSBoZWxwZXIKKyAgIHBhdGhzIGNvbnRhaW5pbmcgc3BhY2VzIG9yIG90aGVyIG1ldGFjaGFyYWN0ZXJzIG5vdyBuZWVkIHRvIGJlCisgICBzaGVsbC1xdW90ZWQuICBUaGUgYWZmZWN0ZWQgaGVscGVycyBhcmUgR0lUX0VYVEVSTkFMX0RJRkYgaW4gdGhlCisgICBlbnZpcm9ubWVudCwgYW5kIGRpZmYuKi5jb21tYW5kIGFuZCBkaWZmLioudGV4dGNvbnYgaW4gdGhlIGNvbmZpZworICAgZmlsZS4KKworICogVGhlIC0tbWF4LXBhY2stc2l6ZSBhcmd1bWVudCB0byAnZ2l0IHJlcGFjaycsICdnaXQgcGFjay1vYmplY3RzJywgYW5kCisgICAnZ2l0IGZhc3QtaW1wb3J0JyB3YXMgYXNzdW1pbmcgdGhlIHByb3ZpZGVkIHNpemUgdG8gYmUgZXhwcmVzc2VkIGluIE1pQiwKKyAgIHVubGlrZSB0aGUgY29ycmVzcG9uZGluZyBjb25maWcgdmFyaWFibGUgYW5kIG90aGVyIHNpbWlsYXIgb3B0aW9ucyBhY2NlcHRpbmcKKyAgIGEgc2l6ZSB2YWx1ZS4gIEl0IGlzIG5vdyBleHBlY3RpbmcgYSBzaXplIGV4cHJlc3NlZCBpbiBieXRlcywgd2l0aCBhIHBvc3NpYmxlCisgICB1bml0IHN1ZmZpeCBvZiAnaycsICdtJywgb3IgJ2cnLgorCitVcGRhdGVzIHNpbmNlIHYxLjYuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHN1YnN5c3RlbXMpCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIHVwZGF0ZXM7IGFkZHMgIm9wdGlvbiIgYW5kICJmZWF0dXJlIiB0byBkZXRlY3QgdGhlCisgICBtaXNtYXRjaCBiZXR3ZWVuIGZhc3QtaW1wb3J0IGFuZCB0aGUgZnJvbnRlbmRzIHRoYXQgcHJvZHVjZSB0aGUgaW5wdXQKKyAgIHN0cmVhbS4KKworICogImdpdCBzdm4iIHN1cHBvcnQgb2Ygc3VidmVyc2lvbiAibWVyZ2UgdGlja2V0cyIgYW5kIG1pc2NlbGxhbmVvdXMgZml4ZXMuCisKKyAqICJnaXRrIiBhbmQgImdpdCBndWkiIHRyYW5zbGF0aW9uIHVwZGF0ZXMuCisKKyAqICJnaXR3ZWIiIHVwZGF0ZXMgKGNvZGUgY2xlYW4tdXAsIGxvYWQgY2hlY2tpbmcgZXRjLikKKworKHBvcnRhYmlsaXR5KQorCisgKiBTb21lIG1vcmUgTVNWQyBwb3J0YWJpbGl0eSBwYXRjaGVzIGZvciBtc3lzZ2l0IHBvcnQuCisKKyAqIE1pbmltdW0gUHRocmVhZHMgZW11bGF0aW9uIGZvciBtc3lzZ2l0IHBvcnQuCisKKyhwZXJmb3JtYW5jZSkKKworICogTW9yZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBwYXRjaGVzIGZvciBtc3lzZ2l0IHBvcnQuCisKKyh1c2FiaWxpdHksIGJlbGxzIGFuZCB3aGlzdGxlcykKKworICogTW9yZSBjb21tYW5kcyBsZWFybmVkICItLXF1aWV0IiBhbmQgIi0tW25vLV1wcm9ncmVzcyIgb3B0aW9ucy4KKworICogVmFyaW91cyBjb21tYW5kcyBnaXZlbiBieSB0aGUgZW5kIHVzZXIgKGUuZy4gZGlmZi50eXBlLnRleHRjb252LAorICAgYW5kIEdJVF9FRElUT1IpIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiAgRS5nLiBpdAorICAgaXMgbm93IHBvc3NpYmxlIHRvIHNheSAiW2RpZmYgInV0Zjhkb2MiXSB0ZXh0Y29udiA9IG5rZiAtdyIuCisKKyAqICJzcGFyc2UgY2hlY2tvdXQiIGZlYXR1cmUgYWxsb3dzIG9ubHkgcGFydCBvZiB0aGUgd29yayB0cmVlIHRvIGJlCisgICBjaGVja2VkIG91dC4KKworICogSFRUUCB0cmFuc2ZlciBjYW4gdXNlIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBvdGhlciB0aGFuIGJhc2ljCisgICAoaS5lLi9lLmcuIGRpZ2VzdCkuCisKKyAqIFN3aXRjaGluZyBmcm9tIGEgdmVyc2lvbiBvZiBzdXBlcnByb2plY3QgdGhhdCB1c2VkIHRvIGhhdmUgYSBzdWJtb2R1bGUKKyAgIHRvIGFub3RoZXIgdmVyc2lvbiBvZiBzdXBlcnByb2plY3QgdGhhdCBubyBsb25nZXIgaGFzIGl0IGRpZCBub3QgcmVtb3ZlCisgICB0aGUgc3VibW9kdWxlIGRpcmVjdG9yeSB3aGVuIGl0IHNob3VsZCAobmFtZWx5LCB3aGVuIHlvdSBhcmUgbm90CisgICBpbnRlcmVzdGVkIGluIHRoZSBzdWJtb2R1bGUgYXQgYWxsIGFuZCBkaWRuJ3QgY2xvbmUvY2hlY2tvdXQpLgorCisgKiBBIG5ldyBhdHRyaWJ1dGUgY29uZmxpY3QtbWFya2VyLXNpemUgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBzaXplIG9mCisgICB0aGUgY29uZmxpY3QgbWFya2VycyBmcm9tIHRoZSBkZWZhdWx0IDc7IHRoaXMgaXMgdXNlZnVsIHdoZW4gdHJhY2tlZAorICAgY29udGVudHMgKGUuZy4gZ2l0LW1lcmdlIGRvY3VtZW50YXRpb24pIGhhdmUgc3RyaW5ncyB0aGF0IHJlc2VtYmxlIHRoZQorICAgY29uZmxpY3QgbWFya2Vycy4KKworICogQSBuZXcgc3ludGF4ICI8YnJhbmNoPkB7dXBzdHJlYW19IiBjYW4gYmUgdXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lIHRvCisgICBzdWJzdGl0dXRlIHRoZSBuYW1lIG9mIHRoZSAidXBzdHJlYW0iIG9mIHRoZSBicmFuY2guICBNaXNzaW5nIGJyYW5jaAorICAgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLCBzbyAiZ2l0IGZldGNoICYmIGdpdCBtZXJnZSBAe3Vwc3RyZWFtfSIKKyAgIHdpbGwgYmUgZXF1aXZhbGVudCB0byAiZ2l0IHB1bGwiLgorCisgKiAiZ2l0IGFtIC0tcmVzb2x2ZWQiIGhhcyBhIHN5bm9ueW0gImdpdCBhbSAtLWNvbnRpbnVlIi4KKworICogImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0iIGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgKHN1cnByaXNlISkgdXBzdHJlYW0sCisgICBpLmUuIHdoZXJlIHRoZSBicmFuY2ggaXMgc3VwcG9zZWQgdG8gcHVsbCBhbmQgbWVyZ2UgZnJvbSAob3IgcmViYXNlIG9udG8pLgorCisgKiAiZ2l0IGNoZWNrb3V0IEEuLi5CIiBpcyBhIHdheSB0byBkZXRhY2ggSEVBRCBhdCB0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuCisgICBBIGFuZCBCLgorCisgKiAiZ2l0IGNoZWNrb3V0IC1tIHBhdGgiIHRvIHJlc2V0IHRoZSB3b3JrIHRyZWUgZmlsZSBiYWNrIGludG8gdGhlCisgICBjb25mbGljdGVkIHN0YXRlIHdvcmtzIGV2ZW4gd2hlbiB5b3UgYWxyZWFkeSByYW4gImdpdCBhZGQgcGF0aCIgYW5kCisgICByZXNvbHZlZCB0aGUgY29uZmxpY3RzLgorCisgKiAiZ2l0IGNvbW1pdCAtLWRhdGU9JzxkYXRlPiciIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBhdXRob3IgZGF0ZQorICAganVzdCBsaWtlICJnaXQgY29tbWl0IC0tYXV0aG9yPSc8bmFtZT4gPGVtYWlsPiciIGNhbiBiZSB1c2VkIHRvCisgICBvdmVycmlkZSB0aGUgYXV0aG9yIGlkZW50aXR5LgorCisgKiAiZ2l0IGNvbW1pdCAtLW5vLXN0YXR1cyIgY2FuIGJlIHVzZWQgdG8gb21pdCB0aGUgbGlzdGluZyBvZiB0aGUgaW5kZXgKKyAgIGFuZCB0aGUgd29yayB0cmVlIHN0YXR1cyBpbiB0aGUgZWRpdG9yIHVzZWQgdG8gcHJlcGFyZSB0aGUgbG9nIG1lc3NhZ2UuCisKKyAqICJnaXQgY29tbWl0IiB3YXJucyBhIGJpdCBtb3JlIGFnZ3Jlc3NpdmVseSB1bnRpbCB5b3UgY29uZmlndXJlIHVzZXIuZW1haWwsCisgICB3aG9zZSBkZWZhdWx0IHZhbHVlIGFsbW9zdCBhbHdheXMgaXMgbm90IChhbmQgZnVuZGFtZW50YWxseSBjYW5ub3QgYmUpCisgICB3aGF0IHlvdSB3YW50LgorCisgKiAiZ2l0IGRpZmZ0b29sIiBoYXMgYmVlbiBleHRlbmRlZCB0byBtYWtlIGl0IGVhc2llciB0byBpbnRlZ3JhdGUgaXQKKyAgIHdpdGggZ2l0ay4KKworICogImdpdCBmZXRjaCAtLWFsbCIgY2FuIG5vdyBiZSB1c2VkIGluIHBsYWNlIG9mICJnaXQgcmVtb3RlIHVwZGF0ZSIuCisKKyAqICJnaXQgZ3JlcCIgZG9lcyBub3QgcmVseSBvbiBleHRlcm5hbCBncmVwIGFueW1vcmUuICBJdCBjYW4gdXNlIG1vcmUgdGhhbgorICAgb25lIHRocmVhZCB0byBhY2NlbGVyYXRlIHRoZSBvcGVyYXRpb24uCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCAiLS1xdWlldCIgb3B0aW9uLgorCisgKiAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgbGVhcm5lZCAiLS1nbG9iPWhlYWRzLyoiIHN5bnRheCB0aGF0IGlzIGEgbW9yZQorICAgZmxleGlibGUgd2F5IHRvIGNvbXBsZW1lbnQgIi0tYnJhbmNoZXMvLS10YWdzLy0tcmVtb3RlcyIuCisKKyAqICJnaXQgbWVyZ2UiIGxlYXJuZWQgdG8gcGFzcyBvcHRpb25zIHNwZWNpZmljIHRvIHN0cmF0ZWd5LWJhY2tlbmRzLiAgRS5nLgorCisgICAgLSAiZ2l0IG1lcmdlIC1Yc3VidHJlZT1wYXRoL3RvL2RpcmVjdG9yeSIgY2FuIGJlIHVzZWQgdG8gdGVsbCB0aGUgc3VidHJlZQorICAgICAgc3RyYXRlZ3kgaG93IG11Y2ggdG8gc2hpZnQgdGhlIHRyZWVzIGV4cGxpY2l0bHkuCisKKyAgICAtICJnaXQgbWVyZ2UgLVh0aGVpcnMiIGNhbiBiZSB1c2VkIHRvIGF1dG8tbWVyZ2UgYXMgbXVjaCBhcyBwb3NzaWJsZSwKKyAgICAgIHdoaWxlIGRpc2NhcmRpbmcgeW91ciBvd24gY2hhbmdlcyBhbmQgdGFraW5nIG1lcmdlZCB2ZXJzaW9uIGluCisgICAgICBjb25mbGljdGVkIHJlZ2lvbnMuCisKKyAqICJnaXQgcHVzaCIgbGVhcm5lZCAiZ2l0IHB1c2ggb3JpZ2luIC0tZGVsZXRlIGJyYW5jaCIsIGEgc3ludGFjdGljIHN1Z2FyCisgICBmb3IgImdpdCBwdXNoIG9yaWdpbiA6YnJhbmNoIi4KKworICogImdpdCBwdXNoIiBsZWFybmVkICJnaXQgcHVzaCAtLXNldC11cHN0cmVhbSBvcmlnaW4gZm9ya2VyOmZvcmtlZSIgdGhhdAorICAgbGV0cyB5b3UgY29uZmlndXJlIHlvdXIgImZvcmtlciIgYnJhbmNoIHRvIGxhdGVyIHB1bGwgZnJvbSAiZm9ya2VlIgorICAgYnJhbmNoIGF0ICJvcmlnaW4iLgorCisgKiAiZ2l0IHJlYmFzZSAtLW9udG8gQS4uLkIiIG1lYW5zIHRoZSBoaXN0b3J5IGlzIHJlcGxheWVkIG9uIHRvcCBvZiB0aGUKKyAgIG1lcmdlIGJhc2UgYmV0d2VlbiBBIGFuZCBCLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgbGVhcm5lZCBuZXcgYWN0aW9uICJmaXh1cCIgdGhhdCBzcXVhc2hlcyB0aGUgY2hhbmdlCisgICBidXQgZG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGxvZyBtZXNzYWdlLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgYWxzbyBsZWFybmVkIC0tYXV0b3NxdWFzaCBvcHRpb24gdGhhdCBpcyB1c2VmdWwKKyAgIHRvZ2V0aGVyIHdpdGggdGhlIG5ldyAiZml4dXAiIGFjdGlvbi4KKworICogImdpdCByZW1vdGUiIGxlYXJuZWQgc2V0LXVybCBzdWJjb21tYW5kIHRoYXQgdXBkYXRlcyAoc3VycHJpc2UhKSB1cmwKKyAgIGZvciBhbiBleGlzdGluZyByZW1vdGUgbmlja25hbWUuCisKKyAqICJnaXQgcmVyZXJlIiBsZWFybmVkICJmb3JnZXQgcGF0aCIgc3ViY29tbWFuZC4gIFRvZ2V0aGVyIHdpdGggImdpdAorICAgY2hlY2tvdXQgLW0gcGF0aCIgaXQgd2lsbCBiZSB1c2VmdWwgd2hlbiB5b3UgcmVjb3JkZWQgYSB3cm9uZworICAgcmVzb2x1dGlvbi4KKworICogVXNlIG9mICJnaXQgcmVzZXQgLS1tZXJnZSIgaGFzIGJlY29tZSBlYXNpZXIgd2hlbiByZXNldHRpbmcgYXdheSBhCisgICBjb25mbGljdGVkIG1lc3MgbGVmdCBpbiB0aGUgd29yayB0cmVlLgorCisgKiAiZ2l0IHJlcmVyZSIgaGFkIHJlcmVyZS5hdXRvdXBkYXRlIGNvbmZpZ3VyYXRpb24gYnV0IHRoZXJlIHdhcyBubyB3YXkKKyAgIHRvIGNvdW50ZXJtYW5kIGl0IGZyb20gdGhlIGNvbW1hbmQgbGluZTsgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSBvcHRpb24KKyAgIGdpdmVuIHRvICJtZXJnZSIsICJyZXZlcnQiLCBldGMuIGZpeGVzIHRoaXMuCisKKyAqICJnaXQgc3RhdHVzIiBsZWFybmVkICItcyhob3J0KSIgb3V0cHV0IGZvcm1hdC4KKworKGRldmVsb3BlcnMpCisKKyAqIFRoZSBpbmZyYXN0cnVjdHVyZSB0byBidWlsZCBmb3JlaWduIFNDTSBpbnRlcmZhY2UgaGFzIGJlZW4gdXBkYXRlZC4KKworICogTWFueSBtb3JlIGNvbW1hbmRzIGFyZSBub3cgYnVpbHQtaW4uCisKKyAqIFRIUkVBREVEX0RFTFRBX1NFQVJDSCBpcyBubyBtb3JlLiAgSWYgeW91IGJ1aWxkIHdpdGggdGhyZWFkcywgZGVsdGEKKyAgIGNvbXByZXNzaW9uIHdpbGwgYWx3YXlzIHRha2UgYWR2YW50YWdlIG9mIGl0LgorCitGaXhlcyBzaW5jZSB2MS42LjYKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjYuNi5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogImdpdCBicmFuY2ggLWQgYnJhbmNoIiB1c2VkIHRvIHJlZnVzZSBkZWxldGluZyB0aGUgYnJhbmNoIGV2ZW4gd2hlbgorICAgdGhlIGJyYW5jaCBpcyBmdWxseSBtZXJnZWQgdG8gaXRzIHVwc3RyZWFtIGJyYW5jaCBpZiBpdCBpcyBub3QgbWVyZ2VkCisgICB0byB0aGUgY3VycmVudCBicmFuY2guICBJdCBub3cgZGVsZXRlcyBpdCBpbiBzdWNoIGEgY2FzZS4KKworICogImZpbHRlci1icmFuY2giIGNvbW1hbmQgaW5jb3JyZWN0bHkgc2FpZCAtLXBydW5lLWVtcHR5IGFuZCAtLWZpbHRlci1jb21taXQKKyAgIHdlcmUgaW5jb21wYXRpYmxlOyB0aGUgbGF0dGVyIHNob3VsZCBiZSByZWFkIGFzIC0tY29tbWl0LWZpbHRlci4KKworICogV2hlbiB1c2luZyAiZ2l0IHN0YXR1cyIgb3IgYXNraW5nICJnaXQgZGlmZiIgdG8gY29tcGFyZSB0aGUgd29yayB0cmVlCisgICB3aXRoIHNvbWV0aGluZywgdGhleSB1c2VkIHRvIGNvbnNpZGVyIHRoYXQgYSBjaGVja2VkLW91dCBzdWJtb2R1bGUgd2l0aAorICAgdW5jb21taXR0ZWQgY2hhbmdlcyBpcyBub3QgbW9kaWZpZWQ7IHRoaXMgY291bGQgY2F1c2UgcGVvcGxlIHRvIGZvcmdldAorICAgY29tbWl0dGluZyB0aGVzZSBjaGFuZ2VzIGluIHRoZSBzdWJtb2R1bGUgYmVmb3JlIGNvbW1pdHRpbmcgaW4gdGhlCisgICBzdXBlcnByb2plY3QuIFRoZXkgbm93IGNvbnNpZGVyIHN1Y2ggYSBjaGFuZ2UgYXMgYSBtb2RpZmljYXRpb24gYW5kCisgICAiZ2l0IGRpZmYiIHdpbGwgYXBwZW5kIGEgIi1kaXJ0eSIgdG8gdGhlIHdvcmsgdHJlZSBzaWRlIHdoZW4gZ2VuZXJhdGluZworICAgcGF0Y2ggb3V0cHV0IG9yIHdoZW4gdXNlZCB3aXRoIHRoZSAtLXN1Ym1vZHVsZSBvcHRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjZiMzE0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS4xLnR4dApAQCAtMCwwICsxLDk2IEBACitHaXQgdjEuNy4xLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQXV0aGVudGljYXRpb24gb3ZlciBodHRwIHRyYW5zcG9ydCBjYW4gbm93IGJlIG1hZGUgbGF6aWx5LCBpbiB0aGF0IHRoZQorICAgcmVxdWVzdCBjYW4gZmlyc3QgZ28gdG8gYSBVUkwgd2l0aG91dCB1c2VybmFtZSwgZ2V0IGEgNDAxIHJlc3BvbnNlIGFuZAorICAgdGhlbiB0aGUgY2xpZW50IHdpbGwgYXNrIGZvciB0aGUgdXNlcm5hbWUgdG8gdXNlLgorCisgKiBXZSB1c2VkIHRvIG1pc3Rha2VubHkgdGhpbmsgIi4uL3dvcmsiIGlzIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50CisgICBkaXJlY3Rvcnkgd2hlbiB3ZSBhcmUgaW4gIi4uL3dvcmsteHl6Ii4KKworICogVGhlIGF0dHJpYnV0ZSBtZWNoYW5pc20gbm93IGFsbG93cyBhbiBlbnRyeSB0aGF0IHVzZXMgYW4gYXR0cmlidXRlCisgICBtYWNybyB0aGF0IHNldC91bnNldCBvbmUgYXR0cmlidXRlLCBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhbgorICAgb3ZlcnJpZGluZyBzZXR0aW5nOyB0aGlzIG1ha2VzIGF0dHJpYnV0ZSBtYWNyb3MgbXVjaCBlYXNpZXIgdG8gdXNlLgorCisgKiBXZSBkaWRuJ3QgcmVjb2duaXplIHRpbWV6b25lICJaIiBhcyBhIHN5bm9ueW0gZm9yICJVVEMiICg3NWIzN2U3MCkuCisKKyAqIEluIDEuNy4wLCByZWFkLXRyZWUgYW5kIHVzZXIgY29tbWFuZHMgdGhhdCB1c2UgdGhlIG1lY2hhbmlzbSBzdWNoIGFzCisgICBjaGVja291dCBhbmQgbWVyZ2Ugd2VyZSBmaXhlZCB0byBoYW5kbGUgc3dpdGNoaW5nIGJldHdlZW4gYnJhbmNoZXMgb25lCisgICBvZiB3aGljaCBoYXMgYSBmaWxlIHdoaWxlIHRoZSBvdGhlciBoYXMgYSBkaXJlY3RvcnkgYXQgdGhlIHNhbWUgcGF0aAorICAgY29ycmVjdGx5IGV2ZW4gd2hlbiB0aGVyZSBhcmUgc29tZSAiY29uZnVzaW5nIiBwYXRobmFtZXMgaW4gdGhlbS4gIEJ1dAorICAgdGhlIGFsZ29yaXRobSB1c2VkIGZvciB0aGlzIGZpeCB3YXMgc3Vib3B0aW1hbCBhbmQgaGFkIGEgdGVycmlibGUKKyAgIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGVzcGVjaWFsbHkgaW4gbGFyZ2VyIHRyZWVzLgorCisgKiAiZ2l0IGFtIC0zIiBkaWQgbm90IHNob3cgZGlhZ25vc2lzIHdoZW4gdGhlIHBhdGNoIGluIHRoZSBtZXNzYWdlIHdhcyBjb3JydXB0LgorCisgKiBBZnRlciAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXgiIHJlbW92ZWQgdHJhaWxpbmcgYmxhbmsgbGluZXMgaW4gYW4KKyAgIHBhdGNoIGluIGEgcGF0Y2ggc2VyaWVzLCBpdCBmYWlsZWQgdG8gYXBwbHkgbGF0ZXIgcGF0Y2hlcyB0aGF0IGRlcGVuZAorICAgb24gdGhlIHByZXNlbmNlIG9mIHN1Y2ggYmxhbmsgbGluZXMuCisKKyAqICJnaXQgYnVuZGxlIC0tc3RkaW4iIHNlZ2ZhdWx0ZWQuCisKKyAqICJnaXQgY2hlY2tvdXQiIGFuZCAiZ2l0IHJlYmFzZSIgb3Zlcndyb3RlIHBhdGhzIHRoYXQgYXJlIG1hcmtlZCAiYXNzdW1lCisgICB1bmNoYW5nZWQiLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFtZW5kIiBvbiBhIGNvbW1pdCB3aXRoIGFuIGludmFsaWQgYXV0aG9yLW5hbWUgbGluZSB0aGF0CisgICBsYWNrcyB0aGUgZGlzcGxheSBuYW1lIGRpZG4ndCB3b3JrLgorCisgKiAiZ2l0IGRlc2NyaWJlIiBkaWQgbm90IHRpZS1icmVhayB0YWdzIHRoYXQgcG9pbnQgYXQgdGhlIHNhbWUgY29tbWl0CisgICBjb3JyZWN0bHk7IG5ld2VyIG9uZXMgYXJlIHByZWZlcnJlZCBieSBwYXlpbmcgYXR0ZW50aW9uIHRvIHRoZQorICAgdGFnZ2VyIGRhdGUgbm93LgorCisgKiAiZ2l0IGRpZmYiIHVzZWQgdG8gdGVsbCB1bmRlcmx5aW5nIHhkaWZmIG1hY2hpbmVyeSB0byB3b3JrIHZlcnkgaGFyZCB0bworICAgbWluaW1pemUgdGhlIG91dHB1dCwgYnV0IHRoaXMgb2Z0ZW4gd2FzIHNwZW5kaW5nIHRvbyBtYW55IGV4dHJhIGN5Y2xlcworICAgZm9yIHZlcnkgbGl0dGxlIGdhaW4uCisKKyAqICJnaXQgZGlmZiAtLWNvbG9yIiBkaWQgbm90IHBhaW50IGV4dGVuZGVkIGRpZmYgaGVhZGVycyBwZXIgbGluZQorICAgKGkuZS4gdGhlIGNvbG9yaW5nIGVzY2FwZSBzZXF1ZW5jZSBkaWRuJ3QgZW5kIGF0IHRoZSBlbmQgb2YgbGluZSksCisgICB3aGljaCBjb25mdXNlZCAibGVzcyAtUiIuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgSFRUUCB2ZXJpZmllcyB0aGUgZG93bmxvYWRlZCBwYWNrZmlsZXMgbW9yZSByb2J1c3RseS4KKworICogVGhlIG1lbW9yeSB1c2FnZSBieSAiZ2l0IGluZGV4LXBhY2siIChydW4gZHVyaW5nICJnaXQgZmV0Y2giIGFuZCAiZ2l0CisgICBwdXNoIikgZ290IGxlYW5lci4KKworICogIkdJVF9ESVI9Zm9vLmdpdCBnaXQgaW5pdCAtLWJhcmUgYmFyLmdpdCIgY3JlYXRlZCBmb28uZ2l0IGluc3RlYWQgb2YgYmFyLmdpdC4KKworICogImdpdCBsb2cgLS1hYmJyZXY9JG51bSAtLWZvcm1hdD0nJWgnIGlnbm9yZWQgLS1hYmJyZXY9JG51bS4KKworICogImdpdCBscy1maWxlcyAuLi9vdXQvc2lkZS9jd2QiIHJlZnVzZWQgdG8gd29yay4KKworICogImdpdCBtZXJnZSAtLWxvZyIgdXNlZCB0byByZXBsYWNlIHRoZSBjdXN0b20gbWVzc2FnZSBnaXZlbiBieSAiLW0iIHdpdGgKKyAgIHRoZSBzaG9ydGxvZywgaW5zdGVhZCBvZiBhcHBlbmRpbmcgdG8gaXQuCisKKyAqICJnaXQgbm90ZXMgY29weSIgd2l0aG91dCBhbnkgb3RoZXIgYXJndW1lbnQgc2VnZmF1bHRlZC4KKworICogImdpdCBwdWxsIiBhY2NlcHRlZCAiLS1kcnktcnVuIiwgZ2F2ZSBpdCB0byB1bmRlcmx5aW5nICJnaXQgZmV0Y2giIGJ1dAorICAgaWdub3JlZCB0aGUgb3B0aW9uIGl0c2VsZiwgcmVzdWx0aW5nIGluIGEgYm9ndXMgYXR0ZW1wdCB0byBtZXJnZQorICAgdW5yZWxhdGVkIGNvbW1pdC4KKworICogImdpdCByZWJhc2UiIGRpZCBub3QgZmFpdGhmdWxseSByZXByb2R1Y2UgYSBtYWxmb3JtZWQgYXV0aG9yIGlkZW50LCB0aGF0CisgICBpcyBvZnRlbiBzZWVuIGluIGEgcmVwb3NpdG9yeSBjb252ZXJ0ZWQgZnJvbSBmb3JlaWduIFNDTXMuCisKKyAqICJnaXQgcmVzZXQgLS1oYXJkIiBzdGFydGVkIGZyb20gYSB3cm9uZyBkaXJlY3RvcnkgYW5kIGEgd29ya2luZyB0cmVlIGluCisgICBhIG5vbnN0YW5kYXJkIGxvY2F0aW9uIGlzIGluIHVzZSBnb3QgY29uZnVzZWQuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGFja2VkIGEgd2F5IHRvIHNwZWNpZnkgdGhlIGRvbWFpbm5hbWUgdXNlZCBpbiB0aGUKKyAgIEVITE8vSEVMTyBleGNoYW5nZSwgY2F1c2luZyByZWplY3RlZCBjb25uZWN0aW9uIGZyb20gcGlja3kgc2VydmVycy4KKyAgIEl0IGxlYXJuZWQgLS1zbXRwLWRvbWFpbiBvcHRpb24gdG8gc29sdmUgdGhpcyBpc3N1ZS4KKworICogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IGRlY2xhcmUgYSBjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nIGFuZAorICAgY29udGVudC10eXBlIGV2ZW4gd2hlbiBpdHMgcGF5bG9hZCBuZWVkcyB0byBiZSBzZW50IGluIDgtYml0LgorCisgKiAiZ2l0IHNob3cgLUMgLUMiIGFuZCBvdGhlciBjb3JuZXIgY2FzZXMgbG9zdCBkaWZmIG1ldGFpbmZvIG91dHB1dAorICAgaW4gMS43LjAuCisKKyAqICJnaXQgc3Rhc2giIGluY29ycmVjdGx5IGxvc3QgcGF0aHMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0aGF0IHdlcmUKKyAgIHByZXZpb3VzbHkgcmVtb3ZlZCBmcm9tIHRoZSBpbmRleC4KKworICogImdpdCBzdGF0dXMiIHN0b3BwZWQgcmVmcmVzaGluZyB0aGUgaW5kZXggYnkgbWlzdGFrZSBpbiAxLjcuMS4KKworICogImdpdCBzdGF0dXMiIHNob3dlZCBleGNlc3MgImhpbnRzIiBldmVuIHdoZW4gYWR2aWNlLnN0YXR1c0hpbnRzIGlzIHNldCB0byBmYWxzZS4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWJhMTRlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS4yLnR4dApAQCAtMCwwICsxLDI4IEBACitHaXQgdjEuNy4xLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgY29tbWl0IiBkaWQgbm90IGhvbm9yIEdJVF9SRUZMT0dfQUNUSU9OIGVudmlyb25tZW50IHZhcmlhYmxlLCByZXN1bHRpbmcKKyAgIHJlZmxvZyBtZXNzYWdlcyBmb3IgY2hlcnJ5LXBpY2sgYW5kIHJldmVydCBhY3Rpb25zIHRvIGJlIHJlY29yZGVkIGFzICJjb21taXQiLgorCisgKiAiZ2l0IGNsb25lL2ZldGNoL3B1bGwiIGlzc3VlZCBhbiBpbmNvcnJlY3QgZXJyb3IgbWVzc2FnZSB3aGVuIGEgcmVmIGFuZAorICAgYSBzeW1yZWYgdGhhdCBwb2ludHMgdG8gdGhlIHJlZiB3ZXJlIHVwZGF0ZWQgYXQgdGhlIHNhbWUgdGltZS4gIFRoaXMKKyAgIG9idmlvdXNseSB3b3VsZCB1cGRhdGUgdGhlbSB0byB0aGUgc2FtZSB2YWx1ZSwgYW5kIHNob3VsZCBub3QgcmVzdWx0IGluCisgICBhbiBlcnJvciBjb25kaXRpb24uCisKKyAqICJnaXQgZGlmZiIgaW5zaWRlIGEgdHJlZSB3aXRoIG1hbnkgcGF0aG5hbWVzIHRoYXQgaGF2ZSBjZXJ0YWluCisgICBjaGFyYWN0ZXJzIGhhcyBiZWNvbWUgdmVyeSBzbG93IGluIDEuNy4wIGJ5IG1pc3Rha2UuCisKKyAqICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1zdG9wLWF0LW5vbi1vcHRpb24iIGRpZCBub3Qgc3RvcCBhdCBub24gb3B0aW9uCisgICB3aGVuIC0ta2VlcC1kYXNoZGFzaCB3YXMgaW4gZWZmZWN0LgorCisgKiBBbiBvdmVybG9uZyBsaW5lIGFmdGVyICIuZ2l0ZGlyOiAiIGluIGEgZ2l0IGZpbGUgY2F1c2VkIG91dCBvZiBib3VuZHMKKyAgIGFjY2VzcyB0byBhbiBhcnJheSBvbiB0aGUgc3RhY2suCisKKyAqICJnaXQgY29uZmlnIC0tcGF0aCBjb25mLnZhciIgdG8gYXR0ZW1wdCB0byBleHBhbmQgYSB2YXJpYWJsZSBjb25mLnZhcgorICAgdGhhdCB1c2VzICJ+LyIgc2hvcnQtaGFuZCBzZWdmYXVsdGVkIHdoZW4gJEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIHdhcyBub3Qgc2V0LgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTg1MTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjMudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0dpdCB2MS43LjEuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIHByaW1hcmlseSB0byBiYWNrcG9ydCBzdXBwb3J0IGZvciB0aGUgbmV3ICJhZGQuaWdub3JlRXJyb3JzIgorbmFtZSBnaXZlbiB0byB0aGUgZXhpc3RpbmcgImFkZC5pZ25vcmUtZXJyb3JzIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCitUaGUgbmV4dCB2ZXJzaW9uLCBHaXQgMS43LjQsIGFuZCBmdXR1cmUgdmVyc2lvbnMsIHdpbGwgc3VwcG9ydCBib3RoCitvbGQgYW5kIGluY29ycmVjdCBuYW1lIGFuZCB0aGUgbmV3IGNvcnJlY3RlZCBuYW1lLCBidXQgd2l0aG91dCB0aGlzCitiYWNrcG9ydCwgdXNlcnMgd2hvIHdhbnQgdG8gdXNlIHRoZSBuZXcgbmFtZSAiYWRkLmlnbm9yZUVycm9ycyIgaW4KK3RoZWlyIHJlcG9zaXRvcmllcyBjYW5ub3QgdXNlIG9sZGVyIHZlcnNpb25zIG9mIEdpdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNzM0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjQudHh0CkBAIC0wLDAgKzEsOCBAQAorR2l0IHYxLjcuMS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0d2ViIiBjYW4gc29tZXRpbWVzIGJlIHRyaWNrZWQgaW50byBwYXJyb3R0aW5nIGEgZmlsZW5hbWUgYXJndW1lbnQKKyAgIGdpdmVuIGluIGEgcmVxdWVzdCB3aXRob3V0IHByb3Blcmx5IHF1b3RpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkODlmZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLnR4dApAQCAtMCwwICsxLDg5IEBACitHaXQgdjEuNy4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogRXJpYyBSYXltb25kIGlzIHRoZSBtYWludGFpbmVyIG9mIHVwZGF0ZWQgQ0lBYm90IHNjcmlwdHMsIGluIGNvbnRyaWIvLgorCisgKiBnaXRrIHVwZGF0ZXMuCisKKyAqIFNvbWUgY29tbWFuZHMgKGUuZy4gc3ZuIGFuZCBodHRwIGludGVyZmFjZXMpIHRoYXQgaW50ZXJhY3RpdmVseSBhc2sKKyAgIGZvciBhIHBhc3N3b3JkIGNhbiBiZSB0b2xkIHRvIHVzZSBhbiBleHRlcm5hbCBwcm9ncmFtIGdpdmVuIHZpYQorICAgR0lUX0FTS1BBU1MuCisKKyAqIENvbmZsaWN0IG1hcmtlcnMgdGhhdCBsZWFkIHRoZSBjb21tb24gYW5jZXN0b3IgaW4gZGlmZjMtc3R5bGUgb3V0cHV0CisgICBub3cgaGF2ZSBhIGxhYmVsLCB3aGljaCBob3BlZnVsbHkgd291bGQgaGVscCB0aGlyZC1wYXJ0eSB0b29scyB0aGF0CisgICBleHBlY3Qgb25lLgorCisgKiBDb21lcyB3aXRoIGFuIHVwZGF0ZWQgYmFzaC1jb21wbGV0aW9uIHNjcmlwdC4KKworICogImdpdCBhbSIgbGVhcm5lZCAiLS1rZWVwLWNyIiBvcHRpb24gdG8gaGFuZGxlIGlucHV0cyB0aGF0IGFyZQorICAgYSBtaXh0dXJlIG9mIGNoYW5nZXMgdG8gZmlsZXMgd2l0aCBhbmQgd2l0aG91dCBDUkxGIGxpbmUgZW5kaW5ncy4KKworICogImdpdCBjdnNpbXBvcnQiIGxlYXJuZWQgLVIgb3B0aW9uIHRvIGxlYXZlIHJldmlzaW9uIG1hcHBpbmcgYmV0d2VlbgorICAgQ1ZTIHJldmlzaW9ucyBhbmQgcmVzdWx0aW5nIGdpdCBjb21taXRzLgorCisgKiAiZ2l0IGRpZmYgLS1zdWJtb2R1bGUiIG5vdGljZXMgYW5kIGRlc2NyaWJlcyBkaXJ0eSBzdWJtb2R1bGVzLgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiIgbGVhcm5lZCAlKHN5bXJlZiksICUoc3ltcmVmOnNob3J0KSBhbmQgJShmbGFnKQorICAgdG9rZW5zLgorCisgKiAiZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4tcGF0aHMiIGNhbiB0YWtlICItLW5vLWZpbHRlcnMiIG9wdGlvbiBub3cuCisKKyAqICJnaXQgaW5pdCIgY2FuIGJlIHRvbGQgdG8gbG9vayBhdCBpbml0LnRlbXBsYXRlZGlyIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIChvYnZpb3VzbHkgdGhhdCBoYXMgdG8gY29tZSBmcm9tIGVpdGhlciAvZXRjL2dpdGNvbmZpZyBvcgorICAgJEhPTUUvLmdpdGNvbmZpZykuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCAiLS1uby1pbmRleCIgb3B0aW9uLCB0byBzZWFyY2ggaW5zaWRlIGNvbnRlbnRzIHRoYXQKKyAgIGFyZSBub3QgbWFuYWdlZCBieSBnaXQuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCAtLWNvbG9yPWF1dG8vYWx3YXlzL25ldmVyLgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgdG8gcGFpbnQgZmlsZW5hbWUgYW5kIGxpbmUtbnVtYmVyIGluIGNvbG9ycy4KKworICogImdpdCBsb2cgLXAgLS1maXJzdC1wYXJlbnQgLW0iIHNob3dzIG9uZS1wYXJlbnQgZGlmZiBmb3IgbWVyZ2UKKyAgIGNvbW1pdHMsIGluc3RlYWQgb2Ygc2hvd2luZyBjb21iaW5lZCBkaWZmLgorCisgKiAiZ2l0IG1lcmdlLWZpbGUiIGxlYXJuZWQgdG8gdXNlIGN1c3RvbSBjb25mbGljdCBtYXJrZXIgc2l6ZSBhbmQgYWxzbworICAgdG8gdXNlIHRoZSAidW5pb24gbWVyZ2UiIGJlaGF2aW91ci4KKworICogImdpdCBub3RlcyIgY29tbWFuZCBoYXMgYmVlbiByZXdyaXR0ZW4gaW4gQyBhbmQgbGVhcm5lZCBtYW55IGNvbW1hbmRzCisgICBhbmQgZmVhdHVyZXMgdG8gaGVscCB5b3UgY2Fycnkgbm90ZXMgZm9yd2FyZCBhY3Jvc3MgcmViYXNlcyBhbmQgYW1lbmRzLgorCisgKiAiZ2l0IHJlcXVlc3QtcHVsbCIgaWRlbnRpZmllcyB0aGUgY29tbWl0IHRoZSByZXF1ZXN0IGlzIHJlbGF0aXZlIHRvIGluCisgICBhIG1vcmUgcmVhZGFibGUgd2F5LgorCisgKiAiZ2l0IHJlc2V0IiBsZWFybmVkICItLWtlZXAiIG9wdGlvbiB0aGF0IGxldHMgeW91IGRpc2NhcmQgY29tbWl0cworICAgbmVhciB0aGUgdGlwIHdoaWxlIHByZXNlcnZpbmcgeW91ciBsb2NhbCBjaGFuZ2VzIGluIGEgd2F5IHNpbWlsYXIKKyAgIHRvIGhvdyAiZ2l0IGNoZWNrb3V0IGJyYW5jaCIgZG9lcy4KKworICogImdpdCBzdGF0dXMiIG5vdGljZXMgYW5kIGRlc2NyaWJlcyBkaXJ0eSBzdWJtb2R1bGVzLgorCisgKiAiZ2l0IHN2biIgc2hvdWxkIHdvcmsgYmV0dGVyIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCByZXBvc2l0b3JpZXMKKyAgIHdpdGggQ1JMRiBsaW5lIGVuZGluZ3MuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBsZWFybmVkIHRvIHN1cHBvcnQgQ1JBTS1NRDUgYXV0aGVudGljYXRpb24uCisKKyAqICJnaXR3ZWIiIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUgY2FuIHVzZSAibWluaWZpZWQiIGpzL2NzcyBmaWxlcworICAgYmV0dGVyLgorCisgKiBWYXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KKworRml4ZXMgc2luY2UgdjEuNy4wCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS43LjAuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKKyAqICJnaXQgYWRkIGZyb3R6L25pdGZvbCIgZGlkIG5vdCBjb21wbGFpbiB3aGVuIHRoZSBlbnRpcmUgZnJvdHovIGRpcmVjdG9yeQorICAgd2FzIGlnbm9yZWQuCisKKyAqICJnaXQgZGlmZiAtLXN0YXQiIHVzZWQgImludCIgdG8gY291bnQgdGhlIHNpemUgb2YgZGlmZmVyZW5jZXMsCisgICB3aGljaCBjb3VsZCByZXN1bHQgaW4gb3ZlcmZsb3dpbmcuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZSIgZGlkbid0IHRlcm1pbmF0ZSBhIHJlY29yZCB3aXRoIExGIGZvcgorICAgY29tbWl0cyB3aXRob3V0IGFueSBtZXNzYWdlLgorCisgKiAiZ2l0IHJldi1saXN0IC0tYWJicmV2LWNvbW1pdCIgZGVmYXVsdGVkIHRvIDQwLWJ5dGUgYWJicmV2aWF0aW9ucywgdW5saWtlCisgICBuZXdlciB0b29scyBpbiB0aGUgZ2l0IHRvb2xzZXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYTg2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4xLnR4dApAQCAtMCwwICsxLDc4IEBACitHaXQgdjEuNy4xMC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBZGRpdGlvbnMgc2luY2UgdjEuNy4xMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTG9jYWxpemF0aW9uIG1lc3NhZ2UgZmlsZXMgZm9yIERhbmlzaCBhbmQgR2VybWFuIGhhdmUgYmVlbiBhZGRlZC4KKworCitGaXhlcyBzaW5jZSB2MS43LjEwCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgYWRkIC1wIiBpcyBub3QgZGVzaWduZWQgdG8gZGVhbCB3aXRoIHVubWVyZ2VkIHBhdGhzIGJ1dCBkaWQKKyAgIG5vdCBleGNsdWRlIHRoZW0gYW5kIHRyaWVkIHRvIGFwcGx5IGZ1bm55IHBhdGNoZXMgb25seSB0byBmYWlsLgorCisgKiAiZ2l0IGJsYW1lIiBzdGFydGVkIG1pc3NpbmcgcXVpdGUgYSBmZXcgY2hhbmdlcyBmcm9tIHRoZSBvcmlnaW4KKyAgIHNpbmNlIHdlIHN0b3BwZWQgdXNpbmcgdGhlIGRpZmYgbWluaW1pemF0aW9uIGJ5IGRlZmF1bHQgaW4gdjEuNy4yCisgICBlcmEuCisKKyAqIFdoZW4gUEFUSCBjb250YWlucyBhbiB1bnJlYWRhYmxlIGRpcmVjdG9yeSwgYWxpYXMgZXhwYW5zaW9uIGNvZGUKKyAgIGRpZCBub3Qga2ljayBpbiwgYW5kIGZhaWxlZCB3aXRoIGFuIGVycm9yIHRoYXQgc2FpZCAiZ2l0LXN1YmNtZCIKKyAgIHdhcyBub3QgZm91bmQuCisKKyAqICJnaXQgY2xlYW4gLWQgLWYiIChub3QgIi1kIC1mIC1mIikgaXMgc3VwcG9zZWQgdG8gcHJvdGVjdCBuZXN0ZWQKKyAgIHdvcmtpbmcgdHJlZXMgb2YgaW5kZXBlbmRlbnQgZ2l0IHJlcG9zaXRvcmllcyB0aGF0IGV4aXN0IGluIHRoZQorICAgY3VycmVudCBwcm9qZWN0IHdvcmtpbmcgdHJlZSBmcm9tIGdldHRpbmcgcmVtb3ZlZCwgYnV0IHRoZQorICAgcHJvdGVjdGlvbiBhcHBsaWVkIG9ubHkgdG8gc3VjaCB3b3JraW5nIHRyZWVzIHRoYXQgYXJlIGF0IHRoZQorICAgdG9wLWxldmVsIG9mIHRoZSBjdXJyZW50IHByb2plY3QgYnkgbWlzdGFrZS4KKworICogImdpdCBjb21taXQgLS1hdXRob3I9JG5hbWUiIGRpZCBub3QgdGVsbCB0aGUgbmFtZSB0aGF0IHdhcyBiZWluZworICAgcmVjb3JkZWQgaW4gdGhlIHJlc3VsdGluZyBjb21taXQgdG8gaG9va3MsIGV2ZW4gdGhvdWdoIGl0IGRvZXMgZG8KKyAgIHNvIHdoZW4gdGhlIGVuZCB1c2VyIG92ZXJyb2RlIHRoZSBhdXRob3JzaGlwIHZpYSB0aGUKKyAgICJHSVRfQVVUSE9SX05BTUUiIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgKiBXaGVuICJnaXQgY29tbWl0IC0tdGVtcGxhdGUgRiIgZXJyb3JzIG91dCBiZWNhdXNlIHRoZSB1c2VyIGRpZCBub3QKKyAgIHRvdWNoIHRoZSBtZXNzYWdlLCBpdCBjbGFpbWVkIHRoYXQgaXQgYWJvcnRzIGR1ZSB0byAiZW1wdHkKKyAgIG1lc3NhZ2UiLCB3aGljaCB3YXMgdXR0ZXJseSB3cm9uZy4KKworICogVGhlIHJlZ2V4cCBjb25maWd1cmVkIHdpdGggZGlmZi53b3JkcmVnZXggd2FzIGluY29ycmVjdGx5IHJldXNlZAorICAgYWNyb3NzIGZpbGVzLgorCisgKiBBbiBhZ2Utb2xkIGNvcm5lciBjYXNlIGJ1ZyBpbiBjb21iaW5lIGRpZmYgKG9ubHkgdHJpZ2dlcmVkIHdpdGggLVUwCisgICBhbmQgdGhlIGh1bmsgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBuZWVkcyB0byBiZSBzaG93bikgaGFzCisgICBiZWVuIGZpeGVkLgorCisgKiBSZW5hbWUgZGV0ZWN0aW9uIGxvZ2ljIHVzZWQgdG8gbWF0Y2ggdHdvIGVtcHR5IGZpbGVzIGFzIHJlbmFtZXMKKyAgIGR1cmluZyBtZXJnZS1yZWN1cnNpdmUsIGxlYWRpbmcgdG8gdW5uYXR1cmFsIG1pc21lcmdlcy4KKworICogVGhlIHBhcnNlciBpbiAiZmFzdC1pbXBvcnQiIGRpZCBub3QgZGlhZ25vc2UgIjo5IiBzdHlsZSByZWZlcmVuY2VzCisgICB0aGF0IGlzIG5vdCBmb2xsb3dlZCBieSByZXF1aXJlZCBTUC9MRiBhcyBhbiBlcnJvci4KKworICogV2hlbiAiZ2l0IGZldGNoIiBlbmNvdW50ZXJzIHJlcG9zaXRvcmllcyB3aXRoIHRvbyBtYW55IHJlZmVyZW5jZXMsCisgICB0aGUgY29tbWFuZCBsaW5lIG9mICJmZXRjaC1wYWNrIiB0aGF0IGlzIHJ1biBieSBhIGhlbHBlcgorICAgZS5nLiByZW1vdGUtY3VybCwgbWF5IGZhaWwgdG8gaG9sZCBhbGwgb2YgdGhlbS4gTm93IHN1Y2ggYW4KKyAgIGludGVybmFsIGludm9jYXRpb24gY2FuIGZlZWQgdGhlIHJlZmVyZW5jZXMgdGhyb3VnaCB0aGUgc3RhbmRhcmQKKyAgIGlucHV0IG9mICJmZXRjaC1wYWNrIi4KKworICogImdpdCBmZXRjaCIgdGhhdCByZWN1cnNlcyBpbnRvIHN1Ym1vZHVsZXMgb24gZGVtYW5kIGRpZCBub3QgY2hlY2sKKyAgIGlmIGl0IG5lZWRzIHRvIGdvIGludG8gc3VibW9kdWxlcyB3aGVuIG5vbiBicmFuY2hlcyAobW9zdCBub3RhYmx5LAorICAgdGFncykgYXJlIGZldGNoZWQuCisKKyAqICJsb2cgLXAgLS1ncmFwaCIgdXNlZCB3aXRoICItLXN0YXQiIGhhZCBhIGZldyBmb3JtYXR0aW5nIGVycm9yLgorCisgKiBSdW5uaW5nICJub3RlcyBtZXJnZSAtLWNvbW1pdCIgZmFpbGVkIHRvIHBlcmZvcm0gY29ycmVjdGx5IHdoZW4gcnVuCisgICBmcm9tIGFueSBkaXJlY3RvcnkgaW5zaWRlICRHSVRfRElSLy4gIFdoZW4gIm5vdGVzIG1lcmdlIiBzdG9wcyB3aXRoCisgICBjb25mbGljdHMsICRHSVRfRElSL05PVEVTX01FUkdFX1dPUktUUkVFIGlzIHRoZSBwbGFjZSBhIHVzZXIgZWRpdHMKKyAgIHRvIHJlc29sdmUgaXQuCisKKyAqIFRoZSAncHVzaCB0byB1cHN0cmVhbScgaW1wbGVtZW50YXRpb24gd2FzIGJyb2tlbiBpbiBzb21lIGNvcm5lcgorICAgY2FzZXMuICJnaXQgcHVzaCAkdGhlcmUiIHdpdGhvdXQgcmVmc3BlYywgd2hlbiB0aGUgY3VycmVudCBicmFuY2gKKyAgIGlzIHNldCB0byBwdXNoIHRvIGEgcmVtb3RlIGRpZmZlcmVudCBmcm9tICR0aGVyZSwgdXNlZCB0byBwdXNoIHRvCisgICAkdGhlcmUgdXNpbmcgdGhlIHVwc3RyZWFtIGluZm9ybWF0aW9uIHRvIGEgcmVtb3RlIHVucmVsYXRlZCB0bworICAgJHRoZXJlLgorCisgKiBHaXZpbmcgIi0tY29udGludWUiIHRvIGEgY29uZmxpY3RlZCAicmViYXNlIC1pIiBzZXNzaW9uIHNraXBwZWQgYQorICAgY29tbWl0IHRoYXQgb25seSByZXN1bHRzIGluIGNoYW5nZXMgdG8gc3VibW9kdWxlcy4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTdlOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuMi50eHQKQEAgLTAsMCArMSw4NSBAQAorR2l0IHYxLjcuMTAuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMC4xCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIHRlc3Qgc2NhZmZvbGRpbmcgZm9yIGdpdC1kYWVtb24gd2FzIGZsYWt5LgorCisgKiBUaGUgdGVzdCBzY2FmZm9sZGluZyBmb3IgZmFzdC1pbXBvcnQgd2FzIGZsYWt5LgorCisgKiBUaGUgZmlsZXN5c3RlbSBib3VuZGFyeSB3YXMgbm90IGNvcnJlY3RseSByZXBvcnRlZCB3aGVuIC5naXQgZGlyZWN0b3J5CisgICBkaXNjb3Zlcnkgc3RvcHBlZCBhdCBhIG1vdW50IHBvaW50LgorCisgKiBIVFRQIHRyYW5zcG9ydCB0aGF0IHJlcXVpcmVzIGF1dGhlbnRpY2F0aW9uIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgd2hlbgorICAgbXVsdGlwbGUgY29ubmVjdGlvbnMgYXJlIHVzZWQgc2ltdWx0YW5lb3VzbHkuCisKKyAqIE1pbm9yIG1lbW9yeSBsZWFrIGR1cmluZyB1bnBhY2tfdHJlZXMgKGhlbmNlICJtZXJnZSIgYW5kICJjaGVja291dCIKKyAgIHRvIGNoZWNrIG91dCBhbm90aGVyIGJyYW5jaCkgaGFzIGJlZW4gcGx1Z2dlZC4KKworICogSW4gdGhlIG9sZGVyIGRheXMsIHRoZSBoZWFkZXIgIkNvbmZsaWN0czoiIGluICJjaGVycnktcGljayIgYW5kICJtZXJnZSIKKyAgIHdhcyBzZXBhcmF0ZWQgYnkgYSBibGFuayBsaW5lIGZyb20gdGhlIGxpc3Qgb2YgcGF0aHMgdGhhdCBmb2xsb3cgZm9yCisgICByZWFkYWJpbGl0eSwgYnV0IHdoZW4gIm1lcmdlIiB3YXMgcmV3cml0dGVuIGluIEMsIHdlIGxvc3QgaXQgYnkKKyAgIG1pc3Rha2UuIFJlbW92ZSB0aGUgbmV3bGluZSBmcm9tICJjaGVycnktcGljayIgdG8gbWFrZSB0aGVtIG1hdGNoCisgICBhZ2Fpbi4KKworICogVGhlIGNvbW1hbmQgbGluZSBwYXJzZXIgY2hva2VkICJnaXQgY2hlcnJ5LXBpY2sgJG5hbWUiIHdoZW4gJG5hbWUgY2FuCisgICBiZSBib3RoIHJldmlzaW9uIG5hbWUgYW5kIGEgcGF0aG5hbWUsIGV2ZW4gdGhvdWdoICRuYW1lIGNhbiBuZXZlciBiZSBhCisgICBwYXRoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjb21tYW5kLgorCisgKiBUaGUgImluY2x1ZGUucGF0aCIgZmFjaWxpdHkgaW4gdGhlIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtIGFkZGVkIGluCisgICAxLjcuMTAgZm9yZ290IHRvIGludGVycHJldCAifi9wYXRoIiBhbmQgIn51c2VyL3BhdGgiIGFzIGl0IHNob3VsZC4KKworICogImdpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiIgdG8gcmVuYW1lIGFuIGV4aXN0aW5nIHNlY3Rpb24gaW50byBhCisgICBib2d1cyBvbmUgZGlkIG5vdCBjaGVjayB0aGUgbmV3IG5hbWUuCisKKyAqIFRoZSAiZGlmZiAtLW5vLWluZGV4IiBjb2RlcGF0aCB1c2VkIGxpbWl0ZWQtbGVuZ3RoIGJ1ZmZlcnMsIHJpc2tpbmcKKyAgIHBhdGhuYW1lcyBnZXR0aW5nIHRydW5jYXRlZC4gIFVwZGF0ZSBpdCB0byB1c2UgdGhlIHN0cmJ1ZiBBUEkuCisKKyAqIFRoZSByZXBvcnQgZnJvbSAiZ2l0IGZldGNoIiBzYWlkICJuZXcgYnJhbmNoIiBldmVuIGZvciBhIG5vbiBicmFuY2gKKyAgIHJlZi4KKworICogVGhlIGh0dHAtYmFja2VuZCAodGhlIHNlcnZlciBzaWRlIG9mIHRoZSBzbWFydCBodHRwIHRyYW5zZmVyKSB1c2VkCisgICB0byBvdmVyd3JpdGUgR0lUX0NPTU1JVFRFUl9OQU1FIGFuZCBHSVRfQ09NTUlUVEVSX0VNQUlMIHdpdGggdGhlCisgICB2YWx1ZSBvYnRhaW5lZCBmcm9tIFJFTU9URV9VU0VSIHVuY29uZGl0aW9uYWxseSwgbWFraW5nIGl0CisgICBpbXBvc3NpYmxlIGZvciB0aGUgc2VydmVyIHNpZGUgc2l0ZS1zcGVjaWZpYyBjdXN0b21pemF0aW9uIHRvIHVzZQorICAgZGlmZmVyZW50IGlkZW50aXR5IHNvdXJjZXMgdG8gYWZmZWN0IHRoZSBuYW1lcyBsb2dnZWQuIEl0IG5vdyB1c2VzCisgICBSRU1PVEVfVVNFUiBvbmx5IGFzIGEgZmFsbGJhY2sgdmFsdWUuCisKKyAqICJsb2cgLS1ncmFwaCIgd2FzIG5vdCB2ZXJ5IGZyaWVuZGx5IHdpdGggIi0tc3RhdCIgb3B0aW9uIGFuZCBpdHMKKyAgIG91dHB1dCBoYWQgbGluZSBicmVha3MgYXQgd3JvbmcgcGxhY2VzLgorCisgKiBPY3RvcHVzIG1lcmdlIHN0cmF0ZWd5IGRpZCBub3QgcmVkdWNlIGhlYWRzIHRoYXQgYXJlIHJlY29yZGVkIGluIHRoZQorICAgZmluYWwgY29tbWl0IGNvcnJlY3RseS4KKworICogImdpdCBwdXNoIiBvdmVyIHNtYXJ0LWh0dHAgbG9zdCBwcm9ncmVzcyBvdXRwdXQgYSBmZXcgcmVsZWFzZXMgYWdvOworICAgdGhpcyByZWxlYXNlIHJlc3VycmVjdHMgaXQuCisKKyAqIFRoZSBlcnJvciBhbmQgYWR2aWNlIG1lc3NhZ2VzIGdpdmVuIGJ5ICJnaXQgcHVzaCIgd2hlbiBpdCBmYWlscyBkdWUKKyAgIHRvIG5vbi1mZiB3ZXJlIG5vdCB2ZXJ5IGhlbHBmdWwgdG8gbmV3IHVzZXJzOyBpdCBoYXMgYmVlbiBicm9rZW4KKyAgIGludG8gdGhyZWUgY2FzZXMsIGFuZCBlYWNoIGlzIGdpdmVuIGEgc2VwYXJhdGUgYWR2aWNlIG1lc3NhZ2UuCisKKyAqIFRoZSBpbnNuIHNoZWV0IGdpdmVuIGJ5ICJyZWJhc2UgLWkiIGRpZCBub3QgbWFrZSBpdCBjbGVhciB0aGF0IHRoZQorICAgaW5zbiBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZCB0byBhZmZlY3QgdGhlIG9yZGVyIG9mIHRoZSBjb21taXRzIGluCisgICB0aGUgcmVzdWx0aW5nIGhpc3RvcnkuCisKKyAqICJnaXQgcmVwYWNrIiB1c2VkIHRvIHdyaXRlIG91dCB1bnJlYWNoYWJsZSBvYmplY3RzIGFzIGxvb3NlIG9iamVjdHMKKyAgIHdoZW4gcmVwYWNraW5nLCBldmVuIGlmIHN1Y2ggbG9vc2Ugb2JqZWN0cyB3aWxsIGltbWVkaWF0ZWx5IHBydW5lZAorICAgZHVlIHRvIGl0cyBhZ2UuCisKKyAqIEEgY29udHJpYiBzY3JpcHQgInJlcmVyZS10cmFpbiIgZGlkIG5vdCB3b3JrIG91dCBvZiB0aGUgYm94IHVubGVzcworICAgdXNlciBmdXR6ZWQgd2l0aCBoZXIgJFBBVEguCisKKyAqICJnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgiIHVzZWQgdG8gZW1pdCBub3RoaW5nIHdoZW4gcnVuIGF0IHRoZQorICAgdG9wLWxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUsIGJ1dCBub3cgaXQgZ2l2ZXMgYSBibGFuayBsaW5lLgorCisgKiBUaGUgaTE4biBvZiBlcnJvciBtZXNzYWdlICJnaXQgc3Rhc2ggc2F2ZSIgd2FzIG5vdCBwcm9wZXJseSBkb25lLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgdXNlZCBhIHNlZCBzY3JpcHQgdGhhdCBzb21lIHBsYXRmb3JtcyBtaXNoYW5kbGVkLgorCisgKiBXaGVuIHVzaW5nIGEgUGVybCBzY3JpcHQgb24gYSBzeXN0ZW0gd2hlcmUgInBlcmwiIGZvdW5kIG9uIHVzZXIncworICAgJFBBVEggY291bGQgYmUgYW5jaWVudCBvciBvdGhlcndpc2UgYnJva2VuLCB3ZSBhbGxvdyBidWlsZGVycyB0bworICAgc3BlY2lmeSB0aGUgcGF0aCB0byBhIGdvb2QgY29weSBvZiBQZXJsIHdpdGggJFBFUkxfUEFUSC4gIFRoZQorICAgZ2l0d2ViIHRlc3QgZm9yZ290IHRvIHVzZSB0aGF0IFBlcmwgd2hlbiBydW5uaW5nIGl0cyB0ZXN0LgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwM2ZiZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4zLnR4dApAQCAtMCwwICsxLDQzIEBACitHaXQgdjEuNy4xMC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjEwLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgbWVzc2FnZSBmaWxlIGZvciBHZXJtYW4gdHJhbnNsYXRpb24gaGFzIGJlZW4gdXBkYXRlZCBhIGJpdC4KKworICogUnVubmluZyAiZ2l0IGNoZWNrb3V0IiBvbiBhbiB1bmJvcm4gYnJhbmNoIHVzZWQgdG8gY29ycnVwdCBIRUFELgorCisgKiBXaGVuIGNoZWNraW5nIG91dCBhbm90aGVyIGNvbW1pdCBmcm9tIGFuIGFscmVhZHkgZGV0YWNoZWQgc3RhdGUsIHdlCisgICB1c2VkIHRvIHJlcG9ydCBhbGwgY29tbWl0cyB0aGF0IGFyZSBub3QgcmVhY2hhYmxlIGZyb20gYW55IG9mIHRoZQorICAgcmVmcyBhcyBsb3NzYWdlLCBidXQgc29tZSBvZiB0aGVtIG1pZ2h0IGJlIHJlYWNoYWJsZSBmcm9tIHRoZSBuZXcKKyAgIEhFQUQsIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIHdhcm4gYWJvdXQgdGhlbS4KKworICogU29tZSB0aW1lIGFnbywgImdpdCBjbG9uZSIgbG9zdCB0aGUgcHJvZ3Jlc3Mgb3V0cHV0IGZvciBpdHMKKyAgICJjaGVja291dCIgcGhhc2U7IHdoZW4gcnVuIHdpdGhvdXQgYW55ICItLXF1aWV0IiBvcHRpb24sIGl0IHNob3VsZAorICAgZ2l2ZSBwcm9ncmVzcyB0byB0aGUgbGVuZ3RoeSBvcGVyYXRpb24uCisKKyAqIFRoZSBkaXJlY3RvcnkgcGF0aCB1c2VkIGluICJnaXQgZGlmZiAtLW5vLWluZGV4Iiwgd2hlbiBpdCByZWN1cnNlcworICAgZG93biwgd2FzIGJyb2tlbiB3aXRoIGEgcmVjZW50IHVwZGF0ZSBhZnRlciB2MS43LjEwLjEgcmVsZWFzZS4KKworICogImxvZyAteiAtLXByZXR0eT10Zm9ybWF0Oi4uLiIgZGlkIG5vdCB0ZXJtaW5hdGUgZWFjaCByZWNvcmQgd2l0aAorICAgTlVMLiAgVGhlIGZpeCBpcyBub3QgZW50aXJlbHkgY29ycmVjdCB3aGVuIHRoZSBvdXRwdXQgYWxzbyBhc2tzIGZvcgorICAgLS1wYXRjaCBhbmQvb3IgLS1zdGF0LCB0aG91Z2guCisKKyAqIFRoZSBEV0lNIGJlaGF2aW91ciBmb3IgImxvZyAtLXByZXR0eT1mb3JtYXQ6JWdkIC1nIiB3YXMgc29tZXdoYXQKKyAgIGJyb2tlbiBhbmQgZ2F2ZSB1bmR1ZSBwcmVjZWRlbmNlIHRvIGNvbmZpZ3VyZWQgbG9nLmRhdGUsIGNhdXNpbmcKKyAgICJnaXQgc3Rhc2ggbGlzdCIgdG8gc2hvdyAic3Rhc2hAe3RpbWUgc3RhbXAgc3RyaW5nfSIuCisKKyAqICJnaXQgc3RhdHVzIC0tcG9yY2VsYWluIiBpZ25vcmVkICItLWJyYW5jaCIgb3B0aW9uIGJ5IG1pc3Rha2UuICBUaGUKKyAgIG91dHB1dCBmb3IgImdpdCBzdGF0dXMgLS1icmFuY2ggLXoiIHdhcyBhbHNvIGluY29ycmVjdCBhbmQgZGlkIG5vdAorICAgdGVybWluYXRlIHRoZSByZWNvcmQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCBuYW1lIHdpdGggTlVMIGFzIGFza2VkLgorCisgKiBXaGVuIGEgc3VibW9kdWxlIHJlcG9zaXRvcnkgdXNlcyBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIG1lY2hhbmlzbSwKKyAgIHNvbWUgY29tbWFuZHMgdGhhdCB3ZXJlIHN0YXJ0ZWQgZnJvbSB0aGUgc3VwZXJwcm9qZWN0IGRpZCBub3QKKyAgIG5vdGljZSBpdCBhbmQgZmFpbGVkIHdpdGggIk5vIHN1Y2ggb2JqZWN0IiBlcnJvcnMuICBUaGUgc3ViY29tbWFuZHMKKyAgIG9mICJnaXQgc3VibW9kdWxlIiBjb21tYW5kIHRoYXQgcmVjdXJzZWQgaW50byB0aGUgc3VibW9kdWxlIGluIGEKKyAgIHNlcGFyYXRlIHByb2Nlc3Mgd2VyZSBPSzsgb25seSB0aGUgb25lcyB0aGF0IGNoZWF0ZWQgYW5kIHBlZWtlZAorICAgZGlyZWN0bHkgaW50byB0aGUgc3VibW9kdWxlJ3MgcmVwb3NpdG9yeSBmcm9tIHRoZSBwcmltYXJ5IHByb2Nlc3MKKyAgIHdlcmUgYWZmZWN0ZWQuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc1OTdmMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjQudHh0CkBAIC0wLDAgKzEsMjkgQEAKK0dpdCB2MS43LjEwLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTAuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBtZXNzYWdlIGZpbGUgZm9yIFN3ZWRpc2ggdHJhbnNsYXRpb24gaGFzIGJlZW4gdXBkYXRlZCBhIGJpdC4KKworICogQSBuYW1lIHRha2VuIGZyb20gbWFpbG1hcCB3YXMgY29waWVkIGludG8gYW4gaW50ZXJuYWwgYnVmZmVyCisgICBpbmNvcnJlY3RseSBhbmQgY291bGQgb3ZlcnJ1biB0aGUgYnVmZmVyIGlmIGl0IGlzIHRvbyBsb25nLgorCisgKiBBIG1hbGZvcm1lZCBjb21taXQgb2JqZWN0IHRoYXQgaGFzIGEgaGVhZGVyIGxpbmUgY2hvbXBlZCBpbiB0aGUKKyAgIG1pZGRsZSBjb3VsZCBraWxsIGdpdCB3aXRoIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLgorCisgKiBBbiBhdXRob3IvY29tbWl0dGVyIG5hbWUgdGhhdCBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIgd2FzIG1pc2hhbmRsZWQKKyAgIGFzIGFuIGludmFsaWQgbmFtZSBieSBtaXN0YWtlLgorCisgKiBUaGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIGZvciBhIGxhcmdlICJnaXQgY2hlY2tvdXQiIHdhcyBzZW50IHRvCisgICBzdGRlcnIgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXJtaW5hbC4KKworICogImdpdCBncmVwIC1lICckcGF0dGVybiciLCB1bmxpa2UgdGhlIGNhc2Ugd2hlcmUgdGhlIHBhdHRlcm5zIGFyZQorICAgcmVhZCBmcm9tIGEgZmlsZSwgZGlkIG5vdCB0cmVhdCBpbmRpdmlkdWFsIGxpbmVzIGluIHRoZSBnaXZlbgorICAgcGF0dGVybiBhcmd1bWVudCBhcyBzZXBhcmF0ZSByZWd1bGFyIGV4cHJlc3Npb25zIGFzIGl0IHNob3VsZC4KKworICogV2hlbiAiZ2l0IHJlYmFzZSIgd2FzIGdpdmVuIGEgYmFkIGNvbW1pdCB0byByZXBsYXkgdGhlIGhpc3Rvcnkgb24sCisgICBpdHMgZXJyb3IgbWVzc2FnZSBkaWQgbm90IGNvcnJlY3RseSBnaXZlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQKKyAgIGl0IGhhZCB0cm91YmxlIHBhcnNpbmcuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiMTc3MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjUudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0dpdCB2MS43LjEwLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTAuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIGRpZCBub3QgZ2l2ZSBhIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUKKyAgIHNhbWUgbWFyayBlcnJvbmVvdXNseSBhcHBlYXJlZCB0d2ljZSBpbiB0aGUgLS1pbXBvcnQtbWFya3MgaW5wdXQuCisKKyAqICJnaXQgcmViYXNlIC1wIiB1c2VkIHRvIHBheSBhdHRlbnRpb24gdG8gcmViYXNlLmF1dG9zcXVhc2ggd2hpY2gKKyAgICB3YXMgd3JvbmcuICAiZ2l0IHJlYmFzZSAtcCAtaSIgc2hvdWxkLCBidXQgImdpdCByZWJhc2UgLXAiIGJ5CisgICAgaXRzZWxmIHNob3VsZCBub3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxMDBiZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLnR4dApAQCAtMCwwICsxLDIxOSBAQAorR2l0IHYxLjcuMTAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb21wYXRpYmlsaXR5IE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEZyb20gdGhpcyByZWxlYXNlIG9uLCB0aGUgImdpdCBtZXJnZSIgY29tbWFuZCBpbiBhbiBpbnRlcmFjdGl2ZQorICAgc2Vzc2lvbiB3aWxsIHN0YXJ0IGFuIGVkaXRvciB3aGVuIGl0IGF1dG9tYXRpY2FsbHkgcmVzb2x2ZXMgdGhlCisgICBtZXJnZSBmb3IgdGhlIHVzZXIgdG8gZXhwbGFpbiB0aGUgcmVzdWx0aW5nIGNvbW1pdCwganVzdCBsaWtlIHRoZQorICAgImdpdCBjb21taXQiIGNvbW1hbmQgZG9lcyB3aGVuIGl0IHdhc24ndCBnaXZlbiBhIGNvbW1pdCBtZXNzYWdlLgorCisgICBJZiB5b3UgaGF2ZSBhIHNjcmlwdCB0aGF0IHJ1bnMgImdpdCBtZXJnZSIgYW5kIGtlZXBzIGl0cyBzdGFuZGFyZAorICAgaW5wdXQgYW5kIG91dHB1dCBhdHRhY2hlZCB0byB0aGUgdXNlcidzIHRlcm1pbmFsLCBhbmQgaWYgeW91IGRvIG5vdAorICAgd2FudCB0aGUgdXNlciB0byBleHBsYWluIHRoZSByZXN1bHRpbmcgbWVyZ2UgY29tbWl0cywgeW91IGNhbgorICAgZXhwb3J0IEdJVF9NRVJHRV9BVVRPRURJVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXQgdG8gIm5vIiwgbGlrZQorICAgdGhpczoKKworCSMhL2Jpbi9zaAorCUdJVF9NRVJHRV9BVVRPRURJVD1ubworCWV4cG9ydCBHSVRfTUVSR0VfQVVUT0VESVQKKworICAgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yIChpZiB5b3Ugd2FudCB5b3VyIHVzZXJzIHRvIGV4cGxhaW4gdGhlaXIKKyAgIG1lcmdlIGNvbW1pdHMsIHlvdSBkbyBub3QgaGF2ZSB0byBkbyBhbnl0aGluZykuICBBbHRlcm5hdGl2ZWx5LCB5b3UKKyAgIGNhbiBnaXZlIHRoZSAiLS1uby1lZGl0IiBvcHRpb24gdG8gaW5kaXZpZHVhbCBpbnZvY2F0aW9ucyBvZiB0aGUKKyAgICJnaXQgbWVyZ2UiIGNvbW1hbmQgaWYgeW91IGtub3cgZXZlcnlib2R5IHdobyB1c2VzIHlvdXIgc2NyaXB0IGhhcworICAgR2l0IHYxLjcuOCBvciBuZXdlci4KKworICogVGhlICItLWJpbmFyeS8tYiIgb3B0aW9ucyB0byAiZ2l0IGFtIiBoYXZlIGJlZW4gYSBuby1vcCBmb3IgcXVpdGUgYQorICAgd2hpbGUgYW5kIHdlcmUgZGVwcmVjYXRlZCBpbiBtaWQgMjAwOCAodjEuNi4wKS4gIFdoZW4geW91IGdpdmUgdGhlc2UKKyAgIG9wdGlvbnMgdG8gImdpdCBhbSIsIGl0IHdpbGwgbm93IHdhcm4gYW5kIGFzayB5b3Ugbm90IHRvIHVzZSB0aGVtLgorCisgKiBXaGVuIHlvdSBkbyBub3QgdGVsbCB3aGljaCBicmFuY2hlcyBhbmQgdGFncyB0byBwdXNoIHRvIHRoZSAiZ2l0CisgICBwdXNoIiBjb21tYW5kIGluIGFueSB3YXksIHRoZSBjb21tYW5kIHVzZWQgIm1hdGNoaW5nIHJlZnMiIHJ1bGUgdG8KKyAgIHVwZGF0ZSByZW1vdGUgYnJhbmNoZXMgYW5kIHRhZ3Mgd2l0aCBicmFuY2hlcyBhbmQgdGFncyB3aXRoIHRoZQorICAgc2FtZSBuYW1lIHlvdSBsb2NhbGx5IGhhdmUuICBJbiBmdXR1cmUgdmVyc2lvbnMgb2YgR2l0LCB0aGlzIHdpbGwKKyAgIGNoYW5nZSB0byBwdXNoIG91dCBvbmx5IHlvdXIgY3VycmVudCBicmFuY2ggYWNjb3JkaW5nIHRvIGVpdGhlciB0aGUKKyAgICJ1cHN0cmVhbSIgb3IgdGhlICJjdXJyZW50IiBydWxlLiAgQWx0aG91Z2ggInVwc3RyZWFtIiBtYXkgYmUgbW9yZQorICAgcG93ZXJmdWwgb25jZSB0aGUgdXNlciB1bmRlcnN0YW5kcyBHaXQgYmV0dGVyLCB0aGUgc2VtYW50aWNzCisgICAiY3VycmVudCIgZ2l2ZXMgaXMgc2ltcGxlciBhbmQgZWFzaWVyIHRvIHVuZGVyc3RhbmQgZm9yIGJlZ2lubmVycworICAgYW5kIG1heSBiZSBhIHNhZmVyIGFuZCBiZXR0ZXIgZGVmYXVsdCBvcHRpb24uICBXZSBoYXZlbid0IGRlY2lkZWQKKyAgIHlldCB3aGljaCBvbmUgdG8gc3dpdGNoIHRvLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuNy45CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogdmFyaW91cyAiZ2l0ayIgdXBkYXRlcy4KKyAgIC0gc2hvdyB0aGUgcGF0aCB0byB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSBpbiB0aGUgd2luZG93IHRpdGxlCisgICAtIHVwZGF0ZSBwcmVmZXJlbmNlIGVkaXQgZGlhbG9nCisgICAtIGRpc3BsYXkgZmlsZSBsaXN0IGNvcnJlY3RseSB3aGVuIGRpcmVjdG9yaWVzIGFyZSBnaXZlbiBvbiBjb21tYW5kIGxpbmUKKyAgIC0gbWFrZSAiZ2l0LWRlc2NyaWJlIiBvdXRwdXQgaW4gdGhlIGxvZyBtZXNzYWdlIGludG8gYSBjbGlja2FibGUgbGluaworICAgLSBhdm9pZCBtYXRjaGluZyB0aGUgVU5JWCB0aW1lc3RhbXAgcGFydCB3aGVuIHNlYXJjaGluZyBhbGwgZmllbGRzCisgICAtIGdpdmUgcHJlZmVyZW5jZSB0byBzeW1ib2xpYyBmb250IG5hbWVzIGxpa2Ugc2FucyAmIG1vbm9zcGFjZQorICAgLSBhbGxvdyBjb21wYXJpbmcgdHdvIGNvbW1pdHMgdXNpbmcgYSBtYXJrCisgICAtICJnaXRrIiBob25vcnMgbG9nLnNob3dyb290IGNvbmZpZ3VyYXRpb24uCisKKyAqIFRlYW1zIGZvciBsb2NhbGl6aW5nIHRoZSBtZXNzYWdlcyBmcm9tIHRoZSBQb3JjZWxhaW4gbGF5ZXIgb2YKKyAgIGNvbW1hbmRzIGFyZSBzdGFydGluZyB0byBmb3JtLCB0aGFua3MgdG8gSmlhbmcgWGluIHdobyB2b2x1bnRlZXJlZAorICAgdG8gYmUgdGhlIGxvY2FsaXphdGlvbiBjb29yZGluYXRvci4gIFRyYW5zbGF0ZWQgbWVzc2FnZXMgZm9yCisgICBzaW1wbGlmaWVkIENoaW5lc2UsIFN3ZWRpc2ggYW5kIFBvcnR1Z3Vlc2UgYXJlIGF2YWlsYWJsZS4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtIGxlYXJuZWQgYW4gImluY2x1ZGUiIGZhY2lsaXR5OyBhbgorICAgYXNzaWdubWVudCB0byB0aGUgaW5jbHVkZS5wYXRoIHBzZXVkby12YXJpYWJsZSBjYXVzZXMgdGhlIG5hbWVkCisgICBmaWxlIHRvIGJlIGluY2x1ZGVkIGluLXBsYWNlIHdoZW4gR2l0IGxvb2tzIHVwIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlcy4KKworICogQSBjb250ZW50IGZpbHRlciAoY2xlYW4vc211ZGdlKSB1c2VkIHRvIGJlIGp1c3QgYSB3YXkgdG8gbWFrZSB0aGUKKyAgIHJlY29yZGVkIGNvbnRlbnRzICJtb3JlIHVzZWZ1bCIsIGFuZCBhbGxvd2VkIHRvIGZhaWw7IGEgZmlsdGVyIGNhbgorICAgbm93IG9wdGlvbmFsbHkgYmUgbWFya2VkIGFzICJyZXF1aXJlZCIuCisKKyAqIE9wdGlvbnMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCAiLS1uby0iIChlLmcuIHRoZSAiLS1uby12ZXJpZnkiCisgICBvcHRpb24gb2YgdGhlICJnaXQgY29tbWl0IiBjb21tYW5kKSBjYW4gYmUgbmVnYXRlZCBieSBvbWl0dGluZworICAgIm5vLSIgZnJvbSBpdHMgbmFtZSwgZS5nLiAiZ2l0IGNvbW1pdCAtLXZlcmlmeSIuCisKKyAqICJnaXQgYW0iIGxlYXJuZWQgdG8gcGFzcyAiLWIiIG9wdGlvbiB0byB1bmRlcmx5aW5nICJnaXQgbWFpbGluZm8iLCBzbworICAgdGhhdCBhIGJyYWNrZXRlZCBzdHJpbmcgb3RoZXIgdGhhbiAiUEFUQ0giIGF0IHRoZSBiZWdpbm5pbmcgY2FuIGJlIGtlcHQuCisKKyAqICJnaXQgY2xvbmUiIGxlYXJuZWQgIi0tc2luZ2xlLWJyYW5jaCIgb3B0aW9uIHRvIGxpbWl0IGNsb25pbmcgdG8gYQorICAgc2luZ2xlIGJyYW5jaCAoc3VycHJpc2UhKTsgdGFncyB0aGF0IGRvIG5vdCBwb2ludCBpbnRvIHRoZSBoaXN0b3J5CisgICBvZiB0aGUgYnJhbmNoIGFyZSBub3QgZmV0Y2hlZC4KKworICogImdpdCBjbG9uZSIgbGVhcm5lZCB0byBkZXRhY2ggdGhlIEhFQUQgaW4gdGhlIHJlc3VsdGluZyByZXBvc2l0b3J5CisgICB3aGVuIHRoZSB1c2VyIHNwZWNpZmllcyBhIHRhZyB3aXRoICItLWJyYW5jaCIgKGUuZy4sICItLWJyYW5jaD12MS4wIikuCisgICBDbG9uZSBhbHNvIGxlYXJuZWQgdG8gcHJpbnQgdGhlIHVzdWFsICJkZXRhY2hlZCBIRUFEIiBhZHZpY2UgaW4gc3VjaAorICAgYSBjYXNlLCBzaW1pbGFyIHRvICJnaXQgY2hlY2tvdXQgdjEuMCIuCisKKyAqIFdoZW4gc2hvd2luZyBhIHBhdGNoIHdoaWxlIGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcywgdGhlIGNvbnRleHQKKyAgIGxpbmVzIGFyZSB0YWtlbiBmcm9tIHRoZSBwb3N0aW1hZ2UsIGluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIHRvCisgICB2aWV3IHRoZSBvdXRwdXQuCisKKyAqICJnaXQgZGlmZiAtLXN0YXQiIGxlYXJuZWQgdG8gYWRqdXN0IHRoZSB3aWR0aCBvZiB0aGUgb3V0cHV0IG9uCisgICB3aWRlciB0ZXJtaW5hbHMsIGFuZCBnaXZlIG1vcmUgY29sdW1ucyB0byBwYXRobmFtZXMgYXMgbmVlZGVkLgorCisgKiAiZGlmZi1oaWdobGlnaHQiIGZpbHRlciAoaW4gY29udHJpYi8pIHdhcyB1cGRhdGVkIHRvIHByb2R1Y2UgbW9yZQorICAgYWVzdGhldGljYWxseSBwbGVhc2luZyBvdXRwdXQuCisKKyAqICJmc2NrIiBsZWFybmVkICItLW5vLWRhbmdsaW5nIiBvcHRpb24gdG8gb21pdCBkYW5nbGluZyBvYmplY3QKKyAgIGluZm9ybWF0aW9uLgorCisgKiAiZ2l0IGxvZyAtRyIgYW5kICJnaXQgbG9nIC1TIiBsZWFybmVkIHRvIHBheSBhdHRlbnRpb24gdG8gdGhlICItaSIKKyAgIG9wdGlvbi4gIFdpdGggIi1pIiwgImxvZyAtRyIgaWdub3JlcyB0aGUgY2FzZSB3aGVuIGZpbmRpbmcgcGF0Y2gKKyAgIGh1bmtzIHRoYXQgaW50cm9kdWNlIG9yIHJlbW92ZSBhIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuCisgICBwYXR0ZXJuLiAgU2ltaWxhcmx5IHdpdGggIi1pIiwgImxvZyAtUyIgaWdub3JlcyB0aGUgY2FzZSB3aGVuCisgICBmaW5kaW5nIHRoZSBjb21taXQgdGhlIGdpdmVuIGJsb2NrIG9mIHRleHQgYXBwZWFycyBvciBkaXNhcHBlYXJzCisgICBmcm9tIHRoZSBmaWxlLgorCisgKiAiZ2l0IG1lcmdlIiBpbiBhbiBpbnRlcmFjdGl2ZSBzZXNzaW9uIGxlYXJuZWQgdG8gc3Bhd24gdGhlIGVkaXRvcgorICAgYnkgZGVmYXVsdCB0byBsZXQgdGhlIHVzZXIgZWRpdCB0aGUgYXV0by1nZW5lcmF0ZWQgbWVyZ2UgbWVzc2FnZSwKKyAgIHRvIGVuY291cmFnZSBwZW9wbGUgdG8gZXhwbGFpbiB0aGVpciBtZXJnZXMgYmV0dGVyLiBMZWdhY3kgc2NyaXB0cworICAgY2FuIGV4cG9ydCBHSVRfTUVSR0VfQVVUT0VESVQ9bm8gdG8gcmV0YWluIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yLgorICAgQm90aCAiZ2l0IG1lcmdlIiBhbmQgImdpdCBwdWxsIiBjYW4gYmUgZ2l2ZW4gLS1uby1lZGl0IGZyb20gdGhlCisgICBjb21tYW5kIGxpbmUgdG8gYWNjZXB0IHRoZSBhdXRvLWdlbmVyYXRlZCBtZXJnZSBtZXNzYWdlLgorCisgKiBUaGUgYWR2aWNlIG1lc3NhZ2UgZ2l2ZW4gd2hlbiB0aGUgdXNlciBkaWRuJ3QgZ2l2ZSBlbm91Z2ggY2x1ZSBvbgorICAgd2hhdCB0byBtZXJnZSB0byAiZ2l0IHB1bGwiIGFuZCAiZ2l0IG1lcmdlIiBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBiZSBtb3JlIGNvbmNpc2UgYW5kIGVhc2llciB0byB1bmRlcnN0YW5kLgorCisgKiAiZ2l0IHB1c2giIGxlYXJuZWQgdGhlICItLXBydW5lIiBvcHRpb24sIHNpbWlsYXIgdG8gImdpdCBmZXRjaCIuCisKKyAqIFRoZSB3aG9sZSBkaXJlY3RvcnkgdGhhdCBob3VzZXMgYSB0b3AtbGV2ZWwgc3VwZXJwcm9qZWN0IG1hbmFnZWQgYnkKKyAgICJnaXQgc3VibW9kdWxlIiBjYW4gYmUgbW92ZWQgdG8gYW5vdGhlciBwbGFjZS4KKworICogImdpdCBzeW1ib2xpYy1yZWYiIGxlYXJuZWQgdGhlICItLXNob3J0IiBvcHRpb24gdG8gYWJicmV2aWF0ZSB0aGUKKyAgIHJlZm5hbWUgaXQgc2hvd3MgdW5hbWJpZ3VvdXNseS4KKworICogImdpdCB0YWcgLS1saXN0IiBjYW4gYmUgZ2l2ZW4gIi0tcG9pbnRzLWF0IDxvYmplY3Q+IiB0byBsaW1pdCBpdHMKKyAgIG91dHB1dCB0byB0aG9zZSB0aGF0IHBvaW50IGF0IHRoZSBnaXZlbiBvYmplY3QuCisKKyAqICJnaXR3ZWIiIGFsbG93cyBpbnRlcm1lZGlhdGUgZW50cmllcyBpbiB0aGUgZGlyZWN0b3J5IGhpZXJhcmNoeQorICAgdGhhdCBsZWFkcyB0byBhIHByb2plY3QgdG8gYmUgY2xpY2tlZCwgd2hpY2ggaW4gdHVybiBzaG93cyB0aGUKKyAgIGxpc3Qgb2YgcHJvamVjdHMgaW5zaWRlIHRoYXQgZGlyZWN0b3J5LgorCisgKiAiZ2l0d2ViIiBsZWFybmVkIHRvIHJlYWQgdmFyaW91cyBwaWVjZXMgb2YgaW5mb3JtYXRpb24gZm9yIHRoZQorICAgcmVwb3NpdG9yaWVzIGxhemlseSwgaW5zdGVhZCBvZiByZWFkaW5nIGV2ZXJ5dGhpbmcgdGhhdCBjb3VsZCBiZQorICAgbmVlZGVkIChpbmNsdWRpbmcgdGhlIG9uZXMgdGhhdCBhcmUgbm90IG5lY2Vzc2FyeSBmb3IgYSBzcGVjaWZpYworICAgdGFzaykuCisKKyAqIFByb2plY3Qgc2VhcmNoIGluICJnaXR3ZWIiIHNob3dzIHRoZSBzdWJzdHJpbmcgdGhhdCBtYXRjaGVkIGluIHRoZQorICAgcHJvamVjdCBuYW1lIGFuZCBkZXNjcmlwdGlvbiBoaWdobGlnaHRlZC4KKworICogSFRUUCB0cmFuc3BvcnQgbGVhcm5lZCB0byBhdXRoZW50aWNhdGUgd2l0aCBhIHByb3h5IGlmIG5lZWRlZC4KKworICogQSBuZXcgc2NyaXB0ICJkaWZmYWxsIiBpcyBhZGRlZCB0byBjb250cmliLzsgaXQgZHJpdmVzIGFuCisgICBleHRlcm5hbCB0b29sIHRvIHBlcmZvcm0gYSBkaXJlY3RvcnkgZGlmZiBvZiB0d28gR2l0IHJldmlzaW9ucworICAgaW4gb25lIGdvLCB1bmxpa2UgImRpZmZ0b29sIiB0aGF0IGNvbXBhcmVzIG9uZSBmaWxlIGF0IGEgdGltZS4KKworRm9yZWlnbiBJbnRlcmZhY2UKKworICogSW1wcm92ZWQgaGFuZGxpbmcgb2Ygdmlld3MsIGxhYmVscyBhbmQgYnJhbmNoZXMgaW4gImdpdC1wNCIgKGluIGNvbnRyaWIpLgorCisgKiAiZ2l0LXA0IiAoaW4gY29udHJpYikgc3VmZmVyZWQgZnJvbSB1bm5lY2Vzc2FyeSBtZXJnZSBjb25mbGljdHMgd2hlbgorICAgcDQgZXhwYW5kZWQgdGhlIGVtYmVkZGVkICRSQ1MkLWxpa2Uga2V5d29yZHM7IGl0IGNhbiBiZSBub3cgdG9sZCB0bworICAgdW5leHBhbmQgdGhlbS4KKworICogU29tZSAiZ2l0LXN2biIgdXBkYXRlcy4KKworICogInZjcy1zdm4iLyJzdm4tZmUiIGxlYXJuZWQgdG8gcmVhZCBkdW1wcyB3aXRoIHN2bi1kZWx0YXMgYW5kCisgICBzdXBwb3J0IGluY3JlbWVudGFsIGltcG9ydHMuCisKKyAqICJnaXQgZGlmZnRvb2wvbWVyZ2V0b29sIiBsZWFybmVkIHRvIGRyaXZlIERlbHRhV2Fsa2VyLgorCitQZXJmb3JtYW5jZQorCisgKiBVbm5lY2Vzc2FyeSBjYWxscyB0byBwYXJzZV9vYmplY3QoKSAiZ2l0IHVwbG9hZC1wYWNrIiBtYWtlcyBpbgorICAgcmVzcG9uc2UgdG8gImdpdCBmZXRjaCIsIGhhdmUgYmVlbiBlbGltaW5hdGVkLCB0byBoZWxwIHBlcmZvcm1hbmNlCisgICBpbiByZXBvc2l0b3JpZXMgd2l0aCBleGNlc3NpdmUgbnVtYmVyIG9mIHJlZnMuCisKK0ludGVybmFsIEltcGxlbWVudGF0aW9uIChwbGVhc2UgcmVwb3J0IHBvc3NpYmxlIHJlZ3Jlc3Npb25zKQorCisgKiBSZWN1cnNpdmUgY2FsbCBjaGFpbnMgaW4gImdpdCBpbmRleC1wYWNrIiB0byBkZWFsIHdpdGggbG9uZyBkZWx0YQorICAgY2hhaW5zIGhhdmUgYmVlbiBmbGF0dGVuZWQsIHRvIHJlZHVjZSB0aGUgc3RhY2sgZm9vdHByaW50LgorCisgKiBVc2Ugb2YgYWRkX2V4dHJhX3JlZigpIEFQSSBpcyBub3cgZ29uZSwgdG8gbWFrZSBpdCBwb3NzaWJsZSB0bworICAgY2xlYW5seSByZXN0cnVjdHVyZSB0aGUgb3ZlcmFsbCByZWZzIEFQSS4KKworICogVGhlIGNvbW1hbmQgbGluZSBwYXJzZXIgb2YgImdpdCBwYWNrLW9iamVjdHMiIG5vdyB1c2VzIHBhcnNlLW9wdGlvbnMKKyAgIEFQSS4KKworICogVGhlIHRlc3Qgc3VpdGUgc3VwcG9ydHMgdGhlIG5ldyAidGVzdF9wYXVzZSIgaGVscGVyIGZ1bmN0aW9uLgorCisgKiBQYXJhbGxlbCB0byB0aGUgdGVzdCBzdWl0ZSwgdGhlcmUgaXMgYSBiZWdpbm5pbmcgb2YgcGVyZm9ybWFuY2UKKyAgIGJlbmNobWFya2luZyBmcmFtZXdvcmsuCisKKyAqIHQvTWFrZWZpbGUgaXMgYWRqdXN0ZWQgdG8gcHJldmVudCBuZXdlciB2ZXJzaW9ucyBvZiBHTlUgbWFrZSBmcm9tCisgICBydW5uaW5nIHRlc3RzIGluIHNlZW1pbmdseSByYW5kb20gb3JkZXIuCisKKyAqIFRoZSBjb2RlIHRvIGNoZWNrIGlmIGEgcGF0aCBwb2ludHMgYXQgYSBmaWxlIGJleW9uZCBhIHN5bWJvbGljIGxpbmsKKyAgIGhhcyBiZWVuIHJlc3RydWN0dXJlZCB0byBiZSB0aHJlYWQtc2FmZS4KKworICogV2hlbiBwcnVuaW5nIGRpcmVjdG9yaWVzIHRoYXQgaGFzIGJlY29tZSBlbXB0eSBkdXJpbmcgImdpdCBwcnVuZSIKKyAgIGFuZCAiZ2l0IHBydW5lLXBhY2tlZCIsIGNhbGwgY2xvc2VkaXIoKSB0aGF0IGl0ZXJhdGVzIG92ZXIgYQorICAgZGlyZWN0b3J5IGJlZm9yZSBybWRpcigpIGl0LgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuNy45CistLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS43LjkgaW4gdGhlIG1haW50ZW5hbmNlCityZWxlYXNlcyBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMgdG8gdGhlbSBmb3IKK2RldGFpbHMpLgorCisgKiBCdWlsZCB3aXRoIE5PX1BFUkxfTUFLRU1BS0VSIHdhcyBicm9rZW4gYW5kIEdpdDo6STE4TiBkaWQgbm90IHdvcmsKKyAgIHdpdGggdmVyc2lvbnMgb2YgUGVybCBvbGRlciB0aGFuIDUuOC4zLgorICAgKG1lcmdlIDVlYjY2MGUgYWIvcGVybC1pMThuIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCB0YWcgLXMiIGhvbm9yZWQgImdwZy5wcm9ncmFtIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHNpbmNlCisgICAxLjcuOSwgYnV0ICJnaXQgdGFnIC12IiBhbmQgImdpdCB2ZXJpZnktdGFnIiBkaWRuJ3QuCisgICAobWVyZ2UgYTJjMjUwNiBhei92ZXJpZnktdGFnLXVzZS1ncGctY29uZmlnIGxhdGVyIHRvIG1haW50KS4KKworICogImNvbmZpZ3VyZSIgc2NyaXB0IGxlYXJuZWQgdG8gdGFrZSAiLS13aXRoLXNhbmUtdG9vbC1wYXRoIiBmcm9tIHRoZQorICAgY29tbWFuZCBsaW5lIHRvIHJlY29yZCBTQU5FX1RPT0xfUEFUSCAodXNlZCB0byBhdm9pZCBicm9rZW4gcGxhdGZvcm0KKyAgIHRvb2xzIGluIC91c3IvYmluKSBpbiBjb25maWcubWFrLmF1dG9nZW4uICBUaGlzIG1heSBiZSB1c2VmdWwgZm9yCisgICBwZW9wbGUgb24gU29sYXJpcyB3aG8gaGF2ZSBzYW5lciB0b29scyBvdXRzaWRlIC91c3IveHBnWzQ2XS9iaW4uCisKKyAqIHpzaCBwb3J0IG9mIGJhc2ggY29tcGxldGlvbiBzY3JpcHQgbmVlZGVkIGFub3RoZXIgd29ya2Fyb3VuZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3ZWNjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjEudHh0CkBAIC0wLDAgKzEsOSBAQAorR2l0IHYxLjcuMTEuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgY3Jvc3MgbGlua3MgaW4gdGhlIEhUTUwgdmVyc2lvbiBvZiBtYW51YWwgcGFnZXMgd2VyZSBicm9rZW4uCisKK0Fsc28gY29udGFpbnMgbWlub3IgdHlwb2ZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwY2ZkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS4yLnR4dApAQCAtMCwwICsxLDUzIEBACitHaXQgdjEuNy4xMS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjExLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBPbiBDeWd3aW4sIHRoZSBwbGF0Zm9ybSBwcmVhZCgyKSBpcyBub3QgdGhyZWFkIHNhZmUsIGp1c3QgbGlrZSBvdXIKKyAgIG93biBjb21wYXQvIGVtdWxhdGlvbiwgYW5kIGNhbm5vdCBiZSB1c2VkIGluIHRoZSBpbmRleC1wYWNrCisgICBwcm9ncmFtLiAgTWFrZWZpbGUgdmFyaWFibGUgTk9fVEhSRUFEX1NBRkVfUFJFQUQgY2FuIGJlIGRlZmluZWQgdG8KKyAgIGF2b2lkIHVzZSBvZiB0aGlzIGZ1bmN0aW9uIGluIGEgdGhyZWFkZWQgcHJvZ3JhbS4KKworICogImdpdCBhZGQiIGFsbG93cyBhZGRpbmcgYSByZWd1bGFyIGZpbGUgdG8gdGhlIHBhdGggd2hlcmUgYQorICAgc3VibW9kdWxlIHVzZWQgdG8gZXhpc3QsIGJ1dCAiZ2l0IHVwZGF0ZS1pbmRleCIgZG9lcyBub3QgYWxsb3cgYW4KKyAgIGVxdWl2YWxlbnQgb3BlcmF0aW9uIHRvIFBvcmNlbGFpbiB3cml0ZXJzLgorCisgKiAiZ2l0IGFyY2hpdmUiIGluY29ycmVjdGx5IGNvbXB1dGVkIHRoZSBoZWFkZXIgY2hlY2tzdW07IHRoZSBzeW1wdG9tCisgICB3YXMgb2JzZXJ2ZWQgb25seSB3aGVuIHVzaW5nIHBhdGhuYW1lcyB3aXRoIGhpLWJpdCBzZXQuCisKKyAqICJnaXQgYmxhbWUiIGRpZCBub3QgdHJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhYmJyZXZpYXRlZCBjb21taXQKKyAgIG9iamVjdCBuYW1lcyBpbiBpdHMgb3V0cHV0IGFyZSB1bmlxdWUuCisKKyAqIFJ1bm5pbmcgImdpdCBidW5kbGUgdmVyaWZ5IiBvbiBhIGJ1bmRsZSB0aGF0IHJlY29yZHMgYSBjb21wbGV0ZQorICAgaGlzdG9yeSBzYWlkICJpdCByZXF1aXJlcyB0aGVzZSAwIGNvbW1pdHMiLgorCisgKiAiZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCIgdG8gY2xvbmUgYSBzaW5nbGUgYnJhbmNoIGRpZCBub3QgbGltaXQKKyAgIHRoZSBjbG9uaW5nIHRvIHRoZSBzcGVjaWZpZWQgYnJhbmNoLgorCisgKiAiZ2l0IGRpZmYgLS1uby1pbmRleCIgZGlkIG5vdCBjb3JyZWN0bHkgaGFuZGxlIHJlbGF0aXZlIHBhdGhzIGFuZAorICAgZGlkIG5vdCBjb3JyZWN0bHkgZ2l2ZSBleGl0IGNvZGVzIHdoZW4gcnVuIHVuZGVyICItLXF1aWV0IiBvcHRpb24uCisKKyAqICJnaXQgZGlmZiAtLW5vLWluZGV4IiBkaWQgbm90IHdvcmsgd2l0aCBwYWdlcnMgY29ycmVjdGx5LgorCisgKiAiZ2l0IGRpZmYgQ09QWUlORyBIRUFEOkNPUFlJTkciIGdhdmUgYSBub25zZW5zZSBlcnJvciBtZXNzYWdlIHRoYXQKKyAgIGNsYWltZWQgdGhhdCB0aGUgdHJlZS1pc2ggSEVBRCBkaWQgbm90IGhhdmUgQ09QWUlORyBpbiBpdC4KKworICogV2hlbiAiZ2l0IGxvZyIgZ2V0cyAiLS1zaW1wbGlmeS1tZXJnZXMvYnktZGVjb3JhdGlvbiIgdG9nZXRoZXIgd2l0aAorICAgIi0tZmlyc3QtcGFyZW50IiwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZXNlIG9wdGlvbnMgbWFrZXMgdGhlCisgICBzaW1wbGlmaWNhdGlvbiBsb2dpYyB0byB1c2UgaW4tY29yZSBjb21taXQgb2JqZWN0cyB0aGF0IGhhdmVuJ3QKKyAgIGJlZW4gZXhhbWluZWQgZm9yIHJlbGV2YW5jZSwgZWl0aGVyIHByb2R1Y2luZyBpbmNvcnJlY3QgcmVzdWx0IG9yCisgICB0YWtpbmcgdG9vIGxvbmcgdG8gcHJvZHVjZSBhbnkgb3V0cHV0LiAgVGVhY2ggdGhlIHNpbXBsaWZpY2F0aW9uCisgICBsb2dpYyB0byBpZ25vcmUgY29tbWl0cyB0aGF0IHRoZSBmaXJzdC1wYXJlbnQgdHJhdmVyc2FsIGxvZ2ljCisgICBpZ25vcmVkIHdoZW4gYm90aCBhcmUgaW4gZWZmZWN0IHRvIHdvcmsgYXJvdW5kIHRoZSBpc3N1ZS4KKworICogImdpdCBscy1maWxlcyAtLWV4Y2x1ZGU9dCAtaSIgZGlkIG5vdCBjb25zaWRlciBhbnl0aGluZyB1bmRlciB0LyBhcworICAgZXhjbHVkZWQsIGFzIGl0IGRpZCBub3QgcGF5IGF0dGVudGlvbiB0byBleGNsdXNpb24gb2YgbGVhZGluZyBwYXRocworICAgd2hpbGUgd2Fsa2luZyB0aGUgaW5kZXguICBPdGhlciB0d28gdXNlcnMgb2YgZXhjbHVkZWQoKSBhcmUgYWxzbworICAgdXBkYXRlZC4KKworICogImdpdCByZXF1ZXN0LXB1bGwgJHVybCBkZXYiIHdoZW4gdGhlIHRpcCBvZiAiZGV2IiBicmFuY2ggd2FzIHRhZ2dlZAorICAgd2l0aCAiZXh0NC1mb3ItbGludXMiIHVzZWQgdGhlIGNvbnRlbnRzIGZyb20gdGhlIHRhZyBpbiB0aGUgb3V0cHV0CisgICBidXQgc3RpbGwgYXNrZWQgdGhlICJkZXYiIGJyYW5jaCB0byBiZSBwdWxsZWQsIG5vdCB0aGUgdGFnLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIHR5cG9maXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDQ5NGY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuMy50eHQKQEAgLTAsMCArMSw1MyBAQAorR2l0IHYxLjcuMTEuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGVycm9yIG1lc3NhZ2UgZnJvbSAiZ2l0IHB1c2ggJHRoZXJlIDpib2dvIiAoYW5kIGl0cyBlcXVpdmFsZW50CisgICAiZ2l0IHB1c2ggJHRoZXJlIC0tZGVsZXRlIGJvZ28iKSBtZW50aW9uZWQgdGhhdCB3ZSB0cmllZCBhbmQgZmFpbGVkCisgICB0byBndWVzcyB3aGF0IHJlZiBpcyBiZWluZyBkZWxldGVkIGJhc2VkIG9uIHRoZSBMSFMgb2YgdGhlIHJlZnNwZWMsCisgICB3aGljaCB3ZSBkb24ndC4KKworICogQSBoYW5kZnVsIG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB3ZSBjcmVhdGUgaGFkIHRpZ2h0ZXIgdGhhbgorICAgbmVjZXNzYXJ5IHBlcm1pc3Npb24gYml0cyB3aGVuIHRoZSB1c2VyIHdhbnRlZCB0byBoYXZlIGdyb3VwCisgICB3cml0YWJpbGl0eSAoZS5nLiBieSBzZXR0aW5nICJ1bWFzayAwMDIiKS4KKworICogImNvbW1pdCAtLWFtZW5kIiB1c2VkIHRvIHJlZnVzZSBhbWVuZGluZyBhIGNvbW1pdCB3aXRoIGFuIGVtcHR5IGxvZworICAgbWVzc2FnZSwgd2l0aCBvciB3aXRob3V0ICItLWFsbG93LWVtcHR5LW1lc3NhZ2UiLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFtZW5kIC0tb25seSAtLSIgd2FzIG1lYW50IHRvIGFsbG93ICJDbGV2ZXIiIHBlb3BsZSB0bworICAgcmV3cml0ZSB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aG91dCBtYWtpbmcgYW55IGNoYW5nZSBldmVuIHdoZW4gdGhleQorICAgaGF2ZSBhbHJlYWR5IGNoYW5nZXMgZm9yIHRoZSBuZXh0IGNvbW1pdCBhZGRlZCB0byB0aGVpciBpbmRleCwgYnV0CisgICBpdCBuZXZlciB3b3JrZWQgYXMgYWR2ZXJ0aXNlZCBzaW5jZSBpdCB3YXMgaW50cm9kdWNlZCBpbiAxLjMuMCBlcmEuCisKKyAqIEV2ZW4gdGhvdWdoIHRoZSBpbmRleCBjYW4gcmVjb3JkIHBhdGhuYW1lcyBsb25nZXIgdGhhbiAxPDwxMiBieXRlcywKKyAgIGluIHNvbWUgcGxhY2VzIHdlIHdlcmUgbm90IGNvbXBhcmluZyB0aGVtIGluIGZ1bGwsIHBvdGVudGlhbGx5CisgICByZXBsYWNpbmcgaW5kZXggZW50cmllcyBpbnN0ZWFkIG9mIGFkZGluZy4KKworICogImdpdCBzaG93IidzIGF1dG8td2Fsa2luZyBiZWhhdmlvdXIgd2FzIGFuIHVucmVsaWFibGUgYW5kCisgICB1bnByZWRpY3RhYmxlIGhhY2s7IGl0IG5vdyBiZWhhdmVzIGp1c3QgbGlrZSAiZ2l0IGxvZyIgZG9lcyB3aGVuIGl0CisgICB3YWxrcy4KKworICogImdpdCBkaWZmIiwgImdpdCBzdGF0dXMiIGFuZCBhbnl0aGluZyB0aGF0IGludGVybmFsbHkgdXNlcyB0aGUKKyAgIGNvbXBhcmlzb24gbWFjaGluZXJ5IHdhcyB1dHRlcmx5IGJyb2tlbiB3aGVuIHRoZSBkaWZmZXJlbmNlCisgICBpbnZvbHZlZCBhIGZpbGUgd2l0aCAiLSIgYXMgaXRzIG5hbWUuICBUaGlzIHdhcyBkdWUgdG8gdGhlIHdheSAiZ2l0CisgICBkaWZmIC0tbm8taW5kZXgiIHdhcyBpbmNvcnJlY3RseSBib2x0ZWQgb24gdG8gdGhlIHN5c3RlbSwgbWFraW5nCisgICBhbnkgY29tcGFyaXNvbiB0aGF0IGludm9sdmVzIGEgZmlsZSAiLSIgYXQgdGhlIHJvb3QgbGV2ZWwKKyAgIGluY29ycmVjdGx5IHJlYWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuCisKKyAqIFdlIGRpZCBub3QgaGF2ZSB0ZXN0IHRvIG1ha2Ugc3VyZSAiZ2l0IHJlYmFzZSIgd2l0aG91dCBleHRyYSBvcHRpb25zCisgICBmaWx0ZXJzIG91dCBhbiBlbXB0eSBjb21taXQgaW4gdGhlIG9yaWdpbmFsIGhpc3RvcnkuCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIHByb2R1Y2VkIGFuIGlucHV0IHN0cmVhbSBmb3IgZmFzdC1pbXBvcnQgd2l0aG91dAorICAgcHJvcGVybHkgcXVvdGluZyBwYXRobmFtZXMgd2hlbiB0aGV5IGNvbnRhaW4gU1BzIGluIHRoZW0uCisKKyAqICJnaXQgY2hlY2tvdXQgLS1kZXRhY2giLCB3aGVuIHlvdSBhcmUgc3RpbGwgb24gYW4gdW5ib3JuIGJyYW5jaCwKKyAgIHNob3VsZCBiZSBmb3JiaWRkZW4sIGJ1dCBpdCB3YXNuJ3QuCisKKyAqIFNvbWUgaW1wbGVtZW50YXRpb25zIG9mIFBlcmwgdGVybWluYXRlcyAibGluZXMiIHdpdGggQ1JMRiBldmVuIHdoZW4KKyAgIHRoZSBzY3JpcHQgaXMgb3BlcmF0aW5nIG9uIGp1c3QgYSBzZXF1ZW5jZSBvZiBieXRlcy4gIE1ha2Ugc3VyZSB0bworICAgdXNlICIkUEVSTF9QQVRIIiwgdGhlIHZlcnNpb24gb2YgUGVybCB0aGUgdXNlciB0b2xkIEdpdCB0byB1c2UsIGluCisgICBvdXIgdGVzdHMgdG8gYXZvaWQgdW5uZWNlc3NhcnkgYnJlYWthZ2VzIGluIHRlc3RzLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIHR5cG9maXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTY0MGMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNC50eHQKQEAgLTAsMCArMSwzMSBAQAorR2l0IHYxLjcuMTEuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogIiRHSVRfRElSL0NPTU1JVF9FRElUTVNHIiBmaWxlIHRoYXQgaXMgdXNlZCB0byBob2xkIHRoZSBjb21taXQgbG9nCisgICBtZXNzYWdlIHVzZXIgZWRpdHMgd2FzIG5vdCBkb2N1bWVudGVkLgorCisgKiBUaGUgYWR2aXNlKCkgZnVuY3Rpb24gZGlkIG5vdCB1c2UgdmFyYXJncyBjb3JyZWN0bHkgdG8gZm9ybWF0CisgICBpdHMgbWVzc2FnZS4KKworICogV2hlbiAiZ2l0IGFtIiBmYWlsZWQsIG9sZCB0aW1lcnMga25ldyB0byBjaGVjayAuZ2l0L3JlYmFzZS1hcHBseS9wYXRjaAorICAgdG8gc2VlIHdoYXQgd2VudCB3cm9uZywgYnV0IHdlIG5ldmVyIHRvbGQgdGhlIHVzZXJzIGFib3V0IGl0LgorCisgKiAiZ2l0IGNvbW1pdC10cmVlIiBsZWFybmVkIGEgbW9yZSBuYXR1cmFsICItcCA8cGFyZW50PiA8dHJlZT4iIG9yZGVyCisgICBvZiBhcmd1bWVudHMgbG9uZyB0aW1lIGFnbywgYnV0IHJlY2VudGx5IGZvcmdvdCBpdCBieSBtaXN0YWtlLgorCisgKiAiZ2l0IGRpZmYgLS1uby1leHQtZGlmZiIgZGlkIG5vdCBvdXRwdXQgYW55dGhpbmcgZm9yIGEgdHlwZWNoYW5nZQorICAgZmlsZXBhaXIgd2hlbiBHSVRfRVhURVJOQUxfRElGRiBpcyBpbiBlZmZlY3QuCisKKyAqIEluIDEuNy45IGVyYSwgd2UgdGF1Z2h0ICJnaXQgcmViYXNlIiBhYm91dCB0aGUgcmF3IHRpbWVzdGFtcCBmb3JtYXQKKyAgIGJ1dCB3ZSBkaWQgbm90IHRlYWNoIHRoZSBzYW1lIHRyaWNrIHRvICJmaWx0ZXItYnJhbmNoIiwgd2hpY2ggcm9sbGVkCisgICBhIHNpbWlsYXIgbG9naWMgb24gaXRzIG93bi4KKworICogV2hlbiAiZ2l0IHN1Ym1vZHVsZSBhZGQiIGNsb25lcyBhIHN1Ym1vZHVsZSByZXBvc2l0b3J5LCBpdCBjYW4gZ2V0CisgICBjb25mdXNlZCB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0aW5nIHN1Ym1vZHVsZSByZXBvc2l0b3J5IGluIHRoZQorICAgc3VwZXJwcm9qZWN0J3MgLmdpdC8gZGlyZWN0b3J5IHdoZW4gdGhlcmUgaXMgYSBzeW1ib2xpYyBsaW5rIGluIHRoZQorICAgcGF0aCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKK0Fsc28gY29udGFpbnMgbWlub3IgdHlwb2ZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMmVkODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS41LnR4dApAQCAtMCwwICsxLDM2IEBACitHaXQgdjEuNy4xMS41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjExLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgTWFrZWZpbGUgcnVsZSB0byBjcmVhdGUgYXNzZW1ibHkgb3V0cHV0IChwcmltYXJpbHkgZm9yCisgICBkZWJ1Z2dpbmcgcHVycG9zZXMpIGRpZCBub3QgY3JlYXRlIGl0IG5leHQgdG8gdGhlIHNvdXJjZS4KKworICogVGhlIGNvZGUgdG8gYXZvaWQgbWlzdGFrZW4gYXR0ZW1wdCB0byBhZGQgdGhlIG9iamVjdCBkaXJlY3RvcnkKKyAgIGl0c2VsZiBhcyBpdHMgb3duIGFsdGVybmF0ZSBjb3VsZCByZWFkIGJleW9uZCBlbmQgb2YgYSBzdHJpbmcgd2hpbGUKKyAgIGNvbXBhcmlzb24uCisKKyAqIE9uIHNvbWUgYXJjaGl0ZWN0dXJlcywgImJsb2NrLXNoYTEiIGRpZCBub3QgY29tcGlsZSBjb3JyZWN0bHkKKyAgIHdoZW4gY29tcGlsZXJzIGluZmVycmVkIGFsaWdubWVudCBndWFyYW50ZWVzIGZyb20gb3VyIHNvdXJjZSB3ZQorICAgZGlkIG5vdCBpbnRlbmQgdG8gbWFrZS4KKworICogV2hlbiB0YWxraW5nIHRvIGEgcmVtb3RlIHJ1bm5pbmcgc3NoIG9uIElQdjYgZW5hYmxlZCBob3N0LCB3aG9zZQorICAgYWRkcmVzcyBpcyBzcGVsbGVkIGFzICJbSE9TVF06UE9SVCIsIHdlIGRpZCBub3QgcGFyc2UgdGhlIGFkZHJlc3MKKyAgIGNvcnJlY3RseSBhbmQgZmFpbGVkIHRvIGNvbm5lY3QuCisKKyAqIGdpdC1ibGFtZS5lbCAoaW4gY29tcGF0LykgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdXNlIEVsaXNwIG1vcmUKKyAgIGNvcnJlY3RseS4KKworICogImdpdCBjaGVja291dCA8YnJhbmNobmFtZT4iIHRvIGNvbWUgYmFjayBmcm9tIGEgZGV0YWNoZWQgSEVBRCBzdGF0ZQorICAgaW5jb3JyZWN0bHkgY29tcHV0ZWQgcmVhY2hhYmlsaXR5IG9mIHRoZSBkZXRhY2hlZCBIRUFELCByZXN1bHRpbmcKKyAgIGluIHVubmVjZXNzYXJ5IHdhcm5pbmdzLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgZGlkIG5vdCBzdXBwb3J0IC0tdG9vbC1oZWxwIG9wdGlvbiB0byBnaXZlIHRoZSBsaXN0CisgICBvZiBzdXBwb3J0ZWQgYmFja2VuZHMsIGxpa2UgImdpdCBkaWZmdG9vbCIgZG9lcy4KKworICogImdpdCBncmVwIiBzdG9wcGVkIHNwYXduaW5nIGFuIGV4dGVybmFsICJncmVwIiBsb25nIHRpbWUgYWdvLCBidXQgYQorICAgZHVwbGljYXRlZCB0ZXN0IHRvIGNoZWNrIGludGVybmFsIGFuZCBleHRlcm5hbCAiZ3JlcCIgd2FzIGxlZnQKKyAgIGJlaGluZC4KKworQWxzbyBjb250YWlucyBtaW5vciB0eXBvZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE3ZDNjMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjYudHh0CkBAIC0wLDAgKzEsODQgQEAKK0dpdCB2MS43LjExLjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTEuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJjaWFib3QiIHNjcmlwdCAoaW4gY29udHJpYi8pIGhhcyBiZWVuIHVwZGF0ZWQgd2l0aCBleHRlbnNpdmUKKyAgIGRvY3VtZW50YXRpb24uCisKKyAqICJnaXQgZm9vIiBlcnJvcmVkIG91dCB3aXRoICJOb3QgYSBkaXJlY3RvcnkiIHdoZW4gdGhlIHVzZXIgaGFkIGEKKyAgIG5vbi1kaXJlY3Rvcnkgb24gJFBBVEgsIGFuZCB3b3JzZSB5ZXQgaXQgbWFza2VkIGFuIGFsaWFzICJmb28iIGZyb20KKyAgIHJ1bm5pbmcuCisKKyAqIFdoZW4gdGhlIHVzZXIgZXhwb3J0cyBhIG5vbi1kZWZhdWx0IElGUyB3aXRob3V0IEhULCBzY3JpcHRzIHRoYXQKKyAgIHJlbHkgb24gYmVpbmcgYWJsZSB0byBwYXJzZSAibHMtZmlsZXMgLXMgfCB3aGlsZSByZWFkIGEgYiBjLi4uIgorICAgc3RhcnRlZCB0byBmYWlsLiAgUHJvdGVjdCB0aGVtIGZyb20gc3VjaCBhIG1pc2NvbmZpZ3VyYXRpb24uCisKKyAqIFdoZW4gdGhlIHVzZXIgZ2l2ZXMgYW4gYXJndW1lbnQgdGhhdCBjYW4gYmUgdGFrZW4gYXMgYm90aCBhCisgICByZXZpc2lvbiBuYW1lIGFuZCBhIHBhdGhuYW1lIHdpdGhvdXQgZGlzYW1iaWd1YXRpbmcgd2l0aCAiLS0iLCB3ZQorICAgdXNlZCB0byBnaXZlIGEgaGVscCBtZXNzYWdlICJVc2UgJy0tJyB0byBzZXBhcmF0ZSIuICBUaGUgbWVzc2FnZQorICAgaGFzIGJlZW4gY2xhcmlmaWVkIHRvIHNob3cgd2hlcmUgdGhhdCAnLS0nIGdvZXMgb24gdGhlIGNvbW1hbmQKKyAgIGxpbmUuCisKKyAqIERvY3VtZW50YXRpb24gZm9yIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9ybWF0IGhhZCBhIGNvbmZ1c2luZworICAgZXhhbXBsZS4KKworICogT2xkZXIgcGFydHMgb2YgdGhlIGRvY3VtZW50YXRpb24gZGVzY3JpYmVkIGFzIGlmIGhhdmluZyBhIHJlZ3VsYXIKKyAgIGZpbGUgaW4gLmdpdC9yZWZzLyBoaWVyYXJjaHkgd2VyZSB0aGUgb25seSB3YXkgdG8gaGF2ZSBicmFuY2hlcyBhbmQKKyAgIHRhZ3MsIHdoaWNoIGlzIG5vdCB0cnVlIGZvciBxdWl0ZSBzb21lIHRpbWUuCisKKyAqIEl0IHdhcyBnZW5lcmFsbHkgdW5kZXJzdG9vZCB0aGF0ICItLWxvbmctb3B0aW9uInMgdG8gbWFueSBvZiBvdXIKKyAgIHN1YmNvbW1hbmRzIGNhbiBiZSBhYmJyZXZpYXRlZCB0byB0aGUgdW5pcXVlIHByZWZpeCwgYnV0IGl0IHdhcyBub3QKKyAgIGVhc3kgdG8gZmluZCBpdCBkZXNjcmliZWQgZm9yIG5ldyByZWFkZXJzIG9mIHRoZSBkb2N1bWVudGF0aW9uIHNldC4KKworICogVGhlICItLXRvcG8tb3JkZXIiLCAiLS1kYXRlLW9yZGVyIiAoYW5kIHRoZSBsYWNrIG9mIGVpdGhlciBtZWFucworICAgdGhlIGRlZmF1bHQgb3JkZXIpIG9wdGlvbnMgdG8gInJldi1saXN0IiBhbmQgImxvZyIgZmFtaWx5IG9mCisgICBjb21tYW5kcyB3ZXJlIHBvb3JseSBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKKyAqICJnaXQgY29tbWl0IC0tYW1lbmQiIGxldCB0aGUgdXNlciBlZGl0IHRoZSBsb2cgbWVzc2FnZSBhbmQgdGhlbgorICAgZGllZCB3aGVuIHRoZSBodW1hbi1yZWFkYWJsZSBjb21taXR0ZXIgbmFtZSB3YXMgZ2l2ZW4KKyAgIGluc3VmZmljaWVudGx5IGJ5IGdldHB3ZW50KDMpLgorCisgKiBUaGUgZXhpdCBzdGF0dXMgY29kZSBmcm9tICJnaXQgY29uZmlnIiB3YXMgd2F5IG92ZXJzcGVjaWZpZWQgd2hpbGUKKyAgIGJlaW5nIGluY29ycmVjdC4gIFRoZSBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbiB1cGRhdGVkIHRvIGdpdmUgdGhlCisgICBkb2N1bWVudGVkIHN0YXR1cyBmb3IgYSBjYXNlIHRoYXQgd2FzIGRvY3VtZW50ZWQsIGFuZCBpbnRyb2R1Y2UgYQorICAgbmV3IGNvZGUgZm9yICJhbGwgb3RoZXIgZXJyb3JzIi4KKworICogVGhlIG91dHB1dCBmcm9tICJnaXQgZGlmZiAtQiIgZm9yIGEgZmlsZSB0aGF0IGVuZHMgd2l0aCBhbgorICAgaW5jb21wbGV0ZSBsaW5lIGRpZCBub3QgcHV0ICJcIE5vIG5ld2xpbmUuLi4iIG9uIGEgbGluZSBvZiBpdHMgb3duLgorCisgKiAiZ2l0IGRpZmYiIGhhZCBhIGNvbmZ1c2lvbiBiZXR3ZWVuIHRha2luZyBkYXRhIGZyb20gYSBwYXRoIGluIHRoZQorICAgd29ya2luZyB0cmVlIGFuZCB0YWtpbmcgZGF0YSBmcm9tIGFuIG9iamVjdCB0aGF0IGhhcHBlbnMgdG8gaGF2ZQorICAgbmFtZSAwezQwfSByZWNvcmRlZCBpbiBhIHRyZWUuCisKKyAqIFRoZSAiLS1yZWJhc2UiIG9wdGlvbiB0byAiZ2l0IHB1bGwiIGNhbiBiZSBhYmJyZXZpYXRlZCB0byAiLXIiLAorICAgYnV0IHdlIGRpZG4ndCBkb2N1bWVudCBpdC4KKworICogV2hlbiAiZ2l0IHB1c2giIHRyaWdnZXJlZCB0aGUgYXV0b21hdGljIGdjIG9uIHRoZSByZWNlaXZpbmcgZW5kLCBhCisgICBtZXNzYWdlIGZyb20gImdpdCBwcnVuZSIgdGhhdCBzYWlkIGl0IHdhcyByZW1vdmluZyBjcnVmdCBsZWFrZWQgdG8KKyAgIHRoZSBzdGFuZGFyZCBvdXRwdXQsIGJyZWFraW5nIHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sLgorCisgKiBUaGUgcmVmbG9nIGVudHJpZXMgbGVmdCBieSAiZ2l0IHJlYmFzZSIgYW5kICJnaXQgcmViYXNlIC1pIiB3ZXJlCisgICBpbmNvbnNpc3RlbnQgKHRoZSBpbnRlcmFjdGl2ZSBvbmUgZ2F2ZSBhbiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZSkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZGlkIG5vdCB1bnF1b3RlIGVuY29kZWQgd29yZHMgdGhhdCBhcHBlYXIgb24gdGhlCisgICBoZWFkZXIgY29ycmVjdGx5LCBhbmQgbG9zdCAiXyIgZnJvbSBzdHJpbmdzLgorCisgKiAiZ2l0IHN0YXNoIGFwcGx5L3BvcCIgZGlkIG5vdCB0cmlnZ2VyICJyZXJlcmUiIHVwb24gY29uZmxpY3RzCisgICB1bmxpa2Ugb3RoZXIgbWVyZ3kgb3BlcmF0aW9ucy4KKworICogImdpdCBzdWJtb2R1bGUgPGNtZD4gcGF0aCIgZGlkIG5vdCBlcnJvciBvdXQgd2hlbiB0aGUgcGF0aCB0byB0aGUKKyAgIHN1Ym1vZHVsZSB3YXMgbWlzc3BlbHQuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSAtZiIgZGlkIG5vdCB1cGRhdGUgcGF0aHMgaW4gdGhlIHdvcmtpbmcgdHJlZQorICAgdGhhdCBoYXMgbG9jYWwgY2hhbmdlcy4KKyAgIChtZXJnZSAwMWQ0NzIxIHN6L3N1Ym1vZHVsZS1mb3JjZS11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0d2ViIiB3aGVuIHVzZWQgd2l0aCBQQVRIX0lORk8gZmFpbGVkIHRvIG5vdGljZSBkaXJlY3RvcmllcyB3aXRoCisgICBTUCAoYW5kIG90aGVyIGNoYXJhY3RlcnMgdGhhdCBuZWVkIFVSTC1zdHlsZSBxdW90aW5nKSBpbiB0aGVtLgorCisgKiBGYWxsYmFjayAnZ2V0cGFzcycgaW1wbGVtZW50YXRpb24gbWFkZSB1bnBvcnRhYmxlIHVzZSBvZiBzdGRpbyBBUEkuCisKKyAqIEEgdXRpbGl0eSBzaGVsbCBmdW5jdGlvbiB0ZXN0X3NlcSBoYXMgYmVlbiBhZGRlZCBhcyBhIHJlcGxhY2VtZW50CisgICBmb3IgdGhlICdzZXEnIHV0aWxpdHkgZm91bmQgb24gc29tZSBwbGF0Zm9ybXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDNhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS43LnR4dApAQCAtMCwwICsxLDQ2IEBACitHaXQgdjEuNy4xMS43IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjExLjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgc3lub3BzaXMgc2FpZCAiY2hlY2tvdXQgWy1CIGJyYW5jaF0iIHRvIG1ha2UgaXQgY2xlYXIgdGhlCisgICBicmFuY2ggbmFtZSBpcyBhIHBhcmFtZXRlciB0byB0aGUgb3B0aW9uLCBidXQgdGhlIGhlYWRpbmcgZm9yIHRoZQorICAgb3B0aW9uIGRlc2NyaXB0aW9uIHdhcyAiLUI6OiIsIG5vdCAiLUIgYnJhbmNoOjoiLCBtYWtpbmcgdGhlCisgICBkb2N1bWVudGF0aW9uIG1pc2xlYWRpbmcuCisKKyAqIEdpdCBzaGlwcyB3aXRoIGEgZmFsbC1iYWNrIHJlZ2V4cCBpbXBsZW1lbnRhdGlvbiBmb3IgcGxhdGZvcm1zIHdpdGgKKyAgIGJ1Z2d5IHJlZ2V4cCBsaWJyYXJ5LCBidXQgaXQgd2FzIGVhc3kgZm9yIHBlb3BsZSB0byBrZWVwIHVzaW5nIHRoZWlyCisgICBwbGF0Zm9ybSByZWdleHAuICBBIG5ldyB0ZXN0IGhhcyBiZWVuIGFkZGVkIHRvIGNoZWNrIHRoaXMuCisKKyAqICJnaXQgYXBwbHkgLXAwIiBkaWQgbm90IHBhcnNlIHBhdGhuYW1lcyBvbiAiZGlmZiAtLWdpdCIgbGluZQorICAgY29ycmVjdGx5LiAgVGhpcyBjYXVzZWQgcGF0Y2hlcyB0aGF0IGhhZCBwYXRobmFtZXMgaW4gbm8gb3RoZXIKKyAgIHBsYWNlcyB0byBiZSBtaXN0YWtlbmx5IHJlamVjdGVkIChtb3N0IG5vdGFibHksIGJpbmFyeSBwYXRjaCB0aGF0CisgICBkb2VzIG5vdCByZW5hbWUgbm9yIGNoYW5nZSBtb2RlKS4gIFRleHR1YWwgcGF0Y2hlcywgcmVuYW1lcyBvciBtb2RlCisgICBjaGFuZ2VzIGhhdmUgcHJlaW1hZ2UgYW5kIHBvc3RpbWFnZSBwYXRobmFtZXMgaW4gZGlmZmVyZW50IHBsYWNlcworICAgaW4gYSBmb3JtIHRoYXQgY2FuIGJlIHBhcnNlZCB1bmFtYmlndW91c2x5IGFuZCBkaWQgbm90IHN1ZmZlciBmcm9tCisgICB0aGlzIHByb2JsZW0uCisKKyAqIEFmdGVyICJnaXRrIiBzaG93ZWQgdGhlIGNvbnRlbnRzIG9mIGEgdGFnLCBuZWl0aGVyICJSZXJlYWQKKyAgIHJlZmVyZW5jZXMiIG5vciAiUmVsb2FkIiBkaWQgbm90IHVwZGF0ZSB3aGF0IGlzIHNob3duIGFzIHRoZQorICAgY29udGVudHMgb2YgaXQsIHdoZW4gdGhlIHVzZXIgb3Zlcndyb3RlIHRoZSB0YWcgd2l0aCAiZ2l0IHRhZyAtZiIuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIiBkaWQgbm90IGNvcnJlY3RseSBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgLS1zb3J0CisgICBvcHRpb24uCisKKyAqICJnaXQgbG9nIC4uIiBlcnJvcmVkIG91dCBzYXlpbmcgaXQgaXMgYm90aCByZXYgcmFuZ2UgYW5kIGEgcGF0aAorICAgd2hlbiB0aGVyZSBpcyBubyBkaXNhbWJpZ3VhdGluZyAiLS0iIGlzIG9uIHRoZSBjb21tYW5kIGxpbmUuCisgICBVcGRhdGUgdGhlIGNvbW1hbmQgbGluZSBwYXJzZXIgdG8gaW50ZXJwcmV0ICIuLiIgYXMgYSBwYXRoIGluIHN1Y2gKKyAgIGEgY2FzZS4KKworICogUHVzaGluZyB0byBzbWFydCBIVFRQIHNlcnZlciB3aXRoIHJlY2VudCBHaXQgZmFpbHMgd2l0aG91dCBoYXZpbmcKKyAgIHRoZSB1c2VybmFtZSBpbiB0aGUgVVJMIHRvIGZvcmNlIGF1dGhlbnRpY2F0aW9uLCBpZiB0aGUgc2VydmVyIGlzCisgICBjb25maWd1cmVkIHRvIGFsbG93IEdFVCBhbm9ueW1vdXNseSwgd2hpbGUgcmVxdWlyaW5nIGF1dGhlbnRpY2F0aW9uCisgICBmb3IgUE9TVC4KKworICogImdpdCBzaG93IC0tZm9ybWF0PSclY2knIiBkaWQgbm90IGdpdmUgdGltZXN0YW1wIGNvcnJlY3RseSBmb3IKKyAgIGNvbW1pdHMgY3JlYXRlZCB3aXRob3V0IGh1bWFuIHJlYWRhYmxlIG5hbWUgb24gImNvbW1pdHRlciIgbGluZS4KKyAgIChtZXJnZSBlMjdkZGI2IGpjL21haW50LWlkZW50LW1pc3NpbmctaHVtYW4tbmFtZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc2hvdyAtLXF1aWV0IiBvdWdodCB0byBiZSBhIHN5bm9ueW0gZm9yICJnaXQgc2hvdyAtcyIsIGJ1dAorICAgd2Fzbid0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Yjk1NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS50eHQKQEAgLTAsMCArMSwxMzkgQEAKK0dpdCB2MS43LjExIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjEwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEEgbmV3IG1vZGUgZm9yIHB1c2gsICJzaW1wbGUiLCB3aGljaCBpcyBhIGNyb3NzIGJldHdlZW4gImN1cnJlbnQiCisgICBhbmQgInVwc3RyZWFtIiwgaGFzIGJlZW4gaW50cm9kdWNlZC4gImdpdCBwdXNoIiB3aXRob3V0IGFueSByZWZzcGVjCisgICB3aWxsIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIG91dCB0byB0aGUgc2FtZSBuYW1lIGF0IHRoZSByZW1vdGUKKyAgIHJlcG9zaXRvcnkgb25seSB3aGVuIGl0IGlzIHNldCB0byB0cmFjayB0aGUgYnJhbmNoIHdpdGggdGhlIHNhbWUKKyAgIG5hbWUgb3ZlciB0aGVyZS4gIFRoZSBwbGFuIGlzIHRvIG1ha2UgdGhpcyBtb2RlIHRoZSBuZXcgZGVmYXVsdAorICAgdmFsdWUgd2hlbiBwdXNoLmRlZmF1bHQgaXMgbm90IGNvbmZpZ3VyZWQuCisKKyAqIEEgY291cGxlIG9mIGNvbW1hbmRzIGxlYXJuZWQgdGhlICItLWNvbHVtbiIgb3B0aW9uIHRvIHByb2R1Y2UKKyAgIGNvbHVtbmFyIG91dHB1dC4KKworICogQSB0aGlyZC1wYXJ0eSB0b29sICJnaXQgc3VidHJlZSIgaXMgZGlzdHJpYnV0ZWQgaW4gY29udHJpYi8KKworICogQSByZW1vdGUgaGVscGVyIHRoYXQgYWN0cyBhcyBhIHByb3h5IGFuZCBjYWNoZXMgc3NsIHNlc3Npb24gZm9yIHRoZQorICAgaHR0cHM6Ly8gdHJhbnNwb3J0IGlzIGFkZGVkIHRvIHRoZSBjb250cmliLyBhcmVhLgorCisgKiBFcnJvciBtZXNzYWdlcyBnaXZlbiB3aGVuIEB7dX0gaXMgdXNlZCBmb3IgYSBicmFuY2ggd2l0aG91dCBpdHMKKyAgIHVwc3RyZWFtIGNvbmZpZ3VyZWQgaGF2ZSBiZWVuIGNsYXJpZmllZC4KKworICogRXZlbiB3aXRoIHRoZSAiLXEidWlldCBvcHRpb24sICJjaGVja291dCIgdXNlZCB0byByZXBvcnQgc2V0dGluZyB1cAorICAgdHJhY2tpbmcuICBBbHNvICJicmFuY2giIGxlYXJuZWQgdGhlICItcSJ1aWV0IG9wdGlvbiB0byBzcXVlbGNoCisgICBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuCisKKyAqIFlvdXIgYnVpbGQgcGxhdGZvcm0gbWF5IHN1cHBvcnQgaGFyZGxpbmtzIGJ1dCB5b3UgbWF5IHByZWZlciBub3QgdG8KKyAgIHVzZSB0aGVtLCBlLmcuIHdoZW4gaW5zdGFsbGluZyB0byBERVNURElSIHRvIG1ha2UgYSB0YXJiYWxsIGFuZAorICAgdW50YXJyaW5nIG9uIGEgZmlsZXN5c3RlbSB0aGF0IGhhcyBwb29yIHN1cHBvcnQgZm9yIGhhcmRsaW5rcy4KKyAgIFRoZXJlIGlzIGEgTWFrZWZpbGUgb3B0aW9uIE5PX0lOU1RBTExfSEFSRExJTktTIGZvciB5b3UuCisKKyAqIFRoZSBzbWFydC1odHRwIGJhY2tlbmQgdXNlZCB0byBhbHdheXMgb3ZlcnJpZGUgR0lUX0NPTU1JVFRFUl8qCisgICB2YXJpYWJsZXMgd2l0aCBSRU1PVEVfVVNFUiBhbmQgUkVNT1RFX0FERFIsIGJ1dCB0aGVzZSB2YXJpYWJsZXMgYXJlCisgICBub3cgcHJlc2VydmVkIHdoZW4gc2V0LgorCisgKiAiZ2l0IGFtIiBsZWFybmVkIHRoZSAiLS1pbmNsdWRlIiBvcHRpb24sIHdoaWNoIGlzIGFuIG9wcG9zaXRlIG9mCisgICBleGlzdGluZyB0aGUgIi0tZXhjbHVkZSIgb3B0aW9uLgorCisgKiBXaGVuICJnaXQgYW0gLTMiIG5lZWRzIHRvIGZhbGwgYmFjayB0byBhbiBhcHBsaWNhdGlvbiBvZiB0aGUgcGF0Y2gKKyAgIHRvIGEgc3ludGhlc2l6ZWQgcHJlaW1hZ2UgZm9sbG93ZWQgYnkgYSAzLXdheSBtZXJnZSwgdGhlIHBhdGhzIHRoYXQKKyAgIG5lZWRlZCBzdWNoIHRyZWF0bWVudCBhcmUgbm93IHJlcG9ydGVkIHRvIHRoZSBlbmQgdXNlciwgc28gdGhhdCB0aGUKKyAgIHJlc3VsdCBpbiB0aGVtIGNhbiBiZSBleWViYWxsZWQgd2l0aCBleHRyYSBjYXJlLgorCisgKiBUaGUgb3V0cHV0IGZyb20gImRpZmYvbG9nIC0tc3RhdCIgdXNlZCB0byBhbHdheXMgYWxsb2NhdGUgNCBjb2x1bW5zCisgICB0byBzaG93IHRoZSBudW1iZXIgb2YgbW9kaWZpZWQgbGluZXMsIGJ1dCBub3QgYW55bW9yZS4KKworICogImdpdCBkaWZmdG9vbCIgbGVhcm5lZCB0aGUgIi0tZGlyLWRpZmYiIG9wdGlvbiB0byBzcGF3biBleHRlcm5hbAorICAgZGlmZiB0b29scyB0aGF0IGNhbiBjb21wYXJlIHR3byBkaXJlY3RvcnkgaGllcmFyY2hpZXMgYXQgYSB0aW1lCisgICBhZnRlciBwb3B1bGF0aW5nIHR3byB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMsIGluc3RlYWQgb2YgcnVubmluZyBhbgorICAgaW5zdGFuY2Ugb2YgdGhlIGV4dGVybmFsIHRvb2wgb25jZSBwZXIgYSBmaWxlIHBhaXIuCisKKyAqIFRoZSAiZm10LW1lcmdlLW1zZyIgY29tbWFuZCBsZWFybmVkIHRvIGxpc3QgdGhlIHByaW1hcnkgY29udHJpYnV0b3JzCisgICBpbnZvbHZlZCBpbiB0aGUgc2lkZSB0b3BpYyB5b3UgYXJlIG1lcmdpbmcgaW4gYSBjb21tZW50IGluIHRoZSBtZXJnZQorICAgY29tbWl0IHRlbXBsYXRlLgorCisgKiAiZ2l0IHJlYmFzZSIgbGVhcm5lZCB0byBvcHRpb25hbGx5IGtlZXAgY29tbWl0cyB0aGF0IGRvIG5vdAorICAgaW50cm9kdWNlIGFueSBjaGFuZ2UgaW4gdGhlIG9yaWdpbmFsIGhpc3RvcnkuCisKKyAqICJnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIgbGVhcm5lZCB0byBvcHRpb25hbGx5IGxvb2sgaW50byB0aGUKKyAgIGhpc3RvcmllcyBvZiBzdWJtb2R1bGVzIGJvdW5kIHRvIHRoZSBzdXBlcnByb2plY3QgYW5kIHB1c2ggdGhlbQorICAgb3V0LgorCisgKiBBICdzbmFwc2hvdCcgcmVxdWVzdCB0byAiZ2l0d2ViIiBob25vcnMgSWYtTW9kaWZpZWQtU2luY2U6IGhlYWRlciwKKyAgIGJhc2VkIG9uIHRoZSBjb21taXQgZGF0ZS4KKworICogImdpdHdlYiIgbGVhcm5lZCB0byBoaWdobGlnaHQgdGhlIHBhdGNoIGl0IG91dHB1dHMgZXZlbiBtb3JlLgorCitGb3JlaWduIEludGVyZmFjZQorCisgKiAiZ2l0IHN2biIgdXNlZCB0byBkaWUgd2l0aCB1bndhbnRlZCBTSUdQSVBFIHdoZW4gdGFsa2luZyB3aXRoIGFuIEhUVFAKKyAgIHNlcnZlciB0aGF0IHVzZXMga2VlcC1hbGl2ZS4KKworICogImdpdCBzdm4iIGxlYXJuZWQgdG8gdXNlIHBsYXRmb3JtIHNwZWNpZmljIGF1dGhlbnRpY2F0aW9uCisgICBwcm92aWRlcnMsIGUuZy4gZ25vbWUta2V5cmluZywga3dhbGxldCwgZXRjLgorCisgKiAiZ2l0IHA0IiBoYXMgYmVlbiBtb3ZlZCBvdXQgb2YgdGhlIGNvbnRyaWIvIGFyZWEgYW5kIGhhcyBzZWVuIG1vcmUKKyAgIHdvcmsgb24gaW1wb3J0aW5nIGxhYmVscyBhcyB0YWdzIGZyb20gKGFuZCBleHBvcnRpbmcgdGFncyBhcyBsYWJlbHMKKyAgIHRvKSBwNC4KKworUGVyZm9ybWFuY2UgYW5kIEludGVybmFsIEltcGxlbWVudGF0aW9uIChwbGVhc2UgcmVwb3J0IHBvc3NpYmxlIHJlZ3Jlc3Npb25zKQorCisgKiBCYXNoIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgaGF2ZSBiZWVuIGNsZWFuZWQgdXAgdG8gbWFrZQorICAgZnV0dXJlIHdvcmsgb24gaXQgc2ltcGxlci4KKworICogQW4gZXhwZXJpbWVudGFsICJ2ZXJzaW9uIDQiIGZvcm1hdCBvZiB0aGUgaW5kZXggZmlsZSBoYXMgYmVlbgorICAgaW50cm9kdWNlZCB0byByZWR1Y2Ugb24tZGlzayBmb290cHJpbnQgYW5kIEkvTyBvdmVyaGVhZC4KKworICogImdpdCBhcmNoaXZlIiBsZWFybmVkIHRvIHByb2R1Y2UgaXRzIG91dHB1dCB3aXRob3V0IHJlYWRpbmcgdGhlCisgICBibG9iIG9iamVjdCBpdCB3cml0ZXMgb3V0IGluIG1lbW9yeSBpbiBpdHMgZW50aXJldHkuCisKKyAqICJnaXQgaW5kZXgtcGFjayIgdGhhdCBydW5zIHdoZW4gZmV0Y2hpbmcgb3IgcHVzaGluZyBvYmplY3RzIHRvCisgICBjb21wbGV0ZSB0aGUgcGFja2ZpbGUgb24gdGhlIHJlY2VpdmluZyBlbmQgbGVhcm5lZCB0byB1c2UgbXVsdGlwbGUKKyAgIHRocmVhZHMgdG8gZG8gaXRzIGpvYiB3aGVuIGF2YWlsYWJsZS4KKworICogVGhlIGNvZGUgdG8gY29tcHV0ZSBoYXNoIHZhbHVlcyBmb3IgbGluZXMgdXNlZCBieSB0aGUgaW50ZXJuYWwgZGlmZgorICAgZW5naW5lIHdhcyBvcHRpbWl6ZWQgb24gbGl0dGxlLWVuZGlhbiBtYWNoaW5lcywgdXNpbmcgdGhlIHNhbWUKKyAgIHRyaWNrIHRoZSBrZXJuZWwgZm9sa3MgY2FtZSB1cCB3aXRoLgorCisgKiAiZ2l0IGFwcGx5IiBoYWQgc29tZSBtZW1vcnkgbGVha3MgcGx1Z2dlZC4KKworICogU2V0dGluZyB1cCBhIHJldmlzaW9uIHRyYXZlcnNhbCB3aXRoIG1hbnkgc3RhcnRpbmcgcG9pbnRzIHdhcworICAgaW5lZmZpY2llbnQgYXMgdGhlc2Ugd2VyZSBwbGFjZWQgaW4gYSBkYXRlLW9yZGVyIHByaW9yaXR5IHF1ZXVlCisgICBvbmUtYnktb25lLiAgTm93IHRoZXkgYXJlIGNvbGxlY3RlZCBpbiB0aGUgcXVldWUgdW5vcmRlcmVkIGZpcnN0LAorICAgYW5kIHNvcnRlZCBpbW1lZGlhdGVseSBiZWZvcmUgZ2V0dGluZyB1c2VkLgorCisgKiBNb3JlIGxvd2VyLWxldmVsIGNvbW1hbmRzIGxlYXJuZWQgdG8gdXNlIHRoZSBzdHJlYW1pbmcgQVBJIHRvIHJlYWQKKyAgIGZyb20gdGhlIG9iamVjdCBzdG9yZSB3aXRob3V0IGtlZXBpbmcgZXZlcnl0aGluZyBpbiBjb3JlLgorCisgKiBUaGUgd2VpZ2h0aW5nIHBhcmFtZXRlcnMgdG8gc3VnZ2VzdGlvbiBjb21tYW5kIG5hbWUgdHlwbyBoYXZlIGJlZW4KKyAgIHR3ZWFrZWQsIHNvIHRoYXQgImdpdCB0YWdzIiB3aWxsIHN1Z2dlc3QgInRhZz8iIGFuZCBub3QgInN0YWdlPyIuCisKKyAqIEJlY2F1c2UgInNoIiBvbiB0aGUgdXNlcidzIFBBVEggbWF5IGJlIHV0dGVybHkgYnJva2VuIG9uIHNvbWUKKyAgIHN5c3RlbXMsIHJ1bi1jb21tYW5kIEFQSSBub3cgdXNlcyBTSEVMTF9QQVRILCBub3QgL2Jpbi9zaCwgd2hlbgorICAgc3Bhd25pbmcgYW4gZXh0ZXJuYWwgY29tbWFuZCAobm90IGFwcGxpY2FibGUgdG8gV2luZG93cyBwb3J0KS4KKworICogVGhlIEFQSSB0byBpdGVyYXRlIG92ZXIgdGhlIHJlZnMvIGhpZXJhcmNoeSBoYXMgYmVlbiB0d2Vha2VkIHRvCisgICBhbGxvdyB3YWxraW5nIG9ubHkgYSBzdWJzZXQgb2YgaXQgbW9yZSBlZmZpY2llbnRseS4KKworQWxzbyBjb250YWlucyBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuMTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS43LjEwIGluIHRoZSBtYWludGVuYW5jZQorcmVsZWFzZXMgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSByZWxlYXNlIG5vdGVzIHRvIHRoZW0gZm9yCitkZXRhaWxzKS4KKworICogImdpdCBzdWJtb2R1bGUgaW5pdCIgdXNlZCB0byByZXBvcnQgInJlZ2lzdGVyZWQgZm9yIHBhdGggLi4uIgorICAgZXZlbiBmb3Igc3VibW9kdWxlcyB0aGF0IHdlcmUgcmVnaXN0ZXJlZCBlYXJsaWVyLgorICAgKGNoZXJyeS1waWNrIGMxYzI1OWUgamwvc3VibW9kdWxlLXJlcG9ydC1uZXctcGF0aC1vbmNlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIC0tc3RhdCIgdXNlZCB0byBmdWxseSBjb3VudCBhIGJpbmFyeSBmaWxlIHdpdGggbW9kaWZpZWQKKyAgIGV4ZWN1dGlvbiBiaXRzIHdob3NlIGNvbnRlbnRzIGlzIHVubW9kaWZpZWQsIHdoaWNoIHdhcyBub3QgcXVpdGUKKyAgIHJpZ2h0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGYwNGFmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuMS50eHQKQEAgLTAsMCArMSwxMzQgQEAKK0dpdCAxLjcuMTIuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjEyCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgYXBwbHkgLXAwIiBkaWQgbm90IHBhcnNlIHBhdGhuYW1lcyBvbiAiZGlmZiAtLWdpdCIgbGluZQorICAgY29ycmVjdGx5LiAgVGhpcyBjYXVzZWQgcGF0Y2hlcyB0aGF0IGhhZCBwYXRobmFtZXMgaW4gbm8gb3RoZXIKKyAgIHBsYWNlcyB0byBiZSBtaXN0YWtlbmx5IHJlamVjdGVkIChtb3N0IG5vdGFibHksIGJpbmFyeSBwYXRjaCB0aGF0CisgICBkb2VzIG5vdCByZW5hbWUgbm9yIGNoYW5nZSBtb2RlKS4gIFRleHR1YWwgcGF0Y2hlcywgcmVuYW1lcyBvciBtb2RlCisgICBjaGFuZ2VzIGhhdmUgcHJlaW1hZ2UgYW5kIHBvc3RpbWFnZSBwYXRobmFtZXMgaW4gZGlmZmVyZW50IHBsYWNlcworICAgaW4gYSBmb3JtIHRoYXQgY2FuIGJlIHBhcnNlZCB1bmFtYmlndW91c2x5IGFuZCBkaWQgbm90IHN1ZmZlciBmcm9tCisgICB0aGlzIHByb2JsZW0uCisKKyAqICJnaXQgY2hlcnJ5LXBpY2sgQSBDIEIiIHVzZWQgdG8gcmVwbGF5IGNoYW5nZXMgaW4gQSBhbmQgdGhlbiBCIGFuZAorICAgdGhlbiBDIGlmIHRoZXNlIHRocmVlIGNvbW1pdHMgaGFkIGNvbW1pdHRlciB0aW1lc3RhbXBzIGluIHRoYXQKKyAgIG9yZGVyLCB3aGljaCBpcyBub3Qgd2hhdCB0aGUgdXNlciB3aG8gc2FpZCAiQSBDIEIiIG5hdHVyYWxseQorICAgZXhwZWN0cy4KKworICogImdpdCBjb21taXQgLS1hbWVuZCIgbGV0IHRoZSB1c2VyIGVkaXQgdGhlIGxvZyBtZXNzYWdlIGFuZCB0aGVuCisgICBkaWVkIHdoZW4gdGhlIGh1bWFuLXJlYWRhYmxlIGNvbW1pdHRlciBuYW1lIHdhcyBnaXZlbgorICAgaW5zdWZmaWNpZW50bHkgYnkgZ2V0cHdlbnQoMykuCisKKyAqIFNvbWUgY2FwYWJpbGl0aWVzIHdlcmUgYXNrZWQgYnkgZmV0Y2gtcGFjayBldmVuIHdoZW4gdXBsb2FkLXBhY2sKKyAgIGRpZCBub3QgYWR2ZXJ0aXNlIHRoYXQgdGhleSBhcmUgYXZhaWxhYmxlLiAgZmV0Y2gtcGFjayBoYXMgYmVlbgorICAgZml4ZWQgbm90IHRvIGRvIHNvLgorCisgKiAiZ2l0IGRpZmYiIGhhZCBhIGNvbmZ1c2lvbiBiZXR3ZWVuIHRha2luZyBkYXRhIGZyb20gYSBwYXRoIGluIHRoZQorICAgd29ya2luZyB0cmVlIGFuZCB0YWtpbmcgZGF0YSBmcm9tIGFuIG9iamVjdCB0aGF0IGhhcHBlbnMgdG8gaGF2ZQorICAgbmFtZSAwezQwfSByZWNvcmRlZCBpbiBhIHRyZWUuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIiBkaWQgbm90IGNvcnJlY3RseSBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgLS1zb3J0CisgICBvcHRpb24uCisKKyAqICJnaXQgbG9nIC4uIiBlcnJvcmVkIG91dCBzYXlpbmcgaXQgaXMgYm90aCByZXYgcmFuZ2UgYW5kIGEgcGF0aAorICAgd2hlbiB0aGVyZSBpcyBubyBkaXNhbWJpZ3VhdGluZyAiLS0iIGlzIG9uIHRoZSBjb21tYW5kIGxpbmUuCisgICBVcGRhdGUgdGhlIGNvbW1hbmQgbGluZSBwYXJzZXIgdG8gaW50ZXJwcmV0ICIuLiIgYXMgYSBwYXRoIGluIHN1Y2gKKyAgIGEgY2FzZS4KKworICogVGhlICItLXRvcG8tb3JkZXIiLCAiLS1kYXRlLW9yZGVyIiAoYW5kIHRoZSBsYWNrIG9mIGVpdGhlciBtZWFucworICAgdGhlIGRlZmF1bHQgb3JkZXIpIG9wdGlvbnMgdG8gInJldi1saXN0IiBhbmQgImxvZyIgZmFtaWx5IG9mCisgICBjb21tYW5kcyB3ZXJlIHBvb3JseSBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKKyAqICJnaXQgcHJ1bmUiIHdpdGhvdXQgIi12IiB1c2VkIHRvIHdhcm4gYWJvdXQgbGVmdG92ZXIgdGVtcG9yYXJ5CisgICBmaWxlcyAod2hpY2ggaXMgYW4gaW5kaWNhdGlvbiBvZiBhbiBlYXJsaWVyIGFib3J0ZWQgb3BlcmF0aW9uKS4KKworICogUHVzaGluZyB0byBzbWFydCBIVFRQIHNlcnZlciB3aXRoIHJlY2VudCBHaXQgZmFpbHMgd2l0aG91dCBoYXZpbmcKKyAgIHRoZSB1c2VybmFtZSBpbiB0aGUgVVJMIHRvIGZvcmNlIGF1dGhlbnRpY2F0aW9uLCBpZiB0aGUgc2VydmVyIGlzCisgICBjb25maWd1cmVkIHRvIGFsbG93IEdFVCBhbm9ueW1vdXNseSwgd2hpbGUgcmVxdWlyaW5nIGF1dGhlbnRpY2F0aW9uCisgICBmb3IgUE9TVC4KKworICogVGhlIHJlZmxvZyBlbnRyaWVzIGxlZnQgYnkgImdpdCByZWJhc2UiIGFuZCAiZ2l0IHJlYmFzZSAtaSIgd2VyZQorICAgaW5jb25zaXN0ZW50ICh0aGUgaW50ZXJhY3RpdmUgb25lIGdhdmUgYW4gYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWUpLgorCisgKiBXaGVuICJnaXQgcHVzaCIgdHJpZ2dlcmVkIHRoZSBhdXRvbWF0aWMgZ2Mgb24gdGhlIHJlY2VpdmluZyBlbmQsIGEKKyAgIG1lc3NhZ2UgZnJvbSAiZ2l0IHBydW5lIiB0aGF0IHNhaWQgaXQgd2FzIHJlbW92aW5nIGNydWZ0IGxlYWtlZCB0bworICAgdGhlIHN0YW5kYXJkIG91dHB1dCwgYnJlYWtpbmcgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wuCisKKyAqICJnaXQgc2hvdyAtLXF1aWV0IiBvdWdodCB0byBiZSBhIHN5bm9ueW0gZm9yICJnaXQgc2hvdyAtcyIsIGJ1dAorICAgd2Fzbid0LgorCisgKiAiZ2l0IHNob3cgLS1mb3JtYXQ9JyVjaSciIGRpZCBub3QgZ2l2ZSB0aW1lc3RhbXAgY29ycmVjdGx5IGZvcgorICAgY29tbWl0cyBjcmVhdGVkIHdpdGhvdXQgaHVtYW4gcmVhZGFibGUgbmFtZSBvbiAiY29tbWl0dGVyIiBsaW5lLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgdW5xdW90ZSBlbmNvZGVkIHdvcmRzIHRoYXQgYXBwZWFyIG9uIHRoZQorICAgaGVhZGVyIGNvcnJlY3RseSwgYW5kIGxvc3QgIl8iIGZyb20gc3RyaW5ncy4KKworICogVGhlIGludGVyYWN0aXZlIHByb21wdCAiZ2l0IHNlbmQtZW1haWwiIGdpdmVzIHdhcyBlcnJvciBwcm9uZS4gSXQKKyAgIGFza2VkICJXaGF0IGUtbWFpbCBhZGRyZXNzIGRvIHlvdSB3YW50IHRvIHVzZT8iIHdpdGggdGhlIGFkZHJlc3MgaXQKKyAgIGd1ZXNzZWQgKGNvcnJlY3RseSkgdGhlIHVzZXIgd291bGQgd2FudCB0byB1c2UgaW4gaXRzIHByb21wdCwKKyAgIHRlbXB0aW5nIHRoZSB1c2VyIHRvIHNheSAieSIuIEJ1dCB0aGUgcmVzcG9uc2Ugd2FzIHRha2VuIGFzICJObywKKyAgIHBsZWFzZSB1c2UgJ3knIGFzIHRoZSBlLW1haWwgYWRkcmVzcyBpbnN0ZWFkIiwgd2hpY2ggaXMgbW9zdAorICAgY2VydGFpbmx5IG5vdCB3aGF0IHRoZSB1c2VyIG1lYW50LgorCisgKiAiZ2l0d2ViIiB3aGVuIHVzZWQgd2l0aCBQQVRIX0lORk8gZmFpbGVkIHRvIG5vdGljZSBkaXJlY3RvcmllcyB3aXRoCisgICBTUCAoYW5kIG90aGVyIGNoYXJhY3RlcnMgdGhhdCBuZWVkIFVSTC1zdHlsZSBxdW90aW5nKSBpbiB0aGVtLgorCisgKiBXaGVuIHRoZSB1c2VyIGdpdmVzIGFuIGFyZ3VtZW50IHRoYXQgY2FuIGJlIHRha2VuIGFzIGJvdGggYQorICAgcmV2aXNpb24gbmFtZSBhbmQgYSBwYXRobmFtZSB3aXRob3V0IGRpc2FtYmlndWF0aW5nIHdpdGggIi0tIiwgd2UKKyAgIHVzZWQgdG8gZ2l2ZSBhIGhlbHAgbWVzc2FnZSAiVXNlICctLScgdG8gc2VwYXJhdGUiLiAgVGhlIG1lc3NhZ2UKKyAgIGhhcyBiZWVuIGNsYXJpZmllZCB0byBzaG93IHdoZXJlIHRoYXQgJy0tJyBnb2VzIG9uIHRoZSBjb21tYW5kCisgICBsaW5lLgorCisgKiBXaGVuIHRoZSB1c2VyIGV4cG9ydHMgYSBub24tZGVmYXVsdCBJRlMgd2l0aG91dCBIVCwgc2NyaXB0cyB0aGF0CisgICByZWx5IG9uIGJlaW5nIGFibGUgdG8gcGFyc2UgImxzLWZpbGVzIC1zIHwgd2hpbGUgcmVhZCBhIGIgYy4uLiIKKyAgIHN0YXJ0ZWQgdG8gZmFpbC4gIFByb3RlY3QgdGhlbSBmcm9tIHN1Y2ggYSBtaXNjb25maWd1cmF0aW9uLgorCisgKiBUaGUgYXR0cmlidXRlIHN5c3RlbSBtYXkgYmUgYXNrZWQgZm9yIGEgcGF0aCB0aGF0IGl0c2VsZiBvciBpdHMKKyAgIGxlYWRpbmcgZGlyZWN0b3JpZXMgbm8gbG9uZ2VyIGV4aXN0cyBpbiB0aGUgd29ya2luZyB0cmVlLCBhbmQgaXQgaXMKKyAgIGZpbmUgaWYgd2UgY2Fubm90IG9wZW4gLmdpdGF0dHJpYnV0ZSBmaWxlIGluIHN1Y2ggYSBjYXNlLiAgRmFpbHVyZQorICAgdG8gb3BlbiBwZXItZGlyZWN0b3J5IC5naXRhdHRyaWJ1dGVzIHdpdGggZXJyb3Igc3RhdHVzIG90aGVyIHRoYW4KKyAgIEVOT0VOVCBhbmQgRU5PVERJUiBzaG91bGQgYmUgZGlhZ25vc2VkLCBidXQgaXQgd2Fzbid0LgorCisgKiBBZnRlciAiZ2l0ayIgc2hvd2VkIHRoZSBjb250ZW50cyBvZiBhIHRhZywgbmVpdGhlciAiUmVyZWFkCisgICByZWZlcmVuY2VzIiBub3IgIlJlbG9hZCIgZGlkIG5vdCB1cGRhdGUgd2hhdCBpcyBzaG93biBhcyB0aGUKKyAgIGNvbnRlbnRzIG9mIGl0LCB3aGVuIHRoZSB1c2VyIG92ZXJ3cm90ZSB0aGUgdGFnIHdpdGggImdpdCB0YWcgLWYiLgorCisgKiAiY2lhYm90IiBzY3JpcHQgKGluIGNvbnRyaWIvKSBoYXMgYmVlbiB1cGRhdGVkIHdpdGggZXh0ZW5zaXZlCisgICBkb2N1bWVudGF0aW9uLgorCisgKiAiZ2l0LWp1bXAiIHNjcmlwdCAoaW4gY29udHJpYi8pIGRpZCBub3Qgd29yayB3ZWxsIHdoZW4KKyAgIGRpZmYubm9wcmVmaXggb3IgZGlmZi5tbmVtb25pY3ByZWZpeCBpcyBpbiBlZmZlY3QuCisKKyAqIE9sZGVyIHBhcnRzIG9mIHRoZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJlZCBhcyBpZiBoYXZpbmcgYSByZWd1bGFyCisgICBmaWxlIGluIC5naXQvcmVmcy8gaGllcmFyY2h5IHdlcmUgdGhlIG9ubHkgd2F5IHRvIGhhdmUgYnJhbmNoZXMgYW5kCisgICB0YWdzLCB3aGljaCBpcyBub3QgdHJ1ZSBmb3IgcXVpdGUgc29tZSB0aW1lLgorCisgKiBBIHV0aWxpdHkgc2hlbGwgZnVuY3Rpb24gdGVzdF9zZXEgaGFzIGJlZW4gYWRkZWQgYXMgYSByZXBsYWNlbWVudAorICAgZm9yIHRoZSAnc2VxJyB1dGlsaXR5IGZvdW5kIG9uIHNvbWUgcGxhdGZvcm1zLgorCisgKiBDb21wYXRpYmlsaXR5IHdyYXBwZXIgdG8gbGVhcm4gdGhlIG1heGltdW0gbnVtYmVyIG9mIGZpbGUKKyAgIGRlc2NyaXB0b3JzIHdlIGNhbiBvcGVuIGFyb3VuZCBzeXNjb25mKF9TQ19PUEVOX01BWCkgYW5kCisgICBnZXRybGltaXQoUkxJTUlUX05PX0ZJTEUpIGhhcyBiZWVuIGludHJvZHVjZWQgZm9yIHBvcnRhYmlsaXR5LgorCisgKiBXZSB1c2VkIGN1cmxfZWFzeV9zdHJlcnJvcigpIHdpdGhvdXQgY2hlY2tpbmcgdmVyc2lvbiBvZiBjVVJMLAorICAgYnJlYWtpbmcgdGhlIGJ1aWxkIGZvciB2ZXJzaW9ucyBiZWZvcmUgY3VybCA3LjEyLjAuCisKKyAqIENvZGUgdG8gd29yayBhcm91bmQgTWFjT1MgWCBVVEYtOCBnb3RjaGEgaGFzIGJlZW4gY2xlYW5lZCB1cC4KKworICogRmFsbGJhY2sgJ2dldHBhc3MnIGltcGxlbWVudGF0aW9uIG1hZGUgdW5wb3J0YWJsZSB1c2Ugb2Ygc3RkaW8gQVBJLgorCisgKiBUaGUgIi0tcmViYXNlIiBvcHRpb24gdG8gImdpdCBwdWxsIiBjYW4gYmUgYWJicmV2aWF0ZWQgdG8gIi1yIiwKKyAgIGJ1dCB3ZSBkaWRuJ3QgZG9jdW1lbnQgaXQuCisKKyAqIEl0IHdhcyBnZW5lcmFsbHkgdW5kZXJzdG9vZCB0aGF0ICItLWxvbmctb3B0aW9uInMgdG8gbWFueSBvZiBvdXIKKyAgIHN1YmNvbW1hbmRzIGNhbiBiZSBhYmJyZXZpYXRlZCB0byB0aGUgdW5pcXVlIHByZWZpeCwgYnV0IGl0IHdhcyBub3QKKyAgIGVhc3kgdG8gZmluZCBpdCBkZXNjcmliZWQgZm9yIG5ldyByZWFkZXJzIG9mIHRoZSBkb2N1bWVudGF0aW9uIHNldC4KKworICogVGhlIHN5bm9wc2lzIHNhaWQgImNoZWNrb3V0IFstQiBicmFuY2hdIiB0byBtYWtlIGl0IGNsZWFyIHRoZQorICAgYnJhbmNoIG5hbWUgaXMgYSBwYXJhbWV0ZXIgdG8gdGhlIG9wdGlvbiwgYnV0IHRoZSBoZWFkaW5nIGZvciB0aGUKKyAgIG9wdGlvbiBkZXNjcmlwdGlvbiB3YXMgIi1COjoiLCBub3QgIi1CIGJyYW5jaDo6IiwgbWFraW5nIHRoZQorICAgZG9jdW1lbnRhdGlvbiBtaXNsZWFkaW5nLgorCitBbHNvIGNvbnRhaW5zIG51bWVyb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkyNTU3NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjIudHh0CkBAIC0wLDAgKzEsNDAgQEAKK0dpdCAxLjcuMTIuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjEyLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBXaGVuICJnaXQgYW0iIGlzIGZlZCBhbiBpbnB1dCB0aGF0IGhhcyBtdWx0aXBsZSAiQ29udGVudC10eXBlOiAuLi4iCisgICBoZWFkZXIsIGl0IGRpZCBub3QgZ3JvayBjaGFyc2V0PSBhdHRyaWJ1dGUgY29ycmVjdGx5LgorCisgKiBFdmVuIGR1cmluZyBhIGNvbmZsaWN0ZWQgbWVyZ2UsICJnaXQgYmxhbWUgJHBhdGgiIGFsd2F5cyBtZWFudCB0bworICAgYmxhbWUgdW5jb21taXR0ZWQgY2hhbmdlcyB0byB0aGUgIndvcmtpbmcgdHJlZSIgdmVyc2lvbjsgbWFrZSBpdAorICAgbW9yZSB1c2VmdWwgYnkgc2hvd2luZyBjbGVhbmx5IG1lcmdlZCBwYXJ0cyBhcyBjb21pbmcgZnJvbSB0aGUgb3RoZXIKKyAgIGJyYW5jaCB0aGF0IGlzIGJlaW5nIG1lcmdlZC4KKworICogImdpdCBibGFtZSBNQUtFRklMRSIgcnVuIGluIGEgaGlzdG9yeSB0aGF0IGhhcyAiTWFrZWZpbGUiIGJ1dCBub3QKKyAgICJNQUtFRklMRSIgc2hvdWxkIHNheSAiTm8gc3VjaCBmaWxlIE1BS0VGSUxFIGluIEhFQUQiLCBidXQgZ290CisgICBjb25mdXNlZCBvbiBhIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSBhbmQgZmFpbGVkIHRvIGRvIHNvLgorCisgKiAiZ2l0IGZldGNoIC0tYWxsIiwgd2hlbiBwYXNzZWQgIi0tbm8tdGFncyIsIGRpZCBub3QgaG9ub3IgdGhlCisgICAiLS1uby10YWdzIiBvcHRpb24gd2hpbGUgZmV0Y2hpbmcgZnJvbSBpbmRpdmlkdWFsIHJlbW90ZXMgKHRoZSBzYW1lCisgICBpc3N1ZSBleGlzdGVkIHdpdGggIi0tdGFncyIsIGJ1dCBjb21iaW5hdGlvbiAiLS1hbGwgLS10YWdzIiBtYWtlcworICAgbXVjaCBsZXNzIHNlbnNlIHRoYW4gIi0tYWxsIC0tbm8tdGFncyIpLgorCisgKiAiZ2l0IGxvZy9kaWZmL2Zvcm1hdC1wYXRjaCAtLXN0YXQiIHNob3dlZCB0aGUgIk4gbGluZShzKSBhZGRlZCIKKyAgIGNvbW1lbnQgaW4gdXNlcidzIGxvY2FsZSBhbmQgY2F1c2VkIGNhcmVsZXNzIHN1Ym1pdHRlcnMgdG8gc2VuZAorICAgcGF0Y2hlcyB3aXRoIHN1Y2ggYSBsaW5lIGluIHRoZW0gdG8gcHJvamVjdHMgd2hvc2UgcHJvamVjdCBsYW5ndWFnZQorICAgaXMgbm90IHRoZWlyIGxhbmd1YWdlLCBtaWxkbHkgaXJyaXRhdGluZyBvdGhlcnMuIExvY2FsaXphdGlvbiB0bworICAgdGhlIGxpbmUgaGFzIGJlZW4gZGlzYWJsZWQgZm9yIG5vdy4KKworICogImdpdCBsb2cgLS1hbGwtbWF0Y2ggLS1ncmVwPUEgLS1ncmVwPUIiIG91Z2h0IHRvIHNob3cgY29tbWl0cyB0aGF0CisgICBtZW50aW9uIGJvdGggQSBhbmQgQiwgYnV0IHdoZW4gdGhlc2UgdGhyZWUgb3B0aW9ucyBhcmUgdXNlZCB3aXRoCisgICAtLWF1dGhvciBvciAtLWNvbW1pdHRlciwgaXQgc2hvd2VkIGNvbW1pdHMgdGhhdCBtZW50aW9uIGVpdGhlciBBIG9yCisgICBCIChvciBib3RoKSBpbnN0ZWFkLgorCisgKiBUaGUgc3ViY29tbWFuZCB0byByZW1vdmUgdGhlIGRlZmluaXRpb24gb2YgYSByZW1vdGUgaW4gImdpdCByZW1vdGUiCisgICB3YXMgbmFtZWQgInJtIiBldmVuIHRob3VnaCBhbGwgb3RoZXIgc3ViY29tbWFuZHMgd2VyZSBzcGVsbGVkIG91dC4KKyAgIEludHJvZHVjZSAiZ2l0IHJlbW90ZSByZW1vdmUiIHRvIHJlbW92ZSBjb25mdXNpb24sIGFuZCBrZWVwICJybSIgYXMKKyAgIGEgYmFja3dhcmQgY29tcGF0aWJsZSBzeW5vbnltLgorCitBbHNvIGNvbnRhaW5zIGEgaGFuZGZ1bCBvZiBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiODIyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4zLnR4dApAQCAtMCwwICsxLDM0IEBACitHaXQgMS43LjEyLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMi4yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhbSIgbWlzaGFuZGxlZCBhIHBhdGNoIGF0dGFjaGVkIGFzIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorICAgKGUuZy4gbm90IHRleHQvKik7IENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcgKGUuZy4gYmFzZTY0KSB3YXMgbm90CisgICBob25vcmVkIGNvcnJlY3RseS4KKworICogSXQgd2FzIHVuY2xlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yICJnaXQgYmxhbWUiIHRoYXQgaXQgaXMKKyAgIHVubmVjZXNzYXJ5IGZvciB1c2VycyB0byB1c2UgdGhlICItLWZvbGxvdyIgb3B0aW9uLgorCisgKiBBIHJlcG9zaXRvcnkgY3JlYXRlZCB3aXRoICJnaXQgY2xvbmUgLS1zaW5nbGUiIGhhZCBpdHMgZmV0Y2gKKyAgIHJlZnNwZWNzIHNldCB1cCBqdXN0IGxpa2UgYSBjbG9uZSB3aXRob3V0ICItLXNpbmdsZSIsIGxlYWRpbmcgdGhlCisgICBzdWJzZXF1ZW50ICJnaXQgZmV0Y2giIHRvIHNsdXJwIGFsbCB0aGUgb3RoZXIgYnJhbmNoZXMsIGRlZmVhdGluZworICAgdGhlIHdob2xlIHBvaW50IG9mIHNwZWNpZnlpbmcgIm9ubHkgdGhpcyBicmFuY2giLgorCisgKiAiZ2l0IGZldGNoIiBvdmVyIGh0dHAgaGFkIGFuIG9sZCB3b3JrYXJvdW5kIGZvciBhbiB1bmxpa2VseSBzZXJ2ZXIKKyAgIG1pc2NvbmZpZ3VyYXRpb247IGl0IHR1cm5zIG91dCB0aGF0IHRoaXMgaHVydHMgZGVidWdnYWJpbGl0eSBvZiB0aGUKKyAgIGNvbmZpZ3VyYXRpb24gaW4gZ2VuZXJhbCwgYW5kIGhhcyBiZWVuIHJldmVydGVkLgorCisgKiAiZ2l0IGZldGNoIiBvdmVyIGh0dHAgYWR2ZXJ0aXNlZCB0aGF0IGl0IHN1cHBvcnRzICJkZWZsYXRlIiwgd2hpY2gKKyAgIGlzIG11Y2ggbGVzcyBjb21tb24sIGFuZCBkaWQgbm90IGFkdmVydGlzZSB0aGUgbW9yZSBjb21tb24gImd6aXAiIG9uCisgICBpdHMgQWNjZXB0LUVuY29kaW5nIGhlYWRlci4KKworICogImdpdCByZWNlaXZlLXBhY2siICh0aGUgY291bnRlcnBhcnQgdG8gImdpdCBwdXNoIikgZGlkIG5vdCBnaXZlCisgICBwcm9ncmVzcyBvdXRwdXQgd2hpbGUgcHJvY2Vzc2luZyBvYmplY3RzIGl0IHJlY2VpdmVkIHRvIHRoZSB1c2VyCisgICB3aGVuIHJ1biBvdmVyIHRoZSBzbWFydC1odHRwIHByb3RvY29sLgorCisgKiAiZ2l0IHN0YXR1cyIgaG9ub3JlZCB0aGUgaWdub3JlPWRpcnR5IHNldHRpbmdzIGluIC5naXRtb2R1bGVzIGJ1dAorICAgImdpdCBjb21taXQiIGRpZG4ndC4KKworQWxzbyBjb250YWlucyBhIGhhbmRmdWwgb2YgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmRhM2NjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuNC50eHQKQEAgLTAsMCArMSwyMyBAQAorR2l0IDEuNy4xMi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTIuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgdGhlIGR1bWItaHR0cCByZXZpc2lvbiB3YWxrZXIgY291bGQgc2VnZmF1bHQgd2hlbgorICAgY3VybCdzIG11bHRpIGludGVyZmFjZSB3YXMgdXNlZC4KKworICogSXQgd2FzIHBvc3NpYmxlIHRvIGdpdmUgc3BlY2lmaWMgcGF0aHMgZm9yICJhc2NpaWRvYyIgYW5kIG90aGVyCisgICB0b29scyBpbiB0aGUgZG9jdW1lbnRhdGlvbiB0b29sY2hhaW4sIGJ1dCBub3QgZm9yICJ4bWx0byIuCisKKyAqICJnaXR3ZWIiIGRpZCBub3QgZ2l2ZSB0aGUgY29ycmVjdCBjb21taXR0ZXIgdGltZXpvbmUgaW4gaXRzIGZlZWQKKyAgIG91dHB1dCBkdWUgdG8gYSB0eXBvLgorCisgKiBUaGUgIi1Yb3VycyIgKGFuZCBzaW1pbGFybHkgLVh0aGVpcnMpIGJhY2tlbmQgb3B0aW9uIHRvICJnaXQKKyAgIG1lcmdlIC1zIHJlY3Vyc2l2ZSIgd2FzIGlnbm9yZWQgZm9yIGJpbmFyeSBmaWxlcy4gIE5vdyBpdCBpcworICAgaG9ub3JlZC4KKworICogVGhlICJiaW5hcnkiIHN5bnRoZXRpYyBhdHRyaWJ1dGUgbWFkZSAiZGlmZiIgdG8gdHJlYXQgdGhlIHBhdGggYXMKKyAgIGJpbmFyeSwgYnV0IG5vdCAibWVyZ2UiLgorCitBbHNvIGNvbnRhaW5zIG1hbnkgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMGQ4YzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi50eHQKQEAgLTAsMCArMSwxMzYgQEAKK0dpdCB2MS43LjEyIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjExCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEdpdCBjYW4gYmUgdG9sZCB0byBub3JtYWxpemUgcGF0aG5hbWVzIGl0IHJlYWQgZnJvbSByZWFkZGlyKDMpIGFuZAorICAgYWxsIGFyZ3VtZW50cyBpdCBnb3QgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGludG8gcHJlY29tcG9zZWQgVVRGLTgKKyAgIChhc3N1bWluZyB0aGF0IHRoZXkgY29tZSBhcyBkZWNvbXBvc2VkIFVURi04KSwgaW4gb3JkZXIgdG8gd29yaworICAgYXJvdW5kIGlzc3VlcyBvbiBNYWMgT1MuCisKKyAgIEkgdGhpbmsgdGhlcmUgc3RpbGwgYXJlIG90aGVyIHBsYWNlcyB0aGF0IG5lZWQgY29udmVyc2lvbgorICAgKGUuZy4gcGF0aHMgdGhhdCBhcmUgcmVhZCBmcm9tIHN0ZGluIGZvciBzb21lIGNvbW1hbmRzKSwgYnV0IHRoaXMKKyAgIHNob3VsZCBiZSBhIGdvb2QgZmlyc3Qgc3RlcCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgorCisgKiBQZXItdXNlciAkSE9NRS8uZ2l0Y29uZmlnIGZpbGUgY2FuIG9wdGlvbmFsbHkgYmUgc3RvcmVkIGluCisgICAkSE9NRS8uY29uZmlnL2dpdC9jb25maWcgaW5zdGVhZCwgd2hpY2ggaXMgaW4gbGluZSB3aXRoIFhERy4KKworICogVGhlIHZhbHVlIG9mIGNvcmUuYXR0cmlidXRlc2ZpbGUgYW5kIGNvcmUuZXhjbHVkZXNmaWxlIGRlZmF1bHQgdG8KKyAgICRIT01FLy5jb25maWcvZ2l0L2F0dHJpYnV0ZXMgYW5kICRIT01FLy5jb25maWcvZ2l0L2lnbm9yZSByZXNwZWN0aXZlbHkKKyAgIHdoZW4gdGhlc2UgZmlsZXMgZXhpc3QuCisKKyAqIExvZ2ljIHRvIGRpc2FtYmlndWF0ZSBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZXMgaGF2ZSBiZWVuIHRhdWdodCB0bworICAgdGFrZSBhZHZhbnRhZ2Ugb2Ygb2JqZWN0IHR5cGVzIHRoYXQgYXJlIGV4cGVjdGVkIGluIHRoZSBjb250ZXh0LAorICAgZS5nLiBYWFhYWFggaW4gdGhlICJnaXQgZGVzY3JpYmUiIG91dHB1dCB2MS4yLjMtZ1hYWFhYWCBtdXN0IGJlIGEKKyAgIGNvbW1pdCBvYmplY3QsIG5vdCBhIGJsb2Igbm9yIGEgdHJlZS4gIFRoaXMgd2lsbCBoZWxwIHVzIHByb2xvbmcKKyAgIHRoZSBsaWZldGltZSBvZiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZXMuCisKKyAqICJnaXQgYXBwbHkiIGxlYXJuZWQgdG8gd2lnZ2xlIHRoZSBiYXNlIHZlcnNpb24gYW5kIHBlcmZvcm0gdGhyZWUtd2F5CisgICBtZXJnZSB3aGVuIGEgcGF0Y2ggZG9lcyBub3QgZXhhY3RseSBhcHBseSB0byB0aGUgdmVyc2lvbiB5b3UgaGF2ZS4KKworICogU2NyaXB0ZWQgUG9yY2VsYWluIHdyaXRlcnMgbm93IGhhdmUgYWNjZXNzIHRvIHRoZSBjcmVkZW50aWFsIEFQSSB2aWEKKyAgIHRoZSAiZ2l0IGNyZWRlbnRpYWwiIHBsdW1iaW5nIGNvbW1hbmQuCisKKyAqICJnaXQgaGVscCIgdXNlZCB0byBhbHdheXMgZGVmYXVsdCB0byAibWFuIiBmb3JtYXQgZXZlbiBvbiBwbGF0Zm9ybXMKKyAgIHdoZXJlICJtYW4iIHZpZXdlciBpcyBub3Qgd2lkZWx5IGF2YWlsYWJsZS4KKworICogImdpdCBjbG9uZSAtLWxvY2FsICRwYXRoIiBzdGFydGVkIGl0cyBsaWZlIGFzIGFuIGV4cGVyaW1lbnQgdG8KKyAgIG9wdGlvbmFsbHkgdXNlIGxpbmsvY29weSB3aGVuIGNsb25pbmcgYSByZXBvc2l0b3J5IG9uIHRoZSBkaXNrLCBidXQKKyAgIHdlIGRpZG4ndCBkZXByZWNhdGUgaXQgYWZ0ZXIgd2UgbWFkZSB0aGUgb3B0aW9uIGEgbm8tb3AgdG8gYWx3YXlzCisgICB1c2UgdGhlIG9wdGltaXphdGlvbi4gIFRoZSBjb21tYW5kIGxlYXJuZWQgIi0tbm8tbG9jYWwiIG9wdGlvbiB0bworICAgdHVybiB0aGlzIG9mZiwgYXMgYSBtb3JlIGV4cGxpY2l0IGFsdGVybmF0aXZlIG92ZXIgdXNlIG9mIGZpbGU6Ly8KKyAgIFVSTC4KKworICogImdpdCBmZXRjaCIgYW5kIGZyaWVuZHMgdXNlZCB0byBzYXkgInJlbW90ZSBzaWRlIGh1bmcgdXAKKyAgIHVuZXhwZWN0ZWRseSIgd2hlbiB0aGV5IGZhaWxlZCB0byBnZXQgcmVzcG9uc2UgdGhleSBleHBlY3QgZnJvbSB0aGUKKyAgIG90aGVyIHNpZGUsIGJ1dCBvbmUgY29tbW9uIHJlYXNvbiB3aHkgdGhleSBkb24ndCBnZXQgZXhwZWN0ZWQKKyAgIHJlc3BvbnNlIGlzIHRoYXQgdGhlIHJlbW90ZSByZXBvc2l0b3J5IGRvZXMgbm90IGV4aXN0IG9yIGNhbm5vdCBiZQorICAgcmVhZC4gVGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhpcyBjYXNlIHdhcyB1cGRhdGVkIHRvIGdpdmUgYmV0dGVyCisgICBoaW50cyB0byB0aGUgdXNlci4KKworICogImdpdCBoZWxwIC13ICRjbWQiIGNhbiBzaG93IEhUTUwgdmVyc2lvbiBvZiBkb2N1bWVudGF0aW9uIGZvcgorICAgImdpdC0kY21kIiBieSBzZXR0aW5nIGhlbHAuaHRtbHBhdGggdG8gc29tZXdoZXJlIG90aGVyIHRoYW4gdGhlCisgICBkZWZhdWx0IGxvY2F0aW9uIHdoZXJlIHRoZSBidWlsZCBwcm9jZWR1cmUgaW5zdGFsbHMgdGhlbSBsb2NhbGx5OworICAgdGhlIHZhcmlhYmxlIGNhbiBldmVuIHBvaW50IGF0IGEgaHR0cDovLyBVUkwuCisKKyAqICJnaXQgcmViYXNlIFstaV0gLS1yb290ICR0aXAiIGNhbiBub3cgYmUgdXNlZCB0byByZXdyaXRlIGFsbCB0aGUKKyAgIGhpc3RvcnkgbGVhZGluZyB0byAiJHRpcCIgZG93biB0byB0aGUgcm9vdCBjb21taXQuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkICIteCA8Y21kPiIgdG8gaW5zZXJ0ICJleGVjIDxjbWQ+IiBhZnRlcgorICAgZWFjaCBjb21taXQgaW4gdGhlIHJlc3VsdGluZyBoaXN0b3J5LgorCisgKiAiZ2l0IHN0YXR1cyIgZ2l2ZXMgZmluZXIgY2xhc3NpZmljYXRpb24gdG8gdmFyaW91cyBzdGF0ZXMgb2YgcGF0aHMKKyAgIGluIGNvbmZsaWN0ZWQgc3RhdGUgYW5kIG9mZmVyIGFkdmljZSBtZXNzYWdlcyBpbiBpdHMgb3V0cHV0LgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgbGVhcm5lZCB0byBkZWFsIHdpdGggbmVzdGVkIHN1Ym1vZHVsZSBzdHJ1Y3R1cmUKKyAgIHdoZXJlIGEgbW9kdWxlIGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBtb2R1bGUgd2hvc2Ugb3JpZ2luIGlzCisgICBzcGVjaWZpZWQgYXMgYSByZWxhdGl2ZSBVUkwgdG8gaXRzIHN1cGVycHJvamVjdCdzIG9yaWdpbi4KKworICogQSByYXRoZXIgaGVhdnktaXNoICJnaXQgY29tcGxldGlvbiIgc2NyaXB0IGhhcyBiZWVuIHNwbGl0IHRvIGNyZWF0ZQorICAgYSBzZXBhcmF0ZSAiZ2l0IHByb21wdGluZyIgc2NyaXB0LCB0byBoZWxwIGxhenktYXV0b2xvYWRpbmcgb2YgdGhlCisgICBjb21wbGV0aW9uIHBhcnQgd2hpbGUgbWFraW5nIHByb21wdGluZyBwYXJ0IGFsd2F5cyBhdmFpbGFibGUuCisKKyAqICJnaXR3ZWIiIHBheXMgYXR0ZW50aW9uIHRvIHZhcmlvdXMgZm9ybXMgb2YgY3JlZGl0cyB0aGF0IGFyZQorICAgc2ltaWxhciB0byAiU2lnbmVkLW9mZi1ieToiIGxpbmVzIGluIHRoZSBjb21taXQgb2JqZWN0cyBhbmQKKyAgIGhpZ2hsaWdodHMgdGhlbSBhY2NvcmRpbmdseS4KKworCitGb3JlaWduIEludGVyZmFjZQorCisgKiAibWVkaWF3aWtpIiByZW1vdGUgaGVscGVyIChpbiBjb250cmliLykgbGVhcm5lZCB0byBoYW5kbGUgZmlsZQorICAgYXR0YWNobWVudHMuCisKKyAqICJnaXQgcDQiIG5vdyB1c2VzICJKb2JzOiIgYW5kICJwNCBtb3ZlIiB3aGVuIGFwcHJvcHJpYXRlLgorCisgKiB2Y3Mtc3ZuIGhhcyBiZWVuIHVwZGF0ZWQgdG8gY2xlYW4tdXAgY29tcGlsYXRpb24sIGxpZnQgMzItYml0CisgICBsaW1pdGF0aW9ucywgZXRjLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgZXRjLiAocGxlYXNlIHJlcG9ydCBwb3NzaWJsZSByZWdyZXNzaW9ucykKKworICogU29tZSB0ZXN0cyBzaG93ZWQgZmFsc2UgZmFpbHVyZXMgY2F1c2VkIGJ5IGEgYnVnIGluIGVjcnlwdG9mcy4KKworICogV2Ugbm8gbG9uZ2VyIHVzZSBBc2NpaURvYzcgc3ludGF4IGluIG91ciBkb2N1bWVudGF0aW9uIGFuZCBmYXZvciBhCisgICBtb3JlIG1vZGVybiBzdHlsZS4KKworICogImdpdCBhbSAtLXJlYmFzaW5nIiBjb2RlcGF0aCB3YXMgdGF1Z2h0IHRvIGdyYWIgYXV0aG9yc2hpcCwgbG9nCisgICBtZXNzYWdlIGFuZCB0aGUgcGF0Y2ggdGV4dCBkaXJlY3RseSBvdXQgb2YgZXhpc3RpbmcgY29tbWl0cy4gIFRoaXMKKyAgIHdpbGwgaGVscCByZWJhc2luZyBjb21taXRzIHRoYXQgaGF2ZSBjb25mdXNpbmcgImRpZmYiIG91dHB1dCBpbgorICAgdGhlaXIgbG9nIG1lc3NhZ2VzLgorCisgKiAiZ2l0IGluZGV4LXBhY2siIGFuZCAiZ2l0IHBhY2stb2JqZWN0cyIgdXNlIHN0cmVhbWluZyBBUEkgdG8gcmVhZAorICAgZnJvbSB0aGUgb2JqZWN0IHN0b3JlIHRvIGF2b2lkIGhhdmluZyB0byBob2xkIGEgbGFyZ2UgYmxvYiBvYmplY3QKKyAgIGluLWNvcmUgd2hpbGUgdGhleSBhcmUgZG9pbmcgdGhlaXIgdGhpbmcuCisKKyAqIENvZGUgdG8gbWF0Y2ggcGF0aHMgd2l0aCBleGNsdWRlIHBhdHRlcm5zIGxlYXJuZWQgdG8gYXZvaWQgY2FsbGluZworICAgZm5tYXRjaCgpIGJ5IGNvbXBhcmluZyBmaXhlZCBsZWFkaW5nIHN1YnN0cmluZyBsaXRlcmFsbHkgd2hlbgorICAgcG9zc2libGUuCisKKyAqICJnaXQgbG9nIC1uIDEgLS0gcmFyZWx5LXRvdWNoZWQtcGF0aCIgd2FzIHNwZW5kaW5nIHVubmVjZXNzYXJ5CisgICBjeWNsZXMgYWZ0ZXIgc2hvd2luZyB0aGUgZmlyc3QgY2hhbmdlIHRvIGZpbmQgdGhlIG5leHQgb25lLCBvbmx5IHRvCisgICBkaXNjYXJkIGl0LgorCisgKiAiZ2l0IHN2biIgZ290IGEgbGFyZ2UtbG9va2luZyBjb2RlIHJlb3JnYW5pemF0aW9uIGF0IHRoZSBsYXN0CisgICBtaW51dGUgYmVmb3JlIHRoZSBjb2RlIGZyZWV6ZS4KKworCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuNy4xMQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjcuMTEgaW4gdGhlIG1haW50ZW5hbmNlCityZWxlYXNlcyBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMgdG8gdGhlbSBmb3IKK2RldGFpbHMpLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBhZGQiIHdhcyBjb25mdXNlZCB3aGVuIHRoZSBzdXBlcnByb2plY3QgZGlkIG5vdCBoYXZlCisgICBpdHMgcmVwb3NpdG9yeSBpbiBpdHMgdXN1YWwgcGxhY2UgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgR0lUX0RJUgorICAgYW5kIEdJVF9XT1JLX1RSRUUgd2FzIHVzZWQgdG8gYWNjZXNzIGl0LgorCisgKiAiZ2l0IGNvbW1pdCAtLWFtZW5kIiBsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbG9nIG1lc3NhZ2UgYW5kIHRoZW4gZGllZAorICAgd2hlbiB0aGUgaHVtYW4tcmVhZGFibGUgY29tbWl0dGVyIG5hbWUgd2FzIGdpdmVuIGluc3VmZmljaWVudGx5IGJ5CisgICBnZXRwd2VudCgzKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDNjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjEudHh0CkBAIC0wLDAgKzEsMjUgQEAKK0dpdCB2MS43LjIuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGluc3Rhd2ViIiB3YXNuJ3QgdXNlZnVsIHdoZW4geW91ciBBcGFjaGUgd2FzIGluc3RhbGxlZCB1bmRlciBhCisgICBuYW1lIG90aGVyIHRoYW4gYXBhY2hlMiAoZS5nLiAiaHR0cGQiKS4KKworICogU2ltaWxhcmx5LCAiZ2l0IHdlYi0tYnJvd3NlIiAoaW52b2tlZCBieSAiZ2l0IGhlbHAgLXciKSBsZWFybmVkIHRoYXQKKyAgIGNocm9tZSBicm93c2VyIGlzIHNvbWV0aW1lcyBjYWxsZWQgZ29vZ2xlLWNocm9tZS4KKworICogQW4gb3ZlcmxvbmcgbGluZSBhZnRlciAiLmdpdGRpcjogIiBpbiBhIGdpdCBmaWxlIGNhdXNlZCBvdXQgb2YgYm91bmRzCisgICBhY2Nlc3MgdG8gYW4gYXJyYXkgb24gdGhlIHN0YWNrLgorCisgKiAiZ2l0IGNvbmZpZyAtLXBhdGggY29uZi52YXIiIHRvIGF0dGVtcHQgdG8gZXhwYW5kIGEgdmFyaWFibGUgY29uZi52YXIKKyAgIHRoYXQgdXNlcyAifi8iIHNob3J0LWhhbmQgc2VnZmF1bHRlZCB3aGVuICRIT01FIGVudmlyb25tZW50IHZhcmlhYmxlCisgICB3YXMgbm90IHNldC4KKworICogRG9jdW1lbnRhdGlvbiBvbiBDeWd3aW4gZmFpbGVkIHRvIGJ1aWxkLgorCisgKiBUaGUgZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgcHVsbCBibGFyZyIgd2hlbiAnYmxhcmcnIGlzIGFuIHVua25vd24KKyAgIHJlbW90ZSBuYW1lIGhhcyBiZWVuIGltcHJvdmVkLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZWI2YTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjIudHh0CkBAIC0wLDAgKzEsMjIgQEAKK0dpdCB2MS43LjIuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjIuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogT2JqZWN0IHRyYW5zZmVyIG92ZXIgc21hcnQgaHR0cCB0cmFuc3BvcnQgZGVhZGxvY2tlZCB0aGUgY2xpZW50IHdoZW4KKyAgIHRoZSByZW1vdGUgSFRUUCBzZXJ2ZXIgcmV0dXJuZWQgYSBmYWlsdXJlLCBpbnN0ZWFkIG9mIGVycm9yaW5nIGl0IG91dC4KKworICogZ2l0LWd1aSBob25vcnMgY3VzdG9tIHRleHRjb252IGZpbHRlcnMgd2hlbiBzaG93aW5nIGRpZmYgYW5kIGJsYW1lOworCisgKiBnaXQgZGlmZiAtLXJlbGF0aXZlPXN1YmRpciAod2l0aG91dCB0aGUgbmVjZXNzYXJ5IHRyYWlsaW5nIC8pIGRpZCBub3QKKyAgIHdvcmsgd2VsbDsKKworICogImdpdCBkaWZmLWZpbGVzIC1wIC0tc3VibW9kdWxlIiB3YXMgcmVjZW50bHkgYnJva2VuOworCisgKiAiZ2l0IGNoZWNrb3V0IC1iIG4gJzovdG9rZW4nIiBkaWQgbm90IHdvcms7CisKKyAqICJnaXQgaW5kZXgtcGFjayIgKGhlbmNlICJnaXQgZmV0Y2gvY2xvbmUvcHVsbC9wdXNoIikgZW5hYmxlZCB0aGUgb2JqZWN0CisgICByZXBsYWNlbWVudCBtYWNoaW5lcnkgYnkgbWlzdGFrZSAoaXQgbmV2ZXIgc2hvdWxkIGhhdmUpOworCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMDk2MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjMudHh0CkBAIC0wLDAgKzEsMzkgQEAKK0dpdCB2MS43LjIuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjIuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogV2hlbiBwZW9wbGUgdHJ5IGluc2FuZSB0aGluZ3Mgc3VjaCBhcyBkZWx0YS1jb21wcmVzc2luZyA0R2lCIGZpbGVzLCB3ZQorICAgdGhyZXcgYW4gYXNzZXJ0aW9uIGZhaWx1cmUuCisKKyAqICJnaXQgYXJjaGl2ZSIgZ2F2ZSB0aGUgZnVsbCBjb21taXQgSUQgZm9yICIkRm9ybWF0OiVoJCIuCisKKyAqICJnaXQgZmV0Y2ggLS10YWdzIiBkaWQgbm90IGZldGNoIHRhZ3Mgd2hlbiByZW1vdGUuPG5pY2s+LnRhZ29wdCB3YXMgc2V0CisgICB0byAtLW5vLXRhZ3MuICBUaGUgY29tbWFuZCBsaW5lIG9wdGlvbiBub3cgb3ZlcnJpZGVzIHRoZSBjb25maWd1cmF0aW9uCisgICBzZXR0aW5nLgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShvYmplY3RuYW1lOnNob3J0KSciIGhhcyBiZWVuIGNvbXBsZXRlbHkKKyAgIGJyb2tlbiBmb3IgYSBsb25nIHRpbWUuCisKKyAqICJnaXQgZ2MiIGluY29ycmVjdGx5IHBydW5lZCBhIHJlcmVyZSByZWNvcmQgdGhhdCB3YXMgY3JlYXRlZCBsb25nCisgICB0aW1lIGFnbyBidXQgc3RpbGwgaXMgYWN0aXZlbHkgYW5kIHJlcGVhdGVkbHkgdXNlZC4KKworICogImdpdCBsb2cgLS1mb2xsb3cgLU0gLXAiIHdhcyBzZXJpb3VzbHkgYnJva2VuIGluIDEuNy4yLCByZXBvcnRpbmcKKyAgIGFzc2VydGlvbiBmYWlsdXJlLgorCisgKiBSdW5uaW5nICJnaXQgbG9nIiB3aXRoIGFuIGluY29ycmVjdCBvcHRpb24gc3RhcnRlZCBwYWdlciBuZXZlcnRoZWxlc3MsCisgICBmb3JjaW5nIHRoZSB1c2VyIHRvIGRpc21pc3MgaXQuCisKKyAqICJnaXQgcmViYXNlIiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIHRoZSB1c2VyIGhhcyBkaWZmLnJlbmFtZXMKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgc2V0LgorCisgKiBBbiBlYXJsaWVyIChhbmQgcmF0aGVyIG9sZCkgZml4IHRvICJnaXQgcmViYXNlIiBhZ2FpbnN0IGEgcmViYXNlZAorICAgdXBzdHJlYW0gYnJva2UgYSBtb3JlIG5vcm1hbCwgbm9uIHJlYmFzZWQgdXBzdHJlYW0gY2FzZSByYXRoZXIgYmFkbHksCisgICBhdHRlbXB0aW5nIHRvIHJlLWFwcGx5IHBhdGNoZXMgdGhhdCBhcmUgYWxyZWFkeSBhY2NlcHRlZCB1cHN0cmVhbS4KKworICogImdpdCBzdWJtb2R1bGUgc3luYyIgZm9yZ290IHRvIHVwZGF0ZSB0aGUgc3VwZXJwcm9qZWN0J3MgY29uZmlnIGZpbGUKKyAgIHdoZW4gc3VibW9kdWxlIFVSTCBjaGFuZ2VkLgorCisgKiAiZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lIiBkaWQgbm90IHJlbW92ZSBhIGRpcmVjdG9yeSB0aGF0IGhhcworICAgYmVjb21lIGVtcHR5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5NTBhNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuNC50eHQKQEAgLTAsMCArMSwxMCBAQAorR2l0IHYxLjcuMi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgcHJpbWFyaWx5IHRvIGJhY2twb3J0IHN1cHBvcnQgZm9yIHRoZSBuZXcgImFkZC5pZ25vcmVFcnJvcnMiCituYW1lIGdpdmVuIHRvIHRoZSBleGlzdGluZyAiYWRkLmlnbm9yZS1lcnJvcnMiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKK1RoZSBuZXh0IHZlcnNpb24sIEdpdCAxLjcuNCwgYW5kIGZ1dHVyZSB2ZXJzaW9ucywgd2lsbCBzdXBwb3J0IGJvdGgKK29sZCBhbmQgaW5jb3JyZWN0IG5hbWUgYW5kIHRoZSBuZXcgY29ycmVjdGVkIG5hbWUsIGJ1dCB3aXRob3V0IHRoaXMKK2JhY2twb3J0LCB1c2VycyB3aG8gd2FudCB0byB1c2UgdGhlIG5ldyBuYW1lICJhZGQuaWdub3JlRXJyb3JzIiBpbgordGhlaXIgcmVwb3NpdG9yaWVzIGNhbm5vdCB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY5NzZjNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuNS50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjEuNy4yLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4yLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXR3ZWIiIGNhbiBzb21ldGltZXMgYmUgdHJpY2tlZCBpbnRvIHBhcnJvdHRpbmcgYSBmaWxlbmFtZSBhcmd1bWVudAorICAgZ2l2ZW4gaW4gYSByZXF1ZXN0IHdpdGhvdXQgcHJvcGVybHkgcXVvdGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVjZjAxMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIudHh0CkBAIC0wLDAgKzEsMTUxIEBACitHaXQgdjEuNy4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogY29yZS5lb2wgY29uZmlndXJhdGlvbiBhbmQgdGV4dC9lb2wgYXR0cmlidXRlcyBhcmUgdGhlIG5ldyB3YXkgdG8gY29udHJvbAorICAgdGhlIGVuZCBvZiBsaW5lIGNvbnZlbnRpb25zIGZvciBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLgorCisgKiBjb3JlLmF1dG9jcmxmIGhhcyBiZWVuIG1hZGUgc2FmZXIgLSBpdCB3aWxsIG5vdyBvbmx5IGhhbmRsZSBsaW5lCisgICBlbmRpbmdzIGZvciBuZXcgZmlsZXMgYW5kIGZpbGVzIHRoYXQgYXJlIExGLW9ubHkgaW4gdGhlCisgICByZXBvc2l0b3J5LiBUbyBub3JtYWxpemUgY29udGVudCB0aGF0IGhhcyBiZWVuIGNoZWNrZWQgaW4gd2l0aAorICAgQ1JMRiwgdXNlIHRoZSBuZXcgZW9sL3RleHQgYXR0cmlidXRlcy4KKworICogVGhlIHdoaXRlc3BhY2UgcnVsZXMgdXNlZCBpbiAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZSIgYW5kICJnaXQgZGlmZiIKKyAgIGdhaW5lZCBhIG5ldyBtZW1iZXIgaW4gdGhlIGZhbWlseSAodGFiLWluLWluZGVudCkgdG8gaGVscCBwcm9qZWN0cyB3aXRoCisgICBwb2xpY3kgdG8gaW5kZW50IG9ubHkgd2l0aCBzcGFjZXMuCisKKyAqIFdoZW4gd29ya2luZyBmcm9tIGEgc3ViZGlyZWN0b3J5LCBieSBkZWZhdWx0LCBnaXQgZG9lcyBub3QgbG9vayBmb3IgaXRzCisgICBtZXRhZGlyZWN0b3J5ICIuZ2l0IiBhY3Jvc3MgZmlsZXN5c3RlbXMsIHByaW1hcmlseSB0byBoZWxwIHBlb3BsZSB3aG8KKyAgIGhhdmUgaW52b2NhdGlvbnMgb2YgZ2l0IGluIHRoZWlyIGN1c3RvbSBQUzEgcHJvbXB0cywgYXMgYmVpbmcgb3V0c2lkZQorICAgb2YgYSBnaXQgcmVwb3NpdG9yeSB3b3VsZCBsb29rIGZvciAiLmdpdCIgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIHJvb3QKKyAgIGRpcmVjdG9yeSwgYW5kIE5GUyBtb3VudHMgYXJlIG9mdGVuIHNsb3cuICBESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0KKyAgIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHRlbGwgZ2l0IG5vdCB0byBzdG9wIGF0IGEKKyAgIGZpbGVzeXN0ZW0gYm91bmRhcnkuCisKKyAqIFVzYWdlIGhlbHAgbWVzc2FnZXMgZ2VuZXJhdGVkIGJ5IHBhcnNlLW9wdGlvbnMgbGlicmFyeSAoaS5lLiBtb3N0CisgICBvZiB0aGUgUG9yY2VsYWluIGNvbW1hbmRzKSBhcmUgc2VudCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IG5vdy4KKworICogJzovPHN0cmluZz4nIG5vdGF0aW9uIHRvIGxvb2sgZm9yIGEgY29tbWl0IG5vdyB0YWtlcyByZWd1bGFyIGV4cHJlc3Npb24KKyAgIGFuZCBpdCBpcyBub3QgYW5jaG9yZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29tbWl0IGxvZyBtZXNzYWdlCisgICBhbnltb3JlICh0aGlzIGlzIGEgYmFja3dhcmQgaW5jb21wYXRpYmxlIGNoYW5nZSkuCisKKyAqICJnaXQiIHdyYXBwZXIgbGVhcm5lZCAiLWMgbmFtZT12YWx1ZSIgb3B0aW9uIHRvIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworICogSW1wcm92ZWQgcG9ydGFiaWxpdHkgZm9yIHZhcmlvdXMgcGxhdGZvcm1zIGluY2x1ZGluZyBvbGRlciBTdW5PUywKKyAgIEhQLVVYIDEwLzExLCBBSVgsIFRydTY0LCBldGMuIGFuZCBwbGF0Zm9ybXMgd2l0aCBQeXRob24gMi40LgorCisgKiBUaGUgbWVzc2FnZSBmcm9tICJnaXQgYW0gLTMiIGhhcyBiZWVuIGltcHJvdmVkIHdoZW4gY29uZmxpY3QKKyAgIHJlc29sdXRpb24gZW5kZWQgdXAgbWFraW5nIHRoZSBwYXRjaCBhIG5vLW9wLgorCisgKiAiZ2l0IGJsYW1lIiBhcHBsaWVzIHRoZSB0ZXh0Y29udiBmaWx0ZXIgdG8gdGhlIGNvbnRlbnRzIGl0IHdvcmtzCisgICBvbiwgd2hlbiBhdmFpbGFibGUuCisKKyAqICJnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3YnJhbmNoIiBpcyBzaW1pbGFyIHRvICItYiBuZXdicmFuY2giIGJ1dAorICAgcHJlcGFyZXMgdG8gY3JlYXRlIGEgcm9vdCBjb21taXQgdGhhdCBpcyBub3QgY29ubmVjdGVkIHRvIGFueSBleGlzdGluZworICAgY29tbWl0LgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBsZWFybmVkIHRvIHBpY2sgYSByYW5nZSBvZiBjb21taXRzCisgICAoZS5nLiAiY2hlcnJ5LXBpY2sgQS4uQiIgYW5kICJjaGVycnktcGljayAtLXN0ZGluIiksIHNvIGRpZCAiZ2l0CisgICByZXZlcnQiOyB0aGVzZSBkbyBub3Qgc3VwcG9ydCB0aGUgbmljZXIgc2VxdWVuY2luZyBjb250cm9sICJyZWJhc2UKKyAgIFstaV0iIGhhcywgdGhvdWdoLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBhbmQgImdpdCByZXZlcnQiIGxlYXJuZWQgLS1zdHJhdGVneSBvcHRpb24gdG8gc3BlY2lmeQorICAgdGhlIG1lcmdlIHN0cmF0ZWd5IHRvIGJlIHVzZWQgd2hlbiBwZXJmb3JtaW5nIHRocmVlLXdheSBtZXJnZXMuCisKKyAqICJnaXQgY3Zzc2VydmVyIiBjYW4gYmUgdG9sZCB0byB1c2UgcHNlcnZlcjsgaXRzIHBhc3N3b3JkIGZpbGUgY2FuIGJlCisgICBzdG9yZWQgb3V0c2lkZSB0aGUgcmVwb3NpdG9yeS4KKworICogVGhlIG91dHB1dCBmcm9tIHRoZSB0ZXh0Y29udiBmaWx0ZXIgdXNlZCBieSAiZ2l0IGRpZmYiIGNhbiBiZSBjYWNoZWQgdG8KKyAgIHNwZWVkIHVwIHRoZWlyIHJldXNlLgorCisgKiAiZ2l0IGRpZmYgLS13b3JkLWRpZmY9PG1vZGU+IiBleHRlbmRzIHRoZSBleGlzdGluZyAiLS1jb2xvci13b3JkcyIKKyAgIG9wdGlvbiwgbWFraW5nIGl0IG1vcmUgdXNlZnVsIGluIGNvbG9yLWNoYWxsZW5nZWQgZW52aXJvbm1lbnRzLgorCisgKiBUaGUgcmVnZXhwIHRvIGRldGVjdCBmdW5jdGlvbiBoZWFkZXJzIHVzZWQgYnkgImdpdCBkaWZmIiBmb3IgUEhQIGhhcworICAgYmVlbiBlbmhhbmNlZCBmb3IgdmlzaWJpbGl0eSBtb2RpZmllcnMgKHB1YmxpYywgcHJvdGVjdGVkLCBldGMuKSB0bworICAgYmV0dGVyIHN1cHBvcnQgUEhQNS4KKworICogImRpZmYubm9wcmVmaXgiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gaW1wbGljaXRseQorICAgYXNrIGZvciAiZGlmZiAtLW5vLXByZWZpeCIgYmVoYXZpb3VyLgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiIgbGVhcm5lZCAiJShvYmplY3RuYW1lOnNob3J0KSIgdGhhdCBnaXZlcyB0aGUgb2JqZWN0CisgICBuYW1lIGFiYnJldmlhdGVkLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCAtLXNpZ25hdHVyZSBvcHRpb24gYW5kIGZvcm1hdC5zaWduYXR1cmUKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gY3VzdG9taXplIHRoZSBlLW1haWwgc2lnbmF0dXJlIHVzZWQgaW4gdGhlCisgICBvdXRwdXQuCisKKyAqIFZhcmlvdXMgb3B0aW9ucyB0byAiZ2l0IGdyZXAiIChlLmcuIC0tY291bnQsIC0tbmFtZS1vbmx5KSB3b3JrIGJldHRlcgorICAgd2l0aCBiaW5hcnkgZmlsZXMuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCAiLU92aSIgdG8gb3BlbiB0aGUgZmlsZXMgd2l0aCBoaXRzIGluIHlvdXIgZWRpdG9yLgorCisgKiAiZ2l0IGhlbHAgLXciIGxlYXJuZWQgImNocm9tZSIgYW5kICJjaHJvbWl1bSIgYnJvd3NlcnMuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUiIHNob3dzIGNvbW1pdCBkZWNvcmF0aW9ucyBpbiB2YXJpb3VzIGNvbG91cnMuCisKKyAqICJnaXQgbG9nIC0tZm9sbG93IDxwYXRoPiIgZm9sbG93cyBhY3Jvc3MgY29waWVzIChpdCB1c2VkIHRvIG9ubHkgZm9sbG93CisgICByZW5hbWVzKS4gIFRoaXMgbWF5IG1ha2UgdGhlIHByb2Nlc3NpbmcgbW9yZSBleHBlbnNpdmUuCisKKyAqICJnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDo8dGVtcGxhdGU+IiBzcGVjaWZpZXIgbGVhcm5lZCAiJSA8c29tZXRoaW5nPiIKKyAgIG1hZ2ljIHRoYXQgaW5zZXJ0cyBhIHNwYWNlIG9ubHkgd2hlbiAlPHNvbWV0aGluZz4gZXhwYW5kcyB0byBhCisgICBub24tZW1wdHkgc3RyaW5nOyB0aGlzIGlzIHNpbWlsYXIgdG8gIiUrPHNvbWV0aGluZz4iIG1hZ2ljLCBidXQgaXMKKyAgIHVzZWZ1bCBpbiBhIGNvbnRleHQgdG8gZ2VuZXJhdGUgYSBzaW5nbGUgbGluZSBvdXRwdXQuCisKKyAqICJnaXQgbm90ZXMgcHJ1bmUiIGxlYXJuZWQgIi1uIiAoZHJ5LXJ1bikgYW5kICItdiIgb3B0aW9ucywgc2ltaWxhciB0bworICAgd2hhdCAiZ2l0IHBydW5lIiBoYXMuCisKKyAqICJnaXQgcGF0Y2gtaWQiIGNhbiBiZSBmZWQgYSBtYm94IHdpdGhvdXQgZ2V0dGluZyBjb25mdXNlZCBieSB0aGUKKyAgIHNpZ25hdHVyZSBsaW5lIGluIHRoZSBmb3JtYXQtcGF0Y2ggb3V0cHV0LgorCisgKiAiZ2l0IHJlbW90ZSIgbGVhcm5lZCAic2V0LWJyYW5jaGVzIiBzdWJjb21tYW5kLgorCisgKiAiZ2l0IHJldi1saXN0IEEuLkIiIGxlYXJuZWQgLS1hbmNlc3RyeS1wYXRoIG9wdGlvbiB0byBmdXJ0aGVyIGxpbWl0CisgICB0aGUgcmVzdWx0IHRvIHRoZSBjb21taXRzIHRoYXQgYXJlIG9uIHRoZSBhbmNlc3RyeSBjaGFpbiBiZXR3ZWVuIEEgYW5kCisgICBCIChpLmUuIGNvbW1pdHMgdGhhdCBhcmUgbm90IGRlc2NlbmRhbnRzIG9mIEEgYXJlIGV4Y2x1ZGVkKS4KKworICogImdpdCBzaG93IC01IiBpcyBlcXVpdmFsZW50IHRvICJnaXQgc2hvdyAtLWRvLXdhbGsgNSI7IHRoaXMgaXMgc2ltaWxhcgorICAgdG8gdGhlIHVwZGF0ZSB0byBtYWtlICJnaXQgc2hvdyBtYXN0ZXIuLm5leHQiIHdhbGsgdGhlIGhpc3RvcnksCisgICBpbnRyb2R1Y2VkIGluIDEuNi40LgorCisgKiAiZ2l0IHN0YXR1cyBbLXNdIC0taWdub3JlZCIgY2FuIGJlIHVzZWQgdG8gbGlzdCBpZ25vcmVkIHBhdGhzLgorCisgKiAiZ2l0IHN0YXR1cyAtcyAtYiIgc2hvd3MgdGhlIGN1cnJlbnQgYnJhbmNoIGluIHRoZSBvdXRwdXQuCisKKyAqICJnaXQgc3RhdHVzIiBsZWFybmVkICItLWlnbm9yZS1zdWJtb2R1bGVzIiBvcHRpb24uCisKKyAqIFZhcmlvdXMgImdpdHdlYiIgZW5oYW5jZW1lbnRzIGFuZCBjbGVhbi11cHMsIGluY2x1ZGluZyBzeW50YXgKKyAgIGhpZ2hsaWdodGluZywgInBsYWNrdXAiIHN1cHBvcnQgZm9yIGluc3Rhd2ViLCAuZmNnaSBzdWZmaXggdG8gcnVuCisgICBpdCBhcyBGYXN0Q0dJIHNjcmlwdCwgZXRjLgorCisgKiBUaGUgdGVzdCBoYXJuZXNzIGhhcyBiZWVuIHVwZGF0ZWQgdG8gcHJvZHVjZSBUQVAtZnJpZW5kbHkgb3V0cHV0LgorCisgKiBNYW55IGRvY3VtZW50YXRpb24gaW1wcm92ZW1lbnQgcGF0Y2hlcyBhcmUgYWxzbyBpbmNsdWRlZC4KKworCitGaXhlcyBzaW5jZSB2MS43LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjcuMS5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogV2UgZGlkbid0IFVSTCBkZWNvZGUgImZpbGU6Ly8vcGF0aC90by9yZXBvIiBjb3JyZWN0bHkgd2hlbiBwYXRoL3RvL3JlcG8KKyAgIGhhZCBwZXJjZW50LWVuY29kZWQgY2hhcmFjdGVycyAoNjM4Nzk0YywgOWQyZTk0MiwgY2U4M2VkYSwgM2M3M2ExZCkuCisKKyAqICJnaXQgY2xvbmUiIGRpZCBub3QgY29uZmlndXJlIHJlbW90ZS5vcmlnaW4udXJsIGNvcnJlY3RseSBmb3IgYmFyZQorICAgY2xvbmVzIChkZjYxYzg4OSkuCisKKyAqICJnaXQgZGlmZiAtLWdyYXBoIiB3b3JrcyBiZXR0ZXIgd2l0aCAiLS1jb2xvci13b3JkcyIgYW5kIG90aGVyIG9wdGlvbnMKKyAgICg4MWZhMDI0Li40Mjk3YzBhKS4KKworICogImdpdCBkaWZmIiBjb3VsZCBzaG93IGFtYmlndW91cyBhYmJyZXZpYXRpb24gb2YgYmxvYiBvYmplY3QgbmFtZXMgb24KKyAgIGl0cyAiaW5kZXgiIGxpbmUgKDNlNWExODgpLgorCisgKiAiZ2l0IHJlc2V0IC0taGFyZCIgc3RhcnRlZCBmcm9tIGEgd3JvbmcgZGlyZWN0b3J5IGFuZCBhIHdvcmtpbmcgdHJlZSBpbgorICAgYSBub25zdGFuZGFyZCBsb2NhdGlvbiBpcyBpbiB1c2UgZ290IGNvbmZ1c2VkICg1NjBmYjZhMSkuCisKKyAqICJnaXQgcmVhZC10cmVlIC1tIEEgQiIgdXNlZCB0byBzd2l0Y2ggdG8gYnJhbmNoIEIgd2hpbGUgcmV0YWluaW5nCisgICBsb2NhbCBjaGFuZ2VzIGFkZGVkIGFuIGluY29ycmVjdCBjYWNoZS10cmVlIGluZm9ybWF0aW9uIChiMWY0NzUxNCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDJjOTNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4xLnR4dApAQCAtMCwwICsxLDE0IEBACitHaXQgdjEuNy4zLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBzdGFzaCBzaG93IHN0YXNoQHskbn0iIHdhcyBhY2NpZGVudGFsbHkgYnJva2VuIGluIDEuNy4zICgiZ2l0CisgICBzdGFzaCBzaG93IiB3aXRob3V0IGFueSBhcmd1bWVudCBzdGlsbCB3b3JrZWQsIHRob3VnaCkuCisKKyAqICJnaXQgc3Rhc2ggYnJhbmNoICRicmFuY2ggc3Rhc2hAeyRufSIgd2FzIGFjY2lkZW50YWxseSBicm9rZW4gaW4KKyAgIDEuNy4zIGFuZCBzdGFydGVkIGRyb3BwaW5nIHRoZSBuYW1lZCBzdGFzaCBldmVuIHdoZW4gYnJhbmNoIGNyZWF0aW9uCisgICBmYWlsZWQuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5M2I4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuMi50eHQKQEAgLTAsMCArMSw1IEBACitHaXQgdjEuNy4zLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBwcmltYXJpbHkgdG8gcHVzaCBvdXQgbWFueSBkb2N1bWVudGF0aW9uIGZpeGVzIGFjY3VtdWxhdGVkIHNpbmNlCit0aGUgMS43LjMuMSByZWxlYXNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyYjI0NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuMy50eHQKQEAgLTAsMCArMSw1NCBAQAorR2l0IHYxLjcuMy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIGFkZGl0aW9uIHRvIHRoZSB1c3VhbCBmaXhlcywgdGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgc3VwcG9ydCBmb3IKK3RoZSBuZXcgImFkZC5pZ25vcmVFcnJvcnMiIG5hbWUgZ2l2ZW4gdG8gdGhlIGV4aXN0aW5nICJhZGQuaWdub3JlLWVycm9ycyIKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKK1RoZSBuZXh0IHZlcnNpb24sIEdpdCAxLjcuNCwgYW5kIGZ1dHVyZSB2ZXJzaW9ucywgd2lsbCBzdXBwb3J0IGJvdGgKK29sZCBhbmQgaW5jb3JyZWN0IG5hbWUgYW5kIHRoZSBuZXcgY29ycmVjdGVkIG5hbWUsIGJ1dCB3aXRob3V0IHRoaXMKK2JhY2twb3J0LCB1c2VycyB3aG8gd2FudCB0byB1c2UgdGhlIG5ldyBuYW1lICJhZGQuaWdub3JlRXJyb3JzIiBpbgordGhlaXIgcmVwb3NpdG9yaWVzIGNhbm5vdCB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0LgorCitGaXhlcyBzaW5jZSB2MS43LjMuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhcHBseSIgc2VnZmF1bHRlZCB3aGVuIGEgYm9ndXMgaW5wdXQgaXMgZmVkIHRvIGl0LgorCisgKiBSdW5uaW5nICJnaXQgY2hlcnJ5LXBpY2sgLS1mZiIgb24gYSByb290IGNvbW1pdCBzZWdmYXVsdGVkLgorCisgKiAiZGlmZiIsICJibGFtZSIgYW5kIGZyaWVuZHMgaW5jb3JyZWN0bHkgYXBwbGllZCB0ZXh0Y29udiBmaWx0ZXJzIHRvCisgICBzeW1saW5rcy4KKworICogSGlnaGxpZ2h0aW5nIG9mIHdoaXRlc3BhY2UgYnJlYWthZ2UgaW4gImRpZmYiIG91dHB1dCB3YXMgc2hvd2luZworICAgaW5jb3JyZWN0IGFtb3VudCBvZiB3aGl0ZXNwYWNlcyB3aGVuIGJsYW5rLWF0LWVvbCBpcyBzZXQgYW5kIHRoZSBsaW5lCisgICBjb25zaXN0ZWQgb25seSBvZiB3aGl0ZXNwYWNlcyBhbmQgYSBUQUIuCisKKyAqICJkaWZmIiB3YXMgb3Zlcmx5IGluZWZmaWNpZW50IHdoZW4gdHJ5aW5nIHRvIGZpbmQgdGhlIGxpbmUgdG8gdXNlIGZvcgorICAgdGhlIGZ1bmN0aW9uIGhlYWRlciAoaS5lLiBlcXVpdmFsZW50IHRvIC0tc2hvdy1jLWZ1bmN0aW9uIG9mIEdOVSBkaWZmKS4KKworICogImdpdCBpbWFwLXNlbmQiIGRlcGVuZHMgb24gbGliY3J5cHRvIGJ1dCBvdXIgYnVpbGQgcnVsZSByZWxpZWQgb24gdGhlCisgICBsaW5rZXIgdG8gaW1wbGljaXRseSBsaW5rIGl0IHZpYSBsaWJzc2wsIHdoaWNoIHdhcyB3cm9uZy4KKworICogImdpdCBtZXJnZS1maWxlIiBjYW4gYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgc3ViZGlyZWN0b3J5IG5vdy4KKworICogImdpdCByZXBhY2sgLWYiIGV4cGFuZGVkIGFuZCByZWNvbXByZXNzZWQgbm9uLWRlbHRhIG9iamVjdHMgaW4gdGhlCisgICBleGlzdGluZyBwYWNrLCB3aGljaCB3YXMgd2FzdGVmdWwuICBVc2UgbmV3ICItRiIgb3B0aW9uIGlmIHlvdSByZWFsbHkKKyAgIHdhbnQgdG8gKGUuZy4gd2hlbiBjaGFuZ2luZyB0aGUgcGFjay5jb21wcmVzc2lvbiBsZXZlbCkuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1mb3JtYXQ9Ii4uLiV4MDAuLi4iIGluY29ycmVjdGx5IGNob3BwZWQgaXRzIG91dHB1dAorICAgYXQgTlVMLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgY29ycmVjdGx5IHJlbW92ZSBkdXBsaWNhdGUgbWFpbCBhZGRyZXNzZXMgZnJvbQorICAgdGhlIENjOiBoZWFkZXIgdGhhdCBhcHBlYXIgb24gdGhlIFRvOiBoZWFkZXIuCisKKyAqIFRoZSBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi9jb21wbGV0aW9uKSBpZ25vcmVkIGxpZ2h0d2VpZ2h0IHRhZ3MKKyAgIGluIF9fZ2l0X3BzMSgpLgorCisgKiAiZ2l0LWJsYW1lIiBtb2RlIChpbiBjb250cmliL2VtYWNzKSBkaWRuJ3Qgc2F5IChyZXF1aXJlICdmb3JtYXQtc3BlYykKKyAgIGV2ZW4gdGhvdWdoIGl0IGRlcGVuZHMgb24gaXQ7IGl0IGRpZG4ndCB3b3JrIHdpdGggRW1hY3MgMjIgb3Igb2xkZXIKKyAgIHVubGVzcyBHbnVzIGlzIHVzZWQuCisKKyAqICJnaXQtcDQiIChpbiBjb250cmliLykgZGlkIG5vdCBjb3JyZWN0bHkgaGFuZGxlIGRlbGV0ZWQgZmlsZXMuCisKK090aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGFsc28gaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTdmN2MxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy40LnR4dApAQCAtMCwwICsxLDQ1IEBACitHaXQgdjEuNy4zLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4zLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFNtYXJ0IEhUVFAgdHJhbnNwb3J0IHVzZWQgdG8gaW5jb3JyZWN0bHkgcmV0cnkgcmVkaXJlY3RlZCBQT1NUCisgICByZXF1ZXN0IHdpdGggR0VUIHJlcXVlc3QuCisKKyAqICJnaXQgYXBwbHkiIGRpZCBub3QgY29ycmVjdGx5IGhhbmRsZSBwYXRjaGVzIHRoYXQgb25seSBjaGFuZ2UgbW9kZXMKKyAgIGlmIHRvbGQgdG8gYXBwbHkgd2hpbGUgc3RyaXBwaW5nIGxlYWRpbmcgcGF0aHMgd2l0aCAtcCBvcHRpb24uCisKKyAqICJnaXQgYXBwbHkiIGNhbiBkZWFsIHdpdGggcGF0Y2hlcyB3aXRoIHRpbWV6b25lIGZvcm1hdHRlZCB3aXRoIGEKKyAgIGNvbG9uIGJldHdlZW4gdGhlIGhvdXJzIGFuZCBtaW51dGVzIHBhcnQgKGUuZy4gIi0wODowMCIgaW5zdGVhZCBvZgorICAgIi0wODAwIikuCisKKyAqICJnaXQgY2hlY2tvdXQiIHJlbW92ZWQgYW4gdW50cmFja2VkIGZpbGUgImZvbyIgZnJvbSB0aGUgd29ya2luZworICAgdHJlZSB3aGVuIHN3aXRjaGluZyB0byBhIGJyYW5jaCB0aGF0IGNvbnRhaW5zIGEgdHJhY2tlZCBwYXRoCisgICAiZm9vL2JhciIuICBQcmV2ZW50IHRoaXMsIGp1c3QgbGlrZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29uZmxpY3RpbmcKKyAgIHBhdGggd2VyZSAiZm9vIiAoYzc1MmU3Zi4uNzk4MDg3MmQpLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBvciAiZ2l0IHJldmVydCIgcmVmdXNlZCB0byB3b3JrIHdoZW4gYSBwYXRoIHRoYXQKKyAgIHdvdWxkIGJlIG1vZGlmaWVkIGJ5IHRoZSBvcGVyYXRpb24gd2FzIHN0YXQtZGlydHkgd2l0aG91dCBhIHJlYWwKKyAgIGRpZmZlcmVuY2UgaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgorCisgKiAiZ2l0IGRpZmYgLS1jaGVjayIgcmVwb3J0ZWQgYW4gaW5jb3JyZWN0IGxpbmUgbnVtYmVyIGZvciBhZGRlZAorICAgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBvZiBmaWxlLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgZmFpbGVkIHRvIGJ1aWxkIHVuZGVyIE5PX09QRU5TU0wuCisKKyAqIFNldHRpbmcgbG9nLmRlY29yYXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gIjAiIG9yICIxIiB0byBtZWFuCisgICAiZmFsc2UiIG9yICJ0cnVlIiBkaWQgbm90IHdvcmsuCisKKyAqICJnaXQgcHVzaCIgb3ZlciBkdW1iIEhUVFAgcHJvdG9jb2wgZGlkIG5vdCB3b3JrIGFnYWluc3QgV2ViREFWCisgICBzZXJ2ZXJzIHRoYXQgZGlkIG5vdCB0ZXJtaW5hdGUgYSBjb2xsZWN0aW9uIG5hbWUgd2l0aCBhIHNsYXNoLgorCisgKiAiZ2l0IHRhZyAtdiIgZGlkIG5vdCB3b3JrIHdpdGggR1BHIHNpZ25hdHVyZXMgaW4gcmZjMTk5MSBtb2RlLgorCisgKiBUaGUgcG9zdC1yZWNlaXZlLWVtYWlsIHNhbXBsZSBob29rIHdhcyBhY2NpZGVudGFsbHkgYnJva2VuIGluIDEuNy4zLjMKKyAgIHVwZGF0ZS4KKworICogImdpdHdlYiIgY2FuIHNvbWV0aW1lcyBiZSB0cmlja2VkIGludG8gcGFycm90dGluZyBhIGZpbGVuYW1lIGFyZ3VtZW50CisgICBnaXZlbiBpbiBhIHJlcXVlc3Qgd2l0aG91dCBwcm9wZXJseSBxdW90aW5nLgorCitPdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBhbHNvIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmM2JhNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuNS50eHQKQEAgLTAsMCArMSwzNCBAQAorR2l0IDEuNy4zLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCisgKiBUaGUgeGZ1bmNuYW1lIHBhdHRlcm4gdXNlZCBieSAiZ2l0IGRpZmYiIGFuZCAiZ2l0IGdyZXAiIHRvIHNob3cgdGhlCisgICBsYXN0IG5vdGFibGUgbGluZSBpbiBjb250ZXh0IHdlcmUgYnJva2VuIGZvciBweXRob24gYW5kIHJ1YnkgZm9yIGEgbG9uZworICAgdGltZS4KKworICogImdpdCBtZXJnZSIgaW50byBhbiB1bmJvcm4gYnJhbmNoIHJlbW92ZWQgYW4gdW50cmFja2VkIGZpbGUgImZvbyIgZnJvbQorICAgdGhlIHdvcmtpbmcgdHJlZSB3aGVuIG1lcmdlZCBicmFuY2ggaGFkICJmb28iICh0aGlzIGZpeCB3YXMgYWxyZWFkeSBpbgorICAgMS43LjMuMyBidXQgd2FzIG9taXR0ZWQgZnJvbSB0aGUgcmVsZWFzZSBub3RlcyBieSBtaXN0YWtlKS4KKworICogImdpdCBzdGF0dXMgLXMiIGRpZCBub3QgcXVvdGUgdW5wcmludGFibGUgY2hhcmFjdGVycyBpbiBwYXRocyBhcworICAgZG9jdW1lbnRlZC4KKworICogImdpdCBhbSAtLWFib3J0IiB1c2VkIHRvIGFsd2F5cyByZXNldCB0byB0aGUgY29tbWl0IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgIHRoZSBsYXN0ICJhbSIgaW52b2NhdGlvbiB0aGF0IGhhcyBzdG9wcGVkLCBsb3NpbmcgYW55IHVucmVsYXRlZCBjb21taXRzCisgICB0aGF0IG1heSBoYXZlIGJlZW4gbWFkZSBzaW5jZSB0aGVuLiAgTm93IGl0IHJlZnJhaW5zIGZyb20gZG9pbmcgc28gYW5kCisgICBpbnN0ZWFkIGlzc3VlcyBhIHdhcm5pbmcuCisKKyAqICJnaXQgYmxhbWUiIGluY29ycmVjdGx5IHJldXNlZCBib2d1c2x5IGNhY2hlZCByZXN1bHQgb2YgdGV4dGNvbnYKKyAgIGZpbHRlciBmb3IgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlLgorCisgKiAiZ2l0IGNvbW1pdCIgdXNlZCB0byBhYm9ydCBhZnRlciB0aGUgdXNlciBlZGl0ZWQgdGhlIGxvZyBtZXNzYWdlCisgICB3aGVuIHRoZSBjb21taXR0ZXIgaW5mb3JtYXRpb24gd2FzIG5vdCBjb3JyZWN0bHkgc2V0IHVwLiAgSXQgbm93CisgICBhYm9ydHMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZGl0b3IuCisKKyAqICJnaXQgY29tbWl0IC0tZGF0ZT1pbnZhbGlkIiB1c2VkIHRvIHNpbGVudGx5IGlnbm9yZSB0aGUgaW5jb3JyZWN0bHkKKyAgIHNwZWNpZmllZCBkYXRlOyBpdCBpcyBub3cgZGlhZ25vc2VkIGFzIGFuIGVycm9yLgorCisgKiAiZ2l0IHJlYmFzZSAtLXNraXAiIHRvIHNraXAgdGhlIGxhc3QgY29tbWl0IGluIGEgc2VyaWVzIHVzZWQgdG8gZmFpbAorICAgdG8gcnVuIHBvc3QtcmV3cml0ZSBob29rIGFuZCB0byBjb3B5IG5vdGVzIGZyb20gb2xkIGNvbW1pdHMgdGhhdCBoYXZlCisgICBzdWNjZXNzZnVsbHkgYmVlbiByZWJhc2VkIHNvIGZhci4gIE5vdyBpdCBkbyAoYmFja21lcmdlIGVmODhhZDIpLgorCisgKiAiZ2l0d2ViIiB0cmllZCB0byBzaG93IGEgd3JvbmcgZmVlZCBsb2dvIHdoZW4gbm9uZSB3YXMgc3BlY2lmaWVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDljMzMxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy50eHQKQEAgLTAsMCArMSw3NiBAQAorR2l0IHYxLjcuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGdpdC1ndWksIG5vdyBhdCB2ZXJzaW9uIDAuMTMuMCwgZ290IHZhcmlvdXMgdXBkYXRlcyBhbmQgYSBuZXcKKyAgIG1haW50YWluZXIsIFBhdCBUaG95dHMuCisKKyAqIEdpdHdlYiBhbGxvd3MgaXRzIGNvbmZpZ3VyYXRpb24gdG8gY2hhbmdlIHBlciBlYWNoIHJlcXVlc3Q7IGl0IHVzZWQgdG8KKyAgIHJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gb25jZSB1cG9uIHN0YXJ0dXAuCisKKyAqIFdoZW4gZ2l0IGZpbmRzIGEgY29ycnVwdCBvYmplY3QsIGl0IG5vdyByZXBvcnRzIHRoZSBmaWxlIHRoYXQgY29udGFpbnMKKyAgIGl0LgorCisgKiAiZ2l0IGNoZWNrb3V0IC1CIDxpdD4iIGlzIGEgc2hvcnRlciB3YXkgdG8gc2F5ICJnaXQgYnJhbmNoIC1mIDxpdD4iCisgICBmb2xsb3dlZCBieSAiZ2l0IGNoZWNrb3V0IDxpdD4iLgorCisgKiBXaGVuICJnaXQgY2hlY2tvdXQiIG9yICJnaXQgbWVyZ2UiIHJlZnVzZSB0byBwcm9jZWVkIGluIG9yZGVyIHRvCisgICBwcm90ZWN0IGxvY2FsIG1vZGlmaWNhdGlvbiB0byB5b3VyIHdvcmtpbmcgdHJlZSwgdGhleSB1c2VkIHRvIHN0b3AKKyAgIGFmdGVyIHNob3dpbmcganVzdCBvbmUgcGF0aCB0aGF0IG1pZ2h0IGJlIGxvc3QuICBUaGV5IG5vdyBzaG93IGFsbCwKKyAgIGluIGEgZm9ybWF0IHRoYXQgaXMgZWFzaWVyIHRvIHJlYWQuCisKKyAqICJnaXQgY2xlYW4iIGxlYXJuZWQgIi1lIiAoIi0tZXhjbHVkZSIpIG9wdGlvbi4KKworICogSHVuayBoZWFkZXJzIHByb2R1Y2VkIGZvciBDIyBmaWxlcyBieSAiZ2l0IGRpZmYiIGFuZCBmcmllbmRzIHNob3cgbW9yZQorICAgcmVsZXZhbnQgY29udGV4dCB0aGFuIGJlZm9yZS4KKworICogZGlmZi5pZ25vcmVzdWJtb2R1bGVzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gc3F1ZWxjaCB0aGUKKyAgIGRpZmZlcmVuY2VzIGluIHN1Ym1vZHVsZXMgcmVwb3J0ZWQgd2hlbiBydW5uaW5nIGNvbW1hbmRzIChlLmcuICJkaWZmIiwKKyAgICJzdGF0dXMiLCBldGMuKSBhdCB0aGUgc3VwZXJwcm9qZWN0IGxldmVsLgorCisgKiBodHRwLnVzZXJhZ2VudCBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkIHRvIGxpZSB3aG8geW91IGFyZSB0byB5b3VyCisgICByZXN0cmljdGl2ZSBmaXJld2FsbC4KKworICogImdpdCByZWJhc2UgLS1zdHJhdGVneSA8cz4iIGxlYXJuZWQgIi1YIiBvcHRpb24gdG8gcGFzcyBleHRyYSBvcHRpb25zCisgICB0aGF0IGFyZSB1bmRlcnN0b29kIGJ5IHRoZSBjaG9zZW4gbWVyZ2Ugc3RyYXRlZ3kuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkICJleGVjIiB0aGF0IHlvdSBjYW4gaW5zZXJ0IGludG8gdGhlIGluc24gc2hlZXQKKyAgIHRvIHJ1biBhIGNvbW1hbmQgYmV0d2VlbiBpdHMgc3RlcHMuCisKKyAqICJnaXQgcmViYXNlIiBiZXR3ZWVuIGJyYW5jaGVzIHRoYXQgaGF2ZSBtYW55IGJpbmFyeSBjaGFuZ2VzIHRoYXQgZG8KKyAgIG5vdCBjb25mbGljdCBzaG91bGQgYmUgZmFzdGVyLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgcGVla3MgaW50byByZWJhc2UuYXV0b3NxdWFzaCBjb25maWd1cmF0aW9uIGFuZCBhY3RzIGFzCisgICBpZiB5b3UgZ2F2ZSAtLWF1dG9zcXVhc2ggZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKKworRml4ZXMgc2luY2UgdjEuNy4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS43LjIuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKKyAqICJnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIiAod2hpY2ggaXMgdGhlIGRlZmF1bHQpIGRpZCBub3QgaGFuZGxlIGNhc2VzCisgICB3aGVyZSBhIGRpcmVjdG9yeSBiZWNvbWVzIGEgZmlsZSAob3IgdmljZSB2ZXJzYSkgdmVyeSB3ZWxsLgorCisgKiAiZ2l0IGZldGNoIiBhbmQgZnJpZW5kcyB3ZXJlIGFjY2lkZW50YWxseSBicm9rZW4gZm9yIHVybCB3aXRoICIrIiBpbgorICAgaXRzIHBhdGgsIGUuZy4gImdpdDovL2dpdC5nbm9tZS5vcmcvZ3RrKyIuCisKKyAqICJnaXQgZmV0Y2ggJHVybCIgKGkuZS4gd2l0aG91dCByZWZzcGVjcykgd2FzIGJyb2tlbiBmb3IgcXVpdGUgc29tZQorICAgdGltZSwgaWYgdGhlIGN1cnJlbnQgYnJhbmNoIGhhcHBlbiB0byBiZSB0cmFja2luZyBzb21lIHJlbW90ZS4KKworICogImdpdCBscy10cmVlIGRpciBkaXJnYXJiYWdlIiwgd2hlbiAiZGlyIiB3YXMgYSBkaXJlY3RvcnksCisgICBpbmNvcnJlY3RseSByZWN1cnNlZCBpbnRvICJkaXIiLgorCisgKiAiZ2l0IG5vdGUgcmVtb3ZlIiBjcmVhdGVkIHVubmVjZXNzYXJ5IGV4dHJhIGNvbW1pdCB3aGVuIG5hbWVkIG9iamVjdAorICAgZGlkIG5vdCBoYXZlIGFueSBub3RlIHRvIGJlZ2luIHdpdGguCisKKyAqICJnaXQgcmViYXNlIiBkaWQgbm90IHdvcmsgd2VsbCBpZiB5b3UgaGFkIGRpZmYubm9wcmVmaXggY29uZmlndXJlZC4KKworICogImdpdCAtYyBmb289YmFyIHN1YmNtZCIgZGlkIG5vdCB3b3JrIHdlbGwgZm9yIHN1YmNtZCB0aGF0IGlzIG5vdAorICAgaW1wbGVtZW50ZWQgYXMgYSBidWlsdC1pbiBjb21tYW5kLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5MjNhNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuMS50eHQKQEAgLTAsMCArMSwyNyBAQAorR2l0IHYxLjcuNC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE9uIFdpbmRvd3MgcGxhdGZvcm0sIHRoZSBjb2RlcGF0aCB0byBzcGF3biBhIG5ldyBjaGlsZCBwcm9jZXNzIGZvcmdvdAorICAgdG8gZmlyc3QgZmx1c2ggdGhlIG91dHB1dCBidWZmZXIuCisKKyAqICJnaXQgYnVuZGxlIiBkaWQgbm90IHVzZSBPRlNfREVMVEEgZW5jb2RpbmcsIG1ha2luZyBpdHMgb3V0cHV0IGEgZmV3CisgICBwZXItY2VudCBsYXJnZXIgdGhhbiBuZWNlc3NhcmlseS4KKworICogVGhlIG9wdGlvbiB0byB0ZWxsICJnaXQgY2xvbmUiIHRvIHJlY3Vyc2UgaW50byB0aGUgc3VibW9kdWxlcyB3YXMKKyAgIG1pc3NwZWxsZWQgd2l0aCBhbiB1bmRlcnNjb3JlICItLXJlY3Vyc2Vfc3VibW9kdWxlcyIuCisKKyAqICJnaXQgZGlmZiAtLWNhY2hlZCBIRUFEIiBiZWZvcmUgdGhlIGZpcnN0IGNvbW1pdCBkb2VzIHdoYXQgYW4gZW5kIHVzZXIKKyAgIHdvdWxkIGV4cGVjdCAobmFtZWx5LCBzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIHdpdGhvdXQgZnVydGhlciAiZ2l0CisgICBhZGQiKS4KKworICogImdpdCBmYXN0LWltcG9ydCIgZGlkbid0IGFjY2VwdCB0aGUgY29tbWFuZCB0byBhc2sgZm9yICJub3RlcyIgZmVhdHVyZQorICAgdG8gYmUgcHJlc2VudCBpbiBpdHMgaW5wdXQgc3RyZWFtLCBldmVuIHRob3VnaCBpdCB3YXMgY2FwYWJsZSBvZiB0aGUKKyAgIGZlYXR1cmUuCisKKyAqICJnaXQgZnNjayIgZ2F2ZSB1cCBzY2FubmluZyBsb29zZSBvYmplY3QgZmlsZXMgaW4gZGlyZWN0b3JpZXMgd2l0aAorICAgZ2FyYmFnZSBmaWxlcy4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjRjZTFmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC4yLnR4dApAQCAtMCwwICsxLDU4IEBACitHaXQgdjEuNy40LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy40LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE1hbnkgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIHRvIG1hdGNoICJnaXQgY21kIC1oIiBvdXRwdXQgYW5kIHRoZQorICAgZ2l0LWNtZCBtYW51YWwgcGFnZS4KKworICogV2UgdXNlZCB0byBrZWVwIG9uZSBmaWxlIGRlc2NyaXB0b3Igb3BlbiBmb3IgZWFjaCBhbmQgZXZlcnkgcGFja2ZpbGUKKyAgIHRoYXQgd2UgaGF2ZSBhIG1tYXAgd2luZG93IG9uIGl0IChyZWFkOiAiaW4gdXNlIiksIGV2ZW4gd2hlbiBmb3IgdmVyeQorICAgdGlueSBwYWNrZmlsZXMuICBXZSBub3cgY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBlYXJseSB3aGVuIHRoZSBlbnRpcmUKKyAgIHBhY2tmaWxlIGZpdHMgaW5zaWRlIG9uZSBtbWFwIHdpbmRvdy4KKworICogImdpdCBiaXNlY3QgdmlzdWFsaXplIiB0cmllZCB0byBydW4gImdpdGsiIGluIHdpbmRvd2luZworICAgZW52aXJvbm1lbnRzIGV2ZW4gd2hlbiAiZ2l0ayIgaXMgbm90IGluc3RhbGxlZCwgcmVzdWx0aW5nIGluIGEKKyAgIHN0cmFuZ2UgZXJyb3IgbWVzc2FnZS4KKworICogImdpdCBjbG9uZSAvbm8vc3VjaC9wYXRoIiBkaWQgbm90IGZhaWwgY29ycmVjdGx5LgorCisgKiAiZ2l0IGNvbW1pdCIgZGlkIG5vdCBjb3JyZWN0bHkgZXJyb3Igb3V0IHdoZW4gdGhlIHVzZXIgYXNrZWQgdG8gdXNlIGEKKyAgIG5vbiBleGlzdGVudCBmaWxlIGFzIHRoZSBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZS4KKworICogImdpdCBkaWZmIC0tc3RhdCAtQiIgcmFuIG9uIGJpbmFyeSBmaWxlcyBjb3VudGVkIHRoZSBjaGFuZ2VzIGluIGxpbmVzLAorICAgd2hpY2ggd2FzIG5vbnNlbnNpY2FsLgorCisgKiAiZ2l0IGRpZmYgLU0iIG9wcG9ydHVuaXN0aWNhbGx5IGRldGVjdGVkIGNvcGllcywgd2hpY2ggd2FzIG5vdAorICAgbmVjZXNzYXJpbHkgYSBnb29kIHRoaW5nLCBlc3BlY2lhbGx5IHdoZW4gaXQgaXMgaW50ZXJuYWxseSBydW4gYnkKKyAgIHJlY3Vyc2l2ZSBtZXJnZS4KKworICogImdpdCBkaWZmdG9vbCIgZGlkbid0IHRlbGwgKGcpdmltZGlmZiB0aGF0IHRoZSBmaWxlcyBpdCBpcyByZWFkaW5nIGFyZQorICAgdG8gYmUgb3BlbmVkIHJlYWQtb25seS4KKworICogImdpdCBtZXJnZSIgZGlkbid0IHBheSBhdHRlbnRpb24gdG8gcHJlcGFyZS1jb21taXQtbXNnIGhvb2ssIGV2ZW4KKyAgIHRob3VnaCBpZiBhIG1lcmdlIGlzIGNvbmZsaWN0ZWQgYW5kIG1hbnVhbGx5IHJlc29sdmVkLCB0aGUgc3Vic2VxdWVudAorICAgImdpdCBjb21taXQiIHdvdWxkIGhhdmUgdHJpZ2dlcmVkIHRoZSBob29rLCB3aGljaCB3YXMgaW5jb25zaXN0ZW50LgorCisgKiAiZ2l0IHBhdGNoLWlkIiAoYW5kIGNvbW1hbmRzIGxpa2UgImZvcm1hdC1wYXRjaCAtLWlnbm9yZS1pbi11cHN0cmVhbSIKKyAgIHRoYXQgdXNlIGl0IGFzIHRoZWlyIGludGVybmFsIGxvZ2ljKSBoYW5kbGVkIGNoYW5nZXMgdG8gZmlsZXMgdGhhdCBlbmQKKyAgIHdpdGggaW5jb21wbGV0ZSBsaW5lcyBpbmNvcnJlY3RseS4KKworICogVGhlIG9mZmljaWFsIHZhbHVlIHRvIHRlbGwgImdpdCBwdXNoIiB0byBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBiYWNrCisgICB0byB1cGRhdGUgdGhlIHVwc3RyZWFtIGJyYW5jaCBpdCBmb3JrZWQgZnJvbSBpcyBub3cgY2FsbGVkICJ1cHN0cmVhbSIuCisgICBUaGUgb2xkIG5hbWUgInRyYWNraW5nIiBpcyBhbmQgd2lsbCBiZSBzdXBwb3J0ZWQuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgdXNlZCB0byBob25vciB0aGUgLS1tZXJnZS8tLXJlYmFzZSBvcHRpb24gKG9yCisgICBjb3JyZXNwb25kaW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzKSBldmVuIGZvciBhIG5ld2x5IGNsb25lZAorICAgc3VicHJvamVjdCwgd2hpY2ggbWFkZSBubyBzZW5zZSAoc28vc3VibW9kdWxlLW5vLXVwZGF0ZS1maXJzdC10aW1lKS4KKworICogZ2l0d2ViJ3MgImhpZ2hsaWdodCIgaW50ZXJmYWNlIG1pc2hhbmRsZWQgdGFicy4KKworICogZ2l0d2ViIGRpZG4ndCB1bmRlcnN0YW5kIHRpbWV6b25lcyB3aXRoIEdNVCBvZmZzZXQgdGhhdCBpcyBub3QKKyAgIG11bHRpcGxlIG9mIGEgd2hvbGUgaG91ci4KKworICogZ2l0d2ViIGhhZCBhIGZldyBmb3J3YXJkLWluY29tcGF0aWJsZSBzeW50YWN0aWMgY29uc3RydWN0cyBhbmQKKyAgIGFsc28gdXNlZCBpbmNvcnJlY3QgdmFyaWFibGUgd2hlbiBzaG93aW5nIHRoZSBmaWxlIG1vZGUgaW4gYSBkaWZmLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYTNkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LjMudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dpdCB2MS43LjQuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjQuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhcHBseSIgdXNlZCB0byBjb25mdXNlIGxpbmVzIHVwZGF0ZWQgYnkgcHJldmlvdXMgaHVua3MgYXMgbGluZXMKKyAgIHRoYXQgZXhpc3RlZCBiZWZvcmUgd2hlbiBhcHBseWluZyBhIGh1bmssIGNvbnRyaWJ1dGluZyBtaXNhcHBsaWNhdGlvbgorICAgb2YgcGF0Y2hlcyB3aXRoIG9mZnNldHMuCisKKyAqICJnaXQgYnJhbmNoIC0tdHJhY2siIChhbmQgImdpdCBjaGVja291dCAtLXRyYWNrIC0tYnJhbmNoIikgdXNlZCB0bworICAgYWxsb3cgc2V0dGluZyB1cCBhIHJhbmRvbSBub24tYnJhbmNoIHRoYXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBmb2xsb3cKKyAgIGFzIHRoZSAidXBzdHJlYW0iLiAgVGhlIGNvbW1hbmQgY29ycmVjdGx5IGRpYWdub3NlcyBpdCBhcyBhbiBlcnJvci4KKworICogImdpdCBjaGVja291dCAkb3RoZXJfYnJhbmNoIiBzaWxlbnRseSByZW1vdmVkIHVudHJhY2tlZCBzeW1ib2xpYyBsaW5rcworICAgaW4gdGhlIHdvcmtpbmcgdHJlZSB0aGF0IGFyZSBpbiB0aGUgd2F5IGluIG9yZGVyIHRvIGNoZWNrIG91dCBwYXRocworICAgdW5kZXIgaXQgZnJvbSB0aGUgbmFtZWQgYnJhbmNoLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgZGlkIG5vdCBiYWlsIG91dCBpbW1lZGlhdGVseSB3aGVuIHRoZSBjdnMgc2VydmVyIGNhbm5vdAorICAgYmUgcmVhY2hlZCwgc3Bld2luZyB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlcyB0aGF0IGNvbXBsYWluIGFib3V0IHRoZQorICAgc2VydmVyIHJlc3BvbnNlIHRoYXQgaXQgbmV2ZXIgZ290LgorCisgKiAiZ2l0IGRpZmYgLS1xdWlldCIgZGlkIG5vdCB3b3JrIHZlcnkgd2VsbCB3aXRoIHRoZSAiLS1kaWZmLWZpbHRlciIKKyAgIG9wdGlvbi4KKworICogImdpdCBncmVwIC1uIiBsYWNrZWQgYSBsb25nLWhhbmQgc3lub255bSAtLWxpbmUtbnVtYmVyLgorCisgKiAiZ2l0IHN0YXNoIGFwcGx5IiByZXBvcnRlZCB0aGUgcmVzdWx0IG9mIGl0cyBvcGVyYXRpb24gYnkgcnVubmluZworICAgImdpdCBzdGF0dXMiIGZyb20gdGhlIHRvcC1sZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlOyBpdCBzaG91bGQgKGFuZAorICAgbm93IGRvZXMpIHJ1biBpdCBmcm9tIHRoZSB1c2VyJ3Mgd29ya2luZyBkaXJlY3RvcnkuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYwNmUwNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuNC50eHQKQEAgLTAsMCArMSwzNSBAQAorR2l0IHYxLjcuNC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDb21waWxhdGlvbiBvZiBzaGExX2ZpbGUuYyBvbiBCU0QgcGxhdGZvcm1zIHdlcmUgYnJva2VuIGR1ZSB0byBvdXIKKyAgIHJlY2VudCB1c2Ugb2YgZ2V0cmxpbWl0KCkgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9yZXNvdXJjZS5oPi4KKworICogImdpdCBjb25maWciIGRpZCBub3QgZGlhZ25vc2UgaW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBkaWQgbm90IHdyYXAgYSBsb25nIHN1YmplY3QgbGluZSB0aGF0IHJlc3VsdGVkIGZyb20KKyAgIHJmYzIwNDcgZW5jb2RpbmcuCisKKyAqICJnaXQgaW5zdGF3ZWIiIHNob3VsZCB3b3JrIGJldHRlciBhZ2FpbiB3aXRoIHBsYWNrdXAuCisKKyAqICJnaXQgbG9nIC0tbWF4LWNvdW50PTQgLVNmb29iYXIiIG5vdyBzaG93cyA0IGNvbW1pdHMgdGhhdCBjaGFuZ2VzIHRoZQorICAgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHN0cmluZyAiZm9vYmFyIjsgaXQgdXNlZCB0byBzY2FuIG9ubHkgZm9yIDQKKyAgIGNvbW1pdHMgYW5kIHRoZW4gZW1pdHRlZCBvbmx5IG1hdGNoaW5nIG9uZXMuCisKKyAqICJnaXQgbG9nIC0tZmlyc3QtcGFyZW50IC0tYm91bmRhcnkgJGNeLi4kYyIgc2VnZmF1bHRlZCBvbiBhIG1lcmdlLgorCisgKiAiZ2l0IHB1bGwiIGludG8gYW4gZW1wdHkgYnJhbmNoIHNob3VsZCBoYXZlIGJlaGF2ZWQgYXMgaWYKKyAgIGZhc3QtZm9yd2FyZGluZyBmcm9tIGVtcHRpbmVzcyB0byB0aGUgdmVyc2lvbiBiZWluZyBwdWxsZWQsIHdpdGgKKyAgIHRoZSB1c3VhbCBwcm90ZWN0aW9uIGFnYWluc3Qgb3ZlcndyaXRpbmcgdW50cmFja2VkIGZpbGVzLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgdGhhdCBpcyBydW4gd2hpbGUgYSBtZXJnZSBpbiB0aGUgc3VwZXJwcm9qZWN0IGlzIGluCisgICBjb25mbGljdGVkIHN0YXRlIHRyaWVkIHRvIHByb2Nlc3MgZWFjaCBjb25mbGljdGVkIHN1Ym1vZHVsZSB1cCB0bworICAgdGhyZWUgdGltZXMuCisKKyAqICJnaXQgc3RhdHVzIiBzcGVudCBhbGwgdGhlIGVmZm9ydCB0byBub3RpY2UgcmFjaWx5LWNsZWFuIGluZGV4IGVudHJpZXMKKyAgIGJ1dCBkaWRuJ3QgdXBkYXRlIHRoZSBpbmRleCBmaWxlIHRvIGhlbHAgbGF0ZXIgb3BlcmF0aW9ucyBnbyBmYXN0ZXIgaW4KKyAgIHNvbWUgY2FzZXMuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdhMGVlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuNS50eHQKQEAgLTAsMCArMSw0IEBACitHaXQgdjEuNy40LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBjb250YWlucyBvbmx5IG1pbm9yIGRvY3VtZW50YXRpb24gZml4ZXMgYWNjdW11bGF0ZWQgc2luY2UgMS43LjQuNC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDViY2E3MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQudHh0CkBAIC0wLDAgKzEsMTU2IEBACitHaXQgdjEuNy40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGRvY3VtZW50YXRpb24gTWFrZWZpbGUgbm93IGFzc3VtZXMgYnkgZGVmYXVsdCBhc2NpaWRvYyA4IGFuZAorICAgZG9jYm9vay14c2wgPj0gMS43My4gSWYgeW91IGhhdmUgb2xkZXIgdmVyc2lvbnMsIHlvdSBjYW4gc2V0CisgICBBU0NJSURPQzcgYW5kIEFTQ0lJRE9DX1JPRkYsIHJlc3BlY3RpdmVseS4KKworICogVGhlIG9wdGlvbiBwYXJzZXJzIG9mIHZhcmlvdXMgY29tbWFuZHMgdGhhdCBjcmVhdGUgbmV3IGJyYW5jaGVzIChvcgorICAgcmVuYW1lIGV4aXN0aW5nIG9uZXMgdG8gYSBuZXcgbmFtZSkgd2VyZSB0b28gbG9vc2UgYW5kIHVzZXJzIHdlcmUKKyAgIGFsbG93ZWQgdG8gZ2l2ZSBhIGJyYW5jaCBhIG5hbWUgdGhhdCBiZWdpbnMgd2l0aCBhIGRhc2ggYnkgY3JlYXRpdmUKKyAgIGFidXNlIG9mIHRoZWlyIGNvbW1hbmQgbGluZSBvcHRpb25zLCB3aGljaCBvbmx5IGxlZCB0byBidXJuaW5nCisgICB0aGVtc2VsdmVzLiAgVGhlIG5hbWUgb2YgYSBicmFuY2ggY2Fubm90IGJlZ2luIHdpdGggYSBkYXNoIG5vdy4KKworICogU3lzdGVtLXdpZGUgZmFsbGJhY2sgZGVmYXVsdCBhdHRyaWJ1dGVzIGNhbiBiZSBzdG9yZWQgaW4KKyAgIC9ldGMvZ2l0YXR0cmlidXRlczsgdGhlIGNvcmUuYXR0cmlidXRlc2ZpbGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4KKyAgIGJlIHVzZWQgdG8gY3VzdG9taXplIHRoZSBwYXRoIHRvIHRoaXMgZmlsZS4KKworICogVGhlIHRocmVhZCBzdHJ1Y3R1cmUgZ2VuZXJhdGVkIGJ5ICJnaXQgc2VuZC1lbWFpbCIgaGFzIGNoYW5nZWQKKyAgIHNsaWdodGx5LiAgU2V0dGluZyB0aGUgY292ZXIgbGV0dGVyIG9mIHRoZSBsYXRlc3Qgc2VyaWVzIGFzIGEgcmVwbHkKKyAgIHRvIHRoZSBjb3ZlciBsZXR0ZXIgb2YgdGhlIHByZXZpb3VzIHNlcmllcyB3aXRoIC0taW4tcmVwbHktdG8gdXNlZAorICAgdG8gbWFrZSB0aGUgbmV3IGNvdmVyIGxldHRlciBhbmQgYWxsIHRoZSBwYXRjaGVzIHJlcGxpZXMgdG8gdGhlCisgICBjb3ZlciBsZXR0ZXIgb2YgdGhlIHByZXZpb3VzIHNlcmllczsgdGhpcyBoYXMgYmVlbiBjaGFuZ2VkIHRvIG1ha2UKKyAgIHRoZSBwYXRjaGVzIGluIHRoZSBuZXcgc2VyaWVzIHJlcGxpZXMgdG8gdGhlIG5ldyBjb3ZlciBsZXR0ZXIuCisKKyAqIFRoZSBCYXNoIGNvbXBsZXRpb24gc2NyaXB0IGluIGNvbnRyaWIvIGhhcyBiZWVuIGFkanVzdGVkIHRvIGJlIHVzYWJsZSB3aXRoCisgICBCYXNoIDQgKG9wdGlvbnMgd2l0aCAnPXZhbHVlJyBkaWRuJ3QgY29tcGxldGUpLiAgSXQgaGFzIGJlZW4gYWxzbyBtYWRlCisgICB1c2FibGUgd2l0aCB6c2guCisKKyAqIERpZmZlcmVudCBwYWdlcnMgY2FuIGJlIGNob3NlbiBkZXBlbmRpbmcgb24gd2hpY2ggc3ViY29tbWFuZCBpcworICAgYmVpbmcgcnVuIHVuZGVyIHRoZSBwYWdlciwgdXNpbmcgdGhlICJwYWdlci48c3ViY29tbWFuZD4iIHZhcmlhYmxlLgorCisgKiBUaGUgaGFyZGNvZGVkIHRhYi13aWR0aCBvZiA4IHRoYXQgaXMgdXNlZCBpbiB3aGl0ZXNwYWNlIGJyZWFrYWdlIGNoZWNrcyBpcyBub3cKKyAgIGNvbmZpZ3VyYWJsZSB2aWEgdGhlIGF0dHJpYnV0ZXMgbWVjaGFuaXNtLgorCisgKiBTdXBwb3J0IG9mIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMgKGkuZS4gImNvcmUuaWdub3JlY2FzZSIpIGhhcworICAgYmVlbiBpbXByb3ZlZC4gIEZvciBleGFtcGxlLCB0aGUgZ2l0aWdub3JlIG1lY2hhbmlzbSBkaWRuJ3QgcGF5IGF0dGVudGlvbgorICAgdG8gY2FzZSBpbnNlbnNpdGl2aXR5LgorCisgKiBUaGUgPHRyZWU+OjxwYXRoPiBzeW50YXggZm9yIG5hbWluZyBhIGJsb2IgaW4gYSB0cmVlLCBhbmQgdGhlIDo8cGF0aD4KKyAgIHN5bnRheCBmb3IgbmFtaW5nIGEgYmxvYiBpbiB0aGUgaW5kZXggKGUuZy4gIm1hc3RlcjpNYWtlZmlsZSIsCisgICAiOmhlbGxvLmMiKSBoYXZlIGJlZW4gZXh0ZW5kZWQuICBZb3UgY2FuIHN0YXJ0IDxwYXRoPiB3aXRoICIuLyIgdG8KKyAgIGltcGxpY2l0bHkgaGF2ZSB0aGUgKHN1YilkaXJlY3RvcnkgeW91IGFyZSBpbiBwcmVmaXhlZCB0byB0aGUKKyAgIGxvb2t1cC4gIFNpbWlsYXJseSwgIjouLi9NYWtlZmlsZSIgZnJvbSBhIHN1YmRpcmVjdG9yeSB3b3VsZCBtZWFuCisgICAidGhlIE1ha2VmaWxlIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGluIHRoZSBpbmRleCIuCisKKyAqICJnaXQgYmxhbWUiIGxlYXJuZWQgdGhlIC0tc2hvdy1lbWFpbCBvcHRpb24gdG8gZGlzcGxheSB0aGUgZS1tYWlsCisgICBhZGRyZXNzZXMgaW5zdGVhZCBvZiB0aGUgbmFtZXMgb2YgYXV0aG9ycy4KKworICogImdpdCBjb21taXQiIGxlYXJuZWQgdGhlIC0tZml4dXAgYW5kIC0tc3F1YXNoIG9wdGlvbnMgdG8gaGVscCBsYXRlciBpbnZvY2F0aW9uCisgICBvZiBpbnRlcmFjdGl2ZSByZWJhc2UuCisKKyAqIENvbW1hbmQgbGluZSBvcHRpb25zIHRvICJnaXQgY3ZzaW1wb3J0IiB3aG9zZSBuYW1lcyBhcmUgaW4gY2FwaXRhbAorICAgbGV0dGVycyAoLUEsIC1NLCAtUiBhbmQgLVMpIGNhbiBub3cgYmUgc3BlY2lmaWVkIGFzIHRoZSBkZWZhdWx0IGluCisgICB0aGUgLmdpdC9jb25maWcgZmlsZSBieSB0aGVpciBsb25nZXIgbmFtZXMgKGN2c2ltcG9ydC5hdXRob3JzRmlsZSwKKyAgIGN2c2ltcG9ydC5tZXJnZVJlZ2V4LCBjdnNpbXBvcnQudHJhY2tSZXZpc2lvbnMsIGN2c2ltcG9ydC5pZ25vcmVQYXRocykuCisKKyAqICJnaXQgZGFlbW9uIiBjYW4gYmUgYnVpbHQgaW4gdGhlIE1pbkdXIGVudmlyb25tZW50LgorCisgKiAiZ2l0IGRhZW1vbiIgY2FuIHRha2UgbW9yZSB0aGFuIG9uZSAtLWxpc3RlbiBvcHRpb24gdG8gbGlzdGVuIHRvCisgICBtdWx0aXBsZSBhZGRyZXNzZXMuCisKKyAqICJnaXQgZGVzY3JpYmUgLS1leGFjdC1tYXRjaCIgd2FzIG9wdGltaXplZCBub3QgdG8gcmVhZCBjb21taXQKKyAgIG9iamVjdHMgdW5uZWNlc3NhcmlseS4KKworICogImdpdCBkaWZmIiBhbmQgImdpdCBncmVwIiBsZWFybmVkIHdoYXQgZnVuY3Rpb25zIGFuZCBzdWJyb3V0aW5lcworICAgaW4gRm9ydHJhbiwgUGFzY2FsIGFuZCBQZXJsIGxvb2sgbGlrZS4KKworICogImdpdCBmZXRjaCIgbGVhcm5lZCB0aGUgIi0tcmVjdXJzZS1zdWJtb2R1bGVzIiBvcHRpb24uCisKKyAqICJnaXQgbWVyZ2V0b29sIiB0ZWxscyB2aW0vZ3ZpbSB0byBzaG93IGEgdGhyZWUtd2F5IGRpZmYgYnkgZGVmYXVsdAorICAgKHVzZSB2aW1kaWZmMi9ndmltZGlmZjIgYXMgdGhlIHRvb2wgbmFtZSBmb3Igb2xkIGJlaGF2aW9yKS4KKworICogImdpdCBsb2cgLUc8cGF0dGVybj4iIGxpbWl0cyB0aGUgb3V0cHV0IHRvIGNvbW1pdHMgd2hvc2UgY2hhbmdlIGhhcworICAgYWRkZWQgb3IgZGVsZXRlZCBsaW5lcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBwYXR0ZXJuLgorCisgKiAiZ2l0IHJlYWQtdHJlZSIgd2l0aCBubyBhcmd1bWVudCBhcyBhIHdheSB0byBlbXB0eSB0aGUgaW5kZXggaXMKKyAgIGRlcHJlY2F0ZWQ7IHdlIG1pZ2h0IHdhbnQgdG8gcmVtb3ZlIGl0IGluIHRoZSBmdXR1cmUuICBVc2VycyBjYW4KKyAgIHVzZSB0aGUgbmV3IC0tZW1wdHkgb3B0aW9uIHRvIGJlIG1vcmUgZXhwbGljaXQgaW5zdGVhZC4KKworICogImdpdCByZXBhY2sgLWYiIGRvZXMgbm90IHNwZW5kIGN5Y2xlcyB0byByZWNvbXByZXNzIG9iamVjdHMgaW4gdGhlCisgICBub24tZGVsdGEgcmVwcmVzZW50YXRpb24gYW55bW9yZSAodXNlIC1GIGlmIHlvdSByZWFsbHkgbWVhbiBpdAorICAgZS5nLiBhZnRlciB5b3UgY2hhbmdlZCB0aGUgY29yZS5jb21wcmVzc2lvbiB2YXJpYWJsZSBzZXR0aW5nKS4KKworICogImdpdCBtZXJnZSAtLWxvZyIgdXNlZCB0byBsaW1pdCB0aGUgcmVzdWx0aW5nIG1lcmdlIGxvZyB0byAyMAorICAgZW50cmllczsgdGhpcyBpcyBub3cgY3VzdG9taXphYmxlIGJ5IGdpdmluZyBlLmcuICItLWxvZz00NyIuCisKKyAqICJnaXQgbWVyZ2UiIG1heSB3b3JrIGJldHRlciB3aGVuIGFsbCBmaWxlcyB3ZXJlIG1vdmVkIG91dCBvZiBhCisgICBkaXJlY3RvcnkgaW4gb25lIGJyYW5jaCB3aGlsZSBhIG5ldyBmaWxlIGlzIGNyZWF0ZWQgaW4gcGxhY2Ugb2YgdGhhdAorICAgZGlyZWN0b3J5IGluIHRoZSBvdGhlciBicmFuY2guCisKKyAqICJnaXQgbWVyZ2UiIGxlYXJuZWQgdGhlICItLWFib3J0IiBvcHRpb24sIHN5bm9ueW1vdXMgdG8KKyAgICJnaXQgcmVzZXQgLS1tZXJnZSIgd2hlbiBhIG1lcmdlIGlzIGluIHByb2dyZXNzLgorCisgKiAiZ2l0IG5vdGVzIiBsZWFybmVkIHRoZSAibWVyZ2UiIHN1YmNvbW1hbmQgdG8gbWVyZ2Ugbm90ZXMgcmVmcy4KKyAgIEluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IG1hbnVhbCBjb25mbGljdCByZXNvbHV0aW9uLCB0aGVyZSBhcmUKKyAgIGFsc28gc2V2ZXJhbCBub3RlcyBtZXJnZSBzdHJhdGVnaWVzIGZvciBhdXRvbWF0aWNhbGx5IHJlc29sdmluZworICAgbm90ZXMgbWVyZ2UgY29uZmxpY3RzLgorCisgKiAiZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2giIGNhbiB1c2UgU0hBLTEgb2JqZWN0IG5hbWVzIHRvIG5hbWUgdGhlCisgICBjb21taXQgd2hpY2ggaXMgdG8gYmUgZml4ZWQgdXAgKGUuZy4gImZpeHVwISBlODNjNTE2MyIpLgorCisgKiBUaGUgZGVmYXVsdCAicmVjdXJzaXZlIiBtZXJnZSBzdHJhdGVneSBsZWFybmVkIHRoZSAtLXJlbmFtZS10aHJlc2hvbGQKKyAgIG9wdGlvbiB0byBpbmZsdWVuY2UgdGhlIHJlbmFtZSBkZXRlY3Rpb24sIHNpbWlsYXIgdG8gdGhlIC1NIG9wdGlvbgorICAgb2YgImdpdCBkaWZmIi4gIEZyb20gdGhlICJnaXQgbWVyZ2UiIGZyb250ZW5kLCB0aGUgIi1YPHN0cmF0ZWd5IG9wdGlvbj4iCisgICBpbnRlcmZhY2UsIGUuZy4gImdpdCBtZXJnZSAtWHJlbmFtZS10aHJlc2hvbGQ9NTAlIC4uLiIsIGNhbiBiZSB1c2VkCisgICB0byB0cmlnZ2VyIHRoaXMuCisKKyAqIFRoZSAicmVjdXJzaXZlIiBzdHJhdGVneSBhbHNvIGxlYXJuZWQgdG8gaWdub3JlIHZhcmlvdXMgd2hpdGVzcGFjZQorICAgY2hhbmdlczsgdGhlIG1vc3Qgbm90YWJsZSBpcyAtWGlnbm9yZS1zcGFjZS1hdC1lb2wuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCAiLS10by1jbWQiLCBzaW1pbGFyIHRvICItLWNjLWNtZCIsIHRvIHJlYWQKKyAgIHRoZSByZWNpcGllbnQgbGlzdCBmcm9tIGEgY29tbWFuZCBvdXRwdXQuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCB0byByZWFkIGFuZCB1c2UgIlRvOiIgZnJvbSBpdHMgaW5wdXQgZmlsZXMuCisKKyAqIHlvdSBjYW4gZXh0ZW5kICJnaXQgc2hlbGwiLCB3aGljaCBpcyBvZnRlbiB1c2VkIG9uIGJveGVzIHRoYXQgYWxsb3cKKyAgIGdpdC1vbmx5IGxvZ2luIG92ZXIgc3NoIGFzIGxvZ2luIHNoZWxsLCB3aXRoIGEgY3VzdG9tIHNldCBvZgorICAgY29tbWFuZHMuCisKKyAqIFRoZSBjdXJyZW50IGJyYW5jaCBuYW1lIGluICJnaXQgc3RhdHVzIiBvdXRwdXQgY2FuIGJlIGNvbG9yZWQgZGlmZmVyZW50bHkKKyAgIGZyb20gdGhlIGdlbmVyaWMgaGVhZGVyIGNvbG9yIGJ5IHNldHRpbmcgdGhlICJjb2xvci5zdGF0dXMuYnJhbmNoIiB2YXJpYWJsZS4KKworICogImdpdCBzdWJtb2R1bGUgc3luYyIgdXBkYXRlcyBtZXRhaW5mb3JtYXRpb24gZm9yIGFsbCBzdWJtb2R1bGVzLAorICAgbm90IGp1c3QgdGhlIG9uZXMgdGhhdCBoYXZlIGJlZW4gY2hlY2tlZCBvdXQuCisKKyAqIGdpdHdlYiBjYW4gdXNlIGEgY3VzdG9tICdoaWdobGlnaHQnIGNvbW1hbmQgd2l0aCBpdHMgY29uZmlndXJhdGlvbiBmaWxlLgorCisgKiBvdGhlciBnaXR3ZWIgdXBkYXRlcy4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdGhlIHYxLjcuMy5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogImdpdCBsb2cgLS1hdXRob3I9bWUgLS1hdXRob3I9aGVyIiBkaWQgbm90IGZpbmQgY29tbWl0cyB3cml0dGVuIGJ5CisgICBtZSBvciBieSBoZXI7IGluc3RlYWQgaXQgbG9va2VkIGZvciBjb21taXRzIHdyaXR0ZW4gYnkgbWUgYW5kIGJ5CisgICBoZXIsIHdoaWNoIGlzIGltcG9zc2libGUuCisKKyAqICJnaXQgcHVzaCAtLXByb2dyZXNzIiBzaG93cyBwcm9ncmVzcyBpbmRpY2F0b3JzIG5vdy4KKworICogImdpdCByZWJhc2UgLWkiIHNob3dlZCBhIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlIHdoZW4gZ2l2ZW4gYQorICAgYnJhbmNoIG5hbWUgdGhhdCBkb2VzIG5vdCBleGlzdC4KKworICogImdpdCByZXBhY2siIHBsYWNlcyBpdHMgdGVtcG9yYXJ5IHBhY2tzIHVuZGVyICRHSVRfT0JKRUNUX0RJUkVDVE9SWS9wYWNrCisgICBpbnN0ZWFkIG9mICRHSVRfT0JKRUNUX0RJUkVDVE9SWS8gdG8gYXZvaWQgY3Jvc3MgZGlyZWN0b3J5IHJlbmFtZXMuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSAtLW90aGVyLWZsYWdzIiBwYXNzZXMgZmxhZ3MgZG93bgorICAgdG8gaXRzIHN1Ymludm9jYXRpb25zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlYmQ3NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMS50eHQKQEAgLTAsMCArMSw0NyBAQAorR2l0IHYxLjcuNS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdoZW4gYW4gb2JqZWN0ICIkdHJlZTokcGF0aCIgZG9lcyBub3QgZXhpc3QsIGlmICRwYXRoIGRvZXMgZXhpc3QgaW4gdGhlCisgICBzdWJ0cmVlIG9mICR0cmVlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHN1YmRpcmVjdG9yeSB0aGUgdXNlciBpcyBpbiwKKyAgIGdpdCBub3cgc3VnZ2VzdHMgdXNpbmcgIiR0cmVlOi4vJHBhdGgiIGluIGFkZGl0aW9uIHRvIHRoZSBhZHZpY2UgdG8gdXNlCisgICB0aGUgZnVsbCBwYXRoIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZS4KKworICogVGhlICItLWRhdGU9cmVsYXRpdmUiIG91dHB1dCBmb3JtYXQgdXNlZCB0byBzYXkgIlggeWVhcnMsIDEyIG1vbnRocyIKKyAgIHdoZW4gaXQgc2hvdWxkIGhhdmUgc2FpZCAiWCsxIHllYXJzIi4KKworICogVGhlIHNtYXJ0LUhUVFAgdHJhbnNmZXIgd2FzIGJyb2tlbiBpbiAxLjcuNSB3aGVuIHRoZSBjbGllbnQgbmVlZHMKKyAgIHRvIGlzc3VlIGEgc21hbGwgUE9TVCAod2hpY2ggdXNlcyBjb250ZW50LWxlbmd0aCkgYW5kIHRoZW4gYSBsYXJnZQorICAgUE9TVCAod2hpY2ggdXNlcyBjaHVua2VkKSBiYWNrIHRvIGJhY2suCisKKyAqICJnaXQgY2xlYW4iIHVzZWQgdG8gZmFpbCBvbiBhbiBlbXB0eSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgcmVhZGFibGUsCisgICBldmVuIHRob3VnaCBybWRpcigyKSBjb3VsZCByZW1vdmUgc3VjaCBhIGRpcmVjdG9yeS4gIE5vdyB3ZSBhdHRlbXB0IGl0CisgICBhcyB0aGUgbGFzdCByZXNvcnQuCisKKyAqIFRoZSAiLS1kaXJzdGF0IiBvcHRpb24gb2YgImRpZmYiIGZhbWlseSBvZiBjb21tYW5kcyB1c2VkIHRvIHRvdGFsbHkKKyAgIGlnbm9yZSBhIGNoYW5nZSB0aGF0IG9ubHkgcmVhcnJhbmdlZCBsaW5lcyB3aXRoaW4gYSBmaWxlLiAgU3VjaCBhCisgICBjaGFuZ2Ugbm93IGNvdW50cyBhcyBhdCBsZWFzdCBhIG1pbmltdW0gYnV0IG5vbiB6ZXJvIGNoYW5nZS4KKworICogVGhlICItLWRpcnN0YXQiIG9wdGlvbiBvZiAiZGlmZiIgZmFtaWx5IG9mIGNvbW1hbmRzIHVzZWQgdG8gdXNlIHRoZQorICAgcGF0aG5hbWUgaW4gdGhlIG9yaWdpbmFsLCBpbnN0ZWFkIG9mIHRoZSBwYXRobmFtZSBpbiB0aGUgcmVzdWx0LAorICAgd2hlbiByZW5hbWVzIGFyZSBpbnZvbHZlZC4KKworICogImdpdCBwYWNrLW9iamVjdCIgZGlkIG5vdCB0YWtlIGNvcmUuYmlnZmlsZXRocmVhc2hvbGQgaW50byBhY2NvdW50CisgICAodW5saWtlIGZhc3QtaW1wb3J0KTsgbm93IGl0IGRvZXMuCisKKyAqICJnaXQgcmVmbG9nIiBpZ25vcmVkIG9wdGlvbnMgbGlrZSAiLS1mb3JtYXQ9Li4iIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKyAqICJnaXQgc3Rhc2ggYXBwbHkiIHVzZWQgdG8gcmVmdXNlIHRvIHdvcmsgaWYgdGhlcmUgd2FzIGFueSBjaGFuZ2UgaW4KKyAgIHRoZSB3b3JraW5nIHRyZWUsIGV2ZW4gd2hlbiB0aGUgY2hhbmdlIGRpZCBub3Qgb3ZlcmxhcCB3aXRoIHRoZSBjaGFuZ2UKKyAgIHRoZSBzdGFzaCByZWNvcmRlZC4KKworICogImdpdCBzdGFzaCBhcHBseSBAezk5OTk5fSIgd2FzIG5vdCBkaWFnbm9zZWQgYXMgYW4gZXJyb3IsIGV2ZW4gd2hlbiB5b3UKKyAgIGRpZCBub3QgaGF2ZSB0aGF0IG1hbnkgc3Rhc2ggZW50cmllcy4KKworICogQW4gZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgc2VuZC1lbWFpbCIgdG8gZGlhZ25vc2UgYSBicm9rZW4gU01UUAorICAgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIGxhY2tlZCBhIHNwYWNlIGJldHdlZW4gImhlbGxvPTxzbXRwLWRvbWFpbj4iCisgICBhbmQgInBvcnQ9PHNtdHAtc2VydmVyLXBvcnQ+Ii4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTFlYjdjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4yLnR4dApAQCAtMCwwICsxLDU3IEBACitHaXQgdjEuNy41LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHJlbGVhc2Ugbm90ZXMgdG8gMS43LjUuMSBmb3Jnb3QgdG8gbWVudGlvbjoKKworICogImdpdCBzdGFzaCAtcCAtLW5vLWtlZXAtaW5kZXgiIGFuZCAiZ2l0IHN0YXNoIC0tbm8ta2VlcC1pbmRleCAtcCIgbm93CisgICBtZWFuIHRoZSBzYW1lIHRoaW5nLgorCisgKiAiZ2l0IHVwbG9hZC1wYWNrIiAoaGVuY2UgImdpdCBwdXNoIiBvdmVyIGdpdCBuYXRpdmUgcHJvdG9jb2wpIGhhZCBhCisgICBzdWJ0bGUgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIGEgZGVhZGxvY2suCisKK0ZpeGVzIHNpbmNlIHYxLjcuNS4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFkZCAtcCIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIGEgaHVuayBpcyBzcGxpdCBhbmQgdGhlbgorICAgb25lIG9mIHRoZW0gd2FzIGdpdmVuIHRvIHRoZSBlZGl0b3IuCisKKyAqICJnaXQgYWRkIC11IiBkaWQgbm90IHJlc29sdmUgYSBjb25mbGljdCB3aGVyZSBvdXIgaGlzdG9yeSBkZWxldGVkIGFuZAorICAgdGhlaXIgaGlzdG9yeSBtb2RpZmllZCB0aGUgc2FtZSBmaWxlLCBhbmQgdGhlIHdvcmtpbmcgdHJlZSByZXNvbHZlZCB0bworICAga2VlcCBhIGZpbGUuCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBkaWQgbm90IGtub3cgdGhhdCBDVlNOVCBzdG9yZXMgaXRzIHBhc3N3b3JkIGZpbGUgaW4gYQorICAgbG9jYXRpb24gZGlmZmVyZW50IGZyb20gdGhlIHRyYWRpdGlvbmFsIENWUy4KKworICogImdpdCBkaWZmLWZpbGVzIiBkaWQgbm90IHNob3cgdGhlIG1vZGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgd29ya2luZworICAgdHJlZSBzaWRlIG9mIGFuIHVubWVyZ2VkIHBhdGggY29ycmVjdGx5LgorCisgKiAiZ2l0IGRpZmYgLU0gLS1jYWNoZWQiIHVzZWQgdG8gdXNlIHVubWVyZ2VkIHBhdGggYXMgYSBwb3NzaWJsZSByZW5hbWUKKyAgIHNvdXJjZSBjYW5kaWRhdGUsIHdoaWNoIG1hZGUgbm8gc2Vuc2UuCisKKyAqIFRoZSBvcHRpb24gbmFtZSBwYXJzZXIgaW4gImdpdCBmYXN0LWltcG9ydCIgdXNlZCBwcmVmaXggbWF0Y2hlcyBmb3IKKyAgIHNvbWUgb3B0aW9ucyB3aGVyZSBpdCBzaG91bGRuJ3QsIGFuZCBhY2NlcHRlZCBub24tZXhpc3RlbnQgb3B0aW9ucywKKyAgIGUuZy4gIi0tcmVsYXRpdmUtbWFya3NtaXRoIiBvciAiLS1mb3JjZXBzIi4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGRpZCBub3QgcXVvdGUgUkZDODIyIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyAgIGVtYWlsIGFkZHJlc3MgKGUuZyBGcm9tOiBKdW5pbyBDLiBIYW1hbm8gPGpjaEBleGFtcGxlLmNvbT4sIG5vdAorICAgRnJvbTogIkp1bmlvIEMuIEhhbWFubyIgPGpjaEBleGFtcGxlLmNvbT4pLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgd2hlbiBydW4gd2l0aCAiLS1xdWlldCIgb3B0aW9uIHVzZWQgdG8gcHJvZHVjZSBhCisgICBub25zZW5zZSByZXN1bHQgdGhhdCBjb25zaXN0cyBvZiBhbHRlcm5hdGluZyBlbXB0eSBvdXRwdXQuCisKKyAqIEluICJnaXQgbWVyZ2UiLCBwZXItYnJhbmNoIGJyYW5jaC48bmFtZT4ubWVyZ2VvcHRpb25zIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlcyBkaWQgbm90IG92ZXJyaWRlIHRoZSBmYWxsYmFjayBkZWZhdWx0IG1lcmdlLjxvcHRpb24+CisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBzdWNoIGFzIG1lcmdlLmZmLCBtZXJnZS5sb2csIGV0Yy4KKworICogImdpdCBtZXJnZS1vbmUtZmlsZSIgZGlkIG5vdCBob25vciBHSVRfV09SS19UUkVFIHNldHRpbmdzIHdoZW4KKyAgIGhhbmRsaW5nIGEgImJvdGggc2lkZXMgYWRkZWQsIGRpZmZlcmVudGx5IiBjb25mbGljdC4KKworICogImdpdCBtZXJnZXRvb2wiIGRpZCBub3QgaGFuZGxlIGNvbmZsaWN0ZWQgc3VibW91ZHVsZXMgZ3JhY2VmdWxseS4KKworICogImdpdC1wNCIgKGluIGNvbnRyaWIpIHVzZWQgYSB3cm9uZyBiYXNlIGltYWdlIHdoaWxlIG1lcmdlIGEgZmlsZSB0aGF0CisgICB3YXMgYWRkZWQgb24gYm90aCBicmFuY2hlcyBkaWZmZXJlbnRseS4KKworICogImdpdCByZWJhc2UgLWkgLXAiIGZhaWxlZCB0byBwcmVzZXJ2ZSB0aGUgaGlzdG9yeSB3aGVuIHRoZXJlIGlzIGEKKyAgIHJlZHVuZGFudCBtZXJnZSBjcmVhdGVkIHdpdGggdGhlIC0tbm8tZmYgb3B0aW9uLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMjRlZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjMudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dpdCB2MS43LjUuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjUuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGJhc2ggY29tcGxldGlvbiBzY3JpcHRzIHNob3VsZCBjb3JyZWN0bHkgd29yayB1c2luZyB6c2gncyBiYXNoCisgICBjb21wbGV0aW9uIGVtdWxhdGlvbiBsYXllciBub3cuCisKKyAqIFNldHRpbmcgJChwcmVmaXgpIGluIGNvbmZpZy5tYWsgZGlkIG5vdCBhZmZlY3Qgd2hlcmUgZXRjL2dpdGNvbmZpZworICAgZmlsZSBpcyByZWFkIGZyb20sIGV2ZW4gdGhvdWdoIHBhc3NpbmcgaXQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIG9mCisgICAkKE1BS0UpIGRpZC4KKworICogVGhlIGxvZ2ljIHRvIGhhbmRsZSAiJiIgKGV4cGFuZCB0byBVTklYIHVzZXJuYW1lKSBpbiBHRUNPUyBmaWVsZAorICAgbWlzY291bnRlZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGl0IGZvcm1hdHRlZC4KKworICogImdpdCBjaGVycnktcGljayAtcyByZXNvbHZlIiBmYWlsZWQgdG8gY2hlcnJ5LXBpY2sgYSByb290IGNvbW1pdC4KKworICogImdpdCBkaWZmIC0td29yZC1kaWZmIiBtaXNiZWhhdmVkIHdoZW4gZGlmZi5zdXBwcmVzcy1ibGFuay1lbXB0eSB3YXMKKyAgIGluIGVmZmVjdC4KKworICogImdpdCBsb2cgLS1zdGRpbiBwYXRoIiB3aXRoIGFuIGlucHV0IHRoYXQgaGFzIGFkZGl0aW9uYWwgcGF0aHNwZWMKKyAgIHVzZWQgdG8gY29ycnVwdCBtZW1vcnkuCisKKyAqICJnaXQgc2VuZC1wYWNrIiAoaGVuY2UgImdpdCBwdXNoIikgb3ZlciBzbWFydC1IVFRQIHByb3RvY29sIGNvdWxkCisgICBkZWFkbG9jayB3aGVuIHRoZSBjbGllbnQgc2lkZSBwYWNrLW9iamVjdCBkaWVkIGVhcmx5LgorCisgKiBDb21wcmVzc2VkIHRhcmJhbGwgZ2l0d2ViIGdlbmVyYXRlcyB1c2VkIHRvIGJlIG1hZGUgd2l0aCB0aGUgdGltZXN0YW1wCisgICBvZiB0aGUgdGFyYmFsbCBnZW5lcmF0aW9uOyB0aGlzIHdhcyBiYWQgYmVjYXVzZSBzbmFwc2hvdCBmcm9tIHRoZSBzYW1lCisgICB0cmVlIHNob3VsZCByZXN1bHQgaW4gYSBzYW1lIHRhcmJhbGwuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc5NmRmMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuNC50eHQKQEAgLTAsMCArMSwyMSBAQAorR2l0IHYxLjcuNS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgc2luZ2xlLWtleSBtb2RlIG9mICJnaXQgYWRkIC1wIiB3YXMgZWFzaWx5IGZvb2xlZCBpbnRvIHRoaW5raW5nCisgICB0aGF0IGl0IHdhcyB0b2xkIHRvIGFkZCBldmVyeXRoaW5nICgnYScpIHdoZW4gdXAtYXJyb3cgd2FzIHByZXNzZWQgYnkKKyAgIG1pc3Rha2UuCisKKyAqIFNldHRpbmcgYSBnaXQgY29tbWFuZCB0aGF0IHVzZXMgY3VzdG9tIGNvbmZpZ3VyYXRpb24gdmlhICItYyB2YXI9dmFsIgorICAgYXMgYW4gYWxpYXMgY2F1c2VkIGEgY3Jhc2ggZHVlIHRvIGEgcmVhbGxvYygzKSBmYWlsdXJlLgorCisgKiAiZ2l0IGRpZmYgLUMgLUMiIHVzZWQgdG8gZGlzYWJsZSB0aGUgcmVuYW1lIGRldGVjdGlvbiBlbnRpcmVseSB3aGVuCisgICB0aGVyZSBhcmUgdG9vIG1hbnkgY29weSBjYW5kaWRhdGUgcGF0aHMgaW4gdGhlIHRyZWU7IG5vdyBpdCBmYWxscworICAgYmFjayB0byAiLUMiIHdoZW4gZG9pbmcgc28gd291bGQga2VlcCB0aGUgY29weSBjYW5kaWRhdGUgcGF0aHMKKyAgIHVuZGVyIHRoZSByZW5hbWUgZGV0ZWN0aW9uIGxpbWl0LgorCisgKiAiZ2l0IHJlcmVyZSIgZGlkIG5vdCBkaWFnbm9zZSBhIGNvcnJ1cHQgTUVSR0VfUlIgZmlsZSBpbiBzb21lIGNhc2VzLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3OTE5YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUudHh0CkBAIC0wLDAgKzEsMTMyIEBACitHaXQgdjEuNy41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVmFyaW91cyBNaW5HVyBwb3J0YWJpbGl0eSBmaXhlcy4KKworICogVmFyaW91cyBnaXQtcDQgZW5oYW5jZW1lbnRzIChpbiBjb250cmliKS4KKworICogVmFyaW91cyB2Y3Mtc3ZuLCBnaXQtc3ZuIGFuZCBnaXRrIGVuaGFuY2VtZW50cyBhbmQgZml4ZXMuCisKKyAqIFZhcmlvdXMgZ2l0LWd1aSB1cGRhdGVzICgwLjE0LjApLgorCisgKiBVcGRhdGUgdG8gbW9yZSBtb2Rlcm4gSFAtVVggcG9ydC4KKworICogVGhlIGNvZGViYXNlIGlzIGdldHRpbmcgcHJlcGFyZWQgZm9yIGkxOG4vbDEwbjsgbm8gdHJhbnNsYXRlZAorICAgc3RyaW5ncyBub3IgdHJhbnNsYXRpb24gbWVjaGFuaXNtIGluIHRoZSBjb2RlIHlldCwgYnV0IHRoZSBzdHJpbmdzCisgICBhcmUgYmVpbmcgbWFya2VkIGZvciBsMTBuLgorCisgKiBUaGUgYmFzaCBjb21wbGV0aW9uIHNjcmlwdCBjYW4gbm93IGNvbXBsZXRlIHN5bW1ldHJpYyBkaWZmZXJlbmNlCisgICBmb3IgImdpdCBkaWZmIiBjb21tYW5kLCBlLmcuICJnaXQgZGlmZiAuLi5icmE8VEFCPiIuCisKKyAqIFRoZSBkZWZhdWx0IG1pbmltdW0gbGVuZ3RoIG9mIGFiYnJldmlhdGVkIGFuZCB1bmlxdWUgb2JqZWN0IG5hbWVzCisgICBjYW4gbm93IGJlIGNvbmZpZ3VyZWQgYnkgc2V0dGluZyB0aGUgY29yZS5hYmJyZXYgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUuCisKKyAqICJnaXQgYXBwbHkgLXYiIHJlcG9ydHMgb2Zmc2V0IGxpbmVzIHdoZW4gdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5IGF0CisgICB0aGUgZXhhY3QgbG9jYXRpb24gcmVjb3JkZWQgaW4gdGhlIGRpZmYgb3V0cHV0LgorCisgKiAiZ2l0IGNvbmZpZyIgdXNlZCB0byBiZSBhbHNvIGtub3duIGFzICJnaXQgcmVwby1jb25maWciLCBidXQgdGhlIG9sZAorICAgbmFtZSBpcyBub3cgb2ZmaWNpYWxseSBkZXByZWNhdGVkLgorCisgKiAiZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIDxjb21taXQ+IiBpcyBhIG1vcmUgdXNlciBmcmllbmRseSBzeW5vbnltIGZvcgorICAgImdpdCBjaGVja291dCA8Y29tbWl0Pl4wIi4KKworICogImdpdCBjaGVja291dCIgcGVyZm9ybWVkIG9uIGRldGFjaGVkIEhFQUQgZ2l2ZXMgYSB3YXJuaW5nIGFuZAorICAgYWR2aWNlIHdoZW4gdGhlIGNvbW1pdCBiZWluZyBsZWZ0IGJlaGluZCB3aWxsIGJlY29tZSB1bnJlYWNoYWJsZSBmcm9tCisgICBhbnkgYnJhbmNoIG9yIHRhZy4KKworICogImdpdCBjaGVycnktcGljayIgYW5kICJnaXQgcmV2ZXJ0IiBjYW4gYmUgdG9sZCB0byB1c2UgYSBjdXN0b20gbWVyZ2UKKyAgIHN0cmF0ZWd5LCBzaW1pbGFyIHRvICJnaXQgcmViYXNlIi4KKworICogImdpdCBjaGVycnktcGljayIgcmVtZW1iZXJzIHdoaWNoIGNvbW1pdCBmYWlsZWQgdG8gYXBwbHkgd2hlbiBpdCBpcworICAgc3RvcHBlZCBieSBjb25mbGljdHMsIG1ha2luZyBpdCB1bm5lY2Vzc2FyeSB0byB1c2UgImNvbW1pdCAtYyAkY29tbWl0IgorICAgdG8gY29uY2x1ZGUgaXQuCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBiYWlscyBvdXQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgY3ZzIHNlcnZlciBjYW5ub3QgYmUKKyAgIHJlYWNoZWQsIHdpdGhvdXQgc3Bld2luZyB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlcyB0aGF0IGNvbXBsYWluIGFib3V0CisgICB0aGUgc2VydmVyIHJlc3BvbnNlIGl0IG5ldmVyIGdvdC4KKworICogImdpdCBmZXRjaCIgdnMgImdpdCB1cGxvYWQtcGFjayIgdHJhbnNmZXIgbGVhcm5lZCAnbm8tZG9uZScKKyAgIHByb3RvY29sIGV4dGVuc2lvbiB0byBzYXZlIG9uZSByb3VuZC10cmlwIGFmdGVyIHRoZSBjb250ZW50CisgICBuZWdvdGlhdGlvbiBpcyBkb25lLiBUaGlzIHNhdmVzIG9uZSBIVFRQIFJQQywgcmVkdWNpbmcgdGhlIG92ZXJhbGwKKyAgIGxhdGVuY3kgZm9yIGEgdHJpdmlhbCBmZXRjaC4KKworICogImdpdCBmZXRjaCIgY2FuIGJlIHRvbGQgdG8gcmVjdXJzaXZlbHkgZmV0Y2ggc3VibW9kdWxlcyBvbi1kZW1hbmQuCisKKyAqICJnaXQgZ3JlcCAtZiA8ZmlsZW5hbWU+IiBsZWFybmVkIHRvIHRyZWF0ICItIiBhcyAicmVhZCBmcm9tIHRoZQorICAgc3RhbmRhcmQgaW5wdXQgc3RyZWFtIi4KKworICogImdpdCBncmVwIC0tbm8taW5kZXgiIGRpZCBub3QgaG9ub3IgcGF0aHNwZWNzIGNvcnJlY3RseSwgcmV0dXJuaW5nCisgICBwYXRocyBvdXRzaWRlIHRoZSBzcGVjaWZpZWQgYXJlYS4KKworICogImdpdCBpbml0IiBsZWFybmVkIHRoZSAtLXNlcGFyYXRlLWdpdC1kaXIgb3B0aW9uIHRvIGFsbG93IHRoZSBnaXQKKyAgIGRpcmVjdG9yeSBmb3IgYSBuZXcgcmVwb3NpdG9yeSBjcmVhdGVkIGVsc2V3aGVyZSBhbmQgbGlua2VkIHZpYSB0aGUKKyAgIGdpdGRpciBtZWNoYW5pc20uIFRoaXMgaXMgcHJpbWFyaWx5IHRvIGhlbHAgc3VibW9kdWxlIHN1cHBvcnQgbGF0ZXIKKyAgIHRvIHN3aXRjaCBiZXR3ZWVuIGEgYnJhbmNoIG9mIHN1cGVycHJvamVjdCB0aGF0IGhhcyB0aGUgc3VibW9kdWxlCisgICBhbmQgYW5vdGhlciB0aGF0IGRvZXMgbm90LgorCisgKiAiZ2l0IGxvZyIgdHlwZSBjb21tYW5kcyBub3cgdW5kZXJzdGFuZCBnbG9iYmluZyBwYXRoc3BlY3MuICBZb3UKKyAgIGNhbiBzYXkgImdpdCBsb2cgLS0gJyoudHh0JyIgZm9yIGV4YW1wbGUuCisKKyAqICJnaXQgbG9nIiBmYW1pbHkgb2YgY29tbWFuZHMgbGVhcm5lZCAtLWNoZXJyeSBhbmQgLS1jaGVycnktbWFyaworICAgb3B0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIHZpZXcgdHdvIGRpdmVyZ2VkIGJyYW5jaGVzIHdoaWxlIG9taXR0aW5nCisgICBvciBoaWdobGlnaHRpbmcgZXF1aXZhbGVudCBjaGFuZ2VzIHRoYXQgYXBwZWFyIG9uIGJvdGggc2lkZXMgb2YgYQorICAgc3ltbWV0cmljIGRpZmZlcmVuY2UgKGUuZy4gImxvZyAtLWNoZXJyeSBBLi4uQiIpLgorCisgKiBBIGxhenkgImdpdCBtZXJnZSIgdGhhdCBkaWRuJ3Qgc2F5IHdoYXQgdG8gbWVyZ2UgdXNlZCB0byBiZSBhbiBlcnJvci4KKyAgIFdoZW4gcnVuIG9uIGEgYnJhbmNoIHRoYXQgaGFzIGFuIHVwc3RyZWFtIGRlZmluZWQsIGhvd2V2ZXIsIHRoZSBjb21tYW5kCisgICBub3cgbWVyZ2VzIGZyb20gdGhlIGNvbmZpZ3VyZWQgdXBzdHJlYW0uCisKKyAqICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIGhvdyB0byBkcml2ZSAiYmV5b25kIGNvbXBhcmUgMyIgYXMgd2VsbC4KKworICogImdpdCByZXJlcmUgZm9yZ2V0IiB3aXRob3V0IHBhdGhzcGVjIHVzZWQgdG8gZm9yZ2V0IGFsbCB0aGUgc2F2ZWQKKyAgIGNvbmZsaWN0cyB0aGF0IHJlbGF0ZSB0byB0aGUgY3VycmVudCBtZXJnZTsgaXQgbm93IHJlcXVpcmVzIHlvdSB0bworICAgZ2l2ZSBpdCBwYXRoc3BlY3MuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1vYmplY3RzICRyZXZzIC0tICRwYXRoc3BlYyIgbm93IGxpbWl0cyB0aGUgb2JqZWN0cyBsaXN0ZWQKKyAgIGluIGl0cyBvdXRwdXQgcHJvcGVybHkgd2l0aCB0aGUgcGF0aHNwZWMsIGluIHByZXBhcmF0aW9uIGZvciBuYXJyb3cKKyAgIGNsb25lcy4KKworICogImdpdCBwdXNoIiB3aXRoIG5vIHBhcmFtZXRlcnMgZ2l2ZXMgYmV0dGVyIGFkdmljZSBtZXNzYWdlcyB3aGVuCisgICAidHJhY2tpbmciIGlzIHVzZWQgYXMgdGhlIHB1c2guZGVmYXVsdCBzZW1hbnRpY3Mgb3IgdGhlcmUgaXMgbm8gcmVtb3RlCisgICBjb25maWd1cmVkIHlldC4KKworICogQSBwb3NzaWJsZSB2YWx1ZSB0byB0aGUgInB1c2guZGVmYXVsdCIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwKKyAgICd0cmFja2luZycsIGdhaW5lZCBhIHN5bm9ueW0gdGhhdCBtb3JlIG5hdHVyYWxseSBkZXNjcmliZXMgd2hhdCBpdAorICAgZG9lcywgJ3Vwc3RyZWFtJy4KKworICogImdpdCByZXJlcmUiIGxlYXJuZWQgYSBuZXcgc3ViY29tbWFuZCAicmVtYWluaW5nIiB0aGF0IGlzIHNpbWlsYXIgdG8KKyAgICJzdGF0dXMiIGFuZCBsaXN0cyB0aGUgcGF0aHMgdGhhdCBoYWQgY29uZmxpY3RzIHdoaWNoIGFyZSBrbm93biB0bworICAgcmVyZXJlLCBidXQgZXhjbHVkZXMgdGhlIHBhdGhzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbWFya2VkIGFzCisgICByZXNvbHZlZCBpbiB0aGUgaW5kZXggZnJvbSBpdHMgb3V0cHV0LiAgImdpdCBtZXJnZXRvb2wiIGhhcyBiZWVuCisgICB1cGRhdGVkIHRvIHVzZSB0aGlzIGZhY2lsaXR5LgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdGhlIHYxLjcuNC5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogImdpdCBmZXRjaCIgZnJvbSBhIGNsaWVudCB0aGF0IGlzIG1vc3RseSBmb2xsb3dpbmcgdGhlIHJlbW90ZQorICAgbmVlZGxlc3NseSB0b2xkIGFsbCBvZiBpdHMgcmVmcyB0byB0aGUgc2VydmVyIGZvciBib3RoIHNpZGVzIHRvCisgICBjb21wdXRlIHRoZSBzZXQgb2Ygb2JqZWN0cyB0aGF0IG5lZWQgdG8gYmUgdHJhbnNmZXJyZWQgZWZmaWNpZW50bHksCisgICBpbnN0ZWFkIG9mIHN0b3BwaW5nIHdoZW4gdGhlIHNlcnZlciBoZWFyZCBlbm91Z2guIEluIGEgcHJvamVjdCB3aXRoCisgICBtYW55IHRhZ3MsIHRoaXMgdHVybnMgb3V0IHRvIGJlIGV4dHJlbWVseSB3YXN0ZWZ1bCwgZXNwZWNpYWxseSBvdmVyCisgICB0aGUgc21hcnQgSFRUUCB0cmFuc3BvcnQgKHNwL21haW50LXt1cGxvYWQsZmV0Y2h9LXBhY2stc3RvcC1lYXJseX4xKS4KKworICogImdpdCBmZXRjaCIgcnVuIGZyb20gYSByZXBvc2l0b3J5IHRoYXQgdXNlcyB0aGUgc2FtZSByZXBvc2l0b3J5IGFzCisgICBpdHMgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSBhcyB0aGUgcmVwb3NpdG9yeSBpdCBpcyBmZXRjaGluZyBmcm9tCisgICBkaWQgbm90IHRlbGwgdGhlIHNlcnZlciB0aGF0IGl0IGFscmVhZHkgaGFzIGFjY2VzcyB0byBvYmplY3RzCisgICByZWFjaGFibGUgZnJvbSB0aGUgcmVmcyBpbiB0aGVpciBjb21tb24gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSwKKyAgIGNhdXNpbmcgaXQgdG8gZmV0Y2ggdW5uZWNlc3Nhcnkgb2JqZWN0cyAoamMvbWFpbnQtZmV0Y2gtYWx0KS4KKworICogImdpdCByZW1vdGUgYWRkIC0tbWlycm9yIiBjcmVhdGVkIGEgY29uZmlndXJhdGlvbiB0aGF0IGlzIHN1aXRhYmxlIGZvcgorICAgZG9pbmcgYm90aCBhIG1pcnJvciBmZXRjaCBhbmQgYSBtaXJyb3IgcHVzaCBhdCB0aGUgc2FtZSB0aW1lLCB3aGljaAorICAgbWFkZSBsaXR0bGUgc2Vuc2UuICBXZSBub3cgd2FybiBhbmQgcmVxdWlyZSB0aGUgY29tbWFuZCBsaW5lIHRvIHNwZWNpZnkKKyAgIGVpdGhlciAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlNDZhYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMS50eHQKQEAgLTAsMCArMSw2MyBAQAorR2l0IHYxLjcuNi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFZhcmlvdXMgY29kZXBhdGhzIHRoYXQgaW52b2tlZCB6bGliIGRlZmxhdGUvaW5mbGF0ZSBhc3N1bWVkIHRoYXQgdGhlc2UKKyAgIGZ1bmN0aW9ucyBjYW4gY29tcHJlc3Mgb3IgdW5jb21wcmVzcyBtb3JlIHRoYW4gNEdCIGRhdGEgaW4gb25lIGNhbGwgb24KKyAgIHBsYXRmb3JtcyB3aXRoIDY0LWJpdCBsb25nLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgdW5leGVjdXRhYmxlIiByZXBvcnRlZCB0aGF0ICJ1bmV4ZWN1dGFibGUiIHdhcyBub3QgZm91bmQsIGV2ZW4KKyAgIHRob3VnaCB0aGUgYWN0dWFsIGVycm9yIHdhcyB0aGF0ICJ1bmV4ZWN1dGFibGUiIHdhcyBmb3VuZCBidXQgZGlkCisgICBub3QgaGF2ZSBhIHByb3BlciBzaGUtYmFuZyBsaW5lIHRvIGJlIGV4ZWN1dGVkLgorCisgKiBFcnJvciBleGl0cyBmcm9tICRQQUdFUiB3ZXJlIHNpbGVudGx5IGlnbm9yZWQuCisKKyAqICJnaXQgY2hlY2tvdXQgLWIgPGJyYW5jaD4iIHdhcyBjb25mdXNlZCB3aGVuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIGEKKyAgIGJyYW5jaCB3aG9zZSBuYW1lIGVuZHMgd2l0aCAiLWciIGZvbGxvd2VkIGJ5IGhleGFkZWNpbWFsIGRpZ2l0cywKKyAgIGFuZCByZWZ1c2VkIHRvIHdvcmsuCisKKyAqICJnaXQgY2hlY2tvdXQgLWIgPGJyYW5jaD4iIHNvbWV0aW1lcyB3cm90ZSBhIGJvZ3VzIHJlZmxvZyBlbnRyeSwKKyAgIGNhdXNpbmcgbGF0ZXIgImdpdCBjaGVja291dCAtIiB0byBmYWlsLgorCisgKiAiZ2l0IGRpZmYgLS1jYyIgbGVhcm5lZCB0byBjb3JyZWN0bHkgaWdub3JlIGJpbmFyeSBmaWxlcy4KKworICogImdpdCBkaWZmIC1jLy0tY2MiIG1pc2hhbmRsZWQgYSBkZWxldGlvbiB0aGF0IHJlc29sdmVzIGEgY29uZmxpY3QsIGFuZAorICAgbG9va2VkIGluIHRoZSB3b3JraW5nIHRyZWUgaW5zdGVhZC4KKworICogImdpdCBmYXN0LWV4cG9ydCIgZm9yZ290IHRvIHF1b3RlIHBhdGhuYW1lcyB3aXRoIHVuc2FmZSBjaGFyYWN0ZXJzCisgICBpbiBpdHMgb3V0cHV0LgorCisgKiAiZ2l0IGZldGNoIiBvdmVyIHNtYXJ0LWh0dHAgdHJhbnNwb3J0IHVzZWQgdG8gYWJvcnQgd2hlbiB0aGUKKyAgIHJlcG9zaXRvcnkgd2FzIHVwZGF0ZWQgYmV0d2VlbiB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIGFuZCB0aGUKKyAgIHN1YnNlcXVlbnQgb2JqZWN0IHRyYW5zZmVyLgorCisgKiAiZ2l0IGZldGNoIiBkaWQgbm90IHJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIGluIHN1YmRpcmVjdG9yaWVzLgorCisgKiAiZ2l0IGxzLXRyZWUiIGRpZCBub3QgZXJyb3Igb3V0IHdoZW4gYXNrZWQgdG8gc2hvdyBhIGNvcnJ1cHQgdHJlZS4KKworICogImdpdCBwdWxsIiB3aXRob3V0IGFueSBhcmd1bWVudCBsZWZ0IGFuIGV4dHJhIHdoaXRlc3BhY2UgYWZ0ZXIgdGhlCisgICBjb21tYW5kIG5hbWUgaW4gaXRzIHJlZmxvZy4KKworICogImdpdCBwdXNoIC0tcXVpZXQiIHdhcyBub3QgcmVhbGx5IHF1aWV0LgorCisgKiAiZ2l0IHJlYmFzZSAtaSAtcCIgaW5jb3JyZWN0bHkgZHJvcHBlZCBjb21taXRzIGZyb20gc2lkZSBicmFuY2hlcy4KKworICogImdpdCByZXNldCBbPGNvbW1pdD5dIHBhdGhzLi4uIiBkaWQgbm90IHJlc2V0IHRoZSBpbmRleCBlbnRyeSBjb3JyZWN0bHkKKyAgIGZvciB1bm1lcmdlZCBwYXRocy4KKworICogImdpdCBzdWJtb2R1bGUgYWRkIiBkaWQgbm90IGFsbG93IGEgcmVsYXRpdmUgcmVwb3NpdG9yeSBwYXRoIHdoZW4KKyAgIHRoZSBzdXBlcnByb2plY3QgZGlkIG5vdCBoYXZlIGFueSBkZWZhdWx0IHJlbW90ZSB1cmwuCisKKyAqICJnaXQgc3VibW9kdWxlIGZvcmVhY2giIGZhaWxlZCB0byBjb3JyZWN0bHkgZ2l2ZSB0aGUgc3RhbmRhcmQgaW5wdXQgdG8KKyAgIHRoZSB1c2VyLXN1cHBsaWVkIGNvbW1hbmQgaXQgaW52b2tlZC4KKworICogc3VibW9kdWxlcyB0aGF0IHRoZSB1c2VyIGhhcyBuZXZlciBzaG93ZWQgaW50ZXJlc3QgaW4gYnkgcnVubmluZworICAgImdpdCBzdWJtb2R1bGUgaW5pdCIgd2FzIGluY29ycmVjdGx5IG1hcmtlZCBhcyBpbnRlcmVzdGluZyBieSAiZ2l0CisgICBzdWJtb2R1bGUgc3luYyIuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXF1aWV0IiB3YXMgbm90IHJlYWxseSBxdWlldC4KKworICAqICJnaXQgdGFnIC1sIDxnbG9iPi4uLiIgZGlkIG5vdCB0YWtlIG11bHRpcGxlIGdsb2IgcGF0dGVybnMgZnJvbSB0aGUKKyAgIGNvbW1hbmQgbGluZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YWU0MTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjIudHh0CkBAIC0wLDAgKzEsOCBAQAorR2l0IHYxLjcuNi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiB2MS43LjYuMSBicm9rZSAiZ2l0IHB1c2ggLS1xdWlldCI7IGl0IHVzZWQgdG8gYmUgYSBuby1vcCBhZ2FpbnN0IGFuIG9sZAorICAgdmVyc2lvbiBvZiBHaXQgcnVubmluZyBvbiB0aGUgb3RoZXIgZW5kLCBidXQgdjEuNy42LjEgbWFkZSBpdCBhYm9ydC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OTcxODMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjMudHh0CkBAIC0wLDAgKzEsMjQgQEAKK0dpdCB2MS43LjYuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjYuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCAtYyB2YXI9dmFsdWUgc3ViY21kIiBtaXNwYXJzZWQgdGhlIGN1c3RvbSBjb25maWd1cmF0aW9uIHdoZW4KKyAgIHZhbHVlIGNvbnRhaW5lZCBhbiBlcXVhbCBzaWduLgorCisgKiAiZ2l0IGZldGNoIiBoYWQgYSBtYWpvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9uLCB3YXN0aW5nIG1hbnkKKyAgIG5lZWRsZXNzIGN5Y2xlcyBpbiBhIHJlcG9zaXRvcnkgd2hlcmUgdGhlcmUgaXMgbm8gc3VibW9kdWxlcworICAgcHJlc2VudC4gVGhpcyB3YXMgZXNwZWNpYWxseSBiYWQsIHdoZW4gdGhlcmUgd2VyZSBtYW55IHJlZnMuCisKKyAqICJnaXQgcmVmbG9nICRyZWZuYW1lIiBkaWQgbm90IGRlZmF1bHQgdG8gdGhlICJzaG93IiBzdWJjb21tYW5kIGFzCisgICB0aGUgZG9jdW1lbnRhdGlvbiBhZHZlcnRpc2VkIHRoZSBjb21tYW5kIHRvIGRvLgorCisgKiAiZ2l0IHJlc2V0IiBkaWQgbm90IGxlYXZlIG1lYW5pbmdmdWwgbG9nIG1lc3NhZ2UgaW4gdGhlIHJlZmxvZy4KKworICogImdpdCBzdGF0dXMgLS1pZ25vcmVkIiBkaWQgbm90IHNob3cgaWdub3JlZCBpdGVtcyB3aGVuIHRoZXJlIGlzIG5vCisgICB1bnRyYWNrZWQgaXRlbXMuCisKKyAqICJnaXQgdGFnIC0tY29udGFpbnMgJGNvbW1pdCIgd2FzIHVubmVjZXNzYXJpbHkgaW5lZmZpY2llbnQuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOWFjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjQudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dpdCB2MS43LjYuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjYuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGVycm9yIHJlcG9ydGluZyBsb2dpYyBvZiAiZ2l0IGFtIiB3aGVuIHRoZSBjb21tYW5kIGlzIGZlZCBhIGZpbGUKKyAgIHdob3NlIG1haWwtc3RvcmFnZSBmb3JtYXQgaXMgdW5rbm93biB3YXMgZml4ZWQuCisKKyAqICJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIEB7LTF9IGZvbyIgZGlkIG5vdCBleHBhbmQgQHstMX0gY29ycmVjdGx5LgorCisgKiAiZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1wcmludCIgdXNlZCB0byBwYXJyb3QgYSBjYW5kaWRhdGUgc3RyaW5nIHRoYXQKKyAgIGJlZ2FuIHdpdGggYSBzbGFzaCAoZS5nLiAvcmVmcy9oZWFkcy9tYXN0ZXIpIHdpdGhvdXQgc3RyaXBwaW5nIGl0LCB0byBtYWtlCisgICB0aGUgcmVzdWx0IGEgc3VpdGFibHkgbm9ybWFsaXplZCBzdHJpbmcgdGhlIGNhbGxlciBjYW4gYXBwZW5kIHRvICIkR0lUX0RJUi8iLgorCisgKiAiZ2l0IGNsb25lIiBmYWlsZWQgdG8gY2xvbmUgbG9jYWxseSBmcm9tIGEgIi5naXQiIGZpbGUgdGhhdCBpdHNlbGYKKyAgIGlzIG5vdCBhIGRpcmVjdG9yeSBidXQgaXMgYSBwb2ludGVyIHRvIG9uZS4KKworICogImdpdCBjbG9uZSIgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkgdGhhdCBib3Jyb3dzIGZyb20gYW5vdGhlcgorICAgb2JqZWN0IHN0b3JlIHVzaW5nIGEgcmVsYXRpdmUgcGF0aCBpbiBpdHMgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKyAgIGZpbGUgZGlkIG5vdCBhZGp1c3QgdGhlIGFsdGVybmF0ZXMgaW4gdGhlIHJlc3VsdGluZyByZXBvc2l0b3J5LgorCisgKiAiZ2l0IGRlc2NyaWJlIC0tZGlydHkiIGRpZCBub3QgcmVmcmVzaCB0aGUgaW5kZXggYmVmb3JlIGNoZWNraW5nIHRoZQorICAgc3RhdGUgb2YgdGhlIHdvcmtpbmcgdHJlZSBmaWxlcy4KKworICogImdpdCBscy1maWxlcyAuLi8kcGF0aCIgdGhhdCBpcyBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeSByZXBvcnRlZCBlcnJvcnMKKyAgIGluY29ycmVjdGx5IHdoZW4gdGhlcmUgaXMgbm8gc3VjaCBwYXRoIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0aHNwZWMuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBjb3VsZCBsb29wIGZvcmV2ZXIgcHJvbXB0aW5nIHdoZW4gbm90aGluZyBjYW4gYmUgcmVhZAorICAgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MTMxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjUudHh0CkBAIC0wLDAgKzEsMjYgQEAKK0dpdCB2MS43LjYuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjYuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGRhdGUgcGFyc2VyIGRpZCBub3QgYWNjZXB0IHRpbWV6b25lIGRlc2lnbmF0b3JzIHRoYXQgbGFjayBtaW51dGVzCisgICBwYXJ0IGFuZCBhbHNvIGhhcyBhIGNvbG9uIGJldHdlZW4gImhoOm1tIi4KKworICogQWZ0ZXIgZmV0Y2hpbmcgZnJvbSBhIHJlbW90ZSB0aGF0IGhhcyB2ZXJ5IGxvbmcgcmVmbmFtZSwgdGhlIHJlcG9ydGluZworICAgb3V0cHV0IGNvdWxkIGhhdmUgY29ycnVwdGVkIGJ5IG92ZXJydW5uaW5nIGEgc3RhdGljIGJ1ZmZlci4KKworICogImdpdCBtZXJnZXRvb2wiIGRpZCBub3QgdXNlIGl0cyBhcmd1bWVudHMgYXMgcGF0aHNwZWMsIGJ1dCBhcyBhIHBhdGggdG8KKyAgIHRoZSBmaWxlIHRoYXQgbWF5IG5vdCBldmVuIGhhdmUgYW55IGNvbmZsaWN0LgorCisgKiAiZ2l0IG5hbWUtcmV2IC0tYWxsIiB0cmllZCB0byBuYW1lIGFsbCBfb2JqZWN0c18sIG5hdHVyYWxseSBmYWlsaW5nIHRvCisgICBkZXNjcmliZSBtYW55IGJsb2JzIGFuZCB0cmVlcywgaW5zdGVhZCBvZiBzaG93aW5nIG9ubHkgY29tbWl0cyBhcworICAgYWR2ZXJ0aXNlZCBpbiBpdHMgZG9jdW1lbnRhdGlvbi4KKworICogImdpdCByZW1vdGUgcmVuYW1lICRhICRiIiB3ZXJlIG5vdCBjYXJlZnVsIHRvIG1hdGNoIHRoZSByZW1vdGUgbmFtZQorICAgYWdhaW5zdCAkYSAoaS5lLiBzb3VyY2Ugc2lkZSBvZiB0aGUgcmVtb3RlIG5pY2tuYW1lKS4KKworICogImdpdHdlYiIgdXNlZCB0byBwcm9kdWNlIGEgbm9uLXdvcmtpbmcgbGluayB3aGlsZSBzaG93aW5nIHRoZSBjb250ZW50cworICAgb2YgYSBibG9iLCB3aGVuIEphdmFTY3JpcHQgYWN0aW9ucyBhcmUgZW5hYmxlZC4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0M2UwMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNi50eHQKQEAgLTAsMCArMSwxNiBAQAorR2l0IHYxLjcuNi42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNi41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgY29kZSB0byBsb29rIHVwIGF0dHJpYnV0ZXMgZm9yIHBhdGhzIHJldXNlZCBlbnRyaWVzIGZyb20gYSB3cm9uZworICAgZGlyZWN0b3J5IHdoZW4gdHdvIHBhdGhzIGluIHF1ZXN0aW9uIGFyZSBpbiBhZGphY2VudCBkaXJlY3RvcmllcyBhbmQKKyAgIHRoZSBuYW1lIG9mIHRoZSBvbmUgZGlyZWN0b3J5IGlzIGEgcHJlZml4IG9mIHRoZSBvdGhlci4KKworICogV2hlbiBwcm9kdWNpbmcgYSAidGhpbiBwYWNrIiAocHJpbWFyaWx5IHVzZWQgaW4gYnVuZGxlcyBhbmQgc21hcnQKKyAgIEhUVFAgdHJhbnNmZXJzKSBvdXQgb2YgYSBmdWxseSBwYWNrZWQgcmVwb3NpdG9yeSwgd2UgdW5uZWNlc3NhcmlseQorICAgYXZvaWRlZCBzZW5kaW5nIHJlY2VudCBvYmplY3RzIGFzIGEgZGVsdGEgYWdhaW5zdCBvYmplY3RzIHdlIGtub3cKKyAgIHRoZSBvdGhlciBzaWRlIGhhcy4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWM0OThlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi50eHQKQEAgLTAsMCArMSwxMzYgQEAKK0dpdCB2MS43LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNy41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBWYXJpb3VzIGdpdC1zdm4gdXBkYXRlcy4KKworICogVXBkYXRlcyB0aGUgd2F5IGNvbnRlbnQgdGFncyBhcmUgaGFuZGxlZCBpbiBnaXR3ZWIuICBBbHNvIGFkZHMKKyAgIGEgVUkgdG8gY2hvb3NlIGNvbW1vbiB0aW1lem9uZSBmb3IgZGlzcGxheWluZyB0aGUgZGF0ZXMuCisKKyAqIFNpbWlsYXIgdG8gYnJhbmNoIG5hbWVzLCB0YWduYW1lcyB0aGF0IGJlZ2luIHdpdGggIi0iIGFyZSBub3cKKyAgIGRpc2FsbG93ZWQuCisKKyAqIENsZWFuLXVwIG9mIHRoZSBDIHBhcnQgb2YgaTE4biAoYnV0IG5vdCBsMTBuLS0tcGxlYXNlIHdhaXQpCisgICBjb250aW51ZXMuCisKKyAqIFRoZSBzY3JpcHRpbmcgcGFydCBvZiB0aGUgY29kZWJhc2UgaXMgZ2V0dGluZyBwcmVwYXJlZCBmb3IgaTE4bi9sMTBuLgorCisgKiBQdXNoaW5nIGFuZCBwdWxsaW5nIGZyb20gYSByZXBvc2l0b3J5IHdpdGggbGFyZ2UgbnVtYmVyIG9mIHJlZnMgdGhhdAorICAgcG9pbnQgdG8gaWRlbnRpY2FsIGNvbW1pdHMgYXJlIG9wdGltaXplZCBieSBub3QgbGlzdGluZyB0aGUgc2FtZSBjb21taXQKKyAgIGR1cmluZyB0aGUgY29tbW9uIGFuY2VzdG9yIG5lZ290aWF0aW9uIGV4Y2hhbmdlIHdpdGggdGhlIG90aGVyIHNpZGUuCisKKyAqIEFkZGluZyBhIGZpbGUgbGFyZ2VyIHRoYW4gY29yZS5iaWdmaWxldGhyZXNob2xkIChkZWZhdWx0cyB0byAxLzIgR2lnKQorICAgdXNpbmcgImdpdCBhZGQiIHdpbGwgc2VuZCB0aGUgY29udGVudHMgc3RyYWlnaHQgdG8gYSBwYWNrZmlsZSB3aXRob3V0CisgICBoYXZpbmcgdG8gaG9sZCBpdCBhbmQgaXRzIGNvbXByZXNzZWQgcmVwcmVzZW50YXRpb24gYm90aCBhdCB0aGUgc2FtZQorICAgdGltZSBpbiBtZW1vcnkuCisKKyAqIFByb2Nlc3NlcyBzcGF3bmVkIGJ5ICJbYWxpYXNdIDxuYW1lPiA9ICFwcm9jZXNzIiBpbiB0aGUgY29uZmlndXJhdGlvbgorICAgY2FuIGluc3BlY3QgR0lUX1BSRUZJWCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBsZWFybiB3aGVyZSBpbiB0aGUKKyAgIHdvcmtpbmcgdHJlZSB0aGUgb3JpZ2luYWwgY29tbWFuZCB3YXMgaW52b2tlZC4KKworICogQSBtYWdpYyBwYXRoc3BlYyAiOi8iIHRlbGxzIGEgY29tbWFuZCB0aGF0IGxpbWl0cyBpdHMgb3BlcmF0aW9uIHRvCisgICB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hlbiByYW4gZnJvbSBhIHN1YmRpcmVjdG9yeSB0byB3b3JrIG9uIHRoZQorICAgZW50aXJlIHdvcmtpbmcgdHJlZS4gSW4gZ2VuZXJhbCwgIjovcGF0aC90by9maWxlIiB3b3VsZCBiZSByZWxhdGl2ZQorICAgdG8gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZSBoaWVyYXJjaHkuCisKKyAgIEFmdGVyICJnaXQgcmVzZXQgLS1oYXJkOyBlZGl0IE1ha2VmaWxlOyBjZCB0LyIsICJnaXQgYWRkIC11IiB3b3VsZAorICAgYmUgYSBuby1vcCwgYnV0ICJnaXQgYWRkIC11IDovIiB3b3VsZCBhZGQgdGhlIHVwZGF0ZWQgY29udGVudHMgb2YKKyAgIHRoZSBNYWtlZmlsZSBhdCB0aGUgdG9wIGxldmVsLiBJZiB5b3Ugd2FudCB0byBuYW1lIGEgcGF0aCBpbiB0aGUKKyAgIGN1cnJlbnQgc3ViZGlyZWN0b3J5IHdob3NlIHVudXN1YWwgbmFtZSBiZWdpbnMgd2l0aCAiOi8iLCB5b3UgY2FuCisgICBuYW1lIGl0IGJ5ICIuLzovdGhhdC9wYXRoIiBvciBieSAiXDovdGhhdC9wYXRoIi4KKworICogImdpdCBibGFtZSIgbGVhcm5lZCAiLS1hYmJyZXZbPTxuPl0iIG9wdGlvbiB0byBjb250cm9sIHRoZSBtaW5pbXVtCisgICBudW1iZXIgb2YgaGV4ZGlnaXRzIHNob3duIGZvciBjb21taXQgb2JqZWN0IG5hbWVzLgorCisgKiAiZ2l0IGJsYW1lIiBsZWFybmVkICItLWxpbmUtcG9yY2VsYWluIiB0aGF0IGlzIGxlc3MgZWZmaWNpZW50IGJ1dCBpcworICAgZWFzaWVyIHRvIHBhcnNlLgorCisgKiBBYm9ydGluZyAiZ2l0IGNvbW1pdCAtLWludGVyYWN0aXZlIiBkaXNjYXJkcyB1cGRhdGVzIHRvIHRoZSBpbmRleAorICAgbWFkZSBkdXJpbmcgdGhlIGludGVyYWN0aXZlIHNlc3Npb24uCisKKyAqICJnaXQgY29tbWl0IiBsZWFybmVkIGEgIi0tcGF0Y2giIG9wdGlvbiB0byBkaXJlY3RseSBqdW1wIHRvIHRoZQorICAgcGVyLWh1bmsgc2VsZWN0aW9uIFVJIG9mIHRoZSBpbnRlcmFjdGl2ZSBtb2RlLgorCisgKiAiZ2l0IGRpZmYiIGFuZCBpdHMgZmFtaWx5IG9mIGNvbW1hbmRzIGxlYXJuZWQgLS1kaXJzdGF0PTAgdG8gc2hvdworICAgZGlyZWN0b3JpZXMgdGhhdCBjb250cmlidXRlIGxlc3MgdGhhbiAwLjElIG9mIGNoYW5nZXMuCisKKyAqICJnaXQgZGlmZiIgYW5kIGl0cyBmYW1pbHkgb2YgY29tbWFuZHMgbGVhcm5lZCAtLWRpcnN0YXQ9bGluZXMgbW9kZSB0bworICAgYXNzZXNzIGRhbWFnZSB0byB0aGUgZGlyZWN0b3J5IGJhc2VkIG9uIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgcGF0Y2gKKyAgIG91dHB1dCwgbm90IGJhc2VkIG9uIHRoZSBzaW1pbGFyaXR5IG51bWJlcnMuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkICItLXF1aWV0IiBvcHRpb24gdG8gc3VwcHJlc3MgdGhlIG91dHB1dCBvZgorICAgdGhlIG5hbWVzIG9mIGdlbmVyYXRlZCBmaWxlcy4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIHF1b3RlcyBwZW9wbGUncyBuYW1lcyB3aGVuIGl0IGhhcyBSRkM4MjIgc3BlY2lhbAorICAgY2hhcmFjdGVycyBpbiBpdCwgZS5nLiAiSnVuaW8gQy4gSGFtYW5vIiA8amNoQGV4YW1wbGUuY29tPi4gIEVhcmxpZXIKKyAgIGl0IHdhcyB1cCB0byB0aGUgdXNlciB0byBkbyB0aGlzIHdoZW4gdXNpbmcgaXRzIG91dHB1dC4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGNhbiB0YWtlIGFuIGVtcHR5IC0tc3ViamVjdC1wcmVmaXggbm93LgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgdGhlICItUCIgb3B0aW9uIHRvIHRha2UgcGNyZSByZWd1bGFyIGV4cHJlc3Npb25zLgorCisgKiAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgbGVhcm5lZCBhIG5ldyAiLS1ub3RlcyIgb3B0aW9uIHRvIHJlcGxhY2UgdGhlCisgICAiLS1zaG93LW5vdGVzIiBvcHRpb24uICBVbmxpa2UgIi0tc2hvdy1ub3RlcyIsICItLW5vdGVzPTxyZWY+IiBkb2VzCisgICBub3QgaW1wbHkgc2hvd2luZyB0aGUgZGVmYXVsdCBub3Rlcy4KKworICogVGhleSBhbHNvIGxlYXJuZWQgYSBsb2cuYWJicmV2Q29tbWl0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gYXVnbWVudAorICAgdGhlIC0tYWJicmV2LWNvbW1pdCBjb21tYW5kIGxpbmUgb3B0aW9uLgorCisgKiAiZ2l0IGxzLXJlbW90ZSIgbGVhcm5lZCAiLS1leGl0LWNvZGUiIG9wdGlvbiB0byBjb25zaWRlciBpdCBhCisgICBkaWZmZXJlbnQga2luZCBvZiBlcnJvciB3aGVuIG5vIHJlbW90ZSByZWYgdG8gYmUgc2hvd24uCisKKyAqICJnaXQgbWVyZ2UiIGxlYXJuZWQgIi0iIGFzIGEgc2hvcnQtaGFuZCBmb3IgInRoZSBwcmV2aW91cyBicmFuY2giLCBqdXN0CisgICBsaWtlIHRoZSB3YXkgImdpdCBjaGVja291dCAtIiB3b3Jrcy4KKworICogImdpdCBtZXJnZSIgdXNlcyAibWVyZ2UuZmYiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gZGVjaWRlIHRvIGFsd2F5cworICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IChpLmUuIC0tbm8tZmYsIGFrYSBtZXJnZS5mZj1ubyksIHJlZnVzZSB0byBjcmVhdGUKKyAgIGEgbWVyZ2UgY29tbWl0IChpLmUuIC0tZmYtb25seSwgYWthIG1lcmdlLmZmPW9ubHkpLiBTZXR0aW5nIG1lcmdlLmZmPXllcworICAgKG9yIG5vdCBzZXR0aW5nIGl0IGF0IGFsbCkgcmVzdG9yZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIGFsbG93aW5nCisgICBmYXN0LWZvcndhcmQgdG8gaGFwcGVuIHdoZW4gcG9zc2libGUuCisKKyAqIHA0LWltcG9ydCAoZnJvbSBjb250cmliKSBsZWFybmVkIGEgbmV3IG9wdGlvbiAtLXByZXNlcnZlLXVzZXIuCisKKyAqICJnaXQgcmVhZC10cmVlIC1tIiBsZWFybmVkICItLWRyeS1ydW4iIG9wdGlvbiB0aGF0IHJlcG9ydHMgaWYgYSBtZXJnZQorICAgd291bGQgZmFpbCB3aXRob3V0IHRvdWNoaW5nIHRoZSBpbmRleCBub3IgdGhlIHdvcmtpbmcgdHJlZS4KKworICogImdpdCByZWJhc2UiIHRoYXQgZG9lcyBub3Qgc3BlY2lmeSBvbiB0b3Agb2Ygd2hpY2ggYnJhbmNoIHRvIHJlYmFzZQorICAgdGhlIGN1cnJlbnQgYnJhbmNoIG5vdyB1c2VzIEB7dXBzdHJlYW19IG9mIHRoZSBjdXJyZW50IGJyYW5jaC4KKworICogImdpdCByZWJhc2UiIGZpbmlzaGVkIGVpdGhlciBub3JtYWxseSBvciB3aXRoIC0tYWJvcnQgZGlkIG5vdAorICAgdXBkYXRlIHRoZSByZWZsb2cgZm9yIEhFQUQgdG8gcmVjb3JkIHRoZSBldmVudCB0byBjb21lIGJhY2sgdG8KKyAgIHdoZXJlIGl0IHN0YXJ0ZWQgZnJvbS4KKworICogImdpdCByZW1vdGUgYWRkIC10IG9ubHktdGhpcy1icmFuY2ggLS1taXJyb3I9ZmV0Y2giIGlzIG5vdyBhbGxvd2VkLiBFYXJsaWVyCisgICBhIGZldGNoLW1vZGUgbWlycm9yIG1lYW50IG1pcnJvciBldmVyeXRoaW5nLCBidXQgbm93IGl0IG9ubHkgbWVhbnMgcmVmcyBhcmUKKyAgIG5vdCByZW5hbWVkLgorCisgKiAiZ2l0IHJldi1saXN0IC0tY291bnQiIHVzZWQgd2l0aCAiLS1jaGVycnktbWFyayIgY291bnRzIHRoZSBjaGVycnktcGlja2VkCisgICBjb21taXRzIHNlcGFyYXRlbHksIHByb2R1Y2luZyBtb3JlIGEgdXNlZnVsIG91dHB1dC4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBsZWFybmVkICItLWZvcmNlIiBvcHRpb24gdG8gZ2V0IHJpZCBvZiBsb2NhbAorICAgY2hhbmdlcyBpbiBzdWJtb2R1bGVzIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgdXAtdG8tZGF0ZSB2ZXJzaW9uLgorCisgKiAiZ2l0IHN0YXR1cyIgYW5kIGZyaWVuZHMgaWdub3JlIC5naXRtb2R1bGVzIGZpbGUgd2hpbGUgdGhlIGZpbGUgaXMKKyAgIHN0aWxsIGluIGEgY29uZmxpY3RlZCBzdGF0ZSBkdXJpbmcgYSBtZXJnZSwgdG8gYXZvaWQgdXNpbmcgaW5mb3JtYXRpb24KKyAgIHRoYXQgaXMgbm90IGZpbmFsIGFuZCBwb3NzaWJseSBjb3JydXB0IHdpdGggY29uZmxpY3QgbWFya2Vycy4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgbWlub3IgbWlzY2VsbGFuZW91cworY2hhbmdlcy4KKworCitGaXhlcyBzaW5jZSB2MS43LjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIGluIDEuNy41LlggbWFpbnRlbmFuY2UgdHJhY2sgYXJlCitpbmNsdWRlZCBpbiB0aGlzIHJlbGVhc2UuCisKKyAqICJnaXQgY29uZmlnIiB1c2VkIHRvIGNob2tlIHdpdGggYW4gaW5zYW5lbHkgbG9uZyBsaW5lLgorICAgKG1lcmdlIGVmL21haW50LXN0cmJ1Zi1pbml0IGxhdGVyKQorCisgKiAiZ2l0IGRpZmYgLS1xdWlldCIgZGlkIG5vdCB3b3JrIHdlbGwgd2l0aCAtLWRpZmYtZmlsdGVyLgorICAgKG1lcmdlIGprL2RpZmYtbm90LXNvLXF1aWNrIGxhdGVyKQorCisgKiAiZ2l0IHN0YXR1cyAteiIgZGlkIG5vdCBkZWZhdWx0IHRvIC0tcG9yY2VsYWluIG91dHB1dCBmb3JtYXQuCisgICAobWVyZ2UgYmMvbWFpbnQtc3RhdHVzLXotdG8tdXNlLXBvcmNlbGFpbiBsYXRlcikKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOWI4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjEudHh0CkBAIC0wLDAgKzEsNjAgQEAKK0dpdCB2MS43LjcuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjcKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBPbiBzb21lIEJTRCBzeXN0ZW1zLCBhZGRpbmcgK3MgYml0IG9uIGRpcmVjdG9yaWVzIGlzIGRldHJpbWVudGFsCisgICAoaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBCU0QgdG8gYmVnaW4gd2l0aCkuICJnaXQgaW5pdCAtLXNoYXJlZCIKKyAgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGFrZSB0aGlzIGludG8gYWNjb3VudCB3aXRob3V0IGV4dHJhIG1ha2VmaWxlCisgICBzZXR0aW5ncyBvbiBwbGF0Zm9ybXMgdGhlIE1ha2VmaWxlIGtub3dzIGFib3V0LgorCisgKiBBZnRlciBpbmNvcnJlY3RseSB3cml0dGVuIHRoaXJkLXBhcnR5IHRvb2xzIHN0b3JlIGEgdGFnIG9iamVjdCBpbgorICAgSEVBRCwgZ2l0IGRpYWdub3NlZCBpdCBhcyBhIHJlcG9zaXRvcnkgY29ycnVwdGlvbiBhbmQgcmVmdXNlZCB0bworICAgcHJvY2VlZCBpbiBvcmRlciB0byBhdm9pZCBzcHJlYWRpbmcgdGhlIGRhbWFnZS4gV2Ugbm93IGdyYWNlZnVsbHkKKyAgIHJlY292ZXIgZnJvbSBzdWNoIGEgc2l0dWF0aW9uIGJ5IHByZXRlbmRpbmcgYXMgaWYgdGhlIGNvbW1pdCB0aGF0CisgICBpcyBwb2ludGVkIGF0IGJ5IHRoZSB0YWcgd2VyZSBpbiBIRUFELgorCisgKiAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1lcnJvciIgZGlkIG5vdCBib3RoZXIgdG8gcmVwb3J0IHRoZSBleGFjdAorICAgbGluZSBudW1iZXIgaW4gdGhlIHBhdGNoIHRoYXQgaW50cm9kdWNlZCBuZXcgYmxhbmsgbGluZXMgYXQgdGhlIGVuZAorICAgb2YgdGhlIGZpbGUuCisKKyAqICJnaXQgYXBwbHkgLS1pbmRleCIgZGlkIG5vdCBjaGVjayBjb3JydXB0ZWQgcGF0Y2guCisKKyAqICJnaXQgY2hlY2tvdXQgJHRyZWUgJGRpcmVjdG9yeS8iIHJlc3VycmVjdGVkIHBhdGhzIGxvY2FsbHkgcmVtb3ZlZCBvcgorICAgbW9kaWZpZWQgb25seSBpbiB0aGUgd29ya2luZyB0cmVlIGluICRkaXJlY3RvcnkvIHRoYXQgZGlkIG5vdCBhcHBlYXIKKyAgIGluICRkaXJlY3Rvcnkgb2YgdGhlIGdpdmVuICR0cmVlLiBUaGV5IHNob3VsZCBoYXZlIGJlZW4ga2VwdCBpbnRhY3QuCisKKyAqICJnaXQgZGlmZiAkdHJlZSAkcGF0aCIgdXNlZCB0byBhcHBseSB0aGUgcGF0aHNwZWMgYXQgdGhlIG91dHB1dCBzdGFnZSwKKyAgIHJlYWRpbmcgdGhlIHdob2xlIHRyZWUsIHdhc3RpbmcgcmVzb3VyY2VzLgorCisgKiBUaGUgY29kZSB0byBjaGVjayBmb3IgdXBkYXRlZCBzdWJtb2R1bGVzIGR1cmluZyBhICJnaXQgZmV0Y2giIG9mIHRoZQorICAgc3VwZXJwcm9qZWN0IGhhZCBhbiB1bm5lY2Vzc2FyeSBxdWFkcmF0aWMgbG9vcC4KKworICogImdpdCBmZXRjaCIgZnJvbSBhIGxhcmdlIGJ1bmRsZSBkaWQgbm90IGVuYWJsZSB0aGUgcHJvZ3Jlc3Mgb3V0cHV0LgorCisgKiBXaGVuICJnaXQgZnNjayAtLWxvc3QtYW5kLWZvdW5kIiBmb3VuZCB0aGF0IGFuIGVtcHR5IGJsb2Igb2JqZWN0IGluIHRoZQorICAgb2JqZWN0IHN0b3JlIGlzIHVucmVhY2hhYmxlLCBpdCBpbmNvcnJlY3RseSByZXBvcnRlZCBhbiBlcnJvciBhZnRlcgorICAgd3JpdGluZyB0aGUgbG9zdCBibG9iIG91dCBzdWNjZXNzZnVsbHkuCisKKyAqICJnaXQgZmlsdGVyLWJyYW5jaCIgZGlkIG5vdCByZWZyZXNoIHRoZSBpbmRleCBiZWZvcmUgY2hlY2tpbmcgdGhhdCB0aGUKKyAgIHdvcmtpbmcgdHJlZSB3YXMgY2xlYW4uCisKKyAqICJnaXQgZ3JlcCAkdHJlZSIgd2hlbiBydW4gd2l0aCBtdWx0aXBsZSB0aHJlYWRzIGhhZCBhbiB1bnNhZmUgYWNjZXNzIHRvCisgICB0aGUgb2JqZWN0IGRhdGFiYXNlIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBwcm90ZWN0ZWQgd2l0aCBtdXRleC4KKworICogVGhlICItLWFuY2VzdHJ5LXBhdGgiIG9wdGlvbiB0byAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgbWlzYmVoYXZlZCBpbiBhCisgICBoaXN0b3J5IHdpdGggY29tcGxleCBjcmlzcy1jcm9zcyBtZXJnZXMgYW5kIHNob3dlZCBhbiB1bmludGVyZXN0aW5nCisgICBzaWRlIGhpc3RvcnkgYXMgd2VsbC4KKworICogVGVzdCB0MTMwNCBhc3N1bWVkIExPR05BTUUgaXMgYWx3YXlzIHNldCwgd2hpY2ggbWF5IG5vdCBiZSB0cnVlIG9uCisgICBzb21lIHN5c3RlbXMuCisKKyAqIFRlc3RzIHdpdGggLS12YWxncmluZCBmYWlsZWQgdG8gZmluZCAibWVyZ2V0b29sIiBzY3JpcHRsZXRzLgorCisgKiAiZ2l0IHBhdGNoLWlkIiBtaXNjb21wdXRlZCB0aGUgcGF0Y2gtaWQgaW4gYSBwYXRjaCB0aGF0IGhhcyBhIGxpbmUgbG9uZ2VyCisgICB0aGFuIDFrQi4KKworICogV2hlbiBhbiAiZXhlYyIgaW5zbiBmYWlsZWQgYWZ0ZXIgbW9kaWZ5aW5nIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcKKyAgIHRyZWUgZHVyaW5nICJyZWJhc2UgLWkiLCB3ZSBub3cgY2hlY2sgYW5kIHdhcm4gdGhhdCB0aGUgY2hhbmdlcyBuZWVkIHRvCisgICBiZSBjbGVhbmVkIHVwLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiYmVmMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuMi50eHQKQEAgLTAsMCArMSw0NCBAQAorR2l0IHYxLjcuNy4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNy4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBXZSB1c2VkIHRvIGRyb3AgZXJyb3IgbWVzc2FnZXMgZnJvbSBsaWJjdXJsIG9uIGNlcnRhaW4ga2luZHMgb2YKKyAgIGVycm9ycy4KKworICogRXJyb3IgcmVwb3J0IGZyb20gc21hcnQgSFRUUCB0cmFuc3BvcnQsIHdoZW4gdGhlIGNvbm5lY3Rpb24gd2FzCisgICBicm9rZW4gaW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5zZmVyLCBzaG93ZWQgYSB1c2VsZXNzIG1lc3NhZ2Ugb24KKyAgIGEgY29ycnVwdCBwYWNrZXQuCisKKyAqICJnaXQgZmV0Y2ggLS1wcnVuZSIgd2FzIHVuc2FmZSB3aGVuIHVzZWQgd2l0aCByZWZzcGVjcyBmcm9tIHRoZQorICAgY29tbWFuZCBsaW5lLgorCisgKiBUaGUgYXR0cmlidXRlIG1lY2hhbmlzbSBkaWQgbm90IHVzZSBjYXNlIGluc2Vuc2l0aXZlIG1hdGNoIHdoZW4KKyAgIGNvcmUuaWdub3JlY2FzZSB3YXMgc2V0LgorCisgKiAiZ2l0IGJpc2VjdCIgZGlkIG5vdCBub3RpY2Ugd2hlbiBpdCBmYWlsZWQgdG8gdXBkYXRlIHRoZSB3b3JraW5nIHRyZWUKKyAgIHRvIHRoZSBuZXh0IGNvbW1pdCB0byBiZSB0ZXN0ZWQuCisKKyAqICJnaXQgY29uZmlnIC0tYm9vbCAtLWdldC1yZWdleHAiIGZhaWxlZCB0byBzZXBhcmF0ZSB0aGUgdmFyaWFibGUgbmFtZQorICAgYW5kIGl0cyB2YWx1ZSAidHJ1ZSIgd2hlbiB0aGUgdmFyaWFibGUgaXMgZGVmaW5lZCB3aXRob3V0ICI9IHRydWUiLgorCisgKiAiZ2l0IHJlbW90ZSByZW5hbWUgJGEgJGIiIHdlcmUgbm90IGNhcmVmdWwgdG8gbWF0Y2ggdGhlIHJlbW90ZSBuYW1lCisgICBhZ2FpbnN0ICRhIChpLmUuIHNvdXJjZSBzaWRlIG9mIHRoZSByZW1vdGUgbmlja25hbWUpLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgZGlkIG5vdCB1c2UgaXRzIGFyZ3VtZW50cyBhcyBwYXRoc3BlYywgYnV0IGFzIGEgcGF0aCB0bworICAgdGhlIGZpbGUgdGhhdCBtYXkgbm90IGV2ZW4gaGF2ZSBhbnkgY29uZmxpY3QuCisKKyAqICJnaXQgZGlmZiAtLVtudW1dc3RhdCIgdXNlZCB0byB1c2UgdGhlIG51bWJlciBvZiBsaW5lcyBvZiBjb250ZXh0CisgICBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCwgcG90ZW50aWFsbHkgZ2l2aW5nIGRpZmZlcmVudCByZXN1bHRzIGZyb20KKyAgICJnaXQgZGlmZiB8IGRpZmZzdGF0IiBhbmQgY29uZnVzaW5nIHRoZSB1c2Vycy4KKworICogImdpdCBwdWxsIiBhbmQgImdpdCByZWJhc2UiIGRpZCBub3Qgd29yayB3ZWxsIGV2ZW4gd2hlbiBHSVRfV09SS19UUkVFIGlzCisgICBzZXQgY29ycmVjdGx5IHdpdGggR0lUX0RJUiBpZiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgb3V0c2lkZSB0aGUgd29ya2luZworICAgdHJlZS4KKworICogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IGhvbm9yIHRoZSBjb25maWd1cmVkIGhvc3RuYW1lIHdoZW4gcmVzdGFydGluZworICAgdGhlIEhFTE8vRUhMTyBleGNoYW5nZSBhZnRlciBzd2l0Y2hpbmcgVExTIG9uLgorCisgKiAiZ2l0d2ViIiB1c2VkIHRvIHByb2R1Y2UgYSBub24td29ya2luZyBsaW5rIHdoaWxlIHNob3dpbmcgdGhlIGNvbnRlbnRzCisgICBvZiBhIGJsb2IsIHdoZW4gSmF2YVNjcmlwdCBhY3Rpb25zIGFyZSBlbmFibGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkzMDFmMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuMy50eHQKQEAgLTAsMCArMSwxOSBAQAorR2l0IHYxLjcuNy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNy4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBZGp1c3QgdGhlICJxdWljay1pbnN0YWxsLWRvYyIgcHJvY2VkdXJlcyBhcyBwcmVmb3JtYXR0ZWQKKyAgIGh0bWwvbWFucGFnZSBhcmUgbm8gbG9uZ2VyIGluIHRoZSBzb3VyY2UgcmVwb3NpdG9yeS4KKworICogVGhlIGxvZ2ljIHRvIG9wdGltaXplIHRoZSBsb2NhbGl0eSBvZiB0aGUgZGF0YSBpbiBhIHBhY2sgaW50cm9kdWNlZCBpbgorICAgMS43Ljcgd2FzIGdyb3NzbHkgaW5lZmZpY2llbnQuCisKKyAqIFRoZSBsb2dpYyB0byBmaWx0ZXIgb3V0IGZvcmtlZCBwcm9qZWN0cyBpbiB0aGUgcHJvamVjdCBsaXN0IGluCisgICAiZ2l0d2ViIiB3YXMgYnJva2VuIGZvciBzb21lIHRpbWUuCisKKyAqICJnaXQgYnJhbmNoIC1tLy1NIiBhZHZlcnRpc2VkIHRvIHVwZGF0ZSBSRU5BTUVfUkVGIHJlZiBpbiB0aGUKKyAgIGNvbW1pdCBsb2cgbWVzc2FnZSB0aGF0IGludHJvZHVjZWQgdGhlIGZlYXR1cmUgYnV0IG5vdCBhbnl3aGVyZSBpbgorICAgdGhlIGRvY3VtZW50YXRpb24sIGFuZCBuZXZlciBkaWQgdXBkYXRlIHN1Y2ggYSByZWYgYW55d2F5LiBUaGlzCisgICB1bmRvY3VtZW50ZWQgbWlzZmVhdHVyZSB0aGF0IGRpZCBub3QgZXhpc3QgaGFzIGJlZW4gZXhjaXNlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MjM0NDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjQudHh0CkBAIC0wLDAgKzEsMTQgQEAKK0dpdCB2MS43LjcuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjcuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQSBmZXcgaGVhZGVyIGRlcGVuZGVuY2llcyB3ZXJlIG1pc3NpbmcgZnJvbSB0aGUgTWFrZWZpbGUuCisKKyAqIFNvbWUgbmV3ZXIgcGFydHMgb2YgdGhlIGNvZGUgdXNlZCBDOTkgX19WQV9BUkdTX18gd2hpbGUgd2Ugc3RpbGwKKyAgIHRyeSB0byBjYXRlciB0byBvbGRlciBjb21waWxlcnMuCisKKyAqICJnaXQgbmFtZS1yZXYgLS1hbGwiIHRyaWVkIHRvIG5hbWUgYWxsIF9vYmplY3RzXywgbmF0dXJhbGx5IGZhaWxpbmcgdG8KKyAgIGRlc2NyaWJlIG1hbnkgYmxvYnMgYW5kIHRyZWVzLCBpbnN0ZWFkIG9mIHNob3dpbmcgb25seSBjb21taXRzIGFzCisgICBhZHZlcnRpc2VkIGluIGl0cyBkb2N1bWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwOTMxOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNS50eHQKQEAgLTAsMCArMSwxNCBAQAorR2l0IHYxLjcuNy41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNy40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBZnRlciBmZXRjaGluZyBmcm9tIGEgcmVtb3RlIHRoYXQgaGFzIHZlcnkgbG9uZyByZWZuYW1lLCB0aGUgcmVwb3J0aW5nCisgICBvdXRwdXQgY291bGQgaGF2ZSBjb3JydXB0ZWQgYnkgb3ZlcnJ1bm5pbmcgYSBzdGF0aWMgYnVmZmVyLgorCisgKiAiZ2l0IGNoZWNrb3V0IiBhbmQgImdpdCBtZXJnZSIgdHJlYXRlZCBpbi10cmVlIC5naXRpZ25vcmUgYW5kIGV4Y2x1ZGUKKyAgIGZpbGUgaW4gJEdJVF9ESVIvaW5mby8gZGlyZWN0b3J5IGluY29uc2lzdGVudGx5IHdoZW4gZGVjaWRpbmcgd2hpY2gKKyAgIHVudHJhY2tlZCBmaWxlcyBhcmUgaWdub3JlZCBhbmQgZXhwZW5kYWJsZS4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmNjA2ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNi50eHQKQEAgLTAsMCArMSwyMCBAQAorR2l0IHYxLjcuNy42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNy41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgY29kZSB0byBsb29rIHVwIGF0dHJpYnV0ZXMgZm9yIHBhdGhzIHJldXNlZCBlbnRyaWVzIGZyb20gYSB3cm9uZworICAgZGlyZWN0b3J5IHdoZW4gdHdvIHBhdGhzIGluIHF1ZXN0aW9uIGFyZSBpbiBhZGphY2VudCBkaXJlY3RvcmllcyBhbmQKKyAgIHRoZSBuYW1lIG9mIHRoZSBvbmUgZGlyZWN0b3J5IGlzIGEgcHJlZml4IG9mIHRoZSBvdGhlci4KKworICogQSB3aWxkY2FyZCB0aGF0IG1hdGNoZXMgZGVlcGVyIGhpZXJhcmNoeSBnaXZlbiB0byB0aGUgImRpZmYtaW5kZXgiIGNvbW1hbmQsCisgICBlLmcuICJnaXQgZGlmZi1pbmRleCBIRUFEIC0tICcqLnR4dCciLCBpbmNvcnJlY3RseSByZXBvcnRlZCBhZGRpdGlvbnMgb2YKKyAgIG1hdGNoaW5nIGZpbGVzIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBjaGFuZ2UuCisKKyAqIFdoZW4gcHJvZHVjaW5nIGEgInRoaW4gcGFjayIgKHByaW1hcmlseSB1c2VkIGluIGJ1bmRsZXMgYW5kIHNtYXJ0CisgICBIVFRQIHRyYW5zZmVycykgb3V0IG9mIGEgZnVsbHkgcGFja2VkIHJlcG9zaXRvcnksIHdlIHVubmVjZXNzYXJpbHkKKyAgIGF2b2lkZWQgc2VuZGluZyByZWNlbnQgb2JqZWN0cyBhcyBhIGRlbHRhIGFnYWluc3Qgb2JqZWN0cyB3ZSBrbm93CisgICB0aGUgb3RoZXIgc2lkZSBoYXMuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OTExOGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjcudHh0CkBAIC0wLDAgKzEsMTMgQEAKK0dpdCB2MS43LjcuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjcuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gZXJyb3IgbWVzc2FnZSBmcm9tICdnaXQgYnVuZGxlJyBoYWQgYW4gdW5tYXRjaGVkIHNpbmdsZSBxdW90ZSBwYWlyIGluIGl0LgorCisgKiAnZ2l0IGRpZmYgLS1oaXN0b2dyYW0nIG9wdGlvbiB3YXMgbm90IGRlc2NyaWJlZC4KKworICogJ2dpdCBpbWFwLXNlbmQnIGNhcnJpZWQgYW4gdW51c2VkIGRlYWQgY29kZS4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWZmMTI4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy50eHQKQEAgLTAsMCArMSwxMzQgQEAKK0dpdCB2MS43LjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNy42CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgc2NyaXB0aW5nIHBhcnQgb2YgdGhlIGNvZGViYXNlIGlzIGdldHRpbmcgcHJlcGFyZWQgZm9yIGkxOG4vbDEwbi4KKworICogSW50ZXJpeCwgQ3lnd2luIGFuZCBNaW5peCBwb3J0cyBnb3QgdXBkYXRlZC4KKworICogVmFyaW91cyB1cGRhdGVzIHRvIGdpdC1wNCAoaW4gY29udHJpYi8pLCBmYXN0LWltcG9ydCwgYW5kIGdpdC1zdm4uCisKKyAqIEdpdHdlYiBsZWFybmVkIHRvIHJlYWQgZnJvbSAvZXRjL2dpdHdlYi1jb21tb24uY29uZiB3aGVuIGl0IGV4aXN0cywKKyAgIGJlZm9yZSByZWFkaW5nIGZyb20gZ2l0d2ViX2NvbmZpZy5wZXJsIG9yIGZyb20gL2V0Yy9naXR3ZWIuY29uZgorICAgKHRoaXMgbGFzdCBvbmUgaXMgcmVhZCBvbmx5IHdoZW4gcGVyLXJlcG9zaXRvcnkgZ2l0d2ViX2NvbmZpZy5wZXJsCisgICBkb2VzIG5vdCBleGlzdCkuCisKKyAqIFZhcmlvdXMgY29kZXBhdGhzIHRoYXQgaW52b2tlZCB6bGliIGRlZmxhdGUvaW5mbGF0ZSBhc3N1bWVkIHRoYXQgdGhlc2UKKyAgIGZ1bmN0aW9ucyBjYW4gY29tcHJlc3Mgb3IgdW5jb21wcmVzcyBtb3JlIHRoYW4gNEdCIGRhdGEgaW4gb25lIGNhbGwgb24KKyAgIHBsYXRmb3JtcyB3aXRoIDY0LWJpdCBsb25nLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEdpdCBub3cgcmVjb2duaXplcyBsb29zZSBvYmplY3RzIHdyaXR0ZW4gYnkgb3RoZXIgaW1wbGVtZW50YXRpb25zIHRoYXQKKyAgIHVzZSBhIG5vbi1zdGFuZGFyZCB3aW5kb3cgc2l6ZSBmb3IgemxpYiBkZWZsYXRpb24gKGUuZy4gQWdpdCBydW5uaW5nIG9uCisgICBBbmRyb2lkIHdpdGggNGtiIHdpbmRvdykuIFdlIHVzZWQgdG8gcmVqZWN0IGFueXRoaW5nIHRoYXQgd2FzIG5vdAorICAgZGVmbGF0ZWQgd2l0aCAzMmtiIHdpbmRvdy4KKworICogSW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdXNlIG9mIHBhZ2VyIGFuZCBjb2xvcmluZyBvZiB0aGUgb3V0cHV0IGhhcworICAgYmVlbiBpbXByb3ZlZCwgZXNwZWNpYWxseSB3aGVuIGEgY29tbWFuZCB0aGF0IGlzIG5vdCBidWlsdC1pbiB3YXMKKyAgIGludm9sdmVkLgorCisgKiAiZ2l0IGFtIiBsZWFybmVkIHRvIHBhc3MgdGhlICItLWV4Y2x1ZGU9PHBhdGg+IiBvcHRpb24gdGhyb3VnaCB0byB1bmRlcmx5aW5nCisgICAiZ2l0IGFwcGx5Ii4KKworICogWW91IGNhbiBub3cgZmVlZCBtYW55IGVtcHR5IGxpbmVzIGJlZm9yZSBmZWVkaW5nIGFuIG1ib3ggZmlsZSB0bworICAgImdpdCBhbSIuCisKKyAqICJnaXQgYXJjaGl2ZSIgY2FuIGJlIHRvbGQgdG8gcGFzcyB0aGUgb3V0cHV0IHRvIGd6aXAgY29tcHJlc3Npb24gYW5kCisgICBwcm9kdWNlICJhcmNoaXZlLnRhci5neiIuCisKKyAqICJnaXQgYmlzZWN0IiBjYW4gYmUgdXNlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSAocHJvdmlkZWQgdGhhdCB0aGUgdGVzdAorICAgeW91IHBlcmZvcm0gcGVyIGVhY2ggaXRlcmF0aW9uIGRvZXMgbm90IG5lZWQgYSB3b3JraW5nIHRyZWUsIG9mCisgICBjb3Vyc2UpLgorCisgKiBUaGUgbGVuZ3RoIG9mIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lcyBpbiAiZ2l0IGJyYW5jaCAtdiIgb3V0cHV0CisgICBub3cgaG9ub3JzIHRoZSBjb3JlLmFiYnJldiBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiAiZ2l0IGNoZWNrLWF0dHIiIGNhbiB0YWtlIHJlbGF0aXZlIHBhdGhzIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworICogImdpdCBjaGVjay1hdHRyIiBsZWFybmVkIGFuICItLWFsbCIgb3B0aW9uIHRvIGxpc3QgdGhlIGF0dHJpYnV0ZXMgZm9yIGEKKyAgIGdpdmVuIHBhdGguCisKKyAqICJnaXQgY2hlY2tvdXQiIChib3RoIHRoZSBjb2RlIHRvIHVwZGF0ZSB0aGUgZmlsZXMgdXBvbiBjaGVja2luZyBvdXQgYQorICAgZGlmZmVyZW50IGJyYW5jaCBhbmQgdGhlIGNvZGUgdG8gY2hlY2tvdXQgYSBzcGVjaWZpYyBzZXQgb2YgZmlsZXMpIGxlYXJuZWQKKyAgIHRvIHN0cmVhbSB0aGUgZGF0YSBmcm9tIG9iamVjdCBzdG9yZSB3aGVuIHBvc3NpYmxlLCB3aXRob3V0IGhhdmluZyB0bworICAgcmVhZCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIGEgZmlsZSBpbnRvIG1lbW9yeSBmaXJzdC4gQW4gZWFybGllciByb3VuZAorICAgb2YgdGhpcyBjb2RlIHRoYXQgaXMgbm90IGluIGFueSByZWxlYXNlZCB2ZXJzaW9uIGhhZCBhIGxhcmdlIGxlYWsgYnV0CisgICBub3cgaXQgaGFzIGJlZW4gcGx1Z2dlZC4KKworICogImdpdCBjbG9uZSIgY2FuIG5vdyB0YWtlIGEgIi0tY29uZmlnIGtleT12YWx1ZSIgb3B0aW9uIHRvIHNldCB0aGUKKyAgIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBpbml0aWFsIGNoZWNrb3V0LgorCisgKiAiZ2l0IGNvbW1pdCA8cGF0aHM+Li4uIiBub3cgbGV0cyB5b3UgZmVlZCByZWxhdGl2ZSBwYXRoc3BlY3MgdGhhdAorICAgcmVmZXIgdG8gb3V0c2lkZSB5b3VyIGN1cnJlbnQgc3ViZGlyZWN0b3J5LgorCisgKiAiZ2l0IGRpZmYgLS1zdGF0IiBsZWFybmVkIGEgLS1zdGF0LWNvdW50IG9wdGlvbiB0byBsaW1pdCB0aGUgb3V0cHV0IG9mCisgICBhIGRpZmZzdGF0IHJlcG9ydC4KKworICogImdpdCBkaWZmIiBsZWFybmVkIGEgIi0taGlzdG9ncmFtIiBvcHRpb24gdG8gdXNlIGEgZGlmZmVyZW50IGRpZmYKKyAgIGdlbmVyYXRpb24gbWFjaGluZXJ5IHN0b2xlbiBmcm9tIGpnaXQsIHdoaWNoIG1pZ2h0IGdpdmUgYmV0dGVyCisgICBwZXJmb3JtYW5jZS4KKworICogImdpdCBkaWZmIiBoYWQgYSB3ZWlyZCB3b3JzdCBjYXNlIGJlaGF2aW91ciB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQKKyAgIHdoZW4gY29tcGFyaW5nIGZpbGVzIHdpdGggcG90ZW50aWFsbHkgbWFueSBwbGFjZXMgdGhhdCBjb3VsZCBtYXRjaC4KKworICogImdpdCBmZXRjaCIsICJnaXQgcHVzaCIgYW5kIGZyaWVuZHMgbm8gbG9uZ2VyIHNob3cgY29ubmVjdGlvbgorICAgZXJyb3JzIGZvciBhZGRyZXNzZXMgdGhhdCBjb3VsZG4ndCBiZSBjb25uZWN0ZWQgdG8gd2hlbiBhdCBsZWFzdCBvbmUKKyAgIGFkZHJlc3Mgc3VjY2VlZHMgKHRoaXMgaXMgYXJndWFibHkgYSByZWdyZXNzaW9uIGJ1dCBhIGRlbGliZXJhdGUKKyAgIG9uZSkuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCAiLS1icmVhayIgYW5kICItLWhlYWRpbmciIG9wdGlvbnMsIHRvIGxldCB1c2VycyBtaW1pYworICAgdGhlIG91dHB1dCBmb3JtYXQgb2YgImFjayIuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCBhICItVyIgb3B0aW9uIHRoYXQgc2hvd3Mgd2lkZXIgY29udGV4dCB1c2luZyB0aGUgc2FtZQorICAgbG9naWMgdXNlZCBieSAiZ2l0IGRpZmYiIHRvIGRldGVybWluZSB0aGUgaHVuayBoZWFkZXIuCisKKyAqIEludm9raW5nIHRoZSBsb3ctbGV2ZWwgImdpdCBodHRwLWZldGNoIiB3aXRob3V0ICItYSIgb3B0aW9uICh3aGljaAorICAgZ2l0IGl0c2VsZiBuZXZlciBkaWQtLW5vcm1hbCB1c2VycyBzaG91bGQgbm90IGhhdmUgdG8gd29ycnkgYWJvdXQKKyAgIHRoaXMpIGlzIG5vdyBkZXByZWNhdGVkLgorCisgKiBUaGUgIi0tZGVjb3JhdGUiIG9wdGlvbiB0byAiZ2l0IGxvZyIgYW5kIGl0cyBmYW1pbHkgbGVhcm5lZCB0bworICAgaGlnaGxpZ2h0IGdyYWZ0ZWQgYW5kIHJlcGxhY2VkIGNvbW1pdHMuCisKKyAqICJnaXQgcmViYXNlIG1hc3RlciB0b3BjaSIgbm8gbG9uZ2VyIHNwZXdzIHVzYWdlIGhpbnRzIGFmdGVyIGdpdmluZworICAgdGhlICJmYXRhbDogbm8gc3VjaCBicmFuY2g6IHRvcGNpIiBlcnJvciBtZXNzYWdlLgorCisgKiBUaGUgcmVjdXJzaXZlIG1lcmdlIHN0cmF0ZWd5IGltcGxlbWVudGF0aW9uIGdvdCBhIGZhaXJseSBsYXJnZQorICAgZml4IGZvciBtYW55IGNvcm5lciBjYXNlcyB0aGF0IG1heSByYXJlbHkgaGFwcGVuIGluIHJlYWwgd29ybGQKKyAgIHByb2plY3RzIChpdCBoYXMgYmVlbiB2ZXJpZmllZCB0aGF0IG5vbmUgb2YgdGhlIDE2MDAwKyBtZXJnZXMgaW4KKyAgIHRoZSBMaW51eCBrZXJuZWwgaGlzdG9yeSBiYWNrIHRvIHYyLjYuMTIgaXMgYWZmZWN0ZWQgd2l0aCB0aGUKKyAgIGNvcm5lciBjYXNlIGJ1Z3MgdGhpcyB1cGRhdGUgZml4ZXMpLgorCisgKiAiZ2l0IHN0YXNoIiBsZWFybmVkIGFuICItLWluY2x1ZGUtdW50cmFja2VkIG9wdGlvbiIuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgdXNlZCB0byBzdG9wIGF0IHRoZSBmaXJzdCBlcnJvciB1cGRhdGluZyBhCisgICBzdWJtb2R1bGU7IGl0IG5vdyBnb2VzIG9uIHRvIHVwZGF0ZSBvdGhlciBzdWJtb2R1bGVzIHRoYXQgY2FuIGJlCisgICB1cGRhdGVkLCBhbmQgcmVwb3J0cyB0aGUgb25lcyB3aXRoIGVycm9ycyBhdCB0aGUgZW5kLgorCisgKiAiZ2l0IHB1c2giIGNhbiBiZSB0b2xkIHdpdGggdGhlICItLXJlY3Vyc2Utc3VibW9kdWxlcz1jaGVjayIgb3B0aW9uIHRvCisgICByZWZ1c2UgcHVzaGluZyBvZiB0aGUgc3VwZXJtb2R1bGUsIGlmIGFueSBvZiBpdHMgc3VibW9kdWxlcycKKyAgIGNvbW1pdHMgaGFzbid0IGJlZW4gcHVzaGVkIG91dCB0byB0aGVpciByZW1vdGVzLgorCisgKiAiZ2l0IHVwbG9hZC1wYWNrIiBhbmQgImdpdCByZWNlaXZlLXBhY2siIGxlYXJuZWQgdG8gcHJldGVuZCB0aGF0IG9ubHkgYQorICAgc3Vic2V0IG9mIHRoZSByZWZzIGV4aXN0IGluIGEgcmVwb3NpdG9yeS4gVGhpcyBtYXkgaGVscCBhIHNpdGUgdG8KKyAgIHB1dCBtYW55IHRpbnkgcmVwb3NpdG9yaWVzIGludG8gb25lIHJlcG9zaXRvcnkgKHRoaXMgd291bGQgbm90IGJlCisgICB1c2VmdWwgZm9yIGxhcmdlciByZXBvc2l0b3JpZXMgYXMgcmVwYWNraW5nIHdvdWxkIGJlIHByb2JsZW1hdGljKS4KKworICogImdpdCB2ZXJpZnktcGFjayIgaGFzIGJlZW4gcmV3cml0dGVuIHRvIHVzZSB0aGUgImluZGV4LXBhY2siIG1hY2hpbmVyeQorICAgdGhhdCBpcyBtb3JlIGVmZmljaWVudCBpbiByZWFkaW5nIG9iamVjdHMgaW4gcGFja2ZpbGVzLgorCisgKiB0ZXN0IHNjcmlwdHMgZm9yIGdpdHdlYiB0cmllZCB0byBydW4gZXZlbiB3aGVuIENHSS1yZWxhdGVkIHBlcmwgbW9kdWxlcworICAgYXJlIG5vdCBpbnN0YWxsZWQ7IHRoZXkgbm93IGV4aXQgZWFybHkgd2hlbiB0aGUgbGF0dGVyIGFyZSB1bmF2YWlsYWJsZS4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgbWlub3IgbWlzY2VsbGFuZW91cworY2hhbmdlcy4KKworCitGaXhlcyBzaW5jZSB2MS43LjYKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgZml4ZXMgaW4gdGhlIDEuNy42LlggbWFpbnRlbmFuY2UgdHJhY2sgYXJlCitpbmNsdWRlZCBpbiB0aGlzIHJlbGVhc2UuCisKKyAqICJnaXQgYnJhbmNoIC1tIiBhbmQgImdpdCBjaGVja291dCAtYiIgaW5jb3JyZWN0bHkgYWxsb3dlZCB0aGUgdGlwCisgICBvZiB0aGUgYnJhbmNoIHRoYXQgaXMgY3VycmVudGx5IGNoZWNrZWQgb3V0IHVwZGF0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2RjOTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4xLnR4dApAQCAtMCwwICsxLDM4IEBACitHaXQgdjEuNy44LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy44CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogSW4gc29tZSBjb2RlcGF0aHMgKG5vdGFibHksIGNoZWNrb3V0IGFuZCBtZXJnZSksIHRoZSBpZ25vcmUgcGF0dGVybnMKKyAgIHJlY29yZGVkIGluICRHSVRfRElSL2luZm8vZXhjbHVkZSB3ZXJlIG5vdCBob25vcmVkLiBUaGV5IG5vdyBhcmUuCisKKyAqICJnaXQgYXBwbHkgLS1jaGVjayIgZGlkIG5vdCBlcnJvciBvdXQgd2hlbiBnaXZlbiBhbiBlbXB0eSBpbnB1dAorICAgd2l0aG91dCBhbnkgcGF0Y2guCisKKyAqICJnaXQgYXJjaGl2ZSIgbWlzdGFrZW5seSBhbGxvd2VkIHJlbW90ZSBjbGllbnRzIHRvIGFzayBmb3IgY29tbWl0cworICAgdGhhdCBhcmUgbm90IGF0IHRoZSB0aXAgb2YgYW55IHJlZi4KKworICogImdpdCBjaGVja291dCIgYW5kICJnaXQgbWVyZ2UiIHRyZWF0ZWQgaW4tdHJlZSAuZ2l0aWdub3JlIGFuZCBleGNsdWRlCisgICBmaWxlIGluICRHSVRfRElSL2luZm8vIGRpcmVjdG9yeSBpbmNvbnNpc3RlbnRseSB3aGVuIGRlY2lkaW5nIHdoaWNoCisgICB1bnRyYWNrZWQgZmlsZXMgYXJlIGlnbm9yZWQgYW5kIGV4cGVuZGFibGUuCisKKyAqIExGLXRvLUNSTEYgc3RyZWFtaW5nIGZpbHRlciB1c2VkIHdoZW4gY2hlY2tpbmcgb3V0IGEgbGFyZ2UtaXNoIGJsb2IKKyAgIGZlbGwgaW50byBhbiBpbmZpbml0ZSBsb29wIHdpdGggYSByYXJlIGlucHV0LgorCisgKiBUaGUgZnVuY3Rpb24gaGVhZGVyIHBhdHRlcm4gZm9yIGZpbGVzIHdpdGggImRpZmY9Y3BwIiBhdHRyaWJ1dGUgZGlkCisgICBub3QgY29uc2lkZXIgInR5cGUgKmZ1bmNuYW1lKHR5cGUgcGFyYW0xLC4uLiIgYXMgdGhlIGJlZ2lubmluZyBvZiBhCisgICBmdW5jdGlvbi4KKworICogVGhlIGVycm9yIG1lc3NhZ2UgZnJvbSAiZ2l0IGRpZmYiIGFuZCAiZ2l0IHN0YXR1cyIgd2hlbiB0aGV5IGZhaWwKKyAgIHRvIGluc3BlY3QgY2hhbmdlcyBpbiBzdWJtb2R1bGVzIGRpZCBub3QgcmVwb3J0IHdoaWNoIHN1Ym1vZHVsZSB0aGV5CisgICBoYWQgdHJvdWJsZSB3aXRoLgorCisgKiBBZnRlciBmZXRjaGluZyBmcm9tIGEgcmVtb3RlIHRoYXQgaGFzIHZlcnkgbG9uZyByZWZuYW1lLCB0aGUgcmVwb3J0aW5nCisgICBvdXRwdXQgY291bGQgaGF2ZSBjb3JydXB0ZWQgYnkgb3ZlcnJ1bm5pbmcgYSBzdGF0aWMgYnVmZmVyLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgYXZvaWRzIGNyZWF0aW5nIGN5Y2xpYyBkZXBlbmRlbmNpZXMgYW1vbmcgZGVsdGFzCisgICB3aGVuIHNlZWluZyBhIGJyb2tlbiBwYWNrZmlsZSB0aGF0IHJlY29yZHMgdGhlIHNhbWUgb2JqZWN0IGluIGJvdGgKKyAgIHRoZSBkZWZsYXRlZCBmb3JtIGFuZCBhcyBhIGRlbHRhLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWM2NmFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4yLnR4dApAQCAtMCwwICsxLDcxIEBACitHaXQgdjEuNy44LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy44LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFBvcmNlbGFpbiBjb21tYW5kcyBsaWtlICJnaXQgcmVzZXQiIGRpZCBub3QgZGlzdGluZ3Vpc2ggZGVsZXRpb25zCisgICBhbmQgdHlwZS1jaGFuZ2VzIGZyb20gb3JkaW5hcnkgbW9kaWZpY2F0aW9uLCBhbmQgcmVwb3J0ZWQgdGhlbSB3aXRoCisgICB0aGUgc2FtZSAnTScgbW9uaWtlci4gVGhleSBub3cgdXNlICdEJyAoZm9yIGRlbGV0aW9uKSBhbmQgJ1QnIChmb3IKKyAgIHR5cGUtY2hhbmdlKSB0byBtYXRjaCAiZ2l0IHN0YXR1cyAtcyIgYW5kICJnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIi4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBwYXJzZXIgdXNlZCBmb3Igc2l6ZXMgKGUuZy4gYmlnRmlsZVRocmVzaG9sZCkKKyAgIGRpZCBub3QgY29ycmVjdGx5IGludGVycHJldCAnZycgc3VmZml4LgorCisgKiBUaGUgcmVwbGFjZW1lbnQgaW1wbGVtZW50YXRpb24gZm9yIHNucHJpbnRmIHVzZWQgb24gcGxhdGZvcm1zIHdpdGgKKyAgIG5hdGl2ZSBzbnByaW50ZiB0aGF0IGlzIGJyb2tlbiBkaWQgbm90IHVzZSB2YV9jb3B5IGNvcnJlY3RseS4KKworICogTEYtdG8tQ1JMRiBzdHJlYW1pbmcgZmlsdGVyIHJlcGxhY2VkIGFsbCBMRiB3aXRoIENSTEYsIHdoaWNoIG1pZ2h0CisgICBiZSB0ZWNobmljYWxseSBjb3JyZWN0IGJ1dCBub3QgZnJpZW5kbHkgdG8gcGVvcGxlIHdobyBhcmUgdHJ5aW5nCisgICB0byByZWNvdmVyIGZyb20gZWFybGllciBtaXN0YWtlcyBvZiB1c2luZyBDUkxGIGluIHRoZSByZXBvc2l0b3J5CisgICBkYXRhIGluIHRoZSBmaXJzdCBwbGFjZS4gSXQgbm93IHJlZnJhaW5zIGZyb20gZG9pbmcgc28gZm9yIExGIHRoYXQKKyAgIGZvbGxvd3MgYSBDUi4KKworICogZ2l0IG5hdGl2ZSBjb25uZWN0aW9uIGdvaW5nIG92ZXIgVENQIChub3Qgb3ZlciBTU0gpIGRpZCBub3Qgc2V0CisgICBTT19LRUVQQUxJVkUgb3B0aW9uIHdoaWNoIGZhaWxlZCB0byByZWNlaXZlIGxpbmsgbGF5ZXIgZXJyb3JzLgorCisgKiAiZ2l0IGJyYW5jaCAtbSA8Y3VycmVudCBicmFuY2g+IEhFQUQiIGlzIGFuIG9idmlvdXMgbm8tb3AgYnV0IHdhcyBub3QKKyAgIGFsbG93ZWQuCisKKyAqICJnaXQgY2hlY2tvdXQgLW0iIGRpZCBub3QgcmVjcmVhdGUgdGhlIGNvbmZsaWN0ZWQgc3RhdGUgaW4gYSAiYm90aAorICAgc2lkZXMgYWRkZWQsIHdpdGhvdXQgYW55IGNvbW1vbiBhbmNlc3RvciB2ZXJzaW9uIiBjb25mbGljdAorICAgc2l0dWF0aW9uLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrICRjb21taXQiIChub3QgYSByYW5nZSkgY3JlYXRlZCBhbiB1bm5lY2Vzc2FyeQorICAgc2VxdWVuY2VyIHN0YXRlIGFuZCBpbnRlcmZlcmVkIHdpdGggdmFsaWQgd29ya2Zsb3cgdG8gdXNlIHRoZQorICAgY29tbWFuZCBkdXJpbmcgYSBzZXNzaW9uIHRvIGNoZXJyeS1waWNrIG11bHRpcGxlIGNvbW1pdHMuCisKKyAqIFlvdSBjb3VsZCBtYWtlICJnaXQgY29tbWl0IiBzZWdmYXVsdCBieSBnaXZpbmcgdGhlICItLW5vLW1lc3NhZ2UiCisgICBvcHRpb24uCisKKyAqICJmYXN0LWltcG9ydCIgZGlkIG5vdCBjb3JyZWN0bHkgdXBkYXRlIGFuIGV4aXN0aW5nIG5vdGVzIHRyZWUsCisgICBwb3NzaWJseSBjb3JydXB0aW5nIHRoZSBmYW4tb3V0LgorCisgKiAiZ2l0IGZldGNoLXBhY2siIGFjY2VwdGVkIHVucXVhbGlmaWVkIHJlZnMgdGhhdCBkbyBub3QgYmVnaW4gd2l0aAorICAgcmVmcy8gYnkgbWlzdGFrZSBhbmQgY29tcGVuc2F0ZWQgaXQgYnkgbWF0Y2hpbmcgdGhlIHJlZnNwZWMgd2l0aAorICAgdGFpbC1tYXRjaCwgd2hpY2ggd2FzIGRvdWJseSB3cm9uZy4gVGhpcyBicm9rZSBmZXRjaGluZyBmcm9tIGEKKyAgIHJlcG9zaXRvcnkgd2l0aCBhIGZ1bm55IG5hbWVkIHJlZiAicmVmcy9mb28vcmVmcy9oZWFkcy9tYXN0ZXIiIGFuZCBhCisgICAnbWFzdGVyJyBicmFuY2ggd2l0aCAiZ2l0IGZldGNoLXBhY2sgcmVmcy9oZWFkcy9tYXN0ZXIiLCBhcyB0aGUKKyAgIGNvbW1hbmQgaW5jb3JyZWN0bHkgY29uc2lkZXJlZCB0aGUgZm9ybWVyIGEgIm1hdGNoIi4KKworICogImdpdCBsb2cgLS1mb2xsb3ciIGRpZCBub3QgaG9ub3IgdGhlIHJlbmFtZSB0aHJlc2hvbGQgc2NvcmUgZ2l2ZW4KKyAgIHdpdGggdGhlIC1NIG9wdGlvbiAoZS5nLiAiLU01MCUiKS4KKworICogImdpdCBtdiIgZ2F2ZSBzdWJvcHRpbWFsIGVycm9yL3dhcm5pbmcgbWVzc2FnZXMgd2hlbiBpdCBvdmVyd3JpdGVzCisgICB0YXJnZXQgZmlsZXMuIEl0IGFsc28gZGlkIG5vdCBwYXkgYXR0ZW50aW9uIHRvICItdiIgb3B0aW9uLgorCisgKiBBdXRoZW50aWNhdGVkICJnaXQgcHVzaCIgb3ZlciBkdW1iIEhUVFAgd2VyZSBicm9rZW4gd2l0aCBhIHJlY2VudAorICAgY2hhbmdlIGFuZCBmYWlsZWQgd2l0aG91dCBhc2tpbmcgZm9yIHBhc3N3b3JkIHdoZW4gdXNlcm5hbWUgaXMKKyAgIGdpdmVuLgorCisgKiAiZ2l0IHB1c2giIHRvIGFuIGVtcHR5IHJlcG9zaXRvcnkgb3ZlciBIVFRQIHdlcmUgYnJva2VuIHdpdGggYQorICAgcmVjZW50IGNoYW5nZSB0byB0aGUgcmVmIGhhbmRsaW5nLgorCisgKiAiZ2l0IHB1c2ggLXYiIGZvcmdvdCBob3cgdG8gYmUgdmVyYm9zZSBieSBtaXN0YWtlLiBJdCBub3cgcHJvcGVybHkKKyAgIGJlY29tZXMgdmVyYm9zZSB3aGVuIGFza2VkIHRvLgorCisgKiBXaGVuIGEgInJld29yZCIgYWN0aW9uIGluICJnaXQgcmViYXNlIC1pIiBmYWlsZWQgdG8gcnVuICJjb21taXQgLS1hbWVuZCIsCisgICB3ZSBkaWQgbm90IGdpdmUgdGhlIGNvbnRyb2wgYmFjayB0byB0aGUgdXNlciB0byByZXNvbHZlIHRoZSBzaXR1YXRpb24sIGFuZAorICAgaW5zdGVhZCBrZXB0IHRoZSBvcmlnaW5hbCBjb21taXQgbG9nIG1lc3NhZ2UuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MjcxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjMudHh0CkBAIC0wLDAgKzEsMTYgQEAKK0dpdCB2MS43LjguMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjguMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQXR0ZW1wdCB0byBmZXRjaCBmcm9tIGFuIGVtcHR5IGZpbGUgcHJldGVuZGluZyBpdCB0byBiZSBhIGJ1bmRsZSBkaWQKKyAgIG5vdCBlcnJvciBvdXQgY29ycmVjdGx5LgorCisgKiBnaXR3ZWIgZGlkIG5vdCBjb3JyZWN0bHkgZmFsbCBiYWNrIHRvIGNvbmZpZ3VyZWQgJGZhbGxiYWNrX2VuY29kaW5nCisgICB0aGF0IGlzIG5vdCAnbGF0aW4xJy4KKworICogImdpdCBjbG9uZSAtLWRlcHRoICRuIiBkaWQgbm90IGNhdGNoIGEgbm9uLW51bWJlciBnaXZlbiBhcyAkbiBhcyBhbgorICAgZXJyb3IuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZWJkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjQudHh0CkBAIC0wLDAgKzEsMjMgQEAKK0dpdCB2MS43LjguNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjguMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGNvZGUgdG8gbG9vayB1cCBhdHRyaWJ1dGVzIGZvciBwYXRocyByZXVzZWQgZW50cmllcyBmcm9tIGEgd3JvbmcKKyAgIGRpcmVjdG9yeSB3aGVuIHR3byBwYXRocyBpbiBxdWVzdGlvbiBhcmUgaW4gYWRqYWNlbnQgZGlyZWN0b3JpZXMgYW5kCisgICB0aGUgbmFtZSBvZiB0aGUgb25lIGRpcmVjdG9yeSBpcyBhIHByZWZpeCBvZiB0aGUgb3RoZXIuCisKKyAqIEEgd2lsZGNhcmQgdGhhdCBtYXRjaGVzIGRlZXBlciBoaWVyYXJjaHkgZ2l2ZW4gdG8gdGhlICJkaWZmLWluZGV4IiBjb21tYW5kLAorICAgZS5nLiAiZ2l0IGRpZmYtaW5kZXggSEVBRCAtLSAnKi50eHQnIiwgaW5jb3JyZWN0bHkgcmVwb3J0ZWQgYWRkaXRpb25zIG9mCisgICBtYXRjaGluZyBmaWxlcyBldmVuIHdoZW4gdGhlcmUgaXMgbm8gY2hhbmdlLgorCisgKiBXaGVuIHByb2R1Y2luZyBhICJ0aGluIHBhY2siIChwcmltYXJpbHkgdXNlZCBpbiBidW5kbGVzIGFuZCBzbWFydAorICAgSFRUUCB0cmFuc2ZlcnMpIG91dCBvZiBhIGZ1bGx5IHBhY2tlZCByZXBvc2l0b3J5LCB3ZSB1bm5lY2Vzc2FyaWx5CisgICBhdm9pZGVkIHNlbmRpbmcgcmVjZW50IG9iamVjdHMgYXMgYSBkZWx0YSBhZ2FpbnN0IG9iamVjdHMgd2Uga25vdworICAgdGhlIG90aGVyIHNpZGUgaGFzLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgcHJvcGVybHkgdHJlYXQgc2VuZGVtYWlsLm11bHRpZWRpdCBhcyBhCisgICBib29sZWFuIChlLmcuIHNldHRpbmcgaXQgdG8gImZhbHNlIiBkaWQgbm90IHR1cm4gaXQgb2ZmKS4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExZmQyYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNS50eHQKQEAgLTAsMCArMSwxOSBAQAorR2l0IHYxLjcuOC41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOC40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBEZXBlbmRlbmN5IG9uIG91ciB0aHJlYWQtdXRpbHMuaCBoZWFkZXIgZmlsZSB3YXMgbWlzc2luZyBmb3IKKyAgIG9iamVjdHMgdGhhdCBkZXBlbmQgb24gaXQgaW4gdGhlIE1ha2VmaWxlLgorCisgKiAiZ2l0IGFtIiB3aGVuIGZlZCBhbiBlbXB0eSBmaWxlIGRpZCBub3QgY29ycmVjdGx5IGZpbmlzaCByZWFkaW5nIGl0CisgICB3aGVuIGl0IGF0dGVtcHRzIHRvIGd1ZXNzIHRoZSBpbnB1dCBmb3JtYXQuCisKKyAqICJnaXQgZ3JlcCAtUCIgKHdoZW4gUENSRSBpcyBlbmFibGVkIGluIHRoZSBidWlsZCkgZGlkIG5vdCBtYXRjaCB0aGUKKyAgIGJlZ2lubmluZyBhbmQgdGhlIGVuZCBvZiB0aGUgbGluZSBjb3JyZWN0bHkgd2l0aCBeIGFuZCAkLgorCisgKiAiZ2l0IHJlYmFzZSAtbSIgdHJpZWQgdG8gcnVuICJnaXQgbm90ZXMgY29weSIgbmVlZGxlc3NseSB3aGVuCisgICBub3RoaW5nIHdhcyByZXdyaXR0ZW4uCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YmYyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjYudHh0CkBAIC0wLDAgKzEsMjIgQEAKK0dpdCB2MS43LjguNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjguNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gZXJyb3IgbWVzc2FnZSBmcm9tICdnaXQgYnVuZGxlJyBoYWQgYW4gdW5tYXRjaGVkIHNpbmdsZSBxdW90ZSBwYWlyIGluIGl0LgorCisgKiAnZ2l0IGRpZmYgLS1oaXN0b2dyYW0nIG9wdGlvbiB3YXMgbm90IGRlc2NyaWJlZC4KKworICogRG9jdW1lbnRhdGlvbiBmb3IgJ2dpdCByZXYtbGlzdCcgaGFkIG1pbm9yIGZvcm1hdHRpbmcgZXJyb3JzLgorCisgKiAnZ2l0IGltYXAtc2VuZCcgY2FycmllZCBhbiB1bnVzZWQgZGVhZCBjb2RlLgorCisgKiBUaGUgd2F5ICdnaXQgZmV0Y2gnIGltcGxlbWVudGVkIGl0cyBjb25uZWN0aXZpdHkgY2hlY2sgb3ZlcgorICAgcmVjZWl2ZWQgb2JqZWN0cyB3YXMgb3Zlcmx5IHBlc3NpbWlzdGljLCBhbmQgd2FzdGVkIGEgbG90IG9mCisgICBjeWNsZXMuCisKKyAqIFZhcmlvdXMgbWlub3IgYmFja3BvcnRzIG9mIGZpeGVzIGZyb20gdGhlICdtYXN0ZXInIGFuZCB0aGUgJ21haW50JworICAgYnJhbmNoLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OTMxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LnR4dApAQCAtMCwwICsxLDE2MSBAQAorR2l0IHYxLjcuOCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFNvbWUgZ2l0LXN2biwgZ2l0LWd1aSwgZ2l0LXA0IChpbiBjb250cmliKSBhbmQgbXN5c2dpdCB1cGRhdGVzLgorCisgKiBVcGRhdGVzIHRvIGJhc2ggY29tcGxldGlvbiBzY3JpcHRzLgorCisgKiBUaGUgYnVpbGQgcHJvY2VkdXJlIGhhcyBiZWVuIHRhdWdodCB0byB0YWtlIGFkdmFudGFnZSBvZiBjb21wdXRlZAorICAgZGVwZW5kZW5jeSBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGl0LgorCisgKiBUaGUgZGF0ZSBwYXJzZXIgbm93IGFjY2VwdHMgdGltZXpvbmUgZGVzaWduYXRvcnMgdGhhdCBsYWNrIG1pbnV0ZXMKKyAgIHBhcnQgYW5kIGFsc28gaGFzIGEgY29sb24gYmV0d2VlbiAiaGg6bW0iLgorCisgKiBUaGUgY29udGVudHMgb2YgdGhlIC9ldGMvbWFpbG5hbWUgZmlsZSwgaWYgZXhpc3RzLCBpcyB1c2VkIGFzIHRoZQorICAgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgaG9zdG5hbWUgcGFydCBvZiB0aGUgY29tbWl0dGVyL2F1dGhvciBlLW1haWwuCisKKyAqICJnaXQgYW0iIGxlYXJuZWQgaG93IHRvIHJlYWQgZnJvbSBwYXRjaGVzIGdlbmVyYXRlZCBieSBIZy4KKworICogImdpdCBhcmNoaXZlIiB0YWxraW5nIHdpdGggYSByZW1vdGUgcmVwb3NpdG9yeSBjYW4gcmVwb3J0IGVycm9ycworICAgZnJvbSB0aGUgcmVtb3RlIHNpZGUgaW4gYSBtb3JlIGluZm9ybWF0aXZlIHdheS4KKworICogImdpdCBicmFuY2giIGxlYXJuZWQgYW4gZXhwbGljaXQgLS1saXN0IG9wdGlvbiB0byBhc2sgZm9yIGJyYW5jaGVzCisgICBsaXN0ZWQsIG9wdGlvbmFsbHkgd2l0aCBhIGdsb2IgbWF0Y2hpbmcgcGF0dGVybiB0byBsaW1pdCBpdHMgb3V0cHV0LgorCisgKiAiZ2l0IGNoZWNrLWF0dHIiIGxlYXJuZWQgIi0tY2FjaGVkIiBvcHRpb24gdG8gbG9vayBhdCAuZ2l0YXR0cmlidXRlcworICAgZmlsZXMgZnJvbSB0aGUgaW5kZXgsIG5vdCBmcm9tIHRoZSB3b3JraW5nIHRyZWUuCisKKyAqIFZhcmlhbnRzIG9mICJnaXQgY2hlcnJ5LXBpY2siIGFuZCAiZ2l0IHJldmVydCIgdGhhdCB0YWtlIG11bHRpcGxlCisgICBjb21taXRzIGxlYXJuZWQgdG8gIi0tY29udGludWUiIGFuZCAiLS1hYm9ydCIuCisKKyAqICJnaXQgZGFlbW9uIiBnaXZlcyBtb3JlIGh1bWFuIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2VzIHRvIGNsaWVudHMKKyAgIHVzaW5nIEVSUiBwYWNrZXRzIHdoZW4gYXBwcm9wcmlhdGUuCisKKyAqIEVycm9ycyBhdCB0aGUgbmV0d29yayBsYXllciBpcyBsb2dnZWQgYnkgImdpdCBkYWVtb24iLgorCisgKiAiZ2l0IGRpZmYiIGxlYXJuZWQgIi0tbWluaW1hbCIgb3B0aW9uIHRvIHNwZW5kIGV4dHJhIGN5Y2xlcyB0byBjb21lCisgICB1cCB3aXRoIGEgbWluaW1hbCBwYXRjaCBvdXRwdXQuCisKKyAqICJnaXQgZGlmZiIgbGVhcm5lZCAiLS1mdW5jdGlvbi1jb250ZXh0IiBvcHRpb24gdG8gc2hvdyB0aGUgd2hvbGUKKyAgIGZ1bmN0aW9uIGFzIGNvbnRleHQgdGhhdCB3YXMgYWZmZWN0ZWQgYnkgYSBjaGFuZ2UuCisKKyAqICJnaXQgZGlmZnRvb2wiIGNhbiBiZSB0b2xkIHRvIHNraXAgbGF1bmNoaW5nIHRoZSB0b29sIGZvciBhIHBhdGggYnkKKyAgIGFuc3dlcmluZyAnbicgdG8gaXRzIHByb21wdC4KKworICogImdpdCBmZXRjaCIgbGVhcm5lZCB0byBob25vciB0cmFuc2Zlci5mc2Nrb2JqZWN0cyBjb25maWd1cmF0aW9uIHRvCisgICB2YWxpZGF0ZSB0aGUgb2JqZWN0cyB0aGF0IHdlcmUgcmVjZWl2ZWQgZnJvbSB0aGUgb3RoZXIgZW5kLCBqdXN0IGxpa2UKKyAgICJnaXQgcmVjZWl2ZS1wYWNrIiAodGhlIHJlY2VpdmluZyBlbmQgb2YgImdpdCBwdXNoIikgZG9lcy4KKworICogImdpdCBmZXRjaCIgbWFrZXMgc3VyZSB0aGF0IHRoZSBzZXQgb2Ygb2JqZWN0cyBpdCByZWNlaXZlZCBmcm9tIHRoZQorICAgb3RoZXIgZW5kIGFjdHVhbGx5IGNvbXBsZXRlcyB0aGUgaGlzdG9yeSBiZWZvcmUgdXBkYXRpbmcgdGhlIHJlZnMuCisgICAiZ2l0IHJlY2VpdmUtcGFjayIgKHRoZSByZWNlaXZpbmcgZW5kIG9mICJnaXQgcHVzaCIpIGxlYXJuZWQgdG8gZG8gdGhlCisgICBzYW1lLgorCisgKiAiZ2l0IGZldGNoIiBsZWFybmVkIHRoYXQgZmV0Y2hpbmcvY2xvbmluZyBmcm9tIGEgcmVndWxhciBmaWxlIG9uIHRoZQorICAgZmlsZXN5c3RlbSBpcyBub3QgbmVjZXNzYXJpbHkgYSByZXF1ZXN0IHRvIHVucGFjayBhIGJ1bmRsZSBmaWxlOyB0aGUKKyAgIGZpbGUgY291bGQgYmUgIi5naXQiIHdpdGggImdpdGRpcjogPHBhdGg+IiBpbiBpdC4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIGxlYXJuZWQgIiUoY29udGVudHM6c3ViamVjdCkiLCAiJShjb250ZW50czpib2R5KSIKKyAgIGFuZCAiJShjb250ZW50czpzaWduYXR1cmUpIi4gVGhlIGxhc3Qgb25lIGlzIHVzZWZ1bCBmb3Igc2lnbmVkIHRhZ3MuCisKKyAqICJnaXQgZ3JlcCIgdXNlZCB0byBpbmNvcnJlY3RseSBwYXkgYXR0ZW50aW9uIHRvIC5naXRpZ25vcmUgZmlsZXMKKyAgIHNjYXR0ZXJlZCBpbiB0aGUgZGlyZWN0b3J5IGl0IHdhcyB3b3JraW5nIGluIGV2ZW4gd2hlbiAiLS1uby1pbmRleCIKKyAgIG9wdGlvbiB3YXMgdXNlZC4gSXQgbm8gbG9uZ2VyIGRvZXMgdGhpcy4gVGhlICItLWV4Y2x1ZGUtc3RhbmRhcmQiCisgICBvcHRpb24gbmVlZHMgdG8gYmUgZ2l2ZW4gdG8gZXhwbGljaXRseSBhY3RpdmF0ZSB0aGUgaWdub3JlCisgICBtZWNoYW5pc20uCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCAiLS11bnRyYWNrZWQiIG9wdGlvbiwgd2hlcmUgZ2l2ZW4gcGF0dGVybnMgYXJlCisgICAgc2VhcmNoZWQgaW4gdW50cmFja2VkIChidXQgbm90IGlnbm9yZWQpIGZpbGVzIGFzIHdlbGwgYXMgdHJhY2tlZAorICAgIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUsIHNvIHRoYXQgbWF0Y2hlcyBpbiBuZXcgYnV0IG5vdCB5ZXQKKyAgICBhZGRlZCBmaWxlcyBkbyBub3QgZ2V0IG1pc3NlZC4KKworICogVGhlIHJlY3Vyc2l2ZSBtZXJnZSBiYWNrZW5kIG5vIGxvbmdlciBsb29rcyBmb3IgbWVhbmluZ2xlc3MKKyAgIGV4aXN0aW5nIG1lcmdlcyBpbiBzdWJtb2R1bGVzIHVubGVzcyBpbiB0aGUgb3V0ZXJtb3N0IG1lcmdlLgorCisgKiAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgbGVhcm5lZCAiLS1jaGlsZHJlbiIgb3B0aW9uLgorCisgKiAiZ2l0IGxzLXJlbW90ZSIgbGVhcm5lZCB0byByZXNwb25kIHRvICItaCIoZWxwKSByZXF1ZXN0cy4KKworICogIm1lZGlhd2lraSIgcmVtb3RlIGhlbHBlciBjYW4gaW50ZXJhY3Qgd2l0aCAoc3VycHJpc2UhKSBNZWRpYVdpa2kKKyAgIHdpdGggImdpdCBmZXRjaCIgJiAiZ2l0IHB1c2giLgorCisgKiAiZ2l0IG1lcmdlIiBsZWFybmVkIHRoZSAiLS1lZGl0IiBvcHRpb24gdG8gYWxsb3cgdXNlcnMgdG8gZWRpdCB0aGUKKyAgIG1lcmdlIGNvbW1pdCBsb2cgbWVzc2FnZS4KKworICogImdpdCByZWJhc2UgLWkiIGNhbiBiZSB0b2xkIHRvIHVzZSBzcGVjaWFsIHB1cnBvc2UgZWRpdG9yIHN1aXRhYmxlCisgICBvbmx5IGZvciBpdHMgaW5zbiBzaGVldCB2aWEgc2VxdWVuY2UuZWRpdG9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCB0byByZXNwb25kIHRvICItaCIoZWxwKSByZXF1ZXN0cy4KKworICogImdpdCBzZW5kLWVtYWlsIiBhbGxvd3MgdGhlIHZhbHVlIGdpdmVuIHRvIHNlbmRlbWFpbC5hbGlhc2ZpbGUgdG8gYmVnaW4KKyAgIHdpdGggIn4vIiB0byByZWZlciB0byB0aGUgJEhPTUUgZGlyZWN0b3J5LgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGZvcmNlcyB1c2Ugb2YgQXV0aGVuOjpTQVNMOjpQZXJsIHRvIHdvcmsgYXJvdW5kCisgICBpc3N1ZXMgYmV0d2VlbiBBdXRoZW46OlNBU0w6OkN5cnVzIGFuZCBBVVRIIFBMQUlOL0xPR0lOLgorCisgKiAiZ2l0IHN0YXNoIiBsZWFybmVkICItLWluY2x1ZGUtdW50cmFja2VkIiBvcHRpb24gdG8gc3Rhc2ggYXdheQorICAgdW50cmFja2VkL2lnbm9yZWQgY3J1ZnQgZnJvbSB0aGUgd29ya2luZyB0cmVlLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBjbG9uZSIgZG9lcyBub3QgbGVhayBhbiBlcnJvciBtZXNzYWdlIHRvIHRoZSBVSQorICAgbGV2ZWwgdW5uZWNlc3NhcmlseSBhbnltb3JlLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGxlYXJuZWQgdG8gaG9ub3IgIm5vbmUiIGFzIHRoZSB2YWx1ZSBmb3IKKyAgIHN1Ym1vZHVsZS48bmFtZT4udXBkYXRlIHRvIHNwZWNpZnkgdGhhdCB0aGUgbmFtZWQgc3VibW9kdWxlIHNob3VsZAorICAgbm90IGJlIGNoZWNrZWQgb3V0IGJ5IGRlZmF1bHQuCisKKyAqIFdoZW4gcG9wdWxhdGluZyBhIG5ldyBzdWJtb2R1bGUgZGlyZWN0b3J5IHdpdGggImdpdCBzdWJtb2R1bGUgaW5pdCIsCisgICB0aGUgJEdJVF9ESVIgbWV0YWluZm9ybWF0aW9uIGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlcyBpcyBjcmVhdGVkIGluc2lkZQorICAgJEdJVF9ESVIvbW9kdWxlcy88bmFtZT4vIGRpcmVjdG9yeSBvZiB0aGUgc3VwZXJwcm9qZWN0IGFuZCByZWZlcmVuY2VkCisgICB2aWEgdGhlIGdpdGZpbGUgbWVjaGFuaXNtLiBUaGlzIGlzIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gc3dpdGNoCisgICBiZXR3ZWVuIGNvbW1pdHMgaW4gdGhlIHN1cGVycHJvamVjdCB0aGF0IGhhcyBhbmQgZG9lcyBub3QgaGF2ZSB0aGUKKyAgIHN1Ym1vZHVsZSBpbiB0aGUgdHJlZSB3aXRob3V0IHJlLWNsb25pbmcuCisKKyAqICJnaXR3ZWIiIGxlYWtlZCB1bmVzY2FwZWQgY29udHJvbCBjaGFyYWN0ZXJzIGZyb20gc3ludGF4IGhpbGl0ZXIKKyAgIG91dHB1dHMuCisKKyAqICJnaXR3ZWIiIGNhbiBiZSB0b2xkIHRvIGdpdmUgY3VzdG9tIHN0cmluZyBhdCB0aGUgZW5kIG9mIHRoZSBIVE1MCisgICBIRUFEIGVsZW1lbnQuCisKKyAqICJnaXR3ZWIiIG5vdyBoYXMgaXRzIG93biBtYW51YWwgcGFnZXMuCisKKworQWxzbyBjb250YWlucyBvdGhlciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIG1pbm9yIGNvZGUgY2xlYW51cHMuCisKKworRml4ZXMgc2luY2UgdjEuNy43CistLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIGZpeGVzIGluIHRoZSAxLjcuNy5YIG1haW50ZW5hbmNlIHRyYWNrIGFyZQoraW5jbHVkZWQgaW4gdGhpcyByZWxlYXNlLgorCisgKiBIVFRQIHRyYW5zcG9ydCBkaWQgbm90IHVzZSBwdXNodXJsIGNvcnJlY3RseSwgYW5kIGFsc28gZGlkIG5vdCB0ZWxsCisgICB3aGF0IGhvc3QgaXQgaXMgdHJ5aW5nIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIHdoZW4gYXNraW5nIGZvcgorICAgY3JlZGVudGlhbHMuCisgICAobWVyZ2UgZGViYTQ5MyBqay9odHRwLWF1dGggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGJsYW1lIiB3YXMgYWJvcnRlZCBpZiBzdGFydGVkIGZyb20gYW4gdW5jb21taXR0ZWQgY29udGVudCBhbmQKKyAgIHRoZSBwYXRoIGhhZCB0aGUgdGV4dGNvbnYgZmlsdGVyIGluIGVmZmVjdC4KKyAgIChtZXJnZSA4NTE4MDg4IHNzL2JsYW1lLXRleHRjb252LWZha2Utd29ya2luZy10cmVlIGxhdGVyIHRvIG1haW50KS4KKworICogQWRkaW5nIG1hbnkgcmVmcyB0byB0aGUgbG9jYWwgcmVwb3NpdG9yeSBpbiBvbmUgZ28gKGUuZy4gImdpdCBmZXRjaCIKKyAgIHRoYXQgZmV0Y2hlcyBtYW55IHRhZ3MpIGFuZCBsb29raW5nIHVwIGEgcmVmIGJ5IG5hbWUgaW4gYSByZXBvc2l0b3J5CisgICB3aXRoIHRvbyBtYW55IHJlZnMgd2VyZSB1bm5lY2Vzc2FyaWx5IHNsb3cuCisgICAobWVyZ2UgMTdkNjhhNTRkIGpwL2dldC1yZWYtZGlyLXVuc29ydGVkIGxhdGVyIHRvIG1haW50KS4KKworICogUmVwb3J0IGZyb20gImdpdCBjb21taXQiIG9uIHVudHJhY2tlZCBmaWxlcyB3YXMgY29uZnVzZWQgdW5kZXIKKyAgIGNvcmUuaWdub3JlY2FzZSBvcHRpb24uCisgICAobWVyZ2UgMzk1YzczNTYgamsvbmFtZS1oYXNoLWRpcmVudCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2UiIGRpZCBub3QgdW5kZXJzdGFuZCAiOi88cGF0dGVybj4iIGFzIGEgd2F5IHRvIG5hbWUgYSBjb21taXQuCisKKyAiICJnaXQgcHVzaCIgb24gdGhlIHJlY2VpdmluZyBlbmQgdXNlZCB0byBjYWxsIHBvc3QtcmVjZWl2ZSBhbmQgcG9zdC11cGRhdGUKKyAgIGhvb2tzIGZvciBhdHRlbXB0ZWQgcmVtb3ZhbCBvZiBub24tZXhpc3RpbmcgcmVmcy4KKyAgIChtZXJnZSAxNjBiODFlZCBwaC9wdXNoLXRvLWRlbGV0ZS1ub3RoaW5nIGxhdGVyIHRvIG1haW50KS4KKworICogSGVscCB0ZXh0IGZvciAiZ2l0IHJlbW90ZSBzZXQtdXJsIiBhbmQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIgorICAgd2VyZSBtaXNzcGVsbGVkLgorICAgKG1lcmdlIGM0OTkwNGUgZmMvcmVtb3RlLXNldHVybC11c2FnZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDY1NmNkZjAgamMvcmVtb3RlLXNldGJyYW5jaGVzLXVzYWdlLWZpeCBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTU3MTgzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS4xLnR4dApAQCAtMCwwICsxLDYzIEBACitHaXQgdjEuNy45LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy45CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIG1ha2VmaWxlIGFsbG93ZWQgZW52aXJvbm1lbnQgdmFyaWFibGUgWCBzZWVwIGludG8gaXQgcmVzdWx0IGluCisgICBjb21tYW5kIG5hbWVzIHN1ZmZpeGVkIHdpdGggdW5uZWNlc3Nhcnkgc3RyaW5ncy4KKworICogVGhlIHNldCBvZiBpbmNsdWRlZCBoZWFkZXIgZmlsZXMgaW4gY29tcGF0L2luZXQte250b3AscHRvbn0KKyAgIHdyYXBwZXJzIHdhcyB1cGRhdGVkIGZvciBXaW5kb3dzIHNvbWUgdGltZSBhZ28sIGJ1dCBpbiBhIHdheSB0aGF0CisgICBicm9rZSBTb2xhcmlzIGJ1aWxkLgorCisgKiBycG1idWlsZCBub3RpY2VkIGFuIHVucGFja2FnZWQgYnV0IGluc3RhbGxlZCAqLm1vIGZpbGUgYW5kIGZhaWxlZC4KKworICogU3VicHJvY2Vzc2VzIHNwYXduZWQgZnJvbSB2YXJpb3VzIGdpdCBwcm9ncmFtcyB3ZXJlIG9mdGVuIGxlZnQgcnVubmluZworICAgdG8gY29tcGxldGlvbiBldmVuIHdoZW4gdGhlIHRvcC1sZXZlbCBwcm9jZXNzIHdhcyBraWxsZWQuCisKKyAqICJnaXQgYWRkIC1lIiBsZWFybmVkIG5vdCB0byBzaG93IGEgZGlmZiBmb3IgYW4gb3RoZXJ3aXNlIHVubW9kaWZpZWQKKyAgIHN1Ym1vZHVsZSB0aGF0IG9ubHkgaGFzIHVuY29tbWl0dGVkIGxvY2FsIGNoYW5nZXMgaW4gdGhlIHBhdGNoCisgICBwcmVwYXJlZCBieSBmb3IgdGhlIHVzZXIgdG8gZWRpdC4KKworICogVHlwbyBpbiAiZ2l0IGJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24gbXktdHBvaWMiIHdhcyBub3QgZGlhZ25vc2VkLgorCisgKiBVc2luZyAiZ2l0IGdyZXAgLWwvLUwiIHRvZ2V0aGVyIHdpdGggb3B0aW9ucyAtVyBvciAtLWJyZWFrIG1heSBub3QKKyAgIG1ha2UgbXVjaCBzZW5zZSBhcyB0aGUgb3V0cHV0IGlzIHRvIG9ubHkgY291bnQgdGhlIG51bWJlciBvZiBoaXRzCisgICBhbmQgdGhlcmUgaXMgbm8gcGxhY2UgZm9yIGZpbGUgYnJlYWtzLCBidXQgdGhlIGxhdHRlciBvcHRpb25zIG1hZGUKKyAgICItbC8tTCIgdG8gbWlzY291bnQgdGhlIGhpdHMuCisKKyAqICJnaXQgbG9nIC0tZmlyc3QtcGFyZW50ICRwYXRoc3BlYyIgZGlkIG5vdCBzdGF5IG9uIHRoZSBmaXJzdCBwYXJlbnQKKyAgIGNoYWluIGFuZCB2ZWVyZWQgaW50byBzaWRlIGJyYW5jaCBmcm9tIHdoaWNoIHRoZSB3aG9sZSBjaGFuZ2UgdG8gdGhlCisgICBzcGVjaWZpZWQgcGF0aHMgY2FtZS4KKworICogImdpdCBtZXJnZSAtLW5vLWVkaXQgJHRhZyIgZmFpbGVkIHRvIGhvbm9yIHRoZSAtLW5vLWVkaXQgb3B0aW9uLgorCisgKiAiZ2l0IG1lcmdlIC0tZmYtb25seSAkdGFnIiBmYWlsZWQgYmVjYXVzZSBpdCBjYW5ub3QgcmVjb3JkIHRoZQorICAgcmVxdWlyZWQgbWVyZ2V0YWcgd2l0aG91dCBjcmVhdGluZyBhIG1lcmdlLCBidXQgdGhpcyBpcyBzbyBjb21tb24KKyAgIG9wZXJhdGlvbiBmb3IgYnJhbmNoIHRoYXQgaXMgdXNlZCBfb25seV8gdG8gZm9sbG93IHRoZSB1cHN0cmVhbSwgc28KKyAgIGl0IHdhcyBjaGFuZ2VkIHRvIGFsbG93IGZhc3QtZm9yd2FyZGluZyB3aXRob3V0IHJlY29yZGluZyB0aGUgbWVyZ2V0YWcuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBub3cgZ2l2ZXMgYW4gZW1wdHkgZmlsZSBhcyB0aGUgY29tbW9uIGJhc2UgdmVyc2lvbgorICAgdG8gdGhlIGJhY2tlbmQgd2hlbiBkZWFsaW5nIHdpdGggdGhlICJib3RoIHNpZGVzIGFkZGVkLCBkaWZmZXJlbnRseSIKKyAgIGNhc2UuCisKKyAqICJnaXQgcHVzaCAtcSIgd2FzIG5vdCBzdWZmaWNpZW50bHkgcXVpZXQuCisKKyAqIFdoZW4gImdpdCBwdXNoIiBmYWlscyB0byB1cGRhdGUgYW55IHJlZnMsIHRoZSBjbGllbnQgc2lkZSBkaWQgbm90CisgICByZXBvcnQgYW4gZXJyb3IgY29ycmVjdGx5IHRvIHRoZSBlbmQgdXNlci4KKworICogInJlYmFzZSIgYW5kICJjb21taXQgLS1hbWVuZCIgZmFpbGVkIHRvIHdvcmsgb24gY29tbWl0cyB3aXRoIGFuY2llbnQKKyAgIHRpbWVzdGFtcHMgbmVhciB5ZWFyIDE5NzAuCisKKyAqIFdoZW4gYXNraW5nIGZvciBhIHRhZyB0byBiZSBwdWxsZWQsICJyZXF1ZXN0LXB1bGwiIGRpZCBub3Qgc2hvdyB0aGUKKyAgIG5hbWUgb2YgdGhlIHRhZyBwcmVmaXhlZCB3aXRoICJ0YWdzLyIsIHdoaWNoIHdvdWxkIGhhdmUgaGVscGVkIG9sZGVyCisgICBjbGllbnRzLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBhZGQgJHBhdGgiIGZvcmdvdCB0byByZWNvbXB1dGUgdGhlIG5hbWUgdG8gYmUgc3RvcmVkCisgICBpbiAuZ2l0bW9kdWxlcyB3aGVuIHRoZSBzdWJtb2R1bGUgYXQgJHBhdGggd2FzIG9uY2UgYWRkZWQgdG8gdGhlCisgICBzdXBlcnByb2plY3QgYW5kIGFscmVhZHkgaW5pdGlhbGl6ZWQuCisKKyAqIE1hbnkgc21hbGwgY29ybmVyIGNhc2UgYnVncyBvbiAiZ2l0IHRhZyAtbiIgd2FzIGNvcnJlY3RlZC4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwMGRhNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuMi50eHQKQEAgLTAsMCArMSw2OSBAQAorR2l0IHYxLjcuOS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOS4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCYXNoIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgZGlkIG5vdCBsaWtlIGEgcGF0dGVybiB0aGF0CisgICBiZWdpbnMgd2l0aCBhIGRhc2ggdG8gYmUgcGFzc2VkIHRvIF9fZ2l0X3BzMSBoZWxwZXIgZnVuY3Rpb24uCisKKyAqIEFkYXB0YXRpb24gb2YgdGhlIGJhc2ggY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBmb3IgenNoCisgICBpbmNvcnJlY3RseSBsaXN0ZWQgYWxsIHN1YmNvbW1hbmRzIHdoZW4gImdpdCA8VEFCPjxUQUI+IiB3YXMgZ2l2ZW4KKyAgIHRvIGFzayBmb3IgbGlzdCBvZiBwb3JjZWxhaW4gc3ViY29tbWFuZHMuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgZm9yIHByb2ZpbGUtZGlyZWN0ZWQgb3B0aW1pemVkIGJpbmFyeSB3YXMgbm90CisgICB3b3JraW5nIHZlcnkgd2VsbC4KKworICogU29tZSBzeXN0ZW1zIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIC1sY2hhcnNldCB0byBnZXQgbG9jYWxlX2NoYXJzZXQoKS4KKworICogdDU1NDEgaWdub3JlZCB1c2VyLXN1cHBsaWVkIHBvcnQgbnVtYmVyIHVzZWQgZm9yIEhUVFAgc2VydmVyIHRlc3RpbmcuCisKKyAqIFRoZSBlcnJvciBtZXNzYWdlIGVtaXR0ZWQgd2hlbiB3ZSBzZWUgYW4gZW1wdHkgbG9vc2Ugb2JqZWN0IHdhcworICAgbm90IHBocmFzZWQgY29ycmVjdGx5LgorCisgKiBUaGUgY29kZSB0byBhc2sgZm9yIHBhc3N3b3JkIGRpZCBub3QgZmFsbCBiYWNrIHRvIHRoZSB0ZXJtaW5hbAorICAgaW5wdXQgd2hlbiBHSVRfQVNLUEFTUyBpcyBzZXQgYnV0IGRvZXMgbm90IHdvcmsgKGUuZy4gbGFjayBvZiBYCisgICB3aXRoIEdVSSBhc2twYXNzIGhlbHBlcikuCisKKyAqIFdlIGZhaWxlZCB0byBnaXZlIHRoZSB0cnVlIHRlcm1pbmFsIHdpZHRoIHRvIGFueSBzdWJjb21tYW5kIHdoZW4KKyAgIHRoZXkgYXJlIGludm9rZWQgd2l0aCB0aGUgcGFnZXIsIGkuZS4gImdpdCAtcCBjbWQiLgorCisgKiBtYXBfdXNlcigpIHdhcyBub3QgcmV3cml0aW5nIGl0cyBvdXRwdXQgY29ycmVjdGx5LCB3aGljaCByZXN1bHRlZAorICAgaW4gdGhlIHVzZXIgdmlzaWJsZSBzeW1wdG9tIHRoYXQgImdpdCBibGFtZSAtZSIgc29tZXRpbWVzIHNob3dlZAorICAgZXhjZXNzICc+JyBhdCB0aGUgZW5kIG9mIGVtYWlsIGFkZHJlc3Nlcy4KKworICogImdpdCBjaGVja291dCAtYiIgZGlkIG5vdCBhbGxvdyBzd2l0Y2hpbmcgb3V0IG9mIGFuIHVuYm9ybiBicmFuY2guCisKKyAqIFdoZW4geW91IGhhdmUgYm90aCAuLi4vZm9vIGFuZCAuLi4vZm9vLmdpdCwgImdpdCBjbG9uZSAuLi4vZm9vIiBkaWQgbm90CisgICBmYXZvciB0aGUgZm9ybWVyIGJ1dCB0aGUgbGF0dGVyLgorCisgKiAiZ2l0IGNvbW1pdCIgcmVmdXNlZCB0byBjcmVhdGUgYSBjb21taXQgd2hlbiBlbnRyaWVzIGFkZGVkIHdpdGgKKyAgICJhZGQgLU4iIHJlbWFpbmVkIGluIHRoZSBpbmRleCwgd2l0aG91dCB0ZWxsaW5nIEdpdCB3aGF0IHRoZWlyIGNvbnRlbnQKKyAgIGluIHRoZSBuZXh0IGNvbW1pdCBzaG91bGQgYmUuIFdlIHNob3VsZCBoYXZlIGNyZWF0ZWQgdGhlIGNvbW1pdCB3aXRob3V0CisgICB0aGVzZSBwYXRocy4KKworICogImdpdCBkaWZmIC0tc3RhdCIgc2FpZCAiZmlsZXMiLCAiaW5zZXJ0aW9ucyIsIGFuZCAiZGVsZXRpb25zIiBldmVuCisgICB3aGVuIGl0IGlzIHNob3dpbmcgb25lICJmaWxlIiwgb25lICJpbnNlcnRpb24iIG9yIG9uZSAiZGVsZXRpb24iLgorCisgKiBUaGUgb3V0cHV0IGZyb20gImdpdCBkaWZmIC0tc3RhdCIgZm9yIHR3byBwYXRocyB0aGF0IGhhdmUgdGhlIHNhbWUKKyAgIGFtb3VudCBvZiBjaGFuZ2VzIHNob3dlZCBncmFwaCBiYXJzIG9mIGRpZmZlcmVudCBsZW5ndGggZHVlIHRvIHRoZQorICAgd2F5IHdlIGhhbmRsZWQgcm91bmRpbmcgZXJyb3JzLgorCisgKiAiZ2l0IGdyZXAiIGRpZCBub3QgcGF5IGF0dGVudGlvbiB0byAtZGlmZiAoaGVuY2UgLWJpbmFyeSkgYXR0cmlidXRlLgorCisgKiBUaGUgdHJhbnNwb3J0IHByb2dyYW1zIChmZXRjaCwgcHVzaCwgY2xvbmUpaWdub3JlZCAtLW5vLXByb2dyZXNzCisgICBhbmQgc2hvd2VkIHByb2dyZXNzIHdoZW4gc2VuZGluZyB0aGVpciBvdXRwdXQgdG8gYSB0ZXJtaW5hbC4KKworICogU29tZXRpbWVzIGVycm9yIHN0YXR1cyBkZXRlY3RlZCBieSBhIGNoZWNrIGluIGFuIGVhcmxpZXIgcGhhc2Ugb2YKKyAgICJnaXQgcmVjZWl2ZS1wYWNrIiAodGhlIG90aGVyIGVuZCBvZiAiZ2l0IHB1c2giKSB3YXMgbG9zdCBieSBsYXRlcgorICAgY2hlY2tzLCByZXN1bHRpbmcgaW4gZmFsc2UgaW5kaWNhdGlvbiBvZiBzdWNjZXNzLgorCisgKiAiZ2l0IHJldi1saXN0IC0tdmVyaWZ5IiBzb21ldGltZXMgc2tpcHBlZCB2ZXJpZmljYXRpb24gZGVwZW5kaW5nIG9uCisgICB0aGUgcGhhc2Ugb2YgdGhlIG1vb24sIHdoaWNoIGRhdGVzIGJhY2sgdG8gMS43LjgueCBzZXJpZXMuCisKKyAqIFNlYXJjaCBib3ggaW4gImdpdHdlYiIgZGlkIG5vdCBhY2NlcHQgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgY29ycmVjdGx5LgorCisgKiBTZWFyY2ggaW50ZXJmYWNlIG9mICJnaXR3ZWIiIGRpZCBub3Qgc2hvdyBtdWx0aXBsZSBtYXRjaGVzIGluIHRoZSBzYW1lIGZpbGUKKyAgIGNvcnJlY3RseS4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjNjUwMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuMy50eHQKQEAgLTAsMCArMSw1MSBAQAorR2l0IHYxLjcuOS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IHA0IiAoaW4gY29udHJpYi8pIHN1Ym1pdCB0aGUgY2hhbmdlcyB0byBhIHdyb25nIHBsYWNlIHdoZW4gdGhlCisgICAiLS11c2UtY2xpZW50LXNwZWMiIG9wdGlvbiBpcyBzZXQuCisKKyAqIFRoZSBjb25maWcubWFrLmF1dG9nZW4gZ2VuZXJhdGVkIGJ5IG9wdGlvbmFsIGF1dG9jb25mIHN1cHBvcnQgdHJpZWQKKyAgIHRvIGxpbmsgdGhlIGJpbmFyeSB3aXRoIC1saW50bCBldmVuIHdoZW4gbGliaW50bC5oIGlzIG1pc3NpbmcgZnJvbQorICAgdGhlIHN5c3RlbS4KKworICogV2hlbiB0aGUgZmlsdGVyIGRyaXZlciBleGl0cyBiZWZvcmUgcmVhZGluZyB0aGUgY29udGVudCBiZWZvcmUgdGhlCisgICBtYWluIGdpdCBwcm9jZXNzIHdyaXRlcyB0aGUgY29udGVudHMgdG8gYmUgZmlsdGVyZWQgdG8gdGhlIHBpcGUgdG8KKyAgIGl0LCB0aGUgbGF0dGVyIGNvdWxkIGJlIGtpbGxlZCB3aXRoIFNJR1BJUEUgaW5zdGVhZCBvZiBpZ25vcmluZworICAgc3VjaCBhbiBldmVudCBhcyBhbiBlcnJvci4KKworICogImdpdCBhZGQgLS1yZWZyZXNoIDxwYXRoc3BlYz4iIHVzZWQgdG8gd2FybiBhYm91dCB1bm1lcmdlZCBwYXRocworICAgb3V0c2lkZSB0aGUgZ2l2ZW4gcGF0aHNwZWMuCisKKyAqIFRoZSBidWxrIGNoZWNrLWluIGNvZGVwYXRoIGluICJnaXQgYWRkIiBzdHJlYW1lZCBjb250ZW50cyB0aGF0CisgICBuZWVkcyBzbXVkZ2UvY2xlYW4gZmlsdGVycyB3aXRob3V0IHJ1bm5pbmcgdGhlbSwgaW5zdGVhZCBvZiBwdW50aW5nCisgICBhbmQgZGVsZWdhdGluZyB0byB0aGUgY29kZXBhdGggdG8gcnVuIGZpbHRlcnMgYWZ0ZXIgc2x1cnBpbmcKKyAgIGV2ZXJ5dGhpbmcgdG8gY29yZS4KKworICogImdpdCBicmFuY2ggLS13aXRoICR0aGF0IiBhc3N1bWVkIGluY29ycmVjdGx5IHRoYXQgdGhlIHVzZXIgd2lsbCBuZXZlcgorICAgYXNrIHRoZSBxdWVzdGlvbiB3aXRoIG5vbnNlbnNlIHZhbHVlIGluICR0aGF0LgorCisgKiAiZ2l0IGJ1bmRsZSBjcmVhdGUiIHByb2R1Y2VkIGEgY29ycnVwdCBidW5kbGUgZmlsZSB1cG9uIHNlZWluZworICAgY29tbWl0cyB3aXRoIGV4Y2Vzc2l2ZWx5IGxvbmcgc3ViamVjdCBsaW5lLgorCisgKiBXaGVuIGEgcmVtb3RlIGhlbHBlciBleGl0cyBiZWZvcmUgcmVhZGluZyB0aGUgYmxhbmsgbGluZSBmcm9tIHRoZQorICAgbWFpbiBnaXQgcHJvY2VzcyB0byBzaWduYWwgdGhlIGVuZCBvZiBjb21tYW5kcywgdGhlIGxhdHRlciBjb3VsZCBiZQorICAga2lsbGVkIHdpdGggU0lHUElQRS4gSW5zdGVhZCB3ZSBzaG91bGQgaWdub3JlIHN1Y2ggZXZlbnQgYXMgYQorICAgbm9uLWVycm9yLgorCisgKiBUaGUgY29tbWl0IGxvZyB0ZW1wbGF0ZSBnaXZlbiB3aXRoICJnaXQgbWVyZ2UgLS1lZGl0IiBkaWQgbm90IGhhdmUKKyAgIGEgc2hvcnQgaW5zdHJ1Y3RpdmUgdGV4dCBsaWtlIHdoYXQgImdpdCBjb21taXQiIGdpdmVzLgorCisgKiAiZ2l0IHJldi1saXN0IC0tdmVyaWZ5LW9iamVjdHMgLXEiIG9taXR0ZWQgdGhlIGV4dHJhIHZlcmlmaWNhdGlvbgorICAgaXQgbmVlZHMgdG8gZG8gb3ZlciAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtcSIgYnkgbWlzdGFrZS4KKworICogImdpdHdlYiIgdXNlZCB0byBkcm9wIHdhcm5pbmdzIGluIHRoZSBsb2cgZmlsZSB3aGVuICJoZWFkcyIgdmlldyBpcworICAgYWNjZXNzZWQgaW4gYSByZXBvc2l0b3J5IHdob3NlIEhFQUQgZG9lcyBub3QgcG9pbnQgYXQgYSB2YWxpZAorICAgYnJhbmNoLgorCisgKiBBbiBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIGdpdmVuIGJ5IGFuIGVuZCB1c2VyIG1hZGUKKyAgICJnaXR3ZWIiIHRvIHJldHVybiBnYXJibGVkIHJlc3BvbnNlLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTIxN2ExCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS40LnR4dApAQCAtMCwwICsxLDI0IEBACitHaXQgdjEuNy45LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy45LjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBjb2RlIHRvIHN5bnRoZXNpemUgdGhlIGZha2UgYW5jZXN0b3IgdHJlZSB1c2VkIGJ5IDMtd2F5IG1lcmdlCisgICBmYWxsYmFjayBpbiAiZ2l0IGFtIiB3YXMgbm90IHByZXBhcmVkIHRvIHJlYWQgYSBwYXRjaCBjcmVhdGVkIHdpdGgKKyAgIGEgbm9uLXN0YW5kYXJkIC1wPG51bT4gdmFsdWUuCisKKyAqICJnaXQgYnVuZGxlIiBkaWQgbm90IHJlY29yZCBib3VuZGFyeSBjb21taXRzIGNvcnJlY3RseSB3aGVuIHRoZXJlCisgICBhcmUgbWFueSBvZiB0aGVtLgorCisgKiAiZ2l0IGRpZmYtaW5kZXgiIGFuZCBpdHMgZnJpZW5kcyBhdCB0aGUgcGx1bWJpbmcgbGV2ZWwgc2hvd2VkIHRoZQorICAgImRpZmYgLS1naXQiIGhlYWRlciBhbmQgbm90aGluZyBlbHNlIGZvciBhIHBhdGggd2hvc2UgY2FjaGVkIHN0YXQKKyAgIGluZm8gaXMgZGlydHkgd2l0aG91dCBhY3R1YWwgZGlmZmVyZW5jZSB3aGVuIGFza2VkIHRvIHByb2R1Y2UgYQorICAgcGF0Y2guIFRoaXMgd2FzIGEgbG9uZ3N0YW5kaW5nIGJ1ZyB0aGF0IHdlIGNvdWxkIGhhdmUgZml4ZWQgbG9uZworICAgdGltZSBhZ28uCisKKyAqICJnaXR3ZWIiIGRpZCB1c2UgcXVvdGVtZXRhKCkgdG8gcHJlcGFyZSBzZWFyY2ggc3RyaW5nIHdoZW4gYXNrZWQgdG8KKyAgIGRvIGEgZml4ZWQtc3RyaW5nIHByb2plY3Qgc2VhcmNoLCBidXQgZGlkIG5vdCB1c2UgaXQgYnkgbWlzdGFrZSBhbmQKKyAgIHVzZWQgdGhlIHVzZXItc3VwcGxpZWQgc3RyaW5nIGluc3RlYWQuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Y2MyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjUudHh0CkBAIC0wLDAgKzEsMjMgQEAKK0dpdCB2MS43LjkuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjkuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogV2hlbiAiZ2l0IGNvbmZpZyIgZGlhZ25vc2VzIGFuIGVycm9yIGluIGEgY29uZmlndXJhdGlvbiBmaWxlIGFuZAorICAgc2hvd3MgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGUgb2ZmZW5kaW5nIGxpbmUsIGl0IG1pc2NvdW50ZWQgaWYgdGhlCisgICBlcnJvciB3YXMgYXQgdGhlIGVuZCBvZiBsaW5lLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBhY2NlcHRlZCAibHMiIGNvbW1hbmQgd2l0aCBhbiBlbXB0eSBwYXRoIGJ5CisgICBtaXN0YWtlLgorCisgKiBWYXJpb3VzIG5ldy1pc2ggb3V0cHV0IGRlY29yYXRpb24gbW9kZXMgb2YgImdpdCBncmVwIiB3ZXJlIG5vdAorICAgZG9jdW1lbnRlZCBpbiB0aGUgbWFudWFsJ3Mgc3lub3BzaXMgc2VjdGlvbi4KKworICogVGhlICJyZW1haW5pbmciIHN1YmNvbW1hbmQgdG8gImdpdCByZXJlcmUiIHdhcyBub3QgZG9jdW1lbnRlZC4KKworICogImdpdHdlYiIgdXNlZCB0byBkcm9wIHdhcm5pbmdzIGluIHRoZSBsb2cgZmlsZSB3aGVuICJoZWFkcyIgdmlldyBpcworICAgYWNjZXNzZWQgaW4gYSByZXBvc2l0b3J5IHdob3NlIEhFQUQgZG9lcyBub3QgcG9pbnQgYXQgYSB2YWxpZAorICAgYnJhbmNoLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGJmODgyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS42LnR4dApAQCAtMCwwICsxLDEyIEBACitHaXQgdjEuNy45LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy45LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgbWVyZ2UgJHRhZyIgdG8gbWVyZ2UgYW4gYW5ub3RhdGVkIHRhZyBhbHdheXMgb3BlbnMgdGhlIGVkaXRvcgorICAgZHVyaW5nIGFuIGludGVyYWN0aXZlIGVkaXQgc2Vzc2lvbi4gdjEuNy4xMCBzZXJpZXMgaW50cm9kdWNlZCBhbgorICAgZW52aXJvbm1lbnQgdmFyaWFibGUgR0lUX01FUkdFX0FVVE9FRElUIHRvIGhlbHAgb2xkZXIgc2NyaXB0cyBkZWNsaW5lCisgICB0aGlzIGJlaGF2aW91ciwgYnV0IHRoZSBtYWludGVuYW5jZSB0cmFjayBzaG91bGQgYWxzbyBzdXBwb3J0IGl0LgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTY2N2QwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS43LnR4dApAQCAtMCwwICsxLDEzIEBACitHaXQgdjEuNy45LjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy45LjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFuIGVycm9yIG1lc3NhZ2UgZnJvbSAnZ2l0IGJ1bmRsZScgaGFkIGFuIHVubWF0Y2hlZCBzaW5nbGUgcXVvdGUgcGFpciBpbiBpdC4KKworICogVGhlIHdheSAnZ2l0IGZldGNoJyBpbXBsZW1lbnRlZCBpdHMgY29ubmVjdGl2aXR5IGNoZWNrIG92ZXIKKyAgIHJlY2VpdmVkIG9iamVjdHMgd2FzIG92ZXJseSBwZXNzaW1pc3RpYywgYW5kIHdhc3RlZCBhIGxvdCBvZgorICAgY3ljbGVzLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MzIwYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LnR4dApAQCAtMCwwICsxLDExMiBAQAorR2l0IHYxLjcuOSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGdpdGsgdXBkYXRlcyBhY2N1bXVsYXRlZCBzaW5jZSBlYXJseSAyMDExLgorCisgKiBnaXQtZ3VpIHVwZGF0ZWQgdG8gMC4xNi4wLgorCisgKiBnaXQtcDQgKGluIGNvbnRyaWIvKSB1cGRhdGVzLgorCisgKiBHaXQgdXNlcyBnZXR0ZXh0IHRvIHRyYW5zbGF0ZSBpdHMgbW9zdCBjb21tb24gaW50ZXJmYWNlIG1lc3NhZ2VzCisgICBpbnRvIHRoZSB1c2VyJ3MgbGFuZ3VhZ2UgaWYgdHJhbnNsYXRpb25zIGFyZSBhdmFpbGFibGUgYW5kIHRoZQorICAgbG9jYWxlIGlzIGFwcHJvcHJpYXRlbHkgc2V0LiBEaXN0cmlidXRvcnMgY2FuIGRyb3AgbmV3IFBPIGZpbGVzCisgICBpbiBwby8gdG8gYWRkIG5ldyB0cmFuc2xhdGlvbnMuCisKKyAqIFRoZSBjb2RlIHRvIGhhbmRsZSB1c2VybmFtZS9wYXNzd29yZCBmb3IgSFRUUCB0cmFuc2FjdGlvbnMgdXNlZCBpbgorICAgImdpdCBwdXNoIiAmICJnaXQgZmV0Y2giIGxlYXJuZWQgdG8gdGFsayAiY3JlZGVudGlhbCBBUEkiIHRvCisgICBleHRlcm5hbCBwcm9ncmFtcyB0byBjYWNoZSBvciBzdG9yZSB0aGVtLCB0byBhbGxvdyBpbnRlZ3JhdGlvbiB3aXRoCisgICBwbGF0Zm9ybSBuYXRpdmUga2V5Y2hhaW4gbWVjaGFuaXNtcy4KKworICogVGhlIGlucHV0IHByb21wdHMgaW4gdGhlIHRlcm1pbmFsIHVzZSBvdXIgb3duIGdldHBhc3MoKSByZXBsYWNlbWVudAorICAgd2hlbiBwb3NzaWJsZS4gSFRUUCB0cmFuc2FjdGlvbnMgdXNlZCB0byBhc2sgZm9yIHRoZSB1c2VybmFtZSB3aXRob3V0CisgICBlY2hvaW5nIGJhY2sgd2hhdCB3YXMgdHlwZWQsIGJ1dCB3aXRoIHRoaXMgY2hhbmdlIHlvdSB3aWxsIHNlZSBpdCBhcworICAgeW91IHR5cGUuCisKKyAqIFRoZSBpbnRlcm5hbHMgb2YgInJldmVydC9jaGVycnktcGljayIgaGF2ZSBiZWVuIHR3ZWFrZWQgdG8gcHJlcGFyZQorICAgYnVpbGRpbmcgbW9yZSBnZW5lcmljICJzZXF1ZW5jZXIiIG9uIHRvcCBvZiB0aGUgaW1wbGVtZW50YXRpb24gdGhhdAorICAgZHJpdmVzIHRoZW0uCisKKyAqICJnaXQgcmV2LXBhcnNlIEZFVENIX0hFQUQiIGFmdGVyICJnaXQgZmV0Y2giIHdpdGhvdXQgc3BlY2lmeWluZworICAgd2hhdCB0byBmZXRjaCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgd2lsbCBub3cgc2hvdyB0aGUgY29tbWl0IHRoYXQKKyAgIHdvdWxkIGJlIG1lcmdlZCBpZiB0aGUgY29tbWFuZCB3ZXJlICJnaXQgcHVsbCIuCisKKyAqICJnaXQgYWRkIiBsZWFybmVkIHRvIHN0cmVhbSBsYXJnZSBmaWxlcyBkaXJlY3RseSBpbnRvIGEgcGFja2ZpbGUKKyAgIGluc3RlYWQgb2Ygd3JpdGluZyB0aGVtIGludG8gaW5kaXZpZHVhbCBsb29zZSBvYmplY3QgZmlsZXMuCisKKyAqICJnaXQgY2hlY2tvdXQgLUIgPGN1cnJlbnQgYnJhbmNoPiA8ZWxzZXdoZXJlPiIgaXMgYSBtb3JlIGludHVpdGl2ZQorICAgd2F5IHRvIHNwZWxsICJnaXQgcmVzZXQgLS1rZWVwIDxlbHNld2hlcmU+Ii4KKworICogImdpdCBjaGVja291dCIgYW5kICJnaXQgbWVyZ2UiIGxlYXJuZWQgIi0tbm8tb3ZlcndyaXRlLWlnbm9yZSIgb3B0aW9uCisgICB0byB0ZWxsIEdpdCB0aGF0IHVudHJhY2tlZCBhbmQgaWdub3JlZCBmaWxlcyBhcmUgbm90IGV4cGVuZGFibGUuCisKKyAqICJnaXQgY29tbWl0IC0tYW1lbmQiIGxlYXJuZWQgIi0tbm8tZWRpdCIgb3B0aW9uIHRvIHNheSB0aGF0IHRoZQorICAgdXNlciBpcyBhbWVuZGluZyB0aGUgdHJlZSBiZWluZyByZWNvcmRlZCwgd2l0aG91dCB1cGRhdGluZyB0aGUKKyAgIGNvbW1pdCBsb2cgbWVzc2FnZS4KKworICogImdpdCBjb21taXQiIGFuZCAiZ2l0IHJlc2V0IiByZS1sZWFybmVkIHRoZSBvcHRpbWl6YXRpb24gdG8gcHJpbWUKKyAgIHRoZSBjYWNoZS10cmVlIGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCwgd2hpY2ggbWFrZXMgaXQgZmFzdGVyIHRvCisgICB3cml0ZSBhIHRyZWUgb2JqZWN0IG91dCBhZnRlciB0aGUgaW5kZXggZW50cmllcyBhcmUgdXBkYXRlZC4KKworICogImdpdCBjb21taXQiIGRldGVjdHMgYW5kIHJlamVjdHMgYW4gYXR0ZW1wdCB0byBzdHVmZiBOVUwgYnl0ZSBpbgorICAgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZS4KKworICogImdpdCBjb21taXQiIGxlYXJuZWQgIi1TIiB0byBHUEctc2lnbiB0aGUgY29tbWl0OyB0aGlzIGNhbiBiZSBzaG93bgorICAgd2l0aCB0aGUgIi0tc2hvdy1zaWduYXR1cmUiIG9wdGlvbiB0byAiZ2l0IGxvZyIuCisKKyAqIGZzY2sgYW5kIHBydW5lIGFyZSByZWxhdGl2ZWx5IGxlbmd0aHkgb3BlcmF0aW9ucyB0aGF0IHN0aWxsIGdvCisgICBzaWxlbnQgd2hpbGUgbWFraW5nIHRoZSBlbmQtdXNlciB3YWl0LiBUaGV5IGxlYXJuZWQgdG8gZ2l2ZSBwcm9ncmVzcworICAgb3V0cHV0IGxpa2Ugb3RoZXIgc2xvdyBvcGVyYXRpb25zLgorCisgKiBUaGUgc2V0IG9mIGJ1aWx0LWluIGZ1bmN0aW9uLWhlYWRlciBwYXR0ZXJucyBmb3IgdmFyaW91cyBsYW5ndWFnZXMKKyAgIGtub3dzIE1BVExBQi4KKworICogImdpdCBsb2cgLS1mb3JtYXQ9Jzxmb3JtYXQ+JyIgbGVhcm5lZCBuZXcgJWdbbk5lRV0gc3BlY2lmaWVycyB0bworICAgc2hvdyBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZWZsb2cgZW50cmllcyB3aGVuIHdhbGtpbmcgdGhlIHJlZmxvZworICAgKGkuZS4gd2l0aCAiLWciKS4KKworICogImdpdCBwdWxsIiBjYW4gYmUgdXNlZCB0byBmZXRjaCBhbmQgbWVyZ2UgYW4gYW5ub3RhdGVkL3NpZ25lZCB0YWcsCisgICBpbnN0ZWFkIG9mIHRoZSB0aXAgb2YgYSB0b3BpYyBicmFuY2guIFRoZSBHUEcgc2lnbmF0dXJlIGZyb20gdGhlCisgICBzaWduZWQgdGFnIGlzIHJlY29yZGVkIGluIHRoZSByZXN1bHRpbmcgbWVyZ2UgY29tbWl0IGZvciBsYXRlcgorICAgYXVkaXRpbmcuCisKKyAqICJnaXQgbG9nIiBsZWFybmVkICItLXNob3ctc2lnbmF0dXJlIiBvcHRpb24gdG8gc2hvdyB0aGUgc2lnbmVkIHRhZworICAgdGhhdCB3YXMgbWVyZ2VkIHRoYXQgaXMgZW1iZWRkZWQgaW4gdGhlIG1lcmdlIGNvbW1pdC4gSXQgYWxzbyBjYW4KKyAgIHNob3cgdGhlIHNpZ25hdHVyZSBtYWRlIG9uIHRoZSBjb21taXQgd2l0aCAiZ2l0IGNvbW1pdCAtUyIuCisKKyAqICJnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiIgY2FuIGJlIHVzZWQgdG8gYWRkIGRlc2NyaXB0aXZlIHRleHQKKyAgIHRvIGV4cGxhaW4gd2hhdCBhIHRvcGljIGJyYW5jaCBpcyBhYm91dC4KKworICogImdpdCBmbXQtbWVyZ2UtbXNnIiBsZWFybmVkIHRvIHRha2UgdGhlIGJyYW5jaCBkZXNjcmlwdGlvbiBpbnRvCisgICBhY2NvdW50IHdoZW4gcHJlcGFyaW5nIGEgbWVyZ2Ugc3VtbWFyeSB0aGF0ICJnaXQgbWVyZ2UiIHJlY29yZHMKKyAgIHdoZW4gbWVyZ2luZyBhIGxvY2FsIGJyYW5jaC4KKworICogImdpdCByZXF1ZXN0LXB1bGwiIGhhcyBiZWVuIHVwZGF0ZWQgdG8gY29udmV5IG1vcmUgaW5mb3JtYXRpb24KKyAgIHVzZWZ1bCBmb3IgaW50ZWdyYXRvcnMgdG8gZGVjaWRlIGlmIGEgdG9waWMgaXMgd29ydGggbWVyZ2luZyBhbmQKKyAgIHdoYXQgaXMgcHVsbGVkIGlzIGluZGVlZCB3aGF0IHRoZSByZXF1ZXN0b3IgYXNrZWQgdG8gcHVsbCwKKyAgIGluY2x1ZGluZzoKKworICAgLSB0aGUgdGlwIG9mIHRoZSBicmFuY2ggYmVpbmcgcmVxdWVzdGVkIHRvIGJlIG1lcmdlZDsKKyAgIC0gdGhlIGJyYW5jaCBkZXNjcmlwdGlvbiBkZXNjcmliaW5nIHdoYXQgdGhlIHRvcGljIGlzIGFib3V0OworICAgLSB0aGUgY29udGVudHMgb2YgdGhlIGFubm90YXRlZCB0YWcsIHdoZW4gcmVxdWVzdGluZyB0byBwdWxsIGEgdGFnLgorCisgKiAiZ2l0IHB1bGwiIGxlYXJuZWQgdG8gbm90aWNlICdwdWxsLnJlYmFzZScgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwKKyAgIHdoaWNoIHNlcnZlcyBhcyBhIGdsb2JhbCBmYWxsYmFjayBmb3Igc2V0dGluZyAnYnJhbmNoLjxuYW1lPi5yZWJhc2UnCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHBlciBicmFuY2guCisKKyAqICJnaXQgdGFnIiBsZWFybmVkICItLWNsZWFudXAiIG9wdGlvbiB0byBjb250cm9sIGhvdyB0aGUgd2hpdGVzcGFjZXMKKyAgIGFuZCBlbXB0eSBsaW5lcyBpbiB0YWcgbWVzc2FnZSBhcmUgY2xlYW5lZCB1cC4KKworICogImdpdHdlYiIgbGVhcm5lZCB0byBzaG93IHNpZGUtYnktc2lkZSBkaWZmLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuNy44CistLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS43LjggaW4gdGhlIG1haW50ZW5hbmNlCityZWxlYXNlcyBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMgdG8gdGhlbSBmb3IKK2RldGFpbHMpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzNzJmYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAuMS50eHQKQEAgLTAsMCArMSw2NCBAQAorR2l0IHYxLjguMC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHBhcnNlciBoYWQgYW4gdW5uZWNlc3NhcnkgaGFyZGNvZGVkIGxpbWl0IG9uCisgICB2YXJpYWJsZSBuYW1lcyB0aGF0IHdhcyBub3QgY2hlY2tlZCBjb25zaXN0ZW50bHkuCisKKyAqIFRoZSAic2F5IiBmdW5jdGlvbiBpbiB0aGUgdGVzdCBzY2FmZm9sZGluZyBpbmNvcnJlY3RseSBhbGxvd2VkCisgICAiZWNobyIgdG8gaW50ZXJwcmV0ICJcYSIgYXMgaWYgaXQgd2VyZSBhIEMtc3RyaW5nIGFza2luZyBmb3IgYQorICAgQkVMIG91dHB1dC4KKworICogImdpdCBtZXJnZXRvb2wiIGZlZWRzIC9kZXYvbnVsbCBhcyBhIGNvbW1vbiBhbmNlc3RvciB3aGVuIGRlYWxpbmcKKyAgIHdpdGggYW4gYWRkL2FkZCBjb25mbGljdCwgYnV0IHA0bWVyZ2UgYmFja2VuZCBjYW5ub3QgaGFuZGxlCisgICBpdC4gV29yayBpdCBhcm91bmQgYnkgcGFzc2luZyBhIHRlbXBvcmFyeSBlbXB0eSBmaWxlLgorCisgKiAiZ2l0IGxvZyAtRiAtRSAtLWdyZXA9JzxlcmU+JyIgZmFpbGVkIHRvIHVzZSB0aGUgZ2l2ZW4gPGVyZT4KKyAgIHBhdHRlcm4gYXMgZXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uLCBhbmQgaW5zdGVhZCBsb29rZWQgZm9yIHRoZQorICAgc3RyaW5nIGxpdGVyYWxseS4KKworICogImdpdCBncmVwIC1lIHBhdHRlcm4gPHRyZWU+IiBhc2tlZCB0aGUgYXR0cmlidXRlIHN5c3RlbSB0byByZWFkCisgICAiPHRyZWU+Oi5naXRhdHRyaWJ1dGVzIiBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUsIHdoaWNoIHdhcworICAgbm9uc2Vuc2UuCisKKyAqIEEgc3ltYm9saWMgcmVmIHJlZnMvaGVhZHMvU1lNIHdhcyBub3QgY29ycmVjdGx5IHJlbW92ZWQgd2l0aCAiZ2l0CisgICBicmFuY2ggLWQgU1lNIjsgdGhlIGNvbW1hbmQgcmVtb3ZlZCB0aGUgcmVmIHBvaW50ZWQgYnkgU1lNCisgICBpbnN0ZWFkLgorCisgKiBFYXJsaWVyIHdlIGZpeGVkIGRvY3VtZW50YXRpb24gdG8gaHlwaGVuYXRlICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorICAgdG8gY2xhcmlmeSB0aGF0IHRoZXNlIGFyZSBub3QgYSByZW1vdGUgZW50aXR5LCBidXQgdW5oeXBoZW5hdGVkCisgICBzcGVsbGluZyBzbnVjayBpbiB0byBhIGZldyBwbGFjZXMgc2luY2UgdGhlbi4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiBydW4gd2hpbGUgdGhlIEhFQUQgaXMgZGV0YWNoZWQgdHJpZWQgdG8gZmluZAorICAgdGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB0aGUgZGV0YWNoZWQgSEVBRCAod2hpY2ggYnkgZGVmaW5pdGlvbgorICAgZG9lcyBub3QgZXhpc3QpIGFuZCBlbWl0dGVkIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2VzLgorCisgKiBUaGUgcmVmcy9yZXBsYWNlIGhpZXJhcmNoeSB3YXMgbm90IG1lbnRpb25lZCBpbiB0aGUKKyAgIHJlcG9zaXRvcnktbGF5b3V0IGRvY3MuCisKKyAqIFNvbWV0aW1lcyBjdXJsX211bHRpX3RpbWVvdXQoKSBmdW5jdGlvbiBzdWdnZXN0ZWQgYSB3cm9uZyB0aW1lb3V0CisgICB2YWx1ZSB3aGVuIHRoZXJlIGlzIG5vIGZpbGUgZGVzY3JpcHRvcnMgdG8gd2FpdCBvbiBhbmQgdGhlIGh0dHAKKyAgIHRyYW5zcG9ydCBlbmRlZCB1cCBzbGVlcGluZyBmb3IgbWludXRlcyBpbiBzZWxlY3QoMikgc3lzdGVtIGNhbGwuCisgICBBIHdvcmthcm91bmQgaGFzIGJlZW4gYWRkZWQgZm9yIHRoaXMuCisKKyAqIFZhcmlvdXMgcmZjMjA0NyBxdW90aW5nIGlzc3VlcyBhcm91bmQgYSBub24tQVNDSUkgbmFtZSBvbiB0aGUKKyAgIEZyb206IGxpbmUgaW4gdGhlIG91dHB1dCBmcm9tIGZvcm1hdC1wYXRjaCBoYXZlIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGRpZmYgLUc8cGF0dGVybj4iIGRpZCBub3QgaG9ub3IgdGV4dGNvbnYgZmlsdGVyIHdoZW4gbG9va2luZworICAgZm9yIGNoYW5nZXMuCisKKyAqIEJhc2ggY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBkaWQgbm90IGNvcnJlY3RseSBjb21wbGV0ZSBhCisgICBsYXp5ICJnaXQgY2hlY2tvdXQgJG5hbWVfb2ZfcmVtb3RlX3RyYWNraW5nX2JyYW5jaF90aGF0X2lzX3VuaXF1ZSIKKyAgIGNvbW1hbmQgbGluZS4KKworICogUlNTIGZlZWQgZnJvbSAiZ2l0d2ViIiBoYWQgYSB4c3MgaG9sZSBpbiBpdHMgdGl0bGUgb3V0cHV0LgorCisgKiAiZ2l0IGNvbmZpZyAtLXBhdGggJGtleSIgc2VnZmF1bHRlZCBvbiAiW3NlY3Rpb25dIGtleSIgKGEgYm9vbGVhbgorICAgInRydWUiIHNwZWxsZWQgd2l0aG91dCAiPSIsIG5vdCAiW3NlY3Rpb25dIGtleSA9IHRydWUiKS4KKworICogImdpdCBjaGVja291dCAtYiBmb28iIHdoaWxlIG9uIGFuIHVuYm9ybiBicmFuY2ggZGlkIG5vdCBzYXkKKyAgICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJ2ZvbyciIGxpa2Ugb3RoZXIgY2FzZXMuCisKK0Fsc28gY29udGFpbnMgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OTdlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLjIudHh0CkBAIC0wLDAgKzEsMzQgQEAKK0dpdCB2MS44LjAuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjAuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVmFyaW91cyBjb2RlcGF0aHMgaGF2ZSB3b3JrYXJvdW5kIGZvciBhIGNvbW1vbiBtaXNjb25maWd1cmF0aW9uIHRvCisgICBzcGVsbCAiVVRGLTgiIGFzICJ1dGY4IiwgYnV0IGl0IHdhcyBub3QgdXNlZCB1bmlmb3JtbHkuICBNb3N0CisgICBub3RhYmx5LCBtYWlsaW5mbyAod2hpY2ggaXMgdXNlZCBieSAiZ2l0IGFtIikgbGFja2VkIHRoaXMgc3VwcG9ydC4KKworICogV2UgZmFpbGVkIHRvIG1lbnRpb24gYSBmaWxlIHdpdGhvdXQgYW55IGNvbnRlbnQgY2hhbmdlIGJ1dCB3aG9zZQorICAgcGVybWlzc2lvbiBiaXQgd2FzIG1vZGlmaWVkLCBvciAod29yc2UgeWV0KSBhIG5ldyBmaWxlIHdpdGhvdXQgYW55CisgICBjb250ZW50IGluIHRoZSAiZ2l0IGRpZmYgLS1zdGF0IiBvdXRwdXQuCisKKyAqIFdoZW4gIi0tc3RhdC1jb3VudCIgaGlkZXMgYSBkaWZmc3RhdCBmb3IgYmluYXJ5IGNvbnRlbnRzLCB0aGUgdG90YWwKKyAgIG51bWJlciBvZiBhZGRlZCBhbmQgcmVtb3ZlZCBsaW5lcyBhdCB0aGUgYm90dG9tIHdhcyBjb21wdXRlZAorICAgaW5jb3JyZWN0bHkuCisKKyAqIFdoZW4gIi0tc3RhdC1jb3VudCIgaGlkZXMgYSBkaWZmc3RhdCBmb3IgdW5tZXJnZWQgcGF0aHMsIHRoZSB0b3RhbAorICAgbnVtYmVyIG9mIGFmZmVjdGVkIGZpbGVzIGF0IHRoZSBib3R0b20gb2YgdGhlICJkaWZmIC0tc3RhdCIgb3V0cHV0CisgICB3YXMgY29tcHV0ZWQgaW5jb3JyZWN0bHkuCisKKyAqICJkaWZmIC0tc2hvcnRzdGF0IiBtaXNjb3VudGVkIHRoZSB0b3RhbCBudW1iZXIgb2YgYWZmZWN0ZWQgZmlsZXMKKyAgIHdoZW4gdGhlcmUgd2VyZSB1bm1lcmdlZCBwYXRocy4KKworICogImdpdCBwNCIgdXNlZCB0byB0cnkgZXhwYW5kaW5nIG1hbGZvcm1lZCAiJGtleXdvcmQkIiB0aGF0IHNwYW5zCisgICBhY3Jvc3MgbXVsdGlwbGUgbGluZXMuCisKKyAqICJnaXQgdXBkYXRlLXJlZiAtZCAtLWRlcmVmIFNZTSIgdG8gZGVsZXRlIGEgcmVmIHRocm91Z2ggYSBzeW1ib2xpYworICAgcmVmIHRoYXQgcG9pbnRzIHRvIGl0IGRpZCBub3QgcmVtb3ZlIGl0IGNvcnJlY3RseS4KKworICogU3ludGF4IGhpZ2hsaWdodGluZyBpbiAiZ2l0d2ViIiB3YXMgbm90IHF1aXRlIHdvcmtpbmcuCisKK0Fsc28gY29udGFpbnMgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjFlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLjMudHh0CkBAIC0wLDAgKzEsMTQgQEAKK0dpdCB2MS44LjAuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjAuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBsb2cgLXAgLVM8c3RyaW5nPiIgZGlkIG5vdCBhcHBseSB0aGUgdGV4dGNvbnYgZmlsdGVyIHdoaWxlCisgICBsb29raW5nIGZvciB0aGUgPHN0cmluZz4uCisKKyAqIEluIHRoZSBkb2N1bWVudGF0aW9uLCBzb21lIGludmFsaWQgZXhhbXBsZSBlLW1haWwgYWRkcmVzc2VzIHdlcmUKKyAgIGZvcm1hdHRlZCBpbnRvIG1haWx0bzogbGlua3MuCisKK0Fsc28gY29udGFpbnMgbWFueSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYmFja3BvcnRlZCBmcm9tIHRoZSAnbWFzdGVyJworYnJhbmNoIHRoYXQgaXMgcHJlcGFyaW5nIGZvciB0aGUgdXBjb21pbmcgMS44LjEgcmVsZWFzZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNkNmU0YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAudHh0CkBAIC0wLDAgKzEsMjY3IEBACitHaXQgdjEuOC4wIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UgKG5vdCAqdGhpcyogb25lKSwgd2Ugd2lsbCBjaGFuZ2UgdGhlCitiZWhhdmlvciBvZiB0aGUgImdpdCBwdXNoIiBjb21tYW5kLgorCitXaGVuICJnaXQgcHVzaCBbJHRoZXJlXSIgZG9lcyBub3Qgc2F5IHdoYXQgdG8gcHVzaCwgd2UgaGF2ZSB1c2VkIHRoZQordHJhZGl0aW9uYWwgIm1hdGNoaW5nIiBzZW1hbnRpY3Mgc28gZmFyIChhbGwgeW91ciBicmFuY2hlcyB3ZXJlIHNlbnQKK3RvIHRoZSByZW1vdGUgYXMgbG9uZyBhcyB0aGVyZSBhbHJlYWR5IGFyZSBicmFuY2hlcyBvZiB0aGUgc2FtZSBuYW1lCitvdmVyIHRoZXJlKS4gIFdlIHdpbGwgdXNlIHRoZSAic2ltcGxlIiBzZW1hbnRpY3MgdGhhdCBwdXNoZXMgdGhlCitjdXJyZW50IGJyYW5jaCB0byB0aGUgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZSwgb25seSB3aGVuIHRoZSBjdXJyZW50CiticmFuY2ggaXMgc2V0IHRvIGludGVncmF0ZSB3aXRoIHRoYXQgcmVtb3RlIGJyYW5jaC4gIFRoZXJlIGlzIGEgdXNlcgorcHJlZmVyZW5jZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICJwdXNoLmRlZmF1bHQiIHRvIGNoYW5nZSB0aGlzLCBhbmQKKyJnaXQgcHVzaCIgd2lsbCB3YXJuIGFib3V0IHRoZSB1cGNvbWluZyBjaGFuZ2UgdW50aWwgeW91IHNldCB0aGlzCit2YXJpYWJsZSBpbiB0aGlzIHJlbGVhc2UuCisKKyJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIiBpcyBkZXByZWNhdGVkIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiBhCityZWxhdGl2ZWx5IGRpc3RhbnQgZnV0dXJlLiAgImdpdCBicmFuY2ggWy11fC0tc2V0LXVwc3RyZWFtLXRvXSIgaGFzCitiZWVuIGludHJvZHVjZWQgd2l0aCBhIHNhbmVyIG9yZGVyIG9mIGFyZ3VtZW50cy4KKworCitVcGRhdGVzIHNpbmNlIHYxLjcuMTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogQSBjcmVkZW50aWFsIGhlbHBlciBmb3IgV2luMzIgdG8gYWxsb3cgYWNjZXNzIHRvIHRoZSBrZXljaGFpbiBvZgorICAgdGhlIGxvZ2dlZC1pbiB1c2VyIGhhcyBiZWVuIGFkZGVkLgorCisgKiBBbiBpbml0aWFsIHBvcnQgdG8gSFAgTm9uU3RvcC4KKworICogQSBjcmVkZW50aWFsIGhlbHBlciB0byBhbGxvdyBhY2Nlc3MgdG8gdGhlIEdub21lIGtleXJpbmcgaGFzIGJlZW4KKyAgIGFkZGVkLgorCisgKiBXaGVuICJnaXQgYW0iIHNhbml0aXplcyB0aGUgIlN1YmplY3Q6IiBsaW5lLCB3ZSBzdHJpcCB0aGUgcHJlZml4IGZyb20KKyAgICJSZTogc3ViamVjdCIgYW5kIGFsc28gZnJvbSBhIGxlc3MgY29tbW9uICJyZTogc3ViamVjdCIsIGJ1dCBsZWZ0CisgICB0aGUgZXZlbiBsZXNzIGNvbW1vbiAiUkU6IHN1YmplY3QiIGludGFjdC4gIE5vdyB3ZSBzdHJpcCB0aGF0IHRvby4KKworICogSXQgd2FzIHRlbXB0aW5nIHRvIHNheSAiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbSBvcmlnaW4vbWFzdGVyIiwKKyAgIGJ1dCB0aGF0IHRlbGxzIEdpdCB0byBhcnJhbmdlIHRoZSBsb2NhbCBicmFuY2ggIm9yaWdpbi9tYXN0ZXIiIHRvCisgICBpbnRlZ3JhdGUgd2l0aCB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaCwgd2hpY2ggaXMgaGlnaGx5CisgICB1bmxpa2VseSB3aGF0IHRoZSB1c2VyIG1lYW50LiAgVGhlIG9wdGlvbiBpcyBkZXByZWNhdGVkOyB1c2UgdGhlCisgICBuZXcgIi0tc2V0LXVwc3RyZWFtLXRvIiAod2l0aCBhIHNob3J0LWFuZC1zd2VldCAiLXUiKSBvcHRpb24KKyAgIGluc3RlYWQuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2siIGxlYXJuZWQgdGhlICItLWFsbG93LWVtcHR5LW1lc3NhZ2UiIG9wdGlvbiB0bworICAgYWxsb3cgaXQgdG8gcmVwbGF5IGEgY29tbWl0IHdpdGhvdXQgYW55IGxvZyBtZXNzYWdlLgorCisgKiBBZnRlciAiZ2l0IGNoZXJyeS1waWNrIC1zIiBnYXZlIGNvbnRyb2wgYmFjayB0byB0aGUgdXNlciBhc2tpbmcKKyAgIGhlbHAgdG8gcmVzb2x2ZSBjb25mbGljdHMsIGNvbmNsdWRpbmcgImdpdCBjb21taXQiIHVzZWQgdG8gbmVlZCB0bworICAgYmUgcnVuIHdpdGggIi1zIiBpZiB0aGUgdXNlciB3YW50cyB0byBzaWduIGl0IG9mZjsgbm93IHRoZSBjb21tYW5kCisgICBsZWF2ZXMgdGhlIHNpZ24tb2ZmIGxpbmUgaW4gdGhlIGxvZyB0ZW1wbGF0ZS4KKworICogImdpdCBkYWVtb24iIGxlYXJuZWQgdGhlICItLWFjY2Vzcy1ob29rIiBvcHRpb24gdG8gYWxsb3cgYW4KKyAgIGV4dGVybmFsIGNvbW1hbmQgdG8gZGVjbGluZSBzZXJ2aWNlIGJhc2VkIG9uIHRoZSBjbGllbnQgYWRkcmVzcywKKyAgIHJlcG9zaXRvcnkgcGF0aCwgZXRjLgorCisgKiAiZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYiIGxlYXJuZWQgdG8gdXNlIHN5bWJvbGljIGxpbmtzIHRvIHByZXBhcmUKKyAgIGEgdGVtcG9yYXJ5IGNvcHkgb2YgdGhlIHdvcmtpbmcgdHJlZSB3aGVuIGF2YWlsYWJsZS4KKworICogImdpdCBncmVwIiBsZWFybmVkIHRvIHVzZSBhIG5vbi1zdGFuZGFyZCBwYXR0ZXJuIHR5cGUgYnkgZGVmYXVsdCBpZgorICAgYSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRlbGxzIGl0IHRvLgorCisgKiBBY2N1bXVsYXRlZCB1cGRhdGVzIHRvICJnaXQgZ3VpIiBoYXMgYmVlbiBtZXJnZWQuCisKKyAqICJnaXQgbG9nIC1nIiBsZWFybmVkIHRoZSAiLS1ncmVwLXJlZmxvZz08cGF0dGVybj4iIG9wdGlvbiB0byBsaW1pdAorICAgaXRzIG91dHB1dCB0byBjb21taXRzIHdpdGggYSByZWZsb2cgbWVzc2FnZSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuCisgICBwYXR0ZXJuLgorCisgKiAiZ2l0IG1lcmdlLWJhc2UiIGxlYXJuZWQgdGhlICItLWlzLWFuY2VzdG9yIEEgQiIgb3B0aW9uIHRvIHRlbGwgaWYgQSBpcworICAgYW4gYW5jZXN0b3Igb2YgQi4gIFRoZSByZXN1bHQgaXMgaW5kaWNhdGVkIGJ5IGl0cyBleGl0IHN0YXR1cyBjb2RlLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgbm93IGFsbG93cyB1c2VycyB0byBvdmVycmlkZSB0aGUgYWN0dWFsIGNvbW1hbmQgdXNlZAorICAgd2l0aCB0aGUgbWVyZ2V0b29sLiRuYW1lLmNtZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGV2ZW4gZm9yIGJ1aWx0LWluCisgICBtZXJnZXRvb2wgYmFja2VuZHMuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkIHRoZSAiLS1lZGl0LXRvZG8iIG9wdGlvbiB0byBvcGVuIGFuIGVkaXRvcgorICAgdG8gZWRpdCB0aGUgaW5zdHJ1Y3Rpb24gc2hlZXQuCisKKworRm9yZWlnbiBJbnRlcmZhY2UKKworICogImdpdCBzdm4iIGhhcyBiZWVuIHVwZGF0ZWQgdG8gd29yayB3aXRoIFNWTiAxLjcuCisKKyAqICJnaXQgcDQiIGxlYXJuZWQgdGhlICItLWNvbmZsaWN0cyIgb3B0aW9uIHRvIHNwZWNpZnkgd2hhdCB0byBkbyB3aGVuCisgICBlbmNvdW50ZXJpbmcgYSBjb25mbGljdCBkdXJpbmcgInA0IHN1Ym1pdCIuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBldGMuCisKKyAqIEdpdCBzaGlwcyB3aXRoIGEgZmFsbC1iYWNrIHJlZ2V4cCBpbXBsZW1lbnRhdGlvbiBmb3IgcGxhdGZvcm1zIHdpdGgKKyAgIGJ1Z2d5IHJlZ2V4cCBsaWJyYXJ5LCBidXQgaXQgd2FzIGVhc3kgZm9yIHBlb3BsZSB0byBrZWVwIHVzaW5nIHRoZWlyCisgICBwbGF0Zm9ybSByZWdleHAgYnkgbWlzdGFrZS4gIEEgbmV3IHRlc3QgaGFzIGJlZW4gYWRkZWQgdG8gY2hlY2sgdGhpcy4KKworICogVGhlICJjaGVjay1kb2NzIiBidWlsZCB0YXJnZXQgaGFzIGJlZW4gdXBkYXRlZCBhbmQgZ3JlYXRseQorICAgc2ltcGxpZmllZC4KKworICogVGhlIHRlc3Qgc3VpdGUgaXMgcnVuIHVuZGVyIE1BTExPQ19DSEVDS18gd2hlbiBydW5uaW5nIHdpdGggYSBnbGliYworICAgdGhhdCBzdXBwb3J0cyB0aGUgZmVhdHVyZS4KKworICogVGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIFRlWGluZm8gZm9ybWF0IHdhcyB1c2luZyBpbmRlbnRlZCBvdXRwdXQKKyAgIGZvciBtYXRlcmlhbHMgbWVhbnQgdG8gYmUgZXhhbXBsZXMgdGhhdCBhcmUgYmV0dGVyIHR5cGVzZXQgaW4KKyAgIG1vbm9zcGFjZS4KKworICogQ29tcGF0aWJpbGl0eSB3cmFwcGVyIGFyb3VuZCBzb21lIG1rZGlyKDIpIGltcGxlbWVudGF0aW9ucyB0aGF0CisgICByZWplY3QgcGFyYW1ldGVycyB3aXRoIHRyYWlsaW5nIHNsYXNoIGhhcyBiZWVuIGludHJvZHVjZWQuCisKKyAqIENvbXBhdGliaWxpdHkgd3JhcHBlciBmb3Igc3lzdGVtcyB0aGF0IGxhY2sgdXNhYmxlIHNldGl0aW1lcigpIGhhcworICAgYmVlbiBhZGRlZC4KKworICogVGhlIG9wdGlvbiBwYXJzaW5nIG9mICJnaXQgY2hlY2tvdXQiIGhhZCBlcnJvciBjaGVja2luZywgZHdpbSBhbmQKKyAgIGRlZmF1bHRpbmcgbWlzc2luZyBvcHRpb25zLCBhbGwgbWl4ZWQgaW4gdGhlIGNvZGUsIGFuZCBpc3N1aW5nIGFuCisgICBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIHdpdGggdXNlZnVsIGNvbnRleHQgd2FzIGdldHRpbmcgaGFyZGVyLgorICAgVGhlIGNvZGUgaGFzIGJlZW4gcmVvcmdhbml6ZWQgdG8gYWxsb3cgZ2l2aW5nIGEgcHJvcGVyIGRpYWdub3NpcworICAgd2hlbiB0aGUgdXNlciBzYXlzICJnaXQgY2hlY2tvdXQgLWIgLXQgZm9vIGJhciIgKGUuZy4gIi10IiBpcyBub3QgYQorICAgZ29vZCBuYW1lIGZvciBhIGJyYW5jaCkuCisKKyAqIE1hbnkgaW50ZXJuYWwgdXNlcyBvZiBhICJnaXQgbWVyZ2UtYmFzZSIgZXF1aXZhbGVudCB3ZXJlIG9ubHkgdG8gc2VlCisgICBpZiBvbmUgY29tbWl0IGZhc3QtZm9yd2FyZHMgdG8gdGhlIG90aGVyLCB3aGljaCBkaWQgbm90IG5lZWQgdGhlCisgICBmdWxsIHNldCBvZiBtZXJnZSBiYXNlcyB0byBiZSBjb21wdXRlZC4gVGhleSBoYXZlIGJlZW4gdXBkYXRlZCB0bworICAgdXNlIGxlc3MgZXhwZW5zaXZlIGNoZWNrcy4KKworICogVGhlIGhldXJpc3RpY3MgdG8gZGV0ZWN0IGFuZCBzaWxlbnRseSBjb252ZXJ0IGxhdGluMSB0byB1dGY4IHdoZW4KKyAgIHdlIHdlcmUgdG9sZCB0byB1c2UgdXRmLTggaW4gdGhlIGxvZyBtZXNzYWdlIGhhcyBiZWVuIHRyYW5zcGxhbnRlZAorICAgZnJvbSAibWFpbGluZm8iIHRvICJjb21taXQiIGFuZCAiY29tbWl0LXRyZWUiLgorCisgKiBNZXNzYWdlcyBnaXZlbiBieSAiZ2l0IDxzdWJjb21tYW5kPiAtaCIgZnJvbSBtYW55IHN1YmNvbW1hbmRzIGhhdmUKKyAgIGJlZW4gbWFya2VkIGZvciB0cmFuc2xhdGlvbi4KKworCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuNy4xMgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjcuMTIgaW4gdGhlCittYWludGVuYW5jZSB0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMKK3RvIHRoZW0gZm9yIGRldGFpbHMpLgorCisgKiBUaGUgYXR0cmlidXRlIHN5c3RlbSBtYXkgYmUgYXNrZWQgZm9yIGEgcGF0aCB0aGF0IGl0c2VsZiBvciBpdHMKKyAgIGxlYWRpbmcgZGlyZWN0b3JpZXMgbm8gbG9uZ2VyIGV4aXN0cyBpbiB0aGUgd29ya2luZyB0cmVlLCBhbmQgaXQgaXMKKyAgIGZpbmUgaWYgd2UgY2Fubm90IG9wZW4gLmdpdGF0dHJpYnV0ZSBmaWxlIGluIHN1Y2ggYSBjYXNlLiAgRmFpbHVyZQorICAgdG8gb3BlbiBwZXItZGlyZWN0b3J5IC5naXRhdHRyaWJ1dGVzIHdpdGggZXJyb3Igc3RhdHVzIG90aGVyIHRoYW4KKyAgIEVOT0VOVCBhbmQgRU5PVERJUiBzaG91bGQgYmUgZGlhZ25vc2VkLCBidXQgaXQgd2Fzbid0LgorCisgKiBXaGVuIGxvb2tpbmcgZm9yICRIT01FLy5naXRjb25maWcgZXRjLiwgaXQgaXMgT0sgaWYgd2UgY2Fubm90IHJlYWQKKyAgIHRoZW0gYmVjYXVzZSB0aGV5IGRvIG5vdCBleGlzdCwgYnV0IHdlIGRpZCBub3QgZGlhZ25vc2UgZXhpc3RpbmcKKyAgIGZpbGVzIHRoYXQgd2UgY2Fubm90IHJlYWQuCisKKyAqIFdoZW4gImdpdCBhbSIgaXMgZmVkIGFuIGlucHV0IHRoYXQgaGFzIG11bHRpcGxlICJDb250ZW50LXR5cGU6IC4uLiIKKyAgIGhlYWRlciwgaXQgZGlkIG5vdCBncm9rIGNoYXJzZXQ9IGF0dHJpYnV0ZSBjb3JyZWN0bHkuCisKKyAqICJnaXQgYW0iIG1pc2hhbmRsZWQgYSBwYXRjaCBhdHRhY2hlZCBhcyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KKyAgIChlLmcuIG5vdCB0ZXh0LyopOyBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIChlLmcuIGJhc2U2NCkgd2FzIG5vdAorICAgaG9ub3JlZCBjb3JyZWN0bHkuCisKKyAqICJnaXQgYmxhbWUgTUFLRUZJTEUiIHJ1biBpbiBhIGhpc3RvcnkgdGhhdCBoYXMgIk1ha2VmaWxlIiBidXQgbm90CisgICAiTUFLRUZJTEUiIHNob3VsZCBzYXkgIk5vIHN1Y2ggZmlsZSBNQUtFRklMRSBpbiBIRUFEIiwgYnV0IGdvdAorICAgY29uZnVzZWQgb24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0gYW5kIGZhaWxlZCB0byBkbyBzby4KKworICogRXZlbiBkdXJpbmcgYSBjb25mbGljdGVkIG1lcmdlLCAiZ2l0IGJsYW1lICRwYXRoIiBhbHdheXMgbWVhbnQgdG8KKyAgIGJsYW1lIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gdGhlICJ3b3JraW5nIHRyZWUiIHZlcnNpb247IG1ha2UgaXQKKyAgIG1vcmUgdXNlZnVsIGJ5IHNob3dpbmcgY2xlYW5seSBtZXJnZWQgcGFydHMgYXMgY29taW5nIGZyb20gdGhlIG90aGVyCisgICBicmFuY2ggdGhhdCBpcyBiZWluZyBtZXJnZWQuCisKKyAqIEl0IHdhcyB1bmNsZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciAiZ2l0IGJsYW1lIiB0aGF0IGl0IGlzCisgICB1bm5lY2Vzc2FyeSBmb3IgdXNlcnMgdG8gdXNlIHRoZSAiLS1mb2xsb3ciIG9wdGlvbi4KKworICogT3V0cHV0IGZyb20gImdpdCBicmFuY2ggLXYiIGNvbnRhaW5zICIobm8gYnJhbmNoKSIgdGhhdCBjb3VsZCBiZQorICAgbG9jYWxpemVkLCBidXQgdGhlIGNvZGUgdG8gYWxpZ24gaXQgYWxvbmcgd2l0aCB0aGUgbmFtZXMgb2YKKyAgIGJyYW5jaGVzIHdhcyBjb3VudGluZyBpbiBieXRlcywgbm90IGluIGRpc3BsYXkgY29sdW1ucy4KKworICogImdpdCBjaGVycnktcGljayBBIEMgQiIgdXNlZCB0byByZXBsYXkgY2hhbmdlcyBpbiBBIGFuZCB0aGVuIEIgYW5kCisgICB0aGVuIEMgaWYgdGhlc2UgdGhyZWUgY29tbWl0cyBoYWQgY29tbWl0dGVyIHRpbWVzdGFtcHMgaW4gdGhhdAorICAgb3JkZXIsIHdoaWNoIGlzIG5vdCB3aGF0IHRoZSB1c2VyIHdobyBzYWlkICJBIEMgQiIgbmF0dXJhbGx5CisgICBleHBlY3RzLgorCisgKiBBIHJlcG9zaXRvcnkgY3JlYXRlZCB3aXRoICJnaXQgY2xvbmUgLS1zaW5nbGUiIGhhZCBpdHMgZmV0Y2gKKyAgIHJlZnNwZWNzIHNldCB1cCBqdXN0IGxpa2UgYSBjbG9uZSB3aXRob3V0ICItLXNpbmdsZSIsIGxlYWRpbmcgdGhlCisgICBzdWJzZXF1ZW50ICJnaXQgZmV0Y2giIHRvIHNsdXJwIGFsbCB0aGUgb3RoZXIgYnJhbmNoZXMsIGRlZmVhdGluZworICAgdGhlIHdob2xlIHBvaW50IG9mIHNwZWNpZnlpbmcgIm9ubHkgdGhpcyBicmFuY2giLgorCisgKiBEb2N1bWVudGF0aW9uIHRhbGtlZCBhYm91dCAiZmlyc3QgbGluZSBvZiBjb21taXQgbG9nIiB3aGVuIGl0IG1lYW50CisgICB0aGUgdGl0bGUgb2YgdGhlIGNvbW1pdC4gIFRoZSBkZXNjcmlwdGlvbiB3YXMgY2xhcmlmaWVkIGJ5IGRlZmluaW5nCisgICBob3cgdGhlIHRpdGxlIGlzIGRlY2lkZWQgYW5kIHJld29yZGluZyB0aGUgY2FzdWFsIG1lbnRpb24gb2YgImZpcnN0CisgICBsaW5lIiB0byAidGl0bGUiLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgZGlkIG5vdCB0aG9yb3VnaGx5IGNsZWFuc2UgdGFnIG5hbWVzIHRoYXQgaXQKKyAgIGluZmVycmVkIGZyb20gdGhlIG5hbWVzIG9mIHRoZSB0YWdzIGl0IG9idGFpbmVkIGZyb20gQ1ZTLCB3aGljaAorICAgY2F1c2VkICJnaXQgdGFnIiB0byBiYXJmIGFuZCBzdG9wIHRoZSBpbXBvcnQgaW4gdGhlIG1pZGRsZS4KKworICogRWFybGllciB3ZSBtYWRlIHRoZSBkaWZmc3RhdCBzdW1tYXJ5IGxpbmUgdGhhdCBzaG93cyB0aGUgbnVtYmVyIG9mCisgICBsaW5lcyBhZGRlZC9kZWxldGVkIGxvY2FsaXphYmxlLCBidXQgaXQgd2FzIGZvdW5kIGlycml0YXRpbmcgaGF2aW5nCisgICB0byBzZWUgdGhlbSBpbiB2YXJpb3VzIGxhbmd1YWdlcyBvbiBhIGxpc3Qgd2hvc2UgZGlzY3Vzc2lvbiBsYW5ndWFnZQorICAgaXMgRW5nbGlzaCwgYW5kIHRoaXMgY2hhbmdlIGhhcyBiZWVuIHJldmVydGVkLgorCisgKiAiZ2l0IGZldGNoIC0tYWxsIiwgd2hlbiBwYXNzZWQgIi0tbm8tdGFncyIsIGRpZCBub3QgaG9ub3IgdGhlCisgICAiLS1uby10YWdzIiBvcHRpb24gd2hpbGUgZmV0Y2hpbmcgZnJvbSBpbmRpdmlkdWFsIHJlbW90ZXMgKHRoZSBzYW1lCisgICBpc3N1ZSBleGlzdGVkIHdpdGggIi0tdGFncyIsIGJ1dCB0aGUgY29tYmluYXRpb24gIi0tYWxsIC0tdGFncyIgbWFrZXMKKyAgIG11Y2ggbGVzcyBzZW5zZSB0aGFuICItLWFsbCAtLW5vLXRhZ3MiKS4KKworICogImdpdCBmZXRjaCIgb3ZlciBodHRwIGhhZCBhbiBvbGQgd29ya2Fyb3VuZCBmb3IgYW4gdW5saWtlbHkgc2VydmVyCisgICBtaXNjb25maWd1cmF0aW9uOyBpdCB0dXJucyBvdXQgdGhhdCB0aGlzIGh1cnRzIGRlYnVnZ2FiaWxpdHkgb2YgdGhlCisgICBjb25maWd1cmF0aW9uIGluIGdlbmVyYWwsIGFuZCBoYXMgYmVlbiByZXZlcnRlZC4KKworICogImdpdCBmZXRjaCIgb3ZlciBodHRwIGFkdmVydGlzZWQgdGhhdCBpdCBzdXBwb3J0cyAiZGVmbGF0ZSIsIHdoaWNoCisgICBpcyBtdWNoIGxlc3MgY29tbW9uLCBhbmQgZGlkIG5vdCBhZHZlcnRpc2UgdGhlIG1vcmUgY29tbW9uICJnemlwIiBvbgorICAgaXRzIEFjY2VwdC1FbmNvZGluZyBoZWFkZXIuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgdGhlIGR1bWItaHR0cCByZXZpc2lvbiB3YWxrZXIgY291bGQgc2VnZmF1bHQgd2hlbgorICAgY3VybCdzIG11bHRpIGludGVyZmFjZSB3YXMgdXNlZC4KKworICogImdpdCBnYyAtLWF1dG8iIG5vdGlmaWVkIHRoZSB1c2VyIHRoYXQgYXV0by1wYWNraW5nIGhhcyB0cmlnZ2VyZWQKKyAgICBldmVuIHVuZGVyIHRoZSAiLS1xdWlldCIgb3B0aW9uLgorCisgKiBBZnRlciAiZ2l0ayIgc2hvd2VkIHRoZSBjb250ZW50cyBvZiBhIHRhZywgbmVpdGhlciAiUmVyZWFkCisgICByZWZlcmVuY2VzIiBub3IgIlJlbG9hZCIgdXBkYXRlZCB3aGF0IGlzIHNob3duIGFzIHRoZQorICAgY29udGVudHMgb2YgaXQgd2hlbiB0aGUgdXNlciBvdmVyd3JvdGUgdGhlIHRhZyB3aXRoICJnaXQgdGFnIC1mIi4KKworICogImdpdCBsb2cgLS1hbGwtbWF0Y2ggLS1ncmVwPUEgLS1ncmVwPUIiIG91Z2h0IHRvIHNob3cgY29tbWl0cyB0aGF0CisgICBtZW50aW9uIGJvdGggQSBhbmQgQiwgYnV0IHdoZW4gdGhlc2UgdGhyZWUgb3B0aW9ucyBhcmUgdXNlZCB3aXRoCisgICAtLWF1dGhvciBvciAtLWNvbW1pdHRlciwgaXQgc2hvd2VkIGNvbW1pdHMgdGhhdCBtZW50aW9uIGVpdGhlciBBIG9yCisgICBCIChvciBib3RoKSBpbnN0ZWFkLgorCisgKiBUaGUgIi1Yb3VycyIgYmFja2VuZCBvcHRpb24gdG8gImdpdCBtZXJnZSAtcyByZWN1cnNpdmUiIHdhcyBpZ25vcmVkCisgICBmb3IgYmluYXJ5IGZpbGVzLgorCisgKiAiZ2l0IHA0Iiwgd2hlbiAiLS11c2UtY2xpZW50LXNwZWMiIGFuZCAiLS1kZXRlY3QtYnJhbmNoZXMiIGFyZSB1c2VkCisgICB0b2dldGhlciwgbWlzZGV0ZWN0ZWQgYnJhbmNoZXMuCisKKyAqICJnaXQgcmVjZWl2ZS1wYWNrIiAodGhlIGNvdW50ZXJwYXJ0IHRvICJnaXQgcHVzaCIpIGRpZCBub3QgZ2l2ZQorICAgcHJvZ3Jlc3Mgb3V0cHV0IHdoaWxlIHByb2Nlc3Npbmcgb2JqZWN0cyBpdCByZWNlaXZlZCB0byB0aGUgdXNlcgorICAgd2hlbiBydW4gb3ZlciB0aGUgc21hcnQtaHR0cCBwcm90b2NvbC4KKworICogV2hlbiB5b3UgbWlzc3BlbGwgdGhlIGNvbW1hbmQgbmFtZSB5b3UgZ2l2ZSB0byB0aGUgImV4ZWMiIGFjdGlvbiBpbgorICAgdGhlICJnaXQgcmViYXNlIC1pIiBpbnN0cnVjdGlvbiBzaGVldCB5b3Ugd2VyZSB0b2xkIHRoYXQgJ3JlYmFzZScgaXMgbm90IGEKKyAgIGdpdCBzdWJjb21tYW5kIGZyb20gImdpdCByZWJhc2UgLS1jb250aW51ZSIuCisKKyAqIFRoZSBzdWJjb21tYW5kIGluICJnaXQgcmVtb3RlIiB0byByZW1vdmUgYSBkZWZpbmVkIHJlbW90ZSB3YXMKKyAgICJybSIgYW5kIHRoZSBjb21tYW5kIGRpZCBub3QgdGFrZSBhIGZ1bGx5LXNwZWxsZWQgInJlbW92ZSIuCisKKyAqIFRoZSBpbnRlcmFjdGl2ZSBwcm9tcHQgdGhhdCAiZ2l0IHNlbmQtZW1haWwiIGdpdmVzIHdhcyBlcnJvciBwcm9uZS4gSXQKKyAgIGFza2VkICJXaGF0IGUtbWFpbCBhZGRyZXNzIGRvIHlvdSB3YW50IHRvIHVzZT8iIHdpdGggdGhlIGFkZHJlc3MgaXQKKyAgIGd1ZXNzZWQgKGNvcnJlY3RseSkgdGhlIHVzZXIgd291bGQgd2FudCB0byB1c2UgaW4gaXRzIHByb21wdCwKKyAgIHRlbXB0aW5nIHRoZSB1c2VyIHRvIHNheSAieSIuIEJ1dCB0aGUgcmVzcG9uc2Ugd2FzIHRha2VuIGFzICJObywKKyAgIHBsZWFzZSB1c2UgJ3knIGFzIHRoZSBlLW1haWwgYWRkcmVzcyBpbnN0ZWFkIiwgd2hpY2ggaXMgbW9zdAorICAgY2VydGFpbmx5IG5vdCB3aGF0IHRoZSB1c2VyIG1lYW50LgorCisgKiAiZ2l0IHNob3cgLS1mb3JtYXQ9JyVjaSciIGRpZCBub3QgZ2l2ZSB0aGUgdGltZXN0YW1wIGNvcnJlY3RseSBmb3IKKyAgIGNvbW1pdHMgY3JlYXRlZCB3aXRob3V0IGh1bWFuIHJlYWRhYmxlIG5hbWUgb24gdGhlICJjb21taXR0ZXIiIGxpbmUuCisKKyAqICJnaXQgc2hvdyAtLXF1aWV0IiBvdWdodCB0byBiZSBhIHN5bm9ueW0gZm9yICJnaXQgc2hvdyAtcyIsIGJ1dAorICAgd2Fzbid0LgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBmcm90eiIgd2FzIG5vdCBkaWFnbm9zZWQgYXMgImZyb3R6IiBiZWluZyBhbiB1bmtub3duCisgICBzdWJjb21tYW5kIHRvICJnaXQgc3VibW9kdWxlIjsgdGhlIHVzZXIgaW5zdGVhZCBnb3QgYSBjb21wbGFpbnQKKyAgIHRoYXQgImdpdCBzdWJtb2R1bGUgc3RhdHVzIiB3YXMgcnVuIHdpdGggYW4gdW5rbm93biBwYXRoICJmcm90eiIuCisKKyAqICJnaXQgc3RhdHVzIiBob25vcmVkIHRoZSBpZ25vcmU9ZGlydHkgc2V0dGluZ3MgaW4gLmdpdG1vZHVsZXMgYnV0CisgICAiZ2l0IGNvbW1pdCIgZGlkbid0LgorCisgKiAiZ2l0d2ViIiBkaWQgbm90IGdpdmUgdGhlIGNvcnJlY3QgY29tbWl0dGVyIHRpbWV6b25lIGluIGl0cyBmZWVkCisgICBvdXRwdXQgZHVlIHRvIGEgdHlwby4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZGUwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjEudHh0CkBAIC0wLDAgKzEsODcgQEAKK0dpdCAxLjguMS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC4xCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGF0dHJpYnV0ZSBtZWNoYW5pc20gZGlkbid0IGFsbG93IGxpbWl0aW5nIGF0dHJpYnV0ZXMgdG8gYmUKKyAgIGFwcGxpZWQgdG8gb25seSBhIHNpbmdsZSBkaXJlY3RvcnkgaXRzZWxmIHdpdGggInBhdGgvIiBsaWtlIHRoZQorICAgZXhjbHVkZSBtZWNoYW5pc20gZG9lcy4KKworICogV2hlbiBhdHRlbXB0aW5nIHRvIHJlYWQgdGhlIFhERy1zdHlsZSAkSE9NRS8uY29uZmlnL2dpdC9jb25maWcgYW5kCisgICBmaW5kaW5nIHRoYXQgJEhPTUUvLmNvbmZpZy9naXQgaXMgYSBmaWxlLCB3ZSBnYXZlIGEgd3JvbmcgZXJyb3IKKyAgIG1lc3NhZ2UsIGluc3RlYWQgb2YgdHJlYXRpbmcgdGhlIGNhc2UgYXMgImEgY3VzdG9tIGNvbmZpZyBmaWxlIGRvZXMKKyAgIG5vdCBleGlzdCB0aGVyZSIgYW5kIG1vdmluZyBvbi4KKworICogQWZ0ZXIgZmFpbGluZyB0byBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSB1c2luZyBta3N0ZW1wKCksIGZhaWxpbmcKKyAgIHBhdGhuYW1lIHdhcyBub3QgcmVwb3J0ZWQgY29ycmVjdGx5IG9uIHNvbWUgcGxhdGZvcm1zLgorCisgKiBodHRwIHRyYW5zcG9ydCB3YXMgd3JvbmcgdG8gYXNrIGZvciB0aGUgdXNlcm5hbWUgd2hlbiB0aGUKKyAgIGF1dGhlbnRpY2F0aW9uIGlzIGRvbmUgYnkgY2VydGlmaWNhdGUgaWRlbnRpdHkuCisKKyAqIFRoZSBiZWhhdmlvdXIgdmlzaWJsZSB0byB0aGUgZW5kIHVzZXJzIHdhcyBjb25mdXNpbmcsIHdoZW4gdGhleQorICAgYXR0ZW1wdCB0byBraWxsIGEgcHJvY2VzcyBzcGF3bmVkIGluIHRoZSBlZGl0b3IgdGhhdCB3YXMgaW4gdHVybgorICAgbGF1bmNoZWQgYnkgR2l0IHdpdGggU0lHSU5UIChvciBTSUdRVUlUKSwgYXMgR2l0IHdvdWxkIGNhdGNoIHRoYXQKKyAgIHNpZ25hbCBhbmQgZGllLiAgV2UgaWdub3JlIHRoZXNlIHNpZ25hbHMgbm93LgorCisgKiBBIGNoaWxkIHByb2Nlc3MgdGhhdCB3YXMga2lsbGVkIGJ5IGEgc2lnbmFsIChlLmcuIFNJR0lOVCkgd2FzCisgICByZXBvcnRlZCBpbiBhbiBpbmNvbnNpc3RlbnQgd2F5IGRlcGVuZGluZyBvbiBob3cgdGhlIHByb2Nlc3Mgd2FzCisgICBzcGF3bmVkIGJ5IHVzLCB3aXRoIG9yIHdpdGhvdXQgYSBzaGVsbCBpbiBiZXR3ZWVuLgorCisgKiBBZnRlciAiZ2l0IGFkZCAtTiIgYW5kIHRoZW4gd3JpdGluZyBhIHRyZWUgb2JqZWN0IG91dCBvZiB0aGUKKyAgIGluZGV4LCB0aGUgY2FjaGUtdHJlZSBkYXRhIHN0cnVjdHVyZSBnb3QgY29ycnVwdGVkLgorCisgKiAiZ2l0IGFwcGx5IiBtaXNiZWhhdmVkIHdoZW4gZml4aW5nIHdoaXRlc3BhY2UgYnJlYWthZ2VzIGJ5IHJlbW92aW5nCisgICBleGNlc3MgdHJhaWxpbmcgYmxhbmsgbGluZXMgaW4gc29tZSBjb3JuZXIgY2FzZXMuCisKKyAqIEEgdGFyIGFyY2hpdmUgY3JlYXRlZCBieSAiZ2l0IGFyY2hpdmUiIHJlY29yZGVkIGEgZGlyZWN0b3J5IGluIGEKKyAgIHdheSB0aGF0IG1hZGUgTmV0QlNEJ3MgaW1wbGVtZW50YXRpb24gb2YgInRhciIgc29tZXRpbWVzIHVuaGFwcHkuCisKKyAqIFdoZW4gImdpdCBjbG9uZSAtLXNlcGFyYXRlLWdpdC1kaXI9JG92ZXJfdGhlcmUiIGlzIGludGVycnVwdGVkLCBpdAorICAgZmFpbGVkIHRvIHJlbW92ZSB0aGUgcmVhbCBsb2NhdGlvbiBvZiB0aGUgJEdJVF9ESVIgaXQgY3JlYXRlZC4KKyAgIFRoaXMgd2FzIG1vc3QgdmlzaWJsZSB3aGVuIGludGVycnVwdGluZyBhIHN1Ym1vZHVsZSB1cGRhdGUuCisKKyAqICJnaXQgZmV0Y2ggLS1taXJyb3IiIGFuZCBmZXRjaCB0aGF0IHVzZXMgb3RoZXIgZm9ybXMgb2YgcmVmc3BlYworICAgd2l0aCB3aWxkY2FyZCB1c2VkIHRvIGF0dGVtcHQgdG8gdXBkYXRlIGEgc3ltYm9saWMgcmVmIHRoYXQgbWF0Y2gKKyAgIHRoZSB3aWxkY2FyZCBvbiB0aGUgcmVjZWl2aW5nIGVuZCwgd2hpY2ggbWFkZSBsaXR0bGUgc2Vuc2UgKHRoZQorICAgcmVhbCByZWYgdGhhdCBpcyBwb2ludGVkIGF0IGJ5IHRoZSBzeW1ib2xpYyByZWYgd291bGQgYmUgdXBkYXRlZAorICAgYW55d2F5KS4gIFN5bWJvbGljIHJlZnMgbm8gbG9uZ2VyIGFyZSBhZmZlY3RlZCBieSBzdWNoIGEgZmV0Y2guCisKKyAqIFRoZSAibG9nIC0tZ3JhcGgiIGNvZGVwYXRoIGZlbGwgaW50byBpbmZpbml0ZSBsb29wIGluIHNvbWUKKyAgIGNvcm5lciBjYXNlcy4KKworICogImdpdCBtZXJnZSIgc3RhcnRlZCBjYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rIGxpa2UgImdpdAorICAgY29tbWl0IiBkb2VzIHNvbWUgdGltZSBhZ28sIGJ1dCBmb3Jnb3QgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgZXhpdAorICAgc3RhdHVzIG9mIHRoZSBob29rLgorCisgKiAiZ2l0IHBhY2stcmVmcyIgdGhhdCByYW4gaW4gcGFyYWxsZWwgdG8gYW5vdGhlciBwcm9jZXNzIHRoYXQKKyAgIGNyZWF0ZWQgbmV3IHJlZnMgaGFkIGEgcmFjZSB0aGF0IGNhbiBsb3NlIG5ldyBvbmVzLgorCisgKiBXaGVuIGEgbGluZSB0byBiZSB3cmFwcGVkIGhhcyBhIHNvbGlkIHJ1biBvZiBub24gc3BhY2UgY2hhcmFjdGVycworICAgd2hvc2UgbGVuZ3RoIGV4YWN0bHkgaXMgdGhlIHdyYXAgd2lkdGgsICJnaXQgc2hvcnRsb2cgLXciIGZhaWxlZAorICAgdG8gYWRkIGEgbmV3bGluZSBhZnRlciBzdWNoIGEgbGluZS4KKworICogVGhlIHdheSAiZ2l0IHN2biIgYXNrZWQgZm9yIHBhc3N3b3JkIHVzaW5nIFNTSF9BU0tQQVNTIGFuZAorICAgR0lUX0FTS1BBU1Mgd2FzIG5vdCBpbiBsaW5lIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KKworICogImdpdHdlYiIsIHdoZW4gc29ydGluZyBieSBhZ2UgdG8gc2hvdyByZXBvc2l0b3JpZXMgd2l0aCBuZXcKKyAgIGFjdGl2aXRpZXMgZmlyc3QsIHVzZWQgdG8gc29ydCByZXBvc2l0b3JpZXMgd2l0aCBhYnNvbHV0ZWx5CisgICBub3RoaW5nIGluIGl0IGVhcmx5LCB3aGljaCB3YXMgbm90IHZlcnkgdXNlZnVsLgorCisgKiAiZ2l0d2ViIiwgd2hlbiBzb3J0aW5nIGJ5IGFnZSB0byBzaG93IHJlcG9zaXRvcmllcyB3aXRoIG5ldworICAgYWN0aXZpdGllcyBmaXJzdCwgdXNlZCB0byBzb3J0IHJlcG9zaXRvcmllcyB3aXRoIGFic29sdXRlbHkKKyAgIG5vdGhpbmcgaW4gaXQgZWFybHksIHdoaWNoIHdhcyBub3QgdmVyeSB1c2VmdWwuCisKKyAqIFdoZW4gYXV0b2NvbmYgaXMgdXNlZCwgYW55IGJ1aWxkIG9uIGEgZGlmZmVyZW50IGNvbW1pdCBhbHdheXMgcmFuCisgICAiY29uZmlnLnN0YXR1cyAtLXJlY2hlY2siIGV2ZW4gd2hlbiB1bm5lY2Vzc2FyeS4KKworICogU29tZSBzY3JpcHRlZCBwcm9ncmFtcyB3cml0dGVuIGluIFB5dGhvbiBkaWQgbm90IGdldCB1cGRhdGVkIHdoZW4KKyAgIFBZVEhPTl9QQVRIIGNoYW5nZWQuCisKKyAqIFdlIGhhdmUgYmVlbiBjYXJyeWluZyBhIHRyYW5zbGF0ZWQgYW5kIGxvbmctdW5tYWludGFpbmVkIGNvcHkgb2YgYW4KKyAgIG9sZCB2ZXJzaW9uIG9mIHRoZSB0dXRvcmlhbDsgcmVtb3ZlZC4KKworICogUG9ydGFiaWxpdHkgaXNzdWVzIGluIG1hbnkgc2VsZi10ZXN0IHNjcmlwdHMgaGF2ZSBiZWVuIGFkZHJlc3NlZC4KKworCitBbHNvIGNvbnRhaW5zIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWI3YjE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS4yLnR4dApAQCAtMCwwICsxLDI1IEBACitHaXQgMS44LjEuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMS4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBlbGVtZW50IG9uIEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTIGxpc3QgdGhhdCBkb2VzIG5vdCBuYW1lIHRoZQorICAgcmVhbCBwYXRoIHRvIGEgZGlyZWN0b3J5IChpLmUuIGEgc3ltYm9saWMgbGluaykgY291bGQgaGF2ZSBjYXVzZWQKKyAgIHRoZSBHSVRfRElSIGRpc2NvdmVyeSBsb2dpYyB0byBlc2NhcGUgdGhlIGNlaWxpbmcuCisKKyAqIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIGZvciAidGNzaCIgZW1pdHRlZCBhbiB1bndhbnRlZCBzcGFjZQorICAgYWZ0ZXIgY29tcGxldGluZyBhIHNpbmdsZSBkaXJlY3RvcnkgbmFtZS4KKworICogQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gbGVha2VkIGFuIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2Ugd2hpbGUKKyAgIGxvb2tpbmcgZm9yIHBvc3NpYmxlIG1hdGNoZXMgd2l0aCBwYXRocyBpbiA8dHJlZS1pc2g+LgorCisgKiAiZ2l0IGFyY2hpdmUiIGRpZCBub3QgcmVjb3JkIHVuY29tcHJlc3NlZCBzaXplIGluIHRoZSBoZWFkZXIgd2hlbgorICAgc3RyZWFtaW5nIGEgemlwIGFyY2hpdmUsIHdoaWNoIGNvbmZ1c2VkIHNvbWUgaW1wbGVtZW50YXRpb25zIG9mIHVuemlwLgorCisgKiBXaGVuIHVzZXJzIHNwZWxsZWQgImNjOiIgaW4gbG93ZXJjYXNlIGluIHRoZSBmYWtlICJoZWFkZXIiIGluIHRoZQorICAgdHJhaWxlciBwYXJ0LCAiZ2l0IHNlbmQtZW1haWwiIGZhaWxlZCB0byBwaWNrIHVwIHRoZSBhZGRyZXNzZXMgZnJvbQorICAgdGhlcmUuIEFzIGUtbWFpbCBoZWFkZXJzIGZpZWxkIG5hbWVzIGFyZSBjYXNlIGluc2Vuc2l0aXZlLCB0aGlzCisgICBzY3JpcHQgc2hvdWxkIGZvbGxvdyBzdWl0IGFuZCB0cmVhdCAiY2M6IiBhbmQgIkNjOiIgdGhlIHNhbWUgd2F5LgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MWNiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjMudHh0CkBAIC0wLDAgKzEsNDcgQEAKK0dpdCAxLjguMS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC4xLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBhdHRyaWJ1dGUgbWVjaGFuaXNtIGRpZG4ndCBhbGxvdyBsaW1pdGluZyBhdHRyaWJ1dGVzIHRvIGJlCisgICBhcHBsaWVkIHRvIG9ubHkgYSBzaW5nbGUgZGlyZWN0b3J5IGl0c2VsZiB3aXRoICJwYXRoLyIgbGlrZSB0aGUKKyAgIGV4Y2x1ZGUgbWVjaGFuaXNtIGRvZXMuICBUaGUgZml4IGZvciB0aGlzIGluIDEuOC4xLjIgaGFkCisgICBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbnMuCisKKyAqIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIGNvZGUgd2FzIGluYWR2ZXJ0ZW50bHkgbWFkZSBpbmNvbXBhdGlibGUgd2l0aAorICAgb2xkZXIgdmVyc2lvbnMgb2YgYmFzaCBieSB1c2luZyBhIG5ld2VyIGFycmF5IG5vdGF0aW9uLgorCisgKiBTY3JpcHRzIHRvIHRlc3QgYmFzaCBjb21wbGV0aW9uIHdhcyBpbmhlcmVudGx5IGZsYWt5IGFzIGl0IHdhcworICAgYWZmZWN0ZWQgYnkgd2hhdGV2ZXIgcmFuZG9tIHRoaW5ncyB0aGUgdXNlciBtYXkgaGF2ZSBvbiAkUEFUSC4KKworICogQSBmaXggd2FzIGFkZGVkIHRvIHRoZSBidWlsZCBwcm9jZWR1cmUgdG8gd29yayBhcm91bmQgYnVnZ3kKKyAgIHZlcnNpb25zIG9mIGNjYWNoZSBicm9rZSB0aGUgYXV0by1nZW5lcmF0aW9uIG9mIGRlcGVuZGVuY2llcywgd2hpY2gKKyAgIHVuZm9ydHVuYXRlbHkgaXMgc3RpbGwgcmVsZXZhbnQgYmVjYXVzZSBzb21lIHBlb3BsZSB1c2UgYW5jaWVudAorICAgZGlzdHJvcy4KKworICogV2UgdXNlZCB0byBzdHVmZiAidXNlckAiIGFuZCB0aGVuIGFwcGVuZCB3aGF0IHdlIHJlYWQgZnJvbQorICAgL2V0Yy9tYWlsbmFtZSB0byBjb21lIHVwIHdpdGggYSBkZWZhdWx0IGUtbWFpbCBpZGVudCwgYnV0IGEgYnVnCisgICBsb3N0IHRoZSAidXNlckAiIHBhcnQuCisKKyAqICJnaXQgYW0iIGRpZCBub3QgcGFyc2UgZGF0ZXN0YW1wIGNvcnJlY3RseSBmcm9tIEhnIGdlbmVyYXRlZCBwYXRjaCwKKyAgIHdoZW4gaXQgaXMgcnVuIGluIGEgbG9jYWxlIG91dHNpZGUgQyAob3IgZW4pLgorCisgKiBBdHRlbXB0IHRvICJicmFuY2ggLS1lZGl0LWRlc2NyaXB0aW9uIiBhbiBleGlzdGluZyBicmFuY2gsIHdoaWxlCisgICBiZWluZyBvbiBhIGRldGFjaGVkIEhFQUQsIGVycm9yZWQgb3V0LgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBkaWQgbm90IHJlcGxheSBhIHJvb3QgY29tbWl0IHRvIGFuIHVuYm9ybiBicmFuY2guCisKKyAqIFdlIGZvcmdvdCB0byBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIHJlYWRpbmcgZnJvbSAiZ3BnIiBvdXRwdXQsCisgICBraWxsaW5nICJnaXQgbG9nIC0tc2hvdy1zaWduYXR1cmUiIG9uIGEgbG9uZyBoaXN0b3J5LgorCisgKiAiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyIgbG9zdCBlbXB0eSBtZXJnZXMgaW4gcmVjZW50IHZlcnNpb25zCisgICBvZiBHaXQuCisKKyAqIFJlYmFzaW5nIHRoZSBoaXN0b3J5IG9mIHN1cGVycHJvamVjdCB3aXRoIGNoYW5nZSBpbiB0aGUgc3VibW9kdWxlCisgICBoYXMgYmVlbiBicm9rZW4gc2luY2UgdjEuNy4xMi4KKworICogQSBmYWlsdXJlIHRvIHB1c2ggZHVlIHRvIG5vbi1mZiB3aGlsZSBvbiBhbiB1bmJvcm4gYnJhbmNoCisgICBkZXJlZmVyZW5jZWQgYSBOVUxMIHBvaW50ZXIgd2hlbiBzaG93aW5nIGFuIGVycm9yIG1lc3NhZ2UuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJhZjFkMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuNC50eHQKQEAgLTAsMCArMSwxMSBAQAorR2l0IDEuOC4xLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjEuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBpbWFwLXNlbmQiIHRhbGtpbmcgb3ZlciBpbWFwczovLyBkaWQgbWFrZSBzdXJlIGl0IHJlY2VpdmVkIGEKKyAgIHZhbGlkIGNlcnRpZmljYXRlIGZyb20gdGhlIG90aGVyIGVuZCwgYnV0IGRpZCBub3QgY2hlY2sgaWYgdGhlCisgICBjZXJ0aWZpY2F0ZSBtYXRjaGVkIHRoZSBob3N0IGl0IHRob3VnaHQgaXQgd2FzIHRhbGtpbmcgdG8uCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhNjhhZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuNS50eHQKQEAgLTAsMCArMSw0NyBAQAorR2l0IDEuOC4xLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjEuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogR2l2ZW4gYSBzdHJpbmcgd2l0aCBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyIHRoYXQgYmVnaW5zIHdpdGggJy0nIG9uCisgICB0aGUgY29tbWFuZCBsaW5lIHdoZXJlIGFuIG9wdGlvbiBpcyBleHBlY3RlZCwgdGhlIG9wdGlvbiBwYXJzZXIKKyAgIHVzZWQganVzdCBvbmUgYnl0ZSBvZiB0aGUgdW5rbm93biBsZXR0ZXIgd2hlbiByZXBvcnRpbmcgYW4gZXJyb3IuCisKKyAqIEluIHYxLjguMSwgdGhlIGF0dHJpYnV0ZSBwYXJzZXIgd2FzIHRpZ2h0ZW5lZCB0b28gcmVzdHJpY3RpdmUgdG8KKyAgIGVycm9yIG91dCB1cG9uIHNlZWluZyBhbiBlbnRyeSB0aGF0IGJlZ2lucyB3aXRoIGFuICEgKGV4Y2xhbWF0aW9uKSwKKyAgIHdoaWNoIG1heSBjb25mdXNlIHVzZXJzIHRvIGV4cGVjdCBhICJuZWdhdGl2ZSBtYXRjaCIsIHdoaWNoIGRvZXMKKyAgIG5vdCBleGlzdC4gIFRoaXMgaGFzIGJlZW4gZGVtb3RlZCB0byBhIHdhcm5pbmc7IHN1Y2ggYW4gZW50cnkgaXMKKyAgIHN0aWxsIGlnbm9yZWQuCisKKyAqICJnaXQgYXBwbHkgLS1zdW1tYXJ5IiBoYXMgYmVlbiB0YXVnaHQgdG8gbWFrZSBzdXJlIHRoZSBzaW1pbGFyaXR5CisgICB2YWx1ZSBzaG93biBpbiBpdHMgb3V0cHV0IGlzIHNlbnNpYmxlLCBldmVuIHdoZW4gdGhlIGlucHV0IGhhZCBhCisgICBib2d1cyB2YWx1ZS4KKworICogImdpdCBjbGVhbiIgc2hvd2VkIHdoYXQgaXQgd2FzIGdvaW5nIHRvIGRvLCBidXQgc29tZXRpbWVzIGVuZGVkCisgICB1cCBmaW5kaW5nIHRoYXQgaXQgd2FzIG5vdCBhbGxvd2VkIHRvIGRvIHNvLCB3aGljaCByZXN1bHRlZCBpbiBhCisgICBjb25mdXNpbmcgb3V0cHV0IChlLmcuIGFmdGVyIHNheWluZyB0aGF0IGl0IHdpbGwgcmVtb3ZlIGFuCisgICB1bnRyYWNrZWQgZGlyZWN0b3J5LCBpdCBmb3VuZCBhbiBlbWJlZGRlZCBnaXQgcmVwb3NpdG9yeSB0aGVyZQorICAgd2hpY2ggaXQgaXMgbm90IGFsbG93ZWQgdG8gcmVtb3ZlKS4gIEl0IG5vdyBwZXJmb3JtcyB0aGUgYWN0aW9ucworICAgYW5kIHRoZW4gcmVwb3J0cyB0aGUgb3V0Y29tZSBtb3JlIGZhaXRoZnVsbHkuCisKKyAqICJnaXQgY2xvbmUiIHVzZWQgdG8gYWxsb3cgLS1iYXJlIGFuZCAtLXNlcGFyYXRlLWdpdC1kaXI9JHRoZXJlCisgICBvcHRpb25zIGF0IHRoZSBzYW1lIHRpbWUsIHdoaWNoIHdhcyBub25zZW5zaWNhbC4KKworICogImdpdCBjdnNpbXBvcnQiIG1pc2hhbmRsZWQgdGltZXN0YW1wcyBhdCBEU1QgYm91bmRhcnkuCisKKyAqIFdlIHVzZWQgdG8gaGF2ZSBhbiBhcmJpdHJhcnkgMzIgbGltaXQgZm9yIGNvbWJpbmVkIGRpZmYgaW5wdXQsCisgICByZXN1bHRpbmcgaW4gaW5jb3JyZWN0IG51bWJlciBvZiBsZWFkaW5nIGNvbG9ucyBzaG93biB3aGVuIHNob3dpbmcKKyAgIHRoZSAiLS1yYXcgLS1jYyIgb3V0cHV0LgorCisgKiBUaGUgc21hcnQgSFRUUCBjbGllbnRzIGZvcmdvdCB0byB2ZXJpZnkgdGhlIGNvbnRlbnQtdHlwZSB0aGF0IGNvbWVzCisgICBiYWNrIGZyb20gdGhlIHNlcnZlciBzaWRlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1ZXN0IGlzIGJlaW5nCisgICBoYW5kbGVkIHByb3Blcmx5LgorCisgKiAiZ2l0IGhlbHAgcmVtb3RlLWhlbHBlcnMiIGZhaWxlZCB0byBmaW5kIHRoZSBkb2N1bWVudGF0aW9uLgorCisgKiAiZ2l0d2ViIiBwYWdlcyBzZXJ2ZWQgb3ZlciBIVFRQUywgd2hlbiBjb25maWd1cmVkIHRvIHNob3cgcGljb24gb3IKKyAgIGdyYXZhdGFyLCByZWZlcnJlZCB0byB0aGVzZSBleHRlcm5hbCByZXNvdXJjZXMgdG8gYmUgZmV0Y2hlZCB2aWEKKyAgIEhUVFAsIHJlc3VsdGluZyBpbiBtaXhlZCBjb250ZW50cyB3YXJuaW5nIGluIGJyb3dzZXJzLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNWNmMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjYudHh0CkBAIC0wLDAgKzEsMzkgQEAKK0dpdCAxLjguMS42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC4xLjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFuIGVhcmxpZXIgY2hhbmdlIHRvIHRoZSBhdHRyaWJ1dGUgc3lzdGVtIGludHJvZHVjZWQgYXQgdjEuOC4xLjIgYnkKKyAgIG1pc3Rha2Ugc3RvcHBlZCBhIHBhdHRlcm4gImRpciIgKHdpdGhvdXQgdHJhaWxpbmcgc2xhc2gpIGZyb20KKyAgIG1hdGNoaW5nIGEgZGlyZWN0b3J5ICJkaXIiIChpdCBvbmx5IHdhbnRlZCB0byBhbGxvdyBwYXR0ZXJuICJkaXIvIgorICAgdG8gYWxzbyBtYXRjaCkuCisKKyAqIFRoZSBjb2RlIHRvIGtlZXAgdHJhY2sgb2Ygd2hhdCBkaXJlY3RvcnkgbmFtZXMgYXJlIGtub3duIHRvIEdpdCBvbgorICAgcGxhdGZvcm1zIHdpdGggY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcyBjYW4gZ2V0IGNvbmZ1c2VkIHVwb24gYQorICAgaGFzaCBjb2xsaXNpb24gYmV0d2VlbiB0aGVzZSBwYXRobmFtZXMgYW5kIGxvb3BlZCBmb3JldmVyLgorCisgKiBXaGVuIHRoZSAiLS1wcmVmaXgiIG9wdGlvbiBpcyB1c2VkIHRvICJjaGVja291dC1pbmRleCIsIHRoZSBjb2RlCisgICBkaWQgbm90IHBpY2sgdGhlIGNvcnJlY3Qgb3V0cHV0IGZpbHRlciBiYXNlZCBvbiB0aGUgYXR0cmlidXRlCisgICBzZXR0aW5nLgorCisgKiBBbm5vdGF0ZWQgdGFncyBvdXRzaWRlIHJlZnMvdGFncy8gaGllcmFyY2h5IHdlcmUgbm90IGFkdmVydGlzZWQKKyAgIGNvcnJlY3RseSB0byB0aGUgbHMtcmVtb3RlIGFuZCBmZXRjaCB3aXRoIHJlY2VudCB2ZXJzaW9uIG9mIEdpdC4KKworICogVGhlIGxvZ2ljIHVzZWQgYnkgImdpdCBkaWZmIC1NIC0tc3RhdCIgdG8gc2hvcnRlbiB0aGUgbmFtZXMgb2YKKyAgIGZpbGVzIGJlZm9yZSBhbmQgYWZ0ZXIgYSByZW5hbWUgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIHRoZQorICAgY29tbW9uIHByZWZpeCBhbmQgc3VmZml4IGJldHdlZW4gdGhlIHR3byBmaWxlbmFtZXMgb3ZlcmxhcHBlZC4KKworICogImdpdCB1cGRhdGUtaW5kZXggLWgiIGRpZCBub3QgZG8gdGhlIHVzdWFsICItaChlbHApIiB0aGluZy4KKworICogcGVybC9HaXQucG06OmNhdF9ibG9iIHNsdXJwZWQgZXZlcnl0aGluZyBpbiBjb3JlIG9ubHkgdG8gd3JpdGUgaXQKKyAgIG91dCB0byBhIGZpbGUgZGVzY3JpcHRvciwgd2hpY2ggd2FzIG5vdCBhIHZlcnkgc21hcnQgdGhpbmcgdG8gZG8uCisKKyAqIFRoZSBTU0wgcGVlciB2ZXJpZmljYXRpb24gZG9uZSBieSAiZ2l0IGltYXAtc2VuZCIgZGlkIG5vdCBhc2sgZm9yCisgICBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChSRkMgNDM2NiksIGZhaWxpbmcgdG8gY29ubmVjdCBTU0wvVExTCisgICBzaXRlcyB0aGF0IHNlcnZlIG11bHRpcGxlIGhvc3RuYW1lcyBvbiBhIHNpbmdsZSBJUC4KKworICogImdpdCBidW5kbGUgdmVyaWZ5IiBkaWQgbm90IHNheSAicmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkiIGZvciBhCisgICBidW5kbGUgdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBwcmVyZXF1aXNpdGVzLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmOTU1NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEudHh0CkBAIC0wLDAgKzEsMjQxIEBACitHaXQgdjEuOC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UgKG5vdCAqdGhpcyogb25lKSwgd2Ugd2lsbCBjaGFuZ2UgdGhlCitiZWhhdmlvciBvZiB0aGUgImdpdCBwdXNoIiBjb21tYW5kLgorCitXaGVuICJnaXQgcHVzaCBbJHRoZXJlXSIgZG9lcyBub3Qgc2F5IHdoYXQgdG8gcHVzaCwgd2UgaGF2ZSB1c2VkIHRoZQordHJhZGl0aW9uYWwgIm1hdGNoaW5nIiBzZW1hbnRpY3Mgc28gZmFyIChhbGwgeW91ciBicmFuY2hlcyB3ZXJlIHNlbnQKK3RvIHRoZSByZW1vdGUgYXMgbG9uZyBhcyB0aGVyZSBhbHJlYWR5IGFyZSBicmFuY2hlcyBvZiB0aGUgc2FtZSBuYW1lCitvdmVyIHRoZXJlKS4gIFdlIHdpbGwgdXNlIHRoZSAic2ltcGxlIiBzZW1hbnRpY3MgdGhhdCBwdXNoZXMgdGhlCitjdXJyZW50IGJyYW5jaCB0byB0aGUgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZSwgb25seSB3aGVuIHRoZSBjdXJyZW50CiticmFuY2ggaXMgc2V0IHRvIGludGVncmF0ZSB3aXRoIHRoYXQgcmVtb3RlIGJyYW5jaC4gIFRoZXJlIGlzIGEgdXNlcgorcHJlZmVyZW5jZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICJwdXNoLmRlZmF1bHQiIHRvIGNoYW5nZSB0aGlzLCBhbmQKKyJnaXQgcHVzaCIgd2lsbCB3YXJuIGFib3V0IHRoZSB1cGNvbWluZyBjaGFuZ2UgdW50aWwgeW91IHNldCB0aGlzCit2YXJpYWJsZSBpbiB0aGlzIHJlbGVhc2UuCisKKyJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIiBpcyBkZXByZWNhdGVkIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiBhCityZWxhdGl2ZWx5IGRpc3RhbnQgZnV0dXJlLiAgImdpdCBicmFuY2ggWy11fC0tc2V0LXVwc3RyZWFtLXRvXSIgaGFzCitiZWVuIGludHJvZHVjZWQgd2l0aCBhIHNhbmVyIG9yZGVyIG9mIGFyZ3VtZW50cyB0byByZXBsYWNlIGl0LgorCisKK1VwZGF0ZXMgc2luY2UgdjEuOC4wCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogQ29tbWFuZC1saW5lIGNvbXBsZXRpb24gc2NyaXB0cyBmb3IgdGNzaCBhbmQgenNoIGhhdmUgYmVlbiBhZGRlZC4KKworICogImdpdC1wcm9tcHQiIHNjcmlwdGxldCAoaW4gY29udHJpYi9jb21wbGV0aW9uKSBjYW4gYmUgdG9sZCB0byBwYWludAorICAgcGllY2VzIG9mIHRoZSBoaW50cyBpbiB0aGUgcHJvbXB0IHN0cmluZyBpbiBjb2xvcnMuCisKKyAqIFNvbWUgZG9jdW1lbnRhdGlvbiBwYWdlcyB0aGF0IHVzZWQgdG8gc2hpcCBvbmx5IGluIHRoZSBwbGFpbiB0ZXh0CisgICBmb3JtYXQgYXJlIG5vdyBmb3JtYXR0ZWQgaW4gSFRNTCBhcyB3ZWxsLgorCisgKiBXZSB1c2VkIHRvIGhhdmUgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBhbmNpZW50ICJsZXNzIiB0aGF0CisgICBjYXVzZXMgaXQgdG8gZXhpdCB3aXRob3V0IGFueSBvdXRwdXQgd2hlbiB0aGUgdGVybWluYWwgaXMgcmVzaXplZC4KKyAgIFRoZSBidWcgaGFzIGJlZW4gZml4ZWQgaW4gImxlc3MiIHZlcnNpb24gNDA2IChKdW5lIDIwMDcpLCBhbmQgdGhlCisgICB3b3JrYXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQgaW4gdGhpcyByZWxlYXNlLgorCisgKiBXaGVuICJnaXQgY2hlY2tvdXQiIGNoZWNrcyBvdXQgYSBicmFuY2gsIGl0IHRlbGxzIHRoZSB1c2VyIGhvdyBmYXIKKyAgIGJlaGluZCAob3IgYWhlYWQpIHRoZSBuZXcgYnJhbmNoIGlzIHJlbGF0aXZlIHRvIHRoZSByZW1vdGUgdHJhY2tpbmcKKyAgIGJyYW5jaCBpdCBidWlsZHMgdXBvbi4gIFRoZSBtZXNzYWdlIG5vdyBhbHNvIGFkdmlzZXMgaG93IHRvIHN5bmMKKyAgIHRoZW0gdXAgYnkgcHVzaGluZyBvciBwdWxsaW5nLiAgVGhpcyBjYW4gYmUgZGlzYWJsZWQgd2l0aCB0aGUKKyAgIGFkdmljZS5zdGF0dXNIaW50cyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiAiZ2l0IGNvbmZpZyAtLWdldCIgdXNlZCB0byBkaWFnbm9zZSBwcmVzZW5jZSBvZiBtdWx0aXBsZQorICAgZGVmaW5pdGlvbnMgb2YgdGhlIHNhbWUgdmFyaWFibGUgaW4gdGhlIHNhbWUgY29uZmlndXJhdGlvbiBmaWxlIGFzCisgICBhbiBlcnJvciwgYnV0IGl0IG5vdyBhcHBsaWVzIHRoZSAibGFzdCBvbmUgd2lucyIgcnVsZSB1c2VkIGJ5IHRoZQorICAgaW50ZXJuYWwgY29uZmlndXJhdGlvbiBsb2dpYy4gIFN0cmljdGx5IHNwZWFraW5nLCB0aGlzIG1heSBiZSBhbgorICAgQVBJIHJlZ3Jlc3Npb24gYnV0IGl0IGlzIGV4cGVjdGVkIHRoYXQgbm9ib2R5IHdpbGwgbm90aWNlIGl0IGluCisgICBwcmFjdGljZS4KKworICogQSBuZXcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAiZGlmZi5jb250ZXh0IiBjYW4gYmUgdXNlZCB0bworICAgZ2l2ZSB0aGUgZGVmYXVsdCBudW1iZXIgb2YgY29udGV4dCBsaW5lcyBpbiB0aGUgcGF0Y2ggb3V0cHV0LCB0bworICAgb3ZlcnJpZGUgdGhlIGhhcmRjb2RlZCBkZWZhdWx0IG9mIDMgbGluZXMuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIHRoZSAiLS1ub3Rlcz08cmVmPiIgb3B0aW9uIHRvIGdpdmUKKyAgIG5vdGVzIGZvciB0aGUgY29tbWl0IGFmdGVyIHRoZSB0aHJlZS1kYXNoIGxpbmVzIGluIGl0cyBvdXRwdXQuCisKKyAqICJnaXQgbG9nIC1wIC1TPHN0cmluZz4iIG5vdyBsb29rcyBmb3IgdGhlIDxzdHJpbmc+IGFmdGVyIGFwcGx5aW5nCisgICB0aGUgdGV4dGNvbnYgZmlsdGVyIChpZiBkZWZpbmVkKTsgZWFybGllciBpdCBpbnNwZWN0ZWQgdGhlIGNvbnRlbnRzCisgICBvZiB0aGUgYmxvYnMgd2l0aG91dCBmaWx0ZXJpbmcuCisKKyAqICJnaXQgbG9nIC0tZ3JlcD08cGNyZT4iIGxlYXJuZWQgdG8gaG9ub3IgdGhlICJncmVwLnBhdHRlcm50eXBlIgorICAgY29uZmlndXJhdGlvbiBzZXQgdG8gInBlcmwiLgorCisgKiAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4iIG5vdyBpbnRlcnByZXRzIDxvYmplY3Q+IGFzIGFuIGV4dGVuZGVkCisgICBTSEEtMSAoZS5nLiBIRUFEfjQgaXMgYWxsb3dlZCksIGluc3RlYWQgb2Ygb25seSBhY2NlcHRpbmcgZnVsbCBoZXgKKyAgIG9iamVjdCBuYW1lLgorCisgKiAiZ2l0IHJtICRzdWJtb2R1bGUiIHVzZWQgdG8gcHVudCBvbiByZW1vdmluZyBhIHN1Ym1vZHVsZSB3b3JraW5nCisgICB0cmVlIHRvIGF2b2lkIGxvc2luZyB0aGUgcmVwb3NpdG9yeSBlbWJlZGRlZCBpbiBpdC4gIEJlY2F1c2UKKyAgIHJlY2VudCBnaXQgdXNlcyBhIG1lY2hhbmlzbSB0byBzZXBhcmF0ZSB0aGUgc3VibW9kdWxlIHJlcG9zaXRvcnkKKyAgIGZyb20gdGhlIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWUsICJnaXQgcm0iIGxlYXJuZWQgdG8gZGV0ZWN0IHRoaXMKKyAgIGNhc2UgYW5kIHJlbW92ZXMgdGhlIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWUgd2hlbiBpdCBpcyBzYWZlIHRvIGRvIHNvLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIHVzZWQgdG8gcHJvbXB0IGZvciB0aGUgc2VuZGVyIGFkZHJlc3MsIGV2ZW4gd2hlbgorICAgdGhlIGNvbW1pdHRlciBpZGVudGl0eSBpcyB3ZWxsIHNwZWNpZmllZCAoZS5nLiB2aWEgdXNlci5uYW1lIGFuZAorICAgdXNlci5lbWFpbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcykuICBUaGUgY29tbWFuZCBubyBsb25nZXIgZ2l2ZXMKKyAgIHRoaXMgcHJvbXB0IHdoZW4gbm90IG5lY2Vzc2FyeS4KKworICogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IGFsbG93IG5vbi1hZGRyZXNzIGdhcmJhZ2Ugc3RyaW5ncyB0bworICAgYXBwZWFyIGFmdGVyIGFkZHJlc3NlcyBvbiBDYzogbGluZXMgaW4gdGhlIHBhdGNoIGZpbGVzIChhbmQgd2hlbgorICAgdG9sZCB0byBwaWNrIHRoZW0gdXAgdG8gZmluZCBtb3JlIHJlY2lwaWVudHMpLCBlLmcuCisKKyAgICAgQ2M6IFN0YWJsZSBLZXJuZWwgPHN0YWJsZUBrLm9yZz4gIyBmb3IgdjMuMiBhbmQgdXAKKworICAgVGhlIGNvbW1hbmQgbm93IHN0cmlwcyAiICMgZm9yIHYzLjIgYW5kIHVwIiBwYXJ0IGJlZm9yZSBhZGRpbmcgdGhlCisgICByZW1haW5kZXIgb2YgdGhpcyBsaW5lIHRvIHRoZSBsaXN0IG9mIHJlY2lwaWVudHMuCisKKyAqICJnaXQgc3VibW9kdWxlIGFkZCIgbGVhcm5lZCB0byBhZGQgYSBuZXcgc3VibW9kdWxlIGF0IHRoZSBzYW1lCisgICBwYXRoIGFzIHRoZSBwYXRoIHdoZXJlIGFuIHVucmVsYXRlZCBzdWJtb2R1bGUgd2FzIGJvdW5kIHRvIGluIGFuCisgICBleGlzdGluZyByZXZpc2lvbiB2aWEgdGhlICItLW5hbWUiIG9wdGlvbi4KKworICogImdpdCBzdWJtb2R1bGUgc3luYyIgbGVhcm5lZCB0aGUgIi0tcmVjdXJzaXZlIiBvcHRpb24uCisKKyAqICJkaWZmLnN1Ym1vZHVsZSIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBnaXZlIGN1c3RvbQorICAgZGVmYXVsdCB2YWx1ZSB0byB0aGUgImdpdCBkaWZmIC0tc3VibW9kdWxlIiBvcHRpb24uCisKKyAqICJnaXQgc3ltYm9saWMtcmVmIiBsZWFybmVkIHRoZSAiLWQgJHN5bXJlZiIgb3B0aW9uIHRvIGRlbGV0ZSB0aGUKKyAgIG5hbWVkIHN5bWJvbGljIHJlZiwgd2hpY2ggaXMgbW9yZSBpbnR1aXRpdmUgd2F5IHRvIHNwZWxsIGl0IHRoYW4KKyAgICJ1cGRhdGUtcmVmIC1kIC0tbm8tZGVyZWYgJHN5bXJlZiIuCisKKworRm9yZWlnbiBJbnRlcmZhY2UKKworICogImdpdCBjdnNpbXBvcnQiIGNhbiBiZSB0b2xkIHRvIHJlY29yZCB0aW1lem9uZXMgKG90aGVyIHRoYW4gR01UKQorICAgcGVyLWF1dGhvciB2aWEgaXRzIGF1dGhvciBpbmZvIGZpbGUuCisKKyAqIFRoZSByZW1vdGUgaGVscGVyIGludGVyZmFjZSB0byBpbnRlcmFjdCB3aXRoIHN1YnZlcnNpb24KKyAgIHJlcG9zaXRvcmllcyAob25lIG9mIHRoZSBHU29DIDIwMTIgcHJvamVjdHMpIGhhcyBiZWVuIG1lcmdlZC4KKworICogQSBuZXcgcmVtb3RlLWhlbHBlciBpbnRlcmZhY2UgZm9yIE1lcmN1cmlhbCBoYXMgYmVlbiBhZGRlZCB0bworICAgY29udHJpYi9yZW1vdGUtaGVscGVycy4KKworICogVGhlIGRvY3VtZW50YXRpb24gZm9yIGdpdCgxKSB3YXMgcG9pbnRpbmcgYXQgYSBwYWdlIGF0IGFuIGV4dGVybmFsCisgICBzaXRlIGZvciB0aGUgbGlzdCBvZiBhdXRob3JzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0ZWQuICBUaGUgbGluayBoYXMKKyAgIGJlZW4gdXBkYXRlZCB0byBwb2ludCBhdCBhbiBhbHRlcm5hdGl2ZSBzaXRlLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgZXRjLgorCisgKiBDb21waWxhdGlvbiBvbiBDeWd3aW4gd2l0aCBuZXdlciBoZWFkZXIgZmlsZXMgYXJlIHN1cHBvcnRlZCBub3cuCisKKyAqIEEgY291cGxlIG9mIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbiB1cGRhdGVzIG9uIE1pbkdXLgorCisgKiBUaGUgbG9naWMgdG8gZ2VuZXJhdGUgdGhlIGluaXRpYWwgYWR2ZXJ0aXNlbWVudCBmcm9tICJ1cGxvYWQtcGFjayIKKyAgIChpLmUuIHdoYXQgaXMgaW52b2tlZCBieSAiZ2l0IGZldGNoIiBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUKKyAgIGNvbm5lY3Rpb24pIHRvIGxpc3Qgd2hhdCByZWZzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHJlcG9zaXRvcnkgaGFzCisgICBiZWVuIG9wdGltaXplZC4KKworICogVGhlIGxvZ2ljIHRvIGZpbmQgc2V0IG9mIGF0dHJpYnV0ZXMgdGhhdCBtYXRjaCBhIGdpdmVuIHBhdGggaGFzCisgICBiZWVuIG9wdGltaXplZC4KKworICogVXNlIHByZWxvYWRpbmRleCBpbiAiZ2l0IGRpZmYtaW5kZXgiIGFuZCAiZ2l0IHVwZGF0ZS1pbmRleCIsIHdoaWNoCisgICBoYXMgYSBuaWNlIHNwZWVkdXAgb24gc3lzdGVtcyB3aXRoIHNsb3cgc3RhdCBjYWxscyAoYW5kIGV2ZW4gb24KKyAgIExpbnV4KS4KKworCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuOC4wCistLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS44LjAgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMgdG8gdGhlbSBmb3IKK2RldGFpbHMpLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiBwYXJzZXIgaGFkIGFuIHVubmVjZXNzYXJ5IGhhcmRjb2RlZCBsaW1pdCBvbgorICAgdmFyaWFibGUgbmFtZXMgdGhhdCB3YXMgbm90IGNoZWNrZWQgY29uc2lzdGVudGx5LgorCisgKiBUaGUgInNheSIgZnVuY3Rpb24gaW4gdGhlIHRlc3Qgc2NhZmZvbGRpbmcgaW5jb3JyZWN0bHkgYWxsb3dlZAorICAgImVjaG8iIHRvIGludGVycHJldCAiXGEiIGFzIGlmIGl0IHdlcmUgYSBDLXN0cmluZyBhc2tpbmcgZm9yIGEKKyAgIEJFTCBvdXRwdXQuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBmZWVkcyAvZGV2L251bGwgYXMgYSBjb21tb24gYW5jZXN0b3Igd2hlbiBkZWFsaW5nCisgICB3aXRoIGFuIGFkZC9hZGQgY29uZmxpY3QsIGJ1dCBwNG1lcmdlIGJhY2tlbmQgY2Fubm90IGhhbmRsZQorICAgaXQuIFdvcmsgaXQgYXJvdW5kIGJ5IHBhc3NpbmcgYSB0ZW1wb3JhcnkgZW1wdHkgZmlsZS4KKworICogImdpdCBsb2cgLUYgLUUgLS1ncmVwPSc8ZXJlPiciIGZhaWxlZCB0byB1c2UgdGhlIGdpdmVuIDxlcmU+CisgICBwYXR0ZXJuIGFzIGV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYW5kIGluc3RlYWQgbG9va2VkIGZvciB0aGUKKyAgIHN0cmluZyBsaXRlcmFsbHkuCisKKyAqICJnaXQgZ3JlcCAtZSBwYXR0ZXJuIDx0cmVlPiIgYXNrZWQgdGhlIGF0dHJpYnV0ZSBzeXN0ZW0gdG8gcmVhZAorICAgIjx0cmVlPjouZ2l0YXR0cmlidXRlcyIgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlLCB3aGljaCB3YXMKKyAgIG5vbnNlbnNlLgorCisgKiBBIHN5bWJvbGljIHJlZiByZWZzL2hlYWRzL1NZTSB3YXMgbm90IGNvcnJlY3RseSByZW1vdmVkIHdpdGggImdpdAorICAgYnJhbmNoIC1kIFNZTSI7IHRoZSBjb21tYW5kIHJlbW92ZWQgdGhlIHJlZiBwb2ludGVkIGJ5IFNZTQorICAgaW5zdGVhZC4KKworICogVXBkYXRlICJyZW1vdGUgdHJhY2tpbmcgYnJhbmNoIiBpbiB0aGUgZG9jdW1lbnRhdGlvbiB0bworICAgInJlbW90ZS10cmFja2luZyBicmFuY2giLgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UiIHJ1biB3aGlsZSB0aGUgSEVBRCBpcyBkZXRhY2hlZCB0cmllZCB0byBmaW5kCisgICB0aGUgdXBzdHJlYW0gYnJhbmNoIG9mIHRoZSBkZXRhY2hlZCBIRUFEICh3aGljaCBieSBkZWZpbml0aW9uCisgICBkb2VzIG5vdCBleGlzdCkgYW5kIGVtaXR0ZWQgdW5uZWNlc3NhcnkgZXJyb3IgbWVzc2FnZXMuCisKKyAqIFRoZSByZWZzL3JlcGxhY2UgaGllcmFyY2h5IHdhcyBub3QgbWVudGlvbmVkIGluIHRoZQorICAgcmVwb3NpdG9yeS1sYXlvdXQgZG9jcy4KKworICogVmFyaW91cyByZmMyMDQ3IHF1b3RpbmcgaXNzdWVzIGFyb3VuZCBhIG5vbi1BU0NJSSBuYW1lIG9uIHRoZQorICAgRnJvbTogbGluZSBpbiB0aGUgb3V0cHV0IGZyb20gZm9ybWF0LXBhdGNoIGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFNvbWV0aW1lcyBjdXJsX211bHRpX3RpbWVvdXQoKSBmdW5jdGlvbiBzdWdnZXN0ZWQgYSB3cm9uZyB0aW1lb3V0CisgICB2YWx1ZSB3aGVuIHRoZXJlIGlzIG5vIGZpbGUgZGVzY3JpcHRvciB0byB3YWl0IG9uIGFuZCB0aGUgaHR0cAorICAgdHJhbnNwb3J0IGVuZGVkIHVwIHNsZWVwaW5nIGZvciBtaW51dGVzIGluIHNlbGVjdCgyKSBzeXN0ZW0gY2FsbC4KKyAgIEEgd29ya2Fyb3VuZCBoYXMgYmVlbiBhZGRlZCBmb3IgdGhpcy4KKworICogRm9yIGEgZmV0Y2ggcmVmc3BlYyAob3IgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB3aWxkY2FyZCBvbiBvbmUpLAorICAgd2UgYWx3YXlzIHdhbnQgdGhlIFJIUyB0byBtYXAgdG8gc29tZXRoaW5nIGluc2lkZSAicmVmcy8iCisgICBoaWVyYXJjaHksIGJ1dCB0aGUgbG9naWMgdG8gY2hlY2sgaXQgd2FzIG5vdCBleGFjdGx5IHJpZ2h0LgorICAgKG1lcmdlIDVjMDhjMWYgamMvbWFpbnQtZmV0Y2gtdGlnaHRlbi1yZWZuYW1lLWNoZWNrIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIC1HPHBhdHRlcm4+IiBkaWQgbm90IGhvbm9yIHRleHRjb252IGZpbHRlciB3aGVuIGxvb2tpbmcKKyAgIGZvciBjaGFuZ2VzLgorCisgKiBTb21lIEhUVFAgc2VydmVycyBhc2sgZm9yIGF1dGggb25seSBkdXJpbmcgdGhlIGFjdHVhbCBwYWNraW5nIHBoYXNlCisgICAobm90IGluIGxzLXJlbW90ZSBwaGFzZSk7IHRoaXMgaXMgbm90IHJlYWxseSBhIHJlY29tbWVuZGVkCisgICBjb25maWd1cmF0aW9uLCBidXQgdGhlIGNsaWVudHMgdXNlZCB0byBmYWlsIHRvIGF1dGhlbnRpY2F0ZSB3aXRoCisgICBzdWNoIHNlcnZlcnMuCisgICAobWVyZ2UgMmU3MzZmZCBqay9tYWludC1odHRwLWhhbGYtYXV0aC1mZXRjaCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcDQiIHVzZWQgdG8gdHJ5IGV4cGFuZGluZyBtYWxmb3JtZWQgIiRrZXl3b3JkJCIgdGhhdCBzcGFucworICAgYWNyb3NzIG11bHRpcGxlIGxpbmVzLgorCisgKiBTeW50YXggaGlnaGxpZ2h0aW5nIGluICJnaXR3ZWIiIHdhcyBub3QgcXVpdGUgd29ya2luZy4KKworICogUlNTIGZlZWQgZnJvbSAiZ2l0d2ViIiBoYWQgYSB4c3MgaG9sZSBpbiBpdHMgdGl0bGUgb3V0cHV0LgorCisgKiAiZ2l0IGNvbmZpZyAtLXBhdGggJGtleSIgc2VnZmF1bHRlZCBvbiAiW3NlY3Rpb25dIGtleSIgKGEgYm9vbGVhbgorICAgInRydWUiIHNwZWxsZWQgd2l0aG91dCAiPSIsIG5vdCAiW3NlY3Rpb25dIGtleSA9IHRydWUiKS4KKworICogImdpdCBjaGVja291dCAtYiBmb28iIHdoaWxlIG9uIGFuIHVuYm9ybiBicmFuY2ggZGlkIG5vdCBzYXkKKyAgICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJ2ZvbyciIGxpa2Ugb3RoZXIgY2FzZXMuCisKKyAqIFZhcmlvdXMgY29kZXBhdGhzIGhhdmUgd29ya2Fyb3VuZCBmb3IgYSBjb21tb24gbWlzY29uZmlndXJhdGlvbiB0bworICAgc3BlbGwgIlVURi04IiBhcyAidXRmOCIsIGJ1dCBpdCB3YXMgbm90IHVzZWQgdW5pZm9ybWx5LiAgTW9zdAorICAgbm90YWJseSwgbWFpbGluZm8gKHdoaWNoIGlzIHVzZWQgYnkgImdpdCBhbSIpIGxhY2tlZCB0aGlzIHN1cHBvcnQuCisKKyAqIFdlIGZhaWxlZCB0byBtZW50aW9uIGEgZmlsZSB3aXRob3V0IGFueSBjb250ZW50IGNoYW5nZSBidXQgd2hvc2UKKyAgIHBlcm1pc3Npb24gYml0IHdhcyBtb2RpZmllZCwgb3IgKHdvcnNlIHlldCkgYSBuZXcgZmlsZSB3aXRob3V0IGFueQorICAgY29udGVudCBpbiB0aGUgImdpdCBkaWZmIC0tc3RhdCIgb3V0cHV0LgorCisgKiBXaGVuICItLXN0YXQtY291bnQiIGhpZGVzIGEgZGlmZnN0YXQgZm9yIGJpbmFyeSBjb250ZW50cywgdGhlIHRvdGFsCisgICBudW1iZXIgb2YgYWRkZWQgYW5kIHJlbW92ZWQgbGluZXMgYXQgdGhlIGJvdHRvbSB3YXMgY29tcHV0ZWQKKyAgIGluY29ycmVjdGx5LgorCisgKiBXaGVuICItLXN0YXQtY291bnQiIGhpZGVzIGEgZGlmZnN0YXQgZm9yIHVubWVyZ2VkIHBhdGhzLCB0aGUgdG90YWwKKyAgIG51bWJlciBvZiBhZmZlY3RlZCBmaWxlcyBhdCB0aGUgYm90dG9tIG9mIHRoZSAiZGlmZiAtLXN0YXQiIG91dHB1dAorICAgd2FzIGNvbXB1dGVkIGluY29ycmVjdGx5LgorCisgKiAiZGlmZiAtLXNob3J0c3RhdCIgbWlzY291bnRlZCB0aGUgdG90YWwgbnVtYmVyIG9mIGFmZmVjdGVkIGZpbGVzCisgICB3aGVuIHRoZXJlIHdlcmUgdW5tZXJnZWQgcGF0aHMuCisKKyAqICJ1cGRhdGUtcmVmIC1kIC0tZGVyZWYgU1lNIiB0byBkZWxldGUgYSByZWYgdGhyb3VnaCBhIHN5bWJvbGljIHJlZgorICAgdGhhdCBwb2ludHMgdG8gaXQgZGlkIG5vdCByZW1vdmUgaXQgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjIuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5YTZmYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjIuMS50eHQKQEAgLTAsMCArMSwxMTUgQEAKK0dpdCB2MS44LjIuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBlYXJsaWVyIGNoYW5nZSB0byB0aGUgYXR0cmlidXRlIHN5c3RlbSBpbnRyb2R1Y2VkIGF0IHYxLjguMS4yIGJ5CisgICBtaXN0YWtlIHN0b3BwZWQgYSBwYXR0ZXJuICJkaXIiICh3aXRob3V0IHRyYWlsaW5nIHNsYXNoKSBmcm9tCisgICBtYXRjaGluZyBhIGRpcmVjdG9yeSAiZGlyIiAoaXQgb25seSB3YW50ZWQgdG8gYWxsb3cgcGF0dGVybiAiZGlyLyIKKyAgIHRvIGFsc28gbWF0Y2gpLgorCisgKiBWZXJpZmljYXRpb24gb2Ygc2lnbmVkIHRhZ3Mgd2VyZSBub3QgZG9uZSBjb3JyZWN0bHkgd2hlbiBub3QgaW4gQworICAgb3IgZW4vVVMgbG9jYWxlLgorCisgKiAnZ2l0IGNvbW1pdCAtbSAiJG1zZyInIHVzZWQgdG8gYWRkIGFuIGV4dHJhIG5ld2xpbmUgZXZlbiB3aGVuCisgICAkbXNnIGFscmVhZHkgZW5kZWQgd2l0aCBvbmUuCisKKyAqIFRoZSAiLS1tYXRjaD08cGF0dGVybj4iIG9wdGlvbiBvZiAiZ2l0IGRlc2NyaWJlIiwgd2hlbiB1c2VkIHdpdGgKKyAgICItLWFsbCIgdG8gYWxsb3cgcmVmcyB0aGF0IGFyZSBub3QgYW5ub3RhdGVkIHRhZ3MgdG8gYmUgdXNlZCBhcyBhCisgICBiYXNlIG9mIGRlc2NyaXB0aW9uLCBkaWQgbm90IHJlc3RyaWN0IHRoZSBvdXRwdXQgZnJvbSB0aGUgY29tbWFuZAorICAgdG8gdGhvc2UgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0dGVybi4KKworICogQW4gYWxpYXNlZCBjb21tYW5kIHNwYXduZWQgZnJvbSBhIGJhcmUgcmVwb3NpdG9yeSB0aGF0IGRvZXMgbm90IHNheQorICAgaXQgaXMgYmFyZSB3aXRoICJjb3JlLmJhcmUgPSB5ZXMiIGlzIHRyZWF0ZWQgYXMgbm9uLWJhcmUgYnkgbWlzdGFrZS4KKworICogV2hlbiAiZm9ybWF0LXBhdGNoIiBxdW90ZWQgYSBub24tYXNjaWkgc3RyaW5ncyBvbiB0aGUgaGVhZGVyIGZpbGVzLAorICAgaXQgaW5jb3JyZWN0bHkgYXBwbGllZCByZmMyMDQ3IGFuZCBjaG9wcGVkIGEgc2luZ2xlIGNoYXJhY3RlciBpbgorICAgdGhlIG1pZGRsZSBvZiBpdC4KKworICogImdpdCBhcmNoaXZlIiByZXBvcnRzIGEgZmFpbHVyZSB3aGVuIGFza2VkIHRvIGNyZWF0ZSBhbiBhcmNoaXZlIG91dAorICAgb2YgYW4gZW1wdHkgdHJlZS4gIEl0IHdvdWxkIGJlIG1vcmUgaW50dWl0aXZlIHRvIGdpdmUgYW4gZW1wdHkKKyAgIGFyY2hpdmUgYmFjayBpbiBzdWNoIGEgY2FzZS4KKworICogImdpdCB0YWcgLWYgPHRhZz4iIGFsd2F5cyBzYWlkICJVcGRhdGVkIHRhZyAnPHRhZz4nIiBldmVuIHdoZW4KKyAgIGNyZWF0aW5nIGEgbmV3IHRhZyAoaS5lLiBub3Qgb3ZlcndyaXRpbmcgbm9yIHVwZGF0aW5nKS4KKworICogImdpdCBjbWQgLS0gJzoodG9wJyIgd2FzIG5vdCBkaWFnbm9zZWQgYXMgYW4gaW52YWxpZCBzeW50YXgsIGFuZAorICAgaW5zdGVhZCB0aGUgcGFyc2VyIGtlcHQgcmVhZGluZyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgorCisgKiBBbm5vdGF0ZWQgdGFncyBvdXRzaWRlIHJlZnMvdGFncy8gaGllcmFyY2h5IHdlcmUgbm90IGFkdmVydGlzZWQKKyAgIGNvcnJlY3RseSB0byB0aGUgbHMtcmVtb3RlIGFuZCBmZXRjaCB3aXRoIHJlY2VudCB2ZXJzaW9uIG9mIEdpdC4KKworICogVGhlIGNvZGUgdG8ga2VlcCB0cmFjayBvZiB3aGF0IGRpcmVjdG9yeSBuYW1lcyBhcmUga25vd24gdG8gR2l0IG9uCisgICBwbGF0Zm9ybXMgd2l0aCBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zIGNhbiBnZXQgY29uZnVzZWQgdXBvbiBhCisgICBoYXNoIGNvbGxpc2lvbiBiZXR3ZWVuIHRoZXNlIHBhdGhuYW1lcyBhbmQgbG9vcGVkIGZvcmV2ZXIuCisKKyAqIFRoZSBsb2dpYyB1c2VkIGJ5ICJnaXQgZGlmZiAtTSAtLXN0YXQiIHRvIHNob3J0ZW4gdGhlIG5hbWVzIG9mCisgICBmaWxlcyBiZWZvcmUgYW5kIGFmdGVyIGEgcmVuYW1lIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgd2hlbiB0aGUKKyAgIGNvbW1vbiBwcmVmaXggYW5kIHN1ZmZpeCBiZXR3ZWVuIHRoZSB0d28gZmlsZW5hbWVzIG92ZXJsYXBwZWQuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIsIHdoZW4gcmVjdXJzZWQgaW50byBzdWItc3VibW9kdWxlcywgZGlkIG5vdAorICAgYWNjdW11bGF0ZSB0aGUgcHJlZml4IHBhdGhzLgorCisgKiAiZ2l0IGFtICRtYWlsZGlyLyIgYXBwbGllZCBtZXNzYWdlcyBpbiBhbiB1bmV4cGVjdGVkIG9yZGVyOyBzb3J0CisgICBmaWxlbmFtZXMgcmVhZCBmcm9tIHRoZSBtYWlsZGlyLyBpbiBhIHdheSB0aGF0IGlzIG1vcmUgbGlrZWx5IHRvCisgICBzb3J0IG1lc3NhZ2VzIGluIHRoZSBvcmRlciB0aGUgd3JpdGluZyBNVUEgbWVhbnQgdG8sIGJ5IHNvcnRpbmcKKyAgIG51bWVyaWMgc2VnbWVudCBpbiBudW1lcmljIG9yZGVyIGFuZCBub24tbnVtZXJpYyBzZWdtZW50IGluCisgICBhbHBoYWJldGljYWwgb3JkZXIuCisKKyAqIFdoZW4gZXhwb3J0LXN1YnN0IGlzIHVzZWQsICJ6aXAiIG91dHB1dCByZWNvcmRlZCBpbmNvcnJlY3QKKyAgIHNpemUgb2YgdGhlIGZpbGUuCisKKyAqIFNvbWUgcGxhdGZvcm1zIGFuZCB1c2VycyBzcGVsbCBVVEYtOCBkaWZmZXJlbnRseTsgcmV0cnkgd2l0aCB0aGUKKyAgIG1vc3Qgb2ZmaWNpYWwgIlVURi04IiB3aGVuIHRoZSBzeXN0ZW0gZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUKKyAgIHVzZXItc3VwcGxpZWQgZW5jb2RpbmcgbmFtZSB0aGF0IGFyZSB0aGUgY29tbW9uIGFsdGVybmF0aXZlCisgICBzcGVsbGluZ3Mgb2YgVVRGLTguCisKKyAqICJnaXQgYnJhbmNoIiBkaWQgbm90IGJvdGhlciB0byBjaGVjayBub25zZW5zZSBjb21tYW5kIGxpbmUKKyAgIHBhcmFtZXRlcnMgYW5kIGlzc3VlIGVycm9ycyBpbiBtYW55IGNhc2VzLgorCisgKiAiZ2l0IHVwZGF0ZS1pbmRleCAtaCIgZGlkIG5vdCBkbyB0aGUgdXN1YWwgIi1oKGVscCkiIHRoaW5nLgorCisgKiBwZXJsL0dpdC5wbTo6Y2F0X2Jsb2Igc2x1cnBlZCBldmVyeXRoaW5nIGluIGNvcmUgb25seSB0byB3cml0ZSBpdAorICAgb3V0IHRvIGEgZmlsZSBkZXNjcmlwdG9yLCB3aGljaCB3YXMgbm90IGEgdmVyeSBzbWFydCB0aGluZyB0byBkby4KKworICogVGhlIFNTTCBwZWVyIHZlcmlmaWNhdGlvbiBkb25lIGJ5ICJnaXQgaW1hcC1zZW5kIiBkaWQgbm90IGFzayBmb3IKKyAgIFNlcnZlciBOYW1lIEluZGljYXRpb24gKFJGQyA0MzY2KSwgZmFpbGluZyB0byBjb25uZWN0IFNTTC9UTFMKKyAgIHNpdGVzIHRoYXQgc2VydmUgbXVsdGlwbGUgaG9zdG5hbWVzIG9uIGEgc2luZ2xlIElQLgorCisgKiAiZ2l0IGluZGV4LXBhY2siIGhhZCBhIGJ1ZmZlci1vdmVyZmxvdyB3aGlsZSBwcmVwYXJpbmcgYW4KKyAgIGluZm9ybWF0aW9uYWwgbWVzc2FnZSB3aGVuIHRoZSB0cmFuc2xhdGVkIHZlcnNpb24gb2YgaXQgd2FzIHRvbworICAgbG9uZy4KKworICogQ2xhcmlmeSBpbiB0aGUgZG9jdW1lbnRhdGlvbiAid2hhdCIgZ2V0cyBwdXNoZWQgdG8gIndoZXJlIiB3aGVuIHRoZQorICAgY29tbWFuZCBsaW5lIHRvICJnaXQgcHVzaCIgZG9lcyBub3Qgc2F5IHRoZXNlIGV4cGxpY2l0bHkuCisKKyAqIEluICJnaXQgcmVmbG9nIGV4cGlyZSIsIFJFQUNIQUJMRSBiaXQgd2FzIG5vdCBjbGVhcmVkIGZyb20gdGhlCisgICBjb3JyZWN0IG9iamVjdHMuCisKKyAqIFRoZSAiLS1jb2xvcj08d2hlbj4iIGFyZ3VtZW50IHRvIHRoZSBjb21tYW5kcyBpbiB0aGUgZGlmZiBmYW1pbHkKKyAgIHdhcyBkZXNjcmliZWQgcG9vcmx5LgorCisgKiBUaGUgYXJndW1lbnRzIGdpdmVuIHRvIHByZS1yZWJhc2UgaG9vayB3ZXJlIG5vdCBkb2N1bWVudGVkLgorCisgKiBUaGUgdjQgaW5kZXggZm9ybWF0IHdhcyBub3QgZG9jdW1lbnRlZC4KKworICogVGhlICItLW1hdGNoPTxwYXR0ZXJuPiIgYXJndW1lbnQgImdpdCBkZXNjcmliZSIgdGFrZXMgdXNlcyBnbG9iCisgICBwYXR0ZXJuIGJ1dCBpdCB3YXNuJ3Qgb2J2aW91cyBmcm9tIHRoZSBkb2N1bWVudGF0aW9uLgorCisgKiBTb21lIHNvdXJjZXMgZmFpbGVkIHRvIGNvbXBpbGUgb24gc3lzdGVtcyB0aGF0IGxhY2sgTklfTUFYSE9TVCBpbgorICAgdGhlaXIgc3lzdGVtIGhlYWRlciAoZS5nLiB6L09TKS4KKworICogQWRkIGFuIGV4YW1wbGUgdXNlIG9mICItLWVudi1maWx0ZXIiIGluICJmaWx0ZXItYnJhbmNoIgorICAgZG9jdW1lbnRhdGlvbi4KKworICogImdpdCBidW5kbGUgdmVyaWZ5IiBkaWQgbm90IHNheSAicmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkiIGZvciBhCisgICBidW5kbGUgdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBwcmVyZXF1aXNpdGVzLgorCisgKiBJbiB0aGUgdjEuOC4wIGVyYSwgd2UgY2hhbmdlZCBzeW1ib2xzIHRoYXQgZG8gbm90IGhhdmUgdG8gYmUgZ2xvYmFsCisgICB0byBmaWxlIHNjb3BlIHN0YXRpYywgYnV0IGEgZmV3IGZ1bmN0aW9ucyBpbiBncmFwaC5jIHdlcmUgdXNlZCBieQorICAgQ0dpdCBmcm9tIHNpZGV3YXlzIGJ5cGFzc2luZyB0aGUgZW50cnkgcG9pbnRzIG9mIHRoZSBBUEkgdGhlCisgICBpbi10cmVlIHVzZXJzIHVzZS4KKworICogImdpdCBtZXJnZS10cmVlIiBoYWQgYSB0eXBvIGluIHRoZSBsb2dpYyB0byBkZXRlY3QgZC9mIGNvbmZsaWN0cywKKyAgIHdoaWNoIGNhdXNlZCBpdCB0byBzZWdmYXVsdCBpbiBzb21lIGNhc2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjIuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4ZGYxYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjIuMi50eHQKQEAgLTAsMCArMSw2MSBAQAorR2l0IHYxLjguMi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBac2ggY29tcGxldGlvbiBmb3Jnb3QgdGhhdCAnJScgY2hhcmFjdGVyIHVzZWQgdG8gc2lnbmFsIHVudHJhY2tlZAorICAgZmlsZXMgbmVlZHMgdG8gYmUgZXNjYXBlZCB3aXRoIGFub3RoZXIgJyUnLgorCisgKiBBIGNvbW1pdCBvYmplY3Qgd2hvc2UgYXV0aG9yIG9yIGNvbW1pdHRlciBpZGVudCBhcmUgbWFsZm9ybWVkCisgICBjcmFzaGVkIHNvbWUgY29kZSB0aGF0IHRydXN0ZWQgdGhhdCBhIG5hbWUsIGFuIGVtYWlsIGFuZCBhbgorICAgdGltZXN0YW1wIGNhbiBhbHdheXMgYmUgZm91bmQgaW4gaXQuCisKKyAqIFRoZSBuZXcgY29yZS5jb21tZW50Y2hhciBjb25maWd1cmF0aW9uIHdhcyBub3QgYXBwbGllZCB0byBhIGZldworICAgcGxhY2VzLgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UiIGRpZCBub3QgcGFzcyAiLXYvLXEiIG9wdGlvbnMgdG8gdW5kZXJseWluZworICAgImdpdCByZWJhc2UiLgorCisgKiBXaGVuIHJlY2VpdmUtcGFjayBkZXRlY3RzIGVycm9yIGluIHRoZSBwYWNrIGhlYWRlciBpdCByZWNlaXZlZCBpbgorICAgb3JkZXIgdG8gZGVjaWRlIHdoaWNoIG9mIHVucGFjay1vYmplY3RzIG9yIGluZGV4LXBhY2sgdG8gcnVuLCBpdAorICAgcmV0dXJuZWQgd2l0aG91dCBjbG9zaW5nIHRoZSBlcnJvciBzdHJlYW0sIHdoaWNoIGxlZCB0byBhIGhhbmcKKyAgIHNpZGViYW5kIHRocmVhZC4KKworICogImdpdCBkaWZmIC0tZGlmZi1hbGdvcml0aG09YWxnbyIgd2FzIHVuZGVyc3Rvb2QgYnkgdGhlIGNvbW1hbmQgbGluZQorICAgcGFyc2VyLCBidXQgImdpdCBkaWZmIC0tZGlmZi1hbGdvcml0aG0gYWxnbyIgd2FzIG5vdC4KKworICogImdpdCBsb2cgLVMvLUciIHN0YXJ0ZWQgcGF5aW5nIGF0dGVudGlvbiB0byB0ZXh0Y29udiBmaWx0ZXIsIGJ1dAorICAgdGhlcmUgd2FzIG5vIHdheSB0byBkaXNhYmxlIHRoaXMuICBNYWtlIGl0IGhvbm9yIC0tbm8tdGV4dGNvbnYKKyAgIG9wdGlvbi4KKworICogImdpdCBtZXJnZSAkKGdpdCByZXYtcGFyc2UgdjEuOC4yKSIgYmVoYXZlZCBxdWl0ZSBkaWZmZXJlbnRseSBmcm9tCisgICAiZ2l0IG1lcmdlIHYxLjguMiIsIGFzIGlmIHYxLjguMiB3ZXJlIHdyaXR0ZW4gYXMgdjEuOC4yXjAgYW5kIGRpZAorICAgbm90IHBheSBtdWNoIGF0dGVudGlvbiB0byB0aGUgYW5ub3RhdGVkIHRhZyBwYXlsb2FkLiAgTWFrZSB0aGUgY29kZQorICAgbm90aWNlIHRoZSB0eXBlIG9mIHRoZSB0YWcgb2JqZWN0LCBpbiBhZGRpdGlvbiB0byB0aGUgZHdpbV9yZWYoKQorICAgYmFzZWQgY2xhc3NpZmljYXRpb24gdGhlIGN1cnJlbnQgY29kZSB1c2VzIChpLmUuIHRoZSBuYW1lIGFwcGVhcnMKKyAgIGluIHJlZnMvdGFncy8pIHRvIGRlY2lkZSB3aGVuIHRvIHNwZWNpYWwgY2FzZSBtZXJnaW5nIG9mIHRhZ3MuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2siIGFuZCAiZ2l0IHJldmVydCIgY2FuIHRha2UgbW9yZSB0aGFuIG9uZSBjb21taXQKKyAgIG9uIHRoZSBjb21tYW5kIGxpbmUgdGhlc2UgZGF5cywgYnV0IGl0IHdhcyBub3QgbWVudGlvbmVkIG9uIHRoZSB1c2FnZQorICAgdGV4dC4KKworICogUGVybCBzY3JpcHRzIGxpa2UgImdpdC1zdm4iIGNsb3NlZCAobm90IHJlZGlyZWN0aW5nIHRvIC9kZXYvbnVsbCkKKyAgIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0sIHdoaWNoIGlzIG5vdCBhIHZlcnkgc21hcnQgdGhpbmcgdG8gZG8uCisgICBMYXRlciBvcGVuIG1heSByZXR1cm4gZmlsZSBkZXNjcmlwdG9yICMyIGZvciB1bnJlbGF0ZWQgcHVycG9zZSwgYW5kCisgICBlcnJvciByZXBvcnRpbmcgY29kZSBtYXkgd3JpdGUgaW50byB0aGVtLgorCisgKiAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXgiIHdhcyBub3QgcHJlcGFyZWQgdG8gc2VlIGEgbGluZSBnZXR0aW5nCisgICBsb25nZXIgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2VzIChlLmcuIHRhYi1pbi1pbmRlbnQgYWthIFB5dGhvbikuCisKKyAqICJnaXQgZGlmZi9sb2cgLS1jYyIgZGlkIG5vdCB3b3JrIHdlbGwgd2l0aCBvcHRpb25zIHRoYXQgaWdub3JlCisgICB3aGl0ZXNwYWNlIGNoYW5nZXMuCisKKyAqIERvY3VtZW50YXRpb24gb24gc2V0dGluZyB1cCBhIGh0dHAgc2VydmVyIHRoYXQgcmVxdWlyZXMKKyAgIGF1dGhlbnRpY2F0aW9uIG9ubHkgb24gdGhlIHB1c2ggYnV0IG5vdCBmZXRjaCBoYXMgYmVlbiBjbGFyaWZpZWQuCisKKyAqIEEgZmV3IGJ1Z2ZpeGVzIHRvICJnaXQgcmVyZXJlIiB3b3JraW5nIG9uIGNvcm5lciBjYXNlIG1lcmdlCisgICBjb25mbGljdHMgaGF2ZSBiZWVuIGFwcGxpZWQuCisKKyAqICJnaXQgYnVuZGxlIiBkaWQgbm90IGxpa2UgYSBidW5kbGUgY3JlYXRlZCB1c2luZyBhIGNvbW1pdCB3aXRob3V0CisgICBhbnkgbWVzc2FnZSBhcyBpdHMgb25lIG9mIHRoZSBwcmVyZXF1aXNpdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjIuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzOTQ4MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjIuMy50eHQKQEAgLTAsMCArMSwxOSBAQAorR2l0IHYxLjguMi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMi4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAicmV2LWxpc3QgLS1zdGRpbiIgYW5kIGZyaWVuZHMga2VwdCBib2d1cyBwb2ludGVycyBpbnRvIHRoZSBpbnB1dAorICAgYnVmZmVyIGFyb3VuZCBhcyBodW1hbiByZWFkYWJsZSBvYmplY3QgbmFtZXMuICBUaGlzIHdhcyBub3QgYQorICAgaHVnZSBwcm9ibGVtIGJ1dCB3YXMgZXhwb3NlZCBieSBhIG5ldyBjaGFuZ2UgdGhhdCB1c2VzIHRoZXNlCisgICBuYW1lcyBpbiBlcnJvciBvdXRwdXQuCisKKyAqIFdoZW4gImdpdCBkaWZmdG9vbCIgZHJvdmUgImtkaWZmMyIsIGl0IG1pc3Rha2VubHkgcGFzc2VkIC0tYXV0bworICAgb3B0aW9uIHRoYXQgd2FzIG1lYW50IHdoaWxlIHJlc29sdmluZyBtZXJnZSBjb25mbGljdHMuCisKKyAqICJnaXQgcmVtb3RlIGFkZCIgY29tbWFuZCBkaWQgbm90IGRpYWdub3NlIGV4dHJhIGNvbW1hbmQgbGluZQorICAgYXJndW1lbnRzIGFzIGFuIGVycm9yIGFuZCBzaWxlbnRseSBpZ25vcmVkIHRoZW0uCisKK0Fsc28gY29udGFpbnMgYSBoYW5kZnVsIG9mIHRyaXZpYWwgY29kZSBjbGVhbi11cHMsIGRvY3VtZW50YXRpb24KK3VwZGF0ZXMsIHVwZGF0ZXMgdG8gdGhlIHRlc3Qgc3VpdGUsIGV0Yy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2MDZhZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjIudHh0CkBAIC0wLDAgKzEsNDk1IEBACitHaXQgdjEuOC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzICh0aGlzIHJlbGVhc2UpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyJnaXQgcHVzaCAkdGhlcmUgdGFnIHYxLjIuMyIgdXNlZCB0byBhbGxvdyByZXBsYWNpbmcgYSB0YWcgdjEuMi4zCit0aGF0IGFscmVhZHkgZXhpc3RzIGluIHRoZSByZXBvc2l0b3J5ICR0aGVyZSwgaWYgdGhlIHJld3JpdHRlbiB0YWcKK3lvdSBhcmUgcHVzaGluZyBwb2ludHMgYXQgYSBjb21taXQgdGhhdCBpcyBhIGRlc2NlbmRhbnQgb2YgYSBjb21taXQKK3RoYXQgdGhlIG9sZCB0YWcgdjEuMi4zIHBvaW50cyBhdC4gIFRoaXMgd2FzIGZvdW5kIHRvIGJlIGVycm9yIHByb25lCithbmQgc3RhcnRpbmcgd2l0aCB0aGlzIHJlbGVhc2UsIGFueSBhdHRlbXB0IHRvIHVwZGF0ZSBhbiBleGlzdGluZworcmVmIHVuZGVyIHJlZnMvdGFncy8gaGllcmFyY2h5IHdpbGwgZmFpbCwgd2l0aG91dCAiLS1mb3JjZSIuCisKK1doZW4gImdpdCBhZGQgLXUiIGFuZCAiZ2l0IGFkZCAtQSIgdGhhdCBkb2VzIG5vdCBzcGVjaWZ5IHdoYXQgcGF0aHMKK3RvIGFkZCBvbiB0aGUgY29tbWFuZCBsaW5lIGlzIHJ1biBmcm9tIGluc2lkZSBhIHN1YmRpcmVjdG9yeSwgdGhlCitzY29wZSBvZiB0aGUgb3BlcmF0aW9uIGhhcyBhbHdheXMgYmVlbiBsaW1pdGVkIHRvIHRoZSBzdWJkaXJlY3RvcnkuCitNYW55IHVzZXJzIGZvdW5kIHRoaXMgY291bnRlci1pbnR1aXRpdmUsIGdpdmVuIHRoYXQgImdpdCBjb21taXQgLWEiCithbmQgb3RoZXIgY29tbWFuZHMgb3BlcmF0ZSBvbiB0aGUgZW50aXJlIHRyZWUgcmVnYXJkbGVzcyBvZiB3aGVyZSB5b3UKK2FyZS4gIEluIHRoaXMgcmVsZWFzZSwgdGhlc2UgY29tbWFuZHMgZ2l2ZSBhIHdhcm5pbmcgbWVzc2FnZSB0aGF0CitzdWdnZXN0cyB0aGUgdXNlcnMgdG8gdXNlICJnaXQgYWRkIC11Ly1BIC4iIHdoZW4gdGhleSB3YW50IHRvIGxpbWl0Cit0aGUgc2NvcGUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5OyBkb2luZyBzbyB3aWxsIHNxdWVsY2ggdGhlIG1lc3NhZ2UsCit3aGlsZSB0cmFpbmluZyB0aGVpciBmaW5nZXJzLgorCisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMgKGZvciBHaXQgMi4wKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gImdpdCBwdXNoIFskdGhlcmVdIiBkb2VzIG5vdCBzYXkgd2hhdCB0byBwdXNoLCB3ZSBoYXZlIHVzZWQgdGhlCit0cmFkaXRpb25hbCAibWF0Y2hpbmciIHNlbWFudGljcyBzbyBmYXIgKGFsbCB5b3VyIGJyYW5jaGVzIHdlcmUgc2VudAordG8gdGhlIHJlbW90ZSBhcyBsb25nIGFzIHRoZXJlIGFscmVhZHkgYXJlIGJyYW5jaGVzIG9mIHRoZSBzYW1lIG5hbWUKK292ZXIgdGhlcmUpLiAgSW4gR2l0IDIuMCwgdGhlIGRlZmF1bHQgd2lsbCBjaGFuZ2UgdG8gdGhlICJzaW1wbGUiCitzZW1hbnRpY3MgdGhhdCBwdXNoZXMgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZQorbmFtZSwgb25seSB3aGVuIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBzZXQgdG8gaW50ZWdyYXRlIHdpdGggdGhhdAorcmVtb3RlIGJyYW5jaC4gIFRoZXJlIGlzIGEgdXNlciBwcmVmZXJlbmNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyJwdXNoLmRlZmF1bHQiIHRvIGNoYW5nZSB0aGlzLiAgSWYgeW91IGFyZSBhbiBvbGQtdGltZXIgd2hvIGlzIHVzZWQKK3RvIHRoZSAibWF0Y2hpbmciIHNlbWFudGljcywgeW91IGNhbiBzZXQgaXQgdG8gIm1hdGNoaW5nIiB0byBrZWVwIHRoZQordHJhZGl0aW9uYWwgYmVoYXZpb3VyLiAgSWYgeW91IHdhbnQgdG8gbGl2ZSBpbiB0aGUgZnV0dXJlIGVhcmx5LAoreW91IGNhbiBzZXQgaXQgdG8gInNpbXBsZSIgdG9kYXkgd2l0aG91dCB3YWl0aW5nIGZvciBHaXQgMi4wLgorCitXaGVuICJnaXQgYWRkIC11IiBhbmQgImdpdCBhZGQgLUEiLCB0aGF0IGRvZXMgbm90IHNwZWNpZnkgd2hhdCBwYXRocwordG8gYWRkIG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgcnVuIGZyb20gaW5zaWRlIGEgc3ViZGlyZWN0b3J5LCB0aGVzZQorY29tbWFuZHMgd2lsbCBvcGVyYXRlIG9uIHRoZSBlbnRpcmUgdHJlZSBpbiBHaXQgMi4wIGZvciBjb25zaXN0ZW5jeQord2l0aCAiZ2l0IGNvbW1pdCAtYSIgYW5kIG90aGVyIGNvbW1hbmRzLiBCZWNhdXNlIHRoZXJlIHdpbGwgYmUgbm8KK21lY2hhbmlzbSB0byBtYWtlICJnaXQgYWRkIC11IiBiZWhhdmUgYXMgaWYgImdpdCBhZGQgLXUgLiIsIGl0IGlzCitpbXBvcnRhbnQgZm9yIHRob3NlIHdobyBhcmUgdXNlZCB0byAiZ2l0IGFkZCAtdSIgKHdpdGhvdXQgcGF0aHNwZWMpCit1cGRhdGluZyB0aGUgaW5kZXggb25seSBmb3IgcGF0aHMgaW4gdGhlIGN1cnJlbnQgc3ViZGlyZWN0b3J5IHRvIHN0YXJ0Cit0cmFpbmluZyB0aGVpciBmaW5nZXJzIHRvIGV4cGxpY2l0bHkgc2F5ICJnaXQgYWRkIC11IC4iIHdoZW4gdGhleSBtZWFuCitpdCBiZWZvcmUgR2l0IDIuMCBjb21lcy4KKworCitVcGRhdGVzIHNpbmNlIHYxLjguMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEluaXRpYWwgcG9ydHMgdG8gUU5YIGFuZCB6L09TIFVOSVggU3lzdGVtIFNlcnZpY2VzIGhhdmUgc3RhcnRlZC4KKworICogT3V0cHV0IGZyb20gdGhlIHRlc3RzIGlzIGNvbG91cmVkIHVzaW5nICJncmVlbiBpcyBva2F5LCB5ZWxsb3cgaXMKKyAgIHF1ZXN0aW9uYWJsZSwgcmVkIGlzIGJhZCBhbmQgYmx1ZSBpcyBpbmZvcm1hdGl2ZSIgc2NoZW1lLgorCisgKiBNZW50aW9uIG9mICJHSVQvR2l0L2dpdCIgaW4gdGhlIGRvY3VtZW50YXRpb24gaGF2ZSBiZWVuIHVwZGF0ZWQgdG8KKyAgIGJlIG1vcmUgdW5pZm9ybSBhbmQgY29uc2lzdGVudC4gIFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0gYW5kIHRoZQorICAgY29uY2VwdCBpdCBlbWJvZGllcyBpcyAiR2l0IjsgdGhlIGNvbW1hbmQgdGhlIHVzZXJzIHR5cGUgaXMgImdpdCIuCisgICBBbGwtY2FwcyAiR0lUIiB3YXMgbWVyZWx5IGEgd2F5IHRvIGltaXRhdGUgIkdpdCIgdHlwZXNldCBpbiBzbWFsbAorICAgY2FwcyBpbiBvdXIgQVNDSUkgdGV4dCBvbmx5IGRvY3VtZW50YXRpb24gYW5kIHRvIGJlIGF2b2lkZWQuCisKKyAqIFRoZSBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi9jb21wbGV0aW9uKSB1c2VkIHRvIGxldCB0aGUKKyAgIGRlZmF1bHQgY29tcGxldGVyIHRvIHN1Z2dlc3QgcGF0aG5hbWVzLCB3aGljaCBnYXZlIHRvbyBtYW55CisgICBpcnJlbGV2YW50IGNob2ljZXMgKGUuZy4gImdpdCBhZGQiIHdvdWxkIG5vdCB3YW50IHRvIGFkZCBhbgorICAgdW5tb2RpZmllZCBwYXRoKS4gIEl0IGxlYXJudCB0byB1c2UgYSBtb3JlIGdpdC1hd2FyZSBsb2dpYyB0bworICAgZW51bWVyYXRlIG9ubHkgcmVsZXZhbnQgb25lcy4KKworICogSW4gYmFyZSByZXBvc2l0b3JpZXMsICJnaXQgc2hvcnRsb2ciIGFuZCBvdGhlciBjb21tYW5kcyBub3cgcmVhZAorICAgbWFpbG1hcCBmaWxlcyBmcm9tIHRoZSB0aXAgb2YgdGhlIGhpc3RvcnksIHRvIGhlbHAgcnVubmluZyB0aGVzZQorICAgdG9vbHMgaW4gc2VydmVyIHNldHRpbmdzLgorCisgKiBDb2xvciBzcGVjaWZpZXJzLCBlLmcuICIlQyhibHVlKUhlbGxvJUMocmVzZXQpIiwgdXNlZCBpbiB0aGUKKyAgICItLWZvcm1hdD0iIG9wdGlvbiBvZiAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgY2FuIGJlIGRpc2FibGVkIHdoZW4KKyAgIHRoZSBvdXRwdXQgaXMgbm90IHNlbnQgdG8gYSB0ZXJtaW5hbCBieSBwcmVmaXhpbmcgdGhlbSB3aXRoCisgICAiYXV0bywiLCBlLmcuICIlQyhhdXRvLGJsdWUpSGVsbG8lQyhhdXRvLHJlc2V0KSIuCisKKyAqIFNjcmlwdHMgY2FuIGFzayBHaXQgdGhhdCB3aWxkY2FyZCBwYXR0ZXJucyBpbiBwYXRoc3BlY3MgdGhleSBnaXZlIGRvCisgICBub3QgaGF2ZSBhbnkgc2lnbmlmaWNhbmNlLCBpLmUuIHRha2UgdGhlbSBhcyBsaXRlcmFsIHN0cmluZ3MuCisKKyAqIFRoZSBwYXR0ZXJucyBpbiAuZ2l0aWdub3JlIGFuZCAuZ2l0YXR0cmlidXRlcyBmaWxlcyBjYW4gaGF2ZSAqKi8sCisgICBhcyBhIHBhdHRlcm4gdGhhdCBtYXRjaGVzIDAgb3IgbW9yZSBsZXZlbHMgb2Ygc3ViZGlyZWN0b3J5LgorICAgRS5nLiAiZm9vLyoqL2JhciIgbWF0Y2hlcyAiYmFyIiBpbiAiZm9vIiBpdHNlbGYgb3IgaW4gYQorICAgc3ViZGlyZWN0b3J5IG9mICJmb28iLgorCisgKiBXaGVuIGdpdmluZyBhcmd1bWVudHMgd2l0aG91dCAiLS0iIGRpc2FtYmlndWF0aW9uLCBvYmplY3QgbmFtZXMKKyAgIHRoYXQgY29tZSBlYXJsaWVyIG9uIHRoZSBjb21tYW5kIGxpbmUgbXVzdCBub3QgYmUgaW50ZXJwcmV0YWJsZSBhcworICAgcGF0aHNwZWNzIGFuZCBwYXRoc3BlY3MgdGhhdCBjb21lIGxhdGVyIG9uIHRoZSBjb21tYW5kIGxpbmUgbXVzdAorICAgbm90IGJlIGludGVycHJldGFibGUgYXMgb2JqZWN0IG5hbWVzLiAgVGhpcyBkaXNhbWJpZ3VhdGlvbiBydWxlIGhhcworICAgYmVlbiB0d2Vha2VkIHNvIHRoYXQgIjovIiAobm8gb3RoZXIgc3RyaW5nIGJlZm9yZSBvciBhZnRlcikgaXMKKyAgIGFsd2F5cyBpbnRlcnByZXRlZCBhcyBhIHBhdGhzcGVjOyAiZ2l0IGNtZCAtLSA6LyIgaXMgbm8gbG9uZ2VyCisgICBuZWVkZWQsIHlvdSBjYW4ganVzdCBzYXkgImdpdCBjbWQgOi8iLgorCisgKiBWYXJpb3VzICJoaW50IiBsaW5lcyBHaXQgZ2l2ZXMgd2hlbiBpdCBhc2tzIHRoZSB1c2VyIHRvIGVkaXQKKyAgIG1lc3NhZ2VzIGluIHRoZSBlZGl0b3IgYXJlIGNvbW1lbnRlZCBvdXQgd2l0aCAnIycgYnkgZGVmYXVsdC4gVGhlCisgICBjb3JlLmNvbW1lbnRjaGFyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplCisgICB0aGlzICcjJyB0byBhIGRpZmZlcmVudCBjaGFyYWN0ZXIuCisKKyAqICJnaXQgYWRkIC11IiBhbmQgImdpdCBhZGQgLUEiIHdpdGhvdXQgcGF0aHNwZWMgaXNzdWVzIHdhcm5pbmcgdG8KKyAgIG1ha2UgdXNlcnMgYXdhcmUgdGhhdCB0aGV5IGFyZSBvbmx5IG9wZXJhdGluZyBvbiBwYXRocyBpbnNpZGUgdGhlCisgICBzdWJkaXJlY3RvcnkgdGhleSBhcmUgaW4uICBVc2UgIjovIiAoZXZlcnl0aGluZyBmcm9tIHRoZSB0b3ApIG9yCisgICAiLiIgKGV2ZXJ5dGhpbmcgZnJvbSB0aGUgJGN3ZCkgdG8gZGlzYW1iaWd1YXRlLgorCisgKiAiZ2l0IGJsYW1lIiAoYW5kICJnaXQgZGlmZiIpIGxlYXJuZWQgdGhlICItLW5vLWZvbGxvdyIgb3B0aW9uLgorCisgKiAiZ2l0IGJyYW5jaCIgbm93IHJlamVjdHMgc29tZSBub25zZW5zZSBjb21iaW5hdGlvbnMgb2YgY29tbWFuZCBsaW5lCisgICBhcmd1bWVudHMgKGUuZy4gZ2l2aW5nIG1vcmUgdGhhbiBvbmUgYnJhbmNoIG5hbWUgdG8gcmVuYW1lKSB3aXRoCisgICBtb3JlIGNhc2Utc3BlY2lmaWMgZXJyb3IgbWVzc2FnZXMuCisKKyAqICJnaXQgY2hlY2staWdub3JlIiBjb21tYW5kIHRvIGhlbHAgZGVidWdnaW5nIC5naXRpZ25vcmUgZmlsZXMgaGFzCisgICBiZWVuIGFkZGVkLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBjYW4gYmUgdXNlZCB0byByZXBsYXkgYSByb290IGNvbW1pdCB0byBhbiB1bmJvcm4KKyAgIGJyYW5jaC4KKworICogImdpdCBjb21taXQiIGNhbiBiZSB0b2xkIHRvIHVzZSAtLWNsZWFudXA9d2hpdGVzcGFjZSBieSBzZXR0aW5nIHRoZQorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjb21taXQuY2xlYW51cCB0byAnd2hpdGVzcGFjZScuCisKKyAqICJnaXQgZGlmZiIgYW5kIG90aGVyIFBvcmNlbGFpbiBjb21tYW5kcyBjYW4gYmUgdG9sZCB0byB1c2UgYQorICAgbm9uLXN0YW5kYXJkIGFsZ29yaXRobSBieSBzZXR0aW5nIGRpZmYuYWxnb3JpdGhtIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlLgorCisgKiAiZ2l0IGZldGNoIC0tbWlycm9yIiBhbmQgZmV0Y2ggdGhhdCB1c2VzIG90aGVyIGZvcm1zIG9mIHJlZnNwZWMKKyAgIHdpdGggd2lsZGNhcmQgdXNlZCB0byBhdHRlbXB0IHRvIHVwZGF0ZSBhIHN5bWJvbGljIHJlZiB0aGF0IG1hdGNoCisgICB0aGUgd2lsZGNhcmQgb24gdGhlIHJlY2VpdmluZyBlbmQsIHdoaWNoIG1hZGUgbGl0dGxlIHNlbnNlICh0aGUKKyAgIHJlYWwgcmVmIHRoYXQgaXMgcG9pbnRlZCBhdCBieSB0aGUgc3ltYm9saWMgcmVmIHdvdWxkIGJlIHVwZGF0ZWQKKyAgIGFueXdheSkuICBTeW1ib2xpYyByZWZzIG5vIGxvbmdlciBhcmUgYWZmZWN0ZWQgYnkgc3VjaCBhIGZldGNoLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbm93IGRldGVjdHMgbW9yZSBjYXNlcyBpbiB3aGljaCBhIHdob2xlIGJyYW5jaAorICAgaXMgYmVpbmcgZXhwb3J0ZWQsIGFuZCB1c2VzIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCwgd2hlbgorICAgYXNrZWQgdG8gd3JpdGUgYSBjb3ZlciBsZXR0ZXIgZm9yIHRoZSBzZXJpZXMuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkICItdiAkY291bnQiIG9wdGlvbiwgYW5kIHByZXBlbmRzIGEKKyAgIHN0cmluZyAidiRjb3VudC0iIHRvIHRoZSBuYW1lcyBvZiBpdHMgb3V0cHV0IGZpbGVzLCBhbmQgYWxzbworICAgYXV0b21hdGljYWxseSBzZXRzIHRoZSBzdWJqZWN0IHByZWZpeCB0byAiUEFUQ0ggdiRjb3VudCIuIFRoaXMKKyAgIGFsbG93cyBwYXRjaGVzIGZyb20gcmVyb2xsZWQgc2VyaWVzIHRvIGJlIHN0b3JlZCB1bmRlciBkaWZmZXJlbnQKKyAgIG5hbWVzIGFuZCBtYWtlcyBpdCBlYXNpZXIgdG8gcmV1c2UgY292ZXIgbGV0dGVyIG1lc3NhZ2VzLgorCisgKiAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgY2FuIGJlIHRvbGQgd2l0aCAtLXVzZS1tYWlsbWFwIG9wdGlvbiB0bworICAgcmV3cml0ZSB0aGUgbmFtZXMgYW5kIGVtYWlsIGFkZHJlc3NlcyBvZiBwZW9wbGUgdXNpbmcgdGhlIG1haWxtYXAKKyAgIG1lY2hhbmlzbS4KKworICogImdpdCBsb2cgLS1jYyAtLWdyYXBoIiBub3cgc2hvd3MgdGhlIGNvbWJpbmVkIGRpZmYgb3V0cHV0IHdpdGggdGhlCisgICBhbmNlc3RyeSBncmFwaC4KKworICogImdpdCBsb2cgLS1ncmVwPTxwYXR0ZXJuPiIgaG9ub3JzIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgdG8gbG9vaworICAgZm9yIHRoZSBwYXR0ZXJuIGFmdGVyIGZpeGluZyB0aGUgbG9nIG1lc3NhZ2UgdG8gdGhlIHNwZWNpZmllZAorICAgZW5jb2RpbmcuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBhbmQgImdpdCBkaWZmdG9vbCIgbGVhcm5lZCB0byBsaXN0IHRoZSBhdmFpbGFibGUKKyAgIHRvb2wgYmFja2VuZHMgaW4gYSBtb3JlIGNvbnNpc3RlbnQgbWFubmVyLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgaXMgYXdhcmUgb2YgVG9ydG9pc2VHaXRNZXJnZSBub3cgYW5kIHVzZXMgaXQgb3ZlcgorICAgVG9ydG9pc2VNZXJnZSB3aGVuIGF2YWlsYWJsZS4KKworICogImdpdCBwdXNoIiBub3cgcmVxdWlyZXMgIi1mIiB0byB1cGRhdGUgYSB0YWcsIGV2ZW4gaWYgaXQgaXMgYQorICAgZmFzdC1mb3J3YXJkLCBhcyB0YWdzIGFyZSBtZWFudCB0byBiZSBmaXhlZCBwb2ludHMuCisKKyAqIEVycm9yIG1lc3NhZ2VzIGZyb20gImdpdCBwdXNoIiB3aGVuIGl0IHN0b3BzIHRvIHByZXZlbnQgcmVtb3RlIHJlZnMKKyAgIGZyb20gZ2V0dGluZyBvdmVyd3JpdHRlbiBieSBtaXN0YWtlIGhhdmUgYmVlbiBpbXByb3ZlZCB0byBleHBsYWluCisgICB2YXJpb3VzIHNpdHVhdGlvbnMgc2VwYXJhdGVseS4KKworICogImdpdCBwdXNoIiB3aWxsIHN0b3Agd2l0aG91dCBkb2luZyBhbnl0aGluZyBpZiB0aGUgbmV3ICJwcmUtcHVzaCIKKyAgIGhvb2sgZXhpc3RzIGFuZCBleGl0cyB3aXRoIGEgZmFpbHVyZS4KKworICogV2hlbiAiZ2l0IHJlYmFzZSIgZmFpbHMgdG8gZ2VuZXJhdGUgcGF0Y2hlcyB0byBiZSBhcHBsaWVkIChlLmcuIGR1ZQorICAgdG8gb29tKSwgaXQgZmFpbGVkIHRvIGRldGVjdCB0aGUgZmFpbHVyZSBhbmQgaW5zdGVhZCBiZWhhdmVkIGFzIGlmCisgICB0aGVyZSB3ZXJlIG5vdGhpbmcgdG8gZG8uICBBIHdvcmthcm91bmQgdG8gdXNlIGEgdGVtcG9yYXJ5IGZpbGUgaGFzCisgICBiZWVuIGFwcGxpZWQsIGJ1dCB3ZSBwcm9iYWJseSB3b3VsZCB3YW50IHRvIHJldmlzaXQgdGhpcyBsYXRlciwgYXMKKyAgIGl0IGh1cnRzIHRoZSBjb21tb24gY2FzZSBvZiBub3QgZmFpbGluZyBhdCBhbGwuCisKKyAqIElucHV0IGFuZCBwcmVjb25kaXRpb25zIHRvICJnaXQgcmVzZXQiIGhhcyBiZWVuIGxvb3NlbmVkIHdoZXJlCisgICBhcHByb3ByaWF0ZS4gICJnaXQgcmVzZXQgJGZyb210cmVlIE1ha2VmaWxlIiByZXF1aXJlcyAkZnJvbXRyZWUgdG8KKyAgIGJlIGFueSB0cmVlIChpdCB1c2VkIHRvIHJlcXVpcmUgaXQgdG8gYmUgYSBjb21taXQpLCBmb3IgZXhhbXBsZS4KKyAgICJnaXQgcmVzZXQiICh3aXRob3V0IG9wdGlvbnMgb3IgcGFyYW1ldGVycykgdXNlZCB0byBlcnJvciBvdXQgd2hlbgorICAgeW91IGRvIG5vdCBoYXZlIGFueSBjb21taXRzIGluIHlvdXIgaGlzdG9yeSwgYnV0IGl0IG5vdyBnaXZlcyB5b3UKKyAgIGFuIGVtcHR5IGluZGV4ICh0byBtYXRjaCBub24tZXhpc3RlbnQgY29tbWl0IHlvdSBhcmUgbm90IGV2ZW4gb24pLgorCisgKiAiZ2l0IHN0YXR1cyIgc2F5cyB3aGF0IGJyYW5jaCBpcyBiZWluZyBiaXNlY3RlZCBvciByZWJhc2VkIHdoZW4KKyAgIGFibGUsIG5vdCBqdXN0ICJiaXNlY3RpbmciIG9yICJyZWJhc2luZyIuCisKKyAqICJnaXQgc3VibW9kdWxlIiBzdGFydGVkIGxlYXJuaW5nIGEgbmV3IG1vZGUgdG8gaW50ZWdyYXRlIHdpdGggdGhlCisgICB0aXAgb2YgdGhlIHJlbW90ZSBicmFuY2ggKGFzIG9wcG9zZWQgdG8gaW50ZWdyYXRpbmcgd2l0aCB0aGUgY29tbWl0CisgICByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0J3MgZ2l0bGluaykuCisKKyAqICJnaXQgdXBsb2FkLXBhY2siIHdoaWNoIGltcGxlbWVudHMgdGhlIHNlcnZpY2UgImxzLXJlbW90ZSIgYW5kCisgICAiZmV0Y2giIHRhbGsgdG8gY2FuIGJlIHRvbGQgdG8gaGlkZSByZWYgaGllcmFyY2hpZXMgdGhlIHNlcnZlcgorICAgc2lkZSBpbnRlcm5hbGx5IHVzZXMgKGFuZCB0aGF0IGNsaWVudHMgaGF2ZSBubyBidXNpbmVzcyBsZWFybmluZworICAgYWJvdXQpIHdpdGggdHJhbnNmZXIuaGlkZXJlZnMgY29uZmlndXJhdGlvbi4KKworCitGb3JlaWduIEludGVyZmFjZQorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBoYXMgYmVlbiB1cGRhdGVkIGZvciBpdHMgdXNlIGluIHRoZSBjb250ZXh0IG9mCisgICB0aGUgcmVtb3RlIGhlbHBlciBpbnRlcmZhY2UuCisKKyAqIEEgbmV3IHJlbW90ZSBoZWxwZXIgdG8gaW50ZXJhY3Qgd2l0aCBienIgaGFzIGJlZW4gYWRkZWQgdG8gY29udHJpYi8uCisKKyAqICJnaXQgcDQiIGdvdCB2YXJpb3VzIGJ1Z2ZpeGVzIGFyb3VuZCBpdHMgYnJhbmNoIGhhbmRsaW5nLiAgSXQgaXMKKyAgIGFsc28gbWFkZSB1c2FibGUgd2l0aCBQeXRob24gMi40LzIuNS4gIEluIGFkZGl0aW9uLCBpdHMgdmFyaW91cworICAgcG9ydGFiaWxpdHkgaXNzdWVzIGZvciBDeWd3aW4gaGF2ZSBiZWVuIGFkZHJlc3NlZC4KKworICogVGhlIHJlbW90ZSBoZWxwZXIgdG8gaW50ZXJhY3Qgd2l0aCBIZyBpbiBjb250cmliLyBoYXMgc2VlbiBhIGZldworICAgZml4ZXMuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBldGMuCisKKyAqICJnaXQgZnNjayIgaGFzIGJlZW4gdGF1Z2h0IHRvIGJlIHBpY2tpZXIgYWJvdXQgZW50cmllcyBpbiB0cmVlCisgICBvYmplY3RzIHRoYXQgc2hvdWxkIG5vdCBiZSB0aGVyZSwgZS5nLiAiLiIsICIuZ2l0IiwgYW5kICIuLiIuCisKKyAqIE1hdGNoaW5nIHBhdGhzIHdpdGggY29tbW9uIGZvcm1zIG9mIHBhdGhzcGVjcyB0aGF0IGNvbnRhaW4gd2lsZGNhcmQKKyAgIGNoYXJhY3RlcnMgaGFzIGJlZW4gb3B0aW1pemVkIGZ1cnRoZXIuCisKKyAqIFdlIHN0b3BwZWQgcGF5aW5nIGF0dGVudGlvbiB0byAkR0lUX0NPTkZJRyBlbnZpcm9ubWVudCB0aGF0IHBvaW50cworICAgYXQgYSBzaW5nbGUgY29uZmlndXJhdGlvbiBmaWxlIGZyb20gYW55IGNvbW1hbmQgb3RoZXIgdGhhbiAiZ2l0IGNvbmZpZyIKKyAgIHF1aXRlIGEgd2hpbGUgYWdvLCBidXQgImdpdCBjbG9uZSIgaW50ZXJuYWxseSBzZXQsIGV4cG9ydGVkLCBhbmQKKyAgIHRoZW4gdW5leHBvcnRlZCB0aGUgdmFyaWFibGUgZHVyaW5nIGl0cyBvcGVyYXRpb24gdW5uZWNlc3NhcmlseS4KKworICogImdpdCByZXNldCIgaW50ZXJuYWxzIGhhcyBiZWVuIHJld29ya2VkIGFuZCBzaG91bGQgYmUgZmFzdGVyIGluCisgICBnZW5lcmFsLiBXZSB0cmllZCB0byBiZSBjYXJlZnVsIG5vdCB0byBicmVhayBhbnkgYmVoYXZpb3VyIGJ1dAorICAgdGhlcmUgY291bGQgYmUgY29ybmVyIGNhc2VzLCBlc3BlY2lhbGx5IHdoZW4gcnVubmluZyB0aGUgY29tbWFuZAorICAgZnJvbSBhIGNvbmZsaWN0ZWQgc3RhdGUsIHRoYXQgd2UgbWF5IGhhdmUgbWlzc2VkLgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgImltYXAtc2VuZCIgaGFzIGJlZW4gdXBkYXRlZCB0byByZXVzZSB4bWwKKyAgIHF1b3RpbmcgY29kZSBmcm9tIGh0dHAtcHVzaCBjb2RlcGF0aCwgYW5kIGxvc3QgYSBsb3Qgb2YgdW51c2VkCisgICBjb2RlLgorCisgKiBUaGVyZSBpcyBhIHNpbXBsZS1taW5kZWQgY2hlY2tlciBmb3IgdGhlIHRlc3Qgc2NyaXB0cyBpbiB0LworICAgZGlyZWN0b3J5IHRvIGNhdGNoIG1vc3QgY29tbW9uIG1pc3Rha2VzIChpdCBpcyBub3QgZW5hYmxlZCBieQorICAgZGVmYXVsdCkuCisKKyAqIFlvdSBjYW4gYnVpbGQgd2l0aCBVU0VfV0lMRE1BVENIPVllc1BsZWFzZSB0byB1c2UgYSByZXBsYWNlbWVudAorICAgaW1wbGVtZW50YXRpb24gb2YgcGF0dGVybiBtYXRjaGluZyBsb2dpYyB1c2VkIGZvciBwYXRobmFtZS1saWtlCisgICB0aGluZ3MsIGUuZy4gcmVmbmFtZXMgYW5kIHBhdGhzIGluIHRoZSByZXBvc2l0b3J5LiAgVGhpcyBuZXcKKyAgIGltcGxlbWVudGF0aW9uIGlzIG5vdCBleHBlY3RlZCBjaGFuZ2UgdGhlIGV4aXN0aW5nIGJlaGF2aW91ciBvZiBHaXQKKyAgIGluIHRoaXMgcmVsZWFzZSwgZXhjZXB0IGZvciAiZ2l0IGZvci1lYWNoLXJlZiIgd2hlcmUgeW91IGNhbiBub3cKKyAgIHNheSAicmVmcy8qKi9tYXN0ZXIiIGFuZCBtYXRjaCB3aXRoIGJvdGggcmVmcy9oZWFkcy9tYXN0ZXIgYW5kCisgICByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3Rlci4gIFdlIHBsYW4gdG8gdXNlIHRoaXMgbmV3IGltcGxlbWVudGF0aW9uCisgICBpbiB3aWRlciBwbGFjZXMgKGUuZy4gImdpdCBscy1maWxlcyAnKiovTWFrZWZpbGUnIG1heSBmaW5kIE1ha2VmaWxlCisgICBhdCB0aGUgdG9wLWxldmVsLCBhbmQgImdpdCBsb2cgJyoqL3QqLnNoJyIgbWF5IGZpbmQgY29tbWl0cyB0aGF0CisgICB0b3VjaCBhIHNoZWxsIHNjcmlwdCB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoICJ0IiBhdCBhbnkgbGV2ZWwpIGluCisgICBmdXR1cmUgdmVyc2lvbnMgb2YgR2l0LCBidXQgd2UgYXJlIG5vdCB0aGVyZSB5ZXQuICBCeSBidWlsZGluZyB3aXRoCisgICBVU0VfV0lMRE1BVENILCB1c2luZyB0aGUgcmVzdWx0aW5nIEdpdCBkYWlseSBhbmQgcmVwb3J0aW5nIHdoZW4geW91CisgICBmaW5kIGJyZWFrYWdlcywgeW91IGNhbiBoZWxwIHVzIGdldCBjbG9zZXIgdG8gdGhhdCBnb2FsLgorCisgKiBTb21lIHJlaW1wbGVtZW50YXRpb25zIG9mIEdpdCBkbyBub3Qgd3JpdGUgYWxsIHRoZSBzdGF0IGluZm8gYmFjaworICAgdG8gdGhlIGluZGV4IGR1ZSB0byB0aGVpciBpbXBsZW1lbnRhdGlvbiBsaW1pdGF0aW9ucyAoZS5nLiBqZ2l0KS4KKyAgIEEgY29uZmlndXJhdGlvbiBvcHRpb24gY2FuIHRlbGwgR2l0IHRvIGlnbm9yZSBjaGFuZ2VzIHRvIG1vc3Qgb2YKKyAgIHRoZSBzdGF0IGZpZWxkcyBhbmQgb25seSBwYXkgYXR0ZW50aW9uIHRvIG10aW1lIGFuZCBzaXplLCB3aGljaAorICAgdGhlc2UgaW1wbGVtZW50YXRpb25zIGNhbiByZWxpYWJseSB1cGRhdGUuICBUaGlzIGNhbiBiZSB1c2VkIHRvCisgICBhdm9pZCBleGNlc3NpdmUgcmV2YWxpZGF0aW9uIG9mIGNvbnRlbnRzLgorCisgKiBTb21lIHBsYXRmb3JtcyBzaGlwIHdpdGggb2xkIHZlcnNpb24gb2YgZXhwYXQgd2hlcmUgeG1scGFyc2UuaAorICAgbmVlZHMgdG8gYmUgaW5jbHVkZWQgaW5zdGVhZCBvZiBleHBhdC5oOyB0aGUgYnVpbGQgcHJvY2VkdXJlIGhhcworICAgYmVlbiB0YXVnaHQgYWJvdXQgdGhpcy4KKworICogIm1ha2UgY2xlYW4iIG9uIHBsYXRmb3JtcyB0aGF0IGNhbm5vdCBjb21wdXRlIGhlYWRlciBkZXBlbmRlbmNpZXMKKyAgIG9uIHRoZSBmbHkgZGlkIG5vdCB3b3JrIHdpdGggaW1wbGVtZW50YXRpb25zIG9mICJybSIgdGhhdCBkbyBub3QKKyAgIGxpa2UgYW4gZW1wdHkgYXJndW1lbnQgbGlzdC4KKworQWxzbyBjb250YWlucyBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjguMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjEuOC4xIGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSByZWxlYXNlIG5vdGVzIHRvIHRoZW0gZm9yCitkZXRhaWxzKS4KKworICogQW4gZWxlbWVudCBvbiBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyBsaXN0IHRoYXQgZG9lcyBub3QgbmFtZSB0aGUKKyAgIHJlYWwgcGF0aCB0byBhIGRpcmVjdG9yeSAoaS5lLiBhIHN5bWJvbGljIGxpbmspIGNvdWxkIGhhdmUgY2F1c2VkCisgICB0aGUgR0lUX0RJUiBkaXNjb3ZlcnkgbG9naWMgdG8gZXNjYXBlIHRoZSBjZWlsaW5nLgorCisgKiBXaGVuIGF0dGVtcHRpbmcgdG8gcmVhZCB0aGUgWERHLXN0eWxlICRIT01FLy5jb25maWcvZ2l0L2NvbmZpZyBhbmQKKyAgIGZpbmRpbmcgdGhhdCAkSE9NRS8uY29uZmlnL2dpdCBpcyBhIGZpbGUsIHdlIGdhdmUgYSB3cm9uZyBlcnJvcgorICAgbWVzc2FnZSwgaW5zdGVhZCBvZiB0cmVhdGluZyB0aGUgY2FzZSBhcyAiYSBjdXN0b20gY29uZmlnIGZpbGUgZG9lcworICAgbm90IGV4aXN0IHRoZXJlIiBhbmQgbW92aW5nIG9uLgorCisgKiBUaGUgYmVoYXZpb3VyIHZpc2libGUgdG8gdGhlIGVuZCB1c2VycyB3YXMgY29uZnVzaW5nLCB3aGVuIHRoZXkKKyAgIGF0dGVtcHQgdG8ga2lsbCBhIHByb2Nlc3Mgc3Bhd25lZCBpbiB0aGUgZWRpdG9yIHRoYXQgd2FzIGluIHR1cm4KKyAgIGxhdW5jaGVkIGJ5IEdpdCB3aXRoIFNJR0lOVCAob3IgU0lHUVVJVCksIGFzIEdpdCB3b3VsZCBjYXRjaCB0aGF0CisgICBzaWduYWwgYW5kIGRpZS4gIFdlIGlnbm9yZSB0aGVzZSBzaWduYWxzIG5vdy4KKyAgIChtZXJnZSAwMzk4ZmMzNCBwZi9lZGl0b3ItaWdub3JlLXNpZ2ludCBsYXRlciB0byBtYWludCkuCisKKyAqIEEgY2hpbGQgcHJvY2VzcyB0aGF0IHdhcyBraWxsZWQgYnkgYSBzaWduYWwgKGUuZy4gU0lHSU5UKSB3YXMKKyAgIHJlcG9ydGVkIGluIGFuIGluY29uc2lzdGVudCB3YXkgZGVwZW5kaW5nIG9uIGhvdyB0aGUgcHJvY2VzcyB3YXMKKyAgIHNwYXduZWQgYnkgdXMsIHdpdGggb3Igd2l0aG91dCBhIHNoZWxsIGluIGJldHdlZW4uCisKKyAqIEFmdGVyIGZhaWxpbmcgdG8gY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUgdXNpbmcgbWtzdGVtcCgpLCBmYWlsaW5nCisgICBwYXRobmFtZSB3YXMgbm90IHJlcG9ydGVkIGNvcnJlY3RseSBvbiBzb21lIHBsYXRmb3Jtcy4KKworICogV2UgdXNlZCB0byBzdHVmZiAidXNlckAiIGFuZCB0aGVuIGFwcGVuZCB3aGF0IHdlIHJlYWQgZnJvbQorICAgL2V0Yy9tYWlsbmFtZSB0byBjb21lIHVwIHdpdGggYSBkZWZhdWx0IGUtbWFpbCBpZGVudCwgYnV0IGEgYnVnCisgICBsb3N0IHRoZSAidXNlckAiIHBhcnQuCisKKyAqIFRoZSBhdHRyaWJ1dGUgbWVjaGFuaXNtIGRpZG4ndCBhbGxvdyBsaW1pdGluZyBhdHRyaWJ1dGVzIHRvIGJlCisgICBhcHBsaWVkIHRvIG9ubHkgYSBzaW5nbGUgZGlyZWN0b3J5IGl0c2VsZiB3aXRoICJwYXRoLyIgbGlrZSB0aGUKKyAgIGV4Y2x1ZGUgbWVjaGFuaXNtIGRvZXMuICBUaGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHRoYXQKKyAgIHdhcyBtZXJnZWQgdG8gJ21haW50JyBhbmQgMS44LjEuMiB3YXMgd2l0aCBhIHNldmVyZSBwZXJmb3JtYW5jZQorICAgZGVncmFkYXRpb25zIGFuZCBuZWVkcyB0byBtZXJnZSBhIGZpeC11cCB0b3BpYy4KKworICogVGhlIHNtYXJ0IEhUVFAgY2xpZW50cyBmb3Jnb3QgdG8gdmVyaWZ5IHRoZSBjb250ZW50LXR5cGUgdGhhdCBjb21lcworICAgYmFjayBmcm9tIHRoZSBzZXJ2ZXIgc2lkZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVxdWVzdCBpcyBiZWluZworICAgaGFuZGxlZCBwcm9wZXJseS4KKworICogImdpdCBhbSIgZGlkIG5vdCBwYXJzZSBkYXRlc3RhbXAgY29ycmVjdGx5IGZyb20gSGcgZ2VuZXJhdGVkIHBhdGNoLAorICAgd2hlbiBpdCBpcyBydW4gaW4gYSBsb2NhbGUgb3V0c2lkZSBDIChvciBlbikuCisKKyAqICJnaXQgYXBwbHkiIG1pc2JlaGF2ZWQgd2hlbiBmaXhpbmcgd2hpdGVzcGFjZSBicmVha2FnZXMgYnkgcmVtb3ZpbmcKKyAgIGV4Y2VzcyB0cmFpbGluZyBibGFuayBsaW5lcy4KKworICogImdpdCBhcHBseSAtLXN1bW1hcnkiIGhhcyBiZWVuIHRhdWdodCB0byBtYWtlIHN1cmUgdGhlIHNpbWlsYXJpdHkKKyAgIHZhbHVlIHNob3duIGluIGl0cyBvdXRwdXQgaXMgc2Vuc2libGUsIGV2ZW4gd2hlbiB0aGUgaW5wdXQgaGFkIGEKKyAgIGJvZ3VzIHZhbHVlLgorCisgKiBBIHRhciBhcmNoaXZlIGNyZWF0ZWQgYnkgImdpdCBhcmNoaXZlIiByZWNvcmRlZCBhIGRpcmVjdG9yeSBpbiBhCisgICB3YXkgdGhhdCBtYWRlIE5ldEJTRCdzIGltcGxlbWVudGF0aW9uIG9mICJ0YXIiIHNvbWV0aW1lcyB1bmhhcHB5LgorCisgKiAiZ2l0IGFyY2hpdmUiIGRpZCBub3QgcmVjb3JkIHVuY29tcHJlc3NlZCBzaXplIGluIHRoZSBoZWFkZXIgd2hlbgorICAgc3RyZWFtaW5nIGEgemlwIGFyY2hpdmUsIHdoaWNoIGNvbmZ1c2VkIHNvbWUgaW1wbGVtZW50YXRpb25zIG9mIHVuemlwLgorCisgKiAiZ2l0IGFyY2hpdmUiIGRpZCBub3QgcGFyc2UgY29uZmlndXJhdGlvbiB2YWx1ZXMgaW4gdGFyLiogbmFtZXNwYWNlCisgICBjb3JyZWN0bHkuCisgICAobWVyZ2UgYjM4NzNjMyBqay9jb25maWctcGFyc2luZy1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKworICogQXR0ZW1wdCB0byAiYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiIgYW4gZXhpc3RpbmcgYnJhbmNoLCB3aGlsZQorICAgYmVpbmcgb24gYSBkZXRhY2hlZCBIRUFELCBlcnJvcmVkIG91dC4KKworICogImdpdCBjbGVhbiIgc2hvd2VkIHdoYXQgaXQgd2FzIGdvaW5nIHRvIGRvLCBidXQgc29tZXRpbWVzIGVuZCB1cAorICAgZmluZGluZyB0aGF0IGl0IHdhcyBub3QgYWxsb3dlZCB0byBkbyBzbywgd2hpY2ggcmVzdWx0ZWQgaW4gYQorICAgY29uZnVzaW5nIG91dHB1dCAoZS5nLiBhZnRlciBzYXlpbmcgdGhhdCBpdCB3aWxsIHJlbW92ZSBhbgorICAgdW50cmFja2VkIGRpcmVjdG9yeSwgaXQgZm91bmQgYW4gZW1iZWRkZWQgZ2l0IHJlcG9zaXRvcnkgdGhlcmUKKyAgIHdoaWNoIGl0IGlzIG5vdCBhbGxvd2VkIHRvIHJlbW92ZSkuICBJdCBub3cgcGVyZm9ybXMgdGhlIGFjdGlvbnMKKyAgIGFuZCB0aGVuIHJlcG9ydHMgdGhlIG91dGNvbWUgbW9yZSBmYWl0aGZ1bGx5LgorCisgKiBXaGVuICJnaXQgY2xvbmUgLS1zZXBhcmF0ZS1naXQtZGlyPSRvdmVyX3RoZXJlIiBpcyBpbnRlcnJ1cHRlZCwgaXQKKyAgIGZhaWxlZCB0byByZW1vdmUgdGhlIHJlYWwgbG9jYXRpb24gb2YgdGhlICRHSVRfRElSIGl0IGNyZWF0ZWQuCisgICBUaGlzIHdhcyBtb3N0IHZpc2libGUgd2hlbiBpbnRlcnJ1cHRpbmcgYSBzdWJtb2R1bGUgdXBkYXRlLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgbWlzaGFuZGxlZCB0aW1lc3RhbXBzIGF0IERTVCBib3VuZGFyeS4KKworICogV2UgdXNlZCB0byBoYXZlIGFuIGFyYml0cmFyeSAzMiBsaW1pdCBmb3IgY29tYmluZWQgZGlmZiBpbnB1dCwKKyAgIHJlc3VsdGluZyBpbiBpbmNvcnJlY3QgbnVtYmVyIG9mIGxlYWRpbmcgY29sb25zIHNob3duIHdoZW4gc2hvd2luZworICAgdGhlICItLXJhdyAtLWNjIiBvdXRwdXQuCisKKyAqICJnaXQgZmV0Y2ggLS1kZXB0aCIgd2FzIGJyb2tlbiBpbiBhdCBsZWFzdCB0aHJlZSB3YXlzLiAgVGhlCisgICByZXN1bHRpbmcgaGlzdG9yeSB3YXMgZGVlcGVyIHRoYW4gc3BlY2lmaWVkIGJ5IG9uZSBjb21taXQsIGl0IHdhcworICAgdW5jbGVhciBob3cgdG8gd2lwZSB0aGUgc2hhbGxvd25lc3Mgb2YgdGhlIHJlcG9zaXRvcnkgd2l0aCB0aGUKKyAgIGNvbW1hbmQsIGFuZCBkb2N1bWVudGF0aW9uIHdhcyBtaXNsZWFkaW5nLgorICAgKG1lcmdlIGNmYjcwZTEgbmQvZmV0Y2gtZGVwdGgtaXMtYnJva2VuIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBsb2cgLS1hbGwgLXAiIHRoYXQgd2Fsa2VkIHJlZnMvbm90ZXMvdGV4dGNvbnYvIHJlZiBjYW4gbGF0ZXIKKyAgIHRyeSB0byB1c2UgdGhlIHRleHRjb252IGRhdGEgaW5jb3JyZWN0bHkgYWZ0ZXIgaXQgZ2V0cyBmcmVlZC4KKworICogV2UgZm9yZ290IHRvIGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmVhZGluZyBmcm9tICJncGciIG91dHB1dCwKKyAgIGtpbGxpbmcgImdpdCBsb2cgLS1zaG93LXNpZ25hdHVyZSIgb24gYSBsb25nIGhpc3RvcnkuCisKKyAqIFRoZSB3YXkgImdpdCBzdm4iIGFza2VkIGZvciBwYXNzd29yZCB1c2luZyBTU0hfQVNLUEFTUyBhbmQKKyAgIEdJVF9BU0tQQVNTIHdhcyBub3QgaW4gbGluZSB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uCisKKyAqIFRoZSAtLWdyYXBoIGNvZGUgZmVsbCBpbnRvIGluZmluaXRlIGxvb3Agd2hlbiBhc2tlZCB0byBkbyB3aGF0IHRoZQorICAgY29kZSBkaWQgbm90IGV4cGVjdC4KKworICogaHR0cCB0cmFuc3BvcnQgd2FzIHdyb25nIHRvIGFzayBmb3IgdGhlIHVzZXJuYW1lIHdoZW4gdGhlCisgICBhdXRoZW50aWNhdGlvbiBpcyBkb25lIGJ5IGNlcnRpZmljYXRlIGlkZW50aXR5LgorCisgKiAiZ2l0IHBhY2stcmVmcyIgdGhhdCByYW4gaW4gcGFyYWxsZWwgdG8gYW5vdGhlciBwcm9jZXNzIHRoYXQKKyAgIGNyZWF0ZWQgbmV3IHJlZnMgaGFkIGEgbmFzdHkgcmFjZS4KKworICogUmViYXNpbmcgdGhlIGhpc3Rvcnkgb2Ygc3VwZXJwcm9qZWN0IHdpdGggY2hhbmdlIGluIHRoZSBzdWJtb2R1bGUKKyAgIGhhcyBiZWVuIGJyb2tlbiBzaW5jZSB2MS43LjEyLgorCisgKiBBZnRlciAiZ2l0IGFkZCAtTiIgYW5kIHRoZW4gd3JpdGluZyBhIHRyZWUgb2JqZWN0IG91dCBvZiB0aGUKKyAgIGluZGV4LCB0aGUgY2FjaGUtdHJlZSBkYXRhIHN0cnVjdHVyZSBnb3QgY29ycnVwdGVkLgorCisgKiAiZ2l0IGNsb25lIiB1c2VkIHRvIGFsbG93IC0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyPSR0aGVyZQorICAgb3B0aW9ucyBhdCB0aGUgc2FtZSB0aW1lLCB3aGljaCB3YXMgbm9uc2Vuc2ljYWwuCisKKyAqICJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIiBsb3N0IGVtcHR5IG1lcmdlcyBpbiByZWNlbnQgdmVyc2lvbnMKKyAgIG9mIEdpdC4KKworICogImdpdCBtZXJnZSAtLW5vLWVkaXQiIGNvbXB1dGVkIHdobyB3ZXJlIGludm9sdmVkIGluIHRoZSB3b3JrIGRvbmUKKyAgIG9uIHRoZSBzaWRlIGJyYW5jaCwgZXZlbiB0aG91Z2ggdGhhdCBpbmZvcm1hdGlvbiBpcyB0byBiZSBkaXNjYXJkZWQKKyAgIHdpdGhvdXQgZ2V0dGluZyBzZWVuIGluIHRoZSBlZGl0b3IuCisKKyAqICJnaXQgbWVyZ2UiIHN0YXJ0ZWQgY2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vayBsaWtlICJnaXQKKyAgIGNvbW1pdCIgZG9lcyBzb21lIHRpbWUgYWdvLCBidXQgZm9yZ290IHRvIHBheSBhdHRlbnRpb24gdG8gdGhlIGV4aXQKKyAgIHN0YXR1cyBvZiB0aGUgaG9vay4KKworICogQSBmYWlsdXJlIHRvIHB1c2ggZHVlIHRvIG5vbi1mZiB3aGlsZSBvbiBhbiB1bmJvcm4gYnJhbmNoCisgICBkZXJlZmVyZW5jZWQgYSBOVUxMIHBvaW50ZXIgd2hlbiBzaG93aW5nIGFuIGVycm9yIG1lc3NhZ2UuCisKKyAqIFdoZW4gdXNlcnMgc3BlbGwgImNjOiIgaW4gbG93ZXJjYXNlIGluIHRoZSBmYWtlICJoZWFkZXIiIGluIHRoZQorICAgdHJhaWxlciBwYXJ0LCAiZ2l0IHNlbmQtZW1haWwiIGZhaWxlZCB0byBwaWNrIHVwIHRoZSBhZGRyZXNzZXMgZnJvbQorICAgdGhlcmUuIEFzIGUtbWFpbCBoZWFkZXJzIGZpZWxkIG5hbWVzIGFyZSBjYXNlIGluc2Vuc2l0aXZlLCB0aGlzCisgICBzY3JpcHQgc2hvdWxkIGZvbGxvdyBzdWl0IGFuZCB0cmVhdCAiY2M6IiBhbmQgIkNjOiIgdGhlIHNhbWUgd2F5LgorCisgKiBPdXRwdXQgZnJvbSAiZ2l0IHN0YXR1cyAtLWlnbm9yZWQiIHNob3dlZCBhbiB1bmV4cGVjdGVkIGludGVyYWN0aW9uCisgICB3aXRoICItLXVudHJhY2tlZCIuCisKKyAqICJnaXR3ZWIiLCB3aGVuIHNvcnRpbmcgYnkgYWdlIHRvIHNob3cgcmVwb3NpdG9yaWVzIHdpdGggbmV3CisgICBhY3Rpdml0aWVzIGZpcnN0LCB1c2VkIHRvIHNvcnQgcmVwb3NpdG9yaWVzIHdpdGggYWJzb2x1dGVseQorICAgbm90aGluZyBpbiBpdCBlYXJseSwgd2hpY2ggd2FzIG5vdCB2ZXJ5IHVzZWZ1bC4KKworICogImdpdHdlYiIncyBjb2RlIHRvIHNhbml0aXplIGNvbnRyb2wgY2hhcmFjdGVycyBiZWZvcmUgcGFzc2luZyBpdCB0bworICAgImhpZ2hsaWdodCIgZmlsdGVyIGxvc3Qga25vd24tdG8tYmUtc2FmZSBjb250cm9sIGNoYXJhY3RlcnMgYnkKKyAgIG1pc3Rha2UuCisKKyAqICJnaXR3ZWIiIHBhZ2VzIHNlcnZlZCBvdmVyIEhUVFBTLCB3aGVuIGNvbmZpZ3VyZWQgdG8gc2hvdyBwaWNvbiBvcgorICAgZ3JhdmF0YXIsIHJlZmVycmVkIHRvIHRoZXNlIGV4dGVybmFsIHJlc291cmNlcyB0byBiZSBmZXRjaGVkIHZpYQorICAgSFRUUCwgcmVzdWx0aW5nIGluIG1peGVkIGNvbnRlbnRzIHdhcm5pbmcgaW4gYnJvd3NlcnMuCisKKyAqIFdoZW4gYSBsaW5lIHRvIGJlIHdyYXBwZWQgaGFzIGEgc29saWQgcnVuIG9mIG5vbiBzcGFjZSBjaGFyYWN0ZXJzCisgICB3aG9zZSBsZW5ndGggZXhhY3RseSBpcyB0aGUgd3JhcCB3aWR0aCwgImdpdCBzaG9ydGxvZyAtdyIgZmFpbGVkCisgICB0byBhZGQgYSBuZXdsaW5lIGFmdGVyIHN1Y2ggYSBsaW5lLgorCisgKiBDb21tYW5kIGxpbmUgY29tcGxldGlvbiBsZWFrZWQgYW4gdW5uZWNlc3NhcnkgZXJyb3IgbWVzc2FnZSB3aGlsZQorICAgbG9va2luZyBmb3IgcG9zc2libGUgbWF0Y2hlcyB3aXRoIHBhdGhzIGluIDx0cmVlLWlzaD4uCisKKyAqIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIGZvciAidGNzaCIgZW1pdHRlZCBhbiB1bndhbnRlZCBzcGFjZQorICAgYWZ0ZXIgY29tcGxldGluZyBhIHNpbmdsZSBkaXJlY3RvcnkgbmFtZS4KKworICogQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gY29kZSB3YXMgaW5hZHZlcnRlbnRseSBtYWRlIGluY29tcGF0aWJsZSB3aXRoCisgICBvbGRlciB2ZXJzaW9ucyBvZiBiYXNoIGJ5IHVzaW5nIGEgbmV3ZXIgYXJyYXkgbm90YXRpb24uCisKKyAqICJnaXQgcHVzaCIgd2FzIHRhdWdodCB0byByZWZ1c2UgdXBkYXRpbmcgdGhlIGJyYW5jaCB0aGF0IGlzCisgICBjdXJyZW50bHkgY2hlY2tlZCBvdXQgbG9uZyB0aW1lIGFnbywgYnV0IHRoZSB1c2VyIG1hbnVhbCB3YXMgbGVmdAorICAgc3RhbGUuCisgICAobWVyZ2UgNTA5OTVlZCB3ay9tYW4tZGVueS1jdXJyZW50LWJyYW5jaC1pcy1kZWZhdWx0LXRoZXNlLWRheXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTb21lIHNoZWxscyBkbyBub3QgYmVoYXZlIGNvcnJlY3RseSB3aGVuIElGUyBpcyB1bnNldDsgd29yayBpdAorICAgYXJvdW5kIGJ5IGV4cGxpY2l0bHkgc2V0dGluZyBpdCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4KKworICogU29tZSBzY3JpcHRlZCBwcm9ncmFtcyB3cml0dGVuIGluIFB5dGhvbiBkaWQgbm90IGdldCB1cGRhdGVkIHdoZW4KKyAgIFBZVEhPTl9QQVRIIGNoYW5nZWQuCisgICAoY2hlcnJ5LXBpY2sgOTZhNDY0N2ZjYTU0MDMxOTc0Y2Q2YWQxIGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiBhdXRvY29uZiBpcyB1c2VkLCBhbnkgYnVpbGQgb24gYSBkaWZmZXJlbnQgY29tbWl0IGFsd2F5cyByYW4KKyAgICJjb25maWcuc3RhdHVzIC0tcmVjaGVjayIgZXZlbiB3aGVuIHVubmVjZXNzYXJ5LgorCisgKiBBIGZpeCB3YXMgYWRkZWQgdG8gdGhlIGJ1aWxkIHByb2NlZHVyZSB0byB3b3JrIGFyb3VuZCBidWdneQorICAgdmVyc2lvbnMgb2YgY2NhY2hlIGJyb2tlIHRoZSBhdXRvLWdlbmVyYXRpb24gb2YgZGVwZW5kZW5jaWVzLCB3aGljaAorICAgdW5mb3J0dW5hdGVseSBpcyBzdGlsbCByZWxldmFudCBiZWNhdXNlIHNvbWUgcGVvcGxlIHVzZSBhbmNpZW50CisgICBkaXN0cm9zLgorCisgKiBUaGUgYXV0b2NvbmYgc3Vic3lzdGVtIHBhc3NlZCAtLW1hbmRpciBkb3duIHRvIGdlbmVyYXRlZAorICAgY29uZmlnLm1hay5hdXRvZ2VuIGJ1dCBmb3Jnb3QgdG8gZG8gdGhlIHNhbWUgZm9yIC0taHRtbGRpci4KKyAgIChtZXJnZSA1NWQ5YmYwIGN0L2F1dG9jb25mLWh0bWxkaXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGNoYW5nZSBtYWRlIG9uIHYxLjguMS54IG1haW50ZW5hbmNlIHRyYWNrIGhhZCBhIG5hc3R5IHJlZ3Jlc3Npb24KKyAgIHRvIGJyZWFrIHRoZSBidWlsZCB3aGVuIGF1dG9jb25mIGlzIHVzZWQuCisgICAobWVyZ2UgN2YxYjY5NyBqbi9sZXNzLXJlY29uZmlndXJlIGxhdGVyIHRvIG1haW50KS4KKworICogV2UgaGF2ZSBiZWVuIGNhcnJ5aW5nIGEgdHJhbnNsYXRlZCBhbmQgbG9uZy11bm1haW50YWluZWQgY29weSBvZiBhbgorICAgb2xkIHZlcnNpb24gb2YgdGhlIHR1dG9yaWFsOyByZW1vdmVkLgorCisgKiB0MDA1MCBoYWQgdGVzdHMgZXhwZWN0aW5nIGZhaWx1cmVzIGZyb20gYSBidWcgdGhhdCB3YXMgZml4ZWQgc29tZQorICAgdGltZSBhZ28uCisKKyAqIHQ0MDE0LCB0OTUwMiBhbmQgdDAyMDAgdGVzdHMgaGFkIHZhcmlvdXMgcG9ydGFiaWxpdHkgaXNzdWVzIHRoYXQKKyAgIGJyb2tlIG9uIE9wZW5CU0QuCisKKyAqIHQ5MDIwIGFuZCB0MzYwMCB0ZXN0cyBoYWQgdmFyaW91cyBwb3J0YWJpbGl0eSBpc3N1ZXMuCisKKyAqIHQ5MjAwIHJ1bnMgImN2cyBpbml0IiBvbiBhIGRpcmVjdG9yeSB0aGF0IGFscmVhZHkgZXhpc3RzLCBidXQgYQorICAgcGxhdGZvcm0gY2FuIGNvbmZpZ3VyZSB0aGlzIGZhaWwgZm9yIHRoZSBjdXJyZW50IHVzZXIgKGUuZy4geW91CisgICBuZWVkIHRvIGJlIGluIHRoZSBjdnNhZG1pbiBncm91cCBvbiBOZXRCU0QgNi4wKS4KKworICogdDkwMjAgYW5kIHQ5ODEwIGhhZCBhIGZldyBub24tcG9ydGFibGUgc2hlbGwgc2NyaXB0IGNvbnN0cnVjdC4KKworICogU2NyaXB0cyB0byB0ZXN0IGJhc2ggY29tcGxldGlvbiB3YXMgaW5oZXJlbnRseSBmbGFreSBhcyBpdCB3YXMKKyAgIGFmZmVjdGVkIGJ5IHdoYXRldmVyIHJhbmRvbSB0aGluZ3MgdGhlIHVzZXIgbWF5IGhhdmUgb24gJFBBVEguCisKKyAqIEFuIGVsZW1lbnQgb24gR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgY291bGQgYmUgYSAibG9naWNhbCIgcGF0aG5hbWUKKyAgIHRoYXQgdXNlcyBhIHN5bWJvbGljIGxpbmsgdG8gcG9pbnQgYXQgc29tZXdoZXJlIGVsc2UgKGUuZy4gL2hvbWUvbWUKKyAgIHRoYXQgcG9pbnRzIGF0IC9uZXQvaG9zdC9leHBvcnQvaG9tZS9tZSwgYW5kIHRoZSBsYXR0ZXIgZGlyZWN0b3J5CisgICBpcyBhdXRvbW91bnRlZCkuIEVhcmxpZXIgd2hlbiBHaXQgc2F3IHN1Y2ggYSBwYXRobmFtZSBlLmcuIC9ob21lL21lCisgICBvbiB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgImNlaWxpbmciIG1lY2hhbmlzbSBkaWQgbm90IHRha2UKKyAgIGVmZmVjdC4gV2l0aCB0aGlzIHJlbGVhc2UgKHRoZSBmaXggaGFzIGFsc28gYmVlbiBtZXJnZWQgdG8gdGhlCisgICB2MS44LjEueCBtYWludGVuYW5jZSBzZXJpZXMpLCBlbGVtZW50cyBvbiBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUworICAgYXJlIGJ5IGRlZmF1bHQgY2hlY2tlZCBmb3Igc3VjaCBhbGlhc2luZyBjb21pbmcgZnJvbSBzeW1ib2xpYworICAgbGlua3MuIEFzIHRoaXMgbmVlZHMgdG8gYWN0dWFsbHkgcmVzb2x2ZSBzeW1ib2xpYyBsaW5rcyBmb3IgZWFjaAorICAgZWxlbWVudCBvbiB0aGUgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMsIHlvdSBjYW4gZGlzYWJsZSB0aGlzCisgICBtZWNoYW5pc20gZm9yIHNvbWUgZWxlbWVudHMgYnkgbGlzdGluZyB0aGVtIGFmdGVyIGFuIGVtcHR5IGVsZW1lbnQKKyAgIG9uIHRoZSBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUy4gZS5nLiBTZXR0aW5nIC9ob21lL21lOjovaG9tZS9oaW0gdG8KKyAgIEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTIG1ha2VzIEdpdCByZXNvbHZlIHN5bWJvbGljIGxpbmtzIGluCisgICAvaG9tZS9tZSB3aGVuIGNoZWNraW5nIGlmIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyB1bmRlciAvaG9tZS9tZSwKKyAgIGJ1dCBkb2VzIG5vdCBkbyBzbyBmb3IgL2hvbWUvaGltLgorICAgKG1lcmdlIDdlYzMwYWEgbWgvbWFpbnQtY2VpbC1hYnNvbHV0ZSBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODY2MzdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy4xLnR4dApAQCAtMCwwICsxLDE0IEBACitHaXQgdjEuOC4zLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogV2hlbiAkSE9NRSBpcyBtaXNjb25maWd1cmVkIHRvIHBvaW50IGF0IGFuIHVucmVhZGFibGUgZGlyZWN0b3J5LCB3ZQorICAgdXNlZCB0byBjb21wbGFpbiBhbmQgZGllLiBUaGUgY2hlY2sgaGFzIGJlZW4gbG9vc2VuZWQuCisKKyAqIEhhbmRsaW5nIG9mIG5lZ2F0aXZlIGV4Y2x1ZGUgcGF0dGVybiBmb3IgZGlyZWN0b3JpZXMgIiFkaXIiIHdhcworICAgYnJva2VuIGluIHRoZSB1cGRhdGUgdG8gdjEuOC4zLgorCitBbHNvIGNvbnRhaW5zIGEgaGFuZGZ1bCBvZiB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLCBkb2N1bWVudGF0aW9uCit1cGRhdGVzLCB1cGRhdGVzIHRvIHRoZSB0ZXN0IHN1aXRlLCBldGMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmFlMTQyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy4yLnR4dApAQCAtMCwwICsxLDU5IEBACitHaXQgdjEuOC4zLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC4zLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIENsb25pbmcgd2l0aCAiZ2l0IGNsb25lIC0tZGVwdGggTiIgd2hpbGUgZmV0Y2guZnNja29iamVjdHMgKG9yCisgICB0cmFuc2Zlci5mc2Nrb2JqZWN0cykgaXMgc2V0IHRvIHRydWUgZGlkIG5vdCB0ZWxsIHRoZSBjdXQtb2ZmCisgICBwb2ludHMgb2YgdGhlIHNoYWxsb3cgaGlzdG9yeSB0byB0aGUgcHJvY2VzcyB0aGF0IHZhbGlkYXRlcyB0aGUKKyAgIG9iamVjdHMgYW5kIHRoZSBoaXN0b3J5IHJlY2VpdmVkLCBjYXVzaW5nIHRoZSB2YWxpZGF0aW9uIHRvIGZhaWwuCisKKyAqICJnaXQgY2hlY2tvdXQgZm9vIiBEV0lNcyB0aGUgaW50ZW5kZWQgInVwc3RyZWFtIiBhbmQgdHVybnMgaXQgaW50bworICAgImdpdCBjaGVja291dCAtdCAtYiBmb28gcmVtb3Rlcy9vcmlnaW4vZm9vIi4gVGhpcyBjb2RlcGF0aCBoYXMgYmVlbgorICAgdXBkYXRlZCB0byBjb3JyZWN0bHkgdGFrZSBleGlzdGluZyByZW1vdGUgZGVmaW5pdGlvbnMgaW50byBhY2NvdW50LgorCisgKiAiZ2l0IGZldGNoIiBpbnRvIGEgc2hhbGxvdyByZXBvc2l0b3J5IGZyb20gYSByZXBvc2l0b3J5IHRoYXQgZG9lcworICAgbm90IGtub3cgYWJvdXQgdGhlIHNoYWxsb3cgYm91bmRhcnkgY29tbWl0cyAoZS5nLiBhIGRpZmZlcmVudCBmb3JrCisgICBmcm9tIHRoZSByZXBvc2l0b3J5IHRoZSBjdXJyZW50IHNoYWxsb3cgcmVwb3NpdG9yeSB3YXMgY2xvbmVkIGZyb20pCisgICBkaWQgbm90IHdvcmsgY29ycmVjdGx5LgorCisgKiAiZ2l0IHN1YnRyZWUiIChpbiBjb250cmliLykgaGFkIG9uZSBjb2RlcGF0aCB3aXRoIGxvb3NlIGVycm9yCisgICBjaGVja3MgdG8gbG9zZSBkYXRhIGF0IHRoZSByZW1vdGUgc2lkZS4KKworICogImdpdCBsb2cgLS1hbmNlc3RyeS1wYXRoIEEuLi5CIiBkaWQgbm90IHdvcmsgYXMgZXhwZWN0ZWQsIGFzIGl0IGRpZAorICAgbm90IHBheSBhdHRlbnRpb24gdG8gdGhlIGZhY3QgdGhhdCB0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuIEEgYW5kIEIKKyAgIHdhcyB0aGUgYm90dG9tIG9mIHRoZSByYW5nZSBiZWluZyBzcGVjaWZpZWQuCisKKyAqICJnaXQgZGlmZiAtYyAtcCIgd2FzIG5vdCBzaG93aW5nIGEgZGVsZXRlZCBsaW5lIGZyb20gYSBodW5rIHdoZW4KKyAgIGFub3RoZXIgaHVuayBpbW1lZGlhdGVseSBiZWdpbnMgd2hlcmUgdGhlIGVhcmxpZXIgb25lIGVuZHMuCisKKyAqICJnaXQgbWVyZ2UgQHstMX1+MjIiIHdhcyByZXdyaXR0ZW4gdG8gImdpdCBtZXJnZSBmcm90ekB7MX1+MjIiCisgICBpbmNvcnJlY3RseSB3aGVuIHlvdXIgcHJldmlvdXMgYnJhbmNoIHdhcyAiZnJvdHoiIChpdCBzaG91bGQgYmUKKyAgIHJld3JpdHRlbiB0byAiZ2l0IG1lcmdlIGZyb3R6fjIyIiBpbnN0ZWFkKS4KKworICogImdpdCBjb21taXQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC1tICcnIiBzaG91bGQgbm90IHN0YXJ0IGFuCisgICBlZGl0b3IuCisKKyAqICJnaXQgcHVzaCAtLVtuby1ddmVyaWZ5IiB3YXMgbm90IGRvY3VtZW50ZWQuCisKKyAqIEFuIGVudHJ5IGZvciAiZmlsZTovLyIgc2NoZW1lIGluIHRoZSBlbnVtZXJhdGlvbiBvZiBVUkwgdHlwZXMgR2l0CisgICBjYW4gdGFrZSBpbiB0aGUgSFRNTCBkb2N1bWVudGF0aW9uIHdhcyBtYWRlIGludG8gYSBjbGlja2FibGUgbGluaworICAgYnkgbWlzdGFrZS4KKworICogenNoIHByb21wdCBzY3JpcHQgdGhhdCBib3Jyb3dlZCBmcm9tIGJhc2ggcHJvbXB0IHNjcmlwdCBkaWQgbm90CisgICB3b3JrIGR1ZSB0byBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gYXJyYXkgdmFyaWFibGUgbm90YXRpb24gYmV0d2VlbgorICAgdGhlc2UgdHdvIHNoZWxscy4KKworICogVGhlIGJhc2ggcHJvbXB0IGNvZGUgKGluIGNvbnRyaWIvKSBkaXNwbGF5ZWQgdGhlIG5hbWUgb2YgdGhlIGJyYW5jaAorICAgYmVpbmcgcmViYXNlZCB3aGVuICJyZWJhc2UgLWkvLW0vLXAiIG1vZGVzIGFyZSBpbiB1c2UsIGJ1dCBub3QgdGhlCisgICBwbGFpbiB2YW5pbGxhICJyZWJhc2UiLgorCisgKiAiZ2l0IHB1c2ggJHRoZXJlIEhFQUQ6YnJhbmNoIiBkaWQgbm90IHJlc29sdmUgSEVBRCBlYXJseSBlbm91Z2gsIHNvCisgICBpdCB3YXMgZWFzeSB0byBmbGlwIGl0IGFyb3VuZCB3aGlsZSBwdXNoIGlzIHN0aWxsIGdvaW5nIG9uIGFuZCBwdXNoCisgICBvdXQgYSBicmFuY2ggdGhhdCB0aGUgdXNlciBkaWQgbm90IG9yaWdpbmFsbHkgaW50ZW5kZWQgd2hlbiB0aGUKKyAgIGNvbW1hbmQgd2FzIHN0YXJ0ZWQuCisKKyAqICJkaWZmdG9vbCAtLWRpci1kaWZmIiBkaWQgbm90IGNvcHkgYmFjayBjaGFuZ2VzIG1hZGUgYnkgdGhlCisgICBlbmQtdXNlciBpbiB0aGUgZGlmZiB0b29sIGJhY2tlbmQgdG8gdGhlIHdvcmtpbmcgdHJlZSBpbiBzb21lCisgICBjYXNlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYTRmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjMudHh0CkBAIC0wLDAgKzEsNDcgQEAKK0dpdCB2MS44LjMuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjMuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhcHBseSIgcGFyc2VkIHBhdGNoZXMgdGhhdCBhZGQgbmV3IGZpbGVzLCBnZW5lcmF0ZWQgYnkgcHJvZ3JhbXMKKyAgIG90aGVyIHRoYW4gR2l0LCBpbmNvcnJlY3RseS4gIFRoaXMgaXMgYW4gb2xkIGJyZWFrYWdlIGluIHYxLjcuMTEuCisKKyAqIE9sZGVyIGNVUkwgd2FudGVkIHBpZWNlIG9mIG1lbW9yeSB3ZSBjYWxsIGl0IHdpdGggdG8gYmUgc3RhYmxlLCBidXQKKyAgIHdlIHVwZGF0ZWQgdGhlIGF1dGggbWF0ZXJpYWwgYWZ0ZXIgaGFuZGluZyBpdCB0byBhIGNhbGwuCisKKyAqICJnaXQgcHVsbCIgaW50byBub3RoaW5nIHRyYXNoZWQgImxvY2FsIGNoYW5nZXMiIHRoYXQgd2VyZSBpbiB0aGUKKyAgIGluZGV4LgorCisgKiBNYW55ICJnaXQgc3VibW9kdWxlIiBvcGVyYXRpb25zIGRpZCBub3Qgd29yayBvbiBhIHN1Ym1vZHVsZSBhdCBhCisgICBwYXRoIHdob3NlIG5hbWUgaXMgbm90IGluIEFTQ0lJLgorCisgKiAiY2hlcnJ5LXBpY2siIGhhZCBhIHNtYWxsIGxlYWsgaW4gaXRzIGVycm9yIGNvZGVwYXRoLgorCisgKiBMb2dpYyB1c2VkIGJ5IGdpdC1zZW5kLWVtYWlsIHRvIHN1cHByZXNzIGNjIG1pc2hhbmRsZWQgbmFtZXMgbGlrZQorICAgIkEgVS4gVGhvciIgPGF1dGhvckBleGFtcGxlLnh6Piwgd2hlcmUgdGhlIGh1bWFuIHJlYWRhYmxlIHBhcnQKKyAgIG5lZWRzIHRvIGJlIHF1b3RlZCAodGhlIHVzZXIgaW5wdXQgbWF5IG5vdCBoYXZlIHRoZSBkb3VibGUgcXVvdGVzCisgICBhcm91bmQgdGhlIG5hbWUsIGFuZCBjb21wYXJpc29uIHdhcyBkb25lIGJldHdlZW4gcXVvdGVkIGFuZAorICAgdW5xdW90ZWQgc3RyaW5ncykuICBJdCBhbHNvIG1pc2hhbmRsZWQgbmFtZXMgdGhhdCBuZWVkIFJGQzIwNDcKKyAgIHF1b3RpbmcuCisKKyAqICJnaXR3ZWIiIGZvcmdvdCB0byBjbGVhciBhIGdsb2JhbCB2YXJpYWJsZSAkc2VhcmNoX3JlZ2V4cCB1cG9uIGVhY2gKKyAgIHJlcXVlc3QsIG1pc3Rha2VubHkgY2Fycnlpbmcgb3ZlciB0aGUgcHJldmlvdXMgc2VhcmNoIHRvIGEgbmV3IG9uZQorICAgd2hlbiB1c2VkIGFzIGEgcGVyc2lzdGVudCBDR0kuCisKKyAqIFRoZSB3aWxkbWF0Y2ggZW5naW5lIGRpZCBub3QgaG9ub3IgV01fQ0FTRUZPTEQgb3B0aW9uIGNvcnJlY3RseS4KKworICogImdpdCBsb2cgLWMgLS1mb2xsb3cgJHBhdGgiIHNlZ2ZhdWx0ZWQgdXBvbiBoaXR0aW5nIHRoZSBjb21taXQgdGhhdAorICAgcmVuYW1lZCB0aGUgJHBhdGggYmVpbmcgZm9sbG93ZWQuCisKKyAqIFdoZW4gYSByZWZsb2cgbm90YXRpb24gaXMgdXNlZCBmb3IgaW1wbGljaXQgImN1cnJlbnQgYnJhbmNoIiwKKyAgIGUuZy4gImdpdCBsb2cgQHt1fSIsIHdlIGRpZCBub3Qgc2F5IHdoaWNoIGJyYW5jaCBhbmQgd29yc2Ugc2FpZAorICAgImJyYW5jaCAnJyIgaW4gdGhlIGVycm9yIG1lc3NhZ2VzLgorCisgKiBNYWMgT1MgWCBkb2VzIG5vdCBsaWtlIHRvIHdyaXRlKDIpIG1vcmUgdGhhbiBJTlRfTUFYIG51bWJlciBvZgorICAgYnl0ZXM7IHdvcmsgaXQgYXJvdW5kIGJ5IGNob3BwaW5nIHdyaXRlKDIpIGludG8gc21hbGxlciBwaWVjZXMuCisKKyAqIE5ld2VyIE1hY09TIFggZW5jb3VyYWdlcyB0aGUgcHJvZ3JhbXMgdG8gY29tcGlsZSBhbmQgbGluayB3aXRoCisgICB0aGVpciBDb21tb25DcnlwdG8sIG5vdCB3aXRoIE9wZW5TU0wuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmYxMDZlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy40LnR4dApAQCAtMCwwICsxLDIwIEBACitHaXQgdjEuOC4zLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyB1cGRhdGUgaXMgbW9zdGx5IHRvIHByb3BhZ2F0ZSBkb2N1bWVudGF0aW9uIGZpeGVzIGFuZCB0ZXN0Cit1cGRhdGVzIGZyb20gdGhlIG1hc3RlciBmcm9udCBiYWNrIHRvIHRoZSBtYWludGVuYW5jZSB0cmFjay4KKworRml4ZXMgc2luY2UgdjEuOC4zLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBiaXNlY3QgbG9nIGxpc3RlZCBpbmNvcnJlY3QgY29tbWl0cyB3aGVuIGJpc2VjdGlvbiBlbmRzIHdpdGgKKyAgIG9ubHkgc2tpcHBlZCBvbmVzLgorCisgKiBUaGUgdGVzdCBjb3ZlcmFnZSBmcmFtZXdvcmsgd2FzIGxlZnQgYnJva2VuIGZvciBzb21lIHRpbWUuCisKKyAqIFRoZSB0ZXN0IHN1aXRlIGZvciBIVFRQIHRyYW5zcG9ydCBkaWQgbm90IHJ1biB3aXRoIEFwYWNoZSAyLjQuCisKKyAqICJnaXQgZGlmZiIgdXNlZCB0byBmYWlsIHdoZW4gY29yZS5zYWZlY3JsZiBpcyBzZXQgYW5kIHRoZSB3b3JraW5nCisgICB0cmVlIGNvbnRlbnRzIGhhZCBtaXhlZCBDUkxGL0xGIGxpbmUgZW5kaW5ncy4gQ29tbWl0dGluZyBzdWNoIGEKKyAgIGNvbnRlbnQgbXVzdCBiZSBwcm9oaWJpdGVkLCBidXQgImdpdCBkaWZmIiBzaG91bGQgaGVscCB0aGUgdXNlciB0bworICAgbG9jYXRlIGFuZCBmaXggc3VjaCBwcm9ibGVtcyB3aXRob3V0IGZhaWxpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZDU2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLnR4dApAQCAtMCwwICsxLDQzNiBAQAorR2l0IHYxLjguMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcyAoZm9yIEdpdCAyLjApCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiAiZ2l0IHB1c2ggWyR0aGVyZV0iIGRvZXMgbm90IHNheSB3aGF0IHRvIHB1c2gsIHdlIGhhdmUgdXNlZCB0aGUKK3RyYWRpdGlvbmFsICJtYXRjaGluZyIgc2VtYW50aWNzIHNvIGZhciAoYWxsIHlvdXIgYnJhbmNoZXMgd2VyZSBzZW50Cit0byB0aGUgcmVtb3RlIGFzIGxvbmcgYXMgdGhlcmUgYWxyZWFkeSBhcmUgYnJhbmNoZXMgb2YgdGhlIHNhbWUgbmFtZQorb3ZlciB0aGVyZSkuICBJbiBHaXQgMi4wLCB0aGUgZGVmYXVsdCB3aWxsIGNoYW5nZSB0byB0aGUgInNpbXBsZSIKK3NlbWFudGljcyB0aGF0IHB1c2hlcyBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgYnJhbmNoIHdpdGggdGhlIHNhbWUKK25hbWUsIGFuZCBvbmx5IHdoZW4gdGhlIGN1cnJlbnQgYnJhbmNoIGlzIHNldCB0byBpbnRlZ3JhdGUgd2l0aCB0aGF0CityZW1vdGUgYnJhbmNoLiAgVXNlIHRoZSB1c2VyIHByZWZlcmVuY2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorInB1c2guZGVmYXVsdCIgdG8gY2hhbmdlIHRoaXMuICBJZiB5b3UgYXJlIGFuIG9sZC10aW1lciB3aG8gaXMgdXNlZAordG8gdGhlICJtYXRjaGluZyIgc2VtYW50aWNzLCB5b3UgY2FuIHNldCB0aGUgdmFyaWFibGUgdG8gIm1hdGNoaW5nIgordG8ga2VlcCB0aGUgdHJhZGl0aW9uYWwgYmVoYXZpb3VyLiAgSWYgeW91IHdhbnQgdG8gbGl2ZSBpbiB0aGUgZnV0dXJlCitlYXJseSwgeW91IGNhbiBzZXQgaXQgdG8gInNpbXBsZSIgdG9kYXkgd2l0aG91dCB3YWl0aW5nIGZvciBHaXQgMi4wLgorCitXaGVuICJnaXQgYWRkIC11IiAoYW5kICJnaXQgYWRkIC1BIikgaXMgcnVuIGluc2lkZSBhIHN1YmRpcmVjdG9yeSBhbmQKK2RvZXMgbm90IHNwZWNpZnkgd2hpY2ggcGF0aHMgdG8gYWRkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGl0Cit3aWxsIG9wZXJhdGUgb24gdGhlIGVudGlyZSB0cmVlIGluIEdpdCAyLjAgZm9yIGNvbnNpc3RlbmN5Cit3aXRoICJnaXQgY29tbWl0IC1hIiBhbmQgb3RoZXIgY29tbWFuZHMuICBUaGVyZSB3aWxsIGJlIG5vCittZWNoYW5pc20gdG8gbWFrZSBwbGFpbiAiZ2l0IGFkZCAtdSIgYmVoYXZlIGxpa2UgImdpdCBhZGQgLXUgLiIuCitDdXJyZW50IHVzZXJzIG9mICJnaXQgYWRkIC11IiAod2l0aG91dCBhIHBhdGhzcGVjKSBzaG91bGQgc3RhcnQKK3RyYWluaW5nIHRoZWlyIGZpbmdlcnMgdG8gZXhwbGljaXRseSBzYXkgImdpdCBhZGQgLXUgLiIKK2JlZm9yZSBHaXQgMi4wIGNvbWVzLiAgQSB3YXJuaW5nIGlzIGlzc3VlZCB3aGVuIHRoZXNlIGNvbW1hbmRzIGFyZQorcnVuIHdpdGhvdXQgYSBwYXRoc3BlYyBhbmQgd2hlbiB5b3UgaGF2ZSBsb2NhbCBjaGFuZ2VzIG91dHNpZGUgdGhlCitjdXJyZW50IGRpcmVjdG9yeSwgYmVjYXVzZSB0aGUgYmVoYXZpb3VyIGluIEdpdCAyLjAgd2lsbCBiZSBkaWZmZXJlbnQKK2Zyb20gdG9kYXkncyB2ZXJzaW9uIGluIHN1Y2ggYSBzaXR1YXRpb24uCisKK0luIEdpdCAyLjAsICJnaXQgYWRkIDxwYXRoPiIgd2lsbCBiZWhhdmUgYXMgImdpdCBhZGQgLUEgPHBhdGg+Iiwgc28KK3RoYXQgImdpdCBhZGQgZGlyLyIgd2lsbCBub3RpY2UgcGF0aHMgeW91IHJlbW92ZWQgZnJvbSB0aGUgZGlyZWN0b3J5CithbmQgcmVjb3JkIHRoZSByZW1vdmFsLiAgVmVyc2lvbnMgYmVmb3JlIEdpdCAyLjAsIGluY2x1ZGluZyB0aGlzCityZWxlYXNlLCB3aWxsIGtlZXAgaWdub3JpbmcgcmVtb3ZhbHMsIGJ1dCB0aGUgdXNlcnMgd2hvIHJlbHkgb24gdGhpcworYmVoYXZpb3VyIGFyZSBlbmNvdXJhZ2VkIHRvIHN0YXJ0IHVzaW5nICJnaXQgYWRkIC0taWdub3JlLXJlbW92YWwgPHBhdGg+Igorbm93IGJlZm9yZSAyLjAgaXMgcmVsZWFzZWQuCisKKworVXBkYXRlcyBzaW5jZSB2MS44LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvcmVpZ24gaW50ZXJmYWNlCisKKyAqIHJlbW90ZS1oZyBhbmQgcmVtb3RlLWJ6ciBoZWxwZXJzIChpbiBjb250cmliLyBzaW5jZSB2MS44LjIpIGhhdmUKKyAgIGJlZW4gdXBkYXRlZDsgZXNwZWNpYWxseSwgdGhlIGxhdHRlciBoYXMgYmVlbiBkb25lIGluIGFuCisgICBhY2NlbGVyYXRlZCBzY2hlZHVsZSAocmVhZDogd2UgbWF5IG5vdCBoYXZlIG1lcmdlZCB0byB0aGlzIHJlbGVhc2UKKyAgIGlmIHdlIHdlcmUgZm9sbG93aW5nIHRoZSB1c3VhbCAiY29vayBzdWZmaWNpZW50bHkgaW4gbmV4dCBiZWZvcmUKKyAgIHVubGVhc2hpbmcgaXQgdG8gdGhlIHdvcmxkIiB3b3JrZmxvdykgaW4gb3JkZXIgdG8gaGVscCBFbWFjcyBmb2xrcywKKyAgIHdob3NlIHByaW1hcnkgU0NNIHNlZW1zIHRvIGJlIHN0YWduYXRpbmcuCisKKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEEgaGFuZGZ1bCBvZiB1cGRhdGVzIGFwcGxpZWQgdG8gZ2l0aywgaW5jbHVkaW5nIGFuIGFkZGl0aW9uIG9mCisgICAicmV2ZXJ0IiBhY3Rpb24sIHNob3dpbmcgZGF0ZXMgaW4gdGFncyBpbiBhIG5pY2VyIHdheSwgbWFraW5nCisgICBjb2xvcnMgY29uZmlndXJhYmxlLCBhbmQgc3VwcG9ydCBmb3IgLUcncGlja2F4ZScgc2VhcmNoLgorCisgKiBUaGUgcHJvbXB0IHN0cmluZyBnZW5lcmF0b3IgKGluIGNvbnRyaWIvY29tcGxldGlvbi8pIGxlYXJuZWQgdG8KKyAgIHNob3cgaG93IG1hbnkgY2hhbmdlcyB0aGVyZSBhcmUgaW4gdG90YWwgYW5kIGhvdyBtYW55IGhhdmUgYmVlbgorICAgcmVwbGF5ZWQgZHVyaW5nIGEgImdpdCByZWJhc2UiIHNlc3Npb24uCisKKyAqICJnaXQgYnJhbmNoIC0tdnYiIGxlYXJuZWQgdG8gcGFpbnQgdGhlIG5hbWUgb2YgdGhlIGJyYW5jaCBpdAorICAgaW50ZWdyYXRlcyB3aXRoIGluIGEgZGlmZmVyZW50IGNvbG9yIChjb2xvci5icmFuY2gudXBzdHJlYW0sCisgICB3aGljaCBkZWZhdWx0cyB0byBibHVlKS4KKworICogSW4gYSBzcGFyc2VseSBwb3B1bGF0ZWQgd29ya2luZyB0cmVlLCAiZ2l0IGNoZWNrb3V0IDxwYXRoc3BlYz4iIG5vCisgICBsb25nZXIgdW5tYXJrcyBwYXRocyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBwYXRoc3BlYyB0aGF0IHdlcmUKKyAgIG9yaWdpbmFsbHkgaWdub3JlZCB3aXRoICItLXNwYXJzZSIgKHVzZSAtLWlnbm9yZS1za2lwLXdvcmt0cmVlLWJpdHMKKyAgIG9wdGlvbiB0byByZXN1cnJlY3QgdGhlc2UgcGF0aHMgb3V0IG9mIHRoZSBpbmRleCBpZiB5b3UgcmVhbGx5IHdhbnQKKyAgIHRvKS4KKworICogImdpdCBsb2cgLS1mb3JtYXQiIHNwZWNpZmllciBsZWFybmVkICVDKGF1dG8pIHRva2VuIHRoYXQgdGVsbHMgR2l0CisgICB0byB1c2UgY29sb3Igd2hlbiBpbnRlcnBvbGF0aW5nICVkIChkZWNvcmF0aW9uKSwgJWggKHNob3J0IGNvbW1pdAorICAgb2JqZWN0IG5hbWUpLCBldGMuIGZvciB0ZXJtaW5hbCBvdXRwdXQuCisKKyAqICJnaXQgYmlzZWN0IiBsZWF2ZXMgdGhlIGZpbmFsIG91dGNvbWUgYXMgYSBjb21tZW50IGluIGl0cyBiaXNlY3QKKyAgIGxvZyBmaWxlLgorCisgKiAiZ2l0IGNsb25lIC0tcmVmZXJlbmNlIiBjYW4gbm93IHJlZmVyIHRvIGEgZ2l0ZmlsZSAidGV4dHVhbCBzeW1saW5rIgorICAgdGhhdCBwb2ludHMgYXQgdGhlIHJlYWwgbG9jYXRpb24gb2YgdGhlIHJlcG9zaXRvcnkuCisKKyAqICJnaXQgY291bnQtb2JqZWN0cyIgbGVhcm5lZCAiLS1odW1hbi1yZWFkYWJsZSIgYWthICItSCIgb3B0aW9uIHRvCisgICBzaG93IHZhcmlvdXMgbGFyZ2UgbnVtYmVycyBpbiBLaS9NaS9HaUIgc2NhbGVkIGFzIG5lY2Vzc2FyeS4KKworICogImdpdCBjaGVycnktcGljayAkYmxvYiIgYW5kICJnaXQgY2hlcnJ5LXBpY2sgJHRyZWUiIGFyZSBub25zZW5zZSwKKyAgIGFuZCBhIG1vcmUgcmVhZGFibGUgZXJyb3IgbWVzc2FnZSBlLmcuICJjYW4ndCBjaGVycnktcGljayBhIHRyZWUiCisgICBpcyBnaXZlbiAod2UgdXNlZCB0byBzYXkgImV4cGVjdGVkIGV4YWN0bHkgb25lIGNvbW1pdCIpLgorCisgKiBUaGUgIi0tYW5ub3RhdGUiIG9wdGlvbiB0byAiZ2l0IHNlbmQtZW1haWwiIGNhbiBiZSB0dXJuZWQgb24gKG9yCisgICBvZmYpIGJ5IGRlZmF1bHQgd2l0aCBzZW5kZW1haWwuYW5ub3RhdGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoeW91CisgICBjYW4gdXNlIC0tbm8tYW5ub3RhdGUgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHRvIG92ZXJyaWRlIGl0KS4KKworICogVGhlICItLWNvdmVyLWxldHRlciIgb3B0aW9uIHRvICJnaXQgZm9ybWF0LXBhdGNoIiBjYW4gYmUgdHVybmVkIG9uCisgICAob3Igb2ZmKSBieSBkZWZhdWx0IHdpdGggZm9ybWF0LmNvdmVyTGV0dGVyIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlLiBCeSBzZXR0aW5nIGl0IHRvICdhdXRvJywgeW91IGNhbiB0dXJuIGl0IG9uIG9ubHkgZm9yIGEKKyAgIHNlcmllcyB3aXRoIHR3byBvciBtb3JlIHBhdGNoZXMuCisKKyAqIFRoZSBiYXNoIGNvbXBsZXRpb24gc3VwcG9ydCAoaW4gY29udHJpYi8pIGxlYXJuZWQgdGhhdCBjaGVycnktcGljaworICAgdGFrZXMgYSBmZXcgbW9yZSBvcHRpb25zIHRoYW4gaXQgYWxyZWFkeSBrbmV3IGFib3V0LgorCisgKiAiZ2l0IGhlbHAiIGxlYXJuZWQgIi1nIiBvcHRpb24gdG8gc2hvdyB0aGUgbGlzdCBvZiBndWlkZXMganVzdCBsaWtlCisgICBsaXN0IG9mIGNvbW1hbmRzIGFyZSBnaXZlbiB3aXRoICItYSIuCisKKyAqIEEgdHJpYW5ndWxhciAicHVsbCBmcm9tIG9uZSBwbGFjZSwgcHVzaCB0byBhbm90aGVyIHBsYWNlIiB3b3JrZmxvdworICAgaXMgc3VwcG9ydGVkIGJldHRlciBieSBuZXcgcmVtb3RlLnB1c2hkZWZhdWx0IChvdmVycmlkZXMgdGhlCisgICAib3JpZ2luIiB0aGluZykgYW5kIGJyYW5jaC4qLnB1c2hyZW1vdGUgKG92ZXJyaWRlcyB0aGUKKyAgIGJyYW5jaC4qLnJlbW90ZSkgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisKKyAqICJnaXQgc3RhdHVzIiBsZWFybmVkIHRvIHJlcG9ydCB0aGF0IHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhCisgICByZXZlcnQgc2Vzc2lvbiwganVzdCBsaWtlIGl0IGRvZXMgZm9yIGEgY2hlcnJ5LXBpY2sgYW5kIGEgYmlzZWN0CisgICBzZXNzaW9uLgorCisgKiBUaGUgaGFuZGxpbmcgYnkgImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8iIGFnYWluc3QgdmFyaW91cyBmb3JtcworICAgb2YgZXJyb25lb3VzIGlucHV0cyB3YXMgc3Vib3B0aW1hbCBhbmQgaGFzIGJlZW4gaW1wcm92ZWQuCisKKyAqIFdoZW4gdGhlIGludGVyYWN0aXZlIGFjY2VzcyB0byBnaXQtc2hlbGwgaXMgbm90IGVuYWJsZWQsIGl0IGlzc3VlcworICAgYSBtZXNzYWdlIG1lYW50IHRvIGhlbHAgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHRvIGVuYWJsZSBpdC4gIEFuCisgICBleHBsaWNpdCB3YXkgaGFzIGJlZW4gYWRkZWQgdG8gaXNzdWUgY3VzdG9tIG1lc3NhZ2VzIHRvIHJlZnVzZSBhbgorICAgYWNjZXNzIG92ZXIgdGhlIG5ldHdvcmsgdG8gaGVscCB0aGUgZW5kIHVzZXJzIHdobyBjb25uZWN0IHRvIHRoZQorICAgc2VydmljZSBleHBlY3RpbmcgYW4gaW50ZXJhY3RpdmUgc2hlbGwuCisKKyAqIEluIGFkZGl0aW9uIHRvIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyIGVkaXRzIHRoZSBsb2cgbWVzc2FnZSB3aXRoCisgICB0aGUgImUpZGl0IiBvcHRpb24gb2YgImFtIC1pIiwgcmVwbGFjZSB0aGUgIkFwcGx5aW5nOiB0aGlzIHBhdGNoIgorICAgbWVzc2FnZSB3aXRoIHRoZSBmaW5hbCBsb2cgbWVzc2FnZSBjb250ZW50cyBhZnRlciBhcHBseW1zZyBob29rCisgICBtdW5nZXMgaXQuCisKKyAqICJnaXQgc3RhdHVzIiBzdWdnZXN0cyB1c2VycyB0byBsb29rIGludG8gdXNpbmcgLS11bnRyYWNrZWQ9bm8gb3B0aW9uCisgICB3aGVuIGl0IHRha2VzIHRvbyBsb25nLgorCisgKiAiZ2l0IHN0YXR1cyIgc2hvd3MgYSBiaXQgbW9yZSBpbmZvcm1hdGlvbiBkdXJpbmcgYSByZWJhc2UvYmlzZWN0CisgICBzZXNzaW9uLgorCisgKiAiZ2l0IGZldGNoIiBsZWFybmVkIHRvIGZldGNoIGEgY29tbWl0IGF0IHRoZSB0aXAgb2YgYW4gdW5hZHZlcnRpc2VkCisgICByZWYgYnkgc3BlY2lmeWluZyBhIHJhdyBvYmplY3QgbmFtZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUgd2hlbiB0aGUKKyAgIHNlcnZlciBzaWRlIHN1cHBvcnRzIHRoaXMgZmVhdHVyZS4KKworICogT3V0cHV0IGZyb20gImdpdCBsb2cgLS1ncmFwaCIgd29ya3MgYmV0dGVyIHdpdGggc3VibW9kdWxlIGxvZworICAgb3V0cHV0IG5vdy4KKworICogImdpdCBjb3VudC1vYmplY3RzIC12IiBsZWFybmVkIHRvIHJlcG9ydCBsZWZ0b3ZlciB0ZW1wb3JhcnkKKyAgIHBhY2tmaWxlcyBhbmQgb3RoZXIgZ2FyYmFnZSBpbiB0aGUgb2JqZWN0IHN0b3JlLgorCisgKiBBIG5ldyByZWFkLW9ubHkgY3JlZGVudGlhbCBoZWxwZXIgKGluIGNvbnRyaWIvKSB0byBpbnRlcmFjdCB3aXRoCisgICB0aGUgLm5ldHJjLy5hdXRoaW5mbyBmaWxlcyBoYXMgYmVlbiBhZGRlZC4KKworICogImdpdCBzZW5kLWVtYWlsIiBjYW4gYmUgdXNlZCB3aXRoIHRoZSBjcmVkZW50aWFsIGhlbHBlciBzeXN0ZW0uCisKKyAqIFRoZXJlIHdhcyBubyBQb3JjZWxhaW4gd2F5IHRvIHNheSAiSSBubyBsb25nZXIgYW0gaW50ZXJlc3RlZCBpbgorICAgdGhpcyBzdWJtb2R1bGUiLCBvbmNlIHlvdSBleHByZXNzIHlvdXIgaW50ZXJlc3QgaW4gYSBzdWJtb2R1bGUgd2l0aAorICAgInN1Ym1vZHVsZSBpbml0Ii4gICJzdWJtb2R1bGUgZGVpbml0IiBpcyB0aGUgd2F5IHRvIGRvIHNvLgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UiIGxlYXJuZWQgdG8gcGFzcyAiLXYvLXEiIG9wdGlvbnMgdG8gdW5kZXJseWluZworICAgImdpdCByZWJhc2UiLgorCisgKiBUaGUgbmV3ICItLWZvbGxvdy10YWdzIiBvcHRpb24gdGVsbHMgImdpdCBwdXNoIiB0byBwdXNoIHJlbGV2YW50CisgICBhbm5vdGF0ZWQgdGFncyB3aGVuIHB1c2hpbmcgYnJhbmNoZXMgb3V0LgorCisgKiAiZ2l0IG1lcmdlIiBhbmQgImdpdCBwdWxsIiBjYW4gb3B0aW9uYWxseSBiZSB0b2xkIHRvIGluc3BlY3QgYW5kCisgICByZWplY3Qgd2hlbiBtZXJnaW5nIGEgY29tbWl0IHRoYXQgZG9lcyBub3QgY2FycnkgYSB0cnVzdGVkIEdQRworICAgc2lnbmF0dXJlLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgbm93IGZlZWRzIGZpbGVzIHRvIHRoZSAicDRtZXJnZSIgYmFja2VuZCBpbiB0aGUKKyAgIG9yZGVyIHRoYXQgbWF0Y2hlcyB0aGUgcDQgY29udmVudGlvbiwgd2hlcmUgInRoZWlycyIgaXMgdXN1YWxseQorICAgc2hvd24gb24gdGhlIGxlZnQgc2lkZSwgd2hpY2ggaXMgdGhlIG9wcG9zaXRlIGZyb20gd2hhdCBvdGhlciBiYWNrZW5kcworICAgZXhwZWN0LgorCisgKiAic2hvdy9sb2ciIG5vdyBob25vcnMgZ3BnLnByb2dyYW0gY29uZmlndXJhdGlvbiBqdXN0IGxpa2Ugb3RoZXIKKyAgIHBhcnRzIG9mIHRoZSBjb2RlIHRoYXQgdXNlIEdudVBHLgorCisgKiAiZ2l0IGxvZyIgdGhhdCBzaG93cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBwYXJlbnQgYW5kIHRoZQorICAgY2hpbGQgaGFzIGJlZW4gb3B0aW1pemVkIHNvbWV3aGF0LgorCisgKiAiZ2l0IGRpZmZ0b29sIiBhbGxvd3MgdGhlIHVzZXIgdG8gd3JpdGUgaW50byB0aGUgdGVtcG9yYXJ5IGZpbGVzCisgICBiZWluZyBzaG93bjsgaWYgdGhlIHVzZXIgbWFrZXMgY2hhbmdlcyB0byB0aGUgd29ya2luZyB0cmVlIGF0IHRoZQorICAgc2FtZSB0aW1lLCBpdCBub3cgcmVmcmFpbnMgZnJvbSBvdmVyd3JpdGluZyB0aGUgY29weSBpbiB0aGUgd29ya2luZworICAgdHJlZSBhbmQgbGVhdmVzIHRoZSB0ZW1wb3JhcnkgZmlsZSBzbyB0aGF0IGNoYW5nZXMgY2FuIGJlIG1lcmdlZAorICAgbWFudWFsbHkuCisKKyAqIFRoZXJlIHdhcyBubyBnb29kIHdheSB0byBhc2sgIkkgaGF2ZSBhIHJhbmRvbSBzdHJpbmcgdGhhdCBjYW1lIGZyb20KKyAgIG91dHNpZGUgd29ybGQuIEkgd2FudCB0byB0dXJuIGl0IGludG8gYSA0MC1oZXggb2JqZWN0IG5hbWUgd2hpbGUKKyAgIG1ha2luZyBzdXJlIHN1Y2ggYW4gb2JqZWN0IGV4aXN0cyIuICBBIG5ldyBwZWVsaW5nIHN1ZmZpeCBee29iamVjdH0KKyAgIGNhbiBiZSB1c2VkIGZvciB0aGF0IHB1cnBvc2UsIHRvZ2V0aGVyIHdpdGggInJldi1wYXJzZSAtLXZlcmlmeSIuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBldGMuCisKKyAqIFVwZGF0ZXMgZm9yIGJ1aWxkaW5nIHVuZGVyIG1zdmMuCisKKyAqIEEgaGFuZGZ1bCBvZiBpc3N1ZXMgaW4gdGhlIGNvZGUgdGhhdCB0cmF2ZXJzZXMgdGhlIHdvcmtpbmcgdHJlZSB0byBmaW5kCisgICB1bnRyYWNrZWQgYW5kL29yIGlnbm9yZWQgZmlsZXMgaGF2ZSBiZWVuIGZpeGVkLCBhbmQgdGhlIGdlbmVyYWwKKyAgIGNvZGVwYXRoIGludm9sdmVkIGluICJzdGF0dXMgLXUiIGFuZCAiY2xlYW4iIGhhdmUgYmVlbiBjbGVhbmVkIHVwCisgICBhbmQgb3B0aW1pemVkLgorCisgKiBUaGUgc3RhY2sgZm9vdHByaW50IG9mIHNvbWUgY29kZXBhdGhzIHRoYXQgYWNjZXNzIGFuIG9iamVjdCBmcm9tIGEKKyAgIHBhY2sgaGFzIGJlZW4gc2hydW5rLgorCisgKiBUaGUgbG9naWMgdG8gY29hbGVzY2UgdGhlIHNhbWUgbGluZXMgcmVtb3ZlZCBmcm9tIHRoZSBwYXJlbnRzIGluCisgICB0aGUgb3V0cHV0IGZyb20gImRpZmYgLWMvLS1jYyIgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHdpdGggTyhuXjIpCisgICBjb21wbGV4aXR5LCBzbyB0aGlzIG1pZ2h0IHR1cm4gb3V0IHRvIGJlIHVuZGVzaXJhYmxlLgorCisgKiBUaGUgY29kZSB0byBlbmZvcmNlIHBlcm1pc3Npb24gYml0cyBvbiBmaWxlcyBpbiAkR0lUX0RJUi8gZm9yCisgICBzaGFyZWQgcmVwb3NpdG9yaWVzIGhhcyBiZWVuIHNpbXBsaWZpZWQuCisKKyAqIEEgZmV3IGNvZGVwYXRocyBrbm93IGhvdyBtdWNoIGRhdGEgdGhleSBuZWVkIHRvIHB1dCBpbiB0aGUKKyAgIGhhc2h0YWJsZXMgdGhleSB1c2Ugd2hlbiB0aGV5IHN0YXJ0LCBidXQgc3RpbGwgYmVnYW4gd2l0aCBzbWFsbCB0YWJsZXMKKyAgIGFuZCByZXBlYXRlZGx5IGdyZXcgYW5kIHJlaGFzaGVkIHRoZW0uCisKKyAqIFRoZSBBUEkgdG8gd2FsayByZWZsb2cgZW50cmllcyBmcm9tIHRoZSBsYXRlc3QgdG8gb2xkZXIsIHdoaWNoIHdhcworICAgbmVjZXNzYXJ5IGZvciBvcGVyYXRpb25zIHN1Y2ggYXMgImdpdCBjaGVja291dCAtIiwgd2FzIGN1bWJlcnNvbWUKKyAgIHRvIHVzZSBjb3JyZWN0bHkgYW5kIGFsc28gaW5lZmZpY2llbnQuCisKKyAqIENvZGVwYXRocyB0aGF0IGluc3BlY3QgbG9nLW1lc3NhZ2UtdG8tYmUgYW5kIGRlY2lkZSB3aGVuIHRvIGFkZCBhCisgICBuZXcgU2lnbmVkLW9mZi1ieSBsaW5lIGluIHZhcmlvdXMgY29tbWFuZHMgaGF2ZSBiZWVuIGNvbnNvbGlkYXRlZC4KKworICogVGhlIHBrdC1saW5lIEFQSSwgaW1wbGVtZW50YXRpb24gYW5kIGl0cyBjYWxsZXJzIGhhdmUgYmVlbiBjbGVhbmVkCisgICB1cCB0byBtYWtlIHRoZW0gbW9yZSByb2J1c3QuCisKKyAqIFRoZSBDeWd3aW4gcG9ydCBoYXMgYSBmYXN0ZXItYnV0LWx5aW5nIGxzdGF0KDIpIGVtdWxhdGlvbiB3aG9zZQorICAgaW5jb3JyZWN0bmVzcyBkb2VzIG5vdCBtYXR0ZXIgaW4gcHJhY3RpY2UgZXhjZXB0IGZvciBhIGZldworICAgY29kZXBhdGhzLCBhbmQgc2V0dGluZyBwZXJtaXNzaW9uIGJpdHMgb24gZGlyZWN0b3JpZXMgaXMgYSBjb2RlcGF0aAorICAgdGhhdCBuZWVkcyB0byB1c2UgYSBtb3JlIGNvcnJlY3Qgb25lLgorCisgKiAiZ2l0IGNoZWNrb3V0IiBoYWQgcmVwZWF0ZWQgcGF0aHNwZWMgbWF0Y2hlcyBvbiB0aGUgc2FtZSBwYXRocywKKyAgIHdoaWNoIGhhdmUgYmVlbiBjb25zb2xpZGF0ZWQuICBBbHNvIGEgYnVnIGluICJnaXQgY2hlY2tvdXQgZGlyLyIKKyAgIHRoYXQgaXMgc3RhcnRlZCBmcm9tIGFuIHVubWVyZ2VkIGluZGV4IGhhcyBiZWVuIGZpeGVkLgorCisgKiBBIGZldyBidWdmaXhlcyB0byAiZ2l0IHJlcmVyZSIgd29ya2luZyBvbiBjb3JuZXIgY2FzZSBtZXJnZQorICAgY29uZmxpY3RzIGhhdmUgYmVlbiBhcHBsaWVkLgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjguMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjEuOC4yIGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSByZWxlYXNlIG5vdGVzIHRvIHRoZW0gZm9yCitkZXRhaWxzKS4KKworICogUmVjZW50IHZlcnNpb25zIG9mIEZpbGU6OlRlbXAgKHVzZWQgYnkgImdpdCBzdm4iKSBzdGFydGVkIGJsb3dpbmcKKyAgIHVwIHdoZW4gaXRzIHRlbXBmaWxlIHN1YiBpcyBjYWxsZWQgYXMgYSBjbGFzcyBtZXRob2Q7IHVwZGF0ZWQgdGhlCisgICBjYWxsc2l0ZSB0byBjYWxsIGl0IGFzIGEgcGxhaW4gdmFuaWxsYSBmdW5jdGlvbiB0byBmaXggaXQuCisgICAobWVyZ2UgZWFmYzJkZCBoYi9naXQtcG0tdGVtcGZpbGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBWYXJpb3VzIHN1YmNvbW1hbmRzIG9mICJnaXQgcmVtb3RlIiBzaW1wbHkgaWdub3JlZCBleHRyYW5lb3VzCisgICBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGluc3RlYWQgb2YgZGlhZ25vc2luZyB0aGVtIGFzIGVycm9ycy4KKworICogV2hlbiByZWNlaXZlLXBhY2sgZGV0ZWN0cyBhbiBlcnJvciBpbiB0aGUgcGFjayBoZWFkZXIgaXQgcmVjZWl2ZWQgaW4KKyAgIG9yZGVyIHRvIGRlY2lkZSB3aGljaCBvZiB1bnBhY2stb2JqZWN0cyBvciBpbmRleC1wYWNrIHRvIHJ1biwgaXQKKyAgIHJldHVybmVkIHdpdGhvdXQgY2xvc2luZyB0aGUgZXJyb3Igc3RyZWFtLCB3aGljaCBsZWQgdG8gYSBodW5nCisgICBzaWRlYmFuZCB0aHJlYWQuCisKKyAqIFpzaCBjb21wbGV0aW9uIGZvcmdvdCB0aGF0IHRoZSAnJScgY2hhcmFjdGVyIHVzZWQgdG8gc2lnbmFsIHVudHJhY2tlZAorICAgZmlsZXMgbmVlZHMgdG8gYmUgZXNjYXBlZCB3aXRoIGFub3RoZXIgJyUnLgorCisgKiBBIGNvbW1pdCBvYmplY3Qgd2hvc2UgYXV0aG9yIG9yIGNvbW1pdHRlciBpZGVudCBhcmUgbWFsZm9ybWVkCisgICBjcmFzaGVkIHNvbWUgY29kZSB0aGF0IHRydXN0ZWQgdGhhdCBhIG5hbWUsIGFuIGVtYWlsIGFuZCBhCisgICB0aW1lc3RhbXAgY2FuIGFsd2F5cyBiZSBmb3VuZCBpbiBpdC4KKworICogV2hlbiAidXBsb2FkLXBhY2siIGZhaWxzIHdoaWxlIGdlbmVyYXRpbmcgYSBwYWNrIGluIHJlc3BvbnNlIHRvCisgICAiZ2l0IGZldGNoIiAob3IgImdpdCBjbG9uZSIpLCB0aGUgcmVjZWl2aW5nIHNpZGUgaGFkCisgICBhIHByb2dyYW1taW5nIGVycm9yIHRoYXQgdHJpZ2dlcmVkIHRoZSBkaWUgaGFuZGxlcgorICAgcmVjdXJzaXZlbHkuCisKKyAqICJyZXYtbGlzdCAtLXN0ZGluIiBhbmQgZnJpZW5kcyBrZXB0IGJvZ3VzIHBvaW50ZXJzIGludG8gdGhlIGlucHV0CisgICBidWZmZXIgYXJvdW5kIGFzIGh1bWFuIHJlYWRhYmxlIG9iamVjdCBuYW1lcy4gIFRoaXMgd2FzIG5vdCBhIGh1Z2UKKyAgIHByb2JsZW0gYnV0IHdhcyBleHBvc2VkIGJ5IGEgbmV3IGNoYW5nZSB0aGF0IHVzZXMgdGhlc2UgbmFtZXMgaW4KKyAgIGVycm9yIG91dHB1dC4KKworICogU21hcnQtY2FwYWJsZSBIVFRQIHNlcnZlcnMgd2VyZSBub3QgcmVzdHJpY3RlZCB2aWEgdGhlCisgICBHSVRfTkFNRVNQQUNFIG1lY2hhbmlzbSB3aGVuIHRhbGtpbmcgd2l0aCBjb21taXQtd2Fsa2luZyBjbGllbnRzLAorICAgbGlrZSB0aGV5IGFyZSB3aGVuIHRhbGtpbmcgd2l0aCBzbWFydCBIVFRQIGNsaWVudHMuCisgICAobWVyZ2UgNjEzMGY4NiBqay9odHRwLWR1bWItbmFtZXNwYWNlcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2UtdHJlZSIgZGlkIG5vdCBvbWl0IGEgbWVyZ2UgcmVzdWx0IHRoYXQgaXMgaWRlbnRpY2FsIHRvCisgICB0aGUgIm91ciIgc2lkZSBpbiBjZXJ0YWluIGNhc2VzLgorICAgKG1lcmdlIGFhY2VjYzMgamsvbWVyZ2UtdHJlZS1hZGRlZC1pZGVudGljYWxseSBsYXRlciB0byBtYWludCkuCisKKyAqIFBlcmwgc2NyaXB0cyBsaWtlICJnaXQtc3ZuIiBjbG9zZWQgKGluc3RlYWQgb2YgcmVkaXJlY3RpbmcgdG8gL2Rldi9udWxsKQorICAgdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSwgd2hpY2ggaXMgbm90IGEgdmVyeSBzbWFydCB0aGluZyB0byBkby4KKyAgIEEgbGF0ZXIgb3BlbiBtYXkgcmV0dXJuIGZpbGUgZGVzY3JpcHRvciAjMiBmb3IgYW4gdW5yZWxhdGVkIHB1cnBvc2UsIGFuZAorICAgZXJyb3IgcmVwb3J0aW5nIGNvZGUgbWF5IHdyaXRlIGludG8gaXQuCisKKyAqICJnaXQgc2hvdy1icmFuY2giIHdhcyBub3QgcHJlcGFyZWQgdG8gc2hvdyBhIHZlcnkgbG9uZyBydW4gb2YKKyAgIGFuY2VzdG9yIG9wZXJhdG9ycyBlLmcuIGZvb2Jhcl4yfjJeMl4yXjIuLi5eMn40IGNvcnJlY3RseS4KKworICogImdpdCBkaWZmIC0tZGlmZi1hbGdvcml0aG0gYWxnbyIgaXMgYWxzbyB1bmRlcnN0b29kIGFzICJnaXQgZGlmZgorICAgLS1kaWZmLWFsZ29yaXRobT1hbGdvIi4KKworICogVGhlIG5ldyBjb3JlLmNvbW1lbnRjaGFyIGNvbmZpZ3VyYXRpb24gd2FzIG5vdCBhcHBsaWVkIGluIGEgZmV3CisgICBwbGFjZXMuCisKKyAqICJnaXQgYnVuZGxlIiBlcnJvbmVvdXNseSBiYWlsZWQgb3V0IHdoZW4gcGFyc2luZyBhIHZhbGlkIGJ1bmRsZQorICAgY29udGFpbmluZyBhIHByZXJlcXVpc2l0ZSBjb21taXQgd2l0aG91dCBhIGNvbW1pdCBtZXNzYWdlLgorCisgKiAiZ2l0IGxvZyAtUy8tRyIgc3RhcnRlZCBwYXlpbmcgYXR0ZW50aW9uIHRvIHRleHRjb252IGZpbHRlciwgYnV0CisgICB0aGVyZSB3YXMgbm8gd2F5IHRvIGRpc2FibGUgdGhpcy4gIE1ha2UgaXQgaG9ub3IgdGhlIC0tbm8tdGV4dGNvbnYKKyAgIG9wdGlvbi4KKworICogV2hlbiB1c2VkIHdpdGggdGhlICItZCB0ZW1wb3JhcnktZGlyZWN0b3J5IiBvcHRpb24sICJnaXQgZmlsdGVyLWJyYW5jaCIKKyAgIGZhaWxlZCB0byBjb21lIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHdvcmtpbmcgdHJlZSB0byBwZXJmb3JtIHRoZQorICAgZmluYWwgY2xlYW4tdXAgcHJvY2VkdXJlLgorCisgKiAiZ2l0IG1lcmdlICQoZ2l0IHJldi1wYXJzZSB2MS44LjIpIiBiZWhhdmVkIHF1aXRlIGRpZmZlcmVudGx5IGZyb20KKyAgICJnaXQgbWVyZ2UgdjEuOC4yIiwgYXMgaWYgdjEuOC4yIHdlcmUgd3JpdHRlbiBhcyB2MS44LjJeMCBhbmQgZGlkCisgICBub3QgcGF5IG11Y2ggYXR0ZW50aW9uIHRvIHRoZSBhbm5vdGF0ZWQgdGFnIHBheWxvYWQuICBNYWtlIHRoZSBjb2RlCisgICBub3RpY2UgdGhlIHR5cGUgb2YgdGhlIHRhZyBvYmplY3QsIGluIGFkZGl0aW9uIHRvIHRoZSBkd2ltX3JlZigpCisgICBiYXNlZCBjbGFzc2lmaWNhdGlvbiB0aGUgY3VycmVudCBjb2RlIHVzZXMgKGkuZS4gdGhlIG5hbWUgYXBwZWFycworICAgaW4gcmVmcy90YWdzLykgdG8gZGVjaWRlIHdoZW4gdG8gc3BlY2lhbC1jYXNlIHRhZyBtZXJnaW5nLgorCisgKiBGaXggYSAxLjguMS54IHJlZ3Jlc3Npb24gdGhhdCBzdG9wcGVkIG1hdGNoaW5nICJkaXIiICh3aXRob3V0IGEKKyAgIHRyYWlsaW5nIHNsYXNoKSB0byBhIGRpcmVjdG9yeSAiZGlyIi4KKworICogImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IiB3YXMgbm90IHByZXBhcmVkIHRvIHNlZSBhIGxpbmUgZ2V0dGluZworICAgbG9uZ2VyIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlcyAoZS5nLiB0YWItaW4taW5kZW50IGFrYSBQeXRob24pLgorCisgKiBUaGUgcHJvbXB0IHN0cmluZyBnZW5lcmF0b3IgKGluIGNvbnRyaWIvY29tcGxldGlvbi8pIGRpZCBub3Qgbm90aWNlCisgICB3aGVuIHdlIGFyZSBpbiBhIG1pZGRsZSBvZiBhICJnaXQgcmV2ZXJ0IiBzZXNzaW9uLgorCisgKiAic3VibW9kdWxlIHN1bW1hcnkgLS1zdW1tYXJ5LWxpbWl0IiBvcHRpb24gZGlkIG5vdCBzdXBwb3J0IHRoZQorICAgIi0tb3B0aW9uPXZhbHVlIiBmb3JtLgorCisgKiAiaW5kZXgtcGFjayAtLWZpeC10aGluIiB1c2VkIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgdG8gY29tcHV0ZQorICAgdGhlIGRlbHRhIGRlcHRocyBvZiBvYmplY3RzIGl0IGFwcGVuZHMgdG8gdGhlIHJlc3VsdGluZyBwYWNrLgorCisgKiAiaW5kZXgtcGFjayAtLXZlcmlmeS1zdGF0IiB1c2VkIGEgZmV3IGNvdW50ZXJzIG91dHNpZGUgdGhlIHByb3RlY3Rpb24KKyAgIG9mIGEgbXV0ZXgsIHBvc3NpYmx5IHNob3dpbmcgaW5jb3JyZWN0IG51bWJlcnMuCisKKyAqIFRoZSBjb2RlIHRvIGtlZXAgdHJhY2sgb2Ygd2hhdCBkaXJlY3RvcnkgbmFtZXMgYXJlIGtub3duIHRvIEdpdCBvbgorICAgcGxhdGZvcm1zIHdpdGggY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcyBjb3VsZCBnZXQgY29uZnVzZWQgdXBvbiBhCisgICBoYXNoIGNvbGxpc2lvbiBiZXR3ZWVuIHRoZXNlIHBhdGhuYW1lcyBhbmQgd291bGQgbG9vcCBmb3JldmVyLgorCisgKiBBbm5vdGF0ZWQgdGFncyBvdXRzaWRlIHRoZSByZWZzL3RhZ3MvIGhpZXJhcmNoeSB3ZXJlIG5vdCBhZHZlcnRpc2VkCisgICBjb3JyZWN0bHkgdG8gbHMtcmVtb3RlIGFuZCBmZXRjaCB3aXRoIHJlY2VudCB2ZXJzaW9ucyBvZiBHaXQuCisKKyAqIFJlY2VudCBvcHRpbWl6YXRpb25zIGJyb2tlIHNoYWxsb3cgY2xvbmVzLgorCisgKiAiZ2l0IGNtZCAtLSAnOih0b3AnIiB3YXMgbm90IGRpYWdub3NlZCBhcyBhbiBpbnZhbGlkIHN5bnRheCwgYW5kCisgICBpbnN0ZWFkIHRoZSBwYXJzZXIga2VwdCByZWFkaW5nIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCisKKyAqICJnaXQgdGFnIC1mIDx0YWc+IiBhbHdheXMgc2FpZCAiVXBkYXRlZCB0YWcgJzx0YWc+JyIgZXZlbiB3aGVuCisgICBjcmVhdGluZyBhIG5ldyB0YWcgKGkuZS4gbmVpdGhlciBvdmVyd3JpdGluZyBub3IgdXBkYXRpbmcpLgorCisgKiAiZ2l0IHA0IiBkaWQgbm90IGJlaGF2ZSB3ZWxsIHdoZW4gdGhlIHBhdGggdG8gdGhlIHJvb3Qgb2YgdGhlIFA0CisgICBjbGllbnQgd2FzIG5vdCBpdHMgcmVhbCBwYXRoLgorICAgKG1lcmdlIGJiZDg0ODYgcHcvcDQtc3ltbGlua2VkLXJvb3QgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGFyY2hpdmUiIHJlcG9ydGVkIGEgZmFpbHVyZSB3aGVuIGFza2VkIHRvIGNyZWF0ZSBhbiBhcmNoaXZlIG91dAorICAgb2YgYW4gZW1wdHkgdHJlZS4gIEl0IGlzIG1vcmUgaW50dWl0aXZlIHRvIGdpdmUgYW4gZW1wdHkKKyAgIGFyY2hpdmUgYmFjayBpbiBzdWNoIGEgY2FzZS4KKworICogV2hlbiAiZm9ybWF0LXBhdGNoIiBxdW90ZWQgYSBub24tYXNjaWkgc3RyaW5nIGluIGhlYWRlciBmaWxlcywKKyAgIGl0IGluY29ycmVjdGx5IGFwcGxpZWQgcmZjMjA0NyBhbmQgY2hvcHBlZCBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4KKyAgIHRoZSBtaWRkbGUgb2YgdGhlIHN0cmluZy4KKworICogQW4gYWxpYXNlZCBjb21tYW5kIHNwYXduZWQgZnJvbSBhIGJhcmUgcmVwb3NpdG9yeSB0aGF0IGRvZXMgbm90IHNheQorICAgaXQgaXMgYmFyZSB3aXRoICJjb3JlLmJhcmUgPSB5ZXMiIHdhcyB0cmVhdGVkIGFzIG5vbi1iYXJlIGJ5IG1pc3Rha2UuCisKKyAqIEluICJnaXQgcmVmbG9nIGV4cGlyZSIsIHRoZSBSRUFDSEFCTEUgYml0IHdhcyBub3QgY2xlYXJlZCBmcm9tIHRoZQorICAgY29ycmVjdCBvYmplY3RzLgorCisgKiBUaGUgbG9naWMgdXNlZCBieSAiZ2l0IGRpZmYgLU0gLS1zdGF0IiB0byBzaG9ydGVuIHRoZSBuYW1lcyBvZgorICAgZmlsZXMgYmVmb3JlIGFuZCBhZnRlciBhIHJlbmFtZSBkaWQgbm90IHdvcmsgY29ycmVjdGx5IHdoZW4gdGhlCisgICBjb21tb24gcHJlZml4IGFuZCBzdWZmaXggYmV0d2VlbiB0aGUgdHdvIGZpbGVuYW1lcyBvdmVybGFwcGVkLgorCisgKiBUaGUgIi0tbWF0Y2g9PHBhdHRlcm4+IiBvcHRpb24gb2YgImdpdCBkZXNjcmliZSIsIHdoZW4gdXNlZCB3aXRoCisgICAiLS1hbGwiIHRvIGFsbG93IHJlZnMgdGhhdCBhcmUgbm90IGFubm90YXRlZCB0YWdzIHRvIGJlIGEKKyAgIGJhc2Ugb2YgZGVzY3JpcHRpb24sIGRpZCBub3QgcmVzdHJpY3QgdGhlIG91dHB1dCBmcm9tIHRoZSBjb21tYW5kCisgICB0byB0aG9zZSByZWZzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHBhdHRlcm4uCisKKyAqIENsYXJpZnkgaW4gdGhlIGRvY3VtZW50YXRpb24gIndoYXQiIGdldHMgcHVzaGVkIHRvICJ3aGVyZSIgd2hlbiB0aGUKKyAgIGNvbW1hbmQgbGluZSB0byAiZ2l0IHB1c2giIGRvZXMgbm90IHNheSB0aGVzZSBleHBsaWNpdGx5LgorCisgKiBUaGUgIi0tY29sb3I9PHdoZW4+IiBhcmd1bWVudCB0byB0aGUgY29tbWFuZHMgaW4gdGhlIGRpZmYgZmFtaWx5CisgICB3YXMgZGVzY3JpYmVkIHBvb3JseS4KKworICogVGhlIGFyZ3VtZW50cyBnaXZlbiB0byB0aGUgcHJlLXJlYmFzZSBob29rIHdlcmUgbm90IGRvY3VtZW50ZWQuCisKKyAqIFRoZSB2NCBpbmRleCBmb3JtYXQgd2FzIG5vdCBkb2N1bWVudGVkLgorCisgKiBUaGUgIi0tbWF0Y2g9PHBhdHRlcm4+IiBhcmd1bWVudCAiZ2l0IGRlc2NyaWJlIiB0YWtlcyB1c2VzIGdsb2IKKyAgIHBhdHRlcm4gYnV0IGl0IHdhc24ndCBvYnZpb3VzIGZyb20gdGhlIGRvY3VtZW50YXRpb24uCisKKyAqIFNvbWUgc291cmNlcyBmYWlsZWQgdG8gY29tcGlsZSBvbiBzeXN0ZW1zIHRoYXQgbGFjayBOSV9NQVhIT1NUIGluCisgICB0aGVpciBzeXN0ZW0gaGVhZGVyIChlLmcuIHovT1MpLgorCisgKiBBZGQgYW4gZXhhbXBsZSB1c2Ugb2YgIi0tZW52LWZpbHRlciIgaW4gImZpbHRlci1icmFuY2giCisgICBkb2N1bWVudGF0aW9uLgorCisgKiAiZ2l0IGJ1bmRsZSB2ZXJpZnkiIGRpZCBub3Qgc2F5ICJyZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeSIgZm9yIGEKKyAgIGJ1bmRsZSB0aGF0IGRvZXMgbm90IGhhdmUgYW55IHByZXJlcXVpc2l0ZXMuCisKKyAqIEluIHRoZSB2MS44LjAgZXJhLCB3ZSBjaGFuZ2VkIHN5bWJvbHMgdGhhdCBkbyBub3QgaGF2ZSB0byBiZSBnbG9iYWwKKyAgIHRvIGZpbGUgc2NvcGUgc3RhdGljLCBidXQgYSBmZXcgZnVuY3Rpb25zIGluIGdyYXBoLmMgd2VyZSB1c2VkIGJ5CisgICBDR2l0IHNpZGV3YXlzLCBieXBhc3NpbmcgdGhlIGVudHJ5IHBvaW50cyBvZiB0aGUgQVBJIHRoZQorICAgaW4tdHJlZSB1c2VycyB1c2UuCisKKyAqICJnaXQgdXBkYXRlLWluZGV4IC1oIiBkaWQgbm90IGRvIHRoZSB1c3VhbCAiLWgoZWxwKSIgdGhpbmcuCisKKyAqICJnaXQgaW5kZXgtcGFjayIgaGFkIGEgYnVmZmVyLW92ZXJmbG93IHdoaWxlIHByZXBhcmluZyBhbgorICAgaW5mb3JtYXRpb25hbCBtZXNzYWdlIHdoZW4gdGhlIHRyYW5zbGF0ZWQgdmVyc2lvbiBvZiBpdCB3YXMgdG9vCisgICBsb25nLgorCisgKiAnZ2l0IGNvbW1pdCAtbSAiJG1zZyInIHVzZWQgdG8gYWRkIGFuIGV4dHJhIG5ld2xpbmUgZXZlbiB3aGVuCisgICAkbXNnIGFscmVhZHkgZW5kZWQgd2l0aCBvbmUuCisKKyAqIFRoZSBTU0wgcGVlciB2ZXJpZmljYXRpb24gZG9uZSBieSAiZ2l0IGltYXAtc2VuZCIgZGlkIG5vdCBhc2sgZm9yCisgICBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChSRkMgNDM2NiksIGZhaWxpbmcgdG8gY29ubmVjdCB0byBTU0wvVExTCisgICBzaXRlcyB0aGF0IHNlcnZlIG11bHRpcGxlIGhvc3RuYW1lcyBvbiBhIHNpbmdsZSBJUC4KKworICogcGVybC9HaXQucG06OmNhdF9ibG9iIHNsdXJwZWQgZXZlcnl0aGluZyBpbiBjb3JlIG9ubHkgdG8gd3JpdGUgaXQKKyAgIG91dCB0byBhIGZpbGUgZGVzY3JpcHRvciwgd2hpY2ggd2FzIG5vdCBhIHZlcnkgc21hcnQgdGhpbmcgdG8gZG8uCisKKyAqICJnaXQgYnJhbmNoIiBkaWQgbm90IGJvdGhlciB0byBjaGVjayBub25zZW5zZSBjb21tYW5kIGxpbmUKKyAgIHBhcmFtZXRlcnMuICBJdCBub3cgaXNzdWVzIGVycm9ycyBpbiBtYW55IGNhc2VzLgorCisgKiBWZXJpZmljYXRpb24gb2Ygc2lnbmVkIHRhZ3Mgd2FzIG5vdCBkb25lIGNvcnJlY3RseSB3aGVuIG5vdCBpbiBDCisgICBvciBlbi9VUyBsb2NhbGUuCisKKyAqIFNvbWUgcGxhdGZvcm1zIGFuZCB1c2VycyBzcGVsbCBVVEYtOCBkaWZmZXJlbnRseTsgcmV0cnkgd2l0aCB0aGUKKyAgIG1vc3Qgb2ZmaWNpYWwgIlVURi04IiB3aGVuIHRoZSBzeXN0ZW0gZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUKKyAgIHVzZXItc3VwcGxpZWQgZW5jb2RpbmcgbmFtZSB0aGF0IGlzIGEgY29tbW9uIGFsdGVybmF0aXZlCisgICBzcGVsbGluZyBvZiBVVEYtOC4KKworICogV2hlbiBleHBvcnQtc3Vic3QgaXMgdXNlZCwgInppcCIgb3V0cHV0IHJlY29yZGVkIGFuIGluY29ycmVjdAorICAgc2l6ZSBvZiB0aGUgZmlsZS4KKworICogImdpdCBhbSAkbWFpbGRpci8iIGFwcGxpZWQgbWVzc2FnZXMgaW4gYW4gdW5leHBlY3RlZCBvcmRlcjsgc29ydAorICAgZmlsZW5hbWVzIHJlYWQgZnJvbSB0aGUgbWFpbGRpci8gaW4gYSB3YXkgdGhhdCBpcyBtb3JlIGxpa2VseSB0bworICAgc29ydCB0aGUgbWVzc2FnZXMgaW4gdGhlIG9yZGVyIHRoZSB3cml0aW5nIE1VQSBtZWFudCB0bywgYnkgc29ydGluZworICAgbnVtZXJpYyBzZWdtZW50cyBpbiBudW1lcmljIG9yZGVyIGFuZCBub24tbnVtZXJpYyBzZWdtZW50cyBpbgorICAgYWxwaGFiZXRpY2FsIG9yZGVyLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiLCB3aGVuIHJlY3Vyc2VkIGludG8gc3ViLXN1Ym1vZHVsZXMsIGRpZCBub3QKKyAgIGFjY3VtdWxhdGUgdGhlIHByZWZpeCBwYXRocy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNTdiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjEudHh0CkBAIC0wLDAgKzEsNzEgQEAKK0dpdCB2MS44LjQuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBTb21lIG9sZCB2ZXJzaW9ucyBvZiBiYXNoIGRvIG5vdCBncm9rIHNvbWUgY29uc3RydWN0cyBsaWtlCisgICAncHJpbnRmIC12IHZhcm5hbWUnIHdoaWNoIHRoZSBwcm9tcHQgYW5kIGNvbXBsZXRpb24gY29kZSBzdGFydGVkCisgICB0byB1c2UgcmVjZW50bHkuICBUaGUgY29tcGxldGlvbiBhbmQgcHJvbXB0IHNjcmlwdHMgaGF2ZSBiZWVuCisgICBhZGp1c3RlZCB0byB3b3JrIGJldHRlciB3aXRoIHRoZXNlIG9sZCB2ZXJzaW9ucyBvZiBiYXNoLgorCisgKiBJbiBGcmVlQlNEJ3MgYW5kIE5ldEJTRCdzICJzaCIsIGEgcmV0dXJuIGluIGEgZG90IHNjcmlwdCBpbiBhCisgICBmdW5jdGlvbiByZXR1cm5zIGZyb20gdGhlIGZ1bmN0aW9uLCBub3Qgb25seSBpbiB0aGUgZG90IHNjcmlwdCwKKyAgIGJyZWFraW5nICJnaXQgcmViYXNlIiBvbiB0aGVzZSBwbGF0Zm9ybXMgKHJlZ3Jlc3Npb24gaW50cm9kdWNlZAorICAgaW4gMS44LjQtcmMxKS4KKworICogImdpdCByZWJhc2UgLWkiIGFuZCBvdGhlciBzY3JpcHRlZCBjb21tYW5kcyB3ZXJlIGZlZWRpbmcgYQorICAgcmFuZG9tLCBkYXRhIGRlcGVuZGVudCBlcnJvciBtZXNzYWdlIHRvICdlY2hvJyBhbmQgZXhwZWN0aW5nIGl0CisgICB0byBjb21lIG91dCBsaXRlcmFsbHkuCisKKyAqIFNldHRpbmcgdGhlICJzdWJtb2R1bGUuPG5hbWU+LnBhdGgiIHZhcmlhYmxlIHRvIHRoZSBlbXB0eQorICAgInRydWUiIGNhdXNlZCB0aGUgY29uZmlndXJhdGlvbiBwYXJzZXIgdG8gc2VnZmF1bHQuCisKKyAqIE91dHB1dCBmcm9tICJnaXQgbG9nIC0tZnVsbC1kaWZmIC0tIDxwYXRoc3BlYz4iIGxvb2tlZCBzdHJhbmdlCisgICBiZWNhdXNlIGNvbXBhcmlzb24gd2FzIGRvbmUgd2l0aCB0aGUgcHJldmlvdXMgYW5jZXN0b3IgdGhhdAorICAgdG91Y2hlZCB0aGUgc3BlY2lmaWVkIDxwYXRoc3BlYz4sIGNhdXNpbmcgdGhlIHBhdGNoZXMgZm9yIHBhdGhzCisgICBvdXRzaWRlIHRoZSBwYXRoc3BlYyB0byBzaG93IG1vcmUgdGhhbiB0aGUgc2luZ2xlIGNvbW1pdCBoYXMKKyAgIGNoYW5nZWQuCisKKyAqIFRoZSBhdXRvLXRhZy1mb2xsb3dpbmcgY29kZSBpbiAiZ2l0IGZldGNoIiB0cmllcyB0byByZXVzZSB0aGUKKyAgIHNhbWUgdHJhbnNwb3J0IHR3aWNlIHdoZW4gdGhlIHNlcnZpbmcgZW5kIGRvZXMgbm90IGNvb3BlcmF0ZSBhbmQKKyAgIGRvZXMgbm90IGdpdmUgdGFncyB0aGF0IHBvaW50IHRvIGNvbW1pdHMgdGhhdCBhcmUgYXNrZWQgZm9yIGFzCisgICBwYXJ0IG9mIHRoZSBwcmltYXJ5IHRyYW5zZmVyLiAgVW5mb3J0dW5hdGVseSwgR2l0LWF3YXJlIHRyYW5zcG9ydAorICAgaGVscGVyIGludGVyZmFjZSBpcyBub3QgZGVzaWduZWQgdG8gYmUgdXNlZCBtb3JlIHRoYW4gb25jZSwgaGVuY2UKKyAgIHRoaXMgZGlkIG5vdCB3b3JrIG92ZXIgc21hcnQtaHR0cCB0cmFuc2Zlci4gIEZpeGVkLgorCisgKiBTZW5kIGEgbGFyZ2UgcmVxdWVzdCB0byByZWFkKDIpL3dyaXRlKDIpIGFzIGEgc21hbGxlciBidXQgc3RpbGwKKyAgIHJlYXNvbmFibHkgbGFyZ2UgY2h1bmtzLCB3aGljaCB3b3VsZCBpbXByb3ZlIHRoZSBsYXRlbmN5IHdoZW4gdGhlCisgICBvcGVyYXRpb24gbmVlZHMgdG8gYmUga2lsbGVkIGFuZCBpbmNpZGVudGFsbHkgd29ya3MgYXJvdW5kIGJyb2tlbgorICAgNjQtYml0IHN5c3RlbXMgdGhhdCBjYW5ub3QgdGFrZSBhIDJHQiB3cml0ZSBvciByZWFkIGluIG9uZSBnby4KKworICogQSAiLm1haWxtYXAiIGZpbGUgdGhhdCBlbmRzIHdpdGggYW4gaW5jb21wbGV0ZSBsaW5lLCB3aGVuIHJlYWQKKyAgIGZyb20gYSBibG9iLCB3YXMgbm90IGhhbmRsZWQgcHJvcGVybHkuCisKKyAqIFRoZSByZWNlbnQgInNob3J0LWN1dCBjbG9uZSBjb25uZWN0aXZpdHkgY2hlY2siIHRvcGljIGJyb2tlIGEKKyAgIHNoYWxsb3cgcmVwb3NpdG9yeSB3aGVuIGEgZmV0Y2ggb3BlcmF0aW9uIHRyaWVzIHRvIGF1dG8tZm9sbG93CisgICB0YWdzLgorCisgKiBXaGVuIHNlbmQtZW1haWwgY29tZXMgdXAgd2l0aCBhbiBlcnJvciBtZXNzYWdlIHRvIGRpZSB3aXRoIHVwb24KKyAgIGZhaWx1cmUgdG8gc3RhcnQgYW4gU1NMIHNlc3Npb24sIGl0IHRyaWVkIHRvIHJlYWQgdGhlIGVycm9yCisgICBzdHJpbmcgZnJvbSBhIHdyb25nIHBsYWNlLgorCisgKiBBIGNhbGwgdG8geHJlYWQoKSB3YXMgdXNlZCB3aXRob3V0IGEgbG9vcCB0byBjb3BlIHdpdGggc2hvcnQKKyAgIHJlYWQgaW4gdGhlIGNvZGVwYXRoIHRvIHN0cmVhbSBsYXJnZSBibG9icyB0byBhIHBhY2suCisKKyAqIE9uIHBsYXRmb3JtcyB3aXRoIGZnZXRjKCkgYW5kIGZyaWVuZHMgZGVmaW5lZCBhcyBtYWNyb3MsIHRoZQorICAgY29uZmlndXJhdGlvbiBwYXJzZXIgZGlkIG5vdCBjb21waWxlLgorCisgKiBOZXcgdmVyc2lvbnMgb2YgTWVkaWFXaWtpIGludHJvZHVjZWQgYSBuZXcgQVBJIGZvciByZXR1cm5pbmcKKyAgIG1vcmUgdGhhbiA1MDAgcmVzdWx0cyBpbiByZXNwb25zZSB0byBhIHF1ZXJ5LCB3aGljaCB3b3VsZCBjYXVzZQorICAgdGhlIE1lZGlhV2lraSByZW1vdGUgaGVscGVyIHRvIGdvIGludG8gYW4gaW5maW5pdGUgbG9vcC4KKworICogU3VidmVyc2lvbidzIHNlcmYgYWNjZXNzIG1ldGhvZCAodGhlIG9ubHkgb25lIGF2YWlsYWJsZSBpbgorICAgU3VidmVyc2lvbiAxLjgpIGZvciBodHRwIGFuZCBodHRwcyBVUkxzIGluIHNrZWx0YSBtb2RlIHRlbGxzIGl0cworICAgY2FsbGVyIHRvIG9wZW4gbXVsdGlwbGUgZmlsZXMgYXQgYSB0aW1lLCB3aGljaCBtYWRlICJnaXQgc3ZuCisgICBmZXRjaCIgY29tcGxhaW4gdGhhdCAiVGVtcCBmaWxlIHdpdGggbW9uaWtlciAnc3ZuX2RlbHRhJyBhbHJlYWR5CisgICBpbiB1c2UiIGluc3RlYWQgb2YgZmV0Y2hpbmcuCisKKworQWxzbyBjb250YWlucyBhIGhhbmRmdWwgb2YgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcywgZG9jdW1lbnRhdGlvbgordXBkYXRlcywgdXBkYXRlcyB0byB0aGUgdGVzdCBzdWl0ZSwgZXRjLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2ZmIxYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuMi50eHQKQEAgLTAsMCArMSw3NyBAQAorR2l0IHYxLjguNC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguNC4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGNsb25lIiBnYXZlIHNvbWUgcHJvZ3Jlc3MgbWVzc2FnZXMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCwgbm90CisgICB0byB0aGUgc3RhbmRhcmQgZXJyb3IsIGFuZCBkaWQgbm90IGFsbG93IHN1cHByZXNzaW5nIHRoZW0gd2l0aCB0aGUKKyAgICItLW5vLXByb2dyZXNzIiBvcHRpb24uCisKKyAqICJmb3JtYXQtcGF0Y2ggLS1mcm9tPTx3aG9tPiIgZm9yZ290IHRvIG9taXQgdW5uZWNlc3NhcnkgaW4tYm9keQorICAgZnJvbSBsaW5lLCBpLmUuIHdoZW4gPHdob20+IGlzIHRoZSBzYW1lIGFzIHRoZSByZWFsIGF1dGhvci4KKworICogImdpdCBzaG9ydGxvZyIgdXNlZCB0byBjaG9rZSBhbmQgZGllIHdoZW4gdGhlcmUgaXMgYSBtYWxmb3JtZWQKKyAgIGNvbW1pdCAoZS5nLiBtaXNzaW5nIGF1dGhvcnMpOyBpdCBub3cgc2ltcGx5IGlnbm9yZSBzdWNoIGEgY29tbWl0CisgICBhbmQga2VlcHMgZ29pbmcuCisKKyAqICJnaXQgbWVyZ2UtcmVjdXJzaXZlIiBkaWQgbm90IHBhcnNlIGl0cyAiLS1kaWZmLWFsZ29yaXRobT0iIGNvbW1hbmQKKyAgIGxpbmUgb3B0aW9uIGNvcnJlY3RseS4KKworICogImdpdCBicmFuY2ggLS10cmFjayIgaGFkIGEgbWlub3IgcmVncmVzc2lvbiBpbiB2MS44LjMuMiBhbmQgbGF0ZXIKKyAgIHRoYXQgbWFkZSBpdCBpbXBvc3NpYmxlIHRvIGJhc2UgeW91ciBsb2NhbCB3b3JrIG9uIGFueXRoaW5nIGJ1dCBhCisgICBsb2NhbCBicmFuY2ggb2YgdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkgeW91IGFyZSB0cmFja2luZyBmcm9tLgorCisgKiAiZ2l0IGxzLWZpbGVzIC1rIiBuZWVkcyB0byBjcmF3bCBvbmx5IHRoZSBwYXJ0IG9mIHRoZSB3b3JraW5nIHRyZWUKKyAgIHRoYXQgbWF5IG92ZXJsYXAgdGhlIHBhdGhzIGluIHRoZSBpbmRleCB0byBmaW5kIGtpbGxlZCBmaWxlcywgYnV0CisgICBzaGFyZWQgY29kZSB3aXRoIHRoZSBsb2dpYyB0byBmaW5kIGFsbCB0aGUgdW50cmFja2VkIGZpbGVzLCB3aGljaAorICAgbWFkZSBpdCB1bm5lY2Vzc2FyaWx5IGluZWZmaWNpZW50LgorCisgKiBXaGVuIHRoZXJlIGlzIG5vIHN1ZmZpY2llbnQgb3ZlcmxhcCBiZXR3ZWVuIG9sZCBhbmQgbmV3IGhpc3RvcnkKKyAgIGR1cmluZyBhICJnaXQgZmV0Y2giIGludG8gYSBzaGFsbG93IHJlcG9zaXRvcnksIG9iamVjdHMgdGhhdCB0aGUKKyAgIHNlbmRpbmcgc2lkZSBrbm93cyB0aGUgcmVjZWl2aW5nIGVuZCBoYXMgd2VyZSB1bm5lY2Vzc2FyaWx5IHNlbnQuCisKKyAqIFdoZW4gcnVubmluZyAiZmV0Y2ggLXEiLCBhIGxvbmcgc2lsZW5jZSB3aGlsZSB0aGUgc2VuZGVyIHNpZGUKKyAgIGNvbXB1dGVzIHRoZSBzZXQgb2Ygb2JqZWN0cyB0byBzZW5kIGNhbiBiZSBtaXN0YWtlbiBieSBwcm94aWVzIGFzCisgICBkcm9wcGVkIGNvbm5lY3Rpb24uICBUaGUgc2VydmVyIHNpZGUgaGFzIGJlZW4gdGF1Z2h0IHRvIHNlbmQgYQorICAgc21hbGwgZW1wdHkgbWVzc2FnZXMgdG8ga2VlcCB0aGUgY29ubmVjdGlvbiBhbGl2ZS4KKworICogV2hlbiB0aGUgd2Vic2VydmVyIHJlc3BvbmRzIHdpdGggIjQwNSBNZXRob2QgTm90IEFsbG93ZWQiLCAiZ2l0CisgICBodHRwLWJhY2tlbmQiIHNob3VsZCB0ZWxsIHRoZSBjbGllbnQgd2hhdCBtZXRob2RzIGFyZSBhbGxvd2VkIHdpdGgKKyAgIHRoZSAiQWxsb3ciIGhlYWRlci4KKworICogImdpdCBjdnNzZXJ2ZXIiIGNvbXB1dGVkIHRoZSBwZXJtaXNzaW9uIG1vZGUgYml0cyBpbmNvcnJlY3RseSBmb3IKKyAgIGV4ZWN1dGFibGUgZmlsZXMuCisKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiAiYWRkIC1pIiBoYXMgYSBjcmlwcGxpbmcgY29kZSB0byB3b3JrIGFyb3VuZAorICAgQWN0aXZlU3RhdGUgUGVybCBsaW1pdGF0aW9uIGJ1dCBpdCBieSBtaXN0YWtlIGFsc28gdHJpZ2dlcmVkIG9uIEdpdAorICAgZm9yIFdpbmRvd3Mgd2hlcmUgTVNZUyBwZXJsIGlzIHVzZWQuCisKKyAqIFdlIG1hZGUgc3VyZSB0aGF0IHdlIG5vdGljZSB0aGUgdXNlci1zdXBwbGllZCBHSVRfRElSIGlzIGFjdHVhbGx5IGEKKyAgIGdpdGZpbGUsIGJ1dCBkaWQgbm90IGRvIHRoZSBzYW1lIHdoZW4gdGhlIGRlZmF1bHQgIi5naXQiIGlzIGEKKyAgIGdpdGZpbGUuCisKKyAqIFdoZW4gYW4gb2JqZWN0IGlzIG5vdCBmb3VuZCBhZnRlciBjaGVja2luZyB0aGUgcGFja2ZpbGVzIGFuZCB0aGVuCisgICBsb29zZSBvYmplY3QgZGlyZWN0b3J5LCByZWFkX3NoYTFfZmlsZSgpIHJlLWNoZWNrcyB0aGUgcGFja2ZpbGVzIHRvCisgICBwcmV2ZW50IHJhY2luZyB3aXRoIGEgY29uY3VycmVudCByZXBhY2tlcjsgdGVhY2ggdGhlIHNhbWUgbG9naWMgdG8KKyAgIGhhc19zaGExX2ZpbGUoKS4KKworICogImdpdCBjb21taXQgLS1hdXRob3I9JG5hbWUiLCB3aGVuICRuYW1lIGlzIG5vdCBpbiB0aGUgY2Fub25pY2FsCisgICAiQS4gVS4gVGhvciA8YXUudGhvckBleGFtcGxlLnh6PiIgZm9ybWF0LCBsb29rcyBmb3IgYSBtYXRjaGluZyBuYW1lCisgICBmcm9tIGV4aXN0aW5nIGhpc3RvcnksIGJ1dCBkaWQgbm90IGNvbnN1bHQgbWFpbG1hcCB0byBncmFiIHRoZQorICAgcHJlZmVycmVkIGF1dGhvciBuYW1lLgorCisgKiBUaGUgY29tbWl0IG9iamVjdCBuYW1lcyBpbiB0aGUgaW5zbiBzaGVldCB0aGF0IHdhcyBwcmVwYXJlZCBhdCB0aGUKKyAgIGJlZ2lubmluZyBvZiAicmViYXNlIC1pIiBzZXNzaW9uIGNhbiBiZWNvbWUgYW1iaWd1b3VzIGFzIHRoZQorICAgcmViYXNpbmcgcHJvZ3Jlc3NlcyBhbmQgdGhlIHJlcG9zaXRvcnkgZ2FpbnMgbW9yZSBjb21taXRzLiBNYWtlCisgICBzdXJlIHRoZSBpbnRlcm5hbCByZWNvcmQgaXMga2VwdCB3aXRoIGZ1bGwgNDAtaGV4IG9iamVjdCBuYW1lcy4KKworICogImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMiIGludGVybmFsbHkgdXNlZCB0aGUgbWVyZ2UgbWFjaGluZXJ5CisgICBhbmQgYXMgYSBzaWRlIGVmZmVjdCwgbGVmdCBtZXJnZSBzdW1tYXJ5IG1lc3NhZ2UgaW4gdGhlIGxvZywgYnV0CisgICB3aGVuIHJlYmFzaW5nLCB0aGVyZSBzaG91bGQgbm90IGJlIGEgbmVlZCBmb3IgbWVyZ2Ugc3VtbWFyeS4KKworICogImdpdCByZWJhc2UgLWkiIGZvcmdvdCB0aGF0IHRoZSBjb21tZW50IGNoYXJhY3RlciBjYW4gYmUKKyAgIGNvbmZpZ3VyYWJsZSB3aGlsZSByZWFkaW5nIGl0cyBpbnNuIHNoZWV0LgorCitBbHNvIGNvbnRhaW5zIGEgaGFuZGZ1bCBvZiB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLCBkb2N1bWVudGF0aW9uCit1cGRhdGVzLCB1cGRhdGVzIHRvIHRoZSB0ZXN0IHN1aXRlLCBldGMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjdhMWIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC4zLnR4dApAQCAtMCwwICsxLDU0IEBACitHaXQgdjEuOC40LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC40LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHVzZSBvZiBQZXJsIGluIG91ciB0ZXN0IHN1aXRlIGFuZCBOT19QRVJMCisgICBoYXMgYmVlbiBjbGFyaWZpZWQgYSBiaXQuCisKKyAqIEEgZmFzdC1pbXBvcnQgc3RyZWFtIGV4cHJlc3NlcyBhIHBhdGhuYW1lIHdpdGggZnVubnkgY2hhcmFjdGVycyBieQorICAgcXVvdGluZyB0aGVtIGluIEMgc3R5bGU7IHJlbW90ZS1oZyByZW1vdGUgaGVscGVyIChpbiBjb250cmliLykKKyAgIGZvcmdvdCB0byB1bnF1b3RlIHN1Y2ggYSBwYXRoLgorCisgKiBPbmUgbG9uZy1zdGFuZGluZyBmbGF3IGluIHRoZSBwYWNrIHRyYW5zZmVyIHByb3RvY29sIHVzZWQgYnkgImdpdAorICAgY2xvbmUiIHdhcyB0aGF0IHRoZXJlIHdhcyBubyB3YXkgdG8gdGVsbCB0aGUgb3RoZXIgZW5kIHdoaWNoIGJyYW5jaAorICAgIkhFQUQiIHBvaW50cyBhdCwgYW5kIHRoZSByZWNlaXZpbmcgZW5kIG5lZWRlZCB0byBndWVzcy4gIEEgbmV3CisgICBjYXBhYmlsaXR5IGhhcyBiZWVuIGRlZmluZWQgaW4gdGhlIHBhY2sgcHJvdG9jb2wgdG8gY29udmV5IHRoaXMKKyAgIGluZm9ybWF0aW9uIHNvIHRoYXQgY2xvbmluZyBmcm9tIGEgcmVwb3NpdG9yeSB3aXRoIG1vcmUgdGhhbiBvbmUKKyAgIGJyYW5jaGVzIHBvaW50aW5nIGF0IHRoZSBzYW1lIGNvbW1pdCB3aGVyZSB0aGUgSEVBRCBpcyBhdCBub3cKKyAgIHJlbGlhYmx5IHNldHMgdGhlIGluaXRpYWwgYnJhbmNoIGluIHRoZSByZXN1bHRpbmcgcmVwb3NpdG9yeS4KKworICogV2UgZGlkIG5vdCBoYW5kbGUgY2FzZXMgd2hlcmUgaHR0cCB0cmFuc3BvcnQgZ2V0cyByZWRpcmVjdGVkIGR1cmluZworICAgdGhlIGF1dGhvcml6YXRpb24gcmVxdWVzdCAoZS5nLiBmcm9tIGh0dHA6Ly8gdG8gaHR0cHM6Ly8pLgorCisgKiAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBedjEuMF4gdjEuMCIgZ2F2ZSB2MS4wIHRhZyBpdHNlbGYgaW4gdGhlCisgICBvdXRwdXQsIGJ1dCAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyB2MS4wXi4udjEuMCIgZGlkIG5vdC4KKworICogVGhlIGZhbGwtYmFjayBwYXJzaW5nIG9mIGNvbW1pdCBvYmplY3RzIHdpdGggYnJva2VuIGF1dGhvciBvcgorICAgY29tbWl0dGVyIGxpbmVzIHdlcmUgbGVzcyByb2J1c3QgdGhhbiBpZGVhbCBpbiBwaWNraW5nIHVwIHRoZQorICAgdGltZXN0YW1wcy4KKworICogQmFzaCBwcm9tcHRpbmcgY29kZSB0byBkZWFsIHdpdGggYW4gU1ZOIHJlbW90ZSBhcyBhbiB1cHN0cmVhbQorICAgd2VyZSBjb2RlZCBpbiBhIHdheSBub3Qgc3VwcG9ydGVkIGJ5IG9sZGVyIEJhc2ggdmVyc2lvbnMgKDMueCkuCisKKyAqICJnaXQgY2hlY2tvdXQgdG9waWMiLCB3aGVuIHRoZXJlIGlzIG5vdCB5ZXQgYSBsb2NhbCAidG9waWMiIGJyYW5jaAorICAgYnV0IHRoZXJlIGlzIGEgdW5pcXVlIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yIGEgcmVtb3RlICJ0b3BpYyIKKyAgIGJyYW5jaCwgcHJldGVuZGVkIGFzIGlmICJnaXQgY2hlY2tvdXQgLXQgLWIgdG9waWMgcmVtb3RlLyRyL3RvcGljIgorICAgKGZvciB0aGF0IHVuaXF1ZSByZW1vdGUgJHIpIHdhcyBydW4uIFRoaXMgaGFjayBob3dldmVyIHdhcyBub3QKKyAgIGltcGxlbWVudGVkIGZvciAiZ2l0IGNoZWNrb3V0IHRvcGljIC0tIi4KKworICogQ29sb3JpbmcgYXJvdW5kIG9jdG9wdXMgbWVyZ2VzIGluICJsb2cgLS1ncmFwaCIgb3V0cHV0IHdhcyBzY3Jld3kuCisKKyAqIFdlIGRpZCBub3QgZ2VuZXJhdGUgSFRNTCB2ZXJzaW9uIG9mIGRvY3VtZW50YXRpb24gdG8gImdpdCBzdWJ0cmVlIgorICAgaW4gY29udHJpYi8uCisKKyAqIFRoZSBzeW5vcHNpcyBzZWN0aW9uIG9mICJnaXQgdW5wYWNrLW9iamVjdHMiIGRvY3VtZW50YXRpb24gaGFzIGJlZW4KKyAgIGNsYXJpZmllZCBhIGJpdC4KKworICogQW4gYW5jaWVudCBIb3ctVG8gb24gc2VydmluZyBHaXQgcmVwb3NpdG9yaWVzIG9uIGFuIEhUVFAgc2VydmVyCisgICBsYWNrZWQgYSB3YXJuaW5nIHRoYXQgaXQgaGFzIGJlZW4gbW9zdGx5IHN1cGVyc2VkZWQgd2l0aCBtb3JlCisgICBtb2Rlcm4gd2F5LgorCitBbHNvIGNvbnRhaW5zIGEgaGFuZGZ1bCBvZiB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLCBkb2N1bWVudGF0aW9uCit1cGRhdGVzLCB1cGRhdGVzIHRvIHRoZSB0ZXN0IHN1aXRlLCBldGMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2MxY2UxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC40LnR4dApAQCAtMCwwICsxLDEwIEBACitHaXQgdjEuOC40LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC40LjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBmaXggaW4gdjEuOC40LjMgdG8gdGhlIHBhY2sgdHJhbnNmZXIgcHJvdG9jb2wgdG8gcHJvcGFnYXRlCisgICB0aGUgdGFyZ2V0IG9mIHN5bWJvbGljIHJlZnMgYnJva2UgImdpdCBjbG9uZS9naXQgZmV0Y2giIGZyb20gYQorICAgcmVwb3NpdG9yeSB3aXRoIHRvbyBtYW55IHN5bWJvbGljIHJlZnMuIEFzIGEgaG90Zml4L3dvcmthcm91bmQsCisgICB3ZSB0cmFuc2ZlciBvbmx5IHRoZSBpbmZvcm1hdGlvbiBvbiBIRUFELgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1YmQxYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuNS50eHQKQEAgLTAsMCArMSwxMyBAQAorR2l0IHYxLjguNC41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguNC40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBSZWNlbnQgdXBkYXRlIHRvIHJlbW90ZS1oZyB0aGF0IGF0dGVtcHRlZCB0byBtYWtlIGl0IHdvcmsgYmV0dGVyCisgICB3aXRoIG5vbiBBU0NJSSBwYXRobmFtZXMgZmVkIFVuaWNvZGUgc3RyaW5ncyB0byB0aGUgdW5kZXJseWluZyBIZworICAgQVBJLCB3aGljaCB3YXMgd3JvbmcuCisKKyAqICJnaXQgc3VibW9kdWxlIGluaXQiIGNvcGllZCAic3VibW9kdWxlLiRuYW1lLnVwZGF0ZSIgc2V0dGluZ3MgZnJvbQorICAgLmdpdG1vZHVsZXMgdG8gLmdpdC9jb25maWcgd2l0aG91dCBtYWtpbmcgc3VyZSBpZiB0aGUgc3VnZ2VzdGVkCisgICB2YWx1ZSB3YXMgc2Vuc2libGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NWUxODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LnR4dApAQCAtMCwwICsxLDQ4NiBAQAorR2l0IHYxLjguNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcyAoZm9yIEdpdCAyLjApCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiAiZ2l0IHB1c2ggWyR0aGVyZV0iIGRvZXMgbm90IHNheSB3aGF0IHRvIHB1c2gsIHdlIGhhdmUgdXNlZCB0aGUKK3RyYWRpdGlvbmFsICJtYXRjaGluZyIgc2VtYW50aWNzIHNvIGZhciAoYWxsIHlvdXIgYnJhbmNoZXMgd2VyZSBzZW50Cit0byB0aGUgcmVtb3RlIGFzIGxvbmcgYXMgdGhlcmUgYWxyZWFkeSBhcmUgYnJhbmNoZXMgb2YgdGhlIHNhbWUgbmFtZQorb3ZlciB0aGVyZSkuICBJbiBHaXQgMi4wLCB0aGUgZGVmYXVsdCB3aWxsIGNoYW5nZSB0byB0aGUgInNpbXBsZSIKK3NlbWFudGljcyB0aGF0IHB1c2hlczoKKworIC0gb25seSB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIGJyYW5jaCB3aXRoIHRoZSBzYW1lIG5hbWUsIGFuZCBvbmx5CisgICB3aGVuIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBzZXQgdG8gaW50ZWdyYXRlIHdpdGggdGhhdCByZW1vdGUKKyAgIGJyYW5jaCwgaWYgeW91IGFyZSBwdXNoaW5nIHRvIHRoZSBzYW1lIHJlbW90ZSBhcyB5b3UgZmV0Y2ggZnJvbTsgb3IKKworIC0gb25seSB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIGJyYW5jaCB3aXRoIHRoZSBzYW1lIG5hbWUsIGlmIHlvdQorICAgYXJlIHB1c2hpbmcgdG8gYSByZW1vdGUgdGhhdCBpcyBub3Qgd2hlcmUgeW91IHVzdWFsbHkgZmV0Y2ggZnJvbS4KKworVXNlIHRoZSB1c2VyIHByZWZlcmVuY2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAicHVzaC5kZWZhdWx0IiB0bworY2hhbmdlIHRoaXMuICBJZiB5b3UgYXJlIGFuIG9sZC10aW1lciB3aG8gaXMgdXNlZCB0byB0aGUgIm1hdGNoaW5nIgorc2VtYW50aWNzLCB5b3UgY2FuIHNldCB0aGUgdmFyaWFibGUgdG8gIm1hdGNoaW5nIiB0byBrZWVwIHRoZQordHJhZGl0aW9uYWwgYmVoYXZpb3VyLiAgSWYgeW91IHdhbnQgdG8gbGl2ZSBpbiB0aGUgZnV0dXJlIGVhcmx5LCB5b3UKK2NhbiBzZXQgaXQgdG8gInNpbXBsZSIgdG9kYXkgd2l0aG91dCB3YWl0aW5nIGZvciBHaXQgMi4wLgorCitXaGVuICJnaXQgYWRkIC11IiAoYW5kICJnaXQgYWRkIC1BIikgaXMgcnVuIGluc2lkZSBhIHN1YmRpcmVjdG9yeSBhbmQKK2RvZXMgbm90IHNwZWNpZnkgd2hpY2ggcGF0aHMgdG8gYWRkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGl0Cit3aWxsIG9wZXJhdGUgb24gdGhlIGVudGlyZSB0cmVlIGluIEdpdCAyLjAgZm9yIGNvbnNpc3RlbmN5Cit3aXRoICJnaXQgY29tbWl0IC1hIiBhbmQgb3RoZXIgY29tbWFuZHMuICBUaGVyZSB3aWxsIGJlIG5vCittZWNoYW5pc20gdG8gbWFrZSBwbGFpbiAiZ2l0IGFkZCAtdSIgYmVoYXZlIGxpa2UgImdpdCBhZGQgLXUgLiIuCitDdXJyZW50IHVzZXJzIG9mICJnaXQgYWRkIC11IiAod2l0aG91dCBhIHBhdGhzcGVjKSBzaG91bGQgc3RhcnQKK3RyYWluaW5nIHRoZWlyIGZpbmdlcnMgdG8gZXhwbGljaXRseSBzYXkgImdpdCBhZGQgLXUgLiIKK2JlZm9yZSBHaXQgMi4wIGNvbWVzLiAgQSB3YXJuaW5nIGlzIGlzc3VlZCB3aGVuIHRoZXNlIGNvbW1hbmRzIGFyZQorcnVuIHdpdGhvdXQgYSBwYXRoc3BlYyBhbmQgd2hlbiB5b3UgaGF2ZSBsb2NhbCBjaGFuZ2VzIG91dHNpZGUgdGhlCitjdXJyZW50IGRpcmVjdG9yeSwgYmVjYXVzZSB0aGUgYmVoYXZpb3VyIGluIEdpdCAyLjAgd2lsbCBiZSBkaWZmZXJlbnQKK2Zyb20gdG9kYXkncyB2ZXJzaW9uIGluIHN1Y2ggYSBzaXR1YXRpb24uCisKK0luIEdpdCAyLjAsICJnaXQgYWRkIDxwYXRoPiIgd2lsbCBiZWhhdmUgYXMgImdpdCBhZGQgLUEgPHBhdGg+Iiwgc28KK3RoYXQgImdpdCBhZGQgZGlyLyIgd2lsbCBub3RpY2UgcGF0aHMgeW91IHJlbW92ZWQgZnJvbSB0aGUgZGlyZWN0b3J5CithbmQgcmVjb3JkIHRoZSByZW1vdmFsLiAgVmVyc2lvbnMgYmVmb3JlIEdpdCAyLjAsIGluY2x1ZGluZyB0aGlzCityZWxlYXNlLCB3aWxsIGtlZXAgaWdub3JpbmcgcmVtb3ZhbHMsIGJ1dCB0aGUgdXNlcnMgd2hvIHJlbHkgb24gdGhpcworYmVoYXZpb3VyIGFyZSBlbmNvdXJhZ2VkIHRvIHN0YXJ0IHVzaW5nICJnaXQgYWRkIC0taWdub3JlLXJlbW92YWwgPHBhdGg+Igorbm93IGJlZm9yZSAyLjAgaXMgcmVsZWFzZWQuCisKKworVXBkYXRlcyBzaW5jZSB2MS44LjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvcmVpZ24gaW50ZXJmYWNlcywgc3Vic3lzdGVtcyBhbmQgcG9ydHMuCisKKyAqIEN5Z3dpbiBwb3J0IGhhcyBiZWVuIHVwZGF0ZWQgZm9yIG1vcmUgcmVjZW50IEN5Z3dpbiAxLjcuCisKKyAqICJnaXQgcmViYXNlIC1pIiBub3cgaG9ub3JzIC0tc3RyYXRlZ3kgYW5kIC1YIG9wdGlvbnMuCisKKyAqIEdpdC1ndWkgaGFzIGJlZW4gdXBkYXRlZCB0byBpdHMgMC4xOC4wIHZlcnNpb24uCisKKyAqIE1lZGlhV2lraSByZW1vdGUgaGVscGVyIChpbiBjb250cmliLykgaGFzIGJlZW4gdXBkYXRlZCB0byB1c2UgdGhlCisgICBjcmVkZW50aWFsIGhlbHBlciBpbnRlcmZhY2UgZnJvbSBHaXQucG0uCisKKyAqIFVwZGF0ZSBidWlsZCBmb3IgQ3lnd2luIDEuWzU3XS4gIFRvcnN0ZW4gQsO2Z2Vyc2hhdXNlbiByZXBvcnRzIHRoYXQKKyAgIHRoaXMgaXMgZmluZSB3aXRoIEN5Z3dpbiAxLjcgKGNmLiA8NTFBNjA2QTAuNTA2MDEwMUB3ZWIuZGU+KSBzbyBsZXQncyB0cnkgbW92aW5nIGl0CisgICBhaGVhZC4KKworICogVGhlIGNyZWRlbnRpYWwgaGVscGVyIHRvIHRhbGsgdG8ga2V5Y2hhaW4gb24gT1MgWCAoaW4gY29udHJpYi8pIGhhcworICAgYmVlbiB1cGRhdGVkIHRvIGtpY2sgaW4gbm90IGp1c3Qgd2hlbiB0YWxraW5nIGh0dHAvaHR0cHMgYnV0IGFsc28KKyAgIGltYXAocykgYW5kIHNtdHAuCisKKyAqIFJlbW90ZSB0cmFuc3BvcnQgaGVscGVyIGhhcyBiZWVuIHVwZGF0ZWQgdG8gcmVwb3J0IGVycm9ycyBhbmQKKyAgIG1haW50YWluIHJlZiBoaWVyYXJjaHkgdXNlZCB0byBrZWVwIHRyYWNrIG9mIGl0cyBvd24gc3RhdGUgYmV0dGVyLgorCisgKiBXaXRoICJleHBvcnQiIHJlbW90ZS1oZWxwZXIgcHJvdG9jb2wsICgxKSBhIHB1c2ggdGhhdCB0cmllcyB0bworICAgdXBkYXRlIGEgcmVtb3RlIHJlZiB3aG9zZSBuYW1lIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwdXNoaW5nIHNpZGUKKyAgIGRvZXMgbm90IHdvcmsgeWV0LCBhbmQgKDIpIHRoZSBoZWxwZXIgbWF5IG5vdCBrbm93IGhvdyB0byBkbworICAgLS1kcnktcnVuOyB0aGVzZSBwcm9ibGVtYXRpYyBjYXNlcyBhcmUgZGlzYWJsZWQgZm9yIG5vdy4KKworICogZ2l0LXJlbW90ZS1oZy9ienIgKGluIGNvbnRyaWIvKSB1cGRhdGVzLgorCisgKiBnaXQtcmVtb3RlLW13IChpbiBjb250cmliLykgaGludHMgdXNlcnMgdG8gY2hlY2sgdGhlIGNlcnRpZmljYXRlLAorICAgd2hlbiBodHRwczovLyBjb25uZWN0aW9uIGZhaWxlZC4KKworICogZ2l0LXJlbW90ZS1tdyAoaW4gY29udHJpYi8pIGFkZHMgYSBjb21tYW5kIHRvIGFsbG93IHByZXZpZXdpbmcgdGhlCisgICBjb250ZW50cyBsb2NhbGx5IGJlZm9yZSBwdXNoaW5nIGl0IG91dCwgd2hlbiB3b3JraW5nIHdpdGggYQorICAgTWVkaWFXaWtpIHJlbW90ZS4KKworCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogU2FtcGxlICJwb3N0LXJlY2VpdmUtZW1haWwiIGhvb2sgc2NyaXB0IGdvdCBhbiBlbmhhbmNlZCByZXBsYWNlbWVudAorICAgIm11bHRpbWFpbCIgKGluIGNvbnRyaWIvKS4KKworICogQWxzbyBpbiBjb250cmliLyBpcyBhIG5ldyAiY29udGFjdHMiIHNjcmlwdCB0aGF0IHJ1bnMgImdpdCBibGFtZSIKKyAgIHRvIGZpbmQgb3V0IHRoZSBwZW9wbGUgd2hvIG1heSBiZSBpbnRlcmVzdGVkIGluIGEgc2V0IG9mIGNoYW5nZXMuCisKKyAqICJnaXQgY2xlYW4iIGNvbW1hbmQgbGVhcm5lZCBhbiBpbnRlcmFjdGl2ZSBtb2RlLgorCisgKiBUaGUgIi0taGVhZCIgb3B0aW9uIHRvICJnaXQgc2hvdy1yZWYiIHdhcyBvbmx5IHRvIGFkZCAiSEVBRCIgdG8gdGhlCisgICBsaXN0IG9mIGNhbmRpZGF0ZSByZWZzIHRvIGJlIGZpbHRlcmVkIGJ5IHRoZSB1c3VhbCBydWxlcworICAgKGUuZy4gIi0taGVhZHMiIHRoYXQgb25seSBzaG93IHJlZnMgdW5kZXIgcmVmcy9oZWFkcykuICBUaGUgbWVhbmluZworICAgb2YgdGhlIG9wdGlvbiBoYXMgYmVlbiBjaGFuZ2VkIHRvIGFsd2F5cyBzaG93ICJIRUFEIiByZWdhcmRsZXNzIG9mCisgICB3aGF0IGZpbHRlcmluZyB3aWxsIGJlIGFwcGxpZWQgdG8gYW55IG90aGVyIHJlZi4KKworICAgVGhpcyBpcyBhIGJhY2t3YXJkIGluY29tcGF0aWJsZSBjaGFuZ2UgYW5kIG1pZ2h0IGNhdXNlIGJyZWFrYWdlcyB0bworICAgcGVvcGxlJ3MgZXhpc3Rpbmcgc2NyaXB0cy4KKworICogImdpdCBzaG93IC1zIiB3YXMgbGVzcyBkaXNjb3ZlcmFibGUgdGhhbiBpdCBzaG91bGQgaGF2ZSBiZWVuLiAgSXQKKyAgIG5vdyBoYXMgYSBuYXR1cmFsIHN5bm9ueW0gImdpdCBzaG93IC0tbm8tcGF0Y2giLgorCisgKiAiZ2l0IGNoZWNrLW1haWxtYXAiIGlzIGEgbmV3IGNvbW1hbmQgdGhhdCBsZXRzIHlvdSBtYXAgdXNlcm5hbWVzCisgICBhbmQgZS1tYWlsIGFkZHJlc3NlcyB0aHJvdWdoIHRoZSBtYWlsbWFwIG1lY2hhbmlzbSwganVzdCBsaWtlIG1hbnkKKyAgIGJ1aWx0LWluIGNvbW1hbmRzIGRvLgorCisgKiAiZ2l0IG5hbWUtcmV2IiBsZWFybmVkIHRvIG5hbWUgYW4gYW5ub3RhdGVkIHRhZyBvYmplY3QgYmFjayB0byBpdHMKKyAgIHRhZ25hbWU7ICJnaXQgbmFtZS1yZXYgJChnaXQgcmV2LXBhcnNlIHYxLjAuMCkiIGdpdmVzICJ0YWdzL3YxLjAuMCIsCisgICBmb3IgZXhhbXBsZS4KKworICogImdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrPTxmb3JtYXQ+IiBpcyBhZGRlZCwgcHJpbWFyaWx5IHRvIGFsbG93CisgICBvbi1kaXNrIGZvb3RwcmludCBvZiBvYmplY3RzIGluIHBhY2tmaWxlcyAob2Z0ZW4gdGhleSBhcmUgYSBsb3QKKyAgIHNtYWxsZXIgdGhhbiB0aGVpciB0cnVlIHNpemUsIHdoZW4gZXhwcmVzc2VkIGFzIGRlbHRhcykgdG8gYmUKKyAgIHJlcG9ydGVkLgorCisgKiAiZ2l0IHJlYmFzZSBbLWldIiB1c2VkIHRvIGxlYXZlIGp1c3QgInJlYmFzZSIgYXMgaXRzIHJlZmxvZyBtZXNzYWdlcworICAgZm9yIHNvbWUgb3BlcmF0aW9ucy4gVGhleSBoYXZlIGJlZW4gcmV3b3JkZWQgdG8gYmUgbW9yZSBpbmZvcm1hdGl2ZS4KKworICogSW4gYWRkaXRpb24gdG8gdGhlIGNob2ljZSBmcm9tICJyZWJhc2UsIG1lcmdlLCBvciBjaGVja291dC1kZXRhY2giLAorICAgInN1Ym1vZHVsZSB1cGRhdGUiIGNhbiBhbGxvdyBhIGN1c3RvbSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gdG8KKyAgIHVwZGF0ZSB0aGUgd29ya2luZyB0cmVlIG9mIHN1Ym1vZHVsZXMgdmlhIHRoZSAic3VibW9kdWxlLioudXBkYXRlIgorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBjYW4gb3B0aW9uYWxseSBjbG9uZSB0aGUgc3VibW9kdWxlCisgICByZXBvc2l0b3JpZXMgc2hhbGxvd2x5LgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCAiLS1mcm9tWz13aG9tXSIgb3B0aW9uLCB3aGljaCBzZXRzIHRoZQorICAgIkZyb206ICIgaGVhZGVyIHRvIHRoZSBzcGVjaWZpZWQgcGVyc29uIChvciB0aGUgcGVyc29uIHdobyBydW5zIHRoZQorICAgY29tbWFuZCwgaWYgIj13aG9tIiBwYXJ0IGlzIG1pc3NpbmcpIGFuZCBtb3ZlIHRoZSBvcmlnaW5hbCBhdXRob3IKKyAgIGluZm9ybWF0aW9uIHRvIGFuIGluLWJvZHkgRnJvbTogaGVhZGVyIGFzIG5lY2Vzc2FyeS4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgIm1lcmdlLmZmIiB3YXMgY2xlYXJ5IGEgdHJpLXN0YXRlIHRvCisgICBjaG9vc2Ugb25lIGZyb20gImZhdm9yIGZhc3QtZm9yd2FyZCB3aGVuIHBvc3NpYmxlIiwgImFsd2F5cyBjcmVhdGUKKyAgIGEgbWVyZ2UgZXZlbiB3aGVuIHRoZSBoaXN0b3J5IGNvdWxkIGZhc3QtZm9yd2FyZCIgYW5kICJkbyBub3QKKyAgIGNyZWF0ZSBhbnkgbWVyZ2UsIG9ubHkgdXBkYXRlIHdoZW4gdGhlIGhpc3RvcnkgZmFzdC1mb3J3YXJkcyIsIGJ1dAorICAgdGhlIGNvbW1hbmQgbGluZSBwYXJzZXIgZGlkIG5vdCBpbXBsZW1lbnQgdGhlIHVzdWFsIGNvbnZlbnRpb24gb2YKKyAgICJsYXN0IG9uZSB3aW5zLCBhbmQgY29tbWFuZCBsaW5lIG92ZXJyaWRlcyB0aGUgY29uZmlndXJhdGlvbiIKKyAgIGNvcnJlY3RseS4KKworICogImdpdHdlYiIgbGVhcm5lZCB0byBvcHRpb25hbGx5IHBsYWNlIGV4dHJhIGxpbmtzIHRoYXQgcG9pbnQgYXQgdGhlCisgICBsZXZlbHMgaGlnaGVyIHRoYW4gdGhlIEdpdHdlYiBwYWdlcyB0aGVtc2VsdmVzIGluIHRoZSBicmVhZGNydW1icywKKyAgIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgYXMgcGFydCBvZiBhIGxhcmdlciBpbnN0YWxsYXRpb24uCisKKyAqICJnaXQgbG9nIC0tZm9ybWF0PSIgbm93IGhvbm9ycyBpMThuLmxvZ291dHB1dGVuY29kaW5nIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlLgorCisgKiBUaGUgInB1c2guZGVmYXVsdD1zaW1wbGUiIG1vZGUgb2YgImdpdCBwdXNoIiBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBiZWhhdmUgbGlrZSAiY3VycmVudCIgd2l0aG91dCByZXF1aXJpbmcgYSByZW1vdGUgdHJhY2tpbmcKKyAgIGluZm9ybWF0aW9uLCB3aGVuIHlvdSBwdXNoIHRvIGEgcmVtb3RlIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gd2hlcmUKKyAgIHlvdSBmZXRjaCBmcm9tIChpLmUuIGEgdHJpYW5ndWxhciB3b3JrZmxvdykuCisKKyAqIEhhdmluZyBtdWx0aXBsZSAiZml4dXAhIiBvbiBhIGxpbmUgaW4gdGhlIHJlYmFzZSBpbnN0cnVjdGlvbiBzaGVldAorICAgZGlkIG5vdCB3b3JrIHZlcnkgd2VsbCB3aXRoICJnaXQgcmViYXNlIC1pIC0tYXV0b3NxdWFzaCIuCisKKyAqICJnaXQgbG9nIiBsZWFybmVkIHRoZSAiLS1hdXRob3ItZGF0ZS1vcmRlciIgb3B0aW9uLCB3aXRoIHdoaWNoIHRoZQorICAgb3V0cHV0IGlzIHRvcG9sb2dpY2FsbHkgc29ydGVkIGFuZCBjb21taXRzIGluIHBhcmFsbGVsIGhpc3RvcmllcworICAgYXJlIHNob3duIGludGVybWl4ZWQgdG9nZXRoZXIgYmFzZWQgb24gdGhlIGF1dGhvciB0aW1lc3RhbXAuCisKKyAqIFZhcmlvdXMgc3ViY29tbWFuZHMgb2YgImdpdCBzdWJtb2R1bGUiIHJlZnVzZWQgdG8gcnVuIGZyb20gYW55d2hlcmUKKyAgIG90aGVyIHRoYW4gdGhlIHRvcCBvZiB0aGUgd29ya2luZyB0cmVlIG9mIHRoZSBzdXBlcnByb2plY3QsIGJ1dAorICAgdGhleSBoYXZlIGJlZW4gdGF1Z2h0IHRvIGxldCB5b3UgcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyAqICJnaXQgZGlmZiIgbGVhcm5lZCBhIG1vZGUgdGhhdCBpZ25vcmVzIGh1bmtzIHdob3NlIGNoYW5nZSBjb25zaXN0cworICAgb25seSBvZiBhZGRpdGlvbnMgYW5kIHJlbW92YWxzIG9mIGJsYW5rIGxpbmVzLCB3aGljaCBpcyB0aGUgc2FtZSBhcworICAgImRpZmYgLUIiIChpZ25vcmUgYmxhbmsgbGluZXMpIG9mIEdOVSBkaWZmLgorCisgKiAiZ2l0IHJtIiBnaXZlcyBhIHNpbmdsZSBtZXNzYWdlIGZvbGxvd2VkIGJ5IGxpc3Qgb2YgcGF0aHMgdG8gcmVwb3J0CisgICBtdWx0aXBsZSBwYXRocyB0aGF0IGNhbm5vdCBiZSByZW1vdmVkLgorCisgKiAiZ2l0IHJlYmFzZSIgY2FuIGJlIHRvbGQgd2l0aCAiOi9sb29rIGZvciB0aGlzIHN0cmluZyIgc3ludGF4IGNvbW1pdHMKKyAgIHRvIHJlcGxheSB0aGUgY2hhbmdlcyBvbnRvIGFuZCB3aGVyZSB0aGUgd29yayB0byBiZSByZXBsYXllZCBiZWdpbnMuCisKKyAqIE1hbnkgdHV0b3JpYWxzIHRlYWNoIHVzZXJzIHRvIHNldCAiY29sb3IudWkiIHRvICJhdXRvIiBhcyB0aGUgZmlyc3QKKyAgIHRoaW5nIGFmdGVyIHlvdSBzZXQgInVzZXIubmFtZS9lbWFpbCIgdG8gaW50cm9kdWNlIHlvdXJzZWx2ZXMgdG8KKyAgIEdpdC4gIE5vdyB0aGUgdmFyaWFibGUgZGVmYXVsdHMgdG8gImF1dG8iLgorCisgKiBPbiBDeWd3aW4sICJjeWdzdGFydCIgaXMgbm93IHJlY29nbmlzZWQgYXMgYSBwb3NzaWJsZSB3YXkgdG8gc3RhcnQKKyAgIGEgd2ViIGJyb3dzZXIgKHVzZWQgaW4gImhlbHAgLXciIGFuZCAiaW5zdGF3ZWIiIGFtb25nIG90aGVycykuCisKKyAqICJnaXQgc3RhdHVzIiBsZWFybmVkIHN0YXR1cy5icmFuY2ggYW5kIHN0YXR1cy5zaG9ydCBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZXMgdG8gdXNlIC0tYnJhbmNoIGFuZCAtLXNob3J0IG9wdGlvbnMgYnkgZGVmYXVsdCAob3ZlcnJpZGUKKyAgIHdpdGggLS1uby1icmFuY2ggYW5kIC0tbm8tc2hvcnQgb3B0aW9ucyBmcm9tIHRoZSBjb21tYW5kIGxpbmUpLgorCisgKiAiZ2l0IGNtZCA8bmFtZT4iLCB3aGVuIDxuYW1lPiBoYXBwZW5zIHRvIGJlIGEgNDAtaGV4IHN0cmluZywKKyAgIGRpcmVjdGx5IHVzZXMgdGhlIDQwLWhleCBzdHJpbmcgYXMgYW4gb2JqZWN0IG5hbWUsIGV2ZW4gaWYgYSByZWYKKyAgICJyZWZzLzxzb21lIGhpZXJhcmNoeT4vPG5hbWU+IiBleGlzdHMuICBUaGlzIGRpc2FtYmlndWF0aW9uIG9yZGVyCisgICBpcyB1bmxpa2VseSB0byBjaGFuZ2UsIGJ1dCB3ZSBzaG91bGQgd2FybiBhYm91dCB0aGUgYW1iaWd1aXR5IGp1c3QKKyAgIGxpa2Ugd2Ugd2FybiB3aGVuIG1vcmUgdGhhbiBvbmUgcmVmcy8gaGllcmFyY2hpZXMgc2hhcmUgdGhlIHNhbWUKKyAgIG5hbWUuCisKKyAqICJnaXQgcmViYXNlIiBsZWFybmVkICItLVtuby1dYXV0b3N0YXNoIiBvcHRpb24gdG8gc2F2ZSBsb2NhbAorICAgY2hhbmdlcyBpbnN0ZWFkIG9mIHJlZnVzaW5nIHRvIHJ1biAodG8gd2hpY2ggcGVvcGxlJ3Mgbm9ybWFsCisgICByZXNwb25zZSB3YXMgdG8gc3Rhc2ggdGhlbSBhbmQgcmUtcnVuKS4gIFRoaXMgaW50cm9kdWNlZCBhIGNvcm5lcgorICAgY2FzZSBicmVha2FnZSB0byAiZ2l0IGFtIC0tYWJvcnQiIGJ1dCBpdCBoYXMgYmVlbiBmaXhlZC4KKworICogImNoZWNrLWlnbm9yZSIgKG5ldyBmZWF0dXJlIHNpbmNlIDEuOC4yKSBoYXMgYmVlbiB1cGRhdGVkIHRvIHdvcmsKKyAgIG1vcmUgbGlrZSAiY2hlY2stYXR0ciIgb3ZlciBiaWRpLXBpcGVzLgorCisgKiAiZ2l0IGRlc2NyaWJlIiBsZWFybmVkICItLWZpcnN0LXBhcmVudCIgb3B0aW9uIHRvIGxpbWl0IGl0cyBjbG9zZXN0CisgICB0YWdnZWQgY29tbWl0IHNlYXJjaCB0byB0aGUgZmlyc3QtcGFyZW50IGNoYWluLgorCisgKiAiZ2l0IG1lcmdlIGZvbyIgdGhhdCBtaWdodCBoYXZlIG1lYW50ICJnaXQgbWVyZ2Ugb3JpZ2luL2ZvbyIgaXMKKyAgIGRpYWdub3NlZCB3aXRoIGEgbW9yZSBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlLgorCisgKiAiZ2l0IGxvZyAtTDxsaW5lPiw8cmFuZ2U+OjxmaWxlbmFtZT4iIGhhcyBiZWVuIGFkZGVkLiAgVGhpcyBtYXkKKyAgIHN0aWxsIGhhdmUgbGVha3MgYW5kIHJvdWdoIGVkZ2VzLCB0aG91Z2guCisKKyAqIFdlIHVzZWQgdGhlIGFwcHJveGlkYXRlKCkgcGFyc2VyIGZvciAiLS1leHBpcmU9PHRpbWVzdGFtcD4iIG9wdGlvbnMKKyAgIG9mIHZhcmlvdXMgY29tbWFuZHMsIGJ1dCBpdCBpcyBiZXR0ZXIgdG8gdHJlYXQgLS1leHBpcmU9YWxsIGFuZAorICAgLS1leHBpcmU9bm93IGEgYml0IG1vcmUgc3BlY2lhbGx5IHRoYW4gdXNpbmcgdGhlIGN1cnJlbnQgdGltZXN0YW1wLgorICAgImdpdCBnYyIgYW5kICJnaXQgcmVmbG9nIiBoYXZlIGJlZW4gdXBkYXRlZCB3aXRoIGEgbmV3IHBhcnNpbmcKKyAgIGZ1bmN0aW9uIGZvciBleHBpcnkgZGF0ZXMuCisKKyAqIFVwZGF0ZXMgdG8gY29tcGxldGlvbiAoYm90aCBiYXNoIGFuZCB6c2gpIGhlbHBlcnMuCisKKyAqIFRoZSBiZWhhdmlvdXIgb2YgdGhlICItLWNoYWluLXJlcGx5LXRvIiBvcHRpb24gb2YgImdpdCBzZW5kLWVtYWlsIgorICAgaGF2ZSBjaGFuZ2VkIGF0IDEuNy4wLCBhbmQgd2UgYWRkZWQgYSB3YXJuaW5nL2FkdmljZSBtZXNzYWdlIHRvCisgICBoZWxwIHVzZXJzIGFkanVzdCB0byB0aGUgbmV3IGJlaGF2aW91ciBiYWNrIHRoZW4sIGJ1dCB3ZSBrZXB0IGl0CisgICBhcm91bmQgZm9yIHRvbyBsb25nLiAgVGhlIG1lc3NhZ2UgaGFzIGZpbmFsbHkgYmVlbiByZW1vdmVkLgorCisgKiAiZ2l0IGZldGNoIG9yaWdpbiBtYXN0ZXIiIHVubGlrZSAiZ2l0IGZldGNoIG9yaWdpbiIgb3IgImdpdCBmZXRjaCIKKyAgIGRpZCBub3QgdXBkYXRlICJyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciI7IHRoaXMgd2FzIGFuIGVhcmx5CisgICBkZXNpZ24gZGVjaXNpb24gdG8ga2VlcCB0aGUgdXBkYXRlIG9mIHJlbW90ZSB0cmFja2luZyBicmFuY2hlcworICAgcHJlZGljdGFibGUsIGJ1dCBpbiBwcmFjdGljZSBpdCB0dXJucyBvdXQgdGhhdCBwZW9wbGUgZmluZCBpdCBtb3JlCisgICBjb252ZW5pZW50IHRvIG9wcG9ydHVuaXN0aWNhbGx5IHVwZGF0ZSB0aGVtIHdoZW5ldmVyIHdlIGhhdmUgYQorICAgY2hhbmNlLCBhbmQgd2UgaGF2ZSBiZWVuIHVwZGF0aW5nIHRoZW0gd2hlbiB3ZSBydW4gImdpdCBwdXNoIiB3aGljaAorICAgYWxyZWFkeSBicmVha3MgdGhlIG9yaWdpbmFsICJwcmVkaWN0YWJpbGl0eSIgYW55d2F5LgorCisgKiBUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjb3JlLmNoZWNrc3RhdCB3YXMgYWR2ZXJ0aXNlZCBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYnV0IHRoZSBjb2RlIGV4cGVjdGVkIGNvcmUuc3RhdGluZm8gaW5zdGVhZC4KKyAgIEZvciBub3csIHdlIGFjY2VwdCBib3RoIGNvcmUuY2hlY2tzdGF0IGFuZCBjb3JlLnN0YXRpbmZvLCBidXQgdGhlCisgICBsYXR0ZXIgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBsb25nZXIgdGVybS4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIGV0Yy4KKworICogT24gQ3lnd2luLCB3ZSB1c2VkIHRvIHVzZSBvdXIgb3duIGxzdGF0KDIpIGVtdWxhdGlvbiB0aGF0IGlzCisgICBhbGxlZ2VkbHkgZmFzdGVyIHRoYW4gdGhlIHBsYXRmb3JtIG9uZSBpbiBjb2RlcGF0aHMgd2hlcmUgc29tZSBvZgorICAgdGhlIGluZm9ybWF0aW9uIGl0IHJldHVybnMgZGlkIG5vdCBtYXR0ZXIsIGJ1dCBpdCBzdGFydGVkIHRvIGJpdGUKKyAgIHVzIGluIGEgZmV3IGNvZGVwYXRocyB3aGVyZSB0aGUgdHJpY2sgaXQgdXNlcyB0byBjaGVhdCBkb2VzIHNob3cKKyAgIGJyZWFrYWdlcy4gVGhpcyBlbXVsYXRpb24gaGFzIGJlZW4gcmVtb3ZlZCBhbmQgd2UgdXNlIHRoZSBuYXRpdmUKKyAgIGxzdGF0KDIpIGVtdWxhdGlvbiBzdXBwbGllZCBieSBDeWd3aW4gbm93LgorCisgKiBUaGUgZnVuY3Rpb24gYXR0cmlidXRlcyBleHRlbnNpb25zIGFyZSB1c2VkIHRvIGNhdGNoIG1pc3Rha2VzIGluCisgICB1c2Ugb2Ygb3VyIG93biB2YXJpYWRpYyBmdW5jdGlvbnMgdGhhdCB1c2UgTlVMTCBzZW50aW5lbCBhdCB0aGUgZW5kCisgICAoaS5lLiBsaWtlIGV4ZWNsKDMpKSBhbmQgZm9ybWF0IHN0cmluZ3MgKGkuZS4gbGlrZSBwcmludGYoMykpLgorCisgKiBUaGUgY29kZSB0byBhbGxvdyBjb25maWd1cmF0aW9uIGRhdGEgdG8gYmUgcmVhZCBmcm9tIGluLXRyZWUgYmxvYgorICAgb2JqZWN0cyBpcyBpbi4gIFRoaXMgbWF5IGhlbHAgd29ya2luZyBpbiBhIGJhcmUgcmVwb3NpdG9yeSBhbmQKKyAgIHN1Ym1vZHVsZSB1cGRhdGVzLgorCisgKiBGZXRjaGluZyBiZXR3ZWVuIHJlcG9zaXRvcmllcyB3aXRoIG1hbnkgcmVmcyBlbXBsb3llZCBPKG5eMikKKyAgIGFsZ29yaXRobSB0byBtYXRjaCB1cCB0aGUgY29tbW9uIG9iamVjdHMsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIG9yaWdpbmFsIHdheSB0byBzcGVjaWZ5IHJlbW90ZSByZXBvc2l0b3J5IHVzaW5nIC5naXQvYnJhbmNoZXMvCisgICB1c2VkIHRvIGhhdmUgYSBuaWZ0eSBmZWF0dXJlLiAgVGhlIGNvZGUgdG8gc3VwcG9ydCB0aGUgZmVhdHVyZSB3YXMKKyAgIHN0aWxsIGluIGEgZnVuY3Rpb24gYnV0IHRoZSBjYWxsZXIgd2FzIGNoYW5nZWQgbm90IHRvIGNhbGwgaXQgNQorICAgeWVhcnMgYWdvLCBicmVha2luZyB0aGF0IGZlYXR1cmUgYW5kIGxlYXZpbmcgdGhlIHN1cHBvcnRpbmcgY29kZQorICAgdW5yZWFjaGFibGUuICBUaGUgZGVhZCBjb2RlIGhhcyBiZWVuIHJlbW92ZWQuCisKKyAqICJnaXQgcGFjay1yZWZzIiB0aGF0IHJhY2VzIHdpdGggbmV3IHJlZiBjcmVhdGlvbiBvciBkZWxldGlvbiBoYXZlCisgICBiZWVuIHN1c2NlcHRpYmxlIHRvIGxvc3NhZ2Ugb2YgcmVmcyB1bmRlciByaWdodCBjb25kaXRpb25zLCB3aGljaAorICAgaGFzIGJlZW4gdGlnaHRlbmVkIHVwLgorCisgKiBXZSByZWFkIGxvb3NlIGFuZCBwYWNrZWQgcmVmZXJlbmNlcyBpbiB0d28gc3RlcHMsIGJ1dCBhZnRlcgorICAgZGVjaWRpbmcgdG8gcmVhZCBhIGxvb3NlIHJlZiBidXQgYmVmb3JlIGFjdHVhbGx5IG9wZW5pbmcgaXQgdG8gcmVhZAorICAgaXQsIGFub3RoZXIgcHJvY2VzcyByYWNpbmcgd2l0aCB1cyBjYW4gdW5saW5rIGl0LCB3aGljaCB3b3VsZCBjYXVzZQorICAgdXMgdG8gYmFyZi4gIFRoZSBjb2RlcGF0aCBoYXMgYmVlbiB1cGRhdGVkIHRvIHJldHJ5IHdoZW4gc3VjaCBhCisgICByYWNlIGlzIGRldGVjdGVkLCBpbnN0ZWFkIG9mIG91dHJpZ2h0IGZhaWxpbmcuCisKKyAqIFVzZXMgb2YgdGhlIHBsYXRmb3JtIGZubWF0Y2goMykgZnVuY3Rpb24gKG1hbnkgcGxhY2VzIGluIHRoZSBjb2RlLAorICAgbWF0Y2hpbmcgcGF0aHNwZWMsIC5naXRpZ25vcmUgYW5kIC5naXRhdHRyaWJ1dGVzIHRvIG5hbWUgYSBmZXcpCisgICBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCB3aWxkbWF0Y2gsIGFsbG93aW5nICJmb28vKiovYmFyIiB0aGF0IHdvdWxkCisgICBtYXRjaCBmb28vYmFyLCBmb28vYS9iYXIsIGZvby9hL2IvYmFyLCBldGMuCisKKyAqIE1lbW9yeSBvd25lcnNoaXAgYW5kIGxpZmV0aW1lIHJ1bGVzIGZvciB3aGF0IGZvci1lYWNoLXJlZiBmZWVkcyB0bworICAgaXRzIGNhbGxiYWNrcyBoYXZlIGJlZW4gY2xhcmlmaWVkIChpbiBzaG9ydCwgInlvdSBkbyBub3Qgb3duIGl0LCBzbworICAgbWFrZSBhIGNvcHkgaWYgeW91IHdhbnQgdG8ga2VlcCBpdCIpLgorCisgKiBUaGUgcmV2aXNpb24gdHJhdmVyc2FsIGxvZ2ljIHRvIGltcHJvdmUgY3VsbGluZyBvZiBpcnJlbGV2YW50CisgICBwYXJlbnRzIHdoaWxlIHRyYXZlcnNpbmcgYSBtZXJneSBoaXN0b3J5IGhhcyBiZWVuIHVwZGF0ZWQuCisKKyAqIFNvbWUgbGVha3MgaW4gdW5wYWNrLXRyZWVzICh1c2VkIGluIG1lcmdlLCBjaGVycnktcGljayBhbmQgb3RoZXIKKyAgIGNvZGVwYXRocykgaGF2ZSBiZWVuIHBsdWdnZWQuCisKKyAqIFRoZSBjb2RlcGF0aCB0byByZWFkIGZyb20gbWFya3MgZmlsZXMgaW4gZmFzdC1pbXBvcnQvZXhwb3J0IGRpZCBub3QKKyAgIGhhdmUgdG8gYWNjZXB0IGFueXRoaW5nIGJ1dCA0MC1oZXggcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdAorICAgbmFtZS4gIEZ1cnRoZXIsIGZhc3QtZXhwb3J0IGRpZCBub3QgbmVlZCBmdWxsIGluLWNvcmUgb2JqZWN0CisgICByZXByZXNlbnRhdGlvbiB0byBoYXZlIHBhcnNlZCB3ZW4gcmVhZGluZyBmcm9tIHRoZW0uICBUaGVzZQorICAgY29kZXBhdGhzIGhhdmUgYmVlbiBvcHRpbWl6ZWQgYnkgdGFraW5nIGFkdmFudGFnZSBvZiB0aGVzZSBhY2Nlc3MKKyAgIHBhdHRlcm5zLgorCisgKiBPYmplY3QgbG9va3VwIGxvZ2ljLCB3aGVuIHRoZSBvYmplY3QgaGFzaHRhYmxlIHN0YXJ0cyB0byBiZWNvbWUKKyAgIGNyb3dkZWQsIGhhcyBiZWVuIG9wdGltaXplZC4KKworICogV2hlbiBURVNUX09VVFBVVF9ESVJFQ1RPUlkgc2V0dGluZyBpcyB1c2VkLCBpdCB3YXMgaGFuZGxlZCBzb21ld2hhdAorICAgaW5jb25zaXN0ZW50bHkgYmV0d2VlbiB0aGUgdGVzdCBmcmFtZXdvcmsgYW5kIHQvTWFrZWZpbGUsIGFuZCBsb2dpYworICAgdG8gc3VtbWFyaXplIHRoZSByZXN1bHRzIGxvb2tlZCBhdCBhIHdyb25nIHBsYWNlLgorCisgKiAiZ2l0IGNsb25lIiB1c2VzIGEgbGlnaHRlci13ZWlnaHQgaW1wbGVtZW50YXRpb24gd2hlbiBtYWtpbmcgc3VyZQorICAgdGhhdCB0aGUgaGlzdG9yeSBiZWhpbmQgcmVmcyBhcmUgY29tcGxldGUuCisKKyAqIE1hbnkgd2FybmluZ3MgZnJvbSBzcGFyc2Ugc291cmNlIGNoZWNrZXIgaW4gY29tcGF0LyBhcmVhIGhhcyBiZWVuCisgICBzcXVlbGNoZWQuCisKKyAqIFRoZSBjb2RlIHRvIHJlYWRpbmcgYW5kIHVwZGF0aW5nIHBhY2tlZC1yZWZzIGZpbGUgaGFzIGJlZW4gdXBkYXRlZCwKKyAgIGNvcnJlY3RpbmcgY29ybmVyIGNhc2UgYnVncy4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2MS44LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjguMyBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgcmVsZWFzZSBub3RlcyB0byB0aGVtIGZvcgorZGV0YWlscykuCisKKyAqIE5ld2VyIE5ldDo6U01UUDo6U1NMIG1vZHVsZSBkb2VzIG5vdCB3YW50IHRoZSB1c2VyIHByb2dyYW1zIHRvIHVzZQorICAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIHRvIGxldCBzZXJ2ZXIgY2VydGlmaWNhdGUgZ28gd2l0aG91dAorICAgdmVyaWZpY2F0aW9uLCBzbyBieSBkZWZhdWx0IGVuYWJsZSB0aGUgdmVyaWZpY2F0aW9uIHdpdGggYQorICAgbWVjaGFuaXNtIHRvIHR1cm4gaXQgb2ZmIGlmIG5lZWRlZC4KKyAgIChtZXJnZSAzNTAzNWJiIHJyL3NlbmQtZW1haWwtc3NsLXZlcmlmeSBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gImdpdCIgaXMgc3Bhd25lZCBpbiBzdWNoIGEgd2F5IHRoYXQgYW55IG9mIHRoZSBsb3cgMyBmaWxlCisgICBkZXNjcmlwdG9ycyBpcyBjbG9zZWQsIG91ciBmaXJzdCBvcGVuKCkgbWF5IHlpZWxkIGZpbGUgZGVzY3JpcHRvciAyLAorICAgYW5kIHdyaXRpbmcgZXJyb3IgbWVzc2FnZSB0byBpdCB3b3VsZCBzY3JldyB0aGluZ3MgdXAgaW4gYSBiaWcgd2F5LgorICAgKG1lcmdlIGExMWMzOTYgdHIvcHJvdGVjdC1sb3ctMy1mZHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbWFpbG1hcCBtZWNoYW5pc20gdW5uZWNlc3NhcmlseSBkb3duY2FzZWQgdGhlIGUtbWFpbCBhZGRyZXNzZXMKKyAgIGluIHRoZSBvdXRwdXQsIGFuZCBhbHNvIGlnbm9yZWQgdGhlIGh1bWFuIG5hbWUgd2hlbiBpdCBpcyBhIHNpbmdsZQorICAgY2hhcmFjdGVyIG5hbWUuCisgICAobWVyZ2UgYmQyMzc5NCBqYy9tYWlsbWFwLWNhc2UtaW5zZW5zaXRpdml0eSBsYXRlciB0byBtYWludCkuCisKKyAqIEluIHR3byBwbGFjZXMgd2UgZGlkIG5vdCBjaGVjayByZXR1cm4gdmFsdWUgKGV4cGVjdGVkIHRvIGJlIGEgZmlsZQorICAgZGVzY3JpcHRvcikgY29ycmVjdGx5LgorICAgKG1lcmdlIGE3N2YxMDYgdHIvZmQtZ290Y2hhLWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogTG9naWMgdG8gYXV0by1kZXRlY3QgY2hhcmFjdGVyIGVuY29kaW5ncyBpbiB0aGUgY29tbWl0IGxvZyBtZXNzYWdlCisgICBkaWQgbm90IHJlamVjdCBvdmVybG9uZyBhbmQgaW52YWxpZCBVVEYtOCBjaGFyYWN0ZXJzLgorICAgKG1lcmdlIDgxMDUwYWMgYmMvY29tbWl0LWludmFsaWQtdXRmOCBsYXRlciB0byBtYWludCkuCisKKyAqIFBhc3MgcG9ydCBudW1iZXIgYXMgYSBzZXBhcmF0ZSBhcmd1bWVudCB3aGVuICJzZW5kLWVtYWlsIiBpbml0aWFsaXplcworICAgTmV0OjpTTVRQLCBpbnN0ZWFkIG9mIGFzIGEgcGFydCBvZiB0aGUgaG9zdG5hbWUsIGkuZS4gaG9zdDpwb3J0LgorICAgVGhpcyBhbGxvd3MgR1NTQVBJIGNvZGVwYXRoIHRvIG1hdGNoIHdpdGggdGhlIGhvc3RuYW1lIGdpdmVuLgorICAgKG1lcmdlIDFhNzQxYmYgYmMvc2VuZC1lbWFpbC11c2UtcG9ydC1hcy1zZXBhcmF0ZS1wYXJhbSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZiIgcmVmdXNlZCB0byBldmVuIHNob3cgZGlmZmVyZW5jZSB3aGVuIGNvcmUuc2FmZWNybGYgaXMKKyAgIHNldCB0byB0cnVlIChpLmUuIGVycm9yIG91dCkgYW5kIHRoZXJlIGFyZSBvZmZlbmRpbmcgbGluZXMgaW4gdGhlCisgICB3b3JraW5nIHRyZWUgZmlsZXMuCisgICAobWVyZ2UgNTQzMGJiMiBqYy9tYWludC1kaWZmLWNvcmUtc2FmZWNybGYgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIHRlc3QgdGhhdCBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IGRpZG4ndCByZXZlYWxlZCBhIGJ1ZyB0aGF0IG5lZWRzCisgICB0byBiZSBjb3JyZWN0ZWQuCisgICAobWVyZ2UgOTRkNzVkMSBqYy90MTUxMi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiBvdmVybG9uZyBwYXRoIHRvIGEgLmdpdCBkaXJlY3RvcnkgbWF5IGhhdmUgb3ZlcmZsb3duIHRoZQorICAgdGVtcG9yYXJ5IHBhdGggYnVmZmVyIHVzZWQgdG8gY3JlYXRlIGEgbmFtZSBmb3IgbG9ja2ZpbGVzLgorICAgKG1lcmdlIDJmYmQ0ZjkgbWgvbWFpbnQtbG9ja2ZpbGUtb3ZlcmZsb3cgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBJbnZvY2F0aW9ucyBvZiAiZ2l0IGNoZWNrb3V0IiB1c2VkIGludGVybmFsbHkgYnkgImdpdCByZWJhc2UiIHdlcmUKKyAgIGNvdW50ZWQgYXMgImNoZWNrb3V0IiwgYW5kIGFmZmVjdGVkIGxhdGVyICJnaXQgY2hlY2tvdXQgLSIgdG8gdGhlCisgICB0aGUgdXNlciB0byBhbiB1bmV4cGVjdGVkIHBsYWNlLgorICAgKG1lcmdlIDNiZWQyOTEgcnIvcmViYXNlLWNoZWNrb3V0LXJlZmxvZyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNvbHVtbi51aSB3YXMgcG9vcmx5IGRvY3VtZW50ZWQuCisgICAobWVyZ2UgNWU2MmNjMSByci9jb2x1bW4tZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBuYW1lLXJldiAtLXJlZnM9dGFncy92KiIgd2VyZSBmb3JiaWRkZW4sIHdoaWNoIHdhcyBhIGJpdAorICAgaW5jb252ZW5pZW50ICh5b3UgaGFkIHRvIGdpdmUgYSBwYXR0ZXJuIHRvIG1hdGNoIHJlZnMgZnVsbHksIGxpa2UKKyAgIC0tcmVmcz1yZWZzL3RhZ3MvdiopLgorICAgKG1lcmdlIDk4YzVjNGEgbmsvbmFtZS1yZXYtYWJicmV2aWF0ZWQtcmVmcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYXBwbHkiIHBhcnNlZCBwYXRjaGVzIHRoYXQgYWRkIG5ldyBmaWxlcywgZ2VuZXJhdGVkIGJ5CisgICBwcm9ncmFtcyBvdGhlciB0aGFuIEdpdCwgaW5jb3JyZWN0bHkuICBUaGlzIGlzIGFuIG9sZCBicmVha2FnZSBpbgorICAgdjEuNy4xMSBhbmQgd2lsbCBuZWVkIHRvIGJlIG1lcmdlZCBkb3duIHRvIHRoZSBtYWludGVuYW5jZSB0cmFja3MuCisKKyAqIE9sZGVyIGNVUkwgd2FudGVkIHBpZWNlIG9mIG1lbW9yeSB3ZSBjYWxsIGl0IHdpdGggdG8gYmUgc3RhYmxlLCBidXQKKyAgIHdlIHVwZGF0ZWQgdGhlIGF1dGggbWF0ZXJpYWwgYWZ0ZXIgaGFuZGluZyBpdCB0byBhIGNhbGwuCisKKyAqICJnaXQgcHVsbCIgaW50byBub3RoaW5nIHRyYXNoZWQgImxvY2FsIGNoYW5nZXMiIHRoYXQgd2VyZSBpbiB0aGUKKyAgIGluZGV4LCBhbmQgdGhpcyBhdm9pZHMgaXQuCisKKyAqIE1hbnkgImdpdCBzdWJtb2R1bGUiIG9wZXJhdGlvbnMgZG8gbm90IHdvcmsgb24gYSBzdWJtb2R1bGUgYXQgYQorICAgcGF0aCB3aG9zZSBuYW1lIGlzIG5vdCBpbiBBU0NJSS4KKworICogImNoZXJyeS1waWNrIiBoYWQgYSBzbWFsbCBsZWFrIGluIGFuIGVycm9yIGNvZGVwYXRoLgorCisgKiBMb2dpYyB1c2VkIGJ5IGdpdC1zZW5kLWVtYWlsIHRvIHN1cHByZXNzIGNjIG1pc2hhbmRsZWQgbmFtZXMgbGlrZQorICAgIkEgVS4gVGhvciIgPGF1dGhvckBleGFtcGxlLnh6Piwgd2hlcmUgdGhlIGh1bWFuIHJlYWRhYmxlIHBhcnQKKyAgIG5lZWRzIHRvIGJlIHF1b3RlZCAodGhlIHVzZXIgaW5wdXQgbWF5IG5vdCBoYXZlIHRoZSBkb3VibGUgcXVvdGVzCisgICBhcm91bmQgdGhlIG5hbWUsIGFuZCBjb21wYXJpc29uIHdhcyBkb25lIGJldHdlZW4gcXVvdGVkIGFuZAorICAgdW5xdW90ZWQgc3RyaW5ncykuICBJdCBhbHNvIG1pc2hhbmRsZWQgbmFtZXMgdGhhdCBuZWVkIFJGQzIwNDcKKyAgIHF1b3RpbmcuCisKKyAqIENhbGwgdG8gZGlzY2FyZF9jYWNoZS9kaXNjYXJkX2luZGV4ICh1c2VkIHdoZW4gd2UgdXNlIGRpZmZlcmVudAorICAgY29udGVudHMgb2YgdGhlIGluZGV4IGluLWNvcmUsIGluIG1hbnkgb3BlcmF0aW9ucyBsaWtlIGNvbW1pdCwKKyAgIGFwcGx5LCBhbmQgbWVyZ2UpIHVzZWQgdG8gbGVhayBtZW1vcnkgdGhhdCBoZWxkIHRoZSBhcnJheSBvZiBpbmRleAorICAgZW50cmllcywgd2hpY2ggaGFzIGJlZW4gcGx1Z2dlZC4KKyAgIChtZXJnZSBhMGZjNGRiIHJzL2Rpc2NhcmQtaW5kZXgtZGlzY2FyZC1hcnJheSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXR3ZWIiIGZvcmdvdCB0byBjbGVhciBhIGdsb2JhbCB2YXJpYWJsZSAkc2VhcmNoX3JlZ2V4cCB1cG9uIGVhY2gKKyAgIHJlcXVlc3QsIG1pc3Rha2VubHkgY2Fycnlpbmcgb3ZlciB0aGUgcHJldmlvdXMgc2VhcmNoIHRvIGEgbmV3IG9uZQorICAgd2hlbiB1c2VkIGFzIGEgcGVyc2lzdGVudCBDR0kuCisKKyAqIFRoZSB3aWxkbWF0Y2ggZW5naW5lIGRpZCBub3QgaG9ub3IgV01fQ0FTRUZPTEQgb3B0aW9uIGNvcnJlY3RseS4KKworICogImdpdCBsb2cgLWMgLS1mb2xsb3cgJHBhdGgiIHNlZ2ZhdWx0ZWQgdXBvbiBoaXR0aW5nIHRoZSBjb21taXQgdGhhdAorICAgcmVuYW1lZCB0aGUgJHBhdGggYmVpbmcgZm9sbG93ZWQuCisKKyAqIFdoZW4gYSByZWZsb2cgbm90YXRpb24gaXMgdXNlZCBmb3IgaW1wbGljaXQgImN1cnJlbnQgYnJhbmNoIiwgd2UKKyAgIGRpZCBub3Qgc2F5IHdoaWNoIGJyYW5jaCBhbmQgd29yc2Ugc2FpZCAiYnJhbmNoICcnIi4KKworICogImRpZmZ0b29sIC0tZGlyLWRpZmYiIGRpZCBub3QgY29weSBiYWNrIGNoYW5nZXMgbWFkZSBieSB0aGUKKyAgIGVuZC11c2VyIGluIHRoZSBkaWZmIHRvb2wgYmFja2VuZCB0byB0aGUgd29ya2luZyB0cmVlIGluIHNvbWUKKyAgIGNhc2VzLgorCisgKiAiZ2l0IHB1c2ggJHRoZXJlIEhFQUQ6YnJhbmNoIiBkaWQgbm90IHJlc29sdmUgSEVBRCBlYXJseSBlbm91Z2gsIHNvCisgICBpdCB3YXMgZWFzeSB0byBmbGlwIGl0IGFyb3VuZCB3aGlsZSBwdXNoIGlzIHN0aWxsIGdvaW5nIG9uIGFuZCBwdXNoCisgICBvdXQgYSBicmFuY2ggdGhhdCB0aGUgdXNlciBkaWQgbm90IG9yaWdpbmFsbHkgaW50ZW5kZWQgd2hlbiB0aGUKKyAgIGNvbW1hbmQgd2FzIHN0YXJ0ZWQuCisKKyAqIFRoZSBiYXNoIHByb21wdCBjb2RlIChpbiBjb250cmliLykgZGlzcGxheWVkIHRoZSBuYW1lIG9mIHRoZSBicmFuY2gKKyAgIGJlaW5nIHJlYmFzZWQgd2hlbiAicmViYXNlIC1pLy1tLy1wIiBtb2RlcyBhcmUgaW4gdXNlLCBidXQgbm90IHRoZQorICAgcGxhaW4gdmFuaWxsYSAicmViYXNlIi4KKworICogSGFuZGxpbmcgb2YgbmVnYXRpdmUgZXhjbHVkZSBwYXR0ZXJuIGZvciBkaXJlY3RvcmllcyAiIWRpciIgd2FzCisgICBicm9rZW4gaW4gdGhlIHVwZGF0ZSB0byB2MS44LjMuCisKKyAqIHpzaCBwcm9tcHQgc2NyaXB0IHRoYXQgYm9ycm93ZWQgZnJvbSBiYXNoIHByb21wdCBzY3JpcHQgZGlkIG5vdAorICAgd29yayBkdWUgdG8gc2xpZ2h0IGRpZmZlcmVuY2VzIGluIGFycmF5IHZhcmlhYmxlIG5vdGF0aW9uIGJldHdlZW4KKyAgIHRoZXNlIHR3byBzaGVsbHMuCisKKyAqIEFuIGVudHJ5IGZvciAiZmlsZTovLyIgc2NoZW1lIGluIHRoZSBlbnVtZXJhdGlvbiBvZiBVUkwgdHlwZXMgR2l0CisgICBjYW4gdGFrZSBpbiB0aGUgSFRNTCBkb2N1bWVudGF0aW9uIHdhcyBtYWRlIGludG8gYSBjbGlja2FibGUgbGluaworICAgYnkgbWlzdGFrZS4KKworICogImdpdCBwdXNoIC0tW25vLV12ZXJpZnkiIHdhcyBub3QgZG9jdW1lbnRlZC4KKworICogU3RvcCBpbnN0YWxsaW5nIHRoZSBnaXQtcmVtb3RlLXRlc3RweSBzY3JpcHQgdGhhdCBpcyBvbmx5IHVzZWQgZm9yCisgICB0ZXN0aW5nLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLW0gJyciIHNob3VsZCBub3Qgc3RhcnQgYW4KKyAgIGVkaXRvci4KKworICogImdpdCBtZXJnZSBAey0xfX4yMiIgd2FzIHJld3JpdHRlbiB0byAiZ2l0IG1lcmdlIGZyb3R6QHsxfX4yMiIKKyAgIGluY29ycmVjdGx5IHdoZW4geW91ciBwcmV2aW91cyBicmFuY2ggd2FzICJmcm90eiIgKGl0IHNob3VsZCBiZQorICAgcmV3cml0dGVuIHRvICJnaXQgbWVyZ2UgZnJvdHp+MjIiIGluc3RlYWQpLgorCisgKiAiZ2l0IGRpZmYgLWMgLXAiIHdhcyBub3Qgc2hvd2luZyBhIGRlbGV0ZWQgbGluZSBmcm9tIGEgaHVuayB3aGVuCisgICBhbm90aGVyIGh1bmsgaW1tZWRpYXRlbHkgYmVnaW5zIHdoZXJlIHRoZSBlYXJsaWVyIG9uZSBlbmRzLgorCisgKiAiZ2l0IGxvZyAtLWFuY2VzdHJ5LXBhdGggQS4uLkIiIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZCwgYXMgaXQgZGlkCisgICBub3QgcGF5IGF0dGVudGlvbiB0byB0aGUgZmFjdCB0aGF0IHRoZSBtZXJnZSBiYXNlIGJldHdlZW4gQSBhbmQgQgorICAgd2FzIHRoZSBib3R0b20gb2YgdGhlIHJhbmdlIGJlaW5nIHNwZWNpZmllZC4KKworICogTWFjIE9TIFggZG9lcyBub3QgbGlrZSB0byB3cml0ZSgyKSBtb3JlIHRoYW4gSU5UX01BWCBudW1iZXIgb2YKKyAgIGJ5dGVzOyB3b3JrIGl0IGFyb3VuZCBieSBjaG9wcGluZyB3cml0ZSgyKSBpbnRvIHNtYWxsZXIgcGllY2VzLgorCisgKiBOZXdlciBNYWNPUyBYIGVuY291cmFnZXMgdGhlIHByb2dyYW1zIHRvIGNvbXBpbGUgYW5kIGxpbmsgd2l0aAorICAgdGhlaXIgQ29tbW9uQ3J5cHRvLCBub3Qgd2l0aCBPcGVuU1NMLgorCisgKiAiZ2l0IGNsb25lIGZvby9iYXI6YmF6IiBjYW5ub3QgYmUgYSByZXF1ZXN0IHRvIGNsb25lIGZyb20gYSByZW1vdGUKKyAgIG92ZXIgZ2l0LW92ZXItc3NoIHNwZWNpZmllZCBpbiB0aGUgc2NwIHN0eWxlLiAgVGhpcyBjYXNlIGlzIG5vdworICAgZGV0ZWN0ZWQgYW5kIGNsb25lcyBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSBhdCAiZm9vL2JhcjpiYXoiLgorCisgKiBXaGVuICRIT01FIGlzIG1pc2NvbmZpZ3VyZWQgdG8gcG9pbnQgYXQgYW4gdW5yZWFkYWJsZSBkaXJlY3RvcnksIHdlCisgICB1c2VkIHRvIGNvbXBsYWluIGFuZCBkaWUuIExvb3NlbiB0aGUgY2hlY2suCisKKyAqICJnaXQgc3VidHJlZSIgKGluIGNvbnRyaWIvKSBoYWQgb25lIGNvZGVwYXRoIHdpdGggbG9vc2UgZXJyb3IKKyAgIGNoZWNrcyB0byBsb3NlIGRhdGEgYXQgdGhlIHJlbW90ZSBzaWRlLgorCisgKiAiZ2l0IGZldGNoIiBpbnRvIGEgc2hhbGxvdyByZXBvc2l0b3J5IGZyb20gYSByZXBvc2l0b3J5IHRoYXQgZG9lcworICAgbm90IGtub3cgYWJvdXQgdGhlIHNoYWxsb3cgYm91bmRhcnkgY29tbWl0cyAoZS5nLiBhIGRpZmZlcmVudCBmb3JrCisgICBmcm9tIHRoZSByZXBvc2l0b3J5IHRoZSBjdXJyZW50IHNoYWxsb3cgcmVwb3NpdG9yeSB3YXMgY2xvbmVkIGZyb20pCisgICBkaWQgbm90IHdvcmsgY29ycmVjdGx5LgorCisgKiAiZ2l0IGNoZWNrb3V0IGZvbyIgRFdJTXMgdGhlIGludGVuZGVkICJ1cHN0cmVhbSIgYW5kIHR1cm5zIGl0IGludG8KKyAgICJnaXQgY2hlY2tvdXQgLXQgLWIgZm9vIHJlbW90ZXMvb3JpZ2luL2ZvbyIuIFRoaXMgY29kZXBhdGggaGFzIGJlZW4KKyAgIHVwZGF0ZWQgdG8gY29ycmVjdGx5IHRha2UgZXhpc3RpbmcgcmVtb3RlIGRlZmluaXRpb25zIGludG8gYWNjb3VudC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMzZhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjEudHh0CkBAIC0wLDAgKzEsOSBAQAorR2l0IHYxLjguNS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgc3VibW9kdWxlIGluaXQiIGNvcGllZCAic3VibW9kdWxlLiRuYW1lLnVwZGF0ZSIgc2V0dGluZ3MgZnJvbQorICAgLmdpdG1vZHVsZXMgdG8gLmdpdC9jb25maWcgd2l0aG91dCBtYWtpbmcgc3VyZSBpZiB0aGUgc3VnZ2VzdGVkCisgICB2YWx1ZSB3YXMgc2Vuc2libGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWM0OTg0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS4yLnR4dApAQCAtMCwwICsxLDIwIEBACitHaXQgdjEuOC41LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC41LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgZGlmZiAtLSAnOihpY2FzZSltYWtlZmlsZSciIHdhcyB1bm5lY2Vzc2FyaWx5IHJlamVjdGVkIGF0IHRoZQorICAgY29tbWFuZCBsaW5lIHBhcnNlci4KKworICogImdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrPW9rIiBkaWQgbm90IGNoZWNrIHRoZSBleGlzdGVuY2Ugb2YKKyAgIHRoZSBuYW1lZCBvYmplY3QuCisKKyAqICJnaXQgYW0gLS1hYm9ydCIgc29tZXRpbWVzIGNvbXBsYWluZWQgYWJvdXQgbm90IGJlaW5nIGFibGUgdG8gd3JpdGUKKyAgIGEgdHJlZSB3aXRoIGFuIDB7NDB9IG9iamVjdCBpbiBpdC4KKworICogVHdvIHByb2Nlc3NlcyBjcmVhdGluZyBsb29zZSBvYmplY3RzIGF0IHRoZSBzYW1lIHRpbWUgY291bGQgaGF2ZQorICAgZmFpbGVkIHVubmVjZXNzYXJpbHkgd2hlbiB0aGUgbmFtZSBvZiB0aGVpciBuZXcgb2JqZWN0cyBzdGFydGVkCisgICB3aXRoIHRoZSBzYW1lIGJ5dGUgdmFsdWUsIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlMmRkMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuMy50eHQKQEAgLTAsMCArMSwyNyBAQAorR2l0IHYxLjguNS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguNS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgIi0tW25vLV1pbmZvcm1hdGl2ZS1lcnJvcnMiIG9wdGlvbnMgdG8gImdpdCBkYWVtb24iIHdlcmUgcGFyc2VkCisgICBhIGJpdCB0b28gbG9vc2VseSwgYWxsb3dpbmcgYW55IG90aGVyIHN0cmluZyBhZnRlciB0aGVzZSBvcHRpb24KKyAgIG5hbWVzLgorCisgKiBBICJnYyIgcHJvY2VzcyBydW5uaW5nIGFzIGEgZGlmZmVyZW50IHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gc3RvcCBhCisgICBuZXcgImdjIiBwcm9jZXNzIGZyb20gc3RhcnRpbmcuCisKKyAqIEFuIGVhcmxpZXIgImNsZWFuLXVwIiBpbnRyb2R1Y2VkIGFuIHVubmVjZXNzYXJ5IG1lbW9yeSBsZWFrIHRvIHRoZQorICAgY3JlZGVudGlhbCBzdWJzeXN0ZW0uCisKKyAqICJnaXQgbXYgQSBCLyIsIHdoZW4gQiBkb2VzIG5vdCBleGlzdCBhcyBhIGRpcmVjdG9yeSwgc2hvdWxkIGVycm9yCisgICBvdXQsIGJ1dCBpdCBkaWRuJ3QuCisKKyAqICJnaXQgcmV2LXBhcnNlIDxyZXZzPiAtLSA8cGF0aHM+IiBkaWQgbm90IGltcGxlbWVudCB0aGUgdXN1YWwKKyAgIGRpc2FtYmlndWF0aW9uIHJ1bGVzIHRoZSBjb21tYW5kcyBpbiB0aGUgImdpdCBsb2ciIGZhbWlseSB1c2VkIGluCisgICB0aGUgc2FtZSB3YXkuCisKKyAqICJnaXQgY2F0LWZpbGUgLS1iYXRjaD0iLCBhbiBhZG1pdHRlZGx5IHVzZWxlc3MgY29tbWFuZCwgZGlkIG5vdAorICAgYmVoYXZlIHZlcnkgd2VsbC4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOGM0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjQudHh0CkBAIC0wLDAgKzEsNDggQEAKK0dpdCB2MS44LjUuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjUuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBmZXRjaCAtLWRlcHRoPTAiIHdhcyBhIG5vLW9wLCBhbmQgd2FzIHNpbGVudGx5IGlnbm9yZWQuCisgICBEaWFnbm9zZSBpdCBhcyBhbiBlcnJvci4KKworICogUmVtb3RlIHJlcG9zaXRvcnkgVVJMIGV4cHJlc3NlZCBpbiBzY3Atc3R5bGUgaG9zdDpwYXRoIG5vdGF0aW9uIGFyZQorICAgcGFyc2VkIG1vcmUgY2FyZWZ1bGx5IChlLmcuICJmb28vYmFyOmJheiIgaXMgbG9jYWwsICJbOjoxXTovfnVzZXIiIGFza3MKKyAgIHRvIGNvbm5lY3QgdG8gdXNlcidzIGhvbWUgZGlyZWN0b3J5IG9uIGhvc3QgYXQgYWRkcmVzcyA6OjEuCisKKyAqIFNTTC1yZWxhdGVkIG9wdGlvbnMgd2VyZSBub3QgcGFzc2VkIGNvcnJlY3RseSB0byB1bmRlcmx5aW5nIHNvY2tldAorICAgbGF5ZXIgaW4gImdpdCBzZW5kLWVtYWlsIi4KKworICogImdpdCBjb21taXQgLXYiIGFwcGVuZHMgdGhlIHBhdGNoIHRvIHRoZSBsb2cgbWVzc2FnZSBiZWZvcmUKKyAgIGVkaXRpbmcsIGFuZCB0aGVuIHJlbW92ZXMgdGhlIHBhdGNoIHdoZW4gdGhlIGVkaXRvciByZXR1cm5lZAorICAgY29udHJvbC4gSG93ZXZlciwgdGhlIHBhdGNoIHdhcyBub3Qgc3RyaXBwZWQgY29ycmVjdGx5IHdoZW4gdGhlCisgICBmaXJzdCBtb2RpZmllZCBwYXRoIHdhcyBhIHN1Ym1vZHVsZS4KKworICogImdpdCBtdiBBIEIvIiwgd2hlbiBCIGRvZXMgbm90IGV4aXN0IGFzIGEgZGlyZWN0b3J5LCBzaG91bGQgZXJyb3IKKyAgIG91dCwgYnV0IGl0IGRpZG4ndC4KKworICogV2hlbiB3ZSBmaWd1cmUgb3V0IGhvdyBtYW55IGZpbGUgZGVzY3JpcHRvcnMgdG8gYWxsb2NhdGUgZm9yCisgICBrZWVwaW5nIHBhY2tmaWxlcyBvcGVuLCBhIHN5c3RlbSB3aXRoIG5vbi13b3JraW5nIGdldHJsaW1pdCgpIGNvdWxkCisgICBjYXVzZSB1cyB0byBkaWUoKSwgYnV0IGJlY2F1c2Ugd2UgbWFrZSB0aGlzIGNhbGwgb25seSB0byBnZXQgYQorICAgcm91Z2ggZXN0aW1hdGUgb2YgaG93IG1hbnkgaXMgYXZhaWxhYmxlIGFuZCB3ZSBkbyBub3QgZXZlbiBhdHRlbXB0CisgICB0byB1c2UgdXAgYWxsIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlIG91cnNlbHZlcywgaXQgaXMgbmljZXIgdG8KKyAgIGZhbGwgYmFjayB0byBhIHJlYXNvbmFibGUgbG93IHZhbHVlIHJhdGhlciB0aGFuIGR5aW5nLgorCisgKiAiZ2l0IGxvZyAtLWRlY29yYXRlIiBkaWQgbm90IGhhbmRsZSBhIHRhZyBwb2ludGVkIGJ5IGFub3RoZXIgdGFnCisgICBuaWNlbHkuCisKKyAqICJnaXQgYWRkIC1BIiAobm8gb3RoZXIgYXJndW1lbnRzKSBpbiBhIHRvdGFsbHkgZW1wdHkgd29ya2luZyB0cmVlCisgICB1c2VkIHRvIGVtaXQgYW4gZXJyb3IuCisKKyAqIFRoZXJlIGlzIG5vIHJlYXNvbiB0byBoYXZlIGEgaGFyZGNvZGVkIHVwcGVyIGxpbWl0IG9mIHRoZSBudW1iZXIgb2YKKyAgIHBhcmVudHMgZm9yIGFuIG9jdG9wdXMgbWVyZ2UsIGNyZWF0ZWQgdmlhIHRoZSBncmFmdCBtZWNoYW5pc20sIGJ1dAorICAgdGhlcmUgd2FzLgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgJ2dpdCBzdGFzaCAkY21kICJzdGFzaEB7Li4ufSInIGRpZCBub3QgcXVvdGUKKyAgIHRoZSBzdGFzaCBhcmd1bWVudCBwcm9wZXJseSBhbmQgbGVmdCBpdCBzcGxpdCBhdCBJRlMgd2hpdGVzcGFjZS4KKworICogVGhlIGRvY3VtZW50YXRpb24gdG8gImdpdCBwdWxsIiBoaW50ZWQgdGhlcmUgaXMgYW4gIi1tIiBvcHRpb24KKyAgIGJlY2F1c2UgaXQgaW5jb3JyZWN0bHkgc2hhcmVkIHRoZSBkb2N1bWVudGF0aW9uIHdpdGggImdpdCBtZXJnZSIuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTkxY2U5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS41LnR4dApAQCAtMCwwICsxLDM3IEBACitHaXQgdjEuOC41LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC41LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBwYXRoc3BlYyBtYXRjaGluZyBjb2RlLCB3aGlsZSBjb21wYXJpbmcgdHdvIHRyZWVzIChlLmcuICJnaXQKKyAgIGRpZmYgQSBCIC0tIHBhdGgxIHBhdGgyIikgd2FzIHRvbyBhZ2dyZXNzaXZlIGFuZCBmYWlsZWQgdG8gbWF0Y2gKKyAgIHNvbWUgcGF0aHMgd2hlbiBtdWx0aXBsZSBwYXRoc3BlY3Mgd2VyZSBpbnZvbHZlZC4KKworICogImdpdCByZXBhY2sgLS1tYXgtcGFjay1zaXplPThnIiBzdG9wcGVkIGJlaW5nIHBhcnNlZCBjb3JyZWN0bHkgd2hlbgorICAgdGhlIGNvbW1hbmQgd2FzIHJlaW1wbGVtZW50ZWQgaW4gQy4KKworICogQSByZWNlbnQgdXBkYXRlIHRvICJnaXQgc2VuZC1lbWFpbCIgYnJva2UgcGxhdGZvcm1zIHdoZXJlCisgICAvZXRjL3NzbC9jZXJ0cy8gZGlyZWN0b3J5IGV4aXN0cyBidXQgY2Fubm90IGJlIHVzZWQgYXMgU1NMX2NhX3BhdGgKKyAgIChlLmcuIEZlZG9yYSByYXdoaWRlKS4KKworICogQSBoYW5kZnVsIG9mIGJ1Z3MgYXJvdW5kIGludGVycHJldGluZyAkYnJhbmNoQHt1cHN0cmVhbX0gbm90YXRpb24KKyAgIGFuZCBpdHMgbG9va2FsaWtlLCB3aGVuICRicmFuY2ggcGFydCBoYXMgaW50ZXJlc3RpbmcgY2hhcmFjdGVycywKKyAgIGUuZy4gIkAiLCBhbmQgIjoiLCBoYXZlIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgY2xvbmUiIHdvdWxkIGZhaWwgdG8gY2xvbmUgZnJvbSBhIHJlcG9zaXRvcnkgdGhhdCBoYXMgYSByZWYKKyAgIGRpcmVjdGx5IHVuZGVyICJyZWZzLyIsIGUuZy4gInJlZnMvc3Rhc2giLCBiZWNhdXNlIGRpZmZlcmVudAorICAgdmFsaWRhdGlvbiBwYXRocyBkbyBkaWZmZXJlbnQgdGhpbmdzIG9uIHN1Y2ggYSByZWZuYW1lLiAgTG9vc2VuIHRoZQorICAgY2xpZW50IHNpZGUncyB2YWxpZGF0aW9uIHRvIGFsbG93IHN1Y2ggYSByZWYuCisKKyAqICJnaXQgbG9nIC0tbGVmdC1yaWdodCBBLi4uQiIgbG9zdCB0aGUgImxlZnRuZXNzIiBvZiBjb21taXRzCisgICByZWFjaGFibGUgZnJvbSBBIHdoZW4gQSBpcyBhIHRhZyBhcyBhIHNpZGUgZWZmZWN0IG9mIGEgcmVjZW50CisgICBidWdmaXguICBUaGlzIGlzIGEgcmVncmVzc2lvbiBpbiAxLjguNC54IHNlcmllcy4KKworICogImdpdCBtZXJnZS1iYXNlIC0tb2N0b3B1cyIgdXNlZCB0byBsZWF2ZSBjbGVhbmluZyB1cCBzdWJvcHRpbWFsCisgICByZXN1bHQgdG8gdGhlIGNhbGxlciwgYnV0IG5vdyBpdCBkb2VzIHRoZSBjbGVhbi11cCBpdHNlbGYuCisKKyAqICJnaXQgbXYgQSBCLyIsIHdoZW4gQiBkb2VzIG5vdCBleGlzdCBhcyBhIGRpcmVjdG9yeSwgc2hvdWxkIGVycm9yCisgICBvdXQsIGJ1dCBpdCBkaWRuJ3QuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmZmOTJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS42LnR4dApAQCAtMCwwICsxLDM0IEBACitHaXQgdjEuOC41LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC41LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdlIHVzZWQgdG8gYWxsb3cgY29tbWl0dGluZyBhIHBhdGggIi5HaXQvY29uZmlnIiB3aXRoIEdpdCB0aGF0IGlzCisgICBydW5uaW5nIG9uIGEgY2FzZSBzZW5zaXRpdmUgZmlsZXN5c3RlbSwgYnV0IGFuIGF0dGVtcHQgdG8gY2hlY2sgb3V0CisgICBzdWNoIGEgcGF0aCB3aXRoIEdpdCB0aGF0IHJ1bnMgb24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0KKyAgIHdvdWxkIGhhdmUgY2xvYmJlcmVkICIuZ2l0L2NvbmZpZyIsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IHdoYXQKKyAgIHRoZSB1c2VyIHdvdWxkIGhhdmUgZXhwZWN0ZWQuICBHaXQgbm93IHByZXZlbnRzIHlvdSBmcm9tIHRyYWNraW5nCisgICBhIHBhdGggd2l0aCAiLkdpdCIgKGluIGFueSBjYXNlIGNvbWJpbmF0aW9uKSBhcyBhIHBhdGggY29tcG9uZW50LgorCisgKiBPbiBXaW5kb3dzLCBjZXJ0YWluIHBhdGggY29tcG9uZW50cyB0aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSAiLmdpdCIKKyAgIGFyZSBtYXBwZWQgdG8gIi5naXQiLCBlLmcuICJnaXR+MS9jb25maWciIGlzIHRyZWF0ZWQgYXMgaWYgaXQgd2VyZQorICAgIi5naXQvY29uZmlnIi4gIEhGUysgaGFzIGEgc2ltaWxhciBpc3N1ZSwgd2hlcmUgY2VydGFpbiB1bmljb2RlCisgICBjb2RlcG9pbnRzIGFyZSBpZ25vcmVkLCBlLmcuICIuZ1x1MjAwY2l0L2NvbmZpZyIgaXMgdHJlYXRlZCBhcyBpZgorICAgaXQgd2VyZSAiLmdpdC9jb25maWciLiAgUGF0aG5hbWVzIHdpdGggdGhlc2UgcG90ZW50aWFsIGlzc3VlcyBhcmUKKyAgIHJlamVjdGVkIG9uIHRoZSBhZmZlY3RlZCBzeXN0ZW1zLiAgR2l0IG9uIHN5c3RlbXMgdGhhdCBhcmUgbm90CisgICBhZmZlY3RlZCBieSB0aGlzIGlzc3VlIChlLmcuIExpbnV4KSBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHRvCisgICByZWplY3QgdGhlbSB0byBlbnN1cmUgY3Jvc3MgcGxhdGZvcm0gaW50ZXJvcGVyYWJpbGl0eSBvZiB0aGUgaG9zdGVkCisgICBwcm9qZWN0cy4KKworICogImdpdCBmc2NrIiBub3RpY2VzIGEgdHJlZSBvYmplY3QgdGhhdCByZWNvcmRzIHN1Y2ggYSBwYXRoIHRoYXQgY2FuCisgICBiZSBjb25mdXNlZCB3aXRoICIuZ2l0IiwgYW5kIHdpdGggcmVjZWl2ZS5mc2NrT2JqZWN0cyBjb25maWd1cmF0aW9uCisgICBzZXQgdG8gdHJ1ZSwgYW4gYXR0ZW1wdCB0byAiZ2l0IHB1c2giIHN1Y2ggYSB0cmVlIG9iamVjdCB3aWxsIGJlCisgICByZWplY3RlZC4gIFN1Y2ggYSBwYXRoIG1heSBub3QgYmUgYSBwcm9ibGVtIG9uIGEgd2VsbCBiZWhhdmluZworICAgZmlsZXN5c3RlbSBidXQgaW4gb3JkZXIgdG8gcHJvdGVjdCB0aG9zZSBvbiBIRlMrIGFuZCBvbiBjYXNlCisgICBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcywgdGhpcyBjaGVjayBpcyBlbmFibGVkIG9uIGFsbCBwbGF0Zm9ybXMuCisKK0EgYmlnICJ0aGFua3MhIiBmb3IgYnJpbmdpbmcgdGhpcyBpc3N1ZSB0byB1cyBnb2VzIHRvIG91ciBmcmllbmRzIGluCit0aGUgTWVyY3VyaWFsIGxhbmQsIG5hbWVseSwgTWF0dCBNYWNrYWxsIGFuZCBBdWdpZSBGYWNrbGVyLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDJkZjBjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS50eHQKQEAgLTAsMCArMSw0NTYgQEAKK0dpdCB2MS44LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMgKGZvciBHaXQgMi4wKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gImdpdCBwdXNoIFskdGhlcmVdIiBkb2VzIG5vdCBzYXkgd2hhdCB0byBwdXNoLCB3ZSBoYXZlIHVzZWQgdGhlCit0cmFkaXRpb25hbCAibWF0Y2hpbmciIHNlbWFudGljcyBzbyBmYXIgKGFsbCB5b3VyIGJyYW5jaGVzIHdlcmUgc2VudAordG8gdGhlIHJlbW90ZSBhcyBsb25nIGFzIHRoZXJlIGFscmVhZHkgYXJlIGJyYW5jaGVzIG9mIHRoZSBzYW1lIG5hbWUKK292ZXIgdGhlcmUpLiAgSW4gR2l0IDIuMCwgdGhlIGRlZmF1bHQgd2lsbCBjaGFuZ2UgdG8gdGhlICJzaW1wbGUiCitzZW1hbnRpY3MsIHdoaWNoIHB1c2hlczoKKworIC0gb25seSB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIGJyYW5jaCB3aXRoIHRoZSBzYW1lIG5hbWUsIGFuZCBvbmx5CisgICB3aGVuIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBzZXQgdG8gaW50ZWdyYXRlIHdpdGggdGhhdCByZW1vdGUKKyAgIGJyYW5jaCwgaWYgeW91IGFyZSBwdXNoaW5nIHRvIHRoZSBzYW1lIHJlbW90ZSBhcyB5b3UgZmV0Y2ggZnJvbTsgb3IKKworIC0gb25seSB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIGJyYW5jaCB3aXRoIHRoZSBzYW1lIG5hbWUsIGlmIHlvdQorICAgYXJlIHB1c2hpbmcgdG8gYSByZW1vdGUgdGhhdCBpcyBub3Qgd2hlcmUgeW91IHVzdWFsbHkgZmV0Y2ggZnJvbS4KKworVXNlIHRoZSB1c2VyIHByZWZlcmVuY2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAicHVzaC5kZWZhdWx0IiB0bworY2hhbmdlIHRoaXMuICBJZiB5b3UgYXJlIGFuIG9sZC10aW1lciB3aG8gaXMgdXNlZCB0byB0aGUgIm1hdGNoaW5nIgorc2VtYW50aWNzLCB5b3UgY2FuIHNldCB0aGUgdmFyaWFibGUgdG8gIm1hdGNoaW5nIiB0byBrZWVwIHRoZQordHJhZGl0aW9uYWwgYmVoYXZpb3VyLiAgSWYgeW91IHdhbnQgdG8gbGl2ZSBpbiB0aGUgZnV0dXJlIGVhcmx5LCB5b3UKK2NhbiBzZXQgaXQgdG8gInNpbXBsZSIgdG9kYXkgd2l0aG91dCB3YWl0aW5nIGZvciBHaXQgMi4wLgorCitXaGVuICJnaXQgYWRkIC11IiAoYW5kICJnaXQgYWRkIC1BIikgaXMgcnVuIGluc2lkZSBhIHN1YmRpcmVjdG9yeSBhbmQKK2RvZXMgbm90IHNwZWNpZnkgd2hpY2ggcGF0aHMgdG8gYWRkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGl0Cit3aWxsIG9wZXJhdGUgb24gdGhlIGVudGlyZSB0cmVlIGluIEdpdCAyLjAgZm9yIGNvbnNpc3RlbmN5Cit3aXRoICJnaXQgY29tbWl0IC1hIiBhbmQgb3RoZXIgY29tbWFuZHMuICBUaGVyZSB3aWxsIGJlIG5vCittZWNoYW5pc20gdG8gbWFrZSBwbGFpbiAiZ2l0IGFkZCAtdSIgYmVoYXZlIGxpa2UgImdpdCBhZGQgLXUgLiIuCitDdXJyZW50IHVzZXJzIG9mICJnaXQgYWRkIC11IiAod2l0aG91dCBhIHBhdGhzcGVjKSBzaG91bGQgc3RhcnQKK3RyYWluaW5nIHRoZWlyIGZpbmdlcnMgdG8gZXhwbGljaXRseSBzYXkgImdpdCBhZGQgLXUgLiIKK2JlZm9yZSBHaXQgMi4wIGNvbWVzLiAgQSB3YXJuaW5nIGlzIGlzc3VlZCB3aGVuIHRoZXNlIGNvbW1hbmRzIGFyZQorcnVuIHdpdGhvdXQgYSBwYXRoc3BlYyBhbmQgd2hlbiB5b3UgaGF2ZSBsb2NhbCBjaGFuZ2VzIG91dHNpZGUgdGhlCitjdXJyZW50IGRpcmVjdG9yeSwgYmVjYXVzZSB0aGUgYmVoYXZpb3VyIGluIEdpdCAyLjAgd2lsbCBiZSBkaWZmZXJlbnQKK2Zyb20gdG9kYXkncyB2ZXJzaW9uIGluIHN1Y2ggYSBzaXR1YXRpb24uCisKK0luIEdpdCAyLjAsICJnaXQgYWRkIDxwYXRoPiIgd2lsbCBiZWhhdmUgYXMgImdpdCBhZGQgLUEgPHBhdGg+Iiwgc28KK3RoYXQgImdpdCBhZGQgZGlyLyIgd2lsbCBub3RpY2UgcGF0aHMgeW91IHJlbW92ZWQgZnJvbSB0aGUgZGlyZWN0b3J5CithbmQgcmVjb3JkIHRoZSByZW1vdmFsLiAgVmVyc2lvbnMgYmVmb3JlIEdpdCAyLjAsIGluY2x1ZGluZyB0aGlzCityZWxlYXNlLCB3aWxsIGtlZXAgaWdub3JpbmcgcmVtb3ZhbHMsIGJ1dCB0aGUgdXNlcnMgd2hvIHJlbHkgb24gdGhpcworYmVoYXZpb3VyIGFyZSBlbmNvdXJhZ2VkIHRvIHN0YXJ0IHVzaW5nICJnaXQgYWRkIC0taWdub3JlLXJlbW92YWwgPHBhdGg+Igorbm93IGJlZm9yZSAyLjAgaXMgcmVsZWFzZWQuCisKK1RoZSBkZWZhdWx0IHByZWZpeCBmb3IgImdpdCBzdm4iIHdpbGwgY2hhbmdlIGluIEdpdCAyLjAuICBGb3IgYSBsb25nCit0aW1lLCAiZ2l0IHN2biIgY3JlYXRlZCBpdHMgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGRpcmVjdGx5IHVuZGVyCityZWZzL3JlbW90ZXMsIGJ1dCBpdCB3aWxsIHBsYWNlIHRoZW0gdW5kZXIgcmVmcy9yZW1vdGVzL29yaWdpbi8gdW5sZXNzCitpdCBpcyB0b2xkIG90aGVyd2lzZSB3aXRoIGl0cyAtLXByZWZpeCBvcHRpb24uCisKKworVXBkYXRlcyBzaW5jZSB2MS44LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvcmVpZ24gaW50ZXJmYWNlcywgc3Vic3lzdGVtcyBhbmQgcG9ydHMuCisKKyAqICJnaXQtc3ZuIiBoYXMgYmVlbiB0YXVnaHQgdG8gdXNlIHRoZSBzZXJmIGxpYnJhcnksIHdoaWNoIGlzIHRoZQorICAgb25seSBvcHRpb24gU1ZOIDEuOC4wIG9mZmVycyB1cyB3aGVuIHRhbGtpbmcgdGhlIEhUVFAgcHJvdG9jb2wuCisKKyAqICJnaXQtc3ZuIiB0YWxraW5nIG92ZXIgYW4gaHR0cHM6Ly8gY29ubmVjdGlvbiB1c2luZyB0aGUgc2VyZiBsaWJyYXJ5CisgICBkdW1wZWQgY29yZSBkdWUgdG8gYSBidWcgaW4gdGhlIHNlcmYgbGlicmFyeSB0aGF0IFNWTiB1c2VzLiAgV29yaworICAgYXJvdW5kIGl0IG9uIG91ciBzaWRlLCBldmVuIHRob3VnaCB0aGUgU1ZOIHNpZGUgaXMgYmVpbmcgZml4ZWQuCisKKyAqIE9uIE1hY09TIFgsIHdlIGRldGVjdGVkIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHRoZSAicHJlLWNvbXBvc2VkCisgICB1bmljb2RlIHN0cmluZ3MiIHdvcmthcm91bmQsIGJ1dCBkaWQgbm90IGF1dG9tYXRpY2FsbHkgZW5hYmxlIGl0LgorICAgTm93IHdlIGRvLgorCisgKiByZW1vdGUtaGcgcmVtb3RlIGhlbHBlciBtaXNiZWhhdmVkIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBhIGxvY2FsIEhnCisgICByZXBvc2l0b3J5IHJlbGF0aXZlIHRvIHRoZSBob21lIGRpcmVjdG9yeSwgZS5nLiAiY2xvbmUgaGc6On4vdGhlcmUiLgorCisgKiBpbWFwLXNlbmQgcG9ydGVkIHRvIE9TIFggdXNlcyBBcHBsZSdzIHNlY3VyaXR5IGZyYW1ld29yayBpbnN0ZWFkIG9mCisgICBPcGVuU1NMJ3MuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIHRyZWF0cyBhbiBlbXB0eSBwYXRoIGdpdmVuIHRvICJscyIgYXMgdGhlIHJvb3Qgb2YKKyAgIHRoZSB0cmVlLgorCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiB4ZGctb3BlbiBjYW4gYmUgdXNlZCBhcyBhIGJyb3dzZXIgYmFja2VuZCBmb3IgImdpdCB3ZWItYnJvd3NlIgorICAgKGhlbmNlIHRvIHNob3cgImdpdCBoZWxwIC13IiBvdXRwdXQpLCB3aGVuIGF2YWlsYWJsZS4KKworICogImdpdCBncmVwIiBhbmQgImdpdCBzaG93IiBwYXkgYXR0ZW50aW9uIHRvIHRoZSAiLS10ZXh0Y29udiIgb3B0aW9uCisgICB3aGVuIHRoZXNlIGNvbW1hbmRzIGFyZSB0b2xkIHRvIG9wZXJhdGUgb24gYmxvYiBvYmplY3RzIChlLmcuICJnaXQKKyAgIGdyZXAgLWUgcGF0dGVybiAtLXRleHRjb252IEhFQUQ6TWFrZWZpbGUiKS4KKworICogImdpdCByZXBsYWNlIiBoZWxwZXIgbm8gbG9uZ2VyIGFsbG93cyBhbiBvYmplY3QgdG8gYmUgcmVwbGFjZWQgd2l0aAorICAgYW5vdGhlciBvYmplY3Qgb2YgYSBkaWZmZXJlbnQgdHlwZSB0byBhdm9pZCBjb25mdXNpb24gKHlvdSBjYW4KKyAgIHN0aWxsIG1hbnVhbGx5IGNyYWZ0IHN1Y2ggYSByZXBsYWNlbWVudCB1c2luZyAiZ2l0IHVwZGF0ZS1yZWYiLCBhcyBhbgorICAgZXNjYXBlIGhhdGNoKS4KKworICogImdpdCBzdGF0dXMiIG5vIGxvbmdlciBwcmludHMgdGhlIGRpcnR5IHN0YXR1cyBpbmZvcm1hdGlvbiBvZgorICAgc3VibW9kdWxlcyBmb3Igd2hpY2ggc3VibW9kdWxlLiRuYW1lLmlnbm9yZSBpcyBzZXQgdG8gImFsbCIuCisKKyAqICJnaXQgcmViYXNlIC1pIiBob25vdXJzIGNvcmUuYWJicmV2IHdoZW4gcHJlcGFyaW5nIHRoZSBpbnNuIHNoZWV0CisgICBmb3IgZWRpdGluZy4KKworICogImdpdCBzdGF0dXMiIGR1cmluZyBhIGNoZXJyeS1waWNrIHNob3dzIHdoaWNoIG9yaWdpbmFsIGNvbW1pdCBpcworICAgYmVpbmcgcGlja2VkLgorCisgKiBJbnN0ZWFkIG9mIHR5cGluZyBmb3VyIGNhcGl0YWwgbGV0dGVycyAiSEVBRCIsIHlvdSBjYW4gc2F5ICJAIiBub3csCisgICBlLmcuICJnaXQgbG9nIEAiLgorCisgKiAiZ2l0IGNoZWNrLWlnbm9yZSIgZm9sbG93cyB0aGUgc2FtZSBydWxlIGFzICJnaXQgYWRkIiBhbmQgImdpdAorICAgc3RhdHVzIiBpbiB0aGF0IHRoZSBpZ25vcmUvZXhjbHVkZSBtZWNoYW5pc20gZG9lcyBub3QgdGFrZSBlZmZlY3QKKyAgIG9uIHBhdGhzIHRoYXQgYXJlIGFscmVhZHkgdHJhY2tlZC4gIFdpdGggdGhlICItLW5vLWluZGV4IiBvcHRpb24sIGl0CisgICBjYW4gYmUgdXNlZCB0byBkaWFnbm9zZSB3aGljaCBwYXRocyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gaWdub3JlZAorICAgaGF2ZSBiZWVuIG1pc3Rha2VubHkgYWRkZWQgdG8gdGhlIGluZGV4LgorCisgKiBTb21lIGlycmVsZXZhbnQgImFkdmljZSIgbWVzc2FnZXMgdGhhdCBhcmUgc2hhcmVkIHdpdGggImdpdCBzdGF0dXMiCisgICBvdXRwdXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY29tbWl0IGxvZyB0ZW1wbGF0ZS4KKworICogInVwZGF0ZS1yZWZzIiBsZWFybmVkIGEgIi0tc3RkaW4iIG9wdGlvbiB0byByZWFkIG11bHRpcGxlIHVwZGF0ZQorICAgcmVxdWVzdHMgYW5kIHBlcmZvcm0gdGhlbSBpbiBhbiBhbGwtb3Itbm9uZSBmYXNoaW9uLgorCisgKiBKdXN0IGxpa2UgIm1ha2UgLUMgPGRpcmVjdG9yeT4iLCAiZ2l0IC1DIDxkaXJlY3Rvcnk+IC4uLiIgdGVsbHMgR2l0CisgICB0byBnbyB0aGVyZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KKworICogSnVzdCBsaWtlICJnaXQgY2hlY2tvdXQgLSIga25vd3MgdG8gY2hlY2sgb3V0LCBhbmQgImdpdCBtZXJnZSAtIgorICAga25vd3MgdG8gbWVyZ2UsIHRoZSBicmFuY2ggeW91IHdlcmUgcHJldmlvdXNseSBvbiwgImdpdCBjaGVycnktcGljayIKKyAgIG5vdyB1bmRlcnN0YW5kcyAiZ2l0IGNoZXJyeS1waWNrIC0iIHRvIHBpY2sgZnJvbSB0aGUgcHJldmlvdXMKKyAgIGJyYW5jaC4KKworICogImdpdCBzdGF0dXMiIG5vdyBvbWl0cyB0aGUgcHJlZml4IHRvIG1ha2UgaXRzIG91dHB1dCBhIGNvbW1lbnQgaW4gYQorICAgY29tbWl0IGxvZyBlZGl0b3IsIHdoaWNoIGlzIG5vdCBuZWNlc3NhcnkgZm9yIGh1bWFuIGNvbnN1bXB0aW9uLgorICAgU2NyaXB0cyB0aGF0IHBhcnNlIHRoZSBvdXRwdXQgb2YgImdpdCBzdGF0dXMiIGFyZSBhZHZpc2VkIHRvIHVzZQorICAgImdpdCBzdGF0dXMgLS1wb3JjZWxhaW4iIGluc3RlYWQsIGFzIGl0cyBmb3JtYXQgaXMgc3RhYmxlIGFuZCBlYXNpZXIKKyAgIHRvIHBhcnNlLgorCisgKiBUaGUgcmVmIHN5bnRheCAiZm9vXnt0YWd9IiAod2l0aCB0aGUgbGl0ZXJhbCBzdHJpbmcgInt0YWd9IikgcGVlbHMgYQorICAgdGFnIHJlZiB0byBpdHNlbGYsIGkuZS4gaXQncyBhIG5vLW9wLiwgYW5kIGZhaWxzIGlmCisgICAiZm9vIiBpcyBub3QgYSB0YWcuICAiZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB2MS4wXnt0YWd9IiBpcworICAgYSBtb3JlIGNvbnZlbmllbnQgd2F5IHRoYW4gInRlc3QgJChnaXQgY2F0LWZpbGUgLXQgdjEuMCkgPSB0YWciIHRvCisgICBjaGVjayBpZiB2MS4wIGlzIGEgdGFnLgorCisgKiAiZ2l0IGJyYW5jaCAtdiAtdiIgKGFuZCAiZ2l0IHN0YXR1cyIpIGRpZCBub3QgZGlzdGluZ3Vpc2ggYW1vbmcgYQorICAgYnJhbmNoIHRoYXQgaXMgbm90IGJhc2VkIG9uIGFueSBvdGhlciBicmFuY2gsIGEgYnJhbmNoIHRoYXQgaXMgaW4KKyAgIHN5bmMgd2l0aCBpdHMgdXBzdHJlYW0gYnJhbmNoLCBhbmQgYSBicmFuY2ggdGhhdCBpcyBjb25maWd1cmVkIHdpdGggYW4KKyAgIHVwc3RyZWFtIGJyYW5jaCB0aGF0IG5vIGxvbmdlciBleGlzdHMuCisKKyAqIEVhcmxpZXIgd2Ugc3RhcnRlZCByZWplY3RpbmcgYW55IGF0dGVtcHQgdG8gYWRkIHRoZSAwezQwfSBvYmplY3QgbmFtZSB0bworICAgdGhlIGluZGV4IGFuZCB0byB0cmVlIG9iamVjdHMsIGJ1dCBpdCBzb21ldGltZXMgaXMgbmVjZXNzYXJ5IHRvCisgICBhbGxvdyB0aGlzIHRvIGJlIGFibGUgdG8gdXNlIHRvb2xzIGxpa2UgZmlsdGVyLWJyYW5jaCB0byBjb3JyZWN0IHN1Y2gKKyAgIGJyb2tlbiB0cmVlIG9iamVjdHMuICAiZmlsdGVyLWJyYW5jaCIgY2FuIGFnYWluIGJlIHVzZWQgdG8gZG8gdGhpcy4KKworICogImdpdCBjb25maWciIGRpZCBub3QgcHJvdmlkZSBhIHdheSB0byBzZXQgb3IgYWNjZXNzIG51bWJlcnMgbGFyZ2VyCisgICB0aGFuIGEgbmF0aXZlICJpbnQiIG9uIHRoZSBwbGF0Zm9ybTsgaXQgbm93IHByb3ZpZGVzIDY0LWJpdCBzaWduZWQKKyAgIGludGVnZXJzIG9uIGFsbCBwbGF0Zm9ybXMuCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSIgYWx3YXlzIGNob3NlIHRvIGRvIHRoZSBib2ctc3RhbmRhcmQgZmxhdHRlbmluZworICAgcmViYXNlLiAgWW91IGNhbiB0ZWxsIGl0IHRvIHJ1biAicmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIiB3aXRoCisgICAiZ2l0IHB1bGwgLS1yZWJhc2U9cHJlc2VydmUiIG9yIGJ5CisgICBzZXR0aW5nICJwdWxsLnJlYmFzZSIgY29uZmlndXJhdGlvbiB0byAicHJlc2VydmUiLgorCisgKiAiZ2l0IHB1c2ggLS1uby10aGluIiBhY3R1YWxseSBkaXNhYmxlcyB0aGUgInRoaW4gcGFjayB0cmFuc2ZlciIKKyAgIG9wdGltaXphdGlvbi4KKworICogTWFnaWMgcGF0aHNwZWNzIGxpa2UgIjooaWNhc2UpbWFrZWZpbGUiIChtYXRjaGVzIGJvdGggTWFrZWZpbGUKKyAgIGFuZCBtYWtlZmlsZSkgYW5kICI6KGdsb2IpZm9vLyoqL2JhciIgKG1hdGNoZXMgImJhciIgaW4gImZvbyIKKyAgIGFuZCBhbnkgc3ViZGlyZWN0b3J5IG9mICJmb28iKSBjYW4gYmUgdXNlZCBpbiBtb3JlIHBsYWNlcy4KKworICogVGhlICJodHRwLioiIHZhcmlhYmxlcyBjYW4gbm93IGJlIHNwZWNpZmllZCBmb3IgaW5kaXZpZHVhbCBVUkxzLgorICAgRm9yIGV4YW1wbGUsCisKKyAgIFtodHRwXQorICAgICAgIHNzbFZlcmlmeSA9IHRydWUKKyAgIFtodHRwICJodHRwczovL3dlYWsuZXhhbXBsZS5jb20vIl0KKyAgICAgICBzc2xWZXJpZnkgPSBmYWxzZQorCisgICB3b3VsZCBmbGlwIGh0dHAuc3NsVmVyaWZ5IG9mZiBvbmx5IHdoZW4gdGFsa2luZyB0byB0aGF0IHNwZWNpZmljCisgICBzaXRlLgorCisgKiAiZ2l0IG12IEEgQiIgd2hlbiBtb3ZpbmcgYSBzdWJtb2R1bGUgaGFzIGJlZW4gdGF1Z2h0IHRvCisgICByZWxvY2F0ZSB0aGUgc3VibW9kdWxlJ3Mgd29ya2luZyB0cmVlIGFuZCB0byBhZGp1c3QgdGhlIHBhdGhzIGluIHRoZQorICAgLmdpdG1vZHVsZXMgZmlsZS4KKworICogImdpdCBibGFtZSIgY2FuIG5vdyB0YWtlIG1vcmUgdGhhbiBvbmUgLUwgb3B0aW9uIHRvIGRpc2NvdmVyIHRoZQorICAgb3JpZ2luIG9mIG11bHRpcGxlIGJsb2NrcyBvZiBsaW5lcy4KKworICogVGhlIGh0dHAgdHJhbnNwb3J0IGNsaWVudHMgY2FuIG9wdGlvbmFsbHkgYXNrIHRvIHNhdmUgY29va2llcworICAgd2l0aCB0aGUgaHR0cC5zYXZlY29va2llcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiAiZ2l0IHB1c2giIGxlYXJuZWQgYSBtb3JlIGZpbmUgZ3JhaW5lZCBjb250cm9sIG92ZXIgYSBibHVudAorICAgIi0tZm9yY2UiIHdoZW4gcmVxdWVzdGluZyBhIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlIHdpdGggdGhlCisgICAiLS1mb3JjZS13aXRoLWxlYXNlPTxyZWZuYW1lPjo8ZXhwZWN0ZWQgb2JqZWN0IG5hbWU+IiBvcHRpb24uCisKKyAqICJnaXQgZGlmZiAtLWRpZmYtZmlsdGVyPTxjbGFzc2VzIG9mIGNoYW5nZXM+IiBjYW4gbm93IHRha2UKKyAgIGxvd2VyY2FzZSBsZXR0ZXJzIChlLmcuICItLWRpZmYtZmlsdGVyPWQiKSB0byBtZWFuICJzaG93CisgICBldmVyeXRoaW5nIGJ1dCB0aGVzZSBjbGFzc2VzIi4gICJnaXQgZGlmZi1maWxlcyAtcSIgaXMgbm93IGEKKyAgIGRlcHJlY2F0ZWQgc3lub255bSBmb3IgImdpdCBkaWZmLWZpbGVzIC0tZGlmZi1maWx0ZXI9ZCIuCisKKyAqICJnaXQgZmV0Y2giIChoZW5jZSAiZ2l0IHB1bGwiIGFzIHdlbGwpIGxlYXJuZWQgdG8gY2hlY2sKKyAgICJmZXRjaC5wcnVuZSIgYW5kICJyZW1vdGUuKi5wcnVuZSIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYW5kCisgICB0byBiZWhhdmUgYXMgaWYgdGhlICItLXBydW5lIiBjb21tYW5kIGxpbmUgb3B0aW9uIHdhcyBnaXZlbi4KKworICogImdpdCBjaGVjay1pZ25vcmUgLXoiIGFwcGxpZWQgdGhlIE5VTCB0ZXJtaW5hdGlvbiB0byBib3RoIGl0cyBpbnB1dAorICAgKHdpdGggLS1zdGRpbikgYW5kIGl0cyBvdXRwdXQsIGJ1dCAiZ2l0IGNoZWNrLWF0dHIgLXoiIGlnbm9yZWQgdGhlCisgICBvcHRpb24gb24gdGhlIG91dHB1dCBzaWRlLiBNYWtlIGJvdGggaG9ub3IgLXogb24gdGhlIGlucHV0IGFuZAorICAgb3V0cHV0IHNpZGUgdGhlIHNhbWUgd2F5LgorCisgKiAiZ2l0IHdoYXRjaGFuZ2VkIiBtYXkgc3RpbGwgYmUgdXNlZCBieSBvbGQgdGltZXJzLCBidXQgbWVudGlvbiBvZgorICAgaXQgaW4gZG9jdW1lbnRzIG1lYW50IGZvciBuZXcgdXNlcnMgd2lsbCBvbmx5IHdhc3RlIHJlYWRlcnMnIHRpbWUKKyAgIHdvbmRlcmluZyB3aGF0IHRoZSBkaWZmZXJlbmNlIGlzIGJldHdlZW4gaXQgYW5kICJnaXQgbG9nIi4gIE1ha2UgaXQKKyAgIGxlc3MgcHJvbWluZW50IGluIHRoZSBnZW5lcmFsIHBhcnQgb2YgdGhlIGRvY3VtZW50YXRpb24gYW5kIGV4cGxhaW4KKyAgIHRoYXQgaXQgaXMgbWVyZWx5IGEgImdpdCBsb2ciIHdpdGggZGlmZmVyZW50IGRlZmF1bHQgYmVoYXZpb3VyIGluCisgICBpdHMgb3duIGRvY3VtZW50LgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgZXRjLgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiIgd2hlbiBhc2tpbmcgZm9yIG1lcmVseSB0aGUgb2JqZWN0IG5hbWUgZG9lcyBub3QKKyAgIGhhdmUgdG8gcGFyc2UgdGhlIG9iamVjdCBwb2ludGVkIGF0IGJ5IHRoZSByZWZzOyB0aGUgY29kZXBhdGggaGFzCisgICBiZWVuIG9wdGltaXplZC4KKworICogVGhlIEhUVFAgdHJhbnNwb3J0IHdpbGwgdHJ5IHRvIHVzZSBUQ1Aga2VlcGFsaXZlIHdoZW4gYWJsZS4KKworICogImdpdCByZXBhY2siIGlzIG5vdyB3cml0dGVuIGluIEMuCisKKyAqIEJ1aWxkIHByb2NlZHVyZSBmb3IgTVNWQyBoYXMgYmVlbiB1cGRhdGVkLgorCisgKiBJZiBhIGJ1aWxkLXRpbWUgZmFsbGJhY2sgaXMgc2V0IHRvICJjYXQiIGluc3RlYWQgb2YgImxlc3MiLCB3ZQorICAgc2hvdWxkIGFwcGx5IHRoZSBzYW1lICJubyBzdWJwcm9jZXNzIG9yIHBpcGUiIG9wdGltaXphdGlvbiBhcyB3ZQorICAgYXBwbHkgdG8gdXNlci1zdXBwbGllZCBHSVRfUEFHRVI9Y2F0LgorCisgKiBNYW55IGNvbW1hbmRzIHVzZSBhIC0tZGFzaGVkLW9wdGlvbiBhcyBhbiBvcGVyYXRpb24gbW9kZSBzZWxlY3RvcgorICAgKGUuZy4gImdpdCB0YWcgLS1kZWxldGUiKSB0aGF0IGV4Y2x1ZGVzIG90aGVyIG9wZXJhdGlvbiBtb2RlcworICAgKGUuZy4gImdpdCB0YWcgLS1kZWxldGUgLS12ZXJpZnkiIGlzIG5vbnNlbnNlKSBhbmQgdGhhdCBjYW5ub3QgYmUKKyAgIG5lZ2F0ZWQgKGUuZy4gImdpdCB0YWcgLS1uby1kZWxldGUiIGlzIG5vbnNlbnNlKS4gIFRoZSBwYXJzZS1vcHRpb25zCisgICBBUEkgbGVhcm5lZCBhIG5ldyBPUFRfQ01ETU9ERSBtYWNybyB0byBtYWtlIGl0IGVhc2llciB0byBpbXBsZW1lbnQKKyAgIHN1Y2ggYSBzZXQgb2Ygb3B0aW9ucy4KKworICogT1BUX0JPT0xFQU4oKSBpbiB0aGUgcGFyc2Utb3B0aW9ucyBBUEkgd2FzIG1pc2Rlc2lnbmVkIHRvIGJlICJjb3VudGluZworICAgdXAiIGJ1dCBtYW55IHN1YmNvbW1hbmRzIGV4cGVjdCBpdCB0byBiZWhhdmUgYXMgIm9uL29mZiIuIFVwZGF0ZQorICAgdGhlbSB0byB1c2UgT1BUX0JPT0woKSB3aGljaCBpcyBhIHByb3BlciBib29sZWFuLgorCisgKiAiZ2l0IGdjIiBleGl0cyBlYXJseSB3aXRob3V0IGRvaW5nIGFueSB3b3JrIHdoZW4gaXQgZGV0ZWN0cworICAgdGhhdCBhbm90aGVyIGluc3RhbmNlIG9mIGl0c2VsZiBpcyBhbHJlYWR5IHJ1bm5pbmcuCisKKyAqIFVuZGVyIG1lbW9yeSBwcmVzc3VyZSBhbmQvb3IgZmlsZSBkZXNjcmlwdG9yIHByZXNzdXJlLCB3ZSB1c2VkIHRvCisgICBjbG9zZSBwYWNrIHdpbmRvd3MgdGhhdCBhcmUgbm90IHVzZWQgYW5kIGFsc28gY2xvc2VkIGZpbGVoYW5kbGVzIHRvCisgICBvcGVuIGJ1dCB1bnVzZWQgcGFja2ZpbGVzLiBUaGVzZSBhcmUgbm93IGNvbnRyb2xsZWQgc2VwYXJhdGVseQorICAgdG8gYmV0dGVyIGNvcGUgd2l0aCB0aGUgbG9hZC4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuOC40CistLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS44LjQgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycgbm90ZXMgZm9yCitkZXRhaWxzKS4KKworICogQW4gYW5jaWVudCBIb3ctVG8gb24gc2VydmluZyBHaXQgcmVwb3NpdG9yaWVzIG9uIGFuIEhUVFAgc2VydmVyCisgICBsYWNrZWQgYSB3YXJuaW5nIHRoYXQgaXQgaGFzIGJlZW4gbW9zdGx5IHN1cGVyc2VkZWQgd2l0aCBhIG1vcmUKKyAgIG1vZGVybiB3YXkuCisgICAobWVyZ2UgNmQ1MmJjMyBzYy9kb2MtaG93dG8tZHVtYi1odHRwIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHVzZSBvZiBQZXJsIGluIG91ciB0ZXN0IHN1aXRlIGFuZCBOT19QRVJMCisgICBoYXMgYmVlbiBjbGFyaWZpZWQgYSBiaXQuCisgICAobWVyZ2UgZjhmYzBlZSBqbi90ZXN0LXByZXJlcS1wZXJsLWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzeW5vcHNpcyBzZWN0aW9uIG9mIHRoZSAiZ2l0IHVucGFjay1vYmplY3RzIiBkb2N1bWVudGF0aW9uIGhhcyBiZWVuCisgICBjbGFyaWZpZWQgYSBiaXQuCisgICAobWVyZ2UgNjFlMmUyMiB2ZC9kb2MtdW5wYWNrLW9iamVjdHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSBkaWQgbm90IGdlbmVyYXRlIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50YXRpb24gdG8gImdpdCBzdWJ0cmVlIgorICAgaW4gY29udHJpYi8uCisgICAobWVyZ2UgOTVjNjJmYiBqay9zdWJ0cmVlLWluc3RhbGwtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQSBmYXN0LWltcG9ydCBzdHJlYW0gZXhwcmVzc2VzIGEgcGF0aG5hbWUgd2l0aCBmdW5ueSBjaGFyYWN0ZXJzIGJ5CisgICBxdW90aW5nIHRoZW0gaW4gQyBzdHlsZTsgdGhlIHJlbW90ZS1oZyByZW1vdGUgaGVscGVyIGZvcmdvdCB0byB1bnF1b3RlCisgICBzdWNoIGEgcGF0aC4KKyAgIChtZXJnZSAxMTM2MjY1IGFwL3JlbW90ZS1oZy11bnF1b3RlLWNxdW90ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmVzZXQgLXAgSEVBRCIgaGFzIGEgY29kZXBhdGggdG8gc3BlY2lhbC1jYXNlIGl0IHRvIGJlaGF2ZQorICAgZGlmZmVyZW50bHkgZnJvbSByZXNldHRpbmcgdG8gY29udGVudHMgb2Ygb3RoZXIgY29tbWl0cywgYnV0IGEKKyAgIHJlY2VudCBjaGFuZ2UgYnJva2UgaXQuCisKKyAqIENvbG9yaW5nIGFyb3VuZCBvY3RvcHVzIG1lcmdlcyBpbiAibG9nIC0tZ3JhcGgiIG91dHB1dCB3YXMgc2NyZXd5LgorICAgKG1lcmdlIDMzOWMxN2IgaG4vbG9nLWdyYXBoLWNvbG9yLW9jdG9wdXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNoZWNrb3V0IHRvcGljIiwgd2hlbiB0aGVyZSBpcyBub3QgeWV0IGEgbG9jYWwgInRvcGljIiBicmFuY2gKKyAgIGJ1dCB0aGVyZSBpcyBhIHVuaXF1ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciBhIHJlbW90ZSAidG9waWMiCisgICBicmFuY2gsIHByZXRlbmRlZCBhcyBpZiAiZ2l0IGNoZWNrb3V0IC10IC1iIHRvcGljIHJlbW90ZS8kci90b3BpYyIKKyAgIChmb3IgdGhhdCB1bmlxdWUgcmVtb3RlICRyKSB3YXMgcnVuLiBUaGlzIGhhY2sgaG93ZXZlciB3YXMgbm90CisgICBpbXBsZW1lbnRlZCBmb3IgImdpdCBjaGVja291dCB0b3BpYyAtLSIuCisgICAobWVyZ2UgYmNhMzk2OSBtbS9jaGVja291dC1hdXRvLXRyYWNrLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIE9uZSBsb25nLXN0YW5kaW5nIGZsYXcgaW4gdGhlIHBhY2sgdHJhbnNmZXIgcHJvdG9jb2wgdXNlZCBieSAiZ2l0CisgICBjbG9uZSIgd2FzIHRoYXQgdGhlcmUgd2FzIG5vIHdheSB0byB0ZWxsIHRoZSBvdGhlciBlbmQgd2hpY2ggYnJhbmNoCisgICAiSEVBRCIgcG9pbnRzIGF0LCBhbmQgdGhlIHJlY2VpdmluZyBlbmQgbmVlZGVkIHRvIGd1ZXNzLiAgQSBuZXcKKyAgIGNhcGFiaWxpdHkgaGFzIGJlZW4gZGVmaW5lZCBpbiB0aGUgcGFjayBwcm90b2NvbCB0byBjb252ZXkgdGhpcworICAgaW5mb3JtYXRpb24gc28gdGhhdCBjbG9uaW5nIGZyb20gYSByZXBvc2l0b3J5IHdpdGggbW9yZSB0aGFuIG9uZQorICAgYnJhbmNoIHBvaW50aW5nIGF0IHRoZSBzYW1lIGNvbW1pdCB3aGVyZSB0aGUgSEVBRCBpcyBhdCBub3cKKyAgIHJlbGlhYmx5IHNldHMgdGhlIGluaXRpYWwgYnJhbmNoIGluIHRoZSByZXN1bHRpbmcgcmVwb3NpdG9yeS4KKyAgIChtZXJnZSAzNjBhMzI2IGpjL3VwbG9hZC1wYWNrLXNlbmQtc3ltcmVmIGxhdGVyIHRvIG1haW50KS4KKworICogV2UgZGlkIG5vdCBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIGh0dHAgdHJhbnNwb3J0IGdldHMgcmVkaXJlY3RlZCBkdXJpbmcKKyAgIHRoZSBhdXRob3JpemF0aW9uIHJlcXVlc3QgKGUuZy4gZnJvbSBodHRwOi8vIHRvIGh0dHBzOi8vKS4KKyAgIChtZXJnZSA3MDkwMGVkIGprL2h0dHAtYXV0aC1yZWRpcmVjdHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBCYXNoIHByb21wdGluZyBjb2RlIHRvIGRlYWwgd2l0aCBhbiBTVk4gcmVtb3RlIGFzIGFuIHVwc3RyZWFtCisgICB3YXMgY29kZWQgaW4gYSB3YXkgdW5zdXBwb3J0ZWQgYnkgb2xkZXIgQmFzaCB2ZXJzaW9ucyAoMy54KS4KKyAgIChtZXJnZSA1MmVjODg5IHNnL3Byb21wdC1zdm4tcmVtb3RlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBmYWxsLWJhY2sgcGFyc2luZyBvZiBjb21taXQgb2JqZWN0cyB3aXRoIGJyb2tlbiBhdXRob3Igb3IKKyAgIGNvbW1pdHRlciBsaW5lcyB3YXMgbGVzcyByb2J1c3QgdGhhbiBpZGVhbCBpbiBwaWNraW5nIHVwIHRoZQorICAgdGltZXN0YW1wcy4KKyAgIChtZXJnZSAwMzgxOGE0IGprL3NwbGl0LWJyb2tlbi1pZGVudCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1vYmplY3RzIF52MS4wXiB2MS4wIiBnYXZlIHRoZSB2MS4wIHRhZyBpdHNlbGYgaW4gdGhlCisgICBvdXRwdXQsIGJ1dCAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyB2MS4wXi4udjEuMCIgZGlkIG5vdC4KKyAgIChtZXJnZSA4OTVjNWJhIGpjL3JldmlzaW9uLXJhbmdlLXVucGVlbCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2xvbmUiIHdyb3RlIHNvbWUgcHJvZ3Jlc3MgbWVzc2FnZXMgdG8gc3RhbmRhcmQgb3V0cHV0LCBub3QKKyAgIHRvIHN0YW5kYXJkIGVycm9yLCBhbmQgZGlkIG5vdCBzdXBwcmVzcyB0aGVtIHdpdGggdGhlCisgICAtLW5vLXByb2dyZXNzIG9wdGlvbi4KKyAgIChtZXJnZSA2NDNmOTE4IGprL2Nsb25lLXByb2dyZXNzLXRvLXN0ZGVyciBsYXRlciB0byBtYWludCkuCisKKyAqICJmb3JtYXQtcGF0Y2ggLS1mcm9tPTx3aG9tPiIgZm9yZ290IHRvIG9taXQgYW4gdW5uZWNlc3NhcnkgaW4tYm9keQorICAgZnJvbSBsaW5lLCBpLmUuIHdoZW4gPHdob20+IGlzIHRoZSBzYW1lIGFzIHRoZSByZWFsIGF1dGhvci4KKyAgIChtZXJnZSA2NjJjYzMwIGprL2Zvcm1hdC1wYXRjaC1mcm9tIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzaG9ydGxvZyIgdXNlZCB0byBjaG9rZSBhbmQgZGllIHdoZW4gdGhlcmUgaXMgYSBtYWxmb3JtZWQKKyAgIGNvbW1pdCAoZS5nLiBtaXNzaW5nIGF1dGhvcnMpOyBpdCBub3cgc2ltcGx5IGlnbm9yZXMgc3VjaCBhIGNvbW1pdAorICAgYW5kIGtlZXBzIGdvaW5nLgorICAgKG1lcmdlIGNkNGYwOWUgamsvc2hvcnRsb2ctdG9sZXJhdGUtYnJva2VuLWNvbW1pdCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2UtcmVjdXJzaXZlIiBkaWQgbm90IHBhcnNlIGl0cyAiLS1kaWZmLWFsZ29yaXRobT0iIGNvbW1hbmQKKyAgIGxpbmUgb3B0aW9uIGNvcnJlY3RseS4KKyAgIChtZXJnZSA2NTYyOTI4IGprL2RpZmYtYWxnbyBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gcnVubmluZyAiZmV0Y2ggLXEiLCBhIGxvbmcgc2lsZW5jZSB3aGlsZSB0aGUgc2VuZGVyIHNpZGUKKyAgIGNvbXB1dGVzIHRoZSBzZXQgb2Ygb2JqZWN0cyB0byBzZW5kIGNhbiBiZSBtaXN0YWtlbiBieSBwcm94aWVzIGFzCisgICBkcm9wcGVkIGNvbm5lY3Rpb24uICBUaGUgc2VydmVyIHNpZGUgaGFzIGJlZW4gdGF1Z2h0IHRvIHNlbmQgYQorICAgc21hbGwgZW1wdHkgbWVzc2FnZXMgdG8ga2VlcCB0aGUgY29ubmVjdGlvbiBhbGl2ZS4KKyAgIChtZXJnZSAxMTVkZWRkIGprL3VwbG9hZC1wYWNrLWtlZXBhbGl2ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIiBoYWQgYSBwb3J0YWJpbGl0eSByZWdyZXNzaW9uIGluIHYxLjguNCB0aGF0IHRyaWdnZXJlZCBhCisgICBidWcgaW4gc29tZSBCU0Qgc2hlbGwgaW1wbGVtZW50YXRpb25zLgorICAgKG1lcmdlIDk5ODU1ZGQgbW0vcmViYXNlLWNvbnRpbnVlLWZyZWVic2QtV0IgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGJyYW5jaCAtLXRyYWNrIiBoYWQgYSBtaW5vciByZWdyZXNzaW9uIGluIHYxLjguMy4yIGFuZCBsYXRlcgorICAgdGhhdCBtYWRlIGl0IGltcG9zc2libGUgdG8gYmFzZSB5b3VyIGxvY2FsIHdvcmsgb24gYW55dGhpbmcgYnV0IGEKKyAgIGxvY2FsIGJyYW5jaCBvZiB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeSB5b3UgYXJlIHRyYWNraW5nLgorICAgKG1lcmdlIGIwZjQ5ZmYgamgvY2hlY2tvdXQtYXV0by10cmFja2luZyBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gdGhlIHdlYiBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCAiNDA1IE1ldGhvZCBOb3QgQWxsb3dlZCIsICJnaXQKKyAgIGh0dHAtYmFja2VuZCIgc2hvdWxkIHRlbGwgdGhlIGNsaWVudCB3aGF0IG1ldGhvZHMgYXJlIGFsbG93ZWQgd2l0aAorICAgdGhlICJBbGxvdyIgaGVhZGVyLgorICAgKG1lcmdlIDkyNDdiZTAgYmMvaHR0cC1iYWNrZW5kLWFsbG93LTQwNSBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gdGhlcmUgaXMgbm8gc3VmZmljaWVudCBvdmVybGFwIGJldHdlZW4gb2xkIGFuZCBuZXcgaGlzdG9yeQorICAgZHVyaW5nIGEgImdpdCBmZXRjaCIgaW50byBhIHNoYWxsb3cgcmVwb3NpdG9yeSwgb2JqZWN0cyB0aGF0IHRoZQorICAgc2VuZGluZyBzaWRlIGtub3dzIHRoZSByZWNlaXZpbmcgZW5kIGhhcyB3ZXJlIHVubmVjZXNzYXJpbHkgc2VudC4KKyAgIChtZXJnZSBmMjFkMmE3IG5kL2ZldGNoLWludG8tc2hhbGxvdyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY3Zzc2VydmVyIiBjb21wdXRlZCB0aGUgcGVybWlzc2lvbiBtb2RlIGJpdHMgaW5jb3JyZWN0bHkgZm9yCisgICBleGVjdXRhYmxlIGZpbGVzLgorICAgKG1lcmdlIDFiNDhkNTYgamMvY3Zzc2VydmVyLXBlcm0tYml0LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gc2VuZC1lbWFpbCBvYnRhaW5zIGFuIGVycm9yIG1lc3NhZ2UgdG8gZGllIHdpdGggdXBvbgorICAgZmFpbHVyZSB0byBzdGFydCBhbiBTU0wgc2Vzc2lvbiwgaXQgdHJpZWQgdG8gcmVhZCB0aGUgZXJyb3Igc3RyaW5nCisgICBmcm9tIGEgd3JvbmcgcGxhY2UuCisgICAobWVyZ2UgNmNiMGM4OCBiYy9zZW5kLWVtYWlsLXNzbC1kaWUtbWVzc2FnZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgImFkZCAtaSIgaGFzIHNvbWUgY3JpcHBsaW5nIGNvZGUgdG8gd29yayBhcm91bmQgYW4KKyAgIEFjdGl2ZVN0YXRlIFBlcmwgbGltaXRhdGlvbiBidXQgaXQgYnkgbWlzdGFrZSBhbHNvIHRyaWdnZXJlZCBvbiBHaXQKKyAgIGZvciBXaW5kb3dzIHdoZXJlIE1TWVMgcGVybCBpcyB1c2VkLgorICAgKG1lcmdlIGRmMTdlNzcganMvYWRkLWktbWluZ3cgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSBtYWRlIHN1cmUgdGhhdCB3ZSBub3RpY2Ugd2hlbiB0aGUgdXNlci1zdXBwbGllZCBHSVRfRElSIGlzIGFjdHVhbGx5IGEKKyAgIGdpdGZpbGUsIGJ1dCBkaWQgbm90IGRvIHRoZSBzYW1lIHdoZW4gdGhlIGRlZmF1bHQgIi5naXQiIGlzIGEKKyAgIGdpdGZpbGUuCisgICAobWVyZ2UgNDg3YTJiNyBuZC9naXQtZGlyLXBvaW50aW5nLWF0LWdpdGZpbGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuIGFuIG9iamVjdCBpcyBub3QgZm91bmQgYWZ0ZXIgY2hlY2tpbmcgdGhlIHBhY2tmaWxlcyBhbmQgdGhlCisgICBsb29zZSBvYmplY3QgZGlyZWN0b3J5LCByZWFkX3NoYTFfZmlsZSgpIHJlLWNoZWNrcyB0aGUgcGFja2ZpbGVzIHRvCisgICBwcmV2ZW50IHJhY2luZyB3aXRoIGEgY29uY3VycmVudCByZXBhY2tlcjsgdGVhY2ggdGhlIHNhbWUgbG9naWMgdG8KKyAgIGhhc19zaGExX2ZpbGUoKS4KKyAgIChtZXJnZSA0NWU4YTc0IGprL2hhcy1zaGExLWZpbGUtcmV0cnktcGFja2VkIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjb21taXQgLS1hdXRob3I9JG5hbWUiLCB3aGVuICRuYW1lIGlzIG5vdCBpbiB0aGUgY2Fub25pY2FsCisgICAiQS4gVS4gVGhvciA8YXUudGhvckBleGFtcGxlLnh6PiIgZm9ybWF0LCBsb29rcyBmb3IgYSBtYXRjaGluZyBuYW1lCisgICBmcm9tIGV4aXN0aW5nIGhpc3RvcnksIGJ1dCBkaWQgbm90IGNvbnN1bHQgbWFpbG1hcCB0byBncmFiIHRoZQorICAgcHJlZmVycmVkIGF1dGhvciBuYW1lLgorICAgKG1lcmdlIGVhMTY3OTQgYXAvY29tbWl0LWF1dGhvci1tYWlsbWFwIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBscy1maWxlcyAtayIgbmVlZHMgdG8gY3Jhd2wgb25seSB0aGUgcGFydCBvZiB0aGUgd29ya2luZyB0cmVlCisgICB0aGF0IG1heSBvdmVybGFwIHRoZSBwYXRocyBpbiB0aGUgaW5kZXggdG8gZmluZCBraWxsZWQgZmlsZXMsIGJ1dAorICAgc2hhcmVkIGNvZGUgd2l0aCB0aGUgbG9naWMgdG8gZmluZCBhbGwgdGhlIHVudHJhY2tlZCBmaWxlcywgd2hpY2gKKyAgIG1hZGUgaXQgdW5uZWNlc3NhcmlseSBpbmVmZmljaWVudC4KKyAgIChtZXJnZSA2ODBiZTA0IGpjL2xzLWZpbGVzLWtpbGxlZC1vcHRpbSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzaG9ydGVuZWQgY29tbWl0IG9iamVjdCBuYW1lcyBpbiB0aGUgaW5zbiBzaGVldCB0aGF0IGlzIHByZXBhcmVkIGF0IHRoZQorICAgYmVnaW5uaW5nIG9mIGEgInJlYmFzZSAtaSIgc2Vzc2lvbiBjYW4gYmVjb21lIGFtYmlndW91cyBhcyB0aGUKKyAgIHJlYmFzaW5nIHByb2dyZXNzZXMgYW5kIHRoZSByZXBvc2l0b3J5IGdhaW5zIG1vcmUgY29tbWl0cy4gTWFrZQorICAgc3VyZSB0aGUgaW50ZXJuYWwgcmVjb3JkIGlzIGtlcHQgd2l0aCBmdWxsIDQwLWhleCBvYmplY3QgbmFtZXMuCisgICAobWVyZ2UgNzVjNjk3NiBlcy9yZWJhc2UtaS1uby1hYmJyZXYgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyIgaW50ZXJuYWxseSB1c2VkIHRoZSBtZXJnZSBtYWNoaW5lcnkKKyAgIGFuZCBhcyBhIHNpZGUgZWZmZWN0IGxlZnQgdGhlIG1lcmdlIHN1bW1hcnkgbWVzc2FnZSBpbiB0aGUgbG9nLCBidXQKKyAgIHdoZW4gcmViYXNpbmcgdGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhlIG1lcmdlIHN1bW1hcnkuCisgICAobWVyZ2UgYTlmNzM5YyBydC9yZWJhc2UtcC1uby1tZXJnZS1zdW1tYXJ5IGxhdGVyIHRvIG1haW50KS4KKworICogQSBjYWxsIHRvIHhyZWFkKCkgd2FzIHVzZWQgd2l0aG91dCBhIGxvb3AgYXJvdW5kIGl0IHRvIGNvcGUgd2l0aCBzaG9ydAorICAgcmVhZHMgaW4gdGhlIGNvZGVwYXRoIHRvIHN0cmVhbSBuZXcgY29udGVudHMgdG8gYSBwYWNrLgorICAgKG1lcmdlIGU5MjUyN2MganMveHJlYWQtaW4tZnVsbCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC1pIiBmb3Jnb3QgdGhhdCB0aGUgY29tbWVudCBjaGFyYWN0ZXIgaXMKKyAgIGNvbmZpZ3VyYWJsZSB3aGlsZSByZWFkaW5nIGl0cyBpbnNuIHNoZWV0LgorICAgKG1lcmdlIDdiY2E3YWYgZXMvcmViYXNlLWktcmVzcGVjdC1jb3JlLWNvbW1lbnRjaGFyIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIG1haWxtYXAgc3VwcG9ydCBjb2RlIHJlYWQgcGFzdCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciB3aGVuIHRoZQorICAgbWFpbG1hcCBmaWxlIGVuZGVkIHdpdGggYW4gaW5jb21wbGV0ZSBsaW5lLgorICAgKG1lcmdlIGY5NzJhMTYgamsvbWFpbG1hcC1pbmNvbXBsZXRlLWxpbmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSB1c2VkIHRvIHNlbmQgYSBsYXJnZSByZXF1ZXN0IHRvIHJlYWQoMikvd3JpdGUoMikgYXMgYSBzaW5nbGUKKyAgIHN5c3RlbSBjYWxsLCB3aGljaCB3YXMgYmFkIGZyb20gdGhlIGxhdGVuY3kgcG9pbnQgb2YgdmlldyB3aGVuCisgICB0aGUgb3BlcmF0aW9uIG5lZWRzIHRvIGJlIGtpbGxlZCwgYW5kIGFsc28gdHJpZ2dlcmVkIGFuIGVycm9yIG9uCisgICBicm9rZW4gNjQtYml0IHN5c3RlbXMgdGhhdCByZWZ1c2UgdG8gcmVhZCBvciB3cml0ZSBtb3JlIHRoYW4gMkdCCisgICBpbiBvbmUgZ28uCisgICAobWVyZ2UgYTQ4NzkxNiBzcC9jbGlwLXJlYWQtd3JpdGUtdG8tOG1iIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCIgdGhhdCBhdXRvLWZvbGxvd2VkIHRhZ3MgaW5jb3JyZWN0bHkgcmV1c2VkIHRoZQorICAgY29ubmVjdGlvbiB3aXRoIEdpdC1hd2FyZSB0cmFuc3BvcnQgaGVscGVyIChsaWtlIHRoZSBzYW1wbGUgImV4dDo6IgorICAgaGVscGVyIHNoaXBwZWQgd2l0aCBHaXQpLgorICAgKG1lcmdlIDBmNzNmOGIgamMvdHJhbnNwb3J0LWRvLW5vdC11c2UtY29ubmVjdC10d2ljZS1pbi1mZXRjaCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbG9nIC0tZnVsbC1kaWZmIC0tIDxwYXRoc3BlYz4iIHNob3dlZCBhIGh1Z2UgZGlmZiBmb3IgcGF0aHMKKyAgIG91dHNpZGUgdGhlIGdpdmVuIDxwYXRoc3BlYz4gZm9yIGVhY2ggY29tbWl0LCBpbnN0ZWFkIG9mIHNob3dpbmcKKyAgIHRoZSBjaGFuZ2UgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBvZiB0aGUgY29tbWl0LiAgImdpdCByZWZsb2cgLXAiCisgICBoYWQgYSBzaW1pbGFyIHByb2JsZW0uCisgICAobWVyZ2UgODM4ZjlhMSB0ci9sb2ctZnVsbC1kaWZmLWtlZXAtdHJ1ZS1wYXJlbnRzIGxhdGVyIHRvIG1haW50KS4KKworICogU2V0dGluZyBhIHN1Ym1vZHVsZS4qLnBhdGggY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byB0cnVlICh3aXRob3V0CisgICBnaXZpbmcgIj0gdmFsdWUiKSBjYXVzZWQgR2l0IHRvIHNlZ2ZhdWx0LgorICAgKG1lcmdlIDRiMDU0NDAgamwvc29tZS1zdWJtb2R1bGUtY29uZmlnLWFyZS1ub3QtYm9vbGVhbiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC1pIiAodGhlcmUgY291bGQgYmUgb3RoZXJzLCBhcyB0aGUgcm9vdCBjYXVzZSBpcyBwcmV0dHkKKyAgIGdlbmVyaWMpIGZlZCBhIHJhbmRvbSwgZGF0YSBkZXBlbmRlbnQgc3RyaW5nIHRvICdlY2hvJyBhbmQKKyAgIGV4cGVjdGVkIGl0IHRvIGNvbWUgb3V0IGxpdGVyYWxseSwgY29ycnVwdGluZyBpdHMgZXJyb3IgbWVzc2FnZS4KKyAgIChtZXJnZSA4OWIwMjMwIG1tL25vLXNoZWxsLWVzY2FwZS1pbi1kaWUtbWVzc2FnZSBsYXRlciB0byBtYWludCkuCisKKyAqIFNvbWUgcGVvcGxlIHN0aWxsIHVzZSByYXRoZXIgb2xkIHZlcnNpb25zIG9mIGJhc2gsIHdoaWNoIGNhbm5vdAorICAgZ3JvayBzb21lIGNvbnN0cnVjdHMgbGlrZSAncHJpbnRmIC12IHZhcm5hbWUnIHdoaWNoIHRoZSBwcm9tcHQgYW5kCisgICBjb21wbGV0aW9uIGNvZGUgc3RhcnRlZCB0byB1c2UgcmVjZW50bHkuCisgICAobWVyZ2UgYTQ0YWE2OSBiYy9jb21wbGV0aW9uLWZvci1iYXNoLTMuMCBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgdG8gcmVhZCBjb25maWd1cmF0aW9uIGZyb20gYSBibG9iIG9iamVjdCBkaWQgbm90IGNvbXBpbGUgb24KKyAgIHBsYXRmb3JtcyB3aXRoIGZnZXRjKCkgZXRjLiBpbXBsZW1lbnRlZCBhcyBtYWNyb3MuCisgICAobWVyZ2UgNDlkNmNmYSBodi9jb25maWctZnJvbS1ibG9iIGxhdGVyIHRvIG1haW50LTEuOC4zKS4KKworICogVGhlIHJlY2VudCAic2hvcnQtY3V0IGNsb25lIGNvbm5lY3Rpdml0eSBjaGVjayIgdG9waWMgYnJva2UgYQorICAgc2hhbGxvdyByZXBvc2l0b3J5IHdoZW4gYSBmZXRjaCBvcGVyYXRpb24gdHJpZXMgdG8gYXV0by1mb2xsb3cgdGFncy4KKyAgIChtZXJnZSA2ZGE4YmRjIG5kL2ZldGNoLXBhY2stc2hhbGxvdy1maXggbGF0ZXIgdG8gbWFpbnQtMS44LjMpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTRiODhhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuMC50eHQKQEAgLTAsMCArMSwzNDUgQEAKK0dpdCB2MS45LjAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworImdpdCBzdWJtb2R1bGUgZm9yZWFjaCAkY21kICRhcmdzIiB1c2VkIHRvIHRyZWF0ICIkY21kICRhcmdzIiB0aGUgc2FtZQord2F5ICJzc2giIGRpZCwgY29uY2F0ZW5hdGluZyB0aGVtIGludG8gYSBzaW5nbGUgc3RyaW5nIGFuZCBsZXR0aW5nIHRoZQorc2hlbGwgdW5xdW90ZS4gQ2FyZWxlc3MgdXNlcnMgd2hvIGZvcmdldCB0byBzdWZmaWNpZW50bHkgcXVvdGUgJGFyZ3MKK2dldCB0aGVpciBhcmd1bWVudCBzcGxpdCBhdCAkSUZTIHdoaXRlc3BhY2VzIGJ5IHRoZSBzaGVsbCwgYW5kIGdvdAordW5leHBlY3RlZCByZXN1bHRzIGR1ZSB0byB0aGlzLiBTdGFydGluZyBmcm9tIHRoaXMgcmVsZWFzZSwgdGhlCitjb21tYW5kIGxpbmUgaXMgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBzaGVsbCwgaWYgaXQgaGFzIGFuIGFyZ3VtZW50LgorCitSZWFkLW9ubHkgc3VwcG9ydCBmb3IgZXhwZXJpbWVudGFsIGxvb3NlLW9iamVjdCBmb3JtYXQsIGluIHdoaWNoIHVzZXJzCitjb3VsZCBvcHRpb25hbGx5IGNob29zZSB0byB3cml0ZSB0aGVpciBsb29zZSBvYmplY3RzIGZvciBhIHNob3J0Cit3aGlsZSBiZXR3ZWVuIHYxLjQuMyBhbmQgdjEuNS4zIGVyYSwgaGFzIGJlZW4gZHJvcHBlZC4KKworVGhlIG1lYW5pbmdzIG9mIHRoZSAiLS10YWdzIiBvcHRpb24gdG8gImdpdCBmZXRjaCIgaGFzIGNoYW5nZWQ7IHRoZQorY29tbWFuZCBmZXRjaGVzIHRhZ3MgX2luIGFkZGl0aW9uIHRvXyB3aGF0IGlzIGZldGNoZWQgYnkgdGhlIHNhbWUKK2NvbW1hbmQgbGluZSB3aXRob3V0IHRoZSBvcHRpb24uCisKK1RoZSB3YXkgImdpdCBwdXNoICR0aGVyZSAkd2hhdCIgaW50ZXJwcmV0cyB0aGUgJHdoYXQgcGFydCBnaXZlbiBvbiB0aGUKK2NvbW1hbmQgbGluZSwgd2hlbiBpdCBkb2VzIG5vdCBoYXZlIGEgY29sb24gdGhhdCBleHBsaWNpdGx5IHRlbGxzIHVzCit3aGF0IHJlZiBhdCB0aGUgJHRoZXJlIHJlcG9zaXRvcnkgaXMgdG8gYmUgdXBkYXRlZCwgaGFzIGJlZW4gZW5oYW5jZWQuCisKK0EgaGFuZGZ1bCBvZiBhbmNpZW50IGNvbW1hbmRzIHRoYXQgaGF2ZSBsb25nIGJlZW4gZGVwcmVjYXRlZCBhcmUKK2ZpbmFsbHkgZ29uZSAocmVwby1jb25maWcsIHRhci10cmVlLCBsb3N0LWZvdW5kLCBhbmQgcGVlay1yZW1vdGUpLgorCisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMgKGZvciBHaXQgMi4wLjApCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuICJnaXQgcHVzaCBbJHRoZXJlXSIgZG9lcyBub3Qgc2F5IHdoYXQgdG8gcHVzaCwgd2UgaGF2ZSB1c2VkIHRoZQordHJhZGl0aW9uYWwgIm1hdGNoaW5nIiBzZW1hbnRpY3Mgc28gZmFyIChhbGwgeW91ciBicmFuY2hlcyB3ZXJlIHNlbnQKK3RvIHRoZSByZW1vdGUgYXMgbG9uZyBhcyB0aGVyZSBhbHJlYWR5IGFyZSBicmFuY2hlcyBvZiB0aGUgc2FtZSBuYW1lCitvdmVyIHRoZXJlKS4gIEluIEdpdCAyLjAsIHRoZSBkZWZhdWx0IHdpbGwgY2hhbmdlIHRvIHRoZSAic2ltcGxlIgorc2VtYW50aWNzLCB3aGljaCBwdXNoZXM6CisKKyAtIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZSBuYW1lLCBhbmQgb25seQorICAgd2hlbiB0aGUgY3VycmVudCBicmFuY2ggaXMgc2V0IHRvIGludGVncmF0ZSB3aXRoIHRoYXQgcmVtb3RlCisgICBicmFuY2gsIGlmIHlvdSBhcmUgcHVzaGluZyB0byB0aGUgc2FtZSByZW1vdGUgYXMgeW91IGZldGNoIGZyb207IG9yCisKKyAtIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZSBuYW1lLCBpZiB5b3UKKyAgIGFyZSBwdXNoaW5nIHRvIGEgcmVtb3RlIHRoYXQgaXMgbm90IHdoZXJlIHlvdSB1c3VhbGx5IGZldGNoIGZyb20uCisKK1VzZSB0aGUgdXNlciBwcmVmZXJlbmNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgInB1c2guZGVmYXVsdCIgdG8KK2NoYW5nZSB0aGlzLiAgSWYgeW91IGFyZSBhbiBvbGQtdGltZXIgd2hvIGlzIHVzZWQgdG8gdGhlICJtYXRjaGluZyIKK3NlbWFudGljcywgeW91IGNhbiBzZXQgdGhlIHZhcmlhYmxlIHRvICJtYXRjaGluZyIgdG8ga2VlcCB0aGUKK3RyYWRpdGlvbmFsIGJlaGF2aW91ci4gIElmIHlvdSB3YW50IHRvIGxpdmUgaW4gdGhlIGZ1dHVyZSBlYXJseSwgeW91CitjYW4gc2V0IGl0IHRvICJzaW1wbGUiIHRvZGF5IHdpdGhvdXQgd2FpdGluZyBmb3IgR2l0IDIuMC4KKworV2hlbiAiZ2l0IGFkZCAtdSIgKGFuZCAiZ2l0IGFkZCAtQSIpIGlzIHJ1biBpbnNpZGUgYSBzdWJkaXJlY3RvcnkgYW5kCitkb2VzIG5vdCBzcGVjaWZ5IHdoaWNoIHBhdGhzIHRvIGFkZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBpdAord2lsbCBvcGVyYXRlIG9uIHRoZSBlbnRpcmUgdHJlZSBpbiBHaXQgMi4wIGZvciBjb25zaXN0ZW5jeQord2l0aCAiZ2l0IGNvbW1pdCAtYSIgYW5kIG90aGVyIGNvbW1hbmRzLiAgVGhlcmUgd2lsbCBiZSBubworbWVjaGFuaXNtIHRvIG1ha2UgcGxhaW4gImdpdCBhZGQgLXUiIGJlaGF2ZSBsaWtlICJnaXQgYWRkIC11IC4iLgorQ3VycmVudCB1c2VycyBvZiAiZ2l0IGFkZCAtdSIgKHdpdGhvdXQgYSBwYXRoc3BlYykgc2hvdWxkIHN0YXJ0Cit0cmFpbmluZyB0aGVpciBmaW5nZXJzIHRvIGV4cGxpY2l0bHkgc2F5ICJnaXQgYWRkIC11IC4iCitiZWZvcmUgR2l0IDIuMCBjb21lcy4gIEEgd2FybmluZyBpcyBpc3N1ZWQgd2hlbiB0aGVzZSBjb21tYW5kcyBhcmUKK3J1biB3aXRob3V0IGEgcGF0aHNwZWMgYW5kIHdoZW4geW91IGhhdmUgbG9jYWwgY2hhbmdlcyBvdXRzaWRlIHRoZQorY3VycmVudCBkaXJlY3RvcnksIGJlY2F1c2UgdGhlIGJlaGF2aW91ciBpbiBHaXQgMi4wIHdpbGwgYmUgZGlmZmVyZW50Citmcm9tIHRvZGF5J3MgdmVyc2lvbiBpbiBzdWNoIGEgc2l0dWF0aW9uLgorCitJbiBHaXQgMi4wLCAiZ2l0IGFkZCA8cGF0aD4iIHdpbGwgYmVoYXZlIGFzICJnaXQgYWRkIC1BIDxwYXRoPiIsIHNvCit0aGF0ICJnaXQgYWRkIGRpci8iIHdpbGwgbm90aWNlIHBhdGhzIHlvdSByZW1vdmVkIGZyb20gdGhlIGRpcmVjdG9yeQorYW5kIHJlY29yZCB0aGUgcmVtb3ZhbC4gIFZlcnNpb25zIGJlZm9yZSBHaXQgMi4wLCBpbmNsdWRpbmcgdGhpcworcmVsZWFzZSwgd2lsbCBrZWVwIGlnbm9yaW5nIHJlbW92YWxzLCBidXQgdGhlIHVzZXJzIHdobyByZWx5IG9uIHRoaXMKK2JlaGF2aW91ciBhcmUgZW5jb3VyYWdlZCB0byBzdGFydCB1c2luZyAiZ2l0IGFkZCAtLWlnbm9yZS1yZW1vdmFsIDxwYXRoPiIKK25vdyBiZWZvcmUgMi4wIGlzIHJlbGVhc2VkLgorCitUaGUgZGVmYXVsdCBwcmVmaXggZm9yICJnaXQgc3ZuIiB3aWxsIGNoYW5nZSBpbiBHaXQgMi4wLiAgRm9yIGEgbG9uZwordGltZSwgImdpdCBzdm4iIGNyZWF0ZWQgaXRzIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBkaXJlY3RseSB1bmRlcgorcmVmcy9yZW1vdGVzLCBidXQgaXQgd2lsbCBwbGFjZSB0aGVtIHVuZGVyIHJlZnMvcmVtb3Rlcy9vcmlnaW4vIHVubGVzcworaXQgaXMgdG9sZCBvdGhlcndpc2Ugd2l0aCBpdHMgLS1wcmVmaXggb3B0aW9uLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuOC41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3JlaWduIGludGVyZmFjZXMsIHN1YnN5c3RlbXMgYW5kIHBvcnRzLgorCisgKiBUaGUgSFRUUCB0cmFuc3BvcnQsIHdoZW4gdGFsa2luZyBHU1MtTmVnb3RpYXRlLCB1c2VzICIxMDAKKyAgIENvbnRpbnVlIiByZXNwb25zZSB0byBhdm9pZCBoYXZpbmcgdG8gcmV3aW5kIGFuZCByZXNlbmQgYSBsYXJnZQorICAgcGF5bG9hZCwgd2hpY2ggbWF5IG5vdCBiZSBhbHdheXMgZG9hYmxlLgorCisgKiBWYXJpb3VzIGJ1Z2ZpeGVzIHRvIHJlbW90ZS1ienIgYW5kIHJlbW90ZS1oZyAoaW4gY29udHJpYi8pLgorCisgKiBUaGUgYnVpbGQgcHJvY2VkdXJlIGlzIGF3YXJlIG9mIE1pckJTRCBub3cuCisKKyAqIFZhcmlvdXMgImdpdCBwNCIsICJnaXQgc3ZuIiBhbmQgImdpdGsiIHVwZGF0ZXMuCisKKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEZldGNoaW5nIGZyb20gYSBzaGFsbG93bHktY2xvbmVkIHJlcG9zaXRvcnkgdXNlZCB0byBiZSBmb3JiaWRkZW4sCisgICBwcmltYXJpbHkgYmVjYXVzZSB0aGUgY29kZXBhdGhzIGludm9sdmVkIHdlcmUgbm90IGNhcmVmdWxseSB2ZXR0ZWQKKyAgIGFuZCB3ZSBkaWQgbm90IGJvdGhlciBzdXBwb3J0aW5nIHN1Y2ggdXNhZ2UuIFRoaXMgcmVsZWFzZSBhdHRlbXB0cworICAgdG8gYWxsb3cgb2JqZWN0IHRyYW5zZmVyIG91dCBvZiBhIHNoYWxsb3dseS1jbG9uZWQgcmVwb3NpdG9yeSBpbiBhCisgICBtb3JlIGNvbnRyb2xsZWQgd2F5IChpLmUuIHRoZSByZWNlaXZlciBiZWNvbWVzIGEgc2hhbGxvdyByZXBvc2l0b3J5CisgICB3aXRoIGEgdHJ1bmNhdGVkIGhpc3RvcnkpLgorCisgKiBKdXN0IGxpa2Ugd2UgZ2l2ZSBhIHJlYXNvbmFibGUgZGVmYXVsdCBmb3IgImxlc3MiIHZpYSB0aGUgTEVTUworICAgZW52aXJvbm1lbnQgdmFyaWFibGUsIHdlIG5vdyBzcGVjaWZ5IGEgcmVhc29uYWJsZSBkZWZhdWx0IGZvciAibHYiCisgICB2aWEgdGhlICJMViIgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBzcGF3bmluZyB0aGUgcGFnZXIuCisKKyAqIFR3by1sZXZlbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIGluICJicmFuY2guKiIgYW5kICJyZW1vdGUuKiIKKyAgIGhpZXJhcmNoaWVzLCB3aG9zZSB2YXJpYWJsZXMgYXJlIHByZWRvbWluYW50bHkgdGhyZWUtbGV2ZWwsIHdlcmUKKyAgIG5vdCBjb21wbGV0ZWQgYnkgaGl0dGluZyBhIDxUQUI+IGluIGJhc2ggYW5kIHpzaCBjb21wbGV0aW9ucy4KKworICogRmV0Y2hpbmcgYSAnZnJvdHonIGJyYW5jaCB3aXRoICJnaXQgZmV0Y2giLCB3aGlsZSBhICdmcm90ei9uaXRmb2wnCisgICByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZyb20gYW4gZWFybGllciBmZXRjaCB3YXMgc3RpbGwgdGhlcmUsIHdvdWxkCisgICBlcnJvciBvdXQsIHByaW1hcmlseSBiZWNhdXNlIHRoZSBjb21tYW5kIHdhcyBub3QgdG9sZCB0aGF0IGl0IGlzCisgICBhbGxvd2VkIHRvIGxvc2UgYW55IGluZm9ybWF0aW9uIG9uIG91ciBzaWRlLiAgImdpdCBmZXRjaCAtLXBydW5lIgorICAgbm93IGNhbiBiZSB1c2VkIHRvIHJlbW92ZSAnZnJvdHovbml0Zm9sJyB0byBtYWtlIHJvb20gZm9yIGZldGNoaW5nIGFuZAorICAgc3RvcmluZyB0aGUgJ2Zyb3R6JyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLgorCisgKiAiZGlmZi5vcmRlcmZpbGU9PGZpbGU+IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvCisgICBwcmV0ZW5kIGFzIGlmIHRoZSAiLU88ZmlsZT4iIG9wdGlvbiB3ZXJlIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQKKyAgIGxpbmUgb2YgImdpdCBkaWZmIiwgZXRjLgorCisgKiBUaGUgbmVnYXRpdmUgcGF0aHNwZWMgc3ludGF4IGFsbG93cyAiZ2l0IGxvZyAtLSAuICc6IWRpciciIHRvIHRlbGwKKyAgIHVzICJJIGFtIGludGVyZXN0ZWQgaW4gZXZlcnl0aGluZyBidXQgJ2RpcicgZGlyZWN0b3J5Ii4KKworICogImdpdCBkaWZmdG9vbCIgc2hvd3MgaG93IG1hbnkgZGlmZmVyZW50IHBhdGhzIHRoZXJlIGFyZSBpbiB0b3RhbCwKKyAgIGFuZCBob3cgbWFueSBvZiB0aGVtIGhhdmUgYmVlbiBzaG93biBzbyBmYXIsIHRvIGluZGljYXRlIHByb2dyZXNzLgorCisgKiAiZ2l0IHB1c2ggb3JpZ2luIG1hc3RlciIgdXNlZCB0byBwdXNoIG91ciAnbWFzdGVyJyBicmFuY2ggdG8gdXBkYXRlCisgICB0aGUgJ21hc3RlcicgYnJhbmNoIGF0IHRoZSAnb3JpZ2luJyByZXBvc2l0b3J5LiAgVGhpcyBoYXMgYmVlbgorICAgZW5oYW5jZWQgdG8gdXNlIHRoZSBzYW1lIHJlZiBtYXBwaW5nICJnaXQgcHVzaCBvcmlnaW4iIHdvdWxkIHVzZSB0bworICAgZGV0ZXJtaW5lIHdoYXQgcmVmIGF0IHRoZSAnb3JpZ2luJyB0byBiZSB1cGRhdGVkIHdpdGggb3VyICdtYXN0ZXInLgorICAgRm9yIGV4YW1wbGUsIHdpdGggdGhpcyBjb25maWd1cmF0aW9uCisKKyAgIFtyZW1vdGUgIm9yaWdpbiJdCisgICAgICBwdXNoID0gcmVmcy9oZWFkcy8qOnJlZnMvcmV2aWV3LyoKKworICAgdGhhdCB3b3VsZCBjYXVzZSAiZ2l0IHB1c2ggb3JpZ2luIiB0byBwdXNoIG91dCBvdXIgbG9jYWwgYnJhbmNoZXMKKyAgIHRvIGNvcnJlc3BvbmRpbmcgcmVmcyB1bmRlciByZWZzL3Jldmlldy8gaGllcmFyY2h5IGF0ICdvcmlnaW4nLAorICAgImdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIiIHdvdWxkIHVwZGF0ZSAncmVmcy9yZXZpZXcvbWFzdGVyJyBvdmVyCisgICB0aGVyZS4gIEFsdGVybmF0aXZlbHksIGlmIHB1c2guZGVmYXVsdCBpcyBzZXQgdG8gJ3Vwc3RyZWFtJyBhbmQgb3VyCisgICAnbWFzdGVyJyBpcyBzZXQgdG8gaW50ZWdyYXRlIHdpdGggJ3RvcGljJyBmcm9tIHRoZSAnb3JpZ2luJyBicmFuY2gsCisgICBydW5uaW5nICJnaXQgcHVzaCBvcmlnaW4iIHdoaWxlIG9uIG91ciAnbWFzdGVyJyB3b3VsZCB1cGRhdGUgdGhlaXIKKyAgICd0b3BpYycgYnJhbmNoLCBhbmQgcnVubmluZyAiZ2l0IHB1c2ggb3JpZ2luIG1hc3RlciIgd2hpbGUgb24gYW55CisgICBvZiBvdXIgYnJhbmNoZXMgZG9lcyB0aGUgc2FtZS4KKworICogImdpdHdlYiIgbGVhcm5lZCB0byB0cmVhdCByZWYgaGllcmFyY2hpZXMgb3RoZXIgdGhhbiByZWZzL2hlYWRzIGFzCisgICBpZiB0aGV5IGFyZSBhZGRpdGlvbmFsIGJyYW5jaCBuYW1lc3BhY2VzIChlLmcuIHJlZnMvY2hhbmdlcy8gaW4KKyAgIEdlcnJpdCkuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PS4uLiIgbGVhcm5lZCBhIGZldyBmb3JtYXR0aW5nIGRpcmVjdGl2ZXM7CisgICBlLmcuICIlKGNvbG9yOnJlZCklKEhFQUQpJShjb2xvcjpyZXNldCkgJShyZWZuYW1lOnNob3J0KSAlKHN1YmplY3QpIi4KKworICogVGhlIGNvbW1hbmQgc3RyaW5nIGdpdmVuIHRvICJnaXQgc3VibW9kdWxlIGZvcmVhY2giIGlzIHBhc3NlZAorICAgZGlyZWN0bHkgdG8gdGhlIHNoZWxsLCB3aXRob3V0IGJlaW5nIGV2YWwnZWQuICBUaGlzIGlzIGEgYmFja3dhcmQKKyAgIGluY29tcGF0aWJsZSBjaGFuZ2UgdGhhdCBtYXkgYnJlYWsgZXhpc3RpbmcgdXNlcnMuCisKKyAqICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBsZWFybmVkIHRoZSAiLS1leGNsdWRlPTxnbG9iPiIgb3B0aW9uLCB0bworICAgYWxsb3cgcGVvcGxlIHRvIHNheSAibGlzdCBoaXN0b3J5IG9mIGFsbCBicmFuY2hlcyBleGNlcHQgdGhvc2UgdGhhdAorICAgbWF0Y2ggdGhpcyBwYXR0ZXJuIiB3aXRoICJnaXQgbG9nIC0tZXhjbHVkZT0nKi8qJyAtLWJyYW5jaGVzIi4KKworICogImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCIgbGVhcm5lZCBhIG5ldyAiLS1zdHVjay1sb25nIiBvcHRpb24gdG8KKyAgIGhlbHAgc2NyaXB0cyBwYXJzZSBvcHRpb25zIHdpdGggYW4gb3B0aW9uYWwgcGFyYW1ldGVyLgorCisgKiBUaGUgIi0tdGFncyIgb3B0aW9uIHRvICJnaXQgZmV0Y2giIG5vIGxvbmdlciB0ZWxscyB0aGUgY29tbWFuZCB0bworICAgZmV0Y2ggX29ubHlfIHRoZSB0YWdzLiBJdCBpbnN0ZWFkIGZldGNoZXMgdGFncyBfaW4gYWRkaXRpb24gdG9fCisgICB3aGF0IGFyZSBmZXRjaGVkIGJ5IHRoZSBzYW1lIGNvbW1hbmQgbGluZSB3aXRob3V0IHRoZSBvcHRpb24uCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBldGMuCisKKyAqIFdoZW4gcGFyc2luZyBhIDQwLWhleCBzdHJpbmcgaW50byB0aGUgb2JqZWN0IG5hbWUsIHRoZSBzdHJpbmcgaXMKKyAgIGNoZWNrZWQgdG8gc2VlIGlmIGl0IGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhIHJlZiBzbyB0aGF0IGEgd2FybmluZworICAgY2FuIGJlIGdpdmVuIGZvciBhbWJpZ3VpdHkuIFRoZSBjb2RlIGtpY2tlZCBpbiBldmVuIHdoZW4gdGhlCisgICBjb3JlLndhcm5hbWJpZ3VvdXNyZWZzIGlzIHNldCB0byBmYWxzZSB0byBzcXVlbGNoIHRoaXMgd2FybmluZywgaW4KKyAgIHdoaWNoIGNhc2UgdGhlIGN5Y2xlcyBzcGVudCB0byBsb29rIGF0IHRoZSByZWYgbmFtZXNwYWNlIHdlcmUgYW4KKyAgIGV4cGVuc2l2ZSBuby1vcCwgYXMgdGhlIHJlc3VsdCB3YXMgZGlzY2FyZGVkIHdpdGhvdXQgYmVpbmcgdXNlZC4KKworICogVGhlIG5hbWluZyBjb252ZW50aW9uIG9mIHRoZSBwYWNrZmlsZXMgaGFzIGJlZW4gdXBkYXRlZDsgaXQgdXNlZCB0bworICAgYmUgYmFzZWQgb24gdGhlIGVudW1lcmF0aW9uIG9mIG5hbWVzIG9mIHRoZSBvYmplY3RzIHRoYXQgYXJlCisgICBjb250YWluZWQgaW4gdGhlIHBhY2ssIGJ1dCBub3cgaXQgYWxzbyBkZXBlbmRzIG9uIGhvdyB0aGUgcGFja2VkCisgICByZXN1bHQgaXMgcmVwcmVzZW50ZWQtLXBhY2tpbmcgdGhlIHNhbWUgc2V0IG9mIG9iamVjdHMgdXNpbmcKKyAgIGRpZmZlcmVudCBzZXR0aW5ncyAob3IgZGVsdGEgb3JkZXIpIHdvdWxkIHByb2R1Y2UgYSBwYWNrIHdpdGgKKyAgIGRpZmZlcmVudCBuYW1lLgorCisgKiAiZ2l0IGRpZmYgLS1uby1pbmRleCIgbW9kZSB1c2VkIHRvIHVubmVjZXNzYXJpbHkgYXR0ZW1wdCB0byByZWFkCisgICB0aGUgaW5kZXggd2hlbiB0aGVyZSBpcyBvbmUuCisKKyAqIFRoZSBkZXByZWNhdGVkIHBhcnNlLW9wdGlvbnMgbWFjcm8gT1BUX0JPT0xFQU4gaGFzIGJlZW4gcmVtb3ZlZDsKKyAgIHVzZSBPUFRfQk9PTCBvciBPUFRfQ09VTlRVUCBpbiBuZXcgY29kZS4KKworICogQSBmZXcgZHVwbGljYXRlIGltcGxlbWVudGF0aW9ucyBvZiBwcmVmaXgvc3VmZml4IHN0cmluZyBjb21wYXJpc29uCisgICBmdW5jdGlvbnMgaGF2ZSBiZWVuIHVuaWZpZWQgdG8gc3RhcnRzX3dpdGgoKSBhbmQgZW5kc193aXRoKCkuCisKKyAqIFRoZSBuZXcgUEVSTExJQl9FWFRSQSBtYWtlZmlsZSB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5CisgICBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzIFBlcmwgbW9kdWxlcyAoZS5nLiB0aGUgb25lcyBuZWNlc3NhcnkgdG8gcnVuCisgICBnaXQtc3ZuKSBhcmUgaW5zdGFsbGVkIG9uIHRoZSBwbGF0Zm9ybSB3aGVuIGJ1aWxkaW5nLgorCisgKiAiZ2l0IG1lcmdlLWJhc2UiIGxlYXJuZWQgdGhlICItLWZvcmstcG9pbnQiIG1vZGUsIHRoYXQgaW1wbGVtZW50cworICAgdGhlIHNhbWUgbG9naWMgdXNlZCBpbiAiZ2l0IHB1bGwgLS1yZWJhc2UiIHRvIGZpbmQgYSBzdWl0YWJsZSBmb3JrCisgICBwb2ludCBvdXQgb2YgdGhlIHJlZmxvZyBlbnRyaWVzIGZvciB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCB0aGUKKyAgIHdvcmsgaGFzIGJlZW4gYmFzZWQgb24uICAiZ2l0IHJlYmFzZSIgaGFzIHRoZSBzYW1lIGxvZ2ljIHRoYXQgY2FuIGJlCisgICB0cmlnZ2VyZWQgd2l0aCB0aGUgIi0tZm9yay1wb2ludCIgb3B0aW9uLgorCisgKiBBIHRoaXJkLXBhcnR5ICJyZWNlaXZlLXBhY2siICh0aGUgcmVzcG9uZGVyIHRvICJnaXQgcHVzaCIpIGNhbgorICAgYWR2ZXJ0aXNlIHRoZSAibm8tdGhpbiIgY2FwYWJpbGl0eSB0byB0ZWxsICJnaXQgcHVzaCIgbm90IHRvIHVzZQorICAgdGhlIHRoaW4tcGFjayBvcHRpbWl6YXRpb24uIE91ciByZWNlaXZlLXBhY2sgaGFzIGFsd2F5cyBiZWVuCisgICBjYXBhYmxlIG9mIGFjY2VwdGluZyBhbmQgZmF0dGVuaW5nIGEgdGhpbi1wYWNrLCBhbmQgd2lsbCBjb250aW51ZQorICAgbm90IHRvIGFzayAiZ2l0IHB1c2giIHRvIHVzZSBhIG5vbi10aGluIHBhY2suCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuOC41CistLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS44LjUgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycgbm90ZXMKK2ZvciBkZXRhaWxzKS4KKworICogVGhlIHBhdGhzcGVjIG1hdGNoaW5nIGNvZGUsIHdoaWxlIGNvbXBhcmluZyB0d28gdHJlZXMgKGUuZy4gImdpdAorICAgZGlmZiBBIEIgLS0gcGF0aDEgcGF0aDIiKSB3YXMgdG9vIGFnZ3Jlc3NpdmUgYW5kIGZhaWxlZCB0byBtYXRjaAorICAgc29tZSBwYXRocyB3aGVuIG11bHRpcGxlIHBhdGhzcGVjcyB3ZXJlIGludm9sdmVkLgorCisgKiAiZ2l0IHJlcGFjayAtLW1heC1wYWNrLXNpemU9OGciIHN0b3BwZWQgYmVpbmcgcGFyc2VkIGNvcnJlY3RseSB3aGVuCisgICB0aGUgY29tbWFuZCB3YXMgcmVpbXBsZW1lbnRlZCBpbiBDLgorCisgKiBBbiBlYXJsaWVyIHVwZGF0ZSBpbiB2MS44LjQueCB0byAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyIgd2l0aAorICAgbmVnYXRpdmUgcmVmIGhhZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24uCisgICAobWVyZ2UgMjAwYWJlNyBqay9tYXJrLWVkZ2VzLXVuaW50ZXJlc3RpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIHJlY2VudCB1cGRhdGUgdG8gImdpdCBzZW5kLWVtYWlsIiBicm9rZSBwbGF0Zm9ybXMgd2hlcmUKKyAgIC9ldGMvc3NsL2NlcnRzLyBkaXJlY3RvcnkgZXhpc3RzIGJ1dCBjYW5ub3QgYmUgdXNlZCBhcyBTU0xfY2FfcGF0aAorICAgKGUuZy4gRmVkb3JhIHJhd2hpZGUpLgorCisgKiBBIGhhbmRmdWwgb2YgYnVncyBhcm91bmQgaW50ZXJwcmV0aW5nICRicmFuY2hAe3Vwc3RyZWFtfSBub3RhdGlvbgorICAgYW5kIGl0cyBsb29rYWxpa2UsIHdoZW4gJGJyYW5jaCBwYXJ0IGhhcyBpbnRlcmVzdGluZyBjaGFyYWN0ZXJzLAorICAgZS5nLiAiQCIsIGFuZCAiOiIsIGhhdmUgYmVlbiBmaXhlZC4KKworICogImdpdCBjbG9uZSIgd291bGQgZmFpbCB0byBjbG9uZSBmcm9tIGEgcmVwb3NpdG9yeSB0aGF0IGhhcyBhIHJlZgorICAgZGlyZWN0bHkgdW5kZXIgInJlZnMvIiwgZS5nLiAicmVmcy9zdGFzaCIsIGJlY2F1c2UgZGlmZmVyZW50CisgICB2YWxpZGF0aW9uIHBhdGhzIGRvIGRpZmZlcmVudCB0aGluZ3Mgb24gc3VjaCBhIHJlZm5hbWUuICBMb29zZW4gdGhlCisgICBjbGllbnQgc2lkZSdzIHZhbGlkYXRpb24gdG8gYWxsb3cgc3VjaCBhIHJlZi4KKworICogImdpdCBsb2cgLS1sZWZ0LXJpZ2h0IEEuLi5CIiBsb3N0IHRoZSAibGVmdG5lc3MiIG9mIGNvbW1pdHMKKyAgIHJlYWNoYWJsZSBmcm9tIEEgd2hlbiBBIGlzIGEgdGFnIGFzIGEgc2lkZSBlZmZlY3Qgb2YgYSByZWNlbnQKKyAgIGJ1Z2ZpeC4gIFRoaXMgaXMgYSByZWdyZXNzaW9uIGluIDEuOC40Lnggc2VyaWVzLgorCisgKiBkb2N1bWVudGF0aW9ucyB0byAiZ2l0IHB1bGwiIGhpbnRlZCB0aGVyZSBpcyBhbiAiLW0iIG9wdGlvbiBiZWNhdXNlCisgICBpdCBpbmNvcnJlY3RseSBzaGFyZWQgdGhlIGRvY3VtZW50YXRpb24gd2l0aCAiZ2l0IG1lcmdlIi4KKworICogImdpdCBkaWZmIEEgQiBzdWJtb2QiIGFuZCAiZ2l0IGRpZmYgQSBCIHN1Ym1vZC8iIG91Z2h0IHRvIGhhdmUgZG9uZQorICAgdGhlIHNhbWUgZm9yIGEgc3VibW9kdWxlICJzdWJtb2QiLCBidXQgZGlkbid0LgorCisgKiAiZ2l0IGNsb25lICRvcmlnaW4gZm9vXGJhclxiYXoiIG9uIFdpbmRvd3MgZmFpbGVkIHRvIGNyZWF0ZSB0aGUKKyAgIGxlYWRpbmcgZGlyZWN0b3JpZXMgKGkuZS4gYSBtb3JhbC1lcXVpdmFsZW50IG9mICJta2RpciAtcCIpLgorCisgKiAic3VibW9kdWxlLioudXBkYXRlPWNoZWNrb3V0Iiwgd2hlbiBwcm9wYWdhdGVkIGZyb20gLmdpdG1vZHVsZXMgdG8KKyAgIC5naXQvY29uZmlnLCB0dXJuZWQgaW50byBhICJzdWJtb2R1bGUuKi51cGRhdGU9bm9uZSIsIHdoaWNoIGRpZCBub3QKKyAgIG1ha2UgbXVjaCBzZW5zZS4KKyAgIChtZXJnZSBlZmE4ZmQ3IGZwL3N1Ym1vZHVsZS1jaGVja291dC1tb2RlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGltcGxlbWVudGF0aW9uIG9mICdnaXQgc3Rhc2ggJGNtZCAic3Rhc2hAey4uLn0iJyBkaWQgbm90IHF1b3RlCisgICB0aGUgc3Rhc2ggYXJndW1lbnQgcHJvcGVybHkgYW5kIGxlZnQgaXQgc3BsaXQgYXQgSUZTIHdoaXRlc3BhY2UuCisKKyAqIFRoZSAiLS1bbm8tXWluZm9ybWF0aXZlLWVycm9ycyIgb3B0aW9ucyB0byAiZ2l0IGRhZW1vbiIgd2VyZSBwYXJzZWQKKyAgIGEgYml0IHRvbyBsb29zZWx5LCBhbGxvd2luZyBhbnkgb3RoZXIgc3RyaW5nIGFmdGVyIHRoZXNlIG9wdGlvbgorICAgbmFtZXMuCisKKyAqIFRoZXJlIGlzIG5vIHJlYXNvbiB0byBoYXZlIGEgaGFyZGNvZGVkIHVwcGVyIGxpbWl0IGZvciB0aGUgbnVtYmVyIG9mCisgICBwYXJlbnRzIG9mIGFuIG9jdG9wdXMgbWVyZ2UsIGNyZWF0ZWQgdmlhIHRoZSBncmFmdCBtZWNoYW5pc20sIGJ1dAorICAgdGhlcmUgd2FzLgorCisgKiBUaGUgYmFzaWMgdGVzdCB1c2VkIHRvIGxlYXZlIHVubmVjZXNzYXJ5IHRyYXNoIGRpcmVjdG9yaWVzIGluIHRoZQorICAgdC8gZGlyZWN0b3J5LgorICAgKG1lcmdlIDczOGE4YmUgamsvdGVzdC1mcmFtZXdvcmstdXBkYXRlcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2UtYmFzZSAtLW9jdG9wdXMiIHVzZWQgdG8gbGVhdmUgY2xlYW5pbmcgdXAgc3Vib3B0aW1hbAorICAgcmVzdWx0IHRvIHRoZSBjYWxsZXIsIGJ1dCBub3cgaXQgZG9lcyB0aGUgY2xlYW4tdXAgaXRzZWxmLgorCisgKiBBICJnYyIgcHJvY2VzcyBydW5uaW5nIGFzIGEgZGlmZmVyZW50IHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gc3RvcCBhCisgICBuZXcgImdjIiBwcm9jZXNzIGZyb20gc3RhcnRpbmcsIGJ1dCBpdCBkaWRuJ3QuCisKKyAqIEFuIGVhcmxpZXIgImNsZWFuLXVwIiBpbnRyb2R1Y2VkIGFuIHVubmVjZXNzYXJ5IG1lbW9yeSBsZWFrLgorCisgKiAiZ2l0IGFkZCAtQSIgKG5vIG90aGVyIGFyZ3VtZW50cykgaW4gYSB0b3RhbGx5IGVtcHR5IHdvcmtpbmcgdHJlZQorICAgdXNlZCB0byBlbWl0IGFuIGVycm9yLgorCisgKiAiZ2l0IGxvZyAtLWRlY29yYXRlIiBkaWQgbm90IGhhbmRsZSBhIHRhZyBwb2ludGVkIGJ5IGFub3RoZXIgdGFnCisgICBuaWNlbHkuCisKKyAqIFdoZW4gd2UgZmlndXJlIG91dCBob3cgbWFueSBmaWxlIGRlc2NyaXB0b3JzIHRvIGFsbG9jYXRlIGZvcgorICAga2VlcGluZyBwYWNrZmlsZXMgb3BlbiwgYSBzeXN0ZW0gd2l0aCBub24td29ya2luZyBnZXRybGltaXQoKSBjb3VsZAorICAgY2F1c2UgdXMgdG8gZGllKCksIGJ1dCBiZWNhdXNlIHdlIG1ha2UgdGhpcyBjYWxsIG9ubHkgdG8gZ2V0IGEKKyAgIHJvdWdoIGVzdGltYXRlIG9mIGhvdyBtYW55IGFyZSBhdmFpbGFibGUgYW5kIHdlIGRvIG5vdCBldmVuIGF0dGVtcHQKKyAgIHRvIHVzZSB1cCBhbGwgYXZhaWxhYmxlIGZpbGUgZGVzY3JpcHRvcnMgb3Vyc2VsdmVzLCBpdCBpcyBuaWNlciB0bworICAgZmFsbCBiYWNrIHRvIGEgcmVhc29uYWJsZSBsb3cgdmFsdWUgcmF0aGVyIHRoYW4gZHlpbmcuCisKKyAqIHJlYWRfc2hhMV9maWxlKCksIHRoYXQgaXMgdGhlIHdvcmtob3JzZSB0byByZWFkIHRoZSBjb250ZW50cyBnaXZlbgorICAgYW4gb2JqZWN0IG5hbWUsIGhvbm91cmVkIG9iamVjdCByZXBsYWNlbWVudHMsIGJ1dCB0aGVyZSB3YXMgbm8KKyAgIGNvcnJlc3BvbmRpbmcgbWVjaGFuaXNtIHRvIHNoYTFfb2JqZWN0X2luZm8oKSB0aGF0IHdhcyB1c2VkIHRvCisgICBvYnRhaW4gdGhlIG1ldGFpbmZvIChlLmcuIHR5cGUgJiBzaXplKSBhYm91dCB0aGUgb2JqZWN0LiAgVGhpcyBsZWQKKyAgIGNhbGxlcnMgdG8gd2VpcmQgaW5jb25zaXN0ZW5jaWVzLgorICAgKG1lcmdlIDY2M2E4NTYgY2MvcmVwbGFjZS1vYmplY3QtaW5mbyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2F0LWZpbGUgLS1iYXRjaD0iLCBhbiBhZG1pdHRlZGx5IHVzZWxlc3MgY29tbWFuZCwgZGlkIG5vdAorICAgYmVoYXZlIHZlcnkgd2VsbC4KKworICogImdpdCByZXYtcGFyc2UgPHJldnM+IC0tIDxwYXRocz4iIGRpZCBub3QgaW1wbGVtZW50IHRoZSB1c3VhbAorICAgZGlzYW1iaWd1YXRpb24gcnVsZXMgdGhlIGNvbW1hbmRzIGluIHRoZSAiZ2l0IGxvZyIgZmFtaWx5IHVzZWQgaW4KKyAgIHRoZSBzYW1lIHdheS4KKworICogImdpdCBtdiBBIEIvIiwgd2hlbiBCIGRvZXMgbm90IGV4aXN0IGFzIGEgZGlyZWN0b3J5LCBzaG91bGQgZXJyb3IKKyAgIG91dCwgYnV0IGl0IGRpZG4ndC4KKworICogQSB3b3JrYXJvdW5kIHRvIGFuIG9sZCBidWcgaW4gZ2xpYmMgcHJpb3IgdG8gZ2xpYmMgMi4xNyBoYXMgYmVlbgorICAgcmV0aXJlZDsgdGhpcyB3b3VsZCByZW1vdmUgYSBzaWRlIGVmZmVjdCBvZiB0aGUgd29ya2Fyb3VuZCB0aGF0CisgICBjb3JydXB0cyBzeXN0ZW0gZXJyb3IgbWVzc2FnZXMgaW4gbm9uLUMgbG9jYWxlcy4KKworICogU1NMLXJlbGF0ZWQgb3B0aW9ucyB3ZXJlIG5vdCBwYXNzZWQgY29ycmVjdGx5IHRvIHVuZGVybHlpbmcgc29ja2V0CisgICBsYXllciBpbiAiZ2l0IHNlbmQtZW1haWwiLgorCisgKiAiZ2l0IGNvbW1pdCAtdiIgYXBwZW5kcyB0aGUgcGF0Y2ggdG8gdGhlIGxvZyBtZXNzYWdlIGJlZm9yZQorICAgZWRpdGluZywgYW5kIHRoZW4gcmVtb3ZlcyB0aGUgcGF0Y2ggd2hlbiB0aGUgZWRpdG9yIHJldHVybmVkCisgICBjb250cm9sLiBIb3dldmVyLCB0aGUgcGF0Y2ggd2FzIG5vdCBzdHJpcHBlZCBjb3JyZWN0bHkgd2hlbiB0aGUKKyAgIGZpcnN0IG1vZGlmaWVkIHBhdGggd2FzIGEgc3VibW9kdWxlLgorCisgKiAiZ2l0IGZldGNoIC0tZGVwdGg9MCIgd2FzIGEgbm8tb3AsIGFuZCB3YXMgc2lsZW50bHkgaWdub3JlZC4KKyAgIERpYWdub3NlIGl0IGFzIGFuIGVycm9yLgorCisgKiBSZW1vdGUgcmVwb3NpdG9yeSBVUkxzIGV4cHJlc3NlZCBpbiBzY3Atc3R5bGUgaG9zdDpwYXRoIG5vdGF0aW9uIGFyZQorICAgcGFyc2VkIG1vcmUgY2FyZWZ1bGx5IChlLmcuICJmb28vYmFyOmJheiIgaXMgbG9jYWwsICJbOjoxXTovfnVzZXIiIGFza3MKKyAgIHRvIGNvbm5lY3QgdG8gdXNlcidzIGhvbWUgZGlyZWN0b3J5IG9uIGhvc3QgYXQgYWRkcmVzcyA6OjEuCisKKyAqICJnaXQgZGlmZiAtLSAnOihpY2FzZSltYWtlZmlsZSciIHdhcyB1bm5lY2Vzc2FyaWx5IHJlamVjdGVkIGF0IHRoZQorICAgY29tbWFuZCBsaW5lIHBhcnNlci4KKworICogImdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrPW9rIiBkaWQgbm90IGNoZWNrIHRoZSBleGlzdGVuY2Ugb2YKKyAgIHRoZSBuYW1lZCBvYmplY3QuCisKKyAqICJnaXQgYW0gLS1hYm9ydCIgc29tZXRpbWVzIGNvbXBsYWluZWQgYWJvdXQgbm90IGJlaW5nIGFibGUgdG8gd3JpdGUKKyAgIGEgdHJlZSB3aXRoIGFuIDB7NDB9IG9iamVjdCBpbiBpdC4KKworICogVHdvIHByb2Nlc3NlcyBjcmVhdGluZyBsb29zZSBvYmplY3RzIGF0IHRoZSBzYW1lIHRpbWUgY291bGQgaGF2ZQorICAgZmFpbGVkIHVubmVjZXNzYXJpbHkgd2hlbiB0aGUgbmFtZSBvZiB0aGVpciBuZXcgb2JqZWN0cyBzdGFydGVkCisgICB3aXRoIHRoZSBzYW1lIGJ5dGUgdmFsdWUsIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjA2MDIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuMS50eHQKQEAgLTAsMCArMSw1OSBAQAorR2l0IHYxLjkuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOS4wCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBjbGVhbiAtZCBwYXRoc3BlYyIgZGlkIG5vdCB1c2UgdGhlIGdpdmVuIHBhdGhzcGVjIGNvcnJlY3RseQorICAgYW5kIGVuZGVkIHVwIGNsZWFuaW5nIHRvbyBtdWNoLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBtaXNiZWhhdmVkIHdoZW4gdGhlIHJlcG9zaXRvcnkgaXMgYm91bmQgdG8gdGhlCisgICB3b3JraW5nIHRyZWUgd2l0aCB0aGUgIi5naXQgZmlsZSIgbWVjaGFuaXNtLCB3aGVyZSBhIHRleHR1YWwgZmlsZQorICAgIi5naXQiIHRlbGxzIHVzIHdoZXJlIGl0IGlzLgorCisgKiAiZ2l0IHB1c2giIGRpZCBub3QgcGF5IGF0dGVudGlvbiB0byBicmFuY2guKi5wdXNocmVtb3RlIGlmIGl0IGlzCisgICBkZWZpbmVkIGVhcmxpZXIgdGhhbiByZW1vdGUucHVzaGRlZmF1bHQ7IHRoZSBvcmRlciBvZiB0aGVzZSB0d28KKyAgIHZhcmlhYmxlcyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHNob3VsZCBub3QgbWF0dGVyLCBidXQgaXQgZGlkCisgICBieSBtaXN0YWtlLgorCisgKiBDb2RlcGF0aHMgdGhhdCBwYXJzZSB0aW1lc3RhbXBzIGluIGNvbW1pdCBvYmplY3RzIGhhdmUgYmVlbgorICAgdGlnaHRlbmVkLgorCisgKiAiZ2l0IGRpZmYgLS1leHRlcm5hbC1kaWZmIiBpbmNvcnJlY3RseSBmZWQgdGhlIHN1Ym1vZHVsZSBkaXJlY3RvcnkKKyAgIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGV4dGVybmFsIGRpZmYgZHJpdmVyIHdoZW4gaXQga25ldyBpdCBpcworICAgdGhlIHNhbWUgYXMgb25lIG9mIHRoZSB2ZXJzaW9ucyBiZWluZyBjb21wYXJlZC4KKworICogImdpdCByZXNldCIgbmVlZHMgdG8gcmVmcmVzaCB0aGUgaW5kZXggd2hlbiB3b3JraW5nIGluIGEgd29ya2luZworICAgdHJlZSAoaXQgY2FuIGFsc28gYmUgdXNlZCB0byBtYXRjaCB0aGUgaW5kZXggdG8gdGhlIEhFQUQgaW4gYW4KKyAgIG90aGVyd2lzZSBiYXJlIHJlcG9zaXRvcnkpLCBidXQgaXQgZmFpbGVkIHRvIHNldCB1cCB0aGUgd29ya2luZworICAgdHJlZSBwcm9wZXJseSwgY2F1c2luZyBHSVRfV09SS19UUkVFIHRvIGJlIGlnbm9yZWQuCisKKyAqICJnaXQgY2hlY2stYXR0ciIgd2hlbiB3b3JraW5nIG9uIGEgcmVwb3NpdG9yeSB3aXRoIGEgd29ya2luZyB0cmVlCisgICBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIHRoZSB3b3JraW5nIHRyZWUgd2FzIHNwZWNpZmllZCB2aWEgdGhlCisgICAtLXdvcmstdHJlZSAoYW5kIG9idmlvdXNseSB3aXRoIC0tZ2l0LWRpcikgb3B0aW9uLgorCisgKiAibWVyZ2UtcmVjdXJzaXZlIiB3YXMgYnJva2VuIGluIDEuNy43IGVyYSBhbmQgc3RvcHBlZCB3b3JraW5nIGluCisgICBhbiBlbXB0eSAodGVtcG9yYXJ5KSB3b3JraW5nIHRyZWUsIHdoZW4gdGhlcmUgYXJlIHJlbmFtZXMKKyAgIGludm9sdmVkLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgcmV2LXBhcnNlIiB3YXMgbG9vc2UgaW4gcmVqZWN0aW5nIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKyAgIHRoYXQgZG8gbm90IG1ha2Ugc2Vuc2UsIGUuZy4gIi0tZGVmYXVsdCIgd2l0aG91dCB0aGUgcmVxdWlyZWQKKyAgIHZhbHVlIGZvciB0aGF0IG9wdGlvbi4KKworICogaW5jbHVkZS5wYXRoIHZhcmlhYmxlIChvciBhbnkgdmFyaWFibGUgdGhhdCBleHBlY3RzIGEgcGF0aCB0aGF0CisgICBjYW4gdXNlIH51c2VybmFtZSBleHBhbnNpb24pIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgbm90IGEKKyAgIGJvb2xlYW4sIGJ1dCB0aGUgY29kZSBmYWlsZWQgdG8gY2hlY2sgaXQuCisKKyAqICJnaXQgZGlmZiAtLXF1aWV0IC0tIHBhdGhzcGVjMSBwYXRoc3BlYzIiIHNvbWV0aW1lcyBkaWQgbm90IHJldHVybgorICAgY29ycmVjdCBzdGF0dXMgdmFsdWUuCisKKyAqIEF0dGVtcHRpbmcgdG8gZGVlcGVuIGEgc2hhbGxvdyByZXBvc2l0b3J5IGJ5IGZldGNoaW5nIG92ZXIgc21hcnQKKyAgIEhUVFAgdHJhbnNwb3J0IGZhaWxlZCBpbiB0aGUgcHJvdG9jb2wgZXhjaGFuZ2UsIHdoZW4gbm8tZG9uZQorICAgZXh0ZW5zaW9uIHdhcyB1c2VkLiAgVGhlIGZldGNoaW5nIHNpZGUgd2FpdGVkIGZvciB0aGUgbGlzdCBvZgorICAgc2hhbGxvdyBib3VuZGFyeSBjb21taXRzIGFmdGVyIHRoZSBzZW5kaW5nIGVuZCBzdG9wcGVkIHRhbGtpbmcgdG8KKyAgIGl0LgorCisgKiBBbGxvdyAiZ2l0IGNtZCBwYXRoLyIsIHdoZW4gdGhlICdwYXRoJyBpcyB3aGVyZSBhIHN1Ym1vZHVsZSBpcworICAgYm91bmQgdG8gdGhlIHRvcC1sZXZlbCB3b3JraW5nIHRyZWUsIHRvIG1hdGNoICdwYXRoJywgZGVzcGl0ZSB0aGUKKyAgIGV4dHJhIGFuZCB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaCAoc3VjaCBhIHNsYXNoIGlzIG9mdGVuCisgICBnaXZlbiBieSBjb21tYW5kIGxpbmUgY29tcGxldGlvbikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTM0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4yLnR4dApAQCAtMCwwICsxLDY3IEBACitHaXQgdjEuOS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS45LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBEb2N1bWVudGF0aW9uIGFuZCBpbi1jb2RlIGNvbW1lbnRzIGhhZCBtYW55IGluc3RhbmNlcyBvZiBtaXN0YWtlbgorICAgdXNlIG9mICJub3IiLCB3aGljaCBoYXZlIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGZldGNoIC0tcHJ1bmUiLCB3aGVuIHRoZSByaWdodC1oYW5kLXNpZGUgb2YgbXVsdGlwbGUgZmV0Y2gKKyAgIHJlZnNwZWNzIG92ZXJsYXAgKGUuZy4gc3RvcmluZyAicmVmcy9oZWFkcy8qIiB0bworICAgInJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIsIHdoaWxlIHN0b3JpbmcgInJlZnMvZnJvdHovKiIgdG8KKyAgICJyZWZzL3JlbW90ZXMvb3JpZ2luL2ZyLyoiKSwgYWdncmVzc2l2ZWx5IHRob3VnaHQgdGhhdCBsYWNrIG9mCisgICAicmVmcy9oZWFkcy9mci9vdHoiIG9uIHRoZSBvcmlnaW4gc2l0ZSBtZWFudCB3ZSBzaG91bGQgcmVtb3ZlCisgICAicmVmcy9yZW1vdGVzL29yaWdpbi9mci9vdHoiIGZyb20gdXMsIHdpdGhvdXQgY2hlY2tpbmcgdGhlaXIKKyAgICJyZWZzL2Zyb3R6L290eiIgZmlyc3QuCisKKyAgIE5vdGUgdGhhdCBzdWNoIGEgY29uZmlndXJhdGlvbiBpcyBpbmhlcmVudGx5IHVuc2FmZSAodGhpbmsgd2hhdAorICAgc2hvdWxkIGhhcHBlbiB3aGVuICJyZWZzL2hlYWRzL2ZyL290eiIgZG9lcyBhcHBlYXIgb24gdGhlIG9yaWdpbgorICAgc2l0ZSksIGJ1dCB0aGF0IGlzIG5vdCBhIHJlYXNvbiBub3QgdG8gYmUgZXh0cmEgY2FyZWZ1bC4KKworICogImdpdCB1cGRhdGUtcmVmIC0tc3RkaW4iIGRpZCBub3QgZmFpbCBhIHJlcXVlc3QgdG8gY3JlYXRlIGEgcmVmCisgICB3aGVuIHRoZSByZWYgYWxyZWFkeSBleGlzdGVkLgorCisgKiAiZ2l0IGRpZmYgLS1uby1pbmRleCAtTXEgYSBiIiBmZWxsIGludG8gYW4gaW5maW5pdGUgbG9vcC4KKworICogV2hlbiBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGVkaXQgYSBjb21taXQgbG9nIG1lc3NhZ2UgKGUuZy4gImdpdAorICAgY29tbWl0IC1tIiBpcyBnaXZlbiBhIG1lc3NhZ2Ugd2l0aG91dCBzcGVjaWZ5aW5nICItZSIpLCB3ZSB1c2VkIHRvCisgICBkaXNhYmxlIHRoZSBzcGF3bmluZyBvZiB0aGUgZWRpdG9yIGJ5IG92ZXJyaWRpbmcgR0lUX0VESVRPUiwgYnV0CisgICB0aGlzIG1lYW5zIGFsbCB0aGUgdXNlcyBvZiB0aGUgZWRpdG9yLCBvdGhlciB0aGFuIHRvIGVkaXQgdGhlCisgICBjb21taXQgbG9nIG1lc3NhZ2UsIGFyZSBhbHNvIGFmZmVjdGVkLgorCisgKiAiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWJyYW5jaCIgc2hvd2VkIGl0cyBvdXRwdXQgd2l0aCBsYWJlbHMKKyAgICJhaGVhZC9iZWhpbmQvZ29uZSIgdHJhbnNsYXRlZCB0byB0aGUgdXNlcidzIGxvY2FsZS4KKworICogImdpdCBtdiIgdGhhdCBtb3ZlcyBhIHN1Ym1vZHVsZSBmb3Jnb3QgdG8gYWRqdXN0IHRoZSBhcnJheSB0aGF0CisgICB1c2VzIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggc3VibW9kdWxlcyB3ZXJlIHRvIGJlIG1vdmVkIHRvIHVwZGF0ZQorICAgaXRzIGNvbmZpZ3VyYXRpb24uCisKKyAqIExlbmd0aCBsaW1pdCBmb3IgdGhlIHBhdGhuYW1lIHVzZWQgd2hlbiByZW1vdmluZyBhIHBhdGggaW4gYSBkZWVwCisgICBzdWJkaXJlY3RvcnkgaGFzIGJlZW4gcmVtb3ZlZCB0byBhdm9pZCBidWZmZXIgb3ZlcmZsb3dzLgorCisgKiBUaGUgdGVzdCBoZWxwZXIgbGliLXRlcm1pbmFsIGFsd2F5cyBydW4gYW4gYWN0dWFsIHRlc3RfZXhwZWN0XyoKKyAgIHdoZW4gaW5jbHVkZWQsIHdoaWNoIHNjcmV3ZWQgdXAgd2l0aCB0aGUgdXNlIG9mIHNraWwtYWxsIHRoYXQgbWF5CisgICBoYXZlIHRvIGJlIGRvbmUgbGF0ZXIuCisKKyAqICJnaXQgaW5kZXgtcGFjayIgdXNlZCBhIHdyb25nIHZhcmlhYmxlIHRvIG5hbWUgdGhlIGtlZXAtZmlsZSBpbiBhbgorICAgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBmaWxlIGNhbm5vdCBiZSB3cml0dGVuIG9yIGNsb3NlZC4KKworICogInJlYmFzZSAtaSIgcHJvZHVjZWQgYSBicm9rZW4gaW5zbiBzaGVldCB3aGVuIHRoZSB0aXRsZSBvZiBhIGNvbW1pdAorICAgaGFwcGVuZWQgdG8gY29udGFpbiAnXG4nIChvciBlbmRlZCB3aXRoICdcYycpIGR1ZSB0byBhIGNhcmVsZXNzIHVzZQorICAgb2YgJ2VjaG8nLgorCisgKiBUaGVyZSB3ZXJlIGEgZmV3IGluc3RhbmNlcyBvZiAnZ2l0LWZvbycgcmVtYWluaW5nIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc3BlbGxlZCAnZ2l0IGZvbycuCisKKyAqIFNlcnZpbmcgb2JqZWN0cyBmcm9tIGEgc2hhbGxvdyByZXBvc2l0b3J5IG5lZWRzIHRvIHdyaXRlIGEKKyAgIG5ldyBmaWxlIHRvIGhvbGQgdGhlIHRlbXBvcmFyeSBzaGFsbG93IGJvdW5kYXJpZXMgYnV0IGl0IHdhcyBub3QKKyAgIGNsZWFuZWQgd2hlbiB3ZSBleGl0IGR1ZSB0byBkaWUoKSBvciBhIHNpZ25hbC4KKworICogV2hlbiAiZ2l0IHN0YXNoIHBvcCIgc3RvcHMgYWZ0ZXIgZmFpbGluZyB0byBhcHBseSB0aGUgc3Rhc2gKKyAgIChlLmcuIGR1ZSB0byBjb25mbGljdGluZyBjaGFuZ2VzKSwgdGhlIHN0YXNoIGlzIG5vdCBkcm9wcGVkLiBTdGF0ZQorICAgdGhhdCBleHBsaWNpdGx5IGluIHRoZSBvdXRwdXQgdG8gbGV0IHRoZSB1c2VycyBrbm93LgorCisgKiBUaGUgbGFiZWxzIGluICJnaXQgc3RhdHVzIiBvdXRwdXQgdGhhdCBkZXNjcmliZSB0aGUgbmF0dXJlIG9mCisgICBjb25mbGljdHMgKGUuZy4gImJvdGggZGVsZXRlZCIpIHdlcmUgbGltaXRlZCB0byAyMCBieXRlcywgd2hpY2ggd2FzCisgICB0b28gc2hvcnQgZm9yIHNvbWUgbDEwbiAoZS5nLiBmcikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YjA1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4zLnR4dApAQCAtMCwwICsxLDIxIEBACitHaXQgdjEuOS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS45LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IHA0IiBkZWFsaW5nIHdpdGggY2hhbmdlcyBpbiBiaW5hcnkgZmlsZXMgd2VyZSBicm9rZW4gYnkgYQorICAgY2hhbmdlIGluIDEuOSByZWxlYXNlLgorCisgKiBUaGUgc2hlbGwgcHJvbXB0IHNjcmlwdCAoaW4gY29udHJpYi8pLCB3aGVuIHVzaW5nIHRoZSBQUk9NUFRfQ09NTUFORAorICAgaW50ZXJmYWNlLCB1c2VkIGFuIHVuc2FmZSBjb25zdHJ1Y3Qgd2hlbiBzaG93aW5nIHRoZSBicmFuY2ggbmFtZSBpbgorICAgJFBTMS4KKworICogImdpdCByZWJhc2UiIHVzZWQgYSBQT1NJWCBzaGVsbCBjb25zdHJ1Y3QgRnJlZUJTRCAvYmluL3NoIGRvZXMgbm90CisgICB3b3JrIHdlbGwgd2l0aC4KKworICogU29tZSBtb3JlIFVuaWNvZGUgY29kZXBvaW50cyBkZWZpbmVkIGluIFVuaWNvZGUgNi4zIGFzIGhhdmluZworICAgemVybyB3aWR0aCBoYXZlIGJlZW4gdGF1Z2h0IHRvIG91ciBkaXNwbGF5IGNvbHVtbiBjb3VudGluZyBsb2dpYy4KKworICogU29tZSB0ZXN0cyB1c2VkIHNoZWxsIGNvbnN0cnVjdHMgdGhhdCBkaWQgbm90IHdvcmsgd2VsbCBvbgorICAgRnJlZUJTRC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFkMTgzNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjQudHh0CkBAIC0wLDAgKzEsMTYgQEAKK0dpdCB2MS45LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjkuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIENvbW1hbmRzIHRoYXQgdGFrZSBwYXRoc3BlY3Mgb24gdGhlIGNvbW1hbmQgbGluZSBtaXNiZWhhdmVkIHdoZW4KKyAgIHRoZSBwYXRoc3BlYyBpcyBnaXZlbiBhcyBhbiBhYnNvbHV0ZSBwYXRobmFtZSAod2hpY2ggaXMgYQorICAgcHJhY3RpY2Ugbm90IHBhcnRpY3VsYXJseSBlbmNvdXJhZ2VkKSB0aGF0IHBvaW50cyBhdCBhIHN5bWJvbGljCisgICBsaW5rIGluIHRoZSB3b3JraW5nIHRyZWUuCisKKyAqIEFuIGVhcmxpZXIgZml4IHRvIHRoZSBzaGVsbCBwcm9tcHQgc2NyaXB0IChpbiBjb250cmliLykgZm9yIHVzaW5nCisgICB0aGUgUFJPTVBUX0NPTU1BTkQgaW50ZXJmYWNlIGRpZCBub3QgY29ycmVjdGx5IGNoZWNrIGlmIHRoZSBleHRyYQorICAgY29kZSBwYXRoIG5lZWRzIHRvIHRyaWdnZXIsIGNhdXNpbmcgdGhlIGJyYW5jaCBuYW1lIG5vdCB0byBhcHBlYXIKKyAgIHdoZW4gJ3Byb21wdHZhcnMnIG9wdGlvbiBpcyBkaXNhYmxlZCBpbiBiYXNoIG9yIFBST01QVF9TVUJTVCBpcworICAgdW5zZXQgaW4genNoLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDZhYzBjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuNS50eHQKQEAgLTAsMCArMSwzNCBAQAorR2l0IHYxLjkuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOS40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogV2UgdXNlZCB0byBhbGxvdyBjb21taXR0aW5nIGEgcGF0aCAiLkdpdC9jb25maWciIHdpdGggR2l0IHRoYXQgaXMKKyAgIHJ1bm5pbmcgb24gYSBjYXNlIHNlbnNpdGl2ZSBmaWxlc3lzdGVtLCBidXQgYW4gYXR0ZW1wdCB0byBjaGVjayBvdXQKKyAgIHN1Y2ggYSBwYXRoIHdpdGggR2l0IHRoYXQgcnVucyBvbiBhIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbQorICAgd291bGQgaGF2ZSBjbG9iYmVyZWQgIi5naXQvY29uZmlnIiwgd2hpY2ggaXMgZGVmaW5pdGVseSBub3Qgd2hhdAorICAgdGhlIHVzZXIgd291bGQgaGF2ZSBleHBlY3RlZC4gIEdpdCBub3cgcHJldmVudHMgeW91IGZyb20gdHJhY2tpbmcKKyAgIGEgcGF0aCB3aXRoICIuR2l0IiAoaW4gYW55IGNhc2UgY29tYmluYXRpb24pIGFzIGEgcGF0aCBjb21wb25lbnQuCisKKyAqIE9uIFdpbmRvd3MsIGNlcnRhaW4gcGF0aCBjb21wb25lbnRzIHRoYXQgYXJlIGRpZmZlcmVudCBmcm9tICIuZ2l0IgorICAgYXJlIG1hcHBlZCB0byAiLmdpdCIsIGUuZy4gImdpdH4xL2NvbmZpZyIgaXMgdHJlYXRlZCBhcyBpZiBpdCB3ZXJlCisgICAiLmdpdC9jb25maWciLiAgSEZTKyBoYXMgYSBzaW1pbGFyIGlzc3VlLCB3aGVyZSBjZXJ0YWluIHVuaWNvZGUKKyAgIGNvZGVwb2ludHMgYXJlIGlnbm9yZWQsIGUuZy4gIi5nXHUyMDBjaXQvY29uZmlnIiBpcyB0cmVhdGVkIGFzIGlmCisgICBpdCB3ZXJlICIuZ2l0L2NvbmZpZyIuICBQYXRobmFtZXMgd2l0aCB0aGVzZSBwb3RlbnRpYWwgaXNzdWVzIGFyZQorICAgcmVqZWN0ZWQgb24gdGhlIGFmZmVjdGVkIHN5c3RlbXMuICBHaXQgb24gc3lzdGVtcyB0aGF0IGFyZSBub3QKKyAgIGFmZmVjdGVkIGJ5IHRoaXMgaXNzdWUgKGUuZy4gTGludXgpIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8KKyAgIHJlamVjdCB0aGVtIHRvIGVuc3VyZSBjcm9zcyBwbGF0Zm9ybSBpbnRlcm9wZXJhYmlsaXR5IG9mIHRoZSBob3N0ZWQKKyAgIHByb2plY3RzLgorCisgKiAiZ2l0IGZzY2siIG5vdGljZXMgYSB0cmVlIG9iamVjdCB0aGF0IHJlY29yZHMgc3VjaCBhIHBhdGggdGhhdCBjYW4KKyAgIGJlIGNvbmZ1c2VkIHdpdGggIi5naXQiLCBhbmQgd2l0aCByZWNlaXZlLmZzY2tPYmplY3RzIGNvbmZpZ3VyYXRpb24KKyAgIHNldCB0byB0cnVlLCBhbiBhdHRlbXB0IHRvICJnaXQgcHVzaCIgc3VjaCBhIHRyZWUgb2JqZWN0IHdpbGwgYmUKKyAgIHJlamVjdGVkLiAgU3VjaCBhIHBhdGggbWF5IG5vdCBiZSBhIHByb2JsZW0gb24gYSB3ZWxsIGJlaGF2aW5nCisgICBmaWxlc3lzdGVtIGJ1dCBpbiBvcmRlciB0byBwcm90ZWN0IHRob3NlIG9uIEhGUysgYW5kIG9uIGNhc2UKKyAgIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zLCB0aGlzIGNoZWNrIGlzIGVuYWJsZWQgb24gYWxsIHBsYXRmb3Jtcy4KKworQSBiaWcgInRoYW5rcyEiIGZvciBicmluZ2luZyB0aGlzIGlzc3VlIHRvIHVzIGdvZXMgdG8gb3VyIGZyaWVuZHMgaW4KK3RoZSBNZXJjdXJpYWwgbGFuZCwgbmFtZWx5LCBNYXR0IE1hY2thbGwgYW5kIEF1Z2llIEZhY2tsZXIuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MTczNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC4wLnR4dApAQCAtMCwwICsxLDM2NCBAQAorR2l0IHYyLjAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gImdpdCBwdXNoIFskdGhlcmVdIiBkb2VzIG5vdCBzYXkgd2hhdCB0byBwdXNoLCB3ZSBoYXZlIHVzZWQgdGhlCit0cmFkaXRpb25hbCAibWF0Y2hpbmciIHNlbWFudGljcyBzbyBmYXIgKGFsbCB5b3VyIGJyYW5jaGVzIHdlcmUgc2VudAordG8gdGhlIHJlbW90ZSBhcyBsb25nIGFzIHRoZXJlIGFscmVhZHkgYXJlIGJyYW5jaGVzIG9mIHRoZSBzYW1lIG5hbWUKK292ZXIgdGhlcmUpLiAgSW4gR2l0IDIuMCwgdGhlIGRlZmF1bHQgaXMgbm93IHRoZSAic2ltcGxlIiBzZW1hbnRpY3MsCit3aGljaCBwdXNoZXM6CisKKyAtIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZSBuYW1lLCBhbmQgb25seQorICAgd2hlbiB0aGUgY3VycmVudCBicmFuY2ggaXMgc2V0IHRvIGludGVncmF0ZSB3aXRoIHRoYXQgcmVtb3RlCisgICBicmFuY2gsIGlmIHlvdSBhcmUgcHVzaGluZyB0byB0aGUgc2FtZSByZW1vdGUgYXMgeW91IGZldGNoIGZyb207IG9yCisKKyAtIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZSBuYW1lLCBpZiB5b3UKKyAgIGFyZSBwdXNoaW5nIHRvIGEgcmVtb3RlIHRoYXQgaXMgbm90IHdoZXJlIHlvdSB1c3VhbGx5IGZldGNoIGZyb20uCisKK1lvdSBjYW4gdXNlIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICJwdXNoLmRlZmF1bHQiIHRvIGNoYW5nZQordGhpcy4gIElmIHlvdSBhcmUgYW4gb2xkLXRpbWVyIHdobyB3YW50cyB0byBrZWVwIHVzaW5nIHRoZQorIm1hdGNoaW5nIiBzZW1hbnRpY3MsIHlvdSBjYW4gc2V0IHRoZSB2YXJpYWJsZSB0byAibWF0Y2hpbmciLCBmb3IKK2V4YW1wbGUuICBSZWFkIHRoZSBkb2N1bWVudGF0aW9uIGZvciBvdGhlciBwb3NzaWJpbGl0aWVzLgorCitXaGVuICJnaXQgYWRkIC11IiBhbmQgImdpdCBhZGQgLUEiIGFyZSBydW4gaW5zaWRlIGEgc3ViZGlyZWN0b3J5Cit3aXRob3V0IHNwZWNpZnlpbmcgd2hpY2ggcGF0aHMgdG8gYWRkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZXkKK29wZXJhdGUgb24gdGhlIGVudGlyZSB0cmVlIGZvciBjb25zaXN0ZW5jeSB3aXRoICJnaXQgY29tbWl0IC1hIiBhbmQKK290aGVyIGNvbW1hbmRzICh0aGVzZSBjb21tYW5kcyB1c2VkIHRvIG9wZXJhdGUgb25seSBvbiB0aGUgY3VycmVudAorc3ViZGlyZWN0b3J5KS4gIFNheSAiZ2l0IGFkZCAtdSAuIiBvciAiZ2l0IGFkZCAtQSAuIiBpZiB5b3Ugd2FudCB0bworbGltaXQgdGhlIG9wZXJhdGlvbiB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKyJnaXQgYWRkIDxwYXRoPiIgaXMgdGhlIHNhbWUgYXMgImdpdCBhZGQgLUEgPHBhdGg+IiBub3csIHNvIHRoYXQKKyJnaXQgYWRkIGRpci8iIHdpbGwgbm90aWNlIHBhdGhzIHlvdSByZW1vdmVkIGZyb20gdGhlIGRpcmVjdG9yeSBhbmQKK3JlY29yZCB0aGUgcmVtb3ZhbC4gIEluIG9sZGVyIHZlcnNpb25zIG9mIEdpdCwgImdpdCBhZGQgPHBhdGg+IiB1c2VkCit0byBpZ25vcmUgcmVtb3ZhbHMuICBZb3UgY2FuIHNheSAiZ2l0IGFkZCAtLWlnbm9yZS1yZW1vdmFsIDxwYXRoPiIgdG8KK2FkZCBvbmx5IGFkZGVkIG9yIG1vZGlmaWVkIHBhdGhzIGluIDxwYXRoPiwgaWYgeW91IHJlYWxseSB3YW50IHRvLgorCitUaGUgIi1xIiBvcHRpb24gdG8gImdpdCBkaWZmLWZpbGVzIiwgd2hpY2ggZG9lcyAqTk9UKiBtZWFuICJxdWlldCIsCitoYXMgYmVlbiByZW1vdmVkIChpdCB0b2xkIEdpdCB0byBpZ25vcmUgZGVsZXRpb24sIHdoaWNoIHlvdSBjYW4gZG8KK3dpdGggImdpdCBkaWZmLWZpbGVzIC0tZGlmZi1maWx0ZXI9ZCIpLgorCisiZ2l0IHJlcXVlc3QtcHVsbCIgbG9zdCBhIGZldyAiaGV1cmlzdGljcyIgdGhhdCBvZnRlbiBsZWQgdG8gbWlzdGFrZXMuCisKK1RoZSBkZWZhdWx0IHByZWZpeCBmb3IgImdpdCBzdm4iIGhhcyBjaGFuZ2VkIGluIEdpdCAyLjAuICBGb3IgYSBsb25nCit0aW1lLCAiZ2l0IHN2biIgY3JlYXRlZCBpdHMgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGRpcmVjdGx5IHVuZGVyCityZWZzL3JlbW90ZXMsIGJ1dCBpdCBub3cgcGxhY2VzIHRoZW0gdW5kZXIgcmVmcy9yZW1vdGVzL29yaWdpbi8gdW5sZXNzCitpdCBpcyB0b2xkIG90aGVyd2lzZSB3aXRoIGl0cyAiLS1wcmVmaXgiIG9wdGlvbi4KKworCitVcGRhdGVzIHNpbmNlIHYxLjkgc2VyaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBUaGUgIm11bHRpLW1haWwiIHBvc3QtcmVjZWl2ZSBob29rIChpbiBjb250cmliLykgaGFzIGJlZW4gdXBkYXRlZAorICAgdG8gYSBtb3JlIHJlY2VudCB2ZXJzaW9uIGZyb20gdXBzdHJlYW0uCisKKyAqIFRoZSAicmVtb3RlLWhnL2J6ciIgcmVtb3RlLWhlbHBlciBpbnRlcmZhY2VzICh1c2VkIHRvIGJlIGluCisgICBjb250cmliLykgYXJlIG5vIG1vcmUuICBUaGV5IGFyZSBub3cgbWFpbnRhaW5lZCBzZXBhcmF0ZWx5IGFzCisgICB0aGlyZC1wYXJ0eSBwbHVnLWlucyBpbiB0aGVpciBvd24gcmVwb3NpdG9yaWVzLgorCisgKiAiZ2l0IGdjIC0tYWdncmVzc2l2ZSIgbGVhcm5lZCAiLS1kZXB0aCIgb3B0aW9uIGFuZAorICAgImdjLmFnZ3Jlc3NpdmVEZXB0aCIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBhbGxvdyB1c2Ugb2YgYSBsZXNzCisgICBpbnNhbmUgZGVwdGggdGhhbiB0aGUgYnVpbHQtaW4gZGVmYXVsdCB2YWx1ZSBvZiAyNTAuCisKKyAqICJnaXQgbG9nIiBsZWFybmVkIHRoZSAiLS1zaG93LWxpbmVhci1icmVhayIgb3B0aW9uIHRvIHNob3cgd2hlcmUgYQorICAgc2luZ2xlIHN0cmFuZC1vZi1wZWFybHMgaXMgYnJva2VuIGluIGl0cyBvdXRwdXQuCisKKyAqIFRoZSAicmV2LXBhcnNlIC0tcGFyc2VvcHQiIG1lY2hhbmlzbSB1c2VkIGJ5IHNjcmlwdGVkIFBvcmNlbGFpbnMgdG8KKyAgIHBhcnNlIGNvbW1hbmQtbGluZSBvcHRpb25zIGFuZCB0byBnaXZlIGhlbHAgdGV4dCBsZWFybmVkIHRvIHRha2UKKyAgIHRoZSBhcmd2LWhlbHAgKHRoZSBwbGFjZWhvbGRlciBzdHJpbmcgZm9yIGFuIG9wdGlvbiBwYXJhbWV0ZXIsCisgICBlLmcuICJrZXktaWQiIGluICItLWdwZy1zaWduPTxrZXktaWQ+IikuCisKKyAqIFRoZSBwYXR0ZXJuIHRvIGZpbmQgd2hlcmUgdGhlIGZ1bmN0aW9uIGJlZ2lucyBpbiBDL0MrKyB1c2VkIGluCisgICAiZGlmZiIgYW5kICJncmVwIC1wIiBoYXMgYmVlbiB1cGRhdGVkIHRvIGltcHJvdmUgdmlld2luZyBDKysKKyAgIHNvdXJjZXMuCisKKyAqICJnaXQgcmViYXNlIiBsZWFybmVkIHRvIGludGVycHJldCBhIGxvbmUgIi0iIGFzICJAey0xfSIsIHRoZQorICAgYnJhbmNoIHRoYXQgd2Ugd2VyZSBwcmV2aW91c2x5IG9uLgorCisgKiAiZ2l0IGNvbW1pdCAtLWNsZWFudXA9PG1vZGU+IiBsZWFybmVkIGEgbmV3IG1vZGUsIHNjaXNzb3JzLgorCisgKiAiZ2l0IHRhZyAtLWxpc3QiIG91dHB1dCBjYW4gYmUgc29ydGVkIHVzaW5nICJ2ZXJzaW9uIHNvcnQiIHdpdGgKKyAgICItLXNvcnQ9dmVyc2lvbjpyZWZuYW1lIi4KKworICogRGlzY2FyZCB0aGUgYWNjdW11bGF0ZWQgImhldXJpc3RpY3MiIHRvIGd1ZXNzIGZyb20gd2hpY2ggYnJhbmNoIHRoZQorICAgcmVzdWx0IHdhbnRzIHRvIGJlIHB1bGxlZCBmcm9tIGFuZCBtYWtlIHN1cmUgdGhhdCB3aGF0IHRoZSBlbmQgdXNlcgorICAgc3BlY2lmaWVkIGlzIG5vdCBzZWNvbmQtZ3Vlc3NlZCBieSAiZ2l0IHJlcXVlc3QtcHVsbCIsIHRvIGF2b2lkCisgICBtaXN0YWtlcy4gIFdoZW4geW91IHB1c2hlZCBvdXQgeW91ciAnbWFzdGVyJyBicmFuY2ggdG8geW91ciBwdWJsaWMKKyAgIHJlcG9zaXRvcnkgYXMgJ2Zvci1saW51cycsIHVzZSB0aGUgbmV3ICJtYXN0ZXI6Zm9yLWxpbnVzIiBzeW50YXggdG8KKyAgIGRlbm90ZSB0aGUgYnJhbmNoIHRvIGJlIHB1bGxlZC4KKworICogImdpdCBncmVwIiBsZWFybmVkIHRvIGJlaGF2ZSBpbiBhIHdheSBzaW1pbGFyIHRvIG5hdGl2ZSBncmVwIHdoZW4KKyAgICItaCIgKG5vIGhlYWRlcikgYW5kICItYyIgKGNvdW50KSBvcHRpb25zIGFyZSBnaXZlbi4KKworICogImdpdCBwdXNoIiB2aWEgdHJhbnNwb3J0LWhlbHBlciBpbnRlcmZhY2UgaGFzIGJlZW4gdXBkYXRlZCB0bworICAgYWxsb3cgZm9yY2VkIHJlZiB1cGRhdGVzIGluIGEgd2F5IHNpbWlsYXIgdG8gdGhlIG5hdGl2ZWx5CisgICBzdXBwb3J0ZWQgdHJhbnNwb3J0cy4KKworICogVGhlICJzaW1wbGUiIG1vZGUgaXMgdGhlIGRlZmF1bHQgZm9yICJnaXQgcHVzaCIuCisKKyAqICJnaXQgYWRkIC11IiBhbmQgImdpdCBhZGQgLUEiLCB3aGVuIHJ1biB3aXRob3V0IGFueSBwYXRoc3BlYywgaXMgYQorICAgdHJlZS13aWRlIG9wZXJhdGlvbiBldmVuIHdoZW4gcnVuIGluc2lkZSBhIHN1YmRpcmVjdG9yeSBvZiBhCisgICB3b3JraW5nIHRyZWUuCisKKyAqICJnaXQgYWRkIDxwYXRoPiIgaXMgdGhlIHNhbWUgYXMgImdpdCBhZGQgLUEgPHBhdGg+IiBub3cuCisKKyAqICJjb3JlLnN0YXRpbmZvIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB3aGljaCBpcyBhCisgICBuZXZlci1hZHZlcnRpc2VkIHN5bm9ueW0gdG8gImNvcmUuY2hlY2tzdGF0IiwgaGFzIGJlZW4gcmVtb3ZlZC4KKworICogVGhlICItcSIgb3B0aW9uIHRvICJnaXQgZGlmZi1maWxlcyIsIHdoaWNoIGRvZXMgKk5PVCogbWVhbgorICAgInF1aWV0IiwgaGFzIGJlZW4gcmVtb3ZlZCAoaXQgdG9sZCBHaXQgdG8gaWdub3JlIGRlbGV0aW9uLCB3aGljaAorICAgeW91IGNhbiBkbyB3aXRoICJnaXQgZGlmZi1maWxlcyAtLWRpZmYtZmlsdGVyPWQiKS4KKworICogU2VydmVyIG9wZXJhdG9ycyBjYW4gbG9vc2VuIHRoZSAidGlwcyBvZiByZWZzIG9ubHkiIHJlc3RyaWN0aW9uIGZvcgorICAgdGhlIHJlbW90ZSBhcmNoaXZlIHNlcnZpY2Ugd2l0aCB0aGUgdXBsb2FkYXJjaGl2ZS5hbGxvd1VucmVhY2hhYmxlCisgICBjb25maWd1cmF0aW9uIG9wdGlvbi4KKworICogVGhlIHByb2dyZXNzIGluZGljYXRvcnMgZnJvbSB2YXJpb3VzIHRpbWUtY29uc3VtaW5nIGNvbW1hbmRzIGhhdmUKKyAgIGJlZW4gbWFya2VkIGZvciBpMThuL2wxMG4uCisKKyAqICJnaXQgbm90ZXMgLUMgPGJsb2I+IiBkaWFnbm9zZXMgYXMgYW4gZXJyb3IgYW4gYXR0ZW1wdCB0byB1c2UgYW4KKyAgIG9iamVjdCB0aGF0IGlzIG5vdCBhIGJsb2IuCisKKyAqICJnaXQgY29uZmlnIiBsZWFybmVkIHRvIHJlYWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgd2hlbiAiLSIgaXMKKyAgIGdpdmVuIGFzIHRoZSB2YWx1ZSB0byBpdHMgIi0tZmlsZSIgcGFyYW1ldGVyIChhdHRlbXB0aW5nIGFuCisgICBvcGVyYXRpb24gdG8gdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIGluIHRoZSBzdGFuZGFyZCBpbnB1dCBpcworICAgcmVqZWN0ZWQsIG9mIGNvdXJzZSkuCisKKyAqIFRyYWlsaW5nIHdoaXRlc3BhY2VzIGluIC5naXRpZ25vcmUgZmlsZXMsIHVubGVzcyB0aGV5IGFyZSBxdW90ZWQKKyAgIGZvciBmbm1hdGNoKDMpLCBlLmcuICJwYXRoXCAiLCBhcmUgd2FybmVkIGFuZCBpZ25vcmVkLiAgU3RyaWN0bHkKKyAgIHNwZWFraW5nLCB0aGlzIGlzIGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIGNoYW5nZSwgYnV0IHZlcnkgdW5saWtlbHkKKyAgIHRvIGJpdGUgYW55IHNhbmUgdXNlciBhbmQgYWRqdXN0aW5nIHNob3VsZCBiZSBvYnZpb3VzIGFuZCBlYXN5LgorCisgKiBNYW55IGNvbW1hbmRzIHRoYXQgY3JlYXRlIGNvbW1pdHMsIGUuZy4gInB1bGwiIGFuZCAicmViYXNlIiwKKyAgIGxlYXJuZWQgdG8gdGFrZSB0aGUgIi0tZ3BnLXNpZ24iIG9wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgKiAiZ2l0IGNvbW1pdCIgY2FuIGJlIHRvbGQgdG8gYWx3YXlzIEdQRyBzaWduIHRoZSByZXN1bHRpbmcgY29tbWl0CisgICBieSBzZXR0aW5nIHRoZSAiY29tbWl0LmdwZ3NpZ24iIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gInRydWUiCisgICAodGhlIGNvbW1hbmQtbGluZSBvcHRpb24gIi0tbm8tZ3BnLXNpZ24iIHNob3VsZCBvdmVycmlkZSBpdCkuCisKKyAqICJnaXQgcHVsbCIgY2FuIGJlIHRvbGQgdG8gb25seSBhY2NlcHQgZmFzdC1mb3J3YXJkIGJ5IHNldHRpbmcgdGhlCisgICBuZXcgInB1bGwuZmYiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAqICJnaXQgcmVzZXQiIGxlYXJuZWQgdGhlICItTiIgb3B0aW9uLCB3aGljaCBkb2VzIG5vdCByZXNldCB0aGUgaW5kZXgKKyAgIGZ1bGx5IGZvciBwYXRocyB0aGUgaW5kZXgga25vd3MgYWJvdXQgYnV0IHRoZSB0cmVlLWlzaCB0aGUgY29tbWFuZAorICAgcmVzZXRzIHRvIGRvZXMgbm90ICh0aGVzZSBwYXRocyBhcmUga2VwdCBhcyBpbnRlbmQtdG8tYWRkIGVudHJpZXMpLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgZXRjLgorCisgKiBUaGUgY29tcGlsYXRpb24gb3B0aW9ucyB0byBwb3J0IHRvIEFJWCBhbmQgdG8gTVNWQyBoYXZlIGJlZW4KKyAgIHVwZGF0ZWQuCisKKyAqIFdlIHN0YXJ0ZWQgdXNpbmcgd2lsZG1hdGNoKCkgaW4gcGxhY2Ugb2YgZm5tYXRjaCgzKSBhIGZldyByZWxlYXNlcworICAgYWdvOyBjb21wbGV0ZSB0aGUgcHJvY2VzcyBhbmQgc3RvcCB1c2luZyBmbm1hdGNoKDMpLgorCisgKiBVc2VzIG9mIGN1cmwncyAibXVsdGkiIGludGVyZmFjZSBhbmQgImVhc3kiIGludGVyZmFjZSBkbyBub3QgbWl4CisgICB3ZWxsIHdoZW4gd2UgYXR0ZW1wdCB0byByZXVzZSBvdXRnb2luZyBjb25uZWN0aW9ucy4gIFRlYWNoIHRoZSBSUEMKKyAgIG92ZXIgSFRUUCBjb2RlLCB1c2VkIGluIHRoZSBzbWFydCBIVFRQIHRyYW5zcG9ydCwgbm90IHRvIHVzZSB0aGUKKyAgICJlYXN5IiBpbnRlcmZhY2UuCisKKyAqIFRoZSBiaXRtYXAtaW5kZXggZmVhdHVyZSBmcm9tIEpHaXQgaGFzIGJlZW4gcG9ydGVkLCB3aGljaCBzaG91bGQKKyAgIHNpZ25pZmljYW50bHkgaW1wcm92ZSBwZXJmb3JtYW5jZSB3aGVuIHNlcnZpbmcgb2JqZWN0cyBmcm9tIGEKKyAgIHJlcG9zaXRvcnkgdGhhdCB1c2VzIGl0LgorCisgKiBUaGUgd2F5ICJnaXQgbG9nIC0tY2MiIHNob3dzIGEgY29tYmluZWQgZGlmZiBhZ2FpbnN0IG11bHRpcGxlCisgICBwYXJlbnRzIGhhcyBiZWVuIG9wdGltaXplZC4KKworICogVGhlIHByZWZpeGNtcCgpIGFuZCBzdWZmaXhjbXAoKSBmdW5jdGlvbnMgYXJlIGdvbmUuICBVc2UKKyAgIHN0YXJ0c193aXRoKCkgYW5kIGVuZHNfd2l0aCgpLCBhbmQgYWxzbyBjb25zaWRlciBpZiBza2lwX3ByZWZpeCgpCisgICBzdWl0cyB5b3VyIG5lZWRzIGJldHRlciB3aGVuIHVzaW5nIHRoZSBmb3JtZXIuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuICBNYW55CitvZiB0aGVtIGNhbWUgZnJvbSBmbHVycnkgb2YgYWN0aXZpdGllcyBhcyBHU29DIGNhbmRpZGF0ZSBtaWNyb3Byb2plY3QKK2V4ZXJjaXNlcy4KKworCitGaXhlcyBzaW5jZSB2MS45IHNlcmllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS45IGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSB0aGUgbWFpbnRlbmFuY2UgcmVsZWFzZXMnCitub3RlcyBmb3IgZGV0YWlscykuCisKKyAqICJnaXQgcDQiIHdhcyBicm9rZW4gaW4gMS45IHJlbGVhc2UgdG8gZGVhbCB3aXRoIGNoYW5nZXMgaW4gYmluYXJ5CisgICBmaWxlcy4KKyAgIChtZXJnZSA3NDliNjY4IGNsL3A0LXVzZS1kaWZmLXRyZWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgc2hlbGwgcHJvbXB0IHNjcmlwdCAoaW4gY29udHJpYi8pLCB3aGVuIHVzaW5nIHRoZSBQUk9NUFRfQ09NTUFORAorICAgaW50ZXJmYWNlLCB1c2VkIGFuIHVuc2FmZSBjb25zdHJ1Y3Qgd2hlbiBzaG93aW5nIHRoZSBicmFuY2ggbmFtZSBpbgorICAgJFBTMS4KKyAgIChtZXJnZSAxZTQxMTljOCByaC9wcm9tcHQtcGNtb2RlLWF2b2lkLWV2YWwtb24tcmVmbmFtZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIiB1c2VkIGEgUE9TSVggc2hlbGwgY29uc3RydWN0IEZyZWVCU0QncyAvYmluL3NoIGRvZXMgbm90CisgICB3b3JrIHdlbGwgd2l0aC4KKyAgIChtZXJnZSA4Y2Q2NTk2IGttL2F2b2lkLW5vbi1mdW5jdGlvbi1yZXR1cm4taW4tcmViYXNlIGxhdGVyIHRvIG1haW50KS4KKworICogenNoIHByb21wdCAoaW4gY29udHJpYi8pIGxlYWtlZCB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlcy4KKworICogQmFzaCBjb21wbGV0aW9uIChpbiBjb250cmliLykgZGlkIG5vdCBjb21wbGV0ZSB0aGUgcmVmcyBhbmQgcmVtb3RlcworICAgY29ycmVjdGx5IGdpdmVuICJnaXQgcHU8VEFCPiIgd2hlbiAicHUiIGlzIGFsaWFzZWQgdG8gInB1c2giLgorCisgKiBTb21lIG1vcmUgVW5pY29kZSBjb2RlIHBvaW50cywgZGVmaW5lZCBpbiBVbmljb2RlIDYuMyBhcyBoYXZpbmcgemVybworICAgd2lkdGgsIGhhdmUgYmVlbiB0YXVnaHQgdG8gb3VyIGRpc3BsYXkgY29sdW1uIGNvdW50aW5nIGxvZ2ljLgorICAgKG1lcmdlIGQ4MTNhYjkgdGIvdW5pY29kZS02LjMtemVyby13aWR0aCBsYXRlciB0byBtYWludCkuCisKKyAqIFNvbWUgdGVzdHMgdXNlZCBzaGVsbCBjb25zdHJ1Y3RzIHRoYXQgZGlkIG5vdCB3b3JrIHdlbGwgb24gRnJlZUJTRAorICAgKG1lcmdlIGZmN2ExYzYga20vYXZvaWQtYnMtaW4tc2hlbGwtZ2xvYiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDA3NjRjYSBrbS9hdm9pZC1jcC1hIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCB1cGRhdGUtcmVmIC0tc3RkaW4iIGRpZCBub3QgZmFpbCBhIHJlcXVlc3QgdG8gY3JlYXRlIGEgcmVmCisgICB3aGVuIHRoZSByZWYgYWxyZWFkeSBleGlzdGVkLgorICAgKG1lcmdlIGI5ZDU2YjUgbWgvdXBkYXRlLXJlZi1iYXRjaC1jcmVhdGUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIC0tbm8taW5kZXggLU1xIGEgYiIgZmVsbCBpbnRvIGFuIGluZmluaXRlIGxvb3AuCisgICAobWVyZ2UgYWQxYzNmYiBqYy9maXgtZGlmZi1uby1pbmRleC1kaWZmLW9wdC1wYXJzZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmV0Y2ggLS1wcnVuZSIsIHdoZW4gdGhlIHJpZ2h0LWhhbmQgc2lkZSBvZiBtdWx0aXBsZSBmZXRjaAorICAgcmVmc3BlY3Mgb3ZlcmxhcCAoZS5nLiBzdG9yaW5nICJyZWZzL2hlYWRzLyoiIHRvCisgICAicmVmcy9yZW1vdGVzL29yaWdpbi8qIiwgd2hpbGUgc3RvcmluZyAicmVmcy9mcm90ei8qIiB0bworICAgInJlZnMvcmVtb3Rlcy9vcmlnaW4vZnIvKiIpLCBhZ2dyZXNzaXZlbHkgdGhvdWdodCB0aGF0IGxhY2sgb2YKKyAgICJyZWZzL2hlYWRzL2ZyL290eiIgb24gdGhlIG9yaWdpbiBzaXRlIG1lYW50IHdlIHNob3VsZCByZW1vdmUKKyAgICJyZWZzL3JlbW90ZXMvb3JpZ2luL2ZyL290eiIgZnJvbSB1cywgd2l0aG91dCBjaGVja2luZyB0aGVpcgorICAgInJlZnMvZnJvdHovb3R6IiBmaXJzdC4KKworICAgTm90ZSB0aGF0IHN1Y2ggYSBjb25maWd1cmF0aW9uIGlzIGluaGVyZW50bHkgdW5zYWZlICh0aGluayB3aGF0CisgICBzaG91bGQgaGFwcGVuIHdoZW4gInJlZnMvaGVhZHMvZnIvb3R6IiBkb2VzIGFwcGVhciBvbiB0aGUgb3JpZ2luCisgICBzaXRlKSwgYnV0IHRoYXQgaXMgbm90IGEgcmVhc29uIG5vdCB0byBiZSBleHRyYSBjYXJlZnVsLgorICAgKG1lcmdlIGU2ZjYzNzEgY24vZmV0Y2gtcHJ1bmUtb3ZlcmxhcHBpbmctZGVzdGluYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWJyYW5jaCIgc2hvd2VkIGl0cyBvdXRwdXQgd2l0aCBsYWJlbHMKKyAgICJhaGVhZC9iZWhpbmQvZ29uZSIgdHJhbnNsYXRlZCB0byB0aGUgdXNlcidzIGxvY2FsZS4KKyAgIChtZXJnZSA3YTc2YzI4IG1tL3N0YXR1cy1wb3JjZWxhaW4tZm9ybWF0LWkxOG4tZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQSBzdHJheSBlbnZpcm9ubWVudCB2YXJpYWJsZSAkcHJlZml4IGNvdWxkIGhhdmUgbGVha2VkIGludG8gYW5kCisgICBhZmZlY3RlZCB0aGUgYmVoYXZpb3VyIG9mIHRoZSAic3VidHJlZSIgc2NyaXB0IChpbiBjb250cmliLykuCisKKyAqIFdoZW4gaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBlZGl0IGEgY29tbWl0IGxvZyBtZXNzYWdlIChlLmcuICJnaXQKKyAgIGNvbW1pdCAtbSIgaXMgZ2l2ZW4gYSBtZXNzYWdlIHdpdGhvdXQgc3BlY2lmeWluZyAiLWUiKSwgd2UgdXNlZCB0bworICAgZGlzYWJsZSB0aGUgc3Bhd25pbmcgb2YgdGhlIGVkaXRvciBieSBvdmVycmlkaW5nIEdJVF9FRElUT1IsIGJ1dAorICAgdGhpcyBtZWFucyBhbGwgdGhlIHVzZXMgb2YgdGhlIGVkaXRvciwgb3RoZXIgdGhhbiB0byBlZGl0IHRoZQorICAgY29tbWl0IGxvZyBtZXNzYWdlLCBhcmUgYWxzbyBhZmZlY3RlZC4KKyAgIChtZXJnZSBiNTQ5YmUwIGJwL2NvbW1pdC1wLWVkaXRvciBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbXYiIHRoYXQgbW92ZXMgYSBzdWJtb2R1bGUgZm9yZ290IHRvIGFkanVzdCB0aGUgYXJyYXkgdGhhdAorICAgdXNlcyB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIHN1Ym1vZHVsZXMgd2VyZSB0byBiZSBtb3ZlZCB0byB1cGRhdGUKKyAgIGl0cyBjb25maWd1cmF0aW9uLgorICAgKG1lcmdlIGZiOGE0ZTggamsvbXYtc3VibW9kdWxlcy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBMZW5ndGggbGltaXQgZm9yIHRoZSBwYXRobmFtZSB1c2VkIHdoZW4gcmVtb3ZpbmcgYSBwYXRoIGluIGEgZGVlcAorICAgc3ViZGlyZWN0b3J5IGhhcyBiZWVuIHJlbW92ZWQgdG8gYXZvaWQgYnVmZmVyIG92ZXJmbG93cy4KKyAgIChtZXJnZSAyZjI5ZTBjIG1oL3JlbW92ZS1zdWJ0cmVlLWxvbmctcGF0aG5hbWUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHRlc3QgaGVscGVyIGxpYi10ZXJtaW5hbCBhbHdheXMgcnVuIGFuIGFjdHVhbCB0ZXN0X2V4cGVjdF8qCisgICB3aGVuIGluY2x1ZGVkLCB3aGljaCBzY3Jld2VkIHVwIHdpdGggdGhlIHVzZSBvZiBza2lsLWFsbCB0aGF0IG1heQorICAgaGF2ZSB0byBiZSBkb25lIGxhdGVyLgorICAgKG1lcmdlIDdlMjcxNzMgamsvbGliLXRlcm1pbmFsLWxhenkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGluZGV4LXBhY2siIHVzZWQgYSB3cm9uZyB2YXJpYWJsZSB0byBuYW1lIHRoZSBrZWVwLWZpbGUgaW4gYW4KKyAgIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgZmlsZSBjYW5ub3QgYmUgd3JpdHRlbiBvciBjbG9zZWQuCisgICAobWVyZ2UgZGU5ODNhMCBuZC9pbmRleC1wYWNrLWVycm9yLW1lc3NhZ2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAicmViYXNlIC1pIiBwcm9kdWNlZCBhIGJyb2tlbiBpbnNuIHNoZWV0IHdoZW4gdGhlIHRpdGxlIG9mIGEgY29tbWl0CisgICBoYXBwZW5lZCB0byBjb250YWluICdcbicgKG9yIGVuZGVkIHdpdGggJ1xjJykgZHVlIHRvIGEgY2FyZWxlc3MgdXNlCisgICBvZiAnZWNobycuCisgICAobWVyZ2UgY2IxYWVmZCB1cy9wcmludGYtbm90LWVjaG8gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGVyZSB3ZXJlIGEgZmV3IGluc3RhbmNlcyBvZiAnZ2l0LWZvbycgcmVtYWluaW5nIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc3BlbGxlZCAnZ2l0IGZvbycuCisgICAobWVyZ2UgM2MzZTZmNSByci9kb2MtbWVyZ2Utc3RyYXRlZ2llcyBsYXRlciB0byBtYWludCkuCisKKyAqIFNlcnZpbmcgb2JqZWN0cyBmcm9tIGEgc2hhbGxvdyByZXBvc2l0b3J5IG5lZWRzIHRvIHdyaXRlIGEKKyAgIG5ldyBmaWxlIHRvIGhvbGQgdGhlIHRlbXBvcmFyeSBzaGFsbG93IGJvdW5kYXJpZXMsIGJ1dCBpdCB3YXMgbm90CisgICBjbGVhbmVkIHdoZW4gd2UgZXhpdCBkdWUgdG8gZGllKCkgb3IgYSBzaWduYWwuCisgICAobWVyZ2UgNzgzOTYzMiBqay9zaGFsbG93LXVwZGF0ZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuICJnaXQgc3Rhc2ggcG9wIiBzdG9wcyBhZnRlciBmYWlsaW5nIHRvIGFwcGx5IHRoZSBzdGFzaAorICAgKGUuZy4gZHVlIHRvIGNvbmZsaWN0aW5nIGNoYW5nZXMpLCB0aGUgc3Rhc2ggaXMgbm90IGRyb3BwZWQuIFN0YXRlCisgICB0aGF0IGV4cGxpY2l0bHkgaW4gdGhlIG91dHB1dCB0byBsZXQgdGhlIHVzZXJzIGtub3cuCisgICAobWVyZ2UgMmQ0Yzk5MyBqYy9zdGFzaC1wb3Atbm90LXBvcHBlZCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBsYWJlbHMgaW4gImdpdCBzdGF0dXMiIG91dHB1dCB0aGF0IGRlc2NyaWJlIHRoZSBuYXR1cmUgb2YKKyAgIGNvbmZsaWN0cyAoZS5nLiAiYm90aCBkZWxldGVkIikgd2VyZSBsaW1pdGVkIHRvIDIwIGJ5dGVzLCB3aGljaCB3YXMKKyAgIHRvbyBzaG9ydCBmb3Igc29tZSBsMTBuIChlLmcuIGZyKS4KKyAgIChtZXJnZSBjN2NiMzMzIGpuL3d0LXN0YXR1cyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2xlYW4gLWQgcGF0aHNwZWMiIGRpZCBub3QgdXNlIHRoZSBnaXZlbiBwYXRoc3BlYyBjb3JyZWN0bHkKKyAgIGFuZCBlbmRlZCB1cCBjbGVhbmluZyB0b28gbXVjaC4KKyAgIChtZXJnZSAxZjJlMTA4IGprL2NsZWFuLWQtcGF0aHNwZWMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBtaXNiZWhhdmVkIHdoZW4gdGhlIHJlcG9zaXRvcnkgaXMgYm91bmQgdG8gdGhlCisgICB3b3JraW5nIHRyZWUgd2l0aCB0aGUgIi5naXQgZmlsZSIgbWVjaGFuaXNtLCB3aGVyZSBhIHRleHR1YWwgZmlsZQorICAgIi5naXQiIHRlbGxzIHVzIHdoZXJlIGl0IGlzLgorICAgKG1lcmdlIGZjZmVjOGIgZGEvZGlmZnRvb2wtZ2l0LWZpbGVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdXNoIiBkaWQgbm90IHBheSBhdHRlbnRpb24gdG8gImJyYW5jaC4qLnB1c2hyZW1vdGUiIGlmIGl0IGlzCisgICBkZWZpbmVkIGVhcmxpZXIgdGhhbiAicmVtb3RlLnB1c2hkZWZhdWx0IjsgdGhlIG9yZGVyIG9mIHRoZXNlIHR3bworICAgdmFyaWFibGVzIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIG5vdCBtYXR0ZXIsIGJ1dCBpdCBkaWQKKyAgIGJ5IG1pc3Rha2UuCisgICAobWVyZ2UgOThiNDA2ZiBqay9yZW1vdGUtcHVzaHJlbW90ZS1jb25maWctcmVhZGluZyBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgcGF0aHMgdGhhdCBwYXJzZSB0aW1lc3RhbXBzIGluIGNvbW1pdCBvYmplY3RzIGhhdmUgYmVlbgorICAgdGlnaHRlbmVkLgorICAgKG1lcmdlIGY4MGQxZjkgamsvY29tbWl0LWRhdGVzLXBhcnNpbmctZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIC0tZXh0ZXJuYWwtZGlmZiIgaW5jb3JyZWN0bHkgZmVkIHRoZSBzdWJtb2R1bGUgZGlyZWN0b3J5CisgICBpbiB0aGUgd29ya2luZyB0cmVlIHRvIHRoZSBleHRlcm5hbCBkaWZmIGRyaXZlciB3aGVuIGl0IGtuZXcgdGhhdCBpdAorICAgaXMgdGhlIHNhbWUgYXMgb25lIG9mIHRoZSB2ZXJzaW9ucyBiZWluZyBjb21wYXJlZC4KKyAgIChtZXJnZSBhYmE0NzI3IHRyL2RpZmYtc3VibW9kdWxlLW5vLXJldXNlLXdvcmt0cmVlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXNldCIgbmVlZHMgdG8gcmVmcmVzaCB0aGUgaW5kZXggd2hlbiB3b3JraW5nIGluIGEgd29ya2luZworICAgdHJlZSAoaXQgY2FuIGFsc28gYmUgdXNlZCB0byBtYXRjaCB0aGUgaW5kZXggdG8gdGhlIEhFQUQgaW4gYW4KKyAgIG90aGVyd2lzZSBiYXJlIHJlcG9zaXRvcnkpLCBidXQgaXQgZmFpbGVkIHRvIHNldCB1cCB0aGUgd29ya2luZworICAgdHJlZSBwcm9wZXJseSwgY2F1c2luZyBHSVRfV09SS19UUkVFIHRvIGJlIGlnbm9yZWQuCisgICAobWVyZ2UgYjc3NTZkNCBuZC9yZXNldC1zZXR1cC13b3JrdHJlZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2hlY2stYXR0ciIgd2hlbiB3b3JraW5nIG9uIGEgcmVwb3NpdG9yeSB3aXRoIGEgd29ya2luZyB0cmVlCisgICBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIHRoZSB3b3JraW5nIHRyZWUgd2FzIHNwZWNpZmllZCB2aWEgdGhlCisgICAiLS13b3JrLXRyZWUiIChhbmQgb2J2aW91c2x5IHdpdGggIi0tZ2l0LWRpciIpIG9wdGlvbi4KKyAgIChtZXJnZSBjZGJmNjIzIGpjL2NoZWNrLWF0dHItaG9ub3Itd29ya2luZy10cmVlIGxhdGVyIHRvIG1haW50KS4KKworICogIm1lcmdlLXJlY3Vyc2l2ZSIgd2FzIGJyb2tlbiBpbiAxLjcuNyBlcmEgYW5kIHN0b3BwZWQgd29ya2luZyBpbgorICAgYW4gZW1wdHkgKHRlbXBvcmFyeSkgd29ya2luZyB0cmVlLCB3aGVuIHRoZXJlIGFyZSByZW5hbWVzCisgICBpbnZvbHZlZC4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDZlMjA2OGEgYmsvcmVmcmVzaC1taXNzaW5nLW9rLWluLW1lcmdlLXJlY3Vyc2l2ZSBsYXRlciB0byBtYWludC4pCisKKyAqICJnaXQgcmV2LXBhcnNlIiB3YXMgbG9vc2UgaW4gcmVqZWN0aW5nIGNvbW1hbmQtbGluZSBhcmd1bWVudHMKKyAgIHRoYXQgZG8gbm90IG1ha2Ugc2Vuc2UsIGUuZy4gIi0tZGVmYXVsdCIgd2l0aG91dCB0aGUgcmVxdWlyZWQKKyAgIHZhbHVlIGZvciB0aGF0IG9wdGlvbi4KKyAgIChtZXJnZSBhNDMyMTlmIGRzL3Jldi1wYXJzZS1yZXF1aXJlZC1hcmdzIGxhdGVyIHRvIG1haW50LikKKworICogImluY2x1ZGUucGF0aCIgdmFyaWFibGUgKG9yIGFueSB2YXJpYWJsZSB0aGF0IGV4cGVjdHMgYSBwYXRoIHRoYXQKKyAgIGNhbiB1c2UgfnVzZXJuYW1lIGV4cGFuc2lvbikgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBub3QgYQorICAgYm9vbGVhbiwgYnV0IHRoZSBjb2RlIGZhaWxlZCB0byBjaGVjayBpdC4KKyAgIChtZXJnZSA2N2JlYjYwIGprL2NvbmZpZy1wYXRoLWluY2x1ZGUtZml4IGxhdGVyIHRvIG1haW50LikKKworICogQ29tbWFuZHMgdGhhdCB0YWtlIHBhdGhzcGVjcyBvbiB0aGUgY29tbWFuZCBsaW5lIG1pc2JlaGF2ZWQgd2hlbgorICAgdGhlIHBhdGhzcGVjIGlzIGdpdmVuIGFzIGFuIGFic29sdXRlIHBhdGhuYW1lICh3aGljaCBpcyBhCisgICBwcmFjdGljZSBub3QgcGFydGljdWxhcmx5IGVuY291cmFnZWQpIHRoYXQgcG9pbnRzIGF0IGEgc3ltYm9saWMKKyAgIGxpbmsgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKyAgIChtZXJnZSA2MTI3ZmY2IG13L3N5bWxpbmtzIGxhdGVyIHRvIG1haW50LikKKworICogImdpdCBkaWZmIC0tcXVpZXQgLS0gcGF0aHNwZWMxIHBhdGhzcGVjMiIgc29tZXRpbWVzIGRpZCBub3QgcmV0dXJuCisgICB0aGUgY29ycmVjdCBzdGF0dXMgdmFsdWUuCisgICAobWVyZ2UgZjM0YjIwNSBuZC9kaWZmLXF1aWV0LXN0YXQtZGlydHkgbGF0ZXIgdG8gbWFpbnQuKQorCisgKiBBdHRlbXB0aW5nIHRvIGRlZXBlbiBhIHNoYWxsb3cgcmVwb3NpdG9yeSBieSBmZXRjaGluZyBvdmVyIHNtYXJ0CisgICBIVFRQIHRyYW5zcG9ydCBmYWlsZWQgaW4gdGhlIHByb3RvY29sIGV4Y2hhbmdlLCB3aGVuIHRoZSBuby1kb25lCisgICBleHRlbnNpb24gd2FzIHVzZWQuICBUaGUgZmV0Y2hpbmcgc2lkZSB3YWl0ZWQgZm9yIHRoZSBsaXN0IG9mCisgICBzaGFsbG93IGJvdW5kYXJ5IGNvbW1pdHMgYWZ0ZXIgdGhlIHNlbmRpbmcgc2lkZSBzdG9wcGVkIHRhbGtpbmcgdG8KKyAgIGl0LgorICAgKG1lcmdlIDAyMzI4NTIgbmQvaHR0cC1mZXRjaC1zaGFsbG93LWZpeCBsYXRlciB0byBtYWludC4pCisKKyAqIEFsbG93ICJnaXQgY21kIHBhdGgvIiwgd2hlbiB0aGUgJ3BhdGgnIGlzIHdoZXJlIGEgc3VibW9kdWxlIGlzCisgICBib3VuZCB0byB0aGUgdG9wLWxldmVsIHdvcmtpbmcgdHJlZSwgdG8gbWF0Y2ggJ3BhdGgnLCBkZXNwaXRlIHRoZQorICAgZXh0cmEgYW5kIHVubmVjZXNzYXJ5IHRyYWlsaW5nIHNsYXNoIChzdWNoIGEgc2xhc2ggaXMgb2Z0ZW4KKyAgIGdpdmVuIGJ5IGNvbW1hbmQtbGluZSBjb21wbGV0aW9uKS4KKyAgIChtZXJnZSAyZTcwYzAxIG5kL3N1Ym1vZHVsZS1wYXRoc3BlYy1lbmRpbmctd2l0aC1zbGFzaCBsYXRlciB0byBtYWludC4pCisKKyAqIERvY3VtZW50YXRpb24gYW5kIGluLWNvZGUgY29tbWVudHMgaGFkIG1hbnkgaW5zdGFuY2VzIG9mIG1pc3Rha2VuCisgICB1c2Ugb2YgIm5vciIsIHdoaWNoIGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgMjM1ZThkNSBqbC9ub3Itb3ItbmFuZC1hbmQgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTU1NzlkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuMS50eHQKQEAgLTAsMCArMSwxMTUgQEAKK0dpdCB2Mi4wLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAqIFdlIHVzZWQgdG8gdW5jb25kaXRpb25hbGx5IGRpc2FibGUgdGhlIHBhZ2VyIGluIHRoZSBwYWdlciBwcm9jZXNzCisgICB3ZSBzcGF3biB0byBmZWVkIG91dCBvdXRwdXQsIGJ1dCB0aGF0IHByZXZlbnRlZCBwZW9wbGUgd2hvIHdhbnQgdG8KKyAgIHJ1biAibGVzcyIgd2l0aGluICJsZXNzIiBmcm9tIGRvaW5nIHNvLgorCisgKiBUb29scyB0aGF0IHJlYWQgZGlhZ25vc3RpYyBvdXRwdXQgaW4gb3VyIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBkbworICAgbm90IHdhbnQgdG8gc2VlIHRlcm1pbmFsIGNvbnRyb2wgc2VxdWVuY2UgKGUuZy4gZXJhc2UtdG8tZW9sKS4KKyAgIERldGVjdCB0aGVtIGJ5IGNoZWNraW5nIGlmIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gaXMgY29ubmVjdGVkCisgICB0byBhIHR0eS4KKyAqIFJld29yZGVkIHRoZSBlcnJvciBtZXNzYWdlIGdpdmVuIHVwb24gYSBmYWlsdXJlIHRvIG9wZW4gYW4gZXhpc3RpbmcKKyAgIGxvb3NlIG9iamVjdCBmaWxlIGR1ZSB0byBlLmcuIHBlcm1pc3Npb24gaXNzdWVzOyBpdCB3YXMgcmVwb3J0ZWQgYXMKKyAgIHRoZSBvYmplY3QgYmVpbmcgY29ycnVwdCwgYnV0IHRoYXQgaXMgbm90IHF1aXRlIHRydWUuCisKKyAqICJnaXQgbG9nIC0ybWFzdGVyIiBpcyBhIGNvbW1vbiB0eXBvIHRoYXQgc2hvd3MgdHdvIGNvbW1pdHMgc3RhcnRpbmcKKyAgIGZyb20gd2hpY2hldmVyIHJhbmRvbSBicmFuY2ggdGhhdCBpcyBub3QgJ21hc3RlcicgdGhhdCBoYXBwZW5zIHRvCisgICBiZSBjaGVja2VkIG91dCBjdXJyZW50bHkuCisKKyAqIFRoZSAiJTwoMTAsdHJ1bmMpJXMiIHByZXR0eSBmb3JtYXQgc3BlY2lmaWVyIGluIHRoZSBsb2cgZmFtaWx5IG9mCisgICBjb21tYW5kcyBpcyB1c2VkIHRvIHRydW5jYXRlIHRoZSBzdHJpbmcgdG8gYSBnaXZlbiBsZW5ndGggKGUuZy4gMTAKKyAgIGluIHRoZSBleGFtcGxlKSB3aXRoIHBhZGRpbmcgdG8gY29sdW1uLWFsaWduIHRoZSBvdXRwdXQsIGJ1dCBkaWQKKyAgIG5vdCB0YWtlIGludG8gYWNjb3VudCB0aGF0IG51bWJlciBvZiBieXRlcyBhbmQgbnVtYmVyIG9mIGRpc3BsYXkKKyAgIGNvbHVtbnMgYXJlIGRpZmZlcmVudC4KKworICogVGhlICJtYWlsbWFwLmZpbGUiIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRpZCBub3Qgc3VwcG9ydCB0aGUgdGlsZGUKKyAgIGV4cGFuc2lvbiAoaS5lLiB+dXNlci9wYXRoIGFuZCB+L3BhdGgpLgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHRzIChpbiBjb250cmliLykgZGlkIG5vdCBrbm93IGFib3V0IHF1aXRlIGEgZmV3CisgICBvcHRpb25zIHRoYXQgYXJlIGNvbW1vbiBiZXR3ZWVuICJnaXQgbWVyZ2UiIGFuZCAiZ2l0IHB1bGwiLCBhbmQgYQorICAgY291cGxlIG9mIG9wdGlvbnMgdW5pcXVlIHRvICJnaXQgbWVyZ2UiLgorCisgKiAiLS1pZ25vcmUtc3BhY2UtY2hhbmdlIiBvcHRpb24gb2YgImdpdCBhcHBseSIgaWdub3JlZCB0aGUgc3BhY2VzCisgICBhdCB0aGUgYmVnaW5uaW5nIG9mIGxpbmUgdG9vIGFnZ3Jlc3NpdmVseSwgd2hpY2ggaXMgaW5jb25zaXN0ZW50CisgICB3aXRoIHRoZSBvcHRpb24gb2YgdGhlIHNhbWUgbmFtZSAiZGlmZiIgYW5kICJnaXQgZGlmZiIgaGF2ZS4KKworICogImdpdCBibGFtZSIgbWlzY291bnRlZCBudW1iZXIgb2YgY29sdW1ucyBuZWVkZWQgdG8gc2hvdyBsb2NhbGl6ZWQKKyAgIHRpbWVzdGFtcHMsIHJlc3VsdGluZyBpbiBqYWdneSBsZWZ0LXNpZGUtZWRnZSBvZiB0aGUgc291cmNlIGNvZGUKKyAgIGxpbmVzIGluIGl0cyBvdXRwdXQuCisKKyAqICJnaXQgYmxhbWUiIGFzc2lnbmVkIHRoZSBibGFtZSB0byB0aGUgY29weSBpbiB0aGUgd29ya2luZy10cmVlIGlmCisgICB0aGUgcmVwb3NpdG9yeSBpcyBzZXQgdG8gY29yZS5hdXRvY3JsZj1pbnB1dCBhbmQgdGhlIGZpbGUgdXNlZCBDUkxGCisgICBsaW5lIGVuZGluZ3MuCisKKyAqICJnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAtQyAkY29tbWl0IiBkaWQgbm90IHdvcmsgd2hlbiB0aGUKKyAgIGNvbW1pdCBkaWQgbm90IGhhdmUgYW55IGxvZyBtZXNzYWdlLgorCisgKiAiZ2l0IGRpZmYgLS1maW5kLWNvcGllcy1oYXJkZXIiIHNvbWV0aW1lcyBwcmV0ZW5kZWQgYXMgaWYgdGhlIG1vZGUKKyAgIGJpdHMgaGF2ZSBjaGFuZ2VkIGZvciBwYXRocyB0aGF0IGFyZSBtYXJrZWQgd2l0aCBhc3N1bWUtdW5jaGFuZ2VkCisgICBiaXQuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBkaWQgbm90IGVuZm9yY2UgdGhlIHJ1bGUgdGhhdCB0aGUgIi0tZm9sbG93IgorICAgb3B0aW9uIGZyb20gdGhlIGxvZy9kaWZmIGZhbWlseSBvZiBjb21tYW5kcyBtdXN0IGJlIHVzZWQgd2l0aAorICAgZXhhY3RseSBvbmUgcGF0aHNwZWMuCisKKyAqICJnaXQgZ2MgLS1hdXRvIiB3YXMgcmVjZW50bHkgY2hhbmdlZCB0byBydW4gaW4gdGhlIGJhY2tncm91bmQgdG8KKyAgIGdpdmUgY29udHJvbCBiYWNrIGVhcmx5IHRvIHRoZSBlbmQtdXNlciBzaXR0aW5nIGluIGZyb250IG9mIHRoZQorICAgdGVybWluYWwsIGJ1dCBpdCBmb3Jnb3QgdGhhdCBob3VzZWtlZXBpbmcgaW52b2x2aW5nIHJlZmxvZ3Mgc2hvdWxkCisgICBiZSBkb25lIHdpdGhvdXQgb3RoZXIgcHJvY2Vzc2VzIGNvbXBldGluZyBmb3IgYWNjZXNzZXMgdG8gdGhlIHJlZnMuCisKKyAqICJnaXQgZ3JlcCAtTyIgdG8gc2hvdyB0aGUgbGluZXMgdGhhdCBoaXQgaW4gdGhlIHBhZ2VyIGRpZCBub3Qgd29yaworICAgd2VsbCB3aXRoIGNhc2UgaW5zZW5zaXRpdmUgc2VhcmNoLiAgV2Ugbm93IHNwYXduICJsZXNzIiB3aXRoIGl0cworICAgIi1JIiBvcHRpb24gd2hlbiBpdCBpcyB1c2VkIGFzIHRoZSBwYWdlciAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLgorCisgKiBXZSB1c2VkIHRvIGRpc2FibGUgdGhyZWFkZWQgImdpdCBpbmRleC1wYWNrIiBvbiBwbGF0Zm9ybXMgd2l0aG91dAorICAgdGhyZWFkLXNhZmUgcHJlYWQoKTsgdXNlIGEgZGlmZmVyZW50IHdvcmthcm91bmQgZm9yIHN1Y2gKKyAgIHBsYXRmb3JtcyB0byBhbGxvdyB0aHJlYWRlZCAiZ2l0IGluZGV4LXBhY2siLgorCisgKiBUaGUgZXJyb3IgcmVwb3J0aW5nIGZyb20gImdpdCBpbmRleC1wYWNrIiBoYXMgYmVlbiBpbXByb3ZlZCB0bworICAgZGlzdGluZ3Vpc2ggbWlzc2luZyBvYmplY3RzIGZyb20gdHlwZSBlcnJvcnMuCisKKyAqICJnaXQgbWFpbGluZm8iIHVzZWQgdG8gcmVhZCBiZXlvbmQgdGhlIGVuZCBvZiBoZWFkZXIgc3RyaW5nIHdoaWxlCisgICBwYXJzaW5nIGFuIGluY29taW5nIGUtbWFpbCBtZXNzYWdlIHRvIGV4dHJhY3QgdGhlIHBhdGNoLgorCisgKiBPbiBhIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSwgbWVyZ2UtcmVjdXJzaXZlIGluY29ycmVjdGx5CisgICBkZWxldGVkIHRoZSBmaWxlIHRoYXQgaXMgdG8gYmUgcmVuYW1lZCB0byBhIG5hbWUgdGhhdCBpcyB0aGUgc2FtZQorICAgZXhjZXB0IGZvciBjYXNlIGRpZmZlcmVuY2VzLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgdW5uZWNlc3NhcmlseSBjb3BpZWQgdGhlIHByZXZpb3VzIGNvbnRlbnRzIHdoZW4KKyAgIGV4dGVuZGluZyB0aGUgaGFzaHRhYmxlLCBldmVuIHRob3VnaCBpdCB3aWxsIHBvcHVsYXRlIHRoZSB0YWJsZQorICAgZnJvbSBzY3JhdGNoIGFueXdheS4KKworICogImdpdCByZXJlcmUgZm9yZ2V0IiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIG1lcmdlLmNvbmZsaWN0c3R5bGUKKyAgIHdhcyBzZXQgdG8gYSBub24tZGVmYXVsdCB2YWx1ZS4KKworICogImdpdCByZW1vdGUgcm0iIGFuZCAiZ2l0IHJlbW90ZSBwcnVuZSIgY2FuIGludm9sdmUgcmVtb3ZpbmcgbWFueQorICAgcmVmcyBhdCBvbmNlLCB3aGljaCBpcyBub3QgYSB2ZXJ5IGVmZmljaWVudCB0aGluZyB0byBkbyB3aGVuIHZlcnkKKyAgIG1hbnkgcmVmcyBleGlzdCBpbiB0aGUgcGFja2VkLXJlZnMgZmlsZS4KKworICogImdpdCBsb2cgLS1leGNsdWRlPTxnbG9iPiAtLWFsbCB8IGdpdCBzaG9ydGxvZyIgd29ya2VkIGFzIGV4cGVjdGVkLAorICAgYnV0ICJnaXQgc2hvcnRsb2cgLS1leGNsdWRlPTxnbG9iPiAtLWFsbCIsIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGJlCisgICBpZGVudGljYWwgdG8gdGhlIGFib3ZlIHBpcGVsaW5lLCB3YXMgbm90IGFjY2VwdGVkIGF0IHRoZSBjb21tYW5kCisgICBsaW5lIGFyZ3VtZW50IHBhcnNlciBsZXZlbC4KKworICogVGhlIGF1dG9zdGFzaCBtb2RlIG9mICJnaXQgcmViYXNlIC1pIiBkaWQgbm90IHJlc3RvcmUgdGhlIGRpcnR5CisgICB3b3JraW5nIHRyZWUgc3RhdGUgaWYgdGhlIHVzZXIgYWJvcnRlZCB0aGUgaW50ZXJhY3RpdmUgcmViYXNlIGJ5CisgICBlbXB0eWluZyB0aGUgaW5zbiBzaGVldC4KKworICogImdpdCBzaG93IC1zIiAoaS5lLiBzaG93IGxvZyBtZXNzYWdlIG9ubHkpIHVzZWQgdG8gaW5jb3JyZWN0bHkgZW1pdAorICAgYW4gZXh0cmEgYmxhbmsgbGluZSBhZnRlciBhIG1lcmdlIGNvbW1pdC4KKworICogImdpdCBzdGF0dXMiLCBldmVuIHRob3VnaCBpdCBpcyBhIHJlYWQtb25seSBvcGVyYXRpb24sIHRyaWVzIHRvCisgICB1cGRhdGUgdGhlIGluZGV4IHdpdGggcmVmcmVzaGVkIGxzdGF0KDIpIGluZm8gdG8gb3B0aW1pemUgZnV0dXJlCisgICBhY2Nlc3NlcyB0byB0aGUgd29ya2luZyB0cmVlIG9wcG9ydHVuaXN0aWNhbGx5LCBidXQgdGhpcyBjb3VsZAorICAgcmFjZSB3aXRoIGEgInJlYWQtd3JpdGUiIG9wZXJhdGlvbiB0aGF0IG1vZGlmeSB0aGUgaW5kZXggd2hpbGUgaXQKKyAgIGlzIHJ1bm5pbmcuICBEZXRlY3Qgc3VjaCBhIHJhY2UgYW5kIGF2b2lkIG92ZXJ3cml0aW5nIHRoZSBpbmRleC4KKworICogImdpdCBzdGF0dXMiIChhbmQgImdpdCBjb21taXQiKSBiZWhhdmVkIGFzIGlmIGNoYW5nZXMgaW4gYSBtb2RpZmllZAorICAgc3VibW9kdWxlIGFyZSBub3QgdGhlcmUgaWYgc3VibW9kdWxlLiouaWdub3JlIGNvbmZpZ3VyYXRpb24gaXMgc2V0LAorICAgd2hpY2ggd2FzIG1pc2xlYWRpbmcuICBUaGUgY29uZmlndXJhdGlvbiBpcyBvbmx5IHRvIHVuY2x1dHRlciBkaWZmCisgICBvdXRwdXQgZHVyaW5nIHRoZSBjb3Vyc2Ugb2YgZGV2ZWxvcG1lbnQsIGFuZCBzaG91bGQgbm90IHRvIGhpZGUKKyAgIGNoYW5nZXMgaW4gdGhlICJzdGF0dXMiIG91dHB1dCB0byBjYXVzZSB0aGUgdXNlcnMgZm9yZ2V0IHRvIGNvbW1pdAorICAgdGhlbS4KKworICogVGhlIG1vZGUgdG8gcnVuIHRlc3RzIHdpdGggSFRUUCBzZXJ2ZXIgdGVzdHMgZGlzYWJsZWQgd2FzIGJyb2tlbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU4MzIxYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjIudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dpdCB2Mi4wLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAqIERvY3VtZW50YXRpb24gZm9yICJnaXQgc3VibW9kdWxlIHN5bmMiIGZvcmdvdCB0byBzYXkgdGhhdCB0aGUgc3ViY29tbWFuZAorICAgY2FuIHRha2UgdGhlICItLXJlY3Vyc2l2ZSIgb3B0aW9uLgorCisgKiBNaXNoYW5kbGluZyBvZiBwYXR0ZXJucyBpbiAuZ2l0aWdub3JlIHRoYXQgaGFzIHRyYWlsaW5nIFNQcyBxdW90ZWQKKyAgIHdpdGggYmFja3NsYXNoZXMgKGUuZy4gb25lcyB0aGF0IGVuZCB3aXRoICJcICIpIGhhdmUgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBSZWNlbnQgdXBkYXRlcyB0byAiZ2l0IHJlcGFjayIgc3RhcnRlZCB0byBkdXBsaWNhdGUgb2JqZWN0cyB0aGF0CisgICBhcmUgaW4gcGFja2ZpbGVzIG1hcmtlZCB3aXRoIC5rZWVwIGZsYWcgaW50byB0aGUgbmV3IHBhY2tmaWxlIGJ5CisgICBtaXN0YWtlLgorCisgKiAiZ2l0IGNsb25lIC1iIGJyZWZzL3RhZ3MvYmFyIiB3b3VsZCBoYXZlIG1pc3Rha2VubHkgdGhvdWdodCB3ZSB3ZXJlCisgICBmb2xsb3dpbmcgYSBzaW5nbGUgdGFnLCBldmVuIHRob3VnaCBpdCB3YXMgYSBuYW1lIG9mIHRoZSBicmFuY2gsCisgICBiZWNhdXNlIGl0IGluY29ycmVjdGx5IHVzZWQgc3Ryc3RyKCkuCisKKyAqICIlRyIgKG5vdGhpbmcgYWZ0ZXIgRykgaXMgYW4gaW52YWxpZCBwcmV0dHkgZm9ybWF0IHNwZWNpZmllciwgYnV0CisgICB0aGUgcGFyc2VyIGRpZCBub3Qgbm90aWNlIGl0IGFzIGdhcmJhZ2UuCisKKyAqIENvZGUgdG8gYXZvaWQgYWRkaW5nIHRoZSBzYW1lIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUgdHdpY2Ugd2FzCisgICBzdWJ0bHkgYnJva2VuIGZvciBhIGxvbmcgdGltZSwgYnV0IG5vYm9keSBzZWVtcyB0byBoYXZlIG5vdGljZWQuCisKKyAqIEEgaGFuZGZ1bCBvZiBjb2RlIHBhdGhzIGhhZCB0byByZWFkIHRoZSBjb21taXQgb2JqZWN0IG1vcmUgdGhhbgorICAgb25jZSB3aGVuIHNob3dpbmcgaGVhZGVyIGZpZWxkcyB0aGF0IGFyZSB1c3VhbGx5IG5vdCBwYXJzZWQuICBUaGUKKyAgIGludGVybmFsIGRhdGEgc3RydWN0dXJlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21taXQKKyAgIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkIHRvIHJlZHVjZSB0aGUgbmVlZCBmb3IgdGhpcyBkb3VibGUtcmVhZGluZywKKyAgIGFuZCB0byBhbGxvdyB0aGUgY2FsbGVyIGZpbmQgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LgorCisgKiBEdXJpbmcgImdpdCByZWJhc2UgLS1tZXJnZSIsIGEgY29uZmxpY3RlZCBwYXRjaCBjb3VsZCBub3QgYmUKKyAgIHNraXBwZWQgd2l0aCAiLS1za2lwIiBpZiB0aGUgbmV4dCBvbmUgYWxzbyBjb25mbGljdGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDQ3YjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuMy50eHQKQEAgLTAsMCArMSwxNyBAQAorR2l0IHYyLjAuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworICogQW4gYW5jaWVudCByZXdyaXRlIHBhc3NlZCBhIHdyb25nIHBvaW50ZXIgdG8gYSBjdXJsIGxpYnJhcnkKKyAgIGZ1bmN0aW9uIGluIGEgcmFyZWx5IHVzZWQgY29kZSBwYXRoLgorCisgKiAiZmlsdGVyLWJyYW5jaCIgbGVmdCBhbiBlbXB0eSBzaW5nbGUtcGFyZW50IGNvbW1pdCB0aGF0IHJlc3VsdHMgd2hlbgorICAgYWxsIHBhcmVudHMgb2YgYSBtZXJnZSBjb21taXQgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgY29tbWl0LCBldmVuCisgICB1bmRlciAiLS1wcnVuZS1lbXB0eSIuCisKKyAqICJsb2cgLS1zaG93LXNpZ25hdHVyZSIgaW5jb3JyZWN0bHkgZGVjaWRlZCB0aGUgY29sb3IgdG8gcGFpbnQgYQorICAgbWVyZ2V0YWcgdGhhdCB3YXMgYW5kIHdhcyBub3QgY29ycmVjdGx5IHZhbGlkYXRlZC4KKworICogImxvZyAtLXNob3ctc2lnbmF0dXJlIiBkaWQgbm90IHBheSBhdHRlbnRpb24gdG8gIi0tZ3JhcGgiIG9wdGlvbi4KKworQWxzbyBhIGxvdCBvZiBmaXhlcyB0byB0aGUgdGVzdHMgYW5kIHNvbWUgdXBkYXRlcyB0byB0aGUgZG9jcyBhcmUKK2luY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTM0MDkyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuNC50eHQKQEAgLTAsMCArMSw1IEBACitHaXQgdjIuMC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCisgKiBBbiBlYXJsaWVyIHVwZGF0ZSB0byB2Mi4wLjIgYnJva2VuIG91dHB1dCBmcm9tICJnaXQgZGlmZi10cmVlIiwKKyAgIHdoaWNoIGlzIGZpeGVkIGluIHRoaXMgcmVsZWFzZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ExNmY2OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjUudHh0CkBAIC0wLDAgKzEsMzQgQEAKK0dpdCB2Mi4wLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjAuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdlIHVzZWQgdG8gYWxsb3cgY29tbWl0dGluZyBhIHBhdGggIi5HaXQvY29uZmlnIiB3aXRoIEdpdCB0aGF0IGlzCisgICBydW5uaW5nIG9uIGEgY2FzZSBzZW5zaXRpdmUgZmlsZXN5c3RlbSwgYnV0IGFuIGF0dGVtcHQgdG8gY2hlY2sgb3V0CisgICBzdWNoIGEgcGF0aCB3aXRoIEdpdCB0aGF0IHJ1bnMgb24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0KKyAgIHdvdWxkIGhhdmUgY2xvYmJlcmVkICIuZ2l0L2NvbmZpZyIsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IHdoYXQKKyAgIHRoZSB1c2VyIHdvdWxkIGhhdmUgZXhwZWN0ZWQuICBHaXQgbm93IHByZXZlbnRzIHlvdSBmcm9tIHRyYWNraW5nCisgICBhIHBhdGggd2l0aCAiLkdpdCIgKGluIGFueSBjYXNlIGNvbWJpbmF0aW9uKSBhcyBhIHBhdGggY29tcG9uZW50LgorCisgKiBPbiBXaW5kb3dzLCBjZXJ0YWluIHBhdGggY29tcG9uZW50cyB0aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSAiLmdpdCIKKyAgIGFyZSBtYXBwZWQgdG8gIi5naXQiLCBlLmcuICJnaXR+MS9jb25maWciIGlzIHRyZWF0ZWQgYXMgaWYgaXQgd2VyZQorICAgIi5naXQvY29uZmlnIi4gIEhGUysgaGFzIGEgc2ltaWxhciBpc3N1ZSwgd2hlcmUgY2VydGFpbiB1bmljb2RlCisgICBjb2RlcG9pbnRzIGFyZSBpZ25vcmVkLCBlLmcuICIuZ1x1MjAwY2l0L2NvbmZpZyIgaXMgdHJlYXRlZCBhcyBpZgorICAgaXQgd2VyZSAiLmdpdC9jb25maWciLiAgUGF0aG5hbWVzIHdpdGggdGhlc2UgcG90ZW50aWFsIGlzc3VlcyBhcmUKKyAgIHJlamVjdGVkIG9uIHRoZSBhZmZlY3RlZCBzeXN0ZW1zLiAgR2l0IG9uIHN5c3RlbXMgdGhhdCBhcmUgbm90CisgICBhZmZlY3RlZCBieSB0aGlzIGlzc3VlIChlLmcuIExpbnV4KSBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHRvCisgICByZWplY3QgdGhlbSB0byBlbnN1cmUgY3Jvc3MgcGxhdGZvcm0gaW50ZXJvcGVyYWJpbGl0eSBvZiB0aGUgaG9zdGVkCisgICBwcm9qZWN0cy4KKworICogImdpdCBmc2NrIiBub3RpY2VzIGEgdHJlZSBvYmplY3QgdGhhdCByZWNvcmRzIHN1Y2ggYSBwYXRoIHRoYXQgY2FuCisgICBiZSBjb25mdXNlZCB3aXRoICIuZ2l0IiwgYW5kIHdpdGggcmVjZWl2ZS5mc2NrT2JqZWN0cyBjb25maWd1cmF0aW9uCisgICBzZXQgdG8gdHJ1ZSwgYW4gYXR0ZW1wdCB0byAiZ2l0IHB1c2giIHN1Y2ggYSB0cmVlIG9iamVjdCB3aWxsIGJlCisgICByZWplY3RlZC4gIFN1Y2ggYSBwYXRoIG1heSBub3QgYmUgYSBwcm9ibGVtIG9uIGEgd2VsbCBiZWhhdmluZworICAgZmlsZXN5c3RlbSBidXQgaW4gb3JkZXIgdG8gcHJvdGVjdCB0aG9zZSBvbiBIRlMrIGFuZCBvbiBjYXNlCisgICBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcywgdGhpcyBjaGVjayBpcyBlbmFibGVkIG9uIGFsbCBwbGF0Zm9ybXMuCisKK0EgYmlnICJ0aGFua3MhIiBmb3IgYnJpbmdpbmcgdGhpcyBpc3N1ZSB0byB1cyBnb2VzIHRvIG91ciBmcmllbmRzIGluCit0aGUgTWVyY3VyaWFsIGxhbmQsIG5hbWVseSwgTWF0dCBNYWNrYWxsIGFuZCBBdWdpZSBGYWNrbGVyLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTQ3NTM3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMC50eHQKQEAgLTAsMCArMSwzOTEgQEAKK0dpdCB2Mi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZGVmYXVsdCB2YWx1ZSB3ZSBnaXZlIHRvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMRVNTIGhhcyBiZWVuCisgICBjaGFuZ2VkIGZyb20gIkZSU1giIHRvICJGUlgiLCBsb3NpbmcgIlMiIChjaG9wIGxvbmcgbGluZXMgaW5zdGVhZAorICAgb2Ygd3JhcHBpbmcpLiAgRXhpc3RpbmcgdXNlcnMgd2hvIHByZWZlciBub3QgdG8gc2VlIGxpbmUtd3JhcHBlZAorICAgb3V0cHV0IG1heSB3YW50IHRvIHNldAorCisgICAgICQgZ2l0IGNvbmZpZyBjb3JlLnBhZ2VyICJsZXNzIC1TIgorCisgICB0byByZXN0b3JlIHRoZSB0cmFkaXRpb25hbCBiZWhhdmlvdXIuICBJdCBpcyBleHBlY3RlZCB0aGF0IHBlb3BsZQorICAgZmluZCBvdXRwdXQgZnJvbSBtb3N0IHN1YmNvbW1hbmRzIGVhc2llciB0byByZWFkIHdpdGggdGhlIG5ldworICAgZGVmYXVsdCwgZXhjZXB0IGZvciAiYmxhbWUiIHdoaWNoIHRlbmRzIHRvIHByb2R1Y2UgcmVhbGx5IGxvbmcKKyAgIGxpbmVzLiAgVG8gb3ZlcnJpZGUgdGhlIG5ldyBkZWZhdWx0IG9ubHkgZm9yICJnaXQgYmxhbWUiLCB5b3UgY2FuCisgICBkbyB0aGlzOgorCisgICAgICQgZ2l0IGNvbmZpZyBwYWdlci5ibGFtZSAibGVzcyAtUyIKKworICogQSBmZXcgZGlzdXNlZCBkaXJlY3RvcmllcyBpbiBjb250cmliLyBoYXZlIGJlZW4gcmV0aXJlZC4KKworCitVcGRhdGVzIHNpbmNlIHYyLjAKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogU2luY2UgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIEdpdCwgd2UgZ2F2ZSB0aGUgTEVTUyBlbnZpcm9ubWVudCBhCisgICBkZWZhdWx0IHZhbHVlICJGUlNYIiB3aGVuIHdlIHNwYXduICJsZXNzIiBhcyB0aGUgcGFnZXIuICAiUyIgKGNob3AKKyAgIGxvbmcgbGluZXMgaW5zdGVhZCBvZiB3cmFwcGluZykgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoaXMgZGVmYXVsdAorICAgc2V0IG9mIG9wdGlvbnMsIGJlY2F1c2UgaXQgaXMgbW9yZSBvciBsZXNzIGEgcGVyc29uYWwgdGFzdGUgdGhpbmcsCisgICBhcyBvcHBvc2VkIHRvIHRoZSBvdGhlcnMgdGhhdCBoYXZlIGdvb2QganVzdGlmaWNhdGlvbnMgKGkuZS4gIlIiIGlzCisgICB2ZXJ5IG11Y2gganVzdGlmaWVkIGJlY2F1c2UgbWFueSBraW5kcyBvZiBvdXRwdXQgd2UgcHJvZHVjZSBhcmUKKyAgIGNvbG9yZWQgYW5kICJGWCIgaXMganVzdGlmaWVkIGJlY2F1c2Ugb3V0cHV0IHdlIHByb2R1Y2UgaXMgb2Z0ZW4KKyAgIHNob3J0ZXIgdGhhbiBhIHBhZ2UpLgorCisgKiBUaGUgbG9naWMgYW5kIGRhdGEgdXNlZCB0byBjb21wdXRlIHRoZSBkaXNwbGF5IHdpZHRoIG5lZWRlZCBmb3IKKyAgIFVURi04IHN0cmluZ3MgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gbWF0Y2ggVW5pY29kZSA3LjAgYmV0dGVyLgorCisgKiBIVFRQLWJhc2VkIHRyYW5zcG9ydHMgbGVhcm5lZCB0byBiZXR0ZXIgcHJvcGFnYXRlIHRoZSBlcnJvciBtZXNzYWdlcyBmcm9tCisgICB0aGUgd2Vic2VydmVyIHRvIHRoZSBjbGllbnQgY29taW5nIG92ZXIgdGhlIEhUVFAgdHJhbnNwb3J0LgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHQgZm9yIGJhc2ggKGluIGNvbnRyaWIvKSBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBiZXR0ZXIgaGFuZGxlIGFsaWFzZXMgdGhhdCBkZWZpbmUgYSBjb21wbGV4IHNlcXVlbmNlIG9mIGNvbW1hbmRzLgorCisgKiBUaGUgImNvcmUucHJlbG9hZGluZGV4IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwKKyAgIGFsbG93aW5nIG1vZGVybiBwbGF0Zm9ybXMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlaXIKKyAgIG11bHRpcGxlIGNvcmVzLgorCisgKiAiZ2l0IGNsb25lIiBhcHBsaWVzIHRoZSAiaWYgY2xvbmluZyBmcm9tIGEgbG9jYWwgZGlzaywgcGh5c2ljYWxseQorICAgY29weSB0aGUgcmVwb3NpdG9yeSB1c2luZyBoYXJkbGlua3MsIHVubGVzcyBvdGhlcndpc2UgdG9sZCBub3QgdG8gd2l0aAorICAgLS1uby1sb2NhbCIgb3B0aW1pemF0aW9uIHdoZW4gdGhlIHVybC4qLmluc3RlYWRPZiBtZWNoYW5pc20gcmV3cml0ZXMgYQorICAgcmVtb3RlLXJlcG9zaXRvcnkgImdpdCBjbG9uZSAkVVJMIiBpbnRvIGEKKyAgIGNsb25lIGZyb20gYSBsb2NhbCBkaXNrLgorCisgKiAiZ2l0IGNvbW1pdCAtLWRhdGU9PGRhdGU+IiBvcHRpb24gbGVhcm5lZCBtb3JlCisgICB0aW1lc3RhbXAgZm9ybWF0cywgaW5jbHVkaW5nICItLWRhdGU9bm93Ii4KKworICogVGhlIGBjb3JlLmNvbW1lbnRDaGFyYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIHVzZWQgdG8gc3BlY2lmeSBhCisgICBjdXN0b20gY29tbWVudCBjaGFyYWN0ZXIgKG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgIiMiKSBmb3IKKyAgIHRoZSBjb21taXQgbWVzc2FnZSBlZGl0b3IuICBUaGlzIGNhbiBiZSBzZXQgdG8gYGF1dG9gIHRvIGF0dGVtcHQgdG8KKyAgIGNob29zZSBhIGRpZmZlcmVudCBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBjb25mbGljdCB3aXRoIGFueSB0aGF0CisgICBhbHJlYWR5IHN0YXJ0cyBhIGxpbmUgaW4gdGhlIG1lc3NhZ2UgYmVpbmcgZWRpdGVkLCBmb3IgY2FzZXMgbGlrZQorICAgImdpdCBjb21taXQgLS1hbWVuZCIuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIC0tc2lnbmF0dXJlLWZpbGU9PGZpbGU+IHRvIGFkZCB0aGUgY29udGVudHMKKyAgIG9mIGEgZmlsZSBhcyBhIHNpZ25hdHVyZSB0byB0aGUgbWFpbCBtZXNzYWdlIGl0IHByb2R1Y2VzLgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgdGhlIGdyZXAuZnVsbG5hbWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBmb3JjZQorICAgIi0tZnVsbC1uYW1lIiB0byBiZSB0aGUgZGVmYXVsdC4gIFRoaXMgbWF5IGNhdXNlIHJlZ3Jlc3Npb25zIGZvcgorICAgc2NyaXB0ZWQgdXNlcnMgd2hvIGRvIG5vdCBleHBlY3QgdGhpcyBuZXcgYmVoYXZpb3VyLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgbGVhcm5lZCB0byBhc2sgdGhlIGNyZWRlbnRpYWwgaGVscGVyIGZvciBhdXRoCisgICBtYXRlcmlhbC4KKworICogImdpdCBsb2ciIGFuZCBmcmllbmRzIG5vdyB1bmRlcnN0YW5kIHRoZSB2YWx1ZSAiYXV0byIgZm9yIHRoZQorICAgImxvZy5kZWNvcmF0ZSIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBlbmFibGUgdGhlICItLWRlY29yYXRlIgorICAgb3B0aW9uIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgb3V0cHV0IGlzIHNlbnQgdG8gdHR5LgorCisgKiAiZ2l0IG1lcmdlIiB3aXRob3V0IGFuIGFyZ3VtZW50LCBldmVuIHdoZW4gdGhlcmUgaXMgYW4gdXBzdHJlYW0KKyAgIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCwgcmVmdXNlZCB0byBydW4gdW50aWwKKyAgIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIGlzIHNldCB0byB0cnVlLiAgRmxpcCB0aGUgZGVmYXVsdCBvZiB0aGF0CisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIHRydWUuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIHRvIGRyaXZlIHRoZSB2aW1kaWZmMyBiYWNrZW5kLgorCisgKiBtZXJnZXRvb2wucHJvbXB0IHVzZWQgdG8gZGVmYXVsdCB0byAndHJ1ZScsIGFsd2F5cyBhc2tpbmcgImRvIHlvdQorICAgcmVhbGx5IHdhbnQgdG8gcnVuIHRoZSB0b29sIG9uIHRoaXMgcGF0aD8iLiAgVGhlIGRlZmF1bHQgaGFzIGJlZW4KKyAgIGNoYW5nZWQgdG8gJ2ZhbHNlJy4gIEhvd2V2ZXIsIHRoZSBwcm9tcHQgd2lsbCBzdGlsbCBhcHBlYXIgaWYKKyAgIG1lcmdldG9vbCB1c2VkIGl0cyBhdXRvZGV0ZWN0aW9uIHN5c3RlbSB0byBndWVzcyB3aGljaCB0b29sIHRvIHVzZS4KKyAgIFVzZXJzIHdobyBleHBsaWNpdGx5IHNwZWNpZnkgb3IgY29uZmlndXJlIGEgdG9vbCB3aWxsIG5vIGxvbmdlciBzZWUKKyAgIHRoZSBwcm9tcHQgYnkgZGVmYXVsdC4KKworICAgU3RyaWN0bHkgc3BlYWtpbmcsIHRoaXMgaXMgYSBiYWNrd2FyZCBpbmNvbXBhdGlibGUgY2hhbmdlIGFuZAorICAgdXNlcnMgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgdmFyaWFibGUgdG8gJ3RydWUnIGlmIHRoZXkgd2FudAorICAgdG8gYmUgcHJvbXB0ZWQgdG8gY29uZmlybSBydW5uaW5nIHRoZSB0b29sIG9uIGVhY2ggcGF0aC4KKworICogImdpdCByZXBsYWNlIiBsZWFybmVkIHRoZSAiLS1lZGl0IiBzdWJjb21tYW5kIHRvIGNyZWF0ZSBhCisgICByZXBsYWNlbWVudCBieSBlZGl0aW5nIGFuIGV4aXN0aW5nIG9iamVjdC4KKworICogImdpdCByZXBsYWNlIiBsZWFybmVkIGEgIi0tZ3JhZnQiIG9wdGlvbiB0byByZXdyaXRlIHRoZSBwYXJlbnRzIG9mIGEKKyAgIGNvbW1pdC4KKworICogImdpdCBzZW5kLWVtYWlsIiBsZWFybmVkICItLXRvLWNvdmVyIiBhbmQgIi0tY2MtY292ZXIiIG9wdGlvbnMsIHRvCisgICB0ZWxsIGl0IHRvIGNvcHkgVG86IGFuZCBDYzogaGVhZGVycyBmb3VuZCBpbiB0aGUgZmlyc3QgaW5wdXQgZmlsZQorICAgd2hlbiBlbWl0dGluZyBsYXRlciBpbnB1dCBmaWxlcy4KKworICogImdpdCBzdm4iIGxlYXJuZWQgdG8gY29wZSB3aXRoIG1hbGZvcm1lZCB0aW1lc3RhbXBzIHdpdGggb25seSBvbmUKKyAgIGRpZ2l0IGluIHRoZSBob3VyIHBhcnQsIGUuZy4gMjAxNC0wMS0wN1Q1OjAxOjAyLjA0ODE3NlosIGVtaXR0ZWQKKyAgIGJ5IHNvbWUgYnJva2VuIHN1YnZlcnNpb24gc2VydmVyIGltcGxlbWVudGF0aW9ucy4KKworICogImdpdCB0YWciIHdoZW4gZWRpdGluZyB0aGUgdGFnIG1lc3NhZ2Ugc2hvd3MgdGhlIG5hbWUgb2YgdGhlIHRhZworICAgYmVpbmcgZWRpdGVkIGFzIGEgY29tbWVudCBpbiB0aGUgZWRpdG9yLgorCisgKiAiZ2l0IHRhZyIgbGVhcm5lZCB0byBwYXkgYXR0ZW50aW9uIHRvICJ0YWcuc29ydCIgY29uZmlndXJhdGlvbiwgdG8KKyAgIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciB3aGVuIG5vIC0tc29ydD08dmFsdWU+IG9wdGlvbgorICAgaXMgZ2l2ZW4uCisKKyAqIEEgbmV3ICJnaXQgdmVyaWZ5LWNvbW1pdCIgY29tbWFuZCwgdG8gY2hlY2sgR1BHIHNpZ25hdHVyZXMgaW4gc2lnbmVkCisgICBjb21taXRzLCBpbiBhIHdheSBzaW1pbGFyIHRvICJnaXQgdmVyaWZ5LXRhZyIgaXMgdXNlZCB0byBjaGVjaworICAgc2lnbmVkIHRhZ3MsIHdhcyBhZGRlZC4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIGV0Yy4KKworICogQnVpbGQgcHJvY2VkdXJlIGZvciAnc3VidHJlZScgKGluIGNvbnRyaWIvKSBoYXMgYmVlbiBjbGVhbmVkIHVwLgorCisgKiBTdXBwb3J0IGZvciB0aGUgcHJvZmlsZS1mZWVkYmFjayBidWlsZCwgd2hpY2ggaGFzCisgICBiaXQtcm90dGVkIGZvciBxdWl0ZSBhIHdoaWxlLCBoYXMgYmVlbiB1cGRhdGVkLgorCisgKiBBbiBleHBlcmltZW50YWwgZm9ybWF0IHRvIHVzZSB0d28gZmlsZXMgKHRoZSBiYXNlIGZpbGUgYW5kCisgICBpbmNyZW1lbnRhbCBjaGFuZ2VzIHJlbGF0aXZlIHRvIGl0KSB0byByZXByZXNlbnQgdGhlIGluZGV4IGhhcyBiZWVuCisgICBpbnRyb2R1Y2VkOyB0aGlzIG1heSByZWR1Y2UgSS9PIGNvc3Qgb2YgcmV3cml0aW5nIGEgbGFyZ2UgaW5kZXgKKyAgIHdoZW4gb25seSBzbWFsbCBwYXJ0IG9mIHRoZSB3b3JraW5nIHRyZWUgY2hhbmdlcy4KKworICogRWZmb3J0IHRvIHNocmluayB0aGUgc2l6ZSBvZiBwYXRjaGVzIFdpbmRvd3MgZm9sa3MgbWFpbnRhaW4gb24gdG9wCisgICBieSB1cHN0cmVhbWluZyB0aGVtIGNvbnRpbnVlcy4gIE1vcmUgdGVzdHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUKKyAgIHRvIHRoZSBXaW5kb3dzIGVudmlyb25tZW50IGFyZSBpZGVudGlmaWVkIGFuZCBlaXRoZXIgc2tpcHBlZCBvcgorICAgbWFkZSBtb3JlIHBvcnRhYmxlLgorCisgKiBFcmFkaWNhdGlvbiBvZiAidGVzdCAkY29uZGl0aW9uIC1hICRjb25kaXRpb24iIGZyb20gb3VyIHNjcmlwdHMKKyAgIGNvbnRpbnVlcy4KKworICogVGhlIGBjb3JlLmRlbHRhYmFzZWNhY2hlbGltaXRgIHVzZWQgdG8gZGVmYXVsdCB0byAxNiBNaUIgLCBidXQgdGhpcworICAgcHJvdmVkIHRvIGJlIHRvbyBzbWFsbCwgYW5kIGhhcyBiZWVuIGJ1bXBlZCB0byA5NiBNaUIuCisKKyAqICJnaXQgYmxhbWUiIGhhcyBiZWVuIG9wdGltaXplZCBncmVhdGx5IGJ5IHJlb3JnYW5pc2luZyB0aGUgZGF0YQorICAgc3RydWN0dXJlIHRoYXQgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSB3b3JrIHRvIGJlIGRvbmUuCisKKyAqICJnaXQgZGlmZiIgdGhhdCBjb21wYXJlcyAzLW9yLW1vcmUgdHJlZXMgKGUuZy4gcGFyZW50cyBhbmQgdGhlCisgICByZXN1bHQgb2YgYSBtZXJnZSkgaGFzIGJlZW4gb3B0aW1pemVkLgorCisgKiBUaGUgQVBJIHRvIHVwZGF0ZS9kZWxldGUgcmVmZXJlbmNlcyBhcmUgYmVpbmcgY29udmVydGVkIHRvIGhhbmRsZQorICAgdXBkYXRlcyB0byBtdWx0aXBsZSByZWZlcmVuY2VzIGluIGEgdHJhbnNhY3Rpb25hbCB3YXkuICBBcyBhbgorICAgZXhhbXBsZSwgInVwZGF0ZS1yZWYgLS1zdGRpbiBbLXpdIiBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSB0aGlzCisgICBBUEkuCisKKyAqIHNraXBfcHJlZml4KCkgYW5kIHN0cmlwX3N1ZmZpeCgpIEFQSSBmdW5jdGlvbnMgYXJlIHVzZWQgYSBsb3QgbW9yZQorICAgd2lkZWx5IHRocm91Z2hvdXQgdGhlIGNvZGViYXNlIG5vdy4KKworICogUGFydHMgb2YgdGhlIHRlc3Qgc2NyaXB0cyBjYW4gYmUgc2tpcHBlZCBieSB1c2luZyBhIHJhbmdlIG5vdGF0aW9uLAorICAgZS5nLiAic2ggdDEyMzQtdGVzdC5zaCAtLXJ1bj0nMS00IDYgOC0nIiB0byBvbWl0IHRlc3QgcGllY2UgNSBhbmQgNworICAgYW5kIHJ1biBldmVyeXRoaW5nIGVsc2UuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjIuMAorLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjAgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycKK25vdGVzIGZvciBkZXRhaWxzKS4KKworICogV2UgdXNlZCB0byB1bmNvbmRpdGlvbmFsbHkgZGlzYWJsZSB0aGUgcGFnZXIgaW4gdGhlIHBhZ2VyIHByb2Nlc3MKKyAgIHdlIHNwYXduIHRvIGZlZWQgb3V0IG91dHB1dCwgYnV0IHRoYXQgcHJldmVudGVkIHBlb3BsZSB3aG8gd2FudCB0bworICAgcnVuICJsZXNzIiB3aXRoaW4gImxlc3MiIGZyb20gZG9pbmcgc28uCisgICAobWVyZ2UgYzA0NTljYSBqZS9wYWdlci1kby1ub3QtcmVjdXJzZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRvb2xzIHRoYXQgcmVhZCBkaWFnbm9zdGljIG91dHB1dCBpbiBvdXIgc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGRvCisgICBub3Qgd2FudCB0byBzZWUgdGVybWluYWwgY29udHJvbCBzZXF1ZW5jZSAoZS5nLiBlcmFzZS10by1lb2wpLgorICAgRGV0ZWN0IHRoZW0gYnkgY2hlY2tpbmcgaWYgdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBjb25uZWN0ZWQKKyAgIHRvIGEgdHR5LgorICAgKG1lcmdlIDM4ZGUxNTYgbW4vc2lkZWJhbmQtbm8tYW5zaSBsYXRlciB0byBtYWludCkuCisKKyAqIE1pc2hhbmRsaW5nIG9mIHBhdHRlcm5zIGluIC5naXRpZ25vcmUgdGhhdCBoYXZlIHRyYWlsaW5nIFNQcyBxdW90ZWQKKyAgIHdpdGggYmFja3NsYXNoZXMgKGUuZy4gb25lcyB0aGF0IGVuZCB3aXRoICJcICIpIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgOTdjMTM2NGJlNmIgcGIvdHJpbS10cmFpbGluZy1zcGFjZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZXdvcmRlZCB0aGUgZXJyb3IgbWVzc2FnZSBnaXZlbiB1cG9uIGEgZmFpbHVyZSB0byBvcGVuIGFuIGV4aXN0aW5nCisgICBsb29zZSBvYmplY3QgZmlsZSBkdWUgdG8gZS5nLiBwZXJtaXNzaW9uIGlzc3VlczsgaXQgd2FzIHJlcG9ydGVkIGFzCisgICB0aGUgb2JqZWN0IGJlaW5nIGNvcnJ1cHQsIGJ1dCB0aGF0IGlzIG5vdCBxdWl0ZSB0cnVlLgorICAgKG1lcmdlIGQ2YzhhMDUgamsvcmVwb3J0LWZhaWwtdG8tcmVhZC1vYmplY3RzLWJldHRlciBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbG9nIC0ybWFzdGVyIiBpcyBhIGNvbW1vbiB0eXBvIHRoYXQgc2hvd3MgdHdvIGNvbW1pdHMgc3RhcnRpbmcKKyAgIGZyb20gd2hpY2hldmVyIHJhbmRvbSBicmFuY2ggdGhhdCBpcyBub3QgJ21hc3RlcicgdGhhdCBoYXBwZW5zIHRvCisgICBiZSBjaGVja2VkIG91dCBjdXJyZW50bHkuCisgICAobWVyZ2UgZTNmYTU2OCBqYy9yZXZpc2lvbi1kYXNoLWNvdW50LXBhcnNpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlIHRvIGF2b2lkIGFkZGluZyB0aGUgc2FtZSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIHR3aWNlIHdhcworICAgc3VidGx5IGJyb2tlbiBmb3IgYSBsb25nIHRpbWUsIGJ1dCBub2JvZHkgc2VlbXMgdG8gaGF2ZSBub3RpY2VkLgorICAgKG1lcmdlIDgwYjQ3ODUgcnMvZml4LWFsdC1vZGItcGF0aC1jb21wYXJpc29uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1MzllNzUwIGVrL2FsdC1vZGItZW50cnktZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICIlPCgxMCx0cnVuYyklcyIgcHJldHR5IGZvcm1hdCBzcGVjaWZpZXIgaW4gdGhlIGxvZyBmYW1pbHkgb2YKKyAgIGNvbW1hbmRzIGlzIHVzZWQgdG8gdHJ1bmNhdGUgdGhlIHN0cmluZyB0byBhIGdpdmVuIGxlbmd0aCAoZS5nLiAxMAorICAgaW4gdGhlIGV4YW1wbGUpIHdpdGggcGFkZGluZyB0byBjb2x1bW4tYWxpZ24gdGhlIG91dHB1dCwgYnV0IGRpZAorICAgbm90IHRha2UgaW50byBhY2NvdW50IHRoYXQgbnVtYmVyIG9mIGJ5dGVzIGFuZCBudW1iZXIgb2YgZGlzcGxheQorICAgY29sdW1ucyBhcmUgZGlmZmVyZW50LgorICAgKG1lcmdlIDdkNTA5ODcgYXMvcHJldHR5LXRydW5jYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogIiVHIiAobm90aGluZyBhZnRlciBHKSBpcyBhbiBpbnZhbGlkIHByZXR0eSBmb3JtYXQgc3BlY2lmaWVyLCBidXQKKyAgIHRoZSBwYXJzZXIgZGlkIG5vdCBub3RpY2UgaXQgYXMgZ2FyYmFnZS4KKyAgIChtZXJnZSA5NThiMmViIGprL3ByZXR0eS1HLWZvcm1hdC1maXhlcyBsYXRlciB0byBtYWludCkuCisKKyAqIEEgaGFuZGZ1bCBvZiBjb2RlIHBhdGhzIGhhZCB0byByZWFkIHRoZSBjb21taXQgb2JqZWN0IG1vcmUgdGhhbgorICAgb25jZSB3aGVuIHNob3dpbmcgaGVhZGVyIGZpZWxkcyB0aGF0IGFyZSB1c3VhbGx5IG5vdCBwYXJzZWQuICBUaGUKKyAgIGludGVybmFsIGRhdGEgc3RydWN0dXJlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21taXQKKyAgIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkIHRvIHJlZHVjZSB0aGUgbmVlZCBmb3IgdGhpcyBkb3VibGUtcmVhZGluZywKKyAgIGFuZCB0byBhbGxvdyB0aGUgY2FsbGVyIGZpbmQgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LgorICAgKG1lcmdlIDIxOGFhM2EgamsvY29tbWl0LWJ1ZmZlci1sZW5ndGggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgIm1haWxtYXAuZmlsZSIgY29uZmlndXJhdGlvbiBvcHRpb24gZGlkIG5vdCBzdXBwb3J0IHRpbGRlCisgICBleHBhbnNpb24gKGkuZS4gfnVzZXIvcGF0aCBhbmQgfi9wYXRoKS4KKyAgIChtZXJnZSA5MzUyZmQ1IG93L2NvbmZpZy1tYWlsbWFwLXBhdGhuYW1lIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvbXBsZXRpb24gc2NyaXB0cyAoaW4gY29udHJpYi8pIGRpZCBub3Qga25vdyBhYm91dCBxdWl0ZSBhIGZldworICAgb3B0aW9ucyB0aGF0IGFyZSBjb21tb24gYmV0d2VlbiAiZ2l0IG1lcmdlIiBhbmQgImdpdCBwdWxsIiwgYW5kIGEKKyAgIGNvdXBsZSBvZiBvcHRpb25zIHVuaXF1ZSB0byAiZ2l0IG1lcmdlIi4KKyAgIChtZXJnZSA4ZmVlODcyIGprL2NvbXBsZXRlLW1lcmdlLXB1bGwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdW5peC1kb21haW4gc29ja2V0IHVzZWQgYnkgdGhlIHNhbXBsZSBjcmVkZW50aWFsIGNhY2hlIGRhZW1vbgorICAgdHJpZWQgdG8gdW5saW5rIGFuIGV4aXN0aW5nIHN0YWxlIG9uZSBhdCBhIHdyb25nIHBhdGgsIGlmIHRoZSBwYXRoCisgICB0byB0aGUgc29ja2V0IHdhcyBnaXZlbiBhcyBhbiBvdmVybG9uZyBwYXRoIHRoYXQgZG9lcyBub3QgZml0IGluCisgICB0aGUgc3VuX3BhdGggbWVtYmVyIG9mIHRoZSBzb2NrYWRkcl91biBzdHJ1Y3R1cmUuCisgICAobWVyZ2UgMjg2OWIzZSBycy9maXgtdW5saW5rLXVuaXgtc29ja2V0IGxhdGVyIHRvIG1haW50KS4KKworICogQW4gYW5jaWVudCByZXdyaXRlIHBhc3NlZCBhIHdyb25nIHBvaW50ZXIgdG8gYSBjdXJsIGxpYnJhcnkKKyAgIGZ1bmN0aW9uIGluIGEgcmFyZWx5IHVzZWQgY29kZSBwYXRoLgorICAgKG1lcmdlIDQ3OWVhYTggYWgvZml4LWh0dHAtcHVzaCBsYXRlciB0byBtYWludCkuCisKKyAqICItLWlnbm9yZS1zcGFjZS1jaGFuZ2UiIG9wdGlvbiBvZiAiZ2l0IGFwcGx5IiBpZ25vcmVkIHRoZSBzcGFjZXMKKyAgIGF0IHRoZSBiZWdpbm5pbmcgb2YgbGluZXMgdG9vIGFnZ3Jlc3NpdmVseSwgd2hpY2ggaXMgaW5jb25zaXN0ZW50CisgICB3aXRoIHRoZSBvcHRpb24gb2YgdGhlIHNhbWUgbmFtZSB0aGF0ICJkaWZmIiBhbmQgImdpdCBkaWZmIiBoYXZlLgorICAgKG1lcmdlIDE0ZDNiYjQgamMvYXBwbHktaWdub3JlLXdoaXRlc3BhY2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGJsYW1lIiBtaXNjb3VudGVkIHRoZSBudW1iZXIgb2YgY29sdW1ucyBuZWVkZWQgdG8gc2hvdyBsb2NhbGl6ZWQKKyAgIHRpbWVzdGFtcHMsIHJlc3VsdGluZyBpbiBhIGphZ2d5IGxlZnQtc2lkZS1lZGdlIGZvciB0aGUgc291cmNlIGNvZGUKKyAgIGxpbmVzIGluIGl0cyBvdXRwdXQuCisgICAobWVyZ2UgZGQ3NTU1MyBqeC9ibGFtZS1hbGlnbi1yZWxhdGl2ZS10aW1lIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBibGFtZSIgYXNzaWduZWQgdGhlIGJsYW1lIHRvIHRoZSBjb3B5IGluIHRoZSB3b3JraW5nLXRyZWUgaWYKKyAgIHRoZSByZXBvc2l0b3J5IGlzIHNldCB0byBjb3JlLmF1dG9jcmxmPWlucHV0IGFuZCB0aGUgZmlsZSB1c2VkIENSTEYKKyAgIGxpbmUgZW5kaW5ncy4KKyAgIChtZXJnZSA0ZDQ4MTNhIGJjL2JsYW1lLWNybGYtdGVzdCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2xvbmUgLWIgYnJlZnMvdGFncy9iYXIiIHdvdWxkIGhhdmUgbWlzdGFrZW5seSB0aG91Z2h0IHdlIHdlcmUKKyAgIGZvbGxvd2luZyBhIHNpbmdsZSB0YWcsIGV2ZW4gdGhvdWdoIGl0IHdhcyBhIG5hbWUgb2YgdGhlIGJyYW5jaCwKKyAgIGJlY2F1c2UgaXQgaW5jb3JyZWN0bHkgdXNlZCBzdHJzdHIoKS4KKyAgIChtZXJnZSA2MGE1ZjVmIGpjL2ZpeC1jbG9uZS1zaW5nbGUtc3RhcnRpbmctYXQtYS10YWcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLUMgJGNvbW1pdCIgZGlkIG5vdCB3b3JrIHdoZW4gdGhlCisgICBjb21taXQgZGlkIG5vdCBoYXZlIGFueSBsb2cgbWVzc2FnZS4KKyAgIChtZXJnZSAwNzZjYmQ2IGprL2NvbW1pdC1DLXBpY2stZW1wdHkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYgLS1maW5kLWNvcGllcy1oYXJkZXIiIHNvbWV0aW1lcyBwcmV0ZW5kZWQgYXMgaWYgdGhlIG1vZGUKKyAgIGJpdHMgaGF2ZSBjaGFuZ2VkIGZvciBwYXRocyB0aGF0IGFyZSBtYXJrZWQgd2l0aCB0aGUgYXNzdW1lLXVuY2hhbmdlZAorICAgYml0LgorICAgKG1lcmdlIDUzMDQ4MTAgamsvZGlmZi1maWxlcy1hc3N1bWUtdW5jaGFuZ2VkIGxhdGVyIHRvIG1haW50KS4KKworICogImZpbHRlci1icmFuY2giIGxlZnQgYW4gZW1wdHkgc2luZ2xlLXBhcmVudCBjb21taXQgdGhhdCByZXN1bHRzIHdoZW4KKyAgIGFsbCBwYXJlbnRzIG9mIGEgbWVyZ2UgY29tbWl0IGdldCBtYXBwZWQgdG8gdGhlIHNhbWUgY29tbWl0LCBldmVuCisgICB1bmRlciAiLS1wcnVuZS1lbXB0eSIuCisgICAobWVyZ2UgNzliYzRlZiBjYi9maWx0ZXItYnJhbmNoLXBydW5lLWVtcHR5LWRlZ2VuZXJhdGUtbWVyZ2VzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGRpZCBub3QgZW5mb3JjZSB0aGUgcnVsZSB0aGF0IHRoZSAiLS1mb2xsb3ciCisgICBvcHRpb24gZnJvbSB0aGUgbG9nL2RpZmYgZmFtaWx5IG9mIGNvbW1hbmRzIG11c3QgYmUgdXNlZCB3aXRoCisgICBleGFjdGx5IG9uZSBwYXRoc3BlYy4KKyAgIChtZXJnZSBkZDYzZjE2IGprL2RpZmYtZm9sbG93LW11c3QtdGFrZS1vbmUtcGF0aHNwZWMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGdjIC0tYXV0byIgd2FzIHJlY2VudGx5IGNoYW5nZWQgdG8gcnVuIGluIHRoZSBiYWNrZ3JvdW5kIHRvCisgICBnaXZlIGNvbnRyb2wgYmFjayBlYXJseSB0byB0aGUgZW5kLXVzZXIgc2l0dGluZyBpbiBmcm9udCBvZiB0aGUKKyAgIHRlcm1pbmFsLCBidXQgaXQgZm9yZ290IHRoYXQgaG91c2VrZWVwaW5nIGludm9sdmluZyByZWZsb2dzIHNob3VsZAorICAgYmUgZG9uZSB3aXRob3V0IG90aGVyIHByb2Nlc3NlcyBjb21wZXRpbmcgZm9yIGFjY2Vzc2VzIHRvIHRoZSByZWZzLgorICAgKG1lcmdlIDYyYWFkMTggbmQvZGFlbW9uaXplLWdjIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBncmVwIC1PIiB0byBzaG93IHRoZSBsaW5lcyB0aGF0IGhpdCBpbiB0aGUgcGFnZXIgZGlkIG5vdCB3b3JrCisgICB3ZWxsIHdpdGggY2FzZSBpbnNlbnNpdGl2ZSBzZWFyY2guICBXZSBub3cgc3Bhd24gImxlc3MiIHdpdGggaXRzCisgICAiLUkiIG9wdGlvbiB3aGVuIGl0IGlzIHVzZWQgYXMgdGhlIHBhZ2VyICh3aGljaCBpcyB0aGUgZGVmYXVsdCkuCisgICAobWVyZ2UgZjdmZWJiZSBzay9zcGF3bi1sZXNzLWNhc2UtaW5zZW5zaXRpdmVseS1mcm9tLWdyZXAtTy1pIGxhdGVyIHRvIG1haW50KS4KKworICogV2UgdXNlZCB0byBkaXNhYmxlIHRocmVhZGVkICJnaXQgaW5kZXgtcGFjayIgb24gcGxhdGZvcm1zIHdpdGhvdXQKKyAgIHRocmVhZC1zYWZlIHByZWFkKCk7IHVzZSBhIGRpZmZlcmVudCB3b3JrYXJvdW5kIGZvciBzdWNoCisgICBwbGF0Zm9ybXMgdG8gYWxsb3cgdGhyZWFkZWQgImdpdCBpbmRleC1wYWNrIi4KKyAgIChtZXJnZSAzOTUzOTQ5IG5kL2luZGV4LXBhY2stb25lLWZkLXBlci10aHJlYWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgZXJyb3IgcmVwb3J0aW5nIGZyb20gImdpdCBpbmRleC1wYWNrIiBoYXMgYmVlbiBpbXByb3ZlZCB0bworICAgZGlzdGluZ3Vpc2ggbWlzc2luZyBvYmplY3RzIGZyb20gdHlwZSBlcnJvcnMuCisgICAobWVyZ2UgNzc1ODNlNyBqay9pbmRleC1wYWNrLXJlcG9ydC1taXNzaW5nIGxhdGVyIHRvIG1haW50KS4KKworICogImxvZyAtLXNob3ctc2lnbmF0dXJlIiBpbmNvcnJlY3RseSBkZWNpZGVkIHRoZSBjb2xvciB0byBwYWludCBhCisgICBtZXJnZXRhZyB0aGF0IHdhcyBhbmQgd2FzIG5vdCBjb3JyZWN0bHkgdmFsaWRhdGVkLgorICAgKG1lcmdlIDQyYzU1Y2UgbWcvZml4LWxvZy1tZXJnZXRhZy1jb2xvciBsYXRlciB0byBtYWludCkuCisKKyAqICJsb2cgLS1zaG93LXNpZ25hdHVyZSIgZGlkIG5vdCBwYXkgYXR0ZW50aW9uIHRvIHRoZSAiLS1ncmFwaCIgb3B0aW9uLgorICAgKG1lcmdlIGNmMzk4M2QgemsvbG9nLWdyYXBoLXNob3dzaWcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IG1haWxpbmZvIiB1c2VkIHRvIHJlYWQgYmV5b25kIHRoZSBlbmRzIG9mIGhlYWRlciBzdHJpbmdzIHdoaWxlCisgICBwYXJzaW5nIGFuIGluY29taW5nIGUtbWFpbCBtZXNzYWdlIHRvIGV4dHJhY3QgdGhlIHBhdGNoLgorICAgKG1lcmdlIGIxYTAxM2QgcnMvbWFpbGluZm8taGVhZGVyLWNtcCBsYXRlciB0byBtYWludCkuCisKKyAqIE9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtLCBtZXJnZS1yZWN1cnNpdmUgaW5jb3JyZWN0bHkKKyAgIGRlbGV0ZWQgdGhlIGZpbGUgdGhhdCBpcyB0byBiZSByZW5hbWVkIHRvIGEgbmFtZSB0aGF0IGlzIHRoZSBzYW1lCisgICBleGNlcHQgZm9yIGNhc2UgZGlmZmVyZW5jZXMuCisgICAobWVyZ2UgYmFhMzdiZiBkdC9tZXJnZS1yZWN1cnNpdmUtY2FzZS1pbnNlbnNpdGl2ZSBsYXRlciB0byBtYWludCkuCisKKyAqIE1lcmdpbmcgY2hhbmdlcyBpbnRvIGEgZmlsZSB0aGF0IGVuZHMgaW4gYW4gaW5jb21wbGV0ZSBsaW5lIG1hZGUgdGhlCisgICBsYXN0IGxpbmUgaW50byBhIGNvbXBsZXRlIG9uZSwgZXZlbiB3aGVuIHRoZSBvdGhlciBicmFuY2ggZGlkIG5vdAorICAgY2hhbmdlIGFueXRoaW5nIGFyb3VuZCB0aGUgZW5kIG9mIGZpbGUuCisgICAobWVyZ2UgYmEzMTE4MCBtay9tZXJnZS1pbmNvbXBsZXRlLWZpbGVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwYWNrLW9iamVjdHMiIHVubmVjZXNzYXJpbHkgY29waWVkIHRoZSBwcmV2aW91cyBjb250ZW50cyB3aGVuCisgICBleHRlbmRpbmcgdGhlIGhhc2h0YWJsZSwgZXZlbiB0aG91Z2ggaXQgd2lsbCBwb3B1bGF0ZSB0aGUgdGFibGUKKyAgIGZyb20gc2NyYXRjaCBhbnl3YXkuCisgICAobWVyZ2UgZmI3OTk0NyBycy9wYWNrLW9iamVjdHMtbm8tdW5uZWNlc3NhcnktcmVhbGxvYyBsYXRlciB0byBtYWludCkuCisKKyAqIFJlY2VudCB1cGRhdGVzIHRvICJnaXQgcmVwYWNrIiBzdGFydGVkIHRvIGR1cGxpY2F0ZSBvYmplY3RzIHRoYXQKKyAgIGFyZSBpbiBwYWNrZmlsZXMgbWFya2VkIHdpdGggdGhlIC5rZWVwIGZsYWcgaW50byB0aGUgbmV3IHBhY2tmaWxlIGJ5CisgICBtaXN0YWtlLgorICAgKG1lcmdlIGQwNzhkODUgamsvcmVwYWNrLXBhY2sta2VlcC1vYmplY3RzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXJlcmUgZm9yZ2V0IiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIG1lcmdlLmNvbmZsaWN0c3R5bGUKKyAgIHdhcyBzZXQgdG8gYSBub24tZGVmYXVsdCB2YWx1ZS4KKyAgIChtZXJnZSBkZTNkOGJiIGZjL3JlcmVyZS1jb25mbGljdC1zdHlsZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmVtb3RlIHJtIiBhbmQgImdpdCByZW1vdGUgcHJ1bmUiIGNhbiBpbnZvbHZlIHJlbW92aW5nIG1hbnkKKyAgIHJlZnMgYXQgb25jZSwgd2hpY2ggaXMgbm90IGEgdmVyeSBlZmZpY2llbnQgdGhpbmcgdG8gZG8gd2hlbiB2ZXJ5CisgICBtYW55IHJlZnMgZXhpc3QgaW4gdGhlIHBhY2tlZC1yZWZzIGZpbGUuCisgICAobWVyZ2UgZTZiZWE2NiBqbC9yZW1vdGUtcm0tcHJ1bmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGxvZyAtLWV4Y2x1ZGU9PGdsb2I+IC0tYWxsIHwgZ2l0IHNob3J0bG9nIiB3b3JrZWQgYXMgZXhwZWN0ZWQsCisgICBidXQgImdpdCBzaG9ydGxvZyAtLWV4Y2x1ZGU9PGdsb2I+IC0tYWxsIiwgd2hpY2ggaXMgc3VwcG9zZWQgdG8gYmUKKyAgIGlkZW50aWNhbCB0byB0aGUgYWJvdmUgcGlwZWxpbmUsIHdhcyBub3QgYWNjZXB0ZWQgYXQgdGhlIGNvbW1hbmQKKyAgIGxpbmUgYXJndW1lbnQgcGFyc2VyIGxldmVsLgorICAgKG1lcmdlIGViMDc3NzQgamMvc2hvcnRsb2ctcmVmLWV4Y2x1ZGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgYXV0b3N0YXNoIG1vZGUgb2YgImdpdCByZWJhc2UgLWkiIGRpZCBub3QgcmVzdG9yZSB0aGUgZGlydHkKKyAgIHdvcmtpbmcgdHJlZSBzdGF0ZSBpZiB0aGUgdXNlciBhYm9ydGVkIHRoZSBpbnRlcmFjdGl2ZSByZWJhc2UgYnkKKyAgIGVtcHR5aW5nIHRoZSBpbnNuIHNoZWV0LgorICAgKG1lcmdlIGRkYjU0MzIgcnIvcmViYXNlLWF1dG9zdGFzaC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtLWZvcmstcG9pbnQiIGRpZCBub3QgZmlsdGVyIG91dCBwYXRjaC1pZGVudGljYWwKKyAgIGNvbW1pdHMgY29ycmVjdGx5LgorCisgKiBEdXJpbmcgImdpdCByZWJhc2UgLS1tZXJnZSIsIGEgY29uZmxpY3RlZCBwYXRjaCBjb3VsZCBub3QgYmUKKyAgIHNraXBwZWQgd2l0aCAiLS1za2lwIiBpZiB0aGUgbmV4dCBvbmUgYWxzbyBjb25mbGljdGVkLgorICAgKG1lcmdlIDk1MTA0YzcgYmMvZml4LXJlYmFzZS1tZXJnZS1za2lwIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzaG93IC1zIiAoaS5lLiBzaG93IGxvZyBtZXNzYWdlIG9ubHkpIHVzZWQgdG8gaW5jb3JyZWN0bHkgZW1pdAorICAgYW4gZXh0cmEgYmxhbmsgbGluZSBhZnRlciBhIG1lcmdlIGNvbW1pdC4KKyAgIChtZXJnZSBhZDJmNzI1IG1rL3Nob3ctcy1uby1leHRyYS1ibGFuay1saW5lLWZvci1tZXJnZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN0YXR1cyIsIGV2ZW4gdGhvdWdoIGl0IGlzIGEgcmVhZC1vbmx5IG9wZXJhdGlvbiwgdHJpZXMgdG8KKyAgIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZWZyZXNoZWQgbHN0YXQoMikgaW5mbyB0byBvcHRpbWl6ZSBmdXR1cmUKKyAgIGFjY2Vzc2VzIHRvIHRoZSB3b3JraW5nIHRyZWUgb3Bwb3J0dW5pc3RpY2FsbHksIGJ1dCB0aGlzIGNvdWxkCisgICByYWNlIHdpdGggYSAicmVhZC13cml0ZSIgb3BlcmF0aW9uIHRoYXQgbW9kaWZpZXMgdGhlIGluZGV4IHdoaWxlIGl0CisgICBpcyBydW5uaW5nLiAgRGV0ZWN0IHN1Y2ggYSByYWNlIGFuZCBhdm9pZCBvdmVyd3JpdGluZyB0aGUgaW5kZXguCisgICAobWVyZ2UgNDI2ZGRlZSB5bS9maXgtb3Bwb3J0dW5pc3RpYy1pbmRleC11cGRhdGUtcmFjZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3RhdHVzIiAoYW5kICJnaXQgY29tbWl0IikgYmVoYXZlZCBhcyBpZiBjaGFuZ2VzIGluIGEgbW9kaWZpZWQKKyAgIHN1Ym1vZHVsZSBhcmUgbm90IHRoZXJlIGlmIHN1Ym1vZHVsZS4qLmlnbm9yZSBjb25maWd1cmF0aW9uIGlzIHNldCwKKyAgIHdoaWNoIHdhcyBtaXNsZWFkaW5nLiAgVGhlIGNvbmZpZ3VyYXRpb24gaXMgb25seSB0byB1bmNsdXR0ZXIgZGlmZgorICAgb3V0cHV0IGR1cmluZyB0aGUgY291cnNlIG9mIGRldmVsb3BtZW50LCBhbmQgbm90IHRvIGhpZGUKKyAgIGNoYW5nZXMgaW4gdGhlICJzdGF0dXMiIG91dHB1dCB0byBjYXVzZSB0aGUgdXNlcnMgZm9yZ2V0IHRvIGNvbW1pdAorICAgdGhlbS4KKyAgIChtZXJnZSBjMjE1ZDNkIGpsL3N0YXR1cy1hZGRlZC1zdWJtb2R1bGUtaXMtbmV2ZXItaWdub3JlZCBsYXRlciB0byBtYWludCkuCisKKyAqIERvY3VtZW50YXRpb24gZm9yICJnaXQgc3VibW9kdWxlIHN5bmMiIGZvcmdvdCB0byBzYXkgdGhhdCB0aGUgc3ViY29tbWFuZAorICAgY2FuIHRha2UgdGhlICItLXJlY3Vyc2l2ZSIgb3B0aW9uLgorICAgKG1lcmdlIDkzOTNhZTcgbWMvZG9jLXN1Ym1vZHVsZS1zeW5jLXJlY3Vyc2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyIgaW4gMi4wIHJlbGVhc2UgY3Jhc2hlZCBvbiBhCisgICBtYWxmb3JtZWQgY29tbWFuZCBsaW5lLgorICAgKG1lcmdlIGM4ZTFlZTQgamMvcmV2LXBhcnNlLWFyZ2gtZGFzaGVkLW11bHRpLXdvcmRzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIG1vZGUgdG8gcnVuIHRlc3RzIHdpdGggSFRUUCBzZXJ2ZXIgdGVzdHMgZGlzYWJsZWQgd2FzIGJyb2tlbi4KKyAgIChtZXJnZSBhZmE1M2ZlIG5hL25vLWh0dHAtdGVzdC1pbi10aGUtbWlkZGxlIGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwZmMzYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjEudHh0CkBAIC0wLDAgKzEsNDQgQEAKK0dpdCB2Mi4xLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAqIEdpdCAyLjAgaGFkIGEgcmVncmVzc2lvbiB3aGVyZSAiZ2l0IGZldGNoIiBpbnRvIGEgc2hhbGxvd2x5CisgICBjbG9uZWQgcmVwb3NpdG9yeSBmcm9tIGEgcmVwb3NpdG9yeSB3aXRoIGJpdG1hcCBvYmplY3QgaW5kZXgKKyAgIGVuYWJsZWQgZGlkIG5vdCB3b3JrIGNvcnJlY3RseS4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBHaXQgMi4wIGhhZCBhIHJlZ3Jlc3Npb24gd2hpY2ggYnJva2UgKHJhcmVseSB1c2VkKSAiZ2l0IGRpZmYtdHJlZQorICAgLXQiLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgbG9nIC0tcHJldHR5L2Zvcm1hdD0iIHdpdGggYW4gZW1wdHkgZm9ybWF0IHN0cmluZyBkaWQgbm90CisgICBtZWFuIHRoZSBtb3JlIG9idmlvdXMgIk5vIG91dHB1dCB3aGF0c29ldmVyIiBidXQgIlVzZSBkZWZhdWx0CisgICBmb3JtYXQiLCB3aGljaCB3YXMgY291bnRlcmludHVpdGl2ZS4gIE5vdyBpdCBtZWFucyAibm90aGluZyBzaG93bgorICAgZm9yIHRoZSBsb2cgbWVzc2FnZSBwYXJ0Ii4KKworICogImdpdCAtYyBzZWN0aW9uLnZhciBjb21tYW5kIiBhbmQgImdpdCAtYyBzZWN0aW9uLnZhcj0gY29tbWFuZCIKKyAgIHNob3VsZCBwYXNzIHRoZSBjb25maWd1cmF0aW9uIGRpZmZlcmVudGx5ICh0aGUgZm9ybWVyIHNob3VsZCBiZSBhCisgICBib29sZWFuIHRydWUsIHRoZSBsYXR0ZXIgc2hvdWxkIGJlIGFuIGVtcHR5IHN0cmluZyksIGJ1dCB0aGV5CisgICBkaWRuJ3Qgd29yayB0aGF0IHdheS4gIE5vdyBpdCBkb2VzLgorCisgKiBBcHBseWluZyBhIHBhdGNoIG5vdCBnZW5lcmF0ZWQgYnkgR2l0IGluIGEgc3ViZGlyZWN0b3J5IHVzZWQgdG8KKyAgIGNoZWNrIHRoZSB3aGl0ZXNwYWNlIGJyZWFrYWdlIHVzaW5nIHRoZSBhdHRyaWJ1dGVzIGZvciBpbmNvcnJlY3QKKyAgIHBhdGhzLiBBbHNvIHdoaXRlc3BhY2UgY2hlY2tzIHdlcmUgcGVyZm9ybWVkIGV2ZW4gZm9yIHBhdGhzCisgICBleGNsdWRlZCB2aWEgImdpdCBhcHBseSAtLWV4Y2x1ZGU9PHBhdGg+IiBtZWNoYW5pc20uCisKKyAqICJnaXQgYnVuZGxlIGNyZWF0ZSIgd2l0aCBkYXRlLXJhbmdlIHNwZWNpZmljYXRpb24gd2VyZSBtZWFudCB0bworICAgZXhjbHVkZSB0YWdzIG91dHNpZGUgdGhlIHJhbmdlLCBidXQgaXQgZGlkIG5vdCB3b3JrIGNvcnJlY3RseS4KKworICogImdpdCBhZGQgeCIgd2hlcmUgeCB0aGF0IHVzZWQgdG8gYmUgYSBkaXJlY3RvcnkgaGFzIGJlY29tZSBhCisgICBzeW1ib2xpYyBsaW5rIHRvIGEgZGlyZWN0b3J5IG1pc2JlaGF2ZWQuCisKKyAqIFRoZSBwcm9tcHQgc2NyaXB0IGNoZWNrZWQgJEdJVF9ESVIvcmVmL3N0YXNoIGZpbGUgdG8gc2VlIGlmIHRoZXJlCisgICBpcyBhIHN0YXNoLCB3aGljaCB3YXMgYSBuby1uby4KKworICogImdpdCBjaGVja291dCAtbSIgZGlkIG5vdCBzd2l0Y2ggdG8gYW5vdGhlciBicmFuY2ggd2hpbGUgY2FycnlpbmcKKyAgIHRoZSBsb2NhbCBjaGFuZ2VzIGZvcndhcmQgd2hlbiBhIHBhdGggd2FzIGRlbGV0ZWQgZnJvbSB0aGUgaW5kZXguCisKKyAqIFdpdGggc3VmZmljaWVudGx5IGxvbmcgcmVmbmFtZXMsIGZhc3QtaW1wb3J0IGNvdWxkIGhhdmUgb3ZlcmZsb3duCisgICBhbiBvbi1zdGFjayBidWZmZXIuCisKKyAqIEFmdGVyICJwYWNrLXJlZnMgLS1wcnVuZSIgcGFja2VkIHJlZnMgYXQgdGhlIHRvcC1sZXZlbCwgaXQgZmFpbGVkCisgICB0byBwcnVuZSB0aGVtLgorCisgKiAiZ2l0IGdjIC0tYXV0byIgdHJpZ2dlcmVkIGZyb20gImdpdCBmZXRjaCAtLXF1aWV0IiB3YXMgbm90IHF1aWV0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmMzYjg5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMi50eHQKQEAgLTAsMCArMSwyMCBAQAorR2l0IHYyLjEuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworICogImdpdCBwdXNoIiBvdmVyIEhUVFAgdHJhbnNwb3J0IGhhZCBhbiBhcnRpZmljaWFsIGxpbWl0IG9uIG51bWJlciBvZgorICAgcmVmcyB0aGF0IGNhbiBiZSBwdXNoZWQgaW1wb3NlZCBieSB0aGUgY29tbWFuZCBsaW5lIGxlbmd0aC4KKworICogV2hlbiByZWNlaXZpbmcgYW4gaW52YWxpZCBwYWNrIHN0cmVhbSB0aGF0IHJlY29yZHMgdGhlIHNhbWUgb2JqZWN0CisgICB0d2ljZSwgbXVsdGlwbGUgdGhyZWFkcyBnb3QgY29uZnVzZWQgZHVlIHRvIGEgcmFjZS4KKworICogQW4gYXR0ZW1wdCB0byByZW1vdmUgdGhlIGVudGlyZSB0cmVlIGluIHRoZSAiZ2l0IGZhc3QtaW1wb3J0IiBpbnB1dAorICAgc3RyZWFtIGNhdXNlZCBpdCB0byBtaXNiZWhhdmUuCisKKyAqIFJlYWNoYWJpbGl0eSBjaGVjayAodXNlZCBpbiAiZ2l0IHBydW5lIiBhbmQgZnJpZW5kcykgZGlkIG5vdCBhZGQgYQorICAgZGV0YWNoZWQgSEVBRCBhcyBhIHN0YXJ0aW5nIHBvaW50IHRvIHRyYXZlcnNlIG9iamVjdHMgc3RpbGwgaW4gdXNlLgorCisgKiAiZ2l0IGNvbmZpZyAtLWFkZCBzZWN0aW9uLnZhciB2YWwiIHVzZWQgdG8gbG9zZSBleGlzdGluZworICAgc2VjdGlvbi52YXIgd2hvc2UgdmFsdWUgd2FzIGFuIGVtcHR5IHN0cmluZy4KKworICogImdpdCBmc2NrIiBmYWlsZWQgdG8gcmVwb3J0IHRoYXQgaXQgZm91bmQgY29ycnVwdCBvYmplY3RzIHZpYSBpdHMKKyAgIGV4aXQgc3RhdHVzIGluIHNvbWUgY2FzZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZmIxN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4zLnR4dApAQCAtMCwwICsxLDI2IEBACitHaXQgdjIuMS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCisgKiBTb21lIE1VQXMgbWFuZ2xlZCBhIGxpbmUgaW4gYSBtZXNzYWdlIHRoYXQgYmVnaW5zIHdpdGggIkZyb20gIiB0bworICAgIj5Gcm9tICIgd2hlbiB3cml0aW5nIHRvIGEgbWFpbGJveCBmaWxlIGFuZCBmZWVkaW5nIHN1Y2ggYW4gaW5wdXQgdG8KKyAgICJnaXQgYW0iIHVzZWQgdG8gbG9zZSBzdWNoIGEgbGluZS4KKworICogImdpdCBkYWVtb24iICh3aXRoIE5PX0lQVjYgYnVpbGQgY29uZmlndXJhdGlvbikgdXNlZCB0byBpbmNvcnJlY3RseQorICAgdXNlIHRoZSBob3N0bmFtZSBldmVuIHdoZW4gZ2V0aG9zdGJ5bmFtZSgpIHJlcG9ydGVkIHRoYXQgdGhlIGdpdmVuCisgICBob3N0bmFtZSBpcyBub3QgZm91bmQuCisKKyAqIE5ld2VyIHZlcnNpb25zIG9mICdtZWxkJyBicmVha3MgdGhlIGF1dG8tZGV0ZWN0aW9uIHdlIHVzZSB0byBzZWUgaWYKKyAgIHRoZXkgYXJlIG5ldyBlbm91Z2ggdG8gc3VwcG9ydCB0aGUgYC0tb3V0cHV0YCBvcHRpb24uCisKKyAqICJnaXQgcGFjay1vYmplY3RzIiBmb3Jnb3QgdG8gZGlzYWJsZSB0aGUgY29kZXBhdGggdG8gZ2VuZXJhdGUKKyAgIG9iamVjdCByZWFjaGFiaWxpdHkgYml0bWFwIHdoZW4gaXQgbmVlZHMgdG8gc3BsaXQgdGhlIHJlc3VsdGluZworICAgcGFjay4KKworICogImdpdHdlYiIgdXNlZCBkZXByZWNhdGVkIENHSTo6c3RhcnRmcm9tLCB3aGljaCB3YXMgcmVtb3ZlZCBmcm9tCisgICBDR0kucG0gYXMgb2YgNC4wNDsgdXNlIENHSTo6c3RhcnRfZnJvbSBpbnN0ZWFkLgorCisgKiAiZ2l0IGxvZyIgZG9jdW1lbnRhdGlvbiBoYWQgYW4gZXhhbXBsZSBzZWN0aW9uIG1hcmtlZCB1cCBub3QKKyAgIHF1aXRlIGNvcnJlY3RseSwgd2hpY2ggcGFzc2VkIEFzY2lpRG9jIGJ1dCBmYWlsZWQgd2l0aAorICAgQXNjaWlEb2N0b3IuCisKK0Fsc28gY29udGFpbnMgc29tZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNmU1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS40LnR4dApAQCAtMCwwICsxLDM0IEBACitHaXQgdjIuMS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xLjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBXZSB1c2VkIHRvIGFsbG93IGNvbW1pdHRpbmcgYSBwYXRoICIuR2l0L2NvbmZpZyIgd2l0aCBHaXQgdGhhdCBpcworICAgcnVubmluZyBvbiBhIGNhc2Ugc2Vuc2l0aXZlIGZpbGVzeXN0ZW0sIGJ1dCBhbiBhdHRlbXB0IHRvIGNoZWNrIG91dAorICAgc3VjaCBhIHBhdGggd2l0aCBHaXQgdGhhdCBydW5zIG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtCisgICB3b3VsZCBoYXZlIGNsb2JiZXJlZCAiLmdpdC9jb25maWciLCB3aGljaCBpcyBkZWZpbml0ZWx5IG5vdCB3aGF0CisgICB0aGUgdXNlciB3b3VsZCBoYXZlIGV4cGVjdGVkLiAgR2l0IG5vdyBwcmV2ZW50cyB5b3UgZnJvbSB0cmFja2luZworICAgYSBwYXRoIHdpdGggIi5HaXQiIChpbiBhbnkgY2FzZSBjb21iaW5hdGlvbikgYXMgYSBwYXRoIGNvbXBvbmVudC4KKworICogT24gV2luZG93cywgY2VydGFpbiBwYXRoIGNvbXBvbmVudHMgdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gIi5naXQiCisgICBhcmUgbWFwcGVkIHRvICIuZ2l0IiwgZS5nLiAiZ2l0fjEvY29uZmlnIiBpcyB0cmVhdGVkIGFzIGlmIGl0IHdlcmUKKyAgICIuZ2l0L2NvbmZpZyIuICBIRlMrIGhhcyBhIHNpbWlsYXIgaXNzdWUsIHdoZXJlIGNlcnRhaW4gdW5pY29kZQorICAgY29kZXBvaW50cyBhcmUgaWdub3JlZCwgZS5nLiAiLmdcdTIwMGNpdC9jb25maWciIGlzIHRyZWF0ZWQgYXMgaWYKKyAgIGl0IHdlcmUgIi5naXQvY29uZmlnIi4gIFBhdGhuYW1lcyB3aXRoIHRoZXNlIHBvdGVudGlhbCBpc3N1ZXMgYXJlCisgICByZWplY3RlZCBvbiB0aGUgYWZmZWN0ZWQgc3lzdGVtcy4gIEdpdCBvbiBzeXN0ZW1zIHRoYXQgYXJlIG5vdAorICAgYWZmZWN0ZWQgYnkgdGhpcyBpc3N1ZSAoZS5nLiBMaW51eCkgY2FuIGFsc28gYmUgY29uZmlndXJlZCB0bworICAgcmVqZWN0IHRoZW0gdG8gZW5zdXJlIGNyb3NzIHBsYXRmb3JtIGludGVyb3BlcmFiaWxpdHkgb2YgdGhlIGhvc3RlZAorICAgcHJvamVjdHMuCisKKyAqICJnaXQgZnNjayIgbm90aWNlcyBhIHRyZWUgb2JqZWN0IHRoYXQgcmVjb3JkcyBzdWNoIGEgcGF0aCB0aGF0IGNhbgorICAgYmUgY29uZnVzZWQgd2l0aCAiLmdpdCIsIGFuZCB3aXRoIHJlY2VpdmUuZnNja09iamVjdHMgY29uZmlndXJhdGlvbgorICAgc2V0IHRvIHRydWUsIGFuIGF0dGVtcHQgdG8gImdpdCBwdXNoIiBzdWNoIGEgdHJlZSBvYmplY3Qgd2lsbCBiZQorICAgcmVqZWN0ZWQuICBTdWNoIGEgcGF0aCBtYXkgbm90IGJlIGEgcHJvYmxlbSBvbiBhIHdlbGwgYmVoYXZpbmcKKyAgIGZpbGVzeXN0ZW0gYnV0IGluIG9yZGVyIHRvIHByb3RlY3QgdGhvc2Ugb24gSEZTKyBhbmQgb24gY2FzZQorICAgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMsIHRoaXMgY2hlY2sgaXMgZW5hYmxlZCBvbiBhbGwgcGxhdGZvcm1zLgorCitBIGJpZyAidGhhbmtzISIgZm9yIGJyaW5naW5nIHRoaXMgaXNzdWUgdG8gdXMgZ29lcyB0byBvdXIgZnJpZW5kcyBpbgordGhlIE1lcmN1cmlhbCBsYW5kLCBuYW1lbHksIE1hdHQgTWFja2FsbCBhbmQgQXVnaWUgRmFja2xlci4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzkyYjdkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjAudHh0CkBAIC0wLDAgKzEsNjc1IEBACitHaXQgMi4xMCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVXBkYXRlcyBzaW5jZSB2Mi45CistLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSAtLXZlcmlmeS1zaWduYXR1cmUiIGxlYXJuZWQgdG8gd2FybiB0aGUgdXNlcgorICAgdGhhdCAiLS12ZXJpZnktc2lnbmF0dXJlIiBpcyBhIG5vLW9wIHdoZW4gcmViYXNpbmcuCisKKyAqIEFuIHVwc3RyZWFtIHByb2plY3QgY2FuIG1ha2UgYSByZWNvbW1lbmRhdGlvbiB0byBzaGFsbG93bHkgY2xvbmUKKyAgIHNvbWUgc3VibW9kdWxlcyBpbiB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpdCBzaGlwcy4KKworICogImdpdCB3b3JrdHJlZSBhZGQiIGxlYXJuZWQgdGhhdCAnLScgY2FuIGJlIHVzZWQgYXMgYSBzaG9ydC1oYW5kIGZvcgorICAgIkB7LTF9IiwgdGhlIHByZXZpb3VzIGJyYW5jaC4KKworICogVXBkYXRlIHRoZSBmdW5jbmFtZSBkZWZpbml0aW9uIHRvIHN1cHBvcnQgY3NzIGZpbGVzLgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBsZWFybmVkIHRvIGNvbXBsZXRlICJnaXQKKyAgIHN0YXR1cyIgb3B0aW9ucy4KKworICogTWVzc2FnZXMgdGhhdCBhcmUgZ2VuZXJhdGVkIGJ5IGF1dG8gZ2MgZHVyaW5nICJnaXQgcHVzaCIgb24gdGhlCisgICByZWNlaXZpbmcgZW5kIGFyZSBub3cgcGFzc2VkIGJhY2sgdG8gdGhlIHNlbmRpbmcgZW5kIGluIHN1Y2ggYSB3YXkKKyAgIHRoYXQgdGhleSBhcmUgc2hvd24gd2l0aCAicmVtb3RlOiAiIHByZWZpeCB0byBhdm9pZCBjb25mdXNpbmcgdGhlCisgICB1c2Vycy4KKworICogImdpdCBhZGQgLWkvLXAiIGxlYXJuZWQgdG8gaG9ub3IgZGlmZi5jb21wYWN0aW9uSGV1cmlzdGljCisgICBleHBlcmltZW50YWwga25vYiwgc28gdGhhdCB0aGUgdXNlciBjYW4gd29yayBvbiB0aGUgc2FtZSBodW5rIHNwbGl0CisgICBhcyAiZ2l0IGRpZmYiIG91dHB1dC4KKworICogInVwbG9hZC1wYWNrIiBhbGxvd3MgYSBjdXN0b20gImdpdCBwYWNrLW9iamVjdHMiIHJlcGxhY2VtZW50IHdoZW4KKyAgIHJlc3BvbmRpbmcgdG8gImZldGNoL2Nsb25lIiB2aWEgdGhlIHVwbG9hZHBhY2sucGFja09iamVjdHNIb29rLgorICAgKG1lcmdlIGI3MzgzOTYgamsvdXBsb2FkLXBhY2staG9vayBsYXRlciB0byBtYWludCkuCisKKyAqIFRlYWNoIGZvcm1hdC1wYXRjaCBhbmQgbWFpbHNwbGl0IChoZW5jZSAiYW0iKSBob3cgYSBsaW5lIHRoYXQKKyAgIGhhcHBlbnMgdG8gYmVnaW4gd2l0aCAiRnJvbSAiIGluIHRoZSBlLW1haWwgbWVzc2FnZSBpcyBxdW90ZWQgd2l0aAorICAgIj4iLCBzbyB0aGF0IHRoZXNlIGxpbmVzIGNhbiBiZSByZXN0b3JlZCB0byB0aGVpciBvcmlnaW5hbCBzaGFwZS4KKyAgIChtZXJnZSBkOTkyNWQxIGV3L21ib3hyZC1mb3JtYXQtYW0gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlcGFjayIgbGVhcm5lZCB0aGUgIi0ta2VlcC11bnJlYWNoYWJsZSIgb3B0aW9uLCB3aGljaCBzZW5kcworICAgbG9vc2UgdW5yZWFjaGFibGUgb2JqZWN0cyB0byBhIHBhY2sgaW5zdGVhZCBvZiBsZWF2aW5nIHRoZW0gbG9vc2UuCisgICBUaGlzIGhlbHBzIGhldXJpc3RpY3MgYmFzZWQgb24gdGhlIG51bWJlciBvZiBsb29zZSBvYmplY3RzCisgICAoZS5nLiAiZ2MgLS1hdXRvIikuCisgICAobWVyZ2UgZTI2YThjNCBqay9yZXBhY2sta2VlcC11bnJlYWNoYWJsZSBsYXRlciB0byBtYWludCkuCisKKyAqICJsb2cgLS1ncmFwaCAtLWZvcm1hdD0iIGxlYXJuZWQgdGhhdCAiJT58KE4pIiBzcGVjaWZpZXMgdGhlIHdpZHRoCisgICByZWxhdGl2ZSB0byB0aGUgdGVybWluYWwncyBsZWZ0IGVkZ2UsIG5vdCByZWxhdGl2ZSB0byB0aGUgYXJlYSB0bworICAgZHJhdyB0ZXh0IHRoYXQgaXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBhbmNlc3RyeS1ncmFwaCBzZWN0aW9uLiAgSXQKKyAgIGFsc28gbm93IGFjY2VwdHMgbmVnYXRpdmUgTiB0aGF0IG1lYW5zIHRoZSBjb2x1bW4gbGltaXQgaXMgcmVsYXRpdmUKKyAgIHRvIHRoZSByaWdodCBib3JkZXIuCisKKyAqIEEgY2FyZWxlc3MgaW52b2NhdGlvbiBvZiAiZ2l0IHNlbmQtZW1haWwgZGlyZWN0b3J5LyIgYWZ0ZXIgZWRpdGluZworICAgMDAwMS1jaGFuZ2UucGF0Y2ggd2l0aCBhbiBlZGl0b3Igb2Z0ZW4gZW5kcyB1cCBzZW5kaW5nIGJvdGgKKyAgIDAwMDEtY2hhbmdlLnBhdGNoIGFuZCBpdHMgYmFja3VwIGZpbGUsIDAwMDEtY2hhbmdlLnBhdGNofiwgY2F1c2luZworICAgZW1iYXJyYXNzbWVudCBhbmQgYSBtaW5vciBjb25mdXNpb24uICBEZXRlY3Qgc3VjaCBhbiBpbnB1dCBhbmQKKyAgIG9mZmVyIHRvIHNraXAgdGhlIGJhY2t1cCBmaWxlcyB3aGVuIHNlbmRpbmcgdGhlIHBhdGNoZXMgb3V0LgorICAgKG1lcmdlIDUzMTIyMGIgamMvc2VuZC1lbWFpbC1za2lwLWJhY2t1cCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgdGhhdCBkcml2ZXMgbWFueSAiZ2l0IGNsb25lIiBjb3VsZAorICAgZXZlbnR1YWxseSBoaXQgZmxha3kgc2VydmVycy9uZXR3b3JrIGNvbmRpdGlvbnMgb24gb25lIG9mIHRoZQorICAgc3VibW9kdWxlczsgdGhlIGNvbW1hbmQgbGVhcm5lZCB0byByZXRyeSB0aGUgYXR0ZW1wdC4KKworICogVGhlIG91dHB1dCBjb2xvcmluZyBzY2hlbWUgbGVhcm5lZCB0d28gbmV3IGF0dHJpYnV0ZXMsIGl0YWxpYyBhbmQKKyAgIHN0cmlrZSwgaW4gYWRkaXRpb24gdG8gZXhpc3RpbmcgYm9sZCwgcmV2ZXJzZSwgZXRjLgorCisgKiAiZ2l0IGxvZyIgbGVhcm5zIGxvZy5zaG93U2lnbmF0dXJlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGFuZCBhCisgICBjb21tYW5kIGxpbmUgb3B0aW9uICItLW5vLXNob3ctc2lnbmF0dXJlIiB0byBjb3VudGVybWFuZCBpdC4KKyAgIChtZXJnZSBmY2UwNGMzIG1qL2xvZy1zaG93LXNpZ25hdHVyZS1jb25mIGxhdGVyIHRvIG1haW50KS4KKworICogTW9yZSBtYXJraW5ncyBvZiBtZXNzYWdlcyBmb3IgaTE4biwgd2l0aCB1cGRhdGVzIHRvIHZhcmlvdXMgdGVzdHMKKyAgIHRvIHBhc3MgR0VUVEVYVF9QT0lTT04gdGVzdHMuCisKKyAqICJnaXQgYXJjaGl2ZSIgbGVhcm5lZCB0byBoYW5kbGUgZmlsZXMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gOEdCIGFuZAorICAgY29tbWl0cyBmYXIgaW4gdGhlIGZ1dHVyZSB0aGFuIGV4cHJlc3NpYmxlIGJ5IHRoZSB0cmFkaXRpb25hbCBVUy1UQVIKKyAgIGZvcm1hdC4KKyAgIChtZXJnZSA1NjBiMGU4IGprL2JpZy1hbmQtZnV0dXJlLWFyY2hpdmUtdGFyIGxhdGVyIHRvIG1haW50KS4KKworCisgKiBBIG5ldyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNvcmUuc3NoQ29tbWFuZCBoYXMgYmVlbiBhZGRlZCB0bworICAgc3BlY2lmeSB3aGF0IHZhbHVlIGZvciBHSVRfU1NIX0NPTU1BTkQgdG8gdXNlIHBlciByZXBvc2l0b3J5LgorCisgKiAiZ2l0IHdvcmt0cmVlIHBydW5lIiBwcm90ZWN0ZWQgd29ya3RyZWVzIHRoYXQgYXJlIG1hcmtlZCBhcworICAgImxvY2tlZCIgYnkgY3JlYXRpbmcgYSBmaWxlIGluIGEga25vd24gbG9jYXRpb24uICAiZ2l0IHdvcmt0cmVlIgorICAgY29tbWFuZCBsZWFybmVkIGEgZGVkaWNhdGVkIGNvbW1hbmQgcGFpciB0byBjcmVhdGUgYW5kIHJlbW92ZSBzdWNoCisgICBhIGZpbGUsIHNvIHRoYXQgdGhlIHVzZXJzIGRvIG5vdCBoYXZlIHRvIGRvIHRoaXMgd2l0aCBlZGl0b3IuCisKKyAqIEEgaGFuZGZ1bCBvZiAiZ2l0IHN2biIgdXBkYXRlcy4KKworICogImdpdCBwdXNoIiBsZWFybmVkIHRvIGFjY2VwdCBhbmQgcGFzcyBleHRyYSBvcHRpb25zIHRvIHRoZQorICAgcmVjZWl2aW5nIGVuZCBzbyB0aGF0IGhvb2tzIGNhbiByZWFkIGFuZCByZWFjdCB0byB0aGVtLgorCisgKiAiZ2l0IHN0YXR1cyIgbGVhcm5lZCB0byBzdWdnZXN0ICJtZXJnZSAtLWFib3J0IiBkdXJpbmcgYSBjb25mbGljdGVkCisgICBtZXJnZSwganVzdCBsaWtlIGl0IGFscmVhZHkgc3VnZ2VzdHMgInJlYmFzZSAtLWFib3J0IiBkdXJpbmcgYQorICAgY29uZmxpY3RlZCByZWJhc2UuCisKKyAqICJnaXQganVtcCIgc2NyaXB0IChpbiBjb250cmliLykgaGFzIGJlZW4gdXBkYXRlZCBhIGJpdC4KKyAgIChtZXJnZSBhOTFlNjkyIGprL2dpdC1qdW1wIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdXNoIiBhbmQgImdpdCBjbG9uZSIgbGVhcm5lZCB0byBnaXZlIGJldHRlciBwcm9ncmVzcyBtZXRlcnMKKyAgIHRvIHRoZSBlbmQgdXNlciB3aG8gaXMgd2FpdGluZyBvbiB0aGUgdGVybWluYWwuCisKKyAqIEFuIGVudHJ5ICJnaXQgbG9nIC0tZGVjb3JhdGUiIGZvciB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBpcworICAgc2hvd24gYXMgIkhFQUQgLT4gbmFtZSIgKHdoZXJlICJuYW1lIiBpcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoKTsKKyAgIHRoZSBhcnJvdyBpcyBub3cgcGFpbnRlZCBpbiB0aGUgc2FtZSBjb2xvciBhcyAiSEVBRCIsIG5vdCBpbiB0aGUKKyAgIGNvbG9yIGZvciBjb21taXRzLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCBmb3JtYXQuZnJvbSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvCisgICBzcGVjaWZ5IHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciBpdHMgIi0tZnJvbSIgb3B0aW9uLgorCisgKiAiZ2l0IGFtIC0zIiBjYWxscyAiZ2l0IG1lcmdlLXJlY3Vyc2l2ZSIgd2hlbiBpdCBuZWVkcyB0byBmYWxsIGJhY2sKKyAgIHRvIGEgdGhyZWUtd2F5IG1lcmdlOyB0aGlzIGNhbGwgaGFzIGJlZW4gdHVybmVkIGludG8gYW4gaW50ZXJuYWwKKyAgIHN1YnJvdXRpbmUgY2FsbCBpbnN0ZWFkIG9mIHNwYXduaW5nIGEgc2VwYXJhdGUgc3VicHJvY2Vzcy4KKworICogVGhlIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIHNjcmlwdHMgKGluIGNvbnRyaWIvKSBub3cga25vd3MgYWJvdXQKKyAgICJnaXQgYnJhbmNoIC0tZGVsZXRlLy0tbW92ZSBbLS1yZW1vdGVdIi4KKyAgIChtZXJnZSAyNzAzYzIyIHZzL2NvbXBsZXRpb24tYnJhbmNoLWZ1bGx5LXNwZWxsZWQtZC1tLXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIGhvb2tzLzxob29rPiIgbGVhcm5lZCB0byB0YWtlCisgICBjb3JlLmhvb2tzUGF0aCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChpbnRyb2R1Y2VkIGR1cmluZyAyLjkgY3ljbGUpCisgICBpbnRvIGFjY291bnQuCisgICAobWVyZ2UgOTQ0NWI0OSBhYi9ob29rcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbG9nIC0tc2hvdy1zaWduYXR1cmUiIGFuZCBvdGhlciBjb21tYW5kcyB0aGF0IGRpc3BsYXkgdGhlCisgICB2ZXJpZmljYXRpb24gc3RhdHVzIG9mIFBHUCBzaWduYXR1cmUgbm93IHNob3dzIHRoZSBsb25nZXIga2V5LWlkLAorICAgYXMgMzItYml0IGtleS1pZCBpcyBzbyBsYXN0IGNlbnR1cnkuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogImdpdCBmYXN0LWltcG9ydCIgbGVhcm5lZCB0aGUgc2FtZSBwZXJmb3JtYW5jZSB0cmljayB0byBhdm9pZAorICAgY3JlYXRpbmcgdG9vIHNtYWxsIGEgcGFja2ZpbGUgYXMgImdpdCBmZXRjaCIgYW5kICJnaXQgcHVzaCIgaGF2ZSwKKyAgIHVzaW5nICoudW5wYWNrTGltaXQgY29uZmlndXJhdGlvbi4KKworICogV2hlbiAiZ2l0IGRhZW1vbiIgaXMgcnVuIHdpdGhvdXQgLS1baW5pdC1ddGltZW91dCBzcGVjaWZpZWQsIGEKKyAgIGNvbm5lY3Rpb24gZnJvbSBhIGNsaWVudCB0aGF0IHNpbGVudGx5IGdvZXMgb2ZmbGluZSBjYW4gaGFuZyBhcm91bmQKKyAgIGZvciBhIGxvbmcgdGltZSwgd2FzdGluZyByZXNvdXJjZXMuICBUaGUgc29ja2V0LWxldmVsIEtFRVBBTElWRSBoYXMKKyAgIGJlZW4gZW5hYmxlZCB0byBhbGxvdyB0aGUgT1MgdG8gbm90aWNlIHN1Y2ggZmFpbGVkIGNvbm5lY3Rpb25zLgorCisgKiAiZ2l0IHVwbG9hZC1wYWNrIiBjb21tYW5kIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBwYXJzZS1vcHRpb25zCisgICBBUEkuCisKKyAqIFRoZSAiZ2l0IGFwcGx5IiBzdGFuZGFsb25lIHByb2dyYW0gaXMgYmVpbmcgbGliaWZpZWQ7IHRoZSBmaXJzdAorICAgc3RlcCB0byBtb3ZlIG1hbnkgc3RhdGUgdmFyaWFibGVzIGludG8gYSBzdHJ1Y3R1cmUgdGhhdCBjYW4gYmUKKyAgIGV4cGxpY2l0bHkgKHJlKWluaXRpYWxpemVkIHRvIG1ha2UgdGhlIG1hY2hpbmVyeSBjYWxsYWJsZSBtb3JlCisgICB0aGFuIG9uY2UgaGFzIGJlZW4gbWVyZ2VkLgorCisgKiBIVFRQIHRyYW5zcG9ydCBnYWluZWQgYW4gb3B0aW9uIHRvIHByb2R1Y2UgbW9yZSBkZXRhaWxlZCBkZWJ1Z2dpbmcKKyAgIHRyYWNlLgorICAgKG1lcmdlIDczZTU3YWEgZXAvaHR0cC1jdXJsLXRyYWNlIGxhdGVyIHRvIG1haW50KS4KKworICogSW5zdGVhZCBvZiB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgYSBzdHJ1Y3Qgc3RyaW5nX2xpc3QKKyAgIHRoYXQgaXMgYWxsb2NhdGVkIHdpdGggYWxsIE5VTHMgaGFwcGVucyB0byBiZSB0aGUgSU5JVF9OT0RVUCBraW5kLAorICAgdGhlIHVzZXJzIG9mIHN0cmluZ19saXN0IHN0cnVjdHVyZXMgYXJlIHRhdWdodCB0byBpbml0aWFsaXplIHRoZW0KKyAgIGV4cGxpY2l0bHkgYXMgc3VjaCwgdG8gZG9jdW1lbnQgdGhlaXIgYmVoYXZpb3VyIGJldHRlci4KKyAgIChtZXJnZSAyNzIxY2UyIGprL3N0cmluZy1saXN0LXN0YXRpYy1pbml0IGxhdGVyIHRvIG1haW50KS4KKworICogSFRUUGQgdGVzdHMgbGVhcm5lZCB0byBzaG93IHRoZSBzZXJ2ZXIgZXJyb3IgbG9nIHRvIGhlbHAgZGlhZ25vc2luZworICAgYSBmYWlsaW5nIHRlc3RzLgorICAgKG1lcmdlIDQ0ZjI0M2QgbmQvdGVzdC1saWItaHR0cGQtc2hvdy1lcnJvci1sb2ctaW4tdmVyYm9zZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBvd25lcnNoaXAgcnVsZSBmb3IgdGhlIHBpZWNlIG9mIG1lbW9yeSB0aGF0IGhvbGQgcmVmZXJlbmNlcyB0bworICAgYmUgZmV0Y2hlZCBpbiAiZ2l0IGZldGNoIiB3YXMgc2NyZXd5LCB3aGljaCBoYXMgYmVlbiBjbGVhbmVkIHVwLgorCisgKiAiZ2l0IGJpc2VjdCIgbWFrZXMgYW4gaW50ZXJuYWwgY2FsbCB0byAiZ2l0IGRpZmYtdHJlZSIgd2hlbgorICAgYmlzZWN0aW9uIGZpbmRzIHRoZSBjdWxwcml0LCBidXQgdGhpcyBjYWxsIGRpZCBub3QgaW5pdGlhbGl6ZSB0aGUKKyAgIGRhdGEgc3RydWN0dXJlIHRvIHBhc3MgdG8gdGhlIGRpZmYtdHJlZSBBUEkgY29ycmVjdGx5LgorCisgKiBGdXJ0aGVyIHByZXBhcmF0b3J5IGNsZWFuLXVwIGZvciAid29ya3RyZWUiIGZlYXR1cmUgY29udGludWVzLgorICAgKG1lcmdlIDA0MDllMGIgbmQvd29ya3RyZWUtY2xlYW51cC1wb3N0LWhlYWQtcHJvdGVjdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqIEZvcm1hdHMgb2YgdGhlIHZhcmlvdXMgZGF0YSAoYW5kIGhvdyB0byB2YWxpZGF0ZSB0aGVtKSB3aGVyZSB3ZSB1c2UKKyAgIEdQRyBzaWduYXR1cmUgaGF2ZSBiZWVuIGRvY3VtZW50ZWQuCisKKyAqIEEgbmV3IHJ1bi1jb21tYW5kIEFQSSBmdW5jdGlvbiBwaXBlX2NvbW1hbmQoKSBpcyBpbnRyb2R1Y2VkIHRvCisgICBzYW5lbHkgZmVlZCBkYXRhIHRvIHRoZSBzdGFuZGFyZCBpbnB1dCB3aGlsZSBjYXB0dXJpbmcgZGF0YSBmcm9tCisgICB0aGUgc3RhbmRhcmQgb3V0cHV0IGFuZCB0aGUgc3RhbmRhcmQgZXJyb3Igb2YgYW4gZXh0ZXJuYWwgcHJvY2VzcywKKyAgIHdoaWNoIGlzIGN1bWJlcnNvbWUgdG8gaGFuZC1yb2xsIGNvcnJlY3RseSB3aXRob3V0IGRlYWRsb2NraW5nLgorCisgKiBUaGUgY29kZXBhdGggdG8gc2lnbiBkYXRhIGluIGEgcHJlcGFyZWQgYnVmZmVyIHdpdGggR1BHIGhhcyBiZWVuCisgICB1cGRhdGVkIHRvIHVzZSB0aGlzIEFQSSB0byByZWFkIGZyb20gdGhlIHN0YXR1cy1mZCB0byBjaGVjayBmb3IKKyAgIGVycm9ycyAoaW5zdGVhZCBvZiByZWx5aW5nIG9uIEdQRydzIGV4aXQgc3RhdHVzKS4KKyAgIChtZXJnZSBlZmVlOTU1IGprL2dwZy1pbnRlcmZhY2UtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisKKyAqIEFsbG93IHQvcGVyZiBmcmFtZXdvcmsgdG8gdXNlIHRoZSBmZWF0dXJlcyBmcm9tIHRoZSBtb3N0IHJlY2VudAorICAgdmVyc2lvbiBvZiBHaXQgZXZlbiB3aGVuIHRlc3RpbmcgYW4gb2xkZXIgaW5zdGFsbGVkIHZlcnNpb24uCisKKyAqIFRoZSBjb21tYW5kcyBpbiB0aGUgImxvZy9kaWZmIiBmYW1pbHkgaGF2ZSBoYWQgYW4gRklMRSogcG9pbnRlciBpbiB0aGUKKyAgIGRhdGEgc3RydWN0dXJlIHRoZXkgcGFzcyBhcm91bmQgZm9yIGEgbG9uZyB0aW1lLCBidXQgc29tZSBjb2RlcGF0aHMKKyAgIHVzZWQgdG8gYWx3YXlzIHdyaXRlIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBBcyBhIHByZXBhcmF0b3J5IHN0ZXAKKyAgIHRvIG1ha2UgImdpdCBmb3JtYXQtcGF0Y2giIGF2YWlsYWJsZSB0byB0aGUgaW50ZXJuYWwgY2FsbGVycywgdGhlc2UKKyAgIGNvZGVwYXRocyBoYXZlIGJlZW4gdXBkYXRlZCB0byBjb25zaXN0ZW50bHkgd3JpdGUgaW50byB0aGF0IEZJTEUqCisgICBpbnN0ZWFkLgorCisgKiBDb252ZXJzaW9uIGZyb20gdW5zaWduZWQgY2hhciBzaGExWzIwXSB0byBzdHJ1Y3Qgb2JqZWN0X2lkCisgICBjb250aW51ZXMuCisKKyAqIEltcHJvdmUgdGhlIGxvb2sgb2YgdGhlIHdheSAiZ2l0IGZldGNoIiByZXBvcnRzIHdoYXQgaGFwcGVuZWQgdG8KKyAgIGVhY2ggcmVmIHRoYXQgd2FzIGZldGNoZWQuCisKKyAqIFRoZSAuYy8uaCBzb3VyY2VzIGFyZSBtYXJrZWQgYXMgc3VjaCBpbiBvdXIgLmdpdGF0dHJpYnV0ZXMgZmlsZSBzbworICAgdGhhdCAiZ2l0IGRpZmYgLVciIGFuZCBmcmllbmRzIHdvdWxkIHdvcmsgYmV0dGVyLgorCisgKiBDb2RlIGNsZWFuLXVwIHRvIGF2b2lkIHVzaW5nIGEgdmFyaWFibGUgc3RyaW5nIHRoYXQgY29tcGlsZXJzIG1heQorICAgZmVlbCB1bnRydXN0YWJsZSBhcyBwcmludGYtc3R5bGUgZm9ybWF0IGdpdmVuIHRvIHdyaXRlX2ZpbGUoKQorICAgaGVscGVyIGZ1bmN0aW9uLgorCisgKiAiZ2l0IHA0IiB1c2VkIGEgbG9jYXRpb24gb3V0c2lkZSAkR0lUX0RJUi9yZWZzLyB0byBwbGFjZSBpdHMKKyAgIHRlbXBvcmFyeSBicmFuY2hlcywgd2hpY2ggaGFzIGJlZW4gbW92ZWQgdG8gcmVmcy9naXQtcDQtdG1wLy4KKworICogRXhpc3RpbmcgYXV0b2NvbmYgZ2VuZXJhdGVkIHRlc3QgZm9yIHRoZSBuZWVkIHRvIGxpbmsgd2l0aCBwdGhyZWFkCisgICBsaWJyYXJ5IGRpZCBub3QgY2hlY2sgYWxsIHRoZSBmdW5jdGlvbnMgZnJvbSBwdGhyZWFkIGxpYnJhcmllczsKKyAgIHJlY2VudCBGcmVlQlNEIGhhcyBzb21lIGZ1bmN0aW9ucyBpbiBsaWJjIGJ1dCBub3Qgb3RoZXJzLCBhbmQgd2UKKyAgIG1pc3Rha2VubHkgdGhvdWdodCBsaW5raW5nIHdpdGggbGliYyBpcyBlbm91Z2ggd2hlbiBpdCBpcyBub3QuCisKKyAqIFdoZW4gImdpdCBmc2NrIiByZXBvcnRzIGEgYnJva2VuIGxpbmsgKGUuZy4gYSB0cmVlIG9iamVjdCBjb250YWlucworICAgYSBibG9iIHRoYXQgZG9lcyBub3QgZXhpc3QpLCBib3RoIGNvbnRhaW5pbmcgb2JqZWN0IGFuZCB0aGUgb2JqZWN0CisgICB0aGF0IGlzIHJlZmVycmVkIHRvIHdlcmUgcmVwb3J0ZWQgd2l0aCB0aGVpciA0MC1oZXggb2JqZWN0IG5hbWVzLgorICAgVGhlIGNvbW1hbmQgbGVhcm5lZCB0aGUgIi0tbmFtZS1vYmplY3RzIiBvcHRpb24gdG8gc2hvdyB0aGUgcGF0aCB0bworICAgdGhlIGNvbnRhaW5pbmcgb2JqZWN0IGZyb20gZXhpc3RpbmcgcmVmcyAoZS5nLiAiSEVBRH4yNF4yOmZpbGUudHh0IikuCisKKyAqIEFsbG93IGh0dHAgZGFlbW9uIHRlc3RzIGluIFRyYXZpcyBDSSB0ZXN0cy4KKworICogTWFrZWZpbGUgYXNzdW1lZCB0aGF0IC1scnQgaXMgYWx3YXlzIGF2YWlsYWJsZSBvbiBwbGF0Zm9ybXMgdGhhdAorICAgd2FudCB0byB1c2UgY2xvY2tfZ2V0dGltZSgpIGFuZCBDTE9DS19NT05PVE9OSUMsIHdoaWNoIGlzIG5vdCBhCisgICBjYXNlIGZvciByZWNlbnQgTWFjIE9TIFguICBUaGUgbmVjZXNzYXJ5IHN5bWJvbHMgYXJlIG9mdGVuIGZvdW5kIGluCisgICBsaWJjIG9uIG1hbnkgbW9kZXJuIHN5c3RlbXMgYW5kIGhhdmluZyAtbHJ0IG9uIHRoZSBjb21tYW5kIGxpbmUsIGFzCisgICBsb25nIGFzIHRoZSBsaWJyYXJ5IGV4aXN0cywgaGFkIG5vIGVmZmVjdCwgYnV0IHdoZW4gdGhlIHBsYXRmb3JtCisgICByZW1vdmVzIGxpYnJ0LmEgdGhhdCBpcyBhIGRpZmZlcmVudCBtYXR0ZXItLWhhdmluZyAtbHJ0IHdpbGwgYnJlYWsKKyAgIHRoZSBsaW5rYWdlLgorCisgICBUaGlzIGNoYW5nZSBjb3VsZCBiZSBzZWVuIGFzIGEgcmVncmVzc2lvbiBmb3IgdGhvc2Ugd2hvIGRvIG5lZWQgdG8KKyAgIHNwZWNpZnkgLWxydCwgYXMgdGhleSBub3cgc3BlY2lmaWNhbGx5IGFzayBmb3IgTkVFRFNfTElCUlQgd2hlbgorICAgYnVpbGRpbmcuIEhvcGVmdWxseSB0aGV5IGFyZSBpbiB0aGUgbWlub3JpdHkgdGhlc2UgZGF5cy4KKworICogRnVydGhlciBwcmVwYXJhdG9yeSB3b3JrIG9uIHRoZSByZWZzIEFQSSBiZWZvcmUgdGhlIHBsdWdnYWJsZQorICAgYmFja2VuZCBzZXJpZXMgY2FuIGxhbmQuCisKKyAqIEVycm9yIGhhbmRsaW5nIGluIHRoZSBjb2RlcGF0aHMgdGhhdCB1cGRhdGVzIHJlZnMgaGFzIGJlZW4KKyAgIGltcHJvdmVkLgorCisgKiBUaGUgQVBJIHRvIGl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZnMgKGkuZS4gZm9yX2VhY2hfcmVmKCksIGV0Yy4pCisgICBoYXMgYmVlbiByZXZhbXBlZC4KKworICogVGhlIGhhbmRsaW5nIG9mIHRoZSAidGV4dD1hdXRvIiBhdHRyaWJ1dGUgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgJCBlY2hvICIqIHRleHQ9YXV0byBlb2w9Y3JsZiIgPi5naXRhdHRyaWJ1dGVzCisgICB1c2VkIHRvIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzCisgICAkIGVjaG8gIiogdGV4dCBlb2w9Y3JsZiIgPi5naXRhdHRyaWJ1dGVzCisgICBpLmUuIGRlY2xhcmluZyBhbGwgZmlsZXMgYXJlIHRleHQgKGlnbm9yaW5nICJhdXRvIikuICBUaGUKKyAgIGNvbWJpbmF0aW9uIGhhcyBiZWVuIGZpeGVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gZG9pbmcKKyAgICQgZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUKKworICogRG9jdW1lbnRhdGlvbiBoYXMgYmVlbiB1cGRhdGVkIHRvIHNob3cgYmV0dGVyIGV4YW1wbGUgdXNhZ2UKKyAgIG9mIHRoZSB1cGRhdGVkICJ0ZXh0PWF1dG8iIGF0dHJpYnV0ZS4KKworICogQSBmZXcgdGVzdHMgdGhhdCBzcGVjaWZpY2FsbHkgdGFyZ2V0ICJnaXQgcmViYXNlIC1pIiBoYXZlIGJlZW4KKyAgIGFkZGVkLgorCisgKiBEdW1iIGh0dHAgdHJhbnNwb3J0IG9uIHRoZSBjbGllbnQgc2lkZSBoYXMgYmVlbiBvcHRpbWl6ZWQuCisgICAobWVyZ2UgZWNiYTE5NSBldy9odHRwLXdhbGtlciBsYXRlciB0byBtYWludCkuCisKKyAqIFVzZXJzIG9mIHRoZSBwYXJzZV9vcHRpb25zX2NvbmNhdCgpIEFQSSBmdW5jdGlvbiBuZWVkIHRvIGFsbG9jYXRlCisgICBleHRyYSBzbG90cyBpbiBhZHZhbmNlIGFuZCBmaWxsIHRoZW0gd2l0aCBPUFRfRU5EKCkgd2hlbiB0aGV5IHdhbnQKKyAgIHRvIGRlY2lkZSB0aGUgc2V0IG9mIHN1cHBvcnRlZCBvcHRpb25zIGR5bmFtaWNhbGx5LCB3aGljaCBtYWtlcyB0aGUKKyAgIGNvZGUgZXJyb3ItcHJvbmUgYW5kIGhhcmQgdG8gcmVhZC4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkIGJ5IHR3ZWFraW5nCisgICB0aGUgQVBJIHRvIGFsbG9jYXRlIGFuZCByZXR1cm4gYSBuZXcgY29weSBvZiAic3RydWN0IG9wdGlvbiIgYXJyYXkuCisKKyAqICJnaXQgZmV0Y2giIGV4Y2hhbmdlcyBiYXRjaGVkIGhhdmUvYWNrIG1lc3NhZ2VzIGJldHdlZW4gdGhlIHNlbmRlcgorICAgYW5kIHRoZSByZWNlaXZlciwgaW5pdGlhbGx5IGRvdWJsaW5nIGV2ZXJ5IHRpbWUgYW5kIHRoZW4gZmFsbGluZworICAgYmFjayB0byBlbmxhcmdlIHRoZSB3aW5kb3cgc2l6ZSBsaW5lYXJseS4gIFRoZSAic21hcnQgaHR0cCIKKyAgIHRyYW5zcG9ydCwgYmVpbmcgYW4gaGFsZi1kdXBsZXggcHJvdG9jb2wsIG91dGdyb3dzIHRoZSBwcmVzZXQgbGltaXQKKyAgIHRvbyBxdWlja2x5IGFuZCBiZWNvbWVzIGluZWZmaWNpZW50IHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBhIGxhcmdlCisgICByZXBvc2l0b3J5LiAgVGhlIGludGVybmFsIG1lY2hhbmlzbSBsZWFybmVkIHRvIGdyb3cgdGhlIHdpbmRvdyBzaXplCisgICBtb3JlIGFnZ3Jlc3NpdmVseSB3aGVuIHdvcmtpbmcgd2l0aCB0aGUgInNtYXJ0IGh0dHAiIHRyYW5zcG9ydC4KKworICogVGVzdHMgZm9yICJnaXQgc3ZuIiBoYXZlIGJlZW4gdGF1Z2h0IHRvIHJldXNlIHRoZSBsaWItaHR0cGQgdGVzdAorICAgaW5mcmFzdHJ1Y3R1cmUgd2hlbiB0ZXN0aW5nIHRoZSBzdWJ2ZXJzaW9uIGludGVncmF0aW9uIHRoYXQKKyAgIGludGVyYWN0cyB3aXRoIHN1YnZlcnNpb24gcmVwb3NpdG9yaWVzIHNlcnZlZCBvdmVyIHRoZSBodHRwOi8vCisgICBwcm90b2NvbC4KKyAgIChtZXJnZSBhOGE1ZDI1IGV3L2dpdC1zdm4taHR0cC10ZXN0cyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcGFjay1vYmplY3RzIiBoYXMgYSBmZXcgb3B0aW9ucyB0aGF0IHRlbGwgaXQgbm90IHRvIHBhY2sKKyAgIG9iamVjdHMgZm91bmQgaW4gY2VydGFpbiBwYWNrZmlsZXMsIHdoaWNoIHJlcXVpcmUgaXQgdG8gc2NhbiAuaWR4CisgICBmaWxlcyBvZiBhbGwgYXZhaWxhYmxlIHBhY2tzLiAgVGhlIGNvZGVwYXRocyBpbnZvbHZlZCBpbiB0aGVzZQorICAgb3BlcmF0aW9ucyBoYXZlIGJlZW4gb3B0aW1pemVkIGZvciBhIGNvbW1vbiBjYXNlIG9mIG5vdCBoYXZpbmcgYW55CisgICBub24tbG9jYWwgcGFjayBhbmQvb3IgYW55IC5rZXB0IHBhY2suCisKKyAqIFRoZSB0MzcwMCB0ZXN0IGFib3V0ICJhZGQgLS1jaG1vZD0teCIgaGF2ZSBiZWVuIG1hZGUgYSBiaXQgbW9yZQorICAgcm9idXN0IGFuZCBnZW5lcmFsbHkgY2xlYW5lZCB1cC4KKyAgIChtZXJnZSA3NjZjZGM0IGliL3QzNzAwLWFkZC1jaG1vZC14LXVwZGF0ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgYnVpbGQgcHJvY2VkdXJlIGxlYXJuZWQgUEFHRVJfRU5WIGtub2IgdGhhdCBsaXN0cyB3aGF0IGRlZmF1bHQKKyAgIGVudmlyb25tZW50IHZhcmlhYmxlIHNldHRpbmdzIHRvIGV4cG9ydCBmb3IgcG9wdWxhciBwYWdlcnMuICBUaGlzCisgICBtZWNoYW5pc20gaXMgdXNlZCB0byB0d2VhayB0aGUgZGVmYXVsdCBzZXR0aW5ncyB0byBNT1JFIG9uIEZyZWVCU0QuCisgICAobWVyZ2UgOTk1YmMyMiBldy9idWlsZC10aW1lLXBhZ2VyLXR3ZWFrcyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBodHRwLWJhY2tlbmQgKHRoZSBzZXJ2ZXItc2lkZSBjb21wb25lbnQgb2Ygc21hcnQtaHR0cAorICAgdHJhbnNwb3J0KSB1c2VkIHRvIHRyaWNrbGUgdGhlIEhUVFAgaGVhZGVyIG9uZSBhdCBhIHRpbWUuICBOb3cKKyAgIHRoZXNlIHdyaXRlKDIpcyBhcmUgYmF0Y2hlZC4KKyAgIChtZXJnZSBiMzYwNDVjIGV3L2h0dHAtYmFja2VuZC1iYXRjaC1oZWFkZXJzIGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiAiZ2l0IHJlYmFzZSIgdHJpZXMgdG8gY29tcGFyZSBzZXQgb2YgY2hhbmdlcyBvbiB0aGUgdXBkYXRlZAorICAgdXBzdHJlYW0gYW5kIG91ciBvd24gYnJhbmNoLCBpdCBjb21wdXRlcyBwYXRjaC1pZCBmb3IgYWxsIG9mIHRoZXNlCisgICBjaGFuZ2VzIGFuZCBhdHRlbXB0cyB0byBmaW5kIG1hdGNoZXMuIFRoaXMgaGFzIGJlZW4gb3B0aW1pemVkIGJ5CisgICBsYXppbHkgY29tcHV0aW5nIHRoZSBmdWxsIHBhdGNoLWlkICh3aGljaCBpcyBleHBlbnNpdmUpIHRvIGJlCisgICBjb21wYXJlZCBvbmx5IGZvciBjaGFuZ2VzIHRoYXQgdG91Y2ggdGhlIHNhbWUgc2V0IG9mIHBhdGhzLgorICAgKG1lcmdlIGJhNjc1MDQga3cvcGF0Y2gtaWRzLW9wdGltIGxhdGVyIHRvIG1haW50KS4KKworICogQSBoYW5kZnVsIG9mIHRlc3RzIHRoYXQgd2VyZSBicm9rZW4gdW5kZXIgZ2V0dGV4dC1wb2lzb24gYnVpbGQgaGF2ZQorICAgYmVlbiBmaXhlZC4KKworICogVGhlIHJlY2VudCBpMThuIHBhdGNoIHdlIGFkZGVkIGR1cmluZyB0aGlzIGN5Y2xlIGRpZCBhIGJpdCB0b28gbXVjaAorICAgcmVmYWN0b3Jpbmcgb2YgdGhlIG1lc3NhZ2VzIHRvIGF2b2lkIHdvcmQtbGVnb3M7IHRoZSByZXBldGl0aW9uIGhhcworICAgYmVlbiByZWR1Y2VkIHRvIGhlbHAgdHJhbnNsYXRvcnMuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjIuOQorLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjggaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycKK25vdGVzIGZvciBkZXRhaWxzKS4KKworICogVGhlIGNvbW1hbmRzIGluIGBnaXQgbG9nYCBmYW1pbHkgdGFrZSAlQyhhdXRvKSBpbiBhIGN1c3RvbSBmb3JtYXQKKyAgIHN0cmluZy4gIFRoaXMgdW5jb25kaXRpb25hbGx5IHR1cm5lZCB0aGUgY29sb3Igb24sIGlnbm9yaW5nCisgICAtLW5vLWNvbG9yIG9yIHdpdGggLS1jb2xvcj1hdXRvIHdoZW4gdGhlIG91dHB1dCBpcyBub3QgY29ubmVjdGVkIHRvCisgICBhIHR0eTsgdGhpcyB3YXMgY29ycmVjdGVkIHRvIG1ha2UgdGhlIGZvcm1hdCB0cnVseSBiZWhhdmUgYXMKKyAgICJhdXRvIi4KKworICogImdpdCByZXYtbGlzdCAtLWNvdW50IiB3aG9zZSB3YWxrLWxlbmd0aCBpcyBsaW1pdGVkIHdpdGggIi1uIgorICAgb3B0aW9uIGRpZCBub3Qgd29yayB3ZWxsIHdpdGggdGhlIGNvdW50aW5nIG9wdGltaXplZCB0byBsb29rIGF0IHRoZQorICAgYml0bWFwIGluZGV4LgorCisgKiAiZ2l0IHNob3cgLVciIChleHRlbmQgaHVua3MgdG8gY292ZXIgdGhlIGVudGlyZSBmdW5jdGlvbiwgZGVsaW1pdGVkCisgICBieSBsaW5lcyB0aGF0IG1hdGNoIHRoZSAiZnVuY25hbWUiIHBhdHRlcm4pIHVzZWQgdG8gc2hvdyB0aGUgZW50aXJlCisgICBmaWxlIHdoZW4gYSBjaGFuZ2UgYWRkZWQgYW4gZW50aXJlIGZ1bmN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsCisgICB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogVGhlIGRvY3VtZW50YXRpb24gc2V0IGhhcyBiZWVuIHVwZGF0ZWQgc28gdGhhdCBsaXRlcmFsIGNvbW1hbmRzLAorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgY29uc2lzdGVudGx5CisgICB0eXBlc2V0IGluIGZpeGVkLXdpZHRoIGZvbnQgYW5kIGJvbGQgaW4gbWFucGFnZXMuCisKKyAqICJnaXQgc3ZuIHByb3BzZXQiIHN1YmNvbW1hbmQgdGhhdCB3YXMgYWRkZWQgaW4gMi4zIGRheXMgaXMKKyAgIGRvY3VtZW50ZWQgbm93LgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiB0cmllcyB0byBjb25zaXN0ZW50bHkgc3BlbGwgIkdQRyI7IHdoZW4KKyAgIHJlZmVycmluZyB0byB0aGUgc3BlY2lmaWMgcHJvZ3JhbSBuYW1lLCAiZ3BnIiBpcyB1c2VkLgorCisgKiAiZ2l0IHJlZmxvZyIgc3RvcHBlZCB1cG9uIHNlZWluZyBhbiBlbnRyeSB0aGF0IGRlbm90ZXMgYSBicmFuY2gKKyAgIGNyZWF0aW9uIGV2ZW50IChha2EgInVuYm9ybiIpLCB3aGljaCBtYWRlIGl0IGFwcGVhciBhcyBpZiB0aGUKKyAgIHJlZmxvZyB3YXMgdHJ1bmNhdGVkLgorCisgKiBUaGUgZ2l0LXByb21wdCBzY3JpcHRsZXQgKGluIGNvbnRyaWIvKSB3YXMgbm90IGZyaWVuZGx5IHdpdGggdGhvc2UKKyAgIHdobyB1c2VzICJzZXQgLXUiLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogY29tcGF0L3JlZ2V4IGNvZGUgZGlkIG5vdCBjbGVhbmx5IGNvbXBpbGUuCisKKyAqIEEgY29kZXBhdGggdGhhdCB1c2VkIGFsbG9jYSgzKSB0byBwbGFjZSBhbiB1bmJvdW5kZWQgYW1vdW50IG9mIGRhdGEKKyAgIG9uIHRoZSBzdGFjayBoYXMgYmVlbiB1cGRhdGVkIHRvIGF2b2lkIGRvaW5nIHNvLgorCisgKiAiZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNobW9kPSt4IGZpbGUiIG1heSBiZSB1c2FibGUgYXMgYW4gZXNjYXBlCisgICBoYXRjaCwgYnV0IG5vdCBhIGZyaWVuZGx5IHRoaW5nIHRvIGZvcmNlIGZvciBwZW9wbGUgd2hvIGRvIG5lZWQgdG8KKyAgIHVzZSBpdCByZWd1bGFybHkuICAiZ2l0IGFkZCAtLWNobW9kPSt4IGZpbGUiIGNhbiBiZSB1c2VkIGluc3RlYWQuCisKKyAqIEJ1aWxkIGltcHJvdmVtZW50cyBmb3IgZ25vbWUta2V5cmluZyAoaW4gY29udHJpYi8pCisKKyAqICJnaXQgc3RhdHVzIiB1c2VkIHRvIHNheSAid29ya2luZyBkaXJlY3RvcnkiIHdoZW4gaXQgbWVhbnQgIndvcmtpbmcKKyAgIHRyZWUiLgorCisgKiBDb21tZW50cyBhYm91dCBtaXNiZWhhdmluZyBGcmVlQlNEIHNoZWxscyBoYXZlIGJlZW4gY2xhcmlmaWVkIHdpdGgKKyAgIHRoZSB2ZXJzaW9uIG51bWJlciAoOS54IGFuZCBiZWZvcmUgYXJlIGJyb2tlbiwgbmV3ZXIgb25lcyBhcmUgT0spLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIEEiIHdvcmtlZCBvbiBhbiB1bmJvcm4gYnJhbmNoLCBidXQgImdpdAorICAgY2hlcnJ5LXBpY2sgQS4uQiIgZGlkbid0LgorCisgKiBGaXggYW4gdW5pbnRlbmRlZCByZWdyZXNzaW9uIGluIHYyLjkgdGhhdCBicmVha3MgImNsb25lIC0tZGVwdGgiCisgICB0aGF0IHJlY3Vyc2VzIGRvd24gdG8gc3VibW9kdWxlcyBieSBmb3JjaW5nIHRoZSBzdWJtb2R1bGVzIHRvIGFsc28KKyAgIGJlIGNsb25lZCBzaGFsbG93bHksIHdoaWNoIG1hbnkgc2VydmVyIGluc3RhbmNlcyB0aGF0IGhvc3QgdXBzdHJlYW0KKyAgIG9mIHRoZSBzdWJtb2R1bGVzIGFyZSBub3QgcHJlcGFyZWQgZm9yLgorCisgKiBGaXggdW5uZWNlc3NhcmlseSB3YXN0ZSBpbiB0aGUgaWRpb21hdGljIHVzZSBvZiAnOiAke1ZBUj1kZWZhdWx0fScKKyAgIHRvIHNldCB0aGUgZGVmYXVsdCB2YWx1ZSwgd2l0aG91dCBlbmNsb3NpbmcgaXQgaW4gZG91YmxlIHF1b3Rlcy4KKworICogU29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlIGhhZCBub24tQU5TSSBzdHJpY3QgZGVjbGFyYXRpb25zIG9mIEMKKyAgIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdCB0YWtlIGFueSBwYXJhbWV0ZXJzLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBUaGUgaW50ZXJuYWwgY29kZSB1c2VkIHRvIHNob3cgbG9jYWwgdGltZXpvbmUgb2Zmc2V0IGlzIG5vdAorICAgcHJlcGFyZWQgdG8gaGFuZGxlIHRpbWVzdGFtcHMgYmV5b25kIHllYXIgMjEwMCwgYW5kIGdhdmUgYQorICAgYm9ndXMgb2Zmc2V0IHZhbHVlIHRvIHRoZSBjYWxsZXIuICBVc2UgYSBtb3JlIGJlbmlnbiBsb29raW5nCisgICArMDAwMCBpbnN0ZWFkIGFuZCBsZXQgImdpdCBsb2ciIGdvaW5nIGluIHN1Y2ggYSBjYXNlLCBpbnN0ZWFkCisgICBvZiBhYm9ydGluZy4KKworICogT25lIGFtb25nIGZvdXIgaW52b2NhdGlvbnMgb2YgcmVhZGxpbmsoMSkgaW4gb3VyIHRlc3Qgc3VpdGUgaGFzCisgICBiZWVuIHJld3JpdHRlbiBzbyB0aGF0IHRoZSB0ZXN0IGNhbiBydW4gb24gc3lzdGVtcyB3aXRob3V0IHRoZQorICAgY29tbWFuZCAob3RoZXJzIGFyZSBpbiB2YWxncmluZCB0ZXN0IGZyYW1ld29yayBhbmQgdDk4MDIpLgorCisgKiB0L3BlcmYgbmVlZHMgL3Vzci9iaW4vdGltZSB3aXRoIEdOVSBleHRlbnNpb247IHRoZSBpbnZvY2F0aW9uIG9mIGl0CisgICBpcyB1cGRhdGVkIHRvICJndGltZSIgb24gRGFyd2luLgorCisgKiBBIGJ1Zywgd2hpY2ggY2F1c2VkICJnaXQgcDQiIHdoaWxlIHJ1bm5pbmcgdW5kZXIgdmVyYm9zZSBtb2RlIHRvCisgICByZXBvcnQgcGF0aHMgdGhhdCBhcmUgb21pdHRlZCBkdWUgdG8gYnJhbmNoIHByZWZpeCBpbmNvcnJlY3RseSwgaGFzCisgICBiZWVuIGZpeGVkOyB0aGUgY29tbWFuZCBzYWlkICJJZ25vcmluZyBmaWxlIG91dHNpZGUgb2YgcHJlZml4IiBmb3IKKyAgIHBhdGhzIHRoYXQgYXJlIF9pbnNpZGVfLgorCisgKiBUaGUgdG9wIGxldmVsIGRvY3VtZW50YXRpb24gImdpdCBoZWxwIGdpdCIgc3RpbGwgcG9pbnRlZCBhdCB0aGUKKyAgIGRvY3VtZW50YXRpb24gc2V0IGhvc3RlZCBhdCBub3ctZGVmdW5jdCBnb29nbGUtY29kZSByZXBvc2l0b3J5LgorICAgVXBkYXRlIGl0IHRvIHBvaW50IHRvIGh0dHBzOi8vZ2l0LmdpdGh1Yi5pby9odG1sZG9jcy9naXQuaHRtbAorICAgaW5zdGVhZC4KKworICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgY29udGVudHMgb2YgYSBjb21taXQgb2JqZWN0IGFuZAorICAgZmluZHMgaXRzIHN1YmplY3QgbGluZSBkaWQgbm90IGlnbm9yZSBsZWFkaW5nIGJsYW5rIGxpbmVzLCBhcyBpcworICAgY29tbW9ubHkgZG9uZSBieSBvdGhlciBjb2RlcGF0aHMuICBNYWtlIGl0IGlnbm9yZSBsZWFkaW5nIGJsYW5rCisgICBsaW5lcyB0byBtYXRjaC4KKworICogRm9yIGEgbG9uZyB0aW1lLCB3ZSBjYXJyaWVkIGFuIGluLWNvZGUgY29tbWVudCB0aGF0IHNhaWQgb3VyCisgICBjb2xvcmVkIG91dHB1dCB3b3VsZCB3b3JrIG9ubHkgd2hlbiB3ZSB1c2UgZnByaW50Zi9mcHV0cyBvbgorICAgV2luZG93cywgd2hpY2ggbm8gbG9uZ2VyIGlzIHRoZSBjYXNlIGZvciB0aGUgcGFzdCBmZXcgeWVhcnMuCisKKyAqICJnYy5hdXRvUGFja0xpbWl0IiB3aGVuIHNldCB0byAxIHNob3VsZCBub3QgdHJpZ2dlciBhIHJlcGFja2luZworICAgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBwYWNrLCBidXQgdGhlIGNvZGUgY291bnRlZCBwb29ybHkgYW5kIGRpZAorICAgc28uCisKKyAqIEFkZCBhIHRlc3QgdG8gc3BlY2lmeSB0aGUgZGVzaXJlZCBiZWhhdmlvdXIgdGhhdCBjdXJyZW50bHkgaXMgbm90CisgICBhdmFpbGFibGUgaW4gImdpdCByZWJhc2UgLVhzdWJ0cmVlPS4uLiIuCisKKyAqIE1vcmUgbWFyay11cCB1cGRhdGVzIHRvIHR5cGVzZXQgc3RyaW5ncyB0aGF0IGFyZSBleHBlY3RlZCB0bworICAgbGl0ZXJhbGx5IHR5cGVkIGJ5IHRoZSBlbmQgdXNlciBpbiBmaXhlZC13aWR0aCBmb250LgorCisgKiAiZ2l0IGNvbW1pdCAtLWFtZW5kIC0tYWxsb3ctZW1wdHktbWVzc2FnZSAtUyIgZm9yIGEgY29tbWl0IHdpdGhvdXQKKyAgIGFueSBtZXNzYWdlIGJvZHkgY291bGQgaGF2ZSBtaXNpZGVudGlmaWVkIHdoZXJlIHRoZSBoZWFkZXIgb2YgdGhlCisgICBjb21taXQgb2JqZWN0IGVuZHMuCisKKyAqICJnaXQgcmViYXNlIC1pIC0tYXV0b3N0YXNoIiBkaWQgbm90IHJlc3RvcmUgdGhlIGF1dG8tc3Rhc2hlZCBjaGFuZ2UKKyAgIHdoZW4gdGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4KKworICogR2l0IGRvZXMgbm90IGtub3cgd2hhdCB0aGUgY29udGVudHMgaW4gdGhlIGluZGV4IHNob3VsZCBiZSBmb3IgYQorICAgcGF0aCBhZGRlZCB3aXRoICJnaXQgYWRkIC1OIiB5ZXQsIHNvICJnaXQgZ3JlcCAtLWNhY2hlZCIgc2hvdWxkIG5vdAorICAgc2hvdyBoaXRzIChvciBzaG93IGxhY2sgb2YgaGl0cywgd2l0aCAtTCkgaW4gc3VjaCBhIHBhdGgsIGJ1dCB0aGF0CisgICBsb2dpYyBkb2VzIG5vdCBhcHBseSB0byAiZ2l0IGdyZXAiLCBpLmUuIHNlYXJjaGluZyBpbiB0aGUgd29ya2luZworICAgdHJlZSBmaWxlcy4gIEJ1dCB3ZSBkaWQgc28gYnkgbWlzdGFrZSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGJsYW1lIC1NIiBtaXNzZWQgYSBzaW5nbGUgbGluZSB0aGF0IHdhcyBtb3ZlZCB3aXRoaW4gdGhlIGZpbGUuCisKKyAqIEZpeCByZWNlbnRseSBpbnRyb2R1Y2VkIGNvZGVwYXRocyB0aGF0IGFyZSBpbnZvbHZlZCBpbiBwYXJhbGxlbAorICAgc3VibW9kdWxlIG9wZXJhdGlvbnMsIHdoaWNoIGdhdmUgdXAgb24gcmVhZGluZyB0b28gZWFybHksIGFuZAorICAgY291bGQgaGF2ZSB3YXN0ZWQgQ1BVIHdoaWxlIGF0dGVtcHRpbmcgdG8gd3JpdGUgdW5kZXIgYSBjb3JuZXIKKyAgIGNhc2UgY29uZGl0aW9uLgorCisgKiAiZ2l0IGdyZXAgLWkiIGhhcyBiZWVuIHRhdWdodCB0byBmb2xkIGNhc2UgaW4gbm9uLWFzY2lpIGxvY2FsZXMKKyAgIGNvcnJlY3RseS4KKworICogQSB0ZXN0IHRoYXQgdW5jb25kaXRpb25hbGx5IHVzZWQgIm1rdGVtcCIgbGVhcm5lZCB0aGF0IHRoZSBjb21tYW5kCisgICBpcyBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGV2ZXJ5d2hlcmUuCisKKyAqIFRoZXJlIGFyZSBjZXJ0YWluIGhvdXNlLWtlZXBpbmcgdGFza3MgdGhhdCBuZWVkIHRvIGJlIHBlcmZvcm1lZCBhdAorICAgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIGFueSBHaXQgcHJvZ3JhbSwgYW5kIHByb2dyYW1zIHRoYXQgYXJlIG5vdAorICAgYnVpbHQtaW4gY29tbWFuZHMgaGFkIHRvIGRvIHRoZW0gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgImdpdCIKKyAgIHBvdHR5IGRvZXMuICBJdCB3YXMgZWFzeSB0byBtYWtlIG1pc3Rha2VzIGluIG9uZS1vZmYgc3RhbmRhbG9uZQorICAgcHJvZ3JhbXMgKGxpa2UgdGVzdCBoZWxwZXJzKS4gIEEgY29tbW9uICJtYWluKCkiIGZ1bmN0aW9uIHRoYXQKKyAgIGNhbGxzIGNtZF9tYWluKCkgb2YgaW5kaXZpZHVhbCBwcm9ncmFtIGhhcyBiZWVuIGludHJvZHVjZWQgdG8KKyAgIG1ha2UgaXQgaGFyZGVyIHRvIG1ha2UgbWlzdGFrZXMuCisgICAobWVyZ2UgZGU2MWNlYiBqay9jb21tb24tbWFpbiBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSB0ZXN0IGZyYW1ld29yayBsZWFybmVkIGEgbmV3IGhlbHBlciB0ZXN0X21hdGNoX3NpZ25hbCB0bworICAgY2hlY2sgYW4gZXhpdCBjb2RlIGZyb20gZ2V0dGluZyBraWxsZWQgYnkgYW4gZXhwZWN0ZWQgc2lnbmFsLgorCisgKiBHZW5lcmFsIGNvZGUgY2xlYW4tdXAgYXJvdW5kIGEgaGVscGVyIGZ1bmN0aW9uIHRvIHdyaXRlIGEKKyAgIHNpbmdsZS1saW5lciB0byBhIGZpbGUuCisgICAobWVyZ2UgN2ViNmUxMCBqay93cml0ZS1maWxlIGxhdGVyIHRvIG1haW50KS4KKworICogT25lIHBhcnQgb2YgImdpdCBhbSIgaGFkIGFuIG9kZGJhbGwgaGVscGVyIGZ1bmN0aW9uIHRoYXQgY2FsbGVkCisgICBzdHVmZiBmcm9tIG91dHNpZGUgImhpcyIgYXMgb3Bwb3NlZCB0byBjYWxsaW5nIHdoYXQgd2UgaGF2ZSAib3VycyIsCisgICB3aGljaCB3YXMgbm90IGdlbmRlci1uZXV0cmFsIGFuZCBhbHNvIGluY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mCisgICB0aGUgc3lzdGVtIHdoZXJlIG91dHNpZGUgc3R1ZmYgaXMgdXN1YWxseSBjYWxsZWQgInRoZWlycyIgaW4KKyAgIGNvbnRyYXN0IHRvICJvdXJzIi4KKworICogImdpdCBibGFtZSBmaWxlIiBhbGxvd2VkIHRoZSBsaW5lYWdlIG9mIGxpbmVzIGluIHRoZSB1bmNvbW1pdHRlZCwKKyAgIHVuYWRkZWQgY29udGVudHMgb2YgImZpbGUiIHRvIGJlIGluc3BlY3RlZCwgYnV0IGl0IHJlZnVzZWQgd2hlbgorICAgImZpbGUiIGRpZCBub3QgYXBwZWFyIGluIHRoZSBjdXJyZW50IGNvbW1pdC4gIFdoZW4gImZpbGUiIHdhcworICAgY3JlYXRlZCBieSByZW5hbWluZyBhbiBleGlzdGluZyBmaWxlIChidXQgdGhlIGNoYW5nZSBoYXMgbm90IGJlZW4KKyAgIGNvbW1pdHRlZCksIHRoaXMgcmVzdHJpY3Rpb24gd2FzIHVubmVjZXNzYXJpbHkgdGlnaHQuCisKKyAqICJnaXQgYWRkIC1OIGRpci9maWxlICYmIGdpdCB3cml0ZS10cmVlIiBwcm9kdWNlZCBhbiBpbmNvcnJlY3QgdHJlZQorICAgd2hlbiB0aGVyZSBhcmUgb3RoZXIgcGF0aHMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHRoYXQgc29ydHMgYWZ0ZXIKKyAgICJmaWxlIi4KKworICogImdpdCBmZXRjaCBodHRwOi8vdXNlcjpwYXNzQGhvc3QvcmVwby4uLiIgc2NydWJiZWQgdGhlIHVzZXJpbmZvCisgICBwYXJ0LCBidXQgImdpdCBwdXNoIiBkaWRuJ3QuCisKKyAqICJnaXQgbWVyZ2UiIHdpdGggcmVub3JtYWxpemF0aW9uIGRpZCBub3Qgd29yayB3ZWxsIHdpdGgKKyAgIG1lcmdlLXJlY3Vyc2l2ZSwgZHVlIHRvICJzYWZlciBjcmxmIiBjb252ZXJzaW9uIGtpY2tpbmcgaW4gd2hlbiBpdAorICAgc2hvdWxkbid0LgorICAgKG1lcmdlIDEzMzVkNzYgamMvcmVub3JtYWxpemUtbWVyZ2Uta2lsbC1zYWZlci1jcmxmIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHVzZSBvZiBzdHJidWYgaW4gImdpdCBybSIgdG8gYnVpbGQgZmlsZW5hbWUgdG8gcmVtb3ZlIHdhcyBhIGJpdAorICAgc3Vib3B0aW1hbCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIEFuIGFnZSBvbGQgYnVnIHRoYXQgY2F1c2VkICJnaXQgZGlmZiAtLWlnbm9yZS1zcGFjZS1hdC1lb2wiCisgICBtaXNiZWhhdmUgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgbm90ZXMgbWVyZ2UiIGhhZCBhIGNvZGUgdG8gc2VlIGlmIGEgcGF0aCBleGlzdHMgKGFuZCBmYWlscyBpZgorICAgaXQgZG9lcykgYW5kIHRoZW4gb3BlbiB0aGUgcGF0aCBmb3Igd3JpdGluZyAod2hlbiBpdCBkb2Vzbid0KS4KKyAgIFJlcGxhY2UgaXQgd2l0aCBvcGVuIHdpdGggT19FWENMLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgYW5kICJnaXQgaW5kZXgtcGFjayIgbW9zdGx5IG9wZXJhdGUgd2l0aCBvZmZfdAorICAgd2hlbiB0YWxraW5nIGFib3V0IHRoZSBvZmZzZXQgb2Ygb2JqZWN0cyBpbiBhIHBhY2tmaWxlLCBidXQgdGhlcmUKKyAgIHdlcmUgYSBoYW5kZnVsIG9mIHBsYWNlcyB0aGF0IHVzZWQgInVuc2lnbmVkIGxvbmciIHRvIGhvbGQgdGhhdAorICAgdmFsdWUsIGxlYWRpbmcgdG8gYW4gdW5pbnRlbmRlZCB0cnVuY2F0aW9uLgorCisgKiBSZWNlbnQgdXBkYXRlIHRvICJnaXQgZGFlbW9uIiB0cmllcyB0byBlbmFibGUgdGhlIHNvY2tldC1sZXZlbAorICAgS0VFUEFMSVZFLCBidXQgd2hlbiBpdCBpcyBzcGF3bmVkIHZpYSBpbmV0ZCwgdGhlIHN0YW5kYXJkIGlucHV0CisgICBmaWxlIGRlc2NyaXB0b3IgbWF5IG5vdCBuZWNlc3NhcmlseSBiZSBjb25uZWN0ZWQgdG8gYSBzb2NrZXQuCisgICBTdXBwcmVzcyBhbiBFTk9UU09DSyBlcnJvciBmcm9tIHNldHNvY2tvcHQoKS4KKworICogUmVjZW50IEZyZWVCU0Qgc3RvcHBlZCBtYWtpbmcgcGVybCBhdmFpbGFibGUgYXQgL3Vzci9iaW4vcGVybDsKKyAgIHN3aXRjaCB0aGUgZGVmYXVsdCB0aGUgYnVpbHQtaW4gcGF0aCB0byAvdXNyL2xvY2FsL2Jpbi9wZXJsIG9uIG5vdAorICAgdG9vIGFuY2llbnQgRnJlZUJTRCByZWxlYXNlcy4KKworICogImdpdCBjb21taXQgLS1oZWxwIiBzYWlkICItLW5vLXZlcmlmeSIgaXMgb25seSBhYm91dCBza2lwcGluZyB0aGUKKyAgIHByZS1jb21taXQgaG9vaywgYW5kIGZhaWxlZCB0byBzYXkgdGhhdCBpdCBhbHNvIHNraXBwZWQgdGhlCisgICBjb21taXQtbXNnIGhvb2suCisKKyAqICJnaXQgbWVyZ2UiIGluIEdpdCB2Mi45IHdhcyB0YXVnaHQgdG8gZm9yYmlkIG1lcmdpbmcgYW4gdW5yZWxhdGVkCisgICBsaW5lcyBvZiBoaXN0b3J5IGJ5IGRlZmF1bHQsIGJ1dCB0aGF0IGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcKKyAgIHRoZSAiLS1yZWpvaW4iIG1vZGUgb2YgImdpdCBzdWJ0cmVlIiAoaW4gY29udHJpYi8pIHdhbnRzIHRvIGRvLgorICAgImdpdCBzdWJ0cmVlIiBoYXMgYmVlbiB0YXVnaHQgdG8gdXNlIHRoZSAiLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIgorICAgb3B0aW9uIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0LgorCisgKiBUaGUgYnVpbGQgcHJvY2VkdXJlIGZvciAiZ2l0IHBlcnNpc3RlbnQtaHR0cHMiIGhlbHBlciAoaW4gY29udHJpYi8pCisgICBoYXMgYmVlbiB1cGRhdGVkIHNvIHRoYXQgaXQgY2FuIGJlIGJ1aWx0IHdpdGggbW9yZSByZWNlbnQgdmVyc2lvbnMKKyAgIG9mIEdvLgorCisgKiBUaGVyZSBpcyBhbiBvcHRpbWl6YXRpb24gdXNlZCBpbiAiZ2l0IGRpZmYgJHRyZWVBICR0cmVlQiIgdG8gYm9ycm93CisgICBhbiBhbHJlYWR5IGNoZWNrZWQtb3V0IGNvcHkgaW4gdGhlIHdvcmtpbmcgdHJlZSB3aGVuIGl0IGlzIGtub3duIHRvCisgICBiZSB0aGUgc2FtZSBhcyB0aGUgYmxvYiBiZWluZyBjb21wYXJlZCwgZXhwZWN0aW5nIHRoYXQgb3Blbi9tbWFwIG9mCisgICBzdWNoIGEgZmlsZSBpcyBmYXN0ZXIgdGhhbiByZWFkaW5nIGl0IGZyb20gdGhlIG9iamVjdCBzdG9yZSwgd2hpY2gKKyAgIGludm9sdmVzIGluZmxhdGluZyBhbmQgYXBwbHlpbmcgZGVsdGEuICBUaGlzIGhvd2V2ZXIga2lja2VkIGluIGV2ZW4KKyAgIHdoZW4gdGhlIGNoZWNrZWQtb3V0IGNvcHkgbmVlZHMgdG8gZ28gdGhyb3VnaCB0aGUgY29udmVydC10by1naXQKKyAgIGNvbnZlcnNpb24gKGluY2x1ZGluZyB0aGUgY2xlYW4gZmlsdGVyKSwgd2hpY2ggZGVmZWF0cyB0aGUgd2hvbGUKKyAgIHBvaW50IG9mIHRoZSBvcHRpbWl6YXRpb24uICBUaGUgb3B0aW1pemF0aW9uIGhhcyBiZWVuIGRpc2FibGVkIHdoZW4KKyAgIHRoZSBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeS4KKworICogImdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPWV4dGVuZGVkIGxvZyAtLWJhc2ljLXJlZ2V4cCIgbWlzYmVoYXZlZAorICAgYmVjYXVzZSB0aGUgaW50ZXJuYWwgQVBJIHRvIGFjY2VzcyB0aGUgZ3JlcCBtYWNoaW5lcnkgd2FzIG5vdAorICAgZGVzaWduZWQgd2VsbC4KKworICogV2luZG93cyBwb3J0IHdhcyBmYWlsaW5nIHNvbWUgdGVzdHMgaW4gdDQxMzAsIGR1ZSB0byB0aGUgbGFjayBvZgorICAgaW51bSBpbiB0aGUgcmV0dXJuZWQgdmFsdWVzIGJ5IGl0cyBsc3RhdCgyKSBlbXVsYXRpb24uCisKKyAqIFRoZSByZWZsb2cgb3V0cHV0IGZvcm1hdCBpcyBkb2N1bWVudGVkIGJldHRlciwgYW5kIGEgbmV3IGZvcm1hdAorICAgLS1kYXRlPXVuaXggdG8gcmVwb3J0IHRoZSBzZWNvbmRzLXNpbmNlLWVwb2NoICh3aXRob3V0IHRpbWV6b25lKQorICAgaGFzIGJlZW4gYWRkZWQuCisgICAobWVyZ2UgNDQyZjZmZCBqay9yZWZsb2ctZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZnRvb2wgPHBhdGhzPi4uLiIgc3RhcnRlZCBpbiBhIHN1YmRpcmVjdG9yeSBmYWlsZWQgdG8KKyAgIGludGVycHJldCB0aGUgcGF0aHMgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnksIHdoaWNoIGhhcyBiZWVuCisgICBmaXhlZC4KKworICogVGhlIGNoYXJhY3RlcnMgaW4gdGhlIGxhYmVsIHNob3duIGZvciB0YWdzL3JlZnMgZm9yIGNvbW1pdHMgaW4KKyAgICJnaXR3ZWIiIG91dHB1dCBhcmUgbm93IHByb3Blcmx5IGVzY2FwZWQgZm9yIHByb3BlciBIVE1MIG91dHB1dC4KKworICogRnJlZUJTRCBjYW4gbGllIHdoZW4gYXNrZWQgbXRpbWUgb2YgYSBkaXJlY3RvcnksIHdoaWNoIG1hZGUgdGhlCisgICB1bnRyYWNrZWQgY2FjaGUgY29kZSB0byBmYWxsIGJhY2sgdG8gYSBzbG93LXBhdGgsIHdoaWNoIGluIHR1cm4KKyAgIGNhdXNlZCB0ZXN0cyBpbiB0NzA2MyB0byBmYWlsIGJlY2F1c2UgaXQgd2FudGVkIHRvIHZlcmlmeSB0aGUKKyAgIGJlaGF2aW91ciBvZiB0aGUgZmFzdC1wYXRoLgorCisgKiBTcXVlbGNoIGNvbXBpbGVyIHdhcm5pbmdzIGZvciBuZWRtYWxsb2MgKGluIGNvbXBhdC8pIGxpYnJhcnkuCisKKyAqIEEgc21hbGwgbWVtb3J5IGxlYWsgaW4gdGhlIGNvbW1hbmQgbGluZSBwYXJzaW5nIG9mICJnaXQgYmxhbWUiCisgICBoYXMgYmVlbiBwbHVnZ2VkLgorCisgKiBUaGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGhhc2htYXAgd2FzIHVuY2xlYXIgaWYgaGFzaG1hcF9lbnRyeQorICAgY2FuIGJlIHNhZmVseSBkaXNjYXJkZWQgd2l0aG91dCBhbnkgb3RoZXIgY29uc2lkZXJhdGlvbi4gIFN0YXRlCisgICB0aGF0IGl0IGlzIHNhZmUgdG8gZG8gc28uCisKKyAqIE5vdC1zby1yZWNlbnQgcmV3cml0ZSBvZiAiZ2l0IGFtIiB0aGF0IHN0YXJ0ZWQgbWFraW5nIGludGVybmFsCisgICBjYWxscyBpbnRvIHRoZSBjb21taXQgbWFjaGluZXJ5IGhhZCBhbiB1bmludGVuZGVkIHJlZ3Jlc3Npb24sIGluCisgICB0aGF0IG5vIG1hdHRlciBob3cgbWFueSBzZWNvbmRzIGl0IHRvb2sgdG8gYXBwbHkgbWFueSBwYXRjaGVzLCB0aGUKKyAgIHJlc3VsdGluZyBjb21taXR0ZXIgdGltZXN0YW1wIGZvciB0aGUgcmVzdWx0aW5nIGNvbW1pdHMgd2VyZSBhbGwKKyAgIHRoZSBzYW1lLgorCisgKiAiZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlIiBhbHJlYWR5IGhhZCBlbm91Z2ggbG9naWMgdG8gYWxsb3cKKyAgIGVuc3VyaW5nIHRoYXQgc3VjaCBhIHB1c2ggcmVzdWx0cyBpbiBjcmVhdGlvbiBvZiBhIHJlZiAoaS5lLiB0aGUKKyAgIHJlY2VpdmluZyBlbmQgZGlkIG5vdCBoYXZlIGFub3RoZXIgcHVzaCBmcm9tIHNpZGV3YXlzIHRoYXQgd291bGQgYmUKKyAgIGRpc2NhcmRlZCBieSBvdXIgZm9yY2UtcHVzaGluZyksIGJ1dCBkaWRuJ3QgZXhwb3NlIHRoaXMgcG9zc2liaWxpdHkKKyAgIHRvIHRoZSB1c2Vycy4gIEl0IGRvZXMgc28gbm93LgorICAgKG1lcmdlIDllZWQ0ZjMgamsvcHVzaC1mb3JjZS13aXRoLWxlYXNlLWNyZWF0aW9uIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIG1lY2hhbmlzbSB0byBsaW1pdCB0aGUgcGFjayB3aW5kb3cgbWVtb3J5IHNpemUsIHdoZW4gcGFja2luZyBpcworICAgZG9uZSB1c2luZyBtdWx0aXBsZSB0aHJlYWRzICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIGlzIHBlci10aHJlYWQsCisgICBidXQgdGhpcyB3YXMgbm90IGRvY3VtZW50ZWQgY2xlYXJseS4KKyAgIChtZXJnZSA5NTQxNzZjIG1zL2RvY3VtZW50LXBhY2std2luZG93LW1lbW9yeS1pcy1wZXItdGhyZWFkIGxhdGVyIHRvIG1haW50KS4KKworICogImltcG9ydC10YXJzIiBmYXN0LWltcG9ydCBzY3JpcHQgKGluIGNvbnRyaWIvKSB1c2VkIHRvIGlnbm9yZSBhCisgICBoYXJkbGluayB0YXJnZXQgYW5kIHJlcGxhY2VkIGl0IHdpdGggYW4gZW1wdHkgZmlsZSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZCB0byByZWNvcmQgdGhlIHNhbWUgYmxvYiBhcyB0aGUgb3RoZXIgZmlsZSB0aGUgaGFyZGxpbmsgaXMKKyAgIHNoYXJlZCB3aXRoLgorICAgKG1lcmdlIDA0ZTA4NjkganMvaW1wb3J0LXRhcnMtaGFyZGxpbmtzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtdiBkaXIgbm9uLWV4aXN0aW5nLWRpci8iIGRpZCBub3Qgd29yayBpbiBzb21lIGVudmlyb25tZW50cworICAgdGhlIHNhbWUgd2F5IGFzIGV4aXN0aW5nIG1haW5zdHJlYW0gcGxhdGZvcm1zLiAgVGhlIGNvZGUgbm93IG1vdmVzCisgICAiZGlyIiB0byAibm9uLWV4aXN0aW5nLWRpciIsIHdpdGhvdXQgcmVseWluZyBvbiByZW5hbWUoIkEiLCAiQi8iKQorICAgdGhhdCBzdHJpcHMgdGhlIHRyYWlsaW5nIHNsYXNoIG9mICcvJy4KKyAgIChtZXJnZSAxODlkMDM1IGpzL212LWRpci10by1uZXctZGlyZWN0b3J5IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICJ0LyIgaGllcmFyY2h5IGlzIHByb25lIHRvIGdldCBhbiB1bnVzdWFsIHBhdGhuYW1lOyAibWFrZSB0ZXN0IgorICAgaGFzIGJlZW4gdGF1Z2h0IHRvIG1ha2Ugc3VyZSB0aGV5IGRvIG5vdCBjb250YWluIHBhdGhzIHRoYXQgY2Fubm90CisgICBiZSBjaGVja2VkIG91dCBvbiBXaW5kb3dzIChhbmQgdGhlIG1lY2hhbmlzbSBjYW4gYmUgcmV1c2FibGUgdG8KKyAgIGNhdGNoIHBhdGhuYW1lcyB0aGF0IGFyZSBub3QgcG9ydGFibGUgdG8gb3RoZXIgcGxhdGZvcm1zIGFzIG5lZWQKKyAgIGFyaXNlcykuCisgICAobWVyZ2UgYzJjYWZkMyBqcy90ZXN0LWxpbnQtcGF0aG5hbWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuICJnaXQgbWVyZ2UtcmVjdXJzaXZlIiB3b3JrcyBvbiBoaXN0b3J5IHdpdGggbWFueSBjcmlzcy1jcm9zcworICAgbWVyZ2VzIGluICJ2ZXJib3NlIiBtb2RlLCB0aGUgbmFtZXMgdGhlIGNvbW1hbmQgYXNzaWducyB0byB0aGUKKyAgIHZpcnR1YWwgbWVyZ2UgYmFzZXMgY291bGQgaGF2ZSBvdmVyd3JpdHRlbiBlYWNoIG90aGVyIGJ5IHVuaW50ZW5kZWQKKyAgIHJldXNlIG9mIHRoZSBzYW1lIHBpZWNlIG9mIG1lbW9yeS4KKyAgIChtZXJnZSA1NDQ3YTc2IHJzL3B1bGwtc2lnbmVkLXRhZyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2hlY2tvdXQgLS1kZXRhY2ggPGJyYW5jaD4iIHVzZWQgdG8gZ2l2ZSB0aGUgc2FtZSBhZHZpY2UKKyAgIG1lc3NhZ2UgYXMgdGhhdCBpcyBpc3N1ZWQgd2hlbiAiZ2l0IGNoZWNrb3V0IDx0YWc+IiAob3IgYW55dGhpbmcKKyAgIHRoYXQgaXMgbm90IGEgYnJhbmNoIG5hbWUpIGlzIGdpdmVuLCBidXQgYXNraW5nIHdpdGggIi0tZGV0YWNoIiBpcworICAgYW4gZXhwbGljaXQgZW5vdWdoIHNpZ24gdGhhdCB0aGUgdXNlciBrbm93cyB3aGF0IGlzIGdvaW5nIG9uLiAgVGhlCisgICBhZHZpY2UgbWVzc2FnZSBoYXMgYmVlbiBzcXVlbGNoZWQgaW4gdGhpcyBjYXNlLgorICAgKG1lcmdlIDc3OWI4OGEgc2IvY2hlY2tvdXQtZXhwbGl0LWRldGFjaC1uby1hZHZpY2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBieSBkZWZhdWx0IGlnbm9yZXMgdGhlIGVycm9yIGV4aXQgZnJvbSB0aGUgYmFja2VuZAorICAgY29tbWFuZHMgaXQgc3Bhd25zLCBiZWNhdXNlIG9mdGVuIHRoZXkgc2lnbmFsIHRoYXQgdGhleSBmb3VuZAorICAgZGlmZmVyZW5jZXMgYnkgZXhpdGluZyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzIGNvZGUganVzdCBsaWtlICJkaWZmIgorICAgZG9lczsgdGhlIGV4aXQgc3RhdHVzIGNvZGVzIDEyNiBhbmQgYWJvdmUgaG93ZXZlciBhcmUgc3BlY2lhbCBpbgorICAgdGhhdCB0aGV5IGFyZSB1c2VkIHRvIHNpZ25hbCB0aGF0IHRoZSBjb21tYW5kIGlzIG5vdCBleGVjdXRhYmxlLAorICAgZG9lcyBub3QgZXhpc3QsIG9yIGtpbGxlZCBieSBhIHNpZ25hbC4gICJnaXQgZGlmZnRvb2wiIGhhcyBiZWVuCisgICB0YXVnaHQgdG8gbm90aWNlIHRoZXNlIGV4aXQgc3RhdHVzIGNvZGVzLgorICAgKG1lcmdlIDQ1YTRmNWQgamsvZGlmZnRvb2wtY29tbWFuZC1ub3QtZm91bmQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPbiBXaW5kb3dzLCBoZWxwLmJyb3dzZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB1c2VkIHRvIGJlIGlnbm9yZWQsCisgICB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNmRiNTk2NyBqcy9uby1odG1sLWJ5cGFzcy1vbi13aW5kb3dzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICJnaXQgLWMgdmFyWz12YWxdIGNtZCIgZmFjaWxpdHkgdG8gYXBwZW5kIGEgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUgZGVmaW5pdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBzZWFyY2ggb3JkZXIgd2FzIGRlc2NyaWJlZCBpbgorICAgZ2l0KDEpIG1hbnVhbCBwYWdlLCBidXQgbm90IGluIGdpdC1jb25maWcoMSksIHdoaWNoIHdhcyBtb3JlIGxpa2VseQorICAgcGxhY2UgZm9yIHBlb3BsZSB0byBsb29rIGZvciB3aGVuIHRoZXkgYXNrICJjYW4gSSBtYWtlIGEgb25lLXNob3QKKyAgIG92ZXJyaWRlLCBhbmQgaWYgc28gaG93PyIKKyAgIChtZXJnZSBhZTFmNzA5IGRnL2RvY3VtZW50LWdpdC1jLWluLWdpdC1jb25maWctZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHRlbXBmaWxlIChoZW5jZSBpdHMgdXNlciBsb2NrZmlsZSkgQVBJIGxldHMgdGhlIGNhbGxlciB0byBvcGVuCisgICBhIGZpbGUgZGVzY3JpcHRvciB0byBhIHRlbXBvcmFyeSBmaWxlLCB3cml0ZSBpbnRvIGl0IGFuZCB0aGVuCisgICBmaW5hbGl6ZSBpdCBieSBmaXJzdCBjbG9zaW5nIHRoZSBmaWxlaGFuZGxlIGFuZCB0aGVuIGVpdGhlcgorICAgcmVtb3Zpbmcgb3IgcmVuYW1pbmcgdGhlIHRlbXBvcmFyeSBmaWxlLiAgV2hlbiB0aGUgcHJvY2VzcyBzcGF3bnMgYQorICAgc3VicHJvY2VzcyBhZnRlciBvYnRhaW5pbmcgdGhlIGZpbGUgZGVzY3JpcHRvciwgYW5kIGlmIHRoZQorICAgc3VicHJvY2VzcyBoYXMgbm90IGV4aXRlZCB3aGVuIHRoZSBhdHRlbXB0IHRvIHJlbW92ZSBvciByZW5hbWUgaXMKKyAgIG1hZGUsIHRoZSBsYXN0IHN0ZXAgZmFpbHMgb24gV2luZG93cywgYmVjYXVzZSB0aGUgc3VicHJvY2VzcyBoYXMKKyAgIHRoZSBmaWxlIGRlc2NyaXB0b3Igc3RpbGwgb3Blbi4gIE9wZW4gdGVtcGZpbGUgd2l0aCBPX0NMT0VYRUMgZmxhZworICAgdG8gYXZvaWQgdGhpcyAob24gV2luZG93cywgdGhpcyBpcyBtYXBwZWQgdG8gT19OT0lOSEVSSVQpLgorICAgKG1lcmdlIDA1ZDFlZDYgYncvbWluZ3ctYXZvaWQtaW5oZXJpdGluZy1mZC10by1sb2NrZmlsZSBsYXRlciB0byBtYWludCkuCisKKyAqIENvcnJlY3QgYW4gYWdlLW9sZCBjYWxjbyAoaXMgdGhhdCBhIHR5cG8tbGlrZSB3b3JkIGZvciBjYWxjKQorICAgaW4gdGhlIGRvY3VtZW50YXRpb24uCisgICAobWVyZ2UgNzg0MWM0OCBscy9wYWNrZXQtbGluZS1wcm90b2NvbC1kb2MtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgbWlub3IgY2xlYW4tdXBzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMKKyAgIChtZXJnZSAwMmE4Y2ZhIHJzL21lcmdlLWFkZC1zdHJhdGVnaWVzLXNpbXBsaWZpY2F0aW9uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhZjQ5NDFkIHJzL21lcmdlLXJlY3Vyc2l2ZS1zdHJpbmctbGlzdC1pbml0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxZWI0N2YxIHJzL3VzZS1zdHJidWYtYWRkLXVuaXF1ZS1hYmJyZXYgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGRkZDBiZmEgamsvdGlnaHRlbi1hbGxvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZWNmMzBiMiBycy9tYWlsaW5mby1saWIgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDBlYjc1Y2Ugc2cvcmVmbG9nLXBhc3Qtcm9vdCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDM2OTUyMyBodi9kb2MtY29tbWl0LXJlZmVyZW5jZS1zdHlsZSBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0NjJmNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4xLnR4dApAQCAtMCwwICsxLDEzMSBAQAorR2l0IHYyLjEwLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMAorLS0tLS0tLS0tLS0tLS0tLS0KKworICogQ2xhcmlmeSB2YXJpb3VzIHdheXMgdG8gc3BlY2lmeSB0aGUgInJldmlzaW9uIHJhbmdlcyIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uLgorCisgKiAiZGlmZi1oaWdobGlnaHQiIHNjcmlwdCAoaW4gY29udHJpYi8pIGxlYXJuZWQgdG8gd29yayBiZXR0ZXIgd2l0aAorICAgImdpdCBsb2cgLXAgLS1ncmFwaCIgb3V0cHV0LgorCisgKiBUaGUgdGVzdCBmcmFtZXdvcmsgbGVmdCB0aGUgbnVtYmVyIG9mIHRlc3RzIGFuZCBzdWNjZXNzL2ZhaWx1cmUKKyAgIGNvdW50IGluIHRoZSB0L3Rlc3QtcmVzdWx0cyBkaXJlY3RvcnksIGtleWVkIGJ5IHRoZSBuYW1lIG9mIHRoZQorICAgdGVzdCBzY3JpcHQgcGx1cyB0aGUgcHJvY2VzcyBJRC4gIFRoZSBsYXR0ZXIgaG93ZXZlciB0dXJuZWQgb3V0IG5vdAorICAgdG8gc2VydmUgYW55IHVzZWZ1bCBwdXJwb3NlLiAgVGhlIHByb2Nlc3MgSUQgcGFydCBvZiB0aGUgZmlsZW5hbWUKKyAgIGhhcyBiZWVuIHJlbW92ZWQuCisKKyAqIEhhdmluZyBhIHN1Ym1vZHVsZSB3aG9zZSAiLmdpdCIgcmVwb3NpdG9yeSBpcyBzb21laG93IGNvcnJ1cHQKKyAgIGNhdXNlZCBhIGZldyBjb21tYW5kcyB0aGF0IHJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIGxvb3AgZm9yZXZlci4KKworICogImdpdCBzeW1ib2xpYy1yZWYgLWQgSEVBRCIgaGFwcGlseSByZW1vdmVzIHRoZSBzeW1ib2xpYyByZWYsIGJ1dAorICAgdGhlIHJlc3VsdGluZyByZXBvc2l0b3J5IGJlY29tZXMgYW4gaW52YWxpZCBvbmUuICBUZWFjaCB0aGUgY29tbWFuZAorICAgdG8gZm9yYmlkIHJlbW92YWwgb2YgSEVBRC4KKworICogQSB0ZXN0IHNwYXduZWQgYSBzaG9ydC1saXZlZCBiYWNrZ3JvdW5kIHByb2Nlc3MsIHdoaWNoIHNvbWV0aW1lcworICAgcHJldmVudGVkIHRoZSB0ZXN0IGRpcmVjdG9yeSBmcm9tIGdldHRpbmcgcmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoZQorICAgc2NyaXB0IG9uIHNvbWUgcGxhdGZvcm1zLgorCisgKiBVcGRhdGUgYSBmZXcgdGVzdHMgdGhhdCB1c2VkIHRvIHVzZSBHSVRfQ1VSTF9WRVJCT1NFIHRvIHVzZSB0aGUKKyAgIG5ld2VyIEdJVF9UUkFDRV9DVVJMLgorCisgKiBVcGRhdGUgSmFwYW5lc2UgdHJhbnNsYXRpb24gZm9yICJnaXQtZ3VpIi4KKworICogImdpdCBmZXRjaCBodHRwOjovc2l0ZS9wYXRoIiBkaWQgbm90IGRpZSBjb3JyZWN0bHkgYW5kIHNlZ2ZhdWx0ZWQKKyAgIGluc3RlYWQuCisKKyAqICJnaXQgY29tbWl0LXRyZWUiIHN0b3BwZWQgcmVhZGluZyBjb21taXQuZ3Bnc2lnbiBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZSB0aGF0IHdhcyBtZWFudCBmb3IgUG9yY2VsYWluICJnaXQgY29tbWl0IiBpbiBHaXQgMi45OyB3ZQorICAgZm9yZ290IHRvIHVwZGF0ZSAiZ2l0IGd1aSIgdG8gbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiB0byBtYXRjaAorICAgdGhpcyBjaGFuZ2UuCisKKyAqICJnaXQgbG9nIC0tY2hlcnJ5LXBpY2siIHVzZWQgdG8gaW5jbHVkZSBtZXJnZSBjb21taXRzIGFzIGNhbmRpZGF0ZXMKKyAgIHRvIGJlIG1hdGNoZWQgdXAgd2l0aCBvdGhlciBjb21taXRzLCByZXN1bHRpbmcgYSBsb3Qgb2Ygd2FzdGVkIHRpbWUuCisgICBUaGUgcGF0Y2gtaWQgZ2VuZXJhdGlvbiBsb2dpYyBoYXMgYmVlbiB1cGRhdGVkIHRvIGlnbm9yZSBtZXJnZXMgdG8KKyAgIGF2b2lkIHRoZSB3YXN0YWdlLgorCisgKiBUaGUgaHR0cCB0cmFuc3BvcnQgKHdpdGggY3VybC1tdWx0aSBvcHRpb24sIHdoaWNoIGlzIHRoZSBkZWZhdWx0CisgICB0aGVzZSBkYXlzKSBmYWlsZWQgdG8gcmVtb3ZlIGN1cmwtZWFzeSBoYW5kbGUgZnJvbSBhIGN1cmxtIHNlc3Npb24sCisgICB3aGljaCBsZWQgdG8gdW5uZWNlc3NhcnkgQVBJIGZhaWx1cmVzLgorCisgKiAiZ2l0IGRpZmYgLVciIG91dHB1dCBuZWVkcyB0byBleHRlbmQgdGhlIGNvbnRleHQgYmFja3dhcmQgdG8KKyAgIGluY2x1ZGUgdGhlIGhlYWRlciBsaW5lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGFuZCBhbHNvIGZvcndhcmQgdG8KKyAgIGluY2x1ZGUgdGhlIGJvZHkgb2YgdGhlIGVudGlyZSBjdXJyZW50IGZ1bmN0aW9uIHVwIHRvIHRoZSBoZWFkZXIKKyAgIGxpbmUgb2YgdGhlIG5leHQgb25lLiAgVGhpcyBwcm9jZXNzIG1heSBoYXZlIHRvIG1lcmdlIHRvIGFkamFjZW50CisgICBodW5rcywgYnV0IHRoZSBjb2RlIGZvcmdvdCB0byBkbyBzbyBpbiBzb21lIGNhc2VzLgorCisgKiBQZXJmb3JtYW5jZSB0ZXN0cyBkb25lIHZpYSAidC9wZXJmIiBkaWQgbm90IHVzZSB0aGUgc2FtZSBzZXQgb2YKKyAgIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaWYgdGhlIHVzZXIgcmVsaWVkIG9uIGF1dG9jb25mIGdlbmVyYXRlZAorICAgY29uZmlndXJhdGlvbi4KKworICogImdpdCBmb3JtYXQtcGF0Y2ggLS1iYXNlPS4uLiIgZmVhdHVyZSB0aGF0IHdhcyByZWNlbnRseSBhZGRlZAorICAgc2hvd2VkIHRoZSBiYXNlIGNvbW1pdCBpbmZvcm1hdGlvbiBhZnRlciAiLS0gIiBlLW1haWwgc2lnbmF0dXJlCisgICBsaW5lLCB3aGljaCB0dXJuZWQgb3V0IHRvIGJlIGluY29udmVuaWVudC4gIFRoZSBiYXNlIGluZm9ybWF0aW9uCisgICBoYXMgYmVlbiBtb3ZlZCBhYm92ZSB0aGUgc2lnbmF0dXJlIGxpbmUuCisKKyAqIEV2ZW4gd2hlbiAiZ2l0IHB1bGwgLS1yZWJhc2U9cHJlc2VydmUiIChhbmQgdGhlIHVuZGVybHlpbmcgImdpdAorICAgcmViYXNlIC0tcHJlc2VydmUiKSBjYW4gY29tcGxldGUgd2l0aG91dCBjcmVhdGluZyBhbnkgbmV3IGNvbW1pdAorICAgKGkuZS4gZmFzdC1mb3J3YXJkcyksIGl0IHN0aWxsIGluc2lzdGVkIG9uIGhhdmluZyBhIHVzYWJsZSBpZGVudAorICAgaW5mb3JtYXRpb24gKHJlYWQ6IHVzZXIuZW1haWwgaXMgc2V0IGNvcnJlY3RseSksIHdoaWNoIHdhcyBsZXNzCisgICB0aGFuIG5pY2UuICBBcyB0aGUgdW5kZXJseWluZyBjb21tYW5kcyB1c2VkIGluc2lkZSAiZ2l0IHJlYmFzZSIKKyAgIHdvdWxkIGZhaWwgd2l0aCBhIG1vcmUgbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlIGFuZCBhZHZpY2UgdGV4dAorICAgd2hlbiB0aGUgYm9ndXMgaWRlbnQgbWF0dGVycywgdGhpcyBleHRyYSBjaGVjayB3YXMgcmVtb3ZlZC4KKworICogImdpdCBnYyAtLWFnZ3Jlc3NpdmUiIHVzZWQgdG8gbGltaXQgdGhlIGRlbHRhLWNoYWluIGxlbmd0aCB0byAyNTAsCisgICB3aGljaCBpcyB3YXkgdG9vIGRlZXAgZm9yIGdhaW5pbmcgYWRkaXRpb25hbCBzcGFjZSBzYXZpbmdzIGFuZCBpcworICAgZGV0cmltZW50YWwgZm9yIHJ1bnRpbWUgcGVyZm9ybWFuY2UuICBUaGUgbGltaXQgaGFzIGJlZW4gcmVkdWNlZCB0bworICAgNTAuCisKKyAqIERvY3VtZW50YXRpb24gZm9yIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdG8gY29udHJvbCB1c2UKKyAgIG9mIGNvbG9yIChsaWtlIGBjb2xvci5ncmVwYCkgc2FpZCB0aGF0IHRoZWlyIGRlZmF1bHQgdmFsdWUgaXMKKyAgICdmYWxzZScsIGluc3RlYWQgb2Ygc2F5aW5nIHRoZWlyIGRlZmF1bHQgaXMgdGFrZW4gZnJvbSBgY29sb3IudWlgLgorICAgV2hlbiB3ZSB1cGRhdGVkIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBjb2xvci51aSBmcm9tICdmYWxzZScgdG8KKyAgICdhdXRvJyBxdWl0ZSBhIHdoaWxlIGFnbywgYWxsIG9mIHRoZW0gYnJva2UuICBUaGlzIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIEEgc2hlbGwgc2NyaXB0IGV4YW1wbGUgaW4gY2hlY2stcmVmLWZvcm1hdCBkb2N1bWVudGF0aW9uIGhhcyBiZWVuCisgICBmaXhlZC4KKworICogImdpdCBjaGVja291dCA8d29yZD4iIGRvZXMgbm90IGZvbGxvdyB0aGUgdXN1YWwgZGlzYW1iaWd1YXRpb24KKyAgIHJ1bGVzIHdoZW4gdGhlIDx3b3JkPiBjYW4gYmUgYm90aCBhIHJldiBhbmQgYSBwYXRoLCB0byBhbGxvdworICAgY2hlY2tpbmcgb3V0IGEgYnJhbmNoICdmb28nIGluIGEgcHJvamVjdCB0aGF0IGhhcHBlbnMgdG8gaGF2ZSBhCisgICBmaWxlICdmb28nIGluIHRoZSB3b3JraW5nIHRyZWUgd2l0aG91dCBoYXZpbmcgdG8gZGlzYW1iaWd1YXRlLgorICAgVGhpcyB3YXMgcG9vcmx5IGRvY3VtZW50ZWQgYW5kIHRoZSBjaGVjayB3YXMgaW5jb3JyZWN0IHdoZW4gdGhlCisgICBjb21tYW5kIHdhcyBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeS4KKworICogU29tZSBjb2RlcGF0aHMgaW4gImdpdCBkaWZmIiB1c2VkIHJlZ2V4ZWMoMykgb24gYSBidWZmZXIgdGhhdCB3YXMKKyAgIG1tYXAoMillZCwgd2hpY2ggbWF5IG5vdCBoYXZlIGEgdGVybWluYXRpbmcgTlVMLCBsZWFkaW5nIHRvIGEgcmVhZAorICAgYmV5b25kIHRoZSBlbmQgb2YgdGhlIG1hcHBlZCByZWdpb24uICBUaGlzIHdhcyBmaXhlZCBieSBpbnRyb2R1Y2luZworICAgYSByZWdleGVjX2J1ZigpIGhlbHBlciB0aGF0IHRha2VzIGEgPHB0cixsZW4+IHBhaXIgd2l0aCBSRUdfU1RBUlRFTkQKKyAgIGV4dGVuc2lvbi4KKworICogVGhlIHByb2NlZHVyZSB0byBidWlsZCBHaXQgb24gTWFjIE9TIFggZm9yIFRyYXZpcyBDSSBoYXJkY29kZWQgdGhlCisgICBpbnRlcm5hbCBkaXJlY3Rvcnkgc3RydWN0dXJlIHdlIGFzc3VtZWQgSG9tZUJyZXcgdXNlcywgd2hpY2ggd2FzIGEKKyAgIG5vLW5vLiAgVGhlIHByb2NlZHVyZSBoYXMgYmVlbiB1cGRhdGVkIHRvIGFzayBIb21lQnJldyB0aGluZ3Mgd2UKKyAgIG5lZWQgdG8ga25vdyB0byBmaXggdGhpcy4KKworICogV2hlbiAiZ2l0IHJlYmFzZSAtaSIgaXMgZ2l2ZW4gYSBicm9rZW4gaW5zdHJ1Y3Rpb24sIGl0IHRvbGQgdGhlCisgICB1c2VyIHRvIGZpeCBpdCB3aXRoICItLWVkaXQtdG9kbyIsIGJ1dCBkaWRuJ3Qgc2F5IHdoYXQgdGhlIHN0ZXAKKyAgIGFmdGVyIHRoYXQgd2FzIChpLmUuICItLWNvbnRpbnVlIikuCisKKyAqICJnaXQgYWRkIC0tY2htb2Q9K3giIGFkZGVkIHJlY2VudGx5IGxhY2tlZCBkb2N1bWVudGF0aW9uLCB3aGljaCBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGFkZCAtLWNobW9kPSt4IDxwYXRoc3BlYz4iIGFkZGVkIHJlY2VudGx5IG9ubHkgdG9nZ2xlZCB0aGUKKyAgIGV4ZWN1dGFibGUgYml0IGZvciBwYXRocyB0aGF0IGFyZSBlaXRoZXIgbmV3IG9yIG1vZGlmaWVkLiBUaGlzIGhhcworICAgYmVlbiBjb3JyZWN0ZWQgdG8gZmxpcCB0aGUgZXhlY3V0YWJsZSBiaXQgZm9yIGFsbCBwYXRocyB0aGF0IG1hdGNoCisgICB0aGUgZ2l2ZW4gcGF0aHNwZWMuCisKKyAqICJnaXQgcGFjay1vYmplY3RzIC0taW5jbHVkZS10YWciIHdhcyB0YXVnaHQgdGhhdCB3aGVuIHdlIGtub3cgdGhhdAorICAgd2UgYXJlIHNlbmRpbmcgYW4gb2JqZWN0IEMsIHdlIHdhbnQgYSB0YWcgQiB0aGF0IGRpcmVjdGx5IHBvaW50cyBhdAorICAgQyBidXQgYWxzbyBhIHRhZyBBIHRoYXQgcG9pbnRzIGF0IHRoZSB0YWcgQi4gIFdlIHVzZWQgdG8gbWlzcyB0aGUKKyAgIGludGVybWVkaWF0ZSB0YWcgQiBpbiBzb21lIGNhc2VzLgorCisgKiBEb2N1bWVudGF0aW9uIGFyb3VuZCB0b29scyB0byBpbXBvcnQgZnJvbSBDVlMgd2FzIGZhaXJseSBvdXRkYXRlZC4KKworICogSW4gdGhlIGNvZGVwYXRoIHRoYXQgY29tZXMgdXAgd2l0aCB0aGUgaG9zdG5hbWUgdG8gYmUgdXNlZCBpbiBhbgorICAgZS1tYWlsIHdoZW4gdGhlIHVzZXIgZGlkbid0IHRlbGwgdXMsIHdlIGxvb2tlZCBhdCBhaV9jYW5vbm5hbWUKKyAgIGZpZWxkIGluIHN0cnVjdCBhZGRyaW5mbyB3aXRob3V0IG1ha2luZyBzdXJlIGl0IGlzIG5vdCBOVUxMIGZpcnN0LgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiZDMzMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4yLnR4dApAQCAtMCwwICsxLDExMSBAQAorR2l0IHYyLjEwLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMC4xCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBjb2RlIHRoYXQgcGFyc2VzIHRoZSBmb3JtYXQgcGFyYW1ldGVyIG9mIGZvci1lYWNoLXJlZiBjb21tYW5kCisgICBoYXMgc2VlbiBhIG1pY3JvLW9wdGltaXphdGlvbi4KKworICogVGhlICJncmFwaCIgQVBJIHVzZWQgaW4gImdpdCBsb2cgLS1ncmFwaCIgbWlzY291bnRlZCB0aGUgbnVtYmVyIG9mCisgICBvdXRwdXQgY29sdW1ucyBjb25zdW1lZCBzbyBmYXIgd2hlbiBkcmF3aW5nIGEgcGFkZGluZyBsaW5lLCB3aGljaAorICAgaGFzIGJlZW4gZml4ZWQ7IHRoaXMgZGlkIG5vdCBhZmZlY3QgYW55IGV4aXN0aW5nIGNvZGUgYXMgbm9ib2R5CisgICB0cmllZCB0byB3cml0ZSBhbnl0aGluZyBhZnRlciB0aGUgcGFkZGluZyBvbiBzdWNoIGEgbGluZSwgdGhvdWdoLgorCisgKiBBbG1vc3QgZXZlcnlib2R5IHVzZXMgREVGQVVMVF9BQkJSRVYgdG8gcmVmZXIgdG8gdGhlIGRlZmF1bHQKKyAgIHNldHRpbmcgZm9yIHRoZSBhYmJyZXZpYXRpb24sIGJ1dCAiZ2l0IGJsYW1lIiBwZWVrZWQgaW50bworICAgdW5kZXJseWluZyB2YXJpYWJsZSBieXBhc3NpbmcgdGhlIG1hY3JvIGZvciBubyBnb29kIHJlYXNvbi4KKworICogRG9jIHVwZGF0ZSB0byBjbGFyaWZ5IHdoYXQgImxvZyAtMyAtLXJldmVyc2UiIGRvZXMuCisKKyAqIEFuIGF1dGhvciBuYW1lLCB0aGF0IHNwZWxsZWQgYSBiYWNrc2xhc2gtcXVvdGVkIGRvdWJsZSBxdW90ZSBpbiB0aGUKKyAgIGh1bWFuIHJlYWRhYmxlIHBhcnQgIk15IFwiZG91YmxlIHF1b3RlZFwiIG5hbWUiLCB3YXMgbm90IHVucXVvdGVkCisgICBjb3JyZWN0bHkgd2hpbGUgYXBwbHlpbmcgYSBwYXRjaCBmcm9tIGEgcGllY2Ugb2YgZS1tYWlsLgorCisgKiBUaGUgb3JpZ2luYWwgY29tbWFuZCBsaW5lIHN5bnRheCBmb3IgImdpdCBtZXJnZSIsIHdoaWNoIHdhcyAiZ2l0CisgICBtZXJnZSA8bXNnPiBIRUFEIDxwYXJlbnQ+Li4uIiwgaGFzIGJlZW4gZGVwcmVjYXRlZCBmb3IgcXVpdGUgc29tZQorICAgdGltZSwgYW5kICJnaXQgZ3VpIiB3YXMgdGhlIGxhc3QgaW4tdHJlZSB1c2VyIG9mIHRoZSBzeW50YXguICBUaGlzCisgICBpcyBmaW5hbGx5IGZpeGVkLCBzbyB0aGF0IHdlIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCB0aGUgZGVwcmVjYXRpb24uCisKKyAqIENvZGVwYXRocyB0aGF0IHJlYWQgZnJvbSBhbiBvbi1kaXNrIGxvb3NlIG9iamVjdCB3ZXJlIHRvbyBsb29zZSBpbgorICAgdmFsaWRhdGluZyB3aGF0IHRoZXkgYXJlIHJlYWRpbmcgaXMgYSBwcm9wZXIgb2JqZWN0IGZpbGUgYW5kCisgICBzb21ldGltZXMgcmVhZCBwYXN0IHRoZSBkYXRhIHRoZXkgcmVhZCBmcm9tIHRoZSBkaXNrLCB3aGljaCBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLiAgSC90IHRvIEd1c3Rhdm8gR3JpZWNvIGZvciByZXBvcnRpbmcuCisKKyAqICJnaXQgd29ya3RyZWUiLCBldmVuIHRob3VnaCBpdCB1c2VkIHRoZSBkZWZhdWx0X2FiYnJldiBzZXR0aW5nIHRoYXQKKyAgIG91Z2h0IHRvIGJlIGFmZmVjdGVkIGJ5IGNvcmUuYWJicmV2IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGlnbm9yZWQKKyAgIHRoZSB2YXJpYWJsZSBzZXR0aW5nLiAgVGhlIGNvbW1hbmQgaGFzIGJlZW4gdGF1Z2h0IHRvIHJlYWQgdGhlCisgICBkZWZhdWx0IHNldCBvZiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0byBjb3JyZWN0IHRoaXMuCisKKyAqIEEgbG93LWxldmVsIGZ1bmN0aW9uIHZlcmlmeV9wYWNrZmlsZSgpIHdhcyBtZWFudCB0byBzaG93IGVycm9ycworICAgdGhhdCB3ZXJlIGRldGVjdGVkIHdpdGhvdXQgZHlpbmcgaXRzZWxmLCBidXQgdW5kZXIgc29tZSBjb25kaXRpb25zCisgICBpdCBkaWRuJ3QgYW5kIGRpZWQgaW5zdGVhZCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIFdoZW4gImdpdCBmZXRjaCIgdHJpZXMgdG8gZmluZCB3aGVyZSB0aGUgaGlzdG9yeSBvZiB0aGUgcmVwb3NpdG9yeQorICAgaXQgcnVucyBpbiBoYXMgZGl2ZXJnZWQgZnJvbSB3aGF0IHRoZSBvdGhlciBzaWRlIGhhcywgaXQgaGFzIGEKKyAgIG1lY2hhbmlzbSB0byBhdm9pZCBkaWdnaW5nIHRvbyBkZWVwIGludG8gaXJyZWxldmFudCBzaWRlIGJyYW5jaGVzLgorICAgVGhpcyBob3dldmVyIGRpZCBub3Qgd29yayB3ZWxsIG92ZXIgdGhlICJzbWFydC1odHRwIiB0cmFuc3BvcnQgZHVlCisgICB0byBhIGRlc2lnbiBidWcsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBXaGVuIHdlIHN0YXJ0ZWQgY1VSTCB0byB0YWxrIHRvIGltYXAgc2VydmVyIHdoZW4gYSBuZXcgZW5vdWdoCisgICB2ZXJzaW9uIG9mIGNVUkwgbGlicmFyeSBpcyBhdmFpbGFibGUsIHdlIGZvcmdvdCB0byBleHBsaWNpdGx5IGFkZAorICAgaW1hcChzKTovLyBiZWZvcmUgdGhlIGRlc3RpbmF0aW9uLiAgVG8gc29tZSBmb2xrcywgdGhhdCBkaWRuJ3Qgd29yaworICAgYW5kIHRoZSBsaWJyYXJ5IHRyaWVkIHRvIG1ha2UgSFRUUChzKSByZXF1ZXN0cyBpbnN0ZWFkLgorCisgKiBUaGUgLi9jb25maWd1cmUgc2NyaXB0IGdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyB3YXMgdGF1Z2h0IGhvdworICAgdG8gZGV0ZWN0IHN1cHBvcnQgb2YgU1NMIGJ5IGxpYmN1cmwgYmV0dGVyLgorCisgKiBodHRwLmVtcHR5YXV0aCBjb25maWd1cmF0aW9uIGlzIGEgd2F5IHRvIGFsbG93IGFuIGVtcHR5IHVzZXJuYW1lIHRvCisgICBwYXNzIHdoZW4gYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUgdXNpbmcgbWVjaGFuaXNtcyBsaWtlCisgICBLZXJiZXJvcy4gIFdlIHRvb2sgYW4gdW5zcGVjaWZpZWQgKE5VTEwpIHVzZXJuYW1lIGFuZCBzZW50ICI6IgorICAgKGkuZS4gbm8gdXNlcm5hbWUsIG5vIHBhc3N3b3JkKSB0byBDVVJMT1BUX1VTRVJQV0QsIGJ1dCBkaWQgbm90IGRvCisgICB0aGUgc2FtZSB3aGVuIHRoZSB1c2VybmFtZSBpcyBleHBsaWNpdGx5IHNldCB0byBhbiBlbXB0eSBzdHJpbmcuCisKKyAqICJnaXQgY2xvbmUiIG9mIGEgbG9jYWwgcmVwb3NpdG9yeSBjYW4gYmUgZG9uZSBhdCB0aGUgZmlsZXN5c3RlbQorICAgbGV2ZWwsIGJ1dCB0aGUgY29kZXBhdGggZGlkIG5vdCBjaGVjayBlcnJvcnMgd2hpbGUgY29weWluZyBhbmQKKyAgIGFkanVzdGluZyB0aGUgZmlsZSB0aGF0IGxpc3RzIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzLgorCisgKiBEb2N1bWVudGF0aW9uIGZvciAiZ2l0IGNvbW1pdCIgd2FzIHVwZGF0ZWQgdG8gY2xhcmlmeSB0aGF0ICJjb21taXQKKyAgIC1wIDxwYXRocz4iIGFkZHMgdG8gdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGluZGV4IHRvIGNvbWUgdXAKKyAgIHdpdGggd2hhdCB0byBjb21taXQuCisKKyAqIEEgc3RyYXkgc3ltYm9saWMgbGluayBpbiAkR0lUX0RJUi9yZWZzLyBkaXJlY3RvcnkgY291bGQgbWFrZSBuYW1lCisgICByZXNvbHV0aW9uIGxvb3AgZm9yZXZlciwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgInN1Ym1vZHVsZS48bmFtZT4ucGF0aCIgc3RvcmVkIGluIC5naXRtb2R1bGVzIGlzIG5ldmVyIGNvcGllZAorICAgdG8gLmdpdC9jb25maWcgYW5kIHN1Y2ggYSBrZXkgaW4gLmdpdC9jb25maWcgaGFzIG5vIG1lYW5pbmcsIGJ1dAorICAgdGhlIGRvY3VtZW50YXRpb24gZGVzY3JpYmVkIGl0IGFuZCBzdWJtb2R1bGUuPG5hbWU+LnVybCBuZXh0IHRvCisgICBlYWNoIG90aGVyIGFzIGlmIGJvdGggYmVsb25nIHRvIC5naXQvY29uZmlnLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogUmVjZW50IGdpdCBhbGxvd3Mgc3VibW9kdWxlLjxuYW1lPi5icmFuY2ggdG8gdXNlIGEgc3BlY2lhbCB0b2tlbgorICAgIi4iIGluc3RlYWQgb2YgdGhlIGJyYW5jaCBuYW1lOyB0aGUgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiB1cGRhdGVkCisgICB0byBkZXNjcmliZSBpdC4KKworICogSW4gYSB3b3JrdHJlZSBjb25uZWN0ZWQgdG8gYSByZXBvc2l0b3J5IGVsc2V3aGVyZSwgY3JlYXRlZCB2aWEgImdpdAorICAgd29ya3RyZWUiLCAiZ2l0IGNoZWNrb3V0IiBhdHRlbXB0cyB0byBwcm90ZWN0IHVzZXJzIGZyb20gY29uZnVzaW9uCisgICBieSByZWZ1c2luZyB0byBjaGVjayBvdXQgYSBicmFuY2ggdGhhdCBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IGluCisgICBhbm90aGVyIHdvcmt0cmVlLiAgSG93ZXZlciwgdGhpcyBhbHNvIHByZXZlbnRlZCBjaGVja2luZyBvdXQgYQorICAgYnJhbmNoLCB3aGljaCBpcyBkZXNpZ25hdGVkIGFzIHRoZSBwcmltYXJ5IGJyYW5jaCBvZiBhIGJhcmUKKyAgIHJlcG9zaXRvcnksIGluIGEgd29ya3RyZWUgdGhhdCBpcyBjb25uZWN0ZWQgdG8gdGhlIGJhcmUKKyAgIHJlcG9zaXRvcnkuICBUaGUgY2hlY2sgaGFzIGJlZW4gY29ycmVjdGVkIHRvIGFsbG93IGl0LgorCisgKiAiZ2l0IHJlYmFzZSIgaW1tZWRpYXRlbHkgYWZ0ZXIgImdpdCBjbG9uZSIgZmFpbGVkIHRvIGZpbmQgdGhlIGZvcmsKKyAgIHBvaW50IGZyb20gdGhlIHVwc3RyZWFtLgorCisgKiBXaGVuIGZldGNoaW5nIGZyb20gYSByZW1vdGUgdGhhdCBoYXMgbWFueSB0YWdzIHRoYXQgYXJlIGlycmVsZXZhbnQKKyAgIHRvIGJyYW5jaGVzIHdlIGFyZSBmb2xsb3dpbmcsIHdlIHVzZWQgdG8gd2FzdGUgd2F5IHRvbyBtYW55IGN5Y2xlcworICAgd2hlbiBjaGVja2luZyBpZiB0aGUgb2JqZWN0IHBvaW50ZWQgYXQgYnkgYSB0YWcgKHRoYXQgd2UgYXJlIG5vdAorICAgZ29pbmcgdG8gZmV0Y2ghKSBleGlzdHMgaW4gb3VyIHJlcG9zaXRvcnkgdG9vIGNhcmVmdWxseS4KKworICogVGhlIFRyYXZpcyBDSSBjb25maWd1cmF0aW9uIHdlIHNoaXAgcmFuIHRoZSB0ZXN0cyB3aXRoIC0tdmVyYm9zZQorICAgb3B0aW9uIGJ1dCB0aGlzIHJpc2tzIG5vbi1UQVAgb3V0cHV0IHRoYXQgaGFwcGVucyB0byBiZSAib2siIHRvIGJlCisgICBtaXNpbnRlcnByZXRlZCBhcyBUQVAgc2lnbmFsbGluZyBhIHRlc3QgdGhhdCBwYXNzZWQuICBUaGlzIHJlc3VsdGVkCisgICBpbiB1bm5lY2Vzc2FyeSBmYWlsdXJlLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQgYnkgaW50cm9kdWNpbmcgYQorICAgbmV3IG1vZGUgdG8gcnVuIG91ciB0ZXN0cyBpbiB0aGUgdGVzdCBoYXJuZXNzIHRvIHNlbmQgdGhlIHZlcmJvc2UKKyAgIG91dHB1dCBzZXBhcmF0ZWx5IHRvIHRoZSBsb2cgZmlsZS4KKworICogU29tZSBBc2NpaURvYyBmb3JtYXR0ZXIgbWlzaGFuZGxlcyBhIGRpc3BsYXllZCBpbGx1c3RyYXRpb24gd2l0aAorICAgdGFicyBpbiBpdC4gIEFkanVzdCBhIGZldyBvZiB0aGVtIGluIG1lcmdlLWJhc2UgZG9jdW1lbnRhdGlvbiB0bworICAgd29yayBhcm91bmQgdGhlbS4KKworQWxzbyBjb250YWlucyBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNmEwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMy50eHQKQEAgLTAsMCArMSw1NSBAQAorR2l0IHYyLjEwLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMC4yCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEV4dHJhY3QgYSBzbWFsbCBoZWxwZXIgb3V0IG9mIHRoZSBmdW5jdGlvbiB0aGF0IHJlYWRzIHRoZSBhdXRob3JzCisgICBzY3JpcHQgZmlsZSAiZ2l0IGFtIiBpbnRlcm5hbGx5IHVzZXMuCisgICBUaGlzIGJ5IGl0c2VsZiBpcyBub3QgdXNlZnVsIHVudGlsIGEgc2Vjb25kIGNhbGxlciBhcHBlYXJzIGluIHRoZQorICAgZnV0dXJlIGZvciAicmViYXNlIC1pIiBoZWxwZXIuCisKKyAqIFRoZSBjb21tYW5kLWxpbmUgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBsZWFybmVkIHRvCisgICBjb21wbGV0ZSAiZ2l0IGNtZCBebWFzPEhUPiIgdG8gY29tcGxldGUgdGhlIG5lZ2F0aXZlIGVuZCBvZgorICAgcmVmZXJlbmNlIHRvICJnaXQgY21kIF5tYXN0ZXIiLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGF0dGVtcHRzIHRvIHBpY2sgdXAgdmFsaWQgZS1tYWlscyBmcm9tIHRoZQorICAgdHJhaWxlcnMsIGJ1dCBwZW9wbGUgaW4gcmVhbCB3b3JsZCB3cml0ZSBub24tYWRkcmVzc2VzIHRoZXJlLCBsaWtlCisgICAiQ2M6IFN0YWJsZSA8YWRkQHJlLnNzPiAjIDQuOCsiLCB3aGljaCBicm9rZSB0aGUgb3V0cHV0IGRlcGVuZGluZworICAgb24gdGhlIGF2YWlsYWJpbGl0eSBhbmQgdmludGFnZSBvZiBNYWlsOjpBZGRyZXNzIHBlcmwgbW9kdWxlLgorCisgKiBUaGUgY29kZSB0aGF0IHdlIGhhdmUgdXNlZCBmb3IgdGhlIHBhc3QgMTArIHllYXJzIHRvIGN5Y2xlCisgICA0LWVsZW1lbnQgcmluZyBidWZmZXJzIHR1cm5zIG91dCB0byBiZSBub3QgcXVpdGUgcG9ydGFibGUgaW4KKyAgIHRoZW9yZXRpY2FsIHdvcmxkLgorCisgKiAiZ2l0IGRhZW1vbiIgdXNlZCBmaXhlZC1sZW5ndGggYnVmZmVycyB0byB0dXJuIFVSTCB0byB0aGUKKyAgIHJlcG9zaXRvcnkgdGhlIGNsaWVudCBhc2tlZCBmb3IgaW50byB0aGUgc2VydmVyIHNpZGUgZGlyZWN0b3J5CisgICBwYXRoLCB1c2luZyBzbnByaW50ZigpIHRvIGF2b2lkIG92ZXJmbG93aW5nIHRoZXNlIGJ1ZmZlcnMsIGJ1dAorICAgYWxsb3dlZCBwb3NzaWJseSB0cnVuY2F0ZWQgcGF0aHMgdG8gdGhlIGRpcmVjdG9yeS4gIFRoaXMgaGFzIGJlZW4KKyAgIHRpZ2h0ZW5lZCB0byByZWplY3Qgc3VjaCBhIHJlcXVlc3QgdGhhdCBjYXVzZXMgb3ZlcmxvbmcgcGF0aCB0byBiZQorICAgcmVxdWlyZWQgdG8gc2VydmUuCisKKyAqIFJlY2VudCB1cGRhdGUgdG8gZ2l0LXNoLXNldHVwIChhIGxpYnJhcnkgb2Ygc2hlbGwgZnVuY3Rpb25zIHRoYXQKKyAgIGFyZSB1c2VkIGJ5IG91ciBpbi10cmVlIHNjcmlwdGVkIFBvcmNlbGFpbiBjb21tYW5kcykgaW5jbHVkZWQKKyAgIGFub3RoZXIgc2hlbGwgbGlicmFyeSBnaXQtc2gtaTE4biB3aXRob3V0IHNwZWNpZnlpbmcgd2hlcmUgaXQgaXMsCisgICByZWx5aW5nIG9uIHRoZSAkUEFUSC4gIFRoaXMgaGFzIGJlZW4gZml4ZWQgdG8gYmUgbW9yZSBleHBsaWNpdCBieQorICAgcHJlZml4aW5nICQoZ2l0IC0tZXhlYy1wYXRoKSBvdXRwdXQgaW4gZnJvbnQuCisKKyAqIEZpeCBmb3IgYSByYWN5IGZhbHNlLXBvc2l0aXZlIHRlc3QgZmFpbHVyZS4KKworICogUG9ydGFiaWxpdHkgdXBkYXRlIGFuZCB3b3JrYXJvdW5kIGZvciBidWlsZHMgb24gcmVjZW50IE1hYyBPUyBYLgorCisgKiBVcGRhdGUgdG8gdGhlIHRlc3QgZnJhbWV3b3JrIG1hZGUgaW4gMi45IHRpbWVmcmFtZSBicm9rZSBydW5uaW5nCisgICB0aGUgdGVzdHMgdW5kZXIgdmFsZ3JpbmQsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBJbXByb3ZlIHRoZSBydWxlIHRvIGNvbnZlcnQgInVuc2lnbmVkIGNoYXIgWzIwXSIgaW50byAic3RydWN0CisgICBvYmplY3RfaWQgKiIgaW4gY29udHJpYi9jb2NjaW5lbGxlLworCisgKiAiZ2l0LXNoZWxsIiByZWplY3RzIGEgcmVxdWVzdCB0byBzZXJ2ZSBhIHJlcG9zaXRvcnkgd2hvc2UgbmFtZQorICAgYmVnaW5zIHdpdGggYSBkYXNoLCB3aGljaCBtYWtlcyBpdCBubyBsb25nZXIgcG9zc2libGUgdG8gZ2V0IGl0CisgICBjb25mdXNlZCBpbnRvIHNwYXduaW5nIHNlcnZpY2UgcHJvZ3JhbXMgbGlrZSAiZ2l0LXVwbG9hZC1wYWNrIiB3aXRoCisgICBhbiBvcHRpb24gbGlrZSAiLS1oZWxwIiwgd2hpY2ggaW4gdHVybiB3b3VsZCBzcGF3biBhbiBpbnRlcmFjdGl2ZQorICAgcGFnZXIsIGluc3RlYWQgb2Ygd29ya2luZyB3aXRoIHRoZSByZXBvc2l0b3J5IHVzZXIgYXNrZWQgdG8gYWNjZXNzCisgICAoaS5lLiB0aGUgb25lIHdob3NlIG5hbWUgaXMgIi0taGVscCIpLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU4MTQyYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC40LnR4dApAQCAtMCwwICsxLDQgQEAKK0dpdCB2Mi4xMC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGZvcndhcmQtcG9ydHMgdGhlIGZpeCBmb3IgInNzaDovLy4uLiIgVVJMIGZyb20gR2l0IHYyLjcuNgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OThmZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuNS50eHQKQEAgLTAsMCArMSwxNyBAQAorR2l0IHYyLjEwLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMC40CistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgY3Zzc2VydmVyIiBubyBsb25nZXIgaXMgaW52b2tlZCBieSAiZ2l0IGRhZW1vbiIgYnkgZGVmYXVsdCwKKyAgIGFzIGl0IGlzIG9sZCBhbmQgbGFyZ2VseSB1bm1haW50YWluZWQuCisKKyAqIFZhcmlvdXMgUGVybCBzY3JpcHRzIGRpZCBub3QgdXNlIHNhZmVfcGlwZV9jYXB0dXJlKCkgaW5zdGVhZCBvZgorICAgYmFja3RpY2tzLCBsZWF2aW5nIHRoZW0gc3VzY2VwdGlibGUgdG8gZW5kLXVzZXIgaW5wdXQuICBUaGV5IGhhdmUKKyAgIGJlZW4gY29ycmVjdGVkLgorCitDcmVkaXRzIGdvIHRvIGpvZXJuY2hlbiA8am9lcm5jaGVuQHBoZW5vZWxpdC5kZT4gZm9yIGZpbmRpbmcgdGhlCit1bnNhZmUgY29uc3RydWN0cyBpbiAiZ2l0IGN2c3NlcnZlciIsIGFuZCB0byBKZWZmIEtpbmcgYXQgR2l0SHViIGZvcgorZmluZGluZyBhbmQgZml4aW5nIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBpc3N1ZSBpbiBvdGhlciBzY3JpcHRzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTEuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTEuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdiN2RkMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMS4wLnR4dApAQCAtMCwwICsxLDU5MyBAQAorR2l0IDIuMTEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzLgorCisgKiBBbiBlbXB0eSBzdHJpbmcgdXNlZCBhcyBhIHBhdGhzcGVjIGVsZW1lbnQgaGFzIGFsd2F5cyBtZWFudAorICAgJ2V2ZXJ5dGhpbmcgbWF0Y2hlcycsIGJ1dCBpdCBpcyB0b28gZWFzeSB0byB3cml0ZSBhIHNjcmlwdCB0aGF0CisgICBmaW5kcyBhIHBhdGggdG8gcmVtb3ZlIGluICRwYXRoIGFuZCBydW4gJ2dpdCBybSAiJHBhaHQiJyBieQorICAgbWlzdGFrZSAod2hlbiB0aGUgdXNlciBtZWFudCB0byBnaXZlICIkcGF0aCIpLCB3aGljaCBlbmRzIHVwCisgICByZW1vdmluZyBldmVyeXRoaW5nLiAgVGhpcyByZWxlYXNlIHN0YXJ0cyB3YXJuaW5nIGFib3V0IHRoZQorICAgdXNlIG9mIGFuIGVtcHR5IHN0cmluZyB0aGF0IGlzIHVzZWQgZm9yICdldmVyeXRoaW5nIG1hdGNoZXMnIGFuZAorICAgYXNrcyB1c2VycyB0byB1c2UgYSBtb3JlIGV4cGxpY2l0ICcuJyBmb3IgdGhhdCBpbnN0ZWFkLgorCisgICBUaGUgaG9wZSBpcyB0aGF0IGV4aXN0aW5nIHVzZXJzIHdpbGwgbm90IG1pbmQgdGhpcyBjaGFuZ2UsIGFuZAorICAgZXZlbnR1YWxseSB0aGUgd2FybmluZyBjYW4gYmUgdHVybmVkIGludG8gYSBoYXJkIGVycm9yLCB1cGdyYWRpbmcKKyAgIHRoZSBkZXByZWNhdGlvbiBpbnRvIHJlbW92YWwgb2YgdGhpcyAobWlzKWZlYXR1cmUuCisKKyAqIFRoZSBoaXN0b3JpY2FsIGFyZ3VtZW50IG9yZGVyICJnaXQgbWVyZ2UgPG1zZz4gSEVBRCA8Y29tbWl0Pi4uLiIKKyAgIGhhcyBiZWVuIGRlcHJlY2F0ZWQgZm9yIHF1aXRlIHNvbWUgdGltZSwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUKKyAgIG5leHQgcmVsZWFzZSAobm90IHRoaXMgb25lKS4KKworICogVGhlIGRlZmF1bHQgYWJicmV2aWF0aW9uIGxlbmd0aCwgd2hpY2ggaGFzIGhpc3RvcmljYWxseSBiZWVuIDcsIG5vdworICAgc2NhbGVzIGFzIHRoZSByZXBvc2l0b3J5IGdyb3dzLCB1c2luZyB0aGUgYXBwcm94aW1hdGUgbnVtYmVyIG9mCisgICBvYmplY3RzIGluIHRoZSByZXBvc2l0b3J5IGFuZCBhIGJpdCBvZiBtYXRoIGFyb3VuZCB0aGUgYmlydGhkYXkKKyAgIHBhcmFkb3guICBUaGUgbG9naWMgc3VnZ2VzdHMgdG8gdXNlIDEyIGhleGRpZ2l0cyBmb3IgdGhlIExpbnV4CisgICBrZXJuZWwsIGFuZCA5IHRvIDEwIGZvciBHaXQgaXRzZWxmLgorCisKK1VwZGF0ZXMgc2luY2UgdjIuMTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIENvbWVzIHdpdGggbmV3IHZlcnNpb24gb2YgZ2l0LWd1aSwgbm93IGF0IGl0cyAwLjIxLjAgdGFnLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciBIRUFEXiIgdG8gZm9ybWF0IGEgc2luZ2xlIHBhdGNoCisgICB3aXRoIGEgc2VwYXJhdGUgY292ZXIgbGV0dGVyIG5vdyBudW1iZXJzIHRoZSBvdXRwdXQgYXMgW1BBVENIIDAvMV0KKyAgIGFuZCBbUEFUQ0ggMS8xXSBieSBkZWZhdWx0LgorCisgKiBBbiBpbmNvbWluZyAiZ2l0IHB1c2giIHRoYXQgYXR0ZW1wdHMgdG8gcHVzaCB0b28gbWFueSBieXRlcyBjYW4gbm93CisgICBiZSByZWplY3RlZCBieSBzZXR0aW5nIGEgbmV3IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYXQgdGhlIHJlY2VpdmluZworICAgZW5kLgorCisgKiAiZ2l0IG5vc3VjaGNvbW1hbmQgLS1oZWxwIiBzYWlkICJObyBtYW51YWwgZW50cnkgZm9yIGdpdG5vc3VjaGNvbW1hbmQiLAorICAgd2hpY2ggd2FzIG5vdCBpbnR1aXRpdmUsIGdpdmVuIHRoYXQgImdpdCBub3N1Y2hjb21tYW5kIiBzYWlkICJnaXQ6CisgICAnbm9zdWNoY29tbWFuZCcgaXMgbm90IGEgZ2l0IGNvbW1hbmQiLgorCisgKiAiZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tcmVmZXJlbmNlICRwYXRoICRVUkwiIGlzIGEgd2F5IHRvCisgICByZWR1Y2UgbmV0d29yayB0cmFuc2ZlciBjb3N0IGJ5IGJvcnJvd2luZyBvYmplY3RzIGluIGFuIGV4aXN0aW5nCisgICAkcGF0aCByZXBvc2l0b3J5IHdoZW4gY2xvbmluZyB0aGUgc3VwZXJwcm9qZWN0IGZyb20gJFVSTDsgaXQKKyAgIGxlYXJuZWQgdG8gYWxzbyBwZWVrIGludG8gJHBhdGggZm9yIHByZXNlbmNlIG9mIGNvcnJlc3BvbmRpbmcKKyAgIHJlcG9zaXRvcmllcyBvZiBzdWJtb2R1bGVzIGFuZCBib3Jyb3cgb2JqZWN0cyBmcm9tIHRoZXJlIHdoZW4gYWJsZS4KKworICogVGhlICJnaXQgZGlmZiAtLXN1Ym1vZHVsZT17c2hvcnQsbG9nfSIgbWVjaGFuaXNtIGhhcyBiZWVuIGVuaGFuY2VkCisgICB0byBhbGxvdyAiLS1zdWJtb2R1bGU9ZGlmZiIgdG8gc2hvdyB0aGUgcGF0Y2ggYmV0d2VlbiB0aGUgc3VibW9kdWxlCisgICBjb21taXRzIGJvdW5kIHRvIHRoZSBzdXBlcnByb2plY3QuCisKKyAqIEV2ZW4gdGhvdWdoICJnaXQgaGFzaC1vYmplY3RzIiwgd2hpY2ggaXMgYSB0b29sIHRvIHRha2UgYW4KKyAgIG9uLWZpbGVzeXN0ZW0gZGF0YSBzdHJlYW0gYW5kIHB1dCBpdCBpbnRvIHRoZSBHaXQgb2JqZWN0IHN0b3JlLAorICAgY2FuIHBlcmZvcm0gIm91dHNpZGUtd29ybGQtdG8tR2l0IiBjb252ZXJzaW9ucyAoZS5nLgorICAgZW5kLW9mLWxpbmUgY29udmVyc2lvbnMgYW5kIGFwcGxpY2F0aW9uIG9mIHRoZSBjbGVhbi1maWx0ZXIpLCBhbmQKKyAgIGl0IGhhcyBoYWQgdGhpcyBmZWF0dXJlIG9uIGJ5IGRlZmF1bHQgZnJvbSB2ZXJ5IGVhcmx5IGRheXMsIGl0cyByZXZlcnNlCisgICBvcGVyYXRpb24gImdpdCBjYXQtZmlsZSIsIHdoaWNoIHRha2VzIGFuIG9iamVjdCBmcm9tIHRoZSBHaXQgb2JqZWN0CisgICBzdG9yZSBhbmQgZXh0ZXJuYWxpemVzIGl0IGZvciBjb25zdW1wdGlvbiBieSB0aGUgb3V0c2lkZSB3b3JsZCwKKyAgIGxhY2tlZCBhbiBlcXVpdmFsZW50IG1lY2hhbmlzbSB0byBydW4gdGhlICJHaXQtdG8tb3V0c2lkZS13b3JsZCIKKyAgIGNvbnZlcnNpb24uICBUaGUgY29tbWFuZCBsZWFybmVkIHRoZSAiLS1maWx0ZXJzIiBvcHRpb24gdG8gZG8gc28uCisKKyAqIE91dHB1dCBmcm9tICJnaXQgZGlmZiIgY2FuIGJlIG1hZGUgZWFzaWVyIHRvIHJlYWQgYnkgaW50ZWxsaWdlbnRseSBzZWxlY3RpbmcKKyAgIHdoaWNoIGxpbmVzIGFyZSBjb21tb24gYW5kIHdoaWNoIGxpbmVzIGFyZSBhZGRlZC9kZWxldGVkCisgICB3aGVuIHRoZSBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2VkIHNlY3Rpb24KKyAgIGFyZSB0aGUgc2FtZS4gIEEgY29tbWFuZCBsaW5lIG9wdGlvbiAoLS1pbmRlbnQtaGV1cmlzdGljKSBhbmQgYQorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoZGlmZi5pbmRlbnRIZXVyaXN0aWMpIGFyZSBhZGRlZCB0byBoZWxwIHdpdGggdGhlCisgICBleHBlcmltZW50IHRvIGZpbmQgZ29vZCBoZXVyaXN0aWNzLgorCisgKiBJbiBzb21lIHByb2plY3RzLCBpdCBpcyBjb21tb24gdG8gdXNlICJbUkZDIFBBVENIXSIgYXMgdGhlIHN1YmplY3QKKyAgIHByZWZpeCBmb3IgYSBwYXRjaCBtZWFudCBmb3IgZGlzY3Vzc2lvbiByYXRoZXIgdGhhbiBhcHBsaWNhdGlvbi4gIEEKKyAgIG5ldyBmb3JtYXQtcGF0Y2ggb3B0aW9uICItLXJmYyIgaXMgYSBzaG9ydC1oYW5kIGZvciAiLS1zdWJqZWN0LXByZWZpeD1SRkMgUEFUQ0giCisgICB0byBoZWxwIHRoZSBwYXJ0aWNpcGFudHMgb2Ygc3VjaCBwcm9qZWN0cy4KKworICogImdpdCBhZGQgLS1jaG1vZD17KywtfXggPHBhdGhzcGVjPiIgb25seSBjaGFuZ2VkIHRoZQorICAgZXhlY3V0YWJsZSBiaXQgZm9yIHBhdGhzIHRoYXQgYXJlIGVpdGhlciBuZXcgb3IgbW9kaWZpZWQuIFRoaXMgaGFzCisgICBiZWVuIGNvcnJlY3RlZCB0byBjaGFuZ2UgdGhlIGV4ZWN1dGFibGUgYml0IGZvciBhbGwgcGF0aHMgdGhhdCBtYXRjaAorICAgdGhlIGdpdmVuIHBhdGhzcGVjLgorCisgKiBXaGVuICJnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IiBvdXRwdXQgaXMgcGxhY2VkIGFzIGFuIGluLWJvZHkKKyAgIGhlYWRlciBhbmQgaXQgdXNlcyBSRkMyODIyIGhlYWRlciBmb2xkaW5nLCAiZ2l0IGFtIiBmYWlscyB0bworICAgcHV0IHRoZSBoZWFkZXIgbGluZSBiYWNrIGludG8gYSBzaW5nbGUgbG9naWNhbCBsaW5lLiAgVGhlCisgICB1bmRlcmx5aW5nICJnaXQgbWFpbGluZm8iIHdhcyB0YXVnaHQgdG8gaGFuZGxlIHRoaXMgcHJvcGVybHkuCisKKyAqICJnaXR3ZWIiIGNhbiBzcGF3biAiaGlnaGxpZ2h0IiB0byBzaG93IGJsb2IgY29udGVudHMgd2l0aAorICAgKHByb2dyYW1taW5nKSBsYW5ndWFnZS1zcGVjaWZpYyBzeW50YXggaGlnaGxpZ2h0aW5nLCBidXQgb25seQorICAgd2hlbiB0aGUgbGFuZ3VhZ2UgaXMga25vd24uICAiaGlnaGxpZ2h0IiBjYW4gaG93ZXZlciBiZSB0b2xkCisgICB0byBndWVzcyB0aGUgbGFuZ3VhZ2UgaXRzZWxmIGJ5IGdpdmluZyBpdCAiLS1mb3JjZSIgb3B0aW9uLCB3aGljaAorICAgaGFzIGJlZW4gZW5hYmxlZC4KKworICogImdpdCBndWkiIGwxMG4gdG8gUG9ydHVndWVzZS4KKworICogV2hlbiBnaXZlbiBhbiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZSB0aGF0IGlzIG5vdCAob3IgbW9yZQorICAgcmVhbGlzdGljYWxseSwgIm5vIGxvbmdlciIpIHVuaXF1ZSwgd2UgZ2F2ZSBhIGZhdGFsIGVycm9yCisgICAiYW1iaWd1b3VzIGFyZ3VtZW50Ii4gIFRoaXMgZXJyb3IgaXMgbm93IGFjY29tcGFuaWVkIGJ5IGEgaGludCB0aGF0CisgICBsaXN0cyB0aGUgb2JqZWN0cyBiZWdpbm5pbmcgd2l0aCB0aGUgZ2l2ZW4gcHJlZml4LiAgRHVyaW5nIHRoZQorICAgY291cnNlIG9mIGRldmVsb3BtZW50IG9mIHRoaXMgbmV3IGZlYXR1cmUsIG51bWVyb3VzIG1pbm9yIGJ1Z3Mgd2VyZQorICAgdW5jb3ZlcmVkIGFuZCBjb3JyZWN0ZWQsIHRoZSBtb3N0IG5vdGFibGUgb25lIG9mIHdoaWNoIGlzIHRoYXQgd2UKKyAgIGdhdmUgInNob3J0IFNIQTEgeHh4eCBpcyBhbWJpZ3VvdXMuIiB0d2ljZSB3aXRob3V0IGdvb2QgcmVhc29uLgorCisgKiAiZ2l0IGxvZyByZXZeLi5yZXYiIGlzIGFuIG9mdGVuLXVzZWQgcmV2aXNpb24gcmFuZ2Ugc3BlY2lmaWNhdGlvbgorICAgdG8gc2hvdyB3aGF0IHdhcyBkb25lIG9uIGEgc2lkZSBicmFuY2ggbWVyZ2VkIGF0IHJldi4gIFRoaXMgaGFzCisgICBnYWluZWQgYSBzaG9ydC1oYW5kICJyZXZeLTEiLiAgSW4gZ2VuZXJhbCAicmV2Xi0kbiIgaXMgdGhlIHNhbWUgYXMKKyAgICJecmV2XiRuIHJldiIsIGkuZS4gd2hhdCBoYXMgaGFwcGVuZWQgb24gb3RoZXIgYnJhbmNoZXMgd2hpbGUgdGhlCisgICBoaXN0b3J5IGxlYWRpbmcgdG8gbnRoIHBhcmVudCB3YXMgbG9va2luZyB0aGUgb3RoZXIgd2F5LgorCisgKiBJbiByZWNlbnQgdmVyc2lvbnMgb2YgY1VSTCwgR1NTQVBJIGNyZWRlbnRpYWwgZGVsZWdhdGlvbiBpcworICAgZGlzYWJsZWQgYnkgZGVmYXVsdCBkdWUgdG8gQ1ZFLTIwMTEtMjE5MjsgaW50cm9kdWNlIGEgaHR0cC5kZWxlZ2F0aW9uCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIHNlbGVjdGl2ZWx5IGFsbG93IGVuYWJsaW5nIHRoaXMuCisgICAobWVyZ2UgMjZhN2IyMzQyOSBwcy9odHRwLWdzc2FwaS1jcmVkLWRlbGVnYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgbGVhcm5lZCB0byBob25vciAiLU88b3JkZXJmaWxlPiIgdG8gY29udHJvbCB0aGUKKyAgIG9yZGVyIG9mIHBhdGhzIHRvIHByZXNlbnQgdG8gdGhlIGVuZCB1c2VyLgorCisgKiAiZ2l0IGRpZmYvbG9nIC0td3MtZXJyb3ItaGlnaGxpZ2h0PTxraW5kPiIgbGFja2VkIHRoZSBjb3JyZXNwb25kaW5nCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChkaWZmLndzRXJyb3JIaWdobGlnaHQpIHRvIHNldCBpdCBieSBkZWZhdWx0LgorCisgKiAiZ2l0IGxzLWZpbGVzIiBsZWFybmVkIHRoZSAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIG9wdGlvbgorICAgdG8gZ2V0IGEgbGlzdGluZyBvZiB0cmFja2VkIGZpbGVzIGFjcm9zcyBzdWJtb2R1bGVzIChpLmUuIHRoaXMKKyAgIG9ubHkgd29ya3Mgd2l0aCB0aGUgIi0tY2FjaGVkIiBvcHRpb24sIG5vdCBmb3IgbGlzdGluZyB1bnRyYWNrZWQgb3IKKyAgIGlnbm9yZWQgZmlsZXMpLiAgVGhpcyB3b3VsZCBiZSBhIHVzZWZ1bCB0b29sIHRvIHNpdCBvbiB0aGUgdXBzdHJlYW0KKyAgIHNpZGUgb2YgYSBwaXBlIHRoYXQgaXMgcmVhZCB3aXRoIHhhcmdzIHRvIHdvcmsgb24gYWxsIHdvcmtpbmcgdHJlZQorICAgZmlsZXMgZnJvbSB0aGUgdG9wLWxldmVsIHN1cGVycHJvamVjdC4KKworICogQSBuZXcgY3JlZGVudGlhbCBoZWxwZXIgdGhhdCB0YWxrcyB2aWEgImxpYnNlY3JldCIgd2l0aAorICAgaW1wbGVtZW50YXRpb25zIG9mIFhERyBTZWNyZXQgU2VydmljZSBBUEkgaGFzIGJlZW4gYWRkZWQgdG8KKyAgIGNvbnRyaWIvY3JlZGVudGlhbC8uCisKKyAqIFRoZSBHUEcgdmVyaWZpY2F0aW9uIHN0YXR1cyBzaG93biBieSB0aGUgIiVHPyIgcHJldHR5IGZvcm1hdCBzcGVjaWZpZXIKKyAgIHdhcyBub3QgcmljaCBlbm91Z2ggdG8gZGlmZmVyZW50aWF0ZSBhIHNpZ25hdHVyZSBtYWRlIGJ5IGFuIGV4cGlyZWQKKyAgIGtleSwgYSBzaWduYXR1cmUgbWFkZSBieSBhIHJldm9rZWQga2V5LCBldGMuICBOZXcgb3V0cHV0IGxldHRlcnMKKyAgIGhhdmUgYmVlbiBhc3NpZ25lZCB0byBleHByZXNzIHRoZW0uCisKKyAqIEluIGFkZGl0aW9uIHRvIHB1cmVseSBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IG5hbWVzLCAiZ2l0d2ViIgorICAgbGVhcm5lZCB0byB0dXJuICJnaXQgZGVzY3JpYmUiIG91dHB1dCAoZS5nLiB2Mi45LjMtNTk5LWcyMzc2ZDMxNzg3KQorICAgaW50byBjbGlja2FibGUgbGlua3MgaW4gaXRzIG91dHB1dC4KKworICogImdpdCBjb21taXQiIGNyZWF0ZWQgYW4gZW1wdHkgY29tbWl0IHdoZW4gaW52b2tlZCB3aXRoIGFuIGluZGV4CisgICBjb25zaXN0aW5nIHNvbGVseSBvZiBpbnRlbmQtdG8tYWRkIHBhdGhzIChhZGRlZCB3aXRoICJnaXQgYWRkIC1OIikuCisgICBJdCBub3cgcmVxdWlyZXMgdGhlICItLWFsbG93LWVtcHR5IiBvcHRpb24gdG8gY3JlYXRlIHN1Y2ggYSBjb21taXQuCisgICBUaGUgc2FtZSBsb2dpYyBwcmV2ZW50ZWQgImdpdCBzdGF0dXMiIGZyb20gc2hvd2luZyBzdWNoIHBhdGhzIGFzICJuZXcgZmlsZXMiIGluIHRoZQorICAgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0IiBzZWN0aW9uLgorCisgKiBUaGUgc211ZGdlL2NsZWFuIGZpbHRlciBBUEkgc3Bhd25zIGFuIGV4dGVybmFsIHByb2Nlc3MKKyAgIHRvIGZpbHRlciB0aGUgY29udGVudHMgb2YgZWFjaCBwYXRoIHRoYXQgaGFzIGEgZmlsdGVyIGRlZmluZWQuICBBCisgICBuZXcgdHlwZSBvZiAicHJvY2VzcyIgZmlsdGVyIEFQSSBoYXMgYmVlbiBhZGRlZCB0byBhbGxvdyB0aGUgZmlyc3QKKyAgIHJlcXVlc3QgdG8gcnVuIHRoZSBmaWx0ZXIgZm9yIGEgcGF0aCB0byBzcGF3biBhIHNpbmdsZSBwcm9jZXNzLCBhbmQKKyAgIGFsbCBmaWx0ZXJpbmcgaXMgc2VydmVkIGJ5IHRoaXMgc2luZ2xlIHByb2Nlc3MgZm9yIG11bHRpcGxlCisgICBwYXRocywgcmVkdWNpbmcgdGhlIHByb2Nlc3MgY3JlYXRpb24gb3ZlcmhlYWQuCisKKyAqIFRoZSB1c2VyIGFsd2F5cyBoYXMgdG8gc2F5ICJzdGFzaEB7JE59IiB3aGVuIG5hbWluZyBhIHNpbmdsZQorICAgZWxlbWVudCBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgc3Rhc2gsIGkuZS4gcmVmbG9ncyBpbgorICAgcmVmcy9zdGFzaC4gIFRoZSAiZ2l0IHN0YXNoIiBjb21tYW5kIGxlYXJuZWQgdG8gYWNjZXB0ICJnaXQgc3Rhc2gKKyAgIGFwcGx5IDQiIGFzIGEgc2hvcnQtaGFuZCBmb3IgImdpdCBzdGFzaCBhcHBseSBzdGFzaEB7NH0iLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIFRoZSBkZWx0YS1iYXNlLWNhY2hlIG1lY2hhbmlzbSBoYXMgYmVlbiBhIGtleSB0byB0aGUgcGVyZm9ybWFuY2UgaW4KKyAgIGEgcmVwb3NpdG9yeSB3aXRoIGEgdGlnaHRseSBwYWNrZWQgcGFja2ZpbGUsIGJ1dCBpdCBkaWQgbm90IHNjYWxlCisgICB3ZWxsIGV2ZW4gd2l0aCBhIGxhcmdlciB2YWx1ZSBvZiBjb3JlLmRlbHRhQmFzZUNhY2hlTGltaXQuCisKKyAqIEVuaGFuY2UgImdpdCBzdGF0dXMgLS1wb3JjZWxhaW4iIG91dHB1dCBieSBjb2xsZWN0aW5nIG1vcmUgZGF0YSBvbgorICAgdGhlIHN0YXRlIG9mIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZSBmaWxlcywgd2hpY2ggbWF5CisgICBmdXJ0aGVyIGJlIHVzZWQgdG8gdGVhY2ggZ2l0LXByb21wdCAoaW4gY29udHJpYi8pIHRvIG1ha2UgZmV3ZXIKKyAgIGNhbGxzIHRvIGdpdC4KKworICogRXh0cmFjdCBhIHNtYWxsIGhlbHBlciBvdXQgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgcmVhZHMgdGhlIGF1dGhvcnMKKyAgIHNjcmlwdCBmaWxlICJnaXQgYW0iIGludGVybmFsbHkgdXNlcy4KKyAgIChtZXJnZSBhNzc1OThlIGpjL2FtLXJlYWQtYXV0aG9yLWZpbGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBMaWZ0IGNhbGxzIHRvIGV4aXQoMikgYW5kIGRpZSgpIGhpZ2hlciBpbiB0aGUgY2FsbGNoYWluIGluCisgICBzZXF1ZW5jZXIuYyBmaWxlcyBzbyB0aGF0IG1vcmUgaGVscGVyIGZ1bmN0aW9ucyBpbiBpdCBjYW4gYmUgdXNlZAorICAgYnkgY2FsbGVycyB0aGF0IHdhbnQgdG8gaGFuZGxlIGVycm9yIGNvbmRpdGlvbnMgdGhlbXNlbHZlcy4KKworICogImdpdCBhbSIgaGFzIGJlZW4gdGF1Z2h0IHRvIG1ha2UgYW4gaW50ZXJuYWwgY2FsbCB0byAiZ2l0IGFwcGx5IidzCisgICBpbm5hcmRzIHdpdGhvdXQgc3Bhd25pbmcgdGhlIGxhdHRlciBhcyBhIHNlcGFyYXRlIHByb2Nlc3MuCisKKyAqIFRoZSByZWYtc3RvcmUgYWJzdHJhY3Rpb24gd2FzIGludHJvZHVjZWQgdG8gdGhlIHJlZnMgQVBJIHNvIHRoYXQgd2UKKyAgIGNhbiBwbHVnIGluIGRpZmZlcmVudCBiYWNrZW5kcyB0byBzdG9yZSByZWZlcmVuY2VzLgorCisgKiBUaGUgInVuc2lnbmVkIGNoYXIgc2hhMVsyMF0iIHRvICJzdHJ1Y3Qgb2JqZWN0X2lkIiBjb252ZXJzaW9uCisgICBjb250aW51ZXMuICBOb3RhYmxlIGNoYW5nZXMgaW4gdGhpcyByb3VuZCBpbmNsdWRlcyB0aGF0IGNlLT5zaGExLAorICAgaS5lLiB0aGUgb2JqZWN0IG5hbWUgcmVjb3JkZWQgaW4gdGhlIGNhY2hlX2VudHJ5LCB0dXJucyBpbnRvIGFuCisgICBvYmplY3RfaWQuCisKKyAqIEpHaXQgY2FuIHNob3cgYSBmYWtlIHJlZiAiY2FwYWJpbGl0aWVzXnt9IiB0byAiZ2l0IGZldGNoIiB3aGVuIGl0CisgICBkb2VzIG5vdCBhZHZlcnRpc2UgYW55IHJlZnMsIGJ1dCAiZ2l0IGZldGNoIiB3YXMgbm90IHByZXBhcmVkIHRvCisgICBzZWUgc3VjaCBhbiBhZHZlcnRpc2VtZW50LiAgV2hlbiB0aGUgb3RoZXIgc2lkZSBkaXNjb25uZWN0cyB3aXRob3V0CisgICBnaXZpbmcgYW55IHJlZiBhZHZlcnRpc2VtZW50LCB3ZSB1c2VkIHRvIHNheSAidGhlcmUgbWF5IG5vdCBiZSBhCisgICByZXBvc2l0b3J5IGF0IHRoYXQgVVJMIiwgYnV0IHdlIG1heSBoYXZlIHNlZW4gb3RoZXIgYWR2ZXJ0aXNlbWVudHMKKyAgIGxpa2UgInNoYWxsb3ciIGFuZCAiLmhhdmUiIGluIHdoaWNoIGNhc2Ugd2UgZGVmaW5pdGVseSBrbm93IHRoYXQgYQorICAgcmVwb3NpdG9yeSBpcyB0aGVyZS4gIFRoZSBjb2RlIHRvIGRldGVjdCB0aGlzIGNhc2UgaGFzIGFsc28gYmVlbgorICAgdXBkYXRlZC4KKworICogU29tZSBjb2RlcGF0aHMgaW4gImdpdCBwYWNrLW9iamVjdHMiIHdlcmUgbm90IHJlYWR5IHRvIHVzZSBhbgorICAgZXhpc3RpbmcgcGFjayBiaXRtYXA7IG5vdyB0aGV5IGFyZSBhbmQgYXMgYSByZXN1bHQgdGhleSBoYXZlCisgICBiZWNvbWUgZmFzdGVyLgorCisgKiBUaGUgY29kZXBhdGggaW4gImdpdCBmc2NrIiB0byBkZXRlY3QgbWFsZm9ybWVkIHRyZWUgb2JqZWN0cyBoYXMKKyAgIGJlZW4gdXBkYXRlZCBub3QgdG8gZGllIGJ1dCBrZWVwIGdvaW5nIGFmdGVyIGRldGVjdGluZyB0aGVtLgorCisgKiBXZSBjYWxsICJxc29ydChhcnJheSwgbmVsZW0sIHNpemVvZihhcnJheVswXSksIGZuKSIsIGFuZCBtb3N0IG9mCisgICB0aGUgdGltZSB0aGlyZCBwYXJhbWV0ZXIgaXMgcmVkdW5kYW50LiAgQSBuZXcgUVNPUlQoKSBtYWNybyBsZXRzIHVzCisgICBvbWl0IGl0LgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgaW4gYSByZXBvc2l0b3J5IHdpdGggbWFueSBwYWNrZmlsZXMgdXNlZCB0bworICAgc3BlbmQgYSBsb3Qgb2YgdGltZSBsb29raW5nIGZvci9hdCBvYmplY3RzIGluIHRoZW07IHRoZSBhY2Nlc3NlcyB0bworICAgdGhlIHBhY2tmaWxlcyBhcmUgbm93IG9wdGltaXplZCBieSBjaGVja2luZyB0aGUgbW9zdC1yZWNlbnRseS11c2VkCisgICBwYWNrZmlsZSBmaXJzdC4KKyAgIChtZXJnZSBjOWFmNzA4YjFhIGprL3BhY2stb2JqZWN0cy1vcHRpbS1tcnUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlcGF0aHMgaW52b2x2ZWQgaW4gaW50ZXJhY3RpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMgaGF2ZQorICAgYmVlbiBjbGVhbmVkIHVwLgorCisgKiBJbiBvcmRlciBmb3IgdGhlIHJlY2VpdmluZyBlbmQgb2YgImdpdCBwdXNoIiB0byBpbnNwZWN0IHRoZQorICAgcmVjZWl2ZWQgaGlzdG9yeSBhbmQgZGVjaWRlIHRvIHJlamVjdCB0aGUgcHVzaCwgdGhlIG9iamVjdHMgc2VudAorICAgZnJvbSB0aGUgc2VuZGluZyBlbmQgbmVlZCB0byBiZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgaG9vayBhbmQKKyAgIHRoZSBtZWNoYW5pc20gZm9yIHRoZSBjb25uZWN0aXZpdHkgY2hlY2ssIGFuZCB0aGlzIHdhcyBkb25lCisgICB0cmFkaXRpb25hbGx5IGJ5IHN0b3JpbmcgdGhlIG9iamVjdHMgaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5CisgICBhbmQgbGV0dGluZyAiZ2l0IGdjIiBleHBpcmUgdGhlbS4gIEluc3RlYWQsIHN0b3JlIHRoZSBuZXdseQorICAgcmVjZWl2ZWQgb2JqZWN0cyBpbiBhIHRlbXBvcmFyeSBhcmVhLCBhbmQgbWFrZSB0aGVtIGF2YWlsYWJsZSBieQorICAgcmV1c2luZyB0aGUgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSBtZWNoYW5pc20gdG8gdGhlbSBvbmx5IHdoaWxlIHdlCisgICBkZWNpZGUgaWYgd2UgYWNjZXB0IHRoZSBjaGVjaywgYW5kIG9uY2Ugd2UgZGVjaWRlLCBlaXRoZXIgbWlncmF0ZQorICAgdGhlbSB0byB0aGUgcmVwb3NpdG9yeSBvciBwdXJnZSB0aGVtIGltbWVkaWF0ZWx5LgorCisgKiBUaGUgcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUoKSBoZWxwZXIgd2FzIHJlY3JlYXRlZCBpbiBDIHdoZW4gImdpdAorICAgcHVsbCIgd2FzIHJld3JpdHRlbiBmcm9tIHNoZWxsOyB0aGUgaGVscGVyIGlzIG5vdyBtYWRlIGF2YWlsYWJsZSB0bworICAgb3RoZXIgY2FsbGVycyBpbiBwcmVwYXJhdGlvbiBmb3IgdXBjb21pbmcgInJlYmFzZSAtaSIgd29yay4KKworICogImdpdCB1cGxvYWQtcGFjayIgaGFkIGl0cyBjb2RlIGNsZWFuZWQtdXAgYW5kIHBlcmZvcm1hbmNlIGltcHJvdmVkCisgICBieSByZWR1Y2luZyB1c2Ugb2YgdGltZXN0YW1wLW9yZGVyZWQgY29tbWl0LWxpc3QsIHdoaWNoIHdhcworICAgcmVwbGFjZWQgd2l0aCBhIHByaW9yaXR5IHF1ZXVlLgorCisgKiAiZ2l0IGRpZmYgLS1uby1pbmRleCIgY29kZXBhdGggaGFzIGJlZW4gdXBkYXRlZCBub3QgdG8gdHJ5IHRvIHBlZWsKKyAgIGludG8gYSAuZ2l0LyBkaXJlY3RvcnkgdGhhdCBoYXBwZW5zIHRvIGJlIHVuZGVyIHRoZSBjdXJyZW50CisgICBkaXJlY3RvcnksIHdoZW4gd2Uga25vdyB3ZSBhcmUgb3BlcmF0aW5nIG91dHNpZGUgYW55IHJlcG9zaXRvcnkuCisKKyAqIFVwZGF0ZSBvZiB0aGUgc2VxdWVuY2VyIGNvZGViYXNlIHRvIG1ha2UgaXQgcmV1c2FibGUgdG8gcmVpbXBsZW1lbnQKKyAgICJyZWJhc2UgLWkiIGNvbnRpbnVlcy4KKworICogR2l0IGdlbmVyYWxseSBkb2VzIG5vdCBleHBsaWNpdGx5IGNsb3NlIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCB3ZXJlCisgICBvcGVuIGluIHRoZSBwYXJlbnQgcHJvY2VzcyB3aGVuIHNwYXduaW5nIGEgY2hpbGQgcHJvY2VzcywgYnV0IG1vc3QKKyAgIG9mIHRoZSB0aW1lIHRoZSBjaGlsZCBkb2VzIG5vdCB3YW50IHRvIGFjY2VzcyB0aGVtLiBBcyBXaW5kb3dzIGRvZXMKKyAgIG5vdCBhbGxvdyByZW1vdmluZyBvciByZW5hbWluZyBhIGZpbGUgdGhhdCBoYXMgYSBmaWxlIGRlc2NyaXB0b3IKKyAgIG9wZW4sIGEgc2xvdy10by1leGl0IGNoaWxkIGNhbiBldmVuIGJyZWFrIHRoZSBwYXJlbnQgcHJvY2VzcyBieQorICAgaG9sZGluZyBvbnRvIHRoZW0uICBVc2UgT19DTE9FWEVDIGZsYWcgdG8gb3BlbiBmaWxlcyBpbiB2YXJpb3VzCisgICBjb2RlcGF0aHMuCisKKyAqIFVwZGF0ZSAiaW50ZXJwcmV0LXRyYWlsZXJzIiBtYWNoaW5lcnkgYW5kIHRlYWNoIGl0IHRoYXQgcGVvcGxlIGluCisgICB0aGUgcmVhbCB3b3JsZCB3cml0ZSBhbGwgc29ydHMgb2YgY3J1ZnQgaW4gdGhlICJ0cmFpbGVyIiB0aGF0IHdhcworICAgb3JpZ2luYWxseSBkZXNpZ25lZCB0byBoYXZlIHRoZSBuZWF0LW8gIk1haWwtSGVhZGVyOiBsaWtlIHRoaW5nIgorICAgYW5kIG5vdGhpbmcgZWxzZS4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi4xMAorLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2Mi45IGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSB0aGUgbWFpbnRlbmFuY2UgcmVsZWFzZXMnCitub3RlcyBmb3IgZGV0YWlscykuCisKKyAqIENsYXJpZnkgdmFyaW91cyB3YXlzIHRvIHNwZWNpZnkgdGhlICJyZXZpc2lvbiByYW5nZXMiIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbi4KKworICogImRpZmYtaGlnaGxpZ2h0IiBzY3JpcHQgKGluIGNvbnRyaWIvKSBsZWFybmVkIHRvIHdvcmsgYmV0dGVyIHdpdGgKKyAgICJnaXQgbG9nIC1wIC0tZ3JhcGgiIG91dHB1dC4KKworICogVGhlIHRlc3QgZnJhbWV3b3JrIGxlZnQgdGhlIG51bWJlciBvZiB0ZXN0cyBhbmQgc3VjY2Vzcy9mYWlsdXJlCisgICBjb3VudCBpbiB0aGUgdC90ZXN0LXJlc3VsdHMgZGlyZWN0b3J5LCBrZXllZCBieSB0aGUgbmFtZSBvZiB0aGUKKyAgIHRlc3Qgc2NyaXB0IHBsdXMgdGhlIHByb2Nlc3MgSUQuICBUaGUgbGF0dGVyIGhvd2V2ZXIgdHVybmVkIG91dCBub3QKKyAgIHRvIHNlcnZlIGFueSB1c2VmdWwgcHVycG9zZS4gIFRoZSBwcm9jZXNzIElEIHBhcnQgb2YgdGhlIGZpbGVuYW1lCisgICBoYXMgYmVlbiByZW1vdmVkLgorCisgKiBIYXZpbmcgYSBzdWJtb2R1bGUgd2hvc2UgIi5naXQiIHJlcG9zaXRvcnkgaXMgc29tZWhvdyBjb3JydXB0CisgICBjYXVzZWQgYSBmZXcgY29tbWFuZHMgdGhhdCByZWN1cnNlIGludG8gc3VibW9kdWxlcyB0byBsb29wIGZvcmV2ZXIuCisKKyAqICJnaXQgc3ltYm9saWMtcmVmIC1kIEhFQUQiIGhhcHBpbHkgcmVtb3ZlcyB0aGUgc3ltYm9saWMgcmVmLCBidXQKKyAgIHRoZSByZXN1bHRpbmcgcmVwb3NpdG9yeSBiZWNvbWVzIGFuIGludmFsaWQgb25lLiAgVGVhY2ggdGhlIGNvbW1hbmQKKyAgIHRvIGZvcmJpZCByZW1vdmFsIG9mIEhFQUQuCisKKyAqIEEgdGVzdCBzcGF3bmVkIGEgc2hvcnQtbGl2ZWQgYmFja2dyb3VuZCBwcm9jZXNzLCB3aGljaCBzb21ldGltZXMKKyAgIHByZXZlbnRlZCB0aGUgdGVzdCBkaXJlY3RvcnkgZnJvbSBnZXR0aW5nIHJlbW92ZWQgYXQgdGhlIGVuZCBvZiB0aGUKKyAgIHNjcmlwdCBvbiBzb21lIHBsYXRmb3Jtcy4KKworICogVXBkYXRlIGEgZmV3IHRlc3RzIHRoYXQgdXNlZCB0byB1c2UgR0lUX0NVUkxfVkVSQk9TRSB0byB1c2UgdGhlCisgICBuZXdlciBHSVRfVFJBQ0VfQ1VSTC4KKworICogImdpdCBwYWNrLW9iamVjdHMgLS1pbmNsdWRlLXRhZyIgd2FzIHRhdWdodCB0aGF0IHdoZW4gd2Uga25vdyB0aGF0CisgICB3ZSBhcmUgc2VuZGluZyBhbiBvYmplY3QgQywgd2Ugd2FudCBhIHRhZyBCIHRoYXQgZGlyZWN0bHkgcG9pbnRzIGF0CisgICBDIGJ1dCBhbHNvIGEgdGFnIEEgdGhhdCBwb2ludHMgYXQgdGhlIHRhZyBCLiAgV2UgdXNlZCB0byBtaXNzIHRoZQorICAgaW50ZXJtZWRpYXRlIHRhZyBCIGluIHNvbWUgY2FzZXMuCisKKyAqIFVwZGF0ZSBKYXBhbmVzZSB0cmFuc2xhdGlvbiBmb3IgImdpdC1ndWkiLgorCisgKiAiZ2l0IGZldGNoIGh0dHA6Oi9zaXRlL3BhdGgiIGRpZCBub3QgZGllIGNvcnJlY3RseSBhbmQgc2VnZmF1bHRlZAorICAgaW5zdGVhZC4KKworICogImdpdCBjb21taXQtdHJlZSIgc3RvcHBlZCByZWFkaW5nIGNvbW1pdC5ncGdzaWduIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIHRoYXQgd2FzIG1lYW50IGZvciBQb3JjZWxhaW4gImdpdCBjb21taXQiIGluIEdpdCAyLjk7IHdlCisgICBmb3Jnb3QgdG8gdXBkYXRlICJnaXQgZ3VpIiB0byBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIHRvIG1hdGNoCisgICB0aGlzIGNoYW5nZS4KKworICogImdpdCBhZGQgLS1jaG1vZD17KywtfXgiIGFkZGVkIHJlY2VudGx5IGxhY2tlZCBkb2N1bWVudGF0aW9uLCB3aGljaCBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGxvZyAtLWNoZXJyeS1waWNrIiB1c2VkIHRvIGluY2x1ZGUgbWVyZ2UgY29tbWl0cyBhcyBjYW5kaWRhdGVzCisgICB0byBiZSBtYXRjaGVkIHVwIHdpdGggb3RoZXIgY29tbWl0cywgcmVzdWx0aW5nIGEgbG90IG9mIHdhc3RlZCB0aW1lLgorICAgVGhlIHBhdGNoLWlkIGdlbmVyYXRpb24gbG9naWMgaGFzIGJlZW4gdXBkYXRlZCB0byBpZ25vcmUgbWVyZ2VzIGFuZAorICAgYXZvaWQgdGhlIHdhc3RhZ2UuCisKKyAqIFRoZSBodHRwIHRyYW5zcG9ydCAod2l0aCBjdXJsLW11bHRpIG9wdGlvbiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQKKyAgIHRoZXNlIGRheXMpIGZhaWxlZCB0byByZW1vdmUgY3VybC1lYXN5IGhhbmRsZSBmcm9tIGEgY3VybG0gc2Vzc2lvbiwKKyAgIHdoaWNoIGxlZCB0byB1bm5lY2Vzc2FyeSBBUEkgZmFpbHVyZXMuCisKKyAqIFRoZXJlIHdlcmUgbnVtZXJvdXMgY29ybmVyIGNhc2VzIGluIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzCisgICBhcmUgcmVhZCBhbmQgdXNlZCBvciBub3QgcmVhZCBhdCBhbGwgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3RvcnkgYQorICAgR2l0IGNvbW1hbmQgd2FzIHJ1biwgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgYmVoYXZpb3VyLiAgVGhlIGNvZGUKKyAgIHRvIHNldC11cCByZXBvc2l0b3J5IGFjY2VzcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgR2l0IHByb2Nlc3MgaGFzCisgICBiZWVuIHVwZGF0ZWQgdG8gZml4IHRoZW0uCisgICAobWVyZ2UgNGQwZWZhMSBqay9zZXR1cC1zZXF1ZW5jZS11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYgLVciIG91dHB1dCBuZWVkcyB0byBleHRlbmQgdGhlIGNvbnRleHQgYmFja3dhcmQgdG8KKyAgIGluY2x1ZGUgdGhlIGhlYWRlciBsaW5lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGFuZCBhbHNvIGZvcndhcmQgdG8KKyAgIGluY2x1ZGUgdGhlIGJvZHkgb2YgdGhlIGVudGlyZSBjdXJyZW50IGZ1bmN0aW9uIHVwIHRvIHRoZSBoZWFkZXIKKyAgIGxpbmUgb2YgdGhlIG5leHQgb25lLiAgVGhpcyBwcm9jZXNzIG1heSBoYXZlIHRvIG1lcmdlIHR3byBhZGphY2VudAorICAgaHVua3MsIGJ1dCB0aGUgY29kZSBmb3Jnb3QgdG8gZG8gc28gaW4gc29tZSBjYXNlcy4KKworICogUGVyZm9ybWFuY2UgdGVzdHMgZG9uZSB2aWEgInQvcGVyZiIgZGlkIG5vdCB1c2UgdGhlIHJpZ2h0CisgICBidWlsZCBjb25maWd1cmF0aW9uIGlmIHRoZSB1c2VyIHJlbGllZCBvbiBhdXRvY29uZiBnZW5lcmF0ZWQKKyAgIGNvbmZpZ3VyYXRpb24uCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIC0tYmFzZT0uLi4iIGZlYXR1cmUgdGhhdCB3YXMgcmVjZW50bHkgYWRkZWQKKyAgIHNob3dlZCB0aGUgYmFzZSBjb21taXQgaW5mb3JtYXRpb24gYWZ0ZXIgdGhlICItLSAiIGUtbWFpbCBzaWduYXR1cmUKKyAgIGxpbmUsIHdoaWNoIHR1cm5lZCBvdXQgdG8gYmUgaW5jb252ZW5pZW50LiAgVGhlIGJhc2UgaW5mb3JtYXRpb24KKyAgIGhhcyBiZWVuIG1vdmVkIGFib3ZlIHRoZSBzaWduYXR1cmUgbGluZS4KKworICogTW9yZSBpMThuLgorCisgKiBFdmVuIHdoZW4gImdpdCBwdWxsIC0tcmViYXNlPXByZXNlcnZlIiAoYW5kIHRoZSB1bmRlcmx5aW5nICJnaXQKKyAgIHJlYmFzZSAtLXByZXNlcnZlIikgY2FuIGNvbXBsZXRlIHdpdGhvdXQgY3JlYXRpbmcgYW55IG5ldyBjb21taXRzCisgICAoaS5lLiBmYXN0LWZvcndhcmRzKSwgaXQgc3RpbGwgaW5zaXN0ZWQgb24gaGF2aW5nIHVzYWJsZSBpZGVudAorICAgaW5mb3JtYXRpb24gKHJlYWQ6IHVzZXIuZW1haWwgaXMgc2V0IGNvcnJlY3RseSksIHdoaWNoIHdhcyBsZXNzCisgICB0aGFuIG5pY2UuICBBcyB0aGUgdW5kZXJseWluZyBjb21tYW5kcyB1c2VkIGluc2lkZSAiZ2l0IHJlYmFzZSIKKyAgIHdvdWxkIGZhaWwgd2l0aCBhIG1vcmUgbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlIGFuZCBhZHZpY2UgdGV4dAorICAgd2hlbiB0aGUgYm9ndXMgaWRlbnQgbWF0dGVycywgdGhpcyBleHRyYSBjaGVjayB3YXMgcmVtb3ZlZC4KKworICogImdpdCBnYyAtLWFnZ3Jlc3NpdmUiIHVzZWQgdG8gbGltaXQgdGhlIGRlbHRhLWNoYWluIGxlbmd0aCB0byAyNTAsCisgICB3aGljaCBpcyB3YXkgdG9vIGRlZXAgZm9yIGdhaW5pbmcgYWRkaXRpb25hbCBzcGFjZSBzYXZpbmdzIGFuZCBpcworICAgZGV0cmltZW50YWwgZm9yIHJ1bnRpbWUgcGVyZm9ybWFuY2UuICBUaGUgbGltaXQgaGFzIGJlZW4gcmVkdWNlZCB0bworICAgNTAuCisKKyAqIERvY3VtZW50YXRpb24gZm9yIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdG8gY29udHJvbCB1c2UKKyAgIG9mIGNvbG9yIChsaWtlIGBjb2xvci5ncmVwYCkgc2FpZCB0aGF0IHRoZWlyIGRlZmF1bHQgdmFsdWUgaXMKKyAgICdmYWxzZScsIGluc3RlYWQgb2Ygc2F5aW5nIHRoZWlyIGRlZmF1bHQgaXMgdGFrZW4gZnJvbSBgY29sb3IudWlgLgorICAgV2hlbiB3ZSB1cGRhdGVkIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBjb2xvci51aSBmcm9tICdmYWxzZScgdG8KKyAgICdhdXRvJyBxdWl0ZSBhIHdoaWxlIGFnbywgYWxsIG9mIHRoZW0gYnJva2UuICBUaGlzIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFRoZSBwcmV0dHktZm9ybWF0IHNwZWNpZmllciAiJUMoYXV0bykiIHVzZWQgYnkgdGhlICJsb2ciIGZhbWlseSBvZgorICAgY29tbWFuZHMgdG8gZW5hYmxlIGNvbG9yaW5nIG9mIHRoZSBvdXRwdXQgaXMgdGF1Z2h0IHRvIGFsc28gaXNzdWUgYQorICAgY29sb3ItcmVzZXQgc2VxdWVuY2UgdG8gdGhlIG91dHB1dC4KKworICogQSBzaGVsbCBzY3JpcHQgZXhhbXBsZSBpbiBjaGVjay1yZWYtZm9ybWF0IGRvY3VtZW50YXRpb24gaGFzIGJlZW4KKyAgIGZpeGVkLgorCisgKiAiZ2l0IGNoZWNrb3V0IDx3b3JkPiIgZG9lcyBub3QgZm9sbG93IHRoZSB1c3VhbCBkaXNhbWJpZ3VhdGlvbgorICAgcnVsZXMgd2hlbiB0aGUgPHdvcmQ+IGNhbiBiZSBib3RoIGEgcmV2IGFuZCBhIHBhdGgsIHRvIGFsbG93CisgICBjaGVja2luZyBvdXQgYSBicmFuY2ggJ2ZvbycgaW4gYSBwcm9qZWN0IHRoYXQgaGFwcGVucyB0byBoYXZlIGEKKyAgIGZpbGUgJ2ZvbycgaW4gdGhlIHdvcmtpbmcgdHJlZSB3aXRob3V0IGhhdmluZyB0byBkaXNhbWJpZ3VhdGUuCisgICBUaGlzIHdhcyBwb29ybHkgZG9jdW1lbnRlZCBhbmQgdGhlIGNoZWNrIHdhcyBpbmNvcnJlY3Qgd2hlbiB0aGUKKyAgIGNvbW1hbmQgd2FzIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5LgorCisgKiBTb21lIGNvZGVwYXRocyBpbiAiZ2l0IGRpZmYiIHVzZWQgcmVnZXhlYygzKSBvbiBhIGJ1ZmZlciB0aGF0IHdhcworICAgbW1hcCgyKWVkLCB3aGljaCBtYXkgbm90IGhhdmUgYSB0ZXJtaW5hdGluZyBOVUwsIGxlYWRpbmcgdG8gYSByZWFkCisgICBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgbWFwcGVkIHJlZ2lvbi4gIFRoaXMgd2FzIGZpeGVkIGJ5IGludHJvZHVjaW5nCisgICBhIHJlZ2V4ZWNfYnVmKCkgaGVscGVyIHRoYXQgdGFrZXMgYSA8cHRyLGxlbj4gcGFpciB3aXRoIFJFR19TVEFSVEVORAorICAgZXh0ZW5zaW9uLgorCisgKiBUaGUgcHJvY2VkdXJlIHRvIGJ1aWxkIEdpdCBvbiBNYWMgT1MgWCBmb3IgVHJhdmlzIENJIGhhcmRjb2RlZCB0aGUKKyAgIGludGVybmFsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2UgYXNzdW1lZCBIb21lQnJldyB1c2VzLCB3aGljaCB3YXMgYQorICAgbm8tbm8uICBUaGUgcHJvY2VkdXJlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gYXNrIEhvbWVCcmV3IHRoaW5ncyB3ZQorICAgbmVlZCB0byBrbm93IHRvIGZpeCB0aGlzLgorCisgKiBXaGVuICJnaXQgcmViYXNlIC1pIiBpcyBnaXZlbiBhIGJyb2tlbiBpbnN0cnVjdGlvbiwgaXQgdG9sZCB0aGUKKyAgIHVzZXIgdG8gZml4IGl0IHdpdGggIi0tZWRpdC10b2RvIiwgYnV0IGRpZG4ndCBzYXkgd2hhdCB0aGUgc3RlcAorICAgYWZ0ZXIgdGhhdCB3YXMgKGkuZS4gIi0tY29udGludWUiKS4KKworICogRG9jdW1lbnRhdGlvbiBhcm91bmQgdG9vbHMgdG8gaW1wb3J0IGZyb20gQ1ZTIHdhcyBmYWlybHkgb3V0ZGF0ZWQuCisKKyAqICJnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIGxvc3QgdGhlIHByb2dyZXNzIGV5ZS1jYW5keSBpbgorICAgYSByZWNlbnQgdXBkYXRlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEEgbG93LWxldmVsIGZ1bmN0aW9uIHZlcmlmeV9wYWNrZmlsZSgpIHdhcyBtZWFudCB0byBzaG93IGVycm9ycworICAgdGhhdCB3ZXJlIGRldGVjdGVkIHdpdGhvdXQgZHlpbmcgaXRzZWxmLCBidXQgdW5kZXIgc29tZSBjb25kaXRpb25zCisgICBpdCBkaWRuJ3QgYW5kIGRpZWQgaW5zdGVhZCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIFdoZW4gImdpdCBmZXRjaCIgdHJpZXMgdG8gZmluZCB3aGVyZSB0aGUgaGlzdG9yeSBvZiB0aGUgcmVwb3NpdG9yeQorICAgaXQgcnVucyBpbiBoYXMgZGl2ZXJnZWQgZnJvbSB3aGF0IHRoZSBvdGhlciBzaWRlIGhhcywgaXQgaGFzIGEKKyAgIG1lY2hhbmlzbSB0byBhdm9pZCBkaWdnaW5nIHRvbyBkZWVwIGludG8gaXJyZWxldmFudCBzaWRlIGJyYW5jaGVzLgorICAgVGhpcyBob3dldmVyIGRpZCBub3Qgd29yayB3ZWxsIG92ZXIgdGhlICJzbWFydC1odHRwIiB0cmFuc3BvcnQgZHVlCisgICB0byBhIGRlc2lnbiBidWcsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBJbiB0aGUgY29kZXBhdGggdGhhdCBjb21lcyB1cCB3aXRoIHRoZSBob3N0bmFtZSB0byBiZSB1c2VkIGluIGFuCisgICBlLW1haWwgd2hlbiB0aGUgdXNlciBkaWRuJ3QgdGVsbCB1cywgd2UgbG9va2VkIGF0IHRoZSBhaV9jYW5vbm5hbWUKKyAgIGZpZWxkIGluIHN0cnVjdCBhZGRyaW5mbyB3aXRob3V0IG1ha2luZyBzdXJlIGl0IGlzIG5vdCBOVUxMIGZpcnN0LgorCisgKiAiZ2l0IHdvcmt0cmVlIiwgZXZlbiB0aG91Z2ggaXQgdXNlZCB0aGUgZGVmYXVsdF9hYmJyZXYgc2V0dGluZyB0aGF0CisgICBvdWdodCB0byBiZSBhZmZlY3RlZCBieSB0aGUgY29yZS5hYmJyZXYgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgaWdub3JlZAorICAgdGhlIHZhcmlhYmxlIHNldHRpbmcuICBUaGUgY29tbWFuZCBoYXMgYmVlbiB0YXVnaHQgdG8gcmVhZCB0aGUKKyAgIGRlZmF1bHQgc2V0IG9mIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRvIGNvcnJlY3QgdGhpcy4KKworICogImdpdCBpbml0IiB0cmllZCB0byByZWNvcmQgY29yZS53b3JrdHJlZSBpbiB0aGUgcmVwb3NpdG9yeSdzCisgICAnY29uZmlnJyBmaWxlIHdoZW4gdGhlIEdJVF9XT1JLX1RSRUUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2FzIHNldCBhbmQKKyAgIGl0IHdhcyBkaWZmZXJlbnQgZnJvbSB3aGVyZSBHSVRfRElSIGFwcGVhcnMgYXMgIi5naXQiIGF0IGl0cyB0b3AsCisgICBidXQgdGhlIGxvZ2ljIHdhcyBmYXVsdHkgd2hlbiAuZ2l0IGlzIGEgImdpdGRpcjoiIGZpbGUgdGhhdCBwb2ludHMKKyAgIGF0IHRoZSByZWFsIHBsYWNlLCBjYXVzaW5nIHRyb3VibGUgaW4gd29ya2luZyB0cmVlcyB0aGF0IGFyZQorICAgbWFuYWdlZCBieSAiZ2l0IHdvcmt0cmVlIi4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBDb2RlcGF0aHMgdGhhdCByZWFkIGZyb20gYW4gb24tZGlzayBsb29zZSBvYmplY3Qgd2VyZSB0b28gbG9vc2UgaW4KKyAgIHZhbGlkYXRpbmcgdGhhdCB0aGV5IGFyZSByZWFkaW5nIGEgcHJvcGVyIG9iamVjdCBmaWxlIGFuZAorICAgc29tZXRpbWVzIHJlYWQgcGFzdCB0aGUgZGF0YSB0aGV5IHJlYWQgZnJvbSB0aGUgZGlzaywgd2hpY2ggaGFzCisgICBiZWVuIGNvcnJlY3RlZC4gIEgvdCB0byBHdXN0YXZvIEdyaWVjbyBmb3IgcmVwb3J0aW5nLgorCisgKiBUaGUgb3JpZ2luYWwgY29tbWFuZCBsaW5lIHN5bnRheCBmb3IgImdpdCBtZXJnZSIsIHdoaWNoIHdhcyAiZ2l0CisgICBtZXJnZSA8bXNnPiBIRUFEIDxwYXJlbnQ+Li4uIiwgaGFzIGJlZW4gZGVwcmVjYXRlZCBmb3IgcXVpdGUgc29tZQorICAgdGltZSwgYW5kICJnaXQgZ3VpIiB3YXMgdGhlIGxhc3QgaW4tdHJlZSB1c2VyIG9mIHRoZSBzeW50YXguICBUaGlzCisgICBpcyBmaW5hbGx5IGZpeGVkLCBzbyB0aGF0IHdlIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCB0aGUgZGVwcmVjYXRpb24uCisKKyAqIEFuIGF1dGhvciBuYW1lIHRoYXQgaGFzIGEgYmFja3NsYXNoLXF1b3RlZCBkb3VibGUgcXVvdGUgaW4gdGhlCisgICBodW1hbiByZWFkYWJsZSBwYXJ0ICgiTXkgXCJkb3VibGUgcXVvdGVkXCIgbmFtZSIpLCB3YXMgbm90IHVucXVvdGVkCisgICBjb3JyZWN0bHkgd2hpbGUgYXBwbHlpbmcgYSBwYXRjaCBmcm9tIGEgcGllY2Ugb2YgZS1tYWlsLgorCisgKiBEb2MgdXBkYXRlIHRvIGNsYXJpZnkgd2hhdCAibG9nIC0zIC0tcmV2ZXJzZSIgZG9lcy4KKworICogQWxtb3N0IGV2ZXJ5Ym9keSB1c2VzIERFRkFVTFRfQUJCUkVWIHRvIHJlZmVyIHRvIHRoZSBkZWZhdWx0CisgICBzZXR0aW5nIGZvciB0aGUgYWJicmV2aWF0aW9uLCBidXQgImdpdCBibGFtZSIgcGVla2VkIGludG8KKyAgIHVuZGVybHlpbmcgdmFyaWFibGUgYnlwYXNzaW5nIHRoZSBtYWNybyBmb3Igbm8gZ29vZCByZWFzb24uCisKKyAqIFRoZSAiZ3JhcGgiIEFQSSB1c2VkIGluICJnaXQgbG9nIC0tZ3JhcGgiIG1pc2NvdW50ZWQgdGhlIG51bWJlciBvZgorICAgb3V0cHV0IGNvbHVtbnMgY29uc3VtZWQgc28gZmFyIHdoZW4gZHJhd2luZyBhIHBhZGRpbmcgbGluZSwgd2hpY2gKKyAgIGhhcyBiZWVuIGZpeGVkOyB0aGlzIGRpZCBub3QgYWZmZWN0IGFueSBleGlzdGluZyBjb2RlIGFzIG5vYm9keQorICAgdHJpZWQgdG8gd3JpdGUgYW55dGhpbmcgYWZ0ZXIgdGhlIHBhZGRpbmcgb24gc3VjaCBhIGxpbmUsIHRob3VnaC4KKworICogVGhlIGNvZGUgdGhhdCBwYXJzZXMgdGhlIGZvcm1hdCBwYXJhbWV0ZXIgb2YgdGhlIGZvci1lYWNoLXJlZiBjb21tYW5kCisgICBoYXMgc2VlbiBhIG1pY3JvLW9wdGltaXphdGlvbi4KKworICogV2hlbiB3ZSBzdGFydGVkIHRvIHVzZSBjVVJMIHRvIHRhbGsgdG8gYW4gaW1hcCBzZXJ2ZXIsIHdlIGZvcmdvdCB0byBleHBsaWNpdGx5IGFkZAorICAgaW1hcChzKTovLyBiZWZvcmUgdGhlIGRlc3RpbmF0aW9uLiAgVG8gc29tZSBmb2xrcywgdGhhdCBkaWRuJ3Qgd29yaworICAgYW5kIHRoZSBsaWJyYXJ5IHRyaWVkIHRvIG1ha2UgSFRUUChzKSByZXF1ZXN0cyBpbnN0ZWFkLgorCisgKiBUaGUgLi9jb25maWd1cmUgc2NyaXB0IGdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyB3YXMgdGF1Z2h0IGhvdworICAgdG8gZGV0ZWN0IHN1cHBvcnQgb2YgU1NMIGJ5IGxpYmN1cmwgYmV0dGVyLgorCisgKiBUaGUgY29tbWFuZC1saW5lIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgbGVhcm5lZCB0bworICAgY29tcGxldGUgImdpdCBjbWQgXm1hczxIVD4iIHRvIGNvbXBsZXRlIHRoZSBuZWdhdGl2ZSBlbmQgb2YKKyAgIHJlZmVyZW5jZSB0byAiZ2l0IGNtZCBebWFzdGVyIi4KKyAgIChtZXJnZSA0OTQxNmFkMjJhIGNwL2NvbXBsZXRpb24tbmVnYXRpdmUtcmVmcyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBleGlzdGluZyAiZ2l0IGZldGNoIC0tZGVwdGg9PG4+IiBvcHRpb24gd2FzIGhhcmQgdG8gdXNlCisgICBjb3JyZWN0bHkgd2hlbiBtYWtpbmcgdGhlIGhpc3Rvcnkgb2YgYW4gZXhpc3Rpbmcgc2hhbGxvdyBjbG9uZQorICAgZGVlcGVyLiAgQSBuZXcgb3B0aW9uLCAiLS1kZWVwZW49PG4+IiwgaGFzIGJlZW4gYWRkZWQgdG8gbWFrZSB0aGlzCisgICBlYXNpZXIgdG8gdXNlLiAgImdpdCBjbG9uZSIgYWxzbyBsZWFybmVkICItLXNoYWxsb3ctc2luY2U9PGRhdGU+IgorICAgYW5kICItLXNoYWxsb3ctZXhjbHVkZT08dGFnPiIgb3B0aW9ucyB0byBtYWtlIGl0IGVhc2llciB0byBzcGVjaWZ5CisgICAiSSBhbSBpbnRlcmVzdGVkIG9ubHkgaW4gdGhlIHJlY2VudCBOIG1vbnRocyB3b3J0aCBvZiBoaXN0b3J5IiBhbmQKKyAgICJHaXZlIG1lIG9ubHkgdGhlIGhpc3Rvcnkgc2luY2UgdGhhdCB2ZXJzaW9uIi4KKyAgIChtZXJnZSBjY2NmNzRlMmRhIG5kL3NoYWxsb3ctZGVlcGVuIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBibGFtZSAtLXJldmVyc2UgT0xEIHBhdGgiIGlzIG5vdyBEV0lNbWVkIHRvIHNob3cgaG93IGxpbmVzCisgICBpbiBwYXRoIGluIGFuIG9sZCByZXZpc2lvbiBPTEQgaGF2ZSBzdXJ2aXZlZCB1cCB0byB0aGUgY3VycmVudAorICAgY29tbWl0LgorICAgKG1lcmdlIGUxZDA5NzAxYTQgamMvYmxhbWUtcmV2ZXJzZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBodHRwLmVtcHR5YXV0aCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIGEgd2F5IHRvIGFsbG93IGFuIGVtcHR5IHVzZXJuYW1lIHRvCisgICBwYXNzIHdoZW4gYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUgdXNpbmcgbWVjaGFuaXNtcyBsaWtlCisgICBLZXJiZXJvcy4gIFdlIHRvb2sgYW4gdW5zcGVjaWZpZWQgKE5VTEwpIHVzZXJuYW1lIGFuZCBzZW50ICI6IgorICAgKGkuZS4gbm8gdXNlcm5hbWUsIG5vIHBhc3N3b3JkKSB0byBDVVJMT1BUX1VTRVJQV0QsIGJ1dCBkaWQgbm90IGRvCisgICB0aGUgc2FtZSB3aGVuIHRoZSB1c2VybmFtZSBpcyBleHBsaWNpdGx5IHNldCB0byBhbiBlbXB0eSBzdHJpbmcuCisKKyAqICJnaXQgY2xvbmUiIG9mIGEgbG9jYWwgcmVwb3NpdG9yeSBjYW4gYmUgZG9uZSBhdCB0aGUgZmlsZXN5c3RlbQorICAgbGV2ZWwsIGJ1dCB0aGUgY29kZXBhdGggZGlkIG5vdCBjaGVjayBlcnJvcnMgd2hpbGUgY29weWluZyBhbmQKKyAgIGFkanVzdGluZyB0aGUgZmlsZSB0aGF0IGxpc3RzIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzLgorCisgKiBEb2N1bWVudGF0aW9uIGZvciAiZ2l0IGNvbW1pdCIgd2FzIHVwZGF0ZWQgdG8gY2xhcmlmeSB0aGF0ICJjb21taXQKKyAgIC1wIDxwYXRocz4iIGFkZHMgdG8gdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGluZGV4IHRvIGNvbWUgdXAKKyAgIHdpdGggd2hhdCB0byBjb21taXQuCisKKyAqIEEgc3RyYXkgc3ltYm9saWMgbGluayBpbiB0aGUgJEdJVF9ESVIvcmVmcy8gZGlyZWN0b3J5IGNvdWxkIG1ha2UgbmFtZQorICAgcmVzb2x1dGlvbiBsb29wIGZvcmV2ZXIsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlICJzdWJtb2R1bGUuPG5hbWU+LnBhdGgiIHN0b3JlZCBpbiAuZ2l0bW9kdWxlcyBpcyBuZXZlciBjb3BpZWQKKyAgIHRvIC5naXQvY29uZmlnIGFuZCBzdWNoIGEga2V5IGluIC5naXQvY29uZmlnIGhhcyBubyBtZWFuaW5nLCBidXQKKyAgIHRoZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJlZCBpdCBuZXh0IHRvIHN1Ym1vZHVsZS48bmFtZT4udXJsCisgICBhcyBpZiBib3RoIGJlbG9uZyB0byAuZ2l0L2NvbmZpZy4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqIEluIGEgd29ya3RyZWUgY3JlYXRlZCB2aWEgImdpdAorICAgd29ya3RyZWUiLCAiZ2l0IGNoZWNrb3V0IiBhdHRlbXB0cyB0byBwcm90ZWN0IHVzZXJzIGZyb20gY29uZnVzaW9uCisgICBieSByZWZ1c2luZyB0byBjaGVjayBvdXQgYSBicmFuY2ggdGhhdCBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IGluCisgICBhbm90aGVyIHdvcmt0cmVlLiAgSG93ZXZlciwgdGhpcyBhbHNvIHByZXZlbnRlZCBjaGVja2luZyBvdXQgYQorICAgYnJhbmNoIHdoaWNoIGlzIGRlc2lnbmF0ZWQgYXMgdGhlIHByaW1hcnkgYnJhbmNoIG9mIGEgYmFyZQorICAgcmVwb3NpdG9yeSwgaW4gYSB3b3JrdHJlZSB0aGF0IGlzIGNvbm5lY3RlZCB0byB0aGUgYmFyZQorICAgcmVwb3NpdG9yeS4gIFRoZSBjaGVjayBoYXMgYmVlbiBjb3JyZWN0ZWQgdG8gYWxsb3cgaXQuCisKKyAqICJnaXQgcmViYXNlIiBpbW1lZGlhdGVseSBhZnRlciAiZ2l0IGNsb25lIiBmYWlsZWQgdG8gZmluZCB0aGUgZm9yaworICAgcG9pbnQgZnJvbSB0aGUgdXBzdHJlYW0uCisKKyAqIFdoZW4gZmV0Y2hpbmcgZnJvbSBhIHJlbW90ZSB0aGF0IGhhcyBtYW55IHRhZ3MgdGhhdCBhcmUgaXJyZWxldmFudAorICAgdG8gYnJhbmNoZXMgd2UgYXJlIGZvbGxvd2luZywgd2UgdXNlZCB0byB3YXN0ZSB3YXkgdG9vIG1hbnkgY3ljbGVzCisgICBjaGVja2luZyBpZiB0aGUgb2JqZWN0IHBvaW50ZWQgYXQgYnkgYSB0YWcgKHRoYXQgd2UgYXJlIG5vdAorICAgZ29pbmcgdG8gZmV0Y2ghKSBleGlzdHMgaW4gb3VyIHJlcG9zaXRvcnkgdG9vIGNhcmVmdWxseS4KKworICogUHJvdGVjdCBvdXIgY29kZSBmcm9tIG92ZXItZWFnZXIgY29tcGlsZXJzLgorCisgKiBSZWNlbnQgZ2l0IGFsbG93cyBzdWJtb2R1bGUuPG5hbWU+LmJyYW5jaCB0byB1c2UgYSBzcGVjaWFsIHRva2VuCisgICAiLiIgaW5zdGVhZCBvZiB0aGUgYnJhbmNoIG5hbWU7IHRoZSBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQKKyAgIHRvIGRlc2NyaWJlIGl0LgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGF0dGVtcHRzIHRvIHBpY2sgdXAgdmFsaWQgZS1tYWlscyBmcm9tIHRoZQorICAgdHJhaWxlcnMsIGJ1dCBwZW9wbGUgaW4gdGhlIHJlYWwgd29ybGQgd3JpdGUgbm9uLWFkZHJlc3NlcyB0aGVyZSwgbGlrZQorICAgIkNjOiBTdGFibGUgPGFkZEByZS5zcz4gIyA0LjgrIiwgd2hpY2ggYnJva2UgdGhlIG91dHB1dCBkZXBlbmRpbmcKKyAgIG9uIHRoZSBhdmFpbGFiaWxpdHkgYW5kIHZpbnRhZ2Ugb2YgdGhlIE1haWw6OkFkZHJlc3MgcGVybCBtb2R1bGUuCisgICAobWVyZ2UgZGNmYWZjNTIxNCBtbS9zZW5kLWVtYWlsLWNjLWNydWZ0LWFmdGVyLWFkZHJlc3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgVHJhdmlzIENJIGNvbmZpZ3VyYXRpb24gd2Ugc2hpcCByYW4gdGhlIHRlc3RzIHdpdGggdGhlIC0tdmVyYm9zZQorICAgb3B0aW9uIGJ1dCB0aGlzIHJpc2tzIG5vbi1UQVAgb3V0cHV0IHRoYXQgaGFwcGVucyB0byBiZSAib2siIHRvIGJlCisgICBtaXNpbnRlcnByZXRlZCBhcyBUQVAgc2lnbmFsbGluZyBhIHRlc3QgdGhhdCBwYXNzZWQuICBUaGlzIHJlc3VsdGVkCisgICBpbiB1bm5lY2Vzc2FyeSBmYWlsdXJlcy4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkIGJ5IGludHJvZHVjaW5nIGEKKyAgIG5ldyBtb2RlIHRvIHJ1biBvdXIgdGVzdHMgaW4gdGhlIHRlc3QgaGFybmVzcyB0byBzZW5kIHRoZSB2ZXJib3NlCisgICBvdXRwdXQgc2VwYXJhdGVseSB0byB0aGUgbG9nIGZpbGUuCisKKyAqIFNvbWUgQXNjaWlEb2MgZm9ybWF0dGVycyBtaXNoYW5kbGUgYSBkaXNwbGF5ZWQgaWxsdXN0cmF0aW9uIHdpdGgKKyAgIHRhYnMgaW4gaXQuICBBZGp1c3QgYSBmZXcgb2YgdGhlbSBpbiBtZXJnZS1iYXNlIGRvY3VtZW50YXRpb24gdG8KKyAgIHdvcmsgYXJvdW5kIHRoZW0uCisKKyAqIEZpeGVkIGEgbWlub3IgcmVncmVzc2lvbiBpbiAiZ2l0IHN1Ym1vZHVsZSIgdGhhdCB3YXMgaW50cm9kdWNlZAorICAgd2hlbiBtb3JlIGhlbHBlciBmdW5jdGlvbnMgd2VyZSByZWltcGxlbWVudGVkIGluIEMuCisgICAobWVyZ2UgNzdiNjNhYzMxZSBzYi9zdWJtb2R1bGUtaWdub3JlLXRyYWlsaW5nLXNsYXNoIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGUgdGhhdCB3ZSBoYXZlIHVzZWQgZm9yIHRoZSBwYXN0IDEwKyB5ZWFycyB0byBjeWNsZQorICAgNC1lbGVtZW50IHJpbmcgYnVmZmVycyB0dXJucyBvdXQgdG8gYmUgbm90IHF1aXRlIHBvcnRhYmxlIGluCisgICB0aGVvcmV0aWNhbCB3b3JsZC4KKyAgIChtZXJnZSBiYjg0NzM1YzgwIHJzL3JpbmctYnVmZmVyLXdyYXBhcm91bmQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRhZW1vbiIgdXNlZCBmaXhlZC1sZW5ndGggYnVmZmVycyB0byB0dXJuIFVSTHMgdG8gdGhlCisgICByZXBvc2l0b3J5IHRoZSBjbGllbnQgYXNrZWQgZm9yIGludG8gdGhlIHNlcnZlciBzaWRlIGRpcmVjdG9yeQorICAgcGF0aHMsIHVzaW5nIHNucHJpbnRmKCkgdG8gYXZvaWQgb3ZlcmZsb3dpbmcgdGhlc2UgYnVmZmVycywgYnV0CisgICBhbGxvd2VkIHBvc3NpYmx5IHRydW5jYXRlZCBwYXRocyB0byB0aGUgZGlyZWN0b3J5LiAgVGhpcyBoYXMgYmVlbgorICAgdGlnaHRlbmVkIHRvIHJlamVjdCBzdWNoIGEgcmVxdWVzdCB0aGF0IGNhdXNlcyBhbiBvdmVybG9uZyBwYXRoIHRvIGJlCisgICBzZXJ2ZWQuCisgICAobWVyZ2UgNmJkYjAwODNiZSBqay9kYWVtb24tcGF0aC1vay1jaGVjay10cnVuY2F0aW9uIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50IHVwZGF0ZSB0byBnaXQtc2gtc2V0dXAgKGEgbGlicmFyeSBvZiBzaGVsbCBmdW5jdGlvbnMgdGhhdAorICAgYXJlIHVzZWQgYnkgb3VyIGluLXRyZWUgc2NyaXB0ZWQgUG9yY2VsYWluIGNvbW1hbmRzKSBpbmNsdWRlZAorICAgYW5vdGhlciBzaGVsbCBsaWJyYXJ5IGdpdC1zaC1pMThuIHdpdGhvdXQgc3BlY2lmeWluZyB3aGVyZSBpdCBpcywKKyAgIHJlbHlpbmcgb24gdGhlICRQQVRILiAgVGhpcyBoYXMgYmVlbiBmaXhlZCB0byBiZSBtb3JlIGV4cGxpY2l0IGJ5CisgICBwcmVmaXhpbmcgd2l0aCAkKGdpdCAtLWV4ZWMtcGF0aCkgb3V0cHV0LgorICAgKG1lcmdlIDEwNzMwOTRmMzAgYWsvc2gtc2V0dXAtZG90LXNvdXJjZS1pMThuLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIEZpeCBmb3IgYSByYWN5IGZhbHNlLXBvc2l0aXZlIHRlc3QgZmFpbHVyZS4KKyAgIChtZXJnZSBmZGY0ZjZjNzliIGFzL21lcmdlLWF0dHItc2xlZXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBQb3J0YWJpbGl0eSB1cGRhdGUgYW5kIHdvcmthcm91bmQgZm9yIGJ1aWxkcyBvbiByZWNlbnQgTWFjIE9TIFguCisgICAobWVyZ2UgYTI5NmJjMDEzMiBscy9tYWNvcy11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBVc2luZyBhICUoSEVBRCkgcGxhY2Vob2xkZXIgaW4gImZvci1lYWNoLXJlZiAtLWZvcm1hdD0iIG9wdGlvbgorICAgY2F1c2VkIHRoZSBjb21tYW5kIHRvIHNlZ2ZhdWx0IHdoZW4gb24gYW4gdW5ib3JuIGJyYW5jaC4KKyAgIChtZXJnZSA4NDY3OWQ0NzBkIGpjL2Zvci1lYWNoLXJlZi1oZWFkLXNlZ2ZhdWx0LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC1pIiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoIHRoZSBjb3JlLmNvbW1lbnRjaGFyCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZvciB0d28gcmVhc29ucywgYm90aCBvZiB3aGljaCBoYXZlIGJlZW4KKyAgIGZpeGVkLgorICAgKG1lcmdlIDg4MmNkMjM3NzcganMvcmViYXNlLWktY29tbWVudGNoYXItZml4IGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgbWlub3IgZG9jLCB0ZXN0IGFuZCBidWlsZCB1cGRhdGVzIGFuZCBjb2RlIGNsZWFudXBzLgorICAgKG1lcmdlIDVjMjM4ZTI5YTggamsvY29tbW9uLW1haW4gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDVhNTc0OWU0NWIgYWsvcHJlLXJlY2VpdmUtaG9vay10ZW1wbGF0ZS1tb2RlZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2ZDgzNGFjOGYxIGprL3JlYmFzZS1jb25maWctaW5zbi1mbXQtZG9jZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkZTlmN2ZhM2IwIHJzL2NvbW1pdC1wcHRyLXNpbXBsaWZ5IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0MjU5ZDY5M2ZjIHNjL2ZtdC1tZXJnZS1tc2ctZG9jLW1hcmt1cC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDI4ZmFiN2IyM2QgbmQvdGVzdC1oZWxwZXJzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjMmJiMGMxZDFlIHJzL2NvY2NpIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzMjg1YjdiYWRiIHBzL2NvbW1vbi1pbmZvLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMmIwOTA4MjJlOCBuZC93b3JrdHJlZS1sb2NrIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0YmQ0ODhlYTdjIGprL2NyZWF0ZS1icmFuY2gtcmVtb3ZlLXVudXNlZC1wYXJhbSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOTc0ZTAwNDRkNiB0ay9kaWZmY29yZS1kZWx0YS1yZW1vdmUtdW51c2VkIGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDM1Y2YxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjEudHh0CkBAIC0wLDAgKzEsMTY4IEBACitHaXQgdjIuMTEuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjExCistLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZGVmYXVsdCBUcmF2aXMtQ0kgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgbmV3ZXIgUDQgYW5kIEdpdExGUy4KKworICogVGhlIGNoYXJhY3RlciB3aWR0aCB0YWJsZSBoYXMgYmVlbiB1cGRhdGVkIHRvIG1hdGNoIFVuaWNvZGUgOS4wCisKKyAqIFVwZGF0ZSB0aGUgaXNhdHR5KCkgZW11bGF0aW9uIGZvciBXaW5kb3dzIGJ5IHVwZGF0aW5nIHRoZSBwcmV2aW91cworICAgaGFjayB0aGF0IGRlcGVuZGVkIG9uIGludGVybmFscyBvZiAob2xkZXIpIE1TVkMgcnVudGltZS4KKworICogImdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYyIgZmFpbGVkIHdpdGggYSBtb3JlIHJlY2VudCBub3RhdGlvbiBsaWtlCisgICAiSEVBRF4tMSIgYW5kICJIRUFEXiEiLgorCisgKiBBbiBlbXB0eSBkaXJlY3RvcnkgaW4gYSB3b3JraW5nIHRyZWUgdGhhdCBjYW4gc2ltcGx5IGJlIG51a2VkIHVzZWQKKyAgIHRvIGludGVyZmVyZSB3aGlsZSBtZXJnaW5nIG9yIGNoZXJyeS1waWNraW5nIGEgY2hhbmdlIHRvIGNyZWF0ZSBhCisgICBzdWJtb2R1bGUgZGlyZWN0b3J5IHRoZXJlLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4uCisKKyAqIFRoZSBjb2RlIGluICJnaXQgcHVzaCIgdG8gY29tcHV0ZSBpZiBhbnkgY29tbWl0IGJlaW5nIHB1c2hlZCBpbiB0aGUKKyAgIHN1cGVycHJvamVjdCBiaW5kcyBhIGNvbW1pdCBpbiBhIHN1Ym1vZHVsZSB0aGF0IGhhc24ndCBiZWVuIHB1c2hlZAorICAgb3V0IHdhcyBvdmVybHkgaW5lZmZpY2llbnQsIG1ha2luZyBpdCB1bnVzYWJsZSBldmVuIGZvciBhIHNtYWxsCisgICBwcm9qZWN0IHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgc3VibW9kdWxlIGJ1dCBoYXZlIGEgcmVhc29uYWJsZQorICAgbnVtYmVyIG9mIHJlZnMuCisKKyAqICJnaXQgcHVzaCAtLWRyeS1ydW4gLS1yZWN1cnNlLXN1Ym1vZHVsZT1vbi1kZW1hbmQiIHdhc24ndAorICAgIi0tZHJ5LXJ1biIgaW4gdGhlIHN1Ym1vZHVsZXMuCisKKyAqIFRoZSBvdXRwdXQgZnJvbSAiZ2l0IHdvcmt0cmVlIGxpc3QiIHdhcyBtYWRlIGluIHJlYWRkaXIoKSBvcmRlciwKKyAgIGFuZCB3YXMgdW5zdGFibGUuCisKKyAqIG1lcmdldG9vbC48dG9vbD4udHJ1c3RFeGl0Q29kZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGRpZCBub3QgYXBwbHkKKyAgIHRvIGJ1aWx0LWluIHRvb2xzLCBidXQgbm93IGl0IGRvZXMuCisKKyAqICJnaXQgcDQiIExGUyBzdXBwb3J0IHdhcyBicm9rZW4gd2hlbiBMRlMgc3RvcmVzIGFuIGVtcHR5IGJsb2IuCisKKyAqIEZpeCBhIGNvcm5lciBjYXNlIGluIG1lcmdlLXJlY3Vyc2l2ZSByZWdyZXNzaW9uIHRoYXQgY3JlcHQgaW4KKyAgIGR1cmluZyAyLjEwIGRldmVsb3BtZW50IGN5Y2xlLgorCisgKiBVcGRhdGUgdGhlIGVycm9yIG1lc3NhZ2VzIGZyb20gdGhlIGR1bWItaHR0cCBjbGllbnQgd2hlbiBpdCBmYWlscworICAgdG8gb2J0YWluIGxvb3NlIG9iamVjdHM7IHdlIHVzZWQgdG8gZ2l2ZSBzZW5zaWJsZSBlcnJvciBtZXNzYWdlCisgICBvbmx5IHVwb24gNDA0IGJ1dCB3ZSBub3cgZm9yYmlkIHVuZXhwZWN0ZWQgcmVkaXJlY3RzIHRoYXQgbmVlZHMgdG8KKyAgIGJlIHJlcG9ydGVkIHdpdGggc29tZXRoaW5nIHNlbnNpYmxlLgorCisgKiBXaGVuIGRpZmYucmVuYW1lcyBjb25maWd1cmF0aW9uIGlzIG9uIChhbmQgd2l0aCBHaXQgMi45IGFuZCBsYXRlciwKKyAgIGl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggbWFkZSBpdCB3b3JzZSksICJnaXQgc3Rhc2giCisgICBtaXNiZWhhdmVkIGlmIGEgZmlsZSBpcyByZW1vdmVkIGFuZCBhbm90aGVyIGZpbGUgd2l0aCBhIHZlcnkKKyAgIHNpbWlsYXIgY29udGVudCBpcyBhZGRlZC4KKworICogImdpdCBkaWZmIC0tbm8taW5kZXgiIGRpZCBub3QgdGFrZSAiLS1uby1hYmJyZXYiIG9wdGlvbi4KKworICogImdpdCBkaWZmdG9vbCAtLWRpci1kaWZmIiBoYWQgYSBtaW5vciByZWdyZXNzaW9uIHdoZW4gc3RhcnRlZCBmcm9tCisgICBhIHN1YmRpcmVjdG9yeSwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1vbmx5IiAobm8gcGF0aHNwZWMpIHdpdGggZGlydHkgaW5kZXgKKyAgIG91Z2h0IHRvIGJlIGFuIGFjY2VwdGFibGUgd2F5IHRvIGNyZWF0ZSBhIG5ldyBjb21taXQgdGhhdCBkb2VzIG5vdAorICAgY2hhbmdlIGFueSBwYXRocywgYnV0IGl0IHdhcyBmb3JiaWRkZW4sIHBlcmhhcHMgYmVjYXVzZSBub2JvZHkKKyAgIG5lZWRlZCBpdCBzbyBmYXIuCisKKyAqIEEgcGF0aG5hbWUgdGhhdCBiZWdpbnMgd2l0aCAiLy8iIG9yICJcXCIgb24gV2luZG93cyBpcyBzcGVjaWFsIGJ1dAorICAgcGF0aCBub3JtYWxpemF0aW9uIGxvZ2ljIHdhcyB1bmF3YXJlIG9mIGl0LgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UiLCB3aGVuIHRoZXJlIGlzIG5vIG5ldyBjb21taXRzIG9uIG91ciBzaWRlIHNpbmNlCisgICB3ZSBmb3JrZWQgZnJvbSB0aGUgdXBzdHJlYW0sIHNob3VsZCBiZSBhYmxlIHRvIGZhc3QtZm9yd2FyZCB3aXRob3V0CisgICBpbnZva2luZyAiZ2l0IHJlYmFzZSIsIGJ1dCBpdCBkaWRuJ3QuCisKKyAqIFRoZSB3YXkgdG8gc3BlY2lmeSBob3RrZXlzIHRvICJ4eGRpZmYiIHRoYXQgaXMgdXNlZCBieSAiZ2l0CisgICBtZXJnZXRvb2wiIGhhcyBiZWVuIG1vZGVybml6ZWQgdG8gbWF0Y2ggcmVjZW50IHZlcnNpb25zIG9mIHh4ZGlmZi4KKworICogVW5saWtlICJnaXQgYW0gLS1hYm9ydCIsICJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCIgbW92ZWQgSEVBRCBiYWNrCisgICB0byB3aGVyZSBjaGVycnktcGljayBzdGFydGVkIHdoaWxlIHBpY2tpbmcgbXVsdGlwbGUgY2hhbmdlcywgd2hlbgorICAgdGhlIGNoZXJyeS1waWNrIHN0b3BwZWQgdG8gYXNrIGZvciBoZWxwIGZyb20gdGhlIHVzZXIsIGFuZCB0aGUgdXNlcgorICAgZGlkICJnaXQgcmVzZXQgLS1oYXJkIiB0byBhIGRpZmZlcmVudCBjb21taXQgaW4gb3JkZXIgdG8gcmUtYXR0ZW1wdAorICAgdGhlIG9wZXJhdGlvbi4KKworICogQ29kZSBjbGVhbnVwIGluIHNoYWxsb3cgYm91bmRhcnkgY29tcHV0YXRpb24uCisKKyAqIEEgcmVjZW50IHVwZGF0ZSB0byByZWNlaXZlLXBhY2sgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZHJvcCBnYXJiYWdlCisgICBvYmplY3RzIG1hZGUgaXQgY2xlYXIgdGhhdCBHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUyBjYW5ub3QKKyAgIGhhdmUgYSBwYXRobmFtZSB3aXRoIGEgY29sb24gaW4gaXQgKG5vIHN1cnByaXNlISksIGFuZCB0aGlzIGluIHR1cm4KKyAgIG1hZGUgaXQgaW1wb3NzaWJsZSB0byBwdXNoIGludG8gYSByZXBvc2l0b3J5IGF0IHN1Y2ggYSBwYXRoLiAgVGhpcworICAgaGFzIGJlZW4gZml4ZWQgYnkgaW50cm9kdWNpbmcgYSBxdW90aW5nIG1lY2hhbmlzbSB1c2VkIHdoZW4KKyAgIGFwcGVuZGluZyBzdWNoIGEgcGF0aCB0byB0aGUgY29sb24tc2VwYXJhdGVkIGxpc3QuCisKKyAqIFRoZSBmdW5jdGlvbiB1c2FnZV9tc2dfb3B0KCkgaGFzIGJlZW4gdXBkYXRlZCB0byBzYXkgImZhdGFsOiIKKyAgIGJlZm9yZSB0aGUgY3VzdG9tIG1lc3NhZ2UgcHJvZ3JhbXMgZ2l2ZSwgd2hlbiB0aGV5IHdhbnQgdG8gZGllCisgICB3aXRoIGEgbWVzc2FnZSBhYm91dCB3cm9uZyBjb21tYW5kIGxpbmUgb3B0aW9ucyBmb2xsb3dlZCBieSB0aGUKKyAgIHN0YW5kYXJkIHVzYWdlIHN0cmluZy4KKworICogImdpdCBpbmRleC1wYWNrIC0tc3RkaW4iIG5lZWRzIGFuIGFjY2VzcyB0byBhbiBleGlzdGluZyByZXBvc2l0b3J5LAorICAgYnV0ICJnaXQgaW5kZXgtcGFjayBmaWxlLnBhY2siIHRvIGdlbmVyYXRlIGFuIC5pZHggZmlsZSB0aGF0CisgICBjb3JyZXNwb25kcyB0byBhIHBhY2tmaWxlIGRvZXMgbm90LgorCisgKiBGaXggZm9yIE5ERUJVRyBidWlsZHMuCisKKyAqIEEgbGF6eSAiZ2l0IHB1c2giIHdpdGhvdXQgcmVmc3BlYyBkaWQgbm90IGludGVybmFsbHkgdXNlIGEgZnVsbHkKKyAgIHNwZWNpZmllZCByZWZzcGVjIHRvIHBlcmZvcm0gJ2N1cnJlbnQnLCAnc2ltcGxlJywgb3IgJ3Vwc3RyZWFtJworICAgcHVzaCwgY2F1c2luZyB1bm5lY2Vzc2FyeSAiYW1iaWd1b3VzIHJlZiIgZXJyb3JzLgorCisgKiAiZ2l0IHA0IiBtaXNiZWhhdmVkIHdoZW4gc3dhcHBpbmcgYSBkaXJlY3RvcnkgYW5kIGEgc3ltYm9saWMgbGluay4KKworICogRXZlbiB0aG91Z2ggYW4gZml4IHdhcyBhdHRlbXB0ZWQgaW4gR2l0IDIuOS4zIGRheXMsIGJ1dCBydW5uaW5nCisgICAiZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYiIGZyb20gYSBzdWJkaXJlY3RvcnkgbmV2ZXIgd29ya2VkLiBUaGlzCisgICBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBwNCIgdGhhdCB0cmFja3MgbXVsdGlwbGUgcDQgcGF0aHMgaW1wb3J0ZWQgYSBzaW5nbGUgY2hhbmdlbGlzdAorICAgdGhhdCB0b3VjaGVzIGZpbGVzIGluIHRoZXNlIG11bHRpcGxlIHBhdGhzIGFzIG9uZSBjb21taXQsIGZvbGxvd2VkCisgICBieSBtYW55IGVtcHR5IGNvbW1pdHMuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCisgKiBBIHBvdGVudGlhbCBidXQgdW5saWtlbHkgYnVmZmVyIG92ZXJmbG93IGluIFdpbmRvd3MgcG9ydCBoYXMgYmVlbgorICAgZml4ZWQuCisKKyAqIFdoZW4gdGhlIGh0dHAgc2VydmVyIGdpdmVzIGFuIGluY29tcGxldGUgcmVzcG9uc2UgdG8gYSBzbWFydC1odHRwCisgICBycGMgY2FsbCwgaXQgY291bGQgbGVhZCB0byBjbGllbnQgd2FpdGluZyBmb3IgYSBmdWxsIHJlc3BvbnNlIHRoYXQKKyAgIHdpbGwgbmV2ZXIgY29tZS4gIFRlYWNoIHRoZSBjbGllbnQgc2lkZSB0byBub3RpY2UgdGhpcyBjb25kaXRpb24KKyAgIGFuZCBhYm9ydCB0aGUgdHJhbnNmZXIuCisKKyAqIFNvbWUgcGxhdGZvcm1zIG5vIGxvbmdlciB1bmRlcnN0YW5kICJsYXRpbi0xIiB0aGF0IGlzIHN0aWxsIHNlZW4gaW4KKyAgIHRoZSB3aWxkIGluIGUtbWFpbCBoZWFkZXJzOyByZXBsYWNlIHRoZW0gd2l0aCAiaXNvLTg4NTktMSIgdGhhdCBpcworICAgbW9yZSB3aWRlbHkga25vd24gd2hlbiBjb252ZXJzaW9uIGZhaWxzIGZyb20vdG8gaXQuCisKKyAqIFVwZGF0ZSB0aGUgcHJvY2VkdXJlIHRvIGdlbmVyYXRlICJ0YWdzIiBmb3IgZGV2ZWxvcGVyIHN1cHBvcnQuCisKKyAqIFVwZGF0ZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgTWFjT1NYIHRlc3QgZW52aXJvbm1lbnQgdXNlZCBieQorICAgVHJhdmlzQ0kuCisKKyAqIEEgZmV3IGdpdC1zdm4gdXBkYXRlcy4KKworICogQ29tcHJlc3Npb24gc2V0dGluZyBmb3IgcHJvZHVjaW5nIHBhY2tmaWxlcyB3ZXJlIHNwcmVhZCBhY3Jvc3MKKyAgIHRocmVlIGNvZGVwYXRocywgb25lIG9mIHdoaWNoIGRpZCBub3QgaG9ub3IgYW55IGNvbmZpZ3VyYXRpb24uCisgICBVbmlmeSB0aGVzZSBzbyB0aGF0IGFsbCBvZiB0aGVtIGhvbm9yIGNvcmUuY29tcHJlc3Npb24gYW5kCisgICBwYWNrLmNvbXByZXNzaW9uIHZhcmlhYmxlcyB0aGUgc2FtZSB3YXkuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIHNvbWV0aW1lcyBtaXNoYW5kbGVkIHdoaWxlIHJlYmFsYW5jaW5nIG5vdGVzCisgICB0cmVlLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogUmVjZW50IHVwZGF0ZSB0byB0aGUgZGVmYXVsdCBhYmJyZXZpYXRpb24gbGVuZ3RoIHRoYXQgYXV0by1zY2FsZXMKKyAgIGxhY2tlZCBkb2N1bWVudGF0aW9uIHVwZGF0ZSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBMZWFrYWdlIG9mIGxvY2tmaWxlcyBpbiB0aGUgY29uZmlnIHN1YnN5c3RlbSBoYXMgYmVlbiBmaXhlZC4KKworICogSXQgaXMgbmF0dXJhbCB0aGF0ICJnaXQgZ2MgLS1hdXRvIiBtYXkgbm90IGF0dGVtcHQgdG8gcGFjaworICAgZXZlcnl0aGluZyBpbnRvIGEgc2luZ2xlIHBhY2ssIGFuZCB0aGVyZSBpcyBubyBwb2ludCBpbiB3YXJuaW5nCisgICB3aGVuIHRoZSB1c2VyIGhhcyBjb25maWd1cmVkIHRoZSBzeXN0ZW0gdG8gdXNlIHRoZSBwYWNrIGJpdG1hcCwKKyAgIGxlYWRpbmcgdG8gZGlzYWJsaW5nIGZ1cnRoZXIgImdjIi4KKworICogImdpdCBhcmNoaXZlIiBkaWQgbm90IHJlYWQgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZAorICAgZmFpbGVkIHRvIG5vdGljZSBhIGZpbGUgdGhhdCBpcyBtYXJrZWQgYXMgYmluYXJ5IHZpYSB0aGUgdXNlcmRpZmYKKyAgIGRyaXZlciBjb25maWd1cmF0aW9uLgorCisgKiAiZ2l0IGJsYW1lIC0tcG9yY2VsYWluIiBtaXNpZGVudGlmaWVkIHRoZSAicHJldmlvdXMiIDxjb21taXQsIHBhdGg+CisgICBwYWlyIChha2EgInNvdXJjZSIpIHdoZW4gY29udGVudHMgY2FtZSBmcm9tIHR3byBvciBtb3JlIGZpbGVzLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgd2l0aCBhIHJlY2VudCB1cGRhdGUgc3RhcnRlZCBzaG93aW5nIGFuIGluY29ycmVjdAorICAgY291bnQgd2hlbiBzcXVhc2hpbmcgbW9yZSB0aGFuIDEwIGNvbW1pdHMuCisKKyAqICJnaXQgPGNtZD4gQHtwdXNofSIgb24gYSBkZXRhY2hlZCBIRUFEIHVzZWQgdG8gc2VnZmF1bHQ7IGl0IGhhcworICAgYmVlbiBjb3JyZWN0ZWQgdG8gZXJyb3Igb3V0IHdpdGggYSBtZXNzYWdlLgorCisgKiBUaWdodGVuIGEgdGVzdCB0byBhdm9pZCBtaXN0YWtpbmcgYW4gZXh0ZW5kZWQgRVJFIHJlZ2V4cCBlbmdpbmUgYXMKKyAgIGEgUFJFIHJlZ2V4cCBlbmdpbmUuCisKKyAqIFR5cGluZyBeQyB0byBwYWdlciwgd2hpY2ggdXN1YWxseSBkb2VzIG5vdCBraWxsIGl0LCBraWxsZWQgR2l0IGFuZAorICAgdG9vayB0aGUgcGFnZXIgZG93biBhcyBhIGNvbGxhdGVyYWwgZGFtYWdlIGluIGNlcnRhaW4gcHJvY2Vzcy10cmVlCisgICBzdHJ1Y3R1cmUuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDI4ODUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjIudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0dpdCB2Mi4xMS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTEuMQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0LXNoZWxsIiByZWplY3RzIGEgcmVxdWVzdCB0byBzZXJ2ZSBhIHJlcG9zaXRvcnkgd2hvc2UgbmFtZQorICAgYmVnaW5zIHdpdGggYSBkYXNoLCB3aGljaCBtYWtlcyBpdCBubyBsb25nZXIgcG9zc2libGUgdG8gZ2V0IGl0CisgICBjb25mdXNlZCBpbnRvIHNwYXduaW5nIHNlcnZpY2UgcHJvZ3JhbXMgbGlrZSAiZ2l0LXVwbG9hZC1wYWNrIiB3aXRoCisgICBhbiBvcHRpb24gbGlrZSAiLS1oZWxwIiwgd2hpY2ggaW4gdHVybiB3b3VsZCBzcGF3biBhbiBpbnRlcmFjdGl2ZQorICAgcGFnZXIsIGluc3RlYWQgb2Ygd29ya2luZyB3aXRoIHRoZSByZXBvc2l0b3J5IHVzZXIgYXNrZWQgdG8gYWNjZXNzCisgICAoaS5lLiB0aGUgb25lIHdob3NlIG5hbWUgaXMgIi0taGVscCIpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlM2I3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTEuMy50eHQKQEAgLTAsMCArMSw0IEBACitHaXQgdjIuMTEuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBmb3J3YXJkLXBvcnRzIHRoZSBmaXggZm9yICJzc2g6Ly8uLi4iIFVSTCBmcm9tIEdpdCB2Mi43LjYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDRkYThlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjQudHh0CkBAIC0wLDAgKzEsMTcgQEAKK0dpdCB2Mi4xMS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTEuMworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGN2c3NlcnZlciIgbm8gbG9uZ2VyIGlzIGludm9rZWQgYnkgImdpdCBkYWVtb24iIGJ5IGRlZmF1bHQsCisgICBhcyBpdCBpcyBvbGQgYW5kIGxhcmdlbHkgdW5tYWludGFpbmVkLgorCisgKiBWYXJpb3VzIFBlcmwgc2NyaXB0cyBkaWQgbm90IHVzZSBzYWZlX3BpcGVfY2FwdHVyZSgpIGluc3RlYWQgb2YKKyAgIGJhY2t0aWNrcywgbGVhdmluZyB0aGVtIHN1c2NlcHRpYmxlIHRvIGVuZC11c2VyIGlucHV0LiAgVGhleSBoYXZlCisgICBiZWVuIGNvcnJlY3RlZC4KKworQ3JlZGl0cyBnbyB0byBqb2VybmNoZW4gPGpvZXJuY2hlbkBwaGVub2VsaXQuZGU+IGZvciBmaW5kaW5nIHRoZQordW5zYWZlIGNvbnN0cnVjdHMgaW4gImdpdCBjdnNzZXJ2ZXIiLCBhbmQgdG8gSmVmZiBLaW5nIGF0IEdpdEh1YiBmb3IKK2ZpbmRpbmcgYW5kIGZpeGluZyBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgaXNzdWUgaW4gb3RoZXIgc2NyaXB0cy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZjZhODMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuMC50eHQKQEAgLTAsMCArMSw1MDAgQEAKK0dpdCAyLjEyIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3Rlcy4KKworICogVXNlIG9mIGFuIGVtcHR5IHN0cmluZyB0aGF0IGlzIHVzZWQgZm9yICdldmVyeXRoaW5nIG1hdGNoZXMnIGlzCisgICBzdGlsbCB3YXJuZWQgYW5kIEdpdCBhc2tzIHVzZXJzIHRvIHVzZSBhIG1vcmUgZXhwbGljaXQgJy4nIGZvciB0aGF0CisgICBpbnN0ZWFkLiAgVGhlIGhvcGUgaXMgdGhhdCBleGlzdGluZyB1c2VycyB3aWxsIG5vdCBtaW5kIHRoaXMKKyAgIGNoYW5nZSwgYW5kIGV2ZW50dWFsbHkgdGhlIHdhcm5pbmcgY2FuIGJlIHR1cm5lZCBpbnRvIGEgaGFyZCBlcnJvciwKKyAgIHVwZ3JhZGluZyB0aGUgZGVwcmVjYXRpb24gaW50byByZW1vdmFsIG9mIHRoaXMgKG1pcylmZWF0dXJlLiAgVGhhdAorICAgaXMgbm90IHNjaGVkdWxlZCB0byBoYXBwZW4gaW4gdGhlIHVwY29taW5nIHJlbGVhc2UgKHlldCkuCisKKyAqIFRoZSBoaXN0b3JpY2FsIGFyZ3VtZW50IG9yZGVyICJnaXQgbWVyZ2UgPG1zZz4gSEVBRCA8Y29tbWl0Pi4uLiIKKyAgIGhhcyBiZWVuIGRlcHJlY2F0ZWQgZm9yIHF1aXRlIHNvbWUgdGltZSwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhCisgICBmdXR1cmUgcmVsZWFzZS4KKworICogQW4gYW5jaWVudCBzY3JpcHQgImdpdCByZWxpbmsiIGhhcyBiZWVuIHJlbW92ZWQuCisKKworVXBkYXRlcyBzaW5jZSB2Mi4xMQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogVmFyaW91cyB1cGRhdGVzIHRvICJnaXQgcDQiLgorCisgKiAiZ2l0IHA0IiBkaWRuJ3QgaW50ZXJhY3Qgd2l0aCB0aGUgaW50ZXJuYWwgb2YgLmdpdCBkaXJlY3RvcnkKKyAgIGNvcnJlY3RseSBpbiB0aGUgbW9kZXJuICJnaXQtd29ya3RyZWUiLWVuYWJsZWQgd29ybGQuCisKKyAqICJnaXQgYnJhbmNoIC0tbGlzdCIgYW5kIGZyaWVuZHMgbGVhcm5lZCAiLS1pZ25vcmUtY2FzZSIgb3B0aW9uIHRvCisgICBvcHRpb25hbGx5IHNvcnQgYnJhbmNoZXMgYW5kIHRhZ3MgY2FzZSBpbnNlbnNpdGl2ZWx5LgorCisgKiBJbiBhZGRpdGlvbiB0byAlKHN1YmplY3QpLCAlKGJvZHkpLCAibG9nIC0tcHJldHR5PWZvcm1hdDouLi4iCisgICBsZWFybmVkIGEgbmV3IHBsYWNlaG9sZGVyICUodHJhaWxlcnMpLgorCisgKiAiZ2l0IHJlYmFzZSIgbGVhcm5lZCAiLS1xdWl0IiBvcHRpb24sIHdoaWNoIGFsbG93cyBhIHVzZXIgdG8KKyAgIHJlbW92ZSB0aGUgbWV0YWRhdGEgbGVmdCBieSBhbiBlYXJsaWVyICJnaXQgcmViYXNlIiB0aGF0IHdhcworICAgbWFudWFsbHkgYWJvcnRlZCB3aXRob3V0IHVzaW5nICJnaXQgcmViYXNlIC0tYWJvcnQiLgorCisgKiAiZ2l0IGNsb25lIC0tcmVmZXJlbmNlICR0aGVyZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAkc3VwZXIiIGhhcyBiZWVuCisgICB0YXVnaHQgdG8gZ3Vlc3MgcmVwb3NpdG9yaWVzIHVzYWJsZSBhcyByZWZlcmVuY2VzIGZvciBzdWJtb2R1bGVzIG9mCisgICAkc3VwZXIgdGhhdCBhcmUgZW1iZWRkZWQgaW4gJHRoZXJlIHdoaWxlIG1ha2luZyBhIGNsb25lIG9mIHRoZQorICAgc3VwZXJwcm9qZWN0IGJvcnJvdyBvYmplY3RzIGZyb20gJHRoZXJlOyBleHRlbmQgdGhlIG1lY2hhbmlzbSB0bworICAgYWxzbyBhbGxvdyBzdWJtb2R1bGVzIG9mIHRoZXNlIHN1Ym1vZHVsZXMgdG8gYm9ycm93IHJlcG9zaXRvcmllcworICAgZW1iZWRkZWQgaW4gdGhlc2UgY2xvbmVzIG9mIHRoZSBzdWJtb2R1bGVzIGVtYmVkZGVkIGluIHRoZSBjbG9uZSBvZgorICAgdGhlIHN1cGVycHJvamVjdC4KKworICogUG9yY2VsYWluIHNjcmlwdHMgd3JpdHRlbiBpbiBQZXJsIGFyZSBnZXR0aW5nIGludGVybmF0aW9uYWxpemVkLgorCisgKiAiZ2l0IG1lcmdlIC0tY29udGludWUiIGhhcyBiZWVuIGFkZGVkIGFzIGEgc3lub255bSB0byAiZ2l0IGNvbW1pdCIKKyAgIHRvIGNvbmNsdWRlIGEgbWVyZ2UgdGhhdCBoYXMgc3RvcHBlZCBkdWUgdG8gY29uZmxpY3RzLgorCisgKiBGaW5lci1ncmFpbmVkIGNvbnRyb2wgb2Ygd2hhdCBwcm90b2NvbHMgYXJlIGFsbG93ZWQgZm9yIHRyYW5zcG9ydHMKKyAgIGR1cmluZyBjbG9uZS9mZXRjaC9wdXNoIGhhdmUgYmVlbiBlbmFibGVkIHZpYSBhIG5ldyBjb25maWd1cmF0aW9uCisgICBtZWNoYW5pc20uCisKKyAqICJnaXQgc2hvcnRsb2ciIGxlYXJuZWQgIi0tY29tbWl0dGVyIiBvcHRpb24gdG8gZ3JvdXAgY29tbWl0cyBieQorICAgY29tbWl0dGVyLCBpbnN0ZWFkIG9mIGF1dGhvci4KKworICogR2l0TEZTIGludGVncmF0aW9uIHdpdGggImdpdCBwNCIgaGFzIGJlZW4gdXBkYXRlZC4KKworICogVGhlIGlzYXR0eSgpIGVtdWxhdGlvbiBmb3IgV2luZG93cyBoYXMgYmVlbiB1cGRhdGVkIHRvIGVyYWRpY2F0ZQorICAgdGhlIHByZXZpb3VzIGhhY2sgdGhhdCBkZXBlbmRlZCBvbiBpbnRlcm5hbHMgb2YgKG9sZGVyKSBNU1ZDCisgICBydW50aW1lLgorCisgKiBTb21lIHBsYXRmb3JtcyBubyBsb25nZXIgdW5kZXJzdGFuZCAibGF0aW4tMSIgdGhhdCBpcyBzdGlsbCBzZWVuIGluCisgICB0aGUgd2lsZCBpbiBlLW1haWwgaGVhZGVyczsgcmVwbGFjZSB0aGVtIHdpdGggImlzby04ODU5LTEiIHRoYXQgaXMKKyAgIG1vcmUgd2lkZWx5IGtub3duIHdoZW4gY29udmVyc2lvbiBmYWlscyBmcm9tL3RvIGl0LgorCisgKiAiZ2l0IGdyZXAiIGhhcyBiZWVuIHRhdWdodCB0byBvcHRpb25hbGx5IHJlY3Vyc2UgaW50byBzdWJtb2R1bGVzLgorCisgKiAiZ2l0IHJtIiB1c2VkIHRvIHJlZnVzZSB0byByZW1vdmUgYSBzdWJtb2R1bGUgd2hlbiBpdCBoYXMgaXRzIG93bgorICAgZ2l0IHJlcG9zaXRvcnkgZW1iZWRkZWQgaW4gaXRzIHdvcmtpbmcgdHJlZS4gIEl0IGxlYXJuZWQgdG8gbW92ZQorICAgdGhlIHJlcG9zaXRvcnkgYXdheSB0byAkR0lUX0RJUi9tb2R1bGVzLyBvZiB0aGUgc3VwZXJwcm9qZWN0CisgICBpbnN0ZWFkLCBhbmQgYWxsb3cgdGhlIHN1Ym1vZHVsZSB0byBiZSBkZWxldGVkIChhcyBsb25nIGFzIHRoZXJlCisgICB3aWxsIGJlIG5vIGxvc3Mgb2YgbG9jYWwgbW9kaWZpY2F0aW9ucywgdGhhdCBpcykuCisKKyAqIEEgcmVjZW50IHVwZGF0ZXMgdG8gImdpdCBwNCIgd2FzIG5vdCB1c2FibGUgZm9yIG9sZGVyIHA0IGJ1dCBpdAorICAgY291bGQgYmUgbWFkZSB0byB3b3JrIHdpdGggbWluaW11bSBjaGFuZ2VzLiAgRG8gc28uCisKKyAqICJnaXQgZGlmZiIgbGVhcm5lZCBkaWZmLmludGVySHVua0NvbnRleHQgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICAgdGhhdCBnaXZlcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgaXRzIC0taW50ZXItaHVuay1jb250ZXh0IG9wdGlvbi4KKworICogVGhlIHByZXJlbGVhc2VTdWZmaXggZmVhdHVyZSBvZiB2ZXJzaW9uIGNvbXBhcmlzb24gdGhhdCBpcyB1c2VkIGluCisgICAiZ2l0IHRhZyAtbCIgZGlkIG5vdCBjb3JyZWN0bHkgd2hlbiB0d28gb3IgbW9yZSBwcmVyZWxlYXNlcyBmb3IgdGhlCisgICBzYW1lIHJlbGVhc2Ugd2VyZSBwcmVzZW50IChlLmcuIHdoZW4gMi4wLCAyLjAtYmV0YTEsIGFuZCAyLjAtYmV0YTIKKyAgIGFyZSB0aGVyZSBhbmQgdGhlIGNvZGUgbmVlZHMgdG8gY29tcGFyZSAyLjAtYmV0YTEgYW5kIDIuMC1iZXRhMikuCisKKyAqICJnaXQgc3VibW9kdWxlIHB1c2giIGxlYXJuZWQgIi0tcmVjdXJzZS1zdWJtb2R1bGVzPW9ubHkgb3B0aW9uIHRvCisgICBwdXNoIHN1Ym1vZHVsZXMgb3V0IHdpdGhvdXQgcHVzaGluZyB0aGUgdG9wLWxldmVsIHN1cGVycHJvamVjdC4KKworICogImdpdCB0YWciIGFuZCAiZ2l0IHZlcmlmeS10YWciIGxlYXJuZWQgdG8gcHV0IEdQRyB2ZXJpZmljYXRpb24KKyAgIHN0YXR1cyBpbiB0aGVpciAiLS1mb3JtYXQ9PHBsYWNlaG9sZGVycz4iIG91dHB1dCBmb3JtYXQuCisKKyAqIEFuIGFuY2llbnQgcmVwb3NpdG9yeSBjb252ZXJzaW9uIHRvb2wgbGVmdCBpbiBjb250cmliLyBoYXMgYmVlbgorICAgcmVtb3ZlZC4KKworICogImdpdCBzaG93LXJlZiBIRUFEIiB1c2VkIHdpdGggIi0tdmVyaWZ5IiBiZWNhdXNlIHRoZSB1c2VyIGlzIG5vdAorICAgaW50ZXJlc3RlZCBpbiBzZWVpbmcgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFELCBhbmQgdXNlZCB3aXRoCisgICAiLS1oZWFkIiBiZWNhdXNlIHRoZSB1c2VyIGRvZXMgbm90IHdhbnQgSEVBRCB0byBiZSBmaWx0ZXJlZCBvdXQsCisgICBpLmUuICJnaXQgc2hvdy1yZWYgLS1oZWFkIC0tdmVyaWZ5IEhFQUQiLCBkaWQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuCisKKyAqICJnaXQgc3VibW9kdWxlIGFkZCIgdXNlZCB0byBiZSBjb25mdXNlZCBhbmQgcmVmdXNlZCB0byBhZGQgYQorICAgbG9jYWxseSBjcmVhdGVkIHJlcG9zaXRvcnk7IHVzZXJzIGNhbiBub3cgdXNlICItLWZvcmNlIiBvcHRpb24KKyAgIHRvIGFkZCB0aGVtLgorICAgKG1lcmdlIDYxOWFjZmM3OGMgc2Ivc3VibW9kdWxlLWFkZC1mb3JjZSBsYXRlciB0byBtYWludCkuCisKKyAqIFNvbWUgcGVvcGxlIGZlZWwgdGhlIGRlZmF1bHQgc2V0IG9mIGNvbG9ycyB1c2VkIGJ5ICJnaXQgbG9nIC0tZ3JhcGgiCisgICByYXRoZXIgbGltaXRpbmcuICBBIG1lY2hhbmlzbSB0byBjdXN0b21pemUgdGhlIHNldCBvZiBjb2xvcnMgaGFzCisgICBiZWVuIGludHJvZHVjZWQuCisKKyAqICJnaXQgcmVhZC10cmVlIiBhbmQgaXRzIHVuZGVybHlpbmcgdW5wYWNrX3RyZWVzKCkgbWFjaGluZXJ5IGxlYXJuZWQKKyAgIHRvIHJlcG9ydCBwcm9ibGVtYXRpYyBwYXRocyBwcmVmaXhlZCB3aXRoIHRoZSAtLXN1cGVyLXByZWZpeCBvcHRpb24uCisKKyAqIFdoZW4gYSBzdWJtb2R1bGUgIkEiLCB3aGljaCBoYXMgYW5vdGhlciBzdWJtb2R1bGUgIkIiIG5lc3RlZCB3aXRoaW4KKyAgIGl0LCBpcyAiYWJzb3JiZWQiIGludG8gdGhlIHRvcC1sZXZlbCBzdXBlcnByb2plY3QsIHRoZSBpbm5lcgorICAgc3VibW9kdWxlICJCIiB1c2VkIHRvIGJlIGxlZnQgaW4gYSBzdHJhbmdlIHN0YXRlLiAgVGhlIGxvZ2ljIHRvCisgICBhZGp1c3QgdGhlIC5naXQgcG9pbnRlcnMgaW4gdGhlc2Ugc3VibW9kdWxlcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSB1c2VyIGNhbiBzcGVjaWZ5IGEgY3VzdG9tIHVwZGF0ZSBtZXRob2QgdGhhdCBpcyBydW4gd2hlbgorICAgInN1Ym1vZHVsZSB1cGRhdGUiIHVwZGF0ZXMgYW4gYWxyZWFkeSBjaGVja2VkIG91dCBzdWJtb2R1bGUuICBUaGlzCisgICB3YXMgaWdub3JlZCB3aGVuIGNoZWNraW5nIHRoZSBzdWJtb2R1bGUgb3V0IGZvciB0aGUgZmlyc3QgdGltZSBhbmQKKyAgIHdlIGluc3RlYWQgYWx3YXlzIGp1c3QgY2hlY2tlZCBvdXQgdGhlIGNvbW1pdCB0aGF0IGlzIGJvdW5kIHRvIHRoZQorICAgcGF0aCBpbiB0aGUgc3VwZXJwcm9qZWN0J3MgaW5kZXguCisKKyAqIFRoZSBjb21tYW5kIGxpbmUgY29tcGxldGlvbiAoaW4gY29udHJpYi8pIGxlYXJuZWQgdGhhdAorICAgImdpdCBkaWZmIC0tc3VibW9kdWxlPSIgY2FuIHRha2UgImRpZmYiIGFzIGEgcmVjZW50bHkgYWRkZWQgb3B0aW9uLgorCisgKiBUaGUgImNvcmUubG9nQWxsUmVmVXBkYXRlcyIgdGhhdCB1c2VkIHRvIGJlIGJvb2xlYW4gaGFzIGJlZW4KKyAgIGVuaGFuY2VkIHRvIHRha2UgJ2Fsd2F5cycgYXMgd2VsbCwgdG8gcmVjb3JkIHJlZiB1cGRhdGVzIHRvIHJlZnMKKyAgIG90aGVyIHRoYW4gdGhlIG9uZXMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgdXBkYXRlZCAoaS5lLiBicmFuY2hlcywKKyAgIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBhbmQgbm90ZXMpLgorCisgKiBDb21lcyB3aXRoIG1vcmUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gKGluIGNvbnRyaWIvKSBmb3IgcmVjZW50bHkKKyAgIGludHJvZHVjZWQgb3B0aW9ucy4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBDb21tYW5kcyB0aGF0IG9wZXJhdGUgb24gYSBsb2cgbWVzc2FnZSBhbmQgYWRkIGxpbmVzIHRvIHRoZSB0cmFpbGVyCisgICBibG9ja3MsIHN1Y2ggYXMgImZvcm1hdC1wYXRjaCAtcyIsICJjaGVycnktcGljayAoLXh8LXMpIiwgYW5kCisgICAiY29tbWl0IC1zIiwgaGF2ZSBiZWVuIHRhdWdodCB0byB1c2UgdGhlIGxvZ2ljIG9mIGFuZCBzaGFyZSB0aGUKKyAgIGNvZGUgd2l0aCAiZ2l0IGludGVycHJldC10cmFpbGVyIi4KKworICogVGhlIGRlZmF1bHQgVHJhdmlzLUNJIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIG5ld2VyIFA0IGFuZCBHaXRMRlMuCisKKyAqIFRoZSAiZmFzdCBoYXNoIiB0aGF0IGhhZCBkaXNhc3Ryb3VzIHBlcmZvcm1hbmNlIGlzc3VlcyBpbiBzb21lCisgICBjb3JuZXIgY2FzZXMgaGFzIGJlZW4gcmV0aXJlZCBmcm9tIHRoZSBpbnRlcm5hbCBkaWZmLgorCisgKiBUaGUgY2hhcmFjdGVyIHdpZHRoIHRhYmxlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gbWF0Y2ggVW5pY29kZSA5LjAKKworICogVXBkYXRlIHRoZSBwcm9jZWR1cmUgdG8gZ2VuZXJhdGUgInRhZ3MiIGZvciBkZXZlbG9wZXIgc3VwcG9ydC4KKworICogVGhlIGNvZGVmbG93IG9mIHNldHRpbmcgTk9BVElNRSBhbmQgQ0xPRVhFQyBvbiBmaWxlIGRlc2NyaXB0b3JzIEdpdAorICAgb3BlbnMgaGFzIGJlZW4gc2ltcGxpZmllZC4KKworICogImdpdCBkaWZmIiBhbmQgaXRzIGZhbWlseSBoYWQgdHdvIGV4cGVyaW1lbnRhbCBoZXVyaXN0aWNzIHRvIHNoaWZ0CisgICB0aGUgY29udGVudHMgb2YgYSBodW5rIHRvIG1ha2UgdGhlIHBhdGNoIGVhc2llciB0byByZWFkLiAgT25lIG9mCisgICB0aGVtIHR1cm5zIG91dCB0byBiZSBiZXR0ZXIgdGhhbiB0aGUgb3RoZXIsIHNvIGxlYXZlIG9ubHkgdGhlCisgICAiLS1pbmRlbnQtaGV1cmlzdGljIiBvcHRpb24gYW5kIHJlbW92ZSB0aGUgb3RoZXIgb25lLgorCisgKiBBIG5ldyBzdWJtb2R1bGUgaGVscGVyICJnaXQgc3VibW9kdWxlIGVtYmVkZ2l0ZGlycyIgdG8gbWFrZSBpdAorICAgZWFzaWVyIHRvIG1vdmUgZW1iZWRkZWQgLmdpdC8gZGlyZWN0b3J5IGZvciBzdWJtb2R1bGVzIGluIGEKKyAgIHN1cGVycHJvamVjdCB0byAuZ2l0L21vZHVsZXMvIChhbmQgcG9pbnQgdGhlIGxhdHRlciB3aXRoIHRoZSBmb3JtZXIKKyAgIHRoYXQgaXMgdHVybmVkIGludG8gYSAiZ2l0ZGlyOiIgZmlsZSkgaGFzIGJlZW4gYWRkZWQuCisKKyAqICJnaXQgcHVzaCBcXHNlcnZlclxzaGFyZVxkaXIiIGhhcyByZWNlbnRseSByZWdyZXNzZWQgYW5kIHRoZW4KKyAgIGZpeGVkLiAgQSB0ZXN0IGhhcyByZXRyb2FjdGl2ZWx5IGJlZW4gYWRkZWQgZm9yIHRoaXMgYnJlYWthZ2UuCisKKyAqIEJ1aWxkIHVwZGF0ZXMgZm9yIEN5Z3dpbi4KKworICogVGhlIGltcGxlbWVudGF0aW9uIG9mICJyZWFsX3BhdGgoKSIgd2FzIHRvIGdvIHRoZXJlIHdpdGggY2hkaXIoMikKKyAgIGFuZCBjYWxsIGdldGN3ZCgzKSwgYnV0IHRoaXMgb2J2aW91c2x5IHdvdWxkbid0IGJlIHVzYWJsZSBpbiBhCisgICB0aHJlYWRlZCBlbnZpcm9ubWVudC4gIFJld3JpdGUgaXQgdG8gbWFudWFsbHkgcmVzb2x2ZSByZWxhdGl2ZQorICAgcGF0aHMgaW5jbHVkaW5nIHN5bWJvbGljIGxpbmtzIGluIHBhdGggY29tcG9uZW50cy4KKworICogQWRqdXN0IGRvY3VtZW50YXRpb24gdG8gaGVscCBBc2NpaURvY3RvciByZW5kZXIgYmV0dGVyIHdoaWxlIG5vdAorICAgYnJlYWtpbmcgdGhlIHJlbmRlcmluZyBkb25lIGJ5IEFzY2lpRG9jLgorCisgKiBUaGUgc2VxdWVuY2VyIG1hY2hpbmVyeSBoYXMgYmVlbiBmdXJ0aGVyIGVuaGFuY2VkIHNvIHRoYXQgYSBsYXRlcgorICAgc2V0IG9mIHBhdGNoZXMgY2FuIHN0YXJ0IHVzaW5nIGl0IHRvIHJlaW1wbGVtZW50ICJyZWJhc2UgLWkiLgorCisgKiBVcGRhdGUgdGhlIGRlZmluaXRpb24gb2YgdGhlIE1hY09TWCB0ZXN0IGVudmlyb25tZW50IHVzZWQgYnkKKyAgIFRyYXZpc0NJLgorCisgKiBSZXdyaXRlIGEgc2NyaXB0ZWQgcG9yY2VsYWluICJnaXQgZGlmZnRvb2wiIGluIEMuCisKKyAqICJtYWtlIC1DIHQgZmFpbGVkIiB3aWxsIG5vdyBydW4gb25seSB0aGUgdGVzdHMgdGhhdCBmYWlsZWQgaW4gdGhlCisgICBwcmV2aW91cyBydW4uICBUaGlzIGlzIHVzYWJsZSBvbmx5IHdoZW4gcHJvdmUgaXMgbm90IHVzZSwgYW5kIGdpdmVzCisgICBhIHVzZWxlc3MgZXJyb3IgbWVzc2FnZSB3aGVuIHJ1biBhZnRlciAibWFrZSBjbGVhbiIsIGJ1dCBvdGhlcndpc2UKKyAgIGlzIHNlcnZpY2VhYmxlLgorCisgKiAidWNoYXIgWzQwXSIgdG8gInN0cnVjdCBvYmplY3RfaWQiIGNvbnZlcnNpb24gY29udGludWVzLgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCitGaXhlcyBzaW5jZSB2Mi4xMAorLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2Mi45IGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSB0aGUgbWFpbnRlbmFuY2UgcmVsZWFzZXMnCitub3RlcyBmb3IgZGV0YWlscykuCisKKyAqIFdlIG9mdGVuIGRlY2lkZSBpZiBhIHNlc3Npb24gaXMgaW50ZXJhY3RpdmUgYnkgY2hlY2tpbmcgaWYgdGhlCisgICBzdGFuZGFyZCBJL08gc3RyZWFtcyBhcmUgY29ubmVjdGVkIHRvIGEgVFRZLCBidXQgaXNhdHR5KCkgdGhhdAorICAgY29tZXMgd2l0aCBXaW5kb3dzIGluY29ycmVjdGx5IHJldHVybmVkIHRydWUgaWYgaXQgaXMgdXNlZCBvbiBOVUwKKyAgIChpLmUuIGFuIGVxdWl2YWxlbnQgdG8gL2Rldi9udWxsKS4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgc3ZuIiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoIHBhdGggY29tcG9uZW50cyB0aGF0IGFyZSAiMCIsIGFuZAorICAgc29tZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGl0IHVzZXMgd2VyZSBub3QgZG9jdW1lbnRlZC4KKworICogImdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYyIgZmFpbGVkIHdpdGggYSBtb3JlIHJlY2VudCBub3RhdGlvbiBsaWtlCisgICAiSEVBRF4tMSIgYW5kICJIRUFEXiEiLgorCisgKiBBbiBlbXB0eSBkaXJlY3RvcnkgaW4gYSB3b3JraW5nIHRyZWUgdGhhdCBjYW4gc2ltcGx5IGJlIG51a2VkIHVzZWQKKyAgIHRvIGludGVyZmVyZSB3aGlsZSBtZXJnaW5nIG9yIGNoZXJyeS1waWNraW5nIGEgY2hhbmdlIHRvIGNyZWF0ZSBhCisgICBzdWJtb2R1bGUgZGlyZWN0b3J5IHRoZXJlLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4uCisKKyAqIFRoZSBjb2RlIGluICJnaXQgcHVzaCIgdG8gY29tcHV0ZSBpZiBhbnkgY29tbWl0IGJlaW5nIHB1c2hlZCBpbiB0aGUKKyAgIHN1cGVycHJvamVjdCBiaW5kcyBhIGNvbW1pdCBpbiBhIHN1Ym1vZHVsZSB0aGF0IGhhc24ndCBiZWVuIHB1c2hlZAorICAgb3V0IHdhcyBvdmVybHkgaW5lZmZpY2llbnQsIG1ha2luZyBpdCB1bnVzYWJsZSBldmVuIGZvciBhIHNtYWxsCisgICBwcm9qZWN0IHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgc3VibW9kdWxlIGJ1dCBoYXZlIGEgcmVhc29uYWJsZQorICAgbnVtYmVyIG9mIHJlZnMuCisKKyAqICJnaXQgcHVzaCAtLWRyeS1ydW4gLS1yZWN1cnNlLXN1Ym1vZHVsZT1vbi1kZW1hbmQiIHdhc24ndAorICAgIi0tZHJ5LXJ1biIgaW4gdGhlIHN1Ym1vZHVsZXMuCisKKyAqIFRoZSBvdXRwdXQgZnJvbSAiZ2l0IHdvcmt0cmVlIGxpc3QiIHdhcyBtYWRlIGluIHJlYWRkaXIoKSBvcmRlciwKKyAgIGFuZCB3YXMgdW5zdGFibGUuCisKKyAqIG1lcmdldG9vbC48dG9vbD4udHJ1c3RFeGl0Q29kZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGRpZCBub3QgYXBwbHkKKyAgIHRvIGJ1aWx0LWluIHRvb2xzLCBidXQgbm93IGl0IGRvZXMuCisKKyAqICJnaXQgcDQiIExGUyBzdXBwb3J0IHdhcyBicm9rZW4gd2hlbiBMRlMgc3RvcmVzIGFuIGVtcHR5IGJsb2IuCisKKyAqIEEgY29ybmVyIGNhc2UgaW4gbWVyZ2UtcmVjdXJzaXZlIHJlZ3Jlc3Npb24gdGhhdCBjcmVwdCBpbgorICAgZHVyaW5nIDIuMTAgZGV2ZWxvcG1lbnQgY3ljbGUgaGFzIGJlZW4gZml4ZWQuCisKKyAqIFRyYW5zcG9ydCB3aXRoIGR1bWIgaHR0cCBjYW4gYmUgZm9vbGVkIGludG8gZm9sbG93aW5nIGZvcmVpZ24gVVJMcworICAgdGhhdCB0aGUgZW5kIHVzZXIgZG9lcyBub3QgaW50ZW5kIHRvLCBlc3BlY2lhbGx5IHdpdGggdGhlIHNlcnZlcgorICAgc2lkZSByZWRpcmVjdHMgYW5kIGh0dHAtYWx0ZXJuYXRlcyBtZWNoYW5pc20sIHdoaWNoIGNhbiBsZWFkIHRvCisgICBzZWN1cml0eSBpc3N1ZXMuICBUaWdodGVuIHRoZSByZWRpcmVjdGlvbiBhbmQgbWFrZSBpdCBtb3JlIG9idmlvdXMKKyAgIHRvIHRoZSBlbmQgdXNlciB3aGVuIGl0IGhhcHBlbnMuCisKKyAqIFVwZGF0ZSB0aGUgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgZHVtYi1odHRwIGNsaWVudCB3aGVuIGl0IGZhaWxzCisgICB0byBvYnRhaW4gbG9vc2Ugb2JqZWN0czsgd2UgdXNlZCB0byBnaXZlIHNlbnNpYmxlIGVycm9yIG1lc3NhZ2UKKyAgIG9ubHkgdXBvbiA0MDQgYnV0IHdlIG5vdyBmb3JiaWQgdW5leHBlY3RlZCByZWRpcmVjdHMgdGhhdCBuZWVkcyB0bworICAgYmUgcmVwb3J0ZWQgd2l0aCBzb21ldGhpbmcgc2Vuc2libGUuCisKKyAqIFdoZW4gZGlmZi5yZW5hbWVzIGNvbmZpZ3VyYXRpb24gaXMgb24gKGFuZCB3aXRoIEdpdCAyLjkgYW5kIGxhdGVyLAorICAgaXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBtYWRlIGl0IHdvcnNlKSwgImdpdCBzdGFzaCIKKyAgIG1pc2JlaGF2ZWQgaWYgYSBmaWxlIGlzIHJlbW92ZWQgYW5kIGFub3RoZXIgZmlsZSB3aXRoIGEgdmVyeQorICAgc2ltaWxhciBjb250ZW50IGlzIGFkZGVkLgorCisgKiAiZ2l0IGRpZmYgLS1uby1pbmRleCIgZGlkIG5vdCB0YWtlICItLW5vLWFiYnJldiIgb3B0aW9uLgorCisgKiAiZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYiIGhhZCBhIG1pbm9yIHJlZ3Jlc3Npb24gd2hlbiBzdGFydGVkIGZyb20KKyAgIGEgc3ViZGlyZWN0b3J5LCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLW9ubHkiIChubyBwYXRoc3BlYykgd2l0aCBkaXJ0eSBpbmRleAorICAgb3VnaHQgdG8gYmUgYW4gYWNjZXB0YWJsZSB3YXkgdG8gY3JlYXRlIGEgbmV3IGNvbW1pdCB0aGF0IGRvZXMgbm90CisgICBjaGFuZ2UgYW55IHBhdGhzLCBidXQgaXQgd2FzIGZvcmJpZGRlbiwgcGVyaGFwcyBiZWNhdXNlIG5vYm9keQorICAgbmVlZGVkIGl0IHNvIGZhci4KKworICogR2l0IDIuMTEgaGFkIGEgbWlub3IgcmVncmVzc2lvbiBpbiAibWVyZ2UgLS1mZi1vbmx5IiB0aGF0IGNvbXBldGVkCisgICB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IHNpbXVsdGFuZW91c2x5IGF0dGVtcHRlZCB0byB1cGRhdGUgdGhlCisgICBpbmRleC4gV2UgdXNlZCB0byBleHBsYWluIHdoYXQgd2VudCB3cm9uZyB3aXRoIGFuIGVycm9yIG1lc3NhZ2UsCisgICBidXQgdGhlIG5ldyBjb2RlIHNpbGVudGx5IGZhaWxlZC4gIFRoZSBlcnJvciBtZXNzYWdlIGhhcyBiZWVuCisgICByZXN1cnJlY3RlZC4KKworICogQSBwYXRobmFtZSB0aGF0IGJlZ2lucyB3aXRoICIvLyIgb3IgIlxcIiBvbiBXaW5kb3dzIGlzIHNwZWNpYWwgYnV0CisgICBwYXRoIG5vcm1hbGl6YXRpb24gbG9naWMgd2FzIHVuYXdhcmUgb2YgaXQuCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSIsIHdoZW4gdGhlcmUgaXMgbm8gbmV3IGNvbW1pdHMgb24gb3VyIHNpZGUgc2luY2UKKyAgIHdlIGZvcmtlZCBmcm9tIHRoZSB1cHN0cmVhbSwgc2hvdWxkIGJlIGFibGUgdG8gZmFzdC1mb3J3YXJkIHdpdGhvdXQKKyAgIGludm9raW5nICJnaXQgcmViYXNlIiwgYnV0IGl0IGRpZG4ndC4KKworICogVGhlIHdheSB0byBzcGVjaWZ5IGhvdGtleXMgdG8gInh4ZGlmZiIgdGhhdCBpcyB1c2VkIGJ5ICJnaXQKKyAgIG1lcmdldG9vbCIgaGFzIGJlZW4gbW9kZXJuaXplZCB0byBtYXRjaCByZWNlbnQgdmVyc2lvbnMgb2YgeHhkaWZmLgorCisgKiBVbmxpa2UgImdpdCBhbSAtLWFib3J0IiwgImdpdCBjaGVycnktcGljayAtLWFib3J0IiBtb3ZlZCBIRUFEIGJhY2sKKyAgIHRvIHdoZXJlIGNoZXJyeS1waWNrIHN0YXJ0ZWQgd2hpbGUgcGlja2luZyBtdWx0aXBsZSBjaGFuZ2VzLCB3aGVuCisgICB0aGUgY2hlcnJ5LXBpY2sgc3RvcHBlZCB0byBhc2sgZm9yIGhlbHAgZnJvbSB0aGUgdXNlciwgYW5kIHRoZSB1c2VyCisgICBkaWQgImdpdCByZXNldCAtLWhhcmQiIHRvIGEgZGlmZmVyZW50IGNvbW1pdCBpbiBvcmRlciB0byByZS1hdHRlbXB0CisgICB0aGUgb3BlcmF0aW9uLgorCisgKiBDb2RlIGNsZWFudXAgaW4gc2hhbGxvdyBib3VuZGFyeSBjb21wdXRhdGlvbi4KKworICogQSByZWNlbnQgdXBkYXRlIHRvIHJlY2VpdmUtcGFjayB0byBtYWtlIGl0IGVhc2llciB0byBkcm9wIGdhcmJhZ2UKKyAgIG9iamVjdHMgbWFkZSBpdCBjbGVhciB0aGF0IEdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTIGNhbm5vdAorICAgaGF2ZSBhIHBhdGhuYW1lIHdpdGggYSBjb2xvbiBpbiBpdCAobm8gc3VycHJpc2UhKSwgYW5kIHRoaXMgaW4gdHVybgorICAgbWFkZSBpdCBpbXBvc3NpYmxlIHRvIHB1c2ggaW50byBhIHJlcG9zaXRvcnkgYXQgc3VjaCBhIHBhdGguICBUaGlzCisgICBoYXMgYmVlbiBmaXhlZCBieSBpbnRyb2R1Y2luZyBhIHF1b3RpbmcgbWVjaGFuaXNtIHVzZWQgd2hlbgorICAgYXBwZW5kaW5nIHN1Y2ggYSBwYXRoIHRvIHRoZSBjb2xvbi1zZXBhcmF0ZWQgbGlzdC4KKworICogVGhlIGZ1bmN0aW9uIHVzYWdlX21zZ19vcHQoKSBoYXMgYmVlbiB1cGRhdGVkIHRvIHNheSAiZmF0YWw6IgorICAgYmVmb3JlIHRoZSBjdXN0b20gbWVzc2FnZSBwcm9ncmFtcyBnaXZlLCB3aGVuIHRoZXkgd2FudCB0byBkaWUKKyAgIHdpdGggYSBtZXNzYWdlIGFib3V0IHdyb25nIGNvbW1hbmQgbGluZSBvcHRpb25zIGZvbGxvd2VkIGJ5IHRoZQorICAgc3RhbmRhcmQgdXNhZ2Ugc3RyaW5nLgorCisgKiAiZ2l0IGluZGV4LXBhY2sgLS1zdGRpbiIgbmVlZHMgYW4gYWNjZXNzIHRvIGFuIGV4aXN0aW5nIHJlcG9zaXRvcnksCisgICBidXQgImdpdCBpbmRleC1wYWNrIGZpbGUucGFjayIgdG8gZ2VuZXJhdGUgYW4gLmlkeCBmaWxlIHRoYXQKKyAgIGNvcnJlc3BvbmRzIHRvIGEgcGFja2ZpbGUgZG9lcyBub3QuCisKKyAqIEZpeCBmb3IgTkRFQlVHIGJ1aWxkcy4KKworICogQSBsYXp5ICJnaXQgcHVzaCIgd2l0aG91dCByZWZzcGVjIGRpZCBub3QgaW50ZXJuYWxseSB1c2UgYSBmdWxseQorICAgc3BlY2lmaWVkIHJlZnNwZWMgdG8gcGVyZm9ybSAnY3VycmVudCcsICdzaW1wbGUnLCBvciAndXBzdHJlYW0nCisgICBwdXNoLCBjYXVzaW5nIHVubmVjZXNzYXJ5ICJhbWJpZ3VvdXMgcmVmIiBlcnJvcnMuCisKKyAqICJnaXQgcDQiIG1pc2JlaGF2ZWQgd2hlbiBzd2FwcGluZyBhIGRpcmVjdG9yeSBhbmQgYSBzeW1ib2xpYyBsaW5rLgorCisgKiBFdmVuIHRob3VnaCBhbiBmaXggd2FzIGF0dGVtcHRlZCBpbiBHaXQgMi45LjMgZGF5cywgYnV0IHJ1bm5pbmcKKyAgICJnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiIgZnJvbSBhIHN1YmRpcmVjdG9yeSBuZXZlciB3b3JrZWQuIFRoaXMKKyAgIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IHA0IiB0aGF0IHRyYWNrcyBtdWx0aXBsZSBwNCBwYXRocyBpbXBvcnRlZCBhIHNpbmdsZSBjaGFuZ2VsaXN0CisgICB0aGF0IHRvdWNoZXMgZmlsZXMgaW4gdGhlc2UgbXVsdGlwbGUgcGF0aHMgYXMgb25lIGNvbW1pdCwgZm9sbG93ZWQKKyAgIGJ5IG1hbnkgZW1wdHkgY29tbWl0cy4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqIEEgcG90ZW50aWFsIGJ1dCB1bmxpa2VseSBidWZmZXIgb3ZlcmZsb3cgaW4gV2luZG93cyBwb3J0IGhhcyBiZWVuCisgICBmaXhlZC4KKworICogV2hlbiB0aGUgaHR0cCBzZXJ2ZXIgZ2l2ZXMgYW4gaW5jb21wbGV0ZSByZXNwb25zZSB0byBhIHNtYXJ0LWh0dHAKKyAgIHJwYyBjYWxsLCBpdCBjb3VsZCBsZWFkIHRvIGNsaWVudCB3YWl0aW5nIGZvciBhIGZ1bGwgcmVzcG9uc2UgdGhhdAorICAgd2lsbCBuZXZlciBjb21lLiAgVGVhY2ggdGhlIGNsaWVudCBzaWRlIHRvIG5vdGljZSB0aGlzIGNvbmRpdGlvbgorICAgYW5kIGFib3J0IHRoZSB0cmFuc2Zlci4KKworICogQ29tcHJlc3Npb24gc2V0dGluZyBmb3IgcHJvZHVjaW5nIHBhY2tmaWxlcyB3ZXJlIHNwcmVhZCBhY3Jvc3MKKyAgIHRocmVlIGNvZGVwYXRocywgb25lIG9mIHdoaWNoIGRpZCBub3QgaG9ub3IgYW55IGNvbmZpZ3VyYXRpb24uCisgICBVbmlmeSB0aGVzZSBzbyB0aGF0IGFsbCBvZiB0aGVtIGhvbm9yIGNvcmUuY29tcHJlc3Npb24gYW5kCisgICBwYWNrLmNvbXByZXNzaW9uIHZhcmlhYmxlcyB0aGUgc2FtZSB3YXkuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIHNvbWV0aW1lcyBtaXNoYW5kbGVkIHdoaWxlIHJlYmFsYW5jaW5nIG5vdGVzCisgICB0cmVlLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogUmVjZW50IHVwZGF0ZSB0byB0aGUgZGVmYXVsdCBhYmJyZXZpYXRpb24gbGVuZ3RoIHRoYXQgYXV0by1zY2FsZXMKKyAgIGxhY2tlZCBkb2N1bWVudGF0aW9uIHVwZGF0ZSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBMZWFrYWdlIG9mIGxvY2tmaWxlcyBpbiB0aGUgY29uZmlnIHN1YnN5c3RlbSBoYXMgYmVlbiBmaXhlZC4KKworICogSXQgaXMgbmF0dXJhbCB0aGF0ICJnaXQgZ2MgLS1hdXRvIiBtYXkgbm90IGF0dGVtcHQgdG8gcGFjaworICAgZXZlcnl0aGluZyBpbnRvIGEgc2luZ2xlIHBhY2ssIGFuZCB0aGVyZSBpcyBubyBwb2ludCBpbiB3YXJuaW5nCisgICB3aGVuIHRoZSB1c2VyIGhhcyBjb25maWd1cmVkIHRoZSBzeXN0ZW0gdG8gdXNlIHRoZSBwYWNrIGJpdG1hcCwKKyAgIGxlYWRpbmcgdG8gZGlzYWJsaW5nIGZ1cnRoZXIgImdjIi4KKworICogImdpdCBhcmNoaXZlIiBkaWQgbm90IHJlYWQgdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZAorICAgZmFpbGVkIHRvIG5vdGljZSBhIGZpbGUgdGhhdCBpcyBtYXJrZWQgYXMgYmluYXJ5IHZpYSB0aGUgdXNlcmRpZmYKKyAgIGRyaXZlciBjb25maWd1cmF0aW9uLgorCisgKiAiZ2l0IGJsYW1lIC0tcG9yY2VsYWluIiBtaXNpZGVudGlmaWVkIHRoZSAicHJldmlvdXMiIDxjb21taXQsIHBhdGg+CisgICBwYWlyIChha2EgInNvdXJjZSIpIHdoZW4gY29udGVudHMgY2FtZSBmcm9tIHR3byBvciBtb3JlIGZpbGVzLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgd2l0aCBhIHJlY2VudCB1cGRhdGUgc3RhcnRlZCBzaG93aW5nIGFuIGluY29ycmVjdAorICAgY291bnQgd2hlbiBzcXVhc2hpbmcgbW9yZSB0aGFuIDEwIGNvbW1pdHMuCisKKyAqICJnaXQgPGNtZD4gQHtwdXNofSIgb24gYSBkZXRhY2hlZCBIRUFEIHVzZWQgdG8gc2VnZmF1bHQ7IGl0IGhhcworICAgYmVlbiBjb3JyZWN0ZWQgdG8gZXJyb3Igb3V0IHdpdGggYSBtZXNzYWdlLgorCisgKiBSdW5uaW5nICJnaXQgYWRkIGEvYiIgd2hlbiAiYSIgaXMgYSBzdWJtb2R1bGUgY29ycmVjdGx5IGVycm9yZWQKKyAgIG91dCwgYnV0IHdpdGhvdXQgYSBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2UuCisgICAobWVyZ2UgMmQ4MWM0OGZhNyBzYi9wYXRoc3BlYy1lcnJvcnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUeXBpbmcgXkMgdG8gcGFnZXIsIHdoaWNoIHVzdWFsbHkgZG9lcyBub3Qga2lsbCBpdCwga2lsbGVkIEdpdCBhbmQKKyAgIHRvb2sgdGhlIHBhZ2VyIGRvd24gYXMgYSBjb2xsYXRlcmFsIGRhbWFnZSBpbiBjZXJ0YWluIHByb2Nlc3MtdHJlZQorICAgc3RydWN0dXJlLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBtZXJnZXRvb2wiIHdpdGhvdXQgYW55IHBhdGhzcGVjIG9uIHRoZSBjb21tYW5kIGxpbmUgdGhhdCBpcworICAgcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkgYmVjYW1lIG5vLW9wIGluIEdpdCB2Mi4xMSBieSBtaXN0YWtlLCB3aGljaAorICAgaGFzIGJlZW4gZml4ZWQuCisKKyAqIFJldGlyZSBsb25nIHVudXNlZC91bm1haW50YWluZWQgZ2l0dmlldyBmcm9tIHRoZSBjb250cmliLyBhcmVhLgorICAgKG1lcmdlIDMxMjA5MjVjMjUgc2IvcmVtb3ZlLWdpdHZpZXcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaWdodGVuIGEgdGVzdCB0byBhdm9pZCBtaXN0YWtpbmcgYW4gZXh0ZW5kZWQgRVJFIHJlZ2V4cCBlbmdpbmUgYXMKKyAgIGEgUFJFIHJlZ2V4cCBlbmdpbmUuCisKKyAqIEFuIGVycm9yIG1lc3NhZ2Ugd2l0aCBhbiBBU0NJSSBjb250cm9sIGNoYXJhY3RlciBsaWtlICdccicgaW4gaXQKKyAgIGNhbiBhbHRlciB0aGUgbWVzc2FnZSB0byBoaWRlIGl0cyBlYXJseSBwYXJ0LCB3aGljaCBpcyBwcm9ibGVtYXRpYworICAgd2hlbiBhIHJlbW90ZSBzaWRlIGdpdmVzIHN1Y2ggYW4gZXJyb3IgbWVzc2FnZSB0aGF0IHRoZSBsb2NhbCBzaWRlCisgICB3aWxsIHJlbGF5IHdpdGggYSAicmVtb3RlOiAiIHByZWZpeC4KKyAgIChtZXJnZSBmMjkwMDg5ODc5IGprL3ZyZXBvcnQtc2FuaXRpemUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZzY2siIGluc3BlY3RzIGxvb3NlIG9iamVjdHMgbW9yZSBjYXJlZnVsbHkgbm93LgorICAgKG1lcmdlIGNjZTA0NGRmN2YgamsvbG9vc2Utb2JqZWN0LWZzY2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGNyYXNoaW5nIGJ1ZyBpbnRyb2R1Y2VkIGluIHYyLjExIHRpbWVmcmFtZSBoYXMgYmVlbiBmb3VuZCAoaXQgaXMKKyAgIHRyaWdnZXJhYmxlIG9ubHkgaW4gZmFzdC1pbXBvcnQpIGFuZCBmaXhlZC4KKyAgIChtZXJnZSBhYmQ1YTAwMjY4IGprL2NsZWFyLWRlbHRhLWJhc2UtY2FjaGUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogV2l0aCBhbiBhbnRpY2lwYXRvcnkgdHdlYWsgZm9yIHJlbW90ZXMgZGVmaW5lZCBpbiB+Ly5naXRjb25maWcKKyAgIChlLmcuICJyZW1vdGUub3JpZ2luLnBydW5lIiBzZXQgdG8gdHJ1ZSwgZXZlbiB0aG91Z2ggdGhlcmUgbWF5IG9yCisgICBtYXkgbm90IGFjdHVhbGx5IGJlICJvcmlnaW4iIHJlbW90ZSBkZWZpbmVkIGluIGEgcGFydGljdWxhciBHaXQKKyAgIHJlcG9zaXRvcnkpLCAiZ2l0IHJlbW90ZSByZW5hbWUiIGFuZCBvdGhlciBjb21tYW5kcyBtaXNpbnRlcnByZXRlZAorICAgYW5kIGJlaGF2ZWQgYXMgaWYgc3VjaCBhIG5vbi1leGlzdGluZyByZW1vdGUgYWN0dWFsbHkgZXhpc3RlZC4KKyAgIChtZXJnZSBlNDU5YjA3M2ZiIGpzL3JlbW90ZS1yZW5hbWUtd2l0aC1oYWxmLWNvbmZpZ3VyZWQtcmVtb3RlIGxhdGVyIHRvIG1haW50KS4KKworICogQSBmZXcgY29kZXBhdGhzIGhhZCB0byByZWx5IG9uIGEgZ2xvYmFsIHZhcmlhYmxlIHdoZW4gc29ydGluZworICAgZWxlbWVudHMgb2YgYW4gYXJyYXkgYmVjYXVzZSBzb3J0KDMpIEFQSSBkb2VzIG5vdCBhbGxvdyBleHRyYSBkYXRhCisgICB0byBiZSBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24uICBVc2UgcXNvcnRfcygpIHdoZW4KKyAgIG5hdGl2ZWx5IGF2YWlsYWJsZSwgYW5kIGEgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb2YgaXQgd2hlbiBub3QsCisgICB0byBlbGltaW5hdGUgdGhlIG5lZWQsIHdoaWNoIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBtYWtpbmcgdGhlCisgICBjb2RlcGF0aCByZWVudHJhbnQuCisKKyAqICJnaXQgZnNjayAtLWNvbm5lY3Rpdml0eS1jaGVjayIgd2FzIG5vdCB3b3JraW5nIGF0IGFsbC4KKyAgIChtZXJnZSBhMmIyMjg1NGJkIGprL2ZzY2stY29ubmVjdGl2aXR5LWNoZWNrLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIEFmdGVyIHN0YXJ0aW5nICJnaXQgcmViYXNlIC1pIiwgd2hpY2ggZmlyc3Qgb3BlbnMgdGhlIHVzZXIncyBlZGl0b3IKKyAgIHRvIGVkaXQgdGhlIHNlcmllcyBvZiBwYXRjaGVzIHRvIGFwcGx5LCBidXQgYmVmb3JlIHNhdmluZyB0aGUKKyAgIGNvbnRlbnRzIG9mIHRoYXQgZmlsZSwgImdpdCBzdGF0dXMiIGZhaWxlZCB0byBzaG93IHRoZSBjdXJyZW50CisgICBzdGF0ZSAoaS5lLiB5b3UgYXJlIGluIGFuIGludGVyYWN0aXZlIHJlYmFzZSBzZXNzaW9uLCBidXQgeW91IGhhdmUKKyAgIGFwcGxpZWQgbm8gc3RlcHMgeWV0KSBjb3JyZWN0bHkuCisgICAobWVyZ2UgZGY5ZGVkNDk4NCBqcy9zdGF0dXMtcHJlLXJlYmFzZS1pIGxhdGVyIHRvIG1haW50KS4KKworICogVGVzdCB0d2VhayBmb3IgRnJlZUJTRCB3aGVyZSAvdXNyL2Jpbi91bnppcCBpcyB1bnN1aXRhYmxlIHRvIHJ1bgorICAgb3VyIHRlc3RzIGJ1dCAvdXNyL2xvY2FsL2Jpbi91bnppcCBpcyB1c2FibGUuCisgICAobWVyZ2UgZDk4YjJjNWZjZSBqcy91bnppcC1pbi11c3ItYmluLXdvcmthcm91bmQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHA0IiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoIG11bHRpcGxlIGdpdC1wNC5tYXBVc2VyIGVudHJpZXMgb24KKyAgIFdpbmRvd3MuCisgICAobWVyZ2UgYzNjMmIwNTc3NiBndi9taW5ndy1wNC1tYXB1c2VyIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBoZWxwIiBlbnVtZXJhdGVzIGV4ZWN1dGFibGUgZmlsZXMgaW4gJFBBVEg7IHRoZSBpbXBsZW1lbnRhdGlvbgorICAgb2YgImlzIHRoaXMgZmlsZSBleGVjdXRhYmxlPyIgb24gV2luZG93cyBoYXMgYmVlbiBvcHRpbWl6ZWQuCisgICAobWVyZ2UgYzc1NTAxNWY3OSBodi9taW5ndy1oZWxwLWlzLWV4ZWN1dGFibGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUZXN0IHR3ZWFrcyBmb3IgdGhvc2Ugd2hvIGhhdmUgZGVmYXVsdCBBQ0wgaW4gdGhlaXIgZ2l0IHNvdXJjZSB0cmVlCisgICB0aGF0IGludGVyZmVyZSB3aXRoIHRoZSB1bWFzayB0ZXN0LgorICAgKG1lcmdlIGQ1NDlkMjEzMDcgbW0vcmVzZXQtZmFjbC1iZWZvcmUtdW1hc2stdGVzdCBsYXRlciB0byBtYWludCkuCisKKyAqIE5hbWVzIG9mIHRoZSB2YXJpb3VzIGhvb2sgc2NyaXB0cyBtdXN0IGJlIHNwZWxsZWQgZXhhY3RseSwgYnV0IG9uCisgICBXaW5kb3dzLCBhbiAuZXhlIGJpbmFyeSBtdXN0IGJlIG5hbWVkIHdpdGggLmV4ZSBzdWZmaXg7IG5vdGljZQorICAgJEdJVF9ESVIvaG9va3MvPGhvb2tuYW1lPi5leGUgYXMgYSB2YWxpZCA8aG9va25hbWU+IGhvb2suCisgICAobWVyZ2UgMjM1YmU1MWZiZSBqcy9taW5ndy1ob29rcy13aXRoLWV4ZS1zdWZmaXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBc2NpaWRvY3RvciwgYW4gYWx0ZXJuYXRpdmUgcmVpbXBsZW1lbnRhdGlvbiBvZiBBc2NpaURvYywgc3RpbGwKKyAgIG5lZWRzIHNvbWUgY2hhbmdlcyB0byB3b3JrIHdpdGggZG9jdW1lbnRzIG1lYW50IHRvIGJlIGZvcm1hdHRlZAorICAgd2l0aCBBc2NpaURvYy4gICJtYWtlIFVTRV9BU0NJSURPQ1RPUj1ZZXNQbGVhc2UiIHRvIHVzZSBpdCBvdXQgb2YKKyAgIHRoZSBib3ggdG8gZG9jdW1lbnQgb3VyIHBhZ2VzIGlzIGdldHRpbmcgY2xvc2VyIHRvIHJlYWxpdHkuCisKKyAqIENvcnJlY3QgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gKGluIGNvbnRyaWIvKSBvbiAiZ2l0IHN2biIKKyAgIChtZXJnZSAyY2JhZDE3NjQyIGV3L2NvbXBsZXRlLXN2bi1hdXRob3JzaGlwLW9wdGlvbnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBJbmNvcnJlY3QgdXNhZ2UgaGVscCBtZXNzYWdlIGZvciAiZ2l0IHdvcmt0cmVlIHBydW5lIiBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSAyNDg4ZGNhYjIyIHBzL3dvcmt0cmVlLXBydW5lLWhlbHAtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQWRqdXN0IGEgcGVyZiB0ZXN0IHRvIG5ldyB3b3JsZCBvcmRlciB3aGVyZSBjb21tYW5kcyB0aGF0IGRvCisgICByZXF1aXJlIGEgcmVwb3NpdG9yeSBhcmUgcmVhbGx5IHN0cmljdCBhYm91dCBoYXZpbmcgYSByZXBvc2l0b3J5LgorICAgKG1lcmdlIGM4NjAwMGMxYTcgcnMvcDUzMDItY3JlYXRlLXJlcG9zaXRvcmllcy1iZWZvcmUtdGVzdHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGxvZyAtLWdyYXBoIiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoICItLW5hbWUtb25seSIsIGV2ZW4gdGhvdWdoCisgICBvdGhlciBmb3JtcyBvZiAiZGlmZiIgb3V0cHV0IHdlcmUgaGFuZGxlZCBjb3JyZWN0bHkuCisgICAobWVyZ2UgZjUwMjJiNWZlZCBqay9sb2ctZ3JhcGgtbmFtZS1vbmx5IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHB1c2gtb3B0aW9ucyBnaXZlbiB2aWEgdGhlICItLXB1c2gtb3B0aW9ucyIgb3B0aW9uIHdlcmUgbm90CisgICBwYXNzZWQgdGhyb3VnaCB0byBleHRlcm5hbCByZW1vdGUgaGVscGVycyBzdWNoIGFzICJzbWFydCBIVFRQIiB0aGF0CisgICBhcmUgaW52b2tlZCB2aWEgdGhlIHRyYW5zcG9ydCBoZWxwZXIuCisKKyAqIFRoZSBkb2N1bWVudGF0aW9uIGV4cGxhaW5lZCB3aGF0ICJnaXQgc3Rhc2giIGRvZXMgdG8gdGhlIHdvcmtpbmcKKyAgIHRyZWUgKGFmdGVyIHN0YXNoaW5nIGF3YXkgdGhlIGxvY2FsIGNoYW5nZXMpIGluIHRlcm1zIG9mICJyZXNldAorICAgLS1oYXJkIiwgd2hpY2ggd2FzIGV4cG9zaW5nIGFuIHVubmVjZXNzYXJ5IGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgIChtZXJnZSAyMGE3ZTA2MTcyIHRnL3N0YXNoLWRvYy1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiAiZ2l0IHA0IiBpbXBvcnRzIGNoYW5nZWxpc3QgdGhhdCByZW1vdmVzIHBhdGhzLCBpdCBmYWlsZWQgdG8KKyAgIGNvbnZlcnQgcGF0aG5hbWVzIHdoZW4gdGhlIHA0IHVzZWQgZW5jb2RpbmcgZGlmZmVyZW50IGZyb20gdGhlIG9uZQorICAgdXNlZCBvbiB0aGUgR2l0IHNpZGUuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBhOGIwNTE2MmU4IGxzL3A0LXBhdGgtZW5jb2RpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIG5ldyBjb2NjaW5lbGxlIHJ1bGUgdGhhdCBjYXRjaGVzIGEgY2hlY2sgb2YgIXBvaW50ZXIgYmVmb3JlIHRoZQorICAgcG9pbnRlciBpcyBmcmVlKDMpZCwgd2hpY2ggbW9zdCBsaWtlbHkgaXMgYSBidWcuCisgICAobWVyZ2UgZWM2Y2QxNGM3YSBycy9jb2NjaS1jaGVjay1mcmVlLW9ubHktbnVsbCBsYXRlciB0byBtYWludCkuCisKKyAqICJscy1maWxlcyIgcnVuIHdpdGggcGF0aHNwZWMgaGFzIGJlZW4gbWljcm8tb3B0aW1pemVkIHRvIGF2b2lkCisgICBoYXZpbmcgdG8gbWVtbW92ZSgzKSB1bm5lY2Vzc2FyeSBieXRlcy4KKyAgIChtZXJnZSA5NmY2ZDNmNjFhIHJzL2xzLWZpbGVzLXBhcnRpYWwtb3B0aW0gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGhvdGZpeCBmb3IgYSB0b3BpYyBhbHJlYWR5IGluICdtYXN0ZXInLgorICAgKG1lcmdlIGE0ZDkyZDU3OWYganMvbWluZ3ctaXNhdHR5IGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgbWlub3IgZG9jLCB0ZXN0IGFuZCBidWlsZCB1cGRhdGVzIGFuZCBjb2RlIGNsZWFudXBzLgorICAgKG1lcmdlIGYyNjI3ZDliMTkgc2Ivc3VibW9kdWxlLWNvbmZpZy1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzODRmMWExNjdiIHNiL3VucGFjay10cmVlcy1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4NzQ0NDRiNzA0IHJoL2RpZmYtb3JkZXJmaWxlLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZWFmZDVkOTQ4MyBjdy9kb2Mtc2lnbi1vZmYgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDBhYWFkNDE1YmMgcnMvYWJzb2x1dGUtcGF0aGR1cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDQzMmRkNmI1YiBycy9yZWNlaXZlLXBhY2stY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTQwYTM5OGU5YyBzZy9tYWlsbWFwLXNlbGYgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDIwOWRmMjY5YTYgbmQvcmV2LWxpc3QtYWxsLWluY2x1ZGVzLUhFQUQtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5NDFiOWM1MjcwIHNiL2RvYy11bmlmeS1ib3R0b20gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDJhYWYzN2I2MmMgamsvZG9jLXJlbW90ZS1oZWxwZXJzLW1hcmt1cC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGU5MTQ2MWIzMzIgamsvZG9jLXN1Ym1vZHVsZS1tYXJrdXAtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4YWI5NzQwZDlmIGRwL3N1Ym1vZHVsZS1kb2MtbWFya3VwLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDgzOGNiYzIyZiBqay90ZW1wZmlsZS1mZXJyb3ItZmNsb3NlLWNvbmZ1c2lvbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTE1YTQwYWRkNiBkci9kb2MtY2hlY2stcmVmLWZvcm1hdC1ub3JtYWxpemUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDEzM2YwYTI5OWQgZ3AvZG9jdW1lbnQtZG90ZmlsZXMtaW4tdGVtcGxhdGVzLWFyZS1ub3QtY29waWVkIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyYjM1YTlmNGM3IGJjL2JsYW1lLWRvYy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdlODIzODgwMjQgcHMvZG9jLWdjLWFnZ3Jlc3NpdmUtZGVwdGgtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5OTkzYTdjNWYxIGJjL3dvcmt0cmVlLWRvYy1maXgtZGV0YWNoZWQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGU1MTllY2NkZjQgcnQvYWxpZ24tYWRkLWktaGVscC10ZXh0IGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzRmN2RiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjEudHh0CkBAIC0wLDAgKzEsNDEgQEAKK0dpdCB2Mi4xMi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTIKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFJlZHVjZSBhdXRoZW50aWNhdGlvbiByb3VuZC10cmlwIG92ZXIgSFRUUCB3aGVuIHRoZSBzZXJ2ZXIgc3VwcG9ydHMKKyAgIGp1c3QgYSBzaW5nbGUgYXV0aGVudGljYXRpb24gbWV0aG9kLiAgVGhpcyBhbHNvIGltcHJvdmVzIHRoZQorICAgYmVoYXZpb3VyIHdoZW4gR2l0IGlzIG1pc2NvbmZpZ3VyZWQgdG8gZW5hYmxlIGh0dHAuZW1wdHlBdXRoCisgICBhZ2FpbnN0IGEgc2VydmVyIHRoYXQgZG9lcyBub3QgYXV0aGVudGljYXRlIHdpdGhvdXQgYSB1c2VybmFtZQorICAgKGkuZS4gbm90IHVzaW5nIEtlcmJlcm9zIGV0Yy4sIHdoaWNoIG1ha2VzIGh0dHAuZW1wdHlBdXRoCisgICBwb2ludGxlc3MpLgorCisgKiBXaW5kb3dzIHBvcnQgd2FudHMgdG8gdXNlIE9wZW5TU0wncyBpbXBsZW1lbnRhdGlvbiBvZiBTSEEtMQorICAgcm91dGluZXMsIHNvIGxldCB0aGVtLgorCisgKiBBZGQgMzItYml0IExpbnV4IHZhcmlhbnQgdG8gdGhlIHNldCBvZiBwbGF0Zm9ybXMgdG8gYmUgdGVzdGVkIHdpdGgKKyAgIFRyYXZpcyBDSS4KKworICogV2hlbiBhIHJlZGlyZWN0ZWQgaHR0cCB0cmFuc3BvcnQgZ2V0cyBhbiBlcnJvciBkdXJpbmcgdGhlCisgICByZWRpcmVjdGVkIHJlcXVlc3QsIHdlIGlnbm9yZWQgdGhlIGVycm9yIHdlIGdvdCBmcm9tIHRoZSBzZXJ2ZXIsCisgICBhbmQgZW5kZWQgdXAgZ2l2aW5nIGEgbm90LXNvLXVzZWZ1bCBlcnJvciBtZXNzYWdlLgorCisgKiBUaGUgcGF0Y2ggc3ViY29tbWFuZCBvZiAiZ2l0IGFkZCAtaSIgd2FzIG1lYW50IHRvIGhhdmUgcGF0aHMKKyAgIHNlbGVjdGlvbiBwcm9tcHQganVzdCBsaWtlIG90aGVyIHN1YmNvbW1hbmQsIHVubGlrZSAiZ2l0IGFkZCAtcCIKKyAgIGRpcmVjdGx5IGp1bXBzIHRvIGh1bmsgc2VsZWN0aW9uLiAgUmVjZW50bHksIHRoaXMgd2FzIGJyb2tlbiBhbmQKKyAgICJhZGQgLWkiIGxvc3QgdGhlIHBhdGhzIHNlbGVjdGlvbiBkaWFsb2csIGJ1dCBpdCBub3cgaGFzIGJlZW4KKyAgIGZpeGVkLgorCisgKiBHaXQgdjIuMTIgd2FzIHNoaXBwZWQgd2l0aCBhbiBlbWJhcnJhc3NpbmcgYnJlYWthZ2Ugd2hlcmUgdmFyaW91cworICAgb3BlcmF0aW9ucyB0aGF0IHZlcmlmeSBwYXRocyBnaXZlbiBmcm9tIHRoZSB1c2VyIHN0b3BwZWQgZHlpbmcgd2hlbgorICAgc2VlaW5nIGFuIGlzc3VlLCBhbmQgaW5zdGVhZCBsYXRlciB0cmlnZ2VyaW5nIHNlZ2ZhdWx0LgorCisgKiBUaGUgY29kZSB0byBwYXJzZSAiZ2l0IGxvZyAtTC4uLiIgY29tbWFuZCBsaW5lIHdhcyBidWdneSB3aGVuIHRoZXJlCisgICBhcmUgbWFueSByYW5nZXMgc3BlY2lmaWVkIHdpdGggLUw7IG92ZXJydW4gb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIKKyAgIGhhcyBiZWVuIGZpeGVkLgorCisgKiBUaGUgY29tbWFuZC1saW5lIHBhcnNpbmcgb2YgImdpdCBsb2cgLUwiIGNvcGllZCBpbnRlcm5hbCBkYXRhCisgICBzdHJ1Y3R1cmVzIHVzaW5nIGluY29ycmVjdCBzaXplIG9uIElMUDMyIHN5c3RlbXMuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MTkzOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuMi50eHQKQEAgLTAsMCArMSw4MyBAQAorR2l0IHYyLjEyLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMi4xCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgc3RhdHVzIC0tcG9yY2VsYWluIiBpcyBzdXBwb3NlZCB0byBnaXZlIGEgc3RhYmxlIG91dHB1dCwgYnV0IGEKKyAgIGZldyBzdHJpbmdzIHdlcmUgbGVmdCBhcyB0cmFuc2xhdGFibGUgYnkgbWlzdGFrZS4KKworICogIkR1bWIgaHR0cCIgdHJhbnNwb3J0IHVzZWQgdG8gbWlzcGFyc2UgYSBub25zZW5zZSBodHRwLWFsdGVybmF0ZXMKKyAgIHJlc3BvbnNlLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBkaWZmIC0tcXVpZXQiIHJlbGllcyBvbiB0aGUgc2l6ZSBmaWVsZCBpbiBkaWZmX2ZpbGVzcGVjIHRvIGJlCisgICBjb3JyZWN0bHkgcG9wdWxhdGVkLCBidXQgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYygpIGhlbHBlciBmdW5jdGlvbgorICAgbWFkZSBhbiBpbmNvcnJlY3Qgc2hvcnQtY3V0IHdoZW4gYXNrZWQgb25seSB0byBwb3B1bGF0ZSB0aGUgc2l6ZQorICAgZmllbGQgZm9yIHBhdGhzIHRoYXQgbmVlZCB0byBnbyB0aHJvdWdoIGNvbnZlcnRfdG9fZ2l0KCkgKGUuZy4gQ1JMRgorICAgY29udmVyc2lvbikuCisKKyAqIFRoZXJlIGlzIG5vIG5lZWQgZm9yIFB5dGhvbiBvbmx5IHRvIGdpdmUgYSBmZXcgbWVzc2FnZXMgdG8gdGhlCisgICBzdGFuZGFyZCBlcnJvciBzdHJlYW0sIGJ1dCB3ZSBzb21laG93IGRpZC4KKworICogQSBsZWFrIGluIGEgY29kZXBhdGggdG8gcmVhZCBmcm9tIGEgcGFja2VkIG9iamVjdCBpbiAocmFyZSkgY2FzZXMKKyAgIGhhcyBiZWVuIHBsdWdnZWQuCisKKyAqICJnaXQgdXBsb2FkLXBhY2siLCB3aGljaCBpcyBhIGNvdW50ZXItcGFydCBvZiAiZ2l0IGZldGNoIiwgZGlkIG5vdAorICAgcmVwb3J0IGEgcmVxdWVzdCBmb3IgYSByZWYgdGhhdCB3YXMgbm90IGFkdmVydGlzZWQgYXMgaW52YWxpZC4KKyAgIFRoaXMgaXMgZ2VuZXJhbGx5IG5vdCBhIHByb2JsZW0gKGJlY2F1c2UgImdpdCBmZXRjaCIgd2lsbCBzdG9wCisgICBiZWZvcmUgbWFraW5nIHN1Y2ggYSByZXF1ZXN0KSwgYnV0IGlzIHRoZSByaWdodCB0aGluZyB0byBkby4KKworICogQSAiZ2MubG9nIiBmaWxlIGxlZnQgYnkgYSBiYWNrZ3JvdW5kZWQgImdjIC0tYXV0byIgZGlzYWJsZXMgZnVydGhlcgorICAgYXV0b21hdGljIGdjOyBpdCBoYXMgYmVlbiB0YXVnaHQgdG8gcnVuIGF0IGxlYXN0IG9uY2UgYSBkYXkgKGJ5CisgICBkZWZhdWx0KSBieSBpZ25vcmluZyBhIHN0YWxlICJnYy5sb2ciIGZpbGUgdGhhdCBpcyB0b28gb2xkLgorCisgKiAiZ2l0IHJlbW90ZSBybSBYIiwgd2hlbiBhIGJyYW5jaCBoYXMgcmVtb3RlIFggY29uZmlndXJlZCBhcyB0aGUKKyAgIHZhbHVlIG9mIGl0cyBicmFuY2guKi5yZW1vdGUsIHRyaWVkIHRvIHJlbW92ZSBicmFuY2guKi5yZW1vdGUgYW5kCisgICBicmFuY2guKi5tZXJnZSBhbmQgZmFpbGVkIGlmIGVpdGhlciBpcyB1bnNldC4KKworICogQSBjYWxsZXIgb2YgdGVtcGZpbGUgQVBJIHRoYXQgdXNlcyBzdGRpbyBpbnRlcmZhY2UgdG8gd3JpdGUgdG8KKyAgIGZpbGVzIG1heSBpZ25vcmUgZXJyb3JzIHdoaWxlIHdyaXRpbmcsIHdoaWNoIGlzIGRldGVjdGVkIHdoZW4KKyAgIHRlbXBmaWxlIGlzIGNsb3NlZCAod2l0aCBhIGNhbGwgdG8gZmVycm9yKCkpLiAgQnkgdGhhdCB0aW1lLCB0aGUKKyAgIG9yaWdpbmFsIGVycm5vIHRoYXQgbWF5IGhhdmUgdG9sZCB1cyB3aGF0IHdlbnQgd3JvbmcgaXMgbGlrZWx5IHRvCisgICBiZSBsb25nIGdvbmUgYW5kIHdhcyBvdmVyd3JpdHRlbiBieSBhbiBpcnJlbGV2YW50IHZhbHVlLgorICAgY2xvc2VfdGVtcGZpbGUoKSBub3cgcmVzZXRzIGVycm5vIHRvIEVJTyB0byBtYWtlIGVycm5vIGF0IGxlYXN0CisgICBwcmVkaWN0YWJsZS4KKworICogImdpdCBzaG93LWJyYW5jaCIgZXhwZWN0ZWQgdGhlcmUgd2VyZSBvbmx5IHZlcnkgc2hvcnQgYnJhbmNoIG5hbWVzCisgICBpbiB0aGUgcmVwb3NpdG9yeSBhbmQgdXNlZCBhIGZpeGVkLWxlbmd0aCBidWZmZXIgdG8gaG9sZCB0aGVtCisgICB3aXRob3V0IGNoZWNraW5nIGZvciBvdmVyZmxvdy4KKworICogVGhlIGNvZGUgdGhhdCBwYXJzZXMgaGVhZGVyIGZpZWxkcyBpbiB0aGUgY29tbWl0IG9iamVjdCBoYXMgYmVlbgorICAgdXBkYXRlZCBmb3IgKG1pY3JvKXBlcmZvcm1hbmNlIGFuZCBjb2RlIGh5Z2llbmUuCisKKyAqIEEgdGVzdCB0aGF0IGNyZWF0ZXMgYSBjb25mdXNpbmcgYnJhbmNoIHdob3NlIG5hbWUgaXMgSEVBRCBoYXMgYmVlbgorICAgY29ycmVjdGVkIG5vdCB0byBkbyBzby4KKworICogIkNjOiIgb24gdGhlIHRyYWlsZXIgcGFydCBkb2VzIG5vdCBoYXZlIHRvIGNvbmZvcm0gdG8gUkZDIHN0cmljdGx5LAorICAgdW5saWtlIGluIHRoZSBlLW1haWwgaGVhZGVyLiAgImdpdCBzZW5kLWVtYWlsIiBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBpZ25vcmUgYW55dGhpbmcgYWZ0ZXIgJz4nIHdoZW4gcGlja2luZyBhZGRyZXNzZXMsIHRvIGFsbG93IG5vbi1hZGRyZXNzCisgICBjcnVmdCBsaWtlICIgIyBzdGFibGUgNC40IiBhZnRlciB0aGUgYWRkcmVzcy4KKworICogImdpdCBwdXNoIiBoYWQgYSBoYW5kZnVsIG9mIGNvZGVwYXRocyB0aGF0IGNvdWxkIGxlYWQgdG8gYSBkZWFkbG9jaworICAgd2hlbiB1bmV4cGVjdGVkIGVycm9yIGhhcHBlbmVkLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogQ29kZSB0byByZWFkIHN1Ym1vZHVsZS48bmFtZT4uaWdub3JlIGNvbmZpZyBkaWQgbm90IHN0YXRlIHRoZQorICAgdmFyaWFibGUgbmFtZSBjb3JyZWN0bHkgd2hlbiBnaXZpbmcgYW4gZXJyb3IgbWVzc2FnZSBkaWFnbm9zaW5nCisgICBtaXNjb25maWd1cmF0aW9uLgorCisgKiAiZ2l0IGxzLXJlbW90ZSIgYW5kICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSIgYXJlIGRlc2lnbmVkIHRvIHdvcmsKKyAgIHdpdGhvdXQgYmVpbmcgaW4gYSBkaXJlY3RvcnkgdW5kZXIgR2l0J3MgY29udHJvbC4gIEhvd2V2ZXIsIHJlY2VudAorICAgdXBkYXRlcyByZXZlYWxlZCB0aGF0IHdlIHJhbmRvbWx5IGxvb2sgaW50byBhIGRpcmVjdG9yeSBjYWxsZWQKKyAgIC5naXQvIHdpdGhvdXQgYWN0dWFsbHkgZG9pbmcgbmVjZXNzYXJ5IHNldC11cCB3aGVuIHdvcmtpbmcgaW4gYQorICAgcmVwb3NpdG9yeS4gIFN0b3AgZG9pbmcgc28uCisKKyAqIFRoZSBjb2RlIHRvIHBhcnNlIHRoZSBjb21tYW5kIGxpbmUgImdpdCBncmVwIDxwYXR0ZXJucz4uLi4gPHJldj4KKyAgIFtbLS1dIDxwYXRoc3BlYz4uLi5dIiBoYXMgYmVlbiBjbGVhbmVkIHVwLCBhbmQgYSBoYW5kZnVsIG9mIGJ1Z3MKKyAgIGhhdmUgYmVlbiBmaXhlZCAoZS5nLiB3ZSB1c2VkIHRvIGNoZWNrICItLSIgaWYgaXQgaXMgYSByZXYpLgorCisgKiBUaGUgY29kZSB0byBwYXJzZSAiZ2l0IC1jIFZBUj1WQUwgY21kIiBhbmQgc2V0IGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIGZvciB0aGUgZHVyYXRpb24gb2YgY21kIGhhZCB0d28gc21hbGwgYnVncywgd2hpY2ggaGF2ZQorICAgYmVlbiBmaXhlZC4KKyAgIFRoaXMgc3VwZXJzZWRlcyBqYy9jb25maWctY2FzZS1jbWRsaW5lIHRvcGljIHRoYXQgaGFzIGJlZW4gZGlzY2FyZGVkLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmNhODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjMudHh0CkBAIC0wLDAgKzEsNjQgQEAKK0dpdCB2Mi4xMi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTIuMgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgInBhcnNlX2NvbmZpZ19rZXkoKSIgQVBJIGZ1bmN0aW9uIGhhcyBiZWVuIGNsZWFuZWQgdXAuCisKKyAqIEFuIGhlbHBlciBmdW5jdGlvbiB0byBtYWtlIGl0IGVhc2llciB0byBhcHBlbmQgdGhlIHJlc3VsdCBmcm9tCisgICByZWFsX3BhdGgoKSB0byBhIHN0cmJ1ZiBoYXMgYmVlbiBhZGRlZC4KKworICogVGhlIHQvcGVyZiBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlIHdhcyBub3QgcHJlcGFyZWQgdG8gdGVzdCBub3Qgc28KKyAgIG9sZCB2ZXJzaW9ucyBvZiBHaXQsIGJ1dCBub3cgaXQgY292ZXJzIHZlcnNpb25zIG9mIEdpdCB0aGF0IGFyZSBub3QKKyAgIHNvIGFuY2llbnQuCisKKyAqIFBpY2tpbmcgdHdvIHZlcnNpb25zIG9mIEdpdCBhbmQgcnVubmluZyB0ZXN0cyB0byBtYWtlIHN1cmUgdGhlCisgICBvbGRlciBvbmUgYW5kIHRoZSBuZXdlciBvbmUgaW50ZXJvcGVyYXRlIGhhcHBpbHkgaGFzIG5vdyBiZWNvbWUKKyAgIHBvc3NpYmxlLgorCisgKiBUZWFjaCB0aGUgImRlYnVnIiBoZWxwZXIgdXNlZCBpbiB0aGUgdGVzdCBmcmFtZXdvcmsgdGhhdCBhbGxvd3MgYQorICAgY29tbWFuZCB0byBydW4gdW5kZXIgImdkYiIgdG8gbWFrZSB0aGUgc2Vzc2lvbiBpbnRlcmFjdGl2ZS4KKworICogImdpdCByZXBhY2sgLS1kZXB0aD08bj4iIGZvciBhIGxvbmcgdGltZSBidXN0ZWQgdGhlIHNwZWNpZmllZCBkZXB0aAorICAgd2hlbiByZXVzaW5nIGRlbHRhIGZyb20gZXhpc3RpbmcgcGFja3MuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogdXNlci5lbWFpbCB0aGF0IGNvbnNpc3RzIG9mIG9ubHkgY3J1ZnQgY2hhcnMgc2hvdWxkIGNvbnNpc3RlbnRseQorICAgZXJyb3Igb3V0LCBidXQgZGlkbid0LgorCisgKiBBIGZldyB0ZXN0cyB3ZXJlIHJ1biBjb25kaXRpb25hbGx5IHVuZGVyIChyYXJlKSBjb25kaXRpb25zIHdoZXJlCisgICB0aGV5IGNhbm5vdCBiZSBydW4gKGxpa2UgcnVubmluZyBjdnMgdGVzdHMgdW5kZXIgJ3Jvb3QnIGFjY291bnQpLgorCisgKiAiZ2l0IGJyYW5jaCBAIiBjcmVhdGVkIHJlZnMvaGVhZHMvQCBhcyBhIGJyYW5jaCwgYW5kIGluIGdlbmVyYWwgdGhlCisgICBjb2RlIHRoYXQgaGFuZGxlZCBAey0xfSBhbmQgQHt1cHN0cmVhbX0gd2FzIGEgYml0IHRvbyBsb29zZSBpbgorICAgZGlzYW1iaWd1YXRpbmcuCisKKyAqICJnaXQgZmV0Y2giIHRoYXQgcmVxdWVzdHMgYSBjb21taXQgYnkgb2JqZWN0IG5hbWUsIHdoZW4gdGhlIG90aGVyCisgICBzaWRlIGRvZXMgbm90IGFsbG93IHN1Y2ggYW4gcmVxdWVzdCwgZmFpbGVkIHdpdGhvdXQgbXVjaAorICAgZXhwbGFuYXRpb24uCisKKyAqICJnaXQgZmlsdGVyLWJyYW5jaCAtLXBydW5lLWVtcHR5IiBkcm9wcyBhIHNpbmdsZS1wYXJlbnQgY29tbWl0IHRoYXQKKyAgIGJlY29tZXMgYSBuby1vcCwgYnV0IGRpZCBub3QgZHJvcCBhIHJvb3QgY29tbWl0IHdob3NlIHRyZWUgaXMgZW1wdHkuCisKKyAqIFJlY2VudCB2ZXJzaW9ucyBvZiBHaXQgdHJlYXRzIGh0dHAgYWx0ZXJuYXRlcyAodXNlZCBpbiBkdW1iIGh0dHAKKyAgIHRyYW5zcG9ydCkganVzdCBsaWtlIEhUVFAgcmVkaXJlY3RzIGFuZCByZXF1aXJlcyB0aGUgY2xpZW50IHRvCisgICBlbmFibGUgZm9sbG93aW5nIGl0LCBkdWUgdG8gc2VjdXJpdHkgY29uY2VybnMuICBCdXQgd2UgZm9yZ290IHRvCisgICBnaXZlIGEgd2FybmluZyB3aGVuIHdlIGRlY2lkZSBub3QgdG8gaG9ub3IgdGhlIGFsdGVybmF0ZXMuCisKKyAqIE5PX1BUSFJFQURTIGJ1aWxkIGhhcyBiZWVuIGJyb2tlbiBmb3Igc29tZSB0aW1lOyBub3cgZml4ZWQuCisKKyAqIEZpeCBmb3IgcG90ZW50aWFsIHNlZ3YgaW50cm9kdWNlZCBpbiB2Mi4xMS4wIGFuZCBsYXRlciAoYWxzbworICAgdjIuMTAuMikuCisKKyAqIEEgZmV3IHVudGVybWluYXRlZCBoZXJlIGRvY3VtZW50cyBpbiB0ZXN0cyB3ZXJlIGZpeGVkLCB3aGljaCBpbgorICAgdHVybiByZXZlYWxlZCBpbmNvcnJlY3QgZXhwZWN0YXRpb25zIHRoZSB0ZXN0cyBtYWtlLiBUaGVzZSB0ZXN0cworICAgaGF2ZSBiZWVuIHVwZGF0ZWQuCisKKyAqICJnaXQtc2hlbGwiIHJlamVjdHMgYSByZXF1ZXN0IHRvIHNlcnZlIGEgcmVwb3NpdG9yeSB3aG9zZSBuYW1lCisgICBiZWdpbnMgd2l0aCBhIGRhc2gsIHdoaWNoIG1ha2VzIGl0IG5vIGxvbmdlciBwb3NzaWJsZSB0byBnZXQgaXQKKyAgIGNvbmZ1c2VkIGludG8gc3Bhd25pbmcgc2VydmljZSBwcm9ncmFtcyBsaWtlICJnaXQtdXBsb2FkLXBhY2siIHdpdGgKKyAgIGFuIG9wdGlvbiBsaWtlICItLWhlbHAiLCB3aGljaCBpbiB0dXJuIHdvdWxkIHNwYXduIGFuIGludGVyYWN0aXZlCisgICBwYWdlciwgaW5zdGVhZCBvZiB3b3JraW5nIHdpdGggdGhlIHJlcG9zaXRvcnkgdXNlciBhc2tlZCB0byBhY2Nlc3MKKyAgIChpLmUuIHRoZSBvbmUgd2hvc2UgbmFtZSBpcyAiLS1oZWxwIikuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNTY5MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuNC50eHQKQEAgLTAsMCArMSw0IEBACitHaXQgdjIuMTIuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBmb3J3YXJkLXBvcnRzIHRoZSBmaXggZm9yICJzc2g6Ly8uLi4iIFVSTCBmcm9tIEdpdCB2Mi43LjYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMi41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmE3M2NmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjUudHh0CkBAIC0wLDAgKzEsMTcgQEAKK0dpdCB2Mi4xMi41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTIuNAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGN2c3NlcnZlciIgbm8gbG9uZ2VyIGlzIGludm9rZWQgYnkgImdpdCBkYWVtb24iIGJ5IGRlZmF1bHQsCisgICBhcyBpdCBpcyBvbGQgYW5kIGxhcmdlbHkgdW5tYWludGFpbmVkLgorCisgKiBWYXJpb3VzIFBlcmwgc2NyaXB0cyBkaWQgbm90IHVzZSBzYWZlX3BpcGVfY2FwdHVyZSgpIGluc3RlYWQgb2YKKyAgIGJhY2t0aWNrcywgbGVhdmluZyB0aGVtIHN1c2NlcHRpYmxlIHRvIGVuZC11c2VyIGlucHV0LiAgVGhleSBoYXZlCisgICBiZWVuIGNvcnJlY3RlZC4KKworQ3JlZGl0cyBnbyB0byBqb2VybmNoZW4gPGpvZXJuY2hlbkBwaGVub2VsaXQuZGU+IGZvciBmaW5kaW5nIHRoZQordW5zYWZlIGNvbnN0cnVjdHMgaW4gImdpdCBjdnNzZXJ2ZXIiLCBhbmQgdG8gSmVmZiBLaW5nIGF0IEdpdEh1YiBmb3IKK2ZpbmRpbmcgYW5kIGZpeGluZyBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgaXNzdWUgaW4gb3RoZXIgc2NyaXB0cy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNDdiNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMC50eHQKQEAgLTAsMCArMSw2MTggQEAKK0dpdCAyLjEzIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3Rlcy4KKworICogVXNlIG9mIGFuIGVtcHR5IHN0cmluZyBhcyBhIHBhdGhzcGVjIGVsZW1lbnQgdGhhdCBpcyB1c2VkIGZvcgorICAgJ2V2ZXJ5dGhpbmcgbWF0Y2hlcycgaXMgc3RpbGwgd2FybmVkIGFuZCBHaXQgYXNrcyB1c2VycyB0byB1c2UgYQorICAgbW9yZSBleHBsaWNpdCAnLicgZm9yIHRoYXQgaW5zdGVhZC4gIFRoZSBob3BlIGlzIHRoYXQgZXhpc3RpbmcKKyAgIHVzZXJzIHdpbGwgbm90IG1pbmQgdGhpcyBjaGFuZ2UsIGFuZCBldmVudHVhbGx5IHRoZSB3YXJuaW5nIGNhbiBiZQorICAgdHVybmVkIGludG8gYSBoYXJkIGVycm9yLCB1cGdyYWRpbmcgdGhlIGRlcHJlY2F0aW9uIGludG8gcmVtb3ZhbCBvZgorICAgdGhpcyAobWlzKWZlYXR1cmUuICBUaGF0IGlzIG5vdCBzY2hlZHVsZWQgdG8gaGFwcGVuIGluIHRoZSB1cGNvbWluZworICAgcmVsZWFzZSAoeWV0KS4KKworICogVGhlIGhpc3RvcmljYWwgYXJndW1lbnQgb3JkZXIgImdpdCBtZXJnZSA8bXNnPiBIRUFEIDxjb21taXQ+Li4uIgorICAgaGFzIGJlZW4gZGVwcmVjYXRlZCBmb3IgcXVpdGUgc29tZSB0aW1lLCBhbmQgaXMgbm93IHJlbW92ZWQuCisKKyAqIFRoZSBkZWZhdWx0IGxvY2F0aW9uICJ+Ly5naXQtY3JlZGVudGlhbC1jYWNoZS9zb2NrZXQiIGZvciB0aGUKKyAgIHNvY2tldCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGNyZWRlbnRpYWwtY2FjaGUgZGFlbW9uIGhhcworICAgYmVlbiBtb3ZlZCB0byAifi8uY2FjaGUvZ2l0L2NyZWRlbnRpYWwvc29ja2V0Ii4KKworICogR2l0IG5vdyBhdm9pZHMgYmxpbmRseSBmYWxsaW5nIGJhY2sgdG8gIi5naXQiIHdoZW4gdGhlIHNldHVwCisgICBzZXF1ZW5jZSBzYWlkIHdlIGFyZSBfbm90XyBpbiBHaXQgcmVwb3NpdG9yeS4gIEEgY29ybmVyIGNhc2UgdGhhdAorICAgaGFwcGVucyB0byB3b3JrIHJpZ2h0IG5vdyBtYXkgYmUgYnJva2VuIGJ5IGEgY2FsbCB0byBkaWUoIkJVRyIpLgorICAgV2UndmUgdHJpZWQgaGFyZCB0byBsb2NhdGUgc3VjaCBjYXNlcyBhbmQgZml4ZWQgdGhlbSwgYnV0IHRoZXJlCisgICBtaWdodCBzdGlsbCBiZSBjYXNlcyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkLS1idWcgcmVwb3J0cyBhcmUKKyAgIGdyZWF0bHkgYXBwcmVjaWF0ZWQuCisKKworVXBkYXRlcyBzaW5jZSB2Mi4xMgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogImdpdCBkZXNjcmliZSIgYW5kICJnaXQgbmFtZS1yZXYiIGhhdmUgYmVlbiB0YXVnaHQgdG8gdGFrZSBtb3JlCisgICB0aGFuIG9uZSByZWZuYW1lIHBhdHRlcm5zIHRvIHJlc3RyaWN0IHRoZSBzZXQgb2YgcmVmcyB0byBiYXNlIHRoZWlyCisgICBuYW1pbmcgb3V0cHV0IG9uLCBhbmQgYWxzbyBsZWFybmVkIHRvIHRha2UgbmVnYXRpdmUgcGF0dGVybnMgdG8KKyAgIG5hbWUgcmVmcyBub3QgdG8gYmUgdXNlZCBmb3IgbmFtaW5nIHZpYSB0aGVpciAiLS1leGNsdWRlIiBvcHRpb24uCisKKyAqIERlbGV0aW9uIG9mIGEgYnJhbmNoICJmb28vYmFyIiBjb3VsZCByZW1vdmUgLmdpdC9yZWZzL2hlYWRzL2ZvbworICAgb25jZSB0aGVyZSBubyBsb25nZXIgaXMgYW55IG90aGVyIGJyYW5jaCB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoCisgICAiZm9vLyIsIGJ1dCB3ZSBkaWRuJ3QgZG8gc28gc28gZmFyLiAgTm93IHdlIGRvLgorCisgKiBXaGVuICJnaXQgbWVyZ2UiIGRldGVjdHMgYSBwYXRoIHRoYXQgaXMgcmVuYW1lZCBpbiBvbmUgaGlzdG9yeQorICAgd2hpbGUgdGhlIG90aGVyIGhpc3RvcnkgZGVsZXRlZCAob3IgbW9kaWZpZWQpIGl0LCBpdCBub3cgcmVwb3J0cworICAgYm90aCBwYXRocyB0byBoZWxwIHRoZSB1c2VyIHVuZGVyc3RhbmQgd2hhdCBpcyBnb2luZyBvbiBpbiB0aGUgdHdvCisgICBoaXN0b3JpZXMgYmVpbmcgbWVyZ2VkLgorCisgKiBUaGUgPHVybD4gcGFydCBpbiAiaHR0cC48dXJsPi48dmFyaWFibGU+IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisgICBjYW4gbm93IGJlIHNwZWxsZWQgd2l0aCAnKicgdGhhdCBzZXJ2ZXMgYXMgd2lsZGNhcmQuCisgICBFLmcuICJodHRwLmh0dHBzOi8vKi5leGFtcGxlLmNvbS5wcm94eSIgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUKKyAgIHByb3h5IHVzZWQgZm9yIGh0dHBzOi8vYS5leGFtcGxlLmNvbSwgaHR0cHM6Ly9iLmV4YW1wbGUuY29tLCBldGMuLAorICAgaS5lLiBhbnkgaG9zdCBpbiB0aGUgZXhhbXBsZS5jb20gZG9tYWluLgorCisgKiAiZ2l0IHRhZyIgZGlkIG5vdCBsZWF2ZSB1c2VmdWwgbWVzc2FnZSB3aGVuIGFkZGluZyBhIG5ldyBlbnRyeSB0bworICAgcmVmbG9nOyB0aGlzIHdhcyBsZWZ0IHVubm90aWNlZCBmb3IgYSBsb25nIHRpbWUgYmVjYXVzZSByZWZzL3RhZ3MvKgorICAgZG9lc24ndCBrZWVwIHJlZmxvZyBieSBkZWZhdWx0LgorCisgKiBUaGUgIm5lZ2F0aXZlIiBwYXRoc3BlYyBmZWF0dXJlIHdhcyBzb21ld2hhdCBtb3JlIGN1bWJlcnNvbWUgdG8gdXNlCisgICB0aGFuIG5lY2Vzc2FyeSBpbiB0aGF0IGl0cyBzaG9ydC1oYW5kIHVzZWQgIiEiIHdoaWNoIG5lZWRlZCB0byBiZQorICAgZXNjYXBlZCBmcm9tIHNoZWxscywgYW5kIGl0IHJlcXVpcmVkICJleGNsdWRlIGZyb20gd2hhdD8iIHNwZWNpZmllZC4KKworICogVGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIGZvciBzc2ggaW52b2NhdGlvbiBuZWVkcyB0byBiZSB0d2Vha2VkIGZvcgorICAgc29tZSBpbXBsZW1lbnRhdGlvbnMgb2YgU1NIIChlLmcuIFB1VFRZIHBsaW5rIHdhbnRzICItUCA8cG9ydD4iCisgICB3aGlsZSBPcGVuU1NIIHdhbnRzICItcCA8cG9ydD4iIHRvIHNwZWNpZnkgcG9ydCB0byBjb25uZWN0IHRvKSwgYW5kCisgICB0aGUgdmFyaWFudCB3YXMgZ3Vlc3NlZCB3aGVuIEdJVF9TU0ggZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgdXNlZAorICAgdG8gc3BlY2lmeSBpdC4gIFRoZSBsb2dpYyB0byBndWVzcyBub3cgYXBwbGllcyB0byB0aGUgY29tbWFuZAorICAgc3BlY2lmaWVkIGJ5IHRoZSBuZXdlciBHSVRfU1NIX0NPTU1BTkQgYW5kIGFsc28gY29yZS5zc2hjb21tYW5kCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBhbmQgY29tZXMgd2l0aCBhbiBlc2NhcGUgaGF0Y2ggZm9yIHVzZXJzIHRvCisgICBkZWFsIHdpdGggbWlzZGV0ZWN0ZWQgY2FzZXMuCisKKyAqIFRoZSAiLS1naXQtcGF0aCIsICItLWdpdC1jb21tb24tZGlyIiwgYW5kICItLXNoYXJlZC1pbmRleC1wYXRoIgorICAgb3B0aW9ucyBvZiAiZ2l0IHJldi1wYXJzZSIgZGlkIG5vdCBwcm9kdWNlIHVzYWJsZSBvdXRwdXQuICBUaGV5IGFyZQorICAgbm93IHVwZGF0ZWQgdG8gc2hvdyB0aGUgcGF0aCB0byB0aGUgY29ycmVjdCBmaWxlLCByZWxhdGl2ZSB0byB3aGVyZQorICAgdGhlIGNhbGxlciBpcy4KKworICogImdpdCBkaWZmIC1XIiBoYXMgYmVlbiB0YXVnaHQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGEgbmV3CisgICBmdW5jdGlvbiBpcyBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGJldHRlci4KKworICogImdpdCB1cGRhdGUtcmVmIC1kIiBhbmQgb3RoZXIgb3BlcmF0aW9ucyB0byBkZWxldGUgcmVmZXJlbmNlcyBkaWQKKyAgIG5vdCBsZWF2ZSBhbnkgZW50cnkgaW4gSEVBRCdzIHJlZmxvZyB3aGVuIHRoZSByZWZlcmVuY2UgYmVpbmcKKyAgIGRlbGV0ZWQgd2FzIHRoZSBjdXJyZW50IGJyYW5jaC4gIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpbiBwcmFjdGljZQorICAgYmVjYXVzZSB5b3UgZG8gbm90IHdhbnQgdG8gZGVsZXRlIHRoZSBicmFuY2ggeW91IGFyZSBjdXJyZW50bHkgb24sCisgICBidXQgY2F1c2VkIHJlbmFtaW5nIG9mIHRoZSBjdXJyZW50IGJyYW5jaCB0byBzb21ldGhpbmcgZWxzZSBub3QgdG8KKyAgIGJlIGxvZ2dlZCBpbiBhIHVzZWZ1bCB3YXkuCisKKyAqICJDYzoiIG9uIHRoZSB0cmFpbGVyIHBhcnQgZG9lcyBub3QgaGF2ZSB0byBjb25mb3JtIHRvIFJGQyBzdHJpY3RseSwKKyAgIHVubGlrZSBpbiB0aGUgZS1tYWlsIGhlYWRlci4gICJnaXQgc2VuZC1lbWFpbCIgaGFzIGJlZW4gdXBkYXRlZCB0bworICAgaWdub3JlIGFueXRoaW5nIGFmdGVyICc+JyB3aGVuIHBpY2tpbmcgYWRkcmVzc2VzLCB0byBhbGxvdyBub24tYWRkcmVzcworICAgY3J1ZnQgbGlrZSAiICMgc3RhYmxlIDQuNCIgYWZ0ZXIgdGhlIGFkZHJlc3MuCisKKyAqIFdoZW4gImdpdCBzdWJtb2R1bGUgaW5pdCIgZGVjaWRlcyB0aGF0IHRoZSBzdWJtb2R1bGUgaW4gdGhlIHdvcmtpbmcKKyAgIHRyZWUgaXMgaXRzIHVwc3RyZWFtLCBpdCBub3cgZ2l2ZXMgYSB3YXJuaW5nIGFzIGl0IGlzIG5vdCBhIHZlcnkKKyAgIGNvbW1vbiBzZXR1cC4KKworICogImdpdCBzdGFzaCBwdXNoIiB0YWtlcyBhIHBhdGhzcGVjIHNvIHRoYXQgdGhlIGxvY2FsIGNoYW5nZXMgY2FuIGJlCisgICBzdGFzaGVkIGF3YXkgb25seSBwYXJ0aWFsbHkuCisKKyAqIERvY3VtZW50YXRpb24gZm9yICJnaXQgbHMtZmlsZXMiIGRpZCBub3QgcmVmZXIgdG8gY29yZS5xdW90ZVBhdGguCisKKyAqIFRoZSBleHBlcmltZW50YWwgInNwbGl0IGluZGV4IiBmZWF0dXJlIGhhcyBnYWluZWQgYSBmZXcKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHVzZS4KKworICogRnJvbSBhIHdvcmtpbmcgdHJlZSBvZiBhIHJlcG9zaXRvcnksIGEgbmV3IG9wdGlvbiBvZiAicmV2LXBhcnNlIgorICAgbGV0cyB5b3UgYXNrIGlmIHRoZSByZXBvc2l0b3J5IGlzIHVzZWQgYXMgYSBzdWJtb2R1bGUgb2YgYW5vdGhlcgorICAgcHJvamVjdCwgYW5kIHdoZXJlIHRoZSByb290IGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUgb2YgdGhhdAorICAgcHJvamVjdCAoaS5lLiB5b3VyIHN1cGVycHJvamVjdCkgaXMuCisKKyAqIFRoZSBwYXRoc3BlYyBtZWNoYW5pc20gbGVhcm5lZCB0byBmdXJ0aGVyIGxpbWl0IHRoZSBwYXRocyB0aGF0CisgICBtYXRjaCB0aGUgcGF0dGVybiB0byB0aG9zZSB0aGF0IGhhdmUgc3BlY2lmaWVkIGF0dHJpYnV0ZXMgYXR0YWNoZWQKKyAgIHZpYSB0aGUgZ2l0YXR0cmlidXRlcyBtZWNoYW5pc20uCisKKyAqIE91ciBzb3VyY2UgY29kZSBoYXMgdXNlZCB0aGUgU0hBMV9IRUFERVIgY3BwIG1hY3JvIGFmdGVyICIjaW5jbHVkZSIKKyAgIGluIHRoZSBDIGNvZGUgdG8gc3dpdGNoIGFtb25nIHRoZSBTSEEtMSBpbXBsZW1lbnRhdGlvbnMuIEluc3RlYWQsCisgICBsaXN0IHRoZSBleGFjdCBoZWFkZXIgZmlsZSBuYW1lcyBhbmQgc3dpdGNoIGFtb25nIGltcGxlbWVudGF0aW9ucworICAgdXNpbmcgIiNpZmRlZiBCTEtfU0hBMS8jaW5jbHVkZSAiYmxvY2stc2hhMS9zaGExLmgiLy4uLi8jZW5kaWYiOworICAgdGhpcyBoZWxwcyBzb21lIElERSB0b29scy4KKworICogVGhlIHN0YXJ0LXVwIHNlcXVlbmNlIG9mICJnaXQiIG5lZWRzIHRvIGZpZ3VyZSBvdXQgc29tZSBjb25maWd1cmVkCisgICBzZXR0aW5ncyBiZWZvcmUgaXQgZmluZHMgYW5kIHNldCBpdHNlbGYgdXAgaW4gdGhlIGxvY2F0aW9uIG9mIHRoZQorICAgcmVwb3NpdG9yeSBhbmQgd2FzIHF1aXRlIG1lc3N5IGR1ZSB0byBpdHMgImNoaWNrZW4tYW5kLWVnZyIgbmF0dXJlLgorICAgVGhlIGNvZGUgaGFzIGJlZW4gcmVzdHJ1Y3R1cmVkLgorCisgKiBUaGUgY29tbWFuZCBsaW5lIHByb21wdCAoaW4gY29udHJpYi8pIGxlYXJuZWQgYSBuZXcgJ3RhZycgc3R5bGUKKyAgIHRoYXQgY2FuIGJlIHNwZWNpZmllZCB3aXRoIEdJVF9QUzFfREVTQ1JJQkVfU1RZTEUsIHRvIGRlc2NyaWJlIGEKKyAgIGRldGFjaGVkIEhFQUQgd2l0aCAiZ2l0IGRlc2NyaWJlIC0tdGFncyIuCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgbGVhcm5lZCBhIG5ldyAiaW5jbHVkZUlmLjxjb25kaXRpb24+LnBhdGgiCisgICB0aGF0IGluY2x1ZGVzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gcGF0aCBvbmx5IHdoZW4gdGhlCisgICBjb25kaXRpb24gaG9sZHMuICBUaGlzIGFsbG93cyB5b3UgdG8gc2F5ICJpbmNsdWRlIHRoaXMgd29yay1yZWxhdGVkCisgICBiaXQgb25seSBpbiB0aGUgcmVwb3NpdG9yaWVzIHVuZGVyIG15IH4vd29yay8gZGlyZWN0b3J5Ii4KKworICogUmVjZW50IHVwZGF0ZSB0byAicmViYXNlIC1pIiBzdGFydGVkIHNob3dpbmcgYSBtZXNzYWdlIHRoYXQgaXMgbm90CisgICBhIHdhcm5pbmcgd2l0aCAid2FybmluZzoiIHByZWZpeCBieSBtaXN0YWtlLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogUmVjZW50bHkgd2Ugc3RhcnRlZCBwYXNzaW5nIHRoZSAiLS1wdXNoLW9wdGlvbnMiIHRocm91Z2ggdGhlCisgICBleHRlcm5hbCByZW1vdGUgaGVscGVyIGludGVyZmFjZTsgbm93IHRoZSAic21hcnQgSFRUUCIgcmVtb3RlCisgICBoZWxwZXIgdW5kZXJzdGFuZHMgd2hhdCB0byBkbyB3aXRoIHRoZSBwYXNzZWQgaW5mb3JtYXRpb24uCisKKyAqICJnaXQgZGVzY3JpYmUgLS1kaXJ0eSIgZGllcyB3aGVuIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGlmIHRoZQorICAgc3RhdGUgaW4gdGhlIHdvcmtpbmcgdHJlZSBtYXRjaGVzIHRoYXQgb2YgSEVBRCAoZS5nLiBicm9rZW4KKyAgIHJlcG9zaXRvcnkgb3IgYnJva2VuIHN1Ym1vZHVsZSkuICBUaGUgY29tbWFuZCBsZWFybmVkIGEgbmV3IG9wdGlvbgorICAgImdpdCBkZXNjcmliZSAtLWJyb2tlbiIgdG8gZ2l2ZSAiJG5hbWUtYnJva2VuIiAod2hlcmUgJG5hbWUgaXMgdGhlCisgICBkZXNjcmlwdGlvbiBvZiBIRUFEKSBpbiBzdWNoIGEgY2FzZS4KKworICogImdpdCBjaGVja291dCIgaXMgdGF1Z2h0IHRoZSAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIG9wdGlvbi4KKworICogUmVjZW50IGVuaGFuY2VtZW50IHRvICJnaXQgc3Rhc2ggcHVzaCIgY29tbWFuZCB0byBzdXBwb3J0IHBhdGhzcGVjCisgICB0byBhbGxvdyBvbmx5IGEgc3Vic2V0IG9mIHdvcmtpbmcgdHJlZSBjaGFuZ2VzIHRvIGJlIHN0YXNoZWQgYXdheQorICAgd2FzIGZvdW5kIHRvIGJlIHRvbyBjaGF0dHkgYW5kIGV4cG9zZWQgdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uCisgICBkZXRhaWwgKGUuZy4gd2hlbiBpdCB1c2VzIHJlc2V0IHRvIG1hdGNoIHRoZSBpbmRleCB0byBIRUFEIGJlZm9yZQorICAgZG9pbmcgb3RoZXIgdGhpbmdzLCBvdXRwdXQgZnJvbSByZXNldCBzZWVwZWQgb3V0KS4gIFRoZXNlLCBhbmQKKyAgIG90aGVyIGNoYXR0eW5lc3MgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgbWVyZ2UgPG1lc3NhZ2U+IEhFQUQgPGNvbW1pdD4iIHN5bnRheCB0aGF0IGhhcyBiZWVuIGRlcHJlY2F0ZWQKKyAgIHNpbmNlIE9jdG9iZXIgMjAwNyBoYXMgYmVlbiByZW1vdmVkLgorCisgKiBUaGUgcmVmcyBjb21wbGV0aW9uIGZvciBsYXJnZSBudW1iZXIgb2YgcmVmcyBoYXMgYmVlbiBzcGVkIHVwLAorICAgcGFydGx5IGJ5IGdpdmluZyB1cCBkaXNhbWJpZ3VhdGluZyBhbWJpZ3VvdXMgcmVmcyBhbmQgcGFydGx5IGJ5CisgICBlbGltaW5hdGluZyBtb3N0IG9mIHRoZSBzaGVsbCBwcm9jZXNzaW5nIGJldHdlZW4gJ2dpdCBmb3ItZWFjaC1yZWYnCisgICBhbmQgJ2xzLXJlbW90ZScgYW5kIEJhc2gncyBjb21wbGV0aW9uIGZhY2lsaXR5LgorCisgKiBPbiBtYW55IGtleWJvYXJkcywgdHlwaW5nICJAeyIgaW52b2x2ZXMgaG9sZGluZyBkb3duIFNISUZUIGtleSBhbmQKKyAgIG9uZSBjYW4gZWFzaWx5IGVuZCB1cCB3aXRoICJAe1VwLi4uIiB3aGVuIHR5cGluZyAiQHt1cHN0cmVhbX0iLiAgQXMKKyAgIHRoZSB1cHN0cmVhbS9wdXNoIGtleXdvcmRzIGRvIG5vdCBhcHBlYXIgYW55d2hlcmUgZWxzZSBpbiB0aGUgc3ludGF4LAorICAgd2UgY2FuIHNhZmVseSBhY2NlcHQgdGhlbSBjYXNlIGluc2Vuc2l0aXZlbHkgd2l0aG91dCBpbnRyb2R1Y2luZworICAgYW1iaWd1aXR5IG9yIGNvbmZ1c2lvbiB0byBzb2x2ZSB0aGlzLgorCisgKiAiZ2l0IHRhZy9icmFuY2gvZm9yLWVhY2gtcmVmIiBmYW1pbHkgb2YgY29tbWFuZHMgbG9uZyBhbGxvd2VkIHRvCisgICBmaWx0ZXIgdGhlIHJlZnMgYnkgIi0tY29udGFpbnMgWCIgKHNob3cgb25seSB0aGUgcmVmcyB0aGF0IGFyZQorICAgZGVzY2VuZGFudHMgb2YgWCksICItLW1lcmdlZCBYIiAoc2hvdyBvbmx5IHRoZSByZWZzIHRoYXQgYXJlCisgICBhbmNlc3RvcnMgb2YgWCksICItLW5vLW1lcmdlZCBYIiAoc2hvdyBvbmx5IHRoZSByZWZzIHRoYXQgYXJlIG5vdAorICAgYW5jZXN0b3JzIG9mIFgpLiAgT25lIGN1cmlvdXMgb21pc3Npb24sICItLW5vLWNvbnRhaW5zIFgiIChzaG93CisgICBvbmx5IHRoZSByZWZzIHRoYXQgYXJlIG5vdCBkZXNjZW5kYW50cyBvZiBYKSBoYXMgYmVlbiBhZGRlZCB0bworICAgdGhlbS4KKworICogVGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mICJnaXQgbG9nIiBpbiBhbiBpbnRlcmFjdGl2ZSBzZXNzaW9uIGhhcworICAgYmVlbiBjaGFuZ2VkIHRvIGVuYWJsZSAiLS1kZWNvcmF0ZSIuCisKKyAqIFRoZSBvdXRwdXQgZnJvbSAiZ2l0IHN0YXR1cyAtLXNob3J0IiBoYXMgYmVlbiBleHRlbmRlZCB0byBzaG93CisgICB2YXJpb3VzIGtpbmRzIG9mIGRpcnRpbmVzcyBpbiBzdWJtb2R1bGVzIGRpZmZlcmVudGx5OyBpbnN0ZWFkIG9mIHRvCisgICAiTSIgZm9yIG1vZGlmaWVkLCAnbScgYW5kICc/JyBjYW4gYmUgc2hvd24gdG8gc2lnbmFsIGNoYW5nZXMgb25seQorICAgdG8gdGhlIHdvcmtpbmcgdHJlZSBvZiB0aGUgc3VibW9kdWxlIGJ1dCBub3QgdGhlIGNvbW1pdCB0aGF0IGlzCisgICBjaGVja2VkIG91dC4KKworICogQWxsb3cgdGhlIGh0dHAucG9zdGJ1ZmZlciBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGJlIHNldCB0byBhCisgICBzaXplIHRoYXQgY2FuIGJlIGV4cHJlc3NlZCBpbiBzaXplX3QsIHdoaWNoIGNhbiBiZSBsYXJnZXIgdGhhbgorICAgdWxvbmcgb24gc29tZSBwbGF0Zm9ybXMuCisKKyAqICJnaXQgcmViYXNlIiBsZWFybnMgIi0tc2lnbm9mZiIgb3B0aW9uLgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBsZWFybmVkIHRvIGNvbXBsZXRlICJnaXQgcHVzaAorICAgLS1kZWxldGUgYjxUQUI+IiB0byBjb21wbGV0ZSBicmFuY2ggbmFtZSB0byBiZSBkZWxldGVkLgorCisgKiAiZ2l0IHdvcmt0cmVlIGFkZCAtLWxvY2siIGFsbG93cyB0byBsb2NrIGEgd29ya3RyZWUgaW1tZWRpYXRlbHkKKyAgIGFmdGVyIGl0J3MgY3JlYXRlZC4gVGhpcyBoZWxwcyBwcmV2ZW50IGEgcmFjZSBiZXR3ZWVuICJnaXQgd29ya3RyZWUKKyAgIGFkZDsgZ2l0IHdvcmt0cmVlIGxvY2siIGFuZCAiZ2l0IHdvcmt0cmVlIHBydW5lIi4KKworICogQ29tcGxldGlvbiBmb3IgImdpdCBjaGVja291dCA8YnJhbmNoPiIgdGhhdCBhdXRvLWNyZWF0ZXMgdGhlIGJyYW5jaAorICAgb3V0IG9mIGEgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBjYW4gbm93IGJlIGRpc2FibGVkLCBhcyB0aGlzCisgICBjb21wbGV0aW9uIG9mdGVuIGdldHMgaW4gdGhlIHdheSB3aGVuIGNvbXBsZXRpbmcgdG8gY2hlY2tvdXQgYW4KKyAgIGV4aXN0aW5nIGxvY2FsIGJyYW5jaCB0aGF0IGhhcHBlbnMgdG8gc2hhcmUgdGhlIHNhbWUgcHJlZml4IHdpdGgKKyAgIGJ1bmNoIG9mIHJlbW90ZSB0cmFja2luZyBicmFuY2hlcy4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBUaGUgY29kZSB0byBsaXN0IGJyYW5jaGVzIGluICJnaXQgYnJhbmNoIiBoYXMgYmVlbiBjb25zb2xpZGF0ZWQKKyAgIHdpdGggdGhlIG1vcmUgZ2VuZXJpYyByZWYtZmlsdGVyIEFQSS4KKworICogUmVzb3VyY2UgdXNhZ2Ugd2hpbGUgZW51bWVyYXRpbmcgcmVmcyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUKKyAgIGhhcyBiZWVuIG9wdGltaXplZCB0byBoZWxwIHJlY2VpdmluZyBlbmQgb2YgInB1c2giIHRoYXQgaG9zdHMgYQorICAgcmVwb3NpdG9yeSB3aXRoIG1hbnkgImZvcmtzIi4KKworICogVGhlIGdpdGF0dHJpYnV0ZXMgbWFjaGluZXJ5IGlzIGJlaW5nIHRhdWdodCB0byB3b3JrIGJldHRlciBpbiBhCisgICBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudC4KKworICogImdpdCByZWJhc2UgLWkiIHN0YXJ0cyB1c2luZyB0aGUgcmVjZW50bHkgdXBkYXRlZCAic2VxdWVuY2VyIiBjb2RlLgorCisgKiBDb2RlIGFuZCBkZXNpZ24gY2xlYW4tdXAgZm9yIHRoZSByZWZzIEFQSS4KKworICogVGhlIHByZWxvYWQtaW5kZXggY29kZSBoYXMgYmVlbiB0YXVnaHQgbm90IHRvIGJvdGhlciB3aXRoIHRoZSBpbmRleAorICAgZW50cmllcyB0aGF0IGFyZSBwYXRocyB0aGF0IGFyZSBub3QgY2hlY2tlZCBvdXQgYnkgInNwYXJzZSBjaGVja291dCIuCisKKyAqIFNvbWUgd2FybmluZygpIG1lc3NhZ2VzIGZyb20gImdpdCBjbGVhbiIgd2VyZSB1cGRhdGVkIHRvIHNob3cgdGhlCisgICBlcnJubyBmcm9tIGZhaWxlZCBzeXN0ZW0gY2FsbHMuCisKKyAqIFRoZSAicGFyc2VfY29uZmlnX2tleSgpIiBBUEkgZnVuY3Rpb24gaGFzIGJlZW4gY2xlYW5lZCB1cC4KKworICogQSB0ZXN0IHRoYXQgY3JlYXRlcyBhIGNvbmZ1c2luZyBicmFuY2ggd2hvc2UgbmFtZSBpcyBIRUFEIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQgbm90IHRvIGRvIHNvLgorCisgKiBUaGUgY29kZSB0aGF0IHBhcnNlcyBoZWFkZXIgZmllbGRzIGluIHRoZSBjb21taXQgb2JqZWN0IGhhcyBiZWVuCisgICB1cGRhdGVkIGZvciAobWljcm8pcGVyZm9ybWFuY2UgYW5kIGNvZGUgaHlnaWVuZS4KKworICogQW4gaGVscGVyIGZ1bmN0aW9uIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGFwcGVuZCB0aGUgcmVzdWx0IGZyb20KKyAgIHJlYWxfcGF0aCgpIHRvIGEgc3RyYnVmIGhhcyBiZWVuIGFkZGVkLgorCisgKiBSZWR1Y2UgYXV0aGVudGljYXRpb24gcm91bmQtdHJpcCBvdmVyIEhUVFAgd2hlbiB0aGUgc2VydmVyIHN1cHBvcnRzCisgICBqdXN0IGEgc2luZ2xlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4gIFRoaXMgYWxzbyBpbXByb3ZlcyB0aGUKKyAgIGJlaGF2aW91ciB3aGVuIEdpdCBpcyBtaXNjb25maWd1cmVkIHRvIGVuYWJsZSBodHRwLmVtcHR5QXV0aAorICAgYWdhaW5zdCBhIHNlcnZlciB0aGF0IGRvZXMgbm90IGF1dGhlbnRpY2F0ZSB3aXRob3V0IGEgdXNlcm5hbWUKKyAgIChpLmUuIG5vdCB1c2luZyBLZXJiZXJvcyBldGMuLCB3aGljaCBtYWtlcyBodHRwLmVtcHR5QXV0aAorICAgcG9pbnRsZXNzKS4KKworICogV2luZG93cyBwb3J0IHdhbnRzIHRvIHVzZSBPcGVuU1NMJ3MgaW1wbGVtZW50YXRpb24gb2YgU0hBLTEKKyAgIHJvdXRpbmVzLCBzbyBsZXQgdGhlbS4KKworICogVGhlIHQvcGVyZiBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlIHdhcyBub3QgcHJlcGFyZWQgdG8gdGVzdCBub3Qgc28KKyAgIG9sZCB2ZXJzaW9ucyBvZiBHaXQsIGJ1dCBub3cgaXQgY292ZXJzIHZlcnNpb25zIG9mIEdpdCB0aGF0IGFyZSBub3QKKyAgIHNvIGFuY2llbnQuCisKKyAqIEFkZCAzMi1iaXQgTGludXggdmFyaWFudCB0byB0aGUgc2V0IG9mIHBsYXRmb3JtcyB0byBiZSB0ZXN0ZWQgd2l0aAorICAgVHJhdmlzIENJLgorCisgKiAiZ2l0IGJyYW5jaCAtLWxpc3QiIHRha2VzIHRoZSAiLS1hYmJyZXYiIGFuZCAiLS1uby1hYmJyZXYiIG9wdGlvbnMKKyAgIHRvIGNvbnRyb2wgdGhlIG91dHB1dCBvZiB0aGUgb2JqZWN0IG5hbWUgaW4gaXRzICItdiIoZXJib3NlKQorICAgb3V0cHV0LCBidXQgYSByZWNlbnQgdXBkYXRlIHN0YXJ0ZWQgaWdub3JpbmcgdGhlbTsgZml4IGl0IGJlZm9yZQorICAgdGhlIGJyZWFrYWdlIHJlYWNoZXMgdG8gYW55IHJlbGVhc2VkIHZlcnNpb24uCisKKyAqIFBpY2tpbmcgdHdvIHZlcnNpb25zIG9mIEdpdCBhbmQgcnVubmluZyB0ZXN0cyB0byBtYWtlIHN1cmUgdGhlCisgICBvbGRlciBvbmUgYW5kIHRoZSBuZXdlciBvbmUgaW50ZXJvcGVyYXRlIGhhcHBpbHkgaGFzIG5vdyBiZWNvbWUKKyAgIHBvc3NpYmxlLgorCisgKiAiZ2l0IHRhZyAtLWNvbnRhaW5zIiB1c2VkIHRvIChhYil1c2UgdGhlIG9iamVjdCBiaXRzIHRvIGtlZXAgdHJhY2sKKyAgIG9mIHRoZSBzdGF0ZSBvZiBvYmplY3QgcmVhY2hhYmlsaXR5IHdpdGhvdXQgY2xlYXJpbmcgdGhlbSBhZnRlcgorICAgdXNlOyB0aGlzIGhhcyBiZWVuIGNsZWFuZWQgdXAgYW5kIG1hZGUgdG8gdXNlIHRoZSBuZXdlciBjb21taXQtc2xhYgorICAgZmFjaWxpdHkuCisKKyAqIFRoZSAiZGVidWciIGhlbHBlciB1c2VkIGluIHRoZSB0ZXN0IGZyYW1ld29yayBsZWFybmVkIHRvIHJ1bgorICAgYSBjb21tYW5kIHVuZGVyICJnZGIiIGludGVyYWN0aXZlbHkuCisKKyAqIFRoZSAiZGV0ZWN0IGF0dGVtcHQgdG8gY3JlYXRlIGNvbGxpc2lvbnMiIHZhcmlhbnQgb2YgU0hBLTEKKyAgIGltcGxlbWVudGF0aW9uIGJ5IE1hcmMgU3RldmVucyAoQ1dJKSBhbmQgRGFuIFNodW1vdyAoTWljcm9zb2Z0KQorICAgaGFzIGJlZW4gaW50ZWdyYXRlZCBhbmQgbWFkZSB0aGUgZGVmYXVsdC4KKworICogVGhlIHRlc3QgZnJhbWV3b3JrIGxlYXJuZWQgdG8gZGV0ZWN0IHVudGVybWluYXRlZCBoZXJlIGRvY3VtZW50cy4KKworICogVGhlIG5hbWUtaGFzaCB1c2VkIGZvciBkZXRlY3RpbmcgcGF0aHMgdGhhdCBhcmUgZGlmZmVyZW50IG9ubHkgaW4KKyAgIGNhc2VzICh3aGljaCBtYXR0ZXIgb24gY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcykgaGFzIGJlZW4KKyAgIG9wdGltaXplZCB0byB0YWtlIGFkdmFudGFnZSBvZiBtdWx0aS10aHJlYWRpbmcgd2hlbiBpdCBtYWtlcyBzZW5zZS4KKworICogQW4gZWFybGllciB2ZXJzaW9uIG9mIHNoYTFkYy9zaGExLmMgdGhhdCB3YXMgbWVyZ2VkIHRvICdtYXN0ZXInCisgICBjb21waWxlZCBpbmNvcnJlY3RseSBvbiBXaW5kb3dzLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogIndoYXQgVVJMIGRvIHdlIHdhbnQgdG8gdXBkYXRlIHRoaXMgc3VibW9kdWxlPyIgYW5kICJhcmUgd2UKKyAgIGludGVyZXN0ZWQgaW4gdGhpcyBzdWJtb2R1bGU/IiBhcmUgc3BsaXQgaW50byB0d28gZGlzdGluY3QKKyAgIGNvbmNlcHRzLCBhbmQgdGhlbiB0aGUgd2F5IHVzZWQgdG8gZXhwcmVzcyB0aGUgbGF0dGVyIGdvdCBleHRlbmRlZCwKKyAgIHBhdmluZyBhIHdheSB0byBtYWtlIGl0IGVhc2llciB0byBtYW5hZ2UgYSBwcm9qZWN0IHdpdGggbWFueQorICAgc3VibW9kdWxlcyBhbmQgbWFrZSBpdCBwb3NzaWJsZSB0byBsYXRlciBleHRlbmQgdXNlIG9mIG11bHRpcGxlCisgICB3b3JrdHJlZXMgZm9yIGEgcHJvamVjdCB3aXRoIHN1Ym1vZHVsZXMuCisKKyAqIFNvbWUgZGVidWdnaW5nIG91dHB1dCBmcm9tICJnaXQgZGVzY3JpYmUiIHdlcmUgbWFya2VkIGZvciBsMTBuLAorICAgYnV0IHNvbWUgd2VyZW4ndC4gIE1hcmsgbWlzc2luZyBvbmVzIGZvciBsMTBuLgorCisgKiBEZWZpbmUgYSBuZXcgdGFzayBpbiAudHJhdmlzLnltbCB0aGF0IHRyaWdnZXJzIGEgdGVzdCBzZXNzaW9uIG9uCisgICBXaW5kb3dzIHJ1biBlbHNld2hlcmUuCisKKyAqIENvbnZlcnNpb24gZnJvbSB1Y2hhclsyMF0gdG8gc3RydWN0IG9iamVjdF9pZCBjb250aW51ZXMuCisKKyAqIFRoZSAic3VibW9kdWxlIiBzcGVjaWZpYyBmaWVsZCBpbiB0aGUgcmVmX3N0b3JlIHN0cnVjdHVyZSBpcworICAgcmVwbGFjZWQgd2l0aCBhIG1vcmUgZ2VuZXJpYyAiZ2l0ZGlyIiB0aGF0IGNhbiBsYXRlciBiZSB1c2VkIGFsc28KKyAgIHdoZW4gZGVhbGluZyB3aXRoIHJlZl9zdG9yZSB0aGF0IHJlcHJlc2VudHMgdGhlIHNldCBvZiByZWZzIHZpc2libGUKKyAgIGZyb20gdGhlIG90aGVyIHdvcmt0cmVlcy4KKworICogVGhlIHN0cmluZy1saXN0IEFQSSB1c2VkIGEgY3VzdG9tIHJlYWxsb2NhdGlvbiBzdHJhdGVneSB0aGF0IHdhcworICAgdmVyeSBpbmVmZmljaWVudCwgaW5zdGVhZCBvZiB1c2luZyB0aGUgdXN1YWwgQUxMT0NfR1JPVygpIG1hY3JvLAorICAgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgOTUwYTIzNGNiZCBqaC9zdHJpbmctbGlzdC1taWNyby1vcHRpbSBsYXRlciB0byBtYWludCkuCisKKyAqIEluIGEgMi0gYW5kIDMtd2F5IG1lcmdlIG9mIHRyZWVzLCBtb3JlIHRoYW4gb25lIHNvdXJjZSB0cmVlcyBvZnRlbgorICAgZW5kIHVwIHNoYXJpbmcgYW4gaWRlbnRpY2FsIHN1YnRyZWU7IG9wdGltaXplIGJ5IG5vdCByZWFkaW5nIHRoZQorICAgc2FtZSB0cmVlIG11bHRpcGxlIHRpbWVzIGluIHN1Y2ggYSBjYXNlLgorICAgKG1lcmdlIGQxMmE4Y2YwYWYgamgvdW5wYWNrLXRyZWVzLW1pY3JvLW9wdGltIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGluZGV4IGZpbGUgaGFzIGEgdHJhaWxpbmcgU0hBLTEgY2hlY2tzdW0gdG8gZGV0ZWN0IGZpbGUKKyAgIGNvcnJ1cHRpb24sIGFuZCBoaXN0b3JpY2FsbHkgd2UgY2hlY2tlZCBpdCBldmVyeSB0aW1lIHRoZSBpbmRleAorICAgZmlsZSBpcyB1c2VkLiAgT21pdCB0aGUgdmFsaWRhdGlvbiBkdXJpbmcgbm9ybWFsIHVzZSwgYW5kIGluc3RlYWQKKyAgIHZlcmlmeSBvbmx5IGluICJnaXQgZnNjayIuCisKKyAqIEhhdmluZyBhIGdpdCBjb21tYW5kIG9uIHRoZSB1cHN0cmVhbSBzaWRlIG9mIGEgcGlwZSBpbiBhIHRlc3QKKyAgIHNjcmlwdCB3aWxsIGhpZGUgdGhlIGV4aXQgc3RhdHVzIGZyb20gdGhlIGNvbW1hbmQsIHdoaWNoIG1heSBjYXVzZQorICAgdXMgdG8gZmFpbCB0byBub3RpY2UgYSBicmVha2FnZTsgcmV3cml0ZSB0ZXN0cyBpbiBhIHNjcmlwdCB0byBhdm9pZAorICAgdGhpcyBpc3N1ZS4KKworICogVHJhdmlzIENJIGxlYXJucyB0byBydW4gY29jY2ljaGVjay4KKworICogImdpdCBjaGVja291dCIgdGhhdCBoYW5kbGVzIGEgbG90IG9mIHBhdGhzIGhhcyBiZWVuIG9wdGltaXplZCBieQorICAgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB1bm5lY2Vzc2FyeSBjaGVja3Mgb2YgcGF0aHMgaW4gdGhlCisgICBoYXNfZGlyX25hbWUoKSBmdW5jdGlvbi4KKworICogVGhlIGludGVybmFscyBvZiB0aGUgcmVmcyBBUEkgYXJvdW5kIHRoZSBjYWNoZWQgcmVmcyBoYXMgYmVlbgorICAgc3RyZWFtbGluZWQuCisKKyAqIE91dHB1dCBmcm9tIHBlcmYgdGVzdHMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gYWxpZ24gdGhlaXIgdGl0bGVzLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi4xMgorLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2Mi4xMiBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgdGhlIG1haW50ZW5hbmNlIHJlbGVhc2VzJworbm90ZXMgZm9yIGRldGFpbHMpLgorCisgKiAiZ2l0IHJlcGFjayAtLWRlcHRoPTxuPiIgZm9yIGEgbG9uZyB0aW1lIGJ1c3RlZCB0aGUgc3BlY2lmaWVkIGRlcHRoCisgICB3aGVuIHJldXNpbmcgZGVsdGEgZnJvbSBleGlzdGluZyBwYWNrcy4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgY29kZSB0byBwYXJzZSB0aGUgY29tbWFuZCBsaW5lICJnaXQgZ3JlcCA8cGF0dGVybnM+Li4uIDxyZXY+CisgICBbWy0tXSA8cGF0aHNwZWM+Li4uXSIgaGFzIGJlZW4gY2xlYW5lZCB1cCwgYW5kIGEgaGFuZGZ1bCBvZiBidWdzCisgICBoYXZlIGJlZW4gZml4ZWQgKGUuZy4gd2UgdXNlZCB0byBjaGVjayAiLS0iIGlmIGl0IGlzIGEgcmV2KS4KKworICogImdpdCBscy1yZW1vdGUiIGFuZCAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUiIGFyZSBkZXNpZ25lZCB0byB3b3JrCisgICB3aXRob3V0IGJlaW5nIGluIGEgZGlyZWN0b3J5IHVuZGVyIEdpdCdzIGNvbnRyb2wuICBIb3dldmVyLCByZWNlbnQKKyAgIHVwZGF0ZXMgcmV2ZWFsZWQgdGhhdCB3ZSByYW5kb21seSBsb29rIGludG8gYSBkaXJlY3RvcnkgY2FsbGVkCisgICAuZ2l0LyB3aXRob3V0IGFjdHVhbGx5IGRvaW5nIG5lY2Vzc2FyeSBzZXQtdXAgd2hlbiB3b3JraW5nIGluIGEKKyAgIHJlcG9zaXRvcnkuICBTdG9wIGRvaW5nIHNvLgorCisgKiAiZ2l0IHNob3ctYnJhbmNoIiBleHBlY3RlZCB0aGVyZSB3ZXJlIG9ubHkgdmVyeSBzaG9ydCBicmFuY2ggbmFtZXMKKyAgIGluIHRoZSByZXBvc2l0b3J5IGFuZCB1c2VkIGEgZml4ZWQtbGVuZ3RoIGJ1ZmZlciB0byBob2xkIHRoZW0KKyAgIHdpdGhvdXQgY2hlY2tpbmcgZm9yIG92ZXJmbG93LgorCisgKiBBIGNhbGxlciBvZiB0ZW1wZmlsZSBBUEkgdGhhdCB1c2VzIHN0ZGlvIGludGVyZmFjZSB0byB3cml0ZSB0bworICAgZmlsZXMgbWF5IGlnbm9yZSBlcnJvcnMgd2hpbGUgd3JpdGluZywgd2hpY2ggaXMgZGV0ZWN0ZWQgd2hlbgorICAgdGVtcGZpbGUgaXMgY2xvc2VkICh3aXRoIGEgY2FsbCB0byBmZXJyb3IoKSkuICBCeSB0aGF0IHRpbWUsIHRoZQorICAgb3JpZ2luYWwgZXJybm8gdGhhdCBtYXkgaGF2ZSB0b2xkIHVzIHdoYXQgd2VudCB3cm9uZyBpcyBsaWtlbHkgdG8KKyAgIGJlIGxvbmcgZ29uZSBhbmQgd2FzIG92ZXJ3cml0dGVuIGJ5IGFuIGlycmVsZXZhbnQgdmFsdWUuCisgICBjbG9zZV90ZW1wZmlsZSgpIG5vdyByZXNldHMgZXJybm8gdG8gRUlPIHRvIG1ha2UgZXJybm8gYXQgbGVhc3QKKyAgIHByZWRpY3RhYmxlLgorCisgKiAiZ2l0IHJlbW90ZSBybSBYIiwgd2hlbiBhIGJyYW5jaCBoYXMgcmVtb3RlIFggY29uZmlndXJlZCBhcyB0aGUKKyAgIHZhbHVlIG9mIGl0cyBicmFuY2guKi5yZW1vdGUsIHRyaWVkIHRvIHJlbW92ZSBicmFuY2guKi5yZW1vdGUgYW5kCisgICBicmFuY2guKi5tZXJnZSBhbmQgZmFpbGVkIGlmIGVpdGhlciBpcyB1bnNldC4KKworICogQSAiZ2MubG9nIiBmaWxlIGxlZnQgYnkgYSBiYWNrZ3JvdW5kZWQgImdjIC0tYXV0byIgZGlzYWJsZXMgZnVydGhlcgorICAgYXV0b21hdGljIGdjOyBpdCBoYXMgYmVlbiB0YXVnaHQgdG8gcnVuIGF0IGxlYXN0IG9uY2UgYSBkYXkgKGJ5CisgICBkZWZhdWx0KSBieSBpZ25vcmluZyBhIHN0YWxlICJnYy5sb2ciIGZpbGUgdGhhdCBpcyB0b28gb2xkLgorCisgKiBUaGUgY29kZSB0byBwYXJzZSAiZ2l0IC1jIFZBUj1WQUwgY21kIiBhbmQgc2V0IGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIGZvciB0aGUgZHVyYXRpb24gb2YgY21kIGhhZCB0d28gc21hbGwgYnVncywgd2hpY2ggaGF2ZQorICAgYmVlbiBmaXhlZC4KKworICogdXNlci5lbWFpbCB0aGF0IGNvbnNpc3RzIG9mIG9ubHkgY3J1ZnQgY2hhcnMgc2hvdWxkIGNvbnNpc3RlbnRseQorICAgZXJyb3Igb3V0LCBidXQgZGlkbid0LgorCisgKiAiZ2l0IHVwbG9hZC1wYWNrIiwgd2hpY2ggaXMgYSBjb3VudGVyLXBhcnQgb2YgImdpdCBmZXRjaCIsIGRpZCBub3QKKyAgIHJlcG9ydCBhIHJlcXVlc3QgZm9yIGEgcmVmIHRoYXQgd2FzIG5vdCBhZHZlcnRpc2VkIGFzIGludmFsaWQuCisgICBUaGlzIGlzIGdlbmVyYWxseSBub3QgYSBwcm9ibGVtIChiZWNhdXNlICJnaXQgZmV0Y2giIHdpbGwgc3RvcAorICAgYmVmb3JlIG1ha2luZyBzdWNoIGEgcmVxdWVzdCksIGJ1dCBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisKKyAqIEEgbGVhayBpbiBhIGNvZGVwYXRoIHRvIHJlYWQgZnJvbSBhIHBhY2tlZCBvYmplY3QgaW4gKHJhcmUpIGNhc2VzCisgICBoYXMgYmVlbiBwbHVnZ2VkLgorCisgKiBXaGVuIGEgcmVkaXJlY3RlZCBodHRwIHRyYW5zcG9ydCBnZXRzIGFuIGVycm9yIGR1cmluZyB0aGUKKyAgIHJlZGlyZWN0ZWQgcmVxdWVzdCwgd2UgaWdub3JlZCB0aGUgZXJyb3Igd2UgZ290IGZyb20gdGhlIHNlcnZlciwKKyAgIGFuZCBlbmRlZCB1cCBnaXZpbmcgYSBub3Qtc28tdXNlZnVsIGVycm9yIG1lc3NhZ2UuCisKKyAqIFRoZSBwYXRjaCBzdWJjb21tYW5kIG9mICJnaXQgYWRkIC1pIiB3YXMgbWVhbnQgdG8gaGF2ZSBwYXRocworICAgc2VsZWN0aW9uIHByb21wdCBqdXN0IGxpa2Ugb3RoZXIgc3ViY29tbWFuZCwgdW5saWtlICJnaXQgYWRkIC1wIgorICAgZGlyZWN0bHkganVtcHMgdG8gaHVuayBzZWxlY3Rpb24uICBSZWNlbnRseSwgdGhpcyB3YXMgYnJva2VuIGFuZAorICAgImFkZCAtaSIgbG9zdCB0aGUgcGF0aHMgc2VsZWN0aW9uIGRpYWxvZywgYnV0IGl0IG5vdyBoYXMgYmVlbgorICAgZml4ZWQuCisKKyAqIEdpdCB2Mi4xMiB3YXMgc2hpcHBlZCB3aXRoIGFuIGVtYmFycmFzc2luZyBicmVha2FnZSB3aGVyZSB2YXJpb3VzCisgICBvcGVyYXRpb25zIHRoYXQgdmVyaWZ5IHBhdGhzIGdpdmVuIGZyb20gdGhlIHVzZXIgc3RvcHBlZCBkeWluZyB3aGVuCisgICBzZWVpbmcgYW4gaXNzdWUsIGFuZCBpbnN0ZWFkIGxhdGVyIHRyaWdnZXJpbmcgc2VnZmF1bHQuCisKKyAqIFRoZXJlIGlzIG5vIG5lZWQgZm9yIFB5dGhvbiBvbmx5IHRvIGdpdmUgYSBmZXcgbWVzc2FnZXMgdG8gdGhlCisgICBzdGFuZGFyZCBlcnJvciBzdHJlYW0sIGJ1dCB3ZSBzb21laG93IGRpZC4KKworICogVGhlIGNvZGUgdG8gcGFyc2UgImdpdCBsb2cgLUwuLi4iIGNvbW1hbmQgbGluZSB3YXMgYnVnZ3kgd2hlbiB0aGVyZQorICAgYXJlIG1hbnkgcmFuZ2VzIHNwZWNpZmllZCB3aXRoIC1MOyBvdmVycnVuIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyCisgICBoYXMgYmVlbiBmaXhlZC4KKworICogVGhlIGNvbW1hbmQtbGluZSBwYXJzaW5nIG9mICJnaXQgbG9nIC1MIiBjb3BpZWQgaW50ZXJuYWwgZGF0YQorICAgc3RydWN0dXJlcyB1c2luZyBpbmNvcnJlY3Qgc2l6ZSBvbiBJTFAzMiBzeXN0ZW1zLgorCisgKiAiZ2l0IGRpZmYgLS1xdWlldCIgcmVsaWVzIG9uIHRoZSBzaXplIGZpZWxkIGluIGRpZmZfZmlsZXNwZWMgdG8gYmUKKyAgIGNvcnJlY3RseSBwb3B1bGF0ZWQsIGJ1dCBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKCkgaGVscGVyIGZ1bmN0aW9uCisgICBtYWRlIGFuIGluY29ycmVjdCBzaG9ydC1jdXQgd2hlbiBhc2tlZCBvbmx5IHRvIHBvcHVsYXRlIHRoZSBzaXplCisgICBmaWVsZCBmb3IgcGF0aHMgdGhhdCBuZWVkIHRvIGdvIHRocm91Z2ggY29udmVydF90b19naXQoKSAoZS5nLiBDUkxGCisgICBjb252ZXJzaW9uKS4KKworICogQSBmZXcgdGVzdHMgd2VyZSBydW4gY29uZGl0aW9uYWxseSB1bmRlciAocmFyZSkgY29uZGl0aW9ucyB3aGVyZQorICAgdGhleSBjYW5ub3QgYmUgcnVuIChsaWtlIHJ1bm5pbmcgY3ZzIHRlc3RzIHVuZGVyICdyb290JyBhY2NvdW50KS4KKworICogImdpdCBicmFuY2ggQCIgY3JlYXRlZCByZWZzL2hlYWRzL0AgYXMgYSBicmFuY2gsIGFuZCBpbiBnZW5lcmFsIHRoZQorICAgY29kZSB0aGF0IGhhbmRsZWQgQHstMX0gYW5kIEB7dXBzdHJlYW19IHdhcyBhIGJpdCB0b28gbG9vc2UgaW4KKyAgIGRpc2FtYmlndWF0aW5nLgorCisgKiAiZ2l0IGZldGNoIiB0aGF0IHJlcXVlc3RzIGEgY29tbWl0IGJ5IG9iamVjdCBuYW1lLCB3aGVuIHRoZSBvdGhlcgorICAgc2lkZSBkb2VzIG5vdCBhbGxvdyBzdWNoIGFuIHJlcXVlc3QsIGZhaWxlZCB3aXRob3V0IG11Y2gKKyAgIGV4cGxhbmF0aW9uLgorCisgKiAiZ2l0IGZpbHRlci1icmFuY2ggLS1wcnVuZS1lbXB0eSIgZHJvcHMgYSBzaW5nbGUtcGFyZW50IGNvbW1pdCB0aGF0CisgICBiZWNvbWVzIGEgbm8tb3AsIGJ1dCBkaWQgbm90IGRyb3AgYSByb290IGNvbW1pdCB3aG9zZSB0cmVlIGlzIGVtcHR5LgorCisgKiBSZWNlbnQgdmVyc2lvbnMgb2YgR2l0IHRyZWF0cyBodHRwIGFsdGVybmF0ZXMgKHVzZWQgaW4gZHVtYiBodHRwCisgICB0cmFuc3BvcnQpIGp1c3QgbGlrZSBIVFRQIHJlZGlyZWN0cyBhbmQgcmVxdWlyZXMgdGhlIGNsaWVudCB0bworICAgZW5hYmxlIGZvbGxvd2luZyBpdCwgZHVlIHRvIHNlY3VyaXR5IGNvbmNlcm5zLiAgQnV0IHdlIGZvcmdvdCB0bworICAgZ2l2ZSBhIHdhcm5pbmcgd2hlbiB3ZSBkZWNpZGUgbm90IHRvIGhvbm9yIHRoZSBhbHRlcm5hdGVzLgorCisgKiAiZ2l0IHB1c2giIGhhZCBhIGhhbmRmdWwgb2YgY29kZXBhdGhzIHRoYXQgY291bGQgbGVhZCB0byBhIGRlYWRsb2NrCisgICB3aGVuIHVuZXhwZWN0ZWQgZXJyb3IgaGFwcGVuZWQsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiRHVtYiBodHRwIiB0cmFuc3BvcnQgdXNlZCB0byBtaXNwYXJzZSBhIG5vbnNlbnNlIGh0dHAtYWx0ZXJuYXRlcworICAgcmVzcG9uc2UsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGFkZCAtcCA8cGF0aHNwZWM+IiB1bm5lY2Vzc2FyaWx5IGV4cGFuZGVkIHRoZSBwYXRoc3BlYyB0byBhCisgICBsaXN0IG9mIGluZGl2aWR1YWwgZmlsZXMgdGhhdCBtYXRjaGVzIHRoZSBwYXRoc3BlYyBieSBydW5uaW5nICJnaXQKKyAgIGxzLWZpbGVzIDxwYXRoc3BlYz4iLCBiZWZvcmUgZmVlZGluZyBpdCB0byAiZ2l0IGRpZmYtaW5kZXgiIHRvIHNlZQorICAgd2hpY2ggcGF0aHMgaGF2ZSBjaGFuZ2VzLCBiZWNhdXNlIGhpc3RvcmljYWxseSB0aGUgcGF0aHNwZWMKKyAgIGxhbmd1YWdlIHN1cHBvcnRlZCBieSAiZGlmZi1pbmRleCIgd2FzIHdlYWtlci4gIFRoZXNlIGRheXMgdGhleSBhcmUKKyAgIGVxdWl2YWxlbnQgYW5kIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBpbnRlcm5hbGx5IGV4cGFuZCBpdC4gIFRoaXMKKyAgIGhlbHBzIGJvdGggcGVyZm9ybWFuY2UgYW5kIGF2b2lkcyBjb21tYW5kIGxpbmUgYXJndW1lbnQgbGltaXQgb24KKyAgIHNvbWUgcGxhdGZvcm1zLgorICAgKG1lcmdlIDcyODhlMTJjY2UgamsvYWRkLWktdXNlLXBhdGhzcGVjcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3RhdHVzIC0tcG9yY2VsYWluIiBpcyBzdXBwb3NlZCB0byBnaXZlIGEgc3RhYmxlIG91dHB1dCwgYnV0IGEKKyAgIGZldyBzdHJpbmdzIHdlcmUgbGVmdCBhcyB0cmFuc2xhdGFibGUgYnkgbWlzdGFrZS4KKworICogImdpdCByZXZlcnQgLW0gMCAkbWVyZ2VfY29tbWl0IiBjb21wbGFpbmVkIHRoYXQgcmV2ZXJ0aW5nIGEgbWVyZ2UKKyAgIG5lZWRzIHRvIHNheSByZWxhdGl2ZSB0byB3aGljaCBwYXJlbnQgdGhlIHJldmVyc2lvbiBuZWVkcyB0bworICAgaGFwcGVuLCBhcyBpZiAiLW0gMCIgd2VyZW4ndCBnaXZlbi4gIFRoZSBjb3JyZWN0IGRpYWdub3NpcyBpcyB0aGF0CisgICAiLW0gMCIgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGZpcnN0IHBhcmVudCAoIi1tIDEiIGRvZXMpLiAgVGhpcyBoYXMKKyAgIGJlZW4gZml4ZWQuCisKKyAqIENvZGUgdG8gcmVhZCBzdWJtb2R1bGUuPG5hbWU+Lmlnbm9yZSBjb25maWcgZGlkIG5vdCBzdGF0ZSB0aGUKKyAgIHZhcmlhYmxlIG5hbWUgY29ycmVjdGx5IHdoZW4gZ2l2aW5nIGFuIGVycm9yIG1lc3NhZ2UgZGlhZ25vc2luZworICAgbWlzY29uZmlndXJhdGlvbi4KKworICogRml4IGZvciBOT19QVEhSRUFEUyBidWlsZC4KKworICogRml4IGZvciBwb3RlbnRpYWwgc2VndiBpbnRyb2R1Y2VkIGluIHYyLjExLjAgYW5kIGxhdGVyIChhbHNvCisgICB2Mi4xMC4yKSB0byAiZ2l0IGxvZyAtLXBpY2theGUtcmVnZXggLVMiLgorCisgKiBBIGZldyB1bnRlcm1pbmF0ZWQgaGVyZSBkb2N1bWVudHMgaW4gdGVzdHMgd2VyZSBmaXhlZCwgd2hpY2ggaW4KKyAgIHR1cm4gcmV2ZWFsZWQgaW5jb3JyZWN0IGV4cGVjdGF0aW9ucyB0aGUgdGVzdHMgbWFrZS4gVGhlc2UgdGVzdHMKKyAgIGhhdmUgYmVlbiB1cGRhdGVkLgorCisgKiBGaXggZm9yIE5PX1BUSFJFQURTIG9wdGlvbi4KKyAgIChtZXJnZSAyMjI1ZTFlYTIwIGJ3L2dyZXAtcmVjdXJzZS1zdWJtb2R1bGVzIGxhdGVyIHRvIG1haW50KS4KKworICogR2l0IG5vdyBhdm9pZHMgYmxpbmRseSBmYWxsaW5nIGJhY2sgdG8gIi5naXQiIHdoZW4gdGhlIHNldHVwCisgICBzZXF1ZW5jZSBzYWlkIHdlIGFyZSBfbm90XyBpbiBHaXQgcmVwb3NpdG9yeS4gIEEgY29ybmVyIGNhc2UgdGhhdAorICAgaGFwcGVucyB0byB3b3JrIHJpZ2h0IG5vdyBtYXkgYmUgYnJva2VuIGJ5IGEgY2FsbCB0byBkaWUoIkJVRyIpLgorICAgKG1lcmdlIGIxZWY0MDBlZWMgamsvbm8tbG9va2luZy1hdC1kb3RnaXQtb3V0c2lkZS1yZXBvLWZpbmFsIGxhdGVyIHRvIG1haW50KS4KKworICogQSBmZXcgY29tbWFuZHMgdGhhdCByZWNlbnRseSBsZWFybmVkIHRoZSAiLS1yZWN1cnNlLXN1Ym1vZHVsZSIKKyAgIG9wdGlvbiBtaXNiZWhhdmVkIHdoZW4gc3RhcnRlZCBmcm9tIGEgc3ViZGlyZWN0b3J5IG9mIHRoZQorICAgc3VwZXJwcm9qZWN0LgorICAgKG1lcmdlIGIyZGZlYjdjMDAgYncvcmVjdXJzZS1zdWJtb2R1bGVzLXJlbGF0aXZlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIEZyZWVCU0QgaW1wbGVtZW50YXRpb24gb2YgZ2V0Y3dkKDMpIGJlaGF2ZWQgZGlmZmVyZW50bHkgd2hlbiBhbgorICAgaW50ZXJtZWRpYXRlIGRpcmVjdG9yeSBpcyB1bnJlYWRhYmxlL3Vuc2VhcmNoYWJsZSBkZXBlbmRpbmcgb24gdGhlCisgICBsZW5ndGggb2YgdGhlIGJ1ZmZlciBwcm92aWRlZCwgd2hpY2ggb3VyIHN0cmJ1Zl9nZXRjd2QoKSB3YXMgbm90CisgICBhd2FyZSBvZi4gIHN0cmJ1Zl9nZXRjd2QoKSBoYXMgYmVlbiB0YXVnaHQgdG8gY29wZSB3aXRoIGl0IGJldHRlci4KKyAgIChtZXJnZSBhNTRlOTM4ZTViIHJzL2ZyZWVic2QtZ2V0Y3dkLXdvcmthcm91bmQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIHJlY2VudCB1cGRhdGUgdG8gInJlYmFzZSAtaSIgc3RvcHBlZCBydW5uaW5nIGhvb2tzIGZvciB0aGUgImdpdAorICAgY29tbWl0IiBjb21tYW5kIGR1cmluZyAicmV3b3JkIiBhY3Rpb24sIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBSZW1vdmluZyBhbiBlbnRyeSBmcm9tIGEgbm90ZXMgdHJlZSBhbmQgdGhlbiBsb29raW5nIGFub3RoZXIgbm90ZQorICAgZW50cnkgZnJvbSB0aGUgcmVzdWx0aW5nIHRyZWUgdXNpbmcgdGhlIGludGVybmFsIG5vdGVzIEFQSQorICAgZnVuY3Rpb25zIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC4gIE5vIGluLXRyZWUgdXNlcnMgb2YgdGhlIEFQSQorICAgaGFzIHN1Y2ggYWNjZXNzIHBhdHRlcm4sIGJ1dCBpdCBzdGlsbCBpcyB3b3J0aCBmaXhpbmcuCisKKyAqICJnaXQgcmVjZWl2ZS1wYWNrIiBjb3VsZCBoYXZlIGJlZW4gZm9yY2VkIHRvIGRpZSBieSBhdHRlbXB0aW5nCisgICBhbGxvY2F0ZSBhbiB1bnJlYXNvbmFibHkgbGFyZ2UgYW1vdW50IG9mIG1lbW9yeSB3aXRoIGEgY3JhZnRlZCBwdXNoCisgICBjZXJ0aWZpY2F0ZTsgdGhpcyBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSBmMjIxNGRlZGU5IGJjL3B1c2gtY2VydC1yZWNlaXZlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFVwZGF0ZSBlcnJvciBoYW5kbGluZyBmb3IgY29kZXBhdGggdGhhdCBkZWFscyB3aXRoIGNvcnJ1cHQgbG9vc2UKKyAgIG9iamVjdHMuCisgICAobWVyZ2UgNTEwNTQxNzdiMyBqay9sb29zZS1vYmplY3QtaW5mby1yZXBvcnQtZXJyb3IgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYgLS1zdWJtb2R1bGU9ZGlmZiIgbGVhcm5lZCB0byB3b3JrIGJldHRlciBpbiBhIHByb2plY3QKKyAgIHdpdGggYSBzdWJtb2R1bGUgdGhhdCBpbiB0dXJuIGhhcyBpdHMgb3duIHN1Ym1vZHVsZXMuCisgICAobWVyZ2UgMTdiMjU0Y2RhNiBzYi9zaG93LWRpZmYtZm9yLXN1Ym1vZHVsZS1pbi1kaWZmLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFVwZGF0ZSB0aGUgYnVpbGQgZGVwZW5kZW5jeSBzbyB0aGF0IGFuIHVwZGF0ZSB0byAvdXNyL2Jpbi9wZXJsCisgICBldGMuIHJlc3VsdCBpbiByZWNvbXB1dGF0aW9uIG9mIHBlcmwubWFrIGZpbGUuCisgICAobWVyZ2UgYzU5YzQ5MzljMiBhYi9yZWdlbi1wZXJsLW1hay13aXRoLWRpZmZlcmVudC1wZXJsIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tcHVzaC1vcHRpb249PHN0cmluZz4iIGxlYXJuZWQgdG8KKyAgIHByb3BhZ2F0ZSB0aGUgcHVzaCBvcHRpb24gcmVjdXJzaXZlbHkgZG93biB0byBwdXNoZXMgaW4gc3VibW9kdWxlcy4KKworICogSWYgYSBwYXRjaCBlLW1haWwgaGFkIGl0cyBmaXJzdCBwYXJhZ3JhcGggYWZ0ZXIgYW4gaW4tYm9keSBoZWFkZXIKKyAgIGluZGVudGVkIChldmVuIGFmdGVyIGEgYmxhbmsgbGluZSBhZnRlciB0aGUgaW4tYm9keSBoZWFkZXIgbGluZSksCisgICB0aGUgaW5kZW50ZWQgbGluZSB3YXMgbWlzdG9vayBhcyBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgaW4tYm9keQorICAgaGVhZGVyLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSBmZDEwNjJlNTJlIGx0L21haWxpbmZvLWluLWJvZHktaGVhZGVyLWNvbnRpbnVhdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqIENsZWFuIHVwIGZhbGxvdXRzIGZyb20gcmVjZW50IHRpZ2h0ZW5pbmcgb2YgdGhlIHNldC11cCBzZXF1ZW5jZSwKKyAgIHdoZXJlIEdpdCBiYXJmcyB3aGVuIHJlcG9zaXRvcnkgaW5mb3JtYXRpb24gaXMgYWNjZXNzZWQgd2l0aG91dAorICAgZmlyc3QgZW5zdXJpbmcgdGhhdCBpdCB3YXMgc3RhcnRlZCBpbiBhIHJlcG9zaXRvcnkuCisgICAobWVyZ2UgYmNjYjIyY2JiMSBqay9uby1sb29raW5nLWF0LWRvdGdpdC1vdXRzaWRlLXJlcG8gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHA0IiB1c2VkICJuYW1lLXJldiBIRUFEIiB3aGVuIGl0IHdhbnRzIHRvIGxlYXJuIHdoYXQgYnJhbmNoIGlzCisgICBjaGVja2VkIG91dDsgaXQgc2hvdWxkIHVzZSAic3ltYm9saWMtcmVmIEhFQUQiLgorICAgKG1lcmdlIGVmZjQ1MTEwMWQgbGQvcDQtY3VycmVudC1icmFuY2gtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImh0dHAucHJveHkiIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgaXMgdXNlZCB0byBkaXNhYmxlIHRoZSB1c2FnZSBvZgorICAgcHJveHkuICBXZSBicm9rZSB0aGlzIGVhcmx5IGxhc3QgeWVhci4KKyAgIChtZXJnZSBhZTUxZDkxMTA1IHNyL2h0dHAtcHJveHktY29uZmlndXJhdGlvbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAkR0lUX0RJUiBtYXkgaW4gc29tZSBjYXNlcyBiZSBub3JtYWxpemVkIHdpdGggYWxsIHN5bWxpbmtzIHJlc29sdmVkCisgICB3aGlsZSAiZ2l0ZGlyIiBwYXRoIGV4cGFuc2lvbiBpbiB0aGUgcGF0dGVybiBkb2VzIG5vdCByZWNlaXZlIHRoZQorICAgc2FtZSB0cmVhdG1lbnQsIGxlYWRpbmcgdG8gaW5jb3JyZWN0IG1pc21hdGNoLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBzdWJtb2R1bGUiIHNjcmlwdCBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBzdHJhbmdlIHBhdGhuYW1lcy4KKyAgIFByb3RlY3QgaXQgZnJvbSBhIHBhdGggd2l0aCBzbGFzaGVzIGluIHRoZW0sIGF0IGxlYXN0LgorCisgKiAiZ2l0IGZldGNoLXBhY2siIHdhcyBub3QgcHJlcGFyZWQgdG8gYWNjZXB0IEVSUiBwYWNrZXQgdGhhdCB0aGUKKyAgIHVwbG9hZC1wYWNrIGNhbiBzZW5kIHdpdGggYSBodW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlLiAgSXQKKyAgIHNob3dlZCB0aGUgcGFja2V0IGNvbnRlbnRzIHdpdGggRVJSIHByZWZpeCwgc28gdGhlcmUgd2FzIG5vIGRhdGEKKyAgIGxvc3MsIGJ1dCBpdCB3YXMgcmVkdW5kYW50IHRvIHNheSAiRVJSIiBpbiBhbiBlcnJvciBtZXNzYWdlLgorICAgKG1lcmdlIDhlMmM3YmVmMDMganQvZmV0Y2gtcGFjay1lcnJvci1yZXBvcnRpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAibHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIGRpZCBub3QgcXVpdGUgd29yayB3ZWxsIGluIGEKKyAgIHByb2plY3Qgd2l0aCBuZXN0ZWQgc3VibW9kdWxlcy4KKworICogZ2V0aG9zdG5hbWUoMikgbWF5IG5vdCBOVUwgdGVybWluYXRlIHRoZSBidWZmZXIgaWYgaG9zdG5hbWUgZG9lcworICAgbm90IGZpdDsgdW5mb3J0dW5hdGVseSB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBzZWUgaWYgb3VyIGJ1ZmZlcgorICAgd2FzIHRvbyBzbWFsbCwgYnV0IGF0IGxlYXN0IHRoaXMgd2lsbCBtYWtlIHN1cmUgd2Ugd2lsbCBub3QgZW5kIHVwCisgICB1c2luZyBnYXJiYWdlIHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorICAgKG1lcmdlIDU3ODFhOWEyNzAgZHQveGdldGhvc3RuYW1lLW51bC10ZXJtaW5hdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqIEEgcmVjZW50IHVwZGF0ZSBicm9rZSAiZ2l0IGFkZCAtcCAuLi9mb28iIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyAqIFdoaWxlIGhhbmR5LCAiZ2l0X3BhdGgoKSIgaXMgYSBkYW5nZXJvdXMgZnVuY3Rpb24gdG8gdXNlIGFzIGEKKyAgIGNhbGxzaXRlIHRoYXQgdXNlcyBpdCBzYWZlbHkgb25lIGRheSBjYW4gYmUgYnJva2VuIGJ5IGNoYW5nZXMKKyAgIHRvIG90aGVyIGNvZGUgdGhhdCBjYWxscyBpdC4gIFJlZHVjdGlvbiBvZiBpdHMgdXNlIGNvbnRpbnVlcy4KKyAgIChtZXJnZSAxNmQyNjc2YzllIGprL3dhci1vbi1naXQtcGF0aCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzcGxpdC1pbmRleCBjb2RlIGNvbmZpZ3VyYXRpb24gY29kZSB1c2VkIGFuIHVuc2FmZSBnaXRfcGF0aCgpCisgICBmdW5jdGlvbiB3aXRob3V0IGNvcHlpbmcgaXRzIHJlc3VsdCBvdXQuCisKKyAqIE1hbnkgc3RhbGUgSFRUUChzKSBsaW5rcyBoYXZlIGJlZW4gdXBkYXRlZCBpbiBvdXIgZG9jdW1lbnRhdGlvbi4KKyAgIChtZXJnZSA2MTM0MTZmMGJlIGprL3VwZGF0ZS1saW5rcy1pbi1kb2NzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdC1zaGVsbCIgcmVqZWN0cyBhIHJlcXVlc3QgdG8gc2VydmUgYSByZXBvc2l0b3J5IHdob3NlIG5hbWUKKyAgIGJlZ2lucyB3aXRoIGEgZGFzaCwgd2hpY2ggbWFrZXMgaXQgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIGdldCBpdAorICAgY29uZnVzZWQgaW50byBzcGF3bmluZyBzZXJ2aWNlIHByb2dyYW1zIGxpa2UgImdpdC11cGxvYWQtcGFjayIgd2l0aAorICAgYW4gb3B0aW9uIGxpa2UgIi0taGVscCIsIHdoaWNoIGluIHR1cm4gd291bGQgc3Bhd24gYW4gaW50ZXJhY3RpdmUKKyAgIHBhZ2VyLCBpbnN0ZWFkIG9mIHdvcmtpbmcgd2l0aCB0aGUgcmVwb3NpdG9yeSB1c2VyIGFza2VkIHRvIGFjY2VzcworICAgKGkuZS4gdGhlIG9uZSB3aG9zZSBuYW1lIGlzICItLWhlbHAiKS4KKworICogT3RoZXIgbWlub3IgZG9jLCB0ZXN0IGFuZCBidWlsZCB1cGRhdGVzIGFuZCBjb2RlIGNsZWFudXBzLgorICAgKG1lcmdlIGRmMmE2ZTM4YjcgamsvcGFnZXItaW4tdXNlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3NWVjNGE2Y2IwIGFiL2JyYW5jaC1saXN0LWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgM2U1YjM2YzYzNyBzZy9za2lwLXByZWZpeC1pbi1wcmV0dGlmeS1yZWZuYW1lIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyYzVlMjg2NWNjIGprL2Zhc3QtaW1wb3J0LWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ0NzMwNjBiYzIgYWIvdGVzdC1yZWFkbWUtdXBkYXRlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDhhOTY5NzJmZCBhYi9kb2Mtc3VibWl0dGluZyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZjVjMmJjMmI5NiBqay9tYWtlLWNvY2NpY2hlY2stZGV0ZWN0LWVycm9ycyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYzEwNWY1NjNkMSBjYy91bnRyYWNrZWQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDg2Njg5NzZiNTMgamMvdW51c2VkLXN5bWJvbHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZiYTI3NWRjOTMgamMvYnMtdC1pcy1ub3QtYS10YWItZm9yLXNlZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYmU2ZWQxNDVkZSBtbS9scy1maWxlcy1zLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjBiMDkxYzY3OSBxcC9iaXNlY3QtZG9jZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0NzI0MmNkMTAzIGFoL2RpZmYtZmlsZXMtb3Vycy10aGVpcnMtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzNWFkNDRjYmQ4IHNiL3N1Ym1vZHVsZS1ybS1hYnNvcmIgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDAzMDFmMWZkOTIgdmEvaTE4bi1wZXJsLXNjcmlwdHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDczM2UwNjRkOTggdm4vcmV2aXNpb24tc2hvcnRoYW5kLWZvci1zaWRlLWJyYW5jaC1sb2cgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDg1OTk5NzQzZTcgdGIvZG9jLWVvbC1ub3JtYWxpemF0aW9uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwNzQ3ZmI0OWZkIGprL2xvb3NlLW9iamVjdC1mc2NrIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkOGY0NDgxYzRmIGprL3F1YXJhbnRpbmUtcmVjZWl2ZWQtb2JqZWN0cyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgN2JhMWNlZWY5NSB4eS9mb3JtYXQtcGF0Y2gtYmFzZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZmExOTEyYzg5YSBycy9taXNjLWNwcGNoZWNrLWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmMTdkNjQyZDNiIGFiL3B1c2gtY2FzLWRvYy1uLXRlc3QgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDYxZTI4MjQyNWEgc3MvZ2l0bW9kdWxlcy1pZ25vcmUtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4ZDMwNDdjZDViIHNzL3N1Ym1vZHVsZS1zaGFsbG93LWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMWY5ZTE4Yjc3MiBqay9wcmlvLXF1ZXVlLWF2b2lkLXN3YXAtd2l0aC1zZWxmIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2MjdmZGUxMDI1IGprL3N1Ym1vZHVsZS1pbml0LXNlZ3YtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkMzk1NzQ1ZDgxIHJnL2RvYy1wdWxsLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDAxZTYwYTlhMjIgcmcvZG9jLXN1Ym1pdHRpbmdwYXRjaGVzLXdvcmRmaXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDUwMWQzY2Q3Yjggc3IvaG9va3MtY3dkLWRvYyBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ3Y2Q5NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4xLnR4dApAQCAtMCwwICsxLDExNCBAQAorR2l0IHYyLjEzLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMworLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIFdlYiBpbnRlcmZhY2UgdG8gZ21hbmUgbmV3cyBhcmNoaXZlIGlzIGxvbmcgZ29uZSwgZXZlbiB0aG91Z2gKKyAgIHRoZSBhcnRpY2xlcyBhcmUgc3RpbGwgYWNjZXNzaWJsZSB2aWEgTlRUUC4gIFJlcGxhY2UgdGhlIGxpbmtzIHdpdGgKKyAgIG9uZXMgdG8gcHVibGljLWluYm94Lm9yZy4gIEJlY2F1c2UgdGhlaXIgbWVzc2FnZSBpZGVudGlmaWNhdGlvbiBpcworICAgYmFzZWQgb24gdGhlIGFjdHVhbCBtZXNzYWdlLWlkLCBpdCBpcyBsaWtlbHkgdGhhdCBpdCB3aWxsIGJlIGVhc2llcgorICAgdG8gbWlncmF0ZSBhd2F5IGZyb20gaXQgaWYvd2hlbiBuZWNlc3NhcnkuCisKKyAqIFVwZGF0ZSB0ZXN0cyB0byBwYXNzIHVuZGVyIEdFVFRFWFRfUE9JU09OIChhIG1lY2hhbmlzbSB0byBlbnN1cmUKKyAgIHRoYXQgb3V0cHV0IHN0cmluZ3MgdGhhdCBzaG91bGQgbm90IGJlIHRyYW5zbGF0ZWQgYXJlIG5vdAorICAgdHJhbnNsYXRlZCBieSBtaXN0YWtlKSwgYW5kIHRlbGwgVHJhdmlzQ0kgdG8gcnVuIHRoZW0uCisKKyAqIFNldHRpbmcgImxvZy5kZWNvcmF0ZT1mYWxzZSIgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBkaWQgbm90IHRha2UKKyAgIGVmZmVjdCBpbiB2Mi4xMywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBBbiBlYXJsaWVyIHVwZGF0ZSB0byB0ZXN0IDc0MDAgbmVlZGVkIHRvIGJlIHNraXBwZWQgb24gQ1lHV0lOLgorCisgKiBHaXQgc29tZXRpbWVzIGdpdmVzIGFuIGFkdmljZSBpbiBhIHJoZXRvcmljYWwgcXVlc3Rpb24gdGhhdCBkb2VzCisgICBub3QgcmVxdWlyZSBhbiBhbnN3ZXIsIHdoaWNoIGNhbiBjb25mdXNlIG5ldyB1c2VycyBhbmQgbm9uIG5hdGl2ZQorICAgc3BlYWtlcnMuICBBdHRlbXB0IHRvIHJlcGhyYXNlIHRoZW0uCisKKyAqICJnaXQgcmVhZC10cmVlIC1tIiAobm8gdHJlZS1pc2gpIGdhdmUgYSBub25zZW5zZSBzdWdnZXN0aW9uICJ1c2UKKyAgIC0tZW1wdHkgaWYgeW91IHdhbnQgdG8gY2xlYXIgdGhlIGluZGV4Ii4gIFdpdGggIi1tIiwgc3VjaCBhIHJlcXVlc3QKKyAgIHdpbGwgc3RpbGwgZmFpbCBhbnl3YXksIGFzIHlvdSdkIG5lZWQgdG8gbmFtZSBhdCBsZWFzdCBvbmUgdHJlZS1pc2gKKyAgIHRvIGJlIG1lcmdlZC4KKworICogVGhlIGNvZGVwYXRoIGluICJnaXQgYW0iIHRoYXQgaXMgdXNlZCB3aGVuIHJ1bm5pbmcgImdpdCByZWJhc2UiCisgICBsZWFrZWQgbWVtb3J5IGhlbGQgZm9yIHRoZSBsb2cgbWVzc2FnZSBvZiB0aGUgY29tbWl0cyBiZWluZyByZWJhc2VkLgorCisgKiAicGFjay1vYmplY3RzIiBjYW4gc3RyZWFtIGEgc2xpY2Ugb2YgYW4gZXhpc3RpbmcgcGFja2ZpbGUgb3V0IHdoZW4KKyAgIHRoZSBwYWNrIGJpdG1hcCBjYW4gdGVsbCB0aGF0IHRoZSByZWFjaGFibGUgb2JqZWN0cyBhcmUgYWxsIG5lZWRlZAorICAgaW4gdGhlIG91dHB1dCwgd2l0aG91dCBpbnNwZWN0aW5nIGluZGl2aWR1YWwgb2JqZWN0cy4gIFRoaXMKKyAgIHN0cmF0ZWd5IGhvd2V2ZXIgd291bGQgbm90IHdvcmsgd2VsbCB3aGVuICItLWxvY2FsIiBhbmQgb3RoZXIKKyAgIG9wdGlvbnMgYXJlIGluIHVzZSwgYW5kIG5lZWQgdG8gYmUgZGlzYWJsZWQuCisKKyAqIENsYXJpZnkgZG9jdW1lbnRhdGlvbiBmb3IgaW5jbHVkZS5wYXRoIGFuZCBpbmNsdWRlSWYuPGNvbmRpdGlvbj4ucGF0aAorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisKKyAqIFRhZyBvYmplY3RzLCB3aGljaCBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIGFueSByZWYsIHRoYXQgcG9pbnQgYXQKKyAgIG1pc3Npbmcgb2JqZWN0cyB3ZXJlIG1pc2hhbmRsZWQgYnkgImdpdCBnYyIgYW5kIGZyaWVuZHMgKHRoZXkKKyAgIHNob3VsZCBzaWxlbnRseSBiZSBpZ25vcmVkIGluc3RlYWQpCisKKyAqIEEgZmV3IGh0dHA6Ly8gbGlua3MgdGhhdCBhcmUgcmVkaXJlY3RlZCB0byBodHRwczovLyBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gaHR0cHM6Ly8gbGlua3MuCisKKyAqIE1ha2Ugc3VyZSBvdXIgdGVzdHMgd291bGQgcGFzcyB3aGVuIHRoZSBzb3VyY2VzIGFyZSBjaGVja2VkIG91dAorICAgd2l0aCAicGxhdGZvcm0gbmF0aXZlIiBsaW5lIGVuZGluZyBjb252ZW50aW9uIGJ5IGRlZmF1bHQgb24KKyAgIFdpbmRvd3MuICBTb21lICJ0ZXh0IiBmaWxlcyBvdXQgdGVzdHMgdXNlIGFuZCB0aGUgdGVzdCBzY3JpcHRzCisgICB0aGVtc2VsdmVzIHRoYXQgYXJlIG1lYW50IHRvIGJlIHJ1biB3aXRoIC9iaW4vc2gsIG91Z2h0IHRvIGJlCisgICBjaGVja2VkIG91dCB3aXRoIGVvbD1MRiBldmVuIG9uIFdpbmRvd3MuCisKKyAqIEZpeCBtZW1vcnkgbGVha3MgcG9pbnRlZCBvdXQgYnkgQ292ZXJpdHkgKGFuZCBwZW9wbGUpLgorCisgKiBUaGUgcmVjZWl2ZS1wYWNrIHByb2dyYW0gbm93IG1ha2VzIHN1cmUgdGhhdCB0aGUgcHVzaCBjZXJ0aWZpY2F0ZQorICAgcmVjb3JkcyB0aGUgc2FtZSBzZXQgb2YgcHVzaCBvcHRpb25zIHVzZWQgZm9yIHB1c2hpbmcuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2siIGFuZCBvdGhlciB1c2VzIG9mIHRoZSBzZXF1ZW5jZXIgbWFjaGluZXJ5CisgICBtaXNoYW5kbGVkIGEgdHJhaWxlciBibG9jayB3aG9zZSBsYXN0IGxpbmUgaXMgYW4gaW5jb21wbGV0ZSBsaW5lLgorICAgVGhpcyBoYXMgYmVlbiBmaXhlZCBzbyB0aGF0IGFuIGFkZGl0aW9uYWwgc2lnbi1vZmYgZXRjLiBhcmUgYWRkZWQKKyAgIGFmdGVyIGNvbXBsZXRpbmcgdGhlIGV4aXN0aW5nIGluY29tcGxldGUgbGluZS4KKworICogVGhlIHNoZWxsIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgbGVhcm5lZCAiZ2l0IHN0YXNoIiBoYXMKKyAgIGEgbmV3ICJwdXNoIiBzdWJjb21tYW5kLgorCisgKiBUcmF2aXMgQ0kgZ2FpbmVkIGEgdGFzayB0byBmb3JtYXQgdGhlIGRvY3VtZW50YXRpb24gd2l0aCBib3RoCisgICBBc2NpaURvYyBhbmQgQXNjaWlEb2N0b3IuCisKKyAqIFVwZGF0ZSB0aGUgQyBzdHlsZSByZWNvbW1lbmRhdGlvbiBmb3Igbm90ZXMgZm9yIHRyYW5zbGF0b3JzLCBhcworICAgcmVjZW50IHZlcnNpb25zIG9mIGdldHRleHQgdG9vbHMgY2FuIHdvcmsgd2l0aCBvdXIgc3R5bGUgb2YKKyAgIG11bHRpLWxpbmUgY29tbWVudHMuCisKKyAqICJnaXQgY2xvbmUgLS1jb25maWcgdmFyPXZhbCIgaXMgYSB3YXkgdG8gcG9wdWxhdGUgdGhlCisgICBwZXItcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGZpbGUgb2YgdGhlIG5ldyByZXBvc2l0b3J5LCBidXQgaXQgZGlkCisgICBub3Qgd29yayB3ZWxsIHdoZW4gdmFsIGlzIGFuIGVtcHR5IHN0cmluZy4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqIEEgZmV3IGNvZGVwYXRocyBpbiAiY2hlY2tvdXQiIGFuZCAiYW0iIHdvcmtpbmcgb24gYW4gdW5ib3JuIGJyYW5jaAorICAgdHJpZWQgdG8gYWNjZXNzIGFuIHVuaW5pdGlhbGl6ZWQgcGllY2Ugb2YgbWVtb3J5LgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0uLi4iIHdpdGggJShIRUFEKSBpbiB0aGUgZm9ybWF0IHVzZWQgdG8KKyAgIHJlc29sdmUgdGhlIEhFQUQgc3ltcmVmIGFzIG1hbnkgdGltZXMgYXMgaXQgaGFkIHByb2Nlc3NlZCByZWZzLAorICAgd2hpY2ggd2FzIHdhc3RlZnVsLCBhbmQgImdpdCBicmFuY2giIHNoYXJlZCB0aGUgc2FtZSBwcm9ibGVtLgorCisgKiAiZ2l0IGludGVycHJldC10cmFpbGVycyIsIHdoZW4gdXNlZCBhcyBHSVRfRURJVE9SIGZvciAiZ2l0IGNvbW1pdAorICAgLXYiLCBsb29rZWQgZm9yIGFuZCBhcHBlbmRlZCB0byBhIHRyYWlsZXIgYmxvY2sgYXQgdGhlIHZlcnkgZW5kLAorICAgaS5lLiBhdCB0aGUgZW5kIG9mIHRoZSAiZGlmZiIgb3V0cHV0LiAgVGhlIGNvbW1hbmQgaGFzIGJlZW4KKyAgIGNvcnJlY3RlZCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBjdXQtbWFyayBsaW5lICJjb21taXQgLXYiIGFkZHMgdG8KKyAgIHRoZSBidWZmZXItLS10aGUgcmVhbCB0cmFpbGVyIGJsb2NrIHNob3VsZCBhcHBlYXIganVzdCBiZWZvcmUgaXQuCisKKyAqIEEgdGVzdCBhbGxvd2VkIGJvdGggImdpdCBwdXNoIiBhbmQgImdpdCByZWNlaXZlLXBhY2siIG9uIHRoZSBvdGhlcgorICAgZW5kIHdyaXRlIHRoZWlyIHRyYWNlcyBpbnRvIHRoZSBzYW1lIGZpbGUuICBUaGlzIGlzIE9LIG9uIHBsYXRmb3JtcworICAgdGhhdCBhbGxvd3MgYXRvbWljYWxseSBhcHBlbmRpbmcgdG8gYSBmaWxlIG9wZW5lZCB3aXRoIE9fQVBQRU5ELAorICAgYnV0IG9uIG90aGVyIHBsYXRmb3JtcyBsZWQgdG8gYSBtYW5nbGVkIG91dHB1dCwgY2F1c2luZworICAgaW50ZXJtaXR0ZW50IHRlc3QgZmFpbHVyZXMuICBUaGlzIGhhcyBiZWVuIGZpeGVkIGJ5IGRpc2FibGluZworICAgdHJhY2VzIGZyb20gInJlY2VpdmUtcGFjayIgaW4gdGhlIHRlc3QuCisKKyAqICJmb29cYmFyXGJheiIgaW4gImdpdCBmZXRjaCBmb29cYmFyXGJheiIsIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIG5vCisgICBzbGFzaGVzIGluIGl0LCBjYW5ub3QgYmUgYSBuaWNrbmFtZSBmb3IgYSByZW1vdGUgb24gV2luZG93cywgYXMKKyAgIHRoYXQgaXMgbGlrZWx5IHRvIGJlIGEgcGF0aG5hbWUgb24gYSBsb2NhbCBmaWxlc3lzdGVtLgorCisgKiBUaGUgImNvbGxpc2lvbiBkZXRlY3RpbmciIFNIQS0xIGltcGxlbWVudGF0aW9uIHNoaXBwZWQgd2l0aCAyLjEzCisgICB3YXMgcXVpdGUgYnJva2VuIG9uIHNvbWUgYmlnLWVuZGlhbiBwbGF0Zm9ybXMgYW5kL29yIHBsYXRmb3JtcyB0aGF0CisgICBkbyBub3QgbGlrZSB1bmFsaWduZWQgZmV0Y2hlcy4gIFVwZGF0ZSB0byB0aGUgdXBzdHJlYW0gY29kZSB3aGljaAorICAgaGFzIGFscmVhZHkgZml4ZWQgdGhlc2UgaXNzdWVzLgorCisgKiAiZ2l0IGFtIC1oIiB0cmlnZ2VyZWQgYSBCVUcoKS4KKworICogVGhlIGludGVyYWN0aW9uIG9mICJ1cmwuKi5pbnN0ZWFkT2YiIGFuZCBjdXN0b20gVVJMIHNjaGVtZSdzCisgICB3aGl0ZWxpc3RpbmcgaXMgbm93IGRvY3VtZW50ZWQgYmV0dGVyLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzJiMjAwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjIudHh0CkBAIC0wLDAgKzEsNTQgQEAKK0dpdCB2Mi4xMy4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTMuMQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgImNvbGxpc2lvbiBkZXRlY3RpbmciIFNIQS0xIGltcGxlbWVudGF0aW9uIHNoaXBwZWQgd2l0aCAyLjEzLjEKKyAgIHdhcyBzdGlsbCBicm9rZW4gb24gc29tZSBwbGF0Zm9ybXMuICBVcGRhdGUgdG8gdGhlIHVwc3RyZWFtIGNvZGUKKyAgIGFnYWluIHRvIHRha2UgdGhlaXIgZml4LgorCisgKiAiZ2l0IGNoZWNrb3V0IC0tcmVjdXJzZS1zdWJtb2R1bGVzIiBkaWQgbm90IHF1aXRlIHdvcmsgd2l0aCBhCisgICBzdWJtb2R1bGUgdGhhdCBpdHNlbGYgaGFzIHN1Ym1vZHVsZXMuCisKKyAqIEludHJvZHVjZSB0aGUgQlVHKCkgbWFjcm8gdG8gaW1wcm92ZSBkaWUoIkJVRzogLi4uIikuCisKKyAqIFRoZSAicnVuLWNvbW1hbmQiIEFQSSBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbiBtYWRlIG1vcmUgcm9idXN0CisgICBhZ2FpbnN0IGRlYWQtbG9ja2luZyBpbiBhIHRocmVhZGVkIGVudmlyb25tZW50LgorCisgKiBBIHJlY2VudCB1cGRhdGUgdG8gdDU1NDUtcHVzaC1vcHRpb25zLnNoIHN0YXJ0ZWQgc2tpcHBpbmcgYWxsIHRoZQorICAgdGVzdHMgaW4gdGhlIHNjcmlwdCB3aGVuIGEgd2ViIHNlcnZlciB0ZXN0aW5nIGlzIGRpc2FibGVkIG9yCisgICB1bmF2YWlsYWJsZSwgbm90IGp1c3QgdGhlIG9uZXMgdGhhdCByZXF1aXJlIGEgd2ViIHNlcnZlci4gIE5vbiBIVFRQCisgICB0ZXN0cyBoYXZlIGJlZW4gc2FsdmFnZWQgdG8gYWx3YXlzIHJ1biBpbiB0aGlzIHNjcmlwdC4KKworICogImdpdCBjbGVhbiAtZCIgdXNlZCB0byBjbGVhbiBkaXJlY3RvcmllcyB0aGF0IGhhcyBpZ25vcmVkIGZpbGVzLAorICAgZXZlbiB0aG91Z2ggdGhlIGNvbW1hbmQgc2hvdWxkIG5vdCBsb3NlIGlnbm9yZWQgb25lcyB3aXRob3V0ICIteCIuCisgICAiZ2l0IHN0YXR1cyAtLWlnbm9yZWQiICBkaWQgbm90IGxpc3QgaWdub3JlZCBhbmQgdW50cmFja2VkIGZpbGVzCisgICB3aXRob3V0ICItdWFsbCIuICBUaGVzZSBoYXZlIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgdGltZXN0YW1wIG9mIHRoZSBpbmRleCBmaWxlIGlzIG5vdyB0YWtlbiBhZnRlciB0aGUgZmlsZSBpcworICAgY2xvc2VkLCB0byBoZWxwIFdpbmRvd3MsIG9uIHdoaWNoIGEgc3RhbGUgdGltZXN0YW1wIGlzIHJlcG9ydGVkIGJ5CisgICBmc3RhdCgpIG9uIGEgZmlsZSB0aGF0IGlzIG9wZW5lZCBmb3Igd3JpdGluZyBhbmQgZGF0YSB3YXMgd3JpdHRlbgorICAgYnV0IG5vdCB5ZXQgY2xvc2VkLgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UgLS1hdXRvc3Rhc2giIGRpZG4ndCBhdXRvLXN0YXNoIHdoZW4gdGhlIGxvY2FsIGhpc3RvcnkKKyAgIGZhc3QtZm9yd2FyZHMgdG8gdGhlIHVwc3RyZWFtLgorCisgKiAiZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMiIHBlbmFsaXplZCBsaWdodC13ZWlnaHQgdGFncyBzbyBtdWNoIHRoYXQKKyAgIHRoZXkgd2VyZSBhbG1vc3QgbmV2ZXIgY29uc2lkZXJlZC4gIEluc3RlYWQsIGdpdmUgdGhlbSBhYm91dCB0aGUKKyAgIHNhbWUgY2hhbmNlIHRvIGJlIGNvbnNpZGVyZWQgYXMgYW4gYW5ub3RhdGVkIHRhZyB0aGF0IGlzIHRoZSBzYW1lCisgICBhZ2UgYXMgdGhlIHVuZGVybHlpbmcgY29tbWl0IHdvdWxkLgorCisgKiBUaGUgcmVzdWx0IGZyb20gImdpdCBkaWZmIiB0aGF0IGNvbXBhcmVzIHR3byBibG9icywgZS5nLiAiZ2l0IGRpZmYKKyAgICRjb21taXQxOiRwYXRoICRjb21taXQyOiRwYXRoIiwgdXNlZCB0byBiZSBzaG93biB3aXRoIHRoZSBmdWxsCisgICBvYmplY3QgbmFtZSBhcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCBidXQgaXQgaXMgbW9yZSBuYXR1cmFsIHRvCisgICB1c2UgdGhlICRwYXRoIGluIHRoZSBvdXRwdXQgYW5kIHVzZSBpdCB0byBsb29rIHVwIC5naXRhdHRyaWJ1dGVzLgorCisgKiBBIGZsYWt5IHRlc3QgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBIZWxwIGNvbnRyaWJ1dG9ycyB0aGF0IHZpc2l0IHVzIGF0IEdpdEh1Yi4KKworICogImdpdCBzdGFzaCBwdXNoIDxwYXRoc3BlYz4iIGRpZCBub3Qgd29yayBmcm9tIGEgc3ViZGlyZWN0b3J5IGF0IGFsbC4KKyAgIEJ1Z2ZpeCBmb3IgYSB0b3BpYyBpbiB2Mi4xMworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODRlNGRlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjMudHh0CkBAIC0wLDAgKzEsNjIgQEAKK0dpdCB2Mi4xMy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTMuMgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgImNvbGxpc2lvbiBkZXRlY3RpbmciIFNIQS0xIGltcGxlbWVudGF0aW9uIHNoaXBwZWQgd2l0aCAyLjEzLjIKKyAgIHdhcyBzdGlsbCBicm9rZW4gb24gc29tZSBwbGF0Zm9ybXMuICBVcGRhdGUgdG8gdGhlIHVwc3RyZWFtIGNvZGUKKyAgIGFnYWluIHRvIHRha2UgdGhlaXIgZml4LgorCisgKiBUaGUgJ2RpZmYtaGlnaGxpZ2h0JyBwcm9ncmFtIChpbiBjb250cmliLykgaGFzIGJlZW4gcmVzdHJ1Y3R1cmVkCisgICBmb3IgZWFzaWVyIHJldXNlIGJ5IGFuIGV4dGVybmFsIHByb2plY3QgJ2RpZmYtc28tZmFuY3knLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgbGVhcm5lZCB0byB3b3JrIGFyb3VuZCBhIHdyYXBwZXIgTWFjT1MgWCBhZGRzCisgICBhcm91bmQgdW5kZXJseWluZyBtZWxkLgorCisgKiBBbiBleGFtcGxlIGluIGRvY3VtZW50YXRpb24gdGhhdCBkb2VzIG5vdCB3b3JrIGluIG11bHRpIHdvcmt0cmVlCisgICBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIHByZXR0eS1mb3JtYXQgc3BlY2lmaWVycyBsaWtlICclaCcsICcldCcsIGV0Yy4gaGFkIGFuCisgICBvcHRpbWl6YXRpb24gdGhhdCBubyBsb25nZXIgd29ya3MgY29ycmVjdGx5LiAgSW4gcHJlcGFyYXRpb24vaG9wZQorICAgb2YgZ2V0dGluZyBpdCBjb3JyZWN0bHkgaW1wbGVtZW50ZWQsIGZpcnN0IGRpc2NhcmQgdGhlIG9wdGltaXphdGlvbgorICAgdGhhdCBpcyBicm9rZW4uCisKKyAqIFRoZSBjb2RlIHRvIHBpY2sgdXAgYW5kIGV4ZWN1dGUgY29tbWFuZCBhbGlhcyBkZWZpbml0aW9uIGZyb20gdGhlCisgICBjb25maWd1cmF0aW9uIHVzZWQgdG8gc3dpdGNoIHRvIHRoZSB0b3Agb2YgdGhlIHdvcmtpbmcgdHJlZSBhbmQKKyAgIHRoZW4gY29tZSBiYWNrIHdoZW4gdGhlIGV4cGFuZGVkIGFsaWFzIHdhcyBleGVjdXRlZCwgd2hpY2ggd2FzCisgICB1bm5lY2Vzc2FyaWx5IGNvbXBsZXguICBBdHRlbXB0IHRvIHNpbXBsaWZ5IHRoZSBsb2dpYyBieSB1c2luZyB0aGUKKyAgIGVhcmx5LWNvbmZpZyBtZWNoYW5pc20gdGhhdCBkb2VzIG5vdCBjaGRpciBhcm91bmQuCisKKyAqICJnaXQgYWRkIC1wIiB3ZXJlIHVwZGF0ZWQgaW4gMi4xMiB0aW1lZnJhbWUgdG8gY29wZSB3aXRoIGN1c3RvbQorICAgY29yZS5jb21tZW50Y2hhciBidXQgdGhlIGltcGxlbWVudGF0aW9uIHdhcyBidWdneSBhbmQgYQorICAgbWV0YWNoYXJhY3RlciBsaWtlICQgYW5kICogZGlkIG5vdCB3b3JrLgorCisgKiBGaXggYSByZWNlbnQgcmVncmVzc2lvbiB0byAiZ2l0IHJlYmFzZSAtaSIgYW5kIGFkZCB0ZXN0cyB0aGF0IHdvdWxkCisgICBoYXZlIGNhdWdodCBpdCBhbmQgb3RoZXJzLgorCisgKiBBbiB1bmFsaWduZWQgMzItYml0IGFjY2VzcyBpbiBwYWNrLWJpdG1hcCBjb2RlIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGlnaHRlbiBlcnJvciBjaGVja3MgZm9yIGludmFsaWQgImdpdCBhcHBseSIgaW5wdXQuCisKKyAqIFRoZSBzcGxpdCBpbmRleCBjb2RlIGRpZCBub3QgaG9ub3IgY29yZS5zaGFyZWRyZXBvc2l0b3J5IHNldHRpbmcKKyAgIGNvcnJlY3RseS4KKworICogVGhlIE1ha2VmaWxlIHJ1bGUgaW4gY29udHJpYi9zdWJ0cmVlIGZvciBidWlsZGluZyBkb2N1bWVudGF0aW9uCisgICBsZWFybmVkIHRvIGhvbm91ciBVU0VfQVNDSUlET0NUT1IganVzdCBsaWtlIHRoZSBtYWluIGRvY3VtZW50YXRpb24KKyAgIHNldCBkb2VzLgorCisgKiBBIGZldyB0ZXN0cyB0aGF0IHRyaWVkIHRvIHZlcmlmeSB0aGUgY29udGVudHMgb2YgcHVzaCBjZXJ0aWZpY2F0ZXMKKyAgIGRpZCBub3QgdXNlICdnaXQgcmV2LXBhcnNlJyB0byBmb3JtdWxhdGUgdGhlIGxpbmUgdG8gbG9vayBmb3IgaW4KKyAgIHRoZSBjZXJ0aWZpY2F0ZSBjb3JyZWN0bHkuCisKKyAqIEFmdGVyICJnaXQgYnJhbmNoIC0tbW92ZSIgb2YgdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dCBicmFuY2gsIHRoZQorICAgY29kZSB0byB3YWxrIHRoZSByZWZsb2cgb2YgSEVBRCB2aWEgImxvZyAtZyIgYW5kIGZyaWVuZHMKKyAgIGluY29ycmVjdGx5IHN0b3BwZWQgYXQgdGhlIHJlZmxvZyBlbnRyeSB0aGF0IHJlY29yZHMgdGhlIHJlbmFtaW5nCisgICBvZiB0aGUgYnJhbmNoLgorCisgKiBUaGUgcmV3cml0ZSBvZiAiZ2l0IGJyYW5jaCAtLWxpc3QiIHVzaW5nIGZvci1lYWNoLXJlZidzIGludGVybmFscworICAgdGhhdCBoYXBwZW5lZCBpbiB2Mi4xMyByZWdyZXNzZWQgaXRzIGhhbmRsaW5nIG9mIGNvbG9yLmJyYW5jaC5sb2NhbDsKKyAgIHRoaXMgaGFzIGJlZW4gZml4ZWQuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhOWY4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuNC50eHQKQEAgLTAsMCArMSwyOCBAQAorR2l0IHYyLjEzLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMy4zCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFVwZGF0ZSB0aGUgY2hhcmFjdGVyIHdpZHRoIHRhYmxlcy4KKworICogQSByZWNlbnQgdXBkYXRlIGJyb2tlIGFuIGFsaWFzIHRoYXQgY29udGFpbmVkIGFuIHVwcGVyY2FzZSBsZXR0ZXIsCisgICB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogT24gQ3lnd2luLCBzaW1pbGFyIHRvIFdpbmRvd3MsICJnaXQgcHVzaCAvL3NlcnZlci9zaGFyZS9yZXBvc2l0b3J5IgorICAgb3VnaHQgdG8gbWVhbiBhIHJlcG9zaXRvcnkgb24gYSBuZXR3b3JrIHNoYXJlIHRoYXQgY2FuIGJlIGFjY2Vzc2VkCisgICBsb2NhbGx5LCBidXQgdGhpcyBkaWQgbm90IHdvcmsgY29ycmVjdGx5IGR1ZSB0byBzdHJpcHBpbmcgdGhlIGRvdWJsZQorICAgc2xhc2hlcyBhdCB0aGUgYmVnaW5uaW5nLgorCisgKiBUaGUgcHJvZ3Jlc3MgbWV0ZXIgZGlkIG5vdCBnaXZlIGEgdXNlZnVsIG91dHB1dCB3aGVuIHdlIGhhdmVuJ3QgaGFkCisgICAwLjUgc2Vjb25kcyB0byBtZWFzdXJlIHRoZSB0aHJvdWdocHV0IGR1cmluZyB0aGUgaW50ZXJ2YWwuICBJbnN0ZWFkCisgICBzaG93IHRoZSBvdmVyYWxsIHRocm91Z2hwdXQgcmF0ZSBhdCB0aGUgZW5kLCB3aGljaCBpcyBhIG11Y2ggbW9yZQorICAgdXNlZnVsIG51bWJlci4KKworICogV2UgcnVuIGFuIGVhcmx5IHBhcnQgb2YgImdpdCBnYyIgdGhhdCBkZWFscyB3aXRoIHJlZnMgYmVmb3JlCisgICBkYWVtb25pc2luZyAoYW5kIG5vdCB1bmRlciBsb2NrKSBldmVuIHdoZW4gcnVubmluZyBhIGJhY2tncm91bmQKKyAgIGF1dG8tZ2MsIHdoaWNoIGNhdXNlZCBtdWx0aXBsZSBnYyBwcm9jZXNzZXMgYXR0ZW1wdGluZyB0byBydW4gdGhlCisgICBlYXJseSBwYXJ0IGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIGlzIG5vdyBwcmV2ZW50ZWQgYnkgcnVubmluZyB0aGUKKyAgIGVhcmx5IHBhcnQgYWxzbyB1bmRlciB0aGUgR0MgbG9jay4KKworQWxzbyBjb250YWlucyBhIGhhbmRmdWwgb2Ygc21hbGwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk0OWZjZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy41LnR4dApAQCAtMCwwICsxLDQgQEAKK0dpdCB2Mi4xMy41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGZvcndhcmQtcG9ydHMgdGhlIGZpeCBmb3IgInNzaDovLy4uLiIgVVJMIGZyb20gR2l0IHYyLjcuNgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmY2FlOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuNi50eHQKQEAgLTAsMCArMSwxNyBAQAorR2l0IHYyLjEzLjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMy41CistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgY3Zzc2VydmVyIiBubyBsb25nZXIgaXMgaW52b2tlZCBieSAiZ2l0IGRhZW1vbiIgYnkgZGVmYXVsdCwKKyAgIGFzIGl0IGlzIG9sZCBhbmQgbGFyZ2VseSB1bm1haW50YWluZWQuCisKKyAqIFZhcmlvdXMgUGVybCBzY3JpcHRzIGRpZCBub3QgdXNlIHNhZmVfcGlwZV9jYXB0dXJlKCkgaW5zdGVhZCBvZgorICAgYmFja3RpY2tzLCBsZWF2aW5nIHRoZW0gc3VzY2VwdGlibGUgdG8gZW5kLXVzZXIgaW5wdXQuICBUaGV5IGhhdmUKKyAgIGJlZW4gY29ycmVjdGVkLgorCitDcmVkaXRzIGdvIHRvIGpvZXJuY2hlbiA8am9lcm5jaGVuQHBoZW5vZWxpdC5kZT4gZm9yIGZpbmRpbmcgdGhlCit1bnNhZmUgY29uc3RydWN0cyBpbiAiZ2l0IGN2c3NlcnZlciIsIGFuZCB0byBKZWZmIEtpbmcgYXQgR2l0SHViIGZvcgorZmluZGluZyBhbmQgZml4aW5nIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBpc3N1ZSBpbiBvdGhlciBzY3JpcHRzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmYzAxNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy43LnR4dApAQCAtMCwwICsxLDIwIEBACitHaXQgdjIuMTMuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjEzLjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogU3VibW9kdWxlICJuYW1lcyIgY29tZSBmcm9tIHRoZSB1bnRydXN0ZWQgLmdpdG1vZHVsZXMgZmlsZSwgYnV0IHdlCisgICBibGluZGx5IGFwcGVuZCB0aGVtIHRvICRHSVRfRElSL21vZHVsZXMgdG8gY3JlYXRlIG91ciBvbi1kaXNrIHJlcG8KKyAgIHBhdGhzLiBUaGlzIG1lYW5zIHlvdSBjYW4gZG8gYmFkIHRoaW5ncyBieSBwdXR0aW5nICIuLi8iIGludG8gdGhlCisgICBuYW1lLiBXZSBub3cgZW5mb3JjZSBzb21lIHJ1bGVzIGZvciBzdWJtb2R1bGUgbmFtZXMgd2hpY2ggd2lsbCBjYXVzZQorICAgR2l0IHRvIGlnbm9yZSB0aGVzZSBtYWxpY2lvdXMgbmFtZXMgKENWRS0yMDE4LTExMjM1KS4KKworICAgQ3JlZGl0IGZvciBmaW5kaW5nIHRoaXMgdnVsbmVyYWJpbGl0eSBhbmQgdGhlIHByb29mIG9mIGNvbmNlcHQgZnJvbQorICAgd2hpY2ggdGhlIHRlc3Qgc2NyaXB0IHdhcyBhZGFwdGVkIGdvZXMgdG8gRXRpZW5uZSBTdGFsbWFucy4KKworICogSXQgd2FzIHBvc3NpYmxlIHRvIHRyaWNrIHRoZSBjb2RlIHRoYXQgc2FuaXR5LWNoZWNrcyBwYXRocyBvbiBOVEZTCisgICBpbnRvIHJlYWRpbmcgcmFuZG9tIHBpZWNlIG9mIG1lbW9yeSAoQ1ZFLTIwMTgtMTEyMzMpLgorCitDcmVkaXQgZm9yIGZpeGluZyBmb3IgdGhlc2UgYnVncyBnb2VzIHRvIEplZmYgS2luZywgSm9oYW5uZXMKK1NjaGluZGVsaW4gYW5kIG90aGVycy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzExYTI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjAudHh0CkBAIC0wLDAgKzEsNTE3IEBACitHaXQgMi4xNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMgYW5kIG90aGVyIG5vdGFibGUgY2hhbmdlcy4KKworICogVXNlIG9mIGFuIGVtcHR5IHN0cmluZyBhcyBhIHBhdGhzcGVjIGVsZW1lbnQgdGhhdCBpcyB1c2VkIGZvcgorICAgJ2V2ZXJ5dGhpbmcgbWF0Y2hlcycgaXMgc3RpbGwgd2FybmVkIGFuZCBHaXQgYXNrcyB1c2VycyB0byB1c2UgYQorICAgbW9yZSBleHBsaWNpdCAnLicgZm9yIHRoYXQgaW5zdGVhZC4gIFRoZSBob3BlIGlzIHRoYXQgZXhpc3RpbmcKKyAgIHVzZXJzIHdpbGwgbm90IG1pbmQgdGhpcyBjaGFuZ2UsIGFuZCBldmVudHVhbGx5IHRoZSB3YXJuaW5nIGNhbiBiZQorICAgdHVybmVkIGludG8gYSBoYXJkIGVycm9yLCB1cGdyYWRpbmcgdGhlIGRlcHJlY2F0aW9uIGludG8gcmVtb3ZhbCBvZgorICAgdGhpcyAobWlzKWZlYXR1cmUuICBUaGF0IGlzIG5vdCBzY2hlZHVsZWQgdG8gaGFwcGVuIGluIHRoZSB1cGNvbWluZworICAgcmVsZWFzZSAoeWV0KS4KKworICogR2l0IG5vdyBhdm9pZHMgYmxpbmRseSBmYWxsaW5nIGJhY2sgdG8gIi5naXQiIHdoZW4gdGhlIHNldHVwCisgICBzZXF1ZW5jZSBzYWlkIHdlIGFyZSBfbm90XyBpbiBHaXQgcmVwb3NpdG9yeS4gIEEgY29ybmVyIGNhc2UgdGhhdAorICAgaGFwcGVucyB0byB3b3JrIHJpZ2h0IG5vdyBtYXkgYmUgYnJva2VuIGJ5IGEgY2FsbCB0byBkaWUoIkJVRyIpLgorICAgV2UndmUgdHJpZWQgaGFyZCB0byBsb2NhdGUgc3VjaCBjYXNlcyBhbmQgZml4ZWQgdGhlbSwgYnV0IHRoZXJlCisgICBtaWdodCBzdGlsbCBiZSBjYXNlcyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkLS1idWcgcmVwb3J0cyBhcmUKKyAgIGdyZWF0bHkgYXBwcmVjaWF0ZWQuCisKKyAqIFRoZSBleHBlcmltZW50IHRvIGltcHJvdmUgdGhlIGh1bmstYm91bmRhcnkgc2VsZWN0aW9uIG9mIHRleHR1YWwKKyAgIGRpZmYgb3V0cHV0IGhhcyBmaW5pc2hlZCwgYW5kIHRoZSAiaW5kZW50IGhldXJpc3RpY3MiIGhhcyBub3cKKyAgIGJlY29tZSB0aGUgZGVmYXVsdC4KKworICogR2l0IGNhbiBub3cgYmUgYnVpbHQgd2l0aCBQQ1JFIHYyIGluc3RlYWQgb2YgdjEgb2YgdGhlIFBDUkUKKyAgIGxpYnJhcnkuIFJlcGxhY2UgVVNFX0xJQlBDUkU9WWVzUGxlYXNlIHdpdGggVVNFX0xJQlBDUkUyPVllc1BsZWFzZQorICAgaW4gZXhpc3RpbmcgYnVpbGQgc2NyaXB0cyB0byBidWlsZCBhZ2FpbnN0IHRoZSBuZXcgdmVyc2lvbi4gIEFzIHRoZQorICAgdXBzdHJlYW0gUENSRSBtYWludGFpbmVyIGhhcyBhYmFuZG9uZWQgdjEgbWFpbnRlbmFuY2UgZm9yIGFsbCBidXQKKyAgIHRoZSBtb3N0IGNyaXRpY2FsIGJ1ZyBmaXhlcywgdXNlIG9mIHYyIGlzIHJlY29tbWVuZGVkLgorCisKK1VwZGF0ZXMgc2luY2UgdjIuMTMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIFRoZSBjb2xvcnMgaW4gd2hpY2ggImdpdCBzdGF0dXMgLS1zaG9ydCAtLWJyYW5jaCIgc2hvd2VkIHRoZSBuYW1lcworICAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBpdHMgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBhcmUgbm93CisgICBjb25maWd1cmFibGUuCisKKyAqICJnaXQgY2xvbmUiIGxlYXJuZWQgdGhlICItLW5vLXRhZ3MiIG9wdGlvbiBub3QgdG8gZmV0Y2ggYWxsIHRhZ3MKKyAgIGluaXRpYWxseSwgYW5kIGFsc28gc2V0IHVwIHRoZSB0YWdvcHQgbm90IHRvIGZvbGxvdyBhbnkgdGFncyBpbgorICAgc3Vic2VxdWVudCBmZXRjaGVzLgorCisgKiAiZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIiBsZWFybmVkIHRvIHVzZSB6aXA2NCBleHRlbnNpb24gd2hlbgorICAgbmVjZXNzYXJ5IHRvIGdvIGJleW9uZCB0aGUgNEdCIGxpbWl0LgorCisgKiAiZ2l0IHJlc2V0IiBsZWFybmVkICItLXJlY3Vyc2Utc3VibW9kdWxlcyIgb3B0aW9uLgorCisgKiAiZ2l0IGRpZmYgLS1zdWJtb2R1bGU9ZGlmZiIgbm93IHJlY3Vyc2VzIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMuCisKKyAqICJnaXQgcmVwYWNrIiBsZWFybmVkIHRvIGFjY2VwdCB0aGUgLS10aHJlYWRzPTxuPiBvcHRpb24gYW5kIHBhc3MgaXQKKyAgIHRvIHBhY2stb2JqZWN0cy4KKworICogImdpdCBzZW5kLWVtYWlsIiBsZWFybmVkIHRvIHJ1biBzZW5kZW1haWwtdmFsaWRhdGUgaG9vayB0byBpbnNwZWN0CisgICBhbmQgcmVqZWN0IGEgbWVzc2FnZSBiZWZvcmUgc2VuZGluZyBpdCBvdXQuCisKKyAqIFRoZXJlIGlzIG5vIGdvb2QgcmVhc29uIHdoeSAiZ2l0IGZldGNoICR0aGVyZSAkc2hhMSIgc2hvdWxkIGZhaWwKKyAgIHdoZW4gdGhlICRzaGExIG5hbWVzIGFuIG9iamVjdCBhdCB0aGUgdGlwIG9mIGFuIGFkdmVydGlzZWQgcmVmLAorICAgZXZlbiB3aGVuIHRoZSBvdGhlciBzaWRlIGhhc24ndCBlbmFibGVkIGFsbG93VGlwU0hBMUluV2FudC4KKworICogVGhlICJbaW5jbHVkZUlmICJnaXRkaXI6JGRpciJdIHBhdGg9Li4uIiBtZWNoYW5pc20gaW50cm9kdWNlZCBpbgorICAgMi4xMy4wIHdvdWxkIGNhbm9uaWNhbGl6ZSB0aGUgcGF0aCBvZiB0aGUgZ2l0ZGlyIGJlaW5nIG1hdGNoZWQsCisgICBhbmQgZGlkIG5vdCBtYXRjaCBlLmcuICJnaXRkaXI6fi93b3JrLyoiIGFnYWluc3QgYSByZXBvIGluCisgICAifi93b3JrL21haW4iIGlmICJ+L3dvcmsiIHdhcyBhIHN5bWxpbmsgdG8gIi9tbnQvc3RvcmFnZS93b3JrIi4KKyAgIE5vdyB3ZSBtYXRjaCBib3RoIHRoZSByZXNvbHZlZCBjYW5vbmljYWwgcGF0aCBhbmQgd2hhdCAicHdkIiB3b3VsZAorICAgc2hvdy4gVGhlIGluY2x1ZGUgd2lsbCBoYXBwZW4gaWYgZWl0aGVyIG9uZSBtYXRjaGVzLgorCisgKiBUaGUgImluZGVudCIgaGV1cmlzdGljcyBpcyBub3cgdGhlIGRlZmF1bHQgaW4gImRpZmYiLiBUaGUKKyAgIGRpZmYuaW5kZW50SGV1cmlzdGljIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHNldCB0byAiZmFsc2UiCisgICBmb3IgdGhvc2Ugd2hvIGRvIG5vdCB3YW50IGl0LgorCisgKiBNYW55IGNvbW1hbmRzIGxlYXJuZWQgdG8gcGF5IGF0dGVudGlvbiB0byBzdWJtb2R1bGUucmVjdXJzZQorICAgY29uZmlndXJhdGlvbi4KKworICogVGhlIGNvbnZlbnRpb24gZm9yIGEgY29tbWFuZCBsaW5lIGlzIHRvIGZvbGxvdyAiZ2l0IGNtZG5hbWUKKyAgIC0tb3B0aW9ucyIgd2l0aCByZXZpc2lvbnMgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgIi0tIgorICAgZGlzYW1iaWd1YXRvciBhbmQgdGhlbiBmaW5hbGx5IHBhdGhzcGVjcy4gIFdoZW4gIi0tIiBpcyBub3QgdGhlcmUsCisgICB3ZSBtYWtlIHN1cmUgZWFybHkgb25lcyBhcmUgYWxsIGludGVycHJldGFibGUgYXMgcmV2cyAoYW5kIGRvIG5vdAorICAgbG9vayBsaWtlIHBhdGhzKSBhbmQgbGF0ZXIgb25lcyBhcmUgdGhlIG90aGVyIHdheSBhcm91bmQuICBBCisgICBwYXRoc3BlYyB3aXRoICJtYWdpYyIgKGUuZy4gIjovcC9hL3QvaCIgdGhhdCBtYXRjaGVzIHAvYS90L2ggZnJvbQorICAgdGhlIHRvcC1sZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLCBubyBtYXR0ZXIgd2hhdCBzdWJkaXJlY3RvcnkgeW91CisgICBhcmUgd29ya2luZyBmcm9tKSBhcmUgY29uc2VydmF0aXZlbHkganVkZ2VkIGFzICJub3QgYSBwYXRoIiwgd2hpY2gKKyAgIHJlcXVpcmVkIGRpc2FtYmlndWF0aW9uIG1vcmUgb2Z0ZW4uICBUaGUgY29tbWFuZCBsaW5lIHBhcnNlcgorICAgbGVhcm5lZCB0byBzYXkgIml0J3MgYSBwYXRoc3BlYyIgYSBiaXQgbW9yZSBvZnRlbiB3aGVuIHRoZSBzeW50YXgKKyAgIGxvb2tzIGxpa2Ugc28uCisKKyAqIFVwZGF0ZSAicGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbiIgc3VwcG9ydCB0byBlbmFibGUgSklUCisgICBhbmQgYWxzbyBhbGxvdyBsaW5raW5nIHdpdGggdGhlIG5ld2VyIFBDUkUgdjIgbGlicmFyeS4KKworICogImZpbHRlci1icmFuY2giIGxlYXJuZWQgYSBwc2V1ZG8gZmlsdGVyICItLXNldHVwIiB0aGF0IGNhbiBiZSB1c2VkCisgICB0byBkZWZpbmUgY29tbW9uIGZ1bmN0aW9ucy92YXJpYWJsZXMgdGhhdCBjYW4gYmUgdXNlZCBieSBvdGhlcgorICAgZmlsdGVycy4KKworICogVXNpbmcgImdpdCBhZGQgZC9pL3IiIHdoZW4gZC9pL3IgaXMgdGhlIHRvcCBvZiB0aGUgd29ya2luZyB0cmVlIG9mCisgICBhIHNlcGFyYXRlIHJlcG9zaXRvcnkgd291bGQgY3JlYXRlIGEgZ2l0bGluayBpbiB0aGUgaW5kZXgsIHdoaWNoCisgICB3b3VsZCBhcHBlYXIgYXMgYSBub3QtcXVpdGUtaW5pdGlhbGl6ZWQgc3VibW9kdWxlIHRvIG90aGVycy4gIFdlCisgICBsZWFybmVkIHRvIGdpdmUgd2FybmluZ3Mgd2hlbiB0aGlzIGhhcHBlbnMuCisKKyAqICJnaXQgc3RhdHVzIiBsZWFybmVkIHRvIG9wdGlvbmFsbHkgZ2l2ZSBob3cgbWFueSBzdGFzaCBlbnRyaWVzIHRoZXJlCisgICBhcmUgaW4gaXRzIG91dHB1dC4KKworICogImdpdCBzdGF0dXMiIGhhcyBsb25nIHNob3duIGVzc2VudGlhbGx5IHRoZSBzYW1lIG1lc3NhZ2UgYXMgImdpdAorICAgY29tbWl0IjsgdGhlIG1lc3NhZ2UgaXQgZ2l2ZXMgd2hpbGUgcHJlcGFyaW5nIGZvciB0aGUgcm9vdCBjb21taXQsCisgICBpLmUuICJJbml0aWFsIGNvbW1pdCIsIHdhcyBoYXJkIHRvIHVuZGVyc3RhbmQgZm9yIHNvbWUgbmV3IHVzZXJzLgorICAgTm93IGl0IHNheXMgIk5vIGNvbW1pdHMgeWV0IiB0byBzdHJlc3MgbW9yZSBvbiB0aGUgY3VycmVudCBzdGF0dXMKKyAgIChyYXRoZXIgdGhhbiB0aGUgY29tbWl0IHRoZSB1c2VyIGlzIHByZXBhcmluZyBmb3IsIHdoaWNoIGlzIG1vcmUgaW4KKyAgIGxpbmUgd2l0aCB0aGUgZm9jdXMgb2YgImdpdCBjb21taXQiKS4KKworICogImdpdCBzZW5kLWVtYWlsIiBub3cgaGFzIC0tYmF0Y2gtc2l6ZSBhbmQgLS1yZWxvZ2luLWRlbGF5IG9wdGlvbnMKKyAgICB3aGljaCBjYW4gYmUgdXNlZCB0byBvdmVyY29tZSBsaW1pdGF0aW9ucyBvbiBTTVRQIHNlcnZlcnMgdGhhdAorICAgIHJlc3RyaWN0IG9uIGhvdyBtYW55IG9mIGUtbWFpbHMgY2FuIGJlIHNlbnQgaW4gYSBzaW5nbGUgc2Vzc2lvbi4KKworICogQW4gb2xkIG1lc3NhZ2Ugc2hvd24gaW4gdGhlIGNvbW1pdCBsb2cgdGVtcGxhdGUgd2FzIHJlbW92ZWQsIGFzIGl0CisgICBoYXMgb3V0bGl2ZWQgaXRzIHVzZWZ1bG5lc3MuCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyIgbGVhcm5zIHRvIHJlYmFzZSB0aGUKKyAgIGJyYW5jaCBpbiB0aGUgc3VibW9kdWxlcyB0byBhbiB1cGRhdGVkIGJhc2UuCisKKyAqICJnaXQgbG9nIiBsZWFybmVkIC1QIGFzIGEgc3lub255bSBmb3IgLS1wZXJsLXJlZ2V4cCwgImdpdCBncmVwIgorICAgYWxyZWFkeSBoYWQgc3VjaCBhIHN5bm9ueW0uCisKKyAqICJnaXQgbG9nIiBkaWRuJ3QgdW5kZXJzdGFuZCAtLXJlZ2V4cC1pZ25vcmUtY2FzZSB3aGVuIGNvbWJpbmVkIHdpdGgKKyAgIC0tcGVybC1yZWdleHAuIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIFRoZSBkZWZhdWx0IHBhY2tlZC1naXQgbGltaXQgdmFsdWUgaGFzIGJlZW4gcmFpc2VkIG9uIGxhcmdlcgorICAgcGxhdGZvcm1zIHRvIHNhdmUgImdpdCBmZXRjaCIgZnJvbSBhIChyZWNvdmVyYWJsZSkgZmFpbHVyZSB3aGlsZQorICAgImdjIiBpcyBydW5uaW5nIGluIHBhcmFsbGVsLgorCisgKiBDb2RlIHRvIHVwZGF0ZSB0aGUgY2FjaGUtdHJlZSBoYXMgYmVlbiB0aWdodGVuZWQgc28gdGhhdCB3ZSB3b24ndAorICAgYWNjaWRlbnRhbGx5IHdyaXRlIG91dCBhbnkgMHs0MH0gZW50cnkgaW4gdGhlIHRyZWUgb2JqZWN0LgorCisgKiBBdHRlbXB0IHRvIGFsbG93IHVzIG5vdGljZSAiZmlzaHkiIHNpdHVhdGlvbiB3aGVyZSB3ZSBmYWlsIHRvCisgICByZW1vdmUgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgdXNlZCBkdXJpbmcgdGhlIHRlc3QuCisKKyAqIFRyYXZpcyBDSSBnYWluZWQgYSB0YXNrIHRvIGZvcm1hdCB0aGUgZG9jdW1lbnRhdGlvbiB3aXRoIGJvdGgKKyAgIEFzY2lpRG9jIGFuZCBBc2NpaURvY3Rvci4KKworICogU29tZSBwbGF0Zm9ybXMgaGF2ZSB1bG9uZyB0aGF0IGlzIHNtYWxsZXIgdGhhbiB0aW1lX3QsIGFuZCBvdXIKKyAgIGhpc3RvcmljYWwgdXNlIG9mIHVsb25nIGZvciB0aW1lc3RhbXAgd291bGQgbWVhbiB0aGV5IGNhbm5vdAorICAgcmVwcmVzZW50IHNvbWUgdGltZXN0YW1wIHRoYXQgdGhlIHBsYXRmb3JtIGFsbG93cy4gIEludmVudCBhCisgICBzZXBhcmF0ZSBhbmQgZGVkaWNhdGVkIHRpbWVzdGFtcF90IChzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaAorICAgdGltZXN0YW1wcyBhbmQgYSB2YW5pbGxhIHVsb25ncywgd2hpY2ggYWxvbmcgaXMgYWxyZWFkeSBhIGdvb2QKKyAgIG1vdmUpLCBhbmQgdGhlbiBkZWNsYXJlIHVpbnRtYXhfdCBpcyB0aGUgdHlwZSB0byBiZSB1c2VkIGFzIHRoZQorICAgdGltZXN0YW1wX3QuCisKKyAqIFdlIGNhbiB0cmlnZ2VyIFdpbmRvd3MgYXV0by1idWlsZCB0ZXN0ZXIgKGNyZWRpdHM6IERzY2hvICYKKyAgIE1pY3Jvc29mdCkgZnJvbSBvdXIgZXhpc3RpbmcgVHJhdmlzIENJIHRlc3RlciBub3cuCisKKyAqIENvbnZlcnNpb24gZnJvbSB1Y2hhclsyMF0gdG8gc3RydWN0IG9iamVjdF9pZCBjb250aW51ZXMuCisKKyAqIFNpbXBsaWZ5IHBhcnNlX3BhdGhzcGVjKCkgY29kZXBhdGggYW5kIHN0b3AgaXQgZnJvbSBsb29raW5nIGF0IHRoZQorICAgZGVmYXVsdCBpbi1jb3JlIGluZGV4LgorCisgKiBBZGQgcGVyZi10ZXN0IGZvciB3aWxkbWF0Y2guCisKKyAqIENvZGUgZnJvbSAiY29udmVyc2lvbiB1c2luZyBleHRlcm5hbCBwcm9jZXNzIiBjb2RlcGF0aCBoYXMgYmVlbgorICAgZXh0cmFjdGVkIHRvIGEgc2VwYXJhdGUgc3ViLXByb2Nlc3MuW2NoXSBtb2R1bGUuCisKKyAqIFdoZW4gImdpdCBjaGVja291dCIsICJnaXQgbWVyZ2UiLCBldGMuIG1hbmlwdWxhdGVzIHRoZSBpbi1jb3JlCisgICBpbmRleCwgdmFyaW91cyBwaWVjZXMgb2YgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGV4dGVuc2lvbnMgYXJlCisgICBkaXNjYXJkZWQgZnJvbSB0aGUgb3JpZ2luYWwgc3RhdGUsIGFzIGl0IGlzIHVzdWFsbHkgbm90IHRoZSBjYXNlCisgICB0aGF0IHRoZXkgYXJlIGtlcHQgdXAtdG8tZGF0ZSBhbmQgaW4tc3luYyB3aXRoIHRoZSBvcGVyYXRpb24gb24gdGhlCisgICBtYWluIGluZGV4LiAgVGhlIHVudHJhY2tlZCBjYWNoZSBleHRlbnNpb24gaXMgY29waWVkIGFjcm9zcyB0aGVzZQorICAgb3BlcmF0aW9ucyBub3csIHdoaWNoIHdvdWxkIHNwZWVkIHVwICJnaXQgc3RhdHVzIiAoYXMgbG9uZyBhcyB0aGUKKyAgIGNhY2hlIGlzIHByb3Blcmx5IGludmFsaWRhdGVkKS4KKworICogVGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uIG9mICJnaXQgZ3JlcCIgaGFzIHNlZW4gc29tZSBjbGVhbi11cC4KKworICogVXBkYXRlIHRoZSBDIHN0eWxlIHJlY29tbWVuZGF0aW9uIGZvciBub3RlcyBmb3IgdHJhbnNsYXRvcnMsIGFzCisgICByZWNlbnQgdmVyc2lvbnMgb2YgZ2V0dGV4dCB0b29scyBjYW4gd29yayB3aXRoIG91ciBzdHlsZSBvZgorICAgbXVsdGktbGluZSBjb21tZW50cy4KKworICogVGhlIGltcGxlbWVudGF0aW9uIG9mICJyZWYiIEFQSSBhcm91bmQgdGhlICJwYWNrZWQgcmVmcyIgaGF2ZSBiZWVuCisgICBjbGVhbmVkIHVwLCBpbiBwcmVwYXJhdGlvbiBmb3IgZnVydGhlciBjaGFuZ2VzLgorCisgKiBUaGUgaW50ZXJuYWwgbG9naWMgdXNlZCBpbiAiZ2l0IGJsYW1lIiBoYXMgYmVlbiBsaWJpZmllZCB0byBtYWtlIGl0CisgICBlYXNpZXIgdG8gdXNlIGJ5IGNnaXQuCisKKyAqIE91ciBjb2RlIG9mdGVuIG9wZW5zIGEgcGF0aCB0byBhbiBvcHRpb25hbCBmaWxlLCB0byB3b3JrIG9uIGl0cworICAgY29udGVudHMgd2hlbiB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IG9wZW4gaXQuICBXZSBjYW4gaWdub3JlIGEgZmFpbHVyZQorICAgdG8gb3BlbiBpZiBzdWNoIGFuIG9wdGlvbmFsIGZpbGUgZG9lcyBub3QgZXhpc3QsIGJ1dCB3ZSBkbyB3YW50IHRvCisgICByZXBvcnQgYSBmYWlsdXJlIGluIG9wZW5pbmcgZm9yIG90aGVyIHJlYXNvbnMgKGUuZy4gd2UgZ290IGFuIEkvTworICAgZXJyb3IsIG9yIHRoZSBmaWxlIGlzIHRoZXJlLCBidXQgd2UgbGFjayB0aGUgcGVybWlzc2lvbiB0byBvcGVuKS4KKworICAgVGhlIGV4YWN0IGVycm9ycyB3ZSBuZWVkIHRvIGlnbm9yZSBhcmUgRU5PRU5UIChvYnZpb3VzbHkpIGFuZAorICAgRU5PVERJUiAobGVzcyBvYnZpb3VzKS4gIEluc3RlYWQgb2YgcmVwZWF0aW5nIGNvbXBhcmlzb24gb2YgZXJybm8KKyAgIHdpdGggdGhlc2UgdHdvIGNvbnN0YW50cywgaW50cm9kdWNlIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGRvIHNvLgorCisgKiBXZSBvZnRlbiB0cnkgdG8gb3BlbiBhIGZpbGUgZm9yIHJlYWRpbmcgd2hvc2UgZXhpc3RlbmNlIGlzCisgICBvcHRpb25hbCwgYW5kIHNpbGVudGx5IGlnbm9yZSBlcnJvcnMgZnJvbSBvcGVuL2ZvcGVuOyByZXBvcnQgc3VjaAorICAgZXJyb3JzIGlmIHRoZXkgYXJlIG5vdCBkdWUgdG8gbWlzc2luZyBmaWxlcy4KKworICogV2hlbiBhbiBleGlzdGluZyByZXBvc2l0b3J5IGlzIHVzZWQgZm9yIHQvcGVyZiB0ZXN0aW5nLCB3ZSBmaXJzdAorICAgY3JlYXRlIGJpdC1mb3ItYml0IGNvcHkgb2YgaXQsIHdoaWNoIG1heSBncmFiIGEgdHJhbnNpZW50IHN0YXRlIG9mCisgICB0aGUgcmVwb3NpdG9yeSBhbmQgZnJlZXplIGl0IGludG8gdGhlIHJlcG9zaXRvcnkgdXNlZCBmb3IgdGVzdGluZywKKyAgIHdoaWNoIHRoZW4gbWF5IGNhdXNlIEdpdCBvcGVyYXRpb25zIHRvIGZhaWwuICBTaW5nbGUgb3V0ICJ0aGUgaW5kZXgKKyAgIGJlaW5nIGxvY2tlZCIgY2FzZSBhbmQgZm9yY2libHkgZHJvcCB0aGUgbG9jayBmcm9tIHRoZSBjb3B5LgorCisgKiBUaHJlZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgaGVscGVyIGZ1bmN0aW9uIGhhdmUgYmVlbiBjb25zb2xpZGF0ZWQKKyAgIHRvIG9uZS4KKworICogImZhc3QtaW1wb3J0IiB1c2VzIGEgZGVmYXVsdCBwYWNrIGNoYWluIGRlcHRoIHRoYXQgaXMgY29uc2lzdGVudAorICAgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLgorCisgKiBBIG5ldyB0ZXN0IHRvIHNob3cgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHBhdHRlcm4gW15hLXpdCisgICAod2hpY2ggbWF0Y2hlcyAnLycpIGFuZCBhIHNsYXNoIGluIGEgcGF0aCBoYXMgYmVlbiBhZGRlZC4gIFRoZQorICAgcGF0dGVybiBzaG91bGQgbm90IG1hdGNoIHRoZSBzbGFzaCB3aXRoICJwYXRobWF0Y2giLCBidXQgc2hvdWxkCisgICB3aXRoICJ3aWxkbWF0Y2giLgorCisgKiBUaGUgJ2RpZmYtaGlnaGxpZ2h0JyBwcm9ncmFtIChpbiBjb250cmliLykgaGFzIGJlZW4gcmVzdHJ1Y3R1cmVkCisgICBmb3IgZWFzaWVyIHJldXNlIGJ5IGFuIGV4dGVybmFsIHByb2plY3QgJ2RpZmYtc28tZmFuY3knLgorCisgKiBBIGNvbW1vbiBwYXR0ZXJuIHRvIGZyZWUgYSBwaWVjZSBvZiBtZW1vcnkgYW5kIGFzc2lnbiBOVUxMIHRvIHRoZQorICAgcG9pbnRlciB0aGF0IHVzZWQgdG8gcG9pbnQgYXQgaXQgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIG5ldworICAgRlJFRV9BTkRfTlVMTCgpIG1hY3JvLgorCisgKiBUcmFkaXRpb25hbGx5LCB0aGUgZGVmYXVsdCBkaWUoKSByb3V0aW5lIGhhZCBhIGNvZGUgdG8gcHJldmVudCBpdAorICAgZnJvbSBnZXR0aW5nIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgd2hpY2ggaW50ZXJhY3RlZCBiYWRseSB3aGVuIGEKKyAgIHRocmVhZGVkIHByb2dyYW0gdXNlZCBpdCAob25lIGRvd25zaWRlIGlzIHRoYXQgdGhlIHJlYWwgZXJyb3IgbWF5CisgICBiZSBoaWRkZW4gYW5kIGluc3RlYWQgdGhlIG9ubHkgZXJyb3IgbWVzc2FnZSBnaXZlbiB0byB0aGUgdXNlciBtYXkKKyAgIGVuZCB1cCBiZWluZyAiZGllIHJlY3Vyc2lvbiBkZXRlY3RlZCIsIHdoaWNoIGlzIG5vdCB2ZXJ5IHVzZWZ1bCkuCisKKyAqIEludHJvZHVjZSBhICJyZXBvc2l0b3J5IiBvYmplY3QgdG8gZXZlbnR1YWxseSBtYWtlIGl0IGVhc2llciB0bworICAgd29yayBpbiBtdWx0aXBsZSByZXBvc2l0b3JpZXMgKHRoZSBwcmltYXJ5IGZvY3VzIGlzIHRvIHdvcmsgd2l0aAorICAgdGhlIHN1cGVycHJvamVjdCBhbmQgaXRzIHN1Ym1vZHVsZXMpIGluIGEgc2luZ2xlIHByb2Nlc3MuCisKKyAqIE9wdGltaXplICJ3aGF0IGFyZSB0aGUgb2JqZWN0IG5hbWVzIGFscmVhZHkgdGFrZW4gaW4gYW4gYWx0ZXJuYXRlCisgICBvYmplY3QgZGF0YWJhc2U/IiBxdWVyeSB0aGF0IGlzIHVzZWQgdG8gZGVyaXZlIHRoZSBsZW5ndGggb2YgcHJlZml4CisgICBhbiBvYmplY3QgbmFtZSBpcyB1bmlxdWVseSBhYmJyZXZpYXRlZCB0by4KKworICogVGhlIGhhc2htYXAgQVBJIGhhcyBiZWVuIHVwZGF0ZWQgc28gdGhhdCBkYXRhIHRvIGN1c3RvbWl6ZSB0aGUKKyAgIGJlaGF2aW91ciBvZiB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGF0IHRoZSB0aW1lIGEKKyAgIGhhc2htYXAgaXMgaW5pdGlhbGl6ZWQuCisKKyAqIFRoZSAiY29sbGlzaW9uIGRldGVjdGluZyIgU0hBLTEgaW1wbGVtZW50YXRpb24gc2hpcHBlZCB3aXRoIDIuMTMgaXMKKyAgIG5vdyBpbnRlZ3JhdGVkIGludG8gZ2l0LmdpdCBhcyBhIHN1Ym1vZHVsZSAodGhlIGZpcnN0IHN1Ym1vZHVsZSB0bworICAgc2hpcCB3aXRoIGdpdC5naXQpLiBDbG9uZSBnaXQuZ2l0IHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgdG8gZ2V0CisgICBpdC4gRm9yIG5vdyBhIG5vbi1zdWJtb2R1bGUgY29weSBvZiB0aGUgc2FtZSBjb2RlIGlzIGFsc28gc2hpcHBlZAorICAgYXMgcGFydCBvZiB0aGUgdHJlZS4KKworICogQSByZWNlbnQgdXBkYXRlIG1hZGUgaXQgZWFzaWVyIHRvIHVzZSAiLWZzYW5pdGl6ZT0iIG9wdGlvbiB3aGlsZQorICAgY29tcGlsaW5nIGJ1dCBzdXBwb3J0ZWQgb25seSBvbmUgc2FuaXRpemUgb3B0aW9uLiAgQWxsb3cgbW9yZSB0aGFuCisgICBvbmUgdG8gYmUgY29tYmluZWQsIGpvaW5lZCB3aXRoIGEgY29tbWEsIGxpa2UgIm1ha2UgU0FOSVRJWkU9Zm9vLGJhciIuCisKKyAqIFVzZSAicDQgLUciIHRvIG1ha2UgInA0IGNoYW5nZXMiIG91dHB1dCBtb3JlIFB5dGhvbi1mcmllbmRseQorICAgdG8gcGFyc2UuCisKKyAqIFdlIHN0YXJ0ZWQgdXNpbmcgIiUiIFBSSXRpbWUsIGltaXRhdGluZyAiJSIgUFJJdU1BWCBhbmQgZnJpZW5kcywgYXMKKyAgIGEgd2F5IHRvIGZvcm1hdCB0aGUgaW50ZXJuYWwgdGltZXN0YW1wIHZhbHVlLCBidXQgdGhpcyBkb2VzIG5vdAorICAgcGxheSB3ZWxsIHdpdGggZ2V0dGV4dCgxKSBpMThuIGZyYW1ld29yaywgYW5kIGNhdXNlcyAibWFrZSBwb3QiCisgICB0aGF0IGlzIHJ1biBieSB0aGUgbDEwbiBjb29yZGluYXRvciB0byBjcmVhdGUgYSBicm9rZW4gcG8vZ2l0LnBvdAorICAgZmlsZS4gIFRoaXMgaXMgYSBwb3NzaWJsZSB3b3JrYXJvdW5kIGZvciB0aGF0IHByb2JsZW0uCisKKyAqIEl0IHR1cm5zIG91dCB0aGF0IEN5Z3dpbiBhbHNvIG5lZWRzIHRoZSBmb3BlbigpIHdyYXBwZXIgdGhhdAorICAgcmV0dXJucyBmYWlsdXJlIHdoZW4gYSBkaXJlY3RvcnkgaXMgb3BlbmVkIGZvciByZWFkaW5nLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi4xMworLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2Mi4xMyBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgdGhlIG1haW50ZW5hbmNlIHJlbGVhc2VzJworbm90ZXMgZm9yIGRldGFpbHMpLgorCisgKiAiZ2l0IGdjIiBkaWQgbm90IGludGVyYWN0IHdlbGwgd2l0aCAiZ2l0IHdvcmt0cmVlIi1tYW5hZ2VkCisgICBwZXItd29ya3RyZWUgcmVmcy4KKworICogImdpdCBjaGVycnktcGljayIgYW5kIG90aGVyIHVzZXMgb2YgdGhlIHNlcXVlbmNlciBtYWNoaW5lcnkKKyAgIG1pc2hhbmRsZWQgYSB0cmFpbGVyIGJsb2NrIHdob3NlIGxhc3QgbGluZSBpcyBhbiBpbmNvbXBsZXRlIGxpbmUuCisgICBUaGlzIGhhcyBiZWVuIGZpeGVkIHNvIHRoYXQgYW4gYWRkaXRpb25hbCBzaWduLW9mZiBldGMuIGFyZSBhZGRlZAorICAgYWZ0ZXIgY29tcGxldGluZyB0aGUgZXhpc3RpbmcgaW5jb21wbGV0ZSBsaW5lLgorCisgKiBUaGUgY29kZXBhdGggaW4gImdpdCBhbSIgdGhhdCBpcyB1c2VkIHdoZW4gcnVubmluZyAiZ2l0IHJlYmFzZSIKKyAgIGxlYWtlZCBtZW1vcnkgaGVsZCBmb3IgdGhlIGxvZyBtZXNzYWdlIG9mIHRoZSBjb21taXRzIGJlaW5nIHJlYmFzZWQuCisKKyAqICJnaXQgY2xvbmUgLS1jb25maWcgdmFyPXZhbCIgaXMgYSB3YXkgdG8gcG9wdWxhdGUgdGhlCisgICBwZXItcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGZpbGUgb2YgdGhlIG5ldyByZXBvc2l0b3J5LCBidXQgaXQgZGlkCisgICBub3Qgd29yayB3ZWxsIHdoZW4gdmFsIGlzIGFuIGVtcHR5IHN0cmluZy4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqIFNldHRpbmcgImxvZy5kZWNvcmF0ZT1mYWxzZSIgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBkaWQgbm90IHRha2UKKyAgIGVmZmVjdCBpbiB2Mi4xMywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBBIGZldyBjb2RlcGF0aHMgaW4gImNoZWNrb3V0IiBhbmQgImFtIiB3b3JraW5nIG9uIGFuIHVuYm9ybiBicmFuY2gKKyAgIHRyaWVkIHRvIGFjY2VzcyBhbiB1bmluaXRpYWxpemVkIHBpZWNlIG9mIG1lbW9yeS4KKworICogVGhlIFdlYiBpbnRlcmZhY2UgdG8gZ21hbmUgbmV3cyBhcmNoaXZlIGlzIGxvbmcgZ29uZSwgZXZlbiB0aG91Z2gKKyAgIHRoZSBhcnRpY2xlcyBhcmUgc3RpbGwgYWNjZXNzaWJsZSB2aWEgTlRUUC4gIFJlcGxhY2UgdGhlIGxpbmtzIHdpdGgKKyAgIG9uZXMgdG8gcHVibGljLWluYm94Lm9yZy4gIEJlY2F1c2UgdGhlaXIgbWVzc2FnZSBpZGVudGlmaWNhdGlvbiBpcworICAgYmFzZWQgb24gdGhlIGFjdHVhbCBtZXNzYWdlLWlkLCBpdCBpcyBsaWtlbHkgdGhhdCBpdCB3aWxsIGJlIGVhc2llcgorICAgdG8gbWlncmF0ZSBhd2F5IGZyb20gaXQgaWYvd2hlbiBuZWNlc3NhcnkuCisKKyAqIFRoZSByZWNlaXZlLXBhY2sgcHJvZ3JhbSBub3cgbWFrZXMgc3VyZSB0aGF0IHRoZSBwdXNoIGNlcnRpZmljYXRlCisgICByZWNvcmRzIHRoZSBzYW1lIHNldCBvZiBwdXNoIG9wdGlvbnMgdXNlZCBmb3IgcHVzaGluZy4KKworICogVGVzdHMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gcGFzcyB1bmRlciBHRVRURVhUX1BPSVNPTiAoYSBtZWNoYW5pc20KKyAgIHRvIGVuc3VyZSB0aGF0IG91dHB1dCBzdHJpbmdzIHRoYXQgc2hvdWxkIG5vdCBiZSB0cmFuc2xhdGVkIGFyZQorICAgbm90IHRyYW5zbGF0ZWQgYnkgbWlzdGFrZSksIGFuZCBUcmF2aXNDSSBpcyB0b2xkIHRvIHJ1biB0aGVtLgorCisgKiAiZ2l0IGNoZWNrb3V0IC0tcmVjdXJzZS1zdWJtb2R1bGVzIiBkaWQgbm90IHF1aXRlIHdvcmsgd2l0aCBhCisgICBzdWJtb2R1bGUgdGhhdCBpdHNlbGYgaGFzIHN1Ym1vZHVsZXMuCisKKyAqICJwYWNrLW9iamVjdHMiIGNhbiBzdHJlYW0gYSBzbGljZSBvZiBhbiBleGlzdGluZyBwYWNrZmlsZSBvdXQgd2hlbgorICAgdGhlIHBhY2sgYml0bWFwIGNhbiB0ZWxsIHRoYXQgdGhlIHJlYWNoYWJsZSBvYmplY3RzIGFyZSBhbGwgbmVlZGVkCisgICBpbiB0aGUgb3V0cHV0LCB3aXRob3V0IGluc3BlY3RpbmcgaW5kaXZpZHVhbCBvYmplY3RzLiAgVGhpcworICAgc3RyYXRlZ3kgaG93ZXZlciB3b3VsZCBub3Qgd29yayB3ZWxsIHdoZW4gIi0tbG9jYWwiIGFuZCBvdGhlcgorICAgb3B0aW9ucyBhcmUgaW4gdXNlLCBhbmQgbmVlZCB0byBiZSBkaXNhYmxlZC4KKworICogRml4IG1lbW9yeSBsZWFrcyBwb2ludGVkIG91dCBieSBDb3Zlcml0eSAoYW5kIHBlb3BsZSkuCisKKyAqICJnaXQgcmVhZC10cmVlIC1tIiAobm8gdHJlZS1pc2gpIGdhdmUgYSBub25zZW5zZSBzdWdnZXN0aW9uICJ1c2UKKyAgIC0tZW1wdHkgaWYgeW91IHdhbnQgdG8gY2xlYXIgdGhlIGluZGV4Ii4gIFdpdGggIi1tIiwgc3VjaCBhIHJlcXVlc3QKKyAgIHdpbGwgc3RpbGwgZmFpbCBhbnl3YXksIGFzIHlvdSdkIG5lZWQgdG8gbmFtZSBhdCBsZWFzdCBvbmUgdHJlZS1pc2gKKyAgIHRvIGJlIG1lcmdlZC4KKworICogTWFrZSBzdXJlIG91ciB0ZXN0cyB3b3VsZCBwYXNzIHdoZW4gdGhlIHNvdXJjZXMgYXJlIGNoZWNrZWQgb3V0CisgICB3aXRoICJwbGF0Zm9ybSBuYXRpdmUiIGxpbmUgZW5kaW5nIGNvbnZlbnRpb24gYnkgZGVmYXVsdCBvbgorICAgV2luZG93cy4gIFNvbWUgInRleHQiIGZpbGVzIG91dCB0ZXN0cyB1c2UgYW5kIHRoZSB0ZXN0IHNjcmlwdHMKKyAgIHRoZW1zZWx2ZXMgdGhhdCBhcmUgbWVhbnQgdG8gYmUgcnVuIHdpdGggL2Jpbi9zaCwgb3VnaHQgdG8gYmUKKyAgIGNoZWNrZWQgb3V0IHdpdGggZW9sPUxGIGV2ZW4gb24gV2luZG93cy4KKworICogSW50cm9kdWNlIHRoZSBCVUcoKSBtYWNybyB0byBpbXByb3ZlIGRpZSgiQlVHOiAuLi4iKS4KKworICogQ2xhcmlmeSBkb2N1bWVudGF0aW9uIGZvciBpbmNsdWRlLnBhdGggYW5kIGluY2x1ZGVJZi48Y29uZGl0aW9uPi5wYXRoCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKworICogR2l0IHNvbWV0aW1lcyBnaXZlcyBhbiBhZHZpY2UgaW4gYSByaGV0b3JpY2FsIHF1ZXN0aW9uIHRoYXQgZG9lcworICAgbm90IHJlcXVpcmUgYW4gYW5zd2VyLCB3aGljaCBjYW4gY29uZnVzZSBuZXcgdXNlcnMgYW5kIG5vbiBuYXRpdmUKKyAgIHNwZWFrZXJzLiAgQXR0ZW1wdCB0byByZXBocmFzZSB0aGVtLgorCisgKiBBIGZldyBodHRwOi8vIGxpbmtzIHRoYXQgYXJlIHJlZGlyZWN0ZWQgdG8gaHR0cHM6Ly8gaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGhhdmUgYmVlbiB1cGRhdGVkIHRvIGh0dHBzOi8vIGxpbmtzLgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0uLi4iIHdpdGggJShIRUFEKSBpbiB0aGUgZm9ybWF0IHVzZWQgdG8KKyAgIHJlc29sdmUgdGhlIEhFQUQgc3ltcmVmIGFzIG1hbnkgdGltZXMgYXMgaXQgaGFkIHByb2Nlc3NlZCByZWZzLAorICAgd2hpY2ggd2FzIHdhc3RlZnVsLCBhbmQgImdpdCBicmFuY2giIHNoYXJlZCB0aGUgc2FtZSBwcm9ibGVtLgorCisgKiBSZWdyZXNzaW9uIGZpeCB0byB0b3BpYyByZWNlbnRseSBtZXJnZWQgdG8gJ21hc3RlcicuCisKKyAqIFRoZSBzaGVsbCBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pIGxlYXJuZWQgImdpdCBzdGFzaCIgaGFzCisgICBhIG5ldyAicHVzaCIgc3ViY29tbWFuZC4KKworICogImdpdCBpbnRlcnByZXQtdHJhaWxlcnMiLCB3aGVuIHVzZWQgYXMgR0lUX0VESVRPUiBmb3IgImdpdCBjb21taXQKKyAgIC12IiwgbG9va2VkIGZvciBhbmQgYXBwZW5kZWQgdG8gYSB0cmFpbGVyIGJsb2NrIGF0IHRoZSB2ZXJ5IGVuZCwKKyAgIGkuZS4gYXQgdGhlIGVuZCBvZiB0aGUgImRpZmYiIG91dHB1dC4gIFRoZSBjb21tYW5kIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgY3V0LW1hcmsgbGluZSAiY29tbWl0IC12IiBhZGRzIHRvCisgICB0aGUgYnVmZmVyLS0tdGhlIHJlYWwgdHJhaWxlciBibG9jayBzaG91bGQgYXBwZWFyIGp1c3QgYmVmb3JlIGl0LgorCisgKiBBIHRlc3QgYWxsb3dlZCBib3RoICJnaXQgcHVzaCIgYW5kICJnaXQgcmVjZWl2ZS1wYWNrIiBvbiB0aGUgb3RoZXIKKyAgIGVuZCB3cml0ZSB0aGVpciB0cmFjZXMgaW50byB0aGUgc2FtZSBmaWxlLiAgVGhpcyBpcyBPSyBvbiBwbGF0Zm9ybXMKKyAgIHRoYXQgYWxsb3dzIGF0b21pY2FsbHkgYXBwZW5kaW5nIHRvIGEgZmlsZSBvcGVuZWQgd2l0aCBPX0FQUEVORCwKKyAgIGJ1dCBvbiBvdGhlciBwbGF0Zm9ybXMgbGVkIHRvIGEgbWFuZ2xlZCBvdXRwdXQsIGNhdXNpbmcKKyAgIGludGVybWl0dGVudCB0ZXN0IGZhaWx1cmVzLiAgVGhpcyBoYXMgYmVlbiBmaXhlZCBieSBkaXNhYmxpbmcKKyAgIHRyYWNlcyBmcm9tICJyZWNlaXZlLXBhY2siIGluIHRoZSB0ZXN0LgorCisgKiBUYWcgb2JqZWN0cywgd2hpY2ggYXJlIG5vdCByZWFjaGFibGUgZnJvbSBhbnkgcmVmLCB0aGF0IHBvaW50IGF0CisgICBtaXNzaW5nIG9iamVjdHMgd2VyZSBtaXNoYW5kbGVkIGJ5ICJnaXQgZ2MiIGFuZCBmcmllbmRzICh0aGV5CisgICBzaG91bGQgc2lsZW50bHkgYmUgaWdub3JlZCBpbnN0ZWFkKQorCisgKiAiZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMiIHBlbmFsaXplZCBsaWdodC13ZWlnaHQgdGFncyBzbyBtdWNoIHRoYXQKKyAgIHRoZXkgd2VyZSBhbG1vc3QgbmV2ZXIgY29uc2lkZXJlZC4gIEluc3RlYWQsIGdpdmUgdGhlbSBhYm91dCB0aGUKKyAgIHNhbWUgY2hhbmNlIHRvIGJlIGNvbnNpZGVyZWQgYXMgYW4gYW5ub3RhdGVkIHRhZyB0aGF0IGlzIHRoZSBzYW1lCisgICBhZ2UgYXMgdGhlIHVuZGVybHlpbmcgY29tbWl0IHdvdWxkLgorCisgKiBUaGUgInJ1bi1jb21tYW5kIiBBUEkgaW1wbGVtZW50YXRpb24gaGFzIGJlZW4gbWFkZSBtb3JlIHJvYnVzdAorICAgYWdhaW5zdCBkZWFkLWxvY2tpbmcgaW4gYSB0aHJlYWRlZCBlbnZpcm9ubWVudC4KKworICogQSByZWNlbnQgdXBkYXRlIHRvIHQ1NTQ1LXB1c2gtb3B0aW9ucy5zaCBzdGFydGVkIHNraXBwaW5nIGFsbCB0aGUKKyAgIHRlc3RzIGluIHRoZSBzY3JpcHQgd2hlbiBhIHdlYiBzZXJ2ZXIgdGVzdGluZyBpcyBkaXNhYmxlZCBvcgorICAgdW5hdmFpbGFibGUsIG5vdCBqdXN0IHRoZSBvbmVzIHRoYXQgcmVxdWlyZSBhIHdlYiBzZXJ2ZXIuICBOb24gSFRUUAorICAgdGVzdHMgaGF2ZSBiZWVuIHNhbHZhZ2VkIHRvIGFsd2F5cyBydW4gaW4gdGhpcyBzY3JpcHQuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbm93IHVzZXMgTmV0OjpTTVRQOjpTU0wsIHdoaWNoIGlzIG9ic29sZXRlLCBvbmx5CisgICB3aGVuIG5lZWRlZC4gIFJlY2VudCB2ZXJzaW9ucyBvZiBOZXQ6OlNNVFAgY2FuIGRvIFRMUyBuYXRpdmVseS4KKworICogImZvb1xiYXJcYmF6IiBpbiAiZ2l0IGZldGNoIGZvb1xiYXJcYmF6IiwgZXZlbiB0aG91Z2ggdGhlcmUgaXMgbm8KKyAgIHNsYXNoZXMgaW4gaXQsIGNhbm5vdCBiZSBhIG5pY2tuYW1lIGZvciBhIHJlbW90ZSBvbiBXaW5kb3dzLCBhcworICAgdGhhdCBpcyBsaWtlbHkgdG8gYmUgYSBwYXRobmFtZSBvbiBhIGxvY2FsIGZpbGVzeXN0ZW0uCisKKyAqICJnaXQgY2xlYW4gLWQiIHVzZWQgdG8gY2xlYW4gZGlyZWN0b3JpZXMgdGhhdCBoYXMgaWdub3JlZCBmaWxlcywKKyAgIGV2ZW4gdGhvdWdoIHRoZSBjb21tYW5kIHNob3VsZCBub3QgbG9zZSBpZ25vcmVkIG9uZXMgd2l0aG91dCAiLXgiLgorICAgImdpdCBzdGF0dXMgLS1pZ25vcmVkIiAgZGlkIG5vdCBsaXN0IGlnbm9yZWQgYW5kIHVudHJhY2tlZCBmaWxlcworICAgd2l0aG91dCAiLXVhbGwiLiAgVGhlc2UgaGF2ZSBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIHJlc3VsdCBmcm9tICJnaXQgZGlmZiIgdGhhdCBjb21wYXJlcyB0d28gYmxvYnMsIGUuZy4gImdpdCBkaWZmCisgICAkY29tbWl0MTokcGF0aCAkY29tbWl0MjokcGF0aCIsIHVzZWQgdG8gYmUgc2hvd24gd2l0aCB0aGUgZnVsbAorICAgb2JqZWN0IG5hbWUgYXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgYnV0IGl0IGlzIG1vcmUgbmF0dXJhbCB0bworICAgdXNlIHRoZSAkcGF0aCBpbiB0aGUgb3V0cHV0IGFuZCB1c2UgaXQgdG8gbG9vayB1cCAuZ2l0YXR0cmlidXRlcy4KKworICogVGhlICJjb2xsaXNpb24gZGV0ZWN0aW5nIiBTSEEtMSBpbXBsZW1lbnRhdGlvbiBzaGlwcGVkIHdpdGggMi4xMworICAgd2FzIHF1aXRlIGJyb2tlbiBvbiBzb21lIGJpZy1lbmRpYW4gcGxhdGZvcm1zIGFuZC9vciBwbGF0Zm9ybXMgdGhhdAorICAgZG8gbm90IGxpa2UgdW5hbGlnbmVkIGZldGNoZXMuICBVcGRhdGUgdG8gdGhlIHVwc3RyZWFtIGNvZGUgd2hpY2gKKyAgIGhhcyBhbHJlYWR5IGZpeGVkIHRoZXNlIGlzc3Vlcy4KKworICogImdpdCBhbSAtaCIgdHJpZ2dlcmVkIGEgQlVHKCkuCisKKyAqIFRoZSBpbnRlcmFjdGlvbiBvZiAidXJsLiouaW5zdGVhZE9mIiBhbmQgY3VzdG9tIFVSTCBzY2hlbWUncworICAgd2hpdGVsaXN0aW5nIGlzIG5vdyBkb2N1bWVudGVkIGJldHRlci4KKworICogVGhlIHRpbWVzdGFtcCBvZiB0aGUgaW5kZXggZmlsZSBpcyBub3cgdGFrZW4gYWZ0ZXIgdGhlIGZpbGUgaXMKKyAgIGNsb3NlZCwgdG8gaGVscCBXaW5kb3dzLCBvbiB3aGljaCBhIHN0YWxlIHRpbWVzdGFtcCBpcyByZXBvcnRlZCBieQorICAgZnN0YXQoKSBvbiBhIGZpbGUgdGhhdCBpcyBvcGVuZWQgZm9yIHdyaXRpbmcgYW5kIGRhdGEgd2FzIHdyaXR0ZW4KKyAgIGJ1dCBub3QgeWV0IGNsb3NlZC4KKworICogImdpdCBwdWxsIC0tcmViYXNlIC0tYXV0b3N0YXNoIiBkaWRuJ3QgYXV0by1zdGFzaCB3aGVuIHRoZSBsb2NhbCBoaXN0b3J5CisgICBmYXN0LWZvcndhcmRzIHRvIHRoZSB1cHN0cmVhbS4KKworICogQSBmbGFreSB0ZXN0IGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCAkY21kIC1oIiBmb3IgYnVpbHRpbiBjb21tYW5kcyBjYWxscyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCisgICBjb21tYW5kIChpLmUuIGNtZF8kY21kKCkgZnVuY3Rpb24pIHdpdGhvdXQgZG9pbmcgYW55IHJlcG9zaXRvcnkKKyAgIHNldC11cCwgYW5kIHRoZSBjb21tYW5kcyB0aGF0IGV4cGVjdCBSVU5fU0VUVVAgaXMgZG9uZSBieSB0aGUgR2l0CisgICBwb3R0eSBuZWVkcyB0byBiZSBwcmVwYXJlZCB0byBzaG93IHRoZSBoZWxwIHRleHQgd2l0aG91dCBiYXJmaW5nLgorICAgKG1lcmdlIGQ2OTE1NTExOTIgamsvY29uc2lzdGVudC1oIGxhdGVyIHRvIG1haW50KS4KKworICogSGVscCBjb250cmlidXRvcnMgdGhhdCB2aXNpdCB1cyBhdCBHaXRIdWIuCisKKyAqICJnaXQgc3Rhc2ggcHVzaCA8cGF0aHNwZWM+IiBkaWQgbm90IHdvcmsgZnJvbSBhIHN1YmRpcmVjdG9yeSBhdCBhbGwuCisgICBCdWdmaXggZm9yIGEgdG9waWMgaW4gdjIuMTMKKworICogQXMgdGhlcmUgaXMgbm8gcG9ydGFibGUgd2F5IHRvIHBhc3MgdGltZXpvbmUgaW5mb3JtYXRpb24gdG8KKyAgIHN0cmZ0aW1lLCBzb21lIG91dHB1dCBmb3JtYXQgZnJvbSAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgYXJlCisgICBpbXBvc3NpYmxlIHRvIHByb2R1Y2UuICBUZWFjaCBvdXIgb3duIHN0cmJ1Zl9hZGRmdGltZSB0byByZXBsYWNlICV6CisgICBhbmQgJVogd2l0aCBjYWxsZXItc3VwcGxpZWQgdmFsdWVzIHRvIGhlbHAgd29ya2luZyBhcm91bmQgdGhpcy4KKyAgIChtZXJnZSA2ZWNlZDNlYzVlIHJzL3N0cmJ1Zi1hZGRmdGltZS16WiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIHRvIHdvcmsgYXJvdW5kIGEgd3JhcHBlciBNYWNPUyBYIGFkZHMKKyAgIGFyb3VuZCB1bmRlcmx5aW5nIG1lbGQuCisKKyAqIEFuIGV4YW1wbGUgaW4gZG9jdW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90IHdvcmsgaW4gbXVsdGkgd29ya3RyZWUKKyAgIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgcHJldHR5LWZvcm1hdCBzcGVjaWZpZXJzIGxpa2UgJyVoJywgJyV0JywgZXRjLiBoYWQgYW4KKyAgIG9wdGltaXphdGlvbiB0aGF0IG5vIGxvbmdlciB3b3JrcyBjb3JyZWN0bHkuICBJbiBwcmVwYXJhdGlvbi9ob3BlCisgICBvZiBnZXR0aW5nIGl0IGNvcnJlY3RseSBpbXBsZW1lbnRlZCwgZmlyc3QgZGlzY2FyZCB0aGUgb3B0aW1pemF0aW9uCisgICB0aGF0IGlzIGJyb2tlbi4KKworICogVGhlIGNvZGUgdG8gcGljayB1cCBhbmQgZXhlY3V0ZSBjb21tYW5kIGFsaWFzIGRlZmluaXRpb24gZnJvbSB0aGUKKyAgIGNvbmZpZ3VyYXRpb24gdXNlZCB0byBzd2l0Y2ggdG8gdGhlIHRvcCBvZiB0aGUgd29ya2luZyB0cmVlIGFuZAorICAgdGhlbiBjb21lIGJhY2sgd2hlbiB0aGUgZXhwYW5kZWQgYWxpYXMgd2FzIGV4ZWN1dGVkLCB3aGljaCB3YXMKKyAgIHVubmVjZXNzYXJpbHkgY29tcGxleC4gIEF0dGVtcHQgdG8gc2ltcGxpZnkgdGhlIGxvZ2ljIGJ5IHVzaW5nIHRoZQorICAgZWFybHktY29uZmlnIG1lY2hhbmlzbSB0aGF0IGRvZXMgbm90IGNoZGlyIGFyb3VuZC4KKworICogRml4IGNvbmZpZ3VyYXRpb24gY29kZXBhdGggdG8gcGF5IHByb3BlciBhdHRlbnRpb24gdG8gY29tbW9uZGlyCisgICB0aGF0IGlzIHVzZWQgaW4gbXVsdGktd29ya3RyZWUgc2l0dWF0aW9uLCBhbmQgaXNvbGF0ZSBjb25maWcgQVBJCisgICBpbnRvIGl0cyBvd24gaGVhZGVyIGZpbGUuCisgICAobWVyZ2UgZGM4NDQxZmRiNCBidy9jb25maWctaCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYWRkIC1wIiB3ZXJlIHVwZGF0ZWQgaW4gMi4xMiB0aW1lZnJhbWUgdG8gY29wZSB3aXRoIGN1c3RvbQorICAgY29yZS5jb21tZW50Y2hhciBidXQgdGhlIGltcGxlbWVudGF0aW9uIHdhcyBidWdneSBhbmQgYQorICAgbWV0YWNoYXJhY3RlciBsaWtlICQgYW5kICogZGlkIG5vdCB3b3JrLgorCisgKiBBIHJlY2VudCByZWdyZXNzaW9uIGluICJnaXQgcmViYXNlIC1pIiBoYXMgYmVlbiBmaXhlZCBhbmQgdGVzdHMKKyAgIHRoYXQgd291bGQgaGF2ZSBjYXVnaHQgaXQgYW5kIG90aGVycyBoYXZlIGJlZW4gYWRkZWQuCisKKyAqIEFuIHVuYWxpZ25lZCAzMi1iaXQgYWNjZXNzIGluIHBhY2stYml0bWFwIGNvZGUgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaWdodGVuIGVycm9yIGNoZWNrcyBmb3IgaW52YWxpZCAiZ2l0IGFwcGx5IiBpbnB1dC4KKworICogVGhlIHNwbGl0IGluZGV4IGNvZGUgZGlkIG5vdCBob25vciBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgc2V0dGluZworICAgY29ycmVjdGx5LgorCisgKiBUaGUgTWFrZWZpbGUgcnVsZSBpbiBjb250cmliL3N1YnRyZWUgZm9yIGJ1aWxkaW5nIGRvY3VtZW50YXRpb24KKyAgIGxlYXJuZWQgdG8gaG9ub3VyIFVTRV9BU0NJSURPQ1RPUiBqdXN0IGxpa2UgdGhlIG1haW4gZG9jdW1lbnRhdGlvbgorICAgc2V0IGRvZXMuCisKKyAqIENvZGUgY2xlYW4tdXAgdG8gZml4IHBvc3NpYmxlIGJ1ZmZlciBvdmVyLXJlYWRpbmcuCisKKyAqIEEgZmV3IHRlc3RzIHRoYXQgdHJpZWQgdG8gdmVyaWZ5IHRoZSBjb250ZW50cyBvZiBwdXNoIGNlcnRpZmljYXRlcworICAgZGlkIG5vdCB1c2UgJ2dpdCByZXYtcGFyc2UnIHRvIGZvcm11bGF0ZSB0aGUgbGluZSB0byBsb29rIGZvciBpbgorICAgdGhlIGNlcnRpZmljYXRlIGNvcnJlY3RseS4KKworICogVXBkYXRlIHRoZSBjaGFyYWN0ZXIgd2lkdGggdGFibGVzLgorCisgKiBBZnRlciAiZ2l0IGJyYW5jaCAtLW1vdmUiIG9mIHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQgYnJhbmNoLCB0aGUKKyAgIGNvZGUgdG8gd2FsayB0aGUgcmVmbG9nIG9mIEhFQUQgdmlhICJsb2cgLWciIGFuZCBmcmllbmRzCisgICBpbmNvcnJlY3RseSBzdG9wcGVkIGF0IHRoZSByZWZsb2cgZW50cnkgdGhhdCByZWNvcmRzIHRoZSByZW5hbWluZworICAgb2YgdGhlIGJyYW5jaC4KKworICogVGhlIHJld3JpdGUgb2YgImdpdCBicmFuY2ggLS1saXN0IiB1c2luZyBmb3ItZWFjaC1yZWYncyBpbnRlcm5hbHMKKyAgIHRoYXQgaGFwcGVuZWQgaW4gdjIuMTMgcmVncmVzc2VkIGl0cyBoYW5kbGluZyBvZiBjb2xvci5icmFuY2gubG9jYWw7CisgICB0aGlzIGhhcyBiZWVuIGZpeGVkLgorCisgKiBUaGUgYnVpbGQgcHJvY2VkdXJlIGhhcyBiZWVuIGltcHJvdmVkIHRvIGFsbG93IGJ1aWxkaW5nIGFuZCB0ZXN0aW5nCisgICBHaXQgd2l0aCBhZGRyZXNzIHNhbml0aXplciBtb3JlIGVhc2lseS4KKyAgIChtZXJnZSA0MjVjYTY3MTBiIGprL2J1aWxkLXdpdGgtYXNhbiBsYXRlciB0byBtYWludCkuCisKKyAqIE9uIEN5Z3dpbiwgc2ltaWxhciB0byBXaW5kb3dzLCAiZ2l0IHB1c2ggLy9zZXJ2ZXIvc2hhcmUvcmVwb3NpdG9yeSIKKyAgIG91Z2h0IHRvIG1lYW4gYSByZXBvc2l0b3J5IG9uIGEgbmV0d29yayBzaGFyZSB0aGF0IGNhbiBiZSBhY2Nlc3NlZAorICAgbG9jYWxseSwgYnV0IHRoaXMgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSBkdWUgdG8gc3RyaXBwaW5nIHRoZSBkb3VibGUKKyAgIHNsYXNoZXMgYXQgdGhlIGJlZ2lubmluZy4KKworICogVGhlIHByb2dyZXNzIG1ldGVyIGRpZCBub3QgZ2l2ZSBhIHVzZWZ1bCBvdXRwdXQgd2hlbiB3ZSBoYXZlbid0IGhhZAorICAgMC41IHNlY29uZHMgdG8gbWVhc3VyZSB0aGUgdGhyb3VnaHB1dCBkdXJpbmcgdGhlIGludGVydmFsLiAgSW5zdGVhZAorICAgc2hvdyB0aGUgb3ZlcmFsbCB0aHJvdWdocHV0IHJhdGUgYXQgdGhlIGVuZCwgd2hpY2ggaXMgYSBtdWNoIG1vcmUKKyAgIHVzZWZ1bCBudW1iZXIuCisKKyAqIENvZGUgY2xlYW4tdXAsIHRoYXQgbWFrZXMgdXMgaW4gc3luYyB3aXRoIERlYmlhbiBieSBvbmUgcGF0Y2guCisKKyAqIFdlIHJ1biBhbiBlYXJseSBwYXJ0IG9mICJnaXQgZ2MiIHRoYXQgZGVhbHMgd2l0aCByZWZzIGJlZm9yZQorICAgZGFlbW9uaXNpbmcgKGFuZCBub3QgdW5kZXIgbG9jaykgZXZlbiB3aGVuIHJ1bm5pbmcgYSBiYWNrZ3JvdW5kCisgICBhdXRvLWdjLCB3aGljaCBjYXVzZWQgbXVsdGlwbGUgZ2MgcHJvY2Vzc2VzIGF0dGVtcHRpbmcgdG8gcnVuIHRoZQorICAgZWFybHkgcGFydCBhdCB0aGUgc2FtZSB0aW1lLiAgVGhpcyBpcyBub3cgcHJldmVudGVkIGJ5IHJ1bm5pbmcgdGhlCisgICBlYXJseSBwYXJ0IGFsc28gdW5kZXIgdGhlIEdDIGxvY2suCisKKyAqIEEgcmVjZW50IHVwZGF0ZSBicm9rZSBhbiBhbGlhcyB0aGF0IGNvbnRhaW5lZCBhbiB1cHBlcmNhc2UgbGV0dGVyLgorCisgKiBPdGhlciBtaW5vciBkb2MsIHRlc3QgYW5kIGJ1aWxkIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW51cHMuCisgICAobWVyZ2UgNTA1MzMxMzU2MiBycy91cmxtYXRjaC1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0MmM3OGEyMTZlIHJzL3VzZS1kaXYtcm91bmQtdXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDVlOGQyNzI5YWUgcnMvd3Qtc3RhdHVzLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGJjOWI3ZTIwN2YgYXMvZGlmZi1vcHRpb25zLWdyYW1tb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYWMwNTIyMmIzMSBhaC9wYXRjaC1pZC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MDMzNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuMS50eHQKQEAgLTAsMCArMSw0IEBACitHaXQgdjIuMTQuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBmb3J3YXJkLXBvcnRzIHRoZSBmaXggZm9yICJzc2g6Ly8uLi4iIFVSTCBmcm9tIEdpdCB2Mi43LjYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWM5MTg2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjIudHh0CkBAIC0wLDAgKzEsMTA1IEBACitHaXQgdjIuMTQuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjE0LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQmVjYXVzZSByZWNlbnQgR2l0IGZvciBXaW5kb3dzIGRvIGNvbWUgd2l0aCBhIHJlYWwgbXNnZm10LCB0aGUKKyAgIGJ1aWxkIHByb2NlZHVyZSBmb3IgZ2l0LWd1aSBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSBpdCBpbnN0ZWFkIG9mIGEKKyAgIGhhbmQtcm9sbGVkIHN1YnN0aXR1dGUuCisKKyAqICIlQyhjb2xvciBuYW1lKSIgaW4gdGhlIHByZXR0eSBwcmludCBmb3JtYXQgYWx3YXlzIHByb2R1Y2VkIEFOU0kKKyAgIGNvbG9yIGVzY2FwZSBjb2Rlcywgd2hpY2ggd2FzIGFuIGVhcmx5IGRlc2lnbiBtaXN0YWtlLiAgVGhleSBub3cKKyAgIGhvbm9yIHRoZSBjb25maWd1cmF0aW9uIChlLmcuICJjb2xvci51aSA9IG5ldmVyIikgYW5kIGFsc28gdHR5LW5lc3MKKyAgIG9mIHRoZSBvdXRwdXQgbWVkaXVtLgorCisgKiBUaGUgaHR0cC57c3Nsa2V5LHNzbENlcnR9IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZSB0byBiZQorICAgaW50ZXJwcmV0ZWQgYXMgYSBwYXRobmFtZSB0aGF0IGhvbm9ycyAiflt1c2VybmFtZV0vIiBwcmVmaXgsIGJ1dAorICAgd2VyZW4ndCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIE51bWVyb3VzIGJ1Z3MgaW4gd2Fsa2luZyBvZiByZWZsb2dzIHZpYSAibG9nIC1nIiBhbmQgZnJpZW5kcyBoYXZlCisgICBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGNvbW1pdCIgd2hlbiBzZWVpbmcgYW4gdG90YWxseSBlbXB0eSBtZXNzYWdlIHNhaWQgInlvdSBkaWQgbm90CisgICBlZGl0IHRoZSBtZXNzYWdlIiwgd2hpY2ggaXMgY2xlYXJseSB3cm9uZy4gIFRoZSBtZXNzYWdlIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFdoZW4gYSBkaXJlY3RvcnkgaXMgbm90IHJlYWRhYmxlLCAiZ2l0d2ViIiBmYWlscyB0byBidWlsZCB0aGUKKyAgIHByb2plY3QgbGlzdC4gIFdvcmsgdGhpcyBhcm91bmQgYnkgc2tpcHBpbmcgc3VjaCBhIGRpcmVjdG9yeS4KKworICogQSByZWNlbnRseSBhZGRlZCB0ZXN0IGZvciB0aGUgImNyZWRlbnRpYWwtY2FjaGUiIGhlbHBlciByZXZlYWxlZAorICAgdGhhdCBFT0YgZGV0ZWN0aW9uIGRvbmUgYXJvdW5kIHRoZSB0aW1lIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBjYWNoZQorICAgZGFlbW9uIGlzIHRvcm4gZG93biB3ZXJlIGZsYWt5LiAgVGhpcyB3YXMgZml4ZWQgYnkgcmVhY3RpbmcgdG8KKyAgIEVDT05OUkVTRVQgYW5kIGJlaGF2aW5nIGFzIGlmIHdlIGdvdCBhbiBFT0YuCisKKyAqIFNvbWUgdmVyc2lvbnMgb2YgR251UEcgZmFpbCB0byBraWxsIGdwZy1hZ2VudCBpdCBhdXRvLXNwYXduZWQKKyAgIGFuZCBzdWNoIGEgbGVmdC1vdmVyIGFnZW50IGNhbiBpbnRlcmZlcmUgd2l0aCBhIHRlc3QuICBXb3JrIGl0CisgICBhcm91bmQgYnkgYXR0ZW1wdGluZyB0byBraWxsIG9uZSBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgdGVzdC4KKworICogImdpdCBsb2cgLS10YWc9bm8tc3VjaC10YWciIHNob3dlZCBsb2cgc3RhcnRpbmcgZnJvbSBIRUFELCB3aGljaAorICAgaGFzIGJlZW4gZml4ZWQtLS1pdCBub3cgc2hvd3Mgbm90aGluZy4KKworICogVGhlICJ0YWcucGFnZXIiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2FzIHVzZWxlc3MgZm9yIHRob3NlIHdobworICAgYWN0dWFsbHkgY3JlYXRlIHRhZyBvYmplY3RzLCBhcyBpdCBpbnRlcmZlcmVkIHdpdGggdGhlIHVzZSBvZiBhbgorICAgZWRpdG9yLiAgQSBuZXcgbWVjaGFuaXNtIGhhcyBiZWVuIGludHJvZHVjZWQgZm9yIGNvbW1hbmRzIHRvIGVuYWJsZQorICAgcGFnZXIgZGVwZW5kaW5nIG9uIHdoYXQgb3BlcmF0aW9uIGlzIGJlaW5nIGNhcnJpZWQgb3V0IHRvIGZpeCB0aGlzLAorICAgYW5kIHRoZW4gImdpdCB0YWcgLWwiIGlzIG1hZGUgdG8gcnVuIHBhZ2VyIGJ5IGRlZmF1bHQuCisKKyAqICJnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAkdGhlcmUgSEVBRDokdGFyZ2V0IiB3YXMgbm90CisgICBwcm9wYWdhdGVkIGRvd24gdG8gdGhlIHN1Ym1vZHVsZXMsIGJ1dCBub3cgaXQgaXMuCisKKyAqIENvbW1hbmRzIGxpa2UgImdpdCByZWJhc2UiIGFjY2VwdGVkIHRoZSAtLXJlcmVyZS1hdXRvdXBkYXRlIG9wdGlvbgorICAgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBidXQgZGlkIG5vdCBhbHdheXMgdXNlIGl0LiAgVGhpcyBoYXMgYmVlbgorICAgZml4ZWQuCisKKyAqICJnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1xdWlldCIgZGlkIG5vdCBwYXNzIHRoZSBxdWlldAorICAgb3B0aW9uIGRvd24gdG8gc3VibW9kdWxlcy4KKworICogImdpdCBhbSAtcyIgaGFzIGJlZW4gdGF1Z2h0IHRoYXQgc29tZSBpbnB1dCBtYXkgZW5kIHdpdGggYSB0cmFpbGVyCisgICBibG9jayB0aGF0IGlzIG5vdCBTaWduZWQtb2ZmLWJ5OiBhbmQgaXQgc2hvdWxkIHJlZnJhaW4gZnJvbSBhZGRpbmcKKyAgIGFuIGV4dHJhIGJsYW5rIGxpbmUgYmVmb3JlIGFkZGluZyBhIG5ldyBzaWduLW9mZiBpbiBzdWNoIGEgY2FzZS4KKworICogImdpdCBzdm4iIHVzZWQgd2l0aCAiLS1sb2NhbHRpbWUiIG9wdGlvbiBkaWQgbm90IGNvbXB1dGUgdGhlIHR6CisgICBvZmZzZXQgZm9yIHRoZSB0aW1lc3RhbXAgaW4gcXVlc3Rpb24gYW5kIGluc3RlYWQgYWx3YXlzIHVzZWQgdGhlCisgICBjdXJyZW50IHRpbWUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogTWVtb3J5IGxlYWtzIGluIGEgZmV3IGVycm9yIGNvZGVwYXRocyBoYXZlIGJlZW4gcGx1Z2dlZC4KKworICogYmFzaCA0LjQgb3IgbmV3ZXIgZ2F2ZSBhIHdhcm5pbmcgb24gTlVMIGJ5dGUgaW4gY29tbWFuZAorICAgc3Vic3RpdHV0aW9uIGRvbmUgaW4gImdpdCBzdGFzaCI7IHRoaXMgaGFzIGJlZW4gc3F1ZWxjaGVkLgorCisgKiAiZ2l0IGdyZXAgLUwiIGFuZCAiZ2l0IGdyZXAgLS1xdWlldCAtTCIgcmVwb3J0ZWQgZGlmZmVyZW50IGV4aXQKKyAgIGNvZGVzOyB0aGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogV2hlbiBoYW5kc2hha2Ugd2l0aCBhIHN1YnByb2Nlc3MgZmlsdGVyIG5vdGljZXMgdGhhdCB0aGUgcHJvY2VzcworICAgYXNrZWQgZm9yIGFuIHVua25vd24gY2FwYWJpbGl0eSwgR2l0IGRpZCBub3QgcmVwb3J0IHdoYXQgcHJvZ3JhbQorICAgdGhlIG9mZmVuZGluZyBzdWJwcm9jZXNzIHdhcyBydW5uaW5nLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgYXBwbHkiIHRoYXQgaXMgdXNlZCBhcyBhIGJldHRlciAicGF0Y2ggLXAxIiBmYWlsZWQgdG8gYXBwbHkgYQorICAgdGFrZW4gZnJvbSBhIGZpbGUgd2l0aCBDUkxGIGxpbmUgZW5kaW5ncyB0byBhIGZpbGUgd2l0aCBDUkxGIGxpbmUKKyAgIGVuZGluZ3MuICBUaGUgcm9vdCBjYXVzZSB3YXMgYmVjYXVzZSBpdCBtaXN1c2VkIGNvbnZlcnRfdG9fZ2l0KCkKKyAgIHRoYXQgdHJpZWQgdG8gZG8gInNhZmUtY3JsZiIgcHJvY2Vzc2luZyBieSBsb29raW5nIGF0IHRoZSBpbmRleAorICAgZW50cnkgYXQgdGhlIHNhbWUgcGF0aCwgd2hpY2ggaXMgYSBub25zZW5zZS0tLWluIHRoYXQgbW9kZSwgImFwcGx5IgorICAgaXMgbm90IHdvcmtpbmcgb24gdGhlIGRhdGEgaW4gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIGluZGV4IGF0IGFsbC4KKyAgIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqIEtpbGxpbmcgImdpdCBtZXJnZSAtLWVkaXQiIGJlZm9yZSB0aGUgZWRpdG9yIHJldHVybnMgY29udHJvbCBsZWZ0CisgICB0aGUgcmVwb3NpdG9yeSBpbiBhIHN0YXRlIHdpdGggTUVSR0VfTVNHIGJ1dCB3aXRob3V0IE1FUkdFX0hFQUQsCisgICB3aGljaCBpbmNvcnJlY3RseSB0ZWxscyB0aGUgc3Vic2VxdWVudCAiZ2l0IGNvbW1pdCIgdGhhdCB0aGVyZSB3YXMKKyAgIGEgc3F1YXNoIG1lcmdlIGluIHByb2dyZXNzLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBhcmNoaXZlIiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoIHBhdGhzcGVjcyBhbmQgdGhlCisgICBleHBvcnQtaWdub3JlIGF0dHJpYnV0ZS4KKworICogImdpdCBjdnNzZXJ2ZXIiIG5vIGxvbmdlciBpcyBpbnZva2VkIGJ5ICJnaXQgZGFlbW9uIiBieSBkZWZhdWx0LAorICAgYXMgaXQgaXMgb2xkIGFuZCBsYXJnZWx5IHVubWFpbnRhaW5lZC4KKworICogVmFyaW91cyBQZXJsIHNjcmlwdHMgZGlkIG5vdCB1c2Ugc2FmZV9waXBlX2NhcHR1cmUoKSBpbnN0ZWFkIG9mCisgICBiYWNrdGlja3MsIGxlYXZpbmcgdGhlbSBzdXNjZXB0aWJsZSB0byBlbmQtdXNlciBpbnB1dC4gIFRoZXkgaGF2ZQorICAgYmVlbiBjb3JyZWN0ZWQuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCitDcmVkaXRzIGdvIHRvIGpvZXJuY2hlbiA8am9lcm5jaGVuQHBoZW5vZWxpdC5kZT4gZm9yIGZpbmRpbmcgdGhlCit1bnNhZmUgY29uc3RydWN0cyBpbiAiZ2l0IGN2c3NlcnZlciIsIGFuZCB0byBKZWZmIEtpbmcgYXQgR2l0SHViIGZvcgorZmluZGluZyBhbmQgZml4aW5nIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBpc3N1ZSBpbiBvdGhlciBzY3JpcHRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3N2M5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuMy50eHQKQEAgLTAsMCArMSw5OSBAQAorR2l0IHYyLjE0LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xNC4yCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIHJlYWQgYSBzaW5nbGUgd2hvbGUgbGluZSBpbnRvIHN0cmJ1ZgorICAgbWlzdGFrZW5seSB0cmlnZ2VyZWQgT09NIGVycm9yIGF0IEVPRiB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsCisgICB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogSW4gYWRkaXRpb24gdG8gImNjOiA8YUBkZC5yZS5zcz4gIyBjcnVmdCIsICJjYzogYUBkZC5yZS5zcyAjIGNydWZ0IgorICAgd2FzIHRhdWdodCB0byAiZ2l0IHNlbmQtZW1haWwiIGFzIGEgdmFsaWQgd2F5IHRvIHRlbGwgaXQgdGhhdCBpdAorICAgbmVlZHMgdG8gYWxzbyBzZW5kIGEgY2FyYm9uIGNvcHkgdG8gPGFAZGQucmUuc3M+IGluIHRoZSB0cmFpbGVyCisgICBzZWN0aW9uLgorCisgKiBGaXggcmVncmVzc2lvbiB0byAiZ2l0ayAtLWJpc2VjdCIgYnkgYSByZWNlbnQgdXBkYXRlLgorCisgKiBVbmxpa2UgImdpdCBjb21taXQtdHJlZSA8IGZpbGUiLCAiZ2l0IGNvbW1pdC10cmVlIC1GIGZpbGUiIGRpZCBub3QKKyAgIHBhc3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIHZlcmJhdGltIGFuZCBpbnN0ZWFkIGNvbXBsZXRlZCBhbgorICAgaW5jb21wbGV0ZSBsaW5lIGF0IHRoZSBlbmQsIGlmIGV4aXN0cy4gIFRoZSBsYXR0ZXIgaGFzIGJlZW4gdXBkYXRlZAorICAgdG8gbWF0Y2ggdGhlIGJlaGF2aW91ciBvZiB0aGUgZm9ybWVyLgorCisgKiAiZ2l0IGFyY2hpdmUiLCBlc3BlY2lhbGx5IHdoZW4gdXNlZCB3aXRoIHBhdGhzcGVjLCBzdG9yZWQgYW4gZW1wdHkKKyAgIGRpcmVjdG9yeSBpbiBpdHMgb3V0cHV0LCBldmVuIHRob3VnaCBHaXQgaXRzZWxmIG5ldmVyIGRvZXMgc28uCisgICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCisgKiBBUEkgZXJyb3ItcHJvb2Zpbmcgd2hpY2ggaGFwcGVucyB0byBhbHNvIHNxdWVsY2ggd2FybmluZ3MgZnJvbSBHQ0MuCisKKyAqICJnaXQgZ2MiIHRyaWVzIHRvIGF2b2lkIHJ1bm5pbmcgdHdvIGluc3RhbmNlcyBhdCB0aGUgc2FtZSB0aW1lIGJ5CisgICByZWFkaW5nIGFuZCB3cml0aW5nIHBpZC9ob3N0IGZyb20gYW5kIHRvIGEgbG9jayBmaWxlOyBpdCB1c2VkIHRvCisgICB1c2UgYW4gaW5jb3JyZWN0IGZzY2FuZigpIGZvcm1hdCB3aGVuIHJlYWRpbmcsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFRoZSB0ZXN0IGxpbnRlciBoYXMgYmVlbiB0YXVnaHQgdGhhdCB3ZSBkbyBub3QgbGlrZSAiZWNobyAtZSIuCisKKyAqIENvZGUgY21wLnN0ZC5jIG5pdHBpY2suCisKKyAqICJnaXQgZGVzY3JpYmUgLS1tYXRjaCIgbGVhcm5lZCB0byB0YWtlIG11bHRpcGxlIHBhdHRlcm5zIGluIHYyLjEzCisgICBzZXJpZXMsIGJ1dCB0aGUgZmVhdHVyZSBpZ25vcmVkIHRoZSBwYXR0ZXJucyBhZnRlciB0aGUgZmlyc3Qgb25lCisgICBhbmQgZGlkIG5vdCB3b3JrIGF0IGFsbC4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgY2F0LWZpbGUgLS10ZXh0Y29udiIgc3RhcnRlZCBzZWdmYXVsdGluZyByZWNlbnRseSwgd2hpY2gKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIGJ1aWx0LWluIHBhdHRlcm4gdG8gZGV0ZWN0IHRoZSAiZnVuY3Rpb24gaGVhZGVyIiBmb3IgSFRNTCBkaWQKKyAgIG5vdCBtYXRjaCA8SDE+Li48SDY+IGVsZW1lbnRzIHdpdGhvdXQgYW55IGF0dHJpYnV0ZXMsIHdoaWNoIGhhcworICAgYmVlbiBmaXhlZC4KKworICogImdpdCBtYWlsaW5mbyIgd2FzIGxvb3NlIGluIGRlY29kaW5nIHF1b3RlZCBwcmludGFibGUgYW5kIHByb2R1Y2VkCisgICBnYXJiYWdlIHdoZW4gdGhlIHR3byBsZXR0ZXJzIGFmdGVyIHRoZSBlcXVhbCBzaWduIGFyZSBub3QKKyAgIGhleGFkZWNpbWFsLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogVGhlIGRvY3VtZW50YXRpb24gZm9yICctWDxvcHRpb24+JyBmb3IgbWVyZ2VzIHdhcyBtaXNsZWFkaW5nbHkKKyAgIHdyaXR0ZW4gdG8gc3VnZ2VzdCB0aGF0ICItcyB0aGVpcnMiIGV4aXN0cywgd2hpY2ggaXMgbm90IHRoZSBjYXNlLgorCisgKiBTcGVsbCB0aGUgbmFtZSBvZiBvdXIgc3lzdGVtIGFzICJHaXQiIGluIHRoZSBvdXRwdXQgZnJvbQorICAgcmVxdWVzdC1wdWxsIHNjcmlwdC4KKworICogRml4ZXMgZm9yIGEgaGFuZGZ1bCBtZW1vcnkgYWNjZXNzIGlzc3VlcyBpZGVudGlmaWVkIGJ5IHZhbGdyaW5kLgorCisgKiBCYWNrcG9ydHMgYSBtb3JhbCBlcXVpdmFsZW50IG9mIDIwMTUgZml4IHRvIHRoZSBwb2xsIGVtdWxhdGlvbiBmcm9tCisgICB0aGUgdXBzdHJlYW0gZ251bGliIHRvIGZpeCBvY2Nhc2lvbmFsIGJyZWFrYWdlcyBvbiBIUEUgTm9uU3RvcC4KKworICogSW4gdGhlICItLWZvcm1hdD0uLi4iIG9wdGlvbiBvZiB0aGUgImdpdCBmb3ItZWFjaC1yZWYiIGNvbW1hbmQgKGFuZAorICAgaXRzIGZyaWVuZHMsIGkuZS4gdGhlIGxpc3RpbmcgbW9kZSBvZiAiZ2l0IGJyYW5jaC90YWciKSwgIiUoYXRvbTopIgorICAgKGUuZy4gIiUocmVmbmFtZTopIiwgIiUoYm9keTopIiB1c2VkIHRvIGVycm9yIG91dC4gIEluc3RlYWQsIHRyZWF0CisgICB0aGVtIGFzIGlmIHRoZSBjb2xvbiBhbmQgYW4gZW1wdHkgc3RyaW5nIHRoYXQgZm9sbG93cyBpdCB3ZXJlIG5vdAorICAgdGhlcmUuCisKKyAqIFVzZXJzIHdpdGggImNvbG9yLnVpID0gYWx3YXlzIiBpbiB0aGVpciBjb25maWd1cmF0aW9uIHdlcmUgYnJva2VuCisgICBieSBhIHJlY2VudCBjaGFuZ2UgdGhhdCBtYWRlIHBsdW1iaW5nIGNvbW1hbmRzIHRvIHBheSBhdHRlbnRpb24gdG8KKyAgIHRoZW0gYXMgdGhlIHBhdGNoIGNyZWF0ZWQgaW50ZXJuYWxseSBieSAiZ2l0IGFkZCAtcCIgd2VyZSBjb2xvcmVkCisgICAoaGVoKSBhbmQgbWFkZSB1bnVzYWJsZS4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgYnJhbmNoIC1NIGEgYiIgd2hpbGUgb24gYSBicmFuY2ggdGhhdCBpcyBjb21wbGV0ZWx5IHVucmVsYXRlZAorICAgdG8gZWl0aGVyIGJyYW5jaCBhIG9yIGJyYW5jaCBiIG1pc2JlaGF2ZWQgd2hlbiBtdWx0aXBsZSB3b3JrdHJlZQorICAgd2FzIGluIHVzZS4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIHdpdGggLU0vLUMgb3B0aW9uIGlzc3VlZCAiY29weSIgaW5zdHJ1Y3Rpb24gb24gYQorICAgcGF0aCB0aGF0IGlzIHNpbXVsdGFuZW91c2x5IG1vZGlmaWVkLCB3aGljaCB3YXMgaW5jb3JyZWN0LgorCisgKiBUaGUgY2hlY2twb2ludCBjb21tYW5kICJnaXQgZmFzdC1pbXBvcnQiIGRpZCBub3QgZmx1c2ggdXBkYXRlcyB0bworICAgcmVmcyBhbmQgbWFya3MgdW5sZXNzIGF0IGxlYXN0IG9uZSBvYmplY3Qgd2FzIGNyZWF0ZWQgc2luY2UgdGhlCisgICBsYXN0IGNoZWNrcG9pbnQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZCwgYXMgdGhlc2UgdGhpbmdzIGNhbgorICAgaGFwcGVuIHdpdGhvdXQgYW55IG5ldyBvYmplY3QgZ2V0dGluZyBjcmVhdGVkLgorCisgKiBUaGUgc2NyaXB0cyB0byBkcml2ZSBUcmF2aXNDSSBoYXMgYmVlbiByZW9yZ2FuaXplZCBhbmQgdGhlbiBhbgorICAgb3B0aW1pemF0aW9uIHRvIGF2b2lkIHNwZW5kaW5nIGN5Y2xlcyBvbiBhIGJyYW5jaCB3aG9zZSB0aXAgaXMKKyAgIHRhZ2dlZCBoYXMgYmVlbiBpbXBsZW1lbnRlZC4KKworICogImdpdCBmZXRjaCA8dGhlcmU+IDxzcmM+Ojxkc3Q+IiBhbGxvd3MgYW4gb2JqZWN0IG5hbWUgb24gdGhlIDxzcmM+CisgICBzaWRlIHdoZW4gdGhlIG90aGVyIHNpZGUgYWNjZXB0cyBzdWNoIGEgcmVxdWVzdCBzaW5jZSBHaXQgdjIuNSwgYnV0CisgICB0aGUgZG9jdW1lbnRhdGlvbiB3YXMgbGVmdCBzdGFsZS4KKworICogQSByZWdyZXNzaW9uIGluIDIuMTEgdGhhdCBtYWRlIHRoZSBjb2RlIHRvIHJlYWQgdGhlIGxpc3Qgb2YKKyAgIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzIG92ZXJydW4gdGhlIGVuZCBvZiB0aGUgc3RyaW5nIGhhcyBiZWVuCisgICBmaXhlZC4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3NTVhOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC40LnR4dApAQCAtMCwwICsxLDUgQEAKK0dpdCB2Mi4xNC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGlzIHRvIGZvcndhcmQtcG9ydCB0aGUgZml4ZXMgbWFkZSBpbiB0aGUgdjIuMTMuNyB2ZXJzaW9uCitvZiBHaXQuICBTZWUgaXRzIHJlbGVhc2Ugbm90ZXMgZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwNjQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC41LnR4dApAQCAtMCwwICsxLDE2IEBACitHaXQgdjIuMTQuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBpcyB0byBhZGRyZXNzIHRoZSByZWNlbnRseSByZXBvcnRlZCBDVkUtMjAxOC0xNzQ1Ni4KKworRml4ZXMgc2luY2UgdjIuMTQuNAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBTdWJtb2R1bGVzJyAiVVJMInMgY29tZSBmcm9tIHRoZSB1bnRydXN0ZWQgLmdpdG1vZHVsZXMgZmlsZSwgYnV0CisgICB3ZSBibGluZGx5IGdhdmUgaXQgdG8gImdpdCBjbG9uZSIgdG8gY2xvbmUgc3VibW9kdWxlcyB3aGVuICJnaXQKKyAgIGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIiB3YXMgdXNlZCB0byBjbG9uZSBhIHByb2plY3QgdGhhdCBoYXMKKyAgIHN1Y2ggYSBzdWJtb2R1bGUuICBUaGUgY29kZSBoYXMgYmVlbiBoYXJkZW5lZCB0byByZWplY3Qgc3VjaAorICAgbWFsZm9ybWVkIFVSTHMgKGUuZy4gb25lIHRoYXQgYmVnaW5zIHdpdGggYSBkYXNoKS4KKworQ3JlZGl0IGZvciBmaW5kaW5nIGFuZCBmaXhpbmcgdGhpcyB2dWxuZXJhYmlsaXR5IGdvZXMgdG8gam9lcm5jaGVuCithbmQgSmVmZiBLaW5nLCByZXNwZWN0aXZlbHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJiN2FmNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC42LnR4dApAQCAtMCwwICsxLDU0IEBACitHaXQgdjIuMTQuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBhZGRyZXNzZXMgdGhlIHNlY3VyaXR5IGlzc3VlcyBDVkUtMjAxOS0xMzQ4LAorQ1ZFLTIwMTktMTM0OSwgQ1ZFLTIwMTktMTM1MCwgQ1ZFLTIwMTktMTM1MSwgQ1ZFLTIwMTktMTM1MiwKK0NWRS0yMDE5LTEzNTMsIENWRS0yMDE5LTEzNTQsIGFuZCBDVkUtMjAxOS0xMzg3LgorCitGaXhlcyBzaW5jZSB2Mi4xNC41CistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIENWRS0yMDE5LTEzNDg6CisgICBUaGUgLS1leHBvcnQtbWFya3Mgb3B0aW9uIG9mIGdpdCBmYXN0LWltcG9ydCBpcyBleHBvc2VkIGFsc28gdmlhCisgICB0aGUgaW4tc3RyZWFtIGNvbW1hbmQgZmVhdHVyZSBleHBvcnQtbWFya3M9Li4uIGFuZCBpdCBhbGxvd3MKKyAgIG92ZXJ3cml0aW5nIGFyYml0cmFyeSBwYXRocy4KKworICogQ1ZFLTIwMTktMTM0OToKKyAgIFdoZW4gc3VibW9kdWxlcyBhcmUgY2xvbmVkIHJlY3Vyc2l2ZWx5LCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMKKyAgIEdpdCBjb3VsZCBiZSBmb29sZWQgaW50byB1c2luZyB0aGUgc2FtZSBHaXQgZGlyZWN0b3J5IHR3aWNlLiBXZSBub3cKKyAgIHJlcXVpcmUgdGhlIGRpcmVjdG9yeSB0byBiZSBlbXB0eS4KKworICogQ1ZFLTIwMTktMTM1MDoKKyAgIEluY29ycmVjdCBxdW90aW5nIG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgYWxsb3dlZCByZW1vdGUgY29kZQorICAgZXhlY3V0aW9uIGR1cmluZyBhIHJlY3Vyc2l2ZSBjbG9uZSBpbiBjb25qdW5jdGlvbiB3aXRoIFNTSCBVUkxzLgorCisgKiBDVkUtMjAxOS0xMzUxOgorICAgV2hpbGUgdGhlIG9ubHkgcGVybWl0dGVkIGRyaXZlIGxldHRlcnMgZm9yIHBoeXNpY2FsIGRyaXZlcyBvbgorICAgV2luZG93cyBhcmUgbGV0dGVycyBvZiB0aGUgVVMtRW5nbGlzaCBhbHBoYWJldCwgdGhpcyByZXN0cmljdGlvbgorICAgZG9lcyBub3QgYXBwbHkgdG8gdmlydHVhbCBkcml2ZXMgYXNzaWduZWQgdmlhIHN1YnN0IDxsZXR0ZXI+OgorICAgPHBhdGg+LiBHaXQgbWlzdG9vayBzdWNoIHBhdGhzIGZvciByZWxhdGl2ZSBwYXRocywgYWxsb3dpbmcgd3JpdGluZworICAgb3V0c2lkZSBvZiB0aGUgd29ya3RyZWUgd2hpbGUgY2xvbmluZy4KKworICogQ1ZFLTIwMTktMTM1MjoKKyAgIEdpdCB3YXMgdW5hd2FyZSBvZiBOVEZTIEFsdGVybmF0ZSBEYXRhIFN0cmVhbXMsIGFsbG93aW5nIGZpbGVzCisgICBpbnNpZGUgdGhlIC5naXQvIGRpcmVjdG9yeSB0byBiZSBvdmVyd3JpdHRlbiBkdXJpbmcgYSBjbG9uZS4KKworICogQ1ZFLTIwMTktMTM1MzoKKyAgIFdoZW4gcnVubmluZyBHaXQgaW4gdGhlIFdpbmRvd3MgU3Vic3lzdGVtIGZvciBMaW51eCAoYWxzbyBrbm93biBhcworICAgIldTTCIpIHdoaWxlIGFjY2Vzc2luZyBhIHdvcmtpbmcgZGlyZWN0b3J5IG9uIGEgcmVndWxhciBXaW5kb3dzCisgICBkcml2ZSwgbm9uZSBvZiB0aGUgTlRGUyBwcm90ZWN0aW9ucyB3ZXJlIGFjdGl2ZS4KKworICogQ1ZFLTIwMTktMTM1NDoKKyAgIEZpbGVuYW1lcyBvbiBMaW51eC9Vbml4IGNhbiBjb250YWluIGJhY2tzbGFzaGVzLiBPbiBXaW5kb3dzLAorICAgYmFja3NsYXNoZXMgYXJlIGRpcmVjdG9yeSBzZXBhcmF0b3JzLiBHaXQgZGlkIG5vdCB1c2UgdG8gcmVmdXNlIHRvCisgICB3cml0ZSBvdXQgdHJhY2tlZCBmaWxlcyB3aXRoIHN1Y2ggZmlsZW5hbWVzLgorCisgKiBDVkUtMjAxOS0xMzg3OgorICAgUmVjdXJzaXZlIGNsb25lcyBhcmUgY3VycmVudGx5IGFmZmVjdGVkIGJ5IGEgdnVsbmVyYWJpbGl0eSB0aGF0IGlzCisgICBjYXVzZWQgYnkgdG9vLWxheCB2YWxpZGF0aW9uIG9mIHN1Ym1vZHVsZSBuYW1lcywgYWxsb3dpbmcgdmVyeQorICAgdGFyZ2V0ZWQgYXR0YWNrcyB2aWEgcmVtb3RlIGNvZGUgZXhlY3V0aW9uIGluIHJlY3Vyc2l2ZSBjbG9uZXMuCisKK0NyZWRpdCBmb3IgZmluZGluZyB0aGVzZSB2dWxuZXJhYmlsaXRpZXMgZ29lcyB0byBNaWNyb3NvZnQgU2VjdXJpdHkKK1Jlc3BvbnNlIENlbnRlciwgaW4gcGFydGljdWxhciB0byBOaWNvbGFzIEpvbHkuIFRoZSBgZmFzdC1pbXBvcnRgCitmaXhlcyB3ZXJlIHByb3ZpZGVkIGJ5IEplZmYgS2luZywgdGhlIG90aGVyIGZpeGVzIGJ5IEpvaGFubmVzCitTY2hpbmRlbGluIHdpdGggaGVscCBmcm9tIEdhcmltYSBTaW5naC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGQ3NjFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE1LjAudHh0CkBAIC0wLDAgKzEsNTA4IEBACitHaXQgMi4xNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMgYW5kIG90aGVyIG5vdGFibGUgY2hhbmdlcy4KKworICogVXNlIG9mIGFuIGVtcHR5IHN0cmluZyBhcyBhIHBhdGhzcGVjIGVsZW1lbnQgdGhhdCBpcyB1c2VkIGZvcgorICAgJ2V2ZXJ5dGhpbmcgbWF0Y2hlcycgaXMgc3RpbGwgd2FybmVkIGFuZCBHaXQgYXNrcyB1c2VycyB0byB1c2UgYQorICAgbW9yZSBleHBsaWNpdCAnLicgZm9yIHRoYXQgaW5zdGVhZC4gIFRoZSBob3BlIGlzIHRoYXQgZXhpc3RpbmcKKyAgIHVzZXJzIHdpbGwgbm90IG1pbmQgdGhpcyBjaGFuZ2UsIGFuZCBldmVudHVhbGx5IHRoZSB3YXJuaW5nIGNhbiBiZQorICAgdHVybmVkIGludG8gYSBoYXJkIGVycm9yLCB1cGdyYWRpbmcgdGhlIGRlcHJlY2F0aW9uIGludG8gcmVtb3ZhbCBvZgorICAgdGhpcyAobWlzKWZlYXR1cmUuICBUaGF0IGlzIG5vdyBzY2hlZHVsZWQgdG8gaGFwcGVuIGluIEdpdCB2Mi4xNiwKKyAgIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UgYWZ0ZXIgdGhpcyBvbmUuCisKKyAqIEdpdCBub3cgYXZvaWRzIGJsaW5kbHkgZmFsbGluZyBiYWNrIHRvICIuZ2l0IiB3aGVuIHRoZSBzZXR1cAorICAgc2VxdWVuY2Ugc2FpZCB3ZSBhcmUgX25vdF8gaW4gR2l0IHJlcG9zaXRvcnkuICBBIGNvcm5lciBjYXNlIHRoYXQKKyAgIGhhcHBlbnMgdG8gd29yayByaWdodCBub3cgbWF5IGJlIGJyb2tlbiBieSBhIGNhbGwgdG8gQlVHKCkuCisgICBXZSd2ZSB0cmllZCBoYXJkIHRvIGxvY2F0ZSBzdWNoIGNhc2VzIGFuZCBmaXhlZCB0aGVtLCBidXQgdGhlcmUKKyAgIG1pZ2h0IHN0aWxsIGJlIGNhc2VzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQtLWJ1ZyByZXBvcnRzIGFyZQorICAgZ3JlYXRseSBhcHByZWNpYXRlZC4KKworICogImJyYW5jaCAtLXNldC11cHN0cmVhbSIgdGhhdCBoYXMgYmVlbiBkZXByZWNhdGVkIGluIEdpdCAxLjggaGFzCisgICBmaW5hbGx5IGJlZW4gcmV0aXJlZC4KKworCitVcGRhdGVzIHNpbmNlIHYyLjE0CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBBbiBleGFtcGxlIHRoYXQgaXMgbm93IG9ic29sZXRlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBhIHNhbXBsZSBob29rLAorICAgYW5kIGFuIG9sZCBleGFtcGxlIGluIGl0IHRoYXQgYWRkZWQgYSBzaWduLW9mZiBtYW51YWxseSBoYXMgYmVlbgorICAgaW1wcm92ZWQgdG8gdXNlIHRoZSBpbnRlcnByZXQtdHJhaWxlcnMgY29tbWFuZC4KKworICogVGhlIGFkdmljZSBtZXNzYWdlIGdpdmVuIHdoZW4gImdpdCByZWJhc2UiIHN0b3BzIGZvciBjb25mbGljdGluZworICAgY2hhbmdlcyBoYXMgYmVlbiBpbXByb3ZlZC4KKworICogVGhlICJyZXJlcmUtdHJhaW4iIHNjcmlwdCAoaW4gY29udHJpYi8pIGxlYXJuZWQgdGhlICItLW92ZXJ3cml0ZSIKKyAgIG9wdGlvbiB0byBhbGxvdyBvdmVyd3JpdGluZyBleGlzdGluZyByZWNvcmRlZCByZXNvbHV0aW9ucy4KKworICogImdpdCBjb250YWN0cyIgKGluIGNvbnRyaWIvKSBub3cgbGlzdHMgdGhlIGFkZHJlc3Mgb24gdGhlCisgICAiUmVwb3J0ZWQtYnk6IiB0cmFpbGVyIHRvIGl0cyBvdXRwdXQsIGluIGFkZGl0aW9uIHRvIHRob3NlIG9uCisgICBTLW8tYjogYW5kIG90aGVyIHRyYWlsZXJzLCB0byBtYWtlIGl0IGVhc2llciB0byBub3RpZnkgKGFuZCB0aGFuaykKKyAgIHRoZSBvcmlnaW5hbCBidWcgcmVwb3J0ZXIuCisKKyAqICJnaXQgcmViYXNlIiwgZXNwZWNpYWxseSB3aGVuIGl0IGlzIHJ1biBieSBtaXN0YWtlIGFuZCBlbmRzIHVwCisgICB0cnlpbmcgdG8gcmVwbGF5IG1hbnkgY2hhbmdlcywgc3BlbnQgbG9uZyB0aW1lIGluIHNpbGVuY2UuICBUaGUKKyAgIGNvbW1hbmQgaGFzIGJlZW4gdGF1Z2h0IHRvIHNob3cgcHJvZ3Jlc3MgcmVwb3J0IHdoZW4gaXQgc3BlbmRzCisgICBsb25nIHRpbWUgcHJlcGFyaW5nIHRoZXNlIG1hbnkgY2hhbmdlcyB0byByZXBsYXkgKHdoaWNoIHdvdWxkIGdpdmUKKyAgIHRoZSB1c2VyIGEgY2hhbmNlIHRvIGFib3J0IHdpdGggXkMpLgorCisgKiAiZ2l0IG1lcmdlIiBsZWFybmVkIGEgIi0tc2lnbm9mZiIgb3B0aW9uIHRvIGFkZCB0aGUgU2lnbmVkLW9mZi1ieToKKyAgIHRyYWlsZXIgd2l0aCB0aGUgY29tbWl0dGVyJ3MgbmFtZS4KKworICogImdpdCBkaWZmIiBsZWFybmVkIHRvIG9wdGlvbmFsbHkgcGFpbnQgbmV3IGxpbmVzIHRoYXQgYXJlIHRoZSBzYW1lCisgICBhcyBkZWxldGVkIGxpbmVzIGVsc2V3aGVyZSBkaWZmZXJlbnRseSBmcm9tIGdlbnVpbmVseSBuZXcgbGluZXMuCisKKyAqICJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIiBsZWFybmVkIHRvIHRha2UgdGhlIHRyYWlsZXIgc3BlY2lmaWNhdGlvbnMKKyAgIGZyb20gdGhlIGNvbW1hbmQgbGluZSB0aGF0IG92ZXJyaWRlcyB0aGUgY29uZmlndXJlZCB2YWx1ZXMuCisKKyAqICJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIiBoYXMgYmVlbiB0YXVnaHQgYSAiLS1wYXJzZSIgYW5kIGEgZmV3CisgICBvdGhlciBvcHRpb25zIHRvIG1ha2UgaXQgZWFzaWVyIGZvciBzY3JpcHRzIHRvIGdyYWIgZXhpc3RpbmcKKyAgIHRyYWlsZXIgbGluZXMgZnJvbSBhIGNvbW1pdCBsb2cgbWVzc2FnZS4KKworICogVGhlICItLWZvcm1hdD0lKHRyYWlsZXJzKSIgb3B0aW9uICJnaXQgbG9nIiBhbmQgaXRzIGZyaWVuZHMgdGFrZQorICAgbGVhcm5lZCB0byB0YWtlIHRoZSAndW5mb2xkJyBhbmQgJ29ubHknIG1vZGlmaWVycyB0byBub3JtYWxpemUgaXRzCisgICBvdXRwdXQsIGUuZy4gImdpdCBsb2cgLS1mb3JtYXQ9JSh0cmFpbGVyczpvbmx5LHVuZm9sZCkiLgorCisgKiAiZ2l0d2ViIiBzaG93cyBhIGxpbmsgdG8gdmlzaXQgdGhlICdyYXcnIGNvbnRlbnRzIG9mIGJsb2JzIGluIHRoZQorICAgaGlzdG9yeSBvdmVydmlldyBwYWdlLgorCisgKiAiW2djXSByZXJlcmVSZXNvbHZlZCA9IDUuZGF5cyIgdXNlZCB0byBiZSBpbnZhbGlkLCBhcyB0aGUgdmFyaWFibGUKKyAgIGlzIGRlZmluZWQgdG8gdGFrZSBhbiBpbnRlZ2VyIGNvdW50aW5nIHRoZSBudW1iZXIgb2YgZGF5cy4gIEl0IG5vdworICAgaXMgYWxsb3dlZC4KKworICogVGhlIGNvZGUgdG8gYWNxdWlyZSBhIGxvY2sgb24gYSByZWZlcmVuY2UgKGUuZy4gd2hpbGUgYWNjZXB0aW5nIGEKKyAgIHB1c2ggZnJvbSBhIGNsaWVudCkgdXNlZCB0byBpbW1lZGlhdGVseSBmYWlsIHdoZW4gdGhlIHJlZmVyZW5jZSBpcworICAgYWxyZWFkeSBsb2NrZWQtLS1ub3cgaXQgd2FpdHMgZm9yIGEgdmVyeSBzaG9ydCB3aGlsZSBhbmQgcmV0cmllcywKKyAgIHdoaWNoIGNhbiBtYWtlIGl0IHN1Y2NlZWQgaWYgdGhlIGxvY2sgaG9sZGVyIHdhcyBob2xkaW5nIGl0IGR1cmluZworICAgYSByZWFkLW9ubHkgb3BlcmF0aW9uLgorCisgKiAiYnJhbmNoIC0tc2V0LXVwc3RyZWFtIiB0aGF0IGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gR2l0IDEuOCBoYXMKKyAgIGZpbmFsbHkgYmVlbiByZXRpcmVkLgorCisgKiBUaGUgY29kZXBhdGggdG8gY2FsbCBleHRlcm5hbCBwcm9jZXNzIGZpbHRlciBmb3Igc211ZGdlL2NsZWFuCisgICBvcGVyYXRpb24gbGVhcm5lZCB0byBzaG93IHRoZSBwcm9ncmVzcyBtZXRlci4KKworICogImdpdCByZXYtcGFyc2UiIGxlYXJuZWQgIi0taXMtc2hhbGxvdy1yZXBvc2l0b3J5IiwgdGhhdCBpcyB0byBiZQorICAgdXNlZCBpbiBhIHdheSBzaW1pbGFyIHRvIGV4aXN0aW5nICItLWlzLWJhcmUtcmVwb3NpdG9yeSIgYW5kCisgICBmcmllbmRzLgorCisgKiAiZ2l0IGRlc2NyaWJlIC0tbWF0Y2ggPHBhdHRlcm4+IiBoYXMgYmVlbiB0YXVnaHQgdG8gcGxheSB3ZWxsIHdpdGgKKyAgIHRoZSAiLS1hbGwiIG9wdGlvbi4KKworICogImdpdCBicmFuY2giIGxlYXJuZWQgIi1jLy1DIiB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIGJ5IGNvcHlpbmcgYW4KKyAgIGV4aXN0aW5nIG9uZS4KKworICogU29tZSBjb21tYW5kcyAobW9zdCBub3RhYmx5ICJnaXQgc3RhdHVzIikgbWFrZXMgYW4gb3Bwb3J0dW5pc3RpYworICAgdXBkYXRlIHdoZW4gcGVyZm9ybWluZyBhIHJlYWQtb25seSBvcGVyYXRpb24gdG8gaGVscCBvcHRpbWl6ZSBsYXRlcgorICAgb3BlcmF0aW9ucyBpbiB0aGUgc2FtZSByZXBvc2l0b3J5LiAgVGhlIG5ldyAiLS1uby1vcHRpb25hbC1sb2NrcyIKKyAgIG9wdGlvbiBjYW4gYmUgcGFzc2VkIHRvIEdpdCB0byBkaXNhYmxlIHRoZW0uCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PS4uLiIgbGVhcm5lZCBhIG5ldyBmb3JtYXQgZWxlbWVudCwKKyAgICUodHJhaWxlcnMpLCB0byBzaG93IG9ubHkgdGhlIGNvbW1pdCBsb2cgdHJhaWxlciBwYXJ0IG9mIHRoZSBsb2cKKyAgIG1lc3NhZ2UuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogQ29udmVyc2lvbiBmcm9tIHVjaGFyWzIwXSB0byBzdHJ1Y3Qgb2JqZWN0X2lkIGNvbnRpbnVlcy4KKworICogU3RhcnQgdXNpbmcgc2VsZWN0ZWQgYzk5IGNvbnN0cnVjdHMgaW4gc21hbGwsIHN0YWJsZSBhbmQKKyAgIGVzc2VudGlhbCBwYXJ0IG9mIHRoZSBzeXN0ZW0gdG8gY2F0Y2ggcGVvcGxlIHdobyBjYXJlIGFib3V0CisgICBvbGRlciBjb21waWxlcnMgdGhhdCBkbyBub3QgZ3JvayB0aGVtLgorCisgKiBUaGUgZmlsdGVyLXByb2Nlc3MgaW50ZXJmYWNlIGxlYXJuZWQgdG8gYWxsb3cgYSBwcm9jZXNzIHdpdGggbG9uZworICAgbGF0ZW5jeSBnaXZlIGEgImRlbGF5ZWQiIHJlc3BvbnNlLgorCisgKiBNYW55IHVzZXMgb2YgY29tcGFyaXNvbiBjYWxsYmFjayBmdW5jdGlvbiB0aGUgaGFzaG1hcCBBUEkgdXNlcworICAgY2FzdCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdHlwZSB3aGVuIHJlZ2lzdGVyaW5nIGl0IHRvCisgICBoYXNobWFwX2luaXQoKSwgd2hpY2ggZGVmZWF0cyB0aGUgY29tcGlsZSB0aW1lIHR5cGUgY2hlY2tpbmcgd2hlbgorICAgdGhlIGNhbGxiYWNrIGludGVyZmFjZSBjaGFuZ2VzIChlLmcuIGdhaW5pbmcgbW9yZSBwYXJhbWV0ZXJzKS4KKyAgIFRoZSBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbnMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdGFrZSAidm9pZCAqIgorICAgcG9pbnRlcnMgYW5kIGNhc3QgdGhlbSB0byB0aGUgdHlwZSB0aGV5IGV4cGVjdCBpbnN0ZWFkLgorCisgKiBCZWNhdXNlIHJlY2VudCBHaXQgZm9yIFdpbmRvd3MgZG8gY29tZSB3aXRoIGEgcmVhbCBtc2dmbXQsIHRoZQorICAgYnVpbGQgcHJvY2VkdXJlIGZvciBnaXQtZ3VpIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIGl0IGluc3RlYWQgb2YgYQorICAgaGFuZC1yb2xsZWQgc3Vic3RpdHV0ZS4KKworICogImdpdCBncmVwIC0tcmVjdXJzZS1zdWJtb2R1bGVzIiBoYXMgYmVlbiByZXdvcmtlZCB0byBnaXZlIGEgbW9yZQorICAgY29uc2lzdGVudCBvdXRwdXQgYWNyb3NzIHN1Ym1vZHVsZSBib3VuZGFyeSAoYW5kIGRvIGl0cyB0aGluZworICAgd2l0aG91dCBoYXZpbmcgdG8gZm9yayBhIHNlcGFyYXRlIHByb2Nlc3MpLgorCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0byByZWFkIGEgc2luZ2xlIHdob2xlIGxpbmUgaW50byBzdHJidWYKKyAgIG1pc3Rha2VubHkgdHJpZ2dlcmVkIE9PTSBlcnJvciBhdCBFT0YgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLAorICAgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIFRoZSAicmVmLXN0b3JlIiBjb2RlIHJlb3JnYW5pemF0aW9uIGNvbnRpbnVlcy4KKworICogImdpdCBjb21taXQiIHVzZWQgdG8gZGlzY2FyZCB0aGUgaW5kZXggYW5kIHJlLXJlYWQgZnJvbSB0aGUgZmlsZXN5c3RlbQorICAganVzdCBpbiBjYXNlIHRoZSBwcmUtY29tbWl0IGhvb2sgaGFzIHVwZGF0ZWQgaXQgaW4gdGhlIG1pZGRsZTsgdGhpcworICAgaGFzIGJlZW4gb3B0aW1pemVkIG91dCB3aGVuIHdlIGtub3cgd2UgZG8gbm90IHJ1biB0aGUgcHJlLWNvbW1pdCBob29rLgorICAgKG1lcmdlIDY4MGVlNTUwZDcga3cvY29tbWl0LWtlZXAtaW5kZXgtd2hlbi1wcmUtY29tbWl0LWlzLW5vdC1ydW4gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBVcGRhdGVzIHRvIHRoZSBIVFRQIGxheWVyIHdlIG1hZGUgcmVjZW50bHkgdW5jb25kaXRpb25hbGx5IHVzZWQKKyAgIGZlYXR1cmVzIG9mIGxpYkN1cmwgd2l0aG91dCBjaGVja2luZyB0aGUgZXhpc3RlbmNlIG9mIHRoZW0sIGNhdXNpbmcKKyAgIGNvbXBpbGF0aW9uIGVycm9ycywgd2hpY2ggaGFzIGJlZW4gZml4ZWQuICBBbHNvIG1pZ3JhdGUgdGhlIGNvZGUgdG8KKyAgIGNoZWNrIGZlYXR1cmUgbWFjcm9zLCBub3QgdmVyc2lvbiBudW1iZXJzLCB0byBjb3BlIGJldHRlciB3aXRoCisgICBsaWJDdXJsIHRoYXQgdmVuZG9yIHNoaXBzIHdpdGggYmFja3BvcnRlZCBmZWF0dXJlcy4KKworICogVGhlIEFQSSB0byBzdGFydCBzaG93aW5nIHByb2dyZXNzIG1ldGVyIGFmdGVyIGEgc2hvcnQgZGVsYXkgaGFzCisgICBiZWVuIHNpbXBsaWZpZWQuCisgICAobWVyZ2UgOGFhZGUxMDdkZCBqYy9zaW1wbGlmeS1wcm9ncmVzcyBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgY2xlYW4tdXAgdG8gYXZvaWQgbWl4aW5nIHZhbHVlcyByZWFkIGZyb20gdGhlIC5naXRtb2R1bGVzIGZpbGUKKyAgIGFuZCB2YWx1ZXMgcmVhZCBmcm9tIHRoZSAuZ2l0L2NvbmZpZyBmaWxlLgorCisgKiBXZSB1c2VkIHRvIHNwZW5kIG1vcmUgdGhhbiBuZWNlc3NhcnkgY3ljbGVzIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcKKyAgIHBpZWNlIG9mIG1lbW9yeSB3aGlsZSB3cml0aW5nIGVhY2ggaW5kZXggZW50cnkgb3V0LiAgVGhpcyBoYXMgYmVlbgorICAgb3B0aW1pemVkLgorCisgKiBQbGF0Zm9ybXMgdGhhdCBzaGlwIHdpdGggYSBzZXBhcmF0ZSBzaGExIHdpdGggY29sbGlzaW9uIGRldGVjdGlvbgorICAgbGlicmFyeSBjYW4gbGluayB0byBpdCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBjb3B5IHdlIHNoaXAgYXMgcGFydCBvZgorICAgb3VyIHNvdXJjZSB0cmVlLgorCisgKiBDb2RlIGFyb3VuZCAibm90ZXMiIGhhdmUgYmVlbiBjbGVhbmVkIHVwLgorICAgKG1lcmdlIDM5NjQyODE1MjQgbWgvbm90ZXMtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBsb25nLXN0YW5kaW5nIHJ1bGUgdGhhdCBhbiBpbi1jb3JlIGxvY2tmaWxlIGluc3RhbmNlLCBvbmNlIGl0CisgICBpcyB1c2VkLCBtdXN0IG5vdCBiZSBmcmVlZCwgaGFzIGJlZW4gbGlmdGVkIGFuZCB0aGUgbG9ja2ZpbGUgYW5kCisgICB0ZW1wZmlsZSBBUElzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIHByb2dyYW1taW5nCisgICBlcnJvcnMuCisKKyAqIE91ciBoYXNobWFwIGltcGxlbWVudGF0aW9uIGluIGhhc2htYXAuW2NoXSBpcyBub3QgdGhyZWFkLXNhZmUgd2hlbgorICAgYWRkaW5nIGEgbmV3IGl0ZW0gbmVlZHMgdG8gZXhwYW5kIHRoZSBoYXNodGFibGUgYnkgcmVoYXNoaW5nOyBhZGQKKyAgIGFuIEFQSSB0byBkaXNhYmxlIHRoZSBhdXRvbWF0aWMgcmVoYXNoaW5nIHRvIHdvcmsgaXQgYXJvdW5kLgorCisgKiBNYW55IG9mIG91ciBwcm9ncmFtcyBjb25zaWRlciB0aGF0IGl0IGlzIE9LIHRvIHJlbGVhc2UgZHluYW1pYworICAgc3RvcmFnZSB0aGF0IGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgbGlmZSBvZiB0aGUgcHJvZ3JhbSBieSBzaW1wbHkKKyAgIGV4aXRpbmcsIGJ1dCB0aGlzIG1ha2VzIGl0IGhhcmRlciB0byBsZWFrIGRldGVjdGlvbiB0b29scyB0byBhdm9pZAorICAgcmVwb3J0aW5nIGZhbHNlIHBvc2l0aXZlcy4gIFBsdWcgbWFueSBleGlzdGluZyBsZWFrcyBhbmQgaW50cm9kdWNlCisgICBhIG1lY2hhbmlzbSBmb3IgZGV2ZWxvcGVycyB0byBtYXJrIHRoYXQgdGhlIHJlZ2lvbiBvZiBtZW1vcnkKKyAgIHBvaW50ZWQgYnkgYSBwb2ludGVyIGlzIG5vdCBsb3N0L2xlYWtpbmcgdG8gaGVscCB0aGVzZSB0b29scy4KKworICogQXMgImdpdCBjb21taXQiIHRvIGNvbmNsdWRlIGEgY29uZmxpY3RlZCAiZ2l0IG1lcmdlIiBob25vcnMgdGhlCisgICBjb21taXQtbXNnIGhvb2ssICJnaXQgbWVyZ2UiIHRoYXQgcmVjb3JkcyBhIG1lcmdlIGNvbW1pdCB0aGF0CisgICBjbGVhbmx5IGF1dG8tbWVyZ2VzIHNob3VsZCwgYnV0IGl0IGRpZG4ndC4KKworICogVGhlIGNvZGVwYXRoIGZvciAiZ2l0IG1lcmdlLXJlY3Vyc2l2ZSIgaGFzIGJlZW4gY2xlYW5lZCB1cC4KKworICogTWFueSBsZWFrcyBvZiBzdHJidWYgaGF2ZSBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgaGFzIG91ciBvd24gaW1wbGVtZW50YXRpb24gb2YgdGhlIHByb3RvY29sIGFuZCBhbHNvCisgICBjYW4gdXNlIG1vcmUgcmVjZW50IGxpYkN1cmwgd2l0aCB0aGUgaW1hcCBwcm90b2NvbCBzdXBwb3J0LiAgVXBkYXRlCisgICB0aGUgbGF0dGVyIHNvIHRoYXQgaXQgY2FuIHVzZSB0aGUgY3JlZGVudGlhbCBzdWJzeXN0ZW0sIGFuZCB0aGVuCisgICBtYWtlIGl0IHRoZSBkZWZhdWx0IG9wdGlvbiB0byB1c2UsIHNvIHRoYXQgd2UgY2FuIGV2ZW50dWFsbHkKKyAgIGRlcHJlY2F0ZSBhbmQgcmVtb3ZlIHRoZSBmb3JtZXIuCisKKyAqICJtYWtlIHN0eWxlIiBydW5zIGdpdC1jbGFuZy1mb3JtYXQgdG8gaGVscCBkZXZlbG9wZXJzIGJ5IHBvaW50aW5nCisgICBvdXQgY29kaW5nIHN0eWxlIGlzc3Vlcy4KKworICogQSB0ZXN0IHRvIGRlbW9uc3RyYXRlICJnaXQgbXYiIGZhaWxpbmcgdG8gYWRqdXN0IG5lc3RlZCBzdWJtb2R1bGVzCisgICBoYXMgYmVlbiBhZGRlZC4KKyAgIChtZXJnZSBjNTE0MTY3ZGYyIGh2L212LW5lc3RlZC1zdWJtb2R1bGVzLXRlc3QgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPbiBDeWd3aW4sICJ1bGltaXQgLXMiIGRvZXMgbm90IHJlcG9ydCBmYWlsdXJlIGJ1dCBpdCBkb2VzIG5vdCB3b3JrCisgICBhdCBhbGwsIHdoaWNoIGNhdXNlcyBhbiB1bmV4cGVjdGVkIHN1Y2Nlc3Mgb2Ygc29tZSB0ZXN0cyB0aGF0CisgICBleHBlY3QgZmFpbHVyZXMgdW5kZXIgYSBsaW1pdGVkIHN0YWNrIHNpdHVhdGlvbi4gIFRoaXMgaGFzIGJlZW4KKyAgIGZpeGVkLgorCisgKiBNYW55IGNvZGVwYXRocyBoYXZlIGJlZW4gdXBkYXRlZCB0byBzcXVlbGNoIC1XaW1wbGljaXQtZmFsbHRocm91Z2gKKyAgIHdhcm5pbmdzIGZyb20gR2NjIDcgKHdoaWNoIGlzIGEgZ29vZCBjb2RlIGh5Z2llbmUpLgorCisgKiBBZGQgYSBoZWxwZXIgZm9yIERMTCBsb2FkaW5nIGluIGFudGljaXBhdGlvbiBmb3IgaXRzIG5lZWQgaW4gYQorICAgZnV0dXJlIHRvcGljIFJTTi4KKworICogImdpdCBzdGF0dXMgLS1pZ25vcmVkIiwgd2hlbiBub3RpY2luZyB0aGF0IGEgZGlyZWN0b3J5IHdpdGhvdXQgYW55CisgICB0cmFja2VkIHBhdGggaXMgaWdub3JlZCwgc3RpbGwgZW51bWVyYXRlZCBhbGwgdGhlIGlnbm9yZWQgcGF0aHMgaW4KKyAgIHRoZSBkaXJlY3RvcnksIHdoaWNoIGlzIHVubmVjZXNzYXJ5LiAgVGhlIGNvZGVwYXRoIGhhcyBiZWVuCisgICBvcHRpbWl6ZWQgdG8gYXZvaWQgdGhpcyBvdmVyaGVhZC4KKworICogVGhlIGZpbmFsIGJhdGNoIHRvICJnaXQgcmViYXNlIC1pIiB1cGRhdGVzIHRvIG1vdmUgbW9yZSBjb2RlIGZyb20KKyAgIHRoZSBzaGVsbCBzY3JpcHQgdG8gQyBoYXMgYmVlbiBtZXJnZWQuCisKKyAqIE9wZXJhdGlvbnMgdGhhdCBkbyBub3QgdG91Y2ggKG1ham9yaXR5IG9mKSBwYWNrZWQgcmVmcyBoYXZlIGJlZW4KKyAgIG9wdGltaXplZCBieSBtYWtpbmcgYWNjZXNzZXMgdG8gcGFja2VkLXJlZnMgZmlsZSBsYXp5OyB3ZSBubyBsb25nZXIKKyAgIHByZS1wYXJzZSBldmVyeXRoaW5nLCBhbmQgYW4gYWNjZXNzIHRvIGEgc2luZ2xlIHJlZiBpbiB0aGUKKyAgIHBhY2tlZC1yZWZzIGRvZXMgbm90IHRvdWNoIG1ham9yaXR5IG9mIGlycmVsZXZhbnQgcmVmcywgZWl0aGVyLgorCisgKiBBZGQgY29tbWVudCB0byBjbGFyaWZ5IHRoYXQgdGhlIHN0eWxlIGZpbGUgaXMgbWVhbnQgdG8gYmUgdXNlZCB3aXRoCisgICBjbGFuZy01IGFuZCB0aGUgcnVsZXMgYXJlIHN0aWxsIHdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAqIE1hbnkgdmFyaWFibGVzIHRoYXQgcG9pbnRzIGF0IGEgcmVnaW9uIG9mIG1lbW9yeSB0aGF0IHdpbGwgbGl2ZQorICAgdGhyb3VnaG91dCB0aGUgbGlmZSBvZiB0aGUgcHJvZ3JhbSBoYXZlIGJlZW4gbWFya2VkIHdpdGggVU5MRUFLCisgICBtYXJrZXIgdG8gaGVscCB0aGUgbGVhayBjaGVja2VycyBjb25jZW50cmF0ZSBvbiByZWFsIGxlYWtzLi4KKworICogUGxhbnMgZm9yIHdlYW5pbmcgdXMgb2ZmIG9mIFNIQS0xIGhhcyBiZWVuIGRvY3VtZW50ZWQuCisKKyAqIEEgbmV3ICJvaWRtYXAiIEFQSSBoYXMgYmVlbiBpbnRyb2R1Y2VkIGFuZCBvaWRzZXQgQVBJIGhhcyBiZWVuCisgICByZXdyaXR0ZW4gdG8gdXNlIGl0LgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYyLjE0CistLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiJUMoY29sb3IgbmFtZSkiIGluIHRoZSBwcmV0dHkgcHJpbnQgZm9ybWF0IGFsd2F5cyBwcm9kdWNlZCBBTlNJCisgICBjb2xvciBlc2NhcGUgY29kZXMsIHdoaWNoIHdhcyBhbiBlYXJseSBkZXNpZ24gbWlzdGFrZS4gIFRoZXkgbm93CisgICBob25vciB0aGUgY29uZmlndXJhdGlvbiAoZS5nLiAiY29sb3IudWkgPSBuZXZlciIpIGFuZCBhbHNvIHR0eS1uZXNzCisgICBvZiB0aGUgb3V0cHV0IG1lZGl1bS4KKworICogVGhlIGh0dHAue3NzbGtleSxzc2xDZXJ0fSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhcmUgdG8gYmUKKyAgIGludGVycHJldGVkIGFzIGEgcGF0aG5hbWUgdGhhdCBob25vcnMgIn5bdXNlcm5hbWVdLyIgcHJlZml4LCBidXQKKyAgIHdlcmVuJ3QsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBOdW1lcm91cyBidWdzIGluIHdhbGtpbmcgb2YgcmVmbG9ncyB2aWEgImxvZyAtZyIgYW5kIGZyaWVuZHMgaGF2ZQorICAgYmVlbiBmaXhlZC4KKworICogImdpdCBjb21taXQiIHdoZW4gc2VlaW5nIGFuIHRvdGFsbHkgZW1wdHkgbWVzc2FnZSBzYWlkICJ5b3UgZGlkIG5vdAorICAgZWRpdCB0aGUgbWVzc2FnZSIsIHdoaWNoIGlzIGNsZWFybHkgd3JvbmcuICBUaGUgbWVzc2FnZSBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBXaGVuIGEgZGlyZWN0b3J5IGlzIG5vdCByZWFkYWJsZSwgImdpdHdlYiIgZmFpbHMgdG8gYnVpbGQgdGhlCisgICBwcm9qZWN0IGxpc3QuICBXb3JrIHRoaXMgYXJvdW5kIGJ5IHNraXBwaW5nIHN1Y2ggYSBkaXJlY3RvcnkuCisKKyAqIFNvbWUgdmVyc2lvbnMgb2YgR251UEcgZmFpbHMgdG8ga2lsbCBncGctYWdlbnQgaXQgYXV0by1zcGF3bmVkCisgICBhbmQgc3VjaCBhIGxlZnQtb3ZlciBhZ2VudCBjYW4gaW50ZXJmZXJlIHdpdGggYSB0ZXN0LiAgV29yayBpdAorICAgYXJvdW5kIGJ5IGF0dGVtcHRpbmcgdG8ga2lsbCBvbmUgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IHRlc3QuCisKKyAqIEEgcmVjZW50bHkgYWRkZWQgdGVzdCBmb3IgdGhlICJjcmVkZW50aWFsLWNhY2hlIiBoZWxwZXIgcmV2ZWFsZWQKKyAgIHRoYXQgRU9GIGRldGVjdGlvbiBkb25lIGFyb3VuZCB0aGUgdGltZSB0aGUgY29ubmVjdGlvbiB0byB0aGUgY2FjaGUKKyAgIGRhZW1vbiBpcyB0b3JuIGRvd24gd2VyZSBmbGFreS4gIFRoaXMgd2FzIGZpeGVkIGJ5IHJlYWN0aW5nIHRvCisgICBFQ09OTlJFU0VUIGFuZCBiZWhhdmluZyBhcyBpZiB3ZSBnb3QgYW4gRU9GLgorCisgKiAiZ2l0IGxvZyAtLXRhZz1uby1zdWNoLXRhZyIgc2hvd2VkIGxvZyBzdGFydGluZyBmcm9tIEhFQUQsIHdoaWNoCisgICBoYXMgYmVlbiBmaXhlZC0tLWl0IG5vdyBzaG93cyBub3RoaW5nLgorCisgKiBUaGUgInRhZy5wYWdlciIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB3YXMgdXNlbGVzcyBmb3IgdGhvc2Ugd2hvCisgICBhY3R1YWxseSBjcmVhdGUgdGFnIG9iamVjdHMsIGFzIGl0IGludGVyZmVyZWQgd2l0aCB0aGUgdXNlIG9mIGFuCisgICBlZGl0b3IuICBBIG5ldyBtZWNoYW5pc20gaGFzIGJlZW4gaW50cm9kdWNlZCBmb3IgY29tbWFuZHMgdG8gZW5hYmxlCisgICBwYWdlciBkZXBlbmRpbmcgb24gd2hhdCBvcGVyYXRpb24gaXMgYmVpbmcgY2FycmllZCBvdXQgdG8gZml4IHRoaXMsCisgICBhbmQgdGhlbiAiZ2l0IHRhZyAtbCIgaXMgbWFkZSB0byBydW4gcGFnZXIgYnkgZGVmYXVsdC4KKworICogImdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzICR0aGVyZSBIRUFEOiR0YXJnZXQiIHdhcyBub3QKKyAgIHByb3BhZ2F0ZWQgZG93biB0byB0aGUgc3VibW9kdWxlcywgYnV0IG5vdyBpdCBpcy4KKworICogQ29tbWFuZHMgbGlrZSAiZ2l0IHJlYmFzZSIgYWNjZXB0ZWQgdGhlIC0tcmVyZXJlLWF1dG91cGRhdGUgb3B0aW9uCisgICBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGJ1dCBkaWQgbm90IGFsd2F5cyB1c2UgaXQuICBUaGlzIGhhcyBiZWVuCisgICBmaXhlZC4KKworICogImdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLXF1aWV0IiBkaWQgbm90IHBhc3MgdGhlIHF1aWV0CisgICBvcHRpb24gZG93biB0byBzdWJtb2R1bGVzLgorCisgKiBUZXN0IHBvcnRhYmlsaXR5IGZpeCBmb3IgT0JTRC4KKworICogUG9ydGFiaWxpdHkgZml4IGZvciBPQlNELgorCisgKiAiZ2l0IGFtIC1zIiBoYXMgYmVlbiB0YXVnaHQgdGhhdCBzb21lIGlucHV0IG1heSBlbmQgd2l0aCBhIHRyYWlsZXIKKyAgIGJsb2NrIHRoYXQgaXMgbm90IFNpZ25lZC1vZmYtYnk6IGFuZCBpdCBzaG91bGQgcmVmcmFpbiBmcm9tIGFkZGluZworICAgYW4gZXh0cmEgYmxhbmsgbGluZSBiZWZvcmUgYWRkaW5nIGEgbmV3IHNpZ24tb2ZmIGluIHN1Y2ggYSBjYXNlLgorCisgKiAiZ2l0IHN2biIgdXNlZCB3aXRoICItLWxvY2FsdGltZSIgb3B0aW9uIGRpZCBub3QgY29tcHV0ZSB0aGUgdHoKKyAgIG9mZnNldCBmb3IgdGhlIHRpbWVzdGFtcCBpbiBxdWVzdGlvbiBhbmQgaW5zdGVhZCBhbHdheXMgdXNlZCB0aGUKKyAgIGN1cnJlbnQgdGltZSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBNZW1vcnkgbGVhayBpbiBhbiBlcnJvciBjb2RlcGF0aCBoYXMgYmVlbiBwbHVnZ2VkLgorCisgKiAiZ2l0IHN0YXNoIC11IiB1c2VkIHRoZSBjb250ZW50cyBvZiB0aGUgY29tbWl0dGVkIHZlcnNpb24gb2YgdGhlCisgICAiLmdpdGlnbm9yZSIgZmlsZSB0byBkZWNpZGUgd2hpY2ggcGF0aHMgYXJlIGlnbm9yZWQsIGV2ZW4gd2hlbiB0aGUKKyAgIGZpbGUgaGFzIGxvY2FsIGNoYW5nZXMuICBUaGUgY29tbWFuZCBoYXMgYmVlbiB0YXVnaHQgdG8gaW5zdGVhZCB1c2UKKyAgIHRoZSBsb2NhbGx5IG1vZGlmaWVkIGNvbnRlbnRzLgorCisgKiBiYXNoIDQuNCBvciBuZXdlciBnYXZlIGEgd2FybmluZyBvbiBOVUwgYnl0ZSBpbiBjb21tYW5kCisgICBzdWJzdGl0dXRpb24gZG9uZSBpbiAiZ2l0IHN0YXNoIjsgdGhpcyBoYXMgYmVlbiBzcXVlbGNoZWQuCisKKyAqICJnaXQgZ3JlcCAtTCIgYW5kICJnaXQgZ3JlcCAtLXF1aWV0IC1MIiByZXBvcnRlZCBkaWZmZXJlbnQgZXhpdAorICAgY29kZXM7IHRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBXaGVuIGhhbmRzaGFrZSB3aXRoIGEgc3VicHJvY2VzcyBmaWx0ZXIgbm90aWNlcyB0aGF0IHRoZSBwcm9jZXNzCisgICBhc2tlZCBmb3IgYW4gdW5rbm93biBjYXBhYmlsaXR5LCBHaXQgZGlkIG5vdCByZXBvcnQgd2hhdCBwcm9ncmFtCisgICB0aGUgb2ZmZW5kaW5nIHN1YnByb2Nlc3Mgd2FzIHJ1bm5pbmcuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBhcHBseSIgdGhhdCBpcyB1c2VkIGFzIGEgYmV0dGVyICJwYXRjaCAtcDEiIGZhaWxlZCB0byBhcHBseSBhCisgICB0YWtlbiBmcm9tIGEgZmlsZSB3aXRoIENSTEYgbGluZSBlbmRpbmdzIHRvIGEgZmlsZSB3aXRoIENSTEYgbGluZQorICAgZW5kaW5ncy4gIFRoZSByb290IGNhdXNlIHdhcyBiZWNhdXNlIGl0IG1pc3VzZWQgY29udmVydF90b19naXQoKQorICAgdGhhdCB0cmllZCB0byBkbyAic2FmZS1jcmxmIiBwcm9jZXNzaW5nIGJ5IGxvb2tpbmcgYXQgdGhlIGluZGV4CisgICBlbnRyeSBhdCB0aGUgc2FtZSBwYXRoLCB3aGljaCBpcyBhIG5vbnNlbnNlLS0taW4gdGhhdCBtb2RlLCAiYXBwbHkiCisgICBpcyBub3Qgd29ya2luZyBvbiB0aGUgZGF0YSBpbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgaW5kZXggYXQgYWxsLgorICAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogS2lsbGluZyAiZ2l0IG1lcmdlIC0tZWRpdCIgYmVmb3JlIHRoZSBlZGl0b3IgcmV0dXJucyBjb250cm9sIGxlZnQKKyAgIHRoZSByZXBvc2l0b3J5IGluIGEgc3RhdGUgd2l0aCBNRVJHRV9NU0cgYnV0IHdpdGhvdXQgTUVSR0VfSEVBRCwKKyAgIHdoaWNoIGluY29ycmVjdGx5IHRlbGxzIHRoZSBzdWJzZXF1ZW50ICJnaXQgY29tbWl0IiB0aGF0IHRoZXJlIHdhcworICAgYSBzcXVhc2ggbWVyZ2UgaW4gcHJvZ3Jlc3MuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGFyY2hpdmUiIGRpZCBub3Qgd29yayB3ZWxsIHdpdGggcGF0aHNwZWNzIGFuZCB0aGUKKyAgIGV4cG9ydC1pZ25vcmUgYXR0cmlidXRlLgorCisgKiBJbiBhZGRpdGlvbiB0byAiY2M6IDxhQGRkLnJlLnNzPiAjIGNydWZ0IiwgImNjOiBhQGRkLnJlLnNzICMgY3J1ZnQiCisgICB3YXMgdGF1Z2h0IHRvICJnaXQgc2VuZC1lbWFpbCIgYXMgYSB2YWxpZCB3YXkgdG8gdGVsbCBpdCB0aGF0IGl0CisgICBuZWVkcyB0byBhbHNvIHNlbmQgYSBjYXJib24gY29weSB0byA8YUBkZC5yZS5zcz4gaW4gdGhlIHRyYWlsZXIKKyAgIHNlY3Rpb24uCisKKyAqICJnaXQgYnJhbmNoIC1NIGEgYiIgd2hpbGUgb24gYSBicmFuY2ggdGhhdCBpcyBjb21wbGV0ZWx5IHVucmVsYXRlZAorICAgdG8gZWl0aGVyIGJyYW5jaCBhIG9yIGJyYW5jaCBiIG1pc2JlaGF2ZWQgd2hlbiBtdWx0aXBsZSB3b3JrdHJlZQorICAgd2FzIGluIHVzZS4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgMzE4MjRkMTgwZCBuZC93b3JrdHJlZS1raWxsLXBhcnNlLXJlZiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZ2MiIGFuZCBmcmllbmRzIHdoZW4gbXVsdGlwbGUgd29ya3RyZWVzIGFyZSB1c2VkIG9mZiBvZiBhCisgICBzaW5nbGUgcmVwb3NpdG9yeSBkaWQgbm90IGNvbnNpZGVyIHRoZSBpbmRleCBhbmQgcGVyLXdvcmt0cmVlIHJlZnMKKyAgIG9mIG90aGVyIHdvcmt0cmVlcyBhcyB0aGUgcm9vdCBmb3IgcmVhY2hhYmlsaXR5IHRyYXZlcnNhbCwgbWFraW5nCisgICBvYmplY3RzIHRoYXQgYXJlIGluIHVzZSBvbmx5IGluIG90aGVyIHdvcmt0cmVlcyB0byBiZSBzdWJqZWN0IHRvCisgICBnYXJiYWdlIGNvbGxlY3Rpb24uCisKKyAqIEEgcmVncmVzc2lvbiB0byAiZ2l0ayAtLWJpc2VjdCIgYnkgYSByZWNlbnQgdXBkYXRlIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IC1jIHN1Ym1vZHVsZS5yZWN1cnNlPXllcyBwdWxsIiBkaWQgbm90IHdvcmsgYXMgaWYgdGhlCisgICAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIG9wdGlvbiB3YXMgZ2l2ZW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorICAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFVubGlrZSAiZ2l0IGNvbW1pdC10cmVlIDwgZmlsZSIsICJnaXQgY29tbWl0LXRyZWUgLUYgZmlsZSIgZGlkIG5vdAorICAgcGFzcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgdmVyYmF0aW0gYW5kIGluc3RlYWQgY29tcGxldGVkIGFuCisgICBpbmNvbXBsZXRlIGxpbmUgYXQgdGhlIGVuZCwgaWYgZXhpc3RzLiAgVGhlIGxhdHRlciBoYXMgYmVlbiB1cGRhdGVkCisgICB0byBtYXRjaCB0aGUgYmVoYXZpb3VyIG9mIHRoZSBmb3JtZXIuCisKKyAqIE1hbnkgY29kZXBhdGhzIGRpZCBub3QgZGlhZ25vc2Ugd3JpdGUgZmFpbHVyZXMgY29ycmVjdGx5IHdoZW4gZGlza3MKKyAgIGdvIGZ1bGwsIGR1ZSB0byB0aGVpciBtaXN1c2Ugb2Ygd3JpdGVfaW5fZnVsbCgpIGhlbHBlciBmdW5jdGlvbiwKKyAgIHdoaWNoIGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZjQ4ZWNkMzhjYiBqay93cml0ZS1pbi1mdWxsLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgaGVscCBjbyIgbm93IHNheXMgImNvIGlzIGFsaWFzZWQgdG8gLi4uIiwgbm90ICJnaXQgY28gaXMiLgorICAgKG1lcmdlIGIzYTgwNzZlMGQga3MvaGVscC1hbGlhcy1sYWJlbCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYXJjaGl2ZSIsIGVzcGVjaWFsbHkgd2hlbiB1c2VkIHdpdGggcGF0aHNwZWMsIHN0b3JlZCBhbiBlbXB0eQorICAgZGlyZWN0b3J5IGluIGl0cyBvdXRwdXQsIGV2ZW4gdGhvdWdoIEdpdCBpdHNlbGYgbmV2ZXIgZG9lcyBzby4KKyAgIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqIEFQSSBlcnJvci1wcm9vZmluZyB3aGljaCBoYXBwZW5zIHRvIGFsc28gc3F1ZWxjaCB3YXJuaW5ncyBmcm9tIEdDQy4KKworICogVGhlIGV4cGxhbmF0aW9uIG9mIHRoZSBjdXQtbGluZSBpbiB0aGUgY29tbWl0IGxvZyBlZGl0b3IgaGFzIGJlZW4KKyAgIHNsaWdodGx5IHR3ZWFrZWQuCisgICAobWVyZ2UgOGM0YjFhMzU5MyBrcy9jb21taXQtZG8tbm90LXRvdWNoLWN1dC1saW5lIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBnYyIgdHJpZXMgdG8gYXZvaWQgcnVubmluZyB0d28gaW5zdGFuY2VzIGF0IHRoZSBzYW1lIHRpbWUgYnkKKyAgIHJlYWRpbmcgYW5kIHdyaXRpbmcgcGlkL2hvc3QgZnJvbSBhbmQgdG8gYSBsb2NrIGZpbGU7IGl0IHVzZWQgdG8KKyAgIHVzZSBhbiBpbmNvcnJlY3QgZnNjYW5mKCkgZm9ybWF0IHdoZW4gcmVhZGluZywgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogVGhlIHNjcmlwdHMgdG8gZHJpdmUgVHJhdmlzQ0kgaGFzIGJlZW4gcmVvcmdhbml6ZWQgYW5kIHRoZW4gYW4KKyAgIG9wdGltaXphdGlvbiB0byBhdm9pZCBzcGVuZGluZyBjeWNsZXMgb24gYSBicmFuY2ggd2hvc2UgdGlwIGlzCisgICB0YWdnZWQgaGFzIGJlZW4gaW1wbGVtZW50ZWQuCisgICAobWVyZ2UgODM3NmViNGE4ZiBscy90cmF2aXMtc2NyaXB0aWZ5IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHRlc3QgbGludGVyIGhhcyBiZWVuIHRhdWdodCB0aGF0IHdlIGRvIG5vdCBsaWtlICJlY2hvIC1lIi4KKworICogQ29kZSBjbXAuc3RkLmMgbml0cGljay4KKworICogQSByZWdyZXNzaW9uIGZpeCBmb3IgMi4xMSB0aGF0IG1hZGUgdGhlIGNvZGUgdG8gcmVhZCB0aGUgbGlzdCBvZgorICAgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMgb3ZlcnJ1biB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCisgICAobWVyZ2UgZjBmN2JlYmVmNyBqay9pbmZvLWFsdGVybmF0ZXMtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkZXNjcmliZSAtLW1hdGNoIiBsZWFybmVkIHRvIHRha2UgbXVsdGlwbGUgcGF0dGVybnMgaW4gdjIuMTMKKyAgIHNlcmllcywgYnV0IHRoZSBmZWF0dXJlIGlnbm9yZWQgdGhlIHBhdHRlcm5zIGFmdGVyIHRoZSBmaXJzdCBvbmUKKyAgIGFuZCBkaWQgbm90IHdvcmsgYXQgYWxsLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBmaWx0ZXItYnJhbmNoIiBjYW5ub3QgcmVwcm9kdWNlIGEgaGlzdG9yeSB3aXRoIGEgdGFnIHdpdGhvdXQKKyAgIHRoZSB0YWdnZXIgZmllbGQsIHdoaWNoIG9ubHkgYW5jaWVudCB2ZXJzaW9ucyBvZiBHaXQgYWxsb3dlZCB0byBiZQorICAgY3JlYXRlZC4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGIyYzFjYTZiNGIgaWMvZml4LWZpbHRlci1icmFuY2gtdG8taGFuZGxlLXRhZy13aXRob3V0LXRhZ2dlciBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2F0LWZpbGUgLS10ZXh0Y29udiIgc3RhcnRlZCBzZWdmYXVsdGluZyByZWNlbnRseSwgd2hpY2gKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIGJ1aWx0LWluIHBhdHRlcm4gdG8gZGV0ZWN0IHRoZSAiZnVuY3Rpb24gaGVhZGVyIiBmb3IgSFRNTCBkaWQKKyAgIG5vdCBtYXRjaCA8SDE+Li48SDY+IGVsZW1lbnRzIHdpdGhvdXQgYW55IGF0dHJpYnV0ZXMsIHdoaWNoIGhhcworICAgYmVlbiBmaXhlZC4KKworICogImdpdCBtYWlsaW5mbyIgd2FzIGxvb3NlIGluIGRlY29kaW5nIHF1b3RlZCBwcmludGFibGUgYW5kIHByb2R1Y2VkCisgICBnYXJiYWdlIHdoZW4gdGhlIHR3byBsZXR0ZXJzIGFmdGVyIHRoZSBlcXVhbCBzaWduIGFyZSBub3QKKyAgIGhleGFkZWNpbWFsLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogVGhlIG1hY2hpbmVyeSB0byBjcmVhdGUgeGRlbHRhIHVzZWQgaW4gcGFjayBmaWxlcyByZWNlaXZlZCB0aGUKKyAgIHNpemVzIG9mIHRoZSBkYXRhIGluIHNpemVfdCwgYnV0IGxvc3QgdGhlIGhpZ2hlciBiaXRzIG9mIHRoZW0gYnkKKyAgIHN0b3JpbmcgdGhlbSBpbiAidW5zaWduZWQgaW50IiBkdXJpbmcgdGhlIGNvbXB1dGF0aW9uLCB3aGljaCBpcworICAgZml4ZWQuCisKKyAqIFRoZSBkZWx0YSBmb3JtYXQgdXNlZCBpbiB0aGUgcGFja2ZpbGUgY2Fubm90IHJlZmVyZW5jZSBkYXRhIGF0CisgICBvZmZzZXQgbGFyZ2VyIHRoYW4gd2hhdCBjYW4gYmUgZXhwcmVzc2VkIGluIDQtYnl0ZSwgYnV0IHRoZQorICAgZ2VuZXJhdG9yIGZvciB0aGUgZGF0YSBmYWlsZWQgdG8gbWFrZSBzdXJlIHRoZSBvZmZzZXQgZG9lcyBub3QKKyAgIG92ZXJmbG93LiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBkb2N1bWVudGF0aW9uIGZvciAnLVg8b3B0aW9uPicgZm9yIG1lcmdlcyB3YXMgbWlzbGVhZGluZ2x5CisgICB3cml0dGVuIHRvIHN1Z2dlc3QgdGhhdCAiLXMgdGhlaXJzIiBleGlzdHMsIHdoaWNoIGlzIG5vdCB0aGUgY2FzZS4KKworICogImdpdCBmYXN0LWV4cG9ydCIgd2l0aCAtTS8tQyBvcHRpb24gaXNzdWVkICJjb3B5IiBpbnN0cnVjdGlvbiBvbiBhCisgICBwYXRoIHRoYXQgaXMgc2ltdWx0YW5lb3VzbHkgbW9kaWZpZWQsIHdoaWNoIHdhcyBpbmNvcnJlY3QuCisgICAobWVyZ2UgYjNlOGNhODljZiBqdC9mYXN0LWV4cG9ydC1jb3B5LW1vZGlmeS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNYW55IGNvZGVwYXRocyBoYXZlIGJlZW4gdXBkYXRlZCB0byBzcXVlbGNoIC1Xc2lnbi1jb21wYXJlCisgICB3YXJuaW5ncy4KKyAgIChtZXJnZSAwNzFiY2FhYjY0IHJqL25vLXNpZ24tY29tcGFyZSBsYXRlciB0byBtYWludCkuCisKKyAqIE1lbW9yeSBsZWFrcyBpbiB2YXJpb3VzIGNvZGVwYXRocyBoYXZlIGJlZW4gcGx1Z2dlZC4KKyAgIChtZXJnZSA0ZDAxYTdmYTY1IG1hL2xlYWtwbHVncyBsYXRlciB0byBtYWludCkuCisKKyAqIFJlY2VudCB2ZXJzaW9ucyBvZiAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IiBkaWQgbm90IHBhcnNlIHRoZQorICAgb3B0aW9uIHNwZWNpZmljYXRpb24gdGhhdCBkb2VzIG5vdCBoYXZlIHRoZSBvcHRpb25hbCBmbGFncyAoKj0/ISkKKyAgIGNvcnJlY3RseSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGE2MzA0ZmE0YzIgYmMvcmV2LXBhcnNlLXBhcnNlb3B0LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjaGVja3BvaW50IGNvbW1hbmQgImdpdCBmYXN0LWltcG9ydCIgZGlkIG5vdCBmbHVzaCB1cGRhdGVzIHRvCisgICByZWZzIGFuZCBtYXJrcyB1bmxlc3MgYXQgbGVhc3Qgb25lIG9iamVjdCB3YXMgY3JlYXRlZCBzaW5jZSB0aGUKKyAgIGxhc3QgY2hlY2twb2ludCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLCBhcyB0aGVzZSB0aGluZ3MgY2FuCisgICBoYXBwZW4gd2l0aG91dCBhbnkgbmV3IG9iamVjdCBnZXR0aW5nIGNyZWF0ZWQuCisgICAobWVyZ2UgMzBlMjE1YTY1YyBlci9mYXN0LWltcG9ydC1kdW1wLXJlZnMtb24tY2hlY2twb2ludCBsYXRlciB0byBtYWludCkuCisKKyAqIFNwZWxsIHRoZSBuYW1lIG9mIG91ciBzeXN0ZW0gYXMgIkdpdCIgaW4gdGhlIG91dHB1dCBmcm9tCisgICByZXF1ZXN0LXB1bGwgc2NyaXB0LgorCisgKiBGaXhlcyBmb3IgYSBoYW5kZnVsIG1lbW9yeSBhY2Nlc3MgaXNzdWVzIGlkZW50aWZpZWQgYnkgdmFsZ3JpbmQuCisKKyAqIEJhY2twb3J0cyBhIG1vcmFsIGVxdWl2YWxlbnQgb2YgMjAxNSBmaXggdG8gdGhlIHBvbGwoKSBlbXVsYXRpb24KKyAgIGZyb20gdGhlIHVwc3RyZWFtIGdudWxpYiB0byBmaXggb2NjYXNpb25hbCBicmVha2FnZXMgb24gSFBFIE5vblN0b3AuCisKKyAqIFVzZXJzIHdpdGggImNvbG9yLnVpID0gYWx3YXlzIiBpbiB0aGVpciBjb25maWd1cmF0aW9uIHdlcmUgYnJva2VuCisgICBieSBhIHJlY2VudCBjaGFuZ2UgdGhhdCBtYWRlIHBsdW1iaW5nIGNvbW1hbmRzIHRvIHBheSBhdHRlbnRpb24gdG8KKyAgIHRoZW0gYXMgdGhlIHBhdGNoIGNyZWF0ZWQgaW50ZXJuYWxseSBieSAiZ2l0IGFkZCAtcCIgd2VyZSBjb2xvcmVkCisgICAoaGVoKSBhbmQgbWFkZSB1bnVzYWJsZS4gIFRoaXMgaGFzIGJlZW4gZml4ZWQgYnkgcmV2ZXJ0aW5nIHRoZQorICAgb2ZmZW5kaW5nIGNoYW5nZS4KKworICogSW4gdGhlICItLWZvcm1hdD0uLi4iIG9wdGlvbiBvZiB0aGUgImdpdCBmb3ItZWFjaC1yZWYiIGNvbW1hbmQgKGFuZAorICAgaXRzIGZyaWVuZHMsIGkuZS4gdGhlIGxpc3RpbmcgbW9kZSBvZiAiZ2l0IGJyYW5jaC90YWciKSwgIiUoYXRvbTopIgorICAgKGUuZy4gIiUocmVmbmFtZTopIiwgIiUoYm9keTopIiB1c2VkIHRvIGVycm9yIG91dC4gIEluc3RlYWQsIHRyZWF0CisgICB0aGVtIGFzIGlmIHRoZSBjb2xvbiBhbmQgYW4gZW1wdHkgc3RyaW5nIHRoYXQgZm9sbG93cyBpdCB3ZXJlIG5vdAorICAgdGhlcmUuCisKKyAqIEFuIGFuY2llbnQgYnVnIHRoYXQgbWFkZSBHaXQgbWlzYmVoYXZlIHdpdGggY3JlYXRpb24vcmVuYW1pbmcgb2YKKyAgIHJlZnMgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgZmV0Y2ggPHRoZXJlPiA8c3JjPjo8ZHN0PiIgYWxsb3dzIGFuIG9iamVjdCBuYW1lIG9uIHRoZSA8c3JjPgorICAgc2lkZSB3aGVuIHRoZSBvdGhlciBzaWRlIGFjY2VwdHMgc3VjaCBhIHJlcXVlc3Qgc2luY2UgR2l0IHYyLjUsIGJ1dAorICAgdGhlIGRvY3VtZW50YXRpb24gd2FzIGxlZnQgc3RhbGUuCisgICAobWVyZ2UgODM1NThhNDEyYSBqYy9mZXRjaC1yZWZzcGVjLWRvYy11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBVcGRhdGUgdGhlIGRvY3VtZW50YXRpb24gZm9yICJnaXQgZmlsdGVyLWJyYW5jaCIgc28gdGhhdCB0aGUgZmlsdGVyCisgICBvcHRpb25zIGFyZSBsaXN0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBhcmUgYXBwbGllZCwgYXMKKyAgIGRlc2NyaWJlZCBpbiBhbiBlYXJsaWVyIHBhcnQgb2YgdGhlIGRvYy4KKyAgIChtZXJnZSAwN2M0OTg0NTA4IGRnL2ZpbHRlci1icmFuY2gtZmlsdGVyLW9yZGVyLWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIEEgcG9zc2libGUgb29tIGVycm9yIGlzIG5vdyBjYXVnaHQgYXMgYSBmYXRhbCBlcnJvciwgaW5zdGVhZCBvZgorICAgY29udGludWluZyBhbmQgZGVyZWZlcmVuY2luZyBOVUxMLgorICAgKG1lcmdlIDU1ZDdkMTU4NDcgYW8vcGF0aC11c2UteG1hbGxvYyBsYXRlciB0byBtYWludCkuCisKKyAqIE90aGVyIG1pbm9yIGRvYywgdGVzdCBhbmQgYnVpbGQgdXBkYXRlcyBhbmQgY29kZSBjbGVhbnVwcy4KKyAgIChtZXJnZSBmMDk0Yjg5YTRkIG1hL3BhcnNlLW1heWJlLWJvb2wgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDZjZGY4YTc5MjkgbWEvdHMtY2xlYW51cHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDc1NjBmNTQ3ZTYgbWEvdXAtdG8tZGF0ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMGRiM2RjNzVmMyBycy9hcHBseS1lcG9jaCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjc2ZDBlMzVjMCBtYS9zcGxpdC1zeW1yZWYtdXBkYXRlLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZjc3NzYyMzUxNCBrcy9icmFuY2gtdHdlYWstZXJyb3ItbWVzc2FnZS1mb3ItZXh0cmEtYXJncyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzNmM2M2ODNlYyBrcy92ZXJpZnktZmlsZW5hbWUtbm9uLW9wdGlvbi1lcnJvci1tZXNzYWdlLXR3ZWFrIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3Y2JiZjlkNmEyIGxzL2ZpbHRlci1wcm9jZXNzLWRlbGF5ZWQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ4OGFhNjVjOGYgd2svbWVyZ2Utb3B0aW9ucy1ncGctc2lnbi1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGU2MWNiMTlhMjcgamMvYnJhbmNoLWZvcmNlLWRvYy1yZWFkYWJpbGl0eS1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDMyZmNlYmEzZmQgbnAvY29uZmlnLXBhdGgtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlMzhjNjgxZmI3IHNiL3Jldi1wYXJzZS1zaG93LXN1cGVycHJvamVjdC1yb290IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0Zjg1MWRjODgzIHNnL3Jldi1saXN0LWRvYy1yZW9yZGVyLWZpeCBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTUuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTUuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwNjcwNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS4xLnR4dApAQCAtMCwwICsxLDg4IEBACitHaXQgdjIuMTUuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjE1CistLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUcmF2aXNDSSBidWlsZCB1cGRhdGVzLgorCisgKiAiYXV0byIgYXMgYSB2YWx1ZSBmb3IgdGhlIGNvbHVtbmFyIG91dHB1dCBjb25maWd1cmF0aW9uIG91Z2h0IHRvCisgICBqdWRnZSAiaXMgdGhlIG91dHB1dCBjb25zdW1lZCBieSBodW1hbnM/IiB3aXRoIHRoZSBzYW1lIGNyaXRlcmlhIGFzCisgICAiYXV0byIgZm9yIGNvbG91cmVkIG91dHB1dCBjb25maWd1cmF0aW9uLCBpLmUuIGVpdGhlciB0aGUgc3RhbmRhcmQKKyAgIG91dHB1dCBzdHJlYW0gaXMgZ29pbmcgdG8gdHR5LCBvciBhIHBhZ2VyIGlzIGluIHVzZS4gIFdlIGZvcmdvdCB0aGUKKyAgIGxhdHRlciwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIFRoZSBleHBlcmltZW50YWwgImNvbG9yIG1vdmVkIGxpbmVzIGRpZmZlcmVudGx5IGluIGRpZmYgb3V0cHV0IgorICAgZmVhdHVyZSB3YXMgYnVnZ3kgYXJvdW5kICJpZ25vcmUgd2hpdGVzcGFjZSBjaGFuZ2VzIiBlZGdlcywgd2hpY2gKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogSW5zdGVhZCBvZiB1c2luZyBjdXN0b20gbGluZSBjb21wYXJpc29uIGFuZCBoYXNoaW5nIGZ1bmN0aW9ucyB0bworICAgaW1wbGVtZW50ICJtb3ZlZCBsaW5lcyIgY29sb3JpbmcgaW4gdGhlIGRpZmYgb3V0cHV0LCB1c2UgdGhlIHBhaXIKKyAgIG9mIHRoZXNlIGZ1bmN0aW9ucyBmcm9tIGxvd2VyLWxheWVyIHhkaWZmLyBjb2RlLgorCisgKiBTb21lIGNvZGVwYXRocyBkaWQgbm90IGNoZWNrIGZvciBlcnJvcnMgd2hlbiBhc2tpbmcgd2hhdCBicmFuY2ggdGhlCisgICBIRUFEIHBvaW50cyBhdCwgd2hpY2ggaGF2ZSBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGNvbW1pdCIsIGFmdGVyIG1ha2luZyBhIGNvbW1pdCwgZGlkIG5vdCBjaGVjayBmb3IgZXJyb3JzIHdoZW4KKyAgIGFza2luZyBvbiB3aGF0IGJyYW5jaCBpdCBtYWRlIHRoZSBjb21taXQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBzdGF0dXMgLS1pZ25vcmVkIC11IiBkaWQgbm90IHN0b3AgYXQgYSB3b3JraW5nIHRyZWUgb2YgYQorICAgc2VwYXJhdGUgcHJvamVjdCB0aGF0IGlzIGVtYmVkZGVkIGluIGFuIGlnbm9yZWQgZGlyZWN0b3J5IGFuZAorICAgbGlzdGVkIGZpbGVzIGluIHRoYXQgb3RoZXIgcHJvamVjdCwgaW5zdGVhZCBvZiBqdXN0IHNob3dpbmcgdGhlCisgICBkaXJlY3RvcnkgaXRzZWxmIGFzIGlnbm9yZWQuCisKKyAqIEEgYnJva2VuIGFjY2VzcyB0byBvYmplY3QgZGF0YWJhc2VzIGluIHJlY2VudCB1cGRhdGUgdG8gImdpdCBncmVwCisgICAtLXJlY3Vyc2Utc3VibW9kdWxlcyIgaGFzIGJlZW4gZml4ZWQuCisKKyAqIEEgcmVjZW50IHJlZ3Jlc3Npb24gaW4gImdpdCByZWJhc2UgLWkiIHRoYXQgYnJva2UgZXhlY3V0aW9uIG9mIGdpdAorICAgY29tbWFuZHMgZnJvbSBzdWJkaXJlY3RvcmllcyB2aWEgImV4ZWMiIGluc3RydWN0aW9uIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1icmFuY2ggQHstMX0iIGJpdCBhICJCVUcoKSIgd2hlbiBydW4KKyAgIG91dHNpZGUgYSByZXBvc2l0b3J5IGZvciBvYnZpb3VzIHJlYXNvbnM7IGNsYXJpZnkgdGhlIGRvY3VtZW50YXRpb24KKyAgIGFuZCBtYWtlIHN1cmUgd2UgZG8gbm90IGV2ZW4gdHJ5IHRvIGV4cGFuZCB0aGUgYXQtbWFyayBtYWdpYyBpbgorICAgc3VjaCBhIGNhc2UsIGJ1dCBzdGlsbCBjYWxsIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBicmFuY2ggbmFtZXMuCisKKyAqIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIChpbiBjb250cmliLykgdXBkYXRlLgorCisgKiBEZXNjcmlwdGlvbiBvZiBibGFtZS57c2hvd3Jvb3QsYmxhbmtib3VuZGFyeSxzaG93ZW1haWwsZGF0ZX0KKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGhhdmUgYmVlbiBhZGRlZCB0byAiZ2l0IGNvbmZpZyAtLWhlbHAiLgorCisgKiBBZnRlciBhbiBlcnJvciBmcm9tIGxzdGF0KCksIGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMoKSBmdW5jdGlvbgorICAgc29tZXRpbWVzIHN0aWxsIHdlbnQgYWhlYWQgYW5kIHVzZWQgaW52YWxpZCBkYXRhIGluIHN0cnVjdCBzdGF0LAorICAgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIFVOQyBwYXRocyBhcmUgYWxzbyByZWxldmFudCBpbiBDeWd3aW4gYnVpbGRzIGFuZCB0aGV5IGFyZSBub3cKKyAgIHRlc3RlZCBqdXN0IGxpa2UgTWluZ3cgYnVpbGRzLgorCisgKiBDb3JyZWN0IHN0YXJ0LXVwIHNlcXVlbmNlIHNvIHRoYXQgYSByZXBvc2l0b3J5IGNvdWxkIGJlIHBsYWNlZAorICAgaW1tZWRpYXRlbHkgdW5kZXIgdGhlIHJvb3QgZGlyZWN0b3J5IGFnYWluICh3aGljaCB3YXMgYnJva2VuIGF0CisgICBhcm91bmQgR2l0IDIuMTMpLgorCisgKiBUaGUgY3JlZGVudGlhbCBoZWxwZXIgZm9yIGxpYnNlY3JldCAoaW4gY29udHJpYi8pIGhhcyBiZWVuIGltcHJvdmVkCisgICB0byBhbGxvdyBwb3NzaWJseSBwcm9tcHRpbmcgdGhlIGVuZCB1c2VyIHRvIHVubG9jayBzZWNyZXRzIHRoYXQgYXJlCisgICBjdXJyZW50bHkgbG9ja2VkIChvdGhlcndpc2UgdGhlIHNlY3JldHMgbWF5IG5vdCBiZSBsb2FkZWQpLgorCisgKiBVcGRhdGVzIGZyb20gR2ZXIHByb2plY3QuCisKKyAqICJnaXQgcmViYXNlIC1pIiByZWNlbnRseSBzdGFydGVkIG1pc2JlaGF2aW5nIHdoZW4gYSBzdWJtb2R1bGUgdGhhdAorICAgaXMgY29uZmlndXJlZCB3aXRoICdzdWJtb2R1bGUuPG5hbWU+Lmlnbm9yZScgaXMgZGlydHk7IHRoaXMgaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKworICogU29tZSBlcnJvciBtZXNzYWdlcyBkaWQgbm90IHF1b3RlIGZpbGVuYW1lcyBzaG93biBpbiBpdCwgd2hpY2ggaGF2ZQorICAgYmVlbiBmaXhlZC4KKworICogQnVpbGRpbmcgd2l0aCBOT19MSUJQQ1JFMV9KSVQgZGlkIG5vdCBkaXNhYmxlIGl0LCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogV2UgdXNlZCB0byBhZGQgYW4gZW1wdHkgYWx0ZXJuYXRlIG9iamVjdCBkYXRhYmFzZSB0byB0aGUgc3lzdGVtCisgICB0aGF0IGRvZXMgbm90IGhlbHAgYW55dGhpbmc7IGl0IGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogRXJyb3IgY2hlY2tpbmcgaW4gImdpdCBpbWFwLXNlbmQiIGZvciBlbXB0eSByZXNwb25zZSBoYXMgYmVlbgorICAgaW1wcm92ZWQuCisKKyAqIEFuIGFuY2llbnQgYnVnIGluICJnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIiBjb2RlcGF0aCBoYXMKKyAgIGJlZW4gZml4ZWQuCisKKyAqIFRoZXJlIHdhcyBhIHJlY2VudCBzZW1hbnRpYyBtaXNtZXJnZSBpbiB0aGUgY29kZXBhdGggdG8gd3JpdGUgb3V0IGEKKyAgIHNlY3Rpb24gb2YgYSBjb25maWd1cmF0aW9uIHNlY3Rpb24sIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTUuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTUuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ4MGU1NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS4yLnR4dApAQCAtMCwwICsxLDUwIEBACitHaXQgdjIuMTUuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjE1LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogUmVjZW50IHVwZGF0ZSB0byB0aGUgcmVmcyBpbmZyYXN0cnVjdHVyZSBpbXBsZW1lbnRhdGlvbiBzdGFydGVkCisgICByZXdyaXRpbmcgcGFja2VkLXJlZnMgZmlsZSBtb3JlIG9mdGVuIHRoYW4gYmVmb3JlOyB0aGlzIGhhcyBiZWVuCisgICBvcHRpbWl6ZWQgYWdhaW4gZm9yIG1vc3QgdHJpdmlhbCBjYXNlcy4KKworICogVGhlIFN1Ym1pdHRpbmdQYXRjaGVzIGRvY3VtZW50IGhhcyBiZWVuIGNvbnZlcnRlZCB0byBwcm9kdWNlIGFuCisgICBIVE1MIHZlcnNpb24gdmlhIEFzY2lpRG9jL0FzY2lpZG9jdG9yLgorCisgKiBDb250cmFyeSB0byB0aGUgZG9jdW1lbnRhdGlvbiwgImdpdCBwdWxsIC00Ly02IG90aGVyLWFyZ3MiIGRpZCBub3QKKyAgIGFzayB0aGUgdW5kZXJseWluZyAiZ2l0IGZldGNoIiB0byBnbyBvdmVyIElQdjQvSVB2Niwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogV2hlbiAiZ2l0IHJlYmFzZSIgcHJlcGFyZWQgYW4gbWFpbGJveCBvZiBjaGFuZ2VzIGFuZCBmZWQgaXQgdG8gImdpdAorICAgYW0iIHRvIHJlcGxheSB0aGVtLCBpdCB3YXMgY29uZnVzZWQgd2hlbiBhIHN0cmF5ICJGcm9tICIgaGFwcGVuZWQKKyAgIHRvIGJlIGluIHRoZSBsb2cgbWVzc2FnZSBvZiBvbmUgb2YgdGhlIHJlcGxheWVkIGNoYW5nZXMuICBUaGlzIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIChpbiBjb250cmliLykgaGFzIGJlZW4gdGF1Z2h0IGFib3V0IHRoZQorICAgIi0tY29weSIgb3B0aW9uIG9mICJnaXQgYnJhbmNoIi4KKworICogImdpdCBhcHBseSAtLWluYWNjdXJhdGUtZW9mIiB3aGVuIHVzZWQgd2l0aCAiLS1pZ25vcmUtc3BhY2UtY2hhbmdlIgorICAgdHJpZ2dlcmVkIGFuIGludGVybmFsIHNhbml0eSBjaGVjaywgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIFRoZSBzZXF1ZW5jZXIgbWFjaGluZXJ5ICh1c2VkIGJ5ICJnaXQgY2hlcnJ5LXBpY2sgQS4uQiIsIGFuZCAiZ2l0CisgICByZWJhc2UgLWkiLCBhbW9uZyBvdGhlciB0aGluZ3MpIHdvdWxkIGhhdmUgbG9zdCBhIGNvbW1pdCBpZiBzdG9wcGVkCisgICBkdWUgdG8gYW4gdW5sb2NrYWJsZSBpbmRleCBmaWxlLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogVGhlIHRocmVlLXdheSBtZXJnZSBwZXJmb3JtZWQgYnkgImdpdCBjaGVycnktcGljayIgd2FzIGNvbmZ1c2VkCisgICB3aGVuIGEgbmV3IHN1Ym1vZHVsZSB3YXMgYWRkZWQgaW4gdGhlIG1lYW50aW1lLCB3aGljaCBoYXMgYmVlbgorICAgZml4ZWQgKG9yICJwYXBlcmVkIG92ZXIiKS4KKworICogImdpdCBub3RlcyIgc2VudCBpdHMgZXJyb3IgbWVzc2FnZSB0byBpdHMgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbSwKKyAgIHdoaWNoIHdhcyBjb3JyZWN0ZWQuCisKKyAqIEEgZmV3IHNjcmlwdHMgKGJvdGggaW4gcHJvZHVjdGlvbiBhbmQgdGVzdHMpIGluY29ycmVjdGx5IHJlZGlyZWN0ZWQKKyAgIHRoZWlyIGVycm9yIG91dHB1dC4gIFRoZXNlIGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIENsYXJpZnkgYW5kIGVuaGFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgIm1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IiwgYXMKKyAgIGl0IHdhcyBjbGVhciB3aGF0IGl0IGNvbXB1dGVkIGJ1dCBub3Qgd2h5L3doYXQgZm9yLgorCisgKiBUaGlzIHJlbGVhc2UgYWxzbyBjb250YWlucyB0aGUgZml4ZXMgbWFkZSBpbiB0aGUgdjIuMTMuNyB2ZXJzaW9uIG9mCisgICBHaXQuICBTZWUgaXRzIHJlbGVhc2Ugbm90ZXMgZm9yIGRldGFpbHMuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTUuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTUuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQyZTZmOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS4zLnR4dApAQCAtMCwwICsxLDYgQEAKK0dpdCB2Mi4xNS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNSB0byBhZGRyZXNzCit0aGUgcmVjZW50bHkgcmVwb3J0ZWQgQ1ZFLTIwMTgtMTc0NTY7IHNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhhdAordmVyc2lvbiBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzI0MWNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE1LjQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK0dpdCB2Mi4xNS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNiB0byBhZGRyZXNzCit0aGUgc2VjdXJpdHkgaXNzdWVzIENWRS0yMDE5LTEzNDgsIENWRS0yMDE5LTEzNDksIENWRS0yMDE5LTEzNTAsCitDVkUtMjAxOS0xMzUxLCBDVkUtMjAxOS0xMzUyLCBDVkUtMjAxOS0xMzUzLCBDVkUtMjAxOS0xMzU0LCBhbmQKK0NWRS0yMDE5LTEzODc7IHNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhhdCB2ZXJzaW9uIGZvciBkZXRhaWxzLgorCitJbiBjb25qdW5jdGlvbiB3aXRoIGEgdnVsbmVyYWJpbGl0eSB0aGF0IHdhcyBmaXhlZCBpbiB2Mi4yMC4yLAorYC5naXRtb2R1bGVzYCBpcyBubyBsb25nZXIgYWxsb3dlZCB0byBjb250YWluIGVudHJpZXMgb2YgdGhlIGZvcm0KK2BzdWJtb2R1bGUuPG5hbWU+LnVwZGF0ZT0hY29tbWFuZGAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3NDc4MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4wLnR4dApAQCAtMCwwICsxLDQ4MiBAQAorR2l0IDIuMTYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzIGFuZCBvdGhlciBub3RhYmxlIGNoYW5nZXMuCisKKyAqIFVzZSBvZiBhbiBlbXB0eSBzdHJpbmcgYXMgYSBwYXRoc3BlYyBlbGVtZW50IHRoYXQgaXMgdXNlZCBmb3IKKyAgICdldmVyeXRoaW5nIG1hdGNoZXMnIGlzIG5vdyBhbiBlcnJvci4KKworCitVcGRhdGVzIHNpbmNlIHYyLjE1CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBBbiBlbXB0eSBzdHJpbmcgYXMgYSBwYXRoc3BlYyBlbGVtZW50IHRoYXQgbWVhbnMgImV2ZXJ5dGhpbmciCisgICBpLmUuICdnaXQgYWRkICIiJywgaXMgbm93IGlsbGVnYWwuICBXZSBzdGFydGVkIHRoaXMgYnkgZmlyc3QKKyAgIGRlcHJlY2F0aW5nIGFuZCB3YXJuaW5nIGEgcGF0aHNwZWMgdGhhdCBoYXMgc3VjaCBhbiBlbGVtZW50IGluCisgICAyLjExIChOb3YgMjAxNikuCisKKyAqIEEgaG9vayBzY3JpcHQgdGhhdCBpcyBzZXQgdW5leGVjdXRhYmxlIGlzIHNpbXBseSBpZ25vcmVkLiAgR2l0CisgICBub3RpZmllcyB3aGVuIHN1Y2ggYSBmaWxlIGlzIGlnbm9yZWQsIHVubGVzcyB0aGUgbWVzc2FnZSBpcworICAgc3F1ZWxjaGVkIHZpYSBhZHZpY2UuaWdub3JlZEhvb2sgY29uZmlndXJhdGlvbi4KKworICogImdpdCBwdWxsIiBoYXMgYmVlbiB0YXVnaHQgdG8gYWNjZXB0ICItLVtuby1dc2lnbm9mZiIgb3B0aW9uIGFuZAorICAgcGFzcyBpdCBkb3duIHRvICJnaXQgbWVyZ2UiLgorCisgKiBUaGUgIi0tcHVzaC1vcHRpb249PHN0cmluZz4iIG9wdGlvbiB0byAiZ2l0IHB1c2giIG5vdyBkZWZhdWx0cyB0byBhCisgICBsaXN0IG9mIHN0cmluZ3MgY29uZmlndXJlZCB2aWEgcHVzaC5wdXNoT3B0aW9uIHZhcmlhYmxlLgorCisgKiAiZ2l0d2ViIiBjaGVja3MgaWYgYSBkaXJlY3RvcnkgaXMgc2VhcmNoYWJsZSB3aXRoIFBlcmwncyAiLXgiCisgICBvcGVyYXRvciwgd2hpY2ggY2FuIGJlIGVuaGFuY2VkIGJ5IHVzaW5nICJmaWxldGVzdCAnYWNjZXNzJyIKKyAgIHByYWdtYSwgd2hpY2ggbm93IHdlIGRvLgorCisgKiAiZ2l0IHN0YXNoIHNhdmUiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mICJnaXQgc3Rhc2ggcHVzaCIuCisKKyAqIFRoZSBzZXQgb2YgcGF0aHMgb3V0cHV0IGZyb20gImdpdCBzdGF0dXMgLS1pZ25vcmVkIiB3YXMgdGllZAorICAgY2xvc2VseSB3aXRoIGl0cyAiLS11bnRyYWNrZWQ9PG1vZGU+IiBvcHRpb24sIGJ1dCBub3cgaXQgY2FuIGJlCisgICBjb250cm9sbGVkIG1vcmUgZmxleGlibHkuICBNb3N0IG5vdGFibHksIGEgZGlyZWN0b3J5IHRoYXQgaXMKKyAgIGlnbm9yZWQgYmVjYXVzZSBpdCBpcyBsaXN0ZWQgdG8gYmUgaWdub3JlZCBpbiB0aGUgaWdub3JlL2V4Y2x1ZGUKKyAgIG1lY2hhbmlzbSBjYW4gYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmcm9tIGEgZGlyZWN0b3J5IHRoYXQgZW5kcyB1cAorICAgdG8gYmUgaWdub3JlZCBvbmx5IGJlY2F1c2UgYWxsIGZpbGVzIGluIGl0IGFyZSBpZ25vcmVkLgorCisgKiBUaGUgcmVtb3RlLWhlbHBlciBmb3IgdGFsa2luZyB0byBNZWRpYVdpa2kgaGFzIGJlZW4gdXBkYXRlZCB0bworICAgdHJ1bmNhdGUgYW4gb3ZlcmxvbmcgcGFnZW5hbWUgc28gdGhhdCAiLm13IiBzdWZmaXggY2FuIHN0aWxsIGJlCisgICBhZGRlZC4KKworICogVGhlIHJlbW90ZS1oZWxwZXIgZm9yIHRhbGtpbmcgdG8gTWVkaWFXaWtpIGhhcyBiZWVuIHVwZGF0ZWQgdG8KKyAgIHdvcmsgd2l0aCBtZWRpYXdpa2kgbmFtZXNwYWNlcy4KKworICogVGhlICItLWZvcm1hdD0uLi4iIG9wdGlvbiAiZ2l0IGZvci1lYWNoLXJlZiIgdGFrZXMgbGVhcm5lZCB0byBzaG93CisgICB0aGUgbmFtZSBvZiB0aGUgJ3JlbW90ZScgcmVwb3NpdG9yeSBhbmQgdGhlIHJlZiBhdCB0aGUgcmVtb3RlIHNpZGUKKyAgIHRoYXQgaXMgYWZmZWN0ZWQgZm9yICd1cHN0cmVhbScgYW5kICdwdXNoJyB2aWEgIiUocHVzaDpyZW1vdGVuYW1lKSIKKyAgIGFuZCBmcmllbmRzLgorCisgKiBEb2MgYW5kIG1lc3NhZ2UgdXBkYXRlcyB0byB0ZWFjaCB1c2VycyAiYmlzZWN0IHZpZXciIGlzIGEgc3lub255bQorICAgZm9yICJiaXNlY3QgdmlzdWFsaXplIi4KKworICogImdpdCBiaXNlY3QgcnVuIiB0aGF0IGRpZCBub3Qgc3BlY2lmeSBhbnkgY29tbWFuZCB0byBydW4gdXNlZCB0byBnbworICAgYWhlYWQgYW5kIHRyZWF0ZWQgYWxsIGNvbW1pdHMgdG8gYmUgdGVzdGVkIGFzICdnb29kJy4gIFRoaXMgaGFzCisgICBiZWVuIGNvcnJlY3RlZCBieSBtYWtpbmcgdGhlIGNvbW1hbmQgZXJyb3Igb3V0LgorCisgKiBUaGUgU3VibWl0dGluZ1BhdGNoZXMgZG9jdW1lbnQgaGFzIGJlZW4gY29udmVydGVkIHRvIHByb2R1Y2UgYW4KKyAgIEhUTUwgdmVyc2lvbiB2aWEgQXNjaWlEb2MvQXNjaWlkb2N0b3IuCisKKyAqIFdlIGxlYXJuZWQgdG8gb3B0aW9uYWxseSB0YWxrIHRvIGEgZmlsZSBzeXN0ZW0gbW9uaXRvciB2aWEgbmV3CisgICBmc21vbml0b3IgZXh0ZW5zaW9uIHRvIHNwZWVkIHVwICJnaXQgc3RhdHVzIiBhbmQgb3RoZXIgb3BlcmF0aW9ucworICAgdGhhdCBuZWVkIHRvIHNlZSB3aGljaCBwYXRocyBoYXZlIGJlZW4gbW9kaWZpZWQuICBDdXJyZW50bHkgd2Ugb25seQorICAgc3VwcG9ydCAid2F0Y2htYW4iLiAgU2VlIEZpbGUgU3lzdGVtIE1vbml0b3Igc2VjdGlvbiBvZgorICAgZ2l0LXVwZGF0ZS1pbmRleCgxKSBmb3IgbW9yZSBkZXRhaWwuCisKKyAqIFRoZSAiZGlmZiIgZmFtaWx5IG9mIGNvbW1hbmRzIGxlYXJuZWQgdG8gaWdub3JlIGRpZmZlcmVuY2VzIGluCisgICBjYXJyaWFnZSByZXR1cm4gYXQgdGhlIGVuZCBvZiBsaW5lLgorCisgKiBQbGFjZXMgdGhhdCBrbm93IGFib3V0ICJzZW5kZW1haWwudG8iLCBsaWtlIGRvY3VtZW50YXRpb24gYW5kIHNoZWxsCisgICBjb21wbGV0aW9uIChpbiBjb250cmliLykgaGF2ZSBiZWVuIHRhdWdodCBhYm91dCAic2VuZGVtYWlsLnRvY21kIiwKKyAgIHRvby4KKworICogImdpdCBhZGQgLS1yZW5vcm1hbGl6ZSAuIiBpcyBhIG5ldyBhbmQgc2FmZXIgd2F5IHRvIHJlY29yZCB0aGUgZmFjdAorICAgdGhhdCB5b3UgYXJlIGNvcnJlY3RpbmcgdGhlIGVuZC1vZi1saW5lIGNvbnZlbnRpb24gYW5kIG90aGVyCisgICAiY29udmVydF90b19naXQoKSIgZ2xpdGNoZXMgaW4gdGhlIGluLXJlcG9zaXRvcnkgZGF0YS4KKworICogImdpdCBicmFuY2giIGFuZCAiZ2l0IGNoZWNrb3V0IC1iIiBhcmUgbm93IGZvcmJpZGRlbiBmcm9tIGNyZWF0aW5nCisgICBhIGJyYW5jaCB3aG9zZSBuYW1lIGlzICJIRUFEIi4KKworICogImdpdCBicmFuY2ggLS1saXN0IiBsZWFybmVkIHRvIHNob3cgaXRzIG91dHB1dCB0aHJvdWdoIHRoZSBwYWdlciBieQorICAgZGVmYXVsdCB3aGVuIHRoZSBvdXRwdXQgaXMgZ29pbmcgdG8gYSB0ZXJtaW5hbCwgd2hpY2ggaXMgY29udHJvbGxlZAorICAgYnkgdGhlIHBhZ2VyLmJyYW5jaCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiAgVGhpcyBpcyBzaW1pbGFyIHRvIGEKKyAgIHJlY2VudCBjaGFuZ2UgdG8gImdpdCB0YWcgLS1saXN0Ii4KKworICogImdpdCBncmVwIC1XIiwgImdpdCBkaWZmIC1XIiBhbmQgdGhlaXIgZnJpZW5kcyBsZWFybmVkIGEgaGV1cmlzdGljCisgICB0byBleHRlbmQgYSBwcmUtY29udGV4dCBiZXlvbmQgdGhlIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSAiZnVuY3Rpb24KKyAgIHBhdHRlcm4iIChha2EgImRpZmYuKi54ZnVuY25hbWUiKSB0byBpbmNsdWRlIGEgY29tbWVudCBibG9jaywgaWYKKyAgIGV4aXN0cywgdGhhdCBpbW1lZGlhdGVseSBwcmVjZWRlcyBpdC4KKworICogImdpdCBjb25maWcgLS1leHBpcnktZGF0ZSBnYy5yZWZsb2dleHBpcmUiIGNhbiByZWFkICIyLndlZWtzIiBmcm9tCisgICB0aGUgY29uZmlndXJhdGlvbiBhbmQgcmVwb3J0IGl0IGFzIGEgdGltZXN0YW1wLCBqdXN0IGxpa2UgIi0taW50IgorICAgd291bGQgcmVhZCAiMWsiIGFuZCByZXBvcnQgMTAyNCwgdG8gaGVscCBjb25zdW1wdGlvbiBieSBzY3JpcHRzLgorCisgKiBUaGUgc2hlbGwgY29tcGxldGlvbiAoaW4gY29udHJpYi8pIGxlYXJuZWQgdGhhdCAiZ2l0IHB1bGwiIGNhbiB0YWtlCisgICB0aGUgIi0tYXV0b3N0YXNoIiBvcHRpb24uCisKKyAqIFRoZSB0YWduYW1lcyAiZ2l0IGxvZyAtLWRlY29yYXRlIiB1c2VzIHRvIGFubm90YXRlIHRoZSBjb21taXRzIGNhbgorICAgbm93IGJlIGxpbWl0ZWQgdG8gc3Vic2V0IG9mIGF2YWlsYWJsZSByZWZzIHdpdGggdGhlIHR3byBhZGRpdGlvbmFsCisgICBvcHRpb25zLCAtLWRlY29yYXRlLXJlZnNbLWV4Y2x1ZGVdPTxwYXR0ZXJuPi4KKworICogImdpdCBncmVwIiBjb21waWxlZCB3aXRoIGxpYnBjcmUyIHNvbWV0aW1lcyB0cmlnZ2VyZWQgYSBzZWdmYXVsdCwKKyAgIHdoaWNoIGlzIGJlaW5nIGZpeGVkLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIHRyaWVzIHRvIHNlZSBpZiB0aGUgc2VuZG1haWwgcHJvZ3JhbSBpcyBhdmFpbGFibGUKKyAgIGluIC91c3IvbGliIGFuZCAvdXNyL3NiaW47IGV4dGVuZCB0aGUgbGlzdCBvZiBsb2NhdGlvbnMgdG8gYmUKKyAgIGNoZWNrZWQgdG8gYWxzbyBpbmNsdWRlIGRpcmVjdG9yaWVzIG9uICRQQVRILgorCisgKiAiZ2l0IGRpZmYiIGxlYXJuZWQsICItLWFuY2hvcmVkIiwgYSB2YXJpYW50IG9mIHRoZSAiLS1wYXRpZW5jZSIKKyAgIGFsZ29yaXRobSwgdG8gd2hpY2ggdGhlIHVzZXIgY2FuIHNwZWNpZnkgd2hpY2ggJ3VuaXF1ZScgbGluZSB0byBiZQorICAgdXNlZCBhcyBhbmNob3JpbmcgcG9pbnRzLgorCisgKiBUaGUgd2F5ICJnaXQgd29ya3RyZWUgYWRkIiBkZXRlcm1pbmVzIHdoYXQgYnJhbmNoIHRvIGNyZWF0ZSBmcm9tCisgICB3aGVyZSBhbmQgY2hlY2tvdXQgaW4gdGhlIG5ldyB3b3JrdHJlZSBoYXMgYmVlbiB1cGRhdGVkIGEgYml0LgorCisgKiBBbmNpZW50IHBhcnQgb2YgY29kZWJhc2Ugc3RpbGwgc2hvd3MgZG90cyBhZnRlciBhbiBhYmJyZXZpYXRlZAorICAgb2JqZWN0IG5hbWUganVzdCB0byBzaG93IHRoYXQgaXQgaXMgbm90IGEgZnVsbCBvYmplY3QgbmFtZSwgYnV0CisgICB0aGVzZSBlbGxpcHNlcyBhcmUgY29uZnVzaW5nIHRvIHBlb3BsZSB3aG8gbmV3bHkgZGlzY292ZXJlZCBHaXQKKyAgIHdobyBhcmUgdXNlZCB0byBzZWVpbmcgYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWVzIGFuZCBmaW5kIHRoZW0KKyAgIGNvbmZ1c2luZyB3aXRoIHRoZSByYW5nZSBzeW50YXguCisKKyAqIFdpdGggYSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHJlYmFzZS5hYmJyZXZpYXRlQ29tbWFuZHMgc2V0LAorICAgImdpdCByZWJhc2UgLWkiIHByb2R1Y2VzIHRoZSB0b2RvIGxpc3Qgd2l0aCBhIHNpbmdsZS1sZXR0ZXIKKyAgIGNvbW1hbmQgbmFtZXMuCisKKyAqICJnaXQgd29ya3RyZWUgYWRkIiBsZWFybmVkIHRvIHJ1biB0aGUgcG9zdC1jaGVja291dCBob29rLCBqdXN0IGxpa2UKKyAgICJnaXQgY2hlY2tvdXQiIGRvZXMsIGFmdGVyIHRoZSBpbml0aWFsIGNoZWNrb3V0LgorCisgKiAiZ2l0IHN2biIgaGFzIGJlZW4gdXBkYXRlZCB0byBzdHJpcCBDUnMgaW4gdGhlIGNvbW1pdCBtZXNzYWdlcywgYXMKKyAgIHJlY2VudCB2ZXJzaW9ucyBvZiBTdWJ2ZXJzaW9uIHJlamVjdHMgdGhlbS4KKworICogImdpdCBpbWFwLXNlbmQiIGRpZCBub3QgY29ycmVjdGx5IHF1b3RlIHRoZSBmb2xkZXIgbmFtZSB3aGVuCisgICBtYWtpbmcgYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogRXJyb3IgbWVzc2FnZXMgZnJvbSAiZ2l0IHJlYmFzZSIgaGF2ZSBiZWVuIHNvbWV3aGF0IGNsZWFuZWQgdXAuCisKKyAqIEdpdCBoYXMgYmVlbiB0YXVnaHQgdG8gc3VwcG9ydCBhbiBodHRwczovLyBVUkwgdXNlZCBmb3IgaHR0cC5wcm94eQorICAgd2hlbiB1c2luZyByZWNlbnQgdmVyc2lvbnMgb2YgbGliY3VybC4KKworICogImdpdCBtZXJnZSIgbGVhcm5lZCB0byBwYXkgYXR0ZW50aW9uIHRvIG1lcmdlLnZlcmlmeVNpZ25hdHVyZXMKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYW5kIHByZXRlbmQgYXMgaWYgJy0tdmVyaWZ5LXNpZ25hdHVyZXMnCisgICBvcHRpb24gd2FzIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworICogImdpdCBkZXNjcmliZSIgd2FzIHRhdWdodCB0byBkaWcgdHJlZXMgZGVlcGVyIHRvIGZpbmQgYQorICAgPGNvbW1pdC1pc2g+OjxwYXRoPiB0aGF0IHJlZmVycyB0byBhIGdpdmVuIGJsb2Igb2JqZWN0LgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIEFuIGVhcmxpZXIgdXBkYXRlIG1hZGUgaXQgcG9zc2libGUgdG8gdXNlIGFuIG9uLXN0YWNrIGluLWNvcmUKKyAgIGxvY2tmaWxlIHN0cnVjdHVyZSAoYXMgb3Bwb3NlZCB0byBoYXZpbmcgdG8gZGVsaWJlcmF0ZWx5IGxlYWsgYW4KKyAgIG9uLWhlYXAgb25lKS4gIE1hbnkgY29kZXBhdGhzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHRha2UgYWR2YW50YWdlCisgICBvZiB0aGlzIG5ldyBmYWNpbGl0eS4KKworICogQ2FsbGluZyBjbWRfZm9vKCkgYXMgaWYgaXQgaXMgYSBnZW5lcmFsIHB1cnBvc2UgaGVscGVyIGZ1bmN0aW9uIGlzCisgICBhIG5vLW5vLiAgQ29ycmVjdCB0d28gaW5zdGFuY2VzIG9mIHN1Y2ggdG8gc2V0IGFuIGV4YW1wbGUuCisKKyAqIFdlIHRyeSB0byBzZWUgaWYgc29tZWJvZHkgcnVucyBvdXIgdGVzdCBzdWl0ZSB3aXRoIGEgc2hlbGwgdGhhdAorICAgZG9lcyBub3Qgc3VwcG9ydCAibG9jYWwiIGxpa2UgYmFzaC9kYXNoIGRvZXMuCisKKyAqIEFuIGVhcmx5IHBhcnQgb2YgcGllY2UtYnktcGllY2UgcmV3cml0ZSBvZiAiZ2l0IGJpc2VjdCIgaW4gQy4KKworICogR1NvQyB0byBwaWVjZS1ieS1waWVjZSByZXdyaXRlICJnaXQgc3VibW9kdWxlIiBpbiBDLgorCisgKiBPcHRpbWl6ZSB0aGUgY29kZSB0byBmaW5kIHNob3J0ZXN0IHVuaXF1ZSBwcmVmaXggb2Ygb2JqZWN0IG5hbWVzLgorCisgKiBQYXRoc3BlYy1saW1pdGVkIHJldmlzaW9uIHRyYXZlcnNhbCB3YXMgdGF1Z2h0IG5vdCB0byBrZWVwIGZpbmRpbmcKKyAgIHVubmVlZGVkIGRpZmZlcmVuY2VzIG9uY2UgaXQga25vd3MgdHdvIHRyZWVzIGFyZSBkaWZmZXJlbnQgaW5zaWRlCisgICBnaXZlbiBwYXRoc3BlYy4KKworICogQ29udmVyc2lvbiBmcm9tIHVjaGFyWzIwXSB0byBzdHJ1Y3Qgb2JqZWN0X2lkIGNvbnRpbnVlcy4KKworICogQ29kZSBjbGVhbnVwLgorCisgKiBBIHNpbmdsZS13b3JkICJ1bnNpZ25lZCBmbGFncyIgaW4gdGhlIGRpZmYgb3B0aW9ucyBpcyBiZWluZyBzcGxpdAorICAgaW50byBhIHN0cnVjdHVyZSB3aXRoIG1hbnkgYml0ZmllbGRzLgorCisgKiBUcmF2aXNDSSBidWlsZCB1cGRhdGVzLgorCisgKiBQYXJ0cyBvZiBhIHRlc3QgdG8gZHJpdmUgdGhlIGxvbmctcnVubmluZyBjb250ZW50IGZpbHRlciBpbnRlcmZhY2UKKyAgIGhhcyBiZWVuIHNwbGl0IGludG8gaXRzIG93biBtb2R1bGUsIGhvcGVmdWxseSB0byBldmVudHVhbGx5IGJlY29tZQorICAgcmV1c2FibGUuCisKKyAqIERyb3AgKHBlcmhhcHMgb3Zlcmx5IGNhdXRpb3VzKSBzYW5pdHkgY2hlY2sgYmVmb3JlIHVzaW5nIHRoZSBpbmRleAorICAgcmVhZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGF0IHJ1bnRpbWUuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgaGFzIGJlZW4gdGF1Z2h0IHRvIGF2b2lkIHNvbWUgdW5uZWNlc3NhcnkKKyAgIGluc3RhYmlsaXR5IGluIHRoZSBidWlsZCBwcm9kdWN0cy4KKworICogQSBuZXcgbWVjaGFuaXNtIHRvIHVwZ3JhZGUgdGhlIHdpcmUgcHJvdG9jb2wgaW4gcGxhY2UgaXMgcHJvcG9zZWQKKyAgIGFuZCBkZW1vbnN0cmF0ZWQgdGhhdCBpdCB3b3JrcyB3aXRoIHRoZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQKKyAgIHdpdGhvdXQgaGFybWluZyB0aGVtLgorCisgKiBBbiBpbmZyYXN0cnVjdHVyZSB0byBkZWZpbmUgd2hhdCBoYXNoIGZ1bmN0aW9uIGlzIHVzZWQgaW4gR2l0IGlzCisgICBpbnRyb2R1Y2VkLCBhbmQgYW4gZWZmb3J0IHRvIHBsdW1iIHRoYXQgdGhyb3VnaG91dCB2YXJpb3VzCisgICBjb2RlcGF0aHMgaGFzIGJlZW4gc3RhcnRlZC4KKworICogVGhlIGNvZGUgdG8gaXRlcmF0ZSBvdmVyIGxvb3NlIG9iamVjdCBmaWxlcyBnb3Qgb3B0aW1pemVkLgorCisgKiBBbiBpbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHdhcyBsZWZ0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGhhcworICAgYmVlbiByZW1vdmVkLCBhcyB0aGVyZSBpcyBubyByZW1haW5pbmcgY2FsbGVycy4KKworICogSGlzdG9yaWNhbGx5LCB0aGUgZGlmZiBtYWNoaW5lcnkgZm9yIHJlbmFtZSBkZXRlY3Rpb24gaGFkIGEKKyAgIGhhcmRjb2RlZCBsaW1pdCBvZiAzMmsgcGF0aHM7IHRoaXMgaXMgYmVpbmcgbGlmdGVkIHRvIGFsbG93IHVzZXJzCisgICB0cmFkZSBjeWNsZXMgd2l0aCBhIChwb3NzaWJseSkgZWFzaWVyIHRvIHJlYWQgcmVzdWx0LgorCisgKiBUaGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSBoYXMgYmVlbiBvcHRpbWl6ZWQgZm9yIGNhc2VzIHdoZXJlIG5vCisgICB0cmFjaW5nIGlzIHJlcXVlc3RlZC4KKworICogSW4gcHJlcGFyYXRpb24gZm9yIGltcGxlbWVudGluZyBuYXJyb3cvcGFydGlhbCBjbG9uZSwgdGhlIG9iamVjdAorICAgd2Fsa2luZyBtYWNoaW5lcnkgaGFzIGJlZW4gdGF1Z2h0IGEgd2F5IHRvIHRlbGwgaXQgdG8gImZpbHRlciIgc29tZQorICAgb2JqZWN0cyBmcm9tIGVudW1lcmF0aW9uLgorCisgKiBBIGZldyBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgdGhhdCBhcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZgorICAgdGhlIGRlY29yYXRlIEFQSSBoYXZlIGJlZW4gcmVuYW1lZCBhbmQgdGhlbiB0aGUgQVBJIGdvdCBkb2N1bWVudGVkCisgICBiZXR0ZXIuCisKKyAqIEFzc29ydGVkIHVwZGF0ZXMgZm9yIFRyYXZpc0NJIGludGVncmF0aW9uLgorICAgKG1lcmdlIDRmMjYzNjY2Nzkgc2cvdHJhdmlzLWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogSW50cm9kdWNlIGEgaGVscGVyIHRvIHNpbXBsaWZ5IGNvZGUgdG8gcGFyc2UgYSBjb21tb24gcGF0dGVybiB0aGF0CisgICBleHBlY3RzIGVpdGhlciAiLS1rZXkiIG9yICItLWtleT08c29tZXRoaW5nPiIuCisKKyAqICJnaXQgdmVyc2lvbiAtLWJ1aWxkLW9wdGlvbnMiIGxlYXJuZWQgdG8gcmVwb3J0IHRoZSBob3N0IENQVSBhbmQKKyAgIHRoZSBleGFjdCBjb21taXQgb2JqZWN0IG5hbWUgdGhlIGJpbmFyeSB3YXMgYnVpbHQgZnJvbS4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjIuMTUKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJhdXRvIiBhcyBhIHZhbHVlIGZvciB0aGUgY29sdW1uYXIgb3V0cHV0IGNvbmZpZ3VyYXRpb24gb3VnaHQgdG8KKyAgIGp1ZGdlICJpcyB0aGUgb3V0cHV0IGNvbnN1bWVkIGJ5IGh1bWFucz8iIHdpdGggdGhlIHNhbWUgY3JpdGVyaWEgYXMKKyAgICJhdXRvIiBmb3IgY29sb3VyZWQgb3V0cHV0IGNvbmZpZ3VyYXRpb24sIGkuZS4gZWl0aGVyIHRoZSBzdGFuZGFyZAorICAgb3V0cHV0IHN0cmVhbSBpcyBnb2luZyB0byB0dHksIG9yIGEgcGFnZXIgaXMgaW4gdXNlLiAgV2UgZm9yZ290IHRoZQorICAgbGF0dGVyLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogVGhlIGV4cGVyaW1lbnRhbCAiY29sb3IgbW92ZWQgbGluZXMgZGlmZmVyZW50bHkgaW4gZGlmZiBvdXRwdXQiCisgICBmZWF0dXJlIHdhcyBidWdneSBhcm91bmQgImlnbm9yZSB3aGl0ZXNwYWNlIGNoYW5nZXMiIGVkZ2VzLCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBJbnN0ZWFkIG9mIHVzaW5nIGN1c3RvbSBsaW5lIGNvbXBhcmlzb24gYW5kIGhhc2hpbmcgZnVuY3Rpb25zIHRvCisgICBpbXBsZW1lbnQgIm1vdmVkIGxpbmVzIiBjb2xvcmluZyBpbiB0aGUgZGlmZiBvdXRwdXQsIHVzZSB0aGUgcGFpcgorICAgb2YgdGhlc2UgZnVuY3Rpb25zIGZyb20gbG93ZXItbGF5ZXIgeGRpZmYvIGNvZGUuCisKKyAqIFNvbWUgY29kZXBhdGhzIGRpZCBub3QgY2hlY2sgZm9yIGVycm9ycyB3aGVuIGFza2luZyB3aGF0IGJyYW5jaCB0aGUKKyAgIEhFQUQgcG9pbnRzIGF0LCB3aGljaCBoYXZlIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgY29tbWl0IiwgYWZ0ZXIgbWFraW5nIGEgY29tbWl0LCBkaWQgbm90IGNoZWNrIGZvciBlcnJvcnMgd2hlbgorICAgYXNraW5nIG9uIHdoYXQgYnJhbmNoIGl0IG1hZGUgdGhlIGNvbW1pdCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHN0YXR1cyAtLWlnbm9yZWQgLXUiIGRpZCBub3Qgc3RvcCBhdCBhIHdvcmtpbmcgdHJlZSBvZiBhCisgICBzZXBhcmF0ZSBwcm9qZWN0IHRoYXQgaXMgZW1iZWRkZWQgaW4gYW4gaWdub3JlZCBkaXJlY3RvcnkgYW5kCisgICBsaXN0ZWQgZmlsZXMgaW4gdGhhdCBvdGhlciBwcm9qZWN0LCBpbnN0ZWFkIG9mIGp1c3Qgc2hvd2luZyB0aGUKKyAgIGRpcmVjdG9yeSBpdHNlbGYgYXMgaWdub3JlZC4KKworICogQSBicm9rZW4gYWNjZXNzIHRvIG9iamVjdCBkYXRhYmFzZXMgaW4gcmVjZW50IHVwZGF0ZSB0byAiZ2l0IGdyZXAKKyAgIC0tcmVjdXJzZS1zdWJtb2R1bGVzIiBoYXMgYmVlbiBmaXhlZC4KKworICogQSByZWNlbnQgcmVncmVzc2lvbiBpbiAiZ2l0IHJlYmFzZSAtaSIgdGhhdCBicm9rZSBleGVjdXRpb24gb2YgZ2l0CisgICBjb21tYW5kcyBmcm9tIHN1YmRpcmVjdG9yaWVzIHZpYSAiZXhlYyIgaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gZml4ZWQuCisKKyAqIEEgKHBvc3NpYmx5IGZsYWtleSkgdGVzdCBmaXguCisKKyAqICJnaXQgY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCBAey0xfSIgYml0IGEgIkJVRygpIiB3aGVuIHJ1bgorICAgb3V0c2lkZSBhIHJlcG9zaXRvcnkgZm9yIG9idmlvdXMgcmVhc29uczsgY2xhcmlmeSB0aGUgZG9jdW1lbnRhdGlvbgorICAgYW5kIG1ha2Ugc3VyZSB3ZSBkbyBub3QgZXZlbiB0cnkgdG8gZXhwYW5kIHRoZSBhdC1tYXJrIG1hZ2ljIGluCisgICBzdWNoIGEgY2FzZSwgYnV0IHN0aWxsIGNhbGwgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGJyYW5jaCBuYW1lcy4KKworICogImdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIgbm93IGtub3dzIHRoYXQgc3VibW9kdWxlcyBjYW4gYmUKKyAgIG1vdmVkIGFyb3VuZCBpbiB0aGUgc3VwZXJwcm9qZWN0IGluIGFkZGl0aW9uIHRvIGdldHRpbmcgdXBkYXRlZCwKKyAgIGFuZCBmaW5kcyB0aGUgb25lcyB0aGF0IG5lZWQgdG8gYmUgZmV0Y2hlZCBhY2NvcmRpbmdseS4KKworICogQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gKGluIGNvbnRyaWIvKSB1cGRhdGUuCisKKyAqIERlc2NyaXB0aW9uIG9mIGJsYW1lLntzaG93cm9vdCxibGFua2JvdW5kYXJ5LHNob3dlbWFpbCxkYXRlfQorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgaGF2ZSBiZWVuIGFkZGVkIHRvICJnaXQgY29uZmlnIC0taGVscCIuCisKKyAqIEFmdGVyIGFuIGVycm9yIGZyb20gbHN0YXQoKSwgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYygpIGZ1bmN0aW9uCisgICBzb21ldGltZXMgc3RpbGwgd2VudCBhaGVhZCBhbmQgdXNlZCBpbnZhbGlkIGRhdGEgaW4gc3RydWN0IHN0YXQsCisgICB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogVU5DIHBhdGhzIGFyZSBhbHNvIHJlbGV2YW50IGluIEN5Z3dpbiBidWlsZHMgYW5kIHRoZXkgYXJlIG5vdworICAgdGVzdGVkIGp1c3QgbGlrZSBNaW5ndyBidWlsZHMuCisKKyAqIENvcnJlY3Qgc3RhcnQtdXAgc2VxdWVuY2Ugc28gdGhhdCBhIHJlcG9zaXRvcnkgY291bGQgYmUgcGxhY2VkCisgICBpbW1lZGlhdGVseSB1bmRlciB0aGUgcm9vdCBkaXJlY3RvcnkgYWdhaW4gKHdoaWNoIHdhcyBicm9rZW4gYXQKKyAgIGFyb3VuZCBHaXQgMi4xMykuCisKKyAqIFRoZSBjcmVkZW50aWFsIGhlbHBlciBmb3IgbGlic2VjcmV0IChpbiBjb250cmliLykgaGFzIGJlZW4gaW1wcm92ZWQKKyAgIHRvIGFsbG93IHBvc3NpYmx5IHByb21wdGluZyB0aGUgZW5kIHVzZXIgdG8gdW5sb2NrIHNlY3JldHMgdGhhdCBhcmUKKyAgIGN1cnJlbnRseSBsb2NrZWQgKG90aGVyd2lzZSB0aGUgc2VjcmV0cyBtYXkgbm90IGJlIGxvYWRlZCkuCisKKyAqIE1pbkdXIHVwZGF0ZXMuCisKKyAqIEVycm9yIGNoZWNraW5nIGluICJnaXQgaW1hcC1zZW5kIiBmb3IgZW1wdHkgcmVzcG9uc2UgaGFzIGJlZW4KKyAgIGltcHJvdmVkLgorCisgKiBSZWNlbnQgdXBkYXRlIHRvIHRoZSByZWZzIGluZnJhc3RydWN0dXJlIGltcGxlbWVudGF0aW9uIHN0YXJ0ZWQKKyAgIHJld3JpdGluZyBwYWNrZWQtcmVmcyBmaWxlIG1vcmUgb2Z0ZW4gdGhhbiBiZWZvcmU7IHRoaXMgaGFzIGJlZW4KKyAgIG9wdGltaXplZCBhZ2FpbiBmb3IgbW9zdCB0cml2aWFsIGNhc2VzLgorCisgKiBTb21lIGVycm9yIG1lc3NhZ2VzIGRpZCBub3QgcXVvdGUgZmlsZW5hbWVzIHNob3duIGluIGl0LCB3aGljaCBoYXZlCisgICBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgcmVjZW50bHkgc3RhcnRlZCBtaXNiZWhhdmluZyB3aGVuIGEgc3VibW9kdWxlIHRoYXQKKyAgIGlzIGNvbmZpZ3VyZWQgd2l0aCAnc3VibW9kdWxlLjxuYW1lPi5pZ25vcmUnIGlzIGRpcnR5OyB0aGlzIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEJ1aWxkaW5nIHdpdGggTk9fTElCUENSRTFfSklUIGRpZCBub3QgZGlzYWJsZSBpdCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIFdlIHVzZWQgdG8gYWRkIGFuIGVtcHR5IGFsdGVybmF0ZSBvYmplY3QgZGF0YWJhc2UgdG8gdGhlIHN5c3RlbQorICAgdGhhdCBkb2VzIG5vdCBoZWxwIGFueXRoaW5nOyBpdCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIERvYyB1cGRhdGUgYXJvdW5kIHVzZSBvZiAiZm9ybWF0LXBhdGNoIC0tc3ViamVjdC1wcmVmaXgiIGV0Yy4KKworICogQSBmaXggZm9yIGFuIGFuY2llbnQgYnVnIGluICJnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIiBjb2RlcGF0aC4KKworICogQ2xhcmlmeSBhbmQgZW5oYW5jZSBkb2N1bWVudGF0aW9uIGZvciAibWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQiLCBhcworICAgaXQgd2FzIGNsZWFyIHdoYXQgaXQgY29tcHV0ZWQgYnV0IG5vdCB3aHkvd2hhdCBmb3IuCisKKyAqIEEgZmV3IHNjcmlwdHMgKGJvdGggaW4gcHJvZHVjdGlvbiBhbmQgdGVzdHMpIGluY29ycmVjdGx5IHJlZGlyZWN0ZWQKKyAgIHRoZWlyIGVycm9yIG91dHB1dC4gIFRoZXNlIGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgbm90ZXMiIHNlbnQgaXRzIGVycm9yIG1lc3NhZ2UgdG8gaXRzIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0sCisgICB3aGljaCB3YXMgY29ycmVjdGVkLgorCisgKiBUaGUgdGhyZWUtd2F5IG1lcmdlIHBlcmZvcm1lZCBieSAiZ2l0IGNoZXJyeS1waWNrIiB3YXMgY29uZnVzZWQKKyAgIHdoZW4gYSBuZXcgc3VibW9kdWxlIHdhcyBhZGRlZCBpbiB0aGUgbWVhbnRpbWUsIHdoaWNoIGhhcyBiZWVuCisgICBmaXhlZCAob3IgInBhcGVyZWQgb3ZlciIpLgorCisgKiBUaGUgc2VxdWVuY2VyIG1hY2hpbmVyeSAodXNlZCBieSAiZ2l0IGNoZXJyeS1waWNrIEEuLkIiLCBhbmQgImdpdAorICAgcmViYXNlIC1pIiwgYW1vbmcgb3RoZXIgdGhpbmdzKSB3b3VsZCBoYXZlIGxvc3QgYSBjb21taXQgaWYgc3RvcHBlZAorICAgZHVlIHRvIGFuIHVubG9ja2FibGUgaW5kZXggZmlsZSwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgYXBwbHkgLS1pbmFjY3VyYXRlLWVvZiIgd2hlbiB1c2VkIHdpdGggIi0taWdub3JlLXNwYWNlLWNoYW5nZSIKKyAgIHRyaWdnZXJlZCBhbiBpbnRlcm5hbCBzYW5pdHkgY2hlY2ssIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBDb21tYW5kIGxpbmUgY29tcGxldGlvbiAoaW4gY29udHJpYi8pIGhhcyBiZWVuIHRhdWdodCBhYm91dCB0aGUKKyAgICItLWNvcHkiIG9wdGlvbiBvZiAiZ2l0IGJyYW5jaCIuCisKKyAqIFdoZW4gImdpdCByZWJhc2UiIHByZXBhcmVkIGEgbWFpbGJveCBvZiBjaGFuZ2VzIGFuZCBmZWQgaXQgdG8gImdpdAorICAgYW0iIHRvIHJlcGxheSB0aGVtLCBpdCB3YXMgY29uZnVzZWQgd2hlbiBhIHN0cmF5ICJGcm9tICIgaGFwcGVuZWQKKyAgIHRvIGJlIGluIHRoZSBsb2cgbWVzc2FnZSBvZiBvbmUgb2YgdGhlIHJlcGxheWVkIGNoYW5nZXMuICBUaGlzIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZXJlIHdhcyBhIHJlY2VudCBzZW1hbnRpYyBtaXNtZXJnZSBpbiB0aGUgY29kZXBhdGggdG8gd3JpdGUgb3V0IGEKKyAgIHNlY3Rpb24gb2YgYSBjb25maWd1cmF0aW9uIHNlY3Rpb24sIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogTWVudGlvbnMgb2YgImdpdC1yZWJhc2UiIGFuZCAiZ2l0LWFtIiAoZGFzaGVkIGZvcm0pIHN0aWxsIHJlbWFpbmVkCisgICBpbiBlbmQtdXNlciB2aXNpYmxlIHN0cmluZ3MgZW1pdHRlZCBieSB0aGUgImdpdCByZWJhc2UiIGNvbW1hbmQ7CisgICB0aGV5IGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIENvbnRyYXJ5IHRvIHRoZSBkb2N1bWVudGF0aW9uLCAiZ2l0IHB1bGwgLTQvLTYgb3RoZXItYXJncyIgZGlkIG5vdAorICAgYXNrIHRoZSB1bmRlcmx5aW5nICJnaXQgZmV0Y2giIHRvIGdvIG92ZXIgSVB2NC9JUHY2LCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiAiZ2l0IGNoZWNrb3V0IC0tcmVjdXJzaXZlIiBtYXkgb3ZlcndyaXRlIGFuZCByZXdpbmQgdGhlIGhpc3Rvcnkgb2YKKyAgIHRoZSBicmFuY2ggdGhhdCBoYXBwZW5zIHRvIGJlIGNoZWNrZWQgb3V0IGluIHN1Ym1vZHVsZQorICAgcmVwb3NpdG9yaWVzLCB3aGljaCBtaWdodCBub3QgYmUgZGVzaXJhYmxlLiAgRGV0YWNoIHRoZSBIRUFEIGJ1dAorICAgc3RpbGwgYWxsb3cgdGhlIHJlY3Vyc2l2ZSBjaGVja291dCB0byBzdWNjZWVkIGluIHN1Y2ggYSBjYXNlLgorICAgKG1lcmdlIDU3ZjIyYmY5OTcgc2Ivc3VibW9kdWxlLXJlY3Vyc2l2ZS1jaGVja291dC1kZXRhY2gtaGVhZCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIiBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCAoc29ydCBvZikKKyAgIHJlbW92ZWQsIGFzICItLXNldC11cHN0cmVhbS10byIgaXMgdGhlIHByZWZlcnJlZCBvbmUgdGhlc2UgZGF5cy4KKyAgIFRoZSBkb2N1bWVudGF0aW9uIHN0aWxsIGhhZCAiLS1zZXQtdXBzdHJlYW0iIGxpc3RlZCBvbiBpdHMKKyAgIHN5bm9wc2lzIHNlY3Rpb24sIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBhMDYwZjNkM2Q4IHR6L2JyYW5jaC1kb2MtcmVtb3ZlLXNldC11cHN0cmVhbSBsYXRlciB0byBtYWludCkuCisKKyAqIEludGVybmFsbHkgd2UgdXNlIDB7NDB9IGFzIGEgcGxhY2Vob2xkZXIgb2JqZWN0IG5hbWUgdG8gc2lnbmFsIHRoZQorICAgY29kZXBhdGggdGhhdCB0aGVyZSBpcyBubyBzdWNoIG9iamVjdCAoZS5nLiB0aGUgZmFzdC1mb3J3YXJkIGNoZWNrCisgICB3aGlsZSAiZ2l0IGZldGNoIiBzdG9yZXMgYSBuZXcgcmVtb3RlLXRyYWNraW5nIHJlZiBzYXlzICJ3ZSBrbm93CisgICB0aGVyZSBpcyBubyAnb2xkJyB0aGluZyBwb2ludGVkIGF0IGJ5IHRoZSByZWYsIGFzIHdlIGFyZSBjcmVhdGluZworICAgaXQgYW5ldyIgYnkgcGFzc2luZyAwezQwfSBmb3IgdGhlICdvbGQnIHNpZGUpLCBhbmQgZXhwZWN0IHRoYXQgYQorICAgY29kZXBhdGggdG8gbG9jYXRlIGFuIGluLWNvcmUgb2JqZWN0IHRvIHJldHVybiBOVUxMIGFzIGEgc2lnbiB0aGF0CisgICB0aGUgb2JqZWN0IGRvZXMgbm90IGV4aXN0LiAgQSBsb29rLXVwIGZvciBhbiBvYmplY3QgdGhhdCBkb2VzIG5vdAorICAgZXhpc3QgaG93ZXZlciBpcyBxdWl0ZSBjb3N0bHkgd2l0aCBhIHJlcG9zaXRvcnkgd2l0aCBsYXJnZSBudW1iZXIKKyAgIG9mIHBhY2tmaWxlcy4gIFRoaXMgYWNjZXNzIHBhdHRlcm4gaGFzIGJlZW4gb3B0aW1pemVkLgorICAgKG1lcmdlIDg3YjVlMjM2YTEgamsvZmV3ZXItcGFjay1yZXNjYW4gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBJbiBhZGRpdGlvbiB0byAiZ2l0IHN0YXNoIC1tIG1lc3NhZ2UiLCB0aGUgY29tbWFuZCBsZWFybmVkIHRvCisgICBhY2NlcHQgImdpdCBzdGFzaCAtbW1lc3NhZ2UiIGZvcm0uCisgICAobWVyZ2UgNTY3NTQ3M2ZjYiBwaC9zdGFzaC1zYXZlLW0tb3B0aW9uLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIEB7LU59IGluICJnaXQgY2hlY2tvdXQgQHstTn0iIG1heSByZWZlciB0byBhIGRldGFjaGVkIEhFQUQgc3RhdGUsCisgICBidXQgdGhlIGRvY3VtZW50YXRpb24gd2FzIG5vdCBjbGVhciBhYm91dCBpdCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgNzVjZTE0OTU3NSBrcy9kb2MtY2hlY2tvdXQtcHJldmlvdXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIHJlZ3Jlc3Npb24gaW4gdGhlIHByb2dyZXNzIGV5ZS1jYW5keSB3YXMgZml4ZWQuCisgICAobWVyZ2UgOWM1OTUxY2FjZiBqay9wcm9ncmVzcy1kZWxheS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSBpbnRlcm5hbCB0byB0aGUgcmVjdXJzaXZlIG1lcmdlIHN0cmF0ZWd5IHdhcyBub3QgZnVsbHkKKyAgIHByZXBhcmVkIHRvIHNlZSBhIHBhdGggdGhhdCBpcyByZW5hbWVkIHRvIHRyeSBvdmVyd3JpdGluZyBhbm90aGVyCisgICBwYXRoIHRoYXQgaXMgb25seSBkaWZmZXJlbnQgaW4gY2FzZSBvbiBjYXNlIGluc2Vuc2l0aXZlIHN5c3RlbXMuCisgICBUaGlzIGRvZXMgbm90IG1hdHRlciBpbiB0aGUgY3VycmVudCBjb2RlLCBidXQgd2lsbCBzdGFydCB0byBtYXR0ZXIKKyAgIG9uY2UgdGhlIHJlbmFtZSBkZXRlY3Rpb24gbG9naWMgc3RhcnRzIHRha2luZyBoaW50cyBmcm9tIG5lYXJieQorICAgcGF0aHMgbW92aW5nIHRvIHNvbWUgZGlyZWN0b3J5IGFuZCBtb3ZlcyBhIG5ldyBwYXRoIGFsb25nIHdpdGggdGhlbS4KKyAgIChtZXJnZSA0Y2JhMmIwMTA4IGVuL21lcmdlLXJlY3Vyc2l2ZS1pY2FzZS1yZW1vdmFsIGxhdGVyIHRvIG1haW50KS4KKworICogQW4gdjIuMTItZXJhIHJlZ3Jlc3Npb24gaW4gcGF0aHNwZWMgbWF0Y2ggbG9naWMsIHdoaWNoIG1hZGUgaXQgbG9vaworICAgaW50byBzdWJtb2R1bGUgdHJlZSBldmVuIHdoZW4gaXQgaXMgbm90IGRlc2lyZWQsIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGVlZjNkZjVhOTMgYncvcGF0aHNwZWMtbWF0Y2gtc3VibW9kdWxlLWJvdW5kYXJ5IGxhdGVyIHRvIG1haW50KS4KKworICogQW1lbmRpbmcgY29tbWl0cyBpbiBnaXQtZ3VpIGJyb2tlIHRoZSBhdXRob3IgbmFtZSB0aGF0IGlzIG5vbi1hc2NpaQorICAgZHVlIHRvIGluY29ycmVjdCBlbmNvZGluZyBjb252ZXJzaW9uLgorCisgKiBSZWNlbnQgdXBkYXRlIHRvIHRoZSBzdWJtb2R1bGUgY29uZmlndXJhdGlvbiBjb2RlIGJyb2tlICJkaWZmLXRyZWUiCisgICBieSBhY2NpZGVudGFsbHkgc3RvcHBpbmcgdG8gcmVhZCBmcm9tIHRoZSBpbmRleCB1cGZyb250LgorICAgKG1lcmdlIGZkNjZiY2MzMWYgYncvc3VibW9kdWxlLWNvbmZpZy1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKworICogR2l0IHNob3dzIGEgbWVzc2FnZSB0byB0ZWxsIHRoZSB1c2VyIHRoYXQgaXQgaXMgd2FpdGluZyBmb3IgdGhlCisgICB1c2VyIHRvIGZpbmlzaCBlZGl0aW5nIHdoZW4gc3Bhd25pbmcgYW4gZWRpdG9yLCBpbiBjYXNlIHRoZSBlZGl0b3IKKyAgIG9wZW5zIHRvIGEgaGlkZGVuIHdpbmRvdyBvciBzb21ld2hlcmUgb2JzY3VyZSBhbmQgdGhlIHVzZXIgZ2V0cworICAgbG9zdC4KKyAgIChtZXJnZSBhYmZiMDRkMGM3IGxzL2VkaXRvci13YWl0aW5nLW1lc3NhZ2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgInNhZmUgY3JsZiIgY2hlY2sgaW5jb3JyZWN0bHkgdHJpZ2dlcmVkIGZvciBjb250ZW50cyB0aGF0IGRvZXMKKyAgIG5vdCB1c2UgQ1JMRiBhcyBsaW5lIGVuZGluZ3MsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA2NDlmMWYwOTQ4IHRiL2NoZWNrLWNybGYtZm9yLXNhZmUtY3JsZiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2xvbmUgLS1zaGFyZWQiIHRvIGJvcnJvdyBmcm9tIGEgKHNlY29uZGFyeSkgd29ya3RyZWUgZGlkIG5vdAorICAgd29yaywgZXZlbiB0aG91Z2ggImdpdCBjbG9uZSAtLWxvY2FsIiBkaWQuICBCb3RoIGFyZSBub3cgYWNjZXB0ZWQuCisgICAobWVyZ2UgYjNiMDU5NzFjMSBlcy9jbG9uZS1zaGFyZWQtd29ya3RyZWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgYnVpbGQgcHJvY2VkdXJlIG5vdyBhbGxvd3Mgbm90IGp1c3QgdGhlIHJlcG9zaXRvcmllcyBidXQgYWxzbworICAgdGhlIHJlZnMgdG8gYmUgdXNlZCB0byB0YWtlIHByZS1mb3JtYXR0ZWQgbWFucGFnZXMgYW5kIGh0bWwKKyAgIGRvY3VtZW50cyB0byBpbnN0YWxsLgorICAgKG1lcmdlIDY1Mjg5ZTlkY2QgcmIvcXVpY2staW5zdGFsbC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBVcGRhdGUgdGhlIHNoZWxsIHByb21wdCBzY3JpcHQgKGluIGNvbnRyaWIvKSB0byBzdHJpcCB0cmFpbGluZyBDUgorICAgZnJvbSBzdHJpbmdzIHJlYWQgZnJvbSB2YXJpb3VzICJzdGF0ZSIgZmlsZXMuCisgICAobWVyZ2UgMDQxZmU4ZmM4MyByYS9wcm9tcHQtZXJlYWQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtZXJnZSAtcyByZWN1cnNpdmUiIGRpZCBub3QgY29ycmVjdGx5IGFib3J0IHdoZW4gdGhlIGluZGV4IGlzCisgICBkaXJ0eSwgaWYgdGhlIG1lcmdlZCB0cmVlIGhhcHBlbmVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50CisgICBIRUFELCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogQnl0ZXMgd2l0aCBoaWdoLWJpdCBzZXQgd2VyZSBlbmNvZGVkIGluY29ycmVjdGx5IGFuZCBtYWRlCisgICBjcmVkZW50aWFsIGhlbHBlciBmYWlsLgorICAgKG1lcmdlIDRjMjY3ZjJhZTMgamQvZml4LXN0cmJ1Zi1hZGQtdXJsZW5jb2RlLWJ5dGVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgLXAgLVg8b3B0aW9uPiIgZGlkIG5vdCBwcm9wYWdhdGUgdGhlIG9wdGlvbiBwcm9wZXJseQorICAgZG93biB0byB1bmRlcmx5aW5nIG1lcmdlIHN0cmF0ZWd5IGJhY2tlbmQuCisgICAobWVyZ2UgZGQ2ZmIwMDUzYyBqcy9maXgtbWVyZ2UtYXJnLXF1b3RpbmctaW4tcmViYXNlLXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSIgZGlkIG5vdCBjb3JyZWN0bHkgYWJvcnQgd2hlbiB0aGUgaW5kZXggaXMKKyAgIGRpcnR5LCBpZiB0aGUgbWVyZ2VkIHRyZWUgaGFwcGVuZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQKKyAgIEhFQUQsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGYzMDllOGU3NjggZXcvZW1wdHktbWVyZ2Utd2l0aC1kaXJ0eS1pbmRleC1tYWludCBsYXRlciB0byBtYWludCkuCisKKyAqIE90aGVyIG1pbm9yIGRvYywgdGVzdCBhbmQgYnVpbGQgdXBkYXRlcyBhbmQgY29kZSBjbGVhbnVwcy4KKyAgIChtZXJnZSAxYTFmYzJkNWI1IHJkL21hbi1wcnVuZS1wcm9ncmVzcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMGJhMDE0MDM1YSByZC9tYW4tcmVmbG9nLWFkZC1uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlNTRiNjMzNTlmIHJkL2RvYy1ub3Rlcy1wcnVuZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZmNGM5YjQxM2Egc3AvZG9jLWluZm8tYXR0cmlidXRlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgN2RiMmNiZjRmMSBqYy9yZWNlaXZlLXBhY2staG9vay1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDVhMDUyNjI2NGIgdGcvdC1yZWFkbWUtdXBkYXRlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNWU4M2NjYTBiOCBqay9uby1vcHRpb25hbC1sb2NrcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODI2Yzc3OGY3YyBqcy9oYXNobWFwLXVwZGF0ZS1zYW1wbGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE3NmIyZDMyOGMgc2cvc2V0dXAtZG9jLXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMWIwOTA3MzUxNCBycy9hbS1idWlsdGluLWxlYWtmaXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGFkZGNmNmNmZGUgcnMvZm10LW1lcmdlLW1zZy1zdHJpbmctbGVhay1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGMzZmY4ZjZjMTQgcnMvc3RyYnVmLXJlYWQtb25jZS1yZXNldC1sZW5ndGggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDZiMGViODg0ZjkgZGIvZG9jLXdvcmtmbG93cy1uZXV0ZXItdGhlLW1haW50YWluZXIgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDhjODdiZGZiMjEgamsvY3ZzaW1wb3J0LXF1b3RpbmcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE3NmNiOTc5ZmUgcnMvZm10LW1lcmdlLW1zZy1sZWFrZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1YTAzMzYwZTczIHRiL2RlbGltaXQtcHJldHR5LXRyYWlsZXJzLWFyZ3Mtd2l0aC1jb21tYSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDBlNjMyNjAyNiBvdC9wcmV0dHkgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ0MTAzZjQxOTcgc2IvdGVzdC1oZWxwZXItZXhjbHVkZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE3MDA3ODY5M2YganQvdHJhbnNwb3J0LW5vLW1vcmUtcnN5bmMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGMwN2IzYWRmZjEgYncvcGF0aC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGJmOWQ3ZGY5NTAgdHovbGliLWdpdC1zdm4tc3Zuc2VydmUtdGVzdHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGRlYzM2NmM5YTggc3IvaHR0cC1zc2x2ZXJpZnktY29uZmlnLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgM2Y4MjRlOTFjOCBqay90ZXN0LXN1aXRlLXRyYWNpbmcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDFmZWIwNjE3MDEgZGIvZG9jLWNvbmZpZy1zZWN0aW9uLW5hbWVzLXdpdGgtYnMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDc0ZGVhMGUxM2MgamgvbWVtaWhhc2gtb3B0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyZTlmZGM3OTVjIG1hL2Jpc2VjdC1sZWFrZml4IGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmU2NDM2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjEudHh0CkBAIC0wLDAgKzEsMTEgQEAKK0dpdCB2Mi4xNi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTYKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgY2xvbmUiIHNlZ2ZhdWx0ZWQgd2hlbiBjbG9uaW5nIGEgcHJvamVjdCB0aGF0IGhhcHBlbnMgdG8KKyAgIHRyYWNrIHR3byBwYXRocyB0aGF0IGRpZmZlciBvbmx5IGluIGNhc2Ugb24gYSBjYXNlIGluc2Vuc2l0aXZlCisgICBmaWxlc3lzdGVtLgorCitEb2VzIG5vdCBjb250YWluIGFueSBvdGhlciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgb3IgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxNjQ2NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4yLnR4dApAQCAtMCwwICsxLDMwIEBACitHaXQgdjIuMTYuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjE2LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gb2xkIHJlZ3Jlc3Npb24gaW4gImdpdCBkZXNjcmliZSAtLWFsbCAkYW5ub3RhdGVkX3RhZ14wIiBoYXMgYmVlbgorICAgZml4ZWQuCisKKyAqICJnaXQgc3ZuIGRjb21taXQiIGRpZCBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIGZhY3QgdGhhdCBhCisgICBzdm4rc3NoOi8vIFVSTCB3aXRoIGEgdXNlcm5hbWVAICh0eXBpY2FsbHkgdXNlZCBmb3IgcHVzaGluZykgcmVmZXJzCisgICB0byB0aGUgc2FtZSBTVk4gcmVwb3NpdG9yeSB3aXRob3V0IHRoZSB1c2VybmFtZUAgYW5kIGZhaWxlZCB3aGVuCisgICBzdm4ucHVzaG1lcmdlaW5mbyBvcHRpb24gaXMgc2V0LgorCisgKiAiZ2l0IG1lcmdlIC1Yb3Vycy8tWHRoZWlycyIgbGVhcm5lZCB0byB1c2Ugb3VyL3RoZWlyIHZlcnNpb24gd2hlbgorICAgcmVzb2x2aW5nIGEgY29uZmxpY3RpbmcgdXBkYXRlcyB0byBhIHN5bWJvbGljIGxpbmsuCisKKyAqICJnaXQgY2xvbmUgJHRoZXJlICRoZXJlIiBpcyBhbGxvd2VkIGV2ZW4gd2hlbiBoZXJlIGRpcmVjdG9yeSBleGlzdHMKKyAgIGFzIGxvbmcgYXMgaXQgaXMgYW4gZW1wdHkgZGlyZWN0b3J5LCBidXQgdGhlIGNvbW1hbmQgaW5jb3JyZWN0bHkKKyAgIHJlbW92ZWQgaXQgdXBvbiBhIGZhaWx1cmUgb2YgdGhlIG9wZXJhdGlvbi4KKworICogImdpdCBzdGFzaCAtLSA8cGF0aHNwZWM+IiBpbmNvcnJlY3RseSBibGV3IGF3YXkgdW50cmFja2VkIGZpbGVzIGluCisgICB0aGUgZGlyZWN0b3J5IHRoYXQgbWF0Y2hlZCB0aGUgcGF0aHNwZWMsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBhZGQgLXAiIHdhcyB0YXVnaHQgdG8gaWdub3JlIGxvY2FsIGNoYW5nZXMgdG8gc3VibW9kdWxlcyBhcworICAgdGhleSBkbyBub3QgaW50ZXJmZXJlIHdpdGggdGhlIHBhcnRpYWwgYWRkaXRpb24gb2YgcmVndWxhciBjaGFuZ2VzCisgICBhbnl3YXkuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAxMjFhOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4zLnR4dApAQCAtMCwwICsxLDQ5IEBACitHaXQgdjIuMTYuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjE2LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBzdGF0dXMiIGFmdGVyIG1vdmluZyBhIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZSAoaGVuY2UgbWFraW5nCisgICBpdCBhcHBlYXIgInJlbW92ZWQiKSBhbmQgdGhlbiBhZGRpbmcgd2l0aCB0aGUgLU4gb3B0aW9uIChoZW5jZQorICAgbWFraW5nIHRoYXQgYXBwZWFyICJhZGRlZCIpIGRldGVjdGVkIGl0IGFzIGEgcmVuYW1lLCBidXQgZGlkIG5vdAorICAgcmVwb3J0IHRoZSAgb2xkIGFuZCBuZXcgcGF0aG5hbWVzIGNvcnJlY3RseS4KKworICogImdpdCBjb21taXQgLS1maXh1cCIgZGlkIG5vdCBhbGxvdyAiLW08bWVzc2FnZT4iIG9wdGlvbiB0byBiZSB1c2VkCisgICBhdCB0aGUgc2FtZSB0aW1lOyBhbGxvdyBpdCB0byBhbm5vdGF0ZSByZXN1bHRpbmcgY29tbWl0IHdpdGggbW9yZQorICAgdGV4dC4KKworICogV2hlbiByZXNldHRpbmcgdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyByZWN1cnNpdmVseSwgdGhlIHdvcmtpbmcgdHJlZQorICAgb2Ygc3VibW9kdWxlcyBhcmUgbm93IGFsc28gcmVzZXQgdG8gbWF0Y2guCisKKyAqIEZpeCBmb3IgYSBjb21tZW50ZWQtb3V0IGNvZGUgdG8gYWRqdXN0IGl0IHRvIGEgcmF0aGVyIG9sZCBBUEkgY2hhbmdlCisgICBhcm91bmQgb2JqZWN0IElELgorCisgKiBXaGVuIHRoZXJlIGFyZSB0b28gbWFueSBjaGFuZ2VkIHBhdGhzLCAiZ2l0IGRpZmYiIHNob3dlZCBhIHdhcm5pbmcKKyAgIG1lc3NhZ2UgYnV0IGluIHRoZSBtaWRkbGUgb2YgYSBsaW5lLgorCisgKiBUaGUgaHR0cCB0cmFjaW5nIGNvZGUsIG9mdGVuIHVzZWQgdG8gZGVidWcgY29ubmVjdGlvbiBpc3N1ZXMsCisgICBsZWFybmVkIHRvIHJlZGFjdCBwb3RlbnRpYWxseSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gZnJvbSBpdHMgb3V0cHV0CisgICBzbyB0aGF0IGl0IGNhbiBiZSBtb3JlIHNhZmVseSBzaGFyZWFibGUuCisKKyAqIENyYXNoIGZpeCBmb3IgYSBjb3JuZXIgY2FzZSB3aGVyZSBhbiBlcnJvciBjb2RlcGF0aCB0cmllZCB0byB1bmxvY2sKKyAgIHdoYXQgaXQgZGlkIG5vdCBhY3F1aXJlIGxvY2sgb24uCisKKyAqIFRoZSBzcGxpdC1pbmRleCBtb2RlIGhhZCBhIGZldyBjb3JuZXIgY2FzZSBidWdzIGZpeGVkLgorCisgKiBBc3NvcnRlZCBmaXhlcyB0byAiZ2l0IGRhZW1vbiIuCisKKyAqIENvbXBsZXRpb24gb2YgImdpdCBtZXJnZSAtczxzdHJhdGVneT4iIChpbiBjb250cmliLykgZGlkIG5vdCB3b3JrCisgICB3ZWxsIGluIG5vbi1DIGxvY2FsZS4KKworICogV29ya2Fyb3VuZCBmb3Igc2VnZmF1bHQgd2l0aCBtb3JlIHJlY2VudCB2ZXJzaW9ucyBvZiBTVk4uCisKKyAqIFJlY2VudGx5IGludHJvZHVjZWQgbGVha3MgaW4gZnNjayBoYXZlIGJlZW4gcGx1Z2dlZC4KKworICogVHJhdmlzIENJIGludGVncmF0aW9uIG5vdyBidWlsZHMgdGhlIGV4ZWN1dGFibGUgaW4gJ3NjcmlwdCcgcGhhc2UKKyAgIHRvIGZvbGxvdyB0aGUgZXN0YWJsaXNoZWQgcHJhY3RpY2UsIHJhdGhlciB0aGFuIGR1cmluZworICAgJ2JlZm9yZV9zY3JpcHQnIHBoYXNlLiAgVGhpcyBhbGxvd3MgdGhlIENJIGNhdGVnb3JpemUgdGhlIGZhaWx1cmVzCisgICBiZXR0ZXIgKCdmYWlsZWQnIGlzIHByb2plY3QncyBmYXVsdCwgJ2Vycm9yZWQnIGlzIGJ1aWxkCisgICBlbnZpcm9ubWVudCdzKS4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlNTM4YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi40LnR4dApAQCAtMCwwICsxLDUgQEAKK0dpdCB2Mi4xNi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGlzIHRvIGZvcndhcmQtcG9ydCB0aGUgZml4ZXMgbWFkZSBpbiB0aGUgdjIuMTMuNyB2ZXJzaW9uCitvZiBHaXQuICBTZWUgaXRzIHJlbGVhc2Ugbm90ZXMgZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4ZWUwMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi41LnR4dApAQCAtMCwwICsxLDYgQEAKK0dpdCB2Mi4xNi41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNSB0byBhZGRyZXNzCit0aGUgcmVjZW50bHkgcmVwb3J0ZWQgQ1ZFLTIwMTgtMTc0NTY7IHNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhhdAordmVyc2lvbiBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzgzMDZlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjYudHh0CkBAIC0wLDAgKzEsOCBAQAorR2l0IHYyLjE2LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHVwIHRoZSBmaXhlcyB0aGF0IGFwcGVhciBpbiB2Mi4xNC42IGFuZCBpbgordjIuMTUuNCBhZGRyZXNzaW5nIHRoZSBzZWN1cml0eSBpc3N1ZXMgQ1ZFLTIwMTktMTM0OCwgQ1ZFLTIwMTktMTM0OSwKK0NWRS0yMDE5LTEzNTAsIENWRS0yMDE5LTEzNTEsIENWRS0yMDE5LTEzNTIsIENWRS0yMDE5LTEzNTMsCitDVkUtMjAxOS0xMzU0LCBhbmQgQ1ZFLTIwMTktMTM4Nzsgc2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aG9zZQordmVyc2lvbnMgZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxN2MyNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy4wLnR4dApAQCAtMCwwICsxLDM5OCBAQAorR2l0IDIuMTcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYyLjE2CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiAiZGlmZiIgZmFtaWx5IG9mIGNvbW1hbmRzIGxlYXJuZWQgIi0tZmluZC1vYmplY3Q9PG9iamVjdC1pZD4iIG9wdGlvbgorICAgdG8gbGltaXQgdGhlIGZpbmRpbmdzIHRvIGNoYW5nZXMgdGhhdCBpbnZvbHZlIHRoZSBuYW1lZCBvYmplY3QuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIHRvIGdpdmUgNzItY29scyB0byBkaWZmc3RhdCwgd2hpY2ggaXMKKyAgIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBsaW5lIGxlbmd0aCBsaW1pdHMgdGhlIHN1YmNvbW1hbmQgdXNlcyBmb3IKKyAgIGl0cyBvdXRwdXQgbWVhbnQgZm9yIGUtbWFpbHMuCisKKyAqIFRoZSBsb2cgZnJvbSAiZ2l0IGRhZW1vbiIgY2FuIGJlIHJlZGlyZWN0ZWQgd2l0aCBhIG5ldyBvcHRpb247IG9uZQorICAgcmVsZXZhbnQgdXNlIGNhc2UgaXMgdG8gc2VuZCB0aGUgbG9nIHRvIHN0YW5kYXJkIGVycm9yIChpbnN0ZWFkIG9mCisgICBzeXNsb2cpIHdoZW4gcnVubmluZyBpdCBmcm9tIGluZXRkLgorCisgKiAiZ2l0IHJlYmFzZSIgbGVhcm5lZCB0byB0YWtlICItLWFsbG93LWVtcHR5LW1lc3NhZ2UiIG9wdGlvbi4KKworICogImdpdCBhbSIgaGFzIGxlYXJuZWQgdGhlICItLXF1aXQiIG9wdGlvbiwgaW4gYWRkaXRpb24gdG8gdGhlCisgICBleGlzdGluZyAiLS1hYm9ydCIgb3B0aW9uOyBoYXZpbmcgdGhlIHBhaXIgbWlycm9ycyBhIGZldyBvdGhlcgorICAgY29tbWFuZHMgbGlrZSAicmViYXNlIiBhbmQgImNoZXJyeS1waWNrIi4KKworICogImdpdCB3b3JrdHJlZSBhZGQiIGxlYXJuZWQgdG8gcnVuIHRoZSBwb3N0LWNoZWNrb3V0IGhvb2ssIGp1c3QgbGlrZQorICAgImdpdCBjbG9uZSIgcnVucyBpdCB1cG9uIHRoZSBpbml0aWFsIGNoZWNrb3V0LgorCisgKiAiZ2l0IHRhZyIgbGVhcm5lZCBhbiBleHBsaWNpdCAiLS1lZGl0IiBvcHRpb24gdGhhdCBhbGxvd3MgdGhlCisgICBtZXNzYWdlIGdpdmVuIHZpYSAiLW0iIGFuZCAiLUYiIHRvIGJlIGZ1cnRoZXIgZWRpdGVkLgorCisgKiAiZ2l0IGZldGNoIC0tcHJ1bmUtdGFncyIgbWF5IGJlIHVzZWQgYXMgYSBoYW5keSBzaG9ydC1oYW5kIGZvcgorICAgZ2V0dGluZyByaWQgb2Ygc3RhbGUgdGFncyB0aGF0IGFyZSBsb2NhbGx5IGhlbGQuCisKKyAqIFRoZSBuZXcgIi0tc2hvdy1jdXJyZW50LXBhdGNoIiBvcHRpb24gZ2l2ZXMgYW4gZW5kLXVzZXIgZmFjaW5nIHdheQorICAgdG8gZ2V0IHRoZSBkaWZmIGJlaW5nIGFwcGxpZWQgd2hlbiAiZ2l0IHJlYmFzZSIgKGFuZCAiZ2l0IGFtIikKKyAgIHN0b3BzIHdpdGggYSBjb25mbGljdC4KKworICogImdpdCBhZGQgLXAiIHVzZWQgdG8gb2ZmZXIgIi8iIChsb29rIGZvciBhIG1hdGNoaW5nIGh1bmspIGFzIGEKKyAgIGNob2ljZSwgZXZlbiB0aGVyZSB3YXMgb25seSBvbmUgaHVuaywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgQWxzbyB0aGUgc2luZ2xlLWtleSBoZWxwIGlzIG5vdyBnaXZlbiBvbmx5IGZvciBrZXlzIHRoYXQgYXJlCisgICBlbmFibGVkIChlLmcuIGhlbHAgZm9yICcvJyB3b24ndCBiZSBzaG93biB3aGVuIHRoZXJlIGlzIG9ubHkgb25lCisgICBodW5rKS4KKworICogU2luY2UgR2l0IDEuNy45LCAiZ2l0IG1lcmdlIiBkZWZhdWx0ZWQgdG8gLS1uby1mZiAoaS5lLiBldmVuIHdoZW4KKyAgIHRoZSBzaWRlIGJyYW5jaCBiZWluZyBtZXJnZWQgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IGNvbW1pdCwKKyAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCBpbnN0ZWFkIG9mIGZhc3QtZm9yd2FyZGluZykgd2hlbiBtZXJnaW5nIGEKKyAgIHRhZyBvYmplY3QuICBUaGlzIHdhcyBhcHByb3ByaWF0ZSBkZWZhdWx0IGZvciBpbnRlZ3JhdG9ycyB3aG8gcHVsbAorICAgc2lnbmVkIHRhZ3MgZnJvbSB0aGVpciBkb3duc3RyZWFtIGNvbnRyaWJ1dG9ycywgYnV0IGNhdXNlZCBhbgorICAgdW5uZWNlc3NhcnkgbWVyZ2VzIHdoZW4gdXNlZCBieSBkb3duc3RyZWFtIGNvbnRyaWJ1dG9ycyB3aG8KKyAgIGhhYml0dWFsbHkgImNhdGNoIHVwIiB0aGVpciB0b3BpYyBicmFuY2hlcyB3aXRoIHRhZ2dlZCByZWxlYXNlcworICAgZnJvbSB0aGUgdXBzdHJlYW0uICBVcGRhdGUgImdpdCBtZXJnZSIgdG8gZGVmYXVsdCB0byAtLW5vLWZmIG9ubHkKKyAgIHdoZW4gbWVyZ2luZyBhIHRhZyBvYmplY3QgdGhhdCBkb2VzICpub3QqIHNpdCBhdCBpdHMgdXN1YWwgcGxhY2UgaW4KKyAgIHJlZnMvdGFncy8gaGllcmFyY2h5LCBhbmQgYWxsb3cgZmFzdC1mb3J3YXJkaW5nIG90aGVyd2lzZSwgdG8KKyAgIG1pdGlnYXRlIHRoZSBwcm9ibGVtLgorCisgKiAiZ2l0IHN0YXR1cyIgY2FuIHNwZW5kIGEgbG90IG9mIGN5Y2xlcyB0byBjb21wdXRlIHRoZSByZWxhdGlvbgorICAgYmV0d2VlbiB0aGUgY3VycmVudCBicmFuY2ggYW5kIGl0cyB1cHN0cmVhbSwgd2hpY2ggY2FuIG5vdyBiZQorICAgZGlzYWJsZWQgd2l0aCAiLS1uby1haGVhZC1iZWhpbmQiIG9wdGlvbi4KKworICogImdpdCBkaWZmIiBhbmQgZnJpZW5kcyBsZWFybmVkIGZ1bmNuYW1lIHBhdHRlcm5zIGZvciBHbyBsYW5ndWFnZQorICAgc291cmNlIGZpbGVzLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGxlYXJuZWQgIi0tcmVwbHktdG89PGFkZHJlc3M+IiBvcHRpb24uCisKKyAqIEZ1bmNuYW1lIHBhdHRlcm4gdXNlZCBmb3IgQyMgbm93IHJlY29nbml6ZXMgImFzeW5jIiBrZXl3b3JkLgorCisgKiBJbiBhIHdheSBzaW1pbGFyIHRvIGhvdyAiZ2l0IHRhZyIgbGVhcm5lZCB0byBob25vciB0aGUgcGFnZXIKKyAgIHNldHRpbmcgb25seSBpbiB0aGUgbGlzdCBtb2RlLCAiZ2l0IGNvbmZpZyIgbGVhcm5lZCB0byBpZ25vcmUgdGhlCisgICBwYWdlciBzZXR0aW5nIHdoZW4gaXQgaXMgdXNlZCBmb3Igc2V0dGluZyB2YWx1ZXMgKGkuZS4gd2hlbiB0aGUKKyAgIHB1cnBvc2Ugb2YgdGhlIG9wZXJhdGlvbiBpcyBub3QgdG8gInNob3ciKS4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBNb3JlIHBlcmYgdGVzdHMgZm9yIHRocmVhZGVkIGdyZXAKKworICogInBlcmYiIHRlc3Qgb3V0cHV0IGNhbiBiZSBzZW50IHRvIGNvZGVzcGVlZCBzZXJ2ZXIuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgZm9yIHBlcmwvIHBhcnQgaGFzIGJlZW4gZ3JlYXRseSBzaW1wbGlmaWVkIGJ5CisgICB3ZWFuaW5nIG91cnNlbHZlcyBvZmYgb2YgTWFrZU1ha2VyLgorCisgKiBQZXJsIDUuOCBvciBncmVhdGVyIGhhcyBiZWVuIHJlcXVpcmVkIHNpbmNlIEdpdCAxLjcuNCByZWxlYXNlZCBpbgorICAgMjAxMCwgYnV0IHdlIGNvbnRpbnVlZCB0byBhc3N1bWUgc29tZSBjb3JlIG1vZHVsZXMgbWF5IG5vdCBleGlzdCBhbmQKKyAgIHVzZWQgYSBjb25kaXRpb25hbCAiZXZhbCB7IHJlcXVpcmUgPDxtb2R1bGU+PiB9Ijsgd2Ugbm8gbG9uZ2VyIGRvCisgICB0aGlzLiAgU29tZSBwbGF0Zm9ybXMgKEZlZG9yYS9SZWRIYXQvQ2VudE9TLCBmb3IgZXhhbXBsZSkgc2hpcCBQZXJsCisgICB3aXRob3V0IGFsbCBjb3JlIG1vZHVsZXMgYnkgZGVmYXVsdCAoZS5nLiBEaWdlc3Q6Ok1ENSwgRmlsZTo6VGVtcCwKKyAgIEZpbGU6OlNwZWMsIE5ldDo6RG9tYWluLCBOZXQ6OlNNVFApLiAgVXNlcnMgb24gc3VjaCBwbGF0Zm9ybXMgbWF5CisgICBuZWVkIHRvIGluc3RhbGwgdGhlc2UgYWRkaXRpb25hbCBtb2R1bGVzLgorCisgKiBBcyBhIGNvbnZlbmllbmNlLCB3ZSBpbnN0YWxsIGNvcGllcyBvZiBQZXJsIG1vZHVsZXMgd2UgcmVxdWlyZSB3aGljaAorICAgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjb3JlIFBlcmwgZGlzdHJpYnV0aW9uIChlLmcuIEVycm9yIGFuZAorICAgTWFpbDo6QWRkcmVzcykuICBVc2VycyBhbmQgcGFja2FnZXJzIHdob3NlIG9wZXJhdGluZyBzeXN0ZW0gcHJvdmlkZXMKKyAgIHRoZXNlIG1vZHVsZXMgY2FuIHNldCBOT19QRVJMX0NQQU5fRkFMTEJBQ0tTIHRvIGF2b2lkIGluc3RhbGxpbmcgdGhlCisgICBidW5kbGVkIG1vZHVsZXMuCisKKyAqIEluIHByZXBhcmF0aW9uIGZvciBpbXBsZW1lbnRpbmcgbmFycm93L3BhcnRpYWwgY2xvbmUsIHRoZSBtYWNoaW5lcnkKKyAgIGZvciBjaGVja2luZyBvYmplY3QgY29ubmVjdGl2aXR5IHVzZWQgYnkgZ2MgYW5kIGZzY2sgaGFzIGJlZW4KKyAgIHRhdWdodCB0aGF0IGEgbWlzc2luZyBvYmplY3QgaXMgT0sgd2hlbiBpdCBpcyByZWZlcmVuY2VkIGJ5IGEKKyAgIHBhY2tmaWxlIHNwZWNpYWxseSBtYXJrZWQgYXMgY29taW5nIGZyb20gdHJ1c3RlZCByZXBvc2l0b3J5IHRoYXQKKyAgIHByb21pc2VzIHRvIG1ha2UgdGhlbSBhdmFpbGFibGUgb24tZGVtYW5kIGFuZCBsYXppbHkuCisKKyAqIFRoZSBtYWNoaW5lcnkgdG8gY2xvbmUgJiBmZXRjaCwgd2hpY2ggaW4gdHVybiBpbnZvbHZlcyBwYWNraW5nIGFuZAorICAgdW5wYWNraW5nIG9iamVjdHMsIGhhcyBiZWVuIHRvbGQgaG93IHRvIG9taXQgY2VydGFpbiBvYmplY3RzIHVzaW5nCisgICB0aGUgZmlsdGVyaW5nIG1lY2hhbmlzbSBpbnRyb2R1Y2VkIGJ5IGFub3RoZXIgdG9waWMuICBJdCBub3cga25vd3MKKyAgIHRvIG1hcmsgdGhlIHJlc3VsdGluZyBwYWNrIGFzIGEgcHJvbWlzb3IgcGFjayB0byB0b2xlcmF0ZSBtaXNzaW5nCisgICBvYmplY3RzLCBsYXlpbmcgZm91bmRhdGlvbiBmb3IgIm5hcnJvdyIgY2xvbmVzLgorCisgKiBUaGUgZmlyc3Qgc3RlcCB0byBnZXR0aW5nIHJpZCBvZiBtcnUgQVBJIGFuZCB1c2luZyB0aGUKKyAgIGRvdWJseS1saW5rZWQgbGlzdCBBUEkgZGlyZWN0bHkgaW5zdGVhZC4KKworICogUmV0aXJlIG1ydSBBUEkgYXMgaXQgZG9lcyBub3QgZ2l2ZSBlbm91Z2ggYWJzdHJhY3Rpb24gb3ZlcgorICAgdW5kZXJseWluZyBsaXN0IEFQSSB0byBiZSB3b3J0aCBpdC4KKworICogUmV3cml0ZSB0d28gbW9yZSAiZ2l0IHN1Ym1vZHVsZSIgc3ViY29tbWFuZHMgaW4gQy4KKworICogVGhlIHRyYWNpbmcgbWFjaGluZXJ5IGxlYXJuZWQgdG8gcmVwb3J0IHR3ZWFraW5nIG9mIGVudmlyb25tZW50CisgICB2YXJpYWJsZXMgYXMgd2VsbC4KKworICogVXBkYXRlIENvY2NpbmVsbGUgcnVsZXMgdG8gY2F0Y2ggYW5kIG9wdGltaXplIHN0cmJ1Zl9hZGRmKCZidWYsICIlcyIsIHN0cikKKworICogUHJldmVudCAiY2xhbmctZm9ybWF0IiBmcm9tIGJyZWFraW5nIGxpbmUgYWZ0ZXIgZnVuY3Rpb24gcmV0dXJuIHR5cGUuCisKKyAqIFRoZSBzZXF1ZW5jZXIgaW5mcmFzdHJ1Y3R1cmUgaXMgc2hhcmVkIGFjcm9zcyAiZ2l0IGNoZXJyeS1waWNrIiwKKyAgICJnaXQgcmViYXNlIC1pIiwgZXRjLiwgYW5kIGhhcyBhbHdheXMgc3Bhd25lZCAiZ2l0IGNvbW1pdCIgd2hlbiBpdAorICAgbmVlZHMgdG8gY3JlYXRlIGEgY29tbWl0LiAgSXQgaGFzIGJlZW4gdGF1Z2h0IHRvIGRvIHNvIGludGVybmFsbHksCisgICB3aGVuIGFibGUsIGJ5IHJldXNpbmcgdGhlIGNvZGVwYXRoICJnaXQgY29tbWl0IiBpdHNlbGYgdXNlcywgd2hpY2gKKyAgIGdpdmVzIHBlcmZvcm1hbmNlIGJvb3N0IGZvciBhIGZldyB0ZW5zIG9mIHBlcmNlbnRzIGluIHNvbWUgc2FtcGxlCisgICBzY2VuYXJpb3MuCisKKyAqIFB1c2ggdGhlIHN1Ym1vZHVsZSB2ZXJzaW9uIG9mIGNvbGxpc2lvbi1kZXRlY3RpbmcgU0hBLTEgaGFzaAorICAgaW1wbGVtZW50YXRpb24gYSBiaXQgaGFyZGVyIG9uIGJ1aWxkZXJzLgorCisgKiBBdm9pZCBtbWFwcGluZyBzbWFsbCBmaWxlcyB3aGlsZSB1c2luZyBwYWNrZWQgcmVmcyAoZXNwZWNpYWxseSBvbmVzCisgICB3aXRoIHplcm8gc2l6ZSwgd2hpY2ggd291bGQgY2F1c2UgbGF0ZXIgbXVubWFwKCkgdG8gZmFpbCkuCisKKyAqIENvbnZlcnNpb24gZnJvbSB1Y2hhclsyMF0gdG8gc3RydWN0IG9iamVjdF9pZCBjb250aW51ZXMuCisKKyAqIE1vcmUgdGVzdHMgZm9yIHdpbGRtYXRjaCBmdW5jdGlvbnMuCisKKyAqIFRoZSBjb2RlIHRvIGJpbmFyeSBzZWFyY2ggc3RhcnRpbmcgZnJvbSBhIGZhbi1vdXQgdGFibGUgKHdoaWNoIGlzCisgICBob3cgdGhlIHBhY2tmaWxlIGlzIGluZGV4ZWQgd2l0aCBvYmplY3QgbmFtZXMpIGhhcyBiZWVuIHJlZmFjdG9yZWQKKyAgIGludG8gYSByZXVzYWJsZSBoZWxwZXIuCisKKyAqIFdlIG5vdyBhdm9pZCB1c2luZyBpZGVudGlmaWVycyB0aGF0IGNsYXNoIHdpdGggQysrIGtleXdvcmRzLiAgRXZlbgorICAgdGhvdWdoIGl0IGlzIG5vdCBhIGdvYWwgdG8gY29tcGlsZSBHaXQgd2l0aCBDKysgY29tcGlsZXJzLCBjaGFuZ2VzCisgICBsaWtlIHRoaXMgaGVscCB1c2Ugb2YgY29kZSBhbmFseXNpcyB0b29scyB0aGF0IHRhcmdldHMgQysrIG9uIG91cgorICAgY29kZWJhc2UuCisKKyAqIFRoZSBleGVjdXRhYmxlIGlzIG5vdyBidWlsdCBpbiAnc2NyaXB0JyBwaGFzZSBpbiBUcmF2aXMgQ0kgaW50ZWdyYXRpb24sCisgICB0byBmb2xsb3cgdGhlIGVzdGFibGlzaGVkIHByYWN0aWNlLCByYXRoZXIgdGhhbiBkdXJpbmcgJ2JlZm9yZV9zY3JpcHQnCisgICBwaGFzZS4gIFRoaXMgYWxsb3dzIHRoZSBDSSBjYXRlZ29yaXplIHRoZSBmYWlsdXJlcyBiZXR0ZXIgKCdmYWlsZWQnCisgICBpcyBwcm9qZWN0J3MgZmF1bHQsICdlcnJvcmVkJyBpcyBidWlsZCBlbnZpcm9ubWVudCdzKS4KKyAgIChtZXJnZSAzYzkzYjgyOTIwIHNnL3RyYXZpcy1idWlsZC1kdXJpbmctc2NyaXB0LXBoYXNlIGxhdGVyIHRvIG1haW50KS4KKworICogV3JpdGluZyBvdXQgdGhlIGluZGV4IGZpbGUgd2hlbiB0aGUgb25seSB0aGluZyB0aGF0IGNoYW5nZWQgaW4gaXQKKyAgIGlzIHRoZSB1bnRyYWNrZWQgY2FjaGUgaW5mb3JtYXRpb24gaXMgb2Z0ZW4gd2FzdGVmdWwsIGFuZCB0aGlzIGhhcworICAgYmVlbiBvcHRpbWl6ZWQgb3V0LgorCisgKiBWYXJpb3VzIHBpZWNlcyBvZiBQZXJsIGNvZGUgd2UgaGF2ZSBoYXZlIGJlZW4gY2xlYW5lZCB1cC4KKworICogSW50ZXJuYWwgQVBJIGNsZWFuLXVwIHRvIGFsbG93IHdyaXRlX2xvY2tlZF9pbmRleCgpIG9wdGlvbmFsbHkgc2tpcAorICAgd3JpdGluZyB0aGUgaW4tY29yZSBpbmRleCB3aGVuIGl0IGlzIG5vdCBtb2RpZmllZC4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi4xNgorLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gb2xkIHJlZ3Jlc3Npb24gaW4gImdpdCBkZXNjcmliZSAtLWFsbCAkYW5ub3RhdGVkX3RhZ14wIiBoYXMgYmVlbgorICAgZml4ZWQuCisKKyAqICJnaXQgc3RhdHVzIiBhZnRlciBtb3ZpbmcgYSBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUgKGhlbmNlIG1ha2luZworICAgaXQgYXBwZWFyICJyZW1vdmVkIikgYW5kIHRoZW4gYWRkaW5nIHdpdGggdGhlIC1OIG9wdGlvbiAoaGVuY2UKKyAgIG1ha2luZyB0aGF0IGFwcGVhciAiYWRkZWQiKSBkZXRlY3RlZCBpdCBhcyBhIHJlbmFtZSwgYnV0IGRpZCBub3QKKyAgIHJlcG9ydCB0aGUgIG9sZCBhbmQgbmV3IHBhdGhuYW1lcyBjb3JyZWN0bHkuCisKKyAqICJnaXQgc3ZuIGRjb21taXQiIGRpZCBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIGZhY3QgdGhhdCBhCisgICBzdm4rc3NoOi8vIFVSTCB3aXRoIGEgdXNlcm5hbWVAICh0eXBpY2FsbHkgdXNlZCBmb3IgcHVzaGluZykgcmVmZXJzCisgICB0byB0aGUgc2FtZSBTVk4gcmVwb3NpdG9yeSB3aXRob3V0IHRoZSB1c2VybmFtZUAgYW5kIGZhaWxlZCB3aGVuCisgICBzdm4ucHVzaG1lcmdlaW5mbyBvcHRpb24gaXMgc2V0LgorCisgKiBBUEkgY2xlYW4tdXAgYXJvdW5kIHJldmlzaW9uIHRyYXZlcnNhbC4KKworICogImdpdCBtZXJnZSAtWG91cnMvLVh0aGVpcnMiIGxlYXJuZWQgdG8gdXNlIG91ci90aGVpciB2ZXJzaW9uIHdoZW4KKyAgIHJlc29sdmluZyBhIGNvbmZsaWN0aW5nIHVwZGF0ZXMgdG8gYSBzeW1ib2xpYyBsaW5rLgorCisgKiAiZ2l0IGNsb25lICR0aGVyZSAkaGVyZSIgaXMgYWxsb3dlZCBldmVuIHdoZW4gaGVyZSBkaXJlY3RvcnkgZXhpc3RzCisgICBhcyBsb25nIGFzIGl0IGlzIGFuIGVtcHR5IGRpcmVjdG9yeSwgYnV0IHRoZSBjb21tYW5kIGluY29ycmVjdGx5CisgICByZW1vdmVkIGl0IHVwb24gYSBmYWlsdXJlIG9mIHRoZSBvcGVyYXRpb24uCisKKyAqICJnaXQgY29tbWl0IC0tZml4dXAiIGRpZCBub3QgYWxsb3cgIi1tPG1lc3NhZ2U+IiBvcHRpb24gdG8gYmUgdXNlZAorICAgYXQgdGhlIHNhbWUgdGltZTsgYWxsb3cgaXQgdG8gYW5ub3RhdGUgcmVzdWx0aW5nIGNvbW1pdCB3aXRoIG1vcmUKKyAgIHRleHQuCisKKyAqIFdoZW4gcmVzZXR0aW5nIHRoZSB3b3JraW5nIHRyZWUgZmlsZXMgcmVjdXJzaXZlbHksIHRoZSB3b3JraW5nIHRyZWUKKyAgIG9mIHN1Ym1vZHVsZXMgYXJlIG5vdyBhbHNvIHJlc2V0IHRvIG1hdGNoLgorCisgKiAiZ2l0IHN0YXNoIC0tIDxwYXRoc3BlYz4iIGluY29ycmVjdGx5IGJsZXcgYXdheSB1bnRyYWNrZWQgZmlsZXMgaW4KKyAgIHRoZSBkaXJlY3RvcnkgdGhhdCBtYXRjaGVkIHRoZSBwYXRoc3BlYywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBJbnN0ZWFkIG9mIG1haW50YWluaW5nIGhvbWUtZ3Jvd24gZW1haWwgYWRkcmVzcyBwYXJzaW5nIGNvZGUsIHNoaXAKKyAgIGEgY29weSBvZiByZWFzb25hYmx5IHJlY2VudCBNYWlsOjpBZGRyZXNzIHRvIGJlIHVzZWQgYXMgYSBmYWxsYmFjaworICAgaW4gJ2dpdCBzZW5kLWVtYWlsJyB3aGVuIHRoZSBwbGF0Zm9ybSBsYWNrcyBpdC4KKyAgIChtZXJnZSBkNjBiZThhY2FiIG1tL3NlbmQtZW1haWwtZmFsbGJhY2stdG8tbG9jYWwtbWFpbC1hZGRyZXNzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBhZGQgLXAiIHdhcyB0YXVnaHQgdG8gaWdub3JlIGxvY2FsIGNoYW5nZXMgdG8gc3VibW9kdWxlcyBhcworICAgdGhleSBkbyBub3QgaW50ZXJmZXJlIHdpdGggdGhlIHBhcnRpYWwgYWRkaXRpb24gb2YgcmVndWxhciBjaGFuZ2VzCisgICBhbnl3YXkuCisKKyAqIEF2b2lkIHNob3dpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgaW4gdGhlIG1pZGRsZSBvZiBhIGxpbmUgb2YgImdpdAorICAgZGlmZiIgb3V0cHV0LgorICAgKG1lcmdlIDRlMDU2Yzk4OWYgbmQvZGlmZi1mbHVzaC1iZWZvcmUtd2FybmluZyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBodHRwIHRyYWNpbmcgY29kZSwgb2Z0ZW4gdXNlZCB0byBkZWJ1ZyBjb25uZWN0aW9uIGlzc3VlcywKKyAgIGxlYXJuZWQgdG8gcmVkYWN0IHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBmcm9tIGl0cyBvdXRwdXQKKyAgIHNvIHRoYXQgaXQgY2FuIGJlIG1vcmUgc2FmZWx5IHNoYXJlYWJsZS4KKyAgIChtZXJnZSA4YmExOGU2ZmE0IGp0L2h0dHAtcmVkYWN0LWNvb2tpZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDcmFzaCBmaXggZm9yIGEgY29ybmVyIGNhc2Ugd2hlcmUgYW4gZXJyb3IgY29kZXBhdGggdHJpZWQgdG8gdW5sb2NrCisgICB3aGF0IGl0IGRpZCBub3QgYWNxdWlyZSBsb2NrIG9uLgorICAgKG1lcmdlIDgxZmNiNjk4ZTAgbXIvcGFja2VkLXJlZi1zdG9yZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgc3BsaXQtaW5kZXggbW9kZSBoYWQgYSBmZXcgY29ybmVyIGNhc2UgYnVncyBmaXhlZC4KKyAgIChtZXJnZSBhZTU5YTRlNDRmIHRnL3NwbGl0LWluZGV4LWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogQXNzb3J0ZWQgZml4ZXMgdG8gImdpdCBkYWVtb24iLgorICAgKG1lcmdlIGVkMTVlNThlZmUgamsvZGFlbW9uLWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogQ29tcGxldGlvbiBvZiAiZ2l0IG1lcmdlIC1zPHN0cmF0ZWd5PiIgKGluIGNvbnRyaWIvKSBkaWQgbm90IHdvcmsKKyAgIHdlbGwgaW4gbm9uLUMgbG9jYWxlLgorICAgKG1lcmdlIDdjYzc2M2FhYTMgbmQvbGlzdC1tZXJnZS1zdHJhdGVneSBsYXRlciB0byBtYWludCkuCisKKyAqIFdvcmthcm91bmQgZm9yIHNlZ2ZhdWx0IHdpdGggbW9yZSByZWNlbnQgdmVyc2lvbnMgb2YgU1ZOLgorICAgKG1lcmdlIDdmNmY3NWU5N2EgZXcvc3ZuLWJyYW5jaC1zZWdmYXVsdC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBQbHVnIHJlY2VudGx5IGludHJvZHVjZWQgbGVha3MgaW4gZnNjay4KKyAgIChtZXJnZSBiYTNhMDhjYTBlIGp0L2ZzY2stY29kZS1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiBkaWQgbm90IHBhc3MgdmVyYm9zaXR5IHNldHRpbmcgZG93biB3aGVuCisgICByZWN1cnNpbmcgaW50byBhIHN1Ym1vZHVsZS4KKyAgIChtZXJnZSBhNTY3NzFhNjY4IHNiL3B1bGwtcmViYXNlLXN1Ym1vZHVsZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSB3YXkgImdpdCByZXNldCAtLWhhcmQiIHJlcG9ydHMgdGhlIGNvbW1pdCB0aGUgdXBkYXRlZCBIRUFECisgICBwb2ludHMgYXQgaXMgbWFkZSBjb25zaXN0ZW50IHdpdGggdGhlIHdheSBob3cgdGhlIGNvbW1pdCB0aXRsZSBpcworICAgZ2VuZXJhdGVkIGJ5IHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiAgVGhpcyBtYXR0ZXJzIHdoZW4gdGhlCisgICB0aXRsZSBpcyBzcHJlYWQgYWNyb3NzIHBoeXNpY2FsbHkgbXVsdGlwbGUgbGluZXMuCisgICAobWVyZ2UgMWNmODIzZmI2OCB0Zy9yZXNldC1oYXJkLXNob3ctaGVhZC13aXRoLXByZXR0eSBsYXRlciB0byBtYWludCkuCisKKyAqIFRlc3QgZml4ZXMuCisgICAobWVyZ2UgNjNiMWExNzVlZSBzZy90ZXN0LWkxOG5ncmVwIGxhdGVyIHRvIG1haW50KS4KKworICogU29tZSBidWdzIGFyb3VuZCAidW50cmFja2VkIGNhY2hlIiBmZWF0dXJlIGhhdmUgYmVlbiBmaXhlZC4gIFRoaXMKKyAgIHdpbGwgbm90aWNlIGNvcnJ1cHQgZGF0YSBpbiB0aGUgdW50cmFja2VkIGNhY2hlIGxlZnQgYnkgb2xkIGFuZAorICAgYnVnZ3kgY29kZSBhbmQgaXNzdWUgYSB3YXJuaW5nLS0tdGhlIGluZGV4IGNhbiBiZSBmaXhlZCBieSBjbGVhcmluZworICAgdGhlIHVudHJhY2tlZCBjYWNoZSBmcm9tIGl0LgorICAgKG1lcmdlIDBjYWNlYmYwOTkgbmQvZml4LXVudHJhY2tlZC1jYWNoZS1pbnZhbGlkYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdiZjBiZTc1MDEgYWIvdW50cmFja2VkLWNhY2hlLWludmFsaWRhdGlvbi1kb2NzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBibGFtZSBIRUFEIENPUFlJTkciIGluIGEgYmFyZSByZXBvc2l0b3J5IGZhaWxlZCB0byBydW4sIHdoaWxlCisgICAiZ2l0IGJsYW1lIEhFQUQgLS0gQ09QWUlORyIgcnVuIGp1c3QgZmluZS4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGFkZCIgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LCBidXQgc3BlbGxpbmcgdGhlIGRpcmVjdG9yeQorICAgcGF0aCBpbiBkaWZmZXJlbnQgY2FzZXMgb24gY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtLCBjb3JydXB0ZWQKKyAgIHRoZSBuYW1lIGhhc2ggZGF0YSBzdHJ1Y3R1cmUgYW5kIGxlZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMuICBUaGlzCisgICBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYzk1NTI1ZTkwZCBicC9uYW1lLWhhc2gtZGlybmFtZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtcCIgbWFuZ2xlZCBsb2cgbWVzc2FnZXMgb2YgYSBtZXJnZSBjb21taXQsIHdoaWNoIGlzCisgICBub3cgZml4ZWQuCisgICAobWVyZ2UgZWQ1MTQ0ZDdlYiBqcy9maXgtbWVyZ2UtYXJnLXF1b3RpbmctaW4tcmViYXNlLXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTb21lIGxvdyBsZXZlbCBwcm90b2NvbCBjb2RlcGF0aCBjb3VsZCBjcmFzaCB3aGVuIHRoZXkgZ2V0IGFuCisgICB1bmV4cGVjdGVkIGZsdXNoIHBhY2tldCwgd2hpY2ggaXMgbm93IGZpeGVkLgorICAgKG1lcmdlIGJiMTM1NmRjNjQganMvcGFja2V0LXJlYWQtbGluZS1jaGVjay1udWxsIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjaGVjay1pZ25vcmUiIHdpdGggbXVsdGlwbGUgcGF0aHMgZ290IGNvbmZ1c2VkIHdoZW4gb25lIGlzIGEKKyAgIGZpbGUgYW5kIHRoZSBvdGhlciBpcyBhIGRpcmVjdG9yeSwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgZDYwNzcxZTkzMCBycy9jaGVjay1pZ25vcmUtbXVsdGkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRlc2NyaWJlICRnYXJiYWdlIiBzdG9wcGVkIGdpdmluZyBhbnkgZXJyb3JzIHdoZW4gdGhlIGdhcmJhZ2UKKyAgIGhhcHBlbnMgdG8gYmUgYSBzdHJpbmcgd2l0aCA0MCBoZXhhZGVjaW1hbCBsZXR0ZXJzLgorICAgKG1lcmdlIGE4ZTdhMmJmMGYgc2IvZGVzY3JpYmUtYmxvYiBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgdG8gdW5xdW90ZSBzaW5nbGUtcXVvdGVkIHN0cmluZyAodXNlZCBpbiB0aGUgcGFyc2VyIGZvcgorICAgY29uZmlndXJhdGlvbiBmaWxlcywgZXRjLikgZGlkIG5vdCBkaWFnbm9zZSBib2d1cyBpbnB1dCBjb3JyZWN0bHkKKyAgIGFuZCBwcm9kdWNlZCBib2d1cyByZXN1bHRzIGluc3RlYWQuCisgICAobWVyZ2UgZGRiYmY4ZWIyNSBqay9zcS1kZXF1b3RlLW9uLWJvZ3VzLWlucHV0IGxhdGVyIHRvIG1haW50KS4KKworICogTWFueSBwbGFjZXMgaW4gImdpdCBhcHBseSIga25ldyB0aGF0ICIvZGV2L251bGwiIHRoYXQgc2lnbmFscworICAgInRoZXJlIGlzIG5vIHN1Y2ggZmlsZSBvbiB0aGlzIHNpZGUgb2YgdGhlIGRpZmYiIGNhbiBiZSBmb2xsb3dlZCBieQorICAgd2hpdGVzcGFjZSBhbmQgZ2FyYmFnZSB3aGVuIHBhcnNpbmcgYSBwYXRjaCwgZXhjZXB0IGZvciBvbmUsIHdoaWNoCisgICBtYWRlIGFuIG90aGVyd2lzZSB2YWxpZCBwYXRjaCAoZS5nLiBvbmVzIGZyb20gc3VidmVyc2lvbikgcmVqZWN0ZWQuCisgICAobWVyZ2UgZTQ1NGFkNGJlYyB0ay9hcHBseS1kZXYtbnVsbC12ZXJpZnktbmFtZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSBubyBsb25nZXIgY3JlYXRlIGFueSAqLnNwZWMgZmlsZSwgc28gIm1ha2UgY2xlYW4iIHNob3VsZCBub3QKKyAgIHJlbW92ZSBpdC4KKyAgIChtZXJnZSA0MzIxYmRjYWJiIHR6L2RvLW5vdC1jbGVhbi1zcGVjLWZpbGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHB1c2giIG92ZXIgaHR0cCB0cmFuc3BvcnQgZGlkIG5vdCB1bnF1b3RlIHRoZSBwdXNoLW9wdGlvbnMKKyAgIGNvcnJlY3RseS4KKyAgIChtZXJnZSA5MGRjZTIxZWIwIGprL3B1c2gtb3B0aW9ucy12aWEtdHJhbnNwb3J0LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCB0byBjb21wbGFpbiB3aGVuIHRoZSBiYXRjaC1zaXplIG9wdGlvbiBpcworICAgbm90IGRlZmluZWQgd2hlbiB0aGUgcmVsb2dpbi1kZWxheSBvcHRpb24gaXMsIHNpbmNlIHRoZXNlIHR3byBhcmUKKyAgIG11dHVhbGx5IHJlcXVpcmVkLgorICAgKG1lcmdlIDljYWE3MDY5N2IgeHovc2VuZC1lbWFpbC1iYXRjaC1zaXplIGxhdGVyIHRvIG1haW50KS4KKworICogWTJrMjAgZml4IDstKSBmb3Igb3VyIHBlcmwgc2NyaXB0cy4KKyAgIChtZXJnZSBhNDBlMDZlZTMzIGJ3L3BlcmwtdGltZWdtLXRpbWVsb2NhbC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaHJlYWRlZCAiZ2l0IGdyZXAiIGhhcyBiZWVuIG9wdGltaXplZCB0byBhdm9pZCBhbGxvY2F0aW9uIGluIGNvZGUKKyAgIHNlY3Rpb24gdGhhdCBpcyBjb3ZlcmVkIHVuZGVyIGEgbXV0ZXguCisgICAobWVyZ2UgMzhlZjI0ZGNjZiBydi9ncmVwLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN1YnRyZWUiIHNjcmlwdCAoaW4gY29udHJpYi8pIHNjcmlwdGVkIGFyb3VuZCAiZ2l0IGxvZyIsIHdob3NlCisgICBvdXRwdXQgZ290IGFmZmVjdGVkIGJ5IGVuZC11c2VyIGNvbmZpZ3VyYXRpb24gbGlrZSBsb2cuc2hvd3NpZ25hdHVyZQorICAgKG1lcmdlIDg4NDFiNTIyMmMgc2cvc3VidHJlZS1zaWduZWQtY29tbWl0cyBsYXRlciB0byBtYWludCkuCisKKyAqIFdoaWxlIGZpbmRpbmcgdW5pcXVlIG9iamVjdCBuYW1lIGFiYnJldmlhdGlvbiwgdGhlIGNvZGUgbWF5CisgICBhY2NpZGVudGFsbHkgaGF2ZSByZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBhcnJheSBvZiBvYmplY3QgbmFtZXMKKyAgIGluIGEgcGFjay4KKyAgIChtZXJnZSAyMWFiZWQ1MDBjIGRzL2ZpbmQtdW5pcXVlLWFiYnJldi1vcHRpbSBsYXRlciB0byBtYWludCkuCisKKyAqIE1pY3JvIG9wdGltaXphdGlvbiBpbiByZXZpc2lvbiB0cmF2ZXJzYWwgY29kZS4KKyAgIChtZXJnZSBlYmJlZDNiYTA0IGRzL21hcmstcGFyZW50cy11bmludGVyZXN0aW5nLW9wdGltIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjb21taXQiIHVzZWQgdG8gcnVuICJnYyAtLWF1dG8iIG5lYXIgdGhlIGVuZCwgd2hpY2ggd2FzIGxvc3QKKyAgIHdoZW4gdGhlIGNvbW1hbmQgd2FzIHJlaW1wbGVtZW50ZWQgaW4gQyBieSBtaXN0YWtlLgorICAgKG1lcmdlIDA5NWM3NDFlZGQgYWIvZ2MtYXV0by1pbi1jb21taXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbGxvdyBydW5uaW5nIGEgY291cGxlIG9mIHRlc3RzIHdpdGggInNoIC14Ii4KKyAgIChtZXJnZSBjMjBiZjk0YWJjIHNnL2N2cy10ZXN0cy13aXRoLXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZXBhdGggdG8gcmVwbGFjZSBhbiBleGlzdGluZyBlbnRyeSBpbiB0aGUgaW5kZXggaGFkIGEgYnVnIGluCisgICB1cGRhdGluZyB0aGUgbmFtZSBoYXNoIHN0cnVjdHVyZSwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgMGUyNjdiN2EyNCBicC9yZWZyZXNoLWNhY2hlLWVudC1yZWhhc2gtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHRyYW5zZmVyLmZzY2tvYmplY3RzIGNvbmZpZ3VyYXRpb24gdGVsbHMgImdpdCBmZXRjaCIgdG8KKyAgIHZhbGlkYXRlIHRoZSBkYXRhIGFuZCBjb25uZWN0ZWQtbmVzcyBvZiBvYmplY3RzIGluIHRoZSByZWNlaXZlZAorICAgcGFjazsgdGhlIGNvZGUgdG8gcGVyZm9ybSB0aGlzIGNoZWNrIGhhcyBiZWVuIHRhdWdodCBhYm91dCB0aGUKKyAgIG5hcnJvdyBjbG9uZSdzIGNvbnZlbnRpb24gdGhhdCBtaXNzaW5nIG9iamVjdHMgdGhhdCBhcmUgcmVhY2hhYmxlCisgICBmcm9tIG9iamVjdHMgaW4gYSBwYWNrIHRoYXQgY2FtZSBmcm9tIGEgcHJvbWlzb3IgcmVtb3RlIGlzIE9LLgorCisgKiBUaGVyZSB3YXMgYW4gdW51c2VkIGZpbGUtc2NvcGUgc3RhdGljIHZhcmlhYmxlIGxlZnQgaW4gaHR0cC5jIHdoZW4KKyAgIGJ1aWxkaW5nIGZvciB2ZXJzaW9ucyBvZiBsaWJDVVJMIHRoYXQgaXMgb2xkZXIgdGhhbiA3LjE5LjQsIHdoaWNoCisgICBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSBiOGZkNjAwOGVjIHJqL2h0dHAtY29kZS1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKworICogU2hlbGwgc2NyaXB0IHBvcnRhYmlsaXR5IGZpeC4KKyAgIChtZXJnZSAyMDZhNmFlMDEzIG1sL2ZpbHRlci1icmFuY2gtcG9ydGFiaWxpdHktZml4IGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgbWlub3IgZG9jLCB0ZXN0IGFuZCBidWlsZCB1cGRhdGVzIGFuZCBjb2RlIGNsZWFudXBzLgorICAgKG1lcmdlIGUyYTVhMDI4YzcgYncvb2lkbWFwLWF1dG9pbml0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlYzNiNGIwNmY4IGNsL3Q5MDAxLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGUxYjNmM2RkMzgga3Mvc3VibW9kdWxlLWRvYy11cGRhdGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmYmFjNTU4YTliIHJzL2Rlc2NyaWJlLXVuaXF1ZS1hYmJyZXYgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDg0NjJmZjQzZTQgdGIvY3JsZi1jb252LWZsYWdzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3ZDY4YmIwNzY2IHJiL2hhc2htYXAtaC1jb21waWxhdGlvbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDM0NDk4NDcxNjggY2Mvc2hhMS1maWxlLW5hbWUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGFkNjIyYTI1NmYgZHMvdXNlLWdldC1iZTY0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmOTE5ZmZlYmVkIHNnL2NvY2NpLW1vdmUtYXJyYXkgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRlODAxNDYzYzcgamMvbWFpbGluZm8tY2xlYW51cC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGVmNWIzYTZjNWUgbmQvc2hhcmVkLWluZGV4LWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOWY1MjU4Y2JiOCB0ei9kb2Mtc2hvdy1kZWZhdWx0cy10by1oZWFkIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiNzgwZTQ0MDdkIGpjL3dvcmt0cmVlLWFkZC1zaG9ydC1oZWxwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhZTIzOWZjOGU1IHJzL2NvY2NpLXN0cmJ1Zi1hZGRmLXRvLWFkZHN0ciBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMmUyMmE4NWU1YyBuZC9pZ25vcmUtZ2xvYi1kb2MtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzNzM4MDMxNTgxIGprL2dldHRleHQtcG9pc29uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1NDM2MGExOTU2IHJqL3NwYXJzZS11cGRhdGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxMmUzMWE2YjEyIHNnL2RvYy10ZXN0LW11c3QtZmFpbC1hcmdzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3NjBmMWFkMTAxIGJjL2RvYy1pbnRlcnByZXQtdHJhaWxlcnMtZ3JhbW1vZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0Y2NmNDYxZjU2IGJwL2ZzbW9uaXRvciBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYTYxMTlmODJiMSBqay90ZXN0LWhhc2htYXAtdXBkYXRlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNWFlYTlmZTZjYyByZC90eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlNGU1ZGEyNzk2IHNiL3N0YXR1cy1kb2MtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3OTc2ZTkwMWM4IGdzL3Rlc3QtdW5zZXQteGRnLWNhY2hlLWhvbWUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQwMjNkZjFlZTYgdGcvd29ya3RyZWUtY3JlYXRlLXRyYWNraW5nIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0Y2JlOTJmZDQxIHNtL212LWRyeS1ydW4tdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3NWU1ZTljM2Y3IHNiL2NvbG9yLWgtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjcwOGVmNGFmNiBzZy90NjMwMC1tb2Rlcm5pemUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQ4OGU5MmQ0ZTAgYncvZG9jLXN1Ym1vZHVsZS1yZWN1cnNlLWNvbmZpZy13aXRoLWNsb25lIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmNzRiYmM4ZGQyIGprL2NhY2hlZC1jb21taXQtYnVmZmVyIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxMzE2NDE2OTAzIG1zL25vbi1hc2NpaS10aWNrcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODc4MDU2MDA1ZSBycy9zdHJidWYtcmVhZC1maWxlLW9yLXdoaW5lIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3OWYwYmExNTQ3IGprL3N0cmJ1Zi1yZWFkLWZpbGUtY2xvc2UtZXJyb3IgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGVkZmI4YmEwNjggb3QvcmVmLWZpbHRlci1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxMTM5NWEzYjRiIGpjL3Rlc3QtbXVzdC1iZS1lbXB0eSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNzY4YjlkNmRiNyBtay9kb2MtcHJldHR5LWZpbGwgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDJjYWE3YjhkMjcgYWIvbWFuLXNlYy1saXN0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0MGMxN2ViMTg0IGtzL3QzMjAwLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGJkOTk1OGMzNTggZHAvbWVyZ2Utc3RyYXRlZ3ktZG9jLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOWVlMDU0MGE0MCBqcy9taW5nLXN0cmZ0aW1lIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxNzc1ZTk5MGY3IHR6L2NvbXBsZXRlLXRhZy1kZWxldGUtdGFnbmFtZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDBhNGIwMzUwMSByai93YXJuaW5nLXVuaW5pdGlhbGl6ZWQtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiNjM1ZWQ5N2EwIGprL2F0dHJpYnV0ZXMtcGF0aC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE3LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE3LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMTM4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuMS50eHQKQEAgLTAsMCArMSwxNiBAQAorR2l0IHYyLjE3LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xNworLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhpcyByZWxlYXNlIGNvbnRhaW5zIHRoZSBzYW1lIGZpeGVzIG1hZGUgaW4gdGhlIHYyLjEzLjcgdmVyc2lvbiBvZgorICAgR2l0LCBjb3ZlcmluZyBDVkUtMjAxOC0xMTIzMyBhbmQgMTEyMzUsIGFuZCBmb3J3YXJkLXBvcnRlZCB0bworICAgdjIuMTQuNCwgdjIuMTUuMiBhbmQgdjIuMTYuNCByZWxlYXNlcy4gIFNlZSByZWxlYXNlIG5vdGVzIHRvCisgICB2Mi4xMy43IGZvciBkZXRhaWxzLgorCisgKiBJbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUgZml4ZXMsIHRoaXMgcmVsZWFzZSBoYXMgc3VwcG9ydCBvbiB0aGUKKyAgIHNlcnZlciBzaWRlIHRvIHJlamVjdCBwdXNoZXMgdG8gcmVwb3NpdG9yaWVzIHRoYXQgYXR0ZW1wdCB0byBjcmVhdGUKKyAgIHN1Y2ggcHJvYmxlbWF0aWMgLmdpdG1vZHVsZXMgZmlsZSBldGMuIGFzIHRyYWNrZWQgY29udGVudHMsIHRvIGhlbHAKKyAgIGhvc3Rpbmcgc2l0ZXMgcHJvdGVjdCB0aGVpciBjdXN0b21lcnMgYnkgcHJldmVudGluZyBtYWxpY2lvdXMKKyAgIGNvbnRlbnRzIGZyb20gc3ByZWFkaW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE3LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE3LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMDIxYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuMi50eHQKQEAgLTAsMCArMSwxMiBAQAorR2l0IHYyLjE3LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHVwIHRoZSBmaXhlcyB0aGF0IGFwcGVhciBpbiB2Mi4xNC41IHRvIGFkZHJlc3MKK3RoZSByZWNlbnRseSByZXBvcnRlZCBDVkUtMjAxOC0xNzQ1Njsgc2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGF0Cit2ZXJzaW9uIGZvciBkZXRhaWxzLgorCitJbiBhZGRpdGlvbiwgdGhpcyByZWxlYXNlIGFsc28gdGVhY2hlcyAiZnNjayIgYW5kIHRoZSBzZXJ2ZXIgc2lkZQorbG9naWMgdG8gcmVqZWN0IHB1c2hlcyB0byByZXBvc2l0b3JpZXMgdGhhdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdWNoIGEKK3Byb2JsZW1hdGljICIuZ2l0bW9kdWxlcyIgZmlsZSBhcyB0cmFja2VkIGNvbnRlbnRzLCB0byBoZWxwIGhvc3RpbmcKK3NpdGVzIHByb3RlY3QgdGhlaXIgY3VzdG9tZXJzIGJ5IHByZXZlbnRpbmcgbWFsaWNpb3VzIGNvbnRlbnRzIGZyb20KK3NwcmVhZGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTQ2Yzk0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE3LjMudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0dpdCB2Mi4xNy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNiBhbmQgaW4KK3YyLjE1LjQgYWRkcmVzc2luZyB0aGUgc2VjdXJpdHkgaXNzdWVzIENWRS0yMDE5LTEzNDgsIENWRS0yMDE5LTEzNDksCitDVkUtMjAxOS0xMzUwLCBDVkUtMjAxOS0xMzUxLCBDVkUtMjAxOS0xMzUyLCBDVkUtMjAxOS0xMzUzLAorQ1ZFLTIwMTktMTM1NCwgYW5kIENWRS0yMDE5LTEzODc7IHNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhvc2UKK3ZlcnNpb25zIGZvciBkZXRhaWxzLgorCitJbiBhZGRpdGlvbiwgYGdpdCBmc2NrYCB3YXMgdGF1Z2h0IHRvIGlkZW50aWZ5IGAuZ2l0bW9kdWxlc2AgZW50cmllcworb2YgdGhlIGZvcm0gYHN1Ym1vZHVsZS48bmFtZT4udXBkYXRlPSFjb21tYW5kYCwgd2hpY2ggaGF2ZSBiZWVuCitkaXNhbGxvd2VkIGluIHYyLjE1LjQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q3OTRjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy40LnR4dApAQCAtMCwwICsxLDE2IEBACitHaXQgdjIuMTcuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBpcyB0byBhZGRyZXNzIHRoZSBzZWN1cml0eSBpc3N1ZTogQ1ZFLTIwMjAtNTI2MAorCitGaXhlcyBzaW5jZSB2Mi4xNy4zCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdpdGggYSBjcmFmdGVkIFVSTCB0aGF0IGNvbnRhaW5zIGEgbmV3bGluZSBpbiBpdCwgdGhlIGNyZWRlbnRpYWwKKyAgIGhlbHBlciBtYWNoaW5lcnkgY2FuIGJlIGZvb2xlZCB0byBnaXZlIGNyZWRlbnRpYWwgaW5mb3JtYXRpb24gZm9yCisgICBhIHdyb25nIGhvc3QuICBUaGUgYXR0YWNrIGhhcyBiZWVuIG1hZGUgaW1wb3NzaWJsZSBieSBmb3JiaWRkaW5nCisgICBhIG5ld2xpbmUgY2hhcmFjdGVyIGluIGFueSB2YWx1ZSBwYXNzZWQgdmlhIHRoZSBjcmVkZW50aWFsCisgICBwcm90b2NvbC4KKworQ3JlZGl0IGZvciBmaW5kaW5nIHRoZSB2dWxuZXJhYmlsaXR5IGdvZXMgdG8gRmVsaXggV2lsaGVsbSBvZiBHb29nbGUKK1Byb2plY3QgWmVyby4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWJiODIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE3LjUudHh0CkBAIC0wLDAgKzEsMjIgQEAKK0dpdCB2Mi4xNy41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGlzIHRvIGFkZHJlc3MgYSBzZWN1cml0eSBpc3N1ZTogQ1ZFLTIwMjAtMTEwMDgKKworRml4ZXMgc2luY2UgdjIuMTcuNAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBXaXRoIGEgY3JhZnRlZCBVUkwgdGhhdCBjb250YWlucyBhIG5ld2xpbmUgb3IgZW1wdHkgaG9zdCwgb3IgbGFja3MKKyAgIGEgc2NoZW1lLCB0aGUgY3JlZGVudGlhbCBoZWxwZXIgbWFjaGluZXJ5IGNhbiBiZSBmb29sZWQgaW50bworICAgcHJvdmlkaW5nIGNyZWRlbnRpYWwgaW5mb3JtYXRpb24gdGhhdCBpcyBub3QgYXBwcm9wcmlhdGUgZm9yIHRoZQorICAgcHJvdG9jb2wgaW4gdXNlIGFuZCBob3N0IGJlaW5nIGNvbnRhY3RlZC4KKworICAgVW5saWtlIHRoZSB2dWxuZXJhYmlsaXR5IENWRS0yMDIwLTUyNjAgZml4ZWQgaW4gdjIuMTcuNCwgdGhlCisgICBjcmVkZW50aWFscyBhcmUgbm90IGZvciBhIGhvc3Qgb2YgdGhlIGF0dGFja2VyJ3MgY2hvb3Npbmc7IGluc3RlYWQsCisgICB0aGV5IGFyZSBmb3Igc29tZSB1bnNwZWNpZmllZCBob3N0IChiYXNlZCBvbiBob3cgdGhlIGNvbmZpZ3VyZWQKKyAgIGNyZWRlbnRpYWwgaGVscGVyIGhhbmRsZXMgYW4gYWJzZW50ICJob3N0IiBwYXJhbWV0ZXIpLgorCisgICBUaGUgYXR0YWNrIGhhcyBiZWVuIG1hZGUgaW1wb3NzaWJsZSBieSByZWZ1c2luZyB0byB3b3JrIHdpdGgKKyAgIHVuZGVyLXNwZWNpZmllZCBjcmVkZW50aWFsIHBhdHRlcm5zLgorCitDcmVkaXQgZm9yIGZpbmRpbmcgdGhlIHZ1bG5lcmFiaWxpdHkgZ29lcyB0byBDYXJsbyBBcmVuYXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTguMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTguMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM4YTBlOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC4wLnR4dApAQCAtMCwwICsxLDU4MyBAQAorR2l0IDIuMTggUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYyLjE3CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBSZW5hbWUgZGV0ZWN0aW9uIGxvZ2ljIHRoYXQgaXMgdXNlZCBpbiAibWVyZ2UiIGFuZCAiY2hlcnJ5LXBpY2siIGhhcworICAgbGVhcm5lZCB0byBndWVzcyB3aGVuIGFsbCBvZiB4L2EsIHgvYiBhbmQgeC9jIGhhdmUgbW92ZWQgdG8gei9hLAorICAgei9iIGFuZCB6L2MsIGl0IGlzIGxpa2VseSB0aGF0IHgvZCBhZGRlZCBpbiB0aGUgbWVhbnRpbWUgd291bGQgYWxzbworICAgd2FudCB0byBtb3ZlIHRvIHovZCBieSB0YWtpbmcgdGhlIGhpbnQgdGhhdCB0aGUgZW50aXJlIGRpcmVjdG9yeQorICAgJ3gnIG1vdmVkIHRvICd6Jy4gIEEgYnVnIGNhdXNpbmcgZGlydHkgZmlsZXMgaW52b2x2ZWQgaW4gYSByZW5hbWUKKyAgIHRvIGJlIG92ZXJ3cml0dGVuIGR1cmluZyBtZXJnZSBoYXMgYWxzbyBiZWVuIGZpeGVkIGFzIHBhcnQgb2YgdGhpcworICAgd29yay4gIEluY2lkZW50YWxseSwgdGhpcyBhbHNvIGF2b2lkcyB1cGRhdGluZyBhIGZpbGUgaW4gdGhlCisgICB3b3JraW5nIHRyZWUgYWZ0ZXIgYSAobm9uLXRyaXZpYWwpIG1lcmdlIHdob3NlIHJlc3VsdCBtYXRjaGVzIHdoYXQKKyAgIG91ciBzaWRlIG9yaWdpbmFsbHkgaGFkLgorCisgKiAiZ2l0IGZpbHRlci1icmFuY2giIGxlYXJuZWQgdG8gdXNlIGEgZGlmZmVyZW50IGV4aXQgY29kZSB0byBhbGxvdworICAgdGhlIGNhbGxlcnMgdG8gdGVsbCB0aGUgY2FzZSB3aGVyZSB0aGVyZSB3YXMgbm8gbmV3IGNvbW1pdHMgdG8KKyAgIHJld3JpdGUgZnJvbSBvdGhlciBlcnJvciBjYXNlcy4KKworICogV2hlbiBidWlsdCB3aXRoIG1vcmUgcmVjZW50IGNVUkwsIEdJVF9TU0xfVkVSU0lPTiBjYW4gbm93IHNwZWNpZnkKKyAgICJ0bHN2MS4zIiBhcyBpdHMgdmFsdWUuCisKKyAqICJnaXQgZ3VpIiBsZWFybmVkIHRoYXQgIn4vLnNzaC9pZF9lY2RzYS5wdWIiIGFuZAorICAgIn4vLnNzaC9pZF9lZDI1NTE5LnB1YiIgYXJlIGFsc28gcG9zc2libGUgU1NIIGtleSBmaWxlcy4KKyAgIChtZXJnZSAyZTJmMDI4OGVmIGJiL2dpdC1ndWktc3NoLWtleS1maWxlcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZ3VpIiBwZXJmb3JtcyBjb21taXQgdXBvbiBDVFJML0NNRCtFTlRFUiBidXQgdGhlCisgICBDVFJML0NNRCtLUF9FTlRFUiAoaS5lLiBlbnRlciBrZXkgb24gdGhlIG51bXBhZCkgZGlkIG5vdCBoYXZlIHRoZQorICAgc2FtZSBrZXkgYmluZGluZy4gIEl0IG5vdyBkb2VzLgorICAgKG1lcmdlIDI4YTFkOTRhMDYgYnAvZ2l0LWd1aS1iaW5kLWtwLWVudGVyIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBndWkiIGhhcyBiZWVuIHRhdWdodCB0byB3b3JrIHdpdGggb2xkIHZlcnNpb25zIG9mIHRrIChsaWtlCisgICA4LjUuNykgdGhhdCBkbyBub3Qgc3VwcG9ydCAidHRrOjpzdHlsZSB0aGVtZSB1c2UiIGFzIGEgd2F5IHRvIHF1ZXJ5CisgICB0aGUgY3VycmVudCB0aGVtZS4KKyAgIChtZXJnZSA0ODkxOTYxMTA1IGNiL2dpdC1ndWktdHRrLXN0eWxlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UiIGhhcyBsZWFybmVkIHRvIGhvbm9yICItLXNpZ25vZmYiIG9wdGlvbiB3aGVuIHVzaW5nCisgICBiYWNrZW5kcyBvdGhlciB0aGFuICJhbSIgKGJ1dCBub3QgIi0tcHJlc2VydmUtbWVyZ2VzIikuCisKKyAqICJnaXQgYnJhbmNoIC0tbGlzdCIgZHVyaW5nIGFuIGludGVycnVwdGVkICJyZWJhc2UgLWkiIG5vdyBsZXRzCisgICB1c2VycyBkaXN0aW5ndWlzaCB0aGUgY2FzZSB3aGVyZSBhIGRldGFjaGVkIEhFQUQgaXMgYmVpbmcgcmViYXNlZAorICAgYW5kIGEgbm9ybWFsIGJyYW5jaCBpcyBiZWluZyByZWJhc2VkLgorCisgKiAiZ2l0IG1lcmdldG9vbHMiIGxlYXJuZWQgdGFsa2luZyB0byBndWlmZnkuCisKKyAqIFRoZSBzY3JpcHRzIGluIGNvbnRyaWIvZW1hY3MvIGhhdmUgb3V0bGl2ZWQgdGhlaXIgdXNlZnVsbmVzcyBhbmQKKyAgIGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIGEgc3R1YiB0aGF0IGVycm9ycyBvdXQgYW5kIHRlbGxzIHRoZSB1c2VyCisgICB0aGVyZSBhcmUgcmVwbGFjZW1lbnRzLgorCisgKiBUaGUgbmV3ICJ3b3JraW5nLXRyZWUtZW5jb2RpbmciIGF0dHJpYnV0ZSBjYW4gYXNrIEdpdCB0byBjb252ZXJ0IHRoZQorICAgY29udGVudHMgdG8gdGhlIHNwZWNpZmllZCBlbmNvZGluZyB3aGVuIGNoZWNraW5nIG91dCB0byB0aGUgd29ya2luZworICAgdHJlZSAoYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kIHdoZW4gY2hlY2tpbmcgaW4pLgorCisgKiBUaGUgImdpdCBjb25maWciIGNvbW1hbmQgdXNlcyBzZXBhcmF0ZSBvcHRpb25zIGUuZy4gIi0taW50IiwKKyAgICItLWJvb2wiLCBldGMuIHRvIHNwZWNpZnkgd2hhdCB0eXBlIHRoZSBjYWxsZXIgd2FudHMgdGhlIHZhbHVlIHRvCisgICBiZSBpbnRlcnByZXRlZCBhcy4gIEEgbmV3ICItLXR5cGU9PHR5cGVuYW1lPiIgb3B0aW9uIGhhcyBiZWVuCisgICBpbnRyb2R1Y2VkLCB3aGljaCB3b3VsZCBtYWtlIGl0IGNsZWFuZXIgdG8gZGVmaW5lIG5ldyB0eXBlcy4KKworICogImdpdCBjb25maWcgLS1nZXQiIGxlYXJuZWQgdGhlICItLWRlZmF1bHQiIG9wdGlvbiwgdG8gaGVscCB0aGUKKyAgIGNhbGxpbmcgc2NyaXB0LiAgQnVpbGRpbmcgb24gdG9wIG9mIHRoZSBhYm92ZSBjaGFuZ2VzLCB0aGUKKyAgICJnaXQgY29uZmlnIiBsZWFybnMgIi0tdHlwZT1jb2xvciIgdHlwZS4gIFRha2VuIHRvZ2V0aGVyLCB5b3UgY2FuCisgICBkbyB0aGluZ3MgbGlrZSAiZ2l0IGNvbmZpZyAtLWdldCBmb28uY29sb3IgLS1kZWZhdWx0IGJsdWUiIGFuZCBnZXQKKyAgIHRoZSBBTlNJIGNvbG9yIHNlcXVlbmNlIGZvciB0aGUgY29sb3IgZ2l2ZW4gdG8gZm9vLmNvbG9yIHZhcmlhYmxlLAorICAgb3IgImJsdWUiIGlmIHRoZSB2YXJpYWJsZSBkb2VzIG5vdCBleGlzdC4KKworICogImdpdCBscy1yZW1vdGUiIGxlYXJuZWQgYW4gb3B0aW9uIHRvIGFsbG93IHNvcnRpbmcgaXRzIG91dHB1dCBiYXNlZAorICAgb24gdGhlIHJlZm5hbWVzIGJlaW5nIHNob3duLgorCisgKiBUaGUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gKGluIGNvbnRyaWIvKSBoYXMgYmVlbiB0YXVnaHQgdGhhdCAiZ2l0CisgICBzdGFzaCBzYXZlIiBoYXMgYmVlbiBkZXByZWNhdGVkICgiZ2l0IHN0YXNoIHB1c2giIGlzIHRoZSBwcmVmZXJyZWQKKyAgIHNwZWxsaW5nIGluIHRoZSBuZXcgd29ybGQpIGFuZCBkb2VzIG5vdCBvZmZlciBpdCBhcyBhIHBvc3NpYmxlCisgICBjb21wbGV0aW9uIGNhbmRpZGF0ZSB3aGVuICJnaXQgc3Rhc2ggcHVzaCIgY2FuIGJlLgorCisgKiAiZ2l0IGdjIC0tcHJ1bmU9bm9uc2Vuc2UiIHNwZW50IGxvbmcgdGltZSByZXBhY2tpbmcgYW5kIHRoZW4KKyAgIHNpbGVudGx5IGZhaWxlZCB3aGVuIHVuZGVybHlpbmcgImdpdCBwcnVuZSAtLWV4cGlyZT1ub25zZW5zZSIKKyAgIGZhaWxlZCB0byBwYXJzZSBpdHMgY29tbWFuZCBsaW5lLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEVycm9yIG1lc3NhZ2VzIGZyb20gImdpdCBwdXNoIiBjYW4gYmUgcGFpbnRlZCBmb3IgbW9yZSB2aXNpYmlsaXR5LgorCisgKiAiZ2l0IGh0dHAtZmV0Y2giIChkZXByZWNhdGVkKSBoYWQgYW4gb3B0aW9uYWwgYW5kIGV4cGVyaW1lbnRhbAorICAgImZlYXR1cmUiIHRvIGZldGNoIG9ubHkgY29tbWl0cyBhbmQvb3IgdHJlZXMsIHdoaWNoIG5vYm9keSB1c2VkLgorICAgVGhpcyBoYXMgYmVlbiByZW1vdmVkLgorCisgKiBUaGUgZnVuY3Rpb25hbGl0eSBvZiAiJEdJVF9ESVIvaW5mby9ncmFmdHMiIGhhcyBiZWVuIHN1cGVyc2VkZWQgYnkKKyAgIHRoZSAicmVmcy9yZXBsYWNlLyIgbWVjaGFuaXNtIGZvciBzb21lIHRpbWUgbm93LCBidXQgdGhlIGludGVybmFsCisgICBjb2RlIGhhZCBzdXBwb3J0IGZvciBpdCBpbiBtYW55IHBsYWNlcywgd2hpY2ggaGFzIGJlZW4gY2xlYW5lZCB1cAorICAgaW4gb3JkZXIgdG8gZHJvcCBzdXBwb3J0IG9mIHRoZSAiZ3JhZnRzIiBtZWNoYW5pc20uCisKKyAqICJnaXQgd29ya3RyZWUgYWRkIiBsZWFybmVkIHRvIGNoZWNrIG91dCBhbiBleGlzdGluZyBicmFuY2guCisKKyAqICJnaXQgLS1uby1wYWdlciBjbWQiIGRpZCBub3QgaGF2ZSBzaG9ydC1hbmQtc3dlZXQgc2luZ2xlIGxldHRlcgorICAgb3B0aW9uLiBOb3cgaXQgZG9lcyBhcyAiLVAiLgorICAgKG1lcmdlIDcyMTNjMjg4MTgganMvbm8tcGFnZXItc2hvcnRoYW5kIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UiIGxlYXJuZWQgIi0tcmViYXNlLW1lcmdlcyIgdG8gdHJhbnNwbGFudCB0aGUgd2hvbGUKKyAgIHRvcG9sb2d5IG9mIGNvbW1pdCBncmFwaCBlbHNld2hlcmUuCisKKyAqICJnaXQgc3RhdHVzIiBsZWFybmVkIHRvIHBheSBhdHRlbnRpb24gdG8gVUkgcmVsYXRlZCBkaWZmCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBzdWNoIGFzIGRpZmYucmVuYW1lcy4KKworICogVGhlIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIG1lY2hhbmlzbSAoaW4gY29udHJpYi8pIGxlYXJuZWQgdG8gbG9hZAorICAgY3VzdG9tIGNvbXBsZXRpb24gZmlsZSBmb3IgImdpdCAkY29tbWFuZCIgd2hlcmUgJGNvbW1hbmQgaXMgYQorICAgY3VzdG9tICJnaXQtJGNvbW1hbmQiIHRoYXQgdGhlIGVuZCB1c2VyIGhhcyBvbiB0aGUgJFBBVEggd2hlbiB1c2luZworICAgbmV3ZXIgdmVyc2lvbiBvZiBiYXNoLWNvbXBsZXRpb24uCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgY2FuIHNvbWV0aW1lcyBvZmZlciBjb25maXJtYXRpb24gZGlhbG9nICJTZW5kIHRoaXMKKyAgIGVtYWlsPyIgd2l0aCBjaG9pY2VzICdZZXMnLCAnTm8nLCAnUXVpdCcsIGFuZCAnQWxsJy4gIEEgbmV3IGFjdGlvbgorICAgJ0VkaXQnIGhhcyBiZWVuIGFkZGVkIHRvIHRoaXMgZGlhbG9nJ3MgY2hvaWNlLgorCisgKiBXaXRoIG1lcmdlLnJlbmFtZXMgY29uZmlndXJhdGlvbiBzZXQgdG8gZmFsc2UsIHRoZSByZWN1cnNpdmUgbWVyZ2UKKyAgIHN0cmF0ZWd5IGNhbiBiZSB0b2xkIG5vdCB0byBzcGVuZCBjeWNsZXMgdHJ5aW5nIHRvIGZpbmQgcmVuYW1lZAorICAgcGF0aHMgYW5kIG1lcmdlIHRoZW0gYWNjb3JkaW5nbHkuCisKKyAqICJnaXQgc3RhdHVzIiBsZWFybmVkIHRvIGhvbm9yIGEgbmV3IHN0YXR1cy5yZW5hbWVzIGNvbmZpZ3VyYXRpb24gdG8KKyAgIHNraXAgcmVuYW1lIGRldGVjdGlvbiwgd2hpY2ggY291bGQgYmUgdXNlZnVsIGZvciB0aG9zZSB3aG8gd2FudCB0bworICAgZG8gc28gd2l0aG91dCBkaXNhYmxpbmcgdGhlIGRlZmF1bHQgcmVuYW1lIGRldGVjdGlvbiBkb25lIGJ5IHRoZQorICAgImdpdCBkaWZmIiBjb21tYW5kLgorCisgKiBDb21tYW5kIGxpbmUgY29tcGxldGlvbiAoaW4gY29udHJpYi8pIGxlYXJuZWQgdG8gY29tcGxldGUgcGF0aG5hbWVzCisgICBmb3IgdmFyaW91cyBjb21tYW5kcyBiZXR0ZXIuCisKKyAqICJnaXQgYmxhbWUiIGxlYXJucyB0byB1bmhpZ2hsaWdodCB1bmludGVyZXN0aW5nIG1ldGFkYXRhIGZyb20gdGhlCisgICBvcmlnaW5hdGluZyBjb21taXQgb24gbGluZXMgdGhhdCBhcmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIG9uZSwKKyAgIGFuZCBhbHNvIHBhaW50IGxpbmVzIGluIGRpZmZlcmVudCBjb2xvcnMgZGVwZW5kaW5nIG9uIHRoZSBhZ2Ugb2YKKyAgIHRoZSBjb21taXQuCisKKyAqIFRyYW5zZmVyIHByb3RvY29sIHYyIGxlYXJuZWQgdG8gc3VwcG9ydCB0aGUgcGFydGlhbCBjbG9uZS4KKworICogV2hlbiBhIHNob3J0IGhleGFkZWNpbWFsIHN0cmluZyBpcyB1c2VkIHRvIG5hbWUgYW4gb2JqZWN0IGJ1dCB0aGVyZQorICAgYXJlIG11bHRpcGxlIG9iamVjdHMgdGhhdCBzaGFyZSB0aGUgc3RyaW5nIGFzIHRoZSBwcmVmaXggb2YgdGhlaXIKKyAgIG5hbWVzLCB0aGUgY29kZSBsaXN0cyB0aGVzZSBhbWJpZ3VvdXMgY2FuZGlkYXRlcyBpbiBhIGhlbHAgbWVzc2FnZS4KKyAgIFRoZXNlIG9iamVjdCBuYW1lcyBhcmUgbm93IHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlaXIgdHlwZXMgZm9yCisgICBlYXNpZXIgZXllYmFsbGluZy4KKworICogImdpdCBmZXRjaCAkdGhlcmUgJHJlZnNwZWMiIHRoYXQgdGFsa3Mgb3ZlciBwcm90b2NvbCB2MiBjYW4gdGFrZQorICAgYWR2YW50YWdlIG9mIHNlcnZlci1zaWRlIHJlZiBmaWx0ZXJpbmc7IHRoZSBjb2RlIGhhcyBiZWVuIGV4dGVuZGVkCisgICBzbyB0aGF0IHRoaXMgbWVjaGFuaXNtIHRyaWdnZXJzIGFsc28gd2hlbiBmZXRjaGluZyB3aXRoIGNvbmZpZ3VyZWQKKyAgIHJlZnNwZWMuCisKKyAqIE91ciBIVFRQIGNsaWVudCBjb2RlIHVzZWQgdG8gYWR2ZXJ0aXNlIHRoYXQgd2UgYWNjZXB0IGd6aXAgZW5jb2RpbmcKKyAgIGZyb20gdGhlIG90aGVyIHNpZGU7IGluc3RlYWQsIGp1c3QgbGV0IGNVUkwgbGlicmFyeSB0byBhZHZlcnRpc2UKKyAgIGFuZCBuZWdvdGlhdGUgdGhlIGJlc3Qgb25lLgorCisgKiAiZ2l0IHA0IiBsZWFybmVkIHRvICJ1bnNoZWx2ZSIgc2hlbHZlZCBjb21taXQgZnJvbSBQNC4KKyAgIChtZXJnZSAxMjNmNjMxNzYxIGxkL3A0LXVuc2hlbHZlIGxhdGVyIHRvIG1haW50KS4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBBICJnaXQgZmV0Y2giIGZyb20gYSByZXBvc2l0b3J5IHdpdGggaW5zYW5lIG51bWJlciBvZiByZWZzIGludG8gYQorICAgcmVwb3NpdG9yeSB0aGF0IGlzIGFscmVhZHkgdXAtdG8tZGF0ZSBzdGlsbCB3YXN0ZWQgdG9vIG1hbnkgY3ljbGVzCisgICBtYWtpbmcgbWFueSBsc3RhdCgyKSBjYWxscyB0byBzZWUgaWYgdGhlc2Ugb2JqZWN0cyBhdCB0aGUgdGlwcworICAgZXhpc3QgYXMgbG9vc2Ugb2JqZWN0cyBsb2NhbGx5LiAgVGhlc2UgbHN0YXQoMikgY2FsbHMgYXJlIG9wdGltaXplZAorICAgYXdheSBieSBlbnVtZXJhdGluZyBhbGwgbG9vc2Ugb2JqZWN0cyBiZWZvcmVoYW5kLgorICAgSXQgaXMgdW5rbm93biBpZiB0aGUgbmV3IHN0cmF0ZWd5IG5lZ2F0aXZlbHkgYWZmZWN0cyBleGlzdGluZyB1c2UKKyAgIGNhc2VzLCBmZXRjaGluZyBpbnRvIGEgcmVwb3NpdG9yeSB3aXRoIG1hbnkgbG9vc2Ugb2JqZWN0cyBmcm9tIGEKKyAgIHJlcG9zaXRvcnkgd2l0aCBzbWFsbCBudW1iZXIgb2YgcmVmcy4KKworICogR2l0IGNhbiBiZSBidWlsdCB0byB1c2UgZWl0aGVyIHYxIG9yIHYyIG9mIHRoZSBQQ1JFIGxpYnJhcnksIGFuZCBzbworICAgZmFyLCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIFVTRV9MSUJQQ1JFPVllc1BsZWFzZSBpbnN0cnVjdGVkCisgICB0aGUgYnVpbGQgcHJvY2VkdXJlIHRvIHVzZSB2MSwgYnV0IG5vdyBpdCBtZWFucyB2Mi4gIFVTRV9MSUJQQ1JFMQorICAgYW5kIFVTRV9MSUJQQ1JFMiBjYW4gYmUgdXNlZCB0byBleHBsaWNpdGx5IGNob29zZSB3aGljaCB2ZXJzaW9uIHRvCisgICB1c2UsIGFzIGJlZm9yZS4KKworICogVGhlIGJ1aWxkIHByb2NlZHVyZSBsZWFybmVkIHRvIG9wdGlvbmFsbHkgdXNlIHN5bWJvbGljIGxpbmtzCisgICAoaW5zdGVhZCBvZiBoYXJkbGlua3MgYW5kIGNvcGllcykgdG8gaW5zdGFsbCAiZ2l0LWZvbyIgZm9yIGJ1aWx0LWluCisgICBjb21tYW5kcywgd2hvc2UgYmluYXJpZXMgYXJlIGFsbCBpZGVudGljYWwuCisKKyAqIENvbnZlcnNpb24gZnJvbSB1Y2hhclsyMF0gdG8gc3RydWN0IG9iamVjdF9pZCBjb250aW51ZXMuCisKKyAqIFRoZSB3YXkgImdpdCB3b3JrdHJlZSBwcnVuZSIgd29ya2VkIGludGVybmFsbHkgaGFzIGJlZW4gc2ltcGxpZmllZCwKKyAgIGJ5IGFzc3VtaW5nIGhvdyAiZ2l0IHdvcmt0cmVlIG1vdmUiIG1vdmVzIGFuIGV4aXN0aW5nIHdvcmt0cmVlIHRvIGEKKyAgIGRpZmZlcmVudCBwbGFjZS4KKworICogQ29kZSBjbGVhbi11cCBmb3IgdGhlICJyZXBvc2l0b3J5IiBhYnN0cmFjdGlvbi4KKyAgIChtZXJnZSAwMGEzZGEyYTEzIG5kL3JlbW92ZS1pZ25vcmUtZW52LWZpZWxkIGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZSB0byBmaW5kIHRoZSBsZW5ndGggdG8gdW5pcXVlbHkgYWJicmV2aWF0ZSBvYmplY3QgbmFtZXMgYmFzZWQKKyAgIG9uIHBhY2tmaWxlIGNvbnRlbnQsIHdoaWNoIGlzIGEgcmVsYXRpdmVseSByZWNlbnQgYWRkaXRpb24sIGhhcyBiZWVuCisgICBvcHRpbWl6ZWQgdG8gdXNlIHRoZSBzYW1lIGZhbi1vdXQgdGFibGUuCisKKyAqIFRoZSBtZWNoYW5pc20gdG8gdXNlIHBhcnNlLW9wdGlvbnMgQVBJIHRvIGF1dG9tYXRlIHRoZSBjb21tYW5kIGxpbmUKKyAgIGNvbXBsZXRpb24gY29udGludWVzIHRvIGdldCBleHRlbmRlZCBhbmQgcG9saXNoZWQuCisKKyAqIENvcGllcyBvZiBvbGQgc2NyaXB0ZWQgUG9yY2VsYWluIGNvbW1hbmRzIGluIGNvbnRyaWIvZXhhbXBsZXMvIGhhdmUKKyAgIGJlZW4gcmVtb3ZlZC4KKworICogU29tZSB0ZXN0cyB0aGF0IHJlbHkgb24gdGhlIGV4YWN0IGhhcmRjb2RlZCB2YWx1ZXMgb2Ygb2JqZWN0IG5hbWVzCisgICBoYXZlIGJlZW4gdXBkYXRlZCBpbiBwcmVwYXJhdGlvbiBmb3IgaGFzaCBmdW5jdGlvbiBtaWdyYXRpb24uCisKKyAqIFBlcmYtdGVzdCB1cGRhdGUuCisKKyAqIFRlc3QgaGVscGVyIHVwZGF0ZS4KKworICogVGhlIGVmZm9ydCBjb250aW51ZXMgdG8gcmVmYWN0b3IgdGhlIGludGVybmFsIGdsb2JhbCBkYXRhIHN0cnVjdHVyZQorICAgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBvcGVuIG11bHRpcGxlIHJlcG9zaXRvcmllcywgd29yayB3aXRoIGFuZAorICAgdGhlbiBjbG9zZSB0aGVtLAorCisgKiBTbWFsbCB0ZXN0LWhlbHBlciBwcm9ncmFtcyBoYXZlIGJlZW4gY29uc29saWRhdGVkIGludG8gYSBzaW5nbGUKKyAgIGJpbmFyeS4KKworICogQVBJIGNsZWFuLXVwIGFyb3VuZCByZWYtZmlsdGVyIGNvZGUuCisKKyAqIFNoZWxsIGNvbXBsZXRpb24gKGluIGNvbnRyaWIpIHRoYXQgZ2l2ZXMgbGlzdCBvZiBwYXRocyBoYXZlIGJlZW4KKyAgIG9wdGltaXplZCBzb21ld2hhdC4KKworICogVGhlIGluZGV4IGZpbGUgaXMgdXBkYXRlZCB0byByZWNvcmQgdGhlIGZzbW9uaXRvciBzZWN0aW9uIGFmdGVyIGEKKyAgIGZ1bGwgc2NhbiB3YXMgbWFkZSwgdG8gYXZvaWQgd2FzdGluZyB0aGUgZWZmb3J0IHRoYXQgaGFzIGFscmVhZHkKKyAgIHNwZW50LgorCisgKiBQZXJmb3JtYW5jZSBtZWFzdXJpbmcgZnJhbWV3b3JrIGluIHQvcGVyZiBsZWFybmVkIHRvIGhlbHAgYmlzZWN0aW5nCisgICBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4KKworICogU29tZSBtdWx0aS13b3JkIHNvdXJjZSBmaWxlbmFtZXMgYXJlIGJlaW5nIHJlbmFtZWQgdG8gc2VwYXJhdGUKKyAgIHdvcmRzIHdpdGggZGFzaGVzIGluc3RlYWQgb2YgdW5kZXJzY29yZXMuCisKKyAqIEFuIHJldXNhYmxlICJtZW1vcnkgcG9vbCIgaW1wbGVtZW50YXRpb24gaGFzIGJlZW4gZXh0cmFjdGVkIGZyb20KKyAgIGZhc3QtaW1wb3J0LmMsIHdoaWNoIGluIHR1cm4gaGFzIGJlY29tZSB0aGUgZmlyc3QgdXNlciBvZiB0aGUKKyAgIG1lbS1wb29sIEFQSS4KKworICogQSBidWlsZC10aW1lIG9wdGlvbiBoYXMgYmVlbiBhZGRlZCB0byBhbGxvdyBHaXQgdG8gYmUgdG9sZCB0byByZWZlcgorICAgdG8gaXRzIGFzc29jaWF0ZWQgZmlsZXMgcmVsYXRpdmUgdG8gdGhlIG1haW4gYmluYXJ5LCBpbiB0aGUgc2FtZQorICAgd2F5IHRoYXQgaGFzIGJlZW4gcG9zc2libGUgb24gV2luZG93cyBmb3IgcXVpdGUgc29tZSB0aW1lLCBmb3IKKyAgIExpbnV4LCBCU0RzIGFuZCBEYXJ3aW4uCisKKyAqIFByZWNvbXB1dGUgYW5kIHN0b3JlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgYW5jZXN0cnkgdHJhdmVyc2FsCisgICBpbiBhIHNlcGFyYXRlIGZpbGUgdG8gb3B0aW1pemUgZ3JhcGggd2Fsa2luZy4KKworICogVGhlIGVmZm9ydCB0byBwYXNzIHRoZSByZXBvc2l0b3J5IGluLWNvcmUgc3RydWN0dXJlIHRocm91Z2hvdXQgdGhlCisgICBBUEkgY29udGludWVzLiAgVGhpcyByb3VuZCBkZWFscyB3aXRoIHRoZSBjb2RlIHRoYXQgaW1wbGVtZW50cyB0aGUKKyAgIHJlZnMvcmVwbGFjZS8gbWVjaGFuaXNtLgorCisgKiBUaGUgYnVpbGQgcHJvY2VkdXJlICJtYWtlIERFVkVMT1BFUj1ZZXNQbGVhc2UiIGxlYXJuZWQgdG8gZW5hYmxlIGEKKyAgIGJpdCBtb3JlIHdhcm5pbmcgb3B0aW9ucyBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyIHVzZWQgdG8gaGVscAorICAgZGV2ZWxvcGVycyBtb3JlLiAgVGhlcmUgYWxzbyBpcyAibWFrZSBERVZPUFRTPXRva2VucyIga25vYgorICAgYXZhaWxhYmxlIG5vdywgZm9yIHRob3NlIHdobyB3YW50IHRvIGhlbHAgZml4aW5nIHdhcm5pbmdzIHdlCisgICB1c3VhbGx5IGlnbm9yZSwgZm9yIGV4YW1wbGUuCisKKyAqIEEgbmV3IHZlcnNpb24gb2YgdGhlIHRyYW5zcG9ydCBwcm90b2NvbCBpcyBiZWluZyB3b3JrZWQgb24uCisKKyAqIFRoZSBjb2RlIHRvIGludGVyZmFjZSB0byBHUEcgaGFzIGJlZW4gcmVzdHJ1Y3R1cmVkIHNvbWV3aGF0IHRvIG1ha2UKKyAgIGl0IGNsZWFuZXIgdG8gaW50ZWdyYXRlIHdpdGggb3RoZXIgdHlwZXMgb2Ygc2lnbmF0dXJlIHN5c3RlbXMgbGF0ZXIuCisKKyAqIFRoZSBjb2RlIGhhcyBiZWVuIHRhdWdodCB0byB1c2UgdGhlIGR1cGxpY2F0ZWQgaW5mb3JtYXRpb24gc3RvcmVkCisgICBpbiB0aGUgY29tbWl0LWdyYXBoIGZpbGUgdG8gbGVhcm4gdGhlIHRyZWUgb2JqZWN0IG5hbWUgZm9yIGEgY29tbWl0CisgICB0byBhdm9pZCBvcGVuaW5nIGFuZCBwYXJzaW5nIHRoZSBjb21taXQgb2JqZWN0IHdoZW4gaXQgbWFrZXMgc2Vuc2UKKyAgIHRvIGRvIHNvLgorCisgKiAiZ2l0IGdjIiBpbiBhIGxhcmdlIHJlcG9zaXRvcnkgdGFrZXMgYSBsb3Qgb2YgdGltZSBhcyBpdCBjb25zaWRlcnMKKyAgIHRvIHJlcGFjayBhbGwgb2JqZWN0cyBpbnRvIG9uZSBwYWNrIGJ5IGRlZmF1bHQuICBUaGUgY29tbWFuZCBoYXMKKyAgIGJlZW4gdGF1Z2h0IHRvIHByZXRlbmQgYXMgaWYgdGhlIGxhcmdlc3QgZXhpc3RpbmcgcGFja2ZpbGUgaXMKKyAgIG1hcmtlZCB3aXRoICIua2VlcCIgc28gdGhhdCBpdCBpcyBsZWZ0IHVudG91Y2hlZCB3aGlsZSBvYmplY3RzIGluCisgICBvdGhlciBwYWNrcyBhbmQgbG9vc2Ugb25lcyBhcmUgcmVwYWNrZWQuCisKKyAqIFRoZSB0cmFuc3BvcnQgcHJvdG9jb2wgdjIgaXMgZ2V0dGluZyB1cGRhdGVkIGZ1cnRoZXIuCisKKyAqIFRoZSBjb2RlcGF0aCBhcm91bmQgb2JqZWN0LWluZm8gQVBJIGhhcyBiZWVuIHRhdWdodCB0byB0YWtlIHRoZQorICAgcmVwb3NpdG9yeSBvYmplY3QgKHdoaWNoIGluIHR1cm4gdGVsbHMgdGhlIEFQSSB3aGljaCBvYmplY3Qgc3RvcmUKKyAgIHRoZSBvYmplY3RzIGFyZSB0byBiZSBsb2NhdGVkKS4KKworICogImdpdCBwYWNrLW9iamVjdHMiIG5lZWRzIHRvIGFsbG9jYXRlIHRvbnMgb2YgInN0cnVjdCBvYmplY3RfZW50cnkiCisgICB3aGlsZSBkb2luZyBpdHMgd29yaywgYW5kIHNocmlua2luZyBpdHMgc2l6ZSBoZWxwcyB0aGUgcGVyZm9ybWFuY2UKKyAgIHF1aXRlIGEgYml0LgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgImdpdCByZWJhc2UgLWkgLS1yb290IiBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZQorICAgdGhlIHNlcXVlbmNlciBtYWNoaW5lcnkgbW9yZS4KKworICogRGV2ZWxvcGVyIHN1cHBvcnQgdXBkYXRlLCBieSB1c2luZyBCVUcoKSBtYWNybyBpbnN0ZWFkIG9mIGRpZSgpIHRvCisgICBtYXJrIGNvZGVwYXRocyB0aGF0IHNob3VsZCBub3QgaGFwcGVuIG1vcmUgY2xlYXJseS4KKworICogRGV2ZWxvcGVyIHN1cHBvcnQuICBVc2UgbmV3ZXIgR0NDIG9uIG9uZSBvZiB0aGUgYnVpbGRzIGRvbmUgYXQKKyAgIFRyYXZpc0NJLm9yZyB0byBnZXQgbW9yZSB3YXJuaW5ncyBhbmQgZXJyb3JzIGRpYWdub3NlZC4KKworICogQ29udmVyc2lvbiBmcm9tIHVjaGFyWzIwXSB0byBzdHJ1Y3Qgb2JqZWN0X2lkIGNvbnRpbnVlcy4KKworICogQnkgY29kZSByZXN0cnVjdHVyaW5nIG9mIHN1Ym1vZHVsZSBtZXJnZSBpbiBtZXJnZS1yZWN1cnNpdmUsCisgICBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIGZyb20gdGhlIGNvZGVwYXRoIGFyZSBub3cgZ2l2ZW4gdXNpbmcgdGhlCisgICBzYW1lIG1lY2hhbmlzbSBhcyBvdGhlciBvdXRwdXQsIGFuZCBob25vciB0aGUgbWVyZ2UudmVyYm9zaXR5CisgICBjb25maWd1cmF0aW9uLiAgVGhlIGNvZGUgYWxzbyBsZWFybmVkIHRvIGdpdmUgYSBmZXcgbmV3IG1lc3NhZ2VzCisgICB3aGVuIGEgc3VibW9kdWxlIHRocmVlLXdheSBtZXJnZSByZXNvbHZlcyBjbGVhbmx5IHdoZW4gb25lIHNpZGUKKyAgIHJlY29yZHMgYSBkZXNjZW5kYW50IG9mIHRoZSBjb21taXQgY2hvc2VuIGJ5IHRoZSBvdGhlciBzaWRlLgorCisgKiBBdm9pZCB1bmNoZWNrZWQgc25wcmludGYoKSB0byBtYWtlIGZ1dHVyZSBjb2RlIGF1ZGl0aW5nIGVhc2llci4KKyAgIChtZXJnZSBhYzQ4OTZmMDA3IGprL3NucHJpbnRmLXRydW5jYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNYW55IHRlc3RzIGhhcmRjb2RlIHRoZSByYXcgb2JqZWN0IG5hbWVzLCB3aGljaCB3b3VsZCBjaGFuZ2Ugb25jZQorICAgd2UgbWlncmF0ZSBhd2F5IGZyb20gU0hBLTEuICBXaGlsZSBzb21lIG9mIHRoZW0gbXVzdCB0ZXN0IGFnYWluc3QKKyAgIGV4YWN0IG9iamVjdCBuYW1lcywgbW9zdCBvZiB0aGVtIGRvIG5vdCBoYXZlIHRvIHVzZSBoYXJkY29kZWQKKyAgIGNvbnN0YW50cyBpbiB0aGUgdGVzdC4gIFRoZSBsYXR0ZXIga2luZCBvZiB0ZXN0cyBoYXZlIGJlZW4gdXBkYXRlZAorICAgdG8gdGVzdCB0aGUgbW9yYWwgZXF1aXZhbGVudCBvZiB0aGUgb3JpZ2luYWwgd2l0aG91dCBoYXJkY29kaW5nIHRoZQorICAgYWN0dWFsIG9iamVjdCBuYW1lcy4KKworICogVGhlIGxpc3Qgb2YgY29tbWFuZHMgd2l0aCB0aGVpciB2YXJpb3VzIGF0dHJpYnV0ZXMgd2VyZSBzcHJlYWQKKyAgIGFjcm9zcyBhIGZldyBwbGFjZXMgaW4gdGhlIGJ1aWxkIHByb2NlZHVyZSwgYnV0IGl0IG5vdyBpcyBnZXR0aW5nIGEKKyAgIGJpdCBtb3JlIGNvbnNvbGlkYXRlZCB0byBhbGxvdyBtb3JlIGF1dG9tYXRpb24uCisKKyAqIFF1aXRlIGEgbWFueSB0ZXN0cyBhc3N1bWVkIHRoYXQgbmV3bHkgY3JlYXRlZCByZWZzIGFyZSBtYWRlIGFzCisgICBsb29zZSByZWZzIHVzaW5nIHRoZSBmaWxlcyBiYWNrZW5kLCB3aGljaCBoYXZlIGJlZW4gdXBkYXRlZCB0byB1c2UKKyAgIHByb3BlciBwbHVtYmluZyBsaWtlIHJldi1wYXJzZSBhbmQgdXBkYXRlLXJlZiwgdG8gYXZvaWQgYnJlYWthZ2UKKyAgIG9uY2Ugd2Ugc3RhcnQgdXNpbmcgZGlmZmVyZW50IHJlZiBiYWNrZW5kcy4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi4xNworLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBzaG9ydGxvZyBjcnVmdCIgYWJvcnRlZCB3aXRoIGEgQlVHIG1lc3NhZ2Ugd2hlbiBydW4gb3V0c2lkZSBhCisgICBHaXQgcmVwb3NpdG9yeS4gIFRoZSBjb21tYW5kIGhhcyBiZWVuIHRhdWdodCB0byBjb21wbGFpbiBhYm91dAorICAgZXh0cmEgYW5kIHVud2FudGVkIGFyZ3VtZW50cyBvbiBpdHMgY29tbWFuZCBsaW5lIGluc3RlYWQgaW4gc3VjaCBhCisgICBjYXNlLgorICAgKG1lcmdlIDRhYTAxNjFlODMgbWEvc2hvcnRsb2ctcmV2cGFyc2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN0YXNoIHB1c2ggLXUgLS0gPHBhdGhzcGVjPiIgZ2F2ZSBhbiB1bm5lY2Vzc2FyeSBhbmQgY29uZnVzaW5nCisgICBlcnJvciBtZXNzYWdlIHdoZW4gdGhlcmUgd2FzIG5vIHRyYWNrZWQgZmlsZXMgdGhhdCBtYXRjaCB0aGUKKyAgIDxwYXRoc3BlYz4sIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIDM1MzI3ODY4N2UgdGcvc3Rhc2gtdW50cmFja2VkLXdpdGgtcGF0aHNwZWMtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCB0YWcgLS1jb250YWlucyBuby1zdWNoLWNvbW1pdCIgZ2F2ZSBhIGZ1bGwgbGlzdCBvZiBvcHRpb25zCisgICBhZnRlciBnaXZpbmcgYW4gZXJyb3IgbWVzc2FnZS4KKyAgIChtZXJnZSAzYmIwOTIzZjA2IHBzL2NvbnRhaW5zLWlkLWVycm9yLW1lc3NhZ2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZGlmZi1oaWdobGlnaHQiIGZpbHRlciAoaW4gY29udHJpYi8pIGxlYXJuZWQgdG8gdW5kZXJzdGFuZCAiZ2l0IGxvZworICAgLS1ncmFwaCIgb3V0cHV0IGJldHRlci4KKyAgIChtZXJnZSA0NTUxZmJiYTE0IGprL2RpZmYtaGlnaGxpZ2h0LWdyYXBoLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIHdoZW4gcmVmcyB0aGF0IGRvIG5vdCBwb2ludCBhdCBjb21taXR0aXNoIGFyZSBnaXZlbiwgImdpdAorICAgZmlsdGVyLWJyYW5jaCIgZ2F2ZSBhIG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZXMuICBUaGlzIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZjc4YWIzNTVlNyB5ay9maWx0ZXItYnJhbmNoLW5vbi1jb21taXR0aXNoLXJlZnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMiIG1pc2JlaGF2ZWQgb24gYSBzdWJtb2R1bGUgdGhhdCBoYXMgYmVlbgorICAgcmVtb3ZlZCBmcm9tIHRoZSB3b3JraW5nIHRyZWUuCisgICAobWVyZ2UgNzRiNmJkYTMyZiBycy9zdGF0dXMtd2l0aC1yZW1vdmVkLXN1Ym1vZHVsZSBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gY3JlZGVudGlhbCBoZWxwZXIgZXhpdHMgdmVyeSBxdWlja2x5IHdpdGhvdXQgcmVhZGluZyBpdHMKKyAgIGlucHV0LCBpdCB1c2VkIHRvIGNhdXNlIEdpdCB0byBkaWUgd2l0aCBTSUdQSVBFLCB3aGljaCBoYXMgYmVlbgorICAgZml4ZWQuCisgICAobWVyZ2UgYTBkNTFlOGQwZSBlYi9jcmVkLWhlbHBlci1pZ25vcmUtc2lncGlwZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC0ta2VlcC1lbXB0eSIgc3RpbGwgcmVtb3ZlZCBhbiBlbXB0eSBjb21taXQgaWYgdGhlCisgICBvdGhlciBzaWRlIGNvbnRhaW5lZCBhbiBlbXB0eSBjb21taXQgKGR1ZSB0byB0aGUgImRvZXMgYW4KKyAgIGVxdWl2YWxlbnQgcGF0Y2ggZXhpc3QgYWxyZWFkeT8iIGNoZWNrKSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDNkOTQ2MTY1ZTEgcHcvcmViYXNlLWtlZXAtZW1wdHktZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTb21lIGNvZGVwYXRocywgaW5jbHVkaW5nIHRoZSByZWZzIEFQSSwgZ2V0IGFuZCBrZWVwIHJlbGF0aXZlCisgICBwYXRocywgdGhhdCBnbyBvdXQgb2Ygc3luYyB3aGVuIHRoZSBwcm9jZXNzIGRvZXMgY2hkaXIoMikuICBUaGUKKyAgIGNoZGlyLW5vdGlmeSBBUEkgaXMgaW50cm9kdWNlZCB0byBsZXQgdGhlc2UgY29kZXBhdGhzIGFkanVzdCB0aGVzZQorICAgY2FjaGVkIHBhdGhzIHRvIHRoZSBuZXcgY3VycmVudCBkaXJlY3RvcnkuCisgICAobWVyZ2UgZmI5YzJkMjcwMyBqay9yZWxhdGl2ZS1kaXJlY3RvcnktZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImNkIHN1Yi9kaXIgJiYgZ2l0IGNvbW1pdCAuLi9wYXRoIiBvdWdodCB0byByZWNvcmQgdGhlIGNoYW5nZXMgdG8KKyAgIHRoZSBmaWxlICJzdWIvcGF0aCIsIGJ1dCB0aGlzIHJlZ3Jlc3NlZCBsb25nIHRpbWUgYWdvLgorICAgKG1lcmdlIDg2MjM4ZTA3ZWYgYncvY29tbWl0LXBhcnRpYWwtZnJvbS1zdWJkaXJlY3RvcnktZml4IGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50IGludHJvZHVjdGlvbiBvZiAiLS1sb2ctZGVzdGluYXRpb24iIG9wdGlvbiB0byAiZ2l0IGRhZW1vbiIKKyAgIGRpZCBub3Qgd29yayB3ZWxsIHdoZW4gdGhlIGRhZW1vbiB3YXMgcnVuIHVuZGVyICItLWluZXRkIiBtb2RlLgorICAgKG1lcmdlIGU2N2Q5MDZkNzMgbHcvZGFlbW9uLWxvZy1kZXN0aW5hdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqIFNtYWxsIGZpeCB0byB0aGUgYXV0b2NvbmYgYnVpbGQgcHJvY2VkdXJlLgorICAgKG1lcmdlIDI0OTQ4MmRhZjAgZXMvZnJlYWQtcmVhZHMtZGlyLWF1dG9jb25mLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIEZpeCBhbiB1bmV4cGxvaXRhYmxlIChiZWNhdXNlIHRoZSBvdmVyc2l6ZWQgY29udGVudHMgYXJlIG5vdCB1bmRlcgorICAgYXR0YWNrZXIncyBjb250cm9sKSBidWZmZXIgb3ZlcmZsb3cuCisgICAobWVyZ2UgZDg1NzlhY2NmYSBicC9mc21vbml0b3ItYnVmc2l6ZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWNlbnQgc2ltcGxpZmljYXRpb24gb2YgYnVpbGQgcHJvY2VkdXJlIGZvcmdvdCBhIGJpdCBvZiB0d2VhayB0bworICAgdGhlIGJ1aWxkIHByb2NlZHVyZSBvZiBjb250cmliL213LXRvLWdpdC8KKyAgIChtZXJnZSBkODY5ODk4N2YzIGFiL3NpbXBsaWZ5LXBlcmwtbWFrZWZpbGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNb3ZpbmcgYSBzdWJtb2R1bGUgdGhhdCBpdHNlbGYgaGFzIHN1Ym1vZHVsZSBpbiBpdCB3aXRoICJnaXQgbXYiCisgICBmb3Jnb3QgdG8gbWFrZSBuZWNlc3NhcnkgYWRqdXN0bWVudCB0byB0aGUgbmVzdGVkIHN1Yi1zdWJtb2R1bGVzOworICAgbm93IHRoZSBjb2RlcGF0aCBsZWFybmVkIHRvIHJlY3Vyc2UgaW50byB0aGUgc3VibW9kdWxlcy4KKworICogImdpdCBjb25maWcgLS11bnNldCBhLmIiLCB3aGVuICJhLmIiIGlzIHRoZSBsYXN0IHZhcmlhYmxlIGluIGFuCisgICBvdGhlcndpc2UgZW1wdHkgc2VjdGlvbiAiYSIsIGxlZnQgYW4gZW1wdHkgc2VjdGlvbiAiYSIgYmVoaW5kLCBhbmQKKyAgIHdvcnNlIHlldCwgYSBzdWJzZXF1ZW50ICJnaXQgY29uZmlnIGEuYyB2YWx1ZSIgZGlkIG5vdCByZXVzZSB0aGF0CisgICBlbXB0eSBzaGVsbCBhbmQgaW5zdGVhZCBjcmVhdGVkIGEgbmV3IG9uZS4gIFRoZXNlIGhhdmUgYmVlbgorICAgKHBhcnRpYWxseSkgY29ycmVjdGVkLgorICAgKG1lcmdlIGM3MWQ4YmIzOGEganMvZW1wdHktY29uZmlnLXNlY3Rpb24tZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCB3b3JrdHJlZSByZW1vdmUiIGxlYXJuZWQgdGhhdCAiLWYiIGlzIGEgc2hvcnRoYW5kIGZvcgorICAgIi0tZm9yY2UiIG9wdGlvbiwganVzdCBsaWtlIGZvciAiZ2l0IHdvcmt0cmVlIGFkZCIuCisgICAobWVyZ2UgZDIyOGVlYTUxNCBzYi93b3JrdHJlZS1yZW1vdmUtb3B0LWZvcmNlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgbGVhcm5lZCB0byBjbGVhciBjYWNoZWQgbGlzdCBvZgorICAgY29tbWFuZCBsaW5lIG9wdGlvbnMgdXBvbiBkb3Qtc291cmNpbmcgaXQgYWdhaW4gaW4gYSBtb3JlIGVmZmljaWVudAorICAgd2F5LgorICAgKG1lcmdlIDk0NDA4ZGM3MWMgc2cvY29tcGxldGlvbi1jbGVhci1jYWNoZWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN2biIgaGFkIGEgbWlub3IgdGhpbmtvL3R5cG8gd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgNTFkYjI3MTU4NyBhYi9naXQtc3ZuLWdldC1yZWNvcmQtdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIER1cmluZyBhICJyZWJhc2UgLWkiIHNlc3Npb24sIHRoZSBjb2RlIGNvdWxkIGdpdmUgb2xkZXIgdGltZXN0YW1wCisgICB0byBjb21taXRzIGNyZWF0ZWQgYnkgbGF0ZXIgInBpY2siIHRoYW4gYW4gZWFybGllciAicmV3b3JkIiwgd2hpY2gKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAxMmY3YmFiZDZiIGpzL2lkZW50LWRhdGUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzdWJtb2R1bGUgc3RhdHVzIiBkaWQgbm90IGNoZWNrIHRoZSBzeW1ib2xpYyByZXZpc2lvbiBuYW1lIGl0CisgICBjb21wdXRlZCBmb3IgdGhlIHN1Ym1vZHVsZSBIRUFEIGlzIG5vdCB0aGUgTlVMTCwgYW5kIHRocmV3IGl0IGF0CisgICBwcmludGYgcm91dGluZXMsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAwYjVlMmVhN2NmIG5kL3N1Ym1vZHVsZS1zdGF0dXMtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiBmZWQgaW5wdXQgdGhhdCBhbHJlYWR5IGhhcyBJbi1SZXBseS1UbzogYW5kL29yIFJlZmVyZW5jZXM6CisgICBoZWFkZXJzIGFuZCB0b2xkIHRvIGFkZCB0aGUgc2FtZSBpbmZvcm1hdGlvbiwgImdpdCBzZW5kLWVtYWlsIgorICAgYWRkZWQgdGhlc2UgaGVhZGVycyBzZXBhcmF0ZWx5LCBpbnN0ZWFkIG9mIGFwcGVuZGluZyB0byBhbiBleGlzdGluZworICAgb25lLCB3aGljaCBpcyBhIHZpb2xhdGlvbiBvZiB0aGUgUkZDLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgMjU2YmUxZDNmMCBzYS9zZW5kLWVtYWlsLWRlZHVwLXNvbWUtaGVhZGVycyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIGhhZCBhIHJlZ3Jlc3Npb24gaW4gdjIuMTUuMCBlcmEgd2hlcmUgaXQgc2tpcHBlZAorICAgc29tZSBtZXJnZSBjb21taXRzIGluIGNlcnRhaW4gY2FzZXMsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBiZTAxMWJiZTAwIG1hL2Zhc3QtZXhwb3J0LXNraXAtbWVyZ2UtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGUgZGlkIG5vdCBwcm9wYWdhdGUgdGhlIHRlcm1pbmFsIHdpZHRoIHRvIHN1YnByb2Nlc3NlcyB2aWEKKyAgIENPTFVNTlMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHdoaWNoIGl0IG5vdyBkb2VzLiAgVGhpcyBjYXVzZWQKKyAgIHRyb3VibGUgdG8gImdpdCBjb2x1bW4iIGhlbHBlciBzdWJwcm9jZXNzIHdoZW4gImdpdCB0YWcgLS1jb2x1bW49cm93IgorICAgdHJpZWQgdG8gbGlzdCB0aGUgZXhpc3RpbmcgdGFncyBvbiBhIGRpc3BsYXkgd2l0aCBub24tZGVmYXVsdCB3aWR0aC4KKyAgIChtZXJnZSBiNWQ1YTU2N2ZiIG5kL3Rlcm0tY29sdW1ucyBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIGxlYXJuZWQgdGhhdCBvdXIgc291cmNlIGZpbGVzIHdpdGggIi5wbCIgYW5kICIucHkiIGV4dGVuc2lvbnMKKyAgIGFyZSBQZXJsIGFuZCBQeXRob24gZmlsZXMgcmVzcGVjdGl2ZWx5IGFuZCBjaGFuZ2VzIHRvIHRoZW0gYXJlCisgICBiZXR0ZXIgdmlld2VkIGFzIHN1Y2ggd2l0aCBhcHByb3ByaWF0ZSBkaWZmIGRyaXZlcnMuCisgICAobWVyZ2UgNzgxOGI2MTllMiBhYi9wZXJsLXB5dGhvbi1hdHRycyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC1pIiBzb21ldGltZXMgbGVmdCBpbnRlcm1lZGlhdGUgIiMgVGhpcyBpcyBhCisgICBjb21iaW5hdGlvbiBvZiBOIGNvbW1pdHMiIG1lc3NhZ2UgbWVhbnQgZm9yIHRoZSBodW1hbiBjb25zdW1wdGlvbgorICAgaW5zaWRlIGFuIGVkaXRvciBpbiB0aGUgZmluYWwgcmVzdWx0IGluIGNlcnRhaW4gY29ybmVyIGNhc2VzLCB3aGljaAorICAgaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgMTVlZjY5MzE0ZCBqcy9yZWJhc2UtaS1jbGVhbi1tc2ctYWZ0ZXItZml4dXAtY29udGludWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIHRlc3QgdG8gc2VlIGlmIHRoZSBmaWxlc3lzdGVtIG5vcm1hbGl6ZXMgVVRGLTggZmlsZW5hbWUgaGFzIGJlZW4KKyAgIHVwZGF0ZWQgdG8gY2hlY2sgd2hhdCB3ZSBuZWVkIHRvIGtub3cgaW4gYSBtb3JlIGRpcmVjdCB3YXksIGkuZS4gYQorICAgcGF0aCBjcmVhdGVkIGluIE5GQyBmb3JtIGNhbiBiZSBhY2Nlc3NlZCB3aXRoIE5GRCBmb3JtIChvciB2aWNlCisgICB2ZXJzYSkgdG8gY29wZSB3aXRoIEFQRlMgYXMgd2VsbCBhcyBIRlMuCisgICAobWVyZ2UgNzQyYWUxMGUzNSB0Yi90ZXN0LWFwZnMtdXRmOC1ub3JtYWxpemF0aW9uIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmb3JtYXQtcGF0Y2ggLS1jb3ZlciAtLWF0dGFjaCIgY3JlYXRlZCBhIGJyb2tlbiBNSU1FIG11bHRpcGFydAorICAgbWVzc2FnZSBmb3IgdGhlIGNvdmVyIGxldHRlciwgd2hpY2ggaGFzIGJlZW4gZml4ZWQgYnkga2VlcGluZyB0aGUKKyAgIGNvdmVyIGxldHRlciBhcyBwbGFpbiB0ZXh0IGZpbGUuCisgICAobWVyZ2UgNTBjZDU0ZWY0ZSBiYy9mb3JtYXQtcGF0Y2gtY292ZXItbm8tYXR0YWNoIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHNwbGl0LWluZGV4IGZlYXR1cmUgaGFkIGEgbG9uZy1zdGFuZGluZyBhbmQgZG9ybWFudCBidWcgaW4KKyAgIGNlcnRhaW4gdXNlIG9mIHRoZSBpbi1jb3JlIG1lcmdlIG1hY2hpbmVyeSwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgN2RiMTE4MzAzYSBlbi91bnBhY2stdHJlZXMtc3BsaXQtaW5kZXgtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQXNjaWlkb2N0b3IgZ2l2ZXMgYSByZWFzb25hYmxlIGltaXRhdGlvbiBmb3IgQXNjaWlEb2MsIGJ1dCBkb2VzIG5vdAorICAgcmVuZGVyIGlsbHVzdHJhdGlvbiBpbiBhIGxpdGVyYWwgYmxvY2sgY29ycmVjdGx5IHdoZW4gaW5kZW50ZWQgd2l0aAorICAgSFQgYnkgZGVmYXVsdC4gVGhlIHByb2JsZW0gaXMgZml4ZWQgYnkgZm9yY2luZyA4LXNwYWNlIHRhYnMuCisgICAobWVyZ2UgMzc5ODA1MDUxZCBiYy9hc2NpaWRvY3Rvci10YWItd2lkdGggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlIGNsZWFuLXVwIHRvIGFkanVzdCB0byBhIG1vcmUgcmVjZW50IGxvY2tmaWxlIEFQSSBjb252ZW50aW9uIHRoYXQKKyAgIGFsbG93cyBsb2NrZmlsZSBpbnN0YW5jZXMga2VwdCBvbiB0aGUgc3RhY2suCisgICAobWVyZ2UgMGZhNWEyZWQ4ZCBtYS9sb2NrZmlsZS1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKworICogdGhlX3JlcG9zaXRvcnktPmluZGV4IGlzIG5vdCBhIGFsbG9jYXRlZCBwaWVjZSBvZiBtZW1vcnkgYnV0CisgICByZXBvX2NsZWFyKCkgaW5kaXNjcmltaW5hdGVseSBhdHRlbXB0ZWQgdG8gZnJlZSgzKSBpdCwgd2hpY2ggaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA3NDM3M2I1ZjEwIG5kL3JlcG8tY2xlYXIta2VlcC10aGUtaW5kZXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlIGNsZWFuLXVwIHRvIGF2b2lkIG5vbi1zdGFuZGFyZC1jb25mb3JtYW50IHBvaW50ZXIgYXJpdGhtZXRpYy4KKyAgIChtZXJnZSBjMTEyMDg0YWY5IHJzL25vLW51bGwtcHRyLWFyaXRoLWluLWZhc3QtZXhwb3J0IGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZSBjbGVhbi11cCB0byB0dXJuIGhpc3RvcnkgdHJhdmVyc2FsIG1vcmUgcm9idXN0IGluIGEKKyAgIHNlbWktY29ycnVwdCByZXBvc2l0b3J5LgorICAgKG1lcmdlIDg3MDJiMzBmZDcgamsvdW5hdmFpbGFibGUtY2FuLWJlLW1pc3NpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHVwZGF0ZS1yZWYgQSBCIiBpcyBzdXBwb3NlZCB0byBlbnN1cmUgdGhhdCByZWYgQSBkb2VzIG5vdCB5ZXQKKyAgIGV4aXN0IHdoZW4gQiBpcyBhIE5VTEwgT0lELCBidXQgdGhpcyBjaGVjayB3YXMgbm90IGRvbmUgY29ycmVjdGx5CisgICBmb3IgcHNldWRvLXJlZnMgb3V0c2lkZSByZWZzLyBoaWVyYXJjaHksIGUuZy4gTUVSR0VfSEVBRC4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBhbmQgImdpdCBzdWJtb2R1bGUgYWRkIiBzdXBwb3J0ZWQgdGhlCisgICAiLS1yZWZlcmVuY2UiIG9wdGlvbiB0byBib3Jyb3cgb2JqZWN0cyBmcm9tIGEgbmVpZ2hib3VyaW5nIGxvY2FsCisgICByZXBvc2l0b3J5IGxpa2UgImdpdCBjbG9uZSIgZG9lcywgYnV0IGxhY2tlZCB0aGUgbW9yZSByZWNlbnQKKyAgIGludmVudGlvbiAiLS1kaXNzb2NpYXRlIi4gIEFsc28gImdpdCBzdWJtb2R1bGUgYWRkIiBoYXMgYmVlbiB0YXVnaHQKKyAgIHRvIHRha2UgdGhlICItLXByb2dyZXNzIiBvcHRpb24uCisgICAobWVyZ2UgYTBlZjI5MzQxYSBjZi9zdWJtb2R1bGUtcHJvZ3Jlc3MtZGlzc29jaWF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqIFVwZGF0ZSBjcmVkZW50aWFsLW5ldHJjIGhlbHBlciAoaW4gY29udHJpYi8pIHRvIGFsbG93IGN1c3RvbWl6aW5nCisgICB0aGUgR1BHIHVzZWQgdG8gZGVjcnlwdCB0aGUgZW5jcnlwdGVkIC5uZXRyYyBmaWxlLgorICAgKG1lcmdlIDc4NmVmNTBhMjMgbG0vY3JlZGVudGlhbC1uZXRyYyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgYXR0ZW1wdHMgdHdvIGRpZmZlcmVudCBraW5kcyBvZiAiZ2l0IGZldGNoIgorICAgYWdhaW5zdCB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeSB0byBncmFiIGEgY29tbWl0IGJvdW5kIGF0IHRoZQorICAgc3VibW9kdWxlJ3MgcGF0aCwgYnV0IGl0IGluY29ycmVjdGx5IGdhdmUgdXAgaWYgdGhlIGZpcnN0IGtpbmQKKyAgIChpLmUuIGEgbm9ybWFsIGZldGNoKSBmYWlsZWQsIG1ha2luZyB0aGUgc2Vjb25kICJsYXN0IHJlc29ydCIgb25lCisgICAoaS5lLiBmZXRjaGluZyBhbiBleGFjdCBjb21taXQgb2JqZWN0IGJ5IG9iamVjdCBuYW1lKSBpbmVmZmVjdGl2ZS4KKyAgIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGUzMGQ4MzM2NzEgc2Ivc3VibW9kdWxlLXVwZGF0ZS10cnktaGFyZGVyIGxhdGVyIHRvIG1haW50KS4KKworICogRXJyb3IgYmVoYXZpb3VyIG9mICJnaXQgZ3JlcCIgd2hlbiBpdCBjYW5ub3QgcmVhZCB0aGUgaW5kZXggd2FzCisgICBpbmNvbnNpc3RlbnQgd2l0aCBvdGhlciBjb21tYW5kcyB0aGF0IHVzZXMgdGhlIGluZGV4LCB3aGljaCBoYXMKKyAgIGJlZW4gY29ycmVjdGVkIHRvIGVycm9yIG91dCBlYXJseS4KKyAgIChtZXJnZSBiMmFhODRjNzg5IHNiL2dyZXAtZGllLW9uLXVucmVhZGFibGUtaW5kZXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSB1c2VkIHRvIGNhbGwgcmVnZnJlZSgpIGFmdGVyIHJlZ2NvbXAoKSBmYWlsZWQgaW4gc29tZSBjb2RlcGF0aHMsCisgICB3aGljaCBoYXZlIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDE3MTU0YjE1NzYgbWEvcmVnZXgtbm8tcmVnZnJlZS1hZnRlci1jb21wLWZhaWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgaW1wb3J0LXRhcnMgc2NyaXB0IChpbiBjb250cmliLykgaGFzIGJlZW4gdGF1Z2h0IHRvIGhhbmRsZQorICAgdGFyYmFsbHMgd2l0aCBvdmVybHkgbG9uZyBwYXRocyB0aGF0IHVzZSBQQVggZXh0ZW5kZWQgaGVhZGVycy4KKyAgIChtZXJnZSAxMmVjZWE0NmUzIHBhL2ltcG9ydC10YXJzLWxvbmctbmFtZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJldi1wYXJzZSBZLi4uIiBldGMuIG1pc2JlaGF2ZWQgd2hlbiBnaXZlbiBlbmRwb2ludHMgd2VyZQorICAgbm90IGNvbW1pdHRpc2hlcy4KKyAgIChtZXJnZSAwZWQ1NTZkMzhmIGVuL3Jldi1wYXJzZS1pbnZhbGlkLXJhbmdlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdWxsIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tcmViYXNlIiwgd2hlbiB0aGUgc3VibW9kdWxlCisgICByZXBvc2l0b3J5J3MgaGlzdG9yeSBkaWQgbm90IGhhdmUgYW55dGhpbmcgY29tbW9uIGJldHdlZW4gb3VycyBhbmQKKyAgIHRoZSB1cHN0cmVhbSdzLCBmYWlsZWQgdG8gZXhlY3V0ZS4gIFdlIG5lZWQgdG8gZmV0Y2ggZnJvbSB0aGVtIHRvCisgICBjb250aW51ZSBldmVuIGluIHN1Y2ggYSBjYXNlLgorICAgKG1lcmdlIDRkMzZmODhiZTcganQvc3VibW9kdWxlLXB1bGwtcmVjdXJzZS1yZWJhc2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlbW90ZSB1cGRhdGUiIGNhbiB0YWtlIGJvdGggYSBzaW5nbGUgcmVtb3RlIG5pY2tuYW1lIGFuZCBhCisgICBuaWNrbmFtZSBmb3IgcmVtb3RlIGdyb3VwcywgYnV0IG9ubHkgb25lIG9mIHRoZW0gd2FzIGRvY3VtZW50ZWQuCisgICAobWVyZ2UgYTk3NDQ3YTQyYSBuZC9yZW1vdGUtdXBkYXRlLWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqICJpbmRleC1wYWNrIC0tc3RyaWN0IiBoYXMgYmVlbiB0YXVnaHQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgcnVucyB0aGUKKyAgIGZpbmFsIG9iamVjdCBpbnRlZ3JpdHkgY2hlY2tzIGFmdGVyIG1ha2luZyB0aGUgZnJlc2hseSBpbmRleGVkCisgICBwYWNrZmlsZSBhdmFpbGFibGUgdG8gaXRzZWxmLgorICAgKG1lcmdlIDM3Mzc3NDYxMjAgamsvaW5kZXgtcGFjay1tYWludCBsYXRlciB0byBtYWludCkuCisKKyAqIE1ha2UgemxpYiBpbmZsYXRlIGNvZGVwYXRoIG1vcmUgcm9idXN0IGFnYWluc3QgdmVyc2lvbnMgb2YgemxpYgorICAgdGhhdCBjbG9iYmVyIHVudXNlZCBwb3J0aW9uIG9mIG91dGJ1Zi4KKyAgIChtZXJnZSBiNjExMzk2ZTk3IGpsL3psaWItcmVzdG9yZS1udWwtdGVybWluYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGaXggb2xkIG1lcmdlIGdsaXRjaCBpbiBEb2N1bWVudGF0aW9uIGR1cmluZyB2Mi4xMy1yYzAgZXJhLgorICAgKG1lcmdlIDI4Y2IwNjAyMGIgbXcvZG9jLW1lcmdlLWVudW1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0byByZWFkIGNvbXByZXNzZWQgYml0bWFwIHdhcyBub3QgY2FyZWZ1bCB0byBhdm9pZCByZWFkaW5nCisgICBwYXN0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAxMTQwYmYwMWVjIGprL2V3YWgtYm91bmRzLWNoZWNrIGxhdGVyIHRvIG1haW50KS4KKworICogIm1ha2UgTk9fSUNPTlY9Tm9UaGFua3MiIGRpZCBub3Qgb3ZlcnJpZGUgTkVFRFNfTElCSUNPTlYKKyAgIChpLmUuIGxpbmthZ2Ugb2YgLWxpbnRsLCAtbGljb252LCBldGMuIHRoYXQgYXJlIHBsYXRmb3JtLXNwZWNpZmljCisgICB0d2Vha3MpLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZmRiMWZiYmM3ZCBlcy9tYWtlLW5vLWljb252IGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgbWlub3IgZG9jLCB0ZXN0IGFuZCBidWlsZCB1cGRhdGVzIGFuZCBjb2RlIGNsZWFudXBzLgorICAgKG1lcmdlIDI0OGY2NmVkOGUgbmQvdHJhY2Utd2l0aC1lbnYgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE0Y2VkNTU2MmMgeXMvYmlzZWN0LW9iamVjdC1pZC1taXNzaW5nLWNvbnZlcnNpb24tZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1OTg4ZWI2MzFhIGFiL2RvYy1oYXNoLWJyb2tlbm5lc3MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGE0ZDRlMzJhNzAgcGsvdGVzdC1hdm9pZC1waXBlLWhpZGluZy1leGl0LXN0YXR1cyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDVlMjkzYzFhYyBqay9mbG9ja2ZpbGUtc3RkaW8gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGU5MTg0YjA3ODkgamsvdDU1NjEtbWlzc2luZy1jdXJsIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiMTgwMWI4NWEzIG5kL3dvcmt0cmVlLW1vdmUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGJiZDM3NGRkMjAgYWsvYmlzZWN0LWRvYy10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0ODU1ZjA2ZmIzIG1uL3NlbmQtZW1haWwtY3JlZGVudGlhbC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDg1MjNiMWUzNTUgZW4vZG9jLXR5cG9lcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDNiNDRjY2ZlNyBqcy90NTQwNC1wYXRoLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZGVjZjcxMWZjMSBwcy90ZXN0LWNobXRpbWUtZ2V0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyMmQxMWE2ZThlIGVzL3dvcmt0cmVlLWRvY3MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDkyYTVkYmJjMjIgdGcvdXNlLWdpdC1jb250YWN0cyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYWRjODg3MjIxZiB0cS90MTUxMCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYmVkMjFhOGFkNiBzZy9kb2MtZ2MtcXVvdGUtbWlzbWF0Y2gtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3MzM2NGU0ZjEwIHR6L2RvYy1naXQtdXJscy1yZWZlcmVuY2UgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGNkMWU2MDZiYWQgYmMvbWFpbG1hcC1zZWxmIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmNzk5N2UzNjgyIGFvL2NvbmZpZy1hcGktZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlZTkzMDc1NGQ4IGprL2FwcGx5LXAtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwMTFiNjQ4NjQ2IG5kL3BhY2stZm9ybWF0LWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODdhNmJiNzAxYSBzZy90NTMxMC1qZ2l0LWJpdG1hcC10ZXN0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmNmI4Mjk3MGFhIHNnL3Q1NTE2LWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0MzYyZGEwNzhlIHNnL3Q3MDA1LXNwYWNlcy1pbi1maWxlbmFtZXMtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgN2QwZWU0N2MxMSBqcy90ZXN0LXVuc2V0LXByZXJlcSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTM1NmEzYzM1NCBhaC9taXNjLWRvYy11cGRhdGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5MmM0YTdhMTI5IG5kL2NvbXBsZXRpb24tYWxpYXNmaWxldHlwZS10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1OGJkNzdiNjZhIG5kL3BhY2stdW5yZWFjaGFibGUtb2JqZWN0cy1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRlZDc5ZDUyMDMgc2cvdDY1MDAtbm8tcmVkaXJlY3Qtb2Ytc3RkaW4gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE3YjhhMmQ2Y2QgamsvY29uZmlnLWJsb2Itc2Fucy1yZXBvIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1OTA1NTFjYTJjIHJkL3RhZy1kb2MtbGlnaHR3ZWlnaHQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ0ZjU2MGZjMTYgcmQvaW5pdC10eXBvIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmMTU2YTA5MzRhIHJkL3A0LWRvYy1tYXJrdXAtZW52IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyYTAwNTAyYjE0IHRnL2RvYy1zZWMtbGlzdCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDdjYzkxMzEwYSBqay9zdWJtb2R1bGUtZnNjay1sb29zZS1maXh1cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZWZkZTdiNzI1YyByZC9jb21tZW50LXR5cG9maXgtaW4tc2hhMS1maWxlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3ZWVkYWQxNWRmIHJkL2RpZmYtb3B0aW9ucy10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1OGViZDkzNmNjIGttL2RvYy13b3JrZmxvd3MtdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzBhYTk2Y2RmOCByZC9kb2MtcmVtb3RlLXRyYWNraW5nLXdpdGgtaHlwaGVuIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjZjMxNzg3N2UzIGtzL2JyYW5jaC1zZXQtdXBzdHJlYW0gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDhkZTE5ZDZiZTggc2cvdDc0MDYtY2hhaW4tZml4IGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDk4Y2RkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE4LjEudHh0CkBAIC0wLDAgKzEsNiBAQAorR2l0IHYyLjE4LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHVwIHRoZSBmaXhlcyB0aGF0IGFwcGVhciBpbiB2Mi4xNC41IGFuZCBpbgordjIuMTcuMiB0byBhZGRyZXNzIHRoZSByZWNlbnRseSByZXBvcnRlZCBDVkUtMjAxOC0xNzQ1Njsgc2VlIHRoZQorcmVsZWFzZSBub3RlcyBmb3IgdGhvc2UgdmVyc2lvbnMgZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTguMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTguMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiMTY4YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC4yLnR4dApAQCAtMCwwICsxLDggQEAKK0dpdCB2Mi4xOC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNiwgdjIuMTUuNAorYW5kIGluIHYyLjE3LjMsIGFkZHJlc3NpbmcgdGhlIHNlY3VyaXR5IGlzc3VlcyBDVkUtMjAxOS0xMzQ4LAorQ1ZFLTIwMTktMTM0OSwgQ1ZFLTIwMTktMTM1MCwgQ1ZFLTIwMTktMTM1MSwgQ1ZFLTIwMTktMTM1MiwKK0NWRS0yMDE5LTEzNTMsIENWRS0yMDE5LTEzNTQsIGFuZCBDVkUtMjAxOS0xMzg3OyBzZWUgdGhlIHJlbGVhc2Ugbm90ZXMKK2ZvciB0aG9zZSB2ZXJzaW9ucyBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTE0M2YwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE4LjMudHh0CkBAIC0wLDAgKzEsNSBAQAorR2l0IHYyLjE4LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHRoZSBzZWN1cml0eSBmaXggdGhhdCBhcHBlYXJzIGluIHYyLjE3LjQ7IHNlZQordGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoYXQgdmVyc2lvbiBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGVmODU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE4LjQudHh0CkBAIC0wLDAgKzEsNSBAQAorR2l0IHYyLjE4LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHRoZSBzZWN1cml0eSBmaXggdGhhdCBhcHBlYXJzIGluIHYyLjE3LjU7IHNlZQordGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoYXQgdmVyc2lvbiBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTFjNzliCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjAudHh0CkBAIC0wLDAgKzEsNjE1IEBACitHaXQgMi4xOSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjIuMTgKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqICJnaXQgZGlmZiIgY29tcGFyZXMgdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlLiAgRm9yIHBhdGhzCisgICBhZGRlZCB3aXRoIGludGVudC10by1hZGQgYml0LCB0aGUgY29tbWFuZCBzaG93cyB0aGUgZnVsbCBjb250ZW50cworICAgb2YgdGhlbSBhcyBhZGRlZCwgYnV0IHRoZSBwYXRocyB0aGVtc2VsdmVzIHdlcmUgbm90IG1hcmtlZCBhcyBuZXcKKyAgIGZpbGVzLiAgVGhleSBhcmUgbm93IHNob3duIGFzIG5ldyBieSBkZWZhdWx0LgorCisgICAiZ2l0IGFwcGx5IiBsZWFybmVkIHRoZSAiLS1pbnRlbnQtdG8tYWRkIiBvcHRpb24gc28gdGhhdCBhbgorICAgb3RoZXJ3aXNlIHdvcmtpbmctdHJlZS1vbmx5IGFwcGxpY2F0aW9uIG9mIGEgcGF0Y2ggd2lsbCBhZGQgbmV3CisgICBwYXRocyB0byB0aGUgaW5kZXggbWFya2VkIHdpdGggdGhlICJpbnRlbnQtdG8tYWRkIiBiaXQuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCB0aGUgIi0tY29sdW1uIiBvcHRpb24gdGhhdCBnaXZlcyBub3QganVzdCB0aGUKKyAgIGxpbmUgbnVtYmVyIGJ1dCB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUgaGl0LgorCisgKiBUaGUgIi1sIiBvcHRpb24gaW4gImdpdCBicmFuY2ggLWwiIGlzIGFuIHVuZm9ydHVuYXRlIHNob3J0LWhhbmQgZm9yCisgICAiLS1jcmVhdGUtcmVmbG9nIiwgYnV0IG1hbnkgdXNlcnMsIGJvdGggb2xkIGFuZCBuZXcsIHNvbWVob3cgZXhwZWN0CisgICBpdCB0byBiZSBzb21ldGhpbmcgZWxzZSwgcGVyaGFwcyAiLS1saXN0Ii4gIFRoaXMgc3RlcCB3YXJucyB3aGVuICItbCIKKyAgIGlzIHVzZWQgYXMgYSBzaG9ydC1oYW5kIGZvciAiLS1jcmVhdGUtcmVmbG9nIiBhbmQgd2FybnMgYWJvdXQgdGhlCisgICBmdXR1cmUgcmVwdXJwb3Npbmcgb2YgdGhlIGl0IHdoZW4gaXQgaXMgdXNlZC4KKworICogVGhlIHVzZXJkaWZmIHBhdHRlcm4gZm9yIC5waHAgaGFzIGJlZW4gdXBkYXRlZC4KKworICogVGhlIGNvbnRlbnQtdHJhbnNmZXItZW5jb2Rpbmcgb2YgdGhlIG1lc3NhZ2UgImdpdCBzZW5kLWVtYWlsIiBzZW5kcworICAgb3V0IGJ5IGRlZmF1bHQgd2FzIDhiaXQsIHdoaWNoIGNhbiBjYXVzZSB0cm91YmxlIHdoZW4gdGhlcmUgaXMgYW4KKyAgIG92ZXJsb25nIGxpbmUgdG8gYnVzdCBSRkMgNTMyMi8yODIyIGxpbWl0LiAgQSBuZXcgb3B0aW9uICdhdXRvJyB0bworICAgYXV0b21hdGljYWxseSBzd2l0Y2ggdG8gcXVvdGVkLXByaW50YWJsZSB3aGVuIHRoZXJlIGlzIHN1Y2ggYSBsaW5lCisgICBpbiB0aGUgcGF5bG9hZCBoYXMgYmVlbiBpbnRyb2R1Y2VkIGFuZCBpcyBtYWRlIHRoZSBkZWZhdWx0LgorCisgKiAiZ2l0IGNoZWNrb3V0IiBhbmQgImdpdCB3b3JrdHJlZSBhZGQiIGxlYXJuZWQgdG8gaG9ub3IKKyAgIGNoZWNrb3V0LmRlZmF1bHRSZW1vdGUgd2hlbiBhdXRvLXZpdmlmeWluZyBhIGxvY2FsIGJyYW5jaCBvdXQgb2YgYQorICAgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBpbiBhIHJlcG9zaXRvcnkgd2l0aCBtdWx0aXBsZSByZW1vdGVzIHRoYXQKKyAgIGhhdmUgdHJhY2tpbmcgYnJhbmNoZXMgdGhhdCBzaGFyZSB0aGUgc2FtZSBuYW1lcy4KKyAgIChtZXJnZSA4ZDdiNTU4YmFlIGFiL2NoZWNrb3V0LWRlZmF1bHQtcmVtb3RlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBncmVwIiBsZWFybmVkIHRoZSAiLS1vbmx5LW1hdGNoaW5nIiBvcHRpb24uCisKKyAqICJnaXQgcmViYXNlIC0tcmViYXNlLW1lcmdlcyIgbW9kZSBub3cgaGFuZGxlcyBvY3RvcHVzIG1lcmdlcyBhcworICAgd2VsbC4KKworICogQWRkIGEgc2VydmVyLXNpZGUga25vYiB0byBza2lwIGNvbW1pdHMgaW4gZXhwb25lbnRpYWwvZmliYm9uYWNjaQorICAgc3RyaWRlIGluIGFuIGF0dGVtcHQgdG8gY292ZXIgd2lkZXIgc3dhdGggb2YgaGlzdG9yeSB3aXRoIGEgc21hbGxlcgorICAgbnVtYmVyIG9mIGl0ZXJhdGlvbnMsIHBvdGVudGlhbGx5IGFjY2VwdGluZyBhIGxhcmdlciBwYWNrZmlsZQorICAgdHJhbnNmZXIsIGluc3RlYWQgb2YgZ29pbmcgYmFjayBvbmUgY29tbWl0IGEgdGltZSBkdXJpbmcgY29tbW9uCisgICBhbmNlc3RvciBkaXNjb3ZlcnkgZHVyaW5nIHRoZSAiZ2l0IGZldGNoIiB0cmFuc2FjdGlvbi4KKyAgIChtZXJnZSA0MmNjNzQ4NWEyIGp0L2ZldGNoLW5lZ290aWF0b3Itc2tpcHBpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIG5ldyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNvcmUudXNlcmVwbGFjZXJlZnMgaGFzIGJlZW4gYWRkZWQsCisgICBwcmltYXJpbHkgdG8gaGVscCBzZXJ2ZXIgaW5zdGFsbGF0aW9ucyB0aGF0IHdhbnQgdG8gaWdub3JlIHRoZQorICAgcmVwbGFjZSBtZWNoYW5pc20gYWx0b2dldGhlci4KKworICogVGVhY2ggImdpdCB0YWcgLXMiIGV0Yy4gYSBmZXcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgKGdwZy5mb3JtYXQKKyAgIHRoYXQgY2FuIGJlIHNldCB0byAib3BlbnBncCIgb3IgIng1MDkiLCBhbmQgZ3BnLjxmb3JtYXQ+LnByb2dyYW0KKyAgIHRoYXQgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgcHJvZ3JhbSB0byB1c2UgdG8gZGVhbCB3aXRoIHRoZSBmb3JtYXQpCisgICB0byBhbGxvdyB4LjUwOSBjZXJ0cyB3aXRoIENNUyB2aWEgImdwZ3NtIiB0byBiZSB1c2VkIGluc3RlYWQgb2YKKyAgIG9wZW5wZ3AgdmlhICJnbnVwZyIuCisKKyAqIE1hbnkgbW9yZSBzdHJpbmdzIGFyZSBwcmVwYXJlZCBmb3IgbDEwbi4KKworICogImdpdCBwNCBzdWJtaXQiIGxlYXJucyB0byBhc2sgaXRzIG93biBwcmUtc3VibWl0IGhvb2sgaWYgaXQgc2hvdWxkCisgICBjb250aW51ZSB3aXRoIHN1Ym1pdHRpbmcuCisKKyAqIFRoZSB0ZXN0IHBlcmZvcm1lZCBhdCB0aGUgcmVjZWl2aW5nIGVuZCBvZiAiZ2l0IHB1c2giIHRvIHByZXZlbnQKKyAgIGJhZCBvYmplY3RzIGZyb20gZW50ZXJpbmcgcmVwb3NpdG9yeSBjYW4gYmUgY3VzdG9taXplZCB2aWEKKyAgIHJlY2VpdmUuZnNjay4qIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzOyB3ZSBub3cgaGF2ZSBnYWluZWQgYQorICAgY291bnRlcnBhcnQgdG8gZG8gdGhlIHNhbWUgb24gdGhlICJnaXQgZmV0Y2giIHNpZGUsIHdpdGgKKyAgIGZldGNoLmZzY2suKiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKworICogImdpdCBwdWxsIC0tcmViYXNlPWludGVyYWN0aXZlIiBsZWFybmVkICJpIiBhcyBhIHNob3J0LWhhbmQgZm9yCisgICAiaW50ZXJhY3RpdmUiLgorCisgKiAiZ2l0IGluc3Rhd2ViIiBoYXMgYmVlbiBhZGp1c3RlZCB0byBydW4gYmV0dGVyIHdpdGggbmV3ZXIgQXBhY2hlIG9uCisgICBSZWRIYXQgYmFzZWQgZGlzdHJvcy4KKworICogImdpdCByYW5nZS1kaWZmIiBpcyBhIHJlaW1wbGVtZW50YXRpb24gb2YgImdpdCB0YmRpZmYiIHRoYXQgbGV0cyB1cworICAgY29tcGFyZSBpbmRpdmlkdWFsIHBhdGNoZXMgaW4gdHdvIGl0ZXJhdGlvbnMgb2YgYSB0b3BpYy4KKworICogVGhlIHNpZGViYW5kIGNvZGUgbGVhcm5lZCB0byBvcHRpb25hbGx5IHBhaW50IHNlbGVjdGVkIGtleXdvcmRzIGF0CisgICB0aGUgYmVnaW5uaW5nIG9mIGluY29taW5nIGxpbmVzIG9uIHRoZSByZWNlaXZpbmcgZW5kLgorCisgKiAiZ2l0IGJyYW5jaCAtLWxpc3QiIGxlYXJuZWQgdG8gdGFrZSB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGZyb20gdGhlCisgICAnYnJhbmNoLnNvcnQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGp1c3QgbGlrZSAiZ2l0IHRhZyAtLWxpc3QiCisgICBwYXlzIGF0dGVudGlvbiB0byAndGFnLnNvcnQnLgorCisgKiAiZ2l0IHdvcmt0cmVlIiBjb21tYW5kIGxlYXJuZWQgIi0tcXVpZXQiIG9wdGlvbiB0byBtYWtlIGl0IGxlc3MKKyAgIHZlcmJvc2UuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogVGhlIGJ1bGsgb2YgImdpdCBzdWJtb2R1bGUgZm9yZWFjaCIgaGFzIGJlZW4gcmV3cml0dGVuIGluIEMuCisKKyAqIFRoZSBpbi1jb3JlICJjb21taXQiIG9iamVjdCBoYWQgYW4gYWxsLXB1cnBvc2UgInZvaWQgKnV0aWwiIGZpZWxkLAorICAgd2hpY2ggd2FzIHRyaWNreSB0byB1c2UgZXNwZWNpYWxseSBpbiBsaWJyYXJ5LWlzaCBwYXJ0IG9mIHRoZQorICAgY29kZS4gIEFsbCBvZiB0aGUgZXhpc3RpbmcgdXNlcyBvZiB0aGUgZmllbGQgaGFzIGJlZW4gbWlncmF0ZWQgdG8gYQorICAgbW9yZSBkZWRpY2F0ZWQgImNvbW1pdC1zbGFiIiBtZWNoYW5pc20gYW5kIHRoZSBmaWVsZCBpcyBlbGltaW5hdGVkLgorCisgKiBBIGxlc3Mgb2Z0ZW4gdXNlZCBjb21tYW5kICJnaXQgc2hvdy1pbmRleCIgaGFzIGJlZW4gbW9kZXJuaXplZC4KKyAgIChtZXJnZSBmYjMwMTBjMzFmIGprL3Nob3ctaW5kZXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29udmVyc2lvbiB0byBwYXNzICJ0aGVfcmVwb3NpdG9yeSIgYW5kIHRoZW4gImFfcmVwb3NpdG9yeSIKKyAgIHRocm91Z2hvdXQgdGhlIG9iamVjdCBhY2Nlc3MgQVBJIGNvbnRpbnVlcy4KKworICogQ29udGludWluZyB3aXRoIHRoZSBpZGVhIHRvIHByb2dyYW1tYXRpY2FsbHkgZW51bWVyYXRlIHZhcmlvdXMKKyAgIHBpZWNlcyBvZiBkYXRhIHJlcXVpcmVkIGZvciBjb21tYW5kIGxpbmUgY29tcGxldGlvbiwgdGVhY2ggdGhlCisgICBjb2RlYmFzZSB0byByZXBvcnQgdGhlIGxpc3Qgb2YgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAgIHN1YmNvbW1hbmRzIGNhcmUgYWJvdXQgdG8gaGVscCBjb21wbGV0ZSB0aGVtLgorCisgKiBTZXBhcmF0ZSAicmViYXNlIC1wIiBjb2RlcGF0aCBvdXQgb2YgInJlYmFzZSAtaSIgaW1wbGVtZW50YXRpb24gdG8KKyAgIHNsaW0gZG93biB0aGUgbGF0dGVyIGFuZCBtYWtlIGl0IGVhc2llciB0byBtYW5hZ2UuCisKKyAqIE1ha2UgcmVmc3BlYyBwYXJzaW5nIGNvZGVwYXRoIG1vcmUgcm9idXN0LgorCisgKiBTb21lIGZsYWt5IHRlc3RzIGhhdmUgYmVlbiBmaXhlZC4KKworICogQ29udGludWluZyB3aXRoIHRoZSBpZGVhIHRvIHByb2dyYW1tYXRpY2FsbHkgZW51bWVyYXRlIHZhcmlvdXMKKyAgIHBpZWNlcyBvZiBkYXRhIHJlcXVpcmVkIGZvciBjb21tYW5kIGxpbmUgY29tcGxldGlvbiwgdGhlIGNvZGViYXNlCisgICBoYXMgYmVlbiB0YXVnaHQgdG8gZW51bWVyYXRlIG9wdGlvbnMgcHJlZml4ZWQgd2l0aCAiLS1uby0iIHRvCisgICBuZWdhdGUgdGhlbS4KKworICogQnVpbGQgYW5kIHRlc3QgcHJvY2VkdXJlIGZvciBuZXRyYyBjcmVkZW50aWFsIGhlbHBlciAoaW4gY29udHJpYi8pCisgICBoYXMgYmVlbiB1cGRhdGVkLgorCisgKiBSZW1vdmUgdW51c2VkIGZ1bmN0aW9uIGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMgZnJvbSBld2FoCisgICBiaXRtYXAgc3Vic3lzdGVtLgorCisgKiBDb2RlIHByZXBhcmF0aW9uIHRvIG1ha2UgImdpdCBwNCIgY2xvc2VyIHRvIGJlIHVzYWJsZSB3aXRoIFB5dGhvbiAzLgorCisgKiBUaWdodGVuIHRoZSBBUEkgdG8gbWFrZSBpdCBoYXJkZXIgdG8gbWlzdXNlIGluLXRyZWUgLmdpdG1vZHVsZXMKKyAgIGZpbGUsIGV2ZW4gdGhvdWdoIGl0IHNoYXJlcyB0aGUgc2FtZSBzeW50YXggd2l0aCBjb25maWd1cmF0aW9uCisgICBmaWxlcywgdG8gcmVhZCByYW5kb20gY29uZmlndXJhdGlvbiBpdGVtcyBmcm9tIGl0LgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBoYXMgYmVlbiB1cGRhdGVkIHRvIGF2b2lkIGF0dGVtcHRpbmcgdG8gY3JlYXRlCisgICBkZWx0YSBhZ2FpbnN0IGEgemVyby1ieXRlLWxvbmcgc3RyaW5nLCB3aGljaCBpcyBwb2ludGxlc3MuCisKKyAqIFRoZSBjb2RlYmFzZSBoYXMgYmVlbiB1cGRhdGVkIHRvIGNvbXBpbGUgY2xlYW5seSB3aXRoIC1wZWRhbnRpYworICAgb3B0aW9uLgorICAgKG1lcmdlIDJiNjQ3YTA1ZDcgYmIvcGVkYW50aWMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY2hhcmFjdGVyIGRpc3BsYXkgd2lkdGggdGFibGUgaGFzIGJlZW4gdXBkYXRlZCB0byBtYXRjaCB0aGUKKyAgIGxhdGVzdCBVbmljb2RlIHN0YW5kYXJkLgorICAgKG1lcmdlIDU3MDk1MWVlYTIgYmIvdW5pY29kZS0xMS13aWR0aCBsYXRlciB0byBtYWludCkuCisKKyAqIHRlc3QtbGludCBub3cgbG9va3MgZm9yIGJyb2tlbiB1c2Ugb2YgIlZBUj1WQUwgc2hlbGxfZnVuYyIgaW4gdGVzdAorICAgc2NyaXB0cy4KKworICogQ29udmVyc2lvbiBmcm9tIHVjaGFyWzQwXSB0byBzdHJ1Y3Qgb2JqZWN0X2lkIGNvbnRpbnVlcy4KKworICogUmVjZW50ICJzZWN1cml0eSBmaXgiIHRvIHBheSBhdHRlbnRpb24gdG8gY29udGVudHMgb2YgIi5naXRtb2R1bGVzIgorICAgd2hpbGUgYWNjZXB0aW5nICJnaXQgcHVzaCIgd2FzIGEgYml0IG92ZXJseSBzdHJpY3QgdGhhbiBuZWNlc3NhcnksCisgICB3aGljaCBoYXMgYmVlbiBhZGp1c3RlZC4KKworICogImdpdCBmc2NrIiBsZWFybnMgdG8gbWFrZSBzdXJlIHRoZSBvcHRpb25hbCBjb21taXQtZ3JhcGggZmlsZSBpcyBpbgorICAgYSBzYW5lIHN0YXRlLgorCisgKiAiZ2l0IGRpZmYgLS1jb2xvci1tb3ZlZCIgZmVhdHVyZSBoYXMgZnVydGhlciBiZWVuIHR3ZWFrZWQuCisKKyAqIENvZGUgcmVzdHJ1Y3R1cmluZyBhbmQgYSBzbWFsbCBmaXggdG8gdHJhbnNwb3J0IHByb3RvY29sIHYyIGR1cmluZworICAgZmV0Y2hpbmcuCisKKyAqIFBhcnNpbmcgb2YgLUxbPE4+XVssWzxNPl1dIHBhcmFtZXRlcnMgImdpdCBibGFtZSIgYW5kICJnaXQgbG9nIgorICAgdGFrZSBoYXMgYmVlbiB0d2Vha2VkLgorCisgKiBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSgpIGFuZCBmcmllbmRzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIGZpbmQKKyAgIGluLWNvcmUgb2JqZWN0IGZvciBhIHNwZWNpZmljIGluLWNvcmUgcmVwb3NpdG9yeSBpbnN0YW5jZS4KKworICogVmFyaW91cyBnbGl0Y2hlcyBpbiB0aGUgaGV1cmlzdGljcyBvZiBtZXJnZS1yZWN1cnNpdmUgc3RyYXRlZ3kgaGF2ZQorICAgYmVlbiBkb2N1bWVudGVkIGluIG5ldyB0ZXN0cy4KKworICogImdpdCBmZXRjaCIgbGVhcm5lZCBhIG5ldyBvcHRpb24gIi0tbmVnb3RpYXRpb24tdGlwIiB0byBsaW1pdCB0aGUKKyAgIHNldCBvZiBjb21taXRzIGl0IHRlbGxzIHRoZSBvdGhlciBlbmQgYXMgImhhdmUiLCB0byByZWR1Y2Ugd2FzdGVkCisgICBiYW5kd2lkdGggYW5kIGN5Y2xlcywgd2hpY2ggd291bGQgYmUgaGVscGZ1bCB3aGVuIHRoZSByZWNlaXZpbmcKKyAgIHJlcG9zaXRvcnkgaGFzIGEgbG90IG9mIHJlZnMgdGhhdCBoYXZlIGxpdHRsZSB0byBkbyB3aXRoIHRoZQorICAgaGlzdG9yeSBhdCB0aGUgcmVtb3RlIGl0IGlzIGZldGNoaW5nIGZyb20uCisKKyAqIEZvciBhIGxhcmdlIHRyZWUsIHRoZSBpbmRleCBuZWVkcyB0byBob2xkIG1hbnkgY2FjaGUgZW50cmllcworICAgYWxsb2NhdGVkIG9uIGhlYXAuICBUaGVzZSBjYWNoZSBlbnRyaWVzIGFyZSBub3cgYWxsb2NhdGVkIG91dCBvZiBhCisgICBkZWRpY2F0ZWQgbWVtb3J5IHBvb2wgdG8gYW1vcnRpemUgbWFsbG9jKDMpIG92ZXJoZWFkLgorCisgKiBUZXN0cyB0byBjb3ZlciB2YXJpb3VzIGNvbmZsaWN0aW5nIGNhc2VzIGhhdmUgYmVlbiBhZGRlZCBmb3IKKyAgIG1lcmdlLXJlY3Vyc2l2ZS4KKworICogVGVzdHMgdG8gY292ZXIgY29uZmxpY3QgY2FzZXMgdGhhdCBpbnZvbHZlIHN1Ym1vZHVsZXMgaGF2ZSBiZWVuCisgICBhZGRlZCBmb3IgbWVyZ2UtcmVjdXJzaXZlLgorCisgKiBMb29rIGZvciBicm9rZW4gIiYmIiBjaGFpbnMgdGhhdCBhcmUgaGlkZGVuIGluIHN1YnNoZWxsLCBtYW55IG9mCisgICB3aGljaCBoYXZlIGJlZW4gZm91bmQgYW5kIGNvcnJlY3RlZC4KKworICogVGhlIHNpbmdsZXRvbiBjb21taXQtZ3JhcGggaW4tY29yZSBpbnN0YW5jZSBpcyBtYWRlIHBlciBpbi1jb3JlCisgICByZXBvc2l0b3J5IGluc3RhbmNlLgorCisgKiAibWFrZSBERVZFTE9QRVI9MSBERVZPUFRTPXBlZGFudGljIiBhbGxvd3MgZGV2ZWxvcGVycyB0byBjb21waWxlCisgICB3aXRoIC1wZWRhbnRpYyBvcHRpb24sIHdoaWNoIG1heSBjYXRjaCBtb3JlIHByb2JsZW1hdGljIHByb2dyYW0KKyAgIGNvbnN0cnVjdHMgYW5kIHBvdGVudGlhbCBidWdzLgorCisgKiBQcmVwYXJhdG9yeSBjb2RlIHRvIGxhdGVyIGFkZCBqc29uIG91dHB1dCBmb3IgdGVsZW1ldHJ5IGRhdGEgaGFzCisgICBiZWVuIGFkZGVkLgorCisgKiBVcGRhdGUgdGhlIHdheSB3ZSB1c2UgQ29jY2luZWxsZSB0byBmaW5kIG91dC1vZi1zdHlsZSBjb2RlIHRoYXQKKyAgIG5lZWQgdG8gYmUgbW9kZXJuaXNlZC4KKworICogSXQgaXMgdG9vIGVhc3kgdG8gbWlzdXNlIHN5c3RlbSBBUEkgZnVuY3Rpb25zIHN1Y2ggYXMgc3RyY2F0KCk7CisgICB0aGVzZSBzZWxlY3RlZCBmdW5jdGlvbnMgYXJlIG5vdyBmb3JiaWRkZW4gaW4gdGhpcyBjb2RlYmFzZSBhbmQKKyAgIHdpbGwgY2F1c2UgYSBjb21waWxhdGlvbiBmYWlsdXJlLgorCisgKiBBZGQgYSBzY3JpcHQgKGluIGNvbnRyaWIvKSB0byBoZWxwIHVzZXJzIG9mIFZTQ29kZSB3b3JrIGJldHRlciB3aXRoCisgICBvdXIgY29kZWJhc2UuCisKKyAqIFRoZSBUcmF2aXMgQ0kgc2NyaXB0cyB3ZXJlIHRhdWdodCB0byBzaGlwIGJhY2sgdGhlIHRlc3QgZGF0YSBmcm9tCisgICBmYWlsZWQgdGVzdHMuCisgICAobWVyZ2UgYWVhODg3OWE2YSBzZy90cmF2aXMtcmV0cmlldmUtdHJhc2gtdXBvbi1mYWlsdXJlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHBhcnNlLW9wdGlvbnMgbWFjaGluZXJ5IGxlYXJuZWQgdG8gcmVmcmFpbiBmcm9tIGVuY2xvc2luZworICAgcGxhY2Vob2xkZXIgc3RyaW5nIGluc2lkZSBhICI8YnJhIiBhbmQgImtldD4iIHBhaXIgYXV0b21hdGljYWxseQorICAgd2l0aG91dCBQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQLiAgRXhpc3RpbmcgaGVscCB0ZXh0IGZvciBvcHRpb24KKyAgIGFyZ3VtZW50cyB0aGF0IGFyZSBub3QgZm9ybWF0dGVkIGNvcnJlY3RseSBoYXZlIGJlZW4gaWRlbnRpZmllZCBhbmQKKyAgIGZpeGVkLgorICAgKG1lcmdlIDVmMGRmNDRjZDcgcnMvcGFyc2Utb3B0LWxpdGhlbHAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBOb2lzZXdvcmQgImV4dGVybiIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGZ1bmN0aW9uIGRlY2xzIGluIHRoZQorICAgaGVhZGVyIGZpbGVzLgorCisgKiBBIGZldyBhdG9tcyBsaWtlICUob2JqZWN0dHlwZSkgYW5kICUob2JqZWN0c2l6ZSkgaW4gdGhlIGZvcm1hdAorICAgc3BlY2lmaWVyIG9mICJmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9PGZvcm1hdD4iIGNhbiBiZSBmaWxsZWQgd2l0aG91dAorICAgZ2V0dGluZyB0aGUgZnVsbCBjb250ZW50cyBvZiB0aGUgb2JqZWN0LCBidXQganVzdCB3aXRoIHRoZSBvYmplY3QKKyAgIGhlYWRlci4gIFRoZXNlIGNhc2VzIGhhdmUgYmVlbiBvcHRpbWl6ZWQgYnkgY2FsbGluZworICAgb2lkX29iamVjdF9pbmZvKCkgQVBJIChpbnN0ZWFkIG9mIHJlYWRpbmcgYW5kIGluc3BlY3RpbmcgdGhlIGRhdGEpLgorCisgKiBUaGUgZW5kIHJlc3VsdCBvZiBkb2N1bWVudGF0aW9uIHVwZGF0ZSBoYXMgYmVlbiBtYWRlIHRvIGJlCisgICBpbnNwZWN0ZWQgbW9yZSBlYXNpbHkgdG8gaGVscCBkZXZlbG9wZXJzLgorCisgKiBUaGUgQVBJIHRvIGl0ZXJhdGUgb3ZlciBhbGwgb2JqZWN0cyBsZWFybmVkIHRvIG9wdGlvbmFsbHkgbGlzdAorICAgb2JqZWN0cyBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgaW4gcGFja2ZpbGVzLCB3aGljaCBoZWxwcyBsb2NhbGl0eQorICAgb2YgYWNjZXNzIGlmIHRoZSBjYWxsZXIgYWNjZXNzZXMgdGhlc2Ugb2JqZWN0cyB3aGlsZSBhcyBvYmplY3RzIGFyZQorICAgZW51bWVyYXRlZC4KKworICogSW1wcm92ZSBidWlsdC1pbiBmYWNpbGl0eSB0byBjYXRjaCBicm9rZW4gJiYtY2hhaW4gaW4gdGhlIHRlc3RzLgorCisgKiBUaGUgbW9yZSBsaWJyYXJ5LWlzaCBwYXJ0cyBvZiB0aGUgY29kZWJhc2UgbGVhcm5lZCB0byB3b3JrIG9uIHRoZQorICAgaW4tY29yZSBpbmRleC1zdGF0ZSBpbnN0YW5jZSB0aGF0IGlzIHBhc3NlZCBpbiBieSB0aGVpciBjYWxsZXJzLAorICAgaW5zdGVhZCBvZiBhbHdheXMgd29ya2luZyBvbiB0aGUgc2luZ2xldG9uICJ0aGVfaW5kZXgiIGluc3RhbmNlLgorCisgKiBBIHRlc3QgcHJlcmVxdWlzaXRlIGRlZmluZWQgYnkgdmFyaW91cyB0ZXN0IHNjcmlwdHMgd2l0aCBzbGlnaHRseQorICAgZGlmZmVyZW50IHNlbWFudGljcyBoYXMgYmVlbiBjb25zb2xpZGF0ZWQgaW50byBhIHNpbmdsZSBjb3B5IGFuZAorICAgbWFkZSBpbnRvIGEgbGF6aWx5IGRlZmluZWQgb25lLgorICAgKG1lcmdlIDZlYzYzMzA1OWEgd2MvbWFrZS1mdW5ueW5hbWVzLXNoYXJlZC1sYXp5LXByZXJlcSBsYXRlciB0byBtYWludCkuCisKKyAqIEFmdGVyIGEgcGFydGlhbCBjbG9uZSwgcmVwZWF0ZWQgZmV0Y2hlcyBmcm9tIHByb21pc29yIHJlbW90ZSB3b3VsZAorICAgaGF2ZSBhY2N1bXVsYXRlZCBtYW55IHBhY2tmaWxlcyBtYXJrZWQgd2l0aCAucHJvbWlzb3IgYml0IHdpdGhvdXQKKyAgIGdldHRpbmcgdGhlbSBjb2FsZXNjZWQgaW50byBmZXdlciBwYWNrZmlsZXMsIGh1cnRpbmcgcGVyZm9ybWFuY2UuCisgICAiZ2l0IHJlcGFjayIgbm93IGxlYXJuZWQgdG8gcmVwYWNrIHRoZW0uCisKKyAqIFBhcnRpYWxseSByZXZlcnQgdGhlIHN1cHBvcnQgZm9yIG11bHRpcGxlIGhhc2ggZnVuY3Rpb25zIHRvIHJlZ2FpbgorICAgaGFzaCBjb21wYXJpc29uIHBlcmZvcm1hbmNlOyB3ZSdkIHRoaW5rIG9mIGEgd2F5IHRvIGRvIHRoaXMgYmV0dGVyCisgICBpbiB0aGUgbmV4dCBjeWNsZS4KKworICogImdpdCBoZWxwIC0tY29uZmlnIiAod2hpY2ggaXMgdXNlZCBpbiBjb21tYW5kIGxpbmUgY29tcGxldGlvbikKKyAgIG1pc3NlZCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgbm90IGRlc2NyaWJlZCBpbiB0aGUgbWFpbgorICAgY29uZmlnLnR4dCBmaWxlIGJ1dCBhcmUgZGVzY3JpYmVkIGluIGFub3RoZXIgZmlsZSB0aGF0IGlzIGluY2x1ZGVkCisgICBieSBpdCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgdGVzdCBsaW50ZXIgY29kZSBoYXMgbGVhcm5lZCB0aGF0IHRoZSBlbmQgb2YgaGVyZS1kb2MgbWFyaworICAgIkVPRiIgY2FuIGJlIHF1b3RlZCBpbiBhIGRvdWJsZS1xdW90ZSBwYWlyLCBub3QganVzdCBpbiBhCisgICBzaW5nbGUtcXVvdGUgcGFpci4KKworCitGaXhlcyBzaW5jZSB2Mi4xOAorLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCByZW1vdGUgdXBkYXRlIiBjYW4gdGFrZSBib3RoIGEgc2luZ2xlIHJlbW90ZSBuaWNrbmFtZSBhbmQgYQorICAgbmlja25hbWUgZm9yIHJlbW90ZSBncm91cHMsIGFuZCB0aGUgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKQorICAgaGFzIGJlZW4gdGF1Z2h0IGFib3V0IGl0LgorICAgKG1lcmdlIDljZDQzODJhZDUgbHMvY29tcGxldGUtcmVtb3RlLXVwZGF0ZS1uYW1lcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmV0Y2ggLS1zaGFsbG93LXNpbmNlPTxjdXRvZmY+IiB0aGF0IHNwZWNpZmllcyB0aGUgY3V0LW9mZgorICAgcG9pbnQgdGhhdCBpcyBuZXdlciB0aGFuIHRoZSBleGlzdGluZyBoaXN0b3J5IHVzZWQgdG8gZW5kIHVwCisgICBncmFiYmluZyB0aGUgZW50aXJlIGhpc3RvcnkuICBTdWNoIGEgcmVxdWVzdCBub3cgZXJyb3JzIG91dC4KKyAgIChtZXJnZSBlMzRkZTczYzU2IG5kL3JlamVjdC1lbXB0eS1zaGFsbG93LXJlcXVlc3QgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGaXggZm9yIDIuMTctZXJhIHJlZ3Jlc3Npb24gYXJvdW5kIGBjb3JlLnNhZmVjcmxmYC4KKyAgIChtZXJnZSA2Y2IwOTEyNWJlIGFzL3NhZmVjcmxmLXF1aWV0LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSByZWNlbnQgYWRkaXRpb24gb2YgInBhcnRpYWwgY2xvbmUiIGV4cGVyaW1lbnRhbCBmZWF0dXJlIGtpY2tlZAorICAgaW4gd2hlbiBpdCBzaG91bGRuJ3QsIG5hbWVseSwgd2hlbiB0aGVyZSBpcyBubyBwYXJ0aWFsLWNsb25lIGZpbHRlcgorICAgZGVmaW5lZCBldmVuIGlmIGV4dGVuc2lvbnMucGFydGlhbGNsb25lIGlzIHNldC4KKyAgIChtZXJnZSBjYWMxMTM3ZGM0IGpoL3BhcnRpYWwtY2xvbmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHNlbmQtcGFjayAtLXNpZ25lZCIgKGhlbmNlICJnaXQgcHVzaCAtLXNpZ25lZCIgb3ZlciB0aGUgaHR0cAorICAgdHJhbnNwb3J0KSBkaWQgbm90IHJlYWQgdXNlciBpZGVudCBmcm9tIHRoZSBjb25maWcgbWVjaGFuaXNtIHRvCisgICBkZXRlcm1pbmUgd2hvbSB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIGFzLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorICAgKG1lcmdlIGQwNjdkOTg4ODcgbXMvc2VuZC1wYWNrLWhvbm9yLWNvbmZpZyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmV0Y2gtcGFjayAtLWFsbCIgdXNlZCB0byB1bm5lY2Vzc2FyaWx5IGZhaWwgdXBvbiBzZWVpbmcgYW4KKyAgIGFubm90YXRlZCB0YWcgdGhhdCBwb2ludHMgYXQgYW4gb2JqZWN0IG90aGVyIHRoYW4gYSBjb21taXQuCisgICAobWVyZ2UgYzEyYzlkZjUyNyBqay9mZXRjaC1hbGwtcGVlbGVkLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gdXNlciBlZGl0cyB0aGUgcGF0Y2ggaW4gImdpdCBhZGQgLXAiIGFuZCB0aGUgdXNlcidzIGVkaXRvciBpcworICAgc2V0IHRvIHN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2VzIGluZGlzY3JpbWluYXRlbHksIGFuIGVtcHR5IGxpbmUKKyAgIHRoYXQgaXMgdW5jaGFuZ2VkIGluIHRoZSBwYXRjaCB3b3VsZCBiZWNvbWUgY29tcGxldGVseSBlbXB0eQorICAgKGluc3RlYWQgb2YgYSBsaW5lIHdpdGggYSBzb2xlIFNQIG9uIGl0KS4gIFRoZSBjb2RlIGludHJvZHVjZWQgaW4KKyAgIEdpdCAyLjE3IHRpbWVmcmFtZSBmYWlsZWQgdG8gcGFyc2Ugc3VjaCBhIHBhdGNoLCBidXQgbm93IGl0IGxlYXJuZWQKKyAgIHRvIG5vdGljZSB0aGUgc2l0dWF0aW9uIGFuZCBjb3BlIHdpdGggaXQuCisgICAobWVyZ2UgZjRkMzVhNmI0OSBwdy9hZGQtcC1yZWNvdW50IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGUgdG8gdHJ5IHNlZWluZyBpZiBhIGZldGNoIGlzIG5lY2Vzc2FyeSBpbiBhIHN1Ym1vZHVsZQorICAgZHVyaW5nIGEgZmV0Y2ggd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcyBnb3QgY29uZnVzZWQgd2hlbiB0aGUgcGF0aAorICAgdG8gdGhlIHN1Ym1vZHVsZSB3YXMgY2hhbmdlZCBpbiB0aGUgcmFuZ2Ugb2YgY29tbWl0cyBpbiB0aGUKKyAgIHN1cGVycHJvamVjdCwgc29tZXRpbWVzIHNob3dpbmcgIihudWxsKSIuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogQnVnZml4IGZvciAicmViYXNlIC1pIiBjb3JuZXIgY2FzZSByZWdyZXNzaW9uLgorICAgKG1lcmdlIGE5Mjc5YzY3ODUgcHcvcmViYXNlLWkta2VlcC1yZXdvcmQtYWZ0ZXItY29uZmxpY3QgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWNlbnRseSBhZGRlZCAiLS1iYXNlIiBvcHRpb24gdG8gImdpdCBmb3JtYXQtcGF0Y2giIGNvbW1hbmQgZGlkCisgICBub3QgY29ycmVjdGx5IGdlbmVyYXRlIHByZXJlcSBwYXRjaCBpZHMuCisgICAobWVyZ2UgMTViNzZjMWZiMyB4eS9mb3JtYXQtcGF0Y2gtcHJlcmVxLXBhdGNoLWlkLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFBPU0lYIHBvcnRhYmlsaXR5IGZpeCBpbiBNYWtlZmlsZSB0byBmaXggYSBnbGl0Y2ggaW50cm9kdWNlZCBhIGZldworICAgcmVsZWFzZXMgYWdvLgorICAgKG1lcmdlIDY2MDAwNTRlOWIgZGovcnVudGltZS1wcmVmaXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZpbHRlci1icmFuY2giIHdoZW4gdXNlZCB3aXRoIHRoZSAiLS1zdGF0ZS1icmFuY2giIG9wdGlvbgorICAgc3RpbGwgYXR0ZW1wdGVkIHRvIHJld3JpdGUgdGhlIGNvbW1pdHMgd2hvc2UgZmlsdGVyZWQgcmVzdWx0IGlzCisgICBrbm93biBmcm9tIHRoZSBwcmV2aW91cyBhdHRlbXB0ICh3aGljaCBpcyByZWNvcmRlZCBvbiB0aGUgc3RhdGUKKyAgIGJyYW5jaCk7IHRoZSBjb21tYW5kIGhhcyBiZWVuIGNvcnJlY3RlZCBub3QgdG8gd2FzdGUgY3ljbGVzIGRvaW5nCisgICBzby4KKyAgIChtZXJnZSA3MDljZmU4NDhhIG1iL2ZpbHRlci1icmFuY2gtb3B0aW0gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDbGFyaWZ5IHRoYXQgc2V0dGluZyBjb3JlLmlnbm9yZUNhc2UgdG8gZGV2aWF0ZSBmcm9tIHJlYWxpdHkgd291bGQKKyAgIG5vdCB0dXJuIGEgY2FzZS1pbmNhcGFibGUgZmlsZXN5c3RlbSBpbnRvIGEgY2FzZS1jYXBhYmxlIG9uZS4KKyAgIChtZXJnZSA0ODI5NGI1MTJhIG1zL2NvcmUtaWNhc2UtZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogImZzY2suc2tpcExpc3QiIGRpZCBub3QgcHJldmVudCBhIGJsb2Igb2JqZWN0IGxpc3RlZCB0aGVyZSBmcm9tCisgICBiZWluZyBpbnNwZWN0ZWQgZm9yIGlzIGNvbnRlbnRzIChlLmcuIHdlIHJlY2VudGx5IHN0YXJ0ZWQgdG8KKyAgIGluc3BlY3QgdGhlIGNvbnRlbnRzIG9mICIuZ2l0bW9kdWxlcyIgZm9yIGNlcnRhaW4gbWFsaWNpb3VzCisgICBwYXR0ZXJucyksIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBmYjE2Mjg3NzE5IHJqL3N1Ym1vZHVsZS1mc2NrLXNraXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNoZWNrb3V0IC0tcmVjdXJzZS1zdWJtb2R1bGVzIGFub3RoZXItYnJhbmNoIiBkaWQgbm90IHJlcG9ydAorICAgaW4gd2hpY2ggc3VibW9kdWxlIGl0IGZhaWxlZCB0byB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZSwgd2hpY2gKKyAgIHJlc3VsdGVkIGluIGFuIHVuaGVscGZ1bCBlcnJvciBtZXNzYWdlLgorICAgKG1lcmdlIGJhOTVkNGU0YmQgc2Ivc3VibW9kdWxlLW1vdmUtaGVhZC1lcnJvci1tc2cgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSIgYmVoYXZlZCBzbGlnaHRseSBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gd2hpY2ggb25lIG9mCisgICB0aGUgdGhyZWUgYmFja2VuZHMgZ2V0cyB1c2VkOyB0aGlzIGhhcyBiZWVuIGRvY3VtZW50ZWQgYW5kIGFuCisgICBlZmZvcnQgdG8gbWFrZSB0aGVtIG1vcmUgdW5pZm9ybSBoYXMgYmVndW4uCisgICAobWVyZ2UgYjAwYmYxYzlhOCBlbi9yZWJhc2UtY29uc2lzdGVuY3kgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgIi0taWdub3JlLWNhc2UiIG9wdGlvbiBvZiAiZ2l0IGZvci1lYWNoLXJlZiIgKGFuZCBpdHMgZnJpZW5kcykKKyAgIGRpZCBub3Qgd29yayBjb3JyZWN0bHksIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGU2NzRlYjI1MjggamsvZm9yLWVhY2gtcmVmLWljYXNlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCIgZmFpbGVkIHRvIGNvcnJlY3RseSB2YWxpZGF0ZSB0aGUgc2V0IG9mIG9iamVjdHMgaXQKKyAgIHJlY2VpdmVkIHdoZW4gbWFraW5nIGEgc2hhbGxvdyBoaXN0b3J5IGRlZXBlciwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBjZjFlN2MwNzcwIGp0L2Nvbm5lY3Rpdml0eS1jaGVjay1hZnRlci11bnNoYWxsb3cgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBQYXJ0aWFsIGNsb25lIHN1cHBvcnQgb2YgImdpdCBjbG9uZSIgaGFzIGJlZW4gdXBkYXRlZCB0byBjb3JyZWN0bHkKKyAgIHZhbGlkYXRlIHRoZSBvYmplY3RzIGl0IHJlY2VpdmVzIGZyb20gdGhlIG90aGVyIHNpZGUuICBUaGUgc2VydmVyCisgICBzaWRlIGhhcyBiZWVuIGNvcnJlY3RlZCB0byBzZW5kIG9iamVjdHMgdGhhdCBhcmUgZGlyZWN0bHkKKyAgIHJlcXVlc3RlZCwgZXZlbiBpZiB0aGV5IG1heSBtYXRjaCB0aGUgZmlsdGVyaW5nIGNyaXRlcmlhIChlLmcuIHdoZW4KKyAgIGRvaW5nIGEgImxhenkgYmxvYiIgcGFydGlhbCBjbG9uZSkuCisgICAobWVyZ2UgYTdlNjdjMTFiOCBqdC9wYXJ0aWFsLWNsb25lLWZzY2stY29ubmVjdGl2aXR5IGxhdGVyIHRvIG1haW50KS4KKworICogSGFuZGxpbmcgb2YgYW4gZW1wdHkgcmFuZ2UgYnkgImdpdCBjaGVycnktcGljayIgd2FzIGluY29uc2lzdGVudAorICAgZGVwZW5kaW5nIG9uIGhvdyB0aGUgcmFuZ2UgZW5kZWQgdXAgdG8gYmUgZW1wdHksIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYzVlMzU4ZDA3MyBqay9lbXB0eS1waWNrLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmVzZXQgLS1tZXJnZSIgKGhlbmNlICJnaXQgbWVyZ2UgLS0tYWJvcnQiKSBhbmQgImdpdCByZXNldCAtLWhhcmQiCisgICBoYWQgdHJvdWJsZSB3b3JraW5nIGNvcnJlY3RseSBpbiBhIHNwYXJzZWx5IGNoZWNrZWQgb3V0IHdvcmtpbmcKKyAgIHRyZWUgYWZ0ZXIgYSBjb25mbGljdCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGIzM2ZkZmMzNGMgbWsvbWVyZ2UtaW4tc3BhcnNlLWNoZWNrb3V0IGxhdGVyIHRvIG1haW50KS4KKworICogQ29ycmVjdCBhIGJyb2tlbiB1c2Ugb2YgIlZBUj1WQUwgc2hlbGxfZnVuYyIgaW4gYSB0ZXN0LgorICAgKG1lcmdlIDY1MDE2MWEyNzcgamMvdDM0MDQtb25lLXNob3QtZXhwb3J0LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmV2LXBhcnNlICc6L3N1YnN0cmluZyciIGRpZCBub3QgY29uc2lkZXIgdGhlIGhpc3RvcnkgbGVhZGluZworICAgb25seSB0byBIRUFEIHdoZW4gbG9va2luZyBmb3IgYSBjb21taXQgd2l0aCB0aGUgZ2l2ZW4gc3Vic3RyaW5nLAorICAgd2hlbiB0aGUgSEVBRCBpcyBkZXRhY2hlZC4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgNmIzMzUxZTc5OSB3Yy9maW5kLWNvbW1pdC13aXRoLXBhdHRlcm4tb24tZGV0YWNoZWQtaGVhZCBsYXRlciB0byBtYWludCkuCisKKyAqIEJ1aWxkIGRvYyB1cGRhdGUgZm9yIFdpbmRvd3MuCisgICAobWVyZ2UgZWRlOGQ4OWJiMSBuZC9jb21tYW5kLWxpc3QgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBjb3JlLmNvbW1lbnRjaGFyIGlzIG5vdyBob25vcmVkIHdoZW4gcHJlcGFyaW5nIHRoZSBsaXN0IG9mIGNvbW1pdHMKKyAgIHRvIHJlcGxheSBpbiAicmViYXNlIC1pIi4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiBvbiBhIGNvcnJ1cHQgSEVBRCBjYXVzZWQgYSBzZWdmYXVsdC4gIEluCisgICBnZW5lcmFsIHdlIHN1YnN0aXR1dGUgYW4gZW1wdHkgdHJlZSBvYmplY3Qgd2hlbiBydW5uaW5nIHRoZSBpbi1jb3JlCisgICBlcXVpdmFsZW50IG9mIHRoZSBkaWZmLWluZGV4IGNvbW1hbmQsIGFuZCB0aGUgY29kZXBhdGggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZCB0byBkbyBzbyBhcyB3ZWxsIHRvIGZpeCB0aGlzIGlzc3VlLgorICAgKG1lcmdlIDM1MDZkYzk0NDUgamsvaGFzLXVuY29tbWl0dGVkLWNoYW5nZXMtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogaHR0cGQgdGVzdHMgc2F3IG9jY2FzaW9uYWwgYnJlYWthZ2UgZHVlIHRvIHRoZSB3YXkgaXRzIGFjY2VzcyBsb2cKKyAgIGdldHMgaW5zcGVjdGVkIGJ5IHRoZSB0ZXN0cywgd2hpY2ggaGFzIGJlZW4gdXBkYXRlZCB0byBtYWtlIHRoZW0KKyAgIGxlc3MgZmxha3kuCisgICAobWVyZ2UgZThiM2IyZTI3NSBzZy9odHRwZC10ZXN0LXVuZmxha2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUZXN0cyB0byBjb3ZlciBtb3JlIEQvRiBjb25mbGljdCBjYXNlcyBoYXZlIGJlZW4gYWRkZWQgZm9yCisgICBtZXJnZS1yZWN1cnNpdmUuCisKKyAqICJnaXQgZ2MgLS1hdXRvIiBvcGVucyBmaWxlIGRlc2NyaXB0b3JzIGZvciB0aGUgcGFja2ZpbGVzIGJlZm9yZQorICAgc3Bhd25pbmcgImdpdCByZXBhY2svcHJ1bmUiLCB3aGljaCB3b3VsZCB1cHNldCBXaW5kb3dzIHRoYXQgZG9lcworICAgbm90IHdhbnQgYSBwcm9jZXNzIHRvIHdvcmsgb24gYSBmaWxlIHRoYXQgaXMgb3BlbiBieSBhbm90aGVyCisgICBwcm9jZXNzLiAgVGhlIGlzc3VlIGhhcyBiZWVuIHdvcmtlZCBhcm91bmQuCisgICAobWVyZ2UgMTJlNzNhM2NlNCBrZy9nYy1hdXRvLXdpbmRvd3Mtd29ya2Fyb3VuZCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSByZWN1cnNpdmUgbWVyZ2Ugc3RyYXRlZ3kgZGlkIG5vdCBwcm9wZXJseSBlbnN1cmUgdGhlcmUgd2FzIG5vCisgICBjaGFuZ2UgYmV0d2VlbiBIRUFEIGFuZCB0aGUgaW5kZXggYmVmb3JlIHBlcmZvcm1pbmcgaXRzIG9wZXJhdGlvbiwKKyAgIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA1NWYzOWNmNzU1IGVuL2RpcnR5LW1lcmdlLWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UiIHN0YXJ0ZWQgZXhwb3J0aW5nIEdJVF9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kCisgICBleHBvc2luZyBpdCB0byBob29rIHNjcmlwdHMgd2hlbiBwYXJ0IG9mIGl0IGdvdCByZXdyaXR0ZW4gaW4gQy4KKyAgIEluc3RlYWQgb2YgbWF0Y2hpbmcgdGhlIG9sZCBzY3JpcHRlZCBQb3JjZWxhaW5zJyBiZWhhdmlvdXIsCisgICBjb21wZW5zYXRlIGJ5IGFsc28gZXhwb3J0aW5nIEdJVF9XT1JLX1RSRUUgZW52aXJvbm1lbnQgYXMgd2VsbCB0bworICAgbGVzc2VuIHRoZSBkYW1hZ2UuICBUaGlzIGNhbiBoYXJtIGV4aXN0aW5nIGhvb2tzIHRoYXQgd2FudCB0bworICAgb3BlcmF0ZSBvbiBkaWZmZXJlbnQgcmVwb3NpdG9yeSwgYnV0IHRoZSBjdXJyZW50IGJlaGF2aW91ciBpcworICAgYWxyZWFkeSBicm9rZW4gZm9yIHRoZW0gYW55d2F5LgorICAgKG1lcmdlIGFiNWU2N2Q3NTEgYmMvc2VxdWVuY2VyLWV4cG9ydC13b3JrLXRyZWUtYXMtd2VsbCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgd2hlbiB1c2luZyBpbiBhIGJhdGNoZWQgbW9kZSB0aGF0IGxpbWl0cyB0aGUKKyAgIG51bWJlciBvZiBtZXNzYWdlcyBzZW50IGluIGEgc2luZ2xlIFNNVFAgc2Vzc2lvbiBsb3N0IHRoZSBjb250ZW50cworICAgb2YgdGhlIHZhcmlhYmxlIHVzZWQgdG8gY2hvb3NlIGJldHdlZW4gdGxzL3NzbCwgdW5hYmxlIHRvIHNlbmQgdGhlCisgICBzZWNvbmQgYW5kIGxhdGVyIGJhdGNoZXMsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIDYzNmYzZDdhYzUgam0vc2VuZC1lbWFpbC10bHMtYXV0aC1vbi1iYXRjaCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBsYXp5IGNsb25lIHN1cHBvcnQgaGFkIGEgZmV3IHBsYWNlcyB3aGVyZSBtaXNzaW5nIGJ1dCBwcm9taXNlZAorICAgb2JqZWN0cyB3ZXJlIG5vdCBjb3JyZWN0bHkgdG9sZXJhdGVkLCB3aGljaCBoYXZlIGJlZW4gZml4ZWQuCisKKyAqIE9uZSBvZiB0aGUgImRpZmYgLS1jb2xvci1tb3ZlZCIgbW9kZSAiZGltbWVkX3plYnJhIiB0aGF0IHdhcyBuYW1lZAorICAgaW4gYW4gdW51c3VhbCB3YXkgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgcmVwbGFjZWQgYnkKKyAgICJkaW1tZWQtemVicmEiLgorICAgKG1lcmdlIGUzZjJmNWY5Y2QgZXMvZGlmZi1jb2xvci1tb3ZlZC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgd2lyZS1wcm90b2NvbCB2MiByZWxpZXMgb24gdGhlIGNsaWVudCB0byBzZW5kICJyZWYgcHJlZml4ZXMiIHRvCisgICBsaW1pdCB0aGUgYmFuZHdpZHRoIHNwZW50IG9uIHRoZSBpbml0aWFsIHJlZiBhZHZlcnRpc2VtZW50LiAgImdpdAorICAgY2xvbmUiIHdoZW4gbGVhcm5lZCB0byBzcGVhayB2MiBmb3Jnb3QgdG8gZG8gc28sIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNDAyYzQ3ZDkzOSBidy9jbG9uZS1yZWYtcHJlZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYgLS1oaXN0b2dyYW0iIGhhZCBhIGJhZCBtZW1vcnkgdXNhZ2UgcGF0dGVybiwgd2hpY2ggaGFzCisgICBiZWVuIHJlYXJyYW5nZWQgdG8gcmVkdWNlIHRoZSBwZWFrIHVzYWdlLgorICAgKG1lcmdlIDc5Y2IyZWJiOTIgc2IvaGlzdG9ncmFtLWxlc3MtbWVtb3J5IGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZSBjbGVhbi11cCB0byB1c2Ugc2l6ZV90L3NzaXplX3Qgd2hlbiB0aGV5IGFyZSB0aGUgcmlnaHQgdHlwZS4KKyAgIChtZXJnZSA3NzI2ZDM2MGI1IGprL3NpemUtdCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSB3aXJlLXByb3RvY29sIHYyIHJlbGllcyBvbiB0aGUgY2xpZW50IHRvIHNlbmQgInJlZiBwcmVmaXhlcyIgdG8KKyAgIGxpbWl0IHRoZSBiYW5kd2lkdGggc3BlbnQgb24gdGhlIGluaXRpYWwgcmVmIGFkdmVydGlzZW1lbnQuICAiZ2l0CisgICBmZXRjaCAkcmVtb3RlIGJyYW5jaDpicmFuY2giIHRoYXQgYXNrcyB0YWdzIHRoYXQgcG9pbnQgaW50byB0aGUKKyAgIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgImJyYW5jaCIgYXV0b21hdGljYWxseSBmb2xsb3dlZCBzZW50IHRvCisgICBuYXJyb3cgcHJlZml4IGFuZCBicm9rZSB0aGUgdGFnIGZvbGxvd2luZywgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgMmI1NTQzNTNhNSBqdC90YWctZm9sbG93aW5nLXdpdGgtcHJvdG8tdjItZml4IGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiB0aGUgc3BhcnNlIGNoZWNrb3V0IGZlYXR1cmUgaXMgaW4gdXNlLCAiZ2l0IGNoZXJyeS1waWNrIiBhbmQKKyAgIG90aGVyIG1lcmd5IG9wZXJhdGlvbnMgbG9zdCB0aGUgc2tpcF93b3JrdHJlZSBiaXQgd2hlbiBhIHBhdGggdGhhdAorICAgaXMgZXhjbHVkZWQgZnJvbSBjaGVja291dCByZXF1aXJlcyBjb250ZW50IGxldmVsIG1lcmdlLCB3aGljaCBpcworICAgcmVzb2x2ZWQgYXMgdGhlIHNhbWUgYXMgdGhlIEhFQUQgdmVyc2lvbiwgd2l0aG91dCBtYXRlcmlhbGl6aW5nIHRoZQorICAgbWVyZ2UgcmVzdWx0IGluIHRoZSB3b3JraW5nIHRyZWUsIHdoaWNoIG1hZGUgdGhlIHBhdGggYXBwZWFyIGFzCisgICBkZWxldGVkLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQgYnkgcHJlc2VydmluZyB0aGUgc2tpcF93b3JrdHJlZQorICAgYml0IChhbmQgbm90IG1hdGVyaWFsaXppbmcgdGhlIGZpbGUgaW4gdGhlIHdvcmtpbmcgdHJlZSkuCisgICAobWVyZ2UgMmI3NWZiNjAxYyBlbi9tZXJnZS1yZWN1cnNpdmUtc2tpcC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgImF1dGhvci1zY3JpcHQiIGZpbGUgImdpdCByZWJhc2UgLWkiIGNyZWF0ZXMgZ290IGJyb2tlbiB3aGVuCisgICB3ZSBzdGFydGVkIHRvIG1vdmUgdGhlIGNvbW1hbmQgYXdheSBmcm9tIHNoZWxsIHNjcmlwdCwgd2hpY2ggaXMKKyAgIGdldHRpbmcgZml4ZWQgbm93LgorICAgKG1lcmdlIDU1MjJiYmFjMjAgZXMvcmViYXNlLWktYXV0aG9yLXNjcmlwdC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgYXV0b21hdGljIHRyZWUtbWF0Y2hpbmcgaW4gImdpdCBtZXJnZSAtcyBzdWJ0cmVlIiB3YXMgYnJva2VuIDUKKyAgIHllYXJzIGFnbyBhbmQgbm9ib2R5IGhhcyBub3RpY2VkIHNpbmNlIHRoZW4sIHdoaWNoIGlzIG5vdyBmaXhlZC4KKyAgIChtZXJnZSAyZWM0MTUwNzEzIGprL21lcmdlLXN1YnRyZWUtaGV1cmlzdGljcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmV0Y2ggJHRoZXJlIHJlZnMvaGVhZHMvcyIgb3VnaHQgdG8gZmV0Y2ggdGhlIHRpcCBvZiB0aGUKKyAgIGJyYW5jaCAncycsIGJ1dCB3aGVuICJyZWZzL2hlYWRzL3JlZnMvaGVhZHMvcyIsIGkuZS4gYSBicmFuY2ggd2hvc2UKKyAgIG5hbWUgaXMgInJlZnMvaGVhZHMvcyIgZXhpc3RzIGF0IHRoZSBzYW1lIHRpbWUsIGZldGNoZWQgdGhhdCBvbmUKKyAgIGluc3RlYWQgYnkgbWlzdGFrZS4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkIHRvIGhvbm9yIHRoZSB1c3VhbAorICAgZGlzYW1iaWd1YXRpb24gcnVsZXMgZm9yIGFiYnJldmlhdGVkIHJlZm5hbWVzLgorICAgKG1lcmdlIDYwNjUwYTQ4YzAganQvcmVmc3BlYy1kd2ltLXByZWNlZGVuY2UtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogRnV0dXJlcHJvb2ZpbmcgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBjYW4gZWFzaWx5IGJlIG1pc3VzZWQuCisgICAobWVyZ2UgNjViYjIxZTc3ZSBlcy93YW50LWNvbG9yLWZkLWRlZmVuc2l2ZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBodHRwLWJhY2tlbmQgKHVzZWQgZm9yIHNtYXJ0LWh0dHAgdHJhbnNwb3J0KSB1c2VkIHRvIHNsdXJwIHRoZQorICAgd2hvbGUgaW5wdXQgdW50aWwgRU9GLCB3aXRob3V0IHBheWluZyBhdHRlbnRpb24gdG8gQ09OVEVOVF9MRU5HVEgKKyAgIHRoYXQgaXMgc3VwcGxpZWQgaW4gdGhlIGVudmlyb25tZW50IGFuZCBpbnN0ZWFkIGV4cGVjdGluZyB0aGUgV2ViCisgICBzZXJ2ZXIgdG8gY2xvc2UgdGhlIGlucHV0IHN0cmVhbS4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgZWViZmU0MDk2MiBtay9odHRwLWJhY2tlbmQtY29udGVudC1sZW5ndGggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IG1lcmdlIC0tYWJvcnQiIGV0Yy4gZGlkIG5vdCBjbGVhbiB0aGluZ3MgdXAgcHJvcGVybHkgd2hlbgorICAgdGhlcmUgd2VyZSBjb25mbGljdGVkIGVudHJpZXMgaW4gdGhlIGluZGV4IGluIGNlcnRhaW4gb3JkZXIgdGhhdAorICAgYXJlIGludm9sdmVkIGluIEQvRiBjb25mbGljdHMuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBhZDM3NjIwNDJhIGVuL2Fib3J0LWRmLWNvbmZsaWN0LWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIC0taW5kZW50LWhldXJpc3RpYyIgaGFkIGEgYmFkIGNvcm5lciBjYXNlIHBlcmZvcm1hbmNlLgorICAgKG1lcmdlIDMwMWVmODU0MDEgc2IvaW5kZW50LWhldXJpc3RpYy1vcHRpbSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSAiLS1leGVjIiBvcHRpb24gdG8gImdpdCByZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIiBwbGFjZWQgdGhlIGV4ZWMKKyAgIGNvbW1hbmRzIGF0IHdyb25nIHBsYWNlcywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHZlcmlmeS10YWciIGFuZCAiZ2l0IHZlcmlmeS1jb21taXQiIGhhdmUgYmVlbiB0YXVnaHQgdG8gdXNlCisgICB0aGUgZXhpdCBzdGF0dXMgb2YgdW5kZXJseWluZyAiZ3BnIC0tdmVyaWZ5IiB0byBzaWduYWwgYmFkIG9yCisgICB1bnRydXN0ZWQgc2lnbmF0dXJlIHRoZXkgZm91bmQuCisgICAobWVyZ2UgNGU1ZGM5Y2ExNyBqYy9ncGctc3RhdHVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtZXJnZXRvb2wiIHN0b3BwZWQgYW5kIGdhdmUgYW4gZXh0cmEgcHJvbXB0IHRvIGNvbnRpbnVlIGFmdGVyCisgICB0aGUgbGFzdCBwYXRoIGhhcyBiZWVuIGhhbmRsZWQsIHdoaWNoIGRpZCBub3QgbWFrZSBtdWNoIHNlbnNlLgorICAgKG1lcmdlIGQ2NTFhNTRiOGEgbmcvbWVyZ2V0b29sLWxvc2UtZmluYWwtcHJvbXB0IGxhdGVyIHRvIG1haW50KS4KKworICogQW1vbmcgdGhlIHRocmVlIGNvZGVwYXRocyB3ZSB1c2UgT19BUFBFTkQgdG8gb3BlbiBhIGZpbGUgZm9yCisgICBhcHBlbmRpbmcsIG9uZSB1c2VkIGZvciB3cml0aW5nIEdJVF9UUkFDRSBvdXRwdXQgcmVxdWlyZXMgT19BUFBFTkQKKyAgIGltcGxlbWVudGF0aW9uIHRoYXQgYmVoYXZlcyBzZW5zaWJseSB3aGVuIG11bHRpcGxlIHByb2Nlc3NlcyBhcmUKKyAgIHdyaXRpbmcgdG8gdGhlIHNhbWUgZmlsZS4gIFBPU0lYIGVtdWxhdGlvbiB1c2VkIGluIHRoZSBXaW5kb3dzIHBvcnQKKyAgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gaW1wcm92ZSBpbiB0aGlzIGFyZWEuCisgICAobWVyZ2UgZDY0MTA5NzU4OSBqcy9taW5ndy1vLWFwcGVuZCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSAtdiIgaW4gYSByZXBvc2l0b3J5IHdpdGggYSBzdWJtb2R1bGUgYmFyZmVkIGFzCisgICBhbiBpbnRlcm1lZGlhdGUgcHJvY2VzcyBkaWQgbm90IHVuZGVyc3RhbmQgd2hhdCAiLXYoZXJib3NlKSIgZmxhZworICAgbWVhbnQsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGU4NGMzY2YzZGMgc2IvcHVsbC1yZWJhc2Utc3VibW9kdWxlIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50IHVwZGF0ZSB0byAiZ2l0IGNvbmZpZyIgYnJva2UgdXBkYXRpbmcgdmFyaWFibGUgaW4gYQorICAgc3Vic2VjdGlvbiwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGJmZjdkZjdhODcgc2IvY29uZmlnLXdyaXRlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gImdpdCByZWJhc2UgLWkiIGlzIHRvbGQgdG8gc3F1YXNoIHR3byBvciBtb3JlIGNvbW1pdHMgaW50bworICAgb25lLCBpdCBsYWJlbGVkIHRoZSBsb2cgbWVzc2FnZSBmb3IgZWFjaCBjb21taXQgd2l0aCBpdHMgbnVtYmVyLgorICAgSXQgY29ycmVjdGx5IGNhbGxlZCB0aGUgZmlyc3Qgb25lICIxc3QgY29tbWl0IiwgYnV0IHRoZSBuZXh0IG9uZQorICAgd2FzICJjb21taXQgIzEiLCB3aGljaCB3YXMgb2ZmLWJ5LW9uZS4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGRkMmUzNmViYWMgcHcvcmViYXNlLWktc3F1YXNoLW51bWJlci1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIsIHdoZW4gYSAnbWVyZ2UgPGJyYW5jaD4nIGluc24gaW4gaXRzIHRvZG8gbGlzdAorICAgZmFpbHMsIHNlZ2ZhdWx0ZWQsIHdoaWNoIGhhcyBiZWVuIChtaW5pbWFsbHkpIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBiYzkyMzhiYjA5IHB3L3JlYmFzZS1pLW1lcmdlLXNlZ3YtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjaGVycnktcGljayAtLXF1aXQiIGZhaWxlZCB0byByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCBldmVuCisgICB0aG91Z2ggd2Ugd29uJ3QgYmUgaW4gYSBjaGVycnktcGljayBzZXNzaW9uIGFmdGVyIGl0IHJldHVybnMsIHdoaWNoCisgICBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgM2U3ZGQ5OTIwOCBuZC9jaGVycnktcGljay1xdWl0LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIEluIGEgcmVjZW50IHVwZGF0ZSBpbiAyLjE4IGVyYSwgImdpdCBwYWNrLW9iamVjdHMiIHN0YXJ0ZWQKKyAgIHByb2R1Y2luZyBhIGxhcmdlciB0aGFuIG5lY2Vzc2FyeSBwYWNrZmlsZXMgYnkgbWlzc2luZworICAgb3Bwb3J0dW5pdGllcyB0byB1c2UgbGFyZ2UgZGVsdGFzLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBtZWFuaW5nIG9mIHRoZSBwb3NzaWJsZSB2YWx1ZXMgdGhlICJjb3JlLmNoZWNrU3RhdCIKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIHRha2Ugd2VyZSBub3QgYWRlcXVhdGVseSBkb2N1bWVudGVkLAorICAgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgOWJmNWQ0YzRlMiBuZC9jb25maWctY29yZS1jaGVja3N0YXQtZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50ICJnaXQgcmViYXNlIC1pIiB1cGRhdGUgc3RhcnRlZCB0byB3cml0ZSBib2d1c2x5IGZvcm1hdHRlZAorICAgYXV0aG9yLXNjcmlwdCwgd2l0aCBhIG1hdGNoaW5nIGJyb2tlbiByZWFkaW5nIGNvZGUuICBUaGVzZSBhcmUKKyAgIGZpeGVkLgorCisgKiBSZWNlbnQgYWRkaXRpb24gb2YgImRpcmVjdG9yeSByZW5hbWUiIGhldXJpc3RpY3MgdG8gdGhlCisgICBtZXJnZS1yZWN1cnNpdmUgYmFja2VuZCBtYWtlcyB0aGUgY29tbWFuZCBzdXNjZXB0aWJsZSB0byBmYWxzZQorICAgcG9zaXRpdmVzIGFuZCBmYWxzZSBuZWdhdGl2ZXMuICBJbiB0aGUgY29udGV4dCBvZiAiZ2l0IGFtIC0zIiwKKyAgIHdoaWNoIGRvZXMgbm90IGtub3cgYWJvdXQgc3Vycm91bmRpbmcgdW5tb2RpZmllZCBwYXRocyBhbmQgdGh1cworICAgY2Fubm90IGluZm9ybSB0aGUgbWVyZ2UgbWFjaGluZXJ5IGFib3V0IHRoZSBmdWxsIHRyZWVzIGludm9sdmVkLAorICAgdGhpcyByaXNrIGlzIHBhcnRpY3VsYXJseSBzZXZlcmUuICBBcyBzdWNoLCB0aGUgaGV1cmlzdGljIGlzCisgICBkaXNhYmxlZCBmb3IgImdpdCBhbSAtMyIgdG8ga2VlcCB0aGUgbWFjaGluZXJ5ICJtb3JlIHN0dXBpZCBidXQKKyAgIHByZWRpY3RhYmxlIi4KKworICogImdpdCBtZXJnZS1iYXNlIiBpbiAyLjE5LXJjMSBoYXMgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aGVuIHRoZQorICAgKGV4cGVyaW1lbnRhbCkgY29tbWl0LWdyYXBoIGZlYXR1cmUgaXMgaW4gdXNlLCB3aGljaCBoYXMgYmVlbgorICAgbWl0aWdhdGVkLgorCisgKiBDb2RlIGNsZWFudXAsIGRvY2ZpeCwgYnVpbGQgZml4LCBldGMuCisgICAobWVyZ2UgYWVlOWJlMmViZSBzZy91cGRhdGUtcmVmLXN0ZGluLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDAzNzcxNDI1MmYgamMvY2xlYW4tYWZ0ZXItc2FuaXR5LXRlc3RzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1YjI2YzNjOTQxIGVuL21lcmdlLXJlY3Vyc2l2ZS1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwZGNiYzAzOTJlIGJ3L2NvbmZpZy1yZWZlci10by1naXRzdWJtb2R1bGVzLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYmI0ZDAwMGU4NyBidy9wcm90b2NvbC12MiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOTI4ZjBhYjRiYSB2cy90eXBvZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQ3ZjU5MGJlODQgZW4vcmViYXNlLWktbWljcm9maXhlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODFkMzk1Y2M4NSBqcy9yZWJhc2UtcmVjcmVhdGUtbWVyZ2UgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDUxZDE4NjMxNjggdHovZXhjbHVkZS1kb2Mtc21hbGxmaXhlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYTlhYTNjMDkyNyBkcy9jb21taXQtZ3JhcGggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDVjZjhlMDY0NzQganMvZW5oYW5jZWQtdmVyc2lvbi1pbmZvIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2YWFkZWQ1NTA5IHRiL2NvbmZpZy1kZWZhdWx0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwMjJkMmFjMWYzIHNiL2JsYW1lLWNvbG9yIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1YTA2YTIwZTBjIGJwL3Rlc3QtZHJvcC1jYWNoZXMtZm9yLXdpbmRvd3MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGRkNjFjYzFjMmUgamsvdWktY29sb3ItYWx3YXlzLXRvLWF1dG8gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDFlODNiOWJmZGQgc2IvdHJhaWxlcnMtZG9jZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhYjI5ZjFiMzI5IHNnL2Zhc3QtaW1wb3J0LWR1bXAtcmVmcy1vbi1jaGVja3BvaW50LWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNmE4YWQ4ODBmMCBqbi9zdWJ0cmVlLXRlc3QtZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZmYmQ1MWNjNjAgbmQvcGFjay1vYmplY3RzLXRocmVhZGluZy1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGU5ZGFjN2JlNjAgZXMvbXctdG8tZ2l0LWNoYWluLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZmU1ODNjNmM3YSBycy9yZW1vdGUtbXYtbGVha2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjk4ODVhYjAxNSBlbi90MzAzMS10aXRsZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDg1NzgwMzdiZWQgbmQvY29uZmlnLWJsYW1lLXNvcnQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDhhZDE2OWM0YmEgaG4vY29uZmlnLWluLWNvZGUtY29tbWVudCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYjc0NDZmY2ZkZiBhci90NDE1MC1hbS1zY2lzc29ycy10ZXN0LWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYTgxMzI0MTBlZSBqcy90eXBvZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDM4OGQwZmY2ZTUgZW4vdXBkYXRlLWluZGV4LWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTA1YWE2ODhkZCBqYy91cGRhdGUtaW5kZXgtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxMGM2MDAxNzJjIHNnL3Q1MzEwLWVtcHR5LWlucHV0LWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTY0MWViOTQ2NSBqaC9wYXJ0aWFsLWNsb25lLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjcxMWIxYWQ1ZSBhYi9zdWJtb2R1bGUtcmVsYXRpdmUtdXJsLXRlc3RzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjZTUyOGRlMDIzIGFiL3VuY29uZGl0aW9uYWwtZnJlZS1hbmQtbnVsbCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYmJjMDcyZjVkOCBycy9vcHQtdXBkYXRlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjlkODQ2ZjA1MyBqay91c2UtY29tcGF0LXV0aWwtaW4tdGVzdC10b29sIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxODIwNzAzMDQ1IGpzL2xhcmdlci10aW1lc3RhbXBzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjOGIzNWI5NWUxIHNnL3Q0MDUxLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzA2MTJjYjY3MCBzZy90MDAyMC1jb252ZXJzaW9uLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTVkYTc1MzcwOSBzZy90NzUwMS10aGlua29maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDc5YjA0ZjliNjAgc2cvdDM5MDMtbWlzc2luZy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDI3NDU4MTcwMjggc2cvdDM0MjAtYXV0b3N0YXNoLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgN2FmYjBkNjc3NyBzZy90ZXN0LXJlYmFzZS1lZGl0b3ItZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2YzZjZTIxYmFhIGVzL2ZyZWVic2QtaWNvbnYtcG9ydGFiaWxpdHkgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNzY3MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTkuMS50eHQKQEAgLTAsMCArMSw2IEBACitHaXQgdjIuMTkuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdXAgdGhlIGZpeGVzIHRoYXQgYXBwZWFyIGluIHYyLjE0LjUgYW5kIGluCit2Mi4xNy4yIHRvIGFkZHJlc3MgdGhlIHJlY2VudGx5IHJlcG9ydGVkIENWRS0yMDE4LTE3NDU2OyBzZWUgdGhlCityZWxlYXNlIG5vdGVzIGZvciB0aG9zZSB2ZXJzaW9ucyBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTllNmNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjIudHh0CkBAIC0wLDAgKzEsMTA4IEBACitHaXQgdjIuMTkuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjE5LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBpbnRlcnByZXQtdHJhaWxlcnMiIGFuZCBpdHMgdW5kZXJseWluZyBtYWNoaW5lcnkgaGFkIGEgYnVnZ3kKKyAgIGNvZGUgdGhhdCBhdHRlbXB0ZWQgdG8gaWdub3JlIHBhdGNoIHRleHQgYWZ0ZXIgY29tbWl0IGxvZyBtZXNzYWdlLAorICAgd2hpY2ggdHJpZ2dlcmVkIGluIHZhcmlvdXMgY29kZXBhdGhzIHRoYXQgd2lsbCBhbHdheXMgZ2V0IHRoZSBsb2cKKyAgIG1lc3NhZ2UgYWxvbmUgYW5kIG5ldmVyIGdldCBzdWNoIGFuIGlucHV0LgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgZGlkIG5vdCBjbGVhciB0aGUgc3RhdGUgZmlsZXMgY29ycmVjdGx5IHdoZW4gYSBydW4KKyAgIG9mICJzcXVhc2gvZml4dXAiIGlzIGFib3J0ZWQgYW5kIHRoZW4gdGhlIHVzZXIgbWFudWFsbHkgYW1lbmRlZCB0aGUKKyAgIGNvbW1pdCBpbnN0ZWFkLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFdoZW4gZnNtb25pdG9yIGlzIGluIHVzZSwgYWZ0ZXIgb3BlcmF0aW9uIG9uIHN1Ym1vZHVsZXMgdXBkYXRlcworICAgLmdpdG1vZHVsZXMsIHdlIGxvc3QgdHJhY2sgb2YgdGhlIGZhY3QgdGhhdCB3ZSBkaWQgc28gYW5kIHJlbGllZCBvbgorICAgc3RhbGUgZnNtb25pdG9yIGRhdGEuCisKKyAqIEZpeCBmb3IgYSBsb25nLXN0YW5kaW5nIGJ1ZyB0aGF0IGxlYXZlcyB0aGUgaW5kZXggZmlsZSBjb3JydXB0IHdoZW4KKyAgIGl0IHNocmlua3MgZHVyaW5nIGEgcGFydGlhbCBjb21taXQuCisKKyAqIEZ1cnRoZXIgZml4IGZvciBPX0FQUEVORCBlbXVsYXRpb24gb24gV2luZG93cworCisgKiBBIGNvcm5lciBjYXNlIGJ1Z2ZpeCBpbiAiZ2l0IHJlcmVyZSIgY29kZS4KKworICogImdpdCBhZGQgJzooYXR0cjpmb28pJyIgaXMgbm90IHN1cHBvcnRlZCBhbmQgaXMgc3VwcG9zZWQgdG8gYmUKKyAgIHJlamVjdGVkIHdoaWxlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFyZSBwYXJzZWQsIGJ1dCB3ZSBmYWlsCisgICB0byByZWplY3Qgc3VjaCBhIGNvbW1hbmQgbGluZSB1cGZyb250LgorCisgKiAiZ2l0IHJlYmFzZSIgZXRjLiBpbiBHaXQgMi4xOSBmYWlscyB0byBhYm9ydCB3aGVuIGdpdmVuIGFuIGVtcHR5CisgICBjb21taXQgbG9nIG1lc3NhZ2UgYXMgcmVzdWx0IG9mIGVkaXRpbmcsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIGNvZGUgdG8gYmFja2ZpbGwgb2JqZWN0cyBpbiBsYXppbHkgY2xvbmVkIHJlcG9zaXRvcnkgZGlkIG5vdAorICAgd29yayBjb3JyZWN0bHksIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVXBkYXRlIGVycm9yIG1lc3NhZ2VzIGdpdmVuIGJ5ICJnaXQgcmVtb3RlIiBhbmQgbWFrZSB0aGVtIGNvbnNpc3RlbnQuCisKKyAqICJnaXQgdXBkYXRlLXJlZiIgbGVhcm5lZCB0byBtYWtlIGJvdGggIi0tbm8tZGVyZWYiIGFuZCAiLS1zdGRpbiIKKyAgIHdvcmsgYXQgdGhlIHNhbWUgdGltZS4KKworICogUmVjZW50bHkgYWRkZWQgInJhbmdlLWRpZmYiIGhhZCBhIGNvcm5lci1jYXNlIGJ1ZyB0byBjYXVzZSBpdAorICAgc2VnZmF1bHQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIHJlY2VudGx5IGludHJvZHVjZWQgY29tbWl0LWdyYXBoIGF1eGlsaWFyeSBkYXRhIGlzIGluY29tcGF0aWJsZQorICAgd2l0aCBtZWNoYW5pc21zIHN1Y2ggYXMgcmVwbGFjZSAmIGdyYWZ0cyB0aGF0ICJicmVha3MiIGltbXV0YWJsZQorICAgbmF0dXJlIG9mIHRoZSBvYmplY3QgcmVmZXJlbmNlIHJlbGF0aW9uc2hpcC4gIERpc2FibGUgb3B0aW1pemF0aW9ucworICAgYmFzZWQgb24gaXRzIHVzZSAoYW5kIHVwZGF0aW5nIGV4aXN0aW5nIGNvbW1pdC1ncmFwaCkgd2hlbiB0aGVzZQorICAgaW5jb21wYXRpYmxlIGZlYXR1cmVzIGFyZSBpbiB1c2UgaW4gdGhlIHJlcG9zaXRvcnkuCisKKyAqIFRoZSBtYWlsbWFwIGZpbGUgdXBkYXRlLgorCisgKiBUaGUgY29kZSBpbiAiZ2l0IHN0YXR1cyIgc29tZXRpbWVzIGhpdCBhbiBhc3NlcnRpb24gZmFpbHVyZS4gIFRoaXMKKyAgIHdhcyBjYXVzZWQgYnkgYSBzdHJ1Y3R1cmUgdGhhdCB3YXMgcmV1c2VkIHdpdGhvdXQgY2xlYW5pbmcgdGhlIGRhdGEKKyAgIHVzZWQgZm9yIHRoZSBmaXJzdCBydW4sIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogQSBjb3JuZXItY2FzZSBidWdmaXguCisKKyAqIEEgcGFydGlhbCBjbG9uZSB0aGF0IGlzIGNvbmZpZ3VyZWQgdG8gbGF6aWx5IGZldGNoIG1pc3Npbmcgb2JqZWN0cworICAgd2lsbCBvbi1kZW1hbmQgaXNzdWUgYSAiZ2l0IGZldGNoIiByZXF1ZXN0IHRvIHRoZSBvcmlnaW5hdGluZworICAgcmVwb3NpdG9yeSB0byBmaWxsIG5vdC15ZXQtb2J0YWluZWQgb2JqZWN0cy4gIFRoZSByZXF1ZXN0IGhhcyBiZWVuCisgICBvcHRpbWl6ZWQgZm9yIHJlcXVlc3RpbmcgYSB0cmVlIG9iamVjdCAoYW5kIG5vdCB0aGUgbGVhZiBibG9iCisgICBvYmplY3RzIGNvbnRhaW5lZCBpbiBpdCkgYnkgdGVsbGluZyB0aGUgb3JpZ2luYXRpbmcgcmVwb3NpdG9yeSB0aGF0CisgICBubyBibG9icyBhcmUgbmVlZGVkLgorCisgKiBUaGUgY29kZXBhdGggdG8gc3VwcG9ydCB0aGUgZXhwZXJpbWVudGFsIHNwbGl0LWluZGV4IG1vZGUgaGFkCisgICByZW1haW5pbmcgInJhY2lseSBjbGVhbiIgaXNzdWVzIGZpeGVkLgorCisgKiAiZ2l0IGxvZyAtLWdyYXBoIiBzaG93aW5nIGFuIG9jdG9wdXMgbWVyZ2Ugc29tZXRpbWVzIG1pc2NvdW50ZWQgdGhlCisgICBudW1iZXIgb2YgZGlzcGxheSBjb2x1bW5zIGl0IGlzIGNvbnN1bWluZyB0byBzaG93IHRoZSBtZXJnZSBhbmQgaXRzCisgICBwYXJlbnQgY29tbWl0cywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgcnVuX2NvbW1hbmQoKSBBUEkgb24gdGhlIFVOSVggcGxhdGZvcm1zIGhhZCBhCisgICBidWcgdGhhdCBjYXVzZWQgYSBjb21tYW5kIG5vdCBvbiAkUEFUSCB0byBiZSBmb3VuZCBpbiB0aGUgY3VycmVudAorICAgZGlyZWN0b3J5LgorCisgKiBBIG11dGV4IHVzZWQgaW4gImdpdCBwYWNrLW9iamVjdHMiIHdlcmUgbm90IGNvcnJlY3RseSBpbml0aWFsaXplZAorICAgYW5kIHRoaXMgY2F1c2VkICJnaXQgcmVwYWNrIiB0byBkdW1wIGNvcmUgb24gV2luZG93cy4KKworICogVW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCAiZ2l0IGRpZmYgRDovYS9iL2MgRDovYS9iL2QiIG9uCisgICBXaW5kb3dzIHdvdWxkIHN0cmlwIGluaXRpYWwgcGFydHMgZnJvbSB0aGUgcGF0aHMgYmVjYXVzZSB0aGV5CisgICB3ZXJlIG5vdCByZWNvZ25pemVkIGFzIGFic29sdXRlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoPXVwZGF0ZUluc3RlYWQgY29kZXBhdGgga2lja2VkIGluIGV2ZW4KKyAgIHdoZW4gdGhlIHB1c2ggc2hvdWxkIGhhdmUgYmVlbiByZWplY3RlZCBkdWUgdG8gb3RoZXIgcmVhc29ucywgc3VjaAorICAgYXMgaXQgZG9lcyBub3QgZmFzdC1mb3J3YXJkIG9yIHRoZSB1cGRhdGUtaG9vayByZWplY3RzIGl0LCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHJlcGFjayIgaW4gYSBzaGFsbG93IGNsb25lIGRpZCBub3QgY29ycmVjdGx5IHVwZGF0ZSB0aGUKKyAgIHNoYWxsb3cgcG9pbnRzIGluIHRoZSByZXBvc2l0b3J5LCBsZWFkaW5nIHRvIGEgcmVwb3NpdG9yeSB0aGF0CisgICBkb2VzIG5vdCBwYXNzIGZzY2suCisKKyAqIE9wZXJhdGlvbnMgb24gcHJvbWlzb3Igb2JqZWN0cyBtYWtlIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIG9ubHkgYQorICAgc21hbGwgc3Vic2V0IG9mIHRoZSBjb21tYW5kcyB0aGF0IGludGVybmFsbHkgdXNlIHRoZSByZXZpc2lvbnMKKyAgIG1hY2hpbmVyeSwgYnV0IHRoZSAiLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMiIG9wdGlvbiB3ZXJlIHRha2VuCisgICBhbmQgbGVkIHRvIG5vbnNlbnNlIHJlc3VsdHMgYnkgY29tbWFuZHMgbGlrZSAibG9nIiwgdG8gd2hpY2ggaXQKKyAgIGRpZG4ndCBtYWtlIG11Y2ggc2Vuc2UuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlICJjb250YWluZXIiIG1vZGUgb2YgVHJhdmlzQ0kgaXMgZ29pbmcgYXdheS4gIE91ciAudHJhdmlzLnltbAorICAgZmlsZSBpcyBnZXR0aW5nIHByZXBhcmVkIGZvciB0aGUgdHJhbnNpdGlvbi4KKworICogT3VyIHRlc3Qgc2NyaXB0cyBjYW4gbm93IHRha2UgdGhlICctVicgb3B0aW9uIGFzIGEgc3lub255bSBmb3IgdGhlCisgICAnLS12ZXJib3NlLWxvZycgb3B0aW9uLgorCisgKiBBIHJlZ3Jlc3Npb24gaW4gR2l0IDIuMTIgZXJhIG1hZGUgImdpdCBmc2NrIiBmYWxsIGludG8gYW4gaW5maW5pdGUKKyAgIGxvb3Agd2hpbGUgcHJvY2Vzc2luZyB0cnVuY2F0ZWQgbG9vc2Ugb2JqZWN0cy4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTkuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTkuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJkN2Y4OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS4zLnR4dApAQCAtMCwwICsxLDggQEAKK0dpdCB2Mi4xOS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNiwgdjIuMTUuNAorYW5kIGluIHYyLjE3LjMsIGFkZHJlc3NpbmcgdGhlIHNlY3VyaXR5IGlzc3VlcyBDVkUtMjAxOS0xMzQ4LAorQ1ZFLTIwMTktMTM0OSwgQ1ZFLTIwMTktMTM1MCwgQ1ZFLTIwMTktMTM1MSwgQ1ZFLTIwMTktMTM1MiwKK0NWRS0yMDE5LTEzNTMsIENWRS0yMDE5LTEzNTQsIGFuZCBDVkUtMjAxOS0xMzg3OyBzZWUgdGhlIHJlbGVhc2Ugbm90ZXMKK2ZvciB0aG9zZSB2ZXJzaW9ucyBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWQwYWU1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjQudHh0CkBAIC0wLDAgKzEsNSBAQAorR2l0IHYyLjE5LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHRoZSBzZWN1cml0eSBmaXggdGhhdCBhcHBlYXJzIGluIHYyLjE3LjQ7IHNlZQordGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoYXQgdmVyc2lvbiBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGE0ZGNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjUudHh0CkBAIC0wLDAgKzEsNSBAQAorR2l0IHYyLjE5LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHRoZSBzZWN1cml0eSBmaXggdGhhdCBhcHBlYXJzIGluIHYyLjE3LjU7IHNlZQordGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoYXQgdmVyc2lvbiBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk4ZWNiYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yLjAudHh0CkBAIC0wLDAgKzEsMzEzIEBACitHaXQgdjIuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjIuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BvcnRzCisKKyAqIEJ1aWxkaW5nIG9uIG9sZGVyIE1hY09TIFggc3lzdGVtcyBhdXRvbWF0aWNhbGx5IHNldHMKKyAgIHRoZSBuZWNlc3NhcnkgTk9fQVBQTEVfQ09NTU9OX0NSWVBUTyBidWlsZC10aW1lIG9wdGlvbi4KKworICogQnVpbGRpbmcgd2l0aCBOT19QVEhSRUFEUyBoYXMgYmVlbiByZXN1cnJlY3RlZC4KKworICogQ29tcGlsYXRpb24gb3B0aW9ucyBoYXZlIGJlZW4gdXBkYXRlZCBhIGJpdCB0byBiZXR0ZXIgc3VwcG9ydCB0aGUKKyAgIHovT1MgcG9ydC4KKworCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogImdpdCBhcmNoaXZlIiBsZWFybmVkIHRvIGZpbHRlciB3aGF0IGdldHMgYXJjaGl2ZWQgd2l0aCBhIHBhdGhzcGVjLgorCisgKiAiZ2l0IGNvbmZpZyAtLWVkaXQgLS1nbG9iYWwiIHN0YXJ0cyBmcm9tIGEgc2tlbGV0YWwgcGVyLXVzZXIKKyAgIGNvbmZpZ3VyYXRpb24gZmlsZSBjb250ZW50cywgaW5zdGVhZCBvZiBhIHRvdGFsIGJsYW5rLCB3aGVuIHRoZQorICAgdXNlciBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYW55IGdsb2JhbCBjb25maWcuICBUaGlzIGltbWVkaWF0ZWx5CisgICByZWR1Y2VzIHRoZSBuZWVkIHRvIGxhdGVyIGFzayAiSGF2ZSB5b3UgZm9yZ290dGVuIHRvIHNldAorICAgY29yZS51c2VyPyIsIGFuZCB3ZSBjYW4gYWRkIG1vcmUgdG8gdGhlIHRlbXBsYXRlIGFzIHdlIGdhaW4KKyAgIG1vcmUgZXhwZXJpZW5jZS4KKworICogImdpdCBzdGFzaCBsaXN0IC1wIiB1c2VkIHRvIGJlIGFsbW9zdCBhbHdheXMgYSBuby1vcCBiZWNhdXNlIGVhY2gKKyAgIHN0YXNoIGVudHJ5IGlzIHJlcHJlc2VudGVkIGFzIGEgbWVyZ2UgY29tbWl0LiAgSXQgbGVhcm5lZCB0byBzaG93CisgICB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBiYXNlIGNvbW1pdCB2ZXJzaW9uIGFuZCB0aGUgd29ya2luZyB0cmVlCisgICB2ZXJzaW9uLCB3aGljaCBpcyBpbiBsaW5lIHdpdGggd2hhdCAiZ2l0IHN0YXNoIHNob3ciIGdpdmVzLgorCisgKiBTb21ldGltZXMgdXNlcnMgd2FudCB0byByZXBvcnQgYSBidWcgdGhleSBleHBlcmllbmNlIG9uIHRoZWlyCisgICByZXBvc2l0b3J5LCBidXQgdGhleSBhcmUgbm90IGF0IGxpYmVydHkgdG8gc2hhcmUgdGhlIGNvbnRlbnRzIG9mCisgICB0aGUgcmVwb3NpdG9yeS4gICJmYXN0LWV4cG9ydCIgd2FzIHRhdWdodCBhbiAiLS1hbm9ueW1pemUiIG9wdGlvbgorICAgdG8gcmVwbGFjZSBibG9iIGNvbnRlbnRzLCBuYW1lcyBvZiBwZW9wbGUsIHBhdGhzIGFuZCBsb2cKKyAgIG1lc3NhZ2VzIHdpdGggYmxhbmQgYW5kIHNpbXBsZSBzdHJpbmdzIHRvIGhlbHAgdGhlbS4KKworICogImdpdCBkaWZmdG9vbCIgbGVhcm5lZCBhbiBvcHRpb24gdG8gc3RvcCBmZWVkaW5nIHBhdGhzIHRvIHRoZQorICAgZGlmZiBiYWNrZW5kIHdoZW4gaXQgZXhpdHMgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cy4KKworICogImdpdCBncmVwIiBsZWFybmVkIHRvIHBhaW50IChvciBub3QgcGFpbnQpIHBhcnRpYWwgbWF0Y2hlcyBvbgorICAgY29udGV4dCBsaW5lcyB3aGVuIHNob3dpbmcgImdyZXAgLUM8bnVtPiIgb3V0cHV0IGluIGNvbG9yLgorCisgKiAibG9nIC0tZGF0ZT1pc28iIHVzZXMgYSBzbGlnaHQgdmFyaWFudCBvZiB0aGUgSVNPIDg2MDEgZm9ybWF0IHRoYXQgaXMKKyAgIG1vcmUgaHVtYW4gcmVhZGFibGUuICBBIG5ldyAiLS1kYXRlPWlzby1zdHJpY3QiIG9wdGlvbiBnaXZlcworICAgZGF0ZXRpbWUgb3V0cHV0IHRoYXQgY29uZm9ybXMgbW9yZSBzdHJpY3RseS4KKworICogVGhlIGxvZ2ljICJnaXQgcHJ1bmUiIHVzZXMgaXMgbW9yZSByZXNpbGllbnQgYWdhaW5zdCB2YXJpb3VzIGNvcm5lcgorICAgY2FzZXMuCisKKyAqIEEgYnJva2VuIHJlaW1wbGVtZW50YXRpb24gb2YgR2l0IGNvdWxkIHdyaXRlIGFuIGludmFsaWQgaW5kZXggdGhhdAorICAgcmVjb3JkcyBib3RoIHN0YWdlICMwIGFuZCBoaWdoZXItc3RhZ2UgZW50cmllcyBmb3IgdGhlIHNhbWUgcGF0aC4KKyAgIFdlIG5vdyBub3RpY2UgYW5kIHJlamVjdCBzdWNoIGFuIGluZGV4LCBhcyB0aGVyZSBpcyBubyBzZW5zaWJsZQorICAgZmFsbGJhY2sgKHdlIGRvIG5vdCBrbm93IGlmIHRoZSBicm9rZW4gdG9vbCB3YW50ZWQgdG8gcmVzb2x2ZSBhbmQKKyAgIGZvcmdvdCB0byByZW1vdmUgdGhlIGhpZ2hlci1zdGFnZSBlbnRyaWVzLCBvciBpZiBpdCB3YW50ZWQgdG8gdW5yZXNvbHZlCisgICBhbmQgZm9yZ290IHRvIHJlbW92ZSB0aGUgc3RhZ2UgIzAgZW50cnkpLgorCisgKiBUaGUgdGVtcG9yYXJ5IGZpbGVzICJnaXQgbWVyZ2V0b29sIiB1c2VzIGFyZSByZW5hbWVkIHRvIGF2b2lkIHRvbworICAgbWFueSBkb3RzIGluIHRoZW0gKGUuZy4gYSB0ZW1wb3JhcnkgZmlsZSBmb3IgImhlbGxvLmMiIHVzZWQgdG8gYmUKKyAgIG5hbWVkIGUuZy4gImhlbGxvLkJBU0UuNDMyMS5jIiBidXQgbm93IHVzZXMgdW5kZXJzY29yZSBpbnN0ZWFkLAorICAgZS5nLiAiaGVsbG9fQkFTRV80MzIxLmMiLCB0byBhbGxvdyB1cyB0byBoYXZlIG11bHRpcGxlIHZhcmlhbnRzKS4KKworICogVGhlIHRlbXBvcmFyeSBmaWxlcyAiZ2l0IG1lcmdldG9vbCIgdXNlcyBjYW4gYmUgcGxhY2VkIGluIGEgbmV3bHkKKyAgIGNyZWF0ZWQgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGJ5CisgICBzZXR0aW5nIHRoZSBtZXJnZXRvb2wud3JpdGVUb1RlbXAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworICogImdpdCBtZXJnZXRvb2wiIHVuZGVyc3RhbmRzICItLXRvb2wgYmMiIG5vdywgYXMgdmVyc2lvbiA0IG9mCisgICBCZXlvbmRDb21wYXJlIGNhbiBiZSBkcml2ZW4gdGhlIHNhbWUgd2F5IGFzIGl0cyB2ZXJzaW9uIDMgYW5kIGl0CisgICBmZWVscyBhd2t3YXJkIHRvIHNheSAiLS10b29sIGJjMyIgdG8gcnVuIHZlcnNpb24gNC4KKworICogVGhlICJwcmUtcmVjZWl2ZSIgYW5kICJwb3N0LXJlY2VpdmUiIGhvb2tzIGFyZSBubyBsb25nZXIgcmVxdWlyZWQKKyAgIHRvIGNvbnN1bWUgdGhlaXIgaW5wdXQgZnVsbHkgKG5vdCBmb2xsb3dpbmcgdGhpcyByZXF1aXJlbWVudCB1c2VkCisgICB0byByZXN1bHQgaW4gaW50ZXJtaXR0ZW50IGVycm9ycyBpbiAiZ2l0IHB1c2giKS4KKworICogVGhlIHByZXR0eS1mb3JtYXQgc3BlY2lmaWVyICIlZCIsIHdoaWNoIGV4cGFuZHMgdG8gIiAodGFnbmFtZSkiCisgICBmb3IgYSB0YWdnZWQgY29tbWl0LCBnYWluZWQgYSBjb3VzaW4gIiVEIiB0aGF0IGp1c3QgZ2l2ZXMgdGhlCisgICAidGFnbmFtZSIgd2l0aG91dCBmcmlsbHMuCisKKyAqICJnaXQgcHVzaCIgbGVhcm5lZCAiLS1zaWduZWQiIHB1c2gsIHRoYXQgYWxsb3dzIGEgcHVzaCAoaS5lLgorICAgcmVxdWVzdCB0byB1cGRhdGUgdGhlIHJlZnMgb24gdGhlIG90aGVyIHNpZGUgdG8gcG9pbnQgYXQgYSBuZXcKKyAgIGhpc3RvcnksIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zbWlzc2lvbiBvZiBuZWNlc3Nhcnkgb2JqZWN0cykgdG8gYmUKKyAgIHNpZ25lZCwgc28gdGhhdCBpdCBjYW4gYmUgdmVyaWZpZWQgYW5kIGF1ZGl0ZWQsIHVzaW5nIHRoZSBHUEcKKyAgIHNpZ25hdHVyZSBvZiB0aGUgcGVyc29uIHdobyBwdXNoZWQsIHRoYXQgdGhlIHRpcHMgb2YgYnJhbmNoZXMgYXQgYQorICAgcHVibGljIHJlcG9zaXRvcnkgcmVhbGx5IHBvaW50IHRoZSBjb21taXRzIHRoZSBwdXNoZXIgd2FudGVkIHRvLAorICAgd2l0aG91dCBoYXZpbmcgdG8gInRydXN0IiB0aGUgc2VydmVyLgorCisgKiAiZ2l0IGludGVycHJldC10cmFpbGVycyIgaXMgYSBuZXcgZmlsdGVyIHRvIHByb2dyYW1tYXRpY2FsbHkgZWRpdAorICAgdGhlIHRhaWwgZW5kIG9mIHRoZSBjb21taXQgbG9nIG1lc3NhZ2VzLCBlLmcuICJTaWduZWQtb2ZmLWJ5OiIuCisKKyAqICJnaXQgaGVscCBldmVyeWRheSIgc2hvd3MgdGhlICJFdmVyeWRheSBHaXQgaW4gMjAgY29tbWFuZHMgb3Igc28iCisgICBkb2N1bWVudCwgd2hvc2UgY29udGVudHMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gbWF0Y2ggbW9yZSBtb2Rlcm4KKyAgIEdpdCBwcmFjdGljZS4KKworICogT24gdGhlICJnaXQgc3ZuIiBmcm9udCwgd29yayBwcm9ncmVzc2VzIHRvIHJlZHVjZSBtZW1vcnkgY29uc3VtcHRpb24gYW5kCisgICB0byBpbXByb3ZlIGhhbmRsaW5nIG9mIG1lcmdlaW5mby4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBUaGUgQVBJIHRvIG1hbmlwdWxhdGUgdGhlICJyZWZzIiBoYXMgYmVlbiByZXN0cnVjdHVyZWQgdG8gbWFrZSBpdAorICAgbW9yZSB0cmFuc2FjdGlvbmFsLCB3aXRoIHRoZSBldmVudHVhbCBnb2FsIHRvIGFsbG93IGFsbC1vci1ub25lCisgICBhdG9taWMgdXBkYXRlcyBhbmQgbWlncmF0aW5nIHRoZSBzdG9yYWdlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuCisgICB0aGUgdHJhZGl0aW9uYWwgZmlsZXN5c3RlbSBiYXNlZCBvbmUgKGUuZy4gZGF0YWJhc2VzKS4KKworICogVGhlIGxvY2tmaWxlIEFQSSBhbmQgaXRzIHVzZXJzIGhhdmUgYmVlbiBjbGVhbmVkIHVwLgorCisgKiBXZSBubyBsb25nZXIgYXR0ZW1wdCB0byBrZWVwIHRyYWNrIG9mIGluZGl2aWR1YWwgZGVwZW5kZW5jaWVzIHRvCisgICB0aGUgaGVhZGVyIGZpbGVzIGluIHRoZSBidWlsZCBwcm9jZWR1cmUsIHJlbHlpbmcgaW5zdGVhZCBvbiBhdXRvbWF0ZWQKKyAgIGRlcGVuZGVuY3kgZ2VuZXJhdGlvbiBzdXBwb3J0IGZyb20gbW9kZXJuIGNvbXBpbGVycy4KKworICogSW4gdGVzdHMsIHdlIGhhdmUgYmVlbiB1c2luZyBOT1Rfe01JTkdXLENZR1dJTn0gdGVzdCBwcmVyZXF1aXNpdGVzCisgICBsb25nIGJlZm9yZSBuZWdhdGVkIHByZXJlcXVpc2l0ZXMgZS5nLiAhTUlOR1cgd2VyZSBpbnZlbnRlZC4KKyAgIFRoZSBmb3JtZXIgaGFzIGJlZW4gY29udmVydGVkIHRvIHRoZSBsYXR0ZXIgdG8gYXZvaWQgY29uZnVzaW9uLgorCisgKiBPcHRpbWl6ZWQgbG9va2luZyB1cCBhIHJlbW90ZSdzIGNvbmZpZ3VyYXRpb24gaW4gYSByZXBvc2l0b3J5IHdpdGggdmVyeSBtYW55CisgICByZW1vdGVzIGRlZmluZWQuCisKKyAqIFRoZXJlIGFyZSBjYXNlcyB3aGVyZSB5b3UgbG9jayBhbmQgb3BlbiB0byB3cml0ZSBhIGZpbGUsIGNsb3NlIGl0CisgICB0byBzaG93IHRoZSB1cGRhdGVkIGNvbnRlbnRzIHRvIGFuIGV4dGVybmFsIHByb2Nlc3NlcywgYW5kIHRoZW4gaGF2ZQorICAgdG8gdXBkYXRlIHRoZSBmaWxlIGFnYWluIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2s7IG5vdyB0aGUKKyAgIGxvY2tmaWxlIEFQSSBoYXMgc3VwcG9ydCBmb3Igc3VjaCBhbiBhY2Nlc3MgcGF0dGVybi4KKworICogVGhlIEFQSSB0byBhbGxvY2F0ZSB0aGUgc3RydWN0dXJlIHRvIGtlZXAgdHJhY2sgb2YgY29tbWl0CisgICBkZWNvcmF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgdG8gbWFrZSBpdCBsZXNzIGN1bWJlcnNvbWUgdG8gdXNlLgorCisgKiBBbiBpbi1jb3JlIGNhY2hpbmcgbGF5ZXIgdG8gbGV0IHVzIGF2b2lkIHJlYWRpbmcgdGhlIHNhbWUKKyAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgc2V2ZXJhbCB0aW1lcyBoYXMgYmVlbiBhZGRlZC4gIEEgZmV3IGNvbW1hbmRzCisgICBoYXZlIGJlZW4gY29udmVydGVkIHRvIHVzZSB0aGlzIHN1YnN5c3RlbS4KKworICogVmFyaW91cyBjb2RlIHBhdGhzIGhhdmUgYmVlbiBjbGVhbmVkIHVwIGFuZCBzaW1wbGlmaWVkIGJ5IHVzaW5nCisgICB0aGUgInN0cmJ1ZiIsICJzdGFydHNfd2l0aCgpIiwgYW5kICJza2lwX3ByZWZpeCgpIiBBUElzIG1vcmUuCisKKyAqIEEgZmV3IGNvZGVwYXRocyB0aGF0IGRpZWQgd2hlbiBsYXJnZSBibG9icyB0aGF0IHdvdWxkIG5vdCBmaXQgaW4KKyAgIGNvcmUgYXJlIGludm9sdmVkIGluIHRoZWlyIG9wZXJhdGlvbiBoYXZlIGJlZW4gdGF1Z2h0IHRvIHB1bnQKKyAgIGluc3RlYWQsIGJ5IGUuZy4gbWFya2luZyBhIHRvby1sYXJnZSBibG9iIGFzIG5vdCB0byBiZSBkaWZmZWQuCisKKyAqIEEgZmV3IG1vcmUgY29kZSBwYXRocyBpbiAiY29tbWl0IiBhbmQgImNoZWNrb3V0IiBoYXZlIGJlZW4gdGF1Z2h0CisgICB0byByZXBvcHVsYXRlIHRoZSBjYWNoZS10cmVlIGluIHRoZSBpbmRleCwgdG8gaGVscCBzcGVlZCB1cCBsYXRlcgorICAgIndyaXRlLXRyZWUiICh1c2VkIGluICJjb21taXQiKSBhbmQgImRpZmYtaW5kZXggLS1jYWNoZWQiICh1c2VkIGluCisgICAic3RhdHVzIikuCisKKyAqIEEgY29tbW9uIHByb2dyYW1taW5nIG1pc3Rha2UgdG8gYXNzaWduIHRoZSBzYW1lIHNob3J0IG9wdGlvbiBuYW1lCisgICB0byB0d28gc2VwYXJhdGUgb3B0aW9ucyBpcyBkZXRlY3RlZCBieSB0aGUgcGFyc2Vfb3B0aW9ucygpIEFQSSB0byBoZWxwCisgICBkZXZlbG9wZXJzLgorCisgKiBUaGUgY29kZSBwYXRoIHRvIHdyaXRlIG91dCB0aGUgcGFja2VkLXJlZnMgZmlsZSBoYXMgYmVlbiBvcHRpbWl6ZWQsCisgICB3aGljaCBlc3BlY2lhbGx5IG1hdHRlcnMgaW4gYSByZXBvc2l0b3J5IHdpdGggYSBsYXJnZSBudW1iZXIgb2YKKyAgIHJlZnMuCisKKyAqIFRoZSBjaGVjayB0byBzZWUgaWYgYSByZWYgJEYgY2FuIGJlIGNyZWF0ZWQgYnkgbWFraW5nIHN1cmUgbm8KKyAgIGV4aXN0aW5nIHJlZiBoYXMgJEYvIGFzIGl0cyBwcmVmaXggaGFzIGJlZW4gb3B0aW1pemVkLCB3aGljaAorICAgZXNwZWNpYWxseSBtYXR0ZXJzIGluIGEgcmVwb3NpdG9yeSB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIGV4aXN0aW5nCisgICByZWZzLgorCisgKiAiZ2l0IGZzY2siIHdhcyB0YXVnaHQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHRhZyBvYmplY3RzIGEgYml0IG1vcmUuCisKKyAqICJnaXQgaGFzaC1vYmplY3QiIHdhcyB0YXVnaHQgYSAiLS1saXRlcmFsbHkiIG9wdGlvbiB0byBoZWxwCisgICBkZWJ1Z2dpbmcuCisKKyAqIFdoZW4gcnVubmluZyBhIHJlcXVpcmVkIGNsZWFuIGZpbHRlciwgd2UgZG8gbm90IGhhdmUgdG8gbW1hcCB0aGUKKyAgIG9yaWdpbmFsIGJlZm9yZSBmZWVkaW5nIHRoZSBmaWx0ZXIuICBJbnN0ZWFkLCBzdHJlYW0gdGhlIGZpbGUKKyAgIGNvbnRlbnRzIGRpcmVjdGx5IHRvIHRoZSBmaWx0ZXIgYW5kIHByb2Nlc3MgaXRzIG91dHB1dC4KKworICogVGhlIHNjcmlwdHMgaW4gdGhlIHRlc3Qgc3VpdGUgY2FuIGJlIHJ1biB3aXRoIHRoZSAiLXgiIG9wdGlvbiB0byBzaG93CisgICBhIHNoZWxsLXRyYWNlIG9mIGVhY2ggY29tbWFuZCB0aGV5IHJ1bi4KKworICogVGhlICJydW4tY29tbWFuZCIgQVBJIGxlYXJuZWQgdG8gbWFuYWdlIHRoZSBhcmd2IGFuZCBlbnZpcm9ubWVudAorICAgYXJyYXlzIGZvciBjaGlsZCBwcm9jZXNzLCBhbGxldmlhdGluZyB0aGUgbmVlZCBmb3IgdGhlIGNhbGxlcnMgdG8KKyAgIGFsbG9jYXRlIGFuZCBkZWFsbG9jYXRlIHRoZW0uCisKKyAqIFNvbWUgcGVvcGxlIHVzZSBBc2NpaURvY3RvciwgaW5zdGVhZCBvZiBBc2NpaURvYywgdG8gZm9ybWF0IG91cgorICAgZG9jdW1lbnRhdGlvbiBzZXQ7IHRoZSBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIGFkanVzdGVkIHRvIGJlIHVzYWJsZQorICAgYnkgYm90aCwgYXMgQXNjaWlEb2N0b3IgaXMgcGlja2llciB0aGFuIEFzY2lpRG9jIGFib3V0IGl0cyBpbnB1dAorICAgbWFyay11cC4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi4xCistLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjIuMSBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgdGhlIG1haW50ZW5hbmNlIHJlbGVhc2VzJworbm90ZXMgZm9yIGRldGFpbHMpLgorCisgKiAiZ2l0IGxvZyAtLXByZXR0eS9mb3JtYXQ9IiB3aXRoIGFuIGVtcHR5IGZvcm1hdCBzdHJpbmcgZGlkIG5vdAorICAgbWVhbiB0aGUgbW9yZSBvYnZpb3VzICJObyBvdXRwdXQgd2hhdHNvZXZlciIgYnV0ICJVc2UgZGVmYXVsdAorICAgZm9ybWF0Iiwgd2hpY2ggd2FzIGNvdW50ZXJpbnR1aXRpdmUuCisKKyAqICJnaXQgLWMgc2VjdGlvbi52YXIgY29tbWFuZCIgYW5kICJnaXQgLWMgc2VjdGlvbi52YXI9IGNvbW1hbmQiCisgICBzaG91bGQgcGFzcyB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZSBkaWZmZXJlbnRseSAodGhlIGZvcm1lciBzaG91bGQgYmUgYQorICAgYm9vbGVhbiB0cnVlLCB0aGUgbGF0dGVyIHNob3VsZCBiZSBhbiBlbXB0eSBzdHJpbmcpLgorCisgKiBBcHBseWluZyBhIHBhdGNoIG5vdCBnZW5lcmF0ZWQgYnkgR2l0IGluIGEgc3ViZGlyZWN0b3J5IHVzZWQgdG8KKyAgIGNoZWNrIGZvciB3aGl0ZXNwYWNlIGJyZWFrYWdlIHVzaW5nIHRoZSBhdHRyaWJ1dGVzIG9mIGluY29ycmVjdAorICAgcGF0aHMuIEFsc28gd2hpdGVzcGFjZSBjaGVja3Mgd2VyZSBwZXJmb3JtZWQgZXZlbiBmb3IgcGF0aHMKKyAgIGV4Y2x1ZGVkIHZpYSB0aGUgImdpdCBhcHBseSAtLWV4Y2x1ZGU9PHBhdGg+IiBtZWNoYW5pc20uCisKKyAqICJnaXQgYnVuZGxlIGNyZWF0ZSIgd2l0aCBhIGRhdGUtcmFuZ2Ugc3BlY2lmaWNhdGlvbiB3YXMgbWVhbnQgdG8KKyAgIGV4Y2x1ZGUgdGFncyBvdXRzaWRlIHRoZSByYW5nZSwgYnV0IGl0IGRpZG4ndC4KKworICogImdpdCBhZGQgeCIgd2hlcmUgeCB1c2VkIHRvIGJlIGEgZGlyZWN0b3J5IGFuZCBpcyBub3cgYQorICAgc3ltYm9saWMgbGluayB0byBhIGRpcmVjdG9yeSBtaXNiZWhhdmVkLgorCisgKiBUaGUgcHJvbXB0IHNjcmlwdCBjaGVja2VkIHRoZSAkR0lUX0RJUi9yZWYvc3Rhc2ggZmlsZSB0byBzZWUgaWYgdGhlcmUKKyAgIGlzIGEgc3Rhc2gsIHdoaWNoIHdhcyBhIG5vLW5vLgorCisgKiBQYWNrLXByb3RvY29sIGRvY3VtZW50YXRpb24gaGFkIGEgbWlub3IgdHlwby4KKworICogImdpdCBjaGVja291dCAtbSIgZGlkIG5vdCBzd2l0Y2ggdG8gYW5vdGhlciBicmFuY2ggd2hpbGUgY2FycnlpbmcKKyAgIHRoZSBsb2NhbCBjaGFuZ2VzIGZvcndhcmQgd2hlbiBhIHBhdGggd2FzIGRlbGV0ZWQgZnJvbSB0aGUgaW5kZXguCisKKyAqICJnaXQgZGFlbW9uIiAod2l0aCBOT19JUFY2IGJ1aWxkIGNvbmZpZ3VyYXRpb24pIHVzZWQgdG8gaW5jb3JyZWN0bHkKKyAgIHVzZSB0aGUgaG9zdG5hbWUgZXZlbiB3aGVuIGdldGhvc3RieW5hbWUoKSByZXBvcnRlZCB0aGF0IHRoZSBnaXZlbgorICAgaG9zdG5hbWUgaXMgbm90IGZvdW5kLgorICAgKG1lcmdlIDEwN2VmYmUgcnMvZGFlbW9uLWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogV2l0aCBzdWZmaWNpZW50bHkgbG9uZyByZWZuYW1lcywgImdpdCBmYXN0LWltcG9ydCIgY291bGQgaGF2ZQorICAgb3ZlcmZsb3dlZCBhbiBvbi1zdGFjayBidWZmZXIuCisKKyAqIEFmdGVyICJwYWNrLXJlZnMgLS1wcnVuZSIgcGFja2VkIHJlZnMgYXQgdGhlIHRvcC1sZXZlbCwgaXQgZmFpbGVkCisgICB0byBwcnVuZSB0aGVtLgorCisgKiBQcm9ncmVzcyBvdXRwdXQgZnJvbSAiZ2l0IGdjIC0tYXV0byIgd2FzIHZpc2libGUgaW4gImdpdCBmZXRjaCAtcSIuCisKKyAqIFdlIHVzZWQgdG8gcGFzcyAtMTAwMCB0byBwb2xsKDIpLCBleHBlY3RpbmcgaXQgdG8gYWxzbyBtZWFuICJubworICAgdGltZW91dCIsIHdoaWNoIHNob3VsZCBiZSBzcGVsbGVkIGFzIC0xLgorCisgKiAiZ2l0IHJlYmFzZSIgZG9jdW1lbnRhdGlvbiB3YXMgdW5jbGVhciB0aGF0IGl0IGlzIHJlcXVpcmVkIHRvCisgICBzcGVjaWZ5IG9uIHdoYXQgPHVwc3RyZWFtPiB0aGUgcmViYXNlIGlzIHRvIGJlIGRvbmUgd2hlbiB0ZWxsaW5nIGl0CisgICB0byBmaXJzdCBjaGVjayBvdXQgPGJyYW5jaD4uCisgICAobWVyZ2UgOTVjNjgyNiBzby9yZWJhc2UtZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdXNoIiBvdmVyIEhUVFAgdHJhbnNwb3J0IGhhZCBhbiBhcnRpZmljaWFsIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YKKyAgIHJlZnMgdGhhdCBjYW4gYmUgcHVzaGVkLCBpbXBvc2VkIGJ5IHRoZSBjb21tYW5kIGxpbmUgbGVuZ3RoLgorICAgKG1lcmdlIDI2YmUxOWIgamsvc2VuZC1wYWNrLW1hbnktcmVmc3BlY3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuIHJlY2VpdmluZyBhbiBpbnZhbGlkIHBhY2sgc3RyZWFtIHRoYXQgcmVjb3JkcyB0aGUgc2FtZSBvYmplY3QKKyAgIHR3aWNlLCBtdWx0aXBsZSB0aHJlYWRzIGdvdCBjb25mdXNlZCBkdWUgdG8gYSByYWNlLgorICAgKG1lcmdlIGFiNzkxZGQgamsvaW5kZXgtcGFjay10aHJlYWRpbmctcmFjZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiBhdHRlbXB0IHRvIHJlbW92ZSB0aGUgZW50aXJlIHRyZWUgaW4gdGhlICJnaXQgZmFzdC1pbXBvcnQiIGlucHV0CisgICBzdHJlYW0gY2F1c2VkIGl0IHRvIG1pc2JlaGF2ZS4KKyAgIChtZXJnZSAyNjY4ZDY5IG1iL2Zhc3QtaW1wb3J0LWRlbGV0ZS1yb290IGxhdGVyIHRvIG1haW50KS4KKworICogUmVhY2hhYmlsaXR5IGNoZWNrICh1c2VkIGluICJnaXQgcHJ1bmUiIGFuZCBmcmllbmRzKSBkaWQgbm90IGFkZCBhCisgICBkZXRhY2hlZCBIRUFEIGFzIGEgc3RhcnRpbmcgcG9pbnQgdG8gdHJhdmVyc2Ugb2JqZWN0cyBzdGlsbCBpbiB1c2UuCisgICAobWVyZ2UgYzQwZmRkMCBtay9yZWFjaGFibGUtcHJvdGVjdC1kZXRhY2hlZC1oZWFkIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjb25maWcgLS1hZGQgc2VjdGlvbi52YXIgdmFsIiB3aGVuIHNlY3Rpb24udmFyIGFscmVhZHkgaGFzIGFuCisgICBlbXB0eS1zdHJpbmcgdmFsdWUgdXNlZCB0byBsb3NlIHRoZSBlbXB0eS1zdHJpbmcgdmFsdWUuCisgICAobWVyZ2UgYzEwNjNiZSB0YS9jb25maWctYWRkLXRvLWVtcHR5LW9yLXRydWUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmc2NrIiBmYWlsZWQgdG8gcmVwb3J0IHRoYXQgaXQgZm91bmQgY29ycnVwdCBvYmplY3RzIHZpYSBpdHMKKyAgIGV4aXQgc3RhdHVzIGluIHNvbWUgY2FzZXMuCisgICAobWVyZ2UgMzBkMTAzOCBqay9mc2NrLWV4aXQtY29kZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBVc2Ugb2YgdGhlICItLXZlcmJvc2UiIG9wdGlvbiB1c2VkIHRvIGJyZWFrICJnaXQgYnJhbmNoIC0tbWVyZ2VkIi4KKyAgIChtZXJnZSAxMjk5NGRkIGprL21haW50LWJyYW5jaC12ZXJib3NlLW1lcmdlZCBsYXRlciB0byBtYWludCkuCisKKyAqIFNvbWUgTVVBcyBtYW5nbGUgYSBsaW5lIGluIGEgbWVzc2FnZSB0aGF0IGJlZ2lucyB3aXRoICJGcm9tICIgdG8KKyAgICI+RnJvbSAiIHdoZW4gd3JpdGluZyB0byBhIG1haWxib3ggZmlsZSwgYW5kIGZlZWRpbmcgc3VjaCBhbiBpbnB1dAorICAgdG8gImdpdCBhbSIgdXNlZCB0byBsb3NlIHN1Y2ggYSBsaW5lLgorICAgKG1lcmdlIDg1ZGU4NmEgamsvbWJveC1mcm9tLWxpbmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAicmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgJG5hbWUiIGlzIG1lYW50IHRvIHF1aWV0bHkgZXhpdCB3aXRoIGEKKyAgIG5vbi16ZXJvIHN0YXR1cyB3aGVuICRuYW1lIGlzIG5vdCBhIHZhbGlkIG9iamVjdCBuYW1lLCBidXQgc3RpbGwKKyAgIGdhdmUgZXJyb3IgbWVzc2FnZXMgaW4gc29tZSBjYXNlcy4KKworICogQSBoYW5kZnVsIG9mIEMgc291cmNlIGZpbGVzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIGluY2x1ZGUKKyAgICJnaXQtY29tcGF0LXV0aWwuaCIgYXMgdGhlIGZpcnN0IHRoaW5nLCB0byBjb25mb3JtIGJldHRlciB0byBvdXIKKyAgIGNvZGluZyBndWlkZWxpbmVzLgorICAgKG1lcmdlIDFjNGI2NjAgZGEvaW5jbHVkZS1jb21wYXQtdXRpbC1maXJzdC1pbi1jIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHQ3MDA0IHRlc3QsIHdoaWNoIHRyaWVkIHRvIHJ1biBHaXQgd2l0aCBzbWFsbCBzdGFjayBzcGFjZSwgaGFzIGJlZW4KKyAgIHVwZGF0ZWQgdG8gdXNlIGEgYml0IGxhcmdlciBzdGFjayB0byBhdm9pZCBmYWxzZSBicmVha2FnZSBvbiBzb21lCisgICBwbGF0Zm9ybXMuCisgICAobWVyZ2UgYjlhMTkwNyBzay90YWctY29udGFpbnMtd28tcmVjdXJzaW9uIGxhdGVyIHRvIG1haW50KS4KKworICogQSBmZXcgZG9jdW1lbnRhdGlvbiBwYWdlcyBoYWQgZXhhbXBsZSBzZWN0aW9ucyBtYXJrZWQgdXAgbm90IHF1aXRlCisgICBjb3JyZWN0bHksIHdoaWNoIHBhc3NlZCBBc2NpaURvYyBidXQgZmFpbGVkIHdpdGggQXNjaWlEb2N0b3IuCisgICAobWVyZ2UgYzMwYzQzYyBiYy9hc2NpaWRvYy1wcmV0dHktZm9ybWF0cy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY4YTQ4YWYgYmMvYXNjaWlkb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0d2ViIiB1c2VkIGRlcHJlY2F0ZWQgQ0dJOjpzdGFydGZyb20sIHdoaWNoIHdhcyByZW1vdmVkIGZyb20KKyAgIENHSS5wbSBhcyBvZiA0LjA0OyB1c2UgQ0dJOjpzdGFydF9mcm9tIGluc3RlYWQuCisgICAobWVyZ2UgNDc1MGY0YiBybS9naXR3ZWItc3RhcnQtZm9ybSBsYXRlciB0byBtYWludCkuCisKKyAqIE5ld2VyIHZlcnNpb25zIG9mICdtZWxkJyBicmVhayB0aGUgYXV0by1kZXRlY3Rpb24gd2UgdXNlIHRvIHNlZSBpZgorICAgdGhleSBhcmUgbmV3IGVub3VnaCB0byBzdXBwb3J0IHRoZSBgLS1vdXRwdXRgIG9wdGlvbi4KKyAgIChtZXJnZSBiMTJkMDQ1IGRhL21lcmdldG9vbC1tZWxkIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwYWNrLW9iamVjdHMiIGZvcmdvdCB0byBkaXNhYmxlIHRoZSBjb2RlcGF0aCB0byBnZW5lcmF0ZSB0aGUKKyAgIG9iamVjdCByZWFjaGFiaWxpdHkgYml0bWFwIHdoZW4gaXQgbmVlZHMgdG8gc3BsaXQgdGhlIHJlc3VsdGluZworICAgcGFjay4KKyAgIChtZXJnZSAyMTEzNDcxIGprL3BhY2stb2JqZWN0cy1uby1iaXRtYXAtd2hlbi1zcGxpdHRpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0byB1c2UgY2FjaGUtdHJlZSB0cnVzdGVkIHRoZSBvbi1kaXNrIGRhdGEgdG9vIG11Y2ggYW5kCisgICBmZWxsIGludG8gYW4gaW5maW5pdGUgbG9vcCB1cG9uIHNlZWluZyBhbiBpbmNvcnJlY3RseSByZWNvcmRlZAorICAgaW5kZXggZmlsZS4KKyAgIChtZXJnZSA3MjlkYmJkIGprL2NhY2hlLXRyZWUtcHJvdGVjdC1mcm9tLWJyb2tlbi1saWJnaXQyIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCIgaW50byBhIHJlcG9zaXRvcnkgd2hlcmUgYnJhbmNoIEIgd2FzIGRlbGV0ZWQgZWFybGllciwKKyAgIGJhY2sgd2hlbiBpdCBoYWQgcmVmbG9nIGVuYWJsZWQsIGFuZCB0aGVuIGJyYW5jaCBCL0MgaXMgZmV0Y2hlZAorICAgaW50byBpdCB3aXRob3V0IHJlZmxvZyBlbmFibGVkLCB3aGljaCBpcyBhcmd1YWJseSBhbiB1bmxpa2VseQorICAgY29ybmVyIGNhc2UsIHVubmVjZXNzYXJpbHkgZmFpbGVkLgorICAgKG1lcmdlIGFhZTgyOGIgamsvZmV0Y2gtcmVmbG9nLWRmLWNvbmZsaWN0IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBsb2cgLS1maXJzdC1wYXJlbnQgLUwuLi4iIHVzZWQgdG8gY3Jhc2guCisgICAobWVyZ2UgYTg3ODdjNSB0bS9saW5lLWxvZy1maXJzdC1wYXJlbnQgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWEzY2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMS50eHQKQEAgLTAsMCArMSwzNCBAQAorR2l0IHYyLjIuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMgorLS0tLS0tLS0tLS0tLS0tLQorCisgKiBXZSB1c2VkIHRvIGFsbG93IGNvbW1pdHRpbmcgYSBwYXRoICIuR2l0L2NvbmZpZyIgd2l0aCBHaXQgdGhhdCBpcworICAgcnVubmluZyBvbiBhIGNhc2Ugc2Vuc2l0aXZlIGZpbGVzeXN0ZW0sIGJ1dCBhbiBhdHRlbXB0IHRvIGNoZWNrIG91dAorICAgc3VjaCBhIHBhdGggd2l0aCBHaXQgdGhhdCBydW5zIG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtCisgICB3b3VsZCBoYXZlIGNsb2JiZXJlZCAiLmdpdC9jb25maWciLCB3aGljaCBpcyBkZWZpbml0ZWx5IG5vdCB3aGF0CisgICB0aGUgdXNlciB3b3VsZCBoYXZlIGV4cGVjdGVkLiAgR2l0IG5vdyBwcmV2ZW50cyB5b3UgZnJvbSB0cmFja2luZworICAgYSBwYXRoIHdpdGggIi5HaXQiIChpbiBhbnkgY2FzZSBjb21iaW5hdGlvbikgYXMgYSBwYXRoIGNvbXBvbmVudC4KKworICogT24gV2luZG93cywgY2VydGFpbiBwYXRoIGNvbXBvbmVudHMgdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gIi5naXQiCisgICBhcmUgbWFwcGVkIHRvICIuZ2l0IiwgZS5nLiAiZ2l0fjEvY29uZmlnIiBpcyB0cmVhdGVkIGFzIGlmIGl0IHdlcmUKKyAgICIuZ2l0L2NvbmZpZyIuICBIRlMrIGhhcyBhIHNpbWlsYXIgaXNzdWUsIHdoZXJlIGNlcnRhaW4gdW5pY29kZQorICAgY29kZXBvaW50cyBhcmUgaWdub3JlZCwgZS5nLiAiLmdcdTIwMGNpdC9jb25maWciIGlzIHRyZWF0ZWQgYXMgaWYKKyAgIGl0IHdlcmUgIi5naXQvY29uZmlnIi4gIFBhdGhuYW1lcyB3aXRoIHRoZXNlIHBvdGVudGlhbCBpc3N1ZXMgYXJlCisgICByZWplY3RlZCBvbiB0aGUgYWZmZWN0ZWQgc3lzdGVtcy4gIEdpdCBvbiBzeXN0ZW1zIHRoYXQgYXJlIG5vdAorICAgYWZmZWN0ZWQgYnkgdGhpcyBpc3N1ZSAoZS5nLiBMaW51eCkgY2FuIGFsc28gYmUgY29uZmlndXJlZCB0bworICAgcmVqZWN0IHRoZW0gdG8gZW5zdXJlIGNyb3NzIHBsYXRmb3JtIGludGVyb3BlcmFiaWxpdHkgb2YgdGhlIGhvc3RlZAorICAgcHJvamVjdHMuCisKKyAqICJnaXQgZnNjayIgbm90aWNlcyBhIHRyZWUgb2JqZWN0IHRoYXQgcmVjb3JkcyBzdWNoIGEgcGF0aCB0aGF0IGNhbgorICAgYmUgY29uZnVzZWQgd2l0aCAiLmdpdCIsIGFuZCB3aXRoIHJlY2VpdmUuZnNja09iamVjdHMgY29uZmlndXJhdGlvbgorICAgc2V0IHRvIHRydWUsIGFuIGF0dGVtcHQgdG8gImdpdCBwdXNoIiBzdWNoIGEgdHJlZSBvYmplY3Qgd2lsbCBiZQorICAgcmVqZWN0ZWQuICBTdWNoIGEgcGF0aCBtYXkgbm90IGJlIGEgcHJvYmxlbSBvbiBhIHdlbGwgYmVoYXZpbmcKKyAgIGZpbGVzeXN0ZW0gYnV0IGluIG9yZGVyIHRvIHByb3RlY3QgdGhvc2Ugb24gSEZTKyBhbmQgb24gY2FzZQorICAgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMsIHRoaXMgY2hlY2sgaXMgZW5hYmxlZCBvbiBhbGwgcGxhdGZvcm1zLgorCitBIGJpZyAidGhhbmtzISIgZm9yIGJyaW5naW5nIHRoaXMgaXNzdWUgdG8gdXMgZ29lcyB0byBvdXIgZnJpZW5kcyBpbgordGhlIE1lcmN1cmlhbCBsYW5kLCBuYW1lbHksIE1hdHQgTWFja2FsbCBhbmQgQXVnaWUgRmFja2xlci4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5YTM1ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yLjIudHh0CkBAIC0wLDAgKzEsNjMgQEAKK0dpdCB2Mi4yLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjIuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgY2hlY2tvdXQgJHRyZWVpc2ggJHBhdGgiLCB3aGVuICRwYXRoIGluIHRoZSBpbmRleCBhbmQgdGhlCisgICB3b3JraW5nIHRyZWUgYWxyZWFkeSBtYXRjaGVkIHdoYXQgaXMgaW4gJHRyZWVpc2ggYXQgdGhlICRwYXRoLAorICAgc3RpbGwgb3Zlcndyb3RlIHRoZSAkcGF0aCB1bm5lY2Vzc2FyaWx5LgorCisgKiAiZ2l0IGNvbmZpZyAtLWdldC1jb2xvciIgZGlkIG5vdCBwYXJzZSBpdHMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworICAgY2FyZWZ1bGx5LgorCisgKiBvcGVuKCkgZW11bGF0ZWQgb24gV2luZG93cyBwbGF0Zm9ybXMgZGlkIG5vdCBnaXZlIEVJU0RJUiB1cG9uCisgICBhbiBhdHRlbXB0IHRvIG9wZW4gYSBkaXJlY3RvcnkgZm9yIHdyaXRpbmcuCisKKyAqIEEgZmV3IGNvZGUgcGF0aHMgdXNlZCBhYnMoKSB3aGVuIHRoZXkgc2hvdWxkIGhhdmUgdXNlZCBsYWJzKCkgb24KKyAgIGxvbmcgaW50ZWdlcnMuCisKKyAqICJnaXR3ZWIiIHVzZWQgdG8gZGVwZW5kIG9uIGEgYmVoYXZpb3VyIHJlY2VudCBDR0kucG0gZGVwcmVjYXRlZC4KKworICogImdpdCBpbml0IiAoaGVuY2UgImdpdCBjbG9uZSIpIGluaXRpYWxpemVkIHRoZSBwZXItcmVwb3NpdG9yeQorICAgY29uZmlndXJhdGlvbiBmaWxlIC5naXQvY29uZmlnIHdpdGggeC1iaXQgYnkgbWlzdGFrZS4KKworICogR2l0IDIuMCB3YXMgc3VwcG9zZWQgdG8gbWFrZSB0aGUgInNpbXBsZSIgbW9kZSBmb3IgdGhlIGRlZmF1bHQgb2YKKyAgICJnaXQgcHVzaCIsIGJ1dCBpdCBkaWRuJ3QuCisKKyAqICJFdmVyeWRheSIgZG9jdW1lbnQgaGFkIGEgYnJva2VuIGxpbmsuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgZGlkIG5vdCBib3RoZXIgZml4aW5nIHBlcmwgYW5kIHB5dGhvbiBzY3JpcHRzCisgICB3aGVuIE5PX1BFUkwgYW5kIE5PX1BZVEhPTiBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gY2hhbmdlZC4KKworICogVGhlIGNvZGUgdGhhdCByZWFkcyB0aGUgcmVmbG9nIGZyb20gdGhlIG5ld2VyIHRvIHRoZSBvbGRlciBlbnRyaWVzCisgICBkaWQgbm90IGhhbmRsZSBhbiBlbnRyeSB0aGF0IGNyb3NzZXMgYSBib3VuZGFyeSBvZiBibG9jayBpdCB1c2VzIHRvCisgICByZWFkIHRoZW0gY29ycmVjdGx5LgorCisgKiAiZ2l0IGFwcGx5IiB3YXMgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIHRvIHRha2UgLS1pZ25vcmUtZGF0ZQorICAgb3B0aW9uLCB3aGljaCBpdCBkb2VzIG5vdC4KKworICogVHJhZGl0aW9uYWxseSB3ZSB0cmllZCB0byBhdm9pZCBpbnRlcnByZXRpbmcgZGF0ZSBzdHJpbmdzIGdpdmVuIGJ5CisgICB0aGUgdXNlciBhcyBmdXR1cmUgZGF0ZXMsIGUuZy4gR0lUX0NPTU1JVFRFUl9EQVRFPTIwMTQtMTItMTAgd2hlbgorICAgdXNlZCBlYXJseSBOb3ZlbWJlciAyMDE0IHdhcyB0YWtlbiBhcyAiT2N0b2JlciAxMiwgMjAxNCIgYmVjYXVzZSBpdAorICAgaXMgbGlrZWx5IHRoYXQgYSBkYXRlIGluIHRoZSBmdXR1cmUsIERlY2VtYmVyIDEwLCBpcyBhIG1pc3Rha2UuCisgICBUaGlzIGhldXJpc3RpY3MgaGFzIGJlZW4gbG9vc2VuZWQgdG8gYWxsb3cgcGVvcGxlIHRvIGV4cHJlc3MgZnV0dXJlCisgICBkYXRlcyAobW9zdCBub3RhYmx5LCAtLXVudGlsPTxkYXRlPiBtYXkgd2FudCB0byBiZSBmYXIgaW4gdGhlCisgICBmdXR1cmUpIGFuZCB3ZSBubyBsb25nZXIgdGllYnJlYWsgYnkgZnV0dXJlLW5lc3Mgb2YgdGhlIGRhdGUgd2hlbgorCisgICAgKDEpIElTTy1saWtlIGZvcm1hdCBpcyB1c2VkLCBhbmQKKyAgICAoMikgdGhlIHN0cmluZyBjYW4gbWFrZSBzZW5zZSBpbnRlcnByZXRlZCBhcyBib3RoIHktbS1kIGFuZCB5LWQtbS4KKworICAgR2l0IG1heSBzdGlsbCBoYXZlIHRvIHVzZSB0aGUgaGV1cmlzdGljcyB0byB0aWVicmVhayBiZXR3ZWVuIGRkL21tL3l5CisgICBhbmQgbW0vZGQveXksIHRob3VnaC4KKworICogVGhlIGNvZGUgdG8gYWJicmV2aWF0ZSBhbiBvYmplY3QgbmFtZSB0byBpdHMgc2hvcnQgdW5pcXVlIHByZWZpeAorICAgaGFzIGJlZW4gb3B0aW1pemVkIHdoZW4gbm8gYWJicmV2aWF0aW9uIHdhcyByZXF1ZXN0ZWQuCisKKyAqICJnaXQgYWRkIC0taWdub3JlLWVycm9ycyAuLi4iIGRpZCBub3QgaWdub3JlIGFuIGVycm9yIHRvCisgICBnaXZlIGEgZmlsZSB0aGF0IGRpZCBub3QgZXhpc3QuCisKKyAqIEdpdCBkaWQgbm90IGNvcnJlY3RseSByZWFkIGFuIG92ZXJsb25nIHJlZm5hbWUgZnJvbSBhIHBhY2tlZCByZWZzCisgICBmaWxlLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmZmZmE0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMy50eHQKQEAgLTAsMCArMSw5IEBACitHaXQgdjIuMi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4yLjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIGhhbmRmdWwgb2YgY29kZXBhdGhzIHRoYXQgdXNlZCB0byB1c2UgZml4ZWQtc2l6ZWQgYXJyYXlzIHRvIGhvbGQKKyAgIHBhdGhuYW1lcyBoYXZlIGJlZW4gY29ycmVjdGVkIHRvIHVzZSBzdHJidWYgYW5kIG90aGVyIG1lY2hhbmlzbXMgdG8KKyAgIGFsbG93IGxvbmdlciBwYXRobmFtZXMgd2l0aG91dCBmZWFyaW5nIG92ZXJmbG93cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGQ3ZTZlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjAudHh0CkBAIC0wLDAgKzEsNzAwIEBACitHaXQgMi4yMCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIENvbXBhdGliaWxpdHkgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBicmFuY2ggLWwgPGZvbz4iIHVzZWQgdG8gYmUgYSB3YXkgdG8gYXNrIGEgcmVmbG9nIHRvIGJlCisgICBjcmVhdGVkIHdoaWxlIGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgYnV0IHRoYXQgaXMgbm8gbG9uZ2VyIHRoZQorICAgY2FzZS4gIEl0IGlzIGEgc2hvcnQtaGFuZCBmb3IgImdpdCBicmFuY2ggLS1saXN0IDxmb28+IiBub3cuCisKKyAqICJnaXQgcHVzaCIgaW50byByZWZzL3RhZ3MvKiBoaWVyYXJjaHkgaXMgcmVqZWN0ZWQgd2l0aG91dCBnZXR0aW5nCisgICBmb3JjZWQsIGJ1dCAiZ2l0IGZldGNoIiAobWlzZ3VpZGVkbHkpIHVzZWQgdGhlICJmYXN0IGZvcndhcmRpbmciCisgICBydWxlIHVzZWQgZm9yIHRoZSByZWZzL2hlYWRzLyogaGllcmFyY2h5OyB0aGlzIGhhcyBiZWVuIGNvcnJlY3RlZCwKKyAgIHdoaWNoIG1lYW5zIHNvbWUgZmV0Y2hlcyBvZiB0YWdzIHRoYXQgZGlkIG5vdCBmYWlsIHdpdGggb2xkZXIKKyAgIHZlcnNpb24gb2YgR2l0IHdpbGwgZmFpbCB3aXRob3V0ICItLWZvcmNlIiB3aXRoIHRoaXMgdmVyc2lvbi4KKworICogImdpdCBoZWxwIC1hIiBub3cgZ2l2ZXMgdmVyYm9zZSBvdXRwdXQgKHNhbWUgYXMgImdpdCBoZWxwIC1hdiIpLgorICAgVGhvc2Ugd2hvIHdhbnQgdGhlIG9sZCBvdXRwdXQgbWF5IHNheSAiZ2l0IGhlbHAgLS1uby12ZXJib3NlIC1hIi4uCisKKyAqICJnaXQgY3BuIC0taGVscCIsIHdoZW4gImNwbiIgaXMgYW4gYWxpYXMgdG8sIHNheSwgImNoZXJyeS1waWNrIC1uIiwKKyAgIHJlcG9ydGVkIG9ubHkgdGhlIGFsaWFzIGV4cGFuc2lvbiBvZiAiY3BuIiBpbiBlYXJsaWVyIHZlcnNpb25zIG9mCisgICBHaXQuICBJdCBub3cgcnVucyAiZ2l0IGNoZXJyeS1waWNrIC0taGVscCIgdG8gc2hvdyB0aGUgbWFudWFsIHBhZ2UKKyAgIG9mIHRoZSBjb21tYW5kLCB3aGlsZSBzZW5kaW5nIHRoZSBhbGlhcyBleHBhbnNpb24gdG8gdGhlIHN0YW5kYXJkCisgICBlcnJvciBzdHJlYW0uCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCB0byBncmFiIGFkZHJlc3MtbG9va2luZyBzdHJpbmcgb24gYW55CisgICB0cmFpbGVyIHdob3NlIG5hbWUgZW5kcyB3aXRoICItYnkiLiBUaGlzIGlzIGEgYmFja3dhcmQtaW5jb21wYXRpYmxlCisgICBjaGFuZ2UuICBBZGRpbmcgIi0tc3VwcHJlc3MtY2M9bWlzYy1ieSIgb24gdGhlIGNvbW1hbmQgbGluZSwgb3IKKyAgIHNldHRpbmcgc2VuZGVtYWlsLnN1cHByZXNzY2MgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAibWlzYy1ieSIsCisgICBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3VyLgorCisKK1VwZGF0ZXMgc2luY2UgdjIuMTkKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIFJ1bm5pbmcgImdpdCBjbG9uZSIgYWdhaW5zdCBhIHByb2plY3QgdGhhdCBjb250YWluIHR3byBmaWxlcyB3aXRoCisgICBwYXRobmFtZXMgdGhhdCBkaWZmZXIgb25seSBpbiBjYXNlcyBvbiBhIGNhc2UgaW5zZW5zaXRpdmUKKyAgIGZpbGVzeXN0ZW0gd291bGQgcmVzdWx0IGluIG9uZSBvZiB0aGUgZmlsZXMgbG9zdCBiZWNhdXNlIHRoZQorICAgdW5kZXJseWluZyBmaWxlc3lzdGVtIGlzIGluY2FwYWJsZSBvZiBob2xkaW5nIGJvdGggYXQgdGhlIHNhbWUKKyAgIHRpbWUuICBBbiBhdHRlbXB0IGlzIG1hZGUgdG8gZGV0ZWN0IHN1Y2ggYSBjYXNlIGFuZCB3YXJuLgorCisgKiAiZ2l0IGNoZWNrb3V0IC1iIG5ld2JyYW5jaCBbSEVBRF0iIHNob3VsZCBub3QgaGF2ZSB0byBkbyBhcyBtdWNoIGFzCisgICBjaGVja2luZyBvdXQgYSBjb21taXQgZGlmZmVyZW50IGZyb20gSEVBRC4gIEFuIGF0dGVtcHQgaXMgbWFkZSB0bworICAgb3B0aW1pemUgdGhpcyBzcGVjaWFsIGNhc2UuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1zdGRpbiA8L2Rldi9udWxsIiB1c2VkIHRvIGJlIGFuIGVycm9yOyBpdCBub3cgc2hvd3MKKyAgIG5vIG91dHB1dCB3aXRob3V0IGFuIGVycm9yLiAgImdpdCByZXYtbGlzdCAtLXN0ZGluIC0tZGVmYXVsdCBIRUFEIgorICAgc3RpbGwgZmFsbHMgYmFjayB0byB0aGUgZ2l2ZW4gZGVmYXVsdCB3aGVuIG5vdGhpbmcgaXMgZ2l2ZW4gb24gdGhlCisgICBzdGFuZGFyZCBpbnB1dC4KKworICogTGlmdCBjb2RlIGZyb20gR2l0SHViIHRvIHJlc3RyaWN0IGRlbHRhIGNvbXB1dGF0aW9uIHNvIHRoYXQgYW4KKyAgIG9iamVjdCB0aGF0IGV4aXN0cyBpbiBvbmUgZm9yayBpcyBub3QgbWFkZSBpbnRvIGEgZGVsdGEgYWdhaW5zdAorICAgYW5vdGhlciBvYmplY3QgdGhhdCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIHNhbWUgZm9ya2VkIHJlcG9zaXRvcnkuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIG5ldyAiLS1pbnRlcmRpZmYiIGFuZCAiLS1yYW5nZS1kaWZmIgorICAgb3B0aW9ucyB0byBleHBsYWluIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyB2ZXJzaW9uIGFuZCB0aGUKKyAgIHByZXZpb3VzIGF0dGVtcHQgaW4gdGhlIGNvdmVyIGxldHRlciAob3IgYWZ0ZXIgdGhlIHRocmVlLWRhc2hlcyBhcworICAgYSBjb21tZW50KS4KKworICogImdpdCBtYWlsaW5mbyIgdXNlZCBpbiAiZ2l0IGFtIiBsZWFybmVkIHRvIG1ha2UgYSBiZXN0LWVmZm9ydAorICAgcmVjb3Zlcnkgb2YgYSBwYXRjaCBjb3JydXB0ZWQgYnkgTVVBIHRoYXQgc2VuZHMgdGV4dC9wbGFpbiB3aXRoCisgICBmb3JtYXQ9Zmxhd2VkIG9wdGlvbi4KKyAgIChtZXJnZSAzYWE0ZDgxZjg4IHJzL21haWxpbmZvLWZvcm1hdC1mbG93ZWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgcnVsZXMgdXNlZCBieSAiZ2l0IHB1c2giIGFuZCAiZ2l0IGZldGNoIiB0byBkZXRlcm1pbmUgaWYgYSByZWYKKyAgIGNhbiBvciBjYW5ub3QgYmUgdXBkYXRlZCB3ZXJlIGluY29uc2lzdGVudDsgc3BlY2lmaWNhbGx5LCBmZXRjaGluZworICAgdG8gdXBkYXRlIGV4aXN0aW5nIHRhZ3Mgd2VyZSBhbGxvd2VkIGV2ZW4gdGhvdWdoIHRhZ3MgYXJlIHN1cHBvc2VkCisgICB0byBiZSB1bm1vdmluZyBhbmNob3JpbmcgcG9pbnRzLiAgImdpdCBmZXRjaCIgd2FzIHRhdWdodCB0byBmb3JiaWQKKyAgIHVwZGF0ZXMgdG8gZXhpc3RpbmcgdGFncyB3aXRob3V0IHRoZSAiLS1mb3JjZSIgb3B0aW9uLgorCisgKiAiZ2l0IG11bHRpLXBhY2staW5kZXgiIGxlYXJuZWQgdG8gZGV0ZWN0IGNvcnJ1cHRpb24gaW4gdGhlIC5taWR4CisgICBmaWxlIGl0IHVzZXMsIGFuZCB0aGlzIGZlYXR1cmUgaGFzIGJlZW4gaW50ZWdyYXRlZCBpbnRvICJnaXQgZnNjayIuCisKKyAqIEdlbmVyYXRpb24gb2YgKGV4cGVyaW1lbnRhbCkgY29tbWl0LWdyYXBoIGZpbGVzIGhhdmUgc28gZmFyIGJlZW4KKyAgIGZhaXJseSBzaWxlbnQsIGV2ZW4gdGhvdWdoIGl0IHRha2VzIG5vdGljZWFibGUgYW1vdW50IG9mIHRpbWUgaW4gYQorICAgbWVhbmluZ2Z1bGx5IGxhcmdlIHJlcG9zaXRvcnkuICBUaGUgdXNlcnMgd2lsbCBub3cgc2VlIHByb2dyZXNzCisgICBvdXRwdXQuCisKKyAqIFRoZSBtaW5pbXVtIHZlcnNpb24gb2YgV2luZG93cyBzdXBwb3J0ZWQgYnkgV2luZG93cyBwb3J0IG9mIEdpdCBpcworICAgbm93IHNldCB0byBWaXN0YS4KKworICogVGhlIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgbGVhcm5lZCB0byBjb21wbGV0ZSBhIGhhbmRmdWwgb2YKKyAgIG9wdGlvbnMgImdpdCBzdGFzaCBsaXN0IiBjb21tYW5kIHRha2VzLgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBsZWFybmVkIHRoYXQgImdpdCBmZXRjaAorICAgLS1tdWx0aXBsZSIgb25seSB0YWtlcyByZW1vdGUgbmFtZXMgYXMgYXJndW1lbnRzIGFuZCBubyByZWZzcGVjcy4KKworICogImdpdCBzdGF0dXMiIGxlYXJucyB0byBzaG93IHByb2dyZXNzIGJhciB3aGVuIHJlZnJlc2hpbmcgdGhlIGluZGV4CisgICB0YWtlcyBhIGxvbmcgdGltZS4KKyAgIChtZXJnZSBhZTlhZjEyMjg3IG5kL3N0YXR1cy1yZWZyZXNoLXByb2dyZXNzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBoZWxwIC1hIiBhbmQgImdpdCBoZWxwIC1hdiIgZ2l2ZSBkaWZmZXJlbnQgcGllY2VzIG9mCisgICBpbmZvcm1hdGlvbiwgYW5kIGdlbmVyYWxseSB0aGUgInZlcmJvc2UiIHZlcnNpb24gaXMgbW9yZSBmcmllbmRseQorICAgdG8gdGhlIG5ldyB1c2Vycy4gICJnaXQgaGVscCAtYSIgYnkgZGVmYXVsdCBub3cgdXNlcyB0aGUgbW9yZQorICAgdmVyYm9zZSBvdXRwdXQgKHdpdGggIi0tbm8tdmVyYm9zZSIsIHlvdSBjYW4gZ28gYmFjayB0byB0aGUKKyAgIG9yaWdpbmFsKS4gIEFsc28gImdpdCBoZWxwIC1hdiIgbm93IGxpc3RzIGFsaWFzZXMgYW5kIGV4dGVybmFsCisgICBjb21tYW5kcywgd2hpY2ggaXQgZGlkIG5vdCB1c2VkIHRvLgorCisgKiBVbmxpa2UgImdyZXAiLCAiZ2l0IGdyZXAiIGJ5IGRlZmF1bHQgcmVjdXJzZXMgdG8gdGhlIHdob2xlIHRyZWUuCisgICBUaGUgY29tbWFuZCBsZWFybmVkICJnaXQgZ3JlcCAtLXJlY3Vyc2l2ZSIgb3B0aW9uLCBzbyB0aGF0ICJnaXQKKyAgIGdyZXAgLS1uby1yZWN1cnNpdmUiIGNhbiBzZXJ2ZSBhcyBhIHN5bm9ueW0gdG8gc2V0dGluZyB0aGUKKyAgIG1heC1kZXB0aCB0byAwLgorCisgKiBXaGVuIHB1c2hpbmcgaW50byBhIHJlcG9zaXRvcnkgdGhhdCBib3Jyb3dzIGl0cyBvYmplY3RzIGZyb20gYW4KKyAgIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUsICJnaXQgcmVjZWl2ZS1wYWNrIiB0aGF0IHJlc3BvbmRzIHRvIHRoZQorICAgcHVzaCByZXF1ZXN0IG9uIHRoZSBvdGhlciBzaWRlIGxpc3RzIHRoZSB0aXBzIG9mIHJlZnMgaW4gdGhlCisgICBhbHRlcm5hdGUgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2Ygb2JqZWN0cyB0cmFuc2ZlcnJlZC4gIFRoaXMKKyAgIHNvbWV0aW1lcyBpcyBkZXRyaW1lbnRhbCB3aGVuIHRoZSBudW1iZXIgb2YgcmVmcyBpbiB0aGUgYWx0ZXJuYXRlCisgICBpcyBhYnN1cmRseSBsYXJnZSwgaW4gd2hpY2ggY2FzZSB0aGUgYmFuZHdpZHRoIHNhdmVkIGluIHBvdGVudGlhbGx5CisgICBmZXdlciBvYmplY3RzIHRyYW5zZmVycmVkIGlzIHdhc3RlZCBpbiBleGNlc3NpdmVseSBsYXJnZSByZWYKKyAgIGFkdmVydGlzZW1lbnQuICBUaGUgYWx0ZXJuYXRlIHJlZnMgdGhhdCBhcmUgYWR2ZXJ0aXNlZCBhcmUgbm93CisgICBjb25maWd1cmFibGUgd2l0aCBhIHBhaXIgb2YgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisKKyAqICJnaXQgY21kIC0taGVscCIgd2hlbiAiY21kIiBpcyBhbGlhc2VkIHVzZWQgdG8gb25seSBzYXkgImNtZCBpcworICAgYWxpYXNlZCB0byAuLi4iLiAgTm93IGl0IHNob3dzIHRoYXQgdG8gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbQorICAgYW5kIHJ1bnMgImdpdCAkY21kIC0taGVscCIgd2hlcmUgJGNtZCBpcyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUKKyAgIGFsaWFzIGV4cGFuc2lvbi4KKworICogVGhlIGRvY3VtZW50YXRpb24gb2YgImdpdCBnYyIgaGFzIGJlZW4gdXBkYXRlZCB0byBtZW50aW9uIHRoYXQgaXQKKyAgIGlzIG5vIGxvbmdlciBsaW1pdGVkIHRvICJwcnVuaW5nIGF3YXkgY3J1ZnQiIGJ1dCBhbHNvIHVwZGF0ZXMKKyAgIGFuY2lsbGFyeSBmaWxlcyBsaWtlIGNvbW1pdC1ncmFwaCBhcyBhIHBhcnQgb2YgcmVwb3NpdG9yeQorICAgb3B0aW1pemF0aW9uLgorCisgKiAiZ2l0IHA0IHVuc2hlbHZlIiBpbXByb3ZlbWVudHMuCisKKyAqIFRoZSBsb2dpYyB0byBzZWxlY3QgdGhlIGRlZmF1bHQgdXNlciBuYW1lIGFuZCBlLW1haWwgb24gV2luZG93cyBoYXMKKyAgIGJlZW4gaW1wcm92ZWQuCisgICAobWVyZ2UgNTAxYWZjYjhiMCBqcy9taW5ndy1kZWZhdWx0LWlkZW50IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICJyZXYtbGlzdCAtLWZpbHRlciIgZmVhdHVyZSBsZWFybmVkIHRvIGV4Y2x1ZGUgYWxsIHRyZWVzIHZpYQorICAgInRyZWU6MCIgZmlsdGVyLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGxlYXJuZWQgdG8gZ3JhYiBhZGRyZXNzLWxvb2tpbmcgc3RyaW5nIG9uIGFueQorICAgdHJhaWxlciB3aG9zZSBuYW1lIGVuZHMgd2l0aCAiLWJ5IjsgLS1zdXBwcmVzcy1jYz1taXNjLWJ5IG9uIHRoZQorICAgY29tbWFuZCBsaW5lLCBvciBzZXR0aW5nIHNlbmRlbWFpbC5zdXBwcmVzc2NjIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIHRvICJtaXNjLWJ5IiwgY2FuIGJlIHVzZWQgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW91ci4KKworICogImdpdCBtZXJnZXRvb2wiIGxlYXJuZWQgdG8gdGFrZSB0aGUgIi0tW25vLV1ndWkiIG9wdGlvbiwganVzdCBsaWtlCisgICAiZ2l0IGRpZmZ0b29sIiBkb2VzLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgbGVhcm5lZCBhIG5ldyBpbnNuLCAnYnJlYWsnLCB0aGF0IHRoZSB1c2VyIGNhbgorICAgaW5zZXJ0IGluIHRoZSB0by1kbyBsaXN0LiAgVXBvbiBoaXR0aW5nIGl0LCB0aGUgY29tbWFuZCByZXR1cm5zCisgICBjb250cm9sIGJhY2sgdG8gdGhlIHVzZXIuCisKKyAqIE5ldyAiLS1wcmV0dHk9Zm9ybWF0OiIgcGxhY2Vob2xkZXJzICVHRiBhbmQgJUdQIHRoYXQgc2hvdyB0aGUgR1BHCisgICBrZXkgZmluZ2VycHJpbnRzIGhhdmUgYmVlbiBpbnZlbnRlZC4KKworICogT24gcGxhdGZvcm1zIHdpdGggcmVjZW50IGNVUkwgbGlicmFyeSwgaHR0cC5zc2xCYWNrZW5kIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIGNob29zZSBhIGRpZmZlcmVudCBTU0wgYmFja2VuZCBhdCBydW50aW1lLgorICAgVGhlIFdpbmRvd3MgcG9ydCB1c2VzIHRoaXMgbWVjaGFuaXNtIHRvIHN3aXRjaCBiZXR3ZWVuIE9wZW5TU0wgYW5kCisgICBTZWN1cmUgQ2hhbm5lbCB3aGlsZSB0YWxraW5nIG92ZXIgdGhlIEhUVFBTIHByb3RvY29sLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGxlYXJuZWQgdG8gZGlzYWJsZSBTTVRQIGF1dGhlbnRpY2F0aW9uIHZpYSB0aGUKKyAgICItLXNtdHAtYXV0aD1ub25lIiBvcHRpb24sIGV2ZW4gd2hlbiB0aGUgc210cCB1c2VybmFtZSBpcyBnaXZlbgorICAgKHdoaWNoIHR1cm5zIHRoZSBhdXRoZW50aWNhdGlvbiBvbiBieSBkZWZhdWx0KS4KKworICogQSBmb3VydGggY2xhc3Mgb2YgY29uZmlndXJhdGlvbiBmaWxlcyAoaW4gYWRkaXRpb24gdG8gdGhlCisgICB0cmFkaXRpb25hbCAic3lzdGVtIHdpZGUiLCAicGVyIHVzZXIgaW4gdGhlICRIT01FIGRpcmVjdG9yeSIgYW5kCisgICAicGVyIHJlcG9zaXRvcnkgaW4gdGhlICRHSVRfRElSL2NvbmZpZyIpIGhhcyBiZWVuIGludHJvZHVjZWQgc28KKyAgIHRoYXQgZGlmZmVyZW50IHdvcmt0cmVlcyB0aGF0IHNoYXJlIHRoZSBzYW1lIHJlcG9zaXRvcnkgKGhlbmNlIHRoZQorICAgc2FtZSAkR0lUX0RJUi9jb25maWcgZmlsZSkgY2FuIHVzZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbi4KKworICogQSBwYXR0ZXJuIHdpdGggJyoqJyB0aGF0IGRvZXMgbm90IGhhdmUgYSBzbGFzaCBvbiBlaXRoZXIgc2lkZSB1c2VkCisgICB0byBiZSBhbiBpbnZhbGlkIG9uZSwgYnV0IHRoZSBjb2RlIG5vdyB0cmVhdHMgc3VjaCBkb3VibGUtYXN0ZXJpc2tzCisgICB0aGUgc2FtZSB3YXkgYXMgdHdvIG5vcm1hbCBhc3Rlcmlza3MgdGhhdCBoYXBwZW4gdG8gYmUgYWRqYWNlbnQgdG8KKyAgIGVhY2ggb3RoZXIuCisgICAobWVyZ2UgZTViYmUwOWU4OCBuZC93aWxkbWF0Y2gtZG91YmxlLWFzdGVyaXNrIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICItLW5vLXBhdGNoIiBvcHRpb24sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGdldCBhIGhpZ2gtbGV2ZWwKKyAgIG92ZXJ2aWV3IHdpdGhvdXQgdGhlIGFjdHVhbCBsaW5lLWJ5LWxpbmUgcGF0Y2ggZGlmZmVyZW5jZSBzaG93biwgb2YKKyAgIHRoZSAicmFuZ2UtZGlmZiIgY29tbWFuZCB3YXMgZWFybGllciBicm9rZW4sIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFRoZSByZWNlbnRseSBtZXJnZWQgInJlYmFzZSBpbiBDIiBoYXMgYW4gZXNjYXBlIGhhdGNoIHRvIHVzZSB0aGUKKyAgIHNjcmlwdGVkIHZlcnNpb24gd2hlbiBuZWNlc3NhcnksIGJ1dCBpdCBoYXNuJ3QgYmVlbiBkb2N1bWVudGVkLAorICAgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIERldmVsb3BlciBidWlsZHMgbm93IHVzZSAtV3VudXNlZC1mdW5jdGlvbiBjb21waWxhdGlvbiBvcHRpb24uCisKKyAqIE9uZSBvZiBvdXIgQ0kgdGVzdHMgdG8gcnVuIHdpdGggInVudXN1YWwvZXhwZXJpbWVudGFsL3JhbmRvbSIKKyAgIHNldHRpbmdzIG5vdyBhbHNvIHVzZXMgY29tbWl0LWdyYXBoIGFuZCBtaWR4LgorCisgKiBXaGVuIHRoZXJlIGFyZSB0b28gbWFueSBwYWNrZmlsZXMgaW4gYSByZXBvc2l0b3J5ICh3aGljaCBpcyBub3QKKyAgIHJlY29tbWVuZGVkKSwgbG9va2luZyB1cCBhbiBvYmplY3QgaW4gdGhlc2Ugd291bGQgcmVxdWlyZQorICAgY29uc3VsdGluZyBtYW55IHBhY2sgLmlkeCBmaWxlczsgYSBuZXcgbWVjaGFuaXNtIHRvIGhhdmUgYSBzaW5nbGUKKyAgIGZpbGUgdGhhdCBjb25zb2xpZGF0ZXMgYWxsIG9mIHRoZXNlIC5pZHggZmlsZXMgaXMgaW50cm9kdWNlZC4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBpcyBnZXR0aW5nIHJld3JpdHRlbiBwaWVjZS1ieS1waWVjZSBpbnRvIEMuCisKKyAqIFRoZSBjb2RlIGZvciBjb21wdXRpbmcgaGlzdG9yeSByZWFjaGFiaWxpdHkgaGFzIGJlZW4gc2h1ZmZsZWQsCisgICBvYnRhaW5lZCBhIGJ1bmNoIG9mIG5ldyB0ZXN0cyB0byBjb3ZlciB0aGVtLCBhbmQgdGhlbiBiZWluZworICAgaW1wcm92ZWQuCisKKyAqIFRoZSB1bnBhY2tfdHJlZXMoKSBBUEkgdXNlZCBpbiBjaGVja2luZyBvdXQgYSBicmFuY2ggYW5kIG1lcmdpbmcKKyAgIHdhbGtzIG9uZSBvciBtb3JlIHRyZWVzIGFsb25nIHdpdGggdGhlIGluZGV4LiAgV2hlbiB0aGUgY2FjaGUtdHJlZQorICAgaW4gdGhlIGluZGV4IHRlbGxzIHVzIHRoYXQgd2UgYXJlIHdhbGtpbmcgYSB0cmVlIHdob3NlIGZsYXR0ZW5lZAorICAgY29udGVudHMgaXMga25vd24gKGkuZS4gbWF0Y2hlcyBhIHNwYW4gaW4gdGhlIGluZGV4KSwgYXMgbGluZWFybHkKKyAgIHNjYW5uaW5nIGEgc3BhbiBpbiB0aGUgaW5kZXggaXMgbXVjaCBtb3JlIGVmZmljaWVudCB0aGFuIGhhdmluZyB0bworICAgb3BlbiB0cmVlIG9iamVjdHMgcmVjdXJzaXZlbHkgYW5kIGxpc3RpbmcgdGhlaXIgZW50cmllcywgdGhlIHdhbGsKKyAgIGNhbiBiZSBvcHRpbWl6ZWQsIHdoaWNoIGhhcyBiZWVuIGRvbmUuCisKKyAqIFdoZW4gY3JlYXRpbmcgYSB0aGluIHBhY2ssIHdoaWNoIGFsbG93cyBvYmplY3RzIHRvIGJlIG1hZGUgaW50byBhCisgICBkZWx0YSBhZ2FpbnN0IGFub3RoZXIgb2JqZWN0IHRoYXQgaXMgbm90IGluIHRoZSByZXN1bHRpbmcgcGFjayBidXQKKyAgIGlzIGtub3duIHRvIGJlIHByZXNlbnQgb24gdGhlIHJlY2VpdmluZyBlbmQsIHRoZSBjb2RlIGxlYXJuZWQgdG8KKyAgIHRha2UgYWR2YW50YWdlIG9mIHRoZSByZWFjaGFiaWxpdHkgYml0bWFwOyB0aGlzIGFsbG93cyB0aGUgc2VydmVyCisgICB0byBzZW5kIGEgZGVsdGEgYWdhaW5zdCBhIGJhc2UgYmV5b25kIHRoZSAiYm91bmRhcnkiIGNvbW1pdC4KKworICogc3BhdGNoIHRyYW5zZm9ybWF0aW9uIHRvIHJlcGxhY2UgYm9vbGVhbiB1c2VzIG9mICFoYXNoY21wKCkgdG8KKyAgIG5ld2x5IGludHJvZHVjZWQgb2lkZXEoKSBpcyBhZGRlZCwgYW5kIGFwcGxpZWQsIHRvIHJlZ2FpbgorICAgcGVyZm9ybWFuY2UgbG9zdCBkdWUgdG8gc3VwcG9ydCBvZiBtdWx0aXBsZSBoYXNoIGFsZ29yaXRobXMuCisKKyAqIEZpeCBhIGJ1ZyBpbiB3aGljaCB0aGUgc2FtZSBwYXRoIGNvdWxkIGJlIHJlZ2lzdGVyZWQgdW5kZXIgbXVsdGlwbGUKKyAgIHdvcmt0cmVlIGVudHJpZXMgaWYgdGhlIHBhdGggd2FzIG1pc3NpbmcgKGZvciBpbnN0YW5jZSwgd2FzIHJlbW92ZWQKKyAgIG1hbnVhbGx5KS4gIEFsc28sIGFzIGEgY29udmVuaWVuY2UsIGV4cGFuZCB0aGUgbnVtYmVyIG9mIGNhc2VzIGluCisgICB3aGljaCAtLWZvcmNlIGlzIGFwcGxpY2FibGUuCisKKyAqIFNwbGl0IERvY3VtZW50YXRpb24vY29uZmlnLnR4dCBmb3IgZWFzaWVyIG1haW50ZW5hbmNlLgorICAgKG1lcmdlIDYwMTQzNjNmMGIgbmQvY29uZmlnLXNwbGl0IGxhdGVyIHRvIG1haW50KS4KKworICogVGVzdCBoZWxwZXIgYmluYXJpZXMgY2xlYW4tdXAuCisgICAobWVyZ2UgYzlhMWY0MTYxZiBuZC90ZXN0LXRvb2wgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBWYXJpb3VzIHRlc3RzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHN3YXAgdGhlCisgICBoYXNoIGZ1bmN0aW9uIHVzZWQgZm9yIG9iamVjdCBpZGVudGlmaWNhdGlvbi4KKyAgIChtZXJnZSBhZTBjODlkNDFiIGJjL2hhc2gtaW5kZXBlbmRlbnQtdGVzdHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBVcGRhdGUgZnNjay5za2lwTGlzdCBpbXBsZW1lbnRhdGlvbiBhbmQgZG9jdW1lbnRhdGlvbi4KKyAgIChtZXJnZSAzNzFhNjU1MDc0IGFiL2ZzY2stc2tpcGxpc3QgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiBhbGlhcyB0aGF0IGV4cGFuZHMgdG8gYW5vdGhlciBhbGlhcyBoYXMgc28gZmFyIGJlZW4gZm9yYmlkZGVuLAorICAgYnV0IG5vdyBpdCBpcyBhbGxvd2VkIHRvIGNyZWF0ZSBzdWNoIGFuIGFsaWFzLgorCisgKiBWYXJpb3VzIHRlc3Qgc2NyaXB0cyBoYXZlIGJlZW4gdXBkYXRlZCBmb3Igc3R5bGUgYW5kIGFsc28gY29ycmVjdAorICAgaGFuZGxpbmcgb2YgZXhpdCBzdGF0dXMgb2YgdmFyaW91cyBjb21tYW5kcy4KKworICogImdjIC0tYXV0byIgZW5kZWQgdXAgY2FsbGluZyBleGl0KC0xKSB1cG9uIGVycm9yLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkIHRvIHVzZSBleGl0KDEpLiAgQWxzbyB0aGUgZXJyb3IgcmVwb3J0aW5nIGJlaGF2aW91ciB3aGVuCisgICBkYWVtb25pemVkIGhhcyBiZWVuIHVwZGF0ZWQgdG8gZXhpdCB3aXRoIHplcm8gc3RhdHVzIHdoZW4gc3RvcHBpbmcKKyAgIGR1ZSB0byBhIHByZXZpb3VzbHkgZGlzY292ZXJlZCBlcnJvciAod2hpY2ggaW1wbGllcyB0aGVyZSBpcyBubworICAgcG9pbnQgcnVubmluZyBnYyB0byBpbXByb3ZlIHRoZSBzaXR1YXRpb24pOyB3ZSB1c2VkIHRvIGV4aXQgd2l0aAorICAgZmFpbHVyZSBpbiBzdWNoIGEgY2FzZS4KKworICogVmFyaW91cyBjb2RlcGF0aHMgaW4gdGhlIGNvcmUtaXNoIHBhcnQgbGVhcm5lZCB0byB3b3JrIG9uIGFuCisgICBhcmJpdHJhcnkgaW4tY29yZSBpbmRleCBzdHJ1Y3R1cmUsIG5vdCBuZWNlc3NhcmlseSB0aGUgZGVmYXVsdAorICAgaW5zdGFuY2UgInRoZV9pbmRleCIuCisgICAobWVyZ2UgYjNjN2VlZjliMCBuZC90aGUtaW5kZXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlIGNsZWFuLXVwIGluIHRoZSBpbnRlcm5hbCBtYWNoaW5lcnkgdXNlZCBieSAiZ2l0IHN0YXR1cyIgYW5kCisgICAiZ2l0IGNvbW1pdCAtLWRyeS1ydW4iLgorICAgKG1lcmdlIDczYmE1ZDc4YjQgc3Mvd3Qtc3RhdHVzLWNvbW1pdHRhYmxlIGxhdGVyIHRvIG1haW50KS4KKworICogU29tZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBjb250cm9sIHRoZSBydW50aW1lIG9wdGlvbnMgb2YgR2l0CisgICB1c2VkIGR1cmluZyB0ZXN0cyBhcmUgZ2V0dGluZyByZW5hbWVkIGZvciBjb25zaXN0ZW5jeS4KKyAgIChtZXJnZSA0MjMxZDFiYTk5IGJwL3JlbmFtZS10ZXN0LWVudi12YXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIHBhaXIgb2YgbmV3IGV4dGVuc2lvbnMgdG8gdGhlIGluZGV4IGZpbGUgaGF2ZSBiZWVuIGludHJvZHVjZWQuCisgICBUaGV5IGFsbG93IHRoZSBpbmRleCBmaWxlIHRvIGJlIHJlYWQgaW4gcGFyYWxsZWwgZm9yIHBlcmZvcm1hbmNlLgorCisgKiBUaGUgb2lkc2V0IEFQSSB3YXMgYnVpbHQgb24gdG9wIG9mIHRoZSBvaWRtYXAgQVBJIHdoaWNoIGluIHR1cm4gaXMKKyAgIG9uIHRoZSBoYXNobWFwIEFQSS4gIFJlcGxhY2UgdGhlIGltcGxlbWVudGF0aW9uIHRvIGJ1aWxkIG9uIHRvcCBvZgorICAgdGhlIGtoYXNoIEFQSSBhbmQgZ2FpbiBwZXJmb3JtYW5jZS4KKworICogT3ZlciBzb21lIHRyYW5zcG9ydHMsIGZldGNoaW5nIG9iamVjdHMgd2l0aCBhbiBleGFjdCBjb21taXQgb2JqZWN0CisgICBuYW1lIGNhbiBiZSBkb25lIHdpdGhvdXQgZmlyc3Qgc2VlaW5nIHRoZSByZWYgYWR2ZXJ0aXNlbWVudHMuICBUaGUKKyAgIGNvZGUgaGFzIGJlZW4gb3B0aW1pemVkIHRvIGV4cGxvaXQgdGhpcy4KKworICogSW4gYSBwYXJ0aWFsIGNsb25lIHRoYXQgd2lsbCBsYXppbHkgYmUgaHlkcmF0ZWQgZnJvbSB0aGUKKyAgIG9yaWdpbmF0aW5nIHJlcG9zaXRvcnksIHdlIGdlbmVyYWxseSB3YW50IHRvIGF2b2lkICJkb2VzIHRoaXMKKyAgIG9iamVjdCBleGlzdCAobG9jYWxseSk/IiBvbiBvYmplY3RzIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IG9taXR0ZWQKKyAgIHdoZW4gd2UgY3JlYXRlZCB0aGUgY2xvbmUuICBUaGUgY2FjaGUtdHJlZSBjb2RlcGF0aCAod2hpY2ggaXMgdXNlZAorICAgdG8gd3JpdGUgYSB0cmVlIG9iamVjdCBvdXQgb2YgdGhlIGluZGV4KSBob3dldmVyIGluc2lzdGVkIHRoYXQgdGhlCisgICBvYmplY3QgZXhpc3RzLCBldmVuIGZvciBwYXRocyB0aGF0IGFyZSBvdXRzaWRlIG9mIHRoZSBwYXJ0aWFsCisgICBjaGVja291dCBhcmVhLiAgVGhlIGNvZGUgaGFzIGJlZW4gdXBkYXRlZCB0byBhdm9pZCBzdWNoIGEgY2hlY2suCisKKyAqIFRvIGhlbHAgZGV2ZWxvcGVycywgYW4gRWRpdG9yQ29uZmlnIGZpbGUgdGhhdCBhdHRlbXB0cyB0byBmb2xsb3cKKyAgIHRoZSBwcm9qZWN0IGNvbnZlbnRpb24gaGFzIGJlZW4gYWRkZWQuCisgICAobWVyZ2UgYjU0OGQ2OThhMCBiYy9lZGl0b3Jjb25maWcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgcmVzdWx0IG9mIGNvdmVyYWdlIHRlc3QgY2FuIGJlIGNvbWJpbmVkIHdpdGggImdpdCBibGFtZSIgdG8KKyAgIGNoZWNrIHRoZSB0ZXN0IGNvdmVyYWdlIG9mIGNvZGUgaW50cm9kdWNlZCByZWNlbnRseSB3aXRoIGEgbmV3CisgICAnY292ZXJhZ2UtZGlmZicgdG9vbCAoaW4gY29udHJpYi8pLgorICAgKG1lcmdlIDc4M2ZhZWRkNjUgZHMvY292ZXJhZ2UtZGlmZiBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIGV4cGVyaW1lbnQgdG8gZnV6eiB0ZXN0IGEgZmV3IGFyZWFzLCBob3BlZnVsbHkgd2UgY2FuIGdhaW4gbW9yZQorICAgY292ZXJhZ2UgdG8gdmFyaW91cyBhcmVhcy4KKworICogTW9yZSBjb2RlcGF0aHMgYXJlIG1vdmluZyBhd2F5IGZyb20gaGFyZGNvZGVkIGhhc2ggc2l6ZXMuCisKKyAqIFRoZSB3YXkgdGhlIFdpbmRvd3MgcG9ydCBmaWd1cmVzIG91dCB0aGUgY3VycmVudCBkaXJlY3RvcnkgaGFzIGJlZW4KKyAgIGltcHJvdmVkLgorCisgKiBUaGUgd2F5IERMTHMgYXJlIGxvYWRlZCBvbiB0aGUgV2luZG93cyBwb3J0IGhhcyBiZWVuIGltcHJvdmVkLgorCisgKiBTb21lIHRlc3RzIGhhdmUgYmVlbiByZW9yZ2FuaXplZCBhbmQgcmVuYW1lZDsgImxzIHQvIiBub3cgZ2l2ZXMgYQorICAgYmV0dGVyIG92ZXJ2aWV3IG9mIHdoYXQgaXMgdGVzdGVkIGZvciB0aGVzZSBzY3JpcHRzIHRoYW4gYmVmb3JlLgorCisgKiAiZ2l0IHJlYmFzZSIgYW5kICJnaXQgcmViYXNlIC1pIiBoYXZlIGJlZW4gcmVpbXBsZW1lbnRlZCBpbiBDLgorCisgKiBXaW5kb3dzIHBvcnQgbGVhcm5lZCB0byB1c2UgbmFuby1zZWNvbmQgcmVzb2x1dGlvbiBmaWxlIHRpbWVzdGFtcHMuCisKKyAqIFRoZSBvdmVybHkgbGFyZ2UgRG9jdW1lbnRhdGlvbi9jb25maWcudHh0IGZpbGUgaGF2ZSBiZWVuIHNwbGl0IGludG8KKyAgIG1pbGxpb24gbGl0dGxlIHBpZWNlcy4gIFRoaXMgcG90ZW50aWFsbHkgYWxsb3dzIGVhY2ggaW5kaXZpZHVhbCBwaWVjZQorICAgdG8gYmUgaW5jbHVkZWQgaW50byB0aGUgbWFudWFsIHBhZ2Ugb2YgdGhlIGNvbW1hbmQgaXQgYWZmZWN0cyBtb3JlIGVhc2lseS4KKworICogUmVwbGFjZSB0aHJlZSBzdHJpbmctbGlzdCBpbnN0YW5jZXMgdXNlZCBhcyBsb29rLXVwIHRhYmxlcyBpbiAiZ2l0CisgICBmZXRjaCIgd2l0aCBoYXNobWFwcy4KKworICogVW5pZnkgY29kZSB0byByZWFkIHRoZSBhdXRob3Itc2NyaXB0IHVzZWQgaW4gImdpdCBhbSIgYW5kIHRoZQorICAgY29tbWFuZHMgdGhhdCB1c2UgdGhlIHNlcXVlbmNlciBtYWNoaW5lcnksIGUuZy4gImdpdCByZWJhc2UgLWkiLgorCisgKiBJbiBwcmVwYXJhdGlvbiB0byB0aGUgZGF5IHdoZW4gd2UgY2FuIGRlcHJlY2F0ZSBhbmQgcmVtb3ZlIHRoZQorICAgInJlYmFzZSAtcCIsIG1ha2Ugc3VyZSB3ZSBjYW4gc2tpcCBhbmQgbGF0ZXIgcmVtb3ZlIHRlc3RzIGZvcgorICAgaXQuCisKKyAqIFRoZSBoaXN0b3J5IHRyYXZlcnNhbCB1c2VkIHRvIGltcGxlbWVudCB0aGUgdGFnLWZvbGxvd2luZyBoYXMgYmVlbgorICAgb3B0aW1pemVkIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlci4KKworICogVGhlIGhlbHBlciBmdW5jdGlvbiB0byByZWZyZXNoIHRoZSBjYWNoZWQgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUKKyAgIGluLWNvcmUgaW5kZXggaGFzIGxlYXJuZWQgdG8gcGVyZm9ybSB0aGUgbHN0YXQoKSBwYXJ0IG9mIHRoZQorICAgb3BlcmF0aW9uIGluIHBhcmFsbGVsIG9uIG11bHRpLWNvcmUgcGxhdGZvcm1zLgorCisgKiBUaGUgY29kZSB0byB0cmF2ZXJzZSBvYmplY3RzIGZvciByZWFjaGFiaWxpdHksIHVzZWQgdG8gZGVjaWRlIHdoYXQKKyAgIG9iamVjdHMgYXJlIHVucmVmZXJlbmNlZCBhbmQgZXhwZW5kYWJsZSwgaGF2ZSBiZWVuIHRhdWdodCB0byBhbHNvCisgICBjb25zaWRlciBwZXItd29ya3RyZWUgcmVmcyBvZiBvdGhlciB3b3JrdHJlZXMgYXMgc3RhcnRpbmcgcG9pbnRzIHRvCisgICBwcmV2ZW50IGRhdGEgbG9zcy4KKworICogImdpdCBhZGQiIG5lZWRzIHRvIGludGVybmFsbHkgcnVuICJkaWZmLWZpbGVzIiBlcXVpdmFsZW50LCBhbmQgdGhlCisgICBjb2RlcGF0aCBsZWFybmVkIHRoZSBzYW1lIG9wdGltaXphdGlvbiBhcyAiZGlmZi1maWxlcyIgaGFzIHRvIHJ1bgorICAgbHN0YXQoMikgaW4gcGFyYWxsZWwgdG8gZmluZCB3aGljaCBwYXRocyBoYXZlIGJlZW4gdXBkYXRlZCBpbiB0aGUKKyAgIHdvcmtpbmcgdHJlZS4KKworICogVGhlIHByb2NlZHVyZSB0byBpbnN0YWxsIGRlcGVuZGVuY2llcyBiZWZvcmUgdGVzdGluZyBhdCBUcmF2aXMgQ0kKKyAgIGlzIGdldHRpbmcgcmV2YW1wZWQgZm9yIGJvdGggc2ltcGxpY2l0eSBhbmQgZmxleGliaWxpdHksIHRha2luZworICAgYWR2YW50YWdlIG9mIHRoZSByZWNlbnQgbW92ZSB0byB0aGUgdm0tYmFzZWQgZW52aXJvbm1lbnQuCisKKyAqIFRoZSBzdXBwb3J0IGZvciBmb3JtYXQtcGF0Y2ggKGFuZCBzZW5kLWVtYWlsKSBieSB0aGUgY29tbWFuZC1saW5lCisgICBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pIGhhcyBiZWVuIHNpbXBsaWZpZWQgYSBiaXQuCisKKyAqIFRoZSByZXZpc2lvbiB3YWxrZXIgbWFjaGluZXJ5IGxlYXJuZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlCisgICBjb21taXQgZ2VuZXJhdGlvbiBudW1iZXJzIHN0b3JlZCBpbiB0aGUgY29tbWl0LWdyYXBoIGZpbGUuCisKKyAqIFRoZSBjb2RlYmFzZSBoYXMgYmVlbiBjbGVhbmVkIHVwIHRvIHJlZHVjZSAiI2lmbmRlZiBOT19QVEhSRUFEUyIuCisKKyAqIFRoZSB3YXkgLWxjdXJsIGxpYnJhcnkgZ2V0cyBsaW5rZWQgaGFzIGJlZW4gc2ltcGxpZmllZCBieSB0YWtpbmcKKyAgIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHdlIGNhbiBqdXN0IGFzayBjdXJsLWNvbmZpZyBjb21tYW5kIGhvdy4KKworICogVmFyaW91cyBmdW5jdGlvbnMgaGF2ZSBiZWVuIGF1ZGl0ZWQgZm9yICItV3VudXNlZC1wYXJhbWV0ZXIiIHdhcm5pbmdzCisgICBhbmQgYnVncyBpbiB0aGVtIGdvdCBmaXhlZC4KKworICogQSBzYW5pdHkgY2hlY2sgZm9yIHN0YXJ0LXVwIHNlcXVlbmNlIGhhcyBiZWVuIGFkZGVkIGluIHRoZSBjb25maWcKKyAgIEFQSSBjb2RlcGF0aC4KKworICogVGhlIGJ1aWxkIHByb2NlZHVyZSB0byBsaW5rIGZvciBmdXp6aW5nIHRlc3QgaGFzIGJlZW4gbWFkZQorICAgY3VzdG9taXphYmxlIHdpdGggYSBuZXcgTWFrZWZpbGUgdmFyaWFibGUuCisKKyAqIFRoZSB3YXkgImdpdCByZWJhc2UiIHBhcnNlcyBhbmQgZm9yd2FyZHMgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zCisgICBtZWFudCBmb3IgdW5kZXJseWluZyAiZ2l0IGFtIiBoYXMgYmVlbiByZXZhbXBlZCwgd2hpY2ggZml4ZWQgZm9yCisgICBvcHRpb25zIHdpdGggcGFyYW1ldGVycyB0aGF0IHdlcmUgbm90IHBhc3NlZCBjb3JyZWN0bHkuCisKKyAqIE91ciB0ZXN0aW5nIGZyYW1ld29yayB1c2VzIGEgc3BlY2lhbCBpMThuICJwb2lzb25lZCBsb2NhbGl6YXRpb24iCisgICBmZWF0dXJlIHRvIGZpbmQgbWVzc2FnZXMgdGhhdCBvdWdodCB0byBzdGF5IGNvbnN0YW50IGJ1dCBhcmUKKyAgIGluY29ycmVjdGx5IG1hcmtlZCB0byBiZSB0cmFuc2xhdGVkLiAgVGhpcyBmZWF0dXJlIGhhcyBiZWVuIG1hZGUKKyAgIGludG8gYSBydW50aW1lIG9wdGlvbiAoaXQgdXNlZCB0byBiZSBhIGNvbXBpbGUtdGltZSBvcHRpb24pLgorCisgKiAiZ2l0IHB1c2giIHVzZWQgdG8gY2hlY2sgYW1iaWd1aXRpZXMgYmV0d2VlbiBvYmplY3QtbmFtZXMgYW5kCisgICByZWZuYW1lcyB3aGlsZSBwcm9jZXNzaW5nIHRoZSBsaXN0IG9mIHJlZnMnIG9sZCBhbmQgbmV3IHZhbHVlcywKKyAgIHdoaWNoIHdhcyB1bm5lY2Vzc2FyeSAoYXMgaXQga25ldyB0aGF0IGl0IGlzIGZlZWRpbmcgcmF3IG9iamVjdAorICAgbmFtZXMpLiAgVGhpcyBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgorCisgKiBUaGUgeGN1cmxfb2ZmX3QoKSBoZWxwZXIgZnVuY3Rpb24gaXMgdXNlZCB0byBjYXN0IHNpemVfdCB0bworICAgY3VybF9vZmZfdCwgYnV0IHNvbWUgY29tcGlsZXJzIGdhdmUgd2FybmluZ3MgYWdhaW5zdCB0aGUgY29kZSB0bworICAgZW5zdXJlIHRoZSBjYXN0aW5nIGlzIGRvbmUgd2l0aG91dCB3cmFwYXJvdW5kLCB3aGVuIHNpemVfdCBpcworICAgbmFycm93ZXIgdGhhbiBjdXJsX29mZl90LiAgVGhpcyB3YXJuaW5nIGhhcyBiZWVuIHNxdWVsY2hlZC4KKworICogQ29kZSBwcmVwYXJhdGlvbiB0byByZXBsYWNlIHVsb25nIHZhcnMgd2l0aCBzaXplX3QgdmFycyB3aGVyZQorICAgYXBwcm9wcmlhdGUgY29udGludWVzLgorCisgKiBUaGUgInRlc3QgaW5zdGFsbGVkIEdpdCIgbW9kZSBvZiBvdXIgdGVzdCBzdWl0ZSBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICB3b3JrIGJldHRlci4KKworICogQSBjb2RpbmcgY29udmVudGlvbiBhcm91bmQgdGhlIENvY2NpbmVsbGUgc2VtYW50aWMgcGF0Y2hlcyB0byBoYXZlCisgICB0d28gY2xhc3NlcyB0byBlYXNlIGNvZGUgbWlncmF0aW9uIHByb2Nlc3MgaGFzIGJlZW4gcHJvcG9zZWQgYW5kCisgICBpdHMgc3VwcG9ydCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgTWFrZWZpbGUuCisKKyAqIFRoZSAiY29udGFpbmVyIiBtb2RlIG9mIFRyYXZpc0NJIGlzIGdvaW5nIGF3YXkuICBPdXIgLnRyYXZpcy55bWwKKyAgIGZpbGUgaXMgZ2V0dGluZyBwcmVwYXJlZCBmb3IgdGhlIHRyYW5zaXRpb24uCisgICAobWVyZ2UgMzJlZTM4NGJlOCBzcy90cmF2aXMtY2ktZm9yY2Utdm0tbW9kZSBsYXRlciB0byBtYWludCkuCisKKyAqIE91ciB0ZXN0IHNjcmlwdHMgY2FuIG5vdyB0YWtlIHRoZSAnLVYnIG9wdGlvbiBhcyBhIHN5bm9ueW0gZm9yIHRoZQorICAgJy0tdmVyYm9zZS1sb2cnIG9wdGlvbi4KKyAgIChtZXJnZSBhNWY1MmM2ZGFiIHNnL3Rlc3QtdmVyYm9zZS1sb2cgbGF0ZXIgdG8gbWFpbnQpLgorCisKK0ZpeGVzIHNpbmNlIHYyLjE5CistLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGludGVycHJldC10cmFpbGVycyIgYW5kIGl0cyB1bmRlcmx5aW5nIG1hY2hpbmVyeSBoYWQgYSBidWdneQorICAgY29kZSB0aGF0IGF0dGVtcHRlZCB0byBpZ25vcmUgcGF0Y2ggdGV4dCBhZnRlciBjb21taXQgbG9nIG1lc3NhZ2UsCisgICB3aGljaCB0cmlnZ2VyZWQgaW4gdmFyaW91cyBjb2RlcGF0aHMgdGhhdCB3aWxsIGFsd2F5cyBnZXQgdGhlIGxvZworICAgbWVzc2FnZSBhbG9uZSBhbmQgbmV2ZXIgZ2V0IHN1Y2ggYW4gaW5wdXQuCisgICAobWVyZ2UgNjZlODNkOWI0MSBqay90cmFpbGVyLWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogTWFsZm9ybWVkIG9yIGNyYWZ0ZWQgZGF0YSBpbiBwYWNrc3RyZWFtIGNhbiBtYWtlIG91ciBjb2RlIGF0dGVtcHQKKyAgIHRvIHJlYWQgb3Igd3JpdGUgcGFzdCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBhbmQgYWJvcnQsIGluc3RlYWQgb2YKKyAgIHJlcG9ydGluZyBhbiBlcnJvciwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgcmViYXNlIC1pIiBkaWQgbm90IGNsZWFyIHRoZSBzdGF0ZSBmaWxlcyBjb3JyZWN0bHkgd2hlbiBhIHJ1bgorICAgb2YgInNxdWFzaC9maXh1cCIgaXMgYWJvcnRlZCBhbmQgdGhlbiB0aGUgdXNlciBtYW51YWxseSBhbWVuZGVkIHRoZQorICAgY29tbWl0IGluc3RlYWQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAxMGQyZjM1NDM2IGpzL3JlYmFzZS1pLWF1dG9zcXVhc2gtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiBmc21vbml0b3IgaXMgaW4gdXNlLCBhZnRlciBvcGVyYXRpb24gb24gc3VibW9kdWxlcyB1cGRhdGVzCisgICAuZ2l0bW9kdWxlcywgd2UgbG9zdCB0cmFjayBvZiB0aGUgZmFjdCB0aGF0IHdlIGRpZCBzbyBhbmQgcmVsaWVkIG9uCisgICBzdGFsZSBmc21vbml0b3IgZGF0YS4KKyAgIChtZXJnZSA0M2YxMTgwODE0IGJwL212LXN1Ym1vZHVsZXMtd2l0aC1mc21vbml0b3IgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGaXggZm9yIGEgbG9uZy1zdGFuZGluZyBidWcgdGhhdCBsZWF2ZXMgdGhlIGluZGV4IGZpbGUgY29ycnVwdCB3aGVuCisgICBpdCBzaHJpbmtzIGR1cmluZyBhIHBhcnRpYWwgY29tbWl0LgorICAgKG1lcmdlIDZjMDAzZDZmZmIgamsvcmVvcGVuLXRlbXBmaWxlLXRydW5jYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogRnVydGhlciBmaXggZm9yIE9fQVBQRU5EIGVtdWxhdGlvbiBvbiBXaW5kb3dzCisgICAobWVyZ2UgZWVhZjdkZGFjNyBqcy9taW5ndy1vLWFwcGVuZCBsYXRlciB0byBtYWludCkuCisKKyAqIEEgY29ybmVyIGNhc2UgYnVnZml4IGluICJnaXQgcmVyZXJlIiBjb2RlLgorICAgKG1lcmdlIGFkMmJmMGQ5YjQgZW4vcmVyZXJlLW11bHRpLXN0YWdlLTEtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBhZGQgJzooYXR0cjpmb28pJyIgaXMgbm90IHN1cHBvcnRlZCBhbmQgaXMgc3VwcG9zZWQgdG8gYmUKKyAgIHJlamVjdGVkIHdoaWxlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFyZSBwYXJzZWQsIGJ1dCB3ZSBmYWlsCisgICB0byByZWplY3Qgc3VjaCBhIGNvbW1hbmQgbGluZSB1cGZyb250LgorICAgKG1lcmdlIDg0ZDkzOGI3MzIgbmQvYXR0ci1wYXRoc3BlYy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWNlbnQgdXBkYXRlIGJyb2tlIHRoZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIHdoZW4gcmVmcyAoZS5nLgorICAgdGFncykgdGhhdCBwb2ludCBhdCBvYmplY3RzIHRoYXQgYXJlIG5vdCBjb21taXQgd2VyZSBpbnZvbHZlZCwKKyAgIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IHJlYmFzZSIgZXRjLiBpbiBHaXQgMi4xOSBmYWlscyB0byBhYm9ydCB3aGVuIGdpdmVuIGFuIGVtcHR5CisgICBjb21taXQgbG9nIG1lc3NhZ2UgYXMgcmVzdWx0IG9mIGVkaXRpbmcsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBhM2VjOWVhZjM4IGVuL3NlcXVlbmNlci1lbXB0eS1lZGl0LXJlc3VsdC1hYm9ydHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0byBiYWNrZmlsbCBvYmplY3RzIGluIGxhemlseSBjbG9uZWQgcmVwb3NpdG9yeSBkaWQgbm90CisgICB3b3JrIGNvcnJlY3RseSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGU2ODMwMjAxMWMganQvbGF6eS1vYmplY3QtZmV0Y2gtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVXBkYXRlIGVycm9yIG1lc3NhZ2VzIGdpdmVuIGJ5ICJnaXQgcmVtb3RlIiBhbmQgbWFrZSB0aGVtIGNvbnNpc3RlbnQuCisgICAobWVyZ2UgNTAyNTQyNWRmZiBtcy9yZW1vdGUtZXJyb3ItbWVzc2FnZS11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHVwZGF0ZS1yZWYiIGxlYXJuZWQgdG8gbWFrZSBib3RoICItLW5vLWRlcmVmIiBhbmQgIi0tc3RkaW4iCisgICB3b3JrIGF0IHRoZSBzYW1lIHRpbWUuCisgICAobWVyZ2UgZDM0NWU5ZmJlNyBlbi91cGRhdGUtcmVmLW5vLWRlcmVmLXN0ZGluIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50bHkgYWRkZWQgInJhbmdlLWRpZmYiIGhhZCBhIGNvcm5lci1jYXNlIGJ1ZyB0byBjYXVzZSBpdAorICAgc2VnZmF1bHQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBlNDY3YTkwYzdhIHRnL3JhbmdlLWRpZmYtY29ybmVyLWNhc2UtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHJlY2VudGx5IGludHJvZHVjZWQgY29tbWl0LWdyYXBoIGF1eGlsaWFyeSBkYXRhIGlzIGluY29tcGF0aWJsZQorICAgd2l0aCBtZWNoYW5pc21zIHN1Y2ggYXMgcmVwbGFjZSAmIGdyYWZ0cyB0aGF0ICJicmVha3MiIGltbXV0YWJsZQorICAgbmF0dXJlIG9mIHRoZSBvYmplY3QgcmVmZXJlbmNlIHJlbGF0aW9uc2hpcC4gIERpc2FibGUgb3B0aW1pemF0aW9ucworICAgYmFzZWQgb24gaXRzIHVzZSAoYW5kIHVwZGF0aW5nIGV4aXN0aW5nIGNvbW1pdC1ncmFwaCkgd2hlbiB0aGVzZQorICAgaW5jb21wYXRpYmxlIGZlYXR1cmVzIGFyZSBpbiB1c2UgaW4gdGhlIHJlcG9zaXRvcnkuCisgICAobWVyZ2UgODI5YTMyMTU2OSBkcy9jb21taXQtZ3JhcGgtd2l0aC1ncmFmdHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbWFpbG1hcCBmaWxlIHVwZGF0ZS4KKyAgIChtZXJnZSAyNTVlYjAzZWRmIGpuL21haWxtYXAtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGUgaW4gImdpdCBzdGF0dXMiIHNvbWV0aW1lcyBoaXQgYW4gYXNzZXJ0aW9uIGZhaWx1cmUuICBUaGlzCisgICB3YXMgY2F1c2VkIGJ5IGEgc3RydWN0dXJlIHRoYXQgd2FzIHJldXNlZCB3aXRob3V0IGNsZWFuaW5nIHRoZSBkYXRhCisgICB1c2VkIGZvciB0aGUgZmlyc3QgcnVuLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgM2U3M2NjNjJjMCBlbi9zdGF0dXMtbXVsdGlwbGUtcmVuYW1lcy10by10aGUtc2FtZS10YXJnZXQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCAkcmVwbyAkb2JqZWN0IiBpbiBhIHBhcnRpYWwgY2xvbmUgZGlkIG5vdCBjb3JyZWN0bHkKKyAgIGZldGNoIHRoZSBhc2tlZC1mb3Igb2JqZWN0IHRoYXQgaXMgcmVmZXJlbmNlZCBieSBhbiBvYmplY3QgaW4KKyAgIHByb21pc29yIHBhY2tmaWxlLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogQSBjb3JuZXItY2FzZSBidWdmaXguCisgICAobWVyZ2UgYzVjYmIyN2NiNSBzbS9zaG93LXN1cGVycHJvamVjdC13aGlsZS1jb25mbGljdGVkIGxhdGVyIHRvIG1haW50KS4KKworICogVmFyaW91cyBmaXhlcyB0byAiZGlmZiAtLWNvbG9yLW1vdmVkLXdzIi4KKworICogQSBwYXJ0aWFsIGNsb25lIHRoYXQgaXMgY29uZmlndXJlZCB0byBsYXppbHkgZmV0Y2ggbWlzc2luZyBvYmplY3RzCisgICB3aWxsIG9uLWRlbWFuZCBpc3N1ZSBhICJnaXQgZmV0Y2giIHJlcXVlc3QgdG8gdGhlIG9yaWdpbmF0aW5nCisgICByZXBvc2l0b3J5IHRvIGZpbGwgbm90LXlldC1vYnRhaW5lZCBvYmplY3RzLiAgVGhlIHJlcXVlc3QgaGFzIGJlZW4KKyAgIG9wdGltaXplZCBmb3IgcmVxdWVzdGluZyBhIHRyZWUgb2JqZWN0IChhbmQgbm90IHRoZSBsZWFmIGJsb2IKKyAgIG9iamVjdHMgY29udGFpbmVkIGluIGl0KSBieSB0ZWxsaW5nIHRoZSBvcmlnaW5hdGluZyByZXBvc2l0b3J5IHRoYXQKKyAgIG5vIGJsb2JzIGFyZSBuZWVkZWQuCisgICAobWVyZ2UgNGM3Zjk1NjdlYSBqdC9ub24tYmxvYi1sYXp5LWZldGNoIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGVwYXRoIHRvIHN1cHBvcnQgdGhlIGV4cGVyaW1lbnRhbCBzcGxpdC1pbmRleCBtb2RlIGhhZAorICAgcmVtYWluaW5nICJyYWNpbHkgY2xlYW4iIGlzc3VlcyBmaXhlZC4KKyAgIChtZXJnZSA0YzQ5MGYzZDMyIHNnL3NwbGl0LWluZGV4LXJhY2VmaXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGxvZyAtLWdyYXBoIiBzaG93aW5nIGFuIG9jdG9wdXMgbWVyZ2Ugc29tZXRpbWVzIG1pc2NvdW50ZWQgdGhlCisgICBudW1iZXIgb2YgZGlzcGxheSBjb2x1bW5zIGl0IGlzIGNvbnN1bWluZyB0byBzaG93IHRoZSBtZXJnZSBhbmQgaXRzCisgICBwYXJlbnQgY29tbWl0cywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDA0MDA1ODM0ZWQgbnAvbG9nLWdyYXBoLW9jdG9wdXMtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByYW5nZS1kaWZmIiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIHRoZSBjb21wYXJlZCByYW5nZXMgaGFkCisgICBjaGFuZ2VzIGluIHN1Ym1vZHVsZXMgYW5kIHRoZSAiLS1zdWJtb2R1bGU9bG9nIiB3YXMgdXNlZC4KKworICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHJ1bl9jb21tYW5kKCkgQVBJIG9uIHRoZSBVTklYIHBsYXRmb3JtcyBoYWQgYQorICAgYnVnIHRoYXQgY2F1c2VkIGEgY29tbWFuZCBub3Qgb24gJFBBVEggdG8gYmUgZm91bmQgaW4gdGhlIGN1cnJlbnQKKyAgIGRpcmVjdG9yeS4KKyAgIChtZXJnZSBmNjdiOTgwNzcxIGprL3J1bi1jb21tYW5kLW5vdGRvdCBsYXRlciB0byBtYWludCkuCisKKyAqIEEgbXV0ZXggdXNlZCBpbiAiZ2l0IHBhY2stb2JqZWN0cyIgd2VyZSBub3QgY29ycmVjdGx5IGluaXRpYWxpemVkCisgICBhbmQgdGhpcyBjYXVzZWQgImdpdCByZXBhY2siIHRvIGR1bXAgY29yZSBvbiBXaW5kb3dzLgorICAgKG1lcmdlIDM0MjA0YzgxNjYganMvcGFjay1vYmplY3RzLW11dGV4LWluaXQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCAiZ2l0IGRpZmYgRDovYS9iL2MgRDovYS9iL2QiIG9uCisgICBXaW5kb3dzIHdvdWxkIHN0cmlwIGluaXRpYWwgcGFydHMgZnJvbSB0aGUgcGF0aHMgYmVjYXVzZSB0aGV5CisgICB3ZXJlIG5vdCByZWNvZ25pemVkIGFzIGFic29sdXRlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZmZkMDRlOTJlMiBqcy9kaWZmLW5vdGljZS1oYXMtZHJpdmUtcHJlZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2g9dXBkYXRlSW5zdGVhZCBjb2RlcGF0aCBraWNrZWQgaW4gZXZlbgorICAgd2hlbiB0aGUgcHVzaCBzaG91bGQgaGF2ZSBiZWVuIHJlamVjdGVkIGR1ZSB0byBvdGhlciByZWFzb25zLCBzdWNoCisgICBhcyBpdCBkb2VzIG5vdCBmYXN0LWZvcndhcmQgb3IgdGhlIHVwZGF0ZS1ob29rIHJlamVjdHMgaXQsIHdoaWNoCisgICBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYjA3MmEyNWZhZCBqYy9yZWNlaXZlLWRlbnktY3VycmVudC1icmFuY2gtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGxvZ2ljIHRvIGRldGVybWluZSB0aGUgYXJjaGl2ZSB0eXBlICJnaXQgYXJjaGl2ZSIgdXNlcyBkaWQgbm90CisgICBjb3JyZWN0bHkga2ljayBpbiBmb3IgImdpdCBhcmNoaXZlIC0tcmVtb3RlIiwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogImdpdCByZXBhY2siIGluIGEgc2hhbGxvdyBjbG9uZSBkaWQgbm90IGNvcnJlY3RseSB1cGRhdGUgdGhlCisgICBzaGFsbG93IHBvaW50cyBpbiB0aGUgcmVwb3NpdG9yeSwgbGVhZGluZyB0byBhIHJlcG9zaXRvcnkgdGhhdAorICAgZG9lcyBub3QgcGFzcyBmc2NrLgorICAgKG1lcmdlIDVkY2ZiZjU2NGMganMvc2hhbGxvdy1hbmQtZmV0Y2gtcHJ1bmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTb21lIGNvZGVwYXRocyBmYWlsZWQgdG8gZm9ybSBhIHByb3BlciBVUkwgd2hlbiAuZ2l0bW9kdWxlcyByZWNvcmQKKyAgIHRoZSBVUkwgdG8gYSBzdWJtb2R1bGUgcmVwb3NpdG9yeSBhcyByZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSBvZgorICAgc3VwZXJwcm9qZWN0LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZTBhODYyZmRhZiBzYi9zdWJtb2R1bGUtdXJsLXRvLWFic29sdXRlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCIgb3ZlciBwcm90b2NvbCB2MiBpbnRvIGEgc2hhbGxvdyByZXBvc2l0b3J5IGZhaWxlZCB0bworICAgZmV0Y2ggZnVsbCBoaXN0b3J5IGJlaGluZCBhIG5ldyB0aXAgb2YgaGlzdG9yeSB0aGF0IHdhcyBkaXZlcmdlZAorICAgYmVmb3JlIHRoZSBjdXQtb2ZmIHBvaW50IG9mIHRoZSBoaXN0b3J5IHRoYXQgd2FzIHByZXZpb3VzbHkgZmV0Y2hlZAorICAgc2hhbGxvd2x5LgorCisgKiBUaGUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gbWFjaGluZXJ5IChpbiBjb250cmliLykgaGFzIGJlZW4KKyAgIHVwZGF0ZWQgdG8gYWxsb3cgdGhlIGNvbXBsZXRpb24gc2NyaXB0IHRvIHR3ZWFrIHRoZSBsaXN0IG9mIG9wdGlvbnMKKyAgIHRoYXQgYXJlIHJlcG9ydGVkIGJ5IHRoZSBwYXJzZS1vcHRpb25zIG1hY2hpbmVyeSBjb3JyZWN0bHkuCisgICAobWVyZ2UgMjc2YjQ5ZmYzNCBuZC9jb21wbGV0aW9uLW5lZ2F0aW9uIGxhdGVyIHRvIG1haW50KS4KKworICogT3BlcmF0aW9ucyBvbiBwcm9taXNvciBvYmplY3RzIG1ha2Ugc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2Ygb25seSBhCisgICBzbWFsbCBzdWJzZXQgb2YgdGhlIGNvbW1hbmRzIHRoYXQgaW50ZXJuYWxseSB1c2UgdGhlIHJldmlzaW9ucworICAgbWFjaGluZXJ5LCBidXQgdGhlICItLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyIgb3B0aW9uIHdlcmUgdGFrZW4KKyAgIGFuZCBsZWQgdG8gbm9uc2Vuc2UgcmVzdWx0cyBieSBjb21tYW5kcyBsaWtlICJsb2ciLCB0byB3aGljaCBpdAorICAgZGlkbid0IG1ha2UgbXVjaCBzZW5zZS4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDY2OWIxZDJhYWUgbWQvZXhjbHVkZS1wcm9taXNvci1vYmplY3RzLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIEEgcmVncmVzc2lvbiBpbiBHaXQgMi4xMiBlcmEgbWFkZSAiZ2l0IGZzY2siIGZhbGwgaW50byBhbiBpbmZpbml0ZQorICAgbG9vcCB3aGlsZSBwcm9jZXNzaW5nIHRydW5jYXRlZCBsb29zZSBvYmplY3RzLgorICAgKG1lcmdlIDE4YWQxM2U1YjIgamsvZGV0ZWN0LXRydW5jYXRlZC16bGliLWlucHV0IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBscy1yZW1vdGUgJHRoZXJlIGZvbyIgd2FzIGJyb2tlbiBieSByZWNlbnQgdXBkYXRlIGZvciB0aGUKKyAgIHByb3RvY29sIHYyIGFuZCBzdG9wcGVkIHNob3dpbmcgcmVmcyB0aGF0IG1hdGNoICdmb28nIHRoYXQgYXJlIG5vdAorICAgcmVmcy97aGVhZHMsdGFnc30vZm9vLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSA2YTEzOWNkZDc0IGprL3Byb3RvLXYyLXJlZi1wcmVmaXgtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQWRkaXRpb25hbCBjb21tZW50IG9uIGEgdHJpY2t5IHBpZWNlIG9mIGNvZGUgdG8gaGVscCBkZXZlbG9wZXJzLgorICAgKG1lcmdlIDBhZmJlM2U4MDYgamsvc3RyZWFtLXBhY2stbm9uLWRlbHRhLWNsYXJpZmljYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGNvdXBsZSBvZiB0ZXN0cyB1c2VkIHRvIGxlYXZlIHRoZSByZXBvc2l0b3J5IGluIGEgc3RhdGUgdGhhdCBpcworICAgZGVsaWJlcmF0ZWx5IGNvcnJ1cHQsIHdoaWNoIGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYWE5ODRkYmU1ZSBhYi9wYWNrLXRlc3RzLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgc3VibW9kdWxlIHN1cHBvcnQgaGFzIGJlZW4gdXBkYXRlZCB0byByZWFkIGZyb20gdGhlIGJsb2IgYXQKKyAgIEhFQUQ6LmdpdG1vZHVsZXMgd2hlbiB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpcyBtaXNzaW5nIGZyb20gdGhlCisgICB3b3JraW5nIHRyZWUuCisgICAobWVyZ2UgMmIxMjU3ZTQ2MyBhby9zdWJtb2R1bGUtd28tZ2l0bW9kdWxlcy1jaGVja2VkLW91dCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmV0Y2giIHdhcyBhIGJpdCBsb29zZSBpbiBwYXJzaW5nIHJlc3BvbnNlcyBmcm9tIHRoZSBvdGhlciBzaWRlCisgICB3aGVuIHRhbGtpbmcgb3ZlciB0aGUgcHJvdG9jb2wgdjIuCisKKyAqICJnaXQgcmV2LXBhcnNlIC0tZXhjbHVkZT0qIC0tYnJhbmNoZXMgLS1icmFuY2hlcyIgIChpLmUuIGZpcnN0CisgICBzYXlpbmcgImFkZCBvbmx5IHRoaW5ncyB0aGF0IGRvIG5vdCBtYXRjaCAnKicgb3V0IG9mIGFsbCBicmFuY2hlcyIKKyAgIGFuZCB0aGVuIGFkZGluZyBhbGwgYnJhbmNoZXMsIHdpdGhvdXQgYW55IGV4Y2x1c2lvbiB0aGlzIHRpbWUpCisgICB3b3JrZWQgYXMgZXhwZWN0ZWQsIGJ1dCAiLS1leGNsdWRlPSogLS1hbGwgLS1hbGwiIGRpZCBub3Qgd29yayB0aGUKKyAgIHNhbWUgd2F5LCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSA1MjIxMDQ4MDkyIGFnL3Jldi1wYXJzZS1hbGwtZXhjbHVkZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHNlbmQtZW1haWwgLS10cmFuc2Zlci1lbmNvZGluZz0uLi4iIGluIHJlY2VudCB2ZXJzaW9ucyBvZiBHaXQKKyAgIHNvbWV0aW1lcyBwcm9kdWNlZCBhbiBlbXB0eSAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzoiIGhlYWRlciwKKyAgIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAzYzg4ZTQ2ZjFhIGFsL3NlbmQtZW1haWwtYXV0by1jdGUtZml4dXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgaW50ZXJmYWNlIGludG8gInhkaWZmIiBsaWJyYXJ5IHVzZWQgdG8gZGlzY292ZXIgdGhlIG9mZnNldCBhbmQKKyAgIHNpemUgb2YgYSBnZW5lcmF0ZWQgcGF0Y2ggaHVuayBieSBmaXJzdCBmb3JtYXR0aW5nIGl0IGludG8gdGhlCisgICB0ZXh0dWFsIGh1bmsgaGVhZGVyICJAQCAtbixtICtrLGwgQEAiIGFuZCB0aGVuIHBhcnNpbmcgdGhlIG51bWJlcnMKKyAgIG91dC4gIEEgbmV3IGludGVyZmFjZSBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIGFsbG93IGNhbGxlcnMgYSBtb3JlCisgICBkaXJlY3QgYWNjZXNzIHRvIHRoZW0uCisgICAobWVyZ2UgNWVhZGUwNzQ2ZSBqay94ZGlmZi1pbnRlcmZhY2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBQYXRoc3BlYyBtYXRjaGluZyBhZ2FpbnN0IGEgdHJlZSBvYmplY3Qgd2VyZSBidWdneSB3aGVuIG5lZ2F0aXZlCisgICBwYXRoc3BlYyBlbGVtZW50cyB3ZXJlIGludm9sdmVkLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSBiNzg0NWNlYmMwIG5kL3RyZWUtd2Fsay1wYXRoLWV4Y2x1c2lvbiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2UiIGFuZCAiZ2l0IHB1bGwiIHRoYXQgbWVyZ2VzIGludG8gYW4gdW5ib3JuIGJyYW5jaCB1c2VkCisgICB0byBjb21wbGV0ZWx5IGlnbm9yZSAiLS12ZXJpZnktc2lnbmF0dXJlcyIsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgMDFhMzFmM2JjYSBqay92ZXJpZnktc2lnLW1lcmdlLWludG8tdm9pZCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC0tYXV0b3N0YXNoIiBkaWQgbm90IGNvcnJlY3RseSByZS1hdHRhY2ggdGhlIEhFQUQgYXQgdGltZXMuCisKKyAqICJyZXYtcGFyc2UgLS1leGNsdWRlPTxwYXR0ZXJuPiAtLWJyYW5jaGVzPTxwYXR0ZXJuPiIgZXRjLiBkaWQgbm90CisgICBxdWl0ZSB3b3JrLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgOWFiOWI1ZGYwZSByYS9yZXYtcGFyc2UtZXhjbHVkZS1nbG9iIGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiBlZGl0aW5nIGEgcGF0Y2ggaW4gYSAiZ2l0IGFkZCAtaSIgc2Vzc2lvbiwgYSBodW5rIGNvdWxkIGJlCisgICBtYWRlIHRvIG5vLW9wLiAgVGhlICJnaXQgYXBwbHkiIHByb2dyYW0gdXNlZCB0byByZWplY3QgYSBwYXRjaCB3aXRoCisgICBzdWNoIGEgbm8tb3AgaHVuayB0byBjYXRjaCB1c2VyIG1pc3Rha2VzLCBidXQgaXQgaXMgbm93IHVwZGF0ZWQgdG8KKyAgIGV4cGxpY2l0bHkgYWxsb3cgYSBuby1vcCBodW5rIGluIGFuIGVkaXRlZCBwYXRjaC4KKyAgIChtZXJnZSAyMmNiMzgzNWI5IGpzL2FwcGx5LXJlY291bnQtYWxsb3ctbm9vcCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBVUkwgdG8gYW4gTVNETiBwYWdlIGluIGEgY29tbWVudCBoYXMgYmVlbiB1cGRhdGVkLgorICAgKG1lcmdlIDJlZjJhZTI5MTcganMvbWluZ3ctbXNkbi11cmwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGxzLXJlbW90ZSAtLXNvcnQ9PHRoaW5nPiIgY2FuIGZlZWQgYW4gb2JqZWN0IHRoYXQgaXMgbm90IHlldAorICAgYXZhaWxhYmxlIGludG8gdGhlIGNvbXBhcmlzb24gbWFjaGluZXJ5IGFuZCBzZWdmYXVsdCwgd2hpY2ggaGFzCisgICBiZWVuIGNvcnJlY3RlZCB0byBjaGVjayBzdWNoIGEgcmVxdWVzdCB1cGZyb250IGFuZCByZWplY3QgaXQuCisKKyAqIFdoZW4gImdpdCBidW5kbGUiIGFib3J0cyBkdWUgdG8gYW4gZW1wdHkgY29tbWl0IHJhbmdlcworICAgKGkuZS4gcmVzdWx0aW5nIGluIGFuIGVtcHR5IHBhY2spLCBpdCBsZWZ0IGEgZmlsZSBkZXNjcmlwdG9yIHRvIGFuCisgICBsb2NrZmlsZSBvcGVuLCB3aGljaCByZXN1bHRlZCBpbiBsZWZ0b3ZlciBsb2NrZmlsZSBvbiBXaW5kb3dzIHdoZXJlCisgICB5b3UgY2Fubm90IHJlbW92ZSBhIGZpbGUgd2l0aCBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4gIFRoaXMgaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAyYzhlZTFmNTNjIGprL2Nsb3NlLWR1cGVkLWZkLWJlZm9yZS11bmxvY2stZm9yLWJ1bmRsZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIC0tc3RhdD08d2lkdGg+IiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB3aWR0aAorICAgdXNlZCBieSB0aGUgZGlmZnN0YXQgKHNob3duIGluIHRoZSBjb3ZlciBsZXR0ZXIpLgorICAgKG1lcmdlIDI4NGFlYjdlNjAgbmQvZm9ybWF0LXBhdGNoLWNvdmVyLWxldHRlci1zdGF0LXdpZHRoIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHdheSAuZ2l0L2luZGV4IGFuZCAuZ2l0L3NoYXJlZGluZGV4KiBmaWxlcyB3ZXJlIGluaXRpYWxseQorICAgY3JlYXRlZCBnYXZlIHRoZXNlIGZpbGVzIGRpZmZlcmVudCBwZXJtIGJpdHMgdW50aWwgdGhleSB3ZXJlCisgICBhZGp1c3RlZCBmb3Igc2hhcmVkIHJlcG9zaXRvcnkgc2V0dGluZ3MuICBUaGlzIHdhcyBtYWRlIGNvbnNpc3RlbnQuCisgICAobWVyZ2UgYzlkNmM3ODg3MCBjYy9zaGFyZWQtaW5kZXgtcGVybWJpdHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtLXN0YXQiIHRvIHRyYW5zcGxhbnQgYSBwaWVjZSBvZiBoaXN0b3J5IG9udG8gYSB0b3RhbGx5CisgICB1bnJlbGF0ZWQgaGlzdG9yeSB3ZXJlIG5vdCB3b3JraW5nIGJlZm9yZSBhbmQgc2lsZW50bHkgc2hvd2VkIHdyb25nCisgICByZXN1bHQuICBXaXRoIHRoZSByZWNlbnQgcmVpbXBsZW1lbnRhdGlvbiBpbiBDLCBpdCBzdGFydGVkIHRvIGluc3RlYWQKKyAgIGRpZSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UsIGFzIHRoZSBvcmlnaW5hbCBsb2dpYyB3YXMgbm90IHByZXBhcmVkCisgICB0byBjb3BlIHdpdGggdGhpcyBjYXNlLiAgVGhpcyBoYXMgbm93IGJlZW4gZml4ZWQuCisKKyAqIFRoZSBhZHZpY2UgbWVzc2FnZSB0byB0ZWxsIHRoZSB1c2VyIHRvIG1pZ3JhdGUgYW4gZXhpc3RpbmcgZ3JhZnQKKyAgIGZpbGUgdG8gdGhlIHJlcGxhY2Ugc3lzdGVtIHdoZW4gYSBncmFmdCBmaWxlIHdhcyByZWFkIHdhcyBzaG93bgorICAgZXZlbiB3aGVuICJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIgY29tbWFuZCwgd2hpY2ggaXMgdGhlCisgICB3YXkgdGhlIG1lc3NhZ2Ugc3VnZ2VzdHMgdG8gdXNlLCB3YXMgcnVubmluZywgd2hpY2ggbWFkZSBsaXR0bGUKKyAgIHNlbnNlLgorICAgKG1lcmdlIDg4MjFlOTBhMDkgYWIvcmVwbGFjZS1ncmFmdC13aXRoLXJlcGxhY2UtYWR2aWNlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIC0tcmF3IiBsb3N0IGVsbGlwc2VzIHRvIGFkanVzdCB0aGUgb3V0cHV0IGNvbHVtbnMgZm9yCisgICBzb21lIHRpbWUgbm93LCBidXQgdGhlIGRvY3VtZW50YXRpb24gc3RpbGwgc2hvd2VkIHRoZW0uCisKKyAqIENvZGUgY2xlYW51cCwgZG9jZml4LCBidWlsZCBmaXgsIGV0Yy4KKyAgIChtZXJnZSA5NmE3NTAxYWFkIHRzL2RvYy1idWlsZC1tYW5wYWdlLXhzbC1xdWlldGx5IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiOWIwN2VmZGIyIHRnL2NvbmZsaWN0LW1hcmtlci1zaXplIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmYTBhZWVhNzcwIHNnL2RvYy10cmFjZS1hcHBlbmRzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkNjQzMjRjYjYwIHRiL3ZvaWQtY2hlY2stYXR0ciBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYzNiOWJjOTRiOSBlbi9kb3VibGUtc2VtaWNvbG9uLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNzkzMzYxMTZmNSBzZy90MzcwMS10aWdodGVuLXRyYWNlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4MDFmYTYzYTkwIGprL2Rldi1idWlsZC1mb3JtYXQtc2VjdXJpdHkgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDA1OTdkZDYyYmEgc2Ivc3RyaW5nLWxpc3QtcmVtb3ZlLXVudXNlZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZGIyZDM2ZmFkOCBidy9wcm90b2NvbC12MiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDU2ZDdjZDNhOSBzZy9zcGxpdC1pbmRleC10ZXN0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3YjYwNTdjODUyIHRxL3JlZnMtaW50ZXJuYWwtY29tbWVudC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDI5ZThkYzUwYWQgdGcvdDU1NTEtd2l0aC1jdXJsLTcuNjEuMSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTVmNmJjZTJjOSBmZS9kb2MtdXBkYXRlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNzk4N2QyMjMyZCBqay9jaGVjay1ldmVyeXRoaW5nLWNvbm5lY3RlZC1pcy1sb25nLWdvbmUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRiYTNjOWJlNDcgZHovY3JlZGVudGlhbC1kb2MtdXJsLW1hdGNoaW5nLXJ1bGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0YzM5OTQ0MmY3IG1hL2NvbW1pdC1ncmFwaC1kb2NzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmYzA1MDNiMDRlIG1hL3QxNDAwLXVuZGVidWctdGVzdCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTU2YjUzNTUzYSBuZC9wYWNrb2JqZWN0c2hvb2stZG9jLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYzU2MTcwYTBjNCBtYS9tYWlsaW5nLWxpc3QtYWRkcmVzcy1pbi1naXQtaGVscCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNmU4ZmM3MGZjZSBycy9zZXF1ZW5jZXItb2lkc2V0LWluc2VydC1hdm9pZHMtZHVwcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYWQwYjhmOTU3NSBtdy9kb2MtdHlwb2ZpeGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkOWYwNzlhZDFhIGpjL2hvdy10by1kb2N1bWVudC1hcGkgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGIxNDkyYmYzMTUgbWEvdDcwMDUtYmFzaC13b3JrYXJvdW5kIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhYzFmOThhMGRmIGR1L3Jldi1wYXJzZS1pcy1wbHVtYmluZyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgY2E4ZWQ0NDNhNSBtbS9kb2Mtbm8tZGFzaGVkLWdpdCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgY2UzNjZhODE0NCBkdS9nZXQtdGFyLWNvbW1pdC1pZC1pcy1wbHVtYmluZyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjEwMThmZTllMCBkdS9jaGVycnktaXMtcGx1bWJpbmcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGM3ZTVmZTc5Yjkgc2Ivc3RyYnVmLWgtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4ZDIwMDgxOTZiIHRxL2JyYW5jaC1jcmVhdGUtd28tYnJhbmNoLWdldCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMmUzYzg5NGY0YiB0cS9icmFuY2gtc3R5bGUtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjNWQ4NDRhZjljIHNnL2RvYy1zaG93LWJyYW5jaC10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwODFkOTE2MThiIGFoL2RvYy11cGRhdGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiODRjNzgzODgyIGpjL2NvY2NpLXByZWluY3IgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDVlNDk1ZjgxMjIgdWsvbWVyZ2Utc3VidHJlZS1kb2MtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhYWFhODgxODIyIGprL3VwbG9hZHBhY2stcGFja29iamVjdHNob29rLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzA2MzQ3NzQ0NSB0Yi9jaGFyLW1heS1iZS11bnNpZ25lZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOGM2NGJjOTQyMCBzZy90ZXN0LXJlYmFzZS1lZGl0b3ItZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3MTU3MWNkN2Q2IG1hL3NlcXVlbmNlci1kby1yZXNldC1zYW5lci1sb29wLXRlcm1pbmF0aW9uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5YTRjYjg3ODFlIGNiL25vdGVzLWZyZWVpbmctYWx3YXlzLW51bGwtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzMDA2ZjVlZTE2IG1hL3Jlc2V0LWRvYy1yZW5kZXJpbmctZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0YzJlYjA2NDE5IHNnL2RhZW1vbi10ZXN0LXNpZ25hbC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQyNzUyNWU1MTkgc3MvbXN2Yy1zdHJjYXNlY21wIGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2JhODg4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjEudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0dpdCB2Mi4yMC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGlzIHByaW1hcmlseSB0byBmaXggYnJvd24tcGFwZXItYmFnIGJyZWFrYWdlcyBpbiB0aGUKKzIuMjAuMCByZWxlYXNlLgorCitGaXhlcyBzaW5jZSB2Mi4yMAorLS0tLS0tLS0tLS0tLS0tLS0KKworICogQSBmZXcgbmV3bHkgYWRkZWQgdGVzdHMgd2VyZSBub3QgcG9ydGFibGUgYW5kIGNhdXNlZCBtaW5vcml0eQorICAgcGxhdGZvcm1zIHRvIHJlcG9ydCBmYWxzZSBicmVha2FnZXMsIHdoaWNoIGhhdmUgYmVlbiBmaXhlZC4KKworICogUG9ydGFiaWxpdHkgZml4IGZvciBhIHJlY2VudCB1cGRhdGUgdG8gcGFyc2Utb3B0aW9ucyBBUEkuCisKKyAqICJnaXQgaGVscCAtYSIgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbiBhbiBvdmVybHkgbG9uZyBhbGlhcyBpcworICAgZGVmaW5lZCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBBIHJlY2VudCB1cGRhdGUgYWNjaWRlbnRhbGx5IHNxdWVsY2hlZCBhbiBlcnJvciBtZXNzYWdlIHdoZW4gdGhlCisgICBydW5fY29tbWFuZCBBUEkgZmFpbGVkIHRvIHJ1biBhIG1pc3NpbmcgY29tbWFuZCwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTY4MGNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjIudHh0CkBAIC0wLDAgKzEsMTggQEAKK0dpdCB2Mi4yMC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNiwgdjIuMTUuNAorYW5kIGluIHYyLjE3LjMsIGFkZHJlc3NpbmcgdGhlIHNlY3VyaXR5IGlzc3VlcyBDVkUtMjAxOS0xMzQ4LAorQ1ZFLTIwMTktMTM0OSwgQ1ZFLTIwMTktMTM1MCwgQ1ZFLTIwMTktMTM1MSwgQ1ZFLTIwMTktMTM1MiwKK0NWRS0yMDE5LTEzNTMsIENWRS0yMDE5LTEzNTQsIGFuZCBDVkUtMjAxOS0xMzg3OyBzZWUgdGhlIHJlbGVhc2Ugbm90ZXMKK2ZvciB0aG9zZSB2ZXJzaW9ucyBmb3IgZGV0YWlscy4KKworVGhlIGNoYW5nZSB0byBkaXNhbGxvdyBgc3VibW9kdWxlLjxuYW1lPi51cGRhdGU9IWNvbW1hbmRgIGVudHJpZXMgaW4KK2AuZ2l0bW9kdWxlc2Agd2hpY2ggd2FzIGludHJvZHVjZWQgdjIuMTUuNCAoYW5kIGZvciB3aGljaCB2Mi4xNy4zCithZGRlZCBleHBsaWNpdCBmc2NrIGNoZWNrcykgZml4ZXMgdGhlIHZ1bG5lcmFiaWxpdHkgaW4gdjIuMjAueCB3aGVyZSBhCityZWN1cnNpdmUgY2xvbmUgZm9sbG93ZWQgYnkgYSBzdWJtb2R1bGUgdXBkYXRlIGNvdWxkIGV4ZWN1dGUgY29kZQorY29udGFpbmVkIHdpdGhpbiB0aGUgcmVwb3NpdG9yeSB3aXRob3V0IHRoZSB1c2VyIGV4cGxpY2l0bHkgaGF2aW5nCithc2tlZCBmb3IgdGhhdCAoQ1ZFLTIwMTktMTk2MDQpLgorCitDcmVkaXQgZm9yIGZpbmRpbmcgdGhpcyB2dWxuZXJhYmlsaXR5IGdvZXMgdG8gSm9lcm4gU2NobmVld2Vpc3osCitjcmVkaXQgZm9yIHRoZSBmaXhlcyBnb2VzIHRvIEpvbmF0aGFuIE5pZWRlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmVjY2QxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjMudHh0CkBAIC0wLDAgKzEsNSBAQAorR2l0IHYyLjIwLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHRoZSBzZWN1cml0eSBmaXggdGhhdCBhcHBlYXJzIGluIHYyLjE3LjQ7IHNlZQordGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoYXQgdmVyc2lvbiBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTllMjRlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjQudHh0CkBAIC0wLDAgKzEsNSBAQAorR2l0IHYyLjIwLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHRoZSBzZWN1cml0eSBmaXggdGhhdCBhcHBlYXJzIGluIHYyLjE3LjU7IHNlZQordGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoYXQgdmVyc2lvbiBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMS4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMS4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTQ5ZGVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIxLjAudHh0CkBAIC0wLDAgKzEsNDUxIEBACitHaXQgMi4yMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIENvbXBhdGliaWxpdHkgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogSGlzdG9yaWNhbGx5LCB0aGUgIi1tIiAobWFpbmxpbmUpIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIGZvciAiZ2l0CisgICBjaGVycnktcGljayIgYW5kICJnaXQgcmV2ZXJ0IiB3aGVuIHdvcmtpbmcgd2l0aCBhIG1lcmdlIGNvbW1pdC4KKyAgIFRoaXMgdmVyc2lvbiBvZiBHaXQgbm8gbG9uZ2VyIHdhcm5zIG9yIGVycm9ycyBvdXQgd2hlbiB3b3JraW5nIHdpdGgKKyAgIGEgc2luZ2xlLXBhcmVudCBjb21taXQsIGFzIGxvbmcgYXMgdGhlIGFyZ3VtZW50IHRvIHRoZSAiLW0iIG9wdGlvbgorICAgaXMgMSAoaS5lLiBpdCBoYXMgb25seSBvbmUgcGFyZW50LCBhbmQgdGhlIHJlcXVlc3QgaXMgdG8gcGljayBvcgorICAgcmV2ZXJ0IHJlbGF0aXZlIHRvIHRoYXQgZmlyc3QgcGFyZW50KS4gIFNjcmlwdHMgdGhhdCByZWxpZWQgb24gdGhlCisgICBiZWhhdmlvdXIgbWF5IGdldCBicm9rZW4gd2l0aCB0aGlzIGNoYW5nZS4KKworCitVcGRhdGVzIHNpbmNlIHYyLjIwCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBUaGUgImh0dHAudmVyc2lvbiIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZCB3aXRoIHJlY2VudAorICAgZW5vdWdoIHZlcnNpb25zIG9mIGNVUkwgbGlicmFyeSB0byBmb3JjZSB0aGUgdmVyc2lvbiBvZiBIVFRQIHVzZWQKKyAgIHRvIHRhbGsgd2hlbiBmZXRjaGluZyBhbmQgcHVzaGluZy4KKworICogU21hbGwgZml4ZXMgYW5kIGZlYXR1cmVzIGZvciBmYXN0LWV4cG9ydCBhbmQgZmFzdC1pbXBvcnQsIG1vc3RseSBvbgorICAgdGhlIGZhc3QtZXhwb3J0IHNpZGUgaGFzIGJlZW4gbWFkZS4KKworICogImdpdCBwdXNoICR0aGVyZSAkc3JjOiRkc3QiIHJlamVjdHMgd2hlbiAkZHN0IGlzIG5vdCBhIGZ1bGx5CisgICBxdWFsaWZpZWQgcmVmbmFtZSBhbmQgaXQgaXMgbm90IGNsZWFyIHdoYXQgdGhlIGVuZCB1c2VyIG1lYW50LiAgVGhlCisgICBjb2RlcGF0aCBoYXMgYmVlbiB0YXVnaHQgdG8gZ2l2ZSBhIGNsZWFyZXIgZXJyb3IgbWVzc2FnZSwgYW5kIGFsc28KKyAgIGd1ZXNzIHdoZXJlIHRoZSBwdXNoIHNob3VsZCBnbyBieSB0YWtpbmcgdGhlIHR5cGUgb2YgdGhlIHB1c2hlZAorICAgb2JqZWN0IGludG8gYWNjb3VudCAoZS5nLiBhIHRhZyBvYmplY3Qgd291bGQgd2FudCB0byBnbyB1bmRlcgorICAgcmVmcy90YWdzLykuCisKKyAqICJnaXQgY2hlY2tvdXQgWzx0cmVlLWlzaD5dIHBhdGguLi4iIGxlYXJuZWQgdG8gcmVwb3J0IHRoZSBudW1iZXIgb2YKKyAgIHBhdGhzIHRoYXQgaGF2ZSBiZWVuIGNoZWNrZWQgb3V0IG9mIHRoZSBpbmRleCBvciB0aGUgdHJlZS1pc2gsCisgICB3aGljaCBnaXZlcyBpdCB0aGUgc2FtZSBkZWdyZWUgb2Ygbm9pc3ktbmVzcyBhcyB0aGUgY2FzZSBpbiB3aGljaAorICAgdGhlIGNvbW1hbmQgY2hlY2tzIG91dCBhIGJyYW5jaC4gICJnaXQgY2hlY2tvdXQgLW0gPHBhdGhzcGVjPiIgdG8KKyAgIHVuZG8gY29uZmxpY3QgcmVzb2x1dGlvbiBnaXZlcyBhIHNpbWlsYXIgbWVzc2FnZS4KKworICogImdpdCBxdWlsdGltcG9ydCIgbGVhcm5lZCAiLS1rZWVwLW5vbi1wYXRjaCIgb3B0aW9uLgorCisgKiAiZ2l0IHdvcmt0cmVlIHJlbW92ZSIgYW5kICJnaXQgd29ya3RyZWUgbW92ZSIgcmVmdXNlZCB0byB3b3JrIHdoZW4KKyAgIHRoZXJlIGlzIGEgc3VibW9kdWxlIGludm9sdmVkLiAgVGhpcyBoYXMgYmVlbiBsb29zZW5lZCB0byBpZ25vcmUKKyAgIHVuaW5pdGlhbGl6ZWQgc3VibW9kdWxlcy4KKworICogImdpdCBjaGVycnktcGljayAtbTEiIHdhcyBmb3JiaWRkZW4gd2hlbiBwaWNraW5nIGEgbm9uLW1lcmdlCisgICBjb21taXQsIGV2ZW4gdGhvdWdoIHRoZXJlIF9pc18gcGFyZW50IG51bWJlciAxIGZvciBzdWNoIGEgY29tbWl0LgorICAgVGhpcyB3YXMgZG9uZSB0byBhdm9pZCBtaXN0YWtlcyBiYWNrIHdoZW4gImNoZXJyeS1waWNrIiB3YXMgYWJvdXQKKyAgIHBpY2tpbmcgYSBzaW5nbGUgY29tbWl0LCBidXQgaXMgbm8gbG9uZ2VyIHVzZWZ1bCB3aXRoICJjaGVycnktcGljayIKKyAgIHRoYXQgY2FuIHBpY2sgYSByYW5nZSBvZiBjb21taXRzLiAgTm93IHRoZSAiLW0kbnVtIiBvcHRpb24gaXMKKyAgIGFsbG93ZWQgd2hlbiBwaWNraW5nIGFueSBjb21taXQsIGFzIGxvbmcgYXMgJG51bSBuYW1lcyBhbiBleGlzdGluZworICAgcGFyZW50IG9mIHRoZSBjb21taXQuCisKKyAqIFVwZGF0ZSAiZ2l0IG11bHRpbWFpbCIgZnJvbSB0aGUgdXBzdHJlYW0uCisKKyAqICJnaXQgcDQiIHVwZGF0ZS4KKworICogVGhlICItLWZvcm1hdD08cGxhY2Vob2xkZXI+IiBvcHRpb24gb2YgZm9yLWVhY2gtcmVmLCBicmFuY2ggYW5kIHRhZworICAgbGVhcm5lZCB0byBzaG93IGEgZmV3IG1vcmUgdHJhaXRzIG9mIG9iamVjdHMgdGhhdCBjYW4gYmUgbGVhcm5lZCBieQorICAgdGhlIG9iamVjdF9pbmZvIEFQSS4KKworICogImdpdCByZWJhc2UgLWkiIGxlYXJuZWQgdG8gcmUtZXhlY3V0ZSBhIGNvbW1hbmQgZ2l2ZW4gd2l0aCAnZXhlYycKKyAgIHRvIHJ1biBhZnRlciBpdCBmYWlsZWQgdGhlIGxhc3QgdGltZS4KKworICogImdpdCBkaWZmIC0tY29sb3ItbW92ZWQtd3MiIHVwZGF0ZXMuCisKKyAqIEN1c3RvbSB1c2VyZm9ybWF0ICJsb2cgLS1mb3JtYXQiIGxlYXJuZWQgJVMgYXRvbSB0aGF0IHN0YW5kcyBmb3IKKyAgIHRoZSB0aXAgdGhlIHRyYXZlcnNhbCByZWFjaGVkIHRoZSBjb21taXQgZnJvbSwgaS5lLiAtLXNvdXJjZS4KKworICogImdpdCBpbnN0YXdlYiIgbGVhcm5lZCB0byBkcml2ZSBodHRwLnNlcnZlciB0aGF0IGNvbWVzIHdpdGgKKyAgICJiYXR0ZXJpZXMgaW5jbHVkZWQiIFB5dGhvbiBpbnN0YWxsYXRpb24gKGJvdGggUHl0aG9uMiAmIDMpLgorCisgKiBBIG5ldyBlbmNvZGluZyBVVEYtMTZMRS1CT00gaGFzIGJlZW4gaW52ZW50ZWQgdG8gZm9yY2UgZW5jb2RpbmcgdG8KKyAgIFVURi0xNiB3aXRoIEJPTSBpbiBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIsIHdoaWNoIGNhbm5vdCBiZSBkaXJlY3RseQorICAgZ2VuZXJhdGVkIGJ5IHVzaW5nIGljb252LgorCisgKiBBIG5ldyBkYXRlIGZvcm1hdCAiLS1kYXRlPWh1bWFuIiB0aGF0IG1vcnBocyBpdHMgb3V0cHV0IGRlcGVuZGluZworICAgb24gaG93IGZhciB0aGUgdGltZSBpcyBmcm9tIHRoZSBjdXJyZW50IHRpbWUgaGFzIGJlZW4gaW50cm9kdWNlZC4KKyAgICItLWRhdGU9YXV0bzpodW1hbiIgY2FuIGJlIHVzZWQgdG8gdXNlIHRoaXMgbmV3IGZvcm1hdCAob3IgYW55CisgICBleGlzdGluZyBmb3JtYXQpIHdoZW4gdGhlIG91dHB1dCBpcyBnb2luZyB0byB0aGUgcGFnZXIgb3IgdG8gdGhlCisgICB0ZXJtaW5hbCwgYW5kIG90aGVyd2lzZSB0aGUgZGVmYXVsdCBmb3JtYXQuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogQ29kZSBjbGVhbi11cCB3aXRoIG9wdGltaXphdGlvbiBmb3IgdGhlIGNvZGVwYXRoIHRoYXQgY2hlY2tzCisgICAobm9uLSlleGlzdGVuY2Ugb2YgbG9vc2Ugb2JqZWN0cy4KKworICogTW9yZSBjb2RlcGF0aHMgaGF2ZSBiZWNvbWUgYXdhcmUgb2Ygd29ya2luZyB3aXRoIGluLWNvcmUgcmVwb3NpdG9yeQorICAgaW5zdGFuY2VzIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgInRoZV9yZXBvc2l0b3J5Ii4KKworICogVGhlICJzdHJuY2F0KCkiIGZ1bmN0aW9uIGlzIG5vdyBhbW9uZyB0aGUgYmFubmVkIGZ1bmN0aW9ucy4KKworICogUG9ydGFiaWxpdHkgdXBkYXRlcyBmb3IgdGhlIEhQRSBOb25TdG9wIHBsYXRmb3JtLgorCisgKiBFYXJsaWVyIHdlIGFkZGVkICItV2Zvcm1hdC1zZWN1cml0eSIgdG8gZGV2ZWxvcGVyIGJ1aWxkcywgYXNzdW1pbmcKKyAgIHRoYXQgIi1XYWxsIiAod2hpY2ggaW5jbHVkZXMgIi1XZm9ybWF0IiB3aGljaCBpbiB0dXJuIGlzIHJlcXVpcmVkCisgICB0byB1c2UgIi1XZm9ybWF0LXNlY3VyaXR5IikgaXMgYWx3YXlzIGluIGVmZmVjdC4gIFRoaXMgaXMgbm90IHRydWUKKyAgIHdoZW4gY29uZmlnLm1hay5hdXRvZ2VuIGlzIGluIHVzZSwgdW5mb3J0dW5hdGVseS4gIFRoaXMgaGFzIGJlZW4KKyAgIGZpeGVkIGJ5IHVuY29uZGl0aW9uYWxseSBhZGRpbmcgIi1XYWxsIiB0byBkZXZlbG9wZXIgYnVpbGRzLgorCisgKiBUaGUgbG9vc2Ugb2JqZWN0IGNhY2hlIHVzZWQgdG8gb3B0aW1pemUgZXhpc3RlbmNlIGxvb2stdXAgaGFzIGJlZW4KKyAgIHVwZGF0ZWQuCisKKyAqIEZsYWt5IHRlc3RzIGNhbiBub3cgYmUgcmVwZWF0ZWRseSBydW4gdW5kZXIgbG9hZCB3aXRoIHRoZQorICAgIi0tc3RyZXNzIiBvcHRpb24uCisKKyAqIERvY3VtZW50YXRpb24vTWFrZWZpbGUgaXMgZ2V0dGluZyBwcmVwYXJlZCBmb3IgbWFucGFnZQorICAgbG9jYWxpemF0aW9uLgorCisgKiAiZ2l0IGZldGNoLXBhY2siIG5vdyBjYW4gdGFsayB0aGUgdmVyc2lvbiAyIHByb3RvY29sLgorCisgKiBzaGEtMjU2IGhhc2ggaGFzIGJlZW4gYWRkZWQgYW5kIHBsdW1iZWQgdGhyb3VnaCB0aGUgY29kZSB0byBhbGxvdworICAgYnVpbGRpbmcgR2l0IHdpdGggdGhlICJOZXdIYXNoIi4KKworICogRGVidWdnaW5nIGhlbHAgZm9yIGh0dHAgdHJhbnNwb3J0LgorCisgKiAiZ2l0IGZldGNoIC0tZGVlcGVuPTxtb3JlPiIgaGFzIGJlZW4gY29ycmVjdGVkIHRvIHdvcmsgb3ZlciB2MgorICAgcHJvdG9jb2wuCisKKyAqIFRoZSBjb2RlIHRvIHdhbGsgdHJlZSBvYmplY3RzIGhhcyBiZWVuIHRhdWdodCB0aGF0IHdlIG1heSBiZQorICAgd29ya2luZyB3aXRoIG9iamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgY29tcHV0ZWQgd2l0aCBTSEEtMS4KKworICogVGhlIGluLWNvcmUgcmVwb3NpdG9yeSBpbnN0YW5jZXMgYXJlIHBhc3NlZCB0aHJvdWdoIG1vcmUgY29kZXBhdGhzLgorCisgKiBVcGRhdGUgdGhlIHByb3RvY29sIG1lc3NhZ2Ugc3BlY2lmaWNhdGlvbiB0byBhbGxvdyBvbmx5IHRoZSBsaW1pdGVkCisgICB1c2Ugb2Ygc2NhbGVkIHF1YW50aXRpZXMuICBUaGlzIGlzIHRvIGVuc3VyZSBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eQorICAgaXNzdWVzIHdpbGwgbm90IGdldCBvdXQgb2YgaGFuZC4KKworICogTWljcm8tb3B0aW1pemUgdGhlIGNvZGUgdGhhdCBwcmVwYXJlcyBjb21taXQgb2JqZWN0cyB0byBiZSB3YWxrZWQKKyAgIGJ5ICJnaXQgcmV2LWxpc3QiIHdoZW4gdGhlIGNvbW1pdC1ncmFwaCBpcyBhdmFpbGFibGUuCisKKyAqICJnaXQgZmV0Y2giIGFuZCAiZ2l0IHVwbG9hZC1wYWNrIiBsZWFybmVkIHRvIHNlbmQgYWxsIGV4Y2hhbmdlcyBvdmVyCisgICB0aGUgc2lkZWJhbmQgY2hhbm5lbCB3aGlsZSB0YWxraW5nIHRoZSB2MiBwcm90b2NvbC4KKworICogVGhlIGNvZGVwYXRoIHRvIHdyaXRlIG91dCBjb21taXQtZ3JhcGggaGFzIGJlZW4gb3B0aW1pemVkIGJ5CisgICBmb2xsb3dpbmcgdGhlIHVzdWFsIHBhdHRlcm4gb2YgdmlzaXRpbmcgb2JqZWN0cyBpbiBpbi1wYWNrIG9yZGVyLgorCisgKiBUaGUgY29kZXBhdGggdG8gc2hvdyBwcm9ncmVzcyBtZXRlciB3aGlsZSB3cml0aW5nIG91dCBjb21taXQtZ3JhcGgKKyAgIGZpbGUgaGFzIGJlZW4gaW1wcm92ZWQuCisKKyAqIENvY2NpIHJ1bGVzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIGVuY291cmFnZSB1c2Ugb2Ygc3RyYnVmX2FkZGJ1ZigpLgorCisgKiAiZ2l0IHJlYmFzZSAtLW1lcmdlIiBoYXMgYmVlbiByZWltcGxlbWVudGVkIGJ5IHJldXNpbmcgdGhlIGludGVybmFsCisgICBtYWNoaW5lcnkgdXNlZCBmb3IgImdpdCByZWJhc2UgLWkiLgorCisgKiBNb3JlIGNvZGUgaW4gImdpdCBiaXNlY3QiIGhhcyBiZWVuIHJld3JpdHRlbiBpbiBDLgorCisgKiBJbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggImdpdC1yZWJhc2UtLWFtIiBzY3JpcHRsZXQgdG8gdXNlIHRoZSAiYW0iCisgICBiYWNrZW5kLCB0aGUgYnVpbHQtaW4gdmVyc2lvbiBvZiAiZ2l0IHJlYmFzZSIgbGVhcm5lZCB0byBkcml2ZSB0aGUKKyAgICJhbSIgYmFja2VuZCBkaXJlY3RseS4KKworICogVGhlIGFzc3VtcHRpb24gdG8gd29yayBvbiB0aGUgc2luZ2xlICJpbi1jb3JlIGluZGV4IiBpbnN0YW5jZSBoYXMKKyAgIGJlZW4gcmVkdWNlZCBmcm9tIHRoZSBsaWJyYXJ5LWlzaCBwYXJ0IG9mIHRoZSBjb2RlYmFzZS4KKworICogVGhlIHRlc3QgbGludCBsZWFybmVkIHRvIGNhdGNoIG5vbi1wb3J0YWJsZSAic2VkIiBvcHRpb25zLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgbGVhcm5lZCBhbm90aGVyIGFsZ29yaXRobSB0byBjb21wdXRlIHRoZSBzZXQgb2YKKyAgIG9iamVjdHMgdG8gc2VuZCwgdGhhdCB0cmFkZXMgdGhlIHJlc3VsdGluZyBwYWNrZmlsZSBvZmYgdG8gc2F2ZQorICAgdHJhdmVyc2FsIGNvc3QgdG8gZmF2b3Igc21hbGwgcHVzaGVzLgorCisgKiBUaGUgdHJhdmlzIENJIHNjcmlwdHMgaGF2ZSBiZWVuIGNvcnJlY3RlZCB0byBidWlsZCBHaXQgd2l0aCB0aGUKKyAgIGNvbXBpbGVyKHMpIG9mIG91ciBjaG9pY2UuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgbGVhcm5lZCB0byBhYm9ydCBlYXJseSB3aGVuIGNvcmUud29ya3RyZWUKKyAgIGZvciB0aGUgc3VibW9kdWxlIGlzIG5vdCBzZXQgY29ycmVjdGx5IHRvIHByZXZlbnQgc3ByZWFkaW5nIGRhbWFnZS4KKworICogVGVzdCBzdWl0ZSBoYXMgYmVlbiBhZGp1c3RlZCB0byBydW4gb24gQXp1cmUgUGlwZWxpbmUuCisKKyAqIFJ1bm5pbmcgIkRvY3VtZW50YXRpb24vZG9jLWRpZmYgeCIgZnJvbSBhbnl3aGVyZSBvdGhlciB0aGFuIHRoZQorICAgdG9wLWxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUgZGlkIG5vdCBzaG93IHRoZSB1c2FnZSBzdHJpbmcKKyAgIGNvcnJlY3RseSwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIFVzZSBvZiB0aGUgc3BhcnNlIHRvb2wgZ290IGVhc2llciB0byBjdXN0b21pemUgZnJvbSB0aGUgY29tbWFuZAorICAgbGluZSB0byBoZWxwIGRldmVsb3BlcnMuCisKKyAqIEEgbmV3IHRhcmdldCAiY292ZXJhZ2UtcHJvdmUiIHRvIHJ1biB0aGUgY292ZXJhZ2UgdGVzdCB1bmRlcgorICAgInByb3ZlIiBoYXMgYmVlbiBhZGRlZC4KKworICogQSBmbGFrZXkgInA0IiB0ZXN0IGhhcyBiZWVuIHJlbW92ZWQuCisKKyAqIFRoZSBjb2RlIGFuZCB0ZXN0cyBhc3N1bWUgdGhhdCB0aGUgc3lzdGVtIHN1cHBsaWVkIGljb252KCkgd291bGQKKyAgIGFsd2F5cyB1c2UgQk9NIGluIGl0cyBvdXRwdXQgd2hlbiBhc2tlZCB0byBlbmNvZGUgdG8gVVRGLTE2IChvcgorICAgVVRGLTMyKSwgYnV0IGFwcGFyZW50bHkgc29tZSBpbXBsZW1lbnRhdGlvbnMgb3V0cHV0IGJpZy1lbmRpYW4KKyAgIHdpdGhvdXQgQk9NLiAgQSBjb21waWxlLXRpbWUga25vYiBoYXMgYmVlbiBhZGRlZCB0byBoZWxwIHN1Y2gKKyAgIHN5c3RlbXMgKGUuZy4gTm9uU3RvcCkgdG8gYWRkIEJPTSB0byB0aGUgb3V0cHV0IHRvIGluY3JlYXNlCisgICBwb3J0YWJpbGl0eS4KKworCitGaXhlcyBzaW5jZSB2Mi4yMAorLS0tLS0tLS0tLS0tLS0tLS0KKworICogVXBkYXRlcyBmb3IgY29ybmVyIGNhc2VzIGluIG1lcmdlLXJlY3Vyc2l2ZS4KKyAgIChtZXJnZSBjYzRjYjA5MDJjIGVuL21lcmdlLXBhdGgtY29sbGlzaW9uIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjaGVja291dCBmcm90eiIgKHdpdGhvdXQgYW55IGRvdWJsZS1kYXNoKSBhdm9pZHMgYW1iaWd1aXR5IGJ5CisgICBtYWtpbmcgc3VyZSAnZnJvdHonIGNhbm5vdCBiZSBpbnRlcnByZXRlZCBhcyBhIHJldmlzaW9uIGFuZCBhcyBhCisgICBwYXRoIGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIHNhZmV0eSBoYXMgYmVlbiB1cGRhdGVkIHRvIGNoZWNrIGFsc28KKyAgIGEgdW5pcXVlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ2Zyb3R6JyBpbiBhIHJlbW90ZSwgd2hlbiBkd2ltbWluZworICAgdG8gY3JlYXRlIGEgbG9jYWwgYnJhbmNoICdmcm90eicgb3V0IG9mIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaAorICAgJ2Zyb3R6JyBmcm9tIGEgcmVtb3RlLgorICAgKG1lcmdlIGJlNDkwOGYxMDMgbmQvY2hlY2tvdXQtZHdpbS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWZzcGVjcyBjb25maWd1cmVkIHdpdGggImdpdCAtYyB2YXI9dmFsIGNsb25lIiBkaWQgbm90IHByb3BhZ2F0ZQorICAgdG8gdGhlIHJlc3VsdGluZyByZXBvc2l0b3J5LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgN2VhZTRhM2FjNCBzZy9jbG9uZS1pbml0aWFsLWZldGNoLWNvbmZpZ3VyYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIHByb3Blcmx5IGNvbmZpZ3VyZWQgdXNlcm5hbWUvZW1haWwgaXMgcmVxdWlyZWQgdW5kZXIKKyAgIHVzZXIudXNlQ29uZmlnT25seSBpbiBvcmRlciB0byBjcmVhdGUgY29tbWl0czsgbm93ICJnaXQgc3Rhc2giCisgICAoZXZlbiB0aG91Z2ggaXQgY3JlYXRlcyBjb21taXQgb2JqZWN0cyB0byByZXByZXNlbnQgc3Rhc2ggZW50cmllcykKKyAgIGNvbW1hbmQgaXMgZXhlbXB0IGZyb20gdGhlIHJlcXVpcmVtZW50LgorICAgKG1lcmdlIDNiYzIxMTFmYzIgc2Qvc3Rhc2gtd28tdXNlci1uYW1lIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGh0dHAtYmFja2VuZCBDR0kgcHJvY2VzcyBkaWQgbm90IGNvcnJlY3RseSBjbGVhbiB1cCB0aGUgY2hpbGQKKyAgIHByb2Nlc3NlcyBpdCBzcGF3bnMgdG8gcnVuIHVwbG9hZC1wYWNrIGV0Yy4gd2hlbiBpdCBkaWVzIGl0c2VsZiwKKyAgIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAwMjgxOGE5OGQ3IG1rL2h0dHAtYmFja2VuZC1raWxsLWNoaWxkcmVuLWJlZm9yZS1leGl0IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXYtbGlzdCAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyIgaGFkIHRvIHRha2UgYW4gb2JqZWN0CisgICB0aGF0IGRvZXMgbm90IGV4aXN0IGxvY2FsbHkgKGFuZCBpcyBsYXppbHkgYXZhaWxhYmxlKSBmcm9tIHRoZQorICAgY29tbWFuZCBsaW5lIHdpdGhvdXQgYmFyZmluZywgYnV0IHRoZSBjb2RlIGRlcmVmZXJlbmNlZCBOVUxMLgorICAgKG1lcmdlIDRjZjY3ODY5YjIgbWQvbGlzdC1sYXp5LW9iamVjdHMtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHRyYXZlcnNhbCBvdmVyIHRyZWUgb2JqZWN0cyBoYXMgbGVhcm5lZCB0byBob25vcgorICAgIjooYXR0cjpsYWJlbCkiIHBhdGhzcGVjIG1hdGNoLCB3aGljaCBoYXMgYmVlbiBpbXBsZW1lbnRlZCBvbmx5IGZvcgorICAgZW51bWVyYXRpbmcgcGF0aHMgb24gdGhlIGZpbGVzeXN0ZW0uCisgICAobWVyZ2UgNWEwYjk3YjM0YyBuZC9hdHRyLXBhdGhzcGVjLWluLXRyZWUtd2FsayBsYXRlciB0byBtYWludCkuCisKKyAqIEJTRCBwb3J0IHVwZGF0ZXMuCisgICAobWVyZ2UgNGUzZWNiZDQzOSBjYi9vcGVuYnNkLWFsbG93cy1yZWFkaW5nLWRpcmVjdG9yeSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYjZiZGMyYTBmNSBjYi90NTAwNC1lbXB0eS10YXItYXJjaGl2ZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDgyY2JjOGNkZTIgY2IvdGVzdC1saW50LWNwLWEgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBMaW5lcyB0aGF0IGJlZ2luIHdpdGggYSBjZXJ0YWluIGtleXdvcmQgdGhhdCBjb21lIG92ZXIgdGhlIHdpcmUsIGFzCisgICB3ZWxsIGFzIGxpbmVzIHRoYXQgY29uc2lzdCBvbmx5IG9mIG9uZSBvZiB0aGVzZSBrZXl3b3Jkcywgb3VnaHQgdG8KKyAgIGJlIHBhaW50ZWQgaW4gY29sb3IgZm9yIGVhc2llciBleWViYWxsaW5nLCBidXQgdGhlIGxhdHRlciB3YXMKKyAgIGJyb2tlbiBldmVyIHNpbmNlIHRoZSBmZWF0dXJlIHdhcyBpbnRyb2R1Y2VkIGluIDIuMTksIHdoaWNoIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgMWY2NzI5MDQ1MCBobi9oaWdobGlnaHQtc2lkZWJhbmQta2V5d29yZHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGxvZyAtRzxyZWdleD4iIGxvb2tlZCBmb3IgYSBodW5rIGluIHRoZSAiZ2l0IGxvZyAtcCIgcGF0Y2gKKyAgIG91dHB1dCB0aGF0IGNvbnRhaW5lZCBhIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uCisgICBPcHRpbWl6ZSB0aGlzIGNvZGUgdG8gaWdub3JlIGJpbmFyeSBmaWxlcywgd2hpY2ggYnkgZGVmYXVsdCB3aWxsCisgICBub3Qgc2hvdyBhbnkgaHVuayB0aGF0IHdvdWxkIG1hdGNoIGFueSBwYXR0ZXJuICh1bmxlc3MgdGV4dGNvbnYgb3IKKyAgIHRoZSAtLXRleHQgb3B0aW9uIGlzIGluIGVmZmVjdCwgdGhhdCBpcykuCisgICAobWVyZ2UgZTBlN2NiODA4MCB0Yi9sb2ctRy1iaW5hcnkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIG91Z2h0IHRvIHVzZSBhIHNpbmdsZSBqb2IgdW5sZXNzIGFza2VkLCBidXQKKyAgIGJ5IG1pc3Rha2UgdXNlZCBtdWx0aXBsZSBqb2JzLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSBlM2E5ZDFhY2E5IHNiL3N1Ym1vZHVsZS1mZXRjaGpvYnMtZGVmYXVsdC10by1vbmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN0cmlwc3BhY2UiIHNob3VsZCBiZSB1c2FibGUgb3V0c2lkZSBhIGdpdCByZXBvc2l0b3J5LCBidXQKKyAgIHVuZGVyIHRoZSAiLXMiIG9yICItYyIgbW9kZSwgaXQgZGlkbid0LgorICAgKG1lcmdlIDk1N2RhNzU4MDIgam4vc3RyaXBzcGFjZS13by1yZXBvc2l0b3J5IGxhdGVyIHRvIG1haW50KS4KKworICogU29tZSBvZiB0aGUgZG9jdW1lbnRhdGlvbiBwYWdlcyBmb3JtYXR0ZWQgaW5jb3JyZWN0bHkgd2l0aAorICAgQXNjaWlkb2N0b3IsIHdoaWNoIGhhdmUgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSBiNjJlYjFkMmY0IG1hL2FzY2lpZG9jdG9yIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvcmUud29ya3RyZWUgc2V0dGluZyBpbiBhIHN1Ym1vZHVsZSByZXBvc2l0b3J5IHNob3VsZCBub3QgYmUKKyAgIHBvaW50aW5nIGF0IGEgZGlyZWN0b3J5IHdoZW4gdGhlIHN1Ym1vZHVsZSBsb3NlcyBpdHMgd29ya2luZyB0cmVlCisgICAoZS5nLiBnZXR0aW5nIGRlaW5pdCdlZCksIGJ1dCB0aGUgY29kZSBkaWQgbm90IHByb3Blcmx5IG1haW50YWluCisgICB0aGlzIGludmFyaWFudC4KKworICogV2l0aCB6c2gsICJnaXQgY21kIHBhdGg8VEFCPiIgd2FzIGNvbXBsZXRlZCB0byAiZ2l0IGNtZCBwYXRoIG5hbWUiCisgICB3aGVuIHRoZSBjb21wbGV0ZWQgcGF0aCBoYXMgYSBzcGVjaWFsIGNoYXJhY3RlciBsaWtlIFNQIGluIGl0LAorICAgd2l0aG91dCBhbnkgYXR0ZW1wdCB0byBrZWVwICJwYXRoIG5hbWUiIGEgc2luZ2xlIGZpbGVuYW1lLiAgVGhpcworICAgaGFzIGJlZW4gZml4ZWQgdG8gY29tcGxldGUgaXQgdG8gImdpdCBjbWQgcGF0aFwgbmFtZSIganVzdCBsaWtlCisgICBCYXNoIGNvbXBsZXRpb24gZG9lcy4KKworICogVGhlIHRlc3Qgc3VpdGUgdHJpZWQgdG8gc2VlIGlmIGl0IGlzIHJ1biB1bmRlciBiYXNoLCBidXQgdGhlIGNoZWNrCisgICBpdHNlbGYgZmFpbGVkIHVuZGVyIHNvbWUgb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIHNoZWxsIChub3RhYmx5CisgICB1bmRlciBOZXRCU0QpLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNTRlYTcyZjA5YyBzZy90ZXN0LWJhc2gtdmVyc2lvbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGdjIiBhbmQgImdpdCByZXBhY2siIGRpZCBub3QgY2xvc2UgdGhlIG9wZW4gcGFja2ZpbGVzIHRoYXQKKyAgIHRoZXkgZm91bmQgdW5uZWVkZWQgYmVmb3JlIHJlbW92aW5nIHRoZW0sIHdoaWNoIGRpZG4ndCB3b3JrIG9uIGEKKyAgIHBsYXRmb3JtIGluY2FwYWJsZSBvZiByZW1vdmluZyBhbiBvcGVuIGZpbGUuICBUaGlzIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNWJkZWNlMGQ3MCBqcy9nYy1yZXBhY2stY2xvc2UtYmVmb3JlLXJlbW92ZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIHRvIGRyaXZlIEdJVF9FWFRFUk5BTF9ESUZGIGNvbW1hbmQgcmVsaWVkIG9uIHRoZSBzdHJpbmcKKyAgIHJldHVybmVkIGZyb20gZ2V0ZW52KCkgdG8gYmUgbm9uLXZvbGF0aWxlLCB3aGljaCBpcyBub3QgdHJ1ZSwgdGhhdAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDY3NzZhODRkYWUga2cvZXh0ZXJuYWwtZGlmZi1zYXZlLWVudiBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZXJlIHdlcmUgbWFueSBwbGFjZXMgdGhlIGNvZGUgcmVsaWVkIG9uIHRoZSBzdHJpbmcgcmV0dXJuZWQgZnJvbQorICAgZ2V0ZW52KCkgdG8gYmUgbm9uLXZvbGF0aWxlLCB3aGljaCBpcyBub3QgdHJ1ZSwgdGhhdCBoYXZlIGJlZW4KKyAgIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAwZGEwZTkyNjhiIGprL3NhdmUtZ2V0ZW52LXJlc3VsdCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSB2MiB1cGxvYWQtcGFjayBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiBmYWlsZWQgdG8gaG9ub3IKKyAgIGhpZGRlbi1yZWYgY29uZmlndXJhdGlvbiwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGUyMGI0MTkyYTMgamsvcHJvdG8tdjItaGlkZGVuLXJlZnMtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIgbWF5IG5vdCBmZXRjaCB0aGUgbmVjZXNzYXJ5IGNvbW1pdAorICAgdGhhdCBpcyBib3VuZCB0byB0aGUgc3VwZXJwcm9qZWN0LCB3aGljaCBpcyBnZXR0aW5nIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBiZTc2YzIxMjgyIHNiL3N1Ym1vZHVsZS1yZWN1cnNpdmUtZmV0Y2gtZ2V0cy10aGUtdGlwIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UiIGludGVybmFsbHkgcnVucyAiY2hlY2tvdXQiIHRvIHN3aXRjaCBiZXR3ZWVuIGJyYW5jaGVzLAorICAgYW5kIHRoZSBjb21tYW5kIHVzZWQgdG8gY2FsbCB0aGUgcG9zdC1jaGVja291dCBob29rLCBidXQgdGhlCisgICByZWltcGxlbWVudGF0aW9uIHN0b3BwZWQgZG9pbmcgc28sIHdoaWNoIGlzIGdldHRpbmcgZml4ZWQuCisKKyAqICJnaXQgYWRkIC1lIiBnb3QgY29uZnVzZWQgd2hlbiB0aGUgY2hhbmdlIGl0IHdhbnRzIHRvIGxldCB0aGUgdXNlcgorICAgZWRpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIHByZXZpb3VzIGNoYW5nZSB0aGF0IHdhcyBsZWZ0IG92ZXIgaW4gYQorICAgdGVtcG9yYXJ5IGZpbGUuCisgICAobWVyZ2UgZmE2ZjIyNWUwMSBqcy9hZGQtZS1jbGVhci1wYXRjaC1iZWZvcmUtc3RhdGluZyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcDQiIGZhaWxlZCB0byB1cGRhdGUgYSBzaGVsdmVkIGNoYW5nZSB3aGVuIHRoZXJlIHdlcmUgbW92ZWQKKyAgIGZpbGVzLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgN2ExMDk0NmFiOSBsZC9naXQtcDQtc2hlbHZlLXVwZGF0ZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZXBhdGggdG8gcmVhZCBmcm9tIHRoZSBjb21taXQtZ3JhcGggZmlsZSBhdHRlbXB0ZWQgdG8gcmVhZAorICAgcGFzdCB0aGUgZW5kIG9mIGl0IHdoZW4gdGhlIGZpbGUncyB0YWJsZS1vZi1jb250ZW50cyB3YXMgY29ycnVwdC4KKworICogVGhlIGNvbXBhdC9vYnN0YWNrIGNvZGUgaGFkIGNhc3RzIHRoYXQgLVdjYXN0LWZ1bmN0aW9uLXR5cGUKKyAgIGNvbXBpbGF0aW9uIG9wdGlvbiBmb3VuZCBxdWVzdGlvbmFibGUuCisgICAobWVyZ2UgNzY0NDczZDI1NyBzZy9vYnN0YWNrLWNhc3QtZnVuY3Rpb24tdHlwZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiBvYnZpb3VzIHR5cG8gaW4gYW4gYXNzZXJ0aW9uIGVycm9yIG1lc3NhZ2UgaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgM2MyN2UyZTA1OSBjYy90ZXN0LXJlZi1zdG9yZS10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKworICogSW4gR2l0IGZvciBXaW5kb3dzLCAiZ2l0IGNsb25lIFxcc2VydmVyXHNoYXJlXHBhdGgiIGV0Yy4gdGhhdCB1c2VzCisgICBVTkMgcGF0aHMgZnJvbSBjb21tYW5kIGxpbmUgaGFkIGJhZCBpbnRlcmFjdGlvbiB3aXRoIGl0cyBzaGVsbAorICAgZW11bGF0aW9uLgorCisgKiAiZ2l0IGFkZCAtLWlnbm9yZS1lcnJvcnMiIGRpZCBub3Qgd29yayBhcyBhZHZlcnRpc2VkIGFuZCBpbnN0ZWFkCisgICB3b3JrZWQgYXMgYW4gdW5pbnRlbmRlZCBzeW5vbnltIGZvciAiZ2l0IGFkZCAtLXJlbm9ybWFsaXplIiwgd2hpY2gKKyAgIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGUyYzJhMzc1NDUgamsvYWRkLWlnbm9yZS1lcnJvcnMtYml0LWFzc2lnbm1lbnQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogT24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0sIHdlIGZhaWxlZCB0byBjb21wYXJlIHRoZSBwYXJ0IG9mCisgICB0aGUgcGF0aCB0aGF0IGlzIGFib3ZlIHRoZSB3b3JrdHJlZSBkaXJlY3RvcnkgaW4gYW4gYWJzb2x1dGUKKyAgIHBhdGhuYW1lLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEFza2luZyAiZ2l0IGNoZWNrLWF0dHIiIGFib3V0IGEgbWFjcm8gKGUuZy4gImJpbmFyeSIpIG9uIGEgc3BlY2lmaWMKKyAgIHBhdGggZGlkIG5vdCB3b3JrIGNvcnJlY3RseSwgZXZlbiB0aG91Z2ggImdpdCBjaGVjay1hdHRyIC1hIiBsaXN0ZWQKKyAgIHN1Y2ggYSBtYWNybyBjb3JyZWN0bHkuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA3Yjk1ODQ5YmU0IGprL2F0dHItbWFjcm8tZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwYWNrLW9iamVjdHMiIGluY29ycmVjdGx5IHVzZWQgdW5pbml0aWFsaXplZCBtdXRleCwgd2hpY2ggaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBlZGI2NzNjZjEwIHBoL3BhY2stb2JqZWN0cy1tdXRleC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNoZWNrb3V0IC1iIDxuZXc+IFtIRUFEXSIgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBmcm9tIHRoZQorICAgY3VycmVudCBjb21taXQgYW5kIGNoZWNrIGl0IG91dCBvdWdodCB0byBiZSBhIG5vLW9wIGluIHRoZSBpbmRleAorICAgYW5kIHRoZSB3b3JraW5nIHRyZWUgaW4gbm9ybWFsIGNhc2VzLCBidXQgdGhlcmUgYXJlIGNvcm5lciBjYXNlcworICAgdGhhdCBkbyByZXF1aXJlIHVwZGF0ZXMgdG8gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlLiAgUnVubmluZworICAgaXQgaW1tZWRpYXRlbHkgYWZ0ZXIgImdpdCBjbG9uZSAtLW5vLWNoZWNrb3V0IiBpcyBvbmUgb2YgdGhlc2UKKyAgIGNhc2VzIHRoYXQgYW4gZWFybGllciBvcHRpbWl6YXRpb24ga2lja2VkIGluIGluY29ycmVjdGx5LCB3aGljaCBoYXMKKyAgIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgODQyNGJmZDQ1YiBicC9jaGVja291dC1uZXctYnJhbmNoLW9wdGltIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIC0tY29sb3ItbW92ZWQgLS1jYyAtLXN0YXQgLXAiIGRpZCBub3Qgd29yayB3ZWxsIGR1ZSB0bworICAgZnVubnkgaW50ZXJhY3Rpb24gYmV0d2VlbiBhIGJ1ZyBpbiBjb2xvci1tb3ZlZCBhbmQgdGhlIHJlc3QsIHdoaWNoCisgICBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSBkYWMwM2I1NTE4IGprL2RpZmYtY2Mtc3RhdC1maXhlcyBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gR0lUX1NFUVVFTkNFX0VESVRPUiBpcyBzZXQsIHRoZSBjb21tYW5kIHdhcyBpbmNvcnJlY3RseQorICAgc3RhcnRlZCB3aGVuIG1vZGVzIG9mICJnaXQgcmViYXNlIiB0aGF0IGltcGxpY2l0bHkgdXNlcyB0aGUKKyAgIG1hY2hpbmVyeSBmb3IgdGhlIGludGVyYWN0aXZlIHJlYmFzZSBhcmUgcnVuLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorICAgKG1lcmdlIDg5MWQ0YTAzMTMgcHcvbm8tZWRpdG9yLWluLXJlYmFzZS1pLWltcGxpY2l0IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvbW1pdC1ncmFwaCBmYWNpbGl0eSBkaWQgbm90IHdvcmsgd2hlbiBpbi1jb3JlIG9iamVjdHMgdGhhdAorICAgYXJlIHByb21vdGVkIGZyb20gdW5rbm93biB0eXBlIHRvIGNvbW1pdCAoZS5nLiBhIGNvbW1pdCB0aGF0IGlzCisgICBhY2Nlc3NlZCB2aWEgYSB0YWcgdGhhdCByZWZlcnMgdG8gaXQpIHdlcmUgaW52b2x2ZWQsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNDQ2OGQ0NDM1YyBzZy9vYmplY3QtYXMtdHlwZS1jb21taXQtZ3JhcGgtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCIgb3V0cHV0IGNsZWFudXAuCisgICAobWVyZ2UgZGM0MGIyNGRmNCBuZC9mZXRjaC1jb21wYWN0LXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2F0LWZpbGUgLS1iYXRjaCIgcmVwb3J0ZWQgYSBkYW5nbGluZyBzeW1ib2xpYyBsaW5rIGJ5CisgICBtaXN0YWtlLCB3aGVuIGl0IHdhbnRlZCB0byByZXBvcnQgdGhhdCBhIGdpdmVuIG5hbWUgaXMgYW1iaWd1b3VzLgorCisgKiBEb2N1bWVudGF0aW9uIGFyb3VuZCBjb3JlLmNybGYgaGFzIGJlZW4gdXBkYXRlZC4KKyAgIChtZXJnZSBjOTQ0NmYwNTA0IGprL2F1dG9jcmxmLW92ZXJyaWRlcy1lb2wtZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGRvY3VtZW50YXRpb24gb2YgImdpdCBjb21taXQtdHJlZSIgc2FpZCB0aGF0IHRoZSBjb21tYW5kCisgICB1bmRlcnN0YW5kcyAiLS1ncGctc2lnbiIgaW4gYWRkaXRpb24gdG8gIi1TIiwgYnV0IHRoZSBjb21tYW5kIGxpbmUKKyAgIHBhcnNlciBkaWQgbm90IGtub3cgYWJvdXQgdGhlIGxvbmdoYW5kLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgcmViYXNlIC14ICRjbWQiIGRpZCBub3QgcmVqZWN0IG11bHRpLWxpbmUgY29tbWFuZCwgZXZlbiB0aG91Z2gKKyAgIHRoZSBjb21tYW5kIGlzIGluY2FwYWJsZSBvZiBoYW5kbGluZyBzdWNoIGEgY29tbWFuZC4gIEl0IG5vdyBpcworICAgcmVqZWN0ZWQgdXBmcm9udC4KKyAgIChtZXJnZSBjNzYyYWFkYTFhIHB3L3JlYmFzZS14LXNhbml0eS1jaGVjayBsYXRlciB0byBtYWludCkuCisKKyAqIE91dHB1dCBmcm9tICJnaXQgaGVscCIgd2FzIG5vdCBjb3JyZWN0bHkgYWxpZ25lZCwgd2hpY2ggaGFzIGJlZW4KKyAgIGZpeGVkLgorICAgKG1lcmdlIDYxOTVhNzZkYTQgbmQvaGVscC1hbGlnbi1jb21tYW5kLWRlc2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgImdpdCBzdWJtb2R1bGUgc3VtbWFyeSIgc3ViY29tbWFuZCBzaG93ZWQgc2hvcnRlbmVkIGNvbW1pdAorICAgb2JqZWN0IG5hbWVzIGJ5IG1lY2hhbmljYWxseSB0cnVuY2F0aW5nIHRoZW0gYXQgNy1oZXhkaWdpdCwgd2hpY2gKKyAgIGhhcyBiZWVuIGltcHJvdmVkIHRvIGxldCAicmV2LXBhcnNlIC0tc2hvcnQiIHNjYWxlIHRoZSBsZW5ndGggb2YKKyAgIHRoZSBhYmJyZXZpYXRpb24gd2l0aCB0aGUgc2l6ZSBvZiB0aGUgcmVwb3NpdG9yeS4KKyAgIChtZXJnZSAwNTg2YTQzOGY2IHNoL3N1Ym1vZHVsZS1zdW1tYXJ5LWFiYnJldi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgd2F5IHRoZSBPU1ggYnVpbGQgam9icyB1cGRhdGVzIGl0cyBidWlsZCBlbnZpcm9ubWVudCB1c2VkIHRoZQorICAgIi0tcXVpZXQiIG9wdGlvbiB0byAiYnJldyB1cGRhdGUiIGNvbW1hbmQsIGJ1dCBpdCB3YXNuJ3QgYWxsIHRoYXQKKyAgIHF1aWV0IHRvIGJlIHVzZWZ1bC4gIFRoZSB1c2Ugb2YgdGhlIG9wdGlvbiBoYXMgYmVlbiByZXBsYWNlZCB3aXRoCisgICBhbiBleHBsaWNpdCByZWRpcmVjdGlvbiB0byB0aGUgL2Rldi9udWxsICh3aGljaCBpbmNpZGVudGFsbHkgd291bGQKKyAgIGhhdmUgd29ya2VkIGFyb3VuZCBhIGJyZWFrYWdlIGJ5IHJlY2VudCB1cGRhdGVzIHRvIGhvbWVicmV3LCB3aGljaAorICAgaGFzIGZpeGVkIGl0c2VsZiBhbHJlYWR5KS4KKyAgIChtZXJnZSBhMWNjYWVkZDYyIHNnL3RyYXZpcy1vc3gtYnJldy1icmVha2FnZS13b3JrYXJvdW5kIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCAtLXdvcmstdHJlZT0kdGhlcmUgLS1naXQtZGlyPSRoZXJlIGRlc2NyaWJlIC0tZGlydHkiIGRpZCBub3QKKyAgIHdvcmsgY29ycmVjdGx5IGFzIGl0IGRpZCBub3QgcGF5IGF0dGVudGlvbiB0byB0aGUgbG9jYXRpb24gb2YgdGhlCisgICB3b3JrdHJlZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIgYnkgbWlzdGFrZSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBjODAxMTcwYjBjIHNzL2Rlc2NyaWJlLWRpcnR5LWluLXRoZS1yaWdodC1kaXJlY3RvcnkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZldGNoIiBvdmVyIHByb3RvY29sIHYyIHRoYXQgbmVlZHMgdG8gbWFrZSBhIHNlY29uZCBjb25uZWN0aW9uCisgICB0byBiYWNrZmlsbCB0YWdzIGRpZCBub3QgY2xlYXIgYSB2YXJpYWJsZSB0aGF0IGhvbGRzIHNoYWxsb3cKKyAgIHJlcG9zaXRvcnkgaW5mb3JtYXRpb24gY29ycmVjdGx5LCBsZWFkaW5nIHRvIGFuIGFjY2VzcyBvZiBmcmVlZAorICAgcGllY2Ugb2YgbWVtb3J5LgorCisgKiBTb21lIGVycm9ycyBmcm9tIHRoZSBvdGhlciBzaWRlIGNvbWluZyBvdmVyIHNtYXJ0IEhUVFAgdHJhbnNwb3J0CisgICB3ZXJlIG5vdCBub3RpY2VkLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIENvZGUgY2xlYW51cCwgZG9jZml4LCBidWlsZCBmaXgsIGV0Yy4KKyAgIChtZXJnZSA4OWJhOWE3OWFlIGhiL3QwMDYxLWRvdC1pbi1wYXRoLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDE3M2U3OTllYSBzYi9kaWZmLWNvbG9yLW1vdmVkLWNvbmZpZy1vcHRpb24tZml4dXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGE4ZjVhNTkwNjcgZW4vZGlyZWN0b3J5LXJlbmFtZXMtbm90aGFua3MtZG9jLXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZWMzNmM0MmE2MyBuZC9pbmRlbnRhdGlvbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGYxMTZlZTIxY2QgZG8vZ2l0d2ViLXN0cmljdC1leHBvcnQtY29uZi1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDExMmVhNDI2NjMgZmQvZ2l0d2ViLXNuYXBzaG90LWNvbmYtZG9jLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMWNhZGFkNmY2NSB0Yi91c2UtY29tbW9uLXdpbjMyLXBhdGhmdW5jcy1vbi1jeWd3aW4gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDU3ZTlkY2FhNjUga20vcmViYXNlLWRvYy10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiOGI0Y2IyN2U2IGRzL2djLWRvYy10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzYjMzNTc2MjZlIG5kL3N0eWxlLW9wZW5pbmctYnJhY2UgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGI0NTgzZDU1OTUgZXMvZG9jLXdvcmt0cmVlLWd1ZXNzcmVtb3RlLWNvbmZpZyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgY2NlOTljZDhjNiBkcy9jb21taXQtZ3JhcGgtYXNzZXJ0LW1pc3NpbmctcGFyZW50cyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDY1MDYxNDk4MiBjeS9jb21wbGV0aW9uLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDY4ODE5MjVlZjUgcnMvc2hhMS1maWxlLWNsb3NlLW1hcHBlZC1maWxlLW9uLWVycm9yIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiZDhkNmYwZGVmIGVuL3Nob3ctcmVmLWRvYy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE3NDcxMjVlMmMgY2MvcGFydGlhbC1jbG9uZS1kb2MtdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTAxMzc4NzUzZCBjYy9mZXRjaC1lcnJvci1tZXNzYWdlLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTRlOGMxMTIxNSBqay9yZW1vdGUtaW5zdGVhZG9mLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQ2MDk2MTVmNDgganMvdGVzdC1naXQtaW5zdGFsbGVkIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiYTE3MDUxN2JlIGphL2RvYy1zdHlsZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDg2ZmIxYzRlNzcga20vaW5pdC1kb2MtdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNWNmZDRhOWQxMCBuZC9jb21taXQtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5ZmNlMTlhNDMxIGFiL2RpZmYtdHJlZS1kb2MtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyZTI4NWU3ODAzIHR6L2dwZy10ZXN0LWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTQyN2RlOTYwYiBrbC9wcmV0dHktZG9jLW1hcmt1cC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDM4MTVmNjRiMGQganMvbWluZ3ctaG9zdC1jcHUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDVmZTgxNDM4YjUgcmovc2VxdWVuY2VyLXNpZ24tb2ZmLWhlYWRlci1zdGF0aWMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE4YTRmNmJlNmIgbmQvZmlsZW5vLW1heS1iZS1tYWNybyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOTllOWFiNTRhYiBrZC90MDAyOC1vY3RhbC1kZWwtaXMtMzc3LW5vdC03NzcgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIxLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIxLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTk0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjEuMS50eHQKQEAgLTAsMCArMSwxMiBAQAorR2l0IHYyLjIxLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHVwIHRoZSBmaXhlcyB0aGF0IGFwcGVhciBpbiB2Mi4xNC42LCB2Mi4xNS40LAordjIuMTcuMyBhbmQgaW4gdjIuMjAuMiwgYWRkcmVzc2luZyB0aGUgc2VjdXJpdHkgaXNzdWVzIENWRS0yMDE5LTEzNDgsCitDVkUtMjAxOS0xMzQ5LCBDVkUtMjAxOS0xMzUwLCBDVkUtMjAxOS0xMzUxLCBDVkUtMjAxOS0xMzUyLAorQ1ZFLTIwMTktMTM1MywgQ1ZFLTIwMTktMTM1NCwgQ1ZFLTIwMTktMTM4NywgYW5kIENWRS0yMDE5LTE5NjA0Oworc2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aG9zZSB2ZXJzaW9ucyBmb3IgZGV0YWlscy4KKworQWRkaXRpb25hbGx5LCB0aGlzIHZlcnNpb24gYWxzbyBpbmNsdWRlcyBhIGNvdXBsZSBvZiBmaXhlcyBmb3IgdGhlCitXaW5kb3dzLXNwZWNpZmljIHF1b3Rpbmcgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB3aGVuIEdpdCBleGVjdXRlcworYSBVbml4IHNoZWxsIG9uIFdpbmRvd3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjEuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjEuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBmYjgzYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMS4yLnR4dApAQCAtMCwwICsxLDUgQEAKK0dpdCB2Mi4yMS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB0aGUgc2VjdXJpdHkgZml4IHRoYXQgYXBwZWFycyBpbiB2Mi4xNy40OyBzZWUKK3RoZSByZWxlYXNlIG5vdGVzIGZvciB0aGF0IHZlcnNpb24gZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjEuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjEuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNhMGFhNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMS4zLnR4dApAQCAtMCwwICsxLDUgQEAKK0dpdCB2Mi4yMS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB0aGUgc2VjdXJpdHkgZml4IHRoYXQgYXBwZWFycyBpbiB2Mi4xNy41OyBzZWUKK3RoZSByZWxlYXNlIG5vdGVzIGZvciB0aGF0IHZlcnNpb24gZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjIuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjIuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFlNmFlOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMi4wLnR4dApAQCAtMCwwICsxLDU5NyBAQAorR2l0IDIuMjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYyLjIxCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZQorCisgKiBUaGUgZmlsdGVyIHNwZWNpZmljYXRpb24gIi0tZmlsdGVyPXNwYXJzZTpwYXRoPTxwYXRoPiIgdXNlZCB0bworICAgY3JlYXRlIGEgbGF6eS9wYXJ0aWFsIGNsb25lIGhhcyBiZWVuIHJlbW92ZWQuICBVc2luZyBhIGJsb2IgdGhhdCBpcworICAgcGFydCBvZiB0aGUgcHJvamVjdCBhcyBzcGFyc2Ugc3BlY2lmaWNhdGlvbiBpcyBzdGlsbCBzdXBwb3J0ZWQgd2l0aAorICAgdGhlICItLWZpbHRlcj1zcGFyc2U6b2lkPTxibG9iPiIgb3B0aW9uLgorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogImdpdCBjaGVja291dCAtLW5vLW92ZXJsYXkiIGNhbiBiZSB1c2VkIHRvIHRyaWdnZXIgYSBuZXcgbW9kZSBvZgorICAgY2hlY2tpbmcgb3V0IHBhdGhzIG91dCBvZiB0aGUgdHJlZS1pc2gsIHRoYXQgYWxsb3dzIHBhdGhzIHRoYXQKKyAgIG1hdGNoIHRoZSBwYXRoc3BlYyB0aGF0IGFyZSBpbiB0aGUgY3VycmVudCBpbmRleCBhbmQgd29ya2luZyB0cmVlCisgICBhbmQgYXJlIG5vdCBpbiB0aGUgdHJlZS1pc2guCisKKyAqIFRoZSAlKHRyYWlsZXJzKSBmb3JtYXR0ZXIgaW4gImdpdCBsb2cgLS1mb3JtYXQ9Li4uIiAgbm93IGFsbG93cyB0bworICAgb3B0aW9uYWxseSBwaWNrIHRyYWlsZXJzIHNlbGVjdGl2ZWx5IGJ5IGtleXdvcmQsIHNob3cgb25seSB2YWx1ZXMsCisgICBldGMuCisKKyAqIEZvdXIgbmV3IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHthdXRob3IsY29tbWl0dGVyfS57bmFtZSxlbWFpbH0KKyAgIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHRvIG92ZXJyaWRlIHVzZXIue25hbWUsZW1haWx9IGluIG1vcmUgc3BlY2lmaWMKKyAgIGNhc2VzLgorCisgKiBDb21tYW5kLWxpbmUgY29tcGxldGlvbiAoaW4gY29udHJpYi8pIGxlYXJuZWQgdG8gdGFiLWNvbXBsZXRlIHRoZQorICAgImdpdCBzdWJtb2R1bGUgYWJzb3JiZ2l0ZGlycyIgc3ViY29tbWFuZC4KKworICogImdpdCBicmFuY2giIGxlYXJuZWQgYSBuZXcgc3ViY29tbWFuZCAiLS1zaG93LWN1cnJlbnQiLgorCisgKiBPdXRwdXQgZnJvbSAiZGlmZiAtLWNjIiBkaWQgbm90IHNob3cgdGhlIG9yaWdpbmFsIHBhdGhzIHdoZW4gdGhlCisgICBtZXJnZSBpbnZvbHZlZCByZW5hbWVzLiAgQSBuZXcgb3B0aW9uIGFkZHMgdGhlIHBhdGhzIGluIHRoZQorICAgb3JpZ2luYWwgdHJlZXMgdG8gdGhlIG91dHB1dC4KKworICogVGhlIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIChpbiBjb250cmliLykgaGFzIGJlZW4gdGF1Z2h0IHRvCisgICBjb21wbGV0ZSBtb3JlIHN1YmNvbW1hbmQgcGFyYW1ldGVycy4KKworICogVGhlIGZpbmFsIHJlcG9ydCBmcm9tICJnaXQgYmlzZWN0IiB1c2VkIHRvIHNob3cgdGhlIHN1c3BlY3RlZAorICAgY3VscHJpdCB1c2luZyBhIHJhdyAiZGlmZi10cmVlIiwgd2l0aCB3aGljaCB0aGVyZSBpcyBubyBvdXRwdXQgZm9yCisgICBhIG1lcmdlIGNvbW1pdC4gIFRoaXMgaGFzIGJlZW4gdXBkYXRlZCB0byB1c2UgYSBtb3JlIG1vZGVybiBhbmQKKyAgIGh1bWFuIHJlYWRhYmxlIG91dHB1dCB0aGF0IHN0aWxsIGlzIGNvbmNpc2UgZW5vdWdoLgorCisgKiAiZ2l0IHJlYmFzZSAtLXJlYmFzZS1tZXJnZXMiIHJlcGxhY2VzIGl0cyBvbGQgIi0tcHJlc2VydmUtbWVyZ2VzIgorICAgb3B0aW9uOyB0aGUgbGF0dGVyIGlzIG5vdyBtYXJrZWQgYXMgZGVwcmVjYXRlZC4KKworICogRXJyb3IgbWVzc2FnZSBnaXZlbiB3aGlsZSBjbG9uaW5nIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgaGFzCisgICBiZWVuIHVwZGF0ZWQuCisKKyAqIFRoZSBjb21wbGV0aW9uIGhlbHBlciBjb2RlIG5vdyBwYXlzIGF0dGVudGlvbiB0byByZXBvc2l0b3J5LWxvY2FsCisgICBjb25maWd1cmF0aW9uICh3aGVuIGF2YWlsYWJsZSksIHdoaWNoIGFsbG93cyAtLWxpc3QtY21kcyB0byBob25vdXIKKyAgIGEgcmVwb3NpdG9yeSBzcGVjaWZpYyBzZXR0aW5nIG9mIGNvbXBsZXRpb24uY29tbWFuZHMsIGZvciBleGFtcGxlLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgbGVhcm5lZCB0byBvZmZlciBTdWJsaW1lIE1lcmdlIChzbWVyZ2UpIGFzIG9uZSBvZgorICAgaXRzIGJhY2tlbmRzLgorCisgKiBBIG5ldyBob29rICJwb3N0LWluZGV4LWNoYW5nZSIgaXMgY2FsbGVkIHdoZW4gdGhlIG9uLWRpc2sgaW5kZXgKKyAgIGZpbGUgY2hhbmdlcywgd2hpY2ggY2FuIGhlbHAgZS5nLiBhIHZpcnR1YWxpemVkIHdvcmtpbmcgdHJlZQorICAgaW1wbGVtZW50YXRpb24uCisKKyAqICJnaXQgZGlmZnRvb2wiIGNhbiBub3cgcnVuIG91dHNpZGUgYSByZXBvc2l0b3J5LgorCisgKiAiZ2l0IGNoZWNrb3V0IC1tIDxvdGhlcj4iIHdhcyBhYm91dCBjYXJyeWluZyB0aGUgZGlmZmVyZW5jZXMKKyAgIGJldHdlZW4gSEVBRCBhbmQgdGhlIHdvcmtpbmctdHJlZSBmaWxlcyBmb3J3YXJkIHdoaWxlIGNoZWNraW5nIG91dAorICAgYW5vdGhlciBicmFuY2gsIGFuZCBpZ25vcmVkIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIEhFQUQgYW5kIHRoZQorICAgaW5kZXguICBUaGUgY29tbWFuZCBoYXMgYmVlbiB0YXVnaHQgdG8gYWJvcnQgd2hlbiB0aGUgaW5kZXggYW5kIHRoZQorICAgSEVBRCBhcmUgZGlmZmVyZW50LgorCisgKiBBIHByb2dyZXNzIGluZGljYXRvciBoYXMgYmVlbiBhZGRlZCB0byB0aGUgImluZGV4LXBhY2siIHN0ZXAsIHdoaWNoCisgICBvZnRlbiBtYWtlcyB1c2VycyB3YWl0IGZvciBjb21wbGV0aW9uIGR1cmluZyAiZ2l0IGNsb25lIi4KKworICogImdpdCBzdWJtb2R1bGUiIGxlYXJucyAic2V0LWJyYW5jaCIgc3ViY29tbWFuZCB0aGF0IGFsbG93cyB0aGUKKyAgIHN1Ym1vZHVsZS4qLmJyYW5jaCBzZXR0aW5ncyB0byBiZSBtb2RpZmllZC4KKworICogImdpdCBtZXJnZS1yZWN1cnNpdmUiIGJhY2tlbmQgcmVjZW50bHkgbGVhcm5lZCBhIG5ldyBoZXVyaXN0aWNzIHRvCisgICBpbmZlciBmaWxlIG1vdmVtZW50IGJhc2VkIG9uIGhvdyBvdGhlciBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKyAgIG1vdmVkLiAgQXMgdGhpcyBpcyBpbmhlcmVudGx5IGxlc3Mgcm9idXN0IGhldXJpc3RpY3MgdGhhbiB0aGUgb25lCisgICBiYXNlZCBvbiB0aGUgY29udGVudCBzaW1pbGFyaXR5IG9mIHRoZSBmaWxlIGl0c2VsZiAocmF0aGVyIHRoYW4KKyAgIGJhc2VkIG9uIHdoYXQgaXRzIG5laWdoYm91cnMgYXJlIGRvaW5nKSwgaXQgc29tZXRpbWVzIGdpdmVzIGFuCisgICBvdXRjb21lIHVuZXhwZWN0ZWQgYnkgdGhlIGVuZCB1c2Vycy4gIFRoaXMgaGFzIGJlZW4gdG9uZWQgZG93biB0bworICAgbGVhdmUgdGhlIHJlbmFtZWQgcGF0aHMgaW4gaGlnaGVyL2NvbmZsaWN0ZWQgc3RhZ2VzIGluIHRoZSBpbmRleCBzbworICAgdGhhdCB0aGUgdXNlciBjYW4gZXhhbWluZSBhbmQgY29uZmlybSB0aGUgcmVzdWx0LgorCisgKiAiZ2l0IHRhZyIgbGVhcm5lZCB0byBnaXZlIGFuIGFkdmljZSBzdWdnZXN0aW5nIGl0IG1pZ2h0IGJlIGEKKyAgIG1pc3Rha2Ugd2hlbiBjcmVhdGluZyBhbiBhbm5vdGF0ZWQgb3Igc2lnbmVkIHRhZyB0aGF0IHBvaW50cyBhdAorICAgYW5vdGhlciB0YWcuCisKKyAqIFRoZSAiZ2l0IHBhY2stb2JqZWN0cyIgY29tbWFuZCBsZWFybmVkIHRvIHJlcG9ydCB0aGUgbnVtYmVyIG9mCisgICBvYmplY3RzIGl0IHBhY2tlZCB2aWEgdGhlIHRyYWNlMiBtZWNoYW5pc20uCisKKyAqIFRoZSBsaXN0IG9mIGNvbmZsaWN0ZWQgcGF0aHMgc2hvd24gaW4gdGhlIGVkaXRvciB3aGlsZSBjb25jbHVkaW5nIGEKKyAgIGNvbmZsaWN0ZWQgbWVyZ2Ugd2FzIHNob3duIGFib3ZlIHRoZSBzY2lzc29ycyBsaW5lIHdoZW4gdGhlCisgICBjbGVhbi11cCBtb2RlIGlzIHNldCB0byAic2Npc3NvcnMiLCBldmVuIHRob3VnaCBpdCB3YXMgY29tbWVudGVkCisgICBvdXQganVzdCBsaWtlIHRoZSBsaXN0IG9mIHVwZGF0ZWQgcGF0aHMgYW5kIG90aGVyIGluZm9ybWF0aW9uIHRvCisgICBoZWxwIHRoZSB1c2VyIGV4cGxhaW4gdGhlIG1lcmdlIGJldHRlci4KKworICogVGhlIHRyYWNlMiB0cmFjaW5nIGZhY2lsaXR5IGxlYXJuZWQgdG8gYXV0by1nZW5lcmF0ZSBhIGZpbGVuYW1lCisgICB3aGVuIHRvbGQgdG8gbG9nIHRvIGEgZGlyZWN0b3J5LgorCisgKiAiZ2l0IGNsb25lIiBsZWFybmVkIGEgbmV3IC0tc2VydmVyLW9wdGlvbiBvcHRpb24gd2hlbiB0YWxraW5nIG92ZXIKKyAgIHRoZSBwcm90b2NvbCB2ZXJzaW9uIDIuCisKKyAqIFRoZSBjb25uZWN0aXZpdHkgYml0bWFwcyBhcmUgY3JlYXRlZCBieSBkZWZhdWx0IGluIGJhcmUKKyAgIHJlcG9zaXRvcmllcyBub3c7IGFsc28gdGhlIHBhdGhuYW1lIGhhc2gtY2FjaGUgaXMgY3JlYXRlZCBieQorICAgZGVmYXVsdCB0byBhdm9pZCBtYWtpbmcgY3JhcHB5IGRlbHRhcyB3aGVuIHJlcGFja2luZy4KKworICogImdpdCBicmFuY2ggbmV3IEEuLi5CIiBhbmQgImdpdCBjaGVja291dCAtYiBuZXcgQS4uLkIiIGhhdmUgYmVlbgorICAgdGF1Z2h0IHRoYXQgaW4gdGhlaXIgY29udGV4dHMsIHRoZSBub3RhdGlvbiBBLi4uQiBtZWFucyAidGhlIG1lcmdlCisgICBiYXNlIGJldHdlZW4gdGhlc2UgdHdvIGNvbW1pdHMiLCBqdXN0IGxpa2UgImdpdCBjaGVja291dCBBLi4uQiIKKyAgIGRldGFjaGVzIEhFQUQgYXQgdGhhdCBjb21taXQuCisKKyAqIFVwZGF0ZSAiZ2l0IGRpZmZ0b29sIiBhbmQgImdpdCBtZXJnZXRvb2wiIHNvIHRoYXQgdGhlIGNvbWJpbmF0aW9ucworICAgb2Yge2RpZmYsbWVyZ2V9Lnt0b29sLGd1aXRvb2x9IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHNlcnZlIGFzCisgICBmYWxsYmFjayBzZXR0aW5ncyBvZiBlYWNoIG90aGVyIGluIGEgc2Vuc2libGUgb3JkZXIuCisKKyAqIFRoZSAiLS1kaXItZGlmZiIgbW9kZSBvZiAiZ2l0IGRpZmZ0b29sIiBpcyBub3QgdXNlZnVsIGluICItLW5vLWluZGV4IgorICAgbW9kZTsgdGhleSBhcmUgbm93IGV4cGxpY2l0bHkgbWFya2VkIGFzIG11dHVhbGx5IGluY29tcGF0aWJsZS4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBUaGUgZGlmZiBtYWNoaW5lcnksIG9uZSBvZiB0aGUgb2xkZXN0IHBhcnRzIG9mIHRoZSBzeXN0ZW0sIHdoaWNoCisgICBsb25nIHByZWRhdGVzIHRoZSBwYXJzZS1vcHRpb25zIEFQSSwgdXNlcyBmYWlybHkgbG9uZyBhbmQgY29tcGxleAorICAgaGFuZGNyYWZ0ZWQgb3B0aW9uIHBhcnNlci4gIFRoaXMgaXMgYmVpbmcgcmV3cml0dGVuIHRvIHVzZSB0aGUKKyAgIHBhcnNlLW9wdGlvbnMgQVBJLgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgcGFjay1yZWR1bmRhbnQgaGFzIGJlZW4gdXBkYXRlZCBmb3IKKyAgIHBlcmZvcm1hbmNlIGluIGEgcmVwb3NpdG9yeSB3aXRoIG1hbnkgcGFja2ZpbGVzLgorCisgKiBBIG1vcmUgc3RydWN0dXJlZCB3YXkgdG8gb2J0YWluIGV4ZWN1dGlvbiB0cmFjZSBoYXMgYmVlbiBhZGRlZC4KKworICogImdpdCBwcnVuZSIgaGFzIGJlZW4gdGF1Z2h0IHRvIHRha2UgYWR2YW50YWdlIG9mIHJlYWNoYWJpbGl0eQorICAgYml0bWFwIHdoZW4gYWJsZS4KKworICogVGhlIGNvbW1hbmQgbGluZSBwYXJzZXIgb2YgImdpdCBjb21taXQtdHJlZSIgaGFzIGJlZW4gcmV3cml0dGVuIHRvCisgICB1c2UgdGhlIHBhcnNlLW9wdGlvbnMgQVBJLgorCisgKiBTdWdnZXN0IEdpdEdpdEdhZGdldCBpbnN0ZWFkIG9mIHN1Ym1pdEdpdCBhcyBhIHdheSB0byBzdWJtaXQKKyAgIHBhdGNoZXMgYmFzZWQgb24gR2l0SHViIFBSIHRvIHVzLgorCisgKiBUaGUgdGVzdCBmcmFtZXdvcmsgaGFzIGJlZW4gdXBkYXRlZCB0byBoZWxwIGRldmVsb3BlcnMgYnkgbWFraW5nIGl0CisgICBlYXNpZXIgdG8gcnVuIG1vc3Qgb2YgdGhlIHRlc3RzIHVuZGVyIGRpZmZlcmVudCB2ZXJzaW9ucyBvZgorICAgb3Zlci10aGUtd2lyZSBwcm90b2NvbHMuCisKKyAqIERldiBzdXBwb3J0IHVwZGF0ZSB0byBtYWtlIGl0IGVhc2llciB0byBjb21wYXJlIHR3byBmb3JtYXR0ZWQKKyAgIHJlc3VsdHMgZnJvbSBvdXIgZG9jdW1lbnRhdGlvbi4KKworICogVGhlIHNjcmlwdGVkICJnaXQgcmViYXNlIiBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbiByZXRpcmVkLgorCisgKiAiZ2l0IG11bHRpLXBhY2staW5kZXggdmVyaWZ5IiBkaWQgbm90IHNjYWxlIHdlbGwgd2l0aCB0aGUgbnVtYmVyIG9mCisgICBwYWNrZmlsZXMsIHdoaWNoIGlzIGJlaW5nIGltcHJvdmVkLgorCisgKiAiZ2l0IHN0YXNoIiBoYXMgYmVlbiByZXdyaXR0ZW4gaW4gQy4KKworICogVGhlICJjaGVjay1kb2NzIiBNYWtlZmlsZSB0YXJnZXQgdG8gc3VwcG9ydCBkZXZlbG9wZXJzIGhhcyBiZWVuCisgICB1cGRhdGVkLgorCisgKiBUaGUgdGVzdHMgaGF2ZSBiZWVuIHVwZGF0ZWQgbm90IHRvIHJlbHkgb24gdGhlIGFiYnJldmlhdGVkIG9wdGlvbgorICAgbmFtZXMgdGhlIHBhcnNlLW9wdGlvbnMgQVBJIG9mZmVycywgdG8gcHJvdGVjdCB1cyBmcm9tIGFuCisgICBhYmJyZXZpYXRlZCBmb3JtIG9mIGFuIG9wdGlvbiB0aGF0IHVzZWQgdG8gYmUgdW5pcXVlIHdpdGhpbiB0aGUKKyAgIGNvbW1hbmQgZ2V0dGluZyBub24tdW5pcXVlIHdoZW4gYSBuZXcgb3B0aW9uIHRoYXQgc2hhcmUgdGhlIHNhbWUKKyAgIHByZWZpeCBpcyBhZGRlZC4KKworICogVGhlIHNjcmlwdGVkIHZlcnNpb24gb2YgImdpdCByZWJhc2UgLWkiIHdyb3RlIGFuZCByZXdyb3RlIHRoZSB0b2RvCisgICBsaXN0IG1hbnkgdGltZXMgZHVyaW5nIGEgc2luZ2xlIHN0ZXAgb2YgaXRzIG9wZXJhdGlvbiwgYW5kIHRoZQorICAgcmVjZW50IEMtcmV3cml0ZSBtYWRlIGEgZmFpdGhmdWwgY29udmVyc2lvbiBvZiB0aGUgbG9naWMgdG8gQy4gIFRoZQorICAgaW1wbGVtZW50YXRpb24gaGFzIGJlZW4gdXBkYXRlZCB0byBjYXJyeSBuZWNlc3NhcnkgaW5mb3JtYXRpb24KKyAgIGFyb3VuZCBpbi1jb3JlIHRvIGF2b2lkIHJld3JpdGluZyB0aGUgc2FtZSBmaWxlIG92ZXIgYW5kIG92ZXIKKyAgIHVubmVjZXNzYXJpbHkuCisKKyAqIFRlc3QgZnJhbWV3b3JrIHVwZGF0ZSB0byBtb3JlIHJvYnVzdGx5IGNsZWFuIHVwIGxlZnRvdmVyIGZpbGVzIGFuZAorICAgcHJvY2Vzc2VzIGFmdGVyIHRlc3RzIGFyZSBkb25lLgorCisgKiBDb252ZXJzaW9uIGZyb20gdW5zaWduZWQgY2hhclsyMF0gdG8gc3RydWN0IG9iamVjdF9pZCBjb250aW51ZXMuCisKKyAqIFdoaWxlIHJ1bm5pbmcgImdpdCBkaWZmIiBpbiBhIGxhenkgY2xvbmUsIHdlIGNhbiB1cGZyb250IGtub3cgd2hpY2gKKyAgIG1pc3NpbmcgYmxvYnMgd2Ugd2lsbCBuZWVkLCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZSBvbi1kZW1hbmQKKyAgIG1hY2hpbmVyeSB0byBkaXNjb3ZlciB0aGVtIG9uZSBieSBvbmUuICBUaGUgY29kZSBsZWFybmVkIHRvIGFpbSB0bworICAgYWNoaWV2ZSBiZXR0ZXIgcGVyZm9ybWFuY2UgYnkgYmF0Y2hpbmcgdGhlIHJlcXVlc3QgZm9yIHRoZXNlCisgICBwcm9taXNlZCBibG9icy4KKworICogRHVyaW5nIGFuIGluaXRpYWwgImdpdCBjbG9uZSAtLWRlcHRoPS4uLiIgcGFydGlhbCBjbG9uZSwgaXQgaXMKKyAgIHBvaW50bGVzcyB0byBzcGVuZCBjeWNsZXMgZm9yIGEgbGFyZ2UgcG9ydGlvbiBvZiB0aGUgY29ubmVjdGl2aXR5CisgICBjaGVjayB0aGF0IGVudW1lcmF0ZXMgYW5kIHNraXBzIHByb21pc29yIG9iamVjdHMgKHdoaWNoIGJ5CisgICBkZWZpbml0aW9uIGlzIGFsbCBvYmplY3RzIGZldGNoZWQgZnJvbSB0aGUgb3RoZXIgc2lkZSkuICBUaGlzIGhhcworICAgYmVlbiBvcHRpbWl6ZWQgb3V0LgorCisgKiBNZWNoYW5pY2FsbHkgYW5kIHN5c3RlbWF0aWNhbGx5IGRyb3AgImV4dGVybiIgZnJvbSBmdW5jdGlvbgorICAgZGVjbGFyYXRpb24uCisKKyAqIFRoZSBzY3JpcHQgdG8gYWdncmVnYXRlIHBlcmYgcmVzdWx0IHVuY29uZGl0aW9uYWxseSBkZXBlbmRlZCBvbgorICAgbGlianNvbi1wZXJsIGV2ZW4gdGhvdWdoIGl0IGRpZCBub3QgaGF2ZSB0bywgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogVGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uIG9mICJnaXQgcmViYXNlIC1pIiBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBhdm9pZCBmb3JraW5nIGEgc2VwYXJhdGUgInJlYmFzZS0taW50ZXJhY3RpdmUiIHByb2Nlc3MuCisKKyAqIEFsbG93IERFUCBhbmQgQVNMUiBmb3IgV2luZG93cyBidWlsZCB0byBmb3Igc2VjdXJpdHkgaGFyZGVuaW5nLgorCisgKiBQZXJmb3JtYW5jZSB0ZXN0IGZyYW1ld29yayBoYXMgYmVlbiBicm9rZW4gYW5kIG1lYXN1cmVkIHRoZSB2ZXJzaW9uCisgICBvZiBHaXQgdGhhdCBoYXBwZW5zIHRvIGJlIG9uICRQQVRILCBub3QgdGhlIHNwZWNpZmllZCBvbmUgdG8KKyAgIG1lYXN1cmUsIGZvciBhIHdoaWxlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIE9wdGlvbmFsbHkgIm1ha2UgY29jY2ljaGVjayIgY2FuIGZlZWQgbXVsdGlwbGUgc291cmNlIGZpbGVzIHRvCisgICBzcGF0Y2gsIGdhaW5pbmcgcGVyZm9ybWFuY2Ugd2hpbGUgc3BlbmRpbmcgbW9yZSBtZW1vcnkuCisKKyAqIEF0dGVtcHQgdG8gdXNlIGFuIGFiYnJldmlhdGVkIG9wdGlvbiBpbiAiZ2l0IGNsb25lIC0tcmVjdXJzIiBpcworICAgcmVzcG9uZGVkIGJ5IGEgcmVxdWVzdCB0byBkaXNhbWJpZ3VhdGUgYmV0d2VlbiAtLXJlY3Vyc2l2ZSBhbmQKKyAgIC0tcmVjdXJzZS1zdWJtb2R1bGVzLCB3aGljaCBpcyBiYWQgYmVjYXVzZSB0aGVzZSB0d28gYXJlIHN5bm9ueW1zLgorICAgVGhlIHBhcnNlLW9wdGlvbnMgQVBJIGhhcyBiZWVuIGV4dGVuZGVkIHRvIGRlZmluZSBzdWNoIHN5bm9ueW1zCisgICBtb3JlIGVhc2lseSBhbmQgbm90IHByb2R1Y2UgYW4gdW5uZWNlc3NhcnkgZmFpbHVyZS4KKworICogQSBwYWlyIG9mIHByaXZhdGUgZnVuY3Rpb25zIGluIGh0dHAuYyB0aGF0IGhhZCBuYW1lcyBzaW1pbGFyIHRvCisgICBmcmVhZC9md3JpdGUgZGlkIG5vdCByZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cywgd2hpY2ggd2FzIGZvdW5kCisgICB0byBiZSBjb25mdXNpbmcuCisKKyAqIFVwZGF0ZSBjb2xsaXNpb24tZGV0ZWN0aW5nIFNIQS0xIGNvZGUgdG8gYnVpbGQgcHJvcGVybHkgb24gSFAtVVguCisKKworRml4ZXMgc2luY2UgdjIuMjEKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgcHJ1bmUtcGFja2VkIiBkaWQgbm90IG5vdGljZSBhbmQgY29tcGxhaW4gYWdhaW5zdCBleGNlc3MKKyAgIGFyZ3VtZW50cyBnaXZlbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHdoaWNoIG5vdyBpdCBkb2VzLgorICAgKG1lcmdlIDliMGJkODdlZDIgcmovcHJ1bmUtcGFja2VkLWV4Y2Vzcy1hcmdzIGxhdGVyIHRvIG1haW50KS4KKworICogU3BsaXQtaW5kZXggZml4LgorICAgKG1lcmdlIDZlMzdjOGVkM2MgbmQvc3BsaXQtaW5kZXgtbnVsbC1iYXNlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZiAtLW5vLWluZGV4IiBtYXkgc3RpbGwgd2FudCB0byBhY2Nlc3MgR2l0IGdvb2RpZXMgbGlrZQorICAgLS1leHQtZGlmZiBhbmQgLS10ZXh0Y29udiwgYnV0IHNvIGZhciB0aGVzZSBoYXZlIGJlZW4gaWdub3JlZCwKKyAgIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAyODdhYjI4YmZhIGprL2RpZmYtbm8taW5kZXgtaW5pdGlhbGl6ZSBsYXRlciB0byBtYWludCkuCisKKyAqIFVuaWZ5IFJQQyBjb2RlIGZvciBzbWFydCBodHRwIGluIHByb3RvY29sIHYwL3YxIGFuZCB2Miwgd2hpY2ggZml4ZXMKKyAgIGEgYnVnIGluIHRoZSBsYXR0ZXIgKGxhY2sgb2YgYXV0aGVudGljYXRpb24gcmV0cnkpIGFuZCBnZW5lcmFsbHkKKyAgIGltcHJvdmVzIHRoZSBjb2RlIGJhc2UuCisgICAobWVyZ2UgYTk3ZDAwNzk5YSBqdC9odHRwLWF1dGgtcHJvdG8tdjItZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGluY2x1ZGUgZmlsZSBjb21wYXQvYnN3YXAuaCBoYXMgYmVlbiB1cGRhdGVkIHNvIHRoYXQgaXQgaXMgc2FmZQorICAgdG8gKGFjY2lkZW50YWxseSkgaW5jbHVkZSBpdCBtb3JlIHRoYW4gb25jZS4KKyAgIChtZXJnZSAzM2FhNTc5YTU1IGprL2d1YXJkLWJzd2FwLWhlYWRlciBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzZXQgb2YgaGVhZGVyIGZpbGVzIHVzZWQgYnkgIm1ha2UgaGRyLWNoZWNrIiB1bmNvbmRpdGlvbmFsbHkKKyAgIGluY2x1ZGVkIHNoYTI1Ni9nY3J5cHQuaCwgZXZlbiB3aGVuIGl0IGlzIG5vdCB1c2VkLCBjYXVzaW5nIHRoZQorICAgbWFrZSB0YXJnZXQgdG8gZmFpbC4gIFdlIG5vdyBza2lwIGl0IHdoZW4gR0NSWVBUX1NIQTI1NiBpcyBub3QgaW4KKyAgIHVzZS4KKyAgIChtZXJnZSBmMjNhYTE4ZTdmIHJqL2hkci1jaGVjay1nY3J5cHQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIE1ha2VmaWxlIHVzZXMgJ2ZpbmQnIHV0aWxpdHkgdG8gZW51bWVyYXRlIGFsbCB0aGUgKi5oIGhlYWRlcgorICAgZmlsZXMsIHdoaWNoIGlzIGV4cGVuc2l2ZSBvbiBwbGF0Zm9ybXMgd2l0aCBzbG93IGZpbGVzeXN0ZW1zOyBpdAorICAgbm93IG9wdGlvbmFsbHkgdXNlcyAibHMtZmlsZXMiIGlmIHdvcmtpbmcgd2l0aGluIGEgcmVwb3NpdG9yeSwKKyAgIHdoaWNoIGlzIGEgdHJpY2sgc2ltaWxhciB0byBob3cgYWxsIHNvdXJjZXMgYXJlIGVudW1lcmF0ZWQgdG8gcnVuCisgICBFVEFHUyBvbi4KKyAgIChtZXJnZSA5MmI4OGViYTlmIGpzL2ZpbmQtbGliLWgtd2l0aC1scy1maWxlcy13aGVuLXBvc3NpYmxlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UiIHRoYXQgd2FzIHJlaW1wbGVtZW50ZWQgaW4gQyBkaWQgbm90IHNldCBPUklHX0hFQUQKKyAgIGNvcnJlY3RseSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGNiZDI5ZWFkOTIganMvcmViYXNlLW9yaWctaGVhZC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBEZXYgc3VwcG9ydC4KKyAgIChtZXJnZSBmNTQ1NzM3MTQ0IGpzL3N0cmVzcy10ZXN0LXVpLXR3ZWFrIGxhdGVyIHRvIG1haW50KS4KKworICogQ0ZMQUdTIG5vdyBjYW4gYmUgdHdlYWtlZCB3aGVuIGludm9raW5nIE1ha2Ugd2hpbGUgdXNpbmcKKyAgIERFVkVMT1BFUj1ZZXNQbGVhc2U7IHRoaXMgZGlkIG5vdCB3b3JrIHdlbGwgYmVmb3JlLgorICAgKG1lcmdlIDZkNWQ0YjRlOTMgYWIvbWFrZWZpbGUtaGVscC1kZXZzLW1vcmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZzY2sgLS1jb25uZWN0aXZpdHktb25seSIgb21pdHMgY29tcHV0YXRpb24gbmVjZXNzYXJ5IHRvIHNpZnQKKyAgIHRoZSBvYmplY3RzIHRoYXQgYXJlIG5vdCByZWFjaGFibGUgZnJvbSBhbnkgb2YgdGhlIHJlZnMgaW50bworICAgdW5yZWFjaGFibGUgYW5kIGRhbmdsaW5nLiAgVGhpcyBpcyBub3cgZW5hYmxlZCB3aGVuIGRhbmdsaW5nCisgICBvYmplY3RzIGFyZSByZXF1ZXN0ZWQgKHdoaWNoIGlzIGRvbmUgYnkgZGVmYXVsdCwgYnV0IGNhbiBiZQorICAgb3ZlcnJpZGRlbiB3aXRoIHRoZSAiLS1uby1kYW5nbGluZyIgb3B0aW9uKS4KKyAgIChtZXJnZSA4ZDhjMmE1YWVmIGprL2ZzY2stZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogT24gcGxhdGZvcm1zIHdoZXJlICJnaXQgZmV0Y2giIGlzIGtpbGxlZCB3aXRoIFNJR1BJUEUgKGUuZy4gT1NYKSwKKyAgIHRoZSB1cGxvYWQtcGFjayB0aGF0IHJ1bnMgb24gdGhlIG90aGVyIGVuZCB0aGF0IGhhbmdzIHVwIGFmdGVyCisgICBkZXRlY3RpbmcgYW4gZXJyb3IgY291bGQgY2F1c2UgImdpdCBmZXRjaCIgdG8gZGllIHdpdGggYSBzaWduYWwsCisgICB3aGljaCBsZWQgdG8gYSBmbGFreSB0ZXN0LiAgImdpdCBmZXRjaCIgbm93IGlnbm9yZXMgU0lHUElQRSBkdXJpbmcKKyAgIHRoZSBuZXR3b3JrIHBvcnRpb24gb2YgaXRzIG9wZXJhdGlvbiAodGhpcyBpcyBub3QgYSBwcm9ibGVtIGFzIHdlCisgICBjaGVjayB0aGUgcmV0dXJuIHN0YXR1cyBmcm9tIG91ciB3cml0ZSgyKXMpLgorICAgKG1lcmdlIDE0MzU4ODk0OWMgamsvbm8tc2lncGlwZS1kdXJpbmctbmV0d29yay10cmFuc3BvcnQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIHJlY2VudCB1cGRhdGUgYnJva2UgImlzIHRoaXMgb2JqZWN0IGF2YWlsYWJsZSB0byB1cz8iIGNoZWNrIGZvcgorICAgd2VsbC1rbm93biBvYmplY3RzIGxpa2UgYW4gZW1wdHkgdHJlZSAod2hpY2ggc2hvdWxkIHlpZWxkICJ5ZXMiLAorICAgZXZlbiB3aGVuIHRoZXJlIGlzIG5vIG9uLWRpc2sgb2JqZWN0IGZvciBhbiBlbXB0eSB0cmVlKSwgd2hpY2ggaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBmMDZhYjAyN2VmIGprL3ZpcnR1YWwtb2JqZWN0cy1kby1leGlzdCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzZXR1cCBjb2RlIGhhcyBiZWVuIGNsZWFuZWQgdXAgdG8gYXZvaWQgbGVha3MgYXJvdW5kIHRoZQorICAgcmVwb3NpdG9yeV9mb3JtYXQgc3RydWN0dXJlLgorICAgKG1lcmdlIGU4ODA1YWYxYzMgbWEvY2xlYXItcmVwb3NpdG9yeS1mb3JtYXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNvbmZpZyAtLXR5cGU9Y29sb3IgLi4uIiBpcyBtZWFudCB0byByZXBsYWNlICJnaXQgY29uZmlnIC0tZ2V0LWNvbG9yIgorICAgYnV0IHRoZXJlIGlzIGEgc2xpZ2h0IGRpZmZlcmVuY2UgdGhhdCB3YXNuJ3QgZG9jdW1lbnRlZCwgd2hpY2ggaXMKKyAgIG5vdyBmaXhlZC4KKyAgIChtZXJnZSBjZDhlNzU5M2I5IGprL2NvbmZpZy10eXBlLWNvbG9yLWVuZHMtd2l0aC1sZiBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gdGhlICJjbGVhbiIgZmlsdGVyIGNhbiByZWR1Y2UgdGhlIHNpemUgb2YgYSBodWdlIGZpbGUgaW4gdGhlCisgICB3b3JraW5nIHRyZWUgZG93biB0byBhIHNtYWxsICJ0b2tlbiIgKGEgbGEgR2l0IExGUyksIHRoZXJlIGlzIG5vCisgICBwb2ludCBpbiBhbGxvY2F0aW5nIGEgaHVnZSBzY3JhdGNoIGFyZWEgdXBmcm9udCwgYnV0IHRoZSBidWZmZXIgaXMKKyAgIHNpemVkIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBmaWxlIHNpemUuICBUaGUgY29udmVydCBtZWNoYW5pc20gbm93CisgICBhbGxvY2F0ZXMgdmVyeSBtaW5pbXVtIGFuZCByZWFsbG9jYXRlcyBhcyBpdCByZWNlaXZlcyB0aGUgb3V0cHV0CisgICBmcm9tIHRoZSBjbGVhbiBmaWx0ZXIgcHJvY2Vzcy4KKyAgIChtZXJnZSAwMjE1NmFiMDMxIGpoL3Jlc2l6ZS1jb252ZXJ0LXNjcmF0Y2gtYnVmZmVyIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UiIHVzZXMgdGhlIHJlZnMvcmV3cml0dGVuLyBoaWVyYXJjaHkgdG8gc3RvcmUgaXRzCisgICBpbnRlcm1lZGlhdGUgc3RhdGVzLCB3aGljaCBpbmhlcmVudGx5IG1ha2VzIHRoZSBoaWVyYXJjaHkgcGVyCisgICB3b3JrdHJlZSwgYnV0IGl0IGRpZG4ndCBxdWl0ZSB3b3JrIHdlbGwuCisgICAobWVyZ2UgYjkzMTdkNTVhMyBuZC9yZXdyaXR0ZW4tcmVmLWlzLXBlci13b3JrdHJlZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbG9nIC1MPGZyb20+LDx0bz46PHBhdGg+IiB3aXRoICItcyIgZGlkIG5vdCBzdXBwcmVzcyB0aGUgcGF0Y2gKKyAgIG91dHB1dCBhcyBpdCBzaG91bGQuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAwNTMxNGVmYWVhIGprL2xpbmUtbG9nLXdpdGgtcGF0Y2ggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHdvcmt0cmVlIGFkZCIgdXNlZCB0byBkbyBhICJmaW5kIGFuIGF2YWlsYWJsZSBuYW1lIHdpdGggc3RhdAorICAgYW5kIHRoZW4gbWtkaXIiLCB3aGljaCBpcyByYWNlLXByb25lLiAgVGhpcyBoYXMgYmVlbiBmaXhlZCBieSB1c2luZworICAgbWtkaXIgYW5kIHJlYWN0aW5nIHRvIEVFWElTVCBpbiBhIGxvb3AuCisgICAobWVyZ2UgN2FmMDFmMjM2NyBtcy93b3JrdHJlZS1hZGQtYXRvbWljLW1rZGlyIGxhdGVyIHRvIG1haW50KS4KKworICogQnVpbGQgdXBkYXRlIGZvciBTSEEtMSB3aXRoIGNvbGxpc2lvbiBkZXRlY3Rpb24uCisgICAobWVyZ2UgMDdhMjBmNTY5YiBqay9zaGExZGMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBCdWlsZCBwcm9jZWR1cmUgaGFzIGJlZW4gZml4ZWQgYXJvdW5kIHVzZSBvZiBhc2NpaWRvY3RvciBpbnN0ZWFkIG9mCisgICBhc2NpaWRvYy4KKyAgIChtZXJnZSAxODVmOWEwZWEwIG1hL2FzY2lpZG9jdG9yLWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogcmVtb3RlLWh0dHAgdHJhbnNwb3J0IGRpZCBub3QgYW5vbnltaXplIFVSTHMgcmVwb3J0ZWQgaW4gaXRzIGVycm9yCisgICBtZXNzYWdlcyBhdCBwbGFjZXMuCisgICAobWVyZ2UgYzEyODRiMjFmMiBqcy9hbm9ueW1pemUtcmVtb3RlLWN1cmwtZGlhZyBsYXRlciB0byBtYWludCkuCisKKyAqIEVycm9yIG1lc3NhZ2VzIGdpdmVuIGZyb20gdGhlIGh0dHAgdHJhbnNwb3J0IGhhdmUgYmVlbiB1cGRhdGVkIHNvCisgICB0aGF0IHRoZXkgY2FuIGJlIGxvY2FsaXplZC4KKyAgIChtZXJnZSBlZDhiNDEzMmM4IGpzL3JlbW90ZS1jdXJsLWkxOG4gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGluaXQiIGZvcmdvdCB0byByZWFkIHBsYXRmb3JtLXNwZWNpZmljIHJlcG9zaXRvcnkKKyAgIGNvbmZpZ3VyYXRpb24sIHdoaWNoIG1hZGUgV2luZG93cyBwb3J0IHRvIGlnbm9yZSBzZXR0aW5ncyBvZgorICAgY29yZS5oaWRlZG90ZmlsZXMsIGZvciBleGFtcGxlLgorCisgKiBBIGNvcm5lci1jYXNlIG9iamVjdCBuYW1lIGFtYmlndWl0eSB3aGlsZSB0aGUgc2VxdWVuY2VyIG1hY2hpbmVyeQorICAgaXMgd29ya2luZyAoZS5nLiAicmViYXNlIC1pIC14IikgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBkaWQgbm90IGRpYWdub3NlIGFuIGVycm9yIHdoaWxlIG9wZW5pbmcgdGhlCisgICBvdXRwdXQgZmlsZSBmb3IgdGhlIGNvdmVyLWxldHRlciwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDJmZTk1ZjQ5NGMgamMvZm9ybWF0LXBhdGNoLWVycm9yLWNoZWNrIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjaGVja291dCAtZiA8YnJhbmNoPiIgd2hpbGUgdGhlIGluZGV4IGhhcyBhbiB1bm1lcmdlZCBwYXRoCisgICBpbmNvcnJlY3RseSBsZWZ0IHNvbWUgcGF0aHMgaW4gYW4gdW5tZXJnZWQgc3RhdGUsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIEEgY29ybmVyIGNhc2UgYnVnIGluIHRoZSByZWZzIEFQSSBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZDMzMjJlYjI4YiBqay9yZWZzLWRvdWJsZS1hYm9ydCBsYXRlciB0byBtYWludCkuCisKKyAqIFVuaWNvZGUgdXBkYXRlLgorICAgKG1lcmdlIDU4NGI2MmMzN2IgYmIvdW5pY29kZS0xMiBsYXRlciB0byBtYWludCkuCisKKyAqIGR1bWItaHR0cCB3YWxrZXIgaGFzIGJlZW4gdXBkYXRlZCB0byBzaGFyZSBtb3JlIGVycm9yIHJlY292ZXJ5CisgICBzdHJhdGVneSB3aXRoIHRoZSBub3JtYWwgY29kZXBhdGguCisKKyAqIEEgYnVnbGV0IGluIGNvbmZpZ3VyYXRpb24gcGFyc2VyIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIDE5ZTdmZGFhNTggbmQvaW5jbHVkZS1pZi13aWxkbWF0Y2ggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgImdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSIgaGFzIGJlZW4gdXBkYXRlZC4KKyAgIChtZXJnZSBiNWEwYmQ2OTRjIG5kL3JlYWQtdHJlZS1yZXNldC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlIGNsZWFuLXVwIGFyb3VuZCBhIG11Y2gtbGVzcy1pbXBvcnRhbnQtdGhhbi1pdC11c2VkLXRvLWJlCisgICB1cGRhdGVfc2VydmVyX2luZm8oKSBmdW5jdGlvbi4KKyAgIChtZXJnZSBiMzIyMzc2MWM4IGprL3NlcnZlci1pbmZvLXJhYmJpdC1ob2xlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIG1lc3NhZ2UgZ2l2ZW4gd2hlbiAiZ2l0IGNvbW1pdCAtYSA8cGF0aHM+IiBlcnJvcnMgb3V0IGhhcyBiZWVuCisgICB1cGRhdGVkLgorICAgKG1lcmdlIDVhMWRiZDQ4YmMgbmQvY29tbWl0LWEtd2l0aC1wYXRocy1tc2ctdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjaGVycnktcGljayAtLW9wdGlvbnMgQS4uQiIsIGFmdGVyIGdpdmluZyBjb250cm9sIGJhY2sgdG8gdGhlCisgICB1c2VyIHRvIGFzayBoZWxwIHJlc29sdmluZyBhIGNvbmZsaWN0ZWQgc3RlcCwgZGlkIG5vdCBob25vciB0aGUKKyAgIG9wdGlvbnMgaXQgb3JpZ2luYWxseSByZWNlaXZlZCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBWYXJpb3VzIGdsaXRjaGVzIGluICJnaXQgZ2MiIGFyb3VuZCByZWZsb2cgaGFuZGxpbmcgaGF2ZSBiZWVuIGZpeGVkLgorCisgKiBUaGUgY29kZSB0byByZWFkIGZyb20gY29tbWl0LWdyYXBoIGZpbGUgaGFzIGJlZW4gY2xlYW51cCB3aXRoIG1vcmUKKyAgIGNhcmVmdWwgZXJyb3IgY2hlY2tpbmcgYmVmb3JlIHVzaW5nIGRhdGEgcmVhZCBmcm9tIGl0LgorCisgKiBQZXJmb3JtYW5jZSBmaXggYXJvdW5kICJnaXQgZmV0Y2giIHRoYXQgZ3JhYnMgbWFueSByZWZzLgorICAgKG1lcmdlIGI3NjQzMDA5MTIganQvZmV0Y2gtcGFjay13YW50ZWQtcmVmcy1vcHRpbSBsYXRlciB0byBtYWludCkuCisKKyAqIFByb3RvY29sIHYyIHN1cHBvcnQgaW4gImdpdCBmZXRjaC1wYWNrIiBvZiBzaGFsbG93IGNsb25lcyBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBQZXJmb3JtYW5jZSBmaXggYXJvdW5kICJnaXQgYmxhbWUiLCBlc3BlY2lhbGx5IGluIGEgbGluZWFyIGhpc3RvcnkKKyAgICh3aGljaCBpcyB0aGUgbm9ybSB3ZSBzaG91bGQgb3B0aW1pemUgZm9yKS4KKyAgIChtZXJnZSBmODkyMDE0OTQzIGRrL2JsYW1lLWtlZXAtb3JpZ2luLWJsb2IgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBQZXJmb3JtYW5jZSBmaXggZm9yICJyZXYtbGlzdCAtLXBhcmVudHMgLS0gcGF0aHNwZWMiLgorICAgKG1lcmdlIDgzMjBiMWRiZTcgamsvcmV2aXNpb24tcmV3cml0dGVuLXBhcmVudHMtaW4tcHJpby1xdWV1ZSBsYXRlciB0byBtYWludCkuCisKKyAqIFVwZGF0aW5nIHRoZSBkaXNwbGF5IHdpdGggcHJvZ3Jlc3MgbWVzc2FnZSBoYXMgYmVlbiBjbGVhbmVkIHVwIHRvCisgICBkZWFsIGJldHRlciB3aXRoIG92ZXJsb25nIG1lc3NhZ2VzLgorICAgKG1lcmdlIDU0NWRjMzQ1ZWIgc2cvb3ZlcmxvbmctcHJvZ3Jlc3MtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBibGFtZSAtLSBwYXRoIiBpbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnkgc3RhcnRzIGJsYW1pbmcgZnJvbQorICAgdGhlIHdvcmtpbmcgdHJlZSwgYW5kIHRoZSBzYW1lIGNvbW1hbmQgaW4gYSBiYXJlIHJlcG9zaXRvcnkgZXJyb3JzCisgICBvdXQgYmVjYXVzZSB0aGVyZSBpcyBubyB3b3JraW5nIHRyZWUgYnkgZGVmaW5pdGlvbi4gIFRoZSBjb21tYW5kCisgICBoYXMgYmVlbiB0YXVnaHQgdG8gaW5zdGVhZCBzdGFydCBibGFtaW5nIGZyb20gdGhlIGNvbW1pdCBhdCBIRUFELAorICAgd2hpY2ggaXMgbW9yZSB1c2VmdWwuCisgICAobWVyZ2UgYTU0NGZiMDhmOCBzZy9ibGFtZS1pbi1iYXJlLXN0YXJ0LWF0LWhlYWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiB1bmRlcmFsbG9jYXRpb24gaW4gdGhlIGNvZGUgdG8gcmVhZCB0aGUgdW50cmFja2VkIGNhY2hlCisgICBleHRlbnNpb24gaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDNhN2I0NWE2MjMganMvdW50cmFja2VkLWNhY2hlLWFsbG9jZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGUgaXMgdXBkYXRlZCB0byBjaGVjayB0aGUgcmVzdWx0IG9mIG1lbW9yeSBhbGxvY2F0aW9uIGJlZm9yZQorICAgaXQgaXMgdXNlZCBpbiBtb3JlIHBsYWNlcywgYnkgdXNpbmcgeG1hbGxvYyBhbmQvb3IgeGNhbGxvYyBjYWxscy4KKyAgIChtZXJnZSA5OTliOTUxYjI4IGprL3htYWxsb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgR0VUVEVYVF9QT0lTT04gdGVzdCBvcHRpb24gaGFzIGJlZW4gcXVpdGUgYnJva2VuIGV2ZXIgc2luY2UgaXQKKyAgIHdhcyBtYWRlIHJ1bnRpbWUtdHVuYWJsZSwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgZjg4YjljYjYwMyBqYy9nZXR0ZXh0LXRlc3QtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGVzdCBmaXggb24gQVBGUyB0aGF0IGlzIGluY2FwYWJsZSBvZiBzdG9yZSBwYXRocyBpbiBMYXRpbi0xLgorICAgKG1lcmdlIDM4ODkxNDk2MTkganMvaXNvODg5NS10ZXN0LW9uLWFwZnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIDxjb21tYW5kPiAtLXF1aWV0IiBkaWQgbm90IHBhc3MgdGhlIG9wdGlvbgorICAgZG93biBjb3JyZWN0bHksIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBhMjgyZjVhOTA2IG5kL3N1Ym1vZHVsZS1mb3JlYWNoLXF1aWV0IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzZW5kLWVtYWlsIiBoYXMgYmVlbiB0YXVnaHQgdG8gdXNlIHF1b3RlZC1wcmludGFibGUgd2hlbiB0aGUKKyAgIHBheWxvYWQgY29udGFpbnMgY2FycmlhZ2UtcmV0dXJuLiAgVGhlIHVzZSBvZiB0aGUgbWVjaGFuaXNtIGlzIGluCisgICBsaW5lIHdpdGggdGhlIGRlc2lnbiBvcmlnaW5hbGx5IGFkZGVkIHRoZSBjb2RlcGF0aCB0aGF0IGNob29zZXMgUVAKKyAgIHdoZW4gdGhlIHBheWxvYWQgaGFzIG92ZXJseSBsb25nIGxpbmVzLgorICAgKG1lcmdlIDc0ZDc2YTE3MDEgYmMvc2VuZC1lbWFpbC1xcC1jciBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSByZWNlbnRseSBhZGRlZCBmZWF0dXJlIHRvIGFkZCBhZGRyZXNzZXMgdGhhdCBhcmUgb24KKyAgIGFueXRoaW5nLWJ5OiB0cmFpbGVycyBpbiAnZ2l0IHNlbmQtZW1haWwnIHdhcyBmb3VuZCB0byBiZSB3YXkgdG9vCisgICBlYWdlciBhbmQgY29uc2lkZXJlZCBub25zZW5zZSBzdHJpbmdzIGFzIGlmIHRoZXkgY2FuIGJlIGxlZ2l0aW1hdGUKKyAgIGJlZ2lubmluZyBvZiAqLWJ5OiB0cmFpbGVyLiAgVGhpcyBoYXMgYmVlbiB0aWdodGVuZWQuCisKKyAqIEJ1aWxkcyB3aXRoIGdldHRleHQgYnJva2Ugb24gcmVjZW50IG1hY09TIHcvIEhvbWVicmV3LCB3aGljaAorICAgc2VlbXMgdG8gaGF2ZSBzdG9wcGVkIGluY2x1ZGluZyBmcm9tIC91c3IvbG9jYWwvaW5jbHVkZTsgdGhpcworICAgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDkyYTEzNzdhMmEganMvbWFjb3MtZ2V0dGV4dC1idWlsZCBsYXRlciB0byBtYWludCkuCisKKyAqIFJ1bm5pbmcgImdpdCBhZGQiIG9uIGEgcmVwb3NpdG9yeSBjcmVhdGVkIGluc2lkZSB0aGUgY3VycmVudAorICAgcmVwb3NpdG9yeSBpcyBhbiBleHBsaWNpdCBpbmRpY2F0aW9uIHRoYXQgdGhlIHVzZXIgd2FudHMgdG8gYWRkIGl0CisgICBhcyBhIHN1Ym1vZHVsZSwgYnV0IHdoZW4gdGhlIEhFQUQgb2YgdGhlIGlubmVyIHJlcG9zaXRvcnkgaXMgb24gYW4KKyAgIHVuYm9ybiBicmFuY2gsIGl0IGNhbm5vdCBiZSBhZGRlZCBhcyBhIHN1Ym1vZHVsZS4gIFdvcnNlLCB0aGUgZmlsZXMKKyAgIGluIGl0cyB3b3JraW5nIHRyZWUgY2FuIGJlIGFkZGVkIGFzIGlmIHRoZXkgYXJlIGEgcGFydCBvZiB0aGUgb3V0ZXIKKyAgIHJlcG9zaXRvcnksIHdoaWNoIGlzIG5vdCB3aGF0IHRoZSB1c2VyIHdhbnRzLiAgVGhlc2UgcHJvYmxlbXMgYXJlCisgICBiZWluZyBhZGRyZXNzZWQuCisgICAobWVyZ2UgZjkzN2JjMmY4NiBrbS9lbXB0eS1yZXBvLWlzLXN0aWxsLWEtcmVwbyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2siIHJ1biB3aXRoIHRoZSAiLXgiIG9yIHRoZSAiLS1zaWdub2ZmIiBvcHRpb24gdXNlZAorICAgdG8gKGFuZCBtb3JlIGltcG9ydGFudGx5LCBvdWdodCB0bykgY2xlYW4gdXAgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZQorICAgd2l0aCB0aGUgLS1jbGVhbnVwPXNwYWNlIG9wdGlvbiBieSBkZWZhdWx0LCBidXQgdGhpcyBoYXMgYmVlbgorICAgYnJva2VuIHNpbmNlIGxhdGUgMjAxNy4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqIFdoZW4gZ2l2ZW4gYSB0YWcgdGhhdCBwb2ludHMgYXQgYSBjb21taXQtaXNoLCAiZ2l0IHJlcGxhY2UgLS1ncmFmdCIKKyAgIGZhaWxlZCB0byBwZWVsIHRoZSB0YWcgYmVmb3JlIHdyaXRpbmcgYSByZXBsYWNlIHJlZiwgd2hpY2ggZGlkIG5vdAorICAgbWFrZSBzZW5zZSBiZWNhdXNlIHRoZSBvbGQgZ3JhZnQgbWVjaGFuaXNtIHRoZSBmZWF0dXJlIHdhbnRzIHRvCisgICBtaW1pYyBvbmx5IGFsbG93ZWQgdG8gcmVwbGFjZSBvbmUgY29tbWl0IG9iamVjdCB3aXRoIGFub3RoZXIuCisgICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGVlNTIxZWM0Y2IgY2MvcmVwbGFjZS1ncmFmdC1wZWVsLXRhZ3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlIHRpZ2h0ZW5pbmcgYWdhaW5zdCBhICJ3cm9uZyIgb2JqZWN0IGFwcGVhcmluZyB3aGVyZSBhbiBvYmplY3QKKyAgIG9mIGEgZGlmZmVyZW50IHR5cGUgaXMgZXhwZWN0ZWQsIGluc3RlYWQgb2YgYmxpbmRseSBhc3N1bWluZyB0aGF0CisgICB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIG9iamVjdHMgYXJlIGNvcnJlY3RseSBtYWRlLgorICAgKG1lcmdlIDk3ZGQ1MTJhZjcgdGIvdW5leHBlY3RlZCBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIGVhcmxpZXIgdXBkYXRlIGZvciBNaW5HVyBhbmQgQ3lnd2luIGFjY2lkZW50YWxseSBicm9rZSBNU1ZDIGJ1aWxkLAorICAgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgMjJjMzYzNGMwZiBzcy9tc3ZjLXBhdGgtdXRpbHMtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogJShwdXNoOnRyYWNrKSB0b2tlbiB1c2VkIGluIHRoZSAtLWZvcm1hdCBvcHRpb24gdG8gImdpdAorICAgZm9yLWVhY2gtcmVmIiBhbmQgZnJpZW5kcyB3YXMgbm90IHNob3dpbmcgdGhlIHJpZ2h0IGJyYW5jaCwgd2hpY2gKKyAgIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGM2NDZkMDkzNGUgZHIvcmVmLWZpbHRlci1wdXNoLXRyYWNrLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJtYWtlIGNoZWNrLWRvY3MiLCAiZ2l0IGhlbHAgLWEiLCBldGMuIGRpZCBub3QgYWNjb3VudCBmb3IgY2FzZXMKKyAgIHdoZXJlIGEgcGFydGljdWxhciBidWlsZCBtYXkgZGVsaWJlcmF0ZWx5IG9taXQgc29tZSBzdWJjb21tYW5kcywKKyAgIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIGxvZ2ljIHRvIHRlbGwgaWYgYSBHaXQgcmVwb3NpdG9yeSBoYXMgYSB3b3JraW5nIHRyZWUgcHJvdGVjdHMKKyAgICJnaXQgYnJhbmNoIC1EIiBmcm9tIHJlbW92aW5nIHRoZSBicmFuY2ggdGhhdCBpcyBjdXJyZW50bHkgY2hlY2tlZAorICAgb3V0IGJ5IG1pc3Rha2UuICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBsb2dpYyB3YXMgYnJva2VuIGZvcgorICAgcmVwb3NpdG9yaWVzIHdpdGggdW51c3VhbCBuYW1lLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzIHRoZSBub3JtIGZvcgorICAgc3VibW9kdWxlcyB0aGVzZSBkYXlzLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSBmMzUzNGM5OGU0IGp0L3N1Ym1vZHVsZS1yZXBvLWlzLXdpdGgtd29ya3RyZWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBSVggc2hhcmVkIHRoZSBzYW1lIGJ1aWxkIGlzc3VlcyB3aXRoIG90aGVyIEJTRHMgYXJvdW5kIGZpbGVubyhmcCksCisgICB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZWU2NjJiZjVjNiBjYy9haXgtaGFzLWZpbGVuby1hcy1hLW1hY3JvIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGF1dG9jb25mIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0IGZhaWxlZCB0byB1c2UgdGhlIHJpZ2h0CisgICBnZXR0ZXh0KCkgaW1wbGVtZW50YXRpb25zIGZyb20gLWxpYmludGwgYnkgaWdub3JpbmcgdXNlbGVzcyBzdHViCisgICBpbXBsZW1lbnRhdGlvbnMgc2hpcHBlZCBpbiBzb21lIEMgbGlicmFyeSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBiNzFlNTZhNjgzIHZrL2F1dG9jb25mLWdldHRleHQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGaXggaW5kZXgtcGFjayBwZXJmIHRlc3Qgc28gdGhhdCB0aGUgcmVwZWF0ZWQgaW52b2NhdGlvbnMgYWx3YXlzCisgICBydW4gaW4gYW4gZW1wdHkgcmVwb3NpdG9yeSwgd2hpY2ggZW11bGF0ZXMgdGhlIGluaXRpYWwgY2xvbmUKKyAgIHNpdHVhdGlvbiBiZXR0ZXIuCisgICAobWVyZ2UgNzc1YzcxZTE2ZCBqay9wNTMwMi1hdm9pZC1jb2xsaXNpb24tY2hlY2stY29zdCBsYXRlciB0byBtYWludCkuCisKKyAqIEEgImxzLWZpbGVzIiB0aGF0IGVtdWxhdGVzICJmaW5kIiB0byBlbnVtZXJhdGUgZmlsZXMgaW4gdGhlIHdvcmtpbmcKKyAgIHRyZWUgcmVzdWx0ZWQgaW4gZHVwbGljYXRlZCBNYWtlZmlsZSBydWxlcyB0aGF0IGNhdXNlZCB0aGUgYnVpbGQgdG8KKyAgIGlzc3VlIGFuIHVubmVjZXNzYXJ5IHdhcm5pbmcgZHVyaW5nIGEgdHJpYWwgYnVpbGQgYWZ0ZXIgbWVyZ2UKKyAgIGNvbmZsaWN0cyBhcmUgcmVzb2x2ZWQgaW4gd29ya2luZyB0cmVlICouaCBmaWxlcyBidXQgYmVmb3JlIHRoZQorICAgcmVzb2x2ZWQgcmVzdWx0cyBhcmUgYWRkZWQgdG8gdGhlIGluZGV4LiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2siIChhbmQgInJldmVydCIgdGhhdCBzaGFyZXMgdGhlIHNhbWUgcnVudGltZSBlbmdpbmUpCisgICB0aGF0IGRlYWxzIHdpdGggbXVsdGlwbGUgY29tbWl0cyBnb3QgY29uZnVzZWQgd2hlbiB0aGUgZmluYWwgc3RlcAorICAgZ2V0cyBzdG9wcGVkIHdpdGggYSBjb25mbGljdCBhbmQgdGhlIHVzZXIgY29uY2x1ZGVkIHRoZSBzZXF1ZW5jZQorICAgd2l0aCAiZ2l0IGNvbW1pdCIuICBBdHRlbXB0IHRvIGZpeCBpdCBieSBjbGVhbmluZyB1cCB0aGUgc3RhdGUKKyAgIGZpbGVzIHVzZWQgYnkgdGhlc2UgY29tbWFuZHMgaW4gc3VjaCBhIHNpdHVhdGlvbi4KKyAgIChtZXJnZSA0YTcyNDg2ZGU5IHB3L2NsZWFuLXNlcXVlbmNlci1zdGF0ZS11cG9uLWZpbmFsLWNvbW1pdCBsYXRlciB0byBtYWludCkuCisKKyAqIE9uIGEgZmlsZXN5c3RlbSBsaWtlIEhGUyssIHRoZSBuYW1lcyBvZiB0aGUgcmVmcyBzdG9yZWQgYXMgZmlsZXN5c3RlbQorICAgZW50aXRpZXMgbWF5IGJlY29tZSBkaWZmZXJlbnQgZnJvbSB3aGF0IHRoZSBlbmQtdXNlciBleHBlY3RzLCBqdXN0CisgICBsaWtlIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgZ2V0ICJyZW5hbWVkIi4gIFdvcmsgYXJvdW5kIHRoZQorICAgbWlzbWF0Y2ggYnkgcGF5aW5nIGF0dGVudGlvbiB0byB0aGUgY29yZS5wcmVjb21wb3NlVW5pY29kZQorICAgY29uZmlndXJhdGlvbi4KKyAgIChtZXJnZSA4ZTcxMmVmNmZjIGVuL3VuaWNvZGUtaW4tcmVmbmFtZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0byBnZW5lcmF0ZSB0aGUgbXVsdGktcGFjayBpZHggZmlsZSB3YXMgbm90IHByZXBhcmVkIHRvCisgICBzZWUgdG9vIG1hbnkgcGFja2ZpbGVzIGFuZCByYW4gb3V0IG9mIG9wZW4gZmlsZSBkZXNjcmlwdG9yLCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUbyBydW4gdGVzdHMgZm9yIEdpdCBTVk4sIG91ciBzY3JpcHRzIGZvciBDSSB1c2VkIHRvIGluc3RhbGwgdGhlCisgICBnaXQtc3ZuIHBhY2thZ2UgKGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYnJpbmcgaW4gdGhlIHJpZ2h0CisgICBkZXBlbmRlbmNpZXMpLiAgVGhpcyBoYXMgYmVlbiB1cGRhdGVkIHRvIGluc3RhbGwgdGhlIG1vcmUgZGlyZWN0CisgICBkZXBlbmRlbmN5LCBuYW1lbHksIGxpYnN2bi1wZXJsLgorICAgKG1lcmdlIGRiODY0MzA2Y2Ygc2cvY2ktbGlic3ZuLXBlcmwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGN2c2V4cG9ydGNvbW1pdCIgcnVubmluZyBvbiBtc3lzIGRpZCBub3QgZXhwZWN0IGN2c250IHNob3dlZAorICAgImN2cyBzdGF0dXMiIG91dHB1dCB3aXRoIENSTEYgbGluZSBlbmRpbmdzLgorCisgKiBUaGUgZnNtb25pdG9yIGludGVyZmFjZSBnb3Qgb3V0IG9mIHN5bmMgYWZ0ZXIgdGhlIGluLWNvcmUgaW5kZXgKKyAgIGZpbGUgZ2V0cyBkaXNjYXJkZWQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAzOThhM2IwODk5IGpzL2ZzbW9uaXRvci1yZWZyZXNoLWFmdGVyLWRpc2NhcmRpbmctaW5kZXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN0YXR1cyIgZGlkIG5vdCBrbm93IHRoYXQgdGhlICJsYWJlbCIgaW5zdHJ1Y3Rpb24gaW4gdGhlCisgICB0b2RvLWxpc3QgInJlYmFzZSAtaSAtciIgdXNlcyBzaG91bGQgbm90IGJlIHNob3duIGFzIGEgaGV4IG9iamVjdAorICAgbmFtZS4KKworICogQSBwcmVyZXF1aXNpdGUgY2hlY2sgaW4gdGhlIHRlc3Qgc3VpdGUgdG8gc2VlIGlmIGEgd29ya2luZyBqZ2l0IGlzCisgICBhdmFpbGFibGUgd2FzIG1hZGUgbW9yZSByb2J1c3QuCisgICAobWVyZ2UgYWJkMGYyODk4MyB0ei90ZXN0LWxpYi1jaGVjay13b3JraW5nLWpnaXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZXBhdGggdG8gcGFyc2UgOjxwYXRoPiB0aGF0IG9idGFpbnMgdGhlIG9iamVjdCBuYW1lIGZvciBhbgorICAgaW5kZXhlZCBvYmplY3QgaGFzIGJlZW4gbWFkZSBtb3JlIHJvYnVzdC4KKworICogQ29kZSBjbGVhbnVwLCBkb2NmaXgsIGJ1aWxkIGZpeCwgZXRjLgorICAgKG1lcmdlIDExZjQ3MGFlZTcgamMvdGVzdC15ZXMtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5MDUwM2EyNDBiIGpzL2RvYy1zeW1yZWYtaW4tcHJvdG8tdjEgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDVjMzI2ZDEyNTIgamsvdW51c2VkLXBhcmFtcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjhjYWJiZmRhMyBkbC9kb2Mtc3VibW9kdWxlLXdvLXN1YmNvbW1hbmQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDk5MDM2MjM3NjEgYWIvcmVjZWl2ZS1wYWNrLXVzZS1hZnRlci1mcmVlLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMWVkZTQ1ZTQ0YiBlbi9tZXJnZS1vcHRpb25zLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgM2UxNGRkMmM4ZSByZC9kb2MtaG9vay11c2VkLWluLXNhbXBsZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYzI3MWRjMjhmZCBuZC9uby1tb3JlLWNoZWNrLXJhY3kgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGU2ZTE1MTk0YTggeWIvdXRmLTE2bGUtYm9tLXNwZWxsZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiYjEwMWFhZjBjIHJkL2F0dHIuYy1jb21tZW50LXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDcxNmE1YWY4MTIgcmQvZ2MtcHJ1bmUtZG9jLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTBiMjA2MzcxZCBqcy91bnRyYXZpcy13aW5kb3dzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkYmY0NzIxNWUzIGpzL3JlYmFzZS1yZWNyZWF0ZS1tZXJnZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTZjYjJkMzBmOCBkbC9yZXNldC1kb2Mtbm8td3J0LWFiYnJldiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjRlY2EzMDZhMiBqYS9kaXItcmVuYW1lLWRvYy1tYXJrdXAtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhZjkxYjAyMzBjIGRsL2lnbm9yZS1kb2NzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1OWEwNmU5NDdiIHJhL3QzNjAwLXRlc3QtcGF0aC1mdW5jcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTA0MWQwNzgxYiBhci90NDE1MC1yZW1vdmUtY3J1ZnQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDhkNzVhMWQxODMgbWEvYXNjaWlkb2N0b3ItZml4ZXMtbW9yZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNzRjYzU0N2IwZiBtaC9wYWNrLXByb3RvY29sLWRvYy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGVkMzE4NTFmYTYgYWIvZG9jLW1pc2MtdHlwb2ZpeGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhNzI1NmRlYmQ0IG5kL2NoZWNrb3V0LW0tZG9jLXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgM2E5ZTFhZDc4ZCBqdC90NTU1MS1wcm90b2NvbC12Mi1kb2VzLW5vdC1oYXZlLWhhbGYtYXV0aCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMGI5MThiNzVhZiBzZy90NTMxOC1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2OGVkNzFiNTNjIGNiL2RvY28tbW9ubyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYTM0ZGNhMjQ1MSBuZC9pbnRlcnByZXQtdHJhaWxlcnMtZG9jZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjZjdiODU3YTc3IGVuL2Zhc3QtaW1wb3J0LXBhcnNpbmctZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmZTYxY2NiYzM1IHBvL3JlcmVyZS1kb2MtZm10IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmZmVhMDI0OGJmIHBvL2Rlc2NyaWJlLW5vdC1uZWNlc3NhcmlseS03IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3Y2I3MjgzYWRiIHRnL2xzLWZpbGVzLWRlYnVnLWZvcm1hdC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY2NGEyMWJkODIgdHovZG9jLWFwb3N0cm9waGUtbm8tbG9uZ2VyLW5lZWRlZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZGJlN2I0MTAxOSBqcy90MzMwMS11bmJyZWFrLW5vdGVzLXRlc3QgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQ4MDgzZTQxODAga20vdDMwMDAtcmV0aXRsZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOWU0Y2JjY2JkNyB0ei9naXQtc3ZuLWRvYy1tYXJrdXAtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkYTljYTk1NWE3IGprL2xzLWZpbGVzLWRvYy1tYXJrdXAtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2ODA0YmEzYTU4IGN3L2RpZmYtaGlnaGxpZ2h0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxYTg3ODcxNDRkIG5kL3N1Ym1vZHVsZS1oZWxwZXItaW5jb21wbGV0ZS1saW5lLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDllZjU3MzgzNyBqay9hcGFjaGUtbHNhbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYzg3MWZiZWUyYiBqcy90NjUwMC11c2Utd2luZG93cy1waWQtb24tbWluZ3cgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGNlNGM3YmZjOTAgYmwvdDQyNTMtZXhpdC1jb2RlLWZyb20tZm9ybWF0LXBhdGNoIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzOTdhNDZkYjc4IGpzL3Q1NTgwLXVuYy1hbHRlcm5hdGUtdGVzdCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDQ5MDc3MjBhMiBjbS9ub3Rlcy1jb21tZW50LWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOWRkZTA2ZGUxMyBjYi9odHRwLXB1c2gtbnVsbC1pbi1tZXNzYWdlLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNGM3ODVjMGVkYyBqcy9yZWJhc2UtY29uZmlnLWJpdGZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOGU5ZmUxNmM4NyBlcy9kb2MtZ2l0c3VibW9kdWxlcy1tYXJrdXAgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIyLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIyLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMjc2MmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjIuMS50eHQKQEAgLTAsMCArMSwxNTAgQEAKK0dpdCAyLjIyLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjIyCistLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIHJlbGF0aXZlIHBhdGhuYW1lIGdpdmVuIHRvICJnaXQgaW5pdCAtLXRlbXBsYXRlPTxwYXRoPiA8cmVwbz4iCisgICBvdWdodCB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5ICJnaXQgaW5pdCIgZ2V0cyBpbnZva2VkIGluLAorICAgYnV0IGl0IGluc3RlYWQgd2FzIG1hZGUgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnksIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqICJnaXQgd29ya3RyZWUgYWRkIiB1c2VkIHRvIGZhaWwgd2hlbiBhbm90aGVyIHdvcmt0cmVlIGNvbm5lY3RlZCB0bworICAgdGhlIHNhbWUgcmVwb3NpdG9yeSB3YXMgY29ycnVwdCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgb3duZXJzaGlwIHJ1bGUgZm9yIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gZmFzdC1pbXBvcnQgcmVtb3RlCisgICBiYWNrZW5kIHdhcyBtaXhlZCB1cCwgbGVhZGluZyB0byB1bnJlbGF0ZWQgZmlsZSBkZXNjcmlwdG9yIGdldHRpbmcKKyAgIGNsb3NlZCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIiB1c2VkIHRvIGxlYXZlIHN0YWxlIHBhY2tmaWxlcyBpbiBpdHMKKyAgIG91dHB1dCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgc2VydmVyIHNpZGUgc3VwcG9ydCBmb3IgImdpdCBmZXRjaCIgdXNlZCB0byBzaG93IGluY29ycmVjdAorICAgdmFsdWUgZm9yIHRoZSBIRUFEIHN5bWJvbGljIHJlZiB3aGVuIHRoZSBuYW1lc3BhY2UgZmVhdHVyZSBpcyBpbgorICAgdXNlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgYW0gLWkgLS1yZXNvbHZlZCIgc2VnZmF1bHRlZCBhZnRlciB0cnlpbmcgdG8gc2VlIGEgY29tbWl0IGFzCisgICBpZiBpdCB3ZXJlIGEgdHJlZSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGJ1bmRsZSB2ZXJpZnkiIG5lZWRzIHRvIHNlZSBpZiBwcmVyZXF1aXNpdGUgb2JqZWN0cyBleGlzdCBpbgorICAgdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5LCBidXQgdGhlIGNvbW1hbmQgZGlkIG5vdCBjaGVjayBpZiB3ZSBhcmUKKyAgIGluIGEgcmVwb3NpdG9yeSB1cGZyb250LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgbWVyZ2UgLS1zcXVhc2giIGlzIGRlc2lnbmVkIHRvIHVwZGF0ZSB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUKKyAgIGluZGV4IHdpdGhvdXQgY3JlYXRpbmcgdGhlIGNvbW1pdCwgYW5kIHRoaXMgY2Fubm90IGJlIGNvdW50ZXJtYW5kZWQKKyAgIGJ5IGFkZGluZyB0aGUgIi0tY29tbWl0IiBvcHRpb247IHRoZSBjb21tYW5kIG5vdyByZWZ1c2VzIHRvIHdvcmsKKyAgIHdoZW4gYm90aCBvcHRpb25zIGFyZSBnaXZlbi4KKworICogVGhlIGRhdGEgY29sbGVjdGVkIGJ5IGZzbW9uaXRvciB3YXMgbm90IHByb3Blcmx5IHdyaXR0ZW4gYmFjayB0bworICAgdGhlIG9uLWRpc2sgaW5kZXggZmlsZSwgYnJlYWtpbmcgdDc1MTkgdGVzdHMgb2NjYXNpb25hbGx5LCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBVcGRhdGUgdG8gVW5pY29kZSAxMi4xIHdpZHRoIHRhYmxlLgorCisgKiBUaGUgY29tbWFuZCBsaW5lIHRvIGludm9rZSBhICJnaXQgY2F0LWZpbGUiIGNvbW1hbmQgZnJvbSBpbnNpZGUKKyAgICJnaXQgcDQiIHdhcyBub3QgcHJvcGVybHkgcXVvdGVkIHRvIHByb3RlY3QgYSBjYXJldCBhbmQgcnVubmluZyBhCisgICBicm9rZW4gY29tbWFuZCBvbiBXaW5kb3dzLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgcmVxdWVzdC1wdWxsIiBsZWFybmVkIHRvIHdhcm4gd2hlbiB0aGUgcmVmIHdlIGFzayB0aGVtIHRvIHB1bGwKKyAgIGZyb20gaW4gdGhlIGxvY2FsIHJlcG9zaXRvcnkgYW5kIGluIHRoZSBwdWJsaXNoZWQgcmVwb3NpdG9yeSBhcmUKKyAgIGRpZmZlcmVudC4KKworICogV2hlbiBjcmVhdGluZyBhIHBhcnRpYWwgY2xvbmUsIHRoZSBvYmplY3QgZmlsdGVyaW5nIGNyaXRlcmlhIGlzCisgICByZWNvcmRlZCBmb3IgdGhlIG9yaWdpbiBvZiB0aGUgY2xvbmUsIGJ1dCB0aGlzIGluY29ycmVjdGx5IHVzZWQgYQorICAgaGFyZGNvZGVkIG5hbWUgIm9yaWdpbiIgdG8gbmFtZSB0aGF0IHJlbW90ZTsgaXQgaGFzIGJlZW4gY29ycmVjdGVkCisgICB0byBob25vciB0aGUgIi0tb3JpZ2luIDxuYW1lPiIgb3B0aW9uLgorCisgKiAiZ2l0IGZldGNoIiBpbnRvIGEgbGF6eSBjbG9uZSBmb3Jnb3QgdG8gZmV0Y2ggYmFzZSBvYmplY3RzIHRoYXQgYXJlCisgICBuZWNlc3NhcnkgdG8gY29tcGxldGUgZGVsdGEgaW4gYSB0aGluIHBhY2tmaWxlLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBUaGUgZmlsdGVyX2RhdGEgdXNlZCBpbiB0aGUgbGlzdC1vYmplY3RzLWZpbHRlciAod2hpY2ggbWFuYWdlcyBhCisgICBsYXppbHkgc3BhcnNlIGNsb25lIHJlcG9zaXRvcnkpIGRpZCBub3QgdXNlIHRoZSBkeW5hbWljIGFycmF5IEFQSQorICAgY29ycmVjdGx5LS0tJ25yJyBpcyBzdXBwb3NlZCB0byBwb2ludCBhdCBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50CisgICBvZiB0aGUgYXJyYXkgaW4gdXNlLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBkZXNjcmlwdGlvbiBhYm91dCBzbGFzaGVzIGluIGdpdGlnbm9yZSBwYXR0ZXJucyAodXNlZCB0bworICAgaW5kaWNhdGUgdGhpbmdzIGxpa2UgImFuY2hvcmVkIHRvIHRoaXMgbGV2ZWwgb25seSIgYW5kICJvbmx5CisgICBtYXRjaGVzIGRpcmVjdG9yaWVzIikgaGFzIGJlZW4gcmV2YW1wZWQuCisKKyAqIFRoZSBVUkwgZGVjb2RpbmcgY29kZSBoYXMgYmVlbiB1cGRhdGVkIHRvIGF2b2lkIGdvaW5nIHBhc3QgdGhlIGVuZAorICAgb2YgdGhlIHN0cmluZyB3aGlsZSBwYXJzaW5nICUtPGhleD4tPGhleD4gc2VxdWVuY2UuCisKKyAqIFRoZSBsaXN0IG9mIGZvci1lYWNoIGxpa2UgbWFjcm9zIHVzZWQgYnkgY2xhbmctZm9ybWF0IGhhcyBiZWVuCisgICB1cGRhdGVkLgorCisgKiAiZ2l0IHB1c2ggLS1hdG9taWMiIHRoYXQgZ29lcyBvdmVyIHRoZSB0cmFuc3BvcnQtaGVscGVyIChuYW1lbHksCisgICB0aGUgc21hcnQgaHR0cCB0cmFuc3BvcnQpIGZhaWxlZCB0byBwcmV2ZW50IHJlZnMgdG8gYmUgcHVzaGVkIHdoZW4KKyAgIGl0IGNhbiBsb2NhbGx5IHRlbGwgdGhhdCBvbmUgb2YgdGhlIHJlZiB1cGRhdGUgd2lsbCBmYWlsIHdpdGhvdXQKKyAgIGhhdmluZyB0byBjb25zdWx0IHRoZSBvdGhlciBlbmQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBjbGVhbiIgc2lsZW50bHkgc2tpcHBlZCBhIHBhdGggd2hlbiBpdCBjYW5ub3QgbHN0YXQoKSBpdDsgbm93CisgICBpdCBnaXZlcyBhIHdhcm5pbmcuCisKKyAqIEEgY29kZXBhdGggdGhhdCByZWFkcyBmcm9tIEdQRyBmb3Igc2lnbmVkIG9iamVjdCB2ZXJpZmljYXRpb24gcmVhZAorICAgcGFzdCB0aGUgZW5kIG9mIGFsbG9jYXRlZCBidWZmZXIsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IHJtIiB0byByZXNvbHZlIGEgY29uZmxpY3RlZCBwYXRoIGxlYWtlZCBhbiBpbnRlcm5hbCBtZXNzYWdlCisgICAibmVlZHMgbWVyZ2UiIGJlZm9yZSBhY3R1YWxseSByZW1vdmluZyB0aGUgcGF0aCwgd2hpY2ggd2FzCisgICBjb25mdXNpbmcuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlICJnaXQgY2xvbmUiIGRvY3VtZW50YXRpb24gcmVmZXJzIHRvIGNvbW1hbmQgbGluZSBvcHRpb25zIGluIGl0cworICAgZGVzY3JpcHRpb24gaW4gdGhlIHNob3J0IGZvcm07IHRoZXkgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggbG9uZworICAgZm9ybXMgdG8gbWFrZSB0aGVtIG1vcmUgcmVjb2duaXNhYmxlLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSByZWJhc2UucmVzY2hlZHVsZUZhaWxlZEV4ZWMgc2hvdWxkIGJlCisgICBlZmZlY3RpdmUgb25seSB3aGlsZSBydW5uaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZSBhbmQgc2hvdWxkIG5vdAorICAgYWZmZWN0IGFueXRoaW5nIHdoZW4gcnVubmluZyBhIG5vbi1pbnRlcmFjdGl2ZSBvbmUsIHdoaWNoIHdhcyBub3QKKyAgIHRoZSBjYXNlLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgc3VibW9kdWxlIGZvcmVhY2giIGRpZCBub3QgcHJvdGVjdCBjb21tYW5kIGxpbmUgb3B0aW9ucyBwYXNzZWQKKyAgIHRvIHRoZSBjb21tYW5kIHRvIGJlIHJ1biBpbiBlYWNoIHN1Ym1vZHVsZSBjb3JyZWN0bHksIHdoZW4gdGhlCisgICAiLS1yZWN1cnNpdmUiIG9wdGlvbiB3YXMgaW4gdXNlLgorCisgKiBVc2UgIkVyYXNlIGluIExpbmUiIENTSSBzZXF1ZW5jZSB0aGF0IGlzIGFscmVhZHkgdXNlZCBpbiB0aGUgZWRpdG9yCisgICBzdXBwb3J0IHRvIGNsZWFyIGNydWZ0IGluIHRoZSBwcm9ncmVzcyBvdXRwdXQuCisKKyAqIFRoZSBjb2RlcGF0aCB0byBjb21wdXRlIGRlbHRhIGlzbGFuZHMgdXNlZCB0byBzcGV3IHByb2dyZXNzIG91dHB1dAorICAgd2l0aG91dCBnaXZpbmcgdGhlIGNhbGxlcnMgYW55IHdheSB0byBzcXVlbGNoIGl0LCB3aGljaCBoYXMgYmVlbgorICAgZml4ZWQuCisKKyAqIFRoZSBjb2RlIHRvIHBhcnNlIHNjYWxlZCBudW1iZXJzIG91dCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGhhcworICAgYmVlbiBtYWRlIG1vcmUgcm9idXN0IGFuZCBhbHNvIGVhc2llciB0byBmb2xsb3cuCisKKyAqIEFuIGluY29ycmVjdCBsaXN0IG9mIG9wdGlvbnMgd2FzIGNhY2hlZCBhZnRlciBjb21tYW5kIGxpbmUKKyAgIGNvbXBsZXRpb24gZmFpbGVkIChlLmcuIHRyeWluZyB0byBjb21wbGV0ZSBhIGNvbW1hbmQgdGhhdCByZXF1aXJlcworICAgYSByZXBvc2l0b3J5IG91dHNpZGUgb25lKSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHJlYmFzZSAtLWFib3J0IiB1c2VkIHRvIGxlYXZlIHJlZnMvcmV3cml0dGVuLyB3aGVuIGNvbmNsdWRpbmcKKyAgICJnaXQgcmViYXNlIC1yIiwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHN0YXNoIHNob3cgMjMiIHVzZWQgdG8gd29yaywgYnV0IG5vIG1vcmUgYWZ0ZXIgZ2V0dGluZworICAgcmV3cml0dGVuIGluIEM7IHRoaXMgcmVncmVzc2lvbiBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIiBhbHdheXMgdHJlYXRlZCAnIycgYXMgdGhlIGNvbW1lbnQKKyAgIGNoYXJhY3RlciwgcmVnYXJkbGVzcyBvZiBjb3JlLmNvbW1lbnRDaGFyIHNldHRpbmcsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIENvZGUgY2xlYW4tdXAgdG8gYXZvaWQgc2lnbmVkIGludGVnZXIgb3ZlcmxhcHMgZHVyaW5nIGJpbmFyeSBzZWFyY2guCisKKyAqICJnaXQgY2hlY2tvdXQgLXAiIG5lZWRzIHRvIHNlbGVjdGl2ZWx5IGFwcGx5IGEgcGF0Y2ggaW4gcmV2ZXJzZSwKKyAgIHdoaWNoIGRpZCBub3Qgd29yayB3ZWxsLgorCisgKiBUaGUgY29tbWl0LWdyYXBoIGZpbGUgaXMgbm93IHBhcnQgb2YgdGhlICJmaWxlcyB0aGF0IHRoZSBydW50aW1lCisgICBtYXkga2VlcCBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgb24sIGFsbCBvZiB3aGljaCB3b3VsZCBuZWVkIHRvIGJlCisgICBjbG9zZWQgd2hlbiBkb25lIHdpdGggdGhlIG9iamVjdCBzdG9yZSIsIGFuZCB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvCisgICBhbiBleGlzdGluZyBjb21taXQtZ3JhcGggZmlsZSBub3cgaXMgY2xvc2VkIGJlZm9yZSAiZ2MiIGZpbmFsaXplcyBhCisgICBuZXcgaW5zdGFuY2UgdG8gcmVwbGFjZSBpdC4KKworICogQ29kZSByZXN0cnVjdHVyaW5nIGR1cmluZyAyLjIwIHBlcmlvZCBicm9rZSBmZXRjaGluZyB0YWdzIHZpYQorICAgImltcG9ydCIgYmFzZWQgdHJhbnNwb3J0cy4KKworICogV2UgaGF2ZSBiZWVuIHRyeWluZyBvdXQgYSBmZXcgbGFuZ3VhZ2UgZmVhdHVyZXMgb3V0c2lkZSBjODk7IHRoZQorICAgY29kaW5nIGd1aWRlbGluZXMgZG9jdW1lbnQgZGlkIG5vdCB0YWxrIGFib3V0IHRoZW0gYW5kIGluc3RlYWQgaGFkCisgICBhIGJsYW5rZXQgYmFuIGFnYWluc3QgdGhlbS4KKworICogVGhlIGludGVybmFsIGRpZmYgbWFjaGluZXJ5IGNhbiBiZSBtYWRlIHRvIHJlYWQgb3V0IG9mIGJvdW5kcyB3aGlsZQorICAgbG9va2luZyBmb3IgLS1mdW5jaW9uLWNvbnRleHQgbGluZSBpbiBhIGNvcm5lciBjYXNlLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBjb2RlIGNsZWFuLXVwcyBhbmQgbWlub3IgZml4dXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIyLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIyLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MGEyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjIuMi50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjIuMjIuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdXAgdGhlIGZpeGVzIHRoYXQgYXBwZWFyIGluIHYyLjE0LjYsIHYyLjE1LjQsCit2Mi4xNy4zLCB2Mi4yMC4yIGFuZCBpbiB2Mi4yMS4xLCBhZGRyZXNzaW5nIHRoZSBzZWN1cml0eSBpc3N1ZXMKK0NWRS0yMDE5LTEzNDgsIENWRS0yMDE5LTEzNDksIENWRS0yMDE5LTEzNTAsIENWRS0yMDE5LTEzNTEsCitDVkUtMjAxOS0xMzUyLCBDVkUtMjAxOS0xMzUzLCBDVkUtMjAxOS0xMzU0LCBDVkUtMjAxOS0xMzg3LCBhbmQKK0NWRS0yMDE5LTE5NjA0OyBzZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRob3NlIHZlcnNpb25zIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIyLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIyLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3Mjk2ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjIuMy50eHQKQEAgLTAsMCArMSw1IEBACitHaXQgdjIuMjIuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdGhlIHNlY3VyaXR5IGZpeCB0aGF0IGFwcGVhcnMgaW4gdjIuMTcuNDsgc2VlCit0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhhdCB2ZXJzaW9uIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIyLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIyLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWYzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjIuNC50eHQKQEAgLTAsMCArMSw1IEBACitHaXQgdjIuMjIuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdGhlIHNlY3VyaXR5IGZpeCB0aGF0IGFwcGVhcnMgaW4gdjIuMTcuNTsgc2VlCit0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhhdCB2ZXJzaW9uIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIzLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIzLjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYzRlNzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjMuMC50eHQKQEAgLTAsMCArMSwzNDggQEAKK0dpdCAyLjIzIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2Mi4yMgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGUKKworICogVGhlICItLWJhc2UiIG9wdGlvbiBvZiAiZm9ybWF0LXBhdGNoIiBjb21wdXRlZCB0aGUgcGF0Y2gtaWRzIGZvcgorICAgcHJlcmVxdWlzaXRlIHBhdGNoZXMgaW4gYW4gdW5zdGFibGUgd2F5LCB3aGljaCBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBjb21wdXRlIGluIGEgd2F5IHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoICJnaXQgcGF0Y2gtaWQgLS1zdGFibGUiLgorCisgKiBUaGUgImdpdCBsb2ciIGNvbW1hbmQgYnkgZGVmYXVsdCBiZWhhdmVzIGFzIGlmIHRoZSAtLW1haWxtYXAgb3B0aW9uCisgICB3YXMgZ2l2ZW4uCisKKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIFRoZSAiZ2l0IGZhc3QtZXhwb3J0L2ltcG9ydCIgcGFpciBoYXMgYmVlbiB0YXVnaHQgdG8gaGFuZGxlIGNvbW1pdHMKKyAgIHdpdGggbG9nIG1lc3NhZ2VzIGluIGVuY29kaW5nIG90aGVyIHRoYW4gVVRGLTggYmV0dGVyLgorCisgKiBJbiByZWNlbnQgdmVyc2lvbnMgb2YgR2l0LCBwZXItd29ya3RyZWUgcmVmcyBhcmUgZXhwb3NlZCBpbgorICAgcmVmcy93b3JrdHJlZXMvPHd0bmFtZT4vIGhpZXJhcmNoeSwgd2hpY2ggbWVhbnMgdGhhdCB3b3JrdHJlZSBuYW1lcworICAgbXVzdCBiZSBhIHZhbGlkIHJlZm5hbWUgY29tcG9uZW50LiAgVGhlIGNvZGUgbm93IHNhbml0aXplcyB0aGUgbmFtZXMKKyAgIGdpdmVuIHRvIHdvcmt0cmVlcywgdG8gbWFrZSBzdXJlIHRoZXNlIHJlZnMgYXJlIHdlbGwtZm9ybWVkLgorCisgKiAiZ2l0IG1lcmdlIiBsZWFybmVkICItLXF1aXQiIG9wdGlvbiB0aGF0IGNsZWFucyB1cCB0aGUgaW4tcHJvZ3Jlc3MKKyAgIG1lcmdlIHdoaWxlIGxlYXZpbmcgdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IHN0aWxsIGluIGEgbWVzcy4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJucyBhIGNvbmZpZ3VyYXRpb24gdG8gc2V0IHRoZSBkZWZhdWx0IGZvcgorICAgaXRzIC0tbm90ZXM9PHJlZj4gb3B0aW9uLgorCisgKiBUaGUgY29kZSB0byBzaG93IGFyZ3Mgd2l0aCBwb3RlbnRpYWwgdHlwbyB0aGF0IGNhbm5vdCBiZQorICAgaW50ZXJwcmV0ZWQgYXMgYSBjb21taXQtaXNoIGhhcyBiZWVuIGltcHJvdmVkLgorCisgKiAiZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIiBsZWFybmVkIHRvIHNldCB1cCB0aGUgc3VibW9kdWxlcworICAgdG8gaWdub3JlIGNvbW1pdCBvYmplY3QgbmFtZXMgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCBnaXRsaW5rCisgICBhbmQgaW5zdGVhZCB1c2UgdGhlIGNvbW1pdHMgdGhhdCBoYXBwZW4gdG8gYmUgYXQgdGhlIHRpcCBvZiB0aGUKKyAgIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBmcm9tIHRoZSBnZXQtZ28sIGJ5IHBhc3NpbmcgdGhlIG5ldworICAgIi0tcmVtb3RlLXN1Ym1vZHVsZXMiIG9wdGlvbi4KKworICogVGhlIHBhdHRlcm4gImdpdCBkaWZmL2dyZXAiIHVzZSB0byBleHRyYWN0IGZ1bmNuYW1lIGFuZCB3b3JkcworICAgYm91bmRhcnkgZm9yIE1hdGxhYiBoYXMgYmVlbiBleHRlbmQgdG8gY292ZXIgT2N0YXZlLCB3aGljaCBpcyBtb3JlCisgICBvciBsZXNzIGVxdWl2YWxlbnQuCisKKyAqICJnaXQgaGVscCBnaXQiIHdhcyBoYXJkIHRvIGRpc2NvdmVyICh3ZWxsLCBhdCBsZWFzdCBmb3Igc29tZQorICAgcGVvcGxlKS4KKworICogVGhlIHBhdHRlcm4gImdpdCBkaWZmL2dyZXAiIHVzZSB0byBleHRyYWN0IGZ1bmNuYW1lIGFuZCB3b3JkcworICAgYm91bmRhcnkgZm9yIFJ1c3QgaGFzIGJlZW4gYWRkZWQuCisKKyAqICJnaXQgc3RhdHVzIiBjYW4gYmUgdG9sZCBhIG5vbi1zdGFuZGFyZCBkZWZhdWx0IHZhbHVlIGZvciB0aGUKKyAgICItLVtuby1dYWhlYWQtYmVoaW5kIiBvcHRpb24gd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisgICBzdGF0dXMuYWhlYWRCZWhpbmQuCisKKyAqICJnaXQgZmV0Y2giIGFuZCAiZ2l0IHB1bGwiIHJlcG9ydHMgd2hlbiBhIGZldGNoIHJlc3VsdHMgaW4KKyAgIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcyB0byBsZXQgdGhlIHVzZXIgbm90aWNlIHVudXN1YWwgc2l0dWF0aW9uLgorICAgVGhlIGNvbW1hbmRzIGxlYXJuZWQgIi0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcyIgb3B0aW9uIHRvIGRpc2FibGUKKyAgIHRoaXMgc2FmZXR5IGZlYXR1cmUuCisKKyAqIFR3byBuZXcgY29tbWFuZHMgImdpdCBzd2l0Y2giIGFuZCAiZ2l0IHJlc3RvcmUiIGFyZSBpbnRyb2R1Y2VkIHRvCisgICBzcGxpdCAiY2hlY2tpbmcgb3V0IGEgYnJhbmNoIHRvIHdvcmsgb24gYWR2YW5jaW5nIGl0cyBoaXN0b3J5IiBhbmQKKyAgICJjaGVja2luZyBvdXQgcGF0aHMgb3V0IG9mIHRoZSBpbmRleCBhbmQvb3IgYSB0cmVlLWlzaCB0byB3b3JrIG9uCisgICBhZHZhbmNpbmcgdGhlIGN1cnJlbnQgaGlzdG9yeSIgb3V0IG9mIHRoZSBzaW5nbGUgImdpdCBjaGVja291dCIKKyAgIGNvbW1hbmQuCisKKyAqICJnaXQgYnJhbmNoIC0tbGlzdCIgbGVhcm5lZCB0byBhbHdheXMgb3V0cHV0IHRoZSBkZXRhY2hlZCBIRUFEIGFzCisgICB0aGUgZmlyc3QgaXRlbSAod2hlbiB0aGUgSEVBRCBpcyBkZXRhY2hlZCwgb2YgY291cnNlKSwgcmVnYXJkbGVzcworICAgb2YgdGhlIGxvY2FsZS4KKworICogVGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBtZWNoYW5pc20gbGVhcm5lZCB0byBiYXNlIHRoZSBjaG9pY2Ugb24KKyAgIHRoZSBicmFuY2ggdGhlIEhFQUQgY3VycmVudGx5IGlzIG9uLgorCisgKiAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyIgbGVhcm5lZCB0aGUgIi0tbm8tb2JqZWN0LW5hbWVzIiBvcHRpb24gdG8KKyAgIHNxdWVsY2ggdGhlIHBhdGggdG8gdGhlIG9iamVjdCB0aGF0IGlzIHVzZWQgYXMgYSBncm91cGluZyBoaW50IGZvcgorICAgcGFjay1vYmplY3RzLgorCisgKiBBIG5ldyB0YWcuZ3BnU2lnbiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHR1cm5zICJnaXQgdGFnIC1hIiBpbnRvCisgICAiZ2l0IHRhZyAtcyIuCisKKyAqICJnaXQgbXVsdGktcGFjay1pbmRleCIgbGVhcm5lZCBleHBpcmUgYW5kIHJlcGFjayBzdWJjb21tYW5kcy4KKworICogImdpdCBibGFtZSIgbGVhcm5lZCB0byAiaWdub3JlIiBjb21taXRzIGluIHRoZSBoaXN0b3J5LCB3aG9zZQorICAgZWZmZWN0cyAoYXMgd2VsbCBhcyB0aGVpciBwcmVzZW5jZSkgZ2V0IGlnbm9yZWQuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2svcmV2ZXJ0IiBsZWFybmVkIGEgbmV3ICItLXNraXAiIGFjdGlvbi4KKworICogVGhlIHRpcHMgb2YgcmVmcyBmcm9tIHRoZSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIGNhbiBiZSB1c2VkIGFzCisgICBzdGFydGluZyBwb2ludCBmb3IgcmVhY2hhYmlsaXR5IGNvbXB1dGF0aW9uIG5vdy4KKworICogRXh0cmEgYmxhbmsgbGluZXMgaW4gImdpdCBzdGF0dXMiIG91dHB1dCBoYXZlIGJlZW4gcmVkdWNlZC4KKworICogVGhlIGNvbW1pdHMgaW4gYSByZXBvc2l0b3J5IGNhbiBiZSBkZXNjcmliZWQgYnkgbXVsdGlwbGUKKyAgIGNvbW1pdC1ncmFwaCBmaWxlcyBub3csIHdoaWNoIGFsbG93cyB0aGUgY29tbWl0LWdyYXBoIGZpbGVzIHRvIGJlCisgICB1cGRhdGVkIGluY3JlbWVudGFsbHkuCisKKyAqICJnaXQgcmFuZ2UtZGlmZiIgb3V0cHV0IGhhcyBiZWVuIHR3ZWFrZWQgZm9yIGVhc2llciBpZGVudGlmaWNhdGlvbgorICAgb2Ygd2hpY2ggcGFydCBvZiB3aGF0IGZpbGUgdGhlIHBhdGNoIHNob3duIGlzIGFib3V0LgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIFVwZGF0ZSBzdXBwb3J0aW5nIHBhcnRzIG9mICJnaXQgcmViYXNlIiB0byByZW1vdmUgY29kZSB0aGF0IHNob3VsZAorICAgbm8gbG9uZ2VyIGJlIHVzZWQuCisKKyAqIERldmVsb3BlciBzdXBwb3J0IHRvIGVtdWxhdGUgdW5zYXRpc2ZpZWQgcHJlcmVxdWlzaXRlcyBpbiB0ZXN0cyB0bworICAgZW5zdXJlIHRoYXQgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVzdHMgc3RpbGwgc3VjY2VlZHMgd2hlbiB0ZXN0cworICAgd2l0aCBwcmVyZXF1aXNpdGVzIGFyZSBza2lwcGVkLgorCisgKiAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyIgbGVhcm5lZCBub3QgdG8gcmV3cml0ZSB0aGUgZmlsZSB3aXRoIHRoZQorICAgc2FtZSBjb250ZW50cy4KKworICogVGhlIHdheSBvZiBzcGVjaWZ5aW5nIHRoZSBwYXRoIHRvIGZpbmQgZHluYW1pYyBsaWJyYXJpZXMgYXQgcnVudGltZQorICAgaGFzIGJlZW4gc2ltcGxpZmllZC4gIFRoZSBvbGQgZGVmYXVsdCB0byBwYXNzIC1SL3BhdGgvdG8vZGlyIGhhcyBiZWVuCisgICByZXBsYWNlZCB3aXRoIHRoZSBuZXcgZGVmYXVsdCB0byBwYXNzIC1XbCwtcnBhdGgsL3BhdGgvdG8vZGlyLAorICAgd2hpY2ggaXMgdGhlIG1vcmUgcmVjZW50IEdDQyB1c2VzLiAgVGhvc2Ugd2hvIG5lZWQgdG8gYnVpbGQgd2l0aCBhbgorICAgb2xkIEdDQyBjYW4gc3RpbGwgdXNlICJDQ19MRF9EWU5QQVRIPS1SIgorCisgKiBQcmVwYXJlIHVzZSBvZiByZWFjaGFiaWxpdHkgaW5kZXggaW4gdG9wb2xvZ2ljYWwgd2Fsa2VyIHRoYXQgd29ya3MKKyAgIG9uIGEgcmFuZ2UgKEEuLkIpLgorCisgKiBBIG5ldyB0dXRvcmlhbCB0YXJnZXRpbmcgc3BlY2lmaWNhbGx5IGFzcGlyaW5nIGdpdC1jb3JlCisgICBkZXZlbG9wZXJzIGhhcyBiZWVuIGFkZGVkLgorCisgKiBBdXRvLWRldGVjdCBob3cgdG8gdGVsbCBIUC1VWCBhQ0Mgd2hlcmUgdG8gdXNlIGR5bmFtaWNhbGx5IGxpbmtlZAorICAgbGlicmFyaWVzIGZyb20gYXQgcnVudGltZS4KKworICogImdpdCBtZXJnZXRvb2wiIGFuZCBpdHMgdGVzdHMgbm93IHNwYXduIGZld2VyIHN1YnByb2Nlc3Nlcy4KKworICogRGV2IHN1cHBvcnQgdXBkYXRlIHRvIGhlbHAgdHJhY2luZyBvdXQgdGVzdHMuCisKKyAqIFN1cHBvcnQgdG8gYnVpbGQgd2l0aCBNU1ZDIGhhcyBiZWVuIHVwZGF0ZWQuCisKKyAqICJnaXQgZmV0Y2giIHRoYXQgZ3JhYnMgZnJvbSBhIGdyb3VwIG9mIHJlbW90ZXMgbGVhcm5lZCB0byBydW4gdGhlCisgICBhdXRvLWdjIG9ubHkgb25jZSBhdCB0aGUgdmVyeSBlbmQuCisKKyAqIEEgaGFuZGZ1bCBvZiBXaW5kb3dzIGJ1aWxkIHBhdGNoZXMgaGF2ZSBiZWVuIHVwc3RyZWFtZWQuCisKKyAqIFRoZSBjb2RlIHRvIHJlYWQgc3RhdGUgZmlsZXMgdXNlZCBieSB0aGUgc2VxdWVuY2VyIG1hY2hpbmVyeSBmb3IKKyAgICJnaXQgc3RhdHVzIiBoYXMgYmVlbiBtYWRlIG1vcmUgcm9idXN0IGFnYWluc3QgYSBjb3JydXB0IG9yIHN0YWxlCisgICBzdGF0ZSBmaWxlcy4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIHdpdGggbXVsdGlwbGUgcGF0dGVybnMgaGF2ZSBiZWVuIG9wdGltaXplZC4KKworICogVGhlIHRyZWUtd2FsayBBUEkgbGVhcm5lZCB0byBwYXNzIGFuIGluLWNvcmUgcmVwb3NpdG9yeQorICAgaW5zdGFuY2UgdGhyb3VnaG91dCBtb3JlIGNvZGVwYXRocy4KKworICogV2hlbiBvbmUgc3RlcCBpbiBtdWx0aSBzdGVwIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyByZXNldCBvcgorICAgY29tbWl0dGVkLCB0aGUgY29tbWFuZCBsaW5lIHByb21wdCBzY3JpcHQgZmFpbGVkIHRvIG5vdGljZSB0aGUKKyAgIGN1cnJlbnQgc3RhdHVzLCB3aGljaCBoYXMgYmVlbiBpbXByb3ZlZC4KKworICogTWFueSBHSVRfVEVTVF8qIGVudmlyb25tZW50IHZhcmlhYmxlcyBjb250cm9sIHZhcmlvdXMgYXNwZWN0cyBvZgorICAgaG93IG91ciB0ZXN0cyBhcmUgcnVuLCBidXQgYSBmZXcgZm9sbG93ZWQgIm5vbi1lbXB0eSBpcyB0cnVlLCBlbXB0eQorICAgb3IgdW5zZXQgaXMgZmFsc2UiIHdoaWxlIG90aGVycyBmb2xsb3dlZCB0aGUgdXN1YWwgInRoZXJlIGFyZSBhIGZldworICAgd2F5cyB0byBzcGVsbCB0cnVlLCBsaWtlIHllcywgb24sIGV0Yy4sIGFuZCBhbHNvIHdheXMgdG8gc3BlbGwKKyAgIGZhbHNlLCBsaWtlIG5vLCBvZmYsIGV0Yy4iIGNvbnZlbnRpb24uCisKKyAqIEFkanVzdCB0aGUgZGlyLWl0ZXJhdG9yIEFQSSBhbmQgYXBwbHkgaXQgdG8gdGhlIGxvY2FsIGNsb25lCisgICBvcHRpbWl6YXRpb24gY29kZXBhdGguCisKKyAqIFdlIGhhdmUgYmVlbiB0cnlpbmcgb3V0IGEgZmV3IGxhbmd1YWdlIGZlYXR1cmVzIG91dHNpZGUgYzg5OyB0aGUKKyAgIGNvZGluZyBndWlkZWxpbmVzIGRvY3VtZW50IGRpZCBub3QgdGFsayBhYm91dCB0aGVtIGFuZCBpbnN0ZWFkIGhhZAorICAgYSBibGFua2V0IGJhbiBhZ2FpbnN0IHRoZW0uCisKKyAqIEEgdGVzdCBoZWxwZXIgaGFzIGJlZW4gaW50cm9kdWNlZCB0byBvcHRpbWl6ZSBwcmVwYXJhdGlvbiBvZiB0ZXN0CisgICByZXBvc2l0b3JpZXMgd2l0aCBtYW55IHNpbXBsZSBjb21taXRzLCBhbmQgYSBoYW5kZnVsIG9mIHRlc3QKKyAgIHNjcmlwdHMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdXNlIGl0LgorCisKK0ZpeGVzIHNpbmNlIHYyLjIyCistLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIHJlbGF0aXZlIHBhdGhuYW1lIGdpdmVuIHRvICJnaXQgaW5pdCAtLXRlbXBsYXRlPTxwYXRoPiA8cmVwbz4iCisgICBvdWdodCB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5ICJnaXQgaW5pdCIgZ2V0cyBpbnZva2VkIGluLAorICAgYnV0IGl0IGluc3RlYWQgd2FzIG1hZGUgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnksIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqICJnaXQgd29ya3RyZWUgYWRkIiB1c2VkIHRvIGZhaWwgd2hlbiBhbm90aGVyIHdvcmt0cmVlIGNvbm5lY3RlZCB0bworICAgdGhlIHNhbWUgcmVwb3NpdG9yeSB3YXMgY29ycnVwdCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgb3duZXJzaGlwIHJ1bGUgZm9yIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gZmFzdC1pbXBvcnQgcmVtb3RlCisgICBiYWNrZW5kIHdhcyBtaXhlZCB1cCwgbGVhZGluZyB0byBhbiB1bnJlbGF0ZWQgZmlsZSBkZXNjcmlwdG9yIGdldHRpbmcKKyAgIGNsb3NlZCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIEEgIm1lcmdlIC1jIiBpbnN0cnVjdGlvbiBkdXJpbmcgImdpdCByZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIiBzaG91bGQKKyAgIGdpdmUgdGhlIHVzZXIgYSBjaGFuY2UgdG8gZWRpdCB0aGUgbG9nIG1lc3NhZ2UsIGV2ZW4gd2hlbiB0aGVyZSBpcworICAgb3RoZXJ3aXNlIG5vIG5lZWQgdG8gY3JlYXRlIGEgbmV3IG1lcmdlIGFuZCByZXBsYWNlIHRoZSBleGlzdGluZworICAgb25lIChpLmUuIGZhc3QtZm9yd2FyZCBpbnN0ZWFkKSwgYnV0IGRpZCBub3QuICBXaGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBDb2RlIGNsZWFudXAgYW5kIGZ1dHVyZXByb29mLgorCisgKiBNb3JlIHBhcmFtZXRlciB2YWxpZGF0aW9uLgorCisgKiAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyIgdXNlZCB0byBsZWF2ZSBzdGFsZSBwYWNrZmlsZXMgaW4gaXRzCisgICBvdXRwdXQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIHNlcnZlciBzaWRlIHN1cHBvcnQgZm9yICJnaXQgZmV0Y2giIHVzZWQgdG8gc2hvdyBpbmNvcnJlY3QKKyAgIHZhbHVlIGZvciB0aGUgSEVBRCBzeW1ib2xpYyByZWYgd2hlbiB0aGUgbmFtZXNwYWNlIGZlYXR1cmUgaXMgaW4KKyAgIHVzZSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGFtIC1pIC0tcmVzb2x2ZWQiIHNlZ2ZhdWx0ZWQgYWZ0ZXIgdHJ5aW5nIHRvIHNlZSBhIGNvbW1pdCBhcworICAgaWYgaXQgd2VyZSBhIHRyZWUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBidW5kbGUgdmVyaWZ5IiBuZWVkcyB0byBzZWUgaWYgcHJlcmVxdWlzaXRlIG9iamVjdHMgZXhpc3QgaW4KKyAgIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeSwgYnV0IHRoZSBjb21tYW5kIGRpZCBub3QgY2hlY2sgaWYgd2UgYXJlCisgICBpbiBhIHJlcG9zaXRvcnkgdXBmcm9udCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IG1lcmdlIC0tc3F1YXNoIiBpcyBkZXNpZ25lZCB0byB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlCisgICBpbmRleCB3aXRob3V0IGNyZWF0aW5nIHRoZSBjb21taXQsIGFuZCB0aGlzIGNhbm5vdCBiZSBjb3VudGVybWFuZGVkCisgICBieSBhZGRpbmcgdGhlICItLWNvbW1pdCIgb3B0aW9uOyB0aGUgY29tbWFuZCBub3cgcmVmdXNlcyB0byB3b3JrCisgICB3aGVuIGJvdGggb3B0aW9ucyBhcmUgZ2l2ZW4uCisKKyAqIFRoZSBkYXRhIGNvbGxlY3RlZCBieSBmc21vbml0b3Igd2FzIG5vdCBwcm9wZXJseSB3cml0dGVuIGJhY2sgdG8KKyAgIHRoZSBvbi1kaXNrIGluZGV4IGZpbGUsIGJyZWFraW5nIHQ3NTE5IHRlc3RzIG9jY2FzaW9uYWxseSwgd2hpY2gKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVXBkYXRlIHRvIFVuaWNvZGUgMTIuMSB3aWR0aCB0YWJsZS4KKworICogVGhlIGNvbW1hbmQgbGluZSB0byBpbnZva2UgYSAiZ2l0IGNhdC1maWxlIiBjb21tYW5kIGZyb20gaW5zaWRlCisgICAiZ2l0IHA0IiB3YXMgbm90IHByb3Blcmx5IHF1b3RlZCB0byBwcm90ZWN0IGEgY2FyZXQgYW5kIHJ1bm5pbmcgYQorICAgYnJva2VuIGNvbW1hbmQgb24gV2luZG93cywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHJlcXVlc3QtcHVsbCIgbGVhcm5lZCB0byB3YXJuIHdoZW4gdGhlIHJlZiB3ZSBhc2sgdGhlbSB0byBwdWxsCisgICBmcm9tIGluIHRoZSBsb2NhbCByZXBvc2l0b3J5IGFuZCBpbiB0aGUgcHVibGlzaGVkIHJlcG9zaXRvcnkgYXJlCisgICBkaWZmZXJlbnQuCisKKyAqIFdoZW4gY3JlYXRpbmcgYSBwYXJ0aWFsIGNsb25lLCB0aGUgb2JqZWN0IGZpbHRlcmluZyBjcml0ZXJpYSBpcworICAgcmVjb3JkZWQgZm9yIHRoZSBvcmlnaW4gb2YgdGhlIGNsb25lLCBidXQgdGhpcyBpbmNvcnJlY3RseSB1c2VkIGEKKyAgIGhhcmRjb2RlZCBuYW1lICJvcmlnaW4iIHRvIG5hbWUgdGhhdCByZW1vdGU7IGl0IGhhcyBiZWVuIGNvcnJlY3RlZAorICAgdG8gaG9ub3IgdGhlICItLW9yaWdpbiA8bmFtZT4iIG9wdGlvbi4KKworICogImdpdCBmZXRjaCIgaW50byBhIGxhenkgY2xvbmUgZm9yZ290IHRvIGZldGNoIGJhc2Ugb2JqZWN0cyB0aGF0IGFyZQorICAgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIGRlbHRhIGluIGEgdGhpbiBwYWNrZmlsZSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogVGhlIGZpbHRlcl9kYXRhIHVzZWQgaW4gdGhlIGxpc3Qtb2JqZWN0cy1maWx0ZXIgKHdoaWNoIG1hbmFnZXMgYQorICAgbGF6aWx5IHNwYXJzZSBjbG9uZSByZXBvc2l0b3J5KSBkaWQgbm90IHVzZSB0aGUgZHluYW1pYyBhcnJheSBBUEkKKyAgIGNvcnJlY3RseS0tLSducicgaXMgc3VwcG9zZWQgdG8gcG9pbnQgYXQgb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudAorICAgb2YgdGhlIGFycmF5IGluIHVzZS4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgZGVzY3JpcHRpb24gYWJvdXQgc2xhc2hlcyBpbiBnaXRpZ25vcmUgcGF0dGVybnMgKHVzZWQgdG8KKyAgIGluZGljYXRlIHRoaW5ncyBsaWtlICJhbmNob3JlZCB0byB0aGlzIGxldmVsIG9ubHkiIGFuZCAib25seQorICAgbWF0Y2hlcyBkaXJlY3RvcmllcyIpIGhhcyBiZWVuIHJldmFtcGVkLgorCisgKiBUaGUgVVJMIGRlY29kaW5nIGNvZGUgaGFzIGJlZW4gdXBkYXRlZCB0byBhdm9pZCBnb2luZyBwYXN0IHRoZSBlbmQKKyAgIG9mIHRoZSBzdHJpbmcgd2hpbGUgcGFyc2luZyAlLTxoZXg+LTxoZXg+IHNlcXVlbmNlLgorCisgKiBUaGUgbGlzdCBvZiBmb3ItZWFjaCBsaWtlIG1hY3JvcyB1c2VkIGJ5IGNsYW5nLWZvcm1hdCBoYXMgYmVlbgorICAgdXBkYXRlZC4KKworICogImdpdCBicmFuY2ggLS1saXN0IiBsZWFybmVkIHRvIHNob3cgYnJhbmNoZXMgdGhhdCBhcmUgY2hlY2tlZCBvdXQKKyAgIGluIG90aGVyIHdvcmt0cmVlcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgcmVwb3NpdG9yeSBwcmVmaXhlZCB3aXRoCisgICAnKycsIHNpbWlsYXIgdG8gdGhlIHdheSB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaCBpcyBzaG93bgorICAgd2l0aCAnKicgaW4gZnJvbnQuCisgICAobWVyZ2UgNmU5MzgxNDY5ZSBuYi9icmFuY2gtc2hvdy1vdGhlci13b3JrdHJlZXMtaGVhZCBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgcmVzdHJ1Y3R1cmluZyBkdXJpbmcgMi4yMCBwZXJpb2QgYnJva2UgZmV0Y2hpbmcgdGFncyB2aWEKKyAgICJpbXBvcnQiIGJhc2VkIHRyYW5zcG9ydHMuCisKKyAqIFRoZSBjb21taXQtZ3JhcGggZmlsZSBpcyBub3cgcGFydCBvZiB0aGUgImZpbGVzIHRoYXQgdGhlIHJ1bnRpbWUKKyAgIG1heSBrZWVwIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyBvbiwgYWxsIG9mIHdoaWNoIHdvdWxkIG5lZWQgdG8gYmUKKyAgIGNsb3NlZCB3aGVuIGRvbmUgd2l0aCB0aGUgb2JqZWN0IHN0b3JlIiwgYW5kIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8KKyAgIGFuIGV4aXN0aW5nIGNvbW1pdC1ncmFwaCBmaWxlIG5vdyBpcyBjbG9zZWQgYmVmb3JlICJnYyIgZmluYWxpemVzIGEKKyAgIG5ldyBpbnN0YW5jZSB0byByZXBsYWNlIGl0LgorCisgKiAiZ2l0IGNoZWNrb3V0IC1wIiBuZWVkcyB0byBzZWxlY3RpdmVseSBhcHBseSBhIHBhdGNoIGluIHJldmVyc2UsCisgICB3aGljaCBkaWQgbm90IHdvcmsgd2VsbC4KKworICogQ29kZSBjbGVhbi11cCB0byBhdm9pZCBzaWduZWQgaW50ZWdlciB3cmFwYXJvdW5kcyBkdXJpbmcgYmluYXJ5IHNlYXJjaC4KKworICogImdpdCBpbnRlcnByZXQtdHJhaWxlcnMiIGFsd2F5cyB0cmVhdGVkICcjJyBhcyB0aGUgY29tbWVudAorICAgY2hhcmFjdGVyLCByZWdhcmRsZXNzIG9mIGNvcmUuY29tbWVudENoYXIgc2V0dGluZywgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogImdpdCBzdGFzaCBzaG93IDIzIiB1c2VkIHRvIHdvcmssIGJ1dCBubyBtb3JlIGFmdGVyIGdldHRpbmcKKyAgIHJld3JpdHRlbiBpbiBDOyB0aGlzIHJlZ3Jlc3Npb24gaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHJlYmFzZSAtLWFib3J0IiB1c2VkIHRvIGxlYXZlIHJlZnMvcmV3cml0dGVuLyB3aGVuIGNvbmNsdWRpbmcKKyAgICJnaXQgcmViYXNlIC1yIiwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBBbiBpbmNvcnJlY3QgbGlzdCBvZiBvcHRpb25zIHdhcyBjYWNoZWQgYWZ0ZXIgY29tbWFuZCBsaW5lCisgICBjb21wbGV0aW9uIGZhaWxlZCAoZS5nLiB0cnlpbmcgdG8gY29tcGxldGUgYSBjb21tYW5kIHRoYXQgcmVxdWlyZXMKKyAgIGEgcmVwb3NpdG9yeSBvdXRzaWRlIG9uZSksIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIGNvZGUgdG8gcGFyc2Ugc2NhbGVkIG51bWJlcnMgb3V0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgaGFzCisgICBiZWVuIG1hZGUgbW9yZSByb2J1c3QgYW5kIGFsc28gZWFzaWVyIHRvIGZvbGxvdy4KKworICogVGhlIGNvZGVwYXRoIHRvIGNvbXB1dGUgZGVsdGEgaXNsYW5kcyB1c2VkIHRvIHNwZXcgcHJvZ3Jlc3Mgb3V0cHV0CisgICB3aXRob3V0IGdpdmluZyB0aGUgY2FsbGVycyBhbnkgd2F5IHRvIHNxdWVsY2ggaXQsIHdoaWNoIGhhcyBiZWVuCisgICBmaXhlZC4KKworICogUHJvdG9jb2wgY2FwYWJpbGl0aWVzIHRoYXQgZ28gb3ZlciB3aXJlIHNob3VsZCBuZXZlciBiZSB0cmFuc2xhdGVkLAorICAgYnV0IGl0IHdhcyBpbmNvcnJlY3RseSBtYXJrZWQgZm9yIHRyYW5zbGF0aW9uLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLiAgVGhlIG91dHB1dCBvZiBwcm90b2NvbCBjYXBhYmlsaXRpZXMgZm9yIGRlYnVnZ2luZyBoYXMKKyAgIGJlZW4gdHdlYWtlZCBhIGJpdC4KKworICogVXNlICJFcmFzZSBpbiBMaW5lIiBDU0kgc2VxdWVuY2UgdGhhdCBpcyBhbHJlYWR5IHVzZWQgaW4gdGhlIGVkaXRvcgorICAgc3VwcG9ydCB0byBjbGVhciBjcnVmdCBpbiB0aGUgcHJvZ3Jlc3Mgb3V0cHV0LgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIiBkaWQgbm90IHByb3RlY3QgY29tbWFuZCBsaW5lIG9wdGlvbnMgcGFzc2VkCisgICB0byB0aGUgY29tbWFuZCB0byBiZSBydW4gaW4gZWFjaCBzdWJtb2R1bGUgY29ycmVjdGx5LCB3aGVuIHRoZQorICAgIi0tcmVjdXJzaXZlIiBvcHRpb24gd2FzIGluIHVzZS4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgcmViYXNlLnJlc2NoZWR1bGVGYWlsZWRFeGVjIHNob3VsZCBiZQorICAgZWZmZWN0aXZlIG9ubHkgd2hpbGUgcnVubmluZyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UgYW5kIHNob3VsZCBub3QKKyAgIGFmZmVjdCBhbnl0aGluZyB3aGVuIHJ1bm5pbmcgYSBub24taW50ZXJhY3RpdmUgb25lLCB3aGljaCB3YXMgbm90CisgICB0aGUgY2FzZS4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgImdpdCBjbG9uZSIgZG9jdW1lbnRhdGlvbiByZWZlcnMgdG8gY29tbWFuZCBsaW5lIG9wdGlvbnMgaW4gaXRzCisgICBkZXNjcmlwdGlvbiBpbiB0aGUgc2hvcnQgZm9ybTsgdGhleSBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBsb25nCisgICBmb3JtcyB0byBtYWtlIHRoZW0gbW9yZSByZWNvZ25pc2FibGUuCisKKyAqIEdlbmVyYXRpb24gb2YgcGFjayBiaXRtYXBzIGFyZSBub3cgZGlzYWJsZWQgd2hlbiAua2VlcCBmaWxlcyBleGlzdCwKKyAgIGFzIHRoZXNlIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgZmVhdHVyZXMuCisgICAobWVyZ2UgNzMyODQ4MjI1MyBldy9yZXBhY2std2l0aC1iaXRtYXBzLWJ5LWRlZmF1bHQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJtIiB0byByZXNvbHZlIGEgY29uZmxpY3RlZCBwYXRoIGxlYWtlZCBhbiBpbnRlcm5hbCBtZXNzYWdlCisgICAibmVlZHMgbWVyZ2UiIGJlZm9yZSBhY3R1YWxseSByZW1vdmluZyB0aGUgcGF0aCwgd2hpY2ggd2FzCisgICBjb25mdXNpbmcuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBzdGFzaCAtLWtlZXAtaW5kZXgiIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgb24gcGF0aHMgdGhhdCBoYXZlCisgICBiZWVuIHJlbW92ZWQsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGI5MzJmNmE1ZTggdGcvc3Rhc2gta2VlcC1pbmRleC13aXRoLXJlbW92ZWQtcGF0aHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaW5kb3cgNyB1cGRhdGUgOy0pCisKKyAqIEEgY29kZXBhdGggdGhhdCByZWFkcyBmcm9tIEdQRyBmb3Igc2lnbmVkIG9iamVjdCB2ZXJpZmljYXRpb24gcmVhZAorICAgcGFzdCB0aGUgZW5kIG9mIGFsbG9jYXRlZCBidWZmZXIsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGNsZWFuIiBzaWxlbnRseSBza2lwcGVkIGEgcGF0aCB3aGVuIGl0IGNhbm5vdCBsc3RhdCgpIGl0OyBub3cKKyAgIGl0IGdpdmVzIGEgd2FybmluZy4KKworICogImdpdCBwdXNoIC0tYXRvbWljIiB0aGF0IGdvZXMgb3ZlciB0aGUgdHJhbnNwb3J0LWhlbHBlciAobmFtZWx5LAorICAgdGhlIHNtYXJ0IGh0dHAgdHJhbnNwb3J0KSBmYWlsZWQgdG8gcHJldmVudCByZWZzIHRvIGJlIHB1c2hlZCB3aGVuCisgICBpdCBjYW4gbG9jYWxseSB0ZWxsIHRoYXQgb25lIG9mIHRoZSByZWYgdXBkYXRlIHdpbGwgZmFpbCB3aXRob3V0CisgICBoYXZpbmcgdG8gY29uc3VsdCB0aGUgb3RoZXIgZW5kLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBpbnRlcm5hbCBkaWZmIG1hY2hpbmVyeSBjYW4gYmUgbWFkZSB0byByZWFkIG91dCBvZiBib3VuZHMgd2hpbGUKKyAgIGxvb2tpbmcgZm9yIC0tZnVuY3Rpb24tY29udGV4dCBsaW5lIGluIGEgY29ybmVyIGNhc2UsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYjc3N2YzZmQ2MSBqay94ZGlmZi1jbGFtcC1mdW5jbmFtZS1jb250ZXh0LWluZGV4IGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgY29kZSBjbGVhbnVwLCBkb2NmaXgsIGJ1aWxkIGZpeCwgZXRjLgorICAgKG1lcmdlIGZiZWMwNWMyMTAgY2MvdGVzdC1vaWRtYXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdhMDZmYjAzOGMgamsvbm8tc3lzdGVtLWluY2x1ZGVzLWluLWRvdC1jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4MWVkMmI0MDVjIGNiL3hkaWZmLW5vLXN5c3RlbS1pbmNsdWRlcy1pbi1kb3QtYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDYxZTZjZTFkZCBzZy9mc2NrLWNvbmZpZy1pbi1kb2MgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIzLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIzLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwODNiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjMuMS50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjIuMjMuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdXAgdGhlIGZpeGVzIHRoYXQgYXBwZWFyIGluIHYyLjE0LjYsIHYyLjE1LjQsCit2Mi4xNy4zLCB2Mi4yMC4yIGFuZCBpbiB2Mi4yMS4xLCBhZGRyZXNzaW5nIHRoZSBzZWN1cml0eSBpc3N1ZXMKK0NWRS0yMDE5LTEzNDgsIENWRS0yMDE5LTEzNDksIENWRS0yMDE5LTEzNTAsIENWRS0yMDE5LTEzNTEsCitDVkUtMjAxOS0xMzUyLCBDVkUtMjAxOS0xMzUzLCBDVkUtMjAxOS0xMzU0LCBDVkUtMjAxOS0xMzg3LCBhbmQKK0NWRS0yMDE5LTE5NjA0OyBzZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRob3NlIHZlcnNpb25zIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIzLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIzLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OTdjYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjMuMi50eHQKQEAgLTAsMCArMSw1IEBACitHaXQgdjIuMjMuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdGhlIHNlY3VyaXR5IGZpeCB0aGF0IGFwcGVhcnMgaW4gdjIuMTcuNDsgc2VlCit0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhhdCB2ZXJzaW9uIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIzLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIzLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMzU0OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjMuMy50eHQKQEAgLTAsMCArMSw1IEBACitHaXQgdjIuMjMuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdGhlIHNlY3VyaXR5IGZpeCB0aGF0IGFwcGVhcnMgaW4gdjIuMTcuNTsgc2VlCit0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhhdCB2ZXJzaW9uIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI0LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI0LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZTE1NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjQuMC50eHQKQEAgLTAsMCArMSwzOTggQEAKK0dpdCAyLjI0IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2Mi4yMworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGUKKworICogImZpbHRlci1icmFuY2giIGlzIHNob3dpbmcgaXRzIGFnZSBhbmQgYWx0ZXJuYXRpdmVzIGFyZSBhdmFpbGFibGUuCisgICBGcm9tIHRoaXMgcmVsZWFzZSwgd2Ugc3RhcnRlZCB0byBkaXNjb3VyYWdlIGl0cyB1c2UgYW5kIGhpbnQKKyAgIHBlb3BsZSBhYm91dCBmaWx0ZXItcmVwby4KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIFdlIG5vdyBoYXZlIGFuIGFjdGl2ZSBpbnRlcmltIG1haW50YWluZXIgZm9yIHRoZSBHaXQtR3VpIHBhcnQgb2YKKyAgIHRoZSBzeXN0ZW0uICBQcmFpc2UgYW5kIHRoYW5rIFByYXR5dXNoIFlhZGF2IGZvciB2b2x1bnRlZXJpbmcuCisKKyAqIFRoZSBjb21tYW5kIGxpbmUgcGFyc2VyIGxlYXJuZWQgIi0tZW5kLW9mLW9wdGlvbnMiIG5vdGF0aW9uOyB0aGUKKyAgIHN0YW5kYXJkIGNvbnZlbnRpb24gZm9yIHNjcmlwdGVycyB0byBoYXZlIGhhcmRjb2RlZCBzZXQgb2Ygb3B0aW9ucworICAgZmlyc3Qgb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIGZvcmNlIHRoZSBjb21tYW5kIHRvIHRyZWF0IGVuZC11c2VyCisgICBpbnB1dCBhcyBub24tb3B0aW9ucywgaGFzIGJlZW4gdG8gdXNlICItLSIgYXMgdGhlIGRlbGltaXRlciwgYnV0CisgICB0aGF0IHdvdWxkIG5vdCB3b3JrIGZvciBjb21tYW5kcyB0aGF0IHVzZSAiLS0iIGFzIGEgZGVsaW1pdGVyCisgICBiZXR3ZWVuIHJldnMgYW5kIHBhdGhzcGVjLgorCisgKiBBIG1lY2hhbmlzbSB0byBhZmZlY3QgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgYSAocmVsYXRlZCkgZ3JvdXAgb2YKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGlzIGludHJvZHVjZWQuCisKKyAqICJnaXQgZmV0Y2giIGxlYXJuZWQgIi0tc2V0LXVwc3RyZWFtIiBvcHRpb24gdG8gaGVscCB0aG9zZSB3aG8gZmlyc3QKKyAgIGNsb25lIGZyb20gdGhlaXIgcHJpdmF0ZSBmb3JrIHRoZXkgaW50ZW5kIHRvIHB1c2ggdG8sIGFkZCB0aGUgdHJ1ZQorICAgdXBzdHJlYW0gdmlhICJnaXQgcmVtb3RlIGFkZCIgYW5kIHRoZW4gImdpdCBmZXRjaCIgZnJvbSBpdC4KKworICogRGV2aWNlLXRyZWUgZmlsZXMgbGVhcm5lZCB0aGVpciBvd24gdXNlcmRpZmYgcGF0dGVybnMuCisgICAobWVyZ2UgM2M4MTc2MGJjNiBzYi91c2VyZGlmZi1kdHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtLXJlYmFzZS1tZXJnZXMiIGxlYXJuZWQgdG8gZHJpdmUgZGlmZmVyZW50IG1lcmdlCisgICBzdHJhdGVnaWVzIGFuZCBwYXNzIHN0cmF0ZWd5IHNwZWNpZmljIG9wdGlvbnMgdG8gdGhlbS4KKworICogQSBuZXcgInByZS1tZXJnZS1jb21taXQiIGhvb2sgaGFzIGJlZW4gaW50cm9kdWNlZC4KKworICogQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gdXBkYXRlcyBmb3IgImdpdCAtYyB2YXIubmFtZT12YWwiIGhhdmUgYmVlbgorICAgYWRkZWQuCisKKyAqIFRoZSBsYXp5IGNsb25lIG1hY2hpbmVyeSBoYXMgYmVlbiB0YXVnaHQgdGhhdCB0aGVyZSBjYW4gYmUgbW9yZQorICAgdGhhbiBvbmUgcHJvbWlzb3IgcmVtb3RlIGFuZCBjb25zdWx0IHRoZW0gaW4gb3JkZXIgd2hlbiBkb3dubG9hZGluZworICAgbWlzc2luZyBvYmplY3RzIG9uIGRlbWFuZC4KKworICogVGhlIGxpc3Qtb2JqZWN0cy1maWx0ZXIgQVBJICh1c2VkIHRvIGNyZWF0ZSBhIHNwYXJzZS9sYXp5IGNsb25lKQorICAgbGVhcm5lZCB0byB0YWtlIGEgY29tYmluZWQgZmlsdGVyIHNwZWNpZmljYXRpb24uCisKKyAqIFRoZSBkb2N1bWVudGF0aW9uIGFuZCB0ZXN0cyBmb3IgImdpdCBmb3JtYXQtcGF0Y2giIGhhdmUgYmVlbgorICAgY2xlYW5lZCB1cC4KKworICogT24gV2luZG93cywgdGhlIHJvb3QgbGV2ZWwgb2YgVU5DIHNoYXJlIGlzIG5vdyBhbGxvd2VkIHRvIGJlIHVzZWQKKyAgIGp1c3QgbGlrZSBhbnkgb3RoZXIgZGlyZWN0b3J5LgorCisgKiBUaGUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gc3VwcG9ydCAoaW4gY29udHJpYi8pIGxlYXJuZWQgYWJvdXQgdGhlCisgICAiLS1za2lwIiBvcHRpb24gb2YgImdpdCByZXZlcnQiIGFuZCAiZ2l0IGNoZXJyeS1waWNrIi4KKworICogImdpdCByZWJhc2UgLS1rZWVwLWJhc2UgPHVwc3RyZWFtPiIgdHJpZXMgdG8gZmluZCB0aGUgb3JpZ2luYWwgYmFzZQorICAgb2YgdGhlIHRvcGljIGJlaW5nIHJlYmFzZWQgYW5kIHJlYmFzZSBvbiB0b3Agb2YgdGhhdCBzYW1lIGJhc2UsCisgICB3aGljaCBpcyB1c2VmdWwgd2hlbiBydW5uaW5nIHRoZSAiZ2l0IHJlYmFzZSAtaSIgKGFuZCBpdHMgbGltaXRlZAorICAgdmFyaWFudCAiZ2l0IHJlYmFzZSAteCIpLgorCisgICBUaGUgY29tbWFuZCBhbHNvIGhhcyBsZWFybmVkIHRvIGZhc3QtZm9yd2FyZCBpbiBtb3JlIGNhc2VzIHdoZXJlIGl0CisgICBjYW4gaW5zdGVhZCBvZiByZXBsYXlpbmcgdG8gcmVjcmVhdGUgaWRlbnRpY2FsIGNvbW1pdHMuCisKKyAqIEEgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0ZWxscyAiZ2l0IGZldGNoIiB0byB3cml0ZSB0aGUgY29tbWl0CisgICBncmFwaCBhZnRlciBmaW5pc2hpbmcuCisKKyAqICJnaXQgYWRkIC1pIiBoYXMgYmVlbiB0YXVnaHQgdG8gc2hvdyB0aGUgdG90YWwgbnVtYmVyIG9mIGh1bmtzIGFuZAorICAgdGhlIGh1bmtzIHRoYXQgaGFzIGJlZW4gcHJvY2Vzc2VkIHNvIGZhciB3aGVuIHNob3dpbmcgcHJvbXB0cy4KKworICogImdpdCBmZXRjaCAtLWpvYnM9PG4+IiBhbGxvd2VkIDxuPiBwYXJhbGxlbCBqb2JzIHdoZW4gZmV0Y2hpbmcKKyAgIHN1Ym1vZHVsZXMsIGJ1dCB0aGlzIGRpZCBub3QgYXBwbHkgdG8gImdpdCBmZXRjaCAtLW11bHRpcGxlIiB0aGF0CisgICBmZXRjaGVzIGZyb20gbXVsdGlwbGUgcmVtb3RlIHJlcG9zaXRvcmllcy4gIEl0IG5vdyBkb2VzLgorCisgKiBUaGUgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9uIGZvciB6c2ggY29tcGxldGlvbiBzY3JpcHQgKGluCisgICBjb250cmliLykgaGFzIGJlZW4gYSBiaXQgaW1wcm92ZWQuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogVGhlIGNvZGUgdG8gd3JpdGUgY29tbWl0LWdyYXBoIG92ZXIgZ2l2ZW4gY29tbWl0IG9iamVjdCBuYW1lcyBoYXMKKyAgIGJlZW4gbWFkZSBhIGJpdCBtb3JlIHJvYnVzdC4KKworICogVGhlIGZpcnN0IGxpbmUgb2YgdmVyYm9zZSBvdXRwdXQgZnJvbSBlYWNoIHRlc3QgcGllY2Ugbm93IGNhcnJpZXMKKyAgIHRoZSB0ZXN0IG5hbWUgYW5kIG51bWJlciB0byBoZWxwIHNjYW5uaW5nIHdpdGggZXllYmFsbHMuCisKKyAqIEZ1cnRoZXIgY2xlYW4tdXAgb2YgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUuCisKKyAqIHhtYWxsb2MoKSB1c2VkIHRvIGhhdmUgYSBtZWNoYW5pc20gdG8gZGl0Y2ggbWVtb3J5IGFuZCBhZGRyZXNzCisgICBzcGFjZSByZXNvdXJjZXMgYXMgdGhlIGxhc3QgcmVzb3J0IHVwb24gc2VlaW5nIGFuIGFsbG9jYXRpb24KKyAgIGZhaWx1cmUgZnJvbSB0aGUgdW5kZXJseWluZyBtYWxsb2MoKSwgd2hpY2ggbWFkZSB0aGUgY29kZSBjb21wbGV4CisgICBhbmQgdGhyZWFkLXVuc2FmZSB3aXRoIGR1YmlvdXMgYmVuZWZpdCwgYXMgbWFqb3IgbWVtb3J5IHJlc291cmNlCisgICB1c2VycyBhbHJlYWR5IGRvIGxpbWl0IHRoZWlyIHVzZXMgd2l0aCB2YXJpb3VzIG90aGVyIG1lY2hhbmlzbXMuCisgICBJdCBoYXMgYmVlbiBzaW1wbGlmaWVkIGF3YXkuCisKKyAqIFVubmVjZXNzYXJ5IGZ1bGwtdHJlZSBkaWZmIGluICJnaXQgbG9nIC1MIiBtYWNoaW5lcnkgaGFzIGJlZW4KKyAgIG9wdGltaXplZCBhd2F5LgorCisgKiBUaGUgaHR0cCB0cmFuc3BvcnQgbGFja2VkIHNvbWUgb3B0aW1pemF0aW9uIHRoZSBuYXRpdmUgdHJhbnNwb3J0cworICAgbGVhcm5lZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWYgYWR2ZXJ0aXNlbWVudCwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogUHJlcGFyYXRpb24gZm9yIFNIQS0yNTYgdXBncmFkZSBjb250aW51ZXMgaW4gdGhlIHRlc3QgZGVwYXJ0bWVudC4KKyAgIChtZXJnZSAwYzM3YzQxZDEzIGJjL2hhc2gtaW5kZXBlbmRlbnQtdGVzdHMtcGFydC01IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIG1lbW9yeSBvd25lcnNoaXAgbW9kZWwgb2YgdGhlICJnaXQgZmFzdC1pbXBvcnQiIGdvdAorICAgc3RyYWlnaHRlbmVkIG91dC4KKworICogT3V0cHV0IGZyb20gdHJhY2UyIHN1YnN5c3RlbSBpcyBmb3JtYXR0ZWQgbW9yZSBwcmV0dGlseSBub3cuCisKKyAqIFRoZSBpbnRlcm5hbCBjb2RlIG9yaWdpbmFsbHkgaW52ZW50ZWQgZm9yICIuZ2l0aWdub3JlIiBwcm9jZXNzaW5nCisgICBnb3QgcmVzaHVmZmxlZCBhbmQgcmVuYW1lZCB0byBtYWtlIGl0IGxlc3MgdGllZCB0byAiZXhjbHVkaW5nIiBhbmQKKyAgIHN0cmVzcyBtb3JlIHRoYXQgaXQgaXMgYWJvdXQgIm1hdGNoaW5nIiwgYXMgaXQgaGFzIGJlZW4gcmV1c2VkIGZvcgorICAgdGhpbmdzIGxpa2Ugc3BhcnNlIGNoZWNrb3V0IHNwZWNpZmljYXRpb24gdGhhdCB3YW50IHRvIGNoZWNrIGlmIGEKKyAgIHBhdGggaXMgImluY2x1ZGVkIi4KKworICogImdpdCBzdGFzaCIgbGVhcm5lZCB0byB3cml0ZSByZWZyZXNoZWQgaW5kZXggYmFjayB0byBkaXNrLgorCisgKiBDb2NjaW5lbGxlIGNoZWNrcyBhcmUgZG9uZSBvbiBtb3JlIHNvdXJjZSBmaWxlcyB0aGFuIGJlZm9yZSBub3cuCisKKyAqIFRoZSBjYWNoZS10cmVlIGNvZGUgaGFzIGJlZW4gdGF1Z2h0IHRvIGJlIGxlc3MgYWdncmVzc2l2ZSBpbgorICAgYXR0ZW1wdGluZyB0byBzZWUgaWYgYSB0cmVlIG9iamVjdCBpdCBjb21wdXRlZCBhbHJlYWR5IGV4aXN0cyBpbgorICAgdGhlIHJlcG9zaXRvcnkuCisKKyAqIFRoZSBjb2RlIHRvIHBhcnNlIGFuZCB1c2UgdGhlIGNvbW1pdC1ncmFwaCBmaWxlIGhhcyBiZWVuIG1hZGUgbW9yZQorICAgcm9idXN0IGFnYWluc3QgY29ycnVwdGVkIGlucHV0LgorCisgKiBUaGUgaGctdG8tZ2l0IHNjcmlwdCAoaW4gY29udHJpYi8pIGhhcyBiZWVuIHVwZGF0ZWQgdG8gd29yayB3aXRoCisgICBQeXRob24gMy4KKworICogVXBkYXRlIHRoZSB3YXkgYnVpbGQgYXJ0aWZhY3RzIGluIHQvaGVscGVyLyBkaXJlY3RvcnkgYXJlIGlnbm9yZWQuCisKKyAqIFByZXBhcmF0aW9uIGZvciBTSEEtMjU2IHVwZ3JhZGUgY29udGludWVzLgorCisgKiAiZ2l0IGxvZyAtLWdyYXBoIiBmb3IgYW4gb2N0b3B1cyBtZXJnZSBpcyBzb21ldGltZXMgY29sb3JlZAorICAgaW5jb3JyZWN0bHksIHdoaWNoIGlzIGRlbW9uc3RyYXRlZCBhbmQgZG9jdW1lbnRlZCBidXQgbm90IHlldAorICAgZml4ZWQuCisKKyAqIFRoZSB0cmFjZTIgb3V0cHV0LCB3aGVuIHNlbmRpbmcgdGhlbSB0byBmaWxlcyBpbiBhIGRlc2lnbmF0ZWQKKyAgIGRpcmVjdG9yeSwgY2FuIHBvcHVsYXRlIHRoZSBkaXJlY3Rvcnkgd2l0aCB0b28gbWFueSBmaWxlczsgYQorICAgbWVjaGFuaXNtIGlzIGludHJvZHVjZWQgdG8gc2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlcyBhbmQKKyAgIGRpc2NhcmQgZnVydGhlciBsb2dzIHdoZW4gdGhlIG1heGltdW0gaXMgcmVhY2hlZC4KKworICogV2UgaGF2ZSBhZG9wdGVkIGEgQ29kZS1vZi1jb25kdWN0IGRvY3VtZW50LgorICAgKG1lcmdlIDNmOWVmODc0YTcgamsvY29jIGxhdGVyIHRvIG1haW50KS4KKworCitGaXhlcyBzaW5jZSB2Mi4yMworLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBncmVwIC0tcmVjdXJzZS1zdWJtb2R1bGVzIiB0aGF0IGxvb2tzIGF0IHRoZSB3b3JraW5nIHRyZWUKKyAgIGZpbGVzIGxvb2tlZCBhdCB0aGUgY29udGVudHMgaW4gdGhlIGluZGV4IGluIHN1Ym1vZHVsZXMsIGluc3RlYWQgb2YKKyAgIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUuCisgICAobWVyZ2UgNmEyODlkNDVjMCBtdC9ncmVwLXN1Ym1vZHVsZXMtd29ya2luZy10cmVlIGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZXBhdGhzIHRvIHdhbGsgdHJlZSBvYmplY3RzIGhhdmUgYmVlbiBhdWRpdGVkIGZvciBpbnRlZ2VyCisgICBvdmVyZmxvd3MgYW5kIGhhcmRlbmVkLgorICAgKG1lcmdlIDVhYTAyZjk4NjggamsvdHJlZS13YWxrLW92ZXJmbG93IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwYWNrLXJlZnMiIGNhbiBsb3NlIHJlZnMgdGhhdCBhcmUgY3JlYXRlZCB3aGlsZSBydW5uaW5nLCB3aGljaAorICAgaXMgZ2V0dGluZyBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYTYxM2Q0ZjgxNyBzYy9wYWNrLXJlZnMtZGVsZXRpb24tcmFjZWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2hlY2tvdXQiIGFuZCAiZ2l0IHJlc3RvcmUiIHRvIHJlLXBvcHVsYXRlIHRoZSBpbmRleCBmcm9tIGEKKyAgIHRyZWUtaXNoICh0eXBpY2FsbHkgSEVBRCkgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSBmb3IgYSBwYXRoIHRoYXQKKyAgIHdhcyByZW1vdmVkIGFuZCB0aGVuIGFkZGVkIGFnYWluIHdpdGggdGhlIGludGVudC10by1hZGQgYml0LCB3aGVuCisgICB0aGUgY29ycmVzcG9uZGluZyB3b3JraW5nIHRyZWUgZmlsZSB3YXMgZW1wdHkuICBUaGlzIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIENvbXBpbGF0aW9uIGZpeC4KKyAgIChtZXJnZSA3MDU5N2U4Mzg2IHJzL25lZGFsbG9jLWZpeGxldHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGd1aSIgbGVhcm5lZCB0byBjYWxsIHRoZSBjbGVhbi11cCBwcm9jZWR1cmUgYmVmb3JlIGV4aXRpbmcuCisgICAobWVyZ2UgMGQ4OGYzZDJjNSBweS9naXQtZ3VpLWRvLXF1aXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSBwcm9tb3RlZCB0aGUgImluZGVudCBoZXVyaXN0aWNzIiB0aGF0IGRlY2lkZXMgd2hlcmUgdG8gc3BsaXQKKyAgIGRpZmYgaHVua3MgZnJvbSBleHBlcmltZW50YWwgdG8gdGhlIGRlZmF1bHQgYSBmZXcgeWVhcnMgYWdvLCBidXQKKyAgIHNvbWUgc3RhbGUgZG9jdW1lbnRhdGlvbiBzdGlsbCBtYXJrZWQgaXQgYXMgZXhwZXJpbWVudGFsLCB3aGljaCBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDY0ZTVlMWZiYTEgc2cvZGlmZi1pbmRlbnQtaGV1cmlzdGljLW5vbi1leHBlcmltZW50YWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGaXggYSBtaXNtZXJnZSB0aGF0IGhhcHBlbmVkIGluIDIuMjIgdGltZWZyYW1lLgorICAgKG1lcmdlIGFjYjdkYTA1YWMgZW4vY2hlY2tvdXQtbWlzbWVyZ2UtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBhcmNoaXZlIiByZWNvcmRlZCBpbmNvcnJlY3QgbGVuZ3RoIGluIGV4dGVuZGVkIHBheCBoZWFkZXIgaW4KKyAgIHNvbWUgY29ybmVyIGNhc2VzLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNzFkNDFmZjY1MSBycy9wYXgtZXh0ZW5kZWQtaGVhZGVyLWxlbmd0aC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPbi1kZW1hbmQgb2JqZWN0IGZldGNoaW5nIGluIGxhenkgY2xvbmUgaW5jb3JyZWN0bHkgdHJpZWQgdG8gZmV0Y2gKKyAgIGNvbW1pdHMgZnJvbSBzdWJtb2R1bGUgcHJvamVjdHMsIHdoaWxlIHN0aWxsIHdvcmtpbmcgaW4gdGhlCisgICBzdXBlcnByb2plY3QsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBhNjM2OTRmNTIzIGp0L2RpZmYtbGF6eS1mZXRjaC1zdWJtb2R1bGUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogUHJlcGFyZSBnZXRfc2hvcnRfb2lkKCkgY29kZXBhdGggdG8gYmUgdGhyZWFkLXNhZmUuCisgICAobWVyZ2UgN2NmY2IxNmIwZSBycy9zb3J0LW9pZC1hcnJheS10aHJlYWQtc2FmZSBsYXRlciB0byBtYWludCkuCisKKyAqICJmb3ItZWFjaC1yZWYiIGFuZCBmcmllbmRzIHRoYXQgc2hvdyByZWZzIGRpZCBub3QgcHJvdGVjdCB0aGVtc2VsdmVzCisgICBhZ2FpbnN0IGFuY2llbnQgdGFncyB0aGF0IGRpZCBub3QgcmVjb3JkIHRhZ2dlciBuYW1lcyB3aGVuIGFza2VkIHRvCisgICBzaG93ICIlKHRhZ2dlcm5hbWUpIiwgd2hpY2ggaGF2ZSBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA4YjNmMzNlZjExIG1wL2Zvci1lYWNoLXJlZi1taXNzaW5nLW5hbWUtb3ItZW1haWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgImdpdCBhbSIgYmFzZWQgYmFja2VuZCBvZiAiZ2l0IHJlYmFzZSIgaWdub3JlZCB0aGUgcmVzdWx0IG9mCisgICB1cGRhdGluZyAiLmdpdGF0dHJpYnV0ZXMiIGRvbmUgaW4gb25lIHN0ZXAgd2hlbiByZXBsYXlpbmcKKyAgIHN1YnNlcXVlbnQgc3RlcHMuCisgICAobWVyZ2UgMmM2NWQ5MGY3NSBiYy9yZXJlYWQtYXR0cmlidXRlcy1kdXJpbmctcmViYXNlIGxhdGVyIHRvIG1haW50KS4KKworICogVGVsbCBjVVJMIGxpYnJhcnkgdG8gdXNlIHRoZSBzYW1lIG1hbGxvYygpIGltcGxlbWVudGF0aW9uLCB3aXRoIHRoZQorICAgeG1hbGxvYygpIHdyYXBwZXIsIGFzIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0sIGZvciBjb25zaXN0ZW5jeS4KKyAgIChtZXJnZSA5M2I5ODBlNThmIGNiL2N1cmwtdXNlLXhtYWxsb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBCdWlsZCBmaXggdG8gYWRqdXN0IC5naXRpZ25vcmUgdG8gdW5pZ25vcmUgYSBwYXRoIHRoYXQgd2Ugc3RhcnRlZCB0byB0cmFjay4KKyAgIChtZXJnZSBhYWM2ZmY3YjViIGpzL3Zpc3VhbC1zdHVkaW8gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGZldyBpbXBsZW1lbnRhdGlvbiBmaXhlcyBpbiB0aGUgbm90ZXMgQVBJLgorICAgKG1lcmdlIDYwZmU0NzdhMGIgbWgvbm90ZXMtZHVwbGljYXRlLWVudHJpZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGaXggYW4gZWFybGllciByZWdyZXNzaW9uIHRvICJnaXQgcHVzaCAtLWFsbCIgd2hpY2ggc2hvdWxkIGhhdmUKKyAgIGJlZW4gZm9yYmlkZGVuIHdoZW4gdGhlIHRhcmdldCByZW1vdGUgcmVwb3NpdG9yeSBpcyBzZXQgdG8gYmUgYQorICAgbWlycm9yLgorICAgKG1lcmdlIDhlNGM4YWYwNTggdGcvcHVzaC1hbGwtaW4tbWlycm9yLWZvcmJpZGRlbiBsYXRlciB0byBtYWludCkuCisKKyAqIEZpeCBhbiBlYXJsaWVyIHJlZ3Jlc3Npb24gaW4gdGhlIHRlc3Qgc3VpdGUsIHdoaWNoIG1pc3Rha2VubHkKKyAgIHN0b3BwZWQgcnVubmluZyBIVFRQRCB0ZXN0cy4KKyAgIChtZXJnZSAzOTYwMjkwNjc1IHNnL2dpdC10ZXN0LWJvb2xlYW4gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtLWF1dG9zdGFzaCA8dXBzdHJlYW0+IDxicmFuY2g+Iiwgd2hlbiA8YnJhbmNoPiBpcworICAgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgYnJhbmNoLCBpbmNvcnJlY3RseSBtb3ZlZCB0aGUgdGlwIG9mIHRoZQorICAgY3VycmVudCBicmFuY2gsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBiZjFlMjhlMGFkIGJ3L3JlYmFzZS1hdXRvc3Rhc2gta2VlcC1jdXJyZW50LWJyYW5jaCBsYXRlciB0byBtYWludCkuCisKKyAqIFVwZGF0ZSBzdXBwb3J0IGZvciBBc2NpaWRvY3RvciBkb2N1bWVudGF0aW9uIHRvb2xjaGFpbi4KKyAgIChtZXJnZSA4M2IwYjg5NTNlIG1hL2FzY2lpZG9jdG9yLXJlZm1pc2NpbmZvIGxhdGVyIHRvIG1haW50KS4KKworICogU3RhcnQgdXNpbmcgRG9jQm9vayA1IChpbnN0ZWFkIG9mIERvY0Jvb2sgNC41KSBhcyBBc2NpaWRvY3RvciAyLjAKKyAgIG5vIGxvbmdlciB3b3JrcyB3aXRoIHRoZSBvbGRlciBvbmUuCisgICAobWVyZ2UgZjY0NjFiODJiOSBiYy9kb2MtdXNlLWRvY2Jvb2stNSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBtYXJrdXAgdXNlZCBpbiB1c2VyLW1hbnVhbCBoYXMgYmVlbiB1cGRhdGVkIHRvIHdvcmsgYmV0dGVyIHdpdGgKKyAgIGFzY2lpZG9jdG9yLgorICAgKG1lcmdlIGM0ZDJmNjE0M2EgbWEvdXNlci1tYW51YWwtbWFya3VwLXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqIE1ha2Ugc3VyZSB0aGUgZ3JlcCBtYWNoaW5lcnkgZG9lcyBub3QgYWJvcnQgd2hlbiBzZWVpbmcgYSBwYXlsb2FkCisgICB0aGF0IGlzIG5vdCBVVEYtOCBldmVuIHdoZW4gSklUIGlzIG5vdCBpbiB1c2Ugd2l0aCBQQ1JFMS4KKyAgIChtZXJnZSBhZDdjNTQzZTNiIGNiL3NraXAtdXRmOC1jaGVjay13aXRoLXBjcmUxIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIG5hbWUgb2YgdGhlIGJsb2Igb2JqZWN0IHRoYXQgc3RvcmVzIHRoZSBmaWx0ZXIgc3BlY2lmaWNhdGlvbgorICAgZm9yIHNwYXJzZSBjbG9uaW5nL2ZldGNoaW5nIHdhcyBpbnRlcnByZXRlZCBpbiBhIHdyb25nIHBsYWNlIGluIHRoZQorICAgY29kZSwgY2F1c2luZyBHaXQgdG8gYWJvcnQuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUtcmVmcy1leGNsdWRlPTxwYXR0ZXJuPiIgd2FzIGluY29ycmVjdGx5CisgICBvdmVycnVsZWQgd2hlbiB0aGUgIi0tc2ltcGxpZnktYnktZGVjb3JhdGlvbiIgb3B0aW9uIGlzIHVzZWQsIHdoaWNoCisgICBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgMGNjNzM4MGQ4OCBycy9zaW1wbGlmeS1ieS1kZWNvLXdpdGgtZGVjby1yZWZzLWV4Y2x1ZGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgInVwbG9hZC1wYWNrIiAodGhlIGNvdW50ZXJwYXJ0IG9mICJnaXQgZmV0Y2giKSBuZWVkcyB0byBkaXNhYmxlCisgICBjb21taXQtZ3JhcGggd2hlbiByZXNwb25kaW5nIHRvIGEgc2hhbGxvdyBjbG9uZS9mZXRjaCByZXF1ZXN0LCBidXQKKyAgIHRoZSB3YXkgdGhpcyB3YXMgZG9uZSBtYWRlIEdpdCBwYW5pYywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgb2JqZWN0IHRyYXZlcnNhbCBtYWNoaW5lcnkgaGFzIGJlZW4gb3B0aW1pemVkIG5vdCB0byBsb2FkIHRyZWUKKyAgIG9iamVjdHMgd2hlbiB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGNvbW1pdCBoaXN0b3J5LgorICAgKG1lcmdlIDcyZWQ4MGM3ODQgamsvbGlzdC1vYmplY3RzLW9wdGltLXdvLXRyZWVzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIG9iamVjdCBuYW1lIHBhcnNlciBmb3IgIk50aCBwYXJlbnQiIHN5bnRheCBoYXMgYmVlbiBtYWRlIG1vcmUKKyAgIHJvYnVzdCBhZ2FpbnN0IGludGVnZXIgb3ZlcmZsb3dzLgorICAgKG1lcmdlIDU5ZmE1ZjVhMjUgcnMvbnRoLXBhcmVudC1wYXJzZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIHVzZWQgaW4gZm9sbG93aW5nIHRhZ3MgaW4gImdpdCBmZXRjaCIgaGFzIGJlZW4gb3B0aW1pemVkLgorICAgKG1lcmdlIGI3ZTJkOGJjYTUgbXMvZmV0Y2gtZm9sbG93LXRhZy1vcHRpbSBsYXRlciB0byBtYWludCkuCisKKyAqIFJlZ3Jlc3Npb24gZml4IGZvciBwcm9ncmVzcyBvdXRwdXQuCisgICAobWVyZ2UgMmJiNzRiNTNhNCBzZy9wcm9ncmVzcy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGJ1ZyBpbiBtZXJnZS1yZWN1cnNpdmUgY29kZSB0aGF0IHRyaWdnZXJzIHdoZW4gYSBicmFuY2ggd2l0aCBhCisgICBzeW1ib2xpYyBsaW5rIGlzIG1lcmdlZCB3aXRoIGEgYnJhbmNoIHRoYXQgcmVwbGFjZXMgaXQgd2l0aCBhCisgICBkaXJlY3RvcnkgaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgODNlM2FkM2IxMiBqdC9tZXJnZS1yZWN1cnNpdmUtc3ltbGluay1pcy1ub3QtYS1kaXItaW4td2F5IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHJlbmFtZSBkZXRlY3Rpb24gbG9naWMgc29ydHMgYSBsaXN0IG9mIHJlbmFtZSBzb3VyY2UgY2FuZGlkYXRlcworICAgYnkgc2ltaWxhcml0eSB0byBwaWNrIHRoZSBiZXN0IGNhbmRpZGF0ZSwgd2hpY2ggbWVhbnMgdGhhdCBhIHRpZQorICAgYmV0d2VlbiBzb3VyY2VzIHdpdGggdGhlIHNhbWUgc2ltaWxhcml0eSBpcyBicm9rZW4gYnkgdGhlIG9yaWdpbmFsCisgICBsb2NhdGlvbiBpbiB0aGUgb3JpZ2luYWwgY2FuZGlkYXRlIGxpc3QgKHdoaWNoIGlzIHNvcnRlZCBieSBwYXRoKS4KKyAgIEZvcmNlIHRoZSBzb3J0aW5nIGJ5IHNpbWlsYXJpdHkgZG9uZSB3aXRoIGEgc3RhYmxlIHNvcnQsIHdoaWNoIGlzCisgICBub3QgcHJvbWlzZWQgYnkgc3lzdGVtIHN1cHBsaWVkIHFzb3J0KDMpLCB0byBlbnN1cmUgY29uc2lzdGVudAorICAgcmVzdWx0cyBhY3Jvc3MgcGxhdGZvcm1zLgorICAgKG1lcmdlIDIwNDliOGRjNjUganMvZGlmZi1yZW5hbWUtZm9yY2Utc3RhYmxlLXNvcnQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0byBza2lwICJVVEYiIGFuZCAiVVRGLSIgcHJlZml4LCB3aGVuIGNvbXB1dGluZyBhbiBhZHZpY2UKKyAgIG1lc3NhZ2UsIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgd2hlbiB0aGUgcHJlZml4IHdhcyAiVVRGIiwgd2hpY2gKKyAgIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGIxODE2NzZjZTkgcnMvY29udmVydC1maXgtdXRmLXdpdGhvdXQtZGFzaCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBhdXRob3IgbmFtZXMgdGFrZW4gZnJvbSBTVk4gcmVwb3NpdG9yaWVzIG1heSBoYXZlIGV4dHJhIGxlYWRpbmcKKyAgIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2VzLCB3aGljaCBhcmUgbm93IG11bmdlZCBhd2F5LgorICAgKG1lcmdlIDRkZGQ0YmRkYjEgdGsvZ2l0LXN2bi10cmltLWF1dGhvci1uYW1lIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgLWkiIHNob3dlZCBhIHdyb25nIEhFQUQgd2hpbGUgInJld29yZCIgb3BlbiB0aGUgZWRpdG9yLgorICAgKG1lcmdlIGIwYTMxODYxNDAgcHcvcmViYXNlLWktc2hvdy1IRUFELXRvLXJld29yZCBsYXRlciB0byBtYWludCkuCisKKyAqIEEgZmV3IHNpbXBsaWZpY2F0aW9uIGFuZCBidWdmaXhlcyB0byBQQ1JFIGludGVyZmFjZS4KKyAgIChtZXJnZSBjNTgxZTRhNzQ5IGFiL3BjcmUtaml0LWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogUENSRSBmaXhlcy4KKyAgIChtZXJnZSBmZjYxNjgxYjQ2IGNiL3BjcmUxLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJhbmdlLWRpZmYiIHNlZ2ZhdWx0ZWQgd2hlbiBkaWZmLm5vcHJlZml4IGNvbmZpZ3VyYXRpb24gd2FzCisgICB1c2VkLCBhcyBpdCBibGluZGx5IGV4cGVjdGVkIHRoZSBwYXRjaCBpdCBpbnRlcm5hbGx5IGdlbmVyYXRlcyB0bworICAgaGF2ZSB0aGUgc3RhbmRhcmQgYS8gYW5kIGIvIHByZWZpeGVzLiAgVGhlIGNvbW1hbmQgbm93IGZvcmNlcyB0aGUKKyAgIGludGVybmFsIHBhdGNoIHRvIGJlIGJ1aWx0IHdpdGhvdXQgYW55IHByZWZpeCwgbm90IHRvIGJlIGFmZmVjdGVkCisgICBieSBhbnkgZW5kLXVzZXIgY29uZmlndXJhdGlvbi4KKyAgIChtZXJnZSA5MzdiNzZlZDQ5IGpzL3JhbmdlLWRpZmYtbm9wcmVmaXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN0YXNoIGFwcGx5IiBpbiBhIHN1YmRpcmVjdG9yeSBvZiBhIHNlY29uZGFyeSB3b3JrdHJlZSBmYWlsZWQKKyAgIHRvIGFjY2VzcyB0aGUgd29ya3RyZWUgY29ycmVjdGx5LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZGZkNTU3Yzk3OCBqcy9zdGFzaC1hcHBseS1pbi1zZWNvbmRhcnktd29ya3RyZWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbWVyZ2UtcmVjdXJzaXZlIG1hY2hpbmVyeSBpcyBvbmUgb2YgdGhlIG1vc3QgY29tcGxleCBwYXJ0cyBvZgorICAgdGhlIHN5c3RlbSB0aGF0IGFjY3VtdWxhdGVkIGNydWZ0IG92ZXIgdGltZS4gIFRoaXMgbGFyZ2Ugc2VyaWVzCisgICBjbGVhbnMgdXAgdGhlIGltcGxlbWVudGF0aW9uIHF1aXRlIGEgYml0LgorICAgKG1lcmdlIGI2NTcwNDc3MTkgZW4vbWVyZ2UtcmVjdXJzaXZlLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBQcmV0dHktcHJpbnRlZCBjb21tYW5kIGxpbmUgZm9ybWF0dGVyICh1c2VkIGluIGUuZy4gcmVwb3J0aW5nIHRoZQorICAgY29tbWFuZCBiZWluZyBydW4gYnkgdGhlIHRyYWNpbmcgQVBJKSBoYWQgYSBidWcgdGhhdCBsb3N0IGFuCisgICBhcmd1bWVudCB0aGF0IGlzIGFuIGVtcHR5IHN0cmluZywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGNlMmQ3ZWQyZmQgZ3Mvc3EtcXVvdGUtYnVmLXByZXR0eSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmFuZ2UtZGlmZiIgZmFpbGVkIHRvIGhhbmRsZSBtb2RlLW9ubHkgY2hhbmdlLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorICAgKG1lcmdlIDJiNmE5YjEzY2EgdGcvcmFuZ2UtZGlmZi1vdXRwdXQtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogRGV2IHN1cHBvcnQgdXBkYXRlLgorICAgKG1lcmdlIDRmM2MxZGM1ZDYgZGwvYWxsb3ctcnVubmluZy1jb2NjaS12ZXJib3NlbHkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCAtbyA8b3V0ZGlyPiIgZGlkIGFuIGVxdWl2YWxlbnQgb2YgIm1rZGlyIDxvdXRkaXI+IgorICAgbm90ICJta2RpciAtcCA8b3V0ZGlyPiIsIHdoaWNoIHdhcyBjb3JyZWN0ZWQuCisKKyAqICJnaXQgc3Rhc2ggc2F2ZSIgbG9zdCBsb2NhbCBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNTU2ODk1ZDBjOCBqai9zdGFzaC1yZXNldC1vbmx5LXRvcGxldmVsIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGF0b21pYyBwdXNoIG92ZXIgc21hcnQgSFRUUCB0cmFuc3BvcnQgZGlkIG5vdCB3b3JrLCB3aGljaCBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDZmMTE5NDI0NmEgYmMvc21hcnQtaHR0cC1hdG9taWMtcHVzaCBsYXRlciB0byBtYWludCkuCisKKyAqIE90aGVyIGNvZGUgY2xlYW51cCwgZG9jZml4LCBidWlsZCBmaXgsIGV0Yy4KKyAgIChtZXJnZSBkMTM4N2QzODk1IGVuL2Zhc3QtaW1wb3J0LW1lcmdlLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMWMyNGE1NGVhNCBibS9yZXBvc2l0b3J5LWxheW91dC10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0MTViNzcwYjg4IGRzL21pZHgtZXhwaXJlLXJlcGFjayBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTk4MDBiZGMzZiBuZC9kaWZmLXBhcnNlb3B0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1ODE2NmMyZTlkIHRnL3QwMDIxLXJhY2VmaXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDcwMjdmNTA4YzcgZGwvY29tcGF0LWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGU3NzBmYmZlZmYgamMvdGVzdC1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxZmQ4ODFkNDA0IHJzL3RyYWNlMi1kc3Qtd2FybmluZyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgN2U5Mjc1Njc1MSBtaC9odHRwLXVybG1hdGNoLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDk3ODRmOTczMjEgbWgvcmVsZWFzZS1jb21taXQtbWVtb3J5LWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjBkMTk4ZDAyMiB0Yi9iYW5uZWQtdnNwcmludGYtbmFtZWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODBlMzY1ODY0NyBycy9oZWxwLXVua25vd24tcmVmLWRvZXMtbm90LXJldHVybiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMGE4YmM3MDY4ZiBkdC9yZW1vdGUtaGVscGVyLWRvYy1yZS1sb2NrLW9wdGlvbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjdmZDFlNGVhNyBlbi9tZXJnZS1vcHRpb25zLWZmLWFuZC1mcmllbmRzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1MDJjMzg2ZmY5IHNnL2NsZWFuLW5lc3RlZC1yZXBvLXdpdGgtaWdub3JlZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjZlM2QxY2JlYSBhbS9tYWlsbWFwLWFuZHJleS1tYXpvIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0N2IyN2M5NmZhIHNzL2dldC10aW1lLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGRkMmU1MGE4NGUgamsvY29tbWl0LWdyYXBoLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRmZDM5Yzc2ZTYgY3MvcHJldHR5LWZvcm1hdHMtZG9jLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQwZTc0N2U4OWQgZGwvc3VibW9kdWxlLXNldC1icmFuY2ggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDY4OWExNDZjOTEgcnMvY29tbWl0LWdyYXBoLXVzZS1saXN0LWNvdW50IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwZWI3YzM3YThhIGpzL2RvYy1wYXRjaC10ZXh0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0YjNhYTE3MGQxIHJzL250aC1zd2l0Y2gtY29kZS1zaW1wbGlmaWNhdGlvbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMGQ0MzA0YzEyNCBhaC9kb2Mtc3VibW9kdWxlLWlnbm9yZS1zdWJtb2R1bGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhZjc4MjQ5NDYzIGNjL3N2bi1mZS1weS1zaGViYW5nIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3YmQ5N2Q2ZGZmIHJzL2FsaWFzLXVzZS1jb3B5LWFycmF5IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjNDZlYmMyNDk2IHNnL3RyYXZpcy1oZWxwLWRlYnVnIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyNGM2ODE3OTRmIHBzL215LWZpcnN0LWNvbnRyaWJ1dGlvbi1hbHBoYXNvcnQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDc1YjJjMTU0MzUgY2IvZG8tbm90LXVzZS10ZXN0LWNtcC13aXRoLWEgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGNkYTBkNDk3ZTMgYncvc3VibW9kdWxlLWhlbHBlci11c2FnZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZlMGVkNWQ1ZTkgYW0vdmlzdWFsLXN0dWRpby1jb25maWctZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyZTA5YzAxMjMyIHNnL25hbWUtcmV2LWN1dG9mZi11bmRlcmZsb3ctZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkZGIzYzg1NmYzIGFzL3NoYWxsb3ctc2xhYi11c2UtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3MWY0OTYwYjkxIGpzL21pbmd3LXNwYXduLXdpdGgtc3BhY2VzLWluLXBhdGggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDUzZDY4N2JmNWYgYWgvY2xlYW51cHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY1Mzc0ODVmYTUgcnMvdGVzdC1yZW1vdmUtdXNlbGVzcy1kZWJ1Z2dpbmctY2F0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxMWEzZDNhYWRkIGRsL3Jldi1saXN0LWRvYy1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkOTI4YTgzODhhIGFtL3QwMDI4LXV0ZjE2LXRlc3RzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiMDViNDA5MzBlIGRsL3QwMDAwLXNraXAtdGVzdC10ZXN0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwM2QzYjEyOTdjIGpzL3hkaWZmaS1jb21tZW50LXVwZGF0ZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDU3ZDhmNGI0YzcganMvZG9jLXN0YXNoLXNhdmUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDhjMWNmZDU4ZTMgdGEvdDEzMDgtdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZmEzNjRhZDc5MCBiYi91dGY4LXdjd2lkdGgtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjhiNjkyMTFiMiBiYi9jb21wYXQtdXRpbC1jb21tZW50LWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNWNjNmE0YmUxMSBycy9odHRwLXB1c2gtc2ltcGxpZnkgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGE4MWU0MmQyMzUgcnMvY29sdW1uLXVzZS11dGY4LXN0cm53aWR0aCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDYyYTMwOWQzNiBycy9yZW1vdGUtY3VybC11c2UtYXJndi1hcnJheSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgM2IzYzc5ZjZjOSBuci9kaWZmLWhpZ2hsaWdodC1pbmRlbnQtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzNDQ0ZWMyZWIyIHdiL2ZzbW9uaXRvci1iaXRtYXAtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxMGRhMDMwYWI3IGNiL3BjcmUyLWNoYXJ0YWJsZXMtbGVha2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjBlNjU2OWExMiBqcy9taW5ndy1uZWVkcy1oaWRpbmctZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1MmJkM2U0NjU3IHJsL2dpdHdlYi1ibGFtZS1wcmV2LWZpeCBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjQuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjQuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgxMDQ4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNC4xLnR4dApAQCAtMCwwICsxLDggQEAKK0dpdCB2Mi4yNC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNiwgdjIuMTUuNCwKK3YyLjE3LjMsIHYyLjIwLjIgYW5kIGluIHYyLjIxLjEsIGFkZHJlc3NpbmcgdGhlIHNlY3VyaXR5IGlzc3VlcworQ1ZFLTIwMTktMTM0OCwgQ1ZFLTIwMTktMTM0OSwgQ1ZFLTIwMTktMTM1MCwgQ1ZFLTIwMTktMTM1MSwKK0NWRS0yMDE5LTEzNTIsIENWRS0yMDE5LTEzNTMsIENWRS0yMDE5LTEzNTQsIENWRS0yMDE5LTEzODcsIGFuZAorQ1ZFLTIwMTktMTk2MDQ7IHNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhvc2UgdmVyc2lvbnMgZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjQuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjQuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA0OWY2NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNC4yLnR4dApAQCAtMCwwICsxLDUgQEAKK0dpdCB2Mi4yNC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB0aGUgc2VjdXJpdHkgZml4IHRoYXQgYXBwZWFycyBpbiB2Mi4xNy40OyBzZWUKK3RoZSByZWxlYXNlIG5vdGVzIGZvciB0aGF0IHZlcnNpb24gZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjQuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjQuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwMmUwZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNC4zLnR4dApAQCAtMCwwICsxLDUgQEAKK0dpdCB2Mi4yNC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB0aGUgc2VjdXJpdHkgZml4IHRoYXQgYXBwZWFycyBpbiB2Mi4xNy41OyBzZWUKK3RoZSByZWxlYXNlIG5vdGVzIGZvciB0aGF0IHZlcnNpb24gZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjUuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjUuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjZWIzNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNS4wLnR4dApAQCAtMCwwICsxLDM3MCBAQAorR2l0IDIuMjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYyLjI0CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMKKworCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogQSB0dXRvcmlhbCBvbiBvYmplY3QgZW51bWVyYXRpb24gaGFzIGJlZW4gYWRkZWQuCisKKyAqIFRoZSBicmFuY2ggZGVzY3JpcHRpb24gKCJnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiIpIGhhcyBiZWVuCisgICB1c2VkIHRvIGZpbGwgdGhlIGJvZHkgb2YgdGhlIGNvdmVyIGxldHRlcnMgYnkgdGhlIGZvcm1hdC1wYXRjaAorICAgY29tbWFuZDsgdGhpcyBoYXMgYmVlbiBlbmhhbmNlZCBzbyB0aGF0IHRoZSBzdWJqZWN0IGNhbiBhbHNvIGJlCisgICBmaWxsZWQuCisKKyAqICJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIiBoYXMgYmVlbiBtYXJrZWQgYXMgZGVwcmVjYXRlZDsgdGhpcworICAgcmVsZWFzZSBzdG9wcyBhZHZlcnRpc2luZyBpdCBpbiB0aGUgImdpdCByZWJhc2UgLWgiIG91dHB1dC4KKworICogVGhlIGNvZGUgdG8gZ2VuZXJhdGUgbXVsdGktcGFjayBpbmRleCBsZWFybmVkIHRvIHNob3cgKG9yIG5vdCB0bworICAgc2hvdykgcHJvZ3Jlc3MgaW5kaWNhdG9ycy4KKworICogImdpdCBhcHBseSAtLTN3YXkiIGxlYXJuZWQgdG8gaG9ub3IgbWVyZ2UuY29uZmxpY3RTdHlsZQorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgbGlrZSBtZXJnZXMgd291bGQuCisKKyAqIFRoZSBjdXN0b20gZm9ybWF0IGZvciAiZ2l0IGxvZyAtLWZvcm1hdD08Zm9ybWF0PiIgbGVhcm5lZCB0aGUgbC9MCisgICBwbGFjZWhvbGRlciB0aGF0IGlzIHNpbWlsYXIgdG8gZS9FIHRoYXQgZmlsbHMgaW4gdGhlIGUtbWFpbAorICAgYWRkcmVzcywgYnV0IG9ubHkgdGhlIGxvY2FsIHBhcnQgb24gdGhlIGxlZnQgc2lkZSBvZiAnQCcuCisKKyAqIERvY3VtZW50YXRpb24gcGFnZXMgZm9yICJnaXQgc2hvcnRsb2ciIG5vdyBsaXN0IGNvbW1pdCBsaW1pdGluZworICAgb3B0aW9ucyBleHBsaWNpdGx5LgorCisgKiBUaGUgcGF0dGVybnMgdG8gZGV0ZWN0IGZ1bmN0aW9uIGJvdW5kYXJ5IGZvciBFbGl4aXIgbGFuZ3VhZ2UgaGFzCisgICBiZWVuIGFkZGVkLgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBsZWFybmVkIHRoYXQgdGhlICItLW9udG8iCisgICBvcHRpb24gb2YgImdpdCByZWJhc2UiIGNhbiB0YWtlIGl0cyBhcmd1bWVudCBhcyB0aGUgdmFsdWUgb2YgdGhlCisgICBvcHRpb24uCisKKyAqIFRoZSB1c2VyZGlmZiBtYWNoaW5lcnkgaGFzIGJlZW4gdGF1Z2h0IHRoYXQgImFzeW5jIGRlZiIgaXMgYW5vdGhlcgorICAgd2F5IHRvIGJlZ2luIGEgImZ1bmN0aW9uIiBpbiBQeXRob24uCisKKyAqICJnaXQgcmFuZ2UtZGlmZiIgbGVhcm5lZCB0byB0YWtlIHRoZSAiLS1ub3Rlcz08cmVmPiIgYW5kIHRoZQorICAgIi0tbm8tbm90ZXMiIG9wdGlvbnMgdG8gY29udHJvbCB0aGUgY29tbWl0IG5vdGVzIGluY2x1ZGVkIGluIHRoZQorICAgbG9nIG1lc3NhZ2UgdGhhdCBnZXRzIGNvbXBhcmVkLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwiIHJ1biBvdXRzaWRlIG9mIGFueSB3b3JraW5nIHRyZWUgZGlkCisgICBub3QgZXJyb3Igb3V0LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEEgZmV3IGNvbW1hbmRzIGxlYXJuZWQgdG8gdGFrZSB0aGUgcGF0aHNwZWMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQKKyAgIG9yIGEgbmFtZWQgZmlsZSwgaW5zdGVhZCBvZiB0YWtpbmcgaXQgYXMgdGhlIGNvbW1hbmQgbGluZQorICAgYXJndW1lbnRzLCB3aXRoIHRoZSAiLS1wYXRoc3BlYy1mcm9tLWZpbGUiIG9wdGlvbi4KKworICogImdpdCBzdWJtb2R1bGUiIGxlYXJuZWQgYSBzdWJjb21tYW5kICJzZXQtdXJsIi4KKworICogImdpdCBsb2ciIGZhbWlseSBsZWFybmVkICItLXByZXR0eT1yZWZlcmVuY2UiIHRoYXQgZ2l2ZXMgdGhlIG5hbWUKKyAgIG9mIGEgY29tbWl0IGluIHRoZSBmb3JtYXQgdGhhdCBpcyBvZnRlbiB1c2VkIHRvIHJlZmVyIHRvIGl0IGluIGxvZworICAgbWVzc2FnZXMuCisKKyAqIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuICJnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIGFuZAorICAgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSB3YXMgaWxsLWRlc2lnbmVkLiAgVGhlIGRvY3VtZW50YXRpb24gYW5kCisgICBjb2RlIGhhdmUgYmVlbiB0YXVnaHQgdG8gbWFrZSBtb3JlIGNsZWFyIHJlY29tbWVuZGF0aW9ucyB3aGVuIHRoZQorICAgdXNlcnMgc2VlIGZhaWx1cmVzLgorCisgKiBNYW5hZ2VtZW50IG9mIHNwYXJzZWx5IGNoZWNrZWQtb3V0IHdvcmtpbmcgdHJlZSBoYXMgZ2FpbmVkIGEKKyAgIGRlZGljYXRlZCAic3BhcnNlLWNoZWNrb3V0IiBjb21tYW5kLgorCisgKiBNaXNjZWxsYW5lb3VzIHNtYWxsIFVYIGltcHJvdmVtZW50cyBvbiAiZ2l0LXA0Ii4KKworICogImdpdCBzcGFyc2UtY2hlY2tvdXQgbGlzdCIgc3ViY29tbWFuZCBsZWFybmVkIHRvIGdpdmUgaXRzIG91dHB1dCBpbgorICAgYSBtb3JlIGNvbmNpc2UgZm9ybSB3aGVuIHRoZSAiY29uZSIgbW9kZSBpcyBpbiBlZmZlY3QuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogRGVidWdnaW5nIHN1cHBvcnQgZm9yIGxhenkgY2xvbmluZyBoYXMgYmVlbiBhIGJpdCBpbXByb3ZlZC4KKworICogTW92ZSB0aGUgZGVmaW5pdGlvbiBvZiBhIHNldCBvZiBiaXRtYXNrIGNvbnN0YW50cyBmcm9tIDBjdGFsCisgICBsaXRlcmFsIHRvICgxVTw8Y291bnQpIG5vdGF0aW9uLgorCisgKiBUZXN0IHVwZGF0ZXMgdG8gcHJlcGFyZSBmb3IgU0hBLTIgdHJhbnNpdGlvbiBjb250aW51ZXMuCisKKyAqIENydWZ0eSBjb2RlIGFuZCBsb2dpYyBhY2N1bXVsYXRlZCBvdmVyIHRpbWUgYXJvdW5kIHRoZSBvYmplY3QKKyAgIHBhcnNpbmcgYW5kIGxvdy1sZXZlbCBvYmplY3QgYWNjZXNzIHVzZWQgaW4gImdpdCBmc2NrIiBoYXZlIGJlZW4KKyAgIGNsZWFuZWQgdXAuCisKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiAiZ2l0IGxvZyAtLWdyYXBoIiBnb3QgcmVmYWN0b3JlZCBhbmQgdGhlbiBpdHMKKyAgIG91dHB1dCBnb3Qgc2ltcGxpZmllZC4KKworICogRm9sbG93IHJlY2VudCBwdXNoIHRvIG1vdmUgQVBJIGRvY3MgZnJvbSBEb2N1bWVudGF0aW9uLyB0byBoZWFkZXIKKyAgIGZpbGVzIGFuZCB1cGRhdGUgY29uZmlnLmgKKworICogImdpdCBidW5kbGUiIGhhcyBiZWVuIHRhdWdodCB0byB1c2UgdGhlIHBhcnNlIG9wdGlvbnMgQVBJLiAgImdpdAorICAgYnVuZGxlIHZlcmlmeSIgbGVhcm5lZCAiLS1xdWlldCIgYW5kICJnaXQgYnVuZGxlIGNyZWF0ZSIgbGVhcm5lZAorICAgb3B0aW9ucyB0byBjb250cm9sIHRoZSBwcm9ncmVzcyBvdXRwdXQuCisKKyAqIEhhbmRsaW5nIG9mIGNvbW1pdCBvYmplY3RzIHRoYXQgdXNlIG5vbiBVVEYtOCBlbmNvZGluZyBkdXJpbmcKKyAgICJyZWJhc2UgLWkiIGhhcyBiZWVuIGltcHJvdmVkLgorCisgKiBUaGUgYmVnaW5uaW5nIG9mIHJld3JpdGluZyAiZ2l0IGFkZCAtaSIgaW4gQy4KKworICogQSBsYWJlbCB1c2VkIGluIHRoZSB0b2RvIGxpc3QgdGhhdCBhcmUgZ2VuZXJhdGVkIGJ5ICJnaXQgcmViYXNlCisgICAtLXJlYmFzZS1tZXJnZXMiIGlzIHVzZWQgYXMgYSBwYXJ0IG9mIGEgcmVmbmFtZTsgdGhlIGxvZ2ljIHRvIGNvbWUKKyAgIHVwIHdpdGggdGhlIGxhYmVsIGhhcyBiZWVuIHRpZ2h0ZW5lZCB0byBhdm9pZCBuYW1lcyB0aGF0IGNhbm5vdCBiZQorICAgdXNlZCBhcyBzdWNoLgorCisgKiBUaGUgbG9naWMgdG8gYXZvaWQgZHVwbGljYXRlIGxhYmVsIG5hbWVzIGdlbmVyYXRlZCBieSAiZ2l0IHJlYmFzZQorICAgLS1yZWJhc2UtbWVyZ2VzIiBmb3Jnb3QgdGhhdCB0aGUgbWFjaGluZXJ5IGl0c2VsZiB1c2VzICJvbnRvIiBhcyBhCisgICBsYWJlbCBuYW1lLCB3aGljaCBtdXN0IGJlIGF2b2lkZWQgYnkgYXV0by1nZW5lcmF0ZWQgbGFiZWxzLCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBXZSBoYXZlIGhhZCBjb21wYXRpYmlsaXR5IGZhbGxiYWNrIG1hY3JvIGRlZmluaXRpb25zIGZvciAiUFJJdU1BWCIsCisgICAiUFJJdTMyIiwgZXRjLiBidXQgZGlkIG5vdCBmb3IgIlBSSWRNQVgiLCB3aGlsZSB0aGUgY29kZSB1c2VkIHRoZQorICAgbGFzdCBvbmUgYXBwYXJlbnRseSB3aXRob3V0IGFueSBoaWNjdXAgcmVwb3J0ZWQgcmVjZW50bHkuICBUaGUKKyAgIGZhbGxiYWNrIG1hY3JvIGRlZmluaXRpb25zIGZvciB0aGVzZSA8aW50dHlwZXMuaD4gbWFjcm9zIHRoYXQgbXVzdAorICAgYXBwZWFyIGluIEM5OSBzeXN0ZW1zIGhhdmUgYmVlbiByZW1vdmVkLgorCisgKiBSZWNlbnRseSB3ZSBoYXZlIGRlY2xhcmVkIHRoYXQgR0lUX1RFU1RfKiB2YXJpYWJsZXMgdGFrZSB0aGUKKyAgIHVzdWFsIGJvb2xlYW4gdmFsdWVzIChpdCB1c2VkIHRvIGJlIHRoYXQgc29tZSB1c2VkICJub24tZW1wdHkKKyAgIG1lYW5zIHRydWUiIGFuZCB0YWtpbmcgR0lUX1RFU1RfVkFSPVllc1BsZWFzZSBhcyB0cnVlKTsgbWFrZQorICAgc3VyZSB3ZSBub3RpY2UgYW5kIGZhaWwgd2hlbiBub24tYm9vbCBzdHJpbmdzIGFyZSBnaXZlbiB0bworICAgdGhlc2UgdmFyaWFibGVzLgorCisgKiBVc2VycyBvZiBvbmV3YXlfbWVyZ2UoKSAobGlrZSAicmVzZXQgLS1oYXJkIikgbGVhcm5lZCB0byB0YWtlCisgICBhZHZhbnRhZ2Ugb2YgZnNtb25pdG9yIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGxzdGF0KDIpIGNhbGxzLgorCisgKiBQZXJmb3JtYW5jZSB0d2VhayBvbiAiZ2l0IHB1c2giIGludG8gYSByZXBvc2l0b3J5IHdpdGggbWFueSByZWZzCisgICB0aGF0IHBvaW50IGF0IG9iamVjdHMgd2UgaGF2ZSBuZXZlciBoZWFyZCBvZi4KKworICogUGVyZlRlc3QgZml4IHRvIGF2b2lkIHN0YWxlIHJlc3VsdCBtaXhlZCB1cCB3aXRoIHRoZSBsYXRlc3Qgcm91bmQKKyAgIG9mIHRlc3QgcmVzdWx0cy4KKworICogSGlkZSBsb3dlci1sZXZlbCB2ZXJpZnlfc2lnbmVkLWJ1ZmZlcigpIEFQSSBhcyBhIHB1cmUgaGVscGVyIHRvCisgICBpbXBsZW1lbnQgdGhlIHB1YmxpYyBjaGVja19zaWduYXR1cmUoKSBmdW5jdGlvbiwgaW4gb3JkZXIgdG8KKyAgIGVuY291cmFnZSBuZXcgY2FsbGVycyB0byB1c2UgdGhlIGNvcnJlY3QgYW5kIG1vcmUgc3RyaWN0CisgICB2YWxpZGF0aW9uLgorCisgKiBVbm5lY2Vzc2FyeSByZWFkaW5nIG9mIHN0YXRlIHZhcmlhYmxlcyBiYWNrIGZyb20gdGhlIGRpc2sgZHVyaW5nCisgICBzZXF1ZW5jZXIgb3BlcmF0aW9uIGhhcyBiZWVuIHJlZHVjZWQuCisKKyAqIFRoZSBjb2RlIGhhcyBiZWVuIG1hZGUgdG8gYXZvaWQgZ210aW1lKCkgYW5kIGxvY2FsdGltZSgpIGFuZCBwcmVmZXIKKyAgIHRoZWlyIHJlZW50cmFudCBjb3VudGVycGFydHMuCisKKyAqIEluIGEgcmVwb3NpdG9yeSB3aXRoIG1hbnkgcGFja2ZpbGVzLCB0aGUgY29zdCBvZiB0aGUgcHJvY2VkdXJlIHRoYXQKKyAgIGF2b2lkcyByZWdpc3RlcmluZyB0aGUgc2FtZSBwYWNrZmlsZSB0d2ljZSB3YXMgdW5uZWNlc3NhcmlseSBoaWdoCisgICBieSB1c2luZyBhbiBpbmVmZmljaWVudCBzZWFyY2ggYWxnb3JpdGhtLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFJlZG8gImdpdCBuYW1lLXJldiIgdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxzLgorCisgKiBGcmVlQlNEIENJIHN1cHBvcnQgdmlhIENpcnJ1cy1DSSBoYXMgYmVlbiBhZGRlZC4KKworCitGaXhlcyBzaW5jZSB2Mi4yNAorLS0tLS0tLS0tLS0tLS0tLS0KKworICogInJlYmFzZSAtaSIgY2Vhc2VkIHRvIHJ1biBwb3N0LWNvbW1pdCBob29rIGJ5IG1pc3Rha2UgaW4gYW4gZWFybGllcgorICAgdXBkYXRlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgbm90ZXMgY29weSAkb3JpZ2luYWwiIG91Z2h0IHRvIGNvcHkgdGhlIG5vdGVzIGF0dGFjaGVkIHRvIHRoZQorICAgb3JpZ2luYWwgb2JqZWN0IHRvIEhFQUQsIGJ1dCBhIG1pc3Rha2VuIHRpZ2h0ZW5pbmcgdG8gY29tbWFuZCBsaW5lCisgICBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBtYWRlIGVhcmxpZXIgZGlzYWJsZWQgdGhhdCBmZWF0dXJlIGJ5IG1pc3Rha2UuCisKKyAqIFdoZW4gYWxsIGZpbGVzIGZyb20gc29tZSBzdWJkaXJlY3Rvcnkgd2VyZSByZW5hbWVkIHRvIHRoZSByb290CisgICBkaXJlY3RvcnksIHRoZSBkaXJlY3RvcnkgcmVuYW1lIGhldXJpc3RpY3Mgd291bGQgZmFpbCB0byBkZXRlY3QgdGhhdAorICAgYXMgYSByZW5hbWUvbWVyZ2Ugb2YgdGhlIHN1YmRpcmVjdG9yeSB0byB0aGUgcm9vdCBkaXJlY3RvcnksIHdoaWNoIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIENvZGUgY2xlYW4tdXAgYW5kIGEgYnVnZml4IGluIHRoZSBsb2dpYyB1c2VkIHRvIHRlbGwgd29ya3RyZWUgbG9jYWwKKyAgIGFuZCByZXBvc2l0b3J5IGdsb2JhbCByZWZzIGFwYXJ0LgorICAgKG1lcmdlIGY0NWY4OGIyZTQgc2cvZGlyLXRyaWUtZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN0YXNoIHNhdmUiIGluIGEgd29ya2luZyB0cmVlIHRoYXQgaXMgc3BhcnNlbHkgY2hlY2tlZCBvdXQKKyAgIG1pc3Rha2VubHkgcmVtb3ZlZCBwYXRocyB0aGF0IGFyZSBvdXRzaWRlIHRoZSBhcmVhIG9mIGludGVyZXN0LgorICAgKG1lcmdlIDRhNThjM2Q3ZjcganMvdXBkYXRlLWluZGV4LWlnbm9yZS1yZW1vdmFsLWZvci1za2lwLXdvcmt0cmVlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBIRUFELmxvY2siIGRpZCBub3QgZ2l2ZSB0aGUgcmlnaHQgcGF0aAorICAgd2hlbiBydW4gaW4gYSBzZWNvbmRhcnkgd29ya3RyZWUuCisgICAobWVyZ2UgNzZhNTNkNjQwZiBqcy9naXQtcGF0aC1oZWFkLWRvdC1sb2NrLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2UgLS1uby1jb21taXQiIG5lZWRzICItLW5vLWZmIiBpZiB5b3UgZG8gbm90IHdhbnQgdG8gbW92ZQorICAgSEVBRCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkIGluIHRoZSBtYW51YWwgcGFnZSBmb3IgImdpdCBiaXNlY3QiLgorICAgKG1lcmdlIDhkZDMyN2IyNDYgbWEvYmlzZWN0LWRvYy1zYW1wbGUtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCB3b3JrdHJlZSBhZGQiIGludGVybmFsbHkgY2FsbHMgInJlc2V0IC0taGFyZCIgdGhhdCBzaG91bGQgbm90CisgICBkZXNjZW5kIGludG8gc3VibW9kdWxlcywgZXZlbiB3aGVuIHN1Ym1vZHVsZS5yZWN1cnNlIGNvbmZpZ3VyYXRpb24KKyAgIGlzIHNldCwgYnV0IGl0IHdhcyBhZmZlY3RlZC4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDQ3ODJjZjJhYjYgcGIvbm8tcmVjdXJzaXZlLXJlc2V0LWhhcmQtaW4td29ya3RyZWUtYWRkIGxhdGVyIHRvIG1haW50KS4KKworICogTWVzc2FnZXMgZnJvbSBkaWUoKSBldGMuIGNhbiBiZSBtaXhlZCB1cCBmcm9tIG11bHRpcGxlIHByb2Nlc3NlcworICAgd2l0aG91dCBldmVuIGxpbmUgYnVmZmVyaW5nIG9uIFdpbmRvd3MsIHdoaWNoIGhhcyBiZWVuIHdvcmtlZAorICAgYXJvdW5kLgorICAgKG1lcmdlIDExNmQxZmE2YzYganMvdnJlcG9ydGYtd28tYnVmZmVyaW5nIGxhdGVyIHRvIG1haW50KS4KKworICogSFRUUCB0cmFuc3BvcnQgaGFkIHBvc3NpYmxlIGFsbG9jYXRvci9kZWFsbG9jYXRvciBtaXNtYXRjaCwgd2hpY2gKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIHdhdGNobWFuIGludGVncmF0aW9uIGZvciBmc21vbml0b3Igd2FzIHJhY3ksIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQgdG8gYmUgbW9yZSBjb25zZXJ2YXRpdmUuCisgICAobWVyZ2UgZGQwYjYxZjU3NyBrdy9mc21vbml0b3Itd2F0Y2htYW4tZml4IGxhdGVyIHRvIG1haW50KS4KKworICogRmV0Y2hpbmcgZnJvbSBtdWx0aXBsZSByZW1vdGVzIGludG8gdGhlIHNhbWUgcmVwb3NpdG9yeSBpbiBwYXJhbGxlbAorICAgaGFkIGEgYmFkIGludGVyYWN0aW9uIHdpdGggdGhlIHJlY2VudCBjaGFuZ2UgdG8gKG9wdGlvbmFsbHkpIHVwZGF0ZQorICAgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBhIGZldGNoIGpvYiBmaW5pc2hlcywgYXMgdGhlc2UgcGFyYWxsZWwKKyAgIGZldGNoZXMgY29tcGV0ZSB3aXRoIGVhY2ggb3RoZXIuICBXaGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFJlY2VudCB1cGRhdGUgdG8gImdpdCBzdGFzaCBwb3AiIG1hZGUgdGhlIGNvbW1hbmQgZW1wdHkgdGhlIGluZGV4CisgICB3aGVuIHJ1biB3aXRoIHRoZSAiLS1xdWlldCIgb3B0aW9uLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgZmV0Y2giIGNvZGVwYXRoIGhhZCBhIGJpZyAiZG8gbm90IGxhemlseSBmZXRjaCBtaXNzaW5nIG9iamVjdHMKKyAgIHdoZW4gSSBhc2sgaWYgc29tZXRoaW5nIGV4aXN0cyIgc3dpdGNoLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQgYnkKKyAgIG1hcmtpbmcgdGhlICJkb2VzIHRoaXMgdGhpbmcgZXhpc3Q/IiBjYWxscyB3aXRoICJpZiBub3QgcGxlYXNlIGRvIG5vdAorICAgbGF6aWx5IGZldGNoIGl0IiBmbGFnLgorCisgKiBUZXN0IHVwZGF0ZSB0byBhdm9pZCB3YXN0ZWQgY3ljbGVzLgorICAgKG1lcmdlIGUwMzE2Njk1ZWMgc2cvc2tpcC1za2lwcGVkLXByZXJlcSBsYXRlciB0byBtYWludCkuCisKKyAqIEVycm9yIGhhbmRsaW5nIGFmdGVyICJnaXQgcHVzaCIgZmluaXNoZXMgc2VuZGluZyB0aGUgcGFja2RhdGEgYW5kCisgICB3YWl0cyBmb3IgdGhlIHJlc3BvbnNlIHRvIHRoZSByZW1vdGUgc2lkZSBoYXMgYmVlbiBpbXByb3ZlZC4KKyAgIChtZXJnZSBhZDdhNDAzMjY4IGprL3NlbmQtcGFjay1yZW1vdGUtZmFpbHVyZSBsYXRlciB0byBtYWludCkuCisKKyAqIFNvbWUgY29kZXBhdGhzIGluICJnaXR3ZWIiIHRoYXQgZm9yZ290IHRvIGVzY2FwZSBVUkxzIGdlbmVyYXRlZAorICAgYmFzZWQgb24gZW5kLXVzZXIgaW5wdXQgaGF2ZSBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBhMzc2ZTM3YjJjIGprL2dpdHdlYi1hbnRpLXhzcyBsYXRlciB0byBtYWludCkuCisKKyAqIENJIGpvYnMgZm9yIG1hY09TIGhhcyBiZWVuIG1hZGUgbGVzcyBjaGF0dHkgd2hlbiB1cGRhdGluZyBwZXJmb3JjZQorICAgcGFja2FnZSB1c2VkIGR1cmluZyB0ZXN0aW5nLgorICAgKG1lcmdlIDBkYmM0YTBlZGYgamMvYXp1cmUtY2ktb3N4LWZpeC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHVucGFjay1vYmplY3RzIiB1c2VkIHRvIHNob3cgcHJvZ3Jlc3MgYmFzZWQgb25seSBvbiB0aGUgbnVtYmVyCisgICBvZiByZWNlaXZlZCBhbmQgdW5wYWNrZWQgb2JqZWN0cywgd2hpY2ggc3RhbGxlZCB3aGVuIGl0IGhhcyB0bworICAgaGFuZGxlIGFuIHVudXN1YWxseSBsYXJnZSBvYmplY3QuICBJdCBub3cgc2hvd3MgdGhlIHRocm91Z2hwdXQgYXMKKyAgIHdlbGwuCisgICAobWVyZ2UgYmFlNjBiYTdlOSBzZy91bnBhY2stcHJvZ3Jlc3MtdGhyb3VnaHB1dCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzZXF1ZW5jZXIgbWFjaGluZXJ5IGNvbXBhcmVkIHRoZSBIRUFEIGFuZCB0aGUgc3RhdGUgaXQgaXMKKyAgIGF0dGVtcHRpbmcgdG8gY29tbWl0IHRvIGRlY2lkZSBpZiB0aGUgcmVzdWx0IHdvdWxkIGJlIGEgbm8tb3AKKyAgIGNvbW1pdCwgZXZlbiB3aGVuIGFtZW5kaW5nIGEgY29tbWl0LCB3aGljaCB3YXMgaW5jb3JyZWN0LCBhbmQKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIGNvZGUgdG8gcGFyc2UgR1BHIG91dHB1dCB1c2VkIHRvIGFzc3VtZSBpbmNvcnJlY3RseSB0aGF0IHRoZQorICAgZmludGVycHJpbnQgZm9yIHRoZSBwcmltYXJ5IGtleSB3b3VsZCBhbHdheXMgYmUgcHJlc2VudCBmb3IgYSB2YWxpZAorICAgc2lnbmF0dXJlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNjdhNmVhNjMwMCBoaS9ncGctb3B0aW9uYWwtcGtmcC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMiIGFuZCAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgLS1jYWNoZWQiIHNob3cKKyAgIGRpZmZlcmVudCB0aGluZ3MsIGJ1dCB0aGUgZG9jdW1lbnRhdGlvbiBkaWQgbm90IGNvdmVyIHRoZW0KKyAgIGNvcnJlY3RseSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDhkNDgzYzg0MDggbWcvZG9jLXN1Ym1vZHVsZS1zdGF0dXMtY2FjaGVkIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXNldCAtLXBhdGNoICRvYmplY3QiIHdpdGhvdXQgYW55IHBhdGhzcGVjIHNob3VsZCBhbGxvdyBhCisgICB0cmVlIG9iamVjdCB0byBiZSBnaXZlbiwgYnV0IGluY29ycmVjdGx5IHJlcXVpcmVkIGEgY29tbWl0dGlzaCwKKyAgIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBzdWJtb2R1bGUgc3RhdHVzIiB0aGF0IGlzIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5IG9mIHRoZQorICAgc3VwZXJwcm9qZWN0IGRpZCBub3Qgd29yayB3ZWxsLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgMWYzYWVhMjJjNyBtZy9zdWJtb2R1bGUtc3RhdHVzLWZyb20tYS1zdWJkaXJlY3RvcnkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgcmV2aXNpb24gd2Fsa2luZyBtYWNoaW5lcnkgdXNlcyByZXNvdXJjZXMgbGlrZSBwZXItb2JqZWN0IGZsYWcKKyAgIGJpdHMgdGhhdCBuZWVkIHRvIGJlIHJlc2V0IGJlZm9yZSBhIG5ldyBpdGVyYXRpb24gb2Ygd2Fsa2luZworICAgYmVnaW5zLCBidXQgdGhlIHJlc291cmNlcyByZWxhdGVkIHRvIHRvcG9sb2dpY2FsIHdhbGsgd2VyZSBub3QKKyAgIGNsZWFyZWQgY29ycmVjdGx5LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgMGFhMGMyYjJlYyBtaC9jbGVhci10b3BvLXdhbGstdXBvbi1yZXNldCBsYXRlciB0byBtYWludCkuCisKKyAqIFRyYXZpc0NJIHVwZGF0ZS4KKyAgIChtZXJnZSAxNzY0NDFiZmI1IHNnL29zeC1mb3JjZS1nY2MtOSBsYXRlciB0byBtYWludCkuCisKKyAqIFdoaWxlIHJ1bm5pbmcgInJldmVydCIgb3IgImNoZXJyeS1waWNrIC0tZWRpdCIgZm9yIG11bHRpcGxlCisgICBjb21taXRzLCBhIHJlY2VudCByZWdyZXNzaW9uIGluY29ycmVjdGx5IGRldGVjdGVkICJub3RoaW5nIHRvCisgICBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhbiIsIGluc3RlYWQgb2YgcmVwbGF5aW5nIHRoZSBjb21taXRzLAorICAgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGJlZmQ0ZjZhODEgc2cvYXNzdW1lLW5vLXRvZG8tdXBkYXRlLWluLWNoZXJyeS1waWNrIGxhdGVyIHRvIG1haW50KS4KKworICogV29yayBhcm91bmQgYSBpc3N1ZSB3aGVyZSBhIEZEIHRoYXQgaXMgbGVmdCBvcGVuIHdoZW4gc3Bhd25pbmcgYQorICAgY2hpbGQgcHJvY2VzcyBhbmQgaXMga2VwdCBvcGVuIGluIHRoZSBjaGlsZCBjYW4gaW50ZXJmZXJlIHdpdGggdGhlCisgICBvcGVyYXRpb24gaW4gdGhlIHBhcmVudCBwcm9jZXNzIG9uIFdpbmRvd3MuCisKKyAqIE9uZSBraW5kIG9mIHByb2dyZXNzIG1lc3NhZ2VzIHdlcmUgYWx3YXlzIGdpdmVuIGR1cmluZyBjb21taXQtZ3JhcGgKKyAgIGdlbmVyYXRpb24sIGluc3RlYWQgb2YgZm9sbG93aW5nIHRoZSAiaWYgaXQgdGFrZXMgbW9yZSB0aGFuIHR3bworICAgc2Vjb25kcywgc2hvdyBwcm9ncmVzcyIgcGF0dGVybiwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHJlYmFzZSIgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbiBmb3JtYXQudXNlQXV0b0Jhc2UKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgc2V0LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSAiZGlmZiIgbWFjaGluZXJ5IGxlYXJuZWQgbm90IHRvIGxvc2UgYWRkZWQvcmVtb3ZlZCBibGFuayBsaW5lcworICAgaW4gdGhlIGNvbnRleHQgd2hlbiAtLWlnbm9yZS1ibGFuay1saW5lcyBhbmQgLS1mdW5jdGlvbi1jb250ZXh0IGFyZQorICAgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgKG1lcmdlIDBiYjMxM2E1NTIgcnMveGRpZmYtaWdub3JlLXdzLXctZnVuYy1jb250ZXh0IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHRlc3Qgb24gImZhc3QtaW1wb3J0IiB1c2VkIHRvIGdldCBzdHVjayB3aGVuICJmYXN0LWltcG9ydCIgZGllZAorICAgaW4gdGhlIG1pZGRsZS4KKyAgIChtZXJnZSAwZDliMGQ3ODg1IHNnL3Q5MzAwLXJvYnVzdGlmeSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBjYW4gdGFrZSBhIHNldCBvZiBjb25maWd1cmVkIGZvcm1hdC5ub3RlcyB2YWx1ZXMKKyAgIHRvIHNwZWNpZnkgd2hpY2ggbm90ZXMgcmVmcyB0byB1c2UgaW4gdGhlIGxvZyBtZXNzYWdlIHBhcnQgb2YgdGhlCisgICBvdXRwdXQuICBUaGUgYmVoYXZpb3VyIG9mIHRoaXMgd2FzIG5vdCBjb25zaXN0ZW50IHdpdGggbXVsdGlwbGUKKyAgIC0tbm90ZXMgY29tbWFuZCBsaW5lIG9wdGlvbnMsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBlMGY5MDk1YWFhIGRsL2Zvcm1hdC1wYXRjaC1ub3Rlcy1jb25maWctZml4dXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHA0IiB1c2VkIHRvIGlnbm9yZSBsZnMuc3RvcmFnZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGVhOTRiMTZmYjggcmIvcDQtbGZzIGxhdGVyIHRvIG1haW50KS4KKworICogQXNzb3J0ZWQgZml4ZXMgdG8gdGhlIGRpcmVjdG9yeSB0cmF2ZXJzYWwgQVBJLgorICAgKG1lcmdlIDY4MzZkMmZlMDYgZW4vZmlsbC1kaXJlY3RvcnktZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGb3JiaWQgcGF0aG5hbWVzIHRoYXQgdGhlIHBsYXRmb3JtJ3MgZmlsZXN5c3RlbSBjYW5ub3QgcmVwcmVzZW50IG9uCisgICBNaW5HVy4KKyAgIChtZXJnZSA0ZGM0MmM2YzE4IGpzL21pbmd3LXJlc2VydmVkLWZpbGVuYW1lcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC0tc2lnbm9mZiIgc3RvcHBlZCB3b3JraW5nIHdoZW4gdGhlIGNvbW1hbmQgd2FzIHdyaXR0ZW4KKyAgIGluIEMsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA0ZmU3ZTQzYzUzIGVuL3JlYmFzZS1zaWdub2ZmLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIGVhcmxpZXIgdXBkYXRlIHRvIEdpdCBmb3IgV2luZG93cyBkZWNsYXJlZCB0aGF0IGEgdHJlZSBvYmplY3QgaXMKKyAgIGludmFsaWQgaWYgaXQgaGFzIGEgcGF0aCBjb21wb25lbnQgd2l0aCBiYWNrc2xhc2ggaW4gaXQsIHdoaWNoIHdhcworICAgb3Zlcmx5IHN0cmljdCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLiAgVGhlIG9ubHkgcHJvdGVjdGlvbiB0aGUKKyAgIFdpbmRvd3MgdXNlcnMgbmVlZCBpcyB0byBwcmV2ZW50IHN1Y2ggcGF0aCAob3IgYW55IHBhdGggdGhhdCB0aGVpcgorICAgZmlsZXN5c3RlbSBjYW5ub3QgY2hlY2sgb3V0KSBmcm9tIGVudGVyaW5nIHRoZSBpbmRleC4KKyAgIChtZXJnZSAyMjRjN2Q3MGZhIGpzL21pbmd3LWxvb3Nlbi1vdmVyc3RyaWN0LXRyZWUtZW50cnktY2hlY2tzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGUgdG8gd3JpdGUgc3BsaXQgY29tbWl0LWdyYXBoIGZpbGUocykgdXBvbiBmZXRjaGluZyBjb21wdXRlZAorICAgYm9ndXMgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIgdXNlZCBpbiBzcGxpdHRpbmcgdGhlIHJlc3VsdGluZworICAgZmlsZXMsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA2MzAyMGYxNzVmIGRzL2NvbW1pdC1ncmFwaC1zZXQtc2l6ZS1tdWx0IGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgY29kZSBjbGVhbnVwLCBkb2NmaXgsIGJ1aWxkIGZpeCwgZXRjLgorICAgKG1lcmdlIDgwNzM2ZDdjNWUgamMvYW0tc2hvdy1jdXJyZW50LXBhdGNoLWRvY2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOGI2NTY1NzJjYSBzZy9jb21taXQtZ3JhcGgtdXNhZ2UtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2YzAyMDQyMTM5IG1yL2Nsb25lLWRpci1leGlzdHMtdG8tcGF0aC1leGlzdHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ0YWUxMzFlMzggc2cvYmxhbWUtaW5kZW50LWhldXJpc3RpY3MtaXMtbm93LXRoZS1kZWZhdWx0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwMTE1ZTVkOTI5IGRsL2RvYy1kaWZmLW5vLWluZGV4LWltcGxpZXMtZXhpdC1jb2RlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyNzBkZTZhY2JlIGVuL3Q2MDI0LXN0eWxlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxNGM0Nzc2ZDc1IG5zL3Rlc3QtZGVzYy10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2OGQ0MGYzMGM0IGRqL3R5cG9maXgtbWVyZ2Utc3RyYXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY2NmUwNDAxYWIgamsvb3B0aW0taW4tcGFjay1pZHgtY29udmVyc2lvbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTY5YmVkNzQyMSBycy9wYXJzZS1vcHRpb25zLWR1cC1udWxsLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTFiZDZiZTMyZCBycy91c2UtY29weS1hcnJheS1pbi1taW5ndy1zaGVsbC1jb21tYW5kLXByZXBhcmF0aW9uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiMDE4NzE5OTI3IG1hL3Q3MDA0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5MzI3NTdiMGNjIGFyL2luc3RhbGwtZG9jLXVwZGF0ZS1jbWRzLW5lZWRpbmctdGhlLXNoZWxsIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0NmVmZDI4YmUxIGVwL2d1YXJkLWtzZXQtdGFyLWhlYWRlcnMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDllNWFmZGY5OTcgZWMvZmV0Y2gtbWFyay1jb21tb24tcmVmcy10cmFjZTIgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGYwZTU4YjNmZTggcGIvc3VibW9kdWxlLXVwZGF0ZS1mZXRjaGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyYTAyMjYyMDc4IGRsL3Q1NTIwLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGE0ZmIwMTZiYTEganMvcGt0LWxpbmUtaC10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1NGE3YTY0NjEzIHJzL3NpbXBsaWZ5LXByZXBhcmUtY21kIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzZWFlMzBlNDY0IGprL2xvcmUtaXMtdGhlLWFyY2hpdmUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE0Yjc2NjRkZjggZGwvbG9yZS1pcy10aGUtYXJjaGl2ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMGU0MGE3M2E0YyBwby9idW5kbGUtZG9jLWNsb25hYmxlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlNzE0Yjg5OGM2IGFzL3Q3ODEyLW1pc3NpbmctcmVkaXJlY3RzLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTI4ZDllNmQwMSBqay9wZXJmLXdvLWdpdC1kb3QtcG0gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZjNDJmMjBlMjQgc2cvdGVzdC1zcXVlbGNoLW5vaXNlLWluLWNvbW1pdC1idWxrIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjNjQzNjhlM2EyIGJjL3Q5MDAxLXpzaC1pbi1wb3NpeC1lbXVsYXRpb24tbW9kZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTFkZThkZDdlZiBkci9icmFuY2gtdXNhZ2UtY2FzZWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTA1ZThjZjA3NCBycy9hcmNoaXZlLXppcC1jb2RlLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE0N2VlMzU1NTggcnMvY29tbWl0LWV4cG9ydC1lbnYtc2ltcGxpZnkgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ1MDdlY2M3NzEgcnMvcGF0Y2gtaWQtdXNlLW9pZC10by1oZXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDUxYTBhNGVkOTUgbXIvYmlzZWN0LXVzZS1hZnRlci1mcmVlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjYzJiZDVjNDVkIHBiL3N1Ym1vZHVsZS1kb2MteHJlZiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZGY1YmUwMTY2OSBqYS9kb2MtbWFya3VwLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdjNWNlYTcyNDIgbXIvYmlzZWN0LXNhdmUtcG9pbnRlci10by1jb25zdC1zdHJpbmcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDIwYTY3ZThjZTkganMvdXNlLXRlc3QtdG9vbC1vbi1wYXRoIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0ZTYxYjIyMTRkIGV3L3BhY2tmaWxlLXN5c2NhbGwtb3B0aW0gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGFjZTBmODZjN2YgcGIvY2xhcmlmeS1saW5lLWxvZy1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDc2M2E1OWU3MWMgZW4vbWVyZ2UtcmVjdXJzaXZlLW9pZC1lcS1zaW1wbGlmeSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNGUyYzRjMGQ0ZiBkby9naXR3ZWItdHlwb2ZpeC1pbi1jb21tZW50cyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDIxYzBmZmIwMiBqYi9kb2MtbXVsdGktcGFjay1pZHgtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmODc0MGM1ODZiIHBtL2FtLWluLWJvZHktaGVhZGVyLWRvYy11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDU4MTRkNDRkOWIgdG0vZG9jLXN1Ym1vZHVsZS1hYnNvcmItZml4IGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDg2OWIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI1LjEudHh0CkBAIC0wLDAgKzEsNTUgQEAKK0dpdCAyLjI1LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjI1CistLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGNvbW1pdCIgZ2l2ZXMgb3V0cHV0IHNpbWlsYXIgdG8gImdpdCBzdGF0dXMiIHdoZW4gdGhlcmUgaXMKKyAgIG5vdGhpbmcgdG8gY29tbWl0LCBidXQgd2l0aG91dCBob25vcmluZyB0aGUgYWR2aXNlLnN0YXR1c0hpbnRzCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIGhhc19vYmplY3RfZmlsZSgpIHNhaWQgIm5vIiBnaXZlbiBhbiBvYmplY3QgcmVnaXN0ZXJlZCB0byB0aGUKKyAgIHN5c3RlbSB2aWEgcHJldGVuZF9vYmplY3RfZmlsZSgpLCBtYWtpbmcgaXQgaW5jb25zaXN0ZW50IHdpdGgKKyAgIHJlYWRfb2JqZWN0X2ZpbGUoKSwgY2F1c2luZyBsYXp5IGZldGNoIHRvIGF0dGVtcHQgZmV0Y2hpbmcgYW4KKyAgIGVtcHR5IHRyZWUgZnJvbSBwcm9taXNvciByZW1vdGVzLgorCisgKiBUaGUgY29kZSB0aGF0IHRyaWVzIHRvIHNraXAgb3ZlciB0aGUgZW50cmllcyBmb3IgdGhlIHBhdGhzIGluIGEKKyAgIHNpbmdsZSBkaXJlY3RvcnkgdXNpbmcgdGhlIGNhY2hlLXRyZWUgd2FzIG5vdCBjYXJlZnVsIGVub3VnaAorICAgYWdhaW5zdCBjb3JydXB0IGluZGV4IGZpbGUuCisKKyAqIENvbXBsZXRlIGFuIHVwZGF0ZSB0byB0dXRvcmlhbCB0aGF0IGVuY291cmFnZXMgImdpdCBzd2l0Y2giIG92ZXIKKyAgICJnaXQgY2hlY2tvdXQiIHRoYXQgd2FzIGRvbmUgb25seSBoYWxmLXdheS4KKworICogUmVkdWNlIHVubmVjZXNzYXJ5IHJvdW5kLXRyaXAgd2hlbiBydW5uaW5nICJscy1yZW1vdGUiIG92ZXIgdGhlCisgICBzdGF0ZWxlc3MgUlBDIG1lY2hhbmlzbS4KKworICogImdpdCByZXN0b3JlIC0tc3RhZ2VkIiBkaWQgbm90IGNvcnJlY3RseSB1cGRhdGUgdGhlIGNhY2hlLXRyZWUKKyAgIHN0cnVjdHVyZSwgcmVzdWx0aW5nIGluIGJvZ3VzIHRyZWVzIHRvIGJlIHdyaXR0ZW4gYWZ0ZXJ3YXJkcywgd2hpY2gKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIGNvZGUgcmVjZW50bHkgYWRkZWQgdG8gbW92ZSB0byB0aGUgZW50cnkgYmV5b25kIHRoZSBvbmVzIGluIHRoZQorICAgc2FtZSBkaXJlY3RvcnkgaW4gdGhlIGluZGV4IGluIHRoZSBzcGFyc2UtY29uZSBtb2RlIGRpZCBub3QgY291bnQKKyAgIHRoZSBudW1iZXIgb2YgZW50cmllcyB0byBza2lwIG92ZXIgaW5jb3JyZWN0bHksIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFdvcmsgYXJvdW5kIHRlc3QgYnJlYWthZ2VzIGNhdXNlZCBieSBjdXN0b20gcmVnZXggZW5naW5lIHVzZWQgaW4KKyAgIGxpYmFzYW4sIHdoZW4gYWRkcmVzcyBzYW5pdGl6ZXIgaXMgdXNlZCB3aXRoIG1vcmUgcmVjZW50IHZlcnNpb25zCisgICBvZiBnY2MgYW5kIGNsYW5nLgorCisgKiAiZ2l0IGZldGNoIC0tcmVmbWFwPSIgb3B0aW9uIGhhcyBnb3QgYSBiZXR0ZXIgZG9jdW1lbnRhdGlvbi4KKworICogQ29ybmVyIGNhc2UgYnVncyBpbiAiZ2l0IGNsZWFuIiB0aGF0IHN0ZW1zIGZyb20gYSAobmVjZXNzYXJpbHkgZm9yCisgICBwZXJmb3JtYW5jZSByZWFzb25zKSBhd2t3YXJkIGNhbGxpbmcgY29udmVudGlvbiBpbiB0aGUgZGlyZWN0b3J5CisgICBlbnVtZXJhdGlvbiBBUEkgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGdyZXAgLS1uby1pbmRleCIgc2hvdWxkIG5vdCBnZXQgYWZmZWN0ZWQgYnkgdGhlIGNvbnRlbnRzIG9mCisgICB0aGUgLmdpdG1vZHVsZXMgZmlsZSBidXQgd2hlbiAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIGlzIGdpdmVuIG9yCisgICB0aGUgInN1Ym1vZHVsZS5yZWN1cnNlIiB2YXJpYWJsZSBpcyBzZXQsIGl0IGRpZC4gIE5vdyB0aGVzZQorICAgc2V0dGluZ3MgYXJlIGlnbm9yZWQgaW4gdGhlICItLW5vLWluZGV4IiBtb2RlLgorCisgKiBUZWNobmljYWwgZGV0YWlscyBvZiB0aGUgYnVuZGxlIGZvcm1hdCBoYXMgYmVlbiBkb2N1bWVudGVkLgorCisgKiBVbmhlbHBmdWwgd2FybmluZyBtZXNzYWdlcyBkdXJpbmcgZG9jdW1lbnRhdGlvbiBidWlsZCBoYXZlIGJlZW4KKyAgIHNxdWVsY2hlZC4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcywgY29kZSBjbGVhbi11cHMgYW5kIG1pbm9yIGZpeHVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDNjNTNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI1LjIudHh0CkBAIC0wLDAgKzEsNjAgQEAKK0dpdCAyLjI1LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjI1LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogTWlub3IgYnVnZml4ZXMgdG8gImdpdCBhZGQgLWkiIHRoYXQgaGFzIHJlY2VudGx5IGJlZW4gcmV3cml0dGVuIGluIEMuCisKKyAqIEFuIGVhcmxpZXIgdXBkYXRlIHRvIHNob3cgdGhlIGxvY2F0aW9uIG9mIHdvcmtpbmcgdHJlZSBpbiB0aGUgZXJyb3IKKyAgIG1lc3NhZ2UgZGlkIG5vdCBjb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCBhIGdpdCBjb21tYW5kIG1heSBiZQorICAgcnVuIGluIGEgYmFyZSByZXBvc2l0b3J5LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIG9wdGlvbiBvZiB2YXJpb3VzIHN1YmNvbW1hbmRzIGRpZCBub3QKKyAgIHdvcmsgd2VsbCB3aGVuIHJ1biBpbiBhbiBhbHRlcm5hdGUgd29ya3RyZWUsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFJ1bm5pbmcgImdpdCBybSIgb24gYSBzdWJtb2R1bGUgZmFpbGVkIHVubmVjZXNzYXJpbHkgd2hlbgorICAgLmdpdG1vZHVsZXMgaXMgb25seSBjYWNoZS1kaXJ0eSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgaWRlbnRpZmllcyBleGlzdGluZyBjb21taXRzIGluIGl0cyB0b2RvIGZpbGUgd2l0aAorICAgdGhlaXIgYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWUsIHdoaWNoIGNvdWxkIGJlY29tZSBhbWJpZ291cyBhcyBpdAorICAgZ29lcyB0byBjcmVhdGUgbmV3IGNvbW1pdHMsIGFuZCBoYXMgYSBtZWNoYW5pc20gdG8gYXZvaWQgYW1iaWd1aXR5CisgICBpbiB0aGUgbWFpbiBwYXJ0IG9mIGl0cyBleGVjdXRpb24uICBBIGZldyBvdGhlciBjYXNlcyBob3dldmVyIHdlcmUKKyAgIG5vdCBjb3ZlcmVkIGJ5IHRoZSBwcm90ZWN0aW9uIGFnYWluc3QgYW1iaWd1aXR5LCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBUaGUgaW5kZXgtcGFjayBjb2RlIG5vdyBkaWFnbm9zZXMgYSBiYWQgaW5wdXQgcGFja3N0cmVhbSB0aGF0CisgICByZWNvcmRzIHRoZSBzYW1lIG9iamVjdCB0d2ljZSB3aGVuIGl0IGlzIHVzZWQgYXMgZGVsdGEgYmFzZTsgdGhlCisgICBjb2RlIHVzZWQgdG8gZGVjbGFyZSBhIHNvZnR3YXJlIGJ1ZyB3aGVuIGVuY291bnRlcmluZyBzdWNoIGFuCisgICBpbnB1dCwgYnV0IGl0IGlzIGFuIGlucHV0IGVycm9yLgorCisgKiBUaGUgY29kZSB0byBhdXRvbWF0aWNhbGx5IHNocmluayB0aGUgZmFuLW91dCBpbiB0aGUgbm90ZXMgdHJlZSBoYWQKKyAgIGFuIG9mZi1ieS1vbmUgYnVnLCB3aGljaCBoYXMgYmVlbiBraWxsZWQuCisKKyAqICJnaXQgY2hlY2staWdub3JlIiBkaWQgbm90IHdvcmsgd2hlbiB0aGUgZ2l2ZW4gcGF0aCBpcyBleHBsaWNpdGx5CisgICBtYXJrZWQgYXMgbm90IGlnbm9yZWQgd2l0aCBhIG5lZ2F0aXZlIGVudHJ5IGluIHRoZSAuZ2l0aWdub3JlIGZpbGUuCisKKyAqIFRoZSBtZXJnZS1yZWN1cnNpdmUgbWFjaGluZXJ5IGZhaWxlZCB0byByZWZyZXNoIHRoZSBjYWNoZSBlbnRyeSBmb3IKKyAgIGEgbWVyZ2UgcmVzdWx0IGluIGEgY291cGxlIG9mIHBsYWNlcywgcmVzdWx0aW5nIGluIGFuIHVubmVjZXNzYXJ5CisgICBtZXJnZSBmYWlsdXJlLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogRml4IGZvciBhIGJ1ZyByZXZlYWxlZCBieSBhIHJlY2VudCBjaGFuZ2UgdG8gbWFrZSB0aGUgcHJvdG9jb2wgdjIKKyAgIHRoZSBkZWZhdWx0LgorCisgKiAiZ2l0IG1lcmdlIHNpZ25lZC10YWciIHdoaWxlIGxhY2tpbmcgdGhlIHB1YmxpYyBrZXkgc3RhcnRlZCB0byBzYXkKKyAgICJObyBzaWduYXR1cmUiLCB3aGljaCB3YXMgdXR0ZXJseSB3cm9uZy4gIFRoaXMgcmVncmVzc2lvbiBoYXMgYmVlbgorICAgcmV2ZXJ0ZWQuCisKKyAqIE1pbkdXJ3MgcG9sbCgpIGVtdWxhdGlvbiBoYXMgYmVlbiBpbXByb3ZlZC4KKworICogImdpdCBzaG93IiBhbmQgb3RoZXJzIGdhdmUgYW4gb2JqZWN0IG5hbWUgaW4gcmF3IGZvcm1hdCBpbiBpdHMKKyAgIGVycm9yIG91dHB1dCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkIHRvIGdpdmUgaXQgaW4gaGV4LgorCisgKiBCb3RoICJnaXQgbHMtcmVtb3RlIC1oIiBhbmQgImdpdCBncmVwIC1oIiBnaXZlIHNob3J0IHVzYWdlIGhlbHAsCisgICBsaWtlIGFueSBvdGhlciBHaXQgc3ViY29tbWFuZCwgYnV0IGl0IGlzIG5vdCB1bnJlYXNvbmFibGUgdG8gZXhwZWN0CisgICB0aGF0IHRoZSBmb3JtZXIgd291bGQgYmVoYXZlIHRoZSBzYW1lIGFzICJnaXQgbHMtcmVtb3RlIC0taGVhZCIKKyAgICh0aGVyZSBpcyBubyBvdGhlciBzZW5zaWJsZSBiZWhhdmlvdXIgZm9yIHRoZSBsYXR0ZXIpLiAgVGhlCisgICBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgaW4gYW4gYXR0ZW1wdCB0byBjbGFyaWZ5IHRoaXMuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGNvZGUgY2xlYW4tdXBzIGFuZCBtaW5vciBmaXh1cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjUuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjUuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVmN2YyMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNS4zLnR4dApAQCAtMCwwICsxLDUgQEAKK0dpdCB2Mi4yNS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB0aGUgc2VjdXJpdHkgZml4IHRoYXQgYXBwZWFycyBpbiB2Mi4xNy40OyBzZWUKK3RoZSByZWxlYXNlIG5vdGVzIGZvciB0aGF0IHZlcnNpb24gZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjUuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjUuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRiYjVkYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNS40LnR4dApAQCAtMCwwICsxLDUgQEAKK0dpdCB2Mi4yNS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB0aGUgc2VjdXJpdHkgZml4IHRoYXQgYXBwZWFycyBpbiB2Mi4xNy41OyBzZWUKK3RoZSByZWxlYXNlIG5vdGVzIGZvciB0aGF0IHZlcnNpb24gZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjYuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjYuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E3YTczNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNi4wLnR4dApAQCAtMCwwICsxLDM0MSBAQAorR2l0IDIuMjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYyLjI1CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMKKworICogImdpdCByZWJhc2UiIHVzZXMgYSBkaWZmZXJlbnQgYmFja2VuZCB0aGF0IGlzIGJhc2VkIG9uIHRoZSAnbWVyZ2UnCisgICBtYWNoaW5lcnkgYnkgZGVmYXVsdC4gIFRoZXJlIGFyZSBhIGZldyBrbm93biBkaWZmZXJlbmNlcyBpbiB0aGUKKyAgIGJlaGF2aW91ciBmcm9tIHRoZSB0cmFkaXRpb25hbCBtYWNoaW5lcnkgYmFzZWQgb24gcGF0Y2grYXBwbHkuCisKKyAgIElmIHlvdXIgd29ya2Zsb3cgaXMgbmVnYXRpdmVseSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZSwgcGxlYXNlCisgICByZXBvcnQgaXQgdG8gZ2l0QHZnZXIua2VybmVsLm9yZyBzbyB0aGF0IHdlIGNhbiB0YWtlIGEgbG9vayBpbnRvCisgICBpdC4gIEFmdGVyIGRvaW5nIHNvLCB5b3UgY2FuIHNldCB0aGUgJ3JlYmFzZS5iYWNrZW5kJyBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZSB0byAnYXBwbHknLCBpbiBvcmRlciB0byB1c2UgdGhlIG9sZCBkZWZhdWx0IGJlaGF2aW91ciBpbgorICAgdGhlIG1lYW50aW1lLgorCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBTYW1wbGUgY3JlZGVudGlhbCBoZWxwZXIgZm9yIHVzaW5nIC5uZXRyYyBoYXMgYmVlbiB1cGRhdGVkIHRvIHdvcmsKKyAgIG91dCBvZiB0aGUgYm94LgorCisgKiBncGcubWluVHJ1c3RMZXZlbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGhhcyBiZWVuIGludHJvZHVjZWQgdG8KKyAgIHRlbGwgdmFyaW91cyBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGNvZGVwYXRocyB0aGUgcmVxdWlyZWQgbWluaW11bQorICAgdHJ1c3QgbGV2ZWwuCisKKyAqIFRoZSBjb21tYW5kIGxpbmUgY29tcGxldGlvbiAoaW4gY29udHJpYi8pIGxlYXJuZWQgdG8gY29tcGxldGUKKyAgIHN1YmNvbW1hbmRzIGFuZCBhcmd1bWVudHMgdG8gImdpdCB3b3JrdHJlZSIuCisKKyAqIERpc2FtYmlndWF0aW9uIGxvZ2ljIHRvIHRlbGwgcmV2aXNpb25zIGFuZCBwYXRoc3BlYyBhcGFydCBoYXMgYmVlbgorICAgdHdlYWtlZCBzbyB0aGF0IGJhY2tzbGFzaC1lc2NhcGVkIGdsb2Igc3BlY2lhbCBjaGFyYWN0ZXJzIGRvIG5vdAorICAgY291bnQgaW4gdGhlICJ3aWxkY2FyZHMgYXJlIHBhdGhzcGVjIiBydWxlLgorCisgKiBPbmUgZWZmZWN0IG9mIHNwZWNpZnlpbmcgd2hlcmUgdGhlIEdJVF9ESVIgaXMgKGVpdGhlciB3aXRoIHRoZQorICAgZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIHdpdGggdGhlICJnaXQgLS1naXQtZGlyPTx3aGVyZT4gY21kIgorICAgb3B0aW9uKSBpcyB0byBkaXNhYmxlIHRoZSByZXBvc2l0b3J5IGRpc2NvdmVyeS4gIFRoaXMgaGFzIGJlZW4KKyAgIHBsYWNlZCBhIGJpdCBtb3JlIHN0cmVzcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiwgYXMgbmV3IHVzZXJzIG9mdGVuCisgICBnZXQgY29uZnVzZWQuCisKKyAqIFR3byBoZWxwIG1lc3NhZ2VzIGdpdmVuIHdoZW4gImdpdCBhZGQiIG5vdGljZXMgdGhlIHVzZXIgZ2F2ZSBpdAorICAgbm90aGluZyB0byBhZGQgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdXNlIGFkdmlzZSgpIEFQSS4KKworICogQSBuZXcgdmVyc2lvbiBvZiBmc21vbml0b3Itd2F0Y2htYW4gaG9vayBoYXMgYmVlbiBpbnRyb2R1Y2VkLCB0bworICAgYXZvaWQgcmFjZXMuCisKKyAqICJnaXQgY29uZmlnIiBsZWFybmVkIHRvIHNob3cgaW4gd2hpY2ggInNjb3BlIiwgaW4gYWRkaXRpb24gdG8gaW4KKyAgIHdoaWNoIGZpbGUsIGVhY2ggY29uZmlnIHNldHRpbmcgY29tZXMgZnJvbS4KKworICogVGhlIGJhc2ljIDcgY29sb3JzIGxlYXJuZWQgdGhlIGJyaWdodGVyIGNvdW50ZXJwYXJ0cworICAgKGUuZy4gImJyaWdodHJlZCIpLgorCisgKiAiZ2l0IHNwYXJzZS1jaGVja291dCIgbGVhcm5lZCBhIG5ldyAiYWRkIiBzdWJjb21tYW5kLgorCisgKiBBIGNvbmZpZ3VyYXRpb24gZWxlbWVudCB1c2VkIGZvciBjcmVkZW50aWFsIHN1YnN5c3RlbSBjYW4gbm93IHVzZQorICAgd2lsZGNhcmQgcGF0dGVybiB0byBzcGVjaWZ5IGZvciB3aGljaCBzZXQgb2YgVVJMcyB0aGUgZW50cnkKKyAgIGFwcGxpZXMuCisKKyAqICJnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1zaW5nbGUtYnJhbmNoIiBub3cgdXNlcyB0aGUgc2FtZQorICAgc2luZ2xlLWJyYW5jaCBvcHRpb24gd2hlbiBjbG9uaW5nIHRoZSBzdWJtb2R1bGVzLgorCisgKiAiZ2l0IHJtIiBhbmQgImdpdCBzdGFzaCIgbGVhcm5zIHRoZSBuZXcgIi0tcGF0aHNwZWMtZnJvbS1maWxlIgorICAgb3B0aW9uLgorCisgKiAiZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoIiBpcyBhIHdheSB0byBzaG93IHRoZSBwaWVjZSBvZiBlLW1haWwKKyAgIGZvciB0aGUgc3RvcHBlZCBzdGVwLCB3aGljaCBpcyBub3Qgc3VpdGFibGUgdG8gZGlyZWN0bHkgZmVlZCAiZ2l0CisgICBhcHBseSIgKGl0IGlzIGRlc2lnbmVkIHRvIGJlIGEgZ29vZCAiZ2l0IGFtIiBpbnB1dCkuICBJdCBsZWFybmVkIGEKKyAgIG5ldyBvcHRpb24gdG8gc2hvdyBvbmx5IHRoZSBwYXRjaCBwYXJ0LgorCisgKiBIYW5kbGluZyBvZiBjb25mbGljdGluZyByZW5hbWVzIGluIG1lcmdlLXJlY3Vyc2l2ZSBoYXZlIGZ1cnRoZXIKKyAgIGJlZW4gbWFkZSBjb25zaXN0ZW50IHdpdGggaG93IGV4aXN0aW5nIGNvZGVwYXRocyB0cnkgdG8gbWltaWMgd2hhdAorICAgaXMgZG9uZSB0byBhZGQvYWRkIGNvbmZsaWN0cy4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBUZWxsIC5lZGl0b3Jjb25maWcgdGhhdCBpbiB0aGlzIHByb2plY3QsICoudHh0IGZpbGVzIGFyZSBpbmRlbnRlZAorICAgd2l0aCB0YWJzLgorCisgKiBUaGUgdGVzdC1saW50IG1hY2hpbmVyeSBrbmV3IHRvIGNoZWNrICJWQVI9VkFMIHNoZWxsX2Z1bmN0aW9uIgorICAgY29uc3RydWN0LCBidXQgZGlkIG5vdCBjaGVjayAiVkFSPSBzaGVsbF9mdW5jdGlvbiIsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFJlcGxhY2UgImdpdCBjb25maWcgLS1ib29sIiBjYWxscyB3aXRoICJnaXQgY29uZmlnIC0tdHlwZT1ib29sIiBpbgorICAgc2FtcGxlIHRlbXBsYXRlcy4KKworICogVGhlIGVmZm9ydCB0byBtb3ZlICJnaXQtYWRkLS1pbnRlcmFjdGl2ZSIgdG8gQyBjb250aW51ZXMuCisKKyAqIEltcHJvdmUgZXJyb3IgbWVzc2FnZSBnZW5lcmF0aW9uIGZvciAiZ2l0IHN1Ym1vZHVsZSBhZGQiLgorCisgKiBQcmVwYXJhdGlvbiBvZiB0ZXN0IHNjcmlwdHMgZm9yIHRoZSBkYXkgd2hlbiB0aGUgb2JqZWN0IG5hbWVzIHdpbGwKKyAgIHVzZSBTSEEtMjU2IGNvbnRpbnVlcy4KKworICogV2FybiBwcm9ncmFtbWVycyBhYm91dCBwcmV0ZW5kX29iamVjdF9maWxlKCkgdGhhdCBhbGxvd3MgdGhlIGNvZGUKKyAgIHRvIHRlbnRhdGl2ZWx5IHVzZSBpbi1jb3JlIG9iamVjdHMuCisKKyAqIFRoZSB3YXkgImdpdCBwYWNrLW9iamVjdHMiIHJldXNlcyBvYmplY3RzIHN0b3JlZCBpbiBleGlzdGluZyBwYWNrCisgICB0byBnZW5lcmF0ZSBpdHMgcmVzdWx0IGhhcyBiZWVuIGltcHJvdmVkLgorCisgKiBUaGUgdHJhbnNwb3J0IHByb3RvY29sIHZlcnNpb24gMiBiZWNvbWVzIHRoZSBkZWZhdWx0IG9uZS4KKworICogVHJhZGl0aW9uYWxseSwgd2UgYXZvaWRlZCB0aHJlYWRlZCBncmVwIHdoaWxlIHNlYXJjaGluZyBpbiBvYmplY3RzCisgICAoYXMgb3Bwb3NlZCB0byBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlKSBhcyBhY2Nlc3NlcyB0byB0aGUgb2JqZWN0CisgICBsYXllciBpcyBub3QgdGhyZWFkLXNhZmUuICBUaGlzIGxpbWl0YXRpb24gaXMgZ2V0dGluZyBsaWZ0ZWQuCisKKyAqICJnaXQgcmViYXNlIC1pIiAoYW5kIGZyaWVuZHMpIHVzZWQgdG8gdW5uZWNlc3NhcmlseSBjaGVjayBvdXQgdGhlCisgICB0aXAgb2YgdGhlIGJyYW5jaCB0byBiZSByZWJhc2VkLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEEgbG93LWxldmVsIEFQSSBmdW5jdGlvbiBnZXRfb2lkKCksIHRoYXQgYWNjZXB0cyB2YXJpb3VzIHdheXMgdG8KKyAgIG5hbWUgYW4gb2JqZWN0LCB1c2VkIHRvIGlzc3VlIGVuZC11c2VyIGZhY2luZyBlcnJvciBtZXNzYWdlcworICAgd2l0aG91dCBsMTBuLCB3aGljaCBoYXMgYmVlbiB1cGRhdGVkIHRvIGJlIHRyYW5zbGF0YWJsZS4KKworICogVW5uZWVkZWQgY29ubmVjdGl2aXR5IGNoZWNrIGlzIG5vdyBkaXNhYmxlZCBpbiBhIHBhcnRpYWwgY2xvbmUgd2hlbgorICAgZmV0Y2hpbmcgaW50byBpdC4KKworICogU29tZSByb3VnaCBlZGdlcyBpbiB0aGUgc3BhcnNlLWNoZWNrb3V0IGZlYXR1cmUsIGVzcGVjaWFsbHkgYXJvdW5kCisgICB0aGUgY29uZSBtb2RlLCBoYXZlIGJlZW4gY2xlYW5lZCB1cC4KKworICogVGhlIGRpZmYtKiBwbHVtYmluZyBmYW1pbHkgb2Ygc3ViY29tbWFuZHMgbm93IHBheSBhdHRlbnRpb24gdG8gdGhlCisgICBkaWZmLndzRXJyb3JIaWdobGlnaHQgY29uZmlndXJhdGlvbiwgd2hpY2ggaGFzIGJlZW4gaWdub3JlZCBiZWZvcmU7CisgICB0aGlzIGFsbG93cyAiZ2l0IGFkZCAtcCIgdG8gYWxzbyBzaG93IHRoZSB3aGl0ZXNwYWNlIHByb2JsZW1zIHRvCisgICB0aGUgZW5kIHVzZXIuCisKKyAqIFNvbWUgY29kZXBhdGhzIHdlcmUgZ2l2ZW4gYSByZXBvc2l0b3J5IGluc3RhbmNlIGFzIGEgcGFyYW1ldGVyIHRvCisgICB3b3JrIGluIHRoZSByZXBvc2l0b3J5LCBidXQgcGFzc2VkIHRoZV9yZXBvc2l0b3J5IGluc3RhbmNlIHRvIGl0cworICAgY2FsbGVlcywgd2hpY2ggaGFzIGJlZW4gY2xlYW5lZCB1cCAoc29tZXdoYXQpLgorCisgKiBNZW1vcnkgZm9vdHByaW50IGFuZCBwZXJmb3JtYW5jZSBvZiAiZ2l0IG5hbWUtcmV2IiBoYXMgYmVlbgorICAgaW1wcm92ZWQuCisKKyAqIFRoZSBvYmplY3QgcmVhY2hhYmlsaXR5IGJpdG1hcCBtYWNoaW5lcnkgYW5kIHRoZSBwYXJ0aWFsIGNsb25pbmcKKyAgIG1hY2hpbmVyeSB3ZXJlIG5vdCBwcmVwYXJlZCB0byB3b3JrIHdlbGwgdG9nZXRoZXIsIGJlY2F1c2Ugc29tZQorICAgb2JqZWN0LWZpbHRlcmluZyBjcml0ZXJpYSB0aGF0IHBhcnRpYWwgY2xvbmVzIHVzZSBpbmhlcmVudGx5IHJlbHkKKyAgIG9uIG9iamVjdCB0cmF2ZXJzYWwsIGJ1dCB0aGUgYml0bWFwIG1hY2hpbmVyeSBpcyBhbiBvcHRpbWl6YXRpb24KKyAgIHRvIGJ5cGFzcyB0aGF0IG9iamVjdCB0cmF2ZXJzYWwuICBUaGVyZSBob3dldmVyIGFyZSBzb21lIGNhc2VzCisgICB3aGVyZSB0aGV5IGNhbiB3b3JrIHRvZ2V0aGVyLCBhbmQgdGhleSB3ZXJlIHRhdWdodCBhYm91dCB0aGVtLgorCisgKiAiZ2l0IHJlYmFzZSIgaGFzIGxlYXJuZWQgdG8gdXNlIHRoZSBtZXJnZSBiYWNrZW5kIChpLmUuIHRoZQorICAgbWFjaGluZXJ5IHRoYXQgZHJpdmVzICJyZWJhc2UgLWkiKSBieSBkZWZhdWx0LCB3aGlsZSBhbGxvd2luZworICAgIi0tYXBwbHkiIG9wdGlvbiB0byB1c2UgdGhlICJhcHBseSIgYmFja2VuZCAoZS5nLiB0aGUgbW9yYWwKKyAgIGVxdWl2YWxlbnQgb2YgImZvcm1hdC1wYXRjaCBwaXBlZCB0byBhbSIpLiAgVGhlIHJlYmFzZS5iYWNrZW5kCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gY3VzdG9taXplLgorCisgKiBVbmRlcmx5aW5nIG1hY2hpbmVyeSBvZiAiZ2l0IGJpc2VjdC0taGVscGVyIiBpcyBiZWluZyByZWZhY3RvcmVkCisgICBpbnRvIHBpZWNlcyB0aGF0IGFyZSBtb3JlIGVhc2lseSByZXVzZWQuCisKKworRml4ZXMgc2luY2UgdjIuMjUKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgY29tbWl0IiBnaXZlcyBvdXRwdXQgc2ltaWxhciB0byAiZ2l0IHN0YXR1cyIgd2hlbiB0aGVyZSBpcworICAgbm90aGluZyB0byBjb21taXQsIGJ1dCB3aXRob3V0IGhvbm9yaW5nIHRoZSBhZHZpc2Uuc3RhdHVzSGludHMKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogaGFzX29iamVjdF9maWxlKCkgc2FpZCAibm8iIGdpdmVuIGFuIG9iamVjdCByZWdpc3RlcmVkIHRvIHRoZQorICAgc3lzdGVtIHZpYSBwcmV0ZW5kX29iamVjdF9maWxlKCksIG1ha2luZyBpdCBpbmNvbnNpc3RlbnQgd2l0aAorICAgcmVhZF9vYmplY3RfZmlsZSgpLCBjYXVzaW5nIGxhenkgZmV0Y2ggdG8gYXR0ZW1wdCBmZXRjaGluZyBhbgorICAgZW1wdHkgdHJlZSBmcm9tIHByb21pc29yIHJlbW90ZXMuCisKKyAqIENvbXBsZXRlIGFuIHVwZGF0ZSB0byB0dXRvcmlhbCB0aGF0IGVuY291cmFnZXMgImdpdCBzd2l0Y2giIG92ZXIKKyAgICJnaXQgY2hlY2tvdXQiIHRoYXQgd2FzIGRvbmUgb25seSBoYWxmLXdheS4KKworICogQyBwZWRhbnRyeSA7LSkgZml4LgorCisgKiBUaGUgY29kZSB0aGF0IHRyaWVzIHRvIHNraXAgb3ZlciB0aGUgZW50cmllcyBmb3IgdGhlIHBhdGhzIGluIGEKKyAgIHNpbmdsZSBkaXJlY3RvcnkgdXNpbmcgdGhlIGNhY2hlLXRyZWUgd2FzIG5vdCBjYXJlZnVsIGVub3VnaAorICAgYWdhaW5zdCBjb3JydXB0IGluZGV4IGZpbGUuCisKKyAqIFJlZHVjZSB1bm5lY2Vzc2FyeSByb3VuZC10cmlwIHdoZW4gcnVubmluZyAibHMtcmVtb3RlIiBvdmVyIHRoZQorICAgc3RhdGVsZXNzIFJQQyBtZWNoYW5pc20uCisKKyAqICJnaXQgcmVzdG9yZSAtLXN0YWdlZCIgZGlkIG5vdCBjb3JyZWN0bHkgdXBkYXRlIHRoZSBjYWNoZS10cmVlCisgICBzdHJ1Y3R1cmUsIHJlc3VsdGluZyBpbiBib2d1cyB0cmVlcyB0byBiZSB3cml0dGVuIGFmdGVyd2FyZHMsIHdoaWNoCisgICBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBjb2RlIHJlY2VudGx5IGFkZGVkIHRvIG1vdmUgdG8gdGhlIGVudHJ5IGJleW9uZCB0aGUgb25lcyBpbiB0aGUKKyAgIHNhbWUgZGlyZWN0b3J5IGluIHRoZSBpbmRleCBpbiB0aGUgc3BhcnNlLWNvbmUgbW9kZSBkaWQgbm90IGNvdW50CisgICB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdG8gc2tpcCBvdmVyIGluY29ycmVjdGx5LCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBSZW5kZXJpbmcgYnkgImdpdCBsb2cgLS1ncmFwaCIgb2YgYW5jZXN0cnkgbGluZXMgbGVhZGluZyB0byBhIG1lcmdlCisgICBjb21taXQgd2VyZSBtYWRlIHN1Ym9wdGltYWwgdG8gd2FzdGUgdmVydGljYWwgc3BhY2UgYSBiaXQgd2l0aCBhCisgICByZWNlbnQgdXBkYXRlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFdvcmsgYXJvdW5kIHRlc3QgYnJlYWthZ2VzIGNhdXNlZCBieSBjdXN0b20gcmVnZXggZW5naW5lIHVzZWQgaW4KKyAgIGxpYmFzYW4sIHdoZW4gYWRkcmVzcyBzYW5pdGl6ZXIgaXMgdXNlZCB3aXRoIG1vcmUgcmVjZW50IHZlcnNpb25zCisgICBvZiBnY2MgYW5kIGNsYW5nLgorCisgKiBNaW5vciBidWdmaXhlcyB0byAiZ2l0IGFkZCAtaSIgdGhhdCBoYXMgcmVjZW50bHkgYmVlbiByZXdyaXR0ZW4gaW4gQy4KKworICogImdpdCBmZXRjaCAtLXJlZm1hcD0iIG9wdGlvbiBoYXMgZ290IGEgYmV0dGVyIGRvY3VtZW50YXRpb24uCisKKyAqICJnaXQgY2hlY2tvdXQgWCIgZGlkIG5vdCBjb3JyZWN0bHkgZmFpbCB3aGVuIFggaXMgbm90IGEgbG9jYWwKKyAgIGJyYW5jaCBidXQgY291bGQgbmFtZSBtb3JlIHRoYW4gb25lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcworICAgKGkuZS4gdG8gYmUgZHdpbW1lZCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gY3JlYXRlIGEgY29ycmVzcG9uZGluZworICAgbG9jYWwgYnJhbmNoKSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGZhNzQxODBkMDggYW0vY2hlY2tvdXQtZmlsZS1hbmQtcmVmLXJlZi1hbWJpZ3VpdHkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb3JuZXIgY2FzZSBidWdzIGluICJnaXQgY2xlYW4iIHRoYXQgc3RlbXMgZnJvbSBhIChuZWNlc3NhcmlseSBmb3IKKyAgIHBlcmZvcm1hbmNlIHJlYXNvbnMpIGF3a3dhcmQgY2FsbGluZyBjb252ZW50aW9uIGluIHRoZSBkaXJlY3RvcnkKKyAgIGVudW1lcmF0aW9uIEFQSSBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEEgZmV0Y2ggdGhhdCBpcyB0b2xkIHRvIHJlY3Vyc2l2ZWx5IGZldGNoIHVwZGF0ZXMgaW4gc3VibW9kdWxlcworICAgaW5ldml0YWJseSBwcm9kdWNlcyByZWFtcyBvZiBvdXRwdXQsIGFuZCBpdCBiZWNvbWVzIGhhcmQgdG8gc3BvdAorICAgZXJyb3IgbWVzc2FnZXMuICBUaGUgY29tbWFuZCBoYXMgYmVlbiB0YXVnaHQgdG8gZW51bWVyYXRlCisgICBzdWJtb2R1bGVzIHRoYXQgaGFkIGVycm9ycyBhdCB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb24uCisgICAobWVyZ2UgMDIyMjU0MDgyNyBlcy9mZXRjaC1zaG93LWZhaWxlZC1zdWJtb2R1bGVzLWF0ZW5kIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICItLXJlY3Vyc2Utc3VibW9kdWxlcyIgb3B0aW9uIG9mIHZhcmlvdXMgc3ViY29tbWFuZHMgZGlkIG5vdAorICAgd29yayB3ZWxsIHdoZW4gcnVuIGluIGFuIGFsdGVybmF0ZSB3b3JrdHJlZSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogRnV0dXJlcHJvb2ZpbmcgYSB0ZXN0IG5vdCB0byBkZXBlbmQgb24gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24KKyAgIGRldGFpbC4KKworICogUnVubmluZyAiZ2l0IHJtIiBvbiBhIHN1Ym1vZHVsZSBmYWlsZWQgdW5uZWNlc3NhcmlseSB3aGVuCisgICAuZ2l0bW9kdWxlcyBpcyBvbmx5IGNhY2hlLWRpcnR5LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEMgcGVkYW50cnkgOy0pIGZpeC4KKworICogImdpdCBncmVwIC0tbm8taW5kZXgiIHNob3VsZCBub3QgZ2V0IGFmZmVjdGVkIGJ5IHRoZSBjb250ZW50cyBvZgorICAgdGhlIC5naXRtb2R1bGVzIGZpbGUgYnV0IHdoZW4gIi0tcmVjdXJzZS1zdWJtb2R1bGVzIiBpcyBnaXZlbiBvcgorICAgdGhlICJzdWJtb2R1bGUucmVjdXJzZSIgdmFyaWFibGUgaXMgc2V0LCBpdCBkaWQuICBOb3cgdGhlc2UKKyAgIHNldHRpbmdzIGFyZSBpZ25vcmVkIGluIHRoZSAiLS1uby1pbmRleCIgbW9kZS4KKworICogVGVjaG5pY2FsIGRldGFpbHMgb2YgdGhlIGJ1bmRsZSBmb3JtYXQgaGFzIGJlZW4gZG9jdW1lbnRlZC4KKworICogVW5oZWxwZnVsIHdhcm5pbmcgbWVzc2FnZXMgZHVyaW5nIGRvY3VtZW50YXRpb24gYnVpbGQgaGF2ZSBiZWVuIHNxdWVsY2hlZC4KKworICogImdpdCByZWJhc2UgLWkiIGlkZW50aWZpZXMgZXhpc3RpbmcgY29tbWl0cyBpbiBpdHMgdG9kbyBmaWxlIHdpdGgKKyAgIHRoZWlyIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lLCB3aGljaCBjb3VsZCBiZWNvbWUgYW1iaWd1b3VzIGFzIGl0CisgICBnb2VzIHRvIGNyZWF0ZSBuZXcgY29tbWl0cywgYW5kIGhhcyBhIG1lY2hhbmlzbSB0byBhdm9pZCBhbWJpZ3VpdHkKKyAgIGluIHRoZSBtYWluIHBhcnQgb2YgaXRzIGV4ZWN1dGlvbi4gIEEgZmV3IG90aGVyIGNhc2VzIGhvd2V2ZXIgd2VyZQorICAgbm90IGNvdmVyZWQgYnkgdGhlIHByb3RlY3Rpb24gYWdhaW5zdCBhbWJpZ3VpdHksIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIEFsbG93IHRoZSByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayBjb25maWd1cmF0aW9uIHRvIGtpY2sgaW4gd2hlbgorICAgInJlYmFzZSAtLWVkaXQtdG9kbyIgYW5kICJyZWJhc2UgLS1jb250aW51ZSIgcmVzdGFydHMgdGhlIHByb2NlZHVyZS4KKyAgIChtZXJnZSA1YTU0NDVkODc4IGFnL2VkaXQtdG9kby1kcm9wLWNoZWNrIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHdheSAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMiIHJlcG9ydHMgYW4gaW5pdGlhbGl6ZWQgYnV0IG5vdCB5ZXQKKyAgIHBvcHVsYXRlZCBzdWJtb2R1bGUgaGFzIG5vdCBiZWVuIHJlaW1wbGVtZW50ZWQgY29ycmVjdGx5IHdoZW4gYQorICAgcGFydCBvZiB0aGUgImdpdCBzdWJtb2R1bGUiIGNvbW1hbmQgd2FzIHJld3JpdHRlbiBpbiBDLCB3aGljaCBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGYzOGM5MjQ1MmQgcGsvc3RhdHVzLW9mLXVuY2xvbmVkLXN1Ym1vZHVsZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIHRvIGF1dG9tYXRpY2FsbHkgc2hyaW5rIHRoZSBmYW4tb3V0IGluIHRoZSBub3RlcyB0cmVlIGhhZAorICAgYW4gb2ZmLWJ5LW9uZSBidWcsIHdoaWNoIGhhcyBiZWVuIGtpbGxlZC4KKworICogVGhlIGluZGV4LXBhY2sgY29kZSBub3cgZGlhZ25vc2VzIGEgYmFkIGlucHV0IHBhY2tzdHJlYW0gdGhhdAorICAgcmVjb3JkcyB0aGUgc2FtZSBvYmplY3QgdHdpY2Ugd2hlbiBpdCBpcyB1c2VkIGFzIGRlbHRhIGJhc2U7IHRoZQorICAgY29kZSB1c2VkIHRvIGRlY2xhcmUgYSBzb2Z0d2FyZSBidWcgd2hlbiBlbmNvdW50ZXJpbmcgc3VjaCBhbgorICAgaW5wdXQsIGJ1dCBpdCBpcyBhbiBpbnB1dCBlcnJvci4KKworCisgKiBUaGUgY29kZSB0byBjb21wdXRlIHRoZSBjb21taXQtZ3JhcGggaGFzIGJlZW4gdGF1Z2h0IHRvIHVzZSBhIG1vcmUKKyAgIHJvYnVzdCB3YXkgdG8gdGVsbCBpZiB0d28gb2JqZWN0IGRpcmVjdG9yaWVzIHJlZmVyIHRvIHRoZSBzYW1lCisgICB0aGluZy4KKyAgIChtZXJnZSBhN2RmNjBjYWM4IHRiL2NvbW1pdC1ncmFwaC1vYmplY3QtZGlyIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZW1vdGUgcmVuYW1lIFggWSIgbmVlZHMgdG8gYWRqdXN0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgICAoZS5nLiBicmFuY2guPG5hbWU+LnJlbW90ZSkgd2hvc2UgdmFsdWUgdXNlZCB0byBiZSBYIHRvIFkuCisgICBicmFuY2guPG5hbWU+LnB1c2hSZW1vdGUgaXMgbm93IGFsc28gdXBkYXRlZC4KKworICogVXBkYXRlIHRvIGRvYy1kaWZmLgorCisgKiBEb2MgbWFya3VwIGZpeC4KKworICogImdpdCBjaGVjay1pZ25vcmUiIGRpZCBub3Qgd29yayB3aGVuIHRoZSBnaXZlbiBwYXRoIGlzIGV4cGxpY2l0bHkKKyAgIG1hcmtlZCBhcyBub3QgaWdub3JlZCB3aXRoIGEgbmVnYXRpdmUgZW50cnkgaW4gdGhlIC5naXRpZ25vcmUgZmlsZS4KKworICogVGhlIG1lcmdlLXJlY3Vyc2l2ZSBtYWNoaW5lcnkgZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGNhY2hlIGVudHJ5IGZvcgorICAgYSBtZXJnZSByZXN1bHQgaW4gYSBjb3VwbGUgb2YgcGxhY2VzLCByZXN1bHRpbmcgaW4gYW4gdW5uZWNlc3NhcnkKKyAgIG1lcmdlIGZhaWx1cmUsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBGaXggZm9yIGEgYnVnIHJldmVhbGVkIGJ5IGEgcmVjZW50IGNoYW5nZSB0byBtYWtlIHRoZSBwcm90b2NvbCB2MgorICAgdGhlIGRlZmF1bHQuCisKKyAqIEluIHJhcmUgY2FzZXMgImdpdCB3b3JrdHJlZSBhZGQgPHBhdGg+IiBjb3VsZCB0aGluayB0aGF0IDxwYXRoPgorICAgd2FzIGFscmVhZHkgYSByZWdpc3RlcmVkIHdvcmt0cmVlIGV2ZW4gd2hlbiBpdCB3YXNuJ3QgYW5kIHJlZnVzZQorICAgdG8gYWRkIHRoZSBuZXcgd29ya3RyZWUuIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGJiNjliM2IwMDkgZXMvd29ya3RyZWUtYXZvaWQtZHVwbGljYXRpb24tZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdXNoIiBzaG91bGQgc3RvcCBmcm9tIHVwZGF0aW5nIGEgYnJhbmNoIHRoYXQgaXMgY2hlY2tlZCBvdXQKKyAgIHdoZW4gcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBjb25maWd1cmF0aW9uIGlzIHNldCwgYnV0IGl0IGZhaWxlZAorICAgdG8gcGF5IGF0dGVudGlvbiB0byBjaGVja291dHMgaW4gc2Vjb25kYXJ5IHdvcmt0cmVlcy4gIFRoaXMgaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA0ZDg2NDg5NWEyIGh2L3JlY2VpdmUtZGVueWN1cnJlbnQtZXZlcnl3aGVyZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIEJBU0UgQlJBTkNIIiByZWJhc2VkL3VwZGF0ZWQgdGhlIHRpcCBvZiBCUkFOQ0ggYW5kCisgICBjaGVja2VkIGl0IG91dCwgZXZlbiB3aGVuIHRoZSBCUkFOQ0ggaXMgY2hlY2tlZCBvdXQgaW4gYSBkaWZmZXJlbnQKKyAgIHdvcmt0cmVlLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYjVjYWJiNGE5NiBlcy9kby1ub3QtbGV0LXJlYmFzZS1zd2l0Y2gtdG8tcHJvdGVjdGVkLWJyYW5jaCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGVzY3JpYmUiIGluIGEgcmVwb3NpdG9yeSB3aXRoIG11bHRpcGxlIHJvb3QgY29tbWl0cyBzb21ldGltZXMKKyAgIGdhdmUgdXAgbG9va2luZyBmb3IgdGhlIGJlc3QgdGFnIHRvIGRlc2NyaWJlIGEgZ2l2ZW4gY29tbWl0IHdpdGgKKyAgIHRvbyBlYXJseSwgd2hpY2ggaGFzIGJlZW4gYWRqdXN0ZWQuCisKKyAqICJnaXQgbWVyZ2Ugc2lnbmVkLXRhZyIgd2hpbGUgbGFja2luZyB0aGUgcHVibGljIGtleSBzdGFydGVkIHRvIHNheQorICAgIk5vIHNpZ25hdHVyZSIsIHdoaWNoIHdhcyB1dHRlcmx5IHdyb25nLiAgVGhpcyByZWdyZXNzaW9uIGhhcyBiZWVuCisgICByZXZlcnRlZC4KKworICogTWluR1cncyBwb2xsKCkgZW11bGF0aW9uIGhhcyBiZWVuIGltcHJvdmVkLgorCisgKiAiZ2l0IHNob3ciIGFuZCBvdGhlcnMgZ2F2ZSBhbiBvYmplY3QgbmFtZSBpbiByYXcgZm9ybWF0IGluIGl0cworICAgZXJyb3Igb3V0cHV0LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQgdG8gZ2l2ZSBpdCBpbiBoZXguCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgSFRUUCB3YWxrZXIgcHJvdG9jb2wgZGlkIG5vdCBzaG93IGFueSBwcm9ncmVzcworICAgb3V0cHV0LiAgV2UgaW5oZXJlbnRseSBkbyBub3Qga25vdyBob3cgbXVjaCB3b3JrIHJlbWFpbnMsIGJ1dCBzdGlsbAorICAgd2UgY2FuIHNob3cgc29tZXRoaW5nIG5vdCB0byBib3JlIHVzZXJzLgorICAgKG1lcmdlIDc2NTViNDExOWQgcnMvc2hvdy1wcm9ncmVzcy1pbi1kdW1iLWh0dHAtZmV0Y2ggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBCb3RoICJnaXQgbHMtcmVtb3RlIC1oIiBhbmQgImdpdCBncmVwIC1oIiBnaXZlIHNob3J0IHVzYWdlIGhlbHAsCisgICBsaWtlIGFueSBvdGhlciBHaXQgc3ViY29tbWFuZCwgYnV0IGl0IGlzIG5vdCB1bnJlYXNvbmFibGUgdG8gZXhwZWN0CisgICB0aGF0IHRoZSBmb3JtZXIgd291bGQgYmVoYXZlIHRoZSBzYW1lIGFzICJnaXQgbHMtcmVtb3RlIC0taGVhZCIKKyAgICh0aGVyZSBpcyBubyBvdGhlciBzZW5zaWJsZSBiZWhhdmlvdXIgZm9yIHRoZSBsYXR0ZXIpLiAgVGhlCisgICBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgaW4gYW4gYXR0ZW1wdCB0byBjbGFyaWZ5IHRoaXMuCisKKyAqIE90aGVyIGNvZGUgY2xlYW51cCwgZG9jZml4LCBidWlsZCBmaXgsIGV0Yy4KKyAgIChtZXJnZSBkMGQwYTM1N2ExIGFtL3VwZGF0ZS1wYXRoc3BlYy1mLWYtdGVzdHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY5NGY3YmQwMGQgYW0vdGVzdC1wYXRoc3BlYy1mLWYtZXJyb3ItY2FzZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGM1MTNhOTU4YjYgc3MvdDYwMjUtbW9kZXJuaXplIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiNDQxNzE3MjU2IGRsL3Rlc3QtbXVzdC1mYWlsLWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkMDMxMDQ5ZGEzIG10L3NwYXJzZS1jaGVja291dC1kb2MtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxNDUxMzZhOTVhIGpjL3NraXAtcHJlZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1MjkwZDQ1MTM0IGprL2FsbG9jLWNsZWFudXBzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3YTlmOGNhODA1IHJzL3BhcnNlLW9wdGlvbnMtY29uY2F0LWR1cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTE3YjYwNTY0ZSBycy9zdHJidWYtaW5zZXJ0c3RyIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmNjk2YTJiMWM4IGprL21haWxpbmZvLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGRlMjZmMDJkYjEganMvdGVzdC1hdm9pZC1waXBlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhMmRjNDM0MTRjIGVzL2RvYy1tZW50b3JpbmcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDAyYmJiZTlkZjkgZXMvd29ya3RyZWUtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMmNlNmQwNzVmYSBycy9taWNyby1jbGVhbnVwcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjdmMTgyYjNmYyBycy9ibGFtZS10eXBlZml4LWZvci1maW5nZXJwcmludCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgM2MyOWUyMWViMCBtYS90ZXN0LWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDI0MGZjMDRmODEgYWcvcmViYXNlLXJlbW92ZS1yZWR1bmRhbnQtY29kZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDY4Y2U5MDZjNyBycy9jb21taXQtZ3JhcGgtY29kZS1zaW1wbGlmaWNhdGlvbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYTUxZDllOGYwNyByai90MTA1MC11c2UtdGVzdC1wYXRoLWlzLWZpbGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZkMGJjMTc1NTcga2svY29tcGxldGUtZGlmZi1jb2xvci1tb3ZlZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjViZjgyMGQwZSBlbi90ZXN0LWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI2LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI2LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNGVjYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjYuMS50eHQKQEAgLTAsMCArMSw1IEBACitHaXQgdjIuMjYuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdGhlIHNlY3VyaXR5IGZpeCB0aGF0IGFwcGVhcnMgaW4gdjIuMTcuNDsgc2VlCit0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhhdCB2ZXJzaW9uIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI2LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI2LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MzRkMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjYuMi50eHQKQEAgLTAsMCArMSw1IEBACitHaXQgdjIuMjYuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdGhlIHNlY3VyaXR5IGZpeCB0aGF0IGFwcGVhcnMgaW4gdjIuMTcuNTsgc2VlCit0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhhdCB2ZXJzaW9uIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI3LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI3LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYjhjMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjcuMC50eHQKQEAgLTAsMCArMSw1MTUgQEAKK0dpdCAyLjI3IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2Mi4yNgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzCisKKyAqIFdoZW4gImdpdCBkZXNjcmliZSBDIiBmaW5kcyB0aGF0IGNvbW1pdCBDIGlzIHBvaW50ZWQgYnkgYSBzaWduZWQgb3IKKyAgIGFubm90YXRlZCB0YWcsIHdoaWNoIHJlY29yZHMgVCBhcyBpdHMgdGFnbmFtZSBpbiB0aGUgb2JqZWN0LCB0aGUKKyAgIGNvbW1hbmQgZ2l2ZXMgVCBhcyBpdHMgYW5zd2VyLiAgRXZlbiBpZiB0aGUgdXNlciByZW5hbWVzIG9yIG1vdmVzCisgICBzdWNoIGEgdGFnIGZyb20gaXRzIG5hdHVyYWwgbG9jYXRpb24gaW4gdGhlICJyZWZzL3RhZ3MvIiBoaWVyYXJjaHksCisgICAiZ2l0IGRlc2NyaWJlIEMiIHdvdWxkIHN0aWxsIGdpdmUgVCBhcyB0aGUgYW5zd2VyLCBidXQgaW4gc3VjaCBhCisgICBjYXNlICJnaXQgc2hvdyBUXjAiIHdvdWxkIG5vIGxvbmdlciB3b3JrIGFzIGV4cGVjdGVkLiAgVGhlcmUgbWF5IGJlCisgICBub3RoaW5nIGF0ICJyZWZzL3RhZ3MvVCIgb3IgZXZlbiB3b3JzZSB0aGVyZSBtYXkgYmUgYSBkaWZmZXJlbnQgdGFnCisgICBpbnN0ZWFkLgorCisgICBTdGFydGluZyBmcm9tIHRoaXMgdmVyc2lvbiwgImdpdCBkZXNjcmliZSIgd2lsbCBhbHdheXMgdXNlIHRoZQorICAgImxvbmciIHZlcnNpb24sIGFzIGlmIHRoZSAiLS1sb25nIiBvcHRpb24gd2VyZSBnaXZlbiwgd2hlbiBnaXZpbmcKKyAgIGl0cyBvdXRwdXQgYmFzZWQgb24gc3VjaCBhIG1pc3BsYWNlZCB0YWcgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0uCisKKyAqICJnaXQgcHVsbCIgaXNzdWVzIGEgd2FybmluZyBtZXNzYWdlIHVudGlsIHRoZSBwdWxsLnJlYmFzZQorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGdpdmVuLCB3aGljaCBzb21lIGV4aXN0aW5nCisgICB1c2VycyBtYXkgZmluZCBhbm5veWluZy0tLXRob3NlIHdobyBwcmVmZXIgbm90IHRvIHJlYmFzZSBuZWVkIHRvCisgICBzZXQgdGhlIHZhcmlhYmxlIHRvIGZhbHNlIHRvIHNxdWVsY2ggdGhlIHdhcm5pbmcuCisKKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEEgaGFuZGZ1bCBvZiBvcHRpb25zIHRvIGNvbmZpZ3VyZSBTU0wgd2hlbiB0YWxraW5nIHRvIHByb3hpZXMgaGF2ZQorICAgYmVlbiBhZGRlZC4KKworICogU211ZGdlL2NsZWFuIGNvbnZlcnNpb24gZmlsdGVycyBhcmUgbm93IGdpdmVuIG1vcmUgaW5mb3JtYXRpb24KKyAgIChlLmcuIHRoZSBvYmplY3Qgb2YgdGhlIHRyZWUtaXNoIGluIHdoaWNoIHRoZSBibG9iIGJlaW5nIGNvbnZlcnRlZAorICAgYXBwZWFycywgaW4gYWRkaXRpb24gdG8gaXRzIHBhdGgsIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gZ2l2ZW4pLgorCisgKiBXaGVuICJnaXQgZGVzY3JpYmUgQyIgZmluZHMgYW4gYW5ub3RhdGVkIHRhZyB3aXRoIHRhZ25hbWUgQSB0byBiZQorICAgdGhlIGJlc3QgbmFtZSB0byBleHBsYWluIGNvbW1pdCBDLCBhbmQgdGhlIHRhZyBpcyBzdG9yZWQgaW4gYQorICAgIndyb25nIiBwbGFjZSBpbiB0aGUgcmVmcy90YWdzIGhpZXJhcmNoeSwgZS5nLiByZWZzL3RhZ3MvQiwgdGhlCisgICBjb21tYW5kIGdhdmUgYSB3YXJuaW5nIG1lc3NhZ2UgYnV0IHVzZWQgQSAobm90IEIpIHRvIGRlc2NyaWJlIEMuCisgICBJZiBDIGlzIGV4YWN0bHkgYXQgdGhlIHRhZywgdGhlIGRlc2NyaWJlIG91dHB1dCB3b3VsZCBiZSAiQSIsIGJ1dAorICAgImdpdCByZXYtcGFyc2UgQV4wIiB3b3VsZCBub3QgYmUgZXF1YWwgYXMgImdpdCByZXYtcGFyc2UgQ14wIi4gIFRoZQorICAgYmVoYXZpb3Igb2YgdGhlIGNvbW1hbmQgaGFzIGJlZW4gY2hhbmdlZCB0byB1c2UgdGhlICJsb25nIiBmb3JtCisgICBpLmUuIEEtMC1nT0JKRUNUTkFNRSwgd2hpY2ggaXMgY29ycmVjdGx5IGludGVycHJldGVkIGJ5IHJldi1wYXJzZS4KKworICogImdpdCBwdWxsIiBsZWFybmVkIHRvIHdhcm4gd2hlbiBubyBwdWxsLnJlYmFzZSBjb25maWd1cmF0aW9uCisgICBleGlzdHMsIGFuZCBuZWl0aGVyIC0tW25vLV1yZWJhc2Ugbm9yIC0tZmYtb25seSBpcyBnaXZlbiAod2hpY2gKKyAgIHdvdWxkIHJlc3VsdCBhIG1lcmdlKS4KKworICogImdpdCBwNCIgbGVhcm5lZCBmb3VyIG5ldyBob29rcyBhbmQgYWxzbyAiLS1uby12ZXJpZnkiIG9wdGlvbiB0bworICAgYnlwYXNzIHRoZW0gKGFuZCB0aGUgZXhpc3RpbmcgInA0LXByZS1zdWJtaXQiIGhvb2spLgorCisgKiAiZ2l0IHB1bGwiIHNoYXJlcyBtYW55IG9wdGlvbnMgd2l0aCB1bmRlcmx5aW5nICJnaXQgZmV0Y2giLCBidXQKKyAgIHNvbWUgb2YgdGhlbSB3ZXJlIG5vdCBkb2N1bWVudGVkIGFuZCBzb21lIG9mIHRob3NlIHRoYXQgd291bGQgbWFrZQorICAgc2Vuc2UgdG8gcGFzcyBkb3duIHdlcmUgbm90IHBhc3NlZCBkb3duLgorCisgKiAiZ2l0IHJlYmFzZSIgbGVhcm5lZCB0aGUgIi0tbm8tZ3BnLXNpZ24iIG9wdGlvbiB0byBjb3VudGVybWFuZAorICAgY29tbWl0LmdwZ1NpZ24gdGhlIHVzZXIgbWF5IGhhdmUuCisKKyAqIFRoZSBvdXRwdXQgZnJvbSAiZ2l0IGZvcm1hdC1wYXRjaCIgdXNlcyBSRkMgMjA0NyBlbmNvZGluZyBmb3IKKyAgIG5vbi1BU0NJSSBsZXR0ZXJzIG9uIEZyb206IGFuZCBTdWJqZWN0OiBoZWFkZXJzLCBzbyB0aGF0IGl0IGNhbgorICAgZGlyZWN0bHkgYmUgZmVkIHRvIGUtbWFpbCBwcm9ncmFtcy4gIEEgbmV3IG9wdGlvbiBoYXMgYmVlbiBhZGRlZAorICAgdG8gcHJvZHVjZSB0aGVzZSBoZWFkZXJzIGluIHJhdy4KKworICogImdpdCBsb2ciIGxlYXJuZWQgIi0tc2hvdy1wdWxscyIgdGhhdCBoZWxwcyBwYXRoc3BlYyBsaW1pdGVkCisgICBoaXN0b3J5IHZpZXdzOyBhIG1lcmdlIGNvbW1pdCB0aGF0IHRha2VzIHRoZSB3aG9sZSBjaGFuZ2UgZnJvbSBhCisgICBzaWRlIGJyYW5jaCwgd2hpY2ggaXMgbm9ybWFsbHkgb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQsIGlzIHNob3duCisgICBpbiBhZGRpdGlvbiB0byB0aGUgY29tbWl0cyB0aGF0IGludHJvZHVjZSByZWFsIGNoYW5nZXMuCisKKyAqIFRoZSBpbnRlcmFjdGl2ZSBpbnB1dCBmcm9tIHZhcmlvdXMgY29kZXBhdGhzIGFyZSBjb25zb2xpZGF0ZWQgYW5kCisgICBhbnkgcHJvbXB0IHBvc3NpYmx5IGlzc3VlZCBlYXJsaWVyIGFyZSBmZmx1c2goKWVkIGJlZm9yZSB3ZSByZWFkLgorCisgKiBBbGxvdyAiZ2l0IHJlYmFzZSIgdG8gcmVhcHBseSBhbGwgbG9jYWwgY29tbWl0cywgZXZlbiBpZiB0aGUgbWF5IGJlCisgICBhbHJlYWR5IGluIHRoZSB1cHN0cmVhbSwgd2l0aG91dCBjaGVja2luZyBmaXJzdC4KKworICogVGhlICdwYWNrLnVzZVNwYXJzZScgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBub3cgZGVmYXVsdHMgdG8gJ3RydWUnLAorICAgZW5hYmxpbmcgYW4gb3B0aW1pemF0aW9uIHRoYXQgaGFzIGJlZW4gZXhwZXJpbWVudGFsIHNpbmNlIEdpdCAyLjIxLgorCisgKiAiZ2l0IHJlYmFzZSIgaGFwcGVucyB0byBjYWxsIHNvbWUgaG9va3MgbWVhbnQgZm9yICJjaGVja291dCIgYW5kCisgICAiY29tbWl0IiBieSB0aGlzIHdhcyBub3QgYSBkZXNpZ25lZCBiZWhhdmlvdXIgdGhhbiBoaXN0b3JpY2FsCisgICBhY2NpZGVudC4gIFRoaXMgaGFzIGJlZW4gZG9jdW1lbnRlZC4KKworICogImdpdCBtZXJnZSIgbGVhcm5zIHRoZSAiLS1hdXRvc3Rhc2giIG9wdGlvbi4KKworICogInNwYXJzZS1jaGVja291dCIgVUkgaW1wcm92ZW1lbnRzLgorCisgKiAiZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiIgbGVhcm5lZCBhIGhhbmRmdWwgb2YgbmV3IHZlcmJzIHRvIGxldCB0aGUKKyAgIHVzZXIgY29udHJvbCByZWYgdXBkYXRlIHRyYW5zYWN0aW9ucyBtb3JlIGV4cGxpY2l0bHksIHdoaWNoIGhlbHBzCisgICBhcyBhbiBpbmdyZWRpZW50IHRvIGltcGxlbWVudCB0d28tcGhhc2UgY29tbWl0LXN0eWxlIGF0b21pYworICAgcmVmLXVwZGF0ZXMgYWNyb3NzIG11bHRpcGxlIHJlcG9zaXRvcmllcy4KKworICogImdpdCBjb21taXQtZ3JhcGggd3JpdGUiIGxlYXJuZWQgZGlmZmVyZW50IHdheXMgdG8gd3JpdGUgb3V0IHNwbGl0CisgICBmaWxlcy4KKworICogSW50cm9kdWNlIGFuIGV4dGVuc2lvbiB0byB0aGUgY29tbWl0LWdyYXBoIHRvIG1ha2UgaXQgZWZmaWNpZW50IHRvCisgICBjaGVjayBmb3IgdGhlIHBhdGhzIHRoYXQgd2VyZSBtb2RpZmllZCBhdCBlYWNoIGNvbW1pdCB1c2luZyBCbG9vbQorICAgZmlsdGVycy4KKworICogVGhlIGFwcHJveGlkYXRlIHBhcnNlciBsZWFybnMgdG8gcGFyc2Ugc2Vjb25kcyB3aXRoIGZyYWN0aW9uIGFuZAorICAgaWdub3JlIGZyYWN0aW9uYWwgcGFydC4KKworICogVGhlIHVzZXJkaWZmIHBhdHRlcm5zIGZvciBNYXJrZG93biBkb2N1bWVudHMgaGF2ZSBiZWVuIGFkZGVkLgorCisgKiBUaGUgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIGhhdmUgYmVlbiBmb3JiaWRkZW4gZnJvbSBleGNsdWRpbmcgYWxsCisgICBwYXRocywgbGVhdmluZyBhbiBlbXB0eSB3b3JraW5nIHRyZWUsIGZvciBhIGxvbmcgdGltZS4gIFRoaXMKKyAgIGxpbWl0YXRpb24gaGFzIGJlZW4gbGlmdGVkLgorCisgKiAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgLS13b3JrdHJlZSIgbm93IGRlZmF1bHRzIHRvIHRha2UgdGhlIGNvbnRlbnRzCisgICBvdXQgb2YgIkhFQUQiLCBpbnN0ZWFkIG9mIGVycmluZyBvdXQuCisKKyAqICJnaXQgcDQiIGxlYXJuZWQgdG8gcmVjb3ZlciBmcm9tIGEgKGJyb2tlbikgc3RhdGUgd2hlcmUgYSBkaXJlY3RvcnkKKyAgIGFuZCBhIGZpbGUgYXJlIHJlY29yZGVkIGF0IHRoZSBzYW1lIHBhdGggaW4gdGhlIFBlcmZvcmNlIHJlcG9zaXRvcnkKKyAgIHRoZSBzYW1lIHdheSBhcyB0aGVpciBjbGllbnRzIGRvLgorCisgKiAiZ2l0IG11bHRpLXBhY2staW5kZXggcmVwYWNrIiBoYXMgYmVlbiB0YXVnaHQgdG8gaG9ub3Igc29tZQorICAgcmVwYWNrLiogY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogVGhlIGFkdmlzZSBBUEkgaGFzIGJlZW4gcmV2YW1wZWQgdG8gYWxsb3cgbW9yZSBzeXN0ZW1hdGljIGVudW1lcmF0aW9uIG9mCisgICBhZHZpY2Uga25vYnMgaW4gdGhlIGZ1dHVyZS4KKworICogU0hBLTI1NiB0cmFuc2l0aW9uIGNvbnRpbnVlcy4KKworICogVGhlIGNvZGUgdG8gaW50ZXJmYWNlIHdpdGggR251UEcgaGFzIGJlZW4gcmVmYWN0b3JlZC4KKworICogImdpdCBzdGFzaCIgaGFzIGtlcHQgYW4gZXNjYXBlIGhhdGNoIHRvIHVzZSB0aGUgc2NyaXB0ZWQgdmVyc2lvbgorICAgZm9yIGEgZmV3IHJlbGVhc2VzLCB3aGljaCBnb3Qgc3RhbGUuICBJdCBoYXMgYmVlbiByZW1vdmVkLgorCisgKiBFbmFibGUgdGVzdHMgdGhhdCByZXF1aXJlIEdudVBHIG9uIFdpbmRvd3MuCisKKyAqIE1pbm9yIHRlc3QgdXNhYmlsaXR5IGltcHJvdmVtZW50LgorCisgKiBUcmFjZTIgZW5oYW5jZW1lbnQgdG8gYWxsb3cgbG9nZ2luZyBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCisgKiBUZXN0IGNsZWFuLXVwIGNvbnRpbnVlcy4KKworICogUGVyZi10ZXN0IHVwZGF0ZS4KKworICogQSBXaW5kb3dzLXNwZWNpZmljIHRlc3QgZWxlbWVudCBoYXMgYmVlbiBtYWRlIG1vcmUgcm9idXN0IGFnYWluc3QKKyAgIG1pc3VzZSBmcm9tIGJvdGggdXNlcidzIGVudmlyb25tZW50IGFuZCBwcm9ncmFtbWVyJ3MgZXJyb3JzLgorCisgKiBWYXJpb3VzIHRlc3RzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHdvcmsgYXJvdW5kIGlzc3VlcyBmb3VuZCB3aXRoCisgICBzaGVsbCB1dGlsaXRpZXMgdGhhdCBjb21lIHdpdGggYnVzeWJveCBldGMuCisKKyAqIFRoZSBjb25maWcgQVBJIG1hZGUgbWl4ZWQgdXNlcyBvZiBpbnQgYW5kIHNpemVfdCB0eXBlcyB0byByZXByZXNlbnQKKyAgIGxlbmd0aCBvZiB2YXJpb3VzIHBpZWNlcyBvZiB0ZXh0IGl0IHBhcnNlZCwgd2hpY2ggaGFzIGJlZW4gdXBkYXRlZAorICAgdG8gdXNlIHRoZSBjb3JyZWN0IHR5cGUgKGkuZS4gc2l6ZV90KSB0aHJvdWdob3V0LgorCisgKiBUaGUgIi0tZGVjb3JhdGUtcmVmcyIgYW5kICItLWRlY29yYXRlLXJlZnMtZXhjbHVkZSIgb3B0aW9ucyAiZ2l0CisgICBsb2ciIHRha2VzIGhhdmUgbGVhcm5lZCBhIGNvbXBhbmlvbiBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisgICBsb2cuZXhjbHVkZURlY29yYXRpb24gdGhhdCBzaXRzIGF0IHRoZSBsb3dlc3QgcHJpb3JpdHkgaW4gdGhlCisgICBmYW1pbHkuCisKKyAqIEEgbmV3IENJIGpvYiB0byBidWlsZCBhbmQgcnVuIHRlc3Qgc3VpdGUgb24gbGludXggd2l0aCBtdXNsIGxpYmMKKyAgIGhhcyBiZWVuIGFkZGVkLgorCisgKiBVcGRhdGUgdGhlIENJIGNvbmZpZ3VyYXRpb24gdG8gdXNlIEdpdEh1YiBBY3Rpb25zLCByZXRpcmluZyB0aGUgb25lCisgICBiYXNlZCBvbiBBenVyZSBQaXBlbGluZXMuCisKKyAqIFRoZSBkaXJlY3RvcnkgdHJhdmVyc2FsIGNvZGUgaGFkIHJlZHVuZGFudCByZWN1cnNpdmUgY2FsbHMgd2hpY2gKKyAgIG1hZGUgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBleHBvbmVudGlhbCB3aXRoIHJlc3BlY3QgdG8KKyAgIHRoZSBkZXB0aCBvZiB0aGUgdHJlZSwgd2hpY2ggd2FzIGNvcnJlY3RlZC4KKworICogImdpdCBibGFtZSIgbGVhcm5zIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSAiY2hhbmdlZC1wYXRocyIgQmxvb20KKyAgIGZpbHRlciBzdG9yZWQgaW4gdGhlIGNvbW1pdC1ncmFwaCBmaWxlLgorCisgKiBUaGUgImJ1Z3JlcG9ydCIgdG9vbCBoYXMgYmVlbiBhZGRlZC4KKworICogVGhlIG9iamVjdCB3YWxrIHdpdGggb2JqZWN0IGZpbHRlciAiLS1maWx0ZXI9dHJlZTowIiBjYW4gbm93IHRha2UKKyAgIGFkdmFudGFnZSBvZiB0aGUgcGFjayBiaXRtYXAgd2hlbiBhdmFpbGFibGUuCisKKyAqIEluc3RlYWQgb2YgYWx3YXlzIGJ1aWxkaW5nIGFsbCBicmFuY2hlcyBhdCBHaXRIdWIgdmlhIEFjdGlvbnMsCisgICB1c2VycyBjYW4gc3BlY2lmeSB3aGljaCBicmFuY2hlcyB0byBidWlsZC4KKworICogQ29kZXBhdGhzIHRoYXQgc2hvdyBwcm9ncmVzcyBtZXRlciBoYXZlIGJlZW4gdGF1Z2h0IHRvIGFsc28gdXNlIHRoZQorICAgc3RhcnRfcHJvZ3Jlc3MoKSBhbmQgdGhlIHN0b3BfcHJvZ3Jlc3MoKSBjYWxscyBhcyBhICJyZWdpb24iIHRvIGJlCisgICB0cmFjZWQuCisKKyAqIEluc3RlYWQgb2YgZG93bmxvYWRpbmcgV2luZG93cyBTREsgZm9yIENJIGpvYnMgZm9yIHdpbmRvd3MgYnVpbGRzCisgICBmcm9tIGFuIGV4dGVybmFsIHNpdGUgKHdpbmdpdC5ibG9iLmNvcmUud2luZG93cy5uZXQpLCB1c2UgdGhlIG9uZQorICAgY3JlYXRlZCBpbiB0aGUgd2luZG93cy1idWlsZCBqb2IsIHRvIHdvcmsgYXJvdW5kIHF1b3RhIGlzc3VlcyBhdAorICAgdGhlIGV4dGVybmFsIHNpdGUuCisKKworRml4ZXMgc2luY2UgdjIuMjYKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSByZWFsX3BhdGgoKSBjb252ZW5pZW5jZSBmdW5jdGlvbiBjYW4gZWFzaWx5IGJlIG1pc3VzZWQ7IHdpdGggYQorICAgYml0IG9mIGNvZGUgcmVmYWN0b3JpbmcgaW4gdGhlIGNhbGxlcnMnIHNpZGUsIGl0cyB1c2UgaGFzIGJlZW4KKyAgIGVsaW1pbmF0ZWQuCisgICAobWVyZ2UgNDlkM2M0YjQ4MSBhbS9yZWFsLXBhdGgtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVXBkYXRlICJnaXQgcDQiIHRvIHdvcmsgd2l0aCBQeXRob24gMy4KKyAgIChtZXJnZSA2YmI0MGVkMjBhIHl6L3A0LXB5MyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBtZWNoYW5pc20gdG8gcHJldmVudCAiZ2l0IGNvbW1pdCIgZnJvbSBtYWtpbmcgYW4gZW1wdHkgY29tbWl0CisgICBvciBhbWVuZGluZyBkdXJpbmcgYW4gaW50ZXJydXB0ZWQgY2hlcnJ5LXBpY2sgd2FzIGJyb2tlbiBkdXJpbmcgdGhlCisgICByZXdyaXRlIG9mICJnaXQgcmViYXNlIiBpbiBDLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNDMwYjc1ZjcyMCBwdy9hZHZpc2UtcmViYXNlLXNraXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGaXggImdpdCBjaGVja291dCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIgb2YgYSBuZXN0ZWQgc3VibW9kdWxlCisgICBoaWVyYXJjaHkuCisgICAobWVyZ2UgODQ2ZjM0ZDM1MSBwYi9yZWN1cnNlLXN1Ym1vZHVsZXMtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICItLWZvcmstcG9pbnQiIG1vZGUgb2YgImdpdCByZWJhc2UiIHJlZ3Jlc3NlZCB3aGVuIHRoZSBjb21tYW5kCisgICB3YXMgcmV3cml0dGVuIGluIEMgYmFjayBpbiAyLjIwIGVyYSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGYwODEzMmY4ODkgYXQvcmViYXNlLWZvcmstcG9pbnQtcmVncmVzc2lvbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgaW1wb3J0LXRhcnMgaW1wb3J0ZXIgKGluIGNvbnRyaWIvZmFzdC1pbXBvcnQvKSB1c2VkIHRvIGNyZWF0ZQorICAgcGhvbnkgZmlsZXMgYXQgdGhlIHRvcC1sZXZlbCBvZiB0aGUgcmVwb3NpdG9yeSB3aGVuIHRoZSBhcmNoaXZlCisgICBjb250YWlucyBnbG9iYWwgUEFYIGhlYWRlcnMsIHdoaWNoIG1hZGUgaXRzIG93biBsb2dpYyB0byBkZXRlY3QgYW5kCisgICBvbWl0IHRoZSBjb21tb24gbGVhZGluZyBkaXJlY3RvcnkgaW5lZmZlY3RpdmUsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYzgzOWZjZmY2NSBqcy9pbXBvcnQtdGFycy1kby1ub3QtbWFrZS1waG9ueS1maWxlcy1mcm9tLXBheC1oZWFkZXJzIGxhdGVyIHRvIG1haW50KS4KKworICogU2ltcGxpZnkgdGhlIGNvbW1pdCBhbmNlc3RyeSBjb25uZWN0ZWRuZXNzIGNoZWNrIGluIGEgcGFydGlhbCBjbG9uZQorICAgcmVwb3NpdG9yeSBpbiB3aGljaCAicHJvbWlzZWQiIG9iamVjdHMgYXJlIGFzc3VtZWQgdG8gYmUgb2J0YWluYWJsZQorICAgbGF6aWx5IG9uLWRlbWFuZCBmcm9tIHByb21pc29yIHJlbW90ZSByZXBvc2l0b3JpZXMuCisgICAobWVyZ2UgMmI5ODQ3OGM2ZiBqdC9jb25uZWN0aXZpdHktY2hlY2stb3B0aW0taW4tcGFydGlhbC1jbG9uZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzZXJ2ZXItZW5kIG9mIHRoZSB2MiBwcm90b2NvbCB0byBzZXJ2ZSAiZ2l0IGNsb25lIiBhbmQgImdpdAorICAgZmV0Y2giIHdhcyBub3QgcHJlcGFyZWQgdG8gc2VlIGEgZGVsaW0gcGFja2V0cyBhdCB1bmV4cGVjdGVkCisgICBwbGFjZXMsIHdoaWNoIGxlZCB0byBhIGNyYXNoLgorICAgKG1lcmdlIGNhY2FlNDMyOWYgamsvaGFyZGVuLXByb3RvY29sLXYyLWRlbGltLWhhbmRsaW5nIGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiBmZWQgYSBtaWR4IHRoYXQgcmVjb3JkcyBubyBvYmplY3RzLCBzb21lIGNvZGVwYXRocyB0cmllZCB0bworICAgbG9vcCBmcm9tIDAgdGhyb3VnaCAobnVtX29iamVjdHMtMSksIHdoaWNoLCBkdWUgdG8gaW50ZWdlcgorICAgYXJpdGhtZXRpYyB3cmFwcGluZyBhcm91bmQsIG1hZGUgaXQgbm9uc2Vuc2Ugb3BlcmF0aW9uIHdpdGggb3V0IG9mCisgICBib3VuZHMgYXJyYXkgYWNjZXNzZXMuICBUaGUgY29kZSBoYXMgYmVlbiBjb3JyZWN0ZWQgdG8gcmVqZWN0IHN1Y2gKKyAgIGFuIG1pZHggZmlsZS4KKyAgIChtZXJnZSA3OTZkNjFjZGMwIGRyL21pZHgtYXZvaWQtaW50LXVuZGVyZmxvdyBsYXRlciB0byBtYWludCkuCisKKyAqIFV0aXRpbGVzIHJ1biB2aWEgdGhlIHJ1bl9jb21tYW5kKCkgQVBJIHdlcmUgbm90IHNwYXduZWQgY29ycmVjdGx5CisgICBvbiBDeWd3aW4sIHdoZW4gdGhlIHBhdGhzIHRvIHRoZW0gYXJlIGdpdmVuIGFzIGEgZnVsbCBwYXRoIHdpdGgKKyAgIGJhY2tzbGFzaGVzLgorICAgKG1lcmdlIDA1YWM4NTgyYmMgYWsvcnVuLWNvbW1hbmQtb24tY3lnd2luLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSIgdHJpZWQgdG8gcnVuIGEgcmViYXNlIGV2ZW4gYWZ0ZXIgbm90aWNpbmcgdGhhdAorICAgdGhlIHB1bGwgcmVzdWx0cyBpbiBhIGZhc3QtZm9yd2FyZCBhbmQgbm8gcmViYXNlIGlzIG5lZWRlZCBub3IKKyAgIHNlbnNpYmxlLCBmb3IgdGhlIHBhc3QgZmV3IHllYXJzIGR1ZSB0byBhIG1pc3Rha2Ugbm9ib2R5IG5vdGljZWQuCisgICAobWVyZ2UgZmJhZTcwZGRjNiBlbi9wdWxsLWRvLW5vdC1yZWJhc2UtYWZ0ZXItZmFzdC1mb3J3YXJkaW5nIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UiIHdpdGggdGhlIG1lcmdlIGJhY2tlbmQgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbiB0aGUKKyAgIHJlYmFzZS5hYmJyZXZpYXRlQ29tbWFuZHMgY29uZmlndXJhdGlvbiB3YXMgc2V0LgorICAgKG1lcmdlIGRlOWYxZDNlZjQgYWcvcmViYXNlLW1lcmdlLWFsbG93LWZmLXVuZGVyLWFiYnJldi1jb21tYW5kIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGxvZ2ljIHRvIGF1dG8tZm9sbG93IHRhZ3MgYnkgImdpdCBjbG9uZSAtLXNpbmdsZS1icmFuY2giIHdhcworICAgbm90IGNhcmVmdWwgdG8gYXZvaWQgbGF6eS1mZXRjaGluZyB1bm5lY2Vzc2FyeSB0YWdzLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorICAgKG1lcmdlIDE2N2E1NzVlMmQgamsvdXNlLXF1aWNrLWxvb2t1cC1pbi1jbG9uZS1mb3ItdGFnLWZvbGxvd2luZyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC1pIiBkaWQgbm90IGxlYXZlIHRoZSByZWZsb2cgZW50cmllcyBjb3JyZWN0bHkuCisgICAobWVyZ2UgMWY2OTY1Zjk5NCBlbi9zZXF1ZW5jZXItcmVmbG9nLWFjdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBtb3JlIGFnZ3Jlc3NpdmUgdXBkYXRlcyB0byByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgd2UgaGFkIGZvcgorICAgdGhlIHBhc3QgNyB5ZWFycyBvciBzbyB3ZXJlIG5vdCByZWZsZWN0ZWQgaW4gdGhlIGRvY3VtZW50YXRpb24sCisgICB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYTQ0MDg4NDM1YyBwYi9wdWxsLWZldGNoLWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIFdlJ3ZlIGxlZnQgdGhlIGNvbW1hbmQgbGluZSBwYXJzaW5nIG9mICJnaXQgbG9nIDovYS9iLyIgYnJva2VuIGZvcgorICAgYWJvdXQgYSBmdWxsIHllYXIgd2l0aG91dCBhbnlib2R5IG5vdGljaW5nLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorICAgKG1lcmdlIDAyMjA0NjEwNzEgamMvbWlzc2luZy1yZWYtc3RvcmUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogTWlzYyBmaXhlcyBmb3IgV2luZG93cy4KKyAgIChtZXJnZSAzZWZjMTI4Y2Q1IGpzL21pbmd3LWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UiIChhZ2FpbikgbGVhcm5zIHRvIGhvbm9yICItLW5vLWtlZXAtZW1wdHkiLCB3aGljaCBsZXRzCisgICB0aGUgdXNlciB0byBkaXNjYXJkIGNvbW1pdHMgdGhhdCBhcmUgZW1wdHkgZnJvbSB0aGUgYmVnaW5uaW5nIChhcworICAgb3Bwb3NlZCB0byB0aGUgb25lcyB0aGF0IGJlY29tZSBlbXB0eSBiZWNhdXNlIG9mIHJlYmFzaW5nKS4gIFRoZQorICAgaW50ZXJhY3RpdmUgcmViYXNlIGFsc28gbWFya3MgY29tbWl0cyB0aGF0IGFyZSBlbXB0eSBpbiB0aGUgdG9kby4KKyAgIChtZXJnZSA1MGVkNzYxNDhhIGVuL3JlYmFzZS1uby1rZWVwLWVtcHR5IGxhdGVyIHRvIG1haW50KS4KKworICogUGFyc2luZyB0aGUgaG9zdCBwYXJ0IG91dCBvZiBVUkwgZm9yIHRoZSBjcmVkZW50aWFsIGhlbHBlciBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNGM1OTcxZTE4YSBqay9jcmVkZW50aWFsLXBhcnNpbmctZW5kLW9mLWhvc3QtaW4tVVJMIGxhdGVyIHRvIG1haW50KS4KKworICogRG9jdW1lbnQgdGhlIHJlY29tbWVuZGVkIHdheSB0byBhYm9ydCBhIGZhaWxpbmcgdGVzdCBlYXJseSAoZS5nLiBieQorICAgZXhpdGluZyBhIGxvb3ApLCB3aGljaCBpcyB0byBzYXkgInJldHVybiAxIi4KKyAgIChtZXJnZSA3Y2MxMTJkYzk1IGpjL2RvYy10ZXN0LWxlYXZpbmctZWFybHkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0aGF0IHJlZnJlc2hlcyB0aGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWVkIHRpbWUgb2YKKyAgIG9uLWRpc2sgcGFja2ZpbGVzIGFuZCBsb29zZSBvYmplY3QgZmlsZXMgaGF2ZSBiZWVuIHVwZGF0ZWQuCisgICAobWVyZ2UgMzEyY2Q3NjEzMCBsci9mcmVzaGVuLWZpbGUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVmFsaWRhdGlvbiBvZiBwdXNoIGNlcnRpZmljYXRlIGhhcyBiZWVuIG1hZGUgbW9yZSByb2J1c3QgYWdhaW5zdAorICAgdGltaW5nIGF0dGFja3MuCisgICAobWVyZ2UgNzE5NDgzZTU0NyBiYy9jb25zdGFudC1tZW1lcXVhbCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjdXN0b20gaGFzaCBmdW5jdGlvbiB1c2VkIGJ5ICJnaXQgZmFzdC1pbXBvcnQiIGhhcyBiZWVuCisgICByZXBsYWNlZCB3aXRoIHRoZSBvbmUgZnJvbSBoYXNobWFwLmMsIHdoaWNoIGdhdmUgdXMgYSBuaWNlCisgICBwZXJmb3JtYW5jZSBib29zdC4KKyAgIChtZXJnZSBkODQxMGE4MTZiIGprL2Zhc3QtaW1wb3J0LXVzZS1oYXNobWFwIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICJnaXQgc3VibW9kdWxlIiBjb21tYW5kIGRpZCBub3QgaW5pdGlhbGl6ZSBhIGZldyB2YXJpYWJsZXMgaXQKKyAgIGludGVybmFsbHkgdXNlcyBhbmQgd2FzIGFmZmVjdGVkIGJ5IHZhcmlhYmxlIHNldHRpbmdzIGxlYWtlZCBmcm9tCisgICB0aGUgZW52aXJvbm1lbnQuCisgICAobWVyZ2UgNjVkMTAwYzRkZCBseC9zdWJtb2R1bGUtY2xlYXItdmFyaWFibGVzIGxhdGVyIHRvIG1haW50KS4KKworICogUmFpc2UgdGhlIG1pbmltdW0gcmVxdWlyZWQgdmVyc2lvbiBvZiBkb2Nib29rLXhzbCBwYWNrYWdlIHRvIDEuNzQsCisgICBhcyAxLjc0LjAgd2FzIGZyb20gbGF0ZSAyMDA4LCB3aGljaCBpcyBtb3JlIHRoYW4gMTAgeWVhcnMgb2xkLCBhbmQKKyAgIGRyb3AgY29tcGF0aWJpbGl0eSBjcnVmdCBmcm9tIG91ciBkb2N1bWVudGF0aW9uIHN1aXRlLgorICAgKG1lcmdlIDNjMjU1YWQ2NjAgbWEvZG9jLWRpc2NhcmQtZG9jYm9vay14c2wtMS43MyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbG9nIiBsZWFybnMgIi0tW25vLV1tYWlsbWFwIiBhcyBhIHN5bm9ueW0gdG8gIi0tW25vLV11c2UtbWFpbG1hcCIKKyAgIChtZXJnZSA4OGFjY2NkYTM4IGpjL2xvZy1uby1tYWlsbWFwIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1leHBpcmUtdGltZT08dGltZXN0YW1wPiIgZGlkIG5vdCB1c2UgdGhlCisgICBnaXZlbiB0aW1lc3RhbXAgY29ycmVjdGx5LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYjA5Yjc4NWM3OCBkcy9jb21taXQtZ3JhcGgtZXhwaXJ5LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRlc3RzIHVwZGF0ZSB0byB1c2UgInRlc3QtY2htdGltZSIgaW5zdGVhZCBvZiAidG91Y2ggLXQiLgorICAgKG1lcmdlIGU4OTJhNTY4NDUgZHMvdDUzMTktdG91Y2gtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIiBpbiBhIHBhcnRpYWwgY2xvbmUgbGVhcm5lZCB0byBhdm9pZCBsYXp5IGxvYWRpbmcgYmxvYgorICAgb2JqZWN0cyBpbiBtb3JlIGNhc2VzZSB3aGVuIHRoZXkgYXJlIG5vdCBuZWVkZWQuCisgICAobWVyZ2UgOTVhY2YxMWEzZCBqdC9hdm9pZC1wcmVmZXRjaC13aGVuLWFibGUtaW4tZGlmZiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcHVzaCAtLWF0b21pYyIgdXNlZCB0byBzaG93IGZhaWx1cmVzIGZvciByZWZzIHRoYXQgd2VyZW4ndAorICAgZXZlbiBwdXNoZWQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBkZmUxYjdmMTljIGp4L2F0b21pYy1wdXNoIGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZSBpbiBidWlsdGluLyosIGkuZS4gdGhvc2UgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gd2l0aGluCisgICBidWlsdC1pbiBzdWJjb21tYW5kcywgdGhhdCBpbXBsZW1lbnRzIGJ1bGsgb2YgYSBjb3VwbGUgb2YKKyAgIHN1YmNvbW1hbmRzIGhhdmUgYmVlbiBtb3ZlZCB0byBsaWJnaXQuYSBzbyB0aGF0IHRoZXkgY291bGQgYmUgdXNlZAorICAgYnkgb3RoZXJzLgorICAgKG1lcmdlIDk0NjBmZDQ4YjUgZGwvbGliaWZ5LWEtZmV3IGxhdGVyIHRvIG1haW50KS4KKworICogQWxsb3dpbmcgdGhlIHVzZXIgdG8gc3BsaXQgYSBwYXRjaCBodW5rIHdoaWxlICJnaXQgc3Rhc2ggLXAiIGRvZXMKKyAgIG5vdCB3b3JrIHdlbGw7IGEgYmFuZC1haWQgaGFzIGJlZW4gYWRkZWQgdG8gbWFrZSB0aGlzIChwYXJ0aWFsbHkpCisgICB3b3JrIGJldHRlci4KKworICogImdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1ub3RlcyIgdXNlZCB0byBoaXQgYW4gYXNzZXJ0aW9uIGZhaWx1cmUsCisgICBhcyBpdCBmb3Jnb3QgdG8gaW5pdGlhbGl6ZSB0aGUgbm90ZXMgc3Vic3lzdGVtLgorICAgKG1lcmdlIDU3NzhiMjJiM2QgdGIvZGlmZi10cmVlLXdpdGgtbm90ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJhbmdlLWRpZmYiIGZpeGVzLgorICAgKG1lcmdlIDhkMTY3NWViN2YgdmQvcmFuZ2UtZGlmZi13aXRoLWN1c3RvbS1wcmV0dHktZm9ybWF0LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZ3JlcCIgZGlkIG5vdCBxdW90ZSBhIHBhdGggd2l0aCB1bnVzdWFsIGNoYXJhY3RlciBsaWtlIG90aGVyCisgICBjb21tYW5kcyAobGlrZSAiZ2l0IGRpZmYiLCAiZ2l0IHN0YXR1cyIpIGRvLCBidXQgZGlkIHF1b3RlIHdoZW4gcnVuCisgICBmcm9tIGEgc3ViZGlyZWN0b3J5LCBib3RoIG9mIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA0NTExNWQ4NDkwIG10L2dyZXAtY3F1b3RlLXBhdGggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBHTlUvSHVyZCBpcyBhbHNvIGFtb25nIHRoZSBvbmVzIHRoYXQgbmVlZCB0aGUgZm9wZW4oKSB3cmFwcGVyLgorICAgKG1lcmdlIDI3NGExMzI4ZmIgamMvZ251LWh1cmQtbGV0cy1mcmVhZC1yZWFkLWRpcnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaG9zZSBmZXRjaGluZyBvdmVyIHByb3RvY29sIHYyIGZyb20gbGludXgtbmV4dCBhbmQgb3RoZXIga2VybmVsCisgICByZXBvc2l0b3JpZXMgYXJlIHJlcG9ydGluZyB0aGF0IHYyIG9mdGVuIGZldGNoZXMgd2F5IHRvbyBtdWNoIHRoYW4KKyAgIG5lZWRlZC4KKyAgIChtZXJnZSAxMWM3ZjJhMzBiIGpuL2RlbW90ZS1wcm90bzItZnJvbS1kZWZhdWx0IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHVwbG9hZC1wYWNrIHByb3RvY29sIHYyIGdhdmUgdXAgdG9vIGVhcmx5IGJlZm9yZSBmaW5kaW5nIGEKKyAgIGNvbW1vbiBhbmNlc3RvciwgcmVzdWx0aW5nIGluIGEgd2FzdGVmdWwgZmV0Y2ggZnJvbSBhIGZvcmsgb2YgYQorICAgcHJvamVjdC4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkIHRvIG1hdGNoIHRoZSBiZWhhdmlvdXIgb2YgdjAKKyAgIHByb3RvY29sLgorICAgKG1lcmdlIDJmMGEwOTNkZDYganQvdjItZmV0Y2gtbmVnby1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgYnVpbGQgcHJvY2VkdXJlIGRpZCBub3QgdXNlIHRoZSBsaWJjdXJsIGxpYnJhcnkgYW5kIGl0cyBpbmNsdWRlCisgICBmaWxlcyBjb3JyZWN0bHkgZm9yIGEgY3VzdG9tLWJ1aWx0IGluc3RhbGxhdGlvbi4KKyAgIChtZXJnZSAwNTczODMxOTUwIGprL2J1aWxkLXdpdGgtcmlnaHQtY3VybCBsYXRlciB0byBtYWludCkuCisKKyAqIFRpZ2h0ZW4gImdpdCBtYWlsaW5mbyIgdG8gbm90aWNlIGFuZCBlcnJvciBvdXQgd2hlbiBkZWNvZGVkIHJlc3VsdAorICAgY29udGFpbnMgTlVMIGluIGl0LgorICAgKG1lcmdlIDM5MTk5OTc0NDcgZGQvbWFpbGluZm8td2l0aC1udWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGaXggaW4tY29yZSBpbmNvbnNpc3RlbmN5IGFmdGVyIGZldGNoaW5nIGludG8gYSBzaGFsbG93IHJlcG9zaXRvcnkKKyAgIHRoYXQgYnJva2UgdGhlIGNvZGUgdG8gd3JpdGUgb3V0IGNvbW1pdC1ncmFwaC4KKyAgIChtZXJnZSAzN2I5ZGNhYmZjIHRiL3Jlc2V0LXNoYWxsb3cgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29tbWl0LWdyYXBoIGNvZGUgZXhoYXVzdGVkIGZpbGUgZGVzY3JpcHRvcnMgZWFzaWx5IHdoZW4gaXQKKyAgIGRvZXMgbm90IGhhdmUgdG8uCisgICAobWVyZ2UgYzg4Mjg1MzBiNyB0Yi9jb21taXQtZ3JhcGgtZmQtZXhoYXVzdGlvbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbXVsdGktcGFjay1pbmRleCBsZWZ0IG1tYXBwZWQgZmlsZSBkZXNjcmlwdG9ycyBvcGVuIHdoZW4gaXQKKyAgIGRvZXMgbm90IGhhdmUgdG8uCisgICAobWVyZ2UgNmM3ZmY3Y2Y3ZiBkcy9tdWx0aS1wYWNrLWluZGV4IGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50IHVwZGF0ZSB0byBIb21lYnJldyB1c2VkIGJ5IG1hY09TIGZvbGtzIGJyZWFrcyBidWlsZCBieQorICAgbW92aW5nIGdldHRleHQgbGlicmFyeSBhbmQgbmVjZXNzYXJ5IGhlYWRlcnMuCisgICAobWVyZ2UgYTBiMzEwODYxOCBkcy9idWlsZC1ob21lYnJldy1nZXR0ZXh0LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIEluY29tcGF0aWJsZSBvcHRpb25zICItLXJvb3QiIGFuZCAiLS1mb3JrLXBvaW50IiBvZiAiZ2l0IHJlYmFzZSIKKyAgIGhhdmUgYmVlbiBtYXJrZWQgYW5kIGRvY3VtZW50ZWQgYXMgYmVpbmcgaW5jb21wYXRpYmxlLgorICAgKG1lcmdlIGEzNTQxM2MzNzggZW4vcmViYXNlLXJvb3QtYW5kLWZvcmstcG9pbnQtYXJlLWluY29tcGF0aWJsZSBsYXRlciB0byBtYWludCkuCisKKyAqIEVycm9yIGFuZCB2ZXJib3NlIHRyYWNlIG1lc3NhZ2VzIGZyb20gImdpdCBwdXNoIiBkaWQgbm90IHJlZGFjdAorICAgY3JlZGVudGlhbCBtYXRlcmlhbCBlbWJlZGRlZCBpbiBVUkxzLgorICAgKG1lcmdlIGQxOTJmYTUwMDYganMvYW5vbnltaXNlLXB1c2gtdXJsLWluLWVycm9ycyBsYXRlciB0byBtYWludCkuCisKKyAqIFVwZGF0ZSB0aGUgcGFyc2VyIHVzZWQgZm9yIGNyZWRlbnRpYWwuPFVSTD4uPHZhcmlhYmxlPgorICAgY29uZmlndXJhdGlvbiwgdG8gaGFuZGxlIDxVUkw+cyB3aXRoICcvJyBpbiB0aGVtIGNvcnJlY3RseS4KKyAgIChtZXJnZSBiNDRkMDExOGFjIGJjL3dpbGRjYXJkLWNyZWRlbnRpYWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWNlbnQgdXBkYXRlcyBicm9rZSBwYXJzaW5nIG9mICJjcmVkZW50aWFsLjx1cmw+LjxrZXk+IiB3aGVyZQorICAgPHVybD4gaXMgbm90IGEgZnVsbCBVUkwgKGUuZy4gW2NyZWRlbnRpYWwgImh0dHBzOi8vIl0gaGVscGVyID0gLi4uKQorICAgc3RvcHBlZCB3b3JraW5nLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgOWExMjFiMGQyMiBqcy9wYXJ0aWFsLXVybG1hdGNoLTIuMTcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGNkOTNlNmMwMjkganMvcGFydGlhbC11cmxtYXRjaCBsYXRlciB0byBtYWludCkuCisKKyAqIFNvbWUgb2YgdGhlIGZpbGVzIGNvbW1pdC1ncmFwaCBzdWJzeXN0ZW0ga2VlcHMgb24gZGlzayBkaWQgbm90CisgICBjb3JyZWN0bHkgaG9ub3IgdGhlIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBzZXR0aW5ncyBhbmQgc29tZSB3ZXJlCisgICBsZWZ0IHJlYWQtd3JpdGUuCisKKyAqIEluIGVycm9yIG1lc3NhZ2VzIHRoYXQgImdpdCBzd2l0Y2giIG1lbnRpb25zIGl0cyBvcHRpb24gdG8gY3JlYXRlIGEKKyAgIG5ldyBicmFuY2gsICItYi8tQiIgb3B0aW9ucyB3ZXJlIHNob3duLCB3aGVyZSAiLWMvLUMiIG9wdGlvbnMKKyAgIHNob3VsZCBiZSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDdjMTZlZjc1NzcgZGwvc3dpdGNoLWMtb3B0aW9uLWluLWVycm9yLW1lc3NhZ2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaXRoIHRoZSByZWNlbnQgdGlnaHRlbmluZyBvZiB0aGUgY29kZSB0aGF0IGlzIHVzZWQgdG8gcGFyc2UKKyAgIHZhcmlvdXMgcGFydHMgb2YgYSBVUkwgZm9yIHVzZSBpbiB0aGUgY3JlZGVudGlhbCBzdWJzeXN0ZW0sIGEKKyAgIGhhbmQtZWRpdGVkIGNyZWRlbnRpYWwtc3RvcmUgZmlsZSBjYXVzZXMgdGhlIGNyZWRlbnRpYWwgaGVscGVyIHRvCisgICBkaWUsIHdoaWNoIGlzIGEgYml0IHRvbyBoYXJzaCB0byB0aGUgdXNlcnMuICBEZW1vdGUgdGhlIGVycm9yCisgICBiZWhhdmlvdXIgdG8ganVzdCBpZ25vcmUgYW5kIGtlZXAgdXNpbmcgd2VsbC1mb3JtZWQgbGluZXMgaW5zdGVhZC4KKyAgIChtZXJnZSBjMDM4NTlhNjY1IGNiL2NyZWRlbnRpYWwtc3RvcmUtaWdub3JlLWJvZ3VzLWxpbmVzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHNhbXBsZXMgaW4gdGhlIGNyZWRlbnRpYWwgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBtYWtlIGl0IGNsZWFyIHRoYXQgd2UgZGVwaWN0IHdoYXQgd291bGQgYXBwZWFyIGluIHRoZSAuZ2l0L2NvbmZpZworICAgZmlsZSwgYnkgYWRkaW5nIGFwcHJvcHJpYXRlIHF1b3RlcyBhcyBuZWVkZWQuLgorICAgKG1lcmdlIDE3NzY4MWEwN2UgamsvY3JlZGVudGlhbC1zYW1wbGUtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBicmFuY2giIGFuZCBvdGhlciAiZm9yLWVhY2gtcmVmIiB2YXJpYW50cyBhY2NlcHRlZCBtdWx0aXBsZQorICAgLS1zb3J0PTxrZXk+IG9wdGlvbnMgaW4gdGhlIGluY3JlYXNpbmcgb3JkZXIgb2YgcHJlY2VkZW5jZSwgYnV0IGl0CisgICBoYWQgYSBmZXcgYnJlYWthZ2VzIGFyb3VuZCAiLS1pZ25vcmUtY2FzZSIgaGFuZGxpbmcsIGFuZCB0aWUtYnJlYWtpbmcKKyAgIHdpdGggdGhlIHJlZm5hbWUsIHdoaWNoIGhhdmUgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSA3YzUwNDVmYzE4IGprL2Zvci1lYWNoLXJlZi1tdWx0aS1rZXktc29ydC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kaW5nIGd1aWRlbGluZSBmb3Igc2hlbGwgc2NyaXB0cyBpbnN0cnVjdGVkIHRvIHJlZmVyIHRvIGEKKyAgIHZhcmlhYmxlIHdpdGggZG9sbGFyLXNpZ24gaW5zaWRlIGFyaXRobWV0aWMgZXhwYW5zaW9uIHRvIHdvcmsKKyAgIGFyb3VuZCBhIGJ1ZyBpbiBvbGQgdmVyc2lvbnMgb2YgZGFzaCwgd2hpY2ggaXMgYSB0aGluZyBvZiB0aGUgcGFzdC4KKyAgIE5vdyB3ZSBhcmUgbm90IGZvcmJpZGRlbiBmcm9tIHdyaXRpbmcgJCgodmFyKzEpKS4KKyAgIChtZXJnZSAzMmI1ZmU3ZjBlIGprL2FyaXRoLWV4cGFuc2lvbi1jb2RpbmctZ3VpZGVsaW5lcyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSA8c3RkbGliLmg+IGhlYWRlciBvbiBOZXRCU0QgYnJpbmdzIGluIGl0cyBvd24gZGVmaW5pdGlvbiBvZgorICAgaG1hYygpIGZ1bmN0aW9uIChlZWspLCB3aGljaCBjb25mbGljdHMgd2l0aCBvdXIgb3duIGFuZCB1bnJlbGF0ZWQKKyAgIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbmFtZS4gIE91ciBmdW5jdGlvbiBoYXMgYmVlbiByZW5hbWVkIHRvIHdvcmsKKyAgIGFyb3VuZCB0aGUgaXNzdWUuCisgICAobWVyZ2UgMzAxMzExOGViOCBjYi9hdm9pZC1jb2xsaWRpbmctd2l0aC1uZXRic2QtaG1hYyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBiYXNpYyB0ZXN0IGRpZCBub3QgaG9ub3IgJFRFU1RfU0hFTExfUEFUSCBzZXR0aW5nLCB3aGljaCBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDA1NTVlNGFmNTggY2IvdDAwMDAtdXNlLXRoZS1jb25maWd1cmVkLXNoZWxsIGxhdGVyIHRvIG1haW50KS4KKworICogTWlub3IgaW4tY29kZSBjb21tZW50cyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyb3VuZCBjcmVkZW50aWFsCisgICBBUEkuCisgICAobWVyZ2UgMWFlZDgxN2Y5OSBjYi9jcmVkZW50aWFsLWRvYy1maXhlcyBsYXRlciB0byBtYWludCkuCisKKyAqIFRlYWNoICJhbSIsICJjb21taXQiLCAibWVyZ2UiIGFuZCAicmViYXNlIiwgd2hlbiB0aGV5IGFyZSBydW4gd2l0aAorICAgdGhlICItLXF1aWV0IiBvcHRpb24sIHRvIHBhc3MgIi0tcXVpZXQiIGRvd24gdG8gImdjIC0tYXV0byIuCisgICAobWVyZ2UgN2MzZTllOGNmYiBqYy9hdXRvLWdjLXF1aWV0IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGUgdG8gc2tpcCB1bm1lcmdlZCBwYXRocyBpbiB0aGUgaW5kZXggd2hlbiBzcGFyc2UgY2hlY2tvdXQKKyAgIGlzIGluIHVzZSB3b3VsZCBoYXZlIG1hZGUgb3V0LW9mLWJvdW5kIGFjY2VzcyBvZiB0aGUgaW4tY29yZSBpbmRleAorICAgd2hlbiB0aGUgbGFzdCBwYXRoIHdhcyB1bm1lcmdlZCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBTZXJ2aW5nIGEgImdpdCBmZXRjaCIgY2xpZW50IG92ZXIgImdpdDovLyIgYW5kICJzc2g6Ly8iIHByb3RvY29scworICAgdXNpbmcgdGhlIG9uLXdpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIHdhcyBidWdneSBvbiB0aGUgc2VydmVyIGVuZAorICAgd2hlbiB0aGUgY2xpZW50IG5lZWRzIHRvIG1ha2UgYSBmb2xsb3ctdXAgcmVxdWVzdCB0bworICAgZS5nLiBhdXRvLWZvbGxvdyB0YWdzLgorICAgKG1lcmdlIDA4NDUwZWY3OTEgY2MvdXBsb2FkLXBhY2stdjItZmV0Y2gtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBiaXNlY3QgcmVwbGF5IiBoYWQgdHJvdWJsZSB3aXRoIGlucHV0IGZpbGVzIHdoZW4gdGhleSB1c2VkCisgICBDUkxGIGxpbmUgZW5kaW5nLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNmM3MjJjYmU1YSBjdy9iaXNlY3QtcmVwbGF5LXdpdGgtZG9zIGxhdGVyIHRvIG1haW50KS4KKworICogInJlYmFzZSAtaSIgc2VnZmF1bHRlZCB3aGVuIHJlYXJyYW5naW5nIGEgc2VxdWVuY2UgdGhhdCBoYXMgYQorICAgZml4LXVwIHRoYXQgYXBwbGllcyBhbm90aGVyIGZpeC11cCAod2hpY2ggbWF5IG9yIG1heSBub3QgYmUgYQorICAgZml4LXVwIG9mIHlldCBhbm90aGVyIHN0ZXApLgorICAgKG1lcmdlIDAyNDcxZTdlMjAganMvcmViYXNlLWF1dG9zcXVhc2gtZG91YmxlLWZpeHVwLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZnNjayIgZW5zdXJlcyB0aGF0IHRoZSBwYXRocyByZWNvcmRlZCBpbiB0cmVlIG9iamVjdHMgYXJlCisgICBzb3J0ZWQgYW5kIHdpdGhvdXQgZHVwbGljYXRlcywgYnV0IGl0IGZhaWxlZCB0byBub3RpY2UgYSBjYXNlIHdoZXJlCisgICBhIGJsb2IgaXMgZm9sbG93ZWQgYnkgZW50cmllcyB0aGF0IHNvcnQgYmVmb3JlIGEgdHJlZSB3aXRoIHRoZSBzYW1lCisgICBuYW1lLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgOTA2OGNmYjIwZiBycy9mc2NrLWR1cGxpY2F0ZS1uYW1lcy1pbi10cmVlcyBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgY2xlYW4tdXAgYnkgcmVtb3ZpbmcgYSBjb21wYXRpYmlsaXR5IGltcGxlbWVudGF0aW9uIG9mIGEKKyAgIGZ1bmN0aW9uIHdlIG5vIGxvbmdlciB1c2UuCisgICAobWVyZ2UgODRiMDExNWYwZCBjYi9uby1tb3JlLWdtdGltZSBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gYSBiaW5hcnkgZmlsZSBnZXRzIG1vZGlmaWVkIGFuZCByZW5hbWVkIG9uIGJvdGggc2lkZXMgb2YgaGlzdG9yeQorICAgdG8gZGlmZmVyZW50IGxvY2F0aW9ucywgYm90aCBmaWxlcyB3b3VsZCBiZSB3cml0dGVuIHRvIHRoZSB3b3JraW5nCisgICB0cmVlIGJ1dCBib3RoIHdvdWxkIGhhdmUgdGhlIGNvbnRlbnRzIGZyb20gIm91cnMiLiAgVGhpcyBoYXMgYmVlbgorICAgY29ycmVjdGVkIHNvIHRoYXQgdGhlIHBhdGggZnJvbSBlYWNoIHNpZGUgZ2V0cyB0aGVpciBvcmlnaW5hbCBjb250ZW50LgorCisgKiBPdGhlciBjb2RlIGNsZWFudXAsIGRvY2ZpeCwgYnVpbGQgZml4LCBldGMuCisgICAobWVyZ2UgNTY0OTU2ZjM1OCBqYy9tYWludGFpbi1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDc0MjJiMmEwYTEgc2cvY29tbWl0LXNsYWItY2xhcmlmeS1wZWVrIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5YzY4ODczNWY2IHJzL2RvYy1wYXNzdGhydS1mZXRjaC1vcHRpb25zIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3NTdjMmJhM2UyIGVuL29pZHNldC11bmluY2x1ZGUtaGFzaG1hcCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODMxMmFhN2Q3NCBqYy9jb25maWctdGFyIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkMDBhNWJkZDUwIHNzL3N1Ym1vZHVsZS1mb3JlYWNoLWNiIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2NGQxMDIyZTE0IGFyL3Rlc3Qtc3R5bGUtZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRhNDY1NDQzYTYgZHMvZG9jLWNsb25lLWZpbHRlciBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYmIyZGJlMzAxYiBqay90MzQxOS1kcm9wLWV4cGVuc2l2ZS10ZXN0cyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDM1MDdjYzcxMiBqcy90ZXN0LWp1bml0LWZpbmFsaXphdGlvbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDIxNDliNjc0OGYgYmMvZmFxIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxMmRjMDg3OWYxIGprL3Rlc3QtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzQ0NDIwYmYwZiBwYi9yZWJhc2UtZG9jLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdjZDU0ZDM3ZGMgZGwvd3JhcHBlci1maXgtaW5kZW50YXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDc4NzI1ZWJkYTkgamMvYWxsb3ctc3RybGVuLXN1YnN0aXR1dGlvbi1pbi1zaGVsbC1zY3JpcHRzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyZWNmY2RlY2M2IGptL2dpdHdlYi1mYXN0Y2dpLXV0ZjggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDA3NDBkMGE1ZDMgamsvb2lkLWFycmF5LWNsZWFudXBzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhMWFiYTBjOTVjIGpzL3QwMDA3LXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDc2YmE3ZmEyMjUgbWEvY29uZmlnLWRvYy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDgyNmYwYzBkZjIganMvc3VidHJlZS1kb2MtdXBkYXRlLXRvLWFzY2lpZG9jdG9yLTIgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDg4ZWFmMzYxZTAgZWIvbWJveHJkLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDUxY2M1NDk0MSB0bS96c2gtY29tcGxldGUtc3dpdGNoLXJlc3RvcmUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDM5MTAyY2Y0ZmUgbXMvZG9jLXJldmlzaW9uLWlsbHVzdHJhdGlvbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRkOTM3OGJmYWQgZWIvZ2l0d2ViLW1vcmUtdHJhaWxlcnMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGJkY2NiZjcwNDcgbXQvZG9jLXdvcmt0cmVlLXJlZiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgY2U5YmFmMjM0ZiBkbC9wdXNoLXJlY3Vyc2Utc3VibW9kdWxlcy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQxNTMyNzQwNTIgYmMvZG9jLWNyZWRlbnRpYWwtaGVscGVyLXZhbHVlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1YzdiYjAxNDZlIGpjL2NvZGluZ3N0eWxlLWNvbXBhcmUtd2l0aC1udWxsIGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNjNjM5YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjAudHh0CkBAIC0wLDAgKzEsMzAwIEBACitHaXQgdjIuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgb25lIGVuZGVkIHVwIHRvIGJlIGEgcmVsZWFzZSB3aXRoIGxvdHMgb2Ygc21hbGwgY29ycmVjdGlvbnMgYW5kCitpbXByb3ZlbWVudHMgd2l0aG91dCBiaWcgdW5jb21mb3J0YWJseSBleGNpdGluZyBmZWF0dXJlcy4gIFRoZSByZWNlbnQKK3NlY3VyaXR5IGZpeCB0aGF0IHdlbnQgdG8gMi4yLjEgYW5kIG9sZGVyIG1haW50ZW5hbmNlIHRyYWNrcyBpcyBhbHNvCitjb250YWluZWQgaW4gdGhpcyB1cGRhdGUuCisKKworVXBkYXRlcyBzaW5jZSB2Mi4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworUG9ydHMKKworICogUmVjZW50IGdjYyB0b29sY2hhaW4gb24gQ3lnd2luIHN0YXJ0ZWQgdGhyb3dpbmcgY29tcGlsYXRpb24gd2FybmluZywKKyAgIHdoaWNoIGhhcyBiZWVuIHNxdWVsY2hlZC4KKworICogQSBmZXcgdXBkYXRlcyB0byBidWlsZCBvbiBwbGF0Zm9ybXMgdGhhdCBsYWNrIHR2X25zZWMsCisgICBjbG9ja19nZXR0aW1lLCBDTE9DS19NT05PVE9OSUMgYW5kIEhNQUNfQ1RYX2NsZWFudXAgKGUuZy4gb2xkZXIKKyAgIFJIRUwpIGhhdmUgYmVlbiBhZGRlZC4KKworCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogSXQgd2FzIGN1bWJlcnNvbWUgdG8gdXNlICJHSVRfU1NIIiBtZWNoYW5pc20gd2hlbiB0aGUgdXNlciB3YW50ZWQKKyAgIHRvIHBhc3MgYW4gZXh0cmEgc2V0IG9mIGFyZ3VtZW50cyB0byB0aGUgdW5kZXJseWluZyBzc2guICBBIG5ldworICAgZW52aXJvbm1lbnQgdmFyaWFibGUgR0lUX1NTSF9DT01NQU5EIGNhbiBiZSB1c2VkIGZvciB0aGlzLgorCisgKiBBIHJlcXVlc3QgdG8gc3RvcmUgYW4gZW1wdHkgbm90ZSB2aWEgImdpdCBub3RlcyIgbWVhbnQgdG8gcmVtb3ZlCisgICBub3RlIGZyb20gdGhlIG9iamVjdCBidXQgd2l0aCAtLWFsbG93LWVtcHR5IHdlIHdpbGwgc3RvcmUgYQorICAgKHN1cnByaXNlISkgIG5vdGUgdGhhdCBpcyBlbXB0eS4KKworICogImdpdCBpbnRlcnByZXQtdHJhaWxlcnMiIGxlYXJuZWQgdG8gcHJvcGVybHkgaGFuZGxlIHRoZQorICAgIkNvbmZsaWN0czoiIGJsb2NrIGF0IHRoZSBlbmQuCisKKyAqICJnaXQgYW0iIGxlYXJuZWQgIi0tbWVzc2FnZS1pZCIgb3B0aW9uIHRvIGNvcHkgdGhlIG1lc3NhZ2UgSUQgb2YKKyAgIHRoZSBpbmNvbWluZyBlLW1haWwgdG8gdGhlIGxvZyBtZXNzYWdlIG9mIHJlc3VsdGluZyBjb21taXQuCisKKyAqICJnaXQgY2xvbmUgLS1yZWZlcmVuY2U9PG92ZXIgdGhlcmU+IiBsZWFybmVkIHRoZSAiLS1kaXNzb2NpYXRlIgorICAgb3B0aW9uIHRvIGdvIHdpdGggaXQ7IGl0IGJvcnJvd3Mgb2JqZWN0cyBmcm9tIHRoZSByZWZlcmVuY2Ugb2JqZWN0CisgICBzdG9yZSB3aGlsZSBjbG9uaW5nIG9ubHkgdG8gcmVkdWNlIG5ldHdvcmsgdHJhZmZpYyBhbmQgdGhlbgorICAgZGlzc29jaWF0ZXMgdGhlIHJlc3VsdGluZyBjbG9uZSBmcm9tIHRoZSByZWZlcmVuY2UgYnkgcGVyZm9ybWluZworICAgbG9jYWwgY29waWVzIG9mIGJvcnJvd2VkIG9iamVjdHMuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCAiLS10cmFuc2Zlci1lbmNvZGluZyIgb3B0aW9uIHRvIGZvcmNlIGEKKyAgIG5vbi1mYXVsdCBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIGhlYWRlciAoZS5nLiBiYXNlNjQpLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIG5vcm1hbGx5IGlkZW50aWZpZXMgaXRzZWxmIHZpYSBYLU1haWxlcjogaGVhZGVyIGluCisgICB0aGUgbWVzc2FnZSBpdCBzZW5kcyBvdXQuICBBIG5ldyBjb21tYW5kIGxpbmUgZmxhZyAtLW5vLXhtYWlsZXIKKyAgIGFsbG93cyB0aGUgdXNlciB0byBzcXVlbGNoIHRoZSBoZWFkZXIuCisKKyAqICJnaXQgcHVzaCIgaW50byBhIHJlcG9zaXRvcnkgd2l0aCBhIHdvcmtpbmcgdHJlZSBub3JtYWxseSByZWZ1c2VzCisgICB0byBtb2RpZnkgdGhlIGJyYW5jaCB0aGF0IGlzIGNoZWNrZWQgb3V0LiAgVGhlIGNvbW1hbmQgbGVhcm5lZCB0bworICAgb3B0aW9uYWxseSBkbyBhbiBlcXVpdmFsZW50IG9mICJnaXQgcmVzZXQgLS1oYXJkIiBvbmx5IHdoZW4gdGhlcmUKKyAgIGlzIG5vIGNoYW5nZSB0byB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXggaW5zdGVhZCwgd2hpY2ggd291bGQKKyAgIGJlIHVzZWZ1bCB0byAiZGVwbG95IiBieSBwdXNoaW5nIGludG8gYSByZXBvc2l0b3J5LgorCisgKiAiZ2l0IG5ldy13b3JrZGlyIiAoaW4gY29udHJpYi8pIGNhbiBiZSB1c2VkIHRvIHBvcHVsYXRlIGFuIGVtcHR5CisgICBhbmQgZXhpc3RpbmcgZGlyZWN0b3J5IG5vdy4KKworICogQ3JlZGVudGlhbCBoZWxwZXJzIGFyZSBhc2tlZCBpbiB0dXJuIHVudGlsIG9uZSBvZiB0aGVtIGdpdmUKKyAgIHBvc2l0aXZlIHJlc3BvbnNlLCB3aGljaCBpcyBjdW1iZXJzb21lIHRvIHR1cm4gb2ZmIHdoZW4geW91IG5lZWQgdG8KKyAgIHJ1biBHaXQgaW4gYW4gYXV0b21hdGVkIHNldHRpbmcuICBUaGUgY3JlZGVudGlhbCBoZWxwZXIgaW50ZXJmYWNlCisgICBsZWFybmVkIHRvIGFsbG93IGEgaGVscGVyIHRvIHNheSAic3RvcCwgZG9uJ3QgYXNrIG90aGVyIGhlbHBlcnMuIgorICAgQWxzbyBHSVRfVEVSTUlOQUxfUFJPTVBUIGVudmlyb25tZW50IGNhbiBiZSBzZXQgdG8gZmFsc2UgdG8gZGlzYWJsZQorICAgb3VyIGJ1aWx0LWluIHByb21wdCBtZWNoYW5pc20gZm9yIHBhc3N3b3Jkcy4KKworICogImdpdCBicmFuY2ggLWQiIChkZWxldGUpIGFuZCAiZ2l0IGJyYW5jaCAtbSIgKG1vdmUpIGxlYXJuZWQgdG8KKyAgIGhvbm9yICItZiIgKGZvcmNlKSBmbGFnOyB1bmxpa2UgbWFueSBvdGhlciBzdWJjb21tYW5kcywgdGhlIHdheSB0bworICAgZm9yY2UgdGhlc2UgaGF2ZSBiZWVuIHdpdGggc2VwYXJhdGUgIi1ELy1NIiBvcHRpb25zLCB3aGljaCB3YXMKKyAgIGluY29uc2lzdGVudC4KKworICogImRpZmYtaGlnaGxpZ2h0IiBmaWx0ZXIgKGluIGNvbnRyaWIvKSBhbGxvd3MgaXRzIGNvbG9yIG91dHB1dCB0byBiZQorICAgY3VzdG9taXplZCB2aWEgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBsZWFybmVkIHRvIHRha2UgIi12IiAodmVyYm9zZSkgYW5kICItcSIgKHF1aWV0KQorICAgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisKKyAqICJnaXQgcmVtb3RlIGFkZCAkbmFtZSAkVVJMIiBpcyBub3cgYWxsb3dlZCB3aGVuICJ1cmwuJFVSTC5pbnN0ZWFkT2YiCisgICBpcyBhbHJlYWR5IGRlZmluZWQuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBub3cgY2FuIGJlIGJ1aWx0IHRvIHVzZSBjVVJMIGxpYnJhcnkgdG8gdGFsayB0bworICAgSU1BUCBzZXJ2ZXJzIChpZiB0aGUgbGlicmFyeSBpcyByZWNlbnQgZW5vdWdoLCBvZiBjb3Vyc2UpLgorICAgVGhpcyBhbGxvd3MgeW91IHRvIHVzZSBhdXRoZW50aWNhdGUgbWV0aG9kIG90aGVyIHRoYW4gQ1JBTS1NRDUsCisgICBhbW9uZyBvdGhlciB0aGluZ3MuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBub3cgYWxsb3dzIEdJVF9DVVJMX1ZFUkJPU0UgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8KKyAgIGNvbnRyb2wgdGhlIHZlcmJvc2l0eSB3aGVuIHRhbGtpbmcgdmlhIHRoZSBjVVJMIGxpYnJhcnkuCisKKyAqIFRoZSBwcm9tcHQgc2NyaXB0IChpbiBjb250cmliLykgbGVhcm5lZCB0byBvcHRpb25hbGx5IGhpZGUgcHJvbXB0CisgICB3aGVuIGluIGFuIGlnbm9yZWQgZGlyZWN0b3J5IGJ5IHNldHRpbmcgR0lUX1BTMV9ISURFX0lGX1BXRF9JR05PUkVECisgICBzaGVsbCB2YXJpYWJsZS4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBFYXJsaWVyIHdlIG1hZGUgInJldi1saXN0IC0tb2JqZWN0LWVkZ2UiIG1vcmUgYWdncmVzc2l2ZWx5IGxpc3QgdGhlCisgICBvYmplY3RzIGF0IHRoZSBlZGdlIGNvbW1pdHMsIGluIG9yZGVyIHRvIHJlZHVjZSBudW1iZXIgb2Ygb2JqZWN0c+OAgAorICAgZmV0Y2hlZCBpbnRvIGEgc2hhbGxvdyByZXBvc2l0b3J5LCBidXQgdGhlIGNoYW5nZSBhZmZlY3RlZCBjYXNlcworICAgb3RoZXIgdGhhbiAiZmV0Y2hpbmcgaW50byBhIHNoYWxsb3cgcmVwb3NpdG9yeSIgYW5kIG1hZGUgaXQKKyAgIHVudXNhYmx5IHNsb3cgKGUuZy4gZmV0Y2hpbmcgaW50byBhIG5vcm1hbCByZXBvc2l0b3J5IHNob3VsZCBub3QKKyAgIGhhdmUgdG8gc3VmZmVyIHRoZSBvdmVyaGVhZCBmcm9tIGV4dHJhIHByb2Nlc3NpbmcpLiAgTGltaXQgaXQgdG8gYQorICAgbW9yZSBzcGVjaWZpYyBjYXNlIGJ5IGludHJvZHVjaW5nIC0tb2JqZWN0cy1lZGdlLWFnZ3Jlc3NpdmUsIGEgbmV3CisgICBvcHRpb24gdG8gcmV2LWxpc3QuCisKKyAqIFNxdWVsY2hlZCB1c2VsZXNzIGNvbXBpbGVyIHdhcm5pbmdzIG9uIE1hYyBPUyBYIHJlZ2FyZGluZyB0aGUKKyAgIGNyeXB0byBBUEkuCisKKyAqIFRoZSBwcm9jZWR1cmUgdG8gZ2VuZXJhdGUgdW5pY29kZSB0YWJsZSBoYXMgYmVlbiBzaW1wbGlmaWVkLgorCisgKiBTb21lIGZpbGVzeXN0ZW1zIGFzc2lnbiBmaWxlbW9kZXMgaW4gYSBzdHJhbmdlIHdheSwgZm9vbGluZyB0aGVuCisgICBhdXRvbWF0aWMgImZpbGVtb2RlIHRydXN0YWJpbGl0eSIgY2hlY2sgZG9uZSBkdXJpbmcgYSBuZXcKKyAgIHJlcG9zaXRvcnkgY3JlYXRpb24uICBUaGUgaW5pdGlhbGl6YXRpb24gY29kZXBhdGggaGFzIGJlZW4gaGFyZGVuZWQKKyAgIGFnYWluc3QgdGhpcyBpc3N1ZS4KKworICogVGhlIGNvZGVwYXRoIGluICJnaXQgcmVtb3RlIHVwZGF0ZSAtLXBydW5lIiB0byBkcm9wIG1hbnkgcmVmcyBoYXMKKyAgIGJlZW4gb3B0aW1pemVkLgorCisgKiBUaGUgQVBJIGludG8gZ2V0X21lcmdlX2Jhc2VzKigpIGZhbWlseSBvZiBmdW5jdGlvbnMgd2FzIGVhc3kgdG8KKyAgIG1pc3VzZSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkIHRvIG1ha2UgaXQgaGFyZGVyIHRvIGRvIHNvLgorCisgKiBMb25nIG92ZXJkdWUgZGVwYXJ0dXJlIGZyb20gdGhlIGFzc3VtcHRpb24gdGhhdCBTX0lGTVQgaXMgc2hhcmVkIGJ5CisgICBldmVyeWJvZHkgbWFkZSBpbiAyMDA1LCB3aGljaCB3YXMgbmVjZXNzYXJ5IHRvIHBvcnQgdG8gei9PUy4KKworICogImdpdCBwdXNoIiBhbmQgImdpdCBmZXRjaCIgZGlkIG5vdCBjb21tdW5pY2F0ZSBhbiBvdmVybG9uZyByZWZuYW1lCisgICBjb3JyZWN0bHkuICBOb3cgaXQgdXNlcyA2NGtCIHNpZGViYW5kIHRvIGFjY29tbW9kYXRlIGxvbmdlciBvbmVzLgorCisgKiBSZWNlbnQgR1BHIGNoYW5nZXMgdGhlIGtleXJpbmcgZm9ybWF0IGFuZCBkcm9wcyBzdXBwb3J0IGZvciBSRkMxOTkxCisgICBmb3JtYXR0ZWQgc2lnbmF0dXJlcywgYnJlYWtpbmcgb3VyIGV4aXN0aW5nIHRlc3RzLgorCisgKiAiZ2l0LXByb21wdCIgKGluIGNvbnRyaWIvKSB1c2VkIGEgdmFyaWFibGUgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlLAorICAgcG9zc2libHkgY29udGFtaW5hdGluZyBlbmQtdXNlcidzIG5hbWVzcGFjZS4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi4yCistLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjIuMiBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgdGhlIG1haW50ZW5hbmNlIHJlbGVhc2VzJworbm90ZXMgZm9yIGRldGFpbHMpLgorCisgKiAiZ2l0IGh0dHAtcHVzaCIgb3ZlciBXZWJEQVYgKGFrYSBkdW1iIGh0dHAtcHVzaCkgd2FzIGJyb2tlbiBpbgorICAgdjIuMi4yIHdoZW4gcGFyc2luZyBhIHN5bWJvbGljIHJlZiwgcmVzdWx0aW5nIGluIGEgYm9ndXMgcmVxdWVzdAorICAgdGhhdCBnZXRzIHJlamVjdGVkIGJ5IHJlY2VudCB2ZXJzaW9ucyBvZiBjVVJMIGxpYnJhcnkuCisgICAobWVyZ2UgZjY3ODZjOCBqay9odHRwLXB1c2gtc3ltcmVmLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBsb2dpYyBpbiAiZ2l0IGJpc2VjdCBiYWQgSEVBRCIgZXRjLiB0byBhdm9pZCBmb3JjaW5nIHRoZSB0ZXN0CisgICBvZiB0aGUgY29tbW9uIGFuY2VzdG9yIG9mIGJhZCBhbmQgZ29vZCBjb21taXRzIHdhcyBicm9rZW4uCisgICAobWVyZ2UgMDc5MTNkNSBjYy9iaXNlY3QtcmV2LXBhcnNpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNoZWNrb3V0LWluZGV4IC0tdGVtcD0kdGFyZ2V0ICRwYXRoIiBkaWQgbm90IHdvcmsgY29ycmVjdGx5CisgICBmb3IgcGF0aHMgb3V0c2lkZSB0aGUgY3VycmVudCBzdWJkaXJlY3RvcnkgaW4gdGhlIHByb2plY3QuCisgICAobWVyZ2UgNzRjNGRlNSBlcy9jaGVja291dC1pbmRleC10ZW1wIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHJlcG9ydCBmcm9tICJnaXQgY2hlY2tvdXQiIG9uIGEgYnJhbmNoIHRoYXQgYnVpbGRzIG9uIGFub3RoZXIKKyAgIGxvY2FsIGJyYW5jaCBieSBzZXR0aW5nIGl0cyBicmFuY2guKi5tZXJnZSB0byBicmFuY2ggbmFtZSAobm90IGEKKyAgIGZ1bGwgcmVmbmFtZSkgaW5jb3JyZWN0bHkgc2FpZCB0aGF0IHRoZSB1cHN0cmVhbSBpcyBnb25lLgorICAgKG1lcmdlIDA1ZTczNjggamMvY2hlY2tvdXQtbG9jYWwtdHJhY2stcmVwb3J0IGxhdGVyIHRvIG1haW50KS4KKworICogV2l0aCBUaGUgZ2l0LXByb21wdCBzdXBwb3J0IChpbiBjb250cmliLyksIHVzaW5nIHRoZSBleGl0IHN0YXR1cyBvZgorICAgdGhlIGxhc3QgY29tbWFuZCBpbiB0aGUgcHJvbXB0LCBlLmcuICBQUzE9JyQoX19naXRfcHMxKSAkPyAnLCBkaWQKKyAgIG5vdCB3b3JrIHdlbGwsIGJlY2F1c2UgdGhlIGhlbHBlciBmdW5jdGlvbiBzdG9tcGVkIG9uIHRoZSBleGl0CisgICBzdGF0dXMuCisgICAobWVyZ2UgNmJhYmU3NiB0Zi9wcm9tcHQtcHJlc2VydmUtZXhpdC1zdGF0dXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWNlbnQgdXBkYXRlIHRvICJnaXQgY29tbWl0IiBicm9rZSBhbWVuZGluZyBhbiBleGlzdGluZyBjb21taXQKKyAgIHdpdGggYm9ndXMgYXV0aG9yL2NvbW1pdHRlciBsaW5lcyB3aXRob3V0IGEgdmFsaWQgZS1tYWlsIGFkZHJlc3MuCisgICAobWVyZ2UgYzgzYTUwOSBqay9jb21taXQtZGF0ZS1hcHByb3hpZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBsb2NrZmlsZSBBUEkgdXNlZCB0byBnZXQgY29uZnVzZWQgd2hpY2ggZmlsZSB0byBjbGVhbiB1cCB3aGVuCisgICB0aGUgcHJvY2VzcyBtb3ZlZCB0aGUgJGN3ZCBhZnRlciBjcmVhdGluZyBhIGxvY2tmaWxlLgorICAgKG1lcmdlIGZhMTM3ZjYgbmQvbG9ja2ZpbGUtYWJzb2x1dGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUcmFkaXRpb25hbGx5IHdlIHRyaWVkIHRvIGF2b2lkIGludGVycHJldGluZyBkYXRlIHN0cmluZ3MgZ2l2ZW4gYnkKKyAgIHRoZSB1c2VyIGFzIGZ1dHVyZSBkYXRlcywgZS5nLiBHSVRfQ09NTUlUVEVSX0RBVEU9MjAxNC0xMi0xMCB3aGVuCisgICB1c2VkIGVhcmx5IE5vdmVtYmVyIDIwMTQgd2FzIHRha2VuIGFzICJPY3RvYmVyIDEyLCAyMDE0IiBiZWNhdXNlIGl0CisgICBpcyBsaWtlbHkgdGhhdCBhIGRhdGUgaW4gdGhlIGZ1dHVyZSwgRGVjZW1iZXIgMTAsIGlzIGEgbWlzdGFrZS4KKyAgIFRoaXMgaGV1cmlzdGljcyBoYXMgYmVlbiBsb29zZW5lZCB0byBhbGxvdyBwZW9wbGUgdG8gZXhwcmVzcyBmdXR1cmUKKyAgIGRhdGVzIChtb3N0IG5vdGFibHksIC0tdW50aWw9PGRhdGU+IG1heSB3YW50IHRvIGJlIGZhciBpbiB0aGUKKyAgIGZ1dHVyZSkgYW5kIHdlIG5vIGxvbmdlciB0aWVicmVhayBieSBmdXR1cmUtbmVzcyBvZiB0aGUgZGF0ZSB3aGVuCisKKyAgICAoMSkgSVNPLWxpa2UgZm9ybWF0IGlzIHVzZWQsIGFuZAorICAgICgyKSB0aGUgc3RyaW5nIGNhbiBtYWtlIHNlbnNlIGludGVycHJldGVkIGFzIGJvdGggeS1tLWQgYW5kIHktZC1tLgorCisgICBHaXQgbWF5IHN0aWxsIGhhdmUgdG8gdXNlIHRoZSBoZXVyaXN0aWNzIHRvIHRpZWJyZWFrIGJldHdlZW4gZGQvbW0veXkKKyAgIGFuZCBtbS9kZC95eSwgdGhvdWdoLgorICAgKG1lcmdlIGQzNzIzOTUgamsvYXBwcm94aWRhdGUtYXZvaWQteS1kLW0tb3Zlci1mdXR1cmUtZGF0ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBHaXQgZGlkIG5vdCBjb3JyZWN0bHkgcmVhZCBhbiBvdmVybG9uZyByZWZuYW1lIGZyb20gYSBwYWNrZWQgcmVmcworICAgZmlsZS4KKyAgIChtZXJnZSBlYTQxNzgzIGprL3JlYWQtcGFja2VkLXJlZnMtd2l0aG91dC1wYXRoLW1heCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYXBwbHkiIHdhcyBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gdG8gdGFrZSAtLWlnbm9yZS1kYXRlCisgICBvcHRpb24sIHdoaWNoIGl0IGRvZXMgbm90LgorICAgKG1lcmdlIDBjZWY0ZTcgcncvYXBwbHktZG9lcy1ub3QtdGFrZS1pZ25vcmUtZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYWRkIC1pIiBkaWQgbm90IG5vdGljZSB3aGVuIHRoZSBpbnRlcmFjdGl2ZSBjb21tYW5kIGlucHV0CisgICBzdHJlYW0gd2VudCBhd2F5IGFuZCBrZXB0IGFza2luZyB0aGUgc2FtZSBxdWVzdGlvbi4KKyAgIChtZXJnZSBhOGJlYzdhIGprL2FkZC1pLXJlYWQtZXJyb3IgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgaGFuZGxlIFJGQyAyMDQ3IGVuY29kZWQgaGVhZGVycyBxdWl0ZQorICAgcmlnaHQuCisgICAobWVyZ2UgYWI0N2UyYSByZC9zZW5kLWVtYWlsLTIwNDctZml4IGxhdGVyIHRvIG1haW50KS4KKworICogTmV3IHRhZyBvYmplY3QgZm9ybWF0IHZhbGlkYXRpb24gYWRkZWQgaW4gMi4yIHNob3dlZCBnYXJiYWdlIGFmdGVyCisgICBhIHRhZ25hbWUgaXQgcmVwb3J0ZWQgaW4gaXRzIGVycm9yIG1lc3NhZ2UuCisgICAobWVyZ2UgYTFlOTIwYSBqcy9mc2NrLXRhZy12YWxpZGF0aW9uIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGUgdGhhdCByZWFkcyB0aGUgcmVmbG9nIGZyb20gdGhlIG5ld2VyIHRvIHRoZSBvbGRlciBlbnRyaWVzCisgICBkaWQgbm90IGhhbmRsZSBhbiBlbnRyeSB0aGF0IGNyb3NzZXMgYSBib3VuZGFyeSBvZiBibG9jayBpdCB1c2VzIHRvCisgICByZWFkIHRoZW0gY29ycmVjdGx5LgorICAgKG1lcmdlIDY5MjE2YmYgamsvZm9yLWVhY2gtcmVmbG9nLWVudC1yZXZlcnNlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIC1CIC1NIiBhZnRlciBtYWtpbmcgYSBuZXcgY29weSBCIG91dCBvZiBhbiBleGlzdGluZyBmaWxlCisgICBBIGFuZCB0aGVuIGVkaXRpbmcgQSBleHRlbnNpdmVseSBvdWdodCB0byByZXBvcnQgdGhhdCBCIHdhcyBjcmVhdGVkCisgICBieSBjb3B5aW5nIEEgYW5kIEEgd2FzIG1vZGlmaWVkLCB3aGljaCBpcyB3aGF0ICJnaXQgZGlmZiAtQyIKKyAgIHJlcG9ydHMsIGJ1dCBpdCBpbnN0ZWFkIHNhaWQgQSB3YXMgcmVuYW1lZCB0byBCIGFuZCBBIHdhcyBlZGl0ZWQKKyAgIGhlYXZpbHkgaW4gcGxhY2UuICBUaGlzIHdhcyBub3QganVzdCBpbmNvaGVyZW50IGJ1dCBhbHNvIGZhaWxlZCB0bworICAgYXBwbHkgd2l0aCAiZ2l0IGFwcGx5Ii4gIFRoZSByZXBvcnQgaGFzIGJlZW4gY29ycmVjdGVkIHRvIG1hdGNoIHdoYXQKKyAgICJnaXQgZGlmZiAtQyIgcHJvZHVjZXMgZm9yIHRoaXMgY2FzZS4KKyAgIChtZXJnZSA2OTM2YjU4IGpjL2RpZmYtYi1tIGxhdGVyIHRvIG1haW50KS4KKworICogSW4gZmlsZXMgd2UgcHJlLXBvcHVsYXRlIGZvciB0aGUgdXNlciB0byBlZGl0IHdpdGggY29tbWVudGVkIGhpbnRzLAorICAgYSBsaW5lIG9mIGhpbnQgdGhhdCBpcyBpbmRlbnRlZCB3aXRoIGEgdGFiIHVzZWQgdG8gc2hvdyBhcyAnIycgKG9yCisgICBhbnkgY29tbWVudCBjaGFyKSwgJyAnIChzcGFjZSksIGFuZCB0aGVuIHRoZSBoaW50IHRleHQgdGhhdCBiZWdhbgorICAgd2l0aCB0aGUgdGFiLCB3aGljaCBzb21lIGVkaXRvcnMgZmxhZyBhcyBhbiBpbmRlbnRhdGlvbiBlcnJvciAodGFiCisgICBmb2xsb3dpbmcgc3BhY2UpLiAgV2Ugbm93IG9taXQgdGhlIHNwYWNlIGFmdGVyIHRoZSBjb21tZW50IGNoYXIgaW4KKyAgIHN1Y2ggYSBjYXNlLgorICAgKG1lcmdlIGQ1NWFlYjcgamMvc3RyYnVmLWFkZC1saW5lcy1hdm9pZC1zcC1odC1zZXF1ZW5jZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbHMtdHJlZSIgZG9lcyBub3Qgc3VwcG9ydCBwYXRoIHNlbGVjdGlvbiBiYXNlZCBvbiBuZWdhdGl2ZQorICAgcGF0aHNwZWNzLCBidXQgZGlkIG5vdCBlcnJvciBvdXQgd2hlbiBuZWdhdGl2ZSBwYXRoc3BlY3MgYXJlIGdpdmVuLgorICAgKG1lcmdlIGYxZjYyMjQgbmQvbHMtdHJlZS1wYXRoc3BlYyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBmdW5jdGlvbiBzb21ldGltZXMgcmV0dXJuZWQgYSBub24tZnJlZWFibGUgbWVtb3J5IGFuZCBzb21lCisgICBvdGhlciB0aW1lcyByZXR1cm5lZCBhIHBpZWNlIG9mIG1lbW9yeSB0aGF0IG11c3QgYmUgZnJlZWQsIGxlYWRpbmcKKyAgIHRvIGluZXZpdGFibGUgbGVha3MuCisgICAobWVyZ2UgNTkzNjJlNSBqYy9leGVjLWNtZC1zeXN0ZW0tcGF0aC1sZWFrLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIHRvIGFiYnJldmlhdGUgYW4gb2JqZWN0IG5hbWUgdG8gaXRzIHNob3J0IHVuaXF1ZSBwcmVmaXgKKyAgIGhhcyBiZWVuIG9wdGltaXplZCB3aGVuIG5vIGFiYnJldmlhdGlvbiB3YXMgcmVxdWVzdGVkLgorICAgKG1lcmdlIDYxZTcwNGUgbWgvZmluZC11bmlxLWFiYnJldiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYWRkIC0taWdub3JlLWVycm9ycyAuLi4iIGRpZCBub3QgaWdub3JlIGFuIGVycm9yIHRvCisgICBnaXZlIGEgZmlsZSB0aGF0IGRpZCBub3QgZXhpc3QuCisgICAobWVyZ2UgMWQzMWU1YSBtZy9hZGQtaWdub3JlLWVycm9ycyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2hlY2tvdXQgJHRyZWVpc2ggJHBhdGgiLCB3aGVuICRwYXRoIGluIHRoZSBpbmRleCBhbmQgdGhlCisgICB3b3JraW5nIHRyZWUgYWxyZWFkeSBtYXRjaGVkIHdoYXQgaXMgaW4gJHRyZWVpc2ggYXQgdGhlICRwYXRoLAorICAgc3RpbGwgb3Zlcndyb3RlIHRoZSAkcGF0aCB1bm5lY2Vzc2FyaWx5LgorICAgKG1lcmdlIGM1MzI2YmQgamsvY2hlY2tvdXQtZnJvbS10cmVlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjb25maWcgLS1nZXQtY29sb3IiIGRpZCBub3QgcGFyc2UgaXRzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKyAgIGNhcmVmdWxseS4KKyAgIChtZXJnZSBjYjM1NzIyIGprL2NvbG9ycy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBvcGVuKCkgZW11bGF0ZWQgb24gV2luZG93cyBwbGF0Zm9ybXMgZGlkIG5vdCBnaXZlIEVJU0RJUiB1cG9uCisgICBhbiBhdHRlbXB0IHRvIG9wZW4gYSBkaXJlY3RvcnkgZm9yIHdyaXRpbmcuCisgICAobWVyZ2UgYmE2ZmFkMCBqcy93aW5kb3dzLW9wZW4tZWlzZGlyLWVycm9yIGxhdGVyIHRvIG1haW50KS4KKworICogQSBmZXcgY29kZSBwYXRocyB1c2VkIGFicygpIHdoZW4gdGhleSBzaG91bGQgaGF2ZSB1c2VkIGxhYnMoKSBvbgorICAgbG9uZyBpbnRlZ2Vycy4KKyAgIChtZXJnZSA4MzkxNWJhIHJzL21haW50LWNvbmZpZy11c2UtbGFicyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzFhOGFhMSBycy9yZWNlaXZlLXBhY2stdXNlLWxhYnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0d2ViIiB1c2VkIHRvIGRlcGVuZCBvbiBhIGJlaGF2aW91ciByZWNlbnQgQ0dJLnBtIGRlcHJlY2F0ZWQuCisgICAobWVyZ2UgMTNkYmY0NiBqay9naXR3ZWItd2l0aC1uZXdlci1jZ2ktbXVsdGktcGFyYW0gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGluaXQiIChoZW5jZSAiZ2l0IGNsb25lIikgaW5pdGlhbGl6ZWQgdGhlIHBlci1yZXBvc2l0b3J5CisgICBjb25maWd1cmF0aW9uIGZpbGUgLmdpdC9jb25maWcgd2l0aCB4LWJpdCBieSBtaXN0YWtlLgorICAgKG1lcmdlIDFmMzJlY2YgbWgvY29uZmlnLWZsaXAteGJpdC1iYWNrLWFmdGVyLWNoZWNraW5nIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50IHVwZGF0ZSBpbiBHaXQgMi4yIHN0YXJ0ZWQgY3JlYXRpbmcgb2JqZWN0cy9pbmZvL3BhY2tzIGFuZAorICAgaW5mby9yZWZzIGZpbGVzIHdpdGggcGVybWlzc2lvbiBiaXRzIHRpZ2h0ZXIgdGhhbiB1c2VyJ3MgdW1hc2suCisgICAobWVyZ2UgZDkxMTc1YiBqay9wcnVuZS1wYWNrZWQtc2VydmVyLWluZm8gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBHaXQgMi4wIHdhcyBzdXBwb3NlZCB0byBtYWtlIHRoZSAic2ltcGxlIiBtb2RlIGZvciB0aGUgZGVmYXVsdCBvZgorICAgImdpdCBwdXNoIiwgYnV0IGl0IGRpZG4ndC4KKyAgIChtZXJnZSAwMGE2ZmEwIGprL3B1c2gtc2ltcGxlIGxhdGVyIHRvIG1haW50KS4KKworICogIkV2ZXJ5ZGF5IiBkb2N1bWVudCBoYWQgYSBicm9rZW4gbGluay4KKyAgIChtZXJnZSAzNjZjOGQ0IHBvL2V2ZXJ5ZGF5LWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIEEgZmV3IHRlc3QgZml4ZXMuCisgICAobWVyZ2UgODgwZWY1OCBqay9uby1wZXJsLXRlc3RzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGJ1aWxkIHByb2NlZHVyZSBkaWQgbm90IGJvdGhlciBmaXhpbmcgcGVybCBhbmQgcHl0aG9uIHNjcmlwdHMKKyAgIHdoZW4gTk9fUEVSTCBhbmQgTk9fUFlUSE9OIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBjaGFuZ2VkLgorICAgKG1lcmdlIGNhMjA1MWQgamsvcmVidWlsZC1wZXJsLXNjcmlwdHMtd2l0aC1uby1wZXJsLXNldGluZy1jaGFuZ2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdXNhZ2Ugc3RyaW5nIG9mICJnaXQgbG9nIiBjb21tYW5kIHdhcyBtYXJrZWQgaW5jb3JyZWN0bHkgZm9yCisgICBsMTBuLgorICAgKG1lcmdlIGU2NmRjMGMga20vbG9nLXVzYWdlLXN0cmluZy1pMThuIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIG1pc2hhbmRsZWQgLS1mb3JtYXQ9IiUodXBzdHJlYW06dHJhY2spIiB3aGVuIGEKKyAgIGJyYW5jaCBpcyBtYXJrZWQgdG8gaGF2ZSBmb3JrZWQgZnJvbSBhIG5vbi1leGlzdGluZyBicmFuY2guCisgICAobWVyZ2UgYjYxNjBkOSByYy9mb3ItZWFjaC1yZWYtdHJhY2tpbmcgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjk2MTg2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMS50eHQKQEAgLTAsMCArMSw1MiBAQAorR2l0IHYyLjMuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMworLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgaW50ZXJhY3RpdmUgInNob3cgYSBsaXN0IGFuZCBsZXQgdGhlIHVzZXIgY2hvb3NlIGZyb20gaXQiCisgICBpbnRlcmZhY2UgImFkZCAtaSIgdXNlZCBzaG93ZWQgYW5kIHByb21wdGVkIHRvIHRoZSB1c2VyIGV2ZW4gd2hlbgorICAgdGhlIGNhbmRpZGF0ZSBsaXN0IHdhcyBlbXB0eSwgYWdhaW5zdCB3aGljaCB0aGUgb25seSAiY2hvaWNlIiB0aGUKKyAgIHVzZXIgY291bGQgaGF2ZSBtYWRlIHdhcyB0byBjaG9vc2Ugbm90aGluZy4KKworICogImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IiB1c2VkIHRvIHVuZGVyLWFsbG9jYXRlIHRoZSBtZW1vcnkKKyAgIHdoZW4gdGhlIGZpeCByZXN1bHRlZCBpbiBhIGxvbmdlciB0ZXh0IHRoYW4gdGhlIG9yaWdpbmFsIHBhdGNoLgorCisgKiAiZ2l0IGxvZyAtLWhlbHAiIHVzZWQgdG8gc2hvdyByZXYtbGlzdCBvcHRpb25zIHRoYXQgYXJlIGlycmVsZXZhbnQKKyAgIHRvIHRoZSAibG9nIiBjb21tYW5kLgorCisgKiBUaGUgZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgY29tbWl0Iiwgd2hlbiBhIG5vbi1leGlzdGluZyBhdXRob3IKKyAgIG5hbWUgd2FzIGdpdmVuIGFzIHZhbHVlIHRvIHRoZSAiLS1hdXRob3I9IiBwYXJhbWV0ZXIsIGhhcyBiZWVuCisgICByZXdvcmRlZCB0byBhdm9pZCBtaXN1bmRlcnN0YW5kaW5nLgorCisgKiBBIGJyb2tlbiBwYWNrIC5pZHggZmlsZSBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgcHJldmVudGVkIHRoZQorICAgZHVtYiBodHRwIHRyYW5zcG9ydCBmcm9tIGZldGNoaW5nIGEgZ29vZCBjb3B5IG9mIGl0IGZyb20gdGhlIG90aGVyCisgICBzaWRlLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBpbmNvcnJlY3RseSBzYWlkIHRoYXQgQyhvcHkpIGFuZCBSKGVuYW1lKSBhcmUgdGhlCisgICBvbmx5IG9uZXMgdGhhdCBjYW4gYmUgZm9sbG93ZWQgYnkgdGhlIHNjb3JlIG51bWJlciBpbiB0aGUgb3V0cHV0IGluCisgICB0aGUgLS1yYXcgZm9ybWF0LgorCisgKiBGaXggYSBtaXNzcGVsbGVkIGNvbmRpdGlvbmFsIHRoYXQgaXMgYWx3YXlzIHRydWUuCisKKyAqIENvZGUgdG8gcmVhZCBicmFuY2ggbmFtZSBmcm9tIHZhcmlvdXMgZmlsZXMgaW4gLmdpdC8gZGlyZWN0b3J5CisgICB3b3VsZCBoYXZlIG1pc2JlaGF2ZWQgaWYgdGhlIGNvZGUgdG8gd3JpdGUgdGhlbSBsZWZ0IGFuIGVtcHR5IGZpbGUuCisKKyAqIFRoZSAiZ2l0IHB1c2giIGRvY3VtZW50YXRpb24gbWFkZSB0aGUgIi0tcmVwbz08dGhlcmU+IiBvcHRpb24KKyAgIGVhc2lseSBtaXN1bmRlcnN0b29kLgorCisgKiBBZnRlciBhdHRlbXB0aW5nIGFuZCBmYWlsaW5nIGEgcGFzc3dvcmQtbGVzcyBhdXRoZW50aWNhdGlvbgorICAgKGUuZy4ga2VyYmVyb3MpLCBsaWJjVVJMIHJlZnVzZXMgdG8gZmFsbCBiYWNrIHRvIHBhc3N3b3JkIGJhc2VkCisgICBCYXNpYyBhdXRoZW50aWNhdGlvbiB3aXRob3V0IGEgYml0IG9mIGhlbHAvZW5jb3VyYWdlbWVudC4KKworICogU2V0dGluZyBkaWZmLnN1Ym1vZHVsZSB0byAnbG9nJyBtYWRlICJnaXQgZm9ybWF0LXBhdGNoIiBwcm9kdWNlCisgICBicm9rZW4gcGF0Y2hlcy4KKworICogImdpdCByZXJlcmUiIChpbnZva2VkIGludGVybmFsbHkgZnJvbSBtYW55IG1lcmd5IG9wZXJhdGlvbnMpIGRpZAorICAgbm90IGNvcnJlY3RseSBzaWduYWwgZXJyb3JzIHdoZW4gdG9sZCB0byB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZQorICAgZmlsZXMgYW5kIGZhaWxlZCB0byBkbyBzbyBmb3Igd2hhdGV2ZXIgcmVhc29uLgorCisgKiAiZ2l0IGJsYW1lIEhFQUQgLS0gbWlzc2luZyIgZmFpbGVkIHRvIGNvcnJlY3RseSBzYXkgIkhFQUQiIHdoZW4gaXQKKyAgIHRyaWVkIHRvIHNheSAiTm8gc3VjaCBwYXRoICdtaXNzaW5nJyBpbiBIRUFEIi4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjEwLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGMyZDJjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMTAudHh0CkBAIC0wLDAgKzEsMTggQEAKK0dpdCB2Mi4zLjEwIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMy45CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogeGRpZmYgY29kZSB3ZSB1c2UgdG8gZ2VuZXJhdGUgZGlmZnMgaXMgbm90IHByZXBhcmVkIHRvIGhhbmRsZQorICAgZXh0cmVtZWx5IGxhcmdlIGZpbGVzLiAgSXQgdXNlcyAiaW50IiBpbiBtYW55IHBsYWNlcywgd2hpY2ggY2FuCisgICBvdmVyZmxvdyBpZiB3ZSBoYXZlIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgbGluZXMgb3IgZXZlbiBieXRlcyBpbgorICAgb3VyIGlucHV0IGZpbGVzLCBmb3IgZXhhbXBsZS4gIENhcCB0aGUgaW5wdXQgc2l6ZSB0byBzb21ld2hlcmUKKyAgIGFyb3VuZCAxR0IgZm9yIG5vdy4KKworICogU29tZSBwcm90b2NvbHMgKGxpa2UgZ2l0LXJlbW90ZS1leHQpIGNhbiBleGVjdXRlIGFyYml0cmFyeSBjb2RlCisgICBmb3VuZCBpbiB0aGUgVVJMLiAgVGhlIFVSTHMgdGhhdCBzdWJtb2R1bGVzIHVzZSBtYXkgY29tZSBmcm9tCisgICBhcmJpdHJhcnkgc291cmNlcyAoZS5nLiwgLmdpdG1vZHVsZXMgZmlsZXMgaW4gYSByZW1vdGUKKyAgIHJlcG9zaXRvcnkpLCBhbmQgY2FuIGh1cnQgdGhvc2Ugd2hvIGJsaW5kbHkgZW5hYmxlIHJlY3Vyc2l2ZQorICAgZmV0Y2guICBSZXN0cmljdCB0aGUgYWxsb3dlZCBwcm90b2NvbHMgdG8gd2VsbCBrbm93biBhbmQgc2FmZQorICAgb25lcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0NjJlNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjIudHh0CkBAIC0wLDAgKzEsNzkgQEAKK0dpdCB2Mi4zLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjMuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJ1cGRhdGUtaW5kZXggLS1yZWZyZXNoIiB1c2VkIHRvIGxlYWsgd2hlbiBhbiBlbnRyeSBjYW5ub3QgYmUKKyAgIHJlZnJlc2hlZCBmb3Igd2hhdGV2ZXIgcmVhc29uLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiB1c2VkIHRvIGNyYXNoIHdoZW4gaXQgY291bGQgbm90IGNsb3NlIGFuZAorICAgY29uY2x1ZGUgdGhlIHJlc3VsdGluZyBwYWNrZmlsZSBjbGVhbmx5LgorCisgKiAiZ2l0IGJsYW1lIiBkaWVkLCB0cnlpbmcgdG8gZnJlZSBhbiB1bmluaXRpYWxpemVkIHBpZWNlIG9mIG1lbW9yeS4KKworICogImdpdCBtZXJnZS1maWxlIiBkaWQgbm90IHdvcmsgY29ycmVjdGx5IGluIGEgc3ViZGlyZWN0b3J5LgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBhZGQiIGZhaWxlZCB0byBzcXVhc2ggInBhdGgvdG8vLi8uL3N1Ym1vZHVsZSIgdG8KKyAgICJwYXRoL3RvL3N1Ym1vZHVsZSIuCisKKyAqIEluIHYyLjIuMCwgd2UgYnJva2UgImdpdCBwcnVuZSIgdGhhdCBydW5zIGluIGEgcmVwb3NpdG9yeSB0aGF0CisgICBib3Jyb3dzIGZyb20gYW4gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZS4KKworICogQ2VydGFpbiBvbGRlciB2aW50YWdlcyBvZiBjVVJMIGdpdmUgaXJyZWd1bGFyIG91dHB1dCBmcm9tCisgICAiY3VybC1jb25maWcgLS12ZXJudW0iLCB3aGljaCBjb25mdXNlZCBvdXIgYnVpbGQgc3lzdGVtLgorCisgKiBBbiBlYXJsaWVyIHdvcmthcm91bmQgdG8gc3F1ZWxjaCB1bmhlbHBmdWwgZGVwcmVjYXRpb24gd2FybmluZ3MKKyAgIGZyb20gdGhlIGNvbXBpbGVyIG9uIE1hYyBPU1ggdW5uZWNlc3NhcmlseSBzZXQgbWluaW11bSByZXF1aXJlZAorICAgdmVyc2lvbiBvZiB0aGUgT1MsIHdoaWNoIHRoZSB1c2VyIG1pZ2h0IHdhbnQgdG8gcmFpc2UgKG9yIGxvd2VyKQorICAgZm9yIG90aGVyIHJlYXNvbnMuCisKKyAqIExvbmdzdGFuZGluZyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWluZyBydWxlcyBoYXMgYmVlbiBhZGRlZCB0bworICAgdGhlIGRvY3VtZW50YXRpb24uCisKKyAqIFRoZSBjcmVkZW50aWFsIGhlbHBlciBmb3IgV2luZG93cyAoaW4gY29udHJpYi8pIHVzZWQgdG8gbWlzaGFuZGxlCisgICBhIHVzZXIgbmFtZSB3aXRoIGFuIGF0LXNpZ24gaW4gaXQuCisKKyAqIE9sZGVyIEdudVBHIGltcGxlbWVudGF0aW9ucyBtYXkgbm90IGNvcnJlY3RseSBpbXBvcnQgdGhlIGtleXJpbmcKKyAgIG1hdGVyaWFsIHdlIHByZXBhcmUgZm9yIHRoZSB0ZXN0cyB0byB1c2UuCisKKyAqIENsYXJpZnkgaW4gdGhlIGRvY3VtZW50YXRpb24gdGhhdCAicmVtb3RlLjxuaWNrPi5wdXNoVVJMIiBhbmQKKyAgICJyZW1vdGUuPG5pY2s+LlVSTCIgYXJlIHRoZXJlIHRvIG5hbWUgdGhlIHNhbWUgcmVwb3NpdG9yeSBhY2Nlc3NlZAorICAgdmlhIGRpZmZlcmVudCB0cmFuc3BvcnRzLCBub3QgdHdvIHNlcGFyYXRlIHJlcG9zaXRvcmllcy4KKworICogVGhlIHBhY2sgYml0bWFwIHN1cHBvcnQgZGlkIG5vdCBidWlsZCB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIEdDQy4KKworICogUmVhZGluZyBjb25maWd1cmF0aW9uIGZyb20gYSBibG9iIG9iamVjdCwgd2hlbiBpdCBlbmRzIHdpdGggYSBsb25lCisgICBDUiwgdXNlIHRvIGNvbmZ1c2UgdGhlIGNvbmZpZ3VyYXRpb24gcGFyc2VyLgorCisgKiBXZSBkaWRuJ3QgZm9ybWF0IGFuIGludGVnZXIgdGhhdCB3b3VsZG4ndCBmaXQgaW4gImludCIgYnV0IGluCisgICAidWludG1heF90IiBjb3JyZWN0bHkuCisKKyAqICJnaXQgcHVzaCAtLXNpZ25lZCIgZ2F2ZSBhbiBpbmNvcnJlY3RseSB3b3JkZWQgZXJyb3IgbWVzc2FnZSB3aGVuCisgICB0aGUgb3RoZXIgc2lkZSBkaWQgbm90IHN1cHBvcnQgdGhlIGNhcGFiaWxpdHkuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgYSByZW1vdGUtaGVscGVyIHRoYXQgY2Fubm90IHJlc3BvbmQgdG8gImxpc3QiCisgICBjb21tYW5kIGNvdWxkIG5vdCBmZXRjaCBmcm9tIGEgc3ltYm9saWMgcmVmZXJlbmNlIGUuZy4gSEVBRC4KKworICogVGhlIGluc24gc2hlZXQgImdpdCByZWJhc2UgLWkiIGNyZWF0ZXMgZGlkIG5vdCBmdWxseSBob25vcgorICAgY29yZS5hYmJyZXYgc2V0dGluZ3MuCisKKyAqIFRoZSB0ZXN0cyB0aGF0IHdhbnRlZCB0byBzZWUgdGhhdCBmaWxlIGJlY29tZXMgdW5yZWFkYWJsZSBhZnRlcgorICAgcnVubmluZyAiY2htb2QgYS1yIGZpbGUiLCBhbmQgdGhlIHRlc3RzIHRoYXQgd2FudGVkIHRvIG1ha2Ugc3VyZSBpdAorICAgaXMgbm90IHJ1biBhcyByb290LCB3ZSB1c2VkICJjYW4gd2Ugd3JpdGUgaW50byB0aGUgLyBkaXJlY3Rvcnk/IiBhcworICAgYSBjaGVhcCBzdWJzdGl0dXRlLCBidXQgb24gc29tZSBwbGF0Zm9ybXMgdGhhdCBpcyBub3QgYSBnb29kCisgICBoZXVyaXN0aWNzLiAgVGhlIHRlc3RzIGFuZCB0aGVpciBwcmVyZXF1aXNpdGVzIGhhdmUgYmVlbiB1cGRhdGVkIHRvCisgICBjaGVjayB3aGF0IHRoZXkgcmVhbGx5IHJlcXVpcmUuCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdtYWlsaW5mby5zY2lzc29ycycgd2FzIGhhcmQgdG8KKyAgIGRpc2NvdmVyIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCisgKiBDb3JyZWN0IGEgYnJlYWthZ2UgdG8gZ2l0LXN2biBhcm91bmQgdjIuMiBlcmEgdGhhdCB0cmlnZ2VycworICAgcHJlbWF0dXJlIGNsb3Npbmcgb2YgRmlsZUhhbmRsZS4KKworICogRXZlbiB0aG91Z2ggd2Ugb2ZmaWNpYWxseSBoYXZlbid0IGRyb3BwZWQgUGVybCA1Ljggc3VwcG9ydCwgdGhlCisgICBHZXRvcHQ6OkxvbmcgcGFja2FnZSB0aGF0IGNhbWUgd2l0aCBpdCBkb2VzIG5vdCBzdXBwb3J0ICItLW5vLSIKKyAgIHByZWZpeCB0byBuZWdhdGUgYSBib29sZWFuIG9wdGlvbjsgbWFudWFsbHkgYWRkIHN1cHBvcnQgdG8gaGVscAorICAgcGVvcGxlIHdpdGggb2xkZXIgR2V0b3B0OjpMb25nIHBhY2thZ2UuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MGRjNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4zLnR4dApAQCAtMCwwICsxLDM5IEBACitHaXQgdjIuMy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4zLjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIGNvcnJ1cHQgaW5wdXQgdG8gImdpdCBkaWZmIC1NIiB1c2VkIGNhdXNlIHVzIHRvIHNlZ2ZhdWx0LgorCisgKiBUaGUgYm9ycm93ZWQgY29kZSBpbiBrd3NldCBBUEkgZGlkIG5vdCBmb2xsb3cgb3VyIHVzdWFsIGNvbnZlbnRpb24KKyAgIHRvIHVzZSAidW5zaWduZWQgY2hhciIgdG8gc3RvcmUgdmFsdWVzIHRoYXQgcmFuZ2UgZnJvbSAwLTI1NS4KKworICogRGVzY3JpcHRpb24gZ2l2ZW4gYnkgImdyZXAgLWgiIGZvciBpdHMgLS1leGNsdWRlLXN0YW5kYXJkIG9wdGlvbgorICAgd2FzIHBocmFzZWQgcG9vcmx5LgorCisgKiBEb2N1bWVudGF0aW9uIGZvciAiZ2l0IHJlbW90ZSBhZGQiIG1lbnRpb25lZCAiLS10YWdzIiBhbmQKKyAgICItLW5vLXRhZ3MiIGFuZCBpdCB3YXMgbm90IGNsZWFyIHRoYXQgZmV0Y2ggZnJvbSB0aGUgcmVtb3RlIGluCisgICB0aGUgZnV0dXJlIHdpbGwgdXNlIHRoZSBkZWZhdWx0IGJlaGF2aW91ciB3aGVuIG5laXRoZXIgaXMgZ2l2ZW4KKyAgIHRvIG92ZXJyaWRlIGl0LgorCisgKiAiZ2l0IGRpZmYgLS1zaG9ydHN0YXQgLS1kaXJzdGF0PWNoYW5nZXMiIHNob3dlZCBhIGRpcnN0YXQgYmFzZWQgb24KKyAgIGxpbmVzIHRoYXQgd2FzIG5ldmVyIGFza2VkIGJ5IHRoZSBlbmQgdXNlciBpbiBhZGRpdGlvbiB0byB0aGUKKyAgIGRpcnN0YXQgdGhhdCB0aGUgdXNlciBhc2tlZCBmb3IuCisKKyAqIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgYW5kIHRoZQorICAgc3VibW9kdWxlLioudXBkYXRlIGNvbmZpZ3VyYXRpb24gd2FzIG5vdCBjbGVhcmx5IGRvY3VtZW50ZWQuCisKKyAqICJnaXQgYXBwbHkiIHdhcyBub3QgdmVyeSBjYXJlZnVsIGFib3V0IHJlYWRpbmcgZnJvbSwgcmVtb3ZpbmcsCisgICB1cGRhdGluZyBhbmQgY3JlYXRpbmcgcGF0aHMgb3V0c2lkZSB0aGUgd29ya2luZyB0cmVlICh1bmRlcgorICAgLS1pbmRleC8tLWNhY2hlZCkgb3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICh3aGVuIHVzZWQgYXMgYQorICAgcmVwbGFjZW1lbnQgZm9yIEdOVSBwYXRjaCkuCisKKyAqICJnaXQgZGFlbW9uIiBsb29rZWQgdXAgdGhlIGhvc3RuYW1lIGV2ZW4gd2hlbiAiJUNIIiBhbmQgIiVJUCIKKyAgIGludGVycG9sYXRpb25zIGFyZSBub3QgcmVxdWVzdGVkLCB3aGljaCB3YXMgdW5uZWNlc3NhcnkuCisKKyAqIFRoZSAiaW50ZXJwb2xhdGVkLXBhdGgiIG9wdGlvbiBvZiAiZ2l0IGRhZW1vbiIgaW5zZXJ0ZWQgYW55IHN0cmluZworICAgY2xpZW50IGRlY2xhcmVkIG9uIHRoZSAiaG9zdD0iIGNhcGFiaWxpdHkgcmVxdWVzdCB3aXRob3V0IGNoZWNraW5nLgorICAgU2FuaXRpemUgYW5kIGxpbWl0ICVIIGFuZCAlQ0ggdG8gYSBzYW5lciBhbmQgYSB2YWxpZCBETlMgbmFtZS4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk0YzdiOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjQudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dpdCB2Mi4zLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjMuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSAnY29sb3Iuc3RhdHVzLnVubWVyZ2VkJyBjb25maWd1cmF0aW9uIHdhcyBub3QgZGVzY3JpYmVkLgorCisgKiAiZ2l0IGxvZyAtLWRlY29yYXRlIiBkaWQgbm90IHJlc2V0IGNvbG9ycyBjb3JyZWN0bHkgYXJvdW5kIHRoZQorICAgYnJhbmNoIG5hbWVzLgorCisgKiAiZ2l0IC1DICcnIHN1YmNtZCIgcmVmdXNlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdW5saWtlCisgICAiY2QgJyciIHdoaWNoIHNpbGVudGx5IGJlaGF2ZXMgYXMgYSBuby1vcC4KKworICogImdpdCBpbWFwLXNlbmQiIGxlYXJuZWQgdG8gb3B0aW9uYWxseSB0YWxrIHdpdGggYW4gSU1BUCBzZXJ2ZXIgdmlhCisgICBsaWJjVVJMOyBiZWNhdXNlIHRoZXJlIGlzIG5vIG90aGVyIG9wdGlvbiB3aGVuIEdpdCBpcyBidWlsdCB3aXRoCisgICBOT19PUEVOU1NMIG9wdGlvbiwgdXNlIHRoYXQgY29kZXBhdGggYnkgZGVmYXVsdCB1bmRlciBzdWNoCisgICBjb25maWd1cmF0aW9uLgorCisgKiBBIHdvcmthcm91bmQgZm9yIGNlcnRhaW4gYnVpbGQgb2YgR1BHIHRoYXQgdHJpZ2dlcmVkIGZhbHNlIGJyZWFrYWdlCisgICBpbiBhIHRlc3QgaGFzIGJlZW4gYWRkZWQuCisKKyAqICJnaXQgcmViYXNlIC1pIiByZWNlbnRseSBzdGFydGVkIHRvIGluY2x1ZGUgdGhlIG51bWJlciBvZgorICAgY29tbWl0cyBpbiB0aGUgaW5zbiBzaGVldCB0byBiZSBwcm9jZXNzZWQsIGJ1dCBvbiBhIHBsYXRmb3JtCisgICB0aGF0IHByZXBlbmRzIGxlYWRpbmcgd2hpdGVzcGFjZXMgdG8gIndjIC1sIiBvdXRwdXQsIHRoZSBudW1iZXJzCisgICBhcmUgc2hvd24gd2l0aCBleHRyYSB3aGl0ZXNwYWNlcyB0aGF0IGFyZW4ndCBuZWNlc3NhcnkuCisKKyAqIFdlIGRpZCBub3QgcGFyc2UgdXNlcm5hbWUgZm9sbG93ZWQgYnkgbGl0ZXJhbCBJUHY2IGFkZHJlc3MgaW4gU1NICisgICB0cmFuc3BvcnQgVVJMcywgZS5nLiBzc2g6Ly91c2VyQFsyMDAxOmRiODo6MV06MjIvcmVwby5naXQKKyAgIGNvcnJlY3RseS4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIzMDlkYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjUudHh0CkBAIC0wLDAgKzEsNDQgQEAKK0dpdCB2Mi4zLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjMuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBwcm9tcHQgc2NyaXB0IChpbiBjb250cmliLykgZGlkIG5vdCBzaG93IHRoZSB1bnRyYWNrZWQgc2lnbgorICAgd2hlbiB3b3JraW5nIGluIGEgc3ViZGlyZWN0b3J5IHdpdGhvdXQgYW55IHVudHJhY2tlZCBmaWxlcy4KKworICogRXZlbiB0aG91Z2ggImdpdCBncmVwIC0tcXVpZXQiIGlzIHJ1biBtZXJlbHkgdG8gYXNrIGZvciB0aGUgZXhpdAorICAgc3RhdHVzLCB3ZSBzcGF3bmVkIHRoZSBwYWdlciByZWdhcmRsZXNzLiAgU3RvcCBkb2luZyB0aGF0LgorCisgKiBSZWNvbW1lbmQgZm9ybWF0LXBhdGNoIGFuZCBzZW5kLWVtYWlsIGZvciB0aG9zZSB3aG8gd2FudCB0byBzdWJtaXQKKyAgIHBhdGNoZXMgdG8gdGhpcyBwcm9qZWN0LgorCisgKiBBbiBmYWlsdXJlIGVhcmx5IGluIHRoZSAiZ2l0IGNsb25lIiB0aGF0IHN0YXJ0ZWQgY3JlYXRpbmcgdGhlCisgICB3b3JraW5nIHRyZWUgYW5kIHJlcG9zaXRvcnkgY291bGQgaGF2ZSByZXN1bHRlZCBpbiBzb21lIGRpcmVjdG9yaWVzCisgICBhbmQgZmlsZXMgbGVmdCB3aXRob3V0IGdldHRpbmcgY2xlYW5lZCB1cC4KKworICogImdpdCBmZXRjaCIgdGhhdCBmZXRjaGVzIGEgY29tbWl0IHVzaW5nIHRoZSBhbGxvdy10aXAtc2hhMS1pbi13YW50CisgICBleHRlbnNpb24gY291bGQgaGF2ZSBmYWlsZWQgdG8gZmV0Y2ggYWxsIHRoZSByZXF1ZXN0ZWQgcmVmcy4KKworICogVGhlIHNwbGl0LWluZGV4IG1vZGUgaW50cm9kdWNlZCBhdCB2Mi4zLjAtcmMwfjQxIHdhcyBicm9rZW4gaW4gdGhlCisgICBjb2RlcGF0aCB0byBwcm90ZWN0IHVzIGFnYWluc3QgYSBicm9rZW4gcmVpbXBsZW1lbnRhdGlvbiBvZiBHaXQKKyAgIHRoYXQgd3JpdGVzIGFuIGludmFsaWQgaW5kZXggd2l0aCBkdXBsaWNhdGVkIGluZGV4IGVudHJpZXMsIGV0Yy4KKworICogImdpdCBwcnVuZSIgdXNlZCB0byBsYXJnZWx5IGlnbm9yZSBicm9rZW4gcmVmcyB3aGVuIGRlY2lkaW5nIHdoaWNoCisgICBvYmplY3RzIGFyZSBzdGlsbCBiZWluZyB1c2VkLCB3aGljaCBjb3VsZCBzcHJlYWQgYW4gZXhpc3Rpbmcgc21hbGwKKyAgIGRhbWFnZSBhbmQgbWFrZSBpdCBhIGxhcmdlciBvbmUuCisKKyAqICJnaXQgdGFnIC1oIiB1c2VkIHRvIHNob3cgdGhlICItLWNvbHVtbiIgYW5kICItLXNvcnQiIG9wdGlvbnMKKyAgIHRoYXQgYXJlIGFib3V0IGxpc3RpbmcgaW4gYSB3cm9uZyBzZWN0aW9uLgorCisgKiBUaGUgdHJhbnNmZXIuaGlkZXJlZnMgc3VwcG9ydCBkaWQgbm90IHF1aXRlIHdvcmsgZm9yIHNtYXJ0LWh0dHAKKyAgIHRyYW5zcG9ydC4KKworICogVGhlIGNvZGUgdGhhdCByZWFkcyBmcm9tIHRoZSBjdGFncyBmaWxlIGluIHRoZSBjb21wbGV0aW9uIHNjcmlwdAorICAgKGluIGNvbnRyaWIvKSBkaWQgbm90IHNwZWxsICR7cGFyYW0vcGF0dGVybi9zdHJpbmd9IHN1YnN0aXR1dGlvbgorICAgY29ycmVjdGx5LCB3aGljaCBoYXBwZW5lZCB0byB3b3JrIHdpdGggYmFzaCBidXQgbm90IHdpdGggenNoLgorCisgKiBUaGUgZXhwbGFuYXRpb24gb24gInJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyIsICJwdWxsIC0tcmViYXNlPXByZXNlcnZlIiwKKyAgIGFuZCAicHVzaCAtLWZvcmNlLXdpdGgtbGVhc2UiIGluIHRoZSBkb2N1bWVudGF0aW9uIHdhcyB1bmNsZWFyLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzJmNzcwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNi50eHQKQEAgLTAsMCArMSwxMyBAQAorR2l0IHYyLjMuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMy41CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImRpZmYtaGlnaGxpZ2h0IiAoaW4gY29udHJpYi8pIHVzZWQgdG8gc2hvdyBieXRlLWJ5LWJ5dGUKKyAgIGRpZmZlcmVuY2VzLCB3aGljaCBtZWFudCB0aGF0IG11bHRpLWJ5dGUgY2hhcmFjdGVycyBjYW4gYmUgY2hvcHBlZAorICAgaW4gdGhlIG1pZGRsZS4gIEl0IGxlYXJuZWQgdG8gcGF5IGF0dGVudGlvbiB0byBjaGFyYWN0ZXIgYm91bmRhcmllcworICAgKGFzc3VtaW5nIHRoZSBVVEYtOCBwYXlsb2FkKS4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NjkxODQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy43LnR4dApAQCAtMCwwICsxLDIxIEBACitHaXQgdjIuMy43IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4zLjYKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBlYXJsaWVyIHVwZGF0ZSB0byB0aGUgcGFyc2VyIHRoYXQgZGlzc2VjdHMgYSBVUkwgYnJva2UgYW4KKyAgIGFkZHJlc3MsIGZvbGxvd2VkIGJ5IGEgY29sb24sIGZvbGxvd2VkIGJ5IGFuIGVtcHR5IHN0cmluZyAoaW5zdGVhZAorICAgb2YgdGhlIHBvcnQgbnVtYmVyKSwgZS5nLiBzc2g6Ly9leGFtcGxlLmNvbTovcGF0aC90by9yZXBvLgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBjb250YW1pbmF0ZWQgZ2xvYmFsIG5hbWVzcGFjZQorICAgYW5kIGNsb2JiZXJlZCBvbiBhIHNoZWxsIHZhcmlhYmxlICR4LgorCisgKiBUaGUgImdpdCBwdXNoIC0tc2lnbmVkIiBwcm90b2NvbCBleHRlbnNpb24gZGlkIG5vdCBsaW1pdCB3aGF0IHRoZQorICAgIm5vbmNlIiB0aGF0IGlzIGEgc2VydmVyLWNob3NlbiBzdHJpbmcgY2FuIGNvbnRhaW4gb3IgaG93IGxvbmcgaXQKKyAgIGNhbiBiZSwgd2hpY2ggd2FzIHVubmVjZXNzYXJpbHkgbGF4LiAgTGltaXQgYm90aCB0aGUgbGVuZ3RoIGFuZCB0aGUKKyAgIGFscGhhYmV0IHRvIGEgcmVhc29uYWJseSBzbWFsbCBzcGFjZSB0aGF0IGNhbiBzdGlsbCBoYXZlIGVub3VnaAorICAgZW50cm9weS4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy44LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNjcyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy44LnR4dApAQCAtMCwwICsxLDIyIEBACitHaXQgdjIuMy44IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4zLjcKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgdXN1YWwgImdpdCBkaWZmIiB3aGVuIHNlZWluZyBhIGZpbGUgdHVybmluZyBpbnRvIGEgZGlyZWN0b3J5CisgICBzaG93ZWQgYSBwYXRjaHNldCB0byByZW1vdmUgdGhlIGZpbGUgYW5kIGNyZWF0ZSBhbGwgZmlsZXMgaW4gdGhlCisgICBkaXJlY3RvcnksIGJ1dCAiZ2l0IGRpZmYgLS1uby1pbmRleCIgc2ltcGx5IHJlZnVzZWQgdG8gd29yay4gIEFsc28sCisgICB3aGVuIGFza2VkIHRvIGNvbXBhcmUgYSBmaWxlIGFuZCBhIGRpcmVjdG9yeSwgaW1pdGF0ZSBQT1NJWCAiZGlmZiIKKyAgIGFuZCBjb21wYXJlIHRoZSBmaWxlIHdpdGggdGhlIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoZQorICAgZGlyZWN0b3J5LCBpbnN0ZWFkIG9mIHJlZnVzaW5nIHRvIHJ1bi4KKworICogVGhlIGRlZmF1bHQgJEhPTUUvLmdpdGNvbmZpZyBmaWxlIGNyZWF0ZWQgdXBvbiAiZ2l0IGNvbmZpZyAtLWdsb2JhbCIKKyAgIHRoYXQgZWRpdHMgaXQgaGFkIGluY29ycmVjdGx5IHNwZWxsZWQgdXNlci5uYW1lIGFuZCB1c2VyLmVtYWlsCisgICBlbnRyaWVzIGluIGl0LgorCisgKiAiZ2l0IGNvbW1pdCAtLWRhdGU9bm93IiBvciBhbnl0aGluZyB0aGF0IHJlbGllcyBvbiBhcHByb3hpZGF0ZSBsb3N0CisgICB0aGUgZGF5bGlnaHQtc2F2aW5nLXRpbWUgb2Zmc2V0LgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjkudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyYWQzMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjkudHh0CkBAIC0wLDAgKzEsOSBAQAorR2l0IHYyLjMuOSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMy44CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQSBoYW5kZnVsIG9mIGNvZGVwYXRocyB0aGF0IHVzZWQgdG8gdXNlIGZpeGVkLXNpemVkIGFycmF5cyB0byBob2xkCisgICBwYXRobmFtZXMgaGF2ZSBiZWVuIGNvcnJlY3RlZCB0byB1c2Ugc3RyYnVmIGFuZCBvdGhlciBtZWNoYW5pc21zIHRvCisgICBhbGxvdyBsb25nZXIgcGF0aG5hbWVzIHdpdGhvdXQgZmVhcmluZyBvdmVyZmxvd3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZTY0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4wLnR4dApAQCAtMCwwICsxLDUxNCBAQAorR2l0IDIuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSB3YXJuaW5nKHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyByZWxlYXNlIGhhcyBhIGZldyBjaGFuZ2VzIGluIHRoZSB1c2VyLXZpc2libGUgb3V0cHV0IGZyb20KK1BvcmNlbGFpbiBjb21tYW5kcy4gVGhlc2UgYXJlIG5vdCBtZWFudCB0byBiZSBwYXJzZWQgYnkgc2NyaXB0cywgYnV0Cit1c2VycyBzdGlsbCBtYXkgd2FudCB0byBiZSBhd2FyZSBvZiB0aGUgY2hhbmdlczoKKworICogVGhlIG91dHB1dCBmcm9tICJnaXQgbG9nIC0tZGVjb3JhdGUiIChhbmQsIG1vcmUgZ2VuZXJhbGx5LCB0aGUgIiVkIgorICAgZm9ybWF0IHNwZWNpZmllciB1c2VkIGluIHRoZSAiLS1mb3JtYXQ9PHN0cmluZz4iIHBhcmFtZXRlciB0byB0aGUKKyAgICJnaXQgbG9nIiBmYW1pbHkgb2YgY29tbWFuZHMpIGhhcyBjaGFuZ2VkLiBJdCB1c2VkIHRvIGxpc3QgIkhFQUQiCisgICBqdXN0IGxpa2Ugb3RoZXIgYnJhbmNoZXM7IGUuZy4sCisKKyAgICAgJCBnaXQgbG9nIC0tZGVjb3JhdGUgLTEgbWFzdGVyCisgICAgIGNvbW1pdCBiZGIwZjY3ODhmYTVlM2NhY2M0MzE1ZTlmZjMxOGEyN2IyNjc2ZmY0IChIRUFELCBtYXN0ZXIpCisgICAgIC4uLgorCisgICBUaGlzIHJlbGVhc2UgY2hhbmdlcyB0aGUgb3V0cHV0IHNsaWdodGx5IHdoZW4gSEVBRCByZWZlcnMgdG8gYQorICAgYnJhbmNoIHdob3NlIG5hbWUgaXMgYWxzbyBzaG93biBpbiB0aGUgb3V0cHV0LiBUaGUgYWJvdmUgaXMgbm93CisgICBzaG93biBhczoKKworICAgICAkIGdpdCBsb2cgLS1kZWNvcmF0ZSAtMSBtYXN0ZXIKKyAgICAgY29tbWl0IGJkYjBmNjc4OGZhNWUzY2FjYzQzMTVlOWZmMzE4YTI3YjI2NzZmZjQgKEhFQUQgLT4gbWFzdGVyKQorICAgICAuLi4KKworICogVGhlIHBocmFzaW5nICJnaXQgYnJhbmNoIiB1c2VzIHRvIGRlc2NyaWJlIGEgZGV0YWNoZWQgSEVBRCBoYXMgYmVlbgorICAgdXBkYXRlZCB0byBhZ3JlZSB3aXRoIHRoZSBwaHJhc2luZyB1c2VkIGJ5ICJnaXQgc3RhdHVzIjoKKworICAgIC0gV2hlbiBIRUFEIGlzIGF0IHRoZSBzYW1lIGNvbW1pdCBhcyB3aGVuIGl0IHdhcyBvcmlnaW5hbGx5CisgICAgICBkZXRhY2hlZCwgdGhleSBub3cgYm90aCBzaG93ICJkZXRhY2hlZCBhdCA8Y29tbWl0IG9iamVjdCBuYW1lPiIuCisKKyAgICAtIFdoZW4gSEVBRCBoYXMgbW92ZWQgc2luY2UgaXQgd2FzIG9yaWdpbmFsbHkgZGV0YWNoZWQsIHRoZXkgbm93CisgICAgICBib3RoIHNob3cgImRldGFjaGVkIGZyb20gPGNvbW1pdCBvYmplY3QgbmFtZT4iLgorCisgICBQcmV2aW91c2x5LCAiZ2l0IGJyYW5jaCIgYWx3YXlzIHVzZWQgImZyb20iLgorCisKK1VwZGF0ZXMgc2luY2UgdjIuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BvcnRzCisKKyAqIE91ciBkZWZhdWx0IEkvTyBzaXplICg4IE1pQikgZm9yIGxhcmdlIGZpbGVzIHdhcyB0b28gbGFyZ2UgZm9yIHNvbWUKKyAgIHBsYXRmb3JtcyB3aXRoIHNtYWxsZXIgU1NJWkVfTUFYLCBsZWFkaW5nIHRvIHJlYWQoMikvd3JpdGUoMikKKyAgIGZhaWx1cmVzLgorCisgKiBXZSBkaWQgbm90IGNoZWNrIHRoZSBjdXJsIGxpYnJhcnkgdmVyc2lvbiBiZWZvcmUgdXNpbmcgdGhlCisgICBDVVJMT1BUX1BST1hZQVVUSCBmZWF0dXJlLCB3aGljaCBkaWQgbm90IGV4aXN0IGluIG9sZGVyIHZlcnNpb25zIG9mCisgICB0aGUgbGlicmFyeS4KKworICogV2Ugbm93IGRldGVjdCBudW1iZXIgb2YgQ1BVcyBvbiBvbGRlciBCU0QtZGVyaXZlZCBzeXN0ZW1zLgorCisgKiBQb3J0YWJpbGl0eSBmaXhlcyBhbmQgd29ya2Fyb3VuZHMgZm9yIHNoZWxsIHNjcmlwdHMgaGF2ZSBiZWVuIGFkZGVkCisgICB0byBoZWxwIEJTRC1kZXJpdmVkIHN5c3RlbXMuCisKKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIFRoZSBjb21tYW5kIHVzYWdlIGluZm8gc3RyaW5ncyBnaXZlbiBieSAiZ2l0IGNtZCAtaCIgYW5kIGluCisgICBkb2N1bWVudGF0aW9uIGhhdmUgYmVlbiB0d2Vha2VkIGZvciBjb25zaXN0ZW5jeS4KKworICogVGhlICJzeW5jIiBzdWJjb21tYW5kIG9mICJnaXQgcDQiIG5vdyBhbGxvd3MgdXNlcnMgdG8gZXhjbHVkZQorICAgc3ViZGlyZWN0b3JpZXMgbGlrZSBpdHMgImNsb25lIiBzdWJjb21tYW5kIGRvZXMuCisKKyAqICJnaXQgbG9nIC0taW52ZXJ0LWdyZXAgLS1ncmVwPVdJUCIgd2lsbCBzaG93IG9ubHkgY29tbWl0cyB0aGF0IGRvCisgICBub3QgaGF2ZSB0aGUgc3RyaW5nICJXSVAiIGluIHRoZWlyIG1lc3NhZ2VzLgorCisgKiAiZ2l0IHB1c2giIGhhcyBiZWVuIHRhdWdodCBhbiAiLS1hdG9taWMiIG9wdGlvbiB0aGF0IG1ha2VzIGEgcHVzaAorICAgdGhhdCB1cGRhdGVzIG1vcmUgdGhhbiBvbmUgcmVmIGFuICJhbGwtb3Itbm9uZSIgYWZmYWlyLgorCisgKiBFeHRlbmRpbmcgdGhlICJwdXNoIHRvIGRlcGxveSIgZmVhdHVyZSB0aGF0IHdhcyBhZGRlZCBpbiAyLjMsIHRoZQorICAgYmVoYXZpb3VyIG9mICJnaXQgcHVzaCIgd2hlbiB1cGRhdGluZyB0aGUgYnJhbmNoIHRoYXQgaXMgY2hlY2tlZAorICAgb3V0IGNhbiBub3cgYmUgdHdlYWtlZCBieSBhICJwdXNoLXRvLWNoZWNrb3V0IiBob29rLgorCisgKiBIVFRQLWJhc2VkIHRyYW5zcG9ydHMgbm93IHNlbmQgQWNjZXB0LUxhbmd1YWdlIHdoZW4gbWFraW5nCisgICByZXF1ZXN0cy4gVGhlIGxhbmd1YWdlcyB0byBhY2NlcHQgYXJlIGluZmVycmVkIGZyb20gZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlcyBvbiB0aGUgY2xpZW50IHNpZGUgKExBTkdVQUdFLCBldGMpLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIHVzZWQgdG8gYWNjZXB0IGEgbWlzdGFrZW4gInkiIChvciAieWVzIikgYXMgYW4KKyAgIGFuc3dlciB0byAiV2hhdCBlbmNvZGluZyBkbyB5b3Ugd2FudCB0byB1c2UgW1VURi04XT8iIHdpdGhvdXQKKyAgIHF1ZXN0aW9uaW5nLiBOb3cgaXQgYXNrcyBmb3IgY29uZmlybWF0aW9uIHdoZW4gdGhlIGFuc3dlciBsb29rcyB0b28KKyAgIHNob3J0IHRvIGJlIGEgdmFsaWQgZW5jb2RpbmcgbmFtZS4KKworICogV2hlbiAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXgiIGZpeGVkIHdoaXRlc3BhY2UgZXJyb3JzIGluIHRoZQorICAgY29tbW9uIGNvbnRleHQgbGluZXMsIHRoZSBjb21tYW5kIHJlcG9ydHMgdGhhdCBpdCBkaWQgc28uCisKKyAqICJnaXQgc3RhdHVzIiBub3cgYWxsb3dzIHRoZSAiLXYiIG9wdGlvbiB0byBiZSBnaXZlbiB0d2ljZSwgaW4gd2hpY2gKKyAgIGNhc2UgaXQgYWxzbyBzaG93cyB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0aGF0IGFyZSBub3QKKyAgIHN0YWdlZCB0byBiZSBjb21taXR0ZWQuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2siIHVzZWQgdG8gY2xlYW4gdXAgdGhlIGxvZyBtZXNzYWdlIGV2ZW4gd2hlbiBpdCBpcworICAgbWVyZWx5IHJlcGxheWluZyBhbiBleGlzdGluZyBjb21taXQuIEl0IG5vdyByZXBsYXlzIHRoZSBtZXNzYWdlCisgICB2ZXJiYXRpbSB1bmxlc3MgeW91IGFyZSBlZGl0aW5nIHRoZSBtZXNzYWdlIG9mIHRoZSByZXN1bHRpbmcKKyAgIGNvbW1pdC4KKworICogImdpdCBhcmNoaXZlIiBjYW4gbm93IGJlIHRvbGQgdG8gc2V0IHRoZSAndGV4dCcgYXR0cmlidXRlIGluIHRoZQorICAgcmVzdWx0aW5nIHppcCBhcmNoaXZlLgorCisgKiBPdXRwdXQgZnJvbSAiZ2l0IGxvZyAtLWRlY29yYXRlIiBub3cgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGEKKyAgIGRldGFjaGVkIEhFQUQgdnMuIGEgSEVBRCB0aGF0IHBvaW50cyBhdCBhIGJyYW5jaC4KKworICAgVGhpcyBpcyBhIHBvdGVudGlhbGx5IGJhY2t3YXJkLWluY29tcGF0aWJsZSBjaGFuZ2U7IHNlZSBhYm92ZSBmb3IKKyAgIG1vcmUgaW5mb3JtYXRpb24uCisKKyAqIFdoZW4gSEVBRCB3YXMgZGV0YWNoZWQgd2hlbiBhdCBjb21taXQgeHl6IGFuZCBoYXNuJ3QgYmVlbiBtb3ZlZAorICAgc2luY2UgaXQgd2FzIGRldGFjaGVkLCAiZ2l0IHN0YXR1cyIgd291bGQgcmVwb3J0ICJkZXRhY2hlZCBhdCB4eXoiCisgICB3aGVyZWFzICJnaXQgYnJhbmNoIiB3b3VsZCByZXBvcnQgImRldGFjaGVkIGZyb20geHl6Ii4gTm93IHRoZQorICAgb3V0cHV0IG9mICJnaXQgYnJhbmNoIiBhZ3JlZXMgd2l0aCB0aGF0IG9mICJnaXQgc3RhdHVzIi4KKworICAgVGhpcyBpcyBhIHBvdGVudGlhbGx5IGJhY2t3YXJkLWluY29tcGF0aWJsZSBjaGFuZ2U7IHNlZSBhYm92ZSBmb3IKKyAgIG1vcmUgaW5mb3JtYXRpb24uCisKKyAqICJnaXQgLUMgJycgc3ViY21kIiBub3cgd29ya3MgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IChhbmFsb2dvdXNseQorICAgdG8gImNkICcnIikgcmF0aGVyIHRoYW4gZHlpbmcgd2l0aCBhbiBlcnJvciBtZXNzYWdlLgorICAgKG1lcmdlIDZhNTM2ZTIga24vZ2l0LWNkLXRvLWVtcHR5IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHZlcnNpb25zb3J0LnByZXJlbGVhc2VTdWZmaXggY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZAorICAgdG8gc3BlY2lmeSB0aGF0LCBmb3IgZXhhbXBsZSwgdjEuMC1wcmUxIGNvbWVzIGJlZm9yZSB2MS4wLgorCisgKiBBIG5ldyAicHVzaC5mb2xsb3dUYWdzIiBjb25maWd1cmF0aW9uIHR1cm5zIHRoZSAiLS1mb2xsb3ctdGFncyIKKyAgIG9wdGlvbiBvbiBieSBkZWZhdWx0IGZvciB0aGUgImdpdCBwdXNoIiBjb21tYW5kLgorCisgKiAiZ2l0IGxvZyAtLWdyYXBoIC0tbm8td2FsayBBIEIuLi4iIGlzIGEgbm9uc2Vuc2ljYWwgY29tYmluYXRpb24gb2YKKyAgIG9wdGlvbnM6ICItLW5vLXdhbGsiIHJlcXVlc3RzIGRpc2NyZXRlIHBvaW50cyBpbiB0aGUgaGlzdG9yeSwgd2hpbGUKKyAgICItLWdyYXBoIiBhc2tzIHRvIGRyYXcgY29ubmVjdGlvbnMgYmV0d2VlbiB0aGVzZSBkaXNjcmV0ZSBwb2ludHMuCisgICBGb3JiaWQgdGhlIHVzZSBvZiB0aGVzZSBvcHRpb25zIHRvZ2V0aGVyLgorCisgKiAiZ2l0IHJldi1saXN0IC0tYmlzZWN0IC0tZmlyc3QtcGFyZW50IiBkb2VzIG5vdCB3b3JrICh5ZXQpIGFuZCBjYW4KKyAgIGV2ZW4gY2F1c2UgU0VHVjsgZm9yYmlkIGl0LiAiZ2l0IGxvZyAtLWJpc2VjdCAtLWZpcnN0LXBhcmVudCIgd291bGQKKyAgIG5vdCBiZSB1c2VmdWwgdW50aWwgImdpdCBiaXNlY3QgLS1maXJzdC1wYXJlbnQiIG1hdGVyaWFsaXplcywgc28KKyAgIGFsc28gZm9yYmlkIGl0IGZvciBub3cuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogU2xpZ2h0bHkgY2hhbmdlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTl8oKSBtYWNybyB0byBoZWxwIHVzCisgICBkZXRlY3QgbWlzdGFrZXMuCisKKyAqIFJlc3RydWN0dXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiAicmVmbG9nIGV4cGlyZSIgdG8gZml0IGJldHRlcgorICAgd2l0aCB0aGUgcmVjZW50bHkgdXBkYXRlZCByZWZlcmVuY2UgQVBJLgorCisgKiBUaGUgdHJhbnNwb3J0LWhlbHBlciBkaWQgbm90IHBhc3MgdHJhbnNwb3J0IG9wdGlvbnMgc3VjaCBhcworICAgdmVyYm9zaXR5LCBwcm9ncmVzcywgY2xvbmluZywgZXRjLiB0byBpbXBvcnQgYW5kIGV4cG9ydCBiYXNlZAorICAgaGVscGVycywgbGlrZSBpdCBkaWQgZm9yIGZldGNoIGFuZCBwdXNoIGJhc2VkIGhlbHBlcnMsIHJvYmJpbmcgdGhlbQorICAgb2YgdGhlIGNoYW5jZSB0byBob25vciB0aGUgd2lzaCBvZiB0aGUgZW5kLXVzZXJzIGJldHRlci4KKworICogVGhlIHRlc3RzIHRoYXQgd2FudGVkIHRvIHNlZSB0aGF0IGEgZmlsZSBiZWNvbWVzIHVucmVhZGFibGUgYWZ0ZXIKKyAgIHJ1bm5pbmcgImNobW9kIGEtciBmaWxlIiwgYW5kIHRoZSB0ZXN0cyB0aGF0IHdhbnRlZCB0byBtYWtlIHN1cmUKKyAgIHRoYXQgdGhleSBhcmUgbm90IHJ1biBhcyByb290LCB1c2VkICJjYW4gd2Ugd3JpdGUgaW50byB0aGUgLworICAgZGlyZWN0b3J5PyIgYXMgYSBjaGVhcCBzdWJzdGl0dXRlLiBCdXQgb24gc29tZSBwbGF0Zm9ybXMgdGhhdCBpcworICAgbm90IGEgZ29vZCBoZXVyaXN0aWMuIFRoZSB0ZXN0cyBhbmQgdGhlaXIgcHJlcmVxdWlzaXRlcyBoYXZlIGJlZW4KKyAgIHVwZGF0ZWQgdG8gY2hlY2sgd2hhdCB0aGV5IHJlYWxseSByZXF1aXJlLgorICAgKG1lcmdlIGY0MDBlNTEgamsvc2FuaXR5IGxhdGVyIHRvIG1haW50KS4KKworICogVmFyaW91cyBpc3N1ZXMgYXJvdW5kICJyZWZsb2cgZXhwaXJlIiwgZS5nLiB1c2luZyAtLXVwZGF0ZXJlZiB3aGVuCisgICBleHBpcmluZyBhIHJlZmxvZyBmb3IgYSBzeW1ib2xpYyByZWZlcmVuY2UsIGhhdmUgYmVlbiBjb3JyZWN0ZWQKKyAgIGFuZC9vciBtYWRlIHNhbmVyLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHN0cmJ1ZiBBUEkgaGFkIGJlZW4gc3BsaXQgYmV0d2VlbiB0aGUgQVBJCisgICBkb2N1bWVudGF0aW9uIGFuZCB0aGUgaGVhZGVyIGZpbGUuIENvbnNvbGlkYXRlIHRoZSBkb2N1bWVudGF0aW9uIGluCisgICBzdHJidWYuaC4KKworICogVGhlIGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9ucyBhbmQgY29udmVudGlvbnMgYXJlIG5vdyBkb2N1bWVudGVkIGluCisgICB0aGUgQVBJIG1hbnVhbCAoaW4gYXBpLWVycm9yLWhhbmRsaW5nLnR4dCkuCisKKyAqIE9wdGltaXplIGdpdGF0dHJpYnV0ZSBsb29rLXVwLCBtb3N0bHkgdXNlZnVsIGluICJnaXQgZ3JlcCIgb24gYQorICAgcHJvamVjdCB0aGF0IGRvZXMgbm90IHVzZSBtYW55IGF0dHJpYnV0ZXMsIGJ5IGF2b2lkaW5nIGl0IHdoZW4gd2UKKyAgIChzaG91bGQpIGtub3cgdGhhdCB0aGUgYXR0cmlidXRlcyBhcmUgbm90IGRlZmluZWQgaW4gdGhlIGZpcnN0CisgICBwbGFjZS4KKworICogVHlwb2ZpeCBpbiBjb21tZW50cy4KKyAgIChtZXJnZSBlZjI5NTZhIGFrL2dpdC1wbS10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZSBjbGVhbi11cC4KKyAgIChtZXJnZSAwYjg2OGYwIHNiL2hleC1vYmplY3QtbmFtZS1pcy1hdC1tb3N0LTQxLWJ5dGVzLWxvbmcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDVkMzA4NTEgZHAvcmVtb3ZlLWR1cGxpY2F0ZWQtaGVhZGVyLWluY2x1c2lvbiBsYXRlciB0byBtYWludCkuCisKKyAqIFNpbXBsaWZ5IHRoZSByZWYgdHJhbnNhY3Rpb24gQVBJIGZvciB2ZXJpZnlpbmcgdGhhdCAidGhlIHJlZiBzaG91bGQKKyAgIGJlIHBvaW50aW5nIGF0IHRoaXMgb2JqZWN0Ii4KKworICogU2ltcGxpZnkgdGhlIGNvZGUgaW4gImdpdCBkYWVtb24iIHRoYXQgcGFyc2VzIG91dCBhbmQgaG9sZHMKKyAgIGhvc3RuYW1lcyB1c2VkIGluIHJlcXVlc3QgaW50ZXJwb2xhdGlvbi4KKworICogUmVzdHJ1Y3R1cmUgdGhlICJnaXQgcHVzaCIgY29kZXBhdGggdG8gbWFrZSBpdCBlYXNpZXIgdG8gYWRkIG5ldworICAgY29uZmlndXJhdGlvbiBiaXRzLgorCisgKiBUaGUgcnVuLWNvbW1hbmQgaW50ZXJmYWNlIG1hZGUgaXQgZWFzeSB0byBtYWtlIGEgcGlwZSBmb3IgdXMgdG8KKyAgIHJlYWQgZnJvbSBhIHByb2Nlc3MsIHdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIGZpbmlzaCwgYW5kIHRoZW4KKyAgIGF0dGVtcHQgdG8gcmVhZCBpdHMgb3V0cHV0LiBCdXQgdGhpcyBwYXR0ZXJuIGNhbiBsZWFkIHRvIGRlYWRsb2NrLgorICAgU28gaW50cm9kdWNlIGEgaGVscGVyIHRvIGRvIHRoaXMgY29ycmVjdGx5IChpLmUuLCBmaXJzdCByZWFkLCBhbmQKKyAgIHRoZW4gd2FpdCB0aGUgcHJvY2VzcyB0byBmaW5pc2gpIGFuZCBhbHNvIGFkZCBjb2RlIHRvIHByZXZlbnQgc3VjaAorICAgYWJ1c2UgaW4gdGhlIHJ1bi1jb21tYW5kIGhlbHBlci4KKworICogUGVvcGxlIG9mdGVuIGZvcmdldCB0byBjaGFpbiB0aGUgY29tbWFuZHMgaW4gdGhlaXIgdGVzdCB0b2dldGhlcgorICAgd2l0aCAmJiwgbGV0dGluZyBhIGZhaWx1cmUgZnJvbSBhbiBlYXJsaWVyIGNvbW1hbmQgaW4gdGhlIHRlc3QgZ28KKyAgIHVubm90aWNlZC4gVGhlIG5ldyBHSVRfVEVTVF9DSEFJTl9MSU5UIG1lY2hhbmlzbSBhbGxvd3MgeW91IHRvCisgICBjYXRjaCBzdWNoIGEgbWlzdGFrZSBtb3JlIGVhc2lseS4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi4zCistLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjIuMyBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgdGhlIG1haW50ZW5hbmNlIHJlbGVhc2VzJworbm90ZXMgZm9yIGRldGFpbHMpLgorCisgKiAiZ2l0IGJsYW1lIEhFQUQgLS0gbWlzc2luZyIgZmFpbGVkIHRvIGNvcnJlY3RseSBzYXkgIkhFQUQiIHdoZW4gaXQKKyAgIHRyaWVkIHRvIHNheSAiTm8gc3VjaCBwYXRoICdtaXNzaW5nJyBpbiBIRUFEIi4KKyAgIChtZXJnZSBhNDY0NDJmIGprL2JsYW1lLWNvbW1pdC1sYWJlbCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmVyZXJlIiAoaW52b2tlZCBpbnRlcm5hbGx5IGZyb20gbWFueSBtZXJneSBvcGVyYXRpb25zKSBkaWQKKyAgIG5vdCBjb3JyZWN0bHkgc2lnbmFsIGVycm9ycyB3aGVuIGl0IGF0dGVtcHRlZCB0byB1cGRhdGUgdGhlIHdvcmtpbmcKKyAgIHRyZWUgZmlsZXMgYnV0IGZhaWxlZCBmb3Igd2hhdGV2ZXIgcmVhc29uLgorICAgKG1lcmdlIDg5ZWE5MDMgam4vcmVyZXJlLWZhaWwtb24tYXV0by11cGRhdGUtZmFpbHVyZSBsYXRlciB0byBtYWludCkuCisKKyAqIFNldHRpbmcgZGlmZi5zdWJtb2R1bGUgdG8gJ2xvZycgbWFkZSAiZ2l0IGZvcm1hdC1wYXRjaCIgcHJvZHVjZQorICAgYnJva2VuIHBhdGNoZXMuCisgICAobWVyZ2UgMzM5ZGU1MCBkay9mb3JtYXQtcGF0Y2gtaWdub3JlLWRpZmYtc3VibW9kdWxlIGxhdGVyIHRvIG1haW50KS4KKworICogQWZ0ZXIgYXR0ZW1wdGluZyBhbmQgZmFpbGluZyBhIHBhc3N3b3JkLWxlc3MgYXV0aGVudGljYXRpb24gKGUuZy4sCisgICBLZXJiZXJvcyksIGxpYmNVUkwgcmVmdXNlcyB0byBmYWxsIGJhY2sgdG8gcGFzc3dvcmQtYmFzZWQgQmFzaWMKKyAgIGF1dGhlbnRpY2F0aW9uIHdpdGhvdXQgYSBiaXQgb2YgaGVscC9lbmNvdXJhZ2VtZW50LgorICAgKG1lcmdlIDRkYmU2NjQgYmMvaHR0cC1mYWxsYmFjay10by1wYXNzd29yZC1hZnRlci1rcmItZmFpbHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgImdpdCBwdXNoIiBkb2N1bWVudGF0aW9uIGZvciB0aGUgIi0tcmVwbz08dGhlcmU+IiBvcHRpb24gd2FzCisgICBlYXNpbHkgbWlzdW5kZXJzdG9vZC4KKyAgIChtZXJnZSA1N2I5MmE3IG1nL3B1c2gtcmVwby1vcHRpb24tZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZSB0byByZWFkIGEgYnJhbmNoIG5hbWUgZnJvbSB2YXJpb3VzIGZpbGVzIGluIHRoZSAuZ2l0LworICAgZGlyZWN0b3J5IHdvdWxkIGhhdmUgb3ZlcnJ1biBhcnJheSBsaW1pdHMgaWYgYXNrZWQgdG8gcmVhZCBhbiBlbXB0eQorICAgZmlsZS4KKyAgIChtZXJnZSA2NmVjOTA0IGprL3N0YXR1cy1yZWFkLWJyYW5jaC1uYW1lLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFJlbW92ZSBhIHN1cGVyZmx1b3VzIGNvbmRpdGlvbmFsIHRoYXQgaXMgYWx3YXlzIHRydWUuCisgICAobWVyZ2UgOTRlZThlMiBqay9yZW1vdGUtY3VybC1hbi1hcnJheS1pbi1zdHJ1Y3QtY2Fubm90LWJlLW51bGwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgImdpdCBkaWZmIC0tcmF3IiBkb2N1bWVudGF0aW9uIGluY29ycmVjdGx5IGltcGxpZWQgdGhhdCBDKG9weSkKKyAgIGFuZCBSKGVuYW1lKSBhcmUgdGhlIG9ubHkgc3RhdHVzZXMgdGhhdCBjYW4gYmUgZm9sbG93ZWQgYnkgYSBzY29yZQorICAgbnVtYmVyLgorICAgKG1lcmdlIGFjMWMyZDkgamMvZGlmZi1mb3JtYXQtZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogQSBicm9rZW4gcGFjayAuaWR4IGZpbGUgaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5IHByZXZlbnRlZCB0aGUKKyAgIGR1bWIgaHR0cCB0cmFuc3BvcnQgZnJvbSBmZXRjaGluZyBhIGdvb2QgY29weSBvZiBpdCBmcm9tIHRoZSBvdGhlcgorICAgc2lkZS4KKyAgIChtZXJnZSA4YjljMmRkIGprL2R1bWItaHR0cC1pZHgtZmV0Y2gtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGVycm9yIG1lc3NhZ2UgZnJvbSAiZ2l0IGNvbW1pdCIsIHdoZW4gYSBub24tZXhpc3RpbmcgYXV0aG9yCisgICBuYW1lIHdhcyBnaXZlbiBhcyB2YWx1ZSB0byB0aGUgIi0tYXV0aG9yPSIgcGFyYW1ldGVyLCBoYXMgYmVlbgorICAgcmV3b3JkZWQgdG8gYXZvaWQgbWlzdW5kZXJzdGFuZGluZy4KKyAgIChtZXJnZSAxMDQ0YjFmIG1nL2NvbW1pdC1hdXRob3Itbm8tbWF0Y2gtbWFsZm9ybWVkLW1lc3NhZ2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGxvZyAtLWhlbHAiIHVzZWQgdG8gc2hvdyByZXYtbGlzdCBvcHRpb25zIHRoYXQgYXJlIGlycmVsZXZhbnQKKyAgIHRvIHRoZSAibG9nIiBjb21tYW5kLgorICAgKG1lcmdlIDNjYWIwMmQgamMvZG9jLWxvZy1yZXYtbGlzdC1vcHRpb25zIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IiB1c2VkIHRvIHVuZGVyLWFsbG9jYXRlIG1lbW9yeSB3aGVuIHRoZQorICAgZml4IHJlc3VsdGVkIGluIGEgbG9uZ2VyIHRleHQgdGhhbiB0aGUgb3JpZ2luYWwgcGF0Y2guCisgICAobWVyZ2UgNDA3YTc5MiBqYy9hcHBseS13cy1maXgtZXhwYW5kcyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBpbnRlcmFjdGl2ZSAic2hvdyBhIGxpc3QgYW5kIGxldCB0aGUgdXNlciBjaG9vc2UgZnJvbSBpdCIKKyAgIGludGVyZmFjZSB1c2VkIGJ5ICJnaXQgYWRkIC1pIiB1bm5lY2Vzc2FyaWx5IHByb21wdGVkIHRoZSB1c2VyIGV2ZW4KKyAgIHdoZW4gdGhlIGNhbmRpZGF0ZSBsaXN0IHdhcyBlbXB0eSwgYWdhaW5zdCB3aGljaCB0aGUgb25seSAiY2hvaWNlIgorICAgdGhlIHVzZXIgY291bGQgaGF2ZSBtYWRlIHdhcyB0byBjaG9vc2Ugbm90aGluZy4KKyAgIChtZXJnZSBhOWM0NjQxIGFrL2FkZC1pLWVtcHR5LWNhbmRpZGF0ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdG9kbyBsaXN0IGNyZWF0ZWQgYnkgImdpdCByZWJhc2UgLWkiIGRpZCBub3QgZnVsbHkgaG9ub3IKKyAgIGNvcmUuYWJicmV2IHNldHRpbmdzLgorICAgKG1lcmdlIGVkYjcyZDUga3MvcmViYXNlLWktYWJicmV2IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCIgb3ZlciBhIHJlbW90ZS1oZWxwZXIgdGhhdCBjYW5ub3QgcmVzcG9uZCB0byB0aGUgImxpc3QiCisgICBjb21tYW5kIGNvdWxkIG5vdCBmZXRjaCBmcm9tIGEgc3ltYm9saWMgcmVmZXJlbmNlIChlLmcuLCBIRUFEKS4KKyAgIChtZXJnZSAzM2NhZTU0IG1oL2RlcmVmLXN5bXJlZi1vdmVyLWhlbHBlci10cmFuc3BvcnQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHB1c2ggLS1zaWduZWQiIGdhdmUgYW4gaW5jb3JyZWN0bHkgd29yZGVkIGVycm9yIG1lc3NhZ2Ugd2hlbgorICAgdGhlIG90aGVyIHNpZGUgZGlkIG5vdCBzdXBwb3J0IHRoZSBjYXBhYmlsaXR5LgorCisgKiBUaGUgImdpdCBwdXNoIC0tc2lnbmVkIiBwcm90b2NvbCBleHRlbnNpb24gZGlkIG5vdCBsaW1pdCB3aGF0IHRoZQorICAgIm5vbmNlIiAoYSBzZXJ2ZXItY2hvc2VuIHN0cmluZykgY291bGQgY29udGFpbiBub3IgaG93IGxvbmcgaXQKKyAgIGNvdWxkIGJlLCB3aGljaCB3YXMgdW5uZWNlc3NhcmlseSBsYXguIExpbWl0IGJvdGggdGhlIGxlbmd0aCBhbmQKKyAgIHRoZSBhbHBoYWJldCB0byBhIHJlYXNvbmFibHkgc21hbGwgc3BhY2UgdGhhdCBjYW4gc3RpbGwgaGF2ZSBlbm91Z2gKKyAgIGVudHJvcHkuCisgICAobWVyZ2UgYWZjYjZlZSBqYy9wdXNoLWNlcnQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBjbG9iYmVyZWQgdGhlIHNoZWxsIHZhcmlhYmxlICR4CisgICBpbiB0aGUgZ2xvYmFsIHNoZWxsIG5hbWVzcGFjZS4KKyAgIChtZXJnZSA4NTJmZjFjIG1hL2Jhc2gtY29tcGxldGlvbi1sZWFraW5nLXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSBpbmNvcnJlY3RseSBmb3JtYXR0ZWQgYSAidWludG1heF90IiBpbnRlZ2VyIHRoYXQgZG9lc24ndCBmaXQgaW4KKyAgICJpbnQiLgorICAgKG1lcmdlIGQzMDZmM2QgamsvZGVjaW1hbC13aWR0aC1mb3ItdWludG1heCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHBhcnNlciB1c2VkIHRvIGJlIGNvbmZ1c2VkIHdoZW4gcmVhZGluZworICAgY29uZmlndXJhdGlvbiBmcm9tIGEgYmxvYiBvYmplY3QgdGhhdCBlbmRzIHdpdGggYSBsb25lIENSLgorICAgKG1lcmdlIDFkMDY1NWMgamsvY29uZmlnLW5vLXVuZ2V0Yy1lb2YgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgcGFjayBiaXRtYXAgc3VwcG9ydCBkaWQgbm90IGJ1aWxkIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgR0NDLgorICAgKG1lcmdlIGJkNGU4ODIgamsvcGFjay1iaXRtYXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiB3YXNuJ3QgY2xlYXIgdGhhdCAicmVtb3RlLjxuaWNrPi5wdXNoVVJMIiBhbmQKKyAgICJyZW1vdGUuPG5pY2s+LlVSTCIgYXJlIHRoZXJlIHRvIG5hbWUgdGhlIHNhbWUgcmVwb3NpdG9yeSBhY2Nlc3NlZAorICAgdmlhIGRpZmZlcmVudCB0cmFuc3BvcnRzLCBub3QgdHdvIHNlcGFyYXRlIHJlcG9zaXRvcmllcy4KKyAgIChtZXJnZSA2OTdmNjUyIGpjL3JlbW90ZS1zZXQtdXJsLWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIE9sZGVyIEdudVBHIGltcGxlbWVudGF0aW9ucyBtYXkgbm90IGNvcnJlY3RseSBpbXBvcnQgdGhlIGtleXJpbmcKKyAgIG1hdGVyaWFsIHdlIHByZXBhcmUgZm9yIHRoZSB0ZXN0cyB0byB1c2UuCisgICAobWVyZ2UgMWY5ODVkNiBjaC9uZXctZ3BnLWRyb3BzLXJmYy0xOTkxIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNyZWRlbnRpYWwgaGVscGVyIGZvciBXaW5kb3dzIChpbiBjb250cmliLykgdXNlZCB0byBtaXNoYW5kbGUKKyAgIHVzZXIgbmFtZXMgdGhhdCBjb250YWluIGFuIGF0LXNpZ24uCisgICAobWVyZ2UgMTNkMjYxZSBhdi93aW5jcmVkLXdpdGgtYXQtaW4tdXNlcm5hbWUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImRpZmYtaGlnaGxpZ2h0IiAoaW4gY29udHJpYi8pIHVzZWQgdG8gc2hvdyBieXRlLWJ5LWJ5dGUKKyAgIGRpZmZlcmVuY2VzLCB3aGljaCBjb3VsZCBjYXVzZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgdG8gYmUgY2hvcHBlZAorICAgaW4gdGhlIG1pZGRsZS4gSXQgbGVhcm5lZCB0byBwYXkgYXR0ZW50aW9uIHRvIGNoYXJhY3RlciBib3VuZGFyaWVzCisgICAoYXNzdW1pbmcgVVRGLTgpLgorICAgKG1lcmdlIDhkMDA2NjIgamsvY29sb3JzIGxhdGVyIHRvIG1haW50KS4KKworICogRG9jdW1lbnQgbG9uZ3N0YW5kaW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtaW5nIHJ1bGVzIGluCisgICBDb2RpbmdHdWlkZWxpbmVzLgorICAgKG1lcmdlIDM1ODQwYTMgamMvY29uZi12YXItZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogQW4gZWFybGllciB3b3JrYXJvdW5kIHRvIHNxdWVsY2ggdW5oZWxwZnVsIGRlcHJlY2F0aW9uIHdhcm5pbmdzCisgICBmcm9tIHRoZSBjb21waWxlciBvbiBPUyBYIHVubmVjZXNzYXJpbHkgc2V0IGEgbWluaW11bSByZXF1aXJlZAorICAgdmVyc2lvbiBvZiB0aGUgT1MsIHdoaWNoIHRoZSB1c2VyIG1pZ2h0IHdhbnQgdG8gcmFpc2UgKG9yIGxvd2VyKQorICAgZm9yIG90aGVyIHJlYXNvbnMuCisgICAobWVyZ2UgODhjMDNlYiBlcy9zcXVlbGNoLW9wZW5zc2wtd2FybmluZ3Mtb24tbWFjb3N4IGxhdGVyIHRvIG1haW50KS4KKworICogQ2VydGFpbiBvbGRlciB2aW50YWdlcyBvZiBjVVJMIGdpdmUgaXJyZWd1bGFyIG91dHB1dCBmcm9tCisgICAiY3VybC1jb25maWcgLS12ZXJudW0iLCB3aGljaCBjb25mdXNlZCBvdXIgYnVpbGQgc3lzdGVtLgorICAgKG1lcmdlIDNhZjY3OTIgdGMvY3VybC12ZXJudW0tb3V0cHV0LWJyb2tlbi1pbi03LjExIGxhdGVyIHRvIG1haW50KS4KKworICogSW4gdjIuMi4wLCB3ZSBicm9rZSAiZ2l0IHBydW5lIiB0aGF0IHJ1bnMgaW4gYSByZXBvc2l0b3J5IHRoYXQKKyAgIGJvcnJvd3MgZnJvbSBhbiBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlLgorICAgKG1lcmdlIGIwYTQyNjQgamsvcHJ1bmUtbXRpbWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBhZGQiIGZhaWxlZCB0byBzcXVhc2ggInBhdGgvdG8vLi8uL3N1Ym1vZHVsZSIgdG8KKyAgICJwYXRoL3RvL3N1Ym1vZHVsZSIuCisgICAobWVyZ2UgODE5NmU3MiBwcy9zdWJtb2R1bGUtc2FuaXRpemUtcGF0aC11cG9uLWFkZCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2UtZmlsZSIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIGludm9rZWQgaW4gYQorICAgc3ViZGlyZWN0b3J5LgorICAgKG1lcmdlIDIwNGE4ZmYgYWIvbWVyZ2UtZmlsZS1wcmVmaXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGJsYW1lIiBjb3VsZCBkaWUgdHJ5aW5nIHRvIGZyZWUgYW4gdW5pbml0aWFsaXplZCBwaWVjZSBvZgorICAgbWVtb3J5LgorICAgKG1lcmdlIGU2MDA1OTIgZXMvYmxhbWUtY29tbWl0LWluZm8tZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmYXN0LWltcG9ydCIgdXNlZCB0byBjcmFzaCB3aGVuIGl0IGNvdWxkIG5vdCBjbG9zZSBhbmQKKyAgIGZpbmFsaXplIHRoZSByZXN1bHRpbmcgcGFja2ZpbGUgY2xlYW5seS4KKyAgIChtZXJnZSA1ZTkxNWYzIGprL2Zhc3QtaW1wb3J0LWRpZS1uaWNlbHktZml4IGxhdGVyIHRvIG1haW50KS4KKworICogInVwZGF0ZS1pbmRleCAtLXJlZnJlc2giIHVzZWQgdG8gbGVhayBtZW1vcnkgd2hlbiBhbiBlbnRyeSBjb3VsZAorICAgbm90IGJlIHJlZnJlc2hlZCBmb3Igd2hhdGV2ZXIgcmVhc29uLgorICAgKG1lcmdlIGJjMWMyY2Egc2IvcGx1Zy1sZWFrLWluLW1ha2UtY2FjaGUtZW50cnkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgImludGVycG9sYXRlZC1wYXRoIiBvcHRpb24gb2YgImdpdCBkYWVtb24iIGluc2VydGVkIGFueSBzdHJpbmcKKyAgIHRoZSBjbGllbnQgZGVjbGFyZWQgb24gdGhlICJob3N0PSIgY2FwYWJpbGl0eSByZXF1ZXN0IHdpdGhvdXQKKyAgIGNoZWNraW5nLiBTYW5pdGl6ZSBhbmQgbGltaXQgJUggYW5kICVDSCB0byBhIHNhbmVyIGFuZCBhIHZhbGlkIEROUworICAgbmFtZS4KKyAgIChtZXJnZSBiNDg1MzczIGprL2RhZW1vbi1pbnRlcnBvbGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGFlbW9uIiB1bm5lY2Vzc2FyaWx5IGxvb2tlZCB1cCB0aGUgaG9zdG5hbWUgZXZlbiB3aGVuICIlQ0giCisgICBhbmQgIiVJUCIgaW50ZXJwb2xhdGlvbnMgd2VyZSBub3QgcmVxdWVzdGVkLgorICAgKG1lcmdlIGRjOGVkYzggcnMvZGFlbW9uLWludGVycG9sYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogV2UgcmVsaWVkIG9uICItLW5vLSIgcHJlZml4IGhhbmRsaW5nIGluIFBlcmwncyBHZXRvcHQ6OkxvbmcKKyAgIHBhY2thZ2UsIGV2ZW4gdGhvdWdoIHRoYXQgc3VwcG9ydCBkaWRuJ3QgZXhpc3QgaW4gUGVybCA1LjggKHdoaWNoCisgICB3ZSBzdGlsbCBzdXBwb3J0KS4gTWFudWFsbHkgYWRkIHN1cHBvcnQgdG8gaGVscCBwZW9wbGUgd2l0aCBvbGRlcgorICAgR2V0b3B0OjpMb25nIHBhY2thZ2VzLgorICAgKG1lcmdlIGY0NzE0OTQga20vc2VuZC1lbWFpbC1nZXRvcHQtbG9uZy13b3JrYXJvdW5kcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYXBwbHkiIHdhcyBub3QgdmVyeSBjYXJlZnVsIGFib3V0IHJlYWRpbmcgZnJvbSwgcmVtb3ZpbmcsCisgICB1cGRhdGluZyBhbmQgY3JlYXRpbmcgcGF0aHMgb3V0c2lkZSB0aGUgd29ya2luZyB0cmVlICh1bmRlcgorICAgLS1pbmRleC8tLWNhY2hlZCkgb3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICh3aGVuIHVzZWQgYXMgYQorICAgcmVwbGFjZW1lbnQgZm9yIEdOVSBwYXRjaCkuCisgICAobWVyZ2UgZTBkMjAxYiBqYy9hcHBseS1iZXlvbmQtc3ltbGluayBsYXRlciB0byBtYWludCkuCisKKyAqIENvcnJlY3QgYSBicmVha2FnZSBpbiBnaXQtc3ZuLCBpbnRyb2R1Y2VkIGFyb3VuZCB0aGUgdjIuMiBlcmEsIHRoYXQKKyAgIGNhbiBjYXVzZSBGaWxlSGFuZGxlcyB0byBiZSBjbG9zZWQgcHJlbWF0dXJlbHkuCisgICAobWVyZ2UgZTQyNjMxMSBldy9zdm4tbWFpbnQtZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSBkaWQgbm90IHBhcnNlIHVzZXJuYW1lcyBmb2xsb3dlZCBieSBsaXRlcmFsIElQdjYgYWRkcmVzc2VzCisgICBjb3JyZWN0bHkgaW4gU1NIIHRyYW5zcG9ydCBVUkxzOyBlLmcuLAorICAgc3NoOi8vdXNlckBbMjAwMTpkYjg6OjFdOjIyL3JlcG8uZ2l0LgorICAgKG1lcmdlIDZiNmM1ZjcgdGIvY29ubmVjdC1pcHY2LXBhcnNlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdtYWlsaW5mby5zY2lzc29ycycgd2FzIGhhcmQgdG8KKyAgIGRpc2NvdmVyIGluIHRoZSBkb2N1bWVudGF0aW9uLgorICAgKG1lcmdlIGFmYjVkZTcgbW0vYW0tYy1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGFuZCB0aGUKKyAgIHN1Ym1vZHVsZS4qLnVwZGF0ZSBjb25maWd1cmF0aW9uIHdhcyBub3QgY2xlYXJseSBkb2N1bWVudGVkLgorICAgKG1lcmdlIDVjMzFhY2YgbXMvc3VibW9kdWxlLXVwZGF0ZS1jb25maWctZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIC0tc2hvcnRzdGF0IiB1c2VkIHRvZ2V0aGVyIHdpdGggIi0tZGlyc3RhdD1jaGFuZ2VzIiBvcgorICAgIi0tZGlyc3RhdD1maWxlcyIgaW5jb3JyZWN0bHkgb3V0cHV0IGRpcnN0YXQgaW5mb3JtYXRpb24gdHdpY2UuCisgICAobWVyZ2UgYWIyNzM4OSBtay9kaWZmLXNob3J0c3RhdC1kaXJzdGF0LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBtYW5wYWdlIGZvciAiZ2l0IHJlbW90ZSBhZGQiIG1lbnRpb25lZCAiLS10YWdzIiBhbmQgIi0tbm8tdGFncyIKKyAgIGJ1dCBkaWQgbm90IGV4cGxhaW4gd2hhdCBoYXBwZW5zIGlmIG5laXRoZXIgb3B0aW9uIGlzIHByb3ZpZGVkLgorICAgKG1lcmdlIGFhYmEwYWIgbWcvZG9jLXJlbW90ZS10YWdzLW9yLW5vdCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBkZXNjcmlwdGlvbiBvZiAiLS1leGNsdWRlLXN0YW5kYXJkIG9wdGlvbiIgaW4gdGhlIG91dHB1dCBvZgorICAgImdpdCBncmVwIC1oIiB3YXMgcGhyYXNlZCBwb29ybHkuCisgICAobWVyZ2UgNzdmZGI4YSBuZC9ncmVwLWV4Y2x1ZGUtc3RhbmRhcmQtaGVscC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgcmVjZW50bHkgc3RhcnRlZCB0byBpbmNsdWRlIHRoZSBudW1iZXIgb2YgY29tbWl0cworICAgaW4gdGhlIHRvZG8gbGlzdCwgYnV0IHRoYXQgb3V0cHV0IGluY2x1ZGVkIGV4dHJhbmVvdXMgd2hpdGVzcGFjZSBvbgorICAgYSBwbGF0Zm9ybSB0aGF0IHByZXBlbmRzIGxlYWRpbmcgd2hpdGVzcGFjZXMgdG8gaXRzICJ3YyAtbCIgb3V0cHV0LgorICAgKG1lcmdlIDIxODVkM2IgZXMvcmViYXNlLWktY291bnQtdG9kbyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBib3Jyb3dlZCBjb2RlIGluIHRoZSBrd3NldCBBUEkgZGlkIG5vdCBmb2xsb3cgb3VyIHVzdWFsCisgICBjb252ZW50aW9uIHRvIHVzZSAidW5zaWduZWQgY2hhciIgdG8gc3RvcmUgdmFsdWVzIHRoYXQgcmFuZ2UgZnJvbQorICAgMC0yNTUuCisgICAobWVyZ2UgMTg5Yzg2MCBidy9rd3NldC11c2UtdW5zaWduZWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGNvcnJ1cHQgaW5wdXQgdG8gImdpdCBkaWZmIC1NIiB1c2VkIHRvIGNhdXNlIGl0IHRvIHNlZ2ZhdWx0LgorICAgKG1lcmdlIDRkNmJlMDMgamsvZGlmZmNvcmUtcmVuYW1lLWR1cGxpY2F0ZSBsYXRlciB0byBtYWludCkuCisKKyAqIENlcnRhaW4gYnVpbGRzIG9mIEdQRyB0cmlnZ2VyZWQgZmFsc2UgYnJlYWthZ2VzIGluIGEgdGVzdC4KKyAgIChtZXJnZSAzZjg4YzFiIG1nL3ZlcmlmeS1jb21taXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgbGVhcm5lZCB0byBvcHRpb25hbGx5IHRhbGsgd2l0aCBhbiBJTUFQIHNlcnZlciB2aWEKKyAgIGxpYmNVUkwuIEJlY2F1c2UgdGhlcmUgaXMgbm8gb3RoZXIgb3B0aW9uIHdoZW4gR2l0IGlzIGJ1aWx0IHdpdGgKKyAgIHRoZSBOT19PUEVOU1NMIG9wdGlvbiwgdXNlIGxpYmNVUkwgYnkgZGVmYXVsdCBpbiB0aGF0IGNhc2UuCisgICAobWVyZ2UgZGNkMDFlYSBrbS9pbWFwLXNlbmQtbGliY3VybC1vcHRpb25zIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBsb2cgLS1kZWNvcmF0ZSIgZGlkIG5vdCByZXNldCBjb2xvcnMgY29ycmVjdGx5IGFyb3VuZCB0aGUKKyAgIGJyYW5jaCBuYW1lcy4KKyAgIChtZXJnZSA1ZWU4NzU4IGpjL2RlY29yYXRlLWxlYWt5LXNlcGFyYXRvci1jb2xvciBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIHRoYXQgcmVhZHMgZnJvbSB0aGUgY3RhZ3MgZmlsZSBpbiB0aGUgY29tcGxldGlvbiBzY3JpcHQKKyAgIChpbiBjb250cmliLykgZGlkIG5vdCBzcGVsbCAke3BhcmFtL3BhdHRlcm4vc3RyaW5nfSBzdWJzdGl0dXRpb24KKyAgIGNvcnJlY3RseSwgd2hpY2ggaGFwcGVuZWQgdG8gd29yayB3aXRoIGJhc2ggYnV0IG5vdCB3aXRoIHpzaC4KKyAgIChtZXJnZSBkYjhkNzUwIGpzL2NvbXBsZXRpb24tY3RhZ3MtcGF0dGVybi1zdWJzdGl0dXRpb24tZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHRyYW5zZmVyLmhpZGVyZWZzIHN1cHBvcnQgZGlkIG5vdCBxdWl0ZSB3b3JrIGZvciBzbWFydC1odHRwCisgICB0cmFuc3BvcnQuCisgICAobWVyZ2UgOGRkZjNjYSBqay9zbWFydC1odHRwLWhpZGUtcmVmcyBsYXRlciB0byBtYWludCkuCisKKyAqIEluIHRoZSAiZ2l0IHRhZyAtaCIgb3V0cHV0LCBtb3ZlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUKKyAgICItLWNvbHVtbiIgYW5kICItLXNvcnQiIG9wdGlvbnMgdG8gdGhlICJUYWcgbGlzdGluZyBvcHRpb25zIgorICAgc2VjdGlvbi4KKyAgIChtZXJnZSBkZDA1OWM2IGprL3RhZy1oLWNvbHVtbi1pcy1hLWxpc3Rpbmctb3B0aW9uIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwcnVuZSIgdXNlZCB0byBsYXJnZWx5IGlnbm9yZSBicm9rZW4gcmVmcyB3aGVuIGRlY2lkaW5nIHdoaWNoCisgICBvYmplY3RzIGFyZSBzdGlsbCBiZWluZyB1c2VkLCB3aGljaCBjb3VsZCBjYXVzZSByZWZlcmVuY2UKKyAgIGNvcnJ1cHRpb24gdG8gbGVhZCB0byBvYmplY3QgbG9zcy4KKyAgIChtZXJnZSBlYTU2YzRlIGprL3BydW5lLXdpdGgtY29ycnVwdC1yZWZzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHNwbGl0LWluZGV4IG1vZGUgaW50cm9kdWNlZCBpbiB2Mi4zLjAtcmMwfjQxIHdhcyBicm9rZW4gaW4gdGhlCisgICBjb2RlcGF0aCB0byBwcm90ZWN0IHVzIGFnYWluc3QgYSBicm9rZW4gcmVpbXBsZW1lbnRhdGlvbiBvZiBHaXQKKyAgIHRoYXQgd3JpdGVzIGFuIGludmFsaWQgaW5kZXggd2l0aCBkdXBsaWNhdGVkIGluZGV4IGVudHJpZXMsIGV0Yy4KKyAgIChtZXJnZSAwM2YxNWE3IHRnL2ZpeC1jaGVjay1vcmRlci13aXRoLXNwbGl0LWluZGV4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCIsIHdoZW4gZmV0Y2hpbmcgYSBjb21taXQgdXNpbmcgdGhlCisgICBhbGxvdy10aXAtc2hhMS1pbi13YW50IGV4dGVuc2lvbiwgY291bGQgaGF2ZSBmYWlsZWQgdG8gZmV0Y2ggYWxsIG9mCisgICB0aGUgcmVxdWVzdGVkIHJlZnMuCisgICAobWVyZ2UgMzJkMDQ2MiBqay9mZXRjaC1wYWNrIGxhdGVyIHRvIG1haW50KS4KKworICogQW4gZmFpbHVyZSBlYXJseSBpbiB0aGUgImdpdCBjbG9uZSIgdGhhdCBzdGFydGVkIGNyZWF0aW5nIHRoZQorICAgd29ya2luZyB0cmVlIGFuZCByZXBvc2l0b3J5IGNvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gdGhlIGZhaWx1cmUgdG8KKyAgIGNsZWFuIHVwIHNvbWUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzLgorICAgKG1lcmdlIDE2ZWZmNmMgamsvY2xlYW51cC1mYWlsZWQtY2xvbmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWNvbW1lbmQgZm9ybWF0LXBhdGNoIGFuZCBzZW5kLWVtYWlsIGZvciB0aG9zZSB3aG8gd2FudCB0byBzdWJtaXQKKyAgIHBhdGNoZXMgdG8gdGhpcyBwcm9qZWN0LgorICAgKG1lcmdlIGIyNWM0NjkgamMvc3VibWl0dGluZy1wYXRjaGVzLW1lbnRpb24tc2VuZC1lbWFpbCBsYXRlciB0byBtYWludCkuCisKKyAqIERvIG5vdCBzcGF3biB0aGUgcGFnZXIgd2hlbiAiZ2l0IGdyZXAiIGlzIHJ1biB3aXRoICItLXF1aWV0Ii4KKyAgIChtZXJnZSBjMjA0OGYwIHdzL2dyZXAtcXVpZXQtbm8tcGFnZXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgcHJvbXB0IHNjcmlwdCAoaW4gY29udHJpYi8pIGRpZCBub3Qgc2hvdyB0aGUgdW50cmFja2VkIHNpZ24KKyAgIHdoZW4gd29ya2luZyBpbiBhIHN1YmRpcmVjdG9yeSB3aXRob3V0IGFueSB1bnRyYWNrZWQgZmlsZXMuCisgICAobWVyZ2UgOWJkYzUxNyBjdC9wcm9tcHQtdW50cmFja2VkLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIGVhcmxpZXIgdXBkYXRlIHRvIHRoZSBVUkwgcGFyc2VyIGJyb2tlIGFuIGFkZHJlc3MgdGhhdCBjb250YWlucworICAgYSBjb2xvbiBidXQgYW4gZW1wdHkgc3RyaW5nIGZvciB0aGUgcG9ydCBudW1iZXIsIGxpa2UKKyAgIHNzaDovL2V4YW1wbGUuY29tOi9wYXRoL3RvL3JlcG8uCisgICAobWVyZ2UgNmI2YzVmNyB0Yi9jb25uZWN0LWlwdjYtcGFyc2UtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZSBjbGVhbnVwcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorICAgKG1lcmdlIDJjZTYzZTkgcnMvc2ltcGxlLWNsZWFudXBzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzM2JhYTY5IHJqL25vLXhvcGVuLXNvdXJjZS1mb3ItY3lnd2luIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4MTdkMDNlIGpjL2RpZmYtdGVzdC11cGRhdGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlYjMyYzY2IGFrL3Q1NTE2LXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGJjZDU3Y2IgbXIvZG9jLWNsZWFuLWYtZiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMGQ2YWNjYyBtZy9kb2Mtc3RhdHVzLWNvbG9yLXNsb3QgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDUzZTUzYzcgc2cvY29tcGxldGlvbi1yZW1vdGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDhmYTc5NzUgYWsvZ2l0LWRvbmUtaGVscC1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5YTZmMTI4IHJzL2RlZmxhdGUtaW5pdC1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2Zjc1ZDQ1IHJzL3VzZS1pc3hkaWdpdCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzc2ZTRiMyBqay90ZXN0LWFubm95YW5jZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDcwMzIwNTQgbmQvZG9jLWdpdC1pbmRleC12ZXJzaW9uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlODY5YzVlIHRnL3Rlc3QtaW5kZXgtdjQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDU5OWQyMjMgamsvc2ltcGxpZnktY3N1bS1maWxlLXNoYTFmZC1jaGVjayBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjYwZDU4NSBzZy9jb21wbGV0aW9uLWdpdGNvbXAtbmwtZm9yLXJlZnMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDc3N2M1NWEgamMvcmVwb3J0LXBhdGgtZXJyb3ItdG8tZGlyIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmZGRmYWY4IHBoL3B1c2gtZG9jLWNhcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDUwZDMxZSBzcy9wdWxsLXJlYmFzZS1wcmVzZXJ2ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYzhjM2YxZCBwdC9lbnRlci1yZXBvLWNvbW1lbnQtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkN2JmYjllIGp6L2dpdHdlYi1jb25mLWRvYy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY5MDcyODIgamsvY2hlcnJ5LXBpY2stZG9jZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkM2MwODExIGl1L2ZpeC1wYXJzZS1vcHRpb25zLWgtY29tbWVudCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNmMzYjJhZiBqZy9jZ3VpZGUtd2UtY2Fubm90LWNvdW50IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyYjhiZDQ0IGprL3BhY2stY29ycnVwdGlvbi1wb3N0LW1vcnRlbSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOTU4NWNiOCBqbi9kb2MtZmFzdC1pbXBvcnQtbm8tMTYtb2N0b3B1cy1saW1pdCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNWRjZDFiMSBwcy9ncmVwLWhlbHAtYWxsLWNhbGxiYWNrLWFyZyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZjFmNGM4NCB2YS9maXgtZ2l0LXA0LXRlc3RzIGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY1YTZjNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjEudHh0CkBAIC0wLDAgKzEsNDAgQEAKK0dpdCB2Mi40LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjQKKy0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIHVzdWFsICJnaXQgZGlmZiIgd2hlbiBzZWVpbmcgYSBmaWxlIHR1cm5pbmcgaW50byBhIGRpcmVjdG9yeQorICAgc2hvd2VkIGEgcGF0Y2hzZXQgdG8gcmVtb3ZlIHRoZSBmaWxlIGFuZCBjcmVhdGUgYWxsIGZpbGVzIGluIHRoZQorICAgZGlyZWN0b3J5LCBidXQgImdpdCBkaWZmIC0tbm8taW5kZXgiIHNpbXBseSByZWZ1c2VkIHRvIHdvcmsuICBBbHNvLAorICAgd2hlbiBhc2tlZCB0byBjb21wYXJlIGEgZmlsZSBhbmQgYSBkaXJlY3RvcnksIGltaXRhdGUgUE9TSVggImRpZmYiCisgICBhbmQgY29tcGFyZSB0aGUgZmlsZSB3aXRoIHRoZSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBpbiB0aGUKKyAgIGRpcmVjdG9yeSwgaW5zdGVhZCBvZiByZWZ1c2luZyB0byBydW4uCisKKyAqIFRoZSBkZWZhdWx0ICRIT01FLy5naXRjb25maWcgZmlsZSBjcmVhdGVkIHVwb24gImdpdCBjb25maWcgLS1nbG9iYWwiCisgICB0aGF0IGVkaXRzIGl0IGhhZCBpbmNvcnJlY3RseSBzcGVsbGVkIHVzZXIubmFtZSBhbmQgdXNlci5lbWFpbAorICAgZW50cmllcyBpbiBpdC4KKworICogImdpdCBjb21taXQgLS1kYXRlPW5vdyIgb3IgYW55dGhpbmcgdGhhdCByZWxpZXMgb24gYXBwcm94aWRhdGUgbG9zdAorICAgdGhlIGRheWxpZ2h0LXNhdmluZy10aW1lIG9mZnNldC4KKworICogImdpdCBjYXQtZmlsZSBibCAkYmxvYiIgZmFpbGVkIHRvIGJhcmYgZXZlbiB0aG91Z2ggdGhlcmUgaXMgbm8KKyAgIG9iamVjdCB0eXBlIHRoYXQgaXMgImJsIi4KKworICogVGVhY2ggdGhlIGNvZGVwYXRocyB0aGF0IHJlYWQgLmdpdGlnbm9yZSBhbmQgLmdpdGF0dHJpYnV0ZXMgZmlsZXMKKyAgIHRoYXQgdGhlc2UgZmlsZXMgZW5jb2RlZCBpbiBVVEYtOCBtYXkgaGF2ZSBVVEYtOCBCT00gbWFya2VyIGF0IHRoZQorICAgYmVnaW5uaW5nOyB0aGlzIG1ha2VzIGl0IGluIGxpbmUgd2l0aCB3aGF0IHdlIGRvIGZvciBjb25maWd1cmF0aW9uCisgICBmaWxlcyBhbHJlYWR5LgorCisgKiBBY2Nlc3MgdG8gb2JqZWN0cyBpbiByZXBvc2l0b3JpZXMgdGhhdCBib3Jyb3cgZnJvbSBhbm90aGVyIG9uZSBvbiBhCisgICBzbG93IE5GUyBzZXJ2ZXIgdW5uZWNlc3NhcmlseSBnb3QgbW9yZSBleHBlbnNpdmUgZHVlIHRvIHJlY2VudCBjb2RlCisgICBiZWNvbWluZyBtb3JlIGNhdXRpb3VzIGluIGEgbmFpdmUgd2F5IG5vdCB0byBsb3NlIG9iamVjdHMgdG8gcHJ1bmluZy4KKworICogV2UgYXZvaWQgc2V0dGluZyBjb3JlLndvcmt0cmVlIHdoZW4gdGhlIHJlcG9zaXRvcnkgbG9jYXRpb24gaXMgdGhlCisgICAiLmdpdCIgZGlyZWN0b3J5IGRpcmVjdGx5IGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSwgYnV0CisgICB0aGUgY29kZSBtaXNkZXRlY3RlZCB0aGUgY2FzZSBpbiB3aGljaCB0aGUgd29ya2luZyB0cmVlIGlzIGF0IHRoZQorICAgcm9vdCBsZXZlbCBvZiB0aGUgZmlsZXN5c3RlbSAod2hpY2ggYXJndWFibHkgaXMgYSBzaWxseSB0aGluZyB0bworICAgZG8sIGJ1dCBzdGlsbCB2YWxpZCkuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZQorY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMTAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMmQ4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4xMC50eHQKQEAgLTAsMCArMSwxOCBAQAorR2l0IHYyLjQuMTAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi40LjkKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiB4ZGlmZiBjb2RlIHdlIHVzZSB0byBnZW5lcmF0ZSBkaWZmcyBpcyBub3QgcHJlcGFyZWQgdG8gaGFuZGxlCisgICBleHRyZW1lbHkgbGFyZ2UgZmlsZXMuICBJdCB1c2VzICJpbnQiIGluIG1hbnkgcGxhY2VzLCB3aGljaCBjYW4KKyAgIG92ZXJmbG93IGlmIHdlIGhhdmUgYSB2ZXJ5IGxhcmdlIG51bWJlciBvZiBsaW5lcyBvciBldmVuIGJ5dGVzIGluCisgICBvdXIgaW5wdXQgZmlsZXMsIGZvciBleGFtcGxlLiAgQ2FwIHRoZSBpbnB1dCBzaXplIHRvIHNvbWV3aGVyZQorICAgYXJvdW5kIDFHQiBmb3Igbm93LgorCisgKiBTb21lIHByb3RvY29scyAobGlrZSBnaXQtcmVtb3RlLWV4dCkgY2FuIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUKKyAgIGZvdW5kIGluIHRoZSBVUkwuICBUaGUgVVJMcyB0aGF0IHN1Ym1vZHVsZXMgdXNlIG1heSBjb21lIGZyb20KKyAgIGFyYml0cmFyeSBzb3VyY2VzIChlLmcuLCAuZ2l0bW9kdWxlcyBmaWxlcyBpbiBhIHJlbW90ZQorICAgcmVwb3NpdG9yeSksIGFuZCBjYW4gaHVydCB0aG9zZSB3aG8gYmxpbmRseSBlbmFibGUgcmVjdXJzaXZlCisgICBmZXRjaC4gIFJlc3RyaWN0IHRoZSBhbGxvd2VkIHByb3RvY29scyB0byB3ZWxsIGtub3duIGFuZCBzYWZlCisgICBvbmVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMTEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMzM2MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4xMS50eHQKQEAgLTAsMCArMSwxMSBAQAorR2l0IHYyLjQuMTEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi40LjEwCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEJ1Z2ZpeCBwYXRjaGVzIHdlcmUgYmFja3BvcnRlZCBmcm9tIHRoZSAnbWFzdGVyJyBmcm9udCB0byBwbHVnIGhlYXAKKyAgIGNvcnJ1cHRpb24gaG9sZXMsIHRvIGNhdGNoIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIGNvbXB1dGF0aW9uIG9mCisgICBwYXRobmFtZSBsZW5ndGhzLCBhbmQgdG8gZ2V0IHJpZCBvZiB0aGUgbmFtZV9wYXRoIEFQSS4gIEJvdGggb2YKKyAgIHRoZXNlIHdvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gd3JpdGluZyBvdmVyIGFuIHVuZGVyLWFsbG9jYXRlZCBidWZmZXIKKyAgIHdoZW4gZm9ybXVsYXRpbmcgcGF0aG5hbWVzIHdoaWxlIHRyZWUgdHJhdmVyc2FsLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMTIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMTVmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4xMi50eHQKQEAgLTAsMCArMSwxMiBAQAorR2l0IHYyLjQuMTIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi40LjExCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQtc2hlbGwiIHJlamVjdHMgYSByZXF1ZXN0IHRvIHNlcnZlIGEgcmVwb3NpdG9yeSB3aG9zZSBuYW1lCisgICBiZWdpbnMgd2l0aCBhIGRhc2gsIHdoaWNoIG1ha2VzIGl0IG5vIGxvbmdlciBwb3NzaWJsZSB0byBnZXQgaXQKKyAgIGNvbmZ1c2VkIGludG8gc3Bhd25pbmcgc2VydmljZSBwcm9ncmFtcyBsaWtlICJnaXQtdXBsb2FkLXBhY2siIHdpdGgKKyAgIGFuIG9wdGlvbiBsaWtlICItLWhlbHAiLCB3aGljaCBpbiB0dXJuIHdvdWxkIHNwYXduIGFuIGludGVyYWN0aXZlCisgICBwYWdlciwgaW5zdGVhZCBvZiB3b3JraW5nIHdpdGggdGhlIHJlcG9zaXRvcnkgdXNlciBhc2tlZCB0byBhY2Nlc3MKKyAgIChpLmUuIHRoZSBvbmUgd2hvc2UgbmFtZSBpcyAiLS1oZWxwIikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MGNkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4yLnR4dApAQCAtMCwwICsxLDQ1IEBACitHaXQgdjIuNC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi40LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkb2xkIC0tbm90IC0tYWxsIiB0byBzZWUgaWYgZXZlcnl0aGluZyB0aGF0CisgICBpcyByZWFjaGFibGUgZnJvbSAkb2xkIGlzIGFscmVhZHkgY29ubmVjdGVkIHRvIHRoZSBleGlzdGluZyByZWZzCisgICB3YXMgdmVyeSBpbmVmZmljaWVudC4KKworICogImhhc2gtb2JqZWN0IC0tbGl0ZXJhbGx5IiBpbnRyb2R1Y2VkIGluIHYyLjIgd2FzIG5vdCBwcmVwYXJlZCB0bworICAgdGFrZSBhIHJlYWxseSBsb25nIG9iamVjdCB0eXBlIG5hbWUuCisKKyAqICJnaXQgcmViYXNlIC0tcXVpZXQiIHdhcyBub3QgcXVpdGUgcXVpZXQgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvCisgICBkby4KKworICogVGhlIGNvbXBsZXRpb24gZm9yICJsb2cgLS1kZWNvcmF0ZT0iIHBhcmFtZXRlciB2YWx1ZSB3YXMgaW5jb3JyZWN0LgorCisgKiAiZmlsdGVyLWJyYW5jaCIgY29ycnVwdGVkIGNvbW1pdCBsb2cgbWVzc2FnZSB0aGF0IGVuZHMgd2l0aCBhbgorICAgaW5jb21wbGV0ZSBsaW5lIG9uIHBsYXRmb3JtcyB3aXRoIHNvbWUgInNlZCIgaW1wbGVtZW50YXRpb25zIHRoYXQKKyAgIG11bmdlIHN1Y2ggYSBsaW5lLiAgV29yayBpdCBhcm91bmQgYnkgYXZvaWRpbmcgdG8gdXNlICJzZWQiLgorCisgKiAiZ2l0IGRhZW1vbiIgZmFpbHMgdG8gYnVpbGQgZnJvbSB0aGUgc291cmNlIHVuZGVyIE5PX0lQVjYKKyAgIGNvbmZpZ3VyYXRpb24gKHJlZ3Jlc3Npb24gaW4gMi40KS4KKworICogImdpdCBzdGFzaCBwb3AvYXBwbHkiIGZvcmdvdCB0byBtYWtlIHN1cmUgdGhhdCBub3QganVzdCB0aGUgd29ya2luZworICAgdHJlZSBpcyBjbGVhbiBidXQgYWxzbyB0aGUgaW5kZXggaXMgY2xlYW4uIFRoZSBsYXR0ZXIgaXMgaW1wb3J0YW50CisgICBhcyBhIHN0YXNoIGFwcGxpY2F0aW9uIGNhbiBjb25mbGljdCBhbmQgdGhlIGluZGV4IHdpbGwgYmUgdXNlZCBmb3IKKyAgIGNvbmZsaWN0IHJlc29sdXRpb24uCisKKyAqIFdlIGhhdmUgcHJlcGVuZGVkICRHSVRfRVhFQ19QQVRIIGFuZCB0aGUgcGF0aCAiZ2l0IiBpcyBpbnN0YWxsZWQgaW4KKyAgICh0eXBpY2FsbHkgIi91c3IvYmluIikgdG8gJFBBVEggd2hlbiBpbnZva2luZyBzdWJwcm9ncmFtcyBhbmQgaG9va3MKKyAgIGZvciBhbG1vc3QgZXRlcm5pdHksIGJ1dCB0aGUgb3JpZ2luYWwgdXNlIGNhc2UgdGhlIGxhdHRlciB0cmllZCB0bworICAgc3VwcG9ydCB3YXMgc2VtaS1ib2d1cyAoaS5lLiBpbnN0YWxsIGdpdCB0byAvb3B0L2Zvby9naXQgYW5kIHJ1biBpdAorICAgd2l0aG91dCBoYXZpbmcgL29wdC9mb28gb24gJFBBVEgpLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBpdCBoYXMKKyAgIGJlY29tZSBsZXNzIGFuZCBsZXNzIHJlbGV2YW50IGFzIEdpdCBncmV3IG1vcmUgbWFpbnN0cmVhbSAoaS5lLiB0aGUKKyAgIHVzZXJzIHdvdWxkIF93YW50XyB0byBoYXZlIGl0IG9uIHRoZWlyICRQQVRIKS4gIFN0b3AgcHJlcGVuZGluZyB0aGUKKyAgIHBhdGggaW4gd2hpY2ggImdpdCIgaXMgaW5zdGFsbGVkIHRvIHVzZXJzJyAkUEFUSCwgYXMgdGhhdCB3b3VsZAorICAgaW50ZXJmZXJlIHRoZSBjb21tYW5kIHNlYXJjaCBvcmRlciBwZW9wbGUgZGVwZW5kIG9uIChlLmcuIHRoZXkgbWF5CisgICBub3QgbGlrZSB2ZXJzaW9ucyBvZiBwcm9ncmFtcyB0aGF0IGFyZSB1bnJlbGF0ZWQgdG8gR2l0IGluIC91c3IvYmluCisgICBhbmQgd2FudCB0byBvdmVycmlkZSB0aGVtIGJ5IGhhdmluZyBkaWZmZXJlbnQgb25lcyBpbiAvdXNyL2xvY2FsL2JpbgorICAgYW5kIGhhdmUgdGhlIGxhdHRlciBkaXJlY3RvcnkgZWFybGllciBpbiB0aGVpciAkUEFUSCkuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZQorY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjJlOTMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMy50eHQKQEAgLTAsMCArMSw3NiBAQAorR2l0IHYyLjQuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNC4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogRXJyb3IgbWVzc2FnZXMgZnJvbSAiZ2l0IGJyYW5jaCIgY2FsbGVkIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBhcworICAgInJlbW90ZSBicmFuY2hlcyIuCisKKyAqICJnaXQgcmVyZXJlIGZvcmdldCIgaW4gYSByZXBvc2l0b3J5IHdpdGhvdXQgcmVyZXJlIGVuYWJsZWQgZ2F2ZSBhCisgICBjcnlwdGljIGVycm9yIG1lc3NhZ2U7IGl0IHNob3VsZCBiZSBhIHNpbGVudCBuby1vcCBpbnN0ZWFkLgorCisgKiAiZ2l0IHB1bGwgLS1sb2ciIGFuZCAiZ2l0IHB1bGwgLS1uby1sb2ciIHdvcmtlZCBhcyBleHBlY3RlZCwgYnV0CisgICAiZ2l0IHB1bGwgLS1sb2c9MjAiIGRpZCBub3QuCisKKyAqIFRoZSBwdWxsLmZmIGNvbmZpZ3VyYXRpb24gd2FzIHN1cHBvc2VkIHRvIG92ZXJyaWRlIHRoZSBtZXJnZS5mZgorICAgY29uZmlndXJhdGlvbiwgYnV0IGl0IGRpZG4ndC4KKworICogVGhlIGNvZGUgdG8gcmVhZCBwYWNrLWJpdG1hcCB3YW50ZWQgdG8gYWxsb2NhdGUgYSBmZXcgaHVuZHJlZAorICAgcG9pbnRlcnMgdG8gYSBzdHJ1Y3R1cmUsIGJ1dCBieSBtaXN0YWtlIGFsbG9jYXRlZCBhbmQgbGVha2VkIG1lbW9yeQorICAgZW5vdWdoIHRvIGhvbGQgdGhhdCBtYW55IGFjdHVhbCBzdHJ1Y3R1cmVzLiAgQ29ycmVjdCB0aGUgYWxsb2NhdGlvbgorICAgc2l6ZSBhbmQgYWxzbyBoYXZlIGl0IG9uIHN0YWNrLCBhcyBpdCBpcyBzbWFsbCBlbm91Z2guCisKKyAqIFZhcmlvdXMgZG9jdW1lbnRhdGlvbiBtYXJrLXVwIGZpeGVzIHRvIG1ha2UgdGhlIG91dHB1dCBtb3JlCisgICBjb25zaXN0ZW50IGluIGdlbmVyYWwgYW5kIGFsc28gbWFrZSBBc2NpaURvY3RvciAoYW4gYWx0ZXJuYXRpdmUKKyAgIGZvcm1hdHRlcikgaGFwcGllci4KKworICogImdpdCBidW5kbGUgdmVyaWZ5IiBkaWQgbm90IGRpYWdub3NlIGV4dHJhIHBhcmFtZXRlcnMgb24gdGhlCisgICBjb21tYW5kIGxpbmUuCisKKyAqIE11bHRpLXJlZiB0cmFuc2FjdGlvbiBzdXBwb3J0IHdlIG1lcmdlZCBhIGZldyByZWxlYXNlcyBhZ28KKyAgIHVubmVjZXNzYXJpbHkga2VwdCBtYW55IGZpbGUgZGVzY3JpcHRvcnMgb3Blbiwgcmlza2luZyB0byBmYWlsIHdpdGgKKyAgIHJlc291cmNlIGV4aGF1c3Rpb24uCisKKyAqIFRoZSByZWYgQVBJIGRpZCBub3QgaGFuZGxlIGNhc2VzIHdoZXJlICdyZWZzL2hlYWRzL3h5enp5L2Zyb3R6JyBpcworICAgcmVtb3ZlZCBhdCB0aGUgc2FtZSB0aW1lIGFzICdyZWZzL2hlYWRzL3h5enp5JyBpcyBhZGRlZCAob3IgdmljZQorICAgdmVyc2EpIHZlcnkgd2VsbC4KKworICogVGhlICJsb2cgLS1kZWNvcmF0ZSIgZW5oYW5jZW1lbnQgaW4gR2l0IDIuNCB0aGF0IHNob3dzIHRoZSBjb21taXQKKyAgIGF0IHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIGUuZy4gIkhFQUQgLT4gbWFzdGVyIiwgZGlkIG5vdAorICAgd29yayB3aXRoIC0tZGVjb3JhdGU9ZnVsbC4KKworICogVGhlcmUgd2FzIGEgY29tbWVudGVkLW91dCAoaW5zdGVhZCBvZiBiZWluZyBtYXJrZWQgdG8gZXhwZWN0CisgICBmYWlsdXJlKSB0ZXN0IHRoYXQgZG9jdW1lbnRlZCBhIGJyZWFrYWdlIHRoYXQgd2FzIGZpeGVkIHNpbmNlIHRoZQorICAgdGVzdCB3YXMgd3JpdHRlbjsgdHVybiBpdCBpbnRvIGEgcHJvcGVyIHRlc3QuCisKKyAqIGNvcmUuZXhjbHVkZXNmaWxlIChkZWZhdWx0aW5nIHRvICRYREdfSE9NRS9naXQvaWdub3JlKSBpcyBzdXBwb3NlZAorICAgdG8gYmUgb3ZlcnJpZGRlbiBieSByZXBvc2l0b3J5LXNwZWNpZmljIC5naXQvaW5mby9leGNsdWRlIGZpbGUsIGJ1dAorICAgdGhlIG9yZGVyIHdhcyBzd2FwcGVkIGZyb20gdGhlIGJlZ2lubmluZy4gVGhpcyBiZWxhdGVkbHkgZml4ZXMgaXQuCisKKyAqIFRoZSBjb25uZWN0aW9uIGluaXRpYXRpb24gY29kZSBmb3IgInNzaCIgdHJhbnNwb3J0IHRyaWVkIHRvIGFic29yYgorICAgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc3RvY2sgInNzaCIgYW5kIFB1dHR5LXN1cHBsaWVkICJwbGluayIgYW5kCisgICBpdHMgZGVyaXZhdGl2ZXMsIGJ1dCB0aGUgbG9naWMgdG8gdGVsbCB0aGF0IHdlIGFyZSB1c2luZyAicGxpbmsiCisgICB2YXJpYW50cyB3ZXJlIHRvbyBsb29zZSBhbmQgZmFsc2VseSB0cmlnZ2VyZWQgd2hlbiAicGxpbmsiIGFwcGVhcmVkCisgICBhbnl3aGVyZSBpbiB0aGUgcGF0aCAoZS5nLiAiL2hvbWUvbWUvYmluL3VwbGluay9zc2giKS4KKworICogImdpdCByZWJhc2UgLWkiIG1vdmVkIHRoZSAiY3VycmVudCIgY29tbWFuZCBmcm9tICJ0b2RvIiB0byAiZG9uZSIgYQorICAgYml0IHRvbyBwcmVtYXR1cmVseSwgbG9zaW5nIGEgc3RlcCB3aGVuIGEgInBpY2siIGRpZCBub3QgZXZlbiBzdGFydC4KKworICogImdpdCBhZGQgLWUiIGRpZCBub3QgYWxsb3cgdGhlIHVzZXIgdG8gYWJvcnQgdGhlIG9wZXJhdGlvbiBieQorICAga2lsbGluZyB0aGUgZWRpdG9yLgorCisgKiBHaXQgMi40IGJyb2tlIHNldHRpbmcgdmVyYm9zaXR5IGFuZCBwcm9ncmVzcyBsZXZlbHMgb24gImdpdCBjbG9uZSIKKyAgIHdpdGggbmF0aXZlIHRyYW5zcG9ydHMuCisKKyAqIFNvbWUgdGltZSBhZ28sICJnaXQgYmxhbWUiIChpbmNvcnJlY3RseSkgbG9zdCB0aGUgY29udmVydF90b19naXQoKQorICAgY2FsbCB3aGVuIHN5bnRoZXNpemluZyBhIGZha2UgInRpcCIgY29tbWl0IHRoYXQgcmVwcmVzZW50cyB0aGUKKyAgIHN0YXRlIGluIHRoZSB3b3JraW5nIHRyZWUsIHdoaWNoIGJyb2tlIGZvbGtzIHdobyByZWNvcmQgdGhlIGhpc3RvcnkKKyAgIHdpdGggTEYgbGluZSBlbmRpbmcgdG8gbWFrZSB0aGVpciBwcm9qZWN0IHBvcnRhYmxlIGFjcm9zcworICAgcGxhdGZvcm1zIHdoaWxlIHRlcm1pbmF0aW5nIGxpbmVzIGluIHRoZWlyIHdvcmtpbmcgdHJlZSBmaWxlcyB3aXRoCisgICBDUkxGIGZvciB0aGVpciBwbGF0Zm9ybS4KKworICogQ29kZSBjbGVhbi11cCBmb3IgeGRnIGNvbmZpZ3VyYXRpb24gcGF0aCBzdXBwb3J0LgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFjY2QwMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjQudHh0CkBAIC0wLDAgKzEsMzUgQEAKK0dpdCB2Mi40LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjQuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGwxMG4gdXBkYXRlcyBmb3IgR2VybWFuLgorCisgKiBBbiBlYXJsaWVyIGxlYWtmaXggdG8gYml0bWFwIHRlc3RpbmcgY29kZSB3YXMgaW5jb21wbGV0ZS4KKworICogImdpdCBjbGVhbiBwYXRoc3BlYy4uLiIgdHJpZWQgdG8gbHN0YXQoMikgYW5kIGNvbXBsYWluIGV2ZW4gZm9yCisgICBwYXRocyBvdXRzaWRlIHRoZSBnaXZlbiBwYXRoc3BlYy4KKworICogQ29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBIVFRQIHNlcnZlciBhbmQgaHR0cF9iYWNrZW5kIHByb2Nlc3MgY2FuCisgICBsZWFkIHRvIGEgZGVhZC1sb2NrIHdoZW4gcmVsYXlpbmcgYSBsYXJnZSByZWYgbmVnb3RpYXRpb24gcmVxdWVzdC4KKyAgIERpYWdub3NlIHRoZSBzaXR1YXRpb24gYmV0dGVyLCBhbmQgbWl0aWdhdGUgaXQgYnkgcmVhZGluZyBzdWNoIGEKKyAgIHJlcXVlc3QgZmlyc3QgaW50byBjb3JlICh0byBhIHJlYXNvbmFibGUgbGltaXQpLgorCisgKiBUaGUgY2xlYW4vc211ZGdlIGludGVyZmFjZSBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIGZpbHRlcmluZyBhbgorICAgZW1wdHkgY29udGVudHMgKGZhaWxlZCBhbmQgdGhlbiBwYXNzZWQgdGhlIGVtcHR5IGlucHV0IHRocm91Z2gpLgorICAgSXQgY2FuIGJlIGFyZ3VlZCB0aGF0IGEgZmlsdGVyIHRoYXQgcHJvZHVjZXMgYW55dGhpbmcgYnV0IGVtcHR5IGZvcgorICAgYW4gZW1wdHkgaW5wdXQgaXMgbm9uc2Vuc2UsIGJ1dCBpZiB0aGUgdXNlciB3YW50cyB0byBkbyBzdHJhbmdlCisgICB0aGluZ3MsIHRoZW4gd2h5IG5vdD8KKworICogTWFrZSAiZ2l0IHN0YXNoIHNvbWV0aGluZyAtLWhlbHAiIGVycm9yIG91dCwgc28gdGhhdCB1c2VycyBjYW4KKyAgIHNhZmVseSBzYXkgImdpdCBzdGFzaCBkcm9wIC0taGVscCIuCisKKyAqIENsYXJpZnkgdGhhdCAibG9nIC0tcmF3IiBhbmQgImxvZyAtLWZvcm1hdD1yYXciIGFyZSB1bnJlbGF0ZWQKKyAgIGNvbmNlcHRzLgorCisgKiBDYXRjaCBhIHByb2dyYW1tZXIgbWlzdGFrZSB0byBmZWVkIGEgcG9pbnRlciBub3QgYW4gYXJyYXkgdG8KKyAgIEFSUkFZX1NJWkUoKSBtYWNybywgYnkgdXNpbmcgYSBjb3VwbGUgb2YgR0NDIGV4dGVuc2lvbnMuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZQorY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjgyOTdjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuNS50eHQKQEAgLTAsMCArMSwyOCBAQAorR2l0IHYyLjQuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNC40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIHNldHVwIGNvZGUgdXNlZCB0byBkaWUgd2hlbiBjb3JlLmJhcmUgYW5kIGNvcmUud29ya3RyZWUgYXJlIHNldAorICAgaW5jb25zaXN0ZW50bHksIGV2ZW4gZm9yIGNvbW1hbmRzIHRoYXQgZG8gbm90IG5lZWQgd29ya2luZyB0cmVlLgorCisgKiBUaGVyZSB3YXMgYSBkZWFkIGNvZGUgdGhhdCB1c2VkIHRvIGhhbmRsZSAiZ2l0IHB1bGwgLS10YWdzIiBhbmQKKyAgIHNob3cgc3BlY2lhbC1jYXNlZCBlcnJvciBtZXNzYWdlLCB3aGljaCB3YXMgbWFkZSBpcnJlbGV2YW50IHdoZW4KKyAgIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIG9wdGlvbiBjaGFuZ2VkIGJhY2sgaW4gR2l0IDEuOSBkYXlzLgorCisgKiAiY29sb3IuZGlmZi5wbGFpbiIgd2FzIGEgbWlzbm9tZXI7IGdpdmUgaXQgJ2NvbG9yLmRpZmYuY29udGV4dCcgYXMKKyAgIGEgbW9yZSBsb2dpY2FsIHN5bm9ueW0uCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHJlYWRlci93cml0ZXIgdXNlcyBtbWFwKDIpIGludGVyZmFjZSB0byBhY2Nlc3MKKyAgIHRoZSBmaWxlczsgd2hlbiB3ZSBmaW5kIGEgZGlyZWN0b3J5LCBpdCBiYXJmZWQgd2l0aCAiT3V0IG9mIG1lbW9yeT8iLgorCisgKiBSZWNlbnQgImdpdCBwcnVuZSIgdHJhdmVyc2VzIHlvdW5nIHVucmVhY2hhYmxlIG9iamVjdHMgdG8gc2FmZWtlZXAKKyAgIG9sZCBvYmplY3RzIGluIHRoZSByZWFjaGFiaWxpdHkgY2hhaW4gZnJvbSB0aGVtLCB3aGljaCBzb21ldGltZXMKKyAgIHNob3dlZCB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlcyB0aGF0IGFyZSBhbGFybWluZy4KKworICogImdpdCByZWJhc2UgLWkiIGZpcmVkIHBvc3QtcmV3cml0ZSBob29rIHdoZW4gaXQgc2hvdWxkbid0IChuYW1lbHksCisgICB3aGVuIGl0IHdhcyB0b2xkIHRvIHN0b3Agc2VxdWVuY2luZyB3aXRoICdleGVjJyBpbnNuKS4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1M2YzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC42LnR4dApAQCAtMCwwICsxLDIzIEBACitHaXQgdjIuNC42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi40LjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGZldGNoIC0tZGVwdGg9PGRlcHRoPiIgYW5kICJnaXQgY2xvbmUgLS1kZXB0aD08ZGVwdGg+IiBpc3N1ZWQKKyAgIGEgc2hhbGxvdyB0cmFuc2ZlciByZXF1ZXN0IGV2ZW4gdG8gYW4gdXBsb2FkLXBhY2sgdGhhdCBkb2VzIG5vdAorICAgc3VwcG9ydCB0aGUgY2FwYWJpbGl0eS4KKworICogImdpdCBmc2NrIiB1c2VkIHRvIGlnbm9yZSBtaXNzaW5nIG9yIGludmFsaWQgb2JqZWN0cyByZWNvcmRlZCBpbiByZWZsb2cuCisKKyAqIFRoZSB0Y3NoIGNvbXBsZXRpb24gd3JpdGVzIGEgYmFzaCBzY3JpcHRsZXQgYnV0IHRoYXQgd291bGQgaGF2ZQorICAgZmFpbGVkIGZvciB1c2VycyB3aXRoIG5vY2xvYmJlciBzZXQuCisKKyAqIFJlY2VudCBNYWMgT1MgWCB1cGRhdGVzIGJyZWFrcyB0aGUgbG9naWMgdG8gZGV0ZWN0IHRoYXQgdGhlIG1hY2hpbmUKKyAgIGlzIG9uIHRoZSBBQyBwb3dlciBpbiB0aGUgc2FtcGxlIHByZS1hdXRvLWdjIHNjcmlwdC4KKworICogImdpdCBmb3JtYXQtcGF0Y2ggLS1pZ25vcmUtaWYtdXBzdHJlYW0gQS4uQiIgZGlkIG5vdCBsaWtlIHRvIGJlIGZlZAorICAgdGFncyBhcyBib3VuZGFyeSBjb21taXRzLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhYzQxMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjcudHh0CkBAIC0wLDAgKzEsNTMgQEAKK0dpdCB2Mi40LjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjQuNgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEEgbWlub3IgcmVncmVzc2lvbiB0byAiZ2l0IGZzY2siIGluIHYyLjIgZXJhIHdhcyBmaXhlZDsgaXQKKyAgIGNvbXBsYWluZWQgYWJvdXQgYSBib2R5LWxlc3MgdGFnIG9iamVjdCB3aGVuIGl0IGxhY2tlZCBhCisgICBzZXBhcmF0b3IgZW1wdHkgbGluZSBhZnRlciBpdHMgaGVhZGVyIHRvIHNlcGFyYXRlIGl0IHdpdGggYQorICAgbm9uLWV4aXN0ZW50IGJvZHkuCisKKyAqIFdlIHVzZWQgdG8gYXNrIGxpYkNVUkwgdG8gdXNlIHRoZSBtb3N0IHNlY3VyZSBhdXRoZW50aWNhdGlvbiBtZXRob2QKKyAgIGF2YWlsYWJsZSB3aGVuIHRhbGtpbmcgdG8gYW4gSFRUUCBwcm94eSBvbmx5IHdoZW4gd2Ugd2VyZSB0b2xkIHRvCisgICB0YWxrIHRvIG9uZSB2aWEgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuICBXZSBub3cgYXNrIGxpYkNVUkwgdG8KKyAgIGFsd2F5cyB1c2UgdGhlIG1vc3Qgc2VjdXJlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCwgYmVjYXVzZSB0aGUgdXNlcgorICAgY2FuIHRlbGwgbGliQ1VSTCB0byB1c2UgYW4gSFRUUCBwcm94eSB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIHdpdGhvdXQgdXNpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisKKyAqIFdoZW4geW91IHNheSAiITxFTlRFUj4iIHdoaWxlIHJ1bm5pbmcgc2F5ICJnaXQgbG9nIiwgeW91J2QgY29uZnVzZQorICAgeW91cnNlbGYgaW4gdGhlIHJlc3VsdGluZyBzaGVsbCwgdGhhdCBtYXkgbG9vayBhcyBpZiB5b3UgdG9vaworICAgY29udHJvbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzaGVsbCB5b3Ugc3Bhd25lZCAiZ2l0IGxvZyIgZnJvbSBidXQKKyAgIHRoYXQgaXNuJ3Qgd2hhdCBpcyBoYXBwZW5pbmcuICBUbyB0aGF0IG5ldyBzaGVsbCwgd2UgbGVha2VkCisgICBHSVRfUEFHRVJfSU5fVVNFIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgd2FzIG1lYW50IGFzIGEgbG9jYWwKKyAgIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgb3JpZ2luYWwgIkdpdCIgYW5kIHN1YnByb2Nlc3NlcyB0aGF0IHdhcworICAgc3Bhd25lZCBieSBpdCBhZnRlciB3ZSBsYXVuY2hlZCB0aGUgcGFnZXIsIHdoaWNoIGNhdXNlZCBtYW55CisgICAiaW50ZXJlc3RpbmciIHRoaW5ncyB0byBoYXBwZW4sIGUuZy4gImdpdCBkaWZmIHwgY2F0IiBzdGlsbCBwYWludHMKKyAgIGl0cyBvdXRwdXQgaW4gY29sb3IgYnkgZGVmYXVsdC4KKworICAgU3RvcCBsZWFraW5nIHRoYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIHBhZ2VyJ3MgaGFsZiBvZiB0aGUKKyAgIGZvcms7IHdlIG9ubHkgbmVlZCBpdCBvbiAiR2l0IiBzaWRlIHdoZW4gd2Ugc3Bhd24gdGhlIHBhZ2VyLgorCisgKiBBdm9pZCBwb3NzaWJsZSBzc2l6ZV90IHRvIGludCB0cnVuY2F0aW9uLgorCisgKiAiZ2l0IGNvbmZpZyIgZmFpbGVkIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHdoZW4gdGhlCisgICB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gaXMgaW5jYXBhYmxlIG9mIHJlbmFtaW5nIGEgZmlsZSB0aGF0IGlzIHN0aWxsCisgICBvcGVuLgorCisgKiBBIG1pbm9yIGJ1Z2ZpeCB3aGVuIHBhY2sgYml0bWFwIGlzIHVzZWQgd2l0aCAicmV2LWxpc3QgLS1jb3VudCIuCisKKyAqIEFuIGFuY2llbnQgdGVzdCBmcmFtZXdvcmsgZW5oYW5jZW1lbnQgdG8gYWxsb3cgY29sb3Igd2FzIG5vdAorICAgZW50aXJlbHkgY29ycmVjdDsgdGhpcyBtYWtlcyBpdCB3b3JrIGV2ZW4gd2hlbiB0cHV0IG5lZWRzIHRvIHJlYWQKKyAgIGZyb20gdGhlIH4vLnRlcm1pbmZvIHVuZGVyIHRoZSB1c2VyJ3MgcmVhbCBIT01FIGRpcmVjdG9yeS4KKworICogRml4IGEgc21hbGwgYnVnIGluIG91ciB1c2Ugb2YgdW1hc2soKSByZXR1cm4gdmFsdWUuCisKKyAqICJnaXQgcmViYXNlIiBkaWQgbm90IGV4aXQgd2l0aCBmYWlsdXJlIHdoZW4gZm9ybWF0LXBhdGNoIGl0IGludm9rZWQKKyAgIGZhaWxlZCBmb3Igd2hhdGV2ZXIgcmVhc29uLgorCisgKiBEaXNhYmxlICJoYXZlIHdlIGxvc3QgYSByYWNlIHdpdGggY29tcGV0aW5nIHJlcGFjaz8iIGNoZWNrIHdoaWxlCisgICByZWNlaXZpbmcgYSBodWdlIG9iamVjdCB0cmFuc2ZlciB0aGF0IHJ1bnMgaW5kZXgtcGFjay4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC44LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOTQ2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC44LnR4dApAQCAtMCwwICsxLDIxIEBACitHaXQgdjIuNC44IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi40LjcKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBYmFuZG9uaW5nIGFuIGFscmVhZHkgYXBwbGllZCBjaGFuZ2UgaW4gImdpdCByZWJhc2UgLWkiIHdpdGgKKyAgICItLWNvbnRpbnVlIiBsZWZ0IENIRVJSWV9QSUNLX0hFQUQgYW5kIGNvbmZ1c2VkIGxhdGVyIHN0ZXBzLgorCisgKiBWYXJpb3VzIGZpeGVzIGFyb3VuZCAiZ2l0IGFtIiB0aGF0IGFwcGxpZXMgYSBwYXRjaCB0byBhIGhpc3RvcnkKKyAgIHRoYXQgaXMgbm90IHRoZXJlIHlldC4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIHJlcG9ydGVkICJtaXNzaW5nIG9iamVjdCIgZm9yIDB7NDB9IHdoZW4gaXQKKyAgIGVuY291bnRlcnMgYSBicm9rZW4gcmVmLiAgVGhlIGxhY2sgb2Ygb2JqZWN0IHdob3NlIG5hbWUgaXMgMHs0MH0gaXMKKyAgIG5vdCB0aGUgcHJvYmxlbTsgdGhlIHJlZiBiZWluZyBicm9rZW4gaXMuCisKKyAqICJnaXQgY29tbWl0IC0tY2xlYW51cD1zY2lzc29ycyIgd2FzIG5vdCBjYXJlZnVsIGVub3VnaCB0byBwcm90ZWN0CisgICBhZ2FpbnN0IGdldHRpbmcgZm9vbGVkIGJ5IGEgbGluZSB0aGF0IGxvb2tlZCBsaWtlIHNjaXNzb3JzLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjkudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlhZjlkZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjkudHh0CkBAIC0wLDAgKzEsOSBAQAorR2l0IHYyLjQuOSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNC45CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQSBoYW5kZnVsIG9mIGNvZGVwYXRocyB0aGF0IHVzZWQgdG8gdXNlIGZpeGVkLXNpemVkIGFycmF5cyB0byBob2xkCisgICBwYXRobmFtZXMgaGF2ZSBiZWVuIGNvcnJlY3RlZCB0byB1c2Ugc3RyYnVmIGFuZCBvdGhlciBtZWNoYW5pc21zIHRvCisgICBhbGxvdyBsb25nZXIgcGF0aG5hbWVzIHdpdGhvdXQgZmVhcmluZyBvdmVyZmxvd3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NzIzZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4wLnR4dApAQCAtMCwwICsxLDU2NCBAQAorR2l0IDIuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2Mi40CistLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIFRoZSBiYXNoIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgbGVhcm5lZCBhIGZldyBvcHRpb25zIHRoYXQKKyAgICJnaXQgcmV2ZXJ0IiB0YWtlcy4KKworICogV2hpdGVzcGFjZSBicmVha2FnZXMgaW4gZGVsZXRlZCBhbmQgY29udGV4dCBsaW5lcyBjYW4gYWxzbyBiZQorICAgcGFpbnRlZCBpbiB0aGUgb3V0cHV0IG9mICJnaXQgZGlmZiIgYW5kIGZyaWVuZHMgd2l0aCB0aGUgbmV3CisgICAtLXdzLWVycm9yLWhpZ2hsaWdodCBvcHRpb24uCisKKyAqIExpc3Qgb2YgY29tbWFuZHMgc2hvd24gYnkgImdpdCBoZWxwIiBhcmUgZ3JvdXBlZCBhbG9uZyB0aGUgd29ya2Zsb3cKKyAgIGVsZW1lbnRzIHRvIGhlbHAgZWFybHkgbGVhcm5lcnMuCisKKyAqICJnaXQgcDQiIG5vdyBkZXRlY3RzIHRoZSBmaWxldHlwZSAoZS5nLiBiaW5hcnkpIGNvcnJlY3RseSBldmVuIHdoZW4KKyAgIHRoZSBmaWxlcyBhcmUgb3BlbmVkIGV4Y2x1c2l2ZWx5LgorCisgKiBnaXQgcDQgYXR0ZW1wdHMgdG8gYmV0dGVyIGhhbmRsZSBicmFuY2hlcyBpbiBQZXJmb3JjZS4KKworICogImdpdCBwNCIgbGVhcm5lZCAiLS1jaGFuZ2VzLWJsb2NrLXNpemUgPG4+IiB0byByZWFkIHRoZSBjaGFuZ2VzIGluCisgICBjaHVua3MgZnJvbSBQZXJmb3JjZSwgaW5zdGVhZCBvZiBtYWtpbmcgb25lIGNhbGwgdG8gInA0IGNoYW5nZXMiCisgICB0aGF0IG1heSB0cmlnZ2VyICJ0b28gbWFueSByb3dzIHNjYW5uZWQiIGVycm9yIGZyb20gUGVyZm9yY2UuCisKKyAqIE1vcmUgd29ya2Fyb3VuZCBmb3IgUGVyZm9yY2UncyByb3cgbnVtYmVyIGxpbWl0IGluICJnaXQgcDQiLgorCisgKiBVbmxpa2UgIiRFRElUT1IiIGFuZCAiJEdJVF9FRElUT1IiIHRoYXQgY2FuIGhvbGQgdGhlIHBhdGggdG8gdGhlCisgICBjb21tYW5kIGFuZCBpbml0aWFsIG9wdGlvbnMgKGUuZy4gIi9wYXRoL3RvL2VtYWNzIC1udyIpLCAnZ2l0IHA0JworICAgZGlkIG5vdCBsZXQgdGhlIHNoZWxsIGludGVycG9sYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlIHRoYXQgbmFtZSB0aGUgZWRpdG9yICIkUDRFRElUT1IiIChhbmQgIiRFRElUT1IiLCB0b28pLgorICAgVGhpcyByZWxlYXNlIG1ha2VzIGl0IGluIGxpbmUgd2l0aCB0aGUgcmVzdCBvZiBHaXQsIGFzIHdlbGwgYXMgd2l0aAorICAgUGVyZm9yY2UuCisKKyAqIEEgbmV3IHNob3J0LWhhbmQgPGJyYW5jaD5Ae3B1c2h9IGRlbm90ZXMgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2gKKyAgIHRoYXQgdHJhY2tzIHRoZSBicmFuY2ggYXQgdGhlIHJlbW90ZSB0aGUgPGJyYW5jaD4gd291bGQgYmUgcHVzaGVkCisgICB0by4KKworICogImdpdCBzaG93LWJyYW5jaCAtLXRvcGljcyBIRUFEIiAod2l0aCBubyBvdGhlciBhcmd1bWVudHMpIGRpZCBub3QKKyAgIGRvIGFueXRoaW5nIGludGVyZXN0aW5nLiAgSW5zdGVhZCwgY29udHJhc3QgdGhlIGdpdmVuIHJldmlzaW9uCisgICBhZ2FpbnN0IGFsbCB0aGUgbG9jYWwgYnJhbmNoZXMgYnkgZGVmYXVsdC4KKworICogQSByZXBsYWNlbWVudCBmb3IgY29udHJpYi93b3JrZGlyL2dpdC1uZXctd29ya2RpciB0aGF0IGRvZXMgbm90CisgICByZWx5IG9uIHN5bWJvbGljIGxpbmtzIGFuZCBtYWtlIHNoYXJpbmcgb2Ygb2JqZWN0cyBhbmQgcmVmcyBzYWZlcgorICAgYnkgbWFraW5nIHRoZSBib3Jyb3dlZSBhbmQgYm9ycm93ZXJzIGF3YXJlIG9mIGVhY2ggb3RoZXIuCisKKyAgIENvbnNpZGVyIHRoaXMgYXMgc3RpbGwgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmU7IGl0cyBVSSBpcyBzdGlsbAorICAgbGlrZWx5IHRvIGNoYW5nZS4KKworICogVHdlYWsgdGhlIHNhbXBsZSAic3RvcmUiIGJhY2tlbmQgb2YgdGhlIGNyZWRlbnRpYWwgaGVscGVyIHRvIGhvbm9yCisgICBYREcgY29uZmlndXJhdGlvbiBmaWxlIGxvY2F0aW9ucyB3aGVuIHNwZWNpZmllZC4KKworICogQSBoZXVyaXN0aWMgd2UgdXNlIHRvIGNhdGNoIG1pc3R5cGVkIHBhdGhzIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAgICJnaXQgPGNtZD4gPHJldnM+IDxwYXRoc3BlYz4iIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgbm9uLXJldgorICAgcGFyYW1ldGVycyBpbiB0aGUgbGF0ZXIgcGFydCBvZiB0aGUgY29tbWFuZCBsaW5lIGFyZSBuYW1lcyBvZiB0aGUKKyAgIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUsIGJ1dCB0aGF0IG1lYW5zICJnaXQgZ3JlcCAkc3RyIC0tIFwqLmMiCisgICBtdXN0IGFsd2F5cyBiZSBkaXNhbWJpZ3VhdGVkIHdpdGggIi0tIiwgYmVjYXVzZSBub2JvZHkgc2FuZSB3aWxsCisgICBjcmVhdGUgYSBmaWxlIHdob3NlIG5hbWUgbGl0ZXJhbGx5IGlzIGFzdGVyaXNrLWRvdC1zZWUuICBMb29zZW4gdGhlCisgICBoZXVyaXN0aWMgdG8gZGVjbGFyZSB0aGF0IHdpdGggYSB3aWxkY2FyZCBzdHJpbmcgdGhlIHVzZXIgbGlrZWx5CisgICBtZWFudCB0byBnaXZlIHVzIGEgcGF0aHNwZWMuCisKKyAqICJnaXQgbWVyZ2UgRkVUQ0hfSEVBRCIgbGVhcm5lZCB0aGF0IHRoZSBwcmV2aW91cyAiZ2l0IGZldGNoIiBjb3VsZAorICAgYmUgdG8gY3JlYXRlIGFuIE9jdG9wdXMgbWVyZ2UsIGkuZS4gcmVjb3JkaW5nIG11bHRpcGxlIGJyYW5jaGVzCisgICB0aGF0IGFyZSBub3QgbWFya2VkIGFzICJub3QtZm9yLW1lcmdlIjsgdGhpcyBhbGxvd3MgdXMgdG8gbG9zZSBhbgorICAgb2xkIHN0eWxlIGludm9jYXRpb24gImdpdCBtZXJnZSA8bXNnPiBIRUFEICRjb21taXRzLi4uIiBpbiB0aGUKKyAgIGltcGxlbWVudGF0aW9uIG9mICJnaXQgcHVsbCIgc2NyaXB0OyB0aGUgb2xkIHN0eWxlIHN5bnRheCBjYW4gbm93CisgICBiZSBkZXByZWNhdGVkIChidXQgbm90IHJlbW92ZWQgeWV0KS4KKworICogRmlsdGVyIHNjcmlwdHMgd2VyZSBydW4gd2l0aCBTSUdQSVBFIGRpc2FibGVkIG9uIHRoZSBHaXQgc2lkZSwKKyAgIGV4cGVjdGluZyB0aGF0IHRoZXkgbWF5IG5vdCByZWFkIHdoYXQgR2l0IGZlZWRzIHRoZW0gdG8gZmlsdGVyLgorICAgV2UgaG93ZXZlciB0cmVhdGVkIGEgZmlsdGVyIHRoYXQgZG9lcyBub3QgcmVhZCBpdHMgaW5wdXQgZnVsbHkKKyAgIGJlZm9yZSBleGl0aW5nIGFzIGFuIGVycm9yLiAgV2Ugbm8gbG9uZ2VyIGRvIGFuZCBpZ25vcmUgRVBJUEUKKyAgIHdoZW4gd3JpdGluZyB0byBmZWVkIHRoZSBmaWx0ZXIgc2NyaXB0cy4KKworICAgVGhpcyBjaGFuZ2VzIHNlbWFudGljcywgYnV0IGFyZ3VhYmx5IGluIGEgZ29vZCB3YXkuICBJZiBhIGZpbHRlcgorICAgY2FuIHByb2R1Y2UgaXRzIG91dHB1dCB3aXRob3V0IGZ1bGx5IGNvbnN1bWluZyBpdHMgaW5wdXQgdXNpbmcKKyAgIHdoYXRldmVyIG1hZ2ljLCB3ZSBub3cgbGV0IGl0IGRvIHNvLCBpbnN0ZWFkIG9mIGRpYWdub3NpbmcgaXQKKyAgIGFzIGEgcHJvZ3JhbW1pbmcgZXJyb3IuCisKKyAqIEluc3RlYWQgb2YgZHlpbmcgaW1tZWRpYXRlbHkgdXBvbiBmYWlsaW5nIHRvIG9idGFpbiBhIGxvY2ssIHRoZQorICAgbG9ja2luZyAob2YgcmVmcyBldGMpIHJldHJpZXMgYWZ0ZXIgYSBzaG9ydCB3aGlsZSB3aXRoIGJhY2tvZmYuCisKKyAqIEludHJvZHVjZSBodHRwLjx1cmw+LlNTTENpcGhlckxpc3QgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byB0d2VhaworICAgdGhlIGxpc3Qgb2YgY2lwaGVyIHN1aXRlIHRvIGJlIHVzZWQgd2l0aCBsaWJjVVJMIHdoZW4gdGFsa2luZyB3aXRoCisgICBodHRwczovLyBzaXRlcy4KKworICogImdpdCBzdWJ0cmVlIiBzY3JpcHQgKGluIGNvbnRyaWIvKSB1c2VkICJlY2hvIC1uIiB0byBwcm9kdWNlCisgICBwcm9ncmVzcyBtZXNzYWdlcyBpbiBhIG5vbi1wb3J0YWJsZSB3YXkuCisKKyAqICJnaXQgc3VidHJlZSIgc2NyaXB0IChpbiBjb250cmliLykgZG9lcyBub3QgaGF2ZSAtLXNxdWFzaCBvcHRpb24KKyAgIHdoZW4gcHVzaGluZywgYnV0IHRoZSBkb2N1bWVudGF0aW9uIGFuZCBoZWxwIHRleHQgcHJldGVuZGVkIGFzIGlmCisgICBpdCBkaWQuCisKKyAqIFRoZSBHaXQgc3ViY29tbWFuZCBjb21wbGV0aW9uIChpbiBjb250cmliLykgbm8gbG9uZ2VyIGxpc3RzIGNyZWRlbnRpYWwKKyAgIGhlbHBlcnMgYW1vbmcgY2FuZGlkYXRlczsgdGhleSBhcmUgbm90IHNvbWV0aGluZyB0aGUgZW5kIHVzZXIgd291bGQKKyAgIGludm9rZSBpbnRlcmFjdGl2ZWx5LgorCisgKiBUaGUgaW5kZXggZmlsZSBjYW4gYmUgdGF1Z2h0IHdpdGggInVwZGF0ZS1pbmRleCAtLXVudHJhY2tlZC1jYWNoZSIKKyAgIHRvIG9wdGlvbmFsbHkgcmVtZW1iZXIgYWxyZWFkeSBzZWVuIHVudHJhY2tlZCBmaWxlcywgaW4gb3JkZXIgdG8KKyAgIHNwZWVkIHVwICJnaXQgc3RhdHVzIiBpbiBhIHdvcmtpbmcgdHJlZSB3aXRoIHRvbnMgb2YgY3J1ZnQuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIHRvIGRyaXZlIFdpbk1lcmdlIGFzIGEgYmFja2VuZC4KKworICogImdpdCB1cGxvYWQtcGFjayIgdGhhdCBzZXJ2ZXMgImdpdCBmZXRjaCIgY2FuIGJlIHRvbGQgdG8gc2VydmUKKyAgIGNvbW1pdHMgdGhhdCBhcmUgbm90IGF0IHRoZSB0aXAgb2YgYW55IHJlZiwgYXMgbG9uZyBhcyB0aGV5IGFyZQorICAgcmVhY2hhYmxlIGZyb20gYSByZWYsIHdpdGggdXBsb2FkcGFjay5hbGxvd1JlYWNoYWJsZVNIQTFJbldhbnQKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAqICJnaXQgY2F0LWZpbGUgLS1iYXRjaCgtY2hlY2spIiBsZWFybmVkIHRoZSAiLS1mb2xsb3ctc3ltbGlua3MiCisgICBvcHRpb24gdGhhdCBmb2xsb3dzIGFuIGluLXRyZWUgc3ltYm9saWMgbGluayB3aGVuIGFza2VkIGFib3V0IGFuCisgICBvYmplY3QgdmlhIGV4dGVuZGVkIFNIQS0xIHN5bnRheCwgZS5nLiBIRUFEOlJlbE5vdGVzIHRoYXQgcG9pbnRzIGF0CisgICBEb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4wLnR4dC4gIFdpdGggdGhlIG5ldyBvcHRpb24sIHRoZSBjb21tYW5kCisgICBiZWhhdmVzIGFzIGlmIEhFQUQ6RG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuMC50eHQgd2FzIGdpdmVuIGFzCisgICBpbnB1dCBpbnN0ZWFkLgorCisgICBDb25zaWRlciB0aGlzIGFzIHN0aWxsIGFuIGV4cGVyaW1lbnRhbCBhbmQgaW5jb21wbGV0ZSBmZWF0dXJlOgorCisgICAgLSBXZSBtYXkgd2FudCB0byBkbyB0aGUgc2FtZSBmb3IgaW4taW5kZXggb2JqZWN0cywgZS5nLgorICAgICAgYXNraW5nIGZvciA6UmVsTm90ZXMgd2l0aCB0aGlzIG9wdGlvbiBzaG91bGQgZ2l2ZQorICAgICAgOkRvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjAudHh0LCB0b28KKworICAgIC0gImdpdCBjYXQtZmlsZSAtLWZvbGxvdy1zeW1saW5rcyBibG9iIEhFQUQ6UmVsTm90ZXMiCisgICAgICBtYXkgYWxzbyBiZSBzb21ldGhpbmcgd2Ugd2FudCB0byBhbGxvdyBpbiB0aGUgZnV0dXJlLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGxlYXJuZWQgdGhlIGFsaWFzIGZpbGUgZm9ybWF0IHVzZWQgYnkgdGhlIHNlbmRtYWlsCisgICBwcm9ncmFtIChpbiBhIHNpbXBsaWZpZWQgZm9ybTsgd2Ugb2J2aW91c2x5IGRvIG5vdCBmZWVkIHBpcGVzKS4KKworICogVHJhZGl0aW9uYWxseSwgZXh0ZXJuYWwgbG93LWxldmVsIDMtd2F5IG1lcmdlIGRyaXZlcnMgYXJlIGV4cGVjdGVkCisgICB0byBwcm9kdWNlIHRoZWlyIHJlc3VsdHMgYmFzZWQgc29sZWx5IG9uIHRoZSBjb250ZW50cyBvZiB0aGUgdGhyZWUKKyAgIHZhcmlhbnRzIGdpdmVuIGluIHRlbXBvcmFyeSBmaWxlcyBuYW1lZCBieSAlTywgJUEgYW5kICVCIG9uIHRoZWlyCisgICBjb21tYW5kIGxpbmUuICBBZGRpdGlvbmFsbHkgYWxsb3cgdGhlbSB0byBsb29rIGF0IHRoZSBmaW5hbCBwYXRoCisgICAoZ2l2ZW4gYnkgJVApLgorCisgKiAiZ2l0IGJsYW1lIiBsZWFybmVkIGJsYW1lLnNob3dFbWFpbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiAiZ2l0IGFwcGx5IiBjYW5ub3QgZGlhZ25vc2UgYSBwYXRjaCBjb3JydXB0aW9uIHdoZW4gdGhlIGJyZWFrYWdlIGlzCisgICB0byBtYXJrIHRoZSBsZW5ndGggb2YgdGhlIGh1bmsgc2hvcnRlciB0aGFuIGl0IHJlYWxseSBpcyBvbiB0aGUKKyAgIGh1bmsgaGVhZGVyIGxpbmUgIkBAIC1sLGsgK20sbiBAQCI7IG9uZSBzcGVjaWFsIGNhc2UgaXQgY291bGQgaXMKKyAgIHdoZW4gdGhlIGh1bmsgYmVjb21lcyBuby1vcCAoZS5nLiBrID09IG4gPT0gMiBmb3IgdHdvLWxpbmUgY29udGV4dAorICAgcGF0Y2ggb3V0cHV0KSwgYW5kIGl0IGxlYXJuZWQgdG8gZG8gc28gaW4gdGhpcyBzcGVjaWFsIGNhc2UuCisKKyAqIEFkZCB0aGUgIi0tYWxsb3ctdW5rbm93bi10eXBlIiBvcHRpb24gdG8gImNhdC1maWxlIiB0byBhbGxvdworICAgaW5zcGVjdGluZyBsb29zZSBvYmplY3RzIG9mIGFuIGV4cGVyaW1lbnRhbCBvciBhIGJyb2tlbiB0eXBlLgorCisgKiBNYW55IGxvbmctcnVubmluZyBvcGVyYXRpb25zIHNob3cgcHJvZ3Jlc3MgZXllLWNhbmR5LCBldmVuIHdoZW4KKyAgIHRoZXkgYXJlIGxhdGVyIGJhY2tncm91bmRlZC4gIEhpZGUgdGhlIGV5ZS1jYW5keSB3aGVuIHRoZSBwcm9jZXNzCisgICBpcyBzZW50IHRvIHRoZSBiYWNrZ3JvdW5kIGluc3RlYWQuCisgICAobWVyZ2UgYTRmYjc2YyBsbS9zcXVlbGNoLWJnLXByb2dyZXNzIGxhdGVyIHRvIG1haW50KS4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiAidW5zaWduZWQgY2hhciBbMjBdIiB1c2VkIHRocm91Z2hvdXQgdGhlIGNvZGUgdG8gcmVwcmVzZW50IG9iamVjdAorICAgbmFtZXMgYXJlIGJlaW5nIGNvbnZlcnRlZCBpbnRvIGEgc2VtaS1vcGFxdWUgInN0cnVjdCBvYmplY3RfaWQiLgorICAgVGhpcyBlZmZvcnQgaXMgZXhwZWN0ZWQgdG8gaW50ZXJmZXJlIHdpdGggb3RoZXIgdG9waWNzIGluIGZsaWdodCwKKyAgIGJ1dCBob3BlZnVsbHkgd2lsbCBnaXZlIHVzIG9uZSBleHRyYSBsZXZlbCBvZiBhYnN0cmFjdGlvbiBpbiB0aGUKKyAgIGVuZCwgd2hlbiBjb21wbGV0ZWQuCisKKyAqIGZvcl9lYWNoX3JlZigpIGNhbGxiYWNrIGZ1bmN0aW9ucyB3ZXJlIHRhdWdodCB0byBuYW1lIHRoZSBvYmplY3RzCisgICBub3Qgd2l0aCAidW5zaWduZWQgY2hhciBzaGExWzIwXSIgYnV0IHdpdGggInN0cnVjdCBvYmplY3RfaWQiLgorCisgKiBDYXRjaCBhIHByb2dyYW1tZXIgbWlzdGFrZSB0byBmZWVkIGEgcG9pbnRlciBub3QgYW4gYXJyYXkgdG8KKyAgIEFSUkFZX1NJWkUoKSBtYWNybywgYnkgdXNpbmcgYSBjb3VwbGUgb2YgR0NDIGV4dGVuc2lvbnMuCisKKyAqIFNvbWUgZXJyb3IgbWVzc2FnZXMgaW4gImdpdCBjb25maWciIHdlcmUgZW1pdHRlZCB3aXRob3V0IGNhbGxpbmcKKyAgIHRoZSB1c3VhbCBlcnJvcigpIGZhY2lsaXR5LgorCisgKiBXaGVuICJhZGQtLWludGVyYWN0aXZlIiBzcGxpdHMgYSBodW5rIGludG8gdHdvIG92ZXJsYXBwaW5nIGh1bmtzCisgICBhbmQgdGhlbiBsZXQgdGhlIHVzZXIgY2hvb3NlIG9ubHkgb25lLCBpdCBzb21ldGltZXMgZmVlZHMgYW4KKyAgIGluY29ycmVjdCBwYXRjaCB0ZXh0IHRvICJnaXQgYXBwbHkiLiAgQWRkIHRlc3RzIHRvIGRlbW9uc3RyYXRlCisgICB0aGlzLgorCisgICBJIGhhdmUgYSBzbGlnaHQgc3VzcGljaW9uIHRoYXQgdGhpcyBtYXkgYmUKKyAgIGNmLiA8N3Z0emY3N3dqcC5mc2ZAZ2l0c3Rlci5zaWFtZXNlLmR5bmRucy5vcmc+IGNvbWluZyBiYWNrCisgICBhbmQgYml0aW5nIHVzIChJIHNlZW0gdG8gaGF2ZSBzYWlkICJsZXQncyBydW4gd2l0aCB0aGlzIGFuZCBzZWUKKyAgIHdoYXQgaGFwcGVucyIgYmFjayB0aGVuKS4KKworICogTW9yZSBsaW5lLWVuZGluZyB0ZXN0cy4KKworICogQW4gZWFybGllciByZXdyaXRlIHRvIHVzZSBzdHJidWZfZ2V0d2hvbGVsaW5lKCkgaW5zdGVhZCBvZiBmZ2V0cygzKQorICAgdG8gcmVhZCBwYWNrZWQtcmVmcyBmaWxlIHJldmVhbGVkIHRoYXQgdGhlIGZvcm1lciBpcyB1bmFjY2VwdGFibHkKKyAgIGluZWZmaWNpZW50LiAgSXQgaGFzIGJlZW4gb3B0aW1pemVkIGJ5IHVzaW5nIGdldGRlbGltKDMpIHdoZW4KKyAgIGF2YWlsYWJsZS4KKworICogVGhlIHJlZnMgQVBJIHVzZXMgcmVmX2xvY2sgc3RydWN0IHdoaWNoIGhhZCBpdHMgb3duICJpbnQgZmQiLCBldmVuCisgICB0aG91Z2ggdGhlIHNhbWUgZmlsZSBkZXNjcmlwdG9yIHdhcyBpbiB0aGUgbG9jayBzdHJ1Y3QgaXQgY29udGFpbnMuCisgICBDbGVhbi11cCB0aGUgY29kZSB0byBsb3NlIHRoaXMgcmVkdW5kYW50IGZpZWxkLgorCisgKiBUaGVyZSB3YXMgYSBkZWFkIGNvZGUgdGhhdCB1c2VkIHRvIGhhbmRsZSAiZ2l0IHB1bGwgLS10YWdzIiBhbmQKKyAgIHNob3cgc3BlY2lhbC1jYXNlZCBlcnJvciBtZXNzYWdlLCB3aGljaCB3YXMgbWFkZSBpcnJlbGV2YW50IHdoZW4KKyAgIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIG9wdGlvbiBjaGFuZ2VkIGJhY2sgaW4gR2l0IDEuOSBkYXlzLgorICAgKG1lcmdlIDE5ZDEyMmIgcHQvcHVsbC10YWdzLWVycm9yLWRpYWcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBIZWxwIHVzIHRvIGZpbmQgYnJva2VuIHRlc3Qgc2NyaXB0IHRoYXQgc3BsaXRzIHRoZSBib2R5IHBhcnQgb2YgdGhlCisgICB0ZXN0IGJ5IG1pc3Rha2VuIHVzZSBvZiB3cm9uZyBraW5kIG9mIHF1b3Rlcy4KKyAgIChtZXJnZSBkOTNkNWQ1IGpjL3Rlc3QtcHJlcmVxLXZhbGlkYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogRGV2ZWxvcGVyIHN1cHBvcnQgdG8gYXV0b21hdGljYWxseSBkZXRlY3QgYnJva2VuICYmLWNoYWluIGluIHRoZQorICAgdGVzdCBzY3JpcHRzIGlzIG5vdyB0dXJuZWQgb24gYnkgZGVmYXVsdC4KKyAgIChtZXJnZSA5MmIyNjlmIGprL3Rlc3QtY2hhaW4tbGludCBsYXRlciB0byBtYWludCkuCisKKyAqIEVycm9yIHJlcG9ydGluZyBtZWNoYW5pc20gdXNlZCBpbiAicmVmcyIgQVBJIGhhcyBiZWVuIG1hZGUgbW9yZQorICAgY29uc2lzdGVudC4KKworICogImdpdCBwdWxsIiBoYXMgbW9yZSB0ZXN0IGNvdmVyYWdlIG5vdy4KKworICogImdpdCBwdWxsIiBoYXMgYmVjb21lIG1vcmUgYXdhcmUgb2YgdGhlIG9wdGlvbnMgbWVhbnQgZm9yCisgICB1bmRlcmx5aW5nICJnaXQgZmV0Y2giIGFuZCB0aGVuIGxlYXJuZWQgdG8gdXNlIHBhcnNlLW9wdGlvbnMKKyAgIHBhcnNlci4KKworICogQ2xhcmlmeSBpbiB0aGUgTWFrZWZpbGUgYSBndWlkZWxpbmUgdG8gZGVjaWRlIHVzZSBvZiBVU0VfTlNFQy4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjIuNAorLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjQgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycKK25vdGVzIGZvciBkZXRhaWxzKS4KKworICogR2l0IDIuNCBicm9rZSBzZXR0aW5nIHZlcmJvc2l0eSBhbmQgcHJvZ3Jlc3MgbGV2ZWxzIG9uICJnaXQgY2xvbmUiCisgICB3aXRoIG5hdGl2ZSB0cmFuc3BvcnRzLgorICAgKG1lcmdlIDgyMmYwYzQgbWgvY2xvbmUtdmVyYm9zaXR5LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYWRkIC1lIiBkaWQgbm90IGFsbG93IHRoZSB1c2VyIHRvIGFib3J0IHRoZSBvcGVyYXRpb24gYnkKKyAgIGtpbGxpbmcgdGhlIGVkaXRvci4KKyAgIChtZXJnZSBjYjY0ODAwIGprL2FkZC1lLWtpbGwtZWRpdG9yIGxhdGVyIHRvIG1haW50KS4KKworICogTWVtb3J5IHVzYWdlIG9mICJnaXQgaW5kZXgtcGFjayIgaGFzIGJlZW4gdHJpbW1lZCBieSB0ZW5zIG9mCisgICBwZXItY2VudC4KKyAgIChtZXJnZSBmMGU3ZjExIG5kL3NsaW0taW5kZXgtcGFjay1tZW1vcnktdXNhZ2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkb2xkIC0tbm90IC0tYWxsIiB0byBzZWUgaWYgZXZlcnl0aGluZyB0aGF0CisgICBpcyByZWFjaGFibGUgZnJvbSAkb2xkIGlzIGFscmVhZHkgY29ubmVjdGVkIHRvIHRoZSBleGlzdGluZyByZWZzCisgICB3YXMgdmVyeSBpbmVmZmljaWVudC4KKyAgIChtZXJnZSBiNmU4YTNiIGprL3N0aWxsLWludGVyZXN0aW5nIGxhdGVyIHRvIG1haW50KS4KKworICogImhhc2gtb2JqZWN0IC0tbGl0ZXJhbGx5IiBpbnRyb2R1Y2VkIGluIHYyLjIgd2FzIG5vdCBwcmVwYXJlZCB0bworICAgdGFrZSBhIHJlYWxseSBsb25nIG9iamVjdCB0eXBlIG5hbWUuCisgICAobWVyZ2UgMTQyN2E3ZiBqYy9oYXNoLW9iamVjdCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC0tcXVpZXQiIHdhcyBub3QgcXVpdGUgcXVpZXQgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvCisgICBkby4KKyAgIChtZXJnZSAyMjk0NmE5IGprL3JlYmFzZS1xdWlldC1ub29wIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvbXBsZXRpb24gZm9yICJsb2cgLS1kZWNvcmF0ZT0iIHBhcmFtZXRlciB2YWx1ZSB3YXMgaW5jb3JyZWN0LgorICAgKG1lcmdlIGFmMTZiZGEgc2cvY29tcGxldGUtZGVjb3JhdGUtZnVsbC1ub3QtbG9uZyBsYXRlciB0byBtYWludCkuCisKKyAqICJmaWx0ZXItYnJhbmNoIiBjb3JydXB0ZWQgY29tbWl0IGxvZyBtZXNzYWdlIHRoYXQgZW5kcyB3aXRoIGFuCisgICBpbmNvbXBsZXRlIGxpbmUgb24gcGxhdGZvcm1zIHdpdGggc29tZSAic2VkIiBpbXBsZW1lbnRhdGlvbnMgdGhhdAorICAgbXVuZ2Ugc3VjaCBhIGxpbmUuICBXb3JrIGl0IGFyb3VuZCBieSBhdm9pZGluZyB0byB1c2UgInNlZCIuCisgICAobWVyZ2UgZGYwNjIwMSBqay9maWx0ZXItYnJhbmNoLXVzZS1vZi1zZWQtb24taW5jb21wbGV0ZS1saW5lIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkYWVtb24iIGZhaWxzIHRvIGJ1aWxkIGZyb20gdGhlIHNvdXJjZSB1bmRlciBOT19JUFY2CisgICBjb25maWd1cmF0aW9uIChyZWdyZXNzaW9uIGluIDIuNCkuCisgICAobWVyZ2UgZDM1OGY3NyBqYy9kYWVtb24tbm8taXB2Ni1mb3ItMi40LjEgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTb21lIHRpbWUgYWdvLCAiZ2l0IGJsYW1lIiAoaW5jb3JyZWN0bHkpIGxvc3QgdGhlIGNvbnZlcnRfdG9fZ2l0KCkKKyAgIGNhbGwgd2hlbiBzeW50aGVzaXppbmcgYSBmYWtlICJ0aXAiIGNvbW1pdCB0aGF0IHJlcHJlc2VudHMgdGhlCisgICBzdGF0ZSBpbiB0aGUgd29ya2luZyB0cmVlLCB3aGljaCBicm9rZSBmb2xrcyB3aG8gcmVjb3JkIHRoZSBoaXN0b3J5CisgICB3aXRoIExGIGxpbmUgZW5kaW5nIHRvIG1ha2UgdGhlaXIgcHJvamVjdCBwb3J0YWJsZSBhY3Jvc3MgcGxhdGZvcm1zCisgICB3aGlsZSB0ZXJtaW5hdGluZyBsaW5lcyBpbiB0aGVpciB3b3JraW5nIHRyZWUgZmlsZXMgd2l0aCBDUkxGIGZvcgorICAgdGhlaXIgcGxhdGZvcm0uCisgICAobWVyZ2UgNGJmMjU2ZCB0Yi9ibGFtZS1yZXN1cnJlY3QtY29udmVydC10by1naXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSBhdm9pZCBzZXR0aW5nIGNvcmUud29ya3RyZWUgd2hlbiB0aGUgcmVwb3NpdG9yeSBsb2NhdGlvbiBpcyB0aGUKKyAgICIuZ2l0IiBkaXJlY3RvcnkgZGlyZWN0bHkgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLCBidXQKKyAgIHRoZSBjb2RlIG1pc2RldGVjdGVkIHRoZSBjYXNlIGluIHdoaWNoIHRoZSB3b3JraW5nIHRyZWUgaXMgYXQgdGhlCisgICByb290IGxldmVsIG9mIHRoZSBmaWxlc3lzdGVtICh3aGljaCBhcmd1YWJseSBpcyBhIHNpbGx5IHRoaW5nIHRvCisgICBkbywgYnV0IHN0aWxsIHZhbGlkKS4KKyAgIChtZXJnZSA4NGNjYWQ4IGprL2luaXQtY29yZS13b3JrdHJlZS1hdC1yb290IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjb21taXQgLS1kYXRlPW5vdyIgb3IgYW55dGhpbmcgdGhhdCByZWxpZXMgb24gYXBwcm94aWRhdGUgbG9zdAorICAgdGhlIGRheWxpZ2h0LXNhdmluZy10aW1lIG9mZnNldC4KKyAgIChtZXJnZSBmNmU2MzYyIGpjL2Vwb2NodGltZS13by10eiBsYXRlciB0byBtYWludCkuCisKKyAqIEFjY2VzcyB0byBvYmplY3RzIGluIHJlcG9zaXRvcmllcyB0aGF0IGJvcnJvdyBmcm9tIGFub3RoZXIgb25lIG9uIGEKKyAgIHNsb3cgTkZTIHNlcnZlciB1bm5lY2Vzc2FyaWx5IGdvdCBtb3JlIGV4cGVuc2l2ZSBkdWUgdG8gcmVjZW50IGNvZGUKKyAgIGJlY29taW5nIG1vcmUgY2F1dGlvdXMgaW4gYSBuYWl2ZSB3YXkgbm90IHRvIGxvc2Ugb2JqZWN0cyB0byBwcnVuaW5nLgorICAgKG1lcmdlIGVlMWM2YzMgamsvcHJ1bmUtbXRpbWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZXBhdGhzIHRoYXQgcmVhZCAuZ2l0aWdub3JlIGFuZCAuZ2l0YXR0cmlidXRlcyBmaWxlcyBoYXZlIGJlZW4KKyAgIHRhdWdodCB0aGF0IHRoZXNlIGZpbGVzIGVuY29kZWQgaW4gVVRGLTggbWF5IGhhdmUgVVRGLTggQk9NIG1hcmtlciBhdAorICAgdGhlIGJlZ2lubmluZzsgdGhpcyBtYWtlcyBpdCBpbiBsaW5lIHdpdGggd2hhdCB3ZSBkbyBmb3IgY29uZmlndXJhdGlvbgorICAgZmlsZXMgYWxyZWFkeS4KKyAgIChtZXJnZSAyNzU0N2U1IGNuL2JvbS1pbi1naXRpZ25vcmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBhIGZldyBoZWxwZXIgc2NyaXB0cyBpbiB0aGUgdGVzdCBzdWl0ZSBkaWQgbm90IHJlcG9ydCBlcnJvcnMKKyAgIGNvcnJlY3RseS4KKyAgIChtZXJnZSBkZTI0OGU5IGVwL2ZpeC10ZXN0LWxpYi1mdW5jdGlvbnMtcmVwb3J0IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGRlZmF1bHQgJEhPTUUvLmdpdGNvbmZpZyBmaWxlIGNyZWF0ZWQgdXBvbiAiZ2l0IGNvbmZpZyAtLWdsb2JhbCIKKyAgIHRoYXQgZWRpdHMgaXQgaGFkIGluY29ycmVjdGx5IHNwZWxsZWQgdXNlci5uYW1lIGFuZCB1c2VyLmVtYWlsCisgICBlbnRyaWVzIGluIGl0LgorICAgKG1lcmdlIDdlMTEwNTIgb2gvZml4LWNvbmZpZy1kZWZhdWx0LXVzZXItbmFtZS1zZWN0aW9uIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjYXQtZmlsZSBibCAkYmxvYiIgZmFpbGVkIHRvIGJhcmYgZXZlbiB0aG91Z2ggdGhlcmUgaXMgbm8KKyAgIG9iamVjdCB0eXBlIHRoYXQgaXMgImJsIi4KKyAgIChtZXJnZSBiNzk5NGFmIGprL3R5cGUtZnJvbS1zdHJpbmctZ2VudGx5IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHVzdWFsICJnaXQgZGlmZiIgd2hlbiBzZWVpbmcgYSBmaWxlIHR1cm5pbmcgaW50byBhIGRpcmVjdG9yeQorICAgc2hvd2VkIGEgcGF0Y2hzZXQgdG8gcmVtb3ZlIHRoZSBmaWxlIGFuZCBjcmVhdGUgYWxsIGZpbGVzIGluIHRoZQorICAgZGlyZWN0b3J5LCBidXQgImdpdCBkaWZmIC0tbm8taW5kZXgiIHNpbXBseSByZWZ1c2VkIHRvIHdvcmsuICBBbHNvLAorICAgd2hlbiBhc2tlZCB0byBjb21wYXJlIGEgZmlsZSBhbmQgYSBkaXJlY3RvcnksIGltaXRhdGUgUE9TSVggImRpZmYiCisgICBhbmQgY29tcGFyZSB0aGUgZmlsZSB3aXRoIHRoZSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBpbiB0aGUKKyAgIGRpcmVjdG9yeSwgaW5zdGVhZCBvZiByZWZ1c2luZyB0byBydW4uCisgICAobWVyZ2UgMDYxNTE3MyBqYy9kaWZmLW5vLWluZGV4LWQtZiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC1pIiBtb3ZlZCB0aGUgImN1cnJlbnQiIGNvbW1hbmQgZnJvbSAidG9kbyIgdG8gImRvbmUiIGEKKyAgIGJpdCB0b28gcHJlbWF0dXJlbHksIGxvc2luZyBhIHN0ZXAgd2hlbiBhICJwaWNrIiBkaWQgbm90IGV2ZW4gc3RhcnQuCisgICAobWVyZ2UgOGNiYzU3YyBwaC9yZWJhc2UtaS1yZWRvIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvbm5lY3Rpb24gaW5pdGlhdGlvbiBjb2RlIGZvciAic3NoIiB0cmFuc3BvcnQgdHJpZWQgdG8gYWJzb3JiCisgICBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBzdG9jayAic3NoIiBhbmQgUHV0dHktc3VwcGxpZWQgInBsaW5rIiBhbmQKKyAgIGl0cyBkZXJpdmF0aXZlcywgYnV0IHRoZSBsb2dpYyB0byB0ZWxsIHRoYXQgd2UgYXJlIHVzaW5nICJwbGluayIKKyAgIHZhcmlhbnRzIHdlcmUgdG9vIGxvb3NlIGFuZCBmYWxzZWx5IHRyaWdnZXJlZCB3aGVuICJwbGluayIgYXBwZWFyZWQKKyAgIGFueXdoZXJlIGluIHRoZSBwYXRoIChlLmcuICIvaG9tZS9tZS9iaW4vdXBsaW5rL3NzaCIpLgorICAgKG1lcmdlIGJhYWYyMzMgYmMvY29ubmVjdC1wbGluayBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIGhhdmUgcHJlcGVuZGVkICRHSVRfRVhFQ19QQVRIIGFuZCB0aGUgcGF0aCAiZ2l0IiBpcyBpbnN0YWxsZWQgaW4KKyAgICh0eXBpY2FsbHkgIi91c3IvYmluIikgdG8gJFBBVEggd2hlbiBpbnZva2luZyBzdWJwcm9ncmFtcyBhbmQgaG9va3MKKyAgIGZvciBhbG1vc3QgZXRlcm5pdHksIGJ1dCB0aGUgb3JpZ2luYWwgdXNlIGNhc2UgdGhlIGxhdHRlciB0cmllZCB0bworICAgc3VwcG9ydCB3YXMgc2VtaS1ib2d1cyAoaS5lLiBpbnN0YWxsIGdpdCB0byAvb3B0L2Zvby9naXQgYW5kIHJ1biBpdAorICAgd2l0aG91dCBoYXZpbmcgL29wdC9mb28gb24gJFBBVEgpLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBpdCBoYXMKKyAgIGJlY29tZSBsZXNzIGFuZCBsZXNzIHJlbGV2YW50IGFzIEdpdCBncmV3IG1vcmUgbWFpbnN0cmVhbSAoaS5lLiB0aGUKKyAgIHVzZXJzIHdvdWxkIF93YW50XyB0byBoYXZlIGl0IG9uIHRoZWlyICRQQVRIKS4gIFN0b3AgcHJlcGVuZGluZyB0aGUKKyAgIHBhdGggaW4gd2hpY2ggImdpdCIgaXMgaW5zdGFsbGVkIHRvIHVzZXJzJyAkUEFUSCwgYXMgdGhhdCB3b3VsZAorICAgaW50ZXJmZXJlIHRoZSBjb21tYW5kIHNlYXJjaCBvcmRlciBwZW9wbGUgZGVwZW5kIG9uIChlLmcuIHRoZXkgbWF5CisgICBub3QgbGlrZSB2ZXJzaW9ucyBvZiBwcm9ncmFtcyB0aGF0IGFyZSB1bnJlbGF0ZWQgdG8gR2l0IGluIC91c3IvYmluCisgICBhbmQgd2FudCB0byBvdmVycmlkZSB0aGVtIGJ5IGhhdmluZyBkaWZmZXJlbnQgb25lcyBpbiAvdXNyL2xvY2FsL2JpbgorICAgYW5kIGhhdmUgdGhlIGxhdHRlciBkaXJlY3RvcnkgZWFybGllciBpbiB0aGVpciAkUEFUSCkuCisgICAobWVyZ2UgYTBiNDUwNyBqay9naXQtbm8tbW9yZS1hcmd2MC1wYXRoLW11bmdpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBjb3JlLmV4Y2x1ZGVzZmlsZSAoZGVmYXVsdGluZyB0byAkWERHX0hPTUUvZ2l0L2lnbm9yZSkgaXMgc3VwcG9zZWQKKyAgIHRvIGJlIG92ZXJyaWRkZW4gYnkgcmVwb3NpdG9yeS1zcGVjaWZpYyAuZ2l0L2luZm8vZXhjbHVkZSBmaWxlLCBidXQKKyAgIHRoZSBvcmRlciB3YXMgc3dhcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuIFRoaXMgYmVsYXRlZGx5IGZpeGVzIGl0LgorICAgKG1lcmdlIDA5OWQyZDggamMvZ2l0aWdub3JlLXByZWNlZGVuY2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGVyZSB3YXMgYSBjb21tZW50ZWQtb3V0IChpbnN0ZWFkIG9mIGJlaW5nIG1hcmtlZCB0byBleHBlY3QKKyAgIGZhaWx1cmUpIHRlc3QgdGhhdCBkb2N1bWVudGVkIGEgYnJlYWthZ2UgdGhhdCB3YXMgZml4ZWQgc2luY2UgdGhlCisgICB0ZXN0IHdhcyB3cml0dGVuOyB0dXJuIGl0IGludG8gYSBwcm9wZXIgdGVzdC4KKyAgIChtZXJnZSA2NmQyZTA0IHNiL3QxMDIwLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgImxvZyAtLWRlY29yYXRlIiBlbmhhbmNlbWVudCBpbiBHaXQgMi40IHRoYXQgc2hvd3MgdGhlIGNvbW1pdAorICAgYXQgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2ggZS5nLiAiSEVBRCAtPiBtYXN0ZXIiLCBkaWQgbm90CisgICB3b3JrIHdpdGggLS1kZWNvcmF0ZT1mdWxsLgorICAgKG1lcmdlIDQyOWFkMjAgbWcvbG9nLWRlY29yYXRlLUhFQUQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgcmVmIEFQSSBkaWQgbm90IGhhbmRsZSBjYXNlcyB3aGVyZSAncmVmcy9oZWFkcy94eXp6eS9mcm90eicgaXMKKyAgIHJlbW92ZWQgYXQgdGhlIHNhbWUgdGltZSBhcyAncmVmcy9oZWFkcy94eXp6eScgaXMgYWRkZWQgKG9yIHZpY2UKKyAgIHZlcnNhKSB2ZXJ5IHdlbGwuCisgICAobWVyZ2UgYzYyOGVkZiBtaC9yZWYtZGlyZWN0b3J5LWZpbGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNdWx0aS1yZWYgdHJhbnNhY3Rpb24gc3VwcG9ydCB3ZSBtZXJnZWQgYSBmZXcgcmVsZWFzZXMgYWdvCisgICB1bm5lY2Vzc2FyaWx5IGtlcHQgbWFueSBmaWxlIGRlc2NyaXB0b3JzIG9wZW4sIHJpc2tpbmcgdG8gZmFpbCB3aXRoCisgICByZXNvdXJjZSBleGhhdXN0aW9uLiAgVGhpcyBpcyBmb3IgMi40LnggdHJhY2suCisgICAobWVyZ2UgMTg1Y2UzYSBtaC93cml0ZS1yZWZzLXNvb25lci0yLjQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGJ1bmRsZSB2ZXJpZnkiIGRpZCBub3QgZGlhZ25vc2UgZXh0cmEgcGFyYW1ldGVycyBvbiB0aGUKKyAgIGNvbW1hbmQgbGluZS4KKyAgIChtZXJnZSA3ODg2Y2ZhIHBzL2J1bmRsZS12ZXJpZnktYXJnIGxhdGVyIHRvIG1haW50KS4KKworICogVmFyaW91cyBkb2N1bWVudGF0aW9uIG1hcmstdXAgZml4ZXMgdG8gbWFrZSB0aGUgb3V0cHV0IG1vcmUKKyAgIGNvbnNpc3RlbnQgaW4gZ2VuZXJhbCBhbmQgYWxzbyBtYWtlIEFzY2lpRG9jdG9yIChhbiBhbHRlcm5hdGl2ZQorICAgZm9ybWF0dGVyKSBoYXBwaWVyLgorICAgKG1lcmdlIGQwMjU4YjkgamsvYXNjaWlkb2MtbWFya3VwLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYWQzOTY3YSBqay9zdHJpcHNwYWNlLWFzY2lpZG9jdG9yLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOTc1ZTM4MiBqYS90dXRvcmlhbC1hc2NpaWRvY3Rvci1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0byByZWFkIHBhY2stYml0bWFwIHdhbnRlZCB0byBhbGxvY2F0ZSBhIGZldyBodW5kcmVkCisgICBwb2ludGVycyB0byBhIHN0cnVjdHVyZSwgYnV0IGJ5IG1pc3Rha2UgYWxsb2NhdGVkIGFuZCBsZWFrZWQgbWVtb3J5CisgICBlbm91Z2ggdG8gaG9sZCB0aGF0IG1hbnkgYWN0dWFsIHN0cnVjdHVyZXMuICBDb3JyZWN0IHRoZSBhbGxvY2F0aW9uCisgICBzaXplIGFuZCBhbHNvIGhhdmUgaXQgb24gc3RhY2ssIGFzIGl0IGlzIHNtYWxsIGVub3VnaC4KKyAgIChtZXJnZSA1OTlkYzc2IHJzL3BsdWctbGVhay1pbi1wYWNrLWJpdG1hcHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgcHVsbC5mZiBjb25maWd1cmF0aW9uIHdhcyBzdXBwb3NlZCB0byBvdmVycmlkZSB0aGUgbWVyZ2UuZmYKKyAgIGNvbmZpZ3VyYXRpb24sIGJ1dCBpdCBkaWRuJ3QuCisgICAobWVyZ2UgZGI5YmIyOCBwdC9wdWxsLWZmLXZzLW1lcmdlLWZmIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdWxsIC0tbG9nIiBhbmQgImdpdCBwdWxsIC0tbm8tbG9nIiB3b3JrZWQgYXMgZXhwZWN0ZWQsIGJ1dAorICAgImdpdCBwdWxsIC0tbG9nPTIwIiBkaWQgbm90LgorICAgKG1lcmdlIDUwNjFhNDQgcHQvcHVsbC1sb2ctbiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmVyZXJlIGZvcmdldCIgaW4gYSByZXBvc2l0b3J5IHdpdGhvdXQgcmVyZXJlIGVuYWJsZWQgZ2F2ZSBhCisgICBjcnlwdGljIGVycm9yIG1lc3NhZ2U7IGl0IHNob3VsZCBiZSBhIHNpbGVudCBuby1vcCBpbnN0ZWFkLgorICAgKG1lcmdlIDA1NDQ1NzQgamsvcmVyZXJlLWZvcmdldC1jaGVjay1lbmFibGVkIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgLWkiIGZpcmVkIHBvc3QtcmV3cml0ZSBob29rIHdoZW4gaXQgc2hvdWxkbid0IChuYW1lbHksCisgICB3aGVuIGl0IHdhcyB0b2xkIHRvIHN0b3Agc2VxdWVuY2luZyB3aXRoICdleGVjJyBpbnNuKS4KKyAgIChtZXJnZSAxNDFmZjhmIG1tL3JlYmFzZS1pLXBvc3QtcmV3cml0ZS1leGVjIGxhdGVyIHRvIG1haW50KS4KKworICogQ2xhcmlmeSB0aGF0ICJsb2cgLS1yYXciIGFuZCAibG9nIC0tZm9ybWF0PXJhdyIgYXJlIHVucmVsYXRlZAorICAgY29uY2VwdHMuCisgICAobWVyZ2UgOTJkZTkyMSBtbS9sb2ctZm9ybWF0LXJhdy1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNYWtlICJnaXQgc3Rhc2ggc29tZXRoaW5nIC0taGVscCIgZXJyb3Igb3V0LCBzbyB0aGF0IHVzZXJzIGNhbgorICAgc2FmZWx5IHNheSAiZ2l0IHN0YXNoIGRyb3AgLS1oZWxwIi4KKyAgIChtZXJnZSA1YmEyODMxIGprL3N0YXNoLW9wdGlvbnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY2xlYW4vc211ZGdlIGludGVyZmFjZSBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIGZpbHRlcmluZyBhbgorICAgZW1wdHkgY29udGVudHMgKGZhaWxlZCBhbmQgdGhlbiBwYXNzZWQgdGhlIGVtcHR5IGlucHV0IHRocm91Z2gpLgorICAgSXQgY2FuIGJlIGFyZ3VlZCB0aGF0IGEgZmlsdGVyIHRoYXQgcHJvZHVjZXMgYW55dGhpbmcgYnV0IGVtcHR5IGZvcgorICAgYW4gZW1wdHkgaW5wdXQgaXMgbm9uc2Vuc2UsIGJ1dCBpZiB0aGUgdXNlciB3YW50cyB0byBkbyBzdHJhbmdlCisgICB0aGluZ3MsIHRoZW4gd2h5IG5vdD8KKyAgIChtZXJnZSBmNmExZTFlIGpoL2ZpbHRlci1lbXB0eS1jb250ZW50cyBsYXRlciB0byBtYWludCkuCisKKyAqIENvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgSFRUUCBzZXJ2ZXIgYW5kIGh0dHBfYmFja2VuZCBwcm9jZXNzIGNhbgorICAgbGVhZCB0byBhIGRlYWQtbG9jayB3aGVuIHJlbGF5aW5nIGEgbGFyZ2UgcmVmIG5lZ290aWF0aW9uIHJlcXVlc3QuCisgICBEaWFnbm9zZSB0aGUgc2l0dWF0aW9uIGJldHRlciwgYW5kIG1pdGlnYXRlIGl0IGJ5IHJlYWRpbmcgc3VjaCBhCisgICByZXF1ZXN0IGZpcnN0IGludG8gY29yZSAodG8gYSByZWFzb25hYmxlIGxpbWl0KS4KKyAgIChtZXJnZSA2MzY2MTRmIGprL2h0dHAtYmFja2VuZC1kZWFkbG9jayBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2xlYW4gcGF0aHNwZWMuLi4iIHRyaWVkIHRvIGxzdGF0KDIpIGFuZCBjb21wbGFpbiBldmVuIGZvcgorICAgcGF0aHMgb3V0c2lkZSB0aGUgZ2l2ZW4gcGF0aHNwZWMuCisgICAobWVyZ2UgODM4ZDZhOSBkdC9jbGVhbi1wYXRoc3BlYy1maWx0ZXItdGhlbi1sc3RhdCBsYXRlciB0byBtYWludCkuCisKKyAqIFJlY2VudCAiZ2l0IHBydW5lIiB0cmF2ZXJzZXMgeW91bmcgdW5yZWFjaGFibGUgb2JqZWN0cyB0byBzYWZla2VlcAorICAgb2xkIG9iamVjdHMgaW4gdGhlIHJlYWNoYWJpbGl0eSBjaGFpbiBmcm9tIHRoZW0sIHdoaWNoIHNvbWV0aW1lcworICAgY2F1c2VkIGVycm9yIG1lc3NhZ2VzIHRoYXQgYXJlIHVubmVjZXNzYXJpbHkgYWxhcm1pbmcuCisgICAobWVyZ2UgY2U0ZTdiMiBqay9zcXVlbGNoLW1pc3NpbmctbGluay13YXJuaW5nLWZvci11bnJlYWNoYWJsZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHJlYWRlci93cml0ZXIgdXNlcyBtbWFwKDIpIGludGVyZmFjZSB0byBhY2Nlc3MKKyAgIHRoZSBmaWxlczsgd2hlbiB3ZSBmaW5kIGEgZGlyZWN0b3J5LCBpdCBiYXJmZWQgd2l0aCAiT3V0IG9mIG1lbW9yeT8iLgorICAgKG1lcmdlIDljYTBhYWYgamsvZGlhZ25vc2UtY29uZmlnLW1tYXAtZmFpbHVyZSBsYXRlciB0byBtYWludCkuCisKKyAqICJjb2xvci5kaWZmLnBsYWluIiB3YXMgYSBtaXNub21lcjsgZ2l2ZSBpdCAnY29sb3IuZGlmZi5jb250ZXh0JyBhcworICAgYSBtb3JlIGxvZ2ljYWwgc3lub255bS4KKyAgIChtZXJnZSA4ZGJmM2ViIGprL2NvbG9yLWRpZmYtcGxhaW4taXMtY29udGV4dCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzZXR1cCBjb2RlIHVzZWQgdG8gZGllIHdoZW4gY29yZS5iYXJlIGFuZCBjb3JlLndvcmt0cmVlIGFyZSBzZXQKKyAgIGluY29uc2lzdGVudGx5LCBldmVuIGZvciBjb21tYW5kcyB0aGF0IGRvIG5vdCBuZWVkIHdvcmtpbmcgdHJlZS4KKyAgIChtZXJnZSBmYWRhNzY3IGprL2RpZS1vbi1ib2d1cy13b3JrdHJlZS1sYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50IE1hYyBPUyBYIHVwZGF0ZXMgYnJlYWtzIHRoZSBsb2dpYyB0byBkZXRlY3QgdGhhdCB0aGUgbWFjaGluZQorICAgaXMgb24gdGhlIEFDIHBvd2VyIGluIHRoZSBzYW1wbGUgcHJlLWF1dG8tZ2Mgc2NyaXB0LgorICAgKG1lcmdlIGM1NGM3YjMgcGEvYXV0by1nYy1tYWMtb3N4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjb21taXQgLS1jbGVhbnVwPXNjaXNzb3JzIiB3YXMgbm90IGNhcmVmdWwgZW5vdWdoIHRvIHByb3RlY3QKKyAgIGFnYWluc3QgZ2V0dGluZyBmb29sZWQgYnkgYSBsaW5lIHRoYXQgbG9va2VkIGxpa2Ugc2Npc3NvcnMuCisgICAobWVyZ2UgZmJmYTA5NyBzZy9jb21taXQtY2xlYW51cC1zY2lzc29ycyBsYXRlciB0byBtYWludCkuCisKKyAqICJIYXZlIHdlIGxvc3QgYSByYWNlIHdpdGggY29tcGV0aW5nIHJlcGFjaz8iIGNoZWNrIHdhcyB0b28KKyAgIGV4cGVuc2l2ZSwgZXNwZWNpYWxseSB3aGlsZSByZWNlaXZpbmcgYSBodWdlIG9iamVjdCB0cmFuc2ZlcgorICAgdGhhdCBydW5zIGluZGV4LXBhY2sgKGUuZy4gImNsb25lIiBvciAiZmV0Y2giKS4KKyAgIChtZXJnZSAwZWViMDc3IGprL2luZGV4LXBhY2stcmVkdWNlLXJlY2hlY2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdGNzaCBjb21wbGV0aW9uIHdyaXRlcyBhIGJhc2ggc2NyaXB0bGV0IGJ1dCB0aGF0IHdvdWxkIGhhdmUKKyAgIGZhaWxlZCBmb3IgdXNlcnMgd2l0aCBub2Nsb2JiZXIgc2V0LgorICAgKG1lcmdlIDBiMWY2ODggYWYvdGNzaC1jb21wbGV0aW9uLW5vY2xvYmJlciBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIiByZXBvcnRlZCAibWlzc2luZyBvYmplY3QiIGZvciAwezQwfSB3aGVuIGl0CisgICBlbmNvdW50ZXJzIGEgYnJva2VuIHJlZi4gIFRoZSBsYWNrIG9mIG9iamVjdCB3aG9zZSBuYW1lIGlzIDB7NDB9IGlzCisgICBub3QgdGhlIHByb2JsZW07IHRoZSByZWYgYmVpbmcgYnJva2VuIGlzLgorICAgKG1lcmdlIDUwMWNmNDcgbWgvcmVwb3J0aW5nLWJyb2tlbi1yZWZzLWZyb20tZm9yLWVhY2gtcmVmIGxhdGVyIHRvIG1haW50KS4KKworICogVmFyaW91cyBmaXhlcyBhcm91bmQgImdpdCBhbSIgdGhhdCBhcHBsaWVzIGEgcGF0Y2ggdG8gYSBoaXN0b3J5CisgICB0aGF0IGlzIG5vdCB0aGVyZSB5ZXQuCisgICAobWVyZ2UgNmVhM2I2NyBwdC9hbS1hYm9ydC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZzY2siIHVzZWQgdG8gaWdub3JlIG1pc3Npbmcgb3IgaW52YWxpZCBvYmplY3RzIHJlY29yZGVkIGluIHJlZmxvZy4KKyAgIChtZXJnZSAxOWJmNmM5IG1oL2ZzY2stcmVmbG9nLWVudHJpZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCAtLWlnbm9yZS1pZi11cHN0cmVhbSBBLi5CIiBkaWQgbm90IGxpa2UgdG8gYmUgZmVkCisgICB0YWdzIGFzIGJvdW5kYXJ5IGNvbW1pdHMuCisgICAobWVyZ2UgOWI3YTYxZCBqYy9kby1ub3QtZmVlZC10YWdzLXRvLWNsZWFyLWNvbW1pdC1tYXJrcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmV0Y2ggLS1kZXB0aD08ZGVwdGg+IiBhbmQgImdpdCBjbG9uZSAtLWRlcHRoPTxkZXB0aD4iIGlzc3VlZAorICAgYSBzaGFsbG93IHRyYW5zZmVyIHJlcXVlc3QgZXZlbiB0byBhbiB1cGxvYWQtcGFjayB0aGF0IGRvZXMgbm90CisgICBzdXBwb3J0IHRoZSBjYXBhYmlsaXR5LgorICAgKG1lcmdlIGViODZhNTAgbWUvZmV0Y2gtaW50by1zaGFsbG93LXNhZmV0eSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIiBkaWQgbm90IGV4aXQgd2l0aCBmYWlsdXJlIHdoZW4gZm9ybWF0LXBhdGNoIGl0IGludm9rZWQKKyAgIGZhaWxlZCBmb3Igd2hhdGV2ZXIgcmVhc29uLgorICAgKG1lcmdlIDYwZDcwOGIgY2IvcmViYXNlLWFtLWV4aXQtY29kZSBsYXRlciB0byBtYWludCkuCisKKyAqIEZpeCBhIHNtYWxsIGJ1ZyBpbiBvdXIgdXNlIG9mIHVtYXNrKCkgcmV0dXJuIHZhbHVlLgorICAgKG1lcmdlIDMwOTZiMmUgamsvZml4LXJlZnJlc2gtdXRpbWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiBhbmNpZW50IHRlc3QgZnJhbWV3b3JrIGVuaGFuY2VtZW50IHRvIGFsbG93IGNvbG9yIHdhcyBub3QKKyAgIGVudGlyZWx5IGNvcnJlY3Q7IHRoaXMgbWFrZXMgaXQgd29yayBldmVuIHdoZW4gdHB1dCBuZWVkcyB0byByZWFkCisgICBmcm9tIHRoZSB+Ly50ZXJtaW5mbyB1bmRlciB0aGUgdXNlcidzIHJlYWwgSE9NRSBkaXJlY3RvcnkuCisgICAobWVyZ2UgZDVjMWI3YyByaC90ZXN0LWNvbG9yLWF2b2lkLXRlcm1pbmZvLWluLW9yaWdpbmFsLWhvbWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIG1pbm9yIGJ1Z2ZpeCB3aGVuIHBhY2sgYml0bWFwIGlzIHVzZWQgd2l0aCAicmV2LWxpc3QgLS1jb3VudCIuCisgICAobWVyZ2UgYzhhNzBkMyBqay9yZXYtbGlzdC1uby1iaXRtYXAtd2hpbGUtcHJ1bmluZyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY29uZmlnIiBmYWlsZWQgdG8gdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgd2hlbiB0aGUKKyAgIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBpcyBpbmNhcGFibGUgb2YgcmVuYW1pbmcgYSBmaWxlIHRoYXQgaXMgc3RpbGwKKyAgIG9wZW4uCisgICAobWVyZ2UgN2E2NDU5MiBrYi9jb25maWctdW5tYXAtYmVmb3JlLXJlbmFtaW5nIGxhdGVyIHRvIG1haW50KS4KKworICogQXZvaWQgcG9zc2libGUgc3NpemVfdCB0byBpbnQgdHJ1bmNhdGlvbi4KKyAgIChtZXJnZSA2YzhhZmU0IG1oL3N0cmJ1Zi1yZWFkLWZpbGUtcmV0dXJucy1zc2l6ZS10IGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiB5b3Ugc2F5ICIhPEVOVEVSPiIgd2hpbGUgcnVubmluZyBzYXkgImdpdCBsb2ciLCB5b3UnZCBjb25mdXNlCisgICB5b3Vyc2VsZiBpbiB0aGUgcmVzdWx0aW5nIHNoZWxsLCB0aGF0IG1heSBsb29rIGFzIGlmIHlvdSB0b29rCisgICBjb250cm9sIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNoZWxsIHlvdSBzcGF3bmVkICJnaXQgbG9nIiBmcm9tIGJ1dAorICAgdGhhdCBpc24ndCB3aGF0IGlzIGhhcHBlbmluZy4gIFRvIHRoYXQgbmV3IHNoZWxsLCB3ZSBsZWFrZWQKKyAgIEdJVF9QQUdFUl9JTl9VU0UgZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCB3YXMgbWVhbnQgYXMgYSBsb2NhbAorICAgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBvcmlnaW5hbCAiR2l0IiBhbmQgc3VicHJvY2Vzc2VzIHRoYXQgd2FzCisgICBzcGF3bmVkIGJ5IGl0IGFmdGVyIHdlIGxhdW5jaGVkIHRoZSBwYWdlciwgd2hpY2ggY2F1c2VkIG1hbnkKKyAgICJpbnRlcmVzdGluZyIgdGhpbmdzIHRvIGhhcHBlbiwgZS5nLiAiZ2l0IGRpZmYgfCBjYXQiIHN0aWxsIHBhaW50cworICAgaXRzIG91dHB1dCBpbiBjb2xvciBieSBkZWZhdWx0LgorCisgICBTdG9wIGxlYWtpbmcgdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgcGFnZXIncyBoYWxmIG9mIHRoZQorICAgZm9yazsgd2Ugb25seSBuZWVkIGl0IG9uICJHaXQiIHNpZGUgd2hlbiB3ZSBzcGF3biB0aGUgcGFnZXIuCisgICAobWVyZ2UgMTI0YjUxOSBqYy91bmV4cG9ydC1naXQtcGFnZXItaW4tdXNlLWluLXBhZ2VyIGxhdGVyIHRvIG1haW50KS4KKworICogQWJhbmRvbmluZyBhbiBhbHJlYWR5IGFwcGxpZWQgY2hhbmdlIGluICJnaXQgcmViYXNlIC1pIiB3aXRoCisgICAiLS1jb250aW51ZSIgbGVmdCBDSEVSUllfUElDS19IRUFEIGFuZCBjb25mdXNlZCBsYXRlciBzdGVwcy4KKyAgIChtZXJnZSAwZTBhZmY0IGpzL3JlYmFzZS1pLWNsZWFuLXVwLXVwb24tY29udGludWUtdG8tc2tpcCBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIHVzZWQgdG8gYXNrIGxpYkNVUkwgdG8gdXNlIHRoZSBtb3N0IHNlY3VyZSBhdXRoZW50aWNhdGlvbiBtZXRob2QKKyAgIGF2YWlsYWJsZSB3aGVuIHRhbGtpbmcgdG8gYW4gSFRUUCBwcm94eSBvbmx5IHdoZW4gd2Ugd2VyZSB0b2xkIHRvCisgICB0YWxrIHRvIG9uZSB2aWEgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuICBXZSBub3cgYXNrIGxpYkNVUkwgdG8KKyAgIGFsd2F5cyB1c2UgdGhlIG1vc3Qgc2VjdXJlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCwgYmVjYXVzZSB0aGUgdXNlcgorICAgY2FuIHRlbGwgbGliQ1VSTCB0byB1c2UgYW4gSFRUUCBwcm94eSB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIHdpdGhvdXQgdXNpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisgICAobWVyZ2UgNTg0MTUyMCBldC9odHRwLXByb3h5YXV0aCBsYXRlciB0byBtYWludCkuCisKKyAqIEEgZml4IHRvIGEgbWlub3IgcmVncmVzc2lvbiB0byAiZ2l0IGZzY2siIGluIHYyLjIgZXJhIHRoYXQgc3RhcnRlZAorICAgY29tcGxhaW5pbmcgYWJvdXQgYSBib2R5LWxlc3MgdGFnIG9iamVjdCB3aGVuIGl0IGxhY2tzIGEgc2VwYXJhdG9yCisgICBlbXB0eSBsaW5lIGFmdGVyIGl0cyBoZWFkZXIgdG8gc2VwYXJhdGUgaXQgd2l0aCBhIG5vbi1leGlzdGVudCBib2R5LgorICAgKG1lcmdlIDg0ZDE4YzAgamMvZnNjay1yZXRpcmUtcmVxdWlyZS1lb2ggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlIGNsZWFudXBzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisgICAobWVyZ2UgMDI2OWY5NiBtbS91c2FnZS1sb2ctbC1jYW4tdGFrZS1yZWdleCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjRmMjU4OSBuZC90MTUwOS1jaHJvb3QtdGVzdCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDIwMWExZSBzYi90ZXN0LWJpdG1hcC1mcmVlLWF0LWVuZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDViZmM3ZCBzYi9saW5lLWxvZy1wbHVnLXBhaXJkaWZmLWxlYWsgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDg0NmU1ZGYgcHQveGRnLWNvbmZpZy1wYXRoIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxMTU0YWE0IGpjL3BsdWctZm10LW1lcmdlLW1zZy1sZWFrIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzMTliNjc4IGprL3NoYTEtZmlsZS1yZWR1Y2UtdXNlbGVzcy13YXJuaW5ncyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOWEzNWMxNCBmZy9kb2N1bWVudC1jb21taXQtbWVzc2FnZS1zdHJpcHBpbmcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGJiZjQzMWMgcHMvZG9jLXBhY2tmaWxlLXZzLXBhY2stZmlsZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzA5YTllMyBqay9za2lwLWh0dHAtdGVzdHMtdW5kZXItbm8tY3VybCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgY2NkNTkzYyBkbC9icmFuY2gtZXJyb3ItbWVzc2FnZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjI1NzBiNiBycy9qYW5pdG9yaWFsIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1YzJhNTgxIG1jL2NvbW1pdC1kb2MtZ3JhbW1vZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjZTQxNzIwIGFoL3VzYWdlLXN0cmluZ3MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGU2YTI2OGMgc2IvZ2xvc3Nhcnktc3VibW9kdWxlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlYzQ4YTc2IHNiL3N1Ym1vZHVsZS1kb2MtaW50cm8gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE0ZjhiOWIgamsvY2xvbmUtZGlzc29jaWF0ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDU1YzdlOSBzYi9wYWNrLXByb3RvY29sLW1lbnRpb24tc21hcnQtaHR0cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgN2MzN2E1ZCBqay9tYWtlLWZpeC1kZXBlbmRlbmNpZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZjMGFhMzkgc2cvbWVyZ2Utc3VtbWFyeS1jb25maWcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDMyOWFmNmMgcHQvdDAzMDItbmVlZHMtc2FuaXR5IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkNjE0ZjA3IGZrL2RvYy1mb3JtYXQtcGF0Y2gtdm4gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDcyZGJiMzYgc2cvY29tcGxldGlvbi1jb21taXQtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTY1NGViMiBlcy91dGY4LXN0dXBpZC1jb21waWxlci13b3JrYXJvdW5kIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzNGI5MzVjIGVzL29zeC1oZWFkZXItcG9sbHV0ZXMtbWFzay1tYWNybyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYWI3ZmFkZSBqYy9wcm9tcHQtZG9jdW1lbnQtcHMxLXN0YXRlLXNlcGFyYXRvciBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjVmNjAwZSBtbS9kZXNjcmliZS1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDgzZmUxNjcgbW0vYnJhbmNoLWRvYy11cGRhdGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3NWQyZTVhIGxzL2hpbnQtcmV2LWxpc3QtY291bnQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGVkYzhmNzEgY2Ivc3VidHJlZS10ZXN0cy11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDUzMzBlNmUgc2IvcDUzMTAtYW5kLWNoYWluIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjNGFjNTI1IHRiL2NoZWNrb3V0LWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTQ3OWM1ZiBqay9wcmV0dHktZW5jb2RpbmctZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3ZTgzN2M2IHNzL2Nsb25lLWd1ZXNzLWRpci1uYW1lLXNpbXBsaWZ5IGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcwNTUzMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjEudHh0CkBAIC0wLDAgKzEsNjUgQEAKK0dpdCB2Mi41LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjUKKy0tLS0tLS0tLS0tLS0tLS0KKworICogUnVubmluZyBhbiBhbGlhc2VkIGNvbW1hbmQgZnJvbSBhIHN1YmRpcmVjdG9yeSB3aGVuIHRoZSAuZ2l0IHRoaW5nCisgICBpbiB0aGUgd29ya2luZyB0cmVlIGlzIGEgZ2l0ZmlsZSBwb2ludGluZyBlbHNld2hlcmUgZGlkIG5vdCB3b3JrLgorCisgKiBPZnRlbiBhIGZhc3QtaW1wb3J0IHN0cmVhbSBidWlsZHMgYSBuZXcgY29tbWl0IG9uIHRvcCBvZiB0aGUKKyAgIHByZXZpb3VzIGNvbW1pdCBpdCBidWlsdCwgYW5kIGl0IG9mdGVuIHVuY29uZGl0aW9uYWxseSBlbWl0cyBhCisgICAiZnJvbSIgY29tbWFuZCB0byBzcGVjaWZ5IHRoZSBmaXJzdCBwYXJlbnQsIHdoaWNoIGNhbiBiZSBvbWl0dGVkIGluCisgICBzdWNoIGEgY2FzZS4gIFRoaXMgY2F1c2VkIGZhc3QtaW1wb3J0IHRvIGZvcmdldCB0aGUgdHJlZSBvZiB0aGUKKyAgIHByZXZpb3VzIGNvbW1pdCBhbmQgdGhlbiByZS1yZWFkIGl0IGZyb20gc2NyYXRjaCwgd2hpY2ggd2FzCisgICBpbmVmZmljaWVudC4gIE9wdGltaXplIGZvciB0aGlzIGNvbW1vbiBjYXNlLgorCisgKiBUaGUgInJldi1wYXJzZSAtLXBhcnNlb3B0IiBtb2RlIHBhcnNlZCB0aGUgb3B0aW9uIHNwZWNpZmljYXRpb24KKyAgIGFuZCB0aGUgYXJndW1lbnQgaGludCBpbiBhIHN0cmFuZ2Ugd2F5IHRvIGFsbG93ICc9JyBhbmQgb3RoZXIKKyAgIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgb3B0aW9uIG5hbWUgd2hpbGUgZm9yYmlkZGluZyB0aGVtIGZyb20KKyAgIHRoZSBhcmd1bWVudCBoaW50LiAgVGhpcyBtYWRlIGl0IGltcG9zc2libGUgdG8gZGVmaW5lIGFuIG9wdGlvbgorICAgbGlrZSAiLS1wYWlyIDxrZXk+PTx2YWx1ZT4iIHdpdGggInBhaXI9a2V5PXZhbHVlIiBzcGVjaWZpY2F0aW9uLAorICAgd2hpY2ggaW5zdGVhZCB3b3VsZCBoYXZlIGRlZmluZWQgYSAiLS1wYWlyPWtleSA8dmFsdWU+IiBvcHRpb24uCisKKyAqIEEgInJlYmFzZSIgcmVwbGF5cyBjaGFuZ2VzIG9mIHRoZSBsb2NhbCBicmFuY2ggb24gdG9wIG9mIHNvbWV0aGluZworICAgZWxzZSwgYXMgc3VjaCB0aGV5IGFyZSBwbGFjZWQgaW4gc3RhZ2UgIzMgYW5kIHJlZmVycmVkIHRvIGFzCisgICAidGhlaXJzIiwgd2hpbGUgdGhlIGNoYW5nZXMgaW4gdGhlIG5ldyBiYXNlLCB0eXBpY2FsbHkgYSBmb3JlaWduCisgICB3b3JrLCBhcmUgcGxhY2VkIGluIHN0YWdlICMyIGFuZCByZWZlcnJlZCB0byBhcyAib3VycyIuICBDbGFyaWZ5CisgICB0aGUgImNoZWNrb3V0IC0tb3Vycy8tLXRoZWlycyIuCisKKyAqIEFuIGV4cGVyaW1lbnRhbCAidW50cmFja2VkIGNhY2hlIiBmZWF0dXJlIHVzZWQgdW5hbWUoMikgaW4gYQorICAgc2xpZ2h0bHkgdW5wb3J0YWJsZSB3YXkuCisKKyAqICJzcGFyc2UgY2hlY2tvdXQiIG1pc2JlaGF2ZWQgZm9yIGEgcGF0aCB0aGF0IGlzIGV4Y2x1ZGVkIGZyb20gdGhlCisgICBjaGVja291dCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGJyYW5jaGVzIHRoYXQgZGlmZmVyIGF0IHRoZSBwYXRoLgorCisgKiBUaGUgbG93LWxldmVsICJnaXQgc2VuZC1wYWNrIiBkaWQgbm90IGhvbm9yICd1c2VyLnNpZ25pbmdrZXknCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHdoZW4gc2VuZGluZyBhIHNpZ25lZC1wdXNoLgorCisgKiBBbiBhdHRlbXB0IHRvIGRlbGV0ZSBhIHJlZiBieSBwdXNoaW5nIGludG8gYSByZXBvc2l0b3J5IHdob3NlIEhFQUQKKyAgIHN5bWJvbGljIHJlZmVyZW5jZSBwb2ludHMgYXQgYW4gdW5ib3JuIGJyYW5jaCB0aGF0IGNhbm5vdCBiZQorICAgY3JlYXRlZCBkdWUgdG8gcmVmIEQvRiBjb25mbGljdCAoZS5nLiByZWZzL2hlYWRzL2EvYiBleGlzdHMsIEhFQUQKKyAgIHBvaW50cyBhdCByZWZzL2hlYWRzL2EpIGZhaWxlZC4KKworICogImdpdCBzdWJ0cmVlIiAoaW4gY29udHJpYi8pIGRlcGVuZGVkIG9uICJnaXQgbG9nIiBvdXRwdXQgdG8gYmUKKyAgIHN0YWJsZSwgd2hpY2ggd2FzIGEgbm8tbm8uICBBcHBseSBhIHdvcmthcm91bmQgdG8gZm9yY2UgYQorICAgcGFydGljdWxhciBkYXRlIGZvcm1hdC4KKworICogImdpdCBjbG9uZSAkVVJMIiBpbiByZWNlbnQgcmVsZWFzZXMgb2YgR2l0IGNvbnRhaW5zIGEgcmVncmVzc2lvbiBpbgorICAgdGhlIGNvZGUgdGhhdCBpbnZlbnRzIGEgbmV3IHJlcG9zaXRvcnkgbmFtZSBpbmNvcnJlY3RseSBiYXNlZCBvbgorICAgdGhlICRVUkwuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBkYjJlMjIwIGprL2d1ZXNzLXJlcG8tbmFtZS1yZWdyZXNzaW9uLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFJ1bm5pbmcgdGVzdHMgd2l0aCB0aGUgIi14IiBvcHRpb24gdG8gbWFrZSB0aGVtIHZlcmJvc2UgaGFkIHNvbWUKKyAgIHVucGxlYXNhbnQgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMgb2YgdGhlIHRlc3Qgc3VpdGUuCisgICAobWVyZ2UgOWI1ZmU3OCBqay90ZXN0LXdpdGgteCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcHVsbCIgaW4gcmVjZW50IHJlbGVhc2VzIG9mIEdpdCBoYXMgYSByZWdyZXNzaW9uIGluIHRoZSBjb2RlCisgICB0aGF0IGFsbG93cyBjdXN0b20gcGF0aCB0byB0aGUgLS11cGxvYWQtcGFjaz08cHJvZ3JhbT4uICBUaGlzIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIHBpcGUoKSBlbXVsYXRpb24gdXNlZCBpbiBHaXQgZm9yIFdpbmRvd3MgbG9va2VkIGF0IGEgd3JvbmcgdmFyaWFibGUKKyAgIHdoZW4gY2hlY2tpbmcgZm9yIGFuIGVycm9yIGZyb20gYW4gX29wZW5fb3NmaGFuZGxlKCkgY2FsbC4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNzQ5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4yLnR4dApAQCAtMCwwICsxLDYzIEBACitHaXQgdjIuNS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi41LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGluaXQgZW1wdHkgJiYgZ2l0IC1DIGVtcHR5IGxvZyIgc2FpZCAiYmFkIGRlZmF1bHQgcmV2aXNpb24gJ0hFQUQnIiwKKyAgIHdoaWNoIHdhcyBmb3VuZCB0byBiZSBhIGJpdCBjb25mdXNpbmcgdG8gbmV3IHVzZXJzLgorCisgKiBUaGUgImludGVycHJldC10cmFpbGVycyIgaGVscGVyIG1pc3Rvb2sgYSBtdWx0aS1wYXJhZ3JhcGggdGl0bGUgb2YKKyAgIGEgY29tbWl0IGxvZyBtZXNzYWdlIHdpdGggYSBjb2xvbiBpbiBpdCBhcyB0aGUgZW5kIG9mIHRoZSB0cmFpbGVyCisgICBibG9jay4KKworICogV2hlbiByZS1wcmltaW5nIHRoZSBjYWNoZS10cmVlIG9wcG9ydHVuaXN0aWNhbGx5IHdoaWxlIGNvbW1pdHRpbmcKKyAgIHRoZSBpbi1jb3JlIGluZGV4IGFzLWlzLCB3ZSBtaXN0YWtlbmx5IGludmFsaWRhdGVkIHRoZSBpbi1jb3JlCisgICBpbmRleCB0b28gYWdncmVzc2l2ZWx5LCBjYXVzaW5nIHRoZSBleHBlcmltZW50YWwgc3BsaXQtaW5kZXggY29kZQorICAgdG8gdW5uZWNlc3NhcmlseSByZXdyaXRlIHRoZSBvbi1kaXNrIGluZGV4IGZpbGUocykuCisKKyAqICJnaXQgYXJjaGl2ZSIgZGlkIG5vdCB1c2UgemlwNjQgZXh0ZW5zaW9uIHdoZW4gY3JlYXRpbmcgYW4gYXJjaGl2ZQorICAgd2l0aCBtb3JlIHRoYW4gNjRrIGVudHJpZXMsIHdoaWNoIG5vYm9keSBzaG91bGQgbmVlZCwgcmlnaHQgOy0pPworCisgKiBUaGUgY29kZSBpbiAibXVsdGlwbGUtd29ya3RyZWUiIHN1cHBvcnQgdGhhdCBhdHRlbXB0ZWQgdG8gcmVjb3ZlcgorICAgZnJvbSBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgdXBkYXRlZCBhbiBpbmNvcnJlY3QgZmlsZS4KKworICogImdpdCByZXYtbGlzdCIgZG9lcyBub3QgdGFrZSAiLS1ub3RlcyIgb3B0aW9uLCBidXQgZGlkIG5vdCBjb21wbGFpbgorICAgd2hlbiBvbmUgaXMgZ2l2ZW4uCisKKyAqIEJlY2F1c2UgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGRvZXMgbm90IGFsbG93ICJhbGlhcy4wZm9vIiBhbmQKKyAgICJwYWdlci4wZm9vIiBhcyB0aGUgY29uZmlndXJhdGlvbiBrZXksIHRoZSB1c2VyIGNhbm5vdCB1c2UgJzBmb28nCisgICBhcyBhIGN1c3RvbSBjb21tYW5kIG5hbWUgYW55d2F5LCBidXQgImdpdCAwZm9vIiB0cmllZCB0byBsb29rIHRoZXNlCisgICBrZXlzIHVwIGFuZCBlbWl0dGVkIHVzZWxlc3Mgd2FybmluZ3MgYmVmb3JlIHNheWluZyAnMGZvbyBpcyBub3QgYQorICAgZ2l0IGNvbW1hbmQnLiAgVGhlc2Ugd2FybmluZyBtZXNzYWdlcyBoYXZlIGJlZW4gc3F1ZWxjaGVkLgorCisgKiBXZSByZWNlbnRseSByZXdyb3RlIG9uZSBvZiB0aGUgYnVpbGQgc2NyaXB0cyBpbiBQZXJsLCB3aGljaCBtYWRlIGl0CisgICBuZWNlc3NhcnkgdG8gaGF2ZSBQZXJsIHRvIGJ1aWxkIEdpdC4gIFJlZHVjZWQgUGVybCBkZXBlbmRlbmN5IGJ5CisgICByZXdyaXRpbmcgaXQgYWdhaW4gdXNpbmcgc2VkLgorCisgKiB0MTUwOSB0ZXN0IHRoYXQgcmVxdWlyZXMgYSBkZWRpY2F0ZWQgVk0gZW52aXJvbm1lbnQgaGFkIHNvbWUKKyAgIGJpdHJvdCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBzdHJidWZfcmVhZCgpIHVzZWQgdG8gaGF2ZSBvbmUgZXh0cmEgaXRlcmF0aW9uIChhbmQgYW4gdW5uZWNlc3NhcnkKKyAgIHN0cmJ1Zl9ncm93KCkgb2YgOGtCKSwgd2hpY2ggd2FzIGVsaW1pbmF0ZWQuCisKKyAqIFRoZSBjb2RlcGF0aCB0byBwcm9kdWNlIGVycm9yIG1lc3NhZ2VzIGhhZCBhIGhhcmQtY29kZWQgbGltaXQgdG8KKyAgIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlLCBwcmltYXJpbHkgdG8gYXZvaWQgbWVtb3J5IGFsbG9jYXRpb24gd2hpbGUKKyAgIGNhbGxpbmcgZGllKCkuCisKKyAqIFdoZW4gdHJ5aW5nIHRvIHNlZSB0aGF0IGFuIG9iamVjdCBkb2VzIG5vdCBleGlzdCwgYSBzdGF0ZSBlcnJubworICAgbGVha2VkIGZyb20gb3VyICJmaXJzdCB0cnkgdG8gb3BlbiBhIHBhY2tmaWxlIHdpdGggT19OT0FUSU1FIGFuZAorICAgdGhlbiBpZiBpdCBmYWlscyByZXRyeSB3aXRob3V0IGl0IiBsb2dpYyBvbiBhIHN5c3RlbSB0aGF0IHJlZnVzZXMKKyAgIE9fTk9BVElNRS4gIFRoaXMgY29uZnVzZWQgdXMgYW5kIGNhdXNlZCB1cyB0byBkaWUsIHNheWluZyB0aGF0IHRoZQorICAgcGFja2ZpbGUgaXMgdW5yZWFkYWJsZSwgd2hlbiB3ZSBzaG91bGQgaGF2ZSBqdXN0IHJlcG9ydGVkIHRoYXQgdGhlCisgICBvYmplY3QgZG9lcyBub3QgZXhpc3QgaW4gdGhhdCBwYWNrZmlsZSB0byB0aGUgY2FsbGVyLgorCisgKiBBbiBvZmYtYnktb25lIGVycm9yIG1hZGUgImdpdCByZW1vdGUiIHRvIG1pc2hhbmRsZSBhIHJlbW90ZSB3aXRoIGEKKyAgIHNpbmdsZSBsZXR0ZXIgbmlja25hbWUuCisKKyAqIEEgaGFuZGZ1bCBvZiBjb2RlcGF0aHMgdGhhdCB1c2VkIHRvIHVzZSBmaXhlZC1zaXplZCBhcnJheXMgdG8gaG9sZAorICAgcGF0aG5hbWVzIGhhdmUgYmVlbiBjb3JyZWN0ZWQgdG8gdXNlIHN0cmJ1ZiBhbmQgb3RoZXIgbWVjaGFuaXNtcyB0bworICAgYWxsb3cgbG9uZ2VyIHBhdGhuYW1lcyB3aXRob3V0IGZlYXJpbmcgb3ZlcmZsb3dzLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE0MzY4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjMudHh0CkBAIC0wLDAgKzEsMTcgQEAKK0dpdCB2Mi41LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjUuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBleHBlcmltZW50YWwgdW50cmFja2VkLWNhY2hlIGZlYXR1cmUgd2VyZSBidWdneSB3aGVuIHBhdGhzIHdpdGgKKyAgIGEgZmV3IGxldmVscyBvZiBzdWJkaXJlY3RvcmllcyBhcmUgaW52b2x2ZWQuCisKKyAqIFJlY2VudCB2ZXJzaW9ucyBvZiBzY3JpcHRlZCAiZ2l0IGFtIiBoYXMgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uCisgICBpbiAiZ2l0IGFtIC0tc2tpcCIgY29kZXBhdGgsIHdoaWNoIG5vIGxvbmdlciBleGlzdHMgaW4gdGhlCisgICBidWlsdC1pbiB2ZXJzaW9uIG9uIHRoZSAnbWFzdGVyJyBmcm9udC4gIEZpeCB0aGUgcmVncmVzc2lvbiBpbgorICAgdGhlIGxhc3Qgc2NyaXB0ZWQgdmVyc2lvbiB0aGF0IGFwcGVhciBpbiAyLjUueCBtYWludGVuYW5jZSB0cmFjaworICAgYW5kIG9sZGVyLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhMmY5MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjQudHh0CkBAIC0wLDAgKzEsMTggQEAKK0dpdCB2Mi41LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjUuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIHhkaWZmIGNvZGUgd2UgdXNlIHRvIGdlbmVyYXRlIGRpZmZzIGlzIG5vdCBwcmVwYXJlZCB0byBoYW5kbGUKKyAgIGV4dHJlbWVseSBsYXJnZSBmaWxlcy4gIEl0IHVzZXMgImludCIgaW4gbWFueSBwbGFjZXMsIHdoaWNoIGNhbgorICAgb3ZlcmZsb3cgaWYgd2UgaGF2ZSBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mIGxpbmVzIG9yIGV2ZW4gYnl0ZXMgaW4KKyAgIG91ciBpbnB1dCBmaWxlcywgZm9yIGV4YW1wbGUuICBDYXAgdGhlIGlucHV0IHNpemUgdG8gc29tZXdoZXJlCisgICBhcm91bmQgMUdCIGZvciBub3cuCisKKyAqIFNvbWUgcHJvdG9jb2xzIChsaWtlIGdpdC1yZW1vdGUtZXh0KSBjYW4gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZQorICAgZm91bmQgaW4gdGhlIFVSTC4gIFRoZSBVUkxzIHRoYXQgc3VibW9kdWxlcyB1c2UgbWF5IGNvbWUgZnJvbQorICAgYXJiaXRyYXJ5IHNvdXJjZXMgKGUuZy4sIC5naXRtb2R1bGVzIGZpbGVzIGluIGEgcmVtb3RlCisgICByZXBvc2l0b3J5KSwgYW5kIGNhbiBodXJ0IHRob3NlIHdobyBibGluZGx5IGVuYWJsZSByZWN1cnNpdmUKKyAgIGZldGNoLiAgUmVzdHJpY3QgdGhlIGFsbG93ZWQgcHJvdG9jb2xzIHRvIHdlbGwga25vd24gYW5kIHNhZmUKKyAgIG9uZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZWFlOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS41LnR4dApAQCAtMCwwICsxLDExIEBACitHaXQgdjIuNS41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi41LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCdWdmaXggcGF0Y2hlcyB3ZXJlIGJhY2twb3J0ZWQgZnJvbSB0aGUgJ21hc3RlcicgZnJvbnQgdG8gcGx1ZyBoZWFwCisgICBjb3JydXB0aW9uIGhvbGVzLCB0byBjYXRjaCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBjb21wdXRhdGlvbiBvZgorICAgcGF0aG5hbWUgbGVuZ3RocywgYW5kIHRvIGdldCByaWQgb2YgdGhlIG5hbWVfcGF0aCBBUEkuICBCb3RoIG9mCisgICB0aGVzZSB3b3VsZCBoYXZlIHJlc3VsdGVkIGluIHdyaXRpbmcgb3ZlciBhbiB1bmRlci1hbGxvY2F0ZWQgYnVmZmVyCisgICB3aGVuIGZvcm11bGF0aW5nIHBhdGhuYW1lcyB3aGlsZSB0cmVlIHRyYXZlcnNhbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNkMDI1YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjYudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0dpdCB2Mi41LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjUuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQtc2hlbGwiIHJlamVjdHMgYSByZXF1ZXN0IHRvIHNlcnZlIGEgcmVwb3NpdG9yeSB3aG9zZSBuYW1lCisgICBiZWdpbnMgd2l0aCBhIGRhc2gsIHdoaWNoIG1ha2VzIGl0IG5vIGxvbmdlciBwb3NzaWJsZSB0byBnZXQgaXQKKyAgIGNvbmZ1c2VkIGludG8gc3Bhd25pbmcgc2VydmljZSBwcm9ncmFtcyBsaWtlICJnaXQtdXBsb2FkLXBhY2siIHdpdGgKKyAgIGFuIG9wdGlvbiBsaWtlICItLWhlbHAiLCB3aGljaCBpbiB0dXJuIHdvdWxkIHNwYXduIGFuIGludGVyYWN0aXZlCisgICBwYWdlciwgaW5zdGVhZCBvZiB3b3JraW5nIHdpdGggdGhlIHJlcG9zaXRvcnkgdXNlciBhc2tlZCB0byBhY2Nlc3MKKyAgIChpLmUuIHRoZSBvbmUgd2hvc2UgbmFtZSBpcyAiLS1oZWxwIikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyODhhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi4wLnR4dApAQCAtMCwwICsxLDM3MCBAQAorR2l0IDIuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2Mi41CistLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEFuIGFzdGVyaXNrIGFzIGEgc3Vic3RyaW5nIChhcyBvcHBvc2VkIHRvIHRoZSBlbnRpcmV0eSkgb2YgYSBwYXRoCisgICBjb21wb25lbnQgZm9yIGJvdGggc2lkZSBvZiBhIHJlZnNwZWMsIGUuZy4KKyAgICJyZWZzL2hlYWRzL28qOnJlZnMvcmVtb3Rlcy9oZWFkcy9pKiIsIGlzIG5vdyBhbGxvd2VkLgorCisgKiBOZXcgdXNlcmRpZmYgcGF0dGVybiBkZWZpbml0aW9uIGZvciBmb3VudGFpbiBzY3JlZW53cml0aW5nIG1hcmt1cAorICAgZm9ybWF0IGhhcyBiZWVuIGFkZGVkLgorCisgKiAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgbGVhcm5lZCBhIG5ldyAiLS1kYXRlPWZvcm1hdDouLi4iIG9wdGlvbiB0bworICAgZm9ybWF0IHRpbWVzdGFtcHMgdXNpbmcgc3lzdGVtJ3Mgc3RyZnRpbWUoMykuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIGxlYXJuZWQgdG8gcmVzcG9uZCB0byB0aGUgZ2V0LW1hcmsgY29tbWFuZCB2aWEKKyAgIGl0cyBjYXQtYmxvYi1mZCBpbnRlcmZhY2UuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkICJkcm9wIGNvbW1pdC1vYmplY3QtbmFtZSBzdWJqZWN0IiBjb21tYW5kCisgICBhcyBhbm90aGVyIHdheSB0byBza2lwIHJlcGxheWluZyBvZiBhIGNvbW1pdC4KKworICogQSBuZXcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gZW5hYmxlICItLWZvbGxvdyIgYXV0b21hdGljYWxseQorICAgd2hlbiAiZ2l0IGxvZyIgaXMgcnVuIHdpdGggb25lIHBhdGhzcGVjIGFyZ3VtZW50LgorCisgKiAiZ2l0IHN0YXR1cyIgbGVhcm5lZCB0byBzaG93IGEgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKKyAgIHRoZSAicmViYXNlIC1pIiBzZXNzaW9uIGluIHByb2dyZXNzLgorCisgKiAiZ2l0IGNhdC1maWxlIiBsZWFybmVkICItLWJhdGNoLWFsbC1vYmplY3RzIiBvcHRpb24gdG8gZW51bWVyYXRlIGFsbAorICAgYXZhaWxhYmxlIG9iamVjdHMgaW4gdGhlIHJlcG9zaXRvcnkgbW9yZSBxdWlja2x5IHRoYW4gInJldi1saXN0CisgICAtLWFsbCAtLW9iamVjdHMiICh0aGUgb3V0cHV0IGluY2x1ZGVzIHVucmVhY2hhYmxlIG9iamVjdHMsIHRob3VnaCkuCisKKyAqICJnaXQgZnNjayIgbGVhcm5lZCB0byBpZ25vcmUgZXJyb3JzIG9uIGEgc2V0IG9mIGtub3duLXRvLWJlLWJhZAorICAgb2JqZWN0cywgYW5kIGFsc28gYWxsb3dzIHRoZSB3YXJuaW5nIGxldmVscyBvZiB2YXJpb3VzIGtpbmRzIG9mCisgICBub24tY3JpdGljYWwgYnJlYWthZ2VzIHRvIGJlIHR3ZWFrZWQuCisKKyAqICJnaXQgcmViYXNlIC1pIidzIGxpc3Qgb2YgdG9kbyBpcyBtYWRlIGNvbmZpZ3VyYWJsZS4KKworICogImdpdCBzZW5kLWVtYWlsIiBub3cgcGVyZm9ybXMgYWxpYXMtZXhwYW5zaW9uIG9uIG5hbWVzIHRoYXQgYXJlCisgICBnaXZlbiB2aWEgLS1jY2NtZCwgZXRjLgorCisgKiBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBHSVRfUkVQTEFDRV9SRUZfQkFTRSB0ZWxscyBHaXQgdG8gbG9vayBpbnRvCisgICByZWZzIGhpZXJhcmNoeSBvdGhlciB0aGFuIHJlZnMvcmVwbGFjZS8gZm9yIHRoZSBvYmplY3QgcmVwbGFjZW1lbnQKKyAgIGRhdGEuCisKKyAqIEFsbG93IHVudHJhY2tlZCBjYWNoZSAoZXhwZXJpbWVudGFsKSB0byBiZSB1c2VkIHdoZW4gc3BhcnNlCisgICBjaGVja291dCAoZXhwZXJpbWVudGFsKSBpcyBhbHNvIGluIHVzZS4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiBoYXMgYmVlbiB0YXVnaHQgdG8gcGF5IGF0dGVudGlvbiB0bworICAgcmViYXNlLmF1dG9zdGFzaCBjb25maWd1cmF0aW9uLgorCisgKiBUaGUgY29tbWFuZC1saW5lIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgaGFzIGJlZW4gdXBkYXRlZC4KKworICogQSBuZWdhdGl2ZSAhcmVmIGVudHJ5IGluIG11bHRpLXZhbHVlIHRyYW5zZmVyLmhpZGVSZWZzCisgICBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkIHRvIHNheSAiZG9uJ3QgaGlkZSB0aGlzIG9uZSIuCisKKyAqIEFmdGVyICJnaXQgYW0iIHdpdGhvdXQgIi0zIiBzdG9wcywgcnVubmluZyAiZ2l0IGFtIC0zIiBwYXlzIGF0dGVudGlvbgorICAgdG8gIi0zIiBvbmx5IGZvciB0aGUgcGF0Y2ggdGhhdCBjYXVzZWQgdGhlIG9yaWdpbmFsIGludm9jYXRpb24KKyAgIHRvIHN0b3AuCisKKyAqIFdoZW4gbGlua2VkIHdvcmt0cmVlIGlzIHVzZWQsIHNpbXVsdGFuZW91cyAibm90ZXMgbWVyZ2UiIGluc3RhbmNlcworICAgZm9yIHRoZSBzYW1lIHJlZiBpbiByZWZzL25vdGVzLyogYXJlIHByZXZlbnRlZCBmcm9tIHN0b21waW5nIG9uCisgICBlYWNoIG90aGVyLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGxlYXJuZWQgYSBuZXcgb3B0aW9uIC0tc210cC1hdXRoIHRvIGxpbWl0IHRoZSBTTVRQCisgICBBVVRIIG1lY2hhbmlzbXMgdG8gYmUgdXNlZCB0byBhIHN1YnNldCBvZiB3aGF0IHRoZSBzeXN0ZW0gbGlicmFyeQorICAgc3VwcG9ydHMuCisKKyAqIEEgbmV3IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaHR0cC5zc2xWZXJzaW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkKKyAgIHdoYXQgc3BlY2lmaWMgdmVyc2lvbiBvZiBTU0wvVExTIHRvIHVzZSB0byBtYWtlIGEgY29ubmVjdGlvbi4KKworICogImdpdCBub3RlcyBtZXJnZSIgY2FuIGJlIHRvbGQgd2l0aCAiLS1zdHJhdGVneT08aG93PiIgb3B0aW9uIGhvdyB0bworICAgYXV0b21hdGljYWxseSBoYW5kbGUgY29uZmxpY3RzOyB0aGlzIGNhbiBub3cgYmUgY29uZmlndXJlZCBieQorICAgc2V0dGluZyBub3Rlcy5tZXJnZVN0cmF0ZWd5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAqICJnaXQgbG9nIC0tY2MiIGRpZCBub3Qgc2hvdyBhbnkgcGF0Y2gsIGV2ZW4gdGhvdWdoIG1vc3Qgb2YgdGhlIHRpbWUKKyAgIHRoZSB1c2VyIG1lYW50ICJnaXQgbG9nIC0tY2MgLXAgLW0iIHRvIHNlZSBwYXRjaCBvdXRwdXQgZm9yIGNvbW1pdHMKKyAgIHdpdGggYSBzaW5nbGUgcGFyZW50LCBhbmQgY29tYmluZWQgZGlmZiBmb3IgbWVyZ2UgY29tbWl0cy4gIFRoZQorICAgY29tbWFuZCBpcyB0YXVnaHQgdG8gRFdJTSAiLS1jYyIgKHdpdGhvdXQgIi0tcmF3IiBhbmQgb3RoZXIgZm9ybXMKKyAgIG9mIG91dHB1dCBzcGVjaWZpY2F0aW9uKSB0byAiLS1jYyAtcCAtbSIuCisKKyAqICJnaXQgY29uZmlnIC0tbGlzdCIgb3V0cHV0IHdhcyBoYXJkIHRvIHBhcnNlIHdoZW4gdmFsdWVzIGNvbnNpc3Qgb2YKKyAgIG11bHRpcGxlIGxpbmVzLiAgIi0tbmFtZS1vbmx5IiBvcHRpb24gaXMgYWRkZWQgdG8gaGVscCB0aGlzLgorCisgKiBBIGhhbmRmdWwgb2YgdXNhYmlsaXR5ICYgY29zbWV0aWMgZml4ZXMgdG8gZ2l0ayBhbmQgbDEwbiB1cGRhdGVzLgorCisgKiBBIGNvbXBsZXRlbHkgZW1wdHkgZS1tYWlsIGFkZHJlc3MgPD4gaXMgbm93IGFsbG93ZWQgaW4gdGhlIGF1dGhvcnMKKyAgIGZpbGUgdXNlZCBieSBnaXQtc3ZuLCB0byBtYXRjaCB0aGUgd2F5IGl0IGFjY2VwdHMgdGhlIG91dHB1dCBmcm9tCisgICBhdXRob3JzLXByb2cuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogSW4gcHJlcGFyYXRpb24gZm9yIGFsbG93aW5nIGRpZmZlcmVudCAiYmFja2VuZHMiIHRvIHN0b3JlIHRoZSByZWZzCisgICBpbiBhIHdheSBkaWZmZXJlbnQgZnJvbSB0aGUgdHJhZGl0aW9uYWwgIm9uZSByZWYgcGVyIGZpbGUgaW4KKyAgICRHSVRfRElSIG9yIGluIGEgJEdJVF9ESVIvcGFja2VkLXJlZnMgZmlsZSIgZmlsZXN5c3RlbSBzdG9yYWdlLAorICAgZGlyZWN0IGZpbGVzeXN0ZW0gYWNjZXNzIHRvIHJlZi1saWtlIHRoaW5ncyBsaWtlIENIRVJSWV9QSUNLX0hFQUQKKyAgIGZyb20gc2NyaXB0cyBhbmQgcHJvZ3JhbXMgaGFzIGJlZW4gcmVkdWNlZC4KKworICogQ29tcHV0YXRpb24gb2YgdW50cmFja2VkIHN0YXR1cyBpbmRpY2F0b3IgYnkgYmFzaCBwcm9tcHQKKyAgIHNjcmlwdCAoaW4gY29udHJpYi8pIGhhcyBiZWVuIG9wdGltaXplZC4KKworICogTWVtb3J5IHVzZSByZWR1Y3Rpb24gd2hlbiBjb21taXQtc2xhYiBmYWNpbGl0eSBpcyB1c2VkIHRvIGFubm90YXRlCisgICBzcGFyc2VseSAod2hpY2ggaXMgbm90IHJlY29tbWVuZGVkIGluIHRoZSBmaXJzdCBwbGFjZSkuCisKKyAqIENsZWFuIHVwIHJlZnMgQVBJIGFuZCBtYWtlICJnaXQgY2xvbmUiIGxlc3MgaW50aW1hdGUgd2l0aCB0aGUKKyAgIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKworICogImdpdCBwdWxsIiB3YXMgcmVpbXBsZW1lbnRlZCBpbiBDLgorCisgKiBUaGUgcGFja2V0IHRyYWNpbmcgbWFjaGluZXJ5IGFsbG93cyB0byBjYXB0dXJlIGFuIGluY29taW5nIHBhY2sKKyAgIGRhdGEgdG8gYSBmaWxlIGZvciBkZWJ1Z2dpbmcuCisKKyAqIE1vdmUgbWFjaGluZXJ5IHRvIHBhcnNlIGh1bWFuLXJlYWRhYmxlIHNjYWxlZCBudW1iZXJzIGxpa2UgMWssIDRNLAorICAgYW5kIDJHIGFzIGFuIG9wdGlvbiBwYXJhbWV0ZXIncyB2YWx1ZSBmcm9tIHBhY2stb2JqZWN0cyB0bworICAgcGFyc2Utb3B0aW9ucyBBUEksIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIG90aGVyIGNvZGVwYXRocy4KKworICogImdpdCB2ZXJpZnktdGFnIiBhbmQgImdpdCB2ZXJpZnktY29tbWl0IiBoYXZlIGJlZW4gdGF1Z2h0IHRvIHNoYXJlCisgICBtb3JlIGNvZGUsIGFuZCB0aGVuIGxlYXJuZWQgdG8gb3B0aW9uYWxseSBzaG93IHRoZSB2ZXJpZmljYXRpb24KKyAgIG1lc3NhZ2UgZnJvbSB0aGUgdW5kZXJseWluZyBHUEcgaW1wbGVtZW50YXRpb24uCisKKyAqIFZhcmlvdXMgZW5oYW5jZW1lbnRzIGFyb3VuZCAiZ2l0IGFtIiByZWFkaW5nIHBhdGNoZXMgZ2VuZXJhdGVkIGJ5CisgICBmb3JlaWduIFNDTSBoYXZlIGJlZW4gbWFkZS4KKworICogUmVmIGxpc3RpbmcgYnkgImdpdCBicmFuY2ggLWwiIGFuZCAiZ2l0IHRhZyAtbCIgY29tbWFuZHMgaGFzCisgICBzdGFydGVkIHRvIGJlIHJlYnVpbHQsIGJhc2VkIG9uIHRoZSBmb3ItZWFjaC1yZWYgbWFjaGluZXJ5LgorCisgKiBUaGUgY29kZSB0byBwZXJmb3JtIG11bHRpLXRyZWUgbWVyZ2VzIGhhcyBiZWVuIHRhdWdodCB0byByZXBvcHVsYXRlCisgICB0aGUgY2FjaGUtdHJlZSB1cG9uIGEgc3VjY2Vzc2Z1bCBtZXJnZSBpbnRvIHRoZSBpbmRleCwgc28gdGhhdAorICAgc3Vic2VxdWVudCAiZGlmZi1pbmRleCAtLWNhY2hlZCIgKGhlbmNlICJzdGF0dXMiKSBhbmQgIndyaXRlLXRyZWUiCisgICAoaGVuY2UgImNvbW1pdCIpIHdpbGwgZ28gZmFzdGVyLgorCisgICBUaGUgc2FtZSBsb2dpYyBpbiAiZ2l0IGNoZWNrb3V0IiBtYXkgbm93IGJlIHJlbW92ZWQsIGJ1dCB0aGF0IGlzIGEKKyAgIHNlcGFyYXRlIGlzc3VlLgorCisgKiBUZXN0cyB0aGF0IGFzc3VtZSBob3cgcmVmbG9ncyBhcmUgcmVwcmVzZW50ZWQgb24gdGhlIGZpbGVzeXN0ZW0gdG9vCisgICBtdWNoIGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgYW0iIGhhcyBiZWVuIHJld3JpdHRlbiBpbiAiQyIuCisKKyAqIGdpdF9wYXRoKCkgYW5kIG1rcGF0aCgpIGFyZSBoYW5keSBoZWxwZXIgZnVuY3Rpb25zIGJ1dCBpdCBpcyBlYXN5CisgICB0byBtaXN1c2UsIGFzIHRoZSBjYWxsZXJzIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBrZWVwIHRoZSBudW1iZXIgb2YKKyAgIGFjdGl2ZSByZXN1bHRzIGJlbG93IDQuICBUaGVpciB1c2VzIGhhdmUgYmVlbiByZWR1Y2VkLgorCisgKiBUaGUgImxvY2tmaWxlIiBBUEkgaGFzIGJlZW4gcmVidWlsdCBvbiB0b3Agb2YgYSBuZXcgInRlbXBmaWxlIiBBUEkuCisKKyAqIFRvIHByZXBhcmUgZm9yIGFsbG93aW5nIGEgZGlmZmVyZW50ICJyZWYiIGJhY2tlbmQgdG8gYmUgcGx1Z2dlZCBpbgorICAgdG8gdGhlIHN5c3RlbSwgdXBkYXRlX3JlZigpL2RlbGV0ZV9yZWYoKSBoYXZlIGJlZW4gdGF1Z2h0IGFib3V0CisgICByZWYtbGlrZSB0aGluZ3MgbGlrZSBNRVJHRV9IRUFEIHRoYXQgYXJlIHBlci13b3JrdHJlZSAodGhleSB3aWxsCisgICBhbHdheXMgYmUgd3JpdHRlbiB0byB0aGUgZmlsZXN5c3RlbSBpbnNpZGUgJEdJVF9ESVIpLgorCisgKiBUaGUgZ2l0bW9kdWxlcyBBUEkgdGhhdCBpcyBhY2Nlc3NlZCBmcm9tIHRoZSBDIGNvZGUgbGVhcm5lZCB0bworICAgY2FjaGUgc3R1ZmYgbGF6aWx5LgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYyLjUKKy0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2Mi41IGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSB0aGUgbWFpbnRlbmFuY2UgcmVsZWFzZXMnCitub3RlcyBmb3IgZGV0YWlscykuCisKKyAqICJnaXQgc3VidHJlZSIgKGluIGNvbnRyaWIvKSBkZXBlbmRlZCBvbiAiZ2l0IGxvZyIgb3V0cHV0IHRvIGJlCisgICBzdGFibGUsIHdoaWNoIHdhcyBhIG5vLW5vLiAgQXBwbHkgYSB3b3JrYXJvdW5kIHRvIGZvcmNlIGEKKyAgIHBhcnRpY3VsYXIgZGF0ZSBmb3JtYXQuCisgICAobWVyZ2UgZTdhYWM0NCBkYS9zdWJ0cmVlLWRhdGUtY29uZnVzaW9uIGxhdGVyIHRvIG1haW50KS4KKworICogQW4gYXR0ZW1wdCB0byBkZWxldGUgYSByZWYgYnkgcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeSB3aG9zZSBIRUFECisgICBzeW1ib2xpYyByZWZlcmVuY2UgcG9pbnRzIGF0IGFuIHVuYm9ybiBicmFuY2ggdGhhdCBjYW5ub3QgYmUKKyAgIGNyZWF0ZWQgZHVlIHRvIHJlZiBEL0YgY29uZmxpY3QgKGUuZy4gcmVmcy9oZWFkcy9hL2IgZXhpc3RzLCBIRUFECisgICBwb2ludHMgYXQgcmVmcy9oZWFkcy9hKSBmYWlsZWQuCisgICAobWVyZ2UgYjExMmIxNCBqeC9kby1ub3QtY3Jhc2gtcmVjZWl2ZS1wYWNrLXdvLWhlYWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbG93LWxldmVsICJnaXQgc2VuZC1wYWNrIiBkaWQgbm90IGhvbm9yICd1c2VyLnNpZ25pbmdrZXknCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHdoZW4gc2VuZGluZyBhIHNpZ25lZC1wdXNoLgorICAgKG1lcmdlIGQ4MzBkMzkgZGIvc2VuZC1wYWNrLXVzZXItc2lnbmluZ2tleSBsYXRlciB0byBtYWludCkuCisKKyAqICJzcGFyc2UgY2hlY2tvdXQiIG1pc2JlaGF2ZWQgZm9yIGEgcGF0aCB0aGF0IGlzIGV4Y2x1ZGVkIGZyb20gdGhlCisgICBjaGVja291dCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGJyYW5jaGVzIHRoYXQgZGlmZmVyIGF0IHRoZSBwYXRoLgorICAgKG1lcmdlIDdkNzgyNDEgYXMvc3BhcnNlLWNoZWNrb3V0LXJlbW92YWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiBleHBlcmltZW50YWwgInVudHJhY2tlZCBjYWNoZSIgZmVhdHVyZSB1c2VkIHVuYW1lKDIpIGluIGEKKyAgIHNsaWdodGx5IHVucG9ydGFibGUgd2F5LgorICAgKG1lcmdlIDEwMGU0MzMgY2IvdW5hbWUtaW4tdW50cmFja2VkIGxhdGVyIHRvIG1haW50KS4KKworICogQSAicmViYXNlIiByZXBsYXlzIGNoYW5nZXMgb2YgdGhlIGxvY2FsIGJyYW5jaCBvbiB0b3Agb2Ygc29tZXRoaW5nCisgICBlbHNlLCBhcyBzdWNoIHRoZXkgYXJlIHBsYWNlZCBpbiBzdGFnZSAjMyBhbmQgcmVmZXJyZWQgdG8gYXMKKyAgICJ0aGVpcnMiLCB3aGlsZSB0aGUgY2hhbmdlcyBpbiB0aGUgbmV3IGJhc2UsIHR5cGljYWxseSBhIGZvcmVpZ24KKyAgIHdvcmssIGFyZSBwbGFjZWQgaW4gc3RhZ2UgIzIgYW5kIHJlZmVycmVkIHRvIGFzICJvdXJzIi4gIENsYXJpZnkKKyAgIHRoZSAiY2hlY2tvdXQgLS1vdXJzLy0tdGhlaXJzIi4KKyAgIChtZXJnZSBmMzAzMDE2IHNlL2RvYy1jaGVja291dC1vdXJzLXRoZWlycyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSAicmV2LXBhcnNlIC0tcGFyc2VvcHQiIG1vZGUgcGFyc2VkIHRoZSBvcHRpb24gc3BlY2lmaWNhdGlvbgorICAgYW5kIHRoZSBhcmd1bWVudCBoaW50IGluIGEgc3RyYW5nZSB3YXkgdG8gYWxsb3cgJz0nIGFuZCBvdGhlcgorICAgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBvcHRpb24gbmFtZSB3aGlsZSBmb3JiaWRkaW5nIHRoZW0gZnJvbQorICAgdGhlIGFyZ3VtZW50IGhpbnQuICBUaGlzIG1hZGUgaXQgaW1wb3NzaWJsZSB0byBkZWZpbmUgYW4gb3B0aW9uCisgICBsaWtlICItLXBhaXIgPGtleT49PHZhbHVlPiIgd2l0aCAicGFpcj1rZXk9dmFsdWUiIHNwZWNpZmljYXRpb24sCisgICB3aGljaCBpbnN0ZWFkIHdvdWxkIGhhdmUgZGVmaW5lZCBhICItLXBhaXI9a2V5IDx2YWx1ZT4iIG9wdGlvbi4KKyAgIChtZXJnZSAyZDg5M2RmIGliL3NjcmlwdGVkLXBhcnNlLW9wdC1iZXR0ZXItaGludC1zdHJpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPZnRlbiBhIGZhc3QtaW1wb3J0IHN0cmVhbSBidWlsZHMgYSBuZXcgY29tbWl0IG9uIHRvcCBvZiB0aGUKKyAgIHByZXZpb3VzIGNvbW1pdCBpdCBidWlsdCwgYW5kIGl0IG9mdGVuIHVuY29uZGl0aW9uYWxseSBlbWl0cyBhCisgICAiZnJvbSIgY29tbWFuZCB0byBzcGVjaWZ5IHRoZSBmaXJzdCBwYXJlbnQsIHdoaWNoIGNhbiBiZSBvbWl0dGVkIGluCisgICBzdWNoIGEgY2FzZS4gIFRoaXMgY2F1c2VkIGZhc3QtaW1wb3J0IHRvIGZvcmdldCB0aGUgdHJlZSBvZiB0aGUKKyAgIHByZXZpb3VzIGNvbW1pdCBhbmQgdGhlbiByZS1yZWFkIGl0IGZyb20gc2NyYXRjaCwgd2hpY2ggd2FzCisgICBpbmVmZmljaWVudC4gIE9wdGltaXplIGZvciB0aGlzIGNvbW1vbiBjYXNlLgorICAgKG1lcmdlIDBkZjMyNDUgbWgvZmFzdC1pbXBvcnQtb3B0aW1pemUtY3VycmVudC1mcm9tIGxhdGVyIHRvIG1haW50KS4KKworICogUnVubmluZyBhbiBhbGlhc2VkIGNvbW1hbmQgZnJvbSBhIHN1YmRpcmVjdG9yeSB3aGVuIHRoZSAuZ2l0IHRoaW5nCisgICBpbiB0aGUgd29ya2luZyB0cmVlIGlzIGEgZ2l0ZmlsZSBwb2ludGluZyBlbHNld2hlcmUgZGlkIG5vdCB3b3JrLgorICAgKG1lcmdlIGQ5NTEzOGUgbmQvZXhwb3J0LXdvcmt0cmVlIGxhdGVyIHRvIG1haW50KS4KKworICogIklzIHRoaXMgc3ViZGlyZWN0b3J5IGEgc2VwYXJhdGUgcmVwb3NpdG9yeSB0aGF0IHNob3VsZCBub3QgYmUKKyAgIHRvdWNoZWQ/IiBjaGVjayAiZ2l0IGNsZWFuIiB3YXMgaW5lZmZpY2llbnQuICBUaGlzIHdhcyByZXBsYWNlZAorICAgd2l0aCBhIG1vcmUgb3B0aW1pemVkIGNoZWNrLgorICAgKG1lcmdlIGZiZjJmZWMgZWUvY2xlYW4tcmVtb3ZlLWRpcnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgIm5ldy13b3JrdHJlZS1tb2RlIiBoYWNrIGluICJjaGVja291dCIgdGhhdCB3YXMgYWRkZWQgaW4KKyAgIG5kL211bHRpcGxlLXdvcmstdHJlZXMgdG9waWMgaGFzIGJlZW4gcmVtb3ZlZCBieSB1cGRhdGluZyB0aGUKKyAgIGltcGxlbWVudGF0aW9uIG9mIG5ldyAid29ya3RyZWUgYWRkIi4KKyAgIChtZXJnZSA2NWY5Yjc1IGVzL3dvcmt0cmVlLWFkZC1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKworICogUmVtb3ZlIHJlbWFpbmluZyBjcnVmdCBmcm9tICAiZ2l0IGNoZWNrb3V0IC0tdG8iLCB3aGljaAorICAgdHJhbnNpdGlvbmVkIHRvICJnaXQgd29ya3RyZWUgYWRkIi4KKyAgIChtZXJnZSAxMTRmZjg4IGVzL3dvcmt0cmVlLWFkZCBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIG9mZi1ieS1vbmUgZXJyb3IgbWFkZSAiZ2l0IHJlbW90ZSIgdG8gbWlzaGFuZGxlIGEgcmVtb3RlIHdpdGggYQorICAgc2luZ2xlIGxldHRlciBuaWNrbmFtZS4KKyAgIChtZXJnZSBiYzU5OGMzIG1oL2dldC1yZW1vdGUtZ3JvdXAtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjbG9uZSAkVVJMIiwgd2hlbiBjbG9uaW5nIGZyb20gYSBzaXRlIHdob3NlIHNvbGUgcHVycG9zZSBpcyB0bworICAgaG9zdCBhIHNpbmdsZSByZXBvc2l0b3J5IChoZW5jZSwgbm8gcGF0aCBhZnRlciA8c2NoZW1lPjovLzxzaXRlPi8pLAorICAgdHJpZWQgdG8gdXNlIHRoZSBzaXRlIG5hbWUgYXMgdGhlIG5ldyByZXBvc2l0b3J5IG5hbWUsIGJ1dCBkaWQgbm90CisgICByZW1vdmUgdXNlcm5hbWUgb3IgcGFzc3dvcmQgd2hlbiA8c2l0ZT4gcGFydCB3YXMgb2YgdGhlIGZvcm0KKyAgIDx1c2VyPkA8cGFzcz46PGhvc3Q+LiAgVGhlIGNvZGUgaXMgdGF1Z2h0IHRvIHJlZGFjdCB0aGVzZS4KKyAgIChtZXJnZSBhZGVmOTU2IHBzL2d1ZXNzLXJlcG8tbmFtZS1hdC1yb290IGxhdGVyIHRvIG1haW50KS4KKworICogUnVubmluZyB0ZXN0cyB3aXRoIHRoZSAiLXgiIG9wdGlvbiB0byBtYWtlIHRoZW0gdmVyYm9zZSBoYWQgc29tZQorICAgdW5wbGVhc2FudCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmZWF0dXJlcyBvZiB0aGUgdGVzdCBzdWl0ZS4KKyAgIChtZXJnZSA5YjVmZTc4IGprL3Rlc3Qtd2l0aC14IGxhdGVyIHRvIG1haW50KS4KKworICogdDE1MDkgdGVzdCB0aGF0IHJlcXVpcmVzIGEgZGVkaWNhdGVkIFZNIGVudmlyb25tZW50IGhhZCBzb21lCisgICBiaXRyb3QsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBmYWFjYzVhIHBzL3QxNTA5LWNocm9vdC10ZXN0LWZpeHVwIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdWxsIiBpbiByZWNlbnQgcmVsZWFzZXMgb2YgR2l0IGhhcyBhIHJlZ3Jlc3Npb24gaW4gdGhlIGNvZGUKKyAgIHRoYXQgYWxsb3dzIGN1c3RvbSBwYXRoIHRvIHRoZSAtLXVwbG9hZC1wYWNrPTxwcm9ncmFtPi4gIFRoaXMgaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKworICAgTm90ZSB0aGF0IHRoaXMgaXMgaXJyZWxldmFudCBmb3IgJ21hc3Rlcicgd2l0aCAiZ2l0IHB1bGwiIHJld3JpdHRlbgorICAgaW4gQy4KKyAgIChtZXJnZSAxM2UwZTI4IG1tL3B1bGwtdXBsb2FkLXBhY2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuIHRyeWluZyB0byBzZWUgdGhhdCBhbiBvYmplY3QgZG9lcyBub3QgZXhpc3QsIGEgc3RhdGUgZXJybm8KKyAgIGxlYWtlZCBmcm9tIG91ciAiZmlyc3QgdHJ5IHRvIG9wZW4gYSBwYWNrZmlsZSB3aXRoIE9fTk9BVElNRSBhbmQKKyAgIHRoZW4gaWYgaXQgZmFpbHMgcmV0cnkgd2l0aG91dCBpdCIgbG9naWMgb24gYSBzeXN0ZW0gdGhhdCByZWZ1c2VzCisgICBPX05PQVRJTUUuICBUaGlzIGNvbmZ1c2VkIHVzIGFuZCBjYXVzZWQgdXMgdG8gZGllLCBzYXlpbmcgdGhhdCB0aGUKKyAgIHBhY2tmaWxlIGlzIHVucmVhZGFibGUsIHdoZW4gd2Ugc2hvdWxkIGhhdmUganVzdCByZXBvcnRlZCB0aGF0IHRoZQorICAgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoYXQgcGFja2ZpbGUgdG8gdGhlIGNhbGxlci4KKyAgIChtZXJnZSBkZmY2ZjI4IGNiL29wZW4tbm9hdGltZS1jbGVhci1lcnJubyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlcGF0aCB0byBwcm9kdWNlIGVycm9yIG1lc3NhZ2VzIGhhZCBhIGhhcmQtY29kZWQgbGltaXQgdG8KKyAgIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlLCBwcmltYXJpbHkgdG8gYXZvaWQgbWVtb3J5IGFsbG9jYXRpb24gd2hpbGUKKyAgIGNhbGxpbmcgZGllKCkuCisgICAobWVyZ2UgZjRjM2VkYyBqay9sb25nLWVycm9yLW1lc3NhZ2VzIGxhdGVyIHRvIG1haW50KS4KKworICogc3RyYnVmX3JlYWQoKSB1c2VkIHRvIGhhdmUgb25lIGV4dHJhIGl0ZXJhdGlvbiAoYW5kIGFuIHVubmVjZXNzYXJ5CisgICBzdHJidWZfZ3JvdygpIG9mIDhrQiksIHdoaWNoIHdhcyBlbGltaW5hdGVkLgorICAgKG1lcmdlIDNlYmJkMDAgamgvc3RyYnVmLXJlYWQtdXNlLXJlYWQtaW4tZnVsbCBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIHJld3JvdGUgb25lIG9mIHRoZSBidWlsZCBzY3JpcHRzIGluIFBlcmwgYnV0IHRoaXMgcmVpbXBsZW1lbnRzCisgICBpbiBCb3VybmUgc2hlbGwuCisgICAobWVyZ2UgNTdjZWU4YSBzZy9oZWxwLWdyb3VwIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGV4cGVyaW1lbnRhbCB1bnRyYWNrZWQtY2FjaGUgZmVhdHVyZSB3ZXJlIGJ1Z2d5IHdoZW4gcGF0aHMgd2l0aAorICAgYSBmZXcgbGV2ZWxzIG9mIHN1YmRpcmVjdG9yaWVzIGFyZSBpbnZvbHZlZC4KKyAgIChtZXJnZSA3M2Y5MTQ1IGR0L3VudHJhY2tlZC1zdWJkaXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiaW50ZXJwcmV0LXRyYWlsZXJzIiBoZWxwZXIgbWlzdG9vayBhIHNpbmdsZS1saW5lciBsb2cgbWVzc2FnZSB0aGF0CisgICBoYXMgYSBjb2xvbiBhcyB0aGUgZW5kIG9mIGV4aXN0aW5nIHRyYWlsZXIuCisKKyAqIFRoZSAiaW50ZXJwcmV0LXRyYWlsZXJzIiBoZWxwZXIgbWlzdG9vayBhIG11bHRpLXBhcmFncmFwaCB0aXRsZSBvZgorICAgYSBjb21taXQgbG9nIG1lc3NhZ2Ugd2l0aCBhIGNvbG9uIGluIGl0IGFzIHRoZSBlbmQgb2YgdGhlIHRyYWlsZXIKKyAgIGJsb2NrLgorICAgKG1lcmdlIDVjOTk5OTUgY2MvdHJhaWxlcnMtY29ybmVyLWNhc2UtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkZXNjcmliZSIgd2l0aG91dCBhcmd1bWVudCBkZWZhdWx0ZWQgdG8gZGVzY3JpYmUgdGhlIEhFQUQKKyAgIGNvbW1pdCwgYnV0ICJnaXQgZGVzY3JpYmUgLS1jb250YWlucyIgZGlkbid0LiAgQXJndWFibHksIGluIGEKKyAgIHJlcG9zaXRvcnkgdXNlZCBmb3IgYWN0aXZlIGRldmVsb3BtZW50LCBzdWNoIGRlZmF1bHRpbmcgd291bGQgbm90CisgICBiZSB2ZXJ5IHVzZWZ1bCBhcyB0aGUgdGlwIG9mIGJyYW5jaCBpcyB0eXBpY2FsbHkgbm90IHRhZ2dlZCwgYnV0IGl0CisgICBpcyBiZXR0ZXIgdG8gYmUgY29uc2lzdGVudC4KKyAgIChtZXJnZSAyYmQwNzA2IHNnL2Rlc2NyaWJlLWNvbnRhaW5zIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNsaWVudCBzaWRlIGNvZGVwYXRocyBpbiAiZ2l0IHB1c2giIGhhdmUgYmVlbiBjbGVhbmVkIHVwCisgICBhbmQgdGhlIHVzZXIgY2FuIHJlcXVlc3QgdG8gcGVyZm9ybSBhbiBvcHRpb25hbCAic2lnbmVkIHB1c2giLAorICAgaS5lLiBzaWduIG9ubHkgd2hlbiB0aGUgb3RoZXIgZW5kIGFjY2VwdHMgc2lnbmVkIHB1c2guCisgICAobWVyZ2UgNjhjNzU3ZiBkYi9wdXNoLXNpZ24taWYtYXNrZWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBCZWNhdXNlIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBkb2VzIG5vdCBhbGxvdyAiYWxpYXMuMGZvbyIgYW5kCisgICAicGFnZXIuMGZvbyIgYXMgdGhlIGNvbmZpZ3VyYXRpb24ga2V5LCB0aGUgdXNlciBjYW5ub3QgdXNlICcwZm9vJworICAgYXMgYSBjdXN0b20gY29tbWFuZCBuYW1lIGFueXdheSwgYnV0ICJnaXQgMGZvbyIgdHJpZWQgdG8gbG9vayB0aGVzZQorICAga2V5cyB1cCBhbmQgZW1pdHRlZCB1c2VsZXNzIHdhcm5pbmdzIGJlZm9yZSBzYXlpbmcgJzBmb28gaXMgbm90IGEKKyAgIGdpdCBjb21tYW5kJy4gIFRoZXNlIHdhcm5pbmcgbWVzc2FnZXMgaGF2ZSBiZWVuIHNxdWVsY2hlZC4KKyAgIChtZXJnZSA5ZTlkZTE4IGprL2ZpeC1hbGlhcy1wYWdlci1jb25maWcta2V5LXdhcm5pbmdzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXYtbGlzdCIgZG9lcyBub3QgdGFrZSAiLS1ub3RlcyIgb3B0aW9uLCBidXQgZGlkIG5vdCBjb21wbGFpbgorICAgd2hlbiBvbmUgaXMgZ2l2ZW4uCisgICAobWVyZ2UgMmFlYTdhNSBqay9yZXYtbGlzdC1oYXMtbm8tbm90ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuIHJlLXByaW1pbmcgdGhlIGNhY2hlLXRyZWUgb3Bwb3J0dW5pc3RpY2FsbHkgd2hpbGUgY29tbWl0dGluZworICAgdGhlIGluLWNvcmUgaW5kZXggYXMtaXMsIHdlIG1pc3Rha2VubHkgaW52YWxpZGF0ZWQgdGhlIGluLWNvcmUKKyAgIGluZGV4IHRvbyBhZ2dyZXNzaXZlbHksIGNhdXNpbmcgdGhlIGV4cGVyaW1lbnRhbCBzcGxpdC1pbmRleCBjb2RlCisgICB0byB1bm5lY2Vzc2FyaWx5IHJld3JpdGUgdGhlIG9uLWRpc2sgaW5kZXggZmlsZShzKS4KKyAgIChtZXJnZSA0NzVhMzQ0IGR0L2NvbW1pdC1wcmVzZXJ2ZS1iYXNlLWluZGV4LXVwb24tb3Bwb3J0dW5pc3RpYy1jYWNoZS10cmVlLXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYXJjaGl2ZSIgZGlkIG5vdCB1c2UgemlwNjQgZXh0ZW5zaW9uIHdoZW4gY3JlYXRpbmcgYW4gYXJjaGl2ZQorICAgd2l0aCBtb3JlIHRoYW4gNjRrIGVudHJpZXMsIHdoaWNoIG5vYm9keSBzaG91bGQgbmVlZCwgcmlnaHQgOy0pPworICAgKG1lcmdlIDg4MzI5Y2EgcnMvYXJjaGl2ZS16aXAtbWFueSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIGluICJtdWx0aXBsZS13b3JrdHJlZSIgc3VwcG9ydCB0aGF0IGF0dGVtcHRlZCB0byByZWNvdmVyCisgICBmcm9tIGFuIGluY29uc2lzdGVudCBzdGF0ZSB1cGRhdGVkIGFuIGluY29ycmVjdCBmaWxlLgorICAgKG1lcmdlIDgyZmRlODcgbmQvZml4dXAtbGlua2VkLWdpdGRpciBsYXRlciB0byBtYWludCkuCisKKyAqIE9uIGNhc2UgaW5zZW5zaXRpdmUgc3lzdGVtcywgImdpdCBwNCIgZGlkIG5vdCB3b3JrIHdlbGwgd2l0aCBjbGllbnQKKyAgIHNwZWNzLgorCisgKiAiZ2l0IGluaXQgZW1wdHkgJiYgZ2l0IC1DIGVtcHR5IGxvZyIgc2FpZCAiYmFkIGRlZmF1bHQgcmV2aXNpb24gJ0hFQUQnIiwKKyAgIHdoaWNoIHdhcyBmb3VuZCB0byBiZSBhIGJpdCBjb25mdXNpbmcgdG8gbmV3IHVzZXJzLgorICAgKG1lcmdlIGNlMTEzNjAgamsvbG9nLW1pc3NpbmctZGVmYXVsdC1IRUFEIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50IHZlcnNpb25zIG9mIHNjcmlwdGVkICJnaXQgYW0iIGhhcyBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gaW4KKyAgICJnaXQgYW0gLS1za2lwIiBjb2RlcGF0aCwgd2hpY2ggbm8gbG9uZ2VyIGV4aXN0cyBpbiB0aGUgYnVpbHQtaW4KKyAgIHZlcnNpb24gb24gdGhlICdtYXN0ZXInIGZyb250LiAgRml4IHRoZSByZWdyZXNzaW9uIGluIHRoZSBsYXN0CisgICBzY3JpcHRlZCB2ZXJzaW9uIHRoYXQgYXBwZWFyIGluIDIuNS54IG1haW50ZW5hbmNlIHRyYWNrIGFuZCBvbGRlci4KKyAgIChtZXJnZSBiOWQ2Njg5IGpzL21haW50LWFtLXNraXAtcGVyZm9ybWFuY2UtcmVncmVzc2lvbiBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBicmFuY2ggZGVzY3JpcHRpb25zIHRoYXQgYXJlIHNldCB3aXRoICJnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiIKKyAgIG9wdGlvbiB3ZXJlIHVzZWQgaW4gbWFueSBwbGFjZXMgYnV0IHRoZXkgd2VyZW4ndCBjbGVhcmx5IGRvY3VtZW50ZWQuCisgICAobWVyZ2UgNTYxZDJiNyBwby9kb2MtYnJhbmNoLWRlc2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlIGNsZWFudXBzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisgICAobWVyZ2UgMWM2MDFhZiBlcy9kb2MtY2xlYW4tb3V0ZGF0ZWQtdG9vbHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDM1ODEzMDQga24vdGFnLWRvYy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDNhNTllNTkga2IvaTE4bi1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ1YWJkZWUgc2IvcmVtb3ZlLXVudXNlZC12YXItZnJvbS1idWlsdGluLWFkZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTQ2OTFlMyBzYi9wYXJzZS1vcHRpb25zLWNvZGVmb3JtYXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRhNmFkYTMgYWQvYmlzZWN0LWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGRhNGM1YWQgdGEvZG9jZml4LWluZGV4LWZvcm1hdC10ZWNoIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhZTI1ZmQzIHNiL2NoZWNrLXJldHVybi1mcm9tLXJlYWQtcmVmIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiMzMyNWRmIG5kL2R3aW0td2lsZGNhcmRzLWFzLXBhdGhzcGVjcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgN2FhOWI5YiBzZy93dC1zdGF0dXMtaGVhZGVyLWluY2x1c2lvbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZjA0YzY5MCBhcy9kb2NmaXgtcmVmbG9nLWV4cGlyZS11bnJlYWNoYWJsZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTI2OTg0NyBzZy90MzAyMC10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4YjU0YzIzIGpjL2NhbGxvYy1wYXRoc3BlYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYTY5MjZiOCBwby9wby1yZWFkbWUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDU0ZDE2MGUgc3MvZml4LWNvbmZpZy1mZC1sZWFrIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiODBmYTg0IGFoL3N1Ym1vZHVsZS10eXBvZml4LWluLWVycm9yIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5OTg4NWJjIGFoL3JlZmxvZy10eXBvZml4LWluLWVycm9yIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5NDc2YzJjIGFoL3JlYWQtdHJlZS11c2FnZS1zdHJpbmcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGI4YzFkMjcgYWgvcGFjay1vYmplY3RzLXVzYWdlLXN0cmluZ3MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ4NmUxZTEgYnIvc3ZuLWRvYy1pbmNsdWRlLXBhdGhzLWNvbmZpZyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTczM2VkMyBlZS9jbGVhbi10ZXN0LWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1ZmNhZGMzIGdiL2FwcGx5LWNvbW1lbnQtdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYjg5NGQzZSBtcC90NzA2MC1kaWZmLWluZGV4LXRlc3QgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQyMzg3MTAgYXMvY29uZmlnLWRvYy1tYXJrdXAtZml4IGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3ZWE4OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjEudHh0CkBAIC0wLDAgKzEsMTggQEAKK0dpdCB2Mi42LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjYKKy0tLS0tLS0tLS0tLS0tLS0KKworICogeGRpZmYgY29kZSB3ZSB1c2UgdG8gZ2VuZXJhdGUgZGlmZnMgaXMgbm90IHByZXBhcmVkIHRvIGhhbmRsZQorICAgZXh0cmVtZWx5IGxhcmdlIGZpbGVzLiAgSXQgdXNlcyAiaW50IiBpbiBtYW55IHBsYWNlcywgd2hpY2ggY2FuCisgICBvdmVyZmxvdyBpZiB3ZSBoYXZlIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgbGluZXMgb3IgZXZlbiBieXRlcyBpbgorICAgb3VyIGlucHV0IGZpbGVzLCBmb3IgZXhhbXBsZS4gIENhcCB0aGUgaW5wdXQgc2l6ZSB0byBzb21ld2hlcmUKKyAgIGFyb3VuZCAxR0IgZm9yIG5vdy4KKworICogU29tZSBwcm90b2NvbHMgKGxpa2UgZ2l0LXJlbW90ZS1leHQpIGNhbiBleGVjdXRlIGFyYml0cmFyeSBjb2RlCisgICBmb3VuZCBpbiB0aGUgVVJMLiAgVGhlIFVSTHMgdGhhdCBzdWJtb2R1bGVzIHVzZSBtYXkgY29tZSBmcm9tCisgICBhcmJpdHJhcnkgc291cmNlcyAoZS5nLiwgLmdpdG1vZHVsZXMgZmlsZXMgaW4gYSByZW1vdGUKKyAgIHJlcG9zaXRvcnkpLCBhbmQgY2FuIGh1cnQgdGhvc2Ugd2hvIGJsaW5kbHkgZW5hYmxlIHJlY3Vyc2l2ZQorICAgZmV0Y2guICBSZXN0cmljdCB0aGUgYWxsb3dlZCBwcm90b2NvbHMgdG8gd2VsbCBrbm93biBhbmQgc2FmZQorICAgb25lcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2NWUzNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjIudHh0CkBAIC0wLDAgKzEsNjUgQEAKK0dpdCB2Mi42LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjYuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZXJlIHdlcmUgc29tZSBjbGFzc2VzIG9mIGVycm9ycyB0aGF0ICJnaXQgZnNjayIgZGlhZ25vc2VkIHRvIGl0cworICAgc3RhbmRhcmQgZXJyb3IgdGhhdCBkaWQgbm90IGNhdXNlIGl0IHRvIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMuCisKKyAqIEEgdGVzdCBzY3JpcHQgZm9yIHRoZSBIVFRQIHNlcnZpY2UgaGFkIGEgdGltaW5nIGRlcGVuZGVudCBidWcsCisgICB3aGljaCB3YXMgZml4ZWQuCisKKyAqIFBlcmZvcm1hbmNlLW1lYXN1cmVtZW50IHRlc3RzIGRpZCBub3Qgd29yayB3aXRob3V0IGFuIGluc3RhbGxlZCBHaXQuCisKKyAqIE9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcywgc2V0dGluZyBHSVRfV09SS19UUkVFIHZhcmlhYmxlCisgICB1c2luZyBhIHJhbmRvbSBjYXNlcyB0aGF0IGRvZXMgbm90IGFncmVlIHdpdGggd2hhdCB0aGUgZmlsZXN5c3RlbQorICAgdGhpbmtzIGNvbmZ1c2VkIEdpdCB0aGF0IGl0IHdhc24ndCBpbnNpZGUgdGhlIHdvcmtpbmcgdHJlZS4KKworICogV2hlbiAiZ2l0IGFtIiB3YXMgcmV3cml0dGVuIGFzIGEgYnVpbHQtaW4sIGl0IHN0b3BwZWQgcGF5aW5nCisgICBhdHRlbnRpb24gdG8gdXNlci5zaWduaW5na2V5LCB3aGljaCB3YXMgZml4ZWQuCisKKyAqIEFmdGVyICJnaXQgY2hlY2tvdXQgLS1kZXRhY2giLCAiZ2l0IHN0YXR1cyIgcmVwb3J0ZWQgYSBmYWlybHkKKyAgIHVzZWxlc3MgIkhFQUQgZGV0YWNoZWQgYXQgSEVBRCIsIGluc3RlYWQgb2Ygc2F5aW5nIGF0IHdoaWNoIGV4YWN0CisgICBjb21taXQuCisKKyAqICJnaXQgcmViYXNlIC1pIiBoYWQgYSBtaW5vciByZWdyZXNzaW9uIHJlY2VudGx5LCB3aGljaCBzdG9wcGVkCisgICBjb25zaWRlcmluZyBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCBhbiBpbmRlbnRlZCAnIycgaW4gaXRzIGluc24KKyAgIHNoZWV0IG5vdCBhIGNvbW1lbnQsIHdoaWNoIGlzIG5vdyBmaXhlZC4KKworICogRGVzY3JpcHRpb24gb2YgdGhlICJsb2cuZm9sbG93IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGluICJnaXQgbG9nIgorICAgZG9jdW1lbnRhdGlvbiBpcyBub3cgYWxzbyBjb3BpZWQgdG8gImdpdCBjb25maWciIGRvY3VtZW50YXRpb24uCisKKyAqIEFsbG9jYXRpb24gcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHN0ZGlvIGFyZSB1bnNhZmUgdGhpbmdzIHRvIGNhbGwKKyAgIGluc2lkZSBhIHNpZ25hbCBoYW5kbGVyLCBhbmQgaW5kZWVkIGtpbGxpbmcgdGhlIHBhZ2VyIGNhbiBjYXVzZQorICAgZ2xpYmMgdG8gZGVhZGxvY2sgd2FpdGluZyBvbiBhbGxvY2F0aW9uIG11dGV4IGFzIG91ciBzaWduYWwgaGFuZGxlcgorICAgdHJpZXMgdG8gZnJlZSgpIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzIGluIHdhaXRfZm9yX3BhZ2VyKCkuICBSZWR1Y2UKKyAgIHRoZXNlIHVuc2FmZSBjYWxscy4KKworICogVGhlIHdheSBob3cgLS1yZWYvLS1ub3RlcyB0byBzcGVjaWZ5IHRoZSBub3RlcyB0cmVlIHJlZmVyZW5jZSBhcmUKKyAgIERXSU1tZWQgd2FzIG5vdCBjbGVhcmx5IGRvY3VtZW50ZWQuCisKKyAqIEN1c3RvbWl6YXRpb24gdG8gY2hhbmdlIHRoZSBiZWhhdmlvdXIgd2l0aCAibWFrZSAtdyIgYW5kICJtYWtlIC1zIgorICAgaW4gb3VyIE1ha2VmaWxlIHdhcyBicm9rZW4gd2hlbiB0aGV5IHdlcmUgdXNlZCB0b2dldGhlci4KKworICogVGhlIE1ha2VmaWxlIGFsd2F5cyBydW5zIHRoZSBsaWJyYXJ5IGFyY2hpdmVyIHdpdGggaGFyZGNvZGVkICJjcnMiCisgICBvcHRpb25zLCB3aGljaCB3YXMgaW5jb252ZW5pZW50IGZvciBleG90aWMgcGxhdGZvcm1zIG9uIHdoaWNoCisgICBwZW9wbGUgd2FudCB0byB1c2UgcHJvZ3JhbXMgd2l0aCB0b3RhbGx5IGRpZmZlcmVudCBzZXQgb2YgY29tbWFuZAorICAgbGluZSBvcHRpb25zLgorCisgKiBUaGUgc3NoIHRyYW5zcG9ydCwganVzdCBsaWtlIGFueSBvdGhlciB0cmFuc3BvcnQgb3ZlciB0aGUgbmV0d29yaywKKyAgIGRpZCBub3QgY2xlYXIgR0lUXyogZW52aXJvbm1lbnQgdmFyaWFibGVzLCBidXQgaXQgaXMgcG9zc2libGUgdG8KKyAgIHVzZSBTZW5kRW52IGFuZCBBY2NlcHRFbnYgdG8gbGVhayB0aGVtIHRvIHRoZSByZW1vdGUgaW52b2NhdGlvbiBvZgorICAgR2l0LCB3aGljaCBpcyBub3QgYSBnb29kIGlkZWEgYXQgYWxsLiAgRXhwbGljaXRseSBjbGVhciB0aGVtIGp1c3QKKyAgIGxpa2Ugd2UgZG8gZm9yIHRoZSBsb2NhbCB0cmFuc3BvcnQuCisKKyAqICJnaXQgYmxhbWUgLS1maXJzdC1wYXJlbnQgdjEuMC4udjIuMCIgd2FzIG5vdCByZWplY3RlZCBidXQgZGlkIG5vdAorICAgbGltaXQgdGhlIGJsYW1lIHRvIGNvbW1pdHMgb24gdGhlIGZpcnN0IHBhcmVudCBjaGFpbi4KKworICogVmVyeSBzbWFsbCBudW1iZXIgb2Ygb3B0aW9ucyB0YWtlIGEgcGFyYW1ldGVyIHRoYXQgaXMgb3B0aW9uYWwKKyAgICh3aGljaCBpcyBub3QgYSBncmVhdCBVSSBlbGVtZW50IGFzIHRoZXkgY2FuIG9ubHkgYXBwZWFyIGF0IHRoZSBlbmQKKyAgIG9mIHRoZSBjb21tYW5kIGxpbmUpLiAgQWRkIG5vdGljZSB0byBkb2N1bWVudGF0aW9uIG9mIGVhY2ggYW5kCisgICBldmVyeSBvbmUgb2YgdGhlbS4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNmZlMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi4zLnR4dApAQCAtMCwwICsxLDExMSBAQAorR2l0IHYyLjYuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNi4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGVycm9yIG1lc3NhZ2UgZnJvbSAiZ2l0IGJsYW1lIC0tY29udGVudHMgLS1yZXZlcnNlIiBpbmNvcnJlY3RseQorICAgdGFsa2VkIGFib3V0ICItLWNvbnRlbnRzIC0tY2hpbGRyZW4iLgorCisgKiAiZ2l0IG1lcmdlLWZpbGUiIHRyaWVkIHRvIHNpZ25hbCBob3cgbWFueSBjb25mbGljdHMgaXQgZm91bmQsIHdoaWNoCisgICBvYnZpb3VzbHkgd291bGQgbm90IHdvcmsgd2VsbCB3aGVuIHRoZXJlIGFyZSB0b28gbWFueSBvZiB0aGVtLgorCisgKiBUaGUgbmFtZS1oYXNoIHN1YnN5c3RlbSB0aGF0IGlzIHVzZWQgdG8gY29wZSB3aXRoIGNhc2UgaW5zZW5zaXRpdmUKKyAgIGZpbGVzeXN0ZW1zIGtlZXBzIHRyYWNrIG9mIGRpcmVjdG9yaWVzIGFuZCB0aGVpciBvbi1maWxlc3lzdGVtCisgICBjYXNlcyBmb3IgYWxsIHRoZSBwYXRocyBpbiB0aGUgaW5kZXggYnkgaG9sZGluZyBhIHBvaW50ZXIgdG8gYQorICAgcmFuZG9tbHkgY2hvc2VuIGNhY2hlIGVudHJ5IHRoYXQgaXMgaW5zaWRlIHRoZSBkaXJlY3RvcnkgKGZvciBpdHMKKyAgIGNlLT5jZV9uYW1lIGNvbXBvbmVudCkuICBUaGlzIHBvaW50ZXIgd2FzIG5vdCB1cGRhdGVkIGV2ZW4gd2hlbiB0aGUKKyAgIGNhY2hlIGVudHJ5IHdhcyByZW1vdmVkIGZyb20gdGhlIGluZGV4LCBsZWFkaW5nIHRvIHVzZSBhZnRlciBmcmVlLgorICAgVGhpcyB3YXMgZml4ZWQgYnkgcmVjb3JkaW5nIHRoZSBwYXRoIGZvciBlYWNoIGRpcmVjdG9yeSBpbnN0ZWFkIG9mCisgICBib3Jyb3dpbmcgY2FjaGUgZW50cmllcyBhbmQgcmVzdHJ1Y3R1cmluZyB0aGUgQVBJIHNvbWV3aGF0LgorCisgKiBXaGVuIHRoZSAiZ2l0IGFtIiBjb21tYW5kIHdhcyByZWltcGxlbWVudGVkIGluIEMsICJnaXQgYW0gLTMiIGhhZCBhCisgICBzbWFsbCByZWdyZXNzaW9uIHdoZXJlIGl0IGlzIGFib3J0ZWQgaW4gaXRzIGVycm9yIGhhbmRsaW5nIGNvZGVwYXRoCisgICB3aGVuIHVuZGVybHlpbmcgbWVyZ2UtcmVjdXJzaXZlIGZhaWxlZCBpbiBzb21lIHdheXMuCisKKyAqIFRoZSBzeW5vcHNpcyB0ZXh0IGFuZCB0aGUgdXNhZ2Ugc3RyaW5nIG9mIHN1YmNvbW1hbmRzIHRoYXQgcmVhZAorICAgbGlzdCBvZiB0aGluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgYXJlIG9mdGVuIHNob3duIGFzIGlmIHRoZXkKKyAgIG9ubHkgdGFrZSBpbnB1dCBmcm9tIGEgZmlsZSBvbiBhIGZpbGVzeXN0ZW0sIHdoaWNoIHdhcyBtaXNsZWFkaW5nLgorCisgKiBBIGNvdXBsZSBvZiBjb21tYW5kcyBzdGlsbCBzaG93ZWQgIltvcHRpb25zXSIgaW4gdGhlaXIgdXNhZ2Ugc3RyaW5nCisgICB0byBub3RlIHdoZXJlIG9wdGlvbnMgc2hvdWxkIGNvbWUgb24gdGhlaXIgY29tbWFuZCBsaW5lLCBidXQgd2UKKyAgIHNwZWxsIHRoYXQgIls8b3B0aW9ucz5dIiBpbiBtb3N0IHBsYWNlcyB0aGVzZSBkYXlzLgorCisgKiBUaGUgc3VibW9kdWxlIGNvZGUgaGFzIGJlZW4gdGF1Z2h0IHRvIHdvcmsgYmV0dGVyIHdpdGggc2VwYXJhdGUKKyAgIHdvcmsgdHJlZXMgY3JlYXRlZCB2aWEgImdpdCB3b3JrdHJlZSBhZGQiLgorCisgKiBXaGVuICJnaXQgZ2MgLS1hdXRvIiBpcyBiYWNrZ3JvdW5kZWQsIGl0cyBkaWFnbm9zaXMgbWVzc2FnZSBpcworICAgbG9zdC4gIEl0IG5vdyBpcyBzYXZlZCB0byBhIGZpbGUgaW4gJEdJVF9ESVIgYW5kIGlzIHNob3duIG5leHQgdGltZQorICAgdGhlICJnYyAtLWF1dG8iIGlzIHJ1bi4KKworICogV29yayBhcm91bmQgImdpdCBwNCIgZmFpbGluZyB3aGVuIHRoZSBQNCBkZXBvdCByZWNvcmRzIHRoZSBjb250ZW50cworICAgaW4gVVRGLTE2IHdpdGhvdXQgVVRGLTE2IEJPTS4KKworICogUmVjZW50IHVwZGF0ZSB0byAicmViYXNlIC1pIiB0aGF0IHRyaWVzIHRvIHNhbml0eSBjaGVjayB0aGUgZWRpdGVkCisgICBpbnNuIHNoZWV0IGJlZm9yZSBpdCB1c2VzIGl0IGhhcyBiZWNvbWUgdG9vIHBpY2t5IG9uIFdpbmRvd3Mgd2hlcmUKKyAgIENSTEYgbGVmdCBieSB0aGUgZWRpdG9yIGlzIHR1cm5lZCBpbnRvIGEgdHJhaWxpbmcgQ1Igb24gdGhlIGxpbmUKKyAgIHJlYWQgdmlhIHRoZSAicmVhZCIgYnVpbHQtaW4gY29tbWFuZC4KKworICogImdpdCBjbG9uZSAtLWRpc3NvY2lhdGUiIHJ1bnMgYSBiaWcgImdpdCByZXBhY2siIHByb2Nlc3MgYXQgdGhlCisgICBlbmQsIGFuZCBpdCBoZWxwcyB0byBjbG9zZSBmaWxlIGRlc2NyaXB0b3JzIHRoYXQgYXJlIG9wZW4gb24gdGhlCisgICBwYWNrcyBhbmQgdGhlaXIgaWR4IGZpbGVzIGJlZm9yZSBkb2luZyBzbyBvbiBmaWxlc3lzdGVtcyB0aGF0CisgICBjYW5ub3QgcmVtb3ZlIGEgZmlsZSB0aGF0IGlzIHN0aWxsIG9wZW4uCisKKyAqIENvcnJlY3QgImdpdCBwNCAtLWRldGVjdC1sYWJlbHMiIHNvIHRoYXQgaXQgZG9lcyBub3QgZmFpbCB0byBjcmVhdGUKKyAgIGEgdGFnIHRoYXQgcG9pbnRzIGF0IGEgY29tbWl0IHRoYXQgaXMgYWxzbyBiZWluZyBpbXBvcnRlZC4KKworICogVGhlIGludGVybmFsIHN0cmlwc3BhY2UoKSBmdW5jdGlvbiBoYXMgYmVlbiBtb3ZlZCB0byB3aGVyZSBpdAorICAgbG9naWNhbGx5IGJlbG9uZ3MgdG8sIGkuZS4gc3RyYnVmIEFQSSwgYW5kIHRoZSBjb21tYW5kIGxpbmUgcGFyc2VyCisgICBvZiAiZ2l0IHN0cmlwc3BhY2UiIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBwYXJzZV9vcHRpb25zIEFQSS4KKworICogUHJlcGFyZSBmb3IgR2l0IG9uLWRpc2sgcmVwb3NpdG9yeSByZXByZXNlbnRhdGlvbiB0byB1bmRlcmdvCisgICBiYWNrd2FyZCBpbmNvbXBhdGlibGUgY2hhbmdlcyBieSBpbnRyb2R1Y2luZyBhIG5ldyByZXBvc2l0b3J5CisgICBmb3JtYXQgdmVyc2lvbiAiMSIsIHdpdGggYW4gZXh0ZW5zaW9uIG1lY2hhbmlzbS4KKworICogImdpdCBnYyIgdXNlZCB0byBiYXJmIHdoZW4gYSBzeW1ib2xpYyByZWYgaGFzIGdvbmUgZGFuZ2xpbmcKKyAgIChlLmcuIHRoZSBicmFuY2ggdGhhdCB1c2VkIHRvIGJlIHlvdXIgdXBzdHJlYW0ncyBkZWZhdWx0IHdoZW4geW91CisgICBjbG9uZWQgZnJvbSBpdCBpcyBub3cgZ29uZSwgYW5kIHlvdSBkaWQgImZldGNoIC0tcHJ1bmUiKS4KKworICogVGhlIG5vcm1hbGl6ZV9jZWlsaW5nX2VudHJ5KCkgZnVuY3Rpb24gZG9lcyBub3QgbXVjayB3aXRoIHRoZSBlbmQKKyAgIG9mIHRoZSBwYXRoIGl0IGFjY2VwdHMsIGFuZCB0aGUgcmVhbCB3b3JsZCBjYWxsZXJzIGRvIHJlbHkgb24gdGhhdCwKKyAgIGJ1dCBhIHRlc3QgaW5zaXN0ZWQgdGhhdCB0aGUgZnVuY3Rpb24gZHJvcHMgYSB0cmFpbGluZyBzbGFzaC4KKworICogImdpdCBnYyIgaXMgc2FmZSB0byBydW4gYW55dGltZSBvbmx5IGJlY2F1c2UgaXQgaGFzIHRoZSBidWlsdC1pbgorICAgZ3JhY2UgcGVyaW9kIHRvIHByb3RlY3QgeW91bmcgb2JqZWN0cy4gIEluIG9yZGVyIHRvIHJ1biB3aXRoIG5vCisgICBncmFjZSBwZXJpb2QsIHRoZSB1c2VyIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIHJlcG9zaXRvcnkgaXMKKyAgIHF1aWVzY2VudC4KKworICogQSByZWNlbnQgImZpbHRlci1icmFuY2ggLS1tc2ctZmlsdGVyIiBicm9rZSBza2lwcGluZyBvZiB0aGUgY29tbWl0CisgICBvYmplY3QgaGVhZGVyLCB3aGljaCBpcyBmaXhlZC4KKworICogImdpdCAtLWxpdGVyYWwtcGF0aHNwZWNzIGFkZCAtdS8tQSIgd2l0aG91dCBhbnkgY29tbWFuZCBsaW5lCisgICBhcmd1bWVudCBtaXNiZWhhdmVkIGV2ZXIgc2luY2UgR2l0IDIuMC4KKworICogTWVyZ2luZyBhIGJyYW5jaCB0aGF0IHJlbW92ZXMgYSBwYXRoIGFuZCBhbm90aGVyIHRoYXQgY2hhbmdlcyB0aGUKKyAgIG1vZGUgYml0cyBvbiB0aGUgc2FtZSBwYXRoIHNob3VsZCBoYXZlIGNvbmZsaWN0ZWQgYXQgdGhlIHBhdGgsIGJ1dAorICAgaXQgZGlkbid0IGFuZCBzaWxlbnRseSBmYXZvdXJlZCB0aGUgcmVtb3ZhbC4KKworICogImdpdCBpbWFwLXNlbmQiIGRpZCBub3QgY29tcGlsZSB3ZWxsIHdpdGggb2xkZXIgdmVyc2lvbiBvZiBjVVJMIGxpYnJhcnkuCisKKyAqIFRoZSBsaW5rYWdlIG9yZGVyIG9mIGxpYnJhcmllcyB3YXMgd3JvbmcgaW4gcGxhY2VzIGFyb3VuZCBsaWJjdXJsLgorCisgKiBJdCB3YXMgbm90IHBvc3NpYmxlIHRvIHVzZSBhIHJlcG9zaXRvcnktbG9va2FsaWtlIGNyZWF0ZWQgYnkgImdpdAorICAgd29ya3RyZWUgYWRkIiBhcyBhIGxvY2FsIHNvdXJjZSBvZiAiZ2l0IGNsb25lIi4KKworICogV2hlbiAiZ2l0IHNlbmQtZW1haWwiIHdhbnRlZCB0byB0YWxrIG92ZXIgTmV0OjpTTVRQOjpTU0wsCisgICBOZXQ6OkNtZDo6ZGF0YXNlbmQoKSBkaWQgbm90IGxpa2UgdG8gYmUgZmVkIHRvbyBtYW55IGJ5dGVzIGF0IHRoZQorICAgc2FtZSB0aW1lIGFuZCBmYWlsZWQgdG8gc2VuZCBtZXNzYWdlcy4gIFNlbmQgdGhlIHBheWxvYWQgb25lIGxpbmUKKyAgIGF0IGEgdGltZSB0byB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbS4KKworICogV2UgcGVlayBvYmplY3RzIGZyb20gc3VibW9kdWxlJ3Mgb2JqZWN0IHN0b3JlIGJ5IGxpbmtpbmcgaXQgdG8gdGhlCisgICBsaXN0IG9mIGFsdGVybmF0ZSBvYmplY3QgZGF0YWJhc2VzLCBidXQgdGhlIGNvZGUgdG8gZG8gc28gZm9yZ290IHRvCisgICBjb3JyZWN0bHkgaW5pdGlhbGl6ZSB0aGUgbGlzdC4KKworICogImdpdCBzdGF0dXMgLS1icmFuY2ggLS1zaG9ydCIgYWNjZXNzZWQgYmV5b25kIHRoZSBjb25zdGFudCBzdHJpbmcKKyAgICJIRUFEIiwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGRhZW1vbiIgdXNlcyAicnVuX2NvbW1hbmQoKSIgd2l0aG91dCAiZmluaXNoX2NvbW1hbmQoKSIsIHNvIGl0CisgICBuZWVkcyB0byByZWxlYXNlIHJlc291cmNlcyBpdHNlbGYsIHdoaWNoIGl0IGZvcmdvdCB0byBkby4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMjU2YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi40LnR4dApAQCAtMCwwICsxLDYzIEBACitHaXQgdjIuNi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi42LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgImNvbmZpZ3VyZSIgc2NyaXB0IGRpZCBub3QgdGVzdCBmb3IgLWxwdGhyZWFkIGNvcnJlY3RseSwgd2hpY2gKKyAgIHVwc2V0IHNvbWUgbGlua2Vycy4KKworICogQWRkIHN1cHBvcnQgZm9yIHRhbGtpbmcgaHR0cC9odHRwcyBvdmVyIHNvY2tzIHByb3h5LgorCisgKiBQb3J0YWJpbGl0eSBmaXggZm9yIFdpbmRvd3MsIHdoaWNoIG1heSByZXdyaXRlICRTSEVMTCB2YXJpYWJsZSB1c2luZworICAgbm9uLVBPU0lYIHBhdGhzLgorCisgKiBXZSBub3cgY29uc2lzdGVudGx5IGFsbG93IGFsbCBob29rcyB0byBpZ25vcmUgdGhlaXIgc3RhbmRhcmQgaW5wdXQsCisgICByYXRoZXIgdGhhbiBoYXZpbmcgZ2l0IGNvbXBsYWluIG9mIFNJR1BJUEUuCisKKyAqIEZpeCBzaGVsbCBxdW90aW5nIGluIGNvbnRyaWIgc2NyaXB0LgorCisgKiBUZXN0IHBvcnRhYmlsaXR5IGZpeCBmb3IgYSB0b3BpYyBpbiB2Mi42LjEuCisKKyAqIEFsbG93IHRpbGRlLWV4cGFuc2lvbiBpbiBzb21lIGh0dHAgY29uZmlnIHZhcmlhYmxlcy4KKworICogR2l2ZSBhIHVzZWZ1bCBzcGVjaWFsIGNhc2UgImRpZmYvc2hvdyAtLXdvcmQtZGlmZi1yZWdleD0uIiBhcyBhbgorICAgZXhhbXBsZSBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICogRml4IGZvciBhIGNvcm5lciBjYXNlIGluIGZpbHRlci1icmFuY2guCisKKyAqIE1ha2UgZ2l0LXA0IHdvcmsgb24gYSBkZXRhY2hlZCBoZWFkLgorCisgKiBEb2N1bWVudGF0aW9uIGNsYXJpZmljYXRpb24gZm9yICJjaGVjay1pZ25vcmUiIHdpdGhvdXQgIi0tdmVyYm9zZSIuCisKKyAqIEp1c3QgbGlrZSB0aGUgd29ya2luZyB0cmVlIGlzIGNsZWFuZWQgdXAgd2hlbiB0aGUgdXNlciBjYW5jZWxsZWQKKyAgIHN1Ym1pc3Npb24gaW4gUDRTdWJtaXQuYXBwbHlDb21taXQoKSwgY2xlYW4gdXAgdGhlIG1lc3MgaWYgInA0CisgICBzdWJtaXQiIGZhaWxzLgorCisgKiBIYXZpbmcgYSBsZWZ0b3ZlciAuaWR4IGZpbGUgd2l0aG91dCBjb3JyZXNwb25kaW5nIC5wYWNrIGZpbGUgaW4KKyAgIHRoZSByZXBvc2l0b3J5IGh1cnRzIHBlcmZvcm1hbmNlOyAiZ2l0IGdjIiBsZWFybmVkIHRvIHBydW5lIHRoZW0uCisKKyAqIFRoZSBjb2RlIHRvIHByZXBhcmUgdGhlIHdvcmtpbmcgdHJlZSBzaWRlIG9mIHRlbXBvcmFyeSBkaXJlY3RvcnkKKyAgIGZvciB0aGUgImRpci1kaWZmIiBmZWF0dXJlIGZvcmdvdCB0aGF0IHN5bWJvbGljIGxpbmtzIG5lZWQgbm90IGJlCisgICBjb3BpZWQgKG9yIHN5bWxpbmtlZCkgdG8gdGhlIHRlbXBvcmFyeSBhcmVhLCBhcyB0aGUgY29kZSBhbHJlYWR5CisgICBzcGVjaWFsIGNhc2VzIGFuZCBvdmVyd3JpdGVzIHRoZW0uICBCZXNpZGVzLCBpdCB3YXMgd3JvbmcgdG8gdHJ5CisgICBjb21wdXRpbmcgdGhlIG9iamVjdCBuYW1lIG9mIHRoZSB0YXJnZXQgb2Ygc3ltYm9saWMgbGluaywgd2hpY2ggbWF5CisgICBub3QgZXZlbiBleGlzdCBvciBtYXkgYmUgYSBkaXJlY3RvcnkuCisKKyAqIFRoZXJlIHdhcyBubyB3YXkgdG8gZGVmZWF0IGEgY29uZmlndXJlZCByZWJhc2UuYXV0b3N0YXNoIHZhcmlhYmxlCisgICBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGFzICJnaXQgcmViYXNlIC0tbm8tYXV0b3N0YXNoIiB3YXMgbWlzc2luZy4KKworICogQWxsb3cgImdpdCBpbnRlcnByZXQtdHJhaWxlcnMiIHRvIHJ1biBvdXRzaWRlIG9mIGEgR2l0IHJlcG9zaXRvcnkuCisKKyAqIFByb2R1Y2UgY29ycmVjdCAiZGlydHkiIG1hcmtlciBmb3Igc2hlbGwgcHJvbXB0cywgZXZlbiB3aGVuIHdlCisgICBhcmUgb24gYW4gb3JwaGFuIG9yIGFuIHVuYm9ybiBicmFuY2guCisKKyAqIFNvbWUgY29ybmVyIGNhc2VzIGhhdmUgYmVlbiBmaXhlZCBpbiBzdHJpbmctbWF0Y2hpbmcgZG9uZSBpbiAiZ2l0CisgICBzdGF0dXMiLgorCisgKiBBcHBsZSdzIGNvbW1vbiBjcnlwdG8gaW1wbGVtZW50YXRpb24gb2YgU0hBMV9VcGRhdGUoKSBkb2VzIG5vdCB0YWtlCisgICBtb3JlIHRoYW4gNEdCIGF0IGEgdGltZSwgYW5kIHdlIG5vdyBoYXZlIGEgY29tcGlsZS10aW1lIHdvcmthcm91bmQKKyAgIGZvciBpdC4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwOTI0YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi41LnR4dApAQCAtMCwwICsxLDU4IEBACitHaXQgdjIuNi41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi42LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCZWNhdXNlICJ0ZXN0X3doZW5fZmluaXNoZWQiIGluIG91ciB0ZXN0IGZyYW1ld29yayBxdWV1ZXMgdGhlCisgICBjbGVhbi11cCB0YXNrcyB0byBiZSBkb25lIGluIGEgc2hlbGwgdmFyaWFibGUsIGl0IHNob3VsZCBub3QgYmUKKyAgIHVzZWQgaW5zaWRlIGEgc3Vic2hlbGwuICBBZGQgYSBtZWNoYW5pc20gdG8gYWxsb3cgJ2Jhc2gnIHRvIGNhdGNoCisgICBzdWNoIHVzZXMsIGFuZCBmaXggdGhlIG9uZXMgdGhhdCB3ZXJlIGZvdW5kLgorCisgKiBVcGRhdGUgImdpdCBzdWJ0cmVlIiAoaW4gY29udHJpYi8pIHNvIHRoYXQgaXQgY2FuIHRha2Ugd2hpdGVzcGFjZXMKKyAgIGluIHRoZSBwYXRobmFtZXMsIG5vdCBvbmx5IGluIHRoZSBpbi10cmVlIHBhdGhuYW1lIGJ1dCB0aGUgbmFtZSBvZgorICAgdGhlIGRpcmVjdG9yeSB0aGF0IHRoZSByZXBvc2l0b3J5IGlzIGluLgorCisgKiBDb3NtZXRpYyBpbXByb3ZlbWVudCB0byBsb2NrLWZpbGUgZXJyb3IgbWVzc2FnZXMuCisKKyAqIG1hcmtfdHJlZV91bmludGVyZXN0aW5nKCkgaGFzIGNvZGUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGl0IGdldHMKKyAgIHBhc3NlZCBhIE5VTEwgcG9pbnRlciBpbiBpdHMgJ3RyZWUnIHBhcmFtZXRlciwgYnV0IHRoZSBmdW5jdGlvbiBoYWQKKyAgICdvYmplY3QgPSAmdHJlZS0+b2JqZWN0JyBhc3NpZ25tZW50IGJlZm9yZSBjaGVja2luZyBpZiB0cmVlIGlzCisgICBOVUxMLiAgVGhpcyBnaXZlcyBhIGNvbXBpbGVyIGFuIGV4Y3VzZSB0byBkZWNsYXJlIHRoYXQgdHJlZSB3aWxsCisgICBuZXZlciBiZSBOVUxMIGFuZCBhcHBseSBhIHdyb25nIG9wdGltaXphdGlvbi4gIEF2b2lkIGl0LgorCisgKiBUaGUgaGVscGVyIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIGxvb3NlIG9iamVjdCBkaXJlY3RvcmllcyB0byBwcnVuZQorICAgc3RhbGUgb2JqZWN0cyBkaWQgbm90IGNsb3NlZGlyKCkgaW1tZWRpYXRlbHkgd2hlbiBpdCBpcyBkb25lIHdpdGggYQorICAgZGlyZWN0b3J5LS1hIGNhbGxiYWNrIHN1Y2ggYXMgdGhlIG9uZSB1c2VkIGZvciAiZ2l0IHBydW5lIiBtYXkgd2FudAorICAgdG8gZG8gcm1kaXIoKSwgYnV0IGl0IHdvdWxkIGZhaWwgb24gb3BlbiBkaXJlY3Rvcnkgb24gcGxhdGZvcm1zCisgICBzdWNoIGFzIFdpblhQLgorCisgKiAiZ2l0IHA0IiB1c2VkIHRvIGltcG9ydCBQZXJmb3JjZSBDTHMgdGhhdCB0b3VjaCBvbmx5IHBhdGhzIG91dHNpZGUKKyAgIHRoZSBjbGllbnQgc3BlYyBhcyBlbXB0eSBjb21taXRzLiAgSXQgaGFzIGJlZW4gY29ycmVjdGVkIHRvIGlnbm9yZQorICAgdGhlbSBpbnN0ZWFkLCB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24gZ2l0LXA0LmtlZXBFbXB0eUNvbW1pdHMgYXMgYQorICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBrbm9iLgorCisgKiBUaGUgZXhpdCBjb2RlIG9mIGdpdC1mc2NrIGRpZCBub3QgcmVmbGVjdCBzb21lIHR5cGVzIG9mIGVycm9ycworICAgZm91bmQgaW4gcGFja2VkIG9iamVjdHMsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgdXNlZCB0byBsaXN0ICJnaXQgY29sdW1uIgorICAgKHdoaWNoIGlzIG5vdCBhbiBlbmQtdXNlciBmYWNpbmcgY29tbWFuZCkgYXMgb25lIG9mIHRoZSBjaG9pY2VzCisKKyAqIEltcHJvdmUgZXJyb3IgcmVwb3J0aW5nIHdoZW4gU01UUCBUTFMgZmFpbHMuCisKKyAqIFdoZW4gZ2V0cHd1aWQoKSBvbiB0aGUgc3lzdGVtIHJldHVybmVkIE5VTEwgKGUuZy4gdGhlIHVzZXIgaXMgbm90CisgICBpbiB0aGUgL2V0Yy9wYXNzd2QgZmlsZSBvciBvdGhlciB1aWQtdG8tbmFtZSBtYXBwaW5ncyksIHRoZQorICAgY29kZXBhdGggdG8gZmluZCB3aG8gdGhlIHVzZXIgaXMgdG8gcmVjb3JkIGl0IGluIHRoZSByZWZsb2cgYmFyZmVkCisgICBhbmQgZGllZC4gIExvb3NlbiB0aGUgY2hlY2sgaW4gdGhpcyBjb2RlcGF0aCwgd2hpY2ggYWxyZWFkeSBhY2NlcHRzCisgICBxdWVzdGlvbmFibGUgaWRlbnQgc3RyaW5nIChlLmcuIGhvc3QgcGFydCBvZiB0aGUgZS1tYWlsIGFkZHJlc3MgaXMKKyAgIG9idmlvdXNseSBib2d1cyksIGFuZCBpbiBnZW5lcmFsIHdoZW4gd2Ugb3BlcmF0ZSBmbXRfaWRlbnQoKSBmdW5jdGlvbgorICAgaW4gbm9uLXN0cmljdCBtb2RlLgorCisgKiAiZ2l0IHN5bWJvbGljLXJlZiIgZm9yZ290IHRvIHJlcG9ydCBhIGZhaWx1cmUgd2l0aCBpdHMgZXhpdCBzdGF0dXMuCisKKyAqIEhpc3RvcnkgdHJhdmVyc2FsIHdpdGggImdpdCBsb2cgLS1zb3VyY2UiIHRoYXQgc3RhcnRzIHdpdGggYW4KKyAgIGFubm90YXRlZCB0YWcgZmFpbGVkIHRvIHJlcG9ydCB0aGUgdGFnIGFzICJzb3VyY2UiLCBkdWUgdG8gYW4KKyAgIG9sZCByZWdyZXNzaW9uIGluIHRoZSBjb21tYW5kIGxpbmUgcGFyc2VyIGJhY2sgaW4gdjIuMiBkYXlzLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzYWQ4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjYudHh0CkBAIC0wLDAgKzEsMTEgQEAKK0dpdCB2Mi42LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjYuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEJ1Z2ZpeCBwYXRjaGVzIHdlcmUgYmFja3BvcnRlZCBmcm9tIHRoZSAnbWFzdGVyJyBmcm9udCB0byBwbHVnIGhlYXAKKyAgIGNvcnJ1cHRpb24gaG9sZXMsIHRvIGNhdGNoIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIGNvbXB1dGF0aW9uIG9mCisgICBwYXRobmFtZSBsZW5ndGhzLCBhbmQgdG8gZ2V0IHJpZCBvZiB0aGUgbmFtZV9wYXRoIEFQSS4gIEJvdGggb2YKKyAgIHRoZXNlIHdvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gd3JpdGluZyBvdmVyIGFuIHVuZGVyLWFsbG9jYXRlZCBidWZmZXIKKyAgIHdoZW4gZm9ybXVsYXRpbmcgcGF0aG5hbWVzIHdoaWxlIHRyZWUgdHJhdmVyc2FsLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzM1ZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuNy50eHQKQEAgLTAsMCArMSwxMiBAQAorR2l0IHYyLjYuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNi42CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdC1zaGVsbCIgcmVqZWN0cyBhIHJlcXVlc3QgdG8gc2VydmUgYSByZXBvc2l0b3J5IHdob3NlIG5hbWUKKyAgIGJlZ2lucyB3aXRoIGEgZGFzaCwgd2hpY2ggbWFrZXMgaXQgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIGdldCBpdAorICAgY29uZnVzZWQgaW50byBzcGF3bmluZyBzZXJ2aWNlIHByb2dyYW1zIGxpa2UgImdpdC11cGxvYWQtcGFjayIgd2l0aAorICAgYW4gb3B0aW9uIGxpa2UgIi0taGVscCIsIHdoaWNoIGluIHR1cm4gd291bGQgc3Bhd24gYW4gaW50ZXJhY3RpdmUKKyAgIHBhZ2VyLCBpbnN0ZWFkIG9mIHdvcmtpbmcgd2l0aCB0aGUgcmVwb3NpdG9yeSB1c2VyIGFza2VkIHRvIGFjY2VzcworICAgKGkuZS4gdGhlIG9uZSB3aG9zZSBuYW1lIGlzICItLWhlbHAiKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNjYmYzYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjAudHh0CkBAIC0wLDAgKzEsNDE0IEBACitHaXQgMi43IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYyLjYKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogVGhlIGFwcGVhcmFuY2Ugb2YgImdpdGsiLCBwYXJ0aWN1bGFybHkgb24gaGlnaCBEUEkgbW9uaXRvcnMsIGhhdmUKKyAgIGJlZW4gaW1wcm92ZWQuICAiZ2l0ayIgYWxzbyBjb21lcyB3aXRoIGFuIHVuZGF0ZWQgdHJhbnNsYXRpb24gZm9yCisgICBTd2VkaXNoIGFuZCBKYXBhbmVzZS4KKworICogImdpdCByZW1vdGUiIGxlYXJuZWQgImdldC11cmwiIHN1YmNvbW1hbmQgdG8gc2hvdyB0aGUgVVJMIGZvciBhCisgICBnaXZlbiByZW1vdGUgbmFtZSB1c2VkIGZvciBmZXRjaGluZyBhbmQgcHVzaGluZy4KKworICogVGhlcmUgd2FzIG5vIHdheSB0byBkZWZlYXQgYSBjb25maWd1cmVkIHJlYmFzZS5hdXRvc3Rhc2ggdmFyaWFibGUKKyAgIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgYXMgImdpdCByZWJhc2UgLS1uby1hdXRvc3Rhc2giIHdhcyBtaXNzaW5nLgorCisgKiAiZ2l0IGxvZyAtLWRhdGU9bG9jYWwiIHVzZWQgdG8gb25seSBzaG93IHRoZSBub3JtYWwgKGRlZmF1bHQpCisgICBmb3JtYXQgaW4gdGhlIGxvY2FsIHRpbWV6b25lLiAgVGhlIGNvbW1hbmQgbGVhcm5lZCB0byB0YWtlICdsb2NhbCcKKyAgIGFzIGFuIGluc3RydWN0aW9uIHRvIHVzZSB0aGUgbG9jYWwgdGltZXpvbmUgd2l0aCBvdGhlciBmb3JtYXRzLAorCisgKiBUaGUgcmVmcyB1c2VkIGR1cmluZyBhICJnaXQgYmlzZWN0IiBzZXNzaW9uIGlzIG5vdyBwZXItd29ya3RyZWUgc28KKyAgIHRoYXQgaW5kZXBlbmRlbnQgYmlzZWN0IHNlc3Npb25zIGNhbiBiZSBkb25lIGluIGRpZmZlcmVudCB3b3JrdHJlZXMKKyAgIGNyZWF0ZWQgd2l0aCAiZ2l0IHdvcmt0cmVlIGFkZCIuCisKKyAqIFVzZXJzIHdobyBhcmUgdG9vIGJ1c3kgdG8gdHlwZSB0aHJlZSBleHRyYSBrZXlzdHJva2VzIHRvIGFzayBmb3IKKyAgICJnaXQgc3Rhc2ggc2hvdyAtcCIgY2FuIG5vdyBzZXQgc3Rhc2guc2hvd1BhdGNoIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIHRvIHRydWUgdG8gYWx3YXlzIHNlZSB0aGUgYWN0dWFsIHBhdGNoLCBub3QganVzdCB0aGUgbGlzdAorICAgb2YgcGF0aHMgYWZmZWN0ZWQgd2l0aCBmZWVsIGZvciB0aGUgZXh0ZW50IG9mIGRhbWFnZSB2aWEgZGlmZnN0YXQuCisKKyAqICJxdWlsdGltcG9ydCIgYWxsb3dzIHRvIHNwZWNpZnkgdGhlIHNlcmllcyBmaWxlIGJ5IGhvbm9yaW5nIHRoZQorICAgJFFVSUxUX1NFUklFUyBlbnZpcm9ubWVudCBhbmQgYWxzbyAtLXNlcmllcyBjb21tYW5kIGxpbmUgb3B0aW9uLgorCisgKiBUaGUgdXNlIG9mICdnb29kL2JhZCcgaW4gImdpdCBiaXNlY3QiIG1hZGUgaXQgY29uZnVzaW5nIHRvIHVzZSB3aGVuCisgICBodW50aW5nIGZvciBhIHN0YXRlIGNoYW5nZSB0aGF0IGlzIG5vdCBhIHJlZ3Jlc3Npb24gKGUuZy4gYnVnZml4KS4KKyAgIFRoZSBjb21tYW5kIGxlYXJuZWQgJ29sZC9uZXcnIGFuZCB0aGVuIGFsbG93cyB0aGUgZW5kIHVzZXIgdG8KKyAgIHNheSBlLmcuICJiaXNlY3Qgc3RhcnQgLS10ZXJtLW9sZD1mYXN0IC0tdGVybS1uZXc9c2xvdyIgdG8gZmluZCBhCisgICBwZXJmb3JtYW5jZSByZWdyZXNzaW9uLgorCisgKiAiZ2l0IGludGVycHJldC10cmFpbGVycyIgY2FuIG5vdyBydW4gb3V0c2lkZSBvZiBhIEdpdCByZXBvc2l0b3J5LgorCisgKiAiZ2l0IHA0IiBsZWFybmVkIHRvIHJlLWVuY29kZSB0aGUgcGF0aG5hbWUgaXQgdXNlcyB0byBjb21tdW5pY2F0ZQorICAgd2l0aCB0aGUgcDQgZGVwb3Qgd2l0aCBhIG5ldyBvcHRpb24uCisKKyAqIEdpdmUgcHJvZ3Jlc3MgbWV0ZXIgdG8gImdpdCBmaWx0ZXItYnJhbmNoIi4KKworICogQWxsb3cgYSBsYXRlciAiIS9hYmMvZGVmIiB0byBvdmVycmlkZSBhbiBlYXJsaWVyICIvYWJjIiB0aGF0CisgICBhcHBlYXJzIGluIHRoZSBzYW1lIC5naXRpZ25vcmUgZmlsZSB0byBtYWtlIGl0IGVhc2llciB0byBleHByZXNzCisgICAiZXZlcnl0aGluZyBpbiAvYWJjIGRpcmVjdG9yeSBpcyBpZ25vcmVkLCBleGNlcHQgZm9yIC4uLiIuCisKKyAqIFRlYWNoICJnaXQgcDQiIHRvIHNlbmQgbGFyZ2UgYmxvYnMgb3V0c2lkZSB0aGUgcmVwb3NpdG9yeSBieQorICAgdGFsa2luZyB0byBHaXQgTEZTLgorCisgKiBQcmVwYXJlIGZvciBHaXQgb24tZGlzayByZXBvc2l0b3J5IHJlcHJlc2VudGF0aW9uIHRvIHVuZGVyZ28KKyAgIGJhY2t3YXJkIGluY29tcGF0aWJsZSBjaGFuZ2VzIGJ5IGludHJvZHVjaW5nIGEgbmV3IHJlcG9zaXRvcnkKKyAgIGZvcm1hdCB2ZXJzaW9uICIxIiwgd2l0aCBhbiBleHRlbnNpb24gbWVjaGFuaXNtLgorCisgKiAiZ2l0IHdvcmt0cmVlIiBsZWFybmVkIGEgImxpc3QiIHN1YmNvbW1hbmQuCisKKyAqICJnaXQgY2xvbmUgLS1kaXNzb2NpYXRlIiBsZWFybmVkIHRoYXQgaXQgY2FuIGJlIHVzZWQgZXZlbiB3aGVuCisgICAiLS1yZWZlcmVuY2UiIHdhcyBub3QgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLgorCisgKiAiZ2l0IGJsYW1lIiBsZWFybnQgdG8gdGFrZSAiLS1maXJzdC1wYXJlbnQiIGFuZCAiLS1yZXZlcnNlIiBhdCB0aGUKKyAgIHNhbWUgdGltZSB3aGVuIGl0IG1ha2VzIHNlbnNlLgorCisgKiAiZ2l0IGNoZWNrb3V0IiBkaWQgbm90IGZvbGxvdyB0aGUgdXN1YWwgIi0tW25vLV1wcm9ncmVzcyIKKyAgIGNvbnZlbnRpb24gYW5kIGltcGxlbWVudGVkIG9ubHkgIi0tcXVpZXQiIHRoYXQgaXMgZXNzZW50aWFsbHkKKyAgIGEgc3VwZXJzZXQgb2YgIi0tbm8tcHJvZ3Jlc3MiLiAgRXh0ZW5kIHRoZSBjb21tYW5kIHRvIHN1cHBvcnQgdGhlCisgICB1c3VhbCAiLS1bbm8tXXByb2dyZXNzIi4KKworICogVGhlIHNlbWFudGljcyBvZiB0cmFuc2Zlci5oaWRlUmVmcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGhhdmUgYmVlbgorICAgZXh0ZW5kZWQgdG8gd29yayBiZXR0ZXIgd2l0aCB0aGUgcmVmICJuYW1lc3BhY2UiIGZlYXR1cmUgdGhhdCBsZXRzCisgICB5b3UgdGhyb3cgdW5yZWxhdGVkIGJ1bmNoZXMgb2YgcmVwb3NpdG9yaWVzIGluIGEgc2luZ2xlIHBoeXNpY2FsCisgICByZXBvc2l0b3J5IGFuZCB2aXJ0dWFsbHkgc2VydmUgdGhlbSBhcyBzZXBhcmF0ZSBvbmVzLgorCisgKiBzZW5kLWVtYWlsIGNvbmZpZyB2YXJpYWJsZXMgd2hvc2UgdmFsdWVzIGFyZSBwYXRobmFtZXMgbm93IGdvCisgICB0aHJvdWdoIHRoZSB+dXNlcm5hbWUvIGV4cGFuc2lvbi4KKworICogYmFzaCBjb21wbGV0aW9uIGxlYXJudCB0byBUQUItY29tcGxldGUgcmVjaXBpZW50IGFkZHJlc3NlcyBnaXZlbgorICAgdG8gc2VuZC1lbWFpbC4KKworICogVGhlIGNyZWRlbnRpYWwtY2FjaGUgZGFlbW9uIGNhbiBiZSB0b2xkIHRvIGlnbm9yZSBTSUdIVVAgdG8gd29yaworICAgYXJvdW5kIGlzc3VlIHdoZW4gcnVubmluZyBHaXQgZnJvbSBpbnNpZGUgZW1hY3MuCisKKyAqICJnaXQgcHVzaCIgbGVhcm5lZCBuZXcgY29uZmlndXJhdGlvbiBmb3IgZG9pbmcgIi0tcmVjdXJzZS1zdWJtb2R1bGVzIgorICAgb24gZWFjaCBwdXNoLgorCisgKiAiZm9ybWF0LXBhdGNoIiBoYXMgbGVhcm5lZCBhIG5ldyBvcHRpb24gdG8gemVyby1vdXQgdGhlIGNvbW1pdAorICAgb2JqZWN0IG5hbWUgb24gdGhlIG1ib3ggIkZyb20gIiBsaW5lLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIFRoZSBpbmZyYXN0cnVjdHVyZSB0byByZXdyaXRlICJnaXQgc3VibW9kdWxlIiBpbiBDIGlzIGJlaW5nIGJ1aWx0CisgICBpbmNyZW1lbnRhbGx5LiAgTGV0J3MgcG9saXNoIHRoZXNlIGVhcmx5IHBhcnRzIHdlbGwgZW5vdWdoIGFuZCBtYWtlCisgICB0aGVtIGdyYWR1YXRlIHRvICduZXh0JyBhbmQgJ21hc3RlcicsIHNvIHRoYXQgdGhlIG1vcmUgaW52b2x2ZWQKKyAgIGZvbGxvdy11cCBjYW4gc3RhcnQgY29va2luZyBvbiBhIHNvbGlkIGdyb3VuZC4KKworICogU29tZSBmZWF0dXJlcyBmcm9tICJnaXQgdGFnIC1sIiBhbmQgImdpdCBicmFuY2ggLWwiIGhhdmUgYmVlbiBtYWRlCisgICBhdmFpbGFibGUgdG8gImdpdCBmb3ItZWFjaC1yZWYiIHNvIHRoYXQgZXZlbnR1YWxseSB0aGUgdW5pZmllZAorICAgaW1wbGVtZW50YXRpb24gY2FuIGJlIHNoYXJlZCBhY3Jvc3MgYWxsIHRocmVlLiAgVGhlIHZlcnNpb24gbWVyZ2VkCisgICB0byB0aGUgJ21hc3RlcicgYnJhbmNoIGVhcmxpZXIgaGFkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBpbiAidGFnCisgICAtLWNvbnRhaW5zIiwgd2hpY2ggaGFzIHNpbmNlIGJlZW4gY29ycmVjdGVkLgorCisgKiBCZWNhdXNlICJ0ZXN0X3doZW5fZmluaXNoZWQiIGluIG91ciB0ZXN0IGZyYW1ld29yayBxdWV1ZXMgdGhlCisgICBjbGVhbi11cCB0YXNrcyB0byBiZSBkb25lIGluIGEgc2hlbGwgdmFyaWFibGUsIGl0IHNob3VsZCBub3QgYmUKKyAgIHVzZWQgaW5zaWRlIGEgc3Vic2hlbGwuICBBZGQgYSBtZWNoYW5pc20gdG8gYWxsb3cgJ2Jhc2gnIHRvIGNhdGNoCisgICBzdWNoIHVzZXMsIGFuZCBmaXggdGhlIG9uZXMgdGhhdCB3ZXJlIGZvdW5kLgorCisgKiBUaGUgZGVidWdnaW5nIGluZnJhc3RydWN0dXJlIGZvciBwa3QtbGluZSBiYXNlZCBjb21tdW5pY2F0aW9uIGhhcworICAgYmVlbiBpbXByb3ZlZCB0byBtYXJrIHRoZSBzaWRlLWJhbmQgY29tbXVuaWNhdGlvbiBzcGVjaWZpY2FsbHkuCisKKyAqIFVwZGF0ZSAiZ2l0IGJyYW5jaCIgdGhhdCBsaXN0IGV4aXN0aW5nIGJyYW5jaGVzLCB1c2luZyB0aGUKKyAgIHJlZi1maWx0ZXIgQVBJIHRoYXQgaXMgc2hhcmVkIHdpdGggImdpdCB0YWciIGFuZCAiZ2l0CisgICBmb3ItZWFjaC1yZWYiLgorCisgKiBUaGUgdGVzdCBmb3IgdmFyaW91cyBsaW5lLWVuZGluZyBjb252ZXJzaW9ucyBoYXMgYmVlbiBlbmhhbmNlZC4KKworICogQSBmZXcgdGVzdCBzY3JpcHRzIGFyb3VuZCAiZ2l0IHA0IiBoYXZlIGJlZW4gaW1wcm92ZWQgZm9yCisgICBwb3J0YWJpbGl0eS4KKworICogTWFueSBhbGxvY2F0aW9ucyB0aGF0IGlzIG1hbnVhbGx5IGNvdW50ZWQgKGNvcnJlY3RseSkgdGhhdCBhcmUKKyAgIGZvbGxvd2VkIGJ5IHN0cmNweS9zcHJpbnRmIGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIGEgbGVzcyBlcnJvcgorICAgcHJvbmUgY29uc3RydWN0cyBzdWNoIGFzIHhzdHJmbXQuCisKKyAqIFRoZSBpbnRlcm5hbCBzdHJpcHNwYWNlKCkgZnVuY3Rpb24gaGFzIGJlZW4gbW92ZWQgdG8gd2hlcmUgaXQKKyAgIGxvZ2ljYWxseSBiZWxvbmdzIHRvLCBpLmUuIHN0cmJ1ZiBBUEksIGFuZCB0aGUgY29tbWFuZCBsaW5lIHBhcnNlcgorICAgb2YgImdpdCBzdHJpcHNwYWNlIiBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSB0aGUgcGFyc2Vfb3B0aW9ucyBBUEkuCisKKyAqICJnaXQgYW0iIHVzZWQgdG8gc3Bhd24gImdpdCBtYWlsaW5mbyIgdmlhIHJ1bl9jb21tYW5kKCkgQVBJIG9uY2UKKyAgIHBlciBlYWNoIHBhdGNoLCBidXQgbGVhcm5lZCB0byBtYWtlIGEgZGlyZWN0IGNhbGwgdG8gbWFpbGluZm8oKQorICAgaW5zdGVhZC4KKworICogVGhlIGltcGxlbWVudGF0aW9uIG9mICJnaXQgbWFpbGluZm8iIHdhcyByZWZhY3RvcmVkIHNvIHRoYXQgYQorICAgbWFpbGluZm8oKSBmdW5jdGlvbiBjYW4gYmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gaW5zaWRlIGEgcHJvY2Vzcy4KKworICogV2l0aCBhICJkZWJ1ZyIgaGVscGVyLCBkZWJ1Z2dpbmcgb2YgYSBzaW5nbGUgImdpdCIgaW52b2NhdGlvbiBpbgorICAgb3VyIHRlc3Qgc2NyaXB0cyBoYXMgYmVjb21lIGEgbG90IGVhc2llci4KKworICogVGhlICJjb25maWd1cmUiIHNjcmlwdCBkaWQgbm90IHRlc3QgZm9yIC1scHRocmVhZCBjb3JyZWN0bHksIHdoaWNoCisgICB1cHNldCBzb21lIGxpbmtlcnMuCisKKyAqIENyb3NzIGNvbXBsZXRlZCB0YXNrIG9mZiBvZiBzdWJ0cmVlIHByb2plY3QncyB0b2RvIGxpc3QuCisKKyAqIFRlc3QgY2xlYW51cHMgZm9yIHRoZSBzdWJ0cmVlIHByb2plY3QuCisKKyAqIENsZWFuIHVwIHN0eWxlIGluIGFuIGFuY2llbnQgdGVzdCB0OTMwMC4KKworICogV29yayBhcm91bmQgc29tZSB0ZXN0IGZsYWtpbmVzcyB3aXRoIHA0ZC4KKworICogRnNjayBkaWQgbm90IGNvcnJlY3RseSBkZXRlY3QgYSBOVUwtdHJ1bmNhdGVkIGhlYWRlciBpbiBhIHRhZy4KKworICogVXNlIGEgc2FmZXIgYmVoYXZpb3Igd2hlbiB3ZSBoaXQgZXJyb3JzIHZlcmlmeWluZyByZW1vdGUgY2VydGlmaWNhdGVzLgorCisgKiBTcGVlZCB1cCBmaWx0ZXItYnJhbmNoIGZvciBjYXNlcyB3aGVyZSB3ZSBvbmx5IGNhcmUgYWJvdXQgcmV3cml0aW5nCisgICBjb21taXRzLCBub3QgdHJlZSBkYXRhLgorCisgKiBUaGUgcGFyc2Utb3B0aW9ucyBBUEkgaGFzIGJlZW4gdXBkYXRlZCB0byBtYWtlICItaCIgY29tbWFuZCBsaW5lCisgICBvcHRpb24gd29yayBtb3JlIGNvbnNpc3RlbnRseSBpbiBhbGwgY29tbWFuZHMuCisKKyAqICJnaXQgc3ZuIHJlYmFzZS9ta2RpcnMiIGdvdCBvcHRpbWl6ZWQgYnkga2VlcGluZyB0cmFjayBvZiBlbXB0eQorICAgZGlyZWN0b3JpZXMgYmV0dGVyLgorCisgKiBGaXggc29tZSByYWN5IGNsaWVudC9zZXJ2ZXIgdGVzdHMgYnkgdHJlYXRpbmcgU0lHUElQRSB0aGUgc2FtZSBhcyBhCisgICBub3JtYWwgbm9uLXplcm8gZXhpdC4KKworICogVGhlIG5lY2Vzc2FyeSBpbmZyYXN0cnVjdHVyZSB0byBidWlsZCB0b3BpY3MgdXNpbmcgdGhlIGZyZWUgVHJhdmlzCisgICBDSSBoYXMgYmVlbiBhZGRlZC4gRGV2ZWxvcGVycyBmb3JraW5nIGZyb20gdGhpcyB0b3BpYyAoYW5kIGVuYWJsaW5nCisgICBUcmF2aXMpIGNhbiBkbyB0aGVpciBvd24gYnVpbGRzLCBhbmQgd2UgY2FuIHR1cm4gb24gYXV0by1idWlsZHMgZm9yCisgICBnaXQvZ2l0IChpbmNsdWRpbmcgYnVpbGQtc3RhdHVzIGZvciBwdWxsIHJlcXVlc3RzIHRoYXQgcGVvcGxlCisgICBvcGVuKS4KKworICogVGhlIHdyaXRlKDIpIGVtdWxhdGlvbiBmb3IgV2luZG93cyBsZWFybmVkIHRvIHNldCBlcnJubyB0byBFUElQRQorICAgd2hlbiBuZWNlc3NhcnkuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjIuNgorLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjYgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycKK25vdGVzIGZvciBkZXRhaWxzKS4KKworICogVmVyeSBzbWFsbCBudW1iZXIgb2Ygb3B0aW9ucyB0YWtlIGEgcGFyYW1ldGVyIHRoYXQgaXMgb3B0aW9uYWwKKyAgICh3aGljaCBpcyBub3QgYSBncmVhdCBVSSBlbGVtZW50IGFzIHRoZXkgY2FuIG9ubHkgYXBwZWFyIGF0IHRoZSBlbmQKKyAgIG9mIHRoZSBjb21tYW5kIGxpbmUpLiAgQWRkIG5vdGljZSB0byBkb2N1bWVudGF0aW9uIG9mIGVhY2ggYW5kCisgICBldmVyeSBvbmUgb2YgdGhlbS4KKworICogImdpdCBibGFtZSAtLWZpcnN0LXBhcmVudCB2MS4wLi52Mi4wIiB3YXMgbm90IHJlamVjdGVkIGJ1dCBkaWQgbm90CisgICBsaW1pdCB0aGUgYmxhbWUgdG8gY29tbWl0cyBvbiB0aGUgZmlyc3QgcGFyZW50IGNoYWluLgorCisgKiAiZ2l0IHN1YnRyZWUiIChpbiBjb250cmliLykgbm93IGNhbiB0YWtlIHdoaXRlc3BhY2VzIGluIHRoZQorICAgcGF0aG5hbWVzLCBub3Qgb25seSBpbiB0aGUgaW4tdHJlZSBwYXRobmFtZSBidXQgdGhlIG5hbWUgb2YgdGhlCisgICBkaXJlY3RvcnkgdGhhdCB0aGUgcmVwb3NpdG9yeSBpcyBpbi4KKworICogVGhlIHNzaCB0cmFuc3BvcnQsIGp1c3QgbGlrZSBhbnkgb3RoZXIgdHJhbnNwb3J0IG92ZXIgdGhlIG5ldHdvcmssCisgICBkaWQgbm90IGNsZWFyIEdJVF8qIGVudmlyb25tZW50IHZhcmlhYmxlcywgYnV0IGl0IGlzIHBvc3NpYmxlIHRvCisgICB1c2UgU2VuZEVudiBhbmQgQWNjZXB0RW52IHRvIGxlYWsgdGhlbSB0byB0aGUgcmVtb3RlIGludm9jYXRpb24gb2YKKyAgIEdpdCwgd2hpY2ggaXMgbm90IGEgZ29vZCBpZGVhIGF0IGFsbC4gIEV4cGxpY2l0bHkgY2xlYXIgdGhlbSBqdXN0CisgICBsaWtlIHdlIGRvIGZvciB0aGUgbG9jYWwgdHJhbnNwb3J0LgorCisgKiBDb3JyZWN0ICJnaXQgcDQgLS1kZXRlY3QtbGFiZWxzIiBzbyB0aGF0IGl0IGRvZXMgbm90IGZhaWwgdG8gY3JlYXRlCisgICBhIHRhZyB0aGF0IHBvaW50cyBhdCBhIGNvbW1pdCB0aGF0IGlzIGFsc28gYmVpbmcgaW1wb3J0ZWQuCisKKyAqIFRoZSBNYWtlZmlsZSBhbHdheXMgcnVucyB0aGUgbGlicmFyeSBhcmNoaXZlciB3aXRoIGhhcmRjb2RlZCAiY3JzIgorICAgb3B0aW9ucywgd2hpY2ggd2FzIGluY29udmVuaWVudCBmb3IgZXhvdGljIHBsYXRmb3JtcyBvbiB3aGljaAorICAgcGVvcGxlIHdhbnQgdG8gdXNlIHByb2dyYW1zIHdpdGggdG90YWxseSBkaWZmZXJlbnQgc2V0IG9mIGNvbW1hbmQKKyAgIGxpbmUgb3B0aW9ucy4KKworICogQ3VzdG9taXphdGlvbiB0byBjaGFuZ2UgdGhlIGJlaGF2aW91ciB3aXRoICJtYWtlIC13IiBhbmQgIm1ha2UgLXMiCisgICBpbiBvdXIgTWFrZWZpbGUgd2FzIGJyb2tlbiB3aGVuIHRoZXkgd2VyZSB1c2VkIHRvZ2V0aGVyLgorCisgKiBBbGxvY2F0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zIGFuZCBzdGRpbyBhcmUgdW5zYWZlIHRoaW5ncyB0byBjYWxsCisgICBpbnNpZGUgYSBzaWduYWwgaGFuZGxlciwgYW5kIGluZGVlZCBraWxsaW5nIHRoZSBwYWdlciBjYW4gY2F1c2UKKyAgIGdsaWJjIHRvIGRlYWRsb2NrIHdhaXRpbmcgb24gYWxsb2NhdGlvbiBtdXRleCBhcyBvdXIgc2lnbmFsIGhhbmRsZXIKKyAgIHRyaWVzIHRvIGZyZWUoKSBzb21lIGRhdGEgc3RydWN0dXJlcyBpbiB3YWl0X2Zvcl9wYWdlcigpLiAgUmVkdWNlCisgICB0aGVzZSB1bnNhZmUgY2FsbHMuCisKKyAqIFRoZSB3YXkgaG93IC0tcmVmLy0tbm90ZXMgdG8gc3BlY2lmeSB0aGUgbm90ZXMgdHJlZSByZWZlcmVuY2UgYXJlCisgICBEV0lNbWVkIHdhcyBub3QgY2xlYXJseSBkb2N1bWVudGVkLgorCisgKiAiZ2l0IGdjIiB1c2VkIHRvIGJhcmYgd2hlbiBhIHN5bWJvbGljIHJlZiBoYXMgZ29uZSBkYW5nbGluZworICAgKGUuZy4gdGhlIGJyYW5jaCB0aGF0IHVzZWQgdG8gYmUgeW91ciB1cHN0cmVhbSdzIGRlZmF1bHQgd2hlbiB5b3UKKyAgIGNsb25lZCBmcm9tIGl0IGlzIG5vdyBnb25lLCBhbmQgeW91IGRpZCAiZmV0Y2ggLS1wcnVuZSIpLgorCisgKiAiZ2l0IGNsb25lIC0tZGlzc29jaWF0ZSIgcnVucyBhIGJpZyAiZ2l0IHJlcGFjayIgcHJvY2VzcyBhdCB0aGUKKyAgIGVuZCwgYW5kIGl0IGhlbHBzIHRvIGNsb3NlIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCBhcmUgb3BlbiBvbiB0aGUKKyAgIHBhY2tzIGFuZCB0aGVpciBpZHggZmlsZXMgYmVmb3JlIGRvaW5nIHNvIG9uIGZpbGVzeXN0ZW1zIHRoYXQKKyAgIGNhbm5vdCByZW1vdmUgYSBmaWxlIHRoYXQgaXMgc3RpbGwgb3Blbi4KKworICogRGVzY3JpcHRpb24gb2YgdGhlICJsb2cuZm9sbG93IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGluICJnaXQgbG9nIgorICAgZG9jdW1lbnRhdGlvbiBpcyBub3cgYWxzbyBjb3BpZWQgdG8gImdpdCBjb25maWciIGRvY3VtZW50YXRpb24uCisKKyAqICJnaXQgcmViYXNlIC1pIiBoYWQgYSBtaW5vciByZWdyZXNzaW9uIHJlY2VudGx5LCB3aGljaCBzdG9wcGVkCisgICBjb25zaWRlcmluZyBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCBhbiBpbmRlbnRlZCAnIycgaW4gaXRzIGluc24KKyAgIHNoZWV0IG5vdCBhIGNvbW1lbnQuIEZ1cnRoZXIsIHRoZSBjb2RlIHdhcyBzdGlsbCB0b28gcGlja3kgb24KKyAgIFdpbmRvd3Mgd2hlcmUgQ1JMRiBsZWZ0IGJ5IHRoZSBlZGl0b3IgaXMgdHVybmVkIGludG8gYSB0cmFpbGluZyBDUgorICAgb24gdGhlIGxpbmUgcmVhZCB2aWEgdGhlICJyZWFkIiBidWlsdC1pbiBjb21tYW5kIG9mIGJhc2guICBCb3RoIG9mCisgICB0aGVzZSBpc3N1ZXMgYXJlIG5vdyBmaXhlZC4KKworICogQWZ0ZXIgImdpdCBjaGVja291dCAtLWRldGFjaCIsICJnaXQgc3RhdHVzIiByZXBvcnRlZCBhIGZhaXJseQorICAgdXNlbGVzcyAiSEVBRCBkZXRhY2hlZCBhdCBIRUFEIiwgaW5zdGVhZCBvZiBzYXlpbmcgYXQgd2hpY2ggZXhhY3QKKyAgIGNvbW1pdC4KKworICogV2hlbiAiZ2l0IHNlbmQtZW1haWwiIHdhbnRlZCB0byB0YWxrIG92ZXIgTmV0OjpTTVRQOjpTU0wsCisgICBOZXQ6OkNtZDo6ZGF0YXNlbmQoKSBkaWQgbm90IGxpa2UgdG8gYmUgZmVkIHRvbyBtYW55IGJ5dGVzIGF0IHRoZQorICAgc2FtZSB0aW1lIGFuZCBmYWlsZWQgdG8gc2VuZCBtZXNzYWdlcy4gIFNlbmQgdGhlIHBheWxvYWQgb25lIGxpbmUKKyAgIGF0IGEgdGltZSB0byB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbS4KKworICogV2hlbiAiZ2l0IGFtIiB3YXMgcmV3cml0dGVuIGFzIGEgYnVpbHQtaW4sIGl0IHN0b3BwZWQgcGF5aW5nCisgICBhdHRlbnRpb24gdG8gdXNlci5zaWduaW5na2V5LCB3aGljaCB3YXMgZml4ZWQuCisKKyAqIEl0IHdhcyBub3QgcG9zc2libGUgdG8gdXNlIGEgcmVwb3NpdG9yeS1sb29rYWxpa2UgY3JlYXRlZCBieSAiZ2l0CisgICB3b3JrdHJlZSBhZGQiIGFzIGEgbG9jYWwgc291cmNlIG9mICJnaXQgY2xvbmUiLgorCisgKiBPbiBhIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMsIHNldHRpbmcgR0lUX1dPUktfVFJFRSB2YXJpYWJsZQorICAgdXNpbmcgYSByYW5kb20gY2FzZXMgdGhhdCBkb2VzIG5vdCBhZ3JlZSB3aXRoIHdoYXQgdGhlIGZpbGVzeXN0ZW0KKyAgIHRoaW5rcyBjb25mdXNlZCBHaXQgdGhhdCBpdCB3YXNuJ3QgaW5zaWRlIHRoZSB3b3JraW5nIHRyZWUuCisKKyAqIFBlcmZvcm1hbmNlLW1lYXN1cmVtZW50IHRlc3RzIGRpZCBub3Qgd29yayB3aXRob3V0IGFuIGluc3RhbGxlZCBHaXQuCisKKyAqIEEgdGVzdCBzY3JpcHQgZm9yIHRoZSBIVFRQIHNlcnZpY2UgaGFkIGEgdGltaW5nIGRlcGVuZGVudCBidWcsCisgICB3aGljaCB3YXMgZml4ZWQuCisKKyAqIFRoZXJlIHdlcmUgc29tZSBjbGFzc2VzIG9mIGVycm9ycyB0aGF0ICJnaXQgZnNjayIgZGlhZ25vc2VkIHRvIGl0cworICAgc3RhbmRhcmQgZXJyb3IgdGhhdCBkaWQgbm90IGNhdXNlIGl0IHRvIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMuCisKKyAqIFdvcmsgYXJvdW5kICJnaXQgcDQiIGZhaWxpbmcgd2hlbiB0aGUgUDQgZGVwb3QgcmVjb3JkcyB0aGUgY29udGVudHMKKyAgIGluIFVURi0xNiB3aXRob3V0IFVURi0xNiBCT00uCisKKyAqIFdoZW4gImdpdCBnYyAtLWF1dG8iIGlzIGJhY2tncm91bmRlZCwgaXRzIGRpYWdub3NpcyBtZXNzYWdlIGlzCisgICBsb3N0LiAgU2F2ZSBpdCB0byBhIGZpbGUgaW4gJEdJVF9ESVIgYW5kIHNob3cgaXQgbmV4dCB0aW1lIHRoZSAiZ2MKKyAgIC0tYXV0byIgaXMgcnVuLgorCisgKiBUaGUgc3VibW9kdWxlIGNvZGUgaGFzIGJlZW4gdGF1Z2h0IHRvIHdvcmsgYmV0dGVyIHdpdGggc2VwYXJhdGUKKyAgIHdvcmsgdHJlZXMgY3JlYXRlZCB2aWEgImdpdCB3b3JrdHJlZSBhZGQiLgorCisgKiAiZ2l0IGdjIiBpcyBzYWZlIHRvIHJ1biBhbnl0aW1lIG9ubHkgYmVjYXVzZSBpdCBoYXMgdGhlIGJ1aWx0LWluCisgICBncmFjZSBwZXJpb2QgdG8gcHJvdGVjdCB5b3VuZyBvYmplY3RzLiAgSW4gb3JkZXIgdG8gcnVuIHdpdGggbm8KKyAgIGdyYWNlIHBlcmlvZCwgdGhlIHVzZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgcmVwb3NpdG9yeSBpcworICAgcXVpZXNjZW50LgorCisgKiBBIHJlY2VudCAiZmlsdGVyLWJyYW5jaCAtLW1zZy1maWx0ZXIiIGJyb2tlIHNraXBwaW5nIG9mIHRoZSBjb21taXQKKyAgIG9iamVjdCBoZWFkZXIsIHdoaWNoIGlzIGZpeGVkLgorCisgKiBUaGUgbm9ybWFsaXplX2NlaWxpbmdfZW50cnkoKSBmdW5jdGlvbiBkb2VzIG5vdCBtdWNrIHdpdGggdGhlIGVuZAorICAgb2YgdGhlIHBhdGggaXQgYWNjZXB0cywgYW5kIHRoZSByZWFsIHdvcmxkIGNhbGxlcnMgZG8gcmVseSBvbiB0aGF0LAorICAgYnV0IGEgdGVzdCBpbnNpc3RlZCB0aGF0IHRoZSBmdW5jdGlvbiBkcm9wcyBhIHRyYWlsaW5nIHNsYXNoLgorCisgKiBBIHRlc3QgZm9yIGludGVyYWN0aW9uIGJldHdlZW4gdW50cmFja2VkIGNhY2hlIGFuZCBzcGFyc2UgY2hlY2tvdXQKKyAgIGFkZGVkIGluIEdpdCAyLjUgZGF5cyB3ZXJlIGZsYWt5LgorCisgKiBBIGNvdXBsZSBvZiBjb21tYW5kcyBzdGlsbCBzaG93ZWQgIltvcHRpb25zXSIgaW4gdGhlaXIgdXNhZ2Ugc3RyaW5nCisgICB0byBub3RlIHdoZXJlIG9wdGlvbnMgc2hvdWxkIGNvbWUgb24gdGhlaXIgY29tbWFuZCBsaW5lLCBidXQgd2UKKyAgIHNwZWxsIHRoYXQgIls8b3B0aW9ucz5dIiBpbiBtb3N0IHBsYWNlcyB0aGVzZSBkYXlzLgorCisgKiBUaGUgc3lub3BzaXMgdGV4dCBhbmQgdGhlIHVzYWdlIHN0cmluZyBvZiBzdWJjb21tYW5kcyB0aGF0IHJlYWQKKyAgIGxpc3Qgb2YgdGhpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGFyZSBvZnRlbiBzaG93biBhcyBpZiB0aGV5CisgICBvbmx5IHRha2UgaW5wdXQgZnJvbSBhIGZpbGUgb24gYSBmaWxlc3lzdGVtLCB3aGljaCB3YXMgbWlzbGVhZGluZy4KKworICogImdpdCBhbSAtMyIgaGFkIGEgc21hbGwgcmVncmVzc2lvbiB3aGVyZSBpdCBpcyBhYm9ydGVkIGluIGl0cyBlcnJvcgorICAgaGFuZGxpbmcgY29kZXBhdGggd2hlbiB1bmRlcmx5aW5nIG1lcmdlLXJlY3Vyc2l2ZSBmYWlsZWQgaW4gY2VydGFpbgorICAgd2F5cywgYXMgaXQgYXNzdW1lZCB0aGF0IHRoZSBpbnRlcm5hbCBjYWxsIHRvIG1lcmdlLXJlY3Vyc2l2ZSB3aWxsCisgICBuZXZlciBkaWUsIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSAoeWV0KS4KKworICogVGhlIGxpbmthZ2Ugb3JkZXIgb2YgbGlicmFyaWVzIHdhcyB3cm9uZyBpbiBwbGFjZXMgYXJvdW5kIGxpYmN1cmwuCisKKyAqIFRoZSBuYW1lLWhhc2ggc3Vic3lzdGVtIHRoYXQgaXMgdXNlZCB0byBjb3BlIHdpdGggY2FzZSBpbnNlbnNpdGl2ZQorICAgZmlsZXN5c3RlbXMga2VlcHMgdHJhY2sgb2YgZGlyZWN0b3JpZXMgYW5kIHRoZWlyIG9uLWZpbGVzeXN0ZW0KKyAgIGNhc2VzIGZvciBhbGwgdGhlIHBhdGhzIGluIHRoZSBpbmRleCBieSBob2xkaW5nIGEgcG9pbnRlciB0byBhCisgICByYW5kb21seSBjaG9zZW4gY2FjaGUgZW50cnkgdGhhdCBpcyBpbnNpZGUgdGhlIGRpcmVjdG9yeSAoZm9yIGl0cworICAgY2UtPmNlX25hbWUgY29tcG9uZW50KS4gIFRoaXMgcG9pbnRlciB3YXMgbm90IHVwZGF0ZWQgZXZlbiB3aGVuIHRoZQorICAgY2FjaGUgZW50cnkgd2FzIHJlbW92ZWQgZnJvbSB0aGUgaW5kZXgsIGxlYWRpbmcgdG8gdXNlIGFmdGVyIGZyZWUuCisgICBUaGlzIHdhcyBmaXhlZCBieSByZWNvcmRpbmcgdGhlIHBhdGggZm9yIGVhY2ggZGlyZWN0b3J5IGluc3RlYWQgb2YKKyAgIGJvcnJvd2luZyBjYWNoZSBlbnRyaWVzIGFuZCByZXN0cnVjdHVyaW5nIHRoZSBBUEkgc29tZXdoYXQuCisKKyAqICJnaXQgbWVyZ2UtZmlsZSIgdHJpZWQgdG8gc2lnbmFsIGhvdyBtYW55IGNvbmZsaWN0cyBpdCBmb3VuZCwgd2hpY2gKKyAgIG9idmlvdXNseSB3b3VsZCBub3Qgd29yayB3ZWxsIHdoZW4gdGhlcmUgYXJlIHRvbyBtYW55IG9mIHRoZW0uCisKKyAqIFRoZSBlcnJvciBtZXNzYWdlIGZyb20gImdpdCBibGFtZSAtLWNvbnRlbnRzIC0tcmV2ZXJzZSIgaW5jb3JyZWN0bHkKKyAgIHRhbGtlZCBhYm91dCAiLS1jb250ZW50cyAtLWNoaWxkcmVuIi4KKworICogImdpdCBpbWFwLXNlbmQiIGRpZCBub3QgY29tcGlsZSB3ZWxsIHdpdGggb2xkZXIgdmVyc2lvbiBvZiBjVVJMIGxpYnJhcnkuCisKKyAqIE1lcmdpbmcgYSBicmFuY2ggdGhhdCByZW1vdmVzIGEgcGF0aCBhbmQgYW5vdGhlciB0aGF0IGNoYW5nZXMgdGhlCisgICBtb2RlIGJpdHMgb24gdGhlIHNhbWUgcGF0aCBzaG91bGQgaGF2ZSBjb25mbGljdGVkIGF0IHRoZSBwYXRoLCBidXQKKyAgIGl0IGRpZG4ndCBhbmQgc2lsZW50bHkgZmF2b3VyZWQgdGhlIHJlbW92YWwuCisKKyAqICJnaXQgLS1saXRlcmFsLXBhdGhzcGVjcyBhZGQgLXUvLUEiIHdpdGhvdXQgYW55IGNvbW1hbmQgbGluZQorICAgYXJndW1lbnQgbWlzYmVoYXZlZCBldmVyIHNpbmNlIEdpdCAyLjAuCisKKyAqICJnaXQgZGFlbW9uIiB1c2VzICJydW5fY29tbWFuZCgpIiB3aXRob3V0ICJmaW5pc2hfY29tbWFuZCgpIiwgc28gaXQKKyAgIG5lZWRzIHRvIHJlbGVhc2UgcmVzb3VyY2VzIGl0c2VsZiwgd2hpY2ggaXQgZm9yZ290IHRvIGRvLgorCisgKiAiZ2l0IHN0YXR1cyAtLWJyYW5jaCAtLXNob3J0IiBhY2Nlc3NlZCBiZXlvbmQgdGhlIGNvbnN0YW50IHN0cmluZworICAgIkhFQUQiLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFdlIHBlZWsgb2JqZWN0cyBmcm9tIHN1Ym1vZHVsZSdzIG9iamVjdCBzdG9yZSBieSBsaW5raW5nIGl0IHRvIHRoZQorICAgbGlzdCBvZiBhbHRlcm5hdGUgb2JqZWN0IGRhdGFiYXNlcywgYnV0IHRoZSBjb2RlIHRvIGRvIHNvIGZvcmdvdCB0bworICAgY29ycmVjdGx5IGluaXRpYWxpemUgdGhlIGxpc3QuCisKKyAqIFRoZSBjb2RlIHRvIHByZXBhcmUgdGhlIHdvcmtpbmcgdHJlZSBzaWRlIG9mIHRlbXBvcmFyeSBkaXJlY3RvcnkKKyAgIGZvciB0aGUgImRpci1kaWZmIiBmZWF0dXJlIGZvcmdvdCB0aGF0IHN5bWJvbGljIGxpbmtzIG5lZWQgbm90IGJlCisgICBjb3BpZWQgKG9yIHN5bWxpbmtlZCkgdG8gdGhlIHRlbXBvcmFyeSBhcmVhLCBhcyB0aGUgY29kZSBhbHJlYWR5CisgICBzcGVjaWFsIGNhc2VzIGFuZCBvdmVyd3JpdGVzIHRoZW0uICBCZXNpZGVzLCBpdCB3YXMgd3JvbmcgdG8gdHJ5CisgICBjb21wdXRpbmcgdGhlIG9iamVjdCBuYW1lIG9mIHRoZSB0YXJnZXQgb2Ygc3ltYm9saWMgbGluaywgd2hpY2ggbWF5CisgICBub3QgZXZlbiBleGlzdCBvciBtYXkgYmUgYSBkaXJlY3RvcnkuCisKKyAqIEEgUmFuZ2U6IHJlcXVlc3QgY2FuIGJlIHJlc3BvbmRlZCB3aXRoIGEgZnVsbCByZXNwb25zZSBhbmQgd2hlbgorICAgYXNrZWQgcHJvcGVybHkgbGliY3VybCBrbm93cyBob3cgdG8gc3RyaXAgdGhlIHJlc3VsdCBkb3duIHRvIHRoZQorICAgcmVxdWVzdGVkIHJhbmdlLiAgSG93ZXZlciwgd2Ugd2VyZSBoYW5kLWNyYWZ0aW5nIGEgcmFuZ2UgcmVxdWVzdAorICAgYW5kIGl0IGRpZCBub3Qga2ljayBpbi4KKworICogSGF2aW5nIGEgbGVmdG92ZXIgLmlkeCBmaWxlIHdpdGhvdXQgY29ycmVzcG9uZGluZyAucGFjayBmaWxlIGluCisgICB0aGUgcmVwb3NpdG9yeSBodXJ0cyBwZXJmb3JtYW5jZTsgImdpdCBnYyIgbGVhcm5lZCB0byBwcnVuZSB0aGVtLgorCisgKiBBcHBsZSdzIGNvbW1vbiBjcnlwdG8gaW1wbGVtZW50YXRpb24gb2YgU0hBMV9VcGRhdGUoKSBkb2VzIG5vdCB0YWtlCisgICBtb3JlIHRoYW4gNEdCIGF0IGEgdGltZSwgYW5kIHdlIG5vdyBoYXZlIGEgY29tcGlsZS10aW1lIHdvcmthcm91bmQKKyAgIGZvciBpdC4KKworICogUHJvZHVjZSBjb3JyZWN0ICJkaXJ0eSIgbWFya2VyIGZvciBzaGVsbCBwcm9tcHRzLCBldmVuIHdoZW4gd2UKKyAgIGFyZSBvbiBhbiBvcnBoYW4gb3IgYW4gdW5ib3JuIGJyYW5jaC4KKworICogQSBidWlsZCB3aXRob3V0IE5PX0lQdjYgdXNlZCB0byB1c2UgZ2V0aG9zdGJ5bmFtZSgpIHdoZW4gZ3Vlc3NpbmcKKyAgIHVzZXIncyBob3N0bmFtZSwgaW5zdGVhZCBvZiBnZXRhZGRyaW5mbygpIHRoYXQgaXMgdXNlZCBpbiBvdGhlcgorICAgY29kZXBhdGhzIGluIHN1Y2ggYSBidWlsZC4KKworICogVGhlIGV4aXQgY29kZSBvZiBnaXQtZnNjayBkaWQgbm90IHJlZmxlY3Qgc29tZSB0eXBlcyBvZiBlcnJvcnMKKyAgIGZvdW5kIGluIHBhY2tlZCBvYmplY3RzLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBoZWxwZXIgdXNlZCB0byBpdGVyYXRlIG92ZXIgbG9vc2Ugb2JqZWN0IGRpcmVjdG9yaWVzIHRvIHBydW5lCisgICBzdGFsZSBvYmplY3RzIGRpZCBub3QgY2xvc2VkaXIoKSBpbW1lZGlhdGVseSB3aGVuIGl0IGlzIGRvbmUgd2l0aCBhCisgICBkaXJlY3RvcnktLWEgY2FsbGJhY2sgc3VjaCBhcyB0aGUgb25lIHVzZWQgZm9yICJnaXQgcHJ1bmUiIG1heSB3YW50CisgICB0byBkbyBybWRpcigpLCBidXQgaXQgd291bGQgZmFpbCBvbiBvcGVuIGRpcmVjdG9yeSBvbiBwbGF0Zm9ybXMKKyAgIHN1Y2ggYXMgV2luWFAuCisKKyAqICJnaXQgcDQiIHVzZWQgdG8gaW1wb3J0IFBlcmZvcmNlIENMcyB0aGF0IHRvdWNoIG9ubHkgcGF0aHMgb3V0c2lkZQorICAgdGhlIGNsaWVudCBzcGVjIGFzIGVtcHR5IGNvbW1pdHMuICBJdCBoYXMgYmVlbiBjb3JyZWN0ZWQgdG8gaWdub3JlCisgICB0aGVtIGluc3RlYWQsIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbiBnaXQtcDQua2VlcEVtcHR5Q29tbWl0cyBhcyBhCisgICBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGtub2IuCisKKyAqIFRoZSBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pIHVzZWQgdG8gbGlzdCAiZ2l0IGNvbHVtbiIKKyAgICh3aGljaCBpcyBub3QgYW4gZW5kLXVzZXIgZmFjaW5nIGNvbW1hbmQpIGFzIG9uZSBvZiB0aGUgY2hvaWNlcworICAgKG1lcmdlIDE2MGZjZGIgc2cvY29tcGxldGlvbi1uby1jb2x1bW4gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgZXJyb3IgcmVwb3J0aW5nIGZyb20gImdpdCBzZW5kLWVtYWlsIiwgd2hlbiBTTVRQIFRMUyBmYWlscywgaGFzCisgICBiZWVuIGltcHJvdmVkLgorICAgKG1lcmdlIDlkNjA1MjQgamsvc2VuZC1lbWFpbC1zc2wtZXJyb3JzIGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiBnZXRwd3VpZCgpIG9uIHRoZSBzeXN0ZW0gcmV0dXJuZWQgTlVMTCAoZS5nLiB0aGUgdXNlciBpcyBub3QKKyAgIGluIHRoZSAvZXRjL3Bhc3N3ZCBmaWxlIG9yIG90aGVyIHVpZC10by1uYW1lIG1hcHBpbmdzKSwgdGhlCisgICBjb2RlcGF0aCB0byBmaW5kIHdobyB0aGUgdXNlciBpcyB0byByZWNvcmQgaXQgaW4gdGhlIHJlZmxvZyBiYXJmZWQKKyAgIGFuZCBkaWVkLiAgTG9vc2VuIHRoZSBjaGVjayBpbiB0aGlzIGNvZGVwYXRoLCB3aGljaCBhbHJlYWR5IGFjY2VwdHMKKyAgIHF1ZXN0aW9uYWJsZSBpZGVudCBzdHJpbmcgKGUuZy4gaG9zdCBwYXJ0IG9mIHRoZSBlLW1haWwgYWRkcmVzcyBpcworICAgb2J2aW91c2x5IGJvZ3VzKSwgYW5kIGluIGdlbmVyYWwgd2hlbiB3ZSBvcGVyYXRlIGZtdF9pZGVudCgpIGZ1bmN0aW9uCisgICBpbiBub24tc3RyaWN0IG1vZGUuCisgICAobWVyZ2UgOTJiY2JiOSBqay9pZGVudC1sb29zZW4tZ2V0cHd1aWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN5bWJvbGljLXJlZiIgZm9yZ290IHRvIHJlcG9ydCBhIGZhaWx1cmUgd2l0aCBpdHMgZXhpdCBzdGF0dXMuCisgICAobWVyZ2UgZjkxYjI3MyBqay9zeW1ib2xpYy1yZWYtbWFpbnQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBIaXN0b3J5IHRyYXZlcnNhbCB3aXRoICJnaXQgbG9nIC0tc291cmNlIiB0aGF0IHN0YXJ0cyB3aXRoIGFuCisgICBhbm5vdGF0ZWQgdGFnIGZhaWxlZCB0byByZXBvcnQgdGhlIHRhZyBhcyAic291cmNlIiwgZHVlIHRvIGFuCisgICBvbGQgcmVncmVzc2lvbiBpbiB0aGUgY29tbWFuZCBsaW5lIHBhcnNlciBiYWNrIGluIHYyLjIgZGF5cy4KKyAgIChtZXJnZSA3MjgzNTBiIGprL3BlbmRpbmcta2VlcC10YWctbmFtZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcDQiIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBtdWx0aXBsZSBkZXBvdHMgYXQgdGhlIHNhbWUgdGltZQorICAgdXNlZCB0byBpbmNvcnJlY3RseSBkcm9wIGNoYW5nZXMuCisKKyAqIENvZGUgY2xlYW4tdXAsIG1pbm9yIGZpeGVzIGV0Yy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMyM2ZlYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjEudHh0CkBAIC0wLDAgKzEsODcgQEAKK0dpdCB2Mi43LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjcKKy0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gZWFybGllciBjaGFuZ2UgaW4gMi41LngtZXJhIGJyb2tlIHVzZXJzJyBob29rcyBhbmQgYWxpYXNlcyBieQorICAgZXhwb3J0aW5nIEdJVF9XT1JLX1RSRUUgdG8gcG9pbnQgYXQgdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZSwKKyAgIGludGVyZmVyaW5nIHdoZW4gdGhleSB0cmllZCB0byB1c2UgYSBkaWZmZXJlbnQgd29ya2luZyB0cmVlIHdpdGhvdXQKKyAgIHNldHRpbmcgR0lUX1dPUktfVFJFRSBlbnZpcm9ubWVudCB0aGVtc2VsdmVzLgorCisgKiBUaGUgImV4Y2x1ZGVfbGlzdCIgc3RydWN0dXJlIGhhcyB0aGUgdXN1YWwgImFsbG9jLCBuciIgcGFpciBvZgorICAgZmllbGRzIHRvIGJlIHVzZWQgYnkgQUxMT0NfR1JPVygpLCBidXQgY2xlYXJfcGF0dGVybl9saXN0KCkgZm9yZ290CisgICB0byByZXNldCAnYWxsb2MnIHRvIDAgd2hlbiBpdCBjbGVhcmVkICducicgdG8gZGlzY2FyZCB0aGUgbWFuYWdlZAorICAgYXJyYXkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgd2FzIGNvbmZ1c2VkIGJ5IGVzY2FwZWQgcXVvdGVzIHN0b3JlZCBpbiB0aGUgYWxpYXMKKyAgIGZpbGVzIHNhdmVkIGJ5ICJtdXR0Iiwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBBIGZldyB1bnBvcnRhYmxlIEMgY29uc3RydWN0IGhhdmUgYmVlbiBzcG90dGVkIGJ5IGNsYW5nIGNvbXBpbGVyCisgICBhbmQgaGF2ZSBiZWVuIGZpeGVkLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiB1cGRhdGVkIHRvIGhpbnQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbgorICAgdGhlICctLXNpZ25vZmYnIG9wdGlvbiBhbmQgRENPLgorCisgKiAiZ2l0IHJlZmxvZyIgaW5jb3JyZWN0bHkgYXNzdW1lZCB0aGF0IGFsbCBvYmplY3RzIHRoYXQgdXNlZCB0byBiZQorICAgYXQgdGhlIHRpcCBvZiBhIHJlZiBtdXN0IGJlIGNvbW1pdHMsIHdoaWNoIGNhdXNlZCBpdCB0byBzZWdmYXVsdC4KKworICogVGhlIGlnbm9yZSBtZWNoYW5pc20gc2F3IGEgZmV3IHJlZ3Jlc3Npb25zIGFyb3VuZCB1bnRyYWNrZWQgZmlsZQorICAgbGlzdGluZyBhbmQgc3BhcnNlIGNoZWNrb3V0IHNlbGVjdGlvbiBhcmVhcyBpbiAyLjcuMDsgdGhlIGNoYW5nZQorICAgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHJlZ3Jlc3Npb24gaGFzIGJlZW4gcmV2ZXJ0ZWQuCisKKyAqIFNvbWUgY29kZXBhdGhzIHVzZWQgZm9wZW4oMykgd2hlbiBvcGVuaW5nIGEgZml4ZWQgcGF0aCBpbiAkR0lUX0RJUgorICAgKGUuZy4gQ09NTUlUX0VESVRNU0cpIHRoYXQgaXMgbWVhbnQgdG8gYmUgbGVmdCBhZnRlciB0aGUgY29tbWFuZCBpcworICAgZG9uZS4gIFRoaXMgaG93ZXZlciBkaWQgbm90IHdvcmsgd2VsbCBpZiB0aGUgcmVwb3NpdG9yeSBpcyBzZXQgdG8KKyAgIGJlIHNoYXJlZCB3aXRoIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBhbmQgdGhlIHVtYXNrIG9mIHRoZSBwcmV2aW91cworICAgdXNlciBpcyB0aWdodGVyLiAgVGhleSBoYXZlIGJlZW4gbWFkZSB0byB3b3JrIGJldHRlciBieSBjYWxsaW5nCisgICB1bmxpbmsoMikgYW5kIHJldHJ5aW5nIGFmdGVyIGZvcGVuKDMpIGZhaWxzIHdpdGggRVBFUk0uCisKKyAqIEFza2luZyBnaXR3ZWIgZm9yIGEgbm9uZXhpc3RlbnQgY29tbWl0IGxlZnQgYSB3YXJuaW5nIGluIHRoZSBzZXJ2ZXIKKyAgIGxvZy4KKworICogImdpdCByZWJhc2UiLCB1bmxpa2UgYWxsIG90aGVyIGNhbGxlcnMgb2YgImdjIC0tYXV0byIsIGRpZCBub3QKKyAgIGlnbm9yZSB0aGUgZXhpdCBjb2RlIGZyb20gImdjIC0tYXV0byIuCisKKyAqIE1hbnkgY29kZXBhdGhzIHRoYXQgcnVuICJnYyAtLWF1dG8iIGJlZm9yZSBleGl0aW5nIGtlcHQgcGFja2ZpbGVzCisgICBtYXBwZWQgYW5kIGxlZnQgdGhlIGZpbGUgZGVzY3JpcHRvcnMgdG8gdGhlbSBvcGVuLCB3aGljaCB3YXMgbm90CisgICBmcmllbmRseSB0byBzeXN0ZW1zIHRoYXQgY2Fubm90IHJlbW92ZSBmaWxlcyB0aGF0IGFyZSBvcGVuLiAgVGhleQorICAgbm93IGNsb3NlIHRoZSBwYWNrcyBiZWZvcmUgZG9pbmcgc28uCisKKyAqIEEgcmVjZW50IG9wdGltaXphdGlvbiB0byBmaWx0ZXItYnJhbmNoIGluIHYyLjcuMCBpbnRyb2R1Y2VkIGEKKyAgIHJlZ3Jlc3Npb24gd2hlbiAtLXBydW5lLWVtcHR5IGZpbHRlciBpcyB1c2VkLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBUaGUgZGVzY3JpcHRpb24gZm9yIFNBTklUWSBwcmVyZXF1aXNpdGUgdGhlIHRlc3Qgc3VpdGUgdXNlcyBoYXMKKyAgIGJlZW4gY2xhcmlmaWVkIGJvdGggaW4gdGhlIGNvbW1lbnQgYW5kIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4KKworICogImdpdCB0YWciIHN0YXJ0ZWQgbGlzdGluZyBhIHRhZyAiZm9vIiBhcyAidGFncy9mb28iIHdoZW4gYSBicmFuY2gKKyAgIG5hbWVkICJmb28iIGV4aXN0cyBpbiB0aGUgc2FtZSByZXBvc2l0b3J5OyByZW1vdmUgdGhpcyB1bm5lY2Vzc2FyeQorICAgZGlzYW1iaWd1YXRpb24sIHdoaWNoIGlzIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGluIHYyLjcuMC4KKworICogVGhlIHdheSAiZ2l0IHN2biIgdXNlcyBhdXRoIHBhcmFtZXRlciB3YXMgYnJva2VuIGJ5IFN1YnZlcnNpb24KKyAgIDEuOS4wIGFuZCBsYXRlci4KKworICogVGhlICJzcGxpdCIgc3ViY29tbWFuZCBvZiAiZ2l0IHN1YnRyZWUiIChpbiBjb250cmliLykgaW5jb3JyZWN0bHkKKyAgIHNraXBwZWQgbWVyZ2VzIHdoZW4gaXQgc2hvdWxkbid0LCB3aGljaCB3YXMgY29ycmVjdGVkLgorCisgKiBBIGZldyBvcHRpb25zIG9mICJnaXQgZGlmZiIgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbiB0aGUgY29tbWFuZCB3YXMKKyAgIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5LgorCisgKiBkaXJuYW1lKCkgZW11bGF0aW9uIGhhcyBiZWVuIGFkZGVkLCBhcyBNc3lzMiBsYWNrcyBpdC4KKworICogVGhlIHVuZGVybHlpbmcgbWFjaGluZXJ5IHVzZWQgYnkgImxzLWZpbGVzIC1vIiBhbmQgb3RoZXIgY29tbWFuZHMKKyAgIGhhdmUgYmVlbiB0YXVnaHQgbm90IHRvIGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgcmVmIGNhY2hlIGZvciBhCisgICBkaXJlY3RvcnkgdGhhdCBpcyBub3QgYSBzdWJtb2R1bGUuICBUaGlzIHJlbW92ZXMgYSB0b24gb2Ygd2FzdGVkCisgICBDUFUgY3ljbGVzLgorCisgKiBEcm9wIGEgZmV3IG9sZCAidG9kbyIgaXRlbXMgYnkgZGVjaWRpbmcgdGhhdCB0aGUgY2hhbmdlIG9uZSBvZiB0aGVtCisgICBzdWdnZXN0cyBpcyBub3Qgc3VjaCBhIGdvb2QgaWRlYSwgYW5kIGRvaW5nIHRoZSBjaGFuZ2UgdGhlIG90aGVyCisgICBvbmUgc3VnZ2VzdGVkIHRvIGRvLgorCisgKiBEb2N1bWVudGF0aW9uIGZvciAiZ2l0IGZldGNoIC0tZGVwdGgiIGhhcyBiZWVuIHVwZGF0ZWQgZm9yIGNsYXJpdHkuCisKKyAqIFRoZSBjb21tYW5kIGxpbmUgY29tcGxldGlvbiBsZWFybmVkIGEgaGFuZGZ1bCBvZiBhZGRpdGlvbmFsIG9wdGlvbnMKKyAgIGFuZCBjb21tYW5kIHNwZWNpZmljIHN5bnRheC4KKworQWxzbyBpbmNsdWRlcyBhIGhhbmRmdWwgb2YgZG9jdW1lbnRhdGlvbiBhbmQgdGVzdCB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmVlZjc2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMi50eHQKQEAgLTAsMCArMSw0MSBAQAorR2l0IHYyLjcuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNy4xCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGxvdy1sZXZlbCBtZXJnZSBtYWNoaW5lcnkgaGFzIGJlZW4gdGF1Z2h0IHRvIHVzZSBDUkxGIGxpbmUKKyAgIHRlcm1pbmF0aW9uIHdoZW4gaW5zZXJ0aW5nIGNvbmZsaWN0IG1hcmtlcnMgdG8gbWVyZ2VkIGNvbnRlbnRzIHRoYXQKKyAgIGFyZSB0aGVtc2VsdmVzIENSTEYgbGluZS10ZXJtaW5hdGVkLgorCisgKiAiZ2l0IHdvcmt0cmVlIiBoYWQgYSBicm9rZW4gY29kZSB0aGF0IGF0dGVtcHRlZCB0byBhdXRvLWZpeAorICAgcG9zc2libGUgaW5jb25zaXN0ZW5jeSB0aGF0IHJlc3VsdHMgZnJvbSBlbmQtdXNlcnMgbW92aW5nIGEKKyAgIHdvcmt0cmVlIHRvIGRpZmZlcmVudCBwbGFjZXMgd2l0aG91dCB0ZWxsaW5nIEdpdCAodGhlIG9yaWdpbmFsCisgICByZXBvc2l0b3J5IG5lZWRzIHRvIG1haW50YWluIGJhY2twb2ludGVycyB0byBpdHMgd29ya3RyZWVzLCBidXQKKyAgICJtdiIgcnVuIGJ5IGVuZC11c2VycyB3aG8gYXJlIG5vdCBmYW1pbGlhciB3aXRoIHRoYXQgZmFjdCB3aWxsCisgICBvYnZpb3VzbHkgbm90IGFkanVzdCB0aGVtKSwgd2hpY2ggYWN0dWFsbHkgbWFkZSB0aGluZ3Mgd29yc2UKKyAgIHdoZW4gdHJpZ2dlcmVkLgorCisgKiAiZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlIiBoYXMgYmVlbiB0YXVnaHQgdG8gcmVwb3J0IGlmIHRoZSBwdXNoCisgICBuZWVkZWQgdG8gZm9yY2UgKG9yIGZhc3QtZm9yd2FyZGVkKS4KKworICogVGhlIGVtdWxhdGVkICJ5ZXMiIGNvbW1hbmQgdXNlZCBpbiBvdXIgdGVzdCBzY3JpcHRzIGhhcyBiZWVuCisgICB0d2Vha2VkIG5vdCB0byBzcGVuZCB0b28gbXVjaCB0aW1lIGdlbmVyYXRpbmcgdW5uZWNlc3Nhcnkgb3V0cHV0CisgICB0aGF0IGlzIG5vdCB1c2VkLCB0byBoZWxwIHRob3NlIHdobyB0ZXN0IG9uIFdpbmRvd3Mgd2hlcmUgaXQgd291bGQKKyAgIG5vdCBzdG9wIHVudGlsIGl0IGZpbGxzIHRoZSBwaXBlIGJ1ZmZlciBkdWUgdG8gbGFjayBvZiBTSUdQSVBFLgorCisgKiBUaGUgdmltZGlmZiBiYWNrZW5kIGZvciAiZ2l0IG1lcmdldG9vbCIgaGFzIGJlZW4gdHdlYWtlZCB0byBhcnJhbmdlCisgICBhbmQgbnVtYmVyIGJ1ZmZlcnMgaW4gdGhlIG9yZGVyIHRoYXQgd291bGQgbWF0Y2ggdGhlIGV4cGVjdGF0aW9uIG9mCisgICBtYWpvcml0eSBvZiBwZW9wbGUgd2hvIHJlYWQgbGVmdCB0byByaWdodCwgdGhlbiB0b3AgZG93biBhbmQgYXNzaWduCisgICBidWZmZXJzIDEgMiAzIDQgIm1lbnRhbGx5IiB0byBsb2NhbCBiYXNlIHJlbW90ZSBtZXJnZSB3aW5kb3dzIGJhc2VkCisgICBvbiB0aGF0IG9yZGVyLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgImdpdCBjbGVhbiIgaGFzIGJlZW4gY29ycmVjdGVkOyBpdCBtZW50aW9uZWQKKyAgIHRoYXQgLmdpdC9tb2R1bGVzLyogYXJlIHJlbW92ZWQgYnkgZ2l2aW5nIHR3byAiLWYiLCB3aGljaCBoYXMgbmV2ZXIKKyAgIGJlZW4gdGhlIGNhc2UuCisKKyAqIFBhdGhzIHRoYXQgaGF2ZSBiZWVuIHRvbGQgdGhlIGluZGV4IGFib3V0IHdpdGggImFkZCAtTiIgYXJlIG5vdAorICAgcXVpdGUgeWV0IGluIHRoZSBpbmRleCwgYnV0IGEgZmV3IGNvbW1hbmRzIGJlaGF2ZWQgYXMgaWYgdGhleQorICAgYWxyZWFkeSBhcmUgaW4gYSBoYXJtZnVsIHdheS4KKworQWxzbyBpbmNsdWRlcyB0aW55IGRvY3VtZW50YXRpb24gYW5kIHRlc3QgdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxOGQ3MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjMudHh0CkBAIC0wLDAgKzEsNjIgQEAKK0dpdCB2Mi43LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjcuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRyYWRpdGlvbmFsbHksIHRoZSB0ZXN0cyB0aGF0IHRyeSBjb21tYW5kcyB0aGF0IHdvcmsgb24gdGhlCisgICBjb250ZW50cyBpbiB0aGUgd29ya2luZyB0cmVlIHdlcmUgbmFtZWQgd2l0aCAid29ya3RyZWUiIGluIHRoZWlyCisgICBmaWxlbmFtZXMsIGJ1dCB3aXRoIHRoZSByZWNlbnQgYWRkaXRpb24gb2YgImdpdCB3b3JrdHJlZSIKKyAgIHN1YmNvbW1hbmQsIHdob3NlIHRlc3RzIGFyZSBhbHNvIG5hbWVkIHNpbWlsYXJseSwgaXQgaGFzIGJlY29tZQorICAgaGFyZGVyIHRvIHRlbGwgdGhlbSBhcGFydC4gIFRoZSB0cmFkaXRpb25hbCB0ZXN0cyBoYXZlIGJlZW4gcmVuYW1lZAorICAgdG8gdXNlICJ3b3JrLXRyZWUiIGluc3RlYWQgaW4gYW4gYXR0ZW1wdCB0byBkaWZmZXJlbnRpYXRlIHRoZW0uCisKKyAqIE1hbnkgY29kZXBhdGhzIGZvcmdldCB0byBjaGVjayByZXR1cm4gdmFsdWUgZnJvbSBnaXRfY29uZmlnX3NldCgpOworICAgdGhlIGZ1bmN0aW9uIGlzIG1hZGUgdG8gZGllKCkgdG8gbWFrZSBzdXJlIHdlIGRvIG5vdCBwcm9jZWVkIHdoZW4KKyAgIHNldHRpbmcgYSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZhaWxlZC4KKworICogSGFuZGxpbmcgb2YgZXJyb3JzIHdoaWxlIHdyaXRpbmcgaW50byBvdXIgaW50ZXJuYWwgYXN5bmNocm9ub3VzCisgICBwcm9jZXNzIGhhcyBiZWVuIG1hZGUgbW9yZSByb2J1c3QsIHdoaWNoIHJlZHVjZXMgZmxha2luZXNzIGluIG91cgorICAgdGVzdHMuCisKKyAqICJnaXQgc2hvdyAnSEVBRDpGb29bQkFSXUJheiciIGRpZCBub3QgaW50ZXJwcmV0IHRoZSBhcmd1bWVudCBhcyBhCisgICByZXYsIGkuZS4gdGhlIG9iamVjdCBuYW1lZCBieSB0aGUgcGF0aG5hbWUgd2l0aCB3aWxkY2FyZAorICAgY2hhcmFjdGVycyBpbiBhIHRyZWUgb2JqZWN0LgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLWdpdC1jb21tb24tZGlyIiB1c2VkIGluIHRoZSB3b3JrdHJlZSBmZWF0dXJlCisgICBtaXNiZWhhdmVkIHdoZW4gcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyAqIFRoZSAidihpZXcpIiBzdWJjb21tYW5kIG9mIHRoZSBpbnRlcmFjdGl2ZSAiZ2l0IGFtIC1pIiBjb21tYW5kIHdhcworICAgYnJva2VuIGluIDIuNi4wIHRpbWVmcmFtZSB3aGVuIHRoZSBjb21tYW5kIHdhcyByZXdyaXR0ZW4gaW4gQy4KKworICogImdpdCBtZXJnZS10cmVlIiB1c2VkIHRvIG1pc2hhbmRsZSAiYm90aCBzaWRlcyBhZGRlZCIgY29uZmxpY3Qgd2l0aAorICAgaXRzIG93biAiY3JlYXRlIGEgZmFrZSBhbmNlc3RvciBmaWxlIHRoYXQgaGFzIHRoZSBjb21tb24gcGFydHMgb2YKKyAgIHdoYXQgYm90aCBzaWRlcyBoYXZlIGFkZGVkIGFuZCBkbyBhIDMtd2F5IG1lcmdlIiBsb2dpYzsgdGhpcyBoYXMKKyAgIGJlZW4gdXBkYXRlZCB0byB1c2UgdGhlIHVzdWFsICIzLXdheSBtZXJnZSB3aXRoIGFuIGVtcHR5IGJsb2IgYXMKKyAgIHRoZSBmYWtlIGNvbW1vbiBhbmNlc3RvciBmaWxlIiBhcHByb2FjaCB1c2VkIGluIHRoZSByZXN0IG9mIHRoZQorICAgc3lzdGVtLgorCisgKiBUaGUgbWVtb3J5IG93bmVyc2hpcCBydWxlIG9mIGZpbGxfdGV4dGNvbnYoKSBBUEksIHdoaWNoIHdhcyBhIGJpdAorICAgdHJpY2t5LCBoYXMgYmVlbiBkb2N1bWVudGVkIGEgYml0IGJldHRlci4KKworICogVGhlIGRvY3VtZW50YXRpb24gZGlkIG5vdCBjbGVhcmx5IHN0YXRlIHRoYXQgdGhlICdzaW1wbGUnIG1vZGUgaXMKKyAgIG5vdyB0aGUgZGVmYXVsdCBmb3IgImdpdCBwdXNoIiB3aGVuIHB1c2guZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzCisgICBub3Qgc2V0LgorCisgKiBSZWNlbnQgdmVyc2lvbnMgb2YgR05VIGdyZXAgYXJlIHBpY2tpZXIgd2hlbiB0aGVpciBpbnB1dCBjb250YWlucworICAgYXJiaXRyYXJ5IGJpbmFyeSBkYXRhLCB3aGljaCBzb21lIG9mIG91ciB0ZXN0cyB1c2VzLiAgUmV3cml0ZSB0aGUKKyAgIHRlc3RzIHRvIHNpZGVzdGVwIHRoZSBwcm9ibGVtLgorCisgKiBBIGhlbHBlciBmdW5jdGlvbiAiZ2l0IHN1Ym1vZHVsZSIgdXNlcyBzaW5jZSB2Mi43LjAgdG8gbGlzdCB0aGUKKyAgIG1vZHVsZXMgdGhhdCBtYXRjaCB0aGUgcGF0aHNwZWMgYXJndW1lbnQgZ2l2ZW4gdG8gaXRzIHN1YmNvbW1hbmRzCisgICAoZS5nLiAic3VibW9kdWxlIGFkZCA8cmVwbz4gPHBhdGg+IikgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgY29uZmlnIHNlY3Rpb24udmFyIHZhbHVlIiB0byBzZXQgYSB2YWx1ZSBpbiBwZXItcmVwb3NpdG9yeQorICAgY29uZmlndXJhdGlvbiBmaWxlIGZhaWxlZCB3aGVuIGl0IHdhcyBydW4gb3V0c2lkZSBhbnkgcmVwb3NpdG9yeSwKKyAgIGJ1dCBkaWRuJ3Qgc2F5IHRoZSByZWFzb24gY29ycmVjdGx5LgorCisgKiBUaGUgY29kZSB0byByZWFkIHRoZSBwYWNrIGRhdGEgdXNpbmcgdGhlIG9mZnNldHMgc3RvcmVkIGluIHRoZSBwYWNrCisgICBpZHggZmlsZSBoYXMgYmVlbiBtYWRlIG1vcmUgY2FyZWZ1bGx5IGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUKKyAgIGRhdGEgaW4gdGhlIGlkeC4KKworQWxzbyBpbmNsdWRlcyBkb2N1bWVudGF0aW9uIGFuZCB0ZXN0IHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4M2FlODkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy40LnR4dApAQCAtMCwwICsxLDExIEBACitHaXQgdjIuNy40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi43LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCdWdmaXggcGF0Y2hlcyB3ZXJlIGJhY2twb3J0ZWQgZnJvbSB0aGUgJ21hc3RlcicgZnJvbnQgdG8gcGx1ZyBoZWFwCisgICBjb3JydXB0aW9uIGhvbGVzLCB0byBjYXRjaCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBjb21wdXRhdGlvbiBvZgorICAgcGF0aG5hbWUgbGVuZ3RocywgYW5kIHRvIGdldCByaWQgb2YgdGhlIG5hbWVfcGF0aCBBUEkuICBCb3RoIG9mCisgICB0aGVzZSB3b3VsZCBoYXZlIHJlc3VsdGVkIGluIHdyaXRpbmcgb3ZlciBhbiB1bmRlci1hbGxvY2F0ZWQgYnVmZmVyCisgICB3aGVuIGZvcm11bGF0aW5nIHBhdGhuYW1lcyB3aGlsZSB0cmVlIHRyYXZlcnNhbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1NTljZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjUudHh0CkBAIC0wLDAgKzEsMTQgQEAKK0dpdCB2Mi43LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjcuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQtc2hlbGwiIHJlamVjdHMgYSByZXF1ZXN0IHRvIHNlcnZlIGEgcmVwb3NpdG9yeSB3aG9zZSBuYW1lCisgICBiZWdpbnMgd2l0aCBhIGRhc2gsIHdoaWNoIG1ha2VzIGl0IG5vIGxvbmdlciBwb3NzaWJsZSB0byBnZXQgaXQKKyAgIGNvbmZ1c2VkIGludG8gc3Bhd25pbmcgc2VydmljZSBwcm9ncmFtcyBsaWtlICJnaXQtdXBsb2FkLXBhY2siIHdpdGgKKyAgIGFuIG9wdGlvbiBsaWtlICItLWhlbHAiLCB3aGljaCBpbiB0dXJuIHdvdWxkIHNwYXduIGFuIGludGVyYWN0aXZlCisgICBwYWdlciwgaW5zdGVhZCBvZiB3b3JraW5nIHdpdGggdGhlIHJlcG9zaXRvcnkgdXNlciBhc2tlZCB0byBhY2Nlc3MKKyAgIChpLmUuIHRoZSBvbmUgd2hvc2UgbmFtZSBpcyAiLS1oZWxwIikuCisKK0Fsc28gY29udGFpbnMgYSBmZXcgZml4ZXMgYmFja3BvcnRlZCBmcm9tIGxhdGVyIGRldmVsb3BtZW50IHRyYWNrcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM2ZDFkYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjYudHh0CkBAIC0wLDAgKzEsMjUgQEAKK0dpdCB2Mi43LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjcuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEEgInNzaDovLy4uLiIgVVJMIGNhbiByZXN1bHQgaW4gYSAic3NoIiBjb21tYW5kIGxpbmUgd2l0aCBhCisgICBob3N0bmFtZSB0aGF0IGJlZ2lucyB3aXRoIGEgZGFzaCAiLSIsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSAic3NoIgorICAgY29tbWFuZCB0byBpbnN0ZWFkIChtaXMpdHJlYXQgaXQgYXMgYW4gb3B0aW9uLiAgVGhpcyBpcyBub3cKKyAgIHByZXZlbnRlZCBieSBmb3JiaWRkaW5nIHN1Y2ggYSBob3N0bmFtZSAod2hpY2ggd2lsbCBub3QgYmUKKyAgIG5lY2Vzc2FyeSBpbiB0aGUgcmVhbCB3b3JsZCkuCisKKyAqIFNpbWlsYXJseSwgd2hlbiBHSVRfUFJPWFlfQ09NTUFORCBpcyBjb25maWd1cmVkLCB0aGUgY29tbWFuZCBpcworICAgcnVuIHdpdGggaG9zdCBhbmQgcG9ydCB0aGF0IGFyZSBwYXJzZWQgb3V0IGZyb20gInNzaDovLy4uLiIgVVJMOworICAgYSBwb29ybHkgd3JpdHRlbiBHSVRfUFJPWFlfQ09NTUFORCBjb3VsZCBiZSB0cmlja2VkIGludG8gdHJlYXRpbmcKKyAgIGEgc3RyaW5nIHRoYXQgYmVnaW5zIHdpdGggYSBkYXNoICItIi4gIFRoaXMgaXMgbm93IHByZXZlbnRlZCBieQorICAgZm9yYmlkZGluZyBzdWNoIGEgaG9zdG5hbWUgYW5kIHBvcnQgbnVtYmVyIChhZ2Fpbiwgd2hpY2ggd2lsbCBub3QKKyAgIGJlIG5lY2Vzc2FyeSBpbiB0aGUgcmVhbCB3b3JsZCkuCisKKyAqIEluIHRoZSBzYW1lIHNwaXJpdCwgYSByZXBvc2l0b3J5IG5hbWUgdGhhdCBiZWdpbnMgd2l0aCBhIGRhc2ggIi0iCisgICBpcyBhbHNvIGZvcmJpZGRlbiBub3cuCisKK0NyZWRpdHMgZ28gdG8gQnJpYW4gTmVlbCBhdCBHaXRMYWIsIEpvZXJuIFNjaG5lZXdlaXN6IG9mIFJlY3VyaXR5CitMYWJzIGFuZCBKZWZmIEtpbmcgYXQgR2l0SHViLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MzIwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4wLnR4dApAQCAtMCwwICsxLDQzOSBAQAorR2l0IDIuOCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHJzeW5jOi8vIHRyYW5zcG9ydCBoYXMgYmVlbiByZW1vdmVkLgorCisKK1VwZGF0ZXMgc2luY2UgdjIuNworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBJdCB0dXJucyBvdXQgImdpdCBjbG9uZSIgb3ZlciByc3luYyB0cmFuc3BvcnQgaGFzIGJlZW4gYnJva2VuIHdoZW4KKyAgIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBoYXMgcGFja2VkIHJlZmVyZW5jZXMgZm9yIGEgbG9uZyB0aW1lLCBhbmQKKyAgIG5vYm9keSBub3RpY2VkIG5vciBjb21wbGFpbmVkIGFib3V0IGl0LgorCisgKiAicHVzaCIgbGVhcm5lZCB0aGF0IGl0cyAiLS1kZWxldGUiIG9wdGlvbiBjYW4gYmUgc2hvcnRlbmVkIHRvCisgICAiLWQiLCBqdXN0IGxpa2UgImJyYW5jaCAtLWRlbGV0ZSIgYW5kICJicmFuY2ggLWQiIGFyZSB0aGUgc2FtZQorICAgdGhpbmcuCisKKyAqICJnaXQgYmxhbWUiIGxlYXJuZWQgdG8gcHJvZHVjZSB0aGUgcHJvZ3Jlc3MgZXllLWNhbmR5IHdoZW4gaXQgdGFrZXMKKyAgIHRvbyBtdWNoIHRpbWUgYmVmb3JlIGVtaXR0aW5nIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSByZXN1bHQuCisKKyAqICJnaXQgZ3JlcCIgY2FuIG5vdyBiZSBjb25maWd1cmVkIChvciB0b2xkIGZyb20gdGhlIGNvbW1hbmQgbGluZSkKKyAgIGhvdyBtYW55IHRocmVhZHMgdG8gdXNlIHdoZW4gc2VhcmNoaW5nIGluIHRoZSB3b3JraW5nIHRyZWUgZmlsZXMuCisKKyAqIFNvbWUgImdpdCBub3RlcyIgb3BlcmF0aW9ucywgZS5nLiAiZ2l0IGxvZyAtLW5vdGVzPTxub3RlPiIsIHNob3VsZAorICAgYmUgYWJsZSB0byByZWFkIG5vdGVzIGZyb20gYW55IHRyZWUtaXNoIHRoYXQgaXMgc2hhcGVkIGxpa2UgYSBub3RlcworICAgdHJlZSwgYnV0IHRoZSBub3RlcyBpbmZyYXN0cnVjdHVyZSByZXF1aXJlZCB0aGF0IHRoZSBhcmd1bWVudCBtdXN0CisgICBiZSBhIHJlZiB1bmRlciByZWZzL25vdGVzLy4gIExvb3NlbiBpdCB0byByZXF1aXJlIGEgdmFsaWQgcmVmIG9ubHkKKyAgIHdoZW4gdGhlIG9wZXJhdGlvbiB3b3VsZCB1cGRhdGUgdGhlIG5vdGVzIChpbiB3aGljaCBjYXNlIHdlIG11c3QKKyAgIGhhdmUgYSBwbGFjZSB0byBzdG9yZSB0aGUgdXBkYXRlZCBub3RlcyB0cmVlLCBpb3csIGEgcmVmKS4KKworICogImdpdCBncmVwIiBieSBkZWZhdWx0IGRvZXMgbm90IGZhbGwgYmFjayB0byBpdHMgIi0tbm8taW5kZXgiCisgICBiZWhhdmlvciBvdXRzaWRlIGEgZGlyZWN0b3J5IHVuZGVyIEdpdCdzIGNvbnRyb2wgKG90aGVyd2lzZSB0aGUKKyAgIHVzZXIgbWF5IGJ5IG1pc3Rha2UgZW5kIHVwIHJ1bm5pbmcgYSBodWdlIHJlY3Vyc2l2ZSBzZWFyY2gpOyB3aXRoIGEKKyAgIG5ldyBjb25maWd1cmF0aW9uIChzZXQgaW4gJEhPTUUvLmdpdGNvbmZpZy0tYnkgZGVmaW5pdGlvbiB0aGlzCisgICBjYW5ub3QgYmUgc2V0IGluIHRoZSBjb25maWcgZmlsZSBwZXIgcHJvamVjdCksIHRoaXMgc2FmZXR5IGNhbiBiZQorICAgZGlzYWJsZWQuCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSIgaGFzIGJlZW4gZXh0ZW5kZWQgdG8gYWxsb3cgaW52b2tpbmcKKyAgICJyZWJhc2UgLWkiLgorCisgKiAiZ2l0IHA0IiBsZWFybmVkIHRvIGNvcGUgd2l0aCB0aGUgdHlwZSBvZiBhIGZpbGUgZ2V0dGluZyBjaGFuZ2VkLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCB0byBub3RpY2UgZm9ybWF0Lm91dHB1dERpcmVjdG9yeQorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIFRoaXMgYWxsb3dzICItbyA8ZGlyPiIgb3B0aW9uIHRvIGJlCisgICBvbWl0dGVkIG9uIHRoZSBjb21tYW5kIGxpbmUgaWYgeW91IGFsd2F5cyB1c2UgdGhlIHNhbWUgZGlyZWN0b3J5IGluCisgICB5b3VyIHdvcmtmbG93LgorCisgKiAiaW50ZXJwcmV0LXRyYWlsZXJzIiBoYXMgYmVlbiB0YXVnaHQgdG8gb3B0aW9uYWxseSB1cGRhdGUgYSBmaWxlIGluCisgICBwbGFjZSwgaW5zdGVhZCBvZiBhbHdheXMgd3JpdGluZyB0aGUgcmVzdWx0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisKKyAqIE1hbnkgY29tbWFuZHMgdGhhdCByZWFkIGZpbGVzIHRoYXQgYXJlIGV4cGVjdGVkIHRvIGNvbnRhaW4gdGV4dAorICAgdGhhdCBpcyBnZW5lcmF0ZWQgKG9yIGNhbiBiZSBlZGl0ZWQpIGJ5IHRoZSBlbmQgdXNlciB0byBjb250cm9sCisgICB0aGVpciBiZWhhdmlvciAoZS5nLiAiZ2l0IGdyZXAgLWYgPGZpbGVuYW1lPiIpIGhhdmUgYmVlbiB1cGRhdGVkCisgICB0byBiZSBtb3JlIHRvbGVyYW50IHRvIGxpbmVzIHRoYXQgYXJlIHRlcm1pbmF0ZWQgd2l0aCBDUkxGICh0aGV5CisgICB1c2VkIHRvIHRyZWF0IHN1Y2ggYSBsaW5lIHRvIGNvbnRhaW4gcGF5bG9hZCB0aGF0IGVuZHMgd2l0aCBDUiwKKyAgIHdoaWNoIGlzIHVzdWFsbHkgbm90IHdoYXQgdGhlIHVzZXJzIGV4cGVjdCkuCisKKyAqICJnaXQgbm90ZXMgbWVyZ2UiIHVzZWQgdG8gbGltaXQgdGhlIHNvdXJjZSBvZiB0aGUgbWVyZ2VkIG5vdGVzIHRyZWUKKyAgIHRvIHNvbWV3aGVyZSB1bmRlciByZWZzL25vdGVzLyBoaWVyYXJjaHksIHdoaWNoIHdhcyB0b28gbGltaXRpbmcKKyAgIHdoZW4gaW52ZW50aW5nIGEgd29ya2Zsb3cgdG8gZXhjaGFuZ2Ugbm90ZXMgd2l0aCByZW1vdGUKKyAgIHJlcG9zaXRvcmllcyB1c2luZyByZW1vdGUtdHJhY2tpbmcgbm90ZXMgdHJlZXMgKGxvY2F0ZWQgaW4gZS5nLgorICAgcmVmcy9yZW1vdGUtbm90ZXMvIG9yIHNvbWVzdWNoKS4KKworICogImdpdCBscy1maWxlcyIgbGVhcm5lZCBhIG5ldyAiLS1lb2wiIG9wdGlvbiB0byBoZWxwIGRpYWdub3NlCisgICBlbmQtb2YtbGluZSBwcm9ibGVtcy4KKworICogImxzLXJlbW90ZSIgbGVhcm5lZCBhbiBvcHRpb24gdG8gc2hvdyB3aGljaCBicmFuY2ggdGhlIHJlbW90ZQorICAgcmVwb3NpdG9yeSBhZHZlcnRpc2VzIGFzIGl0cyBwcmltYXJ5IGJ5IHBvaW50aW5nIGl0cyBIRUFEIGF0LgorCisgKiBOZXcgaHR0cC5wcm94eUF1dGhNZXRob2QgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0bworICAgc3BlY2lmeSB3aGF0IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB0byB1c2UsIGFzIGEgd2F5IHRvIHdvcmsgYXJvdW5kCisgICBwcm94aWVzIHRoYXQgZG8gbm90IGdpdmUgZXJyb3IgcmVzcG9uc2UgZXhwZWN0ZWQgYnkgbGliY3VybCB3aGVuCisgICBDVVJMQVVUSF9BTlkgaXMgdXNlZC4gIEFsc28sIHRoZSBjb2RlcGF0aCBmb3IgcHJveHkgYXV0aGVudGljYXRpb24KKyAgIGhhcyBiZWVuIHRhdWdodCB0byB1c2UgY3JlZGVudGlhbCBBUEkgdG8gc3RvcmUgdGhlIGF1dGhlbnRpY2F0aW9uCisgICBtYXRlcmlhbCBpbiB1c2VyJ3Mga2V5cmluZ3MuCisKKyAqIFVwZGF0ZSB0aGUgdW50cmFja2VkIGNhY2hlIHN1YnN5c3RlbSBhbmQgY2hhbmdlIGl0cyBwcmltYXJ5IFVJIGZyb20KKyAgICJnaXQgdXBkYXRlLWluZGV4IiB0byAiZ2l0IGNvbmZpZyIuCisKKyAqIFRoZXJlIHdlcmUgYSBmZXcgIm5vdyBJIGFtIGRvaW5nIHRoaXMgdGhpbmciIHByb2dyZXNzIG1lc3NhZ2VzIGluCisgICB0aGUgVENQIGNvbm5lY3Rpb24gY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgc2V0dGluZyBhIHZlcmJvc2UKKyAgIG9wdGlvbiBpbnRlcm5hbGx5IGluIHRoZSBjb2RlLCBidXQgImdpdCBmZXRjaCAtdiIgYW5kIGZyaWVuZHMgbmV2ZXIKKyAgIHBhc3NlZCB0aGUgdmVyYm9zZSBvcHRpb24gZG93biB0byB0aGF0IGNvZGVwYXRoLgorCisgKiBDbGVhbi9zbXVkZ2UgZmlsdGVycyBkZWZpbmVkIGluIGEgY29uZmlndXJhdGlvbiBmaWxlIG9mIGxvd2VyCisgICBwcmVjZWRlbmNlIGNhbiBub3cgYmUgb3ZlcnJpZGRlbiB0byBiZSBhIHBhc3MtdGhyb3VnaCBuby1vcCBieQorICAgc2V0dGluZyB0aGUgdmFyaWFibGUgdG8gYW4gZW1wdHkgc3RyaW5nLgorCisgKiBBIG5ldyAiPGJyYW5jaD5eey8hLTxwYXR0ZXJuPn0iIG5vdGF0aW9uIGNhbiBiZSB1c2VkIHRvIG5hbWUgYQorICAgY29tbWl0IHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gPGJyYW5jaD4gdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUKKyAgIGdpdmVuIDxwYXR0ZXJuPi4KKworICogVGhlICJ1c2VyLnVzZUNvbmZpZ09ubHkiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8KKyAgIGZvcmNlIHRoZSB1c2VyIHRvIGFsd2F5cyBzZXQgdXNlci5lbWFpbCAmIHVzZXIubmFtZSBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZXMsIHNlcnZpbmcgYXMgYSByZW1pbmRlciBmb3IgdGhvc2Ugd2hvIHdvcmsgb24gbXVsdGlwbGUKKyAgIHByb2plY3RzIGFuZCBkbyBub3Qgd2FudCB0byBwdXQgdGhlc2UgaW4gdGhlaXIgJEhPTUUvLmdpdGNvbmZpZy4KKworICogImdpdCBmZXRjaCIgYW5kIGZyaWVuZHMgdGhhdCBtYWtlIG5ldHdvcmsgY29ubmVjdGlvbnMgY2FuIG5vdyBiZQorICAgdG9sZCB0byBvbmx5IHVzZSBpcHY0IChvciBpcHY2KS4KKworICogU29tZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGRvIG5vdCBuZWVkIHVzZXJuYW1lIG9yIHBhc3N3b3JkLCBidXQKKyAgIGxpYmN1cmwgbmVlZHMgc29tZSBoaW50IHRoYXQgaXQgbmVlZHMgdG8gcGVyZm9ybSBhdXRoZW50aWNhdGlvbi4KKyAgIFN1cHBseWluZyBhbiBlbXB0eSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgc3RyaW5nIGlzIGEgdmFsaWQgd2F5IHRvCisgICBkbyBzbywgYnV0IHlvdSBjYW4gc2V0IHRoZSBodHRwLls8dXJsPi5dZW1wdHlBdXRoIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIHRvIGFjaGlldmUgdGhlIHNhbWUsIGlmIHlvdSBmaW5kIGl0IGNsZWFuZXIuCisKKyAqIFlvdSBjYW4gbm93IHNldCBodHRwLls8dXJsPi5dcGlubmVkcHVia2V5IHRvIHNwZWNpZnkgdGhlIHBpbm5lZAorICAgcHVibGljIGtleSB3aGVuIGJ1aWxkaW5nIHdpdGggcmVjZW50IGVub3VnaCB2ZXJzaW9ucyBvZiBsaWJjVVJMLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaGFzIGJlZW4gdGF1Z2h0IHRvIHBocmFzZSB3aGVyZSBpdCBmb3VuZCBhCisgICBiYWQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpbiBhIGJldHRlciB3YXkgaW4gaXRzIGVycm9yIG1lc3NhZ2VzLgorICAgImdpdCBjb25maWciIGxlYXJudCBhIG5ldyAiLS1zaG93LW9yaWdpbiIgb3B0aW9uIHRvIGluZGljYXRlIHdoZXJlCisgICB0aGUgdmFsdWVzIGNvbWUgZnJvbS4KKworICogVGhlICJjcmVkZW50aWFsLWNhY2hlIiBkYWVtb24gcHJvY2VzcyB1c2VkIHRvIHJ1biBpbiB3aGF0ZXZlcgorICAgZGlyZWN0b3J5IGl0IGhhcHBlbmVkIHRvIHN0YXJ0IGluLCBidXQgdGhpcyBtYWRlIHVtb3VudCgyKWluZyB0aGUKKyAgIGZpbGVzeXN0ZW0gdGhhdCBob3VzZXMgdGhlIHJlcG9zaXRvcnkgaGFyZGVyOyBub3cgdGhlIHByb2Nlc3MKKyAgIGNoZGlyKClzIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCBob3VzZSBpdHMgb3duIHNvY2tldCBvbiBzdGFydHVwLgorCisgKiBXaGVuICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgZGlkIG5vdCByZXN1bHQgaW4gZmV0Y2hpbmcgdGhlIGNvbW1pdAorICAgb2JqZWN0IGluIHRoZSBzdWJtb2R1bGUgdGhhdCBpcyByZWZlcmVuY2VkIGJ5IHRoZSBzdXBlcnByb2plY3QsIHRoZQorICAgY29tbWFuZCBsZWFybmVkIHRvIHJldHJ5IGFub3RoZXIgZmV0Y2gsIHNwZWNpZmljYWxseSBhc2tpbmcgZm9yCisgICB0aGF0IGNvbW1pdCB0aGF0IG1heSBub3QgYmUgY29ubmVjdGVkIHRvIHRoZSByZWZzIGl0IHVzdWFsbHkKKyAgIGZldGNoZXMuCisKKyAqICJnaXQgbWVyZ2UtcmVjdXJzaXZlIiBsZWFybmVkICItLW5vLXJlbmFtZXMiIG9wdGlvbiB0byBkaXNhYmxlIGl0cworICAgcmVuYW1lIGRldGVjdGlvbiBsb2dpYy4KKworICogQWNyb3NzIHRoZSB0cmFuc2l0aW9uIGF0IGFyb3VuZCBHaXQgdmVyc2lvbiAyLjAsIHRoZSB1c2VyIHVzZWQgdG8KKyAgIGdldCBhIHByZXR0eSBsb3VkIHdhcm5pbmcgd2hlbiBydW5uaW5nICJnaXQgcHVzaCIgd2l0aG91dCBzZXR0aW5nCisgICBwdXNoLmRlZmF1bHQgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIFdlIG5vIGxvbmdlciB3YXJuIGJlY2F1c2UgdGhlCisgICB0cmFuc2l0aW9uIHdhcyBjb21wbGV0ZWQgYSBsb25nIHRpbWUgYWdvLgorCisgKiBSRUFETUUgaGFzIGJlZW4gcmVuYW1lZCB0byBSRUFETUUubWQgYW5kIGl0cyBjb250ZW50cyBnb3QgdHdlYWtlZAorICAgc2xpZ2h0bHkgdG8gbWFrZSBpdCBlYXNpZXIgb24gdGhlIGV5ZXMuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogQWRkIGEgZnJhbWV3b3JrIHRvIHNwYXduIGEgZ3JvdXAgb2YgcHJvY2Vzc2VzIGluIHBhcmFsbGVsLCBhbmQgdXNlCisgICBpdCB0byBydW4gImdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIgaW4gcGFyYWxsZWwuCisKKyAqIEEgc2xpZ2h0IHVwZGF0ZSB0byB0aGUgTWFrZWZpbGUgdG8gbWFyayAiLlBIT05ZIiB0YXJnZXRzIGFzIHN1Y2gKKyAgIGNvcnJlY3RseS4KKworICogSW4tY29yZSBzdG9yYWdlIG9mIHRoZSByZXZlcnNlIGluZGV4IGZvciAucGFjayBmaWxlcyAod2hpY2ggbGV0cworICAgeW91IGdvIGZyb20gYSBwYWNrIG9mZnNldCB0byBhbiBvYmplY3QgbmFtZSkgaGFzIGJlZW4gc3RyZWFtbGluZWQuCisKKyAqIGQ5NTEzOGU2IChzZXR1cDogc2V0IGVudiAkR0lUX1dPUktfVFJFRSB3aGVuIHdvcmsgdHJlZSBpcyBzZXQsIGxpa2UKKyAgICRHSVRfRElSLCAyMDE1LTA2LTI2KSBhdHRlbXB0ZWQgdG8gd29yayBhcm91bmQgYSBnbGl0Y2ggaW4gYWxpYXMKKyAgIGhhbmRsaW5nIGJ5IG92ZXJ3cml0aW5nIEdJVF9XT1JLX1RSRUUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8KKyAgIGFmZmVjdCBzdWJwcm9jZXNzZXMgd2hlbiBzZXRfZ2l0X3dvcmtfdHJlZSgpIGdldHMgY2FsbGVkLCB3aGljaAorICAgcmVzdWx0ZWQgaW4gYSByYXRoZXIgdW5wbGVhc2FudCByZWdyZXNzaW9uIHRvICJjbG9uZSIgYW5kICJpbml0Ii4KKyAgIFRyeSB0byBhZGRyZXNzIHRoZSBzYW1lIGlzc3VlIGJ5IGFsd2F5cyByZXN0b3JpbmcgdGhlIGVudmlyb25tZW50CisgICBhbmQgcmVzcGF3bmluZyB0aGUgcmVhbCB1bmRlcmx5aW5nIGNvbW1hbmQgd2hlbiBoYW5kbGluZyBhbGlhcy4KKworICogVGhlIGxvdy1sZXZlbCBjb2RlIHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgc3ltYm9saWMgcmVmZXJlbmNlcyBoYXMKKyAgIGJlZW4gdXBkYXRlZCB0byBzaGFyZSBtb3JlIGNvZGUgd2l0aCB0aGUgY29kZSB0aGF0IGRlYWxzIHdpdGgKKyAgIG5vcm1hbCByZWZlcmVuY2VzLgorCisgKiBzdHJidWZfZ2V0bGluZSgpIGFuZCBmcmllbmRzIGhhdmUgYmVlbiByZWRlZmluZWQgdG8gbWFrZSBpdCBlYXNpZXIKKyAgIHRvIGlkZW50aWZ5IHdoaWNoIGNhbGxzaXRlIG9mIChuZXcpIHN0cmJ1Zl9nZXRsaW5lX2xmKCkgc2hvdWxkCisgICBhbGxvdyBhbmQgc2lsZW50bHkgaWdub3JlIGNhcnJpYWdlLXJldHVybiBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRvCisgICBoZWxwIHVzZXJzIG9uIERPU3N5IHN5c3RlbXMuCisKKyAqICJnaXQgc2hvcnRsb2ciIHVzZWQgdG8gYWNjdW11bGF0ZSB2YXJpb3VzIHBpZWNlcyBvZiBpbmZvcm1hdGlvbgorICAgcmVnYXJkbGVzcyBvZiB3aGF0IHdhcyBhc2tlZCB0byBiZSBzaG93biBpbiB0aGUgZmluYWwgb3V0cHV0LiAgSXQKKyAgIGhhcyBiZWVuIG9wdGltaXplZCBieSBub3RpY2luZyB3aGF0IG5lZWQgbm90IHRvIGJlIGNvbGxlY3RlZAorICAgKGUuZy4gdGhlcmUgaXMgbm8gbmVlZCB0byBjb2xsZWN0IHRoZSBsb2cgbWVzc2FnZXMgd2hlbiBzaG93aW5nCisgICBvbmx5IHRoZSBudW1iZXIgb2YgY2hhbmdlcykuCisKKyAqICJnaXQgY2hlY2tvdXQgJGJyYW5jaCIgKGFuZCBvdGhlciBvcGVyYXRpb25zIHRoYXQgc2hhcmUgdGhlIHNhbWUKKyAgIHVuZGVybHlpbmcgbWFjaGluZXJ5KSBoYXMgYmVlbiBvcHRpbWl6ZWQuCisKKyAqIEF1dG9tYXRlZCB0ZXN0cyBpbiBUcmF2aXMgQ0kgZW52aXJvbm1lbnQgaGFzIGJlZW4gb3B0aW1pemVkIGJ5CisgICBwZXJzaXN0aW5nIHJ1bnRpbWUgc3RhdGlzdGljcyBvZiBwcmV2aW91cyAicHJvdmUiIHJ1biwgZXhlY3V0aW5nCisgICB0ZXN0cyB0aGF0IHRha2UgbG9uZ2VyIGJlZm9yZSBvdGhlciBvbmVzOyB0aGlzIHJlZHVjZXMgdGhlIHRvdGFsCisgICB3YWxsY2xvY2sgdGltZS4KKworICogVGVzdCBzY3JpcHRzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHJlbW92ZSBhc3N1bXB0aW9ucyB0aGF0IGFyZSBub3QKKyAgIHBvcnRhYmxlIGJldHdlZW4gR2l0IGZvciBQT1NJWCBhbmQgR2l0IGZvciBXaW5kb3dzLCBvciB0byBza2lwIG9uZXMKKyAgIHdpdGggZXhwZWN0YXRpb25zIHRoYXQgYXJlIG5vdCBzYXRpc2ZpYWJsZSBvbiBHaXQgZm9yIFdpbmRvd3MuCisKKyAqIFNvbWUgY2FsbHMgdG8gc3RyY3B5KDMpIHRyaWdnZXJzIGEgZmFsc2Ugd2FybmluZyBmcm9tIHN0YXRpYworICAgYW5hbHl6ZXJzIHRoYXQgYXJlIGxlc3MgaW50ZWxsaWdlbnQgdGhhbiBodW1hbnMsIGFuZCByZWR1Y2luZyB0aGUKKyAgIG51bWJlciBvZiB0aGVzZSBmYWxzZSBoaXRzIGhlbHBzIHVzIG5vdGljZSByZWFsIGlzc3Vlcy4gIEEgZmV3CisgICBjYWxscyB0byBzdHJjcHkoMykgaW4gYSBjb3VwbGUgb2YgcHJvZ3JhbXMgdGhhdCBhcmUgYWxyZWFkeSBzYWZlCisgICBoYXMgYmVlbiByZXdyaXR0ZW4gdG8gYXZvaWQgZmFsc2Ugd2FybmluZ3MuCisKKyAqIFRoZSAibmFtZV9wYXRoIiBBUEkgd2FzIGFuIGF0dGVtcHQgdG8gcmVkdWNlIHRoZSBuZWVkIHRvIGNvbnN0cnVjdAorICAgdGhlIGZ1bGwgcGF0aCBvdXQgb2YgYSBzZXJpZXMgb2YgcGF0aCBjb21wb25lbnRzIHdoaWxlIHdhbGtpbmcgYQorICAgdHJlZSBoaWVyYXJjaHksIGJ1dCBvdmVyIHRpbWUgbWFkZSBsZXNzIGVmZmljaWVudCBiZWNhdXNlIHRoZSBwYXRoCisgICBuZWVkcyB0byBiZSBmbGF0dGVuZWQsIGUuZy4gdG8gYmUgY29tcGFyZWQgd2l0aCBhbm90aGVyIHBhdGggdGhhdAorICAgaXMgYWxyZWFkeSBmbGF0LiAgVGhlIEFQSSBoYXMgYmVlbiByZW1vdmVkIGFuZCBpdHMgdXNlcnMgaGF2ZSBiZWVuCisgICByZXdyaXR0ZW4gdG8gc2ltcGxpZnkgdGhlIG92ZXJhbGwgY29kZSBjb21wbGV4aXR5LgorCisgKiBIZWxwIHRob3NlIHdobyBkZWJ1ZyBodHRwKHMpIHBhcnQgb2YgdGhlIHN5c3RlbS4KKyAgIChtZXJnZSAwMDU0MDQ1IHNwL3JlbW90ZS1jdXJsLXNzbC1zdHJlcnJvciBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBpbnRlcm5hbCBBUEkgdG8gaW50ZXJhY3Qgd2l0aCAicmVtb3RlLioiIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlcyBoYXMgYmVlbiBzdHJlYW1saW5lZC4KKworICogVGhlIHJlZi1maWx0ZXIncyBmb3JtYXQtcGFyc2luZyBjb2RlIGhhcyBiZWVuIHJlZmFjdG9yZWQsIGluCisgICBwcmVwYXJhdGlvbiBmb3IgImJyYW5jaCAtLWZvcm1hdCIgYW5kIGZyaWVuZHMuCisKKyAqIFRyYWRpdGlvbmFsbHksIHRoZSB0ZXN0cyB0aGF0IHRyeSBjb21tYW5kcyB0aGF0IHdvcmsgb24gdGhlCisgICBjb250ZW50cyBpbiB0aGUgd29ya2luZyB0cmVlIHdlcmUgbmFtZWQgd2l0aCAid29ya3RyZWUiIGluIHRoZWlyCisgICBmaWxlbmFtZXMsIGJ1dCB3aXRoIHRoZSByZWNlbnQgYWRkaXRpb24gb2YgImdpdCB3b3JrdHJlZSIKKyAgIHN1YmNvbW1hbmQsIHdob3NlIHRlc3RzIGFyZSBhbHNvIG5hbWVkIHNpbWlsYXJseSwgaXQgaGFzIGJlY29tZQorICAgaGFyZGVyIHRvIHRlbGwgdGhlbSBhcGFydC4gIFRoZSB0cmFkaXRpb25hbCB0ZXN0cyBoYXZlIGJlZW4gcmVuYW1lZAorICAgdG8gdXNlICJ3b3JrLXRyZWUiIGluc3RlYWQgaW4gYW4gYXR0ZW1wdCB0byBkaWZmZXJlbnRpYXRlIHRoZW0uCisgICAobWVyZ2UgNTU0OTAyOSBtZy93b3JrLXRyZWUtdGVzdHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNYW55IGNvZGVwYXRocyBmb3JnZXQgdG8gY2hlY2sgcmV0dXJuIHZhbHVlIGZyb20gZ2l0X2NvbmZpZ19zZXQoKTsKKyAgIHRoZSBmdW5jdGlvbiBpcyBtYWRlIHRvIGRpZSgpIHRvIG1ha2Ugc3VyZSB3ZSBkbyBub3QgcHJvY2VlZCB3aGVuCisgICBzZXR0aW5nIGEgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBmYWlsZWQuCisgICAobWVyZ2UgM2QxODA2NCBwcy9jb25maWctZXJyb3IgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBIYW5kbGluZyBvZiBlcnJvcnMgd2hpbGUgd3JpdGluZyBpbnRvIG91ciBpbnRlcm5hbCBhc3luY2hyb25vdXMKKyAgIHByb2Nlc3MgaGFzIGJlZW4gbWFkZSBtb3JlIHJvYnVzdCwgd2hpY2ggcmVkdWNlcyBmbGFraW5lc3MgaW4gb3VyCisgICB0ZXN0cy4KKyAgIChtZXJnZSA0M2YzYWZjIGprL2VwaXBlLWluLWFzeW5jIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlcmUgaXMgYSBuZXcgREVWRUxPUEVSIGtub2IgdGhhdCBlbmFibGVzIG1hbnkgY29tcGlsZXIgd2FybmluZworICAgb3B0aW9ucyBpbiB0aGUgTWFrZWZpbGUuCisKKyAqIFRoZSB3YXkgdGhlIHRlc3Qgc2NyaXB0cyBjb25maWd1cmUgdGhlIEFwYWNoZSB3ZWIgc2VydmVyIGhhcyBiZWVuCisgICB1cGRhdGVkIHRvIHdvcmsgYWxzbyBmb3IgQXBhY2hlIDIuNCBydW5uaW5nIG9uIFJlZEhhdCBkZXJpdmVkCisgICBkaXN0cm9zLgorCisgKiBPdXQgb2YgbWFpbnRlbmFuY2UgZ2NjIG9uIE9TWCAxMC42IGZhaWxzIHRvIGNvbXBpbGUgdGhlIGNvZGUgaW4KKyAgICdtYXN0ZXInOyB3b3JrIGl0IGFyb3VuZCBieSB1c2luZyBjbGFuZyBieSBkZWZhdWx0IG9uIHRoZSBwbGF0Zm9ybS4KKworICogVGhlICJuYW1lX3BhdGgiIEFQSSB3YXMgYW4gYXR0ZW1wdCB0byByZWR1Y2UgdGhlIG5lZWQgdG8gY29uc3RydWN0CisgICB0aGUgZnVsbCBwYXRoIG91dCBvZiBhIHNlcmllcyBvZiBwYXRoIGNvbXBvbmVudHMgd2hpbGUgd2Fsa2luZyBhCisgICB0cmVlIGhpZXJhcmNoeSwgYnV0IG92ZXIgdGltZSBtYWRlIGxlc3MgZWZmaWNpZW50IGJlY2F1c2UgdGhlIHBhdGgKKyAgIG5lZWRzIHRvIGJlIGZsYXR0ZW5lZCwgZS5nLiB0byBiZSBjb21wYXJlZCB3aXRoIGFub3RoZXIgcGF0aCB0aGF0CisgICBpcyBhbHJlYWR5IGZsYXQsIGluIG1hbnkgY2FzZXMuICBUaGUgQVBJIGhhcyBiZWVuIHJlbW92ZWQgYW5kIGl0cworICAgdXNlcnMgaGF2ZSBiZWVuIHJld3JpdHRlbiB0byBzaW1wbGlmeSB0aGUgb3ZlcmFsbCBjb2RlIGNvbXBsZXhpdHkuCisgICBUaGlzIGluY2lkZW50YWxseSBhbHNvIGNsb3NlcyBzb21lIGhlYXAtY29ycnVwdGlvbiBob2xlcy4KKworICogUmVjZW50IHZlcnNpb25zIG9mIEdOVSBncmVwIGlzIHBpY2tpZXIgdGhhbiBiZWZvcmUgdG8gZGVjaWRlIGlmIGEKKyAgIGZpbGUgaXMgImJpbmFyeSIgYW5kIHJlZnVzZSB0byBnaXZlIGxpbmUtb3JpZW50ZWQgaGl0cyB3aGVuIHdlCisgICBleHBlY3QgaXQgdG8sIHVubGVzcyBleHBsaWNpdGx5IHRvbGQgd2l0aCAiLWEiIG9wdGlvbi4gIEFzIG91cgorICAgc2NyaXB0ZWQgUG9yY2VsYWlucyB1c2Ugc2FuZV9ncmVwIHdyYXBwZXIgZm9yIGxpbmUtb3JpZW50ZWQgZGF0YSwKKyAgIGV2ZW4gd2hlbiB0aGUgbGluZSBtYXkgY29udGFpbiBub24tQVNDSUkgcGF5bG9hZCB3ZSB0b29rIGZyb20KKyAgIGVuZC11c2VyIGRhdGEsIHVzZSAiZ3JlcCAtYSIgdG8gaW1wbGVtZW50IHNhbmVfZ3JlcCB3cmFwcGVyIHdoZW4KKyAgIHVzaW5nIGFuIGltcGxlbWVudGF0aW9uIG9mICJncmVwIiB0aGF0IHRha2VzIHRoZSAiLWEiIG9wdGlvbi4KKworCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYyLjcKKy0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2Mi43IGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSB0aGUgbWFpbnRlbmFuY2UgcmVsZWFzZXMnCitub3RlcyBmb3IgZGV0YWlscykuCisKKyAqIEFuIGVhcmxpZXIgY2hhbmdlIGluIDIuNS54LWVyYSBicm9rZSB1c2VycycgaG9va3MgYW5kIGFsaWFzZXMgYnkKKyAgIGV4cG9ydGluZyBHSVRfV09SS19UUkVFIHRvIHBvaW50IGF0IHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUsCisgICBpbnRlcmZlcmluZyB3aGVuIHRoZXkgdHJpZWQgdG8gdXNlIGEgZGlmZmVyZW50IHdvcmtpbmcgdHJlZSB3aXRob3V0CisgICBzZXR0aW5nIEdJVF9XT1JLX1RSRUUgZW52aXJvbm1lbnQgdGhlbXNlbHZlcy4KKworICogVGhlICJleGNsdWRlX2xpc3QiIHN0cnVjdHVyZSBoYXMgdGhlIHVzdWFsICJhbGxvYywgbnIiIHBhaXIgb2YKKyAgIGZpZWxkcyB0byBiZSB1c2VkIGJ5IEFMTE9DX0dST1coKSwgYnV0IGNsZWFyX3BhdHRlcm5fbGlzdCgpIGZvcmdvdAorICAgdG8gcmVzZXQgJ2FsbG9jJyB0byAwIHdoZW4gaXQgY2xlYXJlZCAnbnInIHRvIGRpc2NhcmQgdGhlIG1hbmFnZWQKKyAgIGFycmF5LgorCisgKiBQYXRocyB0aGF0IGhhdmUgYmVlbiB0b2xkIHRoZSBpbmRleCBhYm91dCB3aXRoICJhZGQgLU4iIGFyZSBub3QKKyAgIHF1aXRlIHlldCBpbiB0aGUgaW5kZXgsIGJ1dCBhIGZldyBjb21tYW5kcyBiZWhhdmVkIGFzIGlmIHRoZXkKKyAgIGFscmVhZHkgYXJlIGluIGEgaGFybWZ1bCB3YXkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgd2FzIGNvbmZ1c2VkIGJ5IGVzY2FwZWQgcXVvdGVzIHN0b3JlZCBpbiB0aGUgYWxpYXMKKyAgIGZpbGVzIHNhdmVkIGJ5ICJtdXR0Iiwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBBIGZldyBub24tcG9ydGFibGUgQyBjb25zdHJ1Y3QgaGF2ZSBiZWVuIHNwb3R0ZWQgYnkgY2xhbmcgY29tcGlsZXIKKyAgIGFuZCBoYXZlIGJlZW4gZml4ZWQuCisKKyAqIFRoZSBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgdG8gaGludCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuCisgICB0aGUgJy0tc2lnbm9mZicgb3B0aW9uIGFuZCBEQ08uCisKKyAqICJnaXQgcmVmbG9nIiBpbmNvcnJlY3RseSBhc3N1bWVkIHRoYXQgYWxsIG9iamVjdHMgdGhhdCB1c2VkIHRvIGJlCisgICBhdCB0aGUgdGlwIG9mIGEgcmVmIG11c3QgYmUgY29tbWl0cywgd2hpY2ggY2F1c2VkIGl0IHRvIHNlZ2ZhdWx0LgorCisgKiBUaGUgaWdub3JlIG1lY2hhbmlzbSBzYXcgYSBmZXcgcmVncmVzc2lvbnMgYXJvdW5kIHVudHJhY2tlZCBmaWxlCisgICBsaXN0aW5nIGFuZCBzcGFyc2UgY2hlY2tvdXQgc2VsZWN0aW9uIGFyZWFzIGluIDIuNy4wOyB0aGUgY2hhbmdlCisgICB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVncmVzc2lvbiBoYXMgYmVlbiByZXZlcnRlZC4KKworICogU29tZSBjb2RlcGF0aHMgdXNlZCBmb3BlbigzKSB3aGVuIG9wZW5pbmcgYSBmaXhlZCBwYXRoIGluICRHSVRfRElSCisgICAoZS5nLiBDT01NSVRfRURJVE1TRykgdGhhdCBpcyBtZWFudCB0byBiZSBsZWZ0IGFmdGVyIHRoZSBjb21tYW5kIGlzCisgICBkb25lLiAgVGhpcyBob3dldmVyIGRpZCBub3Qgd29yayB3ZWxsIGlmIHRoZSByZXBvc2l0b3J5IGlzIHNldCB0bworICAgYmUgc2hhcmVkIHdpdGggY29yZS5zaGFyZWRSZXBvc2l0b3J5IGFuZCB0aGUgdW1hc2sgb2YgdGhlIHByZXZpb3VzCisgICB1c2VyIGlzIHRpZ2h0ZXIuICBUaGV5IGhhdmUgYmVlbiBtYWRlIHRvIHdvcmsgYmV0dGVyIGJ5IGNhbGxpbmcKKyAgIHVubGluaygyKSBhbmQgcmV0cnlpbmcgYWZ0ZXIgZm9wZW4oMykgZmFpbHMgd2l0aCBFUEVSTS4KKworICogQXNraW5nIGdpdHdlYiBmb3IgYSBub25leGlzdGVudCBjb21taXQgbGVmdCBhIHdhcm5pbmcgaW4gdGhlIHNlcnZlcgorICAgbG9nLgorCisgICBTb21lYm9keSBtYXkgd2FudCB0byBmb2xsb3cgdGhpcyB1cCB3aXRoIGFuIGFkZGl0aW9uYWwgdGVzdCwgcGVyaGFwcz8KKyAgIElJUkMsIHdlIGRvIHRlc3QgdGhhdCBubyBQZXJsIHdhcm5pbmdzIGFyZSBnaXZlbiB0byB0aGUgc2VydmVyIGxvZywKKyAgIHNvIHRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgaWYgb3VyIHRlc3QgY292ZXJhZ2Ugd2VyZSBnb29kLgorCisgKiAiZ2l0IHJlYmFzZSIsIHVubGlrZSBhbGwgb3RoZXIgY2FsbGVycyBvZiAiZ2MgLS1hdXRvIiwgZGlkIG5vdAorICAgaWdub3JlIHRoZSBleGl0IGNvZGUgZnJvbSAiZ2MgLS1hdXRvIi4KKworICogTWFueSBjb2RlcGF0aHMgdGhhdCBydW4gImdjIC0tYXV0byIgYmVmb3JlIGV4aXRpbmcga2VwdCBwYWNrZmlsZXMKKyAgIG1hcHBlZCBhbmQgbGVmdCB0aGUgZmlsZSBkZXNjcmlwdG9ycyB0byB0aGVtIG9wZW4sIHdoaWNoIHdhcyBub3QKKyAgIGZyaWVuZGx5IHRvIHN5c3RlbXMgdGhhdCBjYW5ub3QgcmVtb3ZlIGZpbGVzIHRoYXQgYXJlIG9wZW4uICBUaGV5CisgICBub3cgY2xvc2UgdGhlIHBhY2tzIGJlZm9yZSBkb2luZyBzby4KKworICogQSByZWNlbnQgb3B0aW1pemF0aW9uIHRvIGZpbHRlci1icmFuY2ggaW4gdjIuNy4wIGludHJvZHVjZWQgYQorICAgcmVncmVzc2lvbiB3aGVuIC0tcHJ1bmUtZW1wdHkgZmlsdGVyIGlzIHVzZWQsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFRoZSBkZXNjcmlwdGlvbiBmb3IgU0FOSVRZIHByZXJlcXVpc2l0ZSB0aGUgdGVzdCBzdWl0ZSB1c2VzIGhhcworICAgYmVlbiBjbGFyaWZpZWQgYm90aCBpbiB0aGUgY29tbWVudCBhbmQgaW4gdGhlIGltcGxlbWVudGF0aW9uLgorCisgKiAiZ2l0IHRhZyIgc3RhcnRlZCBsaXN0aW5nIGEgdGFnICJmb28iIGFzICJ0YWdzL2ZvbyIgd2hlbiBhIGJyYW5jaAorICAgbmFtZWQgImZvbyIgZXhpc3RzIGluIHRoZSBzYW1lIHJlcG9zaXRvcnk7IHJlbW92ZSB0aGlzIHVubmVjZXNzYXJ5CisgICBkaXNhbWJpZ3VhdGlvbiwgd2hpY2ggaXMgYSByZWdyZXNzaW9uIGludHJvZHVjZWQgaW4gdjIuNy4wLgorCisgKiBUaGUgd2F5ICJnaXQgc3ZuIiB1c2VzIGF1dGggcGFyYW1ldGVyIHdhcyBicm9rZW4gYnkgU3VidmVyc2lvbgorICAgMS45LjAgYW5kIGxhdGVyLgorCisgKiBUaGUgInNwbGl0IiBzdWJjb21tYW5kIG9mICJnaXQgc3VidHJlZSIgKGluIGNvbnRyaWIvKSBpbmNvcnJlY3RseQorICAgc2tpcHBlZCBtZXJnZXMgd2hlbiBpdCBzaG91bGRuJ3QsIHdoaWNoIHdhcyBjb3JyZWN0ZWQuCisKKyAqIEEgZmV3IG9wdGlvbnMgb2YgImdpdCBkaWZmIiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIHRoZSBjb21tYW5kIHdhcworICAgcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyAqIFRoZSBjb21tYW5kIGxpbmUgY29tcGxldGlvbiBsZWFybmVkIGEgaGFuZGZ1bCBvZiBhZGRpdGlvbmFsIG9wdGlvbnMKKyAgIGFuZCBjb21tYW5kIHNwZWNpZmljIHN5bnRheC4KKworICogZGlybmFtZSgpIGVtdWxhdGlvbiBoYXMgYmVlbiBhZGRlZCwgYXMgTXN5czIgbGFja3MgaXQuCisKKyAqIFRoZSB1bmRlcmx5aW5nIG1hY2hpbmVyeSB1c2VkIGJ5ICJscy1maWxlcyAtbyIgYW5kIG90aGVyIGNvbW1hbmRzCisgICBoYXMgYmVlbiB0YXVnaHQgbm90IHRvIGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgcmVmIGNhY2hlIGZvciBhCisgICBkaXJlY3RvcnkgdGhhdCBpcyBub3QgYSBzdWJtb2R1bGUuICBUaGlzIHJlbW92ZXMgYSB0b24gb2Ygd2FzdGVkCisgICBDUFUgY3ljbGVzLgorCisgKiAiZ2l0IHdvcmt0cmVlIiBoYWQgYSBicm9rZW4gY29kZSB0aGF0IGF0dGVtcHRlZCB0byBhdXRvLWZpeAorICAgcG9zc2libGUgaW5jb25zaXN0ZW5jeSB0aGF0IHJlc3VsdHMgZnJvbSBlbmQtdXNlcnMgbW92aW5nIGEKKyAgIHdvcmt0cmVlIHRvIGRpZmZlcmVudCBwbGFjZXMgd2l0aG91dCB0ZWxsaW5nIEdpdCAodGhlIG9yaWdpbmFsCisgICByZXBvc2l0b3J5IG5lZWRzIHRvIG1haW50YWluIGJhY2stcG9pbnRlcnMgdG8gaXRzIHdvcmt0cmVlcywKKyAgIGJ1dCAibXYiIHJ1biBieSBlbmQtdXNlcnMgd2hvIGFyZSBub3QgZmFtaWxpYXIgd2l0aCB0aGF0IGZhY3QKKyAgIHdpbGwgb2J2aW91c2x5IG5vdCBhZGp1c3QgdGhlbSksIHdoaWNoIGFjdHVhbGx5IG1hZGUgdGhpbmdzCisgICB3b3JzZSB3aGVuIHRyaWdnZXJlZC4KKworICogVGhlIGxvdy1sZXZlbCBtZXJnZSBtYWNoaW5lcnkgaGFzIGJlZW4gdGF1Z2h0IHRvIHVzZSBDUkxGIGxpbmUKKyAgIHRlcm1pbmF0aW9uIHdoZW4gaW5zZXJ0aW5nIGNvbmZsaWN0IG1hcmtlcnMgdG8gbWVyZ2VkIGNvbnRlbnRzIHRoYXQKKyAgIGFyZSB0aGVtc2VsdmVzIENSTEYgbGluZS10ZXJtaW5hdGVkLgorCisgKiAiZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlIiBoYXMgYmVlbiB0YXVnaHQgdG8gcmVwb3J0IGlmIHRoZSBwdXNoCisgICBuZWVkZWQgdG8gZm9yY2UgKG9yIGZhc3QtZm9yd2FyZGVkKS4KKworICogVGhlIGVtdWxhdGVkICJ5ZXMiIGNvbW1hbmQgdXNlZCBpbiBvdXIgdGVzdCBzY3JpcHRzIGhhcyBiZWVuCisgICB0d2Vha2VkIG5vdCB0byBzcGVuZCB0b28gbXVjaCB0aW1lIGdlbmVyYXRpbmcgdW5uZWNlc3Nhcnkgb3V0cHV0CisgICB0aGF0IGlzIG5vdCB1c2VkLCB0byBoZWxwIHRob3NlIHdobyB0ZXN0IG9uIFdpbmRvd3Mgd2hlcmUgaXQgd291bGQKKyAgIG5vdCBzdG9wIHVudGlsIGl0IGZpbGxzIHRoZSBwaXBlIGJ1ZmZlciBkdWUgdG8gbGFjayBvZiBTSUdQSVBFLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgImdpdCBjbGVhbiIgaGFzIGJlZW4gY29ycmVjdGVkOyBpdCBtZW50aW9uZWQKKyAgIHRoYXQgLmdpdC9tb2R1bGVzLyogYXJlIHJlbW92ZWQgYnkgZ2l2aW5nIHR3byAiLWYiLCB3aGljaCBoYXMgbmV2ZXIKKyAgIGJlZW4gdGhlIGNhc2UuCisKKyAqIFRoZSB2aW1kaWZmIGJhY2tlbmQgZm9yICJnaXQgbWVyZ2V0b29sIiBoYXMgYmVlbiB0d2Vha2VkIHRvIGFycmFuZ2UKKyAgIGFuZCBudW1iZXIgYnVmZmVycyBpbiB0aGUgb3JkZXIgdGhhdCB3b3VsZCBtYXRjaCB0aGUgZXhwZWN0YXRpb24gb2YKKyAgIG1ham9yaXR5IG9mIHBlb3BsZSB3aG8gcmVhZCBsZWZ0IHRvIHJpZ2h0LCB0aGVuIHRvcCBkb3duIGFuZCBhc3NpZ24KKyAgIGJ1ZmZlcnMgMSAyIDMgNCAibWVudGFsbHkiIHRvIGxvY2FsIGJhc2UgcmVtb3RlIG1lcmdlIHdpbmRvd3MgYmFzZWQKKyAgIG9uIHRoYXQgb3JkZXIuCisKKyAqICJnaXQgc2hvdyAnSEVBRDpGb29bQkFSXUJheiciIGRpZCBub3QgaW50ZXJwcmV0IHRoZSBhcmd1bWVudCBhcyBhCisgICByZXYsIGkuZS4gdGhlIG9iamVjdCBuYW1lZCBieSB0aGUgdGhlIHBhdGhuYW1lIHdpdGggd2lsZGNhcmQKKyAgIGNoYXJhY3RlcnMgaW4gYSB0cmVlIG9iamVjdC4KKyAgIChtZXJnZSBhYWM0ZmFjIG5kL2R3aW0td2lsZGNhcmRzLWFzLXBhdGhzcGVjcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmV2LXBhcnNlIC0tZ2l0LWNvbW1vbi1kaXIiIHVzZWQgaW4gdGhlIHdvcmt0cmVlIGZlYXR1cmUKKyAgIG1pc2JlaGF2ZWQgd2hlbiBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeS4KKyAgIChtZXJnZSAxN2YxMzY1IG5kL2dpdC1jb21tb24tZGlyLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgd29ya3RyZWUgYWRkIC1CIDxicmFuY2huYW1lPiIgZGlkIG5vdCB3b3JrLgorCisgKiBUaGUgInYoaWV3KSIgc3ViY29tbWFuZCBvZiB0aGUgaW50ZXJhY3RpdmUgImdpdCBhbSAtaSIgY29tbWFuZCB3YXMKKyAgIGJyb2tlbiBpbiAyLjYuMCB0aW1lZnJhbWUgd2hlbiB0aGUgY29tbWFuZCB3YXMgcmV3cml0dGVuIGluIEMuCisgICAobWVyZ2UgNzA4YjhjYyBqYy9hbS1pLXYtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtZXJnZS10cmVlIiB1c2VkIHRvIG1pc2hhbmRsZSAiYm90aCBzaWRlcyBhZGRlZCIgY29uZmxpY3Qgd2l0aAorICAgaXRzIG93biAiY3JlYXRlIGEgZmFrZSBhbmNlc3RvciBmaWxlIHRoYXQgaGFzIHRoZSBjb21tb24gcGFydHMgb2YKKyAgIHdoYXQgYm90aCBzaWRlcyBoYXZlIGFkZGVkIGFuZCBkbyBhIDMtd2F5IG1lcmdlIiBsb2dpYzsgdGhpcyBoYXMKKyAgIGJlZW4gdXBkYXRlZCB0byB1c2UgdGhlIHVzdWFsICIzLXdheSBtZXJnZSB3aXRoIGFuIGVtcHR5IGJsb2IgYXMKKyAgIHRoZSBmYWtlIGNvbW1vbiBhbmNlc3RvciBmaWxlIiBhcHByb2FjaCB1c2VkIGluIHRoZSByZXN0IG9mIHRoZQorICAgc3lzdGVtLgorICAgKG1lcmdlIDkwNzY4MWUgamsvbm8tZGlmZi1lbWl0LWNvbW1vbiBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBtZW1vcnkgb3duZXJzaGlwIHJ1bGUgb2YgZmlsbF90ZXh0Y29udigpIEFQSSwgd2hpY2ggd2FzIGEgYml0CisgICB0cmlja3ksIGhhcyBiZWVuIGRvY3VtZW50ZWQgYSBiaXQgYmV0dGVyLgorICAgKG1lcmdlIGE2NGU2YTQgamsvbW9yZS1jb21tZW50cy1vbi10ZXh0Y29udiBsYXRlciB0byBtYWludCkuCisKKyAqIFVwZGF0ZSB2YXJpb3VzIGNvZGVwYXRocyB0byBhdm9pZCBtYW51YWxseS1jb3VudGVkIG1hbGxvYygpLgorICAgKG1lcmdlIDA4Yzk1ZGYgamsvdGlnaHRlbi1hbGxvYyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBkb2N1bWVudGF0aW9uIGRpZCBub3QgY2xlYXJseSBzdGF0ZSB0aGF0IHRoZSAnc2ltcGxlJyBtb2RlIGlzCisgICBub3cgdGhlIGRlZmF1bHQgZm9yICJnaXQgcHVzaCIgd2hlbiBwdXNoLmRlZmF1bHQgY29uZmlndXJhdGlvbiBpcworICAgbm90IHNldC4KKyAgIChtZXJnZSBmNmIxZmIzIG1tL3B1c2gtc2ltcGxlLWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIFJlY2VudCB2ZXJzaW9ucyBvZiBHTlUgZ3JlcCBhcmUgcGlja2llciB3aGVuIHRoZWlyIGlucHV0IGNvbnRhaW5zCisgICBhcmJpdHJhcnkgYmluYXJ5IGRhdGEsIHdoaWNoIHNvbWUgb2Ygb3VyIHRlc3RzIHVzZXMuICBSZXdyaXRlIHRoZQorICAgdGVzdHMgdG8gc2lkZXN0ZXAgdGhlIHByb2JsZW0uCisgICAobWVyZ2UgM2IxNDQyZCBqay9ncmVwLWJpbmFyeS13b3JrYXJvdW5kLWluLXRlc3QgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGhlbHBlciBmdW5jdGlvbiAiZ2l0IHN1Ym1vZHVsZSIgdXNlcyBzaW5jZSB2Mi43LjAgdG8gbGlzdCB0aGUKKyAgIG1vZHVsZXMgdGhhdCBtYXRjaCB0aGUgcGF0aHNwZWMgYXJndW1lbnQgZ2l2ZW4gdG8gaXRzIHN1YmNvbW1hbmRzCisgICAoZS5nLiAic3VibW9kdWxlIGFkZCA8cmVwbz4gPHBhdGg+IikgaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgMmI1NmJiNyBzYi9zdWJtb2R1bGUtbW9kdWxlLWxpc3QtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjb25maWcgc2VjdGlvbi52YXIgdmFsdWUiIHRvIHNldCBhIHZhbHVlIGluIHBlci1yZXBvc2l0b3J5CisgICBjb25maWd1cmF0aW9uIGZpbGUgZmFpbGVkIHdoZW4gaXQgd2FzIHJ1biBvdXRzaWRlIGFueSByZXBvc2l0b3J5LAorICAgYnV0IGRpZG4ndCBzYXkgdGhlIHJlYXNvbiBjb3JyZWN0bHkuCisgICAobWVyZ2UgNjM4ZmE2MiBqcy9jb25maWctc2V0LWluLW5vbi1yZXBvc2l0b3J5IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGUgdG8gcmVhZCB0aGUgcGFjayBkYXRhIHVzaW5nIHRoZSBvZmZzZXRzIHN0b3JlZCBpbiB0aGUgcGFjaworICAgaWR4IGZpbGUgaGFzIGJlZW4gbWFkZSBtb3JlIGNhcmVmdWxseSBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlCisgICBkYXRhIGluIHRoZSBpZHguCisgICAobWVyZ2UgNzQ2NWZlYiBqay9wYWNrLWlkeC1jb3JydXB0aW9uLXNhZmV0eSBsYXRlciB0byBtYWludCkuCisKKyAqIE90aGVyIG1pbm9yIGNsZWFuLXVwcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzCisgICAobWVyZ2UgZjQ1OTgyMyBhay9leHRyYWN0LWFyZ3YwLWxhc3QtZGlyLXNlcCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjNjYTFjMCBhay9naXQtc3RyaXAtZXh0ZW5zaW9uLWZyb20tZGFzaGVkLWNvbW1hbmQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ4NjdmMTEgcHMvcGx1Zy14ZGwtbWVyZ2UtbGVhayBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDkzODY4NiBkdC9pbml0aWFsLXJlZi14bi1jb21taXQtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5NTM3ZjIxIG1hL3VwZGF0ZS1ob29rcy1zYW1wbGUtdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNmQ4MGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4xLnR4dApAQCAtMCwwICsxLDkgQEAKK0dpdCB2Mi44LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjgKKy0tLS0tLS0tLS0tLS0tLS0KKworICogIm1ha2UgcnBtYnVpbGQiIHRhcmdldCB3YXMgYnJva2VuIGFzIGl0cyBpbnB1dCwgZ2l0LnNwZWMuaW4sIHdhcworICAgbm90IHVwZGF0ZWQgdG8gbWF0Y2ggYSBmaWxlIGl0IGRlc2NyaWJlcyB0aGF0IGhhcyBiZWVuIHJlbmFtZWQKKyAgIHJlY2VudGx5LiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3YjE5MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjIudHh0CkBAIC0wLDAgKzEsNzAgQEAKK0dpdCB2Mi44LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjguMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBlbWJlZGRlZCBhcmdzIGFyZ3YtYXJyYXkgaW4gdGhlIGNoaWxkIHByb2Nlc3MgaXMgdXNlZCB0byBidWlsZAorICAgdGhlIGNvbW1hbmQgbGluZSB0byBydW4gcGFjay1vYmplY3RzIGluc3RlYWQgb2YgdXNpbmcgYSBzZXBhcmF0ZQorICAgYXJyYXkgb2Ygc3RyaW5ncy4KKworICogQnVuY2ggb2YgdGVzdHMgb24gImdpdCBjbG9uZSIgaGFzIGJlZW4gcmVudW1iZXJlZCBmb3IgYmV0dGVyCisgICBvcmdhbml6YXRpb24uCisKKyAqIFRoZSB0ZXN0cyB0aGF0IGludm9sdmUgcnVubmluZyBodHRwZCBsZWFrZWQgdGhlIHN5c3RlbS13aWRlCisgICBjb25maWd1cmF0aW9uIGluIC9ldGMvZ2l0Y29uZmlnIHRvIHRoZSB0ZXN0ZWQgZW52aXJvbm1lbnQuCisKKyAqICJpbmRleC1wYWNrIC0ta2VlcD08bXNnPiIgd2FzIGJyb2tlbiBzaW5jZSB2Mi4xLjAgdGltZWZyYW1lLgorCisgKiAiZ2l0IGNvbmZpZyAtLWdldC11cmxtYXRjaCIsIHVubGlrZSBvdGhlciB2YXJpYW50cyBvZiB0aGUgImdpdAorICAgY29uZmlnIC0tZ2V0IiBmYW1pbHksIGRpZCBub3Qgc2lnbmFsIGVycm9yIHdpdGggaXRzIGV4aXQgc3RhdHVzCisgICB3aGVuIHRoZXJlIHdhcyBubyBtYXRjaGluZyBjb25maWd1cmF0aW9uLgorCisgKiBUaGUgIi0tbG9jYWwtZW52LXZhcnMiIGFuZCAiLS1yZXNvbHZlLWdpdC1kaXIiIG9wdGlvbnMgb2YgImdpdAorICAgcmV2LXBhcnNlIiBmYWlsZWQgdG8gd29yayBvdXRzaWRlIGEgcmVwb3NpdG9yeSB3aGVuIHRoZSBjb21tYW5kJ3MKKyAgIG9wdGlvbiBwYXJzaW5nIHdhcyByZXdyaXR0ZW4gaW4gMS44LjUgZXJhLgorCisgKiBGZXRjaGluZyBvZiBoaXN0b3J5IGJ5IG5hbWluZyBhIGNvbW1pdCBvYmplY3QgbmFtZSBkaXJlY3RseSBkaWRuJ3QKKyAgIHdvcmsgYWNyb3NzIHJlbW90ZS1jdXJsIHRyYW5zcG9ydC4KKworICogQSBzbWFsbCBtZW1vcnkgbGVhayBpbiBhbiBlcnJvciBjb2RlcGF0aCBoYXMgYmVlbiBwbHVnZ2VkIGluIHhkaWZmCisgICBjb2RlLgorCisgKiBzdHJidWZfZ2V0d2hvbGVsaW5lKCkgZGlkIG5vdCBOVUwtdGVybWluYXRlIHRoZSBidWZmZXIgb24gY2VydGFpbgorICAgY29ybmVyIGNhc2VzIGluIGl0cyBlcnJvciBjb2RlcGF0aC4KKworICogVGhlIHN0YXJ0dXBfaW5mbyBkYXRhLCB3aGljaCByZWNvcmRzIGlmIHdlIGFyZSB3b3JraW5nIGluc2lkZSBhCisgICByZXBvc2l0b3J5IChhbW9uZyBvdGhlciB0aGluZ3MpLCBhcmUgbm93IHVuaWZvcm1seSBhdmFpbGFibGUgdG8gR2l0CisgICBzdWJjb21tYW5kIGltcGxlbWVudGF0aW9ucywgYW5kIEdpdCBhdm9pZHMgYXR0ZW1wdGluZyB0byB0b3VjaAorICAgcmVmZXJlbmNlcyB3aGVuIHdlIGFyZSBub3QgaW4gYSByZXBvc2l0b3J5LgorCisgKiAiZ2l0IG1lcmdldG9vbCIgZGlkIG5vdCB3b3JrIHdlbGwgd2l0aCBjb25mbGljdHMgdGhhdCBib3RoIHNpZGVzCisgICBkZWxldGVkLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGhhZCB0cm91YmxlIHBhcnNpbmcgYWxpYXMgZmlsZSBpbiBtYWlscmMgZm9ybWF0CisgICB3aGVuIGxpbmVzIGluIGl0IGhhZCB0cmFpbGluZyB3aGl0ZXNwYWNlcyBvbiB0aGVtLgorCisgKiBXaGVuICJnaXQgbWVyZ2UgLS1zcXVhc2giIHN0b3BwZWQgZHVlIHRvIGNvbmZsaWN0LCB0aGUgY29uY2x1ZGluZworICAgImdpdCBjb21taXQiIGZhaWxlZCB0byByZWFkIGluIHRoZSBTUVVBU0hfTVNHIHRoYXQgc2hvd3MgdGhlIGxvZworICAgbWVzc2FnZXMgZnJvbSBhbGwgdGhlIHNxdWFzaGVkIGNvbW1pdHMuCisKKyAqICJnaXQgbWVyZ2UgRkVUQ0hfSEVBRCIgZGVyZWZlcmVuY2VkIE5VTEwgcG9pbnRlciB3aGVuIG1lcmdpbmcKKyAgIG5vdGhpbmcgaW50byBhbiB1bmJvcm4gaGlzdG9yeSAod2hpY2ggaXMgYXJndWFibHkgdW51c3VhbCB1c2FnZSwKKyAgIHdoaWNoIHBlcmhhcHMgd2FzIHRoZSByZWFzb24gd2h5IG5vYm9keSBub3RpY2VkIGl0KS4KKworICogQnVpbGQgdXBkYXRlcyBmb3IgTVNWQy4KKworICogImdpdCBkaWZmIC1NIiB1c2VkIHRvIHdvcmsgYmV0dGVyIHdoZW4gdHdvIG9yaWdpbmFsbHkgaWRlbnRpY2FsCisgICBmaWxlcyBBIGFuZCBCIGdvdCByZW5hbWVkIHRvIFgvQSBhbmQgWC9CIGJ5IHBhaXJpbmcgQSB0byBYL0EgYW5kIEIKKyAgIHRvIFgvQiwgYnV0IHRoaXMgd2FzIGJyb2tlbiBpbiB0aGUgMi4wIHRpbWVmcmFtZS4KKworICogImdpdCBzZW5kLXBhY2sgLS1hbGwgPHRoZXJlPiIgd2FzIGJyb2tlbiB3aGVuIGl0cyBjb21tYW5kIGxpbmUKKyAgIG9wdGlvbiBwYXJzaW5nIHdhcyB3cml0dGVuIGluIHRoZSAyLjYgdGltZWZyYW1lLgorCisgKiBXaGVuIHJ1bm5pbmcgImdpdCBibGFtZSAkcGF0aCIgd2l0aCB1bm5vcm1hbGl6ZWQgZGF0YSBpbiB0aGUgaW5kZXgKKyAgIGZvciB0aGUgcGF0aCwgdGhlIGRhdGEgaW4gdGhlIHdvcmtpbmcgdHJlZSB3YXMgYmxhbWVkLCBldmVuIHRob3VnaAorICAgImdpdCBhZGQiIHdvdWxkIG5vdCBoYXZlIGNoYW5nZWQgd2hhdCBpcyBhbHJlYWR5IGluIHRoZSBpbmRleCwgZHVlCisgICB0byAic2FmZSBjcmxmIiB0aGF0IGRpc2FibGVzIHRoZSBsaW5lLWVuZCBjb252ZXJzaW9uLiAgSXQgaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworQWxzbyBjb250YWlucyBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjM4MjVlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguMy50eHQKQEAgLTAsMCArMSwxMDEgQEAKK0dpdCB2Mi44LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjguMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbm93IHVzZXMgYSBtb3JlIHJlYWRhYmxlIHRpbWVzdGFtcHMgd2hlbgorICAgZm9ybXVsYXRpbmcgYSBtZXNzYWdlIElELgorCisgKiBUaGUgcmVwb3NpdG9yeSBzZXQtdXAgc2VxdWVuY2UgaGFzIGJlZW4gc3RyZWFtbGluZWQgKHRoZSBiaWdnZXN0CisgICBjaGFuZ2UgaXMgdGhhdCB0aGVyZSBpcyBubyBsb25nZXIgZ2l0X2NvbmZpZ19lYXJseSgpKSwgc28gdGhhdCB3ZQorICAgZG8gbm90IGF0dGVtcHQgdG8gbG9vayBpbnRvIHJlZnMvKiB3aGVuIHdlIGtub3cgd2UgZG8gbm90IGhhdmUgYQorICAgR2l0IHJlcG9zaXRvcnkuCisKKyAqIFdoZW4gImdpdCB3b3JrdHJlZSIgZmVhdHVyZSBpcyBpbiB1c2UsICJnaXQgYnJhbmNoIC1kIiBhbGxvd2VkCisgICBkZWxldGlvbiBvZiBhIGJyYW5jaCB0aGF0IGlzIGNoZWNrZWQgb3V0IGluIGFub3RoZXIgd29ya3RyZWUKKworICogV2hlbiAiZ2l0IHdvcmt0cmVlIiBmZWF0dXJlIGlzIGluIHVzZSwgImdpdCBicmFuY2ggLW0iIHJlbmFtZWQgYQorICAgYnJhbmNoIHRoYXQgaXMgY2hlY2tlZCBvdXQgaW4gYW5vdGhlciB3b3JrdHJlZSB3aXRob3V0IGFkanVzdGluZworICAgdGhlIEhFQUQgc3ltYm9saWMgcmVmIGZvciB0aGUgd29ya3RyZWUuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIC0taGVscCIgc2hvd2VkIGAtc2AgYW5kIGAtLW5vLXBhdGNoYCBhcyBpZiB0aGVzZQorICAgYXJlIHZhbGlkIG9wdGlvbnMgdG8gdGhlIGNvbW1hbmQuICBXZSBhbHJlYWR5IGhpZGUgYC0tcGF0Y2hgIG9wdGlvbgorICAgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbiwgYmVjYXVzZSBmb3JtYXQtcGF0Y2ggaXMgYWJvdXQgc2hvd2luZyB0aGUKKyAgIGRpZmYsIGFuZCB0aGUgZG9jdW1lbnRhdGlvbiBub3cgaGlkZXMgdGhlc2Ugb3B0aW9ucyBhcyB3ZWxsLgorCisgKiBBIGNoYW5nZSBiYWNrIGluIHZlcnNpb24gMi43IHRvICJnaXQgYnJhbmNoIiBicm9rZSBkaXNwbGF5IG9mIGEKKyAgIHN5bWJvbGljIHJlZiBpbiBhIG5vbi1zdGFuZGFyZCBwbGFjZSBpbiB0aGUgcmVmcy8gaGllcmFyY2h5ICh3ZQorICAgZXhwZWN0IHN5bWJvbGljIHJlZnMgdG8gYXBwZWFyIGluIHJlZnMvcmVtb3Rlcy8qL0hFQUQgdG8gcG9pbnQgYXQKKyAgIHRoZSBwcmltYXJ5IGJyYW5jaCB0aGUgcmVtb3RlIGhhcywgYW5kIGFzIC5naXQvSEVBRCB0byBwb2ludCBhdCB0aGUKKyAgIGJyYW5jaCB3ZSBsb2NhbGx5IGNoZWNrZWQgb3V0KS4KKworICogQSBwYXJ0aWFsIHJld3JpdGUgb2YgImdpdCBzdWJtb2R1bGUiIGluIHRoZSAyLjcgdGltZWZyYW1lIGNoYW5nZWQKKyAgIHRoZSB3YXkgdGhlIGdpdGRpcjogcG9pbnRlciBpbiB0aGUgc3VibW9kdWxlcyBwb2ludCBhdCB0aGUgcmVhbAorICAgcmVwb3NpdG9yeSBsb2NhdGlvbiB0byB1c2UgYWJzb2x1dGUgcGF0aHMgYnkgYWNjaWRlbnQuICBUaGlzIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgY29tbWl0IiBtaXNiZWhhdmVkIGluIGEgZmV3IG1pbm9yIHdheXMgd2hlbiBhbiBlbXB0eSBtZXNzYWdlCisgICBpcyBnaXZlbiB2aWEgLW0gJycsIGFsbCBvZiB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFN1cHBvcnQgZm9yIENSQU0tTUQ1IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBpbiAiZ2l0IGltYXAtc2VuZCIgZGlkCisgICBub3Qgd29yayB3ZWxsLgorCisgKiBUaGUgc29ja3M1Oi8vIHByb3h5IHN1cHBvcnQgYWRkZWQgYmFjayBpbiAyLjYuNCBkYXlzIHdhcyBub3QgYXdhcmUKKyAgIHRoYXQgc29ja3M1aDovLyBwcm94aWVzIGJlaGF2ZSBkaWZmZXJlbnRseS4KKworICogImdpdCBjb25maWciIGhhZCBhIGNvZGVwYXRoIHRoYXQgdHJpZWQgdG8gcGFzcyBhIE5VTEwgdG8KKyAgIHByaW50ZigiJXMiKSwgd2hpY2ggbm9ib2R5IHNlZW1zIHRvIGhhdmUgbm90aWNlZC4KKworICogT24gQ3lnd2luLCBvYmplY3QgY3JlYXRpb24gdXNlcyB0aGUgImNyZWF0ZSBhIHRlbXBvcmFyeSBhbmQgdGhlbgorICAgcmVuYW1lIGl0IHRvIHRoZSBmaW5hbCBuYW1lIiBwYXR0ZXJuLCBub3QgImNyZWF0ZSBhIHRlbXBvcmFyeSwKKyAgIGhhcmRsaW5rIGl0IHRvIHRoZSBmaW5hbCBuYW1lIGFuZCB0aGVuIHVubGluayB0aGUgdGVtcG9yYXJ5IgorICAgcGF0dGVybi4KKworICAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gdXNlIEdpdCBvbiBXaW5kb3dzIHNoYXJlZCBkaXJlY3RvcmllcywgYW5kIGlzCisgICBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoZSBNaW5HVyBhbmQgcGxhaW4gV2luZG93cyBidWlsZHMuICBJdCBhbHNvCisgICBoYXMgYmVlbiB1c2VkIGluIEN5Z3dpbiBwYWNrYWdlZCB2ZXJzaW9ucyBvZiBHaXQgZm9yIHF1aXRlIGEgd2hpbGUuCisgICBTZWUgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTYwNDE5MDkxMDU1LkdGMjM0NUBkaW53b29kaWUub3JnLworICAgYW5kIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDE1MDgxMTEwMDUyNy5HVzE0NDY2QGRpbndvb2RpZS5vcmcvLgorCisgKiAiZ2l0IHJlcGxhY2UgLWUiIGRpZCBub3QgaG9ub3VyICJjb3JlLmVkaXRvciIgY29uZmlndXJhdGlvbi4KKworICogVXBjb21pbmcgT3BlblNTTCAxLjEuMCB3aWxsIGJyZWFrIGNvbXBpbGF0aW9uIGIgdXBkYXRpbmcgYSBmZXcgQVBJcworICAgd2UgdXNlIGluIGltYXAtc2VuZCwgd2hpY2ggaGFzIGJlZW4gYWRqdXN0ZWQgZm9yIHRoZSBjaGFuZ2UuCisKKyAqICJnaXQgc3VibW9kdWxlIiByZXBvcnRzIHRoZSBwYXRocyBvZiBzdWJtb2R1bGVzIHRoZSBjb21tYW5kCisgICByZWN1cnNlcyBpbnRvLCBidXQgdGhpcyB3YXMgaW5jb3JyZWN0IHdoZW4gdGhlIGNvbW1hbmQgd2FzIG5vdCBydW4KKyAgIGZyb20gdGhlIHJvb3QgbGV2ZWwgb2YgdGhlIHN1cGVycHJvamVjdC4KKworICogVGhlIHRlc3Qgc2NyaXB0cyBmb3IgImdpdCBwNCIgKGJ1dCBub3QgImdpdCBwNCIgaW1wbGVtZW50YXRpb24KKyAgIGl0c2VsZikgaGFzIGJlZW4gdXBkYXRlZCBzbyB0aGF0IHRoZXkgd291bGQgd29yayBldmVuIG9uIGEgc3lzdGVtCisgICB3aGVyZSB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUHl0aG9uIGlzIHB5dGhvbiAzLgorCisgKiBUaGUgInVzZXIudXNlQ29uZmlnT25seSIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBtYWtlcyBpdCBhbiBlcnJvcgorICAgaWYgdXNlcnMgZG8gbm90IGV4cGxpY2l0bHkgc2V0IHVzZXIubmFtZSBhbmQgdXNlci5lbWFpbC4gIEhvd2V2ZXIsCisgICBpdHMgY2hlY2sgd2FzIG5vdCBkb25lIGVhcmx5IGVub3VnaCBhbmQgYWxsb3dlZCBhbm90aGVyIGVycm9yIHRvCisgICB0cmlnZ2VyLCByZXBvcnRpbmcgdGhhdCB0aGUgZGVmYXVsdCB2YWx1ZSB3ZSBndWVzc2VkIGZyb20gdGhlCisgICBzeXN0ZW0gc2V0dGluZyB3YXMgdW51c2FibGUuICBUaGlzIHdhcyBhIHN1Ym9wdGltYWwgZW5kLXVzZXIKKyAgIGV4cGVyaWVuY2UgYXMgd2Ugd2FudCB0aGUgdXNlcnMgdG8gc2V0IHVzZXIubmFtZS91c2VyLmVtYWlsIHdpdGhvdXQKKyAgIHJlbHlpbmcgb24gdGhlIGF1dG8tZGV0ZWN0aW9uIGF0IGFsbC4KKworICogImdpdCBtdiBvbGQgbmV3IiBkaWQgbm90IGFkanVzdCB0aGUgcGF0aCBmb3IgYSBzdWJtb2R1bGUgdGhhdCBsaXZlcworICAgYXMgYSBzdWJkaXJlY3RvcnkgaW5zaWRlIG9sZC8gZGlyZWN0b3J5IGNvcnJlY3RseS4KKworICogImdpdCBwdXNoIiBmcm9tIGEgY29ycnVwdCByZXBvc2l0b3J5IHRoYXQgYXR0ZW1wdHMgdG8gcHVzaCBhIGxhcmdlCisgICBudW1iZXIgb2YgcmVmcyBkZWFkbG9ja2VkOyB0aGUgdGhyZWFkIHRvIHJlbGF5IHJlamVjdGlvbiBub3RpY2VzCisgICBmb3IgdGhlc2UgcmVmIHVwZGF0ZXMgYmxvY2tlZCBvbiB3cml0aW5nIHRoZW0gdG8gdGhlIG1haW4gdGhyZWFkLAorICAgYWZ0ZXIgdGhlIG1haW4gdGhyZWFkIGF0IHRoZSByZWNlaXZpbmcgZW5kIG5vdGljZXMgdGhhdCB0aGUgcHVzaAorICAgZmFpbGVkIGFuZCBkZWNpZGVzIG5vdCB0byByZWFkIHRoZXNlIG5vdGljZXMgYW5kIHJldHVybiBhIGZhaWx1cmUuCisKKyAqIEEgcXVlc3Rpb24gYnkgImdpdCBzZW5kLWVtYWlsIiB0byBhc2sgdGhlIGlkZW50aXR5IG9mIHRoZSBzZW5kZXIKKyAgIGhhcyBiZWVuIHVwZGF0ZWQuCisKKyAqIFJlY2VudCB1cGRhdGUgdG8gR2l0IExGUyBicm9rZSAiZ2l0IHA0IiBieSBjaGFuZ2luZyB0aGUgb3V0cHV0IGZyb20KKyAgIGl0cyAibGZzIHBvaW50ZXIiIHN1YmNvbW1hbmQuCisKKyAqIFNvbWUgbXVsdGktYnl0ZSBlbmNvZGluZyBjYW4gaGF2ZSBhIGJhY2tzbGFzaCBieXRlIGFzIGEgbGF0ZXIgcGFydAorICAgb2Ygb25lIGxldHRlciwgd2hpY2ggd291bGQgY29uZnVzZSAiaGlnaGxpZ2h0IiBmaWx0ZXIgdXNlZCBpbgorICAgZ2l0d2ViLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZTI1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC40LnR4dApAQCAtMCwwICsxLDY5IEBACitHaXQgdjIuOC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi44LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBEb2N1bWVudGF0aW9uIGZvciAiZ2l0IG1lcmdlIC0tdmVyaWZ5LXNpZ25hdHVyZXMiIGhhcyBiZWVuIHVwZGF0ZWQKKyAgIHRvIGNsYXJpZnkgdGhhdCB0aGUgc2lnbmF0dXJlIG9mIG9ubHkgdGhlIGNvbW1pdCBhdCB0aGUgdGlwIGlzCisgICB2ZXJpZmllZC4gIEFsc28gdGhlIHBocmFzaW5nIHVzZWQgZm9yIHNpZ25hdHVyZSBhbmQga2V5IHZhbGlkaXR5IGlzCisgICBhZGp1c3RlZCB0byBhbGlnbiB3aXRoIHRoYXQgdXNlZCBieSBPcGVuUEdQLgorCisgKiBPbiBXaW5kb3dzLCAuZ2l0IGFuZCBvcHRpb25hbGx5IGFueSBmaWxlcyB3aG9zZSBuYW1lIHN0YXJ0cyB3aXRoIGEKKyAgIGRvdCBhcmUgbm93IG1hcmtlZCBhcyBoaWRkZW4sIHdpdGggYSBjb3JlLmhpZGVEb3RGaWxlcyBrbm9iIHRvCisgICBjdXN0b21pemUgdGhpcyBiZWhhdmlvdXIuCisKKyAqIFBvcnRhYmlsaXR5IGVuaGFuY2VtZW50IGZvciAicmViYXNlIC1pIiB0byBoZWxwIHBsYXRmb3JtcyB3aG9zZQorICAgc2hlbGwgZG9lcyBub3QgbGlrZSAiZm9yIGkgaW4gPGVtcHR5PiIgKHdoaWNoIGlzIG5vdCBQT1NJWC1rb3NoZXIpLgorCisgKiAiZ2l0IGZzY2siIGxlYXJuZWQgdG8gY2F0Y2ggTlVMIGJ5dGUgaW4gYSBjb21taXQgb2JqZWN0IGFzCisgICBwb3RlbnRpYWwgZXJyb3IgYW5kIHdhcm4uCisKKyAqIENJIHRlc3Qgd2FzIHRhdWdodCB0byBidWlsZCBkb2N1bWVudGF0aW9uIHBhZ2VzLgorCisgKiBNYW55ICdsaW5rZ2l0OjxnaXQgZG9jdW1lbnRhdGlvbiBwYWdlPicgcmVmZXJlbmNlcyB3ZXJlIGJyb2tlbiwKKyAgIHdoaWNoIGFyZSBhbGwgZml4ZWQgd2l0aCB0aGlzLgorCisgKiAiZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMiIG9mdGVuIG1hZGUgYSBoYXJkLXRvLWp1c3RpZnkgY2hvaWNlIG9mCisgICB0YWcgdG8gZ2l2ZSBuYW1lIHRvIGEgZ2l2ZW4gY29tbWl0LCBiZWNhdXNlIGl0IHRyaWVkIHRvIGNvbWUgdXAKKyAgIHdpdGggYSBuYW1lIHdpdGggc21hbGxlc3QgbnVtYmVyIG9mIGhvcHMgZnJvbSBhIHRhZywgY2F1c2luZyBhbiBvbGQKKyAgIGNvbW1pdCB3aG9zZSBjbG9zZSBkZXNjZW5kYW50IHRoYXQgaXMgcmVjZW50bHkgdGFnZ2VkIHdlcmUgbm90CisgICBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIGFuIG9sZCB0YWcgYnV0IHdpdGggYSBuZXdlciB0YWcuICBJdCBkaWQKKyAgIG5vdCBoZWxwIHRoYXQgaXRzIGNvbXB1dGF0aW9uIG9mICJob3AiIGNvdW50IHdhcyBmdXJ0aGVyIHR3ZWFrZWQgdG8KKyAgIHBlbmFsaXplIGJlaW5nIG9uIGEgc2lkZSBicmFuY2ggb2YgYSBtZXJnZS4gIFRoZSBsb2dpYyBoYXMgYmVlbgorICAgdXBkYXRlZCB0byBmYXZvciB1c2luZyB0aGUgdGFnIHdpdGggdGhlIG9sZGVzdCB0YWdnZXIgZGF0ZSwgd2hpY2gKKyAgIGlzIGEgbG90IGVhc2llciB0byBleHBsYWluIHRvIHRoZSBlbmQgdXNlcnM6ICJXZSBkZXNjcmliZSBhIGNvbW1pdAorICAgaW4gdGVybXMgb2YgdGhlIChjaHJvbm9sb2dpY2FsbHkpIG9sZGVzdCB0YWcgdGhhdCBjb250YWlucyB0aGUKKyAgIGNvbW1pdC4iCisKKyAqIFJ1bm5pbmcgdGVzdHMgd2l0aCAnLXgnIG9wdGlvbiB0byB0cmFjZSB0aGUgaW5kaXZpZHVhbCBjb21tYW5kCisgICBleGVjdXRpb25zIGlzIGEgdXNlZnVsIHdheSB0byBkZWJ1ZyB0ZXN0IHNjcmlwdHMsIGJ1dCBzb21lIHRlc3RzCisgICB0aGF0IGNhcHR1cmUgdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBhbmQgY2hlY2sgd2hhdCB0aGUgY29tbWFuZAorICAgc2FpZCBjYW4gYmUgYnJva2VuIHdpdGggdGhlIHRyYWNlIG91dHB1dCBtaXhlZCBpbi4gIFdoZW4gcnVubmluZworICAgb3VyIHRlc3RzIHVuZGVyICJiYXNoIiwgaG93ZXZlciwgd2UgY2FuIHJlZGlyZWN0IHRoZSB0cmFjZSBvdXRwdXQKKyAgIHRvIGFub3RoZXIgZmlsZSBkZXNjcmlwdG9yIHRvIGtlZXAgdGhlIHN0YW5kYXJkIGVycm9yIG9mIHByb2dyYW1zCisgICBiZWluZyB0ZXN0ZWQgaW50YWN0LgorCisgKiAiaHR0cC5jb29raWVGaWxlIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNsZWFybHkgd2FudHMgYSBwYXRobmFtZSwKKyAgIGJ1dCB3ZSBmb3Jnb3QgdG8gdHJlYXQgaXQgYXMgc3VjaCBieSBlLmcuIGFwcGx5aW5nIHRpbGRlIGV4cGFuc2lvbi4KKworICogV2hlbiBkZS1pbml0aWFsaXNpbmcgYWxsIHN1Ym1vZHVsZXMsICJnaXQgc3VibW9kdWxlIGRlaW5pdCIgZ2F2ZSBhCisgICBmYXVsdHkgcmVjb21tZW5kYXRpb24gdG8gdXNlICJnaXQgc3VibW9kdWxlIGRlaW5pdCAuIiwgd2hpY2ggd291bGQKKyAgIHJlc3VsdCBpbiBhIHN0cmFuZ2UgZXJyb3IgbWVzc2FnZSBpbiBhIHBhdGhvbG9naWNhbCBjb3JuZXIgY2FzZS4KKyAgIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkIHRvIHN1Z2dlc3QgInN1Ym1vZHVsZSBkZWluaXQgLS1hbGwiIGluc3RlYWQuCisKKyAqIE1hbnkgY29tbWFuZHMgbm9ybWFsaXplIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZnJvbSBORkQgdG8gTkZDCisgICB2YXJpYW50IG9mIFVURi04IG9uIE9TWCwgYnV0IGNvbW1hbmRzIGluIHRoZSAiZGlmZiIgZmFtaWx5IGRpZAorICAgbm90LCBjYXVzaW5nICJnaXQgZGlmZiAkcGF0aCIgdG8gY29tcGxhaW4gdGhhdCBubyBzdWNoIHBhdGggaXMKKyAgIGtub3duIHRvIEdpdC4gIFRoZXkgaGF2ZSBiZWVuIHRhdWdodCB0byBkbyB0aGUgbm9ybWFsaXphdGlvbi4KKworICogQSBjb3VwbGUgb2YgYnVncyBhcm91bmQgY29yZS5hdXRvY3JsZiBoYXZlIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgZGlmZnRvb2wiIGxlYXJuZWQgdG8gaGFuZGxlIHVubWVyZ2VkIHBhdGhzIGNvcnJlY3RseSBpbgorICAgZGlyLWRpZmYgbW9kZS4KKworICogVGhlICJhcmUgd2UgdGFsa2luZyB3aXRoIFRUWSwgZG9pbmcgYW4gaW50ZXJhY3RpdmUgc2Vzc2lvbj8iCisgICBkZXRlY3Rpb24gaGFzIGJlZW4gdXBkYXRlZCB0byB3b3JrIGJldHRlciBmb3IgIkdpdCBmb3IgV2luZG93cyIuCisKKworQWxzbyBjb250YWlucyBvdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmQxNzlmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguNS50eHQKQEAgLTAsMCArMSwxMiBAQAorR2l0IHYyLjguNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuOC40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdC1zaGVsbCIgcmVqZWN0cyBhIHJlcXVlc3QgdG8gc2VydmUgYSByZXBvc2l0b3J5IHdob3NlIG5hbWUKKyAgIGJlZ2lucyB3aXRoIGEgZGFzaCwgd2hpY2ggbWFrZXMgaXQgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIGdldCBpdAorICAgY29uZnVzZWQgaW50byBzcGF3bmluZyBzZXJ2aWNlIHByb2dyYW1zIGxpa2UgImdpdC11cGxvYWQtcGFjayIgd2l0aAorICAgYW4gb3B0aW9uIGxpa2UgIi0taGVscCIsIHdoaWNoIGluIHR1cm4gd291bGQgc3Bhd24gYW4gaW50ZXJhY3RpdmUKKyAgIHBhZ2VyLCBpbnN0ZWFkIG9mIHdvcmtpbmcgd2l0aCB0aGUgcmVwb3NpdG9yeSB1c2VyIGFza2VkIHRvIGFjY2VzcworICAgKGkuZS4gdGhlIG9uZSB3aG9zZSBuYW1lIGlzICItLWhlbHAiKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhkYjU1ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjYudHh0CkBAIC0wLDAgKzEsNCBAQAorR2l0IHYyLjguNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGZvcndhcmQtcG9ydHMgdGhlIGZpeCBmb3IgInNzaDovLy4uLiIgVVJMIGZyb20gR2l0IHYyLjcuNgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTE2NDAxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMC50eHQKQEAgLTAsMCArMSw1MTIgQEAKK0dpdCAyLjkgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVuZC11c2VyIGZhY2luZyBQb3JjZWxhaW4gbGV2ZWwgY29tbWFuZHMgaW4gdGhlICJnaXQgZGlmZiIgYW5kCisiZ2l0IGxvZyIgZmFtaWx5IGJ5IGRlZmF1bHQgZW5hYmxlIHRoZSByZW5hbWUgZGV0ZWN0aW9uOyB5b3UgY2FuIHN0aWxsCit1c2UgImRpZmYucmVuYW1lcyIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBkaXNhYmxlIHRoaXMuCisKK01lcmdpbmcgdHdvIGJyYW5jaGVzIHRoYXQgaGF2ZSBubyBjb21tb24gYW5jZXN0b3Igd2l0aCAiZ2l0IG1lcmdlIiBpcworYnkgZGVmYXVsdCBmb3JiaWRkZW4gbm93IHRvIHByZXZlbnQgY3JlYXRpbmcgc3VjaCBhbiB1bnVzdWFsIG1lcmdlIGJ5CittaXN0YWtlLgorCitUaGUgb3V0cHV0IGZvcm1hdHMgb2YgImdpdCBsb2ciIHRoYXQgaW5kZW50cyB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGJ5Cis0IHNwYWNlcyBub3cgZXhwYW5kcyBIVCBpbiB0aGUgbG9nIG1lc3NhZ2UgYnkgZGVmYXVsdC4gIFlvdSBjYW4gdXNlCit0aGUgIi0tbm8tZXhwYW5kLXRhYnMiIG9wdGlvbiB0byBkaXNhYmxlIHRoaXMuCisKKyJnaXQgY29tbWl0LXRyZWUiIHBsdW1iaW5nIGNvbW1hbmQgcmVxdWlyZWQgdGhlIHVzZXIgdG8gYWx3YXlzIHNpZ24KK2l0cyByZXN1bHQgd2hlbiB0aGUgdXNlciBzZXRzIHRoZSBjb21taXQuZ3Bnc2lnbiBjb25maWd1cmF0aW9uCit2YXJpYWJsZSwgd2hpY2ggd2FzIGFuIGFuY2llbnQgbWlzdGFrZSwgd2hpY2ggdGhpcyByZWxlYXNlIGNvcnJlY3RzLgorQSBzY3JpcHQgdGhhdCBkcml2ZXMgY29tbWl0LXRyZWUsIGlmIGl0IHJlbGllcyBvbiB0aGlzIG1pc3Rha2UsIG5vdworbmVlZHMgdG8gcmVhZCBjb21taXQuZ3Bnc2lnbiBhbmQgcGFzcyB0aGUgLVMgb3B0aW9uIGFzIG5lY2Vzc2FyeS4KKworCitVcGRhdGVzIHNpbmNlIHYyLjgKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogQ29tZXMgd2l0aCBnaXQtbXVsdGltYWlsIDEuMy4xIChpbiBjb250cmliLykuCisKKyAqIFRoZSBlbmQtdXNlciBmYWNpbmcgY29tbWFuZHMgbGlrZSAiZ2l0IGRpZmYiIGFuZCAiZ2l0IGxvZyIKKyAgIG5vdyBlbmFibGUgdGhlIHJlbmFtZSBkZXRlY3Rpb24gYnkgZGVmYXVsdC4KKworICogVGhlIGNyZWRlbnRpYWwuaGVscGVyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgY3VtdWxhdGl2ZSBhbmQKKyAgIHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIG92ZXJyaWRlIGl0IGZyb20gdGhlIGNvbW1hbmQgbGluZS4gIEFzCisgICBhIHNwZWNpYWwgY2FzZSwgZ2l2aW5nIGFuIGVtcHR5IHN0cmluZyBhcyBpdHMgdmFsdWUgbm93IHNlcnZlcworICAgYXMgdGhlIHNpZ25hbCB0byBjbGVhciB0aGUgdmFsdWVzIHNwZWNpZmllZCBpbiB2YXJpb3VzIGZpbGVzLgorCisgKiBBIG5ldyAiaW50ZXJhY3RpdmUuZGlmZkZpbHRlciIgY29uZmlndXJhdGlvbiBjYW4gYmUgdXNlZCB0bworICAgY3VzdG9taXplIHRoZSBkaWZmIHNob3duIGluICJnaXQgYWRkIC1pIiBzZXNzaW9ucy4KKworICogImdpdCBwNCIgbm93IGFsbG93cyBQNCBhdXRob3IgbmFtZXMgdG8gYmUgbWFwcGVkIHRvIEdpdCBhdXRob3IKKyAgIG5hbWVzLgorCisgKiAiZ2l0IHJlYmFzZSAteCIgY2FuIGJlIHVzZWQgd2l0aG91dCBwYXNzaW5nICItaSIgb3B0aW9uLgorCisgKiAiZ2l0IC1jIGNyZWRlbnRpYWwuPHZhcj49PHZhbHVlPiBzdWJtb2R1bGUiIGNhbiBub3cgYmUgdXNlZCB0bworICAgcHJvcGFnYXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHJlbGF0ZWQgdG8gY3JlZGVudGlhbCBoZWxwZXIKKyAgIGRvd24gdG8gdGhlIHN1Ym1vZHVsZXMuCisKKyAqICJnaXQgdGFnIiBjYW4gY3JlYXRlIGFuIGFubm90YXRlZCB0YWcgd2l0aG91dCBleHBsaWNpdGx5IGdpdmVuIGFuCisgICAiLWEiIChvciAiLXMiKSBvcHRpb24gKGkuZS4gd2hlbiBhIHRhZyBtZXNzYWdlIGlzIGdpdmVuKS4gIEEgbmV3CisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB0YWcuZm9yY2VTaWduQW5ub3RhdGVkLCBjYW4gYmUgdXNlZCB0byB0ZWxsCisgICB0aGUgY29tbWFuZCB0byBjcmVhdGUgc2lnbmVkIHRhZyBpbiBzdWNoIGEgc2l0dWF0aW9uLgorCisgKiAiZ2l0IG1lcmdlIiB1c2VkIHRvIGFsbG93IG1lcmdpbmcgdHdvIGJyYW5jaGVzIHRoYXQgaGF2ZSBubyBjb21tb24KKyAgIGJhc2UgYnkgZGVmYXVsdCwgd2hpY2ggbGVkIHRvIGEgYnJhbmQgbmV3IGhpc3Rvcnkgb2YgYW4gZXhpc3RpbmcKKyAgIHByb2plY3QgY3JlYXRlZCBhbmQgdGhlbiBnZXQgcHVsbGVkIGJ5IGFuIHVuc3VzcGVjdGluZyBtYWludGFpbmVyLAorICAgd2hpY2ggYWxsb3dlZCBhbiB1bm5lY2Vzc2FyeSBwYXJhbGxlbCBoaXN0b3J5IG1lcmdlZCBpbnRvIHRoZQorICAgZXhpc3RpbmcgcHJvamVjdC4gIFRoZSBjb21tYW5kIGhhcyBiZWVuIHRhdWdodCBub3QgdG8gYWxsb3cgdGhpcyBieQorICAgZGVmYXVsdCwgd2l0aCBhbiBlc2NhcGUgaGF0Y2ggIi0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyIgb3B0aW9uCisgICB0byBiZSB1c2VkIGluIGEgcmFyZSBldmVudCB0aGF0IG1lcmdlcyBoaXN0b3JpZXMgb2YgdHdvIHByb2plY3RzCisgICB0aGF0IHN0YXJ0ZWQgdGhlaXIgbGl2ZXMgaW5kZXBlbmRlbnRseS4KKworICogImdpdCBwdWxsIiBoYXMgYmVlbiB0YXVnaHQgdG8gcGFzcyB0aGUgIi0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyIKKyAgIG9wdGlvbiB0byB1bmRlcmx5aW5nICJnaXQgbWVyZ2UiLgorCisgKiAiZ2l0IGFwcGx5IC12IiBsZWFybmVkIHRvIHJlcG9ydCBwYXRocyBpbiB0aGUgcGF0Y2ggdGhhdCB3ZXJlCisgICBza2lwcGVkIHZpYSAtLWluY2x1ZGUvLS1leGNsdWRlIG1lY2hhbmlzbSBvciBiZWluZyBvdXRzaWRlIHRoZQorICAgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKworICogU2hlbGwgY29tcGxldGlvbiAoaW4gY29udHJpYi8pIHVwZGF0ZXMuCisKKyAqIFRoZSBjb21taXQgb2JqZWN0IG5hbWUgcmVwb3J0ZWQgd2hlbiAicmViYXNlIC1pIiBzdG9wcyBoYXMgYmVlbgorICAgc2hvcnRlbmVkLgorCisgKiAiZ2l0IHdvcmt0cmVlIGFkZCIgY2FuIGJlIGdpdmVuICItLW5vLWNoZWNrb3V0IiBvcHRpb24gdG8gb25seQorICAgY3JlYXRlIGFuIGVtcHR5IHdvcmt0cmVlIHdpdGhvdXQgY2hlY2tpbmcgb3V0IHRoZSBmaWxlcy4KKworICogImdpdCBtZXJnZXRvb2xzIiBsZWFybmVkIHRvIGRyaXZlIEV4YW1EaWZmLgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UiIGxlYXJuZWQgIi0tW25vLV1hdXRvc3Rhc2giIG9wdGlvbiwgc28gdGhhdAorICAgdGhlIHJlYmFzZS5hdXRvc3Rhc2ggY29uZmlndXJhdGlvbiB2YXJpYWJsZSBzZXQgdG8gdHJ1ZSBjYW4gYmUKKyAgIG92ZXJyaWRkZW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCisgKiBXaGVuICJnaXQgbG9nIiBzaG93cyB0aGUgbG9nIG1lc3NhZ2UgaW5kZW50ZWQgYnkgNC1zcGFjZXMsIHRoZQorICAgcmVtYWluZGVyIG9mIGEgbGluZSBhZnRlciBhIEhUIGRvZXMgbm90IGFsaWduIGluIHRoZSB3YXkgdGhlIGF1dGhvcgorICAgb3JpZ2luYWxseSBpbnRlbmRlZC4gIFRoZSBjb21tYW5kIG5vdyBleHBhbmRzIHRhYnMgYnkgZGVmYXVsdCB0byBoZWxwCisgICBzdWNoIGEgY2FzZSwgYW5kIGFsbG93cyB0aGUgdXNlcnMgdG8gb3ZlcnJpZGUgaXQgd2l0aCBhIG5ldyBvcHRpb24sCisgICAiLS1uby1leHBhbmQtdGFicyIuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbm93IHVzZXMgYSBtb3JlIHJlYWRhYmxlIHRpbWVzdGFtcHMgd2hlbgorICAgZm9ybXVsYXRpbmcgYSBtZXNzYWdlIElELgorCisgKiAiZ2l0IHJlcmVyZSIgY2FuIGVuY291bnRlciB0d28gb3IgbW9yZSBmaWxlcyB3aXRoIHRoZSBzYW1lIGNvbmZsaWN0CisgICBzaWduYXR1cmUgdGhhdCBoYXZlIHRvIGJlIHJlc29sdmVkIGluIGRpZmZlcmVudCB3YXlzLCBidXQgdGhlcmUgd2FzCisgICBubyB3YXkgdG8gcmVjb3JkIHRoZXNlIHNlcGFyYXRlIHJlc29sdXRpb25zLgorCisgKiAiZ2l0IHA0IiBsZWFybmVkIHRvIHJlY29yZCBQNCBqb2JzIGluIEdpdCBjb21taXQgdGhhdCBpbXBvcnRzIGZyb20KKyAgIHRoZSBoaXN0b3J5IGluIFBlcmZvcmNlLgorCisgKiAiZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMiIG9mdGVuIG1hZGUgYSBoYXJkLXRvLWp1c3RpZnkgY2hvaWNlIG9mCisgICB0YWcgdG8gbmFtZSBhIGdpdmVuIGNvbW1pdCwgYmVjYXVzZSBpdCB0cmllZCB0byBjb21lIHVwCisgICB3aXRoIGEgbmFtZSB3aXRoIHNtYWxsZXN0IG51bWJlciBvZiBob3BzIGZyb20gYSB0YWcsIGNhdXNpbmcgYW4gb2xkCisgICBjb21taXQgd2hvc2UgY2xvc2UgZGVzY2VuZGFudCB0aGF0IGlzIHJlY2VudGx5IHRhZ2dlZCB3ZXJlIG5vdAorICAgZGVzY3JpYmVkIHdpdGggcmVzcGVjdCB0byBhbiBvbGQgdGFnIGJ1dCB3aXRoIGEgbmV3ZXIgdGFnLiAgSXQgZGlkCisgICBub3QgaGVscCB0aGF0IGl0cyBjb21wdXRhdGlvbiBvZiAiaG9wIiBjb3VudCB3YXMgZnVydGhlciB0d2Vha2VkIHRvCisgICBwZW5hbGl6ZSBiZWluZyBvbiBhIHNpZGUgYnJhbmNoIG9mIGEgbWVyZ2UuICBUaGUgbG9naWMgaGFzIGJlZW4KKyAgIHVwZGF0ZWQgdG8gZmF2b3IgdXNpbmcgdGhlIHRhZyB3aXRoIHRoZSBvbGRlc3QgdGFnZ2VyIGRhdGUsIHdoaWNoCisgICBpcyBhIGxvdCBlYXNpZXIgdG8gZXhwbGFpbiB0byB0aGUgZW5kIHVzZXJzOiAiV2UgZGVzY3JpYmUgYSBjb21taXQKKyAgIGluIHRlcm1zIG9mIHRoZSAoY2hyb25vbG9naWNhbGx5KSBvbGRlc3QgdGFnIHRoYXQgY29udGFpbnMgdGhlCisgICBjb21taXQuIgorCisgKiAiZ2l0IGNsb25lIiBsZWFybmVkIHRoZSAiLS1zaGFsbG93LXN1Ym1vZHVsZXMiIG9wdGlvbi4KKworICogSFRUUCB0cmFuc3BvcnQgY2xpZW50cyBsZWFybmVkIHRvIHRocm93IGV4dHJhIEhUVFAgaGVhZGVycyBhdCB0aGUKKyAgIHNlcnZlciwgc3BlY2lmaWVkIHZpYSBodHRwLmV4dHJhSGVhZGVyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAqIFRoZSAiLS1jb21wYWN0aW9uLWhldXJpc3RpYyIgb3B0aW9uIHRvICJnaXQgZGlmZiIgZmFtaWx5IG9mCisgICBjb21tYW5kcyBlbmFibGVzIGEgaGV1cmlzdGljIHRvIG1ha2UgdGhlIHBhdGNoIG91dHB1dCBtb3JlIHJlYWRhYmxlCisgICBieSB1c2luZyBhIGJsYW5rIGxpbmUgYXMgYSBzdHJvbmcgaGludCB0aGF0IHRoZSBjb250ZW50cyBiZWZvcmUgYW5kCisgICBhZnRlciBpdCBiZWxvbmcgdG8gbG9naWNhbGx5IHNlcGFyYXRlIHVuaXRzLiAgSXQgaXMgc3RpbGwKKyAgIGV4cGVyaW1lbnRhbC4KKworICogQSBuZXcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjb3JlLmhvb2tzUGF0aCBhbGxvd3MgY3VzdG9taXppbmcKKyAgIHdoZXJlIHRoZSBob29rIGRpcmVjdG9yeSBpcy4KKworICogQW4gZWFybGllciBhZGRpdGlvbiBvZiAic2FuaXRpemVfc3VibW9kdWxlX2VudiIgd2l0aCAxNDExMWZjNCAoZ2l0OgorICAgc3VibW9kdWxlIGhvbm9yIC1jIGNyZWRlbnRpYWwuKiBmcm9tIGNvbW1hbmQgbGluZSwgMjAxNi0wMi0yOSkKKyAgIHR1cm5lZCBvdXQgdG8gYmUgYSBjb252b2x1dGVkIG5vLW9wOyBpbXBsZW1lbnQgd2hhdCBpdCB3YW50ZWQgdG8gZG8KKyAgIGNvcnJlY3RseSwgYW5kIHN0b3AgZmlsdGVyaW5nIHNldHRpbmdzIGdpdmVuIHZpYSAiZ2l0IC1jIHZhcj12YWwiLgorCisgKiAiZ2l0IGNvbW1pdCAtLWRyeS1ydW4iIHJlcG9ydGVkICJObywgbm8sIHlvdSBjYW5ub3QgY29tbWl0LiIgaW4gb25lCisgICBjYXNlIHdoZXJlICJnaXQgY29tbWl0IiB3b3VsZCBoYXZlIGFsbG93ZWQgeW91IHRvIGNvbW1pdCwgYW5kIHRoaXMKKyAgIGltcHJvdmVzIGl0IGEgbGl0dGxlIGJpdCAoImdpdCBjb21taXQgLS1kcnktcnVuIC0tc2hvcnQiIHN0aWxsIGRvZXMKKyAgIG5vdCBnaXZlIHlvdSB0aGUgY29ycmVjdCBhbnN3ZXIsIGZvciBleGFtcGxlKS4gIFRoaXMgaXMgYSBzdG9wLWdhcAorICAgbWVhc3VyZSBpbiB0aGF0ICJjb21taXQgLS1zaG9ydCAtLWRyeS1ydW4iIHN0aWxsIGdpdmVzIGFuIGluY29ycmVjdAorICAgcmVzdWx0LgorCisgKiBUaGUgZXhwZXJpbWVudGFsICJtdWx0aXBsZSB3b3JrdHJlZSIgZmVhdHVyZSBnYWlucyBtb3JlIHNhZmV0eSB0bworICAgZm9yYmlkIG9wZXJhdGlvbnMgb24gYSBicmFuY2ggdGhhdCBpcyBjaGVja2VkIG91dCBvciBiZWluZyBhY3RpdmVseQorICAgd29ya2VkIG9uIGVsc2V3aGVyZSwgYnkgbm90aWNpbmcgdGhhdCBlLmcuIGl0IGlzIGJlaW5nIHJlYmFzZWQuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIGEgbmV3ICItLWJhc2UiIG9wdGlvbiB0byByZWNvcmQgd2hhdAorICAgKHB1YmxpYywgd2VsbC1rbm93bikgY29tbWl0IHRoZSBvcmlnaW5hbCBzZXJpZXMgd2FzIGJ1aWx0IG9uIGluCisgICBpdHMgb3V0cHV0LgorCisgKiAiZ2l0IGNvbW1pdCIgbGVhcm5lZCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSAiY29tbWl0LnZlcmJvc2UiCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGFuZCBhY3QgYXMgaWYgdGhlICItLXZlcmJvc2UiIG9wdGlvbgorICAgd2FzIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworICogVXBkYXRlZCBkb2N1bWVudGF0aW9uIGdpdmVzIGhpbnRzIHRvIEdNYWlsIHVzZXJzIHdpdGggdHdvLWZhY3RvcgorICAgYXV0aCBlbmFibGVkIHRoYXQgdGhleSBuZWVkIGFwcC1zcGVjaWZpYy1wYXNzd29yZCB3aGVuIHVzaW5nCisgICAiZ2l0IHNlbmQtZW1haWwiLgorCisgKiBUaGUgbWFucGFnZSBvdXRwdXQgb2Ygb3VyIGRvY3VtZW50YXRpb24gZGlkIG5vdCByZW5kZXIgd2VsbCBpbgorICAgdGVybWluYWw7IHR5cGVzZXQgbGl0ZXJhbHMgaW4gYm9sZCBieSBkZWZhdWx0IHRvIG1ha2UgdGhlbSBzdGFuZAorICAgb3V0IG1vcmUuCisKKyAqIFRoZSBtYXJrLXVwIGluIHRoZSB0b3AtbGV2ZWwgUkVBRE1FLm1kIGZpbGUgaGFzIGJlZW4gdXBkYXRlZCB0bworICAgdHlwZXNldCBDTEkgY29tbWFuZCBuYW1lcyBkaWZmZXJlbnRseSBmcm9tIHRoZSBib2R5IHRleHQuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogVGhlIGVtYmVkZGVkIGFyZ3MgYXJndi1hcnJheSBpbiB0aGUgY2hpbGQgcHJvY2VzcyBpcyB1c2VkIHRvIGJ1aWxkCisgICB0aGUgY29tbWFuZCBsaW5lIHRvIHJ1biBwYWNrLW9iamVjdHMgaW5zdGVhZCBvZiB1c2luZyBhIHNlcGFyYXRlCisgICBhcnJheSBvZiBzdHJpbmdzLgorCisgKiBBIHRlc3QgZm9yIHRhZ3MgaGFzIGJlZW4gcmVzdHJ1Y3R1cmVkIHNvIHRoYXQgbW9yZSBwYXJ0cyBvZiBpdCBjYW4KKyAgIGVhc2lseSBiZSBydW4gb24gYSBwbGF0Zm9ybSB3aXRob3V0IGEgd29ya2luZyBHbnVQRy4KKworICogVGhlIHN0YXJ0dXBfaW5mbyBkYXRhLCB3aGljaCByZWNvcmRzIGlmIHdlIGFyZSB3b3JraW5nIGluc2lkZSBhCisgICByZXBvc2l0b3J5IChhbW9uZyBvdGhlciB0aGluZ3MpLCBhcmUgbm93IHVuaWZvcm1seSBhdmFpbGFibGUgdG8gR2l0CisgICBzdWJjb21tYW5kIGltcGxlbWVudGF0aW9ucywgYW5kIEdpdCBhdm9pZHMgYXR0ZW1wdGluZyB0byB0b3VjaAorICAgcmVmZXJlbmNlcyB3aGVuIHdlIGFyZSBub3QgaW4gYSByZXBvc2l0b3J5LgorCisgKiBUaGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHBhcnNlciBmb3IgInJlY2VpdmUtcGFjayIgaGFzIGJlZW4KKyAgIHJld3JpdHRlbiB0byB1c2UgcGFyc2Utb3B0aW9ucy4KKworICogQSBtYWpvciBwYXJ0IG9mICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgaGFzIGJlZW4gcG9ydGVkIHRvIEMgdG8gdGFrZQorICAgYWR2YW50YWdlIG9mIHRoZSByZWNlbnRseSBhZGRlZCBmcmFtZXdvcmsgdG8gcnVuIGRvd25sb2FkIHRhc2tzIGluCisgICBwYXJhbGxlbC4gIE90aGVyIHVwZGF0ZXMgdG8gImdpdCBzdWJtb2R1bGUiIHRoYXQgbW92ZSBwaWVjZXMgb2YKKyAgIGxvZ2ljIHRvIEMgY29udGludWVzLgorCisgKiBSZW5hbWUgYnVuY2ggb2YgdGVzdHMgb24gImdpdCBjbG9uZSIgZm9yIGJldHRlciBvcmdhbml6YXRpb24uCisKKyAqIFRoZSB0ZXN0cyB0aGF0IGludm9sdmUgcnVubmluZyBodHRwZCBsZWFrZWQgdGhlIHN5c3RlbS13aWRlCisgICBjb25maWd1cmF0aW9uIGluIC9ldGMvZ2l0Y29uZmlnIHRvIHRoZSB0ZXN0ZWQgZW52aXJvbm1lbnQuCisKKyAqIEJ1aWxkIHVwZGF0ZXMgZm9yIE1TVkMuCisKKyAqIFRoZSByZXBvc2l0b3J5IHNldC11cCBzZXF1ZW5jZSBoYXMgYmVlbiBzdHJlYW1saW5lZCAodGhlIGJpZ2dlc3QKKyAgIGNoYW5nZSBpcyB0aGF0IHRoZXJlIGlzIG5vIGxvbmdlciBnaXRfY29uZmlnX2Vhcmx5KCkpLCBzbyB0aGF0IHdlCisgICBkbyBub3QgYXR0ZW1wdCB0byBsb29rIGludG8gcmVmcy8qIHdoZW4gd2Uga25vdyB3ZSBkbyBub3QgaGF2ZSBhCisgICBHaXQgcmVwb3NpdG9yeS4KKworICogQ29kZSByZXN0cnVjdHVyaW5nIGFyb3VuZCB0aGUgInJlZnMiIEFQSSB0byBwcmVwYXJlIGZvciBwbHVnZ2FibGUKKyAgIHJlZnMgYmFja2VuZHMuCisKKyAqIFNvdXJjZXMgdG8gbWFueSB0ZXN0IGhlbHBlciBiaW5hcmllcyBhbmQgdGhlIGdlbmVyYXRlZCBoZWxwZXJzCisgICBoYXZlIGJlZW4gbW92ZWQgdG8gdC9oZWxwZXIvIHN1YmRpcmVjdG9yeSB0byByZWR1Y2UgY2x1dHRlciBhdCB0aGUKKyAgIHRvcCBsZXZlbCBvZiB0aGUgdHJlZS4KKworICogVW5pZnkgaW50ZXJuYWwgbG9naWMgYmV0d2VlbiAiZ2l0IHRhZyAtdiIgYW5kICJnaXQgdmVyaWZ5LXRhZyIKKyAgIGNvbW1hbmRzIGJ5IG1ha2luZyBvbmUgZGlyZWN0bHkgY2FsbCBpbnRvIHRoZSBvdGhlci4KKworICogIm1lcmdlLXJlY3Vyc2l2ZSIgc3RyYXRlZ3kgaW5jb3JyZWN0bHkgY2hlY2tlZCBpZiBhIHBhdGggdGhhdCBpcworICAgaW52b2x2ZWQgaW4gaXRzIGludGVybmFsIG1lcmdlIGV4aXN0cyBpbiB0aGUgd29ya2luZyB0cmVlLgorCisgKiBUaGUgdGVzdCBzY3JpcHRzIGZvciAiZ2l0IHA0IiAoYnV0IG5vdCAiZ2l0IHA0IiBpbXBsZW1lbnRhdGlvbgorICAgaXRzZWxmKSBoYXMgYmVlbiB1cGRhdGVkIHNvIHRoYXQgdGhleSB3b3VsZCB3b3JrIGV2ZW4gb24gYSBzeXN0ZW0KKyAgIHdoZXJlIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBQeXRob24gaXMgcHl0aG9uIDMuCisKKyAqIEFzIG5vYm9keSBtYWludGFpbnMgb3VyIGluLXRyZWUgZ2l0LnNwZWMuaW4gYW5kIGRpc3Ryb3MgdXNlIHRoZWlyCisgICBvd24gc3BlYyBmaWxlLCB3ZSBzdG9wcGVkIHByZXRlbmRpbmcgdGhhdCB3ZSBzdXBwb3J0ICJtYWtlIHJwbSIuCisKKyAqIE1vdmUgZnJvbSAidW5zaWduZWQgY2hhclsyMF0iIHRvICJzdHJ1Y3Qgb2JqZWN0X2lkIiBjb250aW51ZXMuCisKKyAqIFRoZSBjb2RlIGZvciB3YXJuaW5nX2Vycm5vL2RpZV9lcnJubyBoYXMgYmVlbiByZWZhY3RvcmVkIGFuZCBhIG5ldworICAgZXJyb3JfZXJybm8oKSByZXBvcnRpbmcgaGVscGVyIGlzIGludHJvZHVjZWQuCisgICAobWVyZ2UgMWRhMDQ1ZiBuZC9lcnJvci1lcnJubyBsYXRlciB0byBtYWludCkuCisKKyAqIFJ1bm5pbmcgdGVzdHMgd2l0aCAnLXgnIG9wdGlvbiB0byB0cmFjZSB0aGUgaW5kaXZpZHVhbCBjb21tYW5kCisgICBleGVjdXRpb25zIGlzIGEgdXNlZnVsIHdheSB0byBkZWJ1ZyB0ZXN0IHNjcmlwdHMsIGJ1dCBzb21lIHRlc3RzCisgICB0aGF0IGNhcHR1cmUgdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBhbmQgY2hlY2sgd2hhdCB0aGUgY29tbWFuZAorICAgc2FpZCBjYW4gYmUgYnJva2VuIHdpdGggdGhlIHRyYWNlIG91dHB1dCBtaXhlZCBpbi4gIFdoZW4gcnVubmluZworICAgb3VyIHRlc3RzIHVuZGVyICJiYXNoIiwgaG93ZXZlciwgd2UgY2FuIHJlZGlyZWN0IHRoZSB0cmFjZSBvdXRwdXQKKyAgIHRvIGFub3RoZXIgZmlsZSBkZXNjcmlwdG9yIHRvIGtlZXAgdGhlIHN0YW5kYXJkIGVycm9yIG9mIHByb2dyYW1zCisgICBiZWluZyB0ZXN0ZWQgaW50YWN0LgorCisgKiB0MDA0MCBoYWQgdG9vIG1hbnkgdW5uZWNlc3NhcnkgcmVwZXRpdGlvbnMgaW4gaXRzIHRlc3QgZGF0YS4gIFRlYWNoCisgICB0ZXN0LXBhcnNlLW9wdGlvbnMgcHJvZ3JhbSBzbyB0aGF0IGEgY2FsbGVyIGNhbiB0ZWxsIHdoYXQgaXQKKyAgIGV4cGVjdHMgaW4gaXRzIG91dHB1dCwgc28gdGhhdCB0aGVzZSByZXBldGl0aW9ucyBjYW4gYmUgY2xlYW5lZCB1cC4KKworICogQWRkIHBlcmYgdGVzdCBmb3IgInJlYmFzZSAtaSIuCisKKyAqIENvbW1vbiBtaXN0YWtlcyB3aGVuIHdyaXRpbmcgZ2l0bGluazogaW4gb3VyIGRvY3VtZW50YXRpb24gYXJlCisgICBmb3VuZCBieSAibWFrZSBjaGVjay1kb2NzIi4KKworICogdDl4eHggc2VyaWVzIGhhcyBiZWVuIHVwZGF0ZWQgcHJpbWFyaWx5IGZvciByZWFkYWJpbGl0eSwgd2hpbGUKKyAgIGZpeGluZyBzbWFsbCBidWdzIGluIGl0LiAgQSBmZXcgc2NyaXB0ZWQgUG9yY2VsYWluIGNvbW1hbmRzIGhhdmUKKyAgIGFsc28gYmVlbiB1cGRhdGVkIHRvIGZpeCBwb3NzaWJsZSBidWdzIGFyb3VuZCB0aGVpciB1c2Ugb2YKKyAgICJ0ZXN0IC16IiBhbmQgInRlc3QgLW4iLgorCisgKiBDSSB0ZXN0IHdhcyB0YXVnaHQgdG8gcnVuIGdpdC1zdm4gdGVzdHMuCisKKyAqICJnaXQgY2F0LWZpbGUgLS1iYXRjaC1hbGwiIGhhcyBiZWVuIHNwZWQgdXAsIGJ5IHRha2luZyBhZHZhbnRhZ2UKKyAgIG9mIHRoZSBmYWN0IHRoYXQgaXQgZG9lcyBub3QgaGF2ZSB0byByZWFkIGEgbGlzdCBvZiBvYmplY3RzLCBpbiB0d28KKyAgIHdheXMuCisKKyAqIHRlc3QgdXBkYXRlcyB0byBtYWtlIGl0IG1vcmUgcmVhZGFibGUgYW5kIG1haW50YWluYWJsZS4KKyAgIChtZXJnZSBlNjI3M2Y0IGVzL3QxNTAwLW1vZGVybml6ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJtYWtlIERFVkVMT1BFUj0xIiB3b3JrZWQgYXMgZXhwZWN0ZWQ7IHNldHRpbmcgREVWRUxPUEVSPTEgaW4KKyAgIGNvbmZpZy5tYWsgZGlkbid0LgorICAgKG1lcmdlIDUxZGQzZTggbW0vbWFrZWZpbGUtZGV2ZWxvcGVyLWNhbi1iZS1pbi1jb25maWctbWFrIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHdheSBob3cgInN1Ym1vZHVsZS0taGVscGVyIGxpc3QiIHNpZ25hbHMgdW5tYXRjaCBlcnJvciB0byBpdHMKKyAgIGNhbGxlcnMgaGFzIGJlZW4gdXBkYXRlZC4KKworICogQSBiYXNoLWlzbSAibG9jYWwiIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAiZ2l0IHN1Ym1vZHVsZSIgc2NyaXB0ZWQKKyAgIFBvcmNlbGFpbi4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi44CistLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjIuOCBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgdGhlIG1haW50ZW5hbmNlIHJlbGVhc2VzJworbm90ZXMgZm9yIGRldGFpbHMpLgorCisgKiAiZ2l0IGNvbmZpZyAtLWdldC11cmxtYXRjaCIsIHVubGlrZSBvdGhlciB2YXJpYW50cyBvZiB0aGUgImdpdAorICAgY29uZmlnIC0tZ2V0IiBmYW1pbHksIGRpZCBub3Qgc2lnbmFsIGVycm9yIHdpdGggaXRzIGV4aXQgc3RhdHVzCisgICB3aGVuIHRoZXJlIHdhcyBubyBtYXRjaGluZyBjb25maWd1cmF0aW9uLgorCisgKiBUaGUgIi0tbG9jYWwtZW52LXZhcnMiIGFuZCAiLS1yZXNvbHZlLWdpdC1kaXIiIG9wdGlvbnMgb2YgImdpdAorICAgcmV2LXBhcnNlIiBmYWlsZWQgdG8gd29yayBvdXRzaWRlIGEgcmVwb3NpdG9yeSB3aGVuIHRoZSBjb21tYW5kJ3MKKyAgIG9wdGlvbiBwYXJzaW5nIHdhcyByZXdyaXR0ZW4gaW4gMS44LjUgZXJhLgorCisgKiAiZ2l0IGluZGV4LXBhY2sgLS1rZWVwWz08bXNnPl0gcGFjay0kbmFtZS5wYWNrIiBzaW1wbHkgZGlkIG5vdCB3b3JrLgorCisgKiBGZXRjaGluZyBvZiBoaXN0b3J5IGJ5IG5hbWluZyBhIGNvbW1pdCBvYmplY3QgbmFtZSBkaXJlY3RseSBkaWRuJ3QKKyAgIHdvcmsgYWNyb3NzIHJlbW90ZS1jdXJsIHRyYW5zcG9ydC4KKworICogQSBzbWFsbCBtZW1vcnkgbGVhayBpbiBhbiBlcnJvciBjb2RlcGF0aCBoYXMgYmVlbiBwbHVnZ2VkIGluIHhkaWZmCisgICBjb2RlLgorCisgKiBzdHJidWZfZ2V0d2hvbGVsaW5lKCkgZGlkIG5vdCBOVUwtdGVybWluYXRlIHRoZSBidWZmZXIgb24gY2VydGFpbgorICAgY29ybmVyIGNhc2VzIGluIGl0cyBlcnJvciBjb2RlcGF0aC4KKworICogImdpdCBtZXJnZXRvb2wiIGRpZCBub3Qgd29yayB3ZWxsIHdpdGggY29uZmxpY3RzIHRoYXQgYm90aCBzaWRlcworICAgZGVsZXRlZC4KKworICogImdpdCBzZW5kLWVtYWlsIiBoYWQgdHJvdWJsZSBwYXJzaW5nIGFsaWFzIGZpbGUgaW4gbWFpbHJjIGZvcm1hdAorICAgd2hlbiBsaW5lcyBpbiBpdCBoYWQgdHJhaWxpbmcgd2hpdGVzcGFjZXMgb24gdGhlbS4KKworICogV2hlbiAiZ2l0IG1lcmdlIC0tc3F1YXNoIiBzdG9wcGVkIGR1ZSB0byBjb25mbGljdCwgdGhlIGNvbmNsdWRpbmcKKyAgICJnaXQgY29tbWl0IiBmYWlsZWQgdG8gcmVhZCBpbiB0aGUgU1FVQVNIX01TRyB0aGF0IHNob3dzIHRoZSBsb2cKKyAgIG1lc3NhZ2VzIGZyb20gYWxsIHRoZSBzcXVhc2hlZCBjb21taXRzLgorCisgKiAiZ2l0IG1lcmdlIEZFVENIX0hFQUQiIGRlcmVmZXJlbmNlZCBOVUxMIHBvaW50ZXIgd2hlbiBtZXJnaW5nCisgICBub3RoaW5nIGludG8gYW4gdW5ib3JuIGhpc3RvcnkgKHdoaWNoIGlzIGFyZ3VhYmx5IHVudXN1YWwgdXNhZ2UsCisgICB3aGljaCBwZXJoYXBzIHdhcyB0aGUgcmVhc29uIHdoeSBub2JvZHkgbm90aWNlZCBpdCkuCisKKyAqIFdoZW4gImdpdCB3b3JrdHJlZSIgZmVhdHVyZSBpcyBpbiB1c2UsICJnaXQgYnJhbmNoIC1kIiBhbGxvd2VkCisgICBkZWxldGlvbiBvZiBhIGJyYW5jaCB0aGF0IGlzIGNoZWNrZWQgb3V0IGluIGFub3RoZXIgd29ya3RyZWUsCisgICB3aGljaCB3YXMgd3JvbmcuCisKKyAqIFdoZW4gImdpdCB3b3JrdHJlZSIgZmVhdHVyZSBpcyBpbiB1c2UsICJnaXQgYnJhbmNoIC1tIiByZW5hbWVkIGEKKyAgIGJyYW5jaCB0aGF0IGlzIGNoZWNrZWQgb3V0IGluIGFub3RoZXIgd29ya3RyZWUgd2l0aG91dCBhZGp1c3RpbmcKKyAgIHRoZSBIRUFEIHN5bWJvbGljIHJlZiBmb3IgdGhlIHdvcmt0cmVlLgorCisgKiAiZ2l0IGRpZmYgLU0iIHVzZWQgdG8gd29yayBiZXR0ZXIgd2hlbiB0d28gb3JpZ2luYWxseSBpZGVudGljYWwKKyAgIGZpbGVzIEEgYW5kIEIgZ290IHJlbmFtZWQgdG8gWC9BIGFuZCBYL0IgYnkgcGFpcmluZyBBIHRvIFgvQSBhbmQgQgorICAgdG8gWC9CLCBidXQgdGhpcyB3YXMgYnJva2VuIGluIHRoZSAyLjAgdGltZWZyYW1lLgorCisgKiAiZ2l0IHNlbmQtcGFjayAtLWFsbCA8dGhlcmU+IiB3YXMgYnJva2VuIHdoZW4gaXRzIGNvbW1hbmQgbGluZQorICAgb3B0aW9uIHBhcnNpbmcgd2FzIHdyaXR0ZW4gaW4gdGhlIDIuNiB0aW1lZnJhbWUuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIC0taGVscCIgc2hvd2VkIGAtc2AgYW5kIGAtLW5vLXBhdGNoYCBhcyBpZiB0aGVzZQorICAgYXJlIHZhbGlkIG9wdGlvbnMgdG8gdGhlIGNvbW1hbmQuICBXZSBhbHJlYWR5IGhpZGUgYC0tcGF0Y2hgIG9wdGlvbgorICAgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbiwgYmVjYXVzZSBmb3JtYXQtcGF0Y2ggaXMgYWJvdXQgc2hvd2luZyB0aGUKKyAgIGRpZmYsIGFuZCB0aGUgZG9jdW1lbnRhdGlvbiBub3cgaGlkZXMgdGhlc2Ugb3B0aW9ucyBhcyB3ZWxsLgorCisgKiBXaGVuIHJ1bm5pbmcgImdpdCBibGFtZSAkcGF0aCIgd2l0aCB1bm5vcm1hbGl6ZWQgZGF0YSBpbiB0aGUgaW5kZXgKKyAgIGZvciB0aGUgcGF0aCwgdGhlIGRhdGEgaW4gdGhlIHdvcmtpbmcgdHJlZSB3YXMgYmxhbWVkLCBldmVuIHRob3VnaAorICAgImdpdCBhZGQiIHdvdWxkIG5vdCBoYXZlIGNoYW5nZWQgd2hhdCBpcyBhbHJlYWR5IGluIHRoZSBpbmRleCwgZHVlCisgICB0byAic2FmZSBjcmxmIiB0aGF0IGRpc2FibGVzIHRoZSBsaW5lLWVuZCBjb252ZXJzaW9uLiAgSXQgaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogQSBjaGFuZ2UgYmFjayBpbiB2ZXJzaW9uIDIuNyB0byAiZ2l0IGJyYW5jaCIgYnJva2UgZGlzcGxheSBvZiBhCisgICBzeW1ib2xpYyByZWYgaW4gYSBub24tc3RhbmRhcmQgcGxhY2UgaW4gdGhlIHJlZnMvIGhpZXJhcmNoeSAod2UKKyAgIGV4cGVjdCBzeW1ib2xpYyByZWZzIHRvIGFwcGVhciBpbiByZWZzL3JlbW90ZXMvKi9IRUFEIHRvIHBvaW50IGF0CisgICB0aGUgcHJpbWFyeSBicmFuY2ggdGhlIHJlbW90ZSBoYXMsIGFuZCBhcyAuZ2l0L0hFQUQgdG8gcG9pbnQgYXQgdGhlCisgICBicmFuY2ggd2UgbG9jYWxseSBjaGVja2VkIG91dCkuCisKKyAqIEEgcGFydGlhbCByZXdyaXRlIG9mICJnaXQgc3VibW9kdWxlIiBpbiB0aGUgMi43IHRpbWVmcmFtZSBjaGFuZ2VkCisgICB0aGUgd2F5IHRoZSBnaXRkaXI6IHBvaW50ZXIgaW4gdGhlIHN1Ym1vZHVsZXMgcG9pbnQgYXQgdGhlIHJlYWwKKyAgIHJlcG9zaXRvcnkgbG9jYXRpb24gdG8gdXNlIGFic29sdXRlIHBhdGhzIGJ5IGFjY2lkZW50LiAgVGhpcyBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGNvbW1pdCIgbWlzYmVoYXZlZCBpbiBhIGZldyBtaW5vciB3YXlzIHdoZW4gYW4gZW1wdHkgbWVzc2FnZQorICAgaXMgZ2l2ZW4gdmlhIC1tICcnLCBhbGwgb2Ygd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBTdXBwb3J0IGZvciBDUkFNLU1ENSBhdXRoZW50aWNhdGlvbiBtZXRob2QgaW4gImdpdCBpbWFwLXNlbmQiIGRpZAorICAgbm90IHdvcmsgd2VsbC4KKworICogVXBjb21pbmcgT3BlblNTTCAxLjEuMCB3aWxsIGJyZWFrIGNvbXBpbGF0aW9uIGJ5IHVwZGF0aW5nIGEgZmV3IEFQSQorICAgZWxlbWVudHMgd2UgdXNlIGluIGltYXAtc2VuZCwgd2hpY2ggaGFzIGJlZW4gYWRqdXN0ZWQgZm9yIHRoZSBjaGFuZ2UuCisKKyAqIFRoZSBzb2NrczU6Ly8gcHJveHkgc3VwcG9ydCBhZGRlZCBiYWNrIGluIDIuNi40IGRheXMgd2FzIG5vdCBhd2FyZQorICAgdGhhdCBzb2NrczVoOi8vIHByb3hpZXMgYmVoYXZlIGRpZmZlcmVudGx5IGZyb20gc29ja3M1Oi8vIHByb3hpZXMuCisKKyAqICJnaXQgY29uZmlnIiBoYWQgYSBjb2RlcGF0aCB0aGF0IHRyaWVkIHRvIHBhc3MgYSBOVUxMIHRvCisgICBwcmludGYoIiVzIiksIHdoaWNoIG5vYm9keSBzZWVtcyB0byBoYXZlIG5vdGljZWQuCisKKyAqIE9uIEN5Z3dpbiwgb2JqZWN0IGNyZWF0aW9uIHVzZXMgdGhlICJjcmVhdGUgYSB0ZW1wb3JhcnkgYW5kIHRoZW4KKyAgIHJlbmFtZSBpdCB0byB0aGUgZmluYWwgbmFtZSIgcGF0dGVybiwgbm90ICJjcmVhdGUgYSB0ZW1wb3JhcnksCisgICBoYXJkbGluayBpdCB0byB0aGUgZmluYWwgbmFtZSBhbmQgdGhlbiB1bmxpbmsgdGhlIHRlbXBvcmFyeSIKKyAgIHBhdHRlcm4uCisKKyAgIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHVzZSBHaXQgb24gV2luZG93cyBzaGFyZWQgZGlyZWN0b3JpZXMsIGFuZCBpcworICAgYWxyZWFkeSBlbmFibGVkIGZvciB0aGUgTWluR1cgYW5kIHBsYWluIFdpbmRvd3MgYnVpbGRzLiAgSXQgYWxzbworICAgaGFzIGJlZW4gdXNlZCBpbiBDeWd3aW4gcGFja2FnZWQgdmVyc2lvbnMgb2YgR2l0IGZvciBxdWl0ZSBhIHdoaWxlLgorICAgU2VlIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDE2MDQxOTA5MTA1NS5HRjIzNDVAZGlud29vZGllLm9yZy8KKworICogIm1lcmdlLW9jdG9wdXMiIHN0cmF0ZWd5IGRpZCBub3QgZW5zdXJlIHRoYXQgdGhlIGluZGV4IGlzIGNsZWFuCisgICB3aGVuIG1lcmdlIGJlZ2lucy4KKworICogV2hlbiAiZ2l0IG1lcmdlIiBub3RpY2VzIHRoYXQgdGhlIG1lcmdlIGNhbiBiZSByZXNvbHZlZCBwdXJlbHkgYXQKKyAgIHRoZSB0cmVlIGxldmVsICh3aXRob3V0IGhhdmluZyB0byBtZXJnZSBibG9icykgYW5kIHRoZSByZXN1bHRpbmcKKyAgIHRyZWUgaGFwcGVucyB0byBhbHJlYWR5IGV4aXN0IGluIHRoZSBvYmplY3Qgc3RvcmUsIGl0IGZvcmdvdCB0bworICAgdXBkYXRlIHRoZSBpbmRleCwgd2hpY2ggbGVmdCBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgdGhhdCB3b3VsZAorICAgYnJlYWsgbGF0ZXIgb3BlcmF0aW9ucy4KKworICogImdpdCBzdWJtb2R1bGUiIHJlcG9ydHMgdGhlIHBhdGhzIG9mIHN1Ym1vZHVsZXMgdGhlIGNvbW1hbmQKKyAgIHJlY3Vyc2VzIGludG8sIGJ1dCB0aGVzZSBwYXRocyB3ZXJlIGluY29ycmVjdGx5IHJlcG9ydGVkIHdoZW4KKyAgIHRoZSBjb21tYW5kIHdhcyBub3QgcnVuIGZyb20gdGhlIHJvb3QgbGV2ZWwgb2YgdGhlIHN1cGVycHJvamVjdC4KKworICogVGhlICJ1c2VyLnVzZUNvbmZpZ09ubHkiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbWFrZXMgaXQgYW4gZXJyb3IKKyAgIGlmIHVzZXJzIGRvIG5vdCBleHBsaWNpdGx5IHNldCB1c2VyLm5hbWUgYW5kIHVzZXIuZW1haWwuICBIb3dldmVyLAorICAgaXRzIGNoZWNrIHdhcyBub3QgZG9uZSBlYXJseSBlbm91Z2ggYW5kIGFsbG93ZWQgYW5vdGhlciBlcnJvciB0bworICAgdHJpZ2dlciwgcmVwb3J0aW5nIHRoYXQgdGhlIGRlZmF1bHQgdmFsdWUgd2UgZ3Vlc3NlZCBmcm9tIHRoZQorICAgc3lzdGVtIHNldHRpbmcgd2FzIHVudXNhYmxlLiAgVGhpcyB3YXMgYSBzdWJvcHRpbWFsIGVuZC11c2VyCisgICBleHBlcmllbmNlIGFzIHdlIHdhbnQgdGhlIHVzZXJzIHRvIHNldCB1c2VyLm5hbWUvdXNlci5lbWFpbCB3aXRob3V0CisgICByZWx5aW5nIG9uIHRoZSBhdXRvLWRldGVjdGlvbiBhdCBhbGwuCisKKyAqICJnaXQgbXYgb2xkIG5ldyIgZGlkIG5vdCBhZGp1c3QgdGhlIHBhdGggZm9yIGEgc3VibW9kdWxlIHRoYXQgbGl2ZXMKKyAgIGFzIGEgc3ViZGlyZWN0b3J5IGluc2lkZSBvbGQvIGRpcmVjdG9yeSBjb3JyZWN0bHkuCisKKyAqICJnaXQgcmVwbGFjZSAtZSIgZGlkIG5vdCBob25vdXIgImNvcmUuZWRpdG9yIiBjb25maWd1cmF0aW9uLgorCisgKiAiZ2l0IHB1c2giIGZyb20gYSBjb3JydXB0IHJlcG9zaXRvcnkgdGhhdCBhdHRlbXB0cyB0byBwdXNoIGEgbGFyZ2UKKyAgIG51bWJlciBvZiByZWZzIGRlYWRsb2NrZWQ7IHRoZSB0aHJlYWQgdG8gcmVsYXkgcmVqZWN0aW9uIG5vdGljZXMKKyAgIGZvciB0aGVzZSByZWYgdXBkYXRlcyBibG9ja2VkIG9uIHdyaXRpbmcgdGhlbSB0byB0aGUgbWFpbiB0aHJlYWQsCisgICBhZnRlciB0aGUgbWFpbiB0aHJlYWQgYXQgdGhlIHJlY2VpdmluZyBlbmQgbm90aWNlcyB0aGF0IHRoZSBwdXNoCisgICBmYWlsZWQgYW5kIGRlY2lkZXMgbm90IHRvIHJlYWQgdGhlc2Ugbm90aWNlcyBhbmQgcmV0dXJuIGEgZmFpbHVyZS4KKworICogbW1hcCBlbXVsYXRpb24gb24gV2luZG93cyBoYXMgYmVlbiBvcHRpbWl6ZWQgYW5kIHdvcmsgYmV0dGVyIHdpdGhvdXQKKyAgIGNvbnN1bWluZyBwYWdpbmcgc3RvcmUgd2hlbiBub3QgbmVlZGVkLgorCisgKiBBIHF1ZXN0aW9uIGJ5ICJnaXQgc2VuZC1lbWFpbCIgdG8gYXNrIHRoZSBpZGVudGl0eSBvZiB0aGUgc2VuZGVyCisgICBoYXMgYmVlbiB1cGRhdGVkLgorCisgKiBVSSBjb25zaXN0ZW5jeSBpbXByb3ZlbWVudHMgZm9yICJnaXQgbWVyZ2V0b29sIi4KKworICogImdpdCByZWJhc2UgLW0iIGNvdWxkIGJlIGFza2VkIHRvIHJlYmFzZSBhbiBlbnRpcmUgYnJhbmNoIHN0YXJ0aW5nCisgICBmcm9tIHRoZSByb290LCBidXQgZmFpbGVkIGJ5IGFzc3VtaW5nIHRoYXQgdGhlcmUgYWx3YXlzIGlzIGEgcGFyZW50CisgICBjb21taXQgdG8gdGhlIGZpcnN0IGNvbW1pdCBvbiB0aGUgYnJhbmNoLgorCisgKiBGaXggYSBicm9rZW4gInA0IGxmcyIgdGVzdC4KKworICogUmVjZW50IHVwZGF0ZSB0byBHaXQgTEZTIGJyb2tlICJnaXQgcDQiIGJ5IGNoYW5naW5nIHRoZSBvdXRwdXQgZnJvbQorICAgaXRzICJsZnMgcG9pbnRlciIgc3ViY29tbWFuZC4KKworICogImdpdCBmZXRjaCIgdGVzdCB0NTUxMCB3YXMgZmxha3kgd2hpbGUgcnVubmluZyBhIChmb3JjZWQpIGF1dG9tYWdpYworICAgZ2FyYmFnZSBjb2xsZWN0aW9uLgorCisgKiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMgdG8gaGVscCBjb250cmlidXRvcnMgc2V0dGluZyB1cCBUcmF2aXMgQ0kKKyAgIHRlc3QgZm9yIHRoZWlyIHBhdGNoZXMuCisKKyAqIFNvbWUgbXVsdGktYnl0ZSBlbmNvZGluZyBjYW4gaGF2ZSBhIGJhY2tzbGFzaCBieXRlIGFzIGEgbGF0ZXIgcGFydAorICAgb2Ygb25lIGxldHRlciwgd2hpY2ggd291bGQgY29uZnVzZSAiaGlnaGxpZ2h0IiBmaWx0ZXIgdXNlZCBpbgorICAgZ2l0d2ViLgorCisgKiAiZ2l0IGNvbW1pdC10cmVlIiBwbHVtYmluZyBjb21tYW5kIHJlcXVpcmVkIHRoZSB1c2VyIHRvIGFsd2F5cyBzaWduCisgICBpdHMgcmVzdWx0IHdoZW4gdGhlIHVzZXIgc2V0cyB0aGUgY29tbWl0LmdwZ3NpZ24gY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUsIHdoaWNoIHdhcyBhbiBhbmNpZW50IG1pc3Rha2UuICBSZXdvcmsgImdpdCByZWJhc2UiIHRoYXQKKyAgIHJlbGllZCBvbiB0aGlzIG1pc3Rha2Ugc28gdGhhdCBpdCByZWFkcyBjb21taXQuZ3Bnc2lnbiBhbmQgcGFzcyAob3IKKyAgIG5vdCBwYXNzKSB0aGUgLVMgb3B0aW9uIHRvICJnaXQgY29tbWl0LXRyZWUiIHRvIGtlZXAgdGhlIGVuZC11c2VyCisgICBleHBlY3RhdGlvbiB0aGUgc2FtZSwgd2hpbGUgdGVhY2hpbmcgImdpdCBjb21taXQtdHJlZSIgdG8gaWdub3JlCisgICB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIFRoaXMgd2lsbCBzdG9wIHJlcXVpcmluZyB0aGUgdXNlcnMgdG8KKyAgIHNpZ24gY29tbWl0IG9iamVjdHMgdXNlZCBpbnRlcm5hbGx5IGFzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZgorICAgImdpdCBzdGFzaCIuCisKKyAqICJodHRwLmNvb2tpZUZpbGUiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2xlYXJseSB3YW50cyBhIHBhdGhuYW1lLAorICAgYnV0IHdlIGZvcmdvdCB0byB0cmVhdCBpdCBhcyBzdWNoIGJ5IGUuZy4gYXBwbHlpbmcgdGlsZGUgZXhwYW5zaW9uLgorCisgKiBDb25zb2xpZGF0ZSBkZXNjcmlwdGlvbiBvZiB0aWxkZS1leHBhbnNpb24gdGhhdCBpcyBkb25lIHRvCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0aGF0IHRha2UgcGF0aG5hbWUgdG8gYSBzaW5nbGUgcGxhY2UuCisKKyAqIENvcnJlY3QgZmF1bHR5IHJlY29tbWVuZGF0aW9uIHRvIHVzZSAiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgLiIgd2hlbgorICAgZGUtaW5pdGlhbGlzaW5nIGFsbCBzdWJtb2R1bGVzLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gYSBzdHJhbmdlCisgICBlcnJvciBtZXNzYWdlIGluIGEgcGF0aG9sb2dpY2FsIGNvcm5lciBjYXNlLgorCisgKiBNYW55ICdsaW5rZ2l0OjxnaXQgZG9jdW1lbnRhdGlvbiBwYWdlPicgcmVmZXJlbmNlcyB3ZXJlIGJyb2tlbiwKKyAgIHdoaWNoIGFyZSBhbGwgZml4ZWQgd2l0aCB0aGlzLgorCisgKiAiZ2l0IHJlcmVyZSIgY2FuIGdldCBjb25mdXNlZCBieSBjb25mbGljdCBtYXJrZXJzIGRlbGliZXJhdGVseSBsZWZ0CisgICBieSB0aGUgaW5uZXIgbWVyZ2Ugc3RlcCwgYmVjYXVzZSB0aGV5IGFyZSBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tCisgICB0aGUgcmVhbCBjb25mbGljdCBtYXJrZXJzIGxlZnQgYnkgdGhlIG91dGVybW9zdCBtZXJnZSB3aGljaCBhcmUKKyAgIHdoYXQgdGhlIGVuZCB1c2VyIGFuZCAicmVyZXJlIiBuZWVkIHRvIGxvb2sgYXQuICBUaGlzIHdhcyBmaXhlZCBieQorICAgbWFraW5nIHRoZSBjb25mbGljdCBtYXJrZXJzIGxlZnQgYnkgdGhlIGlubmVyIG1lcmdlcyBhIGJpdCBsb25nZXIuCisgICAobWVyZ2UgMGY5ZmQ1YyBqYy9sbC1tZXJnZS1pbnRlcm5hbCBsYXRlciB0byBtYWludCkuCisKKyAqIENJIHRlc3Qgd2FzIHRhdWdodCB0byBidWlsZCBkb2N1bWVudGF0aW9uIHBhZ2VzLgorCisgKiAiZ2l0IGZzY2siIGxlYXJuZWQgdG8gY2F0Y2ggTlVMIGJ5dGUgaW4gYSBjb21taXQgb2JqZWN0IGFzCisgICBwb3RlbnRpYWwgZXJyb3IgYW5kIHdhcm4uCisKKyAqIFBvcnRhYmlsaXR5IGVuaGFuY2VtZW50IGZvciAicmViYXNlIC1pIiB0byBoZWxwIHBsYXRmb3JtcyB3aG9zZQorICAgc2hlbGwgZG9lcyBub3QgbGlrZSAiZm9yIGkgaW4gPGVtcHR5PiIgKHdoaWNoIGlzIG5vdCBQT1NJWC1rb3NoZXIpLgorCisgKiBPbiBXaW5kb3dzLCAuZ2l0IGFuZCBvcHRpb25hbGx5IGFueSBmaWxlcyB3aG9zZSBuYW1lIHN0YXJ0cyB3aXRoIGEKKyAgIGRvdCBhcmUgbm93IG1hcmtlZCBhcyBoaWRkZW4sIHdpdGggYSBjb3JlLmhpZGVEb3RGaWxlcyBrbm9iIHRvCisgICBjdXN0b21pemUgdGhpcyBiZWhhdmlvdXIuCisKKyAqIERvY3VtZW50YXRpb24gZm9yICJnaXQgbWVyZ2UgLS12ZXJpZnktc2lnbmF0dXJlcyIgaGFzIGJlZW4gdXBkYXRlZAorICAgdG8gY2xhcmlmeSB0aGF0IHRoZSBzaWduYXR1cmUgb2Ygb25seSB0aGUgY29tbWl0IGF0IHRoZSB0aXAgaXMKKyAgIHZlcmlmaWVkLiAgQWxzbyB0aGUgcGhyYXNpbmcgdXNlZCBmb3Igc2lnbmF0dXJlIGFuZCBrZXkgdmFsaWRpdHkgaXMKKyAgIGFkanVzdGVkIHRvIGFsaWduIHdpdGggdGhhdCB1c2VkIGJ5IE9wZW5QR1AuCisKKyAqIEEgY291cGxlIG9mIGJ1Z3MgYXJvdW5kIGNvcmUuYXV0b2NybGYgaGF2ZSBiZWVuIGZpeGVkLgorCisgKiBNYW55IGNvbW1hbmRzIG5vcm1hbGl6ZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGZyb20gTkZEIHRvIE5GQworICAgdmFyaWFudCBvZiBVVEYtOCBvbiBPU1gsIGJ1dCBjb21tYW5kcyBpbiB0aGUgImRpZmYiIGZhbWlseSBkaWQKKyAgIG5vdCwgY2F1c2luZyAiZ2l0IGRpZmYgJHBhdGgiIHRvIGNvbXBsYWluIHRoYXQgbm8gc3VjaCBwYXRoIGlzCisgICBrbm93biB0byBHaXQuICBUaGV5IGhhdmUgYmVlbiB0YXVnaHQgdG8gZG8gdGhlIG5vcm1hbGl6YXRpb24uCisKKyAqICJnaXQgZGlmZnRvb2wiIGxlYXJuZWQgdG8gaGFuZGxlIHVubWVyZ2VkIHBhdGhzIGNvcnJlY3RseSBpbgorICAgZGlyLWRpZmYgbW9kZS4KKworICogVGhlICJhcmUgd2UgdGFsa2luZyB3aXRoIFRUWSwgZG9pbmcgYW4gaW50ZXJhY3RpdmUgc2Vzc2lvbj8iCisgICBkZXRlY3Rpb24gaGFzIGJlZW4gdXBkYXRlZCB0byB3b3JrIGJldHRlciBmb3IgIkdpdCBmb3IgV2luZG93cyIuCisKKyAqIFdlIGZvcmdvdCB0byBhZGQgImdpdCBsb2cgLS1kZWNvcmF0ZT1hdXRvIiB0byBkb2N1bWVudGF0aW9uIHdoZW4gd2UKKyAgIGFkZGVkIHRoZSBmZWF0dXJlIGJhY2sgaW4gdjIuMS4wIHRpbWVmcmFtZS4KKyAgIChtZXJnZSA0NjJjYmI0IHJqL2xvZy1kZWNvcmF0ZS1hdXRvIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcyIgd291bGQgb3ZlcndyaXRlIHRoZSBleGlzdGluZyBtYXJrcworICAgZmlsZSBldmVuIHdoZW4gaXQgbWFrZXMgYSBkdW1wIGZyb20gaXRzIGN1c3RvbSBkaWUgcm91dGluZS4KKyAgIFByZXZlbnQgaXQgZnJvbSBkb2luZyBzbyB3aGVuIHdlIGhhdmUgYW4gaW1wb3J0LW1hcmtzIGZpbGUgYnV0CisgICBoYXZlbid0IGZpbmlzaGVkIHJlYWRpbmcgaXQuCisgICAobWVyZ2UgZjRiZWVkNiBmYy9mYXN0LWltcG9ydC1icm9rZW4tbWFya3MtZmlsZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC1pIiwgYWZ0ZXIgaXQgZmFpbHMgdG8gYXV0by1yZXNvbHZlIHRoZSBjb25mbGljdCwgaGFkCisgICBhbiB1bm5lY2Vzc2FyeSBjYWxsIHRvICJnaXQgcmVyZXJlIiBmcm9tIGl0cyB2ZXJ5IGVhcmx5IGRheXMsIHdoaWNoCisgICB3YXMgc3BvdHRlZCByZWNlbnRseTsgdGhlIGNhbGwgaGFzIGJlZW4gcmVtb3ZlZC4KKyAgIChtZXJnZSA3MDYzNjkzIGpzL3JlYmFzZS1pLWRlZHVwLWNhbGwtdG8tcmVyZXJlIGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgbWlub3IgY2xlYW4tdXBzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMKKyAgIChtZXJnZSBjZDgyYjdhIHBhL2NoZXJyeS1waWNrLWRvYy10eXBvIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyYmI3M2FlIHJzL3BhdGNoLWlkLXVzZS1za2lwLXByZWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYWEyMGNiYyBycy9hcHBseS1uYW1lLXRlcm1pbmF0ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZmUxN2ZjMCBqYy90MjMwMC1zZXR1cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTI1NmVlYyBqay9zaGVsbC1wb3J0YWJpbGl0eSBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzODM5NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4xLnR4dApAQCAtMCwwICsxLDExNyBAQAorR2l0IHYyLjkuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuOQorLS0tLS0tLS0tLS0tLS0tLQorCisgKiBXaGVuICJnaXQgZGFlbW9uIiBpcyBydW4gd2l0aG91dCAtLVtpbml0LV10aW1lb3V0IHNwZWNpZmllZCwgYQorICAgY29ubmVjdGlvbiBmcm9tIGEgY2xpZW50IHRoYXQgc2lsZW50bHkgZ29lcyBvZmZsaW5lIGNhbiBoYW5nIGFyb3VuZAorICAgZm9yIGEgbG9uZyB0aW1lLCB3YXN0aW5nIHJlc291cmNlcy4gIFRoZSBzb2NrZXQtbGV2ZWwgS0VFUEFMSVZFIGhhcworICAgYmVlbiBlbmFibGVkIHRvIGFsbG93IHRoZSBPUyB0byBub3RpY2Ugc3VjaCBmYWlsZWQgY29ubmVjdGlvbnMuCisKKyAqIFRoZSBjb21tYW5kcyBpbiBgZ2l0IGxvZ2AgZmFtaWx5IHRha2UgJUMoYXV0bykgaW4gYSBjdXN0b20gZm9ybWF0CisgICBzdHJpbmcuICBUaGlzIHVuY29uZGl0aW9uYWxseSB0dXJuZWQgdGhlIGNvbG9yIG9uLCBpZ25vcmluZworICAgLS1uby1jb2xvciBvciB3aXRoIC0tY29sb3I9YXV0byB3aGVuIHRoZSBvdXRwdXQgaXMgbm90IGNvbm5lY3RlZCB0bworICAgYSB0dHk7IHRoaXMgd2FzIGNvcnJlY3RlZCB0byBtYWtlIHRoZSBmb3JtYXQgdHJ1bHkgYmVoYXZlIGFzCisgICAiYXV0byIuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1jb3VudCIgd2hvc2Ugd2Fsay1sZW5ndGggaXMgbGltaXRlZCB3aXRoICItbiIKKyAgIG9wdGlvbiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoIHRoZSBjb3VudGluZyBvcHRpbWl6ZWQgdG8gbG9vayBhdCB0aGUKKyAgIGJpdG1hcCBpbmRleC4KKworICogImdpdCBzaG93IC1XIiAoZXh0ZW5kIGh1bmtzIHRvIGNvdmVyIHRoZSBlbnRpcmUgZnVuY3Rpb24sIGRlbGltaXRlZAorICAgYnkgbGluZXMgdGhhdCBtYXRjaCB0aGUgImZ1bmNuYW1lIiBwYXR0ZXJuKSB1c2VkIHRvIHNob3cgdGhlIGVudGlyZQorICAgZmlsZSB3aGVuIGEgY2hhbmdlIGFkZGVkIGFuIGVudGlyZSBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLAorICAgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIFRoZSBkb2N1bWVudGF0aW9uIHNldCBoYXMgYmVlbiB1cGRhdGVkIHNvIHRoYXQgbGl0ZXJhbCBjb21tYW5kcywKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGNvbnNpc3RlbnRseQorICAgdHlwZXNldCBpbiBmaXhlZC13aWR0aCBmb250IGFuZCBib2xkIGluIG1hbnBhZ2VzLgorCisgKiAiZ2l0IHN2biBwcm9wc2V0IiBzdWJjb21tYW5kIHRoYXQgd2FzIGFkZGVkIGluIDIuMyBkYXlzIGlzCisgICBkb2N1bWVudGVkIG5vdy4KKworICogVGhlIGRvY3VtZW50YXRpb24gdHJpZXMgdG8gY29uc2lzdGVudGx5IHNwZWxsICJHUEciOyB3aGVuCisgICByZWZlcnJpbmcgdG8gdGhlIHNwZWNpZmljIHByb2dyYW0gbmFtZSwgImdwZyIgaXMgdXNlZC4KKworICogImdpdCByZWZsb2ciIHN0b3BwZWQgdXBvbiBzZWVpbmcgYW4gZW50cnkgdGhhdCBkZW5vdGVzIGEgYnJhbmNoCisgICBjcmVhdGlvbiBldmVudCAoYWthICJ1bmJvcm4iKSwgd2hpY2ggbWFkZSBpdCBhcHBlYXIgYXMgaWYgdGhlCisgICByZWZsb2cgd2FzIHRydW5jYXRlZC4KKworICogVGhlIGdpdC1wcm9tcHQgc2NyaXB0bGV0IChpbiBjb250cmliLykgd2FzIG5vdCBmcmllbmRseSB3aXRoIHRob3NlCisgICB3aG8gdXNlcyAic2V0IC11Iiwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIEEgY29kZXBhdGggdGhhdCB1c2VkIGFsbG9jYSgzKSB0byBwbGFjZSBhbiB1bmJvdW5kZWQgYW1vdW50IG9mIGRhdGEKKyAgIG9uIHRoZSBzdGFjayBoYXMgYmVlbiB1cGRhdGVkIHRvIGF2b2lkIGRvaW5nIHNvLgorCisgKiAiZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNobW9kPSt4IGZpbGUiIG1heSBiZSB1c2FibGUgYXMgYW4gZXNjYXBlCisgICBoYXRjaCwgYnV0IG5vdCBhIGZyaWVuZGx5IHRoaW5nIHRvIGZvcmNlIGZvciBwZW9wbGUgd2hvIGRvIG5lZWQgdG8KKyAgIHVzZSBpdCByZWd1bGFybHkuICAiZ2l0IGFkZCAtLWNobW9kPSt4IGZpbGUiIGNhbiBiZSB1c2VkIGluc3RlYWQuCisKKyAqIEJ1aWxkIGltcHJvdmVtZW50cyBmb3IgZ25vbWUta2V5cmluZyAoaW4gY29udHJpYi8pCisKKyAqICJnaXQgc3RhdHVzIiB1c2VkIHRvIHNheSAid29ya2luZyBkaXJlY3RvcnkiIHdoZW4gaXQgbWVhbnQgIndvcmtpbmcKKyAgIHRyZWUiLgorCisgKiBDb21tZW50cyBhYm91dCBtaXNiZWhhdmluZyBGcmVlQlNEIHNoZWxscyBoYXZlIGJlZW4gY2xhcmlmaWVkIHdpdGgKKyAgIHRoZSB2ZXJzaW9uIG51bWJlciAoOS54IGFuZCBiZWZvcmUgYXJlIGJyb2tlbiwgbmV3ZXIgb25lcyBhcmUgT0spLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIEEiIHdvcmtlZCBvbiBhbiB1bmJvcm4gYnJhbmNoLCBidXQgImdpdAorICAgY2hlcnJ5LXBpY2sgQS4uQiIgZGlkbid0LgorCisgKiAiZ2l0IGFkZCAtaS8tcCIgbGVhcm5lZCB0byBob25vciBkaWZmLmNvbXBhY3Rpb25IZXVyaXN0aWMKKyAgIGV4cGVyaW1lbnRhbCBrbm9iLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiB3b3JrIG9uIHRoZSBzYW1lIGh1bmsgc3BsaXQKKyAgIGFzICJnaXQgZGlmZiIgb3V0cHV0LgorCisgKiAibG9nIC0tZ3JhcGggLS1mb3JtYXQ9IiBsZWFybmVkIHRoYXQgIiU+fChOKSIgc3BlY2lmaWVzIHRoZSB3aWR0aAorICAgcmVsYXRpdmUgdG8gdGhlIHRlcm1pbmFsJ3MgbGVmdCBlZGdlLCBub3QgcmVsYXRpdmUgdG8gdGhlIGFyZWEgdG8KKyAgIGRyYXcgdGV4dCB0aGF0IGlzIHRvIHRoZSByaWdodCBvZiB0aGUgYW5jZXN0cnktZ3JhcGggc2VjdGlvbi4gIEl0CisgICBhbHNvIG5vdyBhY2NlcHRzIG5lZ2F0aXZlIE4gdGhhdCBtZWFucyB0aGUgY29sdW1uIGxpbWl0IGlzIHJlbGF0aXZlCisgICB0byB0aGUgcmlnaHQgYm9yZGVyLgorCisgKiBUaGUgb3duZXJzaGlwIHJ1bGUgZm9yIHRoZSBwaWVjZSBvZiBtZW1vcnkgdGhhdCBob2xkIHJlZmVyZW5jZXMgdG8KKyAgIGJlIGZldGNoZWQgaW4gImdpdCBmZXRjaCIgd2FzIHNjcmV3eSwgd2hpY2ggaGFzIGJlZW4gY2xlYW5lZCB1cC4KKworICogImdpdCBiaXNlY3QiIG1ha2VzIGFuIGludGVybmFsIGNhbGwgdG8gImdpdCBkaWZmLXRyZWUiIHdoZW4KKyAgIGJpc2VjdGlvbiBmaW5kcyB0aGUgY3VscHJpdCwgYnV0IHRoaXMgY2FsbCBkaWQgbm90IGluaXRpYWxpemUgdGhlCisgICBkYXRhIHN0cnVjdHVyZSB0byBwYXNzIHRvIHRoZSBkaWZmLXRyZWUgQVBJIGNvcnJlY3RseS4KKworICogRm9ybWF0cyBvZiB0aGUgdmFyaW91cyBkYXRhIChhbmQgaG93IHRvIHZhbGlkYXRlIHRoZW0pIHdoZXJlIHdlIHVzZQorICAgR1BHIHNpZ25hdHVyZSBoYXZlIGJlZW4gZG9jdW1lbnRlZC4KKworICogRml4IGFuIHVuaW50ZW5kZWQgcmVncmVzc2lvbiBpbiB2Mi45IHRoYXQgYnJlYWtzICJjbG9uZSAtLWRlcHRoIgorICAgdGhhdCByZWN1cnNlcyBkb3duIHRvIHN1Ym1vZHVsZXMgYnkgZm9yY2luZyB0aGUgc3VibW9kdWxlcyB0byBhbHNvCisgICBiZSBjbG9uZWQgc2hhbGxvd2x5LCB3aGljaCBtYW55IHNlcnZlciBpbnN0YW5jZXMgdGhhdCBob3N0IHVwc3RyZWFtCisgICBvZiB0aGUgc3VibW9kdWxlcyBhcmUgbm90IHByZXBhcmVkIGZvci4KKworICogRml4IHVubmVjZXNzYXJpbHkgd2FzdGUgaW4gdGhlIGlkaW9tYXRpYyB1c2Ugb2YgJzogJHtWQVI9ZGVmYXVsdH0nCisgICB0byBzZXQgdGhlIGRlZmF1bHQgdmFsdWUsIHdpdGhvdXQgZW5jbG9zaW5nIGl0IGluIGRvdWJsZSBxdW90ZXMuCisKKyAqIFNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSBoYWQgbm9uLUFOU0kgc3RyaWN0IGRlY2xhcmF0aW9ucyBvZiBDCisgICBmdW5jdGlvbnMgdGhhdCBkbyBub3QgdGFrZSBhbnkgcGFyYW1ldGVycywgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogVGhlIGludGVybmFsIGNvZGUgdXNlZCB0byBzaG93IGxvY2FsIHRpbWV6b25lIG9mZnNldCBpcyBub3QKKyAgIHByZXBhcmVkIHRvIGhhbmRsZSB0aW1lc3RhbXBzIGJleW9uZCB5ZWFyIDIxMDAsIGFuZCBnYXZlIGEKKyAgIGJvZ3VzIG9mZnNldCB2YWx1ZSB0byB0aGUgY2FsbGVyLiAgVXNlIGEgbW9yZSBiZW5pZ24gbG9va2luZworICAgKzAwMDAgaW5zdGVhZCBhbmQgbGV0ICJnaXQgbG9nIiBnb2luZyBpbiBzdWNoIGEgY2FzZSwgaW5zdGVhZAorICAgb2YgYWJvcnRpbmcuCisKKyAqIE9uZSBhbW9uZyBmb3VyIGludm9jYXRpb25zIG9mIHJlYWRsaW5rKDEpIGluIG91ciB0ZXN0IHN1aXRlIGhhcworICAgYmVlbiByZXdyaXR0ZW4gc28gdGhhdCB0aGUgdGVzdCBjYW4gcnVuIG9uIHN5c3RlbXMgd2l0aG91dCB0aGUKKyAgIGNvbW1hbmQgKG90aGVycyBhcmUgaW4gdmFsZ3JpbmQgdGVzdCBmcmFtZXdvcmsgYW5kIHQ5ODAyKS4KKworICogdC9wZXJmIG5lZWRzIC91c3IvYmluL3RpbWUgd2l0aCBHTlUgZXh0ZW5zaW9uOyB0aGUgaW52b2NhdGlvbiBvZiBpdAorICAgaXMgdXBkYXRlZCB0byAiZ3RpbWUiIG9uIERhcndpbi4KKworICogQSBidWcsIHdoaWNoIGNhdXNlZCAiZ2l0IHA0IiB3aGlsZSBydW5uaW5nIHVuZGVyIHZlcmJvc2UgbW9kZSB0bworICAgcmVwb3J0IHBhdGhzIHRoYXQgYXJlIG9taXR0ZWQgZHVlIHRvIGJyYW5jaCBwcmVmaXggaW5jb3JyZWN0bHksIGhhcworICAgYmVlbiBmaXhlZDsgdGhlIGNvbW1hbmQgc2FpZCAiSWdub3JpbmcgZmlsZSBvdXRzaWRlIG9mIHByZWZpeCIgZm9yCisgICBwYXRocyB0aGF0IGFyZSBfaW5zaWRlXy4KKworICogVGhlIHRvcCBsZXZlbCBkb2N1bWVudGF0aW9uICJnaXQgaGVscCBnaXQiIHN0aWxsIHBvaW50ZWQgYXQgdGhlCisgICBkb2N1bWVudGF0aW9uIHNldCBob3N0ZWQgYXQgbm93LWRlZnVuY3QgZ29vZ2xlLWNvZGUgcmVwb3NpdG9yeS4KKyAgIFVwZGF0ZSBpdCB0byBwb2ludCB0byBodHRwczovL2dpdC5naXRodWIuaW8vaHRtbGRvY3MvZ2l0Lmh0bWwKKyAgIGluc3RlYWQuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYyMDAwMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjIudHh0CkBAIC0wLDAgKzEsMTMgQEAKK0dpdCB2Mi45LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjkuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEEgZml4IG1lcmdlZCB0byB2Mi45LjEgaGFkIGEgZmV3IHRlc3RzIHRoYXQgYXJlIG5vdCBtZWFudCB0byBiZQorICAgcnVuIG9uIHBsYXRmb3JtcyB3aXRob3V0IDY0LWJpdCBsb25nLCB3aGljaCBjYXVzZWQgdW5uZWNlc3NhcnkKKyAgIHRlc3QgZmFpbHVyZXMgb24gdGhlbSBiZWNhdXNlIHdlIGRpZG4ndCBkZXRlY3QgdGhlIHBsYXRmb3JtIGFuZAorICAgc2tpcCB0aGVtLiAgVGhlc2UgdGVzdHMgYXJlIG5vdyBza2lwcGVkIG9uIHBsYXRmb3JtcyB0aGF0IHRoZXkKKyAgIGFyZSBub3QgYXBwbGljYWJsZSB0by4KKworTm8gb3RoZXIgY2hhbmdlIGlzIGluY2x1ZGVkIGluIHRoaXMgdXBkYXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDVlMDgwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMy50eHQKQEAgLTAsMCArMSwxNzAgQEAKK0dpdCB2Mi45LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjkuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIGNvbnRlbnRzIG9mIGEgY29tbWl0IG9iamVjdCBhbmQKKyAgIGZpbmRzIGl0cyBzdWJqZWN0IGxpbmUgZGlkIG5vdCBpZ25vcmUgbGVhZGluZyBibGFuayBsaW5lcywgYXMgaXMKKyAgIGNvbW1vbmx5IGRvbmUgYnkgb3RoZXIgY29kZXBhdGhzLiAgTWFrZSBpdCBpZ25vcmUgbGVhZGluZyBibGFuaworICAgbGluZXMgdG8gbWF0Y2guCisKKyAqIEdpdCBkb2VzIG5vdCBrbm93IHdoYXQgdGhlIGNvbnRlbnRzIGluIHRoZSBpbmRleCBzaG91bGQgYmUgZm9yIGEKKyAgIHBhdGggYWRkZWQgd2l0aCAiZ2l0IGFkZCAtTiIgeWV0LCBzbyAiZ2l0IGdyZXAgLS1jYWNoZWQiIHNob3VsZCBub3QKKyAgIHNob3cgaGl0cyAob3Igc2hvdyBsYWNrIG9mIGhpdHMsIHdpdGggLUwpIGluIHN1Y2ggYSBwYXRoLCBidXQgdGhhdAorICAgbG9naWMgZG9lcyBub3QgYXBwbHkgdG8gImdpdCBncmVwIiwgaS5lLiBzZWFyY2hpbmcgaW4gdGhlIHdvcmtpbmcKKyAgIHRyZWUgZmlsZXMuICBCdXQgd2UgZGlkIHNvIGJ5IG1pc3Rha2UsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCByZWJhc2UgLWkgLS1hdXRvc3Rhc2giIGRpZCBub3QgcmVzdG9yZSB0aGUgYXV0by1zdGFzaGVkIGNoYW5nZQorICAgd2hlbiB0aGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFtZW5kIC0tYWxsb3ctZW1wdHktbWVzc2FnZSAtUyIgZm9yIGEgY29tbWl0IHdpdGhvdXQKKyAgIGFueSBtZXNzYWdlIGJvZHkgY291bGQgaGF2ZSBtaXNpZGVudGlmaWVkIHdoZXJlIHRoZSBoZWFkZXIgb2YgdGhlCisgICBjb21taXQgb2JqZWN0IGVuZHMuCisKKyAqIE1vcmUgbWFyay11cCB1cGRhdGVzIHRvIHR5cGVzZXQgc3RyaW5ncyB0aGF0IGFyZSBleHBlY3RlZCB0bworICAgbGl0ZXJhbGx5IHR5cGVkIGJ5IHRoZSBlbmQgdXNlciBpbiBmaXhlZC13aWR0aCBmb250LgorCisgKiBGb3IgYSBsb25nIHRpbWUsIHdlIGNhcnJpZWQgYW4gaW4tY29kZSBjb21tZW50IHRoYXQgc2FpZCBvdXIKKyAgIGNvbG9yZWQgb3V0cHV0IHdvdWxkIHdvcmsgb25seSB3aGVuIHdlIHVzZSBmcHJpbnRmL2ZwdXRzIG9uCisgICBXaW5kb3dzLCB3aGljaCBubyBsb25nZXIgaXMgdGhlIGNhc2UgZm9yIHRoZSBwYXN0IGZldyB5ZWFycy4KKworICogImdjLmF1dG9QYWNrTGltaXQiIHdoZW4gc2V0IHRvIDEgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgcmVwYWNraW5nCisgICB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIHBhY2ssIGJ1dCB0aGUgY29kZSBjb3VudGVkIHBvb3JseSBhbmQgZGlkCisgICBzby4KKworICogT25lIHBhcnQgb2YgImdpdCBhbSIgaGFkIGFuIG9kZGJhbGwgaGVscGVyIGZ1bmN0aW9uIHRoYXQgY2FsbGVkCisgICBzdHVmZiBmcm9tIG91dHNpZGUgImhpcyIgYXMgb3Bwb3NlZCB0byBjYWxsaW5nIHdoYXQgd2UgaGF2ZSAib3VycyIsCisgICB3aGljaCB3YXMgbm90IGdlbmRlci1uZXV0cmFsIGFuZCBhbHNvIGluY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mCisgICB0aGUgc3lzdGVtIHdoZXJlIG91dHNpZGUgc3R1ZmYgaXMgdXN1YWxseSBjYWxsZWQgInRoZWlycyIgaW4KKyAgIGNvbnRyYXN0IHRvICJvdXJzIi4KKworICogVGhlIHRlc3QgZnJhbWV3b3JrIGxlYXJuZWQgYSBuZXcgaGVscGVyIHRlc3RfbWF0Y2hfc2lnbmFsIHRvCisgICBjaGVjayBhbiBleGl0IGNvZGUgZnJvbSBnZXR0aW5nIGtpbGxlZCBieSBhbiBleHBlY3RlZCBzaWduYWwuCisKKyAqICJnaXQgYmxhbWUgLU0iIG1pc3NlZCBhIHNpbmdsZSBsaW5lIHRoYXQgd2FzIG1vdmVkIHdpdGhpbiB0aGUgZmlsZS4KKworICogRml4IHJlY2VudGx5IGludHJvZHVjZWQgY29kZXBhdGhzIHRoYXQgYXJlIGludm9sdmVkIGluIHBhcmFsbGVsCisgICBzdWJtb2R1bGUgb3BlcmF0aW9ucywgd2hpY2ggZ2F2ZSB1cCBvbiByZWFkaW5nIHRvbyBlYXJseSwgYW5kCisgICBjb3VsZCBoYXZlIHdhc3RlZCBDUFUgd2hpbGUgYXR0ZW1wdGluZyB0byB3cml0ZSB1bmRlciBhIGNvcm5lcgorICAgY2FzZSBjb25kaXRpb24uCisKKyAqICJnaXQgZ3JlcCAtaSIgaGFzIGJlZW4gdGF1Z2h0IHRvIGZvbGQgY2FzZSBpbiBub24tYXNjaWkgbG9jYWxlcworICAgY29ycmVjdGx5LgorCisgKiBBIHRlc3QgdGhhdCB1bmNvbmRpdGlvbmFsbHkgdXNlZCAibWt0ZW1wIiBsZWFybmVkIHRoYXQgdGhlIGNvbW1hbmQKKyAgIGlzIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgZXZlcnl3aGVyZS4KKworICogImdpdCBibGFtZSBmaWxlIiBhbGxvd2VkIHRoZSBsaW5lYWdlIG9mIGxpbmVzIGluIHRoZSB1bmNvbW1pdHRlZCwKKyAgIHVuYWRkZWQgY29udGVudHMgb2YgImZpbGUiIHRvIGJlIGluc3BlY3RlZCwgYnV0IGl0IHJlZnVzZWQgd2hlbgorICAgImZpbGUiIGRpZCBub3QgYXBwZWFyIGluIHRoZSBjdXJyZW50IGNvbW1pdC4gIFdoZW4gImZpbGUiIHdhcworICAgY3JlYXRlZCBieSByZW5hbWluZyBhbiBleGlzdGluZyBmaWxlIChidXQgdGhlIGNoYW5nZSBoYXMgbm90IGJlZW4KKyAgIGNvbW1pdHRlZCksIHRoaXMgcmVzdHJpY3Rpb24gd2FzIHVubmVjZXNzYXJpbHkgdGlnaHQuCisKKyAqICJnaXQgYWRkIC1OIGRpci9maWxlICYmIGdpdCB3cml0ZS10cmVlIiBwcm9kdWNlZCBhbiBpbmNvcnJlY3QgdHJlZQorICAgd2hlbiB0aGVyZSBhcmUgb3RoZXIgcGF0aHMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHRoYXQgc29ydHMgYWZ0ZXIKKyAgICJmaWxlIi4KKworICogImdpdCBmZXRjaCBodHRwOi8vdXNlcjpwYXNzQGhvc3QvcmVwby4uLiIgc2NydWJiZWQgdGhlIHVzZXJpbmZvCisgICBwYXJ0LCBidXQgImdpdCBwdXNoIiBkaWRuJ3QuCisKKyAqIEFuIGFnZSBvbGQgYnVnIHRoYXQgY2F1c2VkICJnaXQgZGlmZiAtLWlnbm9yZS1zcGFjZS1hdC1lb2wiCisgICBtaXNiZWhhdmUgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgbm90ZXMgbWVyZ2UiIGhhZCBhIGNvZGUgdG8gc2VlIGlmIGEgcGF0aCBleGlzdHMgKGFuZCBmYWlscyBpZgorICAgaXQgZG9lcykgYW5kIHRoZW4gb3BlbiB0aGUgcGF0aCBmb3Igd3JpdGluZyAod2hlbiBpdCBkb2Vzbid0KS4KKyAgIFJlcGxhY2UgaXQgd2l0aCBvcGVuIHdpdGggT19FWENMLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgYW5kICJnaXQgaW5kZXgtcGFjayIgbW9zdGx5IG9wZXJhdGUgd2l0aCBvZmZfdAorICAgd2hlbiB0YWxraW5nIGFib3V0IHRoZSBvZmZzZXQgb2Ygb2JqZWN0cyBpbiBhIHBhY2tmaWxlLCBidXQgdGhlcmUKKyAgIHdlcmUgYSBoYW5kZnVsIG9mIHBsYWNlcyB0aGF0IHVzZWQgInVuc2lnbmVkIGxvbmciIHRvIGhvbGQgdGhhdAorICAgdmFsdWUsIGxlYWRpbmcgdG8gYW4gdW5pbnRlbmRlZCB0cnVuY2F0aW9uLgorCisgKiBSZWNlbnQgdXBkYXRlIHRvICJnaXQgZGFlbW9uIiB0cmllcyB0byBlbmFibGUgdGhlIHNvY2tldC1sZXZlbAorICAgS0VFUEFMSVZFLCBidXQgd2hlbiBpdCBpcyBzcGF3bmVkIHZpYSBpbmV0ZCwgdGhlIHN0YW5kYXJkIGlucHV0CisgICBmaWxlIGRlc2NyaXB0b3IgbWF5IG5vdCBuZWNlc3NhcmlseSBiZSBjb25uZWN0ZWQgdG8gYSBzb2NrZXQuCisgICBTdXBwcmVzcyBhbiBFTk9UU09DSyBlcnJvciBmcm9tIHNldHNvY2tvcHQoKS4KKworICogUmVjZW50IEZyZWVCU0Qgc3RvcHBlZCBtYWtpbmcgcGVybCBhdmFpbGFibGUgYXQgL3Vzci9iaW4vcGVybDsKKyAgIHN3aXRjaCB0aGUgZGVmYXVsdCB0aGUgYnVpbHQtaW4gcGF0aCB0byAvdXNyL2xvY2FsL2Jpbi9wZXJsIG9uIG5vdAorICAgdG9vIGFuY2llbnQgRnJlZUJTRCByZWxlYXNlcy4KKworICogImdpdCBzdGF0dXMiIGxlYXJuZWQgdG8gc3VnZ2VzdCAibWVyZ2UgLS1hYm9ydCIgZHVyaW5nIGEgY29uZmxpY3RlZAorICAgbWVyZ2UsIGp1c3QgbGlrZSBpdCBhbHJlYWR5IHN1Z2dlc3RzICJyZWJhc2UgLS1hYm9ydCIgZHVyaW5nIGEKKyAgIGNvbmZsaWN0ZWQgcmViYXNlLgorCisgKiBUaGUgLmMvLmggc291cmNlcyBhcmUgbWFya2VkIGFzIHN1Y2ggaW4gb3VyIC5naXRhdHRyaWJ1dGVzIGZpbGUgc28KKyAgIHRoYXQgImdpdCBkaWZmIC1XIiBhbmQgZnJpZW5kcyB3b3VsZCB3b3JrIGJldHRlci4KKworICogRXhpc3RpbmcgYXV0b2NvbmYgZ2VuZXJhdGVkIHRlc3QgZm9yIHRoZSBuZWVkIHRvIGxpbmsgd2l0aCBwdGhyZWFkCisgICBsaWJyYXJ5IGRpZCBub3QgY2hlY2sgYWxsIHRoZSBmdW5jdGlvbnMgZnJvbSBwdGhyZWFkIGxpYnJhcmllczsKKyAgIHJlY2VudCBGcmVlQlNEIGhhcyBzb21lIGZ1bmN0aW9ucyBpbiBsaWJjIGJ1dCBub3Qgb3RoZXJzLCBhbmQgd2UKKyAgIG1pc3Rha2VubHkgdGhvdWdodCBsaW5raW5nIHdpdGggbGliYyBpcyBlbm91Z2ggd2hlbiBpdCBpcyBub3QuCisKKyAqIEFsbG93IGh0dHAgZGFlbW9uIHRlc3RzIGluIFRyYXZpcyBDSSB0ZXN0cy4KKworICogVXNlcnMgb2YgdGhlIHBhcnNlX29wdGlvbnNfY29uY2F0KCkgQVBJIGZ1bmN0aW9uIG5lZWQgdG8gYWxsb2NhdGUKKyAgIGV4dHJhIHNsb3RzIGluIGFkdmFuY2UgYW5kIGZpbGwgdGhlbSB3aXRoIE9QVF9FTkQoKSB3aGVuIHRoZXkgd2FudAorICAgdG8gZGVjaWRlIHRoZSBzZXQgb2Ygc3VwcG9ydGVkIG9wdGlvbnMgZHluYW1pY2FsbHksIHdoaWNoIG1ha2VzIHRoZQorICAgY29kZSBlcnJvci1wcm9uZSBhbmQgaGFyZCB0byByZWFkLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQgYnkgdHdlYWtpbmcKKyAgIHRoZSBBUEkgdG8gYWxsb2NhdGUgYW5kIHJldHVybiBhIG5ldyBjb3B5IG9mICJzdHJ1Y3Qgb3B0aW9uIiBhcnJheS4KKworICogVGhlIHVzZSBvZiBzdHJidWYgaW4gImdpdCBybSIgdG8gYnVpbGQgZmlsZW5hbWUgdG8gcmVtb3ZlIHdhcyBhIGJpdAorICAgc3Vib3B0aW1hbCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgY29tbWl0IC0taGVscCIgc2FpZCAiLS1uby12ZXJpZnkiIGlzIG9ubHkgYWJvdXQgc2tpcHBpbmcgdGhlCisgICBwcmUtY29tbWl0IGhvb2ssIGFuZCBmYWlsZWQgdG8gc2F5IHRoYXQgaXQgYWxzbyBza2lwcGVkIHRoZQorICAgY29tbWl0LW1zZyBob29rLgorCisgKiAiZ2l0IG1lcmdlIiBpbiBHaXQgdjIuOSB3YXMgdGF1Z2h0IHRvIGZvcmJpZCBtZXJnaW5nIGFuIHVucmVsYXRlZAorICAgbGluZXMgb2YgaGlzdG9yeSBieSBkZWZhdWx0LCBidXQgdGhhdCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nCisgICB0aGUgIi0tcmVqb2luIiBtb2RlIG9mICJnaXQgc3VidHJlZSIgKGluIGNvbnRyaWIvKSB3YW50cyB0byBkby4KKyAgICJnaXQgc3VidHJlZSIgaGFzIGJlZW4gdGF1Z2h0IHRvIHVzZSB0aGUgIi0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyIKKyAgIG9wdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdC4KKworICogVGhlIGJ1aWxkIHByb2NlZHVyZSBmb3IgImdpdCBwZXJzaXN0ZW50LWh0dHBzIiBoZWxwZXIgKGluIGNvbnRyaWIvKQorICAgaGFzIGJlZW4gdXBkYXRlZCBzbyB0aGF0IGl0IGNhbiBiZSBidWlsdCB3aXRoIG1vcmUgcmVjZW50IHZlcnNpb25zCisgICBvZiBHby4KKworICogVGhlcmUgaXMgYW4gb3B0aW1pemF0aW9uIHVzZWQgaW4gImdpdCBkaWZmICR0cmVlQSAkdHJlZUIiIHRvIGJvcnJvdworICAgYW4gYWxyZWFkeSBjaGVja2VkLW91dCBjb3B5IGluIHRoZSB3b3JraW5nIHRyZWUgd2hlbiBpdCBpcyBrbm93biB0bworICAgYmUgdGhlIHNhbWUgYXMgdGhlIGJsb2IgYmVpbmcgY29tcGFyZWQsIGV4cGVjdGluZyB0aGF0IG9wZW4vbW1hcCBvZgorICAgc3VjaCBhIGZpbGUgaXMgZmFzdGVyIHRoYW4gcmVhZGluZyBpdCBmcm9tIHRoZSBvYmplY3Qgc3RvcmUsIHdoaWNoCisgICBpbnZvbHZlcyBpbmZsYXRpbmcgYW5kIGFwcGx5aW5nIGRlbHRhLiAgVGhpcyBob3dldmVyIGtpY2tlZCBpbiBldmVuCisgICB3aGVuIHRoZSBjaGVja2VkLW91dCBjb3B5IG5lZWRzIHRvIGdvIHRocm91Z2ggdGhlIGNvbnZlcnQtdG8tZ2l0CisgICBjb252ZXJzaW9uIChpbmNsdWRpbmcgdGhlIGNsZWFuIGZpbHRlciksIHdoaWNoIGRlZmVhdHMgdGhlIHdob2xlCisgICBwb2ludCBvZiB0aGUgb3B0aW1pemF0aW9uLiAgVGhlIG9wdGltaXphdGlvbiBoYXMgYmVlbiBkaXNhYmxlZCB3aGVuCisgICB0aGUgY29udmVyc2lvbiBpcyBuZWNlc3NhcnkuCisKKyAqICJnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1leHRlbmRlZCBsb2cgLS1iYXNpYy1yZWdleHAiIG1pc2JlaGF2ZWQKKyAgIGJlY2F1c2UgdGhlIGludGVybmFsIEFQSSB0byBhY2Nlc3MgdGhlIGdyZXAgbWFjaGluZXJ5IHdhcyBub3QKKyAgIGRlc2lnbmVkIHdlbGwuCisKKyAqIFdpbmRvd3MgcG9ydCB3YXMgZmFpbGluZyBzb21lIHRlc3RzIGluIHQ0MTMwLCBkdWUgdG8gdGhlIGxhY2sgb2YKKyAgIGludW0gaW4gdGhlIHJldHVybmVkIHZhbHVlcyBieSBpdHMgbHN0YXQoMikgZW11bGF0aW9uLgorCisgKiBUaGUgY2hhcmFjdGVycyBpbiB0aGUgbGFiZWwgc2hvd24gZm9yIHRhZ3MvcmVmcyBmb3IgY29tbWl0cyBpbgorICAgImdpdHdlYiIgb3V0cHV0IGFyZSBub3cgcHJvcGVybHkgZXNjYXBlZCBmb3IgcHJvcGVyIEhUTUwgb3V0cHV0LgorCisgKiBGcmVlQlNEIGNhbiBsaWUgd2hlbiBhc2tlZCBtdGltZSBvZiBhIGRpcmVjdG9yeSwgd2hpY2ggbWFkZSB0aGUKKyAgIHVudHJhY2tlZCBjYWNoZSBjb2RlIHRvIGZhbGwgYmFjayB0byBhIHNsb3ctcGF0aCwgd2hpY2ggaW4gdHVybgorICAgY2F1c2VkIHRlc3RzIGluIHQ3MDYzIHRvIGZhaWwgYmVjYXVzZSBpdCB3YW50ZWQgdG8gdmVyaWZ5IHRoZQorICAgYmVoYXZpb3VyIG9mIHRoZSBmYXN0LXBhdGguCisKKyAqIFNxdWVsY2ggY29tcGlsZXIgd2FybmluZ3MgZm9yIG5ldG1hbGxvYyAoaW4gY29tcGF0LykgbGlicmFyeS4KKworICogVGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBoYXNobWFwIHdhcyB1bmNsZWFyIGlmIGhhc2htYXBfZW50cnkKKyAgIGNhbiBiZSBzYWZlbHkgZGlzY2FyZGVkIHdpdGhvdXQgYW55IG90aGVyIGNvbnNpZGVyYXRpb24uICBTdGF0ZQorICAgdGhhdCBpdCBpcyBzYWZlIHRvIGRvIHNvLgorCisgKiBOb3Qtc28tcmVjZW50IHJld3JpdGUgb2YgImdpdCBhbSIgdGhhdCBzdGFydGVkIG1ha2luZyBpbnRlcm5hbAorICAgY2FsbHMgaW50byB0aGUgY29tbWl0IG1hY2hpbmVyeSBoYWQgYW4gdW5pbnRlbmRlZCByZWdyZXNzaW9uLCBpbgorICAgdGhhdCBubyBtYXR0ZXIgaG93IG1hbnkgc2Vjb25kcyBpdCB0b29rIHRvIGFwcGx5IG1hbnkgcGF0Y2hlcywgdGhlCisgICByZXN1bHRpbmcgY29tbWl0dGVyIHRpbWVzdGFtcCBmb3IgdGhlIHJlc3VsdGluZyBjb21taXRzIHdlcmUgYWxsCisgICB0aGUgc2FtZS4KKworICogImdpdCBkaWZmdG9vbCA8cGF0aHM+Li4uIiBzdGFydGVkIGluIGEgc3ViZGlyZWN0b3J5IGZhaWxlZCB0bworICAgaW50ZXJwcmV0IHRoZSBwYXRocyByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeSwgd2hpY2ggaGFzIGJlZW4KKyAgIGZpeGVkLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NjgyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS40LnR4dApAQCAtMCwwICsxLDkwIEBACitHaXQgdjIuOS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi45LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGVyZSBhcmUgY2VydGFpbiBob3VzZS1rZWVwaW5nIHRhc2tzIHRoYXQgbmVlZCB0byBiZSBwZXJmb3JtZWQgYXQKKyAgIHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiBhbnkgR2l0IHByb2dyYW0sIGFuZCBwcm9ncmFtcyB0aGF0IGFyZSBub3QKKyAgIGJ1aWx0LWluIGNvbW1hbmRzIGhhZCB0byBkbyB0aGVtIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzICJnaXQiCisgICBwb3R0eSBkb2VzLiAgSXQgd2FzIGVhc3kgdG8gbWFrZSBtaXN0YWtlcyBpbiBvbmUtb2ZmIHN0YW5kYWxvbmUKKyAgIHByb2dyYW1zIChsaWtlIHRlc3QgaGVscGVycykuICBBIGNvbW1vbiAibWFpbigpIiBmdW5jdGlvbiB0aGF0CisgICBjYWxscyBjbWRfbWFpbigpIG9mIGluZGl2aWR1YWwgcHJvZ3JhbSBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvCisgICBtYWtlIGl0IGhhcmRlciB0byBtYWtlIG1pc3Rha2VzLgorCisgKiAiZ2l0IG1lcmdlIiB3aXRoIHJlbm9ybWFsaXphdGlvbiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoCisgICBtZXJnZS1yZWN1cnNpdmUsIGR1ZSB0byAic2FmZXIgY3JsZiIgY29udmVyc2lvbiBraWNraW5nIGluIHdoZW4gaXQKKyAgIHNob3VsZG4ndC4KKworICogVGhlIHJlZmxvZyBvdXRwdXQgZm9ybWF0IGlzIGRvY3VtZW50ZWQgYmV0dGVyLCBhbmQgYSBuZXcgZm9ybWF0CisgICAtLWRhdGU9dW5peCB0byByZXBvcnQgdGhlIHNlY29uZHMtc2luY2UtZXBvY2ggKHdpdGhvdXQgdGltZXpvbmUpCisgICBoYXMgYmVlbiBhZGRlZC4KKworICogImdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZSIgYWxyZWFkeSBoYWQgZW5vdWdoIGxvZ2ljIHRvIGFsbG93CisgICBlbnN1cmluZyB0aGF0IHN1Y2ggYSBwdXNoIHJlc3VsdHMgaW4gY3JlYXRpb24gb2YgYSByZWYgKGkuZS4gdGhlCisgICByZWNlaXZpbmcgZW5kIGRpZCBub3QgaGF2ZSBhbm90aGVyIHB1c2ggZnJvbSBzaWRld2F5cyB0aGF0IHdvdWxkIGJlCisgICBkaXNjYXJkZWQgYnkgb3VyIGZvcmNlLXB1c2hpbmcpLCBidXQgZGlkbid0IGV4cG9zZSB0aGlzIHBvc3NpYmlsaXR5CisgICB0byB0aGUgdXNlcnMuICBJdCBkb2VzIHNvIG5vdy4KKworICogImltcG9ydC10YXJzIiBmYXN0LWltcG9ydCBzY3JpcHQgKGluIGNvbnRyaWIvKSB1c2VkIHRvIGlnbm9yZSBhCisgICBoYXJkbGluayB0YXJnZXQgYW5kIHJlcGxhY2VkIGl0IHdpdGggYW4gZW1wdHkgZmlsZSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZCB0byByZWNvcmQgdGhlIHNhbWUgYmxvYiBhcyB0aGUgb3RoZXIgZmlsZSB0aGUgaGFyZGxpbmsgaXMKKyAgIHNoYXJlZCB3aXRoLgorCisgKiAiZ2l0IG12IGRpciBub24tZXhpc3RpbmctZGlyLyIgZGlkIG5vdCB3b3JrIGluIHNvbWUgZW52aXJvbm1lbnRzCisgICB0aGUgc2FtZSB3YXkgYXMgZXhpc3RpbmcgbWFpbnN0cmVhbSBwbGF0Zm9ybXMuICBUaGUgY29kZSBub3cgbW92ZXMKKyAgICJkaXIiIHRvICJub24tZXhpc3RpbmctZGlyIiwgd2l0aG91dCByZWx5aW5nIG9uIHJlbmFtZSgiQSIsICJCLyIpCisgICB0aGF0IHN0cmlwcyB0aGUgdHJhaWxpbmcgc2xhc2ggb2YgJy8nLgorCisgKiBUaGUgInQvIiBoaWVyYXJjaHkgaXMgcHJvbmUgdG8gZ2V0IGFuIHVudXN1YWwgcGF0aG5hbWU7ICJtYWtlIHRlc3QiCisgICBoYXMgYmVlbiB0YXVnaHQgdG8gbWFrZSBzdXJlIHRoZXkgZG8gbm90IGNvbnRhaW4gcGF0aHMgdGhhdCBjYW5ub3QKKyAgIGJlIGNoZWNrZWQgb3V0IG9uIFdpbmRvd3MgKGFuZCB0aGUgbWVjaGFuaXNtIGNhbiBiZSByZXVzYWJsZSB0bworICAgY2F0Y2ggcGF0aG5hbWVzIHRoYXQgYXJlIG5vdCBwb3J0YWJsZSB0byBvdGhlciBwbGF0Zm9ybXMgYXMgbmVlZAorICAgYXJpc2VzKS4KKworICogV2hlbiAiZ2l0IG1lcmdlLXJlY3Vyc2l2ZSIgd29ya3Mgb24gaGlzdG9yeSB3aXRoIG1hbnkgY3Jpc3MtY3Jvc3MKKyAgIG1lcmdlcyBpbiAidmVyYm9zZSIgbW9kZSwgdGhlIG5hbWVzIHRoZSBjb21tYW5kIGFzc2lnbnMgdG8gdGhlCisgICB2aXJ0dWFsIG1lcmdlIGJhc2VzIGNvdWxkIGhhdmUgb3ZlcndyaXR0ZW4gZWFjaCBvdGhlciBieSB1bmludGVuZGVkCisgICByZXVzZSBvZiB0aGUgc2FtZSBwaWVjZSBvZiBtZW1vcnkuCisKKyAqICJnaXQgY2hlY2tvdXQgLS1kZXRhY2ggPGJyYW5jaD4iIHVzZWQgdG8gZ2l2ZSB0aGUgc2FtZSBhZHZpY2UKKyAgIG1lc3NhZ2UgYXMgdGhhdCBpcyBpc3N1ZWQgd2hlbiAiZ2l0IGNoZWNrb3V0IDx0YWc+IiAob3IgYW55dGhpbmcKKyAgIHRoYXQgaXMgbm90IGEgYnJhbmNoIG5hbWUpIGlzIGdpdmVuLCBidXQgYXNraW5nIHdpdGggIi0tZGV0YWNoIiBpcworICAgYW4gZXhwbGljaXQgZW5vdWdoIHNpZ24gdGhhdCB0aGUgdXNlciBrbm93cyB3aGF0IGlzIGdvaW5nIG9uLiAgVGhlCisgICBhZHZpY2UgbWVzc2FnZSBoYXMgYmVlbiBzcXVlbGNoZWQgaW4gdGhpcyBjYXNlLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBieSBkZWZhdWx0IGlnbm9yZXMgdGhlIGVycm9yIGV4aXQgZnJvbSB0aGUgYmFja2VuZAorICAgY29tbWFuZHMgaXQgc3Bhd25zLCBiZWNhdXNlIG9mdGVuIHRoZXkgc2lnbmFsIHRoYXQgdGhleSBmb3VuZAorICAgZGlmZmVyZW5jZXMgYnkgZXhpdGluZyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzIGNvZGUganVzdCBsaWtlICJkaWZmIgorICAgZG9lczsgdGhlIGV4aXQgc3RhdHVzIGNvZGVzIDEyNiBhbmQgYWJvdmUgaG93ZXZlciBhcmUgc3BlY2lhbCBpbgorICAgdGhhdCB0aGV5IGFyZSB1c2VkIHRvIHNpZ25hbCB0aGF0IHRoZSBjb21tYW5kIGlzIG5vdCBleGVjdXRhYmxlLAorICAgZG9lcyBub3QgZXhpc3QsIG9yIGtpbGxlZCBieSBhIHNpZ25hbC4gICJnaXQgZGlmZnRvb2wiIGhhcyBiZWVuCisgICB0YXVnaHQgdG8gbm90aWNlIHRoZXNlIGV4aXQgc3RhdHVzIGNvZGVzLgorCisgKiBPbiBXaW5kb3dzLCBoZWxwLmJyb3dzZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB1c2VkIHRvIGJlIGlnbm9yZWQsCisgICB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSAiZ2l0IC1jIHZhcls9dmFsXSBjbWQiIGZhY2lsaXR5IHRvIGFwcGVuZCBhIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIGRlZmluaXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgc2VhcmNoIG9yZGVyIHdhcyBkZXNjcmliZWQgaW4KKyAgIGdpdCgxKSBtYW51YWwgcGFnZSwgYnV0IG5vdCBpbiBnaXQtY29uZmlnKDEpLCB3aGljaCB3YXMgbW9yZSBsaWtlbHkKKyAgIHBsYWNlIGZvciBwZW9wbGUgdG8gbG9vayBmb3Igd2hlbiB0aGV5IGFzayAiY2FuIEkgbWFrZSBhIG9uZS1zaG90CisgICBvdmVycmlkZSwgYW5kIGlmIHNvIGhvdz8iCisKKyAqIFRoZSB0ZW1wZmlsZSAoaGVuY2UgaXRzIHVzZXIgbG9ja2ZpbGUpIEFQSSBsZXRzIHRoZSBjYWxsZXIgdG8gb3BlbgorICAgYSBmaWxlIGRlc2NyaXB0b3IgdG8gYSB0ZW1wb3JhcnkgZmlsZSwgd3JpdGUgaW50byBpdCBhbmQgdGhlbgorICAgZmluYWxpemUgaXQgYnkgZmlyc3QgY2xvc2luZyB0aGUgZmlsZWhhbmRsZSBhbmQgdGhlbiBlaXRoZXIKKyAgIHJlbW92aW5nIG9yIHJlbmFtaW5nIHRoZSB0ZW1wb3JhcnkgZmlsZS4gIFdoZW4gdGhlIHByb2Nlc3Mgc3Bhd25zIGEKKyAgIHN1YnByb2Nlc3MgYWZ0ZXIgb2J0YWluaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IsIGFuZCBpZiB0aGUKKyAgIHN1YnByb2Nlc3MgaGFzIG5vdCBleGl0ZWQgd2hlbiB0aGUgYXR0ZW1wdCB0byByZW1vdmUgb3IgcmVuYW1lIGlzCisgICBtYWRlLCB0aGUgbGFzdCBzdGVwIGZhaWxzIG9uIFdpbmRvd3MsIGJlY2F1c2UgdGhlIHN1YnByb2Nlc3MgaGFzCisgICB0aGUgZmlsZSBkZXNjcmlwdG9yIHN0aWxsIG9wZW4uICBPcGVuIHRlbXBmaWxlIHdpdGggT19DTE9FWEVDIGZsYWcKKyAgIHRvIGF2b2lkIHRoaXMgKG9uIFdpbmRvd3MsIHRoaXMgaXMgbWFwcGVkIHRvIE9fTk9JTkhFUklUKS4KKworICogImdpdC1zaGVsbCIgcmVqZWN0cyBhIHJlcXVlc3QgdG8gc2VydmUgYSByZXBvc2l0b3J5IHdob3NlIG5hbWUKKyAgIGJlZ2lucyB3aXRoIGEgZGFzaCwgd2hpY2ggbWFrZXMgaXQgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIGdldCBpdAorICAgY29uZnVzZWQgaW50byBzcGF3bmluZyBzZXJ2aWNlIHByb2dyYW1zIGxpa2UgImdpdC11cGxvYWQtcGFjayIgd2l0aAorICAgYW4gb3B0aW9uIGxpa2UgIi0taGVscCIsIHdoaWNoIGluIHR1cm4gd291bGQgc3Bhd24gYW4gaW50ZXJhY3RpdmUKKyAgIHBhZ2VyLCBpbnN0ZWFkIG9mIHdvcmtpbmcgd2l0aCB0aGUgcmVwb3NpdG9yeSB1c2VyIGFza2VkIHRvIGFjY2VzcworICAgKGkuZS4gdGhlIG9uZSB3aG9zZSBuYW1lIGlzICItLWhlbHAiKS4KKworQWxzbyBjb250YWlucyBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjgzMTNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuNS50eHQKQEAgLTAsMCArMSw0IEBACitHaXQgdjIuOS41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgZm9yd2FyZC1wb3J0cyB0aGUgZml4IGZvciAic3NoOi8vLi4uIiBVUkwgZnJvbSBHaXQgdjIuNy42CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTE1Y2FiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwpAQCAtMCwwICsxLDU3NSBAQAorU3VibWl0dGluZyBQYXRjaGVzCis9PT09PT09PT09PT09PT09PT0KKworPT0gR3VpZGVsaW5lcworCitIZXJlIGFyZSBzb21lIGd1aWRlbGluZXMgZm9yIHBlb3BsZSB3aG8gd2FudCB0byBjb250cmlidXRlIHRoZWlyIGNvZGUKK3RvIHRoaXMgc29mdHdhcmUuCisKK1tbYmFzZS1icmFuY2hdXQorPT09IERlY2lkZSB3aGF0IHRvIGJhc2UgeW91ciB3b3JrIG9uLgorCitJbiBnZW5lcmFsLCBhbHdheXMgYmFzZSB5b3VyIHdvcmsgb24gdGhlIG9sZGVzdCBicmFuY2ggdGhhdCB5b3VyCitjaGFuZ2UgaXMgcmVsZXZhbnQgdG8uCisKKyogQSBidWdmaXggc2hvdWxkIGJlIGJhc2VkIG9uIGBtYWludGAgaW4gZ2VuZXJhbC4gSWYgdGhlIGJ1ZyBpcyBub3QKKyAgcHJlc2VudCBpbiBgbWFpbnRgLCBiYXNlIGl0IG9uIGBtYXN0ZXJgLiBGb3IgYSBidWcgdGhhdCdzIG5vdCB5ZXQKKyAgaW4gYG1hc3RlcmAsIGZpbmQgdGhlIHRvcGljIHRoYXQgaW50cm9kdWNlcyB0aGUgcmVncmVzc2lvbiwgYW5kCisgIGJhc2UgeW91ciB3b3JrIG9uIHRoZSB0aXAgb2YgdGhlIHRvcGljLgorCisqIEEgbmV3IGZlYXR1cmUgc2hvdWxkIGJlIGJhc2VkIG9uIGBtYXN0ZXJgIGluIGdlbmVyYWwuIElmIHRoZSBuZXcKKyAgZmVhdHVyZSBkZXBlbmRzIG9uIGEgdG9waWMgdGhhdCBpcyBpbiBgcHVgLCBidXQgbm90IGluIGBtYXN0ZXJgLAorICBiYXNlIHlvdXIgd29yayBvbiB0aGUgdGlwIG9mIHRoYXQgdG9waWMuCisKKyogQ29ycmVjdGlvbnMgYW5kIGVuaGFuY2VtZW50cyB0byBhIHRvcGljIG5vdCB5ZXQgaW4gYG1hc3RlcmAgc2hvdWxkCisgIGJlIGJhc2VkIG9uIHRoZSB0aXAgb2YgdGhhdCB0b3BpYy4gSWYgdGhlIHRvcGljIGhhcyBub3QgYmVlbiBtZXJnZWQKKyAgdG8gYG5leHRgLCBpdCdzIGFscmlnaHQgdG8gYWRkIGEgbm90ZSB0byBzcXVhc2ggbWlub3IgY29ycmVjdGlvbnMKKyAgaW50byB0aGUgc2VyaWVzLgorCisqIEluIHRoZSBleGNlcHRpb25hbCBjYXNlIHRoYXQgYSBuZXcgZmVhdHVyZSBkZXBlbmRzIG9uIHNldmVyYWwgdG9waWNzCisgIG5vdCBpbiBgbWFzdGVyYCwgc3RhcnQgd29ya2luZyBvbiBgbmV4dGAgb3IgYHB1YCBwcml2YXRlbHkgYW5kIHNlbmQKKyAgb3V0IHBhdGNoZXMgZm9yIGRpc2N1c3Npb24uIEJlZm9yZSB0aGUgZmluYWwgbWVyZ2UsIHlvdSBtYXkgaGF2ZSB0bworICB3YWl0IHVudGlsIHNvbWUgb2YgdGhlIGRlcGVuZGVudCB0b3BpY3MgZ3JhZHVhdGUgdG8gYG1hc3RlcmAsIGFuZAorICByZWJhc2UgeW91ciB3b3JrLgorCisqIFNvbWUgcGFydHMgb2YgdGhlIHN5c3RlbSBoYXZlIGRlZGljYXRlZCBtYWludGFpbmVycyB3aXRoIHRoZWlyIG93bgorICByZXBvc2l0b3JpZXMgKHNlZSB0aGUgc2VjdGlvbiAiU3Vic3lzdGVtcyIgYmVsb3cpLiAgQ2hhbmdlcyB0bworICB0aGVzZSBwYXJ0cyBzaG91bGQgYmUgYmFzZWQgb24gdGhlaXIgdHJlZXMuCisKK1RvIGZpbmQgdGhlIHRpcCBvZiBhIHRvcGljIGJyYW5jaCwgcnVuIGBnaXQgbG9nIC0tZmlyc3QtcGFyZW50CittYXN0ZXIuLnB1YCBhbmQgbG9vayBmb3IgdGhlIG1lcmdlIGNvbW1pdC4gVGhlIHNlY29uZCBwYXJlbnQgb2YgdGhpcworY29tbWl0IGlzIHRoZSB0aXAgb2YgdGhlIHRvcGljIGJyYW5jaC4KKworW1tzZXBhcmF0ZS1jb21taXRzXV0KKz09PSBNYWtlIHNlcGFyYXRlIGNvbW1pdHMgZm9yIGxvZ2ljYWxseSBzZXBhcmF0ZSBjaGFuZ2VzLgorCitVbmxlc3MgeW91ciBwYXRjaCBpcyByZWFsbHkgdHJpdmlhbCwgeW91IHNob3VsZCBub3QgYmUgc2VuZGluZworb3V0IGEgcGF0Y2ggdGhhdCB3YXMgZ2VuZXJhdGVkIGJldHdlZW4geW91ciB3b3JraW5nIHRyZWUgYW5kCit5b3VyIGNvbW1pdCBoZWFkLiAgSW5zdGVhZCwgYWx3YXlzIG1ha2UgYSBjb21taXQgd2l0aCBjb21wbGV0ZQorY29tbWl0IG1lc3NhZ2UgYW5kIGdlbmVyYXRlIGEgc2VyaWVzIG9mIHBhdGNoZXMgZnJvbSB5b3VyCityZXBvc2l0b3J5LiAgSXQgaXMgYSBnb29kIGRpc2NpcGxpbmUuCisKK0dpdmUgYW4gZXhwbGFuYXRpb24gZm9yIHRoZSBjaGFuZ2UocykgdGhhdCBpcyBkZXRhaWxlZCBlbm91Z2ggc28KK3RoYXQgcGVvcGxlIGNhbiBqdWRnZSBpZiBpdCBpcyBnb29kIHRoaW5nIHRvIGRvLCB3aXRob3V0IHJlYWRpbmcKK3RoZSBhY3R1YWwgcGF0Y2ggdGV4dCB0byBkZXRlcm1pbmUgaG93IHdlbGwgdGhlIGNvZGUgZG9lcyB3aGF0Cit0aGUgZXhwbGFuYXRpb24gcHJvbWlzZXMgdG8gZG8uCisKK0lmIHlvdXIgZGVzY3JpcHRpb24gc3RhcnRzIHRvIGdldCB0b28gbG9uZywgdGhhdCdzIGEgc2lnbiB0aGF0IHlvdQorcHJvYmFibHkgbmVlZCB0byBzcGxpdCB1cCB5b3VyIGNvbW1pdCB0byBmaW5lciBncmFpbmVkIHBpZWNlcy4KK1RoYXQgYmVpbmcgc2FpZCwgcGF0Y2hlcyB3aGljaCBwbGFpbmx5IGRlc2NyaWJlIHRoZSB0aGluZ3MgdGhhdAoraGVscCByZXZpZXdlcnMgY2hlY2sgdGhlIHBhdGNoLCBhbmQgZnV0dXJlIG1haW50YWluZXJzIHVuZGVyc3RhbmQKK3RoZSBjb2RlLCBhcmUgdGhlIG1vc3QgYmVhdXRpZnVsIHBhdGNoZXMuICBEZXNjcmlwdGlvbnMgdGhhdCBzdW1tYXJpemUKK3RoZSBwb2ludCBpbiB0aGUgc3ViamVjdCB3ZWxsLCBhbmQgZGVzY3JpYmUgdGhlIG1vdGl2YXRpb24gZm9yIHRoZQorY2hhbmdlLCB0aGUgYXBwcm9hY2ggdGFrZW4gYnkgdGhlIGNoYW5nZSwgYW5kIGlmIHJlbGV2YW50IGhvdyB0aGlzCitkaWZmZXJzIHN1YnN0YW50aWFsbHkgZnJvbSB0aGUgcHJpb3IgdmVyc2lvbiwgYXJlIGFsbCBnb29kIHRoaW5ncwordG8gaGF2ZS4KKworTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGVzdHMgZm9yIHRoZSBidWcgeW91IGFyZSBmaXhpbmcuICBTZWUKK2B0L1JFQURNRWAgZm9yIGd1aWRhbmNlLgorCitbW3Rlc3RzXV0KK1doZW4gYWRkaW5nIGEgbmV3IGZlYXR1cmUsIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIG5ldyB0ZXN0cyB0byBzaG93Cit0aGUgZmVhdHVyZSB0cmlnZ2VycyB0aGUgbmV3IGJlaGF2aW9yIHdoZW4gaXQgc2hvdWxkLCBhbmQgdG8gc2hvdyB0aGUKK2ZlYXR1cmUgZG9lcyBub3QgdHJpZ2dlciB3aGVuIGl0IHNob3VsZG4ndC4gIEFmdGVyIGFueSBjb2RlIGNoYW5nZSwgbWFrZQorc3VyZSB0aGF0IHRoZSBlbnRpcmUgdGVzdCBzdWl0ZSBwYXNzZXMuCisKK0lmIHlvdSBoYXZlIGFuIGFjY291bnQgYXQgR2l0SHViIChhbmQgeW91IGNhbiBnZXQgb25lIGZvciBmcmVlIHRvIHdvcmsKK29uIG9wZW4gc291cmNlIHByb2plY3RzKSwgeW91IGNhbiB1c2UgdGhlaXIgVHJhdmlzIENJIGludGVncmF0aW9uIHRvCit0ZXN0IHlvdXIgY2hhbmdlcyBvbiBMaW51eCwgTWFjIChhbmQgaG9wZWZ1bGx5IHNvb24gV2luZG93cykuICBTZWUKK0dpdEh1Yi1UcmF2aXMgQ0kgaGludHMgc2VjdGlvbiBmb3IgZGV0YWlscy4KKworRG8gbm90IGZvcmdldCB0byB1cGRhdGUgdGhlIGRvY3VtZW50YXRpb24gdG8gZGVzY3JpYmUgdGhlIHVwZGF0ZWQKK2JlaGF2aW9yIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgcmVzdWx0aW5nIGRvY3VtZW50YXRpb24gc2V0IGZvcm1hdHMKK3dlbGwgKHRyeSB0aGUgRG9jdW1lbnRhdGlvbi9kb2MtZGlmZiBzY3JpcHQpLgorCitXZSBjdXJyZW50bHkgaGF2ZSBhIGxpYmVyYWwgbWl4dHVyZSBvZiBVUyBhbmQgVUsgRW5nbGlzaCBub3JtcyBmb3IKK3NwZWxsaW5nIGFuZCBncmFtbWFyLCB3aGljaCBpcyBzb21ld2hhdCB1bmZvcnR1bmF0ZS4gIEEgaHVnZSBwYXRjaCB0aGF0Cit0b3VjaGVzIHRoZSBmaWxlcyBhbGwgb3ZlciB0aGUgcGxhY2Ugb25seSB0byBjb3JyZWN0IHRoZSBpbmNvbnNpc3RlbmN5CitpcyBub3Qgd2VsY29tZSwgdGhvdWdoLiAgUG90ZW50aWFsIGNsYXNoZXMgd2l0aCBvdGhlciBjaGFuZ2VzIHRoYXQgY2FuCityZXN1bHQgZnJvbSBzdWNoIGEgcGF0Y2ggYXJlIG5vdCB3b3J0aCBpdC4gIFdlIHByZWZlciB0byBncmFkdWFsbHkKK3JlY29uY2lsZSB0aGUgaW5jb25zaXN0ZW5jaWVzIGluIGZhdm9yIG9mIFVTIEVuZ2xpc2gsIHdpdGggc21hbGwgYW5kCitlYXNpbHkgZGlnZXN0aWJsZSBwYXRjaGVzLCBhcyBhIHNpZGUgZWZmZWN0IG9mIGRvaW5nIHNvbWUgb3RoZXIgcmVhbAord29yayBpbiB0aGUgdmljaW5pdHkgKGUuZy4gcmV3cml0aW5nIGEgcGFyYWdyYXBoIGZvciBjbGFyaXR5LCB3aGlsZQordHVybmluZyBlbl9VSyBzcGVsbGluZyB0byBlbl9VUykuICBPYnZpb3VzIHR5cG9ncmFwaGljYWwgZml4ZXMgYXJlIG11Y2gKK21vcmUgd2VsY29tZWQgKCJ0ZWggLT4gInRoZSIpLCBwcmVmZXJhYmx5IHN1Ym1pdHRlZCBhcyBpbmRlcGVuZGVudAorcGF0Y2hlcyBzZXBhcmF0ZSBmcm9tIG90aGVyIGRvY3VtZW50YXRpb24gY2hhbmdlcy4KKworW1t3aGl0ZXNwYWNlLWNoZWNrXV0KK09oLCBhbm90aGVyIHRoaW5nLiAgV2UgYXJlIHBpY2t5IGFib3V0IHdoaXRlc3BhY2VzLiAgTWFrZSBzdXJlIHlvdXIKK2NoYW5nZXMgZG8gbm90IHRyaWdnZXIgZXJyb3JzIHdpdGggdGhlIHNhbXBsZSBwcmUtY29tbWl0IGhvb2sgc2hpcHBlZAoraW4gYHRlbXBsYXRlcy9ob29rcy0tcHJlLWNvbW1pdGAuICBUbyBoZWxwIGVuc3VyZSB0aGlzIGRvZXMgbm90IGhhcHBlbiwKK3J1biBgZ2l0IGRpZmYgLS1jaGVja2Agb24geW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY29tbWl0LgorCitbW2Rlc2NyaWJlLWNoYW5nZXNdXQorPT09IERlc2NyaWJlIHlvdXIgY2hhbmdlcyB3ZWxsLgorCitUaGUgZmlyc3QgbGluZSBvZiB0aGUgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGJlIGEgc2hvcnQgZGVzY3JpcHRpb24gKDUwCitjaGFyYWN0ZXJzIGlzIHRoZSBzb2Z0IGxpbWl0LCBzZWUgRElTQ1VTU0lPTiBpbiBsaW5rZ2l0OmdpdC1jb21taXRbMV0pLAorYW5kIHNob3VsZCBza2lwIHRoZSBmdWxsIHN0b3AuICBJdCBpcyBhbHNvIGNvbnZlbnRpb25hbCBpbiBtb3N0IGNhc2VzIHRvCitwcmVmaXggdGhlIGZpcnN0IGxpbmUgd2l0aCAiYXJlYTogIiB3aGVyZSB0aGUgYXJlYSBpcyBhIGZpbGVuYW1lIG9yCitpZGVudGlmaWVyIGZvciB0aGUgZ2VuZXJhbCBhcmVhIG9mIHRoZSBjb2RlIGJlaW5nIG1vZGlmaWVkLCBlLmcuCisKKyogZG9jOiBjbGFyaWZ5IGRpc3RpbmN0aW9uIGJldHdlZW4gc2lnbi1vZmYgYW5kIHBncC1zaWduaW5nCisqIGdpdGhvb2tzLnR4dDogaW1wcm92ZSB0aGUgaW50cm8gc2VjdGlvbgorCitJZiBpbiBkb3VidCB3aGljaCBpZGVudGlmaWVyIHRvIHVzZSwgcnVuIGBnaXQgbG9nIC0tbm8tbWVyZ2VzYCBvbiB0aGUKK2ZpbGVzIHlvdSBhcmUgbW9kaWZ5aW5nIHRvIHNlZSB0aGUgY3VycmVudCBjb252ZW50aW9ucy4KKworW1tzdW1tYXJ5LXNlY3Rpb25dXQorSXQncyBjdXN0b21hcnkgdG8gc3RhcnQgdGhlIHJlbWFpbmRlciBvZiB0aGUgZmlyc3QgbGluZSBhZnRlciAiYXJlYTogIgord2l0aCBhIGxvd2VyLWNhc2UgbGV0dGVyLiBFLmcuICJkb2M6IGNsYXJpZnkuLi4iLCBub3QgImRvYzoKK0NsYXJpZnkuLi4iLCBvciAiZ2l0aG9va3MudHh0OiBpbXByb3ZlLi4uIiwgbm90ICJnaXRob29rcy50eHQ6CitJbXByb3ZlLi4uIi4KKworW1ttZWFuaW5nZnVsLW1lc3NhZ2VdXQorVGhlIGJvZHkgc2hvdWxkIHByb3ZpZGUgYSBtZWFuaW5nZnVsIGNvbW1pdCBtZXNzYWdlLCB3aGljaDoKKworLiBleHBsYWlucyB0aGUgcHJvYmxlbSB0aGUgY2hhbmdlIHRyaWVzIHRvIHNvbHZlLCBpLmUuIHdoYXQgaXMgd3JvbmcKKyAgd2l0aCB0aGUgY3VycmVudCBjb2RlIHdpdGhvdXQgdGhlIGNoYW5nZS4KKworLiBqdXN0aWZpZXMgdGhlIHdheSB0aGUgY2hhbmdlIHNvbHZlcyB0aGUgcHJvYmxlbSwgaS5lLiB3aHkgdGhlCisgIHJlc3VsdCB3aXRoIHRoZSBjaGFuZ2UgaXMgYmV0dGVyLgorCisuIGFsdGVybmF0ZSBzb2x1dGlvbnMgY29uc2lkZXJlZCBidXQgZGlzY2FyZGVkLCBpZiBhbnkuCisKK1tbaW1wZXJhdGl2ZS1tb29kXV0KK0Rlc2NyaWJlIHlvdXIgY2hhbmdlcyBpbiBpbXBlcmF0aXZlIG1vb2QsIGUuZy4gIm1ha2UgeHl6enkgZG8gZnJvdHoiCitpbnN0ZWFkIG9mICJbVGhpcyBwYXRjaF0gbWFrZXMgeHl6enkgZG8gZnJvdHoiIG9yICJbSV0gY2hhbmdlZCB4eXp6eQordG8gZG8gZnJvdHoiLCBhcyBpZiB5b3UgYXJlIGdpdmluZyBvcmRlcnMgdG8gdGhlIGNvZGViYXNlIHRvIGNoYW5nZQoraXRzIGJlaGF2aW9yLiAgVHJ5IHRvIG1ha2Ugc3VyZSB5b3VyIGV4cGxhbmF0aW9uIGNhbiBiZSB1bmRlcnN0b29kCit3aXRob3V0IGV4dGVybmFsIHJlc291cmNlcy4gSW5zdGVhZCBvZiBnaXZpbmcgYSBVUkwgdG8gYSBtYWlsaW5nIGxpc3QKK2FyY2hpdmUsIHN1bW1hcml6ZSB0aGUgcmVsZXZhbnQgcG9pbnRzIG9mIHRoZSBkaXNjdXNzaW9uLgorCitbW2NvbW1pdC1yZWZlcmVuY2VdXQorSWYgeW91IHdhbnQgdG8gcmVmZXJlbmNlIGEgcHJldmlvdXMgY29tbWl0IGluIHRoZSBoaXN0b3J5IG9mIGEgc3RhYmxlCiticmFuY2gsIHVzZSB0aGUgZm9ybWF0ICJhYmJyZXZpYXRlZCBoYXNoIChzdWJqZWN0LCBkYXRlKSIsIGxpa2UgdGhpczoKKworLi4uLgorCUNvbW1pdCBmODZhMzc0IChwYWNrLWJpdG1hcC5jOiBmaXggYSBtZW1sZWFrLCAyMDE1LTAzLTMwKQorCW5vdGljZWQgdGhhdCAuLi4KKy4uLi4KKworVGhlICJDb3B5IGNvbW1pdCBzdW1tYXJ5IiBjb21tYW5kIG9mIGdpdGsgY2FuIGJlIHVzZWQgdG8gb2J0YWluIHRoaXMKK2Zvcm1hdCAod2l0aCB0aGUgc3ViamVjdCBlbmNsb3NlZCBpbiBhIHBhaXIgb2YgZG91YmxlLXF1b3RlcyksIG9yIHRoaXMKK2ludm9jYXRpb24gb2YgYGdpdCBzaG93YDoKKworLi4uLgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXJlZmVyZW5jZSA8Y29tbWl0PgorLi4uLgorCitvciwgb24gYW4gb2xkZXIgdmVyc2lvbiBvZiBHaXQgd2l0aG91dCBzdXBwb3J0IGZvciAtLXByZXR0eT1yZWZlcmVuY2U6CisKKy4uLi4KKwlnaXQgc2hvdyAtcyAtLWRhdGU9c2hvcnQgLS1wcmV0dHk9J2Zvcm1hdDolaCAoJXMsICVhZCknIDxjb21taXQ+CisuLi4uCisKK1tbZ2l0LXRvb2xzXV0KKz09PSBHZW5lcmF0ZSB5b3VyIHBhdGNoIHVzaW5nIEdpdCB0b29scyBvdXQgb2YgeW91ciBjb21taXRzLgorCitHaXQgYmFzZWQgZGlmZiB0b29scyBnZW5lcmF0ZSB1bmlkaWZmIHdoaWNoIGlzIHRoZSBwcmVmZXJyZWQgZm9ybWF0LgorCitZb3UgZG8gbm90IGhhdmUgdG8gYmUgYWZyYWlkIHRvIHVzZSBgLU1gIG9wdGlvbiB0byBgZ2l0IGRpZmZgIG9yCitgZ2l0IGZvcm1hdC1wYXRjaGAsIGlmIHlvdXIgcGF0Y2ggaW52b2x2ZXMgZmlsZSByZW5hbWVzLiAgVGhlCityZWNlaXZpbmcgZW5kIGNhbiBoYW5kbGUgdGhlbSBqdXN0IGZpbmUuCisKK1tbcmV2aWV3LXBhdGNoXV0KK1BsZWFzZSBtYWtlIHN1cmUgeW91ciBwYXRjaCBkb2VzIG5vdCBhZGQgY29tbWVudGVkIG91dCBkZWJ1Z2dpbmcgY29kZSwKK29yIGluY2x1ZGUgYW55IGV4dHJhIGZpbGVzIHdoaWNoIGRvIG5vdCByZWxhdGUgdG8gd2hhdCB5b3VyIHBhdGNoCitpcyB0cnlpbmcgdG8gYWNoaWV2ZS4gTWFrZSBzdXJlIHRvIHJldmlldworeW91ciBwYXRjaCBhZnRlciBnZW5lcmF0aW5nIGl0LCB0byBlbnN1cmUgYWNjdXJhY3kuICBCZWZvcmUKK3NlbmRpbmcgb3V0LCBwbGVhc2UgbWFrZSBzdXJlIGl0IGNsZWFubHkgYXBwbGllcyB0byB0aGUgYG1hc3RlcmAKK2JyYW5jaCBoZWFkLiAgSWYgeW91IGFyZSBwcmVwYXJpbmcgYSB3b3JrIGJhc2VkIG9uICJuZXh0IiBicmFuY2gsCit0aGF0IGlzIGZpbmUsIGJ1dCBwbGVhc2UgbWFyayBpdCBhcyBzdWNoLgorCitbW3NlbmQtcGF0Y2hlc11dCis9PT0gU2VuZGluZyB5b3VyIHBhdGNoZXMuCisKKzpzZWN1cml0eS1tbDogZm9vdG5vdGVyZWY6W3NlY3VyaXR5LW1sLFRoZSBHaXQgU2VjdXJpdHkgbWFpbGluZyBsaXN0OiBnaXQtc2VjdXJpdHlAZ29vZ2xlZ3JvdXBzLmNvbV0KKworQmVmb3JlIHNlbmRpbmcgYW55IHBhdGNoZXMsIHBsZWFzZSBub3RlIHRoYXQgcGF0Y2hlcyB0aGF0IG1heSBiZQorc2VjdXJpdHkgcmVsZXZhbnQgc2hvdWxkIGJlIHN1Ym1pdHRlZCBwcml2YXRlbHkgdG8gdGhlIEdpdCBTZWN1cml0eQorbWFpbGluZyBsaXN0e3NlY3VyaXR5LW1sfSwgaW5zdGVhZCBvZiB0aGUgcHVibGljIG1haWxpbmcgbGlzdC4KKworTGVhcm4gdG8gdXNlIGZvcm1hdC1wYXRjaCBhbmQgc2VuZC1lbWFpbCBpZiBwb3NzaWJsZS4gIFRoZXNlIGNvbW1hbmRzCithcmUgb3B0aW1pemVkIGZvciB0aGUgd29ya2Zsb3cgb2Ygc2VuZGluZyBwYXRjaGVzLCBhdm9pZGluZyBtYW55IHdheXMKK3lvdXIgZXhpc3RpbmcgZS1tYWlsIGNsaWVudCB0aGF0IGlzIG9wdGltaXplZCBmb3IgIm11bHRpcGFydC8qIiBtaW1lCit0eXBlIGUtbWFpbHMgdG8gY29ycnVwdCBhbmQgcmVuZGVyIHlvdXIgcGF0Y2hlcyB1bnVzYWJsZS4KKworUGVvcGxlIG9uIHRoZSBHaXQgbWFpbGluZyBsaXN0IG5lZWQgdG8gYmUgYWJsZSB0byByZWFkIGFuZAorY29tbWVudCBvbiB0aGUgY2hhbmdlcyB5b3UgYXJlIHN1Ym1pdHRpbmcuICBJdCBpcyBpbXBvcnRhbnQgZm9yCithIGRldmVsb3BlciB0byBiZSBhYmxlIHRvICJxdW90ZSIgeW91ciBjaGFuZ2VzLCB1c2luZyBzdGFuZGFyZAorZS1tYWlsIHRvb2xzLCBzbyB0aGF0IHRoZXkgbWF5IGNvbW1lbnQgb24gc3BlY2lmaWMgcG9ydGlvbnMgb2YKK3lvdXIgY29kZS4gIEZvciB0aGlzIHJlYXNvbiwgZWFjaCBwYXRjaCBzaG91bGQgYmUgc3VibWl0dGVkCisiaW5saW5lIiBpbiBhIHNlcGFyYXRlIG1lc3NhZ2UuCisKK011bHRpcGxlIHJlbGF0ZWQgcGF0Y2hlcyBzaG91bGQgYmUgZ3JvdXBlZCBpbnRvIHRoZWlyIG93biBlLW1haWwKK3RocmVhZCB0byBoZWxwIHJlYWRlcnMgZmluZCBhbGwgcGFydHMgb2YgdGhlIHNlcmllcy4gIFRvIHRoYXQgZW5kLAorc2VuZCB0aGVtIGFzIHJlcGxpZXMgdG8gZWl0aGVyIGFuIGFkZGl0aW9uYWwgImNvdmVyIGxldHRlciIgbWVzc2FnZQorKHNlZSBiZWxvdyksIHRoZSBmaXJzdCBwYXRjaCwgb3IgdGhlIHJlc3BlY3RpdmUgcHJlY2VkaW5nIHBhdGNoLgorCitJZiB5b3VyIGxvZyBtZXNzYWdlIChpbmNsdWRpbmcgeW91ciBuYW1lIG9uIHRoZQorU2lnbmVkLW9mZi1ieSBsaW5lKSBpcyBub3Qgd3JpdGFibGUgaW4gQVNDSUksIG1ha2Ugc3VyZSB0aGF0Cit5b3Ugc2VuZCBvZmYgYSBtZXNzYWdlIGluIHRoZSBjb3JyZWN0IGVuY29kaW5nLgorCitXQVJOSU5HOiBCZSB3YXJ5IG9mIHlvdXIgTVVBcyB3b3JkLXdyYXAKK2NvcnJ1cHRpbmcgeW91ciBwYXRjaC4gIERvIG5vdCBjdXQtbi1wYXN0ZSB5b3VyIHBhdGNoOyB5b3UgY2FuCitsb3NlIHRhYnMgdGhhdCB3YXkgaWYgeW91IGFyZSBub3QgY2FyZWZ1bC4KKworSXQgaXMgYSBjb21tb24gY29udmVudGlvbiB0byBwcmVmaXggeW91ciBzdWJqZWN0IGxpbmUgd2l0aAorW1BBVENIXS4gIFRoaXMgbGV0cyBwZW9wbGUgZWFzaWx5IGRpc3Rpbmd1aXNoIHBhdGNoZXMgZnJvbSBvdGhlcgorZS1tYWlsIGRpc2N1c3Npb25zLiAgVXNlIG9mIG1hcmtlcnMgaW4gYWRkaXRpb24gdG8gUEFUQ0ggd2l0aGluCit0aGUgYnJhY2tldHMgdG8gZGVzY3JpYmUgdGhlIG5hdHVyZSBvZiB0aGUgcGF0Y2ggaXMgYWxzbworZW5jb3VyYWdlZC4gIEUuZy4gW1JGQyBQQVRDSF0gKHdoZXJlIFJGQyBzdGFuZHMgZm9yICJyZXF1ZXN0IGZvcgorY29tbWVudHMiKSBpcyBvZnRlbiB1c2VkIHRvIGluZGljYXRlIGEgcGF0Y2ggbmVlZHMgZnVydGhlcgorZGlzY3Vzc2lvbiBiZWZvcmUgYmVpbmcgYWNjZXB0ZWQsIFtQQVRDSCB2Ml0sIFtQQVRDSCB2M10gZXRjLgorYXJlIG9mdGVuIHNlZW4gd2hlbiB5b3UgYXJlIHNlbmRpbmcgYW4gdXBkYXRlIHRvIHdoYXQgeW91IGhhdmUKK3ByZXZpb3VzbHkgc2VudC4KKworVGhlIGBnaXQgZm9ybWF0LXBhdGNoYCBjb21tYW5kIGZvbGxvd3MgdGhlIGJlc3QgY3VycmVudCBwcmFjdGljZSB0bworZm9ybWF0IHRoZSBib2R5IG9mIGFuIGUtbWFpbCBtZXNzYWdlLiAgQXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKK3BhdGNoIHNob3VsZCBjb21lIHlvdXIgY29tbWl0IG1lc3NhZ2UsIGVuZGluZyB3aXRoIHRoZQorU2lnbmVkLW9mZi1ieTogbGluZXMsIGFuZCBhIGxpbmUgdGhhdCBjb25zaXN0cyBvZiB0aHJlZSBkYXNoZXMsCitmb2xsb3dlZCBieSB0aGUgZGlmZnN0YXQgaW5mb3JtYXRpb24gYW5kIHRoZSBwYXRjaCBpdHNlbGYuICBJZgoreW91IGFyZSBmb3J3YXJkaW5nIGEgcGF0Y2ggZnJvbSBzb21lYm9keSBlbHNlLCBvcHRpb25hbGx5LCBhdAordGhlIGJlZ2lubmluZyBvZiB0aGUgZS1tYWlsIG1lc3NhZ2UganVzdCBiZWZvcmUgdGhlIGNvbW1pdAorbWVzc2FnZSBzdGFydHMsIHlvdSBjYW4gcHV0IGEgIkZyb206ICIgbGluZSB0byBuYW1lIHRoYXQgcGVyc29uLgorVG8gY2hhbmdlIHRoZSBkZWZhdWx0ICJbUEFUQ0hdIiBpbiB0aGUgc3ViamVjdCB0byAiWzx0ZXh0Pl0iLCB1c2UKK2BnaXQgZm9ybWF0LXBhdGNoIC0tc3ViamVjdC1wcmVmaXg9PHRleHQ+YC4gIEFzIGEgc2hvcnRjdXQsIHlvdQorY2FuIHVzZSBgLS1yZmNgIGluc3RlYWQgb2YgYC0tc3ViamVjdC1wcmVmaXg9IlJGQyBQQVRDSCJgLCBvcgorYC12IDxuPmAgaW5zdGVhZCBvZiBgLS1zdWJqZWN0LXByZWZpeD0iUEFUQ0ggdjxuPiJgLgorCitZb3Ugb2Z0ZW4gd2FudCB0byBhZGQgYWRkaXRpb25hbCBleHBsYW5hdGlvbiBhYm91dCB0aGUgcGF0Y2gsCitvdGhlciB0aGFuIHRoZSBjb21taXQgbWVzc2FnZSBpdHNlbGYuICBQbGFjZSBzdWNoICJjb3ZlciBsZXR0ZXIiCittYXRlcmlhbCBiZXR3ZWVuIHRoZSB0aHJlZS1kYXNoIGxpbmUgYW5kIHRoZSBkaWZmc3RhdC4gIEZvcgorcGF0Y2hlcyByZXF1aXJpbmcgbXVsdGlwbGUgaXRlcmF0aW9ucyBvZiByZXZpZXcgYW5kIGRpc2N1c3Npb24sCithbiBleHBsYW5hdGlvbiBvZiBjaGFuZ2VzIGJldHdlZW4gZWFjaCBpdGVyYXRpb24gY2FuIGJlIGtlcHQgaW4KK0dpdC1ub3RlcyBhbmQgaW5zZXJ0ZWQgYXV0b21hdGljYWxseSBmb2xsb3dpbmcgdGhlIHRocmVlLWRhc2gKK2xpbmUgdmlhIGBnaXQgZm9ybWF0LXBhdGNoIC0tbm90ZXNgLgorCitbW2F0dGFjaG1lbnRdXQorRG8gbm90IGF0dGFjaCB0aGUgcGF0Y2ggYXMgYSBNSU1FIGF0dGFjaG1lbnQsIGNvbXByZXNzZWQgb3Igbm90LgorRG8gbm90IGxldCB5b3VyIGUtbWFpbCBjbGllbnQgc2VuZCBxdW90ZWQtcHJpbnRhYmxlLiAgRG8gbm90IGxldAoreW91ciBlLW1haWwgY2xpZW50IHNlbmQgZm9ybWF0PWZsb3dlZCB3aGljaCB3b3VsZCBkZXN0cm95Cit3aGl0ZXNwYWNlcyBpbiB5b3VyIHBhdGNoZXMuIE1hbnkKK3BvcHVsYXIgZS1tYWlsIGFwcGxpY2F0aW9ucyB3aWxsIG5vdCBhbHdheXMgdHJhbnNtaXQgYSBNSU1FCithdHRhY2htZW50IGFzIHBsYWluIHRleHQsIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGNvbW1lbnQgb24KK3lvdXIgY29kZS4gIEEgTUlNRSBhdHRhY2htZW50IGFsc28gdGFrZXMgYSBiaXQgbW9yZSB0aW1lIHRvCitwcm9jZXNzLiAgVGhpcyBkb2VzIG5vdCBkZWNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiB5b3VyCitNSU1FLWF0dGFjaGVkIGNoYW5nZSBiZWluZyBhY2NlcHRlZCwgYnV0IGl0IG1ha2VzIGl0IG1vcmUgbGlrZWx5Cit0aGF0IGl0IHdpbGwgYmUgcG9zdHBvbmVkLgorCitFeGNlcHRpb246ICBJZiB5b3VyIG1haWxlciBpcyBtYW5nbGluZyBwYXRjaGVzIHRoZW4gc29tZW9uZSBtYXkgYXNrCit5b3UgdG8gcmUtc2VuZCB0aGVtIHVzaW5nIE1JTUUsIHRoYXQgaXMgT0suCisKK1tbcGdwLXNpZ25hdHVyZV1dCitEbyBub3QgUEdQIHNpZ24geW91ciBwYXRjaC4gTW9zdCBsaWtlbHksIHlvdXIgbWFpbnRhaW5lciBvciBvdGhlciBwZW9wbGUgb24gdGhlCitsaXN0IHdvdWxkIG5vdCBoYXZlIHlvdXIgUEdQIGtleSBhbmQgd291bGQgbm90IGJvdGhlciBvYnRhaW5pbmcgaXQgYW55d2F5LgorWW91ciBwYXRjaCBpcyBub3QganVkZ2VkIGJ5IHdobyB5b3UgYXJlOyBhIGdvb2QgcGF0Y2ggZnJvbSBhbiB1bmtub3duIG9yaWdpbgoraGFzIGEgZmFyIGJldHRlciBjaGFuY2Ugb2YgYmVpbmcgYWNjZXB0ZWQgdGhhbiBhIHBhdGNoIGZyb20gYSBrbm93biwgcmVzcGVjdGVkCitvcmlnaW4gdGhhdCBpcyBkb25lIHBvb3JseSBvciBkb2VzIGluY29ycmVjdCB0aGluZ3MuCisKK0lmIHlvdSByZWFsbHkgcmVhbGx5IHJlYWxseSByZWFsbHkgd2FudCB0byBkbyBhIFBHUCBzaWduZWQKK3BhdGNoLCBmb3JtYXQgaXQgYXMgIm11bHRpcGFydC9zaWduZWQiLCBub3QgYSB0ZXh0L3BsYWluIG1lc3NhZ2UKK3RoYXQgc3RhcnRzIHdpdGggYC0tLS0tQkVHSU4gUEdQIFNJR05FRCBNRVNTQUdFLS0tLS1gLiAgVGhhdCBpcworbm90IGEgdGV4dC9wbGFpbiwgaXQncyBzb21ldGhpbmcgZWxzZS4KKworOnNlY3VyaXR5LW1sLXJlZjogZm9vdG5vdGVyZWY6W3NlY3VyaXR5LW1sXQorCitBcyBtZW50aW9uZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VjdGlvbiwgcGF0Y2hlcyB0aGF0IG1heSBiZQorc2VjdXJpdHkgcmVsZXZhbnQgc2hvdWxkIG5vdCBiZSBzdWJtaXR0ZWQgdG8gdGhlIHB1YmxpYyBtYWlsaW5nIGxpc3QKK21lbnRpb25lZCBiZWxvdywgYnV0IHNob3VsZCBpbnN0ZWFkIGJlIHNlbnQgcHJpdmF0ZWx5IHRvIHRoZSBHaXQKK1NlY3VyaXR5IG1haWxpbmcgbGlzdHtzZWN1cml0eS1tbC1yZWZ9LgorCitTZW5kIHlvdXIgcGF0Y2ggd2l0aCAiVG86IiBzZXQgdG8gdGhlIG1haWxpbmcgbGlzdCwgd2l0aCAiY2M6IiBsaXN0aW5nCitwZW9wbGUgd2hvIGFyZSBpbnZvbHZlZCBpbiB0aGUgYXJlYSB5b3UgYXJlIHRvdWNoaW5nICh0aGUgYGdpdAorY29udGFjdHNgIGNvbW1hbmQgaW4gYGNvbnRyaWIvY29udGFjdHMvYCBjYW4gaGVscCB0bworaWRlbnRpZnkgdGhlbSksIHRvIHNvbGljaXQgY29tbWVudHMgYW5kIHJldmlld3MuCisKKzpjdXJyZW50LW1haW50YWluZXI6IGZvb3Rub3RlOltUaGUgY3VycmVudCBtYWludGFpbmVyOiBnaXRzdGVyQHBvYm94LmNvbV0KKzpnaXQtbWw6IGZvb3Rub3RlOltUaGUgbWFpbGluZyBsaXN0OiBnaXRAdmdlci5rZXJuZWwub3JnXQorCitBZnRlciB0aGUgbGlzdCByZWFjaGVkIGEgY29uc2Vuc3VzIHRoYXQgaXQgaXMgYSBnb29kIGlkZWEgdG8gYXBwbHkgdGhlCitwYXRjaCwgcmUtc2VuZCBpdCB3aXRoICJUbzoiIHNldCB0byB0aGUgbWFpbnRhaW5lcntjdXJyZW50LW1haW50YWluZXJ9IGFuZCAiY2M6IiB0aGUKK2xpc3R7Z2l0LW1sfSBmb3IgaW5jbHVzaW9uLgorCitEbyBub3QgZm9yZ2V0IHRvIGFkZCB0cmFpbGVycyBzdWNoIGFzIGBBY2tlZC1ieTpgLCBgUmV2aWV3ZWQtYnk6YCBhbmQKK2BUZXN0ZWQtYnk6YCBsaW5lcyBhcyBuZWNlc3NhcnkgdG8gY3JlZGl0IHBlb3BsZSB3aG8gaGVscGVkIHlvdXIKK3BhdGNoLgorCitbW3NpZ24tb2ZmXV0KKz09PSBDZXJ0aWZ5IHlvdXIgd29yayBieSBhZGRpbmcgeW91ciAiU2lnbmVkLW9mZi1ieTogIiBsaW5lCisKK1RvIGltcHJvdmUgdHJhY2tpbmcgb2Ygd2hvIGRpZCB3aGF0LCB3ZSd2ZSBib3Jyb3dlZCB0aGUKKyJzaWduLW9mZiIgcHJvY2VkdXJlIGZyb20gdGhlIExpbnV4IGtlcm5lbCBwcm9qZWN0IG9uIHBhdGNoZXMKK3RoYXQgYXJlIGJlaW5nIGVtYWlsZWQgYXJvdW5kLiAgQWx0aG91Z2ggY29yZSBHaXQgaXMgYSBsb3QKK3NtYWxsZXIgcHJvamVjdCBpdCBpcyBhIGdvb2QgZGlzY2lwbGluZSB0byBmb2xsb3cgaXQuCisKK1RoZSBzaWduLW9mZiBpcyBhIHNpbXBsZSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGV4cGxhbmF0aW9uIGZvcgordGhlIHBhdGNoLCB3aGljaCBjZXJ0aWZpZXMgdGhhdCB5b3Ugd3JvdGUgaXQgb3Igb3RoZXJ3aXNlIGhhdmUKK3RoZSByaWdodCB0byBwYXNzIGl0IG9uIGFzIGFuIG9wZW4tc291cmNlIHBhdGNoLiAgVGhlIHJ1bGVzIGFyZQorcHJldHR5IHNpbXBsZTogaWYgeW91IGNhbiBjZXJ0aWZ5IHRoZSBiZWxvdyBELUMtTzoKKworW1tkY29dXQorLkRldmVsb3BlcidzIENlcnRpZmljYXRlIG9mIE9yaWdpbiAxLjEKK19fX18KK0J5IG1ha2luZyBhIGNvbnRyaWJ1dGlvbiB0byB0aGlzIHByb2plY3QsIEkgY2VydGlmeSB0aGF0OgorCithLiBUaGUgY29udHJpYnV0aW9uIHdhcyBjcmVhdGVkIGluIHdob2xlIG9yIGluIHBhcnQgYnkgbWUgYW5kIEkKKyAgIGhhdmUgdGhlIHJpZ2h0IHRvIHN1Ym1pdCBpdCB1bmRlciB0aGUgb3BlbiBzb3VyY2UgbGljZW5zZQorICAgaW5kaWNhdGVkIGluIHRoZSBmaWxlOyBvcgorCitiLiBUaGUgY29udHJpYnV0aW9uIGlzIGJhc2VkIHVwb24gcHJldmlvdXMgd29yayB0aGF0LCB0byB0aGUgYmVzdAorICAgb2YgbXkga25vd2xlZGdlLCBpcyBjb3ZlcmVkIHVuZGVyIGFuIGFwcHJvcHJpYXRlIG9wZW4gc291cmNlCisgICBsaWNlbnNlIGFuZCBJIGhhdmUgdGhlIHJpZ2h0IHVuZGVyIHRoYXQgbGljZW5zZSB0byBzdWJtaXQgdGhhdAorICAgd29yayB3aXRoIG1vZGlmaWNhdGlvbnMsIHdoZXRoZXIgY3JlYXRlZCBpbiB3aG9sZSBvciBpbiBwYXJ0CisgICBieSBtZSwgdW5kZXIgdGhlIHNhbWUgb3BlbiBzb3VyY2UgbGljZW5zZSAodW5sZXNzIEkgYW0KKyAgIHBlcm1pdHRlZCB0byBzdWJtaXQgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSksIGFzIGluZGljYXRlZAorICAgaW4gdGhlIGZpbGU7IG9yCisKK2MuIFRoZSBjb250cmlidXRpb24gd2FzIHByb3ZpZGVkIGRpcmVjdGx5IHRvIG1lIGJ5IHNvbWUgb3RoZXIKKyAgIHBlcnNvbiB3aG8gY2VydGlmaWVkIChhKSwgKGIpIG9yIChjKSBhbmQgSSBoYXZlIG5vdCBtb2RpZmllZAorICAgaXQuCisKK2QuIEkgdW5kZXJzdGFuZCBhbmQgYWdyZWUgdGhhdCB0aGlzIHByb2plY3QgYW5kIHRoZSBjb250cmlidXRpb24KKyAgIGFyZSBwdWJsaWMgYW5kIHRoYXQgYSByZWNvcmQgb2YgdGhlIGNvbnRyaWJ1dGlvbiAoaW5jbHVkaW5nIGFsbAorICAgcGVyc29uYWwgaW5mb3JtYXRpb24gSSBzdWJtaXQgd2l0aCBpdCwgaW5jbHVkaW5nIG15IHNpZ24tb2ZmKSBpcworICAgbWFpbnRhaW5lZCBpbmRlZmluaXRlbHkgYW5kIG1heSBiZSByZWRpc3RyaWJ1dGVkIGNvbnNpc3RlbnQgd2l0aAorICAgdGhpcyBwcm9qZWN0IG9yIHRoZSBvcGVuIHNvdXJjZSBsaWNlbnNlKHMpIGludm9sdmVkLgorX19fXworCit0aGVuIHlvdSBqdXN0IGFkZCBhIGxpbmUgc2F5aW5nCisKKy4uLi4KKwlTaWduZWQtb2ZmLWJ5OiBSYW5kb20gSiBEZXZlbG9wZXIgPHJhbmRvbUBkZXZlbG9wZXIuZXhhbXBsZS5vcmc+CisuLi4uCisKK1RoaXMgbGluZSBjYW4gYmUgYXV0b21hdGljYWxseSBhZGRlZCBieSBHaXQgaWYgeW91IHJ1biB0aGUgZ2l0LWNvbW1pdAorY29tbWFuZCB3aXRoIHRoZSAtcyBvcHRpb24uCisKK05vdGljZSB0aGF0IHlvdSBjYW4gcGxhY2UgeW91ciBvd24gU2lnbmVkLW9mZi1ieTogbGluZSB3aGVuCitmb3J3YXJkaW5nIHNvbWVib2R5IGVsc2UncyBwYXRjaCB3aXRoIHRoZSBhYm92ZSBydWxlcyBmb3IKK0QtQy1PLiAgSW5kZWVkIHlvdSBhcmUgZW5jb3VyYWdlZCB0byBkbyBzby4gIERvIG5vdCBmb3JnZXQgdG8KK3BsYWNlIGFuIGluLWJvZHkgIkZyb206ICIgbGluZSBhdCB0aGUgYmVnaW5uaW5nIHRvIHByb3Blcmx5IGF0dHJpYnV0ZQordGhlIGNoYW5nZSB0byBpdHMgdHJ1ZSBhdXRob3IgKHNlZSAoMikgYWJvdmUpLgorCitbW3JlYWwtbmFtZV1dCitBbHNvIG5vdGljZSB0aGF0IGEgcmVhbCBuYW1lIGlzIHVzZWQgaW4gdGhlIFNpZ25lZC1vZmYtYnk6IGxpbmUuIFBsZWFzZQorZG9uJ3QgaGlkZSB5b3VyIHJlYWwgbmFtZS4KKworW1tjb21taXQtdHJhaWxlcnNdXQorSWYgeW91IGxpa2UsIHlvdSBjYW4gcHV0IGV4dHJhIHRhZ3MgYXQgdGhlIGVuZDoKKworLiBgUmVwb3J0ZWQtYnk6YCBpcyB1c2VkIHRvIGNyZWRpdCBzb21lb25lIHdobyBmb3VuZCB0aGUgYnVnIHRoYXQKKyAgdGhlIHBhdGNoIGF0dGVtcHRzIHRvIGZpeC4KKy4gYEFja2VkLWJ5OmAgc2F5cyB0aGF0IHRoZSBwZXJzb24gd2hvIGlzIG1vcmUgZmFtaWxpYXIgd2l0aCB0aGUgYXJlYQorICB0aGUgcGF0Y2ggYXR0ZW1wdHMgdG8gbW9kaWZ5IGxpa2VkIHRoZSBwYXRjaC4KKy4gYFJldmlld2VkLWJ5OmAsIHVubGlrZSB0aGUgb3RoZXIgdGFncywgY2FuIG9ubHkgYmUgb2ZmZXJlZCBieSB0aGUKKyAgcmV2aWV3ZXIgYW5kIG1lYW5zIHRoYXQgc2hlIGlzIGNvbXBsZXRlbHkgc2F0aXNmaWVkIHRoYXQgdGhlIHBhdGNoCisgIGlzIHJlYWR5IGZvciBhcHBsaWNhdGlvbi4gIEl0IGlzIHVzdWFsbHkgb2ZmZXJlZCBvbmx5IGFmdGVyIGEKKyAgZGV0YWlsZWQgcmV2aWV3LgorLiBgVGVzdGVkLWJ5OmAgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwZXJzb24gYXBwbGllZCB0aGUgcGF0Y2gKKyAgYW5kIGZvdW5kIGl0IHRvIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LgorCitZb3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIHRhZyBvciB1c2Ugb25lIHRoYXQncyBpbiBjb21tb24gdXNhZ2UKK3N1Y2ggYXMgIlRoYW5rcy10bzoiLCAiQmFzZWQtb24tcGF0Y2gtYnk6Iiwgb3IgIk1lbnRvcmVkLWJ5OiIuCisKKz09IFN1YnN5c3RlbXMgd2l0aCBkZWRpY2F0ZWQgbWFpbnRhaW5lcnMKKworU29tZSBwYXJ0cyBvZiB0aGUgc3lzdGVtIGhhdmUgZGVkaWNhdGVkIG1haW50YWluZXJzIHdpdGggdGhlaXIgb3duCityZXBvc2l0b3JpZXMuCisKKy0gYGdpdC1ndWkvYCBjb21lcyBmcm9tIGdpdC1ndWkgcHJvamVjdCwgbWFpbnRhaW5lZCBieSBQcmF0eXVzaCBZYWRhdjoKKworCWh0dHBzOi8vZ2l0aHViLmNvbS9wcmF0aTAxMDAvZ2l0LWd1aS5naXQKKworLSBgZ2l0ay1naXQvYCBjb21lcyBmcm9tIFBhdWwgTWFja2VycmFzJ3MgZ2l0ayBwcm9qZWN0OgorCisJZ2l0Oi8vb3psYWJzLm9yZy9+cGF1bHVzL2dpdGsKKworLSBgcG8vYCBjb21lcyBmcm9tIHRoZSBsb2NhbGl6YXRpb24gY29vcmRpbmF0b3IsIEppYW5nIFhpbjoKKworCWh0dHBzOi8vZ2l0aHViLmNvbS9naXQtbDEwbi9naXQtcG8vCisKK1BhdGNoZXMgdG8gdGhlc2UgcGFydHMgc2hvdWxkIGJlIGJhc2VkIG9uIHRoZWlyIHRyZWVzLgorCitbW3BhdGNoLWZsb3ddXQorPT0gQW4gaWRlYWwgcGF0Y2ggZmxvdworCitIZXJlIGlzIGFuIGlkZWFsIHBhdGNoIGZsb3cgZm9yIHRoaXMgcHJvamVjdCB0aGUgY3VycmVudCBtYWludGFpbmVyCitzdWdnZXN0cyB0byB0aGUgY29udHJpYnV0b3JzOgorCisuIFlvdSBjb21lIHVwIHdpdGggYW4gaXRjaC4gIFlvdSBjb2RlIGl0IHVwLgorCisuIFNlbmQgaXQgdG8gdGhlIGxpc3QgYW5kIGNjIHBlb3BsZSB3aG8gbWF5IG5lZWQgdG8ga25vdyBhYm91dAorICB0aGUgY2hhbmdlLgorKworVGhlIHBlb3BsZSB3aG8gbWF5IG5lZWQgdG8ga25vdyBhcmUgdGhlIG9uZXMgd2hvc2UgY29kZSB5b3UKK2FyZSBidXRjaGVyaW5nLiAgVGhlc2UgcGVvcGxlIGhhcHBlbiB0byBiZSB0aGUgb25lcyB3aG8gYXJlCittb3N0IGxpa2VseSB0byBiZSBrbm93bGVkZ2VhYmxlIGVub3VnaCB0byBoZWxwIHlvdSwgYnV0Cit0aGV5IGhhdmUgbm8gb2JsaWdhdGlvbiB0byBoZWxwIHlvdSAoaS5lLiB5b3UgYXNrIGZvciBoZWxwLAorZG9uJ3QgZGVtYW5kKS4gICtnaXQgbG9nIC1wIHtsaXRkZH0gXyRhcmVhX3lvdV9hcmVfbW9kaWZ5aW5nXysgd291bGQKK2hlbHAgeW91IGZpbmQgb3V0IHdobyB0aGV5IGFyZS4KKworLiBZb3UgZ2V0IGNvbW1lbnRzIGFuZCBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnRzLiAgWW91IG1heQorICBldmVuIGdldCB0aGVtIGluIGFuICJvbiB0b3Agb2YgeW91ciBjaGFuZ2UiIHBhdGNoIGZvcm0uCisKKy4gUG9saXNoLCByZWZpbmUsIGFuZCByZS1zZW5kIHRvIHRoZSBsaXN0IGFuZCB0aGUgcGVvcGxlIHdobworICBzcGVuZCB0aGVpciB0aW1lIHRvIGltcHJvdmUgeW91ciBwYXRjaC4gIEdvIGJhY2sgdG8gc3RlcCAoMikuCisKKy4gVGhlIGxpc3QgZm9ybXMgY29uc2Vuc3VzIHRoYXQgdGhlIGxhc3Qgcm91bmQgb2YgeW91ciBwYXRjaCBpcworICBnb29kLiAgU2VuZCBpdCB0byB0aGUgbWFpbnRhaW5lciBhbmQgY2MgdGhlIGxpc3QuCisKKy4gQSB0b3BpYyBicmFuY2ggaXMgY3JlYXRlZCB3aXRoIHRoZSBwYXRjaCBhbmQgaXMgbWVyZ2VkIHRvIGBuZXh0YCwKKyAgYW5kIGNvb2tlZCBmdXJ0aGVyIGFuZCBldmVudHVhbGx5IGdyYWR1YXRlcyB0byBgbWFzdGVyYC4KKworSW4gYW55IHRpbWUgYmV0d2VlbiB0aGUgKDIpLSgzKSBjeWNsZSwgdGhlIG1haW50YWluZXIgbWF5IHBpY2sgaXQgdXAKK2Zyb20gdGhlIGxpc3QgYW5kIHF1ZXVlIGl0IHRvIGBwdWAsIGluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvcgorcGVvcGxlIHBsYXkgd2l0aCBpdCB3aXRob3V0IGhhdmluZyB0byBwaWNrIHVwIGFuZCBhcHBseSB0aGUgcGF0Y2ggdG8KK3RoZWlyIHRyZWVzIHRoZW1zZWx2ZXMuCisKK1tbcGF0Y2gtc3RhdHVzXV0KKz09IEtub3cgdGhlIHN0YXR1cyBvZiB5b3VyIHBhdGNoIGFmdGVyIHN1Ym1pc3Npb24KKworKiBZb3UgY2FuIHVzZSBHaXQgaXRzZWxmIHRvIGZpbmQgb3V0IHdoZW4geW91ciBwYXRjaCBpcyBtZXJnZWQgaW4KKyAgbWFzdGVyLiBgZ2l0IHB1bGwgLS1yZWJhc2VgIHdpbGwgYXV0b21hdGljYWxseSBza2lwIGFscmVhZHktYXBwbGllZAorICBwYXRjaGVzLCBhbmQgd2lsbCBsZXQgeW91IGtub3cuIFRoaXMgd29ya3Mgb25seSBpZiB5b3UgcmViYXNlIG9uIHRvcAorICBvZiB0aGUgYnJhbmNoIGluIHdoaWNoIHlvdXIgcGF0Y2ggaGFzIGJlZW4gbWVyZ2VkIChpLmUuIGl0IHdpbGwgbm90CisgIHRlbGwgeW91IGlmIHlvdXIgcGF0Y2ggaXMgbWVyZ2VkIGluIHB1IGlmIHlvdSByZWJhc2Ugb24gdG9wIG9mCisgIG1hc3RlcikuCisKKyogUmVhZCB0aGUgR2l0IG1haWxpbmcgbGlzdCwgdGhlIG1haW50YWluZXIgcmVndWxhcmx5IHBvc3RzIG1lc3NhZ2VzCisgIGVudGl0bGVkICJXaGF0J3MgY29va2luZyBpbiBnaXQuZ2l0IiBhbmQgIldoYXQncyBpbiBnaXQuZ2l0IiBnaXZpbmcKKyAgdGhlIHN0YXR1cyBvZiB2YXJpb3VzIHByb3Bvc2VkIGNoYW5nZXMuCisKK1tbdHJhdmlzXV0KKz09IEdpdEh1Yi1UcmF2aXMgQ0kgaGludHMKKworV2l0aCBhbiBhY2NvdW50IGF0IEdpdEh1YiAoeW91IGNhbiBnZXQgb25lIGZvciBmcmVlIHRvIHdvcmsgb24gb3Blbgorc291cmNlIHByb2plY3RzKSwgeW91IGNhbiB1c2UgVHJhdmlzIENJIHRvIHRlc3QgeW91ciBjaGFuZ2VzIG9uIExpbnV4LAorTWFjIChhbmQgaG9wZWZ1bGx5IHNvb24gV2luZG93cykuICBZb3UgY2FuIGZpbmQgYSBzdWNjZXNzZnVsIGV4YW1wbGUKK3Rlc3QgYnVpbGQgaGVyZTogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2dpdC9naXQvYnVpbGRzLzEyMDQ3MzIwOQorCitGb2xsb3cgdGhlc2Ugc3RlcHMgZm9yIHRoZSBpbml0aWFsIHNldHVwOgorCisuIEZvcmsgaHR0cHM6Ly9naXRodWIuY29tL2dpdC9naXQgdG8geW91ciBHaXRIdWIgYWNjb3VudC4KKyAgWW91IGNhbiBmaW5kIGRldGFpbGVkIGluc3RydWN0aW9ucyBob3cgdG8gZm9yayBoZXJlOgorICBodHRwczovL2hlbHAuZ2l0aHViLmNvbS9hcnRpY2xlcy9mb3JrLWEtcmVwby8KKworLiBPcGVuIHRoZSBUcmF2aXMgQ0kgd2Vic2l0ZTogaHR0cHM6Ly90cmF2aXMtY2kub3JnCisKKy4gUHJlc3MgdGhlICJTaWduIGluIHdpdGggR2l0SHViIiBidXR0b24uCisKKy4gR3JhbnQgVHJhdmlzIENJIHBlcm1pc3Npb25zIHRvIGFjY2VzcyB5b3VyIEdpdEh1YiBhY2NvdW50LgorICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMgaGVyZToKKyAgaHR0cHM6Ly9kb2NzLnRyYXZpcy1jaS5jb20vdXNlci9naXRodWItb2F1dGgtc2NvcGVzCisKKy4gT3BlbiB5b3VyIFRyYXZpcyBDSSBwcm9maWxlIHBhZ2U6IGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9wcm9maWxlCisKKy4gRW5hYmxlIFRyYXZpcyBDSSBidWlsZHMgZm9yIHlvdXIgR2l0IGZvcmsuCisKK0FmdGVyIHRoZSBpbml0aWFsIHNldHVwLCBUcmF2aXMgQ0kgd2lsbCBydW4gd2hlbmV2ZXIgeW91IHB1c2ggbmV3IGNoYW5nZXMKK3RvIHlvdXIgZm9yayBvZiBHaXQgb24gR2l0SHViLiAgWW91IGNhbiBtb25pdG9yIHRoZSB0ZXN0IHN0YXRlIG9mIGFsbCB5b3VyCiticmFuY2hlcyBoZXJlOiBodHRwczovL3RyYXZpcy1jaS5vcmcvX188WW91ciBHaXRIdWIgaGFuZGxlPl9fL2dpdC9icmFuY2hlcworCitJZiBhIGJyYW5jaCBkaWQgbm90IHBhc3MgYWxsIHRlc3QgY2FzZXMgdGhlbiBpdCBpcyBtYXJrZWQgd2l0aCBhIHJlZAorY3Jvc3MuICBJbiB0aGF0IGNhc2UgeW91IGNhbiBjbGljayBvbiB0aGUgZmFpbGluZyBUcmF2aXMgQ0kgam9iIGFuZAorc2Nyb2xsIGFsbCB0aGUgd2F5IGRvd24gaW4gdGhlIGxvZy4gIEZpbmQgdGhlIGxpbmUgIjwtLSBDbGljayBoZXJlIHRvIHNlZQorZGV0YWlsZWQgdGVzdCBvdXRwdXQhIiBhbmQgY2xpY2sgb24gdGhlIHRyaWFuZ2xlIG5leHQgdG8gdGhlIGxvZyBsaW5lCitudW1iZXIgdG8gZXhwYW5kIHRoZSBkZXRhaWxlZCB0ZXN0IG91dHB1dC4gIEhlcmUgaXMgc3VjaCBhIGZhaWxpbmcKK2V4YW1wbGU6IGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9naXQvZ2l0L2pvYnMvMTIyNjc2MTg3CisKK0ZpeCB0aGUgcHJvYmxlbSBhbmQgcHVzaCB5b3VyIGZpeCB0byB5b3VyIEdpdCBmb3JrLiAgVGhpcyB3aWxsIHRyaWdnZXIKK2EgbmV3IFRyYXZpcyBDSSBidWlsZCB0byBlbnN1cmUgYWxsIHRlc3RzIHBhc3MuCisKK1tbbXVhXV0KKz09IE1VQSBzcGVjaWZpYyBoaW50cworCitTb21lIG9mIHBhdGNoZXMgSSByZWNlaXZlIG9yIHBpY2sgdXAgZnJvbSB0aGUgbGlzdCBzaGFyZSBjb21tb24KK3BhdHRlcm5zIG9mIGJyZWFrYWdlLiAgUGxlYXNlIG1ha2Ugc3VyZSB5b3VyIE1VQSBpcyBzZXQgdXAKK3Byb3Blcmx5IG5vdCB0byBjb3JydXB0IHdoaXRlc3BhY2VzLgorCitTZWUgdGhlIERJU0NVU1NJT04gc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gZm9yIGhpbnRzIG9uCitjaGVja2luZyB5b3VyIHBhdGNoIGJ5IG1haWxpbmcgaXQgdG8geW91cnNlbGYgYW5kIGFwcGx5aW5nIHdpdGgKK2xpbmtnaXQ6Z2l0LWFtWzFdLgorCitXaGlsZSB5b3UgYXJlIGF0IGl0LCBjaGVjayB0aGUgcmVzdWx0aW5nIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tCithIHRyaWFsIHJ1biBvZiBhcHBseWluZyB0aGUgcGF0Y2guICBJZiB3aGF0IGlzIGluIHRoZSByZXN1bHRpbmcKK2NvbW1pdCBpcyBub3QgZXhhY3RseSB3aGF0IHlvdSB3b3VsZCB3YW50IHRvIHNlZSwgaXQgaXMgdmVyeQorbGlrZWx5IHRoYXQgeW91ciBtYWludGFpbmVyIHdvdWxkIGVuZCB1cCBoYW5kIGVkaXRpbmcgdGhlIGxvZworbWVzc2FnZSB3aGVuIGhlIGFwcGxpZXMgeW91ciBwYXRjaC4gIFRoaW5ncyBsaWtlICJIaSwgdGhpcyBpcyBteQorZmlyc3QgcGF0Y2guXG4iLCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcHV0IGluIHRoZSBwYXRjaCBlLW1haWwsCitzaG91bGQgY29tZSBhZnRlciB0aGUgdGhyZWUtZGFzaCBsaW5lIHRoYXQgc2lnbmFscyB0aGUgZW5kIG9mIHRoZQorY29tbWl0IG1lc3NhZ2UuCisKKworPT09IFBpbmUKKworKEpvaGFubmVzIFNjaGluZGVsaW4pCisKKy4uLi4KK0kgZG9uJ3Qga25vdyBob3cgbWFueSBwZW9wbGUgc3RpbGwgdXNlIHBpbmUsIGJ1dCBmb3IgdGhvc2UgcG9vcgorc291bHMgaXQgbWF5IGJlIGdvb2QgdG8gbWVudGlvbiB0aGF0IHRoZSBxdWVsbC1mbG93ZWQtdGV4dCBpcworbmVlZGVkIGZvciByZWNlbnQgdmVyc2lvbnMuCisKKy4uLiB0aGUgIm5vLXN0cmlwLXdoaXRlc3BhY2UtYmVmb3JlLXNlbmQiIG9wdGlvbiwgdG9vLiBBRkFJSyBpdAord2FzIGludHJvZHVjZWQgaW4gNC42MC4KKy4uLi4KKworKExpbnVzIFRvcnZhbGRzKQorCisuLi4uCitBbmQgNC41OCBuZWVkcyBhdCBsZWFzdCB0aGlzLgorCitkaWZmLXRyZWUgODMyNmRkODM1MGJlNjRhYzdmYzgwNWY2NTYzYTFkNjFhZDEwZDMyYyAoZnJvbSBlODg2YTYxZjc2ZWRmNTQxMDU3M2U5MmUzOGNlMjI5NzRmOWM0MGYxKQorQXV0aG9yOiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAZzUub3NkbC5vcmc+CitEYXRlOiAgIE1vbiBBdWcgMTUgMTc6MjM6NTEgMjAwNSAtMDcwMAorCisgICAgRml4IHBpbmUgd2hpdGVzcGFjZS1jb3JydXB0aW9uIGJ1ZworCisgICAgVGhlcmUncyBubyBleGN1c2UgZm9yIHVuY29uZGl0aW9uYWxseSByZW1vdmluZyB3aGl0ZXNwYWNlIGZyb20KKyAgICB0aGUgcGljbyBidWZmZXJzIG9uIGNsb3NlLgorCitkaWZmIC0tZ2l0IGEvcGljby9waWNvLmMgYi9waWNvL3BpY28uYworLS0tIGEvcGljby9waWNvLmMKKysrKyBiL3BpY28vcGljby5jCitAQCAtMjE5LDcgKzIxOSw5IEBAIFBJQ08gKnBtOworCSAgICBzd2l0Y2gocGljb19hbGxfZG9uZSl7CS8qIHByZXBhcmUgZm9yL2hhbmRsZSBmaW5hbCBldmVudHMgKi8KKwkgICAgICBjYXNlIENPTVBfRVhJVCA6CQkvKiBhbHJlYWR5IGNvbmZpcm1lZCAqLworCQlwYWNraGVhZGVyKCk7CisrI2lmIDAKKwkJc3RyaXB3aGl0ZXNwYWNlKCk7CisrI2VuZGlmCisJCWMgfD0gQ09NUF9FWElUOworCQlicmVhazsKKy4uLi4KKworKERhbmllbCBCYXJrYWxvdykKKworLi4uLgorPiBBIHBhdGNoIHRvIFN1Ym1pdHRpbmdQYXRjaGVzLCBNVUEgc3BlY2lmaWMgaGVscCBzZWN0aW9uIGZvcgorPiB1c2VycyBvZiBQaW5lIDQuNjMgd291bGQgYmUgdmVyeSBtdWNoIGFwcHJlY2lhdGVkLgorCitBaCwgaXQgbG9va3MgbGlrZSBhIHJlY2VudCB2ZXJzaW9uIGNoYW5nZWQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgdG8gZG8gdGhlCityaWdodCB0aGluZywgYW5kIGludmVydGVkIHRoZSBzZW5zZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24uIChFaXRoZXIKK3RoYXQgb3IgR2VudG9vIGRpZCBpdC4pIFNvIHlvdSBuZWVkIHRvIHNldCB0aGUKKyJuby1zdHJpcC13aGl0ZXNwYWNlLWJlZm9yZS1zZW5kIiBvcHRpb24sIHVubGVzcyB0aGUgb3B0aW9uIHlvdSBoYXZlIGlzCisic3RyaXAtd2hpdGVzcGFjZS1iZWZvcmUtc2VuZCIsIGluIHdoaWNoIGNhc2UgeW91IHNob3VsZCBhdm9pZCBjaGVja2luZworaXQuCisuLi4uCisKKz09PSBUaHVuZGVyYmlyZCwgS01haWwsIEdNYWlsCisKK1NlZSB0aGUgTVVBLVNQRUNJRklDIEhJTlRTIHNlY3Rpb24gb2YgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLgorCis9PT0gR251cworCisifCIgaW4gdGhlIGAqU3VtbWFyeSpgIGJ1ZmZlciBjYW4gYmUgdXNlZCB0byBwaXBlIHRoZSBjdXJyZW50CittZXNzYWdlIHRvIGFuIGV4dGVybmFsIHByb2dyYW0sIGFuZCB0aGlzIGlzIGEgaGFuZHkgd2F5IHRvIGRyaXZlCitgZ2l0IGFtYC4gIEhvd2V2ZXIsIGlmIHRoZSBtZXNzYWdlIGlzIE1JTUUgZW5jb2RlZCwgd2hhdCBpcworcGlwZWQgaW50byB0aGUgcHJvZ3JhbSBpcyB0aGUgcmVwcmVzZW50YXRpb24geW91IHNlZSBpbiB5b3VyCitgKkFydGljbGUqYCBidWZmZXIgYWZ0ZXIgdW53cmFwcGluZyBNSU1FLiAgVGhpcyBpcyBvZnRlbiBub3Qgd2hhdAoreW91IHdvdWxkIHdhbnQgZm9yIHR3byByZWFzb25zLiAgSXQgdGVuZHMgdG8gc2NyZXcgdXAgbm9uIEFTQ0lJCitjaGFyYWN0ZXJzIChtb3N0IG5vdGFibHkgaW4gcGVvcGxlJ3MgbmFtZXMpLCBhbmQgYWxzbword2hpdGVzcGFjZXMgKGZhdGFsIGluIHBhdGNoZXMpLiAgUnVubmluZyAiQy11IGciIHRvIGRpc3BsYXkgdGhlCittZXNzYWdlIGluIHJhdyBmb3JtIGJlZm9yZSB1c2luZyAifCIgdG8gcnVuIHRoZSBwaXBlIGNhbiB3b3JrCit0aGlzIHByb2JsZW0gYXJvdW5kLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hc2NpaWRvYy5jb25mIGIvRG9jdW1lbnRhdGlvbi9hc2NpaWRvYy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNGMxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FzY2lpZG9jLmNvbmYKQEAgLTAsMCArMSw3OCBAQAorIyMgbGlua2dpdDogbWFjcm8KKyMKKyMgVXNhZ2U6IGxpbmtnaXQ6Y29tbWFuZFttYW5wYWdlLXNlY3Rpb25dCisjCisjIE5vdGUsIHswfSBpcyB0aGUgbWFucGFnZSBzZWN0aW9uLCB3aGlsZSB7dGFyZ2V0fSBpcyB0aGUgY29tbWFuZC4KKyMKKyMgU2hvdyBHaXQgbGluayBhczogPGNvbW1hbmQ+KDxzZWN0aW9uPik7IGlmIHNlY3Rpb24gaXMgZGVmaW5lZCwgZWxzZSBqdXN0IHNob3cKKyMgdGhlIGNvbW1hbmQuCisKK1ttYWNyb3NdCisoP3N1KVtcXF0/KD9QPG5hbWU+bGlua2dpdCk6KD9QPHRhcmdldD5cUyo/KVxbKD9QPGF0dHJsaXN0Pi4qPylcXT0KKworW2F0dHJpYnV0ZXNdCithc3Rlcmlzaz0mIzQyOworcGx1cz0mIzQzOworY2FyZXQ9JiM5NDsKK3N0YXJ0c2I9JiM5MTsKK2VuZHNiPSYjOTM7CitiYWNrc2xhc2g9JiM5MjsKK3RpbGRlPSYjMTI2OworYXBvc3Ryb3BoZT0mIzM5OworYmFja3RpY2s9JiM5NjsKK2xpdGRkPSYjNDU7JiM0NTsKKworaWZkZWY6OmJhY2tlbmQtZG9jYm9va1tdCitbbGlua2dpdC1pbmxpbmVtYWNyb10KK3swJXt0YXJnZXR9fQorezAjPGNpdGVyZWZlbnRyeT59Cit7MCM8cmVmZW50cnl0aXRsZT57dGFyZ2V0fTwvcmVmZW50cnl0aXRsZT48bWFudm9sbnVtPnswfTwvbWFudm9sbnVtPn0KK3swIzwvY2l0ZXJlZmVudHJ5Pn0KK2VuZGlmOjpiYWNrZW5kLWRvY2Jvb2tbXQorCitpZmRlZjo6YmFja2VuZC1kb2Nib29rW10KK2lmZGVmOjpkb2N0eXBlLW1hbnBhZ2VbXQorIyBUaGUgZm9sbG93aW5nIHR3byBzbWFsbCB3b3JrYXJvdW5kcyBpbnNlcnQgYSBzaW1wbGUgcGFyYWdyYXBoIGFmdGVyIHNjcmVlbgorW2xpc3RpbmdibG9ja10KKzxleGFtcGxlPjx0aXRsZT57dGl0bGV9PC90aXRsZT4KKzxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KK3wKKzwvbGl0ZXJhbGxheW91dD48c2ltcGFyYT48L3NpbXBhcmE+Cit7dGl0bGUjfTwvZXhhbXBsZT4KKworW3ZlcnNlYmxvY2tdCis8Zm9ybWFscGFyYXtpZD8gaWQ9IntpZH0ifT48dGl0bGU+e3RpdGxlfTwvdGl0bGU+PHBhcmE+Cit7dGl0bGUlfTxsaXRlcmFsbGF5b3V0e2lkPyBpZD0ie2lkfSJ9Pgore3RpdGxlI308bGl0ZXJhbGxheW91dD4KK3wKKzwvbGl0ZXJhbGxheW91dD4KK3t0aXRsZSN9PC9wYXJhPjwvZm9ybWFscGFyYT4KK3t0aXRsZSV9PHNpbXBhcmE+PC9zaW1wYXJhPgorZW5kaWY6OmRvY3R5cGUtbWFucGFnZVtdCitlbmRpZjo6YmFja2VuZC1kb2Nib29rW10KKworaWZkZWY6OmRvY3R5cGUtbWFucGFnZVtdCitpZmRlZjo6YmFja2VuZC1kb2Nib29rW10KK1toZWFkZXJdCit0ZW1wbGF0ZTo6W2hlYWRlci1kZWNsYXJhdGlvbnNdCis8cmVmZW50cnk+Cis8cmVmbWV0YT4KKzxyZWZlbnRyeXRpdGxlPnttYW50aXRsZX08L3JlZmVudHJ5dGl0bGU+Cis8bWFudm9sbnVtPnttYW52b2xudW19PC9tYW52b2xudW0+Cis8cmVmbWlzY2luZm8gY2xhc3M9InNvdXJjZSI+e21hbnNvdXJjZX08L3JlZm1pc2NpbmZvPgorPHJlZm1pc2NpbmZvIGNsYXNzPSJ2ZXJzaW9uIj57bWFudmVyc2lvbn08L3JlZm1pc2NpbmZvPgorPHJlZm1pc2NpbmZvIGNsYXNzPSJtYW51YWwiPnttYW5tYW51YWx9PC9yZWZtaXNjaW5mbz4KKzwvcmVmbWV0YT4KKzxyZWZuYW1lZGl2PgorICA8cmVmbmFtZT57bWFubmFtZX08L3JlZm5hbWU+CisgIDxyZWZwdXJwb3NlPnttYW5wdXJwb3NlfTwvcmVmcHVycG9zZT4KKzwvcmVmbmFtZWRpdj4KK2VuZGlmOjpiYWNrZW5kLWRvY2Jvb2tbXQorZW5kaWY6OmRvY3R5cGUtbWFucGFnZVtdCisKK2lmZGVmOjpiYWNrZW5kLXhodG1sMTFbXQorW2F0dHJpYnV0ZXNdCitnaXQtcmVsYXRpdmUtaHRtbC1wcmVmaXg9CitbbGlua2dpdC1pbmxpbmVtYWNyb10KKzxhIGhyZWY9IntnaXQtcmVsYXRpdmUtaHRtbC1wcmVmaXh9e3RhcmdldH0uaHRtbCI+e3RhcmdldH17MD8oezB9KX08L2E+CitlbmRpZjo6YmFja2VuZC14aHRtbDExW10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXNjaWlkb2N0b3ItZXh0ZW5zaW9ucy5yYiBiL0RvY3VtZW50YXRpb24vYXNjaWlkb2N0b3ItZXh0ZW5zaW9ucy5yYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTA2YTAwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hc2NpaWRvY3Rvci1leHRlbnNpb25zLnJiCkBAIC0wLDAgKzEsNDggQEAKK3JlcXVpcmUgJ2FzY2lpZG9jdG9yJworcmVxdWlyZSAnYXNjaWlkb2N0b3IvZXh0ZW5zaW9ucycKKworbW9kdWxlIEdpdAorICBtb2R1bGUgRG9jdW1lbnRhdGlvbgorICAgIGNsYXNzIExpbmtHaXRQcm9jZXNzb3IgPCBBc2NpaWRvY3Rvcjo6RXh0ZW5zaW9uczo6SW5saW5lTWFjcm9Qcm9jZXNzb3IKKyAgICAgIHVzZV9kc2wKKworICAgICAgbmFtZWQgOmNocm9tZQorCisgICAgICBkZWYgcHJvY2VzcyhwYXJlbnQsIHRhcmdldCwgYXR0cnMpCisgICAgICAgIHByZWZpeCA9IHBhcmVudC5kb2N1bWVudC5hdHRyKCdnaXQtcmVsYXRpdmUtaHRtbC1wcmVmaXgnKQorICAgICAgICBpZiBwYXJlbnQuZG9jdW1lbnQuZG9jdHlwZSA9PSAnYm9vaycKKyAgICAgICAgICAiPHVsaW5rIHVybD1cIiN7cHJlZml4fSN7dGFyZ2V0fS5odG1sXCI+IiBcCisgICAgICAgICAgIiN7dGFyZ2V0fSgje2F0dHJzWzFdfSk8L3VsaW5rPiIKKyAgICAgICAgZWxzaWYgcGFyZW50LmRvY3VtZW50LmJhc2ViYWNrZW5kPyAnaHRtbCcKKyAgICAgICAgICAlKDxhIGhyZWY9IiN7cHJlZml4fSN7dGFyZ2V0fS5odG1sIj4je3RhcmdldH0oI3thdHRyc1sxXX0pPC9hPikKKyAgICAgICAgZWxzaWYgcGFyZW50LmRvY3VtZW50LmJhc2ViYWNrZW5kPyAnZG9jYm9vaycKKyAgICAgICAgICAiPGNpdGVyZWZlbnRyeT5cbiIgXAorICAgICAgICAgICAgIjxyZWZlbnRyeXRpdGxlPiN7dGFyZ2V0fTwvcmVmZW50cnl0aXRsZT4iIFwKKyAgICAgICAgICAgICI8bWFudm9sbnVtPiN7YXR0cnNbMV19PC9tYW52b2xudW0+XG4iIFwKKyAgICAgICAgICAiPC9jaXRlcmVmZW50cnk+IgorICAgICAgICBlbmQKKyAgICAgIGVuZAorICAgIGVuZAorCisgICAgY2xhc3MgRG9jdW1lbnRQb3N0UHJvY2Vzc29yIDwgQXNjaWlkb2N0b3I6OkV4dGVuc2lvbnM6OlBvc3Rwcm9jZXNzb3IKKyAgICAgIGRlZiBwcm9jZXNzIGRvY3VtZW50LCBvdXRwdXQKKyAgICAgICAgaWYgZG9jdW1lbnQuYmFzZWJhY2tlbmQ/ICdkb2Nib29rJworICAgICAgICAgIG1hbnNvdXJjZSA9IGRvY3VtZW50LmF0dHJpYnV0ZXNbJ21hbnNvdXJjZSddCisgICAgICAgICAgbWFudmVyc2lvbiA9IGRvY3VtZW50LmF0dHJpYnV0ZXNbJ21hbnZlcnNpb24nXQorICAgICAgICAgIG1hbm1hbnVhbCA9IGRvY3VtZW50LmF0dHJpYnV0ZXNbJ21hbm1hbnVhbCddCisgICAgICAgICAgbmV3X3RhZ3MgPSAiIiBcCisgICAgICAgICAgICAiPHJlZm1pc2NpbmZvIGNsYXNzPVwic291cmNlXCI+I3ttYW5zb3VyY2V9PC9yZWZtaXNjaW5mbz5cbiIgXAorICAgICAgICAgICAgIjxyZWZtaXNjaW5mbyBjbGFzcz1cInZlcnNpb25cIj4je21hbnZlcnNpb259PC9yZWZtaXNjaW5mbz5cbiIgXAorICAgICAgICAgICAgIjxyZWZtaXNjaW5mbyBjbGFzcz1cIm1hbnVhbFwiPiN7bWFubWFudWFsfTwvcmVmbWlzY2luZm8+XG4iCisgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnN1YigvPFwvcmVmbWV0YT4vLCBuZXdfdGFncyArICI8L3JlZm1ldGE+IikKKyAgICAgICAgZW5kCisgICAgICAgIG91dHB1dAorICAgICAgZW5kCisgICAgZW5kCisgIGVuZAorZW5kCisKK0FzY2lpZG9jdG9yOjpFeHRlbnNpb25zLnJlZ2lzdGVyIGRvCisgIGlubGluZV9tYWNybyBHaXQ6OkRvY3VtZW50YXRpb246OkxpbmtHaXRQcm9jZXNzb3IsIDpsaW5rZ2l0CisgIHBvc3Rwcm9jZXNzb3IgR2l0OjpEb2N1bWVudGF0aW9uOjpEb2N1bWVudFBvc3RQcm9jZXNzb3IKK2VuZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibGFtZS1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vYmxhbWUtb3B0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxMjJkYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYmxhbWUtb3B0aW9ucy50eHQKQEAgLTAsMCArMSwxMzMgQEAKKy1iOjoKKwlTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzLiAgVGhpcyBjYW4gYWxzbworCWJlIGNvbnRyb2xsZWQgdmlhIHRoZSBgYmxhbWUuYmxhbmtib3VuZGFyeWAgY29uZmlnIG9wdGlvbi4KKworLS1yb290OjoKKwlEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMuICBUaGlzIGNhbiBhbHNvIGJlCisJY29udHJvbGxlZCB2aWEgdGhlIGBibGFtZS5zaG93Um9vdGAgY29uZmlnIG9wdGlvbi4KKworLS1zaG93LXN0YXRzOjoKKwlJbmNsdWRlIGFkZGl0aW9uYWwgc3RhdGlzdGljcyBhdCB0aGUgZW5kIG9mIGJsYW1lIG91dHB1dC4KKworLUwgPHN0YXJ0Piw8ZW5kPjo6CistTCA6PGZ1bmNuYW1lPjo6CisJQW5ub3RhdGUgb25seSB0aGUgZ2l2ZW4gbGluZSByYW5nZS4gTWF5IGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KKwlPdmVybGFwcGluZyByYW5nZXMgYXJlIGFsbG93ZWQuCisrCis8c3RhcnQ+IGFuZCA8ZW5kPiBhcmUgb3B0aW9uYWwuIGBgLUwgPHN0YXJ0PicnIG9yIGBgLUwgPHN0YXJ0PiwnJyBzcGFucyBmcm9tCis8c3RhcnQ+IHRvIGVuZCBvZiBmaWxlLiBgYC1MICw8ZW5kPicnIHNwYW5zIGZyb20gc3RhcnQgb2YgZmlsZSB0byA8ZW5kPi4KKysKK2luY2x1ZGU6OmxpbmUtcmFuZ2UtZm9ybWF0LnR4dFtdCisKKy1sOjoKKwlTaG93IGxvbmcgcmV2IChEZWZhdWx0OiBvZmYpLgorCistdDo6CisJU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpLgorCistUyA8cmV2cy1maWxlPjo6CisJVXNlIHJldmlzaW9ucyBmcm9tIHJldnMtZmlsZSBpbnN0ZWFkIG9mIGNhbGxpbmcgbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0uCisKKy0tcmV2ZXJzZSA8cmV2Pi4uPHJldj46OgorCVdhbGsgaGlzdG9yeSBmb3J3YXJkIGluc3RlYWQgb2YgYmFja3dhcmQuIEluc3RlYWQgb2Ygc2hvd2luZworCXRoZSByZXZpc2lvbiBpbiB3aGljaCBhIGxpbmUgYXBwZWFyZWQsIHRoaXMgc2hvd3MgdGhlIGxhc3QKKwlyZXZpc2lvbiBpbiB3aGljaCBhIGxpbmUgaGFzIGV4aXN0ZWQuIFRoaXMgcmVxdWlyZXMgYSByYW5nZSBvZgorCXJldmlzaW9uIGxpa2UgU1RBUlQuLkVORCB3aGVyZSB0aGUgcGF0aCB0byBibGFtZSBleGlzdHMgaW4KKwlTVEFSVC4gIGBnaXQgYmxhbWUgLS1yZXZlcnNlIFNUQVJUYCBpcyB0YWtlbiBhcyBgZ2l0IGJsYW1lCisJLS1yZXZlcnNlIFNUQVJULi5IRUFEYCBmb3IgY29udmVuaWVuY2UuCisKKy1wOjoKKy0tcG9yY2VsYWluOjoKKwlTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uLgorCistLWxpbmUtcG9yY2VsYWluOjoKKwlTaG93IHRoZSBwb3JjZWxhaW4gZm9ybWF0LCBidXQgb3V0cHV0IGNvbW1pdCBpbmZvcm1hdGlvbiBmb3IKKwllYWNoIGxpbmUsIG5vdCBqdXN0IHRoZSBmaXJzdCB0aW1lIGEgY29tbWl0IGlzIHJlZmVyZW5jZWQuCisJSW1wbGllcyAtLXBvcmNlbGFpbi4KKworLS1pbmNyZW1lbnRhbDo6CisJU2hvdyB0aGUgcmVzdWx0IGluY3JlbWVudGFsbHkgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yCisJbWFjaGluZSBjb25zdW1wdGlvbi4KKworLS1lbmNvZGluZz08ZW5jb2Rpbmc+OjoKKwlTcGVjaWZpZXMgdGhlIGVuY29kaW5nIHVzZWQgdG8gb3V0cHV0IGF1dGhvciBuYW1lcworCWFuZCBjb21taXQgc3VtbWFyaWVzLiBTZXR0aW5nIGl0IHRvIGBub25lYCBtYWtlcyBibGFtZQorCW91dHB1dCB1bmNvbnZlcnRlZCBkYXRhLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlCisJZGlzY3Vzc2lvbiBhYm91dCBlbmNvZGluZyBpbiB0aGUgbGlua2dpdDpnaXQtbG9nWzFdCisJbWFudWFsIHBhZ2UuCisKKy0tY29udGVudHMgPGZpbGU+OjoKKwlXaGVuIDxyZXY+IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjb21tYW5kIGFubm90YXRlcyB0aGUKKwljaGFuZ2VzIHN0YXJ0aW5nIGJhY2t3YXJkcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgY29weS4KKwlUaGlzIGZsYWcgbWFrZXMgdGhlIGNvbW1hbmQgcHJldGVuZCBhcyBpZiB0aGUgd29ya2luZworCXRyZWUgY29weSBoYXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBuYW1lZCBmaWxlIChzcGVjaWZ5CisJYC1gIHRvIG1ha2UgdGhlIGNvbW1hbmQgcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCkuCisKKy0tZGF0ZSA8Zm9ybWF0Pjo6CisJU3BlY2lmaWVzIHRoZSBmb3JtYXQgdXNlZCB0byBvdXRwdXQgZGF0ZXMuIElmIC0tZGF0ZSBpcyBub3QKKwlwcm92aWRlZCwgdGhlIHZhbHVlIG9mIHRoZSBibGFtZS5kYXRlIGNvbmZpZyB2YXJpYWJsZSBpcworCXVzZWQuIElmIHRoZSBibGFtZS5kYXRlIGNvbmZpZyB2YXJpYWJsZSBpcyBhbHNvIG5vdCBzZXQsIHRoZQorCWlzbyBmb3JtYXQgaXMgdXNlZC4gRm9yIHN1cHBvcnRlZCB2YWx1ZXMsIHNlZSB0aGUgZGlzY3Vzc2lvbgorCW9mIHRoZSAtLWRhdGUgb3B0aW9uIGF0IGxpbmtnaXQ6Z2l0LWxvZ1sxXS4KKworLS1bbm8tXXByb2dyZXNzOjoKKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbQorCWJ5IGRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLiBUaGlzIGZsYWcKKwllbmFibGVzIHByb2dyZXNzIHJlcG9ydGluZyBldmVuIGlmIG5vdCBhdHRhY2hlZCB0byBhCisJdGVybWluYWwuIENhbid0IHVzZSBgLS1wcm9ncmVzc2AgdG9nZXRoZXIgd2l0aCBgLS1wb3JjZWxhaW5gCisJb3IgYC0taW5jcmVtZW50YWxgLgorCistTVs8bnVtPl06OgorCURldGVjdCBtb3ZlZCBvciBjb3BpZWQgbGluZXMgd2l0aGluIGEgZmlsZS4gV2hlbiBhIGNvbW1pdAorCW1vdmVzIG9yIGNvcGllcyBhIGJsb2NrIG9mIGxpbmVzIChlLmcuIHRoZSBvcmlnaW5hbCBmaWxlCisJaGFzIEEgYW5kIHRoZW4gQiwgYW5kIHRoZSBjb21taXQgY2hhbmdlcyBpdCB0byBCIGFuZCB0aGVuCisJQSksIHRoZSB0cmFkaXRpb25hbCAnYmxhbWUnIGFsZ29yaXRobSBub3RpY2VzIG9ubHkgaGFsZiBvZgorCXRoZSBtb3ZlbWVudCBhbmQgdHlwaWNhbGx5IGJsYW1lcyB0aGUgbGluZXMgdGhhdCB3ZXJlIG1vdmVkCisJdXAgKGkuZS4gQikgdG8gdGhlIHBhcmVudCBhbmQgYXNzaWducyBibGFtZSB0byB0aGUgbGluZXMgdGhhdAorCXdlcmUgbW92ZWQgZG93biAoaS5lLiBBKSB0byB0aGUgY2hpbGQgY29tbWl0LiAgV2l0aCB0aGlzCisJb3B0aW9uLCBib3RoIGdyb3VwcyBvZiBsaW5lcyBhcmUgYmxhbWVkIG9uIHRoZSBwYXJlbnQgYnkKKwlydW5uaW5nIGV4dHJhIHBhc3NlcyBvZiBpbnNwZWN0aW9uLgorKworPG51bT4gaXMgb3B0aW9uYWwgYnV0IGl0IGlzIHRoZSBsb3dlciBib3VuZCBvbiB0aGUgbnVtYmVyIG9mCithbHBoYW51bWVyaWMgY2hhcmFjdGVycyB0aGF0IEdpdCBtdXN0IGRldGVjdCBhcyBtb3ZpbmcvY29weWluZword2l0aGluIGEgZmlsZSBmb3IgaXQgdG8gYXNzb2NpYXRlIHRob3NlIGxpbmVzIHdpdGggdGhlIHBhcmVudAorY29tbWl0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyMC4KKworLUNbPG51bT5dOjoKKwlJbiBhZGRpdGlvbiB0byBgLU1gLCBkZXRlY3QgbGluZXMgbW92ZWQgb3IgY29waWVkIGZyb20gb3RoZXIKKwlmaWxlcyB0aGF0IHdlcmUgbW9kaWZpZWQgaW4gdGhlIHNhbWUgY29tbWl0LiAgVGhpcyBpcworCXVzZWZ1bCB3aGVuIHlvdSByZW9yZ2FuaXplIHlvdXIgcHJvZ3JhbSBhbmQgbW92ZSBjb2RlCisJYXJvdW5kIGFjcm9zcyBmaWxlcy4gIFdoZW4gdGhpcyBvcHRpb24gaXMgZ2l2ZW4gdHdpY2UsCisJdGhlIGNvbW1hbmQgYWRkaXRpb25hbGx5IGxvb2tzIGZvciBjb3BpZXMgZnJvbSBvdGhlcgorCWZpbGVzIGluIHRoZSBjb21taXQgdGhhdCBjcmVhdGVzIHRoZSBmaWxlLiBXaGVuIHRoaXMKKwlvcHRpb24gaXMgZ2l2ZW4gdGhyZWUgdGltZXMsIHRoZSBjb21tYW5kIGFkZGl0aW9uYWxseQorCWxvb2tzIGZvciBjb3BpZXMgZnJvbSBvdGhlciBmaWxlcyBpbiBhbnkgY29tbWl0LgorKworPG51bT4gaXMgb3B0aW9uYWwgYnV0IGl0IGlzIHRoZSBsb3dlciBib3VuZCBvbiB0aGUgbnVtYmVyIG9mCithbHBoYW51bWVyaWMgY2hhcmFjdGVycyB0aGF0IEdpdCBtdXN0IGRldGVjdCBhcyBtb3ZpbmcvY29weWluZworYmV0d2VlbiBmaWxlcyBmb3IgaXQgdG8gYXNzb2NpYXRlIHRob3NlIGxpbmVzIHdpdGggdGhlIHBhcmVudAorY29tbWl0LiBBbmQgdGhlIGRlZmF1bHQgdmFsdWUgaXMgNDAuIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lCitgLUNgIG9wdGlvbnMgZ2l2ZW4sIHRoZSA8bnVtPiBhcmd1bWVudCBvZiB0aGUgbGFzdCBgLUNgIHdpbGwKK3Rha2UgZWZmZWN0LgorCistLWlnbm9yZS1yZXYgPHJldj46OgorCUlnbm9yZSBjaGFuZ2VzIG1hZGUgYnkgdGhlIHJldmlzaW9uIHdoZW4gYXNzaWduaW5nIGJsYW1lLCBhcyBpZiB0aGUKKwljaGFuZ2UgbmV2ZXIgaGFwcGVuZWQuICBMaW5lcyB0aGF0IHdlcmUgY2hhbmdlZCBvciBhZGRlZCBieSBhbiBpZ25vcmVkCisJY29tbWl0IHdpbGwgYmUgYmxhbWVkIG9uIHRoZSBwcmV2aW91cyBjb21taXQgdGhhdCBjaGFuZ2VkIHRoYXQgbGluZSBvcgorCW5lYXJieSBsaW5lcy4gIFRoaXMgb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgdG8gaWdub3JlCisJbW9yZSB0aGFuIG9uZSByZXZpc2lvbi4gIElmIHRoZSBgYmxhbWUubWFya0lnbm9yZWRMaW5lc2AgY29uZmlnIG9wdGlvbgorCWlzIHNldCwgdGhlbiBsaW5lcyB0aGF0IHdlcmUgY2hhbmdlZCBieSBhbiBpZ25vcmVkIGNvbW1pdCBhbmQgYXR0cmlidXRlZCB0bworCWFub3RoZXIgY29tbWl0IHdpbGwgYmUgbWFya2VkIHdpdGggYSBgP2AgaW4gdGhlIGJsYW1lIG91dHB1dC4gIElmIHRoZQorCWBibGFtZS5tYXJrVW5ibGFtYWJsZUxpbmVzYCBjb25maWcgb3B0aW9uIGlzIHNldCwgdGhlbiB0aG9zZSBsaW5lcyB0b3VjaGVkCisJYnkgYW4gaWdub3JlZCBjb21taXQgdGhhdCB3ZSBjb3VsZCBub3QgYXR0cmlidXRlIHRvIGFub3RoZXIgcmV2aXNpb24gYXJlCisJbWFya2VkIHdpdGggYSAnKicuCisKKy0taWdub3JlLXJldnMtZmlsZSA8ZmlsZT46OgorCUlnbm9yZSByZXZpc2lvbnMgbGlzdGVkIGluIGBmaWxlYCwgd2hpY2ggbXVzdCBiZSBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgYW4KKwlgZnNjay5za2lwTGlzdGAuICBUaGlzIG9wdGlvbiBtYXkgYmUgcmVwZWF0ZWQsIGFuZCB0aGVzZSBmaWxlcyB3aWxsIGJlCisJcHJvY2Vzc2VkIGFmdGVyIGFueSBmaWxlcyBzcGVjaWZpZWQgd2l0aCB0aGUgYGJsYW1lLmlnbm9yZVJldnNGaWxlYCBjb25maWcKKwlvcHRpb24uICBBbiBlbXB0eSBmaWxlIG5hbWUsIGAiImAsIHdpbGwgY2xlYXIgdGhlIGxpc3Qgb2YgcmV2cyBmcm9tCisJcHJldmlvdXNseSBwcm9jZXNzZWQgZmlsZXMuCisKKy1oOjoKKwlTaG93IGhlbHAgbWVzc2FnZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnVpbGQtZG9jZGVwLnBlcmwgYi9Eb2N1bWVudGF0aW9uL2J1aWxkLWRvY2RlcC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJhNDIwNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2J1aWxkLWRvY2RlcC5wZXJsCkBAIC0wLDAgKzEsNDYgQEAKKyMhL3Vzci9iaW4vcGVybAorCitteSAlaW5jbHVkZSA9ICgpOworbXkgJWluY2x1ZGVkID0gKCk7CisKK2ZvciBteSAkdGV4dCAoPCoudHh0PikgeworICAgIG9wZW4gSSwgJzwnLCAkdGV4dCB8fCBkaWUgImNhbm5vdCByZWFkOiAkdGV4dCI7CisgICAgd2hpbGUgKDxJPikgeworCWlmICgvXmluY2x1ZGU6Oi8pIHsKKwkgICAgY2hvbXA7CisJICAgIHMvXmluY2x1ZGU6OlxzKi8vOworCSAgICBzL1xbXF0vLzsKKwkgICAgJGluY2x1ZGV7JHRleHR9eyRffSA9IDE7CisJICAgICRpbmNsdWRlZHskX30gPSAxOworCX0KKyAgICB9CisgICAgY2xvc2UgSTsKK30KKworIyBEbyB3ZSBjYXJlIGFib3V0IGNoYWluZWQgaW5jbHVkZXM/Pz8KK215ICRjaGFuZ2VkID0gMTsKK3doaWxlICgkY2hhbmdlZCkgeworICAgICRjaGFuZ2VkID0gMDsKKyAgICB3aGlsZSAobXkgKCR0ZXh0LCAkaW5jbHVkZWQpID0gZWFjaCAlaW5jbHVkZSkgeworCWZvciBteSAkaSAoa2V5cyAlJGluY2x1ZGVkKSB7CisJICAgICMgJHRleHQgaGFzIGluY2x1ZGU6OiRpOyBpZiAkaSBpbmNsdWRlcyAkagorCSAgICAjICR0ZXh0IGluZGlyZWN0bHkgaW5jbHVkZXMgJGouCisJICAgIGlmIChleGlzdHMgJGluY2x1ZGV7JGl9KSB7CisJCWZvciBteSAkaiAoa2V5cyAleyRpbmNsdWRleyRpfX0pIHsKKwkJICAgIGlmICghZXhpc3RzICRpbmNsdWRleyR0ZXh0fXskan0pIHsKKwkJCSRpbmNsdWRleyR0ZXh0fXskan0gPSAxOworCQkJJGluY2x1ZGVkeyRqfSA9IDE7CisJCQkkY2hhbmdlZCA9IDE7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICB9Cit9CisKK3doaWxlIChteSAoJHRleHQsICRpbmNsdWRlZCkgPSBlYWNoICVpbmNsdWRlKSB7CisgICAgaWYgKCEgZXhpc3RzICRpbmNsdWRlZHskdGV4dH0gJiYKKwkobXkgJGJhc2UgPSAkdGV4dCkgPX4gcy9cLnR4dCQvLykgeworCXByaW50ICIkYmFzZS5odG1sICRiYXNlLnhtbCA6ICIsIGpvaW4oIiAiLCBrZXlzICUkaW5jbHVkZWQpLCAiXG4iOworICAgIH0KK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2F0LXRleGkucGVybCBiL0RvY3VtZW50YXRpb24vY2F0LXRleGkucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNGQyZjgzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jYXQtdGV4aS5wZXJsCkBAIC0wLDAgKzEsNDYgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCitteSBAbWVudSA9ICgpOworbXkgJG91dHB1dCA9ICRBUkdWWzBdOworCitvcGVuIG15ICR0bXAsICc+JywgIiRvdXRwdXQudG1wIjsKKword2hpbGUgKDxTVERJTj4pIHsKKwluZXh0IGlmICgvXlxcaW5wdXQgdGV4aW5mby8uLi9cQG5vZGUgVG9wLyk7CisJbmV4dCBpZiAoL15cQGJ5ZS8gfHwgL15cLmZ0Lyk7CisJaWYgKHMvXlxAdG9wICguKikvXEBub2RlICQxLCwsVG9wLykgeworCQlwdXNoIEBtZW51LCAkMTsKKwl9CisJcy9cKFxAcHhyZWZce1xbKFVSTFN8UkVNT1RFUylcXX1cKS8vOworCXMvXEBhbmNob3Jce1tee31dKlx9Ly9nOworCXByaW50ICR0bXAgJF87Cit9CitjbG9zZSAkdG1wOworCitwcmludCAnXGlucHV0IHRleGluZm8KK0BzZXRmaWxlbmFtZSBnaXRtYW4uaW5mbworQGRvY3VtZW50ZW5jb2RpbmcgVVRGLTgKK0BkaXJjYXRlZ29yeSBEZXZlbG9wbWVudAorQGRpcmVudHJ5CisqIEdpdCBNYW4gUGFnZXM6IChnaXRtYW4pLiAgTWFudWFsIHBhZ2VzIGZvciBHaXQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0KK0BlbmQgZGlyZW50cnkKK0Bub2RlIFRvcCwsLCAoZGlyKQorQHRvcCBHaXQgTWFudWFsIFBhZ2VzCitAZG9jdW1lbnRsYW5ndWFnZSBlbgorQG1lbnUKKyc7CisKK2ZvciAoQG1lbnUpIHsKKwlwcmludCAiKiAke199OjpcbiI7Cit9CitwcmludCAiXEBlbmQgbWVudVxuIjsKK29wZW4gJHRtcCwgJzwnLCAiJG91dHB1dC50bXAiOword2hpbGUgKDwkdG1wPikgeworCXByaW50OworfQorY2xvc2UgJHRtcDsKK3ByaW50ICJcQGJ5ZVxuIjsKK3VubGluayAiJG91dHB1dC50bXAiOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jbWQtbGlzdC5wZXJsIGIvRG9jdW1lbnRhdGlvbi9jbWQtbGlzdC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVhYTczY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NtZC1saXN0LnBlcmwKQEAgLTAsMCArMSw3OCBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKK3VzZSBGaWxlOjpDb21wYXJlIHF3KGNvbXBhcmUpOworCitzdWIgZm9ybWF0X29uZSB7CisJbXkgKCRvdXQsICRuYW1lYXR0cikgPSBAXzsKKwlteSAoJG5hbWUsICRhdHRyKSA9IEAkbmFtZWF0dHI7CisJbXkgKCRzdGF0ZSwgJGRlc2NyaXB0aW9uKTsKKwkkc3RhdGUgPSAwOworCW9wZW4gSSwgJzwnLCAiJG5hbWUudHh0IiBvciBkaWUgIk5vIHN1Y2ggZmlsZSAkbmFtZS50eHQiOworCXdoaWxlICg8ST4pIHsKKwkJaWYgKC9eTkFNRSQvKSB7CisJCQkkc3RhdGUgPSAxOworCQkJbmV4dDsKKwkJfQorCQlpZiAoJHN0YXRlID09IDEgJiYgL14tLS0tJC8pIHsKKwkJCSRzdGF0ZSA9IDI7CisJCQluZXh0OworCQl9CisJCW5leHQgaWYgKCRzdGF0ZSAhPSAyKTsKKwkJY2hvbXA7CisJCSRkZXNjcmlwdGlvbiA9ICRfOworCQlsYXN0OworCX0KKwljbG9zZSBJOworCWlmICghZGVmaW5lZCAkZGVzY3JpcHRpb24pIHsKKwkJZGllICJObyBkZXNjcmlwdGlvbiBmb3VuZCBpbiAkbmFtZS50eHQiOworCX0KKwlpZiAobXkgKCR2ZXJpZnlfbmFtZSwgJHRleHQpID0gKCRkZXNjcmlwdGlvbiA9fiAvXigkbmFtZSkgLSAoLiopLykpIHsKKwkJcHJpbnQgJG91dCAibGlua2dpdDokbmFtZVxbMVxdOjpcblx0IjsKKwkJaWYgKCRhdHRyID1+IC8gZGVwcmVjYXRlZCAvKSB7CisJCQlwcmludCAkb3V0ICIoZGVwcmVjYXRlZCkgIjsKKwkJfQorCQlwcmludCAkb3V0ICIkdGV4dC5cblxuIjsKKwl9CisJZWxzZSB7CisJCWRpZSAiRGVzY3JpcHRpb24gZG9lcyBub3QgbWF0Y2ggJG5hbWU6ICRkZXNjcmlwdGlvbiI7CisJfQorfQorCit3aGlsZSAoPD4pIHsKKwlsYXN0IGlmIC9eIyMjIGNvbW1hbmQgbGlzdC87Cit9CisKK215ICVjbWRzID0gKCk7Citmb3IgKHNvcnQgPD4pIHsKKwluZXh0IGlmIC9eIy87CisKKwljaG9tcDsKKwlteSAoJG5hbWUsICRjYXQsICRhdHRyKSA9IC9eKFxTKylccysoLio/KSg/OlxzKyguKikpPyQvOworCSRhdHRyID0gJycgdW5sZXNzIGRlZmluZWQgJGF0dHI7CisJcHVzaCBAeyRjbWRzeyRjYXR9fSwgWyRuYW1lLCAiICRhdHRyICJdOworfQorCitmb3IgbXkgJGNhdCAocXcoYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworCQlhbmNpbGxhcnltYW5pcHVsYXRvcnMKKwkJbWFpbnBvcmNlbGFpbgorCQlwbHVtYmluZ2ludGVycm9nYXRvcnMKKwkJcGx1bWJpbmdtYW5pcHVsYXRvcnMKKwkJc3luY2hpbmdyZXBvc2l0b3JpZXMKKwkJZm9yZWlnbnNjbWludGVyZmFjZQorCQlwdXJlaGVscGVycworCQlzeW5jaGVscGVycykpIHsKKwlteSAkb3V0ID0gImNtZHMtJGNhdC50eHQiOworCW9wZW4gTywgJz4nLCAiJG91dCsiIG9yIGRpZSAiQ2Fubm90IG9wZW4gb3V0cHV0IGZpbGUgJG91dCsiOworCWZvciAoQHskY21kc3skY2F0fX0pIHsKKwkJZm9ybWF0X29uZShcKk8sICRfKTsKKwl9CisJY2xvc2UgTzsKKworCWlmICgtZiAiJG91dCIgJiYgY29tcGFyZSgiJG91dCIsICIkb3V0KyIpID09IDApIHsKKwkJdW5saW5rICIkb3V0KyI7CisJfQorCWVsc2UgeworCQlwcmludCBTVERFUlIgIiRvdXRcbiI7CisJCXJlbmFtZSAiJG91dCsiLCAiJG91dCI7CisJfQorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMDc2OGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKQEAgLTAsMCArMSw0NjkgQEAKK0NPTkZJR1VSQVRJT04gRklMRQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBHaXQgY29uZmlndXJhdGlvbiBmaWxlIGNvbnRhaW5zIGEgbnVtYmVyIG9mIHZhcmlhYmxlcyB0aGF0IGFmZmVjdAordGhlIEdpdCBjb21tYW5kcycgYmVoYXZpb3IuIFRoZSBmaWxlcyBgLmdpdC9jb25maWdgIGFuZCBvcHRpb25hbGx5CitgY29uZmlnLndvcmt0cmVlYCAoc2VlIHRoZSAiQ09ORklHVVJBVElPTiBGSUxFIiBzZWN0aW9uIG9mCitsaW5rZ2l0OmdpdC13b3JrdHJlZVsxXSkgaW4gZWFjaCByZXBvc2l0b3J5IGFyZSB1c2VkIHRvIHN0b3JlIHRoZQorY29uZmlndXJhdGlvbiBmb3IgdGhhdCByZXBvc2l0b3J5LCBhbmQgYCRIT01FLy5naXRjb25maWdgIGlzIHVzZWQgdG8KK3N0b3JlIGEgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBhcyBmYWxsYmFjayB2YWx1ZXMgZm9yIHRoZSBgLmdpdC9jb25maWdgCitmaWxlLiBUaGUgZmlsZSBgL2V0Yy9naXRjb25maWdgIGNhbiBiZSB1c2VkIHRvIHN0b3JlIGEgc3lzdGVtLXdpZGUKK2RlZmF1bHQgY29uZmlndXJhdGlvbi4KKworVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZSB1c2VkIGJ5IGJvdGggdGhlIEdpdCBwbHVtYmluZworYW5kIHRoZSBwb3JjZWxhaW5zLiBUaGUgdmFyaWFibGVzIGFyZSBkaXZpZGVkIGludG8gc2VjdGlvbnMsIHdoZXJlaW4KK3RoZSBmdWxseSBxdWFsaWZpZWQgdmFyaWFibGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgaXRzZWxmIGlzIHRoZSBsYXN0Citkb3Qtc2VwYXJhdGVkIHNlZ21lbnQgYW5kIHRoZSBzZWN0aW9uIG5hbWUgaXMgZXZlcnl0aGluZyBiZWZvcmUgdGhlIGxhc3QKK2RvdC4gVGhlIHZhcmlhYmxlIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLCBhbGxvdyBvbmx5IGFscGhhbnVtZXJpYworY2hhcmFjdGVycyBhbmQgYC1gLCBhbmQgbXVzdCBzdGFydCB3aXRoIGFuIGFscGhhYmV0aWMgY2hhcmFjdGVyLiAgU29tZQordmFyaWFibGVzIG1heSBhcHBlYXIgbXVsdGlwbGUgdGltZXM7IHdlIHNheSB0aGVuIHRoYXQgdGhlIHZhcmlhYmxlIGlzCittdWx0aXZhbHVlZC4KKworU3ludGF4Cit+fn5+fn4KKworVGhlIHN5bnRheCBpcyBmYWlybHkgZmxleGlibGUgYW5kIHBlcm1pc3NpdmU7IHdoaXRlc3BhY2VzIGFyZSBtb3N0bHkKK2lnbm9yZWQuICBUaGUgJyMnIGFuZCAnOycgY2hhcmFjdGVycyBiZWdpbiBjb21tZW50cyB0byB0aGUgZW5kIG9mIGxpbmUsCitibGFuayBsaW5lcyBhcmUgaWdub3JlZC4KKworVGhlIGZpbGUgY29uc2lzdHMgb2Ygc2VjdGlvbnMgYW5kIHZhcmlhYmxlcy4gIEEgc2VjdGlvbiBiZWdpbnMgd2l0aAordGhlIG5hbWUgb2YgdGhlIHNlY3Rpb24gaW4gc3F1YXJlIGJyYWNrZXRzIGFuZCBjb250aW51ZXMgdW50aWwgdGhlIG5leHQKK3NlY3Rpb24gYmVnaW5zLiAgU2VjdGlvbiBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4gIE9ubHkgYWxwaGFudW1lcmljCitjaGFyYWN0ZXJzLCBgLWAgYW5kIGAuYCBhcmUgYWxsb3dlZCBpbiBzZWN0aW9uIG5hbWVzLiAgRWFjaCB2YXJpYWJsZQorbXVzdCBiZWxvbmcgdG8gc29tZSBzZWN0aW9uLCB3aGljaCBtZWFucyB0aGF0IHRoZXJlIG11c3QgYmUgYSBzZWN0aW9uCitoZWFkZXIgYmVmb3JlIHRoZSBmaXJzdCBzZXR0aW5nIG9mIGEgdmFyaWFibGUuCisKK1NlY3Rpb25zIGNhbiBiZSBmdXJ0aGVyIGRpdmlkZWQgaW50byBzdWJzZWN0aW9ucy4gIFRvIGJlZ2luIGEgc3Vic2VjdGlvbgorcHV0IGl0cyBuYW1lIGluIGRvdWJsZSBxdW90ZXMsIHNlcGFyYXRlZCBieSBzcGFjZSBmcm9tIHRoZSBzZWN0aW9uIG5hbWUsCitpbiB0aGUgc2VjdGlvbiBoZWFkZXIsIGxpa2UgaW4gdGhlIGV4YW1wbGUgYmVsb3c6CisKKy0tLS0tLS0tCisJW3NlY3Rpb24gInN1YnNlY3Rpb24iXQorCistLS0tLS0tLQorCitTdWJzZWN0aW9uIG5hbWVzIGFyZSBjYXNlIHNlbnNpdGl2ZSBhbmQgY2FuIGNvbnRhaW4gYW55IGNoYXJhY3RlcnMgZXhjZXB0CituZXdsaW5lIGFuZCB0aGUgbnVsbCBieXRlLiBEb3VibGVxdW90ZSBgImAgYW5kIGJhY2tzbGFzaCBjYW4gYmUgaW5jbHVkZWQKK2J5IGVzY2FwaW5nIHRoZW0gYXMgYFwiYCBhbmQgYFxcYCwgcmVzcGVjdGl2ZWx5LiBCYWNrc2xhc2hlcyBwcmVjZWRpbmcKK290aGVyIGNoYXJhY3RlcnMgYXJlIGRyb3BwZWQgd2hlbiByZWFkaW5nOyBmb3IgZXhhbXBsZSwgYFx0YCBpcyByZWFkIGFzCitgdGAgYW5kIGBcMGAgaXMgcmVhZCBhcyBgMGAgU2VjdGlvbiBoZWFkZXJzIGNhbm5vdCBzcGFuIG11bHRpcGxlIGxpbmVzLgorVmFyaWFibGVzIG1heSBiZWxvbmcgZGlyZWN0bHkgdG8gYSBzZWN0aW9uIG9yIHRvIGEgZ2l2ZW4gc3Vic2VjdGlvbi4gWW91CitjYW4gaGF2ZSBgW3NlY3Rpb25dYCBpZiB5b3UgaGF2ZSBgW3NlY3Rpb24gInN1YnNlY3Rpb24iXWAsIGJ1dCB5b3UgZG9uJ3QKK25lZWQgdG8uCisKK1RoZXJlIGlzIGFsc28gYSBkZXByZWNhdGVkIGBbc2VjdGlvbi5zdWJzZWN0aW9uXWAgc3ludGF4LiBXaXRoIHRoaXMKK3N5bnRheCwgdGhlIHN1YnNlY3Rpb24gbmFtZSBpcyBjb252ZXJ0ZWQgdG8gbG93ZXItY2FzZSBhbmQgaXMgYWxzbworY29tcGFyZWQgY2FzZSBzZW5zaXRpdmVseS4gVGhlc2Ugc3Vic2VjdGlvbiBuYW1lcyBmb2xsb3cgdGhlIHNhbWUKK3Jlc3RyaWN0aW9ucyBhcyBzZWN0aW9uIG5hbWVzLgorCitBbGwgdGhlIG90aGVyIGxpbmVzIChhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZSBhZnRlciB0aGUgc2VjdGlvbgoraGVhZGVyKSBhcmUgcmVjb2duaXplZCBhcyBzZXR0aW5nIHZhcmlhYmxlcywgaW4gdGhlIGZvcm0KKyduYW1lID0gdmFsdWUnIChvciBqdXN0ICduYW1lJywgd2hpY2ggaXMgYSBzaG9ydC1oYW5kIHRvIHNheSB0aGF0Cit0aGUgdmFyaWFibGUgaXMgdGhlIGJvb2xlYW4gInRydWUiKS4KK1RoZSB2YXJpYWJsZSBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgYWxsb3cgb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycworYW5kIGAtYCwgYW5kIG11c3Qgc3RhcnQgd2l0aCBhbiBhbHBoYWJldGljIGNoYXJhY3Rlci4KKworQSBsaW5lIHRoYXQgZGVmaW5lcyBhIHZhbHVlIGNhbiBiZSBjb250aW51ZWQgdG8gdGhlIG5leHQgbGluZSBieQorZW5kaW5nIGl0IHdpdGggYSBgXGA7IHRoZSBiYWNrcXVvdGUgYW5kIHRoZSBlbmQtb2YtbGluZSBhcmUKK3N0cmlwcGVkLiAgTGVhZGluZyB3aGl0ZXNwYWNlcyBhZnRlciAnbmFtZSA9JywgdGhlIHJlbWFpbmRlciBvZiB0aGUKK2xpbmUgYWZ0ZXIgdGhlIGZpcnN0IGNvbW1lbnQgY2hhcmFjdGVyICcjJyBvciAnOycsIGFuZCB0cmFpbGluZword2hpdGVzcGFjZXMgb2YgdGhlIGxpbmUgYXJlIGRpc2NhcmRlZCB1bmxlc3MgdGhleSBhcmUgZW5jbG9zZWQgaW4KK2RvdWJsZSBxdW90ZXMuICBJbnRlcm5hbCB3aGl0ZXNwYWNlcyB3aXRoaW4gdGhlIHZhbHVlIGFyZSByZXRhaW5lZAordmVyYmF0aW0uCisKK0luc2lkZSBkb3VibGUgcXVvdGVzLCBkb3VibGUgcXVvdGUgYCJgIGFuZCBiYWNrc2xhc2ggYFxgIGNoYXJhY3RlcnMKK211c3QgYmUgZXNjYXBlZDogdXNlIGBcImAgZm9yIGAiYCBhbmQgYFxcYCBmb3IgYFxgLgorCitUaGUgZm9sbG93aW5nIGVzY2FwZSBzZXF1ZW5jZXMgKGJlc2lkZSBgXCJgIGFuZCBgXFxgKSBhcmUgcmVjb2duaXplZDoKK2BcbmAgZm9yIG5ld2xpbmUgY2hhcmFjdGVyIChOTCksIGBcdGAgZm9yIGhvcml6b250YWwgdGFidWxhdGlvbiAoSFQsIFRBQikKK2FuZCBgXGJgIGZvciBiYWNrc3BhY2UgKEJTKS4gIE90aGVyIGNoYXIgZXNjYXBlIHNlcXVlbmNlcyAoaW5jbHVkaW5nIG9jdGFsCitlc2NhcGUgc2VxdWVuY2VzKSBhcmUgaW52YWxpZC4KKworCitJbmNsdWRlcworfn5+fn5+fn4KKworVGhlIGBpbmNsdWRlYCBhbmQgYGluY2x1ZGVJZmAgc2VjdGlvbnMgYWxsb3cgeW91IHRvIGluY2x1ZGUgY29uZmlnCitkaXJlY3RpdmVzIGZyb20gYW5vdGhlciBzb3VyY2UuIFRoZXNlIHNlY3Rpb25zIGJlaGF2ZSBpZGVudGljYWxseSB0bworZWFjaCBvdGhlciB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBgaW5jbHVkZUlmYCBzZWN0aW9ucyBtYXkgYmUgaWdub3JlZAoraWYgdGhlaXIgY29uZGl0aW9uIGRvZXMgbm90IGV2YWx1YXRlIHRvIHRydWU7IHNlZSAiQ29uZGl0aW9uYWwgaW5jbHVkZXMiCitiZWxvdy4KKworWW91IGNhbiBpbmNsdWRlIGEgY29uZmlnIGZpbGUgZnJvbSBhbm90aGVyIGJ5IHNldHRpbmcgdGhlIHNwZWNpYWwKK2BpbmNsdWRlLnBhdGhgIChvciBgaW5jbHVkZUlmLioucGF0aGApIHZhcmlhYmxlIHRvIHRoZSBuYW1lIG9mIHRoZSBmaWxlCit0byBiZSBpbmNsdWRlZC4gVGhlIHZhcmlhYmxlIHRha2VzIGEgcGF0aG5hbWUgYXMgaXRzIHZhbHVlLCBhbmQgaXMKK3N1YmplY3QgdG8gdGlsZGUgZXhwYW5zaW9uLiBUaGVzZSB2YXJpYWJsZXMgY2FuIGJlIGdpdmVuIG11bHRpcGxlIHRpbWVzLgorCitUaGUgY29udGVudHMgb2YgdGhlIGluY2x1ZGVkIGZpbGUgYXJlIGluc2VydGVkIGltbWVkaWF0ZWx5LCBhcyBpZiB0aGV5CitoYWQgYmVlbiBmb3VuZCBhdCB0aGUgbG9jYXRpb24gb2YgdGhlIGluY2x1ZGUgZGlyZWN0aXZlLiBJZiB0aGUgdmFsdWUgb2YgdGhlCit2YXJpYWJsZSBpcyBhIHJlbGF0aXZlIHBhdGgsIHRoZSBwYXRoIGlzIGNvbnNpZGVyZWQgdG8KK2JlIHJlbGF0aXZlIHRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaW4gd2hpY2ggdGhlIGluY2x1ZGUgZGlyZWN0aXZlCit3YXMgZm91bmQuICBTZWUgYmVsb3cgZm9yIGV4YW1wbGVzLgorCitDb25kaXRpb25hbCBpbmNsdWRlcworfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IGNhbiBpbmNsdWRlIGEgY29uZmlnIGZpbGUgZnJvbSBhbm90aGVyIGNvbmRpdGlvbmFsbHkgYnkgc2V0dGluZyBhCitgaW5jbHVkZUlmLjxjb25kaXRpb24+LnBhdGhgIHZhcmlhYmxlIHRvIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGJlCitpbmNsdWRlZC4KKworVGhlIGNvbmRpdGlvbiBzdGFydHMgd2l0aCBhIGtleXdvcmQgZm9sbG93ZWQgYnkgYSBjb2xvbiBhbmQgc29tZSBkYXRhCit3aG9zZSBmb3JtYXQgYW5kIG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUga2V5d29yZC4gU3VwcG9ydGVkIGtleXdvcmRzCithcmU6CisKK2BnaXRkaXJgOjoKKworCVRoZSBkYXRhIHRoYXQgZm9sbG93cyB0aGUga2V5d29yZCBgZ2l0ZGlyOmAgaXMgdXNlZCBhcyBhIGdsb2IKKwlwYXR0ZXJuLiBJZiB0aGUgbG9jYXRpb24gb2YgdGhlIC5naXQgZGlyZWN0b3J5IG1hdGNoZXMgdGhlCisJcGF0dGVybiwgdGhlIGluY2x1ZGUgY29uZGl0aW9uIGlzIG1ldC4KKysKK1RoZSAuZ2l0IGxvY2F0aW9uIG1heSBiZSBhdXRvLWRpc2NvdmVyZWQsIG9yIGNvbWUgZnJvbSBgJEdJVF9ESVJgCitlbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYgdGhlIHJlcG9zaXRvcnkgaXMgYXV0byBkaXNjb3ZlcmVkIHZpYSBhIC5naXQKK2ZpbGUgKGUuZy4gZnJvbSBzdWJtb2R1bGVzLCBvciBhIGxpbmtlZCB3b3JrdHJlZSksIHRoZSAuZ2l0IGxvY2F0aW9uCit3b3VsZCBiZSB0aGUgZmluYWwgbG9jYXRpb24gd2hlcmUgdGhlIC5naXQgZGlyZWN0b3J5IGlzLCBub3Qgd2hlcmUgdGhlCisuZ2l0IGZpbGUgaXMuCisrCitUaGUgcGF0dGVybiBjYW4gY29udGFpbiBzdGFuZGFyZCBnbG9iYmluZyB3aWxkY2FyZHMgYW5kIHR3byBhZGRpdGlvbmFsCitvbmVzLCBgKiovYCBhbmQgYC8qKmAsIHRoYXQgY2FuIG1hdGNoIG11bHRpcGxlIHBhdGggY29tcG9uZW50cy4gUGxlYXNlCityZWZlciB0byBsaW5rZ2l0OmdpdGlnbm9yZVs1XSBmb3IgZGV0YWlscy4gRm9yIGNvbnZlbmllbmNlOgorCisgKiBJZiB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBgfi9gLCBgfmAgd2lsbCBiZSBzdWJzdGl0dXRlZCB3aXRoIHRoZQorICAgY29udGVudCBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYEhPTUVgLgorCisgKiBJZiB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBgLi9gLCBpdCBpcyByZXBsYWNlZCB3aXRoIHRoZSBkaXJlY3RvcnkKKyAgIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgY29uZmlnIGZpbGUuCisKKyAqIElmIHRoZSBwYXR0ZXJuIGRvZXMgbm90IHN0YXJ0IHdpdGggZWl0aGVyIGB+L2AsIGAuL2Agb3IgYC9gLCBgKiovYAorICAgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHByZXBlbmRlZC4gRm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuIGBmb28vYmFyYAorICAgYmVjb21lcyBgKiovZm9vL2JhcmAgYW5kIHdvdWxkIG1hdGNoIGAvYW55L3BhdGgvdG8vZm9vL2JhcmAuCisKKyAqIElmIHRoZSBwYXR0ZXJuIGVuZHMgd2l0aCBgL2AsIGAqKmAgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkLiBGb3IKKyAgIGV4YW1wbGUsIHRoZSBwYXR0ZXJuIGBmb28vYCBiZWNvbWVzIGBmb28vKipgLiBJbiBvdGhlciB3b3JkcywgaXQKKyAgIG1hdGNoZXMgImZvbyIgYW5kIGV2ZXJ5dGhpbmcgaW5zaWRlLCByZWN1cnNpdmVseS4KKworYGdpdGRpci9pYDo6CisJVGhpcyBpcyB0aGUgc2FtZSBhcyBgZ2l0ZGlyYCBleGNlcHQgdGhhdCBtYXRjaGluZyBpcyBkb25lCisJY2FzZS1pbnNlbnNpdGl2ZWx5IChlLmcuIG9uIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW1zKQorCitgb25icmFuY2hgOjoKKwlUaGUgZGF0YSB0aGF0IGZvbGxvd3MgdGhlIGtleXdvcmQgYG9uYnJhbmNoOmAgaXMgdGFrZW4gdG8gYmUgYQorCXBhdHRlcm4gd2l0aCBzdGFuZGFyZCBnbG9iYmluZyB3aWxkY2FyZHMgYW5kIHR3byBhZGRpdGlvbmFsCisJb25lcywgYCoqL2AgYW5kIGAvKipgLCB0aGF0IGNhbiBtYXRjaCBtdWx0aXBsZSBwYXRoIGNvbXBvbmVudHMuCisJSWYgd2UgYXJlIGluIGEgd29ya3RyZWUgd2hlcmUgdGhlIG5hbWUgb2YgdGhlIGJyYW5jaCB0aGF0IGlzCisJY3VycmVudGx5IGNoZWNrZWQgb3V0IG1hdGNoZXMgdGhlIHBhdHRlcm4sIHRoZSBpbmNsdWRlIGNvbmRpdGlvbgorCWlzIG1ldC4KKysKK0lmIHRoZSBwYXR0ZXJuIGVuZHMgd2l0aCBgL2AsIGAqKmAgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkLiBGb3IKK2V4YW1wbGUsIHRoZSBwYXR0ZXJuIGBmb28vYCBiZWNvbWVzIGBmb28vKipgLiBJbiBvdGhlciB3b3JkcywgaXQgbWF0Y2hlcworYWxsIGJyYW5jaGVzIHRoYXQgYmVnaW4gd2l0aCBgZm9vL2AuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgYnJhbmNoZXMgYXJlCitvcmdhbml6ZWQgaGllcmFyY2hpY2FsbHkgYW5kIHlvdSB3b3VsZCBsaWtlIHRvIGFwcGx5IGEgY29uZmlndXJhdGlvbiB0bworYWxsIHRoZSBicmFuY2hlcyBpbiB0aGF0IGhpZXJhcmNoeS4KKworQSBmZXcgbW9yZSBub3RlcyBvbiBtYXRjaGluZyB2aWEgYGdpdGRpcmAgYW5kIGBnaXRkaXIvaWA6CisKKyAqIFN5bWxpbmtzIGluIGAkR0lUX0RJUmAgYXJlIG5vdCByZXNvbHZlZCBiZWZvcmUgbWF0Y2hpbmcuCisKKyAqIEJvdGggdGhlIHN5bWxpbmsgJiByZWFscGF0aCB2ZXJzaW9ucyBvZiBwYXRocyB3aWxsIGJlIG1hdGNoZWQKKyAgIG91dHNpZGUgb2YgYCRHSVRfRElSYC4gRS5nLiBpZiB+L2dpdCBpcyBhIHN5bWxpbmsgdG8KKyAgIC9tbnQvc3RvcmFnZS9naXQsIGJvdGggYGdpdGRpcjp+L2dpdGAgYW5kIGBnaXRkaXI6L21udC9zdG9yYWdlL2dpdGAKKyAgIHdpbGwgbWF0Y2guCisrCitUaGlzIHdhcyBub3QgdGhlIGNhc2UgaW4gdGhlIGluaXRpYWwgcmVsZWFzZSBvZiB0aGlzIGZlYXR1cmUgaW4KK3YyLjEzLjAsIHdoaWNoIG9ubHkgbWF0Y2hlZCB0aGUgcmVhbHBhdGggdmVyc2lvbi4gQ29uZmlndXJhdGlvbiB0aGF0Cit3YW50cyB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGluaXRpYWwgcmVsZWFzZSBvZiB0aGlzIGZlYXR1cmUgbmVlZHMKK3RvIGVpdGhlciBzcGVjaWZ5IG9ubHkgdGhlIHJlYWxwYXRoIHZlcnNpb24sIG9yIGJvdGggdmVyc2lvbnMuCisKKyAqIE5vdGUgdGhhdCAiLi4vIiBpcyBub3Qgc3BlY2lhbCBhbmQgd2lsbCBtYXRjaCBsaXRlcmFsbHksIHdoaWNoIGlzCisgICB1bmxpa2VseSB3aGF0IHlvdSB3YW50LgorCitFeGFtcGxlCit+fn5+fn5+CisKKy0tLS0KKyMgQ29yZSB2YXJpYWJsZXMKK1tjb3JlXQorCTsgRG9uJ3QgdHJ1c3QgZmlsZSBtb2RlcworCWZpbGVtb2RlID0gZmFsc2UKKworIyBPdXIgZGlmZiBhbGdvcml0aG0KK1tkaWZmXQorCWV4dGVybmFsID0gL3Vzci9sb2NhbC9iaW4vZGlmZi13cmFwcGVyCisJcmVuYW1lcyA9IHRydWUKKworW2JyYW5jaCAiZGV2ZWwiXQorCXJlbW90ZSA9IG9yaWdpbgorCW1lcmdlID0gcmVmcy9oZWFkcy9kZXZlbAorCisjIFByb3h5IHNldHRpbmdzCitbY29yZV0KKwlnaXRQcm94eT0ic3NoIiBmb3IgImtlcm5lbC5vcmciCisJZ2l0UHJveHk9ZGVmYXVsdC1wcm94eSA7IGZvciB0aGUgcmVzdAorCitbaW5jbHVkZV0KKwlwYXRoID0gL3BhdGgvdG8vZm9vLmluYyA7IGluY2x1ZGUgYnkgYWJzb2x1dGUgcGF0aAorCXBhdGggPSBmb28uaW5jIDsgZmluZCAiZm9vLmluYyIgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZmlsZQorCXBhdGggPSB+L2Zvby5pbmMgOyBmaW5kICJmb28uaW5jIiBpbiB5b3VyIGAkSE9NRWAgZGlyZWN0b3J5CisKKzsgaW5jbHVkZSBpZiAkR0lUX0RJUiBpcyAvcGF0aC90by9mb28vLmdpdAorW2luY2x1ZGVJZiAiZ2l0ZGlyOi9wYXRoL3RvL2Zvby8uZ2l0Il0KKwlwYXRoID0gL3BhdGgvdG8vZm9vLmluYworCis7IGluY2x1ZGUgZm9yIGFsbCByZXBvc2l0b3JpZXMgaW5zaWRlIC9wYXRoL3RvL2dyb3VwCitbaW5jbHVkZUlmICJnaXRkaXI6L3BhdGgvdG8vZ3JvdXAvIl0KKwlwYXRoID0gL3BhdGgvdG8vZm9vLmluYworCis7IGluY2x1ZGUgZm9yIGFsbCByZXBvc2l0b3JpZXMgaW5zaWRlICRIT01FL3RvL2dyb3VwCitbaW5jbHVkZUlmICJnaXRkaXI6fi90by9ncm91cC8iXQorCXBhdGggPSAvcGF0aC90by9mb28uaW5jCisKKzsgcmVsYXRpdmUgcGF0aHMgYXJlIGFsd2F5cyByZWxhdGl2ZSB0byB0aGUgaW5jbHVkaW5nCis7IGZpbGUgKGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSk7IHRoZWlyIGxvY2F0aW9uIGlzIG5vdAorOyBhZmZlY3RlZCBieSB0aGUgY29uZGl0aW9uCitbaW5jbHVkZUlmICJnaXRkaXI6L3BhdGgvdG8vZ3JvdXAvIl0KKwlwYXRoID0gZm9vLmluYworCis7IGluY2x1ZGUgb25seSBpZiB3ZSBhcmUgaW4gYSB3b3JrdHJlZSB3aGVyZSBmb28tYnJhbmNoIGlzCis7IGN1cnJlbnRseSBjaGVja2VkIG91dAorW2luY2x1ZGVJZiAib25icmFuY2g6Zm9vLWJyYW5jaCJdCisJcGF0aCA9IGZvby5pbmMKKy0tLS0KKworVmFsdWVzCit+fn5+fn4KKworVmFsdWVzIG9mIG1hbnkgdmFyaWFibGVzIGFyZSB0cmVhdGVkIGFzIGEgc2ltcGxlIHN0cmluZywgYnV0IHRoZXJlCithcmUgdmFyaWFibGVzIHRoYXQgdGFrZSB2YWx1ZXMgb2Ygc3BlY2lmaWMgdHlwZXMgYW5kIHRoZXJlIGFyZSBydWxlcworYXMgdG8gaG93IHRvIHNwZWxsIHRoZW0uCisKK2Jvb2xlYW46OgorCisgICAgICAgV2hlbiBhIHZhcmlhYmxlIGlzIHNhaWQgdG8gdGFrZSBhIGJvb2xlYW4gdmFsdWUsIG1hbnkKKyAgICAgICBzeW5vbnltcyBhcmUgYWNjZXB0ZWQgZm9yICd0cnVlJyBhbmQgJ2ZhbHNlJzsgdGhlc2UgYXJlIGFsbAorICAgICAgIGNhc2UtaW5zZW5zaXRpdmUuCisKKwl0cnVlOzsgQm9vbGVhbiB0cnVlIGxpdGVyYWxzIGFyZSBgeWVzYCwgYG9uYCwgYHRydWVgLAorCQlhbmQgYDFgLiAgQWxzbywgYSB2YXJpYWJsZSBkZWZpbmVkIHdpdGhvdXQgYD0gPHZhbHVlPmAKKwkJaXMgdGFrZW4gYXMgdHJ1ZS4KKworCWZhbHNlOzsgQm9vbGVhbiBmYWxzZSBsaXRlcmFscyBhcmUgYG5vYCwgYG9mZmAsIGBmYWxzZWAsCisJCWAwYCBhbmQgdGhlIGVtcHR5IHN0cmluZy4KKysKK1doZW4gY29udmVydGluZyBhIHZhbHVlIHRvIGl0cyBjYW5vbmljYWwgZm9ybSB1c2luZyB0aGUgYC0tdHlwZT1ib29sYCB0eXBlCitzcGVjaWZpZXIsICdnaXQgY29uZmlnJyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBvdXRwdXQgaXMgInRydWUiIG9yCisiZmFsc2UiIChzcGVsbGVkIGluIGxvd2VyY2FzZSkuCisKK2ludGVnZXI6OgorICAgICAgIFRoZSB2YWx1ZSBmb3IgbWFueSB2YXJpYWJsZXMgdGhhdCBzcGVjaWZ5IHZhcmlvdXMgc2l6ZXMgY2FuCisgICAgICAgYmUgc3VmZml4ZWQgd2l0aCBga2AsIGBNYCwuLi4gdG8gbWVhbiAic2NhbGUgdGhlIG51bWJlciBieQorICAgICAgIDEwMjQiLCAiYnkgMTAyNHgxMDI0IiwgZXRjLgorCitjb2xvcjo6CisgICAgICAgVGhlIHZhbHVlIGZvciBhIHZhcmlhYmxlIHRoYXQgdGFrZXMgYSBjb2xvciBpcyBhIGxpc3Qgb2YKKyAgICAgICBjb2xvcnMgKGF0IG1vc3QgdHdvLCBvbmUgZm9yIGZvcmVncm91bmQgYW5kIG9uZSBmb3IgYmFja2dyb3VuZCkKKyAgICAgICBhbmQgYXR0cmlidXRlcyAoYXMgbWFueSBhcyB5b3Ugd2FudCksIHNlcGFyYXRlZCBieSBzcGFjZXMuCisrCitUaGUgYmFzaWMgY29sb3JzIGFjY2VwdGVkIGFyZSBgbm9ybWFsYCwgYGJsYWNrYCwgYHJlZGAsIGBncmVlbmAsIGB5ZWxsb3dgLAorYGJsdWVgLCBgbWFnZW50YWAsIGBjeWFuYCBhbmQgYHdoaXRlYC4gIFRoZSBmaXJzdCBjb2xvciBnaXZlbiBpcyB0aGUKK2ZvcmVncm91bmQ7IHRoZSBzZWNvbmQgaXMgdGhlIGJhY2tncm91bmQuICBBbGwgdGhlIGJhc2ljIGNvbG9ycyBleGNlcHQKK2Bub3JtYWxgIGhhdmUgYSBicmlnaHQgdmFyaWFudCB0aGF0IGNhbiBiZSBzcGVmaWNpZWQgYnkgcHJlZml4aW5nIHRoZQorY29sb3Igd2l0aCBgYnJpZ2h0YCwgbGlrZSBgYnJpZ2h0cmVkYC4KKysKK0NvbG9ycyBtYXkgYWxzbyBiZSBnaXZlbiBhcyBudW1iZXJzIGJldHdlZW4gMCBhbmQgMjU1OyB0aGVzZSB1c2UgQU5TSQorMjU2LWNvbG9yIG1vZGUgKGJ1dCBub3RlIHRoYXQgbm90IGFsbCB0ZXJtaW5hbHMgbWF5IHN1cHBvcnQgdGhpcykuICBJZgoreW91ciB0ZXJtaW5hbCBzdXBwb3J0cyBpdCwgeW91IG1heSBhbHNvIHNwZWNpZnkgMjQtYml0IFJHQiB2YWx1ZXMgYXMKK2hleCwgbGlrZSBgI2ZmMGFiM2AuCisrCitUaGUgYWNjZXB0ZWQgYXR0cmlidXRlcyBhcmUgYGJvbGRgLCBgZGltYCwgYHVsYCwgYGJsaW5rYCwgYHJldmVyc2VgLAorYGl0YWxpY2AsIGFuZCBgc3RyaWtlYCAoZm9yIGNyb3NzZWQtb3V0IG9yICJzdHJpa2V0aHJvdWdoIiBsZXR0ZXJzKS4KK1RoZSBwb3NpdGlvbiBvZiBhbnkgYXR0cmlidXRlcyB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvbG9ycworKGJlZm9yZSwgYWZ0ZXIsIG9yIGluIGJldHdlZW4pLCBkb2Vzbid0IG1hdHRlci4gU3BlY2lmaWMgYXR0cmlidXRlcyBtYXkKK2JlIHR1cm5lZCBvZmYgYnkgcHJlZml4aW5nIHRoZW0gd2l0aCBgbm9gIG9yIGBuby1gIChlLmcuLCBgbm9yZXZlcnNlYCwKK2Buby11bGAsIGV0YykuCisrCitBbiBlbXB0eSBjb2xvciBzdHJpbmcgcHJvZHVjZXMgbm8gY29sb3IgZWZmZWN0IGF0IGFsbC4gVGhpcyBjYW4gYmUgdXNlZAordG8gYXZvaWQgY29sb3Jpbmcgc3BlY2lmaWMgZWxlbWVudHMgd2l0aG91dCBkaXNhYmxpbmcgY29sb3IgZW50aXJlbHkuCisrCitGb3IgZ2l0J3MgcHJlLWRlZmluZWQgY29sb3Igc2xvdHMsIHRoZSBhdHRyaWJ1dGVzIGFyZSBtZWFudCB0byBiZSByZXNldAorYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGl0ZW0gaW4gdGhlIGNvbG9yZWQgb3V0cHV0LiBTbyBzZXR0aW5nCitgY29sb3IuZGVjb3JhdGUuYnJhbmNoYCB0byBgYmxhY2tgIHdpbGwgcGFpbnQgdGhhdCBicmFuY2ggbmFtZSBpbiBhCitwbGFpbiBgYmxhY2tgLCBldmVuIGlmIHRoZSBwcmV2aW91cyB0aGluZyBvbiB0aGUgc2FtZSBvdXRwdXQgbGluZSAoZS5nLgorb3BlbmluZyBwYXJlbnRoZXNpcyBiZWZvcmUgdGhlIGxpc3Qgb2YgYnJhbmNoIG5hbWVzIGluIGBsb2cgLS1kZWNvcmF0ZWAKK291dHB1dCkgaXMgc2V0IHRvIGJlIHBhaW50ZWQgd2l0aCBgYm9sZGAgb3Igc29tZSBvdGhlciBhdHRyaWJ1dGUuCitIb3dldmVyLCBjdXN0b20gbG9nIGZvcm1hdHMgbWF5IGRvIG1vcmUgY29tcGxpY2F0ZWQgYW5kIGxheWVyZWQKK2NvbG9yaW5nLCBhbmQgdGhlIG5lZ2F0ZWQgZm9ybXMgbWF5IGJlIHVzZWZ1bCB0aGVyZS4KKworcGF0aG5hbWU6OgorCUEgdmFyaWFibGUgdGhhdCB0YWtlcyBhIHBhdGhuYW1lIHZhbHVlIGNhbiBiZSBnaXZlbiBhCisJc3RyaW5nIHRoYXQgYmVnaW5zIHdpdGggImB+L2AiIG9yICJgfnVzZXIvYCIsIGFuZCB0aGUgdXN1YWwKKwl0aWxkZSBleHBhbnNpb24gaGFwcGVucyB0byBzdWNoIGEgc3RyaW5nOiBgfi9gCisJaXMgZXhwYW5kZWQgdG8gdGhlIHZhbHVlIG9mIGAkSE9NRWAsIGFuZCBgfnVzZXIvYCB0byB0aGUKKwlzcGVjaWZpZWQgdXNlcidzIGhvbWUgZGlyZWN0b3J5LgorCisKK1ZhcmlhYmxlcworfn5+fn5+fn5+CisKK05vdGUgdGhhdCB0aGlzIGxpc3QgaXMgbm9uLWNvbXByZWhlbnNpdmUgYW5kIG5vdCBuZWNlc3NhcmlseSBjb21wbGV0ZS4KK0ZvciBjb21tYW5kLXNwZWNpZmljIHZhcmlhYmxlcywgeW91IHdpbGwgZmluZCBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24KK2luIHRoZSBhcHByb3ByaWF0ZSBtYW51YWwgcGFnZS4KKworT3RoZXIgZ2l0LXJlbGF0ZWQgdG9vbHMgbWF5IGFuZCBkbyB1c2UgdGhlaXIgb3duIHZhcmlhYmxlcy4gIFdoZW4KK2ludmVudGluZyBuZXcgdmFyaWFibGVzIGZvciB1c2UgaW4geW91ciBvd24gdG9vbCwgbWFrZSBzdXJlIHRoZWlyCituYW1lcyBkbyBub3QgY29uZmxpY3Qgd2l0aCB0aG9zZSB0aGF0IGFyZSB1c2VkIGJ5IEdpdCBpdHNlbGYgYW5kCitvdGhlciBwb3B1bGFyIHRvb2xzLCBhbmQgZGVzY3JpYmUgdGhlbSBpbiB5b3VyIGRvY3VtZW50YXRpb24uCisKK2luY2x1ZGU6OmNvbmZpZy9hZHZpY2UudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2NvcmUudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2FkZC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvYWxpYXMudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2FtLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9hcHBseS50eHRbXQorCitpbmNsdWRlOjpjb25maWcvYmxhbWUudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2JyYW5jaC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvYnJvd3Nlci50eHRbXQorCitpbmNsdWRlOjpjb25maWcvY2hlY2tvdXQudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2NsZWFuLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9jb2xvci50eHRbXQorCitpbmNsdWRlOjpjb25maWcvY29sdW1uLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9jb21taXQudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2NyZWRlbnRpYWwudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2NvbXBsZXRpb24udHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2RpZmYudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2RpZmZ0b29sLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9mYXN0aW1wb3J0LnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9mZWF0dXJlLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9mZXRjaC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvZm9ybWF0LnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9maWx0ZXIudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2ZzY2sudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2djLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9naXRjdnMudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2dpdHdlYi50eHRbXQorCitpbmNsdWRlOjpjb25maWcvZ3JlcC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvZ3BnLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9ndWkudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2d1aXRvb2wudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2hlbHAudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2h0dHAudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2kxOG4udHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2ltYXAudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2luZGV4LnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9pbml0LnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9pbnN0YXdlYi50eHRbXQorCitpbmNsdWRlOjpjb25maWcvaW50ZXJhY3RpdmUudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2xvZy50eHRbXQorCitpbmNsdWRlOjpjb25maWcvbWFpbGluZm8udHh0W10KKworaW5jbHVkZTo6Y29uZmlnL21haWxtYXAudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL21hbi50eHRbXQorCitpbmNsdWRlOjpjb25maWcvbWVyZ2UudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL21lcmdldG9vbC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvbm90ZXMudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3BhY2sudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3BhZ2VyLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9wcmV0dHkudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3Byb3RvY29sLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9wdWxsLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9wdXNoLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9yZWJhc2UudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3JlY2VpdmUudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3JlbW90ZS50eHRbXQorCitpbmNsdWRlOjpjb25maWcvcmVtb3Rlcy50eHRbXQorCitpbmNsdWRlOjpjb25maWcvcmVwYWNrLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9yZXJlcmUudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3Jlc2V0LnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9zZW5kZW1haWwudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3NlcXVlbmNlci50eHRbXQorCitpbmNsdWRlOjpjb25maWcvc2hvd2JyYW5jaC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvc3BsaXRpbmRleC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvc3NoLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9zdGF0dXMudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3N0YXNoLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9zdWJtb2R1bGUudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3RhZy50eHRbXQorCitpbmNsdWRlOjpjb25maWcvdGFyLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy90cmFjZTIudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3RyYW5zZmVyLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy91cGxvYWRhcmNoaXZlLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy91cGxvYWRwYWNrLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy91cmwudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3VzZXIudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3ZlcnNpb25zb3J0LnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy93ZWIudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3dvcmt0cmVlLnR4dFtdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hZGQudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYWRkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWY3NDhmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYWRkLnR4dApAQCAtMCwwICsxLDEyIEBACithZGQuaWdub3JlRXJyb3JzOjoKK2FkZC5pZ25vcmUtZXJyb3JzIChkZXByZWNhdGVkKTo6CisJVGVsbHMgJ2dpdCBhZGQnIHRvIGNvbnRpbnVlIGFkZGluZyBmaWxlcyB3aGVuIHNvbWUgZmlsZXMgY2Fubm90IGJlCisJYWRkZWQgZHVlIHRvIGluZGV4aW5nIGVycm9ycy4gRXF1aXZhbGVudCB0byB0aGUgYC0taWdub3JlLWVycm9yc2AKKwlvcHRpb24gb2YgbGlua2dpdDpnaXQtYWRkWzFdLiAgYGFkZC5pZ25vcmUtZXJyb3JzYCBpcyBkZXByZWNhdGVkLAorCWFzIGl0IGRvZXMgbm90IGZvbGxvdyB0aGUgdXN1YWwgbmFtaW5nIGNvbnZlbnRpb24gZm9yIGNvbmZpZ3VyYXRpb24KKwl2YXJpYWJsZXMuCisKK2FkZC5pbnRlcmFjdGl2ZS51c2VCdWlsdGluOjoKKwlbRVhQRVJJTUVOVEFMXSBTZXQgdG8gYHRydWVgIHRvIHVzZSB0aGUgZXhwZXJpbWVudGFsIGJ1aWx0LWluCisJaW1wbGVtZW50YXRpb24gb2YgdGhlIGludGVyYWN0aXZlIHZlcnNpb24gb2YgbGlua2dpdDpnaXQtYWRkWzFdCisJaW5zdGVhZCBvZiB0aGUgUGVybCBzY3JpcHQgdmVyc2lvbi4gSXMgYGZhbHNlYCBieSBkZWZhdWx0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvYWR2aWNlLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2FkdmljZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRkMzdjMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2FkdmljZS50eHQKQEAgLTAsMCArMSwxMTkgQEAKK2FkdmljZS4qOjoKKwlUaGVzZSB2YXJpYWJsZXMgY29udHJvbCB2YXJpb3VzIG9wdGlvbmFsIGhlbHAgbWVzc2FnZXMgZGVzaWduZWQgdG8KKwlhaWQgbmV3IHVzZXJzLiBBbGwgJ2FkdmljZS4qJyB2YXJpYWJsZXMgZGVmYXVsdCB0byAndHJ1ZScsIGFuZCB5b3UKKwljYW4gdGVsbCBHaXQgdGhhdCB5b3UgZG8gbm90IG5lZWQgaGVscCBieSBzZXR0aW5nIHRoZXNlIHRvICdmYWxzZSc6CisrCistLQorCWZldGNoU2hvd0ZvcmNlZFVwZGF0ZXM6OgorCQlBZHZpY2Ugc2hvd24gd2hlbiBsaW5rZ2l0OmdpdC1mZXRjaFsxXSB0YWtlcyBhIGxvbmcgdGltZQorCQl0byBjYWxjdWxhdGUgZm9yY2VkIHVwZGF0ZXMgYWZ0ZXIgcmVmIHVwZGF0ZXMsIG9yIHRvIHdhcm4KKwkJdGhhdCB0aGUgY2hlY2sgaXMgZGlzYWJsZWQuCisJcHVzaFVwZGF0ZVJlamVjdGVkOjoKKwkJU2V0IHRoaXMgdmFyaWFibGUgdG8gJ2ZhbHNlJyBpZiB5b3Ugd2FudCB0byBkaXNhYmxlCisJCSdwdXNoTm9uRkZDdXJyZW50JywKKwkJJ3B1c2hOb25GRk1hdGNoaW5nJywgJ3B1c2hBbHJlYWR5RXhpc3RzJywKKwkJJ3B1c2hGZXRjaEZpcnN0JywgYW5kICdwdXNoTmVlZHNGb3JjZScKKwkJc2ltdWx0YW5lb3VzbHkuCisJcHVzaE5vbkZGQ3VycmVudDo6CisJCUFkdmljZSBzaG93biB3aGVuIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gZmFpbHMgZHVlIHRvIGEKKwkJbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGUgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLgorCXB1c2hOb25GRk1hdGNoaW5nOjoKKwkJQWR2aWNlIHNob3duIHdoZW4geW91IHJhbiBsaW5rZ2l0OmdpdC1wdXNoWzFdIGFuZCBwdXNoZWQKKwkJJ21hdGNoaW5nIHJlZnMnIGV4cGxpY2l0bHkgKGkuZS4geW91IHVzZWQgJzonLCBvcgorCQlzcGVjaWZpZWQgYSByZWZzcGVjIHRoYXQgaXNuJ3QgeW91ciBjdXJyZW50IGJyYW5jaCkgYW5kCisJCWl0IHJlc3VsdGVkIGluIGEgbm9uLWZhc3QtZm9yd2FyZCBlcnJvci4KKwlwdXNoQWxyZWFkeUV4aXN0czo6CisJCVNob3duIHdoZW4gbGlua2dpdDpnaXQtcHVzaFsxXSByZWplY3RzIGFuIHVwZGF0ZSB0aGF0CisJCWRvZXMgbm90IHF1YWxpZnkgZm9yIGZhc3QtZm9yd2FyZGluZyAoZS5nLiwgYSB0YWcuKQorCXB1c2hGZXRjaEZpcnN0OjoKKwkJU2hvd24gd2hlbiBsaW5rZ2l0OmdpdC1wdXNoWzFdIHJlamVjdHMgYW4gdXBkYXRlIHRoYXQKKwkJdHJpZXMgdG8gb3ZlcndyaXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhbgorCQlvYmplY3Qgd2UgZG8gbm90IGhhdmUuCisJcHVzaE5lZWRzRm9yY2U6OgorCQlTaG93biB3aGVuIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gcmVqZWN0cyBhbiB1cGRhdGUgdGhhdAorCQl0cmllcyB0byBvdmVyd3JpdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGFuCisJCW9iamVjdCB0aGF0IGlzIG5vdCBhIGNvbW1pdC1pc2gsIG9yIG1ha2UgdGhlIHJlbW90ZQorCQlyZWYgcG9pbnQgYXQgYW4gb2JqZWN0IHRoYXQgaXMgbm90IGEgY29tbWl0LWlzaC4KKwlwdXNoVW5xdWFsaWZpZWRSZWZuYW1lOjoKKwkJU2hvd24gd2hlbiBsaW5rZ2l0OmdpdC1wdXNoWzFdIGdpdmVzIHVwIHRyeWluZyB0bworCQlndWVzcyBiYXNlZCBvbiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiByZWZzIHdoYXQKKwkJcmVtb3RlIHJlZiBuYW1lc3BhY2UgdGhlIHNvdXJjZSBiZWxvbmdzIGluLCBidXQgd2hlcmUKKwkJd2UgY2FuIHN0aWxsIHN1Z2dlc3QgdGhhdCB0aGUgdXNlciBwdXNoIHRvIGVpdGhlcgorCQlyZWZzL2hlYWRzLyogb3IgcmVmcy90YWdzLyogYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlCisJCXNvdXJjZSBvYmplY3QuCisJc3RhdHVzQWhlYWRCZWhpbmQ6OgorCQlTaG93biB3aGVuIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBjb21wdXRlcyB0aGUgYWhlYWQvYmVoaW5kCisJCWNvdW50cyBmb3IgYSBsb2NhbCByZWYgY29tcGFyZWQgdG8gaXRzIHJlbW90ZSB0cmFja2luZyByZWYsCisJCWFuZCB0aGF0IGNhbGN1bGF0aW9uIHRha2VzIGxvbmdlciB0aGFuIGV4cGVjdGVkLiBXaWxsIG5vdAorCQlhcHBlYXIgaWYgYHN0YXR1cy5haGVhZEJlaGluZGAgaXMgZmFsc2Ugb3IgdGhlIG9wdGlvbgorCQlgLS1uby1haGVhZC1iZWhpbmRgIGlzIGdpdmVuLgorCXN0YXR1c0hpbnRzOjoKKwkJU2hvdyBkaXJlY3Rpb25zIG9uIGhvdyB0byBwcm9jZWVkIGZyb20gdGhlIGN1cnJlbnQKKwkJc3RhdGUgaW4gdGhlIG91dHB1dCBvZiBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0sIGluCisJCXRoZSB0ZW1wbGF0ZSBzaG93biB3aGVuIHdyaXRpbmcgY29tbWl0IG1lc3NhZ2VzIGluCisJCWxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSwgYW5kIGluIHRoZSBoZWxwIG1lc3NhZ2Ugc2hvd24KKwkJYnkgbGlua2dpdDpnaXQtc3dpdGNoWzFdIG9yCisJCWxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdIHdoZW4gc3dpdGNoaW5nIGJyYW5jaC4KKwlzdGF0dXNVb3B0aW9uOjoKKwkJQWR2aXNlIHRvIGNvbnNpZGVyIHVzaW5nIHRoZSBgLXVgIG9wdGlvbiB0byBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0KKwkJd2hlbiB0aGUgY29tbWFuZCB0YWtlcyBtb3JlIHRoYW4gMiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQKKwkJZmlsZXMuCisJY29tbWl0QmVmb3JlTWVyZ2U6OgorCQlBZHZpY2Ugc2hvd24gd2hlbiBsaW5rZ2l0OmdpdC1tZXJnZVsxXSByZWZ1c2VzIHRvCisJCW1lcmdlIHRvIGF2b2lkIG92ZXJ3cml0aW5nIGxvY2FsIGNoYW5nZXMuCisJcmVzZXRRdWlldDo6CisJCUFkdmljZSB0byBjb25zaWRlciB1c2luZyB0aGUgYC0tcXVpZXRgIG9wdGlvbiB0byBsaW5rZ2l0OmdpdC1yZXNldFsxXQorCQl3aGVuIHRoZSBjb21tYW5kIHRha2VzIG1vcmUgdGhhbiAyIHNlY29uZHMgdG8gZW51bWVyYXRlIHVuc3RhZ2VkCisJCWNoYW5nZXMgYWZ0ZXIgcmVzZXQuCisJcmVzb2x2ZUNvbmZsaWN0OjoKKwkJQWR2aWNlIHNob3duIGJ5IHZhcmlvdXMgY29tbWFuZHMgd2hlbiBjb25mbGljdHMKKwkJcHJldmVudCB0aGUgb3BlcmF0aW9uIGZyb20gYmVpbmcgcGVyZm9ybWVkLgorCXNlcXVlbmNlckluVXNlOjoKKwkJQWR2aWNlIHNob3duIHdoZW4gYSBzZXF1ZW5jZXIgY29tbWFuZCBpcyBhbHJlYWR5IGluIHByb2dyZXNzLgorCWltcGxpY2l0SWRlbnRpdHk6OgorCQlBZHZpY2Ugb24gaG93IHRvIHNldCB5b3VyIGlkZW50aXR5IGNvbmZpZ3VyYXRpb24gd2hlbgorCQl5b3VyIGluZm9ybWF0aW9uIGlzIGd1ZXNzZWQgZnJvbSB0aGUgc3lzdGVtIHVzZXJuYW1lIGFuZAorCQlkb21haW4gbmFtZS4KKwlkZXRhY2hlZEhlYWQ6OgorCQlBZHZpY2Ugc2hvd24gd2hlbiB5b3UgdXNlZAorCQlsaW5rZ2l0OmdpdC1zd2l0Y2hbMV0gb3IgbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0KKwkJdG8gbW92ZSB0byB0aGUgZGV0YWNoIEhFQUQgc3RhdGUsIHRvIGluc3RydWN0IGhvdyB0bworCQljcmVhdGUgYSBsb2NhbCBicmFuY2ggYWZ0ZXIgdGhlIGZhY3QuCisJY2hlY2tvdXRBbWJpZ3VvdXNSZW1vdGVCcmFuY2hOYW1lOjoKKwkJQWR2aWNlIHNob3duIHdoZW4gdGhlIGFyZ3VtZW50IHRvCisJCWxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdIGFuZCBsaW5rZ2l0OmdpdC1zd2l0Y2hbMV0KKwkJYW1iaWd1b3VzbHkgcmVzb2x2ZXMgdG8gYQorCQlyZW1vdGUgdHJhY2tpbmcgYnJhbmNoIG9uIG1vcmUgdGhhbiBvbmUgcmVtb3RlIGluCisJCXNpdHVhdGlvbnMgd2hlcmUgYW4gdW5hbWJpZ3VvdXMgYXJndW1lbnQgd291bGQgaGF2ZQorCQlvdGhlcndpc2UgY2F1c2VkIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCB0byBiZQorCQljaGVja2VkIG91dC4gU2VlIHRoZSBgY2hlY2tvdXQuZGVmYXVsdFJlbW90ZWAKKwkJY29uZmlndXJhdGlvbiB2YXJpYWJsZSBmb3IgaG93IHRvIHNldCBhIGdpdmVuIHJlbW90ZQorCQl0byB1c2VkIGJ5IGRlZmF1bHQgaW4gc29tZSBzaXR1YXRpb25zIHdoZXJlIHRoaXMKKwkJYWR2aWNlIHdvdWxkIGJlIHByaW50ZWQuCisJYW1Xb3JrRGlyOjoKKwkJQWR2aWNlIHRoYXQgc2hvd3MgdGhlIGxvY2F0aW9uIG9mIHRoZSBwYXRjaCBmaWxlIHdoZW4KKwkJbGlua2dpdDpnaXQtYW1bMV0gZmFpbHMgdG8gYXBwbHkgaXQuCisJcm1IaW50czo6CisJCUluIGNhc2Ugb2YgZmFpbHVyZSBpbiB0aGUgb3V0cHV0IG9mIGxpbmtnaXQ6Z2l0LXJtWzFdLAorCQlzaG93IGRpcmVjdGlvbnMgb24gaG93IHRvIHByb2NlZWQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS4KKwlhZGRFbWJlZGRlZFJlcG86OgorCQlBZHZpY2Ugb24gd2hhdCB0byBkbyB3aGVuIHlvdSd2ZSBhY2NpZGVudGFsbHkgYWRkZWQgb25lCisJCWdpdCByZXBvIGluc2lkZSBvZiBhbm90aGVyLgorCWlnbm9yZWRIb29rOjoKKwkJQWR2aWNlIHNob3duIGlmIGEgaG9vayBpcyBpZ25vcmVkIGJlY2F1c2UgdGhlIGhvb2sgaXMgbm90CisJCXNldCBhcyBleGVjdXRhYmxlLgorCXdhaXRpbmdGb3JFZGl0b3I6OgorCQlQcmludCBhIG1lc3NhZ2UgdG8gdGhlIHRlcm1pbmFsIHdoZW5ldmVyIEdpdCBpcyB3YWl0aW5nIGZvcgorCQllZGl0b3IgaW5wdXQgZnJvbSB0aGUgdXNlci4KKwluZXN0ZWRUYWc6OgorCQlBZHZpY2Ugc2hvd24gaWYgYSB1c2VyIGF0dGVtcHRzIHRvIHJlY3Vyc2l2ZWx5IHRhZyBhIHRhZyBvYmplY3QuCisJc3VibW9kdWxlQWx0ZXJuYXRlRXJyb3JTdHJhdGVneURpZTo6CisJCUFkdmljZSBzaG93biB3aGVuIGEgc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgb3B0aW9uCisJCWNvbmZpZ3VyZWQgdG8gImRpZSIgY2F1c2VzIGEgZmF0YWwgZXJyb3IuCisJYWRkSWdub3JlZEZpbGU6OgorCQlBZHZpY2Ugc2hvd24gaWYgYSB1c2VyIGF0dGVtcHRzIHRvIGFkZCBhbiBpZ25vcmVkIGZpbGUgdG8KKwkJdGhlIGluZGV4LgorCWFkZEVtcHR5UGF0aHNwZWM6OgorCQlBZHZpY2Ugc2hvd24gaWYgYSB1c2VyIHJ1bnMgdGhlIGFkZCBjb21tYW5kIHdpdGhvdXQgcHJvdmlkaW5nCisJCXRoZSBwYXRoc3BlYyBwYXJhbWV0ZXIuCistLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvYWxpYXMudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYWxpYXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxY2E3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hbGlhcy50eHQKQEAgLTAsMCArMSwyOCBAQAorYWxpYXMuKjo6CisJQ29tbWFuZCBhbGlhc2VzIGZvciB0aGUgbGlua2dpdDpnaXRbMV0gY29tbWFuZCB3cmFwcGVyIC0gZS5nLgorCWFmdGVyIGRlZmluaW5nIGBhbGlhcy5sYXN0ID0gY2F0LWZpbGUgY29tbWl0IEhFQURgLCB0aGUgaW52b2NhdGlvbgorCWBnaXQgbGFzdGAgaXMgZXF1aXZhbGVudCB0byBgZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEYC4gVG8gYXZvaWQKKwljb25mdXNpb24gYW5kIHRyb3VibGVzIHdpdGggc2NyaXB0IHVzYWdlLCBhbGlhc2VzIHRoYXQKKwloaWRlIGV4aXN0aW5nIEdpdCBjb21tYW5kcyBhcmUgaWdub3JlZC4gQXJndW1lbnRzIGFyZSBzcGxpdCBieQorCXNwYWNlcywgdGhlIHVzdWFsIHNoZWxsIHF1b3RpbmcgYW5kIGVzY2FwaW5nIGlzIHN1cHBvcnRlZC4KKwlBIHF1b3RlIHBhaXIgb3IgYSBiYWNrc2xhc2ggY2FuIGJlIHVzZWQgdG8gcXVvdGUgdGhlbS4KKysKK05vdGUgdGhhdCB0aGUgZmlyc3Qgd29yZCBvZiBhbiBhbGlhcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIGJlIGEKK2NvbW1hbmQuIEl0IGNhbiBiZSBhIGNvbW1hbmQtbGluZSBvcHRpb24gdGhhdCB3aWxsIGJlIHBhc3NlZCBpbnRvIHRoZQoraW52b2NhdGlvbiBvZiBgZ2l0YC4gSW4gcGFydGljdWxhciwgdGhpcyBpcyB1c2VmdWwgd2hlbiB1c2VkIHdpdGggYC1jYAordG8gcGFzcyBpbiBvbmUtdGltZSBjb25maWd1cmF0aW9ucyBvciBgLXBgIHRvIGZvcmNlIHBhZ2luYXRpb24uIEZvciBleGFtcGxlLAorYGxvdWQtcmViYXNlID0gLWMgY29tbWl0LnZlcmJvc2U9dHJ1ZSByZWJhc2VgIGNhbiBiZSBkZWZpbmVkIHN1Y2ggdGhhdAorcnVubmluZyBgZ2l0IGxvdWQtcmViYXNlYCB3b3VsZCBiZSBlcXVpdmFsZW50IHRvCitgZ2l0IC1jIGNvbW1pdC52ZXJib3NlPXRydWUgcmViYXNlYC4gQWxzbywgYHBzID0gLXAgc3RhdHVzYCB3b3VsZCBiZSBhCitoZWxwZnVsIGFsaWFzIHNpbmNlIGBnaXQgcHNgIHdvdWxkIHBhZ2luYXRlIHRoZSBvdXRwdXQgb2YgYGdpdCBzdGF0dXNgCit3aGVyZSB0aGUgb3JpZ2luYWwgY29tbWFuZCBkb2VzIG5vdC4KKysKK0lmIHRoZSBhbGlhcyBleHBhbnNpb24gaXMgcHJlZml4ZWQgd2l0aCBhbiBleGNsYW1hdGlvbiBwb2ludCwKK2l0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNoZWxsIGNvbW1hbmQuICBGb3IgZXhhbXBsZSwgZGVmaW5pbmcKK2BhbGlhcy5uZXcgPSAhZ2l0ayAtLWFsbCAtLW5vdCBPUklHX0hFQURgLCB0aGUgaW52b2NhdGlvbgorYGdpdCBuZXdgIGlzIGVxdWl2YWxlbnQgdG8gcnVubmluZyB0aGUgc2hlbGwgY29tbWFuZAorYGdpdGsgLS1hbGwgLS1ub3QgT1JJR19IRUFEYC4gIE5vdGUgdGhhdCBzaGVsbCBjb21tYW5kcyB3aWxsIGJlCitleGVjdXRlZCBmcm9tIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIGEgcmVwb3NpdG9yeSwgd2hpY2ggbWF5Citub3QgbmVjZXNzYXJpbHkgYmUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorYEdJVF9QUkVGSVhgIGlzIHNldCBhcyByZXR1cm5lZCBieSBydW5uaW5nIGBnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXhgCitmcm9tIHRoZSBvcmlnaW5hbCBjdXJyZW50IGRpcmVjdG9yeS4gU2VlIGxpbmtnaXQ6Z2l0LXJldi1wYXJzZVsxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2FtLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2FtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmNhZDJlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYW0udHh0CkBAIC0wLDAgKzEsMTQgQEAKK2FtLmtlZXBjcjo6CisJSWYgdHJ1ZSwgZ2l0LWFtIHdpbGwgY2FsbCBnaXQtbWFpbHNwbGl0IGZvciBwYXRjaGVzIGluIG1ib3ggZm9ybWF0CisJd2l0aCBwYXJhbWV0ZXIgYC0ta2VlcC1jcmAuIEluIHRoaXMgY2FzZSBnaXQtbWFpbHNwbGl0IHdpbGwKKwlub3QgcmVtb3ZlIGBccmAgZnJvbSBsaW5lcyBlbmRpbmcgd2l0aCBgXHJcbmAuIENhbiBiZSBvdmVycmlkZGVuCisJYnkgZ2l2aW5nIGAtLW5vLWtlZXAtY3JgIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKwlTZWUgbGlua2dpdDpnaXQtYW1bMV0sIGxpbmtnaXQ6Z2l0LW1haWxzcGxpdFsxXS4KKworYW0udGhyZWVXYXk6OgorCUJ5IGRlZmF1bHQsIGBnaXQgYW1gIHdpbGwgZmFpbCBpZiB0aGUgcGF0Y2ggZG9lcyBub3QgYXBwbHkgY2xlYW5seS4gV2hlbgorCXNldCB0byB0cnVlLCB0aGlzIHNldHRpbmcgdGVsbHMgYGdpdCBhbWAgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlIGlmCisJdGhlIHBhdGNoIHJlY29yZHMgdGhlIGlkZW50aXR5IG9mIGJsb2JzIGl0IGlzIHN1cHBvc2VkIHRvIGFwcGx5IHRvIGFuZAorCXdlIGhhdmUgdGhvc2UgYmxvYnMgYXZhaWxhYmxlIGxvY2FsbHkgKGVxdWl2YWxlbnQgdG8gZ2l2aW5nIHRoZSBgLS0zd2F5YAorCW9wdGlvbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUpLiBEZWZhdWx0cyB0byBgZmFsc2VgLgorCVNlZSBsaW5rZ2l0OmdpdC1hbVsxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2FwcGx5LnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2FwcGx5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmI4ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYXBwbHkudHh0CkBAIC0wLDAgKzEsMTEgQEAKK2FwcGx5Lmlnbm9yZVdoaXRlc3BhY2U6OgorCVdoZW4gc2V0IHRvICdjaGFuZ2UnLCB0ZWxscyAnZ2l0IGFwcGx5JyB0byBpZ25vcmUgY2hhbmdlcyBpbgorCXdoaXRlc3BhY2UsIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgYC0taWdub3JlLXNwYWNlLWNoYW5nZWAKKwlvcHRpb24uCisJV2hlbiBzZXQgdG8gb25lIG9mOiBubywgbm9uZSwgbmV2ZXIsIGZhbHNlIHRlbGxzICdnaXQgYXBwbHknIHRvCisJcmVzcGVjdCBhbGwgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcy4KKwlTZWUgbGlua2dpdDpnaXQtYXBwbHlbMV0uCisKK2FwcGx5LndoaXRlc3BhY2U6OgorCVRlbGxzICdnaXQgYXBwbHknIGhvdyB0byBoYW5kbGUgd2hpdGVzcGFjZXMsIGluIHRoZSBzYW1lIHdheQorCWFzIHRoZSBgLS13aGl0ZXNwYWNlYCBvcHRpb24uIFNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2JsYW1lLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2JsYW1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDY4ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYmxhbWUudHh0CkBAIC0wLDAgKzEsMzcgQEAKK2JsYW1lLmJsYW5rQm91bmRhcnk6OgorCVNob3cgYmxhbmsgY29tbWl0IG9iamVjdCBuYW1lIGZvciBib3VuZGFyeSBjb21taXRzIGluCisJbGlua2dpdDpnaXQtYmxhbWVbMV0uIFRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIGZhbHNlLgorCitibGFtZS5jb2xvcmluZzo6CisJVGhpcyBkZXRlcm1pbmVzIHRoZSBjb2xvcmluZyBzY2hlbWUgdG8gYmUgYXBwbGllZCB0byBibGFtZQorCW91dHB1dC4gSXQgY2FuIGJlICdyZXBlYXRlZExpbmVzJywgJ2hpZ2hsaWdodFJlY2VudCcsCisJb3IgJ25vbmUnIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgorCitibGFtZS5kYXRlOjoKKwlTcGVjaWZpZXMgdGhlIGZvcm1hdCB1c2VkIHRvIG91dHB1dCBkYXRlcyBpbiBsaW5rZ2l0OmdpdC1ibGFtZVsxXS4KKwlJZiB1bnNldCB0aGUgaXNvIGZvcm1hdCBpcyB1c2VkLiBGb3Igc3VwcG9ydGVkIHZhbHVlcywKKwlzZWUgdGhlIGRpc2N1c3Npb24gb2YgdGhlIGAtLWRhdGVgIG9wdGlvbiBhdCBsaW5rZ2l0OmdpdC1sb2dbMV0uCisKK2JsYW1lLnNob3dFbWFpbDo6CisJU2hvdyB0aGUgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgYXV0aG9yIG5hbWUgaW4gbGlua2dpdDpnaXQtYmxhbWVbMV0uCisJVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gZmFsc2UuCisKK2JsYW1lLnNob3dSb290OjoKKwlEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgaW4gbGlua2dpdDpnaXQtYmxhbWVbMV0uCisJVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gZmFsc2UuCisKK2JsYW1lLmlnbm9yZVJldnNGaWxlOjoKKwlJZ25vcmUgcmV2aXNpb25zIGxpc3RlZCBpbiB0aGUgZmlsZSwgb25lIHVuYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWUgcGVyCisJbGluZSwgaW4gbGlua2dpdDpnaXQtYmxhbWVbMV0uICBXaGl0ZXNwYWNlIGFuZCBjb21tZW50cyBiZWdpbm5pbmcgd2l0aAorCWAjYCBhcmUgaWdub3JlZC4gIFRoaXMgb3B0aW9uIG1heSBiZSByZXBlYXRlZCBtdWx0aXBsZSB0aW1lcy4gIEVtcHR5CisJZmlsZSBuYW1lcyB3aWxsIHJlc2V0IHRoZSBsaXN0IG9mIGlnbm9yZWQgcmV2aXNpb25zLiAgVGhpcyBvcHRpb24gd2lsbAorCWJlIGhhbmRsZWQgYmVmb3JlIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9uIGAtLWlnbm9yZS1yZXZzLWZpbGVgLgorCitibGFtZS5tYXJrVW5ibGFtYWJsZXM6OgorCU1hcmsgbGluZXMgdGhhdCB3ZXJlIGNoYW5nZWQgYnkgYW4gaWdub3JlZCByZXZpc2lvbiB0aGF0IHdlIGNvdWxkIG5vdAorCWF0dHJpYnV0ZSB0byBhbm90aGVyIGNvbW1pdCB3aXRoIGEgJyonIGluIHRoZSBvdXRwdXQgb2YKKwlsaW5rZ2l0OmdpdC1ibGFtZVsxXS4KKworYmxhbWUubWFya0lnbm9yZWRMaW5lczo6CisJTWFyayBsaW5lcyB0aGF0IHdlcmUgY2hhbmdlZCBieSBhbiBpZ25vcmVkIHJldmlzaW9uIHRoYXQgd2UgYXR0cmlidXRlZCB0bworCWFub3RoZXIgY29tbWl0IHdpdGggYSAnPycgaW4gdGhlIG91dHB1dCBvZiBsaW5rZ2l0OmdpdC1ibGFtZVsxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2JyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9icmFuY2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNWYzMjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9icmFuY2gudHh0CkBAIC0wLDAgKzEsMTAzIEBACiticmFuY2guYXV0b1NldHVwTWVyZ2U6OgorCVRlbGxzICdnaXQgYnJhbmNoJywgJ2dpdCBzd2l0Y2gnIGFuZCAnZ2l0IGNoZWNrb3V0JyB0byBzZXQgdXAgbmV3IGJyYW5jaGVzCisJc28gdGhhdCBsaW5rZ2l0OmdpdC1wdWxsWzFdIHdpbGwgYXBwcm9wcmlhdGVseSBtZXJnZSBmcm9tIHRoZQorCXN0YXJ0aW5nIHBvaW50IGJyYW5jaC4gTm90ZSB0aGF0IGV2ZW4gaWYgdGhpcyBvcHRpb24gaXMgbm90IHNldCwKKwl0aGlzIGJlaGF2aW9yIGNhbiBiZSBjaG9zZW4gcGVyLWJyYW5jaCB1c2luZyB0aGUgYC0tdHJhY2tgCisJYW5kIGAtLW5vLXRyYWNrYCBvcHRpb25zLiBUaGUgdmFsaWQgc2V0dGluZ3MgYXJlOiBgZmFsc2VgIC0tIG5vCisJYXV0b21hdGljIHNldHVwIGlzIGRvbmU7IGB0cnVlYCAtLSBhdXRvbWF0aWMgc2V0dXAgaXMgZG9uZSB3aGVuIHRoZQorCXN0YXJ0aW5nIHBvaW50IGlzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaDsgYGFsd2F5c2AgLS0KKwlhdXRvbWF0aWMgc2V0dXAgaXMgZG9uZSB3aGVuIHRoZSBzdGFydGluZyBwb2ludCBpcyBlaXRoZXIgYQorCWxvY2FsIGJyYW5jaCBvciByZW1vdGUtdHJhY2tpbmcKKwlicmFuY2guIFRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIHRydWUuCisKK2JyYW5jaC5hdXRvU2V0dXBSZWJhc2U6OgorCVdoZW4gYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQgd2l0aCAnZ2l0IGJyYW5jaCcsICdnaXQgc3dpdGNoJyBvciAnZ2l0IGNoZWNrb3V0JworCXRoYXQgdHJhY2tzIGFub3RoZXIgYnJhbmNoLCB0aGlzIHZhcmlhYmxlIHRlbGxzIEdpdCB0byBzZXQKKwl1cCBwdWxsIHRvIHJlYmFzZSBpbnN0ZWFkIG9mIG1lcmdlIChzZWUgImJyYW5jaC48bmFtZT4ucmViYXNlIikuCisJV2hlbiBgbmV2ZXJgLCByZWJhc2UgaXMgbmV2ZXIgYXV0b21hdGljYWxseSBzZXQgdG8gdHJ1ZS4KKwlXaGVuIGBsb2NhbGAsIHJlYmFzZSBpcyBzZXQgdG8gdHJ1ZSBmb3IgdHJhY2tlZCBicmFuY2hlcyBvZgorCW90aGVyIGxvY2FsIGJyYW5jaGVzLgorCVdoZW4gYHJlbW90ZWAsIHJlYmFzZSBpcyBzZXQgdG8gdHJ1ZSBmb3IgdHJhY2tlZCBicmFuY2hlcyBvZgorCXJlbW90ZS10cmFja2luZyBicmFuY2hlcy4KKwlXaGVuIGBhbHdheXNgLCByZWJhc2Ugd2lsbCBiZSBzZXQgdG8gdHJ1ZSBmb3IgYWxsIHRyYWNraW5nCisJYnJhbmNoZXMuCisJU2VlICJicmFuY2guYXV0b1NldHVwTWVyZ2UiIGZvciBkZXRhaWxzIG9uIGhvdyB0byBzZXQgdXAgYQorCWJyYW5jaCB0byB0cmFjayBhbm90aGVyIGJyYW5jaC4KKwlUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byBuZXZlci4KKworYnJhbmNoLnNvcnQ6OgorCVRoaXMgdmFyaWFibGUgY29udHJvbHMgdGhlIHNvcnQgb3JkZXJpbmcgb2YgYnJhbmNoZXMgd2hlbiBkaXNwbGF5ZWQgYnkKKwlsaW5rZ2l0OmdpdC1icmFuY2hbMV0uIFdpdGhvdXQgdGhlICItLXNvcnQ9PHZhbHVlPiIgb3B0aW9uIHByb3ZpZGVkLCB0aGUKKwl2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdC4KKwlTZWUgbGlua2dpdDpnaXQtZm9yLWVhY2gtcmVmWzFdIGZpZWxkIG5hbWVzIGZvciB2YWxpZCB2YWx1ZXMuCisKK2JyYW5jaC48bmFtZT4ucmVtb3RlOjoKKwlXaGVuIG9uIGJyYW5jaCA8bmFtZT4sIGl0IHRlbGxzICdnaXQgZmV0Y2gnIGFuZCAnZ2l0IHB1c2gnCisJd2hpY2ggcmVtb3RlIHRvIGZldGNoIGZyb20vcHVzaCB0by4gIFRoZSByZW1vdGUgdG8gcHVzaCB0bworCW1heSBiZSBvdmVycmlkZGVuIHdpdGggYHJlbW90ZS5wdXNoRGVmYXVsdGAgKGZvciBhbGwgYnJhbmNoZXMpLgorCVRoZSByZW1vdGUgdG8gcHVzaCB0bywgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCwgbWF5IGJlIGZ1cnRoZXIKKwlvdmVycmlkZGVuIGJ5IGBicmFuY2guPG5hbWU+LnB1c2hSZW1vdGVgLiAgSWYgbm8gcmVtb3RlIGlzCisJY29uZmlndXJlZCwgb3IgaWYgeW91IGFyZSBub3Qgb24gYW55IGJyYW5jaCwgaXQgZGVmYXVsdHMgdG8KKwlgb3JpZ2luYCBmb3IgZmV0Y2hpbmcgYW5kIGByZW1vdGUucHVzaERlZmF1bHRgIGZvciBwdXNoaW5nLgorCUFkZGl0aW9uYWxseSwgYC5gIChhIHBlcmlvZCkgaXMgdGhlIGN1cnJlbnQgbG9jYWwgcmVwb3NpdG9yeQorCShhIGRvdC1yZXBvc2l0b3J5KSwgc2VlIGBicmFuY2guPG5hbWU+Lm1lcmdlYCdzIGZpbmFsIG5vdGUgYmVsb3cuCisKK2JyYW5jaC48bmFtZT4ucHVzaFJlbW90ZTo6CisJV2hlbiBvbiBicmFuY2ggPG5hbWU+LCBpdCBvdmVycmlkZXMgYGJyYW5jaC48bmFtZT4ucmVtb3RlYCBmb3IKKwlwdXNoaW5nLiAgSXQgYWxzbyBvdmVycmlkZXMgYHJlbW90ZS5wdXNoRGVmYXVsdGAgZm9yIHB1c2hpbmcKKwlmcm9tIGJyYW5jaCA8bmFtZT4uICBXaGVuIHlvdSBwdWxsIGZyb20gb25lIHBsYWNlIChlLmcuIHlvdXIKKwl1cHN0cmVhbSkgYW5kIHB1c2ggdG8gYW5vdGhlciBwbGFjZSAoZS5nLiB5b3VyIG93biBwdWJsaXNoaW5nCisJcmVwb3NpdG9yeSksIHlvdSB3b3VsZCB3YW50IHRvIHNldCBgcmVtb3RlLnB1c2hEZWZhdWx0YCB0bworCXNwZWNpZnkgdGhlIHJlbW90ZSB0byBwdXNoIHRvIGZvciBhbGwgYnJhbmNoZXMsIGFuZCB1c2UgdGhpcworCW9wdGlvbiB0byBvdmVycmlkZSBpdCBmb3IgYSBzcGVjaWZpYyBicmFuY2guCisKK2JyYW5jaC48bmFtZT4ubWVyZ2U6OgorCURlZmluZXMsIHRvZ2V0aGVyIHdpdGggYnJhbmNoLjxuYW1lPi5yZW1vdGUsIHRoZSB1cHN0cmVhbSBicmFuY2gKKwlmb3IgdGhlIGdpdmVuIGJyYW5jaC4gSXQgdGVsbHMgJ2dpdCBmZXRjaCcvJ2dpdCBwdWxsJy8nZ2l0IHJlYmFzZScgd2hpY2gKKwlicmFuY2ggdG8gbWVyZ2UgYW5kIGNhbiBhbHNvIGFmZmVjdCAnZ2l0IHB1c2gnIChzZWUgcHVzaC5kZWZhdWx0KS4KKwlXaGVuIGluIGJyYW5jaCA8bmFtZT4sIGl0IHRlbGxzICdnaXQgZmV0Y2gnIHRoZSBkZWZhdWx0CisJcmVmc3BlYyB0byBiZSBtYXJrZWQgZm9yIG1lcmdpbmcgaW4gRkVUQ0hfSEVBRC4gVGhlIHZhbHVlIGlzCisJaGFuZGxlZCBsaWtlIHRoZSByZW1vdGUgcGFydCBvZiBhIHJlZnNwZWMsIGFuZCBtdXN0IG1hdGNoIGEKKwlyZWYgd2hpY2ggaXMgZmV0Y2hlZCBmcm9tIHRoZSByZW1vdGUgZ2l2ZW4gYnkKKwkiYnJhbmNoLjxuYW1lPi5yZW1vdGUiLgorCVRoZSBtZXJnZSBpbmZvcm1hdGlvbiBpcyB1c2VkIGJ5ICdnaXQgcHVsbCcgKHdoaWNoIGF0IGZpcnN0IGNhbGxzCisJJ2dpdCBmZXRjaCcpIHRvIGxvb2t1cCB0aGUgZGVmYXVsdCBicmFuY2ggZm9yIG1lcmdpbmcuIFdpdGhvdXQKKwl0aGlzIG9wdGlvbiwgJ2dpdCBwdWxsJyBkZWZhdWx0cyB0byBtZXJnZSB0aGUgZmlyc3QgcmVmc3BlYyBmZXRjaGVkLgorCVNwZWNpZnkgbXVsdGlwbGUgdmFsdWVzIHRvIGdldCBhbiBvY3RvcHVzIG1lcmdlLgorCUlmIHlvdSB3aXNoIHRvIHNldHVwICdnaXQgcHVsbCcgc28gdGhhdCBpdCBtZXJnZXMgaW50byA8bmFtZT4gZnJvbQorCWFub3RoZXIgYnJhbmNoIGluIHRoZSBsb2NhbCByZXBvc2l0b3J5LCB5b3UgY2FuIHBvaW50CisJYnJhbmNoLjxuYW1lPi5tZXJnZSB0byB0aGUgZGVzaXJlZCBicmFuY2gsIGFuZCB1c2UgdGhlIHJlbGF0aXZlIHBhdGgKKwlzZXR0aW5nIGAuYCAoYSBwZXJpb2QpIGZvciBicmFuY2guPG5hbWU+LnJlbW90ZS4KKworYnJhbmNoLjxuYW1lPi5tZXJnZU9wdGlvbnM6OgorCVNldHMgZGVmYXVsdCBvcHRpb25zIGZvciBtZXJnaW5nIGludG8gYnJhbmNoIDxuYW1lPi4gVGhlIHN5bnRheCBhbmQKKwlzdXBwb3J0ZWQgb3B0aW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhvc2Ugb2YgbGlua2dpdDpnaXQtbWVyZ2VbMV0sIGJ1dAorCW9wdGlvbiB2YWx1ZXMgY29udGFpbmluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIGN1cnJlbnRseSBub3QKKwlzdXBwb3J0ZWQuCisKK2JyYW5jaC48bmFtZT4ucmViYXNlOjoKKwlXaGVuIHRydWUsIHJlYmFzZSB0aGUgYnJhbmNoIDxuYW1lPiBvbiB0b3Agb2YgdGhlIGZldGNoZWQgYnJhbmNoLAorCWluc3RlYWQgb2YgbWVyZ2luZyB0aGUgZGVmYXVsdCBicmFuY2ggZnJvbSB0aGUgZGVmYXVsdCByZW1vdGUgd2hlbgorCSJnaXQgcHVsbCIgaXMgcnVuLiBTZWUgInB1bGwucmViYXNlIiBmb3IgZG9pbmcgdGhpcyBpbiBhIG5vbgorCWJyYW5jaC1zcGVjaWZpYyBtYW5uZXIuCisrCitXaGVuIGBtZXJnZXNgIChvciBqdXN0ICdtJyksIHBhc3MgdGhlIGAtLXJlYmFzZS1tZXJnZXNgIG9wdGlvbiB0byAnZ2l0IHJlYmFzZScKK3NvIHRoYXQgdGhlIGxvY2FsIG1lcmdlIGNvbW1pdHMgYXJlIGluY2x1ZGVkIGluIHRoZSByZWJhc2UgKHNlZQorbGlua2dpdDpnaXQtcmViYXNlWzFdIGZvciBkZXRhaWxzKS4KKysKK1doZW4gYHByZXNlcnZlYCAob3IganVzdCAncCcsIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYG1lcmdlc2ApLCBhbHNvIHBhc3MKK2AtLXByZXNlcnZlLW1lcmdlc2AgYWxvbmcgdG8gJ2dpdCByZWJhc2UnIHNvIHRoYXQgbG9jYWxseSBjb21taXR0ZWQgbWVyZ2UKK2NvbW1pdHMgd2lsbCBub3QgYmUgZmxhdHRlbmVkIGJ5IHJ1bm5pbmcgJ2dpdCBwdWxsJy4KKysKK1doZW4gdGhlIHZhbHVlIGlzIGBpbnRlcmFjdGl2ZWAgKG9yIGp1c3QgJ2knKSwgdGhlIHJlYmFzZSBpcyBydW4gaW4gaW50ZXJhY3RpdmUKK21vZGUuCisrCisqTk9URSo6IHRoaXMgaXMgYSBwb3NzaWJseSBkYW5nZXJvdXMgb3BlcmF0aW9uOyBkbyAqbm90KiB1c2UKK2l0IHVubGVzcyB5b3UgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIChzZWUgbGlua2dpdDpnaXQtcmViYXNlWzFdCitmb3IgZGV0YWlscykuCisKK2JyYW5jaC48bmFtZT4uZGVzY3JpcHRpb246OgorCUJyYW5jaCBkZXNjcmlwdGlvbiwgY2FuIGJlIGVkaXRlZCB3aXRoCisJYGdpdCBicmFuY2ggLS1lZGl0LWRlc2NyaXB0aW9uYC4gQnJhbmNoIGRlc2NyaXB0aW9uIGlzCisJYXV0b21hdGljYWxseSBhZGRlZCBpbiB0aGUgZm9ybWF0LXBhdGNoIGNvdmVyIGxldHRlciBvcgorCXJlcXVlc3QtcHVsbCBzdW1tYXJ5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvYnJvd3Nlci50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9icm93c2VyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTVkZjIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYnJvd3Nlci50eHQKQEAgLTAsMCArMSw5IEBACiticm93c2VyLjx0b29sPi5jbWQ6OgorCVNwZWNpZnkgdGhlIGNvbW1hbmQgdG8gaW52b2tlIHRoZSBzcGVjaWZpZWQgYnJvd3Nlci4gVGhlCisJc3BlY2lmaWVkIGNvbW1hbmQgaXMgZXZhbHVhdGVkIGluIHNoZWxsIHdpdGggdGhlIFVSTHMgcGFzc2VkCisJYXMgYXJndW1lbnRzLiAoU2VlIGxpbmtnaXQ6Z2l0LXdlYntsaXRkZH1icm93c2VbMV0uKQorCiticm93c2VyLjx0b29sPi5wYXRoOjoKKwlPdmVycmlkZSB0aGUgcGF0aCBmb3IgdGhlIGdpdmVuIHRvb2wgdGhhdCBtYXkgYmUgdXNlZCB0bworCWJyb3dzZSBIVE1MIGhlbHAgKHNlZSBgLXdgIG9wdGlvbiBpbiBsaW5rZ2l0OmdpdC1oZWxwWzFdKSBvciBhCisJd29ya2luZyByZXBvc2l0b3J5IGluIGdpdHdlYiAoc2VlIGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2NoZWNrb3V0LnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NoZWNrb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjY0NjgxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvY2hlY2tvdXQudHh0CkBAIC0wLDAgKzEsMTggQEAKK2NoZWNrb3V0LmRlZmF1bHRSZW1vdGU6OgorCVdoZW4geW91IHJ1biAnZ2l0IGNoZWNrb3V0IDxzb21ldGhpbmc+JworCW9yICdnaXQgc3dpdGNoIDxzb21ldGhpbmc+JyBhbmQgb25seSBoYXZlIG9uZQorCXJlbW90ZSwgaXQgbWF5IGltcGxpY2l0bHkgZmFsbCBiYWNrIG9uIGNoZWNraW5nIG91dCBhbmQKKwl0cmFja2luZyBlLmcuICdvcmlnaW4vPHNvbWV0aGluZz4nLiBUaGlzIHN0b3BzIHdvcmtpbmcgYXMgc29vbgorCWFzIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgcmVtb3RlIHdpdGggYSAnPHNvbWV0aGluZz4nCisJcmVmZXJlbmNlLiBUaGlzIHNldHRpbmcgYWxsb3dzIGZvciBzZXR0aW5nIHRoZSBuYW1lIG9mIGEKKwlwcmVmZXJyZWQgcmVtb3RlIHRoYXQgc2hvdWxkIGFsd2F5cyB3aW4gd2hlbiBpdCBjb21lcyB0bworCWRpc2FtYmlndWF0aW9uLiBUaGUgdHlwaWNhbCB1c2UtY2FzZSBpcyB0byBzZXQgdGhpcyB0bworCWBvcmlnaW5gLgorKworQ3VycmVudGx5IHRoaXMgaXMgdXNlZCBieSBsaW5rZ2l0OmdpdC1zd2l0Y2hbMV0gYW5kCitsaW5rZ2l0OmdpdC1jaGVja291dFsxXSB3aGVuICdnaXQgY2hlY2tvdXQgPHNvbWV0aGluZz4nCitvciAnZ2l0IHN3aXRjaCA8c29tZXRoaW5nPicKK3dpbGwgY2hlY2tvdXQgdGhlICc8c29tZXRoaW5nPicgYnJhbmNoIG9uIGFub3RoZXIgcmVtb3RlLAorYW5kIGJ5IGxpbmtnaXQ6Z2l0LXdvcmt0cmVlWzFdIHdoZW4gJ2dpdCB3b3JrdHJlZSBhZGQnIHJlZmVycyB0byBhCityZW1vdGUgYnJhbmNoLiBUaGlzIHNldHRpbmcgbWlnaHQgYmUgdXNlZCBmb3Igb3RoZXIgY2hlY2tvdXQtbGlrZQorY29tbWFuZHMgb3IgZnVuY3Rpb25hbGl0eSBpbiB0aGUgZnV0dXJlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvY2xlYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvY2xlYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MDdjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jbGVhbi50eHQKQEAgLTAsMCArMSwzIEBACitjbGVhbi5yZXF1aXJlRm9yY2U6OgorCUEgYm9vbGVhbiB0byBtYWtlIGdpdC1jbGVhbiBkbyBub3RoaW5nIHVubGVzcyBnaXZlbiAtZiwKKwktaSBvciAtbi4gICBEZWZhdWx0cyB0byB0cnVlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvY29sb3IudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvY29sb3IudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZGFhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jb2xvci50eHQKQEAgLTAsMCArMSwyMDEgQEAKK2NvbG9yLmFkdmljZTo6CisJQSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIGNvbG9yIGluIGhpbnRzIChlLmcuIHdoZW4gYSBwdXNoCisJZmFpbGVkLCBzZWUgYGFkdmljZS4qYCBmb3IgYSBsaXN0KS4gIE1heSBiZSBzZXQgdG8gYGFsd2F5c2AsCisJYGZhbHNlYCAob3IgYG5ldmVyYCkgb3IgYGF1dG9gIChvciBgdHJ1ZWApLCBpbiB3aGljaCBjYXNlIGNvbG9ycworCWFyZSB1c2VkIG9ubHkgd2hlbiB0aGUgZXJyb3Igb3V0cHV0IGdvZXMgdG8gYSB0ZXJtaW5hbC4gSWYKKwl1bnNldCwgdGhlbiB0aGUgdmFsdWUgb2YgYGNvbG9yLnVpYCBpcyB1c2VkIChgYXV0b2AgYnkgZGVmYXVsdCkuCisKK2NvbG9yLmFkdmljZS5oaW50OjoKKwlVc2UgY3VzdG9taXplZCBjb2xvciBmb3IgaGludHMuCisKK2NvbG9yLmJsYW1lLmhpZ2hsaWdodFJlY2VudDo6CisJVGhpcyBjYW4gYmUgdXNlZCB0byBjb2xvciB0aGUgbWV0YWRhdGEgb2YgYSBibGFtZSBsaW5lIGRlcGVuZGluZworCW9uIGFnZSBvZiB0aGUgbGluZS4KKysKK1RoaXMgc2V0dGluZyBzaG91bGQgYmUgc2V0IHRvIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY29sb3IgYW5kIGRhdGUgc2V0dGluZ3MsCitzdGFydGluZyBhbmQgZW5kaW5nIHdpdGggYSBjb2xvciwgdGhlIGRhdGVzIHNob3VsZCBiZSBzZXQgZnJvbSBvbGRlc3QgdG8gbmV3ZXN0LgorVGhlIG1ldGFkYXRhIHdpbGwgYmUgY29sb3JlZCBnaXZlbiB0aGUgY29sb3JzIGlmIHRoZSBsaW5lIHdhcyBpbnRyb2R1Y2VkCitiZWZvcmUgdGhlIGdpdmVuIHRpbWVzdGFtcCwgb3ZlcndyaXRpbmcgb2xkZXIgdGltZXN0YW1wZWQgY29sb3JzLgorKworSW5zdGVhZCBvZiBhbiBhYnNvbHV0ZSB0aW1lc3RhbXAgcmVsYXRpdmUgdGltZXN0YW1wcyB3b3JrIGFzIHdlbGwsIGUuZy4KKzIud2Vla3MuYWdvIGlzIHZhbGlkIHRvIGFkZHJlc3MgYW55dGhpbmcgb2xkZXIgdGhhbiAyIHdlZWtzLgorKworSXQgZGVmYXVsdHMgdG8gJ2JsdWUsMTIgbW9udGggYWdvLHdoaXRlLDEgbW9udGggYWdvLHJlZCcsIHdoaWNoIGNvbG9ycworZXZlcnl0aGluZyBvbGRlciB0aGFuIG9uZSB5ZWFyIGJsdWUsIHJlY2VudCBjaGFuZ2VzIGJldHdlZW4gb25lIG1vbnRoIGFuZAorb25lIHllYXIgb2xkIGFyZSBrZXB0IHdoaXRlLCBhbmQgbGluZXMgaW50cm9kdWNlZCB3aXRoaW4gdGhlIGxhc3QgbW9udGggYXJlCitjb2xvcmVkIHJlZC4KKworY29sb3IuYmxhbWUucmVwZWF0ZWRMaW5lczo6CisJVXNlIHRoZSBjdXN0b21pemVkIGNvbG9yIGZvciB0aGUgcGFydCBvZiBnaXQtYmxhbWUgb3V0cHV0IHRoYXQKKwlpcyByZXBlYXRlZCBtZXRhIGluZm9ybWF0aW9uIHBlciBsaW5lIChzdWNoIGFzIGNvbW1pdCBpZCwKKwlhdXRob3IgbmFtZSwgZGF0ZSBhbmQgdGltZXpvbmUpLiBEZWZhdWx0cyB0byBjeWFuLgorCitjb2xvci5icmFuY2g6OgorCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjb2xvciBpbiB0aGUgb3V0cHV0IG9mCisJbGlua2dpdDpnaXQtYnJhbmNoWzFdLiBNYXkgYmUgc2V0IHRvIGBhbHdheXNgLAorCWBmYWxzZWAgKG9yIGBuZXZlcmApIG9yIGBhdXRvYCAob3IgYHRydWVgKSwgaW4gd2hpY2ggY2FzZSBjb2xvcnMgYXJlIHVzZWQKKwlvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyB0byBhIHRlcm1pbmFsLiBJZiB1bnNldCwgdGhlbiB0aGUKKwl2YWx1ZSBvZiBgY29sb3IudWlgIGlzIHVzZWQgKGBhdXRvYCBieSBkZWZhdWx0KS4KKworY29sb3IuYnJhbmNoLjxzbG90Pjo6CisJVXNlIGN1c3RvbWl6ZWQgY29sb3IgZm9yIGJyYW5jaCBjb2xvcmF0aW9uLiBgPHNsb3Q+YCBpcyBvbmUgb2YKKwlgY3VycmVudGAgKHRoZSBjdXJyZW50IGJyYW5jaCksIGBsb2NhbGAgKGEgbG9jYWwgYnJhbmNoKSwKKwlgcmVtb3RlYCAoYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGluIHJlZnMvcmVtb3Rlcy8pLAorCWB1cHN0cmVhbWAgKHVwc3RyZWFtIHRyYWNraW5nIGJyYW5jaCksIGBwbGFpbmAgKG90aGVyCisJcmVmcykuCisKK2NvbG9yLmRpZmY6OgorCVdoZXRoZXIgdG8gdXNlIEFOU0kgZXNjYXBlIHNlcXVlbmNlcyB0byBhZGQgY29sb3IgdG8gcGF0Y2hlcy4KKwlJZiB0aGlzIGlzIHNldCB0byBgYWx3YXlzYCwgbGlua2dpdDpnaXQtZGlmZlsxXSwKKwlsaW5rZ2l0OmdpdC1sb2dbMV0sIGFuZCBsaW5rZ2l0OmdpdC1zaG93WzFdIHdpbGwgdXNlIGNvbG9yCisJZm9yIGFsbCBwYXRjaGVzLiAgSWYgaXQgaXMgc2V0IHRvIGB0cnVlYCBvciBgYXV0b2AsIHRob3NlCisJY29tbWFuZHMgd2lsbCBvbmx5IHVzZSBjb2xvciB3aGVuIG91dHB1dCBpcyB0byB0aGUgdGVybWluYWwuCisJSWYgdW5zZXQsIHRoZW4gdGhlIHZhbHVlIG9mIGBjb2xvci51aWAgaXMgdXNlZCAoYGF1dG9gIGJ5CisJZGVmYXVsdCkuCisrCitUaGlzIGRvZXMgbm90IGFmZmVjdCBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gb3IgdGhlCisnZ2l0LWRpZmYte2FzdGVyaXNrfScgcGx1bWJpbmcgY29tbWFuZHMuICBDYW4gYmUgb3ZlcnJpZGRlbiBvbiB0aGUKK2NvbW1hbmQgbGluZSB3aXRoIHRoZSBgLS1jb2xvcls9PHdoZW4+XWAgb3B0aW9uLgorCitjb2xvci5kaWZmLjxzbG90Pjo6CisJVXNlIGN1c3RvbWl6ZWQgY29sb3IgZm9yIGRpZmYgY29sb3JpemF0aW9uLiAgYDxzbG90PmAgc3BlY2lmaWVzCisJd2hpY2ggcGFydCBvZiB0aGUgcGF0Y2ggdG8gdXNlIHRoZSBzcGVjaWZpZWQgY29sb3IsIGFuZCBpcyBvbmUKKwlvZiBgY29udGV4dGAgKGNvbnRleHQgdGV4dCAtIGBwbGFpbmAgaXMgYSBoaXN0b3JpY2FsIHN5bm9ueW0pLAorCWBtZXRhYCAobWV0YWluZm9ybWF0aW9uKSwgYGZyYWdgCisJKGh1bmsgaGVhZGVyKSwgJ2Z1bmMnIChmdW5jdGlvbiBpbiBodW5rIGhlYWRlciksIGBvbGRgIChyZW1vdmVkIGxpbmVzKSwKKwlgbmV3YCAoYWRkZWQgbGluZXMpLCBgY29tbWl0YCAoY29tbWl0IGhlYWRlcnMpLCBgd2hpdGVzcGFjZWAKKwkoaGlnaGxpZ2h0aW5nIHdoaXRlc3BhY2UgZXJyb3JzKSwgYG9sZE1vdmVkYCAoZGVsZXRlZCBsaW5lcyksCisJYG5ld01vdmVkYCAoYWRkZWQgbGluZXMpLCBgb2xkTW92ZWREaW1tZWRgLCBgb2xkTW92ZWRBbHRlcm5hdGl2ZWAsCisJYG9sZE1vdmVkQWx0ZXJuYXRpdmVEaW1tZWRgLCBgbmV3TW92ZWREaW1tZWRgLCBgbmV3TW92ZWRBbHRlcm5hdGl2ZWAKKwlgbmV3TW92ZWRBbHRlcm5hdGl2ZURpbW1lZGAgKFNlZSB0aGUgJzxtb2RlPicKKwlzZXR0aW5nIG9mICctLWNvbG9yLW1vdmVkJyBpbiBsaW5rZ2l0OmdpdC1kaWZmWzFdIGZvciBkZXRhaWxzKSwKKwlgY29udGV4dERpbW1lZGAsIGBvbGREaW1tZWRgLCBgbmV3RGltbWVkYCwgYGNvbnRleHRCb2xkYCwKKwlgb2xkQm9sZGAsIGFuZCBgbmV3Qm9sZGAgKHNlZSBsaW5rZ2l0OmdpdC1yYW5nZS1kaWZmWzFdIGZvciBkZXRhaWxzKS4KKworY29sb3IuZGVjb3JhdGUuPHNsb3Q+OjoKKwlVc2UgY3VzdG9taXplZCBjb2xvciBmb3IgJ2dpdCBsb2cgLS1kZWNvcmF0ZScgb3V0cHV0LiAgYDxzbG90PmAgaXMgb25lCisJb2YgYGJyYW5jaGAsIGByZW1vdGVCcmFuY2hgLCBgdGFnYCwgYHN0YXNoYCBvciBgSEVBRGAgZm9yIGxvY2FsCisJYnJhbmNoZXMsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcywgdGFncywgc3Rhc2ggYW5kIEhFQUQsIHJlc3BlY3RpdmVseQorCWFuZCBgZ3JhZnRlZGAgZm9yIGdyYWZ0ZWQgY29tbWl0cy4KKworY29sb3IuZ3JlcDo6CisJV2hlbiBzZXQgdG8gYGFsd2F5c2AsIGFsd2F5cyBoaWdobGlnaHQgbWF0Y2hlcy4gIFdoZW4gYGZhbHNlYCAob3IKKwlgbmV2ZXJgKSwgbmV2ZXIuICBXaGVuIHNldCB0byBgdHJ1ZWAgb3IgYGF1dG9gLCB1c2UgY29sb3Igb25seQorCXdoZW4gdGhlIG91dHB1dCBpcyB3cml0dGVuIHRvIHRoZSB0ZXJtaW5hbC4gIElmIHVuc2V0LCB0aGVuIHRoZQorCXZhbHVlIG9mIGBjb2xvci51aWAgaXMgdXNlZCAoYGF1dG9gIGJ5IGRlZmF1bHQpLgorCitjb2xvci5ncmVwLjxzbG90Pjo6CisJVXNlIGN1c3RvbWl6ZWQgY29sb3IgZm9yIGdyZXAgY29sb3JpemF0aW9uLiAgYDxzbG90PmAgc3BlY2lmaWVzIHdoaWNoCisJcGFydCBvZiB0aGUgbGluZSB0byB1c2UgdGhlIHNwZWNpZmllZCBjb2xvciwgYW5kIGlzIG9uZSBvZgorKworLS0KK2Bjb250ZXh0YDs7CisJbm9uLW1hdGNoaW5nIHRleHQgaW4gY29udGV4dCBsaW5lcyAod2hlbiB1c2luZyBgLUFgLCBgLUJgLCBvciBgLUNgKQorYGZpbGVuYW1lYDs7CisJZmlsZW5hbWUgcHJlZml4ICh3aGVuIG5vdCB1c2luZyBgLWhgKQorYGZ1bmN0aW9uYDs7CisJZnVuY3Rpb24gbmFtZSBsaW5lcyAod2hlbiB1c2luZyBgLXBgKQorYGxpbmVOdW1iZXJgOzsKKwlsaW5lIG51bWJlciBwcmVmaXggKHdoZW4gdXNpbmcgYC1uYCkKK2Bjb2x1bW5gOzsKKwljb2x1bW4gbnVtYmVyIHByZWZpeCAod2hlbiB1c2luZyBgLS1jb2x1bW5gKQorYG1hdGNoYDs7CisJbWF0Y2hpbmcgdGV4dCAoc2FtZSBhcyBzZXR0aW5nIGBtYXRjaENvbnRleHRgIGFuZCBgbWF0Y2hTZWxlY3RlZGApCitgbWF0Y2hDb250ZXh0YDs7CisJbWF0Y2hpbmcgdGV4dCBpbiBjb250ZXh0IGxpbmVzCitgbWF0Y2hTZWxlY3RlZGA7OworCW1hdGNoaW5nIHRleHQgaW4gc2VsZWN0ZWQgbGluZXMKK2BzZWxlY3RlZGA7OworCW5vbi1tYXRjaGluZyB0ZXh0IGluIHNlbGVjdGVkIGxpbmVzCitgc2VwYXJhdG9yYDs7CisJc2VwYXJhdG9ycyBiZXR3ZWVuIGZpZWxkcyBvbiBhIGxpbmUgKGA6YCwgYC1gLCBhbmQgYD1gKQorCWFuZCBiZXR3ZWVuIGh1bmtzIChgLS1gKQorLS0KKworY29sb3IuaW50ZXJhY3RpdmU6OgorCVdoZW4gc2V0IHRvIGBhbHdheXNgLCBhbHdheXMgdXNlIGNvbG9ycyBmb3IgaW50ZXJhY3RpdmUgcHJvbXB0cworCWFuZCBkaXNwbGF5cyAoc3VjaCBhcyB0aG9zZSB1c2VkIGJ5ICJnaXQtYWRkIC0taW50ZXJhY3RpdmUiIGFuZAorCSJnaXQtY2xlYW4gLS1pbnRlcmFjdGl2ZSIpLiBXaGVuIGZhbHNlIChvciBgbmV2ZXJgKSwgbmV2ZXIuCisJV2hlbiBzZXQgdG8gYHRydWVgIG9yIGBhdXRvYCwgdXNlIGNvbG9ycyBvbmx5IHdoZW4gdGhlIG91dHB1dCBpcworCXRvIHRoZSB0ZXJtaW5hbC4gSWYgdW5zZXQsIHRoZW4gdGhlIHZhbHVlIG9mIGBjb2xvci51aWAgaXMKKwl1c2VkIChgYXV0b2AgYnkgZGVmYXVsdCkuCisKK2NvbG9yLmludGVyYWN0aXZlLjxzbG90Pjo6CisJVXNlIGN1c3RvbWl6ZWQgY29sb3IgZm9yICdnaXQgYWRkIC0taW50ZXJhY3RpdmUnIGFuZCAnZ2l0IGNsZWFuCisJLS1pbnRlcmFjdGl2ZScgb3V0cHV0LiBgPHNsb3Q+YCBtYXkgYmUgYHByb21wdGAsIGBoZWFkZXJgLCBgaGVscGAKKwlvciBgZXJyb3JgLCBmb3IgZm91ciBkaXN0aW5jdCB0eXBlcyBvZiBub3JtYWwgb3V0cHV0IGZyb20KKwlpbnRlcmFjdGl2ZSBjb21tYW5kcy4KKworY29sb3IucGFnZXI6OgorCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjb2xvcmVkIG91dHB1dCB3aGVuIHRoZSBwYWdlciBpcyBpbgorCXVzZSAoZGVmYXVsdCBpcyB0cnVlKS4KKworY29sb3IucHVzaDo6CisJQSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIGNvbG9yIGluIHB1c2ggZXJyb3JzLiBNYXkgYmUgc2V0IHRvCisJYGFsd2F5c2AsIGBmYWxzZWAgKG9yIGBuZXZlcmApIG9yIGBhdXRvYCAob3IgYHRydWVgKSwgaW4gd2hpY2gKKwljYXNlIGNvbG9ycyBhcmUgdXNlZCBvbmx5IHdoZW4gdGhlIGVycm9yIG91dHB1dCBnb2VzIHRvIGEgdGVybWluYWwuCisJSWYgdW5zZXQsIHRoZW4gdGhlIHZhbHVlIG9mIGBjb2xvci51aWAgaXMgdXNlZCAoYGF1dG9gIGJ5IGRlZmF1bHQpLgorCitjb2xvci5wdXNoLmVycm9yOjoKKwlVc2UgY3VzdG9taXplZCBjb2xvciBmb3IgcHVzaCBlcnJvcnMuCisKK2NvbG9yLnJlbW90ZTo6CisJSWYgc2V0LCBrZXl3b3JkcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgYXJlIGhpZ2hsaWdodGVkLiBUaGUKKwlrZXl3b3JkcyBhcmUgImVycm9yIiwgIndhcm5pbmciLCAiaGludCIgYW5kICJzdWNjZXNzIiwgYW5kIGFyZQorCW1hdGNoZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LiBNYXkgYmUgc2V0IHRvIGBhbHdheXNgLCBgZmFsc2VgIChvcgorCWBuZXZlcmApIG9yIGBhdXRvYCAob3IgYHRydWVgKS4gSWYgdW5zZXQsIHRoZW4gdGhlIHZhbHVlIG9mCisJYGNvbG9yLnVpYCBpcyB1c2VkIChgYXV0b2AgYnkgZGVmYXVsdCkuCisKK2NvbG9yLnJlbW90ZS48c2xvdD46OgorCVVzZSBjdXN0b21pemVkIGNvbG9yIGZvciBlYWNoIHJlbW90ZSBrZXl3b3JkLiBgPHNsb3Q+YCBtYXkgYmUKKwlgaGludGAsIGB3YXJuaW5nYCwgYHN1Y2Nlc3NgIG9yIGBlcnJvcmAgd2hpY2ggbWF0Y2ggdGhlCisJY29ycmVzcG9uZGluZyBrZXl3b3JkLgorCitjb2xvci5zaG93QnJhbmNoOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgY29sb3IgaW4gdGhlIG91dHB1dCBvZgorCWxpbmtnaXQ6Z2l0LXNob3ctYnJhbmNoWzFdLiBNYXkgYmUgc2V0IHRvIGBhbHdheXNgLAorCWBmYWxzZWAgKG9yIGBuZXZlcmApIG9yIGBhdXRvYCAob3IgYHRydWVgKSwgaW4gd2hpY2ggY2FzZSBjb2xvcnMgYXJlIHVzZWQKKwlvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyB0byBhIHRlcm1pbmFsLiBJZiB1bnNldCwgdGhlbiB0aGUKKwl2YWx1ZSBvZiBgY29sb3IudWlgIGlzIHVzZWQgKGBhdXRvYCBieSBkZWZhdWx0KS4KKworY29sb3Iuc3RhdHVzOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgY29sb3IgaW4gdGhlIG91dHB1dCBvZgorCWxpbmtnaXQ6Z2l0LXN0YXR1c1sxXS4gTWF5IGJlIHNldCB0byBgYWx3YXlzYCwKKwlgZmFsc2VgIChvciBgbmV2ZXJgKSBvciBgYXV0b2AgKG9yIGB0cnVlYCksIGluIHdoaWNoIGNhc2UgY29sb3JzIGFyZSB1c2VkCisJb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgdG8gYSB0ZXJtaW5hbC4gSWYgdW5zZXQsIHRoZW4gdGhlCisJdmFsdWUgb2YgYGNvbG9yLnVpYCBpcyB1c2VkIChgYXV0b2AgYnkgZGVmYXVsdCkuCisKK2NvbG9yLnN0YXR1cy48c2xvdD46OgorCVVzZSBjdXN0b21pemVkIGNvbG9yIGZvciBzdGF0dXMgY29sb3JpemF0aW9uLiBgPHNsb3Q+YCBpcworCW9uZSBvZiBgaGVhZGVyYCAodGhlIGhlYWRlciB0ZXh0IG9mIHRoZSBzdGF0dXMgbWVzc2FnZSksCisJYGFkZGVkYCBvciBgdXBkYXRlZGAgKGZpbGVzIHdoaWNoIGFyZSBhZGRlZCBidXQgbm90IGNvbW1pdHRlZCksCisJYGNoYW5nZWRgIChmaWxlcyB3aGljaCBhcmUgY2hhbmdlZCBidXQgbm90IGFkZGVkIGluIHRoZSBpbmRleCksCisJYHVudHJhY2tlZGAgKGZpbGVzIHdoaWNoIGFyZSBub3QgdHJhY2tlZCBieSBHaXQpLAorCWBicmFuY2hgICh0aGUgY3VycmVudCBicmFuY2gpLAorCWBub2JyYW5jaGAgKHRoZSBjb2xvciB0aGUgJ25vIGJyYW5jaCcgd2FybmluZyBpcyBzaG93biBpbiwgZGVmYXVsdGluZworCXRvIHJlZCksCisJYGxvY2FsQnJhbmNoYCBvciBgcmVtb3RlQnJhbmNoYCAodGhlIGxvY2FsIGFuZCByZW1vdGUgYnJhbmNoIG5hbWVzLAorCXJlc3BlY3RpdmVseSwgd2hlbiBicmFuY2ggYW5kIHRyYWNraW5nIGluZm9ybWF0aW9uIGlzIGRpc3BsYXllZCBpbiB0aGUKKwlzdGF0dXMgc2hvcnQtZm9ybWF0KSwgb3IKKwlgdW5tZXJnZWRgIChmaWxlcyB3aGljaCBoYXZlIHVubWVyZ2VkIGNoYW5nZXMpLgorCitjb2xvci50cmFuc3BvcnQ6OgorCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjb2xvciB3aGVuIHB1c2hlcyBhcmUgcmVqZWN0ZWQuIE1heSBiZQorCXNldCB0byBgYWx3YXlzYCwgYGZhbHNlYCAob3IgYG5ldmVyYCkgb3IgYGF1dG9gIChvciBgdHJ1ZWApLCBpbiB3aGljaAorCWNhc2UgY29sb3JzIGFyZSB1c2VkIG9ubHkgd2hlbiB0aGUgZXJyb3Igb3V0cHV0IGdvZXMgdG8gYSB0ZXJtaW5hbC4KKwlJZiB1bnNldCwgdGhlbiB0aGUgdmFsdWUgb2YgYGNvbG9yLnVpYCBpcyB1c2VkIChgYXV0b2AgYnkgZGVmYXVsdCkuCisKK2NvbG9yLnRyYW5zcG9ydC5yZWplY3RlZDo6CisJVXNlIGN1c3RvbWl6ZWQgY29sb3Igd2hlbiBhIHB1c2ggd2FzIHJlamVjdGVkLgorCitjb2xvci51aTo6CisJVGhpcyB2YXJpYWJsZSBkZXRlcm1pbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB2YXJpYWJsZXMgc3VjaAorCWFzIGBjb2xvci5kaWZmYCBhbmQgYGNvbG9yLmdyZXBgIHRoYXQgY29udHJvbCB0aGUgdXNlIG9mIGNvbG9yCisJcGVyIGNvbW1hbmQgZmFtaWx5LiBJdHMgc2NvcGUgd2lsbCBleHBhbmQgYXMgbW9yZSBjb21tYW5kcyBsZWFybgorCWNvbmZpZ3VyYXRpb24gdG8gc2V0IGEgZGVmYXVsdCBmb3IgdGhlIGAtLWNvbG9yYCBvcHRpb24uICBTZXQgaXQKKwl0byBgZmFsc2VgIG9yIGBuZXZlcmAgaWYgeW91IHByZWZlciBHaXQgY29tbWFuZHMgbm90IHRvIHVzZQorCWNvbG9yIHVubGVzcyBlbmFibGVkIGV4cGxpY2l0bHkgd2l0aCBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24KKwlvciB0aGUgYC0tY29sb3JgIG9wdGlvbi4gU2V0IGl0IHRvIGBhbHdheXNgIGlmIHlvdSB3YW50IGFsbAorCW91dHB1dCBub3QgaW50ZW5kZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24gdG8gdXNlIGNvbG9yLCB0bworCWB0cnVlYCBvciBgYXV0b2AgKHRoaXMgaXMgdGhlIGRlZmF1bHQgc2luY2UgR2l0IDEuOC40KSBpZiB5b3UKKwl3YW50IHN1Y2ggb3V0cHV0IHRvIHVzZSBjb2xvciB3aGVuIHdyaXR0ZW4gdG8gdGhlIHRlcm1pbmFsLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvY29sdW1uLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NvbHVtbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZhYTJmMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NvbHVtbi50eHQKQEAgLTAsMCArMSw1NSBAQAorY29sdW1uLnVpOjoKKwlTcGVjaWZ5IHdoZXRoZXIgc3VwcG9ydGVkIGNvbW1hbmRzIHNob3VsZCBvdXRwdXQgaW4gY29sdW1ucy4KKwlUaGlzIHZhcmlhYmxlIGNvbnNpc3RzIG9mIGEgbGlzdCBvZiB0b2tlbnMgc2VwYXJhdGVkIGJ5IHNwYWNlcworCW9yIGNvbW1hczoKKysKK1RoZXNlIG9wdGlvbnMgY29udHJvbCB3aGVuIHRoZSBmZWF0dXJlIHNob3VsZCBiZSBlbmFibGVkCisoZGVmYXVsdHMgdG8gJ25ldmVyJyk6CisrCistLQorYGFsd2F5c2A7OworCWFsd2F5cyBzaG93IGluIGNvbHVtbnMKK2BuZXZlcmA7OworCW5ldmVyIHNob3cgaW4gY29sdW1ucworYGF1dG9gOzsKKwlzaG93IGluIGNvbHVtbnMgaWYgdGhlIG91dHB1dCBpcyB0byB0aGUgdGVybWluYWwKKy0tCisrCitUaGVzZSBvcHRpb25zIGNvbnRyb2wgbGF5b3V0IChkZWZhdWx0cyB0byAnY29sdW1uJykuICBTZXR0aW5nIGFueQorb2YgdGhlc2UgaW1wbGllcyAnYWx3YXlzJyBpZiBub25lIG9mICdhbHdheXMnLCAnbmV2ZXInLCBvciAnYXV0bycgYXJlCitzcGVjaWZpZWQuCisrCistLQorYGNvbHVtbmA7OworCWZpbGwgY29sdW1ucyBiZWZvcmUgcm93cworYHJvd2A7OworCWZpbGwgcm93cyBiZWZvcmUgY29sdW1ucworYHBsYWluYDs7CisJc2hvdyBpbiBvbmUgY29sdW1uCistLQorKworRmluYWxseSwgdGhlc2Ugb3B0aW9ucyBjYW4gYmUgY29tYmluZWQgd2l0aCBhIGxheW91dCBvcHRpb24gKGRlZmF1bHRzCit0byAnbm9kZW5zZScpOgorKworLS0KK2BkZW5zZWA7OworCW1ha2UgdW5lcXVhbCBzaXplIGNvbHVtbnMgdG8gdXRpbGl6ZSBtb3JlIHNwYWNlCitgbm9kZW5zZWA7OworCW1ha2UgZXF1YWwgc2l6ZSBjb2x1bW5zCistLQorCitjb2x1bW4uYnJhbmNoOjoKKwlTcGVjaWZ5IHdoZXRoZXIgdG8gb3V0cHV0IGJyYW5jaCBsaXN0aW5nIGluIGBnaXQgYnJhbmNoYCBpbiBjb2x1bW5zLgorCVNlZSBgY29sdW1uLnVpYCBmb3IgZGV0YWlscy4KKworY29sdW1uLmNsZWFuOjoKKwlTcGVjaWZ5IHRoZSBsYXlvdXQgd2hlbiBsaXN0IGl0ZW1zIGluIGBnaXQgY2xlYW4gLWlgLCB3aGljaCBhbHdheXMKKwlzaG93cyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4gY29sdW1ucy4gU2VlIGBjb2x1bW4udWlgIGZvciBkZXRhaWxzLgorCitjb2x1bW4uc3RhdHVzOjoKKwlTcGVjaWZ5IHdoZXRoZXIgdG8gb3V0cHV0IHVudHJhY2tlZCBmaWxlcyBpbiBgZ2l0IHN0YXR1c2AgaW4gY29sdW1ucy4KKwlTZWUgYGNvbHVtbi51aWAgZm9yIGRldGFpbHMuCisKK2NvbHVtbi50YWc6OgorCVNwZWNpZnkgd2hldGhlciB0byBvdXRwdXQgdGFnIGxpc3RpbmcgaW4gYGdpdCB0YWdgIGluIGNvbHVtbnMuCisJU2VlIGBjb2x1bW4udWlgIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvY29tbWl0LnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NvbW1pdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM5NTU3MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NvbW1pdC50eHQKQEAgLTAsMCArMSwyOSBAQAorY29tbWl0LmNsZWFudXA6OgorCVRoaXMgc2V0dGluZyBvdmVycmlkZXMgdGhlIGRlZmF1bHQgb2YgdGhlIGAtLWNsZWFudXBgIG9wdGlvbiBpbgorCWBnaXQgY29tbWl0YC4gU2VlIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBmb3IgZGV0YWlscy4gQ2hhbmdpbmcgdGhlCisJZGVmYXVsdCBjYW4gYmUgdXNlZnVsIHdoZW4geW91IGFsd2F5cyB3YW50IHRvIGtlZXAgbGluZXMgdGhhdCBiZWdpbgorCXdpdGggY29tbWVudCBjaGFyYWN0ZXIgYCNgIGluIHlvdXIgbG9nIG1lc3NhZ2UsIGluIHdoaWNoIGNhc2UgeW91CisJd291bGQgZG8gYGdpdCBjb25maWcgY29tbWl0LmNsZWFudXAgd2hpdGVzcGFjZWAgKG5vdGUgdGhhdCB5b3Ugd2lsbAorCWhhdmUgdG8gcmVtb3ZlIHRoZSBoZWxwIGxpbmVzIHRoYXQgYmVnaW4gd2l0aCBgI2AgaW4gdGhlIGNvbW1pdCBsb2cKKwl0ZW1wbGF0ZSB5b3Vyc2VsZiwgaWYgeW91IGRvIHRoaXMpLgorCitjb21taXQuZ3BnU2lnbjo6CisKKwlBIGJvb2xlYW4gdG8gc3BlY2lmeSB3aGV0aGVyIGFsbCBjb21taXRzIHNob3VsZCBiZSBHUEcgc2lnbmVkLgorCVVzZSBvZiB0aGlzIG9wdGlvbiB3aGVuIGRvaW5nIG9wZXJhdGlvbnMgc3VjaCBhcyByZWJhc2UgY2FuCisJcmVzdWx0IGluIGEgbGFyZ2UgbnVtYmVyIG9mIGNvbW1pdHMgYmVpbmcgc2lnbmVkLiBJdCBtYXkgYmUKKwljb252ZW5pZW50IHRvIHVzZSBhbiBhZ2VudCB0byBhdm9pZCB0eXBpbmcgeW91ciBHUEcgcGFzc3BocmFzZQorCXNldmVyYWwgdGltZXMuCisKK2NvbW1pdC5zdGF0dXM6OgorCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBpbmNsdXNpb24gb2Ygc3RhdHVzIGluZm9ybWF0aW9uIGluIHRoZQorCWNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIHdoZW4gdXNpbmcgYW4gZWRpdG9yIHRvIHByZXBhcmUgdGhlIGNvbW1pdAorCW1lc3NhZ2UuICBEZWZhdWx0cyB0byB0cnVlLgorCitjb21taXQudGVtcGxhdGU6OgorCVNwZWNpZnkgdGhlIHBhdGhuYW1lIG9mIGEgZmlsZSB0byB1c2UgYXMgdGhlIHRlbXBsYXRlIGZvcgorCW5ldyBjb21taXQgbWVzc2FnZXMuCisKK2NvbW1pdC52ZXJib3NlOjoKKwlBIGJvb2xlYW4gb3IgaW50IHRvIHNwZWNpZnkgdGhlIGxldmVsIG9mIHZlcmJvc2Ugd2l0aCBgZ2l0IGNvbW1pdGAuCisJU2VlIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2NvbXBsZXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvY29tcGxldGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ5OWJmMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NvbXBsZXRpb24udHh0CkBAIC0wLDAgKzEsNyBAQAorY29tcGxldGlvbi5jb21tYW5kczo6CisJVGhpcyBpcyBvbmx5IHVzZWQgYnkgZ2l0LWNvbXBsZXRpb24uYmFzaCB0byBhZGQgb3IgcmVtb3ZlCisJY29tbWFuZHMgZnJvbSB0aGUgbGlzdCBvZiBjb21wbGV0ZWQgY29tbWFuZHMuIE5vcm1hbGx5IG9ubHkKKwlwb3JjZWxhaW4gY29tbWFuZHMgYW5kIGEgZmV3IHNlbGVjdCBvdGhlcnMgYXJlIGNvbXBsZXRlZC4gWW91CisJY2FuIGFkZCBtb3JlIGNvbW1hbmRzLCBzZXBhcmF0ZWQgYnkgc3BhY2UsIGluIHRoaXMKKwl2YXJpYWJsZS4gUHJlZml4aW5nIHRoZSBjb21tYW5kIHdpdGggJy0nIHdpbGwgcmVtb3ZlIGl0IGZyb20KKwl0aGUgZXhpc3RpbmcgbGlzdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2NvcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvY29yZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2MTlhOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NvcmUudHh0CkBAIC0wLDAgKzEsNjI4IEBACitjb3JlLmZpbGVNb2RlOjoKKwlUZWxscyBHaXQgaWYgdGhlIGV4ZWN1dGFibGUgYml0IG9mIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUKKwlpcyB0byBiZSBob25vcmVkLgorKworU29tZSBmaWxlc3lzdGVtcyBsb3NlIHRoZSBleGVjdXRhYmxlIGJpdCB3aGVuIGEgZmlsZSB0aGF0IGlzCittYXJrZWQgYXMgZXhlY3V0YWJsZSBpcyBjaGVja2VkIG91dCwgb3IgY2hlY2tzIG91dCBhCitub24tZXhlY3V0YWJsZSBmaWxlIHdpdGggZXhlY3V0YWJsZSBiaXQgb24uCitsaW5rZ2l0OmdpdC1jbG9uZVsxXSBvciBsaW5rZ2l0OmdpdC1pbml0WzFdIHByb2JlIHRoZSBmaWxlc3lzdGVtCit0byBzZWUgaWYgaXQgaGFuZGxlcyB0aGUgZXhlY3V0YWJsZSBiaXQgY29ycmVjdGx5CithbmQgdGhpcyB2YXJpYWJsZSBpcyBhdXRvbWF0aWNhbGx5IHNldCBhcyBuZWNlc3NhcnkuCisrCitBIHJlcG9zaXRvcnksIGhvd2V2ZXIsIG1heSBiZSBvbiBhIGZpbGVzeXN0ZW0gdGhhdCBoYW5kbGVzCit0aGUgZmlsZW1vZGUgY29ycmVjdGx5LCBhbmQgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gJ3RydWUnCit3aGVuIGNyZWF0ZWQsIGJ1dCBsYXRlciBtYXkgYmUgbWFkZSBhY2Nlc3NpYmxlIGZyb20gYW5vdGhlcgorZW52aXJvbm1lbnQgdGhhdCBsb3NlcyB0aGUgZmlsZW1vZGUgKGUuZy4gZXhwb3J0aW5nIGV4dDQgdmlhCitDSUZTIG1vdW50LCB2aXNpdGluZyBhIEN5Z3dpbiBjcmVhdGVkIHJlcG9zaXRvcnkgd2l0aAorR2l0IGZvciBXaW5kb3dzIG9yIEVjbGlwc2UpLgorSW4gc3VjaCBhIGNhc2UgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBzZXQgdGhpcyB2YXJpYWJsZSB0byAnZmFsc2UnLgorU2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXS4KKysKK1RoZSBkZWZhdWx0IGlzIHRydWUgKHdoZW4gY29yZS5maWxlbW9kZSBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBjb25maWcgZmlsZSkuCisKK2NvcmUuaGlkZURvdEZpbGVzOjoKKwkoV2luZG93cy1vbmx5KSBJZiB0cnVlLCBtYXJrIG5ld2x5LWNyZWF0ZWQgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIHdob3NlCisJbmFtZSBzdGFydHMgd2l0aCBhIGRvdCBhcyBoaWRkZW4uICBJZiAnZG90R2l0T25seScsIG9ubHkgdGhlIGAuZ2l0L2AKKwlkaXJlY3RvcnkgaXMgaGlkZGVuLCBidXQgbm8gb3RoZXIgZmlsZXMgc3RhcnRpbmcgd2l0aCBhIGRvdC4gIFRoZQorCWRlZmF1bHQgbW9kZSBpcyAnZG90R2l0T25seScuCisKK2NvcmUuaWdub3JlQ2FzZTo6CisJSW50ZXJuYWwgdmFyaWFibGUgd2hpY2ggZW5hYmxlcyB2YXJpb3VzIHdvcmthcm91bmRzIHRvIGVuYWJsZQorCUdpdCB0byB3b3JrIGJldHRlciBvbiBmaWxlc3lzdGVtcyB0aGF0IGFyZSBub3QgY2FzZSBzZW5zaXRpdmUsCisJbGlrZSBBUEZTLCBIRlMrLCBGQVQsIE5URlMsIGV0Yy4gRm9yIGV4YW1wbGUsIGlmIGEgZGlyZWN0b3J5IGxpc3RpbmcKKwlmaW5kcyAibWFrZWZpbGUiIHdoZW4gR2l0IGV4cGVjdHMgIk1ha2VmaWxlIiwgR2l0IHdpbGwgYXNzdW1lCisJaXQgaXMgcmVhbGx5IHRoZSBzYW1lIGZpbGUsIGFuZCBjb250aW51ZSB0byByZW1lbWJlciBpdCBhcworCSJNYWtlZmlsZSIuCisrCitUaGUgZGVmYXVsdCBpcyBmYWxzZSwgZXhjZXB0IGxpbmtnaXQ6Z2l0LWNsb25lWzFdIG9yIGxpbmtnaXQ6Z2l0LWluaXRbMV0KK3dpbGwgcHJvYmUgYW5kIHNldCBjb3JlLmlnbm9yZUNhc2UgdHJ1ZSBpZiBhcHByb3ByaWF0ZSB3aGVuIHRoZSByZXBvc2l0b3J5CitpcyBjcmVhdGVkLgorKworR2l0IHJlbGllcyBvbiB0aGUgcHJvcGVyIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyB2YXJpYWJsZSBmb3IgeW91ciBvcGVyYXRpbmcKK2FuZCBmaWxlIHN5c3RlbS4gTW9kaWZ5aW5nIHRoaXMgdmFsdWUgbWF5IHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW9yLgorCitjb3JlLnByZWNvbXBvc2VVbmljb2RlOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgYnkgTWFjIE9TIGltcGxlbWVudGF0aW9uIG9mIEdpdC4KKwlXaGVuIGNvcmUucHJlY29tcG9zZVVuaWNvZGU9dHJ1ZSwgR2l0IHJldmVydHMgdGhlIHVuaWNvZGUgZGVjb21wb3NpdGlvbgorCW9mIGZpbGVuYW1lcyBkb25lIGJ5IE1hYyBPUy4gVGhpcyBpcyB1c2VmdWwgd2hlbiBzaGFyaW5nIGEgcmVwb3NpdG9yeQorCWJldHdlZW4gTWFjIE9TIGFuZCBMaW51eCBvciBXaW5kb3dzLgorCShHaXQgZm9yIFdpbmRvd3MgMS43LjEwIG9yIGhpZ2hlciBpcyBuZWVkZWQsIG9yIEdpdCB1bmRlciBjeWd3aW4gMS43KS4KKwlXaGVuIGZhbHNlLCBmaWxlIG5hbWVzIGFyZSBoYW5kbGVkIGZ1bGx5IHRyYW5zcGFyZW50IGJ5IEdpdCwKKwl3aGljaCBpcyBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgR2l0LgorCitjb3JlLnByb3RlY3RIRlM6OgorCUlmIHNldCB0byB0cnVlLCBkbyBub3QgYWxsb3cgY2hlY2tvdXQgb2YgcGF0aHMgdGhhdCB3b3VsZAorCWJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byBgLmdpdGAgb24gYW4gSEZTKyBmaWxlc3lzdGVtLgorCURlZmF1bHRzIHRvIGB0cnVlYCBvbiBNYWMgT1MsIGFuZCBgZmFsc2VgIGVsc2V3aGVyZS4KKworY29yZS5wcm90ZWN0TlRGUzo6CisJSWYgc2V0IHRvIHRydWUsIGRvIG5vdCBhbGxvdyBjaGVja291dCBvZiBwYXRocyB0aGF0IHdvdWxkCisJY2F1c2UgcHJvYmxlbXMgd2l0aCB0aGUgTlRGUyBmaWxlc3lzdGVtLCBlLmcuIGNvbmZsaWN0IHdpdGgKKwk4LjMgInNob3J0IiBuYW1lcy4KKwlEZWZhdWx0cyB0byBgdHJ1ZWAgb24gV2luZG93cywgYW5kIGBmYWxzZWAgZWxzZXdoZXJlLgorCitjb3JlLmZzbW9uaXRvcjo6CisJSWYgc2V0LCB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGFzIGEgY29tbWFuZCB3aGljaAorCXdpbGwgaWRlbnRpZnkgYWxsIGZpbGVzIHRoYXQgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUKKwlyZXF1ZXN0ZWQgZGF0ZS90aW1lLiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gc3BlZWQgdXAgZ2l0IGJ5CisJYXZvaWRpbmcgdW5uZWNlc3NhcnkgcHJvY2Vzc2luZyBvZiBmaWxlcyB0aGF0IGhhdmUgbm90IGNoYW5nZWQuCisJU2VlIHRoZSAiZnNtb25pdG9yLXdhdGNobWFuIiBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0aG9va3NbNV0uCisKK2NvcmUuZnNtb25pdG9ySG9va1ZlcnNpb246OgorCVNldHMgdGhlIHZlcnNpb24gb2YgaG9vayB0aGF0IGlzIHRvIGJlIHVzZWQgd2hlbiBjYWxsaW5nIGZzbW9uaXRvci4KKwlUaGVyZSBhcmUgY3VycmVudGx5IHZlcnNpb25zIDEgYW5kIDIuIFdoZW4gdGhpcyBpcyBub3Qgc2V0LAorCXZlcnNpb24gMiB3aWxsIGJlIHRyaWVkIGZpcnN0IGFuZCBpZiBpdCBmYWlscyB0aGVuIHZlcnNpb24gMQorCXdpbGwgYmUgdHJpZWQuIFZlcnNpb24gMSB1c2VzIGEgdGltZXN0YW1wIGFzIGlucHV0IHRvIGRldGVybWluZQorCXdoaWNoIGZpbGVzIGhhdmUgY2hhbmdlcyBzaW5jZSB0aGF0IHRpbWUgYnV0IHNvbWUgbW9uaXRvcnMKKwlsaWtlIHdhdGNobWFuIGhhdmUgcmFjZSBjb25kaXRpb25zIHdoZW4gdXNlZCB3aXRoIGEgdGltZXN0YW1wLgorCVZlcnNpb24gMiB1c2VzIGFuIG9wYXF1ZSBzdHJpbmcgc28gdGhhdCB0aGUgbW9uaXRvciBjYW4gcmV0dXJuCisJc29tZXRoaW5nIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgZmlsZXMgaGF2ZSBjaGFuZ2VkCisJd2l0aG91dCByYWNlIGNvbmRpdGlvbnMuCisKK2NvcmUudHJ1c3RjdGltZTo6CisJSWYgZmFsc2UsIHRoZSBjdGltZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBpbmRleCBhbmQgdGhlCisJd29ya2luZyB0cmVlIGFyZSBpZ25vcmVkOyB1c2VmdWwgd2hlbiB0aGUgaW5vZGUgY2hhbmdlIHRpbWUKKwlpcyByZWd1bGFybHkgbW9kaWZpZWQgYnkgc29tZXRoaW5nIG91dHNpZGUgR2l0IChmaWxlIHN5c3RlbQorCWNyYXdsZXJzIGFuZCBzb21lIGJhY2t1cCBzeXN0ZW1zKS4KKwlTZWUgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdLiBUcnVlIGJ5IGRlZmF1bHQuCisKK2NvcmUuc3BsaXRJbmRleDo6CisJSWYgdHJ1ZSwgdGhlIHNwbGl0LWluZGV4IGZlYXR1cmUgb2YgdGhlIGluZGV4IHdpbGwgYmUgdXNlZC4KKwlTZWUgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdLiBGYWxzZSBieSBkZWZhdWx0LgorCitjb3JlLnVudHJhY2tlZENhY2hlOjoKKwlEZXRlcm1pbmVzIHdoYXQgdG8gZG8gYWJvdXQgdGhlIHVudHJhY2tlZCBjYWNoZSBmZWF0dXJlIG9mIHRoZQorCWluZGV4LiBJdCB3aWxsIGJlIGtlcHQsIGlmIHRoaXMgdmFyaWFibGUgaXMgdW5zZXQgb3Igc2V0IHRvCisJYGtlZXBgLiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgYWRkZWQgaWYgc2V0IHRvIGB0cnVlYC4gQW5kCisJaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHJlbW92ZWQsIGlmIHNldCB0byBgZmFsc2VgLiBCZWZvcmUKKwlzZXR0aW5nIGl0IHRvIGB0cnVlYCwgeW91IHNob3VsZCBjaGVjayB0aGF0IG10aW1lIGlzIHdvcmtpbmcKKwlwcm9wZXJseSBvbiB5b3VyIHN5c3RlbS4KKwlTZWUgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdLiBga2VlcGAgYnkgZGVmYXVsdCwgdW5sZXNzCisJYGZlYXR1cmUubWFueUZpbGVzYCBpcyBlbmFibGVkIHdoaWNoIHNldHMgdGhpcyBzZXR0aW5nIHRvCisJYHRydWVgIGJ5IGRlZmF1bHQuCisKK2NvcmUuY2hlY2tTdGF0OjoKKwlXaGVuIG1pc3Npbmcgb3IgaXMgc2V0IHRvIGBkZWZhdWx0YCwgbWFueSBmaWVsZHMgaW4gdGhlIHN0YXQKKwlzdHJ1Y3R1cmUgYXJlIGNoZWNrZWQgdG8gZGV0ZWN0IGlmIGEgZmlsZSBoYXMgYmVlbiBtb2RpZmllZAorCXNpbmNlIEdpdCBsb29rZWQgYXQgaXQuICBXaGVuIHRoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcworCXNldCB0byBgbWluaW1hbGAsIHN1Yi1zZWNvbmQgcGFydCBvZiBtdGltZSBhbmQgY3RpbWUsIHRoZQorCXVpZCBhbmQgZ2lkIG9mIHRoZSBvd25lciBvZiB0aGUgZmlsZSwgdGhlIGlub2RlIG51bWJlciAoYW5kCisJdGhlIGRldmljZSBudW1iZXIsIGlmIEdpdCB3YXMgY29tcGlsZWQgdG8gdXNlIGl0KSwgYXJlCisJZXhjbHVkZWQgZnJvbSB0aGUgY2hlY2sgYW1vbmcgdGhlc2UgZmllbGRzLCBsZWF2aW5nIG9ubHkgdGhlCisJd2hvbGUtc2Vjb25kIHBhcnQgb2YgbXRpbWUgKGFuZCBjdGltZSwgaWYgYGNvcmUudHJ1c3RDdGltZWAKKwlpcyBzZXQpIGFuZCB0aGUgZmlsZXNpemUgdG8gYmUgY2hlY2tlZC4KKysKK1RoZXJlIGFyZSBpbXBsZW1lbnRhdGlvbnMgb2YgR2l0IHRoYXQgZG8gbm90IGxlYXZlIHVzYWJsZSB2YWx1ZXMgaW4KK3NvbWUgZmllbGRzIChlLmcuIEpHaXQpOyBieSBleGNsdWRpbmcgdGhlc2UgZmllbGRzIGZyb20gdGhlCitjb21wYXJpc29uLCB0aGUgYG1pbmltYWxgIG1vZGUgbWF5IGhlbHAgaW50ZXJvcGVyYWJpbGl0eSB3aGVuIHRoZQorc2FtZSByZXBvc2l0b3J5IGlzIHVzZWQgYnkgdGhlc2Ugb3RoZXIgc3lzdGVtcyBhdCB0aGUgc2FtZSB0aW1lLgorCitjb3JlLnF1b3RlUGF0aDo6CisJQ29tbWFuZHMgdGhhdCBvdXRwdXQgcGF0aHMgKGUuZy4gJ2xzLWZpbGVzJywgJ2RpZmYnKSwgd2lsbAorCXF1b3RlICJ1bnVzdWFsIiBjaGFyYWN0ZXJzIGluIHRoZSBwYXRobmFtZSBieSBlbmNsb3NpbmcgdGhlCisJcGF0aG5hbWUgaW4gZG91YmxlLXF1b3RlcyBhbmQgZXNjYXBpbmcgdGhvc2UgY2hhcmFjdGVycyB3aXRoCisJYmFja3NsYXNoZXMgaW4gdGhlIHNhbWUgd2F5IEMgZXNjYXBlcyBjb250cm9sIGNoYXJhY3RlcnMgKGUuZy4KKwlgXHRgIGZvciBUQUIsIGBcbmAgZm9yIExGLCBgXFxgIGZvciBiYWNrc2xhc2gpIG9yIGJ5dGVzIHdpdGgKKwl2YWx1ZXMgbGFyZ2VyIHRoYW4gMHg4MCAoZS5nLiBvY3RhbCBgXDMwMlwyNjVgIGZvciAibWljcm8iIGluCisJVVRGLTgpLiAgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gZmFsc2UsIGJ5dGVzIGhpZ2hlciB0aGFuCisJMHg4MCBhcmUgbm90IGNvbnNpZGVyZWQgInVudXN1YWwiIGFueSBtb3JlLiBEb3VibGUtcXVvdGVzLAorCWJhY2tzbGFzaCBhbmQgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSBhbHdheXMgZXNjYXBlZCByZWdhcmRsZXNzCisJb2YgdGhlIHNldHRpbmcgb2YgdGhpcyB2YXJpYWJsZS4gIEEgc2ltcGxlIHNwYWNlIGNoYXJhY3RlciBpcworCW5vdCBjb25zaWRlcmVkICJ1bnVzdWFsIi4gIE1hbnkgY29tbWFuZHMgY2FuIG91dHB1dCBwYXRobmFtZXMKKwljb21wbGV0ZWx5IHZlcmJhdGltIHVzaW5nIHRoZSBgLXpgIG9wdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUKKwlpcyB0cnVlLgorCitjb3JlLmVvbDo6CisJU2V0cyB0aGUgbGluZSBlbmRpbmcgdHlwZSB0byB1c2UgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvcgorCWZpbGVzIHRoYXQgYXJlIG1hcmtlZCBhcyB0ZXh0IChlaXRoZXIgYnkgaGF2aW5nIHRoZSBgdGV4dGAKKwlhdHRyaWJ1dGUgc2V0LCBvciBieSBoYXZpbmcgYHRleHQ9YXV0b2AgYW5kIEdpdCBhdXRvLWRldGVjdGluZworCXRoZSBjb250ZW50cyBhcyB0ZXh0KS4KKwlBbHRlcm5hdGl2ZXMgYXJlICdsZicsICdjcmxmJyBhbmQgJ25hdGl2ZScsIHdoaWNoIHVzZXMgdGhlIHBsYXRmb3JtJ3MKKwluYXRpdmUgbGluZSBlbmRpbmcuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgbmF0aXZlYC4gIFNlZQorCWxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBlbmQtb2YtbGluZQorCWNvbnZlcnNpb24uIE5vdGUgdGhhdCB0aGlzIHZhbHVlIGlzIGlnbm9yZWQgaWYgYGNvcmUuYXV0b2NybGZgCisJaXMgc2V0IHRvIGB0cnVlYCBvciBgaW5wdXRgLgorCitjb3JlLnNhZmVjcmxmOjoKKwlJZiB0cnVlLCBtYWtlcyBHaXQgY2hlY2sgaWYgY29udmVydGluZyBgQ1JMRmAgaXMgcmV2ZXJzaWJsZSB3aGVuCisJZW5kLW9mLWxpbmUgY29udmVyc2lvbiBpcyBhY3RpdmUuICBHaXQgd2lsbCB2ZXJpZnkgaWYgYSBjb21tYW5kCisJbW9kaWZpZXMgYSBmaWxlIGluIHRoZSB3b3JrIHRyZWUgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuCisJRm9yIGV4YW1wbGUsIGNvbW1pdHRpbmcgYSBmaWxlIGZvbGxvd2VkIGJ5IGNoZWNraW5nIG91dCB0aGUKKwlzYW1lIGZpbGUgc2hvdWxkIHlpZWxkIHRoZSBvcmlnaW5hbCBmaWxlIGluIHRoZSB3b3JrIHRyZWUuICBJZgorCXRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciB0aGUgY3VycmVudCBzZXR0aW5nIG9mCisJYGNvcmUuYXV0b2NybGZgLCBHaXQgd2lsbCByZWplY3QgdGhlIGZpbGUuICBUaGUgdmFyaWFibGUgY2FuCisJYmUgc2V0IHRvICJ3YXJuIiwgaW4gd2hpY2ggY2FzZSBHaXQgd2lsbCBvbmx5IHdhcm4gYWJvdXQgYW4KKwlpcnJldmVyc2libGUgY29udmVyc2lvbiBidXQgY29udGludWUgdGhlIG9wZXJhdGlvbi4KKysKK0NSTEYgY29udmVyc2lvbiBiZWFycyBhIHNsaWdodCBjaGFuY2Ugb2YgY29ycnVwdGluZyBkYXRhLgorV2hlbiBpdCBpcyBlbmFibGVkLCBHaXQgd2lsbCBjb252ZXJ0IENSTEYgdG8gTEYgZHVyaW5nIGNvbW1pdCBhbmQgTEYgdG8KK0NSTEYgZHVyaW5nIGNoZWNrb3V0LiAgQSBmaWxlIHRoYXQgY29udGFpbnMgYSBtaXh0dXJlIG9mIExGIGFuZAorQ1JMRiBiZWZvcmUgdGhlIGNvbW1pdCBjYW5ub3QgYmUgcmVjcmVhdGVkIGJ5IEdpdC4gIEZvciB0ZXh0CitmaWxlcyB0aGlzIGlzIHRoZSByaWdodCB0aGluZyB0byBkbzogaXQgY29ycmVjdHMgbGluZSBlbmRpbmdzCitzdWNoIHRoYXQgd2UgaGF2ZSBvbmx5IExGIGxpbmUgZW5kaW5ncyBpbiB0aGUgcmVwb3NpdG9yeS4KK0J1dCBmb3IgYmluYXJ5IGZpbGVzIHRoYXQgYXJlIGFjY2lkZW50YWxseSBjbGFzc2lmaWVkIGFzIHRleHQgdGhlCitjb252ZXJzaW9uIGNhbiBjb3JydXB0IGRhdGEuCisrCitJZiB5b3UgcmVjb2duaXplIHN1Y2ggY29ycnVwdGlvbiBlYXJseSB5b3UgY2FuIGVhc2lseSBmaXggaXQgYnkKK3NldHRpbmcgdGhlIGNvbnZlcnNpb24gdHlwZSBleHBsaWNpdGx5IGluIC5naXRhdHRyaWJ1dGVzLiAgUmlnaHQKK2FmdGVyIGNvbW1pdHRpbmcgeW91IHN0aWxsIGhhdmUgdGhlIG9yaWdpbmFsIGZpbGUgaW4geW91ciB3b3JrCit0cmVlIGFuZCB0aGlzIGZpbGUgaXMgbm90IHlldCBjb3JydXB0ZWQuICBZb3UgY2FuIGV4cGxpY2l0bHkgdGVsbAorR2l0IHRoYXQgdGhpcyBmaWxlIGlzIGJpbmFyeSBhbmQgR2l0IHdpbGwgaGFuZGxlIHRoZSBmaWxlCithcHByb3ByaWF0ZWx5LgorKworVW5mb3J0dW5hdGVseSwgdGhlIGRlc2lyZWQgZWZmZWN0IG9mIGNsZWFuaW5nIHVwIHRleHQgZmlsZXMgd2l0aAorbWl4ZWQgbGluZSBlbmRpbmdzIGFuZCB0aGUgdW5kZXNpcmVkIGVmZmVjdCBvZiBjb3JydXB0aW5nIGJpbmFyeQorZmlsZXMgY2Fubm90IGJlIGRpc3Rpbmd1aXNoZWQuICBJbiBib3RoIGNhc2VzIENSTEZzIGFyZSByZW1vdmVkCitpbiBhbiBpcnJldmVyc2libGUgd2F5LiAgRm9yIHRleHQgZmlsZXMgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcKK3RvIGRvIGJlY2F1c2UgQ1JMRnMgYXJlIGxpbmUgZW5kaW5ncywgd2hpbGUgZm9yIGJpbmFyeSBmaWxlcworY29udmVydGluZyBDUkxGcyBjb3JydXB0cyBkYXRhLgorKworTm90ZSwgdGhpcyBzYWZldHkgY2hlY2sgZG9lcyBub3QgbWVhbiB0aGF0IGEgY2hlY2tvdXQgd2lsbCBnZW5lcmF0ZSBhCitmaWxlIGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwgZmlsZSBmb3IgYSBkaWZmZXJlbnQgc2V0dGluZyBvZgorYGNvcmUuZW9sYCBhbmQgYGNvcmUuYXV0b2NybGZgLCBidXQgb25seSBmb3IgdGhlIGN1cnJlbnQgb25lLiAgRm9yCitleGFtcGxlLCBhIHRleHQgZmlsZSB3aXRoIGBMRmAgd291bGQgYmUgYWNjZXB0ZWQgd2l0aCBgY29yZS5lb2w9bGZgCithbmQgY291bGQgbGF0ZXIgYmUgY2hlY2tlZCBvdXQgd2l0aCBgY29yZS5lb2w9Y3JsZmAsIGluIHdoaWNoIGNhc2UgdGhlCityZXN1bHRpbmcgZmlsZSB3b3VsZCBjb250YWluIGBDUkxGYCwgYWx0aG91Z2ggdGhlIG9yaWdpbmFsIGZpbGUKK2NvbnRhaW5lZCBgTEZgLiAgSG93ZXZlciwgaW4gYm90aCB3b3JrIHRyZWVzIHRoZSBsaW5lIGVuZGluZ3Mgd291bGQgYmUKK2NvbnNpc3RlbnQsIHRoYXQgaXMgZWl0aGVyIGFsbCBgTEZgIG9yIGFsbCBgQ1JMRmAsIGJ1dCBuZXZlciBtaXhlZC4gIEEKK2ZpbGUgd2l0aCBtaXhlZCBsaW5lIGVuZGluZ3Mgd291bGQgYmUgcmVwb3J0ZWQgYnkgdGhlIGBjb3JlLnNhZmVjcmxmYAorbWVjaGFuaXNtLgorCitjb3JlLmF1dG9jcmxmOjoKKwlTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gInRydWUiIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcKKwl0aGUgYHRleHRgIGF0dHJpYnV0ZSB0byAiYXV0byIgb24gYWxsIGZpbGVzIGFuZCBjb3JlLmVvbCB0byAiY3JsZiIuCisJU2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gaGF2ZSBgQ1JMRmAgbGluZSBlbmRpbmdzIGluIHlvdXIKKwl3b3JraW5nIGRpcmVjdG9yeSBhbmQgdGhlIHJlcG9zaXRvcnkgaGFzIExGIGxpbmUgZW5kaW5ncy4KKwlUaGlzIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gJ2lucHV0JywKKwlpbiB3aGljaCBjYXNlIG5vIG91dHB1dCBjb252ZXJzaW9uIGlzIHBlcmZvcm1lZC4KKworY29yZS5jaGVja1JvdW5kdHJpcEVuY29kaW5nOjoKKwlBIGNvbW1hIGFuZC9vciB3aGl0ZXNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGVuY29kaW5ncyB0aGF0IEdpdAorCXBlcmZvcm1zIFVURi04IHJvdW5kIHRyaXAgY2hlY2tzIG9uIGlmIHRoZXkgYXJlIHVzZWQgaW4gYW4KKwlgd29ya2luZy10cmVlLWVuY29kaW5nYCBhdHRyaWJ1dGUgKHNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0pLgorCVRoZSBkZWZhdWx0IHZhbHVlIGlzIGBTSElGVC1KSVNgLgorCitjb3JlLnN5bWxpbmtzOjoKKwlJZiBmYWxzZSwgc3ltYm9saWMgbGlua3MgYXJlIGNoZWNrZWQgb3V0IGFzIHNtYWxsIHBsYWluIGZpbGVzIHRoYXQKKwljb250YWluIHRoZSBsaW5rIHRleHQuIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXSBhbmQKKwlsaW5rZ2l0OmdpdC1hZGRbMV0gd2lsbCBub3QgY2hhbmdlIHRoZSByZWNvcmRlZCB0eXBlIHRvIHJlZ3VsYXIKKwlmaWxlLiBVc2VmdWwgb24gZmlsZXN5c3RlbXMgbGlrZSBGQVQgdGhhdCBkbyBub3Qgc3VwcG9ydAorCXN5bWJvbGljIGxpbmtzLgorKworVGhlIGRlZmF1bHQgaXMgdHJ1ZSwgZXhjZXB0IGxpbmtnaXQ6Z2l0LWNsb25lWzFdIG9yIGxpbmtnaXQ6Z2l0LWluaXRbMV0KK3dpbGwgcHJvYmUgYW5kIHNldCBjb3JlLnN5bWxpbmtzIGZhbHNlIGlmIGFwcHJvcHJpYXRlIHdoZW4gdGhlIHJlcG9zaXRvcnkKK2lzIGNyZWF0ZWQuCisKK2NvcmUuZ2l0UHJveHk6OgorCUEgInByb3h5IGNvbW1hbmQiIHRvIGV4ZWN1dGUgKGFzICdjb21tYW5kIGhvc3QgcG9ydCcpIGluc3RlYWQKKwlvZiBlc3RhYmxpc2hpbmcgZGlyZWN0IGNvbm5lY3Rpb24gdG8gdGhlIHJlbW90ZSBzZXJ2ZXIgd2hlbgorCXVzaW5nIHRoZSBHaXQgcHJvdG9jb2wgZm9yIGZldGNoaW5nLiBJZiB0aGUgdmFyaWFibGUgdmFsdWUgaXMKKwlpbiB0aGUgIkNPTU1BTkQgZm9yIERPTUFJTiIgZm9ybWF0LCB0aGUgY29tbWFuZCBpcyBhcHBsaWVkIG9ubHkKKwlvbiBob3N0bmFtZXMgZW5kaW5nIHdpdGggdGhlIHNwZWNpZmllZCBkb21haW4gc3RyaW5nLiBUaGlzIHZhcmlhYmxlCisJbWF5IGJlIHNldCBtdWx0aXBsZSB0aW1lcyBhbmQgaXMgbWF0Y2hlZCBpbiB0aGUgZ2l2ZW4gb3JkZXI7CisJdGhlIGZpcnN0IG1hdGNoIHdpbnMuCisrCitDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9QUk9YWV9DT01NQU5EYCBlbnZpcm9ubWVudCB2YXJpYWJsZQorKHdoaWNoIGFsd2F5cyBhcHBsaWVzIHVuaXZlcnNhbGx5LCB3aXRob3V0IHRoZSBzcGVjaWFsICJmb3IiCitoYW5kbGluZykuCisrCitUaGUgc3BlY2lhbCBzdHJpbmcgYG5vbmVgIGNhbiBiZSB1c2VkIGFzIHRoZSBwcm94eSBjb21tYW5kIHRvCitzcGVjaWZ5IHRoYXQgbm8gcHJveHkgYmUgdXNlZCBmb3IgYSBnaXZlbiBkb21haW4gcGF0dGVybi4KK1RoaXMgaXMgdXNlZnVsIGZvciBleGNsdWRpbmcgc2VydmVycyBpbnNpZGUgYSBmaXJld2FsbCBmcm9tCitwcm94eSB1c2UsIHdoaWxlIGRlZmF1bHRpbmcgdG8gYSBjb21tb24gcHJveHkgZm9yIGV4dGVybmFsIGRvbWFpbnMuCisKK2NvcmUuc3NoQ29tbWFuZDo6CisJSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQsIGBnaXQgZmV0Y2hgIGFuZCBgZ2l0IHB1c2hgIHdpbGwKKwl1c2UgdGhlIHNwZWNpZmllZCBjb21tYW5kIGluc3RlYWQgb2YgYHNzaGAgd2hlbiB0aGV5IG5lZWQgdG8KKwljb25uZWN0IHRvIGEgcmVtb3RlIHN5c3RlbS4gVGhlIGNvbW1hbmQgaXMgaW4gdGhlIHNhbWUgZm9ybSBhcworCXRoZSBgR0lUX1NTSF9DT01NQU5EYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgaXMgb3ZlcnJpZGRlbgorCXdoZW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldC4KKworY29yZS5pZ25vcmVTdGF0OjoKKwlJZiB0cnVlLCBHaXQgd2lsbCBhdm9pZCB1c2luZyBsc3RhdCgpIGNhbGxzIHRvIGRldGVjdCBpZiBmaWxlcyBoYXZlCisJY2hhbmdlZCBieSBzZXR0aW5nIHRoZSAiYXNzdW1lLXVuY2hhbmdlZCIgYml0IGZvciB0aG9zZSB0cmFja2VkIGZpbGVzCisJd2hpY2ggaXQgaGFzIHVwZGF0ZWQgaWRlbnRpY2FsbHkgaW4gYm90aCB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZS4KKysKK1doZW4gZmlsZXMgYXJlIG1vZGlmaWVkIG91dHNpZGUgb2YgR2l0LCB0aGUgdXNlciB3aWxsIG5lZWQgdG8gc3RhZ2UKK3RoZSBtb2RpZmllZCBmaWxlcyBleHBsaWNpdGx5IChlLmcuIHNlZSAnRXhhbXBsZXMnIHNlY3Rpb24gaW4KK2xpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXSkuCitHaXQgd2lsbCBub3Qgbm9ybWFsbHkgZGV0ZWN0IGNoYW5nZXMgdG8gdGhvc2UgZmlsZXMuCisrCitUaGlzIGlzIHVzZWZ1bCBvbiBzeXN0ZW1zIHdoZXJlIGxzdGF0KCkgY2FsbHMgYXJlIHZlcnkgc2xvdywgc3VjaCBhcworQ0lGUy9NaWNyb3NvZnQgV2luZG93cy4KKysKK0ZhbHNlIGJ5IGRlZmF1bHQuCisKK2NvcmUucHJlZmVyU3ltbGlua1JlZnM6OgorCUluc3RlYWQgb2YgdGhlIGRlZmF1bHQgInN5bXJlZiIgZm9ybWF0IGZvciBIRUFECisJYW5kIG90aGVyIHN5bWJvbGljIHJlZmVyZW5jZSBmaWxlcywgdXNlIHN5bWJvbGljIGxpbmtzLgorCVRoaXMgaXMgc29tZXRpbWVzIG5lZWRlZCB0byB3b3JrIHdpdGggb2xkIHNjcmlwdHMgdGhhdAorCWV4cGVjdCBIRUFEIHRvIGJlIGEgc3ltYm9saWMgbGluay4KKworY29yZS5hbHRlcm5hdGVSZWZzQ29tbWFuZDo6CisJV2hlbiBhZHZlcnRpc2luZyB0aXBzIG9mIGF2YWlsYWJsZSBoaXN0b3J5IGZyb20gYW4gYWx0ZXJuYXRlLCB1c2UgdGhlIHNoZWxsIHRvCisJZXhlY3V0ZSB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgaW5zdGVhZCBvZiBsaW5rZ2l0OmdpdC1mb3ItZWFjaC1yZWZbMV0uIFRoZQorCWZpcnN0IGFyZ3VtZW50IGlzIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBhbHRlcm5hdGUuIE91dHB1dCBtdXN0IGNvbnRhaW4gb25lCisJaGV4IG9iamVjdCBpZCBwZXIgbGluZSAoaS5lLiwgdGhlIHNhbWUgYXMgcHJvZHVjZWQgYnkgYGdpdCBmb3ItZWFjaC1yZWYKKwktLWZvcm1hdD0nJShvYmplY3RuYW1lKSdgKS4KKysKK05vdGUgdGhhdCB5b3UgY2Fubm90IGdlbmVyYWxseSBwdXQgYGdpdCBmb3ItZWFjaC1yZWZgIGRpcmVjdGx5IGludG8gdGhlIGNvbmZpZwordmFsdWUsIGFzIGl0IGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IHBhdGggYXMgYW4gYXJndW1lbnQgKGJ1dCB5b3UgY2FuIHdyYXAKK3RoZSBjb21tYW5kIGFib3ZlIGluIGEgc2hlbGwgc2NyaXB0KS4KKworY29yZS5hbHRlcm5hdGVSZWZzUHJlZml4ZXM6OgorCVdoZW4gbGlzdGluZyByZWZlcmVuY2VzIGZyb20gYW4gYWx0ZXJuYXRlLCBsaXN0IG9ubHkgcmVmZXJlbmNlcyB0aGF0IGJlZ2luCisJd2l0aCB0aGUgZ2l2ZW4gcHJlZml4LiBQcmVmaXhlcyBtYXRjaCBhcyBpZiB0aGV5IHdlcmUgZ2l2ZW4gYXMgYXJndW1lbnRzIHRvCisJbGlua2dpdDpnaXQtZm9yLWVhY2gtcmVmWzFdLiBUbyBsaXN0IG11bHRpcGxlIHByZWZpeGVzLCBzZXBhcmF0ZSB0aGVtIHdpdGgKKwl3aGl0ZXNwYWNlLiBJZiBgY29yZS5hbHRlcm5hdGVSZWZzQ29tbWFuZGAgaXMgc2V0LCBzZXR0aW5nCisJYGNvcmUuYWx0ZXJuYXRlUmVmc1ByZWZpeGVzYCBoYXMgbm8gZWZmZWN0LgorCitjb3JlLmJhcmU6OgorCUlmIHRydWUgdGhpcyByZXBvc2l0b3J5IGlzIGFzc3VtZWQgdG8gYmUgJ2JhcmUnIGFuZCBoYXMgbm8KKwl3b3JraW5nIGRpcmVjdG9yeSBhc3NvY2lhdGVkIHdpdGggaXQuICBJZiB0aGlzIGlzIHRoZSBjYXNlIGEKKwludW1iZXIgb2YgY29tbWFuZHMgdGhhdCByZXF1aXJlIGEgd29ya2luZyBkaXJlY3Rvcnkgd2lsbCBiZQorCWRpc2FibGVkLCBzdWNoIGFzIGxpbmtnaXQ6Z2l0LWFkZFsxXSBvciBsaW5rZ2l0OmdpdC1tZXJnZVsxXS4KKysKK1RoaXMgc2V0dGluZyBpcyBhdXRvbWF0aWNhbGx5IGd1ZXNzZWQgYnkgbGlua2dpdDpnaXQtY2xvbmVbMV0gb3IKK2xpbmtnaXQ6Z2l0LWluaXRbMV0gd2hlbiB0aGUgcmVwb3NpdG9yeSB3YXMgY3JlYXRlZC4gIEJ5IGRlZmF1bHQgYQorcmVwb3NpdG9yeSB0aGF0IGVuZHMgaW4gIi8uZ2l0IiBpcyBhc3N1bWVkIHRvIGJlIG5vdCBiYXJlIChiYXJlID0KK2ZhbHNlKSwgd2hpbGUgYWxsIG90aGVyIHJlcG9zaXRvcmllcyBhcmUgYXNzdW1lZCB0byBiZSBiYXJlIChiYXJlCis9IHRydWUpLgorCitjb3JlLndvcmt0cmVlOjoKKwlTZXQgdGhlIHBhdGggdG8gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZS4KKwlJZiBgR0lUX0NPTU1PTl9ESVJgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgY29yZS53b3JrdHJlZQorCWlzIGlnbm9yZWQgYW5kIG5vdCB1c2VkIGZvciBkZXRlcm1pbmluZyB0aGUgcm9vdCBvZiB3b3JraW5nIHRyZWUuCisJVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9XT1JLX1RSRUVgIGVudmlyb25tZW50CisJdmFyaWFibGUgYW5kIHRoZSBgLS13b3JrLXRyZWVgIGNvbW1hbmQtbGluZSBvcHRpb24uCisJVGhlIHZhbHVlIGNhbiBiZSBhbiBhYnNvbHV0ZSBwYXRoIG9yIHJlbGF0aXZlIHRvIHRoZSBwYXRoIHRvCisJdGhlIC5naXQgZGlyZWN0b3J5LCB3aGljaCBpcyBlaXRoZXIgc3BlY2lmaWVkIGJ5IC0tZ2l0LWRpcgorCW9yIEdJVF9ESVIsIG9yIGF1dG9tYXRpY2FsbHkgZGlzY292ZXJlZC4KKwlJZiAtLWdpdC1kaXIgb3IgR0lUX0RJUiBpcyBzcGVjaWZpZWQgYnV0IG5vbmUgb2YKKwktLXdvcmstdHJlZSwgR0lUX1dPUktfVFJFRSBhbmQgY29yZS53b3JrdHJlZSBpcyBzcGVjaWZpZWQsCisJdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgcmVnYXJkZWQgYXMgdGhlIHRvcCBsZXZlbAorCW9mIHlvdXIgd29ya2luZyB0cmVlLgorKworTm90ZSB0aGF0IHRoaXMgdmFyaWFibGUgaXMgaG9ub3JlZCBldmVuIHdoZW4gc2V0IGluIGEgY29uZmlndXJhdGlvbgorZmlsZSBpbiBhICIuZ2l0IiBzdWJkaXJlY3Rvcnkgb2YgYSBkaXJlY3RvcnkgYW5kIGl0cyB2YWx1ZSBkaWZmZXJzCitmcm9tIHRoZSBsYXR0ZXIgZGlyZWN0b3J5IChlLmcuICIvcGF0aC90by8uZ2l0L2NvbmZpZyIgaGFzCitjb3JlLndvcmt0cmVlIHNldCB0byAiL2RpZmZlcmVudC9wYXRoIiksIHdoaWNoIGlzIG1vc3QgbGlrZWx5IGEKK21pc2NvbmZpZ3VyYXRpb24uICBSdW5uaW5nIEdpdCBjb21tYW5kcyBpbiB0aGUgIi9wYXRoL3RvIiBkaXJlY3Rvcnkgd2lsbAorc3RpbGwgdXNlICIvZGlmZmVyZW50L3BhdGgiIGFzIHRoZSByb290IG9mIHRoZSB3b3JrIHRyZWUgYW5kIGNhbiBjYXVzZQorY29uZnVzaW9uIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgKGUuZy4geW91IGFyZSBjcmVhdGluZyBhCityZWFkLW9ubHkgc25hcHNob3Qgb2YgdGhlIHNhbWUgaW5kZXggdG8gYSBsb2NhdGlvbiBkaWZmZXJlbnQgZnJvbSB0aGUKK3JlcG9zaXRvcnkncyB1c3VhbCB3b3JraW5nIHRyZWUpLgorCitjb3JlLmxvZ0FsbFJlZlVwZGF0ZXM6OgorCUVuYWJsZSB0aGUgcmVmbG9nLiBVcGRhdGVzIHRvIGEgcmVmIDxyZWY+IGlzIGxvZ2dlZCB0byB0aGUgZmlsZQorCSJgJEdJVF9ESVIvbG9ncy88cmVmPmAiLCBieSBhcHBlbmRpbmcgdGhlIG5ldyBhbmQgb2xkCisJU0hBLTEsIHRoZSBkYXRlL3RpbWUgYW5kIHRoZSByZWFzb24gb2YgdGhlIHVwZGF0ZSwgYnV0CisJb25seSB3aGVuIHRoZSBmaWxlIGV4aXN0cy4gIElmIHRoaXMgY29uZmlndXJhdGlvbgorCXZhcmlhYmxlIGlzIHNldCB0byBgdHJ1ZWAsIG1pc3NpbmcgImAkR0lUX0RJUi9sb2dzLzxyZWY+YCIKKwlmaWxlIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmb3IgYnJhbmNoIGhlYWRzIChpLmUuIHVuZGVyCisJYHJlZnMvaGVhZHMvYCksIHJlbW90ZSByZWZzIChpLmUuIHVuZGVyIGByZWZzL3JlbW90ZXMvYCksCisJbm90ZSByZWZzIChpLmUuIHVuZGVyIGByZWZzL25vdGVzL2ApLCBhbmQgdGhlIHN5bWJvbGljIHJlZiBgSEVBRGAuCisJSWYgaXQgaXMgc2V0IHRvIGBhbHdheXNgLCB0aGVuIGEgbWlzc2luZyByZWZsb2cgaXMgYXV0b21hdGljYWxseQorCWNyZWF0ZWQgZm9yIGFueSByZWYgdW5kZXIgYHJlZnMvYC4KKysKK1RoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgY29tbWl0Cit3YXMgdGhlIHRpcCBvZiBhIGJyYW5jaCAiMiBkYXlzIGFnbyIuCisrCitUaGlzIHZhbHVlIGlzIHRydWUgYnkgZGVmYXVsdCBpbiBhIHJlcG9zaXRvcnkgdGhhdCBoYXMKK2Egd29ya2luZyBkaXJlY3RvcnkgYXNzb2NpYXRlZCB3aXRoIGl0LCBhbmQgZmFsc2UgYnkKK2RlZmF1bHQgaW4gYSBiYXJlIHJlcG9zaXRvcnkuCisKK2NvcmUucmVwb3NpdG9yeUZvcm1hdFZlcnNpb246OgorCUludGVybmFsIHZhcmlhYmxlIGlkZW50aWZ5aW5nIHRoZSByZXBvc2l0b3J5IGZvcm1hdCBhbmQgbGF5b3V0CisJdmVyc2lvbi4KKworY29yZS5zaGFyZWRSZXBvc2l0b3J5OjoKKwlXaGVuICdncm91cCcgKG9yICd0cnVlJyksIHRoZSByZXBvc2l0b3J5IGlzIG1hZGUgc2hhcmVhYmxlIGJldHdlZW4KKwlzZXZlcmFsIHVzZXJzIGluIGEgZ3JvdXAgKG1ha2luZyBzdXJlIGFsbCB0aGUgZmlsZXMgYW5kIG9iamVjdHMgYXJlCisJZ3JvdXAtd3JpdGFibGUpLiBXaGVuICdhbGwnIChvciAnd29ybGQnIG9yICdldmVyeWJvZHknKSwgdGhlCisJcmVwb3NpdG9yeSB3aWxsIGJlIHJlYWRhYmxlIGJ5IGFsbCB1c2VycywgYWRkaXRpb25hbGx5IHRvIGJlaW5nCisJZ3JvdXAtc2hhcmVhYmxlLiBXaGVuICd1bWFzaycgKG9yICdmYWxzZScpLCBHaXQgd2lsbCB1c2UgcGVybWlzc2lvbnMKKwlyZXBvcnRlZCBieSB1bWFzaygyKS4gV2hlbiAnMHh4eCcsIHdoZXJlICcweHh4JyBpcyBhbiBvY3RhbCBudW1iZXIsCisJZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgd2lsbCBoYXZlIHRoaXMgbW9kZSB2YWx1ZS4gJzB4eHgnIHdpbGwgb3ZlcnJpZGUKKwl1c2VyJ3MgdW1hc2sgdmFsdWUgKHdoZXJlYXMgdGhlIG90aGVyIG9wdGlvbnMgd2lsbCBvbmx5IG92ZXJyaWRlCisJcmVxdWVzdGVkIHBhcnRzIG9mIHRoZSB1c2VyJ3MgdW1hc2sgdmFsdWUpLiBFeGFtcGxlczogJzA2NjAnIHdpbGwgbWFrZQorCXRoZSByZXBvIHJlYWQvd3JpdGUtYWJsZSBmb3IgdGhlIG93bmVyIGFuZCBncm91cCwgYnV0IGluYWNjZXNzaWJsZSB0bworCW90aGVycyAoZXF1aXZhbGVudCB0byAnZ3JvdXAnIHVubGVzcyB1bWFzayBpcyBlLmcuICcwMDIyJykuICcwNjQwJyBpcyBhCisJcmVwb3NpdG9yeSB0aGF0IGlzIGdyb3VwLXJlYWRhYmxlIGJ1dCBub3QgZ3JvdXAtd3JpdGFibGUuCisJU2VlIGxpbmtnaXQ6Z2l0LWluaXRbMV0uIEZhbHNlIGJ5IGRlZmF1bHQuCisKK2NvcmUud2FybkFtYmlndW91c1JlZnM6OgorCUlmIHRydWUsIEdpdCB3aWxsIHdhcm4geW91IGlmIHRoZSByZWYgbmFtZSB5b3UgcGFzc2VkIGl0IGlzIGFtYmlndW91cworCWFuZCBtaWdodCBtYXRjaCBtdWx0aXBsZSByZWZzIGluIHRoZSByZXBvc2l0b3J5LiBUcnVlIGJ5IGRlZmF1bHQuCisKK2NvcmUuY29tcHJlc3Npb246OgorCUFuIGludGVnZXIgLTEuLjksIGluZGljYXRpbmcgYSBkZWZhdWx0IGNvbXByZXNzaW9uIGxldmVsLgorCS0xIGlzIHRoZSB6bGliIGRlZmF1bHQuIDAgbWVhbnMgbm8gY29tcHJlc3Npb24sCisJYW5kIDEuLjkgYXJlIHZhcmlvdXMgc3BlZWQvc2l6ZSB0cmFkZW9mZnMsIDkgYmVpbmcgc2xvd2VzdC4KKwlJZiBzZXQsIHRoaXMgcHJvdmlkZXMgYSBkZWZhdWx0IHRvIG90aGVyIGNvbXByZXNzaW9uIHZhcmlhYmxlcywKKwlzdWNoIGFzIGBjb3JlLmxvb3NlQ29tcHJlc3Npb25gIGFuZCBgcGFjay5jb21wcmVzc2lvbmAuCisKK2NvcmUubG9vc2VDb21wcmVzc2lvbjo6CisJQW4gaW50ZWdlciAtMS4uOSwgaW5kaWNhdGluZyB0aGUgY29tcHJlc3Npb24gbGV2ZWwgZm9yIG9iamVjdHMgdGhhdAorCWFyZSBub3QgaW4gYSBwYWNrIGZpbGUuIC0xIGlzIHRoZSB6bGliIGRlZmF1bHQuIDAgbWVhbnMgbm8KKwljb21wcmVzc2lvbiwgYW5kIDEuLjkgYXJlIHZhcmlvdXMgc3BlZWQvc2l6ZSB0cmFkZW9mZnMsIDkgYmVpbmcKKwlzbG93ZXN0LiAgSWYgbm90IHNldCwgIGRlZmF1bHRzIHRvIGNvcmUuY29tcHJlc3Npb24uICBJZiB0aGF0IGlzCisJbm90IHNldCwgIGRlZmF1bHRzIHRvIDEgKGJlc3Qgc3BlZWQpLgorCitjb3JlLnBhY2tlZEdpdFdpbmRvd1NpemU6OgorCU51bWJlciBvZiBieXRlcyBvZiBhIHBhY2sgZmlsZSB0byBtYXAgaW50byBtZW1vcnkgaW4gYQorCXNpbmdsZSBtYXBwaW5nIG9wZXJhdGlvbi4gIExhcmdlciB3aW5kb3cgc2l6ZXMgbWF5IGFsbG93CisJeW91ciBzeXN0ZW0gdG8gcHJvY2VzcyBhIHNtYWxsZXIgbnVtYmVyIG9mIGxhcmdlIHBhY2sgZmlsZXMKKwltb3JlIHF1aWNrbHkuICBTbWFsbGVyIHdpbmRvdyBzaXplcyB3aWxsIG5lZ2F0aXZlbHkgYWZmZWN0CisJcGVyZm9ybWFuY2UgZHVlIHRvIGluY3JlYXNlZCBjYWxscyB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzCisJbWVtb3J5IG1hbmFnZXIsIGJ1dCBtYXkgaW1wcm92ZSBwZXJmb3JtYW5jZSB3aGVuIGFjY2Vzc2luZworCWEgbGFyZ2UgbnVtYmVyIG9mIGxhcmdlIHBhY2sgZmlsZXMuCisrCitEZWZhdWx0IGlzIDEgTWlCIGlmIE5PX01NQVAgd2FzIHNldCBhdCBjb21waWxlIHRpbWUsIG90aGVyd2lzZSAzMgorTWlCIG9uIDMyIGJpdCBwbGF0Zm9ybXMgYW5kIDEgR2lCIG9uIDY0IGJpdCBwbGF0Zm9ybXMuICBUaGlzIHNob3VsZAorYmUgcmVhc29uYWJsZSBmb3IgYWxsIHVzZXJzL29wZXJhdGluZyBzeXN0ZW1zLiAgWW91IHByb2JhYmx5IGRvCitub3QgbmVlZCB0byBhZGp1c3QgdGhpcyB2YWx1ZS4KKysKK0NvbW1vbiB1bml0IHN1ZmZpeGVzIG9mICdrJywgJ20nLCBvciAnZycgYXJlIHN1cHBvcnRlZC4KKworY29yZS5wYWNrZWRHaXRMaW1pdDo6CisJTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gbWFwIHNpbXVsdGFuZW91c2x5IGludG8gbWVtb3J5CisJZnJvbSBwYWNrIGZpbGVzLiAgSWYgR2l0IG5lZWRzIHRvIGFjY2VzcyBtb3JlIHRoYW4gdGhpcyBtYW55CisJYnl0ZXMgYXQgb25jZSB0byBjb21wbGV0ZSBhbiBvcGVyYXRpb24gaXQgd2lsbCB1bm1hcCBleGlzdGluZworCXJlZ2lvbnMgdG8gcmVjbGFpbSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugd2l0aGluIHRoZSBwcm9jZXNzLgorKworRGVmYXVsdCBpcyAyNTYgTWlCIG9uIDMyIGJpdCBwbGF0Zm9ybXMgYW5kIDMyIFRpQiAoZWZmZWN0aXZlbHkKK3VubGltaXRlZCkgb24gNjQgYml0IHBsYXRmb3Jtcy4KK1RoaXMgc2hvdWxkIGJlIHJlYXNvbmFibGUgZm9yIGFsbCB1c2Vycy9vcGVyYXRpbmcgc3lzdGVtcywgZXhjZXB0IG9uCit0aGUgbGFyZ2VzdCBwcm9qZWN0cy4gIFlvdSBwcm9iYWJseSBkbyBub3QgbmVlZCB0byBhZGp1c3QgdGhpcyB2YWx1ZS4KKysKK0NvbW1vbiB1bml0IHN1ZmZpeGVzIG9mICdrJywgJ20nLCBvciAnZycgYXJlIHN1cHBvcnRlZC4KKworY29yZS5kZWx0YUJhc2VDYWNoZUxpbWl0OjoKKwlNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byByZXNlcnZlIGZvciBjYWNoaW5nIGJhc2Ugb2JqZWN0cworCXRoYXQgbWF5IGJlIHJlZmVyZW5jZWQgYnkgbXVsdGlwbGUgZGVsdGlmaWVkIG9iamVjdHMuICBCeSBzdG9yaW5nIHRoZQorCWVudGlyZSBkZWNvbXByZXNzZWQgYmFzZSBvYmplY3RzIGluIGEgY2FjaGUgR2l0IGlzIGFibGUKKwl0byBhdm9pZCB1bnBhY2tpbmcgYW5kIGRlY29tcHJlc3NpbmcgZnJlcXVlbnRseSB1c2VkIGJhc2UKKwlvYmplY3RzIG11bHRpcGxlIHRpbWVzLgorKworRGVmYXVsdCBpcyA5NiBNaUIgb24gYWxsIHBsYXRmb3Jtcy4gIFRoaXMgc2hvdWxkIGJlIHJlYXNvbmFibGUKK2ZvciBhbGwgdXNlcnMvb3BlcmF0aW5nIHN5c3RlbXMsIGV4Y2VwdCBvbiB0aGUgbGFyZ2VzdCBwcm9qZWN0cy4KK1lvdSBwcm9iYWJseSBkbyBub3QgbmVlZCB0byBhZGp1c3QgdGhpcyB2YWx1ZS4KKysKK0NvbW1vbiB1bml0IHN1ZmZpeGVzIG9mICdrJywgJ20nLCBvciAnZycgYXJlIHN1cHBvcnRlZC4KKworY29yZS5iaWdGaWxlVGhyZXNob2xkOjoKKwlGaWxlcyBsYXJnZXIgdGhhbiB0aGlzIHNpemUgYXJlIHN0b3JlZCBkZWZsYXRlZCwgd2l0aG91dAorCWF0dGVtcHRpbmcgZGVsdGEgY29tcHJlc3Npb24uICBTdG9yaW5nIGxhcmdlIGZpbGVzIHdpdGhvdXQKKwlkZWx0YSBjb21wcmVzc2lvbiBhdm9pZHMgZXhjZXNzaXZlIG1lbW9yeSB1c2FnZSwgYXQgdGhlCisJc2xpZ2h0IGV4cGVuc2Ugb2YgaW5jcmVhc2VkIGRpc2sgdXNhZ2UuIEFkZGl0aW9uYWxseSBmaWxlcworCWxhcmdlciB0aGFuIHRoaXMgc2l6ZSBhcmUgYWx3YXlzIHRyZWF0ZWQgYXMgYmluYXJ5LgorKworRGVmYXVsdCBpcyA1MTIgTWlCIG9uIGFsbCBwbGF0Zm9ybXMuICBUaGlzIHNob3VsZCBiZSByZWFzb25hYmxlCitmb3IgbW9zdCBwcm9qZWN0cyBhcyBzb3VyY2UgY29kZSBhbmQgb3RoZXIgdGV4dCBmaWxlcyBjYW4gc3RpbGwKK2JlIGRlbHRhIGNvbXByZXNzZWQsIGJ1dCBsYXJnZXIgYmluYXJ5IG1lZGlhIGZpbGVzIHdvbid0IGJlLgorKworQ29tbW9uIHVuaXQgc3VmZml4ZXMgb2YgJ2snLCAnbScsIG9yICdnJyBhcmUgc3VwcG9ydGVkLgorCitjb3JlLmV4Y2x1ZGVzRmlsZTo6CisJU3BlY2lmaWVzIHRoZSBwYXRobmFtZSB0byB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHBhdHRlcm5zIHRvCisJZGVzY3JpYmUgcGF0aHMgdGhhdCBhcmUgbm90IG1lYW50IHRvIGJlIHRyYWNrZWQsIGluIGFkZGl0aW9uCisJdG8gYC5naXRpZ25vcmVgIChwZXItZGlyZWN0b3J5KSBhbmQgYC5naXQvaW5mby9leGNsdWRlYC4KKwlEZWZhdWx0cyB0byBgJFhER19DT05GSUdfSE9NRS9naXQvaWdub3JlYC4KKwlJZiBgJFhER19DT05GSUdfSE9NRWAgaXMgZWl0aGVyIG5vdCBzZXQgb3IgZW1wdHksIGAkSE9NRS8uY29uZmlnL2dpdC9pZ25vcmVgCisJaXMgdXNlZCBpbnN0ZWFkLiBTZWUgbGlua2dpdDpnaXRpZ25vcmVbNV0uCisKK2NvcmUuYXNrUGFzczo6CisJU29tZSBjb21tYW5kcyAoZS5nLiBzdm4gYW5kIGh0dHAgaW50ZXJmYWNlcykgdGhhdCBpbnRlcmFjdGl2ZWx5CisJYXNrIGZvciBhIHBhc3N3b3JkIGNhbiBiZSB0b2xkIHRvIHVzZSBhbiBleHRlcm5hbCBwcm9ncmFtIGdpdmVuCisJdmlhIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9BU0tQQVNTYAorCWVudmlyb25tZW50IHZhcmlhYmxlLiBJZiBub3Qgc2V0LCBmYWxsIGJhY2sgdG8gdGhlIHZhbHVlIG9mIHRoZQorCWBTU0hfQVNLUEFTU2AgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IsIGZhaWxpbmcgdGhhdCwgYSBzaW1wbGUgcGFzc3dvcmQKKwlwcm9tcHQuIFRoZSBleHRlcm5hbCBwcm9ncmFtIHNoYWxsIGJlIGdpdmVuIGEgc3VpdGFibGUgcHJvbXB0IGFzCisJY29tbWFuZC1saW5lIGFyZ3VtZW50IGFuZCB3cml0ZSB0aGUgcGFzc3dvcmQgb24gaXRzIFNURE9VVC4KKworY29yZS5hdHRyaWJ1dGVzRmlsZTo6CisJSW4gYWRkaXRpb24gdG8gYC5naXRhdHRyaWJ1dGVzYCAocGVyLWRpcmVjdG9yeSkgYW5kCisJYC5naXQvaW5mby9hdHRyaWJ1dGVzYCwgR2l0IGxvb2tzIGludG8gdGhpcyBmaWxlIGZvciBhdHRyaWJ1dGVzCisJKHNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0pLiBQYXRoIGV4cGFuc2lvbnMgYXJlIG1hZGUgdGhlIHNhbWUKKwl3YXkgYXMgZm9yIGBjb3JlLmV4Y2x1ZGVzRmlsZWAuIEl0cyBkZWZhdWx0IHZhbHVlIGlzCisJYCRYREdfQ09ORklHX0hPTUUvZ2l0L2F0dHJpYnV0ZXNgLiBJZiBgJFhER19DT05GSUdfSE9NRWAgaXMgZWl0aGVyIG5vdAorCXNldCBvciBlbXB0eSwgYCRIT01FLy5jb25maWcvZ2l0L2F0dHJpYnV0ZXNgIGlzIHVzZWQgaW5zdGVhZC4KKworY29yZS5ob29rc1BhdGg6OgorCUJ5IGRlZmF1bHQgR2l0IHdpbGwgbG9vayBmb3IgeW91ciBob29rcyBpbiB0aGUKKwlgJEdJVF9ESVIvaG9va3NgIGRpcmVjdG9yeS4gU2V0IHRoaXMgdG8gZGlmZmVyZW50IHBhdGgsCisJZS5nLiBgL2V0Yy9naXQvaG9va3NgLCBhbmQgR2l0IHdpbGwgdHJ5IHRvIGZpbmQgeW91ciBob29rcyBpbgorCXRoYXQgZGlyZWN0b3J5LCBlLmcuIGAvZXRjL2dpdC9ob29rcy9wcmUtcmVjZWl2ZWAgaW5zdGVhZCBvZgorCWluIGAkR0lUX0RJUi9ob29rcy9wcmUtcmVjZWl2ZWAuCisrCitUaGUgcGF0aCBjYW4gYmUgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlLiBBIHJlbGF0aXZlIHBhdGggaXMKK3Rha2VuIGFzIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGhvb2tzIGFyZSBydW4gKHNlZQordGhlICJERVNDUklQVElPTiIgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdGhvb2tzWzVdKS4KKysKK1RoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgeW91J2QgbGlrZSB0bworY2VudHJhbGx5IGNvbmZpZ3VyZSB5b3VyIEdpdCBob29rcyBpbnN0ZWFkIG9mIGNvbmZpZ3VyaW5nIHRoZW0gb24gYQorcGVyLXJlcG9zaXRvcnkgYmFzaXMsIG9yIGFzIGEgbW9yZSBmbGV4aWJsZSBhbmQgY2VudHJhbGl6ZWQKK2FsdGVybmF0aXZlIHRvIGhhdmluZyBhbiBgaW5pdC50ZW1wbGF0ZURpcmAgd2hlcmUgeW91J3ZlIGNoYW5nZWQKK2RlZmF1bHQgaG9va3MuCisKK2NvcmUuZWRpdG9yOjoKKwlDb21tYW5kcyBzdWNoIGFzIGBjb21taXRgIGFuZCBgdGFnYCB0aGF0IGxldCB5b3UgZWRpdAorCW1lc3NhZ2VzIGJ5IGxhdW5jaGluZyBhbiBlZGl0b3IgdXNlIHRoZSB2YWx1ZSBvZiB0aGlzCisJdmFyaWFibGUgd2hlbiBpdCBpcyBzZXQsIGFuZCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKwlgR0lUX0VESVRPUmAgaXMgbm90IHNldC4gIFNlZSBsaW5rZ2l0OmdpdC12YXJbMV0uCisKK2NvcmUuY29tbWVudENoYXI6OgorCUNvbW1hbmRzIHN1Y2ggYXMgYGNvbW1pdGAgYW5kIGB0YWdgIHRoYXQgbGV0IHlvdSBlZGl0CisJbWVzc2FnZXMgY29uc2lkZXIgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGggdGhpcyBjaGFyYWN0ZXIKKwljb21tZW50ZWQsIGFuZCByZW1vdmVzIHRoZW0gYWZ0ZXIgdGhlIGVkaXRvciByZXR1cm5zCisJKGRlZmF1bHQgJyMnKS4KKysKK0lmIHNldCB0byAiYXV0byIsIGBnaXQtY29tbWl0YCB3b3VsZCBzZWxlY3QgYSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QKK3RoZSBiZWdpbm5pbmcgY2hhcmFjdGVyIG9mIGFueSBsaW5lIGluIGV4aXN0aW5nIGNvbW1pdCBtZXNzYWdlcy4KKworY29yZS5maWxlc1JlZkxvY2tUaW1lb3V0OjoKKwlUaGUgbGVuZ3RoIG9mIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgdG8gcmV0cnkgd2hlbiB0cnlpbmcgdG8KKwlsb2NrIGFuIGluZGl2aWR1YWwgcmVmZXJlbmNlLiBWYWx1ZSAwIG1lYW5zIG5vdCB0byByZXRyeSBhdAorCWFsbDsgLTEgbWVhbnMgdG8gdHJ5IGluZGVmaW5pdGVseS4gRGVmYXVsdCBpcyAxMDAgKGkuZS4sCisJcmV0cnkgZm9yIDEwMG1zKS4KKworY29yZS5wYWNrZWRSZWZzVGltZW91dDo6CisJVGhlIGxlbmd0aCBvZiB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHRvIHJldHJ5IHdoZW4gdHJ5aW5nIHRvCisJbG9jayB0aGUgYHBhY2tlZC1yZWZzYCBmaWxlLiBWYWx1ZSAwIG1lYW5zIG5vdCB0byByZXRyeSBhdAorCWFsbDsgLTEgbWVhbnMgdG8gdHJ5IGluZGVmaW5pdGVseS4gRGVmYXVsdCBpcyAxMDAwIChpLmUuLAorCXJldHJ5IGZvciAxIHNlY29uZCkuCisKK2NvcmUucGFnZXI6OgorCVRleHQgdmlld2VyIGZvciB1c2UgYnkgR2l0IGNvbW1hbmRzIChlLmcuLCAnbGVzcycpLiAgVGhlIHZhbHVlCisJaXMgbWVhbnQgdG8gYmUgaW50ZXJwcmV0ZWQgYnkgdGhlIHNoZWxsLiAgVGhlIG9yZGVyIG9mIHByZWZlcmVuY2UKKwlpcyB0aGUgYCRHSVRfUEFHRVJgIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGVuIGBjb3JlLnBhZ2VyYAorCWNvbmZpZ3VyYXRpb24sIHRoZW4gYCRQQUdFUmAsIGFuZCB0aGVuIHRoZSBkZWZhdWx0IGNob3NlbiBhdAorCWNvbXBpbGUgdGltZSAodXN1YWxseSAnbGVzcycpLgorKworV2hlbiB0aGUgYExFU1NgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVuc2V0LCBHaXQgc2V0cyBpdCB0byBgRlJYYAorKGlmIGBMRVNTYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIEdpdCBkb2VzIG5vdCBjaGFuZ2UgaXQgYXQKK2FsbCkuICBJZiB5b3Ugd2FudCB0byBzZWxlY3RpdmVseSBvdmVycmlkZSBHaXQncyBkZWZhdWx0IHNldHRpbmcKK2ZvciBgTEVTU2AsIHlvdSBjYW4gc2V0IGBjb3JlLnBhZ2VyYCB0byBlLmcuIGBsZXNzIC1TYC4gIFRoaXMgd2lsbAorYmUgcGFzc2VkIHRvIHRoZSBzaGVsbCBieSBHaXQsIHdoaWNoIHdpbGwgdHJhbnNsYXRlIHRoZSBmaW5hbAorY29tbWFuZCB0byBgTEVTUz1GUlggbGVzcyAtU2AuIFRoZSBlbnZpcm9ubWVudCBkb2VzIG5vdCBzZXQgdGhlCitgU2Agb3B0aW9uIGJ1dCB0aGUgY29tbWFuZCBsaW5lIGRvZXMsIGluc3RydWN0aW5nIGxlc3MgdG8gdHJ1bmNhdGUKK2xvbmcgbGluZXMuIFNpbWlsYXJseSwgc2V0dGluZyBgY29yZS5wYWdlcmAgdG8gYGxlc3MgLStGYCB3aWxsCitkZWFjdGl2YXRlIHRoZSBgRmAgb3B0aW9uIHNwZWNpZmllZCBieSB0aGUgZW52aXJvbm1lbnQgZnJvbSB0aGUKK2NvbW1hbmQtbGluZSwgZGVhY3RpdmF0aW5nIHRoZSAicXVpdCBpZiBvbmUgc2NyZWVuIiBiZWhhdmlvciBvZgorYGxlc3NgLiAgT25lIGNhbiBzcGVjaWZpY2FsbHkgYWN0aXZhdGUgc29tZSBmbGFncyBmb3IgcGFydGljdWxhcgorY29tbWFuZHM6IGZvciBleGFtcGxlLCBzZXR0aW5nIGBwYWdlci5ibGFtZWAgdG8gYGxlc3MgLVNgIGVuYWJsZXMKK2xpbmUgdHJ1bmNhdGlvbiBvbmx5IGZvciBgZ2l0IGJsYW1lYC4KKysKK0xpa2V3aXNlLCB3aGVuIHRoZSBgTFZgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVuc2V0LCBHaXQgc2V0cyBpdAordG8gYC1jYC4gIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBzZXR0aW5nIGJ5IGV4cG9ydGluZyBgTFZgIHdpdGgKK2Fub3RoZXIgdmFsdWUgb3Igc2V0dGluZyBgY29yZS5wYWdlcmAgdG8gYGx2ICtjYC4KKworY29yZS53aGl0ZXNwYWNlOjoKKwlBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGNvbW1vbiB3aGl0ZXNwYWNlIHByb2JsZW1zIHRvCisJbm90aWNlLiAgJ2dpdCBkaWZmJyB3aWxsIHVzZSBgY29sb3IuZGlmZi53aGl0ZXNwYWNlYCB0bworCWhpZ2hsaWdodCB0aGVtLCBhbmQgJ2dpdCBhcHBseSAtLXdoaXRlc3BhY2U9ZXJyb3InIHdpbGwKKwljb25zaWRlciB0aGVtIGFzIGVycm9ycy4gIFlvdSBjYW4gcHJlZml4IGAtYCB0byBkaXNhYmxlCisJYW55IG9mIHRoZW0gKGUuZy4gYC10cmFpbGluZy1zcGFjZWApOgorKworKiBgYmxhbmstYXQtZW9sYCB0cmVhdHMgdHJhaWxpbmcgd2hpdGVzcGFjZXMgYXQgdGhlIGVuZCBvZiB0aGUgbGluZQorICBhcyBhbiBlcnJvciAoZW5hYmxlZCBieSBkZWZhdWx0KS4KKyogYHNwYWNlLWJlZm9yZS10YWJgIHRyZWF0cyBhIHNwYWNlIGNoYXJhY3RlciB0aGF0IGFwcGVhcnMgaW1tZWRpYXRlbHkKKyAgYmVmb3JlIGEgdGFiIGNoYXJhY3RlciBpbiB0aGUgaW5pdGlhbCBpbmRlbnQgcGFydCBvZiB0aGUgbGluZSBhcyBhbgorICBlcnJvciAoZW5hYmxlZCBieSBkZWZhdWx0KS4KKyogYGluZGVudC13aXRoLW5vbi10YWJgIHRyZWF0cyBhIGxpbmUgdGhhdCBpcyBpbmRlbnRlZCB3aXRoIHNwYWNlCisgIGNoYXJhY3RlcnMgaW5zdGVhZCBvZiB0aGUgZXF1aXZhbGVudCB0YWJzIGFzIGFuIGVycm9yIChub3QgZW5hYmxlZCBieQorICBkZWZhdWx0KS4KKyogYHRhYi1pbi1pbmRlbnRgIHRyZWF0cyBhIHRhYiBjaGFyYWN0ZXIgaW4gdGhlIGluaXRpYWwgaW5kZW50IHBhcnQgb2YKKyAgdGhlIGxpbmUgYXMgYW4gZXJyb3IgKG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQpLgorKiBgYmxhbmstYXQtZW9mYCB0cmVhdHMgYmxhbmsgbGluZXMgYWRkZWQgYXQgdGhlIGVuZCBvZiBmaWxlIGFzIGFuIGVycm9yCisgIChlbmFibGVkIGJ5IGRlZmF1bHQpLgorKiBgdHJhaWxpbmctc3BhY2VgIGlzIGEgc2hvcnQtaGFuZCB0byBjb3ZlciBib3RoIGBibGFuay1hdC1lb2xgIGFuZAorICBgYmxhbmstYXQtZW9mYC4KKyogYGNyLWF0LWVvbGAgdHJlYXRzIGEgY2FycmlhZ2UtcmV0dXJuIGF0IHRoZSBlbmQgb2YgbGluZSBhcworICBwYXJ0IG9mIHRoZSBsaW5lIHRlcm1pbmF0b3IsIGkuZS4gd2l0aCBpdCwgYHRyYWlsaW5nLXNwYWNlYAorICBkb2VzIG5vdCB0cmlnZ2VyIGlmIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHN1Y2ggYSBjYXJyaWFnZS1yZXR1cm4KKyAgaXMgbm90IGEgd2hpdGVzcGFjZSAobm90IGVuYWJsZWQgYnkgZGVmYXVsdCkuCisqIGB0YWJ3aWR0aD08bj5gIHRlbGxzIGhvdyBtYW55IGNoYXJhY3RlciBwb3NpdGlvbnMgYSB0YWIgb2NjdXBpZXM7IHRoaXMKKyAgaXMgcmVsZXZhbnQgZm9yIGBpbmRlbnQtd2l0aC1ub24tdGFiYCBhbmQgd2hlbiBHaXQgZml4ZXMgYHRhYi1pbi1pbmRlbnRgCisgIGVycm9ycy4gVGhlIGRlZmF1bHQgdGFiIHdpZHRoIGlzIDguIEFsbG93ZWQgdmFsdWVzIGFyZSAxIHRvIDYzLgorCitjb3JlLmZzeW5jT2JqZWN0RmlsZXM6OgorCVRoaXMgYm9vbGVhbiB3aWxsIGVuYWJsZSAnZnN5bmMoKScgd2hlbiB3cml0aW5nIG9iamVjdCBmaWxlcy4KKysKK1RoaXMgaXMgYSB0b3RhbCB3YXN0ZSBvZiB0aW1lIGFuZCBlZmZvcnQgb24gYSBmaWxlc3lzdGVtIHRoYXQgb3JkZXJzCitkYXRhIHdyaXRlcyBwcm9wZXJseSwgYnV0IGNhbiBiZSB1c2VmdWwgZm9yIGZpbGVzeXN0ZW1zIHRoYXQgZG8gbm90IHVzZQoram91cm5hbGxpbmcgKHRyYWRpdGlvbmFsIFVOSVggZmlsZXN5c3RlbXMpIG9yIHRoYXQgb25seSBqb3VybmFsIG1ldGFkYXRhCithbmQgbm90IGZpbGUgY29udGVudHMgKE9TIFgncyBIRlMrLCBvciBMaW51eCBleHQzIHdpdGggImRhdGE9d3JpdGViYWNrIikuCisKK2NvcmUucHJlbG9hZEluZGV4OjoKKwlFbmFibGUgcGFyYWxsZWwgaW5kZXggcHJlbG9hZCBmb3Igb3BlcmF0aW9ucyBsaWtlICdnaXQgZGlmZicKKysKK1RoaXMgY2FuIHNwZWVkIHVwIG9wZXJhdGlvbnMgbGlrZSAnZ2l0IGRpZmYnIGFuZCAnZ2l0IHN0YXR1cycgZXNwZWNpYWxseQorb24gZmlsZXN5c3RlbXMgbGlrZSBORlMgdGhhdCBoYXZlIHdlYWsgY2FjaGluZyBzZW1hbnRpY3MgYW5kIHRodXMKK3JlbGF0aXZlbHkgaGlnaCBJTyBsYXRlbmNpZXMuICBXaGVuIGVuYWJsZWQsIEdpdCB3aWxsIGRvIHRoZQoraW5kZXggY29tcGFyaXNvbiB0byB0aGUgZmlsZXN5c3RlbSBkYXRhIGluIHBhcmFsbGVsLCBhbGxvd2luZworb3ZlcmxhcHBpbmcgSU8ncy4gIERlZmF1bHRzIHRvIHRydWUuCisKK2NvcmUudW5zZXRlbnZ2YXJzOjoKKwlXaW5kb3dzLW9ubHk6IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcycKKwluYW1lcyB0aGF0IG5lZWQgdG8gYmUgdW5zZXQgYmVmb3JlIHNwYXduaW5nIGFueSBvdGhlciBwcm9jZXNzLgorCURlZmF1bHRzIHRvIGBQRVJMNUxJQmAgdG8gYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCBHaXQgZm9yCisJV2luZG93cyBpbnNpc3RzIG9uIHVzaW5nIGl0cyBvd24gUGVybCBpbnRlcnByZXRlci4KKworY29yZS5yZXN0cmljdGluaGVyaXRlZGhhbmRsZXM6OgorCVdpbmRvd3Mtb25seTogb3ZlcnJpZGUgd2hldGhlciBzcGF3bmVkIHByb2Nlc3NlcyBpbmhlcml0IG9ubHkgc3RhbmRhcmQKKwlmaWxlIGhhbmRsZXMgKGBzdGRpbmAsIGBzdGRvdXRgIGFuZCBgc3RkZXJyYCkgb3IgYWxsIGhhbmRsZXMuIENhbiBiZQorCWBhdXRvYCwgYHRydWVgIG9yIGBmYWxzZWAuIERlZmF1bHRzIHRvIGBhdXRvYCwgd2hpY2ggbWVhbnMgYHRydWVgIG9uCisJV2luZG93cyA3IGFuZCBsYXRlciwgYW5kIGBmYWxzZWAgb24gb2xkZXIgV2luZG93cyB2ZXJzaW9ucy4KKworY29yZS5jcmVhdGVPYmplY3Q6OgorCVlvdSBjYW4gc2V0IHRoaXMgdG8gJ2xpbmsnLCBpbiB3aGljaCBjYXNlIGEgaGFyZGxpbmsgZm9sbG93ZWQgYnkKKwlhIGRlbGV0ZSBvZiB0aGUgc291cmNlIGFyZSB1c2VkIHRvIG1ha2Ugc3VyZSB0aGF0IG9iamVjdCBjcmVhdGlvbgorCXdpbGwgbm90IG92ZXJ3cml0ZSBleGlzdGluZyBvYmplY3RzLgorKworT24gc29tZSBmaWxlIHN5c3RlbS9vcGVyYXRpbmcgc3lzdGVtIGNvbWJpbmF0aW9ucywgdGhpcyBpcyB1bnJlbGlhYmxlLgorU2V0IHRoaXMgY29uZmlnIHNldHRpbmcgdG8gJ3JlbmFtZScgdGhlcmU7IEhvd2V2ZXIsIFRoaXMgd2lsbCByZW1vdmUgdGhlCitjaGVjayB0aGF0IG1ha2VzIHN1cmUgdGhhdCBleGlzdGluZyBvYmplY3QgZmlsZXMgd2lsbCBub3QgZ2V0IG92ZXJ3cml0dGVuLgorCitjb3JlLm5vdGVzUmVmOjoKKwlXaGVuIHNob3dpbmcgY29tbWl0IG1lc3NhZ2VzLCBhbHNvIHNob3cgbm90ZXMgd2hpY2ggYXJlIHN0b3JlZCBpbgorCXRoZSBnaXZlbiByZWYuICBUaGUgcmVmIG11c3QgYmUgZnVsbHkgcXVhbGlmaWVkLiAgSWYgdGhlIGdpdmVuCisJcmVmIGRvZXMgbm90IGV4aXN0LCBpdCBpcyBub3QgYW4gZXJyb3IgYnV0IG1lYW5zIHRoYXQgbm8KKwlub3RlcyBzaG91bGQgYmUgcHJpbnRlZC4KKysKK1RoaXMgc2V0dGluZyBkZWZhdWx0cyB0byAicmVmcy9ub3Rlcy9jb21taXRzIiwgYW5kIGl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5Cit0aGUgYEdJVF9OT1RFU19SRUZgIGVudmlyb25tZW50IHZhcmlhYmxlLiAgU2VlIGxpbmtnaXQ6Z2l0LW5vdGVzWzFdLgorCitjb3JlLmNvbW1pdEdyYXBoOjoKKwlJZiB0cnVlLCB0aGVuIGdpdCB3aWxsIHJlYWQgdGhlIGNvbW1pdC1ncmFwaCBmaWxlIChpZiBpdCBleGlzdHMpCisJdG8gcGFyc2UgdGhlIGdyYXBoIHN0cnVjdHVyZSBvZiBjb21taXRzLiBEZWZhdWx0cyB0byB0cnVlLiBTZWUKKwlsaW5rZ2l0OmdpdC1jb21taXQtZ3JhcGhbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK2NvcmUudXNlUmVwbGFjZVJlZnM6OgorCUlmIHNldCB0byBgZmFsc2VgLCBiZWhhdmUgYXMgaWYgdGhlIGAtLW5vLXJlcGxhY2Utb2JqZWN0c2AKKwlvcHRpb24gd2FzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuIFNlZSBsaW5rZ2l0OmdpdFsxXSBhbmQKKwlsaW5rZ2l0OmdpdC1yZXBsYWNlWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitjb3JlLm11bHRpUGFja0luZGV4OjoKKwlVc2UgdGhlIG11bHRpLXBhY2staW5kZXggZmlsZSB0byB0cmFjayBtdWx0aXBsZSBwYWNrZmlsZXMgdXNpbmcgYQorCXNpbmdsZSBpbmRleC4gU2VlIGxpbms6dGVjaG5pY2FsL211bHRpLXBhY2staW5kZXguaHRtbFt0aGUKKwltdWx0aS1wYWNrLWluZGV4IGRlc2lnbiBkb2N1bWVudF0uCisKK2NvcmUuc3BhcnNlQ2hlY2tvdXQ6OgorCUVuYWJsZSAic3BhcnNlIGNoZWNrb3V0IiBmZWF0dXJlLiBTZWUgbGlua2dpdDpnaXQtc3BhcnNlLWNoZWNrb3V0WzFdCisJZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK2NvcmUuc3BhcnNlQ2hlY2tvdXRDb25lOjoKKwlFbmFibGVzIHRoZSAiY29uZSBtb2RlIiBvZiB0aGUgc3BhcnNlIGNoZWNrb3V0IGZlYXR1cmUuIFdoZW4gdGhlCisJc3BhcnNlLWNoZWNrb3V0IGZpbGUgY29udGFpbnMgYSBsaW1pdGVkIHNldCBvZiBwYXR0ZXJucywgdGhlbiB0aGlzCisJbW9kZSBwcm92aWRlcyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBhZHZhbnRhZ2VzLiBTZWUKKwlsaW5rZ2l0OmdpdC1zcGFyc2UtY2hlY2tvdXRbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK2NvcmUuYWJicmV2OjoKKwlTZXQgdGhlIGxlbmd0aCBvYmplY3QgbmFtZXMgYXJlIGFiYnJldmlhdGVkIHRvLiAgSWYKKwl1bnNwZWNpZmllZCBvciBzZXQgdG8gImF1dG8iLCBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBpcworCWNvbXB1dGVkIGJhc2VkIG9uIHRoZSBhcHByb3hpbWF0ZSBudW1iZXIgb2YgcGFja2VkIG9iamVjdHMKKwlpbiB5b3VyIHJlcG9zaXRvcnksIHdoaWNoIGhvcGVmdWxseSBpcyBlbm91Z2ggZm9yCisJYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWVzIHRvIHN0YXkgdW5pcXVlIGZvciBzb21lIHRpbWUuCisJVGhlIG1pbmltdW0gbGVuZ3RoIGlzIDQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jcmVkZW50aWFsLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NyZWRlbnRpYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMDE2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jcmVkZW50aWFsLnR4dApAQCAtMCwwICsxLDMwIEBACitjcmVkZW50aWFsLmhlbHBlcjo6CisJU3BlY2lmeSBhbiBleHRlcm5hbCBoZWxwZXIgdG8gYmUgY2FsbGVkIHdoZW4gYSB1c2VybmFtZSBvcgorCXBhc3N3b3JkIGNyZWRlbnRpYWwgaXMgbmVlZGVkOyB0aGUgaGVscGVyIG1heSBjb25zdWx0IGV4dGVybmFsCisJc3RvcmFnZSB0byBhdm9pZCBwcm9tcHRpbmcgdGhlIHVzZXIgZm9yIHRoZSBjcmVkZW50aWFscy4gVGhpcyBpcworCW5vcm1hbGx5IHRoZSBuYW1lIG9mIGEgY3JlZGVudGlhbCBoZWxwZXIgd2l0aCBwb3NzaWJsZQorCWFyZ3VtZW50cywgYnV0IG1heSBhbHNvIGJlIGFuIGFic29sdXRlIHBhdGggd2l0aCBhcmd1bWVudHMgb3IsIGlmCisJcHJlY2VkZWQgYnkgYCFgLCBzaGVsbCBjb21tYW5kcy4KKysKK05vdGUgdGhhdCBtdWx0aXBsZSBoZWxwZXJzIG1heSBiZSBkZWZpbmVkLiBTZWUgbGlua2dpdDpnaXRjcmVkZW50aWFsc1s3XQorZm9yIGRldGFpbHMgYW5kIGV4YW1wbGVzLgorCitjcmVkZW50aWFsLnVzZUh0dHBQYXRoOjoKKwlXaGVuIGFjcXVpcmluZyBjcmVkZW50aWFscywgY29uc2lkZXIgdGhlICJwYXRoIiBjb21wb25lbnQgb2YgYW4gaHR0cAorCW9yIGh0dHBzIFVSTCB0byBiZSBpbXBvcnRhbnQuIERlZmF1bHRzIHRvIGZhbHNlLiBTZWUKKwlsaW5rZ2l0OmdpdGNyZWRlbnRpYWxzWzddIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitjcmVkZW50aWFsLnVzZXJuYW1lOjoKKwlJZiBubyB1c2VybmFtZSBpcyBzZXQgZm9yIGEgbmV0d29yayBhdXRoZW50aWNhdGlvbiwgdXNlIHRoaXMgdXNlcm5hbWUKKwlieSBkZWZhdWx0LiBTZWUgY3JlZGVudGlhbC48Y29udGV4dD4uKiBiZWxvdywgYW5kCisJbGlua2dpdDpnaXRjcmVkZW50aWFsc1s3XS4KKworY3JlZGVudGlhbC48dXJsPi4qOjoKKwlBbnkgb2YgdGhlIGNyZWRlbnRpYWwuKiBvcHRpb25zIGFib3ZlIGNhbiBiZSBhcHBsaWVkIHNlbGVjdGl2ZWx5IHRvCisJc29tZSBjcmVkZW50aWFscy4gRm9yIGV4YW1wbGUgImNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS51c2VybmFtZSIKKwl3b3VsZCBzZXQgdGhlIGRlZmF1bHQgdXNlcm5hbWUgb25seSBmb3IgaHR0cHMgY29ubmVjdGlvbnMgdG8KKwlleGFtcGxlLmNvbS4gU2VlIGxpbmtnaXQ6Z2l0Y3JlZGVudGlhbHNbN10gZm9yIGRldGFpbHMgb24gaG93IFVSTHMgYXJlCisJbWF0Y2hlZC4KKworY3JlZGVudGlhbENhY2hlLmlnbm9yZVNJR0hVUDo6CisJVGVsbCBnaXQtY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uIHRvIGlnbm9yZSBTSUdIVVAsIGluc3RlYWQgb2YgcXVpdHRpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9kaWZmLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2RpZmYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMDlmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9kaWZmLnR4dApAQCAtMCwwICsxLDIzMSBAQAorZGlmZi5hdXRvUmVmcmVzaEluZGV4OjoKKwlXaGVuIHVzaW5nICdnaXQgZGlmZicgdG8gY29tcGFyZSB3aXRoIHdvcmsgdHJlZQorCWZpbGVzLCBkbyBub3QgY29uc2lkZXIgc3RhdC1vbmx5IGNoYW5nZSBhcyBjaGFuZ2VkLgorCUluc3RlYWQsIHNpbGVudGx5IHJ1biBgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2hgIHRvCisJdXBkYXRlIHRoZSBjYWNoZWQgc3RhdCBpbmZvcm1hdGlvbiBmb3IgcGF0aHMgd2hvc2UKKwljb250ZW50cyBpbiB0aGUgd29yayB0cmVlIG1hdGNoIHRoZSBjb250ZW50cyBpbiB0aGUKKwlpbmRleC4gIFRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIHRydWUuICBOb3RlIHRoYXQgdGhpcworCWFmZmVjdHMgb25seSAnZ2l0IGRpZmYnIFBvcmNlbGFpbiwgYW5kIG5vdCBsb3dlciBsZXZlbAorCSdkaWZmJyBjb21tYW5kcyBzdWNoIGFzICdnaXQgZGlmZi1maWxlcycuCisKK2RpZmYuZGlyc3RhdDo6CisJQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBgLS1kaXJzdGF0YCBwYXJhbWV0ZXJzIHNwZWNpZnlpbmcgdGhlCisJZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgYC0tZGlyc3RhdGAgb3B0aW9uIHRvIGxpbmtnaXQ6Z2l0LWRpZmZbMV0KKwlhbmQgZnJpZW5kcy4gVGhlIGRlZmF1bHRzIGNhbiBiZSBvdmVycmlkZGVuIG9uIHRoZSBjb21tYW5kIGxpbmUKKwkodXNpbmcgYC0tZGlyc3RhdD08cGFyYW0xLHBhcmFtMiwuLi4+YCkuIFRoZSBmYWxsYmFjayBkZWZhdWx0cworCSh3aGVuIG5vdCBjaGFuZ2VkIGJ5IGBkaWZmLmRpcnN0YXRgKSBhcmUgYGNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzYC4KKwlUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZToKKysKKy0tCitgY2hhbmdlc2A7OworCUNvbXB1dGUgdGhlIGRpcnN0YXQgbnVtYmVycyBieSBjb3VudGluZyB0aGUgbGluZXMgdGhhdCBoYXZlIGJlZW4KKwlyZW1vdmVkIGZyb20gdGhlIHNvdXJjZSwgb3IgYWRkZWQgdG8gdGhlIGRlc3RpbmF0aW9uLiBUaGlzIGlnbm9yZXMKKwl0aGUgYW1vdW50IG9mIHB1cmUgY29kZSBtb3ZlbWVudHMgd2l0aGluIGEgZmlsZS4gIEluIG90aGVyIHdvcmRzLAorCXJlYXJyYW5naW5nIGxpbmVzIGluIGEgZmlsZSBpcyBub3QgY291bnRlZCBhcyBtdWNoIGFzIG90aGVyIGNoYW5nZXMuCisJVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aGVuIG5vIHBhcmFtZXRlciBpcyBnaXZlbi4KK2BsaW5lc2A7OworCUNvbXB1dGUgdGhlIGRpcnN0YXQgbnVtYmVycyBieSBkb2luZyB0aGUgcmVndWxhciBsaW5lLWJhc2VkIGRpZmYKKwlhbmFseXNpcywgYW5kIHN1bW1pbmcgdGhlIHJlbW92ZWQvYWRkZWQgbGluZSBjb3VudHMuIChGb3IgYmluYXJ5CisJZmlsZXMsIGNvdW50IDY0LWJ5dGUgY2h1bmtzIGluc3RlYWQsIHNpbmNlIGJpbmFyeSBmaWxlcyBoYXZlIG5vCisJbmF0dXJhbCBjb25jZXB0IG9mIGxpbmVzKS4gVGhpcyBpcyBhIG1vcmUgZXhwZW5zaXZlIGAtLWRpcnN0YXRgCisJYmVoYXZpb3IgdGhhbiB0aGUgYGNoYW5nZXNgIGJlaGF2aW9yLCBidXQgaXQgZG9lcyBjb3VudCByZWFycmFuZ2VkCisJbGluZXMgd2l0aGluIGEgZmlsZSBhcyBtdWNoIGFzIG90aGVyIGNoYW5nZXMuIFRoZSByZXN1bHRpbmcgb3V0cHV0CisJaXMgY29uc2lzdGVudCB3aXRoIHdoYXQgeW91IGdldCBmcm9tIHRoZSBvdGhlciBgLS0qc3RhdGAgb3B0aW9ucy4KK2BmaWxlc2A7OworCUNvbXB1dGUgdGhlIGRpcnN0YXQgbnVtYmVycyBieSBjb3VudGluZyB0aGUgbnVtYmVyIG9mIGZpbGVzIGNoYW5nZWQuCisJRWFjaCBjaGFuZ2VkIGZpbGUgY291bnRzIGVxdWFsbHkgaW4gdGhlIGRpcnN0YXQgYW5hbHlzaXMuIFRoaXMgaXMKKwl0aGUgY29tcHV0YXRpb25hbGx5IGNoZWFwZXN0IGAtLWRpcnN0YXRgIGJlaGF2aW9yLCBzaW5jZSBpdCBkb2VzCisJbm90IGhhdmUgdG8gbG9vayBhdCB0aGUgZmlsZSBjb250ZW50cyBhdCBhbGwuCitgY3VtdWxhdGl2ZWA7OworCUNvdW50IGNoYW5nZXMgaW4gYSBjaGlsZCBkaXJlY3RvcnkgZm9yIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGFzIHdlbGwuCisJTm90ZSB0aGF0IHdoZW4gdXNpbmcgYGN1bXVsYXRpdmVgLCB0aGUgc3VtIG9mIHRoZSBwZXJjZW50YWdlcworCXJlcG9ydGVkIG1heSBleGNlZWQgMTAwJS4gVGhlIGRlZmF1bHQgKG5vbi1jdW11bGF0aXZlKSBiZWhhdmlvciBjYW4KKwliZSBzcGVjaWZpZWQgd2l0aCB0aGUgYG5vbmN1bXVsYXRpdmVgIHBhcmFtZXRlci4KKzxsaW1pdD47OworCUFuIGludGVnZXIgcGFyYW1ldGVyIHNwZWNpZmllcyBhIGN1dC1vZmYgcGVyY2VudCAoMyUgYnkgZGVmYXVsdCkuCisJRGlyZWN0b3JpZXMgY29udHJpYnV0aW5nIGxlc3MgdGhhbiB0aGlzIHBlcmNlbnRhZ2Ugb2YgdGhlIGNoYW5nZXMKKwlhcmUgbm90IHNob3duIGluIHRoZSBvdXRwdXQuCistLQorKworRXhhbXBsZTogVGhlIGZvbGxvd2luZyB3aWxsIGNvdW50IGNoYW5nZWQgZmlsZXMsIHdoaWxlIGlnbm9yaW5nCitkaXJlY3RvcmllcyB3aXRoIGxlc3MgdGhhbiAxMCUgb2YgdGhlIHRvdGFsIGFtb3VudCBvZiBjaGFuZ2VkIGZpbGVzLAorYW5kIGFjY3VtdWxhdGluZyBjaGlsZCBkaXJlY3RvcnkgY291bnRzIGluIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXM6CitgZmlsZXMsMTAsY3VtdWxhdGl2ZWAuCisKK2RpZmYuc3RhdEdyYXBoV2lkdGg6OgorCUxpbWl0IHRoZSB3aWR0aCBvZiB0aGUgZ3JhcGggcGFydCBpbiAtLXN0YXQgb3V0cHV0LiBJZiBzZXQsIGFwcGxpZXMKKwl0byBhbGwgY29tbWFuZHMgZ2VuZXJhdGluZyAtLXN0YXQgb3V0cHV0IGV4Y2VwdCBmb3JtYXQtcGF0Y2guCisKK2RpZmYuY29udGV4dDo6CisJR2VuZXJhdGUgZGlmZnMgd2l0aCA8bj4gbGluZXMgb2YgY29udGV4dCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0CisJb2YgMy4gVGhpcyB2YWx1ZSBpcyBvdmVycmlkZGVuIGJ5IHRoZSAtVSBvcHRpb24uCisKK2RpZmYuaW50ZXJIdW5rQ29udGV4dDo6CisJU2hvdyB0aGUgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MsIHVwIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyCisJb2YgbGluZXMsIHRoZXJlYnkgZnVzaW5nIHRoZSBodW5rcyB0aGF0IGFyZSBjbG9zZSB0byBlYWNoIG90aGVyLgorCVRoaXMgdmFsdWUgc2VydmVzIGFzIHRoZSBkZWZhdWx0IGZvciB0aGUgYC0taW50ZXItaHVuay1jb250ZXh0YAorCWNvbW1hbmQgbGluZSBvcHRpb24uCisKK2RpZmYuZXh0ZXJuYWw6OgorCUlmIHRoaXMgY29uZmlnIHZhcmlhYmxlIGlzIHNldCwgZGlmZiBnZW5lcmF0aW9uIGlzIG5vdAorCXBlcmZvcm1lZCB1c2luZyB0aGUgaW50ZXJuYWwgZGlmZiBtYWNoaW5lcnksIGJ1dCB1c2luZyB0aGUKKwlnaXZlbiBjb21tYW5kLiAgQ2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgYEdJVF9FWFRFUk5BTF9ESUZGJworCWVudmlyb25tZW50IHZhcmlhYmxlLiAgVGhlIGNvbW1hbmQgaXMgY2FsbGVkIHdpdGggcGFyYW1ldGVycworCWFzIGRlc2NyaWJlZCB1bmRlciAiZ2l0IERpZmZzIiBpbiBsaW5rZ2l0OmdpdFsxXS4gIE5vdGU6IGlmCisJeW91IHdhbnQgdG8gdXNlIGFuIGV4dGVybmFsIGRpZmYgcHJvZ3JhbSBvbmx5IG9uIGEgc3Vic2V0IG9mCisJeW91ciBmaWxlcywgeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBpbnN0ZWFkLgorCitkaWZmLmlnbm9yZVN1Ym1vZHVsZXM6OgorCVNldHMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgLS1pZ25vcmUtc3VibW9kdWxlcy4gTm90ZSB0aGF0IHRoaXMKKwlhZmZlY3RzIG9ubHkgJ2dpdCBkaWZmJyBQb3JjZWxhaW4sIGFuZCBub3QgbG93ZXIgbGV2ZWwgJ2RpZmYnCisJY29tbWFuZHMgc3VjaCBhcyAnZ2l0IGRpZmYtZmlsZXMnLiAnZ2l0IGNoZWNrb3V0JworCWFuZCAnZ2l0IHN3aXRjaCcgYWxzbyBob25vcgorCXRoaXMgc2V0dGluZyB3aGVuIHJlcG9ydGluZyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiBTZXR0aW5nIGl0IHRvCisJJ2FsbCcgZGlzYWJsZXMgdGhlIHN1Ym1vZHVsZSBzdW1tYXJ5IG5vcm1hbGx5IHNob3duIGJ5ICdnaXQgY29tbWl0JworCWFuZCAnZ2l0IHN0YXR1cycgd2hlbiBgc3RhdHVzLnN1Ym1vZHVsZVN1bW1hcnlgIGlzIHNldCB1bmxlc3MgaXQgaXMKKwlvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSAtLWlnbm9yZS1zdWJtb2R1bGVzIGNvbW1hbmQtbGluZSBvcHRpb24uCisJVGhlICdnaXQgc3VibW9kdWxlJyBjb21tYW5kcyBhcmUgbm90IGFmZmVjdGVkIGJ5IHRoaXMgc2V0dGluZy4KKworZGlmZi5tbmVtb25pY1ByZWZpeDo6CisJSWYgc2V0LCAnZ2l0IGRpZmYnIHVzZXMgYSBwcmVmaXggcGFpciB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZQorCXN0YW5kYXJkICJhLyIgYW5kICJiLyIgZGVwZW5kaW5nIG9uIHdoYXQgaXMgYmVpbmcgY29tcGFyZWQuICBXaGVuCisJdGhpcyBjb25maWd1cmF0aW9uIGlzIGluIGVmZmVjdCwgcmV2ZXJzZSBkaWZmIG91dHB1dCBhbHNvIHN3YXBzCisJdGhlIG9yZGVyIG9mIHRoZSBwcmVmaXhlczoKK2BnaXQgZGlmZmA7OworCWNvbXBhcmVzIHRoZSAoaSluZGV4IGFuZCB0aGUgKHcpb3JrIHRyZWU7CitgZ2l0IGRpZmYgSEVBRGA7OworCSBjb21wYXJlcyBhIChjKW9tbWl0IGFuZCB0aGUgKHcpb3JrIHRyZWU7CitgZ2l0IGRpZmYgLS1jYWNoZWRgOzsKKwljb21wYXJlcyBhIChjKW9tbWl0IGFuZCB0aGUgKGkpbmRleDsKK2BnaXQgZGlmZiBIRUFEOmZpbGUxIGZpbGUyYDs7CisJY29tcGFyZXMgYW4gKG8pYmplY3QgYW5kIGEgKHcpb3JrIHRyZWUgZW50aXR5OworYGdpdCBkaWZmIC0tbm8taW5kZXggYSBiYDs7CisJY29tcGFyZXMgdHdvIG5vbi1naXQgdGhpbmdzICgxKSBhbmQgKDIpLgorCitkaWZmLm5vcHJlZml4OjoKKwlJZiBzZXQsICdnaXQgZGlmZicgZG9lcyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeC4KKworZGlmZi5vcmRlckZpbGU6OgorCUZpbGUgaW5kaWNhdGluZyBob3cgdG8gb3JkZXIgZmlsZXMgd2l0aGluIGEgZGlmZi4KKwlTZWUgdGhlICctTycgb3B0aW9uIHRvIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gZm9yIGRldGFpbHMuCisJSWYgYGRpZmYub3JkZXJGaWxlYCBpcyBhIHJlbGF0aXZlIHBhdGhuYW1lLCBpdCBpcyB0cmVhdGVkIGFzCisJcmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgd29ya2luZyB0cmVlLgorCitkaWZmLnJlbmFtZUxpbWl0OjoKKwlUaGUgbnVtYmVyIG9mIGZpbGVzIHRvIGNvbnNpZGVyIHdoZW4gcGVyZm9ybWluZyB0aGUgY29weS9yZW5hbWUKKwlkZXRlY3Rpb247IGVxdWl2YWxlbnQgdG8gdGhlICdnaXQgZGlmZicgb3B0aW9uIGAtbGAuIFRoaXMgc2V0dGluZworCWhhcyBubyBlZmZlY3QgaWYgcmVuYW1lIGRldGVjdGlvbiBpcyB0dXJuZWQgb2ZmLgorCitkaWZmLnJlbmFtZXM6OgorCVdoZXRoZXIgYW5kIGhvdyBHaXQgZGV0ZWN0cyByZW5hbWVzLiAgSWYgc2V0IHRvICJmYWxzZSIsCisJcmVuYW1lIGRldGVjdGlvbiBpcyBkaXNhYmxlZC4gSWYgc2V0IHRvICJ0cnVlIiwgYmFzaWMgcmVuYW1lCisJZGV0ZWN0aW9uIGlzIGVuYWJsZWQuICBJZiBzZXQgdG8gImNvcGllcyIgb3IgImNvcHkiLCBHaXQgd2lsbAorCWRldGVjdCBjb3BpZXMsIGFzIHdlbGwuICBEZWZhdWx0cyB0byB0cnVlLiAgTm90ZSB0aGF0IHRoaXMKKwlhZmZlY3RzIG9ubHkgJ2dpdCBkaWZmJyBQb3JjZWxhaW4gbGlrZSBsaW5rZ2l0OmdpdC1kaWZmWzFdIGFuZAorCWxpbmtnaXQ6Z2l0LWxvZ1sxXSwgYW5kIG5vdCBsb3dlciBsZXZlbCBjb21tYW5kcyBzdWNoIGFzCisJbGlua2dpdDpnaXQtZGlmZi1maWxlc1sxXS4KKworZGlmZi5zdXBwcmVzc0JsYW5rRW1wdHk6OgorCUEgYm9vbGVhbiB0byBpbmhpYml0IHRoZSBzdGFuZGFyZCBiZWhhdmlvciBvZiBwcmludGluZyBhIHNwYWNlCisJYmVmb3JlIGVhY2ggZW1wdHkgb3V0cHV0IGxpbmUuIERlZmF1bHRzIHRvIGZhbHNlLgorCitkaWZmLnN1Ym1vZHVsZTo6CisJU3BlY2lmeSB0aGUgZm9ybWF0IGluIHdoaWNoIGRpZmZlcmVuY2VzIGluIHN1Ym1vZHVsZXMgYXJlCisJc2hvd24uICBUaGUgInNob3J0IiBmb3JtYXQganVzdCBzaG93cyB0aGUgbmFtZXMgb2YgdGhlIGNvbW1pdHMKKwlhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIHJhbmdlLiBUaGUgImxvZyIgZm9ybWF0IGxpc3RzCisJdGhlIGNvbW1pdHMgaW4gdGhlIHJhbmdlIGxpa2UgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGBzdW1tYXJ5YAorCWRvZXMuIFRoZSAiZGlmZiIgZm9ybWF0IHNob3dzIGFuIGlubGluZSBkaWZmIG9mIHRoZSBjaGFuZ2VkCisJY29udGVudHMgb2YgdGhlIHN1Ym1vZHVsZS4gRGVmYXVsdHMgdG8gInNob3J0Ii4KKworZGlmZi53b3JkUmVnZXg6OgorCUEgUE9TSVggRXh0ZW5kZWQgUmVndWxhciBFeHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgYSAid29yZCIKKwl3aGVuIHBlcmZvcm1pbmcgd29yZC1ieS13b3JkIGRpZmZlcmVuY2UgY2FsY3VsYXRpb25zLiAgQ2hhcmFjdGVyCisJc2VxdWVuY2VzIHRoYXQgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcmUgIndvcmRzIiwgYWxsIG90aGVyCisJY2hhcmFjdGVycyBhcmUgKmlnbm9yYWJsZSogd2hpdGVzcGFjZS4KKworZGlmZi48ZHJpdmVyPi5jb21tYW5kOjoKKwlUaGUgY3VzdG9tIGRpZmYgZHJpdmVyIGNvbW1hbmQuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdCisJZm9yIGRldGFpbHMuCisKK2RpZmYuPGRyaXZlcj4ueGZ1bmNuYW1lOjoKKwlUaGUgcmVndWxhciBleHByZXNzaW9uIHRoYXQgdGhlIGRpZmYgZHJpdmVyIHNob3VsZCB1c2UgdG8KKwlyZWNvZ25pemUgdGhlIGh1bmsgaGVhZGVyLiAgQSBidWlsdC1pbiBwYXR0ZXJuIG1heSBhbHNvIGJlIHVzZWQuCisJU2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KKworZGlmZi48ZHJpdmVyPi5iaW5hcnk6OgorCVNldCB0aGlzIG9wdGlvbiB0byB0cnVlIHRvIG1ha2UgdGhlIGRpZmYgZHJpdmVyIHRyZWF0IGZpbGVzIGFzCisJYmluYXJ5LiAgU2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KKworZGlmZi48ZHJpdmVyPi50ZXh0Y29udjo6CisJVGhlIGNvbW1hbmQgdGhhdCB0aGUgZGlmZiBkcml2ZXIgc2hvdWxkIGNhbGwgdG8gZ2VuZXJhdGUgdGhlCisJdGV4dC1jb252ZXJ0ZWQgdmVyc2lvbiBvZiBhIGZpbGUuICBUaGUgcmVzdWx0IG9mIHRoZQorCWNvbnZlcnNpb24gaXMgdXNlZCB0byBnZW5lcmF0ZSBhIGh1bWFuLXJlYWRhYmxlIGRpZmYuICBTZWUKKwlsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCisKK2RpZmYuPGRyaXZlcj4ud29yZFJlZ2V4OjoKKwlUaGUgcmVndWxhciBleHByZXNzaW9uIHRoYXQgdGhlIGRpZmYgZHJpdmVyIHNob3VsZCB1c2UgdG8KKwlzcGxpdCB3b3JkcyBpbiBhIGxpbmUuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvcgorCWRldGFpbHMuCisKK2RpZmYuPGRyaXZlcj4uY2FjaGV0ZXh0Y29udjo6CisJU2V0IHRoaXMgb3B0aW9uIHRvIHRydWUgdG8gbWFrZSB0aGUgZGlmZiBkcml2ZXIgY2FjaGUgdGhlIHRleHQKKwljb252ZXJzaW9uIG91dHB1dHMuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCitkaWZmLnRvb2w6OgorCUNvbnRyb2xzIHdoaWNoIGRpZmYgdG9vbCBpcyB1c2VkIGJ5IGxpbmtnaXQ6Z2l0LWRpZmZ0b29sWzFdLgorCVRoaXMgdmFyaWFibGUgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBjb25maWd1cmVkIGluIGBtZXJnZS50b29sYC4KKwlUaGUgbGlzdCBiZWxvdyBzaG93cyB0aGUgdmFsaWQgYnVpbHQtaW4gdmFsdWVzLgorCUFueSBvdGhlciB2YWx1ZSBpcyB0cmVhdGVkIGFzIGEgY3VzdG9tIGRpZmYgdG9vbCBhbmQgcmVxdWlyZXMKKwl0aGF0IGEgY29ycmVzcG9uZGluZyBkaWZmdG9vbC48dG9vbD4uY21kIHZhcmlhYmxlIGlzIGRlZmluZWQuCisKK2RpZmYuZ3VpdG9vbDo6CisJQ29udHJvbHMgd2hpY2ggZGlmZiB0b29sIGlzIHVzZWQgYnkgbGlua2dpdDpnaXQtZGlmZnRvb2xbMV0gd2hlbgorCXRoZSAtZy8tLWd1aSBmbGFnIGlzIHNwZWNpZmllZC4gVGhpcyB2YXJpYWJsZSBvdmVycmlkZXMgdGhlIHZhbHVlCisJY29uZmlndXJlZCBpbiBgbWVyZ2UuZ3VpdG9vbGAuIFRoZSBsaXN0IGJlbG93IHNob3dzIHRoZSB2YWxpZAorCWJ1aWx0LWluIHZhbHVlcy4gQW55IG90aGVyIHZhbHVlIGlzIHRyZWF0ZWQgYXMgYSBjdXN0b20gZGlmZiB0b29sCisJYW5kIHJlcXVpcmVzIHRoYXQgYSBjb3JyZXNwb25kaW5nIGRpZmZ0b29sLjxndWl0b29sPi5jbWQgdmFyaWFibGUKKwlpcyBkZWZpbmVkLgorCitpbmNsdWRlOjouLi9tZXJnZXRvb2xzLWRpZmYudHh0W10KKworZGlmZi5pbmRlbnRIZXVyaXN0aWM6OgorCVNldCB0aGlzIG9wdGlvbiB0byBgZmFsc2VgIHRvIGRpc2FibGUgdGhlIGRlZmF1bHQgaGV1cmlzdGljcworCXRoYXQgc2hpZnQgZGlmZiBodW5rIGJvdW5kYXJpZXMgdG8gbWFrZSBwYXRjaGVzIGVhc2llciB0byByZWFkLgorCitkaWZmLmFsZ29yaXRobTo6CisJQ2hvb3NlIGEgZGlmZiBhbGdvcml0aG0uICBUaGUgdmFyaWFudHMgYXJlIGFzIGZvbGxvd3M6CisrCistLQorYGRlZmF1bHRgLCBgbXllcnNgOzsKKwlUaGUgYmFzaWMgZ3JlZWR5IGRpZmYgYWxnb3JpdGhtLiBDdXJyZW50bHksIHRoaXMgaXMgdGhlIGRlZmF1bHQuCitgbWluaW1hbGA7OworCVNwZW5kIGV4dHJhIHRpbWUgdG8gbWFrZSBzdXJlIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBkaWZmIGlzCisJcHJvZHVjZWQuCitgcGF0aWVuY2VgOzsKKwlVc2UgInBhdGllbmNlIGRpZmYiIGFsZ29yaXRobSB3aGVuIGdlbmVyYXRpbmcgcGF0Y2hlcy4KK2BoaXN0b2dyYW1gOzsKKwlUaGlzIGFsZ29yaXRobSBleHRlbmRzIHRoZSBwYXRpZW5jZSBhbGdvcml0aG0gdG8gInN1cHBvcnQKKwlsb3ctb2NjdXJyZW5jZSBjb21tb24gZWxlbWVudHMiLgorLS0KKysKKworZGlmZi53c0Vycm9ySGlnaGxpZ2h0OjoKKwlIaWdobGlnaHQgd2hpdGVzcGFjZSBlcnJvcnMgaW4gdGhlIGBjb250ZXh0YCwgYG9sZGAgb3IgYG5ld2AKKwlsaW5lcyBvZiB0aGUgZGlmZi4gIE11bHRpcGxlIHZhbHVlcyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hLAorCWBub25lYCByZXNldHMgcHJldmlvdXMgdmFsdWVzLCBgZGVmYXVsdGAgcmVzZXQgdGhlIGxpc3QgdG8KKwlgbmV3YCBhbmQgYGFsbGAgaXMgYSBzaG9ydGhhbmQgZm9yIGBvbGQsbmV3LGNvbnRleHRgLiAgVGhlCisJd2hpdGVzcGFjZSBlcnJvcnMgYXJlIGNvbG9yZWQgd2l0aCBgY29sb3IuZGlmZi53aGl0ZXNwYWNlYC4KKwlUaGUgY29tbWFuZCBsaW5lIG9wdGlvbiBgLS13cy1lcnJvci1oaWdobGlnaHQ9PGtpbmQ+YAorCW92ZXJyaWRlcyB0aGlzIHNldHRpbmcuCisKK2RpZmYuY29sb3JNb3ZlZDo6CisJSWYgc2V0IHRvIGVpdGhlciBhIHZhbGlkIGA8bW9kZT5gIG9yIGEgdHJ1ZSB2YWx1ZSwgbW92ZWQgbGluZXMKKwlpbiBhIGRpZmYgYXJlIGNvbG9yZWQgZGlmZmVyZW50bHksIGZvciBkZXRhaWxzIG9mIHZhbGlkIG1vZGVzCisJc2VlICctLWNvbG9yLW1vdmVkJyBpbiBsaW5rZ2l0OmdpdC1kaWZmWzFdLiBJZiBzaW1wbHkgc2V0IHRvCisJdHJ1ZSB0aGUgZGVmYXVsdCBjb2xvciBtb2RlIHdpbGwgYmUgdXNlZC4gV2hlbiBzZXQgdG8gZmFsc2UsCisJbW92ZWQgbGluZXMgYXJlIG5vdCBjb2xvcmVkLgorCitkaWZmLmNvbG9yTW92ZWRXUzo6CisJV2hlbiBtb3ZlZCBsaW5lcyBhcmUgY29sb3JlZCB1c2luZyBlLmcuIHRoZSBgZGlmZi5jb2xvck1vdmVkYCBzZXR0aW5nLAorCXRoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZSBgPG1vZGU+YCBob3cgc3BhY2VzIGFyZSB0cmVhdGVkCisJZm9yIGRldGFpbHMgb2YgdmFsaWQgbW9kZXMgc2VlICctLWNvbG9yLW1vdmVkLXdzJyBpbiBsaW5rZ2l0OmdpdC1kaWZmWzFdLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvZGlmZnRvb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZGlmZnRvb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NjI1OTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9kaWZmdG9vbC50eHQKQEAgLTAsMCArMSwxNCBAQAorZGlmZnRvb2wuPHRvb2w+LnBhdGg6OgorCU92ZXJyaWRlIHRoZSBwYXRoIGZvciB0aGUgZ2l2ZW4gdG9vbC4gIFRoaXMgaXMgdXNlZnVsIGluIGNhc2UKKwl5b3VyIHRvb2wgaXMgbm90IGluIHRoZSBQQVRILgorCitkaWZmdG9vbC48dG9vbD4uY21kOjoKKwlTcGVjaWZ5IHRoZSBjb21tYW5kIHRvIGludm9rZSB0aGUgc3BlY2lmaWVkIGRpZmYgdG9vbC4KKwlUaGUgc3BlY2lmaWVkIGNvbW1hbmQgaXMgZXZhbHVhdGVkIGluIHNoZWxsIHdpdGggdGhlIGZvbGxvd2luZworCXZhcmlhYmxlcyBhdmFpbGFibGU6ICAnTE9DQUwnIGlzIHNldCB0byB0aGUgbmFtZSBvZiB0aGUgdGVtcG9yYXJ5CisJZmlsZSBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgZGlmZiBwcmUtaW1hZ2UgYW5kICdSRU1PVEUnCisJaXMgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSBjb250YWluaW5nIHRoZSBjb250ZW50cworCW9mIHRoZSBkaWZmIHBvc3QtaW1hZ2UuCisKK2RpZmZ0b29sLnByb21wdDo6CisJUHJvbXB0IGJlZm9yZSBlYWNoIGludm9jYXRpb24gb2YgdGhlIGRpZmYgdG9vbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2Zhc3RpbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZmFzdGltcG9ydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExNjZlMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2Zhc3RpbXBvcnQudHh0CkBAIC0wLDAgKzEsOCBAQAorZmFzdGltcG9ydC51bnBhY2tMaW1pdDo6CisJSWYgdGhlIG51bWJlciBvZiBvYmplY3RzIGltcG9ydGVkIGJ5IGxpbmtnaXQ6Z2l0LWZhc3QtaW1wb3J0WzFdCisJaXMgYmVsb3cgdGhpcyBsaW1pdCwgdGhlbiB0aGUgb2JqZWN0cyB3aWxsIGJlIHVucGFja2VkIGludG8KKwlsb29zZSBvYmplY3QgZmlsZXMuICBIb3dldmVyIGlmIHRoZSBudW1iZXIgb2YgaW1wb3J0ZWQgb2JqZWN0cworCWVxdWFscyBvciBleGNlZWRzIHRoaXMgbGltaXQgdGhlbiB0aGUgcGFjayB3aWxsIGJlIHN0b3JlZCBhcyBhCisJcGFjay4gIFN0b3JpbmcgdGhlIHBhY2sgZnJvbSBhIGZhc3QtaW1wb3J0IGNhbiBtYWtlIHRoZSBpbXBvcnQKKwlvcGVyYXRpb24gY29tcGxldGUgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIHNsb3cgZmlsZXN5c3RlbXMuICBJZgorCW5vdCBzZXQsIHRoZSB2YWx1ZSBvZiBgdHJhbnNmZXIudW5wYWNrTGltaXRgIGlzIHVzZWQgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2ZlYXR1cmUudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZmVhdHVyZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzYTVjMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2ZlYXR1cmUudHh0CkBAIC0wLDAgKzEsMzQgQEAKK2ZlYXR1cmUuKjo6CisJVGhlIGNvbmZpZyBzZXR0aW5ncyB0aGF0IHN0YXJ0IHdpdGggYGZlYXR1cmUuYCBtb2RpZnkgdGhlIGRlZmF1bHRzIG9mCisJYSBncm91cCBvZiBvdGhlciBjb25maWcgc2V0dGluZ3MuIFRoZXNlIGdyb3VwcyBhcmUgY3JlYXRlZCBieSB0aGUgR2l0CisJZGV2ZWxvcGVyIGNvbW11bml0eSBhcyByZWNvbW1lbmRlZCBkZWZhdWx0cyBhbmQgYXJlIHN1YmplY3QgdG8gY2hhbmdlLgorCUluIHBhcnRpY3VsYXIsIG5ldyBjb25maWcgb3B0aW9ucyBtYXkgYmUgYWRkZWQgd2l0aCBkaWZmZXJlbnQgZGVmYXVsdHMuCisKK2ZlYXR1cmUuZXhwZXJpbWVudGFsOjoKKwlFbmFibGUgY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgbmV3IHRvIEdpdCwgYW5kIGFyZSBiZWluZyBjb25zaWRlcmVkIGZvcgorCWZ1dHVyZSBkZWZhdWx0cy4gQ29uZmlnIHNldHRpbmdzIGluY2x1ZGVkIGhlcmUgbWF5IGJlIGFkZGVkIG9yIHJlbW92ZWQKKwl3aXRoIGVhY2ggcmVsZWFzZSwgaW5jbHVkaW5nIG1pbm9yIHZlcnNpb24gdXBkYXRlcy4gVGhlc2Ugc2V0dGluZ3MgbWF5CisJaGF2ZSB1bmludGVuZGVkIGludGVyYWN0aW9ucyBzaW5jZSB0aGV5IGFyZSBzbyBuZXcuIFBsZWFzZSBlbmFibGUgdGhpcworCXNldHRpbmcgaWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHByb3ZpZGluZyBmZWVkYmFjayBvbiBleHBlcmltZW50YWwKKwlmZWF0dXJlcy4gVGhlIG5ldyBkZWZhdWx0IHZhbHVlcyBhcmU6CisrCisqIGBmZXRjaC5uZWdvdGlhdGlvbkFsZ29yaXRobT1za2lwcGluZ2AgbWF5IGltcHJvdmUgZmV0Y2ggbmVnb3RpYXRpb24gdGltZXMgYnkKK3NraXBwaW5nIG1vcmUgY29tbWl0cyBhdCBhIHRpbWUsIHJlZHVjaW5nIHRoZSBudW1iZXIgb2Ygcm91bmQgdHJpcHMuCisrCisqIGBmZXRjaC53cml0ZUNvbW1pdEdyYXBoPXRydWVgIHdyaXRlcyBhIGNvbW1pdC1ncmFwaCBhZnRlciBldmVyeSBgZ2l0IGZldGNoYAorY29tbWFuZCB0aGF0IGRvd25sb2FkcyBhIHBhY2stZmlsZSBmcm9tIGEgcmVtb3RlLiBVc2luZyB0aGUgYC0tc3BsaXRgIG9wdGlvbiwKK21vc3QgZXhlY3V0aW9ucyB3aWxsIGNyZWF0ZSBhIHZlcnkgc21hbGwgY29tbWl0LWdyYXBoIGZpbGUgb24gdG9wIG9mIHRoZQorZXhpc3RpbmcgY29tbWl0LWdyYXBoIGZpbGUocykuIE9jY2FzaW9uYWxseSwgdGhlc2UgZmlsZXMgd2lsbCBtZXJnZSBhbmQgdGhlCit3cml0ZSBtYXkgdGFrZSBsb25nZXIuIEhhdmluZyBhbiB1cGRhdGVkIGNvbW1pdC1ncmFwaCBmaWxlIGhlbHBzIHBlcmZvcm1hbmNlCitvZiBtYW55IEdpdCBjb21tYW5kcywgaW5jbHVkaW5nIGBnaXQgbWVyZ2UtYmFzZWAsIGBnaXQgcHVzaCAtZmAsIGFuZAorYGdpdCBsb2cgLS1ncmFwaGAuCisKK2ZlYXR1cmUubWFueUZpbGVzOjoKKwlFbmFibGUgY29uZmlnIG9wdGlvbnMgdGhhdCBvcHRpbWl6ZSBmb3IgcmVwb3Mgd2l0aCBtYW55IGZpbGVzIGluIHRoZQorCXdvcmtpbmcgZGlyZWN0b3J5LiBXaXRoIG1hbnkgZmlsZXMsIGNvbW1hbmRzIHN1Y2ggYXMgYGdpdCBzdGF0dXNgIGFuZAorCWBnaXQgY2hlY2tvdXRgIG1heSBiZSBzbG93IGFuZCB0aGVzZSBuZXcgZGVmYXVsdHMgaW1wcm92ZSBwZXJmb3JtYW5jZToKKysKKyogYGluZGV4LnZlcnNpb249NGAgZW5hYmxlcyBwYXRoLXByZWZpeCBjb21wcmVzc2lvbiBpbiB0aGUgaW5kZXguCisrCisqIGBjb3JlLnVudHJhY2tlZENhY2hlPXRydWVgIGVuYWJsZXMgdGhlIHVudHJhY2tlZCBjYWNoZS4gVGhpcyBzZXR0aW5nIGFzc3VtZXMKK3RoYXQgbXRpbWUgaXMgd29ya2luZyBvbiB5b3VyIG1hY2hpbmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mZXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mZXRjaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhOWIxNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2ZldGNoLnR4dApAQCAtMCwwICsxLDk0IEBACitmZXRjaC5yZWN1cnNlU3VibW9kdWxlczo6CisJVGhpcyBvcHRpb24gY29udHJvbHMgd2hldGhlciBgZ2l0IGZldGNoYCAoYW5kIHRoZSB1bmRlcmx5aW5nIGZldGNoCisJaW4gYGdpdCBwdWxsYCkgd2lsbCByZWN1cnNpdmVseSBmZXRjaCBpbnRvIHBvcHVsYXRlZCBzdWJtb2R1bGVzLgorCVRoaXMgb3B0aW9uIGNhbiBiZSBzZXQgZWl0aGVyIHRvIGEgYm9vbGVhbiB2YWx1ZSBvciB0byAnb24tZGVtYW5kJy4KKwlTZXR0aW5nIGl0IHRvIGEgYm9vbGVhbiBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiBmZXRjaCBhbmQgcHVsbCB0bworCXJlY3Vyc2UgdW5jb25kaXRpb25hbGx5IGludG8gc3VibW9kdWxlcyB3aGVuIHNldCB0byB0cnVlIG9yIHRvIG5vdAorCXJlY3Vyc2UgYXQgYWxsIHdoZW4gc2V0IHRvIGZhbHNlLiBXaGVuIHNldCB0byAnb24tZGVtYW5kJywgZmV0Y2ggYW5kCisJcHVsbCB3aWxsIG9ubHkgcmVjdXJzZSBpbnRvIGEgcG9wdWxhdGVkIHN1Ym1vZHVsZSB3aGVuIGl0cworCXN1cGVycHJvamVjdCByZXRyaWV2ZXMgYSBjb21taXQgdGhhdCB1cGRhdGVzIHRoZSBzdWJtb2R1bGUncworCXJlZmVyZW5jZS4KKwlEZWZhdWx0cyB0byAnb24tZGVtYW5kJywgb3IgdG8gdGhlIHZhbHVlIG9mICdzdWJtb2R1bGUucmVjdXJzZScgaWYgc2V0LgorCitmZXRjaC5mc2NrT2JqZWN0czo6CisJSWYgaXQgaXMgc2V0IHRvIHRydWUsIGdpdC1mZXRjaC1wYWNrIHdpbGwgY2hlY2sgYWxsIGZldGNoZWQKKwlvYmplY3RzLiBTZWUgYHRyYW5zZmVyLmZzY2tPYmplY3RzYCBmb3Igd2hhdCdzCisJY2hlY2tlZC4gRGVmYXVsdHMgdG8gZmFsc2UuIElmIG5vdCBzZXQsIHRoZSB2YWx1ZSBvZgorCWB0cmFuc2Zlci5mc2NrT2JqZWN0c2AgaXMgdXNlZCBpbnN0ZWFkLgorCitmZXRjaC5mc2NrLjxtc2ctaWQ+OjoKKwlBY3RzIGxpa2UgYGZzY2suPG1zZy1pZD5gLCBidXQgaXMgdXNlZCBieQorCWxpbmtnaXQ6Z2l0LWZldGNoLXBhY2tbMV0gaW5zdGVhZCBvZiBsaW5rZ2l0OmdpdC1mc2NrWzFdLiBTZWUKKwl0aGUgYGZzY2suPG1zZy1pZD5gIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisKK2ZldGNoLmZzY2suc2tpcExpc3Q6OgorCUFjdHMgbGlrZSBgZnNjay5za2lwTGlzdGAsIGJ1dCBpcyB1c2VkIGJ5CisJbGlua2dpdDpnaXQtZmV0Y2gtcGFja1sxXSBpbnN0ZWFkIG9mIGxpbmtnaXQ6Z2l0LWZzY2tbMV0uIFNlZQorCXRoZSBgZnNjay5za2lwTGlzdGAgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworZmV0Y2gudW5wYWNrTGltaXQ6OgorCUlmIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBmZXRjaGVkIG92ZXIgdGhlIEdpdCBuYXRpdmUKKwl0cmFuc2ZlciBpcyBiZWxvdyB0aGlzCisJbGltaXQsIHRoZW4gdGhlIG9iamVjdHMgd2lsbCBiZSB1bnBhY2tlZCBpbnRvIGxvb3NlIG9iamVjdAorCWZpbGVzLiBIb3dldmVyIGlmIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgb2JqZWN0cyBlcXVhbHMgb3IKKwlleGNlZWRzIHRoaXMgbGltaXQgdGhlbiB0aGUgcmVjZWl2ZWQgcGFjayB3aWxsIGJlIHN0b3JlZCBhcworCWEgcGFjaywgYWZ0ZXIgYWRkaW5nIGFueSBtaXNzaW5nIGRlbHRhIGJhc2VzLiAgU3RvcmluZyB0aGUKKwlwYWNrIGZyb20gYSBwdXNoIGNhbiBtYWtlIHRoZSBwdXNoIG9wZXJhdGlvbiBjb21wbGV0ZSBmYXN0ZXIsCisJZXNwZWNpYWxseSBvbiBzbG93IGZpbGVzeXN0ZW1zLiAgSWYgbm90IHNldCwgdGhlIHZhbHVlIG9mCisJYHRyYW5zZmVyLnVucGFja0xpbWl0YCBpcyB1c2VkIGluc3RlYWQuCisKK2ZldGNoLnBydW5lOjoKKwlJZiB0cnVlLCBmZXRjaCB3aWxsIGF1dG9tYXRpY2FsbHkgYmVoYXZlIGFzIGlmIHRoZSBgLS1wcnVuZWAKKwlvcHRpb24gd2FzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuICBTZWUgYWxzbyBgcmVtb3RlLjxuYW1lPi5wcnVuZWAKKwlhbmQgdGhlIFBSVU5JTkcgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1mZXRjaFsxXS4KKworZmV0Y2gucHJ1bmVUYWdzOjoKKwlJZiB0cnVlLCBmZXRjaCB3aWxsIGF1dG9tYXRpY2FsbHkgYmVoYXZlIGFzIGlmIHRoZQorCWByZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKmAgcmVmc3BlYyB3YXMgcHJvdmlkZWQgd2hlbiBwcnVuaW5nLAorCWlmIG5vdCBzZXQgYWxyZWFkeS4gVGhpcyBhbGxvd3MgZm9yIHNldHRpbmcgYm90aCB0aGlzIG9wdGlvbgorCWFuZCBgZmV0Y2gucHJ1bmVgIHRvIG1haW50YWluIGEgMT0xIG1hcHBpbmcgdG8gdXBzdHJlYW0KKwlyZWZzLiBTZWUgYWxzbyBgcmVtb3RlLjxuYW1lPi5wcnVuZVRhZ3NgIGFuZCB0aGUgUFJVTklORworCXNlY3Rpb24gb2YgbGlua2dpdDpnaXQtZmV0Y2hbMV0uCisKK2ZldGNoLm91dHB1dDo6CisJQ29udHJvbCBob3cgcmVmIHVwZGF0ZSBzdGF0dXMgaXMgcHJpbnRlZC4gVmFsaWQgdmFsdWVzIGFyZQorCWBmdWxsYCBhbmQgYGNvbXBhY3RgLiBEZWZhdWx0IHZhbHVlIGlzIGBmdWxsYC4gU2VlIHNlY3Rpb24KKwlPVVRQVVQgaW4gbGlua2dpdDpnaXQtZmV0Y2hbMV0gZm9yIGRldGFpbC4KKworZmV0Y2gubmVnb3RpYXRpb25BbGdvcml0aG06OgorCUNvbnRyb2wgaG93IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21taXRzIGluIHRoZSBsb2NhbCByZXBvc2l0b3J5IGlzCisJc2VudCB3aGVuIG5lZ290aWF0aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgcGFja2ZpbGUgdG8gYmUgc2VudCBieSB0aGUKKwlzZXJ2ZXIuIFNldCB0byAic2tpcHBpbmciIHRvIHVzZSBhbiBhbGdvcml0aG0gdGhhdCBza2lwcyBjb21taXRzIGluIGFuCisJZWZmb3J0IHRvIGNvbnZlcmdlIGZhc3RlciwgYnV0IG1heSByZXN1bHQgaW4gYSBsYXJnZXItdGhhbi1uZWNlc3NhcnkKKwlwYWNrZmlsZTsgVGhlIGRlZmF1bHQgaXMgImRlZmF1bHQiIHdoaWNoIGluc3RydWN0cyBHaXQgdG8gdXNlIHRoZSBkZWZhdWx0IGFsZ29yaXRobQorCXRoYXQgbmV2ZXIgc2tpcHMgY29tbWl0cyAodW5sZXNzIHRoZSBzZXJ2ZXIgaGFzIGFja25vd2xlZGdlZCBpdCBvciBvbmUKKwlvZiBpdHMgZGVzY2VuZGFudHMpLiBJZiBgZmVhdHVyZS5leHBlcmltZW50YWxgIGlzIGVuYWJsZWQsIHRoZW4gdGhpcworCXNldHRpbmcgZGVmYXVsdHMgdG8gInNraXBwaW5nIi4KKwlVbmtub3duIHZhbHVlcyB3aWxsIGNhdXNlICdnaXQgZmV0Y2gnIHRvIGVycm9yIG91dC4KKysKK1NlZSBhbHNvIHRoZSBgLS1uZWdvdGlhdGlvbi10aXBgIG9wdGlvbiBmb3IgbGlua2dpdDpnaXQtZmV0Y2hbMV0uCisKK2ZldGNoLnNob3dGb3JjZWRVcGRhdGVzOjoKKwlTZXQgdG8gZmFsc2UgdG8gZW5hYmxlIGAtLW5vLXNob3ctZm9yY2VkLXVwZGF0ZXNgIGluCisJbGlua2dpdDpnaXQtZmV0Y2hbMV0gYW5kIGxpbmtnaXQ6Z2l0LXB1bGxbMV0gY29tbWFuZHMuCisJRGVmYXVsdHMgdG8gdHJ1ZS4KKworZmV0Y2gucGFyYWxsZWw6OgorCVNwZWNpZmllcyB0aGUgbWF4aW1hbCBudW1iZXIgb2YgZmV0Y2ggb3BlcmF0aW9ucyB0byBiZSBydW4gaW4gcGFyYWxsZWwKKwlhdCBhIHRpbWUgKHN1Ym1vZHVsZXMsIG9yIHJlbW90ZXMgd2hlbiB0aGUgYC0tbXVsdGlwbGVgIG9wdGlvbiBvZgorCWxpbmtnaXQ6Z2l0LWZldGNoWzFdIGlzIGluIGVmZmVjdCkuCisrCitBIHZhbHVlIG9mIDAgd2lsbCBnaXZlIHNvbWUgcmVhc29uYWJsZSBkZWZhdWx0LiBJZiB1bnNldCwgaXQgZGVmYXVsdHMgdG8gMS4KKysKK0ZvciBzdWJtb2R1bGVzLCB0aGlzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIGBzdWJtb2R1bGUuZmV0Y2hKb2JzYAorY29uZmlnIHNldHRpbmcuCisKK2ZldGNoLndyaXRlQ29tbWl0R3JhcGg6OgorCVNldCB0byB0cnVlIHRvIHdyaXRlIGEgY29tbWl0LWdyYXBoIGFmdGVyIGV2ZXJ5IGBnaXQgZmV0Y2hgIGNvbW1hbmQKKwl0aGF0IGRvd25sb2FkcyBhIHBhY2stZmlsZSBmcm9tIGEgcmVtb3RlLiBVc2luZyB0aGUgYC0tc3BsaXRgIG9wdGlvbiwKKwltb3N0IGV4ZWN1dGlvbnMgd2lsbCBjcmVhdGUgYSB2ZXJ5IHNtYWxsIGNvbW1pdC1ncmFwaCBmaWxlIG9uIHRvcCBvZgorCXRoZSBleGlzdGluZyBjb21taXQtZ3JhcGggZmlsZShzKS4gT2NjYXNpb25hbGx5LCB0aGVzZSBmaWxlcyB3aWxsCisJbWVyZ2UgYW5kIHRoZSB3cml0ZSBtYXkgdGFrZSBsb25nZXIuIEhhdmluZyBhbiB1cGRhdGVkIGNvbW1pdC1ncmFwaAorCWZpbGUgaGVscHMgcGVyZm9ybWFuY2Ugb2YgbWFueSBHaXQgY29tbWFuZHMsIGluY2x1ZGluZyBgZ2l0IG1lcmdlLWJhc2VgLAorCWBnaXQgcHVzaCAtZmAsIGFuZCBgZ2l0IGxvZyAtLWdyYXBoYC4gRGVmYXVsdHMgdG8gZmFsc2UsIHVubGVzcworCWBmZWF0dXJlLmV4cGVyaW1lbnRhbGAgaXMgdHJ1ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2ZpbHRlci50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9maWx0ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZGZlMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9maWx0ZXIudHh0CkBAIC0wLDAgKzEsOSBAQAorZmlsdGVyLjxkcml2ZXI+LmNsZWFuOjoKKwlUaGUgY29tbWFuZCB3aGljaCBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIGNvbnRlbnQgb2YgYSB3b3JrdHJlZQorCWZpbGUgdG8gYSBibG9iIHVwb24gY2hlY2tpbi4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yCisJZGV0YWlscy4KKworZmlsdGVyLjxkcml2ZXI+LnNtdWRnZTo6CisJVGhlIGNvbW1hbmQgd2hpY2ggaXMgdXNlZCB0byBjb252ZXJ0IHRoZSBjb250ZW50IG9mIGEgYmxvYgorCW9iamVjdCB0byBhIHdvcmt0cmVlIGZpbGUgdXBvbiBjaGVja291dC4gIFNlZQorCWxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2ZtdC1tZXJnZS1tc2cudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZm10LW1lcmdlLW1zZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzczY2ZhOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2ZtdC1tZXJnZS1tc2cudHh0CkBAIC0wLDAgKzEsMTAgQEAKK21lcmdlLmJyYW5jaGRlc2M6OgorCUluIGFkZGl0aW9uIHRvIGJyYW5jaCBuYW1lcywgcG9wdWxhdGUgdGhlIGxvZyBtZXNzYWdlIHdpdGgKKwl0aGUgYnJhbmNoIGRlc2NyaXB0aW9uIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZW0uICBEZWZhdWx0cworCXRvIGZhbHNlLgorCittZXJnZS5sb2c6OgorCUluIGFkZGl0aW9uIHRvIGJyYW5jaCBuYW1lcywgcG9wdWxhdGUgdGhlIGxvZyBtZXNzYWdlIHdpdGggYXQKKwltb3N0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG9uZS1saW5lIGRlc2NyaXB0aW9ucyBmcm9tIHRoZQorCWFjdHVhbCBjb21taXRzIHRoYXQgYXJlIGJlaW5nIG1lcmdlZC4gIERlZmF1bHRzIHRvIGZhbHNlLCBhbmQKKwl0cnVlIGlzIGEgc3lub255bSBmb3IgMjAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZm9ybWF0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjRlODA5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZm9ybWF0LnR4dApAQCAtMCwwICsxLDEzMCBAQAorZm9ybWF0LmF0dGFjaDo6CisJRW5hYmxlIG11bHRpcGFydC9taXhlZCBhdHRhY2htZW50cyBhcyB0aGUgZGVmYXVsdCBmb3IKKwknZm9ybWF0LXBhdGNoJy4gIFRoZSB2YWx1ZSBjYW4gYWxzbyBiZSBhIGRvdWJsZSBxdW90ZWQgc3RyaW5nCisJd2hpY2ggd2lsbCBlbmFibGUgYXR0YWNobWVudHMgYXMgdGhlIGRlZmF1bHQgYW5kIHNldCB0aGUKKwl2YWx1ZSBhcyB0aGUgYm91bmRhcnkuICBTZWUgdGhlIC0tYXR0YWNoIG9wdGlvbiBpbgorCWxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXS4KKworZm9ybWF0LmZyb206OgorCVByb3ZpZGVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYC0tZnJvbWAgb3B0aW9uIHRvIGZvcm1hdC1wYXRjaC4KKwlBY2NlcHRzIGEgYm9vbGVhbiB2YWx1ZSwgb3IgYSBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzLiAgSWYgZmFsc2UsCisJZm9ybWF0LXBhdGNoIGRlZmF1bHRzIHRvIGAtLW5vLWZyb21gLCB1c2luZyBjb21taXQgYXV0aG9ycyBkaXJlY3RseSBpbgorCXRoZSAiRnJvbToiIGZpZWxkIG9mIHBhdGNoIG1haWxzLiAgSWYgdHJ1ZSwgZm9ybWF0LXBhdGNoIGRlZmF1bHRzIHRvCisJYC0tZnJvbWAsIHVzaW5nIHlvdXIgY29tbWl0dGVyIGlkZW50aXR5IGluIHRoZSAiRnJvbToiIGZpZWxkIG9mIHBhdGNoCisJbWFpbHMgYW5kIGluY2x1ZGluZyBhICJGcm9tOiIgZmllbGQgaW4gdGhlIGJvZHkgb2YgdGhlIHBhdGNoIG1haWwgaWYKKwlkaWZmZXJlbnQuICBJZiBzZXQgdG8gYSBub24tYm9vbGVhbiB2YWx1ZSwgZm9ybWF0LXBhdGNoIHVzZXMgdGhhdAorCXZhbHVlIGluc3RlYWQgb2YgeW91ciBjb21taXR0ZXIgaWRlbnRpdHkuICBEZWZhdWx0cyB0byBmYWxzZS4KKworZm9ybWF0Lm51bWJlcmVkOjoKKwlBIGJvb2xlYW4gd2hpY2ggY2FuIGVuYWJsZSBvciBkaXNhYmxlIHNlcXVlbmNlIG51bWJlcnMgaW4gcGF0Y2gKKwlzdWJqZWN0cy4gIEl0IGRlZmF1bHRzIHRvICJhdXRvIiB3aGljaCBlbmFibGVzIGl0IG9ubHkgaWYgdGhlcmUKKwlpcyBtb3JlIHRoYW4gb25lIHBhdGNoLiAgSXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIGFsbAorCW1lc3NhZ2VzIGJ5IHNldHRpbmcgaXQgdG8gInRydWUiIG9yICJmYWxzZSIuICBTZWUgLS1udW1iZXJlZAorCW9wdGlvbiBpbiBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0uCisKK2Zvcm1hdC5oZWFkZXJzOjoKKwlBZGRpdGlvbmFsIGVtYWlsIGhlYWRlcnMgdG8gaW5jbHVkZSBpbiBhIHBhdGNoIHRvIGJlIHN1Ym1pdHRlZAorCWJ5IG1haWwuICBTZWUgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLgorCitmb3JtYXQudG86OgorZm9ybWF0LmNjOjoKKwlBZGRpdGlvbmFsIHJlY2lwaWVudHMgdG8gaW5jbHVkZSBpbiBhIHBhdGNoIHRvIGJlIHN1Ym1pdHRlZAorCWJ5IG1haWwuICBTZWUgdGhlIC0tdG8gYW5kIC0tY2Mgb3B0aW9ucyBpbgorCWxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXS4KKworZm9ybWF0LnN1YmplY3RQcmVmaXg6OgorCVRoZSBkZWZhdWx0IGZvciBmb3JtYXQtcGF0Y2ggaXMgdG8gb3V0cHV0IGZpbGVzIHdpdGggdGhlICdbUEFUQ0hdJworCXN1YmplY3QgcHJlZml4LiBVc2UgdGhpcyB2YXJpYWJsZSB0byBjaGFuZ2UgdGhhdCBwcmVmaXguCisKK2Zvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbjo6CisJVGhlIGRlZmF1bHQgbW9kZSBmb3IgZm9ybWF0LXBhdGNoIHRvIGRldGVybWluZSB3aGljaCBwYXJ0cyBvZgorCXRoZSBjb3ZlciBsZXR0ZXIgd2lsbCBiZSBwb3B1bGF0ZWQgdXNpbmcgdGhlIGJyYW5jaCdzCisJZGVzY3JpcHRpb24uIFNlZSB0aGUgYC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbmAgb3B0aW9uIGluCisJbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLgorCitmb3JtYXQuc2lnbmF0dXJlOjoKKwlUaGUgZGVmYXVsdCBmb3IgZm9ybWF0LXBhdGNoIGlzIHRvIG91dHB1dCBhIHNpZ25hdHVyZSBjb250YWluaW5nCisJdGhlIEdpdCB2ZXJzaW9uIG51bWJlci4gVXNlIHRoaXMgdmFyaWFibGUgdG8gY2hhbmdlIHRoYXQgZGVmYXVsdC4KKwlTZXQgdGhpcyB2YXJpYWJsZSB0byB0aGUgZW1wdHkgc3RyaW5nICgiIikgdG8gc3VwcHJlc3MKKwlzaWduYXR1cmUgZ2VuZXJhdGlvbi4KKworZm9ybWF0LnNpZ25hdHVyZUZpbGU6OgorCVdvcmtzIGp1c3QgbGlrZSBmb3JtYXQuc2lnbmF0dXJlIGV4Y2VwdCB0aGUgY29udGVudHMgb2YgdGhlCisJZmlsZSBzcGVjaWZpZWQgYnkgdGhpcyB2YXJpYWJsZSB3aWxsIGJlIHVzZWQgYXMgdGhlIHNpZ25hdHVyZS4KKworZm9ybWF0LnN1ZmZpeDo6CisJVGhlIGRlZmF1bHQgZm9yIGZvcm1hdC1wYXRjaCBpcyB0byBvdXRwdXQgZmlsZXMgd2l0aCB0aGUgc3VmZml4CisJYC5wYXRjaGAuIFVzZSB0aGlzIHZhcmlhYmxlIHRvIGNoYW5nZSB0aGF0IHN1ZmZpeCAobWFrZSBzdXJlIHRvCisJaW5jbHVkZSB0aGUgZG90IGlmIHlvdSB3YW50IGl0KS4KKworZm9ybWF0LmVuY29kZUVtYWlsSGVhZGVyczo6CisJRW5jb2RlIGVtYWlsIGhlYWRlcnMgdGhhdCBoYXZlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIHdpdGgKKwkiUS1lbmNvZGluZyIgKGRlc2NyaWJlZCBpbiBSRkMgMjA0NykgZm9yIGVtYWlsIHRyYW5zbWlzc2lvbi4KKwlEZWZhdWx0cyB0byB0cnVlLgorCitmb3JtYXQucHJldHR5OjoKKwlUaGUgZGVmYXVsdCBwcmV0dHkgZm9ybWF0IGZvciBsb2cvc2hvdy93aGF0Y2hhbmdlZCBjb21tYW5kLAorCVNlZSBsaW5rZ2l0OmdpdC1sb2dbMV0sIGxpbmtnaXQ6Z2l0LXNob3dbMV0sCisJbGlua2dpdDpnaXQtd2hhdGNoYW5nZWRbMV0uCisKK2Zvcm1hdC50aHJlYWQ6OgorCVRoZSBkZWZhdWx0IHRocmVhZGluZyBzdHlsZSBmb3IgJ2dpdCBmb3JtYXQtcGF0Y2gnLiAgQ2FuIGJlCisJYSBib29sZWFuIHZhbHVlLCBvciBgc2hhbGxvd2Agb3IgYGRlZXBgLiAgYHNoYWxsb3dgIHRocmVhZGluZworCW1ha2VzIGV2ZXJ5IG1haWwgYSByZXBseSB0byB0aGUgaGVhZCBvZiB0aGUgc2VyaWVzLAorCXdoZXJlIHRoZSBoZWFkIGlzIGNob3NlbiBmcm9tIHRoZSBjb3ZlciBsZXR0ZXIsIHRoZQorCWAtLWluLXJlcGx5LXRvYCwgYW5kIHRoZSBmaXJzdCBwYXRjaCBtYWlsLCBpbiB0aGlzIG9yZGVyLgorCWBkZWVwYCB0aHJlYWRpbmcgbWFrZXMgZXZlcnkgbWFpbCBhIHJlcGx5IHRvIHRoZSBwcmV2aW91cyBvbmUuCisJQSB0cnVlIGJvb2xlYW4gdmFsdWUgaXMgdGhlIHNhbWUgYXMgYHNoYWxsb3dgLCBhbmQgYSBmYWxzZQorCXZhbHVlIGRpc2FibGVzIHRocmVhZGluZy4KKworZm9ybWF0LnNpZ25PZmY6OgorCUEgYm9vbGVhbiB2YWx1ZSB3aGljaCBsZXRzIHlvdSBlbmFibGUgdGhlIGAtcy8tLXNpZ25vZmZgIG9wdGlvbiBvZgorCWZvcm1hdC1wYXRjaCBieSBkZWZhdWx0LiAqTm90ZToqIEFkZGluZyB0aGUgU2lnbmVkLW9mZi1ieTogbGluZSB0byBhCisJcGF0Y2ggc2hvdWxkIGJlIGEgY29uc2Npb3VzIGFjdCBhbmQgbWVhbnMgdGhhdCB5b3UgY2VydGlmeSB5b3UgaGF2ZQorCXRoZSByaWdodHMgdG8gc3VibWl0IHRoaXMgd29yayB1bmRlciB0aGUgc2FtZSBvcGVuIHNvdXJjZSBsaWNlbnNlLgorCVBsZWFzZSBzZWUgdGhlICdTdWJtaXR0aW5nUGF0Y2hlcycgZG9jdW1lbnQgZm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbi4KKworZm9ybWF0LmNvdmVyTGV0dGVyOjoKKwlBIGJvb2xlYW4gdGhhdCBjb250cm9scyB3aGV0aGVyIHRvIGdlbmVyYXRlIGEgY292ZXItbGV0dGVyIHdoZW4KKwlmb3JtYXQtcGF0Y2ggaXMgaW52b2tlZCwgYnV0IGluIGFkZGl0aW9uIGNhbiBiZSBzZXQgdG8gImF1dG8iLCB0bworCWdlbmVyYXRlIGEgY292ZXItbGV0dGVyIG9ubHkgd2hlbiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgcGF0Y2guCisJRGVmYXVsdCBpcyBmYWxzZS4KKworZm9ybWF0Lm91dHB1dERpcmVjdG9yeTo6CisJU2V0IGEgY3VzdG9tIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgcmVzdWx0aW5nIGZpbGVzIGluc3RlYWQgb2YgdGhlCisJY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gQWxsIGRpcmVjdG9yeSBjb21wb25lbnRzIHdpbGwgYmUgY3JlYXRlZC4KKworZm9ybWF0LnVzZUF1dG9CYXNlOjoKKwlBIGJvb2xlYW4gdmFsdWUgd2hpY2ggbGV0cyB5b3UgZW5hYmxlIHRoZSBgLS1iYXNlPWF1dG9gIG9wdGlvbiBvZgorCWZvcm1hdC1wYXRjaCBieSBkZWZhdWx0LgorCitmb3JtYXQubm90ZXM6OgorCVByb3ZpZGVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYC0tbm90ZXNgIG9wdGlvbiB0bworCWZvcm1hdC1wYXRjaC4gQWNjZXB0cyBhIGJvb2xlYW4gdmFsdWUsIG9yIGEgcmVmIHdoaWNoIHNwZWNpZmllcworCXdoZXJlIHRvIGdldCBub3Rlcy4gSWYgZmFsc2UsIGZvcm1hdC1wYXRjaCBkZWZhdWx0cyB0bworCWAtLW5vLW5vdGVzYC4gSWYgdHJ1ZSwgZm9ybWF0LXBhdGNoIGRlZmF1bHRzIHRvIGAtLW5vdGVzYC4gSWYKKwlzZXQgdG8gYSBub24tYm9vbGVhbiB2YWx1ZSwgZm9ybWF0LXBhdGNoIGRlZmF1bHRzIHRvCisJYC0tbm90ZXM9PHJlZj5gLCB3aGVyZSBgcmVmYCBpcyB0aGUgbm9uLWJvb2xlYW4gdmFsdWUuIERlZmF1bHRzCisJdG8gZmFsc2UuCisrCitJZiBvbmUgd2lzaGVzIHRvIHVzZSB0aGUgcmVmIGByZWYvbm90ZXMvdHJ1ZWAsIHBsZWFzZSB1c2UgdGhhdCBsaXRlcmFsCitpbnN0ZWFkLgorKworVGhpcyBjb25maWd1cmF0aW9uIGNhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgaW4gb3JkZXIgdG8gYWxsb3cKK211bHRpcGxlIG5vdGVzIHJlZnMgdG8gYmUgaW5jbHVkZWQuIEluIHRoYXQgY2FzZSwgaXQgd2lsbCBiZWhhdmUKK3NpbWlsYXJseSB0byBtdWx0aXBsZSBgLS1bbm8tXW5vdGVzWz1dYCBvcHRpb25zIHBhc3NlZCBpbi4gVGhhdCBpcywgYQordmFsdWUgb2YgYHRydWVgIHdpbGwgc2hvdyB0aGUgZGVmYXVsdCBub3RlcywgYSB2YWx1ZSBvZiBgPHJlZj5gIHdpbGwKK2Fsc28gc2hvdyBub3RlcyBmcm9tIHRoYXQgbm90ZXMgcmVmIGFuZCBhIHZhbHVlIG9mIGBmYWxzZWAgd2lsbCBuZWdhdGUKK3ByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIGFuZCBub3Qgc2hvdyBub3Rlcy4KKysKK0ZvciBleGFtcGxlLAorKworLS0tLS0tLS0tLS0tCitbZm9ybWF0XQorCW5vdGVzID0gdHJ1ZQorCW5vdGVzID0gZm9vCisJbm90ZXMgPSBmYWxzZQorCW5vdGVzID0gYmFyCistLS0tLS0tLS0tLS0KKysKK3dpbGwgb25seSBzaG93IG5vdGVzIGZyb20gYHJlZnMvbm90ZXMvYmFyYC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2ZzY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZnNjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUwZThjMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2ZzY2sudHh0CkBAIC0wLDAgKzEsNjcgQEAKK2ZzY2suPG1zZy1pZD46OgorCUR1cmluZyBmc2NrIGdpdCBtYXkgZmluZCBpc3N1ZXMgd2l0aCBsZWdhY3kgZGF0YSB3aGljaAorCXdvdWxkbid0IGJlIGdlbmVyYXRlZCBieSBjdXJyZW50IHZlcnNpb25zIG9mIGdpdCwgYW5kIHdoaWNoCisJd291bGRuJ3QgYmUgc2VudCBvdmVyIHRoZSB3aXJlIGlmIGB0cmFuc2Zlci5mc2NrT2JqZWN0c2Agd2FzCisJc2V0LiBUaGlzIGZlYXR1cmUgaXMgaW50ZW5kZWQgdG8gc3VwcG9ydCB3b3JraW5nIHdpdGggbGVnYWN5CisJcmVwb3NpdG9yaWVzIGNvbnRhaW5pbmcgc3VjaCBkYXRhLgorKworU2V0dGluZyBgZnNjay48bXNnLWlkPmAgd2lsbCBiZSBwaWNrZWQgdXAgYnkgbGlua2dpdDpnaXQtZnNja1sxXSwgYnV0Cit0byBhY2NlcHQgcHVzaGVzIG9mIHN1Y2ggZGF0YSBzZXQgYHJlY2VpdmUuZnNjay48bXNnLWlkPmAgaW5zdGVhZCwgb3IKK3RvIGNsb25lIG9yIGZldGNoIGl0IHNldCBgZmV0Y2guZnNjay48bXNnLWlkPmAuCisrCitUaGUgcmVzdCBvZiB0aGUgZG9jdW1lbnRhdGlvbiBkaXNjdXNzZXMgYGZzY2suKmAgZm9yIGJyZXZpdHksIGJ1dCB0aGUKK3NhbWUgYXBwbGllcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgYHJlY2VpdmUuZnNjay4qYCBhbmQKK2BmZXRjaC48bXNnLWlkPi4qYC4gdmFyaWFibGVzLgorKworVW5saWtlIHZhcmlhYmxlcyBsaWtlIGBjb2xvci51aWAgYW5kIGBjb3JlLmVkaXRvcmAgdGhlCitgcmVjZWl2ZS5mc2NrLjxtc2ctaWQ+YCBhbmQgYGZldGNoLmZzY2suPG1zZy1pZD5gIHZhcmlhYmxlcyB3aWxsIG5vdAorZmFsbCBiYWNrIG9uIHRoZSBgZnNjay48bXNnLWlkPmAgY29uZmlndXJhdGlvbiBpZiB0aGV5IGFyZW4ndCBzZXQuIFRvCit1bmlmb3JtbHkgY29uZmlndXJlIHRoZSBzYW1lIGZzY2sgc2V0dGluZ3MgaW4gZGlmZmVyZW50IGNpcmN1bXN0YW5jZXMKK2FsbCB0aHJlZSBvZiB0aGVtIHRoZXkgbXVzdCBhbGwgc2V0IHRvIHRoZSBzYW1lIHZhbHVlcy4KKysKK1doZW4gYGZzY2suPG1zZy1pZD5gIGlzIHNldCwgZXJyb3JzIGNhbiBiZSBzd2l0Y2hlZCB0byB3YXJuaW5ncyBhbmQKK3ZpY2UgdmVyc2EgYnkgY29uZmlndXJpbmcgdGhlIGBmc2NrLjxtc2ctaWQ+YCBzZXR0aW5nIHdoZXJlIHRoZQorYDxtc2ctaWQ+YCBpcyB0aGUgZnNjayBtZXNzYWdlIElEIGFuZCB0aGUgdmFsdWUgaXMgb25lIG9mIGBlcnJvcmAsCitgd2FybmAgb3IgYGlnbm9yZWAuIEZvciBjb252ZW5pZW5jZSwgZnNjayBwcmVmaXhlcyB0aGUgZXJyb3Ivd2FybmluZword2l0aCB0aGUgbWVzc2FnZSBJRCwgZS5nLiAibWlzc2luZ0VtYWlsOiBpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIKK2xpbmUgLSBtaXNzaW5nIGVtYWlsIiBtZWFucyB0aGF0IHNldHRpbmcgYGZzY2subWlzc2luZ0VtYWlsID0gaWdub3JlYAord2lsbCBoaWRlIHRoYXQgaXNzdWUuCisrCitJbiBnZW5lcmFsLCBpdCBpcyBiZXR0ZXIgdG8gZW51bWVyYXRlIGV4aXN0aW5nIG9iamVjdHMgd2l0aCBwcm9ibGVtcword2l0aCBgZnNjay5za2lwTGlzdGAsIGluc3RlYWQgb2YgbGlzdGluZyB0aGUga2luZCBvZiBicmVha2FnZXMgdGhlc2UKK3Byb2JsZW1hdGljIG9iamVjdHMgc2hhcmUgdG8gYmUgaWdub3JlZCwgYXMgZG9pbmcgdGhlIGxhdHRlciB3aWxsCithbGxvdyBuZXcgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGJyZWFrYWdlcyBnbyB1bm5vdGljZWQuCisrCitTZXR0aW5nIGFuIHVua25vd24gYGZzY2suPG1zZy1pZD5gIHZhbHVlIHdpbGwgY2F1c2UgZnNjayB0byBkaWUsIGJ1dAorZG9pbmcgdGhlIHNhbWUgZm9yIGByZWNlaXZlLmZzY2suPG1zZy1pZD5gIGFuZCBgZmV0Y2guZnNjay48bXNnLWlkPmAKK3dpbGwgb25seSBjYXVzZSBnaXQgdG8gd2Fybi4KKworZnNjay5za2lwTGlzdDo6CisJVGhlIHBhdGggdG8gYSBsaXN0IG9mIG9iamVjdCBuYW1lcyAoaS5lLiBvbmUgdW5hYmJyZXZpYXRlZCBTSEEtMSBwZXIKKwlsaW5lKSB0aGF0IGFyZSBrbm93biB0byBiZSBicm9rZW4gaW4gYSBub24tZmF0YWwgd2F5IGFuZCBzaG91bGQKKwliZSBpZ25vcmVkLiBPbiB2ZXJzaW9ucyBvZiBHaXQgMi4yMCBhbmQgbGF0ZXIgY29tbWVudHMgKCcjJyksIGVtcHR5CisJbGluZXMsIGFuZCBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyBpZ25vcmVkLiBFdmVyeXRoaW5nCisJYnV0IGEgU0hBLTEgcGVyIGxpbmUgd2lsbCBlcnJvciBvdXQgb24gb2xkZXIgdmVyc2lvbnMuCisrCitUaGlzIGZlYXR1cmUgaXMgdXNlZnVsIHdoZW4gYW4gZXN0YWJsaXNoZWQgcHJvamVjdCBzaG91bGQgYmUgYWNjZXB0ZWQKK2Rlc3BpdGUgZWFybHkgY29tbWl0cyBjb250YWluaW5nIGVycm9ycyB0aGF0IGNhbiBiZSBzYWZlbHkgaWdub3JlZAorc3VjaCBhcyBpbnZhbGlkIGNvbW1pdHRlciBlbWFpbCBhZGRyZXNzZXMuICBOb3RlOiBjb3JydXB0IG9iamVjdHMKK2Nhbm5vdCBiZSBza2lwcGVkIHdpdGggdGhpcyBzZXR0aW5nLgorKworTGlrZSBgZnNjay48bXNnLWlkPmAgdGhpcyB2YXJpYWJsZSBoYXMgY29ycmVzcG9uZGluZworYHJlY2VpdmUuZnNjay5za2lwTGlzdGAgYW5kIGBmZXRjaC5mc2NrLnNraXBMaXN0YCB2YXJpYW50cy4KKysKK1VubGlrZSB2YXJpYWJsZXMgbGlrZSBgY29sb3IudWlgIGFuZCBgY29yZS5lZGl0b3JgIHRoZQorYHJlY2VpdmUuZnNjay5za2lwTGlzdGAgYW5kIGBmZXRjaC5mc2NrLnNraXBMaXN0YCB2YXJpYWJsZXMgd2lsbCBub3QKK2ZhbGwgYmFjayBvbiB0aGUgYGZzY2suc2tpcExpc3RgIGNvbmZpZ3VyYXRpb24gaWYgdGhleSBhcmVuJ3Qgc2V0LiBUbwordW5pZm9ybWx5IGNvbmZpZ3VyZSB0aGUgc2FtZSBmc2NrIHNldHRpbmdzIGluIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzCithbGwgdGhyZWUgb2YgdGhlbSB0aGV5IG11c3QgYWxsIHNldCB0byB0aGUgc2FtZSB2YWx1ZXMuCisrCitPbGRlciB2ZXJzaW9ucyBvZiBHaXQgKGJlZm9yZSAyLjIwKSBkb2N1bWVudGVkIHRoYXQgdGhlIG9iamVjdCBuYW1lcworbGlzdCBzaG91bGQgYmUgc29ydGVkLiBUaGlzIHdhcyBuZXZlciBhIHJlcXVpcmVtZW50LCB0aGUgb2JqZWN0IG5hbWVzCitjb3VsZCBhcHBlYXIgaW4gYW55IG9yZGVyLCBidXQgd2hlbiByZWFkaW5nIHRoZSBsaXN0IHdlIHRyYWNrZWQgd2hldGhlcgordGhlIGxpc3Qgd2FzIHNvcnRlZCBmb3IgdGhlIHB1cnBvc2VzIG9mIGFuIGludGVybmFsIGJpbmFyeSBzZWFyY2gKK2ltcGxlbWVudGF0aW9uLCB3aGljaCBjb3VsZCBzYXZlIGl0c2VsZiBzb21lIHdvcmsgd2l0aCBhbiBhbHJlYWR5IHNvcnRlZAorbGlzdC4gVW5sZXNzIHlvdSBoYWQgYSBodW1vbmdvdXMgbGlzdCB0aGVyZSB3YXMgbm8gcmVhc29uIHRvIGdvIG91dCBvZgoreW91ciB3YXkgdG8gcHJlLXNvcnQgdGhlIGxpc3QuIEFmdGVyIEdpdCB2ZXJzaW9uIDIuMjAgYSBoYXNoIGltcGxlbWVudGF0aW9uCitpcyB1c2VkIGluc3RlYWQsIHNvIHRoZXJlJ3Mgbm93IG5vIHJlYXNvbiB0byBwcmUtc29ydCB0aGUgbGlzdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2djLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2djLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGVhMGE2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZ2MudHh0CkBAIC0wLDAgKzEsMTM2IEBACitnYy5hZ2dyZXNzaXZlRGVwdGg6OgorCVRoZSBkZXB0aCBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgZGVsdGEgY29tcHJlc3Npb24KKwlhbGdvcml0aG0gdXNlZCBieSAnZ2l0IGdjIC0tYWdncmVzc2l2ZScuICBUaGlzIGRlZmF1bHRzCisJdG8gNTAsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGZvciB0aGUgYC0tZGVwdGhgIG9wdGlvbiB3aGVuCisJYC0tYWdncmVzc2l2ZWAgaXNuJ3QgaW4gdXNlLgorKworU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYC0tZGVwdGhgIG9wdGlvbiBpbgorbGlua2dpdDpnaXQtcmVwYWNrWzFdIGZvciBtb3JlIGRldGFpbHMuCisKK2djLmFnZ3Jlc3NpdmVXaW5kb3c6OgorCVRoZSB3aW5kb3cgc2l6ZSBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgZGVsdGEgY29tcHJlc3Npb24KKwlhbGdvcml0aG0gdXNlZCBieSAnZ2l0IGdjIC0tYWdncmVzc2l2ZScuICBUaGlzIGRlZmF1bHRzCisJdG8gMjUwLCB3aGljaCBpcyBhIG11Y2ggbW9yZSBhZ2dyZXNzaXZlIHdpbmRvdyBzaXplIHRoYW4KKwl0aGUgZGVmYXVsdCBgLS13aW5kb3dgIG9mIDEwLgorKworU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYC0td2luZG93YCBvcHRpb24gaW4KK2xpbmtnaXQ6Z2l0LXJlcGFja1sxXSBmb3IgbW9yZSBkZXRhaWxzLgorCitnYy5hdXRvOjoKKwlXaGVuIHRoZXJlIGFyZSBhcHByb3hpbWF0ZWx5IG1vcmUgdGhhbiB0aGlzIG1hbnkgbG9vc2UKKwlvYmplY3RzIGluIHRoZSByZXBvc2l0b3J5LCBgZ2l0IGdjIC0tYXV0b2Agd2lsbCBwYWNrIHRoZW0uCisJU29tZSBQb3JjZWxhaW4gY29tbWFuZHMgdXNlIHRoaXMgY29tbWFuZCB0byBwZXJmb3JtIGEKKwlsaWdodC13ZWlnaHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGZyb20gdGltZSB0byB0aW1lLiAgVGhlCisJZGVmYXVsdCB2YWx1ZSBpcyA2NzAwLgorKworU2V0dGluZyB0aGlzIHRvIDAgZGlzYWJsZXMgbm90IG9ubHkgYXV0b21hdGljIHBhY2tpbmcgYmFzZWQgb24gdGhlCitudW1iZXIgb2YgbG9vc2Ugb2JqZWN0cywgYnV0IGFueSBvdGhlciBoZXVyaXN0aWMgYGdpdCBnYyAtLWF1dG9gIHdpbGwKK290aGVyd2lzZSB1c2UgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJ3Mgd29yayB0byBkbywgc3VjaCBhcworYGdjLmF1dG9QYWNrTGltaXRgLgorCitnYy5hdXRvUGFja0xpbWl0OjoKKwlXaGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gdGhpcyBtYW55IHBhY2tzIHRoYXQgYXJlIG5vdAorCW1hcmtlZCB3aXRoIGAqLmtlZXBgIGZpbGUgaW4gdGhlIHJlcG9zaXRvcnksIGBnaXQgZ2MKKwktLWF1dG9gIGNvbnNvbGlkYXRlcyB0aGVtIGludG8gb25lIGxhcmdlciBwYWNrLiAgVGhlCisJZGVmYXVsdCB2YWx1ZSBpcyA1MC4gIFNldHRpbmcgdGhpcyB0byAwIGRpc2FibGVzIGl0LgorCVNldHRpbmcgYGdjLmF1dG9gIHRvIDAgd2lsbCBhbHNvIGRpc2FibGUgdGhpcy4KKysKK1NlZSB0aGUgYGdjLmJpZ1BhY2tUaHJlc2hvbGRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYmVsb3cuIFdoZW4gaW4KK3VzZSwgaXQnbGwgYWZmZWN0IGhvdyB0aGUgYXV0byBwYWNrIGxpbWl0IHdvcmtzLgorCitnYy5hdXRvRGV0YWNoOjoKKwlNYWtlIGBnaXQgZ2MgLS1hdXRvYCByZXR1cm4gaW1tZWRpYXRlbHkgYW5kIHJ1biBpbiBiYWNrZ3JvdW5kCisJaWYgdGhlIHN5c3RlbSBzdXBwb3J0cyBpdC4gRGVmYXVsdCBpcyB0cnVlLgorCitnYy5iaWdQYWNrVGhyZXNob2xkOjoKKwlJZiBub24temVybywgYWxsIHBhY2tzIGxhcmdlciB0aGFuIHRoaXMgbGltaXQgYXJlIGtlcHQgd2hlbgorCWBnaXQgZ2NgIGlzIHJ1bi4gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gYC0ta2VlcC1iYXNlLXBhY2tgCisJZXhjZXB0IHRoYXQgYWxsIHBhY2tzIHRoYXQgbWVldCB0aGUgdGhyZXNob2xkIGFyZSBrZXB0LCBub3QKKwlqdXN0IHRoZSBiYXNlIHBhY2suIERlZmF1bHRzIHRvIHplcm8uIENvbW1vbiB1bml0IHN1ZmZpeGVzIG9mCisJJ2snLCAnbScsIG9yICdnJyBhcmUgc3VwcG9ydGVkLgorKworTm90ZSB0aGF0IGlmIHRoZSBudW1iZXIgb2Yga2VwdCBwYWNrcyBpcyBtb3JlIHRoYW4gZ2MuYXV0b1BhY2tMaW1pdCwKK3RoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBpZ25vcmVkLCBhbGwgcGFja3MgZXhjZXB0IHRoZSBiYXNlIHBhY2sKK3dpbGwgYmUgcmVwYWNrZWQuIEFmdGVyIHRoaXMgdGhlIG51bWJlciBvZiBwYWNrcyBzaG91bGQgZ28gYmVsb3cKK2djLmF1dG9QYWNrTGltaXQgYW5kIGdjLmJpZ1BhY2tUaHJlc2hvbGQgc2hvdWxkIGJlIHJlc3BlY3RlZCBhZ2Fpbi4KKysKK0lmIHRoZSBhbW91bnQgb2YgbWVtb3J5IGVzdGltYXRlZCBmb3IgYGdpdCByZXBhY2tgIHRvIHJ1biBzbW9vdGhseSBpcworbm90IGF2YWlsYWJsZSBhbmQgYGdjLmJpZ1BhY2tUaHJlc2hvbGRgIGlzIG5vdCBzZXQsIHRoZSBsYXJnZXN0IHBhY2sKK3dpbGwgYWxzbyBiZSBleGNsdWRlZCAodGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBydW5uaW5nIGBnaXQgZ2NgIHdpdGgKK2AtLWtlZXAtYmFzZS1wYWNrYCkuCisKK2djLndyaXRlQ29tbWl0R3JhcGg6OgorCUlmIHRydWUsIHRoZW4gZ2Mgd2lsbCByZXdyaXRlIHRoZSBjb21taXQtZ3JhcGggZmlsZSB3aGVuCisJbGlua2dpdDpnaXQtZ2NbMV0gaXMgcnVuLiBXaGVuIHVzaW5nIGBnaXQgZ2MgLS1hdXRvYAorCXRoZSBjb21taXQtZ3JhcGggd2lsbCBiZSB1cGRhdGVkIGlmIGhvdXNla2VlcGluZyBpcworCXJlcXVpcmVkLiBEZWZhdWx0IGlzIHRydWUuIFNlZSBsaW5rZ2l0OmdpdC1jb21taXQtZ3JhcGhbMV0KKwlmb3IgZGV0YWlscy4KKworZ2MubG9nRXhwaXJ5OjoKKwlJZiB0aGUgZmlsZSBnYy5sb2cgZXhpc3RzLCB0aGVuIGBnaXQgZ2MgLS1hdXRvYCB3aWxsIHByaW50CisJaXRzIGNvbnRlbnQgYW5kIGV4aXQgd2l0aCBzdGF0dXMgemVybyBpbnN0ZWFkIG9mIHJ1bm5pbmcKKwl1bmxlc3MgdGhhdCBmaWxlIGlzIG1vcmUgdGhhbiAnZ2MubG9nRXhwaXJ5JyBvbGQuICBEZWZhdWx0IGlzCisJIjEuZGF5Ii4gIFNlZSBgZ2MucHJ1bmVFeHBpcmVgIGZvciBtb3JlIHdheXMgdG8gc3BlY2lmeSBpdHMKKwl2YWx1ZS4KKworZ2MucGFja1JlZnM6OgorCVJ1bm5pbmcgYGdpdCBwYWNrLXJlZnNgIGluIGEgcmVwb3NpdG9yeSByZW5kZXJzIGl0CisJdW5jbG9uYWJsZSBieSBHaXQgdmVyc2lvbnMgcHJpb3IgdG8gMS41LjEuMiBvdmVyIGR1bWIKKwl0cmFuc3BvcnRzIHN1Y2ggYXMgSFRUUC4gIFRoaXMgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGV0aGVyCisJJ2dpdCBnYycgcnVucyBgZ2l0IHBhY2stcmVmc2AuIFRoaXMgY2FuIGJlIHNldCB0byBgbm90YmFyZWAKKwl0byBlbmFibGUgaXQgd2l0aGluIGFsbCBub24tYmFyZSByZXBvcyBvciBpdCBjYW4gYmUgc2V0IHRvIGEKKwlib29sZWFuIHZhbHVlLiAgVGhlIGRlZmF1bHQgaXMgYHRydWVgLgorCitnYy5wcnVuZUV4cGlyZTo6CisJV2hlbiAnZ2l0IGdjJyBpcyBydW4sIGl0IHdpbGwgY2FsbCAncHJ1bmUgLS1leHBpcmUgMi53ZWVrcy5hZ28nLgorCU92ZXJyaWRlIHRoZSBncmFjZSBwZXJpb2Qgd2l0aCB0aGlzIGNvbmZpZyB2YXJpYWJsZS4gIFRoZSB2YWx1ZQorCSJub3ciIG1heSBiZSB1c2VkIHRvIGRpc2FibGUgdGhpcyBncmFjZSBwZXJpb2QgYW5kIGFsd2F5cyBwcnVuZQorCXVucmVhY2hhYmxlIG9iamVjdHMgaW1tZWRpYXRlbHksIG9yICJuZXZlciIgbWF5IGJlIHVzZWQgdG8KKwlzdXBwcmVzcyBwcnVuaW5nLiAgVGhpcyBmZWF0dXJlIGhlbHBzIHByZXZlbnQgY29ycnVwdGlvbiB3aGVuCisJJ2dpdCBnYycgcnVucyBjb25jdXJyZW50bHkgd2l0aCBhbm90aGVyIHByb2Nlc3Mgd3JpdGluZyB0byB0aGUKKwlyZXBvc2l0b3J5OyBzZWUgdGhlICJOT1RFUyIgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1nY1sxXS4KKworZ2Mud29ya3RyZWVQcnVuZUV4cGlyZTo6CisJV2hlbiAnZ2l0IGdjJyBpcyBydW4sIGl0IGNhbGxzCisJJ2dpdCB3b3JrdHJlZSBwcnVuZSAtLWV4cGlyZSAzLm1vbnRocy5hZ28nLgorCVRoaXMgY29uZmlnIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHNldCBhIGRpZmZlcmVudCBncmFjZQorCXBlcmlvZC4gVGhlIHZhbHVlICJub3ciIG1heSBiZSB1c2VkIHRvIGRpc2FibGUgdGhlIGdyYWNlCisJcGVyaW9kIGFuZCBwcnVuZSBgJEdJVF9ESVIvd29ya3RyZWVzYCBpbW1lZGlhdGVseSwgb3IgIm5ldmVyIgorCW1heSBiZSB1c2VkIHRvIHN1cHByZXNzIHBydW5pbmcuCisKK2djLnJlZmxvZ0V4cGlyZTo6CitnYy48cGF0dGVybj4ucmVmbG9nRXhwaXJlOjoKKwknZ2l0IHJlZmxvZyBleHBpcmUnIHJlbW92ZXMgcmVmbG9nIGVudHJpZXMgb2xkZXIgdGhhbgorCXRoaXMgdGltZTsgZGVmYXVsdHMgdG8gOTAgZGF5cy4gVGhlIHZhbHVlICJub3ciIGV4cGlyZXMgYWxsCisJZW50cmllcyBpbW1lZGlhdGVseSwgYW5kICJuZXZlciIgc3VwcHJlc3NlcyBleHBpcmF0aW9uCisJYWx0b2dldGhlci4gV2l0aCAiPHBhdHRlcm4+IiAoZS5nLgorCSJyZWZzL3N0YXNoIikgaW4gdGhlIG1pZGRsZSB0aGUgc2V0dGluZyBhcHBsaWVzIG9ubHkgdG8KKwl0aGUgcmVmcyB0aGF0IG1hdGNoIHRoZSA8cGF0dGVybj4uCisKK2djLnJlZmxvZ0V4cGlyZVVucmVhY2hhYmxlOjoKK2djLjxwYXR0ZXJuPi5yZWZsb2dFeHBpcmVVbnJlYWNoYWJsZTo6CisJJ2dpdCByZWZsb2cgZXhwaXJlJyByZW1vdmVzIHJlZmxvZyBlbnRyaWVzIG9sZGVyIHRoYW4KKwl0aGlzIHRpbWUgYW5kIGFyZSBub3QgcmVhY2hhYmxlIGZyb20gdGhlIGN1cnJlbnQgdGlwOworCWRlZmF1bHRzIHRvIDMwIGRheXMuIFRoZSB2YWx1ZSAibm93IiBleHBpcmVzIGFsbCBlbnRyaWVzCisJaW1tZWRpYXRlbHksIGFuZCAibmV2ZXIiIHN1cHByZXNzZXMgZXhwaXJhdGlvbiBhbHRvZ2V0aGVyLgorCVdpdGggIjxwYXR0ZXJuPiIgKGUuZy4gInJlZnMvc3Rhc2giKQorCWluIHRoZSBtaWRkbGUsIHRoZSBzZXR0aW5nIGFwcGxpZXMgb25seSB0byB0aGUgcmVmcyB0aGF0CisJbWF0Y2ggdGhlIDxwYXR0ZXJuPi4KKysKK1RoZXNlIHR5cGVzIG9mIGVudHJpZXMgYXJlIGdlbmVyYWxseSBjcmVhdGVkIGFzIGEgcmVzdWx0IG9mIHVzaW5nIGBnaXQKK2NvbW1pdCAtLWFtZW5kYCBvciBgZ2l0IHJlYmFzZWAgYW5kIGFyZSB0aGUgY29tbWl0cyBwcmlvciB0byB0aGUgYW1lbmQKK29yIHJlYmFzZSBvY2N1cnJpbmcuICBTaW5jZSB0aGVzZSBjaGFuZ2VzIGFyZSBub3QgcGFydCBvZiB0aGUgY3VycmVudAorcHJvamVjdCBtb3N0IHVzZXJzIHdpbGwgd2FudCB0byBleHBpcmUgdGhlbSBzb29uZXIsIHdoaWNoIGlzIHdoeSB0aGUKK2RlZmF1bHQgaXMgbW9yZSBhZ2dyZXNzaXZlIHRoYW4gYGdjLnJlZmxvZ0V4cGlyZWAuCisKK2djLnJlcmVyZVJlc29sdmVkOjoKKwlSZWNvcmRzIG9mIGNvbmZsaWN0ZWQgbWVyZ2UgeW91IHJlc29sdmVkIGVhcmxpZXIgYXJlCisJa2VwdCBmb3IgdGhpcyBtYW55IGRheXMgd2hlbiAnZ2l0IHJlcmVyZSBnYycgaXMgcnVuLgorCVlvdSBjYW4gYWxzbyB1c2UgbW9yZSBodW1hbi1yZWFkYWJsZSAiMS5tb250aC5hZ28iLCBldGMuCisJVGhlIGRlZmF1bHQgaXMgNjAgZGF5cy4gIFNlZSBsaW5rZ2l0OmdpdC1yZXJlcmVbMV0uCisKK2djLnJlcmVyZVVucmVzb2x2ZWQ6OgorCVJlY29yZHMgb2YgY29uZmxpY3RlZCBtZXJnZSB5b3UgaGF2ZSBub3QgcmVzb2x2ZWQgYXJlCisJa2VwdCBmb3IgdGhpcyBtYW55IGRheXMgd2hlbiAnZ2l0IHJlcmVyZSBnYycgaXMgcnVuLgorCVlvdSBjYW4gYWxzbyB1c2UgbW9yZSBodW1hbi1yZWFkYWJsZSAiMS5tb250aC5hZ28iLCBldGMuCisJVGhlIGRlZmF1bHQgaXMgMTUgZGF5cy4gIFNlZSBsaW5rZ2l0OmdpdC1yZXJlcmVbMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9naXRjdnMudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZ2l0Y3ZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmRhNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZ2l0Y3ZzLnR4dApAQCAtMCwwICsxLDY3IEBACitnaXRjdnMuY29tbWl0TXNnQW5ub3RhdGlvbjo6CisJQXBwZW5kIHRoaXMgc3RyaW5nIHRvIGVhY2ggY29tbWl0IG1lc3NhZ2UuIFNldCB0byBlbXB0eSBzdHJpbmcKKwl0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS4gRGVmYXVsdHMgdG8gInZpYSBnaXQtQ1ZTIGVtdWxhdG9yIi4KKworZ2l0Y3ZzLmVuYWJsZWQ6OgorCVdoZXRoZXIgdGhlIENWUyBzZXJ2ZXIgaW50ZXJmYWNlIGlzIGVuYWJsZWQgZm9yIHRoaXMgcmVwb3NpdG9yeS4KKwlTZWUgbGlua2dpdDpnaXQtY3Zzc2VydmVyWzFdLgorCitnaXRjdnMubG9nRmlsZTo6CisJUGF0aCB0byBhIGxvZyBmaWxlIHdoZXJlIHRoZSBDVlMgc2VydmVyIGludGVyZmFjZSB3ZWxsLi4uIGxvZ3MKKwl2YXJpb3VzIHN0dWZmLiBTZWUgbGlua2dpdDpnaXQtY3Zzc2VydmVyWzFdLgorCitnaXRjdnMudXNlY3JsZmF0dHI6OgorCUlmIHRydWUsIHRoZSBzZXJ2ZXIgd2lsbCBsb29rIHVwIHRoZSBlbmQtb2YtbGluZSBjb252ZXJzaW9uCisJYXR0cmlidXRlcyBmb3IgZmlsZXMgdG8gZGV0ZXJtaW5lIHRoZSBgLWtgIG1vZGVzIHRvIHVzZS4gSWYKKwl0aGUgYXR0cmlidXRlcyBmb3JjZSBHaXQgdG8gdHJlYXQgYSBmaWxlIGFzIHRleHQsCisJdGhlIGAta2AgbW9kZSB3aWxsIGJlIGxlZnQgYmxhbmsgc28gQ1ZTIGNsaWVudHMgd2lsbAorCXRyZWF0IGl0IGFzIHRleHQuIElmIHRoZXkgc3VwcHJlc3MgdGV4dCBjb252ZXJzaW9uLCB0aGUgZmlsZQorCXdpbGwgYmUgc2V0IHdpdGggJy1rYicgbW9kZSwgd2hpY2ggc3VwcHJlc3NlcyBhbnkgbmV3bGluZSBtdW5naW5nCisJdGhlIGNsaWVudCBtaWdodCBvdGhlcndpc2UgZG8uIElmIHRoZSBhdHRyaWJ1dGVzIGRvIG5vdCBhbGxvdworCXRoZSBmaWxlIHR5cGUgdG8gYmUgZGV0ZXJtaW5lZCwgdGhlbiBgZ2l0Y3ZzLmFsbEJpbmFyeWAgaXMKKwl1c2VkLiBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdLgorCitnaXRjdnMuYWxsQmluYXJ5OjoKKwlUaGlzIGlzIHVzZWQgaWYgYGdpdGN2cy51c2VjcmxmYXR0cmAgZG9lcyBub3QgcmVzb2x2ZQorCXRoZSBjb3JyZWN0ICcta2InIG1vZGUgdG8gdXNlLiBJZiB0cnVlLCBhbGwKKwl1bnJlc29sdmVkIGZpbGVzIGFyZSBzZW50IHRvIHRoZSBjbGllbnQgaW4KKwltb2RlICcta2InLiBUaGlzIGNhdXNlcyB0aGUgY2xpZW50IHRvIHRyZWF0IHRoZW0KKwlhcyBiaW5hcnkgZmlsZXMsIHdoaWNoIHN1cHByZXNzZXMgYW55IG5ld2xpbmUgbXVuZ2luZyBpdAorCW90aGVyd2lzZSBtaWdodCBkby4gQWx0ZXJuYXRpdmVseSwgaWYgaXQgaXMgc2V0IHRvICJndWVzcyIsCisJdGhlbiB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXJlIGV4YW1pbmVkIHRvIGRlY2lkZSBpZgorCWl0IGlzIGJpbmFyeSwgc2ltaWxhciB0byBgY29yZS5hdXRvY3JsZmAuCisKK2dpdGN2cy5kYk5hbWU6OgorCURhdGFiYXNlIHVzZWQgYnkgZ2l0LWN2c3NlcnZlciB0byBjYWNoZSByZXZpc2lvbiBpbmZvcm1hdGlvbgorCWRlcml2ZWQgZnJvbSB0aGUgR2l0IHJlcG9zaXRvcnkuIFRoZSBleGFjdCBtZWFuaW5nIGRlcGVuZHMgb24gdGhlCisJdXNlZCBkYXRhYmFzZSBkcml2ZXIsIGZvciBTUUxpdGUgKHdoaWNoIGlzIHRoZSBkZWZhdWx0IGRyaXZlcikgdGhpcworCWlzIGEgZmlsZW5hbWUuIFN1cHBvcnRzIHZhcmlhYmxlIHN1YnN0aXR1dGlvbiAoc2VlCisJbGlua2dpdDpnaXQtY3Zzc2VydmVyWzFdIGZvciBkZXRhaWxzKS4gTWF5IG5vdCBjb250YWluIHNlbWljb2xvbnMgKGA7YCkuCisJRGVmYXVsdDogJyVHZ2l0Y3ZzLiVtLnNxbGl0ZScKKworZ2l0Y3ZzLmRiRHJpdmVyOjoKKwlVc2VkIFBlcmwgREJJIGRyaXZlci4gWW91IGNhbiBzcGVjaWZ5IGFueSBhdmFpbGFibGUgZHJpdmVyCisJZm9yIHRoaXMgaGVyZSwgYnV0IGl0IG1pZ2h0IG5vdCB3b3JrLiBnaXQtY3Zzc2VydmVyIGlzIHRlc3RlZAorCXdpdGggJ0RCRDo6U1FMaXRlJywgcmVwb3J0ZWQgdG8gd29yayB3aXRoICdEQkQ6OlBnJywgYW5kCisJcmVwb3J0ZWQgKm5vdCogdG8gd29yayB3aXRoICdEQkQ6Om15c3FsJy4gRXhwZXJpbWVudGFsIGZlYXR1cmUuCisJTWF5IG5vdCBjb250YWluIGRvdWJsZSBjb2xvbnMgKGA6YCkuIERlZmF1bHQ6ICdTUUxpdGUnLgorCVNlZSBsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0uCisKK2dpdGN2cy5kYlVzZXIsIGdpdGN2cy5kYlBhc3M6OgorCURhdGFiYXNlIHVzZXIgYW5kIHBhc3N3b3JkLiBPbmx5IHVzZWZ1bCBpZiBzZXR0aW5nIGBnaXRjdnMuZGJEcml2ZXJgLAorCXNpbmNlIFNRTGl0ZSBoYXMgbm8gY29uY2VwdCBvZiBkYXRhYmFzZSB1c2VycyBhbmQvb3IgcGFzc3dvcmRzLgorCSdnaXRjdnMuZGJVc2VyJyBzdXBwb3J0cyB2YXJpYWJsZSBzdWJzdGl0dXRpb24gKHNlZQorCWxpbmtnaXQ6Z2l0LWN2c3NlcnZlclsxXSBmb3IgZGV0YWlscykuCisKK2dpdGN2cy5kYlRhYmxlTmFtZVByZWZpeDo6CisJRGF0YWJhc2UgdGFibGUgbmFtZSBwcmVmaXguICBQcmVwZW5kZWQgdG8gdGhlIG5hbWVzIG9mIGFueQorCWRhdGFiYXNlIHRhYmxlcyB1c2VkLCBhbGxvd2luZyBhIHNpbmdsZSBkYXRhYmFzZSB0byBiZSB1c2VkCisJZm9yIHNldmVyYWwgcmVwb3NpdG9yaWVzLiAgU3VwcG9ydHMgdmFyaWFibGUgc3Vic3RpdHV0aW9uIChzZWUKKwlsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0gZm9yIGRldGFpbHMpLiAgQW55IG5vbi1hbHBoYWJldGljCisJY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdW5kZXJzY29yZXMuCisKK0FsbCBnaXRjdnMgdmFyaWFibGVzIGV4Y2VwdCBmb3IgYGdpdGN2cy51c2VjcmxmYXR0cmAgYW5kCitgZ2l0Y3ZzLmFsbEJpbmFyeWAgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGFzCisnZ2l0Y3ZzLjxhY2Nlc3NfbWV0aG9kPi48dmFybmFtZT4nICh3aGVyZSAnYWNjZXNzX21ldGhvZCcKK2lzIG9uZSBvZiAiZXh0IiBhbmQgInBzZXJ2ZXIiKSB0byBtYWtlIHRoZW0gYXBwbHkgb25seSBmb3IgdGhlIGdpdmVuCithY2Nlc3MgbWV0aG9kLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvZ2l0d2ViLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2dpdHdlYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI1MTQ3NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2dpdHdlYi50eHQKQEAgLTAsMCArMSwxNiBAQAorZ2l0d2ViLmNhdGVnb3J5OjoKK2dpdHdlYi5kZXNjcmlwdGlvbjo6CitnaXR3ZWIub3duZXI6OgorZ2l0d2ViLnVybDo6CisJU2VlIGxpbmtnaXQ6Z2l0d2ViWzFdIGZvciBkZXNjcmlwdGlvbi4KKworZ2l0d2ViLmF2YXRhcjo6CitnaXR3ZWIuYmxhbWU6OgorZ2l0d2ViLmdyZXA6OgorZ2l0d2ViLmhpZ2hsaWdodDo6CitnaXR3ZWIucGF0Y2hlczo6CitnaXR3ZWIucGlja2F4ZTo6CitnaXR3ZWIucmVtb3RlX2hlYWRzOjoKK2dpdHdlYi5zaG93U2l6ZXM6OgorZ2l0d2ViLnNuYXBzaG90OjoKKwlTZWUgbGlua2dpdDpnaXR3ZWIuY29uZls1XSBmb3IgZGVzY3JpcHRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9ncGcudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZ3BnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTQwMjVjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZ3BnLnR4dApAQCAtMCwwICsxLDM1IEBACitncGcucHJvZ3JhbTo6CisJVXNlIHRoaXMgY3VzdG9tIHByb2dyYW0gaW5zdGVhZCBvZiAiYGdwZ2AiIGZvdW5kIG9uIGAkUEFUSGAgd2hlbgorCW1ha2luZyBvciB2ZXJpZnlpbmcgYSBQR1Agc2lnbmF0dXJlLiBUaGUgcHJvZ3JhbSBtdXN0IHN1cHBvcnQgdGhlCisJc2FtZSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGFzIEdQRywgbmFtZWx5LCB0byB2ZXJpZnkgYSBkZXRhY2hlZAorCXNpZ25hdHVyZSwgImBncGcgLS12ZXJpZnkgJHNpZ25hdHVyZSAtIDwkZmlsZWAiIGlzIHJ1biwgYW5kIHRoZQorCXByb2dyYW0gaXMgZXhwZWN0ZWQgdG8gc2lnbmFsIGEgZ29vZCBzaWduYXR1cmUgYnkgZXhpdGluZyB3aXRoCisJY29kZSAwLCBhbmQgdG8gZ2VuZXJhdGUgYW4gQVNDSUktYXJtb3JlZCBkZXRhY2hlZCBzaWduYXR1cmUsIHRoZQorCXN0YW5kYXJkIGlucHV0IG9mICJgZ3BnIC1ic2F1ICRrZXlgIiBpcyBmZWQgd2l0aCB0aGUgY29udGVudHMgdG8gYmUKKwlzaWduZWQsIGFuZCB0aGUgcHJvZ3JhbSBpcyBleHBlY3RlZCB0byBzZW5kIHRoZSByZXN1bHQgdG8gaXRzCisJc3RhbmRhcmQgb3V0cHV0LgorCitncGcuZm9ybWF0OjoKKwlTcGVjaWZpZXMgd2hpY2gga2V5IGZvcm1hdCB0byB1c2Ugd2hlbiBzaWduaW5nIHdpdGggYC0tZ3BnLXNpZ25gLgorCURlZmF1bHQgaXMgIm9wZW5wZ3AiIGFuZCBhbm90aGVyIHBvc3NpYmxlIHZhbHVlIGlzICJ4NTA5Ii4KKworZ3BnLjxmb3JtYXQ+LnByb2dyYW06OgorCVVzZSB0aGlzIHRvIGN1c3RvbWl6ZSB0aGUgcHJvZ3JhbSB1c2VkIGZvciB0aGUgc2lnbmluZyBmb3JtYXQgeW91CisJY2hvc2UuIChzZWUgYGdwZy5wcm9ncmFtYCBhbmQgYGdwZy5mb3JtYXRgKSBgZ3BnLnByb2dyYW1gIGNhbiBzdGlsbAorCWJlIHVzZWQgYXMgYSBsZWdhY3kgc3lub255bSBmb3IgYGdwZy5vcGVucGdwLnByb2dyYW1gLiBUaGUgZGVmYXVsdAorCXZhbHVlIGZvciBgZ3BnLng1MDkucHJvZ3JhbWAgaXMgImdwZ3NtIi4KKworZ3BnLm1pblRydXN0TGV2ZWw6OgorCVNwZWNpZmllcyBhIG1pbmltdW0gdHJ1c3QgbGV2ZWwgZm9yIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uICBJZgorCXRoaXMgb3B0aW9uIGlzIHVuc2V0LCB0aGVuIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZm9yIG1lcmdlCisJb3BlcmF0aW9ucyByZXF1aXJlIGEga2V5IHdpdGggYXQgbGVhc3QgYG1hcmdpbmFsYCB0cnVzdC4gIE90aGVyCisJb3BlcmF0aW9ucyB0aGF0IHBlcmZvcm0gc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiByZXF1aXJlIGEga2V5CisJd2l0aCBhdCBsZWFzdCBgdW5kZWZpbmVkYCB0cnVzdC4gIFNldHRpbmcgdGhpcyBvcHRpb24gb3ZlcnJpZGVzCisJdGhlIHJlcXVpcmVkIHRydXN0LWxldmVsIGZvciBhbGwgb3BlcmF0aW9ucy4gIFN1cHBvcnRlZCB2YWx1ZXMsCisJaW4gaW5jcmVhc2luZyBvcmRlciBvZiBzaWduaWZpY2FuY2U6CisrCisqIGB1bmRlZmluZWRgCisqIGBuZXZlcmAKKyogYG1hcmdpbmFsYAorKiBgZnVsbHlgCisqIGB1bHRpbWF0ZWAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2dyZXAudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZ3JlcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhYmU0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2dyZXAudHh0CkBAIC0wLDAgKzEsMjQgQEAKK2dyZXAubGluZU51bWJlcjo6CisJSWYgc2V0IHRvIHRydWUsIGVuYWJsZSBgLW5gIG9wdGlvbiBieSBkZWZhdWx0LgorCitncmVwLmNvbHVtbjo6CisJSWYgc2V0IHRvIHRydWUsIGVuYWJsZSB0aGUgYC0tY29sdW1uYCBvcHRpb24gYnkgZGVmYXVsdC4KKworZ3JlcC5wYXR0ZXJuVHlwZTo6CisJU2V0IHRoZSBkZWZhdWx0IG1hdGNoaW5nIGJlaGF2aW9yLiBVc2luZyBhIHZhbHVlIG9mICdiYXNpYycsICdleHRlbmRlZCcsCisJJ2ZpeGVkJywgb3IgJ3BlcmwnIHdpbGwgZW5hYmxlIHRoZSBgLS1iYXNpYy1yZWdleHBgLCBgLS1leHRlbmRlZC1yZWdleHBgLAorCWAtLWZpeGVkLXN0cmluZ3NgLCBvciBgLS1wZXJsLXJlZ2V4cGAgb3B0aW9uIGFjY29yZGluZ2x5LCB3aGlsZSB0aGUKKwl2YWx1ZSAnZGVmYXVsdCcgd2lsbCByZXR1cm4gdG8gdGhlIGRlZmF1bHQgbWF0Y2hpbmcgYmVoYXZpb3IuCisKK2dyZXAuZXh0ZW5kZWRSZWdleHA6OgorCUlmIHNldCB0byB0cnVlLCBlbmFibGUgYC0tZXh0ZW5kZWQtcmVnZXhwYCBvcHRpb24gYnkgZGVmYXVsdC4gVGhpcworCW9wdGlvbiBpcyBpZ25vcmVkIHdoZW4gdGhlIGBncmVwLnBhdHRlcm5UeXBlYCBvcHRpb24gaXMgc2V0IHRvIGEgdmFsdWUKKwlvdGhlciB0aGFuICdkZWZhdWx0Jy4KKworZ3JlcC50aHJlYWRzOjoKKwlOdW1iZXIgb2YgZ3JlcCB3b3JrZXIgdGhyZWFkcyB0byB1c2UuCisJU2VlIGBncmVwLnRocmVhZHNgIGluIGxpbmtnaXQ6Z2l0LWdyZXBbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK2dyZXAuZmFsbGJhY2tUb05vSW5kZXg6OgorCUlmIHNldCB0byB0cnVlLCBmYWxsIGJhY2sgdG8gZ2l0IGdyZXAgLS1uby1pbmRleCBpZiBnaXQgZ3JlcAorCWlzIGV4ZWN1dGVkIG91dHNpZGUgb2YgYSBnaXQgcmVwb3NpdG9yeS4gIERlZmF1bHRzIHRvIGZhbHNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvZ3VpLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2d1aS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwODMxYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2d1aS50eHQKQEAgLTAsMCArMSw1NyBAQAorZ3VpLmNvbW1pdE1zZ1dpZHRoOjoKKwlEZWZpbmVzIGhvdyB3aWRlIHRoZSBjb21taXQgbWVzc2FnZSB3aW5kb3cgaXMgaW4gdGhlCisJbGlua2dpdDpnaXQtZ3VpWzFdLiAiNzUiIGlzIHRoZSBkZWZhdWx0LgorCitndWkuZGlmZkNvbnRleHQ6OgorCVNwZWNpZmllcyBob3cgbWFueSBjb250ZXh0IGxpbmVzIHNob3VsZCBiZSB1c2VkIGluIGNhbGxzIHRvIGRpZmYKKwltYWRlIGJ5IHRoZSBsaW5rZ2l0OmdpdC1ndWlbMV0uIFRoZSBkZWZhdWx0IGlzICI1Ii4KKworZ3VpLmRpc3BsYXlVbnRyYWNrZWQ6OgorCURldGVybWluZXMgaWYgbGlua2dpdDpnaXQtZ3VpWzFdIHNob3dzIHVudHJhY2tlZCBmaWxlcworCWluIHRoZSBmaWxlIGxpc3QuIFRoZSBkZWZhdWx0IGlzICJ0cnVlIi4KKworZ3VpLmVuY29kaW5nOjoKKwlTcGVjaWZpZXMgdGhlIGRlZmF1bHQgZW5jb2RpbmcgdG8gdXNlIGZvciBkaXNwbGF5aW5nIG9mCisJZmlsZSBjb250ZW50cyBpbiBsaW5rZ2l0OmdpdC1ndWlbMV0gYW5kIGxpbmtnaXQ6Z2l0a1sxXS4KKwlJdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzZXR0aW5nIHRoZSAnZW5jb2RpbmcnIGF0dHJpYnV0ZQorCWZvciByZWxldmFudCBmaWxlcyAoc2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSkuCisJSWYgdGhpcyBvcHRpb24gaXMgbm90IHNldCwgdGhlIHRvb2xzIGRlZmF1bHQgdG8gdGhlCisJbG9jYWxlIGVuY29kaW5nLgorCitndWkubWF0Y2hUcmFja2luZ0JyYW5jaDo6CisJRGV0ZXJtaW5lcyBpZiBuZXcgYnJhbmNoZXMgY3JlYXRlZCB3aXRoIGxpbmtnaXQ6Z2l0LWd1aVsxXSBzaG91bGQKKwlkZWZhdWx0IHRvIHRyYWNraW5nIHJlbW90ZSBicmFuY2hlcyB3aXRoIG1hdGNoaW5nIG5hbWVzIG9yCisJbm90LiBEZWZhdWx0OiAiZmFsc2UiLgorCitndWkubmV3QnJhbmNoVGVtcGxhdGU6OgorCUlzIHVzZWQgYXMgc3VnZ2VzdGVkIG5hbWUgd2hlbiBjcmVhdGluZyBuZXcgYnJhbmNoZXMgdXNpbmcgdGhlCisJbGlua2dpdDpnaXQtZ3VpWzFdLgorCitndWkucHJ1bmVEdXJpbmdGZXRjaDo6CisJInRydWUiIGlmIGxpbmtnaXQ6Z2l0LWd1aVsxXSBzaG91bGQgcHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIHdoZW4KKwlwZXJmb3JtaW5nIGEgZmV0Y2guIFRoZSBkZWZhdWx0IHZhbHVlIGlzICJmYWxzZSIuCisKK2d1aS50cnVzdG10aW1lOjoKKwlEZXRlcm1pbmVzIGlmIGxpbmtnaXQ6Z2l0LWd1aVsxXSBzaG91bGQgdHJ1c3QgdGhlIGZpbGUgbW9kaWZpY2F0aW9uCisJdGltZXN0YW1wIG9yIG5vdC4gQnkgZGVmYXVsdCB0aGUgdGltZXN0YW1wcyBhcmUgbm90IHRydXN0ZWQuCisKK2d1aS5zcGVsbGluZ0RpY3Rpb25hcnk6OgorCVNwZWNpZmllcyB0aGUgZGljdGlvbmFyeSB1c2VkIGZvciBzcGVsbCBjaGVja2luZyBjb21taXQgbWVzc2FnZXMgaW4KKwl0aGUgbGlua2dpdDpnaXQtZ3VpWzFdLiBXaGVuIHNldCB0byAibm9uZSIgc3BlbGwgY2hlY2tpbmcgaXMgdHVybmVkCisJb2ZmLgorCitndWkuZmFzdENvcHlCbGFtZTo6CisJSWYgdHJ1ZSwgJ2dpdCBndWkgYmxhbWUnIHVzZXMgYC1DYCBpbnN0ZWFkIG9mIGAtQyAtQ2AgZm9yIG9yaWdpbmFsCisJbG9jYXRpb24gZGV0ZWN0aW9uLiBJdCBtYWtlcyBibGFtZSBzaWduaWZpY2FudGx5IGZhc3RlciBvbiBodWdlCisJcmVwb3NpdG9yaWVzIGF0IHRoZSBleHBlbnNlIG9mIGxlc3MgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uCisKK2d1aS5jb3B5QmxhbWVUaHJlc2hvbGQ6OgorCVNwZWNpZmllcyB0aGUgdGhyZXNob2xkIHRvIHVzZSBpbiAnZ2l0IGd1aSBibGFtZScgb3JpZ2luYWwgbG9jYXRpb24KKwlkZXRlY3Rpb24sIG1lYXN1cmVkIGluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiBTZWUgdGhlCisJbGlua2dpdDpnaXQtYmxhbWVbMV0gbWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvcHkgZGV0ZWN0aW9uLgorCitndWkuYmxhbWVoaXN0b3J5Y3R4OjoKKwlTcGVjaWZpZXMgdGhlIHJhZGl1cyBvZiBoaXN0b3J5IGNvbnRleHQgaW4gZGF5cyB0byBzaG93IGluCisJbGlua2dpdDpnaXRrWzFdIGZvciB0aGUgc2VsZWN0ZWQgY29tbWl0LCB3aGVuIHRoZSBgU2hvdyBIaXN0b3J5CisJQ29udGV4dGAgbWVudSBpdGVtIGlzIGludm9rZWQgZnJvbSAnZ2l0IGd1aSBibGFtZScuIElmIHRoaXMKKwl2YXJpYWJsZSBpcyBzZXQgdG8gemVybywgdGhlIHdob2xlIGhpc3RvcnkgaXMgc2hvd24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9ndWl0b29sLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2d1aXRvb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZmI5NDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9ndWl0b29sLnR4dApAQCAtMCwwICsxLDUwIEBACitndWl0b29sLjxuYW1lPi5jbWQ6OgorCVNwZWNpZmllcyB0aGUgc2hlbGwgY29tbWFuZCBsaW5lIHRvIGV4ZWN1dGUgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBpdGVtCisJb2YgdGhlIGxpbmtnaXQ6Z2l0LWd1aVsxXSBgVG9vbHNgIG1lbnUgaXMgaW52b2tlZC4gVGhpcyBvcHRpb24gaXMKKwltYW5kYXRvcnkgZm9yIGV2ZXJ5IHRvb2wuIFRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkIGZyb20gdGhlIHJvb3Qgb2YKKwl0aGUgd29ya2luZyBkaXJlY3RvcnksIGFuZCBpbiB0aGUgZW52aXJvbm1lbnQgaXQgcmVjZWl2ZXMgdGhlIG5hbWUgb2YKKwl0aGUgdG9vbCBhcyBgR0lUX0dVSVRPT0xgLCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGZpbGUgYXMKKwknRklMRU5BTUUnLCBhbmQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIGFzICdDVVJfQlJBTkNIJyAoaWYKKwl0aGUgaGVhZCBpcyBkZXRhY2hlZCwgJ0NVUl9CUkFOQ0gnIGlzIGVtcHR5KS4KKworZ3VpdG9vbC48bmFtZT4ubmVlZHNGaWxlOjoKKwlSdW4gdGhlIHRvb2wgb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgaW4gdGhlIEdVSS4gSXQgZ3VhcmFudGVlcworCXRoYXQgJ0ZJTEVOQU1FJyBpcyBub3QgZW1wdHkuCisKK2d1aXRvb2wuPG5hbWU+Lm5vQ29uc29sZTo6CisJUnVuIHRoZSBjb21tYW5kIHNpbGVudGx5LCB3aXRob3V0IGNyZWF0aW5nIGEgd2luZG93IHRvIGRpc3BsYXkgaXRzCisJb3V0cHV0LgorCitndWl0b29sLjxuYW1lPi5ub1Jlc2Nhbjo6CisJRG9uJ3QgcmVzY2FuIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IgY2hhbmdlcyBhZnRlciB0aGUgdG9vbAorCWZpbmlzaGVzIGV4ZWN1dGlvbi4KKworZ3VpdG9vbC48bmFtZT4uY29uZmlybTo6CisJU2hvdyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgYmVmb3JlIGFjdHVhbGx5IHJ1bm5pbmcgdGhlIHRvb2wuCisKK2d1aXRvb2wuPG5hbWU+LmFyZ1Byb21wdDo6CisJUmVxdWVzdCBhIHN0cmluZyBhcmd1bWVudCBmcm9tIHRoZSB1c2VyLCBhbmQgcGFzcyBpdCB0byB0aGUgdG9vbAorCXRocm91Z2ggdGhlIGBBUkdTYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gU2luY2UgcmVxdWVzdGluZyBhbgorCWFyZ3VtZW50IGltcGxpZXMgY29uZmlybWF0aW9uLCB0aGUgJ2NvbmZpcm0nIG9wdGlvbiBoYXMgbm8gZWZmZWN0CisJaWYgdGhpcyBpcyBlbmFibGVkLiBJZiB0aGUgb3B0aW9uIGlzIHNldCB0byAndHJ1ZScsICd5ZXMnLCBvciAnMScsCisJdGhlIGRpYWxvZyB1c2VzIGEgYnVpbHQtaW4gZ2VuZXJpYyBwcm9tcHQ7IG90aGVyd2lzZSB0aGUgZXhhY3QKKwl2YWx1ZSBvZiB0aGUgdmFyaWFibGUgaXMgdXNlZC4KKworZ3VpdG9vbC48bmFtZT4ucmV2UHJvbXB0OjoKKwlSZXF1ZXN0IGEgc2luZ2xlIHZhbGlkIHJldmlzaW9uIGZyb20gdGhlIHVzZXIsIGFuZCBzZXQgdGhlCisJYFJFVklTSU9OYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gSW4gb3RoZXIgYXNwZWN0cyB0aGlzIG9wdGlvbgorCWlzIHNpbWlsYXIgdG8gJ2FyZ1Byb21wdCcsIGFuZCBjYW4gYmUgdXNlZCB0b2dldGhlciB3aXRoIGl0LgorCitndWl0b29sLjxuYW1lPi5yZXZVbm1lcmdlZDo6CisJU2hvdyBvbmx5IHVubWVyZ2VkIGJyYW5jaGVzIGluIHRoZSAncmV2UHJvbXB0JyBzdWJkaWFsb2cuCisJVGhpcyBpcyB1c2VmdWwgZm9yIHRvb2xzIHNpbWlsYXIgdG8gbWVyZ2Ugb3IgcmViYXNlLCBidXQgbm90CisJZm9yIHRoaW5ncyBsaWtlIGNoZWNrb3V0IG9yIHJlc2V0LgorCitndWl0b29sLjxuYW1lPi50aXRsZTo6CisJU3BlY2lmaWVzIHRoZSB0aXRsZSB0byB1c2UgZm9yIHRoZSBwcm9tcHQgZGlhbG9nLiBUaGUgZGVmYXVsdAorCWlzIHRoZSB0b29sIG5hbWUuCisKK2d1aXRvb2wuPG5hbWU+LnByb21wdDo6CisJU3BlY2lmaWVzIHRoZSBnZW5lcmFsIHByb21wdCBzdHJpbmcgdG8gZGlzcGxheSBhdCB0aGUgdG9wIG9mCisJdGhlIGRpYWxvZywgYmVmb3JlIHN1YnNlY3Rpb25zIGZvciAnYXJnUHJvbXB0JyBhbmQgJ3JldlByb21wdCcuCisJVGhlIGRlZmF1bHQgdmFsdWUgaW5jbHVkZXMgdGhlIGFjdHVhbCBjb21tYW5kLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvaGVscC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9oZWxwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjRiYmY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvaGVscC50eHQKQEAgLTAsMCArMSwyMyBAQAoraGVscC5icm93c2VyOjoKKwlTcGVjaWZ5IHRoZSBicm93c2VyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRpc3BsYXkgaGVscCBpbiB0aGUKKwknd2ViJyBmb3JtYXQuIFNlZSBsaW5rZ2l0OmdpdC1oZWxwWzFdLgorCitoZWxwLmZvcm1hdDo6CisJT3ZlcnJpZGUgdGhlIGRlZmF1bHQgaGVscCBmb3JtYXQgdXNlZCBieSBsaW5rZ2l0OmdpdC1oZWxwWzFdLgorCVZhbHVlcyAnbWFuJywgJ2luZm8nLCAnd2ViJyBhbmQgJ2h0bWwnIGFyZSBzdXBwb3J0ZWQuICdtYW4nIGlzCisJdGhlIGRlZmF1bHQuICd3ZWInIGFuZCAnaHRtbCcgYXJlIHRoZSBzYW1lLgorCitoZWxwLmF1dG9Db3JyZWN0OjoKKwlBdXRvbWF0aWNhbGx5IGNvcnJlY3QgYW5kIGV4ZWN1dGUgbWlzdHlwZWQgY29tbWFuZHMgYWZ0ZXIKKwl3YWl0aW5nIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2lzZWNvbmRzICgwLjEgc2VjKS4gSWYgbW9yZQorCXRoYW4gb25lIGNvbW1hbmQgY2FuIGJlIGRlZHVjZWQgZnJvbSB0aGUgZW50ZXJlZCB0ZXh0LCBub3RoaW5nCisJd2lsbCBiZSBleGVjdXRlZC4gIElmIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiBpcyBuZWdhdGl2ZSwKKwl0aGUgY29ycmVjdGVkIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbW1lZGlhdGVseS4gSWYgdGhlCisJdmFsdWUgaXMgMCAtIHRoZSBjb21tYW5kIHdpbGwgYmUganVzdCBzaG93biBidXQgbm90IGV4ZWN1dGVkLgorCVRoaXMgaXMgdGhlIGRlZmF1bHQuCisKK2hlbHAuaHRtbFBhdGg6OgorCVNwZWNpZnkgdGhlIHBhdGggd2hlcmUgdGhlIEhUTUwgZG9jdW1lbnRhdGlvbiByZXNpZGVzLiBGaWxlIHN5c3RlbSBwYXRocworCWFuZCBVUkxzIGFyZSBzdXBwb3J0ZWQuIEhUTUwgcGFnZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIHRoaXMgcGF0aCB3aGVuCisJaGVscCBpcyBkaXNwbGF5ZWQgaW4gdGhlICd3ZWInIGZvcm1hdC4gVGhpcyBkZWZhdWx0cyB0byB0aGUgZG9jdW1lbnRhdGlvbgorCXBhdGggb2YgeW91ciBHaXQgaW5zdGFsbGF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvaHR0cC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9odHRwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTY4ZmJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvaHR0cC50eHQKQEAgLTAsMCArMSwzMDkgQEAKK2h0dHAucHJveHk6OgorCU92ZXJyaWRlIHRoZSBIVFRQIHByb3h5LCBub3JtYWxseSBjb25maWd1cmVkIHVzaW5nIHRoZSAnaHR0cF9wcm94eScsCisJJ2h0dHBzX3Byb3h5JywgYW5kICdhbGxfcHJveHknIGVudmlyb25tZW50IHZhcmlhYmxlcyAoc2VlIGBjdXJsKDEpYCkuIEluCisJYWRkaXRpb24gdG8gdGhlIHN5bnRheCB1bmRlcnN0b29kIGJ5IGN1cmwsIGl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgYQorCXByb3h5IHN0cmluZyB3aXRoIGEgdXNlciBuYW1lIGJ1dCBubyBwYXNzd29yZCwgaW4gd2hpY2ggY2FzZSBnaXQgd2lsbAorCWF0dGVtcHQgdG8gYWNxdWlyZSBvbmUgaW4gdGhlIHNhbWUgd2F5IGl0IGRvZXMgZm9yIG90aGVyIGNyZWRlbnRpYWxzLiBTZWUKKwlsaW5rZ2l0OmdpdGNyZWRlbnRpYWxzWzddIGZvciBtb3JlIGluZm9ybWF0aW9uLiBUaGUgc3ludGF4IHRodXMgaXMKKwknW3Byb3RvY29sOi8vXVt1c2VyWzpwYXNzd29yZF1AXXByb3h5aG9zdFs6cG9ydF0nLiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuCisJb24gYSBwZXItcmVtb3RlIGJhc2lzOyBzZWUgcmVtb3RlLjxuYW1lPi5wcm94eQorCitodHRwLnByb3h5QXV0aE1ldGhvZDo6CisJU2V0IHRoZSBtZXRob2Qgd2l0aCB3aGljaCB0byBhdXRoZW50aWNhdGUgYWdhaW5zdCB0aGUgSFRUUCBwcm94eS4gVGhpcworCW9ubHkgdGFrZXMgZWZmZWN0IGlmIHRoZSBjb25maWd1cmVkIHByb3h5IHN0cmluZyBjb250YWlucyBhIHVzZXIgbmFtZSBwYXJ0CisJKGkuZS4gaXMgb2YgdGhlIGZvcm0gJ3VzZXJAaG9zdCcgb3IgJ3VzZXJAaG9zdDpwb3J0JykuIFRoaXMgY2FuIGJlCisJb3ZlcnJpZGRlbiBvbiBhIHBlci1yZW1vdGUgYmFzaXM7IHNlZSBgcmVtb3RlLjxuYW1lPi5wcm94eUF1dGhNZXRob2RgLgorCUJvdGggY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfSFRUUF9QUk9YWV9BVVRITUVUSE9EYCBlbnZpcm9ubWVudAorCXZhcmlhYmxlLiAgUG9zc2libGUgdmFsdWVzIGFyZToKKysKKy0tCisqIGBhbnlhdXRoYCAtIEF1dG9tYXRpY2FsbHkgcGljayBhIHN1aXRhYmxlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4gSXQgaXMKKyAgYXNzdW1lZCB0aGF0IHRoZSBwcm94eSBhbnN3ZXJzIGFuIHVuYXV0aGVudGljYXRlZCByZXF1ZXN0IHdpdGggYSA0MDcKKyAgc3RhdHVzIGNvZGUgYW5kIG9uZSBvciBtb3JlIFByb3h5LWF1dGhlbnRpY2F0ZSBoZWFkZXJzIHdpdGggc3VwcG9ydGVkCisgIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMuIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisqIGBiYXNpY2AgLSBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uCisqIGBkaWdlc3RgIC0gSFRUUCBEaWdlc3QgYXV0aGVudGljYXRpb247IHRoaXMgcHJldmVudHMgdGhlIHBhc3N3b3JkIGZyb20gYmVpbmcKKyAgdHJhbnNtaXR0ZWQgdG8gdGhlIHByb3h5IGluIGNsZWFyIHRleHQKKyogYG5lZ290aWF0ZWAgLSBHU1MtTmVnb3RpYXRlIGF1dGhlbnRpY2F0aW9uIChjb21wYXJlIHRoZSAtLW5lZ290aWF0ZSBvcHRpb24KKyAgb2YgYGN1cmwoMSlgKQorKiBgbnRsbWAgLSBOVExNIGF1dGhlbnRpY2F0aW9uIChjb21wYXJlIHRoZSAtLW50bG0gb3B0aW9uIG9mIGBjdXJsKDEpYCkKKy0tCisKK2h0dHAucHJveHlTU0xDZXJ0OjoKKwlUaGUgcGF0aG5hbWUgb2YgYSBmaWxlIHRoYXQgc3RvcmVzIGEgY2xpZW50IGNlcnRpZmljYXRlIHRvIHVzZSB0byBhdXRoZW50aWNhdGUKKwl3aXRoIGFuIEhUVFBTIHByb3h5LiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9QUk9YWV9TU0xfQ0VSVGAgZW52aXJvbm1lbnQKKwl2YXJpYWJsZS4KKworaHR0cC5wcm94eVNTTEtleTo6CisJVGhlIHBhdGhuYW1lIG9mIGEgZmlsZSB0aGF0IHN0b3JlcyBhIHByaXZhdGUga2V5IHRvIHVzZSB0byBhdXRoZW50aWNhdGUgd2l0aAorCWFuIEhUVFBTIHByb3h5LiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9QUk9YWV9TU0xfS0VZYCBlbnZpcm9ubWVudAorCXZhcmlhYmxlLgorCitodHRwLnByb3h5U1NMQ2VydFBhc3N3b3JkUHJvdGVjdGVkOjoKKwlFbmFibGUgR2l0J3MgcGFzc3dvcmQgcHJvbXB0IGZvciB0aGUgcHJveHkgU1NMIGNlcnRpZmljYXRlLiAgT3RoZXJ3aXNlIE9wZW5TU0wKKwl3aWxsIHByb21wdCB0aGUgdXNlciwgcG9zc2libHkgbWFueSB0aW1lcywgaWYgdGhlIGNlcnRpZmljYXRlIG9yIHByaXZhdGUga2V5CisJaXMgZW5jcnlwdGVkLiBDYW4gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBgR0lUX1BST1hZX1NTTF9DRVJUX1BBU1NXT1JEX1BST1RFQ1RFRGAKKwllbnZpcm9ubWVudCB2YXJpYWJsZS4KKworaHR0cC5wcm94eVNTTENBSW5mbzo6CisJUGF0aG5hbWUgdG8gdGhlIGZpbGUgY29udGFpbmluZyB0aGUgY2VydGlmaWNhdGUgYnVuZGxlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8KKwl2ZXJpZnkgdGhlIHByb3h5IHdpdGggd2hlbiB1c2luZyBhbiBIVFRQUyBwcm94eS4gQ2FuIGJlIG92ZXJyaWRlbiBieSB0aGUKKwlgR0lUX1BST1hZX1NTTF9DQUlORk9gIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitodHRwLmVtcHR5QXV0aDo6CisJQXR0ZW1wdCBhdXRoZW50aWNhdGlvbiB3aXRob3V0IHNlZWtpbmcgYSB1c2VybmFtZSBvciBwYXNzd29yZC4gIFRoaXMKKwljYW4gYmUgdXNlZCB0byBhdHRlbXB0IEdTUy1OZWdvdGlhdGUgYXV0aGVudGljYXRpb24gd2l0aG91dCBzcGVjaWZ5aW5nCisJYSB1c2VybmFtZSBpbiB0aGUgVVJMLCBhcyBsaWJjdXJsIG5vcm1hbGx5IHJlcXVpcmVzIGEgdXNlcm5hbWUgZm9yCisJYXV0aGVudGljYXRpb24uCisKK2h0dHAuZGVsZWdhdGlvbjo6CisJQ29udHJvbCBHU1NBUEkgY3JlZGVudGlhbCBkZWxlZ2F0aW9uLiBUaGUgZGVsZWdhdGlvbiBpcyBkaXNhYmxlZAorCWJ5IGRlZmF1bHQgaW4gbGliY3VybCBzaW5jZSB2ZXJzaW9uIDcuMjEuNy4gU2V0IHBhcmFtZXRlciB0byB0ZWxsCisJdGhlIHNlcnZlciB3aGF0IGl0IGlzIGFsbG93ZWQgdG8gZGVsZWdhdGUgd2hlbiBpdCBjb21lcyB0byB1c2VyCisJY3JlZGVudGlhbHMuIFVzZWQgd2l0aCBHU1Mva2VyYmVyb3MuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CisrCistLQorKiBgbm9uZWAgLSBEb24ndCBhbGxvdyBhbnkgZGVsZWdhdGlvbi4KKyogYHBvbGljeWAgLSBEZWxlZ2F0ZXMgaWYgYW5kIG9ubHkgaWYgdGhlIE9LLUFTLURFTEVHQVRFIGZsYWcgaXMgc2V0IGluIHRoZQorICBLZXJiZXJvcyBzZXJ2aWNlIHRpY2tldCwgd2hpY2ggaXMgYSBtYXR0ZXIgb2YgcmVhbG0gcG9saWN5LgorKiBgYWx3YXlzYCAtIFVuY29uZGl0aW9uYWxseSBhbGxvdyB0aGUgc2VydmVyIHRvIGRlbGVnYXRlLgorLS0KKworCitodHRwLmV4dHJhSGVhZGVyOjoKKwlQYXNzIGFuIGFkZGl0aW9uYWwgSFRUUCBoZWFkZXIgd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggYSBzZXJ2ZXIuICBJZgorCW1vcmUgdGhhbiBvbmUgc3VjaCBlbnRyeSBleGlzdHMsIGFsbCBvZiB0aGVtIGFyZSBhZGRlZCBhcyBleHRyYQorCWhlYWRlcnMuICBUbyBhbGxvdyBvdmVycmlkaW5nIHRoZSBzZXR0aW5ncyBpbmhlcml0ZWQgZnJvbSB0aGUgc3lzdGVtCisJY29uZmlnLCBhbiBlbXB0eSB2YWx1ZSB3aWxsIHJlc2V0IHRoZSBleHRyYSBoZWFkZXJzIHRvIHRoZSBlbXB0eSBsaXN0LgorCitodHRwLmNvb2tpZUZpbGU6OgorCVRoZSBwYXRobmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBwcmV2aW91c2x5IHN0b3JlZCBjb29raWUgbGluZXMsCisJd2hpY2ggc2hvdWxkIGJlIHVzZWQKKwlpbiB0aGUgR2l0IGh0dHAgc2Vzc2lvbiwgaWYgdGhleSBtYXRjaCB0aGUgc2VydmVyLiBUaGUgZmlsZSBmb3JtYXQKKwlvZiB0aGUgZmlsZSB0byByZWFkIGNvb2tpZXMgZnJvbSBzaG91bGQgYmUgcGxhaW4gSFRUUCBoZWFkZXJzIG9yCisJdGhlIE5ldHNjYXBlL01vemlsbGEgY29va2llIGZpbGUgZm9ybWF0IChzZWUgYGN1cmwoMSlgKS4KKwlOT1RFIHRoYXQgdGhlIGZpbGUgc3BlY2lmaWVkIHdpdGggaHR0cC5jb29raWVGaWxlIGlzIHVzZWQgb25seSBhcworCWlucHV0IHVubGVzcyBodHRwLnNhdmVDb29raWVzIGlzIHNldC4KKworaHR0cC5zYXZlQ29va2llczo6CisJSWYgc2V0LCBzdG9yZSBjb29raWVzIHJlY2VpdmVkIGR1cmluZyByZXF1ZXN0cyB0byB0aGUgZmlsZSBzcGVjaWZpZWQgYnkKKwlodHRwLmNvb2tpZUZpbGUuIEhhcyBubyBlZmZlY3QgaWYgaHR0cC5jb29raWVGaWxlIGlzIHVuc2V0LgorCitodHRwLnZlcnNpb246OgorCVVzZSB0aGUgc3BlY2lmaWVkIEhUVFAgcHJvdG9jb2wgdmVyc2lvbiB3aGVuIGNvbW11bmljYXRpbmcgd2l0aCBhIHNlcnZlci4KKwlJZiB5b3Ugd2FudCB0byBmb3JjZSB0aGUgZGVmYXVsdC4gVGhlIGF2YWlsYWJsZSBhbmQgZGVmYXVsdCB2ZXJzaW9uIGRlcGVuZAorCW9uIGxpYmN1cmwuIEN1cnJlbnRseSB0aGUgcG9zc2libGUgdmFsdWVzIG9mCisJdGhpcyBvcHRpb24gYXJlOgorCisJLSBIVFRQLzIKKwktIEhUVFAvMS4xCisKK2h0dHAuc3NsVmVyc2lvbjo6CisJVGhlIFNTTCB2ZXJzaW9uIHRvIHVzZSB3aGVuIG5lZ290aWF0aW5nIGFuIFNTTCBjb25uZWN0aW9uLCBpZiB5b3UKKwl3YW50IHRvIGZvcmNlIHRoZSBkZWZhdWx0LiAgVGhlIGF2YWlsYWJsZSBhbmQgZGVmYXVsdCB2ZXJzaW9uCisJZGVwZW5kIG9uIHdoZXRoZXIgbGliY3VybCB3YXMgYnVpbHQgYWdhaW5zdCBOU1Mgb3IgT3BlblNTTCBhbmQgdGhlCisJcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9mIHRoZSBjcnlwdG8gbGlicmFyeSBpbiB1c2UuIEludGVybmFsbHkKKwl0aGlzIHNldHMgdGhlICdDVVJMT1BUX1NTTF9WRVJTSU9OJyBvcHRpb247IHNlZSB0aGUgbGliY3VybAorCWRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgZm9ybWF0IG9mIHRoaXMgb3B0aW9uIGFuZAorCWZvciB0aGUgc3NsIHZlcnNpb24gc3VwcG9ydGVkLiBDdXJyZW50bHkgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZgorCXRoaXMgb3B0aW9uIGFyZToKKworCS0gc3NsdjIKKwktIHNzbHYzCisJLSB0bHN2MQorCS0gdGxzdjEuMAorCS0gdGxzdjEuMQorCS0gdGxzdjEuMgorCS0gdGxzdjEuMworCisrCitDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9TU0xfVkVSU0lPTmAgZW52aXJvbm1lbnQgdmFyaWFibGUuCitUbyBmb3JjZSBnaXQgdG8gdXNlIGxpYmN1cmwncyBkZWZhdWx0IHNzbCB2ZXJzaW9uIGFuZCBpZ25vcmUgYW55CitleHBsaWNpdCBodHRwLnNzbHZlcnNpb24gb3B0aW9uLCBzZXQgYEdJVF9TU0xfVkVSU0lPTmAgdG8gdGhlCitlbXB0eSBzdHJpbmcuCisKK2h0dHAuc3NsQ2lwaGVyTGlzdDo6CisgIEEgbGlzdCBvZiBTU0wgY2lwaGVycyB0byB1c2Ugd2hlbiBuZWdvdGlhdGluZyBhbiBTU0wgY29ubmVjdGlvbi4KKyAgVGhlIGF2YWlsYWJsZSBjaXBoZXJzIGRlcGVuZCBvbiB3aGV0aGVyIGxpYmN1cmwgd2FzIGJ1aWx0IGFnYWluc3QKKyAgTlNTIG9yIE9wZW5TU0wgYW5kIHRoZSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNyeXB0bworICBsaWJyYXJ5IGluIHVzZS4gIEludGVybmFsbHkgdGhpcyBzZXRzIHRoZSAnQ1VSTE9QVF9TU0xfQ0lQSEVSX0xJU1QnCisgIG9wdGlvbjsgc2VlIHRoZSBsaWJjdXJsIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgZm9ybWF0CisgIG9mIHRoaXMgbGlzdC4KKysKK0NhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX1NTTF9DSVBIRVJfTElTVGAgZW52aXJvbm1lbnQgdmFyaWFibGUuCitUbyBmb3JjZSBnaXQgdG8gdXNlIGxpYmN1cmwncyBkZWZhdWx0IGNpcGhlciBsaXN0IGFuZCBpZ25vcmUgYW55CitleHBsaWNpdCBodHRwLnNzbENpcGhlckxpc3Qgb3B0aW9uLCBzZXQgYEdJVF9TU0xfQ0lQSEVSX0xJU1RgIHRvIHRoZQorZW1wdHkgc3RyaW5nLgorCitodHRwLnNzbFZlcmlmeTo6CisJV2hldGhlciB0byB2ZXJpZnkgdGhlIFNTTCBjZXJ0aWZpY2F0ZSB3aGVuIGZldGNoaW5nIG9yIHB1c2hpbmcKKwlvdmVyIEhUVFBTLiBEZWZhdWx0cyB0byB0cnVlLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUKKwlgR0lUX1NTTF9OT19WRVJJRllgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitodHRwLnNzbENlcnQ6OgorCUZpbGUgY29udGFpbmluZyB0aGUgU1NMIGNlcnRpZmljYXRlIHdoZW4gZmV0Y2hpbmcgb3IgcHVzaGluZworCW92ZXIgSFRUUFMuIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX1NTTF9DRVJUYCBlbnZpcm9ubWVudAorCXZhcmlhYmxlLgorCitodHRwLnNzbEtleTo6CisJRmlsZSBjb250YWluaW5nIHRoZSBTU0wgcHJpdmF0ZSBrZXkgd2hlbiBmZXRjaGluZyBvciBwdXNoaW5nCisJb3ZlciBIVFRQUy4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfU1NMX0tFWWAgZW52aXJvbm1lbnQKKwl2YXJpYWJsZS4KKworaHR0cC5zc2xDZXJ0UGFzc3dvcmRQcm90ZWN0ZWQ6OgorCUVuYWJsZSBHaXQncyBwYXNzd29yZCBwcm9tcHQgZm9yIHRoZSBTU0wgY2VydGlmaWNhdGUuICBPdGhlcndpc2UKKwlPcGVuU1NMIHdpbGwgcHJvbXB0IHRoZSB1c2VyLCBwb3NzaWJseSBtYW55IHRpbWVzLCBpZiB0aGUKKwljZXJ0aWZpY2F0ZSBvciBwcml2YXRlIGtleSBpcyBlbmNyeXB0ZWQuICBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUKKwlgR0lUX1NTTF9DRVJUX1BBU1NXT1JEX1BST1RFQ1RFRGAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKK2h0dHAuc3NsQ0FJbmZvOjoKKwlGaWxlIGNvbnRhaW5pbmcgdGhlIGNlcnRpZmljYXRlcyB0byB2ZXJpZnkgdGhlIHBlZXIgd2l0aCB3aGVuCisJZmV0Y2hpbmcgb3IgcHVzaGluZyBvdmVyIEhUVFBTLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUKKwlgR0lUX1NTTF9DQUlORk9gIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitodHRwLnNzbENBUGF0aDo6CisJUGF0aCBjb250YWluaW5nIGZpbGVzIHdpdGggdGhlIENBIGNlcnRpZmljYXRlcyB0byB2ZXJpZnkgdGhlIHBlZXIKKwl3aXRoIHdoZW4gZmV0Y2hpbmcgb3IgcHVzaGluZyBvdmVyIEhUVFBTLiBDYW4gYmUgb3ZlcnJpZGRlbgorCWJ5IHRoZSBgR0lUX1NTTF9DQVBBVEhgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitodHRwLnNzbEJhY2tlbmQ6OgorCU5hbWUgb2YgdGhlIFNTTCBiYWNrZW5kIHRvIHVzZSAoZS5nLiAib3BlbnNzbCIgb3IgInNjaGFubmVsIikuCisJVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiBjVVJMIGxhY2tzIHN1cHBvcnQgZm9yIGNob29zaW5nIHRoZSBTU0wKKwliYWNrZW5kIGF0IHJ1bnRpbWUuCisKK2h0dHAuc2NoYW5uZWxDaGVja1Jldm9rZTo6CisJVXNlZCB0byBlbmZvcmNlIG9yIGRpc2FibGUgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBjaGVja3MgaW4gY1VSTAorCXdoZW4gaHR0cC5zc2xCYWNrZW5kIGlzIHNldCB0byAic2NoYW5uZWwiLiBEZWZhdWx0cyB0byBgdHJ1ZWAgaWYKKwl1bnNldC4gT25seSBuZWNlc3NhcnkgdG8gZGlzYWJsZSB0aGlzIGlmIEdpdCBjb25zaXN0ZW50bHkgZXJyb3JzCisJYW5kIHRoZSBtZXNzYWdlIGlzIGFib3V0IGNoZWNraW5nIHRoZSByZXZvY2F0aW9uIHN0YXR1cyBvZiBhCisJY2VydGlmaWNhdGUuIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgY1VSTCBsYWNrcyBzdXBwb3J0IGZvcgorCXNldHRpbmcgdGhlIHJlbGV2YW50IFNTTCBvcHRpb24gYXQgcnVudGltZS4KKworaHR0cC5zY2hhbm5lbFVzZVNTTENBSW5mbzo6CisJQXMgb2YgY1VSTCB2Ny42MC4wLCB0aGUgU2VjdXJlIENoYW5uZWwgYmFja2VuZCBjYW4gdXNlIHRoZQorCWNlcnRpZmljYXRlIGJ1bmRsZSBwcm92aWRlZCB2aWEgYGh0dHAuc3NsQ0FJbmZvYCwgYnV0IHRoYXQgd291bGQKKwlvdmVycmlkZSB0aGUgV2luZG93cyBDZXJ0aWZpY2F0ZSBTdG9yZS4gU2luY2UgdGhpcyBpcyBub3QgZGVzaXJhYmxlCisJYnkgZGVmYXVsdCwgR2l0IHdpbGwgdGVsbCBjVVJMIG5vdCB0byB1c2UgdGhhdCBidW5kbGUgYnkgZGVmYXVsdAorCXdoZW4gdGhlIGBzY2hhbm5lbGAgYmFja2VuZCB3YXMgY29uZmlndXJlZCB2aWEgYGh0dHAuc3NsQmFja2VuZGAsCisJdW5sZXNzIGBodHRwLnNjaGFubmVsVXNlU1NMQ0FJbmZvYCBvdmVycmlkZXMgdGhpcyBiZWhhdmlvci4KKworaHR0cC5waW5uZWRwdWJrZXk6OgorCVB1YmxpYyBrZXkgb2YgdGhlIGh0dHBzIHNlcnZpY2UuIEl0IG1heSBlaXRoZXIgYmUgdGhlIGZpbGVuYW1lIG9mCisJYSBQRU0gb3IgREVSIGVuY29kZWQgcHVibGljIGtleSBmaWxlIG9yIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGgKKwknc2hhMjU2Ly8nIGZvbGxvd2VkIGJ5IHRoZSBiYXNlNjQgZW5jb2RlZCBzaGEyNTYgaGFzaCBvZiB0aGUKKwlwdWJsaWMga2V5LiBTZWUgYWxzbyBsaWJjdXJsICdDVVJMT1BUX1BJTk5FRFBVQkxJQ0tFWScuIGdpdCB3aWxsCisJZXhpdCB3aXRoIGFuIGVycm9yIGlmIHRoaXMgb3B0aW9uIGlzIHNldCBidXQgbm90IHN1cHBvcnRlZCBieQorCWNVUkwuCisKK2h0dHAuc3NsVHJ5OjoKKwlBdHRlbXB0IHRvIHVzZSBBVVRIIFNTTC9UTFMgYW5kIGVuY3J5cHRlZCBkYXRhIHRyYW5zZmVycworCXdoZW4gY29ubmVjdGluZyB2aWEgcmVndWxhciBGVFAgcHJvdG9jb2wuIFRoaXMgbWlnaHQgYmUgbmVlZGVkCisJaWYgdGhlIEZUUCBzZXJ2ZXIgcmVxdWlyZXMgaXQgZm9yIHNlY3VyaXR5IHJlYXNvbnMgb3IgeW91IHdpc2gKKwl0byBjb25uZWN0IHNlY3VyZWx5IHdoZW5ldmVyIHJlbW90ZSBGVFAgc2VydmVyIHN1cHBvcnRzIGl0LgorCURlZmF1bHQgaXMgZmFsc2Ugc2luY2UgaXQgbWlnaHQgdHJpZ2dlciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24KKwllcnJvcnMgb24gbWlzY29uZmlndXJlZCBzZXJ2ZXJzLgorCitodHRwLm1heFJlcXVlc3RzOjoKKwlIb3cgbWFueSBIVFRQIHJlcXVlc3RzIHRvIGxhdW5jaCBpbiBwYXJhbGxlbC4gQ2FuIGJlIG92ZXJyaWRkZW4KKwlieSB0aGUgYEdJVF9IVFRQX01BWF9SRVFVRVNUU2AgZW52aXJvbm1lbnQgdmFyaWFibGUuIERlZmF1bHQgaXMgNS4KKworaHR0cC5taW5TZXNzaW9uczo6CisJVGhlIG51bWJlciBvZiBjdXJsIHNlc3Npb25zIChjb3VudGVkIGFjcm9zcyBzbG90cykgdG8gYmUga2VwdCBhY3Jvc3MKKwlyZXF1ZXN0cy4gVGhleSB3aWxsIG5vdCBiZSBlbmRlZCB3aXRoIGN1cmxfZWFzeV9jbGVhbnVwKCkgdW50aWwKKwlodHRwX2NsZWFudXAoKSBpcyBpbnZva2VkLiBJZiBVU0VfQ1VSTF9NVUxUSSBpcyBub3QgZGVmaW5lZCwgdGhpcworCXZhbHVlIHdpbGwgYmUgY2FwcGVkIGF0IDEuIERlZmF1bHRzIHRvIDEuCisKK2h0dHAucG9zdEJ1ZmZlcjo6CisJTWF4aW11bSBzaXplIGluIGJ5dGVzIG9mIHRoZSBidWZmZXIgdXNlZCBieSBzbWFydCBIVFRQCisJdHJhbnNwb3J0cyB3aGVuIFBPU1RpbmcgZGF0YSB0byB0aGUgcmVtb3RlIHN5c3RlbS4KKwlGb3IgcmVxdWVzdHMgbGFyZ2VyIHRoYW4gdGhpcyBidWZmZXIgc2l6ZSwgSFRUUC8xLjEgYW5kCisJVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQgaXMgdXNlZCB0byBhdm9pZCBjcmVhdGluZyBhCisJbWFzc2l2ZSBwYWNrIGZpbGUgbG9jYWxseS4gIERlZmF1bHQgaXMgMSBNaUIsIHdoaWNoIGlzCisJc3VmZmljaWVudCBmb3IgbW9zdCByZXF1ZXN0cy4KKysKK05vdGUgdGhhdCByYWlzaW5nIHRoaXMgbGltaXQgaXMgb25seSBlZmZlY3RpdmUgZm9yIGRpc2FibGluZyBjaHVua2VkCit0cmFuc2ZlciBlbmNvZGluZyBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSB1c2VkIG9ubHkgd2hlcmUgdGhlIHJlbW90ZQorc2VydmVyIG9yIGEgcHJveHkgb25seSBzdXBwb3J0cyBIVFRQLzEuMCBvciBpcyBub25jb21wbGlhbnQgd2l0aCB0aGUKK0hUVFAgc3RhbmRhcmQuICBSYWlzaW5nIHRoaXMgaXMgbm90LCBpbiBnZW5lcmFsLCBhbiBlZmZlY3RpdmUgc29sdXRpb24KK2ZvciBtb3N0IHB1c2ggcHJvYmxlbXMsIGJ1dCBjYW4gaW5jcmVhc2UgbWVtb3J5IGNvbnN1bXB0aW9uCitzaWduaWZpY2FudGx5IHNpbmNlIHRoZSBlbnRpcmUgYnVmZmVyIGlzIGFsbG9jYXRlZCBldmVuIGZvciBzbWFsbAorcHVzaGVzLgorCitodHRwLmxvd1NwZWVkTGltaXQsIGh0dHAubG93U3BlZWRUaW1lOjoKKwlJZiB0aGUgSFRUUCB0cmFuc2ZlciBzcGVlZCBpcyBsZXNzIHRoYW4gJ2h0dHAubG93U3BlZWRMaW1pdCcKKwlmb3IgbG9uZ2VyIHRoYW4gJ2h0dHAubG93U3BlZWRUaW1lJyBzZWNvbmRzLCB0aGUgdHJhbnNmZXIgaXMgYWJvcnRlZC4KKwlDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9IVFRQX0xPV19TUEVFRF9MSU1JVGAgYW5kCisJYEdJVF9IVFRQX0xPV19TUEVFRF9USU1FYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKK2h0dHAubm9FUFNWOjoKKwlBIGJvb2xlYW4gd2hpY2ggZGlzYWJsZXMgdXNpbmcgb2YgRVBTViBmdHAgY29tbWFuZCBieSBjdXJsLgorCVRoaXMgY2FuIGhlbHBmdWwgd2l0aCBzb21lICJwb29yIiBmdHAgc2VydmVycyB3aGljaCBkb24ndAorCXN1cHBvcnQgRVBTViBtb2RlLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9DVVJMX0ZUUF9OT19FUFNWYAorCWVudmlyb25tZW50IHZhcmlhYmxlLiBEZWZhdWx0IGlzIGZhbHNlIChjdXJsIHdpbGwgdXNlIEVQU1YpLgorCitodHRwLnVzZXJBZ2VudDo6CisJVGhlIEhUVFAgVVNFUl9BR0VOVCBzdHJpbmcgcHJlc2VudGVkIHRvIGFuIEhUVFAgc2VydmVyLiAgVGhlIGRlZmF1bHQKKwl2YWx1ZSByZXByZXNlbnRzIHRoZSB2ZXJzaW9uIG9mIHRoZSBjbGllbnQgR2l0IHN1Y2ggYXMgZ2l0LzEuNy4xLgorCVRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgdGhpcyB2YWx1ZSB0byBhIG1vcmUgY29tbW9uIHZhbHVlCisJc3VjaCBhcyBNb3ppbGxhLzQuMC4gIFRoaXMgbWF5IGJlIG5lY2Vzc2FyeSwgZm9yIGluc3RhbmNlLCBpZgorCWNvbm5lY3RpbmcgdGhyb3VnaCBhIGZpcmV3YWxsIHRoYXQgcmVzdHJpY3RzIEhUVFAgY29ubmVjdGlvbnMgdG8gYSBzZXQKKwlvZiBjb21tb24gVVNFUl9BR0VOVCBzdHJpbmdzIChidXQgbm90IGluY2x1ZGluZyB0aG9zZSBsaWtlIGdpdC8xLjcuMSkuCisJQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfSFRUUF9VU0VSX0FHRU5UYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworaHR0cC5mb2xsb3dSZWRpcmVjdHM6OgorCVdoZXRoZXIgZ2l0IHNob3VsZCBmb2xsb3cgSFRUUCByZWRpcmVjdHMuIElmIHNldCB0byBgdHJ1ZWAsIGdpdAorCXdpbGwgdHJhbnNwYXJlbnRseSBmb2xsb3cgYW55IHJlZGlyZWN0IGlzc3VlZCBieSBhIHNlcnZlciBpdAorCWVuY291bnRlcnMuIElmIHNldCB0byBgZmFsc2VgLCBnaXQgd2lsbCB0cmVhdCBhbGwgcmVkaXJlY3RzIGFzCisJZXJyb3JzLiBJZiBzZXQgdG8gYGluaXRpYWxgLCBnaXQgd2lsbCBmb2xsb3cgcmVkaXJlY3RzIG9ubHkgZm9yCisJdGhlIGluaXRpYWwgcmVxdWVzdCB0byBhIHJlbW90ZSwgYnV0IG5vdCBmb3Igc3Vic2VxdWVudAorCWZvbGxvdy11cCBIVFRQIHJlcXVlc3RzLiBTaW5jZSBnaXQgdXNlcyB0aGUgcmVkaXJlY3RlZCBVUkwgYXMKKwl0aGUgYmFzZSBmb3IgdGhlIGZvbGxvdy11cCByZXF1ZXN0cywgdGhpcyBpcyBnZW5lcmFsbHkKKwlzdWZmaWNpZW50LiBUaGUgZGVmYXVsdCBpcyBgaW5pdGlhbGAuCisKK2h0dHAuPHVybD4uKjo6CisJQW55IG9mIHRoZSBodHRwLiogb3B0aW9ucyBhYm92ZSBjYW4gYmUgYXBwbGllZCBzZWxlY3RpdmVseSB0byBzb21lIFVSTHMuCisJRm9yIGEgY29uZmlnIGtleSB0byBtYXRjaCBhIFVSTCwgZWFjaCBlbGVtZW50IG9mIHRoZSBjb25maWcga2V5IGlzCisJY29tcGFyZWQgdG8gdGhhdCBvZiB0aGUgVVJMLCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorKworLS0KKy4gU2NoZW1lIChlLmcuLCBgaHR0cHNgIGluIGBodHRwczovL2V4YW1wbGUuY29tL2ApLiBUaGlzIGZpZWxkCisgIG11c3QgbWF0Y2ggZXhhY3RseSBiZXR3ZWVuIHRoZSBjb25maWcga2V5IGFuZCB0aGUgVVJMLgorCisuIEhvc3QvZG9tYWluIG5hbWUgKGUuZy4sIGBleGFtcGxlLmNvbWAgaW4gYGh0dHBzOi8vZXhhbXBsZS5jb20vYCkuCisgIFRoaXMgZmllbGQgbXVzdCBtYXRjaCBiZXR3ZWVuIHRoZSBjb25maWcga2V5IGFuZCB0aGUgVVJMLiBJdCBpcworICBwb3NzaWJsZSB0byBzcGVjaWZ5IGEgYCpgIGFzIHBhcnQgb2YgdGhlIGhvc3QgbmFtZSB0byBtYXRjaCBhbGwgc3ViZG9tYWlucworICBhdCB0aGlzIGxldmVsLiBgaHR0cHM6Ly8qLmV4YW1wbGUuY29tL2AgZm9yIGV4YW1wbGUgd291bGQgbWF0Y2gKKyAgYGh0dHBzOi8vZm9vLmV4YW1wbGUuY29tL2AsIGJ1dCBub3QgYGh0dHBzOi8vZm9vLmJhci5leGFtcGxlLmNvbS9gLgorCisuIFBvcnQgbnVtYmVyIChlLmcuLCBgODA4MGAgaW4gYGh0dHA6Ly9leGFtcGxlLmNvbTo4MDgwL2ApLgorICBUaGlzIGZpZWxkIG11c3QgbWF0Y2ggZXhhY3RseSBiZXR3ZWVuIHRoZSBjb25maWcga2V5IGFuZCB0aGUgVVJMLgorICBPbWl0dGVkIHBvcnQgbnVtYmVycyBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gdGhlIGNvcnJlY3QKKyAgZGVmYXVsdCBmb3IgdGhlIHNjaGVtZSBiZWZvcmUgbWF0Y2hpbmcuCisKKy4gUGF0aCAoZS5nLiwgYHJlcG8uZ2l0YCBpbiBgaHR0cHM6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdGApLiBUaGUKKyAgcGF0aCBmaWVsZCBvZiB0aGUgY29uZmlnIGtleSBtdXN0IG1hdGNoIHRoZSBwYXRoIGZpZWxkIG9mIHRoZSBVUkwKKyAgZWl0aGVyIGV4YWN0bHkgb3IgYXMgYSBwcmVmaXggb2Ygc2xhc2gtZGVsaW1pdGVkIHBhdGggZWxlbWVudHMuICBUaGlzIG1lYW5zCisgIGEgY29uZmlnIGtleSB3aXRoIHBhdGggYGZvby9gIG1hdGNoZXMgVVJMIHBhdGggYGZvby9iYXJgLiAgQSBwcmVmaXggY2FuIG9ubHkKKyAgbWF0Y2ggb24gYSBzbGFzaCAoYC9gKSBib3VuZGFyeS4gIExvbmdlciBtYXRjaGVzIHRha2UgcHJlY2VkZW5jZSAoc28gYSBjb25maWcKKyAga2V5IHdpdGggcGF0aCBgZm9vL2JhcmAgaXMgYSBiZXR0ZXIgbWF0Y2ggdG8gVVJMIHBhdGggYGZvby9iYXJgIHRoYW4gYSBjb25maWcKKyAga2V5IHdpdGgganVzdCBwYXRoIGBmb28vYCkuCisKKy4gVXNlciBuYW1lIChlLmcuLCBgdXNlcmAgaW4gYGh0dHBzOi8vdXNlckBleGFtcGxlLmNvbS9yZXBvLmdpdGApLiBJZgorICB0aGUgY29uZmlnIGtleSBoYXMgYSB1c2VyIG5hbWUgaXQgbXVzdCBtYXRjaCB0aGUgdXNlciBuYW1lIGluIHRoZQorICBVUkwgZXhhY3RseS4gSWYgdGhlIGNvbmZpZyBrZXkgZG9lcyBub3QgaGF2ZSBhIHVzZXIgbmFtZSwgdGhhdAorICBjb25maWcga2V5IHdpbGwgbWF0Y2ggYSBVUkwgd2l0aCBhbnkgdXNlciBuYW1lIChpbmNsdWRpbmcgbm9uZSksCisgIGJ1dCBhdCBhIGxvd2VyIHByZWNlZGVuY2UgdGhhbiBhIGNvbmZpZyBrZXkgd2l0aCBhIHVzZXIgbmFtZS4KKy0tCisrCitUaGUgbGlzdCBhYm92ZSBpcyBvcmRlcmVkIGJ5IGRlY3JlYXNpbmcgcHJlY2VkZW5jZTsgYSBVUkwgdGhhdCBtYXRjaGVzCithIGNvbmZpZyBrZXkncyBwYXRoIGlzIHByZWZlcnJlZCB0byBvbmUgdGhhdCBtYXRjaGVzIGl0cyB1c2VyIG5hbWUuIEZvciBleGFtcGxlLAoraWYgdGhlIFVSTCBpcyBgaHR0cHM6Ly91c2VyQGV4YW1wbGUuY29tL2Zvby9iYXJgIGEgY29uZmlnIGtleSBtYXRjaCBvZgorYGh0dHBzOi8vZXhhbXBsZS5jb20vZm9vYCB3aWxsIGJlIHByZWZlcnJlZCBvdmVyIGEgY29uZmlnIGtleSBtYXRjaCBvZgorYGh0dHBzOi8vdXNlckBleGFtcGxlLmNvbWAuCisrCitBbGwgVVJMcyBhcmUgbm9ybWFsaXplZCBiZWZvcmUgYXR0ZW1wdGluZyBhbnkgbWF0Y2hpbmcgKHRoZSBwYXNzd29yZCBwYXJ0LAoraWYgZW1iZWRkZWQgaW4gdGhlIFVSTCwgaXMgYWx3YXlzIGlnbm9yZWQgZm9yIG1hdGNoaW5nIHB1cnBvc2VzKSBzbyB0aGF0CitlcXVpdmFsZW50IFVSTHMgdGhhdCBhcmUgc2ltcGx5IHNwZWxsZWQgZGlmZmVyZW50bHkgd2lsbCBtYXRjaCBwcm9wZXJseS4KK0Vudmlyb25tZW50IHZhcmlhYmxlIHNldHRpbmdzIGFsd2F5cyBvdmVycmlkZSBhbnkgbWF0Y2hlcy4gIFRoZSBVUkxzIHRoYXQgYXJlCittYXRjaGVkIGFnYWluc3QgYXJlIHRob3NlIGdpdmVuIGRpcmVjdGx5IHRvIEdpdCBjb21tYW5kcy4gIFRoaXMgbWVhbnMgYW55IFVSTHMKK3Zpc2l0ZWQgYXMgYSByZXN1bHQgb2YgYSByZWRpcmVjdGlvbiBkbyBub3QgcGFydGljaXBhdGUgaW4gbWF0Y2hpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9pMThuLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2kxOG4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMjU2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9pMThuLnR4dApAQCAtMCwwICsxLDEwIEBACitpMThuLmNvbW1pdEVuY29kaW5nOjoKKwlDaGFyYWN0ZXIgZW5jb2RpbmcgdGhlIGNvbW1pdCBtZXNzYWdlcyBhcmUgc3RvcmVkIGluOyBHaXQgaXRzZWxmCisJZG9lcyBub3QgY2FyZSBwZXIgc2UsIGJ1dCB0aGlzIGluZm9ybWF0aW9uIGlzIG5lY2Vzc2FyeSBlLmcuIHdoZW4KKwlpbXBvcnRpbmcgY29tbWl0cyBmcm9tIGVtYWlscyBvciBpbiB0aGUgZ2l0ayBncmFwaGljYWwgaGlzdG9yeQorCWJyb3dzZXIgKGFuZCBwb3NzaWJseSBhdCBvdGhlciBwbGFjZXMgaW4gdGhlIGZ1dHVyZSBvciBpbiBvdGhlcgorCXBvcmNlbGFpbnMpLiBTZWUgZS5nLiBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXS4gRGVmYXVsdHMgdG8gJ3V0Zi04Jy4KKworaTE4bi5sb2dPdXRwdXRFbmNvZGluZzo6CisJQ2hhcmFjdGVyIGVuY29kaW5nIHRoZSBjb21taXQgbWVzc2FnZXMgYXJlIGNvbnZlcnRlZCB0byB3aGVuCisJcnVubmluZyAnZ2l0IGxvZycgYW5kIGZyaWVuZHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9pbWFwLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2ltYXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MTY2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9pbWFwLnR4dApAQCAtMCwwICsxLDQ0IEBACitpbWFwLmZvbGRlcjo6CisJVGhlIGZvbGRlciB0byBkcm9wIHRoZSBtYWlscyBpbnRvLCB3aGljaCBpcyB0eXBpY2FsbHkgdGhlIERyYWZ0cworCWZvbGRlci4gRm9yIGV4YW1wbGU6ICJJTkJPWC5EcmFmdHMiLCAiSU5CT1gvRHJhZnRzIiBvcgorCSJbR21haWxdL0RyYWZ0cyIuIFJlcXVpcmVkLgorCitpbWFwLnR1bm5lbDo6CisJQ29tbWFuZCB1c2VkIHRvIHNldHVwIGEgdHVubmVsIHRvIHRoZSBJTUFQIHNlcnZlciB0aHJvdWdoIHdoaWNoCisJY29tbWFuZHMgd2lsbCBiZSBwaXBlZCBpbnN0ZWFkIG9mIHVzaW5nIGEgZGlyZWN0IG5ldHdvcmsgY29ubmVjdGlvbgorCXRvIHRoZSBzZXJ2ZXIuIFJlcXVpcmVkIHdoZW4gaW1hcC5ob3N0IGlzIG5vdCBzZXQuCisKK2ltYXAuaG9zdDo6CisJQSBVUkwgaWRlbnRpZnlpbmcgdGhlIHNlcnZlci4gVXNlIGFuIGBpbWFwOi8vYCBwcmVmaXggZm9yIG5vbi1zZWN1cmUKKwljb25uZWN0aW9ucyBhbmQgYW4gYGltYXBzOi8vYCBwcmVmaXggZm9yIHNlY3VyZSBjb25uZWN0aW9ucy4KKwlJZ25vcmVkIHdoZW4gaW1hcC50dW5uZWwgaXMgc2V0LCBidXQgcmVxdWlyZWQgb3RoZXJ3aXNlLgorCitpbWFwLnVzZXI6OgorCVRoZSB1c2VybmFtZSB0byB1c2Ugd2hlbiBsb2dnaW5nIGluIHRvIHRoZSBzZXJ2ZXIuCisKK2ltYXAucGFzczo6CisJVGhlIHBhc3N3b3JkIHRvIHVzZSB3aGVuIGxvZ2dpbmcgaW4gdG8gdGhlIHNlcnZlci4KKworaW1hcC5wb3J0OjoKKwlBbiBpbnRlZ2VyIHBvcnQgbnVtYmVyIHRvIGNvbm5lY3QgdG8gb24gdGhlIHNlcnZlci4KKwlEZWZhdWx0cyB0byAxNDMgZm9yIGltYXA6Ly8gaG9zdHMgYW5kIDk5MyBmb3IgaW1hcHM6Ly8gaG9zdHMuCisJSWdub3JlZCB3aGVuIGltYXAudHVubmVsIGlzIHNldC4KKworaW1hcC5zc2x2ZXJpZnk6OgorCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSB2ZXJpZmljYXRpb24gb2YgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZQorCXVzZWQgYnkgdGhlIFNTTC9UTFMgY29ubmVjdGlvbi4gRGVmYXVsdCBpcyBgdHJ1ZWAuIElnbm9yZWQgd2hlbgorCWltYXAudHVubmVsIGlzIHNldC4KKworaW1hcC5wcmVmb3JtYXR0ZWRIVE1MOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgdGhlIHVzZSBvZiBodG1sIGVuY29kaW5nIHdoZW4gc2VuZGluZworCWEgcGF0Y2guICBBbiBodG1sIGVuY29kZWQgcGF0Y2ggd2lsbCBiZSBicmFja2V0ZWQgd2l0aCA8cHJlPgorCWFuZCBoYXZlIGEgY29udGVudCB0eXBlIG9mIHRleHQvaHRtbC4gIElyb25pY2FsbHksIGVuYWJsaW5nIHRoaXMKKwlvcHRpb24gY2F1c2VzIFRodW5kZXJiaXJkIHRvIHNlbmQgdGhlIHBhdGNoIGFzIGEgcGxhaW4vdGV4dCwKKwlmb3JtYXQ9Zml4ZWQgZW1haWwuICBEZWZhdWx0IGlzIGBmYWxzZWAuCisKK2ltYXAuYXV0aE1ldGhvZDo6CisJU3BlY2lmeSBhdXRoZW50aWNhdGUgbWV0aG9kIGZvciBhdXRoZW50aWNhdGlvbiB3aXRoIElNQVAgc2VydmVyLgorCUlmIEdpdCB3YXMgYnVpbHQgd2l0aCB0aGUgTk9fQ1VSTCBvcHRpb24sIG9yIGlmIHlvdXIgY3VybCB2ZXJzaW9uIGlzIG9sZGVyCisJdGhhbiA3LjM0LjAsIG9yIGlmIHlvdSdyZSBydW5uaW5nIGdpdC1pbWFwLXNlbmQgd2l0aCB0aGUgYC0tbm8tY3VybGAKKwlvcHRpb24sIHRoZSBvbmx5IHN1cHBvcnRlZCBtZXRob2QgaXMgJ0NSQU0tTUQ1Jy4gSWYgdGhpcyBpcyBub3Qgc2V0CisJdGhlbiAnZ2l0IGltYXAtc2VuZCcgdXNlcyB0aGUgYmFzaWMgSU1BUCBwbGFpbnRleHQgTE9HSU4gY29tbWFuZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2luZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2luZGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2I1MGIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvaW5kZXgudHh0CkBAIC0wLDAgKzEsMjcgQEAKK2luZGV4LnJlY29yZEVuZE9mSW5kZXhFbnRyaWVzOjoKKwlTcGVjaWZpZXMgd2hldGhlciB0aGUgaW5kZXggZmlsZSBzaG91bGQgaW5jbHVkZSBhbiAiRW5kIE9mIEluZGV4CisJRW50cnkiIHNlY3Rpb24uIFRoaXMgcmVkdWNlcyBpbmRleCBsb2FkIHRpbWUgb24gbXVsdGlwcm9jZXNzb3IKKwltYWNoaW5lcyBidXQgcHJvZHVjZXMgYSBtZXNzYWdlICJpZ25vcmluZyBFT0lFIGV4dGVuc2lvbiIgd2hlbgorCXJlYWRpbmcgdGhlIGluZGV4IHVzaW5nIEdpdCB2ZXJzaW9ucyBiZWZvcmUgMi4yMC4gRGVmYXVsdHMgdG8KKwkndHJ1ZScgaWYgaW5kZXgudGhyZWFkcyBoYXMgYmVlbiBleHBsaWNpdGx5IGVuYWJsZWQsICdmYWxzZScKKwlvdGhlcndpc2UuCisKK2luZGV4LnJlY29yZE9mZnNldFRhYmxlOjoKKwlTcGVjaWZpZXMgd2hldGhlciB0aGUgaW5kZXggZmlsZSBzaG91bGQgaW5jbHVkZSBhbiAiSW5kZXggRW50cnkKKwlPZmZzZXQgVGFibGUiIHNlY3Rpb24uIFRoaXMgcmVkdWNlcyBpbmRleCBsb2FkIHRpbWUgb24KKwltdWx0aXByb2Nlc3NvciBtYWNoaW5lcyBidXQgcHJvZHVjZXMgYSBtZXNzYWdlICJpZ25vcmluZyBJRU9UCisJZXh0ZW5zaW9uIiB3aGVuIHJlYWRpbmcgdGhlIGluZGV4IHVzaW5nIEdpdCB2ZXJzaW9ucyBiZWZvcmUgMi4yMC4KKwlEZWZhdWx0cyB0byAndHJ1ZScgaWYgaW5kZXgudGhyZWFkcyBoYXMgYmVlbiBleHBsaWNpdGx5IGVuYWJsZWQsCisJJ2ZhbHNlJyBvdGhlcndpc2UuCisKK2luZGV4LnRocmVhZHM6OgorCVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdG8gc3Bhd24gd2hlbiBsb2FkaW5nIHRoZSBpbmRleC4KKwlUaGlzIGlzIG1lYW50IHRvIHJlZHVjZSBpbmRleCBsb2FkIHRpbWUgb24gbXVsdGlwcm9jZXNzb3IgbWFjaGluZXMuCisJU3BlY2lmeWluZyAwIG9yICd0cnVlJyB3aWxsIGNhdXNlIEdpdCB0byBhdXRvLWRldGVjdCB0aGUgbnVtYmVyIG9mCisJQ1BVJ3MgYW5kIHNldCB0aGUgbnVtYmVyIG9mIHRocmVhZHMgYWNjb3JkaW5nbHkuIFNwZWNpZnlpbmcgMSBvcgorCSdmYWxzZScgd2lsbCBkaXNhYmxlIG11bHRpdGhyZWFkaW5nLiBEZWZhdWx0cyB0byAndHJ1ZScuCisKK2luZGV4LnZlcnNpb246OgorCVNwZWNpZnkgdGhlIHZlcnNpb24gd2l0aCB3aGljaCBuZXcgaW5kZXggZmlsZXMgc2hvdWxkIGJlCisJaW5pdGlhbGl6ZWQuICBUaGlzIGRvZXMgbm90IGFmZmVjdCBleGlzdGluZyByZXBvc2l0b3JpZXMuCisJSWYgYGZlYXR1cmUubWFueUZpbGVzYCBpcyBlbmFibGVkLCB0aGVuIHRoZSBkZWZhdWx0IGlzIDQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9pbml0LnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2luaXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZmE4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9pbml0LnR4dApAQCAtMCwwICsxLDMgQEAKK2luaXQudGVtcGxhdGVEaXI6OgorCVNwZWNpZnkgdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIGNvcGllZC4KKwkoU2VlIHRoZSAiVEVNUExBVEUgRElSRUNUT1JZIiBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWluaXRbMV0uKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvaW5zdGF3ZWIudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvaW5zdGF3ZWIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwY2IyZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9pbnN0YXdlYi50eHQKQEAgLTAsMCArMSwyMCBAQAoraW5zdGF3ZWIuYnJvd3Nlcjo6CisJU3BlY2lmeSB0aGUgcHJvZ3JhbSB0aGF0IHdpbGwgYmUgdXNlZCB0byBicm93c2UgeW91ciB3b3JraW5nCisJcmVwb3NpdG9yeSBpbiBnaXR3ZWIuIFNlZSBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXS4KKworaW5zdGF3ZWIuaHR0cGQ6OgorCVRoZSBIVFRQIGRhZW1vbiBjb21tYW5kLWxpbmUgdG8gc3RhcnQgZ2l0d2ViIG9uIHlvdXIgd29ya2luZworCXJlcG9zaXRvcnkuIFNlZSBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXS4KKworaW5zdGF3ZWIubG9jYWw6OgorCUlmIHRydWUgdGhlIHdlYiBzZXJ2ZXIgc3RhcnRlZCBieSBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXSB3aWxsCisJYmUgYm91bmQgdG8gdGhlIGxvY2FsIElQICgxMjcuMC4wLjEpLgorCitpbnN0YXdlYi5tb2R1bGVQYXRoOjoKKwlUaGUgZGVmYXVsdCBtb2R1bGUgcGF0aCBmb3IgbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0gdG8gdXNlCisJaW5zdGVhZCBvZiAvdXNyL2xpYi9hcGFjaGUyL21vZHVsZXMuICBPbmx5IHVzZWQgaWYgaHR0cGQKKwlpcyBBcGFjaGUuCisKK2luc3Rhd2ViLnBvcnQ6OgorCVRoZSBwb3J0IG51bWJlciB0byBiaW5kIHRoZSBnaXR3ZWIgaHR0cGQgdG8uIFNlZQorCWxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvaW50ZXJhY3RpdmUudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvaW50ZXJhY3RpdmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDNjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9pbnRlcmFjdGl2ZS50eHQKQEAgLTAsMCArMSwxNyBAQAoraW50ZXJhY3RpdmUuc2luZ2xlS2V5OjoKKwlJbiBpbnRlcmFjdGl2ZSBjb21tYW5kcywgYWxsb3cgdGhlIHVzZXIgdG8gcHJvdmlkZSBvbmUtbGV0dGVyCisJaW5wdXQgd2l0aCBhIHNpbmdsZSBrZXkgKGkuZS4sIHdpdGhvdXQgaGl0dGluZyBlbnRlcikuCisJQ3VycmVudGx5IHRoaXMgaXMgdXNlZCBieSB0aGUgYC0tcGF0Y2hgIG1vZGUgb2YKKwlsaW5rZ2l0OmdpdC1hZGRbMV0sIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdLAorCWxpbmtnaXQ6Z2l0LXJlc3RvcmVbMV0sIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSwKKwlsaW5rZ2l0OmdpdC1yZXNldFsxXSwgYW5kIGxpbmtnaXQ6Z2l0LXN0YXNoWzFdLiBOb3RlIHRoYXQgdGhpcworCXNldHRpbmcgaXMgc2lsZW50bHkgaWdub3JlZCBpZiBwb3J0YWJsZSBrZXlzdHJva2UgaW5wdXQKKwlpcyBub3QgYXZhaWxhYmxlOyByZXF1aXJlcyB0aGUgUGVybCBtb2R1bGUgVGVybTo6UmVhZEtleS4KKworaW50ZXJhY3RpdmUuZGlmZkZpbHRlcjo6CisJV2hlbiBhbiBpbnRlcmFjdGl2ZSBjb21tYW5kIChzdWNoIGFzIGBnaXQgYWRkIC0tcGF0Y2hgKSBzaG93cworCWEgY29sb3JpemVkIGRpZmYsIGdpdCB3aWxsIHBpcGUgdGhlIGRpZmYgdGhyb3VnaCB0aGUgc2hlbGwKKwljb21tYW5kIGRlZmluZWQgYnkgdGhpcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiBUaGUgY29tbWFuZCBtYXkKKwltYXJrIHVwIHRoZSBkaWZmIGZ1cnRoZXIgZm9yIGh1bWFuIGNvbnN1bXB0aW9uLCBwcm92aWRlZCB0aGF0IGl0CisJcmV0YWlucyBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2Ugd2l0aCB0aGUgbGluZXMgaW4gdGhlCisJb3JpZ2luYWwgZGlmZi4gRGVmYXVsdHMgdG8gZGlzYWJsZWQgKG5vIGZpbHRlcmluZykuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9sb2cudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvbG9nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhkNWZkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvbG9nLnR4dApAQCAtMCwwICsxLDUwIEBACitsb2cuYWJicmV2Q29tbWl0OjoKKwlJZiB0cnVlLCBtYWtlcyBsaW5rZ2l0OmdpdC1sb2dbMV0sIGxpbmtnaXQ6Z2l0LXNob3dbMV0sIGFuZAorCWxpbmtnaXQ6Z2l0LXdoYXRjaGFuZ2VkWzFdIGFzc3VtZSBgLS1hYmJyZXYtY29tbWl0YC4gWW91IG1heQorCW92ZXJyaWRlIHRoaXMgb3B0aW9uIHdpdGggYC0tbm8tYWJicmV2LWNvbW1pdGAuCisKK2xvZy5kYXRlOjoKKwlTZXQgdGhlIGRlZmF1bHQgZGF0ZS10aW1lIG1vZGUgZm9yIHRoZSAnbG9nJyBjb21tYW5kLgorCVNldHRpbmcgYSB2YWx1ZSBmb3IgbG9nLmRhdGUgaXMgc2ltaWxhciB0byB1c2luZyAnZ2l0IGxvZycncworCWAtLWRhdGVgIG9wdGlvbi4gIFNlZSBsaW5rZ2l0OmdpdC1sb2dbMV0gZm9yIGRldGFpbHMuCisKK2xvZy5kZWNvcmF0ZTo6CisJUHJpbnQgb3V0IHRoZSByZWYgbmFtZXMgb2YgYW55IGNvbW1pdHMgdGhhdCBhcmUgc2hvd24gYnkgdGhlIGxvZworCWNvbW1hbmQuIElmICdzaG9ydCcgaXMgc3BlY2lmaWVkLCB0aGUgcmVmIG5hbWUgcHJlZml4ZXMgJ3JlZnMvaGVhZHMvJywKKwkncmVmcy90YWdzLycgYW5kICdyZWZzL3JlbW90ZXMvJyB3aWxsIG5vdCBiZSBwcmludGVkLiBJZiAnZnVsbCcgaXMKKwlzcGVjaWZpZWQsIHRoZSBmdWxsIHJlZiBuYW1lIChpbmNsdWRpbmcgcHJlZml4KSB3aWxsIGJlIHByaW50ZWQuCisJSWYgJ2F1dG8nIGlzIHNwZWNpZmllZCwgdGhlbiBpZiB0aGUgb3V0cHV0IGlzIGdvaW5nIHRvIGEgdGVybWluYWwsCisJdGhlIHJlZiBuYW1lcyBhcmUgc2hvd24gYXMgaWYgJ3Nob3J0JyB3ZXJlIGdpdmVuLCBvdGhlcndpc2Ugbm8gcmVmCisJbmFtZXMgYXJlIHNob3duLiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBgLS1kZWNvcmF0ZWAgb3B0aW9uCisJb2YgdGhlIGBnaXQgbG9nYC4KKworbG9nLmV4Y2x1ZGVEZWNvcmF0aW9uOjoKKwlFeGNsdWRlIHRoZSBzcGVjaWZpZWQgcGF0dGVybnMgZnJvbSB0aGUgbG9nIGRlY29yYXRpb25zLiBUaGlzIGlzCisJc2ltaWxhciB0byB0aGUgYC0tZGVjb3JhdGUtcmVmcy1leGNsdWRlYCBjb21tYW5kLWxpbmUgb3B0aW9uLCBidXQKKwl0aGUgY29uZmlnIG9wdGlvbiBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYC0tZGVjb3JhdGUtcmVmc2AKKwlvcHRpb24uCisKK2xvZy5mb2xsb3c6OgorCUlmIGB0cnVlYCwgYGdpdCBsb2dgIHdpbGwgYWN0IGFzIGlmIHRoZSBgLS1mb2xsb3dgIG9wdGlvbiB3YXMgdXNlZCB3aGVuCisJYSBzaW5nbGUgPHBhdGg+IGlzIGdpdmVuLiAgVGhpcyBoYXMgdGhlIHNhbWUgbGltaXRhdGlvbnMgYXMgYC0tZm9sbG93YCwKKwlpLmUuIGl0IGNhbm5vdCBiZSB1c2VkIHRvIGZvbGxvdyBtdWx0aXBsZSBmaWxlcyBhbmQgZG9lcyBub3Qgd29yayB3ZWxsCisJb24gbm9uLWxpbmVhciBoaXN0b3J5LgorCitsb2cuZ3JhcGhDb2xvcnM6OgorCUEgbGlzdCBvZiBjb2xvcnMsIHNlcGFyYXRlZCBieSBjb21tYXMsIHRoYXQgY2FuIGJlIHVzZWQgdG8gZHJhdworCWhpc3RvcnkgbGluZXMgaW4gYGdpdCBsb2cgLS1ncmFwaGAuCisKK2xvZy5zaG93Um9vdDo6CisJSWYgdHJ1ZSwgdGhlIGluaXRpYWwgY29tbWl0IHdpbGwgYmUgc2hvd24gYXMgYSBiaWcgY3JlYXRpb24gZXZlbnQuCisJVGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgZGlmZiBhZ2FpbnN0IGFuIGVtcHR5IHRyZWUuCisJVG9vbHMgbGlrZSBsaW5rZ2l0OmdpdC1sb2dbMV0gb3IgbGlua2dpdDpnaXQtd2hhdGNoYW5nZWRbMV0sIHdoaWNoCisJbm9ybWFsbHkgaGlkZSB0aGUgcm9vdCBjb21taXQgd2lsbCBub3cgc2hvdyBpdC4gVHJ1ZSBieSBkZWZhdWx0LgorCitsb2cuc2hvd1NpZ25hdHVyZTo6CisJSWYgdHJ1ZSwgbWFrZXMgbGlua2dpdDpnaXQtbG9nWzFdLCBsaW5rZ2l0OmdpdC1zaG93WzFdLCBhbmQKKwlsaW5rZ2l0OmdpdC13aGF0Y2hhbmdlZFsxXSBhc3N1bWUgYC0tc2hvdy1zaWduYXR1cmVgLgorCitsb2cubWFpbG1hcDo6CisJSWYgdHJ1ZSwgbWFrZXMgbGlua2dpdDpnaXQtbG9nWzFdLCBsaW5rZ2l0OmdpdC1zaG93WzFdLCBhbmQKKwlsaW5rZ2l0OmdpdC13aGF0Y2hhbmdlZFsxXSBhc3N1bWUgYC0tdXNlLW1haWxtYXBgLCBvdGhlcndpc2UKKwlhc3N1bWUgYC0tbm8tdXNlLW1haWxtYXBgLiBUcnVlIGJ5IGRlZmF1bHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9tYWlsaW5mby50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9tYWlsaW5mby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg1NGQ0YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL21haWxpbmZvLnR4dApAQCAtMCwwICsxLDYgQEAKK21haWxpbmZvLnNjaXNzb3JzOjoKKwlJZiB0cnVlLCBtYWtlcyBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSAoYW5kIHRoZXJlZm9yZQorCWxpbmtnaXQ6Z2l0LWFtWzFdKSBhY3QgYnkgZGVmYXVsdCBhcyBpZiB0aGUgLS1zY2lzc29ycyBvcHRpb24KKwl3YXMgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQtbGluZS4gV2hlbiBhY3RpdmUsIHRoaXMgZmVhdHVyZXMKKwlyZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgbWVzc2FnZSBib2R5IGJlZm9yZSBhIHNjaXNzb3JzCisJbGluZSAoaS5lLiBjb25zaXN0aW5nIG1haW5seSBvZiAiPjgiLCAiODwiIGFuZCAiLSIpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvbWFpbG1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9tYWlsbWFwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGNiYzMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvbWFpbG1hcC50eHQKQEAgLTAsMCArMSwxNSBAQAorbWFpbG1hcC5maWxlOjoKKwlUaGUgbG9jYXRpb24gb2YgYW4gYXVnbWVudGluZyBtYWlsbWFwIGZpbGUuIFRoZSBkZWZhdWx0CisJbWFpbG1hcCwgbG9jYXRlZCBpbiB0aGUgcm9vdCBvZiB0aGUgcmVwb3NpdG9yeSwgaXMgbG9hZGVkCisJZmlyc3QsIHRoZW4gdGhlIG1haWxtYXAgZmlsZSBwb2ludGVkIHRvIGJ5IHRoaXMgdmFyaWFibGUuCisJVGhlIGxvY2F0aW9uIG9mIHRoZSBtYWlsbWFwIGZpbGUgbWF5IGJlIGluIGEgcmVwb3NpdG9yeQorCXN1YmRpcmVjdG9yeSwgb3Igc29tZXdoZXJlIG91dHNpZGUgb2YgdGhlIHJlcG9zaXRvcnkgaXRzZWxmLgorCVNlZSBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBhbmQgbGlua2dpdDpnaXQtYmxhbWVbMV0uCisKK21haWxtYXAuYmxvYjo6CisJTGlrZSBgbWFpbG1hcC5maWxlYCwgYnV0IGNvbnNpZGVyIHRoZSB2YWx1ZSBhcyBhIHJlZmVyZW5jZSB0byBhCisJYmxvYiBpbiB0aGUgcmVwb3NpdG9yeS4gSWYgYm90aCBgbWFpbG1hcC5maWxlYCBhbmQKKwlgbWFpbG1hcC5ibG9iYCBhcmUgZ2l2ZW4sIGJvdGggYXJlIHBhcnNlZCwgd2l0aCBlbnRyaWVzIGZyb20KKwlgbWFpbG1hcC5maWxlYCB0YWtpbmcgcHJlY2VkZW5jZS4gSW4gYSBiYXJlIHJlcG9zaXRvcnksIHRoaXMKKwlkZWZhdWx0cyB0byBgSEVBRDoubWFpbG1hcGAuIEluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeSwgaXQKKwlkZWZhdWx0cyB0byBlbXB0eS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL21hbi50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9tYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjdkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9tYW4udHh0CkBAIC0wLDAgKzEsMTIgQEAKK21hbi52aWV3ZXI6OgorCVNwZWNpZnkgdGhlIHByb2dyYW1zIHRoYXQgbWF5IGJlIHVzZWQgdG8gZGlzcGxheSBoZWxwIGluIHRoZQorCSdtYW4nIGZvcm1hdC4gU2VlIGxpbmtnaXQ6Z2l0LWhlbHBbMV0uCisKK21hbi48dG9vbD4uY21kOjoKKwlTcGVjaWZ5IHRoZSBjb21tYW5kIHRvIGludm9rZSB0aGUgc3BlY2lmaWVkIG1hbiB2aWV3ZXIuIFRoZQorCXNwZWNpZmllZCBjb21tYW5kIGlzIGV2YWx1YXRlZCBpbiBzaGVsbCB3aXRoIHRoZSBtYW4gcGFnZQorCXBhc3NlZCBhcyBhcmd1bWVudC4gKFNlZSBsaW5rZ2l0OmdpdC1oZWxwWzFdLikKKworbWFuLjx0b29sPi5wYXRoOjoKKwlPdmVycmlkZSB0aGUgcGF0aCBmb3IgdGhlIGdpdmVuIHRvb2wgdGhhdCBtYXkgYmUgdXNlZCB0bworCWRpc3BsYXkgaGVscCBpbiB0aGUgJ21hbicgZm9ybWF0LiBTZWUgbGlua2dpdDpnaXQtaGVscFsxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL21lcmdlLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL21lcmdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjJlZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvbWVyZ2UudHh0CkBAIC0wLDAgKzEsMTE2IEBACittZXJnZS5jb25mbGljdFN0eWxlOjoKKwlTcGVjaWZ5IHRoZSBzdHlsZSBpbiB3aGljaCBjb25mbGljdGVkIGh1bmtzIGFyZSB3cml0dGVuIG91dCB0bworCXdvcmtpbmcgdHJlZSBmaWxlcyB1cG9uIG1lcmdlLiAgVGhlIGRlZmF1bHQgaXMgIm1lcmdlIiwgd2hpY2gKKwlzaG93cyBhIGA8PDw8PDw8YCBjb25mbGljdCBtYXJrZXIsIGNoYW5nZXMgbWFkZSBieSBvbmUgc2lkZSwKKwlhIGA9PT09PT09YCBtYXJrZXIsIGNoYW5nZXMgbWFkZSBieSB0aGUgb3RoZXIgc2lkZSwgYW5kIHRoZW4KKwlhIGA+Pj4+Pj4+YCBtYXJrZXIuICBBbiBhbHRlcm5hdGUgc3R5bGUsICJkaWZmMyIsIGFkZHMgYSBgfHx8fHx8fGAKKwltYXJrZXIgYW5kIHRoZSBvcmlnaW5hbCB0ZXh0IGJlZm9yZSB0aGUgYD09PT09PT1gIG1hcmtlci4KKworbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW06OgorCUlmIG1lcmdlIGlzIGNhbGxlZCB3aXRob3V0IGFueSBjb21taXQgYXJndW1lbnQsIG1lcmdlIHRoZSB1cHN0cmVhbQorCWJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCBieSB1c2luZyB0aGVpciBsYXN0CisJb2JzZXJ2ZWQgdmFsdWVzIHN0b3JlZCBpbiB0aGVpciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCisJVGhlIHZhbHVlcyBvZiB0aGUgYGJyYW5jaC48Y3VycmVudCBicmFuY2g+Lm1lcmdlYCB0aGF0IG5hbWUgdGhlCisJYnJhbmNoZXMgYXQgdGhlIHJlbW90ZSBuYW1lZCBieSBgYnJhbmNoLjxjdXJyZW50IGJyYW5jaD4ucmVtb3RlYAorCWFyZSBjb25zdWx0ZWQsIGFuZCB0aGVuIHRoZXkgYXJlIG1hcHBlZCB2aWEgYHJlbW90ZS48cmVtb3RlPi5mZXRjaGAKKwl0byB0aGVpciBjb3JyZXNwb25kaW5nIHJlbW90ZS10cmFja2luZyBicmFuY2hlcywgYW5kIHRoZSB0aXBzIG9mCisJdGhlc2UgdHJhY2tpbmcgYnJhbmNoZXMgYXJlIG1lcmdlZC4KKworbWVyZ2UuZmY6OgorCUJ5IGRlZmF1bHQsIEdpdCBkb2VzIG5vdCBjcmVhdGUgYW4gZXh0cmEgbWVyZ2UgY29tbWl0IHdoZW4gbWVyZ2luZworCWEgY29tbWl0IHRoYXQgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IGNvbW1pdC4gSW5zdGVhZCwgdGhlCisJdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBmYXN0LWZvcndhcmRlZC4gV2hlbiBzZXQgdG8gYGZhbHNlYCwKKwl0aGlzIHZhcmlhYmxlIHRlbGxzIEdpdCB0byBjcmVhdGUgYW4gZXh0cmEgbWVyZ2UgY29tbWl0IGluIHN1Y2gKKwlhIGNhc2UgKGVxdWl2YWxlbnQgdG8gZ2l2aW5nIHRoZSBgLS1uby1mZmAgb3B0aW9uIGZyb20gdGhlIGNvbW1hbmQKKwlsaW5lKS4gV2hlbiBzZXQgdG8gYG9ubHlgLCBvbmx5IHN1Y2ggZmFzdC1mb3J3YXJkIG1lcmdlcyBhcmUKKwlhbGxvd2VkIChlcXVpdmFsZW50IHRvIGdpdmluZyB0aGUgYC0tZmYtb25seWAgb3B0aW9uIGZyb20gdGhlCisJY29tbWFuZCBsaW5lKS4KKworbWVyZ2UudmVyaWZ5U2lnbmF0dXJlczo6CisJSWYgdHJ1ZSwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSAtLXZlcmlmeS1zaWduYXR1cmVzIGNvbW1hbmQKKwlsaW5lIG9wdGlvbi4gU2VlIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIGZvciBkZXRhaWxzLgorCitpbmNsdWRlOjpmbXQtbWVyZ2UtbXNnLnR4dFtdCisKK21lcmdlLnJlbmFtZUxpbWl0OjoKKwlUaGUgbnVtYmVyIG9mIGZpbGVzIHRvIGNvbnNpZGVyIHdoZW4gcGVyZm9ybWluZyByZW5hbWUgZGV0ZWN0aW9uCisJZHVyaW5nIGEgbWVyZ2U7IGlmIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZgorCWRpZmYucmVuYW1lTGltaXQuIFRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0IGlmIHJlbmFtZSBkZXRlY3Rpb24KKwlpcyB0dXJuZWQgb2ZmLgorCittZXJnZS5yZW5hbWVzOjoKKwlXaGV0aGVyIEdpdCBkZXRlY3RzIHJlbmFtZXMuICBJZiBzZXQgdG8gImZhbHNlIiwgcmVuYW1lIGRldGVjdGlvbgorCWlzIGRpc2FibGVkLiBJZiBzZXQgdG8gInRydWUiLCBiYXNpYyByZW5hbWUgZGV0ZWN0aW9uIGlzIGVuYWJsZWQuCisJRGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGRpZmYucmVuYW1lcy4KKworbWVyZ2UuZGlyZWN0b3J5UmVuYW1lczo6CisJV2hldGhlciBHaXQgZGV0ZWN0cyBkaXJlY3RvcnkgcmVuYW1lcywgYWZmZWN0aW5nIHdoYXQgaGFwcGVucyBhdAorCW1lcmdlIHRpbWUgdG8gbmV3IGZpbGVzIGFkZGVkIHRvIGEgZGlyZWN0b3J5IG9uIG9uZSBzaWRlIG9mCisJaGlzdG9yeSB3aGVuIHRoYXQgZGlyZWN0b3J5IHdhcyByZW5hbWVkIG9uIHRoZSBvdGhlciBzaWRlIG9mCisJaGlzdG9yeS4gIElmIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXMgaXMgc2V0IHRvICJmYWxzZSIsIGRpcmVjdG9yeQorCXJlbmFtZSBkZXRlY3Rpb24gaXMgZGlzYWJsZWQsIG1lYW5pbmcgdGhhdCBzdWNoIG5ldyBmaWxlcyB3aWxsIGJlCisJbGVmdCBiZWhpbmQgaW4gdGhlIG9sZCBkaXJlY3RvcnkuICBJZiBzZXQgdG8gInRydWUiLCBkaXJlY3RvcnkKKwlyZW5hbWUgZGV0ZWN0aW9uIGlzIGVuYWJsZWQsIG1lYW5pbmcgdGhhdCBzdWNoIG5ldyBmaWxlcyB3aWxsIGJlCisJbW92ZWQgaW50byB0aGUgbmV3IGRpcmVjdG9yeS4gIElmIHNldCB0byAiY29uZmxpY3QiLCBhIGNvbmZsaWN0CisJd2lsbCBiZSByZXBvcnRlZCBmb3Igc3VjaCBwYXRocy4gIElmIG1lcmdlLnJlbmFtZXMgaXMgZmFsc2UsCisJbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcyBpcyBpZ25vcmVkIGFuZCB0cmVhdGVkIGFzIGZhbHNlLiAgRGVmYXVsdHMKKwl0byAiY29uZmxpY3QiLgorCittZXJnZS5yZW5vcm1hbGl6ZTo6CisJVGVsbCBHaXQgdGhhdCBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gb2YgZmlsZXMgaW4gdGhlCisJcmVwb3NpdG9yeSBoYXMgY2hhbmdlZCBvdmVyIHRpbWUgKGUuZy4gZWFybGllciBjb21taXRzIHJlY29yZAorCXRleHQgZmlsZXMgd2l0aCBDUkxGIGxpbmUgZW5kaW5ncywgYnV0IHJlY2VudCBvbmVzIHVzZSBMRiBsaW5lCisJZW5kaW5ncykuICBJbiBzdWNoIGEgcmVwb3NpdG9yeSwgR2l0IGNhbiBjb252ZXJ0IHRoZSBkYXRhCisJcmVjb3JkZWQgaW4gY29tbWl0cyB0byBhIGNhbm9uaWNhbCBmb3JtIGJlZm9yZSBwZXJmb3JtaW5nIGEKKwltZXJnZSB0byByZWR1Y2UgdW5uZWNlc3NhcnkgY29uZmxpY3RzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sCisJc2VlIHNlY3Rpb24gIk1lcmdpbmcgYnJhbmNoZXMgd2l0aCBkaWZmZXJpbmcgY2hlY2tpbi9jaGVja291dAorCWF0dHJpYnV0ZXMiIGluIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XS4KKworbWVyZ2Uuc3RhdDo6CisJV2hldGhlciB0byBwcmludCB0aGUgZGlmZnN0YXQgYmV0d2VlbiBPUklHX0hFQUQgYW5kIHRoZSBtZXJnZSByZXN1bHQKKwlhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZS4gIFRydWUgYnkgZGVmYXVsdC4KKworbWVyZ2UuYXV0b1N0YXNoOjoKKwlXaGVuIHNldCB0byB0cnVlLCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIHRlbXBvcmFyeSBzdGFzaCBlbnRyeQorCWJlZm9yZSB0aGUgb3BlcmF0aW9uIGJlZ2lucywgYW5kIGFwcGx5IGl0IGFmdGVyIHRoZSBvcGVyYXRpb24KKwllbmRzLiAgVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gcnVuIG1lcmdlIG9uIGEgZGlydHkgd29ya3RyZWUuCisJSG93ZXZlciwgdXNlIHdpdGggY2FyZTogdGhlIGZpbmFsIHN0YXNoIGFwcGxpY2F0aW9uIGFmdGVyIGEKKwlzdWNjZXNzZnVsIG1lcmdlIG1pZ2h0IHJlc3VsdCBpbiBub24tdHJpdmlhbCBjb25mbGljdHMuCisJVGhpcyBvcHRpb24gY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGAtLW5vLWF1dG9zdGFzaGAgYW5kCisJYC0tYXV0b3N0YXNoYCBvcHRpb25zIG9mIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdLgorCURlZmF1bHRzIHRvIGZhbHNlLgorCittZXJnZS50b29sOjoKKwlDb250cm9scyB3aGljaCBtZXJnZSB0b29sIGlzIHVzZWQgYnkgbGlua2dpdDpnaXQtbWVyZ2V0b29sWzFdLgorCVRoZSBsaXN0IGJlbG93IHNob3dzIHRoZSB2YWxpZCBidWlsdC1pbiB2YWx1ZXMuCisJQW55IG90aGVyIHZhbHVlIGlzIHRyZWF0ZWQgYXMgYSBjdXN0b20gbWVyZ2UgdG9vbCBhbmQgcmVxdWlyZXMKKwl0aGF0IGEgY29ycmVzcG9uZGluZyBtZXJnZXRvb2wuPHRvb2w+LmNtZCB2YXJpYWJsZSBpcyBkZWZpbmVkLgorCittZXJnZS5ndWl0b29sOjoKKwlDb250cm9scyB3aGljaCBtZXJnZSB0b29sIGlzIHVzZWQgYnkgbGlua2dpdDpnaXQtbWVyZ2V0b29sWzFdIHdoZW4gdGhlCisJLWcvLS1ndWkgZmxhZyBpcyBzcGVjaWZpZWQuIFRoZSBsaXN0IGJlbG93IHNob3dzIHRoZSB2YWxpZCBidWlsdC1pbiB2YWx1ZXMuCisJQW55IG90aGVyIHZhbHVlIGlzIHRyZWF0ZWQgYXMgYSBjdXN0b20gbWVyZ2UgdG9vbCBhbmQgcmVxdWlyZXMgdGhhdCBhCisJY29ycmVzcG9uZGluZyBtZXJnZXRvb2wuPGd1aXRvb2w+LmNtZCB2YXJpYWJsZSBpcyBkZWZpbmVkLgorCitpbmNsdWRlOjouLi9tZXJnZXRvb2xzLW1lcmdlLnR4dFtdCisKK21lcmdlLnZlcmJvc2l0eTo6CisJQ29udHJvbHMgdGhlIGFtb3VudCBvZiBvdXRwdXQgc2hvd24gYnkgdGhlIHJlY3Vyc2l2ZSBtZXJnZQorCXN0cmF0ZWd5LiAgTGV2ZWwgMCBvdXRwdXRzIG5vdGhpbmcgZXhjZXB0IGEgZmluYWwgZXJyb3IKKwltZXNzYWdlIGlmIGNvbmZsaWN0cyB3ZXJlIGRldGVjdGVkLiBMZXZlbCAxIG91dHB1dHMgb25seQorCWNvbmZsaWN0cywgMiBvdXRwdXRzIGNvbmZsaWN0cyBhbmQgZmlsZSBjaGFuZ2VzLiAgTGV2ZWwgNSBhbmQKKwlhYm92ZSBvdXRwdXRzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gIFRoZSBkZWZhdWx0IGlzIGxldmVsIDIuCisJQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfTUVSR0VfVkVSQk9TSVRZYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworbWVyZ2UuPGRyaXZlcj4ubmFtZTo6CisJRGVmaW5lcyBhIGh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIGEgY3VzdG9tIGxvdy1sZXZlbAorCW1lcmdlIGRyaXZlci4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCisKK21lcmdlLjxkcml2ZXI+LmRyaXZlcjo6CisJRGVmaW5lcyB0aGUgY29tbWFuZCB0aGF0IGltcGxlbWVudHMgYSBjdXN0b20gbG93LWxldmVsCisJbWVyZ2UgZHJpdmVyLiAgU2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KKworbWVyZ2UuPGRyaXZlcj4ucmVjdXJzaXZlOjoKKwlOYW1lcyBhIGxvdy1sZXZlbCBtZXJnZSBkcml2ZXIgdG8gYmUgdXNlZCB3aGVuCisJcGVyZm9ybWluZyBhbiBpbnRlcm5hbCBtZXJnZSBiZXR3ZWVuIGNvbW1vbiBhbmNlc3RvcnMuCisJU2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL21lcmdldG9vbC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9tZXJnZXRvb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZWQzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9tZXJnZXRvb2wudHh0CkBAIC0wLDAgKzEsNTMgQEAKK21lcmdldG9vbC48dG9vbD4ucGF0aDo6CisJT3ZlcnJpZGUgdGhlIHBhdGggZm9yIHRoZSBnaXZlbiB0b29sLiAgVGhpcyBpcyB1c2VmdWwgaW4gY2FzZQorCXlvdXIgdG9vbCBpcyBub3QgaW4gdGhlIFBBVEguCisKK21lcmdldG9vbC48dG9vbD4uY21kOjoKKwlTcGVjaWZ5IHRoZSBjb21tYW5kIHRvIGludm9rZSB0aGUgc3BlY2lmaWVkIG1lcmdlIHRvb2wuICBUaGUKKwlzcGVjaWZpZWQgY29tbWFuZCBpcyBldmFsdWF0ZWQgaW4gc2hlbGwgd2l0aCB0aGUgZm9sbG93aW5nCisJdmFyaWFibGVzIGF2YWlsYWJsZTogJ0JBU0UnIGlzIHRoZSBuYW1lIG9mIGEgdGVtcG9yYXJ5IGZpbGUKKwljb250YWluaW5nIHRoZSBjb21tb24gYmFzZSBvZiB0aGUgZmlsZXMgdG8gYmUgbWVyZ2VkLCBpZiBhdmFpbGFibGU7CisJJ0xPQ0FMJyBpcyB0aGUgbmFtZSBvZiBhIHRlbXBvcmFyeSBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mCisJdGhlIGZpbGUgb24gdGhlIGN1cnJlbnQgYnJhbmNoOyAnUkVNT1RFJyBpcyB0aGUgbmFtZSBvZiBhIHRlbXBvcmFyeQorCWZpbGUgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgZnJvbSB0aGUgYnJhbmNoIGJlaW5nCisJbWVyZ2VkOyAnTUVSR0VEJyBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byB3aGljaCB0aGUgbWVyZ2UKKwl0b29sIHNob3VsZCB3cml0ZSB0aGUgcmVzdWx0cyBvZiBhIHN1Y2Nlc3NmdWwgbWVyZ2UuCisKK21lcmdldG9vbC48dG9vbD4udHJ1c3RFeGl0Q29kZTo6CisJRm9yIGEgY3VzdG9tIG1lcmdlIGNvbW1hbmQsIHNwZWNpZnkgd2hldGhlciB0aGUgZXhpdCBjb2RlIG9mCisJdGhlIG1lcmdlIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG1lcmdlIHdhcworCXN1Y2Nlc3NmdWwuICBJZiB0aGlzIGlzIG5vdCBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBtZXJnZSB0YXJnZXQgZmlsZQorCXRpbWVzdGFtcCBpcyBjaGVja2VkIGFuZCB0aGUgbWVyZ2UgYXNzdW1lZCB0byBoYXZlIGJlZW4gc3VjY2Vzc2Z1bAorCWlmIHRoZSBmaWxlIGhhcyBiZWVuIHVwZGF0ZWQsIG90aGVyd2lzZSB0aGUgdXNlciBpcyBwcm9tcHRlZCB0bworCWluZGljYXRlIHRoZSBzdWNjZXNzIG9mIHRoZSBtZXJnZS4KKworbWVyZ2V0b29sLm1lbGQuaGFzT3V0cHV0OjoKKwlPbGRlciB2ZXJzaW9ucyBvZiBgbWVsZGAgZG8gbm90IHN1cHBvcnQgdGhlIGAtLW91dHB1dGAgb3B0aW9uLgorCUdpdCB3aWxsIGF0dGVtcHQgdG8gZGV0ZWN0IHdoZXRoZXIgYG1lbGRgIHN1cHBvcnRzIGAtLW91dHB1dGAKKwlieSBpbnNwZWN0aW5nIHRoZSBvdXRwdXQgb2YgYG1lbGQgLS1oZWxwYC4gIENvbmZpZ3VyaW5nCisJYG1lcmdldG9vbC5tZWxkLmhhc091dHB1dGAgd2lsbCBtYWtlIEdpdCBza2lwIHRoZXNlIGNoZWNrcyBhbmQKKwl1c2UgdGhlIGNvbmZpZ3VyZWQgdmFsdWUgaW5zdGVhZC4gIFNldHRpbmcgYG1lcmdldG9vbC5tZWxkLmhhc091dHB1dGAKKwl0byBgdHJ1ZWAgdGVsbHMgR2l0IHRvIHVuY29uZGl0aW9uYWxseSB1c2UgdGhlIGAtLW91dHB1dGAgb3B0aW9uLAorCWFuZCBgZmFsc2VgIGF2b2lkcyB1c2luZyBgLS1vdXRwdXRgLgorCittZXJnZXRvb2wua2VlcEJhY2t1cDo6CisJQWZ0ZXIgcGVyZm9ybWluZyBhIG1lcmdlLCB0aGUgb3JpZ2luYWwgZmlsZSB3aXRoIGNvbmZsaWN0IG1hcmtlcnMKKwljYW4gYmUgc2F2ZWQgYXMgYSBmaWxlIHdpdGggYSBgLm9yaWdgIGV4dGVuc2lvbi4gIElmIHRoaXMgdmFyaWFibGUKKwlpcyBzZXQgdG8gYGZhbHNlYCB0aGVuIHRoaXMgZmlsZSBpcyBub3QgcHJlc2VydmVkLiAgRGVmYXVsdHMgdG8KKwlgdHJ1ZWAgKGkuZS4ga2VlcCB0aGUgYmFja3VwIGZpbGVzKS4KKworbWVyZ2V0b29sLmtlZXBUZW1wb3Jhcmllczo6CisJV2hlbiBpbnZva2luZyBhIGN1c3RvbSBtZXJnZSB0b29sLCBHaXQgdXNlcyBhIHNldCBvZiB0ZW1wb3JhcnkKKwlmaWxlcyB0byBwYXNzIHRvIHRoZSB0b29sLiBJZiB0aGUgdG9vbCByZXR1cm5zIGFuIGVycm9yIGFuZCB0aGlzCisJdmFyaWFibGUgaXMgc2V0IHRvIGB0cnVlYCwgdGhlbiB0aGVzZSB0ZW1wb3JhcnkgZmlsZXMgd2lsbCBiZQorCXByZXNlcnZlZCwgb3RoZXJ3aXNlIHRoZXkgd2lsbCBiZSByZW1vdmVkIGFmdGVyIHRoZSB0b29sIGhhcworCWV4aXRlZC4gRGVmYXVsdHMgdG8gYGZhbHNlYC4KKworbWVyZ2V0b29sLndyaXRlVG9UZW1wOjoKKwlHaXQgd3JpdGVzIHRlbXBvcmFyeSAnQkFTRScsICdMT0NBTCcsIGFuZCAnUkVNT1RFJyB2ZXJzaW9ucyBvZgorCWNvbmZsaWN0aW5nIGZpbGVzIGluIHRoZSB3b3JrdHJlZSBieSBkZWZhdWx0LiAgR2l0IHdpbGwgYXR0ZW1wdAorCXRvIHVzZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIHRoZXNlIGZpbGVzIHdoZW4gc2V0IGB0cnVlYC4KKwlEZWZhdWx0cyB0byBgZmFsc2VgLgorCittZXJnZXRvb2wucHJvbXB0OjoKKwlQcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvbm90ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvbm90ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZWY1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9ub3Rlcy50eHQKQEAgLTAsMCArMSw1OSBAQAorbm90ZXMubWVyZ2VTdHJhdGVneTo6CisJV2hpY2ggbWVyZ2Ugc3RyYXRlZ3kgdG8gY2hvb3NlIGJ5IGRlZmF1bHQgd2hlbiByZXNvbHZpbmcgbm90ZXMKKwljb25mbGljdHMuICBNdXN0IGJlIG9uZSBvZiBgbWFudWFsYCwgYG91cnNgLCBgdGhlaXJzYCwgYHVuaW9uYCwgb3IKKwlgY2F0X3NvcnRfdW5pcWAuICBEZWZhdWx0cyB0byBgbWFudWFsYC4gIFNlZSAiTk9URVMgTUVSR0UgU1RSQVRFR0lFUyIKKwlzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LW5vdGVzWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGVhY2ggc3RyYXRlZ3kuCisKK25vdGVzLjxuYW1lPi5tZXJnZVN0cmF0ZWd5OjoKKwlXaGljaCBtZXJnZSBzdHJhdGVneSB0byBjaG9vc2Ugd2hlbiBkb2luZyBhIG5vdGVzIG1lcmdlIGludG8KKwlyZWZzL25vdGVzLzxuYW1lPi4gIFRoaXMgb3ZlcnJpZGVzIHRoZSBtb3JlIGdlbmVyYWwKKwkibm90ZXMubWVyZ2VTdHJhdGVneSIuICBTZWUgdGhlICJOT1RFUyBNRVJHRSBTVFJBVEVHSUVTIiBzZWN0aW9uIGluCisJbGlua2dpdDpnaXQtbm90ZXNbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGF2YWlsYWJsZSBzdHJhdGVnaWVzLgorCitub3Rlcy5kaXNwbGF5UmVmOjoKKwlUaGUgKGZ1bGx5IHF1YWxpZmllZCkgcmVmbmFtZSBmcm9tIHdoaWNoIHRvIHNob3cgbm90ZXMgd2hlbgorCXNob3dpbmcgY29tbWl0IG1lc3NhZ2VzLiAgVGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgY2FuIGJlIHNldAorCXRvIGEgZ2xvYiwgaW4gd2hpY2ggY2FzZSBub3RlcyBmcm9tIGFsbCBtYXRjaGluZyByZWZzIHdpbGwgYmUKKwlzaG93bi4gIFlvdSBtYXkgYWxzbyBzcGVjaWZ5IHRoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorCXNldmVyYWwgdGltZXMuICBBIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgZm9yIHJlZnMgdGhhdCBkbyBub3QKKwlleGlzdCwgYnV0IGEgZ2xvYiB0aGF0IGRvZXMgbm90IG1hdGNoIGFueSByZWZzIGlzIHNpbGVudGx5CisJaWdub3JlZC4KKysKK1RoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBgR0lUX05PVEVTX0RJU1BMQVlfUkVGYAorZW52aXJvbm1lbnQgdmFyaWFibGUsIHdoaWNoIG11c3QgYmUgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiByZWZzIG9yCitnbG9icy4KKysKK1RoZSBlZmZlY3RpdmUgdmFsdWUgb2YgImNvcmUubm90ZXNSZWYiIChwb3NzaWJseSBvdmVycmlkZGVuIGJ5CitHSVRfTk9URVNfUkVGKSBpcyBhbHNvIGltcGxpY2l0bHkgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgcmVmcyB0byBiZQorZGlzcGxheWVkLgorCitub3Rlcy5yZXdyaXRlLjxjb21tYW5kPjo6CisJV2hlbiByZXdyaXRpbmcgY29tbWl0cyB3aXRoIDxjb21tYW5kPiAoY3VycmVudGx5IGBhbWVuZGAgb3IKKwlgcmViYXNlYCkgYW5kIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIGB0cnVlYCwgR2l0CisJYXV0b21hdGljYWxseSBjb3BpZXMgeW91ciBub3RlcyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUKKwlyZXdyaXR0ZW4gY29tbWl0LiAgRGVmYXVsdHMgdG8gYHRydWVgLCBidXQgc2VlCisJIm5vdGVzLnJld3JpdGVSZWYiIGJlbG93LgorCitub3Rlcy5yZXdyaXRlTW9kZTo6CisJV2hlbiBjb3B5aW5nIG5vdGVzIGR1cmluZyBhIHJld3JpdGUgKHNlZSB0aGUKKwkibm90ZXMucmV3cml0ZS48Y29tbWFuZD4iIG9wdGlvbiksIGRldGVybWluZXMgd2hhdCB0byBkbyBpZgorCXRoZSB0YXJnZXQgY29tbWl0IGFscmVhZHkgaGFzIGEgbm90ZS4gIE11c3QgYmUgb25lIG9mCisJYG92ZXJ3cml0ZWAsIGBjb25jYXRlbmF0ZWAsIGBjYXRfc29ydF91bmlxYCwgb3IgYGlnbm9yZWAuCisJRGVmYXVsdHMgdG8gYGNvbmNhdGVuYXRlYC4KKysKK1RoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBgR0lUX05PVEVTX1JFV1JJVEVfTU9ERWAKK2Vudmlyb25tZW50IHZhcmlhYmxlLgorCitub3Rlcy5yZXdyaXRlUmVmOjoKKwlXaGVuIGNvcHlpbmcgbm90ZXMgZHVyaW5nIGEgcmV3cml0ZSwgc3BlY2lmaWVzIHRoZSAoZnVsbHkKKwlxdWFsaWZpZWQpIHJlZiB3aG9zZSBub3RlcyBzaG91bGQgYmUgY29waWVkLiAgVGhlIHJlZiBtYXkgYmUgYQorCWdsb2IsIGluIHdoaWNoIGNhc2Ugbm90ZXMgaW4gYWxsIG1hdGNoaW5nIHJlZnMgd2lsbCBiZSBjb3BpZWQuCisJWW91IG1heSBhbHNvIHNwZWNpZnkgdGhpcyBjb25maWd1cmF0aW9uIHNldmVyYWwgdGltZXMuCisrCitEb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZTsgeW91IG11c3QgY29uZmlndXJlIHRoaXMgdmFyaWFibGUgdG8KK2VuYWJsZSBub3RlIHJld3JpdGluZy4gIFNldCBpdCB0byBgcmVmcy9ub3Rlcy9jb21taXRzYCB0byBlbmFibGUKK3Jld3JpdGluZyBmb3IgdGhlIGRlZmF1bHQgY29tbWl0IG5vdGVzLgorKworVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGBHSVRfTk9URVNfUkVXUklURV9SRUZgCitlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2hpY2ggbXVzdCBiZSBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIHJlZnMgb3IKK2dsb2JzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9wYWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzdmMWIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcGFjay50eHQKQEAgLTAsMCArMSwxMzUgQEAKK3BhY2sud2luZG93OjoKKwlUaGUgc2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgYnkgbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdIHdoZW4gbm8KKwl3aW5kb3cgc2l6ZSBpcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLiBEZWZhdWx0cyB0byAxMC4KKworcGFjay5kZXB0aDo6CisJVGhlIG1heGltdW0gZGVsdGEgZGVwdGggdXNlZCBieSBsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0gd2hlbiBubworCW1heGltdW0gZGVwdGggaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gRGVmYXVsdHMgdG8gNTAuCisJTWF4aW11bSB2YWx1ZSBpcyA0MDk1LgorCitwYWNrLndpbmRvd01lbW9yeTo6CisJVGhlIG1heGltdW0gc2l6ZSBvZiBtZW1vcnkgdGhhdCBpcyBjb25zdW1lZCBieSBlYWNoIHRocmVhZAorCWluIGxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXSBmb3IgcGFjayB3aW5kb3cgbWVtb3J5IHdoZW4KKwlubyBsaW1pdCBpcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhlIHZhbHVlIGNhbiBiZQorCXN1ZmZpeGVkIHdpdGggImsiLCAibSIsIG9yICJnIi4gIFdoZW4gbGVmdCB1bmNvbmZpZ3VyZWQgKG9yCisJc2V0IGV4cGxpY2l0bHkgdG8gMCksIHRoZXJlIHdpbGwgYmUgbm8gbGltaXQuCisKK3BhY2suY29tcHJlc3Npb246OgorCUFuIGludGVnZXIgLTEuLjksIGluZGljYXRpbmcgdGhlIGNvbXByZXNzaW9uIGxldmVsIGZvciBvYmplY3RzCisJaW4gYSBwYWNrIGZpbGUuIC0xIGlzIHRoZSB6bGliIGRlZmF1bHQuIDAgbWVhbnMgbm8KKwljb21wcmVzc2lvbiwgYW5kIDEuLjkgYXJlIHZhcmlvdXMgc3BlZWQvc2l6ZSB0cmFkZW9mZnMsIDkgYmVpbmcKKwlzbG93ZXN0LiAgSWYgbm90IHNldCwgIGRlZmF1bHRzIHRvIGNvcmUuY29tcHJlc3Npb24uICBJZiB0aGF0IGlzCisJbm90IHNldCwgIGRlZmF1bHRzIHRvIC0xLCB0aGUgemxpYiBkZWZhdWx0LCB3aGljaCBpcyAiYSBkZWZhdWx0CisJY29tcHJvbWlzZSBiZXR3ZWVuIHNwZWVkIGFuZCBjb21wcmVzc2lvbiAoY3VycmVudGx5IGVxdWl2YWxlbnQKKwl0byBsZXZlbCA2KS4iCisrCitOb3RlIHRoYXQgY2hhbmdpbmcgdGhlIGNvbXByZXNzaW9uIGxldmVsIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgcmVjb21wcmVzcworYWxsIGV4aXN0aW5nIG9iamVjdHMuIFlvdSBjYW4gZm9yY2UgcmVjb21wcmVzc2lvbiBieSBwYXNzaW5nIHRoZSAtRiBvcHRpb24KK3RvIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXS4KKworcGFjay5hbGxvd1BhY2tSZXVzZTo6CisJV2hlbiB0cnVlLCBhbmQgd2hlbiByZWFjaGFiaWxpdHkgYml0bWFwcyBhcmUgZW5hYmxlZCwKKwlwYWNrLW9iamVjdHMgd2lsbCB0cnkgdG8gc2VuZCBwYXJ0cyBvZiB0aGUgYml0bWFwcGVkIHBhY2tmaWxlCisJdmVyYmF0aW0uIFRoaXMgY2FuIHJlZHVjZSBtZW1vcnkgYW5kIENQVSB1c2FnZSB0byBzZXJ2ZSBmZXRjaGVzLAorCWJ1dCBtaWdodCByZXN1bHQgaW4gc2VuZGluZyBhIHNsaWdodGx5IGxhcmdlciBwYWNrLiBEZWZhdWx0cyB0bworCXRydWUuCisKK3BhY2suaXNsYW5kOjoKKwlBbiBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gY29uZmlndXJpbmcgYSBzZXQgb2YgZGVsdGEKKwlpc2xhbmRzLiBTZWUgIkRFTFRBIElTTEFORFMiIGluIGxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXQorCWZvciBkZXRhaWxzLgorCitwYWNrLmlzbGFuZENvcmU6OgorCVNwZWNpZnkgYW4gaXNsYW5kIG5hbWUgd2hpY2ggZ2V0cyB0byBoYXZlIGl0cyBvYmplY3RzIGJlCisJcGFja2VkIGZpcnN0LiBUaGlzIGNyZWF0ZXMgYSBraW5kIG9mIHBzZXVkby1wYWNrIGF0IHRoZSBmcm9udAorCW9mIG9uZSBwYWNrLCBzbyB0aGF0IHRoZSBvYmplY3RzIGZyb20gdGhlIHNwZWNpZmllZCBpc2xhbmQgYXJlCisJaG9wZWZ1bGx5IGZhc3RlciB0byBjb3B5IGludG8gYW55IHBhY2sgdGhhdCBzaG91bGQgYmUgc2VydmVkCisJdG8gYSB1c2VyIHJlcXVlc3RpbmcgdGhlc2Ugb2JqZWN0cy4gSW4gcHJhY3RpY2UgdGhpcyBtZWFucworCXRoYXQgdGhlIGlzbGFuZCBzcGVjaWZpZWQgc2hvdWxkIGxpa2VseSBjb3JyZXNwb25kIHRvIHdoYXQgaXMKKwl0aGUgbW9zdCBjb21tb25seSBjbG9uZWQgaW4gdGhlIHJlcG8uIFNlZSBhbHNvICJERUxUQSBJU0xBTkRTIgorCWluIGxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4KKworcGFjay5kZWx0YUNhY2hlU2l6ZTo6CisJVGhlIG1heGltdW0gbWVtb3J5IGluIGJ5dGVzIHVzZWQgZm9yIGNhY2hpbmcgZGVsdGFzIGluCisJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdIGJlZm9yZSB3cml0aW5nIHRoZW0gb3V0IHRvIGEgcGFjay4KKwlUaGlzIGNhY2hlIGlzIHVzZWQgdG8gc3BlZWQgdXAgdGhlIHdyaXRpbmcgb2JqZWN0IHBoYXNlIGJ5IG5vdAorCWhhdmluZyB0byByZWNvbXB1dGUgdGhlIGZpbmFsIGRlbHRhIHJlc3VsdCBvbmNlIHRoZSBiZXN0IG1hdGNoCisJZm9yIGFsbCBvYmplY3RzIGlzIGZvdW5kLiAgUmVwYWNraW5nIGxhcmdlIHJlcG9zaXRvcmllcyBvbiBtYWNoaW5lcworCXdoaWNoIGFyZSB0aWdodCB3aXRoIG1lbW9yeSBtaWdodCBiZSBiYWRseSBpbXBhY3RlZCBieSB0aGlzIHRob3VnaCwKKwllc3BlY2lhbGx5IGlmIHRoaXMgY2FjaGUgcHVzaGVzIHRoZSBzeXN0ZW0gaW50byBzd2FwcGluZy4KKwlBIHZhbHVlIG9mIDAgbWVhbnMgbm8gbGltaXQuIFRoZSBzbWFsbGVzdCBzaXplIG9mIDEgYnl0ZSBtYXkgYmUKKwl1c2VkIHRvIHZpcnR1YWxseSBkaXNhYmxlIHRoaXMgY2FjaGUuIERlZmF1bHRzIHRvIDI1NiBNaUIuCisKK3BhY2suZGVsdGFDYWNoZUxpbWl0OjoKKwlUaGUgbWF4aW11bSBzaXplIG9mIGEgZGVsdGEsIHRoYXQgaXMgY2FjaGVkIGluCisJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdLiBUaGlzIGNhY2hlIGlzIHVzZWQgdG8gc3BlZWQgdXAgdGhlCisJd3JpdGluZyBvYmplY3QgcGhhc2UgYnkgbm90IGhhdmluZyB0byByZWNvbXB1dGUgdGhlIGZpbmFsIGRlbHRhCisJcmVzdWx0IG9uY2UgdGhlIGJlc3QgbWF0Y2ggZm9yIGFsbCBvYmplY3RzIGlzIGZvdW5kLgorCURlZmF1bHRzIHRvIDEwMDAuIE1heGltdW0gdmFsdWUgaXMgNjU1MzUuCisKK3BhY2sudGhyZWFkczo6CisJU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byBzcGF3biB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdAorCWRlbHRhIG1hdGNoZXMuICBUaGlzIHJlcXVpcmVzIHRoYXQgbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdCisJYmUgY29tcGlsZWQgd2l0aCBwdGhyZWFkcyBvdGhlcndpc2UgdGhpcyBvcHRpb24gaXMgaWdub3JlZCB3aXRoIGEKKwl3YXJuaW5nLiBUaGlzIGlzIG1lYW50IHRvIHJlZHVjZSBwYWNraW5nIHRpbWUgb24gbXVsdGlwcm9jZXNzb3IKKwltYWNoaW5lcy4gVGhlIHJlcXVpcmVkIGFtb3VudCBvZiBtZW1vcnkgZm9yIHRoZSBkZWx0YSBzZWFyY2ggd2luZG93CisJaXMgaG93ZXZlciBtdWx0aXBsaWVkIGJ5IHRoZSBudW1iZXIgb2YgdGhyZWFkcy4KKwlTcGVjaWZ5aW5nIDAgd2lsbCBjYXVzZSBHaXQgdG8gYXV0by1kZXRlY3QgdGhlIG51bWJlciBvZiBDUFUncworCWFuZCBzZXQgdGhlIG51bWJlciBvZiB0aHJlYWRzIGFjY29yZGluZ2x5LgorCitwYWNrLmluZGV4VmVyc2lvbjo6CisJU3BlY2lmeSB0aGUgZGVmYXVsdCBwYWNrIGluZGV4IHZlcnNpb24uICBWYWxpZCB2YWx1ZXMgYXJlIDEgZm9yCisJbGVnYWN5IHBhY2sgaW5kZXggdXNlZCBieSBHaXQgdmVyc2lvbnMgcHJpb3IgdG8gMS41LjIsIGFuZCAyIGZvcgorCXRoZSBuZXcgcGFjayBpbmRleCB3aXRoIGNhcGFiaWxpdGllcyBmb3IgcGFja3MgbGFyZ2VyIHRoYW4gNCBHQgorCWFzIHdlbGwgYXMgcHJvcGVyIHByb3RlY3Rpb24gYWdhaW5zdCB0aGUgcmVwYWNraW5nIG9mIGNvcnJ1cHRlZAorCXBhY2tzLiAgVmVyc2lvbiAyIGlzIHRoZSBkZWZhdWx0LiAgTm90ZSB0aGF0IHZlcnNpb24gMiBpcyBlbmZvcmNlZAorCWFuZCB0aGlzIGNvbmZpZyBvcHRpb24gaWdub3JlZCB3aGVuZXZlciB0aGUgY29ycmVzcG9uZGluZyBwYWNrIGlzCisJbGFyZ2VyIHRoYW4gMiBHQi4KKysKK0lmIHlvdSBoYXZlIGFuIG9sZCBHaXQgdGhhdCBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZSB2ZXJzaW9uIDIgYCouaWR4YCBmaWxlLAorY2xvbmluZyBvciBmZXRjaGluZyBvdmVyIGEgbm9uIG5hdGl2ZSBwcm90b2NvbCAoZS5nLiAiaHR0cCIpCit0aGF0IHdpbGwgY29weSBib3RoIGAqLnBhY2tgIGZpbGUgYW5kIGNvcnJlc3BvbmRpbmcgYCouaWR4YCBmaWxlIGZyb20gdGhlCitvdGhlciBzaWRlIG1heSBnaXZlIHlvdSBhIHJlcG9zaXRvcnkgdGhhdCBjYW5ub3QgYmUgYWNjZXNzZWQgd2l0aCB5b3VyCitvbGRlciB2ZXJzaW9uIG9mIEdpdC4gSWYgdGhlIGAqLnBhY2tgIGZpbGUgaXMgc21hbGxlciB0aGFuIDIgR0IsIGhvd2V2ZXIsCit5b3UgY2FuIHVzZSBsaW5rZ2l0OmdpdC1pbmRleC1wYWNrWzFdIG9uIHRoZSAqLnBhY2sgZmlsZSB0byByZWdlbmVyYXRlCit0aGUgYCouaWR4YCBmaWxlLgorCitwYWNrLnBhY2tTaXplTGltaXQ6OgorCVRoZSBtYXhpbXVtIHNpemUgb2YgYSBwYWNrLiAgVGhpcyBzZXR0aW5nIG9ubHkgYWZmZWN0cworCXBhY2tpbmcgdG8gYSBmaWxlIHdoZW4gcmVwYWNraW5nLCBpLmUuIHRoZSBnaXQ6Ly8gcHJvdG9jb2wKKwlpcyB1bmFmZmVjdGVkLiAgSXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGAtLW1heC1wYWNrLXNpemVgCisJb3B0aW9uIG9mIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXS4gIFJlYWNoaW5nIHRoaXMgbGltaXQgcmVzdWx0cworCWluIHRoZSBjcmVhdGlvbiBvZiBtdWx0aXBsZSBwYWNrZmlsZXM7IHdoaWNoIGluIHR1cm4gcHJldmVudHMKKwliaXRtYXBzIGZyb20gYmVpbmcgY3JlYXRlZC4KKwlUaGUgbWluaW11bSBzaXplIGFsbG93ZWQgaXMgbGltaXRlZCB0byAxIE1pQi4KKwlUaGUgZGVmYXVsdCBpcyB1bmxpbWl0ZWQuCisJQ29tbW9uIHVuaXQgc3VmZml4ZXMgb2YgJ2snLCAnbScsIG9yICdnJyBhcmUKKwlzdXBwb3J0ZWQuCisKK3BhY2sudXNlQml0bWFwczo6CisJV2hlbiB0cnVlLCBnaXQgd2lsbCB1c2UgcGFjayBiaXRtYXBzIChpZiBhdmFpbGFibGUpIHdoZW4gcGFja2luZworCXRvIHN0ZG91dCAoZS5nLiwgZHVyaW5nIHRoZSBzZXJ2ZXIgc2lkZSBvZiBhIGZldGNoKS4gRGVmYXVsdHMgdG8KKwl0cnVlLiBZb3Ugc2hvdWxkIG5vdCBnZW5lcmFsbHkgbmVlZCB0byB0dXJuIHRoaXMgb2ZmIHVubGVzcworCXlvdSBhcmUgZGVidWdnaW5nIHBhY2sgYml0bWFwcy4KKworcGFjay51c2VTcGFyc2U6OgorCVdoZW4gdHJ1ZSwgZ2l0IHdpbGwgZGVmYXVsdCB0byB1c2luZyB0aGUgJy0tc3BhcnNlJyBvcHRpb24gaW4KKwknZ2l0IHBhY2stb2JqZWN0cycgd2hlbiB0aGUgJy0tcmV2cycgb3B0aW9uIGlzIHByZXNlbnQuIFRoaXMKKwlhbGdvcml0aG0gb25seSB3YWxrcyB0cmVlcyB0aGF0IGFwcGVhciBpbiBwYXRocyB0aGF0IGludHJvZHVjZSBuZXcKKwlvYmplY3RzLiBUaGlzIGNhbiBoYXZlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGJlbmVmaXRzIHdoZW4KKwljb21wdXRpbmcgYSBwYWNrIHRvIHNlbmQgYSBzbWFsbCBjaGFuZ2UuIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlCisJdGhhdCBleHRyYSBvYmplY3RzIGFyZSBhZGRlZCB0byB0aGUgcGFjay1maWxlIGlmIHRoZSBpbmNsdWRlZAorCWNvbW1pdHMgY29udGFpbiBjZXJ0YWluIHR5cGVzIG9mIGRpcmVjdCByZW5hbWVzLiBEZWZhdWx0IGlzCisJYHRydWVgLgorCitwYWNrLndyaXRlQml0bWFwcyAoZGVwcmVjYXRlZCk6OgorCVRoaXMgaXMgYSBkZXByZWNhdGVkIHN5bm9ueW0gZm9yIGByZXBhY2sud3JpdGVCaXRtYXBzYC4KKworcGFjay53cml0ZUJpdG1hcEhhc2hDYWNoZTo6CisJV2hlbiB0cnVlLCBnaXQgd2lsbCBpbmNsdWRlIGEgImhhc2ggY2FjaGUiIHNlY3Rpb24gaW4gdGhlIGJpdG1hcAorCWluZGV4IChpZiBvbmUgaXMgd3JpdHRlbikuIFRoaXMgY2FjaGUgY2FuIGJlIHVzZWQgdG8gZmVlZCBnaXQncworCWRlbHRhIGhldXJpc3RpY3MsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYmV0dGVyIGRlbHRhcyBiZXR3ZWVuCisJYml0bWFwcGVkIGFuZCBub24tYml0bWFwcGVkIG9iamVjdHMgKGUuZy4sIHdoZW4gc2VydmluZyBhIGZldGNoCisJYmV0d2VlbiBhbiBvbGRlciwgYml0bWFwcGVkIHBhY2sgYW5kIG9iamVjdHMgdGhhdCBoYXZlIGJlZW4KKwlwdXNoZWQgc2luY2UgdGhlIGxhc3QgZ2MpLiBUaGUgZG93bnNpZGUgaXMgdGhhdCBpdCBjb25zdW1lcyA0CisJYnl0ZXMgcGVyIG9iamVjdCBvZiBkaXNrIHNwYWNlLiBEZWZhdWx0cyB0byB0cnVlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvcGFnZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcGFnZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzMxY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9wYWdlci50eHQKQEAgLTAsMCArMSw4IEBACitwYWdlci48Y21kPjo6CisJSWYgdGhlIHZhbHVlIGlzIGJvb2xlYW4sIHR1cm5zIG9uIG9yIG9mZiBwYWdpbmF0aW9uIG9mIHRoZQorCW91dHB1dCBvZiBhIHBhcnRpY3VsYXIgR2l0IHN1YmNvbW1hbmQgd2hlbiB3cml0aW5nIHRvIGEgdHR5LgorCU90aGVyd2lzZSwgdHVybnMgb24gcGFnaW5hdGlvbiBmb3IgdGhlIHN1YmNvbW1hbmQgdXNpbmcgdGhlCisJcGFnZXIgc3BlY2lmaWVkIGJ5IHRoZSB2YWx1ZSBvZiBgcGFnZXIuPGNtZD5gLiAgSWYgYC0tcGFnaW5hdGVgCisJb3IgYC0tbm8tcGFnZXJgIGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBpdCB0YWtlcworCXByZWNlZGVuY2Ugb3ZlciB0aGlzIG9wdGlvbi4gIFRvIGRpc2FibGUgcGFnaW5hdGlvbiBmb3IgYWxsCisJY29tbWFuZHMsIHNldCBgY29yZS5wYWdlcmAgb3IgYEdJVF9QQUdFUmAgdG8gYGNhdGAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9wcmV0dHkudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcHJldHR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjNjNmI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcHJldHR5LnR4dApAQCAtMCwwICsxLDkgQEAKK3ByZXR0eS48bmFtZT46OgorCUFsaWFzIGZvciBhIC0tcHJldHR5PSBmb3JtYXQgc3RyaW5nLCBhcyBzcGVjaWZpZWQgaW4KKwlsaW5rZ2l0OmdpdC1sb2dbMV0uIEFueSBhbGlhc2VzIGRlZmluZWQgaGVyZSBjYW4gYmUgdXNlZCBqdXN0CisJYXMgdGhlIGJ1aWx0LWluIHByZXR0eSBmb3JtYXRzIGNvdWxkLiBGb3IgZXhhbXBsZSwKKwlydW5uaW5nIGBnaXQgY29uZmlnIHByZXR0eS5jaGFuZ2Vsb2cgImZvcm1hdDoqICVIICVzImAKKwl3b3VsZCBjYXVzZSB0aGUgaW52b2NhdGlvbiBgZ2l0IGxvZyAtLXByZXR0eT1jaGFuZ2Vsb2dgCisJdG8gYmUgZXF1aXZhbGVudCB0byBydW5uaW5nIGBnaXQgbG9nICItLXByZXR0eT1mb3JtYXQ6KiAlSCAlcyJgLgorCU5vdGUgdGhhdCBhbiBhbGlhcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYSBidWlsdC1pbiBmb3JtYXQKKwl3aWxsIGJlIHNpbGVudGx5IGlnbm9yZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9wcm90b2NvbC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9wcm90b2NvbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI0MDE0MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3Byb3RvY29sLnR4dApAQCAtMCwwICsxLDYzIEBACitwcm90b2NvbC5hbGxvdzo6CisJSWYgc2V0LCBwcm92aWRlIGEgdXNlciBkZWZpbmVkIGRlZmF1bHQgcG9saWN5IGZvciBhbGwgcHJvdG9jb2xzIHdoaWNoCisJZG9uJ3QgZXhwbGljaXRseSBoYXZlIGEgcG9saWN5IChgcHJvdG9jb2wuPG5hbWU+LmFsbG93YCkuICBCeSBkZWZhdWx0LAorCWlmIHVuc2V0LCBrbm93bi1zYWZlIHByb3RvY29scyAoaHR0cCwgaHR0cHMsIGdpdCwgc3NoLCBmaWxlKSBoYXZlIGEKKwlkZWZhdWx0IHBvbGljeSBvZiBgYWx3YXlzYCwga25vd24tZGFuZ2Vyb3VzIHByb3RvY29scyAoZXh0KSBoYXZlIGEKKwlkZWZhdWx0IHBvbGljeSBvZiBgbmV2ZXJgLCBhbmQgYWxsIG90aGVyIHByb3RvY29scyBoYXZlIGEgZGVmYXVsdAorCXBvbGljeSBvZiBgdXNlcmAuICBTdXBwb3J0ZWQgcG9saWNpZXM6CisrCistLQorCisqIGBhbHdheXNgIC0gcHJvdG9jb2wgaXMgYWx3YXlzIGFibGUgdG8gYmUgdXNlZC4KKworKiBgbmV2ZXJgIC0gcHJvdG9jb2wgaXMgbmV2ZXIgYWJsZSB0byBiZSB1c2VkLgorCisqIGB1c2VyYCAtIHByb3RvY29sIGlzIG9ubHkgYWJsZSB0byBiZSB1c2VkIHdoZW4gYEdJVF9QUk9UT0NPTF9GUk9NX1VTRVJgIGlzCisgIGVpdGhlciB1bnNldCBvciBoYXMgYSB2YWx1ZSBvZiAxLiAgVGhpcyBwb2xpY3kgc2hvdWxkIGJlIHVzZWQgd2hlbiB5b3Ugd2FudCBhCisgIHByb3RvY29sIHRvIGJlIGRpcmVjdGx5IHVzYWJsZSBieSB0aGUgdXNlciBidXQgZG9uJ3Qgd2FudCBpdCB1c2VkIGJ5IGNvbW1hbmRzIHdoaWNoCisgIGV4ZWN1dGUgY2xvbmUvZmV0Y2gvcHVzaCBjb21tYW5kcyB3aXRob3V0IHVzZXIgaW5wdXQsIGUuZy4gcmVjdXJzaXZlCisgIHN1Ym1vZHVsZSBpbml0aWFsaXphdGlvbi4KKworLS0KKworcHJvdG9jb2wuPG5hbWU+LmFsbG93OjoKKwlTZXQgYSBwb2xpY3kgdG8gYmUgdXNlZCBieSBwcm90b2NvbCBgPG5hbWU+YCB3aXRoIGNsb25lL2ZldGNoL3B1c2gKKwljb21tYW5kcy4gU2VlIGBwcm90b2NvbC5hbGxvd2AgYWJvdmUgZm9yIHRoZSBhdmFpbGFibGUgcG9saWNpZXMuCisrCitUaGUgcHJvdG9jb2wgbmFtZXMgY3VycmVudGx5IHVzZWQgYnkgZ2l0IGFyZToKKysKKy0tCisgIC0gYGZpbGVgOiBhbnkgbG9jYWwgZmlsZS1iYXNlZCBwYXRoIChpbmNsdWRpbmcgYGZpbGU6Ly9gIFVSTHMsCisgICAgb3IgbG9jYWwgcGF0aHMpCisKKyAgLSBgZ2l0YDogdGhlIGFub255bW91cyBnaXQgcHJvdG9jb2wgb3ZlciBhIGRpcmVjdCBUQ1AKKyAgICBjb25uZWN0aW9uIChvciBwcm94eSwgaWYgY29uZmlndXJlZCkKKworICAtIGBzc2hgOiBnaXQgb3ZlciBzc2ggKGluY2x1ZGluZyBgaG9zdDpwYXRoYCBzeW50YXgsCisgICAgYHNzaDovL2AsIGV0YykuCisKKyAgLSBgaHR0cGA6IGdpdCBvdmVyIGh0dHAsIGJvdGggInNtYXJ0IGh0dHAiIGFuZCAiZHVtYiBodHRwIi4KKyAgICBOb3RlIHRoYXQgdGhpcyBkb2VzIF9ub3RfIGluY2x1ZGUgYGh0dHBzYDsgaWYgeW91IHdhbnQgdG8gY29uZmlndXJlCisgICAgYm90aCwgeW91IG11c3QgZG8gc28gaW5kaXZpZHVhbGx5LgorCisgIC0gYW55IGV4dGVybmFsIGhlbHBlcnMgYXJlIG5hbWVkIGJ5IHRoZWlyIHByb3RvY29sIChlLmcuLCB1c2UKKyAgICBgaGdgIHRvIGFsbG93IHRoZSBgZ2l0LXJlbW90ZS1oZ2AgaGVscGVyKQorLS0KKworcHJvdG9jb2wudmVyc2lvbjo6CisJSWYgc2V0LCBjbGllbnRzIHdpbGwgYXR0ZW1wdCB0byBjb21tdW5pY2F0ZSB3aXRoIGEgc2VydmVyCisJdXNpbmcgdGhlIHNwZWNpZmllZCBwcm90b2NvbCB2ZXJzaW9uLiAgSWYgdGhlIHNlcnZlciBkb2VzCisJbm90IHN1cHBvcnQgaXQsIGNvbW11bmljYXRpb24gZmFsbHMgYmFjayB0byB2ZXJzaW9uIDAuCisJSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIGAwYC4KKwlTdXBwb3J0ZWQgdmVyc2lvbnM6CisrCistLQorCisqIGAwYCAtIHRoZSBvcmlnaW5hbCB3aXJlIHByb3RvY29sLgorCisqIGAxYCAtIHRoZSBvcmlnaW5hbCB3aXJlIHByb3RvY29sIHdpdGggdGhlIGFkZGl0aW9uIG9mIGEgdmVyc2lvbiBzdHJpbmcKKyAgaW4gdGhlIGluaXRpYWwgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLgorCisqIGAyYCAtIGxpbms6dGVjaG5pY2FsL3Byb3RvY29sLXYyLmh0bWxbd2lyZSBwcm90b2NvbCB2ZXJzaW9uIDJdLgorCistLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvcHVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9wdWxsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDA0ODMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcHVsbC50eHQKQEAgLTAsMCArMSwzNyBAQAorcHVsbC5mZjo6CisJQnkgZGVmYXVsdCwgR2l0IGRvZXMgbm90IGNyZWF0ZSBhbiBleHRyYSBtZXJnZSBjb21taXQgd2hlbiBtZXJnaW5nCisJYSBjb21taXQgdGhhdCBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIGN1cnJlbnQgY29tbWl0LiBJbnN0ZWFkLCB0aGUKKwl0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGZhc3QtZm9yd2FyZGVkLiBXaGVuIHNldCB0byBgZmFsc2VgLAorCXRoaXMgdmFyaWFibGUgdGVsbHMgR2l0IHRvIGNyZWF0ZSBhbiBleHRyYSBtZXJnZSBjb21taXQgaW4gc3VjaAorCWEgY2FzZSAoZXF1aXZhbGVudCB0byBnaXZpbmcgdGhlIGAtLW5vLWZmYCBvcHRpb24gZnJvbSB0aGUgY29tbWFuZAorCWxpbmUpLiBXaGVuIHNldCB0byBgb25seWAsIG9ubHkgc3VjaCBmYXN0LWZvcndhcmQgbWVyZ2VzIGFyZQorCWFsbG93ZWQgKGVxdWl2YWxlbnQgdG8gZ2l2aW5nIHRoZSBgLS1mZi1vbmx5YCBvcHRpb24gZnJvbSB0aGUKKwljb21tYW5kIGxpbmUpLiBUaGlzIHNldHRpbmcgb3ZlcnJpZGVzIGBtZXJnZS5mZmAgd2hlbiBwdWxsaW5nLgorCitwdWxsLnJlYmFzZTo6CisJV2hlbiB0cnVlLCByZWJhc2UgYnJhbmNoZXMgb24gdG9wIG9mIHRoZSBmZXRjaGVkIGJyYW5jaCwgaW5zdGVhZAorCW9mIG1lcmdpbmcgdGhlIGRlZmF1bHQgYnJhbmNoIGZyb20gdGhlIGRlZmF1bHQgcmVtb3RlIHdoZW4gImdpdAorCXB1bGwiIGlzIHJ1bi4gU2VlICJicmFuY2guPG5hbWU+LnJlYmFzZSIgZm9yIHNldHRpbmcgdGhpcyBvbiBhCisJcGVyLWJyYW5jaCBiYXNpcy4KKysKK1doZW4gYG1lcmdlc2AgKG9yIGp1c3QgJ20nKSwgcGFzcyB0aGUgYC0tcmViYXNlLW1lcmdlc2Agb3B0aW9uIHRvICdnaXQgcmViYXNlJworc28gdGhhdCB0aGUgbG9jYWwgbWVyZ2UgY29tbWl0cyBhcmUgaW5jbHVkZWQgaW4gdGhlIHJlYmFzZSAoc2VlCitsaW5rZ2l0OmdpdC1yZWJhc2VbMV0gZm9yIGRldGFpbHMpLgorKworV2hlbiBgcHJlc2VydmVgIChvciBqdXN0ICdwJywgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgbWVyZ2VzYCksIGFsc28gcGFzcworYC0tcHJlc2VydmUtbWVyZ2VzYCBhbG9uZyB0byAnZ2l0IHJlYmFzZScgc28gdGhhdCBsb2NhbGx5IGNvbW1pdHRlZCBtZXJnZQorY29tbWl0cyB3aWxsIG5vdCBiZSBmbGF0dGVuZWQgYnkgcnVubmluZyAnZ2l0IHB1bGwnLgorKworV2hlbiB0aGUgdmFsdWUgaXMgYGludGVyYWN0aXZlYCAob3IganVzdCAnaScpLCB0aGUgcmViYXNlIGlzIHJ1biBpbiBpbnRlcmFjdGl2ZQorbW9kZS4KKysKKypOT1RFKjogdGhpcyBpcyBhIHBvc3NpYmx5IGRhbmdlcm91cyBvcGVyYXRpb247IGRvICpub3QqIHVzZQoraXQgdW5sZXNzIHlvdSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgKHNlZSBsaW5rZ2l0OmdpdC1yZWJhc2VbMV0KK2ZvciBkZXRhaWxzKS4KKworcHVsbC5vY3RvcHVzOjoKKwlUaGUgZGVmYXVsdCBtZXJnZSBzdHJhdGVneSB0byB1c2Ugd2hlbiBwdWxsaW5nIG11bHRpcGxlIGJyYW5jaGVzCisJYXQgb25jZS4KKworcHVsbC50d29oZWFkOjoKKwlUaGUgZGVmYXVsdCBtZXJnZSBzdHJhdGVneSB0byB1c2Ugd2hlbiBwdWxsaW5nIGEgc2luZ2xlIGJyYW5jaC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3B1c2gudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcHVzaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVlNWIzOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3B1c2gudHh0CkBAIC0wLDAgKzEsMTE2IEBACitwdXNoLmRlZmF1bHQ6OgorCURlZmluZXMgdGhlIGFjdGlvbiBgZ2l0IHB1c2hgIHNob3VsZCB0YWtlIGlmIG5vIHJlZnNwZWMgaXMKKwlnaXZlbiAod2hldGhlciBmcm9tIHRoZSBjb21tYW5kLWxpbmUsIGNvbmZpZywgb3IgZWxzZXdoZXJlKS4KKwlEaWZmZXJlbnQgdmFsdWVzIGFyZSB3ZWxsLXN1aXRlZCBmb3IKKwlzcGVjaWZpYyB3b3JrZmxvd3M7IGZvciBpbnN0YW5jZSwgaW4gYSBwdXJlbHkgY2VudHJhbCB3b3JrZmxvdworCShpLmUuIHRoZSBmZXRjaCBzb3VyY2UgaXMgZXF1YWwgdG8gdGhlIHB1c2ggZGVzdGluYXRpb24pLAorCWB1cHN0cmVhbWAgaXMgcHJvYmFibHkgd2hhdCB5b3Ugd2FudC4gIFBvc3NpYmxlIHZhbHVlcyBhcmU6CisrCistLQorCisqIGBub3RoaW5nYCAtIGRvIG5vdCBwdXNoIGFueXRoaW5nIChlcnJvciBvdXQpIHVubGVzcyBhIHJlZnNwZWMgaXMKKyAgZ2l2ZW4uIFRoaXMgaXMgcHJpbWFyaWx5IG1lYW50IGZvciBwZW9wbGUgd2hvIHdhbnQgdG8KKyAgYXZvaWQgbWlzdGFrZXMgYnkgYWx3YXlzIGJlaW5nIGV4cGxpY2l0LgorCisqIGBjdXJyZW50YCAtIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHVwZGF0ZSBhIGJyYW5jaCB3aXRoIHRoZSBzYW1lCisgIG5hbWUgb24gdGhlIHJlY2VpdmluZyBlbmQuICBXb3JrcyBpbiBib3RoIGNlbnRyYWwgYW5kIG5vbi1jZW50cmFsCisgIHdvcmtmbG93cy4KKworKiBgdXBzdHJlYW1gIC0gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYmFjayB0byB0aGUgYnJhbmNoIHdob3NlCisgIGNoYW5nZXMgYXJlIHVzdWFsbHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCAod2hpY2ggaXMKKyAgY2FsbGVkIGBAe3Vwc3RyZWFtfWApLiAgVGhpcyBtb2RlIG9ubHkgbWFrZXMgc2Vuc2UgaWYgeW91IGFyZQorICBwdXNoaW5nIHRvIHRoZSBzYW1lIHJlcG9zaXRvcnkgeW91IHdvdWxkIG5vcm1hbGx5IHB1bGwgZnJvbQorICAoaS5lLiBjZW50cmFsIHdvcmtmbG93KS4KKworKiBgdHJhY2tpbmdgIC0gVGhpcyBpcyBhIGRlcHJlY2F0ZWQgc3lub255bSBmb3IgYHVwc3RyZWFtYC4KKworKiBgc2ltcGxlYCAtIGluIGNlbnRyYWxpemVkIHdvcmtmbG93LCB3b3JrIGxpa2UgYHVwc3RyZWFtYCB3aXRoIGFuCisgIGFkZGVkIHNhZmV0eSB0byByZWZ1c2UgdG8gcHVzaCBpZiB0aGUgdXBzdHJlYW0gYnJhbmNoJ3MgbmFtZSBpcworICBkaWZmZXJlbnQgZnJvbSB0aGUgbG9jYWwgb25lLgorKworV2hlbiBwdXNoaW5nIHRvIGEgcmVtb3RlIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIHJlbW90ZSB5b3Ugbm9ybWFsbHkKK3B1bGwgZnJvbSwgd29yayBhcyBgY3VycmVudGAuICBUaGlzIGlzIHRoZSBzYWZlc3Qgb3B0aW9uIGFuZCBpcyBzdWl0ZWQKK2ZvciBiZWdpbm5lcnMuCisrCitUaGlzIG1vZGUgaGFzIGJlY29tZSB0aGUgZGVmYXVsdCBpbiBHaXQgMi4wLgorCisqIGBtYXRjaGluZ2AgLSBwdXNoIGFsbCBicmFuY2hlcyBoYXZpbmcgdGhlIHNhbWUgbmFtZSBvbiBib3RoIGVuZHMuCisgIFRoaXMgbWFrZXMgdGhlIHJlcG9zaXRvcnkgeW91IGFyZSBwdXNoaW5nIHRvIHJlbWVtYmVyIHRoZSBzZXQgb2YKKyAgYnJhbmNoZXMgdGhhdCB3aWxsIGJlIHB1c2hlZCBvdXQgKGUuZy4gaWYgeW91IGFsd2F5cyBwdXNoICdtYWludCcKKyAgYW5kICdtYXN0ZXInIHRoZXJlIGFuZCBubyBvdGhlciBicmFuY2hlcywgdGhlIHJlcG9zaXRvcnkgeW91IHB1c2gKKyAgdG8gd2lsbCBoYXZlIHRoZXNlIHR3byBicmFuY2hlcywgYW5kIHlvdXIgbG9jYWwgJ21haW50JyBhbmQKKyAgJ21hc3Rlcicgd2lsbCBiZSBwdXNoZWQgdGhlcmUpLgorKworVG8gdXNlIHRoaXMgbW9kZSBlZmZlY3RpdmVseSwgeW91IGhhdmUgdG8gbWFrZSBzdXJlIF9hbGxfIHRoZQorYnJhbmNoZXMgeW91IHdvdWxkIHB1c2ggb3V0IGFyZSByZWFkeSB0byBiZSBwdXNoZWQgb3V0IGJlZm9yZQorcnVubmluZyAnZ2l0IHB1c2gnLCBhcyB0aGUgd2hvbGUgcG9pbnQgb2YgdGhpcyBtb2RlIGlzIHRvIGFsbG93IHlvdQordG8gcHVzaCBhbGwgb2YgdGhlIGJyYW5jaGVzIGluIG9uZSBnby4gIElmIHlvdSB1c3VhbGx5IGZpbmlzaCB3b3JrCitvbiBvbmx5IG9uZSBicmFuY2ggYW5kIHB1c2ggb3V0IHRoZSByZXN1bHQsIHdoaWxlIG90aGVyIGJyYW5jaGVzIGFyZQordW5maW5pc2hlZCwgdGhpcyBtb2RlIGlzIG5vdCBmb3IgeW91LiAgQWxzbyB0aGlzIG1vZGUgaXMgbm90CitzdWl0YWJsZSBmb3IgcHVzaGluZyBpbnRvIGEgc2hhcmVkIGNlbnRyYWwgcmVwb3NpdG9yeSwgYXMgb3RoZXIKK3Blb3BsZSBtYXkgYWRkIG5ldyBicmFuY2hlcyB0aGVyZSwgb3IgdXBkYXRlIHRoZSB0aXAgb2YgZXhpc3RpbmcKK2JyYW5jaGVzIG91dHNpZGUgeW91ciBjb250cm9sLgorKworVGhpcyB1c2VkIHRvIGJlIHRoZSBkZWZhdWx0LCBidXQgbm90IHNpbmNlIEdpdCAyLjAgKGBzaW1wbGVgIGlzIHRoZQorbmV3IGRlZmF1bHQpLgorCistLQorCitwdXNoLmZvbGxvd1RhZ3M6OgorCUlmIHNldCB0byB0cnVlIGVuYWJsZSBgLS1mb2xsb3ctdGFnc2Agb3B0aW9uIGJ5IGRlZmF1bHQuICBZb3UKKwltYXkgb3ZlcnJpZGUgdGhpcyBjb25maWd1cmF0aW9uIGF0IHRpbWUgb2YgcHVzaCBieSBzcGVjaWZ5aW5nCisJYC0tbm8tZm9sbG93LXRhZ3NgLgorCitwdXNoLmdwZ1NpZ246OgorCU1heSBiZSBzZXQgdG8gYSBib29sZWFuIHZhbHVlLCBvciB0aGUgc3RyaW5nICdpZi1hc2tlZCcuIEEgdHJ1ZQorCXZhbHVlIGNhdXNlcyBhbGwgcHVzaGVzIHRvIGJlIEdQRyBzaWduZWQsIGFzIGlmIGAtLXNpZ25lZGAgaXMKKwlwYXNzZWQgdG8gbGlua2dpdDpnaXQtcHVzaFsxXS4gVGhlIHN0cmluZyAnaWYtYXNrZWQnIGNhdXNlcworCXB1c2hlcyB0byBiZSBzaWduZWQgaWYgdGhlIHNlcnZlciBzdXBwb3J0cyBpdCwgYXMgaWYKKwlgLS1zaWduZWQ9aWYtYXNrZWRgIGlzIHBhc3NlZCB0byAnZ2l0IHB1c2gnLiBBIGZhbHNlIHZhbHVlIG1heQorCW92ZXJyaWRlIGEgdmFsdWUgZnJvbSBhIGxvd2VyLXByaW9yaXR5IGNvbmZpZyBmaWxlLiBBbiBleHBsaWNpdAorCWNvbW1hbmQtbGluZSBmbGFnIGFsd2F5cyBvdmVycmlkZXMgdGhpcyBjb25maWcgb3B0aW9uLgorCitwdXNoLnB1c2hPcHRpb246OgorCVdoZW4gbm8gYC0tcHVzaC1vcHRpb249PG9wdGlvbj5gIGFyZ3VtZW50IGlzIGdpdmVuIGZyb20gdGhlCisJY29tbWFuZCBsaW5lLCBgZ2l0IHB1c2hgIGJlaGF2ZXMgYXMgaWYgZWFjaCA8dmFsdWU+IG9mCisJdGhpcyB2YXJpYWJsZSBpcyBnaXZlbiBhcyBgLS1wdXNoLW9wdGlvbj08dmFsdWU+YC4KKysKK1RoaXMgaXMgYSBtdWx0aS12YWx1ZWQgdmFyaWFibGUsIGFuZCBhbiBlbXB0eSB2YWx1ZSBjYW4gYmUgdXNlZCBpbiBhCitoaWdoZXIgcHJpb3JpdHkgY29uZmlndXJhdGlvbiBmaWxlIChlLmcuIGAuZ2l0L2NvbmZpZ2AgaW4gYQorcmVwb3NpdG9yeSkgdG8gY2xlYXIgdGhlIHZhbHVlcyBpbmhlcml0ZWQgZnJvbSBhIGxvd2VyIHByaW9yaXR5Citjb25maWd1cmF0aW9uIGZpbGVzIChlLmcuIGAkSE9NRS8uZ2l0Y29uZmlnYCkuCisrCistLS0tCisKK0V4YW1wbGU6CisKKy9ldGMvZ2l0Y29uZmlnCisgIHB1c2gucHVzaG9wdGlvbiA9IGEKKyAgcHVzaC5wdXNob3B0aW9uID0gYgorCit+Ly5naXRjb25maWcKKyAgcHVzaC5wdXNob3B0aW9uID0gYworCityZXBvLy5naXQvY29uZmlnCisgIHB1c2gucHVzaG9wdGlvbiA9CisgIHB1c2gucHVzaG9wdGlvbiA9IGIKKworVGhpcyB3aWxsIHJlc3VsdCBpbiBvbmx5IGIgKGEgYW5kIGMgYXJlIGNsZWFyZWQpLgorCistLS0tCisKK3B1c2gucmVjdXJzZVN1Ym1vZHVsZXM6OgorCU1ha2Ugc3VyZSBhbGwgc3VibW9kdWxlIGNvbW1pdHMgdXNlZCBieSB0aGUgcmV2aXNpb25zIHRvIGJlIHB1c2hlZAorCWFyZSBhdmFpbGFibGUgb24gYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLiBJZiB0aGUgdmFsdWUgaXMgJ2NoZWNrJworCXRoZW4gR2l0IHdpbGwgdmVyaWZ5IHRoYXQgYWxsIHN1Ym1vZHVsZSBjb21taXRzIHRoYXQgY2hhbmdlZCBpbiB0aGUKKwlyZXZpc2lvbnMgdG8gYmUgcHVzaGVkIGFyZSBhdmFpbGFibGUgb24gYXQgbGVhc3Qgb25lIHJlbW90ZSBvZiB0aGUKKwlzdWJtb2R1bGUuIElmIGFueSBjb21taXRzIGFyZSBtaXNzaW5nLCB0aGUgcHVzaCB3aWxsIGJlIGFib3J0ZWQgYW5kCisJZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cy4gSWYgdGhlIHZhbHVlIGlzICdvbi1kZW1hbmQnIHRoZW4gYWxsCisJc3VibW9kdWxlcyB0aGF0IGNoYW5nZWQgaW4gdGhlIHJldmlzaW9ucyB0byBiZSBwdXNoZWQgd2lsbCBiZQorCXB1c2hlZC4gSWYgb24tZGVtYW5kIHdhcyBub3QgYWJsZSB0byBwdXNoIGFsbCBuZWNlc3NhcnkgcmV2aXNpb25zCisJaXQgd2lsbCBhbHNvIGJlIGFib3J0ZWQgYW5kIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMuIElmIHRoZSB2YWx1ZQorCWlzICdubycgdGhlbiBkZWZhdWx0IGJlaGF2aW9yIG9mIGlnbm9yaW5nIHN1Ym1vZHVsZXMgd2hlbiBwdXNoaW5nCisJaXMgcmV0YWluZWQuIFlvdSBtYXkgb3ZlcnJpZGUgdGhpcyBjb25maWd1cmF0aW9uIGF0IHRpbWUgb2YgcHVzaCBieQorCXNwZWNpZnlpbmcgJy0tcmVjdXJzZS1zdWJtb2R1bGVzPWNoZWNrfG9uLWRlbWFuZHxubycuCisJSWYgbm90IHNldCwgJ25vJyBpcyB1c2VkIGJ5IGRlZmF1bHQsIHVubGVzcyAnc3VibW9kdWxlLnJlY3Vyc2UnIGlzCisJc2V0IChpbiB3aGljaCBjYXNlIGEgJ3RydWUnIHZhbHVlIG1lYW5zICdvbi1kZW1hbmQnKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3JlYmFzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9yZWJhc2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmN2EwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9yZWJhc2UudHh0CkBAIC0wLDAgKzEsNzAgQEAKK3JlYmFzZS51c2VCdWlsdGluOjoKKwlVbnVzZWQgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gVXNlZCBpbiBHaXQgdmVyc2lvbnMgMi4yMCBhbmQKKwkyLjIxIGFzIGFuIGVzY2FwZSBoYXRjaCB0byBlbmFibGUgdGhlIGxlZ2FjeSBzaGVsbHNjcmlwdAorCWltcGxlbWVudGF0aW9uIG9mIHJlYmFzZS4gTm93IHRoZSBidWlsdC1pbiByZXdyaXRlIG9mIGl0IGluIEMKKwlpcyBhbHdheXMgdXNlZC4gU2V0dGluZyB0aGlzIHdpbGwgZW1pdCBhIHdhcm5pbmcsIHRvIGFsZXJ0IGFueQorCXJlbWFpbmluZyB1c2VycyB0aGF0IHNldHRpbmcgdGhpcyBub3cgZG9lcyBub3RoaW5nLgorCityZWJhc2UuYmFja2VuZDo6CisJRGVmYXVsdCBiYWNrZW5kIHRvIHVzZSBmb3IgcmViYXNpbmcuICBQb3NzaWJsZSBjaG9pY2VzIGFyZQorCSdhcHBseScgb3IgJ21lcmdlJy4gIEluIHRoZSBmdXR1cmUsIGlmIHRoZSBtZXJnZSBiYWNrZW5kIGdhaW5zCisJYWxsIHJlbWFpbmluZyBjYXBhYmlsaXRpZXMgb2YgdGhlIGFwcGx5IGJhY2tlbmQsIHRoaXMgc2V0dGluZworCW1heSBiZWNvbWUgdW51c2VkLgorCityZWJhc2Uuc3RhdDo6CisJV2hldGhlciB0byBzaG93IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIHNpbmNlIHRoZSBsYXN0CisJcmViYXNlLiBGYWxzZSBieSBkZWZhdWx0LgorCityZWJhc2UuYXV0b1NxdWFzaDo6CisJSWYgc2V0IHRvIHRydWUgZW5hYmxlIGAtLWF1dG9zcXVhc2hgIG9wdGlvbiBieSBkZWZhdWx0LgorCityZWJhc2UuYXV0b1N0YXNoOjoKKwlXaGVuIHNldCB0byB0cnVlLCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIHRlbXBvcmFyeSBzdGFzaCBlbnRyeQorCWJlZm9yZSB0aGUgb3BlcmF0aW9uIGJlZ2lucywgYW5kIGFwcGx5IGl0IGFmdGVyIHRoZSBvcGVyYXRpb24KKwllbmRzLiAgVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gcnVuIHJlYmFzZSBvbiBhIGRpcnR5IHdvcmt0cmVlLgorCUhvd2V2ZXIsIHVzZSB3aXRoIGNhcmU6IHRoZSBmaW5hbCBzdGFzaCBhcHBsaWNhdGlvbiBhZnRlciBhCisJc3VjY2Vzc2Z1bCByZWJhc2UgbWlnaHQgcmVzdWx0IGluIG5vbi10cml2aWFsIGNvbmZsaWN0cy4KKwlUaGlzIG9wdGlvbiBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYC0tbm8tYXV0b3N0YXNoYCBhbmQKKwlgLS1hdXRvc3Rhc2hgIG9wdGlvbnMgb2YgbGlua2dpdDpnaXQtcmViYXNlWzFdLgorCURlZmF1bHRzIHRvIGZhbHNlLgorCityZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjazo6CisJSWYgc2V0IHRvICJ3YXJuIiwgZ2l0IHJlYmFzZSAtaSB3aWxsIHByaW50IGEgd2FybmluZyBpZiBzb21lCisJY29tbWl0cyBhcmUgcmVtb3ZlZCAoZS5nLiBhIGxpbmUgd2FzIGRlbGV0ZWQpLCBob3dldmVyIHRoZQorCXJlYmFzZSB3aWxsIHN0aWxsIHByb2NlZWQuIElmIHNldCB0byAiZXJyb3IiLCBpdCB3aWxsIHByaW50CisJdGhlIHByZXZpb3VzIHdhcm5pbmcgYW5kIHN0b3AgdGhlIHJlYmFzZSwgJ2dpdCByZWJhc2UKKwktLWVkaXQtdG9kbycgY2FuIHRoZW4gYmUgdXNlZCB0byBjb3JyZWN0IHRoZSBlcnJvci4gSWYgc2V0IHRvCisJImlnbm9yZSIsIG5vIGNoZWNraW5nIGlzIGRvbmUuCisJVG8gZHJvcCBhIGNvbW1pdCB3aXRob3V0IHdhcm5pbmcgb3IgZXJyb3IsIHVzZSB0aGUgYGRyb3BgCisJY29tbWFuZCBpbiB0aGUgdG9kbyBsaXN0LgorCURlZmF1bHRzIHRvICJpZ25vcmUiLgorCityZWJhc2UuaW5zdHJ1Y3Rpb25Gb3JtYXQ6OgorCUEgZm9ybWF0IHN0cmluZywgYXMgc3BlY2lmaWVkIGluIGxpbmtnaXQ6Z2l0LWxvZ1sxXSwgdG8gYmUgdXNlZCBmb3IgdGhlCisJdG9kbyBsaXN0IGR1cmluZyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UuICBUaGUgZm9ybWF0IHdpbGwKKwlhdXRvbWF0aWNhbGx5IGhhdmUgdGhlIGxvbmcgY29tbWl0IGhhc2ggcHJlcGVuZGVkIHRvIHRoZSBmb3JtYXQuCisKK3JlYmFzZS5hYmJyZXZpYXRlQ29tbWFuZHM6OgorCUlmIHNldCB0byB0cnVlLCBgZ2l0IHJlYmFzZWAgd2lsbCB1c2UgYWJicmV2aWF0ZWQgY29tbWFuZCBuYW1lcyBpbiB0aGUKKwl0b2RvIGxpc3QgcmVzdWx0aW5nIGluIHNvbWV0aGluZyBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJcCBkZWFkYmVlIFRoZSBvbmVsaW5lIG9mIHRoZSBjb21taXQKKwlwIGZhMWFmZTEgVGhlIG9uZWxpbmUgb2YgdGhlIG5leHQgY29tbWl0CisJLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitpbnN0ZWFkIG9mOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXBpY2sgZGVhZGJlZSBUaGUgb25lbGluZSBvZiB0aGUgY29tbWl0CisJcGljayBmYTFhZmUxIFRoZSBvbmVsaW5lIG9mIHRoZSBuZXh0IGNvbW1pdAorCS4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworRGVmYXVsdHMgdG8gZmFsc2UuCisKK3JlYmFzZS5yZXNjaGVkdWxlRmFpbGVkRXhlYzo6CisJQXV0b21hdGljYWxseSByZXNjaGVkdWxlIGBleGVjYCBjb21tYW5kcyB0aGF0IGZhaWxlZC4gVGhpcyBvbmx5IG1ha2VzCisJc2Vuc2UgaW4gaW50ZXJhY3RpdmUgbW9kZSAob3Igd2hlbiBhbiBgLS1leGVjYCBvcHRpb24gd2FzIHByb3ZpZGVkKS4KKwlUaGlzIGlzIHRoZSBzYW1lIGFzIHNwZWNpZnlpbmcgdGhlIGAtLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWNgIG9wdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3JlY2VpdmUudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcmVjZWl2ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVmNzhhYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3JlY2VpdmUudHh0CkBAIC0wLDAgKzEsMTIzIEBACityZWNlaXZlLmFkdmVydGlzZUF0b21pYzo6CisJQnkgZGVmYXVsdCwgZ2l0LXJlY2VpdmUtcGFjayB3aWxsIGFkdmVydGlzZSB0aGUgYXRvbWljIHB1c2gKKwljYXBhYmlsaXR5IHRvIGl0cyBjbGllbnRzLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBhZHZlcnRpc2UgdGhpcworCWNhcGFiaWxpdHksIHNldCB0aGlzIHZhcmlhYmxlIHRvIGZhbHNlLgorCityZWNlaXZlLmFkdmVydGlzZVB1c2hPcHRpb25zOjoKKwlXaGVuIHNldCB0byB0cnVlLCBnaXQtcmVjZWl2ZS1wYWNrIHdpbGwgYWR2ZXJ0aXNlIHRoZSBwdXNoIG9wdGlvbnMKKwljYXBhYmlsaXR5IHRvIGl0cyBjbGllbnRzLiBGYWxzZSBieSBkZWZhdWx0LgorCityZWNlaXZlLmF1dG9nYzo6CisJQnkgZGVmYXVsdCwgZ2l0LXJlY2VpdmUtcGFjayB3aWxsIHJ1biAiZ2l0LWdjIC0tYXV0byIgYWZ0ZXIKKwlyZWNlaXZpbmcgZGF0YSBmcm9tIGdpdC1wdXNoIGFuZCB1cGRhdGluZyByZWZzLiAgWW91IGNhbiBzdG9wCisJaXQgYnkgc2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIGZhbHNlLgorCityZWNlaXZlLmNlcnROb25jZVNlZWQ6OgorCUJ5IHNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byBhIHN0cmluZywgYGdpdCByZWNlaXZlLXBhY2tgCisJd2lsbCBhY2NlcHQgYSBgZ2l0IHB1c2ggLS1zaWduZWRgIGFuZCB2ZXJpZmllcyBpdCBieSB1c2luZworCWEgIm5vbmNlIiBwcm90ZWN0ZWQgYnkgSE1BQyB1c2luZyB0aGlzIHN0cmluZyBhcyBhIHNlY3JldAorCWtleS4KKworcmVjZWl2ZS5jZXJ0Tm9uY2VTbG9wOjoKKwlXaGVuIGEgYGdpdCBwdXNoIC0tc2lnbmVkYCBzZW50IGEgcHVzaCBjZXJ0aWZpY2F0ZSB3aXRoIGEKKwkibm9uY2UiIHRoYXQgd2FzIGlzc3VlZCBieSBhIHJlY2VpdmUtcGFjayBzZXJ2aW5nIHRoZSBzYW1lCisJcmVwb3NpdG9yeSB3aXRoaW4gdGhpcyBtYW55IHNlY29uZHMsIGV4cG9ydCB0aGUgIm5vbmNlIgorCWZvdW5kIGluIHRoZSBjZXJ0aWZpY2F0ZSB0byBgR0lUX1BVU0hfQ0VSVF9OT05DRWAgdG8gdGhlCisJaG9va3MgKGluc3RlYWQgb2Ygd2hhdCB0aGUgcmVjZWl2ZS1wYWNrIGFza2VkIHRoZSBzZW5kaW5nCisJc2lkZSB0byBpbmNsdWRlKS4gIFRoaXMgbWF5IGFsbG93IHdyaXRpbmcgY2hlY2tzIGluCisJYHByZS1yZWNlaXZlYCBhbmQgYHBvc3QtcmVjZWl2ZWAgYSBiaXQgZWFzaWVyLiAgSW5zdGVhZCBvZgorCWNoZWNraW5nIGBHSVRfUFVTSF9DRVJUX05PTkNFX1NMT1BgIGVudmlyb25tZW50IHZhcmlhYmxlCisJdGhhdCByZWNvcmRzIGJ5IGhvdyBtYW55IHNlY29uZHMgdGhlIG5vbmNlIGlzIHN0YWxlIHRvCisJZGVjaWRlIGlmIHRoZXkgd2FudCB0byBhY2NlcHQgdGhlIGNlcnRpZmljYXRlLCB0aGV5IG9ubHkKKwljYW4gY2hlY2sgYEdJVF9QVVNIX0NFUlRfTk9OQ0VfU1RBVFVTYCBpcyBgT0tgLgorCityZWNlaXZlLmZzY2tPYmplY3RzOjoKKwlJZiBpdCBpcyBzZXQgdG8gdHJ1ZSwgZ2l0LXJlY2VpdmUtcGFjayB3aWxsIGNoZWNrIGFsbCByZWNlaXZlZAorCW9iamVjdHMuIFNlZSBgdHJhbnNmZXIuZnNja09iamVjdHNgIGZvciB3aGF0J3MgY2hlY2tlZC4KKwlEZWZhdWx0cyB0byBmYWxzZS4gSWYgbm90IHNldCwgdGhlIHZhbHVlIG9mCisJYHRyYW5zZmVyLmZzY2tPYmplY3RzYCBpcyB1c2VkIGluc3RlYWQuCisKK3JlY2VpdmUuZnNjay48bXNnLWlkPjo6CisJQWN0cyBsaWtlIGBmc2NrLjxtc2ctaWQ+YCwgYnV0IGlzIHVzZWQgYnkKKwlsaW5rZ2l0OmdpdC1yZWNlaXZlLXBhY2tbMV0gaW5zdGVhZCBvZgorCWxpbmtnaXQ6Z2l0LWZzY2tbMV0uIFNlZSB0aGUgYGZzY2suPG1zZy1pZD5gIGRvY3VtZW50YXRpb24gZm9yCisJZGV0YWlscy4KKworcmVjZWl2ZS5mc2NrLnNraXBMaXN0OjoKKwlBY3RzIGxpa2UgYGZzY2suc2tpcExpc3RgLCBidXQgaXMgdXNlZCBieQorCWxpbmtnaXQ6Z2l0LXJlY2VpdmUtcGFja1sxXSBpbnN0ZWFkIG9mCisJbGlua2dpdDpnaXQtZnNja1sxXS4gU2VlIHRoZSBgZnNjay5za2lwTGlzdGAgZG9jdW1lbnRhdGlvbiBmb3IKKwlkZXRhaWxzLgorCityZWNlaXZlLmtlZXBBbGl2ZTo6CisJQWZ0ZXIgcmVjZWl2aW5nIHRoZSBwYWNrIGZyb20gdGhlIGNsaWVudCwgYHJlY2VpdmUtcGFja2AgbWF5CisJcHJvZHVjZSBubyBvdXRwdXQgKGlmIGAtLXF1aWV0YCB3YXMgc3BlY2lmaWVkKSB3aGlsZSBwcm9jZXNzaW5nCisJdGhlIHBhY2ssIGNhdXNpbmcgc29tZSBuZXR3b3JrcyB0byBkcm9wIHRoZSBUQ1AgY29ubmVjdGlvbi4KKwlXaXRoIHRoaXMgb3B0aW9uIHNldCwgaWYgYHJlY2VpdmUtcGFja2AgZG9lcyBub3QgdHJhbnNtaXQKKwlhbnkgZGF0YSBpbiB0aGlzIHBoYXNlIGZvciBgcmVjZWl2ZS5rZWVwQWxpdmVgIHNlY29uZHMsIGl0IHdpbGwKKwlzZW5kIGEgc2hvcnQga2VlcGFsaXZlIHBhY2tldC4gIFRoZSBkZWZhdWx0IGlzIDUgc2Vjb25kczsgc2V0CisJdG8gMCB0byBkaXNhYmxlIGtlZXBhbGl2ZXMgZW50aXJlbHkuCisKK3JlY2VpdmUudW5wYWNrTGltaXQ6OgorCUlmIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyByZWNlaXZlZCBpbiBhIHB1c2ggaXMgYmVsb3cgdGhpcworCWxpbWl0IHRoZW4gdGhlIG9iamVjdHMgd2lsbCBiZSB1bnBhY2tlZCBpbnRvIGxvb3NlIG9iamVjdAorCWZpbGVzLiBIb3dldmVyIGlmIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgb2JqZWN0cyBlcXVhbHMgb3IKKwlleGNlZWRzIHRoaXMgbGltaXQgdGhlbiB0aGUgcmVjZWl2ZWQgcGFjayB3aWxsIGJlIHN0b3JlZCBhcworCWEgcGFjaywgYWZ0ZXIgYWRkaW5nIGFueSBtaXNzaW5nIGRlbHRhIGJhc2VzLiAgU3RvcmluZyB0aGUKKwlwYWNrIGZyb20gYSBwdXNoIGNhbiBtYWtlIHRoZSBwdXNoIG9wZXJhdGlvbiBjb21wbGV0ZSBmYXN0ZXIsCisJZXNwZWNpYWxseSBvbiBzbG93IGZpbGVzeXN0ZW1zLiAgSWYgbm90IHNldCwgdGhlIHZhbHVlIG9mCisJYHRyYW5zZmVyLnVucGFja0xpbWl0YCBpcyB1c2VkIGluc3RlYWQuCisKK3JlY2VpdmUubWF4SW5wdXRTaXplOjoKKwlJZiB0aGUgc2l6ZSBvZiB0aGUgaW5jb21pbmcgcGFjayBzdHJlYW0gaXMgbGFyZ2VyIHRoYW4gdGhpcworCWxpbWl0LCB0aGVuIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBlcnJvciBvdXQsIGluc3RlYWQgb2YKKwlhY2NlcHRpbmcgdGhlIHBhY2sgZmlsZS4gSWYgbm90IHNldCBvciBzZXQgdG8gMCwgdGhlbiB0aGUgc2l6ZQorCWlzIHVubGltaXRlZC4KKworcmVjZWl2ZS5kZW55RGVsZXRlczo6CisJSWYgc2V0IHRvIHRydWUsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBkZW55IGEgcmVmIHVwZGF0ZSB0aGF0IGRlbGV0ZXMKKwl0aGUgcmVmLiBVc2UgdGhpcyB0byBwcmV2ZW50IHN1Y2ggYSByZWYgZGVsZXRpb24gdmlhIGEgcHVzaC4KKworcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudDo6CisJSWYgc2V0IHRvIHRydWUsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBkZW55IGEgcmVmIHVwZGF0ZSB0aGF0CisJZGVsZXRlcyB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaCBvZiBhIG5vbi1iYXJlIHJlcG9zaXRvcnkuCisKK3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2g6OgorCUlmIHNldCB0byB0cnVlIG9yICJyZWZ1c2UiLCBnaXQtcmVjZWl2ZS1wYWNrIHdpbGwgZGVueSBhIHJlZiB1cGRhdGUKKwl0byB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaCBvZiBhIG5vbi1iYXJlIHJlcG9zaXRvcnkuCisJU3VjaCBhIHB1c2ggaXMgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGJlY2F1c2UgaXQgYnJpbmdzIHRoZSBIRUFECisJb3V0IG9mIHN5bmMgd2l0aCB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZS4gSWYgc2V0IHRvICJ3YXJuIiwKKwlwcmludCBhIHdhcm5pbmcgb2Ygc3VjaCBhIHB1c2ggdG8gc3RkZXJyLCBidXQgYWxsb3cgdGhlIHB1c2ggdG8KKwlwcm9jZWVkLiBJZiBzZXQgdG8gZmFsc2Ugb3IgImlnbm9yZSIsIGFsbG93IHN1Y2ggcHVzaGVzIHdpdGggbm8KKwltZXNzYWdlLiBEZWZhdWx0cyB0byAicmVmdXNlIi4KKysKK0Fub3RoZXIgb3B0aW9uIGlzICJ1cGRhdGVJbnN0ZWFkIiB3aGljaCB3aWxsIHVwZGF0ZSB0aGUgd29ya2luZwordHJlZSBpZiBwdXNoaW5nIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhpcyBvcHRpb24gaXMKK2ludGVuZGVkIGZvciBzeW5jaHJvbml6aW5nIHdvcmtpbmcgZGlyZWN0b3JpZXMgd2hlbiBvbmUgc2lkZSBpcyBub3QgZWFzaWx5CithY2Nlc3NpYmxlIHZpYSBpbnRlcmFjdGl2ZSBzc2ggKGUuZy4gYSBsaXZlIHdlYiBzaXRlLCBoZW5jZSB0aGUgcmVxdWlyZW1lbnQKK3RoYXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGJlIGNsZWFuKS4gVGhpcyBtb2RlIGFsc28gY29tZXMgaW4gaGFuZHkgd2hlbgorZGV2ZWxvcGluZyBpbnNpZGUgYSBWTSB0byB0ZXN0IGFuZCBmaXggY29kZSBvbiBkaWZmZXJlbnQgT3BlcmF0aW5nIFN5c3RlbXMuCisrCitCeSBkZWZhdWx0LCAidXBkYXRlSW5zdGVhZCIgd2lsbCByZWZ1c2UgdGhlIHB1c2ggaWYgdGhlIHdvcmtpbmcgdHJlZSBvcgordGhlIGluZGV4IGhhdmUgYW55IGRpZmZlcmVuY2UgZnJvbSB0aGUgSEVBRCwgYnV0IHRoZSBgcHVzaC10by1jaGVja291dGAKK2hvb2sgY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplIHRoaXMuICBTZWUgbGlua2dpdDpnaXRob29rc1s1XS4KKworcmVjZWl2ZS5kZW55Tm9uRmFzdEZvcndhcmRzOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZ2l0LXJlY2VpdmUtcGFjayB3aWxsIGRlbnkgYSByZWYgdXBkYXRlIHdoaWNoIGlzCisJbm90IGEgZmFzdC1mb3J3YXJkLiBVc2UgdGhpcyB0byBwcmV2ZW50IHN1Y2ggYW4gdXBkYXRlIHZpYSBhIHB1c2gsCisJZXZlbiBpZiB0aGF0IHB1c2ggaXMgZm9yY2VkLiBUaGlzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMKKwlzZXQgd2hlbiBpbml0aWFsaXppbmcgYSBzaGFyZWQgcmVwb3NpdG9yeS4KKworcmVjZWl2ZS5oaWRlUmVmczo6CisJVGhpcyB2YXJpYWJsZSBpcyB0aGUgc2FtZSBhcyBgdHJhbnNmZXIuaGlkZVJlZnNgLCBidXQgYXBwbGllcworCW9ubHkgdG8gYHJlY2VpdmUtcGFja2AgKGFuZCBzbyBhZmZlY3RzIHB1c2hlcywgYnV0IG5vdCBmZXRjaGVzKS4KKwlBbiBhdHRlbXB0IHRvIHVwZGF0ZSBvciBkZWxldGUgYSBoaWRkZW4gcmVmIGJ5IGBnaXQgcHVzaGAgaXMKKwlyZWplY3RlZC4KKworcmVjZWl2ZS51cGRhdGVTZXJ2ZXJJbmZvOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZ2l0LXJlY2VpdmUtcGFjayB3aWxsIHJ1biBnaXQtdXBkYXRlLXNlcnZlci1pbmZvCisJYWZ0ZXIgcmVjZWl2aW5nIGRhdGEgZnJvbSBnaXQtcHVzaCBhbmQgdXBkYXRpbmcgcmVmcy4KKworcmVjZWl2ZS5zaGFsbG93VXBkYXRlOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgLmdpdC9zaGFsbG93IGNhbiBiZSB1cGRhdGVkIHdoZW4gbmV3IHJlZnMKKwlyZXF1aXJlIG5ldyBzaGFsbG93IHJvb3RzLiBPdGhlcndpc2UgdGhvc2UgcmVmcyBhcmUgcmVqZWN0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9yZW1vdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcmVtb3RlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGU2NDM3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcmVtb3RlLnR4dApAQCAtMCwwICsxLDg2IEBACityZW1vdGUucHVzaERlZmF1bHQ6OgorCVRoZSByZW1vdGUgdG8gcHVzaCB0byBieSBkZWZhdWx0LiAgT3ZlcnJpZGVzCisJYGJyYW5jaC48bmFtZT4ucmVtb3RlYCBmb3IgYWxsIGJyYW5jaGVzLCBhbmQgaXMgb3ZlcnJpZGRlbiBieQorCWBicmFuY2guPG5hbWU+LnB1c2hSZW1vdGVgIGZvciBzcGVjaWZpYyBicmFuY2hlcy4KKworcmVtb3RlLjxuYW1lPi51cmw6OgorCVRoZSBVUkwgb2YgYSByZW1vdGUgcmVwb3NpdG9yeS4gIFNlZSBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBvcgorCWxpbmtnaXQ6Z2l0LXB1c2hbMV0uCisKK3JlbW90ZS48bmFtZT4ucHVzaHVybDo6CisJVGhlIHB1c2ggVVJMIG9mIGEgcmVtb3RlIHJlcG9zaXRvcnkuICBTZWUgbGlua2dpdDpnaXQtcHVzaFsxXS4KKworcmVtb3RlLjxuYW1lPi5wcm94eTo6CisJRm9yIHJlbW90ZXMgdGhhdCByZXF1aXJlIGN1cmwgKGh0dHAsIGh0dHBzIGFuZCBmdHApLCB0aGUgVVJMIHRvCisJdGhlIHByb3h5IHRvIHVzZSBmb3IgdGhhdCByZW1vdGUuICBTZXQgdG8gdGhlIGVtcHR5IHN0cmluZyB0bworCWRpc2FibGUgcHJveHlpbmcgZm9yIHRoYXQgcmVtb3RlLgorCityZW1vdGUuPG5hbWU+LnByb3h5QXV0aE1ldGhvZDo6CisJRm9yIHJlbW90ZXMgdGhhdCByZXF1aXJlIGN1cmwgKGh0dHAsIGh0dHBzIGFuZCBmdHApLCB0aGUgbWV0aG9kIHRvIHVzZSBmb3IKKwlhdXRoZW50aWNhdGluZyBhZ2FpbnN0IHRoZSBwcm94eSBpbiB1c2UgKHByb2JhYmx5IHNldCBpbgorCWByZW1vdGUuPG5hbWU+LnByb3h5YCkuIFNlZSBgaHR0cC5wcm94eUF1dGhNZXRob2RgLgorCityZW1vdGUuPG5hbWU+LmZldGNoOjoKKwlUaGUgZGVmYXVsdCBzZXQgb2YgInJlZnNwZWMiIGZvciBsaW5rZ2l0OmdpdC1mZXRjaFsxXS4gU2VlCisJbGlua2dpdDpnaXQtZmV0Y2hbMV0uCisKK3JlbW90ZS48bmFtZT4ucHVzaDo6CisJVGhlIGRlZmF1bHQgc2V0IG9mICJyZWZzcGVjIiBmb3IgbGlua2dpdDpnaXQtcHVzaFsxXS4gU2VlCisJbGlua2dpdDpnaXQtcHVzaFsxXS4KKworcmVtb3RlLjxuYW1lPi5taXJyb3I6OgorCUlmIHRydWUsIHB1c2hpbmcgdG8gdGhpcyByZW1vdGUgd2lsbCBhdXRvbWF0aWNhbGx5IGJlaGF2ZQorCWFzIGlmIHRoZSBgLS1taXJyb3JgIG9wdGlvbiB3YXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4KKworcmVtb3RlLjxuYW1lPi5za2lwRGVmYXVsdFVwZGF0ZTo6CisJSWYgdHJ1ZSwgdGhpcyByZW1vdGUgd2lsbCBiZSBza2lwcGVkIGJ5IGRlZmF1bHQgd2hlbiB1cGRhdGluZworCXVzaW5nIGxpbmtnaXQ6Z2l0LWZldGNoWzFdIG9yIHRoZSBgdXBkYXRlYCBzdWJjb21tYW5kIG9mCisJbGlua2dpdDpnaXQtcmVtb3RlWzFdLgorCityZW1vdGUuPG5hbWU+LnNraXBGZXRjaEFsbDo6CisJSWYgdHJ1ZSwgdGhpcyByZW1vdGUgd2lsbCBiZSBza2lwcGVkIGJ5IGRlZmF1bHQgd2hlbiB1cGRhdGluZworCXVzaW5nIGxpbmtnaXQ6Z2l0LWZldGNoWzFdIG9yIHRoZSBgdXBkYXRlYCBzdWJjb21tYW5kIG9mCisJbGlua2dpdDpnaXQtcmVtb3RlWzFdLgorCityZW1vdGUuPG5hbWU+LnJlY2VpdmVwYWNrOjoKKwlUaGUgZGVmYXVsdCBwcm9ncmFtIHRvIGV4ZWN1dGUgb24gdGhlIHJlbW90ZSBzaWRlIHdoZW4gcHVzaGluZy4gIFNlZQorCW9wdGlvbiAtLXJlY2VpdmUtcGFjayBvZiBsaW5rZ2l0OmdpdC1wdXNoWzFdLgorCityZW1vdGUuPG5hbWU+LnVwbG9hZHBhY2s6OgorCVRoZSBkZWZhdWx0IHByb2dyYW0gdG8gZXhlY3V0ZSBvbiB0aGUgcmVtb3RlIHNpZGUgd2hlbiBmZXRjaGluZy4gIFNlZQorCW9wdGlvbiAtLXVwbG9hZC1wYWNrIG9mIGxpbmtnaXQ6Z2l0LWZldGNoLXBhY2tbMV0uCisKK3JlbW90ZS48bmFtZT4udGFnT3B0OjoKKwlTZXR0aW5nIHRoaXMgdmFsdWUgdG8gLS1uby10YWdzIGRpc2FibGVzIGF1dG9tYXRpYyB0YWcgZm9sbG93aW5nIHdoZW4KKwlmZXRjaGluZyBmcm9tIHJlbW90ZSA8bmFtZT4uIFNldHRpbmcgaXQgdG8gLS10YWdzIHdpbGwgZmV0Y2ggZXZlcnkKKwl0YWcgZnJvbSByZW1vdGUgPG5hbWU+LCBldmVuIGlmIHRoZXkgYXJlIG5vdCByZWFjaGFibGUgZnJvbSByZW1vdGUKKwlicmFuY2ggaGVhZHMuIFBhc3NpbmcgdGhlc2UgZmxhZ3MgZGlyZWN0bHkgdG8gbGlua2dpdDpnaXQtZmV0Y2hbMV0gY2FuCisJb3ZlcnJpZGUgdGhpcyBzZXR0aW5nLiBTZWUgb3B0aW9ucyAtLXRhZ3MgYW5kIC0tbm8tdGFncyBvZgorCWxpbmtnaXQ6Z2l0LWZldGNoWzFdLgorCityZW1vdGUuPG5hbWU+LnZjczo6CisJU2V0dGluZyB0aGlzIHRvIGEgdmFsdWUgPHZjcz4gd2lsbCBjYXVzZSBHaXQgdG8gaW50ZXJhY3Qgd2l0aAorCXRoZSByZW1vdGUgd2l0aCB0aGUgZ2l0LXJlbW90ZS08dmNzPiBoZWxwZXIuCisKK3JlbW90ZS48bmFtZT4ucHJ1bmU6OgorCVdoZW4gc2V0IHRvIHRydWUsIGZldGNoaW5nIGZyb20gdGhpcyByZW1vdGUgYnkgZGVmYXVsdCB3aWxsIGFsc28KKwlyZW1vdmUgYW55IHJlbW90ZS10cmFja2luZyByZWZlcmVuY2VzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0IG9uIHRoZQorCXJlbW90ZSAoYXMgaWYgdGhlIGAtLXBydW5lYCBvcHRpb24gd2FzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUpLgorCU92ZXJyaWRlcyBgZmV0Y2gucHJ1bmVgIHNldHRpbmdzLCBpZiBhbnkuCisKK3JlbW90ZS48bmFtZT4ucHJ1bmVUYWdzOjoKKwlXaGVuIHNldCB0byB0cnVlLCBmZXRjaGluZyBmcm9tIHRoaXMgcmVtb3RlIGJ5IGRlZmF1bHQgd2lsbCBhbHNvCisJcmVtb3ZlIGFueSBsb2NhbCB0YWdzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0IG9uIHRoZSByZW1vdGUgaWYgcHJ1bmluZworCWlzIGFjdGl2YXRlZCBpbiBnZW5lcmFsIHZpYSBgcmVtb3RlLjxuYW1lPi5wcnVuZWAsIGBmZXRjaC5wcnVuZWAgb3IKKwlgLS1wcnVuZWAuIE92ZXJyaWRlcyBgZmV0Y2gucHJ1bmVUYWdzYCBzZXR0aW5ncywgaWYgYW55LgorKworU2VlIGFsc28gYHJlbW90ZS48bmFtZT4ucHJ1bmVgIGFuZCB0aGUgUFJVTklORyBzZWN0aW9uIG9mCitsaW5rZ2l0OmdpdC1mZXRjaFsxXS4KKworcmVtb3RlLjxuYW1lPi5wcm9taXNvcjo6CisJV2hlbiBzZXQgdG8gdHJ1ZSwgdGhpcyByZW1vdGUgd2lsbCBiZSB1c2VkIHRvIGZldGNoIHByb21pc29yCisJb2JqZWN0cy4KKworcmVtb3RlLjxuYW1lPi5wYXJ0aWFsY2xvbmVmaWx0ZXI6OgorCVRoZSBmaWx0ZXIgdGhhdCB3aWxsIGJlIGFwcGxpZWQgd2hlbiBmZXRjaGluZyBmcm9tIHRoaXMKKwlwcm9taXNvciByZW1vdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9yZW1vdGVzLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3JlbW90ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZmUwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9yZW1vdGVzLnR4dApAQCAtMCwwICsxLDMgQEAKK3JlbW90ZXMuPGdyb3VwPjo6CisJVGhlIGxpc3Qgb2YgcmVtb3RlcyB3aGljaCBhcmUgZmV0Y2hlZCBieSAiZ2l0IHJlbW90ZSB1cGRhdGUKKwk8Z3JvdXA+Ii4gIFNlZSBsaW5rZ2l0OmdpdC1yZW1vdGVbMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9yZXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcmVwYWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzQxM2UxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcmVwYWNrLnR4dApAQCAtMCwwICsxLDI3IEBACityZXBhY2sudXNlRGVsdGFCYXNlT2Zmc2V0OjoKKwlCeSBkZWZhdWx0LCBsaW5rZ2l0OmdpdC1yZXBhY2tbMV0gY3JlYXRlcyBwYWNrcyB0aGF0IHVzZQorCWRlbHRhLWJhc2Ugb2Zmc2V0LiBJZiB5b3UgbmVlZCB0byBzaGFyZSB5b3VyIHJlcG9zaXRvcnkgd2l0aAorCUdpdCBvbGRlciB0aGFuIHZlcnNpb24gMS40LjQsIGVpdGhlciBkaXJlY3RseSBvciB2aWEgYSBkdW1iCisJcHJvdG9jb2wgc3VjaCBhcyBodHRwLCB0aGVuIHlvdSBuZWVkIHRvIHNldCB0aGlzIG9wdGlvbiB0bworCSJmYWxzZSIgYW5kIHJlcGFjay4gQWNjZXNzIGZyb20gb2xkIEdpdCB2ZXJzaW9ucyBvdmVyIHRoZQorCW5hdGl2ZSBwcm90b2NvbCBhcmUgdW5hZmZlY3RlZCBieSB0aGlzIG9wdGlvbi4KKworcmVwYWNrLnBhY2tLZXB0T2JqZWN0czo6CisJSWYgc2V0IHRvIHRydWUsIG1ha2VzIGBnaXQgcmVwYWNrYCBhY3QgYXMgaWYKKwlgLS1wYWNrLWtlcHQtb2JqZWN0c2Agd2FzIHBhc3NlZC4gU2VlIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXSBmb3IKKwlkZXRhaWxzLiBEZWZhdWx0cyB0byBgZmFsc2VgIG5vcm1hbGx5LCBidXQgYHRydWVgIGlmIGEgYml0bWFwCisJaW5kZXggaXMgYmVpbmcgd3JpdHRlbiAoZWl0aGVyIHZpYSBgLS13cml0ZS1iaXRtYXAtaW5kZXhgIG9yCisJYHJlcGFjay53cml0ZUJpdG1hcHNgKS4KKworcmVwYWNrLnVzZURlbHRhSXNsYW5kczo6CisJSWYgc2V0IHRvIHRydWUsIG1ha2VzIGBnaXQgcmVwYWNrYCBhY3QgYXMgaWYgYC0tZGVsdGEtaXNsYW5kc2AKKwl3YXMgcGFzc2VkLiBEZWZhdWx0cyB0byBgZmFsc2VgLgorCityZXBhY2sud3JpdGVCaXRtYXBzOjoKKwlXaGVuIHRydWUsIGdpdCB3aWxsIHdyaXRlIGEgYml0bWFwIGluZGV4IHdoZW4gcGFja2luZyBhbGwKKwlvYmplY3RzIHRvIGRpc2sgKGUuZy4sIHdoZW4gYGdpdCByZXBhY2sgLWFgIGlzIHJ1bikuICBUaGlzCisJaW5kZXggY2FuIHNwZWVkIHVwIHRoZSAiY291bnRpbmcgb2JqZWN0cyIgcGhhc2Ugb2Ygc3Vic2VxdWVudAorCXBhY2tzIGNyZWF0ZWQgZm9yIGNsb25lcyBhbmQgZmV0Y2hlcywgYXQgdGhlIGNvc3Qgb2Ygc29tZSBkaXNrCisJc3BhY2UgYW5kIGV4dHJhIHRpbWUgc3BlbnQgb24gdGhlIGluaXRpYWwgcmVwYWNrLiAgVGhpcyBoYXMKKwlubyBlZmZlY3QgaWYgbXVsdGlwbGUgcGFja2ZpbGVzIGFyZSBjcmVhdGVkLgorCURlZmF1bHRzIHRvIHRydWUgb24gYmFyZSByZXBvcywgZmFsc2Ugb3RoZXJ3aXNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvcmVyZXJlLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3JlcmVyZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhYmRmNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3JlcmVyZS50eHQKQEAgLTAsMCArMSwxMiBAQAorcmVyZXJlLmF1dG9VcGRhdGU6OgorCVdoZW4gc2V0IHRvIHRydWUsIGBnaXQtcmVyZXJlYCB1cGRhdGVzIHRoZSBpbmRleCB3aXRoIHRoZQorCXJlc3VsdGluZyBjb250ZW50cyBhZnRlciBpdCBjbGVhbmx5IHJlc29sdmVzIGNvbmZsaWN0cyB1c2luZworCXByZXZpb3VzbHkgcmVjb3JkZWQgcmVzb2x1dGlvbi4gIERlZmF1bHRzIHRvIGZhbHNlLgorCityZXJlcmUuZW5hYmxlZDo6CisJQWN0aXZhdGUgcmVjb3JkaW5nIG9mIHJlc29sdmVkIGNvbmZsaWN0cywgc28gdGhhdCBpZGVudGljYWwKKwljb25mbGljdCBodW5rcyBjYW4gYmUgcmVzb2x2ZWQgYXV0b21hdGljYWxseSwgc2hvdWxkIHRoZXkgYmUKKwllbmNvdW50ZXJlZCBhZ2Fpbi4gIEJ5IGRlZmF1bHQsIGxpbmtnaXQ6Z2l0LXJlcmVyZVsxXSBpcworCWVuYWJsZWQgaWYgdGhlcmUgaXMgYW4gYHJyLWNhY2hlYCBkaXJlY3RvcnkgdW5kZXIgdGhlCisJYCRHSVRfRElSYCwgZS5nLiBpZiAicmVyZXJlIiB3YXMgcHJldmlvdXNseSB1c2VkIGluIHRoZQorCXJlcG9zaXRvcnkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9yZXNldC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9yZXNldC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNiN2M0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3Jlc2V0LnR4dApAQCAtMCwwICsxLDIgQEAKK3Jlc2V0LnF1aWV0OjoKKwlXaGVuIHNldCB0byB0cnVlLCAnZ2l0IHJlc2V0JyB3aWxsIGRlZmF1bHQgdG8gdGhlICctLXF1aWV0JyBvcHRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zZW5kZW1haWwudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvc2VuZGVtYWlsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDA2ZmFmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvc2VuZGVtYWlsLnR4dApAQCAtMCwwICsxLDYzIEBACitzZW5kZW1haWwuaWRlbnRpdHk6OgorCUEgY29uZmlndXJhdGlvbiBpZGVudGl0eS4gV2hlbiBnaXZlbiwgY2F1c2VzIHZhbHVlcyBpbiB0aGUKKwknc2VuZGVtYWlsLjxpZGVudGl0eT4nIHN1YnNlY3Rpb24gdG8gdGFrZSBwcmVjZWRlbmNlIG92ZXIKKwl2YWx1ZXMgaW4gdGhlICdzZW5kZW1haWwnIHNlY3Rpb24uIFRoZSBkZWZhdWx0IGlkZW50aXR5IGlzCisJdGhlIHZhbHVlIG9mIGBzZW5kZW1haWwuaWRlbnRpdHlgLgorCitzZW5kZW1haWwuc210cEVuY3J5cHRpb246OgorCVNlZSBsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdIGZvciBkZXNjcmlwdGlvbi4gIE5vdGUgdGhhdCB0aGlzCisJc2V0dGluZyBpcyBub3Qgc3ViamVjdCB0byB0aGUgJ2lkZW50aXR5JyBtZWNoYW5pc20uCisKK3NlbmRlbWFpbC5zbXRwc3NsIChkZXByZWNhdGVkKTo6CisJRGVwcmVjYXRlZCBhbGlhcyBmb3IgJ3NlbmRlbWFpbC5zbXRwRW5jcnlwdGlvbiA9IHNzbCcuCisKK3NlbmRlbWFpbC5zbXRwc3NsY2VydHBhdGg6OgorCVBhdGggdG8gY2EtY2VydGlmaWNhdGVzIChlaXRoZXIgYSBkaXJlY3Rvcnkgb3IgYSBzaW5nbGUgZmlsZSkuCisJU2V0IGl0IHRvIGFuIGVtcHR5IHN0cmluZyB0byBkaXNhYmxlIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbi4KKworc2VuZGVtYWlsLjxpZGVudGl0eT4uKjo6CisJSWRlbnRpdHktc3BlY2lmaWMgdmVyc2lvbnMgb2YgdGhlICdzZW5kZW1haWwuKicgcGFyYW1ldGVycworCWZvdW5kIGJlbG93LCB0YWtpbmcgcHJlY2VkZW5jZSBvdmVyIHRob3NlIHdoZW4gdGhpcworCWlkZW50aXR5IGlzIHNlbGVjdGVkLCB0aHJvdWdoIGVpdGhlciB0aGUgY29tbWFuZC1saW5lIG9yCisJYHNlbmRlbWFpbC5pZGVudGl0eWAuCisKK3NlbmRlbWFpbC5hbGlhc2VzRmlsZTo6CitzZW5kZW1haWwuYWxpYXNGaWxlVHlwZTo6CitzZW5kZW1haWwuYW5ub3RhdGU6Ogorc2VuZGVtYWlsLmJjYzo6CitzZW5kZW1haWwuY2M6Ogorc2VuZGVtYWlsLmNjQ21kOjoKK3NlbmRlbWFpbC5jaGFpblJlcGx5VG86Ogorc2VuZGVtYWlsLmNvbmZpcm06Ogorc2VuZGVtYWlsLmVudmVsb3BlU2VuZGVyOjoKK3NlbmRlbWFpbC5mcm9tOjoKK3NlbmRlbWFpbC5tdWx0aUVkaXQ6Ogorc2VuZGVtYWlsLnNpZ25lZG9mZmJ5Y2M6Ogorc2VuZGVtYWlsLnNtdHBQYXNzOjoKK3NlbmRlbWFpbC5zdXBwcmVzc2NjOjoKK3NlbmRlbWFpbC5zdXBwcmVzc0Zyb206Ogorc2VuZGVtYWlsLnRvOjoKK3NlbmRlbWFpbC50b2NtZDo6CitzZW5kZW1haWwuc210cERvbWFpbjo6CitzZW5kZW1haWwuc210cFNlcnZlcjo6CitzZW5kZW1haWwuc210cFNlcnZlclBvcnQ6Ogorc2VuZGVtYWlsLnNtdHBTZXJ2ZXJPcHRpb246Ogorc2VuZGVtYWlsLnNtdHBVc2VyOjoKK3NlbmRlbWFpbC50aHJlYWQ6Ogorc2VuZGVtYWlsLnRyYW5zZmVyRW5jb2Rpbmc6Ogorc2VuZGVtYWlsLnZhbGlkYXRlOjoKK3NlbmRlbWFpbC54bWFpbGVyOjoKKwlTZWUgbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXSBmb3IgZGVzY3JpcHRpb24uCisKK3NlbmRlbWFpbC5zaWduZWRvZmZjYyAoZGVwcmVjYXRlZCk6OgorCURlcHJlY2F0ZWQgYWxpYXMgZm9yIGBzZW5kZW1haWwuc2lnbmVkb2ZmYnljY2AuCisKK3NlbmRlbWFpbC5zbXRwQmF0Y2hTaXplOjoKKwlOdW1iZXIgb2YgbWVzc2FnZXMgdG8gYmUgc2VudCBwZXIgY29ubmVjdGlvbiwgYWZ0ZXIgdGhhdCBhIHJlbG9naW4KKwl3aWxsIGhhcHBlbi4gIElmIHRoZSB2YWx1ZSBpcyAwIG9yIHVuZGVmaW5lZCwgc2VuZCBhbGwgbWVzc2FnZXMgaW4KKwlvbmUgY29ubmVjdGlvbi4KKwlTZWUgYWxzbyB0aGUgYC0tYmF0Y2gtc2l6ZWAgb3B0aW9uIG9mIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0uCisKK3NlbmRlbWFpbC5zbXRwUmVsb2dpbkRlbGF5OjoKKwlTZWNvbmRzIHdhaXQgYmVmb3JlIHJlY29ubmVjdGluZyB0byBzbXRwIHNlcnZlci4KKwlTZWUgYWxzbyB0aGUgYC0tcmVsb2dpbi1kZWxheWAgb3B0aW9uIG9mIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zZXF1ZW5jZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvc2VxdWVuY2VyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDhkNTMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvc2VxdWVuY2VyLnR4dApAQCAtMCwwICsxLDUgQEAKK3NlcXVlbmNlLmVkaXRvcjo6CisJVGV4dCBlZGl0b3IgdXNlZCBieSBgZ2l0IHJlYmFzZSAtaWAgZm9yIGVkaXRpbmcgdGhlIHJlYmFzZSBpbnN0cnVjdGlvbiBmaWxlLgorCVRoZSB2YWx1ZSBpcyBtZWFudCB0byBiZSBpbnRlcnByZXRlZCBieSB0aGUgc2hlbGwgd2hlbiBpdCBpcyB1c2VkLgorCUl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX1NFUVVFTkNFX0VESVRPUmAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJV2hlbiBub3QgY29uZmlndXJlZCB0aGUgZGVmYXVsdCBjb21taXQgbWVzc2FnZSBlZGl0b3IgaXMgdXNlZCBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvc2hvd2JyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zaG93YnJhbmNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzllY2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvc2hvd2JyYW5jaC50eHQKQEAgLTAsMCArMSwzIEBACitzaG93QnJhbmNoLmRlZmF1bHQ6OgorCVRoZSBkZWZhdWx0IHNldCBvZiBicmFuY2hlcyBmb3IgbGlua2dpdDpnaXQtc2hvdy1icmFuY2hbMV0uCisJU2VlIGxpbmtnaXQ6Z2l0LXNob3ctYnJhbmNoWzFdLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvc3BsaXRpbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zcGxpdGluZGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmRiMTg2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvc3BsaXRpbmRleC50eHQKQEAgLTAsMCArMSwyNCBAQAorc3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlOjoKKwlXaGVuIHRoZSBzcGxpdCBpbmRleCBmZWF0dXJlIGlzIHVzZWQsIHRoaXMgc3BlY2lmaWVzIHRoZQorCXBlcmNlbnQgb2YgZW50cmllcyB0aGUgc3BsaXQgaW5kZXggY2FuIGNvbnRhaW4gY29tcGFyZWQgdG8gdGhlCisJdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gYm90aCB0aGUgc3BsaXQgaW5kZXggYW5kIHRoZSBzaGFyZWQKKwlpbmRleCBiZWZvcmUgYSBuZXcgc2hhcmVkIGluZGV4IGlzIHdyaXR0ZW4uCisJVGhlIHZhbHVlIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMC4gSWYgdGhlIHZhbHVlIGlzIDAgdGhlbgorCWEgbmV3IHNoYXJlZCBpbmRleCBpcyBhbHdheXMgd3JpdHRlbiwgaWYgaXQgaXMgMTAwIGEgbmV3CisJc2hhcmVkIGluZGV4IGlzIG5ldmVyIHdyaXR0ZW4uCisJQnkgZGVmYXVsdCB0aGUgdmFsdWUgaXMgMjAsIHNvIGEgbmV3IHNoYXJlZCBpbmRleCBpcyB3cml0dGVuCisJaWYgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzcGxpdCBpbmRleCB3b3VsZCBiZSBncmVhdGVyCisJdGhhbiAyMCBwZXJjZW50IG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgZW50cmllcy4KKwlTZWUgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdLgorCitzcGxpdEluZGV4LnNoYXJlZEluZGV4RXhwaXJlOjoKKwlXaGVuIHRoZSBzcGxpdCBpbmRleCBmZWF0dXJlIGlzIHVzZWQsIHNoYXJlZCBpbmRleCBmaWxlcyB0aGF0CisJd2VyZSBub3QgbW9kaWZpZWQgc2luY2UgdGhlIHRpbWUgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgd2lsbAorCWJlIHJlbW92ZWQgd2hlbiBhIG5ldyBzaGFyZWQgaW5kZXggZmlsZSBpcyBjcmVhdGVkLiBUaGUgdmFsdWUKKwkibm93IiBleHBpcmVzIGFsbCBlbnRyaWVzIGltbWVkaWF0ZWx5LCBhbmQgIm5ldmVyIiBzdXBwcmVzc2VzCisJZXhwaXJhdGlvbiBhbHRvZ2V0aGVyLgorCVRoZSBkZWZhdWx0IHZhbHVlIGlzICIyLndlZWtzLmFnbyIuCisJTm90ZSB0aGF0IGEgc2hhcmVkIGluZGV4IGZpbGUgaXMgY29uc2lkZXJlZCBtb2RpZmllZCAoZm9yIHRoZQorCXB1cnBvc2Ugb2YgZXhwaXJhdGlvbikgZWFjaCB0aW1lIGEgbmV3IHNwbGl0LWluZGV4IGZpbGUgaXMKKwllaXRoZXIgY3JlYXRlZCBiYXNlZCBvbiBpdCBvciByZWFkIGZyb20gaXQuCisJU2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3NzaC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zc2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYTRiZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zc2gudHh0CkBAIC0wLDAgKzEsMzUgQEAKK3NzaC52YXJpYW50OjoKKwlCeSBkZWZhdWx0LCBHaXQgZGV0ZXJtaW5lcyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byB1c2UKKwliYXNlZCBvbiB0aGUgYmFzZW5hbWUgb2YgdGhlIGNvbmZpZ3VyZWQgU1NIIGNvbW1hbmQgKGNvbmZpZ3VyZWQKKwl1c2luZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYEdJVF9TU0hgIG9yIGBHSVRfU1NIX0NPTU1BTkRgIG9yCisJdGhlIGNvbmZpZyBzZXR0aW5nIGBjb3JlLnNzaENvbW1hbmRgKS4gSWYgdGhlIGJhc2VuYW1lIGlzCisJdW5yZWNvZ25pemVkLCBHaXQgd2lsbCBhdHRlbXB0IHRvIGRldGVjdCBzdXBwb3J0IG9mIE9wZW5TU0gKKwlvcHRpb25zIGJ5IGZpcnN0IGludm9raW5nIHRoZSBjb25maWd1cmVkIFNTSCBjb21tYW5kIHdpdGggdGhlCisJYC1HYCAocHJpbnQgY29uZmlndXJhdGlvbikgb3B0aW9uIGFuZCB3aWxsIHN1YnNlcXVlbnRseSB1c2UKKwlPcGVuU1NIIG9wdGlvbnMgKGlmIHRoYXQgaXMgc3VjY2Vzc2Z1bCkgb3Igbm8gb3B0aW9ucyBiZXNpZGVzCisJdGhlIGhvc3QgYW5kIHJlbW90ZSBjb21tYW5kIChpZiBpdCBmYWlscykuCisrCitUaGUgY29uZmlnIHZhcmlhYmxlIGBzc2gudmFyaWFudGAgY2FuIGJlIHNldCB0byBvdmVycmlkZSB0aGlzIGRldGVjdGlvbi4KK1ZhbGlkIHZhbHVlcyBhcmUgYHNzaGAgKHRvIHVzZSBPcGVuU1NIIG9wdGlvbnMpLCBgcGxpbmtgLCBgcHV0dHlgLAorYHRvcnRvaXNlcGxpbmtgLCBgc2ltcGxlYCAobm8gb3B0aW9ucyBleGNlcHQgdGhlIGhvc3QgYW5kIHJlbW90ZSBjb21tYW5kKS4KK1RoZSBkZWZhdWx0IGF1dG8tZGV0ZWN0aW9uIGNhbiBiZSBleHBsaWNpdGx5IHJlcXVlc3RlZCB1c2luZyB0aGUgdmFsdWUKK2BhdXRvYC4gIEFueSBvdGhlciB2YWx1ZSBpcyB0cmVhdGVkIGFzIGBzc2hgLiAgVGhpcyBzZXR0aW5nIGNhbiBhbHNvIGJlCitvdmVycmlkZGVuIHZpYSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYEdJVF9TU0hfVkFSSUFOVGAuCisrCitUaGUgY3VycmVudCBjb21tYW5kLWxpbmUgcGFyYW1ldGVycyB1c2VkIGZvciBlYWNoIHZhcmlhbnQgYXJlIGFzCitmb2xsb3dzOgorKworLS0KKworKiBgc3NoYCAtIFstcCBwb3J0XSBbLTRdIFstNl0gWy1vIG9wdGlvbl0gW3VzZXJuYW1lQF1ob3N0IGNvbW1hbmQKKworKiBgc2ltcGxlYCAtIFt1c2VybmFtZUBdaG9zdCBjb21tYW5kCisKKyogYHBsaW5rYCBvciBgcHV0dHlgIC0gWy1QIHBvcnRdIFstNF0gWy02XSBbdXNlcm5hbWVAXWhvc3QgY29tbWFuZAorCisqIGB0b3J0b2lzZXBsaW5rYCAtIFstUCBwb3J0XSBbLTRdIFstNl0gLWJhdGNoIFt1c2VybmFtZUBdaG9zdCBjb21tYW5kCisKKy0tCisrCitFeGNlcHQgZm9yIHRoZSBgc2ltcGxlYCB2YXJpYW50LCBjb21tYW5kLWxpbmUgcGFyYW1ldGVycyBhcmUgbGlrZWx5IHRvCitjaGFuZ2UgYXMgZ2l0IGdhaW5zIG5ldyBmZWF0dXJlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3N0YXNoLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3N0YXNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGViMzU0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvc3Rhc2gudHh0CkBAIC0wLDAgKzEsMTYgQEAKK3N0YXNoLnVzZUJ1aWx0aW46OgorCVVudXNlZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiAgVXNlZCBpbiBHaXQgdmVyc2lvbnMgMi4yMiB0bworCTIuMjYgYXMgYW4gZXNjYXBlIGhhdGNoIHRvIGVuYWJsZSB0aGUgbGVnYWN5IHNoZWxsc2NyaXB0CisJaW1wbGVtZW50YXRpb24gb2Ygc3Rhc2guICBOb3cgdGhlIGJ1aWx0LWluIHJld3JpdGUgb2YgaXQgaW4gQworCWlzIGFsd2F5cyB1c2VkLiBTZXR0aW5nIHRoaXMgd2lsbCBlbWl0IGEgd2FybmluZywgdG8gYWxlcnQgYW55CisJcmVtYWluaW5nIHVzZXJzIHRoYXQgc2V0dGluZyB0aGlzIG5vdyBkb2VzIG5vdGhpbmcuCisKK3N0YXNoLnNob3dQYXRjaDo6CisJSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGBnaXQgc3Rhc2ggc2hvd2AgY29tbWFuZCB3aXRob3V0IGFuCisJb3B0aW9uIHdpbGwgc2hvdyB0aGUgc3Rhc2ggZW50cnkgaW4gcGF0Y2ggZm9ybS4gIERlZmF1bHRzIHRvIGZhbHNlLgorCVNlZSBkZXNjcmlwdGlvbiBvZiAnc2hvdycgY29tbWFuZCBpbiBsaW5rZ2l0OmdpdC1zdGFzaFsxXS4KKworc3Rhc2guc2hvd1N0YXQ6OgorCUlmIHRoaXMgaXMgc2V0IHRvIHRydWUsIHRoZSBgZ2l0IHN0YXNoIHNob3dgIGNvbW1hbmQgd2l0aG91dCBhbgorCW9wdGlvbiB3aWxsIHNob3cgZGlmZnN0YXQgb2YgdGhlIHN0YXNoIGVudHJ5LiAgRGVmYXVsdHMgdG8gdHJ1ZS4KKwlTZWUgZGVzY3JpcHRpb24gb2YgJ3Nob3cnIGNvbW1hbmQgaW4gbGlua2dpdDpnaXQtc3Rhc2hbMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zdGF0dXMudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvc3RhdHVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmM3MDRhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvc3RhdHVzLnR4dApAQCAtMCwwICsxLDc3IEBACitzdGF0dXMucmVsYXRpdmVQYXRoczo6CisJQnkgZGVmYXVsdCwgbGlua2dpdDpnaXQtc3RhdHVzWzFdIHNob3dzIHBhdGhzIHJlbGF0aXZlIHRvIHRoZQorCWN1cnJlbnQgZGlyZWN0b3J5LiBTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gYGZhbHNlYCBzaG93cyBwYXRocworCXJlbGF0aXZlIHRvIHRoZSByZXBvc2l0b3J5IHJvb3QgKHRoaXMgd2FzIHRoZSBkZWZhdWx0IGZvciBHaXQKKwlwcmlvciB0byB2MS41LjQpLgorCitzdGF0dXMuc2hvcnQ6OgorCVNldCB0byB0cnVlIHRvIGVuYWJsZSAtLXNob3J0IGJ5IGRlZmF1bHQgaW4gbGlua2dpdDpnaXQtc3RhdHVzWzFdLgorCVRoZSBvcHRpb24gLS1uby1zaG9ydCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhpcyB2YXJpYWJsZS4KKworc3RhdHVzLmJyYW5jaDo6CisJU2V0IHRvIHRydWUgdG8gZW5hYmxlIC0tYnJhbmNoIGJ5IGRlZmF1bHQgaW4gbGlua2dpdDpnaXQtc3RhdHVzWzFdLgorCVRoZSBvcHRpb24gLS1uby1icmFuY2ggdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFyaWFibGUuCisKK3N0YXR1cy5haGVhZEJlaGluZDo6CisJU2V0IHRvIHRydWUgdG8gZW5hYmxlIGAtLWFoZWFkLWJlaGluZGAgYW5kIGZhbHNlIHRvIGVuYWJsZQorCWAtLW5vLWFoZWFkLWJlaGluZGAgYnkgZGVmYXVsdCBpbiBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gZm9yCisJbm9uLXBvcmNlbGFpbiBzdGF0dXMgZm9ybWF0cy4gIERlZmF1bHRzIHRvIHRydWUuCisKK3N0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeDo6CisJSWYgc2V0IHRvIHRydWUsIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSB3aWxsIGluc2VydCBhIGNvbW1lbnQKKwlwcmVmaXggYmVmb3JlIGVhY2ggb3V0cHV0IGxpbmUgKHN0YXJ0aW5nIHdpdGgKKwlgY29yZS5jb21tZW50Q2hhcmAsIGkuZS4gYCNgIGJ5IGRlZmF1bHQpLiBUaGlzIHdhcyB0aGUKKwliZWhhdmlvciBvZiBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gaW4gR2l0IDEuOC40IGFuZCBwcmV2aW91cy4KKwlEZWZhdWx0cyB0byBmYWxzZS4KKworc3RhdHVzLnJlbmFtZUxpbWl0OjoKKwlUaGUgbnVtYmVyIG9mIGZpbGVzIHRvIGNvbnNpZGVyIHdoZW4gcGVyZm9ybWluZyByZW5hbWUgZGV0ZWN0aW9uCisJaW4gbGlua2dpdDpnaXQtc3RhdHVzWzFdIGFuZCBsaW5rZ2l0OmdpdC1jb21taXRbMV0uIERlZmF1bHRzIHRvCisJdGhlIHZhbHVlIG9mIGRpZmYucmVuYW1lTGltaXQuCisKK3N0YXR1cy5yZW5hbWVzOjoKKwlXaGV0aGVyIGFuZCBob3cgR2l0IGRldGVjdHMgcmVuYW1lcyBpbiBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gYW5kCisJbGlua2dpdDpnaXQtY29tbWl0WzFdIC4gIElmIHNldCB0byAiZmFsc2UiLCByZW5hbWUgZGV0ZWN0aW9uIGlzCisJZGlzYWJsZWQuIElmIHNldCB0byAidHJ1ZSIsIGJhc2ljIHJlbmFtZSBkZXRlY3Rpb24gaXMgZW5hYmxlZC4KKwlJZiBzZXQgdG8gImNvcGllcyIgb3IgImNvcHkiLCBHaXQgd2lsbCBkZXRlY3QgY29waWVzLCBhcyB3ZWxsLgorCURlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBkaWZmLnJlbmFtZXMuCisKK3N0YXR1cy5zaG93U3Rhc2g6OgorCUlmIHNldCB0byB0cnVlLCBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gd2lsbCBkaXNwbGF5IHRoZSBudW1iZXIgb2YKKwllbnRyaWVzIGN1cnJlbnRseSBzdGFzaGVkIGF3YXkuCisJRGVmYXVsdHMgdG8gZmFsc2UuCisKK3N0YXR1cy5zaG93VW50cmFja2VkRmlsZXM6OgorCUJ5IGRlZmF1bHQsIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBhbmQgbGlua2dpdDpnaXQtY29tbWl0WzFdIHNob3cKKwlmaWxlcyB3aGljaCBhcmUgbm90IGN1cnJlbnRseSB0cmFja2VkIGJ5IEdpdC4gRGlyZWN0b3JpZXMgd2hpY2gKKwljb250YWluIG9ubHkgdW50cmFja2VkIGZpbGVzLCBhcmUgc2hvd24gd2l0aCB0aGUgZGlyZWN0b3J5IG5hbWUKKwlvbmx5LiBTaG93aW5nIHVudHJhY2tlZCBmaWxlcyBtZWFucyB0aGF0IEdpdCBuZWVkcyB0byBsc3RhdCgpIGFsbAorCXRoZSBmaWxlcyBpbiB0aGUgd2hvbGUgcmVwb3NpdG9yeSwgd2hpY2ggbWlnaHQgYmUgc2xvdyBvbiBzb21lCisJc3lzdGVtcy4gU28sIHRoaXMgdmFyaWFibGUgY29udHJvbHMgaG93IHRoZSBjb21tYW5kcyBkaXNwbGF5cworCXRoZSB1bnRyYWNrZWQgZmlsZXMuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CisrCistLQorKiBgbm9gIC0gU2hvdyBubyB1bnRyYWNrZWQgZmlsZXMuCisqIGBub3JtYWxgIC0gU2hvdyB1bnRyYWNrZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgorKiBgYWxsYCAtIFNob3cgYWxzbyBpbmRpdmlkdWFsIGZpbGVzIGluIHVudHJhY2tlZCBkaXJlY3Rvcmllcy4KKy0tCisrCitJZiB0aGlzIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvICdub3JtYWwnLgorVGhpcyB2YXJpYWJsZSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtdXwtLXVudHJhY2tlZC1maWxlcyBvcHRpb24KK29mIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBhbmQgbGlua2dpdDpnaXQtY29tbWl0WzFdLgorCitzdGF0dXMuc3VibW9kdWxlU3VtbWFyeTo6CisJRGVmYXVsdHMgdG8gZmFsc2UuCisJSWYgdGhpcyBpcyBzZXQgdG8gYSBub24gemVybyBudW1iZXIgb3IgdHJ1ZSAoaWRlbnRpY2FsIHRvIC0xIG9yIGFuCisJdW5saW1pdGVkIG51bWJlciksIHRoZSBzdWJtb2R1bGUgc3VtbWFyeSB3aWxsIGJlIGVuYWJsZWQgYW5kIGEKKwlzdW1tYXJ5IG9mIGNvbW1pdHMgZm9yIG1vZGlmaWVkIHN1Ym1vZHVsZXMgd2lsbCBiZSBzaG93biAoc2VlCisJLS1zdW1tYXJ5LWxpbWl0IG9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0pLiBQbGVhc2Ugbm90ZQorCXRoYXQgdGhlIHN1bW1hcnkgb3V0cHV0IGNvbW1hbmQgd2lsbCBiZSBzdXBwcmVzc2VkIGZvciBhbGwKKwlzdWJtb2R1bGVzIHdoZW4gYGRpZmYuaWdub3JlU3VibW9kdWxlc2AgaXMgc2V0IHRvICdhbGwnIG9yIG9ubHkKKwlmb3IgdGhvc2Ugc3VibW9kdWxlcyB3aGVyZSBgc3VibW9kdWxlLjxuYW1lPi5pZ25vcmU9YWxsYC4gVGhlIG9ubHkKKwlleGNlcHRpb24gdG8gdGhhdCBydWxlIGlzIHRoYXQgc3RhdHVzIGFuZCBjb21taXQgd2lsbCBzaG93IHN0YWdlZAorCXN1Ym1vZHVsZSBjaGFuZ2VzLiBUbworCWFsc28gdmlldyB0aGUgc3VtbWFyeSBmb3IgaWdub3JlZCBzdWJtb2R1bGVzIHlvdSBjYW4gZWl0aGVyIHVzZQorCXRoZSAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IGNvbW1hbmQtbGluZSBvcHRpb24gb3IgdGhlICdnaXQKKwlzdWJtb2R1bGUgc3VtbWFyeScgY29tbWFuZCwgd2hpY2ggc2hvd3MgYSBzaW1pbGFyIG91dHB1dCBidXQgZG9lcworCW5vdCBob25vciB0aGVzZSBzZXR0aW5ncy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3N1Ym1vZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zdWJtb2R1bGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YTYzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zdWJtb2R1bGUudHh0CkBAIC0wLDAgKzEsOTIgQEAKK3N1Ym1vZHVsZS48bmFtZT4udXJsOjoKKwlUaGUgVVJMIGZvciBhIHN1Ym1vZHVsZS4gVGhpcyB2YXJpYWJsZSBpcyBjb3BpZWQgZnJvbSB0aGUgLmdpdG1vZHVsZXMKKwlmaWxlIHRvIHRoZSBnaXQgY29uZmlnIHZpYSAnZ2l0IHN1Ym1vZHVsZSBpbml0Jy4gVGhlIHVzZXIgY2FuIGNoYW5nZQorCXRoZSBjb25maWd1cmVkIFVSTCBiZWZvcmUgb2J0YWluaW5nIHRoZSBzdWJtb2R1bGUgdmlhICdnaXQgc3VibW9kdWxlCisJdXBkYXRlJy4gSWYgbmVpdGhlciBzdWJtb2R1bGUuPG5hbWU+LmFjdGl2ZSBvciBzdWJtb2R1bGUuYWN0aXZlIGFyZQorCXNldCwgdGhlIHByZXNlbmNlIG9mIHRoaXMgdmFyaWFibGUgaXMgdXNlZCBhcyBhIGZhbGxiYWNrIHRvIGluZGljYXRlCisJd2hldGhlciB0aGUgc3VibW9kdWxlIGlzIG9mIGludGVyZXN0IHRvIGdpdCBjb21tYW5kcy4KKwlTZWUgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGFuZCBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0gZm9yIGRldGFpbHMuCisKK3N1Ym1vZHVsZS48bmFtZT4udXBkYXRlOjoKKwlUaGUgbWV0aG9kIGJ5IHdoaWNoIGEgc3VibW9kdWxlIGlzIHVwZGF0ZWQgYnkgJ2dpdCBzdWJtb2R1bGUgdXBkYXRlJywKKwl3aGljaCBpcyB0aGUgb25seSBhZmZlY3RlZCBjb21tYW5kLCBvdGhlcnMgc3VjaCBhcworCSdnaXQgY2hlY2tvdXQgLS1yZWN1cnNlLXN1Ym1vZHVsZXMnIGFyZSB1bmFmZmVjdGVkLiBJdCBleGlzdHMgZm9yCisJaGlzdG9yaWNhbCByZWFzb25zLCB3aGVuICdnaXQgc3VibW9kdWxlJyB3YXMgdGhlIG9ubHkgY29tbWFuZCB0bworCWludGVyYWN0IHdpdGggc3VibW9kdWxlczsgc2V0dGluZ3MgbGlrZSBgc3VibW9kdWxlLmFjdGl2ZWAKKwlhbmQgYHB1bGwucmViYXNlYCBhcmUgbW9yZSBzcGVjaWZpYy4gSXQgaXMgcG9wdWxhdGVkIGJ5CisJYGdpdCBzdWJtb2R1bGUgaW5pdGAgZnJvbSB0aGUgbGlua2dpdDpnaXRtb2R1bGVzWzVdIGZpbGUuCisJU2VlIGRlc2NyaXB0aW9uIG9mICd1cGRhdGUnIGNvbW1hbmQgaW4gbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdLgorCitzdWJtb2R1bGUuPG5hbWU+LmJyYW5jaDo6CisJVGhlIHJlbW90ZSBicmFuY2ggbmFtZSBmb3IgYSBzdWJtb2R1bGUsIHVzZWQgYnkgYGdpdCBzdWJtb2R1bGUKKwl1cGRhdGUgLS1yZW1vdGVgLiAgU2V0IHRoaXMgb3B0aW9uIHRvIG92ZXJyaWRlIHRoZSB2YWx1ZSBmb3VuZCBpbgorCXRoZSBgLmdpdG1vZHVsZXNgIGZpbGUuICBTZWUgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGFuZAorCWxpbmtnaXQ6Z2l0bW9kdWxlc1s1XSBmb3IgZGV0YWlscy4KKworc3VibW9kdWxlLjxuYW1lPi5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzOjoKKwlUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiB0aGlzCisJc3VibW9kdWxlLiBJdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUgLS1bbm8tXXJlY3Vyc2Utc3VibW9kdWxlcworCWNvbW1hbmQtbGluZSBvcHRpb24gdG8gImdpdCBmZXRjaCIgYW5kICJnaXQgcHVsbCIuCisJVGhpcyBzZXR0aW5nIHdpbGwgb3ZlcnJpZGUgdGhhdCBmcm9tIGluIHRoZSBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0KKwlmaWxlLgorCitzdWJtb2R1bGUuPG5hbWU+Lmlnbm9yZTo6CisJRGVmaW5lcyB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgImdpdCBzdGF0dXMiIGFuZCB0aGUgZGlmZiBmYW1pbHkgc2hvdworCWEgc3VibW9kdWxlIGFzIG1vZGlmaWVkLiBXaGVuIHNldCB0byAiYWxsIiwgaXQgd2lsbCBuZXZlciBiZSBjb25zaWRlcmVkCisJbW9kaWZpZWQgKGJ1dCBpdCB3aWxsIG5vbmV0aGVsZXNzIHNob3cgdXAgaW4gdGhlIG91dHB1dCBvZiBzdGF0dXMgYW5kCisJY29tbWl0IHdoZW4gaXQgaGFzIGJlZW4gc3RhZ2VkKSwgImRpcnR5IiB3aWxsIGlnbm9yZSBhbGwgY2hhbmdlcworCXRvIHRoZSBzdWJtb2R1bGVzIHdvcmsgdHJlZSBhbmQKKwl0YWtlcyBvbmx5IGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIEhFQUQgb2YgdGhlIHN1Ym1vZHVsZSBhbmQgdGhlIGNvbW1pdAorCXJlY29yZGVkIGluIHRoZSBzdXBlcnByb2plY3QgaW50byBhY2NvdW50LiAidW50cmFja2VkIiB3aWxsIGFkZGl0aW9uYWxseQorCWxldCBzdWJtb2R1bGVzIHdpdGggbW9kaWZpZWQgdHJhY2tlZCBmaWxlcyBpbiB0aGVpciB3b3JrIHRyZWUgc2hvdyB1cC4KKwlVc2luZyAibm9uZSIgKHRoZSBkZWZhdWx0IHdoZW4gdGhpcyBvcHRpb24gaXMgbm90IHNldCkgYWxzbyBzaG93cworCXN1Ym1vZHVsZXMgdGhhdCBoYXZlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVpciB3b3JrIHRyZWUgYXMgY2hhbmdlZC4KKwlUaGlzIHNldHRpbmcgb3ZlcnJpZGVzIGFueSBzZXR0aW5nIG1hZGUgaW4gLmdpdG1vZHVsZXMgZm9yIHRoaXMgc3VibW9kdWxlLAorCWJvdGggc2V0dGluZ3MgY2FuIGJlIG92ZXJyaWRkZW4gb24gdGhlIGNvbW1hbmQgbGluZSBieSB1c2luZyB0aGUKKwkiLS1pZ25vcmUtc3VibW9kdWxlcyIgb3B0aW9uLiBUaGUgJ2dpdCBzdWJtb2R1bGUnIGNvbW1hbmRzIGFyZSBub3QKKwlhZmZlY3RlZCBieSB0aGlzIHNldHRpbmcuCisKK3N1Ym1vZHVsZS48bmFtZT4uYWN0aXZlOjoKKwlCb29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHN1Ym1vZHVsZSBpcyBvZiBpbnRlcmVzdCB0byBnaXQKKwljb21tYW5kcy4gIFRoaXMgY29uZmlnIG9wdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlCisJc3VibW9kdWxlLmFjdGl2ZSBjb25maWcgb3B0aW9uLiBTZWUgbGlua2dpdDpnaXRzdWJtb2R1bGVzWzddIGZvcgorCWRldGFpbHMuCisKK3N1Ym1vZHVsZS5hY3RpdmU6OgorCUEgcmVwZWF0ZWQgZmllbGQgd2hpY2ggY29udGFpbnMgYSBwYXRoc3BlYyB1c2VkIHRvIG1hdGNoIGFnYWluc3QgYQorCXN1Ym1vZHVsZSdzIHBhdGggdG8gZGV0ZXJtaW5lIGlmIHRoZSBzdWJtb2R1bGUgaXMgb2YgaW50ZXJlc3QgdG8gZ2l0CisJY29tbWFuZHMuIFNlZSBsaW5rZ2l0OmdpdHN1Ym1vZHVsZXNbN10gZm9yIGRldGFpbHMuCisKK3N1Ym1vZHVsZS5yZWN1cnNlOjoKKwlTcGVjaWZpZXMgaWYgY29tbWFuZHMgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMgYnkgZGVmYXVsdC4gVGhpcworCWFwcGxpZXMgdG8gYWxsIGNvbW1hbmRzIHRoYXQgaGF2ZSBhIGAtLXJlY3Vyc2Utc3VibW9kdWxlc2Agb3B0aW9uCisJKGBjaGVja291dGAsIGBmZXRjaGAsIGBncmVwYCwgYHB1bGxgLCBgcHVzaGAsIGByZWFkLXRyZWVgLCBgcmVzZXRgLAorCWByZXN0b3JlYCBhbmQgYHN3aXRjaGApIGV4Y2VwdCBgY2xvbmVgIGFuZCBgbHMtZmlsZXNgLgorCURlZmF1bHRzIHRvIGZhbHNlLgorCVdoZW4gc2V0IHRvIHRydWUsIGl0IGNhbiBiZSBkZWFjdGl2YXRlZCB2aWEgdGhlCisJYC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzYCBvcHRpb24uIE5vdGUgdGhhdCBzb21lIEdpdCBjb21tYW5kcworCWxhY2tpbmcgdGhpcyBvcHRpb24gbWF5IGNhbGwgc29tZSBvZiB0aGUgYWJvdmUgY29tbWFuZHMgYWZmZWN0ZWQgYnkKKwlgc3VibW9kdWxlLnJlY3Vyc2VgOyBmb3IgaW5zdGFuY2UgYGdpdCByZW1vdGUgdXBkYXRlYCB3aWxsIGNhbGwKKwlgZ2l0IGZldGNoYCBidXQgZG9lcyBub3QgaGF2ZSBhIGAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlc2Agb3B0aW9uLgorCUZvciB0aGVzZSBjb21tYW5kcyBhIHdvcmthcm91bmQgaXMgdG8gdGVtcG9yYXJpbHkgY2hhbmdlIHRoZQorCWNvbmZpZ3VyYXRpb24gdmFsdWUgYnkgdXNpbmcgYGdpdCAtYyBzdWJtb2R1bGUucmVjdXJzZT0wYC4KKworc3VibW9kdWxlLmZldGNoSm9iczo6CisJU3BlY2lmaWVzIGhvdyBtYW55IHN1Ym1vZHVsZXMgYXJlIGZldGNoZWQvY2xvbmVkIGF0IHRoZSBzYW1lIHRpbWUuCisJQSBwb3NpdGl2ZSBpbnRlZ2VyIGFsbG93cyB1cCB0byB0aGF0IG51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQKKwlpbiBwYXJhbGxlbC4gQSB2YWx1ZSBvZiAwIHdpbGwgZ2l2ZSBzb21lIHJlYXNvbmFibGUgZGVmYXVsdC4KKwlJZiB1bnNldCwgaXQgZGVmYXVsdHMgdG8gMS4KKworc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uOjoKKwlTcGVjaWZpZXMgaG93IHRoZSBzdWJtb2R1bGVzIG9idGFpbiBhbHRlcm5hdGVzIHdoZW4gc3VibW9kdWxlcyBhcmUKKwljbG9uZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmUgYG5vYCwgYHN1cGVycHJvamVjdGAuCisJQnkgZGVmYXVsdCBgbm9gIGlzIGFzc3VtZWQsIHdoaWNoIGRvZXNuJ3QgYWRkIHJlZmVyZW5jZXMuIFdoZW4gdGhlCisJdmFsdWUgaXMgc2V0IHRvIGBzdXBlcnByb2plY3RgIHRoZSBzdWJtb2R1bGUgdG8gYmUgY2xvbmVkIGNvbXB1dGVzCisJaXRzIGFsdGVybmF0ZXMgbG9jYXRpb24gcmVsYXRpdmUgdG8gdGhlIHN1cGVycHJvamVjdHMgYWx0ZXJuYXRlLgorCitzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneTo6CisJU3BlY2lmaWVzIGhvdyB0byB0cmVhdCBlcnJvcnMgd2l0aCB0aGUgYWx0ZXJuYXRlcyBmb3IgYSBzdWJtb2R1bGUKKwlhcyBjb21wdXRlZCB2aWEgYHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbmAuIFBvc3NpYmxlIHZhbHVlcyBhcmUKKwlgaWdub3JlYCwgYGluZm9gLCBgZGllYC4gRGVmYXVsdCBpcyBgZGllYC4gTm90ZSB0aGF0IGlmIHNldCB0byBgaWdub3JlYAorCW9yIGBpbmZvYCwgYW5kIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdpdGggdGhlIGNvbXB1dGVkIGFsdGVybmF0ZSwgdGhlCisJY2xvbmUgcHJvY2VlZHMgYXMgaWYgbm8gYWx0ZXJuYXRlIHdhcyBzcGVjaWZpZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy90YWcudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvdGFnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDYyYTA1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvdGFnLnR4dApAQCAtMCwwICsxLDE3IEBACit0YWcuZm9yY2VTaWduQW5ub3RhdGVkOjoKKwlBIGJvb2xlYW4gdG8gc3BlY2lmeSB3aGV0aGVyIGFubm90YXRlZCB0YWdzIGNyZWF0ZWQgc2hvdWxkIGJlIEdQRyBzaWduZWQuCisJSWYgYC0tYW5ub3RhdGVgIGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBpdCB0YWtlcworCXByZWNlZGVuY2Ugb3ZlciB0aGlzIG9wdGlvbi4KKwordGFnLnNvcnQ6OgorCVRoaXMgdmFyaWFibGUgY29udHJvbHMgdGhlIHNvcnQgb3JkZXJpbmcgb2YgdGFncyB3aGVuIGRpc3BsYXllZCBieQorCWxpbmtnaXQ6Z2l0LXRhZ1sxXS4gV2l0aG91dCB0aGUgIi0tc29ydD08dmFsdWU+IiBvcHRpb24gcHJvdmlkZWQsIHRoZQorCXZhbHVlIG9mIHRoaXMgdmFyaWFibGUgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0LgorCit0YWcuZ3BnU2lnbjo6CisJQSBib29sZWFuIHRvIHNwZWNpZnkgd2hldGhlciBhbGwgdGFncyBzaG91bGQgYmUgR1BHIHNpZ25lZC4KKwlVc2Ugb2YgdGhpcyBvcHRpb24gd2hlbiBydW5uaW5nIGluIGFuIGF1dG9tYXRlZCBzY3JpcHQgY2FuCisJcmVzdWx0IGluIGEgbGFyZ2UgbnVtYmVyIG9mIHRhZ3MgYmVpbmcgc2lnbmVkLiBJdCBpcyB0aGVyZWZvcmUKKwljb252ZW5pZW50IHRvIHVzZSBhbiBhZ2VudCB0byBhdm9pZCB0eXBpbmcgeW91ciBncGcgcGFzc3BocmFzZQorCXNldmVyYWwgdGltZXMuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBkb2Vzbid0IGFmZmVjdCB0YWcgc2lnbmluZworCWJlaGF2aW9yIGVuYWJsZWQgYnkgIi11IDxrZXlpZD4iIG9yICItLWxvY2FsLXVzZXI9PGtleWlkPiIgb3B0aW9ucy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3Rhci50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy90YXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlOGZmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy90YXIudHh0CkBAIC0wLDAgKzEsNiBAQAordGFyLnVtYXNrOjoKKwlUaGlzIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBwZXJtaXNzaW9uIGJpdHMgb2YKKwl0YXIgYXJjaGl2ZSBlbnRyaWVzLiAgVGhlIGRlZmF1bHQgaXMgMDAwMiwgd2hpY2ggdHVybnMgb2ZmIHRoZQorCXdvcmxkIHdyaXRlIGJpdC4gIFRoZSBzcGVjaWFsIHZhbHVlICJ1c2VyIiBpbmRpY2F0ZXMgdGhhdCB0aGUKKwlhcmNoaXZpbmcgdXNlcidzIHVtYXNrIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiAgU2VlIHVtYXNrKDIpIGFuZAorCWxpbmtnaXQ6Z2l0LWFyY2hpdmVbMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy90cmFjZTIudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvdHJhY2UyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWQzYWZkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvdHJhY2UyLnR4dApAQCAtMCwwICsxLDcxIEBACitUcmFjZTIgY29uZmlnIHNldHRpbmdzIGFyZSBvbmx5IHJlYWQgZnJvbSB0aGUgc3lzdGVtIGFuZCBnbG9iYWwKK2NvbmZpZyBmaWxlczsgcmVwb3NpdG9yeSBsb2NhbCBhbmQgd29ya3RyZWUgY29uZmlnIGZpbGVzIGFuZCBgLWNgCitjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFyZSBub3QgcmVzcGVjdGVkLgorCit0cmFjZTIubm9ybWFsVGFyZ2V0OjoKKwlUaGlzIHZhcmlhYmxlIGNvbnRyb2xzIHRoZSBub3JtYWwgdGFyZ2V0IGRlc3RpbmF0aW9uLgorCUl0IG1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX1RSQUNFMmAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyBwb3NzaWJsZSB2YWx1ZXMuCisKK3RyYWNlMi5wZXJmVGFyZ2V0OjoKKwlUaGlzIHZhcmlhYmxlIGNvbnRyb2xzIHRoZSBwZXJmb3JtYW5jZSB0YXJnZXQgZGVzdGluYXRpb24uCisJSXQgbWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfVFJBQ0UyX1BFUkZgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCVRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgcG9zc2libGUgdmFsdWVzLgorCit0cmFjZTIuZXZlbnRUYXJnZXQ6OgorCVRoaXMgdmFyaWFibGUgY29udHJvbHMgdGhlIGV2ZW50IHRhcmdldCBkZXN0aW5hdGlvbi4KKwlJdCBtYXkgYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9UUkFDRTJfRVZFTlRgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCVRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgcG9zc2libGUgdmFsdWVzLgorKworaW5jbHVkZTo6Li4vdHJhY2UyLXRhcmdldC12YWx1ZXMudHh0W10KKwordHJhY2UyLm5vcm1hbEJyaWVmOjoKKwlCb29sZWFuLiAgV2hlbiB0cnVlIGB0aW1lYCwgYGZpbGVuYW1lYCwgYW5kIGBsaW5lYCBmaWVsZHMgYXJlCisJb21pdHRlZCBmcm9tIG5vcm1hbCBvdXRwdXQuICBNYXkgYmUgb3ZlcnJpZGRlbiBieSB0aGUKKwlgR0lUX1RSQUNFMl9CUklFRmAgZW52aXJvbm1lbnQgdmFyaWFibGUuICBEZWZhdWx0cyB0byBmYWxzZS4KKwordHJhY2UyLnBlcmZCcmllZjo6CisJQm9vbGVhbi4gIFdoZW4gdHJ1ZSBgdGltZWAsIGBmaWxlbmFtZWAsIGFuZCBgbGluZWAgZmllbGRzIGFyZQorCW9taXR0ZWQgZnJvbSBQRVJGIG91dHB1dC4gIE1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZQorCWBHSVRfVFJBQ0UyX1BFUkZfQlJJRUZgIGVudmlyb25tZW50IHZhcmlhYmxlLiAgRGVmYXVsdHMgdG8gZmFsc2UuCisKK3RyYWNlMi5ldmVudEJyaWVmOjoKKwlCb29sZWFuLiAgV2hlbiB0cnVlIGB0aW1lYCwgYGZpbGVuYW1lYCwgYW5kIGBsaW5lYCBmaWVsZHMgYXJlCisJb21pdHRlZCBmcm9tIGV2ZW50IG91dHB1dC4gIE1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZQorCWBHSVRfVFJBQ0UyX0VWRU5UX0JSSUVGYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIERlZmF1bHRzIHRvIGZhbHNlLgorCit0cmFjZTIuZXZlbnROZXN0aW5nOjoKKwlJbnRlZ2VyLiAgU3BlY2lmaWVzIGRlc2lyZWQgZGVwdGggb2YgbmVzdGVkIHJlZ2lvbnMgaW4gdGhlCisJZXZlbnQgb3V0cHV0LiAgUmVnaW9ucyBkZWVwZXIgdGhhbiB0aGlzIHZhbHVlIHdpbGwgYmUKKwlvbWl0dGVkLiAgTWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfVFJBQ0UyX0VWRU5UX05FU1RJTkdgCisJZW52aXJvbm1lbnQgdmFyaWFibGUuICBEZWZhdWx0cyB0byAyLgorCit0cmFjZTIuY29uZmlnUGFyYW1zOjoKKwlBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBhdHRlcm5zIG9mICJpbXBvcnRhbnQiIGNvbmZpZworCXNldHRpbmdzIHRoYXQgc2hvdWxkIGJlIHJlY29yZGVkIGluIHRoZSB0cmFjZTIgb3V0cHV0LgorCUZvciBleGFtcGxlLCBgY29yZS4qLHJlbW90ZS4qLnVybGAgd291bGQgY2F1c2UgdGhlIHRyYWNlMgorCW91dHB1dCB0byBjb250YWluIGV2ZW50cyBsaXN0aW5nIGVhY2ggY29uZmlndXJlZCByZW1vdGUuCisJTWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfVFJBQ0UyX0NPTkZJR19QQVJBTVNgIGVudmlyb25tZW50CisJdmFyaWFibGUuICBVbnNldCBieSBkZWZhdWx0LgorCit0cmFjZTIuZW52VmFyczo6CisJQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiAiaW1wb3J0YW50IiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBzaG91bGQKKwliZSByZWNvcmRlZCBpbiB0aGUgdHJhY2UyIG91dHB1dC4gIEZvciBleGFtcGxlLAorCWBHSVRfSFRUUF9VU0VSX0FHRU5ULEdJVF9DT05GSUdgIHdvdWxkIGNhdXNlIHRoZSB0cmFjZTIgb3V0cHV0IHRvCisJY29udGFpbiBldmVudHMgbGlzdGluZyB0aGUgb3ZlcnJpZGVzIGZvciBIVFRQIHVzZXIgYWdlbnQgYW5kIHRoZQorCWxvY2F0aW9uIG9mIHRoZSBHaXQgY29uZmlndXJhdGlvbiBmaWxlIChhc3N1bWluZyBhbnkgYXJlIHNldCkuICBNYXkgYmUKKwlvdmVycmlkZW4gYnkgdGhlIGBHSVRfVFJBQ0UyX0VOVl9WQVJTYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIFVuc2V0IGJ5CisJZGVmYXVsdC4KKwordHJhY2UyLmRlc3RpbmF0aW9uRGVidWc6OgorCUJvb2xlYW4uICBXaGVuIHRydWUgR2l0IHdpbGwgcHJpbnQgZXJyb3IgbWVzc2FnZXMgd2hlbiBhCisJdHJhY2UgdGFyZ2V0IGRlc3RpbmF0aW9uIGNhbm5vdCBiZSBvcGVuZWQgZm9yIHdyaXRpbmcuCisJQnkgZGVmYXVsdCwgdGhlc2UgZXJyb3JzIGFyZSBzdXBwcmVzc2VkIGFuZCB0cmFjaW5nIGlzCisJc2lsZW50bHkgZGlzYWJsZWQuICBNYXkgYmUgb3ZlcnJpZGRlbiBieSB0aGUKKwlgR0lUX1RSQUNFMl9EU1RfREVCVUdgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCit0cmFjZTIubWF4RmlsZXM6OgorCUludGVnZXIuICBXaGVuIHdyaXRpbmcgdHJhY2UgZmlsZXMgdG8gYSB0YXJnZXQgZGlyZWN0b3J5LCBkbyBub3QKKwl3cml0ZSBhZGRpdGlvbmFsIHRyYWNlcyBpZiB3ZSB3b3VsZCBleGNlZWQgdGhpcyBtYW55IGZpbGVzLiBJbnN0ZWFkLAorCXdyaXRlIGEgc2VudGluZWwgZmlsZSB0aGF0IHdpbGwgYmxvY2sgZnVydGhlciB0cmFjaW5nIHRvIHRoaXMKKwlkaXJlY3RvcnkuIERlZmF1bHRzIHRvIDAsIHdoaWNoIGRpc2FibGVzIHRoaXMgY2hlY2suCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy90cmFuc2Zlci50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy90cmFuc2Zlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViNjI0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3RyYW5zZmVyLnR4dApAQCAtMCwwICsxLDcxIEBACit0cmFuc2Zlci5mc2NrT2JqZWN0czo6CisJV2hlbiBgZmV0Y2guZnNja09iamVjdHNgIG9yIGByZWNlaXZlLmZzY2tPYmplY3RzYCBhcmUKKwlub3Qgc2V0LCB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluc3RlYWQuCisJRGVmYXVsdHMgdG8gZmFsc2UuCisrCitXaGVuIHNldCwgdGhlIGZldGNoIG9yIHJlY2VpdmUgd2lsbCBhYm9ydCBpbiB0aGUgY2FzZSBvZiBhIG1hbGZvcm1lZAorb2JqZWN0IG9yIGEgbGluayB0byBhIG5vbmV4aXN0ZW50IG9iamVjdC4gSW4gYWRkaXRpb24sIHZhcmlvdXMgb3RoZXIKK2lzc3VlcyBhcmUgY2hlY2tlZCBmb3IsIGluY2x1ZGluZyBsZWdhY3kgaXNzdWVzIChzZWUgYGZzY2suPG1zZy1pZD5gKSwKK2FuZCBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWVzIGxpa2UgdGhlIGV4aXN0ZW5jZSBvZiBhIGAuR0lUYCBkaXJlY3RvcnkKK29yIGEgbWFsaWNpb3VzIGAuZ2l0bW9kdWxlc2AgZmlsZSAoc2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciB2Mi4yLjEKK2FuZCB2Mi4xNy4xIGZvciBkZXRhaWxzKS4gT3RoZXIgc2FuaXR5IGFuZCBzZWN1cml0eSBjaGVja3MgbWF5IGJlCithZGRlZCBpbiBmdXR1cmUgcmVsZWFzZXMuCisrCitPbiB0aGUgcmVjZWl2aW5nIHNpZGUsIGZhaWxpbmcgZnNja09iamVjdHMgd2lsbCBtYWtlIHRob3NlIG9iamVjdHMKK3VucmVhY2hhYmxlLCBzZWUgIlFVQVJBTlRJTkUgRU5WSVJPTk1FTlQiIGluCitsaW5rZ2l0OmdpdC1yZWNlaXZlLXBhY2tbMV0uIE9uIHRoZSBmZXRjaCBzaWRlLCBtYWxmb3JtZWQgb2JqZWN0cyB3aWxsCitpbnN0ZWFkIGJlIGxlZnQgdW5yZWZlcmVuY2VkIGluIHRoZSByZXBvc2l0b3J5LgorKworRHVlIHRvIHRoZSBub24tcXVhcmFudGluZSBuYXR1cmUgb2YgdGhlIGBmZXRjaC5mc2NrT2JqZWN0c2AKK2ltcGxlbWVudGF0aW9uIGl0IGNhbm5vdCBiZSByZWxpZWQgdXBvbiB0byBsZWF2ZSB0aGUgb2JqZWN0IHN0b3JlCitjbGVhbiBsaWtlIGByZWNlaXZlLmZzY2tPYmplY3RzYCBjYW4uCisrCitBcyBvYmplY3RzIGFyZSB1bnBhY2tlZCB0aGV5J3JlIHdyaXR0ZW4gdG8gdGhlIG9iamVjdCBzdG9yZSwgc28gdGhlcmUKK2NhbiBiZSBjYXNlcyB3aGVyZSBtYWxpY2lvdXMgb2JqZWN0cyBnZXQgaW50cm9kdWNlZCBldmVuIHRob3VnaCB0aGUKKyJmZXRjaCIgZmFpbGVkLCBvbmx5IHRvIGhhdmUgYSBzdWJzZXF1ZW50ICJmZXRjaCIgc3VjY2VlZCBiZWNhdXNlIG9ubHkKK25ldyBpbmNvbWluZyBvYmplY3RzIGFyZSBjaGVja2VkLCBub3QgdGhvc2UgdGhhdCBoYXZlIGFscmVhZHkgYmVlbgord3JpdHRlbiB0byB0aGUgb2JqZWN0IHN0b3JlLiBUaGF0IGRpZmZlcmVuY2UgaW4gYmVoYXZpb3Igc2hvdWxkIG5vdCBiZQorcmVsaWVkIHVwb24uIEluIHRoZSBmdXR1cmUsIHN1Y2ggb2JqZWN0cyBtYXkgYmUgcXVhcmFudGluZWQgZm9yCisiZmV0Y2giIGFzIHdlbGwuCisrCitGb3Igbm93LCB0aGUgcGFyYW5vaWQgbmVlZCB0byBmaW5kIHNvbWUgd2F5IHRvIGVtdWxhdGUgdGhlIHF1YXJhbnRpbmUKK2Vudmlyb25tZW50IGlmIHRoZXknZCBsaWtlIHRoZSBzYW1lIHByb3RlY3Rpb24gYXMgInB1c2giLiBFLmcuIGluIHRoZQorY2FzZSBvZiBhbiBpbnRlcm5hbCBtaXJyb3IgZG8gdGhlIG1pcnJvcmluZyBpbiB0d28gc3RlcHMsIG9uZSB0byBmZXRjaAordGhlIHVudHJ1c3RlZCBvYmplY3RzLCBhbmQgdGhlbiBkbyBhIHNlY29uZCAicHVzaCIgKHdoaWNoIHdpbGwgdXNlIHRoZQorcXVhcmFudGluZSkgdG8gYW5vdGhlciBpbnRlcm5hbCByZXBvLCBhbmQgaGF2ZSBpbnRlcm5hbCBjbGllbnRzCitjb25zdW1lIHRoaXMgcHVzaGVkLXRvIHJlcG9zaXRvcnksIG9yIGVtYmFyZ28gaW50ZXJuYWwgZmV0Y2hlcyBhbmQKK29ubHkgYWxsb3cgdGhlbSBvbmNlIGEgZnVsbCAiZnNjayIgaGFzIHJ1biAoYW5kIG5vIG5ldyBmZXRjaGVzIGhhdmUKK2hhcHBlbmVkIGluIHRoZSBtZWFudGltZSkuCisKK3RyYW5zZmVyLmhpZGVSZWZzOjoKKwlTdHJpbmcocykgYHJlY2VpdmUtcGFja2AgYW5kIGB1cGxvYWQtcGFja2AgdXNlIHRvIGRlY2lkZSB3aGljaAorCXJlZnMgdG8gb21pdCBmcm9tIHRoZWlyIGluaXRpYWwgYWR2ZXJ0aXNlbWVudHMuICBVc2UgbW9yZSB0aGFuCisJb25lIGRlZmluaXRpb24gdG8gc3BlY2lmeSBtdWx0aXBsZSBwcmVmaXggc3RyaW5ncy4gQSByZWYgdGhhdCBpcworCXVuZGVyIHRoZSBoaWVyYXJjaGllcyBsaXN0ZWQgaW4gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMKKwlleGNsdWRlZCwgYW5kIGlzIGhpZGRlbiB3aGVuIHJlc3BvbmRpbmcgdG8gYGdpdCBwdXNoYCBvciBgZ2l0CisJZmV0Y2hgLiAgU2VlIGByZWNlaXZlLmhpZGVSZWZzYCBhbmQgYHVwbG9hZHBhY2suaGlkZVJlZnNgIGZvcgorCXByb2dyYW0tc3BlY2lmaWMgdmVyc2lvbnMgb2YgdGhpcyBjb25maWcuCisrCitZb3UgbWF5IGFsc28gaW5jbHVkZSBhIGAhYCBpbiBmcm9udCBvZiB0aGUgcmVmIG5hbWUgdG8gbmVnYXRlIHRoZSBlbnRyeSwKK2V4cGxpY2l0bHkgZXhwb3NpbmcgaXQsIGV2ZW4gaWYgYW4gZWFybGllciBlbnRyeSBtYXJrZWQgaXQgYXMgaGlkZGVuLgorSWYgeW91IGhhdmUgbXVsdGlwbGUgaGlkZVJlZnMgdmFsdWVzLCBsYXRlciBlbnRyaWVzIG92ZXJyaWRlIGVhcmxpZXIgb25lcworKGFuZCBlbnRyaWVzIGluIG1vcmUtc3BlY2lmaWMgY29uZmlnIGZpbGVzIG92ZXJyaWRlIGxlc3Mtc3BlY2lmaWMgb25lcykuCisrCitJZiBhIG5hbWVzcGFjZSBpcyBpbiB1c2UsIHRoZSBuYW1lc3BhY2UgcHJlZml4IGlzIHN0cmlwcGVkIGZyb20gZWFjaAorcmVmZXJlbmNlIGJlZm9yZSBpdCBpcyBtYXRjaGVkIGFnYWluc3QgYHRyYW5zZmVyLmhpZGVyZWZzYCBwYXR0ZXJucy4KK0ZvciBleGFtcGxlLCBpZiBgcmVmcy9oZWFkcy9tYXN0ZXJgIGlzIHNwZWNpZmllZCBpbiBgdHJhbnNmZXIuaGlkZVJlZnNgIGFuZAordGhlIGN1cnJlbnQgbmFtZXNwYWNlIGlzIGBmb29gLCB0aGVuIGByZWZzL25hbWVzcGFjZXMvZm9vL3JlZnMvaGVhZHMvbWFzdGVyYAoraXMgb21pdHRlZCBmcm9tIHRoZSBhZHZlcnRpc2VtZW50cyBidXQgYHJlZnMvaGVhZHMvbWFzdGVyYCBhbmQKK2ByZWZzL25hbWVzcGFjZXMvYmFyL3JlZnMvaGVhZHMvbWFzdGVyYCBhcmUgc3RpbGwgYWR2ZXJ0aXNlZCBhcyBzby1jYWxsZWQKKyJoYXZlIiBsaW5lcy4gSW4gb3JkZXIgdG8gbWF0Y2ggcmVmcyBiZWZvcmUgc3RyaXBwaW5nLCBhZGQgYSBgXmAgaW4gZnJvbnQgb2YKK3RoZSByZWYgbmFtZS4gSWYgeW91IGNvbWJpbmUgYCFgIGFuZCBgXmAsIGAhYCBtdXN0IGJlIHNwZWNpZmllZCBmaXJzdC4KKysKK0V2ZW4gaWYgeW91IGhpZGUgcmVmcywgYSBjbGllbnQgbWF5IHN0aWxsIGJlIGFibGUgdG8gc3RlYWwgdGhlIHRhcmdldAorb2JqZWN0cyB2aWEgdGhlIHRlY2huaXF1ZXMgZGVzY3JpYmVkIGluIHRoZSAiU0VDVVJJVFkiIHNlY3Rpb24gb2YgdGhlCitsaW5rZ2l0OmdpdG5hbWVzcGFjZXNbN10gbWFuIHBhZ2U7IGl0J3MgYmVzdCB0byBrZWVwIHByaXZhdGUgZGF0YSBpbiBhCitzZXBhcmF0ZSByZXBvc2l0b3J5LgorCit0cmFuc2Zlci51bnBhY2tMaW1pdDo6CisJV2hlbiBgZmV0Y2gudW5wYWNrTGltaXRgIG9yIGByZWNlaXZlLnVucGFja0xpbWl0YCBhcmUKKwlub3Qgc2V0LCB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluc3RlYWQuCisJVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvdXBsb2FkYXJjaGl2ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy91cGxvYWRhcmNoaXZlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDY5OGU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvdXBsb2FkYXJjaGl2ZS50eHQKQEAgLTAsMCArMSw2IEBACit1cGxvYWRhcmNoaXZlLmFsbG93VW5yZWFjaGFibGU6OgorCUlmIHRydWUsIGFsbG93IGNsaWVudHMgdG8gdXNlIGBnaXQgYXJjaGl2ZSAtLXJlbW90ZWAgdG8gcmVxdWVzdAorCWFueSB0cmVlLCB3aGV0aGVyIHJlYWNoYWJsZSBmcm9tIHRoZSByZWYgdGlwcyBvciBub3QuIFNlZSB0aGUKKwlkaXNjdXNzaW9uIGluIHRoZSAiU0VDVVJJVFkiIHNlY3Rpb24gb2YKKwlsaW5rZ2l0OmdpdC11cGxvYWQtYXJjaGl2ZVsxXSBmb3IgbW9yZSBkZXRhaWxzLiBEZWZhdWx0cyB0bworCWBmYWxzZWAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy91cGxvYWRwYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3VwbG9hZHBhY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMWM4MzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy91cGxvYWRwYWNrLnR4dApAQCAtMCwwICsxLDY1IEBACit1cGxvYWRwYWNrLmhpZGVSZWZzOjoKKwlUaGlzIHZhcmlhYmxlIGlzIHRoZSBzYW1lIGFzIGB0cmFuc2Zlci5oaWRlUmVmc2AsIGJ1dCBhcHBsaWVzCisJb25seSB0byBgdXBsb2FkLXBhY2tgIChhbmQgc28gYWZmZWN0cyBvbmx5IGZldGNoZXMsIG5vdCBwdXNoZXMpLgorCUFuIGF0dGVtcHQgdG8gZmV0Y2ggYSBoaWRkZW4gcmVmIGJ5IGBnaXQgZmV0Y2hgIHdpbGwgZmFpbC4gIFNlZQorCWFsc28gYHVwbG9hZHBhY2suYWxsb3dUaXBTSEExSW5XYW50YC4KKwordXBsb2FkcGFjay5hbGxvd1RpcFNIQTFJbldhbnQ6OgorCVdoZW4gYHVwbG9hZHBhY2suaGlkZVJlZnNgIGlzIGluIGVmZmVjdCwgYWxsb3cgYHVwbG9hZC1wYWNrYAorCXRvIGFjY2VwdCBhIGZldGNoIHJlcXVlc3QgdGhhdCBhc2tzIGZvciBhbiBvYmplY3QgYXQgdGhlIHRpcAorCW9mIGEgaGlkZGVuIHJlZiAoYnkgZGVmYXVsdCwgc3VjaCBhIHJlcXVlc3QgaXMgcmVqZWN0ZWQpLgorCVNlZSBhbHNvIGB1cGxvYWRwYWNrLmhpZGVSZWZzYC4gIEV2ZW4gaWYgdGhpcyBpcyBmYWxzZSwgYSBjbGllbnQKKwltYXkgYmUgYWJsZSB0byBzdGVhbCBvYmplY3RzIHZpYSB0aGUgdGVjaG5pcXVlcyBkZXNjcmliZWQgaW4gdGhlCisJIlNFQ1VSSVRZIiBzZWN0aW9uIG9mIHRoZSBsaW5rZ2l0OmdpdG5hbWVzcGFjZXNbN10gbWFuIHBhZ2U7IGl0J3MKKwliZXN0IHRvIGtlZXAgcHJpdmF0ZSBkYXRhIGluIGEgc2VwYXJhdGUgcmVwb3NpdG9yeS4KKwordXBsb2FkcGFjay5hbGxvd1JlYWNoYWJsZVNIQTFJbldhbnQ6OgorCUFsbG93IGB1cGxvYWQtcGFja2AgdG8gYWNjZXB0IGEgZmV0Y2ggcmVxdWVzdCB0aGF0IGFza3MgZm9yIGFuCisJb2JqZWN0IHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYW55IHJlZiB0aXAuIEhvd2V2ZXIsIG5vdGUgdGhhdAorCWNhbGN1bGF0aW5nIG9iamVjdCByZWFjaGFiaWxpdHkgaXMgY29tcHV0YXRpb25hbGx5IGV4cGVuc2l2ZS4KKwlEZWZhdWx0cyB0byBgZmFsc2VgLiAgRXZlbiBpZiB0aGlzIGlzIGZhbHNlLCBhIGNsaWVudCBtYXkgYmUgYWJsZQorCXRvIHN0ZWFsIG9iamVjdHMgdmlhIHRoZSB0ZWNobmlxdWVzIGRlc2NyaWJlZCBpbiB0aGUgIlNFQ1VSSVRZIgorCXNlY3Rpb24gb2YgdGhlIGxpbmtnaXQ6Z2l0bmFtZXNwYWNlc1s3XSBtYW4gcGFnZTsgaXQncyBiZXN0IHRvCisJa2VlcCBwcml2YXRlIGRhdGEgaW4gYSBzZXBhcmF0ZSByZXBvc2l0b3J5LgorCit1cGxvYWRwYWNrLmFsbG93QW55U0hBMUluV2FudDo6CisJQWxsb3cgYHVwbG9hZC1wYWNrYCB0byBhY2NlcHQgYSBmZXRjaCByZXF1ZXN0IHRoYXQgYXNrcyBmb3IgYW55CisJb2JqZWN0IGF0IGFsbC4KKwlEZWZhdWx0cyB0byBgZmFsc2VgLgorCit1cGxvYWRwYWNrLmtlZXBBbGl2ZTo6CisJV2hlbiBgdXBsb2FkLXBhY2tgIGhhcyBzdGFydGVkIGBwYWNrLW9iamVjdHNgLCB0aGVyZSBtYXkgYmUgYQorCXF1aWV0IHBlcmlvZCB3aGlsZSBgcGFjay1vYmplY3RzYCBwcmVwYXJlcyB0aGUgcGFjay4gTm9ybWFsbHkKKwlpdCB3b3VsZCBvdXRwdXQgcHJvZ3Jlc3MgaW5mb3JtYXRpb24sIGJ1dCBpZiBgLS1xdWlldGAgd2FzIHVzZWQKKwlmb3IgdGhlIGZldGNoLCBgcGFjay1vYmplY3RzYCB3aWxsIG91dHB1dCBub3RoaW5nIGF0IGFsbCB1bnRpbAorCXRoZSBwYWNrIGRhdGEgYmVnaW5zLiBTb21lIGNsaWVudHMgYW5kIG5ldHdvcmtzIG1heSBjb25zaWRlcgorCXRoZSBzZXJ2ZXIgdG8gYmUgaHVuZyBhbmQgZ2l2ZSB1cC4gU2V0dGluZyB0aGlzIG9wdGlvbiBpbnN0cnVjdHMKKwlgdXBsb2FkLXBhY2tgIHRvIHNlbmQgYW4gZW1wdHkga2VlcGFsaXZlIHBhY2tldCBldmVyeQorCWB1cGxvYWRwYWNrLmtlZXBBbGl2ZWAgc2Vjb25kcy4gU2V0dGluZyB0aGlzIG9wdGlvbiB0byAwCisJZGlzYWJsZXMga2VlcGFsaXZlIHBhY2tldHMgZW50aXJlbHkuIFRoZSBkZWZhdWx0IGlzIDUgc2Vjb25kcy4KKwordXBsb2FkcGFjay5wYWNrT2JqZWN0c0hvb2s6OgorCUlmIHRoaXMgb3B0aW9uIGlzIHNldCwgd2hlbiBgdXBsb2FkLXBhY2tgIHdvdWxkIHJ1bgorCWBnaXQgcGFjay1vYmplY3RzYCB0byBjcmVhdGUgYSBwYWNrZmlsZSBmb3IgYSBjbGllbnQsIGl0IHdpbGwKKwlydW4gdGhpcyBzaGVsbCBjb21tYW5kIGluc3RlYWQuICBUaGUgYHBhY2stb2JqZWN0c2AgY29tbWFuZCBhbmQKKwlhcmd1bWVudHMgaXQgX3dvdWxkXyBoYXZlIHJ1biAoaW5jbHVkaW5nIHRoZSBgZ2l0IHBhY2stb2JqZWN0c2AKKwlhdCB0aGUgYmVnaW5uaW5nKSBhcmUgYXBwZW5kZWQgdG8gdGhlIHNoZWxsIGNvbW1hbmQuIFRoZSBzdGRpbgorCWFuZCBzdGRvdXQgb2YgdGhlIGhvb2sgYXJlIHRyZWF0ZWQgYXMgaWYgYHBhY2stb2JqZWN0c2AgaXRzZWxmCisJd2FzIHJ1bi4gSS5lLiwgYHVwbG9hZC1wYWNrYCB3aWxsIGZlZWQgaW5wdXQgaW50ZW5kZWQgZm9yCisJYHBhY2stb2JqZWN0c2AgdG8gdGhlIGhvb2ssIGFuZCBleHBlY3RzIGEgY29tcGxldGVkIHBhY2tmaWxlIG9uCisJc3Rkb3V0LgorKworTm90ZSB0aGF0IHRoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBpZ25vcmVkIGlmIGl0IGlzIHNlZW4gaW4gdGhlCityZXBvc2l0b3J5LWxldmVsIGNvbmZpZyAodGhpcyBpcyBhIHNhZmV0eSBtZWFzdXJlIGFnYWluc3QgZmV0Y2hpbmcgZnJvbQordW50cnVzdGVkIHJlcG9zaXRvcmllcykuCisKK3VwbG9hZHBhY2suYWxsb3dGaWx0ZXI6OgorCUlmIHRoaXMgb3B0aW9uIGlzIHNldCwgYHVwbG9hZC1wYWNrYCB3aWxsIHN1cHBvcnQgcGFydGlhbAorCWNsb25lIGFuZCBwYXJ0aWFsIGZldGNoIG9iamVjdCBmaWx0ZXJpbmcuCisKK3VwbG9hZHBhY2suYWxsb3dSZWZJbldhbnQ6OgorCUlmIHRoaXMgb3B0aW9uIGlzIHNldCwgYHVwbG9hZC1wYWNrYCB3aWxsIHN1cHBvcnQgdGhlIGByZWYtaW4td2FudGAKKwlmZWF0dXJlIG9mIHRoZSBwcm90b2NvbCB2ZXJzaW9uIDIgYGZldGNoYCBjb21tYW5kLiAgVGhpcyBmZWF0dXJlCisJaXMgaW50ZW5kZWQgZm9yIHRoZSBiZW5lZml0IG9mIGxvYWQtYmFsYW5jZWQgc2VydmVycyB3aGljaCBtYXkKKwlub3QgaGF2ZSB0aGUgc2FtZSB2aWV3IG9mIHdoYXQgT0lEcyB0aGVpciByZWZzIHBvaW50IHRvIGR1ZSB0bworCXJlcGxpY2F0aW9uIGRlbGF5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvdXJsLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3VybC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU1NjZjMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3VybC50eHQKQEAgLTAsMCArMSwzMCBAQAordXJsLjxiYXNlPi5pbnN0ZWFkT2Y6OgorCUFueSBVUkwgdGhhdCBzdGFydHMgd2l0aCB0aGlzIHZhbHVlIHdpbGwgYmUgcmV3cml0dGVuIHRvCisJc3RhcnQsIGluc3RlYWQsIHdpdGggPGJhc2U+LiBJbiBjYXNlcyB3aGVyZSBzb21lIHNpdGUgc2VydmVzIGEKKwlsYXJnZSBudW1iZXIgb2YgcmVwb3NpdG9yaWVzLCBhbmQgc2VydmVzIHRoZW0gd2l0aCBtdWx0aXBsZQorCWFjY2VzcyBtZXRob2RzLCBhbmQgc29tZSB1c2VycyBuZWVkIHRvIHVzZSBkaWZmZXJlbnQgYWNjZXNzCisJbWV0aG9kcywgdGhpcyBmZWF0dXJlIGFsbG93cyBwZW9wbGUgdG8gc3BlY2lmeSBhbnkgb2YgdGhlCisJZXF1aXZhbGVudCBVUkxzIGFuZCBoYXZlIEdpdCBhdXRvbWF0aWNhbGx5IHJld3JpdGUgdGhlIFVSTCB0bworCXRoZSBiZXN0IGFsdGVybmF0aXZlIGZvciB0aGUgcGFydGljdWxhciB1c2VyLCBldmVuIGZvciBhCisJbmV2ZXItYmVmb3JlLXNlZW4gcmVwb3NpdG9yeSBvbiB0aGUgc2l0ZS4gIFdoZW4gbW9yZSB0aGFuIG9uZQorCWluc3RlYWRPZiBzdHJpbmdzIG1hdGNoIGEgZ2l2ZW4gVVJMLCB0aGUgbG9uZ2VzdCBtYXRjaCBpcyB1c2VkLgorKworTm90ZSB0aGF0IGFueSBwcm90b2NvbCByZXN0cmljdGlvbnMgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSByZXdyaXR0ZW4KK1VSTC4gSWYgdGhlIHJld3JpdGUgY2hhbmdlcyB0aGUgVVJMIHRvIHVzZSBhIGN1c3RvbSBwcm90b2NvbCBvciByZW1vdGUKK2hlbHBlciwgeW91IG1heSBuZWVkIHRvIGFkanVzdCB0aGUgYHByb3RvY29sLiouYWxsb3dgIGNvbmZpZyB0byBwZXJtaXQKK3RoZSByZXF1ZXN0LiAgSW4gcGFydGljdWxhciwgcHJvdG9jb2xzIHlvdSBleHBlY3QgdG8gdXNlIGZvciBzdWJtb2R1bGVzCittdXN0IGJlIHNldCB0byBgYWx3YXlzYCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBvZiBgdXNlcmAuIFNlZSB0aGUKK2Rlc2NyaXB0aW9uIG9mIGBwcm90b2NvbC5hbGxvd2AgYWJvdmUuCisKK3VybC48YmFzZT4ucHVzaEluc3RlYWRPZjo6CisJQW55IFVSTCB0aGF0IHN0YXJ0cyB3aXRoIHRoaXMgdmFsdWUgd2lsbCBub3QgYmUgcHVzaGVkIHRvOworCWluc3RlYWQsIGl0IHdpbGwgYmUgcmV3cml0dGVuIHRvIHN0YXJ0IHdpdGggPGJhc2U+LCBhbmQgdGhlCisJcmVzdWx0aW5nIFVSTCB3aWxsIGJlIHB1c2hlZCB0by4gSW4gY2FzZXMgd2hlcmUgc29tZSBzaXRlIHNlcnZlcworCWEgbGFyZ2UgbnVtYmVyIG9mIHJlcG9zaXRvcmllcywgYW5kIHNlcnZlcyB0aGVtIHdpdGggbXVsdGlwbGUKKwlhY2Nlc3MgbWV0aG9kcywgc29tZSBvZiB3aGljaCBkbyBub3QgYWxsb3cgcHVzaCwgdGhpcyBmZWF0dXJlCisJYWxsb3dzIHBlb3BsZSB0byBzcGVjaWZ5IGEgcHVsbC1vbmx5IFVSTCBhbmQgaGF2ZSBHaXQKKwlhdXRvbWF0aWNhbGx5IHVzZSBhbiBhcHByb3ByaWF0ZSBVUkwgdG8gcHVzaCwgZXZlbiBmb3IgYQorCW5ldmVyLWJlZm9yZS1zZWVuIHJlcG9zaXRvcnkgb24gdGhlIHNpdGUuICBXaGVuIG1vcmUgdGhhbiBvbmUKKwlwdXNoSW5zdGVhZE9mIHN0cmluZ3MgbWF0Y2ggYSBnaXZlbiBVUkwsIHRoZSBsb25nZXN0IG1hdGNoIGlzCisJdXNlZC4gIElmIGEgcmVtb3RlIGhhcyBhbiBleHBsaWNpdCBwdXNodXJsLCBHaXQgd2lsbCBpZ25vcmUgdGhpcworCXNldHRpbmcgZm9yIHRoYXQgcmVtb3RlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvdXNlci50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy91c2VyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWFlYzdjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvdXNlci50eHQKQEAgLTAsMCArMSwzOCBAQAordXNlci5uYW1lOjoKK3VzZXIuZW1haWw6OgorYXV0aG9yLm5hbWU6OgorYXV0aG9yLmVtYWlsOjoKK2NvbW1pdHRlci5uYW1lOjoKK2NvbW1pdHRlci5lbWFpbDo6CisJVGhlIGB1c2VyLm5hbWVgIGFuZCBgdXNlci5lbWFpbGAgdmFyaWFibGVzIGRldGVybWluZSB3aGF0IGVuZHMKKwl1cCBpbiB0aGUgYGF1dGhvcmAgYW5kIGBjb21taXR0ZXJgIGZpZWxkIG9mIGNvbW1pdAorCW9iamVjdHMuCisJSWYgeW91IG5lZWQgdGhlIGBhdXRob3JgIG9yIGBjb21taXR0ZXJgIHRvIGJlIGRpZmZlcmVudCwgdGhlCisJYGF1dGhvci5uYW1lYCwgYGF1dGhvci5lbWFpbGAsIGBjb21taXR0ZXIubmFtZWAgb3IKKwlgY29tbWl0dGVyLmVtYWlsYCB2YXJpYWJsZXMgY2FuIGJlIHNldC4KKwlBbHNvLCBhbGwgb2YgdGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfQVVUSE9SX05BTUVgLAorCWBHSVRfQVVUSE9SX0VNQUlMYCwgYEdJVF9DT01NSVRURVJfTkFNRWAsCisJYEdJVF9DT01NSVRURVJfRU1BSUxgIGFuZCBgRU1BSUxgIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKysKK05vdGUgdGhhdCB0aGUgYG5hbWVgIGZvcm1zIG9mIHRoZXNlIHZhcmlhYmxlcyBjb252ZW50aW9uYWxseSByZWZlciB0bworc29tZSBmb3JtIG9mIGEgcGVyc29uYWwgbmFtZS4gIFNlZSBsaW5rZ2l0OmdpdC1jb21taXRbMV0gYW5kIHRoZQorZW52aXJvbm1lbnQgdmFyaWFibGVzIHNlY3Rpb24gb2YgbGlua2dpdDpnaXRbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24KK3RoZXNlIHNldHRpbmdzIGFuZCB0aGUgYGNyZWRlbnRpYWwudXNlcm5hbWVgIG9wdGlvbiBpZiB5b3UncmUgbG9va2luZworZm9yIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIGluc3RlYWQuCisKK3VzZXIudXNlQ29uZmlnT25seTo6CisJSW5zdHJ1Y3QgR2l0IHRvIGF2b2lkIHRyeWluZyB0byBndWVzcyBkZWZhdWx0cyBmb3IgYHVzZXIuZW1haWxgCisJYW5kIGB1c2VyLm5hbWVgLCBhbmQgaW5zdGVhZCByZXRyaWV2ZSB0aGUgdmFsdWVzIG9ubHkgZnJvbSB0aGUKKwljb25maWd1cmF0aW9uLiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgbXVsdGlwbGUgZW1haWwgYWRkcmVzc2VzCisJYW5kIHdvdWxkIGxpa2UgdG8gdXNlIGEgZGlmZmVyZW50IG9uZSBmb3IgZWFjaCByZXBvc2l0b3J5LCB0aGVuCisJd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNldCB0byBgdHJ1ZWAgaW4gdGhlIGdsb2JhbCBjb25maWcKKwlhbG9uZyB3aXRoIGEgbmFtZSwgR2l0IHdpbGwgcHJvbXB0IHlvdSB0byBzZXQgdXAgYW4gZW1haWwgYmVmb3JlCisJbWFraW5nIG5ldyBjb21taXRzIGluIGEgbmV3bHkgY2xvbmVkIHJlcG9zaXRvcnkuCisJRGVmYXVsdHMgdG8gYGZhbHNlYC4KKwordXNlci5zaWduaW5nS2V5OjoKKwlJZiBsaW5rZ2l0OmdpdC10YWdbMV0gb3IgbGlua2dpdDpnaXQtY29tbWl0WzFdIGlzIG5vdCBzZWxlY3RpbmcgdGhlCisJa2V5IHlvdSB3YW50IGl0IHRvIGF1dG9tYXRpY2FsbHkgd2hlbiBjcmVhdGluZyBhIHNpZ25lZCB0YWcgb3IKKwljb21taXQsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIHdpdGggdGhpcyB2YXJpYWJsZS4KKwlUaGlzIG9wdGlvbiBpcyBwYXNzZWQgdW5jaGFuZ2VkIHRvIGdwZydzIC0tbG9jYWwtdXNlciBwYXJhbWV0ZXIsCisJc28geW91IG1heSBzcGVjaWZ5IGEga2V5IHVzaW5nIGFueSBtZXRob2QgdGhhdCBncGcgc3VwcG9ydHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy92ZXJzaW9uc29ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy92ZXJzaW9uc29ydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM3Y2MwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3ZlcnNpb25zb3J0LnR4dApAQCAtMCwwICsxLDMzIEBACit2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IChkZXByZWNhdGVkKTo6CisJRGVwcmVjYXRlZCBhbGlhcyBmb3IgYHZlcnNpb25zb3J0LnN1ZmZpeGAuICBJZ25vcmVkIGlmCisJYHZlcnNpb25zb3J0LnN1ZmZpeGAgaXMgc2V0LgorCit2ZXJzaW9uc29ydC5zdWZmaXg6OgorCUV2ZW4gd2hlbiB2ZXJzaW9uIHNvcnQgaXMgdXNlZCBpbiBsaW5rZ2l0OmdpdC10YWdbMV0sIHRhZ25hbWVzCisJd2l0aCB0aGUgc2FtZSBiYXNlIHZlcnNpb24gYnV0IGRpZmZlcmVudCBzdWZmaXhlcyBhcmUgc3RpbGwgc29ydGVkCisJbGV4aWNvZ3JhcGhpY2FsbHksIHJlc3VsdGluZyBlLmcuIGluIHByZXJlbGVhc2UgdGFncyBhcHBlYXJpbmcKKwlhZnRlciB0aGUgbWFpbiByZWxlYXNlIChlLmcuICIxLjAtcmMxIiBhZnRlciAiMS4wIikuICBUaGlzCisJdmFyaWFibGUgY2FuIGJlIHNwZWNpZmllZCB0byBkZXRlcm1pbmUgdGhlIHNvcnRpbmcgb3JkZXIgb2YgdGFncworCXdpdGggZGlmZmVyZW50IHN1ZmZpeGVzLgorKworQnkgc3BlY2lmeWluZyBhIHNpbmdsZSBzdWZmaXggaW4gdGhpcyB2YXJpYWJsZSwgYW55IHRhZ25hbWUgY29udGFpbmluZwordGhhdCBzdWZmaXggd2lsbCBhcHBlYXIgYmVmb3JlIHRoZSBjb3JyZXNwb25kaW5nIG1haW4gcmVsZWFzZS4gIEUuZy4gaWYKK3RoZSB2YXJpYWJsZSBpcyBzZXQgdG8gIi1yYyIsIHRoZW4gYWxsICIxLjAtcmNYIiB0YWdzIHdpbGwgYXBwZWFyIGJlZm9yZQorIjEuMCIuICBJZiBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMsIG9uY2UgcGVyIHN1ZmZpeCwgdGhlbiB0aGUgb3JkZXIgb2YKK3N1ZmZpeGVzIGluIHRoZSBjb25maWd1cmF0aW9uIHdpbGwgZGV0ZXJtaW5lIHRoZSBzb3J0aW5nIG9yZGVyIG9mIHRhZ25hbWVzCit3aXRoIHRob3NlIHN1ZmZpeGVzLiAgRS5nLiBpZiAiLXByZSIgYXBwZWFycyBiZWZvcmUgIi1yYyIgaW4gdGhlCitjb25maWd1cmF0aW9uLCB0aGVuIGFsbCAiMS4wLXByZVgiIHRhZ3Mgd2lsbCBiZSBsaXN0ZWQgYmVmb3JlIGFueQorIjEuMC1yY1giIHRhZ3MuICBUaGUgcGxhY2VtZW50IG9mIHRoZSBtYWluIHJlbGVhc2UgdGFnIHJlbGF0aXZlIHRvIHRhZ3MKK3dpdGggdmFyaW91cyBzdWZmaXhlcyBjYW4gYmUgZGV0ZXJtaW5lZCBieSBzcGVjaWZ5aW5nIHRoZSBlbXB0eSBzdWZmaXgKK2Ftb25nIHRob3NlIG90aGVyIHN1ZmZpeGVzLiAgRS5nLiBpZiB0aGUgc3VmZml4ZXMgIi1yYyIsICIiLCAiLWNrIiBhbmQKKyItYmZzIiBhcHBlYXIgaW4gdGhlIGNvbmZpZ3VyYXRpb24gaW4gdGhpcyBvcmRlciwgdGhlbiBhbGwgInY0LjgtcmNYIiB0YWdzCithcmUgbGlzdGVkIGZpcnN0LCBmb2xsb3dlZCBieSAidjQuOCIsIHRoZW4gInY0LjgtY2tYIiBhbmQgZmluYWxseQorInY0LjgtYmZzWCIuCisrCitJZiBtb3JlIHRoYW4gb25lIHN1ZmZpeGVzIG1hdGNoIHRoZSBzYW1lIHRhZ25hbWUsIHRoZW4gdGhhdCB0YWduYW1lIHdpbGwKK2JlIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlIHN1ZmZpeCB3aGljaCBzdGFydHMgYXQgdGhlIGVhcmxpZXN0IHBvc2l0aW9uIGluCit0aGUgdGFnbmFtZS4gIElmIG1vcmUgdGhhbiBvbmUgZGlmZmVyZW50IG1hdGNoaW5nIHN1ZmZpeGVzIHN0YXJ0IGF0Cit0aGF0IGVhcmxpZXN0IHBvc2l0aW9uLCB0aGVuIHRoYXQgdGFnbmFtZSB3aWxsIGJlIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlCitsb25nZXN0IG9mIHRob3NlIHN1ZmZpeGVzLgorVGhlIHNvcnRpbmcgb3JkZXIgYmV0d2VlbiBkaWZmZXJlbnQgc3VmZml4ZXMgaXMgdW5kZWZpbmVkIGlmIHRoZXkgYXJlCitpbiBtdWx0aXBsZSBjb25maWcgZmlsZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy93ZWIudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvd2ViLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWVjOGQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvd2ViLnR4dApAQCAtMCwwICsxLDQgQEAKK3dlYi5icm93c2VyOjoKKwlTcGVjaWZ5IGEgd2ViIGJyb3dzZXIgdGhhdCBtYXkgYmUgdXNlZCBieSBzb21lIGNvbW1hbmRzLgorCUN1cnJlbnRseSBvbmx5IGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdIGFuZCBsaW5rZ2l0OmdpdC1oZWxwWzFdCisJbWF5IHVzZSBpdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3dvcmt0cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3dvcmt0cmVlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDhlMzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvd29ya3RyZWUudHh0CkBAIC0wLDAgKzEsOSBAQAord29ya3RyZWUuZ3Vlc3NSZW1vdGU6OgorCUlmIG5vIGJyYW5jaCBpcyBzcGVjaWZpZWQgYW5kIG5laXRoZXIgYC1iYCBub3IgYC1CYCBub3IKKwlgLS1kZXRhY2hgIGlzIHVzZWQsIHRoZW4gYGdpdCB3b3JrdHJlZSBhZGRgIGRlZmF1bHRzIHRvCisJY3JlYXRpbmcgYSBuZXcgYnJhbmNoIGZyb20gSEVBRC4gIElmIGB3b3JrdHJlZS5ndWVzc1JlbW90ZWAgaXMKKwlzZXQgdG8gdHJ1ZSwgYHdvcmt0cmVlIGFkZGAgdHJpZXMgdG8gZmluZCBhIHJlbW90ZS10cmFja2luZworCWJyYW5jaCB3aG9zZSBuYW1lIHVuaXF1ZWx5IG1hdGNoZXMgdGhlIG5ldyBicmFuY2ggbmFtZS4gIElmCisJc3VjaCBhIGJyYW5jaCBleGlzdHMsIGl0IGlzIGNoZWNrZWQgb3V0IGFuZCBzZXQgYXMgInVwc3RyZWFtIgorCWZvciB0aGUgbmV3IGJyYW5jaC4gIElmIG5vIHN1Y2ggbWF0Y2ggY2FuIGJlIGZvdW5kLCBpdCBmYWxscworCWJhY2sgdG8gY3JlYXRpbmcgYSBuZXcgYnJhbmNoIGZyb20gdGhlIGN1cnJlbnQgSEVBRC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGF0ZS1mb3JtYXRzLnR4dCBiL0RvY3VtZW50YXRpb24vZGF0ZS1mb3JtYXRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTdlYWJhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kYXRlLWZvcm1hdHMudHh0CkBAIC0wLDAgKzEsMjkgQEAKK0RBVEUgRk9STUFUUworLS0tLS0tLS0tLS0tCisKK1RoZSBgR0lUX0FVVEhPUl9EQVRFYCwgYEdJVF9DT01NSVRURVJfREFURWAgZW52aXJvbm1lbnQgdmFyaWFibGVzCitpZmRlZjo6Z2l0LWNvbW1pdFtdCithbmQgdGhlIGAtLWRhdGVgIG9wdGlvbgorZW5kaWY6OmdpdC1jb21taXRbXQorc3VwcG9ydCB0aGUgZm9sbG93aW5nIGRhdGUgZm9ybWF0czoKKworR2l0IGludGVybmFsIGZvcm1hdDo6CisJSXQgaXMgYDx1bml4IHRpbWVzdGFtcD4gPHRpbWUgem9uZSBvZmZzZXQ+YCwgd2hlcmUgYDx1bml4CisJdGltZXN0YW1wPmAgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoLgorCWA8dGltZSB6b25lIG9mZnNldD5gIGlzIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgb2Zmc2V0IGZyb20gVVRDLgorCUZvciBleGFtcGxlIENFVCAod2hpY2ggaXMgMSBob3VyIGFoZWFkIG9mIFVUQykgaXMgYCswMTAwYC4KKworUkZDIDI4MjI6OgorCVRoZSBzdGFuZGFyZCBlbWFpbCBmb3JtYXQgYXMgZGVzY3JpYmVkIGJ5IFJGQyAyODIyLCBmb3IgZXhhbXBsZQorCWBUaHUsIDA3IEFwciAyMDA1IDIyOjEzOjEzICswMjAwYC4KKworSVNPIDg2MDE6OgorCVRpbWUgYW5kIGRhdGUgc3BlY2lmaWVkIGJ5IHRoZSBJU08gODYwMSBzdGFuZGFyZCwgZm9yIGV4YW1wbGUKKwlgMjAwNS0wNC0wN1QyMjoxMzoxM2AuIFRoZSBwYXJzZXIgYWNjZXB0cyBhIHNwYWNlIGluc3RlYWQgb2YgdGhlCisJYFRgIGNoYXJhY3RlciBhcyB3ZWxsLiBGcmFjdGlvbmFsIHBhcnRzIG9mIGEgc2Vjb25kIHdpbGwgYmUgaWdub3JlZCwKKwlmb3IgZXhhbXBsZSBgMjAwNS0wNC0wN1QyMjoxMzoxMy4wMTlgIHdpbGwgYmUgdHJlYXRlZCBhcworCWAyMDA1LTA0LTA3VDIyOjEzOjEzYAorCisrCitOT1RFOiBJbiBhZGRpdGlvbiwgdGhlIGRhdGUgcGFydCBpcyBhY2NlcHRlZCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6CitgWVlZWS5NTS5ERGAsIGBNTS9ERC9ZWVlZYCBhbmQgYERELk1NLllZWVlgLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmJkNDEwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKQEAgLTAsMCArMSwxODUgQEAKK1JhdyBvdXRwdXQgZm9ybWF0CistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcmF3IG91dHB1dCBmb3JtYXQgZnJvbSAiZ2l0LWRpZmYtaW5kZXgiLCAiZ2l0LWRpZmYtdHJlZSIsCisiZ2l0LWRpZmYtZmlsZXMiIGFuZCAiZ2l0IGRpZmYgLS1yYXciIGFyZSB2ZXJ5IHNpbWlsYXIuCisKK1RoZXNlIGNvbW1hbmRzIGFsbCBjb21wYXJlIHR3byBzZXRzIG9mIHRoaW5nczsgd2hhdCBpcworY29tcGFyZWQgZGlmZmVyczoKKworZ2l0LWRpZmYtaW5kZXggPHRyZWUtaXNoPjo6CisgICAgICAgIGNvbXBhcmVzIHRoZSA8dHJlZS1pc2g+IGFuZCB0aGUgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0uCisKK2dpdC1kaWZmLWluZGV4IC0tY2FjaGVkIDx0cmVlLWlzaD46OgorICAgICAgICBjb21wYXJlcyB0aGUgPHRyZWUtaXNoPiBhbmQgdGhlIGluZGV4LgorCitnaXQtZGlmZi10cmVlIFstcl0gPHRyZWUtaXNoLTE+IDx0cmVlLWlzaC0yPiBbPHBhdHRlcm4+Li4uXTo6CisgICAgICAgIGNvbXBhcmVzIHRoZSB0cmVlcyBuYW1lZCBieSB0aGUgdHdvIGFyZ3VtZW50cy4KKworZ2l0LWRpZmYtZmlsZXMgWzxwYXR0ZXJuPi4uLl06OgorICAgICAgICBjb21wYXJlcyB0aGUgaW5kZXggYW5kIHRoZSBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbS4KKworVGhlICJnaXQtZGlmZi10cmVlIiBjb21tYW5kIGJlZ2lucyBpdHMgb3V0cHV0IGJ5IHByaW50aW5nIHRoZSBoYXNoIG9mCit3aGF0IGlzIGJlaW5nIGNvbXBhcmVkLiBBZnRlciB0aGF0LCBhbGwgdGhlIGNvbW1hbmRzIHByaW50IG9uZSBvdXRwdXQKK2xpbmUgcGVyIGNoYW5nZWQgZmlsZS4KKworQW4gb3V0cHV0IGxpbmUgaXMgZm9ybWF0dGVkIHRoaXMgd2F5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luLXBsYWNlIGVkaXQgIDoxMDA2NDQgMTAwNjQ0IGJjZDEyMzQgMDEyMzQ1NiBNIGZpbGUwCitjb3B5LWVkaXQgICAgICA6MTAwNjQ0IDEwMDY0NCBhYmNkMTIzIDEyMzQ1NjcgQzY4IGZpbGUxIGZpbGUyCityZW5hbWUtZWRpdCAgICA6MTAwNjQ0IDEwMDY0NCBhYmNkMTIzIDEyMzQ1NjcgUjg2IGZpbGUxIGZpbGUzCitjcmVhdGUgICAgICAgICA6MDAwMDAwIDEwMDY0NCAwMDAwMDAwIDEyMzQ1NjcgQSBmaWxlNAorZGVsZXRlICAgICAgICAgOjEwMDY0NCAwMDAwMDAgMTIzNDU2NyAwMDAwMDAwIEQgZmlsZTUKK3VubWVyZ2VkICAgICAgIDowMDAwMDAgMDAwMDAwIDAwMDAwMDAgMDAwMDAwMCBVIGZpbGU2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhhdCBpcywgZnJvbSB0aGUgbGVmdCB0byB0aGUgcmlnaHQ6CisKKy4gYSBjb2xvbi4KKy4gbW9kZSBmb3IgInNyYyI7IDAwMDAwMCBpZiBjcmVhdGlvbiBvciB1bm1lcmdlZC4KKy4gYSBzcGFjZS4KKy4gbW9kZSBmb3IgImRzdCI7IDAwMDAwMCBpZiBkZWxldGlvbiBvciB1bm1lcmdlZC4KKy4gYSBzcGFjZS4KKy4gc2hhMSBmb3IgInNyYyI7IDBcezQwXH0gaWYgY3JlYXRpb24gb3IgdW5tZXJnZWQuCisuIGEgc3BhY2UuCisuIHNoYTEgZm9yICJkc3QiOyAwXHs0MFx9IGlmIGNyZWF0aW9uLCB1bm1lcmdlZCBvciAibG9vayBhdCB3b3JrIHRyZWUiLgorLiBhIHNwYWNlLgorLiBzdGF0dXMsIGZvbGxvd2VkIGJ5IG9wdGlvbmFsICJzY29yZSIgbnVtYmVyLgorLiBhIHRhYiBvciBhIE5VTCB3aGVuIGAtemAgb3B0aW9uIGlzIHVzZWQuCisuIHBhdGggZm9yICJzcmMiCisuIGEgdGFiIG9yIGEgTlVMIHdoZW4gYC16YCBvcHRpb24gaXMgdXNlZDsgb25seSBleGlzdHMgZm9yIEMgb3IgUi4KKy4gcGF0aCBmb3IgImRzdCI7IG9ubHkgZXhpc3RzIGZvciBDIG9yIFIuCisuIGFuIExGIG9yIGEgTlVMIHdoZW4gYC16YCBvcHRpb24gaXMgdXNlZCwgdG8gdGVybWluYXRlIHRoZSByZWNvcmQuCisKK1Bvc3NpYmxlIHN0YXR1cyBsZXR0ZXJzIGFyZToKKworLSBBOiBhZGRpdGlvbiBvZiBhIGZpbGUKKy0gQzogY29weSBvZiBhIGZpbGUgaW50byBhIG5ldyBvbmUKKy0gRDogZGVsZXRpb24gb2YgYSBmaWxlCistIE06IG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGVudHMgb3IgbW9kZSBvZiBhIGZpbGUKKy0gUjogcmVuYW1pbmcgb2YgYSBmaWxlCistIFQ6IGNoYW5nZSBpbiB0aGUgdHlwZSBvZiB0aGUgZmlsZQorLSBVOiBmaWxlIGlzIHVubWVyZ2VkICh5b3UgbXVzdCBjb21wbGV0ZSB0aGUgbWVyZ2UgYmVmb3JlIGl0IGNhbgorICBiZSBjb21taXR0ZWQpCistIFg6ICJ1bmtub3duIiBjaGFuZ2UgdHlwZSAobW9zdCBwcm9iYWJseSBhIGJ1ZywgcGxlYXNlIHJlcG9ydCBpdCkKKworU3RhdHVzIGxldHRlcnMgQyBhbmQgUiBhcmUgYWx3YXlzIGZvbGxvd2VkIGJ5IGEgc2NvcmUgKGRlbm90aW5nIHRoZQorcGVyY2VudGFnZSBvZiBzaW1pbGFyaXR5IGJldHdlZW4gdGhlIHNvdXJjZSBhbmQgdGFyZ2V0IG9mIHRoZSBtb3ZlIG9yCitjb3B5KS4gIFN0YXR1cyBsZXR0ZXIgTSBtYXkgYmUgZm9sbG93ZWQgYnkgYSBzY29yZSAoZGVub3RpbmcgdGhlCitwZXJjZW50YWdlIG9mIGRpc3NpbWlsYXJpdHkpIGZvciBmaWxlIHJld3JpdGVzLgorCis8c2hhMT4gaXMgc2hvd24gYXMgYWxsIDAncyBpZiBhIGZpbGUgaXMgbmV3IG9uIHRoZSBmaWxlc3lzdGVtCithbmQgaXQgaXMgb3V0IG9mIHN5bmMgd2l0aCB0aGUgaW5kZXguCisKK0V4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOjEwMDY0NCAxMDA2NDQgNWJlNGE0YSAwMDAwMDAwIE0gZmlsZS5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aG91dCB0aGUgYC16YCBvcHRpb24sIHBhdGhuYW1lcyB3aXRoICJ1bnVzdWFsIiBjaGFyYWN0ZXJzIGFyZQorcXVvdGVkIGFzIGV4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYAorKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLiAgVXNpbmcgYC16YCB0aGUgZmlsZW5hbWUgaXMgb3V0cHV0Cit2ZXJiYXRpbSBhbmQgdGhlIGxpbmUgaXMgdGVybWluYXRlZCBieSBhIE5VTCBieXRlLgorCitkaWZmIGZvcm1hdCBmb3IgbWVyZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyJnaXQtZGlmZi10cmVlIiwgImdpdC1kaWZmLWZpbGVzIiBhbmQgImdpdC1kaWZmIC0tcmF3IgorY2FuIHRha2UgYC1jYCBvciBgLS1jY2Agb3B0aW9uCit0byBnZW5lcmF0ZSBkaWZmIG91dHB1dCBhbHNvIGZvciBtZXJnZSBjb21taXRzLiAgVGhlIG91dHB1dCBkaWZmZXJzCitmcm9tIHRoZSBmb3JtYXQgZGVzY3JpYmVkIGFib3ZlIGluIHRoZSBmb2xsb3dpbmcgd2F5OgorCisuIHRoZXJlIGlzIGEgY29sb24gZm9yIGVhY2ggcGFyZW50CisuIHRoZXJlIGFyZSBtb3JlICJzcmMiIG1vZGVzIGFuZCAic3JjIiBzaGExCisuIHN0YXR1cyBpcyBjb25jYXRlbmF0ZWQgc3RhdHVzIGNoYXJhY3RlcnMgZm9yIGVhY2ggcGFyZW50CisuIG5vIG9wdGlvbmFsICJzY29yZSIgbnVtYmVyCisuIHRhYi1zZXBhcmF0ZWQgcGF0aG5hbWUocykgb2YgdGhlIGZpbGUKKworRm9yIGAtY2AgYW5kIGAtLWNjYCwgb25seSB0aGUgZGVzdGluYXRpb24gb3IgZmluYWwgcGF0aCBpcyBzaG93biBldmVuCitpZiB0aGUgZmlsZSB3YXMgcmVuYW1lZCBvbiBhbnkgc2lkZSBvZiBoaXN0b3J5LiAgV2l0aAorYC0tY29tYmluZWQtYWxsLXBhdGhzYCwgdGhlIG5hbWUgb2YgdGhlIHBhdGggaW4gZWFjaCBwYXJlbnQgaXMgc2hvd24KK2ZvbGxvd2VkIGJ5IHRoZSBuYW1lIG9mIHRoZSBwYXRoIGluIHRoZSBtZXJnZSBjb21taXQuCisKK0V4YW1wbGVzIGZvciBgLWNgIGFuZCBgLS1jY2Agd2l0aG91dCBgLS1jb21iaW5lZC1hbGwtcGF0aHNgOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis6OjEwMDY0NCAxMDA2NDQgMTAwNjQ0IGZhYmFkYjggY2M5NWViMCA0ODY2NTEwIE1NCWRlc2MuYworOjoxMDA3NTUgMTAwNzU1IDEwMDc1NSA1MmI3YTJkIDZkMWFjMDQgZDJhYzdkNyBSTQliYXIuc2gKKzo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgZTA3ZDZjNSA5MDQyZTgyIGVlOTE4ODEgUlIJcGhvb2V5LmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFeGFtcGxlcyB3aGVuIGAtLWNvbWJpbmVkLWFsbC1wYXRoc2AgYWRkZWQgdG8gZWl0aGVyIGAtY2Agb3IgYC0tY2NgOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgZmFiYWRiOCBjYzk1ZWIwIDQ4NjY1MTAgTU0JZGVzYy5jCWRlc2MuYwlkZXNjLmMKKzo6MTAwNzU1IDEwMDc1NSAxMDA3NTUgNTJiN2EyZCA2ZDFhYzA0IGQyYWM3ZDcgUk0JZm9vLnNoCWJhci5zaAliYXIuc2gKKzo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgZTA3ZDZjNSA5MDQyZTgyIGVlOTE4ODEgUlIJZm9vZXkuYwlmdWV5LmMJcGhvb2V5LmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgJ2NvbWJpbmVkIGRpZmYnIGxpc3RzIG9ubHkgZmlsZXMgd2hpY2ggd2VyZSBtb2RpZmllZCBmcm9tCithbGwgcGFyZW50cy4KKworCitpbmNsdWRlOjpkaWZmLWdlbmVyYXRlLXBhdGNoLnR4dFtdCisKKworb3RoZXIgZGlmZiBmb3JtYXRzCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGAtLXN1bW1hcnlgIG9wdGlvbiBkZXNjcmliZXMgbmV3bHkgYWRkZWQsIGRlbGV0ZWQsIHJlbmFtZWQgYW5kCitjb3BpZWQgZmlsZXMuICBUaGUgYC0tc3RhdGAgb3B0aW9uIGFkZHMgZGlmZnN0YXQoMSkgZ3JhcGggdG8gdGhlCitvdXRwdXQuICBUaGVzZSBvcHRpb25zIGNhbiBiZSBjb21iaW5lZCB3aXRoIG90aGVyIG9wdGlvbnMsIHN1Y2ggYXMKK2AtcGAsIGFuZCBhcmUgbWVhbnQgZm9yIGh1bWFuIGNvbnN1bXB0aW9uLgorCitXaGVuIHNob3dpbmcgYSBjaGFuZ2UgdGhhdCBpbnZvbHZlcyBhIHJlbmFtZSBvciBhIGNvcHksIGAtLXN0YXRgIG91dHB1dAorZm9ybWF0cyB0aGUgcGF0aG5hbWVzIGNvbXBhY3RseSBieSBjb21iaW5pbmcgY29tbW9uIHByZWZpeCBhbmQgc3VmZml4IG9mCit0aGUgcGF0aG5hbWVzLiAgRm9yIGV4YW1wbGUsIGEgY2hhbmdlIHRoYXQgbW92ZXMgYGFyY2gvaTM4Ni9NYWtlZmlsZWAgdG8KK2BhcmNoL3g4Ni9NYWtlZmlsZWAgd2hpbGUgbW9kaWZ5aW5nIDQgbGluZXMgd2lsbCBiZSBzaG93biBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXJjaC97aTM4NiA9PiB4ODZ9L01ha2VmaWxlICAgIHwgICA0ICstLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBgLS1udW1zdGF0YCBvcHRpb24gZ2l2ZXMgdGhlIGRpZmZzdGF0KDEpIGluZm9ybWF0aW9uIGJ1dCBpcyBkZXNpZ25lZAorZm9yIGVhc2llciBtYWNoaW5lIGNvbnN1bXB0aW9uLiAgQW4gZW50cnkgaW4gYC0tbnVtc3RhdGAgb3V0cHV0IGxvb2tzCitsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEJMglSRUFETUUKKzMJMQlhcmNoL3tpMzg2ID0+IHg4Nn0vTWFrZWZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhhdCBpcywgZnJvbSBsZWZ0IHRvIHJpZ2h0OgorCisuIHRoZSBudW1iZXIgb2YgYWRkZWQgbGluZXM7CisuIGEgdGFiOworLiB0aGUgbnVtYmVyIG9mIGRlbGV0ZWQgbGluZXM7CisuIGEgdGFiOworLiBwYXRobmFtZSAocG9zc2libHkgd2l0aCByZW5hbWUvY29weSBpbmZvcm1hdGlvbik7CisuIGEgbmV3bGluZS4KKworV2hlbiBgLXpgIG91dHB1dCBvcHRpb24gaXMgaW4gZWZmZWN0LCB0aGUgb3V0cHV0IGlzIGZvcm1hdHRlZCB0aGlzIHdheToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMQkyCVJFQURNRSBOVUwKKzMJMQlOVUwgYXJjaC9pMzg2L01ha2VmaWxlIE5VTCBhcmNoL3g4Ni9NYWtlZmlsZSBOVUwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhhdCBpczoKKworLiB0aGUgbnVtYmVyIG9mIGFkZGVkIGxpbmVzOworLiBhIHRhYjsKKy4gdGhlIG51bWJlciBvZiBkZWxldGVkIGxpbmVzOworLiBhIHRhYjsKKy4gYSBOVUwgKG9ubHkgZXhpc3RzIGlmIHJlbmFtZWQvY29waWVkKTsKKy4gcGF0aG5hbWUgaW4gcHJlaW1hZ2U7CisuIGEgTlVMIChvbmx5IGV4aXN0cyBpZiByZW5hbWVkL2NvcGllZCk7CisuIHBhdGhuYW1lIGluIHBvc3RpbWFnZSAob25seSBleGlzdHMgaWYgcmVuYW1lZC9jb3BpZWQpOworLiBhIE5VTC4KKworVGhlIGV4dHJhIGBOVUxgIGJlZm9yZSB0aGUgcHJlaW1hZ2UgcGF0aCBpbiByZW5hbWVkIGNhc2UgaXMgdG8gYWxsb3cKK3NjcmlwdHMgdGhhdCByZWFkIHRoZSBvdXRwdXQgdG8gdGVsbCBpZiB0aGUgY3VycmVudCByZWNvcmQgYmVpbmcgcmVhZCBpcworYSBzaW5nbGUtcGF0aCByZWNvcmQgb3IgYSByZW5hbWUvY29weSByZWNvcmQgd2l0aG91dCByZWFkaW5nIGFoZWFkLgorQWZ0ZXIgcmVhZGluZyBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcywgcmVhZGluZyB1cCB0byBgTlVMYCB3b3VsZCB5aWVsZAordGhlIHBhdGhuYW1lLCBidXQgaWYgdGhhdCBpcyBgTlVMYCwgdGhlIHJlY29yZCB3aWxsIHNob3cgdHdvIHBhdGhzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kaWZmLWdlbmVyYXRlLXBhdGNoLnR4dCBiL0RvY3VtZW50YXRpb24vZGlmZi1nZW5lcmF0ZS1wYXRjaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlZDY0NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1nZW5lcmF0ZS1wYXRjaC50eHQKQEAgLTAsMCArMSwyMDEgQEAKK0dlbmVyYXRpbmcgcGF0Y2ggdGV4dCB3aXRoIC1wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSdW5uaW5nCitsaW5rZ2l0OmdpdC1kaWZmWzFdLAorbGlua2dpdDpnaXQtbG9nWzFdLAorbGlua2dpdDpnaXQtc2hvd1sxXSwKK2xpbmtnaXQ6Z2l0LWRpZmYtaW5kZXhbMV0sCitsaW5rZ2l0OmdpdC1kaWZmLXRyZWVbMV0sIG9yCitsaW5rZ2l0OmdpdC1kaWZmLWZpbGVzWzFdCit3aXRoIHRoZSBgLXBgIG9wdGlvbiBwcm9kdWNlcyBwYXRjaCB0ZXh0LgorWW91IGNhbiBjdXN0b21pemUgdGhlIGNyZWF0aW9uIG9mIHBhdGNoIHRleHQgdmlhIHRoZQorYEdJVF9FWFRFUk5BTF9ESUZGYCBhbmQgdGhlIGBHSVRfRElGRl9PUFRTYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKK1doYXQgdGhlIC1wIG9wdGlvbiBwcm9kdWNlcyBpcyBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSB0aGUgdHJhZGl0aW9uYWwKK2RpZmYgZm9ybWF0OgorCisxLiAgIEl0IGlzIHByZWNlZGVkIHdpdGggYSAiZ2l0IGRpZmYiIGhlYWRlciB0aGF0IGxvb2tzIGxpa2UgdGhpczoKKworICAgICAgIGRpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUyCisrCitUaGUgYGEvYCBhbmQgYGIvYCBmaWxlbmFtZXMgYXJlIHRoZSBzYW1lIHVubGVzcyByZW5hbWUvY29weSBpcworaW52b2x2ZWQuICBFc3BlY2lhbGx5LCBldmVuIGZvciBhIGNyZWF0aW9uIG9yIGEgZGVsZXRpb24sCitgL2Rldi9udWxsYCBpcyBfbm90XyB1c2VkIGluIHBsYWNlIG9mIHRoZSBgYS9gIG9yIGBiL2AgZmlsZW5hbWVzLgorKworV2hlbiByZW5hbWUvY29weSBpcyBpbnZvbHZlZCwgYGZpbGUxYCBhbmQgYGZpbGUyYCBzaG93IHRoZQorbmFtZSBvZiB0aGUgc291cmNlIGZpbGUgb2YgdGhlIHJlbmFtZS9jb3B5IGFuZCB0aGUgbmFtZSBvZgordGhlIGZpbGUgdGhhdCByZW5hbWUvY29weSBwcm9kdWNlcywgcmVzcGVjdGl2ZWx5LgorCisyLiAgIEl0IGlzIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGV4dGVuZGVkIGhlYWRlciBsaW5lczoKKworICAgICAgIG9sZCBtb2RlIDxtb2RlPgorICAgICAgIG5ldyBtb2RlIDxtb2RlPgorICAgICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDxtb2RlPgorICAgICAgIG5ldyBmaWxlIG1vZGUgPG1vZGU+CisgICAgICAgY29weSBmcm9tIDxwYXRoPgorICAgICAgIGNvcHkgdG8gPHBhdGg+CisgICAgICAgcmVuYW1lIGZyb20gPHBhdGg+CisgICAgICAgcmVuYW1lIHRvIDxwYXRoPgorICAgICAgIHNpbWlsYXJpdHkgaW5kZXggPG51bWJlcj4KKyAgICAgICBkaXNzaW1pbGFyaXR5IGluZGV4IDxudW1iZXI+CisgICAgICAgaW5kZXggPGhhc2g+Li48aGFzaD4gPG1vZGU+CisrCitGaWxlIG1vZGVzIGFyZSBwcmludGVkIGFzIDYtZGlnaXQgb2N0YWwgbnVtYmVycyBpbmNsdWRpbmcgdGhlIGZpbGUgdHlwZQorYW5kIGZpbGUgcGVybWlzc2lvbiBiaXRzLgorKworUGF0aCBuYW1lcyBpbiBleHRlbmRlZCBoZWFkZXJzIGRvIG5vdCBpbmNsdWRlIHRoZSBgYS9gIGFuZCBgYi9gIHByZWZpeGVzLgorKworVGhlIHNpbWlsYXJpdHkgaW5kZXggaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgdW5jaGFuZ2VkIGxpbmVzLCBhbmQKK3RoZSBkaXNzaW1pbGFyaXR5IGluZGV4IGlzIHRoZSBwZXJjZW50YWdlIG9mIGNoYW5nZWQgbGluZXMuICBJdAoraXMgYSByb3VuZGVkIGRvd24gaW50ZWdlciwgZm9sbG93ZWQgYnkgYSBwZXJjZW50IHNpZ24uICBUaGUKK3NpbWlsYXJpdHkgaW5kZXggdmFsdWUgb2YgMTAwJSBpcyB0aHVzIHJlc2VydmVkIGZvciB0d28gZXF1YWwKK2ZpbGVzLCB3aGlsZSAxMDAlIGRpc3NpbWlsYXJpdHkgbWVhbnMgdGhhdCBubyBsaW5lIGZyb20gdGhlIG9sZAorZmlsZSBtYWRlIGl0IGludG8gdGhlIG5ldyBvbmUuCisrCitUaGUgaW5kZXggbGluZSBpbmNsdWRlcyB0aGUgYmxvYiBvYmplY3QgbmFtZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgY2hhbmdlLgorVGhlIDxtb2RlPiBpcyBpbmNsdWRlZCBpZiB0aGUgZmlsZSBtb2RlIGRvZXMgbm90IGNoYW5nZTsgb3RoZXJ3aXNlLAorc2VwYXJhdGUgbGluZXMgaW5kaWNhdGUgdGhlIG9sZCBhbmQgdGhlIG5ldyBtb2RlLgorCiszLiAgUGF0aG5hbWVzIHdpdGggInVudXN1YWwiIGNoYXJhY3RlcnMgYXJlIHF1b3RlZCBhcyBleHBsYWluZWQgZm9yCisgICAgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYCAoc2VlCisgICAgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworNC4gIEFsbCB0aGUgYGZpbGUxYCBmaWxlcyBpbiB0aGUgb3V0cHV0IHJlZmVyIHRvIGZpbGVzIGJlZm9yZSB0aGUKKyAgICBjb21taXQsIGFuZCBhbGwgdGhlIGBmaWxlMmAgZmlsZXMgcmVmZXIgdG8gZmlsZXMgYWZ0ZXIgdGhlIGNvbW1pdC4KKyAgICBJdCBpcyBpbmNvcnJlY3QgdG8gYXBwbHkgZWFjaCBjaGFuZ2UgdG8gZWFjaCBmaWxlIHNlcXVlbnRpYWxseS4gIEZvcgorICAgIGV4YW1wbGUsIHRoaXMgcGF0Y2ggd2lsbCBzd2FwIGEgYW5kIGI6CisKKyAgICAgIGRpZmYgLS1naXQgYS9hIGIvYgorICAgICAgcmVuYW1lIGZyb20gYQorICAgICAgcmVuYW1lIHRvIGIKKyAgICAgIGRpZmYgLS1naXQgYS9iIGIvYQorICAgICAgcmVuYW1lIGZyb20gYgorICAgICAgcmVuYW1lIHRvIGEKKworCitDb21iaW5lZCBkaWZmIGZvcm1hdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW55IGRpZmYtZ2VuZXJhdGluZyBjb21tYW5kIGNhbiB0YWtlIHRoZSBgLWNgIG9yIGAtLWNjYCBvcHRpb24gdG8KK3Byb2R1Y2UgYSAnY29tYmluZWQgZGlmZicgd2hlbiBzaG93aW5nIGEgbWVyZ2UuIFRoaXMgaXMgdGhlIGRlZmF1bHQKK2Zvcm1hdCB3aGVuIHNob3dpbmcgbWVyZ2VzIHdpdGggbGlua2dpdDpnaXQtZGlmZlsxXSBvcgorbGlua2dpdDpnaXQtc2hvd1sxXS4gTm90ZSBhbHNvIHRoYXQgeW91IGNhbiBnaXZlIHRoZSBgLW1gIG9wdGlvbiB0byBhbnkKK29mIHRoZXNlIGNvbW1hbmRzIHRvIGZvcmNlIGdlbmVyYXRpb24gb2YgZGlmZnMgd2l0aCBpbmRpdmlkdWFsIHBhcmVudHMKK29mIGEgbWVyZ2UuCisKK0EgImNvbWJpbmVkIGRpZmYiIGZvcm1hdCBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorZGlmZiAtLWNvbWJpbmVkIGRlc2NyaWJlLmMKK2luZGV4IGZhYmFkYjgsY2M5NWViMC4uNDg2NjUxMAorLS0tIGEvZGVzY3JpYmUuYworKysrIGIvZGVzY3JpYmUuYworQEBAIC05OCwyMCAtOTgsMTIgKzk4LDIwIEBAQAorCXJldHVybiAoYV9kYXRlID4gYl9kYXRlKSA/IC0xIDogKGFfZGF0ZSA9PSBiX2RhdGUpID8gMCA6IDE7CisgIH0KKworLSBzdGF0aWMgdm9pZCBkZXNjcmliZShjaGFyICphcmcpCisgLXN0YXRpYyB2b2lkIGRlc2NyaWJlKHN0cnVjdCBjb21taXQgKmNtaXQsIGludCBsYXN0X29uZSkKKysrc3RhdGljIHZvaWQgZGVzY3JpYmUoY2hhciAqYXJnLCBpbnQgbGFzdF9vbmUpCisgIHsKKyArCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisgKwlzdHJ1Y3QgY29tbWl0ICpjbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdDsKKwlzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKwlzdHJ1Y3QgY29tbWl0X25hbWUgKm47CisKKyArCWlmIChnZXRfc2hhMShhcmcsIHNoYTEpIDwgMCkKKyArCQl1c2FnZShkZXNjcmliZV91c2FnZSk7CisgKwljbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CisgKwlpZiAoIWNtaXQpCisgKwkJdXNhZ2UoZGVzY3JpYmVfdXNhZ2UpOworICsKKwlpZiAoIWluaXRpYWxpemVkKSB7CisJCWluaXRpYWxpemVkID0gMTsKKwkJZm9yX2VhY2hfcmVmKGdldF9uYW1lKTsKKy0tLS0tLS0tLS0tLQorCisxLiAgIEl0IGlzIHByZWNlZGVkIHdpdGggYSAiZ2l0IGRpZmYiIGhlYWRlciwgdGhhdCBsb29rcyBsaWtlCisgICAgIHRoaXMgKHdoZW4gdGhlIGAtY2Agb3B0aW9uIGlzIHVzZWQpOgorCisgICAgICAgZGlmZiAtLWNvbWJpbmVkIGZpbGUKKysKK29yIGxpa2UgdGhpcyAod2hlbiB0aGUgYC0tY2NgIG9wdGlvbiBpcyB1c2VkKToKKworICAgICAgIGRpZmYgLS1jYyBmaWxlCisKKzIuICAgSXQgaXMgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgZXh0ZW5kZWQgaGVhZGVyIGxpbmVzCisgICAgICh0aGlzIGV4YW1wbGUgc2hvd3MgYSBtZXJnZSB3aXRoIHR3byBwYXJlbnRzKToKKworICAgICAgIGluZGV4IDxoYXNoPiw8aGFzaD4uLjxoYXNoPgorICAgICAgIG1vZGUgPG1vZGU+LDxtb2RlPi4uPG1vZGU+CisgICAgICAgbmV3IGZpbGUgbW9kZSA8bW9kZT4KKyAgICAgICBkZWxldGVkIGZpbGUgbW9kZSA8bW9kZT4sPG1vZGU+CisrCitUaGUgYG1vZGUgPG1vZGU+LDxtb2RlPi4uPG1vZGU+YCBsaW5lIGFwcGVhcnMgb25seSBpZiBhdCBsZWFzdCBvbmUgb2YKK3RoZSA8bW9kZT4gaXMgZGlmZmVyZW50IGZyb20gdGhlIHJlc3QuIEV4dGVuZGVkIGhlYWRlcnMgd2l0aAoraW5mb3JtYXRpb24gYWJvdXQgZGV0ZWN0ZWQgY29udGVudHMgbW92ZW1lbnQgKHJlbmFtZXMgYW5kCitjb3B5aW5nIGRldGVjdGlvbikgYXJlIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBkaWZmIG9mIHR3bworPHRyZWUtaXNoPiBhbmQgYXJlIG5vdCB1c2VkIGJ5IGNvbWJpbmVkIGRpZmYgZm9ybWF0LgorCiszLiAgIEl0IGlzIGZvbGxvd2VkIGJ5IHR3by1saW5lIGZyb20tZmlsZS90by1maWxlIGhlYWRlcgorCisgICAgICAgLS0tIGEvZmlsZQorICAgICAgICsrKyBiL2ZpbGUKKysKK1NpbWlsYXIgdG8gdHdvLWxpbmUgaGVhZGVyIGZvciB0cmFkaXRpb25hbCAndW5pZmllZCcgZGlmZgorZm9ybWF0LCBgL2Rldi9udWxsYCBpcyB1c2VkIHRvIHNpZ25hbCBjcmVhdGVkIG9yIGRlbGV0ZWQKK2ZpbGVzLgorKworSG93ZXZlciwgaWYgdGhlIC0tY29tYmluZWQtYWxsLXBhdGhzIG9wdGlvbiBpcyBwcm92aWRlZCwgaW5zdGVhZCBvZiBhCit0d28tbGluZSBmcm9tLWZpbGUvdG8tZmlsZSB5b3UgZ2V0IGEgTisxIGxpbmUgZnJvbS1maWxlL3RvLWZpbGUgaGVhZGVyLAord2hlcmUgTiBpcyB0aGUgbnVtYmVyIG9mIHBhcmVudHMgaW4gdGhlIG1lcmdlIGNvbW1pdAorCisgICAgICAgLS0tIGEvZmlsZQorICAgICAgIC0tLSBhL2ZpbGUKKyAgICAgICAtLS0gYS9maWxlCisgICAgICAgKysrIGIvZmlsZQorKworVGhpcyBleHRlbmRlZCBmb3JtYXQgY2FuIGJlIHVzZWZ1bCBpZiByZW5hbWUgb3IgY29weSBkZXRlY3Rpb24gaXMKK2FjdGl2ZSwgdG8gYWxsb3cgeW91IHRvIHNlZSB0aGUgb3JpZ2luYWwgbmFtZSBvZiB0aGUgZmlsZSBpbiBkaWZmZXJlbnQKK3BhcmVudHMuCisKKzQuICAgQ2h1bmsgaGVhZGVyIGZvcm1hdCBpcyBtb2RpZmllZCB0byBwcmV2ZW50IHBlb3BsZSBmcm9tCisgICAgIGFjY2lkZW50YWxseSBmZWVkaW5nIGl0IHRvIGBwYXRjaCAtcDFgLiBDb21iaW5lZCBkaWZmIGZvcm1hdAorICAgICB3YXMgY3JlYXRlZCBmb3IgcmV2aWV3IG9mIG1lcmdlIGNvbW1pdCBjaGFuZ2VzLCBhbmQgd2FzIG5vdAorICAgICBtZWFudCB0byBiZSBhcHBsaWVkLiBUaGUgY2hhbmdlIGlzIHNpbWlsYXIgdG8gdGhlIGNoYW5nZSBpbiB0aGUKKyAgICAgZXh0ZW5kZWQgJ2luZGV4JyBoZWFkZXI6CisKKyAgICAgICBAQEAgPGZyb20tZmlsZS1yYW5nZT4gPGZyb20tZmlsZS1yYW5nZT4gPHRvLWZpbGUtcmFuZ2U+IEBAQAorKworVGhlcmUgYXJlIChudW1iZXIgb2YgcGFyZW50cyArIDEpIGBAYCBjaGFyYWN0ZXJzIGluIHRoZSBjaHVuaworaGVhZGVyIGZvciBjb21iaW5lZCBkaWZmIGZvcm1hdC4KKworVW5saWtlIHRoZSB0cmFkaXRpb25hbCAndW5pZmllZCcgZGlmZiBmb3JtYXQsIHdoaWNoIHNob3dzIHR3bworZmlsZXMgQSBhbmQgQiB3aXRoIGEgc2luZ2xlIGNvbHVtbiB0aGF0IGhhcyBgLWAgKG1pbnVzIC0tCithcHBlYXJzIGluIEEgYnV0IHJlbW92ZWQgaW4gQiksIGArYCAocGx1cyAtLSBtaXNzaW5nIGluIEEgYnV0CithZGRlZCB0byBCKSwgb3IgYCIgImAgKHNwYWNlIC0tIHVuY2hhbmdlZCkgcHJlZml4LCB0aGlzIGZvcm1hdAorY29tcGFyZXMgdHdvIG9yIG1vcmUgZmlsZXMgZmlsZTEsIGZpbGUyLC4uLiB3aXRoIG9uZSBmaWxlIFgsIGFuZAorc2hvd3MgaG93IFggZGlmZmVycyBmcm9tIGVhY2ggb2YgZmlsZU4uICBPbmUgY29sdW1uIGZvciBlYWNoIG9mCitmaWxlTiBpcyBwcmVwZW5kZWQgdG8gdGhlIG91dHB1dCBsaW5lIHRvIG5vdGUgaG93IFgncyBsaW5lIGlzCitkaWZmZXJlbnQgZnJvbSBpdC4KKworQSBgLWAgY2hhcmFjdGVyIGluIHRoZSBjb2x1bW4gTiBtZWFucyB0aGF0IHRoZSBsaW5lIGFwcGVhcnMgaW4KK2ZpbGVOIGJ1dCBpdCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIHJlc3VsdC4gIEEgYCtgIGNoYXJhY3RlcgoraW4gdGhlIGNvbHVtbiBOIG1lYW5zIHRoYXQgdGhlIGxpbmUgYXBwZWFycyBpbiB0aGUgcmVzdWx0LAorYW5kIGZpbGVOIGRvZXMgbm90IGhhdmUgdGhhdCBsaW5lIChpbiBvdGhlciB3b3JkcywgdGhlIGxpbmUgd2FzCithZGRlZCwgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGF0IHBhcmVudCkuCisKK0luIHRoZSBhYm92ZSBleGFtcGxlIG91dHB1dCwgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSB3YXMgY2hhbmdlZAorZnJvbSBib3RoIGZpbGVzIChoZW5jZSB0d28gYC1gIHJlbW92YWxzIGZyb20gYm90aCBmaWxlMSBhbmQKK2ZpbGUyLCBwbHVzIGArK2AgdG8gbWVhbiBvbmUgbGluZSB0aGF0IHdhcyBhZGRlZCBkb2VzIG5vdCBhcHBlYXIKK2luIGVpdGhlciBmaWxlMSBvciBmaWxlMikuICBBbHNvIGVpZ2h0IG90aGVyIGxpbmVzIGFyZSB0aGUgc2FtZQorZnJvbSBmaWxlMSBidXQgZG8gbm90IGFwcGVhciBpbiBmaWxlMiAoaGVuY2UgcHJlZml4ZWQgd2l0aCBgK2ApLgorCitXaGVuIHNob3duIGJ5IGBnaXQgZGlmZi10cmVlIC1jYCwgaXQgY29tcGFyZXMgdGhlIHBhcmVudHMgb2YgYQorbWVyZ2UgY29tbWl0IHdpdGggdGhlIG1lcmdlIHJlc3VsdCAoaS5lLiBmaWxlMS4uZmlsZU4gYXJlIHRoZQorcGFyZW50cykuICBXaGVuIHNob3duIGJ5IGBnaXQgZGlmZi1maWxlcyAtY2AsIGl0IGNvbXBhcmVzIHRoZQordHdvIHVucmVzb2x2ZWQgbWVyZ2UgcGFyZW50cyB3aXRoIHRoZSB3b3JraW5nIHRyZWUgZmlsZQorKGkuZS4gZmlsZTEgaXMgc3RhZ2UgMiBha2EgIm91ciB2ZXJzaW9uIiwgZmlsZTIgaXMgc3RhZ2UgMyBha2EKKyJ0aGVpciB2ZXJzaW9uIikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIzMWYwYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dApAQCAtMCwwICsxLDc1NiBAQAorLy8gUGxlYXNlIGRvbid0IHJlbW92ZSB0aGlzIGNvbW1lbnQgYXMgYXNjaWlkb2MgYmVoYXZlcyBiYWRseSB3aGVuCisvLyB0aGUgZmlyc3Qgbm9uLWVtcHR5IGxpbmUgaXMgaWZkZWYvaWZuZGVmLiBUaGUgc3ltcHRvbSBpcyB0aGF0CisvLyB3aXRob3V0IHRoaXMgY29tbWVudCB0aGUgPGdpdC1kaWZmLWNvcmU+IGF0dHJpYnV0ZSBjb25kaXRpb25hbGx5CisvLyBkZWZpbmVkIGJlbG93IGVuZHMgdXAgYmVpbmcgZGVmaW5lZCB1bmNvbmRpdGlvbmFsbHkuCisvLyBMYXN0IGNoZWNrZWQgd2l0aCBhc2NpaWRvYyA3LjAuMi4KKworaWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KK2lmbmRlZjo6Z2l0LWRpZmZbXQoraWZuZGVmOjpnaXQtbG9nW10KKzpnaXQtZGlmZi1jb3JlOiAxCitlbmRpZjo6Z2l0LWxvZ1tdCitlbmRpZjo6Z2l0LWRpZmZbXQorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCitpZmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCistcDo6CistLW5vLXN0YXQ6OgorCUdlbmVyYXRlIHBsYWluIHBhdGNoZXMgd2l0aG91dCBhbnkgZGlmZnN0YXRzLgorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorLXA6OgorLXU6OgorLS1wYXRjaDo6CisJR2VuZXJhdGUgcGF0Y2ggKHNlZSBzZWN0aW9uIG9uIGdlbmVyYXRpbmcgcGF0Y2hlcykuCitpZmRlZjo6Z2l0LWRpZmZbXQorCVRoaXMgaXMgdGhlIGRlZmF1bHQuCitlbmRpZjo6Z2l0LWRpZmZbXQorCistczo6CistLW5vLXBhdGNoOjoKKwlTdXBwcmVzcyBkaWZmIG91dHB1dC4gVXNlZnVsIGZvciBjb21tYW5kcyBsaWtlIGBnaXQgc2hvd2AgdGhhdAorCXNob3cgdGhlIHBhdGNoIGJ5IGRlZmF1bHQsIG9yIHRvIGNhbmNlbCB0aGUgZWZmZWN0IG9mIGAtLXBhdGNoYC4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworLVU8bj46OgorLS11bmlmaWVkPTxuPjo6CisJR2VuZXJhdGUgZGlmZnMgd2l0aCA8bj4gbGluZXMgb2YgY29udGV4dCBpbnN0ZWFkIG9mCisJdGhlIHVzdWFsIHRocmVlLiBJbXBsaWVzIGAtLXBhdGNoYC4KK2lmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisJSW1wbGllcyBgLXBgLgorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCistLW91dHB1dD08ZmlsZT46OgorCU91dHB1dCB0byBhIHNwZWNpZmljIGZpbGUgaW5zdGVhZCBvZiBzdGRvdXQuCisKKy0tb3V0cHV0LWluZGljYXRvci1uZXc9PGNoYXI+OjoKKy0tb3V0cHV0LWluZGljYXRvci1vbGQ9PGNoYXI+OjoKKy0tb3V0cHV0LWluZGljYXRvci1jb250ZXh0PTxjaGFyPjo6CisJU3BlY2lmeSB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gaW5kaWNhdGUgbmV3LCBvbGQgb3IgY29udGV4dAorCWxpbmVzIGluIHRoZSBnZW5lcmF0ZWQgcGF0Y2guIE5vcm1hbGx5IHRoZXkgYXJlICcrJywgJy0nIGFuZAorCScgJyByZXNwZWN0aXZlbHkuCisKK2lmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCistLXJhdzo6CitpZm5kZWY6OmdpdC1sb2dbXQorCUdlbmVyYXRlIHRoZSBkaWZmIGluIHJhdyBmb3JtYXQuCitpZmRlZjo6Z2l0LWRpZmYtY29yZVtdCisJVGhpcyBpcyB0aGUgZGVmYXVsdC4KK2VuZGlmOjpnaXQtZGlmZi1jb3JlW10KK2VuZGlmOjpnaXQtbG9nW10KK2lmZGVmOjpnaXQtbG9nW10KKwlGb3IgZWFjaCBjb21taXQsIHNob3cgYSBzdW1tYXJ5IG9mIGNoYW5nZXMgdXNpbmcgdGhlIHJhdyBkaWZmCisJZm9ybWF0LiBTZWUgdGhlICJSQVcgT1VUUFVUIEZPUk1BVCIgc2VjdGlvbiBvZgorCWxpbmtnaXQ6Z2l0LWRpZmZbMV0uIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gc2hvd2luZyB0aGUgbG9nCisJaXRzZWxmIGluIHJhdyBmb3JtYXQsIHdoaWNoIHlvdSBjYW4gYWNoaWV2ZSB3aXRoCisJYC0tZm9ybWF0PXJhd2AuCitlbmRpZjo6Z2l0LWxvZ1tdCitlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKK2lmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCistLXBhdGNoLXdpdGgtcmF3OjoKKwlTeW5vbnltIGZvciBgLXAgLS1yYXdgLgorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCistLWluZGVudC1oZXVyaXN0aWM6OgorCUVuYWJsZSB0aGUgaGV1cmlzdGljIHRoYXQgc2hpZnRzIGRpZmYgaHVuayBib3VuZGFyaWVzIHRvIG1ha2UgcGF0Y2hlcworCWVhc2llciB0byByZWFkLiBUaGlzIGlzIHRoZSBkZWZhdWx0LgorCistLW5vLWluZGVudC1oZXVyaXN0aWM6OgorCURpc2FibGUgdGhlIGluZGVudCBoZXVyaXN0aWMuCisKKy0tbWluaW1hbDo6CisJU3BlbmQgZXh0cmEgdGltZSB0byBtYWtlIHN1cmUgdGhlIHNtYWxsZXN0IHBvc3NpYmxlCisJZGlmZiBpcyBwcm9kdWNlZC4KKworLS1wYXRpZW5jZTo6CisJR2VuZXJhdGUgYSBkaWZmIHVzaW5nIHRoZSAicGF0aWVuY2UgZGlmZiIgYWxnb3JpdGhtLgorCistLWhpc3RvZ3JhbTo6CisJR2VuZXJhdGUgYSBkaWZmIHVzaW5nIHRoZSAiaGlzdG9ncmFtIGRpZmYiIGFsZ29yaXRobS4KKworLS1hbmNob3JlZD08dGV4dD46OgorCUdlbmVyYXRlIGEgZGlmZiB1c2luZyB0aGUgImFuY2hvcmVkIGRpZmYiIGFsZ29yaXRobS4KKysKK1RoaXMgb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UuCisrCitJZiBhIGxpbmUgZXhpc3RzIGluIGJvdGggdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24sIGV4aXN0cyBvbmx5IG9uY2UsCithbmQgc3RhcnRzIHdpdGggdGhpcyB0ZXh0LCB0aGlzIGFsZ29yaXRobSBhdHRlbXB0cyB0byBwcmV2ZW50IGl0IGZyb20KK2FwcGVhcmluZyBhcyBhIGRlbGV0aW9uIG9yIGFkZGl0aW9uIGluIHRoZSBvdXRwdXQuIEl0IHVzZXMgdGhlICJwYXRpZW5jZQorZGlmZiIgYWxnb3JpdGhtIGludGVybmFsbHkuCisKKy0tZGlmZi1hbGdvcml0aG09e3BhdGllbmNlfG1pbmltYWx8aGlzdG9ncmFtfG15ZXJzfTo6CisJQ2hvb3NlIGEgZGlmZiBhbGdvcml0aG0uIFRoZSB2YXJpYW50cyBhcmUgYXMgZm9sbG93czoKKysKKy0tCitgZGVmYXVsdGAsIGBteWVyc2A7OworCVRoZSBiYXNpYyBncmVlZHkgZGlmZiBhbGdvcml0aG0uIEN1cnJlbnRseSwgdGhpcyBpcyB0aGUgZGVmYXVsdC4KK2BtaW5pbWFsYDs7CisJU3BlbmQgZXh0cmEgdGltZSB0byBtYWtlIHN1cmUgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGRpZmYgaXMKKwlwcm9kdWNlZC4KK2BwYXRpZW5jZWA7OworCVVzZSAicGF0aWVuY2UgZGlmZiIgYWxnb3JpdGhtIHdoZW4gZ2VuZXJhdGluZyBwYXRjaGVzLgorYGhpc3RvZ3JhbWA7OworCVRoaXMgYWxnb3JpdGhtIGV4dGVuZHMgdGhlIHBhdGllbmNlIGFsZ29yaXRobSB0byAic3VwcG9ydAorCWxvdy1vY2N1cnJlbmNlIGNvbW1vbiBlbGVtZW50cyIuCistLQorKworRm9yIGluc3RhbmNlLCBpZiB5b3UgY29uZmlndXJlZCB0aGUgYGRpZmYuYWxnb3JpdGhtYCB2YXJpYWJsZSB0byBhCitub24tZGVmYXVsdCB2YWx1ZSBhbmQgd2FudCB0byB1c2UgdGhlIGRlZmF1bHQgb25lLCB0aGVuIHlvdQoraGF2ZSB0byB1c2UgYC0tZGlmZi1hbGdvcml0aG09ZGVmYXVsdGAgb3B0aW9uLgorCistLXN0YXRbPTx3aWR0aD5bLDxuYW1lLXdpZHRoPlssPGNvdW50Pl1dXTo6CisJR2VuZXJhdGUgYSBkaWZmc3RhdC4gQnkgZGVmYXVsdCwgYXMgbXVjaCBzcGFjZSBhcyBuZWNlc3NhcnkKKwl3aWxsIGJlIHVzZWQgZm9yIHRoZSBmaWxlbmFtZSBwYXJ0LCBhbmQgdGhlIHJlc3QgZm9yIHRoZSBncmFwaAorCXBhcnQuIE1heGltdW0gd2lkdGggZGVmYXVsdHMgdG8gdGVybWluYWwgd2lkdGgsIG9yIDgwIGNvbHVtbnMKKwlpZiBub3QgY29ubmVjdGVkIHRvIGEgdGVybWluYWwsIGFuZCBjYW4gYmUgb3ZlcnJpZGRlbiBieQorCWA8d2lkdGg+YC4gVGhlIHdpZHRoIG9mIHRoZSBmaWxlbmFtZSBwYXJ0IGNhbiBiZSBsaW1pdGVkIGJ5CisJZ2l2aW5nIGFub3RoZXIgd2lkdGggYDxuYW1lLXdpZHRoPmAgYWZ0ZXIgYSBjb21tYS4gVGhlIHdpZHRoCisJb2YgdGhlIGdyYXBoIHBhcnQgY2FuIGJlIGxpbWl0ZWQgYnkgdXNpbmcKKwlgLS1zdGF0LWdyYXBoLXdpZHRoPTx3aWR0aD5gIChhZmZlY3RzIGFsbCBjb21tYW5kcyBnZW5lcmF0aW5nCisJYSBzdGF0IGdyYXBoKSBvciBieSBzZXR0aW5nIGBkaWZmLnN0YXRHcmFwaFdpZHRoPTx3aWR0aD5gCisJKGRvZXMgbm90IGFmZmVjdCBgZ2l0IGZvcm1hdC1wYXRjaGApLgorCUJ5IGdpdmluZyBhIHRoaXJkIHBhcmFtZXRlciBgPGNvdW50PmAsIHlvdSBjYW4gbGltaXQgdGhlCisJb3V0cHV0IHRvIHRoZSBmaXJzdCBgPGNvdW50PmAgbGluZXMsIGZvbGxvd2VkIGJ5IGAuLi5gIGlmCisJdGhlcmUgYXJlIG1vcmUuCisrCitUaGVzZSBwYXJhbWV0ZXJzIGNhbiBhbHNvIGJlIHNldCBpbmRpdmlkdWFsbHkgd2l0aCBgLS1zdGF0LXdpZHRoPTx3aWR0aD5gLAorYC0tc3RhdC1uYW1lLXdpZHRoPTxuYW1lLXdpZHRoPmAgYW5kIGAtLXN0YXQtY291bnQ9PGNvdW50PmAuCisKKy0tY29tcGFjdC1zdW1tYXJ5OjoKKwlPdXRwdXQgYSBjb25kZW5zZWQgc3VtbWFyeSBvZiBleHRlbmRlZCBoZWFkZXIgaW5mb3JtYXRpb24gc3VjaAorCWFzIGZpbGUgY3JlYXRpb25zIG9yIGRlbGV0aW9ucyAoIm5ldyIgb3IgImdvbmUiLCBvcHRpb25hbGx5ICIrbCIKKwlpZiBpdCdzIGEgc3ltbGluaykgYW5kIG1vZGUgY2hhbmdlcyAoIit4IiBvciAiLXgiIGZvciBhZGRpbmcKKwlvciByZW1vdmluZyBleGVjdXRhYmxlIGJpdCByZXNwZWN0aXZlbHkpIGluIGRpZmZzdGF0LiBUaGUKKwlpbmZvcm1hdGlvbiBpcyBwdXQgYmV0d2VlbiB0aGUgZmlsZW5hbWUgcGFydCBhbmQgdGhlIGdyYXBoCisJcGFydC4gSW1wbGllcyBgLS1zdGF0YC4KKworLS1udW1zdGF0OjoKKwlTaW1pbGFyIHRvIGAtLXN0YXRgLCBidXQgc2hvd3MgbnVtYmVyIG9mIGFkZGVkIGFuZAorCWRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiBhbmQgcGF0aG5hbWUgd2l0aG91dAorCWFiYnJldmlhdGlvbiwgdG8gbWFrZSBpdCBtb3JlIG1hY2hpbmUgZnJpZW5kbHkuICBGb3IKKwliaW5hcnkgZmlsZXMsIG91dHB1dHMgdHdvIGAtYCBpbnN0ZWFkIG9mIHNheWluZworCWAwIDBgLgorCistLXNob3J0c3RhdDo6CisJT3V0cHV0IG9ubHkgdGhlIGxhc3QgbGluZSBvZiB0aGUgYC0tc3RhdGAgZm9ybWF0IGNvbnRhaW5pbmcgdG90YWwKKwludW1iZXIgb2YgbW9kaWZpZWQgZmlsZXMsIGFzIHdlbGwgYXMgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkCisJbGluZXMuCisKKy1YWzxwYXJhbTEscGFyYW0yLC4uLj5dOjoKKy0tZGlyc3RhdFs9PHBhcmFtMSxwYXJhbTIsLi4uPl06OgorCU91dHB1dCB0aGUgZGlzdHJpYnV0aW9uIG9mIHJlbGF0aXZlIGFtb3VudCBvZiBjaGFuZ2VzIGZvciBlYWNoCisJc3ViLWRpcmVjdG9yeS4gVGhlIGJlaGF2aW9yIG9mIGAtLWRpcnN0YXRgIGNhbiBiZSBjdXN0b21pemVkIGJ5CisJcGFzc2luZyBpdCBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHBhcmFtZXRlcnMuCisJVGhlIGRlZmF1bHRzIGFyZSBjb250cm9sbGVkIGJ5IHRoZSBgZGlmZi5kaXJzdGF0YCBjb25maWd1cmF0aW9uCisJdmFyaWFibGUgKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCVRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgYXZhaWxhYmxlOgorKworLS0KK2BjaGFuZ2VzYDs7CisJQ29tcHV0ZSB0aGUgZGlyc3RhdCBudW1iZXJzIGJ5IGNvdW50aW5nIHRoZSBsaW5lcyB0aGF0IGhhdmUgYmVlbgorCXJlbW92ZWQgZnJvbSB0aGUgc291cmNlLCBvciBhZGRlZCB0byB0aGUgZGVzdGluYXRpb24uIFRoaXMgaWdub3JlcworCXRoZSBhbW91bnQgb2YgcHVyZSBjb2RlIG1vdmVtZW50cyB3aXRoaW4gYSBmaWxlLiAgSW4gb3RoZXIgd29yZHMsCisJcmVhcnJhbmdpbmcgbGluZXMgaW4gYSBmaWxlIGlzIG5vdCBjb3VudGVkIGFzIG11Y2ggYXMgb3RoZXIgY2hhbmdlcy4KKwlUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdoZW4gbm8gcGFyYW1ldGVyIGlzIGdpdmVuLgorYGxpbmVzYDs7CisJQ29tcHV0ZSB0aGUgZGlyc3RhdCBudW1iZXJzIGJ5IGRvaW5nIHRoZSByZWd1bGFyIGxpbmUtYmFzZWQgZGlmZgorCWFuYWx5c2lzLCBhbmQgc3VtbWluZyB0aGUgcmVtb3ZlZC9hZGRlZCBsaW5lIGNvdW50cy4gKEZvciBiaW5hcnkKKwlmaWxlcywgY291bnQgNjQtYnl0ZSBjaHVua3MgaW5zdGVhZCwgc2luY2UgYmluYXJ5IGZpbGVzIGhhdmUgbm8KKwluYXR1cmFsIGNvbmNlcHQgb2YgbGluZXMpLiBUaGlzIGlzIGEgbW9yZSBleHBlbnNpdmUgYC0tZGlyc3RhdGAKKwliZWhhdmlvciB0aGFuIHRoZSBgY2hhbmdlc2AgYmVoYXZpb3IsIGJ1dCBpdCBkb2VzIGNvdW50IHJlYXJyYW5nZWQKKwlsaW5lcyB3aXRoaW4gYSBmaWxlIGFzIG11Y2ggYXMgb3RoZXIgY2hhbmdlcy4gVGhlIHJlc3VsdGluZyBvdXRwdXQKKwlpcyBjb25zaXN0ZW50IHdpdGggd2hhdCB5b3UgZ2V0IGZyb20gdGhlIG90aGVyIGAtLSpzdGF0YCBvcHRpb25zLgorYGZpbGVzYDs7CisJQ29tcHV0ZSB0aGUgZGlyc3RhdCBudW1iZXJzIGJ5IGNvdW50aW5nIHRoZSBudW1iZXIgb2YgZmlsZXMgY2hhbmdlZC4KKwlFYWNoIGNoYW5nZWQgZmlsZSBjb3VudHMgZXF1YWxseSBpbiB0aGUgZGlyc3RhdCBhbmFseXNpcy4gVGhpcyBpcworCXRoZSBjb21wdXRhdGlvbmFsbHkgY2hlYXBlc3QgYC0tZGlyc3RhdGAgYmVoYXZpb3IsIHNpbmNlIGl0IGRvZXMKKwlub3QgaGF2ZSB0byBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnRzIGF0IGFsbC4KK2BjdW11bGF0aXZlYDs7CisJQ291bnQgY2hhbmdlcyBpbiBhIGNoaWxkIGRpcmVjdG9yeSBmb3IgdGhlIHBhcmVudCBkaXJlY3RvcnkgYXMgd2VsbC4KKwlOb3RlIHRoYXQgd2hlbiB1c2luZyBgY3VtdWxhdGl2ZWAsIHRoZSBzdW0gb2YgdGhlIHBlcmNlbnRhZ2VzCisJcmVwb3J0ZWQgbWF5IGV4Y2VlZCAxMDAlLiBUaGUgZGVmYXVsdCAobm9uLWN1bXVsYXRpdmUpIGJlaGF2aW9yIGNhbgorCWJlIHNwZWNpZmllZCB3aXRoIHRoZSBgbm9uY3VtdWxhdGl2ZWAgcGFyYW1ldGVyLgorPGxpbWl0Pjs7CisJQW4gaW50ZWdlciBwYXJhbWV0ZXIgc3BlY2lmaWVzIGEgY3V0LW9mZiBwZXJjZW50ICgzJSBieSBkZWZhdWx0KS4KKwlEaXJlY3RvcmllcyBjb250cmlidXRpbmcgbGVzcyB0aGFuIHRoaXMgcGVyY2VudGFnZSBvZiB0aGUgY2hhbmdlcworCWFyZSBub3Qgc2hvd24gaW4gdGhlIG91dHB1dC4KKy0tCisrCitFeGFtcGxlOiBUaGUgZm9sbG93aW5nIHdpbGwgY291bnQgY2hhbmdlZCBmaWxlcywgd2hpbGUgaWdub3JpbmcKK2RpcmVjdG9yaWVzIHdpdGggbGVzcyB0aGFuIDEwJSBvZiB0aGUgdG90YWwgYW1vdW50IG9mIGNoYW5nZWQgZmlsZXMsCithbmQgYWNjdW11bGF0aW5nIGNoaWxkIGRpcmVjdG9yeSBjb3VudHMgaW4gdGhlIHBhcmVudCBkaXJlY3RvcmllczoKK2AtLWRpcnN0YXQ9ZmlsZXMsMTAsY3VtdWxhdGl2ZWAuCisKKy0tY3VtdWxhdGl2ZTo6CisJU3lub255bSBmb3IgLS1kaXJzdGF0PWN1bXVsYXRpdmUKKworLS1kaXJzdGF0LWJ5LWZpbGVbPTxwYXJhbTEscGFyYW0yPi4uLl06OgorCVN5bm9ueW0gZm9yIC0tZGlyc3RhdD1maWxlcyxwYXJhbTEscGFyYW0yLi4uCisKKy0tc3VtbWFyeTo6CisJT3V0cHV0IGEgY29uZGVuc2VkIHN1bW1hcnkgb2YgZXh0ZW5kZWQgaGVhZGVyIGluZm9ybWF0aW9uCisJc3VjaCBhcyBjcmVhdGlvbnMsIHJlbmFtZXMgYW5kIG1vZGUgY2hhbmdlcy4KKworaWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KKy0tcGF0Y2gtd2l0aC1zdGF0OjoKKwlTeW5vbnltIGZvciBgLXAgLS1zdGF0YC4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworaWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworLXo6OgoraWZkZWY6OmdpdC1sb2dbXQorCVNlcGFyYXRlIHRoZSBjb21taXRzIHdpdGggTlVMcyBpbnN0ZWFkIG9mIHdpdGggbmV3IG5ld2xpbmVzLgorKworQWxzbywgd2hlbiBgLS1yYXdgIG9yIGAtLW51bXN0YXRgIGhhcyBiZWVuIGdpdmVuLCBkbyBub3QgbXVuZ2UKK3BhdGhuYW1lcyBhbmQgdXNlIE5VTHMgYXMgb3V0cHV0IGZpZWxkIHRlcm1pbmF0b3JzLgorZW5kaWY6OmdpdC1sb2dbXQoraWZuZGVmOjpnaXQtbG9nW10KKwlXaGVuIGAtLXJhd2AsIGAtLW51bXN0YXRgLCBgLS1uYW1lLW9ubHlgIG9yIGAtLW5hbWUtc3RhdHVzYCBoYXMgYmVlbgorCWdpdmVuLCBkbyBub3QgbXVuZ2UgcGF0aG5hbWVzIGFuZCB1c2UgTlVMcyBhcyBvdXRwdXQgZmllbGQgdGVybWluYXRvcnMuCitlbmRpZjo6Z2l0LWxvZ1tdCisrCitXaXRob3V0IHRoaXMgb3B0aW9uLCBwYXRobmFtZXMgd2l0aCAidW51c3VhbCIgY2hhcmFjdGVycyBhcmUgcXVvdGVkIGFzCitleHBsYWluZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBjb3JlLnF1b3RlUGF0aGAgKHNlZQorbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworLS1uYW1lLW9ubHk6OgorCVNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzLgorCistLW5hbWUtc3RhdHVzOjoKKwlTaG93IG9ubHkgbmFtZXMgYW5kIHN0YXR1cyBvZiBjaGFuZ2VkIGZpbGVzLiBTZWUgdGhlIGRlc2NyaXB0aW9uCisJb2YgdGhlIGAtLWRpZmYtZmlsdGVyYCBvcHRpb24gb24gd2hhdCB0aGUgc3RhdHVzIGxldHRlcnMgbWVhbi4KKworLS1zdWJtb2R1bGVbPTxmb3JtYXQ+XTo6CisJU3BlY2lmeSBob3cgZGlmZmVyZW5jZXMgaW4gc3VibW9kdWxlcyBhcmUgc2hvd24uICBXaGVuIHNwZWNpZnlpbmcKKwlgLS1zdWJtb2R1bGU9c2hvcnRgIHRoZSAnc2hvcnQnIGZvcm1hdCBpcyB1c2VkLiAgVGhpcyBmb3JtYXQganVzdAorCXNob3dzIHRoZSBuYW1lcyBvZiB0aGUgY29tbWl0cyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIHJhbmdlLgorCVdoZW4gYC0tc3VibW9kdWxlYCBvciBgLS1zdWJtb2R1bGU9bG9nYCBpcyBzcGVjaWZpZWQsIHRoZSAnbG9nJworCWZvcm1hdCBpcyB1c2VkLiAgVGhpcyBmb3JtYXQgbGlzdHMgdGhlIGNvbW1pdHMgaW4gdGhlIHJhbmdlIGxpa2UKKwlsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0gYHN1bW1hcnlgIGRvZXMuICBXaGVuIGAtLXN1Ym1vZHVsZT1kaWZmYAorCWlzIHNwZWNpZmllZCwgdGhlICdkaWZmJyBmb3JtYXQgaXMgdXNlZC4gIFRoaXMgZm9ybWF0IHNob3dzIGFuCisJaW5saW5lIGRpZmYgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIHN1Ym1vZHVsZSBjb250ZW50cyBiZXR3ZWVuIHRoZQorCWNvbW1pdCByYW5nZS4gIERlZmF1bHRzIHRvIGBkaWZmLnN1Ym1vZHVsZWAgb3IgdGhlICdzaG9ydCcgZm9ybWF0CisJaWYgdGhlIGNvbmZpZyBvcHRpb24gaXMgdW5zZXQuCisKKy0tY29sb3JbPTx3aGVuPl06OgorCVNob3cgY29sb3JlZCBkaWZmLgorCWAtLWNvbG9yYCAoaS5lLiB3aXRob3V0ICc9PHdoZW4+JykgaXMgdGhlIHNhbWUgYXMgYC0tY29sb3I9YWx3YXlzYC4KKwknPHdoZW4+JyBjYW4gYmUgb25lIG9mIGBhbHdheXNgLCBgbmV2ZXJgLCBvciBgYXV0b2AuCitpZmRlZjo6Z2l0LWRpZmZbXQorCUl0IGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSBgY29sb3IudWlgIGFuZCBgY29sb3IuZGlmZmAKKwljb25maWd1cmF0aW9uIHNldHRpbmdzLgorZW5kaWY6OmdpdC1kaWZmW10KKworLS1uby1jb2xvcjo6CisJVHVybiBvZmYgY29sb3JlZCBkaWZmLgoraWZkZWY6OmdpdC1kaWZmW10KKwlUaGlzIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCitlbmRpZjo6Z2l0LWRpZmZbXQorCUl0IGlzIHRoZSBzYW1lIGFzIGAtLWNvbG9yPW5ldmVyYC4KKworLS1jb2xvci1tb3ZlZFs9PG1vZGU+XTo6CisJTW92ZWQgbGluZXMgb2YgY29kZSBhcmUgY29sb3JlZCBkaWZmZXJlbnRseS4KK2lmZGVmOjpnaXQtZGlmZltdCisJSXQgY2FuIGJlIGNoYW5nZWQgYnkgdGhlIGBkaWZmLmNvbG9yTW92ZWRgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4KK2VuZGlmOjpnaXQtZGlmZltdCisJVGhlIDxtb2RlPiBkZWZhdWx0cyB0byAnbm8nIGlmIHRoZSBvcHRpb24gaXMgbm90IGdpdmVuCisJYW5kIHRvICd6ZWJyYScgaWYgdGhlIG9wdGlvbiB3aXRoIG5vIG1vZGUgaXMgZ2l2ZW4uCisJVGhlIG1vZGUgbXVzdCBiZSBvbmUgb2Y6CisrCistLQorbm86OgorCU1vdmVkIGxpbmVzIGFyZSBub3QgaGlnaGxpZ2h0ZWQuCitkZWZhdWx0OjoKKwlJcyBhIHN5bm9ueW0gZm9yIGB6ZWJyYWAuIFRoaXMgbWF5IGNoYW5nZSB0byBhIG1vcmUgc2Vuc2libGUgbW9kZQorCWluIHRoZSBmdXR1cmUuCitwbGFpbjo6CisJQW55IGxpbmUgdGhhdCBpcyBhZGRlZCBpbiBvbmUgbG9jYXRpb24gYW5kIHdhcyByZW1vdmVkCisJaW4gYW5vdGhlciBsb2NhdGlvbiB3aWxsIGJlIGNvbG9yZWQgd2l0aCAnY29sb3IuZGlmZi5uZXdNb3ZlZCcuCisJU2ltaWxhcmx5ICdjb2xvci5kaWZmLm9sZE1vdmVkJyB3aWxsIGJlIHVzZWQgZm9yIHJlbW92ZWQgbGluZXMKKwl0aGF0IGFyZSBhZGRlZCBzb21ld2hlcmUgZWxzZSBpbiB0aGUgZGlmZi4gVGhpcyBtb2RlIHBpY2tzIHVwIGFueQorCW1vdmVkIGxpbmUsIGJ1dCBpdCBpcyBub3QgdmVyeSB1c2VmdWwgaW4gYSByZXZpZXcgdG8gZGV0ZXJtaW5lCisJaWYgYSBibG9jayBvZiBjb2RlIHdhcyBtb3ZlZCB3aXRob3V0IHBlcm11dGF0aW9uLgorYmxvY2tzOjoKKwlCbG9ja3Mgb2YgbW92ZWQgdGV4dCBvZiBhdCBsZWFzdCAyMCBhbHBoYW51bWVyaWMgY2hhcmFjdGVycworCWFyZSBkZXRlY3RlZCBncmVlZGlseS4gVGhlIGRldGVjdGVkIGJsb2NrcyBhcmUKKwlwYWludGVkIHVzaW5nIGVpdGhlciB0aGUgJ2NvbG9yLmRpZmYue29sZCxuZXd9TW92ZWQnIGNvbG9yLgorCUFkamFjZW50IGJsb2NrcyBjYW5ub3QgYmUgdG9sZCBhcGFydC4KK3plYnJhOjoKKwlCbG9ja3Mgb2YgbW92ZWQgdGV4dCBhcmUgZGV0ZWN0ZWQgYXMgaW4gJ2Jsb2NrcycgbW9kZS4gVGhlIGJsb2NrcworCWFyZSBwYWludGVkIHVzaW5nIGVpdGhlciB0aGUgJ2NvbG9yLmRpZmYue29sZCxuZXd9TW92ZWQnIGNvbG9yIG9yCisJJ2NvbG9yLmRpZmYue29sZCxuZXd9TW92ZWRBbHRlcm5hdGl2ZScuIFRoZSBjaGFuZ2UgYmV0d2VlbgorCXRoZSB0d28gY29sb3JzIGluZGljYXRlcyB0aGF0IGEgbmV3IGJsb2NrIHdhcyBkZXRlY3RlZC4KK2RpbW1lZC16ZWJyYTo6CisJU2ltaWxhciB0byAnemVicmEnLCBidXQgYWRkaXRpb25hbCBkaW1taW5nIG9mIHVuaW50ZXJlc3RpbmcgcGFydHMKKwlvZiBtb3ZlZCBjb2RlIGlzIHBlcmZvcm1lZC4gVGhlIGJvcmRlcmluZyBsaW5lcyBvZiB0d28gYWRqYWNlbnQKKwlibG9ja3MgYXJlIGNvbnNpZGVyZWQgaW50ZXJlc3RpbmcsIHRoZSByZXN0IGlzIHVuaW50ZXJlc3RpbmcuCisJYGRpbW1lZF96ZWJyYWAgaXMgYSBkZXByZWNhdGVkIHN5bm9ueW0uCistLQorCistLW5vLWNvbG9yLW1vdmVkOjoKKwlUdXJuIG9mZiBtb3ZlIGRldGVjdGlvbi4gVGhpcyBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBjb25maWd1cmF0aW9uCisJc2V0dGluZ3MuIEl0IGlzIHRoZSBzYW1lIGFzIGAtLWNvbG9yLW1vdmVkPW5vYC4KKworLS1jb2xvci1tb3ZlZC13cz08bW9kZXM+OjoKKwlUaGlzIGNvbmZpZ3VyZXMgaG93IHdoaXRlc3BhY2UgaXMgaWdub3JlZCB3aGVuIHBlcmZvcm1pbmcgdGhlCisJbW92ZSBkZXRlY3Rpb24gZm9yIGAtLWNvbG9yLW1vdmVkYC4KK2lmZGVmOjpnaXQtZGlmZltdCisJSXQgY2FuIGJlIHNldCBieSB0aGUgYGRpZmYuY29sb3JNb3ZlZFdTYCBjb25maWd1cmF0aW9uIHNldHRpbmcuCitlbmRpZjo6Z2l0LWRpZmZbXQorCVRoZXNlIG1vZGVzIGNhbiBiZSBnaXZlbiBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0OgorKworLS0KK25vOjoKKwlEbyBub3QgaWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBwZXJmb3JtaW5nIG1vdmUgZGV0ZWN0aW9uLgoraWdub3JlLXNwYWNlLWF0LWVvbDo6CisJSWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSBhdCBFT0wuCitpZ25vcmUtc3BhY2UtY2hhbmdlOjoKKwlJZ25vcmUgY2hhbmdlcyBpbiBhbW91bnQgb2Ygd2hpdGVzcGFjZS4gIFRoaXMgaWdub3JlcyB3aGl0ZXNwYWNlCisJYXQgbGluZSBlbmQsIGFuZCBjb25zaWRlcnMgYWxsIG90aGVyIHNlcXVlbmNlcyBvZiBvbmUgb3IKKwltb3JlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0byBiZSBlcXVpdmFsZW50LgoraWdub3JlLWFsbC1zcGFjZTo6CisJSWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgbGluZXMuIFRoaXMgaWdub3JlcyBkaWZmZXJlbmNlcworCWV2ZW4gaWYgb25lIGxpbmUgaGFzIHdoaXRlc3BhY2Ugd2hlcmUgdGhlIG90aGVyIGxpbmUgaGFzIG5vbmUuCithbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2U6OgorCUluaXRpYWxseSBpZ25vcmUgYW55IHdoaXRlc3BhY2UgaW4gdGhlIG1vdmUgZGV0ZWN0aW9uLCB0aGVuCisJZ3JvdXAgdGhlIG1vdmVkIGNvZGUgYmxvY2tzIG9ubHkgaW50byBhIGJsb2NrIGlmIHRoZSBjaGFuZ2UgaW4KKwl3aGl0ZXNwYWNlIGlzIHRoZSBzYW1lIHBlciBsaW5lLiBUaGlzIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZQorCW90aGVyIG1vZGVzLgorLS0KKworLS1uby1jb2xvci1tb3ZlZC13czo6CisJRG8gbm90IGlnbm9yZSB3aGl0ZXNwYWNlIHdoZW4gcGVyZm9ybWluZyBtb3ZlIGRldGVjdGlvbi4gVGhpcyBjYW4gYmUKKwl1c2VkIHRvIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIEl0IGlzIHRoZSBzYW1lIGFzCisJYC0tY29sb3ItbW92ZWQtd3M9bm9gLgorCistLXdvcmQtZGlmZls9PG1vZGU+XTo6CisJU2hvdyBhIHdvcmQgZGlmZiwgdXNpbmcgdGhlIDxtb2RlPiB0byBkZWxpbWl0IGNoYW5nZWQgd29yZHMuCisJQnkgZGVmYXVsdCwgd29yZHMgYXJlIGRlbGltaXRlZCBieSB3aGl0ZXNwYWNlOyBzZWUKKwlgLS13b3JkLWRpZmYtcmVnZXhgIGJlbG93LiAgVGhlIDxtb2RlPiBkZWZhdWx0cyB0byAncGxhaW4nLCBhbmQKKwltdXN0IGJlIG9uZSBvZjoKKysKKy0tCitjb2xvcjo6CisJSGlnaGxpZ2h0IGNoYW5nZWQgd29yZHMgdXNpbmcgb25seSBjb2xvcnMuICBJbXBsaWVzIGAtLWNvbG9yYC4KK3BsYWluOjoKKwlTaG93IHdvcmRzIGFzIGBbLXJlbW92ZWQtXWAgYW5kIGB7K2FkZGVkK31gLiAgTWFrZXMgbm8KKwlhdHRlbXB0cyB0byBlc2NhcGUgdGhlIGRlbGltaXRlcnMgaWYgdGhleSBhcHBlYXIgaW4gdGhlIGlucHV0LAorCXNvIHRoZSBvdXRwdXQgbWF5IGJlIGFtYmlndW91cy4KK3BvcmNlbGFpbjo6CisJVXNlIGEgc3BlY2lhbCBsaW5lLWJhc2VkIGZvcm1hdCBpbnRlbmRlZCBmb3Igc2NyaXB0CisJY29uc3VtcHRpb24uICBBZGRlZC9yZW1vdmVkL3VuY2hhbmdlZCBydW5zIGFyZSBwcmludGVkIGluIHRoZQorCXVzdWFsIHVuaWZpZWQgZGlmZiBmb3JtYXQsIHN0YXJ0aW5nIHdpdGggYSBgK2AvYC1gL2AgYAorCWNoYXJhY3RlciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lIGFuZCBleHRlbmRpbmcgdG8gdGhlCisJZW5kIG9mIHRoZSBsaW5lLiAgTmV3bGluZXMgaW4gdGhlIGlucHV0IGFyZSByZXByZXNlbnRlZCBieSBhCisJdGlsZGUgYH5gIG9uIGEgbGluZSBvZiBpdHMgb3duLgorbm9uZTo6CisJRGlzYWJsZSB3b3JkIGRpZmYgYWdhaW4uCistLQorKworTm90ZSB0aGF0IGRlc3BpdGUgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IG1vZGUsIGNvbG9yIGlzIHVzZWQgdG8KK2hpZ2hsaWdodCB0aGUgY2hhbmdlZCBwYXJ0cyBpbiBhbGwgbW9kZXMgaWYgZW5hYmxlZC4KKworLS13b3JkLWRpZmYtcmVnZXg9PHJlZ2V4Pjo6CisJVXNlIDxyZWdleD4gdG8gZGVjaWRlIHdoYXQgYSB3b3JkIGlzLCBpbnN0ZWFkIG9mIGNvbnNpZGVyaW5nCisJcnVucyBvZiBub24td2hpdGVzcGFjZSB0byBiZSBhIHdvcmQuICBBbHNvIGltcGxpZXMKKwlgLS13b3JkLWRpZmZgIHVubGVzcyBpdCB3YXMgYWxyZWFkeSBlbmFibGVkLgorKworRXZlcnkgbm9uLW92ZXJsYXBwaW5nIG1hdGNoIG9mIHRoZQorPHJlZ2V4PiBpcyBjb25zaWRlcmVkIGEgd29yZC4gIEFueXRoaW5nIGJldHdlZW4gdGhlc2UgbWF0Y2hlcyBpcworY29uc2lkZXJlZCB3aGl0ZXNwYWNlIGFuZCBpZ25vcmVkKCEpIGZvciB0aGUgcHVycG9zZXMgb2YgZmluZGluZworZGlmZmVyZW5jZXMuICBZb3UgbWF5IHdhbnQgdG8gYXBwZW5kIGB8W15bOnNwYWNlOl1dYCB0byB5b3VyIHJlZ3VsYXIKK2V4cHJlc3Npb24gdG8gbWFrZSBzdXJlIHRoYXQgaXQgbWF0Y2hlcyBhbGwgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycy4KK0EgbWF0Y2ggdGhhdCBjb250YWlucyBhIG5ld2xpbmUgaXMgc2lsZW50bHkgdHJ1bmNhdGVkKCEpIGF0IHRoZQorbmV3bGluZS4KKysKK0ZvciBleGFtcGxlLCBgLS13b3JkLWRpZmYtcmVnZXg9LmAgd2lsbCB0cmVhdCBlYWNoIGNoYXJhY3RlciBhcyBhIHdvcmQKK2FuZCwgY29ycmVzcG9uZGluZ2x5LCBzaG93IGRpZmZlcmVuY2VzIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIuCisrCitUaGUgcmVnZXggY2FuIGFsc28gYmUgc2V0IHZpYSBhIGRpZmYgZHJpdmVyIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBzZWUKK2xpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBvciBsaW5rZ2l0OmdpdC1jb25maWdbMV0uICBHaXZpbmcgaXQgZXhwbGljaXRseQorb3ZlcnJpZGVzIGFueSBkaWZmIGRyaXZlciBvciBjb25maWd1cmF0aW9uIHNldHRpbmcuICBEaWZmIGRyaXZlcnMKK292ZXJyaWRlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisKKy0tY29sb3Itd29yZHNbPTxyZWdleD5dOjoKKwlFcXVpdmFsZW50IHRvIGAtLXdvcmQtZGlmZj1jb2xvcmAgcGx1cyAoaWYgYSByZWdleCB3YXMKKwlzcGVjaWZpZWQpIGAtLXdvcmQtZGlmZi1yZWdleD08cmVnZXg+YC4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworLS1uby1yZW5hbWVzOjoKKwlUdXJuIG9mZiByZW5hbWUgZGV0ZWN0aW9uLCBldmVuIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24KKwlmaWxlIGdpdmVzIHRoZSBkZWZhdWx0IHRvIGRvIHNvLgorCistLVtuby1dcmVuYW1lLWVtcHR5OjoKKwlXaGV0aGVyIHRvIHVzZSBlbXB0eSBibG9icyBhcyByZW5hbWUgc291cmNlLgorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorLS1jaGVjazo6CisJV2FybiBpZiBjaGFuZ2VzIGludHJvZHVjZSBjb25mbGljdCBtYXJrZXJzIG9yIHdoaXRlc3BhY2UgZXJyb3JzLgorCVdoYXQgYXJlIGNvbnNpZGVyZWQgd2hpdGVzcGFjZSBlcnJvcnMgaXMgY29udHJvbGxlZCBieSBgY29yZS53aGl0ZXNwYWNlYAorCWNvbmZpZ3VyYXRpb24uICBCeSBkZWZhdWx0LCB0cmFpbGluZyB3aGl0ZXNwYWNlcyAoaW5jbHVkaW5nCisJbGluZXMgdGhhdCBjb25zaXN0IHNvbGVseSBvZiB3aGl0ZXNwYWNlcykgYW5kIGEgc3BhY2UgY2hhcmFjdGVyCisJdGhhdCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHRhYiBjaGFyYWN0ZXIgaW5zaWRlIHRoZQorCWluaXRpYWwgaW5kZW50IG9mIHRoZSBsaW5lIGFyZSBjb25zaWRlcmVkIHdoaXRlc3BhY2UgZXJyb3JzLgorCUV4aXRzIHdpdGggbm9uLXplcm8gc3RhdHVzIGlmIHByb2JsZW1zIGFyZSBmb3VuZC4gTm90IGNvbXBhdGlibGUKKwl3aXRoIC0tZXhpdC1jb2RlLgorCistLXdzLWVycm9yLWhpZ2hsaWdodD08a2luZD46OgorCUhpZ2hsaWdodCB3aGl0ZXNwYWNlIGVycm9ycyBpbiB0aGUgYGNvbnRleHRgLCBgb2xkYCBvciBgbmV3YAorCWxpbmVzIG9mIHRoZSBkaWZmLiAgTXVsdGlwbGUgdmFsdWVzIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWEsCisJYG5vbmVgIHJlc2V0cyBwcmV2aW91cyB2YWx1ZXMsIGBkZWZhdWx0YCByZXNldCB0aGUgbGlzdCB0bworCWBuZXdgIGFuZCBgYWxsYCBpcyBhIHNob3J0aGFuZCBmb3IgYG9sZCxuZXcsY29udGV4dGAuICBXaGVuCisJdGhpcyBvcHRpb24gaXMgbm90IGdpdmVuLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKwlgZGlmZi53c0Vycm9ySGlnaGxpZ2h0YCBpcyBub3Qgc2V0LCBvbmx5IHdoaXRlc3BhY2UgZXJyb3JzIGluCisJYG5ld2AgbGluZXMgYXJlIGhpZ2hsaWdodGVkLiBUaGUgd2hpdGVzcGFjZSBlcnJvcnMgYXJlIGNvbG9yZWQKKwl3aXRoIGBjb2xvci5kaWZmLndoaXRlc3BhY2VgLgorCitlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKKy0tZnVsbC1pbmRleDo6CisJSW5zdGVhZCBvZiB0aGUgZmlyc3QgaGFuZGZ1bCBvZiBjaGFyYWN0ZXJzLCBzaG93IHRoZSBmdWxsCisJcHJlLSBhbmQgcG9zdC1pbWFnZSBibG9iIG9iamVjdCBuYW1lcyBvbiB0aGUgImluZGV4IgorCWxpbmUgd2hlbiBnZW5lcmF0aW5nIHBhdGNoIGZvcm1hdCBvdXRwdXQuCisKKy0tYmluYXJ5OjoKKwlJbiBhZGRpdGlvbiB0byBgLS1mdWxsLWluZGV4YCwgb3V0cHV0IGEgYmluYXJ5IGRpZmYgdGhhdAorCWNhbiBiZSBhcHBsaWVkIHdpdGggYGdpdC1hcHBseWAuIEltcGxpZXMgYC0tcGF0Y2hgLgorCistLWFiYnJldls9PG4+XTo6CisJSW5zdGVhZCBvZiBzaG93aW5nIHRoZSBmdWxsIDQwLWJ5dGUgaGV4YWRlY2ltYWwgb2JqZWN0CisJbmFtZSBpbiBkaWZmLXJhdyBmb3JtYXQgb3V0cHV0IGFuZCBkaWZmLXRyZWUgaGVhZGVyCisJbGluZXMsIHNob3cgb25seSBhIHBhcnRpYWwgcHJlZml4LiAgVGhpcyBpcworCWluZGVwZW5kZW50IG9mIHRoZSBgLS1mdWxsLWluZGV4YCBvcHRpb24gYWJvdmUsIHdoaWNoIGNvbnRyb2xzCisJdGhlIGRpZmYtcGF0Y2ggb3V0cHV0IGZvcm1hdC4gIE5vbiBkZWZhdWx0IG51bWJlciBvZgorCWRpZ2l0cyBjYW4gYmUgc3BlY2lmaWVkIHdpdGggYC0tYWJicmV2PTxuPmAuCisKKy1CWzxuPl1bLzxtPl06OgorLS1icmVhay1yZXdyaXRlc1s9WzxuPl1bLzxtPl1dOjoKKwlCcmVhayBjb21wbGV0ZSByZXdyaXRlIGNoYW5nZXMgaW50byBwYWlycyBvZiBkZWxldGUgYW5kCisJY3JlYXRlLiBUaGlzIHNlcnZlcyB0d28gcHVycG9zZXM6CisrCitJdCBhZmZlY3RzIHRoZSB3YXkgYSBjaGFuZ2UgdGhhdCBhbW91bnRzIHRvIGEgdG90YWwgcmV3cml0ZSBvZiBhIGZpbGUKK25vdCBhcyBhIHNlcmllcyBvZiBkZWxldGlvbiBhbmQgaW5zZXJ0aW9uIG1peGVkIHRvZ2V0aGVyIHdpdGggYSB2ZXJ5CitmZXcgbGluZXMgdGhhdCBoYXBwZW4gdG8gbWF0Y2ggdGV4dHVhbGx5IGFzIHRoZSBjb250ZXh0LCBidXQgYXMgYQorc2luZ2xlIGRlbGV0aW9uIG9mIGV2ZXJ5dGhpbmcgb2xkIGZvbGxvd2VkIGJ5IGEgc2luZ2xlIGluc2VydGlvbiBvZgorZXZlcnl0aGluZyBuZXcsIGFuZCB0aGUgbnVtYmVyIGBtYCBjb250cm9scyB0aGlzIGFzcGVjdCBvZiB0aGUgLUIKK29wdGlvbiAoZGVmYXVsdHMgdG8gNjAlKS4gYC1CLzcwJWAgc3BlY2lmaWVzIHRoYXQgbGVzcyB0aGFuIDMwJSBvZiB0aGUKK29yaWdpbmFsIHNob3VsZCByZW1haW4gaW4gdGhlIHJlc3VsdCBmb3IgR2l0IHRvIGNvbnNpZGVyIGl0IGEgdG90YWwKK3Jld3JpdGUgKGkuZS4gb3RoZXJ3aXNlIHRoZSByZXN1bHRpbmcgcGF0Y2ggd2lsbCBiZSBhIHNlcmllcyBvZgorZGVsZXRpb24gYW5kIGluc2VydGlvbiBtaXhlZCB0b2dldGhlciB3aXRoIGNvbnRleHQgbGluZXMpLgorKworV2hlbiB1c2VkIHdpdGggLU0sIGEgdG90YWxseS1yZXdyaXR0ZW4gZmlsZSBpcyBhbHNvIGNvbnNpZGVyZWQgYXMgdGhlCitzb3VyY2Ugb2YgYSByZW5hbWUgKHVzdWFsbHkgLU0gb25seSBjb25zaWRlcnMgYSBmaWxlIHRoYXQgZGlzYXBwZWFyZWQKK2FzIHRoZSBzb3VyY2Ugb2YgYSByZW5hbWUpLCBhbmQgdGhlIG51bWJlciBgbmAgY29udHJvbHMgdGhpcyBhc3BlY3Qgb2YKK3RoZSAtQiBvcHRpb24gKGRlZmF1bHRzIHRvIDUwJSkuIGAtQjIwJWAgc3BlY2lmaWVzIHRoYXQgYSBjaGFuZ2Ugd2l0aAorYWRkaXRpb24gYW5kIGRlbGV0aW9uIGNvbXBhcmVkIHRvIDIwJSBvciBtb3JlIG9mIHRoZSBmaWxlJ3Mgc2l6ZSBhcmUKK2VsaWdpYmxlIGZvciBiZWluZyBwaWNrZWQgdXAgYXMgYSBwb3NzaWJsZSBzb3VyY2Ugb2YgYSByZW5hbWUgdG8KK2Fub3RoZXIgZmlsZS4KKworLU1bPG4+XTo6CistLWZpbmQtcmVuYW1lc1s9PG4+XTo6CitpZm5kZWY6OmdpdC1sb2dbXQorCURldGVjdCByZW5hbWVzLgorZW5kaWY6OmdpdC1sb2dbXQoraWZkZWY6OmdpdC1sb2dbXQorCUlmIGdlbmVyYXRpbmcgZGlmZnMsIGRldGVjdCBhbmQgcmVwb3J0IHJlbmFtZXMgZm9yIGVhY2ggY29tbWl0LgorCUZvciBmb2xsb3dpbmcgZmlsZXMgYWNyb3NzIHJlbmFtZXMgd2hpbGUgdHJhdmVyc2luZyBoaXN0b3J5LCBzZWUKKwlgLS1mb2xsb3dgLgorZW5kaWY6OmdpdC1sb2dbXQorCUlmIGBuYCBpcyBzcGVjaWZpZWQsIGl0IGlzIGEgdGhyZXNob2xkIG9uIHRoZSBzaW1pbGFyaXR5CisJaW5kZXggKGkuZS4gYW1vdW50IG9mIGFkZGl0aW9uL2RlbGV0aW9ucyBjb21wYXJlZCB0byB0aGUKKwlmaWxlJ3Mgc2l6ZSkuIEZvciBleGFtcGxlLCBgLU05MCVgIG1lYW5zIEdpdCBzaG91bGQgY29uc2lkZXIgYQorCWRlbGV0ZS9hZGQgcGFpciB0byBiZSBhIHJlbmFtZSBpZiBtb3JlIHRoYW4gOTAlIG9mIHRoZSBmaWxlCisJaGFzbid0IGNoYW5nZWQuICBXaXRob3V0IGEgYCVgIHNpZ24sIHRoZSBudW1iZXIgaXMgdG8gYmUgcmVhZCBhcworCWEgZnJhY3Rpb24sIHdpdGggYSBkZWNpbWFsIHBvaW50IGJlZm9yZSBpdC4gIEkuZS4sIGAtTTVgIGJlY29tZXMKKwkwLjUsIGFuZCBpcyB0aHVzIHRoZSBzYW1lIGFzIGAtTTUwJWAuICBTaW1pbGFybHksIGAtTTA1YCBpcworCXRoZSBzYW1lIGFzIGAtTTUlYC4gIFRvIGxpbWl0IGRldGVjdGlvbiB0byBleGFjdCByZW5hbWVzLCB1c2UKKwlgLU0xMDAlYC4gIFRoZSBkZWZhdWx0IHNpbWlsYXJpdHkgaW5kZXggaXMgNTAlLgorCistQ1s8bj5dOjoKKy0tZmluZC1jb3BpZXNbPTxuPl06OgorCURldGVjdCBjb3BpZXMgYXMgd2VsbCBhcyByZW5hbWVzLiAgU2VlIGFsc28gYC0tZmluZC1jb3BpZXMtaGFyZGVyYC4KKwlJZiBgbmAgaXMgc3BlY2lmaWVkLCBpdCBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgYC1NPG4+YC4KKworLS1maW5kLWNvcGllcy1oYXJkZXI6OgorCUZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBieSBkZWZhdWx0LCBgLUNgIG9wdGlvbiBmaW5kcyBjb3BpZXMgb25seQorCWlmIHRoZSBvcmlnaW5hbCBmaWxlIG9mIHRoZSBjb3B5IHdhcyBtb2RpZmllZCBpbiB0aGUgc2FtZQorCWNoYW5nZXNldC4gIFRoaXMgZmxhZyBtYWtlcyB0aGUgY29tbWFuZAorCWluc3BlY3QgdW5tb2RpZmllZCBmaWxlcyBhcyBjYW5kaWRhdGVzIGZvciB0aGUgc291cmNlIG9mCisJY29weS4gIFRoaXMgaXMgYSB2ZXJ5IGV4cGVuc2l2ZSBvcGVyYXRpb24gZm9yIGxhcmdlCisJcHJvamVjdHMsIHNvIHVzZSBpdCB3aXRoIGNhdXRpb24uICBHaXZpbmcgbW9yZSB0aGFuIG9uZQorCWAtQ2Agb3B0aW9uIGhhcyB0aGUgc2FtZSBlZmZlY3QuCisKKy1EOjoKKy0taXJyZXZlcnNpYmxlLWRlbGV0ZTo6CisJT21pdCB0aGUgcHJlaW1hZ2UgZm9yIGRlbGV0ZXMsIGkuZS4gcHJpbnQgb25seSB0aGUgaGVhZGVyIGJ1dCBub3QKKwl0aGUgZGlmZiBiZXR3ZWVuIHRoZSBwcmVpbWFnZSBhbmQgYC9kZXYvbnVsbGAuIFRoZSByZXN1bHRpbmcgcGF0Y2gKKwlpcyBub3QgbWVhbnQgdG8gYmUgYXBwbGllZCB3aXRoIGBwYXRjaGAgb3IgYGdpdCBhcHBseWA7IHRoaXMgaXMKKwlzb2xlbHkgZm9yIHBlb3BsZSB3aG8gd2FudCB0byBqdXN0IGNvbmNlbnRyYXRlIG9uIHJldmlld2luZyB0aGUKKwl0ZXh0IGFmdGVyIHRoZSBjaGFuZ2UuIEluIGFkZGl0aW9uLCB0aGUgb3V0cHV0IG9idmlvdXNseSBsYWNrcworCWVub3VnaCBpbmZvcm1hdGlvbiB0byBhcHBseSBzdWNoIGEgcGF0Y2ggaW4gcmV2ZXJzZSwgZXZlbiBtYW51YWxseSwKKwloZW5jZSB0aGUgbmFtZSBvZiB0aGUgb3B0aW9uLgorKworV2hlbiB1c2VkIHRvZ2V0aGVyIHdpdGggYC1CYCwgb21pdCBhbHNvIHRoZSBwcmVpbWFnZSBpbiB0aGUgZGVsZXRpb24gcGFydAorb2YgYSBkZWxldGUvY3JlYXRlIHBhaXIuCisKKy1sPG51bT46OgorCVRoZSBgLU1gIGFuZCBgLUNgIG9wdGlvbnMgcmVxdWlyZSBPKG5eMikgcHJvY2Vzc2luZyB0aW1lIHdoZXJlIG4KKwlpcyB0aGUgbnVtYmVyIG9mIHBvdGVudGlhbCByZW5hbWUvY29weSB0YXJnZXRzLiAgVGhpcworCW9wdGlvbiBwcmV2ZW50cyByZW5hbWUvY29weSBkZXRlY3Rpb24gZnJvbSBydW5uaW5nIGlmCisJdGhlIG51bWJlciBvZiByZW5hbWUvY29weSB0YXJnZXRzIGV4Y2VlZHMgdGhlIHNwZWNpZmllZAorCW51bWJlci4KKworaWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KKy0tZGlmZi1maWx0ZXI9WyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dOjoKKwlTZWxlY3Qgb25seSBmaWxlcyB0aGF0IGFyZSBBZGRlZCAoYEFgKSwgQ29waWVkIChgQ2ApLAorCURlbGV0ZWQgKGBEYCksIE1vZGlmaWVkIChgTWApLCBSZW5hbWVkIChgUmApLCBoYXZlIHRoZWlyCisJdHlwZSAoaS5lLiByZWd1bGFyIGZpbGUsIHN5bWxpbmssIHN1Ym1vZHVsZSwgLi4uKSBjaGFuZ2VkIChgVGApLAorCWFyZSBVbm1lcmdlZCAoYFVgKSwgYXJlCisJVW5rbm93biAoYFhgKSwgb3IgaGF2ZSBoYWQgdGhlaXIgcGFpcmluZyBCcm9rZW4gKGBCYCkuCisJQW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmaWx0ZXIgY2hhcmFjdGVycyAoaW5jbHVkaW5nIG5vbmUpIGNhbiBiZSB1c2VkLgorCVdoZW4gYCpgIChBbGwtb3Itbm9uZSkgaXMgYWRkZWQgdG8gdGhlIGNvbWJpbmF0aW9uLCBhbGwKKwlwYXRocyBhcmUgc2VsZWN0ZWQgaWYgdGhlcmUgaXMgYW55IGZpbGUgdGhhdCBtYXRjaGVzCisJb3RoZXIgY3JpdGVyaWEgaW4gdGhlIGNvbXBhcmlzb247IGlmIHRoZXJlIGlzIG5vIGZpbGUKKwl0aGF0IG1hdGNoZXMgb3RoZXIgY3JpdGVyaWEsIG5vdGhpbmcgaXMgc2VsZWN0ZWQuCisrCitBbHNvLCB0aGVzZSB1cHBlci1jYXNlIGxldHRlcnMgY2FuIGJlIGRvd25jYXNlZCB0byBleGNsdWRlLiAgRS5nLgorYC0tZGlmZi1maWx0ZXI9YWRgIGV4Y2x1ZGVzIGFkZGVkIGFuZCBkZWxldGVkIHBhdGhzLgorKworTm90ZSB0aGF0IG5vdCBhbGwgZGlmZnMgY2FuIGZlYXR1cmUgYWxsIHR5cGVzLiBGb3IgaW5zdGFuY2UsIGRpZmZzCitmcm9tIHRoZSBpbmRleCB0byB0aGUgd29ya2luZyB0cmVlIGNhbiBuZXZlciBoYXZlIEFkZGVkIGVudHJpZXMKKyhiZWNhdXNlIHRoZSBzZXQgb2YgcGF0aHMgaW5jbHVkZWQgaW4gdGhlIGRpZmYgaXMgbGltaXRlZCBieSB3aGF0IGlzIGluCit0aGUgaW5kZXgpLiAgU2ltaWxhcmx5LCBjb3BpZWQgYW5kIHJlbmFtZWQgZW50cmllcyBjYW5ub3QgYXBwZWFyIGlmCitkZXRlY3Rpb24gZm9yIHRob3NlIHR5cGVzIGlzIGRpc2FibGVkLgorCistUzxzdHJpbmc+OjoKKwlMb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mCisJdGhlIHNwZWNpZmllZCBzdHJpbmcgKGkuZS4gYWRkaXRpb24vZGVsZXRpb24pIGluIGEgZmlsZS4KKwlJbnRlbmRlZCBmb3IgdGhlIHNjcmlwdGVyJ3MgdXNlLgorKworSXQgaXMgdXNlZnVsIHdoZW4geW91J3JlIGxvb2tpbmcgZm9yIGFuIGV4YWN0IGJsb2NrIG9mIGNvZGUgKGxpa2UgYQorc3RydWN0KSwgYW5kIHdhbnQgdG8ga25vdyB0aGUgaGlzdG9yeSBvZiB0aGF0IGJsb2NrIHNpbmNlIGl0IGZpcnN0CitjYW1lIGludG8gYmVpbmc6IHVzZSB0aGUgZmVhdHVyZSBpdGVyYXRpdmVseSB0byBmZWVkIHRoZSBpbnRlcmVzdGluZworYmxvY2sgaW4gdGhlIHByZWltYWdlIGJhY2sgaW50byBgLVNgLCBhbmQga2VlcCBnb2luZyB1bnRpbCB5b3UgZ2V0IHRoZQordmVyeSBmaXJzdCB2ZXJzaW9uIG9mIHRoZSBibG9jay4KKysKK0JpbmFyeSBmaWxlcyBhcmUgc2VhcmNoZWQgYXMgd2VsbC4KKworLUc8cmVnZXg+OjoKKwlMb29rIGZvciBkaWZmZXJlbmNlcyB3aG9zZSBwYXRjaCB0ZXh0IGNvbnRhaW5zIGFkZGVkL3JlbW92ZWQKKwlsaW5lcyB0aGF0IG1hdGNoIDxyZWdleD4uCisrCitUbyBpbGx1c3RyYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYC1TPHJlZ2V4PiAtLXBpY2theGUtcmVnZXhgIGFuZAorYC1HPHJlZ2V4PmAsIGNvbnNpZGVyIGEgY29tbWl0IHdpdGggdGhlIGZvbGxvd2luZyBkaWZmIGluIHRoZSBzYW1lCitmaWxlOgorKworLS0tLQorKyAgICByZXR1cm4gZnJvdHoobml0Zm9sLCB0d28tPnB0ciwgMSwgMCk7CisuLi4KKy0gICAgaGl0ID0gZnJvdHoobml0Zm9sLCBtZjIucHRyLCAxLCAwKTsKKy0tLS0KKysKK1doaWxlIGBnaXQgbG9nIC1HImZyb3R6XChuaXRmb2wiYCB3aWxsIHNob3cgdGhpcyBjb21taXQsIGBnaXQgbG9nCistUyJmcm90elwobml0Zm9sIiAtLXBpY2theGUtcmVnZXhgIHdpbGwgbm90IChiZWNhdXNlIHRoZSBudW1iZXIgb2YKK29jY3VycmVuY2VzIG9mIHRoYXQgc3RyaW5nIGRpZCBub3QgY2hhbmdlKS4KKysKK1VubGVzcyBgLS10ZXh0YCBpcyBzdXBwbGllZCBwYXRjaGVzIG9mIGJpbmFyeSBmaWxlcyB3aXRob3V0IGEgdGV4dGNvbnYKK2ZpbHRlciB3aWxsIGJlIGlnbm9yZWQuCisrCitTZWUgdGhlICdwaWNrYXhlJyBlbnRyeSBpbiBsaW5rZ2l0OmdpdGRpZmZjb3JlWzddIGZvciBtb3JlCitpbmZvcm1hdGlvbi4KKworLS1maW5kLW9iamVjdD08b2JqZWN0LWlkPjo6CisJTG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZgorCXRoZSBzcGVjaWZpZWQgb2JqZWN0LiBTaW1pbGFyIHRvIGAtU2AsIGp1c3QgdGhlIGFyZ3VtZW50IGlzIGRpZmZlcmVudAorCWluIHRoYXQgaXQgZG9lc24ndCBzZWFyY2ggZm9yIGEgc3BlY2lmaWMgc3RyaW5nIGJ1dCBmb3IgYSBzcGVjaWZpYworCW9iamVjdCBpZC4KKysKK1RoZSBvYmplY3QgY2FuIGJlIGEgYmxvYiBvciBhIHN1Ym1vZHVsZSBjb21taXQuIEl0IGltcGxpZXMgdGhlIGAtdGAgb3B0aW9uIGluCitgZ2l0LWxvZ2AgdG8gYWxzbyBmaW5kIHRyZWVzLgorCistLXBpY2theGUtYWxsOjoKKwlXaGVuIGAtU2Agb3IgYC1HYCBmaW5kcyBhIGNoYW5nZSwgc2hvdyBhbGwgdGhlIGNoYW5nZXMgaW4gdGhhdAorCWNoYW5nZXNldCwgbm90IGp1c3QgdGhlIGZpbGVzIHRoYXQgY29udGFpbiB0aGUgY2hhbmdlCisJaW4gPHN0cmluZz4uCisKKy0tcGlja2F4ZS1yZWdleDo6CisJVHJlYXQgdGhlIDxzdHJpbmc+IGdpdmVuIHRvIGAtU2AgYXMgYW4gZXh0ZW5kZWQgUE9TSVggcmVndWxhcgorCWV4cHJlc3Npb24gdG8gbWF0Y2guCisKK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworLU88b3JkZXJmaWxlPjo6CisJQ29udHJvbCB0aGUgb3JkZXIgaW4gd2hpY2ggZmlsZXMgYXBwZWFyIGluIHRoZSBvdXRwdXQuCisJVGhpcyBvdmVycmlkZXMgdGhlIGBkaWZmLm9yZGVyRmlsZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorCShzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gIFRvIGNhbmNlbCBgZGlmZi5vcmRlckZpbGVgLAorCXVzZSBgLU8vZGV2L251bGxgLgorKworVGhlIG91dHB1dCBvcmRlciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciBvZiBnbG9iIHBhdHRlcm5zIGluCis8b3JkZXJmaWxlPi4KK0FsbCBmaWxlcyB3aXRoIHBhdGhuYW1lcyB0aGF0IG1hdGNoIHRoZSBmaXJzdCBwYXR0ZXJuIGFyZSBvdXRwdXQKK2ZpcnN0LCBhbGwgZmlsZXMgd2l0aCBwYXRobmFtZXMgdGhhdCBtYXRjaCB0aGUgc2Vjb25kIHBhdHRlcm4gKGJ1dCBub3QKK3RoZSBmaXJzdCkgYXJlIG91dHB1dCBuZXh0LCBhbmQgc28gb24uCitBbGwgZmlsZXMgd2l0aCBwYXRobmFtZXMgdGhhdCBkbyBub3QgbWF0Y2ggYW55IHBhdHRlcm4gYXJlIG91dHB1dAorbGFzdCwgYXMgaWYgdGhlcmUgd2FzIGFuIGltcGxpY2l0IG1hdGNoLWFsbCBwYXR0ZXJuIGF0IHRoZSBlbmQgb2YgdGhlCitmaWxlLgorSWYgbXVsdGlwbGUgcGF0aG5hbWVzIGhhdmUgdGhlIHNhbWUgcmFuayAodGhleSBtYXRjaCB0aGUgc2FtZSBwYXR0ZXJuCitidXQgbm8gZWFybGllciBwYXR0ZXJucyksIHRoZWlyIG91dHB1dCBvcmRlciByZWxhdGl2ZSB0byBlYWNoIG90aGVyIGlzCit0aGUgbm9ybWFsIG9yZGVyLgorKworPG9yZGVyZmlsZT4gaXMgcGFyc2VkIGFzIGZvbGxvd3M6CisrCistLQorIC0gQmxhbmsgbGluZXMgYXJlIGlnbm9yZWQsIHNvIHRoZXkgY2FuIGJlIHVzZWQgYXMgc2VwYXJhdG9ycyBmb3IKKyAgIHJlYWRhYmlsaXR5LgorCisgLSBMaW5lcyBzdGFydGluZyB3aXRoIGEgaGFzaCAoImAjYCIpIGFyZSBpZ25vcmVkLCBzbyB0aGV5IGNhbiBiZSB1c2VkCisgICBmb3IgY29tbWVudHMuICBBZGQgYSBiYWNrc2xhc2ggKCJgXGAiKSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICAgcGF0dGVybiBpZiBpdCBzdGFydHMgd2l0aCBhIGhhc2guCisKKyAtIEVhY2ggb3RoZXIgbGluZSBjb250YWlucyBhIHNpbmdsZSBwYXR0ZXJuLgorLS0KKysKK1BhdHRlcm5zIGhhdmUgdGhlIHNhbWUgc3ludGF4IGFuZCBzZW1hbnRpY3MgYXMgcGF0dGVybnMgdXNlZCBmb3IKK2ZubWF0Y2goMykgd2l0aG91dCB0aGUgRk5NX1BBVEhOQU1FIGZsYWcsIGV4Y2VwdCBhIHBhdGhuYW1lIGFsc28KK21hdGNoZXMgYSBwYXR0ZXJuIGlmIHJlbW92aW5nIGFueSBudW1iZXIgb2YgdGhlIGZpbmFsIHBhdGhuYW1lCitjb21wb25lbnRzIG1hdGNoZXMgdGhlIHBhdHRlcm4uICBGb3IgZXhhbXBsZSwgdGhlIHBhdHRlcm4gImBmb28qYmFyYCIKK21hdGNoZXMgImBmb29hc2RmYmFyYCIgYW5kICJgZm9vL2Jhci9iYXovYXNkZmAiIGJ1dCBub3QgImBmb29iYXJ4YCIuCisKK2lmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCistUjo6CisJU3dhcCB0d28gaW5wdXRzOyB0aGF0IGlzLCBzaG93IGRpZmZlcmVuY2VzIGZyb20gaW5kZXggb3IKKwlvbi1kaXNrIGZpbGUgdG8gdHJlZSBjb250ZW50cy4KKworLS1yZWxhdGl2ZVs9PHBhdGg+XTo6CisJV2hlbiBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdCwgaXQgY2FuIGJlCisJdG9sZCB0byBleGNsdWRlIGNoYW5nZXMgb3V0c2lkZSB0aGUgZGlyZWN0b3J5IGFuZCBzaG93CisJcGF0aG5hbWVzIHJlbGF0aXZlIHRvIGl0IHdpdGggdGhpcyBvcHRpb24uICBXaGVuIHlvdSBhcmUKKwlub3QgaW4gYSBzdWJkaXJlY3RvcnkgKGUuZy4gaW4gYSBiYXJlIHJlcG9zaXRvcnkpLCB5b3UKKwljYW4gbmFtZSB3aGljaCBzdWJkaXJlY3RvcnkgdG8gbWFrZSB0aGUgb3V0cHV0IHJlbGF0aXZlCisJdG8gYnkgZ2l2aW5nIGEgPHBhdGg+IGFzIGFuIGFyZ3VtZW50LgorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCistYTo6CistLXRleHQ6OgorCVRyZWF0IGFsbCBmaWxlcyBhcyB0ZXh0LgorCistLWlnbm9yZS1jci1hdC1lb2w6OgorCUlnbm9yZSBjYXJyaWFnZS1yZXR1cm4gYXQgdGhlIGVuZCBvZiBsaW5lIHdoZW4gZG9pbmcgYSBjb21wYXJpc29uLgorCistLWlnbm9yZS1zcGFjZS1hdC1lb2w6OgorCUlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgYXQgRU9MLgorCistYjo6CistLWlnbm9yZS1zcGFjZS1jaGFuZ2U6OgorCUlnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZXNwYWNlLiAgVGhpcyBpZ25vcmVzIHdoaXRlc3BhY2UKKwlhdCBsaW5lIGVuZCwgYW5kIGNvbnNpZGVycyBhbGwgb3RoZXIgc2VxdWVuY2VzIG9mIG9uZSBvcgorCW1vcmUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRvIGJlIGVxdWl2YWxlbnQuCisKKy13OjoKKy0taWdub3JlLWFsbC1zcGFjZTo6CisJSWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgbGluZXMuICBUaGlzIGlnbm9yZXMKKwlkaWZmZXJlbmNlcyBldmVuIGlmIG9uZSBsaW5lIGhhcyB3aGl0ZXNwYWNlIHdoZXJlIHRoZSBvdGhlcgorCWxpbmUgaGFzIG5vbmUuCisKKy0taWdub3JlLWJsYW5rLWxpbmVzOjoKKwlJZ25vcmUgY2hhbmdlcyB3aG9zZSBsaW5lcyBhcmUgYWxsIGJsYW5rLgorCistLWludGVyLWh1bmstY29udGV4dD08bGluZXM+OjoKKwlTaG93IHRoZSBjb250ZXh0IGJldHdlZW4gZGlmZiBodW5rcywgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIKKwlvZiBsaW5lcywgdGhlcmVieSBmdXNpbmcgaHVua3MgdGhhdCBhcmUgY2xvc2UgdG8gZWFjaCBvdGhlci4KKwlEZWZhdWx0cyB0byBgZGlmZi5pbnRlckh1bmtDb250ZXh0YCBvciAwIGlmIHRoZSBjb25maWcgb3B0aW9uCisJaXMgdW5zZXQuCisKKy1XOjoKKy0tZnVuY3Rpb24tY29udGV4dDo6CisJU2hvdyB3aG9sZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgb2YgY2hhbmdlcy4KKworaWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KK2lmbmRlZjo6Z2l0LWxvZ1tdCistLWV4aXQtY29kZTo6CisJTWFrZSB0aGUgcHJvZ3JhbSBleGl0IHdpdGggY29kZXMgc2ltaWxhciB0byBkaWZmKDEpLgorCVRoYXQgaXMsIGl0IGV4aXRzIHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzIGFuZAorCTAgbWVhbnMgbm8gZGlmZmVyZW5jZXMuCisKKy0tcXVpZXQ6OgorCURpc2FibGUgYWxsIG91dHB1dCBvZiB0aGUgcHJvZ3JhbS4gSW1wbGllcyBgLS1leGl0LWNvZGVgLgorZW5kaWY6OmdpdC1sb2dbXQorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCistLWV4dC1kaWZmOjoKKwlBbGxvdyBhbiBleHRlcm5hbCBkaWZmIGhlbHBlciB0byBiZSBleGVjdXRlZC4gSWYgeW91IHNldCBhbgorCWV4dGVybmFsIGRpZmYgZHJpdmVyIHdpdGggbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdLCB5b3UgbmVlZAorCXRvIHVzZSB0aGlzIG9wdGlvbiB3aXRoIGxpbmtnaXQ6Z2l0LWxvZ1sxXSBhbmQgZnJpZW5kcy4KKworLS1uby1leHQtZGlmZjo6CisJRGlzYWxsb3cgZXh0ZXJuYWwgZGlmZiBkcml2ZXJzLgorCistLXRleHRjb252OjoKKy0tbm8tdGV4dGNvbnY6OgorCUFsbG93IChvciBkaXNhbGxvdykgZXh0ZXJuYWwgdGV4dCBjb252ZXJzaW9uIGZpbHRlcnMgdG8gYmUgcnVuCisJd2hlbiBjb21wYXJpbmcgYmluYXJ5IGZpbGVzLiBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvcgorCWRldGFpbHMuIEJlY2F1c2UgdGV4dGNvbnYgZmlsdGVycyBhcmUgdHlwaWNhbGx5IGEgb25lLXdheQorCWNvbnZlcnNpb24sIHRoZSByZXN1bHRpbmcgZGlmZiBpcyBzdWl0YWJsZSBmb3IgaHVtYW4KKwljb25zdW1wdGlvbiwgYnV0IGNhbm5vdCBiZSBhcHBsaWVkLiBGb3IgdGhpcyByZWFzb24sIHRleHRjb252CisJZmlsdGVycyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IG9ubHkgZm9yIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gYW5kCisJbGlua2dpdDpnaXQtbG9nWzFdLCBidXQgbm90IGZvciBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gb3IKKwlkaWZmIHBsdW1iaW5nIGNvbW1hbmRzLgorCistLWlnbm9yZS1zdWJtb2R1bGVzWz08d2hlbj5dOjoKKwlJZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzIGluIHRoZSBkaWZmIGdlbmVyYXRpb24uIDx3aGVuPiBjYW4gYmUKKwllaXRoZXIgIm5vbmUiLCAidW50cmFja2VkIiwgImRpcnR5IiBvciAiYWxsIiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuCisJVXNpbmcgIm5vbmUiIHdpbGwgY29uc2lkZXIgdGhlIHN1Ym1vZHVsZSBtb2RpZmllZCB3aGVuIGl0IGVpdGhlciBjb250YWlucworCXVudHJhY2tlZCBvciBtb2RpZmllZCBmaWxlcyBvciBpdHMgSEVBRCBkaWZmZXJzIGZyb20gdGhlIGNvbW1pdCByZWNvcmRlZAorCWluIHRoZSBzdXBlcnByb2plY3QgYW5kIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGFueSBzZXR0aW5ncyBvZiB0aGUKKwknaWdub3JlJyBvcHRpb24gaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdIG9yIGxpbmtnaXQ6Z2l0bW9kdWxlc1s1XS4gV2hlbgorCSJ1bnRyYWNrZWQiIGlzIHVzZWQgc3VibW9kdWxlcyBhcmUgbm90IGNvbnNpZGVyZWQgZGlydHkgd2hlbiB0aGV5IG9ubHkKKwljb250YWluIHVudHJhY2tlZCBjb250ZW50IChidXQgdGhleSBhcmUgc3RpbGwgc2Nhbm5lZCBmb3IgbW9kaWZpZWQKKwljb250ZW50KS4gVXNpbmcgImRpcnR5IiBpZ25vcmVzIGFsbCBjaGFuZ2VzIHRvIHRoZSB3b3JrIHRyZWUgb2Ygc3VibW9kdWxlcywKKwlvbmx5IGNoYW5nZXMgdG8gdGhlIGNvbW1pdHMgc3RvcmVkIGluIHRoZSBzdXBlcnByb2plY3QgYXJlIHNob3duICh0aGlzIHdhcworCXRoZSBiZWhhdmlvciB1bnRpbCAxLjcuMCkuIFVzaW5nICJhbGwiIGhpZGVzIGFsbCBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMuCisKKy0tc3JjLXByZWZpeD08cHJlZml4Pjo6CisJU2hvdyB0aGUgZ2l2ZW4gc291cmNlIHByZWZpeCBpbnN0ZWFkIG9mICJhLyIuCisKKy0tZHN0LXByZWZpeD08cHJlZml4Pjo6CisJU2hvdyB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gcHJlZml4IGluc3RlYWQgb2YgImIvIi4KKworLS1uby1wcmVmaXg6OgorCURvIG5vdCBzaG93IGFueSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcHJlZml4LgorCistLWxpbmUtcHJlZml4PTxwcmVmaXg+OjoKKwlQcmVwZW5kIGFuIGFkZGl0aW9uYWwgcHJlZml4IHRvIGV2ZXJ5IGxpbmUgb2Ygb3V0cHV0LgorCistLWl0YS1pbnZpc2libGUtaW4taW5kZXg6OgorCUJ5IGRlZmF1bHQgZW50cmllcyBhZGRlZCBieSAiZ2l0IGFkZCAtTiIgYXBwZWFyIGFzIGFuIGV4aXN0aW5nCisJZW1wdHkgZmlsZSBpbiAiZ2l0IGRpZmYiIGFuZCBhIG5ldyBmaWxlIGluICJnaXQgZGlmZiAtLWNhY2hlZCIuCisJVGhpcyBvcHRpb24gbWFrZXMgdGhlIGVudHJ5IGFwcGVhciBhcyBhIG5ldyBmaWxlIGluICJnaXQgZGlmZiIKKwlhbmQgbm9uLWV4aXN0ZW50IGluICJnaXQgZGlmZiAtLWNhY2hlZCIuIFRoaXMgb3B0aW9uIGNvdWxkIGJlCisJcmV2ZXJ0ZWQgd2l0aCBgLS1pdGEtdmlzaWJsZS1pbi1pbmRleGAuIEJvdGggb3B0aW9ucyBhcmUKKwlleHBlcmltZW50YWwgYW5kIGNvdWxkIGJlIHJlbW92ZWQgaW4gZnV0dXJlLgorCitGb3IgbW9yZSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvbiB0aGVzZSBjb21tb24gb3B0aW9ucywgc2VlIGFsc28KK2xpbmtnaXQ6Z2l0ZGlmZmNvcmVbN10uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RvYy1kaWZmIGIvRG9jdW1lbnRhdGlvbi9kb2MtZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNjk0MzAwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kb2MtZGlmZgpAQCAtMCwwICsxLDE4NiBAQAorIyEvYmluL3NoCisjCisjIEJ1aWxkIHR3byBkb2N1bWVudGF0aW9uIHRyZWVzIGFuZCBkaWZmIHRoZSByZXN1bHRpbmcgZm9ybWF0dGVkIG91dHB1dC4KKyMgQ29tcGFyZWQgdG8gYSBzb3VyY2UgZGlmZiwgdGhpcyBjYW4gcmV2ZWFsIG1pc3Rha2VzIGluIHRoZSBmb3JtYXR0aW5nLgorIyBGb3IgZXhhbXBsZToKKyMKKyMgICAuL2RvYy1kaWZmIG9yaWdpbi9tYXN0ZXIgSEVBRAorIworIyB3b3VsZCBzaG93IHRoZSBkaWZmZXJlbmNlcyBpbnRyb2R1Y2VkIGJ5IGEgYnJhbmNoIGJhc2VkIG9uIG1hc3Rlci4KKworT1BUSU9OU19TUEVDPSJcCitkb2MtZGlmZiBbb3B0aW9uc10gPGZyb20+IDx0bz4gWy0tIDxkaWZmLW9wdGlvbnM+XQorZG9jLWRpZmYgKC1jfC0tY2xlYW4pCistLQoraj1uCQkJcGFyYWxsZWwgYXJndW1lbnQgdG8gcGFzcyB0byBtYWtlCitmCQkJZm9yY2UgcmVidWlsZDsgZG8gbm90IHJlbHkgb24gY2FjaGVkIHJlc3VsdHMKK2MsY2xlYW4JCQljbGVhbnVwIHRlbXBvcmFyeSB3b3JraW5nIGZpbGVzCitmcm9tLWFzY2lpZG9jCQl1c2UgYXNjaWlkb2Mgd2l0aCB0aGUgJ2Zyb20nLWNvbW1pdAorZnJvbS1hc2NpaWRvY3Rvcgl1c2UgYXNjaWlkb2N0b3Igd2l0aCB0aGUgJ2Zyb20nLWNvbW1pdAorYXNjaWlkb2MJCXVzZSBhc2NpaWRvYyB3aXRoIGJvdGggY29tbWl0cwordG8tYXNjaWlkb2MJCXVzZSBhc2NpaWRvYyB3aXRoIHRoZSAndG8nLWNvbW1pdAordG8tYXNjaWlkb2N0b3IJCXVzZSBhc2NpaWRvY3RvciB3aXRoIHRoZSAndG8nLWNvbW1pdAorYXNjaWlkb2N0b3IJCXVzZSBhc2NpaWRvY3RvciB3aXRoIGJvdGggY29tbWl0cworY3V0LWZvb3RlcgkJY3V0IGF3YXkgZm9vdGVyCisiCitTVUJESVJFQ1RPUllfT0s9MQorLiAiJChnaXQgLS1leGVjLXBhdGgpL2dpdC1zaC1zZXR1cCIKKworcGFyYWxsZWw9Citmb3JjZT0KK2NsZWFuPQorZnJvbV9wcm9ncmFtPQordG9fcHJvZ3JhbT0KK2N1dF9mb290ZXI9Cit3aGlsZSB0ZXN0ICQjIC1ndCAwCitkbworCWNhc2UgIiQxIiBpbgorCS1qKQorCQlwYXJhbGxlbD0kMjsgc2hpZnQgOzsKKwktY3wtLWNsZWFuKQorCQljbGVhbj10IDs7CisJLWYpCisJCWZvcmNlPXQgOzsKKwktLWZyb20tYXNjaWlkb2N0b3IpCisJCWZyb21fcHJvZ3JhbT0tYXNjaWlkb2N0b3IgOzsKKwktLXRvLWFzY2lpZG9jdG9yKQorCQl0b19wcm9ncmFtPS1hc2NpaWRvY3RvciA7OworCS0tYXNjaWlkb2N0b3IpCisJCWZyb21fcHJvZ3JhbT0tYXNjaWlkb2N0b3IKKwkJdG9fcHJvZ3JhbT0tYXNjaWlkb2N0b3IgOzsKKwktLWZyb20tYXNjaWlkb2MpCisJCWZyb21fcHJvZ3JhbT0tYXNjaWlkb2MgOzsKKwktLXRvLWFzY2lpZG9jKQorCQl0b19wcm9ncmFtPS1hc2NpaWRvYyA7OworCS0tYXNjaWlkb2MpCisJCWZyb21fcHJvZ3JhbT0tYXNjaWlkb2MKKwkJdG9fcHJvZ3JhbT0tYXNjaWlkb2MgOzsKKwktLWN1dC1mb290ZXIpCisJCWN1dF9mb290ZXI9LWN1dC1mb290ZXIgOzsKKwktLSkKKwkJc2hpZnQ7IGJyZWFrIDs7CisJKikKKwkJdXNhZ2UgOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKwordG1wPSIkKGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKS9Eb2N1bWVudGF0aW9uL3RtcC1kb2MtZGlmZiIgfHwgZXhpdCAxCisKK2lmIHRlc3QgLW4gIiRjbGVhbiIKK3RoZW4KKwl0ZXN0ICQjIC1lcSAwIHx8IHVzYWdlCisJZ2l0IHdvcmt0cmVlIHJlbW92ZSAtLWZvcmNlICIkdG1wL3dvcmt0cmVlIiAyPi9kZXYvbnVsbAorCXJtIC1yZiAiJHRtcCIKKwlleGl0IDAKK2ZpCisKK2lmIHRlc3QgLXogIiRwYXJhbGxlbCIKK3RoZW4KKwlwYXJhbGxlbD0kKGdldGNvbmYgX05QUk9DRVNTT1JTX09OTE4gMj4vZGV2L251bGwpCisJaWYgdGVzdCAkPyAhPSAwIHx8IHRlc3QgLXogIiRwYXJhbGxlbCIKKwl0aGVuCisJCXBhcmFsbGVsPTEKKwlmaQorZmkKKwordGVzdCAkIyAtZ3QgMSB8fCB1c2FnZQorZnJvbT0kMTsgc2hpZnQKK3RvPSQxOyBzaGlmdAorCitmcm9tX29pZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRmcm9tIikgfHwgZXhpdCAxCit0b19vaWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkdG8iKSB8fCBleGl0IDEKKworaWYgdGVzdCAtbiAiJGZvcmNlIgordGhlbgorCXJtIC1yZiAiJHRtcCIKK2ZpCisKKyMgV2UnbGwgZG8gYm90aCBidWlsZHMgaW4gYSBzaW5nbGUgd29ya3RyZWUsIHdoaWNoIGxldHMgIm1ha2UiIHJldXNlCisjIHJlc3VsdHMgdGhhdCBkb24ndCBkaWZmZXIgYmV0d2VlbiB0aGUgdHdvIHRyZWVzLgoraWYgISB0ZXN0IC1kICIkdG1wL3dvcmt0cmVlIgordGhlbgorCWdpdCB3b3JrdHJlZSBhZGQgLWYgLS1kZXRhY2ggIiR0bXAvd29ya3RyZWUiICIkZnJvbSIgJiYKKwlkb3RzPSQoZWNobyAiJHRtcC93b3JrdHJlZSIgfCBzZWQgJ3MjW14vXSojLi4jZycpICYmCisJbG4gLXMgIiRkb3RzL2NvbmZpZy5tYWsiICIkdG1wL3dvcmt0cmVlL2NvbmZpZy5tYWsiCitmaQorCitjb25zdHJ1Y3RfbWFrZW1hbmZsYWdzICgpIHsKKwlpZiB0ZXN0ICIkMSIgPSAiLWFzY2lpZG9jIgorCXRoZW4KKwkJZWNobyBVU0VfQVNDSUlET0NUT1I9CisJZWxpZiB0ZXN0ICIkMSIgPSAiLWFzY2lpZG9jdG9yIgorCXRoZW4KKwkJZWNobyBVU0VfQVNDSUlET0NUT1I9WWVzUGxlYXNlCisJZmkKK30KKworZnJvbV9tYWtlbWFuZmxhZ3M9JChjb25zdHJ1Y3RfbWFrZW1hbmZsYWdzICIkZnJvbV9wcm9ncmFtIikgJiYKK3RvX21ha2VtYW5mbGFncz0kKGNvbnN0cnVjdF9tYWtlbWFuZmxhZ3MgIiR0b19wcm9ncmFtIikgJiYKKworZnJvbV9kaXI9JGZyb21fb2lkJGZyb21fcHJvZ3JhbSRjdXRfZm9vdGVyICYmCit0b19kaXI9JHRvX29pZCR0b19wcm9ncmFtJGN1dF9mb290ZXIgJiYKKworIyBnZW5lcmF0ZV9yZW5kZXJfbWFrZWZpbGUgPHNyY2Rpcj4gPGRzdGRpcj4KK2dlbmVyYXRlX3JlbmRlcl9tYWtlZmlsZSAoKSB7CisJZmluZCAiJDEiIC10eXBlIGYgfAorCXdoaWxlIHJlYWQgc3JjCisJZG8KKwkJZHN0PSQyLyR7c3JjIyQxL30KKwkJcHJpbnRmICdhbGw6ICVzXG4nICIkZHN0IgorCQlwcmludGYgJyVzOiAlc1xuJyAiJGRzdCIgIiRzcmMiCisJCXByaW50ZiAnXHRAZWNobyA+JjIgIiAgUkVOREVSICQobm90ZGlyICRAKSIgJiYgXFxcbicKKwkJcHJpbnRmICdcdG1rZGlyIC1wICQoZGlyICRAKSAmJiBcXFxuJworCQlwcmludGYgJ1x0TUFOV0lEVEg9ODAgbWFuICQ8ID4kQCsgJiYgXFxcbicKKwkJcHJpbnRmICdcdG12ICRAKyAkQFxuJworCWRvbmUKK30KKworIyByZW5kZXJfdHJlZSA8Y29tbWl0dGlzaF9vaWQ+IDxkaXJlY3RvcnlfbmFtZT4gPG1ha2VtYW5mbGFncz4KK3JlbmRlcl90cmVlICgpIHsKKwkjIFNraXAgaW5zdGFsbC1tYW4gZW50aXJlbHkgaWYgd2UgYWxyZWFkeSBoYXZlIGFuIGluc3RhbGxlZCBkaXJlY3RvcnkuCisJIyBXZSBjYW4ndCByZWx5IG9uIG1ha2UgaGVyZSwgc2luY2UgImluc3RhbGwtbWFuIiB1bmNvbmRpdGlvbmFsbHkKKwkjIGNvcGllcyB0aGUgZmlsZXMgKHNwZW5kaW5nIGVmZm9ydCwgYnV0IGFsc28gdXBkYXRpbmcgdGltZXN0YW1wcyB0aGF0CisJIyB3ZSB0aGVuIGNhbid0IHJlbHkgb24gZHVyaW5nIHRoZSByZW5kZXIgc3RlcCkuIFdlIHVzZSAibXYiIHRvIG1ha2UKKwkjIHN1cmUgd2UgZG9uJ3QgZ2V0IGNvbmZ1c2VkIGJ5IGEgcHJldmlvdXMgcnVuIHRoYXQgZmFpbGVkIHBhcnR3YXkKKwkjIHRocm91Z2guCisJb2lkPSQxICYmCisJZG5hbWU9JDIgJiYKKwltYWtlbWFuZmxhZ3M9JDMgJiYKKwlpZiAhIHRlc3QgLWQgIiR0bXAvaW5zdGFsbGVkLyRkbmFtZSIKKwl0aGVuCisJCWdpdCAtQyAiJHRtcC93b3JrdHJlZSIgY2hlY2tvdXQgLS1kZXRhY2ggIiRvaWQiICYmCisJCW1ha2UgLWokcGFyYWxsZWwgLUMgIiR0bXAvd29ya3RyZWUiIFwKKwkJCSRtYWtlbWFuZmxhZ3MgXAorCQkJR0lUX1ZFUlNJT049b21pdHRlZCBcCisJCQlTT1VSQ0VfREFURV9FUE9DSD0wIFwKKwkJCURFU1RESVI9IiR0bXAvaW5zdGFsbGVkLyRkbmFtZSsiIFwKKwkJCWluc3RhbGwtbWFuICYmCisJCW12ICIkdG1wL2luc3RhbGxlZC8kZG5hbWUrIiAiJHRtcC9pbnN0YWxsZWQvJGRuYW1lIgorCWZpICYmCisKKwkjIEFzIHdpdGggImluc3RhbGxlZCIgYWJvdmUsIHdlIHNraXAgdGhlIHJlbmRlciBpZiBpdCdzIGFscmVhZHkgYmVlbgorCSMgZG9uZS4gIFNvIHVzaW5nIG1ha2UgaGVyZSBpcyBwcmltYXJpbHkganVzdCBhYm91dCBydW5uaW5nIGluCisJIyBwYXJhbGxlbC4KKwlpZiAhIHRlc3QgLWQgIiR0bXAvcmVuZGVyZWQvJGRuYW1lIgorCXRoZW4KKwkJZ2VuZXJhdGVfcmVuZGVyX21ha2VmaWxlICIkdG1wL2luc3RhbGxlZC8kZG5hbWUiIFwKKwkJCSIkdG1wL3JlbmRlcmVkLyRkbmFtZSsiIHwKKwkJbWFrZSAtaiRwYXJhbGxlbCAtZiAtICYmCisJCW12ICIkdG1wL3JlbmRlcmVkLyRkbmFtZSsiICIkdG1wL3JlbmRlcmVkLyRkbmFtZSIKKworCQlpZiB0ZXN0ICIkY3V0X2Zvb3RlciIgPSAiLWN1dC1mb290ZXIiCisJCXRoZW4KKwkJCWZvciBmIGluICQoZmluZCAiJHRtcC9yZW5kZXJlZC8kZG5hbWUiIC10eXBlIGYpCisJCQlkbworCQkJCWhlYWQgLW4gLTIgIiRmIiB8IHNlZCAtZSAnJHsvXiQvZH0nID4iJGYrIiAmJgorCQkJCW12ICIkZisiICIkZiIgfHwKKwkJCQlyZXR1cm4gMQorCQkJZG9uZQorCQlmaQorCWZpCit9CisKK3JlbmRlcl90cmVlICRmcm9tX29pZCAkZnJvbV9kaXIgJGZyb21fbWFrZW1hbmZsYWdzICYmCityZW5kZXJfdHJlZSAkdG9fb2lkICR0b19kaXIgJHRvX21ha2VtYW5mbGFncyAmJgorZ2l0IC1DICR0bXAvcmVuZGVyZWQgZGlmZiAtLW5vLWluZGV4ICIkQCIgJGZyb21fZGlyICR0b19kaXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZG9jYm9vay14c2wuY3NzIGIvRG9jdW1lbnRhdGlvbi9kb2Nib29rLXhzbC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExYzhmMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZG9jYm9vay14c2wuY3NzCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICBDU1Mgc3R5bGVzaGVldCBmb3IgWEhUTUwgcHJvZHVjZWQgYnkgRG9jQm9vayBYU0wgc3R5bGVzaGVldHMuCisgIFRlc3RlZCB3aXRoIFhTTCBzdHlsZXNoZWV0cyAxLjYxLjIsIDEuNjcuMgorKi8KKworc3Bhbi5zdHJvbmcgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworYm9keSBibG9ja3F1b3RlIHsKKyAgbWFyZ2luLXRvcDogLjc1ZW07CisgIGxpbmUtaGVpZ2h0OiAxLjU7CisgIG1hcmdpbi1ib3R0b206IC43NWVtOworfQorCitodG1sIGJvZHkgeworICBtYXJnaW46IDFlbSA1JSAxZW0gNSU7CisgIGxpbmUtaGVpZ2h0OiAxLjI7CisgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOworfQorCitib2R5IGRpdiB7CisgIG1hcmdpbjogMDsKK30KKworaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwKK2Rpdi50b2MgcCBiLAorZGl2Lmxpc3Qtb2YtZmlndXJlcyBwIGIsCitkaXYubGlzdC1vZi10YWJsZXMgcCBiLAorZGl2LmFic3RyYWN0IHAudGl0bGUKK3sKKyAgY29sb3I6ICM1MjdiYmQ7CisgIGZvbnQtZmFtaWx5OiB0YWhvbWEsIHZlcmRhbmEsIHNhbnMtc2VyaWY7Cit9CisKK2Rpdi50b2MgcDpmaXJzdC1jaGlsZCwKK2Rpdi5saXN0LW9mLWZpZ3VyZXMgcDpmaXJzdC1jaGlsZCwKK2Rpdi5saXN0LW9mLXRhYmxlcyBwOmZpcnN0LWNoaWxkLAorZGl2LmV4YW1wbGUgcC50aXRsZQoreworICBtYXJnaW4tYm90dG9tOiAwLjJlbTsKK30KKworYm9keSBoMSB7CisgIG1hcmdpbjogLjBlbSAwIDAgLTQlOworICBsaW5lLWhlaWdodDogMS4zOworICBib3JkZXItYm90dG9tOiAycHggc29saWQgc2lsdmVyOworfQorCitib2R5IGgyIHsKKyAgbWFyZ2luOiAwLjVlbSAwIDAgLTQlOworICBsaW5lLWhlaWdodDogMS4zOworICBib3JkZXItYm90dG9tOiAycHggc29saWQgc2lsdmVyOworfQorCitib2R5IGgzIHsKKyAgbWFyZ2luOiAuOGVtIDAgMCAtMyU7CisgIGxpbmUtaGVpZ2h0OiAxLjM7Cit9CisKK2JvZHkgaDQgeworICBtYXJnaW46IC44ZW0gMCAwIC0zJTsKKyAgbGluZS1oZWlnaHQ6IDEuMzsKK30KKworYm9keSBoNSB7CisgIG1hcmdpbjogLjhlbSAwIDAgLTIlOworICBsaW5lLWhlaWdodDogMS4zOworfQorCitib2R5IGg2IHsKKyAgbWFyZ2luOiAuOGVtIDAgMCAtMSU7CisgIGxpbmUtaGVpZ2h0OiAxLjM7Cit9CisKK2JvZHkgaHIgeworICBib3JkZXI6IG5vbmU7IC8qIEJyb2tlbiBvbiBJRTYgKi8KK30KK2Rpdi5mb290bm90ZXMgaHIgeworICBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXI7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGgsIGRpdi5uYXZoZWFkZXIgdGQsIGRpdi5uYXZmb290ZXIgdGQgeworICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKKyAgZm9udC1zaXplOiAwLjllbTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGNvbG9yOiAjNTI3YmJkOworfQorZGl2Lm5hdmhlYWRlciBpbWcsIGRpdi5uYXZmb290ZXIgaW1nIHsKKyAgYm9yZGVyLXN0eWxlOiBub25lOworfQorZGl2Lm5hdmhlYWRlciBhLCBkaXYubmF2Zm9vdGVyIGEgeworICBmb250LXdlaWdodDogbm9ybWFsOworfQorZGl2Lm5hdmZvb3RlciBociB7CisgIGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlcjsKK30KKworYm9keSB0ZCB7CisgIGxpbmUtaGVpZ2h0OiAxLjIKK30KKworYm9keSB0aCB7CisgIGxpbmUtaGVpZ2h0OiAxLjI7Cit9CisKK29sIHsKKyAgbGluZS1oZWlnaHQ6IDEuMjsKK30KKwordWwsIGJvZHkgZGlyLCBib2R5IG1lbnUgeworICBsaW5lLWhlaWdodDogMS4yOworfQorCitodG1sIHsKKyAgbWFyZ2luOiAwOworICBwYWRkaW5nOiAwOworfQorCitib2R5IGgxLCBib2R5IGgyLCBib2R5IGgzLCBib2R5IGg0LCBib2R5IGg1LCBib2R5IGg2IHsKKyAgbWFyZ2luLWxlZnQ6IDAKK30KKworYm9keSBwcmUgeworICBtYXJnaW46IDAuNWVtIDEwJSAwLjVlbSAxZW07CisgIGxpbmUtaGVpZ2h0OiAxLjA7CisgIGNvbG9yOiBuYXZ5OworfQorCit0dC5saXRlcmFsLCBjb2RlLmxpdGVyYWwgeworICBjb2xvcjogbmF2eTsKKyAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Cit9CisKK2NvZGUubGl0ZXJhbDpiZWZvcmUgeyBjb250ZW50OiAiJyI7IH0KK2NvZGUubGl0ZXJhbDphZnRlciB7IGNvbnRlbnQ6ICInIjsgfQorCitlbSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgY29sb3I6ICMwNjQ7Cit9CisKK2Rpdi5saXRlcmFsbGF5b3V0IHAgeworICBwYWRkaW5nOiAwZW07CisgIG1hcmdpbjogMGVtOworfQorCitkaXYubGl0ZXJhbGxheW91dCB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIG1hcmdpbjogMGVtOworICBjb2xvcjogbmF2eTsKKyAgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyOworICBiYWNrZ3JvdW5kOiAjZjRmNGY0OworICBwYWRkaW5nOiAwLjVlbTsKK30KKworLnByb2dyYW1saXN0aW5nLCAuc2NyZWVuIHsKKyAgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyOworICBiYWNrZ3JvdW5kOiAjZjRmNGY0OworICBtYXJnaW46IDAuNWVtIDEwJSAwLjVlbSAwOworICBwYWRkaW5nOiAwLjVlbSAxZW07Cit9CisKK2Rpdi5zaWRlYmFyIHsKKyAgYmFja2dyb3VuZDogI2ZmZmZlZTsKKyAgbWFyZ2luOiAxLjBlbSAxMCUgMC41ZW0gMDsKKyAgcGFkZGluZzogMC41ZW0gMWVtOworICBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXI7Cit9CitkaXYuc2lkZWJhciAqIHsgcGFkZGluZzogMDsgfQorZGl2LnNpZGViYXIgZGl2IHsgbWFyZ2luOiAwOyB9CitkaXYuc2lkZWJhciBwLnRpdGxlIHsKKyAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CisgIG1hcmdpbi10b3A6IDAuNWVtOworICBtYXJnaW4tYm90dG9tOiAwLjJlbTsKK30KKworZGl2LmJpYmxpb21peGVkIHsKKyAgbWFyZ2luOiAwLjVlbSA1JSAwLjVlbSAxZW07Cit9CisKK2Rpdi5nbG9zc2FyeSBkdCB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorZGl2Lmdsb3NzYXJ5IGRkIHAgeworICBtYXJnaW4tdG9wOiAwLjJlbTsKK30KKworZGwgeworICBtYXJnaW46IC44ZW0gMDsKKyAgbGluZS1oZWlnaHQ6IDEuMjsKK30KKworZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICBjb2xvcjogbmF2eTsKK30KKworZGl2LnZhcmlhYmxlbGlzdCBkZCBwIHsKKyAgbWFyZ2luLXRvcDogMDsKK30KKworZGl2Lml0ZW1pemVkbGlzdCBsaSwgZGl2Lm9yZGVyZWRsaXN0IGxpIHsKKyAgbWFyZ2luLWxlZnQ6IC0wLjhlbTsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKK3VsLCBvbCB7CisgICAgbGlzdC1zdHlsZS1wb3NpdGlvbjogb3V0c2lkZTsKK30KKworZGl2LnNpZGViYXIgdWwsIGRpdi5zaWRlYmFyIG9sIHsKKyAgICBtYXJnaW4tbGVmdDogMi44ZW07Cit9CisKK2Rpdi5pdGVtaXplZGxpc3QgcC50aXRsZSwKK2Rpdi5vcmRlcmVkbGlzdCBwLnRpdGxlLAorZGl2LnZhcmlhYmxlbGlzdCBwLnRpdGxlCit7CisgIG1hcmdpbi1ib3R0b206IC0wLjhlbTsKK30KKworZGl2LnJldmhpc3RvcnkgdGFibGUgeworICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworICBib3JkZXI6IG5vbmU7Cit9CitkaXYucmV2aGlzdG9yeSB0aCB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICM1MjdiYmQ7CisgIGZvbnQtZmFtaWx5OiB0YWhvbWEsIHZlcmRhbmEsIHNhbnMtc2VyaWY7Cit9CitkaXYucmV2aGlzdG9yeSB0ZCB7CisgIGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlcjsKK30KKworLyogS2VlcCBUT0MgYW5kIGluZGV4IGxpbmVzIGNsb3NlIHRvZ2V0aGVyLiAqLworZGl2LnRvYyBkbCwgZGl2LnRvYyBkdCwKK2Rpdi5saXN0LW9mLWZpZ3VyZXMgZGwsIGRpdi5saXN0LW9mLWZpZ3VyZXMgZHQsCitkaXYubGlzdC1vZi10YWJsZXMgZGwsIGRpdi5saXN0LW9mLXRhYmxlcyBkdCwKK2Rpdi5pbmRleGRpdiBkbCwgZGl2LmluZGV4ZGl2IGR0Cit7CisgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CisgIG1hcmdpbi10b3A6IDA7CisgIG1hcmdpbi1ib3R0b206IDA7Cit9CisKKy8qCisgIFRhYmxlIHN0eWxpbmcgZG9lcyBub3Qgd29yayBiZWNhdXNlIG9mIG92ZXJyaWRpbmcgYXR0cmlidXRlcyBpbgorICBnZW5lcmF0ZWQgSFRNTC4KKyovCitkaXYudGFibGUgdGFibGUsCitkaXYuaW5mb3JtYWx0YWJsZSB0YWJsZQoreworICAgIG1hcmdpbi1sZWZ0OiAwOworICAgIG1hcmdpbi1yaWdodDogNSU7CisgICAgbWFyZ2luLWJvdHRvbTogMC44ZW07Cit9CitkaXYuaW5mb3JtYWx0YWJsZSB0YWJsZQoreworICAgIG1hcmdpbi10b3A6IDAuNGVtCit9CitkaXYudGFibGUgdGhlYWQsCitkaXYudGFibGUgdGZvb3QsCitkaXYudGFibGUgdGJvZHksCitkaXYuaW5mb3JtYWx0YWJsZSB0aGVhZCwKK2Rpdi5pbmZvcm1hbHRhYmxlIHRmb290LAorZGl2LmluZm9ybWFsdGFibGUgdGJvZHkKK3sKKyAgICAvKiBObyBlZmZlY3QgaW4gSUU2LiAqLworICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAjNTI3YmJkOworICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNTI3YmJkOworfQorZGl2LnRhYmxlIHRoZWFkLCBkaXYudGFibGUgdGZvb3QsCitkaXYuaW5mb3JtYWx0YWJsZSB0aGVhZCwgZGl2LmluZm9ybWFsdGFibGUgdGZvb3QKK3sKKyAgICBmb250LXdlaWdodDogYm9sZDsKK30KKworZGl2Lm1lZGlhb2JqZWN0IGltZyB7CisgICAgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyOworICAgIG1hcmdpbi1ib3R0b206IDAuOGVtOworfQorZGl2LmZpZ3VyZSBwLnRpdGxlLAorZGl2LnRhYmxlIHAudGl0bGUKK3sKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAwLjRlbTsKK30KKworQG1lZGlhIHByaW50IHsKKyAgZGl2Lm5hdmhlYWRlciwgZGl2Lm5hdmZvb3RlciB7IGRpc3BsYXk6IG5vbmU7IH0KK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZG9jYm9vay54c2wgYi9Eb2N1bWVudGF0aW9uL2RvY2Jvb2sueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOGIwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RvY2Jvb2sueHNsCkBAIC0wLDAgKzEsOCBAQAorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCQl2ZXJzaW9uPScxLjAnPgorIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L2h0bWwvZG9jYm9vay54c2wiLz4KKyA8eHNsOm91dHB1dCBtZXRob2Q9Imh0bWwiCisgICAgIGVuY29kaW5nPSJVVEYtOCIgaW5kZW50PSJubyIKKyAgICAgZG9jdHlwZS1wdWJsaWM9Ii0vL1czQy8vRFREIEhUTUwgNC4wMS8vRU4iCisgICAgIGRvY3R5cGUtc3lzdGVtPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9zdHJpY3QuZHRkIiAvPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZXZlcnlkYXkudHh0byBiL0RvY3VtZW50YXRpb24vZXZlcnlkYXkudHh0bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTU1NWJkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ldmVyeWRheS50eHRvCkBAIC0wLDAgKzEsOSBAQAorRXZlcnlkYXkgR2l0IFdpdGggMjAgQ29tbWFuZHMgT3IgU28KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgaGFzIGJlZW4gbW92ZWQgdG8gbGlua2dpdDpnaXRldmVyeWRheVs3XS4KKworUGxlYXNlIGxldCB0aGUgb3duZXJzIG9mIHRoZSByZWZlcnJpbmcgc2l0ZSBrbm93IHNvIHRoYXQgdGhleSBjYW4gdXBkYXRlIHRoZQorbGluayB5b3UgY2xpY2tlZCB0byBnZXQgaGVyZS4KKworVGhhbmtzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUyYTE2MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQKQEAgLTAsMCArMSwyNzEgQEAKKy0tYWxsOjoKKwlGZXRjaCBhbGwgcmVtb3Rlcy4KKworLWE6OgorLS1hcHBlbmQ6OgorCUFwcGVuZCByZWYgbmFtZXMgYW5kIG9iamVjdCBuYW1lcyBvZiBmZXRjaGVkIHJlZnMgdG8gdGhlCisJZXhpc3RpbmcgY29udGVudHMgb2YgYC5naXQvRkVUQ0hfSEVBRGAuICBXaXRob3V0IHRoaXMKKwlvcHRpb24gb2xkIGRhdGEgaW4gYC5naXQvRkVUQ0hfSEVBRGAgd2lsbCBiZSBvdmVyd3JpdHRlbi4KKworLS1kZXB0aD08ZGVwdGg+OjoKKwlMaW1pdCBmZXRjaGluZyB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBjb21taXRzIGZyb20gdGhlIHRpcCBvZgorCWVhY2ggcmVtb3RlIGJyYW5jaCBoaXN0b3J5LiBJZiBmZXRjaGluZyB0byBhICdzaGFsbG93JyByZXBvc2l0b3J5CisJY3JlYXRlZCBieSBgZ2l0IGNsb25lYCB3aXRoIGAtLWRlcHRoPTxkZXB0aD5gIG9wdGlvbiAoc2VlCisJbGlua2dpdDpnaXQtY2xvbmVbMV0pLCBkZWVwZW4gb3Igc2hvcnRlbiB0aGUgaGlzdG9yeSB0byB0aGUgc3BlY2lmaWVkCisJbnVtYmVyIG9mIGNvbW1pdHMuIFRhZ3MgZm9yIHRoZSBkZWVwZW5lZCBjb21taXRzIGFyZSBub3QgZmV0Y2hlZC4KKworLS1kZWVwZW49PGRlcHRoPjo6CisJU2ltaWxhciB0byAtLWRlcHRoLCBleGNlcHQgaXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgY29tbWl0cworCWZyb20gdGhlIGN1cnJlbnQgc2hhbGxvdyBib3VuZGFyeSBpbnN0ZWFkIG9mIGZyb20gdGhlIHRpcCBvZgorCWVhY2ggcmVtb3RlIGJyYW5jaCBoaXN0b3J5LgorCistLXNoYWxsb3ctc2luY2U9PGRhdGU+OjoKKwlEZWVwZW4gb3Igc2hvcnRlbiB0aGUgaGlzdG9yeSBvZiBhIHNoYWxsb3cgcmVwb3NpdG9yeSB0bworCWluY2x1ZGUgYWxsIHJlYWNoYWJsZSBjb21taXRzIGFmdGVyIDxkYXRlPi4KKworLS1zaGFsbG93LWV4Y2x1ZGU9PHJldmlzaW9uPjo6CisJRGVlcGVuIG9yIHNob3J0ZW4gdGhlIGhpc3Rvcnkgb2YgYSBzaGFsbG93IHJlcG9zaXRvcnkgdG8KKwlleGNsdWRlIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYSBzcGVjaWZpZWQgcmVtb3RlIGJyYW5jaCBvciB0YWcuCisJVGhpcyBvcHRpb24gY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KKworLS11bnNoYWxsb3c6OgorCUlmIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBpcyBjb21wbGV0ZSwgY29udmVydCBhIHNoYWxsb3cKKwlyZXBvc2l0b3J5IHRvIGEgY29tcGxldGUgb25lLCByZW1vdmluZyBhbGwgdGhlIGxpbWl0YXRpb25zCisJaW1wb3NlZCBieSBzaGFsbG93IHJlcG9zaXRvcmllcy4KKysKK0lmIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBmZXRjaCBhcyBtdWNoIGFzIHBvc3NpYmxlIHNvIHRoYXQKK3RoZSBjdXJyZW50IHJlcG9zaXRvcnkgaGFzIHRoZSBzYW1lIGhpc3RvcnkgYXMgdGhlIHNvdXJjZSByZXBvc2l0b3J5LgorCistLXVwZGF0ZS1zaGFsbG93OjoKKwlCeSBkZWZhdWx0IHdoZW4gZmV0Y2hpbmcgZnJvbSBhIHNoYWxsb3cgcmVwb3NpdG9yeSwKKwlgZ2l0IGZldGNoYCByZWZ1c2VzIHJlZnMgdGhhdCByZXF1aXJlIHVwZGF0aW5nCisJLmdpdC9zaGFsbG93LiBUaGlzIG9wdGlvbiB1cGRhdGVzIC5naXQvc2hhbGxvdyBhbmQgYWNjZXB0IHN1Y2gKKwlyZWZzLgorCistLW5lZ290aWF0aW9uLXRpcD08Y29tbWl0fGdsb2I+OjoKKwlCeSBkZWZhdWx0LCBHaXQgd2lsbCByZXBvcnQsIHRvIHRoZSBzZXJ2ZXIsIGNvbW1pdHMgcmVhY2hhYmxlCisJZnJvbSBhbGwgbG9jYWwgcmVmcyB0byBmaW5kIGNvbW1vbiBjb21taXRzIGluIGFuIGF0dGVtcHQgdG8KKwlyZWR1Y2UgdGhlIHNpemUgb2YgdGhlIHRvLWJlLXJlY2VpdmVkIHBhY2tmaWxlLiBJZiBzcGVjaWZpZWQsCisJR2l0IHdpbGwgb25seSByZXBvcnQgY29tbWl0cyByZWFjaGFibGUgZnJvbSB0aGUgZ2l2ZW4gdGlwcy4KKwlUaGlzIGlzIHVzZWZ1bCB0byBzcGVlZCB1cCBmZXRjaGVzIHdoZW4gdGhlIHVzZXIga25vd3Mgd2hpY2gKKwlsb2NhbCByZWYgaXMgbGlrZWx5IHRvIGhhdmUgY29tbWl0cyBpbiBjb21tb24gd2l0aCB0aGUKKwl1cHN0cmVhbSByZWYgYmVpbmcgZmV0Y2hlZC4KKysKK1RoaXMgb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2U7IGlmIHNvLCBHaXQgd2lsbCByZXBvcnQKK2NvbW1pdHMgcmVhY2hhYmxlIGZyb20gYW55IG9mIHRoZSBnaXZlbiBjb21taXRzLgorKworVGhlIGFyZ3VtZW50IHRvIHRoaXMgb3B0aW9uIG1heSBiZSBhIGdsb2Igb24gcmVmIG5hbWVzLCBhIHJlZiwgb3IgdGhlIChwb3NzaWJseQorYWJicmV2aWF0ZWQpIFNIQS0xIG9mIGEgY29tbWl0LiBTcGVjaWZ5aW5nIGEgZ2xvYiBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcKK3RoaXMgb3B0aW9uIG11bHRpcGxlIHRpbWVzLCBvbmUgZm9yIGVhY2ggbWF0Y2hpbmcgcmVmIG5hbWUuCisrCitTZWUgYWxzbyB0aGUgYGZldGNoLm5lZ290aWF0aW9uQWxnb3JpdGhtYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlCitkb2N1bWVudGVkIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS1kcnktcnVuOjoKKwlTaG93IHdoYXQgd291bGQgYmUgZG9uZSwgd2l0aG91dCBtYWtpbmcgYW55IGNoYW5nZXMuCisKKy1mOjoKKy0tZm9yY2U6OgorCVdoZW4gJ2dpdCBmZXRjaCcgaXMgdXNlZCB3aXRoIGA8c3JjPjo8ZHN0PmAgcmVmc3BlYyBpdCBtYXkKKwlyZWZ1c2UgdG8gdXBkYXRlIHRoZSBsb2NhbCBicmFuY2ggYXMgZGlzY3Vzc2VkCitpZmRlZjo6Z2l0LXB1bGxbXQorCWluIHRoZSBgPHJlZnNwZWM+YCBwYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdC1mZXRjaFsxXQorCWRvY3VtZW50YXRpb24uCitlbmRpZjo6Z2l0LXB1bGxbXQoraWZuZGVmOjpnaXQtcHVsbFtdCisJaW4gdGhlIGA8cmVmc3BlYz5gIHBhcnQgYmVsb3cuCitlbmRpZjo6Z2l0LXB1bGxbXQorCVRoaXMgb3B0aW9uIG92ZXJyaWRlcyB0aGF0IGNoZWNrLgorCistazo6CistLWtlZXA6OgorCUtlZXAgZG93bmxvYWRlZCBwYWNrLgorCitpZm5kZWY6OmdpdC1wdWxsW10KKy0tbXVsdGlwbGU6OgorCUFsbG93IHNldmVyYWwgPHJlcG9zaXRvcnk+IGFuZCA8Z3JvdXA+IGFyZ3VtZW50cyB0byBiZQorCXNwZWNpZmllZC4gTm8gPHJlZnNwZWM+cyBtYXkgYmUgc3BlY2lmaWVkLgorCistLVtuby1dYXV0by1nYzo6CisJUnVuIGBnaXQgZ2MgLS1hdXRvYCBhdCB0aGUgZW5kIHRvIHBlcmZvcm0gZ2FyYmFnZSBjb2xsZWN0aW9uCisJaWYgbmVlZGVkLiBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKworLS1bbm8tXXdyaXRlLWNvbW1pdC1ncmFwaDo6CisJV3JpdGUgYSBjb21taXQtZ3JhcGggYWZ0ZXIgZmV0Y2hpbmcuIFRoaXMgb3ZlcnJpZGVzIHRoZSBjb25maWcKKwlzZXR0aW5nIGBmZXRjaC53cml0ZUNvbW1pdEdyYXBoYC4KK2VuZGlmOjpnaXQtcHVsbFtdCisKKy1wOjoKKy0tcHJ1bmU6OgorCUJlZm9yZSBmZXRjaGluZywgcmVtb3ZlIGFueSByZW1vdGUtdHJhY2tpbmcgcmVmZXJlbmNlcyB0aGF0IG5vCisJbG9uZ2VyIGV4aXN0IG9uIHRoZSByZW1vdGUuICBUYWdzIGFyZSBub3Qgc3ViamVjdCB0byBwcnVuaW5nCisJaWYgdGhleSBhcmUgZmV0Y2hlZCBvbmx5IGJlY2F1c2Ugb2YgdGhlIGRlZmF1bHQgdGFnCisJYXV0by1mb2xsb3dpbmcgb3IgZHVlIHRvIGEgLS10YWdzIG9wdGlvbi4gIEhvd2V2ZXIsIGlmIHRhZ3MKKwlhcmUgZmV0Y2hlZCBkdWUgdG8gYW4gZXhwbGljaXQgcmVmc3BlYyAoZWl0aGVyIG9uIHRoZSBjb21tYW5kCisJbGluZSBvciBpbiB0aGUgcmVtb3RlIGNvbmZpZ3VyYXRpb24sIGZvciBleGFtcGxlIGlmIHRoZSByZW1vdGUKKwl3YXMgY2xvbmVkIHdpdGggdGhlIC0tbWlycm9yIG9wdGlvbiksIHRoZW4gdGhleSBhcmUgYWxzbworCXN1YmplY3QgdG8gcHJ1bmluZy4gU3VwcGx5aW5nIGAtLXBydW5lLXRhZ3NgIGlzIGEgc2hvcnRoYW5kIGZvcgorCXByb3ZpZGluZyB0aGUgdGFnIHJlZnNwZWMuCitpZm5kZWY6OmdpdC1wdWxsW10KKysKK1NlZSB0aGUgUFJVTklORyBzZWN0aW9uIGJlbG93IGZvciBtb3JlIGRldGFpbHMuCisKKy1QOjoKKy0tcHJ1bmUtdGFnczo6CisJQmVmb3JlIGZldGNoaW5nLCByZW1vdmUgYW55IGxvY2FsIHRhZ3MgdGhhdCBubyBsb25nZXIgZXhpc3Qgb24KKwl0aGUgcmVtb3RlIGlmIGAtLXBydW5lYCBpcyBlbmFibGVkLiBUaGlzIG9wdGlvbiBzaG91bGQgYmUgdXNlZAorCW1vcmUgY2FyZWZ1bGx5LCB1bmxpa2UgYC0tcHJ1bmVgIGl0IHdpbGwgcmVtb3ZlIGFueSBsb2NhbAorCXJlZmVyZW5jZXMgKGxvY2FsIHRhZ3MpIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIFRoaXMgb3B0aW9uIGlzCisJYSBzaG9ydGhhbmQgZm9yIHByb3ZpZGluZyB0aGUgZXhwbGljaXQgdGFnIHJlZnNwZWMgYWxvbmcgd2l0aAorCWAtLXBydW5lYCwgc2VlIHRoZSBkaXNjdXNzaW9uIGFib3V0IHRoYXQgaW4gaXRzIGRvY3VtZW50YXRpb24uCisrCitTZWUgdGhlIFBSVU5JTkcgc2VjdGlvbiBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLgorCitlbmRpZjo6Z2l0LXB1bGxbXQorCitpZm5kZWY6OmdpdC1wdWxsW10KKy1uOjoKK2VuZGlmOjpnaXQtcHVsbFtdCistLW5vLXRhZ3M6OgorCUJ5IGRlZmF1bHQsIHRhZ3MgdGhhdCBwb2ludCBhdCBvYmplY3RzIHRoYXQgYXJlIGRvd25sb2FkZWQKKwlmcm9tIHRoZSByZW1vdGUgcmVwb3NpdG9yeSBhcmUgZmV0Y2hlZCBhbmQgc3RvcmVkIGxvY2FsbHkuCisJVGhpcyBvcHRpb24gZGlzYWJsZXMgdGhpcyBhdXRvbWF0aWMgdGFnIGZvbGxvd2luZy4gVGhlIGRlZmF1bHQKKwliZWhhdmlvciBmb3IgYSByZW1vdGUgbWF5IGJlIHNwZWNpZmllZCB3aXRoIHRoZSByZW1vdGUuPG5hbWU+LnRhZ09wdAorCXNldHRpbmcuIFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKKy0tcmVmbWFwPTxyZWZzcGVjPjo6CisJV2hlbiBmZXRjaGluZyByZWZzIGxpc3RlZCBvbiB0aGUgY29tbWFuZCBsaW5lLCB1c2UgdGhlCisJc3BlY2lmaWVkIHJlZnNwZWMgKGNhbiBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZSkgdG8gbWFwIHRoZQorCXJlZnMgdG8gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLCBpbnN0ZWFkIG9mIHRoZSB2YWx1ZXMgb2YKKwlgcmVtb3RlLiouZmV0Y2hgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgcmVtb3RlCisJcmVwb3NpdG9yeS4gIFByb3ZpZGluZyBhbiBlbXB0eSBgPHJlZnNwZWM+YCB0byB0aGUKKwlgLS1yZWZtYXBgIG9wdGlvbiBjYXVzZXMgR2l0IHRvIGlnbm9yZSB0aGUgY29uZmlndXJlZAorCXJlZnNwZWNzIGFuZCByZWx5IGVudGlyZWx5IG9uIHRoZSByZWZzcGVjcyBzdXBwbGllZCBhcworCWNvbW1hbmQtbGluZSBhcmd1bWVudHMuIFNlZSBzZWN0aW9uIG9uICJDb25maWd1cmVkIFJlbW90ZS10cmFja2luZworCUJyYW5jaGVzIiBmb3IgZGV0YWlscy4KKworLXQ6OgorLS10YWdzOjoKKwlGZXRjaCBhbGwgdGFncyBmcm9tIHRoZSByZW1vdGUgKGkuZS4sIGZldGNoIHJlbW90ZSB0YWdzCisJYHJlZnMvdGFncy8qYCBpbnRvIGxvY2FsIHRhZ3Mgd2l0aCB0aGUgc2FtZSBuYW1lKSwgaW4gYWRkaXRpb24KKwl0byB3aGF0ZXZlciBlbHNlIHdvdWxkIG90aGVyd2lzZSBiZSBmZXRjaGVkLiAgVXNpbmcgdGhpcworCW9wdGlvbiBhbG9uZSBkb2VzIG5vdCBzdWJqZWN0IHRhZ3MgdG8gcHJ1bmluZywgZXZlbiBpZiAtLXBydW5lCisJaXMgdXNlZCAodGhvdWdoIHRhZ3MgbWF5IGJlIHBydW5lZCBhbnl3YXkgaWYgdGhleSBhcmUgYWxzbyB0aGUKKwlkZXN0aW5hdGlvbiBvZiBhbiBleHBsaWNpdCByZWZzcGVjOyBzZWUgYC0tcHJ1bmVgKS4KKworaWZuZGVmOjpnaXQtcHVsbFtdCistLXJlY3Vyc2Utc3VibW9kdWxlc1s9eWVzfG9uLWRlbWFuZHxub106OgorCVRoaXMgb3B0aW9uIGNvbnRyb2xzIGlmIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgbmV3IGNvbW1pdHMgb2YKKwlwb3B1bGF0ZWQgc3VibW9kdWxlcyBzaG91bGQgYmUgZmV0Y2hlZCB0b28uIEl0IGNhbiBiZSB1c2VkIGFzIGEKKwlib29sZWFuIG9wdGlvbiB0byBjb21wbGV0ZWx5IGRpc2FibGUgcmVjdXJzaW9uIHdoZW4gc2V0IHRvICdubycgb3IgdG8KKwl1bmNvbmRpdGlvbmFsbHkgcmVjdXJzZSBpbnRvIGFsbCBwb3B1bGF0ZWQgc3VibW9kdWxlcyB3aGVuIHNldCB0bworCSd5ZXMnLCB3aGljaCBpcyB0aGUgZGVmYXVsdCB3aGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQgd2l0aG91dCBhbnkKKwl2YWx1ZS4gVXNlICdvbi1kZW1hbmQnIHRvIG9ubHkgcmVjdXJzZSBpbnRvIGEgcG9wdWxhdGVkIHN1Ym1vZHVsZQorCXdoZW4gdGhlIHN1cGVycHJvamVjdCByZXRyaWV2ZXMgYSBjb21taXQgdGhhdCB1cGRhdGVzIHRoZSBzdWJtb2R1bGUncworCXJlZmVyZW5jZSB0byBhIGNvbW1pdCB0aGF0IGlzbid0IGFscmVhZHkgaW4gdGhlIGxvY2FsIHN1Ym1vZHVsZQorCWNsb25lLiBCeSBkZWZhdWx0LCAnb24tZGVtYW5kJyBpcyB1c2VkLCB1bmxlc3MKKwlgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXNgIGlzIHNldCAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCitlbmRpZjo6Z2l0LXB1bGxbXQorCistajo6CistLWpvYnM9PG4+OjoKKwlOdW1iZXIgb2YgcGFyYWxsZWwgY2hpbGRyZW4gdG8gYmUgdXNlZCBmb3IgYWxsIGZvcm1zIG9mIGZldGNoaW5nLgorKworSWYgdGhlIGAtLW11bHRpcGxlYCBvcHRpb24gd2FzIHNwZWNpZmllZCwgdGhlIGRpZmZlcmVudCByZW1vdGVzIHdpbGwgYmUgZmV0Y2hlZAoraW4gcGFyYWxsZWwuIElmIG11bHRpcGxlIHN1Ym1vZHVsZXMgYXJlIGZldGNoZWQsIHRoZXkgd2lsbCBiZSBmZXRjaGVkIGluCitwYXJhbGxlbC4gVG8gY29udHJvbCB0aGVtIGluZGVwZW5kZW50bHksIHVzZSB0aGUgY29uZmlnIHNldHRpbmdzCitgZmV0Y2gucGFyYWxsZWxgIGFuZCBgc3VibW9kdWxlLmZldGNoSm9ic2AgKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorKworVHlwaWNhbGx5LCBwYXJhbGxlbCByZWN1cnNpdmUgYW5kIG11bHRpLXJlbW90ZSBmZXRjaGVzIHdpbGwgYmUgZmFzdGVyLiBCeQorZGVmYXVsdCBmZXRjaGVzIGFyZSBwZXJmb3JtZWQgc2VxdWVudGlhbGx5LCBub3QgaW4gcGFyYWxsZWwuCisKK2lmbmRlZjo6Z2l0LXB1bGxbXQorLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorCURpc2FibGUgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKHRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcworCXVzaW5nIHRoZSBgLS1yZWN1cnNlLXN1Ym1vZHVsZXM9bm9gIG9wdGlvbikuCitlbmRpZjo6Z2l0LXB1bGxbXQorCistLXNldC11cHN0cmVhbTo6CisJSWYgdGhlIHJlbW90ZSBpcyBmZXRjaGVkIHN1Y2Nlc3NmdWxseSwgcHVsbCBhbmQgYWRkIHVwc3RyZWFtCisJKHRyYWNraW5nKSByZWZlcmVuY2UsIHVzZWQgYnkgYXJndW1lbnQtbGVzcworCWxpbmtnaXQ6Z2l0LXB1bGxbMV0gYW5kIG90aGVyIGNvbW1hbmRzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwKKwlzZWUgYGJyYW5jaC48bmFtZT4ubWVyZ2VgIGFuZCBgYnJhbmNoLjxuYW1lPi5yZW1vdGVgIGluCisJbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCitpZm5kZWY6OmdpdC1wdWxsW10KKy0tc3VibW9kdWxlLXByZWZpeD08cGF0aD46OgorCVByZXBlbmQgPHBhdGg+IHRvIHBhdGhzIHByaW50ZWQgaW4gaW5mb3JtYXRpdmUgbWVzc2FnZXMKKwlzdWNoIGFzICJGZXRjaGluZyBzdWJtb2R1bGUgZm9vIi4gIFRoaXMgb3B0aW9uIGlzIHVzZWQKKwlpbnRlcm5hbGx5IHdoZW4gcmVjdXJzaW5nIG92ZXIgc3VibW9kdWxlcy4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXMtZGVmYXVsdD1beWVzfG9uLWRlbWFuZF06OgorCVRoaXMgb3B0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSB0byB0ZW1wb3JhcmlseSBwcm92aWRlIGEKKwlub24tbmVnYXRpdmUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIC0tcmVjdXJzZS1zdWJtb2R1bGVzCisJb3B0aW9uLiAgQWxsIG90aGVyIG1ldGhvZHMgb2YgY29uZmlndXJpbmcgZmV0Y2gncyBzdWJtb2R1bGUKKwlyZWN1cnNpb24gKHN1Y2ggYXMgc2V0dGluZ3MgaW4gbGlua2dpdDpnaXRtb2R1bGVzWzVdIGFuZAorCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkgb3ZlcnJpZGUgdGhpcyBvcHRpb24sIGFzIGRvZXMKKwlzcGVjaWZ5aW5nIC0tW25vLV1yZWN1cnNlLXN1Ym1vZHVsZXMgZGlyZWN0bHkuCisKKy11OjoKKy0tdXBkYXRlLWhlYWQtb2s6OgorCUJ5IGRlZmF1bHQgJ2dpdCBmZXRjaCcgcmVmdXNlcyB0byB1cGRhdGUgdGhlIGhlYWQgd2hpY2gKKwljb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBicmFuY2guICBUaGlzIGZsYWcgZGlzYWJsZXMgdGhlCisJY2hlY2suICBUaGlzIGlzIHB1cmVseSBmb3IgdGhlIGludGVybmFsIHVzZSBmb3IgJ2dpdCBwdWxsJworCXRvIGNvbW11bmljYXRlIHdpdGggJ2dpdCBmZXRjaCcsIGFuZCB1bmxlc3MgeW91IGFyZQorCWltcGxlbWVudGluZyB5b3VyIG93biBQb3JjZWxhaW4geW91IGFyZSBub3Qgc3VwcG9zZWQgdG8KKwl1c2UgaXQuCitlbmRpZjo6Z2l0LXB1bGxbXQorCistLXVwbG9hZC1wYWNrIDx1cGxvYWQtcGFjaz46OgorCVdoZW4gZ2l2ZW4sIGFuZCB0aGUgcmVwb3NpdG9yeSB0byBmZXRjaCBmcm9tIGlzIGhhbmRsZWQKKwlieSAnZ2l0IGZldGNoLXBhY2snLCBgLS1leGVjPTx1cGxvYWQtcGFjaz5gIGlzIHBhc3NlZCB0bworCXRoZSBjb21tYW5kIHRvIHNwZWNpZnkgbm9uLWRlZmF1bHQgcGF0aCBmb3IgdGhlIGNvbW1hbmQKKwlydW4gb24gdGhlIG90aGVyIGVuZC4KKworaWZuZGVmOjpnaXQtcHVsbFtdCistcTo6CistLXF1aWV0OjoKKwlQYXNzIC0tcXVpZXQgdG8gZ2l0LWZldGNoLXBhY2sgYW5kIHNpbGVuY2UgYW55IG90aGVyIGludGVybmFsbHkKKwl1c2VkIGdpdCBjb21tYW5kcy4gUHJvZ3Jlc3MgaXMgbm90IHJlcG9ydGVkIHRvIHRoZSBzdGFuZGFyZCBlcnJvcgorCXN0cmVhbS4KKworLXY6OgorLS12ZXJib3NlOjoKKwlCZSB2ZXJib3NlLgorZW5kaWY6OmdpdC1wdWxsW10KKworLS1wcm9ncmVzczo6CisJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKwlieSBkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzIC1xCisJaXMgc3BlY2lmaWVkLiBUaGlzIGZsYWcgZm9yY2VzIHByb2dyZXNzIHN0YXR1cyBldmVuIGlmIHRoZQorCXN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBub3QgZGlyZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KKworLW8gPG9wdGlvbj46OgorLS1zZXJ2ZXItb3B0aW9uPTxvcHRpb24+OjoKKwlUcmFuc21pdCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBzZXJ2ZXIgd2hlbiBjb21tdW5pY2F0aW5nIHVzaW5nCisJcHJvdG9jb2wgdmVyc2lvbiAyLiAgVGhlIGdpdmVuIHN0cmluZyBtdXN0IG5vdCBjb250YWluIGEgTlVMIG9yIExGCisJY2hhcmFjdGVyLiAgVGhlIHNlcnZlcidzIGhhbmRsaW5nIG9mIHNlcnZlciBvcHRpb25zLCBpbmNsdWRpbmcKKwl1bmtub3duIG9uZXMsIGlzIHNlcnZlci1zcGVjaWZpYy4KKwlXaGVuIG11bHRpcGxlIGAtLXNlcnZlci1vcHRpb249PG9wdGlvbj5gIGFyZSBnaXZlbiwgdGhleSBhcmUgYWxsCisJc2VudCB0byB0aGUgb3RoZXIgc2lkZSBpbiB0aGUgb3JkZXIgbGlzdGVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKy0tc2hvdy1mb3JjZWQtdXBkYXRlczo6CisJQnkgZGVmYXVsdCwgZ2l0IGNoZWNrcyBpZiBhIGJyYW5jaCBpcyBmb3JjZS11cGRhdGVkIGR1cmluZworCWZldGNoLiBUaGlzIGNhbiBiZSBkaXNhYmxlZCB0aHJvdWdoIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzLCBidXQKKwl0aGUgLS1zaG93LWZvcmNlZC11cGRhdGVzIG9wdGlvbiBndWFyYW50ZWVzIHRoaXMgY2hlY2sgb2NjdXJzLgorCVNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKKy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlczo6CisJQnkgZGVmYXVsdCwgZ2l0IGNoZWNrcyBpZiBhIGJyYW5jaCBpcyBmb3JjZS11cGRhdGVkIGR1cmluZworCWZldGNoLiBQYXNzIC0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcyBvciBzZXQgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMKKwl0byBmYWxzZSB0byBza2lwIHRoaXMgY2hlY2sgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIElmIHVzZWQgZHVyaW5nCisJJ2dpdC1wdWxsJyB0aGUgLS1mZi1vbmx5IG9wdGlvbiB3aWxsIHN0aWxsIGNoZWNrIGZvciBmb3JjZWQgdXBkYXRlcworCWJlZm9yZSBhdHRlbXB0aW5nIGEgZmFzdC1mb3J3YXJkIHVwZGF0ZS4gU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLTQ6OgorLS1pcHY0OjoKKwlVc2UgSVB2NCBhZGRyZXNzZXMgb25seSwgaWdub3JpbmcgSVB2NiBhZGRyZXNzZXMuCisKKy02OjoKKy0taXB2Njo6CisJVXNlIElQdjYgYWRkcmVzc2VzIG9ubHksIGlnbm9yaW5nIElQdjQgYWRkcmVzc2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maXgtdGV4aS5wZXJsIGIvRG9jdW1lbnRhdGlvbi9maXgtdGV4aS5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmN2Q3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpeC10ZXhpLnBlcmwKQEAgLTAsMCArMSwxNSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKK3doaWxlICg8PikgeworCWlmICgvXlxAc2V0ZmlsZW5hbWUvKSB7CisJCSRfID0gIlxAc2V0ZmlsZW5hbWUgZ2l0LmluZm9cbiI7CisJfSBlbHNpZiAoL15cQGRpcmVudHJ5LykgeworCQlwcmludCAnQGRpcmNhdGVnb3J5IERldmVsb3BtZW50CitAZGlyZW50cnkKKyogR2l0OiAoZ2l0KS4gICAgICAgICAgIEEgZmFzdCBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbQorQGVuZCBkaXJlbnRyeQorJzsJfQorCXVubGVzcyAoL15cQGRpcmVudHJ5Ly4uL15cQGVuZCBkaXJlbnRyeS8pIHsKKwkJcHJpbnQ7CisJfQorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYWRkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1ZTNhYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQKQEAgLTAsMCArMSw0MzggQEAKK2dpdC1hZGQoMSkKKz09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWFkZCAtIEFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBpbmRleAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYWRkJyBbLS12ZXJib3NlIHwgLXZdIFstLWRyeS1ydW4gfCAtbl0gWy0tZm9yY2UgfCAtZl0gWy0taW50ZXJhY3RpdmUgfCAtaV0gWy0tcGF0Y2ggfCAtcF0KKwkgIFstLWVkaXQgfCAtZV0gWy0tW25vLV1hbGwgfCAtLVtuby1daWdub3JlLXJlbW92YWwgfCBbLS11cGRhdGUgfCAtdV1dCisJICBbLS1pbnRlbnQtdG8tYWRkIHwgLU5dIFstLXJlZnJlc2hdIFstLWlnbm9yZS1lcnJvcnNdIFstLWlnbm9yZS1taXNzaW5nXSBbLS1yZW5vcm1hbGl6ZV0KKwkgIFstLWNobW9kPSgrfC0peF0gWy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPiBbLS1wYXRoc3BlYy1maWxlLW51bF1dCisJICBbLS1dIFs8cGF0aHNwZWM+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCB1cGRhdGVzIHRoZSBpbmRleCB1c2luZyB0aGUgY3VycmVudCBjb250ZW50IGZvdW5kIGluCit0aGUgd29ya2luZyB0cmVlLCB0byBwcmVwYXJlIHRoZSBjb250ZW50IHN0YWdlZCBmb3IgdGhlIG5leHQgY29tbWl0LgorSXQgdHlwaWNhbGx5IGFkZHMgdGhlIGN1cnJlbnQgY29udGVudCBvZiBleGlzdGluZyBwYXRocyBhcyBhIHdob2xlLAorYnV0IHdpdGggc29tZSBvcHRpb25zIGl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gYWRkIGNvbnRlbnQgd2l0aAorb25seSBwYXJ0IG9mIHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyBhcHBsaWVkLCBvcgorcmVtb3ZlIHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSB3b3JraW5nIHRyZWUgYW55bW9yZS4KKworVGhlICJpbmRleCIgaG9sZHMgYSBzbmFwc2hvdCBvZiB0aGUgY29udGVudCBvZiB0aGUgd29ya2luZyB0cmVlLCBhbmQgaXQKK2lzIHRoaXMgc25hcHNob3QgdGhhdCBpcyB0YWtlbiBhcyB0aGUgY29udGVudHMgb2YgdGhlIG5leHQgY29tbWl0LiAgVGh1cworYWZ0ZXIgbWFraW5nIGFueSBjaGFuZ2VzIHRvIHRoZSB3b3JraW5nIHRyZWUsIGFuZCBiZWZvcmUgcnVubmluZwordGhlIGNvbW1pdCBjb21tYW5kLCB5b3UgbXVzdCB1c2UgdGhlIGBhZGRgIGNvbW1hbmQgdG8gYWRkIGFueSBuZXcgb3IKK21vZGlmaWVkIGZpbGVzIHRvIHRoZSBpbmRleC4KKworVGhpcyBjb21tYW5kIGNhbiBiZSBwZXJmb3JtZWQgbXVsdGlwbGUgdGltZXMgYmVmb3JlIGEgY29tbWl0LiAgSXQgb25seQorYWRkcyB0aGUgY29udGVudCBvZiB0aGUgc3BlY2lmaWVkIGZpbGUocykgYXQgdGhlIHRpbWUgdGhlIGFkZCBjb21tYW5kIGlzCitydW47IGlmIHlvdSB3YW50IHN1YnNlcXVlbnQgY2hhbmdlcyBpbmNsdWRlZCBpbiB0aGUgbmV4dCBjb21taXQsIHRoZW4KK3lvdSBtdXN0IHJ1biBgZ2l0IGFkZGAgYWdhaW4gdG8gYWRkIHRoZSBuZXcgY29udGVudCB0byB0aGUgaW5kZXguCisKK1RoZSBgZ2l0IHN0YXR1c2AgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBvYnRhaW4gYSBzdW1tYXJ5IG9mIHdoaWNoCitmaWxlcyBoYXZlIGNoYW5nZXMgdGhhdCBhcmUgc3RhZ2VkIGZvciB0aGUgbmV4dCBjb21taXQuCisKK1RoZSBgZ2l0IGFkZGAgY29tbWFuZCB3aWxsIG5vdCBhZGQgaWdub3JlZCBmaWxlcyBieSBkZWZhdWx0LiAgSWYgYW55CitpZ25vcmVkIGZpbGVzIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYGdpdCBhZGRgCit3aWxsIGZhaWwgd2l0aCBhIGxpc3Qgb2YgaWdub3JlZCBmaWxlcy4gIElnbm9yZWQgZmlsZXMgcmVhY2hlZCBieQorZGlyZWN0b3J5IHJlY3Vyc2lvbiBvciBmaWxlbmFtZSBnbG9iYmluZyBwZXJmb3JtZWQgYnkgR2l0IChxdW90ZSB5b3VyCitnbG9icyBiZWZvcmUgdGhlIHNoZWxsKSB3aWxsIGJlIHNpbGVudGx5IGlnbm9yZWQuICBUaGUgJ2dpdCBhZGQnIGNvbW1hbmQgY2FuCitiZSB1c2VkIHRvIGFkZCBpZ25vcmVkIGZpbGVzIHdpdGggdGhlIGAtZmAgKGZvcmNlKSBvcHRpb24uCisKK1BsZWFzZSBzZWUgbGlua2dpdDpnaXQtY29tbWl0WzFdIGZvciBhbHRlcm5hdGl2ZSB3YXlzIHRvIGFkZCBjb250ZW50IHRvIGEKK2NvbW1pdC4KKworCitPUFRJT05TCistLS0tLS0tCis8cGF0aHNwZWM+Li4uOjoKKwlGaWxlcyB0byBhZGQgY29udGVudCBmcm9tLiAgRmlsZWdsb2JzIChlLmcuIGAqLmNgKSBjYW4KKwliZSBnaXZlbiB0byBhZGQgYWxsIG1hdGNoaW5nIGZpbGVzLiAgQWxzbyBhCisJbGVhZGluZyBkaXJlY3RvcnkgbmFtZSAoZS5nLiBgZGlyYCB0byBhZGQgYGRpci9maWxlMWAKKwlhbmQgYGRpci9maWxlMmApIGNhbiBiZSBnaXZlbiB0byB1cGRhdGUgdGhlIGluZGV4IHRvCisJbWF0Y2ggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRpcmVjdG9yeSBhcyBhIHdob2xlIChlLmcuCisJc3BlY2lmeWluZyBgZGlyYCB3aWxsIHJlY29yZCBub3QganVzdCBhIGZpbGUgYGRpci9maWxlMWAKKwltb2RpZmllZCBpbiB0aGUgd29ya2luZyB0cmVlLCBhIGZpbGUgYGRpci9maWxlMmAgYWRkZWQgdG8KKwl0aGUgd29ya2luZyB0cmVlLCBidXQgYWxzbyBhIGZpbGUgYGRpci9maWxlM2AgcmVtb3ZlZCBmcm9tCisJdGhlIHdvcmtpbmcgdHJlZSkuIE5vdGUgdGhhdCBvbGRlciB2ZXJzaW9ucyBvZiBHaXQgdXNlZAorCXRvIGlnbm9yZSByZW1vdmVkIGZpbGVzOyB1c2UgYC0tbm8tYWxsYCBvcHRpb24gaWYgeW91IHdhbnQKKwl0byBhZGQgbW9kaWZpZWQgb3IgbmV3IGZpbGVzIGJ1dCBpZ25vcmUgcmVtb3ZlZCBvbmVzLgorKworRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgPHBhdGhzcGVjPiBzeW50YXgsIHNlZSB0aGUgJ3BhdGhzcGVjJyBlbnRyeQoraW4gbGlua2dpdDpnaXRnbG9zc2FyeVs3XS4KKworLW46OgorLS1kcnktcnVuOjoKKwlEb24ndCBhY3R1YWxseSBhZGQgdGhlIGZpbGUocyksIGp1c3Qgc2hvdyBpZiB0aGV5IGV4aXN0IGFuZC9vciB3aWxsCisJYmUgaWdub3JlZC4KKworLXY6OgorLS12ZXJib3NlOjoKKyAgICAgICAgQmUgdmVyYm9zZS4KKworLWY6OgorLS1mb3JjZTo6CisJQWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzLgorCistaTo6CistLWludGVyYWN0aXZlOjoKKwlBZGQgbW9kaWZpZWQgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSBpbnRlcmFjdGl2ZWx5IHRvCisJdGhlIGluZGV4LiBPcHRpb25hbCBwYXRoIGFyZ3VtZW50cyBtYXkgYmUgc3VwcGxpZWQgdG8gbGltaXQKKwlvcGVyYXRpb24gdG8gYSBzdWJzZXQgb2YgdGhlIHdvcmtpbmcgdHJlZS4gU2VlIGBgSW50ZXJhY3RpdmUKKwltb2RlJycgZm9yIGRldGFpbHMuCisKKy1wOjoKKy0tcGF0Y2g6OgorCUludGVyYWN0aXZlbHkgY2hvb3NlIGh1bmtzIG9mIHBhdGNoIGJldHdlZW4gdGhlIGluZGV4IGFuZCB0aGUKKwl3b3JrIHRyZWUgYW5kIGFkZCB0aGVtIHRvIHRoZSBpbmRleC4gVGhpcyBnaXZlcyB0aGUgdXNlciBhIGNoYW5jZQorCXRvIHJldmlldyB0aGUgZGlmZmVyZW5jZSBiZWZvcmUgYWRkaW5nIG1vZGlmaWVkIGNvbnRlbnRzIHRvIHRoZQorCWluZGV4LgorKworVGhpcyBlZmZlY3RpdmVseSBydW5zIGBhZGQgLS1pbnRlcmFjdGl2ZWAsIGJ1dCBieXBhc3NlcyB0aGUKK2luaXRpYWwgY29tbWFuZCBtZW51IGFuZCBkaXJlY3RseSBqdW1wcyB0byB0aGUgYHBhdGNoYCBzdWJjb21tYW5kLgorU2VlIGBgSW50ZXJhY3RpdmUgbW9kZScnIGZvciBkZXRhaWxzLgorCistZTo6CistLWVkaXQ6OgorCU9wZW4gdGhlIGRpZmYgdnMuIHRoZSBpbmRleCBpbiBhbiBlZGl0b3IgYW5kIGxldCB0aGUgdXNlcgorCWVkaXQgaXQuICBBZnRlciB0aGUgZWRpdG9yIHdhcyBjbG9zZWQsIGFkanVzdCB0aGUgaHVuayBoZWFkZXJzCisJYW5kIGFwcGx5IHRoZSBwYXRjaCB0byB0aGUgaW5kZXguCisrCitUaGUgaW50ZW50IG9mIHRoaXMgb3B0aW9uIGlzIHRvIHBpY2sgYW5kIGNob29zZSBsaW5lcyBvZiB0aGUgcGF0Y2ggdG8KK2FwcGx5LCBvciBldmVuIHRvIG1vZGlmeSB0aGUgY29udGVudHMgb2YgbGluZXMgdG8gYmUgc3RhZ2VkLiBUaGlzIGNhbiBiZQorcXVpY2tlciBhbmQgbW9yZSBmbGV4aWJsZSB0aGFuIHVzaW5nIHRoZSBpbnRlcmFjdGl2ZSBodW5rIHNlbGVjdG9yLgorSG93ZXZlciwgaXQgaXMgZWFzeSB0byBjb25mdXNlIG9uZXNlbGYgYW5kIGNyZWF0ZSBhIHBhdGNoIHRoYXQgZG9lcyBub3QKK2FwcGx5IHRvIHRoZSBpbmRleC4gU2VlIEVESVRJTkcgUEFUQ0hFUyBiZWxvdy4KKworLXU6OgorLS11cGRhdGU6OgorCVVwZGF0ZSB0aGUgaW5kZXgganVzdCB3aGVyZSBpdCBhbHJlYWR5IGhhcyBhbiBlbnRyeSBtYXRjaGluZworCTxwYXRoc3BlYz4uICBUaGlzIHJlbW92ZXMgYXMgd2VsbCBhcyBtb2RpZmllcyBpbmRleCBlbnRyaWVzIHRvCisJbWF0Y2ggdGhlIHdvcmtpbmcgdHJlZSwgYnV0IGFkZHMgbm8gbmV3IGZpbGVzLgorKworSWYgbm8gPHBhdGhzcGVjPiBpcyBnaXZlbiB3aGVuIGAtdWAgb3B0aW9uIGlzIHVzZWQsIGFsbAordHJhY2tlZCBmaWxlcyBpbiB0aGUgZW50aXJlIHdvcmtpbmcgdHJlZSBhcmUgdXBkYXRlZCAob2xkIHZlcnNpb25zCitvZiBHaXQgdXNlZCB0byBsaW1pdCB0aGUgdXBkYXRlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgaXRzCitzdWJkaXJlY3RvcmllcykuCisKKy1BOjoKKy0tYWxsOjoKKy0tbm8taWdub3JlLXJlbW92YWw6OgorCVVwZGF0ZSB0aGUgaW5kZXggbm90IG9ubHkgd2hlcmUgdGhlIHdvcmtpbmcgdHJlZSBoYXMgYSBmaWxlCisJbWF0Y2hpbmcgPHBhdGhzcGVjPiBidXQgYWxzbyB3aGVyZSB0aGUgaW5kZXggYWxyZWFkeSBoYXMgYW4KKwllbnRyeS4gVGhpcyBhZGRzLCBtb2RpZmllcywgYW5kIHJlbW92ZXMgaW5kZXggZW50cmllcyB0bworCW1hdGNoIHRoZSB3b3JraW5nIHRyZWUuCisrCitJZiBubyA8cGF0aHNwZWM+IGlzIGdpdmVuIHdoZW4gYC1BYCBvcHRpb24gaXMgdXNlZCwgYWxsCitmaWxlcyBpbiB0aGUgZW50aXJlIHdvcmtpbmcgdHJlZSBhcmUgdXBkYXRlZCAob2xkIHZlcnNpb25zCitvZiBHaXQgdXNlZCB0byBsaW1pdCB0aGUgdXBkYXRlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgaXRzCitzdWJkaXJlY3RvcmllcykuCisKKy0tbm8tYWxsOjoKKy0taWdub3JlLXJlbW92YWw6OgorCVVwZGF0ZSB0aGUgaW5kZXggYnkgYWRkaW5nIG5ldyBmaWxlcyB0aGF0IGFyZSB1bmtub3duIHRvIHRoZQorCWluZGV4IGFuZCBmaWxlcyBtb2RpZmllZCBpbiB0aGUgd29ya2luZyB0cmVlLCBidXQgaWdub3JlCisJZmlsZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSB3b3JraW5nIHRyZWUuICBUaGlzCisJb3B0aW9uIGlzIGEgbm8tb3Agd2hlbiBubyA8cGF0aHNwZWM+IGlzIHVzZWQuCisrCitUaGlzIG9wdGlvbiBpcyBwcmltYXJpbHkgdG8gaGVscCB1c2VycyB3aG8gYXJlIHVzZWQgdG8gb2xkZXIKK3ZlcnNpb25zIG9mIEdpdCwgd2hvc2UgImdpdCBhZGQgPHBhdGhzcGVjPi4uLiIgd2FzIGEgc3lub255bQorZm9yICJnaXQgYWRkIC0tbm8tYWxsIDxwYXRoc3BlYz4uLi4iLCBpLmUuIGlnbm9yZWQgcmVtb3ZlZCBmaWxlcy4KKworLU46OgorLS1pbnRlbnQtdG8tYWRkOjoKKwlSZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIuIEFuIGVudHJ5CisJZm9yIHRoZSBwYXRoIGlzIHBsYWNlZCBpbiB0aGUgaW5kZXggd2l0aCBubyBjb250ZW50LiBUaGlzIGlzCisJdXNlZnVsIGZvciwgYW1vbmcgb3RoZXIgdGhpbmdzLCBzaG93aW5nIHRoZSB1bnN0YWdlZCBjb250ZW50IG9mCisJc3VjaCBmaWxlcyB3aXRoIGBnaXQgZGlmZmAgYW5kIGNvbW1pdHRpbmcgdGhlbSB3aXRoIGBnaXQgY29tbWl0CisJLWFgLgorCistLXJlZnJlc2g6OgorCURvbid0IGFkZCB0aGUgZmlsZShzKSwgYnV0IG9ubHkgcmVmcmVzaCB0aGVpciBzdGF0KCkKKwlpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXguCisKKy0taWdub3JlLWVycm9yczo6CisJSWYgc29tZSBmaWxlcyBjb3VsZCBub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMgaW5kZXhpbmcKKwl0aGVtLCBkbyBub3QgYWJvcnQgdGhlIG9wZXJhdGlvbiwgYnV0IGNvbnRpbnVlIGFkZGluZyB0aGUKKwlvdGhlcnMuIFRoZSBjb21tYW5kIHNoYWxsIHN0aWxsIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMuCisJVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGFkZC5pZ25vcmVFcnJvcnNgIGNhbiBiZSBzZXQgdG8KKwl0cnVlIHRvIG1ha2UgdGhpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCisKKy0taWdub3JlLW1pc3Npbmc6OgorCVRoaXMgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4uIEJ5IHVzaW5nCisJdGhpcyBvcHRpb24gdGhlIHVzZXIgY2FuIGNoZWNrIGlmIGFueSBvZiB0aGUgZ2l2ZW4gZmlsZXMgd291bGQKKwliZSBpZ25vcmVkLCBubyBtYXR0ZXIgaWYgdGhleSBhcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZSB3b3JrCisJdHJlZSBvciBub3QuCisKKy0tbm8td2Fybi1lbWJlZGRlZC1yZXBvOjoKKwlCeSBkZWZhdWx0LCBgZ2l0IGFkZGAgd2lsbCB3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkCisJcmVwb3NpdG9yeSB0byB0aGUgaW5kZXggd2l0aG91dCB1c2luZyBgZ2l0IHN1Ym1vZHVsZSBhZGRgIHRvCisJY3JlYXRlIGFuIGVudHJ5IGluIGAuZ2l0bW9kdWxlc2AuIFRoaXMgb3B0aW9uIHdpbGwgc3VwcHJlc3MgdGhlCisJd2FybmluZyAoZS5nLiwgaWYgeW91IGFyZSBtYW51YWxseSBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgb24KKwlzdWJtb2R1bGVzKS4KKworLS1yZW5vcm1hbGl6ZTo6CisJQXBwbHkgdGhlICJjbGVhbiIgcHJvY2VzcyBmcmVzaGx5IHRvIGFsbCB0cmFja2VkIGZpbGVzIHRvCisJZm9yY2libHkgYWRkIHRoZW0gYWdhaW4gdG8gdGhlIGluZGV4LiAgVGhpcyBpcyB1c2VmdWwgYWZ0ZXIKKwljaGFuZ2luZyBgY29yZS5hdXRvY3JsZmAgY29uZmlndXJhdGlvbiBvciB0aGUgYHRleHRgIGF0dHJpYnV0ZQorCWluIG9yZGVyIHRvIGNvcnJlY3QgZmlsZXMgYWRkZWQgd2l0aCB3cm9uZyBDUkxGL0xGIGxpbmUgZW5kaW5ncy4KKwlUaGlzIG9wdGlvbiBpbXBsaWVzIGAtdWAuCisKKy0tY2htb2Q9KCt8LSl4OjoKKwlPdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGFkZGVkIGZpbGVzLiAgVGhlIGV4ZWN1dGFibGUKKwliaXQgaXMgb25seSBjaGFuZ2VkIGluIHRoZSBpbmRleCwgdGhlIGZpbGVzIG9uIGRpc2sgYXJlIGxlZnQKKwl1bmNoYW5nZWQuCisKKy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPjo6CisJUGF0aHNwZWMgaXMgcGFzc2VkIGluIGA8ZmlsZT5gIGluc3RlYWQgb2YgY29tbWFuZGxpbmUgYXJncy4gSWYKKwlgPGZpbGU+YCBpcyBleGFjdGx5IGAtYCB0aGVuIHN0YW5kYXJkIGlucHV0IGlzIHVzZWQuIFBhdGhzcGVjCisJZWxlbWVudHMgYXJlIHNlcGFyYXRlZCBieSBMRiBvciBDUi9MRi4gUGF0aHNwZWMgZWxlbWVudHMgY2FuIGJlCisJcXVvdGVkIGFzIGV4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYAorCShzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gU2VlIGFsc28gYC0tcGF0aHNwZWMtZmlsZS1udWxgIGFuZAorCWdsb2JhbCBgLS1saXRlcmFsLXBhdGhzcGVjc2AuCisKKy0tcGF0aHNwZWMtZmlsZS1udWw6OgorCU9ubHkgbWVhbmluZ2Z1bCB3aXRoIGAtLXBhdGhzcGVjLWZyb20tZmlsZWAuIFBhdGhzcGVjIGVsZW1lbnRzIGFyZQorCXNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIgYW5kIGFsbCBvdGhlciBjaGFyYWN0ZXJzIGFyZSB0YWtlbgorCWxpdGVyYWxseSAoaW5jbHVkaW5nIG5ld2xpbmVzIGFuZCBxdW90ZXMpLgorCitcLS06OgorCVRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20KKwl0aGUgbGlzdCBvZiBmaWxlcywgKHVzZWZ1bCB3aGVuIGZpbGVuYW1lcyBtaWdodCBiZSBtaXN0YWtlbgorCWZvciBjb21tYW5kLWxpbmUgb3B0aW9ucykuCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKyogQWRkcyBjb250ZW50IGZyb20gYWxsIGAqLnR4dGAgZmlsZXMgdW5kZXIgYERvY3VtZW50YXRpb25gIGRpcmVjdG9yeQorICBhbmQgaXRzIHN1YmRpcmVjdG9yaWVzOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBhZGQgRG9jdW1lbnRhdGlvbi9cKi50eHQKKy0tLS0tLS0tLS0tLQorKworTm90ZSB0aGF0IHRoZSBhc3RlcmlzayBgKmAgaXMgcXVvdGVkIGZyb20gdGhlIHNoZWxsIGluIHRoaXMKK2V4YW1wbGU7IHRoaXMgbGV0cyB0aGUgY29tbWFuZCBpbmNsdWRlIHRoZSBmaWxlcyBmcm9tCitzdWJkaXJlY3RvcmllcyBvZiBgRG9jdW1lbnRhdGlvbi9gIGRpcmVjdG9yeS4KKworKiBDb25zaWRlcnMgYWRkaW5nIGNvbnRlbnQgZnJvbSBhbGwgZ2l0LSouc2ggc2NyaXB0czoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIGdpdC0qLnNoCistLS0tLS0tLS0tLS0KKysKK0JlY2F1c2UgdGhpcyBleGFtcGxlIGxldHMgdGhlIHNoZWxsIGV4cGFuZCB0aGUgYXN0ZXJpc2sgKGkuZS4geW91IGFyZQorbGlzdGluZyB0aGUgZmlsZXMgZXhwbGljaXRseSksIGl0IGRvZXMgbm90IGNvbnNpZGVyCitgc3ViZGlyL2dpdC1mb28uc2hgLgorCitJTlRFUkFDVElWRSBNT0RFCistLS0tLS0tLS0tLS0tLS0tCitXaGVuIHRoZSBjb21tYW5kIGVudGVycyB0aGUgaW50ZXJhY3RpdmUgbW9kZSwgaXQgc2hvd3MgdGhlCitvdXRwdXQgb2YgdGhlICdzdGF0dXMnIHN1YmNvbW1hbmQsIGFuZCB0aGVuIGdvZXMgaW50byBpdHMKK2ludGVyYWN0aXZlIGNvbW1hbmQgbG9vcC4KKworVGhlIGNvbW1hbmQgbG9vcCBzaG93cyB0aGUgbGlzdCBvZiBzdWJjb21tYW5kcyBhdmFpbGFibGUsIGFuZAorZ2l2ZXMgYSBwcm9tcHQgIldoYXQgbm93PiAiLiAgSW4gZ2VuZXJhbCwgd2hlbiB0aGUgcHJvbXB0IGVuZHMKK3dpdGggYSBzaW5nbGUgJz4nLCB5b3UgY2FuIHBpY2sgb25seSBvbmUgb2YgdGhlIGNob2ljZXMgZ2l2ZW4KK2FuZCB0eXBlIHJldHVybiwgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyAgICAqKiogQ29tbWFuZHMgKioqCisgICAgICAxOiBzdGF0dXMgICAgICAgMjogdXBkYXRlICAgICAgIDM6IHJldmVydCAgICAgICA0OiBhZGQgdW50cmFja2VkCisgICAgICA1OiBwYXRjaCAgICAgICAgNjogZGlmZiAgICAgICAgIDc6IHF1aXQgICAgICAgICA4OiBoZWxwCisgICAgV2hhdCBub3c+IDEKKy0tLS0tLS0tLS0tLQorCitZb3UgYWxzbyBjb3VsZCBzYXkgYHNgIG9yIGBzdGFgIG9yIGBzdGF0dXNgIGFib3ZlIGFzIGxvbmcgYXMgdGhlCitjaG9pY2UgaXMgdW5pcXVlLgorCitUaGUgbWFpbiBjb21tYW5kIGxvb3AgaGFzIDYgc3ViY29tbWFuZHMgKHBsdXMgaGVscCBhbmQgcXVpdCkuCisKK3N0YXR1czo6CisKKyAgIFRoaXMgc2hvd3MgdGhlIGNoYW5nZSBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4IChpLmUuIHdoYXQgd2lsbCBiZQorICAgY29tbWl0dGVkIGlmIHlvdSBzYXkgYGdpdCBjb21taXRgKSwgYW5kIGJldHdlZW4gaW5kZXggYW5kCisgICB3b3JraW5nIHRyZWUgZmlsZXMgKGkuZS4gd2hhdCB5b3UgY291bGQgc3RhZ2UgZnVydGhlciBiZWZvcmUKKyAgIGBnaXQgY29tbWl0YCB1c2luZyBgZ2l0IGFkZGApIGZvciBlYWNoIHBhdGguICBBIHNhbXBsZSBvdXRwdXQKKyAgIGxvb2tzIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBzdGFnZWQgICAgIHVuc3RhZ2VkIHBhdGgKKyAgICAgMTogICAgICAgYmluYXJ5ICAgICAgbm90aGluZyBmb28ucG5nCisgICAgIDI6ICAgICArNDAzLy0zNSAgICAgICAgKzEvLTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybAorLS0tLS0tLS0tLS0tCisrCitJdCBzaG93cyB0aGF0IGZvby5wbmcgaGFzIGRpZmZlcmVuY2VzIGZyb20gSEVBRCAoYnV0IHRoYXQgaXMKK2JpbmFyeSBzbyBsaW5lIGNvdW50IGNhbm5vdCBiZSBzaG93bikgYW5kIHRoZXJlIGlzIG5vCitkaWZmZXJlbmNlIGJldHdlZW4gaW5kZXhlZCBjb3B5IGFuZCB0aGUgd29ya2luZyB0cmVlCit2ZXJzaW9uIChpZiB0aGUgd29ya2luZyB0cmVlIHZlcnNpb24gd2VyZSBhbHNvIGRpZmZlcmVudCwKKydiaW5hcnknIHdvdWxkIGhhdmUgYmVlbiBzaG93biBpbiBwbGFjZSBvZiAnbm90aGluZycpLiAgVGhlCitvdGhlciBmaWxlLCBnaXQtYWRke2xpdGRkfWludGVyYWN0aXZlLnBlcmwsIGhhcyA0MDMgbGluZXMgYWRkZWQKK2FuZCAzNSBsaW5lcyBkZWxldGVkIGlmIHlvdSBjb21taXQgd2hhdCBpcyBpbiB0aGUgaW5kZXgsIGJ1dAord29ya2luZyB0cmVlIGZpbGUgaGFzIGZ1cnRoZXIgbW9kaWZpY2F0aW9ucyAob25lIGFkZGl0aW9uIGFuZAorb25lIGRlbGV0aW9uKS4KKwordXBkYXRlOjoKKworICAgVGhpcyBzaG93cyB0aGUgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBpc3N1ZXMgYW4gIlVwZGF0ZT4+IgorICAgcHJvbXB0LiAgV2hlbiB0aGUgcHJvbXB0IGVuZHMgd2l0aCBkb3VibGUgJz4+JywgeW91IGNhbgorICAgbWFrZSBtb3JlIHRoYW4gb25lIHNlbGVjdGlvbiwgY29uY2F0ZW5hdGVkIHdpdGggd2hpdGVzcGFjZSBvcgorICAgY29tbWEuICBBbHNvIHlvdSBjYW4gc2F5IHJhbmdlcy4gIEUuZy4gIjItNSA3LDkiIHRvIGNob29zZQorICAgMiwzLDQsNSw3LDkgZnJvbSB0aGUgbGlzdC4gIElmIHRoZSBzZWNvbmQgbnVtYmVyIGluIGEgcmFuZ2UgaXMKKyAgIG9taXR0ZWQsIGFsbCByZW1haW5pbmcgcGF0Y2hlcyBhcmUgdGFrZW4uICBFLmcuICI3LSIgdG8gY2hvb3NlCisgICA3LDgsOSBmcm9tIHRoZSBsaXN0LiAgWW91IGNhbiBzYXkgJyonIHRvIGNob29zZSBldmVyeXRoaW5nLgorKworV2hhdCB5b3UgY2hvc2UgYXJlIHRoZW4gaGlnaGxpZ2h0ZWQgd2l0aCAnKicsCitsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAgc3RhZ2VkICAgICB1bnN0YWdlZCBwYXRoCisgIDE6ICAgICAgIGJpbmFyeSAgICAgIG5vdGhpbmcgZm9vLnBuZworKiAyOiAgICAgKzQwMy8tMzUgICAgICAgICsxLy0xIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKKy0tLS0tLS0tLS0tLQorKworVG8gcmVtb3ZlIHNlbGVjdGlvbiwgcHJlZml4IHRoZSBpbnB1dCB3aXRoIGAtYAorbGlrZSB0aGlzOgorKworLS0tLS0tLS0tLS0tCitVcGRhdGU+PiAtMgorLS0tLS0tLS0tLS0tCisrCitBZnRlciBtYWtpbmcgdGhlIHNlbGVjdGlvbiwgYW5zd2VyIHdpdGggYW4gZW1wdHkgbGluZSB0byBzdGFnZSB0aGUKK2NvbnRlbnRzIG9mIHdvcmtpbmcgdHJlZSBmaWxlcyBmb3Igc2VsZWN0ZWQgcGF0aHMgaW4gdGhlIGluZGV4LgorCityZXZlcnQ6OgorCisgIFRoaXMgaGFzIGEgdmVyeSBzaW1pbGFyIFVJIHRvICd1cGRhdGUnLCBhbmQgdGhlIHN0YWdlZAorICBpbmZvcm1hdGlvbiBmb3Igc2VsZWN0ZWQgcGF0aHMgYXJlIHJldmVydGVkIHRvIHRoYXQgb2YgdGhlCisgIEhFQUQgdmVyc2lvbi4gIFJldmVydGluZyBuZXcgcGF0aHMgbWFrZXMgdGhlbSB1bnRyYWNrZWQuCisKK2FkZCB1bnRyYWNrZWQ6OgorCisgIFRoaXMgaGFzIGEgdmVyeSBzaW1pbGFyIFVJIHRvICd1cGRhdGUnIGFuZAorICAncmV2ZXJ0JywgYW5kIGxldHMgeW91IGFkZCB1bnRyYWNrZWQgcGF0aHMgdG8gdGhlIGluZGV4LgorCitwYXRjaDo6CisKKyAgVGhpcyBsZXRzIHlvdSBjaG9vc2Ugb25lIHBhdGggb3V0IG9mIGEgJ3N0YXR1cycgbGlrZSBzZWxlY3Rpb24uCisgIEFmdGVyIGNob29zaW5nIHRoZSBwYXRoLCBpdCBwcmVzZW50cyB0aGUgZGlmZiBiZXR3ZWVuIHRoZSBpbmRleAorICBhbmQgdGhlIHdvcmtpbmcgdHJlZSBmaWxlIGFuZCBhc2tzIHlvdSBpZiB5b3Ugd2FudCB0byBzdGFnZQorICB0aGUgY2hhbmdlIG9mIGVhY2ggaHVuay4gIFlvdSBjYW4gc2VsZWN0IG9uZSBvZiB0aGUgZm9sbG93aW5nCisgIG9wdGlvbnMgYW5kIHR5cGUgcmV0dXJuOgorCisgICAgICAgeSAtIHN0YWdlIHRoaXMgaHVuaworICAgICAgIG4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rCisgICAgICAgcSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lcworICAgICAgIGEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZQorICAgICAgIGQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUKKyAgICAgICBnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0bworICAgICAgIC8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXgKKyAgICAgICBqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmsKKyAgICAgICBKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVuaworICAgICAgIGsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmsKKyAgICAgICBLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmsKKyAgICAgICBzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3MKKyAgICAgICBlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rCisgICAgICAgPyAtIHByaW50IGhlbHAKKysKK0FmdGVyIGRlY2lkaW5nIHRoZSBmYXRlIGZvciBhbGwgaHVua3MsIGlmIHRoZXJlIGlzIGFueSBodW5rCit0aGF0IHdhcyBjaG9zZW4sIHRoZSBpbmRleCBpcyB1cGRhdGVkIHdpdGggdGhlIHNlbGVjdGVkIGh1bmtzLgorKworWW91IGNhbiBvbWl0IGhhdmluZyB0byB0eXBlIHJldHVybiBoZXJlLCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSBgaW50ZXJhY3RpdmUuc2luZ2xlS2V5YCB0byBgdHJ1ZWAuCisKK2RpZmY6OgorCisgIFRoaXMgbGV0cyB5b3UgcmV2aWV3IHdoYXQgd2lsbCBiZSBjb21taXR0ZWQgKGkuZS4gYmV0d2VlbgorICBIRUFEIGFuZCBpbmRleCkuCisKKworRURJVElORyBQQVRDSEVTCistLS0tLS0tLS0tLS0tLS0KKworSW52b2tpbmcgYGdpdCBhZGQgLWVgIG9yIHNlbGVjdGluZyBgZWAgZnJvbSB0aGUgaW50ZXJhY3RpdmUgaHVuaworc2VsZWN0b3Igd2lsbCBvcGVuIGEgcGF0Y2ggaW4geW91ciBlZGl0b3I7IGFmdGVyIHRoZSBlZGl0b3IgZXhpdHMsIHRoZQorcmVzdWx0IGlzIGFwcGxpZWQgdG8gdGhlIGluZGV4LiBZb3UgYXJlIGZyZWUgdG8gbWFrZSBhcmJpdHJhcnkgY2hhbmdlcwordG8gdGhlIHBhdGNoLCBidXQgbm90ZSB0aGF0IHNvbWUgY2hhbmdlcyBtYXkgaGF2ZSBjb25mdXNpbmcgcmVzdWx0cywgb3IKK2V2ZW4gcmVzdWx0IGluIGEgcGF0Y2ggdGhhdCBjYW5ub3QgYmUgYXBwbGllZC4gIElmIHlvdSB3YW50IHRvIGFib3J0IHRoZQorb3BlcmF0aW9uIGVudGlyZWx5IChpLmUuLCBzdGFnZSBub3RoaW5nIG5ldyBpbiB0aGUgaW5kZXgpLCBzaW1wbHkgZGVsZXRlCithbGwgbGluZXMgb2YgdGhlIHBhdGNoLiBUaGUgbGlzdCBiZWxvdyBkZXNjcmliZXMgc29tZSBjb21tb24gdGhpbmdzIHlvdQorbWF5IHNlZSBpbiBhIHBhdGNoLCBhbmQgd2hpY2ggZWRpdGluZyBvcGVyYXRpb25zIG1ha2Ugc2Vuc2Ugb24gdGhlbS4KKworLS0KK2FkZGVkIGNvbnRlbnQ6OgorCitBZGRlZCBjb250ZW50IGlzIHJlcHJlc2VudGVkIGJ5IGxpbmVzIGJlZ2lubmluZyB3aXRoICJ7cGx1c30iLiBZb3UgY2FuCitwcmV2ZW50IHN0YWdpbmcgYW55IGFkZGl0aW9uIGxpbmVzIGJ5IGRlbGV0aW5nIHRoZW0uCisKK3JlbW92ZWQgY29udGVudDo6CisKK1JlbW92ZWQgY29udGVudCBpcyByZXByZXNlbnRlZCBieSBsaW5lcyBiZWdpbm5pbmcgd2l0aCAiLSIuIFlvdSBjYW4KK3ByZXZlbnQgc3RhZ2luZyB0aGVpciByZW1vdmFsIGJ5IGNvbnZlcnRpbmcgdGhlICItIiB0byBhICIgIiAoc3BhY2UpLgorCittb2RpZmllZCBjb250ZW50OjoKKworTW9kaWZpZWQgY29udGVudCBpcyByZXByZXNlbnRlZCBieSAiLSIgbGluZXMgKHJlbW92aW5nIHRoZSBvbGQgY29udGVudCkKK2ZvbGxvd2VkIGJ5ICJ7cGx1c30iIGxpbmVzIChhZGRpbmcgdGhlIHJlcGxhY2VtZW50IGNvbnRlbnQpLiBZb3UgY2FuCitwcmV2ZW50IHN0YWdpbmcgdGhlIG1vZGlmaWNhdGlvbiBieSBjb252ZXJ0aW5nICItIiBsaW5lcyB0byAiICIsIGFuZAorcmVtb3ZpbmcgIntwbHVzfSIgbGluZXMuIEJld2FyZSB0aGF0IG1vZGlmeWluZyBvbmx5IGhhbGYgb2YgdGhlIHBhaXIgaXMKK2xpa2VseSB0byBpbnRyb2R1Y2UgY29uZnVzaW5nIGNoYW5nZXMgdG8gdGhlIGluZGV4LgorLS0KKworVGhlcmUgYXJlIGFsc28gbW9yZSBjb21wbGV4IG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgcGVyZm9ybWVkLiBCdXQgYmV3YXJlCit0aGF0IGJlY2F1c2UgdGhlIHBhdGNoIGlzIGFwcGxpZWQgb25seSB0byB0aGUgaW5kZXggYW5kIG5vdCB0aGUgd29ya2luZwordHJlZSwgdGhlIHdvcmtpbmcgdHJlZSB3aWxsIGFwcGVhciB0byAidW5kbyIgdGhlIGNoYW5nZSBpbiB0aGUgaW5kZXguCitGb3IgZXhhbXBsZSwgaW50cm9kdWNpbmcgYSBuZXcgbGluZSBpbnRvIHRoZSBpbmRleCB0aGF0IGlzIGluIG5laXRoZXIKK3RoZSBIRUFEIG5vciB0aGUgd29ya2luZyB0cmVlIHdpbGwgc3RhZ2UgdGhlIG5ldyBsaW5lIGZvciBjb21taXQsIGJ1dAordGhlIGxpbmUgd2lsbCBhcHBlYXIgdG8gYmUgcmV2ZXJ0ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKworQXZvaWQgdXNpbmcgdGhlc2UgY29uc3RydWN0cywgb3IgZG8gc28gd2l0aCBleHRyZW1lIGNhdXRpb24uCisKKy0tCityZW1vdmluZyB1bnRvdWNoZWQgY29udGVudDo6CisKK0NvbnRlbnQgd2hpY2ggZG9lcyBub3QgZGlmZmVyIGJldHdlZW4gdGhlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgbWF5IGJlCitzaG93biBvbiBjb250ZXh0IGxpbmVzLCBiZWdpbm5pbmcgd2l0aCBhICIgIiAoc3BhY2UpLiAgWW91IGNhbiBzdGFnZQorY29udGV4dCBsaW5lcyBmb3IgcmVtb3ZhbCBieSBjb252ZXJ0aW5nIHRoZSBzcGFjZSB0byBhICItIi4gVGhlCityZXN1bHRpbmcgd29ya2luZyB0cmVlIGZpbGUgd2lsbCBhcHBlYXIgdG8gcmUtYWRkIHRoZSBjb250ZW50LgorCittb2RpZnlpbmcgZXhpc3RpbmcgY29udGVudDo6CisKK09uZSBjYW4gYWxzbyBtb2RpZnkgY29udGV4dCBsaW5lcyBieSBzdGFnaW5nIHRoZW0gZm9yIHJlbW92YWwgKGJ5Citjb252ZXJ0aW5nICIgIiB0byAiLSIpIGFuZCBhZGRpbmcgYSAie3BsdXN9IiBsaW5lIHdpdGggdGhlIG5ldyBjb250ZW50LgorU2ltaWxhcmx5LCBvbmUgY2FuIG1vZGlmeSAie3BsdXN9IiBsaW5lcyBmb3IgZXhpc3RpbmcgYWRkaXRpb25zIG9yCittb2RpZmljYXRpb25zLiBJbiBhbGwgY2FzZXMsIHRoZSBuZXcgbW9kaWZpY2F0aW9uIHdpbGwgYXBwZWFyIHJldmVydGVkCitpbiB0aGUgd29ya2luZyB0cmVlLgorCituZXcgY29udGVudDo6CisKK1lvdSBtYXkgYWxzbyBhZGQgbmV3IGNvbnRlbnQgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcGF0Y2g7IHNpbXBseQorYWRkIG5ldyBsaW5lcywgZWFjaCBzdGFydGluZyB3aXRoICJ7cGx1c30iLiBUaGUgYWRkaXRpb24gd2lsbCBhcHBlYXIKK3JldmVydGVkIGluIHRoZSB3b3JraW5nIHRyZWUuCistLQorCitUaGVyZSBhcmUgYWxzbyBzZXZlcmFsIG9wZXJhdGlvbnMgd2hpY2ggc2hvdWxkIGJlIGF2b2lkZWQgZW50aXJlbHksIGFzCit0aGV5IHdpbGwgbWFrZSB0aGUgcGF0Y2ggaW1wb3NzaWJsZSB0byBhcHBseToKKworKiBhZGRpbmcgY29udGV4dCAoIiAiKSBvciByZW1vdmFsICgiLSIpIGxpbmVzCisqIGRlbGV0aW5nIGNvbnRleHQgb3IgcmVtb3ZhbCBsaW5lcworKiBtb2RpZnlpbmcgdGhlIGNvbnRlbnRzIG9mIGNvbnRleHQgb3IgcmVtb3ZhbCBsaW5lcworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXN0YXR1c1sxXQorbGlua2dpdDpnaXQtcm1bMV0KK2xpbmtnaXQ6Z2l0LXJlc2V0WzFdCitsaW5rZ2l0OmdpdC1tdlsxXQorbGlua2dpdDpnaXQtY29tbWl0WzFdCitsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhjMDg1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dApAQCAtMCwwICsxLDI1MCBAQAorZ2l0LWFtKDEpCis9PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWFtIC0gQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBmcm9tIGEgbWFpbGJveAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBhbScgWy0tc2lnbm9mZl0gWy0ta2VlcF0gWy0tW25vLV1rZWVwLWNyXSBbLS1bbm8tXXV0ZjhdCisJIFstLVtuby1dM3dheV0gWy0taW50ZXJhY3RpdmVdIFstLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlXQorCSBbLS1pZ25vcmUtZGF0ZV0gWy0taWdub3JlLXNwYWNlLWNoYW5nZSB8IC0taWdub3JlLXdoaXRlc3BhY2VdCisJIFstLXdoaXRlc3BhY2U9PG9wdGlvbj5dIFstQzxuPl0gWy1wPG4+XSBbLS1kaXJlY3Rvcnk9PGRpcj5dCisJIFstLWV4Y2x1ZGU9PHBhdGg+XSBbLS1pbmNsdWRlPTxwYXRoPl0gWy0tcmVqZWN0XSBbLXEgfCAtLXF1aWV0XQorCSBbLS1bbm8tXXNjaXNzb3JzXSBbLVNbPGtleWlkPl1dIFstLXBhdGNoLWZvcm1hdD08Zm9ybWF0Pl0KKwkgWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXQorJ2dpdCBhbScgKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0IHwgLS1xdWl0IHwgLS1zaG93LWN1cnJlbnQtcGF0Y2hbPShkaWZmfHJhdyldKQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1NwbGl0cyBtYWlsIG1lc3NhZ2VzIGluIGEgbWFpbGJveCBpbnRvIGNvbW1pdCBsb2cgbWVzc2FnZSwKK2F1dGhvcnNoaXAgaW5mb3JtYXRpb24gYW5kIHBhdGNoZXMsIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlCitjdXJyZW50IGJyYW5jaC4KKworT1BUSU9OUworLS0tLS0tLQorKDxtYm94Pnw8TWFpbGRpcj4pLi4uOjoKKwlUaGUgbGlzdCBvZiBtYWlsYm94IGZpbGVzIHRvIHJlYWQgcGF0Y2hlcyBmcm9tLiBJZiB5b3UgZG8gbm90CisJc3VwcGx5IHRoaXMgYXJndW1lbnQsIHRoZSBjb21tYW5kIHJlYWRzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCUlmIHlvdSBzdXBwbHkgZGlyZWN0b3JpZXMsIHRoZXkgd2lsbCBiZSB0cmVhdGVkIGFzIE1haWxkaXJzLgorCistczo6CistLXNpZ25vZmY6OgorCUFkZCBhIGBTaWduZWQtb2ZmLWJ5OmAgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UsIHVzaW5nCisJdGhlIGNvbW1pdHRlciBpZGVudGl0eSBvZiB5b3Vyc2VsZi4KKwlTZWUgdGhlIHNpZ25vZmYgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworLWs6OgorLS1rZWVwOjoKKwlQYXNzIGAta2AgZmxhZyB0byAnZ2l0IG1haWxpbmZvJyAoc2VlIGxpbmtnaXQ6Z2l0LW1haWxpbmZvWzFdKS4KKworLS1rZWVwLW5vbi1wYXRjaDo6CisJUGFzcyBgLWJgIGZsYWcgdG8gJ2dpdCBtYWlsaW5mbycgKHNlZSBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuCisKKy0tW25vLV1rZWVwLWNyOjoKKwlXaXRoIGAtLWtlZXAtY3JgLCBjYWxsICdnaXQgbWFpbHNwbGl0JyAoc2VlIGxpbmtnaXQ6Z2l0LW1haWxzcGxpdFsxXSkKKwl3aXRoIHRoZSBzYW1lIG9wdGlvbiwgdG8gcHJldmVudCBpdCBmcm9tIHN0cmlwcGluZyBDUiBhdCB0aGUgZW5kIG9mCisJbGluZXMuIGBhbS5rZWVwY3JgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUKKwlkZWZhdWx0IGJlaGF2aW91ci4gIGAtLW5vLWtlZXAtY3JgIGlzIHVzZWZ1bCB0byBvdmVycmlkZSBgYW0ua2VlcGNyYC4KKworLWM6OgorLS1zY2lzc29yczo6CisJUmVtb3ZlIGV2ZXJ5dGhpbmcgaW4gYm9keSBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIChzZWUKKwlsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuIENhbiBiZSBhY3RpdmF0ZWQgYnkgZGVmYXVsdCB1c2luZworCXRoZSBgbWFpbGluZm8uc2Npc3NvcnNgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKy0tbm8tc2Npc3NvcnM6OgorCUlnbm9yZSBzY2lzc29ycyBsaW5lcyAoc2VlIGxpbmtnaXQ6Z2l0LW1haWxpbmZvWzFdKS4KKworLW06OgorLS1tZXNzYWdlLWlkOjoKKwlQYXNzIHRoZSBgLW1gIGZsYWcgdG8gJ2dpdCBtYWlsaW5mbycgKHNlZSBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSksCisJc28gdGhhdCB0aGUgTWVzc2FnZS1JRCBoZWFkZXIgaXMgYWRkZWQgdG8gdGhlIGNvbW1pdCBtZXNzYWdlLgorCVRoZSBgYW0ubWVzc2FnZWlkYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkKKwl0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCisKKy0tbm8tbWVzc2FnZS1pZDo6CisJRG8gbm90IGFkZCB0aGUgTWVzc2FnZS1JRCBoZWFkZXIgdG8gdGhlIGNvbW1pdCBtZXNzYWdlLgorCWBuby1tZXNzYWdlLWlkYCBpcyB1c2VmdWwgdG8gb3ZlcnJpZGUgYGFtLm1lc3NhZ2VpZGAuCisKKy1xOjoKKy0tcXVpZXQ6OgorCUJlIHF1aWV0LiBPbmx5IHByaW50IGVycm9yIG1lc3NhZ2VzLgorCistdTo6CistLXV0Zjg6OgorCVBhc3MgYC11YCBmbGFnIHRvICdnaXQgbWFpbGluZm8nIChzZWUgbGlua2dpdDpnaXQtbWFpbGluZm9bMV0pLgorCVRoZSBwcm9wb3NlZCBjb21taXQgbG9nIG1lc3NhZ2UgdGFrZW4gZnJvbSB0aGUgZS1tYWlsCisJaXMgcmUtY29kZWQgaW50byBVVEYtOCBlbmNvZGluZyAoY29uZmlndXJhdGlvbiB2YXJpYWJsZQorCWBpMThuLmNvbW1pdGVuY29kaW5nYCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHByb2plY3QncworCXByZWZlcnJlZCBlbmNvZGluZyBpZiBpdCBpcyBub3QgVVRGLTgpLgorKworVGhpcyB3YXMgb3B0aW9uYWwgaW4gcHJpb3IgdmVyc2lvbnMgb2YgZ2l0LCBidXQgbm93IGl0IGlzIHRoZQorZGVmYXVsdC4gICBZb3UgY2FuIHVzZSBgLS1uby11dGY4YCB0byBvdmVycmlkZSB0aGlzLgorCistLW5vLXV0Zjg6OgorCVBhc3MgYC1uYCBmbGFnIHRvICdnaXQgbWFpbGluZm8nIChzZWUKKwlsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuCisKKy0zOjoKKy0tM3dheTo6CistLW5vLTN3YXk6OgorCVdoZW4gdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5IGNsZWFubHksIGZhbGwgYmFjayBvbgorCTMtd2F5IG1lcmdlIGlmIHRoZSBwYXRjaCByZWNvcmRzIHRoZSBpZGVudGl0eSBvZiBibG9icworCWl0IGlzIHN1cHBvc2VkIHRvIGFwcGx5IHRvIGFuZCB3ZSBoYXZlIHRob3NlIGJsb2JzCisJYXZhaWxhYmxlIGxvY2FsbHkuIGAtLW5vLTN3YXlgIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlCisJYW0udGhyZWVXYXkgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sCisJc2VlIGFtLnRocmVlV2F5IGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS1yZXJlcmUtYXV0b3VwZGF0ZTo6CistLW5vLXJlcmVyZS1hdXRvdXBkYXRlOjoKKwlBbGxvdyB0aGUgcmVyZXJlIG1lY2hhbmlzbSB0byB1cGRhdGUgdGhlIGluZGV4IHdpdGggdGhlCisJcmVzdWx0IG9mIGF1dG8tY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZS4KKworLS1pZ25vcmUtc3BhY2UtY2hhbmdlOjoKKy0taWdub3JlLXdoaXRlc3BhY2U6OgorLS13aGl0ZXNwYWNlPTxvcHRpb24+OjoKKy1DPG4+OjoKKy1wPG4+OjoKKy0tZGlyZWN0b3J5PTxkaXI+OjoKKy0tZXhjbHVkZT08cGF0aD46OgorLS1pbmNsdWRlPTxwYXRoPjo6CistLXJlamVjdDo6CisJVGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0byB0aGUgJ2dpdCBhcHBseScgKHNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXSkKKwlwcm9ncmFtIHRoYXQgYXBwbGllcworCXRoZSBwYXRjaC4KKworLS1wYXRjaC1mb3JtYXQ6OgorCUJ5IGRlZmF1bHQgdGhlIGNvbW1hbmQgd2lsbCB0cnkgdG8gZGV0ZWN0IHRoZSBwYXRjaCBmb3JtYXQKKwlhdXRvbWF0aWNhbGx5LiBUaGlzIG9wdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gYnlwYXNzIHRoZSBhdXRvbWF0aWMKKwlkZXRlY3Rpb24gYW5kIHNwZWNpZnkgdGhlIHBhdGNoIGZvcm1hdCB0aGF0IHRoZSBwYXRjaChlcykgc2hvdWxkIGJlCisJaW50ZXJwcmV0ZWQgYXMuIFZhbGlkIGZvcm1hdHMgYXJlIG1ib3gsIG1ib3hyZCwKKwlzdGdpdCwgc3RnaXQtc2VyaWVzIGFuZCBoZy4KKworLWk6OgorLS1pbnRlcmFjdGl2ZTo6CisJUnVuIGludGVyYWN0aXZlbHkuCisKKy0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGU6OgorCUJ5IGRlZmF1bHQgdGhlIGNvbW1hbmQgcmVjb3JkcyB0aGUgZGF0ZSBmcm9tIHRoZSBlLW1haWwKKwltZXNzYWdlIGFzIHRoZSBjb21taXQgYXV0aG9yIGRhdGUsIGFuZCB1c2VzIHRoZSB0aW1lIG9mCisJY29tbWl0IGNyZWF0aW9uIGFzIHRoZSBjb21taXR0ZXIgZGF0ZS4gVGhpcyBhbGxvd3MgdGhlCisJdXNlciB0byBsaWUgYWJvdXQgdGhlIGNvbW1pdHRlciBkYXRlIGJ5IHVzaW5nIHRoZSBzYW1lCisJdmFsdWUgYXMgdGhlIGF1dGhvciBkYXRlLgorCistLWlnbm9yZS1kYXRlOjoKKwlCeSBkZWZhdWx0IHRoZSBjb21tYW5kIHJlY29yZHMgdGhlIGRhdGUgZnJvbSB0aGUgZS1tYWlsCisJbWVzc2FnZSBhcyB0aGUgY29tbWl0IGF1dGhvciBkYXRlLCBhbmQgdXNlcyB0aGUgdGltZSBvZgorCWNvbW1pdCBjcmVhdGlvbiBhcyB0aGUgY29tbWl0dGVyIGRhdGUuIFRoaXMgYWxsb3dzIHRoZQorCXVzZXIgdG8gbGllIGFib3V0IHRoZSBhdXRob3IgZGF0ZSBieSB1c2luZyB0aGUgc2FtZQorCXZhbHVlIGFzIHRoZSBjb21taXR0ZXIgZGF0ZS4KKworLS1za2lwOjoKKwlTa2lwIHRoZSBjdXJyZW50IHBhdGNoLiAgVGhpcyBpcyBvbmx5IG1lYW5pbmdmdWwgd2hlbgorCXJlc3RhcnRpbmcgYW4gYWJvcnRlZCBwYXRjaC4KKworLVNbPGtleWlkPl06OgorLS1ncGctc2lnbls9PGtleWlkPl06OgorLS1uby1ncGctc2lnbjo6CisJR1BHLXNpZ24gY29tbWl0cy4gVGhlIGBrZXlpZGAgYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kCisJZGVmYXVsdHMgdG8gdGhlIGNvbW1pdHRlciBpZGVudGl0eTsgaWYgc3BlY2lmaWVkLCBpdCBtdXN0IGJlCisJc3R1Y2sgdG8gdGhlIG9wdGlvbiB3aXRob3V0IGEgc3BhY2UuIGAtLW5vLWdwZy1zaWduYCBpcyB1c2VmdWwgdG8KKwljb3VudGVybWFuZCBib3RoIGBjb21taXQuZ3BnU2lnbmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYW5kCisJZWFybGllciBgLS1ncGctc2lnbmAuCisKKy0tY29udGludWU6OgorLXI6OgorLS1yZXNvbHZlZDo6CisJQWZ0ZXIgYSBwYXRjaCBmYWlsdXJlIChlLmcuIGF0dGVtcHRpbmcgdG8gYXBwbHkKKwljb25mbGljdGluZyBwYXRjaCksIHRoZSB1c2VyIGhhcyBhcHBsaWVkIGl0IGJ5IGhhbmQgYW5kCisJdGhlIGluZGV4IGZpbGUgc3RvcmVzIHRoZSByZXN1bHQgb2YgdGhlIGFwcGxpY2F0aW9uLgorCU1ha2UgYSBjb21taXQgdXNpbmcgdGhlIGF1dGhvcnNoaXAgYW5kIGNvbW1pdCBsb2cKKwlleHRyYWN0ZWQgZnJvbSB0aGUgZS1tYWlsIG1lc3NhZ2UgYW5kIHRoZSBjdXJyZW50IGluZGV4CisJZmlsZSwgYW5kIGNvbnRpbnVlLgorCistLXJlc29sdmVtc2c9PG1zZz46OgorCVdoZW4gYSBwYXRjaCBmYWlsdXJlIG9jY3VycywgPG1zZz4gd2lsbCBiZSBwcmludGVkCisJdG8gdGhlIHNjcmVlbiBiZWZvcmUgZXhpdGluZy4gIFRoaXMgb3ZlcnJpZGVzIHRoZQorCXN0YW5kYXJkIG1lc3NhZ2UgaW5mb3JtaW5nIHlvdSB0byB1c2UgYC0tY29udGludWVgCisJb3IgYC0tc2tpcGAgdG8gaGFuZGxlIHRoZSBmYWlsdXJlLiAgVGhpcyBpcyBzb2xlbHkKKwlmb3IgaW50ZXJuYWwgdXNlIGJldHdlZW4gJ2dpdCByZWJhc2UnIGFuZCAnZ2l0IGFtJy4KKworLS1hYm9ydDo6CisJUmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLgorCistLXF1aXQ6OgorCUFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24gYnV0IGtlZXAgSEVBRCBhbmQgdGhlIGluZGV4CisJdW50b3VjaGVkLgorCistLXNob3ctY3VycmVudC1wYXRjaFs9KGRpZmZ8cmF3KV06OgorCVNob3cgdGhlIG1lc3NhZ2UgYXQgd2hpY2ggYGdpdCBhbWAgaGFzIHN0b3BwZWQgZHVlIHRvCisJY29uZmxpY3RzLiAgSWYgYHJhd2AgaXMgc3BlY2lmaWVkLCBzaG93IHRoZSByYXcgY29udGVudHMgb2YKKwl0aGUgZS1tYWlsIG1lc3NhZ2U7IGlmIGBkaWZmYCwgc2hvdyB0aGUgZGlmZiBwb3J0aW9uIG9ubHkuCisJRGVmYXVsdHMgdG8gYHJhd2AuCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworVGhlIGNvbW1pdCBhdXRob3IgbmFtZSBpcyB0YWtlbiBmcm9tIHRoZSAiRnJvbTogIiBsaW5lIG9mIHRoZQorbWVzc2FnZSwgYW5kIGNvbW1pdCBhdXRob3IgZGF0ZSBpcyB0YWtlbiBmcm9tIHRoZSAiRGF0ZTogIiBsaW5lCitvZiB0aGUgbWVzc2FnZS4gIFRoZSAiU3ViamVjdDogIiBsaW5lIGlzIHVzZWQgYXMgdGhlIHRpdGxlIG9mCit0aGUgY29tbWl0LCBhZnRlciBzdHJpcHBpbmcgY29tbW9uIHByZWZpeCAiW1BBVENIIDxhbnl0aGluZz5dIi4KK1RoZSAiU3ViamVjdDogIiBsaW5lIGlzIHN1cHBvc2VkIHRvIGNvbmNpc2VseSBkZXNjcmliZSB3aGF0IHRoZQorY29tbWl0IGlzIGFib3V0IGluIG9uZSBsaW5lIG9mIHRleHQuCisKKyJGcm9tOiAiLCAiRGF0ZTogIiwgYW5kICJTdWJqZWN0OiAiIGxpbmVzIHN0YXJ0aW5nIHRoZSBib2R5IG92ZXJyaWRlIHRoZQorcmVzcGVjdGl2ZSBjb21taXQgYXV0aG9yIG5hbWUgYW5kIHRpdGxlIHZhbHVlcyB0YWtlbiBmcm9tIHRoZSBoZWFkZXJzLgorCitUaGUgY29tbWl0IG1lc3NhZ2UgaXMgZm9ybWVkIGJ5IHRoZSB0aXRsZSB0YWtlbiBmcm9tIHRoZQorIlN1YmplY3Q6ICIsIGEgYmxhbmsgbGluZSBhbmQgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UgdXAgdG8KK3doZXJlIHRoZSBwYXRjaCBiZWdpbnMuICBFeGNlc3Mgd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIGVhY2gKK2xpbmUgaXMgYXV0b21hdGljYWxseSBzdHJpcHBlZC4KKworVGhlIHBhdGNoIGlzIGV4cGVjdGVkIHRvIGJlIGlubGluZSwgZGlyZWN0bHkgZm9sbG93aW5nIHRoZQorbWVzc2FnZS4gIEFueSBsaW5lIHRoYXQgaXMgb2YgdGhlIGZvcm06CisKKyogdGhyZWUtZGFzaGVzIGFuZCBlbmQtb2YtbGluZSwgb3IKKyogYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGggImRpZmYgLSIsIG9yCisqIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoICJJbmRleDogIgorCitpcyB0YWtlbiBhcyB0aGUgYmVnaW5uaW5nIG9mIGEgcGF0Y2gsIGFuZCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlCitpcyB0ZXJtaW5hdGVkIGJlZm9yZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBzdWNoIGEgbGluZS4KKworV2hlbiBpbml0aWFsbHkgaW52b2tpbmcgYGdpdCBhbWAsIHlvdSBnaXZlIGl0IHRoZSBuYW1lcyBvZiB0aGUgbWFpbGJveGVzCit0byBwcm9jZXNzLiAgVXBvbiBzZWVpbmcgdGhlIGZpcnN0IHBhdGNoIHRoYXQgZG9lcyBub3QgYXBwbHksIGl0CithYm9ydHMgaW4gdGhlIG1pZGRsZS4gIFlvdSBjYW4gcmVjb3ZlciBmcm9tIHRoaXMgaW4gb25lIG9mIHR3byB3YXlzOgorCisuIHNraXAgdGhlIGN1cnJlbnQgcGF0Y2ggYnkgcmUtcnVubmluZyB0aGUgY29tbWFuZCB3aXRoIHRoZSBgLS1za2lwYAorICBvcHRpb24uCisKKy4gaGFuZCByZXNvbHZlIHRoZSBjb25mbGljdCBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnksIGFuZCB1cGRhdGUKKyAgdGhlIGluZGV4IGZpbGUgdG8gYnJpbmcgaXQgaW50byBhIHN0YXRlIHRoYXQgdGhlIHBhdGNoIHNob3VsZAorICBoYXZlIHByb2R1Y2VkLiAgVGhlbiBydW4gdGhlIGNvbW1hbmQgd2l0aCB0aGUgYC0tY29udGludWVgIG9wdGlvbi4KKworVGhlIGNvbW1hbmQgcmVmdXNlcyB0byBwcm9jZXNzIG5ldyBtYWlsYm94ZXMgdW50aWwgdGhlIGN1cnJlbnQKK29wZXJhdGlvbiBpcyBmaW5pc2hlZCwgc28gaWYgeW91IGRlY2lkZSB0byBzdGFydCBvdmVyIGZyb20gc2NyYXRjaCwKK3J1biBgZ2l0IGFtIC0tYWJvcnRgIGJlZm9yZSBydW5uaW5nIHRoZSBjb21tYW5kIHdpdGggbWFpbGJveAorbmFtZXMuCisKK0JlZm9yZSBhbnkgcGF0Y2hlcyBhcmUgYXBwbGllZCwgT1JJR19IRUFEIGlzIHNldCB0byB0aGUgdGlwIG9mIHRoZQorY3VycmVudCBicmFuY2guICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIG11bHRpcGxlCitjb21taXRzLCBsaWtlIHJ1bm5pbmcgJ2dpdCBhbScgb24gdGhlIHdyb25nIGJyYW5jaCBvciBhbiBlcnJvciBpbiB0aGUKK2NvbW1pdHMgdGhhdCBpcyBtb3JlIGVhc2lseSBmaXhlZCBieSBjaGFuZ2luZyB0aGUgbWFpbGJveCAoZS5nLgorZXJyb3JzIGluIHRoZSAiRnJvbToiIGxpbmVzKS4KKworSE9PS1MKKy0tLS0tCitUaGlzIGNvbW1hbmQgY2FuIHJ1biBgYXBwbHlwYXRjaC1tc2dgLCBgcHJlLWFwcGx5cGF0Y2hgLAorYW5kIGBwb3N0LWFwcGx5cGF0Y2hgIGhvb2tzLiAgU2VlIGxpbmtnaXQ6Z2l0aG9va3NbNV0gZm9yIG1vcmUKK2luZm9ybWF0aW9uLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWFwcGx5WzFdLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFubm90YXRlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFubm90YXRlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDRhODMxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYW5ub3RhdGUudHh0CkBAIC0wLDAgKzEsMzMgQEAKK2dpdC1hbm5vdGF0ZSgxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1hbm5vdGF0ZSAtIEFubm90YXRlIGZpbGUgbGluZXMgd2l0aCBjb21taXQgaW5mb3JtYXRpb24KKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGFubm90YXRlJyBbPG9wdGlvbnM+XSA8ZmlsZT4gWzxyZXZpc2lvbj5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQW5ub3RhdGVzIGVhY2ggbGluZSBpbiB0aGUgZ2l2ZW4gZmlsZSB3aXRoIGluZm9ybWF0aW9uIGZyb20gdGhlIGNvbW1pdAord2hpY2ggaW50cm9kdWNlZCB0aGUgbGluZS4gT3B0aW9uYWxseSBhbm5vdGF0ZXMgZnJvbSBhIGdpdmVuIHJldmlzaW9uLgorCitUaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBjb21tYW5kIGFuZCBsaW5rZ2l0OmdpdC1ibGFtZVsxXSBpcyB0aGF0Cit0aGV5IHVzZSBzbGlnaHRseSBkaWZmZXJlbnQgb3V0cHV0IGZvcm1hdHMsIGFuZCB0aGlzIGNvbW1hbmQgZXhpc3RzIG9ubHkKK2ZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHRvIHN1cHBvcnQgZXhpc3Rpbmcgc2NyaXB0cywgYW5kIHByb3ZpZGUgYSBtb3JlCitmYW1pbGlhciBjb21tYW5kIG5hbWUgZm9yIHBlb3BsZSBjb21pbmcgZnJvbSBvdGhlciBTQ00gc3lzdGVtcy4KKworT1BUSU9OUworLS0tLS0tLQoraW5jbHVkZTo6YmxhbWUtb3B0aW9ucy50eHRbXQorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWJsYW1lWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YWEzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseS50eHQKQEAgLTAsMCArMSwyODUgQEAKK2dpdC1hcHBseSgxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1hcHBseSAtIEFwcGx5IGEgcGF0Y2ggdG8gZmlsZXMgYW5kL29yIHRvIHRoZSBpbmRleAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBhcHBseScgWy0tc3RhdF0gWy0tbnVtc3RhdF0gWy0tc3VtbWFyeV0gWy0tY2hlY2tdIFstLWluZGV4IHwgLS1pbnRlbnQtdG8tYWRkXSBbLS0zd2F5XQorCSAgWy0tYXBwbHldIFstLW5vLWFkZF0gWy0tYnVpbGQtZmFrZS1hbmNlc3Rvcj08ZmlsZT5dIFstUiB8IC0tcmV2ZXJzZV0KKwkgIFstLWFsbG93LWJpbmFyeS1yZXBsYWNlbWVudCB8IC0tYmluYXJ5XSBbLS1yZWplY3RdIFstel0KKwkgIFstcDxuPl0gWy1DPG4+XSBbLS1pbmFjY3VyYXRlLWVvZl0gWy0tcmVjb3VudF0gWy0tY2FjaGVkXQorCSAgWy0taWdub3JlLXNwYWNlLWNoYW5nZSB8IC0taWdub3JlLXdoaXRlc3BhY2VdCisJICBbLS13aGl0ZXNwYWNlPShub3dhcm58d2FybnxmaXh8ZXJyb3J8ZXJyb3ItYWxsKV0KKwkgIFstLWV4Y2x1ZGU9PHBhdGg+XSBbLS1pbmNsdWRlPTxwYXRoPl0gWy0tZGlyZWN0b3J5PTxyb290Pl0KKwkgIFstLXZlcmJvc2VdIFstLXVuc2FmZS1wYXRoc10gWzxwYXRjaD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgdGhlIHN1cHBsaWVkIGRpZmYgb3V0cHV0IChpLmUuICJhIHBhdGNoIikgYW5kIGFwcGxpZXMgaXQgdG8gZmlsZXMuCitXaGVuIHJ1bm5pbmcgZnJvbSBhIHN1YmRpcmVjdG9yeSBpbiBhIHJlcG9zaXRvcnksIHBhdGNoZWQgcGF0aHMKK291dHNpZGUgdGhlIGRpcmVjdG9yeSBhcmUgaWdub3JlZC4KK1dpdGggdGhlIGAtLWluZGV4YCBvcHRpb24gdGhlIHBhdGNoIGlzIGFsc28gYXBwbGllZCB0byB0aGUgaW5kZXgsIGFuZAord2l0aCB0aGUgYC0tY2FjaGVkYCBvcHRpb24gdGhlIHBhdGNoIGlzIG9ubHkgYXBwbGllZCB0byB0aGUgaW5kZXguCitXaXRob3V0IHRoZXNlIG9wdGlvbnMsIHRoZSBjb21tYW5kIGFwcGxpZXMgdGhlIHBhdGNoIG9ubHkgdG8gZmlsZXMsCithbmQgZG9lcyBub3QgcmVxdWlyZSB0aGVtIHRvIGJlIGluIGEgR2l0IHJlcG9zaXRvcnkuCisKK1RoaXMgY29tbWFuZCBhcHBsaWVzIHRoZSBwYXRjaCBidXQgZG9lcyBub3QgY3JlYXRlIGEgY29tbWl0LiAgVXNlCitsaW5rZ2l0OmdpdC1hbVsxXSB0byBjcmVhdGUgY29tbWl0cyBmcm9tIHBhdGNoZXMgZ2VuZXJhdGVkIGJ5CitsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gYW5kL29yIHJlY2VpdmVkIGJ5IGVtYWlsLgorCitPUFRJT05TCistLS0tLS0tCis8cGF0Y2g+Li4uOjoKKwlUaGUgZmlsZXMgdG8gcmVhZCB0aGUgcGF0Y2ggZnJvbS4gICctJyBjYW4gYmUgdXNlZCB0byByZWFkCisJZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuCisKKy0tc3RhdDo6CisJSW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlCisJaW5wdXQuICBUdXJucyBvZmYgImFwcGx5Ii4KKworLS1udW1zdGF0OjoKKwlTaW1pbGFyIHRvIGAtLXN0YXRgLCBidXQgc2hvd3MgdGhlIG51bWJlciBvZiBhZGRlZCBhbmQKKwlkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24gYW5kIHRoZSBwYXRobmFtZSB3aXRob3V0CisJYWJicmV2aWF0aW9uLCB0byBtYWtlIGl0IG1vcmUgbWFjaGluZSBmcmllbmRseS4gIEZvcgorCWJpbmFyeSBmaWxlcywgb3V0cHV0cyB0d28gYC1gIGluc3RlYWQgb2Ygc2F5aW5nCisJYDAgMGAuICBUdXJucyBvZmYgImFwcGx5Ii4KKworLS1zdW1tYXJ5OjoKKwlJbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgY29uZGVuc2VkCisJc3VtbWFyeSBvZiBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIGdpdCBkaWZmIGV4dGVuZGVkCisJaGVhZGVycywgc3VjaCBhcyBjcmVhdGlvbnMsIHJlbmFtZXMgYW5kIG1vZGUgY2hhbmdlcy4KKwlUdXJucyBvZmYgImFwcGx5Ii4KKworLS1jaGVjazo6CisJSW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMKKwlhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgdHJlZSBhbmQvb3IgdGhlIGluZGV4CisJZmlsZSBhbmQgZGV0ZWN0cyBlcnJvcnMuICBUdXJucyBvZmYgImFwcGx5Ii4KKworLS1pbmRleDo6CisJV2hlbiBgLS1jaGVja2AgaXMgaW4gZWZmZWN0LCBvciB3aGVuIGFwcGx5aW5nIHRoZSBwYXRjaAorCSh3aGljaCBpcyB0aGUgZGVmYXVsdCB3aGVuIG5vbmUgb2YgdGhlIG9wdGlvbnMgdGhhdAorCWRpc2FibGVzIGl0IGlzIGluIGVmZmVjdCksIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMKKwlhcHBsaWNhYmxlIHRvIHdoYXQgdGhlIGN1cnJlbnQgaW5kZXggZmlsZSByZWNvcmRzLiAgSWYKKwl0aGUgZmlsZSB0byBiZSBwYXRjaGVkIGluIHRoZSB3b3JraW5nIHRyZWUgaXMgbm90CisJdXAgdG8gZGF0ZSwgaXQgaXMgZmxhZ2dlZCBhcyBhbiBlcnJvci4gIFRoaXMgZmxhZyBhbHNvCisJY2F1c2VzIHRoZSBpbmRleCBmaWxlIHRvIGJlIHVwZGF0ZWQuCisKKy0tY2FjaGVkOjoKKwlBcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZS4gSW5zdGVhZCB0YWtlIHRoZQorCWNhY2hlZCBkYXRhLCBhcHBseSB0aGUgcGF0Y2gsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZSBpbmRleAorCXdpdGhvdXQgdXNpbmcgdGhlIHdvcmtpbmcgdHJlZS4gVGhpcyBpbXBsaWVzIGAtLWluZGV4YC4KKworLS1pbnRlbnQtdG8tYWRkOjoKKwlXaGVuIGFwcGx5aW5nIHRoZSBwYXRjaCBvbmx5IHRvIHRoZSB3b3JraW5nIHRyZWUsIG1hcmsgbmV3CisJZmlsZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGluZGV4IGxhdGVyIChzZWUgYC0taW50ZW50LXRvLWFkZGAKKwlvcHRpb24gaW4gbGlua2dpdDpnaXQtYWRkWzFdKS4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCB1bmxlc3MKKwlydW5uaW5nIGluIGEgR2l0IHJlcG9zaXRvcnkgYW5kIGAtLWluZGV4YCBpcyBub3Qgc3BlY2lmaWVkLgorCU5vdGUgdGhhdCBgLS1pbmRleGAgY291bGQgYmUgaW1wbGllZCBieSBvdGhlciBvcHRpb25zIHN1Y2gKKwlhcyBgLS1jYWNoZWRgIG9yIGAtLTN3YXlgLgorCistMzo6CistLTN3YXk6OgorCVdoZW4gdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5IGNsZWFubHksIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZSBpZgorCXRoZSBwYXRjaCByZWNvcmRzIHRoZSBpZGVudGl0eSBvZiBibG9icyBpdCBpcyBzdXBwb3NlZCB0byBhcHBseSB0bywKKwlhbmQgd2UgaGF2ZSB0aG9zZSBibG9icyBhdmFpbGFibGUgbG9jYWxseSwgcG9zc2libHkgbGVhdmluZyB0aGUKKwljb25mbGljdCBtYXJrZXJzIGluIHRoZSBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGZvciB0aGUgdXNlciB0bworCXJlc29sdmUuICBUaGlzIG9wdGlvbiBpbXBsaWVzIHRoZSBgLS1pbmRleGAgb3B0aW9uLCBhbmQgaXMgaW5jb21wYXRpYmxlCisJd2l0aCB0aGUgYC0tcmVqZWN0YCBhbmQgdGhlIGAtLWNhY2hlZGAgb3B0aW9ucy4KKworLS1idWlsZC1mYWtlLWFuY2VzdG9yPTxmaWxlPjo6CisJTmV3ZXIgJ2dpdCBkaWZmJyBvdXRwdXQgaGFzIGVtYmVkZGVkICdpbmRleCBpbmZvcm1hdGlvbicKKwlmb3IgZWFjaCBibG9iIHRvIGhlbHAgaWRlbnRpZnkgdGhlIG9yaWdpbmFsIHZlcnNpb24gdGhhdAorCXRoZSBwYXRjaCBhcHBsaWVzIHRvLiAgV2hlbiB0aGlzIGZsYWcgaXMgZ2l2ZW4sIGFuZCBpZgorCXRoZSBvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGUgYmxvYnMgYXJlIGF2YWlsYWJsZSBsb2NhbGx5LAorCWJ1aWxkcyBhIHRlbXBvcmFyeSBpbmRleCBjb250YWluaW5nIHRob3NlIGJsb2JzLgorKworV2hlbiBhIHB1cmUgbW9kZSBjaGFuZ2UgaXMgZW5jb3VudGVyZWQgKHdoaWNoIGhhcyBubyBpbmRleCBpbmZvcm1hdGlvbiksCit0aGUgaW5mb3JtYXRpb24gaXMgcmVhZCBmcm9tIHRoZSBjdXJyZW50IGluZGV4IGluc3RlYWQuCisKKy1SOjoKKy0tcmV2ZXJzZTo6CisJQXBwbHkgdGhlIHBhdGNoIGluIHJldmVyc2UuCisKKy0tcmVqZWN0OjoKKwlGb3IgYXRvbWljaXR5LCAnZ2l0IGFwcGx5JyBieSBkZWZhdWx0IGZhaWxzIHRoZSB3aG9sZSBwYXRjaCBhbmQKKwlkb2VzIG5vdCB0b3VjaCB0aGUgd29ya2luZyB0cmVlIHdoZW4gc29tZSBvZiB0aGUgaHVua3MKKwlkbyBub3QgYXBwbHkuICBUaGlzIG9wdGlvbiBtYWtlcyBpdCBhcHBseQorCXRoZSBwYXJ0cyBvZiB0aGUgcGF0Y2ggdGhhdCBhcmUgYXBwbGljYWJsZSwgYW5kIGxlYXZlIHRoZQorCXJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMuCisKKy16OjoKKwlXaGVuIGAtLW51bXN0YXRgIGhhcyBiZWVuIGdpdmVuLCBkbyBub3QgbXVuZ2UgcGF0aG5hbWVzLAorCWJ1dCB1c2UgYSBOVUwtdGVybWluYXRlZCBtYWNoaW5lLXJlYWRhYmxlIGZvcm1hdC4KKysKK1dpdGhvdXQgdGhpcyBvcHRpb24sIHBhdGhuYW1lcyB3aXRoICJ1bnVzdWFsIiBjaGFyYWN0ZXJzIGFyZSBxdW90ZWQgYXMKK2V4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYCAoc2VlCitsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCistcDxuPjo6CisJUmVtb3ZlIDxuPiBsZWFkaW5nIHBhdGggY29tcG9uZW50cyAoc2VwYXJhdGVkIGJ5IHNsYXNoZXMpIGZyb20KKwl0cmFkaXRpb25hbCBkaWZmIHBhdGhzLiBFLmcuLCB3aXRoIGAtcDJgLCBhIHBhdGNoIGFnYWluc3QKKwlgYS9kaXIvZmlsZWAgd2lsbCBiZSBhcHBsaWVkIGRpcmVjdGx5IHRvIGBmaWxlYC4gVGhlIGRlZmF1bHQgaXMKKwkxLgorCistQzxuPjo6CisJRW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBzdXJyb3VuZGluZyBjb250ZXh0IG1hdGNoIGJlZm9yZQorCWFuZCBhZnRlciBlYWNoIGNoYW5nZS4gIFdoZW4gZmV3ZXIgbGluZXMgb2Ygc3Vycm91bmRpbmcKKwljb250ZXh0IGV4aXN0IHRoZXkgYWxsIG11c3QgbWF0Y2guICBCeSBkZWZhdWx0IG5vIGNvbnRleHQgaXMKKwlldmVyIGlnbm9yZWQuCisKKy0tdW5pZGlmZi16ZXJvOjoKKwlCeSBkZWZhdWx0LCAnZ2l0IGFwcGx5JyBleHBlY3RzIHRoYXQgdGhlIHBhdGNoIGJlaW5nCisJYXBwbGllZCBpcyBhIHVuaWZpZWQgZGlmZiB3aXRoIGF0IGxlYXN0IG9uZSBsaW5lIG9mIGNvbnRleHQuCisJVGhpcyBwcm92aWRlcyBnb29kIHNhZmV0eSBtZWFzdXJlcywgYnV0IGJyZWFrcyBkb3duIHdoZW4KKwlhcHBseWluZyBhIGRpZmYgZ2VuZXJhdGVkIHdpdGggYC0tdW5pZmllZD0wYC4gVG8gYnlwYXNzIHRoZXNlCisJY2hlY2tzIHVzZSBgLS11bmlkaWZmLXplcm9gLgorKworTm90ZSwgZm9yIHRoZSByZWFzb25zIHN0YXRlZCBhYm92ZSB1c2FnZSBvZiBjb250ZXh0LWZyZWUgcGF0Y2hlcyBpcworZGlzY291cmFnZWQuCisKKy0tYXBwbHk6OgorCUlmIHlvdSB1c2UgYW55IG9mIHRoZSBvcHRpb25zIG1hcmtlZCAiVHVybnMgb2ZmCisJJ2FwcGx5JyIgYWJvdmUsICdnaXQgYXBwbHknIHJlYWRzIGFuZCBvdXRwdXRzIHRoZQorCXJlcXVlc3RlZCBpbmZvcm1hdGlvbiB3aXRob3V0IGFjdHVhbGx5IGFwcGx5aW5nIHRoZQorCXBhdGNoLiAgR2l2ZSB0aGlzIGZsYWcgYWZ0ZXIgdGhvc2UgZmxhZ3MgdG8gYWxzbyBhcHBseQorCXRoZSBwYXRjaC4KKworLS1uby1hZGQ6OgorCVdoZW4gYXBwbHlpbmcgYSBwYXRjaCwgaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZQorCXBhdGNoLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBleHRyYWN0IHRoZSBjb21tb24gcGFydCBiZXR3ZWVuCisJdHdvIGZpbGVzIGJ5IGZpcnN0IHJ1bm5pbmcgJ2RpZmYnIG9uIHRoZW0gYW5kIGFwcGx5aW5nCisJdGhlIHJlc3VsdCB3aXRoIHRoaXMgb3B0aW9uLCB3aGljaCB3b3VsZCBhcHBseSB0aGUKKwlkZWxldGlvbiBwYXJ0IGJ1dCBub3QgdGhlIGFkZGl0aW9uIHBhcnQuCisKKy0tYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50OjoKKy0tYmluYXJ5OjoKKwlIaXN0b3JpY2FsbHkgd2UgZGlkIG5vdCBhbGxvdyBiaW5hcnkgcGF0Y2ggYXBwbGllZAorCXdpdGhvdXQgYW4gZXhwbGljaXQgcGVybWlzc2lvbiBmcm9tIHRoZSB1c2VyLCBhbmQgdGhpcworCWZsYWcgd2FzIHRoZSB3YXkgdG8gZG8gc28uICBDdXJyZW50bHkgd2UgYWx3YXlzIGFsbG93IGJpbmFyeQorCXBhdGNoIGFwcGxpY2F0aW9uLCBzbyB0aGlzIGlzIGEgbm8tb3AuCisKKy0tZXhjbHVkZT08cGF0aC1wYXR0ZXJuPjo6CisJRG9uJ3QgYXBwbHkgY2hhbmdlcyB0byBmaWxlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCBwYXR0ZXJuLiBUaGlzIGNhbgorCWJlIHVzZWZ1bCB3aGVuIGltcG9ydGluZyBwYXRjaHNldHMsIHdoZXJlIHlvdSB3YW50IHRvIGV4Y2x1ZGUgY2VydGFpbgorCWZpbGVzIG9yIGRpcmVjdG9yaWVzLgorCistLWluY2x1ZGU9PHBhdGgtcGF0dGVybj46OgorCUFwcGx5IGNoYW5nZXMgdG8gZmlsZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGggcGF0dGVybi4gVGhpcyBjYW4KKwliZSB1c2VmdWwgd2hlbiBpbXBvcnRpbmcgcGF0Y2hzZXRzLCB3aGVyZSB5b3Ugd2FudCB0byBpbmNsdWRlIGNlcnRhaW4KKwlmaWxlcyBvciBkaXJlY3Rvcmllcy4KKysKK1doZW4gYC0tZXhjbHVkZWAgYW5kIGAtLWluY2x1ZGVgIHBhdHRlcm5zIGFyZSB1c2VkLCB0aGV5IGFyZSBleGFtaW5lZCBpbiB0aGUKK29yZGVyIHRoZXkgYXBwZWFyIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCB0aGUgZmlyc3QgbWF0Y2ggZGV0ZXJtaW5lcyBpZiBhCitwYXRjaCB0byBlYWNoIHBhdGggaXMgdXNlZC4gIEEgcGF0Y2ggdG8gYSBwYXRoIHRoYXQgZG9lcyBub3QgbWF0Y2ggYW55CitpbmNsdWRlL2V4Y2x1ZGUgcGF0dGVybiBpcyB1c2VkIGJ5IGRlZmF1bHQgaWYgdGhlcmUgaXMgbm8gaW5jbHVkZSBwYXR0ZXJuCitvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgaWdub3JlZCBpZiB0aGVyZSBpcyBhbnkgaW5jbHVkZSBwYXR0ZXJuLgorCistLWlnbm9yZS1zcGFjZS1jaGFuZ2U6OgorLS1pZ25vcmUtd2hpdGVzcGFjZTo6CisJV2hlbiBhcHBseWluZyBhIHBhdGNoLCBpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIGluIGNvbnRleHQKKwlsaW5lcyBpZiBuZWNlc3NhcnkuCisJQ29udGV4dCBsaW5lcyB3aWxsIHByZXNlcnZlIHRoZWlyIHdoaXRlc3BhY2UsIGFuZCB0aGV5IHdpbGwgbm90CisJdW5kZXJnbyB3aGl0ZXNwYWNlIGZpeGluZyByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiB0aGUKKwlgLS13aGl0ZXNwYWNlYCBvcHRpb24uIE5ldyBsaW5lcyB3aWxsIHN0aWxsIGJlIGZpeGVkLCB0aG91Z2guCisKKy0td2hpdGVzcGFjZT08YWN0aW9uPjo6CisJV2hlbiBhcHBseWluZyBhIHBhdGNoLCBkZXRlY3QgYSBuZXcgb3IgbW9kaWZpZWQgbGluZSB0aGF0IGhhcworCXdoaXRlc3BhY2UgZXJyb3JzLiAgV2hhdCBhcmUgY29uc2lkZXJlZCB3aGl0ZXNwYWNlIGVycm9ycyBpcworCWNvbnRyb2xsZWQgYnkgYGNvcmUud2hpdGVzcGFjZWAgY29uZmlndXJhdGlvbi4gIEJ5IGRlZmF1bHQsCisJdHJhaWxpbmcgd2hpdGVzcGFjZXMgKGluY2x1ZGluZyBsaW5lcyB0aGF0IHNvbGVseSBjb25zaXN0IG9mCisJd2hpdGVzcGFjZXMpIGFuZCBhIHNwYWNlIGNoYXJhY3RlciB0aGF0IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkCisJYnkgYSB0YWIgY2hhcmFjdGVyIGluc2lkZSB0aGUgaW5pdGlhbCBpbmRlbnQgb2YgdGhlIGxpbmUgYXJlCisJY29uc2lkZXJlZCB3aGl0ZXNwYWNlIGVycm9ycy4KKysKK0J5IGRlZmF1bHQsIHRoZSBjb21tYW5kIG91dHB1dHMgd2FybmluZyBtZXNzYWdlcyBidXQgYXBwbGllcyB0aGUgcGF0Y2guCitXaGVuIGBnaXQtYXBwbHlgIGlzIHVzZWQgZm9yIHN0YXRpc3RpY3MgYW5kIG5vdCBhcHBseWluZyBhCitwYXRjaCwgaXQgZGVmYXVsdHMgdG8gYG5vd2FybmAuCisrCitZb3UgY2FuIHVzZSBkaWZmZXJlbnQgYDxhY3Rpb24+YCB2YWx1ZXMgdG8gY29udHJvbCB0aGlzCitiZWhhdmlvcjoKKysKKyogYG5vd2FybmAgdHVybnMgb2ZmIHRoZSB0cmFpbGluZyB3aGl0ZXNwYWNlIHdhcm5pbmcuCisqIGB3YXJuYCBvdXRwdXRzIHdhcm5pbmdzIGZvciBhIGZldyBzdWNoIGVycm9ycywgYnV0IGFwcGxpZXMgdGhlCisgIHBhdGNoIGFzLWlzIChkZWZhdWx0KS4KKyogYGZpeGAgb3V0cHV0cyB3YXJuaW5ncyBmb3IgYSBmZXcgc3VjaCBlcnJvcnMsIGFuZCBhcHBsaWVzIHRoZQorICBwYXRjaCBhZnRlciBmaXhpbmcgdGhlbSAoYHN0cmlwYCBpcyBhIHN5bm9ueW0gLS0tIHRoZSB0b29sCisgIHVzZWQgdG8gY29uc2lkZXIgb25seSB0cmFpbGluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXMgZXJyb3JzLCBhbmQgdGhlCisgIGZpeCBpbnZvbHZlZCAnc3RyaXBwaW5nJyB0aGVtLCBidXQgbW9kZXJuIEdpdHMgZG8gbW9yZSkuCisqIGBlcnJvcmAgb3V0cHV0cyB3YXJuaW5ncyBmb3IgYSBmZXcgc3VjaCBlcnJvcnMsIGFuZCByZWZ1c2VzCisgIHRvIGFwcGx5IHRoZSBwYXRjaC4KKyogYGVycm9yLWFsbGAgaXMgc2ltaWxhciB0byBgZXJyb3JgIGJ1dCBzaG93cyBhbGwgZXJyb3JzLgorCistLWluYWNjdXJhdGUtZW9mOjoKKwlVbmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsIHNvbWUgdmVyc2lvbnMgb2YgJ2RpZmYnIGRvIG5vdCBjb3JyZWN0bHkKKwlkZXRlY3QgYSBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIEFzIGEgcmVzdWx0LCBwYXRjaGVzCisJY3JlYXRlZCBieSBzdWNoICdkaWZmJyBwcm9ncmFtcyBkbyBub3QgcmVjb3JkIGluY29tcGxldGUgbGluZXMKKwljb3JyZWN0bHkuIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgYXBwbHlpbmcgc3VjaCBwYXRjaGVzIGJ5CisJd29ya2luZyBhcm91bmQgdGhpcyBidWcuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJUmVwb3J0IHByb2dyZXNzIHRvIHN0ZGVyci4gQnkgZGVmYXVsdCwgb25seSBhIG1lc3NhZ2UgYWJvdXQgdGhlCisJY3VycmVudCBwYXRjaCBiZWluZyBhcHBsaWVkIHdpbGwgYmUgcHJpbnRlZC4gVGhpcyBvcHRpb24gd2lsbCBjYXVzZQorCWFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgcmVwb3J0ZWQuCisKKy0tcmVjb3VudDo6CisJRG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzLCBidXQgaW5mZXIgdGhlbQorCWJ5IGluc3BlY3RpbmcgdGhlIHBhdGNoIChlLmcuIGFmdGVyIGVkaXRpbmcgdGhlIHBhdGNoIHdpdGhvdXQKKwlhZGp1c3RpbmcgdGhlIGh1bmsgaGVhZGVycyBhcHByb3ByaWF0ZWx5KS4KKworLS1kaXJlY3Rvcnk9PHJvb3Q+OjoKKwlQcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzLiAgSWYgYSAiLXAiIGFyZ3VtZW50IHdhcyBhbHNvIHBhc3NlZCwKKwlpdCBpcyBhcHBsaWVkIGJlZm9yZSBwcmVwZW5kaW5nIHRoZSBuZXcgcm9vdC4KKysKK0ZvciBleGFtcGxlLCBhIHBhdGNoIHRoYXQgdGFsa3MgYWJvdXQgdXBkYXRpbmcgYGEvZ2l0LWd1aS5zaGAgdG8gYGIvZ2l0LWd1aS5zaGAKK2NhbiBiZSBhcHBsaWVkIHRvIHRoZSBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUgYG1vZHVsZXMvZ2l0LWd1aS9naXQtZ3VpLnNoYCBieQorcnVubmluZyBgZ2l0IGFwcGx5IC0tZGlyZWN0b3J5PW1vZHVsZXMvZ2l0LWd1aWAuCisKKy0tdW5zYWZlLXBhdGhzOjoKKwlCeSBkZWZhdWx0LCBhIHBhdGNoIHRoYXQgYWZmZWN0cyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEKKwkoZWl0aGVyIGEgR2l0IGNvbnRyb2xsZWQgd29ya2luZyB0cmVlLCBvciB0aGUgY3VycmVudCB3b3JraW5nCisJZGlyZWN0b3J5IHdoZW4gImdpdCBhcHBseSIgaXMgdXNlZCBhcyBhIHJlcGxhY2VtZW50IG9mIEdOVQorCXBhdGNoKSBpcyByZWplY3RlZCBhcyBhIG1pc3Rha2UgKG9yIGEgbWlzY2hpZWYpLgorKworV2hlbiBgZ2l0IGFwcGx5YCBpcyB1c2VkIGFzIGEgImJldHRlciBHTlUgcGF0Y2giLCB0aGUgdXNlciBjYW4gcGFzcwordGhlIGAtLXVuc2FmZS1wYXRoc2Agb3B0aW9uIHRvIG92ZXJyaWRlIHRoaXMgc2FmZXR5IGNoZWNrLiAgVGhpcyBvcHRpb24KK2hhcyBubyBlZmZlY3Qgd2hlbiBgLS1pbmRleGAgb3IgYC0tY2FjaGVkYCBpcyBpbiB1c2UuCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworYXBwbHkuaWdub3JlV2hpdGVzcGFjZTo6CisJU2V0IHRvICdjaGFuZ2UnIGlmIHlvdSB3YW50IGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB0byBiZSBpZ25vcmVkIGJ5IGRlZmF1bHQuCisJU2V0IHRvIG9uZSBvZjogbm8sIG5vbmUsIG5ldmVyLCBmYWxzZSBpZiB5b3Ugd2FudCBjaGFuZ2VzIGluCisJd2hpdGVzcGFjZSB0byBiZSBzaWduaWZpY2FudC4KK2FwcGx5LndoaXRlc3BhY2U6OgorCVdoZW4gbm8gYC0td2hpdGVzcGFjZWAgZmxhZyBpcyBnaXZlbiBmcm9tIHRoZSBjb21tYW5kCisJbGluZSwgdGhpcyBjb25maWd1cmF0aW9uIGl0ZW0gaXMgdXNlZCBhcyB0aGUgZGVmYXVsdC4KKworU1VCTU9EVUxFUworLS0tLS0tLS0tLQorSWYgdGhlIHBhdGNoIGNvbnRhaW5zIGFueSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgdGhlbiAnZ2l0IGFwcGx5JwordHJlYXRzIHRoZXNlIGNoYW5nZXMgYXMgZm9sbG93cy4KKworSWYgYC0taW5kZXhgIGlzIHNwZWNpZmllZCAoZXhwbGljaXRseSBvciBpbXBsaWNpdGx5KSwgdGhlbiB0aGUgc3VibW9kdWxlCitjb21taXRzIG11c3QgbWF0Y2ggdGhlIGluZGV4IGV4YWN0bHkgZm9yIHRoZSBwYXRjaCB0byBhcHBseS4gIElmIGFueQorb2YgdGhlIHN1Ym1vZHVsZXMgYXJlIGNoZWNrZWQtb3V0LCB0aGVuIHRoZXNlIGNoZWNrLW91dHMgYXJlIGNvbXBsZXRlbHkKK2lnbm9yZWQsIGkuZS4sIHRoZXkgYXJlIG5vdCByZXF1aXJlZCB0byBiZSB1cCB0byBkYXRlIG9yIGNsZWFuIGFuZCB0aGV5CithcmUgbm90IHVwZGF0ZWQuCisKK0lmIGAtLWluZGV4YCBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSBzdWJtb2R1bGUgY29tbWl0cyBpbiB0aGUgcGF0Y2gKK2FyZSBpZ25vcmVkIGFuZCBvbmx5IHRoZSBhYnNlbmNlIG9yIHByZXNlbmNlIG9mIHRoZSBjb3JyZXNwb25kaW5nCitzdWJkaXJlY3RvcnkgaXMgY2hlY2tlZCBhbmQgKGlmIHBvc3NpYmxlKSB1cGRhdGVkLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWFtWzFdLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU5NWEwZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpbXBvcnQudHh0CkBAIC0wLDAgKzEsMTEzIEBACitnaXQtYXJjaGltcG9ydCgxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWFyY2hpbXBvcnQgLSBJbXBvcnQgYSBHTlUgQXJjaCByZXBvc2l0b3J5IGludG8gR2l0CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGFyY2hpbXBvcnQnIFstaF0gWy12XSBbLW9dIFstYV0gWy1mXSBbLVRdIFstRCBkZXB0aF0gWy10IHRlbXBkaXJdCisgICAgICAgICAgICAgICA8YXJjaGl2ZS9icmFuY2g+Wzo8Z2l0LWJyYW5jaD5dIC4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ltcG9ydHMgYSBwcm9qZWN0IGZyb20gb25lIG9yIG1vcmUgR05VIEFyY2ggcmVwb3NpdG9yaWVzLgorSXQgd2lsbCBmb2xsb3cgYnJhbmNoZXMKK2FuZCByZXBvc2l0b3JpZXMgd2l0aGluIHRoZSBuYW1lc3BhY2VzIGRlZmluZWQgYnkgdGhlIDxhcmNoaXZlL2JyYW5jaD4KK3BhcmFtZXRlcnMgc3VwcGxpZWQuIElmIGl0IGNhbm5vdCBmaW5kIHRoZSByZW1vdGUgYnJhbmNoIGEgbWVyZ2UgY29tZXMgZnJvbQoraXQgd2lsbCBqdXN0IGltcG9ydCBpdCBhcyBhIHJlZ3VsYXIgY29tbWl0LiBJZiBpdCBjYW4gZmluZCBpdCwgaXQgd2lsbCBtYXJrIGl0CithcyBhIG1lcmdlIHdoZW5ldmVyIHBvc3NpYmxlIChzZWUgZGlzY3Vzc2lvbiBiZWxvdykuCisKK1RoZSBzY3JpcHQgZXhwZWN0cyB5b3UgdG8gcHJvdmlkZSB0aGUga2V5IHJvb3RzIHdoZXJlIGl0IGNhbiBzdGFydCB0aGUgaW1wb3J0Citmcm9tIGFuICdpbml0aWFsIGltcG9ydCcgb3IgJ3RhZycgdHlwZSBvZiBBcmNoIGNvbW1pdC4gSXQgd2lsbCBmb2xsb3cgYW5kCitpbXBvcnQgbmV3IGJyYW5jaGVzIHdpdGhpbiB0aGUgcHJvdmlkZWQgcm9vdHMuCisKK0l0IGV4cGVjdHMgdG8gYmUgZGVhbGluZyB3aXRoIG9uZSBwcm9qZWN0IG9ubHkuIElmIGl0IHNlZXMKK2JyYW5jaGVzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgcm9vdHMsIGl0IHdpbGwgcmVmdXNlIHRvIHJ1bi4gSW4gdGhhdCBjYXNlLAorZWRpdCB5b3VyIDxhcmNoaXZlL2JyYW5jaD4gcGFyYW1ldGVycyB0byBkZWZpbmUgY2xlYXJseSB0aGUgc2NvcGUgb2YgdGhlCitpbXBvcnQuCisKKydnaXQgYXJjaGltcG9ydCcgdXNlcyBgdGxhYCBleHRlbnNpdmVseSBpbiB0aGUgYmFja2dyb3VuZCB0byBhY2Nlc3MgdGhlCitBcmNoIHJlcG9zaXRvcnkuCitNYWtlIHN1cmUgeW91IGhhdmUgYSByZWNlbnQgdmVyc2lvbiBvZiBgdGxhYCBhdmFpbGFibGUgaW4gdGhlIHBhdGguIGB0bGFgIG11c3QKK2tub3cgYWJvdXQgdGhlIHJlcG9zaXRvcmllcyB5b3UgcGFzcyB0byAnZ2l0IGFyY2hpbXBvcnQnLgorCitGb3IgdGhlIGluaXRpYWwgaW1wb3J0LCAnZ2l0IGFyY2hpbXBvcnQnIGV4cGVjdHMgdG8gZmluZCBpdHNlbGYgaW4gYW4gZW1wdHkKK2RpcmVjdG9yeS4gVG8gZm9sbG93IHRoZSBkZXZlbG9wbWVudCBvZiBhIHByb2plY3QgdGhhdCB1c2VzIEFyY2gsIHJlcnVuCisnZ2l0IGFyY2hpbXBvcnQnIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgaW5pdGlhbCBpbXBvcnQgdG8gcGVyZm9ybQoraW5jcmVtZW50YWwgaW1wb3J0cy4KKworV2hpbGUgJ2dpdCBhcmNoaW1wb3J0JyB3aWxsIHRyeSB0byBjcmVhdGUgc2Vuc2libGUgYnJhbmNoIG5hbWVzIGZvciB0aGUKK2FyY2hpdmVzIHRoYXQgaXQgaW1wb3J0cywgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IEdpdCBicmFuY2ggbmFtZXMKK21hbnVhbGx5LiAgVG8gZG8gc28sIHdyaXRlIGEgR2l0IGJyYW5jaCBuYW1lIGFmdGVyIGVhY2ggPGFyY2hpdmUvYnJhbmNoPgorcGFyYW1ldGVyLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbi4gIFRoaXMgd2F5LCB5b3UgY2FuIHNob3J0ZW4gdGhlIEFyY2gKK2JyYW5jaCBuYW1lcyBhbmQgY29udmVydCBBcmNoIGphcmdvbiB0byBHaXQgamFyZ29uLCBmb3IgZXhhbXBsZSBtYXBwaW5nIGEKKyJQUk9KRUNUe2xpdGRkfWRldm97bGl0ZGR9VkVSU0lPTiIgYnJhbmNoIHRvICJtYXN0ZXIiLgorCitBc3NvY2lhdGluZyBtdWx0aXBsZSBBcmNoIGJyYW5jaGVzIHRvIG9uZSBHaXQgYnJhbmNoIGlzIHBvc3NpYmxlOyB0aGUKK3Jlc3VsdCB3aWxsIG1ha2UgdGhlIG1vc3Qgc2Vuc2Ugb25seSBpZiBubyBjb21taXRzIGFyZSBtYWRlIHRvIHRoZSBmaXJzdAorYnJhbmNoLCBhZnRlciB0aGUgc2Vjb25kIGJyYW5jaCBpcyBjcmVhdGVkLiAgU3RpbGwsIHRoaXMgaXMgdXNlZnVsIHRvCitjb252ZXJ0IEFyY2ggcmVwb3NpdG9yaWVzIHRoYXQgaGFkIGJlZW4gcm90YXRlZCBwZXJpb2RpY2FsbHkuCisKKworTUVSR0VTCistLS0tLS0KK1BhdGNoIG1lcmdlIGRhdGEgZnJvbSBBcmNoIGlzIHVzZWQgdG8gbWFyayBtZXJnZXMgaW4gR2l0IGFzIHdlbGwuIEdpdAorZG9lcyBub3QgY2FyZSBtdWNoIGFib3V0IHRyYWNraW5nIHBhdGNoZXMsIGFuZCBvbmx5IGNvbnNpZGVycyBhIG1lcmdlIHdoZW4gYQorYnJhbmNoIGluY29ycG9yYXRlcyBhbGwgdGhlIGNvbW1pdHMgc2luY2UgdGhlIHBvaW50IHRoZXkgZm9ya2VkLiBUaGUgZW5kIHJlc3VsdAoraXMgdGhhdCBHaXQgd2lsbCBoYXZlIGEgZ29vZCBpZGVhIG9mIGhvdyBmYXIgYnJhbmNoZXMgaGF2ZSBkaXZlcmdlZC4gU28gdGhlCitpbXBvcnQgcHJvY2VzcyBkb2VzIGxvc2Ugc29tZSBwYXRjaC10cmFkaW5nIG1ldGFkYXRhLgorCitGb3J0dW5hdGVseSwgd2hlbiB5b3UgdHJ5IGFuZCBtZXJnZSBicmFuY2hlcyBpbXBvcnRlZCBmcm9tIEFyY2gsCitHaXQgd2lsbCBmaW5kIGEgZ29vZCBtZXJnZSBiYXNlLCBhbmQgaXQgaGFzIGEgZ29vZCBjaGFuY2Ugb2YgaWRlbnRpZnlpbmcKK3BhdGNoZXMgdGhhdCBoYXZlIGJlZW4gdHJhZGVkIG91dC1vZi1zZXF1ZW5jZSBiZXR3ZWVuIHRoZSBicmFuY2hlcy4KKworT1BUSU9OUworLS0tLS0tLQorCistaDo6CisJRGlzcGxheSB1c2FnZS4KKworLXY6OgorCVZlcmJvc2Ugb3V0cHV0LgorCistVDo6CisJTWFueSB0YWdzLiBXaWxsIGNyZWF0ZSBhIHRhZyBmb3IgZXZlcnkgY29tbWl0LCByZWZsZWN0aW5nIHRoZSBjb21taXQKKwluYW1lIGluIHRoZSBBcmNoIHJlcG9zaXRvcnkuCisKKy1mOjoKKwlVc2UgdGhlIGZhc3QgcGF0Y2hzZXQgaW1wb3J0IHN0cmF0ZWd5LiAgVGhpcyBjYW4gYmUgc2lnbmlmaWNhbnRseQorCWZhc3RlciBmb3IgbGFyZ2UgdHJlZXMsIGJ1dCBjYW5ub3QgaGFuZGxlIGRpcmVjdG9yeSByZW5hbWVzIG9yCisJcGVybWlzc2lvbnMgY2hhbmdlcy4gIFRoZSBkZWZhdWx0IHN0cmF0ZWd5IGlzIHNsb3cgYW5kIHNhZmUuCisKKy1vOjoKKwlVc2UgdGhpcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZC1zdHlsZSBicmFuY2ggbmFtZXMgdXNlZCBieQorCWVhcmxpZXIgdmVyc2lvbnMgb2YgJ2dpdCBhcmNoaW1wb3J0Jy4gIE9sZC1zdHlsZSBicmFuY2ggbmFtZXMKKwl3ZXJlIGNhdGVnb3J5e2xpdGRkfWJyYW5jaCwgd2hlcmVhcyBuZXctc3R5bGUgYnJhbmNoIG5hbWVzIGFyZQorCWFyY2hpdmUsY2F0ZWdvcnl7bGl0ZGR9YnJhbmNoe2xpdGRkfXZlcnNpb24uICBJbiBib3RoIGNhc2VzLCBuYW1lcyBnaXZlbgorCW9uIHRoZSBjb21tYW5kLWxpbmUgd2lsbCBvdmVycmlkZSB0aGUgYXV0b21hdGljYWxseS1nZW5lcmF0ZWQKKwlvbmVzLgorCistRCA8ZGVwdGg+OjoKKwlGb2xsb3cgbWVyZ2UgYW5jZXN0cnkgYW5kIGF0dGVtcHQgdG8gaW1wb3J0IHRyZWVzIHRoYXQgaGF2ZSBiZWVuCisJbWVyZ2VkIGZyb20uICBTcGVjaWZ5IGEgZGVwdGggZ3JlYXRlciB0aGFuIDEgaWYgcGF0Y2ggbG9ncyBoYXZlIGJlZW4KKwlwcnVuZWQuCisKKy1hOjoKKwlBdHRlbXB0IHRvIGF1dG8tcmVnaXN0ZXIgYXJjaGl2ZXMgYXQgYGh0dHA6Ly9taXJyb3JzLnNvdXJjZWNvbnRyb2wubmV0YAorCVRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aXRoIHRoZSAtRCBvcHRpb24uCisKKy10IDx0bXBkaXI+OjoKKwlPdmVycmlkZSB0aGUgZGVmYXVsdCB0ZW1wZGlyLgorCisKKzxhcmNoaXZlL2JyYW5jaD46OgorCUFyY2hpdmUvYnJhbmNoIGlkZW50aWZpZXIgaW4gYSBmb3JtYXQgdGhhdCBgdGxhIGxvZ2AgdW5kZXJzdGFuZHMuCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaXZlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpdmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYTFlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaXZlLnR4dApAQCAtMCwwICsxLDE5NyBAQAorZ2l0LWFyY2hpdmUoMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1hcmNoaXZlIC0gQ3JlYXRlIGFuIGFyY2hpdmUgb2YgZmlsZXMgZnJvbSBhIG5hbWVkIHRyZWUKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYXJjaGl2ZScgWy0tZm9ybWF0PTxmbXQ+XSBbLS1saXN0XSBbLS1wcmVmaXg9PHByZWZpeD4vXSBbPGV4dHJhPl0KKwkgICAgICBbLW8gPGZpbGU+IHwgLS1vdXRwdXQ9PGZpbGU+XSBbLS13b3JrdHJlZS1hdHRyaWJ1dGVzXQorCSAgICAgIFstLXJlbW90ZT08cmVwbz4gWy0tZXhlYz08Z2l0LXVwbG9hZC1hcmNoaXZlPl1dIDx0cmVlLWlzaD4KKwkgICAgICBbPHBhdGg+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0NyZWF0ZXMgYW4gYXJjaGl2ZSBvZiB0aGUgc3BlY2lmaWVkIGZvcm1hdCBjb250YWluaW5nIHRoZSB0cmVlCitzdHJ1Y3R1cmUgZm9yIHRoZSBuYW1lZCB0cmVlLCBhbmQgd3JpdGVzIGl0IG91dCB0byB0aGUgc3RhbmRhcmQKK291dHB1dC4gIElmIDxwcmVmaXg+IGlzIHNwZWNpZmllZCBpdCBpcworcHJlcGVuZGVkIHRvIHRoZSBmaWxlbmFtZXMgaW4gdGhlIGFyY2hpdmUuCisKKydnaXQgYXJjaGl2ZScgYmVoYXZlcyBkaWZmZXJlbnRseSB3aGVuIGdpdmVuIGEgdHJlZSBJRCB2ZXJzdXMgd2hlbgorZ2l2ZW4gYSBjb21taXQgSUQgb3IgdGFnIElELiAgSW4gdGhlIGZpcnN0IGNhc2UgdGhlIGN1cnJlbnQgdGltZSBpcwordXNlZCBhcyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgb2YgZWFjaCBmaWxlIGluIHRoZSBhcmNoaXZlLiAgSW4gdGhlIGxhdHRlcgorY2FzZSB0aGUgY29tbWl0IHRpbWUgYXMgcmVjb3JkZWQgaW4gdGhlIHJlZmVyZW5jZWQgY29tbWl0IG9iamVjdCBpcwordXNlZCBpbnN0ZWFkLiAgQWRkaXRpb25hbGx5IHRoZSBjb21taXQgSUQgaXMgc3RvcmVkIGluIGEgZ2xvYmFsCitleHRlbmRlZCBwYXggaGVhZGVyIGlmIHRoZSB0YXIgZm9ybWF0IGlzIHVzZWQ7IGl0IGNhbiBiZSBleHRyYWN0ZWQKK3VzaW5nICdnaXQgZ2V0LXRhci1jb21taXQtaWQnLiBJbiBaSVAgZmlsZXMgaXQgaXMgc3RvcmVkIGFzIGEgZmlsZQorY29tbWVudC4KKworT1BUSU9OUworLS0tLS0tLQorCistLWZvcm1hdD08Zm10Pjo6CisJRm9ybWF0IG9mIHRoZSByZXN1bHRpbmcgYXJjaGl2ZTogJ3Rhcicgb3IgJ3ppcCcuIElmIHRoaXMgb3B0aW9uCisJaXMgbm90IGdpdmVuLCBhbmQgdGhlIG91dHB1dCBmaWxlIGlzIHNwZWNpZmllZCwgdGhlIGZvcm1hdCBpcworCWluZmVycmVkIGZyb20gdGhlIGZpbGVuYW1lIGlmIHBvc3NpYmxlIChlLmcuIHdyaXRpbmcgdG8gImZvby56aXAiCisJbWFrZXMgdGhlIG91dHB1dCB0byBiZSBpbiB0aGUgemlwIGZvcm1hdCkuIE90aGVyd2lzZSB0aGUgb3V0cHV0CisJZm9ybWF0IGlzIGB0YXJgLgorCistbDo6CistLWxpc3Q6OgorCVNob3cgYWxsIGF2YWlsYWJsZSBmb3JtYXRzLgorCistdjo6CistLXZlcmJvc2U6OgorCVJlcG9ydCBwcm9ncmVzcyB0byBzdGRlcnIuCisKKy0tcHJlZml4PTxwcmVmaXg+Lzo6CisJUHJlcGVuZCA8cHJlZml4Pi8gdG8gZWFjaCBmaWxlbmFtZSBpbiB0aGUgYXJjaGl2ZS4KKworLW8gPGZpbGU+OjoKKy0tb3V0cHV0PTxmaWxlPjo6CisJV3JpdGUgdGhlIGFyY2hpdmUgdG8gPGZpbGU+IGluc3RlYWQgb2Ygc3Rkb3V0LgorCistLXdvcmt0cmVlLWF0dHJpYnV0ZXM6OgorCUxvb2sgZm9yIGF0dHJpYnV0ZXMgaW4gLmdpdGF0dHJpYnV0ZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZQorCWFzIHdlbGwgKHNlZSA8PEFUVFJJQlVURVM+PikuCisKKzxleHRyYT46OgorCVRoaXMgY2FuIGJlIGFueSBvcHRpb25zIHRoYXQgdGhlIGFyY2hpdmVyIGJhY2tlbmQgdW5kZXJzdGFuZHMuCisJU2VlIG5leHQgc2VjdGlvbi4KKworLS1yZW1vdGU9PHJlcG8+OjoKKwlJbnN0ZWFkIG9mIG1ha2luZyBhIHRhciBhcmNoaXZlIGZyb20gdGhlIGxvY2FsIHJlcG9zaXRvcnksCisJcmV0cmlldmUgYSB0YXIgYXJjaGl2ZSBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkuIE5vdGUgdGhhdCB0aGUKKwlyZW1vdGUgcmVwb3NpdG9yeSBtYXkgcGxhY2UgcmVzdHJpY3Rpb25zIG9uIHdoaWNoIHNoYTEKKwlleHByZXNzaW9ucyBtYXkgYmUgYWxsb3dlZCBpbiBgPHRyZWUtaXNoPmAuIFNlZQorCWxpbmtnaXQ6Z2l0LXVwbG9hZC1hcmNoaXZlWzFdIGZvciBkZXRhaWxzLgorCistLWV4ZWM9PGdpdC11cGxvYWQtYXJjaGl2ZT46OgorCVVzZWQgd2l0aCAtLXJlbW90ZSB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZQorCSdnaXQtdXBsb2FkLWFyY2hpdmUnIG9uIHRoZSByZW1vdGUgc2lkZS4KKworPHRyZWUtaXNoPjo6CisJVGhlIHRyZWUgb3IgY29tbWl0IHRvIHByb2R1Y2UgYW4gYXJjaGl2ZSBmb3IuCisKKzxwYXRoPjo6CisJV2l0aG91dCBhbiBvcHRpb25hbCBwYXRoIHBhcmFtZXRlciwgYWxsIGZpbGVzIGFuZCBzdWJkaXJlY3RvcmllcworCW9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFyZSBpbmNsdWRlZCBpbiB0aGUgYXJjaGl2ZS4KKwlJZiBvbmUgb3IgbW9yZSBwYXRocyBhcmUgc3BlY2lmaWVkLCBvbmx5IHRoZXNlIGFyZSBpbmNsdWRlZC4KKworQkFDS0VORCBFWFRSQSBPUFRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworemlwCit+fn4KKy0wOjoKKwlTdG9yZSB0aGUgZmlsZXMgaW5zdGVhZCBvZiBkZWZsYXRpbmcgdGhlbS4KKy05OjoKKwlIaWdoZXN0IGFuZCBzbG93ZXN0IGNvbXByZXNzaW9uIGxldmVsLiAgWW91IGNhbiBzcGVjaWZ5IGFueQorCW51bWJlciBmcm9tIDEgdG8gOSB0byBhZGp1c3QgY29tcHJlc3Npb24gc3BlZWQgYW5kIHJhdGlvLgorCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKwordGFyLnVtYXNrOjoKKwlUaGlzIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBwZXJtaXNzaW9uIGJpdHMgb2YKKwl0YXIgYXJjaGl2ZSBlbnRyaWVzLiAgVGhlIGRlZmF1bHQgaXMgMDAwMiwgd2hpY2ggdHVybnMgb2ZmIHRoZQorCXdvcmxkIHdyaXRlIGJpdC4gIFRoZSBzcGVjaWFsIHZhbHVlICJ1c2VyIiBpbmRpY2F0ZXMgdGhhdCB0aGUKKwlhcmNoaXZpbmcgdXNlcidzIHVtYXNrIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiAgU2VlIHVtYXNrKDIpIGZvcgorCWRldGFpbHMuICBJZiBgLS1yZW1vdGVgIGlzIHVzZWQgdGhlbiBvbmx5IHRoZSBjb25maWd1cmF0aW9uIG9mCisJdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRha2VzIGVmZmVjdC4KKwordGFyLjxmb3JtYXQ+LmNvbW1hbmQ6OgorCVRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGEgc2hlbGwgY29tbWFuZCB0aHJvdWdoIHdoaWNoIHRoZSB0YXIKKwlvdXRwdXQgZ2VuZXJhdGVkIGJ5IGBnaXQgYXJjaGl2ZWAgc2hvdWxkIGJlIHBpcGVkLiBUaGUgY29tbWFuZAorCWlzIGV4ZWN1dGVkIHVzaW5nIHRoZSBzaGVsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgdGFyIGZpbGUgb24gaXRzCisJc3RhbmRhcmQgaW5wdXQsIGFuZCBzaG91bGQgcHJvZHVjZSB0aGUgZmluYWwgb3V0cHV0IG9uIGl0cworCXN0YW5kYXJkIG91dHB1dC4gQW55IGNvbXByZXNzaW9uLWxldmVsIG9wdGlvbnMgd2lsbCBiZSBwYXNzZWQKKwl0byB0aGUgY29tbWFuZCAoZS5nLiwgIi05IikuIEFuIG91dHB1dCBmaWxlIHdpdGggdGhlIHNhbWUKKwlleHRlbnNpb24gYXMgYDxmb3JtYXQ+YCB3aWxsIGJlIHVzZSB0aGlzIGZvcm1hdCBpZiBubyBvdGhlcgorCWZvcm1hdCBpcyBnaXZlbi4KKysKK1RoZSAidGFyLmd6IiBhbmQgInRneiIgZm9ybWF0cyBhcmUgZGVmaW5lZCBhdXRvbWF0aWNhbGx5IGFuZCBkZWZhdWx0IHRvCitgZ3ppcCAtY25gLiBZb3UgbWF5IG92ZXJyaWRlIHRoZW0gd2l0aCBjdXN0b20gY29tbWFuZHMuCisKK3Rhci48Zm9ybWF0Pi5yZW1vdGU6OgorCUlmIHRydWUsIGVuYWJsZSBgPGZvcm1hdD5gIGZvciB1c2UgYnkgcmVtb3RlIGNsaWVudHMgdmlhCisJbGlua2dpdDpnaXQtdXBsb2FkLWFyY2hpdmVbMV0uIERlZmF1bHRzIHRvIGZhbHNlIGZvcgorCXVzZXItZGVmaW5lZCBmb3JtYXRzLCBidXQgdHJ1ZSBmb3IgdGhlICJ0YXIuZ3oiIGFuZCAidGd6IgorCWZvcm1hdHMuCisKK1tbQVRUUklCVVRFU11dCitBVFRSSUJVVEVTCistLS0tLS0tLS0tCisKK2V4cG9ydC1pZ25vcmU6OgorCUZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIHRoZSBhdHRyaWJ1dGUgZXhwb3J0LWlnbm9yZSB3b24ndCBiZQorCWFkZGVkIHRvIGFyY2hpdmUgZmlsZXMuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCitleHBvcnQtc3Vic3Q6OgorCUlmIHRoZSBhdHRyaWJ1dGUgZXhwb3J0LXN1YnN0IGlzIHNldCBmb3IgYSBmaWxlIHRoZW4gR2l0IHdpbGwKKwlleHBhbmQgc2V2ZXJhbCBwbGFjZWhvbGRlcnMgd2hlbiBhZGRpbmcgdGhpcyBmaWxlIHRvIGFuIGFyY2hpdmUuCisJU2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KKworTm90ZSB0aGF0IGF0dHJpYnV0ZXMgYXJlIGJ5IGRlZmF1bHQgdGFrZW4gZnJvbSB0aGUgYC5naXRhdHRyaWJ1dGVzYCBmaWxlcworaW4gdGhlIHRyZWUgdGhhdCBpcyBiZWluZyBhcmNoaXZlZC4gIElmIHlvdSB3YW50IHRvIHR3ZWFrIHRoZSB3YXkgdGhlCitvdXRwdXQgaXMgZ2VuZXJhdGVkIGFmdGVyIHRoZSBmYWN0IChlLmcuIHlvdSBjb21taXR0ZWQgd2l0aG91dCBhZGRpbmcgYW4KK2FwcHJvcHJpYXRlIGV4cG9ydC1pZ25vcmUgaW4gaXRzIGAuZ2l0YXR0cmlidXRlc2ApLCBhZGp1c3QgdGhlIGNoZWNrZWQgb3V0CitgLmdpdGF0dHJpYnV0ZXNgIGZpbGUgYXMgbmVjZXNzYXJ5IGFuZCB1c2UgYC0td29ya3RyZWUtYXR0cmlidXRlc2AKK29wdGlvbi4gIEFsdGVybmF0aXZlbHkgeW91IGNhbiBrZWVwIG5lY2Vzc2FyeSBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGFwcGx5Cit3aGlsZSBhcmNoaXZpbmcgYW55IHRyZWUgaW4geW91ciBgJEdJVF9ESVIvaW5mby9hdHRyaWJ1dGVzYCBmaWxlLgorCitFWEFNUExFUworLS0tLS0tLS0KK2BnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1wcmVmaXg9anVuay8gSEVBRCB8IChjZCAvdmFyL3RtcC8gJiYgdGFyIHhmIC0pYDo6CisKKwlDcmVhdGUgYSB0YXIgYXJjaGl2ZSB0aGF0IGNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiB0aGUKKwlsYXRlc3QgY29tbWl0IG9uIHRoZSBjdXJyZW50IGJyYW5jaCwgYW5kIGV4dHJhY3QgaXQgaW4gdGhlCisJYC92YXIvdG1wL2p1bmtgIGRpcmVjdG9yeS4KKworYGdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAtLXByZWZpeD1naXQtMS40LjAvIHYxLjQuMCB8IGd6aXAgPmdpdC0xLjQuMC50YXIuZ3pgOjoKKworCUNyZWF0ZSBhIGNvbXByZXNzZWQgdGFyYmFsbCBmb3IgdjEuNC4wIHJlbGVhc2UuCisKK2BnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIuZ3ogLS1wcmVmaXg9Z2l0LTEuNC4wLyB2MS40LjAgPmdpdC0xLjQuMC50YXIuZ3pgOjoKKworCVNhbWUgYXMgYWJvdmUsIGJ1dCB1c2luZyB0aGUgYnVpbHRpbiB0YXIuZ3ogaGFuZGxpbmcuCisKK2BnaXQgYXJjaGl2ZSAtLXByZWZpeD1naXQtMS40LjAvIC1vIGdpdC0xLjQuMC50YXIuZ3ogdjEuNC4wYDo6CisKKwlTYW1lIGFzIGFib3ZlLCBidXQgdGhlIGZvcm1hdCBpcyBpbmZlcnJlZCBmcm9tIHRoZSBvdXRwdXQgZmlsZS4KKworYGdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAtLXByZWZpeD1naXQtMS40LjAvIHYxLjQuMF57dHJlZX0gfCBnemlwID5naXQtMS40LjAudGFyLmd6YDo6CisKKwlDcmVhdGUgYSBjb21wcmVzc2VkIHRhcmJhbGwgZm9yIHYxLjQuMCByZWxlYXNlLCBidXQgd2l0aG91dCBhCisJZ2xvYmFsIGV4dGVuZGVkIHBheCBoZWFkZXIuCisKK2BnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgLS1wcmVmaXg9Z2l0LWRvY3MvIEhFQUQ6RG9jdW1lbnRhdGlvbi8gPiBnaXQtMS40LjAtZG9jcy56aXBgOjoKKworCVB1dCBldmVyeXRoaW5nIGluIHRoZSBjdXJyZW50IGhlYWQncyBEb2N1bWVudGF0aW9uLyBkaXJlY3RvcnkKKwlpbnRvICdnaXQtMS40LjAtZG9jcy56aXAnLCB3aXRoIHRoZSBwcmVmaXggJ2dpdC1kb2NzLycuCisKK2BnaXQgYXJjaGl2ZSAtbyBsYXRlc3QuemlwIEhFQURgOjoKKworCUNyZWF0ZSBhIFppcCBhcmNoaXZlIHRoYXQgY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXRlc3QKKwljb21taXQgb24gdGhlIGN1cnJlbnQgYnJhbmNoLiBOb3RlIHRoYXQgdGhlIG91dHB1dCBmb3JtYXQgaXMKKwlpbmZlcnJlZCBieSB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBvdXRwdXQgZmlsZS4KKworYGdpdCBjb25maWcgdGFyLnRhci54ei5jb21tYW5kICJ4eiAtYyJgOjoKKworCUNvbmZpZ3VyZSBhICJ0YXIueHoiIGZvcm1hdCBmb3IgbWFraW5nIExaTUEtY29tcHJlc3NlZCB0YXJmaWxlcy4KKwlZb3UgY2FuIHVzZSBpdCBzcGVjaWZ5aW5nIGAtLWZvcm1hdD10YXIueHpgLCBvciBieSBjcmVhdGluZyBhbgorCW91dHB1dCBmaWxlIGxpa2UgYC1vIGZvby50YXIueHpgLgorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LWxrMjAwOS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QtbGsyMDA5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmE0OWU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LWxrMjAwOS50eHQKQEAgLTAsMCArMSwxMzU4IEBACitGaWdodGluZyByZWdyZXNzaW9ucyB3aXRoIGdpdCBiaXNlY3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOkF1dGhvcjogQ2hyaXN0aWFuIENvdWRlcgorOkVtYWlsOiBjaHJpc2Nvb2xAdHV4ZmFtaWx5Lm9yZworOkRhdGU6IDIwMDkvMTEvMDgKKworQWJzdHJhY3QKKy0tLS0tLS0tCisKKyJnaXQgYmlzZWN0IiBlbmFibGVzIHNvZnR3YXJlIHVzZXJzIGFuZCBkZXZlbG9wZXJzIHRvIGVhc2lseSBmaW5kIHRoZQorY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24uIFdlIHNob3cgd2h5IGl0IGlzIGltcG9ydGFudCB0bworaGF2ZSBnb29kIHRvb2xzIHRvIGZpZ2h0IHJlZ3Jlc3Npb25zLiBXZSBkZXNjcmliZSBob3cgImdpdCBiaXNlY3QiCit3b3JrcyBmcm9tIHRoZSBvdXRzaWRlIGFuZCB0aGUgYWxnb3JpdGhtcyBpdCB1c2VzIGluc2lkZS4gVGhlbiB3ZQorZXhwbGFpbiBob3cgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgImdpdCBiaXNlY3QiIHRvIGltcHJvdmUgY3VycmVudAorcHJhY3RpY2VzLiBBbmQgd2UgZGlzY3VzcyBob3cgImdpdCBiaXNlY3QiIGNvdWxkIGltcHJvdmUgaW4gdGhlCitmdXR1cmUuCisKKworSW50cm9kdWN0aW9uIHRvICJnaXQgYmlzZWN0IgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgaXMgYSBEaXN0cmlidXRlZCBWZXJzaW9uIENvbnRyb2wgc3lzdGVtIChEVkNTKSBjcmVhdGVkIGJ5IExpbnVzCitUb3J2YWxkcyBhbmQgbWFpbnRhaW5lZCBieSBKdW5pbyBIYW1hbm8uCisKK0luIEdpdCBsaWtlIGluIG1hbnkgb3RoZXIgVmVyc2lvbiBDb250cm9sIFN5c3RlbXMgKFZDUyksIHRoZSBkaWZmZXJlbnQKK3N0YXRlcyBvZiB0aGUgZGF0YSB0aGF0IGlzIG1hbmFnZWQgYnkgdGhlIHN5c3RlbSBhcmUgY2FsbGVkCitjb21taXRzLiBBbmQsIGFzIFZDUyBhcmUgbW9zdGx5IHVzZWQgdG8gbWFuYWdlIHNvZnR3YXJlIHNvdXJjZSBjb2RlLAorc29tZXRpbWVzICJpbnRlcmVzdGluZyIgY2hhbmdlcyBvZiBiZWhhdmlvciBpbiB0aGUgc29mdHdhcmUgYXJlCitpbnRyb2R1Y2VkIGluIHNvbWUgY29tbWl0cy4KKworSW4gZmFjdCBwZW9wbGUgYXJlIHNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGNvbW1pdHMgdGhhdCBpbnRyb2R1Y2UgYQorImJhZCIgYmVoYXZpb3IsIGNhbGxlZCBhIGJ1ZyBvciBhIHJlZ3Jlc3Npb24uIFRoZXkgYXJlIGludGVyZXN0ZWQgaW4KK3RoZXNlIGNvbW1pdHMgYmVjYXVzZSBhIGNvbW1pdCAoaG9wZWZ1bGx5KSBjb250YWlucyBhIHZlcnkgc21hbGwgc2V0CitvZiBzb3VyY2UgY29kZSBjaGFuZ2VzLiBBbmQgaXQncyBtdWNoIGVhc2llciB0byB1bmRlcnN0YW5kIGFuZAorcHJvcGVybHkgZml4IGEgcHJvYmxlbSB3aGVuIHlvdSBvbmx5IG5lZWQgdG8gY2hlY2sgYSB2ZXJ5IHNtYWxsIHNldCBvZgorY2hhbmdlcywgdGhhbiB3aGVuIHlvdSBkb24ndCBrbm93IHdoZXJlIGxvb2sgaW4gdGhlIGZpcnN0IHBsYWNlLgorCitTbyB0byBoZWxwIHBlb3BsZSBmaW5kIGNvbW1pdHMgdGhhdCBpbnRyb2R1Y2UgYSAiYmFkIiBiZWhhdmlvciwgdGhlCisiZ2l0IGJpc2VjdCIgc2V0IG9mIGNvbW1hbmRzIHdhcyBpbnZlbnRlZC4gQW5kIGl0IGZvbGxvd3Mgb2YgY291cnNlCit0aGF0IGluICJnaXQgYmlzZWN0IiBwYXJsYW5jZSwgY29tbWl0cyB3aGVyZSB0aGUgImludGVyZXN0aW5nCitiZWhhdmlvciIgaXMgcHJlc2VudCBhcmUgY2FsbGVkICJiYWQiIGNvbW1pdHMsIHdoaWxlIG90aGVyIGNvbW1pdHMgYXJlCitjYWxsZWQgImdvb2QiIGNvbW1pdHMuIEFuZCBhIGNvbW1pdCB0aGF0IGludHJvZHVjZSB0aGUgYmVoYXZpb3Igd2UgYXJlCitpbnRlcmVzdGVkIGluIGlzIGNhbGxlZCBhICJmaXJzdCBiYWQgY29tbWl0Ii4gTm90ZSB0aGF0IHRoZXJlIGNvdWxkIGJlCittb3JlIHRoYW4gb25lICJmaXJzdCBiYWQgY29tbWl0IiBpbiB0aGUgY29tbWl0IHNwYWNlIHdlIGFyZSBzZWFyY2hpbmcuCisKK1NvICJnaXQgYmlzZWN0IiBpcyBkZXNpZ25lZCB0byBoZWxwIGZpbmQgYSAiZmlyc3QgYmFkIGNvbW1pdCIuIEFuZCB0bworYmUgYXMgZWZmaWNpZW50IGFzIHBvc3NpYmxlLCBpdCB0cmllcyB0byBwZXJmb3JtIGEgYmluYXJ5IHNlYXJjaC4KKworCitGaWdodGluZyByZWdyZXNzaW9ucyBvdmVydmlldworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVncmVzc2lvbnM6IGEgYmlnIHByb2JsZW0KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1JlZ3Jlc3Npb25zIGFyZSBhIGJpZyBwcm9ibGVtIGluIHRoZSBzb2Z0d2FyZSBpbmR1c3RyeS4gQnV0IGl0J3MKK2RpZmZpY3VsdCB0byBwdXQgc29tZSByZWFsIG51bWJlcnMgYmVoaW5kIHRoYXQgY2xhaW0uCisKK1RoZXJlIGFyZSBzb21lIG51bWJlcnMgYWJvdXQgYnVncyBpbiBnZW5lcmFsLCBsaWtlIGEgTklTVCBzdHVkeSBpbgorMjAwMiA8PDE+PiB0aGF0IHNhaWQ6CisKK19fX19fX19fX19fX18KK1NvZnR3YXJlIGJ1Z3MsIG9yIGVycm9ycywgYXJlIHNvIHByZXZhbGVudCBhbmQgc28gZGV0cmltZW50YWwgdGhhdAordGhleSBjb3N0IHRoZSBVLlMuIGVjb25vbXkgYW4gZXN0aW1hdGVkICQ1OS41IGJpbGxpb24gYW5udWFsbHksIG9yCithYm91dCAwLjYgcGVyY2VudCBvZiB0aGUgZ3Jvc3MgZG9tZXN0aWMgcHJvZHVjdCwgYWNjb3JkaW5nIHRvIGEgbmV3bHkKK3JlbGVhc2VkIHN0dWR5IGNvbW1pc3Npb25lZCBieSB0aGUgRGVwYXJ0bWVudCBvZiBDb21tZXJjZSdzIE5hdGlvbmFsCitJbnN0aXR1dGUgb2YgU3RhbmRhcmRzIGFuZCBUZWNobm9sb2d5IChOSVNUKS4gQXQgdGhlIG5hdGlvbmFsIGxldmVsLAorb3ZlciBoYWxmIG9mIHRoZSBjb3N0cyBhcmUgYm9ybmUgYnkgc29mdHdhcmUgdXNlcnMgYW5kIHRoZSByZW1haW5kZXIKK2J5IHNvZnR3YXJlIGRldmVsb3BlcnMvdmVuZG9ycy4gIFRoZSBzdHVkeSBhbHNvIGZvdW5kIHRoYXQsIGFsdGhvdWdoCithbGwgZXJyb3JzIGNhbm5vdCBiZSByZW1vdmVkLCBtb3JlIHRoYW4gYSB0aGlyZCBvZiB0aGVzZSBjb3N0cywgb3IgYW4KK2VzdGltYXRlZCAkMjIuMiBiaWxsaW9uLCBjb3VsZCBiZSBlbGltaW5hdGVkIGJ5IGFuIGltcHJvdmVkIHRlc3RpbmcKK2luZnJhc3RydWN0dXJlIHRoYXQgZW5hYmxlcyBlYXJsaWVyIGFuZCBtb3JlIGVmZmVjdGl2ZSBpZGVudGlmaWNhdGlvbgorYW5kIHJlbW92YWwgb2Ygc29mdHdhcmUgZGVmZWN0cy4gVGhlc2UgYXJlIHRoZSBzYXZpbmdzIGFzc29jaWF0ZWQgd2l0aAorZmluZGluZyBhbiBpbmNyZWFzZWQgcGVyY2VudGFnZSAoYnV0IG5vdCAxMDAgcGVyY2VudCkgb2YgZXJyb3JzIGNsb3NlcgordG8gdGhlIGRldmVsb3BtZW50IHN0YWdlcyBpbiB3aGljaCB0aGV5IGFyZSBpbnRyb2R1Y2VkLiBDdXJyZW50bHksCitvdmVyIGhhbGYgb2YgYWxsIGVycm9ycyBhcmUgbm90IGZvdW5kIHVudGlsICJkb3duc3RyZWFtIiBpbiB0aGUKK2RldmVsb3BtZW50IHByb2Nlc3Mgb3IgZHVyaW5nIHBvc3Qtc2FsZSBzb2Z0d2FyZSB1c2UuCitfX19fX19fX19fX19fCisKK0FuZCB0aGVuOgorCitfX19fX19fX19fX19fCitTb2Z0d2FyZSBkZXZlbG9wZXJzIGFscmVhZHkgc3BlbmQgYXBwcm94aW1hdGVseSA4MCBwZXJjZW50IG9mCitkZXZlbG9wbWVudCBjb3N0cyBvbiBpZGVudGlmeWluZyBhbmQgY29ycmVjdGluZyBkZWZlY3RzLCBhbmQgeWV0IGZldworcHJvZHVjdHMgb2YgYW55IHR5cGUgb3RoZXIgdGhhbiBzb2Z0d2FyZSBhcmUgc2hpcHBlZCB3aXRoIHN1Y2ggaGlnaAorbGV2ZWxzIG9mIGVycm9ycy4KK19fX19fX19fX19fX18KKworRXZlbnR1YWxseSB0aGUgY29uY2x1c2lvbiBzdGFydGVkIHdpdGg6CisKK19fX19fX19fX19fX18KK1RoZSBwYXRoIHRvIGhpZ2hlciBzb2Z0d2FyZSBxdWFsaXR5IGlzIHNpZ25pZmljYW50bHkgaW1wcm92ZWQgc29mdHdhcmUKK3Rlc3RpbmcuCitfX19fX19fX19fX19fCisKK1RoZXJlIGFyZSBvdGhlciBlc3RpbWF0ZXMgc2F5aW5nIHRoYXQgODAlIG9mIHRoZSBjb3N0IHJlbGF0ZWQgdG8KK3NvZnR3YXJlIGlzIGFib3V0IG1haW50ZW5hbmNlIDw8Mj4+LgorCitUaG91Z2gsIGFjY29yZGluZyB0byBXaWtpcGVkaWEgPDwzPj46CisKK19fX19fX19fX19fX18KK0EgY29tbW9uIHBlcmNlcHRpb24gb2YgbWFpbnRlbmFuY2UgaXMgdGhhdCBpdCBpcyBtZXJlbHkgZml4aW5nCitidWdzLiBIb3dldmVyLCBzdHVkaWVzIGFuZCBzdXJ2ZXlzIG92ZXIgdGhlIHllYXJzIGhhdmUgaW5kaWNhdGVkIHRoYXQKK3RoZSBtYWpvcml0eSwgb3ZlciA4MCUsIG9mIHRoZSBtYWludGVuYW5jZSBlZmZvcnQgaXMgdXNlZCBmb3IKK25vbi1jb3JyZWN0aXZlIGFjdGlvbnMgKFBpZ29za3kgMTk5NykuIFRoaXMgcGVyY2VwdGlvbiBpcyBwZXJwZXR1YXRlZAorYnkgdXNlcnMgc3VibWl0dGluZyBwcm9ibGVtIHJlcG9ydHMgdGhhdCBpbiByZWFsaXR5IGFyZSBmdW5jdGlvbmFsaXR5CitlbmhhbmNlbWVudHMgdG8gdGhlIHN5c3RlbS4KK19fX19fX19fX19fX18KKworQnV0IHdlIGNhbiBndWVzcyB0aGF0IGltcHJvdmluZyBvbiBleGlzdGluZyBzb2Z0d2FyZSBpcyB2ZXJ5IGNvc3RseQorYmVjYXVzZSB5b3UgaGF2ZSB0byB3YXRjaCBvdXQgZm9yIHJlZ3Jlc3Npb25zLiBBdCBsZWFzdCB0aGlzIHdvdWxkCittYWtlIHRoZSBhYm92ZSBzdHVkaWVzIGNvbnNpc3RlbnQgYW1vbmcgdGhlbXNlbHZlcy4KKworT2YgY291cnNlIHNvbWUga2luZCBvZiBzb2Z0d2FyZSBpcyBkZXZlbG9wZWQsIHRoZW4gdXNlZCBkdXJpbmcgc29tZQordGltZSB3aXRob3V0IGJlaW5nIGltcHJvdmVkIG9uIG11Y2gsIGFuZCB0aGVuIGZpbmFsbHkgdGhyb3duIGF3YXkuIEluCit0aGlzIGNhc2UsIG9mIGNvdXJzZSwgcmVncmVzc2lvbnMgbWF5IG5vdCBiZSBhIGJpZyBwcm9ibGVtLiBCdXQgb24gdGhlCitvdGhlciBoYW5kLCB0aGVyZSBpcyBhIGxvdCBvZiBiaWcgc29mdHdhcmUgdGhhdCBpcyBjb250aW51YWxseQorZGV2ZWxvcGVkIGFuZCBtYWludGFpbmVkIGR1cmluZyB5ZWFycyBvciBldmVuIHRlbnMgb2YgeWVhcnMgYnkgYSBsb3QKK29mIHBlb3BsZS4gQW5kIGFzIHRoZXJlIGFyZSBvZnRlbiBtYW55IHBlb3BsZSB3aG8gZGVwZW5kIChzb21ldGltZXMKK2NyaXRpY2FsbHkpIG9uIHN1Y2ggc29mdHdhcmUsIHJlZ3Jlc3Npb25zIGFyZSBhIHJlYWxseSBiaWcgcHJvYmxlbS4KKworT25lIHN1Y2ggc29mdHdhcmUgaXMgdGhlIExpbnV4IGtlcm5lbC4gQW5kIGlmIHdlIGxvb2sgYXQgdGhlIExpbnV4CitrZXJuZWwsIHdlIGNhbiBzZWUgdGhhdCBhIGxvdCBvZiB0aW1lIGFuZCBlZmZvcnQgaXMgc3BlbnQgdG8gZmlnaHQKK3JlZ3Jlc3Npb25zLiBUaGUgcmVsZWFzZSBjeWNsZSBzdGFydCB3aXRoIGEgMiB3ZWVrcyBsb25nIG1lcmdlCit3aW5kb3cuIFRoZW4gdGhlIGZpcnN0IHJlbGVhc2UgY2FuZGlkYXRlIChyYykgdmVyc2lvbiBpcyB0YWdnZWQuIEFuZAorYWZ0ZXIgdGhhdCBhYm91dCA3IG9yIDggbW9yZSByYyB2ZXJzaW9ucyB3aWxsIGFwcGVhciB3aXRoIGFyb3VuZCBvbmUKK3dlZWsgYmV0d2VlbiBlYWNoIG9mIHRoZW0sIGJlZm9yZSB0aGUgZmluYWwgcmVsZWFzZS4KKworVGhlIHRpbWUgYmV0d2VlbiB0aGUgZmlyc3QgcmMgcmVsZWFzZSBhbmQgdGhlIGZpbmFsIHJlbGVhc2UgaXMKK3N1cHBvc2VkIHRvIGJlIHVzZWQgdG8gdGVzdCByYyB2ZXJzaW9ucyBhbmQgZmlnaHQgYnVncyBhbmQgZXNwZWNpYWxseQorcmVncmVzc2lvbnMuIEFuZCB0aGlzIHRpbWUgaXMgbW9yZSB0aGFuIDgwJSBvZiB0aGUgcmVsZWFzZSBjeWNsZQordGltZS4gQnV0IHRoaXMgaXMgbm90IHRoZSBlbmQgb2YgdGhlIGZpZ2h0IHlldCwgYXMgb2YgY291cnNlIGl0Citjb250aW51ZXMgYWZ0ZXIgdGhlIHJlbGVhc2UuCisKK0FuZCB0aGVuIHRoaXMgaXMgd2hhdCBJbmdvIE1vbG5hciAoYSB3ZWxsIGtub3duIExpbnV4IGtlcm5lbAorZGV2ZWxvcGVyKSBzYXlzIGFib3V0IGhpcyB1c2Ugb2YgZ2l0IGJpc2VjdDoKKworX19fX19fX19fX19fXworSSBtb3N0IGFjdGl2ZWx5IHVzZSBpdCBkdXJpbmcgdGhlIG1lcmdlIHdpbmRvdyAod2hlbiBhIGxvdCBvZiB0cmVlcworZ2V0IG1lcmdlZCB1cHN0cmVhbSBhbmQgd2hlbiB0aGUgaW5mbHV4IG9mIGJ1Z3MgaXMgdGhlIGhpZ2hlc3QpIC0gYW5kCit5ZXMsIHRoZXJlIGhhdmUgYmVlbiBjYXNlcyB0aGF0IGkgdXNlZCBpdCBtdWx0aXBsZSB0aW1lcyBhIGRheS4gTXkKK2F2ZXJhZ2UgaXMgcm91Z2hseSBvbmNlIGEgZGF5LgorX19fX19fX19fX19fXworCitTbyByZWdyZXNzaW9ucyBhcmUgZm91Z2h0IGFsbCB0aGUgdGltZSBieSBkZXZlbG9wZXJzLCBhbmQgaW5kZWVkIGl0IGlzCit3ZWxsIGtub3duIHRoYXQgYnVncyBzaG91bGQgYmUgZml4ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSwgc28gYXMgc29vbgorYXMgdGhleSBhcmUgZm91bmQuIFRoYXQncyB3aHkgaXQgaXMgaW50ZXJlc3RpbmcgdG8gaGF2ZSBnb29kIHRvb2xzIGZvcgordGhpcyBwdXJwb3NlLgorCitPdGhlciB0b29scyB0byBmaWdodCByZWdyZXNzaW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU28gd2hhdCBhcmUgdGhlIHRvb2xzIHVzZWQgdG8gZmlnaHQgcmVncmVzc2lvbnM/IFRoZXkgYXJlIG5lYXJseSB0aGUKK3NhbWUgYXMgdGhvc2UgdXNlZCB0byBmaWdodCByZWd1bGFyIGJ1Z3MuIFRoZSBvbmx5IHNwZWNpZmljIHRvb2xzIGFyZQordGVzdCBzdWl0ZXMgYW5kIHRvb2xzIHNpbWlsYXIgYXMgImdpdCBiaXNlY3QiLgorCitUZXN0IHN1aXRlcyBhcmUgdmVyeSBuaWNlLiBCdXQgd2hlbiB0aGV5IGFyZSB1c2VkIGFsb25lLCB0aGV5IGFyZQorc3VwcG9zZWQgdG8gYmUgdXNlZCBzbyB0aGF0IGFsbCB0aGUgdGVzdHMgYXJlIGNoZWNrZWQgYWZ0ZXIgZWFjaAorY29tbWl0LiBUaGlzIG1lYW5zIHRoYXQgdGhleSBhcmUgbm90IHZlcnkgZWZmaWNpZW50LCBiZWNhdXNlIG1hbnkKK3Rlc3RzIGFyZSBydW4gZm9yIG5vIGludGVyZXN0aW5nIHJlc3VsdCwgYW5kIHRoZXkgc3VmZmVyIGZyb20KK2NvbWJpbmF0b3JpYWwgZXhwbG9zaW9uLgorCitJbiBmYWN0IHRoZSBwcm9ibGVtIGlzIHRoYXQgYmlnIHNvZnR3YXJlIG9mdGVuIGhhcyBtYW55IGRpZmZlcmVudAorY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGF0IGVhY2ggdGVzdCBjYXNlIHNob3VsZCBwYXNzIGZvciBlYWNoCitjb25maWd1cmF0aW9uIGFmdGVyIGVhY2ggY29tbWl0LiBTbyBpZiB5b3UgaGF2ZSBmb3IgZWFjaCByZWxlYXNlOiBOCitjb25maWd1cmF0aW9ucywgTSBjb21taXRzIGFuZCBUIHRlc3QgY2FzZXMsIHlvdSBzaG91bGQgcGVyZm9ybToKKworLS0tLS0tLS0tLS0tLQorTiAqIE0gKiBUIHRlc3RzCistLS0tLS0tLS0tLS0tCisKK3doZXJlIE4sIE0gYW5kIFQgYXJlIGFsbCBncm93aW5nIHdpdGggdGhlIHNpemUgeW91ciBzb2Z0d2FyZS4KKworU28gdmVyeSBzb29uIGl0IHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIGNvbXBsZXRlbHkgdGVzdCBldmVyeXRoaW5nLgorCitBbmQgaWYgc29tZSBidWdzIHNsaXAgdGhyb3VnaCB5b3VyIHRlc3Qgc3VpdGUsIHRoZW4geW91IGNhbiBhZGQgYSB0ZXN0Cit0byB5b3VyIHRlc3Qgc3VpdGUuIEJ1dCBpZiB5b3Ugd2FudCB0byB1c2UgeW91ciBuZXcgaW1wcm92ZWQgdGVzdAorc3VpdGUgdG8gZmluZCB3aGVyZSB0aGUgYnVnIHNsaXBwZWQgaW4sIHRoZW4geW91IHdpbGwgZWl0aGVyIGhhdmUgdG8KK2VtdWxhdGUgYSBiaXNlY3Rpb24gcHJvY2VzcyBvciB5b3Ugd2lsbCBwZXJoYXBzIGJsdW50bHkgdGVzdCBlYWNoCitjb21taXQgYmFja3dhcmQgc3RhcnRpbmcgZnJvbSB0aGUgImJhZCIgY29tbWl0IHlvdSBoYXZlIHdoaWNoIG1heSBiZQordmVyeSB3YXN0ZWZ1bC4KKworImdpdCBiaXNlY3QiIG92ZXJ2aWV3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RhcnRpbmcgYSBiaXNlY3Rpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBmaXJzdCAiZ2l0IGJpc2VjdCIgc3ViY29tbWFuZCB0byB1c2UgaXMgImdpdCBiaXNlY3Qgc3RhcnQiIHRvCitzdGFydCB0aGUgc2VhcmNoLiBUaGVuIGJvdW5kcyBtdXN0IGJlIHNldCB0byBsaW1pdCB0aGUgY29tbWl0CitzcGFjZS4gVGhpcyBpcyBkb25lIHVzdWFsbHkgYnkgZ2l2aW5nIG9uZSAiYmFkIiBhbmQgYXQgbGVhc3Qgb25lCisiZ29vZCIgY29tbWl0LiBUaGV5IGNhbiBiZSBwYXNzZWQgaW4gdGhlIGluaXRpYWwgY2FsbCB0byAiZ2l0IGJpc2VjdAorc3RhcnQiIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IFtCQUQgW0dPT0QuLi5dXQorLS0tLS0tLS0tLS0tLQorCitvciB0aGV5IGNhbiBiZSBzZXQgdXNpbmc6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBiYWQgW0NPTU1JVF0KKy0tLS0tLS0tLS0tLS0KKworYW5kOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgZ29vZCBbQ09NTUlULi4uXQorLS0tLS0tLS0tLS0tLQorCit3aGVyZSBCQUQsIEdPT0QgYW5kIENPTU1JVCBhcmUgYWxsIG5hbWVzIHRoYXQgY2FuIGJlIHJlc29sdmVkIHRvIGEKK2NvbW1pdC4KKworVGhlbiAiZ2l0IGJpc2VjdCIgd2lsbCBjaGVja291dCBhIGNvbW1pdCBvZiBpdHMgY2hvb3NpbmcgYW5kIGFzayB0aGUKK3VzZXIgdG8gdGVzdCBpdCwgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgdjIuNi4yNyB2Mi42LjI1CitCaXNlY3Rpbmc6IDEwOTI4IHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAocm91Z2hseSAxNCBzdGVwcykKK1syZWM2NWY4Yjg5ZWEwMDNjMjdmZjc3MjM1MjVhMmVlMzM1YTJiMzkzXSB4ODY6IGNsZWFuIHVwIHVzaW5nIG1heF9sb3dfcGZuIG9uIDMyLWJpdAorLS0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgdGhlIGV4YW1wbGUgdGhhdCB3ZSB3aWxsIHVzZSBpcyByZWFsbHkgYSB0b3kgZXhhbXBsZSwgd2UKK3dpbGwgYmUgbG9va2luZyBmb3IgdGhlIGZpcnN0IGNvbW1pdCB0aGF0IGhhcyBhIHZlcnNpb24gbGlrZQorIjIuNi4yNi1zb21ldGhpbmciLCB0aGF0IGlzIHRoZSBjb21taXQgdGhhdCBoYXMgYSAiU1VCTEVWRUwgPSAyNiIgbGluZQoraW4gdGhlIHRvcCBsZXZlbCBNYWtlZmlsZS4gVGhpcyBpcyBhIHRveSBleGFtcGxlIGJlY2F1c2UgdGhlcmUgYXJlCitiZXR0ZXIgd2F5cyB0byBmaW5kIHRoaXMgY29tbWl0IHdpdGggR2l0IHRoYW4gdXNpbmcgImdpdCBiaXNlY3QiIChmb3IKK2V4YW1wbGUgImdpdCBibGFtZSIgb3IgImdpdCBsb2cgLVM8c3RyaW5nPiIpLgorCitEcml2aW5nIGEgYmlzZWN0aW9uIG1hbnVhbGx5Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0F0IHRoaXMgcG9pbnQgdGhlcmUgYXJlIGJhc2ljYWxseSAyIHdheXMgdG8gZHJpdmUgdGhlIHNlYXJjaC4gSXQgY2FuCitiZSBkcml2ZW4gbWFudWFsbHkgYnkgdGhlIHVzZXIgb3IgaXQgY2FuIGJlIGRyaXZlbiBhdXRvbWF0aWNhbGx5IGJ5IGEKK3NjcmlwdCBvciBhIGNvbW1hbmQuCisKK0lmIHRoZSB1c2VyIGlzIGRyaXZpbmcgaXQsIHRoZW4gYXQgZWFjaCBzdGVwIG9mIHRoZSBzZWFyY2gsIHRoZSB1c2VyCit3aWxsIGhhdmUgdG8gdGVzdCB0aGUgY3VycmVudCBjb21taXQgYW5kIHNheSBpZiBpdCBpcyAiZ29vZCIgb3IgImJhZCIKK3VzaW5nIHRoZSAiZ2l0IGJpc2VjdCBnb29kIiBvciAiZ2l0IGJpc2VjdCBiYWQiIGNvbW1hbmRzIHJlc3BlY3RpdmVseQordGhhdCBoYXZlIGJlZW4gZGVzY3JpYmVkIGFib3ZlLiBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IGJhZAorQmlzZWN0aW5nOiA1NDgwIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAocm91Z2hseSAxMyBzdGVwcykKK1s2NmMwYjM5NGYwOGZkODkyMzY1MTVjMWM4NDQ4NWVhNzEyYTE1N2JlXSBLVk06IGtpbGwgZmlsZS0+Zl9jb3VudCBhYnVzZSBpbiBrdm0KKy0tLS0tLS0tLS0tLS0KKworQW5kIGFmdGVyIGEgZmV3IG1vcmUgc3RlcHMgbGlrZSB0aGF0LCAiZ2l0IGJpc2VjdCIgd2lsbCBldmVudHVhbGx5CitmaW5kIGEgZmlyc3QgYmFkIGNvbW1pdDoKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IGJhZAorMmRkY2NhMzZjOGJjZmEyNTE3MjRmZTM0MmM4MzI3NDUxOTg4YmUwZCBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdAorY29tbWl0IDJkZGNjYTM2YzhiY2ZhMjUxNzI0ZmUzNDJjODMyNzQ1MTk4OGJlMGQKK0F1dGhvcjogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPgorRGF0ZTogICBTYXQgTWF5IDMgMTE6NTk6NDQgMjAwOCAtMDcwMAorCisgICAgTGludXggMi42LjI2LXJjMQorCis6MTAwNjQ0IDEwMDY0NCA1Y2Y4MjU4MS4uLiA0NDkyOTg0ZS4uLiBNICAgICAgTWFrZWZpbGUKKy0tLS0tLS0tLS0tLS0KKworQXQgdGhpcyBwb2ludCB3ZSBjYW4gc2VlIHdoYXQgdGhlIGNvbW1pdCBkb2VzLCBjaGVjayBpdCBvdXQgKGlmIGl0J3MKK25vdCBhbHJlYWR5IGNoZWNrZWQgb3V0KSBvciB0aW5rZXIgd2l0aCBpdCwgZm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgSEVBRAorY29tbWl0IDJkZGNjYTM2YzhiY2ZhMjUxNzI0ZmUzNDJjODMyNzQ1MTk4OGJlMGQKK0F1dGhvcjogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPgorRGF0ZTogICBTYXQgTWF5IDMgMTE6NTk6NDQgMjAwOCAtMDcwMAorCisgICAgTGludXggMi42LjI2LXJjMQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggNWNmODI1OC4uNDQ5Mjk4NCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTEsNyArMSw3IEBACisgVkVSU0lPTiA9IDIKKyBQQVRDSExFVkVMID0gNgorLVNVQkxFVkVMID0gMjUKKy1FWFRSQVZFUlNJT04gPQorK1NVQkxFVkVMID0gMjYKKytFWFRSQVZFUlNJT04gPSAtcmMxCisgTkFNRSA9IEZ1bmt5IFdlYXNlbCBpcyBKaWdneSB3aXQgaXQKKworICMgKkRPQ1VNRU5UQVRJT04qCistLS0tLS0tLS0tLS0tCisKK0FuZCB3aGVuIHdlIGFyZSBmaW5pc2hlZCB3ZSBjYW4gdXNlICJnaXQgYmlzZWN0IHJlc2V0IiB0byBnbyBiYWNrIHRvCit0aGUgYnJhbmNoIHdlIHdlcmUgaW4gYmVmb3JlIHdlIHN0YXJ0ZWQgYmlzZWN0aW5nOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgcmVzZXQKK0NoZWNraW5nIG91dCBmaWxlczogMTAwJSAoMjE1NDkvMjE1NDkpLCBkb25lLgorUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMgMmRkY2NhMy4uLiBMaW51eCAyLjYuMjYtcmMxCitTd2l0Y2hlZCB0byBicmFuY2ggJ21hc3RlcicKKy0tLS0tLS0tLS0tLS0KKworRHJpdmluZyBhIGJpc2VjdGlvbiBhdXRvbWF0aWNhbGx5Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIG90aGVyIHdheSB0byBkcml2ZSB0aGUgYmlzZWN0aW9uIHByb2Nlc3MgaXMgdG8gdGVsbCAiZ2l0IGJpc2VjdCIKK3RvIGxhdW5jaCBhIHNjcmlwdCBvciBjb21tYW5kIGF0IGVhY2ggYmlzZWN0aW9uIHN0ZXAgdG8ga25vdyBpZiB0aGUKK2N1cnJlbnQgY29tbWl0IGlzICJnb29kIiBvciAiYmFkIi4gVG8gZG8gdGhhdCwgd2UgdXNlIHRoZSAiZ2l0IGJpc2VjdAorcnVuIiBjb21tYW5kLiBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IHYyLjYuMjcgdjIuNi4yNQorQmlzZWN0aW5nOiAxMDkyOCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTQgc3RlcHMpCitbMmVjNjVmOGI4OWVhMDAzYzI3ZmY3NzIzNTI1YTJlZTMzNWEyYjM5M10geDg2OiBjbGVhbiB1cCB1c2luZyBtYXhfbG93X3BmbiBvbiAzMi1iaXQKKyQKKyQgZ2l0IGJpc2VjdCBydW4gZ3JlcCAnXlNVQkxFVkVMID0gMjUnIE1ha2VmaWxlCitydW5uaW5nIGdyZXAgXlNVQkxFVkVMID0gMjUgTWFrZWZpbGUKK0Jpc2VjdGluZzogNTQ4MCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTMgc3RlcHMpCitbNjZjMGIzOTRmMDhmZDg5MjM2NTE1YzFjODQ0ODVlYTcxMmExNTdiZV0gS1ZNOiBraWxsIGZpbGUtPmZfY291bnQgYWJ1c2UgaW4ga3ZtCitydW5uaW5nIGdyZXAgXlNVQkxFVkVMID0gMjUgTWFrZWZpbGUKK1NVQkxFVkVMID0gMjUKK0Jpc2VjdGluZzogMjc0MCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTIgc3RlcHMpCitbNjcxMjk0NzE5NjI4ZjE2NzFmYWVmZDQ4ODI3NjQ4ODZmOGFkMDhjYl0gVjRML0RWQig3ODc5KTogQWRkaW5nIGN4MTggU3VwcG9ydCBmb3IgbXhsNTAwNXMKKy4uLgorLi4uCitydW5uaW5nIGdyZXAgXlNVQkxFVkVMID0gMjUgTWFrZWZpbGUKK0Jpc2VjdGluZzogMCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMCBzdGVwcykKK1syZGRjY2EzNmM4YmNmYTI1MTcyNGZlMzQyYzgzMjc0NTE5ODhiZTBkXSBMaW51eCAyLjYuMjYtcmMxCitydW5uaW5nIGdyZXAgXlNVQkxFVkVMID0gMjUgTWFrZWZpbGUKKzJkZGNjYTM2YzhiY2ZhMjUxNzI0ZmUzNDJjODMyNzQ1MTk4OGJlMGQgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQKK2NvbW1pdCAyZGRjY2EzNmM4YmNmYTI1MTcyNGZlMzQyYzgzMjc0NTE5ODhiZTBkCitBdXRob3I6IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KK0RhdGU6ICAgU2F0IE1heSAzIDExOjU5OjQ0IDIwMDggLTA3MDAKKworICAgIExpbnV4IDIuNi4yNi1yYzEKKworOjEwMDY0NCAxMDA2NDQgNWNmODI1ODEuLi4gNDQ5Mjk4NGUuLi4gTSAgICAgIE1ha2VmaWxlCitiaXNlY3QgcnVuIHN1Y2Nlc3MKKy0tLS0tLS0tLS0tLS0KKworSW4gdGhpcyBleGFtcGxlLCB3ZSBwYXNzZWQgImdyZXAgJ15TVUJMRVZFTCA9IDI1JyBNYWtlZmlsZSIgYXMKK3BhcmFtZXRlciB0byAiZ2l0IGJpc2VjdCBydW4iLiBUaGlzIG1lYW5zIHRoYXQgYXQgZWFjaCBzdGVwLCB0aGUgZ3JlcAorY29tbWFuZCB3ZSBwYXNzZWQgd2lsbCBiZSBsYXVuY2hlZC4gQW5kIGlmIGl0IGV4aXRzIHdpdGggY29kZSAwICh0aGF0CittZWFucyBzdWNjZXNzKSB0aGVuIGdpdCBiaXNlY3Qgd2lsbCBtYXJrIHRoZSBjdXJyZW50IHN0YXRlIGFzCisiZ29vZCIuIElmIGl0IGV4aXRzIHdpdGggY29kZSAxIChvciBhbnkgY29kZSBiZXR3ZWVuIDEgYW5kIDEyNworaW5jbHVkZWQsIGV4Y2VwdCB0aGUgc3BlY2lhbCBjb2RlIDEyNSksIHRoZW4gdGhlIGN1cnJlbnQgc3RhdGUgd2lsbCBiZQorbWFya2VkIGFzICJiYWQiLgorCitFeGl0IGNvZGUgYmV0d2VlbiAxMjggYW5kIDI1NSBhcmUgc3BlY2lhbCB0byAiZ2l0IGJpc2VjdCBydW4iLiBUaGV5CittYWtlIGl0IHN0b3AgaW1tZWRpYXRlbHkgdGhlIGJpc2VjdGlvbiBwcm9jZXNzLiBUaGlzIGlzIHVzZWZ1bCBmb3IKK2V4YW1wbGUgaWYgdGhlIGNvbW1hbmQgcGFzc2VkIHRha2VzIHRvbyBsb25nIHRvIGNvbXBsZXRlLCBiZWNhdXNlIHlvdQorY2FuIGtpbGwgaXQgd2l0aCBhIHNpZ25hbCBhbmQgaXQgd2lsbCBzdG9wIHRoZSBiaXNlY3Rpb24gcHJvY2Vzcy4KKworSXQgY2FuIGFsc28gYmUgdXNlZnVsIGluIHNjcmlwdHMgcGFzc2VkIHRvICJnaXQgYmlzZWN0IHJ1biIgdG8gImV4aXQKKzI1NSIgaWYgc29tZSB2ZXJ5IGFibm9ybWFsIHNpdHVhdGlvbiBpcyBkZXRlY3RlZC4KKworQXZvaWRpbmcgdW50ZXN0YWJsZSBjb21taXRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU29tZXRpbWVzIGl0IGhhcHBlbnMgdGhhdCB0aGUgY3VycmVudCBzdGF0ZSBjYW5ub3QgYmUgdGVzdGVkLCBmb3IKK2V4YW1wbGUgaWYgaXQgZG9lcyBub3QgY29tcGlsZSBiZWNhdXNlIHRoZXJlIHdhcyBhIGJ1ZyBwcmV2ZW50aW5nIGl0CithdCB0aGF0IHRpbWUuIFRoaXMgaXMgd2hhdCB0aGUgc3BlY2lhbCBleGl0IGNvZGUgMTI1IGlzIGZvci4gSXQgdGVsbHMKKyJnaXQgYmlzZWN0IHJ1biIgdGhhdCB0aGUgY3VycmVudCBjb21taXQgc2hvdWxkIGJlIG1hcmtlZCBhcwordW50ZXN0YWJsZSBhbmQgdGhhdCBhbm90aGVyIG9uZSBzaG91bGQgYmUgY2hvc2VuIGFuZCBjaGVja2VkIG91dC4KKworSWYgdGhlIGJpc2VjdGlvbiBwcm9jZXNzIGlzIGRyaXZlbiBtYW51YWxseSwgeW91IGNhbiB1c2UgImdpdCBiaXNlY3QKK3NraXAiIHRvIGRvIHRoZSBzYW1lIHRoaW5nLiAoSW4gZmFjdCB0aGUgc3BlY2lhbCBleGl0IGNvZGUgMTI1IG1ha2VzCisiZ2l0IGJpc2VjdCBydW4iIHVzZSAiZ2l0IGJpc2VjdCBza2lwIiBpbiB0aGUgYmFja2dyb3VuZC4pCisKK09yIGlmIHlvdSB3YW50IG1vcmUgY29udHJvbCwgeW91IGNhbiBpbnNwZWN0IHRoZSBjdXJyZW50IHN0YXRlIHVzaW5nCitmb3IgZXhhbXBsZSAiZ2l0IGJpc2VjdCB2aXN1YWxpemUiLiBJdCB3aWxsIGxhdW5jaCBnaXRrIChvciAiZ2l0IGxvZyIKK2lmIHRoZSBgRElTUExBWWAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCkgdG8gaGVscCB5b3UgZmluZCBhCitiZXR0ZXIgYmlzZWN0aW9uIHBvaW50LgorCitFaXRoZXIgd2F5LCBpZiB5b3UgaGF2ZSBhIHN0cmluZyBvZiB1bnRlc3RhYmxlIGNvbW1pdHMsIGl0IG1pZ2h0CitoYXBwZW4gdGhhdCB0aGUgcmVncmVzc2lvbiB5b3UgYXJlIGxvb2tpbmcgZm9yIGhhcyBiZWVuIGludHJvZHVjZWQgYnkKK29uZSBvZiB0aGVzZSB1bnRlc3RhYmxlIGNvbW1pdHMuIEluIHRoaXMgY2FzZSBpdCdzIG5vdCBwb3NzaWJsZSB0bwordGVsbCBmb3Igc3VyZSB3aGljaCBjb21taXQgaW50cm9kdWNlZCB0aGUgcmVncmVzc2lvbi4KKworU28gaWYgeW91IHVzZWQgImdpdCBiaXNlY3Qgc2tpcCIgKG9yIHRoZSBydW4gc2NyaXB0IGV4aXRlZCB3aXRoCitzcGVjaWFsIGNvZGUgMTI1KSB5b3UgY291bGQgZ2V0IGEgcmVzdWx0IGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLQorVGhlcmUgYXJlIG9ubHkgJ3NraXAncGVkIGNvbW1pdHMgbGVmdCB0byB0ZXN0LgorVGhlIGZpcnN0IGJhZCBjb21taXQgY291bGQgYmUgYW55IG9mOgorMTU3MjJmMmZhMzI4ZWFiYTk3MDIyODk4YTMwNWZmYzgxNzJkYjZiMQorNzhlODZjZjNlODUwYmQ3NTViYjcxODMxZjQyZTIwMDYyNmZiZDFlMAorZTE1YjczYWQzZGI5YjQ4ZDdkMWFkZTMyZjhjZDIzYTc1MWZlMGFjZQorMDcwZWFiMjMwMzAyNDcwNmYyOTI0ODIyYmZlYzhiOTg0N2U0YWMxYgorV2UgY2Fubm90IGJpc2VjdCBtb3JlIQorLS0tLS0tLS0tLS0tLQorCitTYXZpbmcgYSBsb2cgYW5kIHJlcGxheWluZyBpdAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSWYgeW91IHdhbnQgdG8gc2hvdyBvdGhlciBwZW9wbGUgeW91ciBiaXNlY3Rpb24gcHJvY2VzcywgeW91IGNhbiBnZXQgYQorbG9nIHVzaW5nIGZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgbG9nID4gYmlzZWN0X2xvZy50eHQKKy0tLS0tLS0tLS0tLS0KKworQW5kIGl0IGlzIHBvc3NpYmxlIHRvIHJlcGxheSBpdCB1c2luZzoKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHJlcGxheSBiaXNlY3RfbG9nLnR4dAorLS0tLS0tLS0tLS0tLQorCisKKyJnaXQgYmlzZWN0IiBkZXRhaWxzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCaXNlY3Rpb24gYWxnb3JpdGhtCit+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0FzIHRoZSBHaXQgY29tbWl0cyBmb3JtIGEgZGlyZWN0ZWQgYWN5Y2xpYyBncmFwaCAoREFHKSwgZmluZGluZyB0aGUKK2Jlc3QgYmlzZWN0aW9uIGNvbW1pdCB0byB0ZXN0IGF0IGVhY2ggc3RlcCBpcyBub3Qgc28gc2ltcGxlLiBBbnl3YXkKK0xpbnVzIGZvdW5kIGFuZCBpbXBsZW1lbnRlZCBhICJ0cnVseSBzdHVwaWQiIGFsZ29yaXRobSwgbGF0ZXIgaW1wcm92ZWQKK2J5IEp1bmlvIEhhbWFubywgdGhhdCB3b3JrcyBxdWl0ZSB3ZWxsLgorCitTbyB0aGUgYWxnb3JpdGhtIHVzZWQgYnkgImdpdCBiaXNlY3QiIHRvIGZpbmQgdGhlIGJlc3QgYmlzZWN0aW9uCitjb21taXQgd2hlbiB0aGVyZSBhcmUgbm8gc2tpcHBlZCBjb21taXRzIGlzIHRoZSBmb2xsb3dpbmc6CisKKzEpIGtlZXAgb25seSB0aGUgY29tbWl0cyB0aGF0OgorCithKSBhcmUgYW5jZXN0b3Igb2YgdGhlICJiYWQiIGNvbW1pdCAoaW5jbHVkaW5nIHRoZSAiYmFkIiBjb21taXQgaXRzZWxmKSwKK2IpIGFyZSBub3QgYW5jZXN0b3Igb2YgYSAiZ29vZCIgY29tbWl0IChleGNsdWRpbmcgdGhlICJnb29kIiBjb21taXRzKS4KKworVGhpcyBtZWFucyB0aGF0IHdlIGdldCByaWQgb2YgdGhlIHVuaW50ZXJlc3RpbmcgY29tbWl0cyBpbiB0aGUgREFHLgorCitGb3IgZXhhbXBsZSBpZiB3ZSBzdGFydCB3aXRoIGEgZ3JhcGggbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tCitHLVktRy1XLVctVy1YLVgtWC1YCisJICAgXCAvCisJICAgIFctVy1CCisJICAgLworWS0tLUctVy0tLVcKKyBcIC8gICBcCitZLVkgICAgIFgtWC1YLVgKKworLT4gdGltZSBnb2VzIHRoaXMgd2F5IC0+CistLS0tLS0tLS0tLS0tCisKK3doZXJlIEIgaXMgdGhlICJiYWQiIGNvbW1pdCwgIkciIGFyZSAiZ29vZCIgY29tbWl0cyBhbmQgVywgWCwgYW5kIFkKK2FyZSBvdGhlciBjb21taXRzLCB3ZSB3aWxsIGdldCB0aGUgZm9sbG93aW5nIGdyYXBoIGFmdGVyIHRoaXMgZmlyc3QKK3N0ZXA6CisKKy0tLS0tLS0tLS0tLS0KK1ctVy1XCisgICAgIFwKKyAgICAgIFctVy1CCisgICAgIC8KK1ctLS1XCistLS0tLS0tLS0tLS0tCisKK1NvIG9ubHkgdGhlIFcgYW5kIEIgY29tbWl0cyB3aWxsIGJlIGtlcHQuIEJlY2F1c2UgY29tbWl0cyBYIGFuZCBZIHdpbGwKK2hhdmUgYmVlbiByZW1vdmVkIGJ5IHJ1bGVzIGEpIGFuZCBiKSByZXNwZWN0aXZlbHksIGFuZCBiZWNhdXNlIGNvbW1pdHMKK0cgYXJlIHJlbW92ZWQgYnkgcnVsZSBiKSB0b28uCisKK05vdGUgZm9yIEdpdCB1c2VycywgdGhhdCBpdCBpcyBlcXVpdmFsZW50IGFzIGtlZXBpbmcgb25seSB0aGUgY29tbWl0CitnaXZlbiBieToKKworLS0tLS0tLS0tLS0tLQorZ2l0IHJldi1saXN0IEJBRCAtLW5vdCBHT09EMSBHT09EMi4uLgorLS0tLS0tLS0tLS0tLQorCitBbHNvIG5vdGUgdGhhdCB3ZSBkb24ndCByZXF1aXJlIHRoZSBjb21taXRzIHRoYXQgYXJlIGtlcHQgdG8gYmUKK2Rlc2NlbmRhbnRzIG9mIGEgImdvb2QiIGNvbW1pdC4gU28gaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCBjb21taXRzIFcKK2FuZCBaIHdpbGwgYmUga2VwdDoKKworLS0tLS0tLS0tLS0tLQorRy1XLVctVy1CCisgICAvCitaLVoKKy0tLS0tLS0tLS0tLS0KKworMikgc3RhcnRpbmcgZnJvbSB0aGUgImdvb2QiIGVuZHMgb2YgdGhlIGdyYXBoLCBhc3NvY2lhdGUgdG8gZWFjaAorY29tbWl0IHRoZSBudW1iZXIgb2YgYW5jZXN0b3JzIGl0IGhhcyBwbHVzIG9uZQorCitGb3IgZXhhbXBsZSB3aXRoIHRoZSBmb2xsb3dpbmcgZ3JhcGggd2hlcmUgSCBpcyB0aGUgImJhZCIgY29tbWl0IGFuZCBBCithbmQgRCBhcmUgc29tZSBwYXJlbnRzIG9mIHNvbWUgImdvb2QiIGNvbW1pdHM6CisKKy0tLS0tLS0tLS0tLS0KK0EtQi1DCisgICAgIFwKKyAgICAgIEYtRy1ICisgICAgIC8KK0QtLS1FCistLS0tLS0tLS0tLS0tCisKK3RoaXMgd2lsbCBnaXZlOgorCistLS0tLS0tLS0tLS0tCisxIDIgMworQS1CLUMKKyAgICAgXDYgNyA4CisgICAgICBGLUctSAorMSAgIDIvCitELS0tRQorLS0tLS0tLS0tLS0tLQorCiszKSBhc3NvY2lhdGUgdG8gZWFjaCBjb21taXQ6IG1pbihYLCBOIC0gWCkKKword2hlcmUgWCBpcyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB0byB0aGUgY29tbWl0IGluIHN0ZXAgMikgYW5kIE4gaXMgdGhlCit0b3RhbCBudW1iZXIgb2YgY29tbWl0cyBpbiB0aGUgZ3JhcGguCisKK0luIHRoZSBhYm92ZSBleGFtcGxlIHdlIGhhdmUgTiA9IDgsIHNvIHRoaXMgd2lsbCBnaXZlOgorCistLS0tLS0tLS0tLS0tCisxIDIgMworQS1CLUMKKyAgICAgXDIgMSAwCisgICAgICBGLUctSAorMSAgIDIvCitELS0tRQorLS0tLS0tLS0tLS0tLQorCis0KSB0aGUgYmVzdCBiaXNlY3Rpb24gcG9pbnQgaXMgdGhlIGNvbW1pdCB3aXRoIHRoZSBoaWdoZXN0IGFzc29jaWF0ZWQKK251bWJlcgorCitTbyBpbiB0aGUgYWJvdmUgZXhhbXBsZSB0aGUgYmVzdCBiaXNlY3Rpb24gcG9pbnQgaXMgY29tbWl0IEMuCisKKzUpIG5vdGUgdGhhdCBzb21lIHNob3J0Y3V0cyBhcmUgaW1wbGVtZW50ZWQgdG8gc3BlZWQgdXAgdGhlIGFsZ29yaXRobQorCitBcyB3ZSBrbm93IE4gZnJvbSB0aGUgYmVnaW5uaW5nLCB3ZSBrbm93IHRoYXQgbWluKFgsIE4gLSBYKSBjYW4ndCBiZQorZ3JlYXRlciB0aGFuIE4vMi4gU28gZHVyaW5nIHN0ZXBzIDIpIGFuZCAzKSwgaWYgd2Ugd291bGQgYXNzb2NpYXRlIE4vMgordG8gYSBjb21taXQsIHRoZW4gd2Uga25vdyB0aGlzIGlzIHRoZSBiZXN0IGJpc2VjdGlvbiBwb2ludC4gU28gaW4gdGhpcworY2FzZSB3ZSBjYW4ganVzdCBzdG9wIHByb2Nlc3NpbmcgYW55IG90aGVyIGNvbW1pdCBhbmQgcmV0dXJuIHRoZQorY3VycmVudCBjb21taXQuCisKK0Jpc2VjdGlvbiBhbGdvcml0aG0gZGVidWdnaW5nCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitGb3IgYW55IGNvbW1pdCBncmFwaCwgeW91IGNhbiBzZWUgdGhlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaAorY29tbWl0IHVzaW5nICJnaXQgcmV2LWxpc3QgLS1iaXNlY3QtYWxsIi4KKworRm9yIGV4YW1wbGUsIGZvciB0aGUgYWJvdmUgZ3JhcGgsIGEgY29tbWFuZCBsaWtlOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCByZXYtbGlzdCAtLWJpc2VjdC1hbGwgQkFEIC0tbm90IEdPT0QxIEdPT0QyCistLS0tLS0tLS0tLS0tCisKK3dvdWxkIG91dHB1dCBzb21ldGhpbmcgbGlrZToKKworLS0tLS0tLS0tLS0tLQorZTE1YjczYWQzZGI5YjQ4ZDdkMWFkZTMyZjhjZDIzYTc1MWZlMGFjZSAoZGlzdD0zKQorMTU3MjJmMmZhMzI4ZWFiYTk3MDIyODk4YTMwNWZmYzgxNzJkYjZiMSAoZGlzdD0yKQorNzhlODZjZjNlODUwYmQ3NTViYjcxODMxZjQyZTIwMDYyNmZiZDFlMCAoZGlzdD0yKQorYTE5MzlkOWExNDJkZTk3MjA5NGFmNGRkZTlhNTQ0ZTU3N2RkZWYwZSAoZGlzdD0yKQorMDcwZWFiMjMwMzAyNDcwNmYyOTI0ODIyYmZlYzhiOTg0N2U0YWMxYiAoZGlzdD0xKQorYTM4NjRkNGYzMmEzYmY1ZWQxNzdkZGVmNTk4NDkwYTA4NzYwYjcwZCAoZGlzdD0xKQorYTQxYmFhNzE3ZGQ3NGYxMTgwYWJmNTVlOTM0MWJjN2EwYmI5ZDU1NiAoZGlzdD0xKQorOWU2MjJhNmRhZDQwM2I3MWM0MDk3OTc0M2JiOWQ1YmUxN2IxNmJkNiAoZGlzdD0wKQorLS0tLS0tLS0tLS0tLQorCitCaXNlY3Rpb24gYWxnb3JpdGhtIGRpc2N1c3NlZAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworRmlyc3QgbGV0J3MgZGVmaW5lICJiZXN0IGJpc2VjdGlvbiBwb2ludCIuIFdlIHdpbGwgc2F5IHRoYXQgYSBjb21taXQgWAoraXMgYSBiZXN0IGJpc2VjdGlvbiBwb2ludCBvciBhIGJlc3QgYmlzZWN0aW9uIGNvbW1pdCBpZiBrbm93aW5nIGl0cworc3RhdGUgKCJnb29kIiBvciAiYmFkIikgZ2l2ZXMgYXMgbXVjaCBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZSB3aGV0aGVyCit0aGUgc3RhdGUgb2YgdGhlIGNvbW1pdCBoYXBwZW5zIHRvIGJlICJnb29kIiBvciAiYmFkIi4KKworVGhpcyBtZWFucyB0aGF0IHRoZSBiZXN0IGJpc2VjdGlvbiBjb21taXRzIGFyZSB0aGUgY29tbWl0cyB3aGVyZSB0aGUKK2ZvbGxvd2luZyBmdW5jdGlvbiBpcyBtYXhpbXVtOgorCistLS0tLS0tLS0tLS0tCitmKFgpID0gbWluKGluZm9ybWF0aW9uX2lmX2dvb2QoWCksIGluZm9ybWF0aW9uX2lmX2JhZChYKSkKKy0tLS0tLS0tLS0tLS0KKword2hlcmUgaW5mb3JtYXRpb25faWZfZ29vZChYKSBpcyB0aGUgaW5mb3JtYXRpb24gd2UgZ2V0IGlmIFggaXMgZ29vZAorYW5kIGluZm9ybWF0aW9uX2lmX2JhZChYKSBpcyB0aGUgaW5mb3JtYXRpb24gd2UgZ2V0IGlmIFggaXMgYmFkLgorCitOb3cgd2Ugd2lsbCBzdXBwb3NlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgImZpcnN0IGJhZCBjb21taXQiLiBUaGlzCittZWFucyB0aGF0IGFsbCBpdHMgZGVzY2VuZGFudHMgYXJlICJiYWQiIGFuZCBhbGwgdGhlIG90aGVyIGNvbW1pdHMgYXJlCisiZ29vZCIuIEFuZCB3ZSB3aWxsIHN1cHBvc2UgdGhhdCBhbGwgY29tbWl0cyBoYXZlIGFuIGVxdWFsIHByb2JhYmlsaXR5CitvZiBiZWluZyBnb29kIG9yIGJhZCwgb3Igb2YgYmVpbmcgdGhlIGZpcnN0IGJhZCBjb21taXQsIHNvIGtub3dpbmcgdGhlCitzdGF0ZSBvZiBjIGNvbW1pdHMgZ2l2ZXMgYWx3YXlzIHRoZSBzYW1lIGFtb3VudCBvZiBpbmZvcm1hdGlvbgord2hlcmV2ZXIgdGhlc2UgYyBjb21taXRzIGFyZSBvbiB0aGUgZ3JhcGggYW5kIHdoYXRldmVyIGMgaXMuIChTbyB3ZQorc3VwcG9zZSB0aGF0IHRoZXNlIGNvbW1pdHMgYmVpbmcgZm9yIGV4YW1wbGUgb24gYSBicmFuY2ggb3IgbmVhciBhCitnb29kIG9yIGEgYmFkIGNvbW1pdCBkb2VzIG5vdCBnaXZlIG1vcmUgb3IgbGVzcyBpbmZvcm1hdGlvbikuCisKK0xldCdzIGFsc28gc3VwcG9zZSB0aGF0IHdlIGhhdmUgYSBjbGVhbmVkIHVwIGdyYXBoIGxpa2Ugb25lIGFmdGVyIHN0ZXAKKzEpIGluIHRoZSBiaXNlY3Rpb24gYWxnb3JpdGhtIGFib3ZlLiBUaGlzIG1lYW5zIHRoYXQgd2UgY2FuIG1lYXN1cmUKK3RoZSBpbmZvcm1hdGlvbiB3ZSBnZXQgaW4gdGVybXMgb2YgbnVtYmVyIG9mIGNvbW1pdCB3ZSBjYW4gcmVtb3ZlIGZyb20KK3RoZSBncmFwaC4uCisKK0FuZCBsZXQncyB0YWtlIGEgY29tbWl0IFggaW4gdGhlIGdyYXBoLgorCitJZiBYIGlzIGZvdW5kIHRvIGJlICJnb29kIiwgdGhlbiB3ZSBrbm93IHRoYXQgaXRzIGFuY2VzdG9ycyBhcmUgYWxsCisiZ29vZCIsIHNvIHdlIHdhbnQgdG8gc2F5IHRoYXQ6CisKKy0tLS0tLS0tLS0tLS0KK2luZm9ybWF0aW9uX2lmX2dvb2QoWCkgPSBudW1iZXJfb2ZfYW5jZXN0b3JzKFgpICAoVFJVRSkKKy0tLS0tLS0tLS0tLS0KKworQW5kIHRoaXMgaXMgdHJ1ZSBiZWNhdXNlIGF0IHN0ZXAgMSkgYikgd2UgcmVtb3ZlIHRoZSBhbmNlc3RvcnMgb2YgdGhlCisiZ29vZCIgY29tbWl0cy4KKworSWYgWCBpcyBmb3VuZCB0byBiZSAiYmFkIiwgdGhlbiB3ZSBrbm93IHRoYXQgaXRzIGRlc2NlbmRhbnRzIGFyZSBhbGwKKyJiYWQiLCBzbyB3ZSB3YW50IHRvIHNheSB0aGF0OgorCistLS0tLS0tLS0tLS0tCitpbmZvcm1hdGlvbl9pZl9iYWQoWCkgPSBudW1iZXJfb2ZfZGVzY2VuZGFudHMoWCkgIChXUk9ORykKKy0tLS0tLS0tLS0tLS0KKworQnV0IHRoaXMgaXMgd3JvbmcgYmVjYXVzZSBhdCBzdGVwIDEpIGEpIHdlIGtlZXAgb25seSB0aGUgYW5jZXN0b3JzIG9mCit0aGUgYmFkIGNvbW1pdC4gU28gd2UgZ2V0IG1vcmUgaW5mb3JtYXRpb24gd2hlbiBhIGNvbW1pdCBpcyBtYXJrZWQgYXMKKyJiYWQiLCBiZWNhdXNlIHdlIGFsc28ga25vdyB0aGF0IHRoZSBhbmNlc3RvcnMgb2YgdGhlIHByZXZpb3VzICJiYWQiCitjb21taXQgdGhhdCBhcmUgbm90IGFuY2VzdG9ycyBvZiB0aGUgbmV3ICJiYWQiIGNvbW1pdCBhcmUgbm90IHRoZQorZmlyc3QgYmFkIGNvbW1pdC4gV2UgZG9uJ3Qga25vdyBpZiB0aGV5IGFyZSBnb29kIG9yIGJhZCwgYnV0IHdlIGtub3cKK3RoYXQgdGhleSBhcmUgbm90IHRoZSBmaXJzdCBiYWQgY29tbWl0IGJlY2F1c2UgdGhleSBhcmUgbm90IGFuY2VzdG9yCitvZiB0aGUgbmV3ICJiYWQiIGNvbW1pdC4KKworU28gd2hlbiBhIGNvbW1pdCBpcyBtYXJrZWQgYXMgImJhZCIgd2Uga25vdyB3ZSBjYW4gcmVtb3ZlIGFsbCB0aGUKK2NvbW1pdHMgaW4gdGhlIGdyYXBoIGV4Y2VwdCB0aG9zZSB0aGF0IGFyZSBhbmNlc3RvcnMgb2YgdGhlIG5ldyAiYmFkIgorY29tbWl0LiBUaGlzIG1lYW5zIHRoYXQ6CisKKy0tLS0tLS0tLS0tLS0KK2luZm9ybWF0aW9uX2lmX2JhZChYKSA9IE4gLSBudW1iZXJfb2ZfYW5jZXN0b3JzKFgpICAoVFJVRSkKKy0tLS0tLS0tLS0tLS0KKword2hlcmUgTiBpcyB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgaW4gdGhlIChjbGVhbmVkIHVwKSBncmFwaC4KKworU28gaW4gdGhlIGVuZCB0aGlzIG1lYW5zIHRoYXQgdG8gZmluZCB0aGUgYmVzdCBiaXNlY3Rpb24gY29tbWl0cyB3ZQorc2hvdWxkIG1heGltaXplIHRoZSBmdW5jdGlvbjoKKworLS0tLS0tLS0tLS0tLQorZihYKSA9IG1pbihudW1iZXJfb2ZfYW5jZXN0b3JzKFgpLCBOIC0gbnVtYmVyX29mX2FuY2VzdG9ycyhYKSkKKy0tLS0tLS0tLS0tLS0KKworQW5kIHRoaXMgaXMgbmljZSBiZWNhdXNlIGF0IHN0ZXAgMikgd2UgY29tcHV0ZSBudW1iZXJfb2ZfYW5jZXN0b3JzKFgpCithbmQgc28gYXQgc3RlcCAzKSB3ZSBjb21wdXRlIGYoWCkuCisKK0xldCdzIHRha2UgdGhlIGZvbGxvd2luZyBncmFwaCBhcyBhbiBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tCisgICAgICAgICAgICBHLUgtSS1KCisgICAgICAgICAgIC8gICAgICAgXAorQS1CLUMtRC1FLUYgICAgICAgICBPCisgICAgICAgICAgIFwgICAgICAgLworICAgICAgICAgICAgSy1MLU0tTgorLS0tLS0tLS0tLS0tLQorCitJZiB3ZSBjb21wdXRlIHRoZSBmb2xsb3dpbmcgbm9uIG9wdGltYWwgZnVuY3Rpb24gb24gaXQ6CisKKy0tLS0tLS0tLS0tLS0KK2coWCkgPSBtaW4obnVtYmVyX29mX2FuY2VzdG9ycyhYKSwgbnVtYmVyX29mX2Rlc2NlbmRhbnRzKFgpKQorLS0tLS0tLS0tLS0tLQorCit3ZSBnZXQ6CisKKy0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIDQgMyAyIDEKKyAgICAgICAgICAgIEctSC1JLUoKKzEgMiAzIDQgNSA2LyAgICAgICBcMAorQS1CLUMtRC1FLUYgICAgICAgICBPCisgICAgICAgICAgIFwgICAgICAgLworICAgICAgICAgICAgSy1MLU0tTgorICAgICAgICAgICAgNCAzIDIgMQorLS0tLS0tLS0tLS0tLQorCitidXQgd2l0aCB0aGUgYWxnb3JpdGhtIHVzZWQgYnkgZ2l0IGJpc2VjdCB3ZSBnZXQ6CisKKy0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIDcgNyA2IDUKKyAgICAgICAgICAgIEctSC1JLUoKKzEgMiAzIDQgNSA2LyAgICAgICBcMAorQS1CLUMtRC1FLUYgICAgICAgICBPCisgICAgICAgICAgIFwgICAgICAgLworICAgICAgICAgICAgSy1MLU0tTgorICAgICAgICAgICAgNyA3IDYgNQorLS0tLS0tLS0tLS0tLQorCitTbyB3ZSBjaG9zZSBHLCBILCBLIG9yIEwgYXMgdGhlIGJlc3QgYmlzZWN0aW9uIHBvaW50LCB3aGljaCBpcyBiZXR0ZXIKK3RoYW4gRi4gQmVjYXVzZSBpZiBmb3IgZXhhbXBsZSBMIGlzIGJhZCwgdGhlbiB3ZSB3aWxsIGtub3cgbm90IG9ubHkKK3RoYXQgTCwgTSBhbmQgTiBhcmUgYmFkIGJ1dCBhbHNvIHRoYXQgRywgSCwgSSBhbmQgSiBhcmUgbm90IHRoZSBmaXJzdAorYmFkIGNvbW1pdCAoc2luY2Ugd2Ugc3VwcG9zZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpcnN0IGJhZCBjb21taXQKK2FuZCBpdCBtdXN0IGJlIGFuIGFuY2VzdG9yIG9mIEwpLgorCitTbyB0aGUgY3VycmVudCBhbGdvcml0aG0gc2VlbXMgdG8gYmUgdGhlIGJlc3QgcG9zc2libGUgZ2l2ZW4gd2hhdCB3ZQoraW5pdGlhbGx5IHN1cHBvc2VkLgorCitTa2lwIGFsZ29yaXRobQorfn5+fn5+fn5+fn5+fn4KKworV2hlbiBzb21lIGNvbW1pdHMgaGF2ZSBiZWVuIHNraXBwZWQgKHVzaW5nICJnaXQgYmlzZWN0IHNraXAiKSwgdGhlbgordGhlIGJpc2VjdGlvbiBhbGdvcml0aG0gaXMgdGhlIHNhbWUgZm9yIHN0ZXAgMSkgdG8gMykuIEJ1dCB0aGVuIHdlIHVzZQorcm91Z2hseSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorCis2KSBzb3J0IHRoZSBjb21taXQgYnkgZGVjcmVhc2luZyBhc3NvY2lhdGVkIHZhbHVlCisKKzcpIGlmIHRoZSBmaXJzdCBjb21taXQgaGFzIG5vdCBiZWVuIHNraXBwZWQsIHdlIGNhbiByZXR1cm4gaXQgYW5kIHN0b3AKK2hlcmUKKworOCkgb3RoZXJ3aXNlIGZpbHRlciBvdXQgYWxsIHRoZSBza2lwcGVkIGNvbW1pdHMgaW4gdGhlIHNvcnRlZCBsaXN0CisKKzkpIHVzZSBhIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAoUFJORykgdG8gZ2VuZXJhdGUgYSByYW5kb20KK251bWJlciBiZXR3ZWVuIDAgYW5kIDEKKworMTApIG11bHRpcGx5IHRoaXMgcmFuZG9tIG51bWJlciB3aXRoIGl0cyBzcXVhcmUgcm9vdCB0byBiaWFzIGl0IHRvd2FyZAorMAorCisxMSkgbXVsdGlwbHkgdGhlIHJlc3VsdCBieSB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgaW4gdGhlIGZpbHRlcmVkIGxpc3QKK3RvIGdldCBhbiBpbmRleCBpbnRvIHRoaXMgbGlzdAorCisxMikgcmV0dXJuIHRoZSBjb21taXQgYXQgdGhlIGNvbXB1dGVkIGluZGV4CisKK1NraXAgYWxnb3JpdGhtIGRpc2N1c3NlZAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0FmdGVyIHN0ZXAgNykgKGluIHRoZSBza2lwIGFsZ29yaXRobSksIHdlIGNvdWxkIGNoZWNrIGlmIHRoZSBzZWNvbmQKK2NvbW1pdCBoYXMgYmVlbiBza2lwcGVkIGFuZCByZXR1cm4gaXQgaWYgaXQgaXMgbm90IHRoZSBjYXNlLiBBbmQgaW4KK2ZhY3QgdGhhdCB3YXMgdGhlIGFsZ29yaXRobSB3ZSB1c2VkIGZyb20gd2hlbiAiZ2l0IGJpc2VjdCBza2lwIiB3YXMKK2RldmVsb3BlZCBpbiBHaXQgdmVyc2lvbiAxLjUuNCAocmVsZWFzZWQgb24gRmVicnVhcnkgMXN0IDIwMDgpIHVudGlsCitHaXQgdmVyc2lvbiAxLjYuNCAocmVsZWFzZWQgSnVseSAyOXRoIDIwMDkpLgorCitCdXQgSW5nbyBNb2xuYXIgYW5kIEguIFBldGVyIEFudmluIChhbm90aGVyIHdlbGwga25vd24gbGludXgga2VybmVsCitkZXZlbG9wZXIpIGJvdGggY29tcGxhaW5lZCB0aGF0IHNvbWV0aW1lcyB0aGUgYmVzdCBiaXNlY3Rpb24gcG9pbnRzCithbGwgaGFwcGVuZWQgdG8gYmUgaW4gYW4gYXJlYSB3aGVyZSBhbGwgdGhlIGNvbW1pdHMgYXJlCit1bnRlc3RhYmxlLiBBbmQgaW4gdGhpcyBjYXNlIHRoZSB1c2VyIHdhcyBhc2tlZCB0byB0ZXN0IG1hbnkKK3VudGVzdGFibGUgY29tbWl0cywgd2hpY2ggY291bGQgYmUgdmVyeSBpbmVmZmljaWVudC4KKworSW5kZWVkIHVudGVzdGFibGUgY29tbWl0cyBhcmUgb2Z0ZW4gdW50ZXN0YWJsZSBiZWNhdXNlIGEgYnJlYWthZ2Ugd2FzCitpbnRyb2R1Y2VkIGF0IG9uZSB0aW1lLCBhbmQgdGhhdCBicmVha2FnZSB3YXMgZml4ZWQgb25seSBhZnRlciBtYW55CitvdGhlciBjb21taXRzIHdlcmUgaW50cm9kdWNlZC4KKworVGhpcyBicmVha2FnZSBpcyBvZiBjb3Vyc2UgbW9zdCBvZiB0aGUgdGltZSB1bnJlbGF0ZWQgdG8gdGhlIGJyZWFrYWdlCit3ZSBhcmUgdHJ5aW5nIHRvIGxvY2F0ZSBpbiB0aGUgY29tbWl0IGdyYXBoLiBCdXQgaXQgcHJldmVudHMgdXMgdG8KK2tub3cgaWYgdGhlIGludGVyZXN0aW5nICJiYWQgYmVoYXZpb3IiIGlzIHByZXNlbnQgb3Igbm90LgorCitTbyBpdCBpcyBhIGZhY3QgdGhhdCBjb21taXRzIG5lYXIgYW4gdW50ZXN0YWJsZSBjb21taXQgaGF2ZSBhIGhpZ2gKK3Byb2JhYmlsaXR5IG9mIGJlaW5nIHVudGVzdGFibGUgdGhlbXNlbHZlcy4gQW5kIHRoZSBiZXN0IGJpc2VjdGlvbgorY29tbWl0cyBhcmUgb2Z0ZW4gZm91bmQgdG9nZXRoZXIgdG9vIChkdWUgdG8gdGhlIGJpc2VjdGlvbiBhbGdvcml0aG0pLgorCitUaGlzIGlzIHdoeSBpdCBpcyBhIGJhZCBpZGVhIHRvIGp1c3QgY2hvc2UgdGhlIG5leHQgYmVzdCB1bnNraXBwZWQKK2Jpc2VjdGlvbiBjb21taXQgd2hlbiB0aGUgZmlyc3Qgb25lIGhhcyBiZWVuIHNraXBwZWQuCisKK1dlIGZvdW5kIHRoYXQgbW9zdCBjb21taXRzIG9uIHRoZSBncmFwaCBtYXkgZ2l2ZSBxdWl0ZSBhIGxvdCBvZgoraW5mb3JtYXRpb24gd2hlbiB0aGV5IGFyZSB0ZXN0ZWQuIEFuZCB0aGUgY29tbWl0cyB0aGF0IHdpbGwgbm90IG9uCithdmVyYWdlIGdpdmUgYSBsb3Qgb2YgaW5mb3JtYXRpb24gYXJlIHRoZSBvbmUgbmVhciB0aGUgZ29vZCBhbmQgYmFkCitjb21taXRzLgorCitTbyB1c2luZyBhIFBSTkcgd2l0aCBhIGJpYXMgdG8gZmF2b3IgY29tbWl0cyBhd2F5IGZyb20gdGhlIGdvb2QgYW5kCitiYWQgY29tbWl0cyBsb29rZWQgbGlrZSBhIGdvb2QgY2hvaWNlLgorCitPbmUgb2J2aW91cyBpbXByb3ZlbWVudCB0byB0aGlzIGFsZ29yaXRobSB3b3VsZCBiZSB0byBsb29rIGZvciBhCitjb21taXQgdGhhdCBoYXMgYW4gYXNzb2NpYXRlZCB2YWx1ZSBuZWFyIHRoZSBvbmUgb2YgdGhlIGJlc3QgYmlzZWN0aW9uCitjb21taXQsIGFuZCB0aGF0IGlzIG9uIGFub3RoZXIgYnJhbmNoLCBiZWZvcmUgdXNpbmcgdGhlIFBSTkcuIEJlY2F1c2UKK2lmIHN1Y2ggYSBjb21taXQgZXhpc3RzLCB0aGVuIGl0IGlzIG5vdCB2ZXJ5IGxpa2VseSB0byBiZSB1bnRlc3RhYmxlCit0b28sIHNvIGl0IHdpbGwgcHJvYmFibHkgZ2l2ZSBtb3JlIGluZm9ybWF0aW9uIHRoYW4gYSBuZWFybHkgcmFuZG9tbHkKK2Nob3NlbiBvbmUuCisKK0NoZWNraW5nIG1lcmdlIGJhc2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGVyZSBpcyBhbm90aGVyIHR3ZWFrIGluIHRoZSBiaXNlY3Rpb24gYWxnb3JpdGhtIHRoYXQgaGFzIG5vdCBiZWVuCitkZXNjcmliZWQgaW4gdGhlICJiaXNlY3Rpb24gYWxnb3JpdGhtIiBhYm92ZS4KKworV2Ugc3VwcG9zZWQgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGVzIHRoYXQgdGhlICJnb29kIiBjb21taXRzIHdlcmUKK2FuY2VzdG9ycyBvZiB0aGUgImJhZCIgY29tbWl0LiBCdXQgdGhpcyBpcyBub3QgYSByZXF1aXJlbWVudCBvZiAiZ2l0CitiaXNlY3QiLgorCitPZiBjb3Vyc2UgdGhlICJiYWQiIGNvbW1pdCBjYW5ub3QgYmUgYW4gYW5jZXN0b3Igb2YgYSAiZ29vZCIgY29tbWl0LAorYmVjYXVzZSB0aGUgYW5jZXN0b3JzIG9mIHRoZSBnb29kIGNvbW1pdHMgYXJlIHN1cHBvc2VkIHRvIGJlCisiZ29vZCIuIEFuZCBhbGwgdGhlICJnb29kIiBjb21taXRzIG11c3QgYmUgcmVsYXRlZCB0byB0aGUgYmFkIGNvbW1pdC4KK1RoZXkgY2Fubm90IGJlIG9uIGEgYnJhbmNoIHRoYXQgaGFzIG5vIGxpbmsgd2l0aCB0aGUgYnJhbmNoIG9mIHRoZQorImJhZCIgY29tbWl0LiBCdXQgaXQgaXMgcG9zc2libGUgZm9yIGEgZ29vZCBjb21taXQgdG8gYmUgcmVsYXRlZCB0byBhCitiYWQgY29tbWl0IGFuZCB5ZXQgbm90IGJlIG5laXRoZXIgb25lIG9mIGl0cyBhbmNlc3RvciBub3Igb25lIG9mIGl0cworZGVzY2VuZGFudHMuCisKK0ZvciBleGFtcGxlLCB0aGVyZSBjYW4gYmUgYSAibWFpbiIgYnJhbmNoLCBhbmQgYSAiZGV2IiBicmFuY2ggdGhhdCB3YXMKK2ZvcmtlZCBvZiB0aGUgbWFpbiBicmFuY2ggYXQgYSBjb21taXQgbmFtZWQgIkQiIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLQorQS1CLUMtRC1FLUYtRyAgPC0tbWFpbgorICAgICAgIFwKKyAgICAgICAgSC1JLUogIDwtLWRldgorLS0tLS0tLS0tLS0tLQorCitUaGUgY29tbWl0ICJEIiBpcyBjYWxsZWQgYSAibWVyZ2UgYmFzZSIgZm9yIGJyYW5jaCAibWFpbiIgYW5kICJkZXYiCitiZWNhdXNlIGl0J3MgdGhlIGJlc3QgY29tbW9uIGFuY2VzdG9yIGZvciB0aGVzZSBicmFuY2hlcyBmb3IgYSBtZXJnZS4KKworTm93IGxldCdzIHN1cHBvc2UgdGhhdCBjb21taXQgSiBpcyBiYWQgYW5kIGNvbW1pdCBHIGlzIGdvb2QgYW5kIHRoYXQKK3dlIGFwcGx5IHRoZSBiaXNlY3Rpb24gYWxnb3JpdGhtIGxpa2UgaXQgaGFzIGJlZW4gcHJldmlvdXNseQorZGVzY3JpYmVkLgorCitBcyBkZXNjcmliZWQgaW4gc3RlcCAxKSBiKSBvZiB0aGUgYmlzZWN0aW9uIGFsZ29yaXRobSwgd2UgcmVtb3ZlIGFsbAordGhlIGFuY2VzdG9ycyBvZiB0aGUgZ29vZCBjb21taXRzIGJlY2F1c2UgdGhleSBhcmUgc3VwcG9zZWQgdG8gYmUgZ29vZAordG9vLgorCitTbyB3ZSB3b3VsZCBiZSBsZWZ0IHdpdGggb25seToKKworLS0tLS0tLS0tLS0tLQorSC1JLUoKKy0tLS0tLS0tLS0tLS0KKworQnV0IHdoYXQgaGFwcGVucyBpZiB0aGUgZmlyc3QgYmFkIGNvbW1pdCBpcyAiQiIgYW5kIGlmIGl0IGhhcyBiZWVuCitmaXhlZCBpbiB0aGUgIm1haW4iIGJyYW5jaCBieSBjb21taXQgIkYiPworCitUaGUgcmVzdWx0IG9mIHN1Y2ggYSBiaXNlY3Rpb24gd291bGQgYmUgdGhhdCB3ZSB3b3VsZCBmaW5kIHRoYXQgSCBpcwordGhlIGZpcnN0IGJhZCBjb21taXQsIHdoZW4gaW4gZmFjdCBpdCdzIEIuIFNvIHRoYXQgd291bGQgYmUgd3JvbmchCisKK0FuZCB5ZXMgaXQgY2FuIGhhcHBlbiBpbiBwcmFjdGljZSB0aGF0IHBlb3BsZSB3b3JraW5nIG9uIG9uZSBicmFuY2gKK2FyZSBub3QgYXdhcmUgdGhhdCBwZW9wbGUgd29ya2luZyBvbiBhbm90aGVyIGJyYW5jaCBmaXhlZCBhIGJ1ZyEgSXQKK2NvdWxkIGFsc28gaGFwcGVuIHRoYXQgRiBmaXhlZCBtb3JlIHRoYW4gb25lIGJ1ZyBvciB0aGF0IGl0IGlzIGEKK3JldmVydCBvZiBzb21lIGJpZyBkZXZlbG9wbWVudCBlZmZvcnQgdGhhdCB3YXMgbm90IHJlYWR5IHRvIGJlCityZWxlYXNlZC4KKworSW4gZmFjdCBkZXZlbG9wbWVudCB0ZWFtcyBvZnRlbiBtYWludGFpbiBib3RoIGEgZGV2ZWxvcG1lbnQgYnJhbmNoIGFuZAorYSBtYWludGVuYW5jZSBicmFuY2gsIGFuZCBpdCB3b3VsZCBiZSBxdWl0ZSBlYXN5IGZvciB0aGVtIGlmICJnaXQKK2Jpc2VjdCIganVzdCB3b3JrZWQgd2hlbiB0aGV5IHdhbnQgdG8gYmlzZWN0IGEgcmVncmVzc2lvbiBvbiB0aGUKK2RldmVsb3BtZW50IGJyYW5jaCB0aGF0IGlzIG5vdCBvbiB0aGUgbWFpbnRlbmFuY2UgYnJhbmNoLiBUaGV5IHNob3VsZAorYmUgYWJsZSB0byBzdGFydCBiaXNlY3RpbmcgdXNpbmc6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBkZXYgbWFpbgorLS0tLS0tLS0tLS0tLQorCitUbyBlbmFibGUgdGhhdCBhZGRpdGlvbmFsIG5pY2UgZmVhdHVyZSwgd2hlbiBhIGJpc2VjdGlvbiBpcyBzdGFydGVkCithbmQgd2hlbiBzb21lIGdvb2QgY29tbWl0cyBhcmUgbm90IGFuY2VzdG9ycyBvZiB0aGUgYmFkIGNvbW1pdCwgd2UKK2ZpcnN0IGNvbXB1dGUgdGhlIG1lcmdlIGJhc2VzIGJldHdlZW4gdGhlIGJhZCBhbmQgdGhlIGdvb2QgY29tbWl0cyBhbmQKK3dlIGNob3NlIHRoZXNlIG1lcmdlIGJhc2VzIGFzIHRoZSBmaXJzdCBjb21taXRzIHRoYXQgd2lsbCBiZSBjaGVja2VkCitvdXQgYW5kIHRlc3RlZC4KKworSWYgaXQgaGFwcGVucyB0aGF0IG9uZSBtZXJnZSBiYXNlIGlzIGJhZCwgdGhlbiB0aGUgYmlzZWN0aW9uIHByb2Nlc3MKK2lzIHN0b3BwZWQgd2l0aCBhIG1lc3NhZ2UgbGlrZToKKworLS0tLS0tLS0tLS0tLQorVGhlIG1lcmdlIGJhc2UgQkJCQkJCIGlzIGJhZC4KK1RoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuIEJCQkJCQiBhbmQgW0dHR0dHRywuLi5dLgorLS0tLS0tLS0tLS0tLQorCit3aGVyZSBCQkJCQkIgaXMgdGhlIHNoYTEgaGFzaCBvZiB0aGUgYmFkIG1lcmdlIGJhc2UgYW5kIFtHR0dHR0csLi4uXQoraXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB0aGUgc2hhMSBvZiB0aGUgZ29vZCBjb21taXRzLgorCitJZiBzb21lIG9mIHRoZSBtZXJnZSBiYXNlcyBhcmUgc2tpcHBlZCwgdGhlbiB0aGUgYmlzZWN0aW9uIHByb2Nlc3MKK2NvbnRpbnVlcywgYnV0IHRoZSBmb2xsb3dpbmcgbWVzc2FnZSBpcyBwcmludGVkIGZvciBlYWNoIHNraXBwZWQgbWVyZ2UKK2Jhc2U6CisKKy0tLS0tLS0tLS0tLS0KK1dhcm5pbmc6IHRoZSBtZXJnZSBiYXNlIGJldHdlZW4gQkJCQkJCIGFuZCBbR0dHR0dHLC4uLl0gbXVzdCBiZSBza2lwcGVkLgorU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0IGJhZCBjb21taXQgaXMgYmV0d2VlbiBNTU1NTU0gYW5kIEJCQkJCQi4KK1dlIGNvbnRpbnVlIGFueXdheS4KKy0tLS0tLS0tLS0tLS0KKword2hlcmUgQkJCQkJCIGlzIHRoZSBzaGExIGhhc2ggb2YgdGhlIGJhZCBjb21taXQsIE1NTU1NTSBpcyB0aGUgc2hhMQoraGFzaCBvZiB0aGUgbWVyZ2UgYmFzZSB0aGF0IGlzIHNraXBwZWQgYW5kIFtHR0dHR0csLi4uXSAgaXMgYSBjb21tYQorc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHNoYTEgb2YgdGhlIGdvb2QgY29tbWl0cy4KKworU28gaWYgdGhlcmUgaXMgbm8gYmFkIG1lcmdlIGJhc2UsIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyBjb250aW51ZXMgYXMKK3VzdWFsIGFmdGVyIHRoaXMgc3RlcC4KKworQmVzdCBiaXNlY3RpbmcgcHJhY3RpY2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVXNpbmcgdGVzdCBzdWl0ZXMgYW5kIGdpdCBiaXNlY3QgdG9nZXRoZXIKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0lmIHlvdSBib3RoIGhhdmUgYSB0ZXN0IHN1aXRlIGFuZCB1c2UgZ2l0IGJpc2VjdCwgdGhlbiBpdCBiZWNvbWVzIGxlc3MKK2ltcG9ydGFudCB0byBjaGVjayB0aGF0IGFsbCB0ZXN0cyBwYXNzIGFmdGVyIGVhY2ggY29tbWl0LiBUaG91Z2ggb2YKK2NvdXJzZSBpdCBpcyBwcm9iYWJseSBhIGdvb2QgaWRlYSB0byBoYXZlIHNvbWUgY2hlY2tzIHRvIGF2b2lkCiticmVha2luZyB0b28gbWFueSB0aGluZ3MgYmVjYXVzZSBpdCBjb3VsZCBtYWtlIGJpc2VjdGluZyBvdGhlciBidWdzCittb3JlIGRpZmZpY3VsdC4KKworWW91IGNhbiBmb2N1cyB5b3VyIGVmZm9ydHMgdG8gY2hlY2sgYXQgYSBmZXcgcG9pbnRzIChmb3IgZXhhbXBsZSByYworYW5kIGJldGEgcmVsZWFzZXMpIHRoYXQgYWxsIHRoZSBUIHRlc3QgY2FzZXMgcGFzcyBmb3IgYWxsIHRoZSBOCitjb25maWd1cmF0aW9ucy4gQW5kIHdoZW4gc29tZSB0ZXN0cyBkb24ndCBwYXNzIHlvdSBjYW4gdXNlICJnaXQKK2Jpc2VjdCIgKG9yIGJldHRlciAiZ2l0IGJpc2VjdCBydW4iKS4gU28geW91IHNob3VsZCBwZXJmb3JtIHJvdWdobHk6CisKKy0tLS0tLS0tLS0tLS0KK2MgKiBOICogVCArIGIgKiBNICogbG9nMihNKSB0ZXN0cworLS0tLS0tLS0tLS0tLQorCit3aGVyZSBjIGlzIHRoZSBudW1iZXIgb2Ygcm91bmRzIG9mIHRlc3QgKHNvIGEgc21hbGwgY29uc3RhbnQpIGFuZCBiIGlzCit0aGUgcmF0aW8gb2YgYnVnIHBlciBjb21taXQgKGhvcGVmdWxseSBhIHNtYWxsIGNvbnN0YW50IHRvbykuCisKK1NvIG9mIGNvdXJzZSBpdCdzIG11Y2ggYmV0dGVyIGFzIGl0J3MgTyhOICogVCkgdnMgTyhOICogVCAqIE0pIGlmCit5b3Ugd291bGQgdGVzdCBldmVyeXRoaW5nIGFmdGVyIGVhY2ggY29tbWl0LgorCitUaGlzIG1lYW5zIHRoYXQgdGVzdCBzdWl0ZXMgYXJlIGdvb2QgdG8gcHJldmVudCBzb21lIGJ1Z3MgZnJvbSBiZWluZworY29tbWl0dGVkIGFuZCB0aGV5IGFyZSBhbHNvIHF1aXRlIGdvb2QgdG8gdGVsbCB5b3UgdGhhdCB5b3UgaGF2ZSBzb21lCitidWdzLiBCdXQgdGhleSBhcmUgbm90IHNvIGdvb2QgdG8gdGVsbCB5b3Ugd2hlcmUgc29tZSBidWdzIGhhdmUgYmVlbgoraW50cm9kdWNlZC4gVG8gdGVsbCB5b3UgdGhhdCBlZmZpY2llbnRseSwgZ2l0IGJpc2VjdCBpcyBuZWVkZWQuCisKK1RoZSBvdGhlciBuaWNlIHRoaW5nIHdpdGggdGVzdCBzdWl0ZXMsIGlzIHRoYXQgd2hlbiB5b3UgaGF2ZSBvbmUsIHlvdQorYWxyZWFkeSBrbm93IGhvdyB0byB0ZXN0IGZvciBiYWQgYmVoYXZpb3IuIFNvIHlvdSBjYW4gdXNlIHRoaXMKK2tub3dsZWRnZSB0byBjcmVhdGUgYSBuZXcgdGVzdCBjYXNlIGZvciAiZ2l0IGJpc2VjdCIgd2hlbiBpdCBhcHBlYXJzCit0aGF0IHRoZXJlIGlzIGEgcmVncmVzc2lvbi4gU28gaXQgd2lsbCBiZSBlYXNpZXIgdG8gYmlzZWN0IHRoZSBidWcgYW5kCitmaXggaXQuIEFuZCB0aGVuIHlvdSBjYW4gYWRkIHRoZSB0ZXN0IGNhc2UgeW91IGp1c3QgY3JlYXRlZCB0byB5b3VyCit0ZXN0IHN1aXRlLgorCitTbyBpZiB5b3Uga25vdyBob3cgdG8gY3JlYXRlIHRlc3QgY2FzZXMgYW5kIGhvdyB0byBiaXNlY3QsIHlvdSB3aWxsIGJlCitzdWJqZWN0IHRvIGEgdmlydHVvdXMgY2lyY2xlOgorCittb3JlIHRlc3RzID0+IGVhc2llciB0byBjcmVhdGUgdGVzdHMgPT4gZWFzaWVyIHRvIGJpc2VjdCA9PiBtb3JlIHRlc3RzCisKK1NvIHRlc3Qgc3VpdGVzIGFuZCAiZ2l0IGJpc2VjdCIgYXJlIGNvbXBsZW1lbnRhcnkgdG9vbHMgdGhhdCBhcmUgdmVyeQorcG93ZXJmdWwgYW5kIGVmZmljaWVudCB3aGVuIHVzZWQgdG9nZXRoZXIuCisKK0Jpc2VjdGluZyBidWlsZCBmYWlsdXJlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1lvdSBjYW4gdmVyeSBlYXNpbHkgYXV0b21hdGljYWxseSBiaXNlY3QgYnJva2VuIGJ1aWxkcyB1c2luZyBzb21ldGhpbmcKK2xpa2U6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBCQUQgR09PRAorJCBnaXQgYmlzZWN0IHJ1biBtYWtlCistLS0tLS0tLS0tLS0tCisKK1Bhc3Npbmcgc2ggLWMgInNvbWUgY29tbWFuZHMiIHRvICJnaXQgYmlzZWN0IHJ1biIKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBydW4gc2ggLWMgIm1ha2UgfHwgZXhpdCAxMjU7IC4vbXlfYXBwIHwgZ3JlcCAnZ29vZCBvdXRwdXQnIgorLS0tLS0tLS0tLS0tLQorCitPbiB0aGUgb3RoZXIgaGFuZCBpZiB5b3UgZG8gdGhpcyBvZnRlbiwgdGhlbiBpdCBjYW4gYmUgd29ydGggaGF2aW5nCitzY3JpcHRzIHRvIGF2b2lkIHRvbyBtdWNoIHR5cGluZy4KKworRmluZGluZyBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitIZXJlIGlzIGFuIGV4YW1wbGUgc2NyaXB0IHRoYXQgY29tZXMgc2xpZ2h0bHkgbW9kaWZpZWQgZnJvbSBhIHJlYWwKK3dvcmxkIHNjcmlwdCB1c2VkIGJ5IEp1bmlvIEhhbWFubyA8PDQ+Pi4KKworVGhpcyBzY3JpcHQgY2FuIGJlIHBhc3NlZCB0byAiZ2l0IGJpc2VjdCBydW4iIHRvIGZpbmQgdGhlIGNvbW1pdCB0aGF0CitpbnRyb2R1Y2VkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbjoKKworLS0tLS0tLS0tLS0tLQorIyEvYmluL3NoCisKKyMgQnVpbGQgZXJyb3JzIGFyZSBub3Qgd2hhdCBJIGFtIGludGVyZXN0ZWQgaW4uCittYWtlIG15X2FwcCB8fCBleGl0IDI1NQorCisjIFdlIGFyZSBjaGVja2luZyBpZiBpdCBzdG9wcyBpbiBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUsIHNvCisjIGxldCBpdCBydW4gaW4gdGhlIGJhY2tncm91bmQuLi4KKworLi9teV9hcHAgPmxvZyAyPiYxICYKKworIyAuLi4gYW5kIGdyYWIgaXRzIHByb2Nlc3MgSUQuCitwaWQ9JCEKKworIyAuLi4gYW5kIHRoZW4gd2FpdCBmb3Igc3VmZmljaWVudGx5IGxvbmcuCitzbGVlcCAkTk9STUFMX1RJTUUKKworIyAuLi4gYW5kIHRoZW4gc2VlIGlmIHRoZSBwcm9jZXNzIGlzIHN0aWxsIHRoZXJlLgoraWYga2lsbCAtMCAkcGlkCit0aGVuCisJIyBJdCBpcyBzdGlsbCBydW5uaW5nIC0tIHRoYXQgaXMgYmFkLgorCWtpbGwgJHBpZDsgc2xlZXAgMTsga2lsbCAkcGlkOworCWV4aXQgMQorZWxzZQorCSMgSXQgaGFzIGFscmVhZHkgZmluaXNoZWQgKHRoZSAkcGlkIHByb2Nlc3Mgd2FzIG5vIG1vcmUpLAorCSMgYW5kIHdlIGFyZSBoYXBweS4KKwlleGl0IDAKK2ZpCistLS0tLS0tLS0tLS0tCisKK0ZvbGxvd2luZyBnZW5lcmFsIGJlc3QgcHJhY3RpY2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitJdCBpcyBvYnZpb3VzbHkgYSBnb29kIGlkZWEgbm90IHRvIGhhdmUgY29tbWl0cyB3aXRoIGNoYW5nZXMgdGhhdAora25vd2luZ2x5IGJyZWFrIHRoaW5ncywgZXZlbiBpZiBzb21lIG90aGVyIGNvbW1pdHMgbGF0ZXIgZml4IHRoZQorYnJlYWthZ2UuCisKK0l0IGlzIGFsc28gYSBnb29kIGlkZWEgd2hlbiB1c2luZyBhbnkgVkNTIHRvIGhhdmUgb25seSBvbmUgc21hbGwKK2xvZ2ljYWwgY2hhbmdlIGluIGVhY2ggY29tbWl0LgorCitUaGUgc21hbGxlciB0aGUgY2hhbmdlcyBpbiB5b3VyIGNvbW1pdCwgdGhlIG1vc3QgZWZmZWN0aXZlICJnaXQKK2Jpc2VjdCIgd2lsbCBiZS4gQW5kIHlvdSB3aWxsIHByb2JhYmx5IG5lZWQgImdpdCBiaXNlY3QiIGxlc3MgaW4gdGhlCitmaXJzdCBwbGFjZSwgYXMgc21hbGwgY2hhbmdlcyBhcmUgZWFzaWVyIHRvIHJldmlldyBldmVuIGlmIHRoZXkgYXJlCitvbmx5IHJldmlld2VkIGJ5IHRoZSBjb21taXR0ZXIuCisKK0Fub3RoZXIgZ29vZCBpZGVhIGlzIHRvIGhhdmUgZ29vZCBjb21taXQgbWVzc2FnZXMuIFRoZXkgY2FuIGJlIHZlcnkKK2hlbHBmdWwgdG8gdW5kZXJzdGFuZCB3aHkgc29tZSBjaGFuZ2VzIHdlcmUgbWFkZS4KKworVGhlc2UgZ2VuZXJhbCBiZXN0IHByYWN0aWNlcyBhcmUgdmVyeSBoZWxwZnVsIGlmIHlvdSBiaXNlY3Qgb2Z0ZW4uCisKK0F2b2lkaW5nIGJ1ZyBwcm9uZSBtZXJnZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworRmlyc3QgbWVyZ2VzIGJ5IHRoZW1zZWx2ZXMgY2FuIGludHJvZHVjZSBzb21lIHJlZ3Jlc3Npb25zIGV2ZW4gd2hlbgordGhlIG1lcmdlIG5lZWRzIG5vIHNvdXJjZSBjb2RlIGNvbmZsaWN0IHJlc29sdXRpb24uIFRoaXMgaXMgYmVjYXVzZSBhCitzZW1hbnRpYyBjaGFuZ2UgY2FuIGhhcHBlbiBpbiBvbmUgYnJhbmNoIHdoaWxlIHRoZSBvdGhlciBicmFuY2ggaXMgbm90Cithd2FyZSBvZiBpdC4KKworRm9yIGV4YW1wbGUgb25lIGJyYW5jaCBjYW4gY2hhbmdlIHRoZSBzZW1hbnRpYyBvZiBhIGZ1bmN0aW9uIHdoaWxlIHRoZQorb3RoZXIgYnJhbmNoIGFkZCBtb3JlIGNhbGxzIHRvIHRoZSBzYW1lIGZ1bmN0aW9uLgorCitUaGlzIGlzIG1hZGUgbXVjaCB3b3JzZSBpZiBtYW55IGZpbGVzIGhhdmUgdG8gYmUgZml4ZWQgdG8gcmVzb2x2ZQorY29uZmxpY3RzLiBUaGF0J3Mgd2h5IHN1Y2ggbWVyZ2VzIGFyZSBjYWxsZWQgImV2aWwgbWVyZ2VzIi4gVGhleSBjYW4KK21ha2UgcmVncmVzc2lvbnMgdmVyeSBkaWZmaWN1bHQgdG8gdHJhY2sgZG93bi4gSXQgY2FuIGV2ZW4gYmUKK21pc2xlYWRpbmcgdG8ga25vdyB0aGUgZmlyc3QgYmFkIGNvbW1pdCBpZiBpdCBoYXBwZW5zIHRvIGJlIHN1Y2ggYQorbWVyZ2UsIGJlY2F1c2UgcGVvcGxlIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIGJ1ZyBjb21lcyBmcm9tIGJhZCBjb25mbGljdAorcmVzb2x1dGlvbiB3aGVuIGl0IGNvbWVzIGZyb20gYSBzZW1hbnRpYyBjaGFuZ2UgaW4gb25lIGJyYW5jaC4KKworQW55d2F5ICJnaXQgcmViYXNlIiBjYW4gYmUgdXNlZCB0byBsaW5lYXJpemUgaGlzdG9yeS4gVGhpcyBjYW4gYmUgdXNlZAorZWl0aGVyIHRvIGF2b2lkIG1lcmdpbmcgaW4gdGhlIGZpcnN0IHBsYWNlLiBPciBpdCBjYW4gYmUgdXNlZCB0bworYmlzZWN0IG9uIGEgbGluZWFyIGhpc3RvcnkgaW5zdGVhZCBvZiB0aGUgbm9uIGxpbmVhciBvbmUsIGFzIHRoaXMKK3Nob3VsZCBnaXZlIG1vcmUgaW5mb3JtYXRpb24gaW4gY2FzZSBvZiBhIHNlbWFudGljIGNoYW5nZSBpbiBvbmUKK2JyYW5jaC4KKworTWVyZ2VzIGNhbiBiZSBhbHNvIG1hZGUgc2ltcGxlciBieSB1c2luZyBzbWFsbGVyIGJyYW5jaGVzIG9yIGJ5IHVzaW5nCittYW55IHRvcGljIGJyYW5jaGVzIGluc3RlYWQgb2Ygb25seSBsb25nIHZlcnNpb24gcmVsYXRlZCBicmFuY2hlcy4KKworQW5kIHRlc3RpbmcgY2FuIGJlIGRvbmUgbW9yZSBvZnRlbiBpbiBzcGVjaWFsIGludGVncmF0aW9uIGJyYW5jaGVzCitsaWtlIGxpbnV4LW5leHQgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisKK0FkYXB0aW5nIHlvdXIgd29yay1mbG93Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBIHNwZWNpYWwgd29yay1mbG93IHRvIHByb2Nlc3MgcmVncmVzc2lvbnMgY2FuIGdpdmUgZ3JlYXQgcmVzdWx0cy4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgd29yay1mbG93IHVzZWQgYnkgQW5kcmVhcyBFcmljc3NvbjoKKworKiB3cml0ZSwgaW4gdGhlIHRlc3Qgc3VpdGUsIGEgdGVzdCBzY3JpcHQgdGhhdCBleHBvc2VzIHRoZSByZWdyZXNzaW9uCisqIHVzZSAiZ2l0IGJpc2VjdCBydW4iIHRvIGZpbmQgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgaXQKKyogZml4IHRoZSBidWcgdGhhdCBpcyBvZnRlbiBtYWRlIG9idmlvdXMgYnkgdGhlIHByZXZpb3VzIHN0ZXAKKyogY29tbWl0IGJvdGggdGhlIGZpeCBhbmQgdGhlIHRlc3Qgc2NyaXB0IChhbmQgaWYgbmVlZGVkIG1vcmUgdGVzdHMpCisKK0FuZCBoZXJlIGlzIHdoYXQgQW5kcmVhcyBzYWlkIGFib3V0IHRoaXMgd29yay1mbG93IDw8NT4+OgorCitfX19fX19fX19fX19fCitUbyBnaXZlIHNvbWUgaGFyZCBmaWd1cmVzLCB3ZSB1c2VkIHRvIGhhdmUgYW4gYXZlcmFnZSByZXBvcnQtdG8tZml4CitjeWNsZSBvZiAxNDIuNiBob3VycyAoYWNjb3JkaW5nIHRvIG91ciBzb21ld2hhdCB3ZWlyZCBidWctdHJhY2tlcgord2hpY2gganVzdCBtZWFzdXJlcyB3YWxsLWNsb2NrIHRpbWUpLiBTaW5jZSB3ZSBtb3ZlZCB0byBHaXQsIHdlJ3ZlCitsb3dlcmVkIHRoYXQgdG8gMTYuMiBob3Vycy4gUHJpbWFyaWx5IGJlY2F1c2Ugd2UgY2FuIHN0YXkgb24gdG9wIG9mCit0aGUgYnVnIGZpeGluZyBub3csIGFuZCBiZWNhdXNlIGV2ZXJ5b25lJ3Mgam9ja2V5aW5nIHRvIGdldCB0byBmaXgKK2J1Z3MgKHdlJ3JlIHF1aXRlIHByb3VkIG9mIGhvdyBsYXp5IHdlIGFyZSB0byBsZXQgR2l0IGZpbmQgdGhlIGJ1Z3MKK2ZvciB1cykuIEVhY2ggbmV3IHJlbGVhc2UgcmVzdWx0cyBpbiB+NDAlIGZld2VyIGJ1Z3MgKGFsbW9zdCBjZXJ0YWlubHkKK2R1ZSB0byBob3cgd2Ugbm93IGZlZWwgYWJvdXQgd3JpdGluZyB0ZXN0cykuCitfX19fX19fX19fX19fCisKK0NsZWFybHkgdGhpcyB3b3JrLWZsb3cgdXNlcyB0aGUgdmlydHVvdXMgY2lyY2xlIGJldHdlZW4gdGVzdCBzdWl0ZXMKK2FuZCAiZ2l0IGJpc2VjdCIuIEluIGZhY3QgaXQgbWFrZXMgaXQgdGhlIHN0YW5kYXJkIHByb2NlZHVyZSB0byBkZWFsCit3aXRoIHJlZ3Jlc3Npb24uCisKK0luIG90aGVyIG1lc3NhZ2VzIEFuZHJlYXMgc2F5cyB0aGF0IHRoZXkgYWxzbyB1c2UgdGhlICJiZXN0IHByYWN0aWNlcyIKK2Rlc2NyaWJlZCBhYm92ZTogc21hbGwgbG9naWNhbCBjb21taXRzLCB0b3BpYyBicmFuY2hlcywgbm8gZXZpbAorbWVyZ2UsLi4uIFRoZXNlIHByYWN0aWNlcyBhbGwgaW1wcm92ZSB0aGUgYmlzZWN0YWJpbGl0eSBvZiB0aGUgY29tbWl0CitncmFwaCwgYnkgbWFraW5nIGl0IGVhc2llciBhbmQgbW9yZSB1c2VmdWwgdG8gYmlzZWN0LgorCitTbyBhIGdvb2Qgd29yay1mbG93IHNob3VsZCBiZSBkZXNpZ25lZCBhcm91bmQgdGhlIGFib3ZlIHBvaW50cy4gVGhhdAoraXMgbWFraW5nIGJpc2VjdGluZyBlYXNpZXIsIG1vcmUgdXNlZnVsIGFuZCBzdGFuZGFyZC4KKworSW52b2x2aW5nIFFBIHBlb3BsZSBhbmQgaWYgcG9zc2libGUgZW5kIHVzZXJzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworT25lIG5pY2UgYWJvdXQgImdpdCBiaXNlY3QiIGlzIHRoYXQgaXQgaXMgbm90IG9ubHkgYSBkZXZlbG9wZXIKK3Rvb2wuIEl0IGNhbiBlZmZlY3RpdmVseSBiZSB1c2VkIGJ5IFFBIHBlb3BsZSBvciBldmVuIGVuZCB1c2VycyAoaWYKK3RoZXkgaGF2ZSBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIG9yIGlmIHRoZXkgY2FuIGdldCBhY2Nlc3MgdG8gYWxsCit0aGUgYnVpbGRzKS4KKworVGhlcmUgd2FzIGEgZGlzY3Vzc2lvbiBhdCBvbmUgcG9pbnQgb24gdGhlIGxpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3QKK29mIHdoZXRoZXIgaXQgd2FzIG9rIHRvIGFsd2F5cyBhc2sgZW5kIHVzZXIgdG8gYmlzZWN0LCBhbmQgdmVyeSBnb29kCitwb2ludHMgd2VyZSBtYWRlIHRvIHN1cHBvcnQgdGhlIHBvaW50IG9mIHZpZXcgdGhhdCBpdCBpcyBvay4KKworRm9yIGV4YW1wbGUgRGF2aWQgTWlsbGVyIHdyb3RlIDw8Nj4+OgorCitfX19fX19fX19fX19fCitXaGF0IHBlb3BsZSBkb24ndCBnZXQgaXMgdGhhdCB0aGlzIGlzIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSAiZW5kIG5vZGUKK3ByaW5jaXBsZSIgYXBwbGllcy4gV2hlbiB5b3UgaGF2ZSBsaW1pdGVkIHJlc291cmNlcyAoaGVyZTogZGV2ZWxvcGVycykKK3lvdSBkb24ndCBwdXNoIHRoZSBidWxrIG9mIHRoZSBidXJkZW4gdXBvbiB0aGVtLiBJbnN0ZWFkIHlvdSBwdXNoCit0aGluZ3Mgb3V0IHRvIHRoZSByZXNvdXJjZSB5b3UgaGF2ZSBhIGxvdCBvZiwgdGhlIGVuZCBub2RlcyAoaGVyZToKK3VzZXJzKSwgc28gdGhhdCB0aGUgc2l0dWF0aW9uIGFjdHVhbGx5IHNjYWxlcy4KK19fX19fX19fX19fX18KKworVGhpcyBtZWFucyB0aGF0IGl0IGlzIG9mdGVuICJjaGVhcGVyIiBpZiBRQSBwZW9wbGUgb3IgZW5kIHVzZXJzIGNhbiBkbworaXQuCisKK1doYXQgaXMgaW50ZXJlc3RpbmcgdG9vIGlzIHRoYXQgZW5kIHVzZXJzIHRoYXQgYXJlIHJlcG9ydGluZyBidWdzIChvcgorUUEgcGVvcGxlIHRoYXQgcmVwcm9kdWNlZCBhIGJ1ZykgaGF2ZSBhY2Nlc3MgdG8gdGhlIGVudmlyb25tZW50IHdoZXJlCit0aGUgYnVnIGhhcHBlbnMuIFNvIHRoZXkgY2FuIG9mdGVuIG1vcmUgZWFzaWx5IHJlcHJvZHVjZSBhCityZWdyZXNzaW9uLiBBbmQgaWYgdGhleSBjYW4gYmlzZWN0LCB0aGVuIG1vcmUgaW5mb3JtYXRpb24gd2lsbCBiZQorZXh0cmFjdGVkIGZyb20gdGhlIGVudmlyb25tZW50IHdoZXJlIHRoZSBidWcgaGFwcGVucywgd2hpY2ggbWVhbnMgdGhhdAoraXQgd2lsbCBiZSBlYXNpZXIgdG8gdW5kZXJzdGFuZCBhbmQgdGhlbiBmaXggdGhlIGJ1Zy4KKworRm9yIG9wZW4gc291cmNlIHByb2plY3RzIGl0IGNhbiBiZSBhIGdvb2Qgd2F5IHRvIGdldCBtb3JlIHVzZWZ1bAorY29udHJpYnV0aW9ucyBmcm9tIGVuZCB1c2VycywgYW5kIHRvIGludHJvZHVjZSB0aGVtIHRvIFFBIGFuZAorZGV2ZWxvcG1lbnQgYWN0aXZpdGllcy4KKworVXNpbmcgY29tcGxleCBzY3JpcHRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSW4gc29tZSBjYXNlcyBsaWtlIGZvciBrZXJuZWwgZGV2ZWxvcG1lbnQgaXQgY2FuIGJlIHdvcnRoIGRldmVsb3BpbmcKK2NvbXBsZXggc2NyaXB0cyB0byBiZSBhYmxlIHRvIGZ1bGx5IGF1dG9tYXRlIGJpc2VjdGluZy4KKworSGVyZSBpcyB3aGF0IEluZ28gTW9sbmFyIHNheXMgYWJvdXQgdGhhdCA8PDc+PjoKKworX19fX19fX19fX19fXworaSBoYXZlIGEgZnVsbHkgYXV0b21hdGVkIGJvb3R1cC1oYW5nIGJpc2VjdGlvbiBzY3JpcHQuIEl0IGlzIGJhc2VkIG9uCisiZ2l0LWJpc2VjdCBydW4iLiBJIHJ1biB0aGUgc2NyaXB0LCBpdCBidWlsZHMgYW5kIGJvb3RzIGtlcm5lbHMgZnVsbHkKK2F1dG9tYXRpY2FsbHksIGFuZCB3aGVuIHRoZSBib290dXAgZmFpbHMgKHRoZSBzY3JpcHQgbm90aWNlcyB0aGF0IHZpYQordGhlIHNlcmlhbCBsb2csIHdoaWNoIGl0IGNvbnRpbnVvdXNseSB3YXRjaGVzIC0gb3IgdmlhIGEgdGltZW91dCwgaWYKK3RoZSBzeXN0ZW0gZG9lcyBub3QgY29tZSB1cCB3aXRoaW4gMTAgbWludXRlcyBpdCdzIGEgImJhZCIga2VybmVsKSwKK3RoZSBzY3JpcHQgcmFpc2VzIG15IGF0dGVudGlvbiB2aWEgYSBiZWVwIGFuZCBpIHBvd2VyIGN5Y2xlIHRoZSB0ZXN0Citib3guICh5ZWFoLCBpIHNob3VsZCBtYWtlIHVzZSBvZiBhIG1hbmFnZWQgcG93ZXIgb3V0bGV0IHRvIDEwMCUKK2F1dG9tYXRlIGl0KQorX19fX19fX19fX19fXworCitDb21iaW5pbmcgdGVzdCBzdWl0ZXMsIGdpdCBiaXNlY3QgYW5kIG90aGVyIHN5c3RlbXMgdG9nZXRoZXIKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitXZSBoYXZlIHNlZW4gdGhhdCB0ZXN0IHN1aXRlcyBhbmQgZ2l0IGJpc2VjdCBhcmUgdmVyeSBwb3dlcmZ1bCB3aGVuCit1c2VkIHRvZ2V0aGVyLiBJdCBjYW4gYmUgZXZlbiBtb3JlIHBvd2VyZnVsIGlmIHlvdSBjYW4gY29tYmluZSB0aGVtCit3aXRoIG90aGVyIHN5c3RlbXMuCisKK0ZvciBleGFtcGxlIHNvbWUgdGVzdCBzdWl0ZXMgY291bGQgYmUgcnVuIGF1dG9tYXRpY2FsbHkgYXQgbmlnaHQgd2l0aAorc29tZSB1bnVzdWFsIChvciBldmVuIHJhbmRvbSkgY29uZmlndXJhdGlvbnMuIEFuZCBpZiBhIHJlZ3Jlc3Npb24gaXMKK2ZvdW5kIGJ5IGEgdGVzdCBzdWl0ZSwgdGhlbiAiZ2l0IGJpc2VjdCIgY2FuIGJlIGF1dG9tYXRpY2FsbHkKK2xhdW5jaGVkLCBhbmQgaXRzIHJlc3VsdCBjYW4gYmUgZW1haWxlZCB0byB0aGUgYXV0aG9yIG9mIHRoZSBmaXJzdCBiYWQKK2NvbW1pdCBmb3VuZCBieSAiZ2l0IGJpc2VjdCIsIGFuZCBwZXJoYXBzIG90aGVyIHBlb3BsZSB0b28uIEFuZCBhIG5ldworZW50cnkgaW4gdGhlIGJ1ZyB0cmFja2luZyBzeXN0ZW0gY291bGQgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHRvby4KKworCitUaGUgZnV0dXJlIG9mIGJpc2VjdGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworImdpdCByZXBsYWNlIgorfn5+fn5+fn5+fn5+fgorCitXZSBzYXcgZWFybGllciB0aGF0ICJnaXQgYmlzZWN0IHNraXAiIGlzIG5vdyB1c2luZyBhIFBSTkcgdG8gdHJ5IHRvCithdm9pZCBhcmVhcyBpbiB0aGUgY29tbWl0IGdyYXBoIHdoZXJlIGNvbW1pdHMgYXJlIHVudGVzdGFibGUuIFRoZQorcHJvYmxlbSBpcyB0aGF0IHNvbWV0aW1lcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCB3aWxsIGJlIGluIGFuCit1bnRlc3RhYmxlIGFyZWEuCisKK1RvIHNpbXBsaWZ5IHRoZSBkaXNjdXNzaW9uIHdlIHdpbGwgc3VwcG9zZSB0aGF0IHRoZSB1bnRlc3RhYmxlIGFyZWEgaXMKK2Egc2ltcGxlIHN0cmluZyBvZiBjb21taXRzIGFuZCB0aGF0IGl0IHdhcyBjcmVhdGVkIGJ5IGEgYnJlYWthZ2UKK2ludHJvZHVjZWQgYnkgb25lIGNvbW1pdCAobGV0J3MgY2FsbCBpdCBCQkMgZm9yIGJpc2VjdCBicmVha2luZworY29tbWl0KSBhbmQgbGF0ZXIgZml4ZWQgYnkgYW5vdGhlciBvbmUgKGxldCdzIGNhbGwgaXQgQkZDIGZvciBiaXNlY3QKK2ZpeGluZyBjb21taXQpLgorCitGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorLi4uLVktQkJDLVgxLVgyLVgzLVg0LVg1LVg2LUJGQy1aLS4uLgorLS0tLS0tLS0tLS0tLQorCit3aGVyZSB3ZSBrbm93IHRoYXQgWSBpcyBnb29kIGFuZCBCRkMgaXMgYmFkLCBhbmQgd2hlcmUgQkJDIGFuZCBYMSB0bworWDYgYXJlIHVudGVzdGFibGUuCisKK0luIHRoaXMgY2FzZSBpZiB5b3UgYXJlIGJpc2VjdGluZyBtYW51YWxseSwgd2hhdCB5b3UgY2FuIGRvIGlzIGNyZWF0ZQorYSBzcGVjaWFsIGJyYW5jaCB0aGF0IHN0YXJ0cyBqdXN0IGJlZm9yZSB0aGUgQkJDLiBUaGUgZmlyc3QgY29tbWl0IGluCit0aGlzIGJyYW5jaCBzaG91bGQgYmUgdGhlIEJCQyB3aXRoIHRoZSBCRkMgc3F1YXNoZWQgaW50byBpdC4gQW5kIHRoZQorb3RoZXIgY29tbWl0cyBpbiB0aGUgYnJhbmNoIHNob3VsZCBiZSB0aGUgY29tbWl0cyBiZXR3ZWVuIEJCQyBhbmQgQkZDCityZWJhc2VkIG9uIHRoZSBmaXJzdCBjb21taXQgb2YgdGhlIGJyYW5jaCBhbmQgdGhlbiB0aGUgY29tbWl0IGFmdGVyCitCRkMgYWxzbyByZWJhc2VkIG9uLgorCitGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorICAgICAgKEJCQytCRkMpLVgxJy1YMictWDMnLVg0Jy1YNSctWDYnLVonCisgICAgIC8KKy4uLi1ZLUJCQy1YMS1YMi1YMy1YNC1YNS1YNi1CRkMtWi0uLi4KKy0tLS0tLS0tLS0tLS0KKword2hlcmUgY29tbWl0cyBxdW90ZWQgd2l0aCAnIGhhdmUgYmVlbiByZWJhc2VkLgorCitZb3UgY2FuIGVhc2lseSBjcmVhdGUgc3VjaCBhIGJyYW5jaCB3aXRoIEdpdCB1c2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuCisKK0ZvciBleGFtcGxlIHVzaW5nOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCByZWJhc2UgLWkgWSBaCistLS0tLS0tLS0tLS0tCisKK2FuZCB0aGVuIG1vdmluZyBCRkMgYWZ0ZXIgQkJDIGFuZCBzcXVhc2hpbmcgaXQuCisKK0FmdGVyIHRoYXQgeW91IGNhbiBzdGFydCBiaXNlY3RpbmcgYXMgdXN1YWwgaW4gdGhlIG5ldyBicmFuY2ggYW5kIHlvdQorc2hvdWxkIGV2ZW50dWFsbHkgZmluZCB0aGUgZmlyc3QgYmFkIGNvbW1pdC4KKworRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBaJyBZCistLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBhcmUgdXNpbmcgImdpdCBiaXNlY3QgcnVuIiwgeW91IGNhbiB1c2UgdGhlIHNhbWUgbWFudWFsIGZpeCB1cAorYXMgYWJvdmUsIGFuZCB0aGVuIHN0YXJ0IGFub3RoZXIgImdpdCBiaXNlY3QgcnVuIiBpbiB0aGUgc3BlY2lhbAorYnJhbmNoLiBPciBhcyB0aGUgImdpdCBiaXNlY3QiIG1hbiBwYWdlIHNheXMsIHRoZSBzY3JpcHQgcGFzc2VkIHRvCisiZ2l0IGJpc2VjdCBydW4iIGNhbiBhcHBseSBhIHBhdGNoIGJlZm9yZSBpdCBjb21waWxlcyBhbmQgdGVzdCB0aGUKK3NvZnR3YXJlIDw8OD4+LiBUaGUgcGF0Y2ggc2hvdWxkIHR1cm4gYSBjdXJyZW50IHVudGVzdGFibGUgY29tbWl0cworaW50byBhIHRlc3RhYmxlIG9uZS4gU28gdGhlIHRlc3Rpbmcgd2lsbCByZXN1bHQgaW4gImdvb2QiIG9yICJiYWQiIGFuZAorImdpdCBiaXNlY3QiIHdpbGwgYmUgYWJsZSB0byBmaW5kIHRoZSBmaXJzdCBiYWQgY29tbWl0LiBBbmQgdGhlIHNjcmlwdAorc2hvdWxkIG5vdCBmb3JnZXQgdG8gcmVtb3ZlIHRoZSBwYXRjaCBvbmNlIHRoZSB0ZXN0aW5nIGlzIGRvbmUgYmVmb3JlCitleGl0aW5nIGZyb20gdGhlIHNjcmlwdC4KKworKE5vdGUgdGhhdCBpbnN0ZWFkIG9mIGEgcGF0Y2ggeW91IGNhbiB1c2UgImdpdCBjaGVycnktcGljayBCRkMiIHRvCithcHBseSB0aGUgZml4LCBhbmQgaW4gdGhpcyBjYXNlIHlvdSBzaG91bGQgdXNlICJnaXQgcmVzZXQgLS1oYXJkCitIRUFEXiIgdG8gcmV2ZXJ0IHRoZSBjaGVycnktcGljayBhZnRlciB0ZXN0aW5nIGFuZCBiZWZvcmUgcmV0dXJuaW5nCitmcm9tIHRoZSBzY3JpcHQuKQorCitCdXQgdGhlIGFib3ZlIHdheXMgdG8gd29yayBhcm91bmQgdW50ZXN0YWJsZSBhcmVhcyBhcmUgYSBsaXR0bGUgYml0CitjbHVua3kuIFVzaW5nIHNwZWNpYWwgYnJhbmNoZXMgaXMgbmljZSBiZWNhdXNlIHRoZXNlIGJyYW5jaGVzIGNhbiBiZQorc2hhcmVkIGJ5IGRldmVsb3BlcnMgbGlrZSB1c3VhbCBicmFuY2hlcywgYnV0IHRoZSByaXNrIGlzIHRoYXQgcGVvcGxlCit3aWxsIGdldCBtYW55IHN1Y2ggYnJhbmNoZXMuIEFuZCBpdCBkaXNydXB0cyB0aGUgbm9ybWFsICJnaXQgYmlzZWN0Igord29yay1mbG93LiBTbywgaWYgeW91IHdhbnQgdG8gdXNlICJnaXQgYmlzZWN0IHJ1biIgY29tcGxldGVseQorYXV0b21hdGljYWxseSwgeW91IGhhdmUgdG8gYWRkIHNwZWNpYWwgY29kZSBpbiB5b3VyIHNjcmlwdCB0byByZXN0YXJ0CitiaXNlY3Rpb24gaW4gdGhlIHNwZWNpYWwgYnJhbmNoZXMuCisKK0FueXdheSBvbmUgY2FuIG5vdGljZSBpbiB0aGUgYWJvdmUgc3BlY2lhbCBicmFuY2ggZXhhbXBsZSB0aGF0IHRoZSBaJworYW5kIFogY29tbWl0cyBzaG91bGQgcG9pbnQgdG8gdGhlIHNhbWUgc291cmNlIGNvZGUgc3RhdGUgKHRoZSBzYW1lCisidHJlZSIgaW4gZ2l0IHBhcmxhbmNlKS4gVGhhdCdzIGJlY2F1c2UgWicgcmVzdWx0IGZyb20gYXBwbHlpbmcgdGhlCitzYW1lIGNoYW5nZXMgYXMgWiBqdXN0IGluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG9yZGVyLgorCitTbyBpZiB3ZSBjb3VsZCBqdXN0ICJyZXBsYWNlIiBaIGJ5IFonIHdoZW4gd2UgYmlzZWN0LCB0aGVuIHdlIHdvdWxkCitub3QgbmVlZCB0byBhZGQgYW55dGhpbmcgdG8gYSBzY3JpcHQuIEl0IHdvdWxkIGp1c3Qgd29yayBmb3IgYW55b25lIGluCit0aGUgcHJvamVjdCBzaGFyaW5nIHRoZSBzcGVjaWFsIGJyYW5jaGVzIGFuZCB0aGUgcmVwbGFjZW1lbnRzLgorCitXaXRoIHRoZSBleGFtcGxlIGFib3ZlIHRoYXQgd291bGQgZ2l2ZToKKworLS0tLS0tLS0tLS0tLQorICAgICAgKEJCQytCRkMpLVgxJy1YMictWDMnLVg0Jy1YNSctWDYnLVonLS4uLgorICAgICAvCisuLi4tWS1CQkMtWDEtWDItWDMtWDQtWDUtWDYtQkZDLVoKKy0tLS0tLS0tLS0tLS0KKworVGhhdCdzIHdoeSB0aGUgImdpdCByZXBsYWNlIiBjb21tYW5kIHdhcyBjcmVhdGVkLiBUZWNobmljYWxseSBpdAorc3RvcmVzIHJlcGxhY2VtZW50cyAicmVmcyIgaW4gdGhlICJyZWZzL3JlcGxhY2UvIiBoaWVyYXJjaHkuIFRoZXNlCisicmVmcyIgYXJlIGxpa2UgYnJhbmNoZXMgKHRoYXQgYXJlIHN0b3JlZCBpbiAicmVmcy9oZWFkcy8iKSBvciB0YWdzCisodGhhdCBhcmUgc3RvcmVkIGluICJyZWZzL3RhZ3MiKSwgYW5kIHRoYXQgbWVhbnMgdGhhdCB0aGV5IGNhbgorYXV0b21hdGljYWxseSBiZSBzaGFyZWQgbGlrZSBicmFuY2hlcyBvciB0YWdzIGFtb25nIGRldmVsb3BlcnMuCisKKyJnaXQgcmVwbGFjZSIgaXMgYSB2ZXJ5IHBvd2VyZnVsIG1lY2hhbmlzbS4gSXQgY2FuIGJlIHVzZWQgdG8gZml4Citjb21taXRzIGluIGFscmVhZHkgcmVsZWFzZWQgaGlzdG9yeSwgZm9yIGV4YW1wbGUgdG8gY2hhbmdlIHRoZSBjb21taXQKK21lc3NhZ2Ugb3IgdGhlIGF1dGhvci4gQW5kIGl0IGNhbiBhbHNvIGJlIHVzZWQgaW5zdGVhZCBvZiBnaXQgImdyYWZ0cyIKK3RvIGxpbmsgYSByZXBvc2l0b3J5IHdpdGggYW5vdGhlciBvbGQgcmVwb3NpdG9yeS4KKworSW4gZmFjdCBpdCdzIHRoaXMgbGFzdCBmZWF0dXJlIHRoYXQgInNvbGQiIGl0IHRvIHRoZSBHaXQgY29tbXVuaXR5LCBzbworaXQgaXMgbm93IGluIHRoZSAibWFzdGVyIiBicmFuY2ggb2YgR2l0J3MgR2l0IHJlcG9zaXRvcnkgYW5kIGl0IHNob3VsZAorYmUgcmVsZWFzZWQgaW4gR2l0IDEuNi41IGluIE9jdG9iZXIgb3IgTm92ZW1iZXIgMjAwOS4KKworT25lIHByb2JsZW0gd2l0aCAiZ2l0IHJlcGxhY2UiIGlzIHRoYXQgY3VycmVudGx5IGl0IHN0b3JlcyBhbGwgdGhlCityZXBsYWNlbWVudHMgcmVmcyBpbiAicmVmcy9yZXBsYWNlLyIsIGJ1dCBpdCB3b3VsZCBiZSBwZXJoYXBzIGJldHRlcgoraWYgdGhlIHJlcGxhY2VtZW50IHJlZnMgdGhhdCBhcmUgdXNlZnVsIG9ubHkgZm9yIGJpc2VjdGluZyB3b3VsZCBiZSBpbgorInJlZnMvcmVwbGFjZS9iaXNlY3QvIi4gVGhpcyB3YXkgdGhlIHJlcGxhY2VtZW50IHJlZnMgY291bGQgYmUgdXNlZAorb25seSBmb3IgYmlzZWN0aW5nLCB3aGlsZSBvdGhlciByZWZzIGRpcmVjdGx5IGluICJyZWZzL3JlcGxhY2UvIiB3b3VsZAorYmUgdXNlZCBuZWFybHkgYWxsIHRoZSB0aW1lLgorCitCaXNlY3Rpbmcgc3BvcmFkaWMgYnVncworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQW5vdGhlciBwb3NzaWJsZSBpbXByb3ZlbWVudCB0byAiZ2l0IGJpc2VjdCIgd291bGQgYmUgdG8gb3B0aW9uYWxseQorYWRkIHNvbWUgcmVkdW5kYW5jeSB0byB0aGUgdGVzdHMgcGVyZm9ybWVkIHNvIHRoYXQgaXQgd291bGQgYmUgbW9yZQorcmVsaWFibGUgd2hlbiB0cmFja2luZyBzcG9yYWRpYyBidWdzLgorCitUaGlzIGhhcyBiZWVuIHJlcXVlc3RlZCBieSBzb21lIGtlcm5lbCBkZXZlbG9wZXJzIGJlY2F1c2Ugc29tZSBidWdzCitjYWxsZWQgc3BvcmFkaWMgYnVncyBkbyBub3QgYXBwZWFyIGluIGFsbCB0aGUga2VybmVsIGJ1aWxkcyBiZWNhdXNlCit0aGV5IGFyZSB2ZXJ5IGRlcGVuZGVudCBvbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorCitUaGUgaWRlYSBpcyB0aGF0IGV2ZXJ5IDMgdGVzdCBmb3IgZXhhbXBsZSwgImdpdCBiaXNlY3QiIGNvdWxkIGFzayB0aGUKK3VzZXIgdG8gdGVzdCBhIGNvbW1pdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZm91bmQgdG8gYmUgImdvb2QiIG9yCisiYmFkIiAoYmVjYXVzZSBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzIG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzIGhhcyBiZWVuCitmb3VuZCB0byBiZSAiZ29vZCIgb3IgImJhZCIgcmVzcGVjdGl2ZWx5KS4gSWYgaXQgaGFwcGVucyB0aGF0IGEgY29tbWl0CitoYXMgYmVlbiBwcmV2aW91c2x5IGluY29ycmVjdGx5IGNsYXNzaWZpZWQgdGhlbiB0aGUgYmlzZWN0aW9uIGNhbiBiZQorYWJvcnRlZCBlYXJseSwgaG9wZWZ1bGx5IGJlZm9yZSB0b28gbWFueSBtaXN0YWtlcyBoYXZlIGJlZW4gbWFkZS4gVGhlbgordGhlIHVzZXIgd2lsbCBoYXZlIHRvIGxvb2sgYXQgd2hhdCBoYXBwZW5lZCBhbmQgdGhlbiByZXN0YXJ0IHRoZQorYmlzZWN0aW9uIHVzaW5nIGEgZml4ZWQgYmlzZWN0IGxvZy4KKworVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3QgY2FsbGVkIEJCQ2hvcCBjcmVhdGVkIGJ5IEVhbGR3dWxmIFd1ZmZpbmdhCitvbiBHaXRodWIgdGhhdCBkb2VzIHNvbWV0aGluZyBsaWtlIHRoYXQgdXNpbmcgQmF5ZXNpYW4gU2VhcmNoIFRoZW9yeQorPDw5Pj46CisKK19fX19fX19fX19fX18KK0JCQ2hvcCBpcyBsaWtlICdnaXQgYmlzZWN0JyAob3IgZXF1aXZhbGVudCksIGJ1dCB3b3JrcyB3aGVuIHlvdXIgYnVnCitpcyBpbnRlcm1pdHRlbnQuIFRoYXQgaXMsIGl0IHdvcmtzIGluIHRoZSBwcmVzZW5jZSBvZiBmYWxzZSBuZWdhdGl2ZXMKKyh3aGVuIGEgdmVyc2lvbiBoYXBwZW5zIHRvIHdvcmsgdGhpcyB0aW1lIGV2ZW4gdGhvdWdoIGl0IGNvbnRhaW5zIHRoZQorYnVnKS4gSXQgYXNzdW1lcyB0aGF0IHRoZXJlIGFyZSBubyBmYWxzZSBwb3NpdGl2ZXMgKGluIHByaW5jaXBsZSwgdGhlCitzYW1lIGFwcHJvYWNoIHdvdWxkIHdvcmssIGJ1dCBhZGRpbmcgaXQgbWF5IGJlIG5vbi10cml2aWFsKS4KK19fX19fX19fX19fX18KKworQnV0IEJCQ2hvcCBpcyBpbmRlcGVuZGVudCBvZiBhbnkgVkNTIGFuZCBpdCB3b3VsZCBiZSBlYXNpZXIgZm9yIEdpdAordXNlcnMgdG8gaGF2ZSBzb21ldGhpbmcgaW50ZWdyYXRlZCBpbiBHaXQuCisKK0NvbmNsdXNpb24KKy0tLS0tLS0tLS0KKworV2UgaGF2ZSBzZWVuIHRoYXQgcmVncmVzc2lvbnMgYXJlIGFuIGltcG9ydGFudCBwcm9ibGVtLCBhbmQgdGhhdCAiZ2l0CitiaXNlY3QiIGhhcyBuaWNlIGZlYXR1cmVzIHRoYXQgY29tcGxlbWVudCB2ZXJ5IHdlbGwgcHJhY3RpY2VzIGFuZAorb3RoZXIgdG9vbHMsIGVzcGVjaWFsbHkgdGVzdCBzdWl0ZXMsIHRoYXQgYXJlIGdlbmVyYWxseSB1c2VkIHRvIGZpZ2h0CityZWdyZXNzaW9ucy4gQnV0IGl0IG1pZ2h0IGJlIG5lZWRlZCB0byBjaGFuZ2Ugc29tZSB3b3JrLWZsb3dzIGFuZAorKGJhZCkgaGFiaXRzIHRvIGdldCB0aGUgbW9zdCBvdXQgb2YgaXQuCisKK1NvbWUgaW1wcm92ZW1lbnRzIHRvIHRoZSBhbGdvcml0aG1zIGluc2lkZSAiZ2l0IGJpc2VjdCIgYXJlIHBvc3NpYmxlCithbmQgc29tZSBuZXcgZmVhdHVyZXMgY291bGQgaGVscCBpbiBzb21lIGNhc2VzLCBidXQgb3ZlcmFsbCAiZ2l0CitiaXNlY3QiIHdvcmtzIGFscmVhZHkgdmVyeSB3ZWxsLCBpcyB1c2VkIGEgbG90LCBhbmQgaXMgYWxyZWFkeSB2ZXJ5Cit1c2VmdWwuIFRvIGJhY2sgdXAgdGhhdCBsYXN0IGNsYWltLCBsZXQncyBnaXZlIHRoZSBmaW5hbCB3b3JkIHRvIEluZ28KK01vbG5hciB3aGVuIGhlIHdhcyBhc2tlZCBieSB0aGUgYXV0aG9yIGhvdyBtdWNoIHRpbWUgZG9lcyBoZSB0aGluaworImdpdCBiaXNlY3QiIHNhdmVzIGhpbSB3aGVuIGhlIHVzZXMgaXQ6CisKK19fX19fX19fX19fX18KK2EgX2xvdF8uCisKK0Fib3V0IHRlbiB5ZWFycyBhZ28gZGlkIGkgZG8gbXkgZmlyc3QgJ2Jpc2VjdGlvbicgb2YgYSBMaW51eCBwYXRjaAorcXVldWUuIFRoYXQgd2FzIHByaW9yIHRoZSBHaXQgKGFuZCBldmVuIHByaW9yIHRoZSBCaXRLZWVwZXIpIGRheXMuIEkKK2xpdGVyYWxseSBkYXlzIHNwZW50IHNvcnRpbmcgb3V0IHBhdGNoZXMsIGNyZWF0aW5nIHdoYXQgaW4gZXNzZW5jZQord2VyZSBzdGFuZGFsb25lIGNvbW1pdHMgdGhhdCBpIGd1ZXNzZWQgdG8gYmUgcmVsYXRlZCB0byB0aGF0IGJ1Zy4KKworSXQgd2FzIGEgdG9vbCBvZiBhYnNvbHV0ZSBsYXN0IHJlc29ydC4gSSdkIHJhdGhlciBzcGVuZCBkYXlzIGxvb2tpbmcKK2F0IHByaW50ayBvdXRwdXQgdGhhbiBkbyBhIG1hbnVhbCAncGF0Y2ggYmlzZWN0aW9uJy4KKworV2l0aCBHaXQgYmlzZWN0IGl0J3MgYSBicmVlemU6IGluIHRoZSBiZXN0IGNhc2UgaSBjYW4gZ2V0IGEgfjE1IHN0ZXAKK2tlcm5lbCBiaXNlY3Rpb24gZG9uZSBpbiAyMC0zMCBtaW51dGVzLCBpbiBhbiBhdXRvbWF0ZWQgd2F5LiBFdmVuIHdpdGgKK21hbnVhbCBoZWxwIG9yIHdoZW4gYmlzZWN0aW5nIG11bHRpcGxlLCBvdmVybGFwcGluZyBidWdzLCBpdCdzIHJhcmVseQorbW9yZSB0aGFuIGFuIGhvdXIuCisKK0luIGZhY3QgaXQncyBpbnZhbHVhYmxlIGJlY2F1c2UgdGhlcmUgYXJlIGJ1Z3MgaSB3b3VsZCBuZXZlciBldmVuCitfdHJ5XyB0byBkZWJ1ZyBpZiBpdCB3YXNuJ3QgZm9yIGdpdCBiaXNlY3QuIEluIHRoZSBwYXN0IHRoZXJlIHdlcmUgYnVnCitwYXR0ZXJucyB0aGF0IHdlcmUgaW1tZWRpYXRlbHkgaG9wZWxlc3MgZm9yIG1lIHRvIGRlYnVnIC0gYXQgYmVzdCBpCitjb3VsZCBzZW5kIHRoZSBjcmFzaC9idWcgc2lnbmF0dXJlIHRvIGxrbWwgYW5kIGhvcGUgdGhhdCBzb21lb25lIGVsc2UKK2NhbiB0aGluayBvZiBzb21ldGhpbmcuCisKK0FuZCBldmVuIGlmIGEgYmlzZWN0aW9uIGZhaWxzIHRvZGF5IGl0IHRlbGxzIHVzIHNvbWV0aGluZyB2YWx1YWJsZQorYWJvdXQgdGhlIGJ1ZzogdGhhdCBpdCdzIG5vbi1kZXRlcm1pbmlzdGljIC0gdGltaW5nIG9yIGtlcm5lbCBpbWFnZQorbGF5b3V0IGRlcGVuZGVudC4KKworU28gZ2l0IGJpc2VjdCBpcyB1bmNvbmRpdGlvbmFsIGdvb2RuZXNzIC0gYW5kIGZlZWwgZnJlZSB0byBxdW90ZSB0aGF0Cis7LSkKK19fX19fX19fX19fX18KKworQWNrbm93bGVkZ21lbnRzCistLS0tLS0tLS0tLS0tLS0KKworTWFueSB0aGFua3MgdG8gSnVuaW8gSGFtYW5vIGZvciBoaXMgaGVscCBpbiByZXZpZXdpbmcgdGhpcyBwYXBlciwgZm9yCityZXZpZXdpbmcgdGhlIHBhdGNoZXMgSSBzZW50IHRvIHRoZSBHaXQgbWFpbGluZyBsaXN0LCBmb3IgZGlzY3Vzc2luZworc29tZSBpZGVhcyBhbmQgaGVscGluZyBtZSBpbXByb3ZlIHRoZW0sIGZvciBpbXByb3ZpbmcgImdpdCBiaXNlY3QiIGEKK2xvdCBhbmQgZm9yIGhpcyBhd2Vzb21lIHdvcmsgaW4gbWFpbnRhaW5pbmcgYW5kIGRldmVsb3BpbmcgR2l0LgorCitNYW55IHRoYW5rcyB0byBJbmdvIE1vbG5hciBmb3IgZ2l2aW5nIG1lIHZlcnkgdXNlZnVsIGluZm9ybWF0aW9uIHRoYXQKK2FwcGVhcnMgaW4gdGhpcyBwYXBlciwgZm9yIGNvbW1lbnRpbmcgb24gdGhpcyBwYXBlciwgZm9yIGhpcworc3VnZ2VzdGlvbnMgdG8gaW1wcm92ZSAiZ2l0IGJpc2VjdCIgYW5kIGZvciBldmFuZ2VsaXppbmcgImdpdCBiaXNlY3QiCitvbiB0aGUgbGludXgga2VybmVsIG1haWxpbmcgbGlzdHMuCisKK01hbnkgdGhhbmtzIHRvIExpbnVzIFRvcnZhbGRzIGZvciBpbnZlbnRpbmcsIGRldmVsb3BpbmcgYW5kCitldmFuZ2VsaXppbmcgImdpdCBiaXNlY3QiLCBHaXQgYW5kIExpbnV4LgorCitNYW55IHRoYW5rcyB0byB0aGUgbWFueSBvdGhlciBncmVhdCBwZW9wbGUgd2hvIGhlbHBlZCBvbmUgd2F5IG9yCithbm90aGVyIHdoZW4gSSB3b3JrZWQgb24gR2l0LCBlc3BlY2lhbGx5IHRvIEFuZHJlYXMgRXJpY3Nzb24sIEpvaGFubmVzCitTY2hpbmRlbGluLCBILiBQZXRlciBBbnZpbiwgRGFuaWVsIEJhcmthbG93LCBCaWxsIExlYXIsIEpvaG4gSGF3bGV5LAorU2hhd24gTy4gUGllcmNlLCBKZWZmIEtpbmcsIFNhbSBWaWxhaW4sIEpvbiBTZXltb3VyLgorCitNYW55IHRoYW5rcyB0byB0aGUgTGludXgtS29uZ3Jlc3MgcHJvZ3JhbSBjb21taXR0ZWUgZm9yIGNob29zaW5nIHRoZQorYXV0aG9yIHRvIGdpdmVuIGEgdGFsayBhbmQgZm9yIHB1Ymxpc2hpbmcgdGhpcyBwYXBlci4KKworUmVmZXJlbmNlcworLS0tLS0tLS0tLQorCistIFtbWzFdXV0gaHR0cHM6Ly93d3cubmlzdC5nb3Yvc2l0ZXMvZGVmYXVsdC9maWxlcy9kb2N1bWVudHMvZGlyZWN0b3IvcGxhbm5pbmcvcmVwb3J0MDItMy5wZGZbJ1RoZSBFY29ub21pYyBJbXBhY3RzIG9mIEluYWRlcXVhdGUgSW5mcmF0cnVjdHVyZSBmb3IgU29mdHdhcmUgVGVzdGluZycuICBOaXN0IFBsYW5uaW5nIFJlcG9ydCAwMi0zXSwgc2VlIEV4ZWN1dGl2ZSBTdW1tYXJ5IGFuZCBDaGFwdGVyIDguCistIFtbWzJdXV0gaHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2huZXR3b3JrL2phdmEvY29kZWNvbnZ0b2MtMTM2MDU3Lmh0bWxbJ0NvZGUgQ29udmVudGlvbnMgZm9yIHRoZSBKYXZhIFByb2dyYW1taW5nIExhbmd1YWdlJy4gU3VuIE1pY3Jvc3lzdGVtcy5dCistIFtbWzNdXV0gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU29mdHdhcmVfbWFpbnRlbmFuY2VbJ1NvZnR3YXJlIG1haW50ZW5hbmNlJy4gV2lraXBlZGlhLl0KKy0gW1tbNF1dXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvN3ZwczV4c2J3cC5mc2ZfLV9AYXNzaWduZWQtYnktZGhjcC5jb3gubmV0L1tKdW5pbyBDIEhhbWFuby4gJ0F1dG9tYXRlZCBiaXNlY3Qgc3VjY2VzcyBzdG9yeScuXQorLSBbW1s1XV1dIGh0dHBzOi8vbHduLm5ldC9BcnRpY2xlcy8zMTcxNTQvW0NocmlzdGlhbiBDb3VkZXIuICdGdWxseSBhdXRvbWF0ZWQgYmlzZWN0aW5nIHdpdGggImdpdCBiaXNlY3QgcnVuIicuIExXTi5uZXQuXQorLSBbW1s2XV1dIGh0dHBzOi8vbHduLm5ldC9BcnRpY2xlcy8yNzc4NzIvW0pvbmF0aGFuIENvcmJldC4gJ0Jpc2VjdGlvbiBkaXZpZGVzIHVzZXJzIGFuZCBkZXZlbG9wZXJzJy4gTFdOLm5ldC5dCistIFtbWzddXV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGttbC8yMDA3MTIwNzExMzczNC5HQTE0NTk4QGVsdGUuaHUvW0luZ28gTW9sbmFyLiAnUmU6IEJVRyAyLjYuMjMtcmMzIGNhbid0IHNlZSBzZCBwYXJ0aXRpb25zIG9uIEFscGhhJy4gTGludXgta2VybmVsIG1haWxpbmcgbGlzdC5dCistIFtbWzhdXV0gaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzL2dpdC1iaXNlY3QuaHRtbFtKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0LiAnZ2l0LWJpc2VjdCgxKSBNYW51YWwgUGFnZScuIExpbnV4IEtlcm5lbCBBcmNoaXZlcy5dCistIFtbWzldXV0gaHR0cHM6Ly9naXRodWIuY29tL0VhbGR3dWxmL2JiY2hvcFtFYWxkd3VsZi4gJ2JiY2hvcCcuIEdpdEh1Yi5dCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTg2YzVhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dApAQCAtMCwwICsxLDQ5OSBAQAorZ2l0LWJpc2VjdCgxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtYmlzZWN0IC0gVXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBiaXNlY3QnIDxzdWJjb21tYW5kPiA8b3B0aW9ucz4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGUgY29tbWFuZCB0YWtlcyB2YXJpb3VzIHN1YmNvbW1hbmRzLCBhbmQgZGlmZmVyZW50IG9wdGlvbnMgZGVwZW5kaW5nCitvbiB0aGUgc3ViY29tbWFuZDoKKworIGdpdCBiaXNlY3Qgc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtPiAtLXRlcm0te25ldyxiYWR9PTx0ZXJtPl0KKwkJICBbLS1uby1jaGVja291dF0gWzxiYWQ+IFs8Z29vZD4uLi5dXSBbLS1dIFs8cGF0aHM+Li4uXQorIGdpdCBiaXNlY3QgKGJhZHxuZXd8PHRlcm0tbmV3PikgWzxyZXY+XQorIGdpdCBiaXNlY3QgKGdvb2R8b2xkfDx0ZXJtLW9sZD4pIFs8cmV2Pi4uLl0KKyBnaXQgYmlzZWN0IHRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1iYWRdCisgZ2l0IGJpc2VjdCBza2lwIFsoPHJldj58PHJhbmdlPikuLi5dCisgZ2l0IGJpc2VjdCByZXNldCBbPGNvbW1pdD5dCisgZ2l0IGJpc2VjdCAodmlzdWFsaXplfHZpZXcpCisgZ2l0IGJpc2VjdCByZXBsYXkgPGxvZ2ZpbGU+CisgZ2l0IGJpc2VjdCBsb2cKKyBnaXQgYmlzZWN0IHJ1biA8Y21kPi4uLgorIGdpdCBiaXNlY3QgaGVscAorCitUaGlzIGNvbW1hbmQgdXNlcyBhIGJpbmFyeSBzZWFyY2ggYWxnb3JpdGhtIHRvIGZpbmQgd2hpY2ggY29tbWl0IGluCit5b3VyIHByb2plY3QncyBoaXN0b3J5IGludHJvZHVjZWQgYSBidWcuIFlvdSB1c2UgaXQgYnkgZmlyc3QgdGVsbGluZworaXQgYSAiYmFkIiBjb21taXQgdGhhdCBpcyBrbm93biB0byBjb250YWluIHRoZSBidWcsIGFuZCBhICJnb29kIgorY29tbWl0IHRoYXQgaXMga25vd24gdG8gYmUgYmVmb3JlIHRoZSBidWcgd2FzIGludHJvZHVjZWQuIFRoZW4gYGdpdAorYmlzZWN0YCBwaWNrcyBhIGNvbW1pdCBiZXR3ZWVuIHRob3NlIHR3byBlbmRwb2ludHMgYW5kIGFza3MgeW91Cit3aGV0aGVyIHRoZSBzZWxlY3RlZCBjb21taXQgaXMgImdvb2QiIG9yICJiYWQiLiBJdCBjb250aW51ZXMgbmFycm93aW5nCitkb3duIHRoZSByYW5nZSB1bnRpbCBpdCBmaW5kcyB0aGUgZXhhY3QgY29tbWl0IHRoYXQgaW50cm9kdWNlZCB0aGUKK2NoYW5nZS4KKworSW4gZmFjdCwgYGdpdCBiaXNlY3RgIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIGNvbW1pdCB0aGF0IGNoYW5nZWQKKyphbnkqIHByb3BlcnR5IG9mIHlvdXIgcHJvamVjdDsgZS5nLiwgdGhlIGNvbW1pdCB0aGF0IGZpeGVkIGEgYnVnLCBvcgordGhlIGNvbW1pdCB0aGF0IGNhdXNlZCBhIGJlbmNobWFyaydzIHBlcmZvcm1hbmNlIHRvIGltcHJvdmUuIFRvCitzdXBwb3J0IHRoaXMgbW9yZSBnZW5lcmFsIHVzYWdlLCB0aGUgdGVybXMgIm9sZCIgYW5kICJuZXciIGNhbiBiZSB1c2VkCitpbiBwbGFjZSBvZiAiZ29vZCIgYW5kICJiYWQiLCBvciB5b3UgY2FuIGNob29zZSB5b3VyIG93biB0ZXJtcy4gU2VlCitzZWN0aW9uICJBbHRlcm5hdGUgdGVybXMiIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitCYXNpYyBiaXNlY3QgY29tbWFuZHM6IHN0YXJ0LCBiYWQsIGdvb2QKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBhcmUgdHJ5aW5nIHRvIGZpbmQgdGhlIGNvbW1pdCB0aGF0IGJyb2tlIGEKK2ZlYXR1cmUgdGhhdCB3YXMga25vd24gdG8gd29yayBpbiB2ZXJzaW9uIGB2Mi42LjEzLXJjMmAgb2YgeW91cgorcHJvamVjdC4gWW91IHN0YXJ0IGEgYmlzZWN0IHNlc3Npb24gYXMgZm9sbG93czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQKKyQgZ2l0IGJpc2VjdCBiYWQgICAgICAgICAgICAgICAgICMgQ3VycmVudCB2ZXJzaW9uIGlzIGJhZAorJCBnaXQgYmlzZWN0IGdvb2QgdjIuNi4xMy1yYzIgICAgIyB2Mi42LjEzLXJjMiBpcyBrbm93biB0byBiZSBnb29kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT25jZSB5b3UgaGF2ZSBzcGVjaWZpZWQgYXQgbGVhc3Qgb25lIGJhZCBhbmQgb25lIGdvb2QgY29tbWl0LCBgZ2l0CitiaXNlY3RgIHNlbGVjdHMgYSBjb21taXQgaW4gdGhlIG1pZGRsZSBvZiB0aGF0IHJhbmdlIG9mIGhpc3RvcnksCitjaGVja3MgaXQgb3V0LCBhbmQgb3V0cHV0cyBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Jpc2VjdGluZzogNjc1IHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAocm91Z2hseSAxMCBzdGVwcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3Ugc2hvdWxkIG5vdyBjb21waWxlIHRoZSBjaGVja2VkLW91dCB2ZXJzaW9uIGFuZCB0ZXN0IGl0LiBJZiB0aGF0Cit2ZXJzaW9uIHdvcmtzIGNvcnJlY3RseSwgdHlwZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBnb29kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgdGhhdCB2ZXJzaW9uIGlzIGJyb2tlbiwgdHlwZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBiYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuIGBnaXQgYmlzZWN0YCB3aWxsIHJlc3BvbmQgd2l0aCBzb21ldGhpbmcgbGlrZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Jpc2VjdGluZzogMzM3IHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAocm91Z2hseSA5IHN0ZXBzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0tlZXAgcmVwZWF0aW5nIHRoZSBwcm9jZXNzOiBjb21waWxlIHRoZSB0cmVlLCB0ZXN0IGl0LCBhbmQgZGVwZW5kaW5nCitvbiB3aGV0aGVyIGl0IGlzIGdvb2Qgb3IgYmFkIHJ1biBgZ2l0IGJpc2VjdCBnb29kYCBvciBgZ2l0IGJpc2VjdCBiYWRgCit0byBhc2sgZm9yIHRoZSBuZXh0IGNvbW1pdCB0aGF0IG5lZWRzIHRlc3RpbmcuCisKK0V2ZW50dWFsbHkgdGhlcmUgd2lsbCBiZSBubyBtb3JlIHJldmlzaW9ucyBsZWZ0IHRvIGluc3BlY3QsIGFuZCB0aGUKK2NvbW1hbmQgd2lsbCBwcmludCBvdXQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlyc3QgYmFkIGNvbW1pdC4gVGhlCityZWZlcmVuY2UgYHJlZnMvYmlzZWN0L2JhZGAgd2lsbCBiZSBsZWZ0IHBvaW50aW5nIGF0IHRoYXQgY29tbWl0LgorCisKK0Jpc2VjdCByZXNldAorfn5+fn5+fn5+fn5+CisKK0FmdGVyIGEgYmlzZWN0IHNlc3Npb24sIHRvIGNsZWFuIHVwIHRoZSBiaXNlY3Rpb24gc3RhdGUgYW5kIHJldHVybiB0bwordGhlIG9yaWdpbmFsIEhFQUQsIGlzc3VlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgcmVzZXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcmV0dXJuIHlvdXIgdHJlZSB0byB0aGUgY29tbWl0IHRoYXQgd2FzIGNoZWNrZWQKK291dCBiZWZvcmUgYGdpdCBiaXNlY3Qgc3RhcnRgLiAgKEEgbmV3IGBnaXQgYmlzZWN0IHN0YXJ0YCB3aWxsIGFsc28gZG8KK3RoYXQsIGFzIGl0IGNsZWFucyB1cCB0aGUgb2xkIGJpc2VjdGlvbiBzdGF0ZS4pCisKK1dpdGggYW4gb3B0aW9uYWwgYXJndW1lbnQsIHlvdSBjYW4gcmV0dXJuIHRvIGEgZGlmZmVyZW50IGNvbW1pdAoraW5zdGVhZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgZXhhbXBsZSwgYGdpdCBiaXNlY3QgcmVzZXQgYmlzZWN0L2JhZGAgd2lsbCBjaGVjayBvdXQgdGhlIGZpcnN0CitiYWQgcmV2aXNpb24sIHdoaWxlIGBnaXQgYmlzZWN0IHJlc2V0IEhFQURgIHdpbGwgbGVhdmUgeW91IG9uIHRoZQorY3VycmVudCBiaXNlY3Rpb24gY29tbWl0IGFuZCBhdm9pZCBzd2l0Y2hpbmcgY29tbWl0cyBhdCBhbGwuCisKKworQWx0ZXJuYXRlIHRlcm1zCit+fn5+fn5+fn5+fn5+fn4KKworU29tZXRpbWVzIHlvdSBhcmUgbm90IGxvb2tpbmcgZm9yIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEKK2JyZWFrYWdlLCBidXQgcmF0aGVyIGZvciBhIGNvbW1pdCB0aGF0IGNhdXNlZCBhIGNoYW5nZSBiZXR3ZWVuIHNvbWUKK290aGVyICJvbGQiIHN0YXRlIGFuZCAibmV3IiBzdGF0ZS4gRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBiZSBsb29raW5nCitmb3IgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgYSBwYXJ0aWN1bGFyIGZpeC4gT3IgeW91IG1pZ2h0IGJlCitsb29raW5nIGZvciB0aGUgZmlyc3QgY29tbWl0IGluIHdoaWNoIHRoZSBzb3VyY2UtY29kZSBmaWxlbmFtZXMgd2VyZQorZmluYWxseSBhbGwgY29udmVydGVkIHRvIHlvdXIgY29tcGFueSdzIG5hbWluZyBzdGFuZGFyZC4gT3Igd2hhdGV2ZXIuCisKK0luIHN1Y2ggY2FzZXMgaXQgY2FuIGJlIHZlcnkgY29uZnVzaW5nIHRvIHVzZSB0aGUgdGVybXMgImdvb2QiIGFuZAorImJhZCIgdG8gcmVmZXIgdG8gInRoZSBzdGF0ZSBiZWZvcmUgdGhlIGNoYW5nZSIgYW5kICJ0aGUgc3RhdGUgYWZ0ZXIKK3RoZSBjaGFuZ2UiLiBTbyBpbnN0ZWFkLCB5b3UgY2FuIHVzZSB0aGUgdGVybXMgIm9sZCIgYW5kICJuZXciLAorcmVzcGVjdGl2ZWx5LCBpbiBwbGFjZSBvZiAiZ29vZCIgYW5kICJiYWQiLiAoQnV0IG5vdGUgdGhhdCB5b3UgY2Fubm90CittaXggImdvb2QiIGFuZCAiYmFkIiB3aXRoICJvbGQiIGFuZCAibmV3IiBpbiBhIHNpbmdsZSBzZXNzaW9uLikKKworSW4gdGhpcyBtb3JlIGdlbmVyYWwgdXNhZ2UsIHlvdSBwcm92aWRlIGBnaXQgYmlzZWN0YCB3aXRoIGEgIm5ldyIKK2NvbW1pdCB0aGF0IGhhcyBzb21lIHByb3BlcnR5IGFuZCBhbiAib2xkIiBjb21taXQgdGhhdCBkb2Vzbid0IGhhdmUgdGhhdAorcHJvcGVydHkuIEVhY2ggdGltZSBgZ2l0IGJpc2VjdGAgY2hlY2tzIG91dCBhIGNvbW1pdCwgeW91IHRlc3QgaWYgdGhhdAorY29tbWl0IGhhcyB0aGUgcHJvcGVydHkuIElmIGl0IGRvZXMsIG1hcmsgdGhlIGNvbW1pdCBhcyAibmV3IjsKK290aGVyd2lzZSwgbWFyayBpdCBhcyAib2xkIi4gV2hlbiB0aGUgYmlzZWN0aW9uIGlzIGRvbmUsIGBnaXQgYmlzZWN0YAord2lsbCByZXBvcnQgd2hpY2ggY29tbWl0IGludHJvZHVjZWQgdGhlIHByb3BlcnR5LgorCitUbyB1c2UgIm9sZCIgYW5kICJuZXciIGluc3RlYWQgb2YgImdvb2QiIGFuZCBiYWQsIHlvdSBtdXN0IHJ1biBgZ2l0CitiaXNlY3Qgc3RhcnRgIHdpdGhvdXQgY29tbWl0cyBhcyBhcmd1bWVudCBhbmQgdGhlbiBydW4gdGhlIGZvbGxvd2luZworY29tbWFuZHMgdG8gYWRkIHRoZSBjb21taXRzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBiaXNlY3Qgb2xkIFs8cmV2Pl0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0byBpbmRpY2F0ZSB0aGF0IGEgY29tbWl0IHdhcyBiZWZvcmUgdGhlIHNvdWdodCBjaGFuZ2UsIG9yCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGJpc2VjdCBuZXcgWzxyZXY+Li4uXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIGluZGljYXRlIHRoYXQgaXQgd2FzIGFmdGVyLgorCitUbyBnZXQgYSByZW1pbmRlciBvZiB0aGUgY3VycmVudGx5IHVzZWQgdGVybXMsIHVzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBiaXNlY3QgdGVybXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGdldCBqdXN0IHRoZSBvbGQgKHJlc3BlY3RpdmVseSBuZXcpIHRlcm0gd2l0aCBgZ2l0IGJpc2VjdCB0ZXJtcworLS10ZXJtLW9sZGAgb3IgYGdpdCBiaXNlY3QgdGVybXMgLS10ZXJtLWdvb2RgLgorCitJZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgeW91ciBvd24gdGVybXMgaW5zdGVhZCBvZiAiYmFkIi8iZ29vZCIgb3IKKyJuZXciLyJvbGQiLCB5b3UgY2FuIGNob29zZSBhbnkgbmFtZXMgeW91IGxpa2UgKGV4Y2VwdCBleGlzdGluZyBiaXNlY3QKK3N1YmNvbW1hbmRzIGxpa2UgYHJlc2V0YCwgYHN0YXJ0YCwgLi4uKSBieSBzdGFydGluZyB0aGUKK2Jpc2VjdGlvbiB1c2luZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBiaXNlY3Qgc3RhcnQgLS10ZXJtLW9sZCA8dGVybS1vbGQ+IC0tdGVybS1uZXcgPHRlcm0tbmV3PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgYXJlIGxvb2tpbmcgZm9yIGEgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhCitwZXJmb3JtYW5jZSByZWdyZXNzaW9uLCB5b3UgbWlnaHQgdXNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGJpc2VjdCBzdGFydCAtLXRlcm0tb2xkIGZhc3QgLS10ZXJtLW5ldyBzbG93CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3IgaWYgeW91IGFyZSBsb29raW5nIGZvciB0aGUgY29tbWl0IHRoYXQgZml4ZWQgYSBidWcsIHlvdSBtaWdodCB1c2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgYmlzZWN0IHN0YXJ0IC0tdGVybS1uZXcgZml4ZWQgLS10ZXJtLW9sZCBicm9rZW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuLCB1c2UgYGdpdCBiaXNlY3QgPHRlcm0tb2xkPmAgYW5kIGBnaXQgYmlzZWN0IDx0ZXJtLW5ldz5gIGluc3RlYWQKK29mIGBnaXQgYmlzZWN0IGdvb2RgIGFuZCBgZ2l0IGJpc2VjdCBiYWRgIHRvIG1hcmsgY29tbWl0cy4KKworQmlzZWN0IHZpc3VhbGl6ZS92aWV3Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVG8gc2VlIHRoZSBjdXJyZW50bHkgcmVtYWluaW5nIHN1c3BlY3RzIGluICdnaXRrJywgaXNzdWUgdGhlIGZvbGxvd2luZworY29tbWFuZCBkdXJpbmcgdGhlIGJpc2VjdGlvbiBwcm9jZXNzICh0aGUgc3ViY29tbWFuZCBgdmlld2AgY2FuIGJlIHVzZWQKK2FzIGFuIGFsdGVybmF0aXZlIHRvIGB2aXN1YWxpemVgKToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgdmlzdWFsaXplCistLS0tLS0tLS0tLS0KKworSWYgdGhlIGBESVNQTEFZYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LCAnZ2l0IGxvZycgaXMgdXNlZAoraW5zdGVhZC4gIFlvdSBjYW4gYWxzbyBnaXZlIGNvbW1hbmQtbGluZSBvcHRpb25zIHN1Y2ggYXMgYC1wYCBhbmQKK2AtLXN0YXRgLgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCB2aXN1YWxpemUgLS1zdGF0CistLS0tLS0tLS0tLS0KKworQmlzZWN0IGxvZyBhbmQgYmlzZWN0IHJlcGxheQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBZnRlciBoYXZpbmcgbWFya2VkIHJldmlzaW9ucyBhcyBnb29kIG9yIGJhZCwgaXNzdWUgdGhlIGZvbGxvd2luZworY29tbWFuZCB0byBzaG93IHdoYXQgaGFzIGJlZW4gZG9uZSBzbyBmYXI6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IGxvZworLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBkaXNjb3ZlciB0aGF0IHlvdSBtYWRlIGEgbWlzdGFrZSBpbiBzcGVjaWZ5aW5nIHRoZSBzdGF0dXMgb2YgYQorcmV2aXNpb24sIHlvdSBjYW4gc2F2ZSB0aGUgb3V0cHV0IG9mIHRoaXMgY29tbWFuZCB0byBhIGZpbGUsIGVkaXQgaXQgdG8KK3JlbW92ZSB0aGUgaW5jb3JyZWN0IGVudHJpZXMsIGFuZCB0aGVuIGlzc3VlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8KK3JldHVybiB0byBhIGNvcnJlY3RlZCBzdGF0ZToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgcmVzZXQKKyQgZ2l0IGJpc2VjdCByZXBsYXkgdGhhdC1maWxlCistLS0tLS0tLS0tLS0KKworQXZvaWRpbmcgdGVzdGluZyBhIGNvbW1pdAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitJZiwgaW4gdGhlIG1pZGRsZSBvZiBhIGJpc2VjdCBzZXNzaW9uLCB5b3Uga25vdyB0aGF0IHRoZSBzdWdnZXN0ZWQKK3JldmlzaW9uIGlzIG5vdCBhIGdvb2Qgb25lIHRvIHRlc3QgKGUuZy4gaXQgZmFpbHMgdG8gYnVpbGQgYW5kIHlvdQora25vdyB0aGF0IHRoZSBmYWlsdXJlIGRvZXMgbm90IGhhdmUgYW55dGhpbmcgdG8gZG8gd2l0aCB0aGUgYnVnIHlvdQorYXJlIGNoYXNpbmcpLCB5b3UgY2FuIG1hbnVhbGx5IHNlbGVjdCBhIG5lYXJieSBjb21taXQgYW5kIHRlc3QgdGhhdAorb25lIGluc3RlYWQuCisKK0ZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBnb29kL2JhZAkJCSMgcHJldmlvdXMgcm91bmQgd2FzIGdvb2Qgb3IgYmFkLgorQmlzZWN0aW5nOiAzMzcgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzIChyb3VnaGx5IDkgc3RlcHMpCiskIGdpdCBiaXNlY3QgdmlzdWFsaXplCQkJIyBvb3BzLCB0aGF0IGlzIHVuaW50ZXJlc3RpbmcuCiskIGdpdCByZXNldCAtLWhhcmQgSEVBRH4zCQkjIHRyeSAzIHJldmlzaW9ucyBiZWZvcmUgd2hhdAorCQkJCQkjIHdhcyBzdWdnZXN0ZWQKKy0tLS0tLS0tLS0tLQorCitUaGVuIGNvbXBpbGUgYW5kIHRlc3QgdGhlIGNob3NlbiByZXZpc2lvbiwgYW5kIGFmdGVyd2FyZHMgbWFyawordGhlIHJldmlzaW9uIGFzIGdvb2Qgb3IgYmFkIGluIHRoZSB1c3VhbCBtYW5uZXIuCisKK0Jpc2VjdCBza2lwCit+fn5+fn5+fn5+fgorCitJbnN0ZWFkIG9mIGNob29zaW5nIGEgbmVhcmJ5IGNvbW1pdCBieSB5b3Vyc2VsZiwgeW91IGNhbiBhc2sgR2l0IHRvIGRvCitpdCBmb3IgeW91IGJ5IGlzc3VpbmcgdGhlIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHNraXAgICAgICAgICAgICAgICAgICMgQ3VycmVudCB2ZXJzaW9uIGNhbm5vdCBiZSB0ZXN0ZWQKKy0tLS0tLS0tLS0tLQorCitIb3dldmVyLCBpZiB5b3Ugc2tpcCBhIGNvbW1pdCBhZGphY2VudCB0byB0aGUgb25lIHlvdSBhcmUgbG9va2luZyBmb3IsCitHaXQgd2lsbCBiZSB1bmFibGUgdG8gdGVsbCBleGFjdGx5IHdoaWNoIG9mIHRob3NlIGNvbW1pdHMgd2FzIHRoZQorZmlyc3QgYmFkIG9uZS4KKworWW91IGNhbiBhbHNvIHNraXAgYSByYW5nZSBvZiBjb21taXRzLCBpbnN0ZWFkIG9mIGp1c3Qgb25lIGNvbW1pdCwKK3VzaW5nIHJhbmdlIG5vdGF0aW9uLiBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc2tpcCB2Mi41Li52Mi42CistLS0tLS0tLS0tLS0KKworVGhpcyB0ZWxscyB0aGUgYmlzZWN0IHByb2Nlc3MgdGhhdCBubyBjb21taXQgYWZ0ZXIgYHYyLjVgLCB1cCB0byBhbmQKK2luY2x1ZGluZyBgdjIuNmAsIHNob3VsZCBiZSB0ZXN0ZWQuCisKK05vdGUgdGhhdCBpZiB5b3UgYWxzbyB3YW50IHRvIHNraXAgdGhlIGZpcnN0IGNvbW1pdCBvZiB0aGUgcmFuZ2UgeW91Cit3b3VsZCBpc3N1ZSB0aGUgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc2tpcCB2Mi41IHYyLjUuLnYyLjYKKy0tLS0tLS0tLS0tLQorCitUaGlzIHRlbGxzIHRoZSBiaXNlY3QgcHJvY2VzcyB0aGF0IHRoZSBjb21taXRzIGJldHdlZW4gYHYyLjVgIGFuZAorYHYyLjZgIChpbmNsdXNpdmUpIHNob3VsZCBiZSBza2lwcGVkLgorCisKK0N1dHRpbmcgZG93biBiaXNlY3Rpb24gYnkgZ2l2aW5nIG1vcmUgcGFyYW1ldGVycyB0byBiaXNlY3Qgc3RhcnQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IGNhbiBmdXJ0aGVyIGN1dCBkb3duIHRoZSBudW1iZXIgb2YgdHJpYWxzLCBpZiB5b3Uga25vdyB3aGF0IHBhcnQgb2YKK3RoZSB0cmVlIGlzIGludm9sdmVkIGluIHRoZSBwcm9ibGVtIHlvdSBhcmUgdHJhY2tpbmcgZG93biwgYnkgc3BlY2lmeWluZworcGF0aCBwYXJhbWV0ZXJzIHdoZW4gaXNzdWluZyB0aGUgYGJpc2VjdCBzdGFydGAgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgLS0gYXJjaC9pMzg2IGluY2x1ZGUvYXNtLWkzODYKKy0tLS0tLS0tLS0tLQorCitJZiB5b3Uga25vdyBiZWZvcmVoYW5kIG1vcmUgdGhhbiBvbmUgZ29vZCBjb21taXQsIHlvdSBjYW4gbmFycm93IHRoZQorYmlzZWN0IHNwYWNlIGRvd24gYnkgc3BlY2lmeWluZyBhbGwgb2YgdGhlIGdvb2QgY29tbWl0cyBpbW1lZGlhdGVseSBhZnRlcgordGhlIGJhZCBjb21taXQgd2hlbiBpc3N1aW5nIHRoZSBgYmlzZWN0IHN0YXJ0YCBjb21tYW5kOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCB2Mi42LjIwLXJjNiB2Mi42LjIwLXJjNCB2Mi42LjIwLXJjMSAtLQorICAgICAgICAgICAgICAgICAgICMgdjIuNi4yMC1yYzYgaXMgYmFkCisgICAgICAgICAgICAgICAgICAgIyB2Mi42LjIwLXJjNCBhbmQgdjIuNi4yMC1yYzEgYXJlIGdvb2QKKy0tLS0tLS0tLS0tLQorCitCaXNlY3QgcnVuCit+fn5+fn5+fn5+CisKK0lmIHlvdSBoYXZlIGEgc2NyaXB0IHRoYXQgY2FuIHRlbGwgaWYgdGhlIGN1cnJlbnQgc291cmNlIGNvZGUgaXMgZ29vZAorb3IgYmFkLCB5b3UgY2FuIGJpc2VjdCBieSBpc3N1aW5nIHRoZSBjb21tYW5kOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBydW4gbXlfc2NyaXB0IGFyZ3VtZW50cworLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCB0aGUgc2NyaXB0IChgbXlfc2NyaXB0YCBpbiB0aGUgYWJvdmUgZXhhbXBsZSkgc2hvdWxkIGV4aXQKK3dpdGggY29kZSAwIGlmIHRoZSBjdXJyZW50IHNvdXJjZSBjb2RlIGlzIGdvb2Qvb2xkLCBhbmQgZXhpdCB3aXRoIGEKK2NvZGUgYmV0d2VlbiAxIGFuZCAxMjcgKGluY2x1c2l2ZSksIGV4Y2VwdCAxMjUsIGlmIHRoZSBjdXJyZW50IHNvdXJjZQorY29kZSBpcyBiYWQvbmV3LgorCitBbnkgb3RoZXIgZXhpdCBjb2RlIHdpbGwgYWJvcnQgdGhlIGJpc2VjdCBwcm9jZXNzLiBJdCBzaG91bGQgYmUgbm90ZWQKK3RoYXQgYSBwcm9ncmFtIHRoYXQgdGVybWluYXRlcyB2aWEgYGV4aXQoLTEpYCBsZWF2ZXMgJD8gPSAyNTUsIChzZWUgdGhlCitleGl0KDMpIG1hbnVhbCBwYWdlKSwgYXMgdGhlIHZhbHVlIGlzIGNob3BwZWQgd2l0aCBgJiAwMzc3YC4KKworVGhlIHNwZWNpYWwgZXhpdCBjb2RlIDEyNSBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBjdXJyZW50IHNvdXJjZSBjb2RlCitjYW5ub3QgYmUgdGVzdGVkLiBJZiB0aGUgc2NyaXB0IGV4aXRzIHdpdGggdGhpcyBjb2RlLCB0aGUgY3VycmVudAorcmV2aXNpb24gd2lsbCBiZSBza2lwcGVkIChzZWUgYGdpdCBiaXNlY3Qgc2tpcGAgYWJvdmUpLiAxMjUgd2FzIGNob3NlbgorYXMgdGhlIGhpZ2hlc3Qgc2Vuc2libGUgdmFsdWUgdG8gdXNlIGZvciB0aGlzIHB1cnBvc2UsIGJlY2F1c2UgMTI2IGFuZCAxMjcKK2FyZSB1c2VkIGJ5IFBPU0lYIHNoZWxscyB0byBzaWduYWwgc3BlY2lmaWMgZXJyb3Igc3RhdHVzICgxMjcgaXMgZm9yCitjb21tYW5kIG5vdCBmb3VuZCwgMTI2IGlzIGZvciBjb21tYW5kIGZvdW5kIGJ1dCBub3QgZXhlY3V0YWJsZS0tdGhlc2UKK2RldGFpbHMgZG8gbm90IG1hdHRlciwgYXMgdGhleSBhcmUgbm9ybWFsIGVycm9ycyBpbiB0aGUgc2NyaXB0LCBhcyBmYXIgYXMKK2BiaXNlY3QgcnVuYCBpcyBjb25jZXJuZWQpLgorCitZb3UgbWF5IG9mdGVuIGZpbmQgdGhhdCBkdXJpbmcgYSBiaXNlY3Qgc2Vzc2lvbiB5b3Ugd2FudCB0byBoYXZlCit0ZW1wb3JhcnkgbW9kaWZpY2F0aW9ucyAoZS5nLiBzLyNkZWZpbmUgREVCVUcgMC8jZGVmaW5lIERFQlVHIDEvIGluIGEKK2hlYWRlciBmaWxlLCBvciAicmV2aXNpb24gdGhhdCBkb2VzIG5vdCBoYXZlIHRoaXMgY29tbWl0IG5lZWRzIHRoaXMKK3BhdGNoIGFwcGxpZWQgdG8gd29yayBhcm91bmQgYW5vdGhlciBwcm9ibGVtIHRoaXMgYmlzZWN0aW9uIGlzIG5vdAoraW50ZXJlc3RlZCBpbiIpIGFwcGxpZWQgdG8gdGhlIHJldmlzaW9uIGJlaW5nIHRlc3RlZC4KKworVG8gY29wZSB3aXRoIHN1Y2ggYSBzaXR1YXRpb24sIGFmdGVyIHRoZSBpbm5lciAnZ2l0IGJpc2VjdCcgZmluZHMgdGhlCituZXh0IHJldmlzaW9uIHRvIHRlc3QsIHRoZSBzY3JpcHQgY2FuIGFwcGx5IHRoZSBwYXRjaAorYmVmb3JlIGNvbXBpbGluZywgcnVuIHRoZSByZWFsIHRlc3QsIGFuZCBhZnRlcndhcmRzIGRlY2lkZSBpZiB0aGUKK3JldmlzaW9uIChwb3NzaWJseSB3aXRoIHRoZSBuZWVkZWQgcGF0Y2gpIHBhc3NlZCB0aGUgdGVzdCBhbmQgdGhlbgorcmV3aW5kIHRoZSB0cmVlIHRvIHRoZSBwcmlzdGluZSBzdGF0ZS4gIEZpbmFsbHkgdGhlIHNjcmlwdCBzaG91bGQgZXhpdAord2l0aCB0aGUgc3RhdHVzIG9mIHRoZSByZWFsIHRlc3QgdG8gbGV0IHRoZSBgZ2l0IGJpc2VjdCBydW5gIGNvbW1hbmQgbG9vcAorZGV0ZXJtaW5lIHRoZSBldmVudHVhbCBvdXRjb21lIG9mIHRoZSBiaXNlY3Qgc2Vzc2lvbi4KKworT1BUSU9OUworLS0tLS0tLQorLS1uby1jaGVja291dDo6CisrCitEbyBub3QgY2hlY2tvdXQgdGhlIG5ldyB3b3JraW5nIHRyZWUgYXQgZWFjaCBpdGVyYXRpb24gb2YgdGhlIGJpc2VjdGlvbgorcHJvY2Vzcy4gSW5zdGVhZCBqdXN0IHVwZGF0ZSBhIHNwZWNpYWwgcmVmZXJlbmNlIG5hbWVkIGBCSVNFQ1RfSEVBRGAgdG8gbWFrZQoraXQgcG9pbnQgdG8gdGhlIGNvbW1pdCB0aGF0IHNob3VsZCBiZSB0ZXN0ZWQuCisrCitUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZnVsIHdoZW4gdGhlIHRlc3QgeW91IHdvdWxkIHBlcmZvcm0gaW4gZWFjaCBzdGVwCitkb2VzIG5vdCByZXF1aXJlIGEgY2hlY2tlZCBvdXQgdHJlZS4KKysKK0lmIHRoZSByZXBvc2l0b3J5IGlzIGJhcmUsIGAtLW5vLWNoZWNrb3V0YCBpcyBhc3N1bWVkLgorCitFWEFNUExFUworLS0tLS0tLS0KKworKiBBdXRvbWF0aWNhbGx5IGJpc2VjdCBhIGJyb2tlbiBidWlsZCBiZXR3ZWVuIHYxLjIgYW5kIEhFQUQ6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBIRUFEIHYxLjIgLS0gICAgICAjIEhFQUQgaXMgYmFkLCB2MS4yIGlzIGdvb2QKKyQgZ2l0IGJpc2VjdCBydW4gbWFrZSAgICAgICAgICAgICAgICAjICJtYWtlIiBidWlsZHMgdGhlIGFwcAorJCBnaXQgYmlzZWN0IHJlc2V0ICAgICAgICAgICAgICAgICAgICMgcXVpdCB0aGUgYmlzZWN0IHNlc3Npb24KKy0tLS0tLS0tLS0tLQorCisqIEF1dG9tYXRpY2FsbHkgYmlzZWN0IGEgdGVzdCBmYWlsdXJlIGJldHdlZW4gb3JpZ2luIGFuZCBIRUFEOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgSEVBRCBvcmlnaW4gLS0gICAgIyBIRUFEIGlzIGJhZCwgb3JpZ2luIGlzIGdvb2QKKyQgZ2l0IGJpc2VjdCBydW4gbWFrZSB0ZXN0ICAgICAgICAgICAjICJtYWtlIHRlc3QiIGJ1aWxkcyBhbmQgdGVzdHMKKyQgZ2l0IGJpc2VjdCByZXNldCAgICAgICAgICAgICAgICAgICAjIHF1aXQgdGhlIGJpc2VjdCBzZXNzaW9uCistLS0tLS0tLS0tLS0KKworKiBBdXRvbWF0aWNhbGx5IGJpc2VjdCBhIGJyb2tlbiB0ZXN0IGNhc2U6CisrCistLS0tLS0tLS0tLS0KKyQgY2F0IH4vdGVzdC5zaAorIyEvYmluL3NoCittYWtlIHx8IGV4aXQgMTI1ICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIHNraXBzIGJyb2tlbiBidWlsZHMKK34vY2hlY2tfdGVzdF9jYXNlLnNoICAgICAgICAgICAgICAgICAjIGRvZXMgdGhlIHRlc3QgY2FzZSBwYXNzPworJCBnaXQgYmlzZWN0IHN0YXJ0IEhFQUQgSEVBRH4xMCAtLSAgICMgY3VscHJpdCBpcyBhbW9uZyB0aGUgbGFzdCAxMAorJCBnaXQgYmlzZWN0IHJ1biB+L3Rlc3Quc2gKKyQgZ2l0IGJpc2VjdCByZXNldCAgICAgICAgICAgICAgICAgICAjIHF1aXQgdGhlIGJpc2VjdCBzZXNzaW9uCistLS0tLS0tLS0tLS0KKysKK0hlcmUgd2UgdXNlIGEgYHRlc3Quc2hgIGN1c3RvbSBzY3JpcHQuIEluIHRoaXMgc2NyaXB0LCBpZiBgbWFrZWAKK2ZhaWxzLCB3ZSBza2lwIHRoZSBjdXJyZW50IGNvbW1pdC4KK2BjaGVja190ZXN0X2Nhc2Uuc2hgIHNob3VsZCBgZXhpdCAwYCBpZiB0aGUgdGVzdCBjYXNlIHBhc3NlcywKK2FuZCBgZXhpdCAxYCBvdGhlcndpc2UuCisrCitJdCBpcyBzYWZlciBpZiBib3RoIGB0ZXN0LnNoYCBhbmQgYGNoZWNrX3Rlc3RfY2FzZS5zaGAgYXJlCitvdXRzaWRlIHRoZSByZXBvc2l0b3J5IHRvIHByZXZlbnQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGJpc2VjdCwKK21ha2UgYW5kIHRlc3QgcHJvY2Vzc2VzIGFuZCB0aGUgc2NyaXB0cy4KKworKiBBdXRvbWF0aWNhbGx5IGJpc2VjdCB3aXRoIHRlbXBvcmFyeSBtb2RpZmljYXRpb25zIChob3QtZml4KToKKysKKy0tLS0tLS0tLS0tLQorJCBjYXQgfi90ZXN0LnNoCisjIS9iaW4vc2gKKworIyB0d2VhayB0aGUgd29ya2luZyB0cmVlIGJ5IG1lcmdpbmcgdGhlIGhvdC1maXggYnJhbmNoCisjIGFuZCB0aGVuIGF0dGVtcHQgYSBidWlsZAoraWYJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IC0tbm8tZmYgaG90LWZpeCAmJgorCW1ha2UKK3RoZW4KKwkjIHJ1biBwcm9qZWN0IHNwZWNpZmljIHRlc3QgYW5kIHJlcG9ydCBpdHMgc3RhdHVzCisJfi9jaGVja190ZXN0X2Nhc2Uuc2gKKwlzdGF0dXM9JD8KK2Vsc2UKKwkjIHRlbGwgdGhlIGNhbGxlciB0aGlzIGlzIHVudGVzdGFibGUKKwlzdGF0dXM9MTI1CitmaQorCisjIHVuZG8gdGhlIHR3ZWFrIHRvIGFsbG93IGNsZWFuIGZsaXBwaW5nIHRvIHRoZSBuZXh0IGNvbW1pdAorZ2l0IHJlc2V0IC0taGFyZAorCisjIHJldHVybiBjb250cm9sCitleGl0ICRzdGF0dXMKKy0tLS0tLS0tLS0tLQorKworVGhpcyBhcHBsaWVzIG1vZGlmaWNhdGlvbnMgZnJvbSBhIGhvdC1maXggYnJhbmNoIGJlZm9yZSBlYWNoIHRlc3QgcnVuLAorZS5nLiBpbiBjYXNlIHlvdXIgYnVpbGQgb3IgdGVzdCBlbnZpcm9ubWVudCBjaGFuZ2VkIHNvIHRoYXQgb2xkZXIKK3JldmlzaW9ucyBtYXkgbmVlZCBhIGZpeCB3aGljaCBuZXdlciBvbmVzIGhhdmUgYWxyZWFkeS4gKE1ha2Ugc3VyZSB0aGUKK2hvdC1maXggYnJhbmNoIGlzIGJhc2VkIG9mZiBhIGNvbW1pdCB3aGljaCBpcyBjb250YWluZWQgaW4gYWxsIHJldmlzaW9ucword2hpY2ggeW91IGFyZSBiaXNlY3RpbmcsIHNvIHRoYXQgdGhlIG1lcmdlIGRvZXMgbm90IHB1bGwgaW4gdG9vIG11Y2gsIG9yCit1c2UgYGdpdCBjaGVycnktcGlja2AgaW5zdGVhZCBvZiBgZ2l0IG1lcmdlYC4pCisKKyogQXV0b21hdGljYWxseSBiaXNlY3QgYSBicm9rZW4gdGVzdCBjYXNlOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgSEVBRCBIRUFEfjEwIC0tICAgIyBjdWxwcml0IGlzIGFtb25nIHRoZSBsYXN0IDEwCiskIGdpdCBiaXNlY3QgcnVuIHNoIC1jICJtYWtlIHx8IGV4aXQgMTI1OyB+L2NoZWNrX3Rlc3RfY2FzZS5zaCIKKyQgZ2l0IGJpc2VjdCByZXNldCAgICAgICAgICAgICAgICAgICAjIHF1aXQgdGhlIGJpc2VjdCBzZXNzaW9uCistLS0tLS0tLS0tLS0KKysKK1RoaXMgc2hvd3MgdGhhdCB5b3UgY2FuIGRvIHdpdGhvdXQgYSBydW4gc2NyaXB0IGlmIHlvdSB3cml0ZSB0aGUgdGVzdAorb24gYSBzaW5nbGUgbGluZS4KKworKiBMb2NhdGUgYSBnb29kIHJlZ2lvbiBvZiB0aGUgb2JqZWN0IGdyYXBoIGluIGEgZGFtYWdlZCByZXBvc2l0b3J5CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBIRUFEIDxrbm93bi1nb29kLWNvbW1pdD4gWyA8Ym91bmRhcnktY29tbWl0PiAuLi4gXSAtLW5vLWNoZWNrb3V0CiskIGdpdCBiaXNlY3QgcnVuIHNoIC1jICcKKwlHT09EPSQoZ2l0IGZvci1lYWNoLXJlZiAiLS1mb3JtYXQ9JShvYmplY3RuYW1lKSIgcmVmcy9iaXNlY3QvZ29vZC0qKSAmJgorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgQklTRUNUX0hFQUQgLS1ub3QgJEdPT0QgPnRtcC4kJCAmJgorCWdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgPi9kZXYvbnVsbCA8dG1wLiQkCisJcmM9JD8KKwlybSAtZiB0bXAuJCQKKwl0ZXN0ICRyYyA9IDAnCisKKyQgZ2l0IGJpc2VjdCByZXNldCAgICAgICAgICAgICAgICAgICAjIHF1aXQgdGhlIGJpc2VjdCBzZXNzaW9uCistLS0tLS0tLS0tLS0KKysKK0luIHRoaXMgY2FzZSwgd2hlbiAnZ2l0IGJpc2VjdCBydW4nIGZpbmlzaGVzLCBiaXNlY3QvYmFkIHdpbGwgcmVmZXIgdG8gYSBjb21taXQgdGhhdAoraGFzIGF0IGxlYXN0IG9uZSBwYXJlbnQgd2hvc2UgcmVhY2hhYmxlIGdyYXBoIGlzIGZ1bGx5IHRyYXZlcnNhYmxlIGluIHRoZSBzZW5zZQorcmVxdWlyZWQgYnkgJ2dpdCBwYWNrIG9iamVjdHMnLgorCisqIExvb2sgZm9yIGEgZml4IGluc3RlYWQgb2YgYSByZWdyZXNzaW9uIGluIHRoZSBjb2RlCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydAorJCBnaXQgYmlzZWN0IG5ldyBIRUFEICAgICMgY3VycmVudCBjb21taXQgaXMgbWFya2VkIGFzIG5ldworJCBnaXQgYmlzZWN0IG9sZCBIRUFEfjEwICMgdGhlIHRlbnRoIGNvbW1pdCBmcm9tIG5vdyBpcyBtYXJrZWQgYXMgb2xkCistLS0tLS0tLS0tLS0KKysKK29yOgorLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgLS10ZXJtLW9sZCBicm9rZW4gLS10ZXJtLW5ldyBmaXhlZAorJCBnaXQgYmlzZWN0IGZpeGVkCiskIGdpdCBiaXNlY3QgYnJva2VuIEhFQUR+MTAKKy0tLS0tLS0tLS0tLQorCitHZXR0aW5nIGhlbHAKK35+fn5+fn5+fn5+fgorCitVc2UgYGdpdCBiaXNlY3RgIHRvIGdldCBhIHNob3J0IHVzYWdlIGRlc2NyaXB0aW9uLCBhbmQgYGdpdCBiaXNlY3QKK2hlbHBgIG9yIGBnaXQgYmlzZWN0IC1oYCB0byBnZXQgYSBsb25nIHVzYWdlIGRlc2NyaXB0aW9uLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbms6Z2l0LWJpc2VjdC1sazIwMDkuaHRtbFtGaWdodGluZyByZWdyZXNzaW9ucyB3aXRoIGdpdCBiaXNlY3RdLAorbGlua2dpdDpnaXQtYmxhbWVbMV0uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlODE1NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ibGFtZS50eHQKQEAgLTAsMCArMSwyMzYgQEAKK2dpdC1ibGFtZSgxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1ibGFtZSAtIFNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYmxhbWUnIFstY10gWy1iXSBbLWxdIFstLXJvb3RdIFstdF0gWy1mXSBbLW5dIFstc10gWy1lXSBbLXBdIFstd10gWy0taW5jcmVtZW50YWxdCisJICAgIFstTCA8cmFuZ2U+XSBbLVMgPHJldnMtZmlsZT5dIFstTV0gWy1DXSBbLUNdIFstQ10gWy0tc2luY2U9PGRhdGU+XQorCSAgICBbLS1pZ25vcmUtcmV2IDxyZXY+XSBbLS1pZ25vcmUtcmV2cy1maWxlIDxmaWxlPl0KKwkgICAgWy0tcHJvZ3Jlc3NdIFstLWFiYnJldj08bj5dIFs8cmV2PiB8IC0tY29udGVudHMgPGZpbGU+IHwgLS1yZXZlcnNlIDxyZXY+Li48cmV2Pl0KKwkgICAgWy0tXSA8ZmlsZT4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0Fubm90YXRlcyBlYWNoIGxpbmUgaW4gdGhlIGdpdmVuIGZpbGUgd2l0aCBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZXZpc2lvbiB3aGljaAorbGFzdCBtb2RpZmllZCB0aGUgbGluZS4gT3B0aW9uYWxseSwgc3RhcnQgYW5ub3RhdGluZyBmcm9tIHRoZSBnaXZlbiByZXZpc2lvbi4KKworV2hlbiBzcGVjaWZpZWQgb25lIG9yIG1vcmUgdGltZXMsIGAtTGAgcmVzdHJpY3RzIGFubm90YXRpb24gdG8gdGhlIHJlcXVlc3RlZAorbGluZXMuCisKK1RoZSBvcmlnaW4gb2YgbGluZXMgaXMgYXV0b21hdGljYWxseSBmb2xsb3dlZCBhY3Jvc3Mgd2hvbGUtZmlsZQorcmVuYW1lcyAoY3VycmVudGx5IHRoZXJlIGlzIG5vIG9wdGlvbiB0byB0dXJuIHRoZSByZW5hbWUtZm9sbG93aW5nCitvZmYpLiBUbyBmb2xsb3cgbGluZXMgbW92ZWQgZnJvbSBvbmUgZmlsZSB0byBhbm90aGVyLCBvciB0byBmb2xsb3cKK2xpbmVzIHRoYXQgd2VyZSBjb3BpZWQgYW5kIHBhc3RlZCBmcm9tIGFub3RoZXIgZmlsZSwgZXRjLiwgc2VlIHRoZQorYC1DYCBhbmQgYC1NYCBvcHRpb25zLgorCitUaGUgcmVwb3J0IGRvZXMgbm90IHRlbGwgeW91IGFueXRoaW5nIGFib3V0IGxpbmVzIHdoaWNoIGhhdmUgYmVlbiBkZWxldGVkIG9yCityZXBsYWNlZDsgeW91IG5lZWQgdG8gdXNlIGEgdG9vbCBzdWNoIGFzICdnaXQgZGlmZicgb3IgdGhlICJwaWNrYXhlIgoraW50ZXJmYWNlIGJyaWVmbHkgbWVudGlvbmVkIGluIHRoZSBmb2xsb3dpbmcgcGFyYWdyYXBoLgorCitBcGFydCBmcm9tIHN1cHBvcnRpbmcgZmlsZSBhbm5vdGF0aW9uLCBHaXQgYWxzbyBzdXBwb3J0cyBzZWFyY2hpbmcgdGhlCitkZXZlbG9wbWVudCBoaXN0b3J5IGZvciB3aGVuIGEgY29kZSBzbmlwcGV0IG9jY3VycmVkIGluIGEgY2hhbmdlLiBUaGlzIG1ha2VzIGl0Citwb3NzaWJsZSB0byB0cmFjayB3aGVuIGEgY29kZSBzbmlwcGV0IHdhcyBhZGRlZCB0byBhIGZpbGUsIG1vdmVkIG9yIGNvcGllZAorYmV0d2VlbiBmaWxlcywgYW5kIGV2ZW50dWFsbHkgZGVsZXRlZCBvciByZXBsYWNlZC4gSXQgd29ya3MgYnkgc2VhcmNoaW5nIGZvcgorYSB0ZXh0IHN0cmluZyBpbiB0aGUgZGlmZi4gQSBzbWFsbCBleGFtcGxlIG9mIHRoZSBwaWNrYXhlIGludGVyZmFjZQordGhhdCBzZWFyY2hlcyBmb3IgYGJsYW1lX3VzYWdlYDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIC1TJ2JsYW1lX3VzYWdlJworNTA0MGYxN2ViYTE1NTA0YmFkNjZiMTRhNjQ1YmRkZDliMDE1ZWJiNyBibGFtZSAtUyA8YW5jZXN0cnktZmlsZT4KK2VhNGM3ZjliZjY5ZTc4MWRkMGNkODhkMmJjY2IyYmY1Y2MxNWM5YTcgZ2l0LWJsYW1lOiBNYWtlIHRoZSBvdXRwdXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09QVElPTlMKKy0tLS0tLS0KK2luY2x1ZGU6OmJsYW1lLW9wdGlvbnMudHh0W10KKworLWM6OgorCVVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBsaW5rZ2l0OmdpdC1hbm5vdGF0ZVsxXSAoRGVmYXVsdDogb2ZmKS4KKworLS1zY29yZS1kZWJ1Zzo6CisJSW5jbHVkZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgbW92ZW1lbnQgb2YKKwlsaW5lcyBiZXR3ZWVuIGZpbGVzIChzZWUgYC1DYCkgYW5kIGxpbmVzIG1vdmVkIHdpdGhpbiBhCisJZmlsZSAoc2VlIGAtTWApLiAgVGhlIGZpcnN0IG51bWJlciBsaXN0ZWQgaXMgdGhlIHNjb3JlLgorCVRoaXMgaXMgdGhlIG51bWJlciBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBkZXRlY3RlZAorCWFzIGhhdmluZyBiZWVuIG1vdmVkIGJldHdlZW4gb3Igd2l0aGluIGZpbGVzLiAgVGhpcyBtdXN0IGJlIGFib3ZlCisJYSBjZXJ0YWluIHRocmVzaG9sZCBmb3IgJ2dpdCBibGFtZScgdG8gY29uc2lkZXIgdGhvc2UgbGluZXMKKwlvZiBjb2RlIHRvIGhhdmUgYmVlbiBtb3ZlZC4KKworLWY6OgorLS1zaG93LW5hbWU6OgorCVNob3cgdGhlIGZpbGVuYW1lIGluIHRoZSBvcmlnaW5hbCBjb21taXQuICBCeSBkZWZhdWx0CisJdGhlIGZpbGVuYW1lIGlzIHNob3duIGlmIHRoZXJlIGlzIGFueSBsaW5lIHRoYXQgY2FtZSBmcm9tIGEKKwlmaWxlIHdpdGggYSBkaWZmZXJlbnQgbmFtZSwgZHVlIHRvIHJlbmFtZSBkZXRlY3Rpb24uCisKKy1uOjoKKy0tc2hvdy1udW1iZXI6OgorCVNob3cgdGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBjb21taXQgKERlZmF1bHQ6IG9mZikuCisKKy1zOjoKKwlTdXBwcmVzcyB0aGUgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCBmcm9tIHRoZSBvdXRwdXQuCisKKy1lOjoKKy0tc2hvdy1lbWFpbDo6CisJU2hvdyB0aGUgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgYXV0aG9yIG5hbWUgKERlZmF1bHQ6IG9mZikuCisJVGhpcyBjYW4gYWxzbyBiZSBjb250cm9sbGVkIHZpYSB0aGUgYGJsYW1lLnNob3dFbWFpbGAgY29uZmlnCisJb3B0aW9uLgorCistdzo6CisJSWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgdGhlIHBhcmVudCdzIHZlcnNpb24gYW5kCisJdGhlIGNoaWxkJ3MgdG8gZmluZCB3aGVyZSB0aGUgbGluZXMgY2FtZSBmcm9tLgorCistLWFiYnJldj08bj46OgorCUluc3RlYWQgb2YgdXNpbmcgdGhlIGRlZmF1bHQgNysxIGhleGFkZWNpbWFsIGRpZ2l0cyBhcyB0aGUKKwlhYmJyZXZpYXRlZCBvYmplY3QgbmFtZSwgdXNlIDxuPisxIGRpZ2l0cy4gTm90ZSB0aGF0IDEgY29sdW1uCisJaXMgdXNlZCBmb3IgYSBjYXJldCB0byBtYXJrIHRoZSBib3VuZGFyeSBjb21taXQuCisKKworVEhFIFBPUkNFTEFJTiBGT1JNQVQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoaXMgZm9ybWF0LCBlYWNoIGxpbmUgaXMgb3V0cHV0IGFmdGVyIGEgaGVhZGVyOyB0aGUKK2hlYWRlciBhdCB0aGUgbWluaW11bSBoYXMgdGhlIGZpcnN0IGxpbmUgd2hpY2ggaGFzOgorCistIDQwLWJ5dGUgU0hBLTEgb2YgdGhlIGNvbW1pdCB0aGUgbGluZSBpcyBhdHRyaWJ1dGVkIHRvOworLSB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGxpbmUgaW4gdGhlIG9yaWdpbmFsIGZpbGU7CistIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgbGluZSBpbiB0aGUgZmluYWwgZmlsZTsKKy0gb24gYSBsaW5lIHRoYXQgc3RhcnRzIGEgZ3JvdXAgb2YgbGluZXMgZnJvbSBhIGRpZmZlcmVudAorICBjb21taXQgdGhhbiB0aGUgcHJldmlvdXMgb25lLCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoaXMKKyAgZ3JvdXAuICBPbiBzdWJzZXF1ZW50IGxpbmVzIHRoaXMgZmllbGQgaXMgYWJzZW50LgorCitUaGlzIGhlYWRlciBsaW5lIGlzIGZvbGxvd2VkIGJ5IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24KK2F0IGxlYXN0IG9uY2UgZm9yIGVhY2ggY29tbWl0OgorCistIHRoZSBhdXRob3IgbmFtZSAoImF1dGhvciIpLCBlbWFpbCAoImF1dGhvci1tYWlsIiksIHRpbWUKKyAgKCJhdXRob3ItdGltZSIpLCBhbmQgdGltZSB6b25lICgiYXV0aG9yLXR6Iik7IHNpbWlsYXJseQorICBmb3IgY29tbWl0dGVyLgorLSB0aGUgZmlsZW5hbWUgaW4gdGhlIGNvbW1pdCB0aGF0IHRoZSBsaW5lIGlzIGF0dHJpYnV0ZWQgdG8uCistIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgKCJzdW1tYXJ5IikuCisKK1RoZSBjb250ZW50cyBvZiB0aGUgYWN0dWFsIGxpbmUgaXMgb3V0cHV0IGFmdGVyIHRoZSBhYm92ZQoraGVhZGVyLCBwcmVmaXhlZCBieSBhIFRBQi4gVGhpcyBpcyB0byBhbGxvdyBhZGRpbmcgbW9yZQoraGVhZGVyIGVsZW1lbnRzIGxhdGVyLgorCitUaGUgcG9yY2VsYWluIGZvcm1hdCBnZW5lcmFsbHkgc3VwcHJlc3NlcyBjb21taXQgaW5mb3JtYXRpb24gdGhhdCBoYXMKK2FscmVhZHkgYmVlbiBzZWVuLiBGb3IgZXhhbXBsZSwgdHdvIGxpbmVzIHRoYXQgYXJlIGJsYW1lZCB0byB0aGUgc2FtZQorY29tbWl0IHdpbGwgYm90aCBiZSBzaG93biwgYnV0IHRoZSBkZXRhaWxzIGZvciB0aGF0IGNvbW1pdCB3aWxsIGJlIHNob3duCitvbmx5IG9uY2UuIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQsIGJ1dCBtYXkgcmVxdWlyZSBtb3JlIHN0YXRlIGJlIGtlcHQgYnkKK3RoZSByZWFkZXIuIFRoZSBgLS1saW5lLXBvcmNlbGFpbmAgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIG91dHB1dCBmdWxsCitjb21taXQgaW5mb3JtYXRpb24gZm9yIGVhY2ggbGluZSwgYWxsb3dpbmcgc2ltcGxlciAoYnV0IGxlc3MgZWZmaWNpZW50KQordXNhZ2UgbGlrZToKKworCSMgY291bnQgdGhlIG51bWJlciBvZiBsaW5lcyBhdHRyaWJ1dGVkIHRvIGVhY2ggYXV0aG9yCisJZ2l0IGJsYW1lIC0tbGluZS1wb3JjZWxhaW4gZmlsZSB8CisJc2VkIC1uICdzL15hdXRob3IgLy9wJyB8CisJc29ydCB8IHVuaXEgLWMgfCBzb3J0IC1ybgorCisKK1NQRUNJRllJTkcgUkFOR0VTCistLS0tLS0tLS0tLS0tLS0tLQorCitVbmxpa2UgJ2dpdCBibGFtZScgYW5kICdnaXQgYW5ub3RhdGUnIGluIG9sZGVyIHZlcnNpb25zIG9mIGdpdCwgdGhlIGV4dGVudAorb2YgdGhlIGFubm90YXRpb24gY2FuIGJlIGxpbWl0ZWQgdG8gYm90aCBsaW5lIHJhbmdlcyBhbmQgcmV2aXNpb24KK3Jhbmdlcy4gVGhlIGAtTGAgb3B0aW9uLCB3aGljaCBsaW1pdHMgYW5ub3RhdGlvbiB0byBhIHJhbmdlIG9mIGxpbmVzLCBtYXkgYmUKK3NwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KKworV2hlbiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gZmluZGluZyB0aGUgb3JpZ2luIGZvcgorbGluZXMgNDAtNjAgZm9yIGZpbGUgYGZvb2AsIHlvdSBjYW4gdXNlIHRoZSBgLUxgIG9wdGlvbiBsaWtlIHNvCisodGhleSBtZWFuIHRoZSBzYW1lIHRoaW5nIC0tIGJvdGggYXNrIGZvciAyMSBsaW5lcyBzdGFydGluZyBhdAorbGluZSA0MCk6CisKKwlnaXQgYmxhbWUgLUwgNDAsNjAgZm9vCisJZ2l0IGJsYW1lIC1MIDQwLCsyMSBmb28KKworQWxzbyB5b3UgY2FuIHVzZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzcGVjaWZ5IHRoZSBsaW5lIHJhbmdlOgorCisJZ2l0IGJsYW1lIC1MICcvXnN1YiBoZWxsbyB7LywvXn0kLycgZm9vCisKK3doaWNoIGxpbWl0cyB0aGUgYW5ub3RhdGlvbiB0byB0aGUgYm9keSBvZiB0aGUgYGhlbGxvYCBzdWJyb3V0aW5lLgorCitXaGVuIHlvdSBhcmUgbm90IGludGVyZXN0ZWQgaW4gY2hhbmdlcyBvbGRlciB0aGFuIHZlcnNpb24KK3YyLjYuMTgsIG9yIGNoYW5nZXMgb2xkZXIgdGhhbiAzIHdlZWtzLCB5b3UgY2FuIHVzZSByZXZpc2lvbgorcmFuZ2Ugc3BlY2lmaWVycyAgc2ltaWxhciB0byAnZ2l0IHJldi1saXN0JzoKKworCWdpdCBibGFtZSB2Mi42LjE4Li4gLS0gZm9vCisJZ2l0IGJsYW1lIC0tc2luY2U9My53ZWVrcyAtLSBmb28KKworV2hlbiByZXZpc2lvbiByYW5nZSBzcGVjaWZpZXJzIGFyZSB1c2VkIHRvIGxpbWl0IHRoZSBhbm5vdGF0aW9uLAorbGluZXMgdGhhdCBoYXZlIG5vdCBjaGFuZ2VkIHNpbmNlIHRoZSByYW5nZSBib3VuZGFyeSAoZWl0aGVyIHRoZQorY29tbWl0IHYyLjYuMTggb3IgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCB0aGF0IGlzIG1vcmUgdGhhbiAzCit3ZWVrcyBvbGQgaW4gdGhlIGFib3ZlIGV4YW1wbGUpIGFyZSBibGFtZWQgZm9yIHRoYXQgcmFuZ2UKK2JvdW5kYXJ5IGNvbW1pdC4KKworQSBwYXJ0aWN1bGFybHkgdXNlZnVsIHdheSBpcyB0byBzZWUgaWYgYW4gYWRkZWQgZmlsZSBoYXMgbGluZXMKK2NyZWF0ZWQgYnkgY29weS1hbmQtcGFzdGUgZnJvbSBleGlzdGluZyBmaWxlcy4gIFNvbWV0aW1lcyB0aGlzCitpbmRpY2F0ZXMgdGhhdCB0aGUgZGV2ZWxvcGVyIHdhcyBiZWluZyBzbG9wcHkgYW5kIGRpZCBub3QKK3JlZmFjdG9yIHRoZSBjb2RlIHByb3Blcmx5LiAgWW91IGNhbiBmaXJzdCBmaW5kIHRoZSBjb21taXQgdGhhdAoraW50cm9kdWNlZCB0aGUgZmlsZSB3aXRoOgorCisJZ2l0IGxvZyAtLWRpZmYtZmlsdGVyPUEgLS1wcmV0dHk9c2hvcnQgLS0gZm9vCisKK2FuZCB0aGVuIGFubm90YXRlIHRoZSBjaGFuZ2UgYmV0d2VlbiB0aGUgY29tbWl0IGFuZCBpdHMKK3BhcmVudHMsIHVzaW5nIGBjb21taXReIWAgbm90YXRpb246CisKKwlnaXQgYmxhbWUgLUMgLUMgLWYgJGNvbW1pdF4hIC0tIGZvbworCisKK0lOQ1JFTUVOVEFMIE9VVFBVVAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gY2FsbGVkIHdpdGggYC0taW5jcmVtZW50YWxgIG9wdGlvbiwgdGhlIGNvbW1hbmQgb3V0cHV0cyB0aGUKK3Jlc3VsdCBhcyBpdCBpcyBidWlsdC4gIFRoZSBvdXRwdXQgZ2VuZXJhbGx5IHdpbGwgdGFsayBhYm91dAorbGluZXMgdG91Y2hlZCBieSBtb3JlIHJlY2VudCBjb21taXRzIGZpcnN0IChpLmUuIHRoZSBsaW5lcyB3aWxsCitiZSBhbm5vdGF0ZWQgb3V0IG9mIG9yZGVyKSBhbmQgaXMgbWVhbnQgdG8gYmUgdXNlZCBieQoraW50ZXJhY3RpdmUgdmlld2Vycy4KKworVGhlIG91dHB1dCBmb3JtYXQgaXMgc2ltaWxhciB0byB0aGUgUG9yY2VsYWluIGZvcm1hdCwgYnV0IGl0Citkb2VzIG5vdCBjb250YWluIHRoZSBhY3R1YWwgbGluZXMgZnJvbSB0aGUgZmlsZSB0aGF0IGlzIGJlaW5nCithbm5vdGF0ZWQuCisKKy4gRWFjaCBibGFtZSBlbnRyeSBhbHdheXMgc3RhcnRzIHdpdGggYSBsaW5lIG9mOgorCisJPDQwLWJ5dGUgaGV4IHNoYTE+IDxzb3VyY2VsaW5lPiA8cmVzdWx0bGluZT4gPG51bV9saW5lcz4KKysKK0xpbmUgbnVtYmVycyBjb3VudCBmcm9tIDEuCisKKy4gVGhlIGZpcnN0IHRpbWUgdGhhdCBhIGNvbW1pdCBzaG93cyB1cCBpbiB0aGUgc3RyZWFtLCBpdCBoYXMgdmFyaW91cworICBvdGhlciBpbmZvcm1hdGlvbiBhYm91dCBpdCBwcmludGVkIG91dCB3aXRoIGEgb25lLXdvcmQgdGFnIGF0IHRoZQorICBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lIGRlc2NyaWJpbmcgdGhlIGV4dHJhIGNvbW1pdCBpbmZvcm1hdGlvbiAoYXV0aG9yLAorICBlbWFpbCwgY29tbWl0dGVyLCBkYXRlcywgc3VtbWFyeSwgZXRjLikuCisKKy4gVW5saWtlIHRoZSBQb3JjZWxhaW4gZm9ybWF0LCB0aGUgZmlsZW5hbWUgaW5mb3JtYXRpb24gaXMgYWx3YXlzCisgIGdpdmVuIGFuZCB0ZXJtaW5hdGVzIHRoZSBlbnRyeToKKworCSJmaWxlbmFtZSIgPHdoaXRlc3BhY2UtcXVvdGVkLWZpbGVuYW1lLWdvZXMtaGVyZT4KKysKK2FuZCB0aHVzIGl0IGlzIHJlYWxseSBxdWl0ZSBlYXN5IHRvIHBhcnNlIGZvciBzb21lIGxpbmUtIGFuZCB3b3JkLW9yaWVudGVkCitwYXJzZXIgKHdoaWNoIHNob3VsZCBiZSBxdWl0ZSBuYXR1cmFsIGZvciBtb3N0IHNjcmlwdGluZyBsYW5ndWFnZXMpLgorKworW05PVEVdCitGb3IgcGVvcGxlIHdobyBkbyBwYXJzaW5nOiB0byBtYWtlIGl0IG1vcmUgcm9idXN0LCBqdXN0IGlnbm9yZSBhbnkKK2xpbmVzIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBsYXN0IG9uZSAoIjxzaGExPiIgYW5kICJmaWxlbmFtZSIgbGluZXMpCit3aGVyZSB5b3UgZG8gbm90IHJlY29nbml6ZSB0aGUgdGFnIHdvcmRzIChvciBjYXJlIGFib3V0IHRoYXQgcGFydGljdWxhcgorb25lKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSAiZXh0ZW5kZWQgaW5mb3JtYXRpb24iIGxpbmVzLiBUaGF0IHdheSwgaWYKK3RoZXJlIGlzIGV2ZXIgYWRkZWQgaW5mb3JtYXRpb24gKGxpa2UgdGhlIGNvbW1pdCBlbmNvZGluZyBvciBleHRlbmRlZAorY29tbWl0IGNvbW1lbnRhcnkpLCBhIGJsYW1lIHZpZXdlciB3aWxsIG5vdCBjYXJlLgorCisKK01BUFBJTkcgQVVUSE9SUworLS0tLS0tLS0tLS0tLS0tCisKK2luY2x1ZGU6Om1haWxtYXAudHh0W10KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWFubm90YXRlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYnJhbmNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1MjA2ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQKQEAgLTAsMCArMSwzODMgQEAKK2dpdC1icmFuY2goMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWJyYW5jaCAtIExpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBicmFuY2gnIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc2hvdy1jdXJyZW50XQorCVstdiBbLS1hYmJyZXY9PGxlbmd0aD4gfCAtLW5vLWFiYnJldl1dCisJWy0tY29sdW1uWz08b3B0aW9ucz5dIHwgLS1uby1jb2x1bW5dIFstLXNvcnQ9PGtleT5dCisJWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbW1pdD5dXQorCVstLWNvbnRhaW5zIFs8Y29tbWl0XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0KKwlbLS1wb2ludHMtYXQgPG9iamVjdD5dIFstLWZvcm1hdD08Zm9ybWF0Pl0KKwlbKC1yIHwgLS1yZW1vdGVzKSB8ICgtYSB8IC0tYWxsKV0KKwlbLS1saXN0XSBbPHBhdHRlcm4+Li4uXQorJ2dpdCBicmFuY2gnIFstLXRyYWNrIHwgLS1uby10cmFja10gWy1mXSA8YnJhbmNobmFtZT4gWzxzdGFydC1wb2ludD5dCisnZ2l0IGJyYW5jaCcgKC0tc2V0LXVwc3RyZWFtLXRvPTx1cHN0cmVhbT4gfCAtdSA8dXBzdHJlYW0+KSBbPGJyYW5jaG5hbWU+XQorJ2dpdCBicmFuY2gnIC0tdW5zZXQtdXBzdHJlYW0gWzxicmFuY2huYW1lPl0KKydnaXQgYnJhbmNoJyAoLW0gfCAtTSkgWzxvbGRicmFuY2g+XSA8bmV3YnJhbmNoPgorJ2dpdCBicmFuY2gnICgtYyB8IC1DKSBbPG9sZGJyYW5jaD5dIDxuZXdicmFuY2g+CisnZ2l0IGJyYW5jaCcgKC1kIHwgLUQpIFstcl0gPGJyYW5jaG5hbWU+Li4uCisnZ2l0IGJyYW5jaCcgLS1lZGl0LWRlc2NyaXB0aW9uIFs8YnJhbmNobmFtZT5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitJZiBgLS1saXN0YCBpcyBnaXZlbiwgb3IgaWYgdGhlcmUgYXJlIG5vIG5vbi1vcHRpb24gYXJndW1lbnRzLCBleGlzdGluZworYnJhbmNoZXMgYXJlIGxpc3RlZDsgdGhlIGN1cnJlbnQgYnJhbmNoIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgaW4gZ3JlZW4gYW5kCittYXJrZWQgd2l0aCBhbiBhc3Rlcmlzay4gIEFueSBicmFuY2hlcyBjaGVja2VkIG91dCBpbiBsaW5rZWQgd29ya3RyZWVzIHdpbGwKK2JlIGhpZ2hsaWdodGVkIGluIGN5YW4gYW5kIG1hcmtlZCB3aXRoIGEgcGx1cyBzaWduLiBPcHRpb24gYC1yYCBjYXVzZXMgdGhlCityZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgdG8gYmUgbGlzdGVkLAorYW5kIG9wdGlvbiBgLWFgIHNob3dzIGJvdGggbG9jYWwgYW5kIHJlbW90ZSBicmFuY2hlcy4KKworSWYgYSBgPHBhdHRlcm4+YAoraXMgZ2l2ZW4sIGl0IGlzIHVzZWQgYXMgYSBzaGVsbCB3aWxkY2FyZCB0byByZXN0cmljdCB0aGUgb3V0cHV0IHRvCittYXRjaGluZyBicmFuY2hlcy4gSWYgbXVsdGlwbGUgcGF0dGVybnMgYXJlIGdpdmVuLCBhIGJyYW5jaCBpcyBzaG93biBpZgoraXQgbWF0Y2hlcyBhbnkgb2YgdGhlIHBhdHRlcm5zLgorCitOb3RlIHRoYXQgd2hlbiBwcm92aWRpbmcgYQorYDxwYXR0ZXJuPmAsIHlvdSBtdXN0IHVzZSBgLS1saXN0YDsgb3RoZXJ3aXNlIHRoZSBjb21tYW5kIG1heSBiZSBpbnRlcnByZXRlZAorYXMgYnJhbmNoIGNyZWF0aW9uLgorCitXaXRoIGAtLWNvbnRhaW5zYCwgc2hvd3Mgb25seSB0aGUgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBuYW1lZCBjb21taXQKKyhpbiBvdGhlciB3b3JkcywgdGhlIGJyYW5jaGVzIHdob3NlIHRpcCBjb21taXRzIGFyZSBkZXNjZW5kYW50cyBvZiB0aGUKK25hbWVkIGNvbW1pdCksIGAtLW5vLWNvbnRhaW5zYCBpbnZlcnRzIGl0LiBXaXRoIGAtLW1lcmdlZGAsIG9ubHkgYnJhbmNoZXMKK21lcmdlZCBpbnRvIHRoZSBuYW1lZCBjb21taXQgKGkuZS4gdGhlIGJyYW5jaGVzIHdob3NlIHRpcCBjb21taXRzIGFyZQorcmVhY2hhYmxlIGZyb20gdGhlIG5hbWVkIGNvbW1pdCkgd2lsbCBiZSBsaXN0ZWQuICBXaXRoIGAtLW5vLW1lcmdlZGAgb25seQorYnJhbmNoZXMgbm90IG1lcmdlZCBpbnRvIHRoZSBuYW1lZCBjb21taXQgd2lsbCBiZSBsaXN0ZWQuICBJZiB0aGUgPGNvbW1pdD4KK2FyZ3VtZW50IGlzIG1pc3NpbmcgaXQgZGVmYXVsdHMgdG8gYEhFQURgIChpLmUuIHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQKK2JyYW5jaCkuCisKK1RoZSBjb21tYW5kJ3Mgc2Vjb25kIGZvcm0gY3JlYXRlcyBhIG5ldyBicmFuY2ggaGVhZCBuYW1lZCA8YnJhbmNobmFtZT4KK3doaWNoIHBvaW50cyB0byB0aGUgY3VycmVudCBgSEVBRGAsIG9yIDxzdGFydC1wb2ludD4gaWYgZ2l2ZW4uIEFzIGEKK3NwZWNpYWwgY2FzZSwgZm9yIDxzdGFydC1wb2ludD4sIHlvdSBtYXkgdXNlIGAiQS4uLkIiYCBhcyBhIHNob3J0Y3V0IGZvcgordGhlIG1lcmdlIGJhc2Ugb2YgYEFgIGFuZCBgQmAgaWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZS4gWW91CitjYW4gbGVhdmUgb3V0IGF0IG1vc3Qgb25lIG9mIGBBYCBhbmQgYEJgLCBpbiB3aGljaCBjYXNlIGl0IGRlZmF1bHRzIHRvCitgSEVBRGAuCisKK05vdGUgdGhhdCB0aGlzIHdpbGwgY3JlYXRlIHRoZSBuZXcgYnJhbmNoLCBidXQgaXQgd2lsbCBub3Qgc3dpdGNoIHRoZQord29ya2luZyB0cmVlIHRvIGl0OyB1c2UgImdpdCBzd2l0Y2ggPG5ld2JyYW5jaD4iIHRvIHN3aXRjaCB0byB0aGUKK25ldyBicmFuY2guCisKK1doZW4gYSBsb2NhbCBicmFuY2ggaXMgc3RhcnRlZCBvZmYgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLCBHaXQgc2V0cyB1cCB0aGUKK2JyYW5jaCAoc3BlY2lmaWNhbGx5IHRoZSBgYnJhbmNoLjxuYW1lPi5yZW1vdGVgIGFuZCBgYnJhbmNoLjxuYW1lPi5tZXJnZWAKK2NvbmZpZ3VyYXRpb24gZW50cmllcykgc28gdGhhdCAnZ2l0IHB1bGwnIHdpbGwgYXBwcm9wcmlhdGVseSBtZXJnZSBmcm9tCit0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaC4gVGhpcyBiZWhhdmlvciBtYXkgYmUgY2hhbmdlZCB2aWEgdGhlIGdsb2JhbAorYGJyYW5jaC5hdXRvU2V0dXBNZXJnZWAgY29uZmlndXJhdGlvbiBmbGFnLiBUaGF0IHNldHRpbmcgY2FuIGJlCitvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBgLS10cmFja2AgYW5kIGAtLW5vLXRyYWNrYCBvcHRpb25zLCBhbmQKK2NoYW5nZWQgbGF0ZXIgdXNpbmcgYGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG9gLgorCitXaXRoIGEgYC1tYCBvciBgLU1gIG9wdGlvbiwgPG9sZGJyYW5jaD4gd2lsbCBiZSByZW5hbWVkIHRvIDxuZXdicmFuY2g+LgorSWYgPG9sZGJyYW5jaD4gaGFkIGEgY29ycmVzcG9uZGluZyByZWZsb2csIGl0IGlzIHJlbmFtZWQgdG8gbWF0Y2gKKzxuZXdicmFuY2g+LCBhbmQgYSByZWZsb2cgZW50cnkgaXMgY3JlYXRlZCB0byByZW1lbWJlciB0aGUgYnJhbmNoCityZW5hbWluZy4gSWYgPG5ld2JyYW5jaD4gZXhpc3RzLCAtTSBtdXN0IGJlIHVzZWQgdG8gZm9yY2UgdGhlIHJlbmFtZQordG8gaGFwcGVuLgorCitUaGUgYC1jYCBhbmQgYC1DYCBvcHRpb25zIGhhdmUgdGhlIGV4YWN0IHNhbWUgc2VtYW50aWNzIGFzIGAtbWAgYW5kCitgLU1gLCBleGNlcHQgaW5zdGVhZCBvZiB0aGUgYnJhbmNoIGJlaW5nIHJlbmFtZWQgaXQgYWxvbmcgd2l0aCBpdHMKK2NvbmZpZyBhbmQgcmVmbG9nIHdpbGwgYmUgY29waWVkIHRvIGEgbmV3IG5hbWUuCisKK1dpdGggYSBgLWRgIG9yIGAtRGAgb3B0aW9uLCBgPGJyYW5jaG5hbWU+YCB3aWxsIGJlIGRlbGV0ZWQuICBZb3UgbWF5CitzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgYnJhbmNoIGZvciBkZWxldGlvbi4gIElmIHRoZSBicmFuY2ggY3VycmVudGx5CitoYXMgYSByZWZsb2cgdGhlbiB0aGUgcmVmbG9nIHdpbGwgYWxzbyBiZSBkZWxldGVkLgorCitVc2UgYC1yYCB0b2dldGhlciB3aXRoIGAtZGAgdG8gZGVsZXRlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcy4gTm90ZSwgdGhhdCBpdAorb25seSBtYWtlcyBzZW5zZSB0byBkZWxldGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGlmIHRoZXkgbm8gbG9uZ2VyIGV4aXN0CitpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgb3IgaWYgJ2dpdCBmZXRjaCcgd2FzIGNvbmZpZ3VyZWQgbm90IHRvIGZldGNoCit0aGVtIGFnYWluLiBTZWUgYWxzbyB0aGUgJ3BydW5lJyBzdWJjb21tYW5kIG9mIGxpbmtnaXQ6Z2l0LXJlbW90ZVsxXSBmb3IgYQord2F5IHRvIGNsZWFuIHVwIGFsbCBvYnNvbGV0ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCisKKworT1BUSU9OUworLS0tLS0tLQorLWQ6OgorLS1kZWxldGU6OgorCURlbGV0ZSBhIGJyYW5jaC4gVGhlIGJyYW5jaCBtdXN0IGJlIGZ1bGx5IG1lcmdlZCBpbiBpdHMKKwl1cHN0cmVhbSBicmFuY2gsIG9yIGluIGBIRUFEYCBpZiBubyB1cHN0cmVhbSB3YXMgc2V0IHdpdGgKKwlgLS10cmFja2Agb3IgYC0tc2V0LXVwc3RyZWFtLXRvYC4KKworLUQ6OgorCVNob3J0Y3V0IGZvciBgLS1kZWxldGUgLS1mb3JjZWAuCisKKy0tY3JlYXRlLXJlZmxvZzo6CisJQ3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2cuICBUaGlzIGFjdGl2YXRlcyByZWNvcmRpbmcgb2YKKwlhbGwgY2hhbmdlcyBtYWRlIHRvIHRoZSBicmFuY2ggcmVmLCBlbmFibGluZyB1c2Ugb2YgZGF0ZQorCWJhc2VkIHNoYTEgZXhwcmVzc2lvbnMgc3VjaCBhcyAiPGJyYW5jaG5hbWU+QFx7eWVzdGVyZGF5fSIuCisJTm90ZSB0aGF0IGluIG5vbi1iYXJlIHJlcG9zaXRvcmllcywgcmVmbG9ncyBhcmUgdXN1YWxseQorCWVuYWJsZWQgYnkgZGVmYXVsdCBieSB0aGUgYGNvcmUubG9nQWxsUmVmVXBkYXRlc2AgY29uZmlnIG9wdGlvbi4KKwlUaGUgbmVnYXRlZCBmb3JtIGAtLW5vLWNyZWF0ZS1yZWZsb2dgIG9ubHkgb3ZlcnJpZGVzIGFuIGVhcmxpZXIKKwlgLS1jcmVhdGUtcmVmbG9nYCwgYnV0IGN1cnJlbnRseSBkb2VzIG5vdCBuZWdhdGUgdGhlIHNldHRpbmcgb2YKKwlgY29yZS5sb2dBbGxSZWZVcGRhdGVzYC4KKworLWY6OgorLS1mb3JjZTo6CisJUmVzZXQgPGJyYW5jaG5hbWU+IHRvIDxzdGFydHBvaW50PiwgZXZlbiBpZiA8YnJhbmNobmFtZT4gZXhpc3RzCisJYWxyZWFkeS4gV2l0aG91dCBgLWZgLCAnZ2l0IGJyYW5jaCcgcmVmdXNlcyB0byBjaGFuZ2UgYW4gZXhpc3RpbmcgYnJhbmNoLgorCUluIGNvbWJpbmF0aW9uIHdpdGggYC1kYCAob3IgYC0tZGVsZXRlYCksIGFsbG93IGRlbGV0aW5nIHRoZQorCWJyYW5jaCBpcnJlc3BlY3RpdmUgb2YgaXRzIG1lcmdlZCBzdGF0dXMuIEluIGNvbWJpbmF0aW9uIHdpdGgKKwlgLW1gIChvciBgLS1tb3ZlYCksIGFsbG93IHJlbmFtaW5nIHRoZSBicmFuY2ggZXZlbiBpZiB0aGUgbmV3CisJYnJhbmNoIG5hbWUgYWxyZWFkeSBleGlzdHMsIHRoZSBzYW1lIGFwcGxpZXMgZm9yIGAtY2AgKG9yIGAtLWNvcHlgKS4KKworLW06OgorLS1tb3ZlOjoKKwlNb3ZlL3JlbmFtZSBhIGJyYW5jaCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgcmVmbG9nLgorCistTTo6CisJU2hvcnRjdXQgZm9yIGAtLW1vdmUgLS1mb3JjZWAuCisKKy1jOjoKKy0tY29weTo6CisJQ29weSBhIGJyYW5jaCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgcmVmbG9nLgorCistQzo6CisJU2hvcnRjdXQgZm9yIGAtLWNvcHkgLS1mb3JjZWAuCisKKy0tY29sb3JbPTx3aGVuPl06OgorCUNvbG9yIGJyYW5jaGVzIHRvIGhpZ2hsaWdodCBjdXJyZW50LCBsb2NhbCwgYW5kCisJcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLgorCVRoZSB2YWx1ZSBtdXN0IGJlIGFsd2F5cyAodGhlIGRlZmF1bHQpLCBuZXZlciwgb3IgYXV0by4KKworLS1uby1jb2xvcjo6CisJVHVybiBvZmYgYnJhbmNoIGNvbG9ycywgZXZlbiB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZ2l2ZXMgdGhlCisJZGVmYXVsdCB0byBjb2xvciBvdXRwdXQuCisJU2FtZSBhcyBgLS1jb2xvcj1uZXZlcmAuCisKKy1pOjoKKy0taWdub3JlLWNhc2U6OgorCVNvcnRpbmcgYW5kIGZpbHRlcmluZyBicmFuY2hlcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZS4KKworLS1jb2x1bW5bPTxvcHRpb25zPl06OgorLS1uby1jb2x1bW46OgorCURpc3BsYXkgYnJhbmNoIGxpc3RpbmcgaW4gY29sdW1ucy4gU2VlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKwljb2x1bW4uYnJhbmNoIGZvciBvcHRpb24gc3ludGF4LmAtLWNvbHVtbmAgYW5kIGAtLW5vLWNvbHVtbmAKKwl3aXRob3V0IG9wdGlvbnMgYXJlIGVxdWl2YWxlbnQgdG8gJ2Fsd2F5cycgYW5kICduZXZlcicgcmVzcGVjdGl2ZWx5LgorKworVGhpcyBvcHRpb24gaXMgb25seSBhcHBsaWNhYmxlIGluIG5vbi12ZXJib3NlIG1vZGUuCisKKy1yOjoKKy0tcmVtb3Rlczo6CisJTGlzdCBvciBkZWxldGUgKGlmIHVzZWQgd2l0aCAtZCkgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcy4KKwlDb21iaW5lIHdpdGggYC0tbGlzdGAgdG8gbWF0Y2ggdGhlIG9wdGlvbmFsIHBhdHRlcm4ocykuCisKKy1hOjoKKy0tYWxsOjoKKwlMaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGFuZCBsb2NhbCBicmFuY2hlcy4KKwlDb21iaW5lIHdpdGggYC0tbGlzdGAgdG8gbWF0Y2ggb3B0aW9uYWwgcGF0dGVybihzKS4KKworLWw6OgorLS1saXN0OjoKKwlMaXN0IGJyYW5jaGVzLiAgV2l0aCBvcHRpb25hbCBgPHBhdHRlcm4+Li4uYCwgZS5nLiBgZ2l0CisJYnJhbmNoIC0tbGlzdCAnbWFpbnQtKidgLCBsaXN0IG9ubHkgdGhlIGJyYW5jaGVzIHRoYXQgbWF0Y2gKKwl0aGUgcGF0dGVybihzKS4KKworLS1zaG93LWN1cnJlbnQ6OgorCVByaW50IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJyYW5jaC4gSW4gZGV0YWNoZWQgSEVBRCBzdGF0ZSwKKwlub3RoaW5nIGlzIHByaW50ZWQuCisKKy12OjoKKy12djo6CistLXZlcmJvc2U6OgorCVdoZW4gaW4gbGlzdCBtb2RlLAorCXNob3cgc2hhMSBhbmQgY29tbWl0IHN1YmplY3QgbGluZSBmb3IgZWFjaCBoZWFkLCBhbG9uZyB3aXRoCisJcmVsYXRpb25zaGlwIHRvIHVwc3RyZWFtIGJyYW5jaCAoaWYgYW55KS4gSWYgZ2l2ZW4gdHdpY2UsIHByaW50CisJdGhlIHBhdGggb2YgdGhlIGxpbmtlZCB3b3JrdHJlZSAoaWYgYW55KSBhbmQgdGhlIG5hbWUgb2YgdGhlIHVwc3RyZWFtCisJYnJhbmNoLCBhcyB3ZWxsIChzZWUgYWxzbyBgZ2l0IHJlbW90ZSBzaG93IDxyZW1vdGU+YCkuICBOb3RlIHRoYXQgdGhlCisJY3VycmVudCB3b3JrdHJlZSdzIEhFQUQgd2lsbCBub3QgaGF2ZSBpdHMgcGF0aCBwcmludGVkIChpdCB3aWxsIGFsd2F5cworCWJlIHlvdXIgY3VycmVudCBkaXJlY3RvcnkpLgorCistcTo6CistLXF1aWV0OjoKKwlCZSBtb3JlIHF1aWV0IHdoZW4gY3JlYXRpbmcgb3IgZGVsZXRpbmcgYSBicmFuY2gsIHN1cHByZXNzaW5nCisJbm9uLWVycm9yIG1lc3NhZ2VzLgorCistLWFiYnJldj08bGVuZ3RoPjo6CisJQWx0ZXIgdGhlIHNoYTEncyBtaW5pbXVtIGRpc3BsYXkgbGVuZ3RoIGluIHRoZSBvdXRwdXQgbGlzdGluZy4KKwlUaGUgZGVmYXVsdCB2YWx1ZSBpcyA3IGFuZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYGNvcmUuYWJicmV2YAorCWNvbmZpZyBvcHRpb24uCisKKy0tbm8tYWJicmV2OjoKKwlEaXNwbGF5IHRoZSBmdWxsIHNoYTFzIGluIHRoZSBvdXRwdXQgbGlzdGluZyByYXRoZXIgdGhhbiBhYmJyZXZpYXRpbmcgdGhlbS4KKworLXQ6OgorLS10cmFjazo6CisJV2hlbiBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHNldCB1cCBgYnJhbmNoLjxuYW1lPi5yZW1vdGVgIGFuZAorCWBicmFuY2guPG5hbWU+Lm1lcmdlYCBjb25maWd1cmF0aW9uIGVudHJpZXMgdG8gbWFyayB0aGUKKwlzdGFydC1wb2ludCBicmFuY2ggYXMgInVwc3RyZWFtIiBmcm9tIHRoZSBuZXcgYnJhbmNoLiBUaGlzCisJY29uZmlndXJhdGlvbiB3aWxsIHRlbGwgZ2l0IHRvIHNob3cgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZQorCXR3byBicmFuY2hlcyBpbiBgZ2l0IHN0YXR1c2AgYW5kIGBnaXQgYnJhbmNoIC12YC4gRnVydGhlcm1vcmUsCisJaXQgZGlyZWN0cyBgZ2l0IHB1bGxgIHdpdGhvdXQgYXJndW1lbnRzIHRvIHB1bGwgZnJvbSB0aGUKKwl1cHN0cmVhbSB3aGVuIHRoZSBuZXcgYnJhbmNoIGlzIGNoZWNrZWQgb3V0LgorKworVGhpcyBiZWhhdmlvciBpcyB0aGUgZGVmYXVsdCB3aGVuIHRoZSBzdGFydCBwb2ludCBpcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2guCitTZXQgdGhlIGJyYW5jaC5hdXRvU2V0dXBNZXJnZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGBmYWxzZWAgaWYgeW91Cit3YW50IGBnaXQgc3dpdGNoYCwgYGdpdCBjaGVja291dGAgYW5kIGBnaXQgYnJhbmNoYCB0byBhbHdheXMgYmVoYXZlIGFzIGlmIGAtLW5vLXRyYWNrYAord2VyZSBnaXZlbi4gU2V0IGl0IHRvIGBhbHdheXNgIGlmIHlvdSB3YW50IHRoaXMgYmVoYXZpb3Igd2hlbiB0aGUKK3N0YXJ0LXBvaW50IGlzIGVpdGhlciBhIGxvY2FsIG9yIHJlbW90ZS10cmFja2luZyBicmFuY2guCisKKy0tbm8tdHJhY2s6OgorCURvIG5vdCBzZXQgdXAgInVwc3RyZWFtIiBjb25maWd1cmF0aW9uLCBldmVuIGlmIHRoZQorCWJyYW5jaC5hdXRvU2V0dXBNZXJnZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIHRydWUuCisKKy0tc2V0LXVwc3RyZWFtOjoKKwlBcyB0aGlzIG9wdGlvbiBoYWQgY29uZnVzaW5nIHN5bnRheCwgaXQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KKwlQbGVhc2UgdXNlIGAtLXRyYWNrYCBvciBgLS1zZXQtdXBzdHJlYW0tdG9gIGluc3RlYWQuCisKKy11IDx1cHN0cmVhbT46OgorLS1zZXQtdXBzdHJlYW0tdG89PHVwc3RyZWFtPjo6CisJU2V0IHVwIDxicmFuY2huYW1lPidzIHRyYWNraW5nIGluZm9ybWF0aW9uIHNvIDx1cHN0cmVhbT4gaXMKKwljb25zaWRlcmVkIDxicmFuY2huYW1lPidzIHVwc3RyZWFtIGJyYW5jaC4gSWYgbm8gPGJyYW5jaG5hbWU+CisJaXMgc3BlY2lmaWVkLCB0aGVuIGl0IGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGJyYW5jaC4KKworLS11bnNldC11cHN0cmVhbTo6CisJUmVtb3ZlIHRoZSB1cHN0cmVhbSBpbmZvcm1hdGlvbiBmb3IgPGJyYW5jaG5hbWU+LiBJZiBubyBicmFuY2gKKwlpcyBzcGVjaWZpZWQgaXQgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLgorCistLWVkaXQtZGVzY3JpcHRpb246OgorCU9wZW4gYW4gZWRpdG9yIGFuZCBlZGl0IHRoZSB0ZXh0IHRvIGV4cGxhaW4gd2hhdCB0aGUgYnJhbmNoIGlzCisJZm9yLCB0byBiZSB1c2VkIGJ5IHZhcmlvdXMgb3RoZXIgY29tbWFuZHMgKGUuZy4gYGZvcm1hdC1wYXRjaGAsCisJYHJlcXVlc3QtcHVsbGAsIGFuZCBgbWVyZ2VgIChpZiBlbmFibGVkKSkuIE11bHRpLWxpbmUgZXhwbGFuYXRpb25zCisJbWF5IGJlIHVzZWQuCisKKy0tY29udGFpbnMgWzxjb21taXQ+XTo6CisJT25seSBsaXN0IGJyYW5jaGVzIHdoaWNoIGNvbnRhaW4gdGhlIHNwZWNpZmllZCBjb21taXQgKEhFQUQKKwlpZiBub3Qgc3BlY2lmaWVkKS4gSW1wbGllcyBgLS1saXN0YC4KKworLS1uby1jb250YWlucyBbPGNvbW1pdD5dOjoKKwlPbmx5IGxpc3QgYnJhbmNoZXMgd2hpY2ggZG9uJ3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIGNvbW1pdAorCShIRUFEIGlmIG5vdCBzcGVjaWZpZWQpLiBJbXBsaWVzIGAtLWxpc3RgLgorCistLW1lcmdlZCBbPGNvbW1pdD5dOjoKKwlPbmx5IGxpc3QgYnJhbmNoZXMgd2hvc2UgdGlwcyBhcmUgcmVhY2hhYmxlIGZyb20gdGhlCisJc3BlY2lmaWVkIGNvbW1pdCAoSEVBRCBpZiBub3Qgc3BlY2lmaWVkKS4gSW1wbGllcyBgLS1saXN0YCwKKwlpbmNvbXBhdGlibGUgd2l0aCBgLS1uby1tZXJnZWRgLgorCistLW5vLW1lcmdlZCBbPGNvbW1pdD5dOjoKKwlPbmx5IGxpc3QgYnJhbmNoZXMgd2hvc2UgdGlwcyBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIHRoZQorCXNwZWNpZmllZCBjb21taXQgKEhFQUQgaWYgbm90IHNwZWNpZmllZCkuIEltcGxpZXMgYC0tbGlzdGAsCisJaW5jb21wYXRpYmxlIHdpdGggYC0tbWVyZ2VkYC4KKworPGJyYW5jaG5hbWU+OjoKKwlUaGUgbmFtZSBvZiB0aGUgYnJhbmNoIHRvIGNyZWF0ZSBvciBkZWxldGUuCisJVGhlIG5ldyBicmFuY2ggbmFtZSBtdXN0IHBhc3MgYWxsIGNoZWNrcyBkZWZpbmVkIGJ5CisJbGlua2dpdDpnaXQtY2hlY2stcmVmLWZvcm1hdFsxXS4gIFNvbWUgb2YgdGhlc2UgY2hlY2tzCisJbWF5IHJlc3RyaWN0IHRoZSBjaGFyYWN0ZXJzIGFsbG93ZWQgaW4gYSBicmFuY2ggbmFtZS4KKworPHN0YXJ0LXBvaW50Pjo6CisJVGhlIG5ldyBicmFuY2ggaGVhZCB3aWxsIHBvaW50IHRvIHRoaXMgY29tbWl0LiAgSXQgbWF5IGJlCisJZ2l2ZW4gYXMgYSBicmFuY2ggbmFtZSwgYSBjb21taXQtaWQsIG9yIGEgdGFnLiAgSWYgdGhpcworCW9wdGlvbiBpcyBvbWl0dGVkLCB0aGUgY3VycmVudCBIRUFEIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCis8b2xkYnJhbmNoPjo6CisJVGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgYnJhbmNoIHRvIHJlbmFtZS4KKworPG5ld2JyYW5jaD46OgorCVRoZSBuZXcgbmFtZSBmb3IgYW4gZXhpc3RpbmcgYnJhbmNoLiBUaGUgc2FtZSByZXN0cmljdGlvbnMgYXMgZm9yCisJPGJyYW5jaG5hbWU+IGFwcGx5LgorCistLXNvcnQ9PGtleT46OgorCVNvcnQgYmFzZWQgb24gdGhlIGtleSBnaXZlbi4gUHJlZml4IGAtYCB0byBzb3J0IGluIGRlc2NlbmRpbmcKKwlvcmRlciBvZiB0aGUgdmFsdWUuIFlvdSBtYXkgdXNlIHRoZSAtLXNvcnQ9PGtleT4gb3B0aW9uCisJbXVsdGlwbGUgdGltZXMsIGluIHdoaWNoIGNhc2UgdGhlIGxhc3Qga2V5IGJlY29tZXMgdGhlIHByaW1hcnkKKwlrZXkuIFRoZSBrZXlzIHN1cHBvcnRlZCBhcmUgdGhlIHNhbWUgYXMgdGhvc2UgaW4gYGdpdAorCWZvci1lYWNoLXJlZmAuIFNvcnQgb3JkZXIgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIGNvbmZpZ3VyZWQgZm9yIHRoZQorCWBicmFuY2guc29ydGAgdmFyaWFibGUgaWYgZXhpc3RzLCBvciB0byBzb3J0aW5nIGJhc2VkIG9uIHRoZQorCWZ1bGwgcmVmbmFtZSAoaW5jbHVkaW5nIGByZWZzLy4uLmAgcHJlZml4KS4gVGhpcyBsaXN0cworCWRldGFjaGVkIEhFQUQgKGlmIHByZXNlbnQpIGZpcnN0LCB0aGVuIGxvY2FsIGJyYW5jaGVzIGFuZAorCWZpbmFsbHkgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLiBTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCisKKy0tcG9pbnRzLWF0IDxvYmplY3Q+OjoKKwlPbmx5IGxpc3QgYnJhbmNoZXMgb2YgdGhlIGdpdmVuIG9iamVjdC4KKworLS1mb3JtYXQgPGZvcm1hdD46OgorCUEgc3RyaW5nIHRoYXQgaW50ZXJwb2xhdGVzIGAlKGZpZWxkbmFtZSlgIGZyb20gYSBicmFuY2ggcmVmIGJlaW5nIHNob3duCisJYW5kIHRoZSBvYmplY3QgaXQgcG9pbnRzIGF0LiAgVGhlIGZvcm1hdCBpcyB0aGUgc2FtZSBhcworCXRoYXQgb2YgbGlua2dpdDpnaXQtZm9yLWVhY2gtcmVmWzFdLgorCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCitgcGFnZXIuYnJhbmNoYCBpcyBvbmx5IHJlc3BlY3RlZCB3aGVuIGxpc3RpbmcgYnJhbmNoZXMsIGkuZS4sIHdoZW4KK2AtLWxpc3RgIGlzIHVzZWQgb3IgaW1wbGllZC4gVGhlIGRlZmF1bHQgaXMgdG8gdXNlIGEgcGFnZXIuCitTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCitFWEFNUExFUworLS0tLS0tLS0KKworU3RhcnQgZGV2ZWxvcG1lbnQgZnJvbSBhIGtub3duIHRhZzo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vLi4uL2xpbnV4LTIuNiBteTIuNgorJCBjZCBteTIuNgorJCBnaXQgYnJhbmNoIG15Mi42LjE0IHYyLjYuMTQgICA8MT4KKyQgZ2l0IHN3aXRjaCBteTIuNi4xNAorLS0tLS0tLS0tLS0tCisrCis8MT4gVGhpcyBzdGVwIGFuZCB0aGUgbmV4dCBvbmUgY291bGQgYmUgY29tYmluZWQgaW50byBhIHNpbmdsZSBzdGVwIHdpdGgKKyAgICAiY2hlY2tvdXQgLWIgbXkyLjYuMTQgdjIuNi4xNCIuCisKK0RlbGV0ZSBhbiB1bm5lZWRlZCBicmFuY2g6OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLm9yZy8uLi4vZ2l0LmdpdCBteS5naXQKKyQgY2QgbXkuZ2l0CiskIGdpdCBicmFuY2ggLWQgLXIgb3JpZ2luL3RvZG8gb3JpZ2luL2h0bWwgb3JpZ2luL21hbiAgIDwxPgorJCBnaXQgYnJhbmNoIC1EIHRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Mj4KKy0tLS0tLS0tLS0tLQorKworPDE+IERlbGV0ZSB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzICJ0b2RvIiwgImh0bWwiIGFuZCAibWFuIi4gVGhlIG5leHQKKyAgICAnZmV0Y2gnIG9yICdwdWxsJyB3aWxsIGNyZWF0ZSB0aGVtIGFnYWluIHVubGVzcyB5b3UgY29uZmlndXJlIHRoZW0gbm90IHRvLgorICAgIFNlZSBsaW5rZ2l0OmdpdC1mZXRjaFsxXS4KKzwyPiBEZWxldGUgdGhlICJ0ZXN0IiBicmFuY2ggZXZlbiBpZiB0aGUgIm1hc3RlciIgYnJhbmNoIChvciB3aGljaGV2ZXIgYnJhbmNoCisgICAgaXMgY3VycmVudGx5IGNoZWNrZWQgb3V0KSBkb2VzIG5vdCBoYXZlIGFsbCBjb21taXRzIGZyb20gdGhlIHRlc3QgYnJhbmNoLgorCitMaXN0aW5nIGJyYW5jaGVzIGZyb20gYSBzcGVjaWZpYyByZW1vdGU6OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggLXIgLWwgJzxyZW1vdGU+LzxwYXR0ZXJuPicgICAgICAgICAgICAgICAgIDwxPgorJCBnaXQgZm9yLWVhY2gtcmVmICdyZWZzL3JlbW90ZXMvPHJlbW90ZT4vPHBhdHRlcm4+JyAgICA8Mj4KKy0tLS0tLS0tLS0tLQorKworPDE+IFVzaW5nIGAtYWAgd291bGQgY29uZmxhdGUgPHJlbW90ZT4gd2l0aCBhbnkgbG9jYWwgYnJhbmNoZXMgeW91IGhhcHBlbiB0bworICAgIGhhdmUgYmVlbiBwcmVmaXhlZCB3aXRoIHRoZSBzYW1lIDxyZW1vdGU+IHBhdHRlcm4uCis8Mj4gYGZvci1lYWNoLXJlZmAgY2FuIHRha2UgYSB3aWRlIHJhbmdlIG9mIG9wdGlvbnMuIFNlZSBsaW5rZ2l0OmdpdC1mb3ItZWFjaC1yZWZbMV0KKworUGF0dGVybnMgd2lsbCBub3JtYWxseSBuZWVkIHF1b3RpbmcuCisKK05PVEVTCistLS0tLQorCitJZiB5b3UgYXJlIGNyZWF0aW5nIGEgYnJhbmNoIHRoYXQgeW91IHdhbnQgdG8gc3dpdGNoIHRvIGltbWVkaWF0ZWx5LAoraXQgaXMgZWFzaWVyIHRvIHVzZSB0aGUgImdpdCBzd2l0Y2giIGNvbW1hbmQgd2l0aCBpdHMgYC1jYCBvcHRpb24gdG8KK2RvIHRoZSBzYW1lIHRoaW5nIHdpdGggYSBzaW5nbGUgY29tbWFuZC4KKworVGhlIG9wdGlvbnMgYC0tY29udGFpbnNgLCBgLS1uby1jb250YWluc2AsIGAtLW1lcmdlZGAgYW5kIGAtLW5vLW1lcmdlZGAKK3NlcnZlIGZvdXIgcmVsYXRlZCBidXQgZGlmZmVyZW50IHB1cnBvc2VzOgorCistIGAtLWNvbnRhaW5zIDxjb21taXQ+YCBpcyB1c2VkIHRvIGZpbmQgYWxsIGJyYW5jaGVzIHdoaWNoIHdpbGwgbmVlZAorICBzcGVjaWFsIGF0dGVudGlvbiBpZiA8Y29tbWl0PiB3ZXJlIHRvIGJlIHJlYmFzZWQgb3IgYW1lbmRlZCwgc2luY2UgdGhvc2UKKyAgYnJhbmNoZXMgY29udGFpbiB0aGUgc3BlY2lmaWVkIDxjb21taXQ+LgorCistIGAtLW5vLWNvbnRhaW5zIDxjb21taXQ+YCBpcyB0aGUgaW52ZXJzZSBvZiB0aGF0LCBpLmUuIGJyYW5jaGVzIHRoYXQgZG9uJ3QKKyAgY29udGFpbiB0aGUgc3BlY2lmaWVkIDxjb21taXQ+LgorCistIGAtLW1lcmdlZGAgaXMgdXNlZCB0byBmaW5kIGFsbCBicmFuY2hlcyB3aGljaCBjYW4gYmUgc2FmZWx5IGRlbGV0ZWQsCisgIHNpbmNlIHRob3NlIGJyYW5jaGVzIGFyZSBmdWxseSBjb250YWluZWQgYnkgSEVBRC4KKworLSBgLS1uby1tZXJnZWRgIGlzIHVzZWQgdG8gZmluZCBicmFuY2hlcyB3aGljaCBhcmUgY2FuZGlkYXRlcyBmb3IgbWVyZ2luZworICBpbnRvIEhFQUQsIHNpbmNlIHRob3NlIGJyYW5jaGVzIGFyZSBub3QgZnVsbHkgY29udGFpbmVkIGJ5IEhFQUQuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtY2hlY2stcmVmLWZvcm1hdFsxXSwKK2xpbmtnaXQ6Z2l0LWZldGNoWzFdLAorbGlua2dpdDpnaXQtcmVtb3RlWzFdLAorbGluazp1c2VyLW1hbnVhbC5odG1sI3doYXQtaXMtYS1icmFuY2hbYGBVbmRlcnN0YW5kaW5nIGhpc3Rvcnk6IFdoYXQgaXMKK2EgYnJhbmNoPycnXSBpbiB0aGUgR2l0IFVzZXIncyBNYW51YWwuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYnVncmVwb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJ1Z3JlcG9ydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVkYWQ2NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJ1Z3JlcG9ydC50eHQKQEAgLTAsMCArMSw1MyBAQAorZ2l0LWJ1Z3JlcG9ydCgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtYnVncmVwb3J0IC0gQ29sbGVjdCBpbmZvcm1hdGlvbiBmb3IgdXNlciB0byBmaWxlIGEgYnVnIHJlcG9ydAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYnVncmVwb3J0JyBbKC1vIHwgLS1vdXRwdXQtZGlyZWN0b3J5KSA8cGF0aD5dIFsoLXMgfCAtLXN1ZmZpeCkgPGZvcm1hdD5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQ2FwdHVyZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXIncyBtYWNoaW5lLCBHaXQgY2xpZW50LCBhbmQgcmVwb3NpdG9yeSBzdGF0ZSwKK2FzIHdlbGwgYXMgYSBmb3JtIHJlcXVlc3RpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIG9ic2VydmVkLAoraW50byBhIHNpbmdsZSB0ZXh0IGZpbGUgd2hpY2ggdGhlIHVzZXIgY2FuIHRoZW4gc2hhcmUsIGZvciBleGFtcGxlIHRvIHRoZSBHaXQKK21haWxpbmcgbGlzdCwgaW4gb3JkZXIgdG8gcmVwb3J0IGFuIG9ic2VydmVkIGJ1Zy4KKworVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyByZXF1ZXN0ZWQgZnJvbSB0aGUgdXNlcjoKKworIC0gUmVwcm9kdWN0aW9uIHN0ZXBzCisgLSBFeHBlY3RlZCBiZWhhdmlvcgorIC0gQWN0dWFsIGJlaGF2aW9yCisKK1RoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgY2FwdHVyZWQgYXV0b21hdGljYWxseToKKworIC0gJ2dpdCB2ZXJzaW9uIC0tYnVpbGQtb3B0aW9ucycKKyAtIHVuYW1lIHN5c25hbWUsIHJlbGVhc2UsIHZlcnNpb24sIGFuZCBtYWNoaW5lIHN0cmluZ3MKKyAtIENvbXBpbGVyLXNwZWNpZmljIGluZm8gc3RyaW5nCisgLSBBIGxpc3Qgb2YgZW5hYmxlZCBob29rcworCitUaGlzIHRvb2wgaXMgaW52b2tlZCB2aWEgdGhlIHR5cGljYWwgR2l0IHNldHVwIHByb2Nlc3MsIHdoaWNoIG1lYW5zIHRoYXQgaW4gc29tZQorY2FzZXMsIGl0IG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGxhdW5jaCAtIGZvciBleGFtcGxlLCBpZiBhIHJlbGV2YW50IGNvbmZpZyBmaWxlCitpcyB1bnJlYWRhYmxlLiBJbiB0aGlzIGtpbmQgb2Ygc2NlbmFyaW8sIGl0IG1heSBiZSBoZWxwZnVsIHRvIG1hbnVhbGx5IGdhdGhlcgordGhlIGtpbmQgb2YgaW5mb3JtYXRpb24gbGlzdGVkIGFib3ZlIHdoZW4gbWFudWFsbHkgYXNraW5nIGZvciBoZWxwLgorCitPUFRJT05TCistLS0tLS0tCistbyA8cGF0aD46OgorLS1vdXRwdXQtZGlyZWN0b3J5IDxwYXRoPjo6CisJUGxhY2UgdGhlIHJlc3VsdGluZyBidWcgcmVwb3J0IGZpbGUgaW4gYDxwYXRoPmAgaW5zdGVhZCBvZiB0aGUgcm9vdCBvZgorCXRoZSBHaXQgcmVwb3NpdG9yeS4KKworLXMgPGZvcm1hdD46OgorLS1zdWZmaXggPGZvcm1hdD46OgorCVNwZWNpZnkgYW4gYWx0ZXJuYXRlIHN1ZmZpeCBmb3IgdGhlIGJ1Z3JlcG9ydCBuYW1lLCB0byBjcmVhdGUgYSBmaWxlCisJbmFtZWQgJ2dpdC1idWdyZXBvcnQtPGZvcm1hdHRlZCBzdWZmaXg+Jy4gVGhpcyBzaG91bGQgdGFrZSB0aGUgZm9ybSBvZiBhCisJc3RyZnRpbWUoMykgZm9ybWF0IHN0cmluZzsgdGhlIGN1cnJlbnQgbG9jYWwgdGltZSB3aWxsIGJlIHVzZWQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYnVuZGxlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJ1bmRsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM0YjA5NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJ1bmRsZS50eHQKQEAgLTAsMCArMSwyNDUgQEAKK2dpdC1idW5kbGUoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWJ1bmRsZSAtIE1vdmUgb2JqZWN0cyBhbmQgcmVmcyBieSBhcmNoaXZlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGJ1bmRsZScgY3JlYXRlIFstcSB8IC0tcXVpZXQgfCAtLXByb2dyZXNzIHwgLS1hbGwtcHJvZ3Jlc3NdIFstLWFsbC1wcm9ncmVzcy1pbXBsaWVkXSA8ZmlsZT4gPGdpdC1yZXYtbGlzdC1hcmdzPgorJ2dpdCBidW5kbGUnIHZlcmlmeSBbLXEgfCAtLXF1aWV0XSA8ZmlsZT4KKydnaXQgYnVuZGxlJyBsaXN0LWhlYWRzIDxmaWxlPiBbPHJlZm5hbWU+Li4uXQorJ2dpdCBidW5kbGUnIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworU29tZSB3b3JrZmxvd3MgcmVxdWlyZSB0aGF0IG9uZSBvciBtb3JlIGJyYW5jaGVzIG9mIGRldmVsb3BtZW50IG9uIG9uZQorbWFjaGluZSBiZSByZXBsaWNhdGVkIG9uIGFub3RoZXIgbWFjaGluZSwgYnV0IHRoZSB0d28gbWFjaGluZXMgY2Fubm90CitiZSBkaXJlY3RseSBjb25uZWN0ZWQsIGFuZCB0aGVyZWZvcmUgdGhlIGludGVyYWN0aXZlIEdpdCBwcm90b2NvbHMgKGdpdCwKK3NzaCwgaHR0cCkgY2Fubm90IGJlIHVzZWQuCisKK1RoZSAnZ2l0IGJ1bmRsZScgY29tbWFuZCBwYWNrYWdlcyBvYmplY3RzIGFuZCByZWZlcmVuY2VzIGluIGFuIGFyY2hpdmUKK2F0IHRoZSBvcmlnaW5hdGluZyBtYWNoaW5lLCB3aGljaCBjYW4gdGhlbiBiZSBpbXBvcnRlZCBpbnRvIGFub3RoZXIKK3JlcG9zaXRvcnkgdXNpbmcgJ2dpdCBmZXRjaCcsICdnaXQgcHVsbCcsIG9yICdnaXQgY2xvbmUnLAorYWZ0ZXIgbW92aW5nIHRoZSBhcmNoaXZlIGJ5IHNvbWUgbWVhbnMgKGUuZy4sIGJ5IHNuZWFrZXJuZXQpLgorCitBcyBubworZGlyZWN0IGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgcmVwb3NpdG9yaWVzIGV4aXN0cywgdGhlIHVzZXIgbXVzdCBzcGVjaWZ5IGEKK2Jhc2lzIGZvciB0aGUgYnVuZGxlIHRoYXQgaXMgaGVsZCBieSB0aGUgZGVzdGluYXRpb24gcmVwb3NpdG9yeTogdGhlCitidW5kbGUgYXNzdW1lcyB0aGF0IGFsbCBvYmplY3RzIGluIHRoZSBiYXNpcyBhcmUgYWxyZWFkeSBpbiB0aGUKK2Rlc3RpbmF0aW9uIHJlcG9zaXRvcnkuCisKK09QVElPTlMKKy0tLS0tLS0KKworY3JlYXRlIFtvcHRpb25zXSA8ZmlsZT4gPGdpdC1yZXYtbGlzdC1hcmdzPjo6CisJVXNlZCB0byBjcmVhdGUgYSBidW5kbGUgbmFtZWQgJ2ZpbGUnLiAgVGhpcyByZXF1aXJlcyB0aGUKKwknPGdpdC1yZXYtbGlzdC1hcmdzPicgYXJndW1lbnRzIHRvIGRlZmluZSB0aGUgYnVuZGxlIGNvbnRlbnRzLgorCSdvcHRpb25zJyBjb250YWlucyB0aGUgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgJ2dpdCBidW5kbGUgY3JlYXRlJworCXN1YmNvbW1hbmQuCisKK3ZlcmlmeSA8ZmlsZT46OgorCVVzZWQgdG8gY2hlY2sgdGhhdCBhIGJ1bmRsZSBmaWxlIGlzIHZhbGlkIGFuZCB3aWxsIGFwcGx5CisJY2xlYW5seSB0byB0aGUgY3VycmVudCByZXBvc2l0b3J5LiAgVGhpcyBpbmNsdWRlcyBjaGVja3Mgb24gdGhlCisJYnVuZGxlIGZvcm1hdCBpdHNlbGYgYXMgd2VsbCBhcyBjaGVja2luZyB0aGF0IHRoZSBwcmVyZXF1aXNpdGUKKwljb21taXRzIGV4aXN0IGFuZCBhcmUgZnVsbHkgbGlua2VkIGluIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkuCisJJ2dpdCBidW5kbGUnIHByaW50cyBhIGxpc3Qgb2YgbWlzc2luZyBjb21taXRzLCBpZiBhbnksIGFuZCBleGl0cworCXdpdGggYSBub24temVybyBzdGF0dXMuCisKK2xpc3QtaGVhZHMgPGZpbGU+OjoKKwlMaXN0cyB0aGUgcmVmZXJlbmNlcyBkZWZpbmVkIGluIHRoZSBidW5kbGUuICBJZiBmb2xsb3dlZCBieSBhCisJbGlzdCBvZiByZWZlcmVuY2VzLCBvbmx5IHJlZmVyZW5jZXMgbWF0Y2hpbmcgdGhvc2UgZ2l2ZW4gYXJlCisJcHJpbnRlZCBvdXQuCisKK3VuYnVuZGxlIDxmaWxlPjo6CisJUGFzc2VzIHRoZSBvYmplY3RzIGluIHRoZSBidW5kbGUgdG8gJ2dpdCBpbmRleC1wYWNrJworCWZvciBzdG9yYWdlIGluIHRoZSByZXBvc2l0b3J5LCB0aGVuIHByaW50cyB0aGUgbmFtZXMgb2YgYWxsCisJZGVmaW5lZCByZWZlcmVuY2VzLiBJZiBhIGxpc3Qgb2YgcmVmZXJlbmNlcyBpcyBnaXZlbiwgb25seQorCXJlZmVyZW5jZXMgbWF0Y2hpbmcgdGhvc2UgaW4gdGhlIGxpc3QgYXJlIHByaW50ZWQuIFRoaXMgY29tbWFuZCBpcworCXJlYWxseSBwbHVtYmluZywgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIG9ubHkgYnkgJ2dpdCBmZXRjaCcuCisKKzxnaXQtcmV2LWxpc3QtYXJncz46OgorCUEgbGlzdCBvZiBhcmd1bWVudHMsIGFjY2VwdGFibGUgdG8gJ2dpdCByZXYtcGFyc2UnIGFuZAorCSdnaXQgcmV2LWxpc3QnIChhbmQgY29udGFpbmluZyBhIG5hbWVkIHJlZiwgc2VlIFNQRUNJRllJTkcgUkVGRVJFTkNFUworCWJlbG93KSwgdGhhdCBzcGVjaWZpZXMgdGhlIHNwZWNpZmljIG9iamVjdHMgYW5kIHJlZmVyZW5jZXMKKwl0byB0cmFuc3BvcnQuICBGb3IgZXhhbXBsZSwgYG1hc3Rlcn4xMC4ubWFzdGVyYCBjYXVzZXMgdGhlCisJY3VycmVudCBtYXN0ZXIgcmVmZXJlbmNlIHRvIGJlIHBhY2thZ2VkIGFsb25nIHdpdGggYWxsIG9iamVjdHMKKwlhZGRlZCBzaW5jZSBpdHMgMTB0aCBhbmNlc3RvciBjb21taXQuICBUaGVyZSBpcyBubyBleHBsaWNpdAorCWxpbWl0IHRvIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlcyBhbmQgb2JqZWN0cyB0aGF0IG1heSBiZQorCXBhY2thZ2VkLgorCisKK1s8cmVmbmFtZT4uLi5dOjoKKwlBIGxpc3Qgb2YgcmVmZXJlbmNlcyB1c2VkIHRvIGxpbWl0IHRoZSByZWZlcmVuY2VzIHJlcG9ydGVkIGFzCisJYXZhaWxhYmxlLiBUaGlzIGlzIHByaW5jaXBhbGx5IG9mIHVzZSB0byAnZ2l0IGZldGNoJywgd2hpY2gKKwlleHBlY3RzIHRvIHJlY2VpdmUgb25seSB0aG9zZSByZWZlcmVuY2VzIGFza2VkIGZvciBhbmQgbm90CisJbmVjZXNzYXJpbHkgZXZlcnl0aGluZyBpbiB0aGUgcGFjayAoaW4gdGhpcyBjYXNlLCAnZ2l0IGJ1bmRsZScgYWN0cworCWxpa2UgJ2dpdCBmZXRjaC1wYWNrJykuCisKKy0tcHJvZ3Jlc3M6OgorCVByb2dyZXNzIHN0YXR1cyBpcyByZXBvcnRlZCBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtCisJYnkgZGVmYXVsdCB3aGVuIGl0IGlzIGF0dGFjaGVkIHRvIGEgdGVybWluYWwsIHVubGVzcyAtcQorCWlzIHNwZWNpZmllZC4gVGhpcyBmbGFnIGZvcmNlcyBwcm9ncmVzcyBzdGF0dXMgZXZlbiBpZgorCXRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gaXMgbm90IGRpcmVjdGVkIHRvIGEgdGVybWluYWwuCisKKy0tYWxsLXByb2dyZXNzOjoKKwlXaGVuIC0tc3Rkb3V0IGlzIHNwZWNpZmllZCB0aGVuIHByb2dyZXNzIHJlcG9ydCBpcworCWRpc3BsYXllZCBkdXJpbmcgdGhlIG9iamVjdCBjb3VudCBhbmQgY29tcHJlc3Npb24gcGhhc2VzCisJYnV0IGluaGliaXRlZCBkdXJpbmcgdGhlIHdyaXRlLW91dCBwaGFzZS4gVGhlIHJlYXNvbiBpcworCXRoYXQgaW4gc29tZSBjYXNlcyB0aGUgb3V0cHV0IHN0cmVhbSBpcyBkaXJlY3RseSBsaW5rZWQKKwl0byBhbm90aGVyIGNvbW1hbmQgd2hpY2ggbWF5IHdpc2ggdG8gZGlzcGxheSBwcm9ncmVzcworCXN0YXR1cyBvZiBpdHMgb3duIGFzIGl0IHByb2Nlc3NlcyBpbmNvbWluZyBwYWNrIGRhdGEuCisJVGhpcyBmbGFnIGlzIGxpa2UgLS1wcm9ncmVzcyBleGNlcHQgdGhhdCBpdCBmb3JjZXMgcHJvZ3Jlc3MKKwlyZXBvcnQgZm9yIHRoZSB3cml0ZS1vdXQgcGhhc2UgYXMgd2VsbCBldmVuIGlmIC0tc3Rkb3V0IGlzCisJdXNlZC4KKworLS1hbGwtcHJvZ3Jlc3MtaW1wbGllZDo6CisJVGhpcyBpcyB1c2VkIHRvIGltcGx5IC0tYWxsLXByb2dyZXNzIHdoZW5ldmVyIHByb2dyZXNzIGRpc3BsYXkKKwlpcyBhY3RpdmF0ZWQuICBVbmxpa2UgLS1hbGwtcHJvZ3Jlc3MgdGhpcyBmbGFnIGRvZXNuJ3QgYWN0dWFsbHkKKwlmb3JjZSBhbnkgcHJvZ3Jlc3MgZGlzcGxheSBieSBpdHNlbGYuCisKKy1xOjoKKy0tcXVpZXQ6OgorCVRoaXMgZmxhZyBtYWtlcyB0aGUgY29tbWFuZCBub3QgdG8gcmVwb3J0IGl0cyBwcm9ncmVzcworCW9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0uCisKK1NQRUNJRllJTkcgUkVGRVJFTkNFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKydnaXQgYnVuZGxlJyB3aWxsIG9ubHkgcGFja2FnZSByZWZlcmVuY2VzIHRoYXQgYXJlIHNob3duIGJ5CisnZ2l0IHNob3ctcmVmJzogdGhpcyBpbmNsdWRlcyBoZWFkcywgdGFncywgYW5kIHJlbW90ZSBoZWFkcy4gIFJlZmVyZW5jZXMKK3N1Y2ggYXMgYG1hc3Rlcn4xYCBjYW5ub3QgYmUgcGFja2FnZWQsIGJ1dCBhcmUgcGVyZmVjdGx5IHN1aXRhYmxlIGZvcgorZGVmaW5pbmcgdGhlIGJhc2lzLiAgTW9yZSB0aGFuIG9uZSByZWZlcmVuY2UgbWF5IGJlIHBhY2thZ2VkLCBhbmQgbW9yZQordGhhbiBvbmUgYmFzaXMgY2FuIGJlIHNwZWNpZmllZC4gIFRoZSBvYmplY3RzIHBhY2thZ2VkIGFyZSB0aG9zZSBub3QKK2NvbnRhaW5lZCBpbiB0aGUgdW5pb24gb2YgdGhlIGdpdmVuIGJhc2VzLiAgRWFjaCBiYXNpcyBjYW4gYmUKK3NwZWNpZmllZCBleHBsaWNpdGx5IChlLmcuIGBebWFzdGVyfjEwYCksIG9yIGltcGxpY2l0bHkgKGUuZy4KK2BtYXN0ZXJ+MTAuLm1hc3RlcmAsIGAtLXNpbmNlPTEwLmRheXMuYWdvIG1hc3RlcmApLgorCitJdCBpcyB2ZXJ5IGltcG9ydGFudCB0aGF0IHRoZSBiYXNpcyB1c2VkIGJlIGhlbGQgYnkgdGhlIGRlc3RpbmF0aW9uLgorSXQgaXMgb2theSB0byBlcnIgb24gdGhlIHNpZGUgb2YgY2F1dGlvbiwgY2F1c2luZyB0aGUgYnVuZGxlIGZpbGUKK3RvIGNvbnRhaW4gb2JqZWN0cyBhbHJlYWR5IGluIHRoZSBkZXN0aW5hdGlvbiwgYXMgdGhlc2UgYXJlIGlnbm9yZWQKK3doZW4gdW5wYWNraW5nIGF0IHRoZSBkZXN0aW5hdGlvbi4KKworYGdpdCBjbG9uZWAgY2FuIHVzZSBhbnkgYnVuZGxlIGNyZWF0ZWQgd2l0aG91dCBuZWdhdGl2ZSByZWZzcGVjcworKGUuZy4sIGBuZXdgLCBidXQgbm90IGBvbGQuLm5ld2ApLgorSWYgeW91IHdhbnQgdG8gbWF0Y2ggYGdpdCBjbG9uZSAtLW1pcnJvcmAsIHdoaWNoIHdvdWxkIGluY2x1ZGUgeW91cgorcmVmcyBzdWNoIGFzIGByZWZzL3JlbW90ZXMvKmAsIHVzZSBgLS1hbGxgLgorSWYgeW91IHdhbnQgdG8gcHJvdmlkZSB0aGUgc2FtZSBzZXQgb2YgcmVmcyB0aGF0IGEgY2xvbmUgZGlyZWN0bHkKK2Zyb20gdGhlIHNvdXJjZSByZXBvc2l0b3J5IHdvdWxkIGdldCwgdXNlIGAtLWJyYW5jaGVzIC0tdGFnc2AgZm9yCit0aGUgYDxnaXQtcmV2LWxpc3QtYXJncz5gLgorCitFWEFNUExFUworLS0tLS0tLS0KKworQXNzdW1lIHlvdSB3YW50IHRvIHRyYW5zZmVyIHRoZSBoaXN0b3J5IGZyb20gYSByZXBvc2l0b3J5IFIxIG9uIG1hY2hpbmUgQQordG8gYW5vdGhlciByZXBvc2l0b3J5IFIyIG9uIG1hY2hpbmUgQi4KK0ZvciB3aGF0ZXZlciByZWFzb24sIGRpcmVjdCBjb25uZWN0aW9uIGJldHdlZW4gQSBhbmQgQiBpcyBub3QgYWxsb3dlZCwKK2J1dCB3ZSBjYW4gbW92ZSBkYXRhIGZyb20gQSB0byBCIHZpYSBzb21lIG1lY2hhbmlzbSAoQ0QsIGVtYWlsLCBldGMuKS4KK1dlIHdhbnQgdG8gdXBkYXRlIFIyIHdpdGggZGV2ZWxvcG1lbnQgbWFkZSBvbiB0aGUgYnJhbmNoIG1hc3RlciBpbiBSMS4KKworVG8gYm9vdHN0cmFwIHRoZSBwcm9jZXNzLCB5b3UgY2FuIGZpcnN0IGNyZWF0ZSBhIGJ1bmRsZSB0aGF0IGRvZXMgbm90IGhhdmUKK2FueSBiYXNpcy4gWW91IGNhbiB1c2UgYSB0YWcgdG8gcmVtZW1iZXIgdXAgdG8gd2hhdCBjb21taXQgeW91IGxhc3QKK3Byb2Nlc3NlZCwgaW4gb3JkZXIgdG8gbWFrZSBpdCBlYXN5IHRvIGxhdGVyIHVwZGF0ZSB0aGUgb3RoZXIgcmVwb3NpdG9yeQord2l0aCBhbiBpbmNyZW1lbnRhbCBidW5kbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0KK21hY2hpbmVBJCBjZCBSMQorbWFjaGluZUEkIGdpdCBidW5kbGUgY3JlYXRlIGZpbGUuYnVuZGxlIG1hc3RlcgorbWFjaGluZUEkIGdpdCB0YWcgLWYgbGFzdFIyYnVuZGxlIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuIHlvdSB0cmFuc2ZlciBmaWxlLmJ1bmRsZSB0byB0aGUgdGFyZ2V0IG1hY2hpbmUgQi4gQmVjYXVzZSB0aGlzCitidW5kbGUgZG9lcyBub3QgcmVxdWlyZSBhbnkgZXhpc3Rpbmcgb2JqZWN0IHRvIGJlIGV4dHJhY3RlZCwgeW91IGNhbgorY3JlYXRlIGEgbmV3IHJlcG9zaXRvcnkgb24gbWFjaGluZSBCIGJ5IGNsb25pbmcgZnJvbSBpdDoKKworLS0tLS0tLS0tLS0tLS0tLQorbWFjaGluZUIkIGdpdCBjbG9uZSAtYiBtYXN0ZXIgL2hvbWUvbWUvdG1wL2ZpbGUuYnVuZGxlIFIyCistLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd2lsbCBkZWZpbmUgYSByZW1vdGUgY2FsbGVkICJvcmlnaW4iIGluIHRoZSByZXN1bHRpbmcgcmVwb3NpdG9yeSB0aGF0CitsZXRzIHlvdSBmZXRjaCBhbmQgcHVsbCBmcm9tIHRoZSBidW5kbGUuIFRoZSAkR0lUX0RJUi9jb25maWcgZmlsZSBpbiBSMiB3aWxsCitoYXZlIGFuIGVudHJ5IGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbcmVtb3RlICJvcmlnaW4iXQorICAgIHVybCA9IC9ob21lL21lL3RtcC9maWxlLmJ1bmRsZQorICAgIGZldGNoID0gcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHVwZGF0ZSB0aGUgcmVzdWx0aW5nIG1pbmUuZ2l0IHJlcG9zaXRvcnksIHlvdSBjYW4gZmV0Y2ggb3IgcHVsbCBhZnRlcgorcmVwbGFjaW5nIHRoZSBidW5kbGUgc3RvcmVkIGF0IC9ob21lL21lL3RtcC9maWxlLmJ1bmRsZSB3aXRoIGluY3JlbWVudGFsCit1cGRhdGVzLgorCitBZnRlciB3b3JraW5nIHNvbWUgbW9yZSBpbiB0aGUgb3JpZ2luYWwgcmVwb3NpdG9yeSwgeW91IGNhbiBjcmVhdGUgYW4KK2luY3JlbWVudGFsIGJ1bmRsZSB0byB1cGRhdGUgdGhlIG90aGVyIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0KK21hY2hpbmVBJCBjZCBSMQorbWFjaGluZUEkIGdpdCBidW5kbGUgY3JlYXRlIGZpbGUuYnVuZGxlIGxhc3RSMmJ1bmRsZS4ubWFzdGVyCittYWNoaW5lQSQgZ2l0IHRhZyAtZiBsYXN0UjJidW5kbGUgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tCisKK1lvdSB0aGVuIHRyYW5zZmVyIHRoZSBidW5kbGUgdG8gdGhlIG90aGVyIG1hY2hpbmUgdG8gcmVwbGFjZQorL2hvbWUvbWUvdG1wL2ZpbGUuYnVuZGxlLCBhbmQgcHVsbCBmcm9tIGl0LgorCistLS0tLS0tLS0tLS0tLS0tCittYWNoaW5lQiQgY2QgUjIKK21hY2hpbmVCJCBnaXQgcHVsbAorLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Uga25vdyB1cCB0byB3aGF0IGNvbW1pdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50IHJlcG9zaXRvcnkgc2hvdWxkCitoYXZlIHRoZSBuZWNlc3Nhcnkgb2JqZWN0cywgeW91IGNhbiB1c2UgdGhhdCBrbm93bGVkZ2UgdG8gc3BlY2lmeSB0aGUKK2Jhc2lzLCBnaXZpbmcgYSBjdXQtb2ZmIHBvaW50IHRvIGxpbWl0IHRoZSByZXZpc2lvbnMgYW5kIG9iamVjdHMgdGhhdCBnbworaW4gdGhlIHJlc3VsdGluZyBidW5kbGUuIFRoZSBwcmV2aW91cyBleGFtcGxlIHVzZWQgdGhlIGxhc3RSMmJ1bmRsZSB0YWcKK2ZvciB0aGlzIHB1cnBvc2UsIGJ1dCB5b3UgY2FuIHVzZSBhbnkgb3RoZXIgb3B0aW9ucyB0aGF0IHlvdSB3b3VsZCBnaXZlIHRvCit0aGUgbGlua2dpdDpnaXQtbG9nWzFdIGNvbW1hbmQuIEhlcmUgYXJlIG1vcmUgZXhhbXBsZXM6CisKK1lvdSBjYW4gdXNlIGEgdGFnIHRoYXQgaXMgcHJlc2VudCBpbiBib3RoOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBidW5kbGUgY3JlYXRlIG15YnVuZGxlIHYxLjAuMC4ubWFzdGVyCistLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gdXNlIGEgYmFzaXMgYmFzZWQgb24gdGltZToKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnVuZGxlIGNyZWF0ZSBteWJ1bmRsZSAtLXNpbmNlPTEwLmRheXMgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gdXNlIHRoZSBudW1iZXIgb2YgY29tbWl0czoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnVuZGxlIGNyZWF0ZSBteWJ1bmRsZSAtMTAgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gcnVuIGBnaXQtYnVuZGxlIHZlcmlmeWAgdG8gc2VlIGlmIHlvdSBjYW4gZXh0cmFjdCBmcm9tIGEgYnVuZGxlCit0aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBiYXNpczoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnVuZGxlIHZlcmlmeSBteWJ1bmRsZQorLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdpbGwgbGlzdCB3aGF0IGNvbW1pdHMgeW91IG11c3QgaGF2ZSBpbiBvcmRlciB0byBleHRyYWN0IGZyb20gdGhlCitidW5kbGUgYW5kIHdpbGwgZXJyb3Igb3V0IGlmIHlvdSBkbyBub3QgaGF2ZSB0aGVtLgorCitBIGJ1bmRsZSBmcm9tIGEgcmVjaXBpZW50IHJlcG9zaXRvcnkncyBwb2ludCBvZiB2aWV3IGlzIGp1c3QgbGlrZSBhCityZWd1bGFyIHJlcG9zaXRvcnkgd2hpY2ggaXQgZmV0Y2hlcyBvciBwdWxscyBmcm9tLiBZb3UgY2FuLCBmb3IgZXhhbXBsZSwgbWFwCityZWZlcmVuY2VzIHdoZW4gZmV0Y2hpbmc6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoIG15YnVuZGxlIG1hc3Rlcjpsb2NhbFJlZgorLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGFsc28gc2VlIHdoYXQgcmVmZXJlbmNlcyBpdCBvZmZlcnM6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLXJlbW90ZSBteWJ1bmRsZQorLS0tLS0tLS0tLS0tLS0tLQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNhdC1maWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNhdC1maWxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWNhNjcxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2F0LWZpbGUudHh0CkBAIC0wLDAgKzEsMzE5IEBACitnaXQtY2F0LWZpbGUoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2F0LWZpbGUgLSBQcm92aWRlIGNvbnRlbnQgb3IgdHlwZSBhbmQgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVwb3NpdG9yeSBvYmplY3RzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNhdC1maWxlJyAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXXwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXXwgLWUgfCAtcCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMgKSBbLS1wYXRoPTxwYXRoPl0gPG9iamVjdD4KKydnaXQgY2F0LWZpbGUnICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWyAtLXRleHRjb252IHwgLS1maWx0ZXJzIF0gWy0tZm9sbG93LXN5bWxpbmtzXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0luIGl0cyBmaXJzdCBmb3JtLCB0aGUgY29tbWFuZCBwcm92aWRlcyB0aGUgY29udGVudCBvciB0aGUgdHlwZSBvZiBhbiBvYmplY3QgaW4KK3RoZSByZXBvc2l0b3J5LiBUaGUgdHlwZSBpcyByZXF1aXJlZCB1bmxlc3MgYC10YCBvciBgLXBgIGlzIHVzZWQgdG8gZmluZCB0aGUKK29iamVjdCB0eXBlLCBvciBgLXNgIGlzIHVzZWQgdG8gZmluZCB0aGUgb2JqZWN0IHNpemUsIG9yIGAtLXRleHRjb252YCBvcgorYC0tZmlsdGVyc2AgaXMgdXNlZCAod2hpY2ggaW1wbHkgdHlwZSAiYmxvYiIpLgorCitJbiB0aGUgc2Vjb25kIGZvcm0sIGEgbGlzdCBvZiBvYmplY3RzIChzZXBhcmF0ZWQgYnkgbGluZWZlZWRzKSBpcyBwcm92aWRlZCBvbgorc3RkaW4sIGFuZCB0aGUgU0hBLTEsIHR5cGUsIGFuZCBzaXplIG9mIGVhY2ggb2JqZWN0IGlzIHByaW50ZWQgb24gc3Rkb3V0LiBUaGUKK291dHB1dCBmb3JtYXQgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIG9wdGlvbmFsIGA8Zm9ybWF0PmAgYXJndW1lbnQuIElmCitlaXRoZXIgYC0tdGV4dGNvbnZgIG9yIGAtLWZpbHRlcnNgIHdhcyBzcGVjaWZpZWQsIHRoZSBpbnB1dCBpcyBleHBlY3RlZCB0bworbGlzdCB0aGUgb2JqZWN0IG5hbWVzIGZvbGxvd2VkIGJ5IHRoZSBwYXRoIG5hbWUsIHNlcGFyYXRlZCBieSBhIHNpbmdsZQord2hpdGVzcGFjZSwgc28gdGhhdCB0aGUgYXBwcm9wcmlhdGUgZHJpdmVycyBjYW4gYmUgZGV0ZXJtaW5lZC4KKworT1BUSU9OUworLS0tLS0tLQorPG9iamVjdD46OgorCVRoZSBuYW1lIG9mIHRoZSBvYmplY3QgdG8gc2hvdy4KKwlGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2Ygd2F5cyB0byBzcGVsbCBvYmplY3QgbmFtZXMsIHNlZQorCXRoZSAiU1BFQ0lGWUlORyBSRVZJU0lPTlMiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisKKy10OjoKKwlJbnN0ZWFkIG9mIHRoZSBjb250ZW50LCBzaG93IHRoZSBvYmplY3QgdHlwZSBpZGVudGlmaWVkIGJ5CisJPG9iamVjdD4uCisKKy1zOjoKKwlJbnN0ZWFkIG9mIHRoZSBjb250ZW50LCBzaG93IHRoZSBvYmplY3Qgc2l6ZSBpZGVudGlmaWVkIGJ5CisJPG9iamVjdD4uCisKKy1lOjoKKwlFeGl0IHdpdGggemVybyBzdGF0dXMgaWYgPG9iamVjdD4gZXhpc3RzIGFuZCBpcyBhIHZhbGlkCisJb2JqZWN0LiBJZiA8b2JqZWN0PiBpcyBvZiBhbiBpbnZhbGlkIGZvcm1hdCBleGl0IHdpdGggbm9uLXplcm8gYW5kCisJZW1pdHMgYW4gZXJyb3Igb24gc3RkZXJyLgorCistcDo6CisJUHJldHR5LXByaW50IHRoZSBjb250ZW50cyBvZiA8b2JqZWN0PiBiYXNlZCBvbiBpdHMgdHlwZS4KKworPHR5cGU+OjoKKwlUeXBpY2FsbHkgdGhpcyBtYXRjaGVzIHRoZSByZWFsIHR5cGUgb2YgPG9iamVjdD4gYnV0IGFza2luZworCWZvciBhIHR5cGUgdGhhdCBjYW4gdHJpdmlhbGx5IGJlIGRlcmVmZXJlbmNlZCBmcm9tIHRoZSBnaXZlbgorCTxvYmplY3Q+IGlzIGFsc28gcGVybWl0dGVkLiAgQW4gZXhhbXBsZSBpcyB0byBhc2sgZm9yIGEKKwkidHJlZSIgd2l0aCA8b2JqZWN0PiBiZWluZyBhIGNvbW1pdCBvYmplY3QgdGhhdCBjb250YWlucyBpdCwKKwlvciB0byBhc2sgZm9yIGEgImJsb2IiIHdpdGggPG9iamVjdD4gYmVpbmcgYSB0YWcgb2JqZWN0IHRoYXQKKwlwb2ludHMgYXQgaXQuCisKKy0tdGV4dGNvbnY6OgorCVNob3cgdGhlIGNvbnRlbnQgYXMgdHJhbnNmb3JtZWQgYnkgYSB0ZXh0Y29udiBmaWx0ZXIuIEluIHRoaXMgY2FzZSwKKwk8b2JqZWN0PiBoYXMgdG8gYmUgb2YgdGhlIGZvcm0gPHRyZWUtaXNoPjo8cGF0aD4sIG9yIDo8cGF0aD4gaW4KKwlvcmRlciB0byBhcHBseSB0aGUgZmlsdGVyIHRvIHRoZSBjb250ZW50IHJlY29yZGVkIGluIHRoZSBpbmRleCBhdAorCTxwYXRoPi4KKworLS1maWx0ZXJzOjoKKwlTaG93IHRoZSBjb250ZW50IGFzIGNvbnZlcnRlZCBieSB0aGUgZmlsdGVycyBjb25maWd1cmVkIGluCisJdGhlIGN1cnJlbnQgd29ya2luZyB0cmVlIGZvciB0aGUgZ2l2ZW4gPHBhdGg+IChpLmUuIHNtdWRnZSBmaWx0ZXJzLAorCWVuZC1vZi1saW5lIGNvbnZlcnNpb24sIGV0YykuIEluIHRoaXMgY2FzZSwgPG9iamVjdD4gaGFzIHRvIGJlIG9mCisJdGhlIGZvcm0gPHRyZWUtaXNoPjo8cGF0aD4sIG9yIDo8cGF0aD4uCisKKy0tcGF0aD08cGF0aD46OgorCUZvciB1c2Ugd2l0aCAtLXRleHRjb252IG9yIC0tZmlsdGVycywgdG8gYWxsb3cgc3BlY2lmeWluZyBhbiBvYmplY3QKKwluYW1lIGFuZCBhIHBhdGggc2VwYXJhdGVseSwgZS5nLiB3aGVuIGl0IGlzIGRpZmZpY3VsdCB0byBmaWd1cmUgb3V0CisJdGhlIHJldmlzaW9uIGZyb20gd2hpY2ggdGhlIGJsb2IgY2FtZS4KKworLS1iYXRjaDo6CistLWJhdGNoPTxmb3JtYXQ+OjoKKwlQcmludCBvYmplY3QgaW5mb3JtYXRpb24gYW5kIGNvbnRlbnRzIGZvciBlYWNoIG9iamVjdCBwcm92aWRlZAorCW9uIHN0ZGluLiAgTWF5IG5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciBvcHRpb25zIG9yIGFyZ3VtZW50cworCWV4Y2VwdCBgLS10ZXh0Y29udmAgb3IgYC0tZmlsdGVyc2AsIGluIHdoaWNoIGNhc2UgdGhlIGlucHV0IGxpbmVzCisJYWxzbyBuZWVkIHRvIHNwZWNpZnkgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiAgU2VlIHRoZQorCXNlY3Rpb24gYEJBVENIIE9VVFBVVGAgYmVsb3cgZm9yIGRldGFpbHMuCisKKy0tYmF0Y2gtY2hlY2s6OgorLS1iYXRjaC1jaGVjaz08Zm9ybWF0Pjo6CisJUHJpbnQgb2JqZWN0IGluZm9ybWF0aW9uIGZvciBlYWNoIG9iamVjdCBwcm92aWRlZCBvbiBzdGRpbi4gIE1heQorCW5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciBvcHRpb25zIG9yIGFyZ3VtZW50cyBleGNlcHQKKwlgLS10ZXh0Y29udmAgb3IgYC0tZmlsdGVyc2AsIGluIHdoaWNoIGNhc2UgdGhlIGlucHV0IGxpbmVzIGFsc28KKwluZWVkIHRvIHNwZWNpZnkgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiAgU2VlIHRoZQorCXNlY3Rpb24gYEJBVENIIE9VVFBVVGAgYmVsb3cgZm9yIGRldGFpbHMuCisKKy0tYmF0Y2gtYWxsLW9iamVjdHM6OgorCUluc3RlYWQgb2YgcmVhZGluZyBhIGxpc3Qgb2Ygb2JqZWN0cyBvbiBzdGRpbiwgcGVyZm9ybSB0aGUKKwlyZXF1ZXN0ZWQgYmF0Y2ggb3BlcmF0aW9uIG9uIGFsbCBvYmplY3RzIGluIHRoZSByZXBvc2l0b3J5IGFuZAorCWFueSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlcyAobm90IGp1c3QgcmVhY2hhYmxlIG9iamVjdHMpLgorCVJlcXVpcmVzIGAtLWJhdGNoYCBvciBgLS1iYXRjaC1jaGVja2AgYmUgc3BlY2lmaWVkLiBOb3RlIHRoYXQKKwl0aGUgb2JqZWN0cyBhcmUgdmlzaXRlZCBpbiBvcmRlciBzb3J0ZWQgYnkgdGhlaXIgaGFzaGVzLgorCistLWJ1ZmZlcjo6CisJTm9ybWFsbHkgYmF0Y2ggb3V0cHV0IGlzIGZsdXNoZWQgYWZ0ZXIgZWFjaCBvYmplY3QgaXMgb3V0cHV0LCBzbworCXRoYXQgYSBwcm9jZXNzIGNhbiBpbnRlcmFjdGl2ZWx5IHJlYWQgYW5kIHdyaXRlIGZyb20KKwlgY2F0LWZpbGVgLiBXaXRoIHRoaXMgb3B0aW9uLCB0aGUgb3V0cHV0IHVzZXMgbm9ybWFsIHN0ZGlvCisJYnVmZmVyaW5nOyB0aGlzIGlzIG11Y2ggbW9yZSBlZmZpY2llbnQgd2hlbiBpbnZva2luZworCWAtLWJhdGNoLWNoZWNrYCBvbiBhIGxhcmdlIG51bWJlciBvZiBvYmplY3RzLgorCistLXVub3JkZXJlZDo6CisJV2hlbiBgLS1iYXRjaC1hbGwtb2JqZWN0c2AgaXMgaW4gdXNlLCB2aXNpdCBvYmplY3RzIGluIGFuCisJb3JkZXIgd2hpY2ggbWF5IGJlIG1vcmUgZWZmaWNpZW50IGZvciBhY2Nlc3NpbmcgdGhlIG9iamVjdAorCWNvbnRlbnRzIHRoYW4gaGFzaCBvcmRlci4gVGhlIGV4YWN0IGRldGFpbHMgb2YgdGhlIG9yZGVyIGFyZQorCXVuc3BlY2lmaWVkLCBidXQgaWYgeW91IGRvIG5vdCByZXF1aXJlIGEgc3BlY2lmaWMgb3JkZXIsIHRoaXMKKwlzaG91bGQgZ2VuZXJhbGx5IHJlc3VsdCBpbiBmYXN0ZXIgb3V0cHV0LCBlc3BlY2lhbGx5IHdpdGgKKwlgLS1iYXRjaGAuICBOb3RlIHRoYXQgYGNhdC1maWxlYCB3aWxsIHN0aWxsIHNob3cgZWFjaCBvYmplY3QKKwlvbmx5IG9uY2UsIGV2ZW4gaWYgaXQgaXMgc3RvcmVkIG11bHRpcGxlIHRpbWVzIGluIHRoZQorCXJlcG9zaXRvcnkuCisKKy0tYWxsb3ctdW5rbm93bi10eXBlOjoKKwlBbGxvdyAtcyBvciAtdCB0byBxdWVyeSBicm9rZW4vY29ycnVwdCBvYmplY3RzIG9mIHVua25vd24gdHlwZS4KKworLS1mb2xsb3ctc3ltbGlua3M6OgorCVdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrLCBmb2xsb3cgc3ltbGlua3MgaW5zaWRlIHRoZQorCXJlcG9zaXRvcnkgd2hlbiByZXF1ZXN0aW5nIG9iamVjdHMgd2l0aCBleHRlbmRlZCBTSEEtMQorCWV4cHJlc3Npb25zIG9mIHRoZSBmb3JtIHRyZWUtaXNoOnBhdGgtaW4tdHJlZS4gIEluc3RlYWQgb2YKKwlwcm92aWRpbmcgb3V0cHV0IGFib3V0IHRoZSBsaW5rIGl0c2VsZiwgcHJvdmlkZSBvdXRwdXQgYWJvdXQKKwl0aGUgbGlua2VkLXRvIG9iamVjdC4gIElmIGEgc3ltbGluayBwb2ludHMgb3V0c2lkZSB0aGUKKwl0cmVlLWlzaCAoZS5nLiBhIGxpbmsgdG8gL2ZvbyBvciBhIHJvb3QtbGV2ZWwgbGluayB0byAuLi9mb28pLAorCXRoZSBwb3J0aW9uIG9mIHRoZSBsaW5rIHdoaWNoIGlzIG91dHNpZGUgdGhlIHRyZWUgd2lsbCBiZQorCXByaW50ZWQuCisrCitUaGlzIG9wdGlvbiBkb2VzIG5vdCAoY3VycmVudGx5KSB3b3JrIGNvcnJlY3RseSB3aGVuIGFuIG9iamVjdCBpbiB0aGUKK2luZGV4IGlzIHNwZWNpZmllZCAoZS5nLiBgOmxpbmtgIGluc3RlYWQgb2YgYEhFQUQ6bGlua2ApIHJhdGhlciB0aGFuCitvbmUgaW4gdGhlIHRyZWUuCisrCitUaGlzIG9wdGlvbiBjYW5ub3QgKGN1cnJlbnRseSkgYmUgdXNlZCB1bmxlc3MgYC0tYmF0Y2hgIG9yCitgLS1iYXRjaC1jaGVja2AgaXMgdXNlZC4KKysKK0ZvciBleGFtcGxlLCBjb25zaWRlciBhIGdpdCByZXBvc2l0b3J5IGNvbnRhaW5pbmc6CisrCistLQorCWY6IGEgZmlsZSBjb250YWluaW5nICJoZWxsb1xuIgorCWxpbms6IGEgc3ltbGluayB0byBmCisJZGlyL2xpbms6IGEgc3ltbGluayB0byAuLi9mCisJcGxpbms6IGEgc3ltbGluayB0byAuLi9mCisJYWxpbms6IGEgc3ltbGluayB0byAvZXRjL3Bhc3N3ZAorLS0KKysKK0ZvciBhIHJlZ3VsYXIgZmlsZSBgZmAsIGBlY2hvIEhFQUQ6ZiB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoYCB3b3VsZCBwcmludAorKworLS0KKwljZTAxMzYyNTAzMGJhOGRiYTkwNmY3NTY5NjdmOWU5Y2EzOTQ0NjRhIGJsb2IgNgorLS0KKysKK0FuZCBgZWNobyBIRUFEOmxpbmsgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaCAtLWZvbGxvdy1zeW1saW5rc2Agd291bGQKK3ByaW50IHRoZSBzYW1lIHRoaW5nLCBhcyB3b3VsZCBgSEVBRDpkaXIvbGlua2AsIGFzIHRoZXkgYm90aCBwb2ludCBhdAorYEhFQUQ6ZmAuCisrCitXaXRob3V0IGAtLWZvbGxvdy1zeW1saW5rc2AsIHRoZXNlIHdvdWxkIHByaW50IGRhdGEgYWJvdXQgdGhlIHN5bWxpbmsKK2l0c2VsZi4gIEluIHRoZSBjYXNlIG9mIGBIRUFEOmxpbmtgLCB5b3Ugd291bGQgc2VlCisrCistLQorCTRkMWFlMzViYTJjOGVjNzEyZmEyYTM3OWRiNDRhZDYzOWNhMjc3YmQgYmxvYiAxCistLQorKworQm90aCBgcGxpbmtgIGFuZCBgYWxpbmtgIHBvaW50IG91dHNpZGUgdGhlIHRyZWUsIHNvIHRoZXkgd291bGQKK3Jlc3BlY3RpdmVseSBwcmludDoKKysKKy0tCisJc3ltbGluayA0CisJLi4vZgorCisJc3ltbGluayAxMQorCS9ldGMvcGFzc3dkCistLQorCisKK09VVFBVVAorLS0tLS0tCitJZiBgLXRgIGlzIHNwZWNpZmllZCwgb25lIG9mIHRoZSA8dHlwZT4uCisKK0lmIGAtc2AgaXMgc3BlY2lmaWVkLCB0aGUgc2l6ZSBvZiB0aGUgPG9iamVjdD4gaW4gYnl0ZXMuCisKK0lmIGAtZWAgaXMgc3BlY2lmaWVkLCBubyBvdXRwdXQsIHVubGVzcyB0aGUgPG9iamVjdD4gaXMgbWFsZm9ybWVkLgorCitJZiBgLXBgIGlzIHNwZWNpZmllZCwgdGhlIGNvbnRlbnRzIG9mIDxvYmplY3Q+IGFyZSBwcmV0dHktcHJpbnRlZC4KKworSWYgPHR5cGU+IGlzIHNwZWNpZmllZCwgdGhlIHJhdyAodGhvdWdoIHVuY29tcHJlc3NlZCkgY29udGVudHMgb2YgdGhlIDxvYmplY3Q+Cit3aWxsIGJlIHJldHVybmVkLgorCitCQVRDSCBPVVRQVVQKKy0tLS0tLS0tLS0tLQorCitJZiBgLS1iYXRjaGAgb3IgYC0tYmF0Y2gtY2hlY2tgIGlzIGdpdmVuLCBgY2F0LWZpbGVgIHdpbGwgcmVhZCBvYmplY3RzCitmcm9tIHN0ZGluLCBvbmUgcGVyIGxpbmUsIGFuZCBwcmludCBpbmZvcm1hdGlvbiBhYm91dCB0aGVtLiBCeSBkZWZhdWx0LAordGhlIHdob2xlIGxpbmUgaXMgY29uc2lkZXJlZCBhcyBhbiBvYmplY3QsIGFzIGlmIGl0IHdlcmUgZmVkIHRvCitsaW5rZ2l0OmdpdC1yZXYtcGFyc2VbMV0uCisKK1lvdSBjYW4gc3BlY2lmeSB0aGUgaW5mb3JtYXRpb24gc2hvd24gZm9yIGVhY2ggb2JqZWN0IGJ5IHVzaW5nIGEgY3VzdG9tCitgPGZvcm1hdD5gLiBUaGUgYDxmb3JtYXQ+YCBpcyBjb3BpZWQgbGl0ZXJhbGx5IHRvIHN0ZG91dCBmb3IgZWFjaAorb2JqZWN0LCB3aXRoIHBsYWNlaG9sZGVycyBvZiB0aGUgZm9ybSBgJShhdG9tKWAgZXhwYW5kZWQsIGZvbGxvd2VkIGJ5IGEKK25ld2xpbmUuIFRoZSBhdmFpbGFibGUgYXRvbXMgYXJlOgorCitgb2JqZWN0bmFtZWA6OgorCVRoZSA0MC1oZXggb2JqZWN0IG5hbWUgb2YgdGhlIG9iamVjdC4KKworYG9iamVjdHR5cGVgOjoKKwlUaGUgdHlwZSBvZiB0aGUgb2JqZWN0ICh0aGUgc2FtZSBhcyBgY2F0LWZpbGUgLXRgIHJlcG9ydHMpLgorCitgb2JqZWN0c2l6ZWA6OgorCVRoZSBzaXplLCBpbiBieXRlcywgb2YgdGhlIG9iamVjdCAodGhlIHNhbWUgYXMgYGNhdC1maWxlIC1zYAorCXJlcG9ydHMpLgorCitgb2JqZWN0c2l6ZTpkaXNrYDo6CisJVGhlIHNpemUsIGluIGJ5dGVzLCB0aGF0IHRoZSBvYmplY3QgdGFrZXMgdXAgb24gZGlzay4gU2VlIHRoZQorCW5vdGUgYWJvdXQgb24tZGlzayBzaXplcyBpbiB0aGUgYENBVkVBVFNgIHNlY3Rpb24gYmVsb3cuCisKK2BkZWx0YWJhc2VgOjoKKwlJZiB0aGUgb2JqZWN0IGlzIHN0b3JlZCBhcyBhIGRlbHRhIG9uLWRpc2ssIHRoaXMgZXhwYW5kcyB0byB0aGUKKwk0MC1oZXggc2hhMSBvZiB0aGUgZGVsdGEgYmFzZSBvYmplY3QuIE90aGVyd2lzZSwgZXhwYW5kcyB0byB0aGUKKwludWxsIHNoYTEgKDQwIHplcm9lcykuIFNlZSBgQ0FWRUFUU2AgYmVsb3cuCisKK2ByZXN0YDo6CisJSWYgdGhpcyBhdG9tIGlzIHVzZWQgaW4gdGhlIG91dHB1dCBzdHJpbmcsIGlucHV0IGxpbmVzIGFyZSBzcGxpdAorCWF0IHRoZSBmaXJzdCB3aGl0ZXNwYWNlIGJvdW5kYXJ5LiBBbGwgY2hhcmFjdGVycyBiZWZvcmUgdGhhdAorCXdoaXRlc3BhY2UgYXJlIGNvbnNpZGVyZWQgdG8gYmUgdGhlIG9iamVjdCBuYW1lOyBjaGFyYWN0ZXJzCisJYWZ0ZXIgdGhhdCBmaXJzdCBydW4gb2Ygd2hpdGVzcGFjZSAoaS5lLiwgdGhlICJyZXN0IiBvZiB0aGUKKwlsaW5lKSBhcmUgb3V0cHV0IGluIHBsYWNlIG9mIHRoZSBgJShyZXN0KWAgYXRvbS4KKworSWYgbm8gZm9ybWF0IGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgZm9ybWF0IGlzIGAlKG9iamVjdG5hbWUpCislKG9iamVjdHR5cGUpICUob2JqZWN0c2l6ZSlgLgorCitJZiBgLS1iYXRjaGAgaXMgc3BlY2lmaWVkLCB0aGUgb2JqZWN0IGluZm9ybWF0aW9uIGlzIGZvbGxvd2VkIGJ5IHRoZQorb2JqZWN0IGNvbnRlbnRzIChjb25zaXN0aW5nIG9mIGAlKG9iamVjdHNpemUpYCBieXRlcyksIGZvbGxvd2VkIGJ5IGEKK25ld2xpbmUuCisKK0ZvciBleGFtcGxlLCBgLS1iYXRjaGAgd2l0aG91dCBhIGN1c3RvbSBmb3JtYXQgd291bGQgcHJvZHVjZToKKworLS0tLS0tLS0tLS0tCis8c2hhMT4gU1AgPHR5cGU+IFNQIDxzaXplPiBMRgorPGNvbnRlbnRzPiBMRgorLS0tLS0tLS0tLS0tCisKK1doZXJlYXMgYC0tYmF0Y2gtY2hlY2s9JyUob2JqZWN0bmFtZSkgJShvYmplY3R0eXBlKSdgIHdvdWxkIHByb2R1Y2U6CisKKy0tLS0tLS0tLS0tLQorPHNoYTE+IFNQIDx0eXBlPiBMRgorLS0tLS0tLS0tLS0tCisKK0lmIGEgbmFtZSBpcyBzcGVjaWZpZWQgb24gc3RkaW4gdGhhdCBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYW4gb2JqZWN0IGluCit0aGUgcmVwb3NpdG9yeSwgdGhlbiBgY2F0LWZpbGVgIHdpbGwgaWdub3JlIGFueSBjdXN0b20gZm9ybWF0IGFuZCBwcmludDoKKworLS0tLS0tLS0tLS0tCis8b2JqZWN0PiBTUCBtaXNzaW5nIExGCistLS0tLS0tLS0tLS0KKworSWYgYSBuYW1lIGlzIHNwZWNpZmllZCB0aGF0IG1pZ2h0IHJlZmVyIHRvIG1vcmUgdGhhbiBvbmUgb2JqZWN0IChhbiBhbWJpZ3VvdXMgc2hvcnQgc2hhKSwgdGhlbiBgY2F0LWZpbGVgIHdpbGwgaWdub3JlIGFueSBjdXN0b20gZm9ybWF0IGFuZCBwcmludDoKKworLS0tLS0tLS0tLS0tCis8b2JqZWN0PiBTUCBhbWJpZ3VvdXMgTEYKKy0tLS0tLS0tLS0tLQorCitJZiAtLWZvbGxvdy1zeW1saW5rcyBpcyB1c2VkLCBhbmQgYSBzeW1saW5rIGluIHRoZSByZXBvc2l0b3J5IHBvaW50cworb3V0c2lkZSB0aGUgcmVwb3NpdG9yeSwgdGhlbiBgY2F0LWZpbGVgIHdpbGwgaWdub3JlIGFueSBjdXN0b20gZm9ybWF0CithbmQgcHJpbnQ6CisKKy0tLS0tLS0tLS0tLQorc3ltbGluayBTUCA8c2l6ZT4gTEYKKzxzeW1saW5rPiBMRgorLS0tLS0tLS0tLS0tCisKK1RoZSBzeW1saW5rIHdpbGwgZWl0aGVyIGJlIGFic29sdXRlIChiZWdpbm5pbmcgd2l0aCBhIC8pLCBvciByZWxhdGl2ZQordG8gdGhlIHRyZWUgcm9vdC4gIEZvciBpbnN0YW5jZSwgaWYgZGlyL2xpbmsgcG9pbnRzIHRvIC4uLy4uL2ZvbywgdGhlbgorPHN5bWxpbms+IHdpbGwgYmUgLi4vZm9vLiAgPHNpemU+IGlzIHRoZSBzaXplIG9mIHRoZSBzeW1saW5rIGluIGJ5dGVzLgorCitJZiAtLWZvbGxvdy1zeW1saW5rcyBpcyB1c2VkLCB0aGUgZm9sbG93aW5nIGVycm9yIG1lc3NhZ2VzIHdpbGwgYmUKK2Rpc3BsYXllZDoKKworLS0tLS0tLS0tLS0tCis8b2JqZWN0PiBTUCBtaXNzaW5nIExGCistLS0tLS0tLS0tLS0KK2lzIHByaW50ZWQgd2hlbiB0aGUgaW5pdGlhbCBzeW1saW5rIHJlcXVlc3RlZCBkb2VzIG5vdCBleGlzdC4KKworLS0tLS0tLS0tLS0tCitkYW5nbGluZyBTUCA8c2l6ZT4gTEYKKzxvYmplY3Q+IExGCistLS0tLS0tLS0tLS0KK2lzIHByaW50ZWQgd2hlbiB0aGUgaW5pdGlhbCBzeW1saW5rIGV4aXN0cywgYnV0IHNvbWV0aGluZyB0aGF0CitpdCAodHJhbnNpdGl2ZS1vZikgcG9pbnRzIHRvIGRvZXMgbm90LgorCistLS0tLS0tLS0tLS0KK2xvb3AgU1AgPHNpemU+IExGCis8b2JqZWN0PiBMRgorLS0tLS0tLS0tLS0tCitpcyBwcmludGVkIGZvciBzeW1saW5rIGxvb3BzIChvciBhbnkgc3ltbGlua3MgdGhhdAorcmVxdWlyZSBtb3JlIHRoYW4gNDAgbGluayByZXNvbHV0aW9ucyB0byByZXNvbHZlKS4KKworLS0tLS0tLS0tLS0tCitub3RkaXIgU1AgPHNpemU+IExGCis8b2JqZWN0PiBMRgorLS0tLS0tLS0tLS0tCitpcyBwcmludGVkIHdoZW4sIGR1cmluZyBzeW1saW5rIHJlc29sdXRpb24sIGEgZmlsZSBpcyB1c2VkIGFzIGEKK2RpcmVjdG9yeSBuYW1lLgorCitDQVZFQVRTCistLS0tLS0tCisKK05vdGUgdGhhdCB0aGUgc2l6ZXMgb2Ygb2JqZWN0cyBvbiBkaXNrIGFyZSByZXBvcnRlZCBhY2N1cmF0ZWx5LCBidXQgY2FyZQorc2hvdWxkIGJlIHRha2VuIGluIGRyYXdpbmcgY29uY2x1c2lvbnMgYWJvdXQgd2hpY2ggcmVmcyBvciBvYmplY3RzIGFyZQorcmVzcG9uc2libGUgZm9yIGRpc2sgdXNhZ2UuIFRoZSBzaXplIG9mIGEgcGFja2VkIG5vbi1kZWx0YSBvYmplY3QgbWF5IGJlCittdWNoIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIG9iamVjdHMgd2hpY2ggZGVsdGEgYWdhaW5zdCBpdCwgYnV0IHRoZQorY2hvaWNlIG9mIHdoaWNoIG9iamVjdCBpcyB0aGUgYmFzZSBhbmQgd2hpY2ggaXMgdGhlIGRlbHRhIGlzIGFyYml0cmFyeQorYW5kIGlzIHN1YmplY3QgdG8gY2hhbmdlIGR1cmluZyBhIHJlcGFjay4KKworTm90ZSBhbHNvIHRoYXQgbXVsdGlwbGUgY29waWVzIG9mIGFuIG9iamVjdCBtYXkgYmUgcHJlc2VudCBpbiB0aGUgb2JqZWN0CitkYXRhYmFzZTsgaW4gdGhpcyBjYXNlLCBpdCBpcyB1bmRlZmluZWQgd2hpY2ggY29weSdzIHNpemUgb3IgZGVsdGEgYmFzZQord2lsbCBiZSByZXBvcnRlZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWF0dHIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZjQxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dApAQCAtMCwwICsxLDEyMCBAQAorZ2l0LWNoZWNrLWF0dHIoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaGVjay1hdHRyIC0gRGlzcGxheSBnaXRhdHRyaWJ1dGVzIGluZm9ybWF0aW9uCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNoZWNrLWF0dHInIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxwYXRobmFtZT4uLi4KKydnaXQgY2hlY2stYXR0cicgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ZvciBldmVyeSBwYXRobmFtZSwgdGhpcyBjb21tYW5kIHdpbGwgbGlzdCBpZiBlYWNoIGF0dHJpYnV0ZSBpcyAndW5zcGVjaWZpZWQnLAorJ3NldCcsIG9yICd1bnNldCcgYXMgYSBnaXRhdHRyaWJ1dGUgb24gdGhhdCBwYXRobmFtZS4KKworT1BUSU9OUworLS0tLS0tLQorLWEsIC0tYWxsOjoKKwlMaXN0IGFsbCBhdHRyaWJ1dGVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisJcGF0aHMuICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkLCB0aGVuICd1bnNwZWNpZmllZCcgYXR0cmlidXRlcworCXdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQuCisKKy0tY2FjaGVkOjoKKwlDb25zaWRlciBgLmdpdGF0dHJpYnV0ZXNgIGluIHRoZSBpbmRleCBvbmx5LCBpZ25vcmluZyB0aGUgd29ya2luZyB0cmVlLgorCistLXN0ZGluOjoKKwlSZWFkIHBhdGhuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgb25lIHBlciBsaW5lLAorCWluc3RlYWQgb2YgZnJvbSB0aGUgY29tbWFuZC1saW5lLgorCistejo6CisJVGhlIG91dHB1dCBmb3JtYXQgaXMgbW9kaWZpZWQgdG8gYmUgbWFjaGluZS1wYXJzYWJsZS4KKwlJZiBgLS1zdGRpbmAgaXMgYWxzbyBnaXZlbiwgaW5wdXQgcGF0aHMgYXJlIHNlcGFyYXRlZAorCXdpdGggYSBOVUwgY2hhcmFjdGVyIGluc3RlYWQgb2YgYSBsaW5lZmVlZCBjaGFyYWN0ZXIuCisKK1wtLTo6CisJSW50ZXJwcmV0IGFsbCBwcmVjZWRpbmcgYXJndW1lbnRzIGFzIGF0dHJpYnV0ZXMgYW5kIGFsbCBmb2xsb3dpbmcKKwlhcmd1bWVudHMgYXMgcGF0aCBuYW1lcy4KKworSWYgbm9uZSBvZiBgLS1zdGRpbmAsIGAtLWFsbGAsIG9yIGAtLWAgaXMgdXNlZCwgdGhlIGZpcnN0IGFyZ3VtZW50Cit3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gYXR0cmlidXRlIGFuZCB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzIGFzCitwYXRobmFtZXMuCisKK09VVFBVVAorLS0tLS0tCisKK1RoZSBvdXRwdXQgaXMgb2YgdGhlIGZvcm06Cis8cGF0aD4gQ09MT04gU1AgPGF0dHJpYnV0ZT4gQ09MT04gU1AgPGluZm8+IExGCisKK3VubGVzcyBgLXpgIGlzIGluIGVmZmVjdCwgaW4gd2hpY2ggY2FzZSBOVUwgaXMgdXNlZCBhcyBkZWxpbWl0ZXI6Cis8cGF0aD4gTlVMIDxhdHRyaWJ1dGU+IE5VTCA8aW5mbz4gTlVMCisKKworPHBhdGg+IGlzIHRoZSBwYXRoIG9mIGEgZmlsZSBiZWluZyBxdWVyaWVkLCA8YXR0cmlidXRlPiBpcyBhbiBhdHRyaWJ1dGUKK2JlaW5nIHF1ZXJpZWQgYW5kIDxpbmZvPiBjYW4gYmUgZWl0aGVyOgorCisndW5zcGVjaWZpZWQnOzsgd2hlbiB0aGUgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkIGZvciB0aGUgcGF0aC4KKyd1bnNldCc7Owl3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgZGVmaW5lZCBhcyBmYWxzZS4KKydzZXQnOzsJCXdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBkZWZpbmVkIGFzIHRydWUuCis8dmFsdWU+OzsJd2hlbiBhIHZhbHVlIGhhcyBiZWVuIGFzc2lnbmVkIHRvIHRoZSBhdHRyaWJ1dGUuCisKK0J1ZmZlcmluZyBoYXBwZW5zIGFzIGRvY3VtZW50ZWQgdW5kZXIgdGhlIGBHSVRfRkxVU0hgIG9wdGlvbiBpbgorbGlua2dpdDpnaXRbMV0uICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBhdm9pZGluZyBkZWFkbG9ja3MKK2NhdXNlZCBieSBvdmVyZmlsbGluZyBhbiBpbnB1dCBidWZmZXIgb3IgcmVhZGluZyBmcm9tIGFuIGVtcHR5IG91dHB1dAorYnVmZmVyLgorCitFWEFNUExFUworLS0tLS0tLS0KKworSW4gdGhlIGV4YW1wbGVzLCB0aGUgZm9sbG93aW5nICcuZ2l0YXR0cmlidXRlcycgZmlsZSBpcyB1c2VkOgorLS0tLS0tLS0tLS0tLS0tCisqLmphdmEgZGlmZj1qYXZhIC1jcmxmIG15QXR0cgorTm9NeUF0dHIuamF2YSAhbXlBdHRyCitSRUFETUUgY2F2ZWF0PXVuc3BlY2lmaWVkCistLS0tLS0tLS0tLS0tLS0KKworKiBMaXN0aW5nIGEgc2luZ2xlIGF0dHJpYnV0ZToKKy0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2stYXR0ciBkaWZmIG9yZy9leGFtcGxlL015Q2xhc3MuamF2YQorb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhOiBkaWZmOiBqYXZhCistLS0tLS0tLS0tLS0tLS0KKworKiBMaXN0aW5nIG11bHRpcGxlIGF0dHJpYnV0ZXMgZm9yIGEgZmlsZToKKy0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2stYXR0ciBjcmxmIGRpZmYgbXlBdHRyIC0tIG9yZy9leGFtcGxlL015Q2xhc3MuamF2YQorb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhOiBjcmxmOiB1bnNldAorb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhOiBkaWZmOiBqYXZhCitvcmcvZXhhbXBsZS9NeUNsYXNzLmphdmE6IG15QXR0cjogc2V0CistLS0tLS0tLS0tLS0tLS0KKworKiBMaXN0aW5nIGFsbCBhdHRyaWJ1dGVzIGZvciBhIGZpbGU6CistLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrLWF0dHIgLS1hbGwgLS0gb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhCitvcmcvZXhhbXBsZS9NeUNsYXNzLmphdmE6IGRpZmY6IGphdmEKK29yZy9leGFtcGxlL015Q2xhc3MuamF2YTogbXlBdHRyOiBzZXQKKy0tLS0tLS0tLS0tLS0tLQorCisqIExpc3RpbmcgYW4gYXR0cmlidXRlIGZvciBtdWx0aXBsZSBmaWxlczoKKy0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2stYXR0ciBteUF0dHIgLS0gb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhIG9yZy9leGFtcGxlL05vTXlBdHRyLmphdmEKK29yZy9leGFtcGxlL015Q2xhc3MuamF2YTogbXlBdHRyOiBzZXQKK29yZy9leGFtcGxlL05vTXlBdHRyLmphdmE6IG15QXR0cjogdW5zcGVjaWZpZWQKKy0tLS0tLS0tLS0tLS0tLQorCisqIE5vdCBhbGwgdmFsdWVzIGFyZSBlcXVhbGx5IHVuYW1iaWd1b3VzOgorLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVjay1hdHRyIGNhdmVhdCBSRUFETUUKK1JFQURNRTogY2F2ZWF0OiB1bnNwZWNpZmllZAorLS0tLS0tLS0tLS0tLS0tCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWlnbm9yZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1pZ25vcmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMzkyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1pZ25vcmUudHh0CkBAIC0wLDAgKzEsMTI2IEBACitnaXQtY2hlY2staWdub3JlKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaGVjay1pZ25vcmUgLSBEZWJ1ZyBnaXRpZ25vcmUgLyBleGNsdWRlIGZpbGVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNoZWNrLWlnbm9yZScgWzxvcHRpb25zPl0gPHBhdGhuYW1lPi4uLgorJ2dpdCBjaGVjay1pZ25vcmUnIFs8b3B0aW9ucz5dIC0tc3RkaW4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0ZvciBlYWNoIHBhdGhuYW1lIGdpdmVuIHZpYSB0aGUgY29tbWFuZC1saW5lIG9yIGZyb20gYSBmaWxlIHZpYQorYC0tc3RkaW5gLCBjaGVjayB3aGV0aGVyIHRoZSBmaWxlIGlzIGV4Y2x1ZGVkIGJ5IC5naXRpZ25vcmUgKG9yIG90aGVyCitpbnB1dCBmaWxlcyB0byB0aGUgZXhjbHVkZSBtZWNoYW5pc20pIGFuZCBvdXRwdXQgdGhlIHBhdGggaWYgaXQgaXMKK2V4Y2x1ZGVkLgorCitCeSBkZWZhdWx0LCB0cmFja2VkIGZpbGVzIGFyZSBub3Qgc2hvd24gYXQgYWxsIHNpbmNlIHRoZXkgYXJlIG5vdAorc3ViamVjdCB0byBleGNsdWRlIHJ1bGVzOyBidXQgc2VlIGAtLW5vLWluZGV4Jy4KKworT1BUSU9OUworLS0tLS0tLQorLXEsIC0tcXVpZXQ6OgorCURvbid0IG91dHB1dCBhbnl0aGluZywganVzdCBzZXQgZXhpdCBzdGF0dXMuICBUaGlzIGlzIG9ubHkKKwl2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lLgorCistdiwgLS12ZXJib3NlOjoKKwlJbnN0ZWFkIG9mIHByaW50aW5nIHRoZSBwYXRocyB0aGF0IGFyZSBleGNsdWRlZCwgZm9yIGVhY2ggcGF0aAorCXRoYXQgbWF0Y2hlcyBhbiBleGNsdWRlIHBhdHRlcm4sIHByaW50IHRoZSBleGNsdWRlIHBhdHRlcm4KKwl0b2dldGhlciB3aXRoIHRoZSBwYXRoLiAgKE1hdGNoaW5nIGFuIGV4Y2x1ZGUgcGF0dGVybiB1c3VhbGx5CisJbWVhbnMgdGhlIHBhdGggaXMgZXhjbHVkZWQsIGJ1dCBpZiB0aGUgcGF0dGVybiBiZWdpbnMgd2l0aCAnIScKKwl0aGVuIGl0IGlzIGEgbmVnYXRlZCBwYXR0ZXJuIGFuZCBtYXRjaGluZyBpdCBtZWFucyB0aGUgcGF0aCBpcworCU5PVCBleGNsdWRlZC4pCisrCitGb3IgcHJlY2VkZW5jZSBydWxlcyB3aXRoaW4gYW5kIGJldHdlZW4gZXhjbHVkZSBzb3VyY2VzLCBzZWUKK2xpbmtnaXQ6Z2l0aWdub3JlWzVdLgorCistLXN0ZGluOjoKKwlSZWFkIHBhdGhuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgb25lIHBlciBsaW5lLAorCWluc3RlYWQgb2YgZnJvbSB0aGUgY29tbWFuZC1saW5lLgorCistejo6CisJVGhlIG91dHB1dCBmb3JtYXQgaXMgbW9kaWZpZWQgdG8gYmUgbWFjaGluZS1wYXJzYWJsZSAoc2VlCisJYmVsb3cpLiAgSWYgYC0tc3RkaW5gIGlzIGFsc28gZ2l2ZW4sIGlucHV0IHBhdGhzIGFyZSBzZXBhcmF0ZWQKKwl3aXRoIGEgTlVMIGNoYXJhY3RlciBpbnN0ZWFkIG9mIGEgbGluZWZlZWQgY2hhcmFjdGVyLgorCistbiwgLS1ub24tbWF0Y2hpbmc6OgorCVNob3cgZ2l2ZW4gcGF0aHMgd2hpY2ggZG9uJ3QgbWF0Y2ggYW55IHBhdHRlcm4uCSBUaGlzIG9ubHkKKwltYWtlcyBzZW5zZSB3aGVuIGAtLXZlcmJvc2VgIGlzIGVuYWJsZWQsIG90aGVyd2lzZSBpdCB3b3VsZAorCW5vdCBiZSBwb3NzaWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHBhdGhzIHdoaWNoIG1hdGNoIGEKKwlwYXR0ZXJuIGFuZCB0aG9zZSB3aGljaCBkb24ndC4KKworLS1uby1pbmRleDo6CisJRG9uJ3QgbG9vayBpbiB0aGUgaW5kZXggd2hlbiB1bmRlcnRha2luZyB0aGUgY2hlY2tzLiBUaGlzIGNhbgorCWJlIHVzZWQgdG8gZGVidWcgd2h5IGEgcGF0aCBiZWNhbWUgdHJhY2tlZCBieSBlLmcuIGBnaXQgYWRkIC5gCisJYW5kIHdhcyBub3QgaWdub3JlZCBieSB0aGUgcnVsZXMgYXMgZXhwZWN0ZWQgYnkgdGhlIHVzZXIgb3Igd2hlbgorCWRldmVsb3BpbmcgcGF0dGVybnMgaW5jbHVkaW5nIG5lZ2F0aW9uIHRvIG1hdGNoIGEgcGF0aCBwcmV2aW91c2x5CisJYWRkZWQgd2l0aCBgZ2l0IGFkZCAtZmAuCisKK09VVFBVVAorLS0tLS0tCisKK0J5IGRlZmF1bHQsIGFueSBvZiB0aGUgZ2l2ZW4gcGF0aG5hbWVzIHdoaWNoIG1hdGNoIGFuIGlnbm9yZSBwYXR0ZXJuCit3aWxsIGJlIG91dHB1dCwgb25lIHBlciBsaW5lLiAgSWYgbm8gcGF0dGVybiBtYXRjaGVzIGEgZ2l2ZW4gcGF0aCwKK25vdGhpbmcgd2lsbCBiZSBvdXRwdXQgZm9yIHRoYXQgcGF0aDsgdGhpcyBtZWFucyB0aGF0IHBhdGggd2lsbCBub3QgYmUKK2lnbm9yZWQuCisKK0lmIGAtLXZlcmJvc2VgIGlzIHNwZWNpZmllZCwgdGhlIG91dHB1dCBpcyBhIHNlcmllcyBvZiBsaW5lcyBvZiB0aGUgZm9ybToKKworPHNvdXJjZT4gPENPTE9OPiA8bGluZW51bT4gPENPTE9OPiA8cGF0dGVybj4gPEhUPiA8cGF0aG5hbWU+CisKKzxwYXRobmFtZT4gaXMgdGhlIHBhdGggb2YgYSBmaWxlIGJlaW5nIHF1ZXJpZWQsIDxwYXR0ZXJuPiBpcyB0aGUKK21hdGNoaW5nIHBhdHRlcm4sIDxzb3VyY2U+IGlzIHRoZSBwYXR0ZXJuJ3Mgc291cmNlIGZpbGUsIGFuZCA8bGluZW51bT4KK2lzIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgcGF0dGVybiB3aXRoaW4gdGhhdCBzb3VyY2UuICBJZiB0aGUgcGF0dGVybgorY29udGFpbmVkIGEgYCFgIHByZWZpeCBvciBgL2Agc3VmZml4LCBpdCB3aWxsIGJlIHByZXNlcnZlZCBpbiB0aGUKK291dHB1dC4gIDxzb3VyY2U+IHdpbGwgYmUgYW4gYWJzb2x1dGUgcGF0aCB3aGVuIHJlZmVycmluZyB0byB0aGUgZmlsZQorY29uZmlndXJlZCBieSBgY29yZS5leGNsdWRlc0ZpbGVgLCBvciByZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSByb290Cit3aGVuIHJlZmVycmluZyB0byBgLmdpdC9pbmZvL2V4Y2x1ZGVgIG9yIGEgcGVyLWRpcmVjdG9yeSBleGNsdWRlIGZpbGUuCisKK0lmIGAtemAgaXMgc3BlY2lmaWVkLCB0aGUgcGF0aG5hbWVzIGluIHRoZSBvdXRwdXQgYXJlIGRlbGltaXRlZCBieSB0aGUKK251bGwgY2hhcmFjdGVyOyBpZiBgLS12ZXJib3NlYCBpcyBhbHNvIHNwZWNpZmllZCB0aGVuIG51bGwgY2hhcmFjdGVycworYXJlIGFsc28gdXNlZCBpbnN0ZWFkIG9mIGNvbG9ucyBhbmQgaGFyZCB0YWJzOgorCis8c291cmNlPiA8TlVMTD4gPGxpbmVudW0+IDxOVUxMPiA8cGF0dGVybj4gPE5VTEw+IDxwYXRobmFtZT4gPE5VTEw+CisKK0lmIGAtbmAgb3IgYC0tbm9uLW1hdGNoaW5nYCBhcmUgc3BlY2lmaWVkLCBub24tbWF0Y2hpbmcgcGF0aG5hbWVzIHdpbGwKK2Fsc28gYmUgb3V0cHV0LCBpbiB3aGljaCBjYXNlIGFsbCBmaWVsZHMgaW4gZWFjaCBvdXRwdXQgcmVjb3JkIGV4Y2VwdAorZm9yIDxwYXRobmFtZT4gd2lsbCBiZSBlbXB0eS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHJ1bm5pbmcKK25vbi1pbnRlcmFjdGl2ZWx5LCBzbyB0aGF0IGZpbGVzIGNhbiBiZSBpbmNyZW1lbnRhbGx5IHN0cmVhbWVkIHRvCitTVERJTiBvZiBhIGxvbmctcnVubmluZyBjaGVjay1pZ25vcmUgcHJvY2VzcywgYW5kIGZvciBlYWNoIG9mIHRoZXNlCitmaWxlcywgU1RET1VUIHdpbGwgaW5kaWNhdGUgd2hldGhlciB0aGF0IGZpbGUgbWF0Y2hlZCBhIHBhdHRlcm4gb3IKK25vdC4gIChXaXRob3V0IHRoaXMgb3B0aW9uLCBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIHRlbGwgd2hldGhlciB0aGUKK2Fic2VuY2Ugb2Ygb3V0cHV0IGZvciBhIGdpdmVuIGZpbGUgbWVhbnQgdGhhdCBpdCBkaWRuJ3QgbWF0Y2ggYW55CitwYXR0ZXJuLCBvciB0aGF0IHRoZSBvdXRwdXQgaGFkbid0IGJlZW4gZ2VuZXJhdGVkIHlldC4pCisKK0J1ZmZlcmluZyBoYXBwZW5zIGFzIGRvY3VtZW50ZWQgdW5kZXIgdGhlIGBHSVRfRkxVU0hgIG9wdGlvbiBpbgorbGlua2dpdDpnaXRbMV0uICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBhdm9pZGluZyBkZWFkbG9ja3MKK2NhdXNlZCBieSBvdmVyZmlsbGluZyBhbiBpbnB1dCBidWZmZXIgb3IgcmVhZGluZyBmcm9tIGFuIGVtcHR5IG91dHB1dAorYnVmZmVyLgorCitFWElUIFNUQVRVUworLS0tLS0tLS0tLS0KKworMDo6CisJT25lIG9yIG1vcmUgb2YgdGhlIHByb3ZpZGVkIHBhdGhzIGlzIGlnbm9yZWQuCisKKzE6OgorCU5vbmUgb2YgdGhlIHByb3ZpZGVkIHBhdGhzIGFyZSBpZ25vcmVkLgorCisxMjg6OgorCUEgZmF0YWwgZXJyb3Igd2FzIGVuY291bnRlcmVkLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0aWdub3JlWzVdCitsaW5rZ2l0OmdpdC1jb25maWdbMV0KK2xpbmtnaXQ6Z2l0LWxzLWZpbGVzWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stbWFpbG1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1tYWlsbWFwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTIwNTVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stbWFpbG1hcC50eHQKQEAgLTAsMCArMSw0NyBAQAorZ2l0LWNoZWNrLW1haWxtYXAoMSkKKz09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaGVjay1tYWlsbWFwIC0gU2hvdyBjYW5vbmljYWwgbmFtZXMgYW5kIGVtYWlsIGFkZHJlc3NlcyBvZiBjb250YWN0cworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjaGVjay1tYWlsbWFwJyBbPG9wdGlvbnM+XSA8Y29udGFjdD4uLi4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworRm9yIGVhY2ggYGBOYW1lICQkPHVzZXJAaG9zdD4kJCcnIG9yIGBgJCQ8dXNlckBob3N0PiQkJycgZnJvbSB0aGUgY29tbWFuZC1saW5lCitvciBzdGFuZGFyZCBpbnB1dCAod2hlbiB1c2luZyBgLS1zdGRpbmApLCBsb29rIHVwIHRoZSBwZXJzb24ncyBjYW5vbmljYWwgbmFtZQorYW5kIGVtYWlsIGFkZHJlc3MgKHNlZSAiTWFwcGluZyBBdXRob3JzIiBiZWxvdykuIElmIGZvdW5kLCBwcmludCB0aGVtOworb3RoZXJ3aXNlIHByaW50IHRoZSBpbnB1dCBhcy1pcy4KKworCitPUFRJT05TCistLS0tLS0tCistLXN0ZGluOjoKKwlSZWFkIGNvbnRhY3RzLCBvbmUgcGVyIGxpbmUsIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGFmdGVyIGV4aGF1c3RpbmcKKwljb250YWN0cyBwcm92aWRlZCBvbiB0aGUgY29tbWFuZC1saW5lLgorCisKK09VVFBVVAorLS0tLS0tCisKK0ZvciBlYWNoIGNvbnRhY3QsIGEgc2luZ2xlIGxpbmUgaXMgb3V0cHV0LCB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZS4gIElmIHRoZQorbmFtZSBpcyBwcm92aWRlZCBvciBrbm93biB0byB0aGUgJ21haWxtYXAnLCBgYE5hbWUgJCQ8dXNlckBob3N0PiQkJycgaXMKK3ByaW50ZWQ7IG90aGVyd2lzZSBvbmx5IGBgJCQ8dXNlckBob3N0PiQkJycgaXMgcHJpbnRlZC4KKworCitNQVBQSU5HIEFVVEhPUlMKKy0tLS0tLS0tLS0tLS0tLQorCitpbmNsdWRlOjptYWlsbWFwLnR4dFtdCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1yZWYtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNmE0MTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1yZWYtZm9ybWF0LnR4dApAQCAtMCwwICsxLDE0MCBAQAorZ2l0LWNoZWNrLXJlZi1mb3JtYXQoMSkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaGVjay1yZWYtZm9ybWF0IC0gRW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIG5hbWUgaXMgd2VsbCBmb3JtZWQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNoZWNrLXJlZi1mb3JtYXQnIFstLW5vcm1hbGl6ZV0KKyAgICAgICBbLS1bbm8tXWFsbG93LW9uZWxldmVsXSBbLS1yZWZzcGVjLXBhdHRlcm5dCisgICAgICAgPHJlZm5hbWU+CisnZ2l0IGNoZWNrLXJlZi1mb3JtYXQnIC0tYnJhbmNoIDxicmFuY2huYW1lLXNob3J0aGFuZD4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDaGVja3MgaWYgYSBnaXZlbiAncmVmbmFtZScgaXMgYWNjZXB0YWJsZSwgYW5kIGV4aXRzIHdpdGggYSBub24temVybworc3RhdHVzIGlmIGl0IGlzIG5vdC4KKworQSByZWZlcmVuY2UgaXMgdXNlZCBpbiBHaXQgdG8gc3BlY2lmeSBicmFuY2hlcyBhbmQgdGFncy4gIEEKK2JyYW5jaCBoZWFkIGlzIHN0b3JlZCBpbiB0aGUgYHJlZnMvaGVhZHNgIGhpZXJhcmNoeSwgd2hpbGUKK2EgdGFnIGlzIHN0b3JlZCBpbiB0aGUgYHJlZnMvdGFnc2AgaGllcmFyY2h5IG9mIHRoZSByZWYgbmFtZXNwYWNlCisodHlwaWNhbGx5IGluIGAkR0lUX0RJUi9yZWZzL2hlYWRzYCBhbmQgYCRHSVRfRElSL3JlZnMvdGFnc2AKK2RpcmVjdG9yaWVzIG9yLCBhcyBlbnRyaWVzIGluIGZpbGUgYCRHSVRfRElSL3BhY2tlZC1yZWZzYAoraWYgcmVmcyBhcmUgcGFja2VkIGJ5IGBnaXQgZ2NgKS4KKworR2l0IGltcG9zZXMgdGhlIGZvbGxvd2luZyBydWxlcyBvbiBob3cgcmVmZXJlbmNlcyBhcmUgbmFtZWQ6CisKKy4gVGhleSBjYW4gaW5jbHVkZSBzbGFzaCBgL2AgZm9yIGhpZXJhcmNoaWNhbCAoZGlyZWN0b3J5KQorICBncm91cGluZywgYnV0IG5vIHNsYXNoLXNlcGFyYXRlZCBjb21wb25lbnQgY2FuIGJlZ2luIHdpdGggYQorICBkb3QgYC5gIG9yIGVuZCB3aXRoIHRoZSBzZXF1ZW5jZSBgLmxvY2tgLgorCisuIFRoZXkgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBgL2AuIFRoaXMgZW5mb3JjZXMgdGhlIHByZXNlbmNlIG9mIGEKKyAgY2F0ZWdvcnkgbGlrZSBgaGVhZHMvYCwgYHRhZ3MvYCBldGMuIGJ1dCB0aGUgYWN0dWFsIG5hbWVzIGFyZSBub3QKKyAgcmVzdHJpY3RlZC4gIElmIHRoZSBgLS1hbGxvdy1vbmVsZXZlbGAgb3B0aW9uIGlzIHVzZWQsIHRoaXMgcnVsZQorICBpcyB3YWl2ZWQuCisKKy4gVGhleSBjYW5ub3QgaGF2ZSB0d28gY29uc2VjdXRpdmUgZG90cyBgLi5gIGFueXdoZXJlLgorCisuIFRoZXkgY2Fubm90IGhhdmUgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzIChpLmUuIGJ5dGVzIHdob3NlCisgIHZhbHVlcyBhcmUgbG93ZXIgdGhhbiBcMDQwLCBvciBcMTc3IGBERUxgKSwgc3BhY2UsIHRpbGRlIGB+YCwKKyAgY2FyZXQgYF5gLCBvciBjb2xvbiBgOmAgYW55d2hlcmUuCisKKy4gVGhleSBjYW5ub3QgaGF2ZSBxdWVzdGlvbi1tYXJrIGA/YCwgYXN0ZXJpc2sgYCpgLCBvciBvcGVuCisgIGJyYWNrZXQgYFtgIGFueXdoZXJlLiAgU2VlIHRoZSBgLS1yZWZzcGVjLXBhdHRlcm5gIG9wdGlvbiBiZWxvdyBmb3IKKyAgYW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVsZS4KKworLiBUaGV5IGNhbm5vdCBiZWdpbiBvciBlbmQgd2l0aCBhIHNsYXNoIGAvYCBvciBjb250YWluIG11bHRpcGxlCisgIGNvbnNlY3V0aXZlIHNsYXNoZXMgKHNlZSB0aGUgYC0tbm9ybWFsaXplYCBvcHRpb24gYmVsb3cgZm9yIGFuCisgIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUpCisKKy4gVGhleSBjYW5ub3QgZW5kIHdpdGggYSBkb3QgYC5gLgorCisuIFRoZXkgY2Fubm90IGNvbnRhaW4gYSBzZXF1ZW5jZSBgQHtgLgorCisuIFRoZXkgY2Fubm90IGJlIHRoZSBzaW5nbGUgY2hhcmFjdGVyIGBAYC4KKworLiBUaGV5IGNhbm5vdCBjb250YWluIGEgYFxgLgorCitUaGVzZSBydWxlcyBtYWtlIGl0IGVhc3kgZm9yIHNoZWxsIHNjcmlwdCBiYXNlZCB0b29scyB0byBwYXJzZQorcmVmZXJlbmNlIG5hbWVzLCBwYXRobmFtZSBleHBhbnNpb24gYnkgdGhlIHNoZWxsIHdoZW4gYSByZWZlcmVuY2UgbmFtZSBpcyB1c2VkCit1bnF1b3RlZCAoYnkgbWlzdGFrZSksIGFuZCBhbHNvIGF2b2lkIGFtYmlndWl0aWVzIGluIGNlcnRhaW4KK3JlZmVyZW5jZSBuYW1lIGV4cHJlc3Npb25zIChzZWUgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10pOgorCisuIEEgZG91YmxlLWRvdCBgLi5gIGlzIG9mdGVuIHVzZWQgYXMgaW4gYHJlZjEuLnJlZjJgLCBhbmQgaW4gc29tZQorICBjb250ZXh0cyB0aGlzIG5vdGF0aW9uIG1lYW5zIGBecmVmMSByZWYyYCAoaS5lLiBub3QgaW4KKyAgYHJlZjFgIGFuZCBpbiBgcmVmMmApLgorCisuIEEgdGlsZGUgYH5gIGFuZCBjYXJldCBgXmAgYXJlIHVzZWQgdG8gaW50cm9kdWNlIHRoZSBwb3N0Zml4CisgICdudGggcGFyZW50JyBhbmQgJ3BlZWwgb25pb24nIG9wZXJhdGlvbi4KKworLiBBIGNvbG9uIGA6YCBpcyB1c2VkIGFzIGluIGBzcmNyZWY6ZHN0cmVmYCB0byBtZWFuICJ1c2Ugc3JjcmVmXCdzCisgIHZhbHVlIGFuZCBzdG9yZSBpdCBpbiBkc3RyZWYiIGluIGZldGNoIGFuZCBwdXNoIG9wZXJhdGlvbnMuCisgIEl0IG1heSBhbHNvIGJlIHVzZWQgdG8gc2VsZWN0IGEgc3BlY2lmaWMgb2JqZWN0IHN1Y2ggYXMgd2l0aAorICAnZ2l0IGNhdC1maWxlJzogImdpdCBjYXQtZmlsZSBibG9iIHYxLjMuMzpyZWZzLmMiLgorCisuIGF0LW9wZW4tYnJhY2UgYEB7YCBpcyB1c2VkIGFzIGEgbm90YXRpb24gdG8gYWNjZXNzIGEgcmVmbG9nIGVudHJ5LgorCitXaXRoIHRoZSBgLS1icmFuY2hgIG9wdGlvbiwgdGhlIGNvbW1hbmQgdGFrZXMgYSBuYW1lIGFuZCBjaGVja3MgaWYKK2l0IGNhbiBiZSB1c2VkIGFzIGEgdmFsaWQgYnJhbmNoIG5hbWUgKGUuZy4gd2hlbiBjcmVhdGluZyBhIG5ldworYnJhbmNoKS4gQnV0IGJlIGNhdXRpb3VzIHdoZW4gdXNpbmcgdGhlCitwcmV2aW91cyBjaGVja291dCBzeW50YXggdGhhdCBtYXkgcmVmZXIgdG8gYSBkZXRhY2hlZCBIRUFEIHN0YXRlLgorVGhlIHJ1bGUgYGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoICRuYW1lYCBpbXBsZW1lbnRzCittYXkgYmUgc3RyaWN0ZXIgdGhhbiB3aGF0IGBnaXQgY2hlY2stcmVmLWZvcm1hdCByZWZzL2hlYWRzLyRuYW1lYAorc2F5cyAoZS5nLiBhIGRhc2ggbWF5IGFwcGVhciBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcmVmIGNvbXBvbmVudCwKK2J1dCBpdCBpcyBleHBsaWNpdGx5IGZvcmJpZGRlbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgYnJhbmNoIG5hbWUpLgorV2hlbiBydW4gd2l0aCBgLS1icmFuY2hgIG9wdGlvbiBpbiBhIHJlcG9zaXRvcnksIHRoZSBpbnB1dCBpcyBmaXJzdAorZXhwYW5kZWQgZm9yIHRoZSBgYHByZXZpb3VzIGNoZWNrb3V0IHN5bnRheCcnCitgQHstbn1gLiAgRm9yIGV4YW1wbGUsIGBAey0xfWAgaXMgYSB3YXkgdG8gcmVmZXIgdGhlIGxhc3QgdGhpbmcgdGhhdAord2FzIGNoZWNrZWQgb3V0IHVzaW5nICJnaXQgc3dpdGNoIiBvciAiZ2l0IGNoZWNrb3V0IiBvcGVyYXRpb24uCitUaGlzIG9wdGlvbiBzaG91bGQgYmUKK3VzZWQgYnkgcG9yY2VsYWlucyB0byBhY2NlcHQgdGhpcyBzeW50YXggYW55d2hlcmUgYSBicmFuY2ggbmFtZSBpcworZXhwZWN0ZWQsIHNvIHRoZXkgY2FuIGFjdCBhcyBpZiB5b3UgdHlwZWQgdGhlIGJyYW5jaCBuYW1lLiBBcyBhbgorZXhjZXB0aW9uIG5vdGUgdGhhdCwgdGhlIGBgcHJldmlvdXMgY2hlY2tvdXQgb3BlcmF0aW9uJycgbWlnaHQgcmVzdWx0CitpbiBhIGNvbW1pdCBvYmplY3QgbmFtZSB3aGVuIHRoZSBOLXRoIGxhc3QgdGhpbmcgY2hlY2tlZCBvdXQgd2FzIG5vdAorYSBicmFuY2guCisKK09QVElPTlMKKy0tLS0tLS0KKy0tW25vLV1hbGxvdy1vbmVsZXZlbDo6CisJQ29udHJvbHMgd2hldGhlciBvbmUtbGV2ZWwgcmVmbmFtZXMgYXJlIGFjY2VwdGVkIChpLmUuLAorCXJlZm5hbWVzIHRoYXQgZG8gbm90IGNvbnRhaW4gbXVsdGlwbGUgYC9gLXNlcGFyYXRlZAorCWNvbXBvbmVudHMpLiAgVGhlIGRlZmF1bHQgaXMgYC0tbm8tYWxsb3ctb25lbGV2ZWxgLgorCistLXJlZnNwZWMtcGF0dGVybjo6CisJSW50ZXJwcmV0IDxyZWZuYW1lPiBhcyBhIHJlZmVyZW5jZSBuYW1lIHBhdHRlcm4gZm9yIGEgcmVmc3BlYworCShhcyB1c2VkIHdpdGggcmVtb3RlIHJlcG9zaXRvcmllcykuICBJZiB0aGlzIG9wdGlvbiBpcworCWVuYWJsZWQsIDxyZWZuYW1lPiBpcyBhbGxvd2VkIHRvIGNvbnRhaW4gYSBzaW5nbGUgYCpgCisJaW4gdGhlIHJlZnNwZWMgKGUuZy4sIGBmb28vYmFyKi9iYXpgIG9yIGBmb28vYmFyKmJhei9gCisJYnV0IG5vdCBgZm9vL2JhciovYmF6KmApLgorCistLW5vcm1hbGl6ZTo6CisJTm9ybWFsaXplICdyZWZuYW1lJyBieSByZW1vdmluZyBhbnkgbGVhZGluZyBzbGFzaCAoYC9gKQorCWNoYXJhY3RlcnMgYW5kIGNvbGxhcHNpbmcgcnVucyBvZiBhZGphY2VudCBzbGFzaGVzIGJldHdlZW4KKwluYW1lIGNvbXBvbmVudHMgaW50byBhIHNpbmdsZSBzbGFzaC4gIElmIHRoZSBub3JtYWxpemVkCisJcmVmbmFtZSBpcyB2YWxpZCB0aGVuIHByaW50IGl0IHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdAorCXdpdGggYSBzdGF0dXMgb2YgMCwgb3RoZXJ3aXNlIGV4aXQgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cy4KKwkoYC0tcHJpbnRgIGlzIGEgZGVwcmVjYXRlZCB3YXkgdG8gc3BlbGwgYC0tbm9ybWFsaXplYC4pCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKyogUHJpbnQgdGhlIG5hbWUgb2YgdGhlIHByZXZpb3VzIHRoaW5nIGNoZWNrZWQgb3V0OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTF9CistLS0tLS0tLS0tLS0KKworKiBEZXRlcm1pbmUgdGhlIHJlZmVyZW5jZSBuYW1lIHRvIHVzZSBmb3IgYSBuZXcgYnJhbmNoOgorKworLS0tLS0tLS0tLS0tCiskIHJlZj0kKGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tbm9ybWFsaXplICJyZWZzL2hlYWRzLyRuZXdicmFuY2giKXx8Cit7IGVjaG8gIndlIGRvIG5vdCBsaWtlICckbmV3YnJhbmNoJyBhcyBhIGJyYW5jaCBuYW1lLiIgPiYyIDsgZXhpdCAxIDsgfQorLS0tLS0tLS0tLS0tCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQtaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQtaW5kZXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMzNlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC1pbmRleC50eHQKQEAgLTAsMCArMSwxNzcgQEAKK2dpdC1jaGVja291dC1pbmRleCgxKQorPT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaGVja291dC1pbmRleCAtIENvcHkgZmlsZXMgZnJvbSB0aGUgaW5kZXggdG8gdGhlIHdvcmtpbmcgdHJlZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjaGVja291dC1pbmRleCcgWy11XSBbLXFdIFstYV0gWy1mXSBbLW5dIFstLXByZWZpeD08c3RyaW5nPl0KKwkJICAgWy0tc3RhZ2U9PG51bWJlcj58YWxsXQorCQkgICBbLS10ZW1wXQorCQkgICBbLXpdIFstLXN0ZGluXQorCQkgICBbLS1dIFs8ZmlsZT4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorV2lsbCBjb3B5IGFsbCBmaWxlcyBsaXN0ZWQgZnJvbSB0aGUgaW5kZXggdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5Cisobm90IG92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzKS4KKworT1BUSU9OUworLS0tLS0tLQorLXU6OgorLS1pbmRleDo6CisJdXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gZm9yIHRoZSBjaGVja2VkIG91dCBlbnRyaWVzIGluCisJdGhlIGluZGV4IGZpbGUuCisKKy1xOjoKKy0tcXVpZXQ6OgorCWJlIHF1aWV0IGlmIGZpbGVzIGV4aXN0IG9yIGFyZSBub3QgaW4gdGhlIGluZGV4CisKKy1mOjoKKy0tZm9yY2U6OgorCWZvcmNlcyBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMKKworLWE6OgorLS1hbGw6OgorCWNoZWNrcyBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleC4gIENhbm5vdCBiZSB1c2VkCisJdG9nZXRoZXIgd2l0aCBleHBsaWNpdCBmaWxlbmFtZXMuCisKKy1uOjoKKy0tbm8tY3JlYXRlOjoKKwlEb24ndCBjaGVja291dCBuZXcgZmlsZXMsIG9ubHkgcmVmcmVzaCBmaWxlcyBhbHJlYWR5IGNoZWNrZWQKKwlvdXQuCisKKy0tcHJlZml4PTxzdHJpbmc+OjoKKwlXaGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+ICh1c3VhbGx5IGEgZGlyZWN0b3J5CisJaW5jbHVkaW5nIGEgdHJhaWxpbmcgLykKKworLS1zdGFnZT08bnVtYmVyPnxhbGw6OgorCUluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHVubWVyZ2VkIGVudHJpZXMsIGNvcHkgb3V0IHRoZQorCWZpbGVzIGZyb20gbmFtZWQgc3RhZ2UuICA8bnVtYmVyPiBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMy4KKwlOb3RlOiAtLXN0YWdlPWFsbCBhdXRvbWF0aWNhbGx5IGltcGxpZXMgLS10ZW1wLgorCistLXRlbXA6OgorCUluc3RlYWQgb2YgY29weWluZyB0aGUgZmlsZXMgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5CisJd3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzLiAgVGhlIHRlbXBvcmFyeSBuYW1lCisJYXNzb2NpYXRpb25zIHdpbGwgYmUgd3JpdHRlbiB0byBzdGRvdXQuCisKKy0tc3RkaW46OgorCUluc3RlYWQgb2YgdGFraW5nIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLAorCXJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4gIFBhdGhzIGFyZQorCXNlcGFyYXRlZCBieSBMRiAoaS5lLiBvbmUgcGF0aCBwZXIgbGluZSkgYnkgZGVmYXVsdC4KKworLXo6OgorCU9ubHkgbWVhbmluZ2Z1bCB3aXRoIGAtLXN0ZGluYDsgcGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoCisJTlVMIGNoYXJhY3RlciBpbnN0ZWFkIG9mIExGLgorCitcLS06OgorCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCisKK1RoZSBvcmRlciBvZiB0aGUgZmxhZ3MgdXNlZCB0byBtYXR0ZXIsIGJ1dCBub3QgYW55bW9yZS4KKworSnVzdCBkb2luZyBgZ2l0IGNoZWNrb3V0LWluZGV4YCBkb2VzIG5vdGhpbmcuIFlvdSBwcm9iYWJseSBtZWFudAorYGdpdCBjaGVja291dC1pbmRleCAtYWAuIEFuZCBpZiB5b3Ugd2FudCB0byBmb3JjZSBpdCwgeW91IHdhbnQKK2BnaXQgY2hlY2tvdXQtaW5kZXggLWYgLWFgLgorCitJbnR1aXRpdmVuZXNzIGlzIG5vdCB0aGUgZ29hbCBoZXJlLiBSZXBlYXRhYmlsaXR5IGlzLiBUaGUgcmVhc29uIGZvcgordGhlICJubyBhcmd1bWVudHMgbWVhbnMgbm8gd29yayIgYmVoYXZpb3IgaXMgdGhhdCBmcm9tIHNjcmlwdHMgeW91IGFyZQorc3VwcG9zZWQgdG8gYmUgYWJsZSB0byBkbzoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBmaW5kIC4gLW5hbWUgJyouaCcgLXByaW50MCB8IHhhcmdzIC0wIGdpdCBjaGVja291dC1pbmRleCAtZiAtLQorLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIGZvcmNlIGFsbCBleGlzdGluZyBgKi5oYCBmaWxlcyB0byBiZSByZXBsYWNlZCB3aXRoIHRoZWlyCitjYWNoZWQgY29waWVzLiBJZiBhbiBlbXB0eSBjb21tYW5kIGxpbmUgaW1wbGllZCAiYWxsIiwgdGhlbiB0aGlzIHdvdWxkCitmb3JjZS1yZWZyZXNoIGV2ZXJ5dGhpbmcgaW4gdGhlIGluZGV4LCB3aGljaCB3YXMgbm90IHRoZSBwb2ludC4gIEJ1dAorc2luY2UgJ2dpdCBjaGVja291dC1pbmRleCcgYWNjZXB0cyAtLXN0ZGluIGl0IHdvdWxkIGJlIGZhc3RlciB0byB1c2U6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZmluZCAuIC1uYW1lICcqLmgnIC1wcmludDAgfCBnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXogLS1zdGRpbgorLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYC0tYCBpcyBqdXN0IGEgZ29vZCBpZGVhIHdoZW4geW91IGtub3cgdGhlIHJlc3Qgd2lsbCBiZSBmaWxlbmFtZXM7CitpdCB3aWxsIHByZXZlbnQgcHJvYmxlbXMgd2l0aCBhIGZpbGVuYW1lIG9mLCBmb3IgZXhhbXBsZSwgIGAtYWAuCitVc2luZyBgLS1gIGlzIHByb2JhYmx5IGEgZ29vZCBwb2xpY3kgaW4gc2NyaXB0cy4KKworCitVc2luZyAtLXRlbXAgb3IgLS1zdGFnZT1hbGwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2hlbiBgLS10ZW1wYCBpcyB1c2VkIChvciBpbXBsaWVkIGJ5IGAtLXN0YWdlPWFsbGApCisnZ2l0IGNoZWNrb3V0LWluZGV4JyB3aWxsIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIGZvciBlYWNoIGluZGV4CitlbnRyeSBiZWluZyBjaGVja2VkIG91dC4gIFRoZSBpbmRleCB3aWxsIG5vdCBiZSB1cGRhdGVkIHdpdGggc3RhdAoraW5mb3JtYXRpb24uICBUaGVzZSBvcHRpb25zIGNhbiBiZSB1c2VmdWwgaWYgdGhlIGNhbGxlciBuZWVkcyBhbGwKK3N0YWdlcyBvZiBhbGwgdW5tZXJnZWQgZW50cmllcyBzbyB0aGF0IHRoZSB1bm1lcmdlZCBmaWxlcyBjYW4gYmUKK3Byb2Nlc3NlZCBieSBhbiBleHRlcm5hbCBtZXJnZSB0b29sLgorCitBIGxpc3Rpbmcgd2lsbCBiZSB3cml0dGVuIHRvIHN0ZG91dCBwcm92aWRpbmcgdGhlIGFzc29jaWF0aW9uIG9mCit0ZW1wb3JhcnkgZmlsZSBuYW1lcyB0byB0cmFja2VkIHBhdGggbmFtZXMuICBUaGUgbGlzdGluZyBmb3JtYXQKK2hhcyB0d28gdmFyaWF0aW9uczoKKworICAgIC4gdGVtcG5hbWUgVEFCIHBhdGggUlMKKysKK1RoZSBmaXJzdCBmb3JtYXQgaXMgd2hhdCBnZXRzIHVzZWQgd2hlbiBgLS1zdGFnZWAgaXMgb21pdHRlZCBvcgoraXMgbm90IGAtLXN0YWdlPWFsbGAuIFRoZSBmaWVsZCB0ZW1wbmFtZSBpcyB0aGUgdGVtcG9yYXJ5IGZpbGUKK25hbWUgaG9sZGluZyB0aGUgZmlsZSBjb250ZW50IGFuZCBwYXRoIGlzIHRoZSB0cmFja2VkIHBhdGggbmFtZSBpbgordGhlIGluZGV4LiAgT25seSB0aGUgcmVxdWVzdGVkIGVudHJpZXMgYXJlIG91dHB1dC4KKworICAgIC4gc3RhZ2UxdGVtcCBTUCBzdGFnZTJ0ZW1wIFNQIHN0YWdlM3RtcCBUQUIgcGF0aCBSUworKworVGhlIHNlY29uZCBmb3JtYXQgaXMgd2hhdCBnZXRzIHVzZWQgd2hlbiBgLS1zdGFnZT1hbGxgLiAgVGhlIHRocmVlCitzdGFnZSB0ZW1wb3JhcnkgZmllbGRzIChzdGFnZTF0ZW1wLCBzdGFnZTJ0ZW1wLCBzdGFnZTN0ZW1wKSBsaXN0IHRoZQorbmFtZSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgaWYgdGhlcmUgaXMgYSBzdGFnZSBlbnRyeSBpbiB0aGUgaW5kZXgKK29yIGAuYCBpZiB0aGVyZSBpcyBubyBzdGFnZSBlbnRyeS4gIFBhdGhzIHdoaWNoIG9ubHkgaGF2ZSBhIHN0YWdlIDAKK2VudHJ5IHdpbGwgYWx3YXlzIGJlIG9taXR0ZWQgZnJvbSB0aGUgb3V0cHV0LgorCitJbiBib3RoIGZvcm1hdHMgUlMgKHRoZSByZWNvcmQgc2VwYXJhdG9yKSBpcyBuZXdsaW5lIGJ5IGRlZmF1bHQKK2J1dCB3aWxsIGJlIHRoZSBudWxsIGJ5dGUgaWYgLXogd2FzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorVGhlIHRlbXBvcmFyeSBmaWxlIG5hbWVzIGFyZSBhbHdheXMgc2FmZSBzdHJpbmdzOyB0aGV5IHdpbGwgbmV2ZXIKK2NvbnRhaW4gZGlyZWN0b3J5IHNlcGFyYXRvcnMgb3Igd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLiAgVGhlIHBhdGgKK2ZpZWxkIGlzIGFsd2F5cyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIHRoZSB0ZW1wb3JhcnkKK2ZpbGUgbmFtZXMgYXJlIGFsd2F5cyByZWxhdGl2ZSB0byB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeS4KKworSWYgdGhlIG9iamVjdCBiZWluZyBjb3BpZWQgb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgaXMgYSBzeW1ib2xpYworbGluayB0aGUgY29udGVudCBvZiB0aGUgbGluayB3aWxsIGJlIHdyaXR0ZW4gdG8gYSBub3JtYWwgZmlsZS4gIEl0IGlzCit1cCB0byB0aGUgZW5kLXVzZXIgb3IgdGhlIFBvcmNlbGFpbiB0byBtYWtlIHVzZSBvZiB0aGlzIGluZm9ybWF0aW9uLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorVG8gdXBkYXRlIGFuZCByZWZyZXNoIG9ubHkgdGhlIGZpbGVzIGFscmVhZHkgY2hlY2tlZCBvdXQ6OgorKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQtaW5kZXggLW4gLWYgLWEgJiYgZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1taXNzaW5nIC0tcmVmcmVzaAorLS0tLS0tLS0tLS0tLS0tLQorCitVc2luZyAnZ2l0IGNoZWNrb3V0LWluZGV4JyB0byAiZXhwb3J0IGFuIGVudGlyZSB0cmVlIjo6CisJVGhlIHByZWZpeCBhYmlsaXR5IGJhc2ljYWxseSBtYWtlcyBpdCB0cml2aWFsIHRvIHVzZQorCSdnaXQgY2hlY2tvdXQtaW5kZXgnIGFzIGFuICJleHBvcnQgYXMgdHJlZSIgZnVuY3Rpb24uCisJSnVzdCByZWFkIHRoZSBkZXNpcmVkIHRyZWUgaW50byB0aGUgaW5kZXgsIGFuZCBkbzoKKysKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PWdpdC1leHBvcnQtZGlyLyAtYQorLS0tLS0tLS0tLS0tLS0tLQorKworYGdpdCBjaGVja291dC1pbmRleGAgd2lsbCAiZXhwb3J0IiB0aGUgaW5kZXggaW50byB0aGUgc3BlY2lmaWVkCitkaXJlY3RvcnkuCisrCitUaGUgZmluYWwgIi8iIGlzIGltcG9ydGFudC4gVGhlIGV4cG9ydGVkIG5hbWUgaXMgbGl0ZXJhbGx5IGp1c3QKK3ByZWZpeGVkIHdpdGggdGhlIHNwZWNpZmllZCBzdHJpbmcuICBDb250cmFzdCB0aGlzIHdpdGggdGhlCitmb2xsb3dpbmcgZXhhbXBsZS4KKworRXhwb3J0IGZpbGVzIHdpdGggYSBwcmVmaXg6OgorKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQtaW5kZXggLS1wcmVmaXg9Lm1lcmdlZC0gTWFrZWZpbGUKKy0tLS0tLS0tLS0tLS0tLS0KKysKK1RoaXMgd2lsbCBjaGVjayBvdXQgdGhlIGN1cnJlbnRseSBjYWNoZWQgY29weSBvZiBgTWFrZWZpbGVgCitpbnRvIHRoZSBmaWxlIGAubWVyZ2VkLU1ha2VmaWxlYC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2OTdlZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dApAQCAtMCwwICsxLDYwMiBAQAorZ2l0LWNoZWNrb3V0KDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNoZWNrb3V0IC0gU3dpdGNoIGJyYW5jaGVzIG9yIHJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjaGVja291dCcgWy1xXSBbLWZdIFstbV0gWzxicmFuY2g+XQorJ2dpdCBjaGVja291dCcgWy1xXSBbLWZdIFstbV0gLS1kZXRhY2ggWzxicmFuY2g+XQorJ2dpdCBjaGVja291dCcgWy1xXSBbLWZdIFstbV0gWy0tZGV0YWNoXSA8Y29tbWl0PgorJ2dpdCBjaGVja291dCcgWy1xXSBbLWZdIFstbV0gW1stYnwtQnwtLW9ycGhhbl0gPG5ld19icmFuY2g+XSBbPHN0YXJ0X3BvaW50Pl0KKydnaXQgY2hlY2tvdXQnIFstZnwtLW91cnN8LS10aGVpcnN8LW18LS1jb25mbGljdD08c3R5bGU+XSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uCisnZ2l0IGNoZWNrb3V0JyBbLWZ8LS1vdXJzfC0tdGhlaXJzfC1tfC0tY29uZmxpY3Q9PHN0eWxlPl0gWzx0cmVlLWlzaD5dIC0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPiBbLS1wYXRoc3BlYy1maWxlLW51bF0KKydnaXQgY2hlY2tvdXQnICgtcHwtLXBhdGNoKSBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitVcGRhdGVzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gbWF0Y2ggdGhlIHZlcnNpb24gaW4gdGhlIGluZGV4CitvciB0aGUgc3BlY2lmaWVkIHRyZWUuICBJZiBubyBwYXRoc3BlYyB3YXMgZ2l2ZW4sICdnaXQgY2hlY2tvdXQnIHdpbGwKK2Fsc28gdXBkYXRlIGBIRUFEYCB0byBzZXQgdGhlIHNwZWNpZmllZCBicmFuY2ggYXMgdGhlIGN1cnJlbnQKK2JyYW5jaC4KKworJ2dpdCBjaGVja291dCcgWzxicmFuY2g+XTo6CisJVG8gcHJlcGFyZSBmb3Igd29ya2luZyBvbiBgPGJyYW5jaD5gLCBzd2l0Y2ggdG8gaXQgYnkgdXBkYXRpbmcKKwl0aGUgaW5kZXggYW5kIHRoZSBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLCBhbmQgYnkgcG9pbnRpbmcKKwlgSEVBRGAgYXQgdGhlIGJyYW5jaC4gTG9jYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgZmlsZXMgaW4gdGhlCisJd29ya2luZyB0cmVlIGFyZSBrZXB0LCBzbyB0aGF0IHRoZXkgY2FuIGJlIGNvbW1pdHRlZCB0byB0aGUKKwlgPGJyYW5jaD5gLgorKworSWYgYDxicmFuY2g+YCBpcyBub3QgZm91bmQgYnV0IHRoZXJlIGRvZXMgZXhpc3QgYSB0cmFja2luZyBicmFuY2ggaW4KK2V4YWN0bHkgb25lIHJlbW90ZSAoY2FsbCBpdCBgPHJlbW90ZT5gKSB3aXRoIGEgbWF0Y2hpbmcgbmFtZSBhbmQKK2AtLW5vLWd1ZXNzYCBpcyBub3Qgc3BlY2lmaWVkLCB0cmVhdCBhcyBlcXVpdmFsZW50IHRvCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1iIDxicmFuY2g+IC0tdHJhY2sgPHJlbW90ZT4vPGJyYW5jaD4KKy0tLS0tLS0tLS0tLQorKworWW91IGNvdWxkIG9taXQgYDxicmFuY2g+YCwgaW4gd2hpY2ggY2FzZSB0aGUgY29tbWFuZCBkZWdlbmVyYXRlcyB0bworImNoZWNrIG91dCB0aGUgY3VycmVudCBicmFuY2giLCB3aGljaCBpcyBhIGdsb3JpZmllZCBuby1vcCB3aXRoCityYXRoZXIgZXhwZW5zaXZlIHNpZGUtZWZmZWN0cyB0byBzaG93IG9ubHkgdGhlIHRyYWNraW5nIGluZm9ybWF0aW9uLAoraWYgZXhpc3RzLCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLgorCisnZ2l0IGNoZWNrb3V0JyAtYnwtQiA8bmV3X2JyYW5jaD4gWzxzdGFydCBwb2ludD5dOjoKKworCVNwZWNpZnlpbmcgYC1iYCBjYXVzZXMgYSBuZXcgYnJhbmNoIHRvIGJlIGNyZWF0ZWQgYXMgaWYKKwlsaW5rZ2l0OmdpdC1icmFuY2hbMV0gd2VyZSBjYWxsZWQgYW5kIHRoZW4gY2hlY2tlZCBvdXQuICBJbgorCXRoaXMgY2FzZSB5b3UgY2FuIHVzZSB0aGUgYC0tdHJhY2tgIG9yIGAtLW5vLXRyYWNrYCBvcHRpb25zLAorCXdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvICdnaXQgYnJhbmNoJy4gIEFzIGEgY29udmVuaWVuY2UsCisJYC0tdHJhY2tgIHdpdGhvdXQgYC1iYCBpbXBsaWVzIGJyYW5jaCBjcmVhdGlvbjsgc2VlIHRoZQorCWRlc2NyaXB0aW9uIG9mIGAtLXRyYWNrYCBiZWxvdy4KKysKK0lmIGAtQmAgaXMgZ2l2ZW4sIGA8bmV3X2JyYW5jaD5gIGlzIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBleGlzdDsgb3RoZXJ3aXNlLCBpdAoraXMgcmVzZXQuIFRoaXMgaXMgdGhlIHRyYW5zYWN0aW9uYWwgZXF1aXZhbGVudCBvZgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggLWYgPGJyYW5jaD4gWzxzdGFydCBwb2ludD5dCiskIGdpdCBjaGVja291dCA8YnJhbmNoPgorLS0tLS0tLS0tLS0tCisrCit0aGF0IGlzIHRvIHNheSwgdGhlIGJyYW5jaCBpcyBub3QgcmVzZXQvY3JlYXRlZCB1bmxlc3MgImdpdCBjaGVja291dCIgaXMKK3N1Y2Nlc3NmdWwuCisKKydnaXQgY2hlY2tvdXQnIC0tZGV0YWNoIFs8YnJhbmNoPl06OgorJ2dpdCBjaGVja291dCcgWy0tZGV0YWNoXSA8Y29tbWl0Pjo6CisKKwlQcmVwYXJlIHRvIHdvcmsgb24gdG9wIG9mIGA8Y29tbWl0PmAsIGJ5IGRldGFjaGluZyBgSEVBRGAgYXQgaXQKKwkoc2VlICJERVRBQ0hFRCBIRUFEIiBzZWN0aW9uKSwgYW5kIHVwZGF0aW5nIHRoZSBpbmRleCBhbmQgdGhlCisJZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZS4gIExvY2FsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGZpbGVzCisJaW4gdGhlIHdvcmtpbmcgdHJlZSBhcmUga2VwdCwgc28gdGhhdCB0aGUgcmVzdWx0aW5nIHdvcmtpbmcKKwl0cmVlIHdpbGwgYmUgdGhlIHN0YXRlIHJlY29yZGVkIGluIHRoZSBjb21taXQgcGx1cyB0aGUgbG9jYWwKKwltb2RpZmljYXRpb25zLgorKworV2hlbiB0aGUgYDxjb21taXQ+YCBhcmd1bWVudCBpcyBhIGJyYW5jaCBuYW1lLCB0aGUgYC0tZGV0YWNoYCBvcHRpb24gY2FuCitiZSB1c2VkIHRvIGRldGFjaCBgSEVBRGAgYXQgdGhlIHRpcCBvZiB0aGUgYnJhbmNoIChgZ2l0IGNoZWNrb3V0Cis8YnJhbmNoPmAgd291bGQgY2hlY2sgb3V0IHRoYXQgYnJhbmNoIHdpdGhvdXQgZGV0YWNoaW5nIGBIRUFEYCkuCisrCitPbWl0dGluZyBgPGJyYW5jaD5gIGRldGFjaGVzIGBIRUFEYCBhdCB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaC4KKworJ2dpdCBjaGVja291dCcgWy1mfC0tb3Vyc3wtLXRoZWlyc3wtbXwtLWNvbmZsaWN0PTxzdHlsZT5dIFs8dHJlZS1pc2g+XSBbLS1dIDxwYXRoc3BlYz4uLi46OgorJ2dpdCBjaGVja291dCcgWy1mfC0tb3Vyc3wtLXRoZWlyc3wtbXwtLWNvbmZsaWN0PTxzdHlsZT5dIFs8dHJlZS1pc2g+XSAtLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdOjoKKworCU92ZXJ3cml0ZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGVzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzcGVjLgorCVdoZW4gdGhlIGA8dHJlZS1pc2g+YCAobW9zdCBvZnRlbiBhIGNvbW1pdCkgaXMgbm90IGdpdmVuLAorCW92ZXJ3cml0ZSB3b3JraW5nIHRyZWUgd2l0aCB0aGUgY29udGVudHMgaW4gdGhlIGluZGV4LgorCVdoZW4gdGhlIGA8dHJlZS1pc2g+YCBpcyBnaXZlbiwgb3ZlcndyaXRlIGJvdGggdGhlIGluZGV4IGFuZAorCXRoZSB3b3JraW5nIHRyZWUgd2l0aCB0aGUgY29udGVudHMgYXQgdGhlIGA8dHJlZS1pc2g+YC4KKysKK1RoZSBpbmRleCBtYXkgY29udGFpbiB1bm1lcmdlZCBlbnRyaWVzIGJlY2F1c2Ugb2YgYSBwcmV2aW91cyBmYWlsZWQgbWVyZ2UuCitCeSBkZWZhdWx0LCBpZiB5b3UgdHJ5IHRvIGNoZWNrIG91dCBzdWNoIGFuIGVudHJ5IGZyb20gdGhlIGluZGV4LCB0aGUKK2NoZWNrb3V0IG9wZXJhdGlvbiB3aWxsIGZhaWwgYW5kIG5vdGhpbmcgd2lsbCBiZSBjaGVja2VkIG91dC4KK1VzaW5nIGAtZmAgd2lsbCBpZ25vcmUgdGhlc2UgdW5tZXJnZWQgZW50cmllcy4gIFRoZSBjb250ZW50cyBmcm9tIGEKK3NwZWNpZmljIHNpZGUgb2YgdGhlIG1lcmdlIGNhbiBiZSBjaGVja2VkIG91dCBvZiB0aGUgaW5kZXggYnkKK3VzaW5nIGAtLW91cnNgIG9yIGAtLXRoZWlyc2AuICBXaXRoIGAtbWAsIGNoYW5nZXMgbWFkZSB0byB0aGUgd29ya2luZyB0cmVlCitmaWxlIGNhbiBiZSBkaXNjYXJkZWQgdG8gcmUtY3JlYXRlIHRoZSBvcmlnaW5hbCBjb25mbGljdGVkIG1lcmdlIHJlc3VsdC4KKworJ2dpdCBjaGVja291dCcgKC1wfC0tcGF0Y2gpIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHNwZWM+Li4uXTo6CisJVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyBtb2RlLCBidXQgbGV0cyB5b3UgdXNlIHRoZQorCWludGVyYWN0aXZlIGludGVyZmFjZSB0byBzaG93IHRoZSAiZGlmZiIgb3V0cHV0IGFuZCBjaG9vc2Ugd2hpY2gKKwlodW5rcyB0byB1c2UgaW4gdGhlIHJlc3VsdC4gIFNlZSBiZWxvdyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mCisJYC0tcGF0Y2hgIG9wdGlvbi4KKworT1BUSU9OUworLS0tLS0tLQorLXE6OgorLS1xdWlldDo6CisJUXVpZXQsIHN1cHByZXNzIGZlZWRiYWNrIG1lc3NhZ2VzLgorCistLXByb2dyZXNzOjoKKy0tbm8tcHJvZ3Jlc3M6OgorCVByb2dyZXNzIHN0YXR1cyBpcyByZXBvcnRlZCBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtCisJYnkgZGVmYXVsdCB3aGVuIGl0IGlzIGF0dGFjaGVkIHRvIGEgdGVybWluYWwsIHVubGVzcyBgLS1xdWlldGAKKwlpcyBzcGVjaWZpZWQuIFRoaXMgZmxhZyBlbmFibGVzIHByb2dyZXNzIHJlcG9ydGluZyBldmVuIGlmIG5vdAorCWF0dGFjaGVkIHRvIGEgdGVybWluYWwsIHJlZ2FyZGxlc3Mgb2YgYC0tcXVpZXRgLgorCistZjo6CistLWZvcmNlOjoKKwlXaGVuIHN3aXRjaGluZyBicmFuY2hlcywgcHJvY2VlZCBldmVuIGlmIHRoZSBpbmRleCBvciB0aGUKKwl3b3JraW5nIHRyZWUgZGlmZmVycyBmcm9tIGBIRUFEYC4gIFRoaXMgaXMgdXNlZCB0byB0aHJvdyBhd2F5CisJbG9jYWwgY2hhbmdlcy4KKysKK1doZW4gY2hlY2tpbmcgb3V0IHBhdGhzIGZyb20gdGhlIGluZGV4LCBkbyBub3QgZmFpbCB1cG9uIHVubWVyZ2VkCitlbnRyaWVzOyBpbnN0ZWFkLCB1bm1lcmdlZCBlbnRyaWVzIGFyZSBpZ25vcmVkLgorCistLW91cnM6OgorLS10aGVpcnM6OgorCVdoZW4gY2hlY2tpbmcgb3V0IHBhdGhzIGZyb20gdGhlIGluZGV4LCBjaGVjayBvdXQgc3RhZ2UgIzIKKwkoJ291cnMnKSBvciAjMyAoJ3RoZWlycycpIGZvciB1bm1lcmdlZCBwYXRocy4KKysKK05vdGUgdGhhdCBkdXJpbmcgYGdpdCByZWJhc2VgIGFuZCBgZ2l0IHB1bGwgLS1yZWJhc2VgLCAnb3VycycgYW5kCisndGhlaXJzJyBtYXkgYXBwZWFyIHN3YXBwZWQ7IGAtLW91cnNgIGdpdmVzIHRoZSB2ZXJzaW9uIGZyb20gdGhlCiticmFuY2ggdGhlIGNoYW5nZXMgYXJlIHJlYmFzZWQgb250bywgd2hpbGUgYC0tdGhlaXJzYCBnaXZlcyB0aGUKK3ZlcnNpb24gZnJvbSB0aGUgYnJhbmNoIHRoYXQgaG9sZHMgeW91ciB3b3JrIHRoYXQgaXMgYmVpbmcgcmViYXNlZC4KKysKK1RoaXMgaXMgYmVjYXVzZSBgcmViYXNlYCBpcyB1c2VkIGluIGEgd29ya2Zsb3cgdGhhdCB0cmVhdHMgdGhlCitoaXN0b3J5IGF0IHRoZSByZW1vdGUgYXMgdGhlIHNoYXJlZCBjYW5vbmljYWwgb25lLCBhbmQgdHJlYXRzIHRoZQord29yayBkb25lIG9uIHRoZSBicmFuY2ggeW91IGFyZSByZWJhc2luZyBhcyB0aGUgdGhpcmQtcGFydHkgd29yayB0bworYmUgaW50ZWdyYXRlZCwgYW5kIHlvdSBhcmUgdGVtcG9yYXJpbHkgYXNzdW1pbmcgdGhlIHJvbGUgb2YgdGhlCitrZWVwZXIgb2YgdGhlIGNhbm9uaWNhbCBoaXN0b3J5IGR1cmluZyB0aGUgcmViYXNlLiAgQXMgdGhlIGtlZXBlciBvZgordGhlIGNhbm9uaWNhbCBoaXN0b3J5LCB5b3UgbmVlZCB0byB2aWV3IHRoZSBoaXN0b3J5IGZyb20gdGhlIHJlbW90ZQorYXMgYG91cnNgIChpLmUuICJvdXIgc2hhcmVkIGNhbm9uaWNhbCBoaXN0b3J5IiksIHdoaWxlIHdoYXQgeW91IGRpZAorb24geW91ciBzaWRlIGJyYW5jaCBhcyBgdGhlaXJzYCAoaS5lLiAib25lIGNvbnRyaWJ1dG9yJ3Mgd29yayBvbiB0b3AKK29mIGl0IikuCisKKy1iIDxuZXdfYnJhbmNoPjo6CisJQ3JlYXRlIGEgbmV3IGJyYW5jaCBuYW1lZCBgPG5ld19icmFuY2g+YCBhbmQgc3RhcnQgaXQgYXQKKwlgPHN0YXJ0X3BvaW50PmA7IHNlZSBsaW5rZ2l0OmdpdC1icmFuY2hbMV0gZm9yIGRldGFpbHMuCisKKy1CIDxuZXdfYnJhbmNoPjo6CisJQ3JlYXRlcyB0aGUgYnJhbmNoIGA8bmV3X2JyYW5jaD5gIGFuZCBzdGFydCBpdCBhdCBgPHN0YXJ0X3BvaW50PmA7CisJaWYgaXQgYWxyZWFkeSBleGlzdHMsIHRoZW4gcmVzZXQgaXQgdG8gYDxzdGFydF9wb2ludD5gLiBUaGlzIGlzCisJZXF1aXZhbGVudCB0byBydW5uaW5nICJnaXQgYnJhbmNoIiB3aXRoICItZiI7IHNlZQorCWxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBmb3IgZGV0YWlscy4KKworLXQ6OgorLS10cmFjazo6CisJV2hlbiBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHNldCB1cCAidXBzdHJlYW0iIGNvbmZpZ3VyYXRpb24uIFNlZQorCSItLXRyYWNrIiBpbiBsaW5rZ2l0OmdpdC1icmFuY2hbMV0gZm9yIGRldGFpbHMuCisrCitJZiBubyBgLWJgIG9wdGlvbiBpcyBnaXZlbiwgdGhlIG5hbWUgb2YgdGhlIG5ldyBicmFuY2ggd2lsbCBiZQorZGVyaXZlZCBmcm9tIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLCBieSBsb29raW5nIGF0IHRoZSBsb2NhbCBwYXJ0IG9mCit0aGUgcmVmc3BlYyBjb25maWd1cmVkIGZvciB0aGUgY29ycmVzcG9uZGluZyByZW1vdGUsIGFuZCB0aGVuIHN0cmlwcGluZwordGhlIGluaXRpYWwgcGFydCB1cCB0byB0aGUgIioiLgorVGhpcyB3b3VsZCB0ZWxsIHVzIHRvIHVzZSBgaGFja2AgYXMgdGhlIGxvY2FsIGJyYW5jaCB3aGVuIGJyYW5jaGluZworb2ZmIG9mIGBvcmlnaW4vaGFja2AgKG9yIGByZW1vdGVzL29yaWdpbi9oYWNrYCwgb3IgZXZlbgorYHJlZnMvcmVtb3Rlcy9vcmlnaW4vaGFja2ApLiAgSWYgdGhlIGdpdmVuIG5hbWUgaGFzIG5vIHNsYXNoLCBvciB0aGUgYWJvdmUKK2d1ZXNzaW5nIHJlc3VsdHMgaW4gYW4gZW1wdHkgbmFtZSwgdGhlIGd1ZXNzaW5nIGlzIGFib3J0ZWQuICBZb3UgY2FuCitleHBsaWNpdGx5IGdpdmUgYSBuYW1lIHdpdGggYC1iYCBpbiBzdWNoIGEgY2FzZS4KKworLS1uby10cmFjazo6CisJRG8gbm90IHNldCB1cCAidXBzdHJlYW0iIGNvbmZpZ3VyYXRpb24sIGV2ZW4gaWYgdGhlCisJYGJyYW5jaC5hdXRvU2V0dXBNZXJnZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyB0cnVlLgorCistLWd1ZXNzOjoKKy0tbm8tZ3Vlc3M6OgorCUlmIGA8YnJhbmNoPmAgaXMgbm90IGZvdW5kIGJ1dCB0aGVyZSBkb2VzIGV4aXN0IGEgdHJhY2tpbmcKKwlicmFuY2ggaW4gZXhhY3RseSBvbmUgcmVtb3RlIChjYWxsIGl0IGA8cmVtb3RlPmApIHdpdGggYQorCW1hdGNoaW5nIG5hbWUsIHRyZWF0IGFzIGVxdWl2YWxlbnQgdG8KKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgPGJyYW5jaD4gLS10cmFjayA8cmVtb3RlPi88YnJhbmNoPgorLS0tLS0tLS0tLS0tCisrCitJZiB0aGUgYnJhbmNoIGV4aXN0cyBpbiBtdWx0aXBsZSByZW1vdGVzIGFuZCBvbmUgb2YgdGhlbSBpcyBuYW1lZCBieQordGhlIGBjaGVja291dC5kZWZhdWx0UmVtb3RlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB3ZSdsbCB1c2UgdGhhdAorb25lIGZvciB0aGUgcHVycG9zZXMgb2YgZGlzYW1iaWd1YXRpb24sIGV2ZW4gaWYgdGhlIGA8YnJhbmNoPmAgaXNuJ3QKK3VuaXF1ZSBhY3Jvc3MgYWxsIHJlbW90ZXMuIFNldCBpdCB0bworZS5nLiBgY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW5gIHRvIGFsd2F5cyBjaGVja291dCByZW1vdGUKK2JyYW5jaGVzIGZyb20gdGhlcmUgaWYgYDxicmFuY2g+YCBpcyBhbWJpZ3VvdXMgYnV0IGV4aXN0cyBvbiB0aGUKKydvcmlnaW4nIHJlbW90ZS4gU2VlIGFsc28gYGNoZWNrb3V0LmRlZmF1bHRSZW1vdGVgIGluCitsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisrCitVc2UgYC0tbm8tZ3Vlc3NgIHRvIGRpc2FibGUgdGhpcy4KKworLWw6OgorCUNyZWF0ZSB0aGUgbmV3IGJyYW5jaCdzIHJlZmxvZzsgc2VlIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBmb3IKKwlkZXRhaWxzLgorCistLWRldGFjaDo6CisJUmF0aGVyIHRoYW4gY2hlY2tpbmcgb3V0IGEgYnJhbmNoIHRvIHdvcmsgb24gaXQsIGNoZWNrIG91dCBhCisJY29tbWl0IGZvciBpbnNwZWN0aW9uIGFuZCBkaXNjYXJkYWJsZSBleHBlcmltZW50cy4KKwlUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGBnaXQgY2hlY2tvdXQgPGNvbW1pdD5gIHdoZW4KKwlgPGNvbW1pdD5gIGlzIG5vdCBhIGJyYW5jaCBuYW1lLiAgU2VlIHRoZSAiREVUQUNIRUQgSEVBRCIgc2VjdGlvbgorCWJlbG93IGZvciBkZXRhaWxzLgorCistLW9ycGhhbiA8bmV3X2JyYW5jaD46OgorCUNyZWF0ZSBhIG5ldyAnb3JwaGFuJyBicmFuY2gsIG5hbWVkIGA8bmV3X2JyYW5jaD5gLCBzdGFydGVkIGZyb20KKwlgPHN0YXJ0X3BvaW50PmAgYW5kIHN3aXRjaCB0byBpdC4gIFRoZSBmaXJzdCBjb21taXQgbWFkZSBvbiB0aGlzCisJbmV3IGJyYW5jaCB3aWxsIGhhdmUgbm8gcGFyZW50cyBhbmQgaXQgd2lsbCBiZSB0aGUgcm9vdCBvZiBhIG5ldworCWhpc3RvcnkgdG90YWxseSBkaXNjb25uZWN0ZWQgZnJvbSBhbGwgdGhlIG90aGVyIGJyYW5jaGVzIGFuZAorCWNvbW1pdHMuCisrCitUaGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUgYXJlIGFkanVzdGVkIGFzIGlmIHlvdSBoYWQgcHJldmlvdXNseSBydW4KK2BnaXQgY2hlY2tvdXQgPHN0YXJ0X3BvaW50PmAuICBUaGlzIGFsbG93cyB5b3UgdG8gc3RhcnQgYSBuZXcgaGlzdG9yeQordGhhdCByZWNvcmRzIGEgc2V0IG9mIHBhdGhzIHNpbWlsYXIgdG8gYDxzdGFydF9wb2ludD5gIGJ5IGVhc2lseSBydW5uaW5nCitgZ2l0IGNvbW1pdCAtYWAgdG8gbWFrZSB0aGUgcm9vdCBjb21taXQuCisrCitUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBwdWJsaXNoIHRoZSB0cmVlIGZyb20gYSBjb21taXQKK3dpdGhvdXQgZXhwb3NpbmcgaXRzIGZ1bGwgaGlzdG9yeS4gWW91IG1pZ2h0IHdhbnQgdG8gZG8gdGhpcyB0byBwdWJsaXNoCithbiBvcGVuIHNvdXJjZSBicmFuY2ggb2YgYSBwcm9qZWN0IHdob3NlIGN1cnJlbnQgdHJlZSBpcyAiY2xlYW4iLCBidXQKK3dob3NlIGZ1bGwgaGlzdG9yeSBjb250YWlucyBwcm9wcmlldGFyeSBvciBvdGhlcndpc2UgZW5jdW1iZXJlZCBiaXRzIG9mCitjb2RlLgorKworSWYgeW91IHdhbnQgdG8gc3RhcnQgYSBkaXNjb25uZWN0ZWQgaGlzdG9yeSB0aGF0IHJlY29yZHMgYSBzZXQgb2YgcGF0aHMKK3RoYXQgaXMgdG90YWxseSBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIG9mIGA8c3RhcnRfcG9pbnQ+YCwgdGhlbiB5b3Ugc2hvdWxkCitjbGVhciB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUgcmlnaHQgYWZ0ZXIgY3JlYXRpbmcgdGhlIG9ycGhhbgorYnJhbmNoIGJ5IHJ1bm5pbmcgYGdpdCBybSAtcmYgLmAgZnJvbSB0aGUgdG9wIGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUuCitBZnRlcndhcmRzIHlvdSB3aWxsIGJlIHJlYWR5IHRvIHByZXBhcmUgeW91ciBuZXcgZmlsZXMsIHJlcG9wdWxhdGluZyB0aGUKK3dvcmtpbmcgdHJlZSwgYnkgY29weWluZyB0aGVtIGZyb20gZWxzZXdoZXJlLCBleHRyYWN0aW5nIGEgdGFyYmFsbCwgZXRjLgorCistLWlnbm9yZS1za2lwLXdvcmt0cmVlLWJpdHM6OgorCUluIHNwYXJzZSBjaGVja291dCBtb2RlLCBgZ2l0IGNoZWNrb3V0IC0tIDxwYXRocz5gIHdvdWxkCisJdXBkYXRlIG9ubHkgZW50cmllcyBtYXRjaGVkIGJ5IGA8cGF0aHM+YCBhbmQgc3BhcnNlIHBhdHRlcm5zCisJaW4gYCRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0YC4gVGhpcyBvcHRpb24gaWdub3JlcworCXRoZSBzcGFyc2UgcGF0dGVybnMgYW5kIGFkZHMgYmFjayBhbnkgZmlsZXMgaW4gYDxwYXRocz5gLgorCistbTo6CistLW1lcmdlOjoKKwlXaGVuIHN3aXRjaGluZyBicmFuY2hlcywKKwlpZiB5b3UgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zIHRvIG9uZSBvciBtb3JlIGZpbGVzIHRoYXQKKwlhcmUgZGlmZmVyZW50IGJldHdlZW4gdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCB0aGUgYnJhbmNoIHRvCisJd2hpY2ggeW91IGFyZSBzd2l0Y2hpbmcsIHRoZSBjb21tYW5kIHJlZnVzZXMgdG8gc3dpdGNoCisJYnJhbmNoZXMgaW4gb3JkZXIgdG8gcHJlc2VydmUgeW91ciBtb2RpZmljYXRpb25zIGluIGNvbnRleHQuCisJSG93ZXZlciwgd2l0aCB0aGlzIG9wdGlvbiwgYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiB0aGUgY3VycmVudAorCWJyYW5jaCwgeW91ciB3b3JraW5nIHRyZWUgY29udGVudHMsIGFuZCB0aGUgbmV3IGJyYW5jaAorCWlzIGRvbmUsIGFuZCB5b3Ugd2lsbCBiZSBvbiB0aGUgbmV3IGJyYW5jaC4KKysKK1doZW4gYSBtZXJnZSBjb25mbGljdCBoYXBwZW5zLCB0aGUgaW5kZXggZW50cmllcyBmb3IgY29uZmxpY3RpbmcKK3BhdGhzIGFyZSBsZWZ0IHVubWVyZ2VkLCBhbmQgeW91IG5lZWQgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3RzCithbmQgbWFyayB0aGUgcmVzb2x2ZWQgcGF0aHMgd2l0aCBgZ2l0IGFkZGAgKG9yIGBnaXQgcm1gIGlmIHRoZSBtZXJnZQorc2hvdWxkIHJlc3VsdCBpbiBkZWxldGlvbiBvZiB0aGUgcGF0aCkuCisrCitXaGVuIGNoZWNraW5nIG91dCBwYXRocyBmcm9tIHRoZSBpbmRleCwgdGhpcyBvcHRpb24gbGV0cyB5b3UgcmVjcmVhdGUKK3RoZSBjb25mbGljdGVkIG1lcmdlIGluIHRoZSBzcGVjaWZpZWQgcGF0aHMuCisrCitXaGVuIHN3aXRjaGluZyBicmFuY2hlcyB3aXRoIGAtLW1lcmdlYCwgc3RhZ2VkIGNoYW5nZXMgbWF5IGJlIGxvc3QuCisKKy0tY29uZmxpY3Q9PHN0eWxlPjo6CisJVGhlIHNhbWUgYXMgYC0tbWVyZ2VgIG9wdGlvbiBhYm92ZSwgYnV0IGNoYW5nZXMgdGhlIHdheSB0aGUKKwljb25mbGljdGluZyBodW5rcyBhcmUgcHJlc2VudGVkLCBvdmVycmlkaW5nIHRoZQorCWBtZXJnZS5jb25mbGljdFN0eWxlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiAgUG9zc2libGUgdmFsdWVzIGFyZQorCSJtZXJnZSIgKGRlZmF1bHQpIGFuZCAiZGlmZjMiIChpbiBhZGRpdGlvbiB0byB3aGF0IGlzIHNob3duIGJ5CisJIm1lcmdlIiBzdHlsZSwgc2hvd3MgdGhlIG9yaWdpbmFsIGNvbnRlbnRzKS4KKworLXA6OgorLS1wYXRjaDo6CisJSW50ZXJhY3RpdmVseSBzZWxlY3QgaHVua3MgaW4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUKKwlgPHRyZWUtaXNoPmAgKG9yIHRoZSBpbmRleCwgaWYgdW5zcGVjaWZpZWQpIGFuZCB0aGUgd29ya2luZworCXRyZWUuICBUaGUgY2hvc2VuIGh1bmtzIGFyZSB0aGVuIGFwcGxpZWQgaW4gcmV2ZXJzZSB0byB0aGUKKwl3b3JraW5nIHRyZWUgKGFuZCBpZiBhIGA8dHJlZS1pc2g+YCB3YXMgc3BlY2lmaWVkLCB0aGUgaW5kZXgpLgorKworVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gdXNlIGBnaXQgY2hlY2tvdXQgLXBgIHRvIHNlbGVjdGl2ZWx5IGRpc2NhcmQKK2VkaXRzIGZyb20geW91ciBjdXJyZW50IHdvcmtpbmcgdHJlZS4gU2VlIHRoZSBgYEludGVyYWN0aXZlIE1vZGUnJworc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1hZGRbMV0gdG8gbGVhcm4gaG93IHRvIG9wZXJhdGUgdGhlIGAtLXBhdGNoYCBtb2RlLgorKworTm90ZSB0aGF0IHRoaXMgb3B0aW9uIHVzZXMgdGhlIG5vIG92ZXJsYXkgbW9kZSBieSBkZWZhdWx0IChzZWUgYWxzbworYC0tb3ZlcmxheWApLCBhbmQgY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCBvdmVybGF5IG1vZGUuCisKKy0taWdub3JlLW90aGVyLXdvcmt0cmVlczo6CisJYGdpdCBjaGVja291dGAgcmVmdXNlcyB3aGVuIHRoZSB3YW50ZWQgcmVmIGlzIGFscmVhZHkgY2hlY2tlZAorCW91dCBieSBhbm90aGVyIHdvcmt0cmVlLiBUaGlzIG9wdGlvbiBtYWtlcyBpdCBjaGVjayB0aGUgcmVmCisJb3V0IGFueXdheS4gSW4gb3RoZXIgd29yZHMsIHRoZSByZWYgY2FuIGJlIGhlbGQgYnkgbW9yZSB0aGFuIG9uZQorCXdvcmt0cmVlLgorCistLW92ZXJ3cml0ZS1pZ25vcmU6OgorLS1uby1vdmVyd3JpdGUtaWdub3JlOjoKKwlTaWxlbnRseSBvdmVyd3JpdGUgaWdub3JlZCBmaWxlcyB3aGVuIHN3aXRjaGluZyBicmFuY2hlcy4gVGhpcworCWlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBVc2UgYC0tbm8tb3ZlcndyaXRlLWlnbm9yZWAgdG8gYWJvcnQKKwl0aGUgb3BlcmF0aW9uIHdoZW4gdGhlIG5ldyBicmFuY2ggY29udGFpbnMgaWdub3JlZCBmaWxlcy4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorCVVzaW5nIGAtLXJlY3Vyc2Utc3VibW9kdWxlc2Agd2lsbCB1cGRhdGUgdGhlIGNvbnRlbnQgb2YgYWxsIGFjdGl2ZQorCXN1Ym1vZHVsZXMgYWNjb3JkaW5nIHRvIHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdC4gSWYKKwlsb2NhbCBtb2RpZmljYXRpb25zIGluIGEgc3VibW9kdWxlIHdvdWxkIGJlIG92ZXJ3cml0dGVuIHRoZSBjaGVja291dAorCXdpbGwgZmFpbCB1bmxlc3MgYC1mYCBpcyB1c2VkLiBJZiBub3RoaW5nIChvciBgLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXNgKQorCWlzIHVzZWQsIHN1Ym1vZHVsZXMgd29ya2luZyB0cmVlcyB3aWxsIG5vdCBiZSB1cGRhdGVkLgorCUp1c3QgbGlrZSBsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0sIHRoaXMgd2lsbCBkZXRhY2ggYEhFQURgIG9mIHRoZQorCXN1Ym1vZHVsZS4KKworLS1vdmVybGF5OjoKKy0tbm8tb3ZlcmxheTo6CisJSW4gdGhlIGRlZmF1bHQgb3ZlcmxheSBtb2RlLCBgZ2l0IGNoZWNrb3V0YCBuZXZlcgorCXJlbW92ZXMgZmlsZXMgZnJvbSB0aGUgaW5kZXggb3IgdGhlIHdvcmtpbmcgdHJlZS4gIFdoZW4KKwlzcGVjaWZ5aW5nIGAtLW5vLW92ZXJsYXlgLCBmaWxlcyB0aGF0IGFwcGVhciBpbiB0aGUgaW5kZXggYW5kCisJd29ya2luZyB0cmVlLCBidXQgbm90IGluIGA8dHJlZS1pc2g+YCBhcmUgcmVtb3ZlZCwgdG8gbWFrZSB0aGVtCisJbWF0Y2ggYDx0cmVlLWlzaD5gIGV4YWN0bHkuCisKKy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPjo6CisJUGF0aHNwZWMgaXMgcGFzc2VkIGluIGA8ZmlsZT5gIGluc3RlYWQgb2YgY29tbWFuZGxpbmUgYXJncy4gSWYKKwlgPGZpbGU+YCBpcyBleGFjdGx5IGAtYCB0aGVuIHN0YW5kYXJkIGlucHV0IGlzIHVzZWQuIFBhdGhzcGVjCisJZWxlbWVudHMgYXJlIHNlcGFyYXRlZCBieSBMRiBvciBDUi9MRi4gUGF0aHNwZWMgZWxlbWVudHMgY2FuIGJlCisJcXVvdGVkIGFzIGV4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYAorCShzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gU2VlIGFsc28gYC0tcGF0aHNwZWMtZmlsZS1udWxgIGFuZAorCWdsb2JhbCBgLS1saXRlcmFsLXBhdGhzcGVjc2AuCisKKy0tcGF0aHNwZWMtZmlsZS1udWw6OgorCU9ubHkgbWVhbmluZ2Z1bCB3aXRoIGAtLXBhdGhzcGVjLWZyb20tZmlsZWAuIFBhdGhzcGVjIGVsZW1lbnRzIGFyZQorCXNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIgYW5kIGFsbCBvdGhlciBjaGFyYWN0ZXJzIGFyZSB0YWtlbgorCWxpdGVyYWxseSAoaW5jbHVkaW5nIG5ld2xpbmVzIGFuZCBxdW90ZXMpLgorCis8YnJhbmNoPjo6CisJQnJhbmNoIHRvIGNoZWNrb3V0OyBpZiBpdCByZWZlcnMgdG8gYSBicmFuY2ggKGkuZS4sIGEgbmFtZSB0aGF0LAorCXdoZW4gcHJlcGVuZGVkIHdpdGggInJlZnMvaGVhZHMvIiwgaXMgYSB2YWxpZCByZWYpLCB0aGVuIHRoYXQKKwlicmFuY2ggaXMgY2hlY2tlZCBvdXQuIE90aGVyd2lzZSwgaWYgaXQgcmVmZXJzIHRvIGEgdmFsaWQKKwljb21taXQsIHlvdXIgYEhFQURgIGJlY29tZXMgImRldGFjaGVkIiBhbmQgeW91IGFyZSBubyBsb25nZXIgb24KKwlhbnkgYnJhbmNoIChzZWUgYmVsb3cgZm9yIGRldGFpbHMpLgorKworWW91IGNhbiB1c2UgdGhlIGBAey1OfWAgc3ludGF4IHRvIHJlZmVyIHRvIHRoZSBOLXRoIGxhc3QKK2JyYW5jaC9jb21taXQgY2hlY2tlZCBvdXQgdXNpbmcgImdpdCBjaGVja291dCIgb3BlcmF0aW9uLiBZb3UgbWF5CithbHNvIHNwZWNpZnkgYC1gIHdoaWNoIGlzIHN5bm9ueW1vdXMgdG8gYEB7LTF9YC4KKysKK0FzIGEgc3BlY2lhbCBjYXNlLCB5b3UgbWF5IHVzZSBgQS4uLkJgIGFzIGEgc2hvcnRjdXQgZm9yIHRoZQorbWVyZ2UgYmFzZSBvZiBgQWAgYW5kIGBCYCBpZiB0aGVyZSBpcyBleGFjdGx5IG9uZSBtZXJnZSBiYXNlLiBZb3UgY2FuCitsZWF2ZSBvdXQgYXQgbW9zdCBvbmUgb2YgYEFgIGFuZCBgQmAsIGluIHdoaWNoIGNhc2UgaXQgZGVmYXVsdHMgdG8gYEhFQURgLgorCis8bmV3X2JyYW5jaD46OgorCU5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoLgorCis8c3RhcnRfcG9pbnQ+OjoKKwlUaGUgbmFtZSBvZiBhIGNvbW1pdCBhdCB3aGljaCB0byBzdGFydCB0aGUgbmV3IGJyYW5jaDsgc2VlCisJbGlua2dpdDpnaXQtYnJhbmNoWzFdIGZvciBkZXRhaWxzLiBEZWZhdWx0cyB0byBgSEVBRGAuCisrCitBcyBhIHNwZWNpYWwgY2FzZSwgeW91IG1heSB1c2UgYCJBLi4uQiJgIGFzIGEgc2hvcnRjdXQgZm9yIHRoZQorbWVyZ2UgYmFzZSBvZiBgQWAgYW5kIGBCYCBpZiB0aGVyZSBpcyBleGFjdGx5IG9uZSBtZXJnZSBiYXNlLiBZb3UgY2FuCitsZWF2ZSBvdXQgYXQgbW9zdCBvbmUgb2YgYEFgIGFuZCBgQmAsIGluIHdoaWNoIGNhc2UgaXQgZGVmYXVsdHMgdG8gYEhFQURgLgorCis8dHJlZS1pc2g+OjoKKwlUcmVlIHRvIGNoZWNrb3V0IGZyb20gKHdoZW4gcGF0aHMgYXJlIGdpdmVuKS4gSWYgbm90IHNwZWNpZmllZCwKKwl0aGUgaW5kZXggd2lsbCBiZSB1c2VkLgorCitcLS06OgorCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCisKKzxwYXRoc3BlYz4uLi46OgorCUxpbWl0cyB0aGUgcGF0aHMgYWZmZWN0ZWQgYnkgdGhlIG9wZXJhdGlvbi4KKysKK0ZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUgJ3BhdGhzcGVjJyBlbnRyeSBpbiBsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddLgorCitERVRBQ0hFRCBIRUFECistLS0tLS0tLS0tLS0tCitgSEVBRGAgbm9ybWFsbHkgcmVmZXJzIHRvIGEgbmFtZWQgYnJhbmNoIChlLmcuIGBtYXN0ZXJgKS4gTWVhbndoaWxlLCBlYWNoCiticmFuY2ggcmVmZXJzIHRvIGEgc3BlY2lmaWMgY29tbWl0LiBMZXQncyBsb29rIGF0IGEgcmVwbyB3aXRoIHRocmVlCitjb21taXRzLCBvbmUgb2YgdGhlbSB0YWdnZWQsIGFuZCB3aXRoIGJyYW5jaCBgbWFzdGVyYCBjaGVja2VkIG91dDoKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgIEhFQUQgKHJlZmVycyB0byBicmFuY2ggJ21hc3RlcicpCisgICAgICAgICAgICB8CisgICAgICAgICAgICB2CithLS0tYi0tLWMgIGJyYW5jaCAnbWFzdGVyJyAocmVmZXJzIHRvIGNvbW1pdCAnYycpCisgICAgXgorICAgIHwKKyAgdGFnICd2Mi4wJyAocmVmZXJzIHRvIGNvbW1pdCAnYicpCistLS0tLS0tLS0tLS0KKworV2hlbiBhIGNvbW1pdCBpcyBjcmVhdGVkIGluIHRoaXMgc3RhdGUsIHRoZSBicmFuY2ggaXMgdXBkYXRlZCB0byByZWZlciB0bwordGhlIG5ldyBjb21taXQuIFNwZWNpZmljYWxseSwgJ2dpdCBjb21taXQnIGNyZWF0ZXMgYSBuZXcgY29tbWl0IGBkYCwgd2hvc2UKK3BhcmVudCBpcyBjb21taXQgYGNgLCBhbmQgdGhlbiB1cGRhdGVzIGJyYW5jaCBgbWFzdGVyYCB0byByZWZlciB0byBuZXcKK2NvbW1pdCBgZGAuIGBIRUFEYCBzdGlsbCByZWZlcnMgdG8gYnJhbmNoIGBtYXN0ZXJgIGFuZCBzbyBpbmRpcmVjdGx5IG5vdyByZWZlcnMKK3RvIGNvbW1pdCBgZGA6CisKKy0tLS0tLS0tLS0tLQorJCBlZGl0OyBnaXQgYWRkOyBnaXQgY29tbWl0CisKKyAgICAgICAgICAgICAgIEhFQUQgKHJlZmVycyB0byBicmFuY2ggJ21hc3RlcicpCisgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgIHYKK2EtLS1iLS0tYy0tLWQgIGJyYW5jaCAnbWFzdGVyJyAocmVmZXJzIHRvIGNvbW1pdCAnZCcpCisgICAgXgorICAgIHwKKyAgdGFnICd2Mi4wJyAocmVmZXJzIHRvIGNvbW1pdCAnYicpCistLS0tLS0tLS0tLS0KKworSXQgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byBiZSBhYmxlIHRvIGNoZWNrb3V0IGEgY29tbWl0IHRoYXQgaXMgbm90IGF0Cit0aGUgdGlwIG9mIGFueSBuYW1lZCBicmFuY2gsIG9yIGV2ZW4gdG8gY3JlYXRlIGEgbmV3IGNvbW1pdCB0aGF0IGlzIG5vdAorcmVmZXJlbmNlZCBieSBhIG5hbWVkIGJyYW5jaC4gTGV0J3MgbG9vayBhdCB3aGF0IGhhcHBlbnMgd2hlbiB3ZQorY2hlY2tvdXQgY29tbWl0IGBiYCAoaGVyZSB3ZSBzaG93IHR3byB3YXlzIHRoaXMgbWF5IGJlIGRvbmUpOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IHYyLjAgICMgb3IKKyQgZ2l0IGNoZWNrb3V0IG1hc3Rlcl5eCisKKyAgIEhFQUQgKHJlZmVycyB0byBjb21taXQgJ2InKQorICAgIHwKKyAgICB2CithLS0tYi0tLWMtLS1kICBicmFuY2ggJ21hc3RlcicgKHJlZmVycyB0byBjb21taXQgJ2QnKQorICAgIF4KKyAgICB8CisgIHRhZyAndjIuMCcgKHJlZmVycyB0byBjb21taXQgJ2InKQorLS0tLS0tLS0tLS0tCisKK05vdGljZSB0aGF0IHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggY2hlY2tvdXQgY29tbWFuZCB3ZSB1c2UsIGBIRUFEYCBub3cgcmVmZXJzCitkaXJlY3RseSB0byBjb21taXQgYGJgLiBUaGlzIGlzIGtub3duIGFzIGJlaW5nIGluIGRldGFjaGVkIGBIRUFEYCBzdGF0ZS4KK0l0IG1lYW5zIHNpbXBseSB0aGF0IGBIRUFEYCByZWZlcnMgdG8gYSBzcGVjaWZpYyBjb21taXQsIGFzIG9wcG9zZWQgdG8KK3JlZmVycmluZyB0byBhIG5hbWVkIGJyYW5jaC4gTGV0J3Mgc2VlIHdoYXQgaGFwcGVucyB3aGVuIHdlIGNyZWF0ZSBhIGNvbW1pdDoKKworLS0tLS0tLS0tLS0tCiskIGVkaXQ7IGdpdCBhZGQ7IGdpdCBjb21taXQKKworICAgICBIRUFEIChyZWZlcnMgdG8gY29tbWl0ICdlJykKKyAgICAgIHwKKyAgICAgIHYKKyAgICAgIGUKKyAgICAgLworYS0tLWItLS1jLS0tZCAgYnJhbmNoICdtYXN0ZXInIChyZWZlcnMgdG8gY29tbWl0ICdkJykKKyAgICBeCisgICAgfAorICB0YWcgJ3YyLjAnIChyZWZlcnMgdG8gY29tbWl0ICdiJykKKy0tLS0tLS0tLS0tLQorCitUaGVyZSBpcyBub3cgYSBuZXcgY29tbWl0IGBlYCwgYnV0IGl0IGlzIHJlZmVyZW5jZWQgb25seSBieSBgSEVBRGAuIFdlIGNhbgorb2YgY291cnNlIGFkZCB5ZXQgYW5vdGhlciBjb21taXQgaW4gdGhpcyBzdGF0ZToKKworLS0tLS0tLS0tLS0tCiskIGVkaXQ7IGdpdCBhZGQ7IGdpdCBjb21taXQKKworCSBIRUFEIChyZWZlcnMgdG8gY29tbWl0ICdmJykKKwkgIHwKKwkgIHYKKyAgICAgIGUtLS1mCisgICAgIC8KK2EtLS1iLS0tYy0tLWQgIGJyYW5jaCAnbWFzdGVyJyAocmVmZXJzIHRvIGNvbW1pdCAnZCcpCisgICAgXgorICAgIHwKKyAgdGFnICd2Mi4wJyAocmVmZXJzIHRvIGNvbW1pdCAnYicpCistLS0tLS0tLS0tLS0KKworSW4gZmFjdCwgd2UgY2FuIHBlcmZvcm0gYWxsIHRoZSBub3JtYWwgR2l0IG9wZXJhdGlvbnMuIEJ1dCwgbGV0J3MgbG9vaworYXQgd2hhdCBoYXBwZW5zIHdoZW4gd2UgdGhlbiBjaGVja291dCBgbWFzdGVyYDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCBtYXN0ZXIKKworICAgICAgICAgICAgICAgSEVBRCAocmVmZXJzIHRvIGJyYW5jaCAnbWFzdGVyJykKKyAgICAgIGUtLS1mICAgICB8CisgICAgIC8gICAgICAgICAgdgorYS0tLWItLS1jLS0tZCAgYnJhbmNoICdtYXN0ZXInIChyZWZlcnMgdG8gY29tbWl0ICdkJykKKyAgICBeCisgICAgfAorICB0YWcgJ3YyLjAnIChyZWZlcnMgdG8gY29tbWl0ICdiJykKKy0tLS0tLS0tLS0tLQorCitJdCBpcyBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IGF0IHRoaXMgcG9pbnQgbm90aGluZyByZWZlcnMgdG8gY29tbWl0CitgZmAuIEV2ZW50dWFsbHkgY29tbWl0IGBmYCAoYW5kIGJ5IGV4dGVuc2lvbiBjb21taXQgYGVgKSB3aWxsIGJlIGRlbGV0ZWQKK2J5IHRoZSByb3V0aW5lIEdpdCBnYXJiYWdlIGNvbGxlY3Rpb24gcHJvY2VzcywgdW5sZXNzIHdlIGNyZWF0ZSBhIHJlZmVyZW5jZQorYmVmb3JlIHRoYXQgaGFwcGVucy4gSWYgd2UgaGF2ZSBub3QgeWV0IG1vdmVkIGF3YXkgZnJvbSBjb21taXQgYGZgLAorYW55IG9mIHRoZXNlIHdpbGwgY3JlYXRlIGEgcmVmZXJlbmNlIHRvIGl0OgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1iIGZvbyAgIDwxPgorJCBnaXQgYnJhbmNoIGZvbyAgICAgICAgPDI+CiskIGdpdCB0YWcgZm9vICAgICAgICAgICA8Mz4KKy0tLS0tLS0tLS0tLQorCis8MT4gY3JlYXRlcyBhIG5ldyBicmFuY2ggYGZvb2AsIHdoaWNoIHJlZmVycyB0byBjb21taXQgYGZgLCBhbmQgdGhlbgorICAgIHVwZGF0ZXMgYEhFQURgIHRvIHJlZmVyIHRvIGJyYW5jaCBgZm9vYC4gSW4gb3RoZXIgd29yZHMsIHdlJ2xsIG5vIGxvbmdlcgorICAgIGJlIGluIGRldGFjaGVkIGBIRUFEYCBzdGF0ZSBhZnRlciB0aGlzIGNvbW1hbmQuCisKKzwyPiBzaW1pbGFybHkgY3JlYXRlcyBhIG5ldyBicmFuY2ggYGZvb2AsIHdoaWNoIHJlZmVycyB0byBjb21taXQgYGZgLAorICAgIGJ1dCBsZWF2ZXMgYEhFQURgIGRldGFjaGVkLgorCis8Mz4gY3JlYXRlcyBhIG5ldyB0YWcgYGZvb2AsIHdoaWNoIHJlZmVycyB0byBjb21taXQgYGZgLAorICAgIGxlYXZpbmcgYEhFQURgIGRldGFjaGVkLgorCitJZiB3ZSBoYXZlIG1vdmVkIGF3YXkgZnJvbSBjb21taXQgYGZgLCB0aGVuIHdlIG11c3QgZmlyc3QgcmVjb3ZlciBpdHMgb2JqZWN0CituYW1lICh0eXBpY2FsbHkgYnkgdXNpbmcgZ2l0IHJlZmxvZyksIGFuZCB0aGVuIHdlIGNhbiBjcmVhdGUgYSByZWZlcmVuY2UgdG8KK2l0LiBGb3IgZXhhbXBsZSwgdG8gc2VlIHRoZSBsYXN0IHR3byBjb21taXRzIHRvIHdoaWNoIGBIRUFEYCByZWZlcnJlZCwgd2UKK2NhbiB1c2UgZWl0aGVyIG9mIHRoZXNlIGNvbW1hbmRzOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJlZmxvZyAtMiBIRUFEICMgb3IKKyQgZ2l0IGxvZyAtZyAtMiBIRUFECistLS0tLS0tLS0tLS0KKworQVJHVU1FTlQgRElTQU1CSUdVQVRJT04KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQgZ2l2ZW4gYW5kIGl0IGlzIG5vdCBgLS1gIChlLmcuIGBnaXQKK2NoZWNrb3V0IGFiY2ApLCBhbmQgd2hlbiB0aGUgYXJndW1lbnQgaXMgYm90aCBhIHZhbGlkIGA8dHJlZS1pc2g+YAorKGUuZy4gYSBicmFuY2ggYGFiY2AgZXhpc3RzKSBhbmQgYSB2YWxpZCBgPHBhdGhzcGVjPmAgKGUuZy4gYSBmaWxlCitvciBhIGRpcmVjdG9yeSB3aG9zZSBuYW1lIGlzICJhYmMiIGV4aXN0cyksIEdpdCB3b3VsZCB1c3VhbGx5IGFzaworeW91IHRvIGRpc2FtYmlndWF0ZS4gIEJlY2F1c2UgY2hlY2tpbmcgb3V0IGEgYnJhbmNoIGlzIHNvIGNvbW1vbiBhbgorb3BlcmF0aW9uLCBob3dldmVyLCBgZ2l0IGNoZWNrb3V0IGFiY2AgdGFrZXMgImFiYyIgYXMgYSBgPHRyZWUtaXNoPmAKK2luIHN1Y2ggYSBzaXR1YXRpb24uICBVc2UgYGdpdCBjaGVja291dCAtLSA8cGF0aHNwZWM+YCBpZiB5b3Ugd2FudAordG8gY2hlY2tvdXQgdGhlc2UgcGF0aHMgb3V0IG9mIHRoZSBpbmRleC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKy4gVGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBjaGVja3Mgb3V0IHRoZSBgbWFzdGVyYCBicmFuY2gsIHJldmVydHMKKyAgdGhlIGBNYWtlZmlsZWAgdG8gdHdvIHJldmlzaW9ucyBiYWNrLCBkZWxldGVzIGBoZWxsby5jYCBieQorICBtaXN0YWtlLCBhbmQgZ2V0cyBpdCBiYWNrIGZyb20gdGhlIGluZGV4LgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCBtYXN0ZXIgICAgICAgICAgICAgPDE+CiskIGdpdCBjaGVja291dCBtYXN0ZXJ+MiBNYWtlZmlsZSAgPDI+CiskIHJtIC1mIGhlbGxvLmMKKyQgZ2l0IGNoZWNrb3V0IGhlbGxvLmMgICAgICAgICAgICA8Mz4KKy0tLS0tLS0tLS0tLQorKworPDE+IHN3aXRjaCBicmFuY2gKKzwyPiB0YWtlIGEgZmlsZSBvdXQgb2YgYW5vdGhlciBjb21taXQKKzwzPiByZXN0b3JlIGBoZWxsby5jYCBmcm9tIHRoZSBpbmRleAorKworSWYgeW91IHdhbnQgdG8gY2hlY2sgb3V0IF9hbGxfIEMgc291cmNlIGZpbGVzIG91dCBvZiB0aGUgaW5kZXgsCit5b3UgY2FuIHNheQorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtLSAnKi5jJworLS0tLS0tLS0tLS0tCisrCitOb3RlIHRoZSBxdW90ZXMgYXJvdW5kIGAqLmNgLiAgVGhlIGZpbGUgYGhlbGxvLmNgIHdpbGwgYWxzbyBiZQorY2hlY2tlZCBvdXQsIGV2ZW4gdGhvdWdoIGl0IGlzIG5vIGxvbmdlciBpbiB0aGUgd29ya2luZyB0cmVlLAorYmVjYXVzZSB0aGUgZmlsZSBnbG9iYmluZyBpcyB1c2VkIHRvIG1hdGNoIGVudHJpZXMgaW4gdGhlIGluZGV4Cisobm90IGluIHRoZSB3b3JraW5nIHRyZWUgYnkgdGhlIHNoZWxsKS4KKysKK0lmIHlvdSBoYXZlIGFuIHVuZm9ydHVuYXRlIGJyYW5jaCB0aGF0IGlzIG5hbWVkIGBoZWxsby5jYCwgdGhpcworc3RlcCB3b3VsZCBiZSBjb25mdXNlZCBhcyBhbiBpbnN0cnVjdGlvbiB0byBzd2l0Y2ggdG8gdGhhdCBicmFuY2guCitZb3Ugc2hvdWxkIGluc3RlYWQgd3JpdGU6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC0tIGhlbGxvLmMKKy0tLS0tLS0tLS0tLQorCisuIEFmdGVyIHdvcmtpbmcgaW4gdGhlIHdyb25nIGJyYW5jaCwgc3dpdGNoaW5nIHRvIHRoZSBjb3JyZWN0CisgIGJyYW5jaCB3b3VsZCBiZSBkb25lIHVzaW5nOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCBteXRvcGljCistLS0tLS0tLS0tLS0KKysKK0hvd2V2ZXIsIHlvdXIgIndyb25nIiBicmFuY2ggYW5kIGNvcnJlY3QgYG15dG9waWNgIGJyYW5jaCBtYXkKK2RpZmZlciBpbiBmaWxlcyB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIGxvY2FsbHksIGluIHdoaWNoIGNhc2UKK3RoZSBhYm92ZSBjaGVja291dCB3b3VsZCBmYWlsIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbXl0b3BpYworZXJyb3I6IFlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgdG8gJ2Zyb3R6Jzsgbm90IHN3aXRjaGluZyBicmFuY2hlcy4KKy0tLS0tLS0tLS0tLQorKworWW91IGNhbiBnaXZlIHRoZSBgLW1gIGZsYWcgdG8gdGhlIGNvbW1hbmQsIHdoaWNoIHdvdWxkIHRyeSBhCit0aHJlZS13YXkgbWVyZ2U6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1tIG15dG9waWMKK0F1dG8tbWVyZ2luZyBmcm90egorLS0tLS0tLS0tLS0tCisrCitBZnRlciB0aGlzIHRocmVlLXdheSBtZXJnZSwgdGhlIGxvY2FsIG1vZGlmaWNhdGlvbnMgYXJlIF9ub3RfCityZWdpc3RlcmVkIGluIHlvdXIgaW5kZXggZmlsZSwgc28gYGdpdCBkaWZmYCB3b3VsZCBzaG93IHlvdSB3aGF0CitjaGFuZ2VzIHlvdSBtYWRlIHNpbmNlIHRoZSB0aXAgb2YgdGhlIG5ldyBicmFuY2guCisKKy4gV2hlbiBhIG1lcmdlIGNvbmZsaWN0IGhhcHBlbnMgZHVyaW5nIHN3aXRjaGluZyBicmFuY2hlcyB3aXRoCisgIHRoZSBgLW1gIG9wdGlvbiwgeW91IHdvdWxkIHNlZSBzb21ldGhpbmcgbGlrZSB0aGlzOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtbSBteXRvcGljCitBdXRvLW1lcmdpbmcgZnJvdHoKK0VSUk9SOiBNZXJnZSBjb25mbGljdCBpbiBmcm90egorZmF0YWw6IG1lcmdlIHByb2dyYW0gZmFpbGVkCistLS0tLS0tLS0tLS0KKysKK0F0IHRoaXMgcG9pbnQsIGBnaXQgZGlmZmAgc2hvd3MgdGhlIGNoYW5nZXMgY2xlYW5seSBtZXJnZWQgYXMgaW4KK3RoZSBwcmV2aW91cyBleGFtcGxlLCBhcyB3ZWxsIGFzIHRoZSBjaGFuZ2VzIGluIHRoZSBjb25mbGljdGVkCitmaWxlcy4gIEVkaXQgYW5kIHJlc29sdmUgdGhlIGNvbmZsaWN0IGFuZCBtYXJrIGl0IHJlc29sdmVkIHdpdGgKK2BnaXQgYWRkYCBhcyB1c3VhbDoKKysKKy0tLS0tLS0tLS0tLQorJCBlZGl0IGZyb3R6CiskIGdpdCBhZGQgZnJvdHoKKy0tLS0tLS0tLS0tLQorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXN3aXRjaFsxXSwKK2xpbmtnaXQ6Z2l0LXJlc3RvcmVbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmZWVlZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS1waWNrLnR4dApAQCAtMCwwICsxLDI0NiBAQAorZ2l0LWNoZXJyeS1waWNrKDEpCis9PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNoZXJyeS1waWNrIC0gQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNoZXJyeS1waWNrJyBbLS1lZGl0XSBbLW5dIFstbSBwYXJlbnQtbnVtYmVyXSBbLXNdIFsteF0gWy0tZmZdCisJCSAgWy1TWzxrZXlpZD5dXSA8Y29tbWl0Pi4uLgorJ2dpdCBjaGVycnktcGljaycgKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0IHwgLS1xdWl0KQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworR2l2ZW4gb25lIG9yIG1vcmUgZXhpc3RpbmcgY29tbWl0cywgYXBwbHkgdGhlIGNoYW5nZSBlYWNoIG9uZQoraW50cm9kdWNlcywgcmVjb3JkaW5nIGEgbmV3IGNvbW1pdCBmb3IgZWFjaC4gIFRoaXMgcmVxdWlyZXMgeW91cgord29ya2luZyB0cmVlIHRvIGJlIGNsZWFuIChubyBtb2RpZmljYXRpb25zIGZyb20gdGhlIEhFQUQgY29tbWl0KS4KKworV2hlbiBpdCBpcyBub3Qgb2J2aW91cyBob3cgdG8gYXBwbHkgYSBjaGFuZ2UsIHRoZSBmb2xsb3dpbmcKK2hhcHBlbnM6CisKKzEuIFRoZSBjdXJyZW50IGJyYW5jaCBhbmQgYEhFQURgIHBvaW50ZXIgc3RheSBhdCB0aGUgbGFzdCBjb21taXQKKyAgIHN1Y2Nlc3NmdWxseSBtYWRlLgorMi4gVGhlIGBDSEVSUllfUElDS19IRUFEYCByZWYgaXMgc2V0IHRvIHBvaW50IGF0IHRoZSBjb21taXQgdGhhdAorICAgaW50cm9kdWNlZCB0aGUgY2hhbmdlIHRoYXQgaXMgZGlmZmljdWx0IHRvIGFwcGx5LgorMy4gUGF0aHMgaW4gd2hpY2ggdGhlIGNoYW5nZSBhcHBsaWVkIGNsZWFubHkgYXJlIHVwZGF0ZWQgYm90aAorICAgaW4gdGhlIGluZGV4IGZpbGUgYW5kIGluIHlvdXIgd29ya2luZyB0cmVlLgorNC4gRm9yIGNvbmZsaWN0aW5nIHBhdGhzLCB0aGUgaW5kZXggZmlsZSByZWNvcmRzIHVwIHRvIHRocmVlCisgICB2ZXJzaW9ucywgYXMgZGVzY3JpYmVkIGluIHRoZSAiVFJVRSBNRVJHRSIgc2VjdGlvbiBvZgorICAgbGlua2dpdDpnaXQtbWVyZ2VbMV0uICBUaGUgd29ya2luZyB0cmVlIGZpbGVzIHdpbGwgaW5jbHVkZQorICAgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29uZmxpY3QgYnJhY2tldGVkIGJ5IHRoZSB1c3VhbAorICAgY29uZmxpY3QgbWFya2VycyBgPDw8PDw8PGAgYW5kIGA+Pj4+Pj4+YC4KKzUuIE5vIG90aGVyIG1vZGlmaWNhdGlvbnMgYXJlIG1hZGUuCisKK1NlZSBsaW5rZ2l0OmdpdC1tZXJnZVsxXSBmb3Igc29tZSBoaW50cyBvbiByZXNvbHZpbmcgc3VjaAorY29uZmxpY3RzLgorCitPUFRJT05TCistLS0tLS0tCis8Y29tbWl0Pi4uLjo6CisJQ29tbWl0cyB0byBjaGVycnktcGljay4KKwlGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2Ygd2F5cyB0byBzcGVsbCBjb21taXRzLCBzZWUKKwlsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XS4KKwlTZXRzIG9mIGNvbW1pdHMgY2FuIGJlIHBhc3NlZCBidXQgbm8gdHJhdmVyc2FsIGlzIGRvbmUgYnkKKwlkZWZhdWx0LCBhcyBpZiB0aGUgYC0tbm8td2Fsa2Agb3B0aW9uIHdhcyBzcGVjaWZpZWQsIHNlZQorCWxpbmtnaXQ6Z2l0LXJldi1saXN0WzFdLiBOb3RlIHRoYXQgc3BlY2lmeWluZyBhIHJhbmdlIHdpbGwKKwlmZWVkIGFsbCA8Y29tbWl0Pi4uLiBhcmd1bWVudHMgdG8gYSBzaW5nbGUgcmV2aXNpb24gd2FsaworCShzZWUgYSBsYXRlciBleGFtcGxlIHRoYXQgdXNlcyAnbWFpbnQgbWFzdGVyLi5uZXh0JykuCisKKy1lOjoKKy0tZWRpdDo6CisJV2l0aCB0aGlzIG9wdGlvbiwgJ2dpdCBjaGVycnktcGljaycgd2lsbCBsZXQgeW91IGVkaXQgdGhlIGNvbW1pdAorCW1lc3NhZ2UgcHJpb3IgdG8gY29tbWl0dGluZy4KKworLS1jbGVhbnVwPTxtb2RlPjo6CisJVGhpcyBvcHRpb24gZGV0ZXJtaW5lcyBob3cgdGhlIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgY2xlYW5lZCB1cCBiZWZvcmUKKwliZWluZyBwYXNzZWQgb24gdG8gdGhlIGNvbW1pdCBtYWNoaW5lcnkuIFNlZSBsaW5rZ2l0OmdpdC1jb21taXRbMV0gZm9yIG1vcmUKKwlkZXRhaWxzLiBJbiBwYXJ0aWN1bGFyLCBpZiB0aGUgJzxtb2RlPicgaXMgZ2l2ZW4gYSB2YWx1ZSBvZiBgc2Npc3NvcnNgLAorCXNjaXNzb3JzIHdpbGwgYmUgYXBwZW5kZWQgdG8gYE1FUkdFX01TR2AgYmVmb3JlIGJlaW5nIHBhc3NlZCBvbiBpbiB0aGUgY2FzZQorCW9mIGEgY29uZmxpY3QuCisKKy14OjoKKwlXaGVuIHJlY29yZGluZyB0aGUgY29tbWl0LCBhcHBlbmQgYSBsaW5lIHRoYXQgc2F5cworCSIoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAuLi4pIiB0byB0aGUgb3JpZ2luYWwgY29tbWl0CisJbWVzc2FnZSBpbiBvcmRlciB0byBpbmRpY2F0ZSB3aGljaCBjb21taXQgdGhpcyBjaGFuZ2Ugd2FzCisJY2hlcnJ5LXBpY2tlZCBmcm9tLiAgVGhpcyBpcyBkb25lIG9ubHkgZm9yIGNoZXJyeQorCXBpY2tzIHdpdGhvdXQgY29uZmxpY3RzLiAgRG8gbm90IHVzZSB0aGlzIG9wdGlvbiBpZgorCXlvdSBhcmUgY2hlcnJ5LXBpY2tpbmcgZnJvbSB5b3VyIHByaXZhdGUgYnJhbmNoIGJlY2F1c2UKKwl0aGUgaW5mb3JtYXRpb24gaXMgdXNlbGVzcyB0byB0aGUgcmVjaXBpZW50LiAgSWYgb24gdGhlCisJb3RoZXIgaGFuZCB5b3UgYXJlIGNoZXJyeS1waWNraW5nIGJldHdlZW4gdHdvIHB1YmxpY2x5CisJdmlzaWJsZSBicmFuY2hlcyAoZS5nLiBiYWNrcG9ydGluZyBhIGZpeCB0byBhCisJbWFpbnRlbmFuY2UgYnJhbmNoIGZvciBhbiBvbGRlciByZWxlYXNlIGZyb20gYQorCWRldmVsb3BtZW50IGJyYW5jaCksIGFkZGluZyB0aGlzIGluZm9ybWF0aW9uIGNhbiBiZQorCXVzZWZ1bC4KKworLXI6OgorCUl0IHVzZWQgdG8gYmUgdGhhdCB0aGUgY29tbWFuZCBkZWZhdWx0ZWQgdG8gZG8gYC14YAorCWRlc2NyaWJlZCBhYm92ZSwgYW5kIGAtcmAgd2FzIHRvIGRpc2FibGUgaXQuICBOb3cgdGhlCisJZGVmYXVsdCBpcyBub3QgdG8gZG8gYC14YCBzbyB0aGlzIG9wdGlvbiBpcyBhIG5vLW9wLgorCistbSBwYXJlbnQtbnVtYmVyOjoKKy0tbWFpbmxpbmUgcGFyZW50LW51bWJlcjo6CisJVXN1YWxseSB5b3UgY2Fubm90IGNoZXJyeS1waWNrIGEgbWVyZ2UgYmVjYXVzZSB5b3UgZG8gbm90IGtub3cgd2hpY2gKKwlzaWRlIG9mIHRoZSBtZXJnZSBzaG91bGQgYmUgY29uc2lkZXJlZCB0aGUgbWFpbmxpbmUuICBUaGlzCisJb3B0aW9uIHNwZWNpZmllcyB0aGUgcGFyZW50IG51bWJlciAoc3RhcnRpbmcgZnJvbSAxKSBvZgorCXRoZSBtYWlubGluZSBhbmQgYWxsb3dzIGNoZXJyeS1waWNrIHRvIHJlcGxheSB0aGUgY2hhbmdlCisJcmVsYXRpdmUgdG8gdGhlIHNwZWNpZmllZCBwYXJlbnQuCisKKy1uOjoKKy0tbm8tY29tbWl0OjoKKwlVc3VhbGx5IHRoZSBjb21tYW5kIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhIHNlcXVlbmNlIG9mIGNvbW1pdHMuCisJVGhpcyBmbGFnIGFwcGxpZXMgdGhlIGNoYW5nZXMgbmVjZXNzYXJ5IHRvIGNoZXJyeS1waWNrCisJZWFjaCBuYW1lZCBjb21taXQgdG8geW91ciB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCwKKwl3aXRob3V0IG1ha2luZyBhbnkgY29tbWl0LiAgSW4gYWRkaXRpb24sIHdoZW4gdGhpcworCW9wdGlvbiBpcyB1c2VkLCB5b3VyIGluZGV4IGRvZXMgbm90IGhhdmUgdG8gbWF0Y2ggdGhlCisJSEVBRCBjb21taXQuICBUaGUgY2hlcnJ5LXBpY2sgaXMgZG9uZSBhZ2FpbnN0IHRoZQorCWJlZ2lubmluZyBzdGF0ZSBvZiB5b3VyIGluZGV4LgorKworVGhpcyBpcyB1c2VmdWwgd2hlbiBjaGVycnktcGlja2luZyBtb3JlIHRoYW4gb25lIGNvbW1pdHMnCitlZmZlY3QgdG8geW91ciBpbmRleCBpbiBhIHJvdy4KKworLXM6OgorLS1zaWdub2ZmOjoKKwlBZGQgU2lnbmVkLW9mZi1ieSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLgorCVNlZSB0aGUgc2lnbm9mZiBvcHRpb24gaW4gbGlua2dpdDpnaXQtY29tbWl0WzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCistU1s8a2V5aWQ+XTo6CistLWdwZy1zaWduWz08a2V5aWQ+XTo6CistLW5vLWdwZy1zaWduOjoKKwlHUEctc2lnbiBjb21taXRzLiBUaGUgYGtleWlkYCBhcmd1bWVudCBpcyBvcHRpb25hbCBhbmQKKwlkZWZhdWx0cyB0byB0aGUgY29tbWl0dGVyIGlkZW50aXR5OyBpZiBzcGVjaWZpZWQsIGl0IG11c3QgYmUKKwlzdHVjayB0byB0aGUgb3B0aW9uIHdpdGhvdXQgYSBzcGFjZS4gYC0tbm8tZ3BnLXNpZ25gIGlzIHVzZWZ1bCB0bworCWNvdW50ZXJtYW5kIGJvdGggYGNvbW1pdC5ncGdTaWduYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBhbmQKKwllYXJsaWVyIGAtLWdwZy1zaWduYC4KKworLS1mZjo6CisJSWYgdGhlIGN1cnJlbnQgSEVBRCBpcyB0aGUgc2FtZSBhcyB0aGUgcGFyZW50IG9mIHRoZQorCWNoZXJyeS1waWNrJ2VkIGNvbW1pdCwgdGhlbiBhIGZhc3QgZm9yd2FyZCB0byB0aGlzIGNvbW1pdCB3aWxsCisJYmUgcGVyZm9ybWVkLgorCistLWFsbG93LWVtcHR5OjoKKwlCeSBkZWZhdWx0LCBjaGVycnktcGlja2luZyBhbiBlbXB0eSBjb21taXQgd2lsbCBmYWlsLAorCWluZGljYXRpbmcgdGhhdCBhbiBleHBsaWNpdCBpbnZvY2F0aW9uIG9mIGBnaXQgY29tbWl0CisJLS1hbGxvdy1lbXB0eWAgaXMgcmVxdWlyZWQuIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyB0aGF0CisJYmVoYXZpb3IsIGFsbG93aW5nIGVtcHR5IGNvbW1pdHMgdG8gYmUgcHJlc2VydmVkIGF1dG9tYXRpY2FsbHkKKwlpbiBhIGNoZXJyeS1waWNrLiBOb3RlIHRoYXQgd2hlbiAiLS1mZiIgaXMgaW4gZWZmZWN0LCBlbXB0eQorCWNvbW1pdHMgdGhhdCBtZWV0IHRoZSAiZmFzdC1mb3J3YXJkIiByZXF1aXJlbWVudCB3aWxsIGJlIGtlcHQKKwlldmVuIHdpdGhvdXQgdGhpcyBvcHRpb24uICBOb3RlIGFsc28sIHRoYXQgdXNlIG9mIHRoaXMgb3B0aW9uIG9ubHkKKwlrZWVwcyBjb21taXRzIHRoYXQgd2VyZSBpbml0aWFsbHkgZW1wdHkgKGkuZS4gdGhlIGNvbW1pdCByZWNvcmRlZCB0aGUKKwlzYW1lIHRyZWUgYXMgaXRzIHBhcmVudCkuICBDb21taXRzIHdoaWNoIGFyZSBtYWRlIGVtcHR5IGR1ZSB0byBhCisJcHJldmlvdXMgY29tbWl0IGFyZSBkcm9wcGVkLiAgVG8gZm9yY2UgdGhlIGluY2x1c2lvbiBvZiB0aG9zZSBjb21taXRzCisJdXNlIGAtLWtlZXAtcmVkdW5kYW50LWNvbW1pdHNgLgorCistLWFsbG93LWVtcHR5LW1lc3NhZ2U6OgorCUJ5IGRlZmF1bHQsIGNoZXJyeS1waWNraW5nIGEgY29tbWl0IHdpdGggYW4gZW1wdHkgbWVzc2FnZSB3aWxsIGZhaWwuCisJVGhpcyBvcHRpb24gb3ZlcnJpZGVzIHRoYXQgYmVoYXZpb3IsIGFsbG93aW5nIGNvbW1pdHMgd2l0aCBlbXB0eQorCW1lc3NhZ2VzIHRvIGJlIGNoZXJyeSBwaWNrZWQuCisKKy0ta2VlcC1yZWR1bmRhbnQtY29tbWl0czo6CisJSWYgYSBjb21taXQgYmVpbmcgY2hlcnJ5IHBpY2tlZCBkdXBsaWNhdGVzIGEgY29tbWl0IGFscmVhZHkgaW4gdGhlCisJY3VycmVudCBoaXN0b3J5LCBpdCB3aWxsIGJlY29tZSBlbXB0eS4gIEJ5IGRlZmF1bHQgdGhlc2UKKwlyZWR1bmRhbnQgY29tbWl0cyBjYXVzZSBgY2hlcnJ5LXBpY2tgIHRvIHN0b3Agc28gdGhlIHVzZXIgY2FuCisJZXhhbWluZSB0aGUgY29tbWl0LiBUaGlzIG9wdGlvbiBvdmVycmlkZXMgdGhhdCBiZWhhdmlvciBhbmQKKwljcmVhdGVzIGFuIGVtcHR5IGNvbW1pdCBvYmplY3QuICBJbXBsaWVzIGAtLWFsbG93LWVtcHR5YC4KKworLS1zdHJhdGVneT08c3RyYXRlZ3k+OjoKKwlVc2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5LiAgU2hvdWxkIG9ubHkgYmUgdXNlZCBvbmNlLgorCVNlZSB0aGUgTUVSR0UgU1RSQVRFR0lFUyBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdCisJZm9yIGRldGFpbHMuCisKKy1YPG9wdGlvbj46OgorLS1zdHJhdGVneS1vcHRpb249PG9wdGlvbj46OgorCVBhc3MgdGhlIG1lcmdlIHN0cmF0ZWd5LXNwZWNpZmljIG9wdGlvbiB0aHJvdWdoIHRvIHRoZQorCW1lcmdlIHN0cmF0ZWd5LiAgU2VlIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIGZvciBkZXRhaWxzLgorCistLXJlcmVyZS1hdXRvdXBkYXRlOjoKKy0tbm8tcmVyZXJlLWF1dG91cGRhdGU6OgorCUFsbG93IHRoZSByZXJlcmUgbWVjaGFuaXNtIHRvIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCB0aGUKKwlyZXN1bHQgb2YgYXV0by1jb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlLgorCitTRVFVRU5DRVIgU1VCQ09NTUFORFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW5jbHVkZTo6c2VxdWVuY2VyLnR4dFtdCisKK0VYQU1QTEVTCistLS0tLS0tLQorYGdpdCBjaGVycnktcGljayBtYXN0ZXJgOjoKKworCUFwcGx5IHRoZSBjaGFuZ2UgaW50cm9kdWNlZCBieSB0aGUgY29tbWl0IGF0IHRoZSB0aXAgb2YgdGhlCisJbWFzdGVyIGJyYW5jaCBhbmQgY3JlYXRlIGEgbmV3IGNvbW1pdCB3aXRoIHRoaXMgY2hhbmdlLgorCitgZ2l0IGNoZXJyeS1waWNrIC4ubWFzdGVyYDo6CitgZ2l0IGNoZXJyeS1waWNrIF5IRUFEIG1hc3RlcmA6OgorCisJQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBhbGwgY29tbWl0cyB0aGF0IGFyZSBhbmNlc3RvcnMKKwlvZiBtYXN0ZXIgYnV0IG5vdCBvZiBIRUFEIHRvIHByb2R1Y2UgbmV3IGNvbW1pdHMuCisKK2BnaXQgY2hlcnJ5LXBpY2sgbWFpbnQgbmV4dCBebWFzdGVyYDo6CitgZ2l0IGNoZXJyeS1waWNrIG1haW50IG1hc3Rlci4ubmV4dGA6OgorCisJQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBhbGwgY29tbWl0cyB0aGF0IGFyZQorCWFuY2VzdG9ycyBvZiBtYWludCBvciBuZXh0LCBidXQgbm90IG1hc3RlciBvciBhbnkgb2YgaXRzCisJYW5jZXN0b3JzLiAgTm90ZSB0aGF0IHRoZSBsYXR0ZXIgZG9lcyBub3QgbWVhbiBgbWFpbnRgIGFuZAorCWV2ZXJ5dGhpbmcgYmV0d2VlbiBgbWFzdGVyYCBhbmQgYG5leHRgOyBzcGVjaWZpY2FsbHksCisJYG1haW50YCB3aWxsIG5vdCBiZSB1c2VkIGlmIGl0IGlzIGluY2x1ZGVkIGluIGBtYXN0ZXJgLgorCitgZ2l0IGNoZXJyeS1waWNrIG1hc3Rlcn40IG1hc3Rlcn4yYDo6CisKKwlBcHBseSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBmaWZ0aCBhbmQgdGhpcmQgbGFzdAorCWNvbW1pdHMgcG9pbnRlZCB0byBieSBtYXN0ZXIgYW5kIGNyZWF0ZSAyIG5ldyBjb21taXRzIHdpdGgKKwl0aGVzZSBjaGFuZ2VzLgorCitgZ2l0IGNoZXJyeS1waWNrIC1uIG1hc3Rlcn4xIG5leHRgOjoKKworCUFwcGx5IHRvIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkCisJYnkgdGhlIHNlY29uZCBsYXN0IGNvbW1pdCBwb2ludGVkIHRvIGJ5IG1hc3RlciBhbmQgYnkgdGhlIGxhc3QKKwljb21taXQgcG9pbnRlZCB0byBieSBuZXh0LCBidXQgZG8gbm90IGNyZWF0ZSBhbnkgY29tbWl0IHdpdGgKKwl0aGVzZSBjaGFuZ2VzLgorCitgZ2l0IGNoZXJyeS1waWNrIC0tZmYgLi5uZXh0YDo6CisKKwlJZiBoaXN0b3J5IGlzIGxpbmVhciBhbmQgSEVBRCBpcyBhbiBhbmNlc3RvciBvZiBuZXh0LCB1cGRhdGUKKwl0aGUgd29ya2luZyB0cmVlIGFuZCBhZHZhbmNlIHRoZSBIRUFEIHBvaW50ZXIgdG8gbWF0Y2ggbmV4dC4KKwlPdGhlcndpc2UsIGFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgdGhvc2UgY29tbWl0cyB0aGF0CisJYXJlIGluIG5leHQgYnV0IG5vdCBIRUFEIHRvIHRoZSBjdXJyZW50IGJyYW5jaCwgY3JlYXRpbmcgYSBuZXcKKwljb21taXQgZm9yIGVhY2ggbmV3IGNoYW5nZS4KKworYGdpdCByZXYtbGlzdCAtLXJldmVyc2UgbWFzdGVyIC0tIFJFQURNRSB8IGdpdCBjaGVycnktcGljayAtbiAtLXN0ZGluYDo6CisKKwlBcHBseSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IGFsbCBjb21taXRzIG9uIHRoZSBtYXN0ZXIKKwlicmFuY2ggdGhhdCB0b3VjaGVkIFJFQURNRSB0byB0aGUgd29ya2luZyB0cmVlIGFuZCBpbmRleCwKKwlzbyB0aGUgcmVzdWx0IGNhbiBiZSBpbnNwZWN0ZWQgYW5kIG1hZGUgaW50byBhIHNpbmdsZSBuZXcKKwljb21taXQgaWYgc3VpdGFibGUuCisKK1RoZSBmb2xsb3dpbmcgc2VxdWVuY2UgYXR0ZW1wdHMgdG8gYmFja3BvcnQgYSBwYXRjaCwgYmFpbHMgb3V0IGJlY2F1c2UKK3RoZSBjb2RlIHRoZSBwYXRjaCBhcHBsaWVzIHRvIGhhcyBjaGFuZ2VkIHRvbyBtdWNoLCBhbmQgdGhlbiB0cmllcworYWdhaW4sIHRoaXMgdGltZSBleGVyY2lzaW5nIG1vcmUgY2FyZSBhYm91dCBtYXRjaGluZyB1cCBjb250ZXh0IGxpbmVzLgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZXJyeS1waWNrIHRvcGljXiAgICAgICAgICAgICA8MT4KKyQgZ2l0IGRpZmYgICAgICAgICAgICAgICAgICAgICAgICAgICA8Mj4KKyQgZ2l0IHJlc2V0IC0tbWVyZ2UgT1JJR19IRUFEICAgICAgICA8Mz4KKyQgZ2l0IGNoZXJyeS1waWNrIC1YcGF0aWVuY2UgdG9waWNeICA8ND4KKy0tLS0tLS0tLS0tLQorPDE+IGFwcGx5IHRoZSBjaGFuZ2UgdGhhdCB3b3VsZCBiZSBzaG93biBieSBgZ2l0IHNob3cgdG9waWNeYC4KKyAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBwYXRjaCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCBzbworICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb25mbGljdCBpcyB3cml0dGVuIHRvIHRoZSBpbmRleCBhbmQKKyAgICB3b3JraW5nIHRyZWUgYW5kIG5vIG5ldyBjb21taXQgcmVzdWx0cy4KKzwyPiBzdW1tYXJpemUgY2hhbmdlcyB0byBiZSByZWNvbmNpbGVkCis8Mz4gY2FuY2VsIHRoZSBjaGVycnktcGljay4gIEluIG90aGVyIHdvcmRzLCByZXR1cm4gdG8gdGhlCisgICAgcHJlLWNoZXJyeS1waWNrIHN0YXRlLCBwcmVzZXJ2aW5nIGFueSBsb2NhbCBtb2RpZmljYXRpb25zCisgICAgeW91IGhhZCBpbiB0aGUgd29ya2luZyB0cmVlLgorPDQ+IHRyeSB0byBhcHBseSB0aGUgY2hhbmdlIGludHJvZHVjZWQgYnkgYHRvcGljXmAgYWdhaW4sCisgICAgc3BlbmRpbmcgZXh0cmEgdGltZSB0byBhdm9pZCBtaXN0YWtlcyBiYXNlZCBvbiBpbmNvcnJlY3RseQorICAgIG1hdGNoaW5nIGNvbnRleHQgbGluZXMuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcmV2ZXJ0WzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVhOTIxYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS50eHQKQEAgLTAsMCArMSwxNDUgQEAKK2dpdC1jaGVycnkoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNoZXJyeSAtIEZpbmQgY29tbWl0cyB5ZXQgdG8gYmUgYXBwbGllZCB0byB1cHN0cmVhbQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY2hlcnJ5JyBbLXZdIFs8dXBzdHJlYW0+IFs8aGVhZD4gWzxsaW1pdD5dXV0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitEZXRlcm1pbmUgd2hldGhlciB0aGVyZSBhcmUgY29tbWl0cyBpbiBgPGhlYWQ+Li48dXBzdHJlYW0+YCB0aGF0IGFyZQorZXF1aXZhbGVudCB0byB0aG9zZSBpbiB0aGUgcmFuZ2UgYDxsaW1pdD4uLjxoZWFkPmAuCisKK1RoZSBlcXVpdmFsZW5jZSB0ZXN0IGlzIGJhc2VkIG9uIHRoZSBkaWZmLCBhZnRlciByZW1vdmluZyB3aGl0ZXNwYWNlCithbmQgbGluZSBudW1iZXJzLiAgZ2l0LWNoZXJyeSB0aGVyZWZvcmUgZGV0ZWN0cyB3aGVuIGNvbW1pdHMgaGF2ZSBiZWVuCisiY29waWVkIiBieSBtZWFucyBvZiBsaW5rZ2l0OmdpdC1jaGVycnktcGlja1sxXSwgbGlua2dpdDpnaXQtYW1bMV0gb3IKK2xpbmtnaXQ6Z2l0LXJlYmFzZVsxXS4KKworT3V0cHV0cyB0aGUgU0hBMSBvZiBldmVyeSBjb21taXQgaW4gYDxsaW1pdD4uLjxoZWFkPmAsIHByZWZpeGVkIHdpdGgKK2AtYCBmb3IgY29tbWl0cyB0aGF0IGhhdmUgYW4gZXF1aXZhbGVudCBpbiA8dXBzdHJlYW0+LCBhbmQgYCtgIGZvcgorY29tbWl0cyB0aGF0IGRvIG5vdC4KKworT1BUSU9OUworLS0tLS0tLQorLXY6OgorCVNob3cgdGhlIGNvbW1pdCBzdWJqZWN0cyBuZXh0IHRvIHRoZSBTSEExcy4KKworPHVwc3RyZWFtPjo6CisJVXBzdHJlYW0gYnJhbmNoIHRvIHNlYXJjaCBmb3IgZXF1aXZhbGVudCBjb21taXRzLgorCURlZmF1bHRzIHRvIHRoZSB1cHN0cmVhbSBicmFuY2ggb2YgSEVBRC4KKworPGhlYWQ+OjoKKwlXb3JraW5nIGJyYW5jaDsgZGVmYXVsdHMgdG8gSEVBRC4KKworPGxpbWl0Pjo6CisJRG8gbm90IHJlcG9ydCBjb21taXRzIHVwIHRvIChhbmQgaW5jbHVkaW5nKSBsaW1pdC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1BhdGNoIHdvcmtmbG93cworfn5+fn5+fn5+fn5+fn5+CisKK2dpdC1jaGVycnkgaXMgZnJlcXVlbnRseSB1c2VkIGluIHBhdGNoLWJhc2VkIHdvcmtmbG93cyAoc2VlCitsaW5rZ2l0OmdpdHdvcmtmbG93c1s3XSkgdG8gZGV0ZXJtaW5lIGlmIGEgc2VyaWVzIG9mIHBhdGNoZXMgaGFzIGJlZW4KK2FwcGxpZWQgYnkgdGhlIHVwc3RyZWFtIG1haW50YWluZXIuICBJbiBzdWNoIGEgd29ya2Zsb3cgeW91IG1pZ2h0CitjcmVhdGUgYW5kIHNlbmQgYSB0b3BpYyBicmFuY2ggbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1iIHRvcGljIG9yaWdpbi9tYXN0ZXIKKyMgd29yayBhbmQgY3JlYXRlIHNvbWUgY29tbWl0cworJCBnaXQgZm9ybWF0LXBhdGNoIG9yaWdpbi9tYXN0ZXIKKyQgZ2l0IHNlbmQtZW1haWwgLi4uIDAwKgorLS0tLS0tLS0tLS0tCisKK0xhdGVyLCB5b3UgY2FuIHNlZSB3aGV0aGVyIHlvdXIgY2hhbmdlcyBoYXZlIGJlZW4gYXBwbGllZCBieSBzYXlpbmcKKyhzdGlsbCBvbiBgdG9waWNgKToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCAgIyB1cGRhdGUgeW91ciBub3Rpb24gb2Ygb3JpZ2luL21hc3RlcgorJCBnaXQgY2hlcnJ5IC12CistLS0tLS0tLS0tLS0KKworQ29uY3JldGUgZXhhbXBsZQorfn5+fn5+fn5+fn5+fn5+fgorCitJbiBhIHNpdHVhdGlvbiB3aGVyZSB0b3BpYyBjb25zaXN0ZWQgb2YgdGhyZWUgY29tbWl0cywgYW5kIHRoZQorbWFpbnRhaW5lciBhcHBsaWVkIHR3byBvZiB0aGVtLCB0aGUgc2l0dWF0aW9uIG1pZ2h0IGxvb2sgbGlrZToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLS1ncmFwaCAtLW9uZWxpbmUgLS1kZWNvcmF0ZSAtLWJvdW5kYXJ5IG9yaWdpbi9tYXN0ZXIuLi50b3BpYworKiA3NjU0MzIxIChvcmlnaW4vbWFzdGVyKSB1cHN0cmVhbSB0aXAgY29tbWl0CitbLi4uIHNuaXAgc29tZSBvdGhlciBjb21taXRzIC4uLl0KKyogY2NjYzExMSBjaGVycnktcGljayBvZiBDCisqIGFhYWExMTEgY2hlcnJ5LXBpY2sgb2YgQQorWy4uLiBzbmlwIGEgbG90IG1vcmUgdGhhdCBoYXMgaGFwcGVuZWQgLi4uXQorfCAqIGNjY2MwMDAgKHRvcGljKSBjb21taXQgQworfCAqIGJiYmIwMDAgY29tbWl0IEIKK3wgKiBhYWFhMDAwIGNvbW1pdCBBCit8LworbyAxMjM0NTY3IGJyYW5jaCBwb2ludAorLS0tLS0tLS0tLS0tCisKK0luIHN1Y2ggY2FzZXMsIGdpdC1jaGVycnkgc2hvd3MgYSBjb25jaXNlIHN1bW1hcnkgb2Ygd2hhdCBoYXMgeWV0IHRvCitiZSBhcHBsaWVkOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZXJyeSBvcmlnaW4vbWFzdGVyIHRvcGljCistIGNjY2MwMDAuLi4gY29tbWl0IEMKKysgYmJiYjAwMC4uLiBjb21taXQgQgorLSBhYWFhMDAwLi4uIGNvbW1pdCBBCistLS0tLS0tLS0tLS0KKworSGVyZSwgd2Ugc2VlIHRoYXQgdGhlIGNvbW1pdHMgQSBhbmQgQyAobWFya2VkIHdpdGggYC1gKSBjYW4gYmUKK2Ryb3BwZWQgZnJvbSB5b3VyIGB0b3BpY2AgYnJhbmNoIHdoZW4geW91IHJlYmFzZSBpdCBvbiB0b3Agb2YKK2BvcmlnaW4vbWFzdGVyYCwgd2hpbGUgdGhlIGNvbW1pdCBCIChtYXJrZWQgd2l0aCBgK2ApIHN0aWxsIG5lZWRzIHRvCitiZSBrZXB0IHNvIHRoYXQgaXQgd2lsbCBiZSBzZW50IHRvIGJlIGFwcGxpZWQgdG8gYG9yaWdpbi9tYXN0ZXJgLgorCisKK1VzaW5nIGEgbGltaXQKK35+fn5+fn5+fn5+fn4KKworVGhlIG9wdGlvbmFsIDxsaW1pdD4gaXMgdXNlZnVsIGluIGNhc2VzIHdoZXJlIHlvdXIgdG9waWMgaXMgYmFzZWQgb24KK290aGVyIHdvcmsgdGhhdCBpcyBub3QgaW4gdXBzdHJlYW0uICBFeHBhbmRpbmcgb24gdGhlIHByZXZpb3VzCitleGFtcGxlLCB0aGlzIG1pZ2h0IGxvb2sgbGlrZToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLS1ncmFwaCAtLW9uZWxpbmUgLS1kZWNvcmF0ZSAtLWJvdW5kYXJ5IG9yaWdpbi9tYXN0ZXIuLi50b3BpYworKiA3NjU0MzIxIChvcmlnaW4vbWFzdGVyKSB1cHN0cmVhbSB0aXAgY29tbWl0CitbLi4uIHNuaXAgc29tZSBvdGhlciBjb21taXRzIC4uLl0KKyogY2NjYzExMSBjaGVycnktcGljayBvZiBDCisqIGFhYWExMTEgY2hlcnJ5LXBpY2sgb2YgQQorWy4uLiBzbmlwIGEgbG90IG1vcmUgdGhhdCBoYXMgaGFwcGVuZWQgLi4uXQorfCAqIGNjY2MwMDAgKHRvcGljKSBjb21taXQgQworfCAqIGJiYmIwMDAgY29tbWl0IEIKK3wgKiBhYWFhMDAwIGNvbW1pdCBBCit8ICogMDAwMGZmZiAoYmFzZSkgdW5wdWJsaXNoZWQgc3R1ZmYgRgorWy4uLiBzbmlwIC4uLl0KK3wgKiAwMDAwYWFhIHVucHVibGlzaGVkIHN0dWZmIEEKK3wvCitvIDEyMzQ1NjcgbWVyZ2UtYmFzZSBiZXR3ZWVuIHVwc3RyZWFtIGFuZCB0b3BpYworLS0tLS0tLS0tLS0tCisKK0J5IHNwZWNpZnlpbmcgYGJhc2VgIGFzIHRoZSBsaW1pdCwgeW91IGNhbiBhdm9pZCBsaXN0aW5nIGNvbW1pdHMKK2JldHdlZW4gYGJhc2VgIGFuZCBgdG9waWNgOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZXJyeSBvcmlnaW4vbWFzdGVyIHRvcGljIGJhc2UKKy0gY2NjYzAwMC4uLiBjb21taXQgQworKyBiYmJiMDAwLi4uIGNvbW1pdCBCCistIGFhYWEwMDAuLi4gY29tbWl0IEEKKy0tLS0tLS0tLS0tLQorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcGF0Y2gtaWRbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaXRvb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2l0b29sLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2ExMWMzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2l0b29sLnR4dApAQCAtMCwwICsxLDI1IEBACitnaXQtY2l0b29sKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaXRvb2wgLSBHcmFwaGljYWwgYWx0ZXJuYXRpdmUgdG8gZ2l0LWNvbW1pdAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY2l0b29sJworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0EgVGNsL1RrIGJhc2VkIGdyYXBoaWNhbCBpbnRlcmZhY2UgdG8gcmV2aWV3IG1vZGlmaWVkIGZpbGVzLCBzdGFnZQordGhlbSBpbnRvIHRoZSBpbmRleCwgZW50ZXIgYSBjb21taXQgbWVzc2FnZSBhbmQgcmVjb3JkIHRoZSBuZXcKK2NvbW1pdCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaC4gIFRoaXMgaW50ZXJmYWNlIGlzIGFuIGFsdGVybmF0aXZlCit0byB0aGUgbGVzcyBpbnRlcmFjdGl2ZSAnZ2l0IGNvbW1pdCcgcHJvZ3JhbS4KKworJ2dpdCBjaXRvb2wnIGlzIGFjdHVhbGx5IGEgc3RhbmRhcmQgYWxpYXMgZm9yIGBnaXQgZ3VpIGNpdG9vbGAuCitTZWUgbGlua2dpdDpnaXQtZ3VpWzFdIGZvciBtb3JlIGRldGFpbHMuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2xlYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2xlYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZjMwOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQKQEAgLTAsMCArMSwxNDIgQEAKK2dpdC1jbGVhbigxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jbGVhbiAtIFJlbW92ZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjbGVhbicgWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRoPi4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworQ2xlYW5zIHRoZSB3b3JraW5nIHRyZWUgYnkgcmVjdXJzaXZlbHkgcmVtb3ZpbmcgZmlsZXMgdGhhdCBhcmUgbm90Cit1bmRlciB2ZXJzaW9uIGNvbnRyb2wsIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCitOb3JtYWxseSwgb25seSBmaWxlcyB1bmtub3duIHRvIEdpdCBhcmUgcmVtb3ZlZCwgYnV0IGlmIHRoZSBgLXhgCitvcHRpb24gaXMgc3BlY2lmaWVkLCBpZ25vcmVkIGZpbGVzIGFyZSBhbHNvIHJlbW92ZWQuIFRoaXMgY2FuLCBmb3IKK2V4YW1wbGUsIGJlIHVzZWZ1bCB0byByZW1vdmUgYWxsIGJ1aWxkIHByb2R1Y3RzLgorCitJZiBhbnkgb3B0aW9uYWwgYDxwYXRoPi4uLmAgYXJndW1lbnRzIGFyZSBnaXZlbiwgb25seSB0aG9zZSBwYXRocworYXJlIGFmZmVjdGVkLgorCitPUFRJT05TCistLS0tLS0tCistZDo6CisJTm9ybWFsbHksIHdoZW4gbm8gPHBhdGg+IGlzIHNwZWNpZmllZCwgZ2l0IGNsZWFuIHdpbGwgbm90CisJcmVjdXJzZSBpbnRvIHVudHJhY2tlZCBkaXJlY3RvcmllcyB0byBhdm9pZCByZW1vdmluZyB0b28gbXVjaC4KKwlTcGVjaWZ5IC1kIHRvIGhhdmUgaXQgcmVjdXJzZSBpbnRvIHN1Y2ggZGlyZWN0b3JpZXMgYXMgd2VsbC4KKwlJZiBhbnkgcGF0aHMgYXJlIHNwZWNpZmllZCwgLWQgaXMgaXJyZWxldmFudDsgYWxsIHVudHJhY2tlZAorCWZpbGVzIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgcGF0aHMgKHdpdGggZXhjZXB0aW9ucyBmb3IgbmVzdGVkCisJZ2l0IGRpcmVjdG9yaWVzIG1lbnRpb25lZCB1bmRlciBgLS1mb3JjZWApIHdpbGwgYmUgcmVtb3ZlZC4KKworLWY6OgorLS1mb3JjZTo6CisJSWYgdGhlIEdpdCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNsZWFuLnJlcXVpcmVGb3JjZSBpcyBub3Qgc2V0CisJdG8gZmFsc2UsICdnaXQgY2xlYW4nIHdpbGwgcmVmdXNlIHRvIGRlbGV0ZSBmaWxlcyBvciBkaXJlY3RvcmllcworCXVubGVzcyBnaXZlbiAtZiBvciAtaS4gIEdpdCB3aWxsIHJlZnVzZSB0byBtb2RpZnkgdW50cmFja2VkCisJbmVzdGVkIGdpdCByZXBvc2l0b3JpZXMgKGRpcmVjdG9yaWVzIHdpdGggYSAuZ2l0IHN1YmRpcmVjdG9yeSkKKwl1bmxlc3MgYSBzZWNvbmQgLWYgaXMgZ2l2ZW4uCisKKy1pOjoKKy0taW50ZXJhY3RpdmU6OgorCVNob3cgd2hhdCB3b3VsZCBiZSBkb25lIGFuZCBjbGVhbiBmaWxlcyBpbnRlcmFjdGl2ZWx5LiBTZWUKKwlgYEludGVyYWN0aXZlIG1vZGUnJyBmb3IgZGV0YWlscy4KKworLW46OgorLS1kcnktcnVuOjoKKwlEb24ndCBhY3R1YWxseSByZW1vdmUgYW55dGhpbmcsIGp1c3Qgc2hvdyB3aGF0IHdvdWxkIGJlIGRvbmUuCisKKy1xOjoKKy0tcXVpZXQ6OgorCUJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMsIGJ1dCBub3QgdGhlIGZpbGVzIHRoYXQgYXJlCisJc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuCisKKy1lIDxwYXR0ZXJuPjo6CistLWV4Y2x1ZGU9PHBhdHRlcm4+OjoKKwlVc2UgdGhlIGdpdmVuIGV4Y2x1ZGUgcGF0dGVybiBpbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgaWdub3JlIHJ1bGVzCisJKHNlZSBsaW5rZ2l0OmdpdGlnbm9yZVs1XSkuCisKKy14OjoKKwlEb24ndCB1c2UgdGhlIHN0YW5kYXJkIGlnbm9yZSBydWxlcyAoc2VlIGxpbmtnaXQ6Z2l0aWdub3JlWzVdKSwgYnV0CisJc3RpbGwgdXNlIHRoZSBpZ25vcmUgcnVsZXMgZ2l2ZW4gd2l0aCBgLWVgIG9wdGlvbnMgZnJvbSB0aGUgY29tbWFuZAorCWxpbmUuICBUaGlzIGFsbG93cyByZW1vdmluZyBhbGwgdW50cmFja2VkCisJZmlsZXMsIGluY2x1ZGluZyBidWlsZCBwcm9kdWN0cy4gIFRoaXMgY2FuIGJlIHVzZWQgKHBvc3NpYmx5IGluCisJY29uanVuY3Rpb24gd2l0aCAnZ2l0IHJlc3RvcmUnIG9yICdnaXQgcmVzZXQnKSB0byBjcmVhdGUgYSBwcmlzdGluZQorCXdvcmtpbmcgZGlyZWN0b3J5IHRvIHRlc3QgYSBjbGVhbiBidWlsZC4KKworLVg6OgorCVJlbW92ZSBvbmx5IGZpbGVzIGlnbm9yZWQgYnkgR2l0LiAgVGhpcyBtYXkgYmUgdXNlZnVsIHRvIHJlYnVpbGQKKwlldmVyeXRoaW5nIGZyb20gc2NyYXRjaCwgYnV0IGtlZXAgbWFudWFsbHkgY3JlYXRlZCBmaWxlcy4KKworSW50ZXJhY3RpdmUgbW9kZQorLS0tLS0tLS0tLS0tLS0tLQorV2hlbiB0aGUgY29tbWFuZCBlbnRlcnMgdGhlIGludGVyYWN0aXZlIG1vZGUsIGl0IHNob3dzIHRoZQorZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGJlIGNsZWFuZWQsIGFuZCBnb2VzIGludG8gaXRzCitpbnRlcmFjdGl2ZSBjb21tYW5kIGxvb3AuCisKK1RoZSBjb21tYW5kIGxvb3Agc2hvd3MgdGhlIGxpc3Qgb2Ygc3ViY29tbWFuZHMgYXZhaWxhYmxlLCBhbmQKK2dpdmVzIGEgcHJvbXB0ICJXaGF0IG5vdz4gIi4gIEluIGdlbmVyYWwsIHdoZW4gdGhlIHByb21wdCBlbmRzCit3aXRoIGEgc2luZ2xlICc+JywgeW91IGNhbiBwaWNrIG9ubHkgb25lIG9mIHRoZSBjaG9pY2VzIGdpdmVuCithbmQgdHlwZSByZXR1cm4sIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCisgICAgKioqIENvbW1hbmRzICoqKgorCTE6IGNsZWFuICAgICAgICAgICAgICAgIDI6IGZpbHRlciBieSBwYXR0ZXJuICAgIDM6IHNlbGVjdCBieSBudW1iZXJzCisJNDogYXNrIGVhY2ggICAgICAgICAgICAgNTogcXVpdCAgICAgICAgICAgICAgICAgNjogaGVscAorICAgIFdoYXQgbm93PiAxCistLS0tLS0tLS0tLS0KKworWW91IGFsc28gY291bGQgc2F5IGBjYCBvciBgY2xlYW5gIGFib3ZlIGFzIGxvbmcgYXMgdGhlIGNob2ljZSBpcyB1bmlxdWUuCisKK1RoZSBtYWluIGNvbW1hbmQgbG9vcCBoYXMgNiBzdWJjb21tYW5kcy4KKworY2xlYW46OgorCisgICBTdGFydCBjbGVhbmluZyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMsIGFuZCB0aGVuIHF1aXQuCisKK2ZpbHRlciBieSBwYXR0ZXJuOjoKKworICAgVGhpcyBzaG93cyB0aGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGJlIGRlbGV0ZWQgYW5kIGlzc3VlcyBhbgorICAgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+IiBwcm9tcHQuIFlvdSBjYW4gaW5wdXQgc3BhY2Utc2VwYXJhdGVkCisgICBwYXR0ZXJucyB0byBleGNsdWRlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBmcm9tIGRlbGV0aW9uLgorICAgRS5nLiAiKi5jICouaCIgd2lsbCBleGNsdWRlcyBmaWxlcyBlbmQgd2l0aCAiLmMiIGFuZCAiLmgiIGZyb20KKyAgIGRlbGV0aW9uLiBXaGVuIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggdGhlIGZpbHRlcmVkIHJlc3VsdCwgcHJlc3MKKyAgIEVOVEVSIChlbXB0eSkgYmFjayB0byB0aGUgbWFpbiBtZW51LgorCitzZWxlY3QgYnkgbnVtYmVyczo6CisKKyAgIFRoaXMgc2hvd3MgdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBiZSBkZWxldGVkIGFuZCBpc3N1ZXMgYW4KKyAgICJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlPj4iIHByb21wdC4gV2hlbiB0aGUgcHJvbXB0IGVuZHMgd2l0aCBkb3VibGUKKyAgICc+PicgbGlrZSB0aGlzLCB5b3UgY2FuIG1ha2UgbW9yZSB0aGFuIG9uZSBzZWxlY3Rpb24sIGNvbmNhdGVuYXRlZAorICAgd2l0aCB3aGl0ZXNwYWNlIG9yIGNvbW1hLiAgQWxzbyB5b3UgY2FuIHNheSByYW5nZXMuICBFLmcuICIyLTUgNyw5IgorICAgdG8gY2hvb3NlIDIsMyw0LDUsNyw5IGZyb20gdGhlIGxpc3QuICBJZiB0aGUgc2Vjb25kIG51bWJlciBpbiBhCisgICByYW5nZSBpcyBvbWl0dGVkLCBhbGwgcmVtYWluaW5nIGl0ZW1zIGFyZSBzZWxlY3RlZC4gIEUuZy4gIjctIiB0bworICAgY2hvb3NlIDcsOCw5IGZyb20gdGhlIGxpc3QuICBZb3UgY2FuIHNheSAnKicgdG8gY2hvb3NlIGV2ZXJ5dGhpbmcuCisgICBBbHNvIHdoZW4geW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB0aGUgZmlsdGVyZWQgcmVzdWx0LCBwcmVzcyBFTlRFUgorICAgKGVtcHR5KSBiYWNrIHRvIHRoZSBtYWluIG1lbnUuCisKK2FzayBlYWNoOjoKKworICBUaGlzIHdpbGwgc3RhcnQgdG8gY2xlYW4sIGFuZCB5b3UgbXVzdCBjb25maXJtIG9uZSBieSBvbmUgaW4gb3JkZXIKKyAgdG8gZGVsZXRlIGl0ZW1zLiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgYWN0aW9uIGlzIG5vdCBhcyBlZmZpY2llbnQKKyAgYXMgdGhlIGFib3ZlIHR3byBhY3Rpb25zLgorCitxdWl0OjoKKworICBUaGlzIGxldHMgeW91IHF1aXQgd2l0aG91dCBkbyBjbGVhbmluZy4KKworaGVscDo6CisKKyAgU2hvdyBicmllZiB1c2FnZSBvZiBpbnRlcmFjdGl2ZSBnaXQtY2xlYW4uCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXRpZ25vcmVbNV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhkNjA0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dApAQCAtMCwwICsxLDM1NCBAQAorZ2l0LWNsb25lKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNsb25lIC0gQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNsb25lJyBbLS10ZW1wbGF0ZT08dGVtcGxhdGVfZGlyZWN0b3J5Pl0KKwkgIFstbF0gWy1zXSBbLS1uby1oYXJkbGlua3NdIFstcV0gWy1uXSBbLS1iYXJlXSBbLS1taXJyb3JdCisJICBbLW8gPG5hbWU+XSBbLWIgPG5hbWU+XSBbLXUgPHVwbG9hZC1wYWNrPl0gWy0tcmVmZXJlbmNlIDxyZXBvc2l0b3J5Pl0KKwkgIFstLWRpc3NvY2lhdGVdIFstLXNlcGFyYXRlLWdpdC1kaXIgPGdpdCBkaXI+XQorCSAgWy0tZGVwdGggPGRlcHRoPl0gWy0tW25vLV1zaW5nbGUtYnJhbmNoXSBbLS1uby10YWdzXQorCSAgWy0tcmVjdXJzZS1zdWJtb2R1bGVzWz08cGF0aHNwZWM+XV0gWy0tW25vLV1zaGFsbG93LXN1Ym1vZHVsZXNdCisJICBbLS1bbm8tXXJlbW90ZS1zdWJtb2R1bGVzXSBbLS1qb2JzIDxuPl0gWy0tc3BhcnNlXQorCSAgWy0tZmlsdGVyPTxmaWx0ZXI+XSBbLS1dIDxyZXBvc2l0b3J5PgorCSAgWzxkaXJlY3Rvcnk+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworQ2xvbmVzIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnksIGNyZWF0ZXMKK3JlbW90ZS10cmFja2luZyBicmFuY2hlcyBmb3IgZWFjaCBicmFuY2ggaW4gdGhlIGNsb25lZCByZXBvc2l0b3J5CisodmlzaWJsZSB1c2luZyBgZ2l0IGJyYW5jaCAtLXJlbW90ZXNgKSwgYW5kIGNyZWF0ZXMgYW5kIGNoZWNrcyBvdXQgYW4KK2luaXRpYWwgYnJhbmNoIHRoYXQgaXMgZm9ya2VkIGZyb20gdGhlIGNsb25lZCByZXBvc2l0b3J5J3MKK2N1cnJlbnRseSBhY3RpdmUgYnJhbmNoLgorCitBZnRlciB0aGUgY2xvbmUsIGEgcGxhaW4gYGdpdCBmZXRjaGAgd2l0aG91dCBhcmd1bWVudHMgd2lsbCB1cGRhdGUKK2FsbCB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLCBhbmQgYSBgZ2l0IHB1bGxgIHdpdGhvdXQKK2FyZ3VtZW50cyB3aWxsIGluIGFkZGl0aW9uIG1lcmdlIHRoZSByZW1vdGUgbWFzdGVyIGJyYW5jaCBpbnRvIHRoZQorY3VycmVudCBtYXN0ZXIgYnJhbmNoLCBpZiBhbnkgKHRoaXMgaXMgdW50cnVlIHdoZW4gIi0tc2luZ2xlLWJyYW5jaCIKK2lzIGdpdmVuOyBzZWUgYmVsb3cpLgorCitUaGlzIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpcyBhY2hpZXZlZCBieSBjcmVhdGluZyByZWZlcmVuY2VzIHRvCit0aGUgcmVtb3RlIGJyYW5jaCBoZWFkcyB1bmRlciBgcmVmcy9yZW1vdGVzL29yaWdpbmAgYW5kCitieSBpbml0aWFsaXppbmcgYHJlbW90ZS5vcmlnaW4udXJsYCBhbmQgYHJlbW90ZS5vcmlnaW4uZmV0Y2hgCitjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKworCitPUFRJT05TCistLS0tLS0tCistbDo6CistLWxvY2FsOjoKKwlXaGVuIHRoZSByZXBvc2l0b3J5IHRvIGNsb25lIGZyb20gaXMgb24gYSBsb2NhbCBtYWNoaW5lLAorCXRoaXMgZmxhZyBieXBhc3NlcyB0aGUgbm9ybWFsICJHaXQgYXdhcmUiIHRyYW5zcG9ydAorCW1lY2hhbmlzbSBhbmQgY2xvbmVzIHRoZSByZXBvc2l0b3J5IGJ5IG1ha2luZyBhIGNvcHkgb2YKKwlIRUFEIGFuZCBldmVyeXRoaW5nIHVuZGVyIG9iamVjdHMgYW5kIHJlZnMgZGlyZWN0b3JpZXMuCisJVGhlIGZpbGVzIHVuZGVyIGAuZ2l0L29iamVjdHMvYCBkaXJlY3RvcnkgYXJlIGhhcmRsaW5rZWQKKwl0byBzYXZlIHNwYWNlIHdoZW4gcG9zc2libGUuCisrCitJZiB0aGUgcmVwb3NpdG9yeSBpcyBzcGVjaWZpZWQgYXMgYSBsb2NhbCBwYXRoIChlLmcuLCBgL3BhdGgvdG8vcmVwb2ApLAordGhpcyBpcyB0aGUgZGVmYXVsdCwgYW5kIC0tbG9jYWwgaXMgZXNzZW50aWFsbHkgYSBuby1vcC4gIElmIHRoZQorcmVwb3NpdG9yeSBpcyBzcGVjaWZpZWQgYXMgYSBVUkwsIHRoZW4gdGhpcyBmbGFnIGlzIGlnbm9yZWQgKGFuZCB3ZQorbmV2ZXIgdXNlIHRoZSBsb2NhbCBvcHRpbWl6YXRpb25zKS4gIFNwZWNpZnlpbmcgYC0tbm8tbG9jYWxgIHdpbGwKK292ZXJyaWRlIHRoZSBkZWZhdWx0IHdoZW4gYC9wYXRoL3RvL3JlcG9gIGlzIGdpdmVuLCB1c2luZyB0aGUgcmVndWxhcgorR2l0IHRyYW5zcG9ydCBpbnN0ZWFkLgorCistLW5vLWhhcmRsaW5rczo6CisJRm9yY2UgdGhlIGNsb25pbmcgcHJvY2VzcyBmcm9tIGEgcmVwb3NpdG9yeSBvbiBhIGxvY2FsCisJZmlsZXN5c3RlbSB0byBjb3B5IHRoZSBmaWxlcyB1bmRlciB0aGUgYC5naXQvb2JqZWN0c2AKKwlkaXJlY3RvcnkgaW5zdGVhZCBvZiB1c2luZyBoYXJkbGlua3MuIFRoaXMgbWF5IGJlIGRlc2lyYWJsZQorCWlmIHlvdSBhcmUgdHJ5aW5nIHRvIG1ha2UgYSBiYWNrLXVwIG9mIHlvdXIgcmVwb3NpdG9yeS4KKworLXM6OgorLS1zaGFyZWQ6OgorCVdoZW4gdGhlIHJlcG9zaXRvcnkgdG8gY2xvbmUgaXMgb24gdGhlIGxvY2FsIG1hY2hpbmUsCisJaW5zdGVhZCBvZiB1c2luZyBoYXJkIGxpbmtzLCBhdXRvbWF0aWNhbGx5IHNldHVwCisJYC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXNgIHRvIHNoYXJlIHRoZSBvYmplY3RzCisJd2l0aCB0aGUgc291cmNlIHJlcG9zaXRvcnkuICBUaGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkKKwlzdGFydHMgb3V0IHdpdGhvdXQgYW55IG9iamVjdCBvZiBpdHMgb3duLgorKworKk5PVEUqOiB0aGlzIGlzIGEgcG9zc2libHkgZGFuZ2Vyb3VzIG9wZXJhdGlvbjsgZG8gKm5vdCogdXNlCitpdCB1bmxlc3MgeW91IHVuZGVyc3RhbmQgd2hhdCBpdCBkb2VzLiBJZiB5b3UgY2xvbmUgeW91cgorcmVwb3NpdG9yeSB1c2luZyB0aGlzIG9wdGlvbiBhbmQgdGhlbiBkZWxldGUgYnJhbmNoZXMgKG9yIHVzZSBhbnkKK290aGVyIEdpdCBjb21tYW5kIHRoYXQgbWFrZXMgYW55IGV4aXN0aW5nIGNvbW1pdCB1bnJlZmVyZW5jZWQpIGluIHRoZQorc291cmNlIHJlcG9zaXRvcnksIHNvbWUgb2JqZWN0cyBtYXkgYmVjb21lIHVucmVmZXJlbmNlZCAob3IgZGFuZ2xpbmcpLgorVGhlc2Ugb2JqZWN0cyBtYXkgYmUgcmVtb3ZlZCBieSBub3JtYWwgR2l0IG9wZXJhdGlvbnMgKHN1Y2ggYXMgYGdpdCBjb21taXRgKQord2hpY2ggYXV0b21hdGljYWxseSBjYWxsIGBnaXQgZ2MgLS1hdXRvYC4gKFNlZSBsaW5rZ2l0OmdpdC1nY1sxXS4pCitJZiB0aGVzZSBvYmplY3RzIGFyZSByZW1vdmVkIGFuZCB3ZXJlIHJlZmVyZW5jZWQgYnkgdGhlIGNsb25lZCByZXBvc2l0b3J5LAordGhlbiB0aGUgY2xvbmVkIHJlcG9zaXRvcnkgd2lsbCBiZWNvbWUgY29ycnVwdC4KKysKK05vdGUgdGhhdCBydW5uaW5nIGBnaXQgcmVwYWNrYCB3aXRob3V0IHRoZSBgLS1sb2NhbGAgb3B0aW9uIGluIGEgcmVwb3NpdG9yeQorY2xvbmVkIHdpdGggYC0tc2hhcmVkYCB3aWxsIGNvcHkgb2JqZWN0cyBmcm9tIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBpbnRvIGEgcGFjaworaW4gdGhlIGNsb25lZCByZXBvc2l0b3J5LCByZW1vdmluZyB0aGUgZGlzayBzcGFjZSBzYXZpbmdzIG9mIGBjbG9uZSAtLXNoYXJlZGAuCitJdCBpcyBzYWZlLCBob3dldmVyLCB0byBydW4gYGdpdCBnY2AsIHdoaWNoIHVzZXMgdGhlIGAtLWxvY2FsYCBvcHRpb24gYnkKK2RlZmF1bHQuCisrCitJZiB5b3Ugd2FudCB0byBicmVhayB0aGUgZGVwZW5kZW5jeSBvZiBhIHJlcG9zaXRvcnkgY2xvbmVkIHdpdGggYC0tc2hhcmVkYCBvbgoraXRzIHNvdXJjZSByZXBvc2l0b3J5LCB5b3UgY2FuIHNpbXBseSBydW4gYGdpdCByZXBhY2sgLWFgIHRvIGNvcHkgYWxsCitvYmplY3RzIGZyb20gdGhlIHNvdXJjZSByZXBvc2l0b3J5IGludG8gYSBwYWNrIGluIHRoZSBjbG9uZWQgcmVwb3NpdG9yeS4KKworLS1yZWZlcmVuY2VbLWlmLWFibGVdIDxyZXBvc2l0b3J5Pjo6CisJSWYgdGhlIHJlZmVyZW5jZSByZXBvc2l0b3J5IGlzIG9uIHRoZSBsb2NhbCBtYWNoaW5lLAorCWF1dG9tYXRpY2FsbHkgc2V0dXAgYC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXNgIHRvCisJb2J0YWluIG9iamVjdHMgZnJvbSB0aGUgcmVmZXJlbmNlIHJlcG9zaXRvcnkuICBVc2luZworCWFuIGFscmVhZHkgZXhpc3RpbmcgcmVwb3NpdG9yeSBhcyBhbiBhbHRlcm5hdGUgd2lsbAorCXJlcXVpcmUgZmV3ZXIgb2JqZWN0cyB0byBiZSBjb3BpZWQgZnJvbSB0aGUgcmVwb3NpdG9yeQorCWJlaW5nIGNsb25lZCwgcmVkdWNpbmcgbmV0d29yayBhbmQgbG9jYWwgc3RvcmFnZSBjb3N0cy4KKwlXaGVuIHVzaW5nIHRoZSBgLS1yZWZlcmVuY2UtaWYtYWJsZWAsIGEgbm9uIGV4aXN0aW5nCisJZGlyZWN0b3J5IGlzIHNraXBwZWQgd2l0aCBhIHdhcm5pbmcgaW5zdGVhZCBvZiBhYm9ydGluZworCXRoZSBjbG9uZS4KKysKKypOT1RFKjogc2VlIHRoZSBOT1RFIGZvciB0aGUgYC0tc2hhcmVkYCBvcHRpb24sIGFuZCBhbHNvIHRoZQorYC0tZGlzc29jaWF0ZWAgb3B0aW9uLgorCistLWRpc3NvY2lhdGU6OgorCUJvcnJvdyB0aGUgb2JqZWN0cyBmcm9tIHJlZmVyZW5jZSByZXBvc2l0b3JpZXMgc3BlY2lmaWVkCisJd2l0aCB0aGUgYC0tcmVmZXJlbmNlYCBvcHRpb25zIG9ubHkgdG8gcmVkdWNlIG5ldHdvcmsKKwl0cmFuc2ZlciwgYW5kIHN0b3AgYm9ycm93aW5nIGZyb20gdGhlbSBhZnRlciBhIGNsb25lIGlzIG1hZGUKKwlieSBtYWtpbmcgbmVjZXNzYXJ5IGxvY2FsIGNvcGllcyBvZiBib3Jyb3dlZCBvYmplY3RzLiAgVGhpcworCW9wdGlvbiBjYW4gYWxzbyBiZSB1c2VkIHdoZW4gY2xvbmluZyBsb2NhbGx5IGZyb20gYQorCXJlcG9zaXRvcnkgdGhhdCBhbHJlYWR5IGJvcnJvd3Mgb2JqZWN0cyBmcm9tIGFub3RoZXIKKwlyZXBvc2l0b3J5LS10aGUgbmV3IHJlcG9zaXRvcnkgd2lsbCBib3Jyb3cgb2JqZWN0cyBmcm9tIHRoZQorCXNhbWUgcmVwb3NpdG9yeSwgYW5kIHRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHN0b3AgdGhlCisJYm9ycm93aW5nLgorCistcTo6CistLXF1aWV0OjoKKwlPcGVyYXRlIHF1aWV0bHkuICBQcm9ncmVzcyBpcyBub3QgcmVwb3J0ZWQgdG8gdGhlIHN0YW5kYXJkCisJZXJyb3Igc3RyZWFtLgorCistdjo6CistLXZlcmJvc2U6OgorCVJ1biB2ZXJib3NlbHkuIERvZXMgbm90IGFmZmVjdCB0aGUgcmVwb3J0aW5nIG9mIHByb2dyZXNzIHN0YXR1cworCXRvIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0uCisKKy0tcHJvZ3Jlc3M6OgorCVByb2dyZXNzIHN0YXR1cyBpcyByZXBvcnRlZCBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtCisJYnkgZGVmYXVsdCB3aGVuIGl0IGlzIGF0dGFjaGVkIHRvIGEgdGVybWluYWwsIHVubGVzcyBgLS1xdWlldGAKKwlpcyBzcGVjaWZpZWQuIFRoaXMgZmxhZyBmb3JjZXMgcHJvZ3Jlc3Mgc3RhdHVzIGV2ZW4gaWYgdGhlCisJc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGlzIG5vdCBkaXJlY3RlZCB0byBhIHRlcm1pbmFsLgorCistLXNlcnZlci1vcHRpb249PG9wdGlvbj46OgorCVRyYW5zbWl0IHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhlIHNlcnZlciB3aGVuIGNvbW11bmljYXRpbmcgdXNpbmcKKwlwcm90b2NvbCB2ZXJzaW9uIDIuICBUaGUgZ2l2ZW4gc3RyaW5nIG11c3Qgbm90IGNvbnRhaW4gYSBOVUwgb3IgTEYKKwljaGFyYWN0ZXIuICBUaGUgc2VydmVyJ3MgaGFuZGxpbmcgb2Ygc2VydmVyIG9wdGlvbnMsIGluY2x1ZGluZworCXVua25vd24gb25lcywgaXMgc2VydmVyLXNwZWNpZmljLgorCVdoZW4gbXVsdGlwbGUgYC0tc2VydmVyLW9wdGlvbj08b3B0aW9uPmAgYXJlIGdpdmVuLCB0aGV5IGFyZSBhbGwKKwlzZW50IHRvIHRoZSBvdGhlciBzaWRlIGluIHRoZSBvcmRlciBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworLW46OgorLS1uby1jaGVja291dDo6CisJTm8gY2hlY2tvdXQgb2YgSEVBRCBpcyBwZXJmb3JtZWQgYWZ0ZXIgdGhlIGNsb25lIGlzIGNvbXBsZXRlLgorCistLWJhcmU6OgorCU1ha2UgYSAnYmFyZScgR2l0IHJlcG9zaXRvcnkuICBUaGF0IGlzLCBpbnN0ZWFkIG9mCisJY3JlYXRpbmcgYDxkaXJlY3Rvcnk+YCBhbmQgcGxhY2luZyB0aGUgYWRtaW5pc3RyYXRpdmUKKwlmaWxlcyBpbiBgPGRpcmVjdG9yeT4vLmdpdGAsIG1ha2UgdGhlIGA8ZGlyZWN0b3J5PmAKKwlpdHNlbGYgdGhlIGAkR0lUX0RJUmAuIFRoaXMgb2J2aW91c2x5IGltcGxpZXMgdGhlIGAtLW5vLWNoZWNrb3V0YAorCWJlY2F1c2UgdGhlcmUgaXMgbm93aGVyZSB0byBjaGVjayBvdXQgdGhlIHdvcmtpbmcgdHJlZS4KKwlBbHNvIHRoZSBicmFuY2ggaGVhZHMgYXQgdGhlIHJlbW90ZSBhcmUgY29waWVkIGRpcmVjdGx5CisJdG8gY29ycmVzcG9uZGluZyBsb2NhbCBicmFuY2ggaGVhZHMsIHdpdGhvdXQgbWFwcGluZworCXRoZW0gdG8gYHJlZnMvcmVtb3Rlcy9vcmlnaW4vYC4gIFdoZW4gdGhpcyBvcHRpb24gaXMKKwl1c2VkLCBuZWl0aGVyIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBub3IgdGhlIHJlbGF0ZWQKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhcmUgY3JlYXRlZC4KKworLS1zcGFyc2U6OgorCUluaXRpYWxpemUgdGhlIHNwYXJzZS1jaGVja291dCBmaWxlIHNvIHRoZSB3b3JraW5nCisJZGlyZWN0b3J5IHN0YXJ0cyB3aXRoIG9ubHkgdGhlIGZpbGVzIGluIHRoZSByb290CisJb2YgdGhlIHJlcG9zaXRvcnkuIFRoZSBzcGFyc2UtY2hlY2tvdXQgZmlsZSBjYW4gYmUKKwltb2RpZmllZCB0byBncm93IHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhcyBuZWVkZWQuCisKKy0tZmlsdGVyPTxmaWx0ZXItc3BlYz46OgorCVVzZSB0aGUgcGFydGlhbCBjbG9uZSBmZWF0dXJlIGFuZCByZXF1ZXN0IHRoYXQgdGhlIHNlcnZlciBzZW5kcworCWEgc3Vic2V0IG9mIHJlYWNoYWJsZSBvYmplY3RzIGFjY29yZGluZyB0byBhIGdpdmVuIG9iamVjdCBmaWx0ZXIuCisJV2hlbiB1c2luZyBgLS1maWx0ZXJgLCB0aGUgc3VwcGxpZWQgYDxmaWx0ZXItc3BlYz5gIGlzIHVzZWQgZm9yCisJdGhlIHBhcnRpYWwgY2xvbmUgZmlsdGVyLiBGb3IgZXhhbXBsZSwgYC0tZmlsdGVyPWJsb2I6bm9uZWAgd2lsbAorCWZpbHRlciBvdXQgYWxsIGJsb2JzIChmaWxlIGNvbnRlbnRzKSB1bnRpbCBuZWVkZWQgYnkgR2l0LiBBbHNvLAorCWAtLWZpbHRlcj1ibG9iOmxpbWl0PTxzaXplPmAgd2lsbCBmaWx0ZXIgb3V0IGFsbCBibG9icyBvZiBzaXplCisJYXQgbGVhc3QgYDxzaXplPmAuIEZvciBtb3JlIGRldGFpbHMgb24gZmlsdGVyIHNwZWNpZmljYXRpb25zLCBzZWUKKwl0aGUgYC0tZmlsdGVyYCBvcHRpb24gaW4gbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0uCisKKy0tbWlycm9yOjoKKwlTZXQgdXAgYSBtaXJyb3Igb2YgdGhlIHNvdXJjZSByZXBvc2l0b3J5LiAgVGhpcyBpbXBsaWVzIGAtLWJhcmVgLgorCUNvbXBhcmVkIHRvIGAtLWJhcmVgLCBgLS1taXJyb3JgIG5vdCBvbmx5IG1hcHMgbG9jYWwgYnJhbmNoZXMgb2YgdGhlCisJc291cmNlIHRvIGxvY2FsIGJyYW5jaGVzIG9mIHRoZSB0YXJnZXQsIGl0IG1hcHMgYWxsIHJlZnMgKGluY2x1ZGluZworCXJlbW90ZS10cmFja2luZyBicmFuY2hlcywgbm90ZXMgZXRjLikgYW5kIHNldHMgdXAgYSByZWZzcGVjIGNvbmZpZ3VyYXRpb24gc3VjaAorCXRoYXQgYWxsIHRoZXNlIHJlZnMgYXJlIG92ZXJ3cml0dGVuIGJ5IGEgYGdpdCByZW1vdGUgdXBkYXRlYCBpbiB0aGUKKwl0YXJnZXQgcmVwb3NpdG9yeS4KKworLW8gPG5hbWU+OjoKKy0tb3JpZ2luIDxuYW1lPjo6CisJSW5zdGVhZCBvZiB1c2luZyB0aGUgcmVtb3RlIG5hbWUgYG9yaWdpbmAgdG8ga2VlcCB0cmFjaworCW9mIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5LCB1c2UgYDxuYW1lPmAuCisKKy1iIDxuYW1lPjo6CistLWJyYW5jaCA8bmFtZT46OgorCUluc3RlYWQgb2YgcG9pbnRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgSEVBRCB0byB0aGUgYnJhbmNoIHBvaW50ZWQKKwl0byBieSB0aGUgY2xvbmVkIHJlcG9zaXRvcnkncyBIRUFELCBwb2ludCB0byBgPG5hbWU+YCBicmFuY2gKKwlpbnN0ZWFkLiBJbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnksIHRoaXMgaXMgdGhlIGJyYW5jaCB0aGF0IHdpbGwKKwliZSBjaGVja2VkIG91dC4KKwlgLS1icmFuY2hgIGNhbiBhbHNvIHRha2UgdGFncyBhbmQgZGV0YWNoZXMgdGhlIEhFQUQgYXQgdGhhdCBjb21taXQKKwlpbiB0aGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkuCisKKy11IDx1cGxvYWQtcGFjaz46OgorLS11cGxvYWQtcGFjayA8dXBsb2FkLXBhY2s+OjoKKwlXaGVuIGdpdmVuLCBhbmQgdGhlIHJlcG9zaXRvcnkgdG8gY2xvbmUgZnJvbSBpcyBhY2Nlc3NlZAorCXZpYSBzc2gsIHRoaXMgc3BlY2lmaWVzIGEgbm9uLWRlZmF1bHQgcGF0aCBmb3IgdGhlIGNvbW1hbmQKKwlydW4gb24gdGhlIG90aGVyIGVuZC4KKworLS10ZW1wbGF0ZT08dGVtcGxhdGVfZGlyZWN0b3J5Pjo6CisJU3BlY2lmeSB0aGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZDsKKwkoU2VlIHRoZSAiVEVNUExBVEUgRElSRUNUT1JZIiBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWluaXRbMV0uKQorCistYyA8a2V5Pj08dmFsdWU+OjoKKy0tY29uZmlnIDxrZXk+PTx2YWx1ZT46OgorCVNldCBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW4gdGhlIG5ld2x5LWNyZWF0ZWQgcmVwb3NpdG9yeTsKKwl0aGlzIHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseSBhZnRlciB0aGUgcmVwb3NpdG9yeSBpcworCWluaXRpYWxpemVkLCBidXQgYmVmb3JlIHRoZSByZW1vdGUgaGlzdG9yeSBpcyBmZXRjaGVkIG9yIGFueQorCWZpbGVzIGNoZWNrZWQgb3V0LiAgVGhlIGtleSBpcyBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgZXhwZWN0ZWQgYnkKKwlsaW5rZ2l0OmdpdC1jb25maWdbMV0gKGUuZy4sIGBjb3JlLmVvbD10cnVlYCkuIElmIG11bHRpcGxlCisJdmFsdWVzIGFyZSBnaXZlbiBmb3IgdGhlIHNhbWUga2V5LCBlYWNoIHZhbHVlIHdpbGwgYmUgd3JpdHRlbiB0bworCXRoZSBjb25maWcgZmlsZS4gVGhpcyBtYWtlcyBpdCBzYWZlLCBmb3IgZXhhbXBsZSwgdG8gYWRkCisJYWRkaXRpb25hbCBmZXRjaCByZWZzcGVjcyB0byB0aGUgb3JpZ2luIHJlbW90ZS4KKysKK0R1ZSB0byBsaW1pdGF0aW9ucyBvZiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgc29tZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZXMgZG8gbm90IHRha2UgZWZmZWN0IHVudGlsIGFmdGVyIHRoZSBpbml0aWFsIGZldGNoIGFuZCBjaGVja291dC4KK0NvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGtub3duIHRvIG5vdCB0YWtlIGVmZmVjdCBhcmU6CitgcmVtb3RlLjxuYW1lPi5taXJyb3JgIGFuZCBgcmVtb3RlLjxuYW1lPi50YWdPcHRgLiAgVXNlIHRoZQorY29ycmVzcG9uZGluZyBgLS1taXJyb3JgIGFuZCBgLS1uby10YWdzYCBvcHRpb25zIGluc3RlYWQuCisKKy0tZGVwdGggPGRlcHRoPjo6CisJQ3JlYXRlIGEgJ3NoYWxsb3cnIGNsb25lIHdpdGggYSBoaXN0b3J5IHRydW5jYXRlZCB0byB0aGUKKwlzcGVjaWZpZWQgbnVtYmVyIG9mIGNvbW1pdHMuIEltcGxpZXMgYC0tc2luZ2xlLWJyYW5jaGAgdW5sZXNzCisJYC0tbm8tc2luZ2xlLWJyYW5jaGAgaXMgZ2l2ZW4gdG8gZmV0Y2ggdGhlIGhpc3RvcmllcyBuZWFyIHRoZQorCXRpcHMgb2YgYWxsIGJyYW5jaGVzLiBJZiB5b3Ugd2FudCB0byBjbG9uZSBzdWJtb2R1bGVzIHNoYWxsb3dseSwKKwlhbHNvIHBhc3MgYC0tc2hhbGxvdy1zdWJtb2R1bGVzYC4KKworLS1zaGFsbG93LXNpbmNlPTxkYXRlPjo6CisJQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSB3aXRoIGEgaGlzdG9yeSBhZnRlciB0aGUgc3BlY2lmaWVkIHRpbWUuCisKKy0tc2hhbGxvdy1leGNsdWRlPTxyZXZpc2lvbj46OgorCUNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgd2l0aCBhIGhpc3RvcnksIGV4Y2x1ZGluZyBjb21taXRzCisJcmVhY2hhYmxlIGZyb20gYSBzcGVjaWZpZWQgcmVtb3RlIGJyYW5jaCBvciB0YWcuICBUaGlzIG9wdGlvbgorCWNhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuCisKKy0tW25vLV1zaW5nbGUtYnJhbmNoOjoKKwlDbG9uZSBvbmx5IHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIHRpcCBvZiBhIHNpbmdsZSBicmFuY2gsCisJZWl0aGVyIHNwZWNpZmllZCBieSB0aGUgYC0tYnJhbmNoYCBvcHRpb24gb3IgdGhlIHByaW1hcnkKKwlicmFuY2ggcmVtb3RlJ3MgYEhFQURgIHBvaW50cyBhdC4KKwlGdXJ0aGVyIGZldGNoZXMgaW50byB0aGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkgd2lsbCBvbmx5IHVwZGF0ZSB0aGUKKwlyZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciB0aGUgYnJhbmNoIHRoaXMgb3B0aW9uIHdhcyB1c2VkIGZvciB0aGUKKwlpbml0aWFsIGNsb25pbmcuICBJZiB0aGUgSEVBRCBhdCB0aGUgcmVtb3RlIGRpZCBub3QgcG9pbnQgYXQgYW55CisJYnJhbmNoIHdoZW4gYC0tc2luZ2xlLWJyYW5jaGAgY2xvbmUgd2FzIG1hZGUsIG5vIHJlbW90ZS10cmFja2luZworCWJyYW5jaCBpcyBjcmVhdGVkLgorCistLW5vLXRhZ3M6OgorCURvbid0IGNsb25lIGFueSB0YWdzLCBhbmQgc2V0CisJYHJlbW90ZS48cmVtb3RlPi50YWdPcHQ9LS1uby10YWdzYCBpbiB0aGUgY29uZmlnLCBlbnN1cmluZworCXRoYXQgZnV0dXJlIGBnaXQgcHVsbGAgYW5kIGBnaXQgZmV0Y2hgIG9wZXJhdGlvbnMgd29uJ3QgZm9sbG93CisJYW55IHRhZ3MuIFN1YnNlcXVlbnQgZXhwbGljaXQgdGFnIGZldGNoZXMgd2lsbCBzdGlsbCB3b3JrLAorCShzZWUgbGlua2dpdDpnaXQtZmV0Y2hbMV0pLgorKworQ2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgLS1zaW5nbGUtYnJhbmNoYCB0byBjbG9uZSBhbmQKK21haW50YWluIGEgYnJhbmNoIHdpdGggbm8gcmVmZXJlbmNlcyBvdGhlciB0aGFuIGEgc2luZ2xlIGNsb25lZAorYnJhbmNoLiBUaGlzIGlzIHVzZWZ1bCBlLmcuIHRvIG1haW50YWluIG1pbmltYWwgY2xvbmVzIG9mIHRoZSBkZWZhdWx0CiticmFuY2ggb2Ygc29tZSByZXBvc2l0b3J5IGZvciBzZWFyY2ggaW5kZXhpbmcuCisKKy0tcmVjdXJzZS1zdWJtb2R1bGVzWz08cGF0aHNwZWNdOjoKKwlBZnRlciB0aGUgY2xvbmUgaXMgY3JlYXRlZCwgaW5pdGlhbGl6ZSBhbmQgY2xvbmUgc3VibW9kdWxlcworCXdpdGhpbiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGF0aHNwZWMuICBJZiBubyBwYXRoc3BlYyBpcworCXByb3ZpZGVkLCBhbGwgc3VibW9kdWxlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGNsb25lZC4KKwlUaGlzIG9wdGlvbiBjYW4gYmUgZ2l2ZW4gbXVsdGlwbGUgdGltZXMgZm9yIHBhdGhzcGVjcyBjb25zaXN0aW5nCisJb2YgbXVsdGlwbGUgZW50cmllcy4gIFRoZSByZXN1bHRpbmcgY2xvbmUgaGFzIGBzdWJtb2R1bGUuYWN0aXZlYCBzZXQgdG8KKwl0aGUgcHJvdmlkZWQgcGF0aHNwZWMsIG9yICIuIiAobWVhbmluZyBhbGwgc3VibW9kdWxlcykgaWYgbm8KKwlwYXRoc3BlYyBpcyBwcm92aWRlZC4KKysKK1N1Ym1vZHVsZXMgYXJlIGluaXRpYWxpemVkIGFuZCBjbG9uZWQgdXNpbmcgdGhlaXIgZGVmYXVsdCBzZXR0aW5ncy4gVGhpcyBpcworZXF1aXZhbGVudCB0byBydW5uaW5nCitgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlIDxwYXRoc3BlYz5gIGltbWVkaWF0ZWx5IGFmdGVyCit0aGUgY2xvbmUgaXMgZmluaXNoZWQuIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgdGhlIGNsb25lZCByZXBvc2l0b3J5IGRvZXMKK25vdCBoYXZlIGEgd29ya3RyZWUvY2hlY2tvdXQgKGkuZS4gaWYgYW55IG9mIGAtLW5vLWNoZWNrb3V0YC9gLW5gLCBgLS1iYXJlYCwKK29yIGAtLW1pcnJvcmAgaXMgZ2l2ZW4pCisKKy0tW25vLV1zaGFsbG93LXN1Ym1vZHVsZXM6OgorCUFsbCBzdWJtb2R1bGVzIHdoaWNoIGFyZSBjbG9uZWQgd2lsbCBiZSBzaGFsbG93IHdpdGggYSBkZXB0aCBvZiAxLgorCistLVtuby1dcmVtb3RlLXN1Ym1vZHVsZXM6OgorCUFsbCBzdWJtb2R1bGVzIHdoaWNoIGFyZSBjbG9uZWQgd2lsbCB1c2UgdGhlIHN0YXR1cyBvZiB0aGUgc3VibW9kdWxlJ3MKKwlyZW1vdGUtdHJhY2tpbmcgYnJhbmNoIHRvIHVwZGF0ZSB0aGUgc3VibW9kdWxlLCByYXRoZXIgdGhhbiB0aGUKKwlzdXBlcnByb2plY3QncyByZWNvcmRlZCBTSEEtMS4gRXF1aXZhbGVudCB0byBwYXNzaW5nIGAtLXJlbW90ZWAgdG8KKwlgZ2l0IHN1Ym1vZHVsZSB1cGRhdGVgLgorCistLXNlcGFyYXRlLWdpdC1kaXI9PGdpdCBkaXI+OjoKKwlJbnN0ZWFkIG9mIHBsYWNpbmcgdGhlIGNsb25lZCByZXBvc2l0b3J5IHdoZXJlIGl0IGlzIHN1cHBvc2VkCisJdG8gYmUsIHBsYWNlIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSBhdCB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwKKwl0aGVuIG1ha2UgYSBmaWxlc3lzdGVtLWFnbm9zdGljIEdpdCBzeW1ib2xpYyBsaW5rIHRvIHRoZXJlLgorCVRoZSByZXN1bHQgaXMgR2l0IHJlcG9zaXRvcnkgY2FuIGJlIHNlcGFyYXRlZCBmcm9tIHdvcmtpbmcKKwl0cmVlLgorCistaiA8bj46OgorLS1qb2JzIDxuPjo6CisJVGhlIG51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgYXQgdGhlIHNhbWUgdGltZS4KKwlEZWZhdWx0cyB0byB0aGUgYHN1Ym1vZHVsZS5mZXRjaEpvYnNgIG9wdGlvbi4KKworPHJlcG9zaXRvcnk+OjoKKwlUaGUgKHBvc3NpYmx5IHJlbW90ZSkgcmVwb3NpdG9yeSB0byBjbG9uZSBmcm9tLiAgU2VlIHRoZQorCTw8VVJMUyxHSVQgVVJMUz4+IHNlY3Rpb24gYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3BlY2lmeWluZworCXJlcG9zaXRvcmllcy4KKworPGRpcmVjdG9yeT46OgorCVRoZSBuYW1lIG9mIGEgbmV3IGRpcmVjdG9yeSB0byBjbG9uZSBpbnRvLiAgVGhlICJodW1hbmlzaCIKKwlwYXJ0IG9mIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBpcyB1c2VkIGlmIG5vIGRpcmVjdG9yeSBpcworCWV4cGxpY2l0bHkgZ2l2ZW4gKGByZXBvYCBmb3IgYC9wYXRoL3RvL3JlcG8uZ2l0YCBhbmQgYGZvb2AKKwlmb3IgYGhvc3QueHo6Zm9vLy5naXRgKS4gIENsb25pbmcgaW50byBhbiBleGlzdGluZyBkaXJlY3RvcnkKKwlpcyBvbmx5IGFsbG93ZWQgaWYgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eS4KKworOmdpdC1jbG9uZTogMQoraW5jbHVkZTo6dXJscy50eHRbXQorCitFWEFNUExFUworLS0tLS0tLS0KKworKiBDbG9uZSBmcm9tIHVwc3RyZWFtOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtLy4uLi9saW51eC5naXQgbXktbGludXgKKyQgY2QgbXktbGludXgKKyQgbWFrZQorLS0tLS0tLS0tLS0tCisKKworKiBNYWtlIGEgbG9jYWwgY2xvbmUgdGhhdCBib3Jyb3dzIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aXRob3V0IGNoZWNraW5nIHRoaW5ncyBvdXQ6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIC1sIC1zIC1uIC4gLi4vY29weQorJCBjZCAuLi9jb3B5CiskIGdpdCBzaG93LWJyYW5jaAorLS0tLS0tLS0tLS0tCisKKworKiBDbG9uZSBmcm9tIHVwc3RyZWFtIHdoaWxlIGJvcnJvd2luZyBmcm9tIGFuIGV4aXN0aW5nIGxvY2FsIGRpcmVjdG9yeToKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgLS1yZWZlcmVuY2UgL2dpdC9saW51eC5naXQgXAorCWdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vLi4uL2xpbnV4LmdpdCBcCisJbXktbGludXgKKyQgY2QgbXktbGludXgKKy0tLS0tLS0tLS0tLQorCisKKyogQ3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IHRvIHB1Ymxpc2ggeW91ciBjaGFuZ2VzIHRvIHRoZSBwdWJsaWM6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIC0tYmFyZSAtbCAvaG9tZS9wcm9qLy5naXQgL3B1Yi9zY20vcHJvai5naXQKKy0tLS0tLS0tLS0tLQorCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29sdW1uLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbHVtbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4ZTljNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbHVtbi50eHQKQEAgLTAsMCArMSw3OSBAQAorZ2l0LWNvbHVtbigxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY29sdW1uIC0gRGlzcGxheSBkYXRhIGluIGNvbHVtbnMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNvbHVtbicgWy0tY29tbWFuZD08bmFtZT5dIFstLVtyYXctXW1vZGU9PG1vZGU+XSBbLS13aWR0aD08d2lkdGg+XQorCSAgICAgWy0taW5kZW50PTxzdHJpbmc+XSBbLS1ubD08c3RyaW5nPl0gWy0tcGFkZGluZz08bj5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBjb21tYW5kIGZvcm1hdHMgdGhlIGxpbmVzIG9mIGl0cyBzdGFuZGFyZCBpbnB1dCBpbnRvIGEgdGFibGUgd2l0aAorbXVsdGlwbGUgY29sdW1ucy4gRWFjaCBpbnB1dCBsaW5lIG9jY3VwaWVzIG9uZSBjZWxsIG9mIHRoZSB0YWJsZS4gSXQKK2lzIHVzZWQgaW50ZXJuYWxseSBieSBvdGhlciBnaXQgY29tbWFuZHMgdG8gZm9ybWF0IG91dHB1dCBpbnRvCitjb2x1bW5zLgorCitPUFRJT05TCistLS0tLS0tCistLWNvbW1hbmQ9PG5hbWU+OjoKKwlMb29rIHVwIGxheW91dCBtb2RlIHVzaW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29sdW1uLjxuYW1lPiBhbmQKKwljb2x1bW4udWkuCisKKy0tbW9kZT08bW9kZT46OgorCVNwZWNpZnkgbGF5b3V0IG1vZGUuIFNlZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNvbHVtbi51aSBmb3Igb3B0aW9uCisJc3ludGF4IGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS1yYXctbW9kZT08bj46OgorCVNhbWUgYXMgLS1tb2RlIGJ1dCB0YWtlIG1vZGUgZW5jb2RlZCBhcyBhIG51bWJlci4gVGhpcyBpcyBtYWlubHkgdXNlZAorCWJ5IG90aGVyIGNvbW1hbmRzIHRoYXQgaGF2ZSBhbHJlYWR5IHBhcnNlZCBsYXlvdXQgbW9kZS4KKworLS13aWR0aD08d2lkdGg+OjoKKwlTcGVjaWZ5IHRoZSB0ZXJtaW5hbCB3aWR0aC4gQnkgZGVmYXVsdCAnZ2l0IGNvbHVtbicgd2lsbCBkZXRlY3QgdGhlCisJdGVybWluYWwgd2lkdGgsIG9yIGZhbGwgYmFjayB0byA4MCBpZiBpdCBpcyB1bmFibGUgdG8gZG8gc28uCisKKy0taW5kZW50PTxzdHJpbmc+OjoKKwlTdHJpbmcgdG8gYmUgcHJpbnRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbGluZS4KKworLS1ubD08Tj46OgorCVN0cmluZyB0byBiZSBwcmludGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lLAorCWluY2x1ZGluZyBuZXdsaW5lIGNoYXJhY3Rlci4KKworLS1wYWRkaW5nPTxOPjo6CisJVGhlIG51bWJlciBvZiBzcGFjZXMgYmV0d2VlbiBjb2x1bW5zLiBPbmUgc3BhY2UgYnkgZGVmYXVsdC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK0Zvcm1hdCBkYXRhIGJ5IGNvbHVtbnM6CistLS0tLS0tLS0tLS0KKyQgc2VxIDEgMjQgfCBnaXQgY29sdW1uIC0tbW9kZT1jb2x1bW4gLS1wYWRkaW5nPTUKKzEgICAgICA0ICAgICAgNyAgICAgIDEwICAgICAxMyAgICAgMTYgICAgIDE5ICAgICAyMgorMiAgICAgIDUgICAgICA4ICAgICAgMTEgICAgIDE0ICAgICAxNyAgICAgMjAgICAgIDIzCiszICAgICAgNiAgICAgIDkgICAgICAxMiAgICAgMTUgICAgIDE4ICAgICAyMSAgICAgMjQKKy0tLS0tLS0tLS0tLQorCitGb3JtYXQgZGF0YSBieSByb3dzOgorLS0tLS0tLS0tLS0tCiskIHNlcSAxIDIxIHwgZ2l0IGNvbHVtbiAtLW1vZGU9cm93IC0tcGFkZGluZz01CisxICAgICAgMiAgICAgIDMgICAgICA0ICAgICAgNSAgICAgIDYgICAgICA3Cis4ICAgICAgOSAgICAgIDEwICAgICAxMSAgICAgMTIgICAgIDEzICAgICAxNAorMTUgICAgIDE2ICAgICAxNyAgICAgMTggICAgIDE5ICAgICAyMCAgICAgMjEKKy0tLS0tLS0tLS0tLQorCitMaXN0IHNvbWUgdGFncyBpbiBhIHRhYmxlIHdpdGggdW5lcXVhbCBjb2x1bW4gd2lkdGhzOgorLS0tLS0tLS0tLS0tCiskIGdpdCB0YWcgLS1saXN0ICd2Mi40LionIC0tY29sdW1uPXJvdyxkZW5zZQordjIuNC4wICB2Mi40LjAtcmMwICB2Mi40LjAtcmMxICB2Mi40LjAtcmMyICB2Mi40LjAtcmMzCit2Mi40LjEgIHYyLjQuMTAgICAgIHYyLjQuMTEgICAgIHYyLjQuMTIgICAgIHYyLjQuMgordjIuNC4zICB2Mi40LjQgICAgICB2Mi40LjUgICAgICB2Mi40LjYgICAgICB2Mi40LjcKK3YyLjQuOCAgdjIuNC45CistLS0tLS0tLS0tLS0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtZ3JhcGgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LWdyYXBoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2E2NTAyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LWdyYXBoLnR4dApAQCAtMCwwICsxLDEzMyBAQAorZ2l0LWNvbW1pdC1ncmFwaCgxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY29tbWl0LWdyYXBoIC0gV3JpdGUgYW5kIHZlcmlmeSBHaXQgY29tbWl0LWdyYXBoIGZpbGVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnknIFstLW9iamVjdC1kaXIgPGRpcj5dIFstLXNoYWxsb3ddIFstLVtuby1dcHJvZ3Jlc3NdCisnZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZScgPG9wdGlvbnM+IFstLW9iamVjdC1kaXIgPGRpcj5dIFstLVtuby1dcHJvZ3Jlc3NdCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK01hbmFnZSB0aGUgc2VyaWFsaXplZCBjb21taXQtZ3JhcGggZmlsZS4KKworCitPUFRJT05TCistLS0tLS0tCistLW9iamVjdC1kaXI6OgorCVVzZSBnaXZlbiBkaXJlY3RvcnkgZm9yIHRoZSBsb2NhdGlvbiBvZiBwYWNrZmlsZXMgYW5kIGNvbW1pdC1ncmFwaAorCWZpbGUuIFRoaXMgcGFyYW1ldGVyIGV4aXN0cyB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiBhbiBhbHRlcm5hdGUKKwl0aGF0IG9ubHkgaGFzIHRoZSBvYmplY3RzIGRpcmVjdG9yeSwgbm90IGEgZnVsbCBgLmdpdGAgZGlyZWN0b3J5LiBUaGUKKwljb21taXQtZ3JhcGggZmlsZSBpcyBleHBlY3RlZCB0byBiZSBpbiB0aGUgYDxkaXI+L2luZm9gIGRpcmVjdG9yeSBhbmQKKwl0aGUgcGFja2ZpbGVzIGFyZSBleHBlY3RlZCB0byBiZSBpbiBgPGRpcj4vcGFja2AuIElmIHRoZSBkaXJlY3RvcnkKKwljb3VsZCBub3QgYmUgbWFkZSBpbnRvIGFuIGFic29sdXRlIHBhdGgsIG9yIGRvZXMgbm90IG1hdGNoIGFueSBrbm93bgorCW9iamVjdCBkaXJlY3RvcnksIGBnaXQgY29tbWl0LWdyYXBoIC4uLmAgd2lsbCBleGl0IHdpdGggbm9uLXplcm8KKwlzdGF0dXMuCisKKy0tW25vLV1wcm9ncmVzczo6CisJVHVybiBwcm9ncmVzcyBvbi9vZmYgZXhwbGljaXRseS4gSWYgbmVpdGhlciBpcyBzcGVjaWZpZWQsIHByb2dyZXNzIGlzCisJc2hvd24gaWYgc3RhbmRhcmQgZXJyb3IgaXMgY29ubmVjdGVkIHRvIGEgdGVybWluYWwuCisKK0NPTU1BTkRTCistLS0tLS0tLQorJ3dyaXRlJzo6CisKK1dyaXRlIGEgY29tbWl0LWdyYXBoIGZpbGUgYmFzZWQgb24gdGhlIGNvbW1pdHMgZm91bmQgaW4gcGFja2ZpbGVzLgorKworV2l0aCB0aGUgYC0tc3RkaW4tcGFja3NgIG9wdGlvbiwgZ2VuZXJhdGUgdGhlIG5ldyBjb21taXQgZ3JhcGggYnkKK3dhbGtpbmcgb2JqZWN0cyBvbmx5IGluIHRoZSBzcGVjaWZpZWQgcGFjay1pbmRleGVzLiAoQ2Fubm90IGJlIGNvbWJpbmVkCit3aXRoIGAtLXN0ZGluLWNvbW1pdHNgIG9yIGAtLXJlYWNoYWJsZWAuKQorKworV2l0aCB0aGUgYC0tc3RkaW4tY29tbWl0c2Agb3B0aW9uLCBnZW5lcmF0ZSB0aGUgbmV3IGNvbW1pdCBncmFwaCBieQord2Fsa2luZyBjb21taXRzIHN0YXJ0aW5nIGF0IHRoZSBjb21taXRzIHNwZWNpZmllZCBpbiBzdGRpbiBhcyBhIGxpc3QKK29mIE9JRHMgaW4gaGV4LCBvbmUgT0lEIHBlciBsaW5lLiAoQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGgKK2AtLXN0ZGluLXBhY2tzYCBvciBgLS1yZWFjaGFibGVgLikKKysKK1dpdGggdGhlIGAtLXJlYWNoYWJsZWAgb3B0aW9uLCBnZW5lcmF0ZSB0aGUgbmV3IGNvbW1pdCBncmFwaCBieSB3YWxraW5nCitjb21taXRzIHN0YXJ0aW5nIGF0IGFsbCByZWZzLiAoQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tc3RkaW4tY29tbWl0c2AKK29yIGAtLXN0ZGluLXBhY2tzYC4pCisrCitXaXRoIHRoZSBgLS1hcHBlbmRgIG9wdGlvbiwgaW5jbHVkZSBhbGwgY29tbWl0cyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZQorZXhpc3RpbmcgY29tbWl0LWdyYXBoIGZpbGUuCisrCitXaXRoIHRoZSBgLS1jaGFuZ2VkLXBhdGhzYCBvcHRpb24sIGNvbXB1dGUgYW5kIHdyaXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorcGF0aHMgY2hhbmdlZCBiZXR3ZWVuIGEgY29tbWl0IGFuZCBpdCdzIGZpcnN0IHBhcmVudC4gVGhpcyBvcGVyYXRpb24gY2FuCit0YWtlIGEgd2hpbGUgb24gbGFyZ2UgcmVwb3NpdG9yaWVzLiBJdCBwcm92aWRlcyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBnYWlucworZm9yIGdldHRpbmcgaGlzdG9yeSBvZiBhIGRpcmVjdG9yeSBvciBhIGZpbGUgd2l0aCBgZ2l0IGxvZyAtLSA8cGF0aD5gLgorKworV2l0aCB0aGUgYC0tc3BsaXRbPTxzdHJhdGVneT5dYCBvcHRpb24sIHdyaXRlIHRoZSBjb21taXQtZ3JhcGggYXMgYQorY2hhaW4gb2YgbXVsdGlwbGUgY29tbWl0LWdyYXBoIGZpbGVzIHN0b3JlZCBpbgorYDxkaXI+L2luZm8vY29tbWl0LWdyYXBoc2AuIENvbW1pdC1ncmFwaCBsYXllcnMgYXJlIG1lcmdlZCBiYXNlZCBvbiB0aGUKK3N0cmF0ZWd5IGFuZCBvdGhlciBzcGxpdHRpbmcgb3B0aW9ucy4gVGhlIG5ldyBjb21taXRzIG5vdCBhbHJlYWR5IGluIHRoZQorY29tbWl0LWdyYXBoIGFyZSBhZGRlZCBpbiBhIG5ldyAidGlwIiBmaWxlLiBUaGlzIGZpbGUgaXMgbWVyZ2VkIHdpdGggdGhlCitleGlzdGluZyBmaWxlIGlmIHRoZSBmb2xsb3dpbmcgbWVyZ2UgY29uZGl0aW9ucyBhcmUgbWV0OgorKiBJZiBgLS1zcGxpdD1uby1tZXJnZWAgaXMgc3BlY2lmaWVkLCBhIG1lcmdlIGlzIG5ldmVyIHBlcmZvcm1lZCwgYW5kCit0aGUgcmVtYWluaW5nIG9wdGlvbnMgYXJlIGlnbm9yZWQuIGAtLXNwbGl0PXJlcGxhY2VgIG92ZXJ3cml0ZXMgdGhlCitleGlzdGluZyBjaGFpbiB3aXRoIGEgbmV3IG9uZS4gQSBiYXJlIGAtLXNwbGl0YCBkZWZlcnMgdG8gdGhlIHJlbWFpbmluZworb3B0aW9ucy4gKE5vdGUgdGhhdCBtZXJnaW5nIGEgY2hhaW4gb2YgY29tbWl0IGdyYXBocyByZXBsYWNlcyB0aGUKK2V4aXN0aW5nIGNoYWluIHdpdGggYSBsZW5ndGgtMSBjaGFpbiB3aGVyZSB0aGUgZmlyc3QgYW5kIG9ubHkKK2luY3JlbWVudGFsIGhvbGRzIHRoZSBlbnRpcmUgZ3JhcGgpLgorKworKiBJZiBgLS1zaXplLW11bHRpcGxlPTxYPmAgaXMgbm90IHNwZWNpZmllZCwgbGV0IGBYYCBlcXVhbCAyLiBJZiB0aGUgbmV3Cit0aXAgZmlsZSB3b3VsZCBoYXZlIGBOYCBjb21taXRzIGFuZCB0aGUgcHJldmlvdXMgdGlwIGhhcyBgTWAgY29tbWl0cyBhbmQKK2BYYCB0aW1lcyBgTmAgaXMgZ3JlYXRlciB0aGFuICBgTWAsIGluc3RlYWQgbWVyZ2UgdGhlIHR3byBmaWxlcyBpbnRvIGEKK3NpbmdsZSBmaWxlLgorKworKiBJZiBgLS1tYXgtY29tbWl0cz08TT5gIGlzIHNwZWNpZmllZCB3aXRoIGBNYCBhIHBvc2l0aXZlIGludGVnZXIsIGFuZCB0aGUKK25ldyB0aXAgZmlsZSB3b3VsZCBoYXZlIG1vcmUgdGhhbiBgTWAgY29tbWl0cywgdGhlbiBpbnN0ZWFkIG1lcmdlIHRoZSBuZXcKK3RpcCB3aXRoIHRoZSBwcmV2aW91cyB0aXAuCisrCitGaW5hbGx5LCBpZiBgLS1leHBpcmUtdGltZT08ZGF0ZXRpbWU+YCBpcyBub3Qgc3BlY2lmaWVkLCBsZXQgYGRhdGV0aW1lYAorYmUgdGhlIGN1cnJlbnQgdGltZS4gQWZ0ZXIgd3JpdGluZyB0aGUgc3BsaXQgY29tbWl0LWdyYXBoLCBkZWxldGUgYWxsCit1bnVzZWQgY29tbWl0LWdyYXBoIHdob3NlIG1vZGlmaWVkIHRpbWVzIGFyZSBvbGRlciB0aGFuIGBkYXRldGltZWAuCisKKyd2ZXJpZnknOjoKKworUmVhZCB0aGUgY29tbWl0LWdyYXBoIGZpbGUgYW5kIHZlcmlmeSBpdHMgY29udGVudHMgYWdhaW5zdCB0aGUgb2JqZWN0CitkYXRhYmFzZS4gVXNlZCB0byBjaGVjayBmb3IgY29ycnVwdGVkIGRhdGEuCisrCitXaXRoIHRoZSBgLS1zaGFsbG93YCBvcHRpb24sIG9ubHkgY2hlY2sgdGhlIHRpcCBjb21taXQtZ3JhcGggZmlsZSBpbgorYSBjaGFpbiBvZiBzcGxpdCBjb21taXQtZ3JhcGhzLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisqIFdyaXRlIGEgY29tbWl0LWdyYXBoIGZpbGUgZm9yIHRoZSBwYWNrZWQgY29tbWl0cyBpbiB5b3VyIGxvY2FsIGAuZ2l0YAorICBkaXJlY3RvcnkuCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogV3JpdGUgYSBjb21taXQtZ3JhcGggZmlsZSwgZXh0ZW5kaW5nIHRoZSBjdXJyZW50IGNvbW1pdC1ncmFwaCBmaWxlCisgIHVzaW5nIGNvbW1pdHMgaW4gYDxwYWNrLWluZGV4PmAuCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZWNobyA8cGFjay1pbmRleD4gfCBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tcGFja3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFdyaXRlIGEgY29tbWl0LWdyYXBoIGZpbGUgY29udGFpbmluZyBhbGwgcmVhY2hhYmxlIGNvbW1pdHMuCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctcmVmIC1zIHwgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXN0ZGluLWNvbW1pdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFdyaXRlIGEgY29tbWl0LWdyYXBoIGZpbGUgY29udGFpbmluZyBhbGwgY29tbWl0cyBpbiB0aGUgY3VycmVudAorICBjb21taXQtZ3JhcGggZmlsZSBhbG9uZyB3aXRoIHRob3NlIHJlYWNoYWJsZSBmcm9tIGBIRUFEYC4KKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmV2LXBhcnNlIEhFQUQgfCBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tY29tbWl0cyAtLWFwcGVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUyYzU4MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC10cmVlLnR4dApAQCAtMCwwICsxLDEwMSBAQAorZ2l0LWNvbW1pdC10cmVlKDEpCis9PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNvbW1pdC10cmVlIC0gQ3JlYXRlIGEgbmV3IGNvbW1pdCBvYmplY3QKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY29tbWl0LXRyZWUnIDx0cmVlPiBbKC1wIDxwYXJlbnQ+KS4uLl0KKydnaXQgY29tbWl0LXRyZWUnIFsoLXAgPHBhcmVudD4pLi4uXSBbLVNbPGtleWlkPl1dIFsoLW0gPG1lc3NhZ2U+KS4uLl0KKwkJICBbKC1GIDxmaWxlPikuLi5dIDx0cmVlPgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBpcyB1c3VhbGx5IG5vdCB3aGF0IGFuIGVuZCB1c2VyIHdhbnRzIHRvIHJ1biBkaXJlY3RseS4gIFNlZQorbGlua2dpdDpnaXQtY29tbWl0WzFdIGluc3RlYWQuCisKK0NyZWF0ZXMgYSBuZXcgY29tbWl0IG9iamVjdCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdHJlZSBvYmplY3QgYW5kCitlbWl0cyB0aGUgbmV3IGNvbW1pdCBvYmplY3QgaWQgb24gc3Rkb3V0LiBUaGUgbG9nIG1lc3NhZ2UgaXMgcmVhZAorZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsIHVubGVzcyBgLW1gIG9yIGAtRmAgb3B0aW9ucyBhcmUgZ2l2ZW4uCisKK1RoZSBgLW1gIGFuZCBgLUZgIG9wdGlvbnMgY2FuIGJlIGdpdmVuIGFueSBudW1iZXIgb2YgdGltZXMsIGluIGFueQorb3JkZXIuIFRoZSBjb21taXQgbG9nIG1lc3NhZ2Ugd2lsbCBiZSBjb21wb3NlZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2gKK3RoZSBvcHRpb25zIGFyZSBnaXZlbi4KKworQSBjb21taXQgb2JqZWN0IG1heSBoYXZlIGFueSBudW1iZXIgb2YgcGFyZW50cy4gV2l0aCBleGFjdGx5IG9uZQorcGFyZW50LCBpdCBpcyBhbiBvcmRpbmFyeSBjb21taXQuIEhhdmluZyBtb3JlIHRoYW4gb25lIHBhcmVudCBtYWtlcwordGhlIGNvbW1pdCBhIG1lcmdlIGJldHdlZW4gc2V2ZXJhbCBsaW5lcyBvZiBoaXN0b3J5LiBJbml0aWFsIChyb290KQorY29tbWl0cyBoYXZlIG5vIHBhcmVudHMuCisKK1doaWxlIGEgdHJlZSByZXByZXNlbnRzIGEgcGFydGljdWxhciBkaXJlY3Rvcnkgc3RhdGUgb2YgYSB3b3JraW5nCitkaXJlY3RvcnksIGEgY29tbWl0IHJlcHJlc2VudHMgdGhhdCBzdGF0ZSBpbiAidGltZSIsIGFuZCBleHBsYWlucyBob3cKK3RvIGdldCB0aGVyZS4KKworTm9ybWFsbHkgYSBjb21taXQgd291bGQgaWRlbnRpZnkgYSBuZXcgIkhFQUQiIHN0YXRlLCBhbmQgd2hpbGUgR2l0Citkb2Vzbid0IGNhcmUgd2hlcmUgeW91IHNhdmUgdGhlIG5vdGUgYWJvdXQgdGhhdCBzdGF0ZSwgaW4gcHJhY3RpY2Ugd2UKK3RlbmQgdG8ganVzdCB3cml0ZSB0aGUgcmVzdWx0IHRvIHRoZSBmaWxlIHRoYXQgaXMgcG9pbnRlZCBhdCBieQorYC5naXQvSEVBRGAsIHNvIHRoYXQgd2UgY2FuIGFsd2F5cyBzZWUgd2hhdCB0aGUgbGFzdCBjb21taXR0ZWQKK3N0YXRlIHdhcy4KKworT1BUSU9OUworLS0tLS0tLQorPHRyZWU+OjoKKwlBbiBleGlzdGluZyB0cmVlIG9iamVjdC4KKworLXAgPHBhcmVudD46OgorCUVhY2ggYC1wYCBpbmRpY2F0ZXMgdGhlIGlkIG9mIGEgcGFyZW50IGNvbW1pdCBvYmplY3QuCisKKy1tIDxtZXNzYWdlPjo6CisJQSBwYXJhZ3JhcGggaW4gdGhlIGNvbW1pdCBsb2cgbWVzc2FnZS4gVGhpcyBjYW4gYmUgZ2l2ZW4gbW9yZSB0aGFuCisJb25jZSBhbmQgZWFjaCA8bWVzc2FnZT4gYmVjb21lcyBpdHMgb3duIHBhcmFncmFwaC4KKworLUYgPGZpbGU+OjoKKwlSZWFkIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgZnJvbSB0aGUgZ2l2ZW4gZmlsZS4gVXNlIGAtYCB0byByZWFkCisJZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuIFRoaXMgY2FuIGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlIGFuZCB0aGUKKwljb250ZW50IG9mIGVhY2ggZmlsZSBiZWNvbWVzIGl0cyBvd24gcGFyYWdyYXBoLgorCistU1s8a2V5aWQ+XTo6CistLWdwZy1zaWduWz08a2V5aWQ+XTo6CistLW5vLWdwZy1zaWduOjoKKwlHUEctc2lnbiBjb21taXRzLiBUaGUgYGtleWlkYCBhcmd1bWVudCBpcyBvcHRpb25hbCBhbmQKKwlkZWZhdWx0cyB0byB0aGUgY29tbWl0dGVyIGlkZW50aXR5OyBpZiBzcGVjaWZpZWQsIGl0IG11c3QgYmUKKwlzdHVjayB0byB0aGUgb3B0aW9uIHdpdGhvdXQgYSBzcGFjZS4gYC0tbm8tZ3BnLXNpZ25gIGlzIHVzZWZ1bCB0bworCWNvdW50ZXJtYW5kIGEgYC0tZ3BnLXNpZ25gIG9wdGlvbiBnaXZlbiBlYXJsaWVyIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKK0NvbW1pdCBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgY29tbWl0IGVuY2Fwc3VsYXRlczoKKworLSBhbGwgcGFyZW50IG9iamVjdCBpZHMKKy0gYXV0aG9yIG5hbWUsIGVtYWlsIGFuZCBkYXRlCistIGNvbW1pdHRlciBuYW1lIGFuZCBlbWFpbCBhbmQgdGhlIGNvbW1pdCB0aW1lLgorCitBIGNvbW1pdCBjb21tZW50IGlzIHJlYWQgZnJvbSBzdGRpbi4gSWYgYSBjaGFuZ2Vsb2cKK2VudHJ5IGlzIG5vdCBwcm92aWRlZCB2aWEgIjwiIHJlZGlyZWN0aW9uLCAnZ2l0IGNvbW1pdC10cmVlJyB3aWxsIGp1c3Qgd2FpdAorZm9yIG9uZSB0byBiZSBlbnRlcmVkIGFuZCB0ZXJtaW5hdGVkIHdpdGggXkQuCisKK2luY2x1ZGU6OmRhdGUtZm9ybWF0cy50eHRbXQorCitEaXNjdXNzaW9uCistLS0tLS0tLS0tCisKK2luY2x1ZGU6OmkxOG4udHh0W10KKworRklMRVMKKy0tLS0tCisvZXRjL21haWxuYW1lCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtd3JpdGUtdHJlZVsxXQorbGlua2dpdDpnaXQtY29tbWl0WzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiYWVhMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQKQEAgLTAsMCArMSw1NDYgQEAKK2dpdC1jb21taXQoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNvbW1pdCAtIFJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjb21taXQnIFstYSB8IC0taW50ZXJhY3RpdmUgfCAtLXBhdGNoXSBbLXNdIFstdl0gWy11PG1vZGU+XSBbLS1hbWVuZF0KKwkgICBbLS1kcnktcnVuXSBbKC1jIHwgLUMgfCAtLWZpeHVwIHwgLS1zcXVhc2gpIDxjb21taXQ+XQorCSAgIFstRiA8ZmlsZT4gfCAtbSA8bXNnPl0gWy0tcmVzZXQtYXV0aG9yXSBbLS1hbGxvdy1lbXB0eV0KKwkgICBbLS1hbGxvdy1lbXB0eS1tZXNzYWdlXSBbLS1uby12ZXJpZnldIFstZV0gWy0tYXV0aG9yPTxhdXRob3I+XQorCSAgIFstLWRhdGU9PGRhdGU+XSBbLS1jbGVhbnVwPTxtb2RlPl0gWy0tW25vLV1zdGF0dXNdCisJICAgWy1pIHwgLW9dIFstLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdXQorCSAgIFstU1s8a2V5aWQ+XV0gWy0tXSBbPHBhdGhzcGVjPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDcmVhdGUgYSBuZXcgY29tbWl0IGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGluZGV4IGFuZAordGhlIGdpdmVuIGxvZyBtZXNzYWdlIGRlc2NyaWJpbmcgdGhlIGNoYW5nZXMuIFRoZSBuZXcgY29tbWl0IGlzIGEKK2RpcmVjdCBjaGlsZCBvZiBIRUFELCB1c3VhbGx5IHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoLCBhbmQgdGhlCiticmFuY2ggaXMgdXBkYXRlZCB0byBwb2ludCB0byBpdCAodW5sZXNzIG5vIGJyYW5jaCBpcyBhc3NvY2lhdGVkIHdpdGgKK3RoZSB3b3JraW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgSEVBRCBpcyAiZGV0YWNoZWQiIGFzIGRlc2NyaWJlZCBpbgorbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0pLgorCitUaGUgY29udGVudCB0byBiZSBjb21taXR0ZWQgY2FuIGJlIHNwZWNpZmllZCBpbiBzZXZlcmFsIHdheXM6CisKKzEuIGJ5IHVzaW5nIGxpbmtnaXQ6Z2l0LWFkZFsxXSB0byBpbmNyZW1lbnRhbGx5ICJhZGQiIGNoYW5nZXMgdG8gdGhlCisgICBpbmRleCBiZWZvcmUgdXNpbmcgdGhlICdjb21taXQnIGNvbW1hbmQgKE5vdGU6IGV2ZW4gbW9kaWZpZWQgZmlsZXMKKyAgIG11c3QgYmUgImFkZGVkIik7CisKKzIuIGJ5IHVzaW5nIGxpbmtnaXQ6Z2l0LXJtWzFdIHRvIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUKKyAgIGFuZCB0aGUgaW5kZXgsIGFnYWluIGJlZm9yZSB1c2luZyB0aGUgJ2NvbW1pdCcgY29tbWFuZDsKKworMy4gYnkgbGlzdGluZyBmaWxlcyBhcyBhcmd1bWVudHMgdG8gdGhlICdjb21taXQnIGNvbW1hbmQKKyAgICh3aXRob3V0IC0taW50ZXJhY3RpdmUgb3IgLS1wYXRjaCBzd2l0Y2gpLCBpbiB3aGljaAorICAgY2FzZSB0aGUgY29tbWl0IHdpbGwgaWdub3JlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleCwgYW5kIGluc3RlYWQKKyAgIHJlY29yZCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBsaXN0ZWQgZmlsZXMgKHdoaWNoIG11c3QgYWxyZWFkeQorICAgYmUga25vd24gdG8gR2l0KTsKKworNC4gYnkgdXNpbmcgdGhlIC1hIHN3aXRjaCB3aXRoIHRoZSAnY29tbWl0JyBjb21tYW5kIHRvIGF1dG9tYXRpY2FsbHkKKyAgICJhZGQiIGNoYW5nZXMgZnJvbSBhbGwga25vd24gZmlsZXMgKGkuZS4gYWxsIGZpbGVzIHRoYXQgYXJlIGFscmVhZHkKKyAgIGxpc3RlZCBpbiB0aGUgaW5kZXgpIGFuZCB0byBhdXRvbWF0aWNhbGx5ICJybSIgZmlsZXMgaW4gdGhlIGluZGV4CisgICB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHdvcmtpbmcgdHJlZSwgYW5kIHRoZW4gcGVyZm9ybSB0aGUKKyAgIGFjdHVhbCBjb21taXQ7CisKKzUuIGJ5IHVzaW5nIHRoZSAtLWludGVyYWN0aXZlIG9yIC0tcGF0Y2ggc3dpdGNoZXMgd2l0aCB0aGUgJ2NvbW1pdCcgY29tbWFuZAorICAgdG8gZGVjaWRlIG9uZSBieSBvbmUgd2hpY2ggZmlsZXMgb3IgaHVua3Mgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGNvbW1pdAorICAgaW4gYWRkaXRpb24gdG8gY29udGVudHMgaW4gdGhlIGluZGV4LAorICAgYmVmb3JlIGZpbmFsaXppbmcgdGhlIG9wZXJhdGlvbi4gU2VlIHRoZSBgYEludGVyYWN0aXZlIE1vZGUnJyBzZWN0aW9uIG9mCisgICBsaW5rZ2l0OmdpdC1hZGRbMV0gdG8gbGVhcm4gaG93IHRvIG9wZXJhdGUgdGhlc2UgbW9kZXMuCisKK1RoZSBgLS1kcnktcnVuYCBvcHRpb24gY2FuIGJlIHVzZWQgdG8gb2J0YWluIGEKK3N1bW1hcnkgb2Ygd2hhdCBpcyBpbmNsdWRlZCBieSBhbnkgb2YgdGhlIGFib3ZlIGZvciB0aGUgbmV4dAorY29tbWl0IGJ5IGdpdmluZyB0aGUgc2FtZSBzZXQgb2YgcGFyYW1ldGVycyAob3B0aW9ucyBhbmQgcGF0aHMpLgorCitJZiB5b3UgbWFrZSBhIGNvbW1pdCBhbmQgdGhlbiBmaW5kIGEgbWlzdGFrZSBpbW1lZGlhdGVseSBhZnRlcgordGhhdCwgeW91IGNhbiByZWNvdmVyIGZyb20gaXQgd2l0aCAnZ2l0IHJlc2V0Jy4KKworCitPUFRJT05TCistLS0tLS0tCistYTo6CistLWFsbDo6CisJVGVsbCB0aGUgY29tbWFuZCB0byBhdXRvbWF0aWNhbGx5IHN0YWdlIGZpbGVzIHRoYXQgaGF2ZQorCWJlZW4gbW9kaWZpZWQgYW5kIGRlbGV0ZWQsIGJ1dCBuZXcgZmlsZXMgeW91IGhhdmUgbm90CisJdG9sZCBHaXQgYWJvdXQgYXJlIG5vdCBhZmZlY3RlZC4KKworLXA6OgorLS1wYXRjaDo6CisJVXNlIHRoZSBpbnRlcmFjdGl2ZSBwYXRjaCBzZWxlY3Rpb24gaW50ZXJmYWNlIHRvIGNob3NlCisJd2hpY2ggY2hhbmdlcyB0byBjb21taXQuIFNlZSBsaW5rZ2l0OmdpdC1hZGRbMV0gZm9yCisJZGV0YWlscy4KKworLUMgPGNvbW1pdD46OgorLS1yZXVzZS1tZXNzYWdlPTxjb21taXQ+OjoKKwlUYWtlIGFuIGV4aXN0aW5nIGNvbW1pdCBvYmplY3QsIGFuZCByZXVzZSB0aGUgbG9nIG1lc3NhZ2UKKwlhbmQgdGhlIGF1dGhvcnNoaXAgaW5mb3JtYXRpb24gKGluY2x1ZGluZyB0aGUgdGltZXN0YW1wKQorCXdoZW4gY3JlYXRpbmcgdGhlIGNvbW1pdC4KKworLWMgPGNvbW1pdD46OgorLS1yZWVkaXQtbWVzc2FnZT08Y29tbWl0Pjo6CisJTGlrZSAnLUMnLCBidXQgd2l0aCBgLWNgIHRoZSBlZGl0b3IgaXMgaW52b2tlZCwgc28gdGhhdAorCXRoZSB1c2VyIGNhbiBmdXJ0aGVyIGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlLgorCistLWZpeHVwPTxjb21taXQ+OjoKKwlDb25zdHJ1Y3QgYSBjb21taXQgbWVzc2FnZSBmb3IgdXNlIHdpdGggYHJlYmFzZSAtLWF1dG9zcXVhc2hgLgorCVRoZSBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHRoZSBzdWJqZWN0IGxpbmUgZnJvbSB0aGUgc3BlY2lmaWVkCisJY29tbWl0IHdpdGggYSBwcmVmaXggb2YgImZpeHVwISAiLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXQorCWZvciBkZXRhaWxzLgorCistLXNxdWFzaD08Y29tbWl0Pjo6CisJQ29uc3RydWN0IGEgY29tbWl0IG1lc3NhZ2UgZm9yIHVzZSB3aXRoIGByZWJhc2UgLS1hdXRvc3F1YXNoYC4KKwlUaGUgY29tbWl0IG1lc3NhZ2Ugc3ViamVjdCBsaW5lIGlzIHRha2VuIGZyb20gdGhlIHNwZWNpZmllZAorCWNvbW1pdCB3aXRoIGEgcHJlZml4IG9mICJzcXVhc2ghICIuICBDYW4gYmUgdXNlZCB3aXRoIGFkZGl0aW9uYWwKKwljb21taXQgbWVzc2FnZSBvcHRpb25zIChgLW1gL2AtY2AvYC1DYC9gLUZgKS4gU2VlCisJbGlua2dpdDpnaXQtcmViYXNlWzFdIGZvciBkZXRhaWxzLgorCistLXJlc2V0LWF1dGhvcjo6CisJV2hlbiB1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCBvcHRpb25zLCBvciB3aGVuIGNvbW1pdHRpbmcgYWZ0ZXIgYQorCWNvbmZsaWN0aW5nIGNoZXJyeS1waWNrLCBkZWNsYXJlIHRoYXQgdGhlIGF1dGhvcnNoaXAgb2YgdGhlCisJcmVzdWx0aW5nIGNvbW1pdCBub3cgYmVsb25ncyB0byB0aGUgY29tbWl0dGVyLiBUaGlzIGFsc28gcmVuZXdzCisJdGhlIGF1dGhvciB0aW1lc3RhbXAuCisKKy0tc2hvcnQ6OgorCVdoZW4gZG9pbmcgYSBkcnktcnVuLCBnaXZlIHRoZSBvdXRwdXQgaW4gdGhlIHNob3J0LWZvcm1hdC4gU2VlCisJbGlua2dpdDpnaXQtc3RhdHVzWzFdIGZvciBkZXRhaWxzLiBJbXBsaWVzIGAtLWRyeS1ydW5gLgorCistLWJyYW5jaDo6CisJU2hvdyB0aGUgYnJhbmNoIGFuZCB0cmFja2luZyBpbmZvIGV2ZW4gaW4gc2hvcnQtZm9ybWF0LgorCistLXBvcmNlbGFpbjo6CisJV2hlbiBkb2luZyBhIGRyeS1ydW4sIGdpdmUgdGhlIG91dHB1dCBpbiBhIHBvcmNlbGFpbi1yZWFkeQorCWZvcm1hdC4gU2VlIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBmb3IgZGV0YWlscy4gSW1wbGllcworCWAtLWRyeS1ydW5gLgorCistLWxvbmc6OgorCVdoZW4gZG9pbmcgYSBkcnktcnVuLCBnaXZlIHRoZSBvdXRwdXQgaW4gdGhlIGxvbmctZm9ybWF0LgorCUltcGxpZXMgYC0tZHJ5LXJ1bmAuCisKKy16OjoKKy0tbnVsbDo6CisJV2hlbiBzaG93aW5nIGBzaG9ydGAgb3IgYHBvcmNlbGFpbmAgc3RhdHVzIG91dHB1dCwgcHJpbnQgdGhlCisJZmlsZW5hbWUgdmVyYmF0aW0gYW5kIHRlcm1pbmF0ZSB0aGUgZW50cmllcyB3aXRoIE5VTCwgaW5zdGVhZCBvZiBMRi4KKwlJZiBubyBmb3JtYXQgaXMgZ2l2ZW4sIGltcGxpZXMgdGhlIGAtLXBvcmNlbGFpbmAgb3V0cHV0IGZvcm1hdC4KKwlXaXRob3V0IHRoZSBgLXpgIG9wdGlvbiwgZmlsZW5hbWVzIHdpdGggInVudXN1YWwiIGNoYXJhY3RlcnMgYXJlCisJcXVvdGVkIGFzIGV4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYAorCShzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworLUYgPGZpbGU+OjoKKy0tZmlsZT08ZmlsZT46OgorCVRha2UgdGhlIGNvbW1pdCBtZXNzYWdlIGZyb20gdGhlIGdpdmVuIGZpbGUuICBVc2UgJy0nIHRvCisJcmVhZCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KKworLS1hdXRob3I9PGF1dGhvcj46OgorCU92ZXJyaWRlIHRoZSBjb21taXQgYXV0aG9yLiBTcGVjaWZ5IGFuIGV4cGxpY2l0IGF1dGhvciB1c2luZyB0aGUKKwlzdGFuZGFyZCBgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT5gIGZvcm1hdC4gT3RoZXJ3aXNlIDxhdXRob3I+CisJaXMgYXNzdW1lZCB0byBiZSBhIHBhdHRlcm4gYW5kIGlzIHVzZWQgdG8gc2VhcmNoIGZvciBhbiBleGlzdGluZworCWNvbW1pdCBieSB0aGF0IGF1dGhvciAoaS5lLiByZXYtbGlzdCAtLWFsbCAtaSAtLWF1dGhvcj08YXV0aG9yPik7CisJdGhlIGNvbW1pdCBhdXRob3IgaXMgdGhlbiBjb3BpZWQgZnJvbSB0aGUgZmlyc3Qgc3VjaCBjb21taXQgZm91bmQuCisKKy0tZGF0ZT08ZGF0ZT46OgorCU92ZXJyaWRlIHRoZSBhdXRob3IgZGF0ZSB1c2VkIGluIHRoZSBjb21taXQuCisKKy1tIDxtc2c+OjoKKy0tbWVzc2FnZT08bXNnPjo6CisJVXNlIHRoZSBnaXZlbiA8bXNnPiBhcyB0aGUgY29tbWl0IG1lc3NhZ2UuCisJSWYgbXVsdGlwbGUgYC1tYCBvcHRpb25zIGFyZSBnaXZlbiwgdGhlaXIgdmFsdWVzIGFyZQorCWNvbmNhdGVuYXRlZCBhcyBzZXBhcmF0ZSBwYXJhZ3JhcGhzLgorKworVGhlIGAtbWAgb3B0aW9uIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGAtY2AsIGAtQ2AsIGFuZCBgLUZgLgorCistdCA8ZmlsZT46OgorLS10ZW1wbGF0ZT08ZmlsZT46OgorCVdoZW4gZWRpdGluZyB0aGUgY29tbWl0IG1lc3NhZ2UsIHN0YXJ0IHRoZSBlZGl0b3Igd2l0aCB0aGUKKwljb250ZW50cyBpbiB0aGUgZ2l2ZW4gZmlsZS4gIFRoZSBgY29tbWl0LnRlbXBsYXRlYCBjb25maWd1cmF0aW9uCisJdmFyaWFibGUgaXMgb2Z0ZW4gdXNlZCB0byBnaXZlIHRoaXMgb3B0aW9uIGltcGxpY2l0bHkgdG8gdGhlCisJY29tbWFuZC4gIFRoaXMgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIGJ5IHByb2plY3RzIHRoYXQgd2FudCB0bworCWd1aWRlIHBhcnRpY2lwYW50cyB3aXRoIHNvbWUgaGludHMgb24gd2hhdCB0byB3cml0ZSBpbiB0aGUgbWVzc2FnZQorCWluIHdoYXQgb3JkZXIuICBJZiB0aGUgdXNlciBleGl0cyB0aGUgZWRpdG9yIHdpdGhvdXQgZWRpdGluZyB0aGUKKwltZXNzYWdlLCB0aGUgY29tbWl0IGlzIGFib3J0ZWQuICBUaGlzIGhhcyBubyBlZmZlY3Qgd2hlbiBhIG1lc3NhZ2UKKwlpcyBnaXZlbiBieSBvdGhlciBtZWFucywgZS5nLiB3aXRoIHRoZSBgLW1gIG9yIGAtRmAgb3B0aW9ucy4KKworLXM6OgorLS1zaWdub2ZmOjoKKwlBZGQgU2lnbmVkLW9mZi1ieSBsaW5lIGJ5IHRoZSBjb21taXR0ZXIgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWl0CisJbG9nIG1lc3NhZ2UuICBUaGUgbWVhbmluZyBvZiBhIHNpZ25vZmYgZGVwZW5kcyBvbiB0aGUgcHJvamVjdCwKKwlidXQgaXQgdHlwaWNhbGx5IGNlcnRpZmllcyB0aGF0IGNvbW1pdHRlciBoYXMKKwl0aGUgcmlnaHRzIHRvIHN1Ym1pdCB0aGlzIHdvcmsgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhbmQKKwlhZ3JlZXMgdG8gYSBEZXZlbG9wZXIgQ2VydGlmaWNhdGUgb2YgT3JpZ2luCisJKHNlZSBodHRwOi8vZGV2ZWxvcGVyY2VydGlmaWNhdGUub3JnLyBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisKKy1uOjoKKy0tbm8tdmVyaWZ5OjoKKwlUaGlzIG9wdGlvbiBieXBhc3NlcyB0aGUgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcy4KKwlTZWUgYWxzbyBsaW5rZ2l0OmdpdGhvb2tzWzVdLgorCistLWFsbG93LWVtcHR5OjoKKwlVc3VhbGx5IHJlY29yZGluZyBhIGNvbW1pdCB0aGF0IGhhcyB0aGUgZXhhY3Qgc2FtZSB0cmVlIGFzIGl0cworCXNvbGUgcGFyZW50IGNvbW1pdCBpcyBhIG1pc3Rha2UsIGFuZCB0aGUgY29tbWFuZCBwcmV2ZW50cyB5b3UKKwlmcm9tIG1ha2luZyBzdWNoIGEgY29tbWl0LiAgVGhpcyBvcHRpb24gYnlwYXNzZXMgdGhlIHNhZmV0eSwgYW5kCisJaXMgcHJpbWFyaWx5IGZvciB1c2UgYnkgZm9yZWlnbiBTQ00gaW50ZXJmYWNlIHNjcmlwdHMuCisKKy0tYWxsb3ctZW1wdHktbWVzc2FnZTo6CisgICAgICAgTGlrZSAtLWFsbG93LWVtcHR5IHRoaXMgY29tbWFuZCBpcyBwcmltYXJpbHkgZm9yIHVzZSBieSBmb3JlaWduCisgICAgICAgU0NNIGludGVyZmFjZSBzY3JpcHRzLiBJdCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIGNvbW1pdCB3aXRoIGFuCisgICAgICAgZW1wdHkgY29tbWl0IG1lc3NhZ2Ugd2l0aG91dCB1c2luZyBwbHVtYmluZyBjb21tYW5kcyBsaWtlCisgICAgICAgbGlua2dpdDpnaXQtY29tbWl0LXRyZWVbMV0uCisKKy0tY2xlYW51cD08bW9kZT46OgorCVRoaXMgb3B0aW9uIGRldGVybWluZXMgaG93IHRoZSBzdXBwbGllZCBjb21taXQgbWVzc2FnZSBzaG91bGQgYmUKKwljbGVhbmVkIHVwIGJlZm9yZSBjb21taXR0aW5nLiAgVGhlICc8bW9kZT4nIGNhbiBiZSBgc3RyaXBgLAorCWB3aGl0ZXNwYWNlYCwgYHZlcmJhdGltYCwgYHNjaXNzb3JzYCBvciBgZGVmYXVsdGAuCisrCistLQorc3RyaXA6OgorCVN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGVtcHR5IGxpbmVzLCB0cmFpbGluZyB3aGl0ZXNwYWNlLAorCWNvbW1lbnRhcnkgYW5kIGNvbGxhcHNlIGNvbnNlY3V0aXZlIGVtcHR5IGxpbmVzLgord2hpdGVzcGFjZTo6CisJU2FtZSBhcyBgc3RyaXBgIGV4Y2VwdCAjY29tbWVudGFyeSBpcyBub3QgcmVtb3ZlZC4KK3ZlcmJhdGltOjoKKwlEbyBub3QgY2hhbmdlIHRoZSBtZXNzYWdlIGF0IGFsbC4KK3NjaXNzb3JzOjoKKwlTYW1lIGFzIGB3aGl0ZXNwYWNlYCBleGNlcHQgdGhhdCBldmVyeXRoaW5nIGZyb20gKGFuZCBpbmNsdWRpbmcpCisJdGhlIGxpbmUgZm91bmQgYmVsb3cgaXMgdHJ1bmNhdGVkLCBpZiB0aGUgbWVzc2FnZSBpcyB0byBiZSBlZGl0ZWQuCisJImAjYCIgY2FuIGJlIGN1c3RvbWl6ZWQgd2l0aCBjb3JlLmNvbW1lbnRDaGFyLgorCisJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWZhdWx0OjoKKwlTYW1lIGFzIGBzdHJpcGAgaWYgdGhlIG1lc3NhZ2UgaXMgdG8gYmUgZWRpdGVkLgorCU90aGVyd2lzZSBgd2hpdGVzcGFjZWAuCistLQorKworVGhlIGRlZmF1bHQgY2FuIGJlIGNoYW5nZWQgYnkgdGhlIGBjb21taXQuY2xlYW51cGAgY29uZmlndXJhdGlvbgordmFyaWFibGUgKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCistZTo6CistLWVkaXQ6OgorCVRoZSBtZXNzYWdlIHRha2VuIGZyb20gZmlsZSB3aXRoIGAtRmAsIGNvbW1hbmQgbGluZSB3aXRoCisJYC1tYCwgYW5kIGZyb20gY29tbWl0IG9iamVjdCB3aXRoIGAtQ2AgYXJlIHVzdWFsbHkgdXNlZCBhcworCXRoZSBjb21taXQgbG9nIG1lc3NhZ2UgdW5tb2RpZmllZC4gVGhpcyBvcHRpb24gbGV0cyB5b3UKKwlmdXJ0aGVyIGVkaXQgdGhlIG1lc3NhZ2UgdGFrZW4gZnJvbSB0aGVzZSBzb3VyY2VzLgorCistLW5vLWVkaXQ6OgorCVVzZSB0aGUgc2VsZWN0ZWQgY29tbWl0IG1lc3NhZ2Ugd2l0aG91dCBsYXVuY2hpbmcgYW4gZWRpdG9yLgorCUZvciBleGFtcGxlLCBgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tbm8tZWRpdGAgYW1lbmRzIGEgY29tbWl0CisJd2l0aG91dCBjaGFuZ2luZyBpdHMgY29tbWl0IG1lc3NhZ2UuCisKKy0tYW1lbmQ6OgorCVJlcGxhY2UgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2ggYnkgY3JlYXRpbmcgYSBuZXcKKwljb21taXQuIFRoZSByZWNvcmRlZCB0cmVlIGlzIHByZXBhcmVkIGFzIHVzdWFsIChpbmNsdWRpbmcKKwl0aGUgZWZmZWN0IG9mIHRoZSBgLWlgIGFuZCBgLW9gIG9wdGlvbnMgYW5kIGV4cGxpY2l0CisJcGF0aHNwZWMpLCBhbmQgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgb3JpZ2luYWwgY29tbWl0IGlzIHVzZWQKKwlhcyB0aGUgc3RhcnRpbmcgcG9pbnQsIGluc3RlYWQgb2YgYW4gZW1wdHkgbWVzc2FnZSwgd2hlbiBubworCW90aGVyIG1lc3NhZ2UgaXMgc3BlY2lmaWVkIGZyb20gdGhlIGNvbW1hbmQgbGluZSB2aWEgb3B0aW9ucworCXN1Y2ggYXMgYC1tYCwgYC1GYCwgYC1jYCwgZXRjLiAgVGhlIG5ldyBjb21taXQgaGFzIHRoZSBzYW1lCisJcGFyZW50cyBhbmQgYXV0aG9yIGFzIHRoZSBjdXJyZW50IG9uZSAodGhlIGAtLXJlc2V0LWF1dGhvcmAKKwlvcHRpb24gY2FuIGNvdW50ZXJtYW5kIHRoaXMpLgorKworLS0KK0l0IGlzIGEgcm91Z2ggZXF1aXZhbGVudCBmb3I6CistLS0tLS0KKwkkIGdpdCByZXNldCAtLXNvZnQgSEVBRF4KKwkkIC4uLiBkbyBzb21ldGhpbmcgZWxzZSB0byBjb21lIHVwIHdpdGggdGhlIHJpZ2h0IHRyZWUgLi4uCisJJCBnaXQgY29tbWl0IC1jIE9SSUdfSEVBRAorCistLS0tLS0KK2J1dCBjYW4gYmUgdXNlZCB0byBhbWVuZCBhIG1lcmdlIGNvbW1pdC4KKy0tCisrCitZb3Ugc2hvdWxkIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiByZXdyaXRpbmcgaGlzdG9yeSBpZiB5b3UKK2FtZW5kIGEgY29tbWl0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBwdWJsaXNoZWQuICAoU2VlIHRoZSAiUkVDT1ZFUklORworRlJPTSBVUFNUUkVBTSBSRUJBU0UiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXQtcmViYXNlWzFdLikKKworLS1uby1wb3N0LXJld3JpdGU6OgorCUJ5cGFzcyB0aGUgcG9zdC1yZXdyaXRlIGhvb2suCisKKy1pOjoKKy0taW5jbHVkZTo6CisJQmVmb3JlIG1ha2luZyBhIGNvbW1pdCBvdXQgb2Ygc3RhZ2VkIGNvbnRlbnRzIHNvIGZhciwKKwlzdGFnZSB0aGUgY29udGVudHMgb2YgcGF0aHMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZQorCWFzIHdlbGwuICBUaGlzIGlzIHVzdWFsbHkgbm90IHdoYXQgeW91IHdhbnQgdW5sZXNzIHlvdQorCWFyZSBjb25jbHVkaW5nIGEgY29uZmxpY3RlZCBtZXJnZS4KKworLW86OgorLS1vbmx5OjoKKwlNYWtlIGEgY29tbWl0IGJ5IHRha2luZyB0aGUgdXBkYXRlZCB3b3JraW5nIHRyZWUgY29udGVudHMKKwlvZiB0aGUgcGF0aHMgc3BlY2lmaWVkIG9uIHRoZQorCWNvbW1hbmQgbGluZSwgZGlzcmVnYXJkaW5nIGFueSBjb250ZW50cyB0aGF0IGhhdmUgYmVlbgorCXN0YWdlZCBmb3Igb3RoZXIgcGF0aHMuIFRoaXMgaXMgdGhlIGRlZmF1bHQgbW9kZSBvZiBvcGVyYXRpb24gb2YKKwknZ2l0IGNvbW1pdCcgaWYgYW55IHBhdGhzIGFyZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLAorCWluIHdoaWNoIGNhc2UgdGhpcyBvcHRpb24gY2FuIGJlIG9taXR0ZWQuCisJSWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggYC0tYW1lbmRgLCB0aGVuCisJbm8gcGF0aHMgbmVlZCB0byBiZSBzcGVjaWZpZWQsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFtZW5kCisJdGhlIGxhc3QgY29tbWl0IHdpdGhvdXQgY29tbWl0dGluZyBjaGFuZ2VzIHRoYXQgaGF2ZQorCWFscmVhZHkgYmVlbiBzdGFnZWQuIElmIHVzZWQgdG9nZXRoZXIgd2l0aCBgLS1hbGxvdy1lbXB0eWAKKwlwYXRocyBhcmUgYWxzbyBub3QgcmVxdWlyZWQsIGFuZCBhbiBlbXB0eSBjb21taXQgd2lsbCBiZSBjcmVhdGVkLgorCistLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT46OgorCVBhdGhzcGVjIGlzIHBhc3NlZCBpbiBgPGZpbGU+YCBpbnN0ZWFkIG9mIGNvbW1hbmRsaW5lIGFyZ3MuIElmCisJYDxmaWxlPmAgaXMgZXhhY3RseSBgLWAgdGhlbiBzdGFuZGFyZCBpbnB1dCBpcyB1c2VkLiBQYXRoc3BlYworCWVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgTEYgb3IgQ1IvTEYuIFBhdGhzcGVjIGVsZW1lbnRzIGNhbiBiZQorCXF1b3RlZCBhcyBleHBsYWluZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBjb3JlLnF1b3RlUGF0aGAKKwkoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuIFNlZSBhbHNvIGAtLXBhdGhzcGVjLWZpbGUtbnVsYCBhbmQKKwlnbG9iYWwgYC0tbGl0ZXJhbC1wYXRoc3BlY3NgLgorCistLXBhdGhzcGVjLWZpbGUtbnVsOjoKKwlPbmx5IG1lYW5pbmdmdWwgd2l0aCBgLS1wYXRoc3BlYy1mcm9tLWZpbGVgLiBQYXRoc3BlYyBlbGVtZW50cyBhcmUKKwlzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIGFuZCBhbGwgb3RoZXIgY2hhcmFjdGVycyBhcmUgdGFrZW4KKwlsaXRlcmFsbHkgKGluY2x1ZGluZyBuZXdsaW5lcyBhbmQgcXVvdGVzKS4KKworLXVbPG1vZGU+XTo6CistLXVudHJhY2tlZC1maWxlc1s9PG1vZGU+XTo6CisJU2hvdyB1bnRyYWNrZWQgZmlsZXMuCisrCistLQorVGhlIG1vZGUgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIChkZWZhdWx0cyB0byAnYWxsJyksIGFuZCBpcyB1c2VkIHRvCitzcGVjaWZ5IHRoZSBoYW5kbGluZyBvZiB1bnRyYWNrZWQgZmlsZXM7IHdoZW4gLXUgaXMgbm90IHVzZWQsIHRoZQorZGVmYXVsdCBpcyAnbm9ybWFsJywgaS5lLiBzaG93IHVudHJhY2tlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisKK1RoZSBwb3NzaWJsZSBvcHRpb25zIGFyZToKKworCS0gJ25vJyAgICAgLSBTaG93IG5vIHVudHJhY2tlZCBmaWxlcworCS0gJ25vcm1hbCcgLSBTaG93cyB1bnRyYWNrZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzCisJLSAnYWxsJyAgICAtIEFsc28gc2hvd3MgaW5kaXZpZHVhbCBmaWxlcyBpbiB1bnRyYWNrZWQgZGlyZWN0b3JpZXMuCisKK1RoZSBkZWZhdWx0IGNhbiBiZSBjaGFuZ2VkIHVzaW5nIHRoZSBzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGRvY3VtZW50ZWQgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgorLS0KKworLXY6OgorLS12ZXJib3NlOjoKKwlTaG93IHVuaWZpZWQgZGlmZiBiZXR3ZWVuIHRoZSBIRUFEIGNvbW1pdCBhbmQgd2hhdAorCXdvdWxkIGJlIGNvbW1pdHRlZCBhdCB0aGUgYm90dG9tIG9mIHRoZSBjb21taXQgbWVzc2FnZQorCXRlbXBsYXRlIHRvIGhlbHAgdGhlIHVzZXIgZGVzY3JpYmUgdGhlIGNvbW1pdCBieSByZW1pbmRpbmcKKwl3aGF0IGNoYW5nZXMgdGhlIGNvbW1pdCBoYXMuCisJTm90ZSB0aGF0IHRoaXMgZGlmZiBvdXRwdXQgZG9lc24ndCBoYXZlIGl0cworCWxpbmVzIHByZWZpeGVkIHdpdGggJyMnLiBUaGlzIGRpZmYgd2lsbCBub3QgYmUgYSBwYXJ0CisJb2YgdGhlIGNvbW1pdCBtZXNzYWdlLiBTZWUgdGhlIGBjb21taXQudmVyYm9zZWAgY29uZmlndXJhdGlvbgorCXZhcmlhYmxlIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKysKK0lmIHNwZWNpZmllZCB0d2ljZSwgc2hvdyBpbiBhZGRpdGlvbiB0aGUgdW5pZmllZCBkaWZmIGJldHdlZW4KK3doYXQgd291bGQgYmUgY29tbWl0dGVkIGFuZCB0aGUgd29ya3RyZWUgZmlsZXMsIGkuZS4gdGhlIHVuc3RhZ2VkCitjaGFuZ2VzIHRvIHRyYWNrZWQgZmlsZXMuCisKKy1xOjoKKy0tcXVpZXQ6OgorCVN1cHByZXNzIGNvbW1pdCBzdW1tYXJ5IG1lc3NhZ2UuCisKKy0tZHJ5LXJ1bjo6CisJRG8gbm90IGNyZWF0ZSBhIGNvbW1pdCwgYnV0IHNob3cgYSBsaXN0IG9mIHBhdGhzIHRoYXQgYXJlCisJdG8gYmUgY29tbWl0dGVkLCBwYXRocyB3aXRoIGxvY2FsIGNoYW5nZXMgdGhhdCB3aWxsIGJlIGxlZnQKKwl1bmNvbW1pdHRlZCBhbmQgcGF0aHMgdGhhdCBhcmUgdW50cmFja2VkLgorCistLXN0YXR1czo6CisJSW5jbHVkZSB0aGUgb3V0cHV0IG9mIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBpbiB0aGUgY29tbWl0CisJbWVzc2FnZSB0ZW1wbGF0ZSB3aGVuIHVzaW5nIGFuIGVkaXRvciB0byBwcmVwYXJlIHRoZSBjb21taXQKKwltZXNzYWdlLiAgRGVmYXVsdHMgdG8gb24sIGJ1dCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZQorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29tbWl0LnN0YXR1cy4KKworLS1uby1zdGF0dXM6OgorCURvIG5vdCBpbmNsdWRlIHRoZSBvdXRwdXQgb2YgbGlua2dpdDpnaXQtc3RhdHVzWzFdIGluIHRoZQorCWNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIHdoZW4gdXNpbmcgYW4gZWRpdG9yIHRvIHByZXBhcmUgdGhlCisJZGVmYXVsdCBjb21taXQgbWVzc2FnZS4KKworLVNbPGtleWlkPl06OgorLS1ncGctc2lnbls9PGtleWlkPl06OgorLS1uby1ncGctc2lnbjo6CisJR1BHLXNpZ24gY29tbWl0cy4gVGhlIGBrZXlpZGAgYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kCisJZGVmYXVsdHMgdG8gdGhlIGNvbW1pdHRlciBpZGVudGl0eTsgaWYgc3BlY2lmaWVkLCBpdCBtdXN0IGJlCisJc3R1Y2sgdG8gdGhlIG9wdGlvbiB3aXRob3V0IGEgc3BhY2UuIGAtLW5vLWdwZy1zaWduYCBpcyB1c2VmdWwgdG8KKwljb3VudGVybWFuZCBib3RoIGBjb21taXQuZ3BnU2lnbmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYW5kCisJZWFybGllciBgLS1ncGctc2lnbmAuCisKK1wtLTo6CisJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KKworPHBhdGhzcGVjPi4uLjo6CisJV2hlbiBwYXRoc3BlYyBpcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCBjb21taXQgdGhlIGNvbnRlbnRzIG9mCisJdGhlIGZpbGVzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzcGVjIHdpdGhvdXQgcmVjb3JkaW5nIHRoZSBjaGFuZ2VzCisJYWxyZWFkeSBhZGRlZCB0byB0aGUgaW5kZXguIFRoZSBjb250ZW50cyBvZiB0aGVzZSBmaWxlcyBhcmUgYWxzbworCXN0YWdlZCBmb3IgdGhlIG5leHQgY29tbWl0IG9uIHRvcCBvZiB3aGF0IGhhdmUgYmVlbiBzdGFnZWQgYmVmb3JlLgorKworRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSAncGF0aHNwZWMnIGVudHJ5IGluIGxpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10uCisKK0VYQU1QTEVTCistLS0tLS0tLQorV2hlbiByZWNvcmRpbmcgeW91ciBvd24gd29yaywgdGhlIGNvbnRlbnRzIG9mIG1vZGlmaWVkIGZpbGVzIGluCit5b3VyIHdvcmtpbmcgdHJlZSBhcmUgdGVtcG9yYXJpbHkgc3RvcmVkIHRvIGEgc3RhZ2luZyBhcmVhCitjYWxsZWQgdGhlICJpbmRleCIgd2l0aCAnZ2l0IGFkZCcuICBBIGZpbGUgY2FuIGJlCityZXZlcnRlZCBiYWNrLCBvbmx5IGluIHRoZSBpbmRleCBidXQgbm90IGluIHRoZSB3b3JraW5nIHRyZWUsCit0byB0aGF0IG9mIHRoZSBsYXN0IGNvbW1pdCB3aXRoIGBnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT5gLAord2hpY2ggZWZmZWN0aXZlbHkgcmV2ZXJ0cyAnZ2l0IGFkZCcgYW5kIHByZXZlbnRzIHRoZSBjaGFuZ2VzIHRvCit0aGlzIGZpbGUgZnJvbSBwYXJ0aWNpcGF0aW5nIGluIHRoZSBuZXh0IGNvbW1pdC4gIEFmdGVyIGJ1aWxkaW5nCit0aGUgc3RhdGUgdG8gYmUgY29tbWl0dGVkIGluY3JlbWVudGFsbHkgd2l0aCB0aGVzZSBjb21tYW5kcywKK2BnaXQgY29tbWl0YCAod2l0aG91dCBhbnkgcGF0aG5hbWUgcGFyYW1ldGVyKSBpcyB1c2VkIHRvIHJlY29yZCB3aGF0CitoYXMgYmVlbiBzdGFnZWQgc28gZmFyLiAgVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBmb3JtIG9mIHRoZQorY29tbWFuZC4gIEFuIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLQorJCBlZGl0IGhlbGxvLmMKKyQgZ2l0IHJtIGdvb2RieWUuYworJCBnaXQgYWRkIGhlbGxvLmMKKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tCisKK0luc3RlYWQgb2Ygc3RhZ2luZyBmaWxlcyBhZnRlciBlYWNoIGluZGl2aWR1YWwgY2hhbmdlLCB5b3UgY2FuCit0ZWxsIGBnaXQgY29tbWl0YCB0byBub3RpY2UgdGhlIGNoYW5nZXMgdG8gdGhlIGZpbGVzIHdob3NlCitjb250ZW50cyBhcmUgdHJhY2tlZCBpbgoreW91ciB3b3JraW5nIHRyZWUgYW5kIGRvIGNvcnJlc3BvbmRpbmcgYGdpdCBhZGRgIGFuZCBgZ2l0IHJtYAorZm9yIHlvdS4gIFRoYXQgaXMsIHRoaXMgZXhhbXBsZSBkb2VzIHRoZSBzYW1lIGFzIHRoZSBlYXJsaWVyCitleGFtcGxlIGlmIHRoZXJlIGlzIG5vIG90aGVyIGNoYW5nZSBpbiB5b3VyIHdvcmtpbmcgdHJlZToKKworLS0tLS0tLS0tLS0tCiskIGVkaXQgaGVsbG8uYworJCBybSBnb29kYnllLmMKKyQgZ2l0IGNvbW1pdCAtYQorLS0tLS0tLS0tLS0tCisKK1RoZSBjb21tYW5kIGBnaXQgY29tbWl0IC1hYCBmaXJzdCBsb29rcyBhdCB5b3VyIHdvcmtpbmcgdHJlZSwKK25vdGljZXMgdGhhdCB5b3UgaGF2ZSBtb2RpZmllZCBoZWxsby5jIGFuZCByZW1vdmVkIGdvb2RieWUuYywKK2FuZCBwZXJmb3JtcyBuZWNlc3NhcnkgYGdpdCBhZGRgIGFuZCBgZ2l0IHJtYCBmb3IgeW91LgorCitBZnRlciBzdGFnaW5nIGNoYW5nZXMgdG8gbWFueSBmaWxlcywgeW91IGNhbiBhbHRlciB0aGUgb3JkZXIgdGhlCitjaGFuZ2VzIGFyZSByZWNvcmRlZCBpbiwgYnkgZ2l2aW5nIHBhdGhuYW1lcyB0byBgZ2l0IGNvbW1pdGAuCitXaGVuIHBhdGhuYW1lcyBhcmUgZ2l2ZW4sIHRoZSBjb21tYW5kIG1ha2VzIGEgY29tbWl0IHRoYXQKK29ubHkgcmVjb3JkcyB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBuYW1lZCBwYXRoczoKKworLS0tLS0tLS0tLS0tCiskIGVkaXQgaGVsbG8uYyBoZWxsby5oCiskIGdpdCBhZGQgaGVsbG8uYyBoZWxsby5oCiskIGVkaXQgTWFrZWZpbGUKKyQgZ2l0IGNvbW1pdCBNYWtlZmlsZQorLS0tLS0tLS0tLS0tCisKK1RoaXMgbWFrZXMgYSBjb21taXQgdGhhdCByZWNvcmRzIHRoZSBtb2RpZmljYXRpb24gdG8gYE1ha2VmaWxlYC4KK1RoZSBjaGFuZ2VzIHN0YWdlZCBmb3IgYGhlbGxvLmNgIGFuZCBgaGVsbG8uaGAgYXJlIG5vdCBpbmNsdWRlZAoraW4gdGhlIHJlc3VsdGluZyBjb21taXQuICBIb3dldmVyLCB0aGVpciBjaGFuZ2VzIGFyZSBub3QgbG9zdCAtLQordGhleSBhcmUgc3RpbGwgc3RhZ2VkIGFuZCBtZXJlbHkgaGVsZCBiYWNrLiAgQWZ0ZXIgdGhlIGFib3ZlCitzZXF1ZW5jZSwgaWYgeW91IGRvOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tCisKK3RoaXMgc2Vjb25kIGNvbW1pdCB3b3VsZCByZWNvcmQgdGhlIGNoYW5nZXMgdG8gYGhlbGxvLmNgIGFuZAorYGhlbGxvLmhgIGFzIGV4cGVjdGVkLgorCitBZnRlciBhIG1lcmdlIChpbml0aWF0ZWQgYnkgJ2dpdCBtZXJnZScgb3IgJ2dpdCBwdWxsJykgc3RvcHMKK2JlY2F1c2Ugb2YgY29uZmxpY3RzLCBjbGVhbmx5IG1lcmdlZAorcGF0aHMgYXJlIGFscmVhZHkgc3RhZ2VkIHRvIGJlIGNvbW1pdHRlZCBmb3IgeW91LCBhbmQgcGF0aHMgdGhhdAorY29uZmxpY3RlZCBhcmUgbGVmdCBpbiB1bm1lcmdlZCBzdGF0ZS4gIFlvdSB3b3VsZCBoYXZlIHRvIGZpcnN0CitjaGVjayB3aGljaCBwYXRocyBhcmUgY29uZmxpY3Rpbmcgd2l0aCAnZ2l0IHN0YXR1cycKK2FuZCBhZnRlciBmaXhpbmcgdGhlbSBtYW51YWxseSBpbiB5b3VyIHdvcmtpbmcgdHJlZSwgeW91IHdvdWxkCitzdGFnZSB0aGUgcmVzdWx0IGFzIHVzdWFsIHdpdGggJ2dpdCBhZGQnOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN0YXR1cyB8IGdyZXAgdW5tZXJnZWQKK3VubWVyZ2VkOiBoZWxsby5jCiskIGVkaXQgaGVsbG8uYworJCBnaXQgYWRkIGhlbGxvLmMKKy0tLS0tLS0tLS0tLQorCitBZnRlciByZXNvbHZpbmcgY29uZmxpY3RzIGFuZCBzdGFnaW5nIHRoZSByZXN1bHQsIGBnaXQgbHMtZmlsZXMgLXVgCit3b3VsZCBzdG9wIG1lbnRpb25pbmcgdGhlIGNvbmZsaWN0ZWQgcGF0aC4gIFdoZW4geW91IGFyZSBkb25lLAorcnVuIGBnaXQgY29tbWl0YCB0byBmaW5hbGx5IHJlY29yZCB0aGUgbWVyZ2U6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0CistLS0tLS0tLS0tLS0KKworQXMgd2l0aCB0aGUgY2FzZSB0byByZWNvcmQgeW91ciBvd24gY2hhbmdlcywgeW91IGNhbiB1c2UgYC1hYAorb3B0aW9uIHRvIHNhdmUgdHlwaW5nLiAgT25lIGRpZmZlcmVuY2UgaXMgdGhhdCBkdXJpbmcgYSBtZXJnZQorcmVzb2x1dGlvbiwgeW91IGNhbm5vdCB1c2UgYGdpdCBjb21taXRgIHdpdGggcGF0aG5hbWVzIHRvCithbHRlciB0aGUgb3JkZXIgdGhlIGNoYW5nZXMgYXJlIGNvbW1pdHRlZCwgYmVjYXVzZSB0aGUgbWVyZ2UKK3Nob3VsZCBiZSByZWNvcmRlZCBhcyBhIHNpbmdsZSBjb21taXQuICBJbiBmYWN0LCB0aGUgY29tbWFuZAorcmVmdXNlcyB0byBydW4gd2hlbiBnaXZlbiBwYXRobmFtZXMgKGJ1dCBzZWUgYC1pYCBvcHRpb24pLgorCitDT01NSVQgSU5GT1JNQVRJT04KKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBdXRob3IgYW5kIGNvbW1pdHRlciBpbmZvcm1hdGlvbiBpcyB0YWtlbiBmcm9tIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQKK3ZhcmlhYmxlcywgaWYgc2V0OgorCisJR0lUX0FVVEhPUl9OQU1FCisJR0lUX0FVVEhPUl9FTUFJTAorCUdJVF9BVVRIT1JfREFURQorCUdJVF9DT01NSVRURVJfTkFNRQorCUdJVF9DT01NSVRURVJfRU1BSUwKKwlHSVRfQ09NTUlUVEVSX0RBVEUKKworKG5iICI8IiwgIj4iIGFuZCAiXG4icyBhcmUgc3RyaXBwZWQpCisKK1RoZSBhdXRob3IgYW5kIGNvbW1pdHRlciBuYW1lcyBhcmUgYnkgY29udmVudGlvbiBzb21lIGZvcm0gb2YgYSBwZXJzb25hbCBuYW1lCisodGhhdCBpcywgdGhlIG5hbWUgYnkgd2hpY2ggb3RoZXIgaHVtYW5zIHJlZmVyIHRvIHlvdSksIGFsdGhvdWdoIEdpdCBkb2VzIG5vdAorZW5mb3JjZSBvciByZXF1aXJlIGFueSBwYXJ0aWN1bGFyIGZvcm0uIEFyYml0cmFyeSBVbmljb2RlIG1heSBiZSB1c2VkLCBzdWJqZWN0Cit0byB0aGUgY29uc3RyYWludHMgbGlzdGVkIGFib3ZlLiBUaGlzIG5hbWUgaGFzIG5vIGVmZmVjdCBvbiBhdXRoZW50aWNhdGlvbjsgZm9yCit0aGF0LCBzZWUgdGhlIGBjcmVkZW50aWFsLnVzZXJuYW1lYCB2YXJpYWJsZSBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKK0luIGNhc2UgKHNvbWUgb2YpIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IHNldCwgdGhlIGluZm9ybWF0aW9uCitpcyB0YWtlbiBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIGB1c2VyLm5hbWVgIGFuZCBgdXNlci5lbWFpbGAsIG9yLCBpZiBub3QKK3ByZXNlbnQsIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBFTUFJTCwgb3IsIGlmIHRoYXQgaXMgbm90IHNldCwKK3N5c3RlbSB1c2VyIG5hbWUgYW5kIHRoZSBob3N0bmFtZSB1c2VkIGZvciBvdXRnb2luZyBtYWlsICh0YWtlbgorZnJvbSBgL2V0Yy9tYWlsbmFtZWAgYW5kIGZhbGxpbmcgYmFjayB0byB0aGUgZnVsbHkgcXVhbGlmaWVkIGhvc3RuYW1lIHdoZW4KK3RoYXQgZmlsZSBkb2VzIG5vdCBleGlzdCkuCisKK1RoZSBgYXV0aG9yLm5hbWVgIGFuZCBgY29tbWl0dGVyLm5hbWVgIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGVtYWlsIG9wdGlvbnMKK292ZXJyaWRlIGB1c2VyLm5hbWVgIGFuZCBgdXNlci5lbWFpbGAgaWYgc2V0IGFuZCBhcmUgb3ZlcnJpZGRlbiB0aGVtc2VsdmVzIGJ5Cit0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCitUaGUgdHlwaWNhbCB1c2FnZSBpcyB0byBzZXQganVzdCB0aGUgYHVzZXIubmFtZWAgYW5kIGB1c2VyLmVtYWlsYCB2YXJpYWJsZXM7Cit0aGUgb3RoZXIgb3B0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIG1vcmUgY29tcGxleCB1c2UgY2FzZXMuCisKKzpnaXQtY29tbWl0OiAxCitpbmNsdWRlOjpkYXRlLWZvcm1hdHMudHh0W10KKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorCitUaG91Z2ggbm90IHJlcXVpcmVkLCBpdCdzIGEgZ29vZCBpZGVhIHRvIGJlZ2luIHRoZSBjb21taXQgbWVzc2FnZQord2l0aCBhIHNpbmdsZSBzaG9ydCAobGVzcyB0aGFuIDUwIGNoYXJhY3RlcikgbGluZSBzdW1tYXJpemluZyB0aGUKK2NoYW5nZSwgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lIGFuZCB0aGVuIGEgbW9yZSB0aG9yb3VnaCBkZXNjcmlwdGlvbi4KK1RoZSB0ZXh0IHVwIHRvIHRoZSBmaXJzdCBibGFuayBsaW5lIGluIGEgY29tbWl0IG1lc3NhZ2UgaXMgdHJlYXRlZAorYXMgdGhlIGNvbW1pdCB0aXRsZSwgYW5kIHRoYXQgdGl0bGUgaXMgdXNlZCB0aHJvdWdob3V0IEdpdC4KK0ZvciBleGFtcGxlLCBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gdHVybnMgYSBjb21taXQgaW50byBlbWFpbCwgYW5kIGl0IHVzZXMKK3RoZSB0aXRsZSBvbiB0aGUgU3ViamVjdCBsaW5lIGFuZCB0aGUgcmVzdCBvZiB0aGUgY29tbWl0IGluIHRoZSBib2R5LgorCitpbmNsdWRlOjppMThuLnR4dFtdCisKK0VOVklST05NRU5UIEFORCBDT05GSUdVUkFUSU9OIFZBUklBQkxFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgZWRpdG9yIHVzZWQgdG8gZWRpdCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIHdpbGwgYmUgY2hvc2VuIGZyb20gdGhlCitgR0lUX0VESVRPUmAgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBjb3JlLmVkaXRvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB0aGUKK2BWSVNVQUxgIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciB0aGUgYEVESVRPUmAgZW52aXJvbm1lbnQgdmFyaWFibGUgKGluIHRoYXQKK29yZGVyKS4gIFNlZSBsaW5rZ2l0OmdpdC12YXJbMV0gZm9yIGRldGFpbHMuCisKK0hPT0tTCistLS0tLQorVGhpcyBjb21tYW5kIGNhbiBydW4gYGNvbW1pdC1tc2dgLCBgcHJlcGFyZS1jb21taXQtbXNnYCwgYHByZS1jb21taXRgLAorYHBvc3QtY29tbWl0YCBhbmQgYHBvc3QtcmV3cml0ZWAgaG9va3MuICBTZWUgbGlua2dpdDpnaXRob29rc1s1XSBmb3IgbW9yZQoraW5mb3JtYXRpb24uCisKK0ZJTEVTCistLS0tLQorCitgJEdJVF9ESVIvQ09NTUlUX0VESVRNU0dgOjoKKwlUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvbW1pdCBtZXNzYWdlIG9mIGEgY29tbWl0IGluIHByb2dyZXNzLgorCUlmIGBnaXQgY29tbWl0YCBleGl0cyBkdWUgdG8gYW4gZXJyb3IgYmVmb3JlIGNyZWF0aW5nIGEgY29tbWl0LAorCWFueSBjb21taXQgbWVzc2FnZSB0aGF0IGhhcyBiZWVuIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIChlLmcuLCBpbgorCWFuIGVkaXRvciBzZXNzaW9uKSB3aWxsIGJlIGF2YWlsYWJsZSBpbiB0aGlzIGZpbGUsIGJ1dCB3aWxsIGJlCisJb3ZlcndyaXR0ZW4gYnkgdGhlIG5leHQgaW52b2NhdGlvbiBvZiBgZ2l0IGNvbW1pdGAuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtYWRkWzFdLAorbGlua2dpdDpnaXQtcm1bMV0sCitsaW5rZ2l0OmdpdC1tdlsxXSwKK2xpbmtnaXQ6Z2l0LW1lcmdlWzFdLAorbGlua2dpdDpnaXQtY29tbWl0LXRyZWVbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTczMTYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dApAQCAtMCwwICsxLDUwMCBAQAorZ2l0LWNvbmZpZygxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY29uZmlnIC0gR2V0IGFuZCBzZXQgcmVwb3NpdG9yeSBvciBnbG9iYWwgb3B0aW9ucworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbLS10eXBlPTx0eXBlPl0gWy0tc2hvdy1vcmlnaW5dIFstLXNob3ctc2NvcGVdIFstenwtLW51bGxdIG5hbWUgW3ZhbHVlIFt2YWx1ZV9yZWdleF1dCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIFstLXR5cGU9PHR5cGU+XSAtLWFkZCBuYW1lIHZhbHVlCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIFstLXR5cGU9PHR5cGU+XSAtLXJlcGxhY2UtYWxsIG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbLS10eXBlPTx0eXBlPl0gWy0tc2hvdy1vcmlnaW5dIFstLXNob3ctc2NvcGVdIFstenwtLW51bGxdIC0tZ2V0IG5hbWUgW3ZhbHVlX3JlZ2V4XQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbLS10eXBlPTx0eXBlPl0gWy0tc2hvdy1vcmlnaW5dIFstLXNob3ctc2NvcGVdIFstenwtLW51bGxdIC0tZ2V0LWFsbCBuYW1lIFt2YWx1ZV9yZWdleF0KKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gWy0tdHlwZT08dHlwZT5dIFstLXNob3ctb3JpZ2luXSBbLS1zaG93LXNjb3BlXSBbLXp8LS1udWxsXSBbLS1uYW1lLW9ubHldIC0tZ2V0LXJlZ2V4cCBuYW1lX3JlZ2V4IFt2YWx1ZV9yZWdleF0KKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gWy0tdHlwZT08dHlwZT5dIFstenwtLW51bGxdIC0tZ2V0LXVybG1hdGNoIG5hbWUgVVJMCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIC0tdW5zZXQgbmFtZSBbdmFsdWVfcmVnZXhdCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIC0tdW5zZXQtYWxsIG5hbWUgW3ZhbHVlX3JlZ2V4XQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSAtLXJlbmFtZS1zZWN0aW9uIG9sZF9uYW1lIG5ld19uYW1lCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIC0tcmVtb3ZlLXNlY3Rpb24gbmFtZQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbLS1zaG93LW9yaWdpbl0gWy0tc2hvdy1zY29wZV0gWy16fC0tbnVsbF0gWy0tbmFtZS1vbmx5XSAtbCB8IC0tbGlzdAorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSAtLWdldC1jb2xvciBuYW1lIFtkZWZhdWx0XQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSAtLWdldC1jb2xvcmJvb2wgbmFtZSBbc3Rkb3V0LWlzLXR0eV0KKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gLWUgfCAtLWVkaXQKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitZb3UgY2FuIHF1ZXJ5L3NldC9yZXBsYWNlL3Vuc2V0IG9wdGlvbnMgd2l0aCB0aGlzIGNvbW1hbmQuIFRoZSBuYW1lIGlzCithY3R1YWxseSB0aGUgc2VjdGlvbiBhbmQgdGhlIGtleSBzZXBhcmF0ZWQgYnkgYSBkb3QsIGFuZCB0aGUgdmFsdWUgd2lsbCBiZQorZXNjYXBlZC4KKworTXVsdGlwbGUgbGluZXMgY2FuIGJlIGFkZGVkIHRvIGFuIG9wdGlvbiBieSB1c2luZyB0aGUgYC0tYWRkYCBvcHRpb24uCitJZiB5b3Ugd2FudCB0byB1cGRhdGUgb3IgdW5zZXQgYW4gb3B0aW9uIHdoaWNoIGNhbiBvY2N1ciBvbiBtdWx0aXBsZQorbGluZXMsIGEgUE9TSVggcmVnZXhwIGB2YWx1ZV9yZWdleGAgbmVlZHMgdG8gYmUgZ2l2ZW4uICBPbmx5IHRoZQorZXhpc3RpbmcgdmFsdWVzIHRoYXQgbWF0Y2ggdGhlIHJlZ2V4cCBhcmUgdXBkYXRlZCBvciB1bnNldC4gIElmCit5b3Ugd2FudCB0byBoYW5kbGUgdGhlIGxpbmVzIHRoYXQgZG8gKm5vdCogbWF0Y2ggdGhlIHJlZ2V4LCBqdXN0CitwcmVwZW5kIGEgc2luZ2xlIGV4Y2xhbWF0aW9uIG1hcmsgaW4gZnJvbnQgKHNlZSBhbHNvIDw8RVhBTVBMRVM+PikuCisKK1RoZSBgLS10eXBlPTx0eXBlPmAgb3B0aW9uIGluc3RydWN0cyAnZ2l0IGNvbmZpZycgdG8gZW5zdXJlIHRoYXQgaW5jb21pbmcgYW5kCitvdXRnb2luZyB2YWx1ZXMgYXJlIGNhbm9uaWNhbGl6ZS1hYmxlIHVuZGVyIHRoZSBnaXZlbiA8dHlwZT4uICBJZiBubworYC0tdHlwZT08dHlwZT5gIGlzIGdpdmVuLCBubyBjYW5vbmljYWxpemF0aW9uIHdpbGwgYmUgcGVyZm9ybWVkLiBDYWxsZXJzIG1heQordW5zZXQgYW4gZXhpc3RpbmcgYC0tdHlwZWAgc3BlY2lmaWVyIHdpdGggYC0tbm8tdHlwZWAuCisKK1doZW4gcmVhZGluZywgdGhlIHZhbHVlcyBhcmUgcmVhZCBmcm9tIHRoZSBzeXN0ZW0sIGdsb2JhbCBhbmQKK3JlcG9zaXRvcnkgbG9jYWwgY29uZmlndXJhdGlvbiBmaWxlcyBieSBkZWZhdWx0LCBhbmQgb3B0aW9ucworYC0tc3lzdGVtYCwgYC0tZ2xvYmFsYCwgYC0tbG9jYWxgLCBgLS13b3JrdHJlZWAgYW5kCitgLS1maWxlIDxmaWxlbmFtZT5gIGNhbiBiZSB1c2VkIHRvIHRlbGwgdGhlIGNvbW1hbmQgdG8gcmVhZCBmcm9tIG9ubHkKK3RoYXQgbG9jYXRpb24gKHNlZSA8PEZJTEVTPj4pLgorCitXaGVuIHdyaXRpbmcsIHRoZSBuZXcgdmFsdWUgaXMgd3JpdHRlbiB0byB0aGUgcmVwb3NpdG9yeSBsb2NhbAorY29uZmlndXJhdGlvbiBmaWxlIGJ5IGRlZmF1bHQsIGFuZCBvcHRpb25zIGAtLXN5c3RlbWAsIGAtLWdsb2JhbGAsCitgLS13b3JrdHJlZWAsIGAtLWZpbGUgPGZpbGVuYW1lPmAgY2FuIGJlIHVzZWQgdG8gdGVsbCB0aGUgY29tbWFuZCB0bword3JpdGUgdG8gdGhhdCBsb2NhdGlvbiAoeW91IGNhbiBzYXkgYC0tbG9jYWxgIGJ1dCB0aGF0IGlzIHRoZQorZGVmYXVsdCkuCisKK1RoaXMgY29tbWFuZCB3aWxsIGZhaWwgd2l0aCBub24temVybyBzdGF0dXMgdXBvbiBlcnJvci4gIFNvbWUgZXhpdAorY29kZXMgYXJlOgorCistIFRoZSBzZWN0aW9uIG9yIGtleSBpcyBpbnZhbGlkIChyZXQ9MSksCistIG5vIHNlY3Rpb24gb3IgbmFtZSB3YXMgcHJvdmlkZWQgKHJldD0yKSwKKy0gdGhlIGNvbmZpZyBmaWxlIGlzIGludmFsaWQgKHJldD0zKSwKKy0gdGhlIGNvbmZpZyBmaWxlIGNhbm5vdCBiZSB3cml0dGVuIChyZXQ9NCksCistIHlvdSB0cnkgdG8gdW5zZXQgYW4gb3B0aW9uIHdoaWNoIGRvZXMgbm90IGV4aXN0IChyZXQ9NSksCistIHlvdSB0cnkgdG8gdW5zZXQvc2V0IGFuIG9wdGlvbiBmb3Igd2hpY2ggbXVsdGlwbGUgbGluZXMgbWF0Y2ggKHJldD01KSwgb3IKKy0geW91IHRyeSB0byB1c2UgYW4gaW52YWxpZCByZWdleHAgKHJldD02KS4KKworT24gc3VjY2VzcywgdGhlIGNvbW1hbmQgcmV0dXJucyB0aGUgZXhpdCBjb2RlIDAuCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1yZXBsYWNlLWFsbDo6CisJRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZXBsYWNlIGF0IG1vc3Qgb25lIGxpbmUuIFRoaXMgcmVwbGFjZXMKKwlhbGwgbGluZXMgbWF0Y2hpbmcgdGhlIGtleSAoYW5kIG9wdGlvbmFsbHkgdGhlIHZhbHVlX3JlZ2V4KS4KKworLS1hZGQ6OgorCUFkZHMgYSBuZXcgbGluZSB0byB0aGUgb3B0aW9uIHdpdGhvdXQgYWx0ZXJpbmcgYW55IGV4aXN0aW5nCisJdmFsdWVzLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyBwcm92aWRpbmcgJ14kJyBhcyB0aGUgdmFsdWVfcmVnZXgKKwlpbiBgLS1yZXBsYWNlLWFsbGAuCisKKy0tZ2V0OjoKKwlHZXQgdGhlIHZhbHVlIGZvciBhIGdpdmVuIGtleSAob3B0aW9uYWxseSBmaWx0ZXJlZCBieSBhIHJlZ2V4CisJbWF0Y2hpbmcgdGhlIHZhbHVlKS4gUmV0dXJucyBlcnJvciBjb2RlIDEgaWYgdGhlIGtleSB3YXMgbm90CisJZm91bmQgYW5kIHRoZSBsYXN0IHZhbHVlIGlmIG11bHRpcGxlIGtleSB2YWx1ZXMgd2VyZSBmb3VuZC4KKworLS1nZXQtYWxsOjoKKwlMaWtlIGdldCwgYnV0IHJldHVybnMgYWxsIHZhbHVlcyBmb3IgYSBtdWx0aS12YWx1ZWQga2V5LgorCistLWdldC1yZWdleHA6OgorCUxpa2UgLS1nZXQtYWxsLCBidXQgaW50ZXJwcmV0cyB0aGUgbmFtZSBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQKKwl3cml0ZXMgb3V0IHRoZSBrZXkgbmFtZXMuICBSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgaXMgY3VycmVudGx5CisJY2FzZS1zZW5zaXRpdmUgYW5kIGRvbmUgYWdhaW5zdCBhIGNhbm9uaWNhbGl6ZWQgdmVyc2lvbiBvZiB0aGUga2V5CisJaW4gd2hpY2ggc2VjdGlvbiBhbmQgdmFyaWFibGUgbmFtZXMgYXJlIGxvd2VyY2FzZWQsIGJ1dCBzdWJzZWN0aW9uCisJbmFtZXMgYXJlIG5vdC4KKworLS1nZXQtdXJsbWF0Y2ggbmFtZSBVUkw6OgorCVdoZW4gZ2l2ZW4gYSB0d28tcGFydCBuYW1lIHNlY3Rpb24ua2V5LCB0aGUgdmFsdWUgZm9yCisJc2VjdGlvbi48dXJsPi5rZXkgd2hvc2UgPHVybD4gcGFydCBtYXRjaGVzIHRoZSBiZXN0IHRvIHRoZQorCWdpdmVuIFVSTCBpcyByZXR1cm5lZCAoaWYgbm8gc3VjaCBrZXkgZXhpc3RzLCB0aGUgdmFsdWUgZm9yCisJc2VjdGlvbi5rZXkgaXMgdXNlZCBhcyBhIGZhbGxiYWNrKS4gIFdoZW4gZ2l2ZW4ganVzdCB0aGUKKwlzZWN0aW9uIGFzIG5hbWUsIGRvIHNvIGZvciBhbGwgdGhlIGtleXMgaW4gdGhlIHNlY3Rpb24gYW5kCisJbGlzdCB0aGVtLiAgUmV0dXJucyBlcnJvciBjb2RlIDEgaWYgbm8gdmFsdWUgaXMgZm91bmQuCisKKy0tZ2xvYmFsOjoKKwlGb3Igd3JpdGluZyBvcHRpb25zOiB3cml0ZSB0byBnbG9iYWwgYH4vLmdpdGNvbmZpZ2AgZmlsZQorCXJhdGhlciB0aGFuIHRoZSByZXBvc2l0b3J5IGAuZ2l0L2NvbmZpZ2AsIHdyaXRlIHRvCisJYCRYREdfQ09ORklHX0hPTUUvZ2l0L2NvbmZpZ2AgZmlsZSBpZiB0aGlzIGZpbGUgZXhpc3RzIGFuZCB0aGUKKwlgfi8uZ2l0Y29uZmlnYCBmaWxlIGRvZXNuJ3QuCisrCitGb3IgcmVhZGluZyBvcHRpb25zOiByZWFkIG9ubHkgZnJvbSBnbG9iYWwgYH4vLmdpdGNvbmZpZ2AgYW5kIGZyb20KK2AkWERHX0NPTkZJR19IT01FL2dpdC9jb25maWdgIHJhdGhlciB0aGFuIGZyb20gYWxsIGF2YWlsYWJsZSBmaWxlcy4KKysKK1NlZSBhbHNvIDw8RklMRVM+Pi4KKworLS1zeXN0ZW06OgorCUZvciB3cml0aW5nIG9wdGlvbnM6IHdyaXRlIHRvIHN5c3RlbS13aWRlCisJYCQocHJlZml4KS9ldGMvZ2l0Y29uZmlnYCByYXRoZXIgdGhhbiB0aGUgcmVwb3NpdG9yeQorCWAuZ2l0L2NvbmZpZ2AuCisrCitGb3IgcmVhZGluZyBvcHRpb25zOiByZWFkIG9ubHkgZnJvbSBzeXN0ZW0td2lkZSBgJChwcmVmaXgpL2V0Yy9naXRjb25maWdgCityYXRoZXIgdGhhbiBmcm9tIGFsbCBhdmFpbGFibGUgZmlsZXMuCisrCitTZWUgYWxzbyA8PEZJTEVTPj4uCisKKy0tbG9jYWw6OgorCUZvciB3cml0aW5nIG9wdGlvbnM6IHdyaXRlIHRvIHRoZSByZXBvc2l0b3J5IGAuZ2l0L2NvbmZpZ2AgZmlsZS4KKwlUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLgorKworRm9yIHJlYWRpbmcgb3B0aW9uczogcmVhZCBvbmx5IGZyb20gdGhlIHJlcG9zaXRvcnkgYC5naXQvY29uZmlnYCByYXRoZXIgdGhhbgorZnJvbSBhbGwgYXZhaWxhYmxlIGZpbGVzLgorKworU2VlIGFsc28gPDxGSUxFUz4+LgorCistLXdvcmt0cmVlOjoKKwlTaW1pbGFyIHRvIGAtLWxvY2FsYCBleGNlcHQgdGhhdCBgLmdpdC9jb25maWcud29ya3RyZWVgIGlzCisJcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gaWYgYGV4dGVuc2lvbnMud29ya3RyZWVDb25maWdgIGlzCisJcHJlc2VudC4gSWYgbm90IGl0J3MgdGhlIHNhbWUgYXMgYC0tbG9jYWxgLgorCistZiBjb25maWctZmlsZTo6CistLWZpbGUgY29uZmlnLWZpbGU6OgorCVVzZSB0aGUgZ2l2ZW4gY29uZmlnIGZpbGUgaW5zdGVhZCBvZiB0aGUgb25lIHNwZWNpZmllZCBieSBHSVRfQ09ORklHLgorCistLWJsb2IgYmxvYjo6CisJU2ltaWxhciB0byBgLS1maWxlYCBidXQgdXNlIHRoZSBnaXZlbiBibG9iIGluc3RlYWQgb2YgYSBmaWxlLiBFLmcuCisJeW91IGNhbiB1c2UgJ21hc3RlcjouZ2l0bW9kdWxlcycgdG8gcmVhZCB2YWx1ZXMgZnJvbSB0aGUgZmlsZQorCScuZ2l0bW9kdWxlcycgaW4gdGhlIG1hc3RlciBicmFuY2guIFNlZSAiU1BFQ0lGWUlORyBSRVZJU0lPTlMiCisJc2VjdGlvbiBpbiBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XSBmb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2YKKwl3YXlzIHRvIHNwZWxsIGJsb2IgbmFtZXMuCisKKy0tcmVtb3ZlLXNlY3Rpb246OgorCVJlbW92ZSB0aGUgZ2l2ZW4gc2VjdGlvbiBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisKKy0tcmVuYW1lLXNlY3Rpb246OgorCVJlbmFtZSB0aGUgZ2l2ZW4gc2VjdGlvbiB0byBhIG5ldyBuYW1lLgorCistLXVuc2V0OjoKKwlSZW1vdmUgdGhlIGxpbmUgbWF0Y2hpbmcgdGhlIGtleSBmcm9tIGNvbmZpZyBmaWxlLgorCistLXVuc2V0LWFsbDo6CisJUmVtb3ZlIGFsbCBsaW5lcyBtYXRjaGluZyB0aGUga2V5IGZyb20gY29uZmlnIGZpbGUuCisKKy1sOjoKKy0tbGlzdDo6CisJTGlzdCBhbGwgdmFyaWFibGVzIHNldCBpbiBjb25maWcgZmlsZSwgYWxvbmcgd2l0aCB0aGVpciB2YWx1ZXMuCisKKy0tdHlwZSA8dHlwZT46OgorICAnZ2l0IGNvbmZpZycgd2lsbCBlbnN1cmUgdGhhdCBhbnkgaW5wdXQgb3Igb3V0cHV0IGlzIHZhbGlkIHVuZGVyIHRoZSBnaXZlbgorICB0eXBlIGNvbnN0cmFpbnQocyksIGFuZCB3aWxsIGNhbm9uaWNhbGl6ZSBvdXRnb2luZyB2YWx1ZXMgaW4gYDx0eXBlPmAncworICBjYW5vbmljYWwgZm9ybS4KKysKK1ZhbGlkIGA8dHlwZT5gJ3MgaW5jbHVkZToKKysKKy0gJ2Jvb2wnOiBjYW5vbmljYWxpemUgdmFsdWVzIGFzIGVpdGhlciAidHJ1ZSIgb3IgImZhbHNlIi4KKy0gJ2ludCc6IGNhbm9uaWNhbGl6ZSB2YWx1ZXMgYXMgc2ltcGxlIGRlY2ltYWwgbnVtYmVycy4gQW4gb3B0aW9uYWwgc3VmZml4IG9mCisgICdrJywgJ20nLCBvciAnZycgd2lsbCBjYXVzZSB0aGUgdmFsdWUgdG8gYmUgbXVsdGlwbGllZCBieSAxMDI0LCAxMDQ4NTc2LCBvcgorICAxMDczNzQxODI0IHVwb24gaW5wdXQuCistICdib29sLW9yLWludCc6IGNhbm9uaWNhbGl6ZSBhY2NvcmRpbmcgdG8gZWl0aGVyICdib29sJyBvciAnaW50JywgYXMgZGVzY3JpYmVkCisgIGFib3ZlLgorLSAncGF0aCc6IGNhbm9uaWNhbGl6ZSBieSBhZGRpbmcgYSBsZWFkaW5nIGB+YCB0byB0aGUgdmFsdWUgb2YgYCRIT01FYCBhbmQKKyAgYH51c2VyYCB0byB0aGUgaG9tZSBkaXJlY3RvcnkgZm9yIHRoZSBzcGVjaWZpZWQgdXNlci4gVGhpcyBzcGVjaWZpZXIgaGFzIG5vCisgIGVmZmVjdCB3aGVuIHNldHRpbmcgdGhlIHZhbHVlIChidXQgeW91IGNhbiB1c2UgYGdpdCBjb25maWcgc2VjdGlvbi52YXJpYWJsZQorICB+L2AgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHRvIGxldCB5b3VyIHNoZWxsIGRvIHRoZSBleHBhbnNpb24uKQorLSAnZXhwaXJ5LWRhdGUnOiBjYW5vbmljYWxpemUgYnkgY29udmVydGluZyBmcm9tIGEgZml4ZWQgb3IgcmVsYXRpdmUgZGF0ZS1zdHJpbmcKKyAgdG8gYSB0aW1lc3RhbXAuIFRoaXMgc3BlY2lmaWVyIGhhcyBubyBlZmZlY3Qgd2hlbiBzZXR0aW5nIHRoZSB2YWx1ZS4KKy0gJ2NvbG9yJzogV2hlbiBnZXR0aW5nIGEgdmFsdWUsIGNhbm9uaWNhbGl6ZSBieSBjb252ZXJ0aW5nIHRvIGFuIEFOU0kgY29sb3IKKyAgZXNjYXBlIHNlcXVlbmNlLiBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgYSBzYW5pdHktY2hlY2sgaXMgcGVyZm9ybWVkIHRvIGVuc3VyZQorICB0aGF0IHRoZSBnaXZlbiB2YWx1ZSBpcyBjYW5vbmljYWxpemUtYWJsZSBhcyBhbiBBTlNJIGNvbG9yLCBidXQgaXQgaXMgd3JpdHRlbgorICBhcy1pcy4KKysKKworLS1ib29sOjoKKy0taW50OjoKKy0tYm9vbC1vci1pbnQ6OgorLS1wYXRoOjoKKy0tZXhwaXJ5LWRhdGU6OgorICBIaXN0b3JpY2FsIG9wdGlvbnMgZm9yIHNlbGVjdGluZyBhIHR5cGUgc3BlY2lmaWVyLiBQcmVmZXIgaW5zdGVhZCBgLS10eXBlYAorICAoc2VlIGFib3ZlKS4KKworLS1uby10eXBlOjoKKyAgVW4tc2V0cyB0aGUgcHJldmlvdXNseSBzZXQgdHlwZSBzcGVjaWZpZXIgKGlmIG9uZSB3YXMgcHJldmlvdXNseSBzZXQpLiBUaGlzCisgIG9wdGlvbiByZXF1ZXN0cyB0aGF0ICdnaXQgY29uZmlnJyBub3QgY2Fub25pY2FsaXplIHRoZSByZXRyaWV2ZWQgdmFyaWFibGUuCisgIGAtLW5vLXR5cGVgIGhhcyBubyBlZmZlY3Qgd2l0aG91dCBgLS10eXBlPTx0eXBlPmAgb3IgYC0tPHR5cGU+YC4KKworLXo6OgorLS1udWxsOjoKKwlGb3IgYWxsIG9wdGlvbnMgdGhhdCBvdXRwdXQgdmFsdWVzIGFuZC9vciBrZXlzLCBhbHdheXMKKwllbmQgdmFsdWVzIHdpdGggdGhlIG51bGwgY2hhcmFjdGVyIChpbnN0ZWFkIG9mIGEKKwluZXdsaW5lKS4gVXNlIG5ld2xpbmUgaW5zdGVhZCBhcyBhIGRlbGltaXRlciBiZXR3ZWVuCisJa2V5IGFuZCB2YWx1ZS4gVGhpcyBhbGxvd3MgZm9yIHNlY3VyZSBwYXJzaW5nIG9mIHRoZQorCW91dHB1dCB3aXRob3V0IGdldHRpbmcgY29uZnVzZWQgZS5nLiBieSB2YWx1ZXMgdGhhdAorCWNvbnRhaW4gbGluZSBicmVha3MuCisKKy0tbmFtZS1vbmx5OjoKKwlPdXRwdXQgb25seSB0aGUgbmFtZXMgb2YgY29uZmlnIHZhcmlhYmxlcyBmb3IgYC0tbGlzdGAgb3IKKwlgLS1nZXQtcmVnZXhwYC4KKworLS1zaG93LW9yaWdpbjo6CisJQXVnbWVudCB0aGUgb3V0cHV0IG9mIGFsbCBxdWVyaWVkIGNvbmZpZyBvcHRpb25zIHdpdGggdGhlCisJb3JpZ2luIHR5cGUgKGZpbGUsIHN0YW5kYXJkIGlucHV0LCBibG9iLCBjb21tYW5kIGxpbmUpIGFuZAorCXRoZSBhY3R1YWwgb3JpZ2luIChjb25maWcgZmlsZSBwYXRoLCByZWYsIG9yIGJsb2IgaWQgaWYKKwlhcHBsaWNhYmxlKS4KKworLS1zaG93LXNjb3BlOjoKKwlTaW1pbGFyIHRvIGAtLXNob3ctb3JpZ2luYCBpbiB0aGF0IGl0IGF1Z21lbnRzIHRoZSBvdXRwdXQgb2YKKwlhbGwgcXVlcmllZCBjb25maWcgb3B0aW9ucyB3aXRoIHRoZSBzY29wZSBvZiB0aGF0IHZhbHVlCisJKGxvY2FsLCBnbG9iYWwsIHN5c3RlbSwgY29tbWFuZCkuCisKKy0tZ2V0LWNvbG9yYm9vbCBuYW1lIFtzdGRvdXQtaXMtdHR5XTo6CisKKwlGaW5kIHRoZSBjb2xvciBzZXR0aW5nIGZvciBgbmFtZWAgKGUuZy4gYGNvbG9yLmRpZmZgKSBhbmQgb3V0cHV0CisJInRydWUiIG9yICJmYWxzZSIuICBgc3Rkb3V0LWlzLXR0eWAgc2hvdWxkIGJlIGVpdGhlciAidHJ1ZSIgb3IKKwkiZmFsc2UiLCBhbmQgaXMgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY29uZmlndXJhdGlvbiBzYXlzCisJImF1dG8iLiAgSWYgYHN0ZG91dC1pcy10dHlgIGlzIG1pc3NpbmcsIHRoZW4gY2hlY2tzIHRoZSBzdGFuZGFyZAorCW91dHB1dCBvZiB0aGUgY29tbWFuZCBpdHNlbGYsIGFuZCBleGl0cyB3aXRoIHN0YXR1cyAwIGlmIGNvbG9yCisJaXMgdG8gYmUgdXNlZCwgb3IgZXhpdHMgd2l0aCBzdGF0dXMgMSBvdGhlcndpc2UuCisJV2hlbiB0aGUgY29sb3Igc2V0dGluZyBmb3IgYG5hbWVgIGlzIHVuZGVmaW5lZCwgdGhlIGNvbW1hbmQgdXNlcworCWBjb2xvci51aWAgYXMgZmFsbGJhY2suCisKKy0tZ2V0LWNvbG9yIG5hbWUgW2RlZmF1bHRdOjoKKworCUZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQgZm9yIGBuYW1lYCAoZS5nLiBgY29sb3IuZGlmZi5uZXdgKSBhbmQKKwlvdXRwdXQgaXQgYXMgdGhlIEFOU0kgY29sb3IgZXNjYXBlIHNlcXVlbmNlIHRvIHRoZSBzdGFuZGFyZAorCW91dHB1dC4gIFRoZSBvcHRpb25hbCBgZGVmYXVsdGAgcGFyYW1ldGVyIGlzIHVzZWQgaW5zdGVhZCwgaWYKKwl0aGVyZSBpcyBubyBjb2xvciBjb25maWd1cmVkIGZvciBgbmFtZWAuCisrCitgLS10eXBlPWNvbG9yIFstLWRlZmF1bHQ9PGRlZmF1bHQ+XWAgaXMgcHJlZmVycmVkIG92ZXIgYC0tZ2V0LWNvbG9yYAorKGJ1dCBub3RlIHRoYXQgYC0tZ2V0LWNvbG9yYCB3aWxsIG9taXQgdGhlIHRyYWlsaW5nIG5ld2xpbmUgcHJpbnRlZCBieQorYC0tdHlwZT1jb2xvcmApLgorCistZTo6CistLWVkaXQ6OgorCU9wZW5zIGFuIGVkaXRvciB0byBtb2RpZnkgdGhlIHNwZWNpZmllZCBjb25maWcgZmlsZTsgZWl0aGVyCisJYC0tc3lzdGVtYCwgYC0tZ2xvYmFsYCwgb3IgcmVwb3NpdG9yeSAoZGVmYXVsdCkuCisKKy0tW25vLV1pbmNsdWRlczo6CisJUmVzcGVjdCBgaW5jbHVkZS4qYCBkaXJlY3RpdmVzIGluIGNvbmZpZyBmaWxlcyB3aGVuIGxvb2tpbmcgdXAKKwl2YWx1ZXMuIERlZmF1bHRzIHRvIGBvZmZgIHdoZW4gYSBzcGVjaWZpYyBmaWxlIGlzIGdpdmVuIChlLmcuLAorCXVzaW5nIGAtLWZpbGVgLCBgLS1nbG9iYWxgLCBldGMpIGFuZCBgb25gIHdoZW4gc2VhcmNoaW5nIGFsbAorCWNvbmZpZyBmaWxlcy4KKworLS1kZWZhdWx0IDx2YWx1ZT46OgorICBXaGVuIHVzaW5nIGAtLWdldGAsIGFuZCB0aGUgcmVxdWVzdGVkIHZhcmlhYmxlIGlzIG5vdCBmb3VuZCwgYmVoYXZlIGFzIGlmCisgIDx2YWx1ZT4gd2VyZSB0aGUgdmFsdWUgYXNzaWduZWQgdG8gdGhlIHRoYXQgdmFyaWFibGUuCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KK2BwYWdlci5jb25maWdgIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gbGlzdGluZyBjb25maWd1cmF0aW9uLCBpLmUuLCB3aGVuCit1c2luZyBgLS1saXN0YCBvciBhbnkgb2YgdGhlIGAtLWdldC0qYCB3aGljaCBtYXkgcmV0dXJuIG11bHRpcGxlIHJlc3VsdHMuCitUaGUgZGVmYXVsdCBpcyB0byB1c2UgYSBwYWdlci4KKworW1tGSUxFU11dCitGSUxFUworLS0tLS0KKworSWYgbm90IHNldCBleHBsaWNpdGx5IHdpdGggYC0tZmlsZWAsIHRoZXJlIGFyZSBmb3VyIGZpbGVzIHdoZXJlCisnZ2l0IGNvbmZpZycgd2lsbCBzZWFyY2ggZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uczoKKworJChwcmVmaXgpL2V0Yy9naXRjb25maWc6OgorCVN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworJFhER19DT05GSUdfSE9NRS9naXQvY29uZmlnOjoKKwlTZWNvbmQgdXNlci1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUuIElmICRYREdfQ09ORklHX0hPTUUgaXMgbm90IHNldAorCW9yIGVtcHR5LCBgJEhPTUUvLmNvbmZpZy9naXQvY29uZmlnYCB3aWxsIGJlIHVzZWQuIEFueSBzaW5nbGUtdmFsdWVkCisJdmFyaWFibGUgc2V0IGluIHRoaXMgZmlsZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHdoYXRldmVyIGlzIGluCisJYH4vLmdpdGNvbmZpZ2AuICBJdCBpcyBhIGdvb2QgaWRlYSBub3QgdG8gY3JlYXRlIHRoaXMgZmlsZSBpZgorCXlvdSBzb21ldGltZXMgdXNlIG9sZGVyIHZlcnNpb25zIG9mIEdpdCwgYXMgc3VwcG9ydCBmb3IgdGhpcworCWZpbGUgd2FzIGFkZGVkIGZhaXJseSByZWNlbnRseS4KKworfi8uZ2l0Y29uZmlnOjoKKwlVc2VyLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4gQWxzbyBjYWxsZWQgImdsb2JhbCIKKwljb25maWd1cmF0aW9uIGZpbGUuCisKKyRHSVRfRElSL2NvbmZpZzo6CisJUmVwb3NpdG9yeSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUuCisKKyRHSVRfRElSL2NvbmZpZy53b3JrdHJlZTo6CisJVGhpcyBpcyBvcHRpb25hbCBhbmQgaXMgb25seSBzZWFyY2hlZCB3aGVuCisJYGV4dGVuc2lvbnMud29ya3RyZWVDb25maWdgIGlzIHByZXNlbnQgaW4gJEdJVF9ESVIvY29uZmlnLgorCitJZiBubyBmdXJ0aGVyIG9wdGlvbnMgYXJlIGdpdmVuLCBhbGwgcmVhZGluZyBvcHRpb25zIHdpbGwgcmVhZCBhbGwgb2YgdGhlc2UKK2ZpbGVzIHRoYXQgYXJlIGF2YWlsYWJsZS4gSWYgdGhlIGdsb2JhbCBvciB0aGUgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbgorZmlsZSBhcmUgbm90IGF2YWlsYWJsZSB0aGV5IHdpbGwgYmUgaWdub3JlZC4gSWYgdGhlIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbgorZmlsZSBpcyBub3QgYXZhaWxhYmxlIG9yIHJlYWRhYmxlLCAnZ2l0IGNvbmZpZycgd2lsbCBleGl0IHdpdGggYSBub24temVybworZXJyb3IgY29kZS4gSG93ZXZlciwgaW4gbmVpdGhlciBjYXNlIHdpbGwgYW4gZXJyb3IgbWVzc2FnZSBiZSBpc3N1ZWQuCisKK1RoZSBmaWxlcyBhcmUgcmVhZCBpbiB0aGUgb3JkZXIgZ2l2ZW4gYWJvdmUsIHdpdGggbGFzdCB2YWx1ZSBmb3VuZCB0YWtpbmcKK3ByZWNlZGVuY2Ugb3ZlciB2YWx1ZXMgcmVhZCBlYXJsaWVyLiAgV2hlbiBtdWx0aXBsZSB2YWx1ZXMgYXJlIHRha2VuIHRoZW4gYWxsCit2YWx1ZXMgb2YgYSBrZXkgZnJvbSBhbGwgZmlsZXMgd2lsbCBiZSB1c2VkLgorCitZb3UgbWF5IG92ZXJyaWRlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHdoZW4gcnVubmluZyBhbnkgZ2l0Citjb21tYW5kIGJ5IHVzaW5nIHRoZSBgLWNgIG9wdGlvbi4gU2VlIGxpbmtnaXQ6Z2l0WzFdIGZvciBkZXRhaWxzLgorCitBbGwgd3JpdGluZyBvcHRpb25zIHdpbGwgcGVyIGRlZmF1bHQgd3JpdGUgdG8gdGhlIHJlcG9zaXRvcnkgc3BlY2lmaWMKK2NvbmZpZ3VyYXRpb24gZmlsZS4gTm90ZSB0aGF0IHRoaXMgYWxzbyBhZmZlY3RzIG9wdGlvbnMgbGlrZSBgLS1yZXBsYWNlLWFsbGAKK2FuZCBgLS11bnNldGAuIConZ2l0IGNvbmZpZycgd2lsbCBvbmx5IGV2ZXIgY2hhbmdlIG9uZSBmaWxlIGF0IGEgdGltZSouCisKK1lvdSBjYW4gb3ZlcnJpZGUgdGhlc2UgcnVsZXMgZWl0aGVyIGJ5IGNvbW1hbmQtbGluZSBvcHRpb25zIG9yIGJ5IGVudmlyb25tZW50Cit2YXJpYWJsZXMuIFRoZSBgLS1nbG9iYWxgLCBgLS1zeXN0ZW1gIGFuZCBgLS13b3JrdHJlZWAgb3B0aW9ucyB3aWxsIGxpbWl0Cit0aGUgZmlsZSB1c2VkIHRvIHRoZSBnbG9iYWwsIHN5c3RlbS13aWRlIG9yIHBlci13b3JrdHJlZSBmaWxlIHJlc3BlY3RpdmVseS4KK1RoZSBgR0lUX0NPTkZJR2AgZW52aXJvbm1lbnQgdmFyaWFibGUgaGFzIGEgc2ltaWxhciBlZmZlY3QsIGJ1dCB5b3UKK2NhbiBzcGVjaWZ5IGFueSBmaWxlbmFtZSB5b3Ugd2FudC4KKworCitFTlZJUk9OTUVOVAorLS0tLS0tLS0tLS0KKworR0lUX0NPTkZJRzo6CisJVGFrZSB0aGUgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBnaXZlbiBmaWxlIGluc3RlYWQgb2YgLmdpdC9jb25maWcuCisJVXNpbmcgdGhlICItLWdsb2JhbCIgb3B0aW9uIGZvcmNlcyB0aGlzIHRvIH4vLmdpdGNvbmZpZy4gVXNpbmcgdGhlCisJIi0tc3lzdGVtIiBvcHRpb24gZm9yY2VzIHRoaXMgdG8gJChwcmVmaXgpL2V0Yy9naXRjb25maWcuCisKK0dJVF9DT05GSUdfTk9TWVNURU06OgorCVdoZXRoZXIgdG8gc2tpcCByZWFkaW5nIHNldHRpbmdzIGZyb20gdGhlIHN5c3RlbS13aWRlCisJJChwcmVmaXgpL2V0Yy9naXRjb25maWcgZmlsZS4gU2VlIGxpbmtnaXQ6Z2l0WzFdIGZvciBkZXRhaWxzLgorCitTZWUgYWxzbyA8PEZJTEVTPj4uCisKKworW1tFWEFNUExFU11dCitFWEFNUExFUworLS0tLS0tLS0KKworR2l2ZW4gYSAuZ2l0L2NvbmZpZyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorIworIyBUaGlzIGlzIHRoZSBjb25maWcgZmlsZSwgYW5kCisjIGEgJyMnIG9yICc7JyBjaGFyYWN0ZXIgaW5kaWNhdGVzCisjIGEgY29tbWVudAorIworCis7IGNvcmUgdmFyaWFibGVzCitbY29yZV0KKwk7IERvbid0IHRydXN0IGZpbGUgbW9kZXMKKwlmaWxlbW9kZSA9IGZhbHNlCisKKzsgT3VyIGRpZmYgYWxnb3JpdGhtCitbZGlmZl0KKwlleHRlcm5hbCA9IC91c3IvbG9jYWwvYmluL2RpZmYtd3JhcHBlcgorCXJlbmFtZXMgPSB0cnVlCisKKzsgUHJveHkgc2V0dGluZ3MKK1tjb3JlXQorCWdpdHByb3h5PXByb3h5LWNvbW1hbmQgZm9yIGtlcm5lbC5vcmcKKwlnaXRwcm94eT1kZWZhdWx0LXByb3h5IDsgZm9yIGFsbCB0aGUgcmVzdAorCis7IEhUVFAKK1todHRwXQorCXNzbFZlcmlmeQorW2h0dHAgImh0dHBzOi8vd2Vhay5leGFtcGxlLmNvbSJdCisJc3NsVmVyaWZ5ID0gZmFsc2UKKwljb29raWVGaWxlID0gL3RtcC9jb29raWUudHh0CistLS0tLS0tLS0tLS0KKworeW91IGNhbiBzZXQgdGhlIGZpbGVtb2RlIHRvIHRydWUgd2l0aAorCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyBjb3JlLmZpbGVtb2RlIHRydWUKKy0tLS0tLS0tLS0tLQorCitUaGUgaHlwb3RoZXRpY2FsIHByb3h5IGNvbW1hbmQgZW50cmllcyBhY3R1YWxseSBoYXZlIGEgcG9zdGZpeCB0byBkaXNjZXJuCit3aGF0IFVSTCB0aGV5IGFwcGx5IHRvLiBIZXJlIGlzIGhvdyB0byBjaGFuZ2UgdGhlIGVudHJ5IGZvciBrZXJuZWwub3JnCit0byAic3NoIi4KKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgY29yZS5naXRwcm94eSAnInNzaCIgZm9yIGtlcm5lbC5vcmcnICdmb3Iga2VybmVsLm9yZyQnCistLS0tLS0tLS0tLS0KKworVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25seSB0aGUga2V5L3ZhbHVlIHBhaXIgZm9yIGtlcm5lbC5vcmcgaXMgcmVwbGFjZWQuCisKK1RvIGRlbGV0ZSB0aGUgZW50cnkgZm9yIHJlbmFtZXMsIGRvCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIC0tdW5zZXQgZGlmZi5yZW5hbWVzCistLS0tLS0tLS0tLS0KKworSWYgeW91IHdhbnQgdG8gZGVsZXRlIGFuIGVudHJ5IGZvciBhIG11bHRpdmFyIChsaWtlIGNvcmUuZ2l0cHJveHkgYWJvdmUpLAoreW91IGhhdmUgdG8gcHJvdmlkZSBhIHJlZ2V4IG1hdGNoaW5nIHRoZSB2YWx1ZSBvZiBleGFjdGx5IG9uZSBsaW5lLgorCitUbyBxdWVyeSB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4ga2V5LCBkbworCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyAtLWdldCBjb3JlLmZpbGVtb2RlCistLS0tLS0tLS0tLS0KKworb3IKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgY29yZS5maWxlbW9kZQorLS0tLS0tLS0tLS0tCisKK29yLCB0byBxdWVyeSBhIG11bHRpdmFyOgorCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyAtLWdldCBjb3JlLmdpdHByb3h5ICJmb3Iga2VybmVsLm9yZyQiCistLS0tLS0tLS0tLS0KKworSWYgeW91IHdhbnQgdG8ga25vdyBhbGwgdGhlIHZhbHVlcyBmb3IgYSBtdWx0aXZhciwgZG86CisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIC0tZ2V0LWFsbCBjb3JlLmdpdHByb3h5CistLS0tLS0tLS0tLS0KKworSWYgeW91IGxpa2UgdG8gbGl2ZSBkYW5nZXJvdXNseSwgeW91IGNhbiByZXBsYWNlICphbGwqIGNvcmUuZ2l0cHJveHkgYnkgYQorbmV3IG9uZSB3aXRoCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgY29yZS5naXRwcm94eSBzc2gKKy0tLS0tLS0tLS0tLQorCitIb3dldmVyLCBpZiB5b3UgcmVhbGx5IG9ubHkgd2FudCB0byByZXBsYWNlIHRoZSBsaW5lIGZvciB0aGUgZGVmYXVsdCBwcm94eSwKK2kuZS4gdGhlIG9uZSB3aXRob3V0IGEgImZvciAuLi4iIHBvc3RmaXgsIGRvIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIGNvcmUuZ2l0cHJveHkgc3NoICchIGZvciAnCistLS0tLS0tLS0tLS0KKworVG8gYWN0dWFsbHkgbWF0Y2ggb25seSB2YWx1ZXMgd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrLCB5b3UgaGF2ZSB0bworCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyBzZWN0aW9uLmtleSB2YWx1ZSAnWyFdJworLS0tLS0tLS0tLS0tCisKK1RvIGFkZCBhIG5ldyBwcm94eSwgd2l0aG91dCBhbHRlcmluZyBhbnkgb2YgdGhlIGV4aXN0aW5nIG9uZXMsIHVzZQorCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyAtLWFkZCBjb3JlLmdpdHByb3h5ICcicHJveHktY29tbWFuZCIgZm9yIGV4YW1wbGUuY29tJworLS0tLS0tLS0tLS0tCisKK0FuIGV4YW1wbGUgdG8gdXNlIGN1c3RvbWl6ZWQgY29sb3IgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBpbiB5b3VyCitzY3JpcHQ6CisKKy0tLS0tLS0tLS0tLQorIyEvYmluL3NoCitXUz0kKGdpdCBjb25maWcgLS1nZXQtY29sb3IgY29sb3IuZGlmZi53aGl0ZXNwYWNlICJibHVlIHJldmVyc2UiKQorUkVTRVQ9JChnaXQgY29uZmlnIC0tZ2V0LWNvbG9yICIiICJyZXNldCIpCitlY2hvICIke1dTfXlvdXIgd2hpdGVzcGFjZSBjb2xvciBvciBibHVlIHJldmVyc2Uke1JFU0VUfSIKKy0tLS0tLS0tLS0tLQorCitGb3IgVVJMcyBpbiBgaHR0cHM6Ly93ZWFrLmV4YW1wbGUuY29tYCwgYGh0dHAuc3NsVmVyaWZ5YCBpcyBzZXQgdG8KK2ZhbHNlLCB3aGlsZSBpdCBpcyBzZXQgdG8gYHRydWVgIGZvciBhbGwgb3RoZXJzOgorCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyAtLXR5cGU9Ym9vbCAtLWdldC11cmxtYXRjaCBodHRwLnNzbHZlcmlmeSBodHRwczovL2dvb2QuZXhhbXBsZS5jb20KK3RydWUKKyUgZ2l0IGNvbmZpZyAtLXR5cGU9Ym9vbCAtLWdldC11cmxtYXRjaCBodHRwLnNzbHZlcmlmeSBodHRwczovL3dlYWsuZXhhbXBsZS5jb20KK2ZhbHNlCislIGdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2ggaHR0cCBodHRwczovL3dlYWsuZXhhbXBsZS5jb20KK2h0dHAuY29va2llRmlsZSAvdG1wL2Nvb2tpZS50eHQKK2h0dHAuc3NsdmVyaWZ5IGZhbHNlCistLS0tLS0tLS0tLS0KKworaW5jbHVkZTo6Y29uZmlnLnR4dFtdCisKK0JVR1MKKy0tLS0KK1doZW4gdXNpbmcgdGhlIGRlcHJlY2F0ZWQgYFtzZWN0aW9uLnN1YnNlY3Rpb25dYCBzeW50YXgsIGNoYW5naW5nIGEgdmFsdWUKK3dpbGwgcmVzdWx0IGluIGFkZGluZyBhIG11bHRpLWxpbmUga2V5IGluc3RlYWQgb2YgYSBjaGFuZ2UsIGlmIHRoZSBzdWJzZWN0aW9uCitpcyBnaXZlbiB3aXRoIGF0IGxlYXN0IG9uZSB1cHBlcmNhc2UgY2hhcmFjdGVyLiBGb3IgZXhhbXBsZSB3aGVuIHRoZSBjb25maWcKK2xvb2tzIGxpa2UKKworLS0tLS0tLS0KKyAgW3NlY3Rpb24uc3Vic2VjdGlvbl0KKyAgICBrZXkgPSB2YWx1ZTEKKy0tLS0tLS0tCisKK2FuZCBydW5uaW5nIGBnaXQgY29uZmlnIHNlY3Rpb24uU3Vic2VjdGlvbi5rZXkgdmFsdWUyYCB3aWxsIHJlc3VsdCBpbgorCistLS0tLS0tLQorICBbc2VjdGlvbi5zdWJzZWN0aW9uXQorICAgIGtleSA9IHZhbHVlMQorICAgIGtleSA9IHZhbHVlMgorLS0tLS0tLS0KKworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNvdW50LW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY291bnQtb2JqZWN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I5YjRkMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvdW50LW9iamVjdHMudHh0CkBAIC0wLDAgKzEsNTQgQEAKK2dpdC1jb3VudC1vYmplY3RzKDEpCis9PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY291bnQtb2JqZWN0cyAtIENvdW50IHVucGFja2VkIG51bWJlciBvZiBvYmplY3RzIGFuZCB0aGVpciBkaXNrIGNvbnN1bXB0aW9uCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjb3VudC1vYmplY3RzJyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBjb3VudHMgdGhlIG51bWJlciBvZiB1bnBhY2tlZCBvYmplY3QgZmlsZXMgYW5kIGRpc2sgc3BhY2UgY29uc3VtZWQgYnkKK3RoZW0sIHRvIGhlbHAgeW91IGRlY2lkZSB3aGVuIGl0IGlzIGEgZ29vZCB0aW1lIHRvIHJlcGFjay4KKworCitPUFRJT05TCistLS0tLS0tCistdjo6CistLXZlcmJvc2U6OgorCVJlcG9ydCBpbiBtb3JlIGRldGFpbDoKKysKK2NvdW50OiB0aGUgbnVtYmVyIG9mIGxvb3NlIG9iamVjdHMKKysKK3NpemU6IGRpc2sgc3BhY2UgY29uc3VtZWQgYnkgbG9vc2Ugb2JqZWN0cywgaW4gS2lCICh1bmxlc3MgLUggaXMgc3BlY2lmaWVkKQorKworaW4tcGFjazogdGhlIG51bWJlciBvZiBpbi1wYWNrIG9iamVjdHMKKysKK3NpemUtcGFjazogZGlzayBzcGFjZSBjb25zdW1lZCBieSB0aGUgcGFja3MsIGluIEtpQiAodW5sZXNzIC1IIGlzIHNwZWNpZmllZCkKKysKK3BydW5lLXBhY2thYmxlOiB0aGUgbnVtYmVyIG9mIGxvb3NlIG9iamVjdHMgdGhhdCBhcmUgYWxzbyBwcmVzZW50IGluCit0aGUgcGFja3MuIFRoZXNlIG9iamVjdHMgY291bGQgYmUgcHJ1bmVkIHVzaW5nIGBnaXQgcHJ1bmUtcGFja2VkYC4KKysKK2dhcmJhZ2U6IHRoZSBudW1iZXIgb2YgZmlsZXMgaW4gb2JqZWN0IGRhdGFiYXNlIHRoYXQgYXJlIG5laXRoZXIgdmFsaWQgbG9vc2UKK29iamVjdHMgbm9yIHZhbGlkIHBhY2tzCisrCitzaXplLWdhcmJhZ2U6IGRpc2sgc3BhY2UgY29uc3VtZWQgYnkgZ2FyYmFnZSBmaWxlcywgaW4gS2lCICh1bmxlc3MgLUggaXMKK3NwZWNpZmllZCkKKysKK2FsdGVybmF0ZTogYWJzb2x1dGUgcGF0aCBvZiBhbHRlcm5hdGUgb2JqZWN0IGRhdGFiYXNlczsgbWF5IGFwcGVhcgorbXVsdGlwbGUgdGltZXMsIG9uZSBsaW5lIHBlciBwYXRoLiBOb3RlIHRoYXQgaWYgdGhlIHBhdGggY29udGFpbnMKK25vbi1wcmludGFibGUgY2hhcmFjdGVycywgaXQgbWF5IGJlIHN1cnJvdW5kZWQgYnkgZG91YmxlLXF1b3RlcyBhbmQKK2NvbnRhaW4gQy1zdHlsZSBiYWNrc2xhc2hlZCBlc2NhcGUgc2VxdWVuY2VzLgorCistSDo6CistLWh1bWFuLXJlYWRhYmxlOjoKKworUHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0CisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1MWM2YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi50eHQKQEAgLTAsMCArMSwzMCBAQAorZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbigxKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uIC0gVGVtcG9yYXJpbHkgc3RvcmUgdXNlciBjcmVkZW50aWFscyBpbiBtZW1vcnkKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCitnaXQgY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uIFstLWRlYnVnXSA8c29ja2V0PgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworTk9URTogWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gaW52b2tlIHRoaXMgY29tbWFuZCB5b3Vyc2VsZjsgaXQgaXMKK3N0YXJ0ZWQgYXV0b21hdGljYWxseSB3aGVuIHlvdSB1c2UgbGlua2dpdDpnaXQtY3JlZGVudGlhbC1jYWNoZVsxXS4KKworVGhpcyBjb21tYW5kIGxpc3RlbnMgb24gdGhlIFVuaXggZG9tYWluIHNvY2tldCBzcGVjaWZpZWQgYnkgYDxzb2NrZXQ+YAorZm9yIGBnaXQtY3JlZGVudGlhbC1jYWNoZWAgY2xpZW50cy4gQ2xpZW50cyBtYXkgc3RvcmUgYW5kIHJldHJpZXZlCitjcmVkZW50aWFscy4gRWFjaCBjcmVkZW50aWFsIGlzIGhlbGQgZm9yIGEgdGltZW91dCBzcGVjaWZpZWQgYnkgdGhlCitjbGllbnQ7IG9uY2Ugbm8gY3JlZGVudGlhbHMgYXJlIGhlbGQsIHRoZSBkYWVtb24gZXhpdHMuCisKK0lmIHRoZSBgLS1kZWJ1Z2Agb3B0aW9uIGlzIHNwZWNpZmllZCwgdGhlIGRhZW1vbiBkb2VzIG5vdCBjbG9zZSBpdHMKK3N0ZGVyciBzdHJlYW0sIGFuZCBtYXkgb3V0cHV0IGV4dHJhIGRpYWdub3N0aWNzIHRvIGl0IGV2ZW4gYWZ0ZXIgaXQgaGFzCitiZWd1biBsaXN0ZW5pbmcgZm9yIGNsaWVudHMuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC1jYWNoZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLWNhY2hlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjE2YzE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC1jYWNoZS50eHQKQEAgLTAsMCArMSw4MCBAQAorZ2l0LWNyZWRlbnRpYWwtY2FjaGUoMSkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jcmVkZW50aWFsLWNhY2hlIC0gSGVscGVyIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHBhc3N3b3JkcyBpbiBtZW1vcnkKKworU1lOT1BTSVMKKy0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAnY2FjaGUgWzxvcHRpb25zPl0nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBjb21tYW5kIGNhY2hlcyBjcmVkZW50aWFscyBpbiBtZW1vcnkgZm9yIHVzZSBieSBmdXR1cmUgR2l0Citwcm9ncmFtcy4gVGhlIHN0b3JlZCBjcmVkZW50aWFscyBuZXZlciB0b3VjaCB0aGUgZGlzaywgYW5kIGFyZSBmb3Jnb3R0ZW4KK2FmdGVyIGEgY29uZmlndXJhYmxlIHRpbWVvdXQuICBUaGUgY2FjaGUgaXMgYWNjZXNzaWJsZSBvdmVyIGEgVW5peAorZG9tYWluIHNvY2tldCwgcmVzdHJpY3RlZCB0byB0aGUgY3VycmVudCB1c2VyIGJ5IGZpbGVzeXN0ZW0gcGVybWlzc2lvbnMuCisKK1lvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGludm9rZSB0aGlzIGNvbW1hbmQgZGlyZWN0bHk7IGl0IGlzIG1lYW50IHRvCitiZSB1c2VkIGFzIGEgY3JlZGVudGlhbCBoZWxwZXIgYnkgb3RoZXIgcGFydHMgb2YgR2l0LiBTZWUKK2xpbmtnaXQ6Z2l0Y3JlZGVudGlhbHNbN10gb3IgYEVYQU1QTEVTYCBiZWxvdy4KKworT1BUSU9OUworLS0tLS0tLQorCistLXRpbWVvdXQgPHNlY29uZHM+OjoKKworCU51bWJlciBvZiBzZWNvbmRzIHRvIGNhY2hlIGNyZWRlbnRpYWxzIChkZWZhdWx0OiA5MDApLgorCistLXNvY2tldCA8cGF0aD46OgorCisJVXNlIGA8cGF0aD5gIHRvIGNvbnRhY3QgYSBydW5uaW5nIGNhY2hlIGRhZW1vbiAob3Igc3RhcnQgYSBuZXcKKwljYWNoZSBkYWVtb24gaWYgb25lIGlzIG5vdCBzdGFydGVkKS4KKwlEZWZhdWx0cyB0byBgJFhER19DQUNIRV9IT01FL2dpdC9jcmVkZW50aWFsL3NvY2tldGAgdW5sZXNzCisJYH4vLmdpdC1jcmVkZW50aWFsLWNhY2hlL2AgZXhpc3RzIGluIHdoaWNoIGNhc2UKKwlgfi8uZ2l0LWNyZWRlbnRpYWwtY2FjaGUvc29ja2V0YCBpcyB1c2VkIGluc3RlYWQuCisJSWYgeW91ciBob21lIGRpcmVjdG9yeSBpcyBvbiBhIG5ldHdvcmstbW91bnRlZCBmaWxlc3lzdGVtLCB5b3UKKwltYXkgbmVlZCB0byBjaGFuZ2UgdGhpcyB0byBhIGxvY2FsIGZpbGVzeXN0ZW0uIFlvdSBtdXN0IHNwZWNpZnkKKwlhbiBhYnNvbHV0ZSBwYXRoLgorCitDT05UUk9MTElORyBUSEUgREFFTU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3b3VsZCBsaWtlIHRoZSBkYWVtb24gdG8gZXhpdCBlYXJseSwgZm9yZ2V0dGluZyBhbGwgY2FjaGVkCitjcmVkZW50aWFscyBiZWZvcmUgdGhlaXIgdGltZW91dCwgeW91IGNhbiBpc3N1ZSBhbiBgZXhpdGAgYWN0aW9uOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGNyZWRlbnRpYWwtY2FjaGUgZXhpdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1RoZSBwb2ludCBvZiB0aGlzIGhlbHBlciBpcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiB0aW1lcyB5b3UgbXVzdCB0eXBlCit5b3VyIHVzZXJuYW1lIG9yIHBhc3N3b3JkLiBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgY3JlZGVudGlhbC5oZWxwZXIgY2FjaGUKKyQgZ2l0IHB1c2ggaHR0cDovL2V4YW1wbGUuY29tL3JlcG8uZ2l0CitVc2VybmFtZTogPHR5cGUgeW91ciB1c2VybmFtZT4KK1Bhc3N3b3JkOiA8dHlwZSB5b3VyIHBhc3N3b3JkPgorCitbd29yayBmb3IgNSBtb3JlIG1pbnV0ZXNdCiskIGdpdCBwdXNoIGh0dHA6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdAorW3lvdXIgY3JlZGVudGlhbHMgYXJlIHVzZWQgYXV0b21hdGljYWxseV0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHByb3ZpZGUgb3B0aW9ucyB2aWEgdGhlIGNyZWRlbnRpYWwuaGVscGVyIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlICh0aGlzIGV4YW1wbGUgZHJvcHMgdGhlIGNhY2hlIHRpbWUgdG8gNSBtaW51dGVzKToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICdjYWNoZSAtLXRpbWVvdXQ9MzAwJworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtc3RvcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC1zdG9yZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZiMDc5OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtc3RvcmUudHh0CkBAIC0wLDAgKzEsMTEwIEBACitnaXQtY3JlZGVudGlhbC1zdG9yZSgxKQorPT09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNyZWRlbnRpYWwtc3RvcmUgLSBIZWxwZXIgdG8gc3RvcmUgY3JlZGVudGlhbHMgb24gZGlzaworCitTWU5PUFNJUworLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBjb25maWcgY3JlZGVudGlhbC5oZWxwZXIgJ3N0b3JlIFs8b3B0aW9ucz5dJworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworTk9URTogVXNpbmcgdGhpcyBoZWxwZXIgd2lsbCBzdG9yZSB5b3VyIHBhc3N3b3JkcyB1bmVuY3J5cHRlZCBvbiBkaXNrLAorcHJvdGVjdGVkIG9ubHkgYnkgZmlsZXN5c3RlbSBwZXJtaXNzaW9ucy4gSWYgdGhpcyBpcyBub3QgYW4gYWNjZXB0YWJsZQorc2VjdXJpdHkgdHJhZGVvZmYsIHRyeSBsaW5rZ2l0OmdpdC1jcmVkZW50aWFsLWNhY2hlWzFdLCBvciBmaW5kIGEgaGVscGVyCit0aGF0IGludGVncmF0ZXMgd2l0aCBzZWN1cmUgc3RvcmFnZSBwcm92aWRlZCBieSB5b3VyIG9wZXJhdGluZyBzeXN0ZW0uCisKK1RoaXMgY29tbWFuZCBzdG9yZXMgY3JlZGVudGlhbHMgaW5kZWZpbml0ZWx5IG9uIGRpc2sgZm9yIHVzZSBieSBmdXR1cmUKK0dpdCBwcm9ncmFtcy4KKworWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gaW52b2tlIHRoaXMgY29tbWFuZCBkaXJlY3RseTsgaXQgaXMgbWVhbnQgdG8KK2JlIHVzZWQgYXMgYSBjcmVkZW50aWFsIGhlbHBlciBieSBvdGhlciBwYXJ0cyBvZiBnaXQuIFNlZQorbGlua2dpdDpnaXRjcmVkZW50aWFsc1s3XSBvciBgRVhBTVBMRVNgIGJlbG93LgorCitPUFRJT05TCistLS0tLS0tCisKKy0tZmlsZT08cGF0aD46OgorCisJVXNlIGA8cGF0aD5gIHRvIGxvb2t1cCBhbmQgc3RvcmUgY3JlZGVudGlhbHMuIFRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMKKwlmaWxlc3lzdGVtIHBlcm1pc3Npb25zIHNldCB0byBwcmV2ZW50IG90aGVyIHVzZXJzIG9uIHRoZSBzeXN0ZW0KKwlmcm9tIHJlYWRpbmcgaXQsIGJ1dCB3aWxsIG5vdCBiZSBlbmNyeXB0ZWQgb3Igb3RoZXJ3aXNlCisJcHJvdGVjdGVkLiBJZiBub3Qgc3BlY2lmaWVkLCBjcmVkZW50aWFscyB3aWxsIGJlIHNlYXJjaGVkIGZvciBmcm9tCisJYH4vLmdpdC1jcmVkZW50aWFsc2AgYW5kIGAkWERHX0NPTkZJR19IT01FL2dpdC9jcmVkZW50aWFsc2AsIGFuZAorCWNyZWRlbnRpYWxzIHdpbGwgYmUgd3JpdHRlbiB0byBgfi8uZ2l0LWNyZWRlbnRpYWxzYCBpZiBpdCBleGlzdHMsIG9yCisJYCRYREdfQ09ORklHX0hPTUUvZ2l0L2NyZWRlbnRpYWxzYCBpZiBpdCBleGlzdHMgYW5kIHRoZSBmb3JtZXIgZG9lcworCW5vdC4gU2VlIGFsc28gPDxGSUxFUz4+LgorCitbW0ZJTEVTXV0KK0ZJTEVTCistLS0tLQorCitJZiBub3Qgc2V0IGV4cGxpY2l0bHkgd2l0aCBgLS1maWxlYCwgdGhlcmUgYXJlIHR3byBmaWxlcyB3aGVyZQorZ2l0LWNyZWRlbnRpYWwtc3RvcmUgd2lsbCBzZWFyY2ggZm9yIGNyZWRlbnRpYWxzIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6CisKK34vLmdpdC1jcmVkZW50aWFsczo6CisJVXNlci1zcGVjaWZpYyBjcmVkZW50aWFscyBmaWxlLgorCiskWERHX0NPTkZJR19IT01FL2dpdC9jcmVkZW50aWFsczo6CisJU2Vjb25kIHVzZXItc3BlY2lmaWMgY3JlZGVudGlhbHMgZmlsZS4gSWYgJyRYREdfQ09ORklHX0hPTUUnIGlzIG5vdCBzZXQKKwlvciBlbXB0eSwgYCRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzYCB3aWxsIGJlIHVzZWQuIEFueSBjcmVkZW50aWFscworCXN0b3JlZCBpbiB0aGlzIGZpbGUgd2lsbCBub3QgYmUgdXNlZCBpZiBgfi8uZ2l0LWNyZWRlbnRpYWxzYCBoYXMgYQorCW1hdGNoaW5nIGNyZWRlbnRpYWwgYXMgd2VsbC4gSXQgaXMgYSBnb29kIGlkZWEgbm90IHRvIGNyZWF0ZSB0aGlzIGZpbGUKKwlpZiB5b3Ugc29tZXRpbWVzIHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQgdGhhdCBkbyBub3Qgc3VwcG9ydCBpdC4KKworRm9yIGNyZWRlbnRpYWwgbG9va3VwcywgdGhlIGZpbGVzIGFyZSByZWFkIGluIHRoZSBvcmRlciBnaXZlbiBhYm92ZSwgd2l0aCB0aGUKK2ZpcnN0IG1hdGNoaW5nIGNyZWRlbnRpYWwgZm91bmQgdGFraW5nIHByZWNlZGVuY2Ugb3ZlciBjcmVkZW50aWFscyBmb3VuZCBpbgorZmlsZXMgZnVydGhlciBkb3duIHRoZSBsaXN0LgorCitDcmVkZW50aWFsIHN0b3JhZ2Ugd2lsbCBieSBkZWZhdWx0IHdyaXRlIHRvIHRoZSBmaXJzdCBleGlzdGluZyBmaWxlIGluIHRoZQorbGlzdC4gSWYgbm9uZSBvZiB0aGVzZSBmaWxlcyBleGlzdCwgYH4vLmdpdC1jcmVkZW50aWFsc2Agd2lsbCBiZSBjcmVhdGVkIGFuZAord3JpdHRlbiB0by4KKworV2hlbiBlcmFzaW5nIGNyZWRlbnRpYWxzLCBtYXRjaGluZyBjcmVkZW50aWFscyB3aWxsIGJlIGVyYXNlZCBmcm9tIGFsbCBmaWxlcy4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1RoZSBwb2ludCBvZiB0aGlzIGhlbHBlciBpcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiB0aW1lcyB5b3UgbXVzdCB0eXBlCit5b3VyIHVzZXJuYW1lIG9yIHBhc3N3b3JkLiBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgY3JlZGVudGlhbC5oZWxwZXIgc3RvcmUKKyQgZ2l0IHB1c2ggaHR0cDovL2V4YW1wbGUuY29tL3JlcG8uZ2l0CitVc2VybmFtZTogPHR5cGUgeW91ciB1c2VybmFtZT4KK1Bhc3N3b3JkOiA8dHlwZSB5b3VyIHBhc3N3b3JkPgorCitbc2V2ZXJhbCBkYXlzIGxhdGVyXQorJCBnaXQgcHVzaCBodHRwOi8vZXhhbXBsZS5jb20vcmVwby5naXQKK1t5b3VyIGNyZWRlbnRpYWxzIGFyZSB1c2VkIGF1dG9tYXRpY2FsbHldCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1RPUkFHRSBGT1JNQVQKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSBgLmdpdC1jcmVkZW50aWFsc2AgZmlsZSBpcyBzdG9yZWQgaW4gcGxhaW50ZXh0LiBFYWNoIGNyZWRlbnRpYWwgaXMKK3N0b3JlZCBvbiBpdHMgb3duIGxpbmUgYXMgYSBVUkwgbGlrZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitodHRwczovL3VzZXI6cGFzc0BleGFtcGxlLmNvbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vIG90aGVyIGtpbmRzIG9mIGxpbmVzIChlLmcuIGVtcHR5IGxpbmVzIG9yIGNvbW1lbnQgbGluZXMpIGFyZQorYWxsb3dlZCBpbiB0aGUgZmlsZSwgZXZlbiB0aG91Z2ggc29tZSBtYXkgYmUgc2lsZW50bHkgaWdub3JlZC4gRG8KK25vdCB2aWV3IG9yIGVkaXQgdGhlIGZpbGUgd2l0aCBlZGl0b3JzLgorCitXaGVuIEdpdCBuZWVkcyBhdXRoZW50aWNhdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIFVSTCBjb250ZXh0LAorY3JlZGVudGlhbC1zdG9yZSB3aWxsIGNvbnNpZGVyIHRoYXQgY29udGV4dCBhIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdAorZWFjaCBlbnRyeSBpbiB0aGUgY3JlZGVudGlhbHMgZmlsZS4gIElmIHRoZSBwcm90b2NvbCwgaG9zdG5hbWUsIGFuZAordXNlcm5hbWUgKGlmIHdlIGFscmVhZHkgaGF2ZSBvbmUpIG1hdGNoLCB0aGVuIHRoZSBwYXNzd29yZCBpcyByZXR1cm5lZAordG8gR2l0LiBTZWUgdGhlIGRpc2N1c3Npb24gb2YgY29uZmlndXJhdGlvbiBpbiBsaW5rZ2l0OmdpdGNyZWRlbnRpYWxzWzddCitmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOTkwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLnR4dApAQCAtMCwwICsxLDE2MSBAQAorZ2l0LWNyZWRlbnRpYWwoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jcmVkZW50aWFsIC0gUmV0cmlldmUgYW5kIHN0b3JlIHVzZXIgY3JlZGVudGlhbHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBjcmVkZW50aWFsIDxmaWxsfGFwcHJvdmV8cmVqZWN0PgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXQgaGFzIGFuIGludGVybmFsIGludGVyZmFjZSBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZyBjcmVkZW50aWFscworZnJvbSBzeXN0ZW0tc3BlY2lmaWMgaGVscGVycywgYXMgd2VsbCBhcyBwcm9tcHRpbmcgdGhlIHVzZXIgZm9yCit1c2VybmFtZXMgYW5kIHBhc3N3b3Jkcy4gVGhlIGdpdC1jcmVkZW50aWFsIGNvbW1hbmQgZXhwb3NlcyB0aGlzCitpbnRlcmZhY2UgdG8gc2NyaXB0cyB3aGljaCBtYXkgd2FudCB0byByZXRyaWV2ZSwgc3RvcmUsIG9yIHByb21wdCBmb3IKK2NyZWRlbnRpYWxzIGluIHRoZSBzYW1lIG1hbm5lciBhcyBHaXQuIFRoZSBkZXNpZ24gb2YgdGhpcyBzY3JpcHRhYmxlCitpbnRlcmZhY2UgbW9kZWxzIHRoZSBpbnRlcm5hbCBDIEFQSTsgc2VlIGNyZWRlbnRpYWwuaCBmb3IgbW9yZQorYmFja2dyb3VuZCBvbiB0aGUgY29uY2VwdHMuCisKK2dpdC1jcmVkZW50aWFsIHRha2VzIGFuICJhY3Rpb24iIG9wdGlvbiBvbiB0aGUgY29tbWFuZC1saW5lIChvbmUgb2YKK2BmaWxsYCwgYGFwcHJvdmVgLCBvciBgcmVqZWN0YCkgYW5kIHJlYWRzIGEgY3JlZGVudGlhbCBkZXNjcmlwdGlvbgorb24gc3RkaW4gKHNlZSA8PElPRk1ULElOUFVUL09VVFBVVCBGT1JNQVQ+PikuCisKK0lmIHRoZSBhY3Rpb24gaXMgYGZpbGxgLCBnaXQtY3JlZGVudGlhbCB3aWxsIGF0dGVtcHQgdG8gYWRkICJ1c2VybmFtZSIKK2FuZCAicGFzc3dvcmQiIGF0dHJpYnV0ZXMgdG8gdGhlIGRlc2NyaXB0aW9uIGJ5IHJlYWRpbmcgY29uZmlnIGZpbGVzLAorYnkgY29udGFjdGluZyBhbnkgY29uZmlndXJlZCBjcmVkZW50aWFsIGhlbHBlcnMsIG9yIGJ5IHByb21wdGluZyB0aGUKK3VzZXIuIFRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXR0cmlidXRlcyBvZiB0aGUgY3JlZGVudGlhbAorZGVzY3JpcHRpb24gYXJlIHRoZW4gcHJpbnRlZCB0byBzdGRvdXQgdG9nZXRoZXIgd2l0aCB0aGUgYXR0cmlidXRlcworYWxyZWFkeSBwcm92aWRlZC4KKworSWYgdGhlIGFjdGlvbiBpcyBgYXBwcm92ZWAsIGdpdC1jcmVkZW50aWFsIHdpbGwgc2VuZCB0aGUgZGVzY3JpcHRpb24KK3RvIGFueSBjb25maWd1cmVkIGNyZWRlbnRpYWwgaGVscGVycywgd2hpY2ggbWF5IHN0b3JlIHRoZSBjcmVkZW50aWFsCitmb3IgbGF0ZXIgdXNlLgorCitJZiB0aGUgYWN0aW9uIGlzIGByZWplY3RgLCBnaXQtY3JlZGVudGlhbCB3aWxsIHNlbmQgdGhlIGRlc2NyaXB0aW9uIHRvCithbnkgY29uZmlndXJlZCBjcmVkZW50aWFsIGhlbHBlcnMsIHdoaWNoIG1heSBlcmFzZSBhbnkgc3RvcmVkCitjcmVkZW50aWFsIG1hdGNoaW5nIHRoZSBkZXNjcmlwdGlvbi4KKworSWYgdGhlIGFjdGlvbiBpcyBgYXBwcm92ZWAgb3IgYHJlamVjdGAsIG5vIG91dHB1dCBzaG91bGQgYmUgZW1pdHRlZC4KKworVFlQSUNBTCBVU0UgT0YgR0lUIENSRURFTlRJQUwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIGFwcGxpY2F0aW9uIHVzaW5nIGdpdC1jcmVkZW50aWFsIHdpbGwgdHlwaWNhbGx5IHVzZSBgZ2l0CitjcmVkZW50aWFsYCBmb2xsb3dpbmcgdGhlc2Ugc3RlcHM6CisKKyAgMS4gR2VuZXJhdGUgYSBjcmVkZW50aWFsIGRlc2NyaXB0aW9uIGJhc2VkIG9uIHRoZSBjb250ZXh0LgorKworRm9yIGV4YW1wbGUsIGlmIHdlIHdhbnQgYSBwYXNzd29yZCBmb3IKK2BodHRwczovL2V4YW1wbGUuY29tL2Zvby5naXRgLCB3ZSBtaWdodCBnZW5lcmF0ZSB0aGUgZm9sbG93aW5nCitjcmVkZW50aWFsIGRlc2NyaXB0aW9uIChkb24ndCBmb3JnZXQgdGhlIGJsYW5rIGxpbmUgYXQgdGhlIGVuZDsgaXQKK3RlbGxzIGBnaXQgY3JlZGVudGlhbGAgdGhhdCB0aGUgYXBwbGljYXRpb24gZmluaXNoZWQgZmVlZGluZyBhbGwgdGhlCitpbmZvcm1hdGlvbiBpdCBoYXMpOgorCisJIHByb3RvY29sPWh0dHBzCisJIGhvc3Q9ZXhhbXBsZS5jb20KKwkgcGF0aD1mb28uZ2l0CisKKyAgMi4gQXNrIGdpdC1jcmVkZW50aWFsIHRvIGdpdmUgdXMgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZm9yIHRoaXMKKyAgICAgZGVzY3JpcHRpb24uIFRoaXMgaXMgZG9uZSBieSBydW5uaW5nIGBnaXQgY3JlZGVudGlhbCBmaWxsYCwKKyAgICAgZmVlZGluZyB0aGUgZGVzY3JpcHRpb24gZnJvbSBzdGVwICgxKSB0byBpdHMgc3RhbmRhcmQgaW5wdXQuIFRoZSBjb21wbGV0ZQorICAgICBjcmVkZW50aWFsIGRlc2NyaXB0aW9uIChpbmNsdWRpbmcgdGhlIGNyZWRlbnRpYWwgcGVyIHNlLCBpLmUuIHRoZQorICAgICBsb2dpbiBhbmQgcGFzc3dvcmQpIHdpbGwgYmUgcHJvZHVjZWQgb24gc3RhbmRhcmQgb3V0cHV0LCBsaWtlOgorCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9Ym9iCisJcGFzc3dvcmQ9c2VjcjN0CisrCitJbiBtb3N0IGNhc2VzLCB0aGlzIG1lYW5zIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHRoZSBpbnB1dCB3aWxsIGJlCityZXBlYXRlZCBpbiB0aGUgb3V0cHV0LCBidXQgR2l0IG1heSBhbHNvIG1vZGlmeSB0aGUgY3JlZGVudGlhbAorZGVzY3JpcHRpb24sIGZvciBleGFtcGxlIGJ5IHJlbW92aW5nIHRoZSBgcGF0aGAgYXR0cmlidXRlIHdoZW4gdGhlCitwcm90b2NvbCBpcyBIVFRQKHMpIGFuZCBgY3JlZGVudGlhbC51c2VIdHRwUGF0aGAgaXMgZmFsc2UuCisrCitJZiB0aGUgYGdpdCBjcmVkZW50aWFsYCBrbmV3IGFib3V0IHRoZSBwYXNzd29yZCwgdGhpcyBzdGVwIG1heQorbm90IGhhdmUgaW52b2x2ZWQgdGhlIHVzZXIgYWN0dWFsbHkgdHlwaW5nIHRoaXMgcGFzc3dvcmQgKHRoZQordXNlciBtYXkgaGF2ZSB0eXBlZCBhIHBhc3N3b3JkIHRvIHVubG9jayB0aGUga2V5Y2hhaW4gaW5zdGVhZCwKK29yIG5vIHVzZXIgaW50ZXJhY3Rpb24gd2FzIGRvbmUgaWYgdGhlIGtleWNoYWluIHdhcyBhbHJlYWR5Cit1bmxvY2tlZCkgYmVmb3JlIGl0IHJldHVybmVkIGBwYXNzd29yZD1zZWNyM3RgLgorCisgIDMuIFVzZSB0aGUgY3JlZGVudGlhbCAoZS5nLiwgYWNjZXNzIHRoZSBVUkwgd2l0aCB0aGUgdXNlcm5hbWUgYW5kCisgICAgIHBhc3N3b3JkIGZyb20gc3RlcCAoMikpLCBhbmQgc2VlIGlmIGl0J3MgYWNjZXB0ZWQuCisKKyAgNC4gUmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIHBhc3N3b3JkLiBJZiB0aGUKKyAgICAgY3JlZGVudGlhbCBhbGxvd2VkIHRoZSBvcGVyYXRpb24gdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LCB0aGVuCisgICAgIGl0IGNhbiBiZSBtYXJrZWQgd2l0aCBhbiAiYXBwcm92ZSIgYWN0aW9uIHRvIHRlbGwgYGdpdAorICAgICBjcmVkZW50aWFsYCB0byByZXVzZSBpdCBpbiBpdHMgbmV4dCBpbnZvY2F0aW9uLiBJZiB0aGUgY3JlZGVudGlhbAorICAgICB3YXMgcmVqZWN0ZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24sIHVzZSB0aGUgInJlamVjdCIgYWN0aW9uIHNvCisgICAgIHRoYXQgYGdpdCBjcmVkZW50aWFsYCB3aWxsIGFzayBmb3IgYSBuZXcgcGFzc3dvcmQgaW4gaXRzIG5leHQKKyAgICAgaW52b2NhdGlvbi4gSW4gZWl0aGVyIGNhc2UsIGBnaXQgY3JlZGVudGlhbGAgc2hvdWxkIGJlIGZlZCB3aXRoCisgICAgIHRoZSBjcmVkZW50aWFsIGRlc2NyaXB0aW9uIG9idGFpbmVkIGZyb20gc3RlcCAoMikgKHdoaWNoIGFsc28KKyAgICAgY29udGFpbiB0aGUgb25lcyBwcm92aWRlZCBpbiBzdGVwICgxKSkuCisKK1tbSU9GTVRdXQorSU5QVVQvT1VUUFVUIEZPUk1BVAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitgZ2l0IGNyZWRlbnRpYWxgIHJlYWRzIGFuZC9vciB3cml0ZXMgKGRlcGVuZGluZyBvbiB0aGUgYWN0aW9uIHVzZWQpCitjcmVkZW50aWFsIGluZm9ybWF0aW9uIGluIGl0cyBzdGFuZGFyZCBpbnB1dC9vdXRwdXQuIFRoaXMgaW5mb3JtYXRpb24KK2NhbiBjb3JyZXNwb25kIGVpdGhlciB0byBrZXlzIGZvciB3aGljaCBgZ2l0IGNyZWRlbnRpYWxgIHdpbGwgb2J0YWluCit0aGUgbG9naW4gaW5mb3JtYXRpb24gKGUuZy4gaG9zdCwgcHJvdG9jb2wsIHBhdGgpLCBvciB0byB0aGUgYWN0dWFsCitjcmVkZW50aWFsIGRhdGEgdG8gYmUgb2J0YWluZWQgKHVzZXJuYW1lL3Bhc3N3b3JkKS4KKworVGhlIGNyZWRlbnRpYWwgaXMgc3BsaXQgaW50byBhIHNldCBvZiBuYW1lZCBhdHRyaWJ1dGVzLCB3aXRoIG9uZQorYXR0cmlidXRlIHBlciBsaW5lLiBFYWNoIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgYnkgYSBrZXktdmFsdWUgcGFpciwKK3NlcGFyYXRlZCBieSBhbiBgPWAgKGVxdWFscykgc2lnbiwgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLgorCitUaGUga2V5IG1heSBjb250YWluIGFueSBieXRlcyBleGNlcHQgYD1gLCBuZXdsaW5lLCBvciBOVUwuIFRoZSB2YWx1ZSBtYXkKK2NvbnRhaW4gYW55IGJ5dGVzIGV4Y2VwdCBuZXdsaW5lIG9yIE5VTC4KKworSW4gYm90aCBjYXNlcywgYWxsIGJ5dGVzIGFyZSB0cmVhdGVkIGFzLWlzIChpLmUuLCB0aGVyZSBpcyBubyBxdW90aW5nLAorYW5kIG9uZSBjYW5ub3QgdHJhbnNtaXQgYSB2YWx1ZSB3aXRoIG5ld2xpbmUgb3IgTlVMIGluIGl0KS4gVGhlIGxpc3Qgb2YKK2F0dHJpYnV0ZXMgaXMgdGVybWluYXRlZCBieSBhIGJsYW5rIGxpbmUgb3IgZW5kLW9mLWZpbGUuCisKK0dpdCB1bmRlcnN0YW5kcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisKK2Bwcm90b2NvbGA6OgorCisJVGhlIHByb3RvY29sIG92ZXIgd2hpY2ggdGhlIGNyZWRlbnRpYWwgd2lsbCBiZSB1c2VkIChlLmcuLAorCWBodHRwc2ApLgorCitgaG9zdGA6OgorCisJVGhlIHJlbW90ZSBob3N0bmFtZSBmb3IgYSBuZXR3b3JrIGNyZWRlbnRpYWwuICBUaGlzIGluY2x1ZGVzCisJdGhlIHBvcnQgbnVtYmVyIGlmIG9uZSB3YXMgc3BlY2lmaWVkIChlLmcuLCAiZXhhbXBsZS5jb206ODA4OCIpLgorCitgcGF0aGA6OgorCisJVGhlIHBhdGggd2l0aCB3aGljaCB0aGUgY3JlZGVudGlhbCB3aWxsIGJlIHVzZWQuIEUuZy4sIGZvcgorCWFjY2Vzc2luZyBhIHJlbW90ZSBodHRwcyByZXBvc2l0b3J5LCB0aGlzIHdpbGwgYmUgdGhlCisJcmVwb3NpdG9yeSdzIHBhdGggb24gdGhlIHNlcnZlci4KKworYHVzZXJuYW1lYDo6CisKKwlUaGUgY3JlZGVudGlhbCdzIHVzZXJuYW1lLCBpZiB3ZSBhbHJlYWR5IGhhdmUgb25lIChlLmcuLCBmcm9tIGEKKwlVUkwsIHRoZSBjb25maWd1cmF0aW9uLCB0aGUgdXNlciwgb3IgZnJvbSBhIHByZXZpb3VzbHkgcnVuIGhlbHBlcikuCisKK2BwYXNzd29yZGA6OgorCisJVGhlIGNyZWRlbnRpYWwncyBwYXNzd29yZCwgaWYgd2UgYXJlIGFza2luZyBpdCB0byBiZSBzdG9yZWQuCisKK2B1cmxgOjoKKworCVdoZW4gdGhpcyBzcGVjaWFsIGF0dHJpYnV0ZSBpcyByZWFkIGJ5IGBnaXQgY3JlZGVudGlhbGAsIHRoZQorCXZhbHVlIGlzIHBhcnNlZCBhcyBhIFVSTCBhbmQgdHJlYXRlZCBhcyBpZiBpdHMgY29uc3RpdHVlbnQgcGFydHMKKwl3ZXJlIHJlYWQgKGUuZy4sIGB1cmw9aHR0cHM6Ly9leGFtcGxlLmNvbWAgd291bGQgYmVoYXZlIGFzIGlmCisJYHByb3RvY29sPWh0dHBzYCBhbmQgYGhvc3Q9ZXhhbXBsZS5jb21gIGhhZCBiZWVuIHByb3ZpZGVkKS4gVGhpcworCWNhbiBoZWxwIGNhbGxlcnMgYXZvaWQgcGFyc2luZyBVUkxzIHRoZW1zZWx2ZXMuCisKKwlOb3RlIHRoYXQgc3BlY2lmeWluZyBhIHByb3RvY29sIGlzIG1hbmRhdG9yeSBhbmQgaWYgdGhlIFVSTAorCWRvZXNuJ3Qgc3BlY2lmeSBhIGhvc3RuYW1lIChlLmcuLCAiY2VydDovLy9wYXRoL3RvL2ZpbGUiKSB0aGUKKwljcmVkZW50aWFsIHdpbGwgY29udGFpbiBhIGhvc3RuYW1lIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZSBpcyBhbgorCWVtcHR5IHN0cmluZy4KKworCUNvbXBvbmVudHMgd2hpY2ggYXJlIG1pc3NpbmcgZnJvbSB0aGUgVVJMIChlLmcuLCB0aGVyZSBpcyBubworCXVzZXJuYW1lIGluIHRoZSBleGFtcGxlIGFib3ZlKSB3aWxsIGJlIGxlZnQgdW5zZXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNleHBvcnRjb21taXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzZXhwb3J0Y29tbWl0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDE1NGI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzZXhwb3J0Y29tbWl0LnR4dApAQCAtMCwwICsxLDExOCBAQAorZ2l0LWN2c2V4cG9ydGNvbW1pdCgxKQorPT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY3ZzZXhwb3J0Y29tbWl0IC0gRXhwb3J0IGEgc2luZ2xlIGNvbW1pdCB0byBhIENWUyBjaGVja291dAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjdnNleHBvcnRjb21taXQnIFstaF0gWy11XSBbLXZdIFstY10gWy1QXSBbLXBdIFstYV0gWy1kIGN2c3Jvb3RdCisJWy13IGN2c3dvcmtkaXJdIFstV10gWy1mXSBbLW0gbXNncHJlZml4XSBbUEFSRU5UQ09NTUlUXSBDT01NSVRJRAorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorRXhwb3J0cyBhIGNvbW1pdCBmcm9tIEdpdCB0byBhIENWUyBjaGVja291dCwgbWFraW5nIGl0IGVhc2llcgordG8gbWVyZ2UgcGF0Y2hlcyBmcm9tIGEgR2l0IHJlcG9zaXRvcnkgaW50byBhIENWUyByZXBvc2l0b3J5LgorCitTcGVjaWZ5IHRoZSBuYW1lIG9mIGEgQ1ZTIGNoZWNrb3V0IHVzaW5nIHRoZSAtdyBzd2l0Y2ggb3IgZXhlY3V0ZSBpdAorZnJvbSB0aGUgcm9vdCBvZiB0aGUgQ1ZTIHdvcmtpbmcgY29weS4gSW4gdGhlIGxhdHRlciBjYXNlIEdJVF9ESVIgbXVzdAorYmUgZGVmaW5lZC4gU2VlIGV4YW1wbGVzIGJlbG93LgorCitJdCBkb2VzIGl0cyBiZXN0IHRvIGRvIHRoZSBzYWZlIHRoaW5nLCBpdCB3aWxsIGNoZWNrIHRoYXQgdGhlIGZpbGVzIGFyZQordW5jaGFuZ2VkIGFuZCB1cCB0byBkYXRlIGluIHRoZSBDVlMgY2hlY2tvdXQsIGFuZCBpdCB3aWxsIG5vdCBhdXRvY29tbWl0CitieSBkZWZhdWx0LgorCitTdXBwb3J0cyBmaWxlIGFkZGl0aW9ucywgcmVtb3ZhbHMsIGFuZCBjb21taXRzIHRoYXQgYWZmZWN0IGJpbmFyeSBmaWxlcy4KKworSWYgdGhlIGNvbW1pdCBpcyBhIG1lcmdlIGNvbW1pdCwgeW91IG11c3QgdGVsbCAnZ2l0IGN2c2V4cG9ydGNvbW1pdCcgd2hhdAorcGFyZW50IHRoZSBjaGFuZ2VzZXQgc2hvdWxkIGJlIGRvbmUgYWdhaW5zdC4KKworT1BUSU9OUworLS0tLS0tLQorCistYzo6CisJQ29tbWl0IGF1dG9tYXRpY2FsbHkgaWYgdGhlIHBhdGNoIGFwcGxpZWQgY2xlYW5seS4gSXQgd2lsbCBub3QKKwljb21taXQgaWYgYW55IGh1bmtzIGZhaWwgdG8gYXBwbHkgb3IgdGhlcmUgd2VyZSBvdGhlciBwcm9ibGVtcy4KKworLXA6OgorCUJlIHBlZGFudGljIChwYXJhbm9pZCkgd2hlbiBhcHBseWluZyBwYXRjaGVzLiBJbnZva2VzIHBhdGNoIHdpdGgKKwktLWZ1eno9MAorCistYTo6CisJQWRkIGF1dGhvcnNoaXAgaW5mb3JtYXRpb24uIEFkZHMgQXV0aG9yIGxpbmUsIGFuZCBDb21taXR0ZXIgKGlmCisJZGlmZmVyZW50IGZyb20gQXV0aG9yKSB0byB0aGUgbWVzc2FnZS4KKworLWQ6OgorCVNldCBhbiBhbHRlcm5hdGl2ZSBDVlNST09UIHRvIHVzZS4gIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIENWUworCS1kIHBhcmFtZXRlci4gIFVzdWFsbHkgdXNlcnMgd2lsbCBub3Qgd2FudCB0byBzZXQgdGhpcywgZXhjZXB0CisJaWYgdXNpbmcgQ1ZTIGluIGFuIGFzeW1tZXRyaWMgZmFzaGlvbi4KKworLWY6OgorCUZvcmNlIHRoZSBtZXJnZSBldmVuIGlmIHRoZSBmaWxlcyBhcmUgbm90IHVwIHRvIGRhdGUuCisKKy1QOjoKKwlGb3JjZSB0aGUgcGFyZW50IGNvbW1pdCwgZXZlbiBpZiBpdCBpcyBub3QgYSBkaXJlY3QgcGFyZW50LgorCistbTo6CisJUHJlcGVuZCB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aCB0aGUgcHJvdmlkZWQgcHJlZml4LgorCVVzZWZ1bCBmb3IgcGF0Y2ggc2VyaWVzIGFuZCB0aGUgbGlrZS4KKworLXU6OgorCVVwZGF0ZSBhZmZlY3RlZCBmaWxlcyBmcm9tIENWUyByZXBvc2l0b3J5IGJlZm9yZSBhdHRlbXB0aW5nIGV4cG9ydC4KKworLWs6OgorCVJldmVyc2UgQ1ZTIGtleXdvcmQgZXhwYW5zaW9uIChlLmcuICRSZXZpc2lvbjogMS4yLjMuNCQKKwliZWNvbWVzICRSZXZpc2lvbiQpIGluIHdvcmtpbmcgQ1ZTIGNoZWNrb3V0IGJlZm9yZSBhcHBseWluZyBwYXRjaC4KKworLXc6OgorCVNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBDVlMgY2hlY2tvdXQgdG8gdXNlIGZvciB0aGUgZXhwb3J0LiBUaGlzCisJb3B0aW9uIGRvZXMgbm90IHJlcXVpcmUgR0lUX0RJUiB0byBiZSBzZXQgYmVmb3JlIGV4ZWN1dGlvbiBpZiB0aGUKKwljdXJyZW50IGRpcmVjdG9yeSBpcyB3aXRoaW4gYSBHaXQgcmVwb3NpdG9yeS4gIFRoZSBkZWZhdWx0IGlzIHRoZQorCXZhbHVlIG9mICdjdnNleHBvcnRjb21taXQuY3ZzZGlyJy4KKworLVc6OgorCVRlbGwgY3ZzZXhwb3J0Y29tbWl0IHRoYXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgbm90IG9ubHkKKwlhIEdpdCBjaGVja291dCwgYnV0IGFsc28gdGhlIENWUyBjaGVja291dC4gIFRoZXJlZm9yZSwgR2l0IHdpbGwKKwlyZXNldCB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIHBhcmVudCBjb21taXQgYmVmb3JlIHByb2NlZWRpbmcuCisKKy12OjoKKwlWZXJib3NlLgorCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCitjdnNleHBvcnRjb21taXQuY3ZzZGlyOjoKKwlUaGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgQ1ZTIGNoZWNrb3V0IHRvIHVzZSBmb3IgdGhlIGV4cG9ydC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK01lcmdlIG9uZSBwYXRjaCBpbnRvIENWUzo6CisrCistLS0tLS0tLS0tLS0KKyQgZXhwb3J0IEdJVF9ESVI9fi9wcm9qZWN0Ly5naXQKKyQgY2Qgfi9wcm9qZWN0X2N2c19jaGVja291dAorJCBnaXQgY3ZzZXhwb3J0Y29tbWl0IC12IDxjb21taXQtc2hhMT4KKyQgY3ZzIGNvbW1pdCAtRiAubXNnIDxmaWxlcz4KKy0tLS0tLS0tLS0tLQorCitNZXJnZSBvbmUgcGF0Y2ggaW50byBDVlMgKC1jIGFuZCAtdyBvcHRpb25zKS4gVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIHdpdGhpbiB0aGUgR2l0IFJlcG86OgorKworLS0tLS0tLS0tLS0tCisJJCBnaXQgY3ZzZXhwb3J0Y29tbWl0IC12IC1jIC13IH4vcHJvamVjdF9jdnNfY2hlY2tvdXQgPGNvbW1pdC1zaGExPgorLS0tLS0tLS0tLS0tCisKK01lcmdlIHBlbmRpbmcgcGF0Y2hlcyBpbnRvIENWUyBhdXRvbWF0aWNhbGx5IC0tIG9ubHkgaWYgeW91IHJlYWxseSBrbm93IHdoYXQgeW91IGFyZSBkb2luZzo6CisrCistLS0tLS0tLS0tLS0KKyQgZXhwb3J0IEdJVF9ESVI9fi9wcm9qZWN0Ly5naXQKKyQgY2Qgfi9wcm9qZWN0X2N2c19jaGVja291dAorJCBnaXQgY2hlcnJ5IGN2c2hlYWQgbXloZWFkIHwgc2VkIC1uICdzL14rIC8vcCcgfCB4YXJncyAtbDEgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAtcCAtdgorLS0tLS0tLS0tLS0tCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxZWJlZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC50eHQKQEAgLTAsMCArMSwyMjggQEAKK2dpdC1jdnNpbXBvcnQoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWN2c2ltcG9ydCAtIFNhbHZhZ2UgeW91ciBkYXRhIG91dCBvZiBhbm90aGVyIFNDTSBwZW9wbGUgbG92ZSB0byBoYXRlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGN2c2ltcG9ydCcgWy1vIDxicmFuY2gtZm9yLUhFQUQ+XSBbLWhdIFstdl0gWy1kIDxDVlNST09UPl0KKwkgICAgICBbLUEgPGF1dGhvci1jb252LWZpbGU+XSBbLXAgPG9wdGlvbnMtZm9yLWN2c3BzPl0gWy1QIDxmaWxlPl0KKwkgICAgICBbLUMgPGdpdF9yZXBvc2l0b3J5Pl0gWy16IDxmdXp6Pl0gWy1pXSBbLWtdIFstdV0gWy1zIDxzdWJzdD5dCisJICAgICAgWy1hXSBbLW1dIFstTSA8cmVnZXg+XSBbLVMgPHJlZ2V4Pl0gWy1MIDxjb21taXRsaW1pdD5dCisJICAgICAgWy1yIDxyZW1vdGU+XSBbLVJdIFs8Q1ZTX21vZHVsZT5dCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisqV0FSTklORzoqIGBnaXQgY3ZzaW1wb3J0YCB1c2VzIGN2c3BzIHZlcnNpb24gMiwgd2hpY2ggaXMgY29uc2lkZXJlZAorZGVwcmVjYXRlZDsgaXQgZG9lcyBub3Qgd29yayB3aXRoIGN2c3BzIHZlcnNpb24gMyBhbmQgbGF0ZXIuICBJZiB5b3UgYXJlCitwZXJmb3JtaW5nIGEgb25lLXNob3QgaW1wb3J0IG9mIGEgQ1ZTIHJlcG9zaXRvcnkgY29uc2lkZXIgdXNpbmcKK2h0dHA6Ly9jdnMyc3ZuLnRpZ3Jpcy5vcmcvY3ZzMmdpdC5odG1sW2N2czJnaXRdIG9yCitodHRwOi8vd3d3LmNhdGIub3JnL2Vzci9jdnMtZmFzdC1leHBvcnQvW2N2cy1mYXN0LWV4cG9ydF0uCisKK0ltcG9ydHMgYSBDVlMgcmVwb3NpdG9yeSBpbnRvIEdpdC4gSXQgd2lsbCBlaXRoZXIgY3JlYXRlIGEgbmV3CityZXBvc2l0b3J5LCBvciBpbmNyZW1lbnRhbGx5IGltcG9ydCBpbnRvIGFuIGV4aXN0aW5nIG9uZS4KKworU3BsaXR0aW5nIHRoZSBDVlMgbG9nIGludG8gcGF0Y2ggc2V0cyBpcyBkb25lIGJ5ICdjdnNwcycuCitBdCBsZWFzdCB2ZXJzaW9uIDIuMSBpcyByZXF1aXJlZC4KKworKldBUk5JTkc6KiBmb3IgY2VydGFpbiBzaXR1YXRpb25zIHRoZSBpbXBvcnQgbGVhZHMgdG8gaW5jb3JyZWN0IHJlc3VsdHMuCitQbGVhc2Ugc2VlIHRoZSBzZWN0aW9uIDw8aXNzdWVzLElTU1VFUz4+IGZvciBmdXJ0aGVyIHJlZmVyZW5jZS4KKworWW91IHNob3VsZCAqbmV2ZXIqIGRvIGFueSB3b3JrIG9mIHlvdXIgb3duIG9uIHRoZSBicmFuY2hlcyB0aGF0IGFyZQorY3JlYXRlZCBieSAnZ2l0IGN2c2ltcG9ydCcuICBCeSBkZWZhdWx0IGluaXRpYWwgaW1wb3J0IHdpbGwgY3JlYXRlIGFuZCBwb3B1bGF0ZSBhCisibWFzdGVyIiBicmFuY2ggZnJvbSB0aGUgQ1ZTIHJlcG9zaXRvcnkncyBtYWluIGJyYW5jaCB3aGljaCB5b3UncmUgZnJlZQordG8gd29yayB3aXRoOyBhZnRlciB0aGF0LCB5b3UgbmVlZCB0byAnZ2l0IG1lcmdlJyBpbmNyZW1lbnRhbCBpbXBvcnRzLCBvcgorYW55IENWUyBicmFuY2hlcywgeW91cnNlbGYuICBJdCBpcyBhZHZpc2FibGUgdG8gc3BlY2lmeSBhIG5hbWVkIHJlbW90ZSB2aWEKKy1yIHRvIHNlcGFyYXRlIGFuZCBwcm90ZWN0IHRoZSBpbmNvbWluZyBicmFuY2hlcy4KKworSWYgeW91IGludGVuZCB0byBzZXQgdXAgYSBzaGFyZWQgcHVibGljIHJlcG9zaXRvcnkgdGhhdCBhbGwgZGV2ZWxvcGVycyBjYW4KK3JlYWQvd3JpdGUsIG9yIGlmIHlvdSB3YW50IHRvIHVzZSBsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0sIHRoZW4geW91Citwcm9iYWJseSB3YW50IHRvIG1ha2UgYSBiYXJlIGNsb25lIG9mIHRoZSBpbXBvcnRlZCByZXBvc2l0b3J5LAorYW5kIHVzZSB0aGUgY2xvbmUgYXMgdGhlIHNoYXJlZCByZXBvc2l0b3J5LgorU2VlIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XS4KKworCitPUFRJT05TCistLS0tLS0tCistdjo6CisJVmVyYm9zaXR5OiBsZXQgJ2N2c2ltcG9ydCcgcmVwb3J0IHdoYXQgaXQgaXMgZG9pbmcuCisKKy1kIDxDVlNST09UPjo6CisJVGhlIHJvb3Qgb2YgdGhlIENWUyBhcmNoaXZlLiBNYXkgYmUgbG9jYWwgKGEgc2ltcGxlIHBhdGgpIG9yIHJlbW90ZTsKKwljdXJyZW50bHksIG9ubHkgdGhlIDpsb2NhbDosIDpleHQ6IGFuZCA6cHNlcnZlcjogYWNjZXNzIG1ldGhvZHMKKwlhcmUgc3VwcG9ydGVkLiBJZiBub3QgZ2l2ZW4sICdnaXQgY3ZzaW1wb3J0JyB3aWxsIHRyeSB0byByZWFkIGl0CisJZnJvbSBgQ1ZTL1Jvb3RgLiBJZiBubyBzdWNoIGZpbGUgZXhpc3RzLCBpdCBjaGVja3MgZm9yIHRoZQorCWBDVlNST09UYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworPENWU19tb2R1bGU+OjoKKwlUaGUgQ1ZTIG1vZHVsZSB5b3Ugd2FudCB0byBpbXBvcnQuIFJlbGF0aXZlIHRvIDxDVlNST09UPi4KKwlJZiBub3QgZ2l2ZW4sICdnaXQgY3ZzaW1wb3J0JyB0cmllcyB0byByZWFkIGl0IGZyb20KKwlgQ1ZTL1JlcG9zaXRvcnlgLgorCistQyA8dGFyZ2V0LWRpcj46OgorCVRoZSBHaXQgcmVwb3NpdG9yeSB0byBpbXBvcnQgdG8uICBJZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QKKyAgICAgICAgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC4gIERlZmF1bHQgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCistciA8cmVtb3RlPjo6CisJVGhlIEdpdCByZW1vdGUgdG8gaW1wb3J0IHRoaXMgQ1ZTIHJlcG9zaXRvcnkgaW50by4KKwlNb3ZlcyBhbGwgQ1ZTIGJyYW5jaGVzIGludG8gcmVtb3Rlcy88cmVtb3RlPi88YnJhbmNoPgorCWFraW4gdG8gdGhlIHdheSAnZ2l0IGNsb25lJyB1c2VzICdvcmlnaW4nIGJ5IGRlZmF1bHQuCisKKy1vIDxicmFuY2gtZm9yLUhFQUQ+OjoKKwlXaGVuIG5vIHJlbW90ZSBpcyBzcGVjaWZpZWQgKHZpYSAtcikgdGhlIGBIRUFEYCBicmFuY2gKKwlmcm9tIENWUyBpcyBpbXBvcnRlZCB0byB0aGUgJ29yaWdpbicgYnJhbmNoIHdpdGhpbiB0aGUgR2l0CisJcmVwb3NpdG9yeSwgYXMgYEhFQURgIGFscmVhZHkgaGFzIGEgc3BlY2lhbCBtZWFuaW5nIGZvciBHaXQuCisJV2hlbiBhIHJlbW90ZSBpcyBzcGVjaWZpZWQgdGhlIGBIRUFEYCBicmFuY2ggaXMgbmFtZWQKKwlyZW1vdGVzLzxyZW1vdGU+L21hc3RlciBtaXJyb3JpbmcgJ2dpdCBjbG9uZScgYmVoYXZpb3VyLgorCVVzZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBpbXBvcnQgaW50byBhIGRpZmZlcmVudAorCWJyYW5jaC4KKysKK1VzZSAnLW8gbWFzdGVyJyBmb3IgY29udGludWluZyBhbiBpbXBvcnQgdGhhdCB3YXMgaW5pdGlhbGx5IGRvbmUgYnkKK3RoZSBvbGQgY3ZzMmdpdCB0b29sLgorCistaTo6CisJSW1wb3J0LW9ubHk6IGRvbid0IHBlcmZvcm0gYSBjaGVja291dCBhZnRlciBpbXBvcnRpbmcuICBUaGlzIG9wdGlvbgorCWVuc3VyZXMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCByZW1haW4gdW50b3VjaGVkIGFuZCB3aWxsCisJbm90IGNyZWF0ZSB0aGVtIGlmIHRoZXkgZG8gbm90IGV4aXN0LgorCistazo6CisJS2lsbCBrZXl3b3Jkczogd2lsbCBleHRyYWN0IGZpbGVzIHdpdGggJy1raycgZnJvbSB0aGUgQ1ZTIGFyY2hpdmUKKwl0byBhdm9pZCBub2lzeSBjaGFuZ2VzZXRzLiBIaWdobHkgcmVjb21tZW5kZWQsIGJ1dCBvZmYgYnkgZGVmYXVsdAorCXRvIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgd2l0aCBlYXJseSBpbXBvcnRlZCB0cmVlcy4KKworLXU6OgorCUNvbnZlcnQgdW5kZXJzY29yZXMgaW4gdGFnIGFuZCBicmFuY2ggbmFtZXMgdG8gZG90cy4KKworLXMgPHN1YnN0Pjo6CisJU3Vic3RpdHV0ZSB0aGUgY2hhcmFjdGVyICIvIiBpbiBicmFuY2ggbmFtZXMgd2l0aCA8c3Vic3Q+CisKKy1wIDxvcHRpb25zLWZvci1jdnNwcz46OgorCUFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgY3ZzcHMuCisJVGhlIG9wdGlvbnMgYC11YCBhbmQgJy1BJyBhcmUgaW1wbGljaXQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBoZXJlLgorKworSWYgeW91IG5lZWQgdG8gcGFzcyBtdWx0aXBsZSBvcHRpb25zLCBzZXBhcmF0ZSB0aGVtIHdpdGggYSBjb21tYS4KKworLXogPGZ1eno+OjoKKwlQYXNzIHRoZSB0aW1lc3RhbXAgZnV6eiBmYWN0b3IgdG8gY3ZzcHMsIGluIHNlY29uZHMuIElmIHVuc2V0LAorCWN2c3BzIGRlZmF1bHRzIHRvIDMwMHMuCisKKy1QIDxjdnNwcy1vdXRwdXQtZmlsZT46OgorCUluc3RlYWQgb2YgY2FsbGluZyBjdnNwcywgcmVhZCB0aGUgcHJvdmlkZWQgY3ZzcHMgb3V0cHV0IGZpbGUuIFVzZWZ1bAorCWZvciBkZWJ1Z2dpbmcgb3Igd2hlbiBjdnNwcyBpcyBiZWluZyBoYW5kbGVkIG91dHNpZGUgY3ZzaW1wb3J0LgorCistbTo6CisJQXR0ZW1wdCB0byBkZXRlY3QgbWVyZ2VzIGJhc2VkIG9uIHRoZSBjb21taXQgbWVzc2FnZS4gVGhpcyBvcHRpb24KKwl3aWxsIGVuYWJsZSBkZWZhdWx0IHJlZ2V4ZXMgdGhhdCB0cnkgdG8gY2FwdHVyZSB0aGUgc291cmNlCisJYnJhbmNoIG5hbWUgZnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UuCisKKy1NIDxyZWdleD46OgorCUF0dGVtcHQgdG8gZGV0ZWN0IG1lcmdlcyBiYXNlZCBvbiB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aCBhIGN1c3RvbQorCXJlZ2V4LiBJdCBjYW4gYmUgdXNlZCB3aXRoIGAtbWAgdG8gZW5hYmxlIHRoZSBkZWZhdWx0IHJlZ2V4ZXMKKwlhcyB3ZWxsLiBZb3UgbXVzdCBlc2NhcGUgZm9yd2FyZCBzbGFzaGVzLgorKworVGhlIHJlZ2V4IG11c3QgY2FwdHVyZSB0aGUgc291cmNlIGJyYW5jaCBuYW1lIGluICQxLgorKworVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgc2V2ZXJhbCB0aW1lcyB0byBwcm92aWRlIHNldmVyYWwgZGV0ZWN0aW9uIHJlZ2V4ZXMuCisKKy1TIDxyZWdleD46OgorCVNraXAgcGF0aHMgbWF0Y2hpbmcgdGhlIHJlZ2V4LgorCistYTo6CisJSW1wb3J0IGFsbCBjb21taXRzLCBpbmNsdWRpbmcgcmVjZW50IG9uZXMuIGN2c2ltcG9ydCBieSBkZWZhdWx0CisJc2tpcHMgY29tbWl0cyB0aGF0IGhhdmUgYSB0aW1lc3RhbXAgbGVzcyB0aGFuIDEwIG1pbnV0ZXMgYWdvLgorCistTCA8bGltaXQ+OjoKKwlMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgaW1wb3J0ZWQuIFdvcmthcm91bmQgZm9yIGNhc2VzIHdoZXJlCisJY3ZzaW1wb3J0IGxlYWtzIG1lbW9yeS4KKworLUEgPGF1dGhvci1jb252LWZpbGU+OjoKKwlDVlMgYnkgZGVmYXVsdCB1c2VzIHRoZSBVbml4IHVzZXJuYW1lIHdoZW4gd3JpdGluZyBpdHMKKwljb21taXQgbG9ncy4gVXNpbmcgdGhpcyBvcHRpb24gYW5kIGFuIGF1dGhvci1jb252LWZpbGUKKwltYXBzIHRoZSBuYW1lIHJlY29yZGVkIGluIENWUyB0byBhdXRob3IgbmFtZSwgZS1tYWlsIGFuZAorCW9wdGlvbmFsIHRpbWUgem9uZToKKysKKy0tLS0tLS0tLQorCWV4b249QW5kcmVhcyBFcmljc3NvbiA8YWVAb3A1LnNlPgorCXNwYXduPVNpbW9uIFBhd24gPHNwYXduQGZyb2ctcG9uZC5vcmc+IEFtZXJpY2EvQ2hpY2FnbworCistLS0tLS0tLS0KKysKKydnaXQgY3ZzaW1wb3J0JyB3aWxsIG1ha2UgaXQgYXBwZWFyIGFzIHRob3NlIGF1dGhvcnMgaGFkCit0aGVpciBHSVRfQVVUSE9SX05BTUUgYW5kIEdJVF9BVVRIT1JfRU1BSUwgc2V0IHByb3Blcmx5CithbGwgYWxvbmcuICBJZiBhIHRpbWUgem9uZSBpcyBzcGVjaWZpZWQsIEdJVF9BVVRIT1JfREFURSB3aWxsCitoYXZlIHRoZSBjb3JyZXNwb25kaW5nIG9mZnNldCBhcHBsaWVkLgorKworRm9yIGNvbnZlbmllbmNlLCB0aGlzIGRhdGEgaXMgc2F2ZWQgdG8gYCRHSVRfRElSL2N2cy1hdXRob3JzYAorZWFjaCB0aW1lIHRoZSAnLUEnIG9wdGlvbiBpcyBwcm92aWRlZCBhbmQgcmVhZCBmcm9tIHRoYXQgc2FtZQorZmlsZSBlYWNoIHRpbWUgJ2dpdCBjdnNpbXBvcnQnIGlzIHJ1bi4KKysKK0l0IGlzIG5vdCByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyBmZWF0dXJlIGlmIHlvdSBpbnRlbmQgdG8KK2V4cG9ydCBjaGFuZ2VzIGJhY2sgdG8gQ1ZTIGFnYWluIGxhdGVyIHdpdGgKKydnaXQgY3ZzZXhwb3J0Y29tbWl0Jy4KKworLVI6OgorCUdlbmVyYXRlIGEgYCRHSVRfRElSL2N2cy1yZXZpc2lvbnNgIGZpbGUgY29udGFpbmluZyBhIG1hcHBpbmcgZnJvbSBDVlMKKwlyZXZpc2lvbiBudW1iZXJzIHRvIG5ld2x5LWNyZWF0ZWQgR2l0IGNvbW1pdCBJRHMuICBUaGUgZ2VuZXJhdGVkIGZpbGUKKwl3aWxsIGNvbnRhaW4gb25lIGxpbmUgZm9yIGVhY2ggKGZpbGVuYW1lLCByZXZpc2lvbikgcGFpciBpbXBvcnRlZDsKKwllYWNoIGxpbmUgd2lsbCBsb29rIGxpa2UKKysKKy0tLS0tLS0tLQorc3JjL3dpZGdldC5jIDEuMSAxZDg2MmYxNzNjZGM3MzI1YjZmYTZkMmFlMWNmZDYxZmQxYjUxMmI3CistLS0tLS0tLS0KKysKK1RoZSByZXZpc2lvbiBkYXRhIGlzIGFwcGVuZGVkIHRvIHRoZSBmaWxlIGlmIGl0IGFscmVhZHkgZXhpc3RzLCBmb3IgdXNlIHdoZW4KK2RvaW5nIGluY3JlbWVudGFsIGltcG9ydHMuCisrCitUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZnVsIGlmIHlvdSBoYXZlIENWUyByZXZpc2lvbiBudW1iZXJzIHN0b3JlZCBpbiBjb21taXQKK21lc3NhZ2VzLCBidWctdHJhY2tpbmcgc3lzdGVtcywgZW1haWwgYXJjaGl2ZXMsIGFuZCB0aGUgbGlrZS4KKworLWg6OgorCVByaW50IGEgc2hvcnQgdXNhZ2UgbWVzc2FnZSBhbmQgZXhpdC4KKworT1VUUFVUCistLS0tLS0KK0lmIGAtdmAgaXMgc3BlY2lmaWVkLCB0aGUgc2NyaXB0IHJlcG9ydHMgd2hhdCBpdCBpcyBkb2luZy4KKworT3RoZXJ3aXNlLCBzdWNjZXNzIGlzIGluZGljYXRlZCB0aGUgVW5peCB3YXksIGkuZS4gYnkgc2ltcGx5IGV4aXRpbmcgd2l0aAorYSB6ZXJvIGV4aXQgc3RhdHVzLgorCitbW2lzc3Vlc11dCitJU1NVRVMKKy0tLS0tLQorUHJvYmxlbXMgcmVsYXRlZCB0byB0aW1lc3RhbXBzOgorCisgKiBJZiB0aW1lc3RhbXBzIG9mIGNvbW1pdHMgaW4gdGhlIENWUyByZXBvc2l0b3J5IGFyZSBub3Qgc3RhYmxlIGVub3VnaAorICAgdG8gYmUgdXNlZCBmb3Igb3JkZXJpbmcgY29tbWl0cyBjaGFuZ2VzIG1heSBzaG93IHVwIGluIHRoZSB3cm9uZworICAgb3JkZXIuCisgKiBJZiBhbnkgZmlsZXMgd2VyZSBldmVyICJjdnMgaW1wb3J0ImVkIG1vcmUgdGhhbiBvbmNlIChlLmcuLCBpbXBvcnQgb2YKKyAgIG1vcmUgdGhhbiBvbmUgdmVuZG9yIHJlbGVhc2UpIHRoZSBIRUFEIGNvbnRhaW5zIHRoZSB3cm9uZyBjb250ZW50LgorICogSWYgdGhlIHRpbWVzdGFtcCBvcmRlciBvZiBkaWZmZXJlbnQgZmlsZXMgY3Jvc3MgdGhlIHJldmlzaW9uIG9yZGVyCisgICB3aXRoaW4gdGhlIGNvbW1pdCBtYXRjaGluZyB0aW1lIHdpbmRvdyB0aGUgb3JkZXIgb2YgY29tbWl0cyBtYXkgYmUKKyAgIHdyb25nLgorCitQcm9ibGVtcyByZWxhdGVkIHRvIGJyYW5jaGVzOgorCisgKiBCcmFuY2hlcyBvbiB3aGljaCBubyBjb21taXRzIGhhdmUgYmVlbiBtYWRlIGFyZSBub3QgaW1wb3J0ZWQuCisgKiBBbGwgZmlsZXMgZnJvbSB0aGUgYnJhbmNoaW5nIHBvaW50IGFyZSBhZGRlZCB0byBhIGJyYW5jaCBldmVuIGlmCisgICBuZXZlciBhZGRlZCBpbiBDVlMuCisgKiBUaGlzIGFwcGxpZXMgdG8gZmlsZXMgYWRkZWQgdG8gdGhlIHNvdXJjZSBicmFuY2ggKmFmdGVyKiBhIGRhdWdodGVyCisgICBicmFuY2ggd2FzIGNyZWF0ZWQ6IGlmIHByZXZpb3VzbHkgbm8gY29tbWl0IHdhcyBtYWRlIG9uIHRoZSBkYXVnaHRlcgorICAgYnJhbmNoIHRoZXkgd2lsbCBlcnJvbmVvdXNseSBiZSBhZGRlZCB0byB0aGUgZGF1Z2h0ZXIgYnJhbmNoIGluIGdpdC4KKworUHJvYmxlbXMgcmVsYXRlZCB0byB0YWdzOgorCisqIE11bHRpcGxlIHRhZ3Mgb24gdGhlIHNhbWUgcmV2aXNpb24gYXJlIG5vdCBpbXBvcnRlZC4KKworSWYgeW91IHN1c3BlY3QgdGhhdCBhbnkgb2YgdGhlc2UgaXNzdWVzIG1heSBhcHBseSB0byB0aGUgcmVwb3NpdG9yeSB5b3UKK3dhbnQgdG8gaW1wb3J0LCBjb25zaWRlciB1c2luZyBjdnMyZ2l0OgorCisqIGN2czJnaXQgKHBhcnQgb2YgY3ZzMnN2biksIGBodHRwOi8vc3VidmVyc2lvbi5hcGFjaGUub3JnL2AKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNzZXJ2ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3Zzc2VydmVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjFjNzFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3Zzc2VydmVyLnR4dApAQCAtMCwwICsxLDQzMyBAQAorZ2l0LWN2c3NlcnZlcigxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY3Zzc2VydmVyIC0gQSBDVlMgc2VydmVyIGVtdWxhdG9yIGZvciBHaXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCisKK1NTSDoKKworW3ZlcnNlXQorZXhwb3J0IENWU19TRVJWRVI9ImdpdCBjdnNzZXJ2ZXIiCisnY3ZzJyAtZCA6ZXh0OnVzZXJAc2VydmVyL3BhdGgvcmVwby5naXQgY28gPEhFQURfbmFtZT4KKworcHNlcnZlciAoL2V0Yy9pbmV0ZC5jb25mKToKKworW3ZlcnNlXQorY3ZzcHNlcnZlciBzdHJlYW0gdGNwIG5vd2FpdCBub2JvZHkgL3Vzci9iaW4vZ2l0LWN2c3NlcnZlciBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIKKworVXNhZ2U6CisKK1t2ZXJzZV0KKydnaXQtY3Zzc2VydmVyJyBbPG9wdGlvbnM+XSBbcHNlcnZlcnxzZXJ2ZXJdIFs8ZGlyZWN0b3J5PiAuLi5dCisKK09QVElPTlMKKy0tLS0tLS0KKworQWxsIHRoZXNlIG9wdGlvbnMgb2J2aW91c2x5IG9ubHkgbWFrZSBzZW5zZSBpZiBlbmZvcmNlZCBieSB0aGUgc2VydmVyIHNpZGUuCitUaGV5IGhhdmUgYmVlbiBpbXBsZW1lbnRlZCB0byByZXNlbWJsZSB0aGUgbGlua2dpdDpnaXQtZGFlbW9uWzFdIG9wdGlvbnMgYXMKK2Nsb3NlbHkgYXMgcG9zc2libGUuCisKKy0tYmFzZS1wYXRoIDxwYXRoPjo6CitQcmVwZW5kICdwYXRoJyB0byByZXF1ZXN0ZWQgQ1ZTUk9PVAorCistLXN0cmljdC1wYXRoczo6CitEb24ndCBhbGxvdyByZWN1cnNpbmcgaW50byBzdWJkaXJlY3RvcmllcworCistLWV4cG9ydC1hbGw6OgorRG9uJ3QgY2hlY2sgZm9yIGBnaXRjdnMuZW5hYmxlZGAgaW4gY29uZmlnLiBZb3UgYWxzbyBoYXZlIHRvIHNwZWNpZnkgYSBsaXN0CitvZiBhbGxvd2VkIGRpcmVjdG9yaWVzIChzZWUgYmVsb3cpIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzIG9wdGlvbi4KKworLVY6OgorLS12ZXJzaW9uOjoKK1ByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKworLWg6OgorLUg6OgorLS1oZWxwOjoKK1ByaW50IHVzYWdlIGluZm9ybWF0aW9uIGFuZCBleGl0CisKKzxkaXJlY3Rvcnk+OjoKK1lvdSBjYW4gc3BlY2lmeSBhIGxpc3Qgb2YgYWxsb3dlZCBkaXJlY3Rvcmllcy4gSWYgbm8gZGlyZWN0b3JpZXMKK2FyZSBnaXZlbiwgYWxsIGFyZSBhbGxvd2VkLiBUaGlzIGlzIGFuIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb24sIGdpdGN2cworYWNjZXNzIHN0aWxsIG5lZWRzIHRvIGJlIGVuYWJsZWQgYnkgdGhlIGBnaXRjdnMuZW5hYmxlZGAgY29uZmlnIG9wdGlvbgordW5sZXNzIGAtLWV4cG9ydC1hbGxgIHdhcyBnaXZlbiwgdG9vLgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGFwcGxpY2F0aW9uIGlzIGEgQ1ZTIGVtdWxhdGlvbiBsYXllciBmb3IgR2l0LgorCitJdCBpcyBoaWdobHkgZnVuY3Rpb25hbC4gSG93ZXZlciwgbm90IGFsbCBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCwKK2FuZCBmb3IgdGhvc2UgbWV0aG9kcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCwKK25vdCBhbGwgc3dpdGNoZXMgYXJlIGltcGxlbWVudGVkLgorCitUZXN0aW5nIGhhcyBiZWVuIGRvbmUgdXNpbmcgYm90aCB0aGUgQ0xJIENWUyBjbGllbnQsIGFuZCB0aGUgRWNsaXBzZSBDVlMKK3BsdWdpbi4gTW9zdCBmdW5jdGlvbmFsaXR5IHdvcmtzIGZpbmUgd2l0aCBib3RoIG9mIHRoZXNlIGNsaWVudHMuCisKK0xJTUlUQVRJT05TCistLS0tLS0tLS0tLQorCitDVlMgY2xpZW50cyBjYW5ub3QgdGFnLCBicmFuY2ggb3IgcGVyZm9ybSBHaXQgbWVyZ2VzLgorCisnZ2l0LWN2c3NlcnZlcicgbWFwcyBHaXQgYnJhbmNoZXMgdG8gQ1ZTIG1vZHVsZXMuIFRoaXMgaXMgdmVyeSBkaWZmZXJlbnQKK2Zyb20gd2hhdCBtb3N0IENWUyB1c2VycyB3b3VsZCBleHBlY3Qgc2luY2UgaW4gQ1ZTIG1vZHVsZXMgdXN1YWxseSByZXByZXNlbnQKK29uZSBvciBtb3JlIGRpcmVjdG9yaWVzLgorCitJTlNUQUxMQVRJT04KKy0tLS0tLS0tLS0tLQorCisxLiBJZiB5b3UgYXJlIGdvaW5nIHRvIG9mZmVyIENWUyBhY2Nlc3MgdmlhIHBzZXJ2ZXIsIGFkZCBhIGxpbmUgaW4KKyAgIC9ldGMvaW5ldGQuY29uZiBsaWtlCisrCistLQorLS0tLS0tCisgICBjdnNwc2VydmVyIHN0cmVhbSB0Y3Agbm93YWl0IG5vYm9keSBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIKKworLS0tLS0tCitOb3RlOiBTb21lIGluZXRkIHNlcnZlcnMgbGV0IHlvdSBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBleGVjdXRhYmxlCitpbmRlcGVuZGVudGx5IG9mIHRoZSB2YWx1ZSBvZiBhcmd2WzBdIChpLmUuIHRoZSBuYW1lIHRoZSBwcm9ncmFtIGFzc3VtZXMKK2l0IHdhcyBleGVjdXRlZCB3aXRoKS4gSW4gdGhpcyBjYXNlIHRoZSBjb3JyZWN0IGxpbmUgaW4gL2V0Yy9pbmV0ZC5jb25mCitsb29rcyBsaWtlCisKKy0tLS0tLQorICAgY3ZzcHNlcnZlciBzdHJlYW0gdGNwIG5vd2FpdCBub2JvZHkgL3Vzci9iaW4vZ2l0LWN2c3NlcnZlciBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIKKworLS0tLS0tCisKK09ubHkgYW5vbnltb3VzIGFjY2VzcyBpcyBwcm92aWRlZCBieSBwc2VydmUgYnkgZGVmYXVsdC4gVG8gY29tbWl0IHlvdQord2lsbCBoYXZlIHRvIGNyZWF0ZSBwc2VydmVyIGFjY291bnRzLCBzaW1wbHkgYWRkIGEgZ2l0Y3ZzLmF1dGhkYgorc2V0dGluZyBpbiB0aGUgY29uZmlnIGZpbGUgb2YgdGhlIHJlcG9zaXRvcmllcyB5b3Ugd2FudCB0aGUgY3Zzc2VydmVyCit0byBhbGxvdyB3cml0ZXMgdG8sIGZvciBleGFtcGxlOgorCistLS0tLS0KKworICAgW2dpdGN2c10KKwlhdXRoZGIgPSAvZXRjL2N2c3NlcnZlci9wYXNzd2QKKworLS0tLS0tCitUaGUgZm9ybWF0IG9mIHRoZXNlIGZpbGVzIGlzIHVzZXJuYW1lIGZvbGxvd2VkIGJ5IHRoZSBlbmNyeXB0ZWQgcGFzc3dvcmQsCitmb3IgZXhhbXBsZToKKworLS0tLS0tCisgICBteXVzZXI6JDFPeXg1cjltZEdaMgorICAgbXl1c2VyOiQxJEJBKUAkdmJuTUpNRHltN3RBMzJBYW1Ycm0uLworLS0tLS0tCitZb3UgY2FuIHVzZSB0aGUgJ2h0cGFzc3dkJyBmYWNpbGl0eSB0aGF0IGNvbWVzIHdpdGggQXBhY2hlIHRvIG1ha2UgdGhlc2UKK2ZpbGVzLCBidXQgQXBhY2hlJ3MgTUQ1IGNyeXB0IG1ldGhvZCBkaWZmZXJzIGZyb20gdGhlIG9uZSB1c2VkIGJ5IG1vc3QgQworbGlicmFyeSdzIGNyeXB0KCkgZnVuY3Rpb24sIHNvIGRvbid0IHVzZSB0aGUgLW0gb3B0aW9uLgorCitBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gcHJvZHVjZSB0aGUgcGFzc3dvcmQgd2l0aCBwZXJsJ3MgY3J5cHQoKSBvcGVyYXRvcjoKKy0tLS0tCisgICBwZXJsIC1lICdteSAoJHVzZXIsICRwYXNzKSA9IEBBUkdWOyBwcmludGYgIiVzOiVzXG4iLCAkdXNlciwgY3J5cHQoJHVzZXIsICRwYXNzKScgJFVTRVIgcGFzc3dvcmQKKy0tLS0tCisKK1RoZW4gcHJvdmlkZSB5b3VyIHBhc3N3b3JkIHZpYSB0aGUgcHNlcnZlciBtZXRob2QsIGZvciBleGFtcGxlOgorLS0tLS0tCisgICBjdnMgLWQ6cHNlcnZlcjpzb21ldXNlcjpzb21lcGFzc3dvcmQgPGF0PiBzZXJ2ZXIvcGF0aC9yZXBvLmdpdCBjbyA8SEVBRF9uYW1lPgorLS0tLS0tCitObyBzcGVjaWFsIHNldHVwIGlzIG5lZWRlZCBmb3IgU1NIIGFjY2Vzcywgb3RoZXIgdGhhbiBoYXZpbmcgR2l0IHRvb2xzCitpbiB0aGUgUEFUSC4gSWYgeW91IGhhdmUgY2xpZW50cyB0aGF0IGRvIG5vdCBhY2NlcHQgdGhlIENWU19TRVJWRVIKK2Vudmlyb25tZW50IHZhcmlhYmxlLCB5b3UgY2FuIHJlbmFtZSAnZ2l0LWN2c3NlcnZlcicgdG8gYGN2c2AuCisKK05vdGU6IE5ld2VyIENWUyB2ZXJzaW9ucyAoPj0gMS4xMi4xMSkgYWxzbyBzdXBwb3J0IHNwZWNpZnlpbmcKK0NWU19TRVJWRVIgZGlyZWN0bHkgaW4gQ1ZTUk9PVCBsaWtlCisKKy0tLS0tLQorY3ZzIC1kICI6ZXh0O0NWU19TRVJWRVI9Z2l0IGN2c3NlcnZlcjp1c2VyQHNlcnZlci9wYXRoL3JlcG8uZ2l0IiBjbyA8SEVBRF9uYW1lPgorLS0tLS0tCitUaGlzIGhhcyB0aGUgYWR2YW50YWdlIHRoYXQgaXQgd2lsbCBiZSBzYXZlZCBpbiB5b3VyICdDVlMvUm9vdCcgZmlsZXMgYW5kCit5b3UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBhbHdheXMgc2V0dGluZyB0aGUgY29ycmVjdCBlbnZpcm9ubWVudAordmFyaWFibGUuICBTU0ggdXNlcnMgcmVzdHJpY3RlZCB0byAnZ2l0LXNoZWxsJyBkb24ndCBuZWVkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0Cit3aXRoIENWU19TRVJWRVIgKGFuZCBzaG91bGRuJ3QpIGFzICdnaXQtc2hlbGwnIHVuZGVyc3RhbmRzIGBjdnNgIHRvIG1lYW4KKydnaXQtY3Zzc2VydmVyJyBhbmQgcHJldGVuZHMgdGhhdCB0aGUgb3RoZXIgZW5kIHJ1bnMgdGhlIHJlYWwgJ2N2cycgYmV0dGVyLgorLS0KKzIuIEZvciBlYWNoIHJlcG8gdGhhdCB5b3Ugd2FudCBhY2Nlc3NpYmxlIGZyb20gQ1ZTIHlvdSBuZWVkIHRvIGVkaXQgY29uZmlnIGluCisgICB0aGUgcmVwbyBhbmQgYWRkIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi4KKysKKy0tCistLS0tLS0KKyAgIFtnaXRjdnNdCisgICAgICAgIGVuYWJsZWQ9MQorICAgICAgICAjIG9wdGlvbmFsIGZvciBkZWJ1Z2dpbmcKKwlsb2dGaWxlPS9wYXRoL3RvL2xvZ2ZpbGUKKworLS0tLS0tCitOb3RlOiB5b3UgbmVlZCB0byBlbnN1cmUgZWFjaCB1c2VyIHRoYXQgaXMgZ29pbmcgdG8gaW52b2tlICdnaXQtY3Zzc2VydmVyJyBoYXMKK3dyaXRlIGFjY2VzcyB0byB0aGUgbG9nIGZpbGUgYW5kIHRvIHRoZSBkYXRhYmFzZSAoc2VlCis8PGRiYmFja2VuZCxEYXRhYmFzZSBCYWNrZW5kPj4uIElmIHlvdSB3YW50IHRvIG9mZmVyIHdyaXRlIGFjY2VzcyBvdmVyCitTU0gsIHRoZSB1c2VycyBvZiBjb3Vyc2UgYWxzbyBuZWVkIHdyaXRlIGFjY2VzcyB0byB0aGUgR2l0IHJlcG9zaXRvcnkgaXRzZWxmLgorCitZb3UgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IGVhY2ggcmVwb3NpdG9yeSBpcyAiYmFyZSIgKHdpdGhvdXQgYSBHaXQgaW5kZXgKK2ZpbGUpIGZvciBgY3ZzIGNvbW1pdGAgdG8gd29yay4gU2VlIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XS4KKworW1tjb25maWdhY2Nlc3NtZXRob2RdXQorQWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGNhbiBhbHNvIGJlIG92ZXJyaWRkZW4gZm9yIGEgc3BlY2lmaWMgbWV0aG9kIG9mCithY2Nlc3MuIFZhbGlkIG1ldGhvZCBuYW1lcyBhcmUgImV4dCIgKGZvciBTU0ggYWNjZXNzKSBhbmQgInBzZXJ2ZXIiLiBUaGUKK2ZvbGxvd2luZyBleGFtcGxlIGNvbmZpZ3VyYXRpb24gd291bGQgZGlzYWJsZSBwc2VydmVyIGFjY2VzcyB3aGlsZSBzdGlsbAorYWxsb3dpbmcgYWNjZXNzIG92ZXIgU1NILgorLS0tLS0tCisgICBbZ2l0Y3ZzXQorICAgICAgICBlbmFibGVkPTAKKworICAgW2dpdGN2cyAiZXh0Il0KKyAgICAgICAgZW5hYmxlZD0xCistLS0tLS0KKy0tCiszLiBJZiB5b3UgZGlkbid0IHNwZWNpZnkgdGhlIENWU1JPT1QvQ1ZTX1NFUlZFUiBkaXJlY3RseSBpbiB0aGUgY2hlY2tvdXQgY29tbWFuZCwKKyAgIGF1dG9tYXRpY2FsbHkgc2F2aW5nIGl0IGluIHlvdXIgJ0NWUy9Sb290JyBmaWxlcywgdGhlbiB5b3UgbmVlZCB0byBzZXQgdGhlbQorICAgZXhwbGljaXRseSBpbiB5b3VyIGVudmlyb25tZW50LiAgQ1ZTUk9PVCBzaG91bGQgYmUgc2V0IGFzIHBlciBub3JtYWwsIGJ1dCB0aGUKKyAgIGRpcmVjdG9yeSBzaG91bGQgcG9pbnQgYXQgdGhlIGFwcHJvcHJpYXRlIEdpdCByZXBvLiAgQXMgYWJvdmUsIGZvciBTU0ggY2xpZW50cworICAgX25vdF8gcmVzdHJpY3RlZCB0byAnZ2l0LXNoZWxsJywgQ1ZTX1NFUlZFUiBzaG91bGQgYmUgc2V0IHRvICdnaXQtY3Zzc2VydmVyJy4KKysKKy0tCistLS0tLS0KKyAgICAgZXhwb3J0IENWU1JPT1Q9OmV4dDp1c2VyQHNlcnZlcjovdmFyL2dpdC9wcm9qZWN0LmdpdAorICAgICBleHBvcnQgQ1ZTX1NFUlZFUj0iZ2l0IGN2c3NlcnZlciIKKy0tLS0tLQorLS0KKzQuIEZvciBTU0ggY2xpZW50cyB0aGF0IHdpbGwgbWFrZSBjb21taXRzLCBtYWtlIHN1cmUgdGhlaXIgc2VydmVyLXNpZGUKKyAgIC5zc2gvZW52aXJvbm1lbnQgZmlsZXMgKG9yIC5iYXNocmMsIGV0Yy4sIGFjY29yZGluZyB0byB0aGVpciBzcGVjaWZpYyBzaGVsbCkKKyAgIGV4cG9ydCBhcHByb3ByaWF0ZSB2YWx1ZXMgZm9yIEdJVF9BVVRIT1JfTkFNRSwgR0lUX0FVVEhPUl9FTUFJTCwKKyAgIEdJVF9DT01NSVRURVJfTkFNRSwgYW5kIEdJVF9DT01NSVRURVJfRU1BSUwuICBGb3IgU1NIIGNsaWVudHMgd2hvc2UgbG9naW4KKyAgIHNoZWxsIGlzIGJhc2gsIC5iYXNocmMgbWF5IGJlIGEgcmVhc29uYWJsZSBhbHRlcm5hdGl2ZS4KKworNS4gQ2xpZW50cyBzaG91bGQgbm93IGJlIGFibGUgdG8gY2hlY2sgb3V0IHRoZSBwcm9qZWN0LiBVc2UgdGhlIENWUyAnbW9kdWxlJworICAgbmFtZSB0byBpbmRpY2F0ZSB3aGF0IEdpdCAnaGVhZCcgeW91IHdhbnQgdG8gY2hlY2sgb3V0LiAgVGhpcyBhbHNvIHNldHMgdGhlCisgICBuYW1lIG9mIHlvdXIgbmV3bHkgY2hlY2tlZC1vdXQgZGlyZWN0b3J5LCB1bmxlc3MgeW91IHRlbGwgaXQgb3RoZXJ3aXNlIHdpdGgKKyAgIGAtZCA8ZGlyX25hbWU+YC4gIEZvciBleGFtcGxlLCB0aGlzIGNoZWNrcyBvdXQgJ21hc3RlcicgYnJhbmNoIHRvIHRoZQorICAgYHByb2plY3QtbWFzdGVyYCBkaXJlY3Rvcnk6CisrCistLS0tLS0KKyAgICAgY3ZzIGNvIC1kIHByb2plY3QtbWFzdGVyIG1hc3RlcgorLS0tLS0tCisKK1tbZGJiYWNrZW5kXV0KK0RBVEFCQVNFIEJBQ0tFTkQKKy0tLS0tLS0tLS0tLS0tLS0KKworJ2dpdC1jdnNzZXJ2ZXInIHVzZXMgb25lIGRhdGFiYXNlIHBlciBHaXQgaGVhZCAoaS5lLiBDVlMgbW9kdWxlKSB0bworc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcG9zaXRvcnkgdG8gbWFpbnRhaW4gY29uc2lzdGVudAorQ1ZTIHJldmlzaW9uIG51bWJlcnMuIFRoZSBkYXRhYmFzZSBuZWVkcyB0byBiZQordXBkYXRlZCAoaS5lLiB3cml0dGVuIHRvKSBhZnRlciBldmVyeSBjb21taXQuCisKK0lmIHRoZSBjb21taXQgaXMgZG9uZSBkaXJlY3RseSBieSB1c2luZyBgZ2l0YCAoYXMgb3Bwb3NlZCB0bwordXNpbmcgJ2dpdC1jdnNzZXJ2ZXInKSB0aGUgdXBkYXRlIHdpbGwgbmVlZCB0byBoYXBwZW4gb24gdGhlCituZXh0IHJlcG9zaXRvcnkgYWNjZXNzIGJ5ICdnaXQtY3Zzc2VydmVyJywgaW5kZXBlbmRlbnQgb2YKK2FjY2VzcyBtZXRob2QgYW5kIHJlcXVlc3RlZCBvcGVyYXRpb24uCisKK1RoYXQgbWVhbnMgdGhhdCBldmVuIGlmIHlvdSBvZmZlciBvbmx5IHJlYWQgYWNjZXNzIChlLmcuIGJ5IHVzaW5nCit0aGUgcHNlcnZlciBtZXRob2QpLCAnZ2l0LWN2c3NlcnZlcicgc2hvdWxkIGhhdmUgd3JpdGUgYWNjZXNzIHRvCit0aGUgZGF0YWJhc2UgdG8gd29yayByZWxpYWJseSAob3RoZXJ3aXNlIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZQordGhhdCB0aGUgZGF0YWJhc2UgaXMgdXAgdG8gZGF0ZSBhbnkgdGltZSAnZ2l0LWN2c3NlcnZlcicgaXMgZXhlY3V0ZWQpLgorCitCeSBkZWZhdWx0IGl0IHVzZXMgU1FMaXRlIGRhdGFiYXNlcyBpbiB0aGUgR2l0IGRpcmVjdG9yeSwgbmFtZWQKK2BnaXRjdnMuPG1vZHVsZV9uYW1lPi5zcWxpdGVgLiBOb3RlIHRoYXQgdGhlIFNRTGl0ZSBiYWNrZW5kIGNyZWF0ZXMKK3RlbXBvcmFyeSBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGRhdGFiYXNlIGZpbGUgb24KK3dyaXRlIHNvIGl0IG1pZ2h0IG5vdCBiZSBlbm91Z2ggdG8gZ3JhbnQgdGhlIHVzZXJzIHVzaW5nCisnZ2l0LWN2c3NlcnZlcicgd3JpdGUgYWNjZXNzIHRvIHRoZSBkYXRhYmFzZSBmaWxlIHdpdGhvdXQgZ3JhbnRpbmcKK3RoZW0gd3JpdGUgYWNjZXNzIHRvIHRoZSBkaXJlY3RvcnksIHRvby4KKworVGhlIGRhdGFiYXNlIGNhbm5vdCBiZSByZWxpYWJseSByZWdlbmVyYXRlZCBpbiBhCitjb25zaXN0ZW50IGZvcm0gYWZ0ZXIgdGhlIGJyYW5jaCBpdCBpcyB0cmFja2luZyBoYXMgY2hhbmdlZC4KK0V4YW1wbGU6IEZvciBtZXJnZWQgYnJhbmNoZXMsICdnaXQtY3Zzc2VydmVyJyBvbmx5IHRyYWNrcworb25lIGJyYW5jaCBvZiBkZXZlbG9wbWVudCwgYW5kIGFmdGVyIGEgJ2dpdCBtZXJnZScgYW4KK2luY3JlbWVudGFsbHkgdXBkYXRlZCBkYXRhYmFzZSBtYXkgdHJhY2sgYSBkaWZmZXJlbnQgYnJhbmNoCit0aGFuIGEgZGF0YWJhc2UgcmVnZW5lcmF0ZWQgZnJvbSBzY3JhdGNoLCBjYXVzaW5nIGluY29uc2lzdGVudAorQ1ZTIHJldmlzaW9uIG51bWJlcnMuIGBnaXQtY3Zzc2VydmVyYCBoYXMgbm8gd2F5IG9mIGtub3dpbmcgd2hpY2gKK2JyYW5jaCBpdCB3b3VsZCBoYXZlIHBpY2tlZCBpZiBpdCBoYWQgYmVlbiBydW4gaW5jcmVtZW50YWxseQorcHJlLW1lcmdlLiBTbyBpZiB5b3UgaGF2ZSB0byBmdWxseSBvciBwYXJ0aWFsbHkgKGZyb20gb2xkCitiYWNrdXApIHJlZ2VuZXJhdGUgdGhlIGRhdGFiYXNlLCB5b3Ugc2hvdWxkIGJlIHN1c3BpY2lvdXMKK29mIHByZS1leGlzdGluZyBDVlMgc2FuZGJveGVzLgorCitZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgZGF0YWJhc2UgYmFja2VuZCB3aXRoIHRoZSBmb2xsb3dpbmcKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGVzOgorCitDb25maWd1cmluZyBkYXRhYmFzZSBiYWNrZW5kCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKydnaXQtY3Zzc2VydmVyJyB1c2VzIHRoZSBQZXJsIERCSSBtb2R1bGUuIFBsZWFzZSBhbHNvIHJlYWQKK2l0cyBkb2N1bWVudGF0aW9uIGlmIGNoYW5naW5nIHRoZXNlIHZhcmlhYmxlcywgZXNwZWNpYWxseQorYWJvdXQgYERCSS0+Y29ubmVjdCgpYC4KKworZ2l0Y3ZzLmRiTmFtZTo6CisJRGF0YWJhc2UgbmFtZS4gVGhlIGV4YWN0IG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUKKwlzZWxlY3RlZCBkYXRhYmFzZSBkcml2ZXIsIGZvciBTUUxpdGUgdGhpcyBpcyBhIGZpbGVuYW1lLgorCVN1cHBvcnRzIHZhcmlhYmxlIHN1YnN0aXR1dGlvbiAoc2VlIGJlbG93KS4gTWF5CisJbm90IGNvbnRhaW4gc2VtaWNvbG9ucyAoYDtgKS4KKwlEZWZhdWx0OiAnJUdnaXRjdnMuJW0uc3FsaXRlJworCitnaXRjdnMuZGJEcml2ZXI6OgorCVVzZWQgREJJIGRyaXZlci4gWW91IGNhbiBzcGVjaWZ5IGFueSBhdmFpbGFibGUgZHJpdmVyCisJZm9yIHRoaXMgaGVyZSwgYnV0IGl0IG1pZ2h0IG5vdCB3b3JrLiBjdnNzZXJ2ZXIgaXMgdGVzdGVkCisJd2l0aCAnREJEOjpTUUxpdGUnLCByZXBvcnRlZCB0byB3b3JrIHdpdGgKKwknREJEOjpQZycsIGFuZCByZXBvcnRlZCAqbm90KiB0byB3b3JrIHdpdGggJ0RCRDo6bXlzcWwnLgorCVBsZWFzZSByZWdhcmQgdGhpcyBhcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZS4gTWF5IG5vdAorCWNvbnRhaW4gY29sb25zIChgOmApLgorCURlZmF1bHQ6ICdTUUxpdGUnCisKK2dpdGN2cy5kYnVzZXI6OgorCURhdGFiYXNlIHVzZXIuIE9ubHkgdXNlZnVsIGlmIHNldHRpbmcgYGRiRHJpdmVyYCwgc2luY2UKKwlTUUxpdGUgaGFzIG5vIGNvbmNlcHQgb2YgZGF0YWJhc2UgdXNlcnMuIFN1cHBvcnRzIHZhcmlhYmxlCisJc3Vic3RpdHV0aW9uIChzZWUgYmVsb3cpLgorCitnaXRjdnMuZGJQYXNzOjoKKwlEYXRhYmFzZSBwYXNzd29yZC4gIE9ubHkgdXNlZnVsIGlmIHNldHRpbmcgYGRiRHJpdmVyYCwgc2luY2UKKwlTUUxpdGUgaGFzIG5vIGNvbmNlcHQgb2YgZGF0YWJhc2UgcGFzc3dvcmRzLgorCitnaXRjdnMuZGJUYWJsZU5hbWVQcmVmaXg6OgorCURhdGFiYXNlIHRhYmxlIG5hbWUgcHJlZml4LiAgU3VwcG9ydHMgdmFyaWFibGUgc3Vic3RpdHV0aW9uCisJKHNlZSBiZWxvdykuICBBbnkgbm9uLWFscGhhYmV0aWMgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkCisJd2l0aCB1bmRlcnNjb3Jlcy4KKworQWxsIHZhcmlhYmxlcyBjYW4gYWxzbyBiZSBzZXQgcGVyIGFjY2VzcyBtZXRob2QsIHNlZSA8PGNvbmZpZ2FjY2Vzc21ldGhvZCxhYm92ZT4+LgorCitWYXJpYWJsZSBzdWJzdGl0dXRpb24KK15eXl5eXl5eXl5eXl5eXl5eXl5eXgorSW4gYGRiRHJpdmVyYCBhbmQgYGRiVXNlcmAgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisKKyVHOjoKKwlHaXQgZGlyZWN0b3J5IG5hbWUKKyVnOjoKKwlHaXQgZGlyZWN0b3J5IG5hbWUsIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCBmb3IKKwlhbHBoYW51bWVyaWMgb25lcywgYC5gLCBhbmQgYC1gIGFyZSByZXBsYWNlZCB3aXRoCisJYF9gICh0aGlzIHNob3VsZCBtYWtlIGl0IGVhc2llciB0byB1c2UgdGhlIGRpcmVjdG9yeQorCW5hbWUgaW4gYSBmaWxlbmFtZSBpZiB3YW50ZWQpCislbTo6CisJQ1ZTIG1vZHVsZS9HaXQgaGVhZCBuYW1lCislYTo6CisJYWNjZXNzIG1ldGhvZCAob25lIG9mICJleHQiIG9yICJwc2VydmVyIikKKyV1OjoKKwlOYW1lIG9mIHRoZSB1c2VyIHJ1bm5pbmcgJ2dpdC1jdnNzZXJ2ZXInLgorCUlmIG5vIG5hbWUgY2FuIGJlIGRldGVybWluZWQsIHRoZQorCW51bWVyaWMgdWlkIGlzIHVzZWQuCisKK0VOVklST05NRU5UCistLS0tLS0tLS0tLQorCitUaGVzZSB2YXJpYWJsZXMgb2J2aWF0ZSB0aGUgbmVlZCBmb3IgY29tbWFuZC1saW5lIG9wdGlvbnMgaW4gc29tZQorY2lyY3Vtc3RhbmNlcywgYWxsb3dpbmcgZWFzaWVyIHJlc3RyaWN0ZWQgdXNhZ2UgdGhyb3VnaCBnaXQtc2hlbGwuCisKK0dJVF9DVlNTRVJWRVJfQkFTRV9QQVRIIHRha2VzIHRoZSBwbGFjZSBvZiB0aGUgYXJndW1lbnQgdG8gLS1iYXNlLXBhdGguCisKK0dJVF9DVlNTRVJWRVJfUk9PVCBzcGVjaWZpZXMgYSBzaW5nbGUtZGlyZWN0b3J5IHdoaXRlbGlzdC4gVGhlCityZXBvc2l0b3J5IG11c3Qgc3RpbGwgYmUgY29uZmlndXJlZCB0byBhbGxvdyBhY2Nlc3MgdGhyb3VnaAorZ2l0LWN2c3NlcnZlciwgYXMgZGVzY3JpYmVkIGFib3ZlLgorCitXaGVuIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgc2V0LCB0aGUgY29ycmVzcG9uZGluZworY29tbWFuZC1saW5lIGFyZ3VtZW50cyBtYXkgbm90IGJlIHVzZWQuCisKK0VDTElQU0UgQ1ZTIENMSUVOVCBOT1RFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIGdldCBhIGNoZWNrb3V0IHdpdGggdGhlIEVjbGlwc2UgQ1ZTIGNsaWVudDoKKworMS4gU2VsZWN0ICJDcmVhdGUgYSBuZXcgcHJvamVjdCAtPiBGcm9tIENWUyBjaGVja291dCIKKzIuIENyZWF0ZSBhIG5ldyBsb2NhdGlvbi4gU2VlIHRoZSBub3RlcyBiZWxvdyBmb3IgZGV0YWlscyBvbiBob3cgdG8gY2hvb3NlIHRoZQorICAgcmlnaHQgcHJvdG9jb2wuCiszLiBCcm93c2UgdGhlICdtb2R1bGVzJyBhdmFpbGFibGUuIEl0IHdpbGwgZ2l2ZSB5b3UgYSBsaXN0IG9mIHRoZSBoZWFkcyBpbgorICAgdGhlIHJlcG9zaXRvcnkuIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGJyb3dzZSB0aGUgdHJlZSBmcm9tIHRoZXJlLiBPbmx5CisgICB0aGUgaGVhZHMuCis0LiBQaWNrIGBIRUFEYCB3aGVuIGl0IGFza3Mgd2hhdCBicmFuY2gvdGFnIHRvIGNoZWNrIG91dC4gVW50aWNrIHRoZQorICAgImxhdW5jaCBjb21taXQgd2l6YXJkIiB0byBhdm9pZCBjb21taXR0aW5nIHRoZSAucHJvamVjdCBmaWxlLgorCitQcm90b2NvbCBub3RlczogSWYgeW91IGFyZSB1c2luZyBhbm9ueW1vdXMgYWNjZXNzIHZpYSBwc2VydmVyLCBqdXN0IHNlbGVjdCB0aGF0LgorVGhvc2UgdXNpbmcgU1NIIGFjY2VzcyBzaG91bGQgY2hvb3NlIHRoZSAnZXh0JyBwcm90b2NvbCwgYW5kIGNvbmZpZ3VyZSAnZXh0JworYWNjZXNzIG9uIHRoZSBQcmVmZXJlbmNlcy0+VGVhbS0+Q1ZTLT5FeHRDb25uZWN0aW9uIHBhbmUuIFNldCBDVlNfU0VSVkVSIHRvCisiYGdpdCBjdnNzZXJ2ZXJgIi4gTm90ZSB0aGF0IHBhc3N3b3JkIHN1cHBvcnQgaXMgbm90IGdvb2Qgd2hlbiB1c2luZyAnZXh0JywKK3lvdSB3aWxsIGRlZmluaXRlbHkgd2FudCB0byBoYXZlIFNTSCBrZXlzIHNldHVwLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGp1c3QgdXNlIHRoZSBub24tc3RhbmRhcmQgZXh0c3NoIHByb3RvY29sIHRoYXQgRWNsaXBzZQorb2ZmZXIuIEluIHRoYXQgY2FzZSBDVlNfU0VSVkVSIGlzIGlnbm9yZWQsIGFuZCB5b3Ugd2lsbCBoYXZlIHRvIHJlcGxhY2UKK3RoZSBjdnMgdXRpbGl0eSBvbiB0aGUgc2VydmVyIHdpdGggJ2dpdC1jdnNzZXJ2ZXInIG9yIG1hbmlwdWxhdGUgeW91ciBgLmJhc2hyY2AKK3NvIHRoYXQgY2FsbGluZyAnY3ZzJyBlZmZlY3RpdmVseSBjYWxscyAnZ2l0LWN2c3NlcnZlcicuCisKK0NMSUVOVFMgS05PV04gVE8gV09SSworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0gQ1ZTIDEuMTIuOSBvbiBEZWJpYW4KKy0gQ1ZTIDEuMTEuMTcgb24gTWFjT1NYIChmcm9tIEZpbmsgcGFja2FnZSkKKy0gRWNsaXBzZSAzLjAsIDMuMS4yIG9uIE1hY09TWCAoc2VlIEVjbGlwc2UgQ1ZTIENsaWVudCBOb3RlcykKKy0gVG9ydG9pc2VDVlMKKworT1BFUkFUSU9OUyBTVVBQT1JURUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCB0aGUgb3BlcmF0aW9ucyByZXF1aXJlZCBmb3Igbm9ybWFsIHVzZSBhcmUgc3VwcG9ydGVkLCBpbmNsdWRpbmcKK2NoZWNrb3V0LCBkaWZmLCBzdGF0dXMsIHVwZGF0ZSwgbG9nLCBhZGQsIHJlbW92ZSwgY29tbWl0LgorCitNb3N0IENWUyBjb21tYW5kIGFyZ3VtZW50cyB0aGF0IHJlYWQgQ1ZTIHRhZ3Mgb3IgcmV2aXNpb24gbnVtYmVycworKHR5cGljYWxseSAtcikgd29yaywgYW5kIGFsc28gc3VwcG9ydCBhbnkgZ2l0IHJlZnNwZWMKKyh0YWcsIGJyYW5jaCwgY29tbWl0IElELCBldGMpLgorSG93ZXZlciwgQ1ZTIHJldmlzaW9uIG51bWJlcnMgZm9yIG5vbi1kZWZhdWx0IGJyYW5jaGVzIGFyZSBub3Qgd2VsbAorZW11bGF0ZWQsIGFuZCBjdnMgbG9nIGRvZXMgbm90IHNob3cgdGFncyBvciBicmFuY2hlcyBhdAorYWxsLiAgKE5vbi1tYWluLWJyYW5jaCBDVlMgcmV2aXNpb24gbnVtYmVycyBzdXBlcmZpY2lhbGx5IHJlc2VtYmxlIENWUworcmV2aXNpb24gbnVtYmVycywgYnV0IHRoZXkgYWN0dWFsbHkgZW5jb2RlIGEgZ2l0IGNvbW1pdCBJRCBkaXJlY3RseSwKK3JhdGhlciB0aGFuIHJlcHJlc2VudCB0aGUgbnVtYmVyIG9mIHJldmlzaW9ucyBzaW5jZSB0aGUgYnJhbmNoIHBvaW50LikKKworTm90ZSB0aGF0IHRoZXJlIGFyZSB0d28gd2F5cyB0byBjaGVja291dCBhIHBhcnRpY3VsYXIgYnJhbmNoLgorQXMgZGVzY3JpYmVkIGVsc2V3aGVyZSBvbiB0aGlzIHBhZ2UsIHRoZSAibW9kdWxlIiBwYXJhbWV0ZXIKK29mIGN2cyBjaGVja291dCBpcyBpbnRlcnByZXRlZCBhcyBhIGJyYW5jaCBuYW1lLCBhbmQgaXQgYmVjb21lcwordGhlIG1haW4gYnJhbmNoLiAgSXQgcmVtYWlucyB0aGUgbWFpbiBicmFuY2ggZm9yIGEgZ2l2ZW4gc2FuZGJveAorZXZlbiBpZiB5b3UgdGVtcG9yYXJpbHkgbWFrZSBhbm90aGVyIGJyYW5jaCBzdGlja3kgd2l0aAorY3ZzIHVwZGF0ZSAtci4gIEFsdGVybmF0aXZlbHksIHRoZSAtciBhcmd1bWVudCBjYW4gaW5kaWNhdGUKK3NvbWUgb3RoZXIgYnJhbmNoIHRvIGFjdHVhbGx5IGNoZWNrb3V0LCBldmVuIHRob3VnaCB0aGUgbW9kdWxlCitpcyBzdGlsbCB0aGUgIm1haW4iIGJyYW5jaC4gIFRyYWRlb2ZmcyAoYXMgY3VycmVudGx5CitpbXBsZW1lbnRlZCk6IEVhY2ggbmV3ICJtb2R1bGUiIGNyZWF0ZXMgYSBuZXcgZGF0YWJhc2Ugb24gZGlzayB3aXRoCithIGhpc3RvcnkgZm9yIHRoZSBnaXZlbiBtb2R1bGUsIGFuZCBhZnRlciB0aGUgZGF0YWJhc2UgaXMgY3JlYXRlZCwKK29wZXJhdGlvbnMgYWdhaW5zdCB0aGF0IG1haW4gYnJhbmNoIGFyZSBmYXN0LiAgT3IgYWx0ZXJuYXRpdmVseSwKKy1yIGRvZXNuJ3QgdGFrZSBhbnkgZXh0cmEgZGlzayBzcGFjZSwgYnV0IG1heSBiZSBzaWduaWZpY2FudGx5IHNsb3dlciBmb3IKK21hbnkgb3BlcmF0aW9ucywgbGlrZSBjdnMgdXBkYXRlLgorCitJZiB5b3Ugd2FudCB0byByZWZlciB0byBhIGdpdCByZWZzcGVjIHRoYXQgaGFzIGNoYXJhY3RlcnMgdGhhdCBhcmUKK25vdCBhbGxvd2VkIGJ5IENWUywgeW91IGhhdmUgdHdvIG9wdGlvbnMuICBGaXJzdCwgaXQgbWF5IGp1c3Qgd29yawordG8gc3VwcGx5IHRoZSBnaXQgcmVmc3BlYyBkaXJlY3RseSB0byB0aGUgYXBwcm9wcmlhdGUgQ1ZTIC1yIGFyZ3VtZW50Oworc29tZSBDVlMgY2xpZW50cyBkb24ndCBzZWVtIHRvIGRvIG11Y2ggc2FuaXR5IGNoZWNraW5nIG9mIHRoZSBhcmd1bWVudC4KK1NlY29uZCwgaWYgdGhhdCBmYWlscywgeW91IGNhbiB1c2UgYSBzcGVjaWFsIGNoYXJhY3RlciBlc2NhcGUgbWVjaGFuaXNtCit0aGF0IG9ubHkgdXNlcyBjaGFyYWN0ZXJzIHRoYXQgYXJlIHZhbGlkIGluIENWUyB0YWdzLiAgQSBzZXF1ZW5jZQorb2YgNCBvciA1IGNoYXJhY3RlcnMgb2YgdGhlIGZvcm0gKHVuZGVyc2NvcmUgKGAiXyJgKSwgZGFzaCAoYCItImApLAorb25lIG9yIHR3byBjaGFyYWN0ZXJzLCBhbmQgZGFzaCAoYCItImApKSBjYW4gZW5jb2RlIHZhcmlvdXMgY2hhcmFjdGVycyBiYXNlZAorb24gdGhlIG9uZSBvciB0d28gbGV0dGVyczogYCJzImAgZm9yIHNsYXNoIChgIi8iYCksIGAicCJgIGZvcgorcGVyaW9kIChgIi4iYCksIGAidSJgIGZvciB1bmRlcnNjb3JlIChgIl8iYCksIG9yIHR3byBoZXhhZGVjaW1hbCBkaWdpdHMKK2ZvciBhbnkgYnl0ZSB2YWx1ZSBhdCBhbGwgKHR5cGljYWxseSBhbiBBU0NJSSBudW1iZXIsIG9yIHBlcmhhcHMgYSBwYXJ0CitvZiBhIFVURi04IGVuY29kZWQgY2hhcmFjdGVyKS4KKworTGVnYWN5IG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCAoZWRpdCwgd2F0Y2ggYW5kIHJlbGF0ZWQpLgorRXhwb3J0cyBhbmQgdGFnZ2luZyAodGFncyBhbmQgYnJhbmNoZXMpIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgc3RhZ2UuCisKK0NSTEYgTGluZSBFbmRpbmcgQ29udmVyc2lvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQnkgZGVmYXVsdCB0aGUgc2VydmVyIGxlYXZlcyB0aGUgYC1rYCBtb2RlIGJsYW5rIGZvciBhbGwgZmlsZXMsCit3aGljaCBjYXVzZXMgdGhlIENWUyBjbGllbnQgdG8gdHJlYXQgdGhlbSBhcyBhIHRleHQgZmlsZXMsIHN1YmplY3QKK3RvIGVuZC1vZi1saW5lIGNvbnZlcnNpb24gb24gc29tZSBwbGF0Zm9ybXMuCisKK1lvdSBjYW4gbWFrZSB0aGUgc2VydmVyIHVzZSB0aGUgZW5kLW9mLWxpbmUgY29udmVyc2lvbiBhdHRyaWJ1dGVzIHRvCitzZXQgdGhlIGAta2AgbW9kZXMgZm9yIGZpbGVzIGJ5IHNldHRpbmcgdGhlIGBnaXRjdnMudXNlY3JsZmF0dHJgCitjb25maWcgdmFyaWFibGUuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBtb3JlIGluZm9ybWF0aW9uCithYm91dCBlbmQtb2YtbGluZSBjb252ZXJzaW9uLgorCitBbHRlcm5hdGl2ZWx5LCBpZiBgZ2l0Y3ZzLnVzZWNybGZhdHRyYCBjb25maWcgaXMgbm90IGVuYWJsZWQKK29yIHRoZSBhdHRyaWJ1dGVzIGRvIG5vdCBhbGxvdyBhdXRvbWF0aWMgZGV0ZWN0aW9uIGZvciBhIGZpbGVuYW1lLCB0aGVuCit0aGUgc2VydmVyIHVzZXMgdGhlIGBnaXRjdnMuYWxsQmluYXJ5YCBjb25maWcgZm9yIHRoZSBkZWZhdWx0IHNldHRpbmcuCitJZiBgZ2l0Y3ZzLmFsbEJpbmFyeWAgaXMgc2V0LCB0aGVuIGZpbGUgbm90IG90aGVyd2lzZQorc3BlY2lmaWVkIHdpbGwgZGVmYXVsdCB0byAnLWtiJyBtb2RlLiBPdGhlcndpc2UgdGhlIGAta2AgbW9kZQoraXMgbGVmdCBibGFuay4gQnV0IGlmIGBnaXRjdnMuYWxsQmluYXJ5YCBpcyBzZXQgdG8gImd1ZXNzIiwgdGhlbgordGhlIGNvcnJlY3QgYC1rYCBtb2RlIHdpbGwgYmUgZ3Vlc3NlZCBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YKK3RoZSBmaWxlLgorCitGb3IgYmVzdCBjb25zaXN0ZW5jeSB3aXRoICdjdnMnLCBpdCBpcyBwcm9iYWJseSBiZXN0IHRvIG92ZXJyaWRlIHRoZQorZGVmYXVsdHMgYnkgc2V0dGluZyBgZ2l0Y3ZzLnVzZWNybGZhdHRyYCB0byB0cnVlLAorYW5kIGBnaXRjdnMuYWxsQmluYXJ5YCB0byAiZ3Vlc3MiLgorCitERVBFTkRFTkNJRVMKKy0tLS0tLS0tLS0tLQorJ2dpdC1jdnNzZXJ2ZXInIGRlcGVuZHMgb24gREJEOjpTUUxpdGUuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGFlbW9uLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRhZW1vbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjMjhjMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRhZW1vbi50eHQKQEAgLTAsMCArMSwzNDAgQEAKK2dpdC1kYWVtb24oMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWRhZW1vbiAtIEEgcmVhbGx5IHNpbXBsZSBzZXJ2ZXIgZm9yIEdpdCByZXBvc2l0b3JpZXMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGRhZW1vbicgWy0tdmVyYm9zZV0gWy0tc3lzbG9nXSBbLS1leHBvcnQtYWxsXQorCSAgICAgWy0tdGltZW91dD08bj5dIFstLWluaXQtdGltZW91dD08bj5dIFstLW1heC1jb25uZWN0aW9ucz08bj5dCisJICAgICBbLS1zdHJpY3QtcGF0aHNdIFstLWJhc2UtcGF0aD08cGF0aD5dIFstLWJhc2UtcGF0aC1yZWxheGVkXQorCSAgICAgWy0tdXNlci1wYXRoIHwgLS11c2VyLXBhdGg9PHBhdGg+XQorCSAgICAgWy0taW50ZXJwb2xhdGVkLXBhdGg9PHBhdGh0ZW1wbGF0ZT5dCisJICAgICBbLS1yZXVzZWFkZHJdIFstLWRldGFjaF0gWy0tcGlkLWZpbGU9PGZpbGU+XQorCSAgICAgWy0tZW5hYmxlPTxzZXJ2aWNlPl0gWy0tZGlzYWJsZT08c2VydmljZT5dCisJICAgICBbLS1hbGxvdy1vdmVycmlkZT08c2VydmljZT5dIFstLWZvcmJpZC1vdmVycmlkZT08c2VydmljZT5dCisJICAgICBbLS1hY2Nlc3MtaG9vaz08cGF0aD5dIFstLVtuby1daW5mb3JtYXRpdmUtZXJyb3JzXQorCSAgICAgWy0taW5ldGQgfAorCSAgICAgIFstLWxpc3Rlbj08aG9zdF9vcl9pcGFkZHI+XSBbLS1wb3J0PTxuPl0KKwkgICAgICBbLS11c2VyPTx1c2VyPiBbLS1ncm91cD08Z3JvdXA+XV1dCisJICAgICBbLS1sb2ctZGVzdGluYXRpb249KHN0ZGVycnxzeXNsb2d8bm9uZSldCisJICAgICBbPGRpcmVjdG9yeT4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQSByZWFsbHkgc2ltcGxlIFRDUCBHaXQgZGFlbW9uIHRoYXQgbm9ybWFsbHkgbGlzdGVucyBvbiBwb3J0ICJERUZBVUxUX0dJVF9QT1JUIgorYWthIDk0MTguICBJdCB3YWl0cyBmb3IgYSBjb25uZWN0aW9uIGFza2luZyBmb3IgYSBzZXJ2aWNlLCBhbmQgd2lsbCBzZXJ2ZQordGhhdCBzZXJ2aWNlIGlmIGl0IGlzIGVuYWJsZWQuCisKK0l0IHZlcmlmaWVzIHRoYXQgdGhlIGRpcmVjdG9yeSBoYXMgdGhlIG1hZ2ljIGZpbGUgImdpdC1kYWVtb24tZXhwb3J0LW9rIiwgYW5kCitpdCB3aWxsIHJlZnVzZSB0byBleHBvcnQgYW55IEdpdCBkaXJlY3RvcnkgdGhhdCBoYXNuJ3QgZXhwbGljaXRseSBiZWVuIG1hcmtlZAorZm9yIGV4cG9ydCB0aGlzIHdheSAodW5sZXNzIHRoZSBgLS1leHBvcnQtYWxsYCBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkKS4gSWYgeW91CitwYXNzIHNvbWUgZGlyZWN0b3J5IHBhdGhzIGFzICdnaXQgZGFlbW9uJyBhcmd1bWVudHMsIHlvdSBjYW4gZnVydGhlciByZXN0cmljdAordGhlIG9mZmVycyB0byBhIHdoaXRlbGlzdCBjb21wcmlzaW5nIG9mIHRob3NlLgorCitCeSBkZWZhdWx0LCBvbmx5IGB1cGxvYWQtcGFja2Agc2VydmljZSBpcyBlbmFibGVkLCB3aGljaCBzZXJ2ZXMKKydnaXQgZmV0Y2gtcGFjaycgYW5kICdnaXQgbHMtcmVtb3RlJyBjbGllbnRzLCB3aGljaCBhcmUgaW52b2tlZAorZnJvbSAnZ2l0IGZldGNoJywgJ2dpdCBwdWxsJywgYW5kICdnaXQgY2xvbmUnLgorCitUaGlzIGlzIGlkZWFsbHkgc3VpdGVkIGZvciByZWFkLW9ubHkgdXBkYXRlcywgaS5lLiwgcHVsbGluZyBmcm9tCitHaXQgcmVwb3NpdG9yaWVzLgorCitBbiBgdXBsb2FkLWFyY2hpdmVgIGFsc28gZXhpc3RzIHRvIHNlcnZlICdnaXQgYXJjaGl2ZScuCisKK09QVElPTlMKKy0tLS0tLS0KKy0tc3RyaWN0LXBhdGhzOjoKKwlNYXRjaCBwYXRocyBleGFjdGx5IChpLmUuIGRvbid0IGFsbG93ICIvZm9vL3JlcG8iIHdoZW4gdGhlIHJlYWwgcGF0aCBpcworCSIvZm9vL3JlcG8uZ2l0IiBvciAiL2Zvby9yZXBvLy5naXQiKSBhbmQgZG9uJ3QgZG8gdXNlci1yZWxhdGl2ZSBwYXRocy4KKwknZ2l0IGRhZW1vbicgd2lsbCByZWZ1c2UgdG8gc3RhcnQgd2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBubworCXdoaXRlbGlzdCBpcyBzcGVjaWZpZWQuCisKKy0tYmFzZS1wYXRoPTxwYXRoPjo6CisJUmVtYXAgYWxsIHRoZSBwYXRoIHJlcXVlc3RzIGFzIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBwYXRoLgorCVRoaXMgaXMgc29ydCBvZiAiR2l0IHJvb3QiIC0gaWYgeW91IHJ1biAnZ2l0IGRhZW1vbicgd2l0aAorCSctLWJhc2UtcGF0aD0vc3J2L2dpdCcgb24gZXhhbXBsZS5jb20sIHRoZW4gaWYgeW91IGxhdGVyIHRyeSB0byBwdWxsCisJJ2dpdDovL2V4YW1wbGUuY29tL2hlbGxvLmdpdCcsICdnaXQgZGFlbW9uJyB3aWxsIGludGVycHJldCB0aGUgcGF0aAorCWFzIGAvc3J2L2dpdC9oZWxsby5naXRgLgorCistLWJhc2UtcGF0aC1yZWxheGVkOjoKKwlJZiAtLWJhc2UtcGF0aCBpcyBlbmFibGVkIGFuZCByZXBvIGxvb2t1cCBmYWlscywgd2l0aCB0aGlzIG9wdGlvbgorCSdnaXQgZGFlbW9uJyB3aWxsIGF0dGVtcHQgdG8gbG9va3VwIHdpdGhvdXQgcHJlZml4aW5nIHRoZSBiYXNlIHBhdGguCisJVGhpcyBpcyB1c2VmdWwgZm9yIHN3aXRjaGluZyB0byAtLWJhc2UtcGF0aCB1c2FnZSwgd2hpbGUgc3RpbGwKKwlhbGxvd2luZyB0aGUgb2xkIHBhdGhzLgorCistLWludGVycG9sYXRlZC1wYXRoPTxwYXRodGVtcGxhdGU+OjoKKwlUbyBzdXBwb3J0IHZpcnR1YWwgaG9zdGluZywgYW4gaW50ZXJwb2xhdGVkIHBhdGggdGVtcGxhdGUgY2FuIGJlCisJdXNlZCB0byBkeW5hbWljYWxseSBjb25zdHJ1Y3QgYWx0ZXJuYXRlIHBhdGhzLiAgVGhlIHRlbXBsYXRlCisJc3VwcG9ydHMgJUggZm9yIHRoZSB0YXJnZXQgaG9zdG5hbWUgYXMgc3VwcGxpZWQgYnkgdGhlIGNsaWVudCBidXQKKwljb252ZXJ0ZWQgdG8gYWxsIGxvd2VyY2FzZSwgJUNIIGZvciB0aGUgY2Fub25pY2FsIGhvc3RuYW1lLAorCSVJUCBmb3IgdGhlIHNlcnZlcidzIElQIGFkZHJlc3MsICVQIGZvciB0aGUgcG9ydCBudW1iZXIsCisJYW5kICVEIGZvciB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgbmFtZWQgcmVwb3NpdG9yeS4KKwlBZnRlciBpbnRlcnBvbGF0aW9uLCB0aGUgcGF0aCBpcyB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgZGlyZWN0b3J5CisJd2hpdGVsaXN0LgorCistLWV4cG9ydC1hbGw6OgorCUFsbG93IHB1bGxpbmcgZnJvbSBhbGwgZGlyZWN0b3JpZXMgdGhhdCBsb29rIGxpa2UgR2l0IHJlcG9zaXRvcmllcworCShoYXZlIHRoZSAnb2JqZWN0cycgYW5kICdyZWZzJyBzdWJkaXJlY3RvcmllcyksIGV2ZW4gaWYgdGhleQorCWRvIG5vdCBoYXZlIHRoZSAnZ2l0LWRhZW1vbi1leHBvcnQtb2snIGZpbGUuCisKKy0taW5ldGQ6OgorCUhhdmUgdGhlIHNlcnZlciBydW4gYXMgYW4gaW5ldGQgc2VydmljZS4gSW1wbGllcyAtLXN5c2xvZyAobWF5IGJlCisJb3ZlcnJpZGRlbiB3aXRoIGAtLWxvZy1kZXN0aW5hdGlvbj1gKS4KKwlJbmNvbXBhdGlibGUgd2l0aCAtLWRldGFjaCwgLS1wb3J0LCAtLWxpc3RlbiwgLS11c2VyIGFuZCAtLWdyb3VwCisJb3B0aW9ucy4KKworLS1saXN0ZW49PGhvc3Rfb3JfaXBhZGRyPjo6CisJTGlzdGVuIG9uIGEgc3BlY2lmaWMgSVAgYWRkcmVzcyBvciBob3N0bmFtZS4gIElQIGFkZHJlc3NlcyBjYW4KKwliZSBlaXRoZXIgYW4gSVB2NCBhZGRyZXNzIG9yIGFuIElQdjYgYWRkcmVzcyBpZiBzdXBwb3J0ZWQuICBJZiBJUHY2CisJaXMgbm90IHN1cHBvcnRlZCwgdGhlbiAtLWxpc3Rlbj1ob3N0bmFtZSBpcyBhbHNvIG5vdCBzdXBwb3J0ZWQgYW5kCisJLS1saXN0ZW4gbXVzdCBiZSBnaXZlbiBhbiBJUHY0IGFkZHJlc3MuCisJQ2FuIGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlLgorCUluY29tcGF0aWJsZSB3aXRoIGAtLWluZXRkYCBvcHRpb24uCisKKy0tcG9ydD08bj46OgorCUxpc3RlbiBvbiBhbiBhbHRlcm5hdGl2ZSBwb3J0LiAgSW5jb21wYXRpYmxlIHdpdGggYC0taW5ldGRgIG9wdGlvbi4KKworLS1pbml0LXRpbWVvdXQ9PG4+OjoKKwlUaW1lb3V0IChpbiBzZWNvbmRzKSBiZXR3ZWVuIHRoZSBtb21lbnQgdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQKKwlhbmQgdGhlIGNsaWVudCByZXF1ZXN0IGlzIHJlY2VpdmVkICh0eXBpY2FsbHkgYSByYXRoZXIgbG93IHZhbHVlLCBzaW5jZQorCXRoYXQgc2hvdWxkIGJlIGJhc2ljYWxseSBpbW1lZGlhdGUpLgorCistLXRpbWVvdXQ9PG4+OjoKKwlUaW1lb3V0IChpbiBzZWNvbmRzKSBmb3Igc3BlY2lmaWMgY2xpZW50IHN1Yi1yZXF1ZXN0cy4gVGhpcyBpbmNsdWRlcworCXRoZSB0aW1lIGl0IHRha2VzIGZvciB0aGUgc2VydmVyIHRvIHByb2Nlc3MgdGhlIHN1Yi1yZXF1ZXN0IGFuZCB0aGUKKwl0aW1lIHNwZW50IHdhaXRpbmcgZm9yIHRoZSBuZXh0IGNsaWVudCdzIHJlcXVlc3QuCisKKy0tbWF4LWNvbm5lY3Rpb25zPTxuPjo6CisJTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBjbGllbnRzLCBkZWZhdWx0cyB0byAzMi4gIFNldCBpdCB0bworCXplcm8gZm9yIG5vIGxpbWl0LgorCistLXN5c2xvZzo6CisJU2hvcnQgZm9yIGAtLWxvZy1kZXN0aW5hdGlvbj1zeXNsb2dgLgorCistLWxvZy1kZXN0aW5hdGlvbj08ZGVzdGluYXRpb24+OjoKKwlTZW5kIGxvZyBtZXNzYWdlcyB0byB0aGUgc3BlY2lmaWVkIGRlc3RpbmF0aW9uLgorCU5vdGUgdGhhdCB0aGlzIG9wdGlvbiBkb2VzIG5vdCBpbXBseSAtLXZlcmJvc2UsCisJdGh1cyBieSBkZWZhdWx0IG9ubHkgZXJyb3IgY29uZGl0aW9ucyB3aWxsIGJlIGxvZ2dlZC4KKwlUaGUgPGRlc3RpbmF0aW9uPiBtdXN0IGJlIG9uZSBvZjoKKysKKy0tCitzdGRlcnI6OgorCVdyaXRlIHRvIHN0YW5kYXJkIGVycm9yLgorCU5vdGUgdGhhdCBpZiBgLS1kZXRhY2hgIGlzIHNwZWNpZmllZCwKKwl0aGUgcHJvY2VzcyBkaXNjb25uZWN0cyBmcm9tIHRoZSByZWFsIHN0YW5kYXJkIGVycm9yLAorCW1ha2luZyB0aGlzIGRlc3RpbmF0aW9uIGVmZmVjdGl2ZWx5IGVxdWl2YWxlbnQgdG8gYG5vbmVgLgorc3lzbG9nOjoKKwlXcml0ZSB0byBzeXNsb2csIHVzaW5nIHRoZSBgZ2l0LWRhZW1vbmAgaWRlbnRpZmllci4KK25vbmU6OgorCURpc2FibGUgYWxsIGxvZ2dpbmcuCistLQorKworVGhlIGRlZmF1bHQgZGVzdGluYXRpb24gaXMgYHN5c2xvZ2AgaWYgYC0taW5ldGRgIG9yIGAtLWRldGFjaGAgaXMgc3BlY2lmaWVkLAorb3RoZXJ3aXNlIGBzdGRlcnJgLgorCistLXVzZXItcGF0aDo6CistLXVzZXItcGF0aD08cGF0aD46OgorCUFsbG93IHt0aWxkZX11c2VyIG5vdGF0aW9uIHRvIGJlIHVzZWQgaW4gcmVxdWVzdHMuICBXaGVuCisJc3BlY2lmaWVkIHdpdGggbm8gcGFyYW1ldGVyLCByZXF1ZXN0cyB0bworCWdpdDovL2hvc3Qve3RpbGRlfWFsaWNlL2ZvbyBpcyB0YWtlbiBhcyBhIHJlcXVlc3QgdG8gYWNjZXNzCisJJ2ZvbycgcmVwb3NpdG9yeSBpbiB0aGUgaG9tZSBkaXJlY3Rvcnkgb2YgdXNlciBgYWxpY2VgLgorCUlmIGAtLXVzZXItcGF0aD1wYXRoYCBpcyBzcGVjaWZpZWQsIHRoZSBzYW1lIHJlcXVlc3QgaXMKKwl0YWtlbiBhcyBhIHJlcXVlc3QgdG8gYWNjZXNzIGBwYXRoL2Zvb2AgcmVwb3NpdG9yeSBpbgorCXRoZSBob21lIGRpcmVjdG9yeSBvZiB1c2VyIGBhbGljZWAuCisKKy0tdmVyYm9zZTo6CisJTG9nIGRldGFpbHMgYWJvdXQgdGhlIGluY29taW5nIGNvbm5lY3Rpb25zIGFuZCByZXF1ZXN0ZWQgZmlsZXMuCisKKy0tcmV1c2VhZGRyOjoKKwlVc2UgU09fUkVVU0VBRERSIHdoZW4gYmluZGluZyB0aGUgbGlzdGVuaW5nIHNvY2tldC4KKwlUaGlzIGFsbG93cyB0aGUgc2VydmVyIHRvIHJlc3RhcnQgd2l0aG91dCB3YWl0aW5nIGZvcgorCW9sZCBjb25uZWN0aW9ucyB0byB0aW1lIG91dC4KKworLS1kZXRhY2g6OgorCURldGFjaCBmcm9tIHRoZSBzaGVsbC4gSW1wbGllcyAtLXN5c2xvZy4KKworLS1waWQtZmlsZT08ZmlsZT46OgorCVNhdmUgdGhlIHByb2Nlc3MgaWQgaW4gJ2ZpbGUnLiAgSWdub3JlZCB3aGVuIHRoZSBkYWVtb24KKwlpcyBydW4gdW5kZXIgYC0taW5ldGRgLgorCistLXVzZXI9PHVzZXI+OjoKKy0tZ3JvdXA9PGdyb3VwPjo6CisJQ2hhbmdlIGRhZW1vbidzIHVpZCBhbmQgZ2lkIGJlZm9yZSBlbnRlcmluZyB0aGUgc2VydmljZSBsb29wLgorCVdoZW4gb25seSBgLS11c2VyYCBpcyBnaXZlbiB3aXRob3V0IGAtLWdyb3VwYCwgdGhlCisJcHJpbWFyeSBncm91cCBJRCBmb3IgdGhlIHVzZXIgaXMgdXNlZC4gIFRoZSB2YWx1ZXMgb2YKKwl0aGUgb3B0aW9uIGFyZSBnaXZlbiB0byBgZ2V0cHduYW0oMylgIGFuZCBgZ2V0Z3JuYW0oMylgCisJYW5kIG51bWVyaWMgSURzIGFyZSBub3Qgc3VwcG9ydGVkLgorKworR2l2aW5nIHRoZXNlIG9wdGlvbnMgaXMgYW4gZXJyb3Igd2hlbiB1c2VkIHdpdGggYC0taW5ldGRgOyB1c2UKK3RoZSBmYWNpbGl0eSBvZiBpbmV0IGRhZW1vbiB0byBhY2hpZXZlIHRoZSBzYW1lIGJlZm9yZSBzcGF3bmluZworJ2dpdCBkYWVtb24nIGlmIG5lZWRlZC4KKysKK0xpa2UgbWFueSBwcm9ncmFtcyB0aGF0IHN3aXRjaCB1c2VyIGlkLCB0aGUgZGFlbW9uIGRvZXMgbm90IHJlc2V0CitlbnZpcm9ubWVudCB2YXJpYWJsZXMgc3VjaCBhcyBgJEhPTUVgIHdoZW4gaXQgcnVucyBnaXQgcHJvZ3JhbXMsCitlLmcuIGB1cGxvYWQtcGFja2AgYW5kIGByZWNlaXZlLXBhY2tgLiBXaGVuIHVzaW5nIHRoaXMgb3B0aW9uLCB5b3UKK21heSBhbHNvIHdhbnQgdG8gc2V0IGFuZCBleHBvcnQgYEhPTUVgIHRvIHBvaW50IGF0IHRoZSBob21lCitkaXJlY3Rvcnkgb2YgYDx1c2VyPmAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBkYWVtb24sIGFuZCBtYWtlIHN1cmUgYW55CitHaXQgY29uZmlndXJhdGlvbiBmaWxlcyBpbiB0aGF0IGRpcmVjdG9yeSBhcmUgcmVhZGFibGUgYnkgYDx1c2VyPmAuCisKKy0tZW5hYmxlPTxzZXJ2aWNlPjo6CistLWRpc2FibGU9PHNlcnZpY2U+OjoKKwlFbmFibGUvZGlzYWJsZSB0aGUgc2VydmljZSBzaXRlLXdpZGUgcGVyIGRlZmF1bHQuICBOb3RlCisJdGhhdCBhIHNlcnZpY2UgZGlzYWJsZWQgc2l0ZS13aWRlIGNhbiBzdGlsbCBiZSBlbmFibGVkCisJcGVyIHJlcG9zaXRvcnkgaWYgaXQgaXMgbWFya2VkIG92ZXJyaWRhYmxlIGFuZCB0aGUKKwlyZXBvc2l0b3J5IGVuYWJsZXMgdGhlIHNlcnZpY2Ugd2l0aCBhIGNvbmZpZ3VyYXRpb24KKwlpdGVtLgorCistLWFsbG93LW92ZXJyaWRlPTxzZXJ2aWNlPjo6CistLWZvcmJpZC1vdmVycmlkZT08c2VydmljZT46OgorCUFsbG93L2ZvcmJpZCBvdmVycmlkaW5nIHRoZSBzaXRlLXdpZGUgZGVmYXVsdCB3aXRoIHBlcgorCXJlcG9zaXRvcnkgY29uZmlndXJhdGlvbi4gIEJ5IGRlZmF1bHQsIGFsbCB0aGUgc2VydmljZXMKKwltYXkgYmUgb3ZlcnJpZGRlbi4KKworLS1bbm8tXWluZm9ybWF0aXZlLWVycm9yczo6CisJV2hlbiBpbmZvcm1hdGl2ZSBlcnJvcnMgYXJlIHR1cm5lZCBvbiwgZ2l0LWRhZW1vbiB3aWxsIHJlcG9ydAorCW1vcmUgdmVyYm9zZSBlcnJvcnMgdG8gdGhlIGNsaWVudCwgZGlmZmVyZW50aWF0aW5nIGNvbmRpdGlvbnMKKwlsaWtlICJubyBzdWNoIHJlcG9zaXRvcnkiIGZyb20gInJlcG9zaXRvcnkgbm90IGV4cG9ydGVkIi4gVGhpcworCWlzIG1vcmUgY29udmVuaWVudCBmb3IgY2xpZW50cywgYnV0IG1heSBsZWFrIGluZm9ybWF0aW9uIGFib3V0CisJdGhlIGV4aXN0ZW5jZSBvZiB1bmV4cG9ydGVkIHJlcG9zaXRvcmllcy4gIFdoZW4gaW5mb3JtYXRpdmUKKwllcnJvcnMgYXJlIG5vdCBlbmFibGVkLCBhbGwgZXJyb3JzIHJlcG9ydCAiYWNjZXNzIGRlbmllZCIgdG8gdGhlCisJY2xpZW50LiBUaGUgZGVmYXVsdCBpcyAtLW5vLWluZm9ybWF0aXZlLWVycm9ycy4KKworLS1hY2Nlc3MtaG9vaz08cGF0aD46OgorCUV2ZXJ5IHRpbWUgYSBjbGllbnQgY29ubmVjdHMsIGZpcnN0IHJ1biBhbiBleHRlcm5hbCBjb21tYW5kCisJc3BlY2lmaWVkIGJ5IHRoZSA8cGF0aD4gd2l0aCBzZXJ2aWNlIG5hbWUgKGUuZy4gInVwbG9hZC1wYWNrIiksCisJcGF0aCB0byB0aGUgcmVwb3NpdG9yeSwgaG9zdG5hbWUgKCVIKSwgY2Fub25pY2FsIGhvc3RuYW1lCisJKCVDSCksIElQIGFkZHJlc3MgKCVJUCksIGFuZCBUQ1AgcG9ydCAoJVApIGFzIGl0cyBjb21tYW5kLWxpbmUKKwlhcmd1bWVudHMuIFRoZSBleHRlcm5hbCBjb21tYW5kIGNhbiBkZWNpZGUgdG8gZGVjbGluZSB0aGUKKwlzZXJ2aWNlIGJ5IGV4aXRpbmcgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cyAob3IgdG8gYWxsb3cgaXQgYnkKKwlleGl0aW5nIHdpdGggYSB6ZXJvIHN0YXR1cykuICBJdCBjYW4gYWxzbyBsb29rIGF0IHRoZSAkUkVNT1RFX0FERFIKKwlhbmQgYCRSRU1PVEVfUE9SVGAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGxlYXJuIGFib3V0IHRoZQorCXJlcXVlc3RvciB3aGVuIG1ha2luZyB0aGlzIGRlY2lzaW9uLgorKworVGhlIGV4dGVybmFsIGNvbW1hbmQgY2FuIG9wdGlvbmFsbHkgd3JpdGUgYSBzaW5nbGUgbGluZSB0byBpdHMKK3N0YW5kYXJkIG91dHB1dCB0byBiZSBzZW50IHRvIHRoZSByZXF1ZXN0b3IgYXMgYW4gZXJyb3IgbWVzc2FnZSB3aGVuCitpdCBkZWNsaW5lcyB0aGUgc2VydmljZS4KKworPGRpcmVjdG9yeT46OgorCUEgZGlyZWN0b3J5IHRvIGFkZCB0byB0aGUgd2hpdGVsaXN0IG9mIGFsbG93ZWQgZGlyZWN0b3JpZXMuIFVubGVzcworCS0tc3RyaWN0LXBhdGhzIGlzIHNwZWNpZmllZCB0aGlzIHdpbGwgYWxzbyBpbmNsdWRlIHN1YmRpcmVjdG9yaWVzCisJb2YgZWFjaCBuYW1lZCBkaXJlY3RvcnkuCisKK1NFUlZJQ0VTCistLS0tLS0tLQorCitUaGVzZSBzZXJ2aWNlcyBjYW4gYmUgZ2xvYmFsbHkgZW5hYmxlZC9kaXNhYmxlZCB1c2luZyB0aGUKK2NvbW1hbmQtbGluZSBvcHRpb25zIG9mIHRoaXMgY29tbWFuZC4gIElmIGZpbmVyLWdyYWluZWQKK2NvbnRyb2wgaXMgZGVzaXJlZCAoZS5nLiB0byBhbGxvdyAnZ2l0IGFyY2hpdmUnIHRvIGJlIHJ1bgorYWdhaW5zdCBvbmx5IGluIGEgZmV3IHNlbGVjdGVkIHJlcG9zaXRvcmllcyB0aGUgZGFlbW9uIHNlcnZlcyksCit0aGUgcGVyLXJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBmaWxlIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBvcgorZGlzYWJsZSB0aGVtLgorCit1cGxvYWQtcGFjazo6CisJVGhpcyBzZXJ2ZXMgJ2dpdCBmZXRjaC1wYWNrJyBhbmQgJ2dpdCBscy1yZW1vdGUnCisJY2xpZW50cy4gIEl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGEgcmVwb3NpdG9yeSBjYW4KKwlkaXNhYmxlIGl0IGJ5IHNldHRpbmcgYGRhZW1vbi51cGxvYWRwYWNrYCBjb25maWd1cmF0aW9uCisJaXRlbSB0byBgZmFsc2VgLgorCit1cGxvYWQtYXJjaGl2ZTo6CisJVGhpcyBzZXJ2ZXMgJ2dpdCBhcmNoaXZlIC0tcmVtb3RlJy4gIEl0IGlzIGRpc2FibGVkIGJ5CisJZGVmYXVsdCwgYnV0IGEgcmVwb3NpdG9yeSBjYW4gZW5hYmxlIGl0IGJ5IHNldHRpbmcKKwlgZGFlbW9uLnVwbG9hZGFyY2hgIGNvbmZpZ3VyYXRpb24gaXRlbSB0byBgdHJ1ZWAuCisKK3JlY2VpdmUtcGFjazo6CisJVGhpcyBzZXJ2ZXMgJ2dpdCBzZW5kLXBhY2snIGNsaWVudHMsIGFsbG93aW5nIGFub255bW91cworCXB1c2guICBJdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBhcyB0aGVyZSBpcyBfbm9fCisJYXV0aGVudGljYXRpb24gaW4gdGhlIHByb3RvY29sIChpbiBvdGhlciB3b3JkcywgYW55Ym9keQorCWNhbiBwdXNoIGFueXRoaW5nIGludG8gdGhlIHJlcG9zaXRvcnksIGluY2x1ZGluZyByZW1vdmFsCisJb2YgcmVmcykuICBUaGlzIGlzIHNvbGVseSBtZWFudCBmb3IgYSBjbG9zZWQgTEFOIHNldHRpbmcKKwl3aGVyZSBldmVyeWJvZHkgaXMgZnJpZW5kbHkuICBUaGlzIHNlcnZpY2UgY2FuIGJlCisJZW5hYmxlZCBieSBzZXR0aW5nIGBkYWVtb24ucmVjZWl2ZXBhY2tgIGNvbmZpZ3VyYXRpb24gaXRlbSB0bworCWB0cnVlYC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCitXZSBhc3N1bWUgdGhlIGZvbGxvd2luZyBpbiAvZXRjL3NlcnZpY2VzOjoKKysKKy0tLS0tLS0tLS0tLQorJCBncmVwIDk0MTggL2V0Yy9zZXJ2aWNlcworZ2l0CQk5NDE4L3RjcAkJIyBHaXQgVmVyc2lvbiBDb250cm9sIFN5c3RlbQorLS0tLS0tLS0tLS0tCisKKydnaXQgZGFlbW9uJyBhcyBpbmV0ZCBzZXJ2ZXI6OgorCVRvIHNldCB1cCAnZ2l0IGRhZW1vbicgYXMgYW4gaW5ldGQgc2VydmljZSB0aGF0IGhhbmRsZXMgYW55CisJcmVwb3NpdG9yeSB1bmRlciB0aGUgd2hpdGVsaXN0ZWQgc2V0IG9mIGRpcmVjdG9yaWVzLCAvcHViL2ZvbworCWFuZCAvcHViL2JhciwgcGxhY2UgYW4gZW50cnkgbGlrZSB0aGUgZm9sbG93aW5nIGludG8KKwkvZXRjL2luZXRkIGFsbCBvbiBvbmUgbGluZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWdpdCBzdHJlYW0gdGNwIG5vd2FpdCBub2JvZHkgIC91c3IvYmluL2dpdAorCQlnaXQgZGFlbW9uIC0taW5ldGQgLS12ZXJib3NlIC0tZXhwb3J0LWFsbAorCQkvcHViL2ZvbyAvcHViL2JhcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworJ2dpdCBkYWVtb24nIGFzIGluZXRkIHNlcnZlciBmb3IgdmlydHVhbCBob3N0czo6CisJVG8gc2V0IHVwICdnaXQgZGFlbW9uJyBhcyBhbiBpbmV0ZCBzZXJ2aWNlIHRoYXQgaGFuZGxlcworCXJlcG9zaXRvcmllcyBmb3IgZGlmZmVyZW50IHZpcnR1YWwgaG9zdHMsIGB3d3cuZXhhbXBsZS5jb21gCisJYW5kIGB3d3cuZXhhbXBsZS5vcmdgLCBwbGFjZSBhbiBlbnRyeSBsaWtlIHRoZSBmb2xsb3dpbmcgaW50bworCWAvZXRjL2luZXRkYCBhbGwgb24gb25lIGxpbmU6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlnaXQgc3RyZWFtIHRjcCBub3dhaXQgbm9ib2R5IC91c3IvYmluL2dpdAorCQlnaXQgZGFlbW9uIC0taW5ldGQgLS12ZXJib3NlIC0tZXhwb3J0LWFsbAorCQktLWludGVycG9sYXRlZC1wYXRoPS9wdWIvJUglRAorCQkvcHViL3d3dy5leGFtcGxlLm9yZy9zb2Z0d2FyZQorCQkvcHViL3d3dy5leGFtcGxlLmNvbS9zb2Z0d2FyZQorCQkvc29mdHdhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSW4gdGhpcyBleGFtcGxlLCB0aGUgcm9vdC1sZXZlbCBkaXJlY3RvcnkgYC9wdWJgIHdpbGwgY29udGFpbgorYSBzdWJkaXJlY3RvcnkgZm9yIGVhY2ggdmlydHVhbCBob3N0IG5hbWUgc3VwcG9ydGVkLgorRnVydGhlciwgYm90aCBob3N0cyBhZHZlcnRpc2UgcmVwb3NpdG9yaWVzIHNpbXBseSBhcworYGdpdDovL3d3dy5leGFtcGxlLmNvbS9zb2Z0d2FyZS9yZXBvLmdpdGAuICBGb3IgcHJlLTEuNC4wCitjbGllbnRzLCBhIHN5bWxpbmsgZnJvbSBgL3NvZnR3YXJlYCBpbnRvIHRoZSBhcHByb3ByaWF0ZQorZGVmYXVsdCByZXBvc2l0b3J5IGNvdWxkIGJlIG1hZGUgYXMgd2VsbC4KKworCisnZ2l0IGRhZW1vbicgYXMgcmVndWxhciBkYWVtb24gZm9yIHZpcnR1YWwgaG9zdHM6OgorCVRvIHNldCB1cCAnZ2l0IGRhZW1vbicgYXMgYSByZWd1bGFyLCBub24taW5ldGQgc2VydmljZSB0aGF0CisJaGFuZGxlcyByZXBvc2l0b3JpZXMgZm9yIG11bHRpcGxlIHZpcnR1YWwgaG9zdHMgYmFzZWQgb24KKwl0aGVpciBJUCBhZGRyZXNzZXMsIHN0YXJ0IHRoZSBkYWVtb24gbGlrZSB0aGlzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJZ2l0IGRhZW1vbiAtLXZlcmJvc2UgLS1leHBvcnQtYWxsCisJCS0taW50ZXJwb2xhdGVkLXBhdGg9L3B1Yi8lSVAvJUQKKwkJL3B1Yi8xOTIuMTY4LjEuMjAwL3NvZnR3YXJlCisJCS9wdWIvMTAuMTAuMjIwLjIzL3NvZnR3YXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK0luIHRoaXMgZXhhbXBsZSwgdGhlIHJvb3QtbGV2ZWwgZGlyZWN0b3J5IGAvcHViYCB3aWxsIGNvbnRhaW4KK2Egc3ViZGlyZWN0b3J5IGZvciBlYWNoIHZpcnR1YWwgaG9zdCBJUCBhZGRyZXNzIHN1cHBvcnRlZC4KK1JlcG9zaXRvcmllcyBjYW4gc3RpbGwgYmUgYWNjZXNzZWQgYnkgaG9zdG5hbWUgdGhvdWdoLCBhc3N1bWluZwordGhleSBjb3JyZXNwb25kIHRvIHRoZXNlIElQIGFkZHJlc3Nlcy4KKworc2VsZWN0aXZlbHkgZW5hYmxlL2Rpc2FibGUgc2VydmljZXMgcGVyIHJlcG9zaXRvcnk6OgorCVRvIGVuYWJsZSAnZ2l0IGFyY2hpdmUgLS1yZW1vdGUnIGFuZCBkaXNhYmxlICdnaXQgZmV0Y2gnIGFnYWluc3QKKwlhIHJlcG9zaXRvcnksIGhhdmUgdGhlIGZvbGxvd2luZyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZQorCXJlcG9zaXRvcnkgKHRoYXQgaXMgdGhlIGZpbGUgJ2NvbmZpZycgbmV4dCB0byBgSEVBRGAsICdyZWZzJyBhbmQKKwknb2JqZWN0cycpLgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVtkYWVtb25dCisJCXVwbG9hZHBhY2sgPSBmYWxzZQorCQl1cGxvYWRhcmNoID0gdHJ1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0VOVklST05NRU5UCistLS0tLS0tLS0tLQorJ2dpdCBkYWVtb24nIHdpbGwgc2V0IFJFTU9URV9BRERSIHRvIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBjbGllbnQKK3RoYXQgY29ubmVjdGVkIHRvIGl0LCBpZiB0aGUgSVAgYWRkcmVzcyBpcyBhdmFpbGFibGUuIFJFTU9URV9BRERSIHdpbGwKK2JlIGF2YWlsYWJsZSBpbiB0aGUgZW52aXJvbm1lbnQgb2YgaG9va3MgY2FsbGVkIHdoZW4KK3NlcnZpY2VzIGFyZSBwZXJmb3JtZWQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGVzY3JpYmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGVzY3JpYmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OGY2YWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kZXNjcmliZS50eHQKQEAgLTAsMCArMSwyMDcgQEAKK2dpdC1kZXNjcmliZSgxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1kZXNjcmliZSAtIEdpdmUgYW4gb2JqZWN0IGEgaHVtYW4gcmVhZGFibGUgbmFtZSBiYXNlZCBvbiBhbiBhdmFpbGFibGUgcmVmCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBkZXNjcmliZScgWy0tYWxsXSBbLS10YWdzXSBbLS1jb250YWluc10gWy0tYWJicmV2PTxuPl0gWzxjb21taXQtaXNoPi4uLl0KKydnaXQgZGVzY3JpYmUnIFstLWFsbF0gWy0tdGFnc10gWy0tY29udGFpbnNdIFstLWFiYnJldj08bj5dIC0tZGlydHlbPTxtYXJrPl0KKydnaXQgZGVzY3JpYmUnIDxibG9iPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoZSBjb21tYW5kIGZpbmRzIHRoZSBtb3N0IHJlY2VudCB0YWcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBhCitjb21taXQuICBJZiB0aGUgdGFnIHBvaW50cyB0byB0aGUgY29tbWl0LCB0aGVuIG9ubHkgdGhlIHRhZyBpcworc2hvd24uICBPdGhlcndpc2UsIGl0IHN1ZmZpeGVzIHRoZSB0YWcgbmFtZSB3aXRoIHRoZSBudW1iZXIgb2YKK2FkZGl0aW9uYWwgY29tbWl0cyBvbiB0b3Agb2YgdGhlIHRhZ2dlZCBvYmplY3QgYW5kIHRoZQorYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWUgb2YgdGhlIG1vc3QgcmVjZW50IGNvbW1pdC4gVGhlIHJlc3VsdAoraXMgYSAiaHVtYW4tcmVhZGFibGUiIG9iamVjdCBuYW1lIHdoaWNoIGNhbiBhbHNvIGJlIHVzZWQgdG8KK2lkZW50aWZ5IHRoZSBjb21taXQgdG8gb3RoZXIgZ2l0IGNvbW1hbmRzLgorCitCeSBkZWZhdWx0ICh3aXRob3V0IC0tYWxsIG9yIC0tdGFncykgYGdpdCBkZXNjcmliZWAgb25seSBzaG93cworYW5ub3RhdGVkIHRhZ3MuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjcmVhdGluZyBhbm5vdGF0ZWQgdGFncworc2VlIHRoZSAtYSBhbmQgLXMgb3B0aW9ucyB0byBsaW5rZ2l0OmdpdC10YWdbMV0uCisKK0lmIHRoZSBnaXZlbiBvYmplY3QgcmVmZXJzIHRvIGEgYmxvYiwgaXQgd2lsbCBiZSBkZXNjcmliZWQKK2FzIGA8Y29tbWl0LWlzaD46PHBhdGg+YCwgc3VjaCB0aGF0IHRoZSBibG9iIGNhbiBiZSBmb3VuZAorYXQgYDxwYXRoPmAgaW4gdGhlIGA8Y29tbWl0LWlzaD5gLCB3aGljaCBpdHNlbGYgZGVzY3JpYmVzIHRoZQorZmlyc3QgY29tbWl0IGluIHdoaWNoIHRoaXMgYmxvYiBvY2N1cnMgaW4gYSByZXZlcnNlIHJldmlzaW9uIHdhbGsKK2Zyb20gSEVBRC4KKworT1BUSU9OUworLS0tLS0tLQorPGNvbW1pdC1pc2g+Li4uOjoKKwlDb21taXQtaXNoIG9iamVjdCBuYW1lcyB0byBkZXNjcmliZS4gIERlZmF1bHRzIHRvIEhFQUQgaWYgb21pdHRlZC4KKworLS1kaXJ0eVs9PG1hcms+XTo6CistLWJyb2tlbls9PG1hcms+XTo6CisJRGVzY3JpYmUgdGhlIHN0YXRlIG9mIHRoZSB3b3JraW5nIHRyZWUuICBXaGVuIHRoZSB3b3JraW5nCisJdHJlZSBtYXRjaGVzIEhFQUQsIHRoZSBvdXRwdXQgaXMgdGhlIHNhbWUgYXMgImdpdCBkZXNjcmliZQorCUhFQUQiLiAgSWYgdGhlIHdvcmtpbmcgdHJlZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uICItZGlydHkiCisJaXMgYXBwZW5kZWQgdG8gaXQuICBJZiBhIHJlcG9zaXRvcnkgaXMgY29ycnVwdCBhbmQgR2l0CisJY2Fubm90IGRldGVybWluZSBpZiB0aGVyZSBpcyBsb2NhbCBtb2RpZmljYXRpb24sIEdpdCB3aWxsCisJZXJyb3Igb3V0LCB1bmxlc3MgYC0tYnJva2VuJyBpcyBnaXZlbiwgd2hpY2ggYXBwZW5kcworCXRoZSBzdWZmaXggIi1icm9rZW4iIGluc3RlYWQuCisKKy0tYWxsOjoKKwlJbnN0ZWFkIG9mIHVzaW5nIG9ubHkgdGhlIGFubm90YXRlZCB0YWdzLCB1c2UgYW55IHJlZgorCWZvdW5kIGluIGByZWZzL2AgbmFtZXNwYWNlLiAgVGhpcyBvcHRpb24gZW5hYmxlcyBtYXRjaGluZworCWFueSBrbm93biBicmFuY2gsIHJlbW90ZS10cmFja2luZyBicmFuY2gsIG9yIGxpZ2h0d2VpZ2h0IHRhZy4KKworLS10YWdzOjoKKwlJbnN0ZWFkIG9mIHVzaW5nIG9ubHkgdGhlIGFubm90YXRlZCB0YWdzLCB1c2UgYW55IHRhZworCWZvdW5kIGluIGByZWZzL3RhZ3NgIG5hbWVzcGFjZS4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbWF0Y2hpbmcKKwlhIGxpZ2h0d2VpZ2h0IChub24tYW5ub3RhdGVkKSB0YWcuCisKKy0tY29udGFpbnM6OgorCUluc3RlYWQgb2YgZmluZGluZyB0aGUgdGFnIHRoYXQgcHJlZGF0ZXMgdGhlIGNvbW1pdCwgZmluZAorCXRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0LCBhbmQgdGh1cyBjb250YWlucyBpdC4KKwlBdXRvbWF0aWNhbGx5IGltcGxpZXMgLS10YWdzLgorCistLWFiYnJldj08bj46OgorCUluc3RlYWQgb2YgdXNpbmcgdGhlIGRlZmF1bHQgNyBoZXhhZGVjaW1hbCBkaWdpdHMgYXMgdGhlCisJYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWUsIHVzZSA8bj4gZGlnaXRzLCBvciBhcyBtYW55IGRpZ2l0cworCWFzIG5lZWRlZCB0byBmb3JtIGEgdW5pcXVlIG9iamVjdCBuYW1lLiAgQW4gPG4+IG9mIDAKKwl3aWxsIHN1cHByZXNzIGxvbmcgZm9ybWF0LCBvbmx5IHNob3dpbmcgdGhlIGNsb3Nlc3QgdGFnLgorCistLWNhbmRpZGF0ZXM9PG4+OjoKKwlJbnN0ZWFkIG9mIGNvbnNpZGVyaW5nIG9ubHkgdGhlIDEwIG1vc3QgcmVjZW50IHRhZ3MgYXMKKwljYW5kaWRhdGVzIHRvIGRlc2NyaWJlIHRoZSBpbnB1dCBjb21taXQtaXNoIGNvbnNpZGVyCisJdXAgdG8gPG4+IGNhbmRpZGF0ZXMuICBJbmNyZWFzaW5nIDxuPiBhYm92ZSAxMCB3aWxsIHRha2UKKwlzbGlnaHRseSBsb25nZXIgYnV0IG1heSBwcm9kdWNlIGEgbW9yZSBhY2N1cmF0ZSByZXN1bHQuCisJQW4gPG4+IG9mIDAgd2lsbCBjYXVzZSBvbmx5IGV4YWN0IG1hdGNoZXMgdG8gYmUgb3V0cHV0LgorCistLWV4YWN0LW1hdGNoOjoKKwlPbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIChhIHRhZyBkaXJlY3RseSByZWZlcmVuY2VzIHRoZQorCXN1cHBsaWVkIGNvbW1pdCkuICBUaGlzIGlzIGEgc3lub255bSBmb3IgLS1jYW5kaWRhdGVzPTAuCisKKy0tZGVidWc6OgorCVZlcmJvc2VseSBkaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZWFyY2hpbmcgc3RyYXRlZ3kKKwliZWluZyBlbXBsb3llZCB0byBzdGFuZGFyZCBlcnJvci4gIFRoZSB0YWcgbmFtZSB3aWxsIHN0aWxsCisJYmUgcHJpbnRlZCB0byBzdGFuZGFyZCBvdXQuCisKKy0tbG9uZzo6CisJQWx3YXlzIG91dHB1dCB0aGUgbG9uZyBmb3JtYXQgKHRoZSB0YWcsIHRoZSBudW1iZXIgb2YgY29tbWl0cworCWFuZCB0aGUgYWJicmV2aWF0ZWQgY29tbWl0IG5hbWUpIGV2ZW4gd2hlbiBpdCBtYXRjaGVzIGEgdGFnLgorCVRoaXMgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gc2VlIHBhcnRzIG9mIHRoZSBjb21taXQgb2JqZWN0IG5hbWUKKwlpbiAiZGVzY3JpYmUiIG91dHB1dCwgZXZlbiB3aGVuIHRoZSBjb21taXQgaW4gcXVlc3Rpb24gaGFwcGVucyB0byBiZQorCWEgdGFnZ2VkIHZlcnNpb24uICBJbnN0ZWFkIG9mIGp1c3QgZW1pdHRpbmcgdGhlIHRhZyBuYW1lLCBpdCB3aWxsCisJZGVzY3JpYmUgc3VjaCBhIGNvbW1pdCBhcyB2MS4yLTAtZ2RlYWRiZWUgKDB0aCBjb21taXQgc2luY2UgdGFnIHYxLjIKKwl0aGF0IHBvaW50cyBhdCBvYmplY3QgZGVhZGJlZS4uLi4pLgorCistLW1hdGNoIDxwYXR0ZXJuPjo6CisJT25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIHRoZSBnaXZlbiBgZ2xvYig3KWAgcGF0dGVybiwKKwlleGNsdWRpbmcgdGhlICJyZWZzL3RhZ3MvIiBwcmVmaXguIElmIHVzZWQgd2l0aCBgLS1hbGxgLCBpdCBhbHNvCisJY29uc2lkZXJzIGxvY2FsIGJyYW5jaGVzIGFuZCByZW1vdGUtdHJhY2tpbmcgcmVmZXJlbmNlcyBtYXRjaGluZyB0aGUKKwlwYXR0ZXJuLCBleGNsdWRpbmcgcmVzcGVjdGl2ZWx5ICJyZWZzL2hlYWRzLyIgYW5kICJyZWZzL3JlbW90ZXMvIgorCXByZWZpeDsgcmVmZXJlbmNlcyBvZiBvdGhlciB0eXBlcyBhcmUgbmV2ZXIgY29uc2lkZXJlZC4gSWYgZ2l2ZW4KKwltdWx0aXBsZSB0aW1lcywgYSBsaXN0IG9mIHBhdHRlcm5zIHdpbGwgYmUgYWNjdW11bGF0ZWQsIGFuZCB0YWdzCisJbWF0Y2hpbmcgYW55IG9mIHRoZSBwYXR0ZXJucyB3aWxsIGJlIGNvbnNpZGVyZWQuICBVc2UgYC0tbm8tbWF0Y2hgIHRvCisJY2xlYXIgYW5kIHJlc2V0IHRoZSBsaXN0IG9mIHBhdHRlcm5zLgorCistLWV4Y2x1ZGUgPHBhdHRlcm4+OjoKKwlEbyBub3QgY29uc2lkZXIgdGFncyBtYXRjaGluZyB0aGUgZ2l2ZW4gYGdsb2IoNylgIHBhdHRlcm4sIGV4Y2x1ZGluZworCXRoZSAicmVmcy90YWdzLyIgcHJlZml4LiBJZiB1c2VkIHdpdGggYC0tYWxsYCwgaXQgYWxzbyBkb2VzIG5vdCBjb25zaWRlcgorCWxvY2FsIGJyYW5jaGVzIGFuZCByZW1vdGUtdHJhY2tpbmcgcmVmZXJlbmNlcyBtYXRjaGluZyB0aGUgcGF0dGVybiwKKwlleGNsdWRpbmcgcmVzcGVjdGl2ZWx5ICJyZWZzL2hlYWRzLyIgYW5kICJyZWZzL3JlbW90ZXMvIiBwcmVmaXg7CisJcmVmZXJlbmNlcyBvZiBvdGhlciB0eXBlcyBhcmUgbmV2ZXIgY29uc2lkZXJlZC4gSWYgZ2l2ZW4gbXVsdGlwbGUgdGltZXMsCisJYSBsaXN0IG9mIHBhdHRlcm5zIHdpbGwgYmUgYWNjdW11bGF0ZWQgYW5kIHRhZ3MgbWF0Y2hpbmcgYW55IG9mIHRoZQorCXBhdHRlcm5zIHdpbGwgYmUgZXhjbHVkZWQuIFdoZW4gY29tYmluZWQgd2l0aCAtLW1hdGNoIGEgdGFnIHdpbGwgYmUKKwljb25zaWRlcmVkIHdoZW4gaXQgbWF0Y2hlcyBhdCBsZWFzdCBvbmUgLS1tYXRjaCBwYXR0ZXJuIGFuZCBkb2VzIG5vdAorCW1hdGNoIGFueSBvZiB0aGUgLS1leGNsdWRlIHBhdHRlcm5zLiBVc2UgYC0tbm8tZXhjbHVkZWAgdG8gY2xlYXIgYW5kCisJcmVzZXQgdGhlIGxpc3Qgb2YgcGF0dGVybnMuCisKKy0tYWx3YXlzOjoKKwlTaG93IHVuaXF1ZWx5IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2suCisKKy0tZmlyc3QtcGFyZW50OjoKKwlGb2xsb3cgb25seSB0aGUgZmlyc3QgcGFyZW50IGNvbW1pdCB1cG9uIHNlZWluZyBhIG1lcmdlIGNvbW1pdC4KKwlUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIG5vdCBtYXRjaCB0YWdzIG9uIGJyYW5jaGVzIG1lcmdlZAorCWluIHRoZSBoaXN0b3J5IG9mIHRoZSB0YXJnZXQgY29tbWl0LgorCitFWEFNUExFUworLS0tLS0tLS0KKworV2l0aCBzb21ldGhpbmcgbGlrZSBnaXQuZ2l0IGN1cnJlbnQgdHJlZSwgSSBnZXQ6CisKKwlbdG9ydmFsZHNAZzUgZ2l0XSQgZ2l0IGRlc2NyaWJlIHBhcmVudAorCXYxLjAuNC0xNC1nMjQxNDcyMQorCitpLmUuIHRoZSBjdXJyZW50IGhlYWQgb2YgbXkgInBhcmVudCIgYnJhbmNoIGlzIGJhc2VkIG9uIHYxLjAuNCwKK2J1dCBzaW5jZSBpdCBoYXMgYSBmZXcgY29tbWl0cyBvbiB0b3Agb2YgdGhhdCwKK2Rlc2NyaWJlIGhhcyBhZGRlZCB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgY29tbWl0cyAoIjE0IikgYW5kCithbiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZSBmb3IgdGhlIGNvbW1pdCBpdHNlbGYgKCIyNDE0NzIxIikKK2F0IHRoZSBlbmQuCisKK1RoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBjb21taXRzIGlzIHRoZSBudW1iZXIKK29mIGNvbW1pdHMgd2hpY2ggd291bGQgYmUgZGlzcGxheWVkIGJ5ICJnaXQgbG9nIHYxLjAuNC4ucGFyZW50Ii4KK1RoZSBoYXNoIHN1ZmZpeCBpcyAiLWciICsgdW5hbWJpZ3VvdXMgYWJicmV2aWF0aW9uIGZvciB0aGUgdGlwIGNvbW1pdAorb2YgcGFyZW50ICh3aGljaCB3YXMgYDI0MTQ3MjFiMTk0NDUzZjA1ODA3OWQ4OTdkMTNjNGUzNzdmOTJkYzZgKS4KK1RoZSAiZyIgcHJlZml4IHN0YW5kcyBmb3IgImdpdCIgYW5kIGlzIHVzZWQgdG8gYWxsb3cgZGVzY3JpYmluZyB0aGUgdmVyc2lvbiBvZgorYSBzb2Z0d2FyZSBkZXBlbmRpbmcgb24gdGhlIFNDTSB0aGUgc29mdHdhcmUgaXMgbWFuYWdlZCB3aXRoLiBUaGlzIGlzIHVzZWZ1bAoraW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgcGVvcGxlIG1heSB1c2UgZGlmZmVyZW50IFNDTXMuCisKK0RvaW5nIGEgJ2dpdCBkZXNjcmliZScgb24gYSB0YWctbmFtZSB3aWxsIGp1c3Qgc2hvdyB0aGUgdGFnIG5hbWU6CisKKwlbdG9ydmFsZHNAZzUgZ2l0XSQgZ2l0IGRlc2NyaWJlIHYxLjAuNAorCXYxLjAuNAorCitXaXRoIC0tYWxsLCB0aGUgY29tbWFuZCBjYW4gdXNlIGJyYW5jaCBoZWFkcyBhcyByZWZlcmVuY2VzLCBzbwordGhlIG91dHB1dCBzaG93cyB0aGUgcmVmZXJlbmNlIHBhdGggYXMgd2VsbDoKKworCVt0b3J2YWxkc0BnNSBnaXRdJCBnaXQgZGVzY3JpYmUgLS1hbGwgLS1hYmJyZXY9NCB2MS4wLjVeMgorCXRhZ3MvdjEuMC4wLTIxLWc5NzViCisKKwlbdG9ydmFsZHNAZzUgZ2l0XSQgZ2l0IGRlc2NyaWJlIC0tYWxsIC0tYWJicmV2PTQgSEVBRF4KKwloZWFkcy9sdC9kZXNjcmliZS03LWc5NzViCisKK1dpdGggLS1hYmJyZXYgc2V0IHRvIDAsIHRoZSBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlCitjbG9zZXN0IHRhZ25hbWUgd2l0aG91dCBhbnkgc3VmZml4OgorCisJW3RvcnZhbGRzQGc1IGdpdF0kIGdpdCBkZXNjcmliZSAtLWFiYnJldj0wIHYxLjAuNV4yCisJdGFncy92MS4wLjAKKworTm90ZSB0aGF0IHRoZSBzdWZmaXggeW91IGdldCBpZiB5b3UgdHlwZSB0aGVzZSBjb21tYW5kcyB0b2RheSBtYXkgYmUKK2xvbmdlciB0aGFuIHdoYXQgTGludXMgc2F3IGFib3ZlIHdoZW4gaGUgcmFuIHRoZXNlIGNvbW1hbmRzLCBhcyB5b3VyCitHaXQgcmVwb3NpdG9yeSBtYXkgaGF2ZSBuZXcgY29tbWl0cyB3aG9zZSBvYmplY3QgbmFtZXMgYmVnaW4gd2l0aAorOTc1YiB0aGF0IGRpZCBub3QgZXhpc3QgYmFjayB0aGVuLCBhbmQgIi1nOTc1YiIgc3VmZml4IGFsb25lIG1heSBub3QKK2JlIHN1ZmZpY2llbnQgdG8gZGlzYW1iaWd1YXRlIHRoZXNlIGNvbW1pdHMuCisKKworU0VBUkNIIFNUUkFURUdZCistLS0tLS0tLS0tLS0tLS0KKworRm9yIGVhY2ggY29tbWl0LWlzaCBzdXBwbGllZCwgJ2dpdCBkZXNjcmliZScgd2lsbCBmaXJzdCBsb29rIGZvcgorYSB0YWcgd2hpY2ggdGFncyBleGFjdGx5IHRoYXQgY29tbWl0LiAgQW5ub3RhdGVkIHRhZ3Mgd2lsbCBhbHdheXMKK2JlIHByZWZlcnJlZCBvdmVyIGxpZ2h0d2VpZ2h0IHRhZ3MsIGFuZCB0YWdzIHdpdGggbmV3ZXIgZGF0ZXMgd2lsbAorYWx3YXlzIGJlIHByZWZlcnJlZCBvdmVyIHRhZ3Mgd2l0aCBvbGRlciBkYXRlcy4gIElmIGFuIGV4YWN0IG1hdGNoCitpcyBmb3VuZCwgaXRzIG5hbWUgd2lsbCBiZSBvdXRwdXQgYW5kIHNlYXJjaGluZyB3aWxsIHN0b3AuCisKK0lmIGFuIGV4YWN0IG1hdGNoIHdhcyBub3QgZm91bmQsICdnaXQgZGVzY3JpYmUnIHdpbGwgd2FsayBiYWNrCit0aHJvdWdoIHRoZSBjb21taXQgaGlzdG9yeSB0byBsb2NhdGUgYW4gYW5jZXN0b3IgY29tbWl0IHdoaWNoCitoYXMgYmVlbiB0YWdnZWQuICBUaGUgYW5jZXN0b3IncyB0YWcgd2lsbCBiZSBvdXRwdXQgYWxvbmcgd2l0aCBhbgorYWJicmV2aWF0aW9uIG9mIHRoZSBpbnB1dCBjb21taXQtaXNoJ3MgU0hBLTEuIElmIGAtLWZpcnN0LXBhcmVudGAgd2FzCitzcGVjaWZpZWQgdGhlbiB0aGUgd2FsayB3aWxsIG9ubHkgY29uc2lkZXIgdGhlIGZpcnN0IHBhcmVudCBvZiBlYWNoCitjb21taXQuCisKK0lmIG11bHRpcGxlIHRhZ3Mgd2VyZSBmb3VuZCBkdXJpbmcgdGhlIHdhbGsgdGhlbiB0aGUgdGFnIHdoaWNoCitoYXMgdGhlIGZld2VzdCBjb21taXRzIGRpZmZlcmVudCBmcm9tIHRoZSBpbnB1dCBjb21taXQtaXNoIHdpbGwgYmUKK3NlbGVjdGVkIGFuZCBvdXRwdXQuICBIZXJlIGZld2VzdCBjb21taXRzIGRpZmZlcmVudCBpcyBkZWZpbmVkIGFzCit0aGUgbnVtYmVyIG9mIGNvbW1pdHMgd2hpY2ggd291bGQgYmUgc2hvd24gYnkgYGdpdCBsb2cgdGFnLi5pbnB1dGAKK3dpbGwgYmUgdGhlIHNtYWxsZXN0IG51bWJlciBvZiBjb21taXRzIHBvc3NpYmxlLgorCitCVUdTCistLS0tCisKK1RyZWUgb2JqZWN0cyBhcyB3ZWxsIGFzIHRhZyBvYmplY3RzIG5vdCBwb2ludGluZyBhdCBjb21taXRzLCBjYW5ub3QgYmUgZGVzY3JpYmVkLgorV2hlbiBkZXNjcmliaW5nIGJsb2JzLCB0aGUgbGlnaHR3ZWlnaHQgdGFncyBwb2ludGluZyBhdCBibG9icyBhcmUgaWdub3JlZCwKK2J1dCB0aGUgYmxvYiBpcyBzdGlsbCBkZXNjcmliZWQgYXMgPGNvbW1pdHQtaXNoPjo8cGF0aD4gZGVzcGl0ZSB0aGUgbGlnaHR3ZWlnaHQKK3RhZyBiZWluZyBmYXZvcmFibGUuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1maWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWZpbGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY3NzRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1maWxlcy50eHQKQEAgLTAsMCArMSw1MiBAQAorZ2l0LWRpZmYtZmlsZXMoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1kaWZmLWZpbGVzIC0gQ29tcGFyZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGRpZmYtZmlsZXMnIFstcV0gWy0wfC0xfC0yfC0zfC1jfC0tY2NdIFs8Y29tbW9uIGRpZmYgb3B0aW9ucz5dIFs8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQ29tcGFyZXMgdGhlIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleC4gIFdoZW4gcGF0aHMKK2FyZSBzcGVjaWZpZWQsIGNvbXBhcmVzIG9ubHkgdGhvc2UgbmFtZWQgcGF0aHMuICBPdGhlcndpc2UgYWxsCitlbnRyaWVzIGluIHRoZSBpbmRleCBhcmUgY29tcGFyZWQuICBUaGUgb3V0cHV0IGZvcm1hdCBpcyB0aGUKK3NhbWUgYXMgZm9yICdnaXQgZGlmZi1pbmRleCcgYW5kICdnaXQgZGlmZi10cmVlJy4KKworT1BUSU9OUworLS0tLS0tLQoraW5jbHVkZTo6ZGlmZi1vcHRpb25zLnR4dFtdCisKKy0xIC0tYmFzZTo6CistMiAtLW91cnM6OgorLTMgLS10aGVpcnM6OgorLTA6OgorCURpZmYgYWdhaW5zdCB0aGUgImJhc2UiIHZlcnNpb24sICJvdXIgYnJhbmNoIiBvciAidGhlaXIKKwlicmFuY2giIHJlc3BlY3RpdmVseS4gIFdpdGggdGhlc2Ugb3B0aW9ucywgZGlmZnMgZm9yCisJbWVyZ2VkIGVudHJpZXMgYXJlIG5vdCBzaG93bi4KKysKK1RoZSBkZWZhdWx0IGlzIHRvIGRpZmYgYWdhaW5zdCBvdXIgYnJhbmNoICgtMikgYW5kIHRoZQorY2xlYW5seSByZXNvbHZlZCBwYXRocy4gIFRoZSBvcHRpb24gLTAgY2FuIGJlIGdpdmVuIHRvCitvbWl0IGRpZmYgb3V0cHV0IGZvciB1bm1lcmdlZCBlbnRyaWVzIGFuZCBqdXN0IHNob3cgIlVubWVyZ2VkIi4KKworLWM6OgorLS1jYzo6CisJVGhpcyBjb21wYXJlcyBzdGFnZSAyIChvdXIgYnJhbmNoKSwgc3RhZ2UgMyAodGhlaXIKKwlicmFuY2gpIGFuZCB0aGUgd29ya2luZyB0cmVlIGZpbGUgYW5kIG91dHB1dHMgYSBjb21iaW5lZAorCWRpZmYsIHNpbWlsYXIgdG8gdGhlIHdheSAnZGlmZi10cmVlJyBzaG93cyBhIG1lcmdlCisJY29tbWl0IHdpdGggdGhlc2UgZmxhZ3MuCisKKy1xOjoKKwlSZW1haW4gc2lsZW50IGV2ZW4gb24gbm9uZXhpc3RlbnQgZmlsZXMKKworCitpbmNsdWRlOjpkaWZmLWZvcm1hdC50eHRbXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1pbmRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiZDgxNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0CkBAIC0wLDAgKzEsMTIyIEBACitnaXQtZGlmZi1pbmRleCgxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWRpZmYtaW5kZXggLSBDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGRpZmYtaW5kZXgnIFstbV0gWy0tY2FjaGVkXSBbPGNvbW1vbiBkaWZmIG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQ29tcGFyZXMgdGhlIGNvbnRlbnQgYW5kIG1vZGUgb2YgdGhlIGJsb2JzIGZvdW5kIGluIGEgdHJlZSBvYmplY3QKK3dpdGggdGhlIGNvcnJlc3BvbmRpbmcgdHJhY2tlZCBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLCBvciB3aXRoIHRoZQorY29ycmVzcG9uZGluZyBwYXRocyBpbiB0aGUgaW5kZXguICBXaGVuIDxwYXRoPiBhcmd1bWVudHMgYXJlIHByZXNlbnQsCitjb21wYXJlcyBvbmx5IHBhdGhzIG1hdGNoaW5nIHRob3NlIHBhdHRlcm5zLiAgT3RoZXJ3aXNlIGFsbCB0cmFja2VkCitmaWxlcyBhcmUgY29tcGFyZWQuCisKK09QVElPTlMKKy0tLS0tLS0KK2luY2x1ZGU6OmRpZmYtb3B0aW9ucy50eHRbXQorCis8dHJlZS1pc2g+OjoKKwlUaGUgaWQgb2YgYSB0cmVlIG9iamVjdCB0byBkaWZmIGFnYWluc3QuCisKKy0tY2FjaGVkOjoKKwlkbyBub3QgY29uc2lkZXIgdGhlIG9uLWRpc2sgZmlsZSBhdCBhbGwKKworLW06OgorCUJ5IGRlZmF1bHQsIGZpbGVzIHJlY29yZGVkIGluIHRoZSBpbmRleCBidXQgbm90IGNoZWNrZWQKKwlvdXQgYXJlIHJlcG9ydGVkIGFzIGRlbGV0ZWQuICBUaGlzIGZsYWcgbWFrZXMKKwknZ2l0IGRpZmYtaW5kZXgnIHNheSB0aGF0IGFsbCBub24tY2hlY2tlZC1vdXQgZmlsZXMgYXJlIHVwCisJdG8gZGF0ZS4KKworaW5jbHVkZTo6ZGlmZi1mb3JtYXQudHh0W10KKworT1BFUkFUSU5HIE1PREVTCistLS0tLS0tLS0tLS0tLS0KK1lvdSBjYW4gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gdHJ1c3QgdGhlIGluZGV4IGZpbGUgZW50aXJlbHkKKyh1c2luZyB0aGUgYC0tY2FjaGVkYCBmbGFnKSBvciBhc2sgdGhlIGRpZmYgbG9naWMgdG8gc2hvdyBhbnkgZmlsZXMKK3RoYXQgZG9uJ3QgbWF0Y2ggdGhlIHN0YXQgc3RhdGUgYXMgYmVpbmcgInRlbnRhdGl2ZWx5IGNoYW5nZWQiLiAgQm90aAorb2YgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgdmVyeSB1c2VmdWwgaW5kZWVkLgorCitDQUNIRUQgTU9ERQorLS0tLS0tLS0tLS0KK0lmIGAtLWNhY2hlZGAgaXMgc3BlY2lmaWVkLCBpdCBhbGxvd3MgeW91IHRvIGFzazoKKworCXNob3cgbWUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gSEVBRCBhbmQgdGhlIGN1cnJlbnQgaW5kZXgKKwljb250ZW50cyAodGhlIG9uZXMgSSdkIHdyaXRlIHVzaW5nICdnaXQgd3JpdGUtdHJlZScpCisKK0ZvciBleGFtcGxlLCBsZXQncyBzYXkgdGhhdCB5b3UgaGF2ZSB3b3JrZWQgb24geW91ciB3b3JraW5nIGRpcmVjdG9yeSwgdXBkYXRlZAorc29tZSBmaWxlcyBpbiB0aGUgaW5kZXggYW5kIGFyZSByZWFkeSB0byBjb21taXQuIFlvdSB3YW50IHRvIHNlZSBleGFjdGx5Cisqd2hhdCogeW91IGFyZSBnb2luZyB0byBjb21taXQsIHdpdGhvdXQgaGF2aW5nIHRvIHdyaXRlIGEgbmV3IHRyZWUKK29iamVjdCBhbmQgY29tcGFyZSBpdCB0aGF0IHdheSwgYW5kIHRvIGRvIHRoYXQsIHlvdSBqdXN0IGRvCisKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFECisKK0V4YW1wbGU6IGxldCdzIHNheSBJIGhhZCByZW5hbWVkIGBjb21taXQuY2AgdG8gYGdpdC1jb21taXQuY2AsIGFuZCBJIGhhZAorZG9uZSBhbiBgdXBkYXRlLWluZGV4YCB0byBtYWtlIHRoYXQgZWZmZWN0aXZlIGluIHRoZSBpbmRleCBmaWxlLgorYGdpdCBkaWZmLWZpbGVzYCB3b3VsZG4ndCBzaG93IGFueXRoaW5nIGF0IGFsbCwgc2luY2UgdGhlIGluZGV4IGZpbGUKK21hdGNoZXMgbXkgd29ya2luZyBkaXJlY3RvcnkuIEJ1dCBkb2luZyBhICdnaXQgZGlmZi1pbmRleCcgZG9lczoKKworICB0b3J2YWxkc0BwcGM5NzA6fi9naXQ+IGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQKKyAgLTEwMDY0NCBibG9iICAgIDQxNjFhZWNjNjcwMGEyZWI1NzllODQyYWYwYjdmMjJiOTg0NDNmNzQgICAgICAgIGNvbW1pdC5jCisgICsxMDA2NDQgYmxvYiAgICA0MTYxYWVjYzY3MDBhMmViNTc5ZTg0MmFmMGI3ZjIyYjk4NDQzZjc0ICAgICAgICBnaXQtY29tbWl0LmMKKworWW91IGNhbiBzZWUgZWFzaWx5IHRoYXQgdGhlIGFib3ZlIGlzIGEgcmVuYW1lLgorCitJbiBmYWN0LCBgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWRgICpzaG91bGQqIGFsd2F5cyBiZSBlbnRpcmVseSBlcXVpdmFsZW50IHRvCithY3R1YWxseSBkb2luZyBhICdnaXQgd3JpdGUtdHJlZScgYW5kIGNvbXBhcmluZyB0aGF0LiBFeGNlcHQgdGhpcyBvbmUgaXMgbXVjaAorbmljZXIgZm9yIHRoZSBjYXNlIHdoZXJlIHlvdSBqdXN0IHdhbnQgdG8gY2hlY2sgd2hlcmUgeW91IGFyZS4KKworU28gZG9pbmcgYSBgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWRgIGlzIGJhc2ljYWxseSB2ZXJ5IHVzZWZ1bCB3aGVuIHlvdSBhcmUKK2Fza2luZyB5b3Vyc2VsZiAid2hhdCBoYXZlIEkgYWxyZWFkeSBtYXJrZWQgZm9yIGJlaW5nIGNvbW1pdHRlZCwgYW5kCit3aGF0J3MgdGhlIGRpZmZlcmVuY2UgdG8gYSBwcmV2aW91cyB0cmVlIi4KKworTk9OLUNBQ0hFRCBNT0RFCistLS0tLS0tLS0tLS0tLS0KK1RoZSAibm9uLWNhY2hlZCIgbW9kZSB0YWtlcyBhIGRpZmZlcmVudCBhcHByb2FjaCwgYW5kIGlzIHBvdGVudGlhbGx5Cit0aGUgbW9yZSB1c2VmdWwgb2YgdGhlIHR3byBpbiB0aGF0IHdoYXQgaXQgZG9lcyBjYW4ndCBiZSBlbXVsYXRlZCB3aXRoCithICdnaXQgd3JpdGUtdHJlZScgKyAnZ2l0IGRpZmYtdHJlZScuIFRodXMgdGhhdCdzIHRoZSBkZWZhdWx0IG1vZGUuCitUaGUgbm9uLWNhY2hlZCB2ZXJzaW9uIGFza3MgdGhlIHF1ZXN0aW9uOgorCisgIHNob3cgbWUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gSEVBRCBhbmQgdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dAorICB0cmVlIC0gaW5kZXggY29udGVudHMgX2FuZF8gZmlsZXMgdGhhdCBhcmVuJ3QgdXAgdG8gZGF0ZQorCit3aGljaCBpcyBvYnZpb3VzbHkgYSB2ZXJ5IHVzZWZ1bCBxdWVzdGlvbiB0b28sIHNpbmNlIHRoYXQgdGVsbHMgeW91IHdoYXQKK3lvdSAqY291bGQqIGNvbW1pdC4gQWdhaW4sIHRoZSBvdXRwdXQgbWF0Y2hlcyB0aGUgJ2dpdCBkaWZmLXRyZWUgLXInCitvdXRwdXQgdG8gYSB0ZWUsIGJ1dCB3aXRoIGEgdHdpc3QuCisKK1RoZSB0d2lzdCBpcyB0aGF0IGlmIHNvbWUgZmlsZSBkb2Vzbid0IG1hdGNoIHRoZSBpbmRleCwgd2UgZG9uJ3QgaGF2ZQorYSBiYWNraW5nIHN0b3JlIHRoaW5nIGZvciBpdCwgYW5kIHdlIHVzZSB0aGUgbWFnaWMgImFsbC16ZXJvIiBzaGExIHRvCitzaG93IHRoYXQuIFNvIGxldCdzIHNheSB0aGF0IHlvdSBoYXZlIGVkaXRlZCBga2VybmVsL3NjaGVkLmNgLCBidXQKK2hhdmUgbm90IGFjdHVhbGx5IGRvbmUgYSAnZ2l0IHVwZGF0ZS1pbmRleCcgb24gaXQgeWV0IC0gdGhlcmUgaXMgbm8KKyJvYmplY3QiIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV3IHN0YXRlLCBhbmQgeW91IGdldDoKKworICB0b3J2YWxkc0BwcGM5NzA6fi92Mi42L2xpbnV4PiBnaXQgZGlmZi1pbmRleCAtLWFiYnJldiBIRUFECisgIDoxMDA2NDQgMTAwNjY0IDc0NzZiYi4uLiAwMDAwMDAuLi4gICAgICBrZXJuZWwvc2NoZWQuYworCitpLmUuLCBpdCBzaG93cyB0aGF0IHRoZSB0cmVlIGhhcyBjaGFuZ2VkLCBhbmQgdGhhdCBga2VybmVsL3NjaGVkLmNgIGlzCitub3QgdXAgdG8gZGF0ZSBhbmQgbWF5IGNvbnRhaW4gbmV3IHN0dWZmLiBUaGUgYWxsLXplcm8gc2hhMSBtZWFucyB0aGF0IHRvCitnZXQgdGhlIHJlYWwgZGlmZiwgeW91IG5lZWQgdG8gbG9vayBhdCB0aGUgb2JqZWN0IGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeQorZGlyZWN0bHkgcmF0aGVyIHRoYW4gZG8gYW4gb2JqZWN0LXRvLW9iamVjdCBkaWZmLgorCitOT1RFOiBBcyB3aXRoIG90aGVyIGNvbW1hbmRzIG9mIHRoaXMgdHlwZSwgJ2dpdCBkaWZmLWluZGV4JyBkb2VzIG5vdAorYWN0dWFsbHkgbG9vayBhdCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgYWxsLiBTbyBtYXliZQorYGtlcm5lbC9zY2hlZC5jYCBoYXNuJ3QgYWN0dWFsbHkgY2hhbmdlZCwgYW5kIGl0J3MganVzdCB0aGF0IHlvdQordG91Y2hlZCBpdC4gSW4gZWl0aGVyIGNhc2UsIGl0J3MgYSBub3RlIHRoYXQgeW91IG5lZWQgdG8KKydnaXQgdXBkYXRlLWluZGV4JyBpdCB0byBtYWtlIHRoZSBpbmRleCBiZSBpbiBzeW5jLgorCitOT1RFOiBZb3UgY2FuIGhhdmUgYSBtaXh0dXJlIG9mIGZpbGVzIHNob3cgdXAgYXMgImhhcyBiZWVuIHVwZGF0ZWQiCithbmQgImlzIHN0aWxsIGRpcnR5IGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSIgdG9nZXRoZXIuIFlvdSBjYW4gYWx3YXlzCit0ZWxsIHdoaWNoIGZpbGUgaXMgaW4gd2hpY2ggc3RhdGUsIHNpbmNlIHRoZSAiaGFzIGJlZW4gdXBkYXRlZCIgb25lcworc2hvdyBhIHZhbGlkIHNoYTEsIGFuZCB0aGUgIm5vdCBpbiBzeW5jIHdpdGggdGhlIGluZGV4IiBvbmVzIHdpbGwKK2Fsd2F5cyBoYXZlIHRoZSBzcGVjaWFsIGFsbC16ZXJvIHNoYTEuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtdHJlZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM4YTJhNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtdHJlZS50eHQKQEAgLTAsMCArMSwxMjYgQEAKK2dpdC1kaWZmLXRyZWUoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWRpZmYtdHJlZSAtIENvbXBhcmVzIHRoZSBjb250ZW50IGFuZCBtb2RlIG9mIGJsb2JzIGZvdW5kIHZpYSB0d28gdHJlZSBvYmplY3RzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGRpZmYtdHJlZScgWy0tc3RkaW5dIFstbV0gWy1zXSBbLXZdIFstLW5vLWNvbW1pdC1pZF0gWy0tcHJldHR5XQorCSAgICAgIFstdF0gWy1yXSBbLWMgfCAtLWNjXSBbLS1jb21iaW5lZC1hbGwtcGF0aHNdIFstLXJvb3RdCisJICAgICAgWzxjb21tb24gZGlmZiBvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHRyZWUtaXNoPl0gWzxwYXRoPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiB0aGUgYmxvYnMgZm91bmQgdmlhIHR3byB0cmVlIG9iamVjdHMuCisKK0lmIHRoZXJlIGlzIG9ubHkgb25lIDx0cmVlLWlzaD4gZ2l2ZW4sIHRoZSBjb21taXQgaXMgY29tcGFyZWQgd2l0aCBpdHMgcGFyZW50cworKHNlZSAtLXN0ZGluIGJlbG93KS4KKworTm90ZSB0aGF0ICdnaXQgZGlmZi10cmVlJyBjYW4gdXNlIHRoZSB0cmVlIGVuY2Fwc3VsYXRlZCBpbiBhIGNvbW1pdCBvYmplY3QuCisKK09QVElPTlMKKy0tLS0tLS0KK2luY2x1ZGU6OmRpZmYtb3B0aW9ucy50eHRbXQorCis8dHJlZS1pc2g+OjoKKwlUaGUgaWQgb2YgYSB0cmVlIG9iamVjdC4KKworPHBhdGg+Li4uOjoKKwlJZiBwcm92aWRlZCwgdGhlIHJlc3VsdHMgYXJlIGxpbWl0ZWQgdG8gYSBzdWJzZXQgb2YgZmlsZXMKKwltYXRjaGluZyBvbmUgb2YgdGhlIHByb3ZpZGVkIHBhdGhzcGVjcy4KKworLXI6OgorICAgICAgICByZWN1cnNlIGludG8gc3ViLXRyZWVzCisKKy10OjoKKwlzaG93IHRyZWUgZW50cnkgaXRzZWxmIGFzIHdlbGwgYXMgc3VidHJlZXMuICBJbXBsaWVzIC1yLgorCistLXJvb3Q6OgorCVdoZW4gYC0tcm9vdGAgaXMgc3BlY2lmaWVkIHRoZSBpbml0aWFsIGNvbW1pdCB3aWxsIGJlIHNob3duIGFzIGEgYmlnCisJY3JlYXRpb24gZXZlbnQuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBhIGRpZmYgYWdhaW5zdCB0aGUgTlVMTCB0cmVlLgorCistLXN0ZGluOjoKKwlXaGVuIGAtLXN0ZGluYCBpcyBzcGVjaWZpZWQsIHRoZSBjb21tYW5kIGRvZXMgbm90IHRha2UKKwk8dHJlZS1pc2g+IGFyZ3VtZW50cyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuICBJbnN0ZWFkLCBpdAorCXJlYWRzIGxpbmVzIGNvbnRhaW5pbmcgZWl0aGVyIHR3byA8dHJlZT4sIG9uZSA8Y29tbWl0Piwgb3IgYQorCWxpc3Qgb2YgPGNvbW1pdD4gZnJvbSBpdHMgc3RhbmRhcmQgaW5wdXQuICAoVXNlIGEgc2luZ2xlIHNwYWNlCisJYXMgc2VwYXJhdG9yLikKKysKK1doZW4gdHdvIHRyZWVzIGFyZSBnaXZlbiwgaXQgY29tcGFyZXMgdGhlIGZpcnN0IHRyZWUgd2l0aCB0aGUgc2Vjb25kLgorV2hlbiBhIHNpbmdsZSBjb21taXQgaXMgZ2l2ZW4sIGl0IGNvbXBhcmVzIHRoZSBjb21taXQgd2l0aCBpdHMKK3BhcmVudHMuICBUaGUgcmVtYWluaW5nIGNvbW1pdHMsIHdoZW4gZ2l2ZW4sIGFyZSB1c2VkIGFzIGlmIHRoZXkgYXJlCitwYXJlbnRzIG9mIHRoZSBmaXJzdCBjb21taXQuCisrCitXaGVuIGNvbXBhcmluZyB0d28gdHJlZXMsIHRoZSBJRCBvZiBib3RoIHRyZWVzIChzZXBhcmF0ZWQgYnkgYSBzcGFjZQorYW5kIHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5lKSBpcyBwcmludGVkIGJlZm9yZSB0aGUgZGlmZmVyZW5jZS4gIFdoZW4KK2NvbXBhcmluZyBjb21taXRzLCB0aGUgSUQgb2YgdGhlIGZpcnN0IChvciBvbmx5KSBjb21taXQsIGZvbGxvd2VkIGJ5IGEKK25ld2xpbmUsIGlzIHByaW50ZWQuCisrCitUaGUgZm9sbG93aW5nIGZsYWdzIGZ1cnRoZXIgYWZmZWN0IHRoZSBiZWhhdmlvciB3aGVuIGNvbXBhcmluZworY29tbWl0cyAoYnV0IG5vdCB0cmVlcykuCisKKy1tOjoKKwlCeSBkZWZhdWx0LCAnZ2l0IGRpZmYtdHJlZSAtLXN0ZGluJyBkb2VzIG5vdCBzaG93CisJZGlmZmVyZW5jZXMgZm9yIG1lcmdlIGNvbW1pdHMuICBXaXRoIHRoaXMgZmxhZywgaXQgc2hvd3MKKwlkaWZmZXJlbmNlcyB0byB0aGF0IGNvbW1pdCBmcm9tIGFsbCBvZiBpdHMgcGFyZW50cy4gU2VlCisJYWxzbyBgLWNgLgorCistczo6CisJQnkgZGVmYXVsdCwgJ2dpdCBkaWZmLXRyZWUgLS1zdGRpbicgc2hvd3MgZGlmZmVyZW5jZXMsCisJZWl0aGVyIGluIG1hY2hpbmUtcmVhZGFibGUgZm9ybSAod2l0aG91dCBgLXBgKSBvciBpbiBwYXRjaAorCWZvcm0gKHdpdGggYC1wYCkuICBUaGlzIG91dHB1dCBjYW4gYmUgc3VwcHJlc3NlZC4gIEl0IGlzCisJb25seSB1c2VmdWwgd2l0aCBgLXZgIGZsYWcuCisKKy12OjoKKwlUaGlzIGZsYWcgY2F1c2VzICdnaXQgZGlmZi10cmVlIC0tc3RkaW4nIHRvIGFsc28gc2hvdworCXRoZSBjb21taXQgbWVzc2FnZSBiZWZvcmUgdGhlIGRpZmZlcmVuY2VzLgorCitpbmNsdWRlOjpwcmV0dHktb3B0aW9ucy50eHRbXQorCistLW5vLWNvbW1pdC1pZDo6CisJJ2dpdCBkaWZmLXRyZWUnIG91dHB1dHMgYSBsaW5lIHdpdGggdGhlIGNvbW1pdCBJRCB3aGVuCisJYXBwbGljYWJsZS4gIFRoaXMgZmxhZyBzdXBwcmVzc2VkIHRoZSBjb21taXQgSUQgb3V0cHV0LgorCistYzo6CisJVGhpcyBmbGFnIGNoYW5nZXMgdGhlIHdheSBhIG1lcmdlIGNvbW1pdCBpcyBkaXNwbGF5ZWQKKwkod2hpY2ggbWVhbnMgaXQgaXMgdXNlZnVsIG9ubHkgd2hlbiB0aGUgY29tbWFuZCBpcyBnaXZlbgorCW9uZSA8dHJlZS1pc2g+LCBvciBgLS1zdGRpbmApLiAgSXQgc2hvd3MgdGhlIGRpZmZlcmVuY2VzCisJZnJvbSBlYWNoIG9mIHRoZSBwYXJlbnRzIHRvIHRoZSBtZXJnZSByZXN1bHQgc2ltdWx0YW5lb3VzbHkKKwlpbnN0ZWFkIG9mIHNob3dpbmcgcGFpcndpc2UgZGlmZiBiZXR3ZWVuIGEgcGFyZW50IGFuZCB0aGUKKwlyZXN1bHQgb25lIGF0IGEgdGltZSAod2hpY2ggaXMgd2hhdCB0aGUgYC1tYCBvcHRpb24gZG9lcykuCisJRnVydGhlcm1vcmUsIGl0IGxpc3RzIG9ubHkgZmlsZXMgd2hpY2ggd2VyZSBtb2RpZmllZAorCWZyb20gYWxsIHBhcmVudHMuCisKKy0tY2M6OgorCVRoaXMgZmxhZyBjaGFuZ2VzIHRoZSB3YXkgYSBtZXJnZSBjb21taXQgcGF0Y2ggaXMgZGlzcGxheWVkLAorCWluIGEgc2ltaWxhciB3YXkgdG8gdGhlIGAtY2Agb3B0aW9uLiBJdCBpbXBsaWVzIHRoZSBgLWNgCisJYW5kIGAtcGAgb3B0aW9ucyBhbmQgZnVydGhlciBjb21wcmVzc2VzIHRoZSBwYXRjaCBvdXRwdXQKKwlieSBvbWl0dGluZyB1bmludGVyZXN0aW5nIGh1bmtzIHdob3NlIHRoZSBjb250ZW50cyBpbiB0aGUgcGFyZW50cworCWhhdmUgb25seSB0d28gdmFyaWFudHMgYW5kIHRoZSBtZXJnZSByZXN1bHQgcGlja3Mgb25lIG9mIHRoZW0KKwl3aXRob3V0IG1vZGlmaWNhdGlvbi4gIFdoZW4gYWxsIGh1bmtzIGFyZSB1bmludGVyZXN0aW5nLCB0aGUgY29tbWl0CisJaXRzZWxmIGFuZCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGlzIG5vdCBzaG93biwganVzdCBsaWtlIGluIGFueSBvdGhlcgorCSJlbXB0eSBkaWZmIiBjYXNlLgorCistLWNvbWJpbmVkLWFsbC1wYXRoczo6CisJVGhpcyBmbGFnIGNhdXNlcyBjb21iaW5lZCBkaWZmcyAodXNlZCBmb3IgbWVyZ2UgY29tbWl0cykgdG8KKwlsaXN0IHRoZSBuYW1lIG9mIHRoZSBmaWxlIGZyb20gYWxsIHBhcmVudHMuICBJdCB0aHVzIG9ubHkgaGFzCisJZWZmZWN0IHdoZW4gLWMgb3IgLS1jYyBhcmUgc3BlY2lmaWVkLCBhbmQgaXMgbGlrZWx5IG9ubHkKKwl1c2VmdWwgaWYgZmlsZW5hbWUgY2hhbmdlcyBhcmUgZGV0ZWN0ZWQgKGkuZS4gd2hlbiBlaXRoZXIKKwlyZW5hbWUgb3IgY29weSBkZXRlY3Rpb24gaGF2ZSBiZWVuIHJlcXVlc3RlZCkuCisKKy0tYWx3YXlzOjoKKwlTaG93IHRoZSBjb21taXQgaXRzZWxmIGFuZCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGV2ZW4KKwlpZiB0aGUgZGlmZiBpdHNlbGYgaXMgZW1wdHkuCisKKworaW5jbHVkZTo6cHJldHR5LWZvcm1hdHMudHh0W10KKworaW5jbHVkZTo6ZGlmZi1mb3JtYXQudHh0W10KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NzgxY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dApAQCAtMCwwICsxLDIwMyBAQAorZ2l0LWRpZmYoMSkKKz09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1kaWZmIC0gU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBkaWZmJyBbPG9wdGlvbnM+XSBbPGNvbW1pdD5dIFstLV0gWzxwYXRoPi4uLl0KKydnaXQgZGlmZicgWzxvcHRpb25zPl0gLS1jYWNoZWQgWzxjb21taXQ+XSBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0IGRpZmYnIFs8b3B0aW9ucz5dIDxjb21taXQ+IDxjb21taXQ+IFstLV0gWzxwYXRoPi4uLl0KKydnaXQgZGlmZicgWzxvcHRpb25zPl0gPGJsb2I+IDxibG9iPgorJ2dpdCBkaWZmJyBbPG9wdGlvbnM+XSAtLW5vLWluZGV4IFstLV0gPHBhdGg+IDxwYXRoPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1Nob3cgY2hhbmdlcyBiZXR3ZWVuIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBvciBhIHRyZWUsIGNoYW5nZXMKK2JldHdlZW4gdGhlIGluZGV4IGFuZCBhIHRyZWUsIGNoYW5nZXMgYmV0d2VlbiB0d28gdHJlZXMsIGNoYW5nZXMgYmV0d2VlbgordHdvIGJsb2Igb2JqZWN0cywgb3IgY2hhbmdlcyBiZXR3ZWVuIHR3byBmaWxlcyBvbiBkaXNrLgorCisnZ2l0IGRpZmYnIFs8b3B0aW9ucz5dIFstLV0gWzxwYXRoPi4uLl06OgorCisJVGhpcyBmb3JtIGlzIHRvIHZpZXcgdGhlIGNoYW5nZXMgeW91IG1hZGUgcmVsYXRpdmUgdG8KKwl0aGUgaW5kZXggKHN0YWdpbmcgYXJlYSBmb3IgdGhlIG5leHQgY29tbWl0KS4gIEluIG90aGVyCisJd29yZHMsIHRoZSBkaWZmZXJlbmNlcyBhcmUgd2hhdCB5b3UgX2NvdWxkXyB0ZWxsIEdpdCB0bworCWZ1cnRoZXIgYWRkIHRvIHRoZSBpbmRleCBidXQgeW91IHN0aWxsIGhhdmVuJ3QuICBZb3UgY2FuCisJc3RhZ2UgdGhlc2UgY2hhbmdlcyBieSB1c2luZyBsaW5rZ2l0OmdpdC1hZGRbMV0uCisKKydnaXQgZGlmZicgWzxvcHRpb25zPl0gLS1uby1pbmRleCBbLS1dIDxwYXRoPiA8cGF0aD46OgorCisJVGhpcyBmb3JtIGlzIHRvIGNvbXBhcmUgdGhlIGdpdmVuIHR3byBwYXRocyBvbiB0aGUKKwlmaWxlc3lzdGVtLiAgWW91IGNhbiBvbWl0IHRoZSBgLS1uby1pbmRleGAgb3B0aW9uIHdoZW4KKwlydW5uaW5nIHRoZSBjb21tYW5kIGluIGEgd29ya2luZyB0cmVlIGNvbnRyb2xsZWQgYnkgR2l0IGFuZAorCWF0IGxlYXN0IG9uZSBvZiB0aGUgcGF0aHMgcG9pbnRzIG91dHNpZGUgdGhlIHdvcmtpbmcgdHJlZSwKKwlvciB3aGVuIHJ1bm5pbmcgdGhlIGNvbW1hbmQgb3V0c2lkZSBhIHdvcmtpbmcgdHJlZQorCWNvbnRyb2xsZWQgYnkgR2l0LiBUaGlzIGZvcm0gaW1wbGllcyBgLS1leGl0LWNvZGVgLgorCisnZ2l0IGRpZmYnIFs8b3B0aW9ucz5dIC0tY2FjaGVkIFs8Y29tbWl0Pl0gWy0tXSBbPHBhdGg+Li4uXTo6CisKKwlUaGlzIGZvcm0gaXMgdG8gdmlldyB0aGUgY2hhbmdlcyB5b3Ugc3RhZ2VkIGZvciB0aGUgbmV4dAorCWNvbW1pdCByZWxhdGl2ZSB0byB0aGUgbmFtZWQgPGNvbW1pdD4uICBUeXBpY2FsbHkgeW91CisJd291bGQgd2FudCBjb21wYXJpc29uIHdpdGggdGhlIGxhdGVzdCBjb21taXQsIHNvIGlmIHlvdQorCWRvIG5vdCBnaXZlIDxjb21taXQ+LCBpdCBkZWZhdWx0cyB0byBIRUFELgorCUlmIEhFQUQgZG9lcyBub3QgZXhpc3QgKGUuZy4gdW5ib3JuIGJyYW5jaGVzKSBhbmQKKwk8Y29tbWl0PiBpcyBub3QgZ2l2ZW4sIGl0IHNob3dzIGFsbCBzdGFnZWQgY2hhbmdlcy4KKwktLXN0YWdlZCBpcyBhIHN5bm9ueW0gb2YgLS1jYWNoZWQuCisKKydnaXQgZGlmZicgWzxvcHRpb25zPl0gPGNvbW1pdD4gWy0tXSBbPHBhdGg+Li4uXTo6CisKKwlUaGlzIGZvcm0gaXMgdG8gdmlldyB0aGUgY2hhbmdlcyB5b3UgaGF2ZSBpbiB5b3VyCisJd29ya2luZyB0cmVlIHJlbGF0aXZlIHRvIHRoZSBuYW1lZCA8Y29tbWl0Pi4gIFlvdSBjYW4KKwl1c2UgSEVBRCB0byBjb21wYXJlIGl0IHdpdGggdGhlIGxhdGVzdCBjb21taXQsIG9yIGEKKwlicmFuY2ggbmFtZSB0byBjb21wYXJlIHdpdGggdGhlIHRpcCBvZiBhIGRpZmZlcmVudAorCWJyYW5jaC4KKworJ2dpdCBkaWZmJyBbPG9wdGlvbnM+XSA8Y29tbWl0PiA8Y29tbWl0PiBbLS1dIFs8cGF0aD4uLi5dOjoKKworCVRoaXMgaXMgdG8gdmlldyB0aGUgY2hhbmdlcyBiZXR3ZWVuIHR3byBhcmJpdHJhcnkKKwk8Y29tbWl0Pi4KKworJ2dpdCBkaWZmJyBbPG9wdGlvbnM+XSA8Y29tbWl0Pi4uPGNvbW1pdD4gWy0tXSBbPHBhdGg+Li4uXTo6CisKKwlUaGlzIGlzIHN5bm9ueW1vdXMgdG8gdGhlIHByZXZpb3VzIGZvcm0uICBJZiA8Y29tbWl0PiBvbgorCW9uZSBzaWRlIGlzIG9taXR0ZWQsIGl0IHdpbGwgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMKKwl1c2luZyBIRUFEIGluc3RlYWQuCisKKydnaXQgZGlmZicgWzxvcHRpb25zPl0gPGNvbW1pdD5cLi4uPGNvbW1pdD4gWy0tXSBbPHBhdGg+Li4uXTo6CisKKwlUaGlzIGZvcm0gaXMgdG8gdmlldyB0aGUgY2hhbmdlcyBvbiB0aGUgYnJhbmNoIGNvbnRhaW5pbmcKKwlhbmQgdXAgdG8gdGhlIHNlY29uZCA8Y29tbWl0Piwgc3RhcnRpbmcgYXQgYSBjb21tb24gYW5jZXN0b3IKKwlvZiBib3RoIDxjb21taXQ+LiAgImdpdCBkaWZmIEFcLi4uQiIgaXMgZXF1aXZhbGVudCB0bworCSJnaXQgZGlmZiAkKGdpdCBtZXJnZS1iYXNlIEEgQikgQiIuICBZb3UgY2FuIG9taXQgYW55IG9uZQorCW9mIDxjb21taXQ+LCB3aGljaCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHVzaW5nIEhFQUQgaW5zdGVhZC4KKworSnVzdCBpbiBjYXNlIHlvdSBhcmUgZG9pbmcgc29tZXRoaW5nIGV4b3RpYywgaXQgc2hvdWxkIGJlCitub3RlZCB0aGF0IGFsbCBvZiB0aGUgPGNvbW1pdD4gaW4gdGhlIGFib3ZlIGRlc2NyaXB0aW9uLCBleGNlcHQKK2luIHRoZSBsYXN0IHR3byBmb3JtcyB0aGF0IHVzZSAiLi4iIG5vdGF0aW9ucywgY2FuIGJlIGFueQorPHRyZWU+LgorCitGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2Ygd2F5cyB0byBzcGVsbCA8Y29tbWl0Piwgc2VlCisiU1BFQ0lGWUlORyBSRVZJU0lPTlMiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCitIb3dldmVyLCAiZGlmZiIgaXMgYWJvdXQgY29tcGFyaW5nIHR3byBfZW5kcG9pbnRzXywgbm90IHJhbmdlcywKK2FuZCB0aGUgcmFuZ2Ugbm90YXRpb25zICgiPGNvbW1pdD4uLjxjb21taXQ+IiBhbmQKKyI8Y29tbWl0PlwuLi48Y29tbWl0PiIpIGRvIG5vdCBtZWFuIGEgcmFuZ2UgYXMgZGVmaW5lZCBpbiB0aGUKKyJTUEVDSUZZSU5HIFJBTkdFUyIgc2VjdGlvbiBpbiBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XS4KKworJ2dpdCBkaWZmJyBbPG9wdGlvbnM+XSA8YmxvYj4gPGJsb2I+OjoKKworCVRoaXMgZm9ybSBpcyB0byB2aWV3IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSByYXcKKwljb250ZW50cyBvZiB0d28gYmxvYiBvYmplY3RzLgorCitPUFRJT05TCistLS0tLS0tCis6Z2l0LWRpZmY6IDEKK2luY2x1ZGU6OmRpZmYtb3B0aW9ucy50eHRbXQorCistMSAtLWJhc2U6OgorLTIgLS1vdXJzOjoKKy0zIC0tdGhlaXJzOjoKKwlDb21wYXJlIHRoZSB3b3JraW5nIHRyZWUgd2l0aCB0aGUgImJhc2UiIHZlcnNpb24gKHN0YWdlICMxKSwKKwkib3VyIGJyYW5jaCIgKHN0YWdlICMyKSBvciAidGhlaXIgYnJhbmNoIiAoc3RhZ2UgIzMpLiAgVGhlCisJaW5kZXggY29udGFpbnMgdGhlc2Ugc3RhZ2VzIG9ubHkgZm9yIHVubWVyZ2VkIGVudHJpZXMgaS5lLgorCXdoaWxlIHJlc29sdmluZyBjb25mbGljdHMuICBTZWUgbGlua2dpdDpnaXQtcmVhZC10cmVlWzFdCisJc2VjdGlvbiAiMy1XYXkgTWVyZ2UiIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbi4KKworLTA6OgorCU9taXQgZGlmZiBvdXRwdXQgZm9yIHVubWVyZ2VkIGVudHJpZXMgYW5kIGp1c3Qgc2hvdworCSJVbm1lcmdlZCIuICBDYW4gYmUgdXNlZCBvbmx5IHdoZW4gY29tcGFyaW5nIHRoZSB3b3JraW5nIHRyZWUKKwl3aXRoIHRoZSBpbmRleC4KKworPHBhdGg+Li4uOjoKKwlUaGUgPHBhdGhzPiBwYXJhbWV0ZXJzLCB3aGVuIGdpdmVuLCBhcmUgdXNlZCB0byBsaW1pdAorCXRoZSBkaWZmIHRvIHRoZSBuYW1lZCBwYXRocyAoeW91IGNhbiBnaXZlIGRpcmVjdG9yeQorCW5hbWVzIGFuZCBnZXQgZGlmZiBmb3IgYWxsIGZpbGVzIHVuZGVyIHRoZW0pLgorCisKK2luY2x1ZGU6OmRpZmYtZm9ybWF0LnR4dFtdCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitWYXJpb3VzIHdheXMgdG8gY2hlY2sgeW91ciB3b3JraW5nIHRyZWU6OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmICAgICAgICAgICAgPDE+CiskIGdpdCBkaWZmIC0tY2FjaGVkICAgPDI+CiskIGdpdCBkaWZmIEhFQUQgICAgICAgPDM+CistLS0tLS0tLS0tLS0KKysKKzwxPiBDaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUgbm90IHlldCBzdGFnZWQgZm9yIHRoZSBuZXh0IGNvbW1pdC4KKzwyPiBDaGFuZ2VzIGJldHdlZW4gdGhlIGluZGV4IGFuZCB5b3VyIGxhc3QgY29tbWl0OyB3aGF0IHlvdQorICAgIHdvdWxkIGJlIGNvbW1pdHRpbmcgaWYgeW91IHJ1biAiZ2l0IGNvbW1pdCIgd2l0aG91dCAiLWEiIG9wdGlvbi4KKzwzPiBDaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUgc2luY2UgeW91ciBsYXN0IGNvbW1pdDsgd2hhdCB5b3UKKyAgICB3b3VsZCBiZSBjb21taXR0aW5nIGlmIHlvdSBydW4gImdpdCBjb21taXQgLWEiCisKK0NvbXBhcmluZyB3aXRoIGFyYml0cmFyeSBjb21taXRzOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiB0ZXN0ICAgICAgICAgICAgPDE+CiskIGdpdCBkaWZmIEhFQUQgLS0gLi90ZXN0ICA8Mj4KKyQgZ2l0IGRpZmYgSEVBRF4gSEVBRCAgICAgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gSW5zdGVhZCBvZiB1c2luZyB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaCwgY29tcGFyZSB3aXRoIHRoZQorICAgIHRpcCBvZiAidGVzdCIgYnJhbmNoLgorPDI+IEluc3RlYWQgb2YgY29tcGFyaW5nIHdpdGggdGhlIHRpcCBvZiAidGVzdCIgYnJhbmNoLCBjb21wYXJlIHdpdGgKKyAgICB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaCwgYnV0IGxpbWl0IHRoZSBjb21wYXJpc29uIHRvIHRoZQorICAgIGZpbGUgInRlc3QiLgorPDM+IENvbXBhcmUgdGhlIHZlcnNpb24gYmVmb3JlIHRoZSBsYXN0IGNvbW1pdCBhbmQgdGhlIGxhc3QgY29tbWl0LgorCitDb21wYXJpbmcgYnJhbmNoZXM6OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIHRvcGljIG1hc3RlciAgICA8MT4KKyQgZ2l0IGRpZmYgdG9waWMuLm1hc3RlciAgIDwyPgorJCBnaXQgZGlmZiB0b3BpYy4uLm1hc3RlciAgPDM+CistLS0tLS0tLS0tLS0KKysKKzwxPiBDaGFuZ2VzIGJldHdlZW4gdGhlIHRpcHMgb2YgdGhlIHRvcGljIGFuZCB0aGUgbWFzdGVyIGJyYW5jaGVzLgorPDI+IFNhbWUgYXMgYWJvdmUuCis8Mz4gQ2hhbmdlcyB0aGF0IG9jY3VycmVkIG9uIHRoZSBtYXN0ZXIgYnJhbmNoIHNpbmNlIHdoZW4gdGhlIHRvcGljCisgICAgYnJhbmNoIHdhcyBzdGFydGVkIG9mZiBpdC4KKworTGltaXRpbmcgdGhlIGRpZmYgb3V0cHV0OjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiAtLWRpZmYtZmlsdGVyPU1SQyAgICAgICAgICAgIDwxPgorJCBnaXQgZGlmZiAtLW5hbWUtc3RhdHVzICAgICAgICAgICAgICAgIDwyPgorJCBnaXQgZGlmZiBhcmNoL2kzODYgaW5jbHVkZS9hc20taTM4NiAgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gU2hvdyBvbmx5IG1vZGlmaWNhdGlvbiwgcmVuYW1lLCBhbmQgY29weSwgYnV0IG5vdCBhZGRpdGlvbgorICAgIG9yIGRlbGV0aW9uLgorPDI+IFNob3cgb25seSBuYW1lcyBhbmQgdGhlIG5hdHVyZSBvZiBjaGFuZ2UsIGJ1dCBub3QgYWN0dWFsCisgICAgZGlmZiBvdXRwdXQuCis8Mz4gTGltaXQgZGlmZiBvdXRwdXQgdG8gbmFtZWQgc3VidHJlZXMuCisKK011bmdpbmcgdGhlIGRpZmYgb3V0cHV0OjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiAtLWZpbmQtY29waWVzLWhhcmRlciAtQiAtQyAgPDE+CiskIGdpdCBkaWZmIC1SICAgICAgICAgICAgICAgICAgICAgICAgICA8Mj4KKy0tLS0tLS0tLS0tLQorKworPDE+IFNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIHJlbmFtZXMsIGNvcGllcyBhbmQgY29tcGxldGUKKyAgICByZXdyaXRlcyAodmVyeSBleHBlbnNpdmUpLgorPDI+IE91dHB1dCBkaWZmIGluIHJldmVyc2UuCisKK1NFRSBBTFNPCistLS0tLS0tLQorZGlmZigxKSwKK2xpbmtnaXQ6Z2l0LWRpZmZ0b29sWzFdLAorbGlua2dpdDpnaXQtbG9nWzFdLAorbGlua2dpdDpnaXRkaWZmY29yZVs3XSwKK2xpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSwKK2xpbmtnaXQ6Z2l0LWFwcGx5WzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZnRvb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZnRvb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NGM0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmdG9vbC50eHQKQEAgLTAsMCArMSwxNDkgQEAKK2dpdC1kaWZmdG9vbCgxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1kaWZmdG9vbCAtIFNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZGlmZnRvb2wnIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorJ2dpdCBkaWZmdG9vbCcgaXMgYSBHaXQgY29tbWFuZCB0aGF0IGFsbG93cyB5b3UgdG8gY29tcGFyZSBhbmQgZWRpdCBmaWxlcworYmV0d2VlbiByZXZpc2lvbnMgdXNpbmcgY29tbW9uIGRpZmYgdG9vbHMuICAnZ2l0IGRpZmZ0b29sJyBpcyBhIGZyb250ZW5kCit0byAnZ2l0IGRpZmYnIGFuZCBhY2NlcHRzIHRoZSBzYW1lIG9wdGlvbnMgYW5kIGFyZ3VtZW50cy4gU2VlCitsaW5rZ2l0OmdpdC1kaWZmWzFdLgorCitPUFRJT05TCistLS0tLS0tCistZDo6CistLWRpci1kaWZmOjoKKwlDb3B5IHRoZSBtb2RpZmllZCBmaWxlcyB0byBhIHRlbXBvcmFyeSBsb2NhdGlvbiBhbmQgcGVyZm9ybQorCWEgZGlyZWN0b3J5IGRpZmYgb24gdGhlbS4gVGhpcyBtb2RlIG5ldmVyIHByb21wdHMgYmVmb3JlCisJbGF1bmNoaW5nIHRoZSBkaWZmIHRvb2wuCisKKy15OjoKKy0tbm8tcHJvbXB0OjoKKwlEbyBub3QgcHJvbXB0IGJlZm9yZSBsYXVuY2hpbmcgYSBkaWZmIHRvb2wuCisKKy0tcHJvbXB0OjoKKwlQcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgZGlmZiB0b29sLgorCVRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyOyB0aGUgb3B0aW9uIGlzIHByb3ZpZGVkIHRvCisJb3ZlcnJpZGUgYW55IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisKKy10IDx0b29sPjo6CistLXRvb2w9PHRvb2w+OjoKKwlVc2UgdGhlIGRpZmYgdG9vbCBzcGVjaWZpZWQgYnkgPHRvb2w+LiAgVmFsaWQgdmFsdWVzIGluY2x1ZGUKKwllbWVyZ2UsIGtvbXBhcmUsIG1lbGQsIGFuZCB2aW1kaWZmLiBSdW4gYGdpdCBkaWZmdG9vbCAtLXRvb2wtaGVscGAKKwlmb3IgdGhlIGxpc3Qgb2YgdmFsaWQgPHRvb2w+IHNldHRpbmdzLgorKworSWYgYSBkaWZmIHRvb2wgaXMgbm90IHNwZWNpZmllZCwgJ2dpdCBkaWZmdG9vbCcKK3dpbGwgdXNlIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBkaWZmLnRvb2xgLiAgSWYgdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBkaWZmLnRvb2xgIGlzIG5vdCBzZXQsICdnaXQgZGlmZnRvb2wnCit3aWxsIHBpY2sgYSBzdWl0YWJsZSBkZWZhdWx0LgorKworWW91IGNhbiBleHBsaWNpdGx5IHByb3ZpZGUgYSBmdWxsIHBhdGggdG8gdGhlIHRvb2wgYnkgc2V0dGluZyB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGRpZmZ0b29sLjx0b29sPi5wYXRoYC4gRm9yIGV4YW1wbGUsIHlvdQorY2FuIGNvbmZpZ3VyZSB0aGUgYWJzb2x1dGUgcGF0aCB0byBrZGlmZjMgYnkgc2V0dGluZworYGRpZmZ0b29sLmtkaWZmMy5wYXRoYC4gT3RoZXJ3aXNlLCAnZ2l0IGRpZmZ0b29sJyBhc3N1bWVzIHRoZQordG9vbCBpcyBhdmFpbGFibGUgaW4gUEFUSC4KKysKK0luc3RlYWQgb2YgcnVubmluZyBvbmUgb2YgdGhlIGtub3duIGRpZmYgdG9vbHMsCisnZ2l0IGRpZmZ0b29sJyBjYW4gYmUgY3VzdG9taXplZCB0byBydW4gYW4gYWx0ZXJuYXRpdmUgcHJvZ3JhbQorYnkgc3BlY2lmeWluZyB0aGUgY29tbWFuZCBsaW5lIHRvIGludm9rZSBpbiBhIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlIGBkaWZmdG9vbC48dG9vbD4uY21kYC4KKysKK1doZW4gJ2dpdCBkaWZmdG9vbCcgaXMgaW52b2tlZCB3aXRoIHRoaXMgdG9vbCAoZWl0aGVyIHRocm91Z2ggdGhlCitgLXRgIG9yIGAtLXRvb2xgIG9wdGlvbiBvciB0aGUgYGRpZmYudG9vbGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSkKK3RoZSBjb25maWd1cmVkIGNvbW1hbmQgbGluZSB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUgZm9sbG93aW5nCit2YXJpYWJsZXMgYXZhaWxhYmxlOiBgJExPQ0FMYCBpcyBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeQorZmlsZSBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgZGlmZiBwcmUtaW1hZ2UgYW5kIGAkUkVNT1RFYAoraXMgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSBjb250YWluaW5nIHRoZSBjb250ZW50cworb2YgdGhlIGRpZmYgcG9zdC1pbWFnZS4gIGAkTUVSR0VEYCBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3aGljaCBpcworYmVpbmcgY29tcGFyZWQuIGAkQkFTRWAgaXMgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHkKK3dpdGggY3VzdG9tIG1lcmdlIHRvb2wgY29tbWFuZHMgYW5kIGhhcyB0aGUgc2FtZSB2YWx1ZSBhcyBgJE1FUkdFRGAuCisKKy0tdG9vbC1oZWxwOjoKKwlQcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggYC0tdG9vbGAuCisKKy0tW25vLV1zeW1saW5rczo6CisJJ2dpdCBkaWZmdG9vbCcncyBkZWZhdWx0IGJlaGF2aW9yIGlzIGNyZWF0ZSBzeW1saW5rcyB0byB0aGUKKwl3b3JraW5nIHRyZWUgd2hlbiBydW4gaW4gYC0tZGlyLWRpZmZgIG1vZGUgYW5kIHRoZSByaWdodC1oYW5kCisJc2lkZSBvZiB0aGUgY29tcGFyaXNvbiB5aWVsZHMgdGhlIHNhbWUgY29udGVudCBhcyB0aGUgZmlsZSBpbgorCXRoZSB3b3JraW5nIHRyZWUuCisrCitTcGVjaWZ5aW5nIGAtLW5vLXN5bWxpbmtzYCBpbnN0cnVjdHMgJ2dpdCBkaWZmdG9vbCcgdG8gY3JlYXRlIGNvcGllcworaW5zdGVhZC4gIGAtLW5vLXN5bWxpbmtzYCBpcyB0aGUgZGVmYXVsdCBvbiBXaW5kb3dzLgorCisteCA8Y29tbWFuZD46OgorLS1leHRjbWQ9PGNvbW1hbmQ+OjoKKwlTcGVjaWZ5IGEgY3VzdG9tIGNvbW1hbmQgZm9yIHZpZXdpbmcgZGlmZnMuCisJJ2dpdC1kaWZmdG9vbCcgaWdub3JlcyB0aGUgY29uZmlndXJlZCBkZWZhdWx0cyBhbmQgcnVucworCWAkY29tbWFuZCAkTE9DQUwgJFJFTU9URWAgd2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisJQWRkaXRpb25hbGx5LCBgJEJBU0VgIGlzIHNldCBpbiB0aGUgZW52aXJvbm1lbnQuCisKKy1nOjoKKy0tW25vLV1ndWk6OgorCVdoZW4gJ2dpdC1kaWZmdG9vbCcgaXMgaW52b2tlZCB3aXRoIHRoZSBgLWdgIG9yIGAtLWd1aWAgb3B0aW9uCisJdGhlIGRlZmF1bHQgZGlmZiB0b29sIHdpbGwgYmUgcmVhZCBmcm9tIHRoZSBjb25maWd1cmVkCisJYGRpZmYuZ3VpdG9vbGAgdmFyaWFibGUgaW5zdGVhZCBvZiBgZGlmZi50b29sYC4gVGhlIGAtLW5vLWd1aWAKKwlvcHRpb24gY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhpcyBzZXR0aW5nLiBJZiBgZGlmZi5ndWl0b29sYAorCWlzIG5vdCBzZXQsIHdlIHdpbGwgZmFsbGJhY2sgaW4gdGhlIG9yZGVyIG9mIGBtZXJnZS5ndWl0b29sYCwKKwlgZGlmZi50b29sYCwgYG1lcmdlLnRvb2xgIHVudGlsIGEgdG9vbCBpcyBmb3VuZC4KKworLS1bbm8tXXRydXN0LWV4aXQtY29kZTo6CisJJ2dpdC1kaWZmdG9vbCcgaW52b2tlcyBhIGRpZmYgdG9vbCBpbmRpdmlkdWFsbHkgb24gZWFjaCBmaWxlLgorCUVycm9ycyByZXBvcnRlZCBieSB0aGUgZGlmZiB0b29sIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQuCisJVXNlIGAtLXRydXN0LWV4aXQtY29kZWAgdG8gbWFrZSAnZ2l0LWRpZmZ0b29sJyBleGl0IHdoZW4gYW4KKwlpbnZva2VkIGRpZmYgdG9vbCByZXR1cm5zIGEgbm9uLXplcm8gZXhpdCBjb2RlLgorKworJ2dpdC1kaWZmdG9vbCcgd2lsbCBmb3J3YXJkIHRoZSBleGl0IGNvZGUgb2YgdGhlIGludm9rZWQgdG9vbCB3aGVuCitgLS10cnVzdC1leGl0LWNvZGVgIGlzIHVzZWQuCisKK1NlZSBsaW5rZ2l0OmdpdC1kaWZmWzFdIGZvciB0aGUgZnVsbCBsaXN0IG9mIHN1cHBvcnRlZCBvcHRpb25zLgorCitDT05GSUcgVkFSSUFCTEVTCistLS0tLS0tLS0tLS0tLS0tCisnZ2l0IGRpZmZ0b29sJyBmYWxscyBiYWNrIHRvICdnaXQgbWVyZ2V0b29sJyBjb25maWcgdmFyaWFibGVzIHdoZW4gdGhlCitkaWZmdG9vbCBlcXVpdmFsZW50cyBoYXZlIG5vdCBiZWVuIGRlZmluZWQuCisKK2RpZmYudG9vbDo6CisJVGhlIGRlZmF1bHQgZGlmZiB0b29sIHRvIHVzZS4KKworZGlmZi5ndWl0b29sOjoKKwlUaGUgZGVmYXVsdCBkaWZmIHRvb2wgdG8gdXNlIHdoZW4gYC0tZ3VpYCBpcyBzcGVjaWZpZWQuCisKK2RpZmZ0b29sLjx0b29sPi5wYXRoOjoKKwlPdmVycmlkZSB0aGUgcGF0aCBmb3IgdGhlIGdpdmVuIHRvb2wuICBUaGlzIGlzIHVzZWZ1bCBpbiBjYXNlCisJeW91ciB0b29sIGlzIG5vdCBpbiB0aGUgUEFUSC4KKworZGlmZnRvb2wuPHRvb2w+LmNtZDo6CisJU3BlY2lmeSB0aGUgY29tbWFuZCB0byBpbnZva2UgdGhlIHNwZWNpZmllZCBkaWZmIHRvb2wuCisrCitTZWUgdGhlIGAtLXRvb2w9PHRvb2w+YCBvcHRpb24gYWJvdmUgZm9yIG1vcmUgZGV0YWlscy4KKworZGlmZnRvb2wucHJvbXB0OjoKKwlQcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgZGlmZiB0b29sLgorCitkaWZmdG9vbC50cnVzdEV4aXRDb2RlOjoKKwlFeGl0IGRpZmZ0b29sIGlmIHRoZSBpbnZva2VkIGRpZmYgdG9vbCByZXR1cm5zIGEgbm9uLXplcm8gZXhpdCBzdGF0dXMuCisrCitTZWUgdGhlIGAtLXRydXN0LWV4aXQtY29kZWAgb3B0aW9uIGFib3ZlIGZvciBtb3JlIGRldGFpbHMuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtZGlmZlsxXTo6CisJIFNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMKKworbGlua2dpdDpnaXQtbWVyZ2V0b29sWzFdOjoKKwlSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cworCitsaW5rZ2l0OmdpdC1jb25maWdbMV06OgorCSBHZXQgYW5kIHNldCByZXBvc2l0b3J5IG9yIGdsb2JhbCBvcHRpb25zCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OTUwZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWV4cG9ydC50eHQKQEAgLTAsMCArMSwyNTUgQEAKK2dpdC1mYXN0LWV4cG9ydCgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1mYXN0LWV4cG9ydCAtIEdpdCBkYXRhIGV4cG9ydGVyCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGZhc3QtZXhwb3J0IFs8b3B0aW9ucz5dJyB8ICdnaXQgZmFzdC1pbXBvcnQnCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBwcm9ncmFtIGR1bXBzIHRoZSBnaXZlbiByZXZpc2lvbnMgaW4gYSBmb3JtIHN1aXRhYmxlIHRvIGJlIHBpcGVkCitpbnRvICdnaXQgZmFzdC1pbXBvcnQnLgorCitZb3UgY2FuIHVzZSBpdCBhcyBhIGh1bWFuLXJlYWRhYmxlIGJ1bmRsZSByZXBsYWNlbWVudCAoc2VlCitsaW5rZ2l0OmdpdC1idW5kbGVbMV0pLCBvciBhcyBhIGZvcm1hdCB0aGF0IGNhbiBiZSBlZGl0ZWQgYmVmb3JlIGJlaW5nCitmZWQgdG8gJ2dpdCBmYXN0LWltcG9ydCcgaW4gb3JkZXIgdG8gZG8gaGlzdG9yeSByZXdyaXRlcyAoYW4gYWJpbGl0eQorcmVsaWVkIG9uIGJ5IHRvb2xzIGxpa2UgJ2dpdCBmaWx0ZXItcmVwbycpLgorCitPUFRJT05TCistLS0tLS0tCistLXByb2dyZXNzPTxuPjo6CisJSW5zZXJ0ICdwcm9ncmVzcycgc3RhdGVtZW50cyBldmVyeSA8bj4gb2JqZWN0cywgdG8gYmUgc2hvd24gYnkKKwknZ2l0IGZhc3QtaW1wb3J0JyBkdXJpbmcgaW1wb3J0LgorCistLXNpZ25lZC10YWdzPSh2ZXJiYXRpbXx3YXJufHdhcm4tc3RyaXB8c3RyaXB8YWJvcnQpOjoKKwlTcGVjaWZ5IGhvdyB0byBoYW5kbGUgc2lnbmVkIHRhZ3MuICBTaW5jZSBhbnkgdHJhbnNmb3JtYXRpb24KKwlhZnRlciB0aGUgZXhwb3J0IGNhbiBjaGFuZ2UgdGhlIHRhZyBuYW1lcyAod2hpY2ggY2FuIGFsc28gaGFwcGVuCisJd2hlbiBleGNsdWRpbmcgcmV2aXNpb25zKSB0aGUgc2lnbmF0dXJlcyB3aWxsIG5vdCBtYXRjaC4KKysKK1doZW4gYXNraW5nIHRvICdhYm9ydCcgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgdGhpcyBwcm9ncmFtIHdpbGwgZGllCit3aGVuIGVuY291bnRlcmluZyBhIHNpZ25lZCB0YWcuICBXaXRoICdzdHJpcCcsIHRoZSB0YWdzIHdpbGwgc2lsZW50bHkKK2JlIG1hZGUgdW5zaWduZWQsIHdpdGggJ3dhcm4tc3RyaXAnIHRoZXkgd2lsbCBiZSBtYWRlIHVuc2lnbmVkIGJ1dCBhCit3YXJuaW5nIHdpbGwgYmUgZGlzcGxheWVkLCB3aXRoICd2ZXJiYXRpbScsIHRoZXkgd2lsbCBiZSBzaWxlbnRseQorZXhwb3J0ZWQgYW5kIHdpdGggJ3dhcm4nLCB0aGV5IHdpbGwgYmUgZXhwb3J0ZWQsIGJ1dCB5b3Ugd2lsbCBzZWUgYQord2FybmluZy4KKworLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0PShhYm9ydHxkcm9wfHJld3JpdGUpOjoKKwlTcGVjaWZ5IGhvdyB0byBoYW5kbGUgdGFncyB3aG9zZSB0YWdnZWQgb2JqZWN0IGlzIGZpbHRlcmVkIG91dC4KKwlTaW5jZSByZXZpc2lvbnMgYW5kIGZpbGVzIHRvIGV4cG9ydCBjYW4gYmUgbGltaXRlZCBieSBwYXRoLAorCXRhZ2dlZCBvYmplY3RzIG1heSBiZSBmaWx0ZXJlZCBjb21wbGV0ZWx5LgorKworV2hlbiBhc2tpbmcgdG8gJ2Fib3J0JyAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCB0aGlzIHByb2dyYW0gd2lsbCBkaWUKK3doZW4gZW5jb3VudGVyaW5nIHN1Y2ggYSB0YWcuICBXaXRoICdkcm9wJyBpdCB3aWxsIG9taXQgc3VjaCB0YWdzIGZyb20KK3RoZSBvdXRwdXQuICBXaXRoICdyZXdyaXRlJywgaWYgdGhlIHRhZ2dlZCBvYmplY3QgaXMgYSBjb21taXQsIGl0IHdpbGwKK3Jld3JpdGUgdGhlIHRhZyB0byB0YWcgYW4gYW5jZXN0b3IgY29tbWl0ICh2aWEgcGFyZW50IHJld3JpdGluZzsgc2VlCitsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSkKKworLU06OgorLUM6OgorCVBlcmZvcm0gbW92ZSBhbmQvb3IgY29weSBkZXRlY3Rpb24sIGFzIGRlc2NyaWJlZCBpbiB0aGUKKwlsaW5rZ2l0OmdpdC1kaWZmWzFdIG1hbnVhbCBwYWdlLCBhbmQgdXNlIGl0IHRvIGdlbmVyYXRlCisJcmVuYW1lIGFuZCBjb3B5IGNvbW1hbmRzIGluIHRoZSBvdXRwdXQgZHVtcC4KKysKK05vdGUgdGhhdCBlYXJsaWVyIHZlcnNpb25zIG9mIHRoaXMgY29tbWFuZCBkaWQgbm90IGNvbXBsYWluIGFuZAorcHJvZHVjZWQgaW5jb3JyZWN0IHJlc3VsdHMgaWYgeW91IGdhdmUgdGhlc2Ugb3B0aW9ucy4KKworLS1leHBvcnQtbWFya3M9PGZpbGU+OjoKKwlEdW1wcyB0aGUgaW50ZXJuYWwgbWFya3MgdGFibGUgdG8gPGZpbGU+IHdoZW4gY29tcGxldGUuCisJTWFya3MgYXJlIHdyaXR0ZW4gb25lIHBlciBsaW5lIGFzIGA6bWFya2lkIFNIQS0xYC4gT25seSBtYXJrcworCWZvciByZXZpc2lvbnMgYXJlIGR1bXBlZDsgbWFya3MgZm9yIGJsb2JzIGFyZSBpZ25vcmVkLgorCUJhY2tlbmRzIGNhbiB1c2UgdGhpcyBmaWxlIHRvIHZhbGlkYXRlIGltcG9ydHMgYWZ0ZXIgdGhleQorCWhhdmUgYmVlbiBjb21wbGV0ZWQsIG9yIHRvIHNhdmUgdGhlIG1hcmtzIHRhYmxlIGFjcm9zcworCWluY3JlbWVudGFsIHJ1bnMuICBBcyA8ZmlsZT4gaXMgb25seSBvcGVuZWQgYW5kIHRydW5jYXRlZAorCWF0IGNvbXBsZXRpb24sIHRoZSBzYW1lIHBhdGggY2FuIGFsc28gYmUgc2FmZWx5IGdpdmVuIHRvCisJLS1pbXBvcnQtbWFya3MuCisJVGhlIGZpbGUgd2lsbCBub3QgYmUgd3JpdHRlbiBpZiBubyBuZXcgb2JqZWN0IGhhcyBiZWVuCisJbWFya2VkL2V4cG9ydGVkLgorCistLWltcG9ydC1tYXJrcz08ZmlsZT46OgorCUJlZm9yZSBwcm9jZXNzaW5nIGFueSBpbnB1dCwgbG9hZCB0aGUgbWFya3Mgc3BlY2lmaWVkIGluCisJPGZpbGU+LiAgVGhlIGlucHV0IGZpbGUgbXVzdCBleGlzdCwgbXVzdCBiZSByZWFkYWJsZSwgYW5kCisJbXVzdCB1c2UgdGhlIHNhbWUgZm9ybWF0IGFzIHByb2R1Y2VkIGJ5IC0tZXhwb3J0LW1hcmtzLgorCistLW1hcmstdGFnczo6CisJSW4gYWRkaXRpb24gdG8gbGFiZWxsaW5nIGJsb2JzIGFuZCBjb21taXRzIHdpdGggbWFyayBpZHMsIGFsc28KKwlsYWJlbCB0YWdzLiAgVGhpcyBpcyB1c2VmdWwgaW4gY29uanVuY3Rpb24gd2l0aAorCWAtLWV4cG9ydC1tYXJrc2AgYW5kIGAtLWltcG9ydC1tYXJrc2AsIGFuZCBpcyBhbHNvIHVzZWZ1bCAoYW5kCisJbmVjZXNzYXJ5KSBmb3IgZXhwb3J0aW5nIG9mIG5lc3RlZCB0YWdzLiAgSXQgZG9lcyBub3QgaHVydAorCW90aGVyIGNhc2VzIGFuZCB3b3VsZCBiZSB0aGUgZGVmYXVsdCwgYnV0IG1hbnkgZmFzdC1pbXBvcnQKKwlmcm9udGVuZHMgYXJlIG5vdCBwcmVwYXJlZCB0byBhY2NlcHQgdGFncyB3aXRoIG1hcmsKKwlpZGVudGlmaWVycy4KKysKK0FueSBjb21taXRzIChvciB0YWdzKSB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIG1hcmtlZCB3aWxsIG5vdCBiZQorZXhwb3J0ZWQgYWdhaW4uICBJZiB0aGUgYmFja2VuZCB1c2VzIGEgc2ltaWxhciAtLWltcG9ydC1tYXJrcyBmaWxlLAordGhpcyBhbGxvd3MgZm9yIGluY3JlbWVudGFsIGJpZGlyZWN0aW9uYWwgZXhwb3J0aW5nIG9mIHRoZSByZXBvc2l0b3J5CitieSBrZWVwaW5nIHRoZSBtYXJrcyB0aGUgc2FtZSBhY3Jvc3MgcnVucy4KKworLS1mYWtlLW1pc3NpbmctdGFnZ2VyOjoKKwlTb21lIG9sZCByZXBvc2l0b3JpZXMgaGF2ZSB0YWdzIHdpdGhvdXQgYSB0YWdnZXIuICBUaGUKKwlmYXN0LWltcG9ydCBwcm90b2NvbCB3YXMgcHJldHR5IHN0cmljdCBhYm91dCB0aGF0LCBhbmQgZGlkIG5vdAorCWFsbG93IHRoYXQuICBTbyBmYWtlIGEgdGFnZ2VyIHRvIGJlIGFibGUgdG8gZmFzdC1pbXBvcnQgdGhlCisJb3V0cHV0LgorCistLXVzZS1kb25lLWZlYXR1cmU6OgorCVN0YXJ0IHRoZSBzdHJlYW0gd2l0aCBhICdmZWF0dXJlIGRvbmUnIHN0YW56YSwgYW5kIHRlcm1pbmF0ZQorCWl0IHdpdGggYSAnZG9uZScgY29tbWFuZC4KKworLS1uby1kYXRhOjoKKwlTa2lwIG91dHB1dCBvZiBibG9iIG9iamVjdHMgYW5kIGluc3RlYWQgcmVmZXIgdG8gYmxvYnMgdmlhCisJdGhlaXIgb3JpZ2luYWwgU0hBLTEgaGFzaC4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gcmV3cml0aW5nIHRoZQorCWRpcmVjdG9yeSBzdHJ1Y3R1cmUgb3IgaGlzdG9yeSBvZiBhIHJlcG9zaXRvcnkgd2l0aG91dAorCXRvdWNoaW5nIHRoZSBjb250ZW50cyBvZiBpbmRpdmlkdWFsIGZpbGVzLiAgTm90ZSB0aGF0IHRoZQorCXJlc3VsdGluZyBzdHJlYW0gY2FuIG9ubHkgYmUgdXNlZCBieSBhIHJlcG9zaXRvcnkgd2hpY2gKKwlhbHJlYWR5IGNvbnRhaW5zIHRoZSBuZWNlc3Nhcnkgb2JqZWN0cy4KKworLS1mdWxsLXRyZWU6OgorCVRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgZmFzdC1leHBvcnQgdG8gaXNzdWUgYSAiZGVsZXRlYWxsIgorCWRpcmVjdGl2ZSBmb3IgZWFjaCBjb21taXQgZm9sbG93ZWQgYnkgYSBmdWxsIGxpc3Qgb2YgYWxsIGZpbGVzCisJaW4gdGhlIGNvbW1pdCAoYXMgb3Bwb3NlZCB0byBqdXN0IGxpc3RpbmcgdGhlIGZpbGVzIHdoaWNoIGFyZQorCWRpZmZlcmVudCBmcm9tIHRoZSBjb21taXQncyBmaXJzdCBwYXJlbnQpLgorCistLWFub255bWl6ZTo6CisJQW5vbnltaXplIHRoZSBjb250ZW50cyBvZiB0aGUgcmVwb3NpdG9yeSB3aGlsZSBzdGlsbCByZXRhaW5pbmcKKwl0aGUgc2hhcGUgb2YgdGhlIGhpc3RvcnkgYW5kIHN0b3JlZCB0cmVlLiAgU2VlIHRoZSBzZWN0aW9uIG9uCisJYEFOT05ZTUlaSU5HYCBiZWxvdy4KKworLS1yZWZlcmVuY2UtZXhjbHVkZWQtcGFyZW50czo6CisJQnkgZGVmYXVsdCwgcnVubmluZyBhIGNvbW1hbmQgc3VjaCBhcyBgZ2l0IGZhc3QtZXhwb3J0CisJbWFzdGVyfjUuLm1hc3RlcmAgd2lsbCBub3QgaW5jbHVkZSB0aGUgY29tbWl0IG1hc3Rlcnt0aWxkZX01CisJYW5kIHdpbGwgbWFrZSBtYXN0ZXJ7dGlsZGV9NCBubyBsb25nZXIgaGF2ZSBtYXN0ZXJ7dGlsZGV9NSBhcworCWEgcGFyZW50ICh0aG91Z2ggYm90aCB0aGUgb2xkIG1hc3Rlcnt0aWxkZX00IGFuZCBuZXcKKwltYXN0ZXJ7dGlsZGV9NCB3aWxsIGhhdmUgYWxsIHRoZSBzYW1lIGZpbGVzKS4gIFVzZQorCS0tcmVmZXJlbmNlLWV4Y2x1ZGVkLXBhcmVudHMgdG8gaW5zdGVhZCBoYXZlIHRoZSBzdHJlYW0KKwlyZWZlciB0byBjb21taXRzIGluIHRoZSBleGNsdWRlZCByYW5nZSBvZiBoaXN0b3J5IGJ5IHRoZWlyCisJc2hhMXN1bS4gIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIHN0cmVhbSBjYW4gb25seSBiZSB1c2VkIGJ5IGEKKwlyZXBvc2l0b3J5IHdoaWNoIGFscmVhZHkgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBwYXJlbnQKKwljb21taXRzLgorCistLXNob3ctb3JpZ2luYWwtaWRzOjoKKwlBZGQgYW4gZXh0cmEgZGlyZWN0aXZlIHRvIHRoZSBvdXRwdXQgZm9yIGNvbW1pdHMgYW5kIGJsb2JzLAorCWBvcmlnaW5hbC1vaWQgPFNIQTFTVU0+YC4gIFdoaWxlIHN1Y2ggZGlyZWN0aXZlcyB3aWxsIGxpa2VseSBiZQorCWlnbm9yZWQgYnkgaW1wb3J0ZXJzIHN1Y2ggYXMgZ2l0LWZhc3QtaW1wb3J0LCBpdCBtYXkgYmUgdXNlZnVsCisJZm9yIGludGVybWVkaWFyeSBmaWx0ZXJzIChlLmcuIGZvciByZXdyaXRpbmcgY29tbWl0IG1lc3NhZ2VzCisJd2hpY2ggcmVmZXIgdG8gb2xkZXIgY29tbWl0cywgb3IgZm9yIHN0cmlwcGluZyBibG9icyBieSBpZCkuCisKKy0tcmVlbmNvZGU9KHllc3xub3xhYm9ydCk6OgorCVNwZWNpZnkgaG93IHRvIGhhbmRsZSBgZW5jb2RpbmdgIGhlYWRlciBpbiBjb21taXQgb2JqZWN0cy4gIFdoZW4KKwlhc2tpbmcgdG8gJ2Fib3J0JyAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCB0aGlzIHByb2dyYW0gd2lsbCBkaWUKKwl3aGVuIGVuY291bnRlcmluZyBzdWNoIGEgY29tbWl0IG9iamVjdC4gIFdpdGggJ3llcycsIHRoZSBjb21taXQKKwltZXNzYWdlIHdpbGwgYmUgcmUtZW5jb2RlZCBpbnRvIFVURi04LiAgV2l0aCAnbm8nLCB0aGUgb3JpZ2luYWwKKwllbmNvZGluZyB3aWxsIGJlIHByZXNlcnZlZC4KKworLS1yZWZzcGVjOjoKKwlBcHBseSB0aGUgc3BlY2lmaWVkIHJlZnNwZWMgdG8gZWFjaCByZWYgZXhwb3J0ZWQuIE11bHRpcGxlIG9mIHRoZW0gY2FuCisJYmUgc3BlY2lmaWVkLgorCitbPGdpdC1yZXYtbGlzdC1hcmdzPi4uLl06OgorCUEgbGlzdCBvZiBhcmd1bWVudHMsIGFjY2VwdGFibGUgdG8gJ2dpdCByZXYtcGFyc2UnIGFuZAorCSdnaXQgcmV2LWxpc3QnLCB0aGF0IHNwZWNpZmllcyB0aGUgc3BlY2lmaWMgb2JqZWN0cyBhbmQgcmVmZXJlbmNlcworCXRvIGV4cG9ydC4gIEZvciBleGFtcGxlLCBgbWFzdGVyfjEwLi5tYXN0ZXJgIGNhdXNlcyB0aGUKKwljdXJyZW50IG1hc3RlciByZWZlcmVuY2UgdG8gYmUgZXhwb3J0ZWQgYWxvbmcgd2l0aCBhbGwgb2JqZWN0cworCWFkZGVkIHNpbmNlIGl0cyAxMHRoIGFuY2VzdG9yIGNvbW1pdCBhbmQgKHVubGVzcyB0aGUKKwktLXJlZmVyZW5jZS1leGNsdWRlZC1wYXJlbnRzIG9wdGlvbiBpcyBzcGVjaWZpZWQpIGFsbCBmaWxlcworCWNvbW1vbiB0byBtYXN0ZXJ7dGlsZGV9OSBhbmQgbWFzdGVye3RpbGRlfTEwLgorCitFWEFNUExFUworLS0tLS0tLS0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmFzdC1leHBvcnQgLS1hbGwgfCAoY2QgL2VtcHR5L3JlcG9zaXRvcnkgJiYgZ2l0IGZhc3QtaW1wb3J0KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdpbGwgZXhwb3J0IHRoZSB3aG9sZSByZXBvc2l0b3J5IGFuZCBpbXBvcnQgaXQgaW50byB0aGUgZXhpc3RpbmcKK2VtcHR5IHJlcG9zaXRvcnkuICBFeGNlcHQgZm9yIHJlZW5jb2RpbmcgY29tbWl0cyB0aGF0IGFyZSBub3QgaW4KK1VURi04LCBpdCB3b3VsZCBiZSBhIG9uZS10by1vbmUgbWlycm9yLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmFzdC1leHBvcnQgbWFzdGVyfjUuLm1hc3RlciB8CisJc2VkICJzfHJlZnMvaGVhZHMvbWFzdGVyfHJlZnMvaGVhZHMvb3RoZXJ8IiB8CisJZ2l0IGZhc3QtaW1wb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIG1ha2VzIGEgbmV3IGJyYW5jaCBjYWxsZWQgJ290aGVyJyBmcm9tICdtYXN0ZXJ+NS4ubWFzdGVyJworKGkuZS4gaWYgJ21hc3RlcicgaGFzIGxpbmVhciBoaXN0b3J5LCBpdCB3aWxsIHRha2UgdGhlIGxhc3QgNSBjb21taXRzKS4KKworTm90ZSB0aGF0IHRoaXMgYXNzdW1lcyB0aGF0IG5vbmUgb2YgdGhlIGJsb2JzIGFuZCBjb21taXQgbWVzc2FnZXMKK3JlZmVyZW5jZWQgYnkgdGhhdCByZXZpc2lvbiByYW5nZSBjb250YWlucyB0aGUgc3RyaW5nCisncmVmcy9oZWFkcy9tYXN0ZXInLgorCisKK0FOT05ZTUlaSU5HCistLS0tLS0tLS0tLQorCitJZiB0aGUgYC0tYW5vbnltaXplYCBvcHRpb24gaXMgZ2l2ZW4sIGdpdCB3aWxsIGF0dGVtcHQgdG8gcmVtb3ZlIGFsbAoraWRlbnRpZnlpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVwb3NpdG9yeSB3aGlsZSBzdGlsbCByZXRhaW5pbmcgZW5vdWdoCitvZiB0aGUgb3JpZ2luYWwgdHJlZSBhbmQgaGlzdG9yeSBwYXR0ZXJucyB0byByZXByb2R1Y2Ugc29tZSBidWdzLiBUaGUKK2dvYWwgaXMgdGhhdCBhIGdpdCBidWcgd2hpY2ggaXMgZm91bmQgb24gYSBwcml2YXRlIHJlcG9zaXRvcnkgd2lsbAorcGVyc2lzdCBpbiB0aGUgYW5vbnltaXplZCByZXBvc2l0b3J5LCBhbmQgdGhlIGxhdHRlciBjYW4gYmUgc2hhcmVkIHdpdGgKK2dpdCBkZXZlbG9wZXJzIHRvIGhlbHAgc29sdmUgdGhlIGJ1Zy4KKworV2l0aCB0aGlzIG9wdGlvbiwgZ2l0IHdpbGwgcmVwbGFjZSBhbGwgcmVmbmFtZXMsIHBhdGhzLCBibG9iIGNvbnRlbnRzLAorY29tbWl0IGFuZCB0YWcgbWVzc2FnZXMsIG5hbWVzLCBhbmQgZW1haWwgYWRkcmVzc2VzIGluIHRoZSBvdXRwdXQgd2l0aAorYW5vbnltaXplZCBkYXRhLiAgVHdvIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBzdHJpbmcgd2lsbCBiZSByZXBsYWNlZAorZXF1aXZhbGVudGx5IChlLmcuLCB0d28gY29tbWl0cyB3aXRoIHRoZSBzYW1lIGF1dGhvciB3aWxsIGhhdmUgdGhlIHNhbWUKK2Fub255bWl6ZWQgYXV0aG9yIGluIHRoZSBvdXRwdXQsIGJ1dCBiZWFyIG5vIHJlc2VtYmxhbmNlIHRvIHRoZSBvcmlnaW5hbAorYXV0aG9yIHN0cmluZykuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb21taXRzLCBicmFuY2hlcywgYW5kIHRhZ3MgaXMKK3JldGFpbmVkLCBhcyB3ZWxsIGFzIHRoZSBjb21taXQgdGltZXN0YW1wcyAoYnV0IHRoZSBjb21taXQgbWVzc2FnZXMgYW5kCityZWZuYW1lcyBiZWFyIG5vIHJlc2VtYmxhbmNlIHRvIHRoZSBvcmlnaW5hbHMpLiBUaGUgcmVsYXRpdmUgbWFrZXVwIG9mCit0aGUgdHJlZSBpcyByZXRhaW5lZCAoZS5nLiwgaWYgeW91IGhhdmUgYSByb290IHRyZWUgd2l0aCAxMCBmaWxlcyBhbmQgMwordHJlZXMsIHNvIHdpbGwgdGhlIG91dHB1dCksIGJ1dCB0aGVpciBuYW1lcyBhbmQgdGhlIGNvbnRlbnRzIG9mIHRoZQorZmlsZXMgd2lsbCBiZSByZXBsYWNlZC4KKworSWYgeW91IHRoaW5rIHlvdSBoYXZlIGZvdW5kIGEgZ2l0IGJ1ZywgeW91IGNhbiBzdGFydCBieSBleHBvcnRpbmcgYW4KK2Fub255bWl6ZWQgc3RyZWFtIG9mIHRoZSB3aG9sZSByZXBvc2l0b3J5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZhc3QtZXhwb3J0IC0tYW5vbnltaXplIC0tYWxsID5hbm9uLXN0cmVhbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZW4gY29uZmlybSB0aGF0IHRoZSBidWcgcGVyc2lzdHMgaW4gYSByZXBvc2l0b3J5IGNyZWF0ZWQgZnJvbSB0aGF0CitzdHJlYW0gKG1hbnkgYnVncyB3aWxsIG5vdCwgYXMgdGhleSByZWFsbHkgZG8gZGVwZW5kIG9uIHRoZSBleGFjdAorcmVwb3NpdG9yeSBjb250ZW50cyk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgaW5pdCBhbm9uLXJlcG8KKyQgY2QgYW5vbi1yZXBvCiskIGdpdCBmYXN0LWltcG9ydCA8Li4vYW5vbi1zdHJlYW0KKyQgLi4uIHRlc3QgeW91ciBidWcgLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgdGhlIGFub255bWl6ZWQgcmVwb3NpdG9yeSBzaG93cyB0aGUgYnVnLCBpdCBtYXkgYmUgd29ydGggc2hhcmluZworYGFub24tc3RyZWFtYCBhbG9uZyB3aXRoIGEgcmVndWxhciBidWcgcmVwb3J0LiBOb3RlIHRoYXQgdGhlIGFub255bWl6ZWQKK3N0cmVhbSBjb21wcmVzc2VzIHZlcnkgd2VsbCwgc28gZ3ppcHBpbmcgaXQgaXMgZW5jb3VyYWdlZC4gSWYgeW91IHdhbnQKK3RvIGV4YW1pbmUgdGhlIHN0cmVhbSB0byBzZWUgdGhhdCBpdCBkb2VzIG5vdCBjb250YWluIGFueSBwcml2YXRlIGRhdGEsCit5b3UgY2FuIHBlcnVzZSBpdCBkaXJlY3RseSBiZWZvcmUgc2VuZGluZy4gWW91IG1heSBhbHNvIHdhbnQgdG8gdHJ5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgcGVybCAtcGUgJ3MvXGQrL1gvZycgPGFub24tc3RyZWFtIHwgc29ydCAtdSB8IGxlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCBzaG93cyBhbGwgb2YgdGhlIHVuaXF1ZSBsaW5lcyAod2l0aCBudW1iZXJzIGNvbnZlcnRlZCB0byAiWCIsIHRvCitjb2xsYXBzZSAiVXNlciAwIiwgIlVzZXIgMSIsIGV0YyBpbnRvICJVc2VyIFgiKS4gVGhpcyBwcm9kdWNlcyBhIG11Y2gKK3NtYWxsZXIgb3V0cHV0LCBhbmQgaXQgaXMgdXN1YWxseSBlYXN5IHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZXJlIGlzCitubyBwcml2YXRlIGRhdGEgaW4gdGhlIHN0cmVhbS4KKworCitMSU1JVEFUSU9OUworLS0tLS0tLS0tLS0KKworU2luY2UgJ2dpdCBmYXN0LWltcG9ydCcgY2Fubm90IHRhZyB0cmVlcywgeW91IHdpbGwgbm90IGJlCithYmxlIHRvIGV4cG9ydCB0aGUgbGludXguZ2l0IHJlcG9zaXRvcnkgY29tcGxldGVseSwgYXMgaXQgY29udGFpbnMKK2EgdGFnIHJlZmVyZW5jaW5nIGEgdHJlZSBpbnN0ZWFkIG9mIGEgY29tbWl0LgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWZhc3QtaW1wb3J0WzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1pbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1pbXBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YzZiM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWltcG9ydC50eHQKQEAgLTAsMCArMSwxNTY2IEBACitnaXQtZmFzdC1pbXBvcnQoMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZmFzdC1pbXBvcnQgLSBCYWNrZW5kIGZvciBmYXN0IEdpdCBkYXRhIGltcG9ydGVycworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorZnJvbnRlbmQgfCAnZ2l0IGZhc3QtaW1wb3J0JyBbPG9wdGlvbnM+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgcHJvZ3JhbSBpcyB1c3VhbGx5IG5vdCB3aGF0IHRoZSBlbmQgdXNlciB3YW50cyB0byBydW4gZGlyZWN0bHkuCitNb3N0IGVuZCB1c2VycyB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGV4aXN0aW5nIGZyb250ZW5kIHByb2dyYW1zLAord2hpY2ggcGFyc2VzIGEgc3BlY2lmaWMgdHlwZSBvZiBmb3JlaWduIHNvdXJjZSBhbmQgZmVlZHMgdGhlIGNvbnRlbnRzCitzdG9yZWQgdGhlcmUgdG8gJ2dpdCBmYXN0LWltcG9ydCcuCisKK2Zhc3QtaW1wb3J0IHJlYWRzIGEgbWl4ZWQgY29tbWFuZC9kYXRhIHN0cmVhbSBmcm9tIHN0YW5kYXJkIGlucHV0IGFuZAord3JpdGVzIG9uZSBvciBtb3JlIHBhY2tmaWxlcyBkaXJlY3RseSBpbnRvIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkuCitXaGVuIEVPRiBpcyByZWNlaXZlZCBvbiBzdGFuZGFyZCBpbnB1dCwgZmFzdCBpbXBvcnQgd3JpdGVzIG91dAordXBkYXRlZCBicmFuY2ggYW5kIHRhZyByZWZzLCBmdWxseSB1cGRhdGluZyB0aGUgY3VycmVudCByZXBvc2l0b3J5Cit3aXRoIHRoZSBuZXdseSBpbXBvcnRlZCBkYXRhLgorCitUaGUgZmFzdC1pbXBvcnQgYmFja2VuZCBpdHNlbGYgY2FuIGltcG9ydCBpbnRvIGFuIGVtcHR5IHJlcG9zaXRvcnkgKG9uZSB0aGF0CitoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIGJ5ICdnaXQgaW5pdCcpIG9yIGluY3JlbWVudGFsbHkKK3VwZGF0ZSBhbiBleGlzdGluZyBwb3B1bGF0ZWQgcmVwb3NpdG9yeS4gIFdoZXRoZXIgb3Igbm90IGluY3JlbWVudGFsCitpbXBvcnRzIGFyZSBzdXBwb3J0ZWQgZnJvbSBhIHBhcnRpY3VsYXIgZm9yZWlnbiBzb3VyY2UgZGVwZW5kcyBvbgordGhlIGZyb250ZW5kIHByb2dyYW0gaW4gdXNlLgorCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1mb3JjZTo6CisJRm9yY2UgdXBkYXRpbmcgbW9kaWZpZWQgZXhpc3RpbmcgYnJhbmNoZXMsIGV2ZW4gaWYgZG9pbmcKKwlzbyB3b3VsZCBjYXVzZSBjb21taXRzIHRvIGJlIGxvc3QgKGFzIHRoZSBuZXcgY29tbWl0IGRvZXMKKwlub3QgY29udGFpbiB0aGUgb2xkIGNvbW1pdCkuCisKKy0tcXVpZXQ6OgorCURpc2FibGUgdGhlIG91dHB1dCBzaG93biBieSAtLXN0YXRzLCBtYWtpbmcgZmFzdC1pbXBvcnQgdXN1YWxseQorCWJlIHNpbGVudCB3aGVuIGl0IGlzIHN1Y2Nlc3NmdWwuICBIb3dldmVyLCBpZiB0aGUgaW1wb3J0IHN0cmVhbQorCWhhcyBkaXJlY3RpdmVzIGludGVuZGVkIHRvIHNob3cgdXNlciBvdXRwdXQgKGUuZy4gYHByb2dyZXNzYAorCWRpcmVjdGl2ZXMpLCB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlcyB3aWxsIHN0aWxsIGJlIHNob3duLgorCistLXN0YXRzOjoKKwlEaXNwbGF5IHNvbWUgYmFzaWMgc3RhdGlzdGljcyBhYm91dCB0aGUgb2JqZWN0cyBmYXN0LWltcG9ydCBoYXMKKwljcmVhdGVkLCB0aGUgcGFja2ZpbGVzIHRoZXkgd2VyZSBzdG9yZWQgaW50bywgYW5kIHRoZQorCW1lbW9yeSB1c2VkIGJ5IGZhc3QtaW1wb3J0IGR1cmluZyB0aGlzIHJ1bi4gIFNob3dpbmcgdGhpcyBvdXRwdXQKKwlpcyBjdXJyZW50bHkgdGhlIGRlZmF1bHQsIGJ1dCBjYW4gYmUgZGlzYWJsZWQgd2l0aCAtLXF1aWV0LgorCistLWFsbG93LXVuc2FmZS1mZWF0dXJlczo6CisJTWFueSBjb21tYW5kLWxpbmUgb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgYXMgcGFydCBvZiB0aGUKKwlmYXN0LWltcG9ydCBzdHJlYW0gaXRzZWxmIGJ5IHVzaW5nIHRoZSBgZmVhdHVyZWAgb3IgYG9wdGlvbmAKKwljb21tYW5kcy4gSG93ZXZlciwgc29tZSBvZiB0aGVzZSBvcHRpb25zIGFyZSB1bnNhZmUgKGUuZy4sCisJYWxsb3dpbmcgZmFzdC1pbXBvcnQgdG8gYWNjZXNzIHRoZSBmaWxlc3lzdGVtIG91dHNpZGUgb2YgdGhlCisJcmVwb3NpdG9yeSkuIFRoZXNlIG9wdGlvbnMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUKKwlhbGxvd2VkIGJ5IHByb3ZpZGluZyB0aGlzIG9wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhpcworCWN1cnJlbnRseSBpbXBhY3RzIG9ubHkgdGhlIGBleHBvcnQtbWFya3NgLCBgaW1wb3J0LW1hcmtzYCwgYW5kCisJYGltcG9ydC1tYXJrcy1pZi1leGlzdHNgIGZlYXR1cmUgY29tbWFuZHMuCisrCisJT25seSBlbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IHRydXN0IHRoZSBwcm9ncmFtIGdlbmVyYXRpbmcgdGhlCisJZmFzdC1pbXBvcnQgc3RyZWFtISBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGF1dG9tYXRpY2FsbHkgZm9yCisJcmVtb3RlLWhlbHBlcnMgdGhhdCB1c2UgdGhlIGBpbXBvcnRgIGNhcGFiaWxpdHksIGFzIHRoZXkgYXJlCisJYWxyZWFkeSB0cnVzdGVkIHRvIHJ1biB0aGVpciBvd24gY29kZS4KKworT3B0aW9ucyBmb3IgRnJvbnRlbmRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworLS1jYXQtYmxvYi1mZD08ZmQ+OjoKKwlXcml0ZSByZXNwb25zZXMgdG8gYGdldC1tYXJrYCwgYGNhdC1ibG9iYCwgYW5kIGBsc2AgcXVlcmllcyB0byB0aGUKKwlmaWxlIGRlc2NyaXB0b3IgPGZkPiBpbnN0ZWFkIG9mIGBzdGRvdXRgLiAgQWxsb3dzIGBwcm9ncmVzc2AKKwlvdXRwdXQgaW50ZW5kZWQgZm9yIHRoZSBlbmQtdXNlciB0byBiZSBzZXBhcmF0ZWQgZnJvbSBvdGhlcgorCW91dHB1dC4KKworLS1kYXRlLWZvcm1hdD08Zm10Pjo6CisJU3BlY2lmeSB0aGUgdHlwZSBvZiBkYXRlcyB0aGUgZnJvbnRlbmQgd2lsbCBzdXBwbHkgdG8KKwlmYXN0LWltcG9ydCB3aXRoaW4gYGF1dGhvcmAsIGBjb21taXR0ZXJgIGFuZCBgdGFnZ2VyYCBjb21tYW5kcy4KKwlTZWUgYGBEYXRlIEZvcm1hdHMnJyBiZWxvdyBmb3IgZGV0YWlscyBhYm91dCB3aGljaCBmb3JtYXRzCisJYXJlIHN1cHBvcnRlZCwgYW5kIHRoZWlyIHN5bnRheC4KKworLS1kb25lOjoKKwlUZXJtaW5hdGUgd2l0aCBlcnJvciBpZiB0aGVyZSBpcyBubyBgZG9uZWAgY29tbWFuZCBhdCB0aGUgZW5kIG9mCisJdGhlIHN0cmVhbS4gIFRoaXMgb3B0aW9uIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGVycm9ycworCXRoYXQgY2F1c2UgdGhlIGZyb250ZW5kIHRvIHRlcm1pbmF0ZSBiZWZvcmUgaXQgaGFzIHN0YXJ0ZWQgdG8KKwl3cml0ZSBhIHN0cmVhbS4KKworTG9jYXRpb25zIG9mIE1hcmtzIEZpbGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworLS1leHBvcnQtbWFya3M9PGZpbGU+OjoKKwlEdW1wcyB0aGUgaW50ZXJuYWwgbWFya3MgdGFibGUgdG8gPGZpbGU+IHdoZW4gY29tcGxldGUuCisJTWFya3MgYXJlIHdyaXR0ZW4gb25lIHBlciBsaW5lIGFzIGA6bWFya2lkIFNIQS0xYC4KKwlGcm9udGVuZHMgY2FuIHVzZSB0aGlzIGZpbGUgdG8gdmFsaWRhdGUgaW1wb3J0cyBhZnRlciB0aGV5CisJaGF2ZSBiZWVuIGNvbXBsZXRlZCwgb3IgdG8gc2F2ZSB0aGUgbWFya3MgdGFibGUgYWNyb3NzCisJaW5jcmVtZW50YWwgcnVucy4gIEFzIDxmaWxlPiBpcyBvbmx5IG9wZW5lZCBhbmQgdHJ1bmNhdGVkCisJYXQgY2hlY2twb2ludCAob3IgY29tcGxldGlvbikgdGhlIHNhbWUgcGF0aCBjYW4gYWxzbyBiZQorCXNhZmVseSBnaXZlbiB0byAtLWltcG9ydC1tYXJrcy4KKworLS1pbXBvcnQtbWFya3M9PGZpbGU+OjoKKwlCZWZvcmUgcHJvY2Vzc2luZyBhbnkgaW5wdXQsIGxvYWQgdGhlIG1hcmtzIHNwZWNpZmllZCBpbgorCTxmaWxlPi4gIFRoZSBpbnB1dCBmaWxlIG11c3QgZXhpc3QsIG11c3QgYmUgcmVhZGFibGUsIGFuZAorCW11c3QgdXNlIHRoZSBzYW1lIGZvcm1hdCBhcyBwcm9kdWNlZCBieSAtLWV4cG9ydC1tYXJrcy4KKwlNdWx0aXBsZSBvcHRpb25zIG1heSBiZSBzdXBwbGllZCB0byBpbXBvcnQgbW9yZSB0aGFuIG9uZQorCXNldCBvZiBtYXJrcy4gIElmIGEgbWFyayBpcyBkZWZpbmVkIHRvIGRpZmZlcmVudCB2YWx1ZXMsCisJdGhlIGxhc3QgZmlsZSB3aW5zLgorCistLWltcG9ydC1tYXJrcy1pZi1leGlzdHM9PGZpbGU+OjoKKwlMaWtlIC0taW1wb3J0LW1hcmtzIGJ1dCBpbnN0ZWFkIG9mIGVycm9yaW5nIG91dCwgc2lsZW50bHkKKwlza2lwcyB0aGUgZmlsZSBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKworLS1bbm8tXXJlbGF0aXZlLW1hcmtzOjoKKwlBZnRlciBzcGVjaWZ5aW5nIC0tcmVsYXRpdmUtbWFya3MgdGhlIHBhdGhzIHNwZWNpZmllZAorCXdpdGggLS1pbXBvcnQtbWFya3M9IGFuZCAtLWV4cG9ydC1tYXJrcz0gYXJlIHJlbGF0aXZlCisJdG8gYW4gaW50ZXJuYWwgZGlyZWN0b3J5IGluIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkuCisJSW4gZ2l0LWZhc3QtaW1wb3J0IHRoaXMgbWVhbnMgdGhhdCB0aGUgcGF0aHMgYXJlIHJlbGF0aXZlCisJdG8gdGhlIC5naXQvaW5mby9mYXN0LWltcG9ydCBkaXJlY3RvcnkuIEhvd2V2ZXIsIG90aGVyCisJaW1wb3J0ZXJzIG1heSB1c2UgYSBkaWZmZXJlbnQgbG9jYXRpb24uCisrCitSZWxhdGl2ZSBhbmQgbm9uLXJlbGF0aXZlIG1hcmtzIG1heSBiZSBjb21iaW5lZCBieSBpbnRlcndlYXZpbmcKKy0tKG5vLSktcmVsYXRpdmUtbWFya3Mgd2l0aCB0aGUgLS0oaW1wb3J0fGV4cG9ydCktbWFya3M9IG9wdGlvbnMuCisKK1N1Ym1vZHVsZSBSZXdyaXRpbmcKK35+fn5+fn5+fn5+fn5+fn5+fn4KKworLS1yZXdyaXRlLXN1Ym1vZHVsZXMtZnJvbT08bmFtZT46PGZpbGU+OjoKKy0tcmV3cml0ZS1zdWJtb2R1bGVzLXRvPTxuYW1lPjo8ZmlsZT46OgorICBSZXdyaXRlIHRoZSBvYmplY3QgSURzIGZvciB0aGUgc3VibW9kdWxlIHNwZWNpZmllZCBieSA8bmFtZT4gZnJvbSB0aGUgdmFsdWVzCisJdXNlZCBpbiB0aGUgZnJvbSA8ZmlsZT4gdG8gdGhvc2UgdXNlZCBpbiB0aGUgdG8gPGZpbGU+LiBUaGUgZnJvbSBtYXJrcyBzaG91bGQKKwloYXZlIGJlZW4gY3JlYXRlZCBieSBgZ2l0IGZhc3QtZXhwb3J0YCwgYW5kIHRoZSB0byBtYXJrcyBzaG91bGQgaGF2ZSBiZWVuCisJY3JlYXRlZCBieSBgZ2l0IGZhc3QtaW1wb3J0YCB3aGVuIGltcG9ydGluZyB0aGF0IHNhbWUgc3VibW9kdWxlLgorKworPG5hbWU+IG1heSBiZSBhbnkgYXJiaXRyYXJ5IHN0cmluZyBub3QgY29udGFpbmluZyBhIGNvbG9uIGNoYXJhY3RlciwgYnV0IHRoZQorc2FtZSB2YWx1ZSBtdXN0IGJlIHVzZWQgd2l0aCBib3RoIG9wdGlvbnMgd2hlbiBzcGVjaWZ5aW5nIGNvcnJlc3BvbmRpbmcgbWFya3MuCitNdWx0aXBsZSBzdWJtb2R1bGVzIG1heSBiZSBzcGVjaWZpZWQgd2l0aCBkaWZmZXJlbnQgdmFsdWVzIGZvciA8bmFtZT4uIEl0IGlzIGFuCitlcnJvciBub3QgdG8gdXNlIHRoZXNlIG9wdGlvbnMgaW4gY29ycmVzcG9uZGluZyBwYWlycy4KKysKK1RoZXNlIG9wdGlvbnMgYXJlIHByaW1hcmlseSB1c2VmdWwgd2hlbiBjb252ZXJ0aW5nIGEgcmVwb3NpdG9yeSBmcm9tIG9uZSBoYXNoCithbGdvcml0aG0gdG8gYW5vdGhlcjsgd2l0aG91dCB0aGVtLCBmYXN0LWltcG9ydCB3aWxsIGZhaWwgaWYgaXQgZW5jb3VudGVycyBhCitzdWJtb2R1bGUgYmVjYXVzZSBpdCBoYXMgbm8gd2F5IG9mIHdyaXRpbmcgdGhlIG9iamVjdCBJRCBpbnRvIHRoZSBuZXcgaGFzaAorYWxnb3JpdGhtLgorCitQZXJmb3JtYW5jZSBhbmQgQ29tcHJlc3Npb24gVHVuaW5nCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKy0tYWN0aXZlLWJyYW5jaGVzPTxuPjo6CisJTWF4aW11bSBudW1iZXIgb2YgYnJhbmNoZXMgdG8gbWFpbnRhaW4gYWN0aXZlIGF0IG9uY2UuCisJU2VlIGBgTWVtb3J5IFV0aWxpemF0aW9uJycgYmVsb3cgZm9yIGRldGFpbHMuICBEZWZhdWx0IGlzIDUuCisKKy0tYmlnLWZpbGUtdGhyZXNob2xkPTxuPjo6CisJTWF4aW11bSBzaXplIG9mIGEgYmxvYiB0aGF0IGZhc3QtaW1wb3J0IHdpbGwgYXR0ZW1wdCB0bworCWNyZWF0ZSBhIGRlbHRhIGZvciwgZXhwcmVzc2VkIGluIGJ5dGVzLiAgVGhlIGRlZmF1bHQgaXMgNTEybQorCSg1MTIgTWlCKS4gIFNvbWUgaW1wb3J0ZXJzIG1heSB3aXNoIHRvIGxvd2VyIHRoaXMgb24gc3lzdGVtcworCXdpdGggY29uc3RyYWluZWQgbWVtb3J5LgorCistLWRlcHRoPTxuPjo6CisJTWF4aW11bSBkZWx0YSBkZXB0aCwgZm9yIGJsb2IgYW5kIHRyZWUgZGVsdGlmaWNhdGlvbi4KKwlEZWZhdWx0IGlzIDUwLgorCistLWV4cG9ydC1wYWNrLWVkZ2VzPTxmaWxlPjo6CisJQWZ0ZXIgY3JlYXRpbmcgYSBwYWNrZmlsZSwgcHJpbnQgYSBsaW5lIG9mIGRhdGEgdG8KKwk8ZmlsZT4gbGlzdGluZyB0aGUgZmlsZW5hbWUgb2YgdGhlIHBhY2tmaWxlIGFuZCB0aGUgbGFzdAorCWNvbW1pdCBvbiBlYWNoIGJyYW5jaCB0aGF0IHdhcyB3cml0dGVuIHRvIHRoYXQgcGFja2ZpbGUuCisJVGhpcyBpbmZvcm1hdGlvbiBtYXkgYmUgdXNlZnVsIGFmdGVyIGltcG9ydGluZyBwcm9qZWN0cworCXdob3NlIHRvdGFsIG9iamVjdCBzZXQgZXhjZWVkcyB0aGUgNCBHaUIgcGFja2ZpbGUgbGltaXQsCisJYXMgdGhlc2UgY29tbWl0cyBjYW4gYmUgdXNlZCBhcyBlZGdlIHBvaW50cyBkdXJpbmcgY2FsbHMKKwl0byAnZ2l0IHBhY2stb2JqZWN0cycuCisKKy0tbWF4LXBhY2stc2l6ZT08bj46OgorCU1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrZmlsZS4KKwlUaGUgZGVmYXVsdCBpcyB1bmxpbWl0ZWQuCisKK2Zhc3RpbXBvcnQudW5wYWNrTGltaXQ6OgorCVNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0KKworUEVSRk9STUFOQ0UKKy0tLS0tLS0tLS0tCitUaGUgZGVzaWduIG9mIGZhc3QtaW1wb3J0IGFsbG93cyBpdCB0byBpbXBvcnQgbGFyZ2UgcHJvamVjdHMgaW4gYSBtaW5pbXVtCithbW91bnQgb2YgbWVtb3J5IHVzYWdlIGFuZCBwcm9jZXNzaW5nIHRpbWUuICBBc3N1bWluZyB0aGUgZnJvbnRlbmQKK2lzIGFibGUgdG8ga2VlcCB1cCB3aXRoIGZhc3QtaW1wb3J0IGFuZCBmZWVkIGl0IGEgY29uc3RhbnQgc3RyZWFtIG9mIGRhdGEsCitpbXBvcnQgdGltZXMgZm9yIHByb2plY3RzIGhvbGRpbmcgMTArIHllYXJzIG9mIGhpc3RvcnkgYW5kIGNvbnRhaW5pbmcKKzEwMCwwMDArIGluZGl2aWR1YWwgY29tbWl0cyBhcmUgZ2VuZXJhbGx5IGNvbXBsZXRlZCBpbiBqdXN0IDEtMgoraG91cnMgb24gcXVpdGUgbW9kZXN0ICh+JDIsMDAwIFVTRCkgaGFyZHdhcmUuCisKK01vc3QgYm90dGxlbmVja3MgYXBwZWFyIHRvIGJlIGluIGZvcmVpZ24gc291cmNlIGRhdGEgYWNjZXNzICh0aGUKK3NvdXJjZSBqdXN0IGNhbm5vdCBleHRyYWN0IHJldmlzaW9ucyBmYXN0IGVub3VnaCkgb3IgZGlzayBJTyAoZmFzdC1pbXBvcnQKK3dyaXRlcyBhcyBmYXN0IGFzIHRoZSBkaXNrIHdpbGwgdGFrZSB0aGUgZGF0YSkuICBJbXBvcnRzIHdpbGwgcnVuCitmYXN0ZXIgaWYgdGhlIHNvdXJjZSBkYXRhIGlzIHN0b3JlZCBvbiBhIGRpZmZlcmVudCBkcml2ZSB0aGFuIHRoZQorZGVzdGluYXRpb24gR2l0IHJlcG9zaXRvcnkgKGR1ZSB0byBsZXNzIElPIGNvbnRlbnRpb24pLgorCisKK0RFVkVMT1BNRU5UIENPU1QKKy0tLS0tLS0tLS0tLS0tLS0KK0EgdHlwaWNhbCBmcm9udGVuZCBmb3IgZmFzdC1pbXBvcnQgdGVuZHMgdG8gd2VpZ2ggaW4gYXQgYXBwcm94aW1hdGVseSAyMDAKK2xpbmVzIG9mIFBlcmwvUHl0aG9uL1J1YnkgY29kZS4gIE1vc3QgZGV2ZWxvcGVycyBoYXZlIGJlZW4gYWJsZSB0bworY3JlYXRlIHdvcmtpbmcgaW1wb3J0ZXJzIGluIGp1c3QgYSBjb3VwbGUgb2YgaG91cnMsIGV2ZW4gdGhvdWdoIGl0CitpcyB0aGVpciBmaXJzdCBleHBvc3VyZSB0byBmYXN0LWltcG9ydCwgYW5kIHNvbWV0aW1lcyBldmVuIHRvIEdpdC4gIFRoaXMgaXMKK2FuIGlkZWFsIHNpdHVhdGlvbiwgZ2l2ZW4gdGhhdCBtb3N0IGNvbnZlcnNpb24gdG9vbHMgYXJlIHRocm93LWF3YXkKKyh1c2Ugb25jZSwgYW5kIG5ldmVyIGxvb2sgYmFjaykuCisKKworUEFSQUxMRUwgT1BFUkFUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0KK0xpa2UgJ2dpdCBwdXNoJyBvciAnZ2l0IGZldGNoJywgaW1wb3J0cyBoYW5kbGVkIGJ5IGZhc3QtaW1wb3J0IGFyZSBzYWZlIHRvCitydW4gYWxvbmdzaWRlIHBhcmFsbGVsIGBnaXQgcmVwYWNrIC1hIC1kYCBvciBgZ2l0IGdjYCBpbnZvY2F0aW9ucywKK29yIGFueSBvdGhlciBHaXQgb3BlcmF0aW9uIChpbmNsdWRpbmcgJ2dpdCBwcnVuZScsIGFzIGxvb3NlIG9iamVjdHMKK2FyZSBuZXZlciB1c2VkIGJ5IGZhc3QtaW1wb3J0KS4KKworZmFzdC1pbXBvcnQgZG9lcyBub3QgbG9jayB0aGUgYnJhbmNoIG9yIHRhZyByZWZzIGl0IGlzIGFjdGl2ZWx5IGltcG9ydGluZy4KK0FmdGVyIHRoZSBpbXBvcnQsIGR1cmluZyBpdHMgcmVmIHVwZGF0ZSBwaGFzZSwgZmFzdC1pbXBvcnQgdGVzdHMgZWFjaAorZXhpc3RpbmcgYnJhbmNoIHJlZiB0byB2ZXJpZnkgdGhlIHVwZGF0ZSB3aWxsIGJlIGEgZmFzdC1mb3J3YXJkCit1cGRhdGUgKHRoZSBjb21taXQgc3RvcmVkIGluIHRoZSByZWYgaXMgY29udGFpbmVkIGluIHRoZSBuZXcKK2hpc3Rvcnkgb2YgdGhlIGNvbW1pdCB0byBiZSB3cml0dGVuKS4gIElmIHRoZSB1cGRhdGUgaXMgbm90IGEKK2Zhc3QtZm9yd2FyZCB1cGRhdGUsIGZhc3QtaW1wb3J0IHdpbGwgc2tpcCB1cGRhdGluZyB0aGF0IHJlZiBhbmQgaW5zdGVhZAorcHJpbnRzIGEgd2FybmluZyBtZXNzYWdlLiAgZmFzdC1pbXBvcnQgd2lsbCBhbHdheXMgYXR0ZW1wdCB0byB1cGRhdGUgYWxsCiticmFuY2ggcmVmcywgYW5kIGRvZXMgbm90IHN0b3Agb24gdGhlIGZpcnN0IGZhaWx1cmUuCisKK0JyYW5jaCB1cGRhdGVzIGNhbiBiZSBmb3JjZWQgd2l0aCAtLWZvcmNlLCBidXQgaXQncyByZWNvbW1lbmRlZCB0aGF0Cit0aGlzIG9ubHkgYmUgdXNlZCBvbiBhbiBvdGhlcndpc2UgcXVpZXQgcmVwb3NpdG9yeS4gIFVzaW5nIC0tZm9yY2UKK2lzIG5vdCBuZWNlc3NhcnkgZm9yIGFuIGluaXRpYWwgaW1wb3J0IGludG8gYW4gZW1wdHkgcmVwb3NpdG9yeS4KKworCitURUNITklDQUwgRElTQ1VTU0lPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Zhc3QtaW1wb3J0IHRyYWNrcyBhIHNldCBvZiBicmFuY2hlcyBpbiBtZW1vcnkuICBBbnkgYnJhbmNoIGNhbiBiZSBjcmVhdGVkCitvciBtb2RpZmllZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSBpbXBvcnQgcHJvY2VzcyBieSBzZW5kaW5nIGEKK2Bjb21taXRgIGNvbW1hbmQgb24gdGhlIGlucHV0IHN0cmVhbS4gIFRoaXMgZGVzaWduIGFsbG93cyBhIGZyb250ZW5kCitwcm9ncmFtIHRvIHByb2Nlc3MgYW4gdW5saW1pdGVkIG51bWJlciBvZiBicmFuY2hlcyBzaW11bHRhbmVvdXNseSwKK2dlbmVyYXRpbmcgY29tbWl0cyBpbiB0aGUgb3JkZXIgdGhleSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIHNvdXJjZQorZGF0YS4gIEl0IGFsc28gc2ltcGxpZmllcyB0aGUgZnJvbnRlbmQgcHJvZ3JhbXMgY29uc2lkZXJhYmx5LgorCitmYXN0LWltcG9ydCBkb2VzIG5vdCB1c2Ugb3IgYWx0ZXIgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIG9yIGFueQorZmlsZSB3aXRoaW4gaXQuICAoSXQgZG9lcyBob3dldmVyIHVwZGF0ZSB0aGUgY3VycmVudCBHaXQgcmVwb3NpdG9yeSwKK2FzIHJlZmVyZW5jZWQgYnkgYEdJVF9ESVJgLikgIFRoZXJlZm9yZSBhbiBpbXBvcnQgZnJvbnRlbmQgbWF5IHVzZQordGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciBpdHMgb3duIHB1cnBvc2VzLCBzdWNoIGFzIGV4dHJhY3RpbmcgZmlsZQorcmV2aXNpb25zIGZyb20gdGhlIGZvcmVpZ24gc291cmNlLiAgVGhpcyBpZ25vcmFuY2Ugb2YgdGhlIHdvcmtpbmcKK2RpcmVjdG9yeSBhbHNvIGFsbG93cyBmYXN0LWltcG9ydCB0byBydW4gdmVyeSBxdWlja2x5LCBhcyBpdCBkb2VzIG5vdAorbmVlZCB0byBwZXJmb3JtIGFueSBjb3N0bHkgZmlsZSB1cGRhdGUgb3BlcmF0aW9ucyB3aGVuIHN3aXRjaGluZworYmV0d2VlbiBicmFuY2hlcy4KKworSU5QVVQgRk9STUFUCistLS0tLS0tLS0tLS0KK1dpdGggdGhlIGV4Y2VwdGlvbiBvZiByYXcgZmlsZSBkYXRhICh3aGljaCBHaXQgZG9lcyBub3QgaW50ZXJwcmV0KQordGhlIGZhc3QtaW1wb3J0IGlucHV0IGZvcm1hdCBpcyB0ZXh0IChBU0NJSSkgYmFzZWQuICBUaGlzIHRleHQgYmFzZWQKK2Zvcm1hdCBzaW1wbGlmaWVzIGRldmVsb3BtZW50IGFuZCBkZWJ1Z2dpbmcgb2YgZnJvbnRlbmQgcHJvZ3JhbXMsCitlc3BlY2lhbGx5IHdoZW4gYSBoaWdoZXIgbGV2ZWwgbGFuZ3VhZ2Ugc3VjaCBhcyBQZXJsLCBQeXRob24gb3IKK1J1YnkgaXMgYmVpbmcgdXNlZC4KKworZmFzdC1pbXBvcnQgaXMgdmVyeSBzdHJpY3QgYWJvdXQgaXRzIGlucHV0LiAgV2hlcmUgd2Ugc2F5IFNQIGJlbG93IHdlIG1lYW4KKypleGFjdGx5KiBvbmUgc3BhY2UuICBMaWtld2lzZSBMRiBtZWFucyBvbmUgKGFuZCBvbmx5IG9uZSkgbGluZWZlZWQKK2FuZCBIVCBvbmUgKGFuZCBvbmx5IG9uZSkgaG9yaXpvbnRhbCB0YWIuCitTdXBwbHlpbmcgYWRkaXRpb25hbCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgd2lsbCBjYXVzZSB1bmV4cGVjdGVkCityZXN1bHRzLCBzdWNoIGFzIGJyYW5jaCBuYW1lcyBvciBmaWxlIG5hbWVzIHdpdGggbGVhZGluZyBvciB0cmFpbGluZworc3BhY2VzIGluIHRoZWlyIG5hbWUsIG9yIGVhcmx5IHRlcm1pbmF0aW9uIG9mIGZhc3QtaW1wb3J0IHdoZW4gaXQgZW5jb3VudGVycwordW5leHBlY3RlZCBpbnB1dC4KKworU3RyZWFtIENvbW1lbnRzCit+fn5+fn5+fn5+fn5+fn4KK1RvIGFpZCBpbiBkZWJ1Z2dpbmcgZnJvbnRlbmRzIGZhc3QtaW1wb3J0IGlnbm9yZXMgYW55IGxpbmUgdGhhdAorYmVnaW5zIHdpdGggYCNgIChBU0NJSSBwb3VuZC9oYXNoKSB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBsaW5lCitlbmRpbmcgYExGYC4gIEEgY29tbWVudCBsaW5lIG1heSBjb250YWluIGFueSBzZXF1ZW5jZSBvZiBieXRlcwordGhhdCBkb2VzIG5vdCBjb250YWluIGFuIExGIGFuZCB0aGVyZWZvcmUgbWF5IGJlIHVzZWQgdG8gaW5jbHVkZQorYW55IGRldGFpbGVkIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGJlIHNwZWNpZmljIHRvIHRoZQorZnJvbnRlbmQgYW5kIHVzZWZ1bCB3aGVuIGluc3BlY3RpbmcgYSBmYXN0LWltcG9ydCBkYXRhIHN0cmVhbS4KKworRGF0ZSBGb3JtYXRzCit+fn5+fn5+fn5+fn4KK1RoZSBmb2xsb3dpbmcgZGF0ZSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQuICBBIGZyb250ZW5kIHNob3VsZCBzZWxlY3QKK3RoZSBmb3JtYXQgaXQgd2lsbCB1c2UgZm9yIHRoaXMgaW1wb3J0IGJ5IHBhc3NpbmcgdGhlIGZvcm1hdCBuYW1lCitpbiB0aGUgLS1kYXRlLWZvcm1hdD08Zm10PiBjb21tYW5kLWxpbmUgb3B0aW9uLgorCitgcmF3YDo6CisJVGhpcyBpcyB0aGUgR2l0IG5hdGl2ZSBmb3JtYXQgYW5kIGlzIGA8dGltZT4gU1AgPG9mZnV0Yz5gLgorCUl0IGlzIGFsc28gZmFzdC1pbXBvcnQncyBkZWZhdWx0IGZvcm1hdCwgaWYgLS1kYXRlLWZvcm1hdCB3YXMKKwlub3Qgc3BlY2lmaWVkLgorKworVGhlIHRpbWUgb2YgdGhlIGV2ZW50IGlzIHNwZWNpZmllZCBieSBgPHRpbWU+YCBhcyB0aGUgbnVtYmVyIG9mCitzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIChtaWRuaWdodCwgSmFuIDEsIDE5NzAsIFVUQykgYW5kIGlzCit3cml0dGVuIGFzIGFuIEFTQ0lJIGRlY2ltYWwgaW50ZWdlci4KKysKK1RoZSBsb2NhbCBvZmZzZXQgaXMgc3BlY2lmaWVkIGJ5IGA8b2ZmdXRjPmAgYXMgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZQorb2Zmc2V0IGZyb20gVVRDLiAgRm9yIGV4YW1wbGUgRVNUICh3aGljaCBpcyA1IGhvdXJzIGJlaGluZCBVVEMpCit3b3VsZCBiZSBleHByZXNzZWQgaW4gYDx0ej5gIGJ5IGBgLTA1MDAnJyB3aGlsZSBVVEMgaXMgYGArMDAwMCcnLgorVGhlIGxvY2FsIG9mZnNldCBkb2VzIG5vdCBhZmZlY3QgYDx0aW1lPmA7IGl0IGlzIHVzZWQgb25seSBhcyBhbgorYWR2aXNlbWVudCB0byBoZWxwIGZvcm1hdHRpbmcgcm91dGluZXMgZGlzcGxheSB0aGUgdGltZXN0YW1wLgorKworSWYgdGhlIGxvY2FsIG9mZnNldCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBzb3VyY2UgbWF0ZXJpYWwsIHVzZQorYGArMDAwMCcnLCBvciB0aGUgbW9zdCBjb21tb24gbG9jYWwgb2Zmc2V0LiAgRm9yIGV4YW1wbGUgbWFueQorb3JnYW5pemF0aW9ucyBoYXZlIGEgQ1ZTIHJlcG9zaXRvcnkgd2hpY2ggaGFzIG9ubHkgZXZlciBiZWVuIGFjY2Vzc2VkCitieSB1c2VycyB3aG8gYXJlIGxvY2F0ZWQgaW4gdGhlIHNhbWUgbG9jYXRpb24gYW5kIHRpbWUgem9uZS4gIEluIHRoaXMKK2Nhc2UgYSByZWFzb25hYmxlIG9mZnNldCBmcm9tIFVUQyBjb3VsZCBiZSBhc3N1bWVkLgorKworVW5saWtlIHRoZSBgcmZjMjgyMmAgZm9ybWF0LCB0aGlzIGZvcm1hdCBpcyB2ZXJ5IHN0cmljdC4gIEFueQordmFyaWF0aW9uIGluIGZvcm1hdHRpbmcgd2lsbCBjYXVzZSBmYXN0LWltcG9ydCB0byByZWplY3QgdGhlIHZhbHVlLgorCitgcmZjMjgyMmA6OgorCVRoaXMgaXMgdGhlIHN0YW5kYXJkIGVtYWlsIGZvcm1hdCBhcyBkZXNjcmliZWQgYnkgUkZDIDI4MjIuCisrCitBbiBleGFtcGxlIHZhbHVlIGlzIGBgVHVlIEZlYiA2IDExOjIyOjE4IDIwMDcgLTA1MDAnJy4gIFRoZSBHaXQKK3BhcnNlciBpcyBhY2N1cmF0ZSwgYnV0IGEgbGl0dGxlIG9uIHRoZSBsZW5pZW50IHNpZGUuICBJdCBpcyB0aGUKK3NhbWUgcGFyc2VyIHVzZWQgYnkgJ2dpdCBhbScgd2hlbiBhcHBseWluZyBwYXRjaGVzCityZWNlaXZlZCBmcm9tIGVtYWlsLgorKworU29tZSBtYWxmb3JtZWQgc3RyaW5ncyBtYXkgYmUgYWNjZXB0ZWQgYXMgdmFsaWQgZGF0ZXMuICBJbiBzb21lIG9mCit0aGVzZSBjYXNlcyBHaXQgd2lsbCBzdGlsbCBiZSBhYmxlIHRvIG9idGFpbiB0aGUgY29ycmVjdCBkYXRlIGZyb20KK3RoZSBtYWxmb3JtZWQgc3RyaW5nLiAgVGhlcmUgYXJlIGFsc28gc29tZSB0eXBlcyBvZiBtYWxmb3JtZWQKK3N0cmluZ3Mgd2hpY2ggR2l0IHdpbGwgcGFyc2Ugd3JvbmcsIGFuZCB5ZXQgY29uc2lkZXIgdmFsaWQuCitTZXJpb3VzbHkgbWFsZm9ybWVkIHN0cmluZ3Mgd2lsbCBiZSByZWplY3RlZC4KKysKK1VubGlrZSB0aGUgYHJhd2AgZm9ybWF0IGFib3ZlLCB0aGUgdGltZSB6b25lL1VUQyBvZmZzZXQgaW5mb3JtYXRpb24KK2NvbnRhaW5lZCBpbiBhbiBSRkMgMjgyMiBkYXRlIHN0cmluZyBpcyB1c2VkIHRvIGFkanVzdCB0aGUgZGF0ZQordmFsdWUgdG8gVVRDIHByaW9yIHRvIHN0b3JhZ2UuICBUaGVyZWZvcmUgaXQgaXMgaW1wb3J0YW50IHRoYXQKK3RoaXMgaW5mb3JtYXRpb24gYmUgYXMgYWNjdXJhdGUgYXMgcG9zc2libGUuCisrCitJZiB0aGUgc291cmNlIG1hdGVyaWFsIHVzZXMgUkZDIDI4MjIgc3R5bGUgZGF0ZXMsCit0aGUgZnJvbnRlbmQgc2hvdWxkIGxldCBmYXN0LWltcG9ydCBoYW5kbGUgdGhlIHBhcnNpbmcgYW5kIGNvbnZlcnNpb24KKyhyYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRvIGRvIGl0IGl0c2VsZikgYXMgdGhlIEdpdCBwYXJzZXIgaGFzCitiZWVuIHdlbGwgdGVzdGVkIGluIHRoZSB3aWxkLgorKworRnJvbnRlbmRzIHNob3VsZCBwcmVmZXIgdGhlIGByYXdgIGZvcm1hdCBpZiB0aGUgc291cmNlIG1hdGVyaWFsCithbHJlYWR5IHVzZXMgVU5JWC1lcG9jaCBmb3JtYXQsIGNhbiBiZSBjb2F4ZWQgdG8gZ2l2ZSBkYXRlcyBpbiB0aGF0Citmb3JtYXQsIG9yIGl0cyBmb3JtYXQgaXMgZWFzaWx5IGNvbnZlcnRpYmxlIHRvIGl0LCBhcyB0aGVyZSBpcyBubworYW1iaWd1aXR5IGluIHBhcnNpbmcuCisKK2Bub3dgOjoKKwlBbHdheXMgdXNlIHRoZSBjdXJyZW50IHRpbWUgYW5kIHRpbWUgem9uZS4gIFRoZSBsaXRlcmFsCisJYG5vd2AgbXVzdCBhbHdheXMgYmUgc3VwcGxpZWQgZm9yIGA8d2hlbj5gLgorKworVGhpcyBpcyBhIHRveSBmb3JtYXQuICBUaGUgY3VycmVudCB0aW1lIGFuZCB0aW1lIHpvbmUgb2YgdGhpcyBzeXN0ZW0KK2lzIGFsd2F5cyBjb3BpZWQgaW50byB0aGUgaWRlbnRpdHkgc3RyaW5nIGF0IHRoZSB0aW1lIGl0IGlzIGJlaW5nCitjcmVhdGVkIGJ5IGZhc3QtaW1wb3J0LiAgVGhlcmUgaXMgbm8gd2F5IHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgdGltZSBvcgordGltZSB6b25lLgorKworVGhpcyBwYXJ0aWN1bGFyIGZvcm1hdCBpcyBzdXBwbGllZCBhcyBpdCdzIHNob3J0IHRvIGltcGxlbWVudCBhbmQKK21heSBiZSB1c2VmdWwgdG8gYSBwcm9jZXNzIHRoYXQgd2FudHMgdG8gY3JlYXRlIGEgbmV3IGNvbW1pdAorcmlnaHQgbm93LCB3aXRob3V0IG5lZWRpbmcgdG8gdXNlIGEgd29ya2luZyBkaXJlY3Rvcnkgb3IKKydnaXQgdXBkYXRlLWluZGV4Jy4KKysKK0lmIHNlcGFyYXRlIGBhdXRob3JgIGFuZCBgY29tbWl0dGVyYCBjb21tYW5kcyBhcmUgdXNlZCBpbiBhIGBjb21taXRgCit0aGUgdGltZXN0YW1wcyBtYXkgbm90IG1hdGNoLCBhcyB0aGUgc3lzdGVtIGNsb2NrIHdpbGwgYmUgcG9sbGVkCit0d2ljZSAob25jZSBmb3IgZWFjaCBjb21tYW5kKS4gIFRoZSBvbmx5IHdheSB0byBlbnN1cmUgdGhhdCBib3RoCithdXRob3IgYW5kIGNvbW1pdHRlciBpZGVudGl0eSBpbmZvcm1hdGlvbiBoYXMgdGhlIHNhbWUgdGltZXN0YW1wCitpcyB0byBvbWl0IGBhdXRob3JgICh0aHVzIGNvcHlpbmcgZnJvbSBgY29tbWl0dGVyYCkgb3IgdG8gdXNlIGEKK2RhdGUgZm9ybWF0IG90aGVyIHRoYW4gYG5vd2AuCisKK0NvbW1hbmRzCit+fn5+fn5+fgorZmFzdC1pbXBvcnQgYWNjZXB0cyBzZXZlcmFsIGNvbW1hbmRzIHRvIHVwZGF0ZSB0aGUgY3VycmVudCByZXBvc2l0b3J5CithbmQgY29udHJvbCB0aGUgY3VycmVudCBpbXBvcnQgcHJvY2Vzcy4gIE1vcmUgZGV0YWlsZWQgZGlzY3Vzc2lvbgorKHdpdGggZXhhbXBsZXMpIG9mIGVhY2ggY29tbWFuZCBmb2xsb3dzIGxhdGVyLgorCitgY29tbWl0YDo6CisJQ3JlYXRlcyBhIG5ldyBicmFuY2ggb3IgdXBkYXRlcyBhbiBleGlzdGluZyBicmFuY2ggYnkKKwljcmVhdGluZyBhIG5ldyBjb21taXQgYW5kIHVwZGF0aW5nIHRoZSBicmFuY2ggdG8gcG9pbnQgYXQKKwl0aGUgbmV3bHkgY3JlYXRlZCBjb21taXQuCisKK2B0YWdgOjoKKwlDcmVhdGVzIGFuIGFubm90YXRlZCB0YWcgb2JqZWN0IGZyb20gYW4gZXhpc3RpbmcgY29tbWl0IG9yCisJYnJhbmNoLiAgTGlnaHR3ZWlnaHQgdGFncyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQsCisJYXMgdGhleSBhcmUgbm90IHJlY29tbWVuZGVkIGZvciByZWNvcmRpbmcgbWVhbmluZ2Z1bCBwb2ludHMKKwlpbiB0aW1lLgorCitgcmVzZXRgOjoKKwlSZXNldCBhbiBleGlzdGluZyBicmFuY2ggKG9yIGEgbmV3IGJyYW5jaCkgdG8gYSBzcGVjaWZpYworCXJldmlzaW9uLiAgVGhpcyBjb21tYW5kIG11c3QgYmUgdXNlZCB0byBjaGFuZ2UgYSBicmFuY2ggdG8KKwlhIHNwZWNpZmljIHJldmlzaW9uIHdpdGhvdXQgbWFraW5nIGEgY29tbWl0IG9uIGl0LgorCitgYmxvYmA6OgorCUNvbnZlcnQgcmF3IGZpbGUgZGF0YSBpbnRvIGEgYmxvYiwgZm9yIGZ1dHVyZSB1c2UgaW4gYQorCWBjb21taXRgIGNvbW1hbmQuICBUaGlzIGNvbW1hbmQgaXMgb3B0aW9uYWwgYW5kIGlzIG5vdAorCW5lZWRlZCB0byBwZXJmb3JtIGFuIGltcG9ydC4KKworYGFsaWFzYDo6CisJUmVjb3JkIHRoYXQgYSBtYXJrIHJlZmVycyB0byBhIGdpdmVuIG9iamVjdCB3aXRob3V0IGZpcnN0CisJY3JlYXRpbmcgYW55IG5ldyBvYmplY3QuICBVc2luZyAtLWltcG9ydC1tYXJrcyBhbmQgcmVmZXJyaW5nCisJdG8gbWlzc2luZyBtYXJrcyB3aWxsIGNhdXNlIGZhc3QtaW1wb3J0IHRvIGZhaWwsIHNvIGFsaWFzZXMKKwljYW4gcHJvdmlkZSBhIHdheSB0byBzZXQgb3RoZXJ3aXNlIHBydW5lZCBjb21taXRzIHRvIGEgdmFsaWQKKwl2YWx1ZSAoZS5nLiB0aGUgbmVhcmVzdCBub24tcHJ1bmVkIGFuY2VzdG9yKS4KKworYGNoZWNrcG9pbnRgOjoKKwlGb3JjZXMgZmFzdC1pbXBvcnQgdG8gY2xvc2UgdGhlIGN1cnJlbnQgcGFja2ZpbGUsIGdlbmVyYXRlIGl0cworCXVuaXF1ZSBTSEEtMSBjaGVja3N1bSBhbmQgaW5kZXgsIGFuZCBzdGFydCBhIG5ldyBwYWNrZmlsZS4KKwlUaGlzIGNvbW1hbmQgaXMgb3B0aW9uYWwgYW5kIGlzIG5vdCBuZWVkZWQgdG8gcGVyZm9ybQorCWFuIGltcG9ydC4KKworYHByb2dyZXNzYDo6CisJQ2F1c2VzIGZhc3QtaW1wb3J0IHRvIGVjaG8gdGhlIGVudGlyZSBsaW5lIHRvIGl0cyBvd24KKwlzdGFuZGFyZCBvdXRwdXQuICBUaGlzIGNvbW1hbmQgaXMgb3B0aW9uYWwgYW5kIGlzIG5vdCBuZWVkZWQKKwl0byBwZXJmb3JtIGFuIGltcG9ydC4KKworYGRvbmVgOjoKKwlNYXJrcyB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uIFRoaXMgY29tbWFuZCBpcyBvcHRpb25hbAorCXVubGVzcyB0aGUgYGRvbmVgIGZlYXR1cmUgd2FzIHJlcXVlc3RlZCB1c2luZyB0aGUKKwlgLS1kb25lYCBjb21tYW5kLWxpbmUgb3B0aW9uIG9yIGBmZWF0dXJlIGRvbmVgIGNvbW1hbmQuCisKK2BnZXQtbWFya2A6OgorCUNhdXNlcyBmYXN0LWltcG9ydCB0byBwcmludCB0aGUgU0hBLTEgY29ycmVzcG9uZGluZyB0byBhIG1hcmsKKwl0byB0aGUgZmlsZSBkZXNjcmlwdG9yIHNldCB3aXRoIGAtLWNhdC1ibG9iLWZkYCwgb3IgYHN0ZG91dGAgaWYKKwl1bnNwZWNpZmllZC4KKworYGNhdC1ibG9iYDo6CisJQ2F1c2VzIGZhc3QtaW1wb3J0IHRvIHByaW50IGEgYmxvYiBpbiAnY2F0LWZpbGUgLS1iYXRjaCcKKwlmb3JtYXQgdG8gdGhlIGZpbGUgZGVzY3JpcHRvciBzZXQgd2l0aCBgLS1jYXQtYmxvYi1mZGAgb3IKKwlgc3Rkb3V0YCBpZiB1bnNwZWNpZmllZC4KKworYGxzYDo6CisJQ2F1c2VzIGZhc3QtaW1wb3J0IHRvIHByaW50IGEgbGluZSBkZXNjcmliaW5nIGEgZGlyZWN0b3J5CisJZW50cnkgaW4gJ2xzLXRyZWUnIGZvcm1hdCB0byB0aGUgZmlsZSBkZXNjcmlwdG9yIHNldCB3aXRoCisJYC0tY2F0LWJsb2ItZmRgIG9yIGBzdGRvdXRgIGlmIHVuc3BlY2lmaWVkLgorCitgZmVhdHVyZWA6OgorCUVuYWJsZSB0aGUgc3BlY2lmaWVkIGZlYXR1cmUuIFRoaXMgcmVxdWlyZXMgdGhhdCBmYXN0LWltcG9ydAorCXN1cHBvcnRzIHRoZSBzcGVjaWZpZWQgZmVhdHVyZSwgYW5kIGFib3J0cyBpZiBpdCBkb2VzIG5vdC4KKworYG9wdGlvbmA6OgorCVNwZWNpZnkgYW55IG9mIHRoZSBvcHRpb25zIGxpc3RlZCB1bmRlciBPUFRJT05TIHRoYXQgZG8gbm90CisJY2hhbmdlIHN0cmVhbSBzZW1hbnRpYyB0byBzdWl0IHRoZSBmcm9udGVuZCdzIG5lZWRzLiBUaGlzCisJY29tbWFuZCBpcyBvcHRpb25hbCBhbmQgaXMgbm90IG5lZWRlZCB0byBwZXJmb3JtIGFuIGltcG9ydC4KKworYGNvbW1pdGAKK35+fn5+fn5+CitDcmVhdGUgb3IgdXBkYXRlIGEgYnJhbmNoIHdpdGggYSBuZXcgY29tbWl0LCByZWNvcmRpbmcgb25lIGxvZ2ljYWwKK2NoYW5nZSB0byB0aGUgcHJvamVjdC4KKworLi4uLgorCSdjb21taXQnIFNQIDxyZWY+IExGCisJbWFyaz8KKwlvcmlnaW5hbC1vaWQ/CisJKCdhdXRob3InIChTUCA8bmFtZT4pPyBTUCBMVCA8ZW1haWw+IEdUIFNQIDx3aGVuPiBMRik/CisJJ2NvbW1pdHRlcicgKFNQIDxuYW1lPik/IFNQIExUIDxlbWFpbD4gR1QgU1AgPHdoZW4+IExGCisJKCdlbmNvZGluZycgU1AgPGVuY29kaW5nPik/CisJZGF0YQorCSgnZnJvbScgU1AgPGNvbW1pdC1pc2g+IExGKT8KKwkoJ21lcmdlJyBTUCA8Y29tbWl0LWlzaD4gTEYpKgorCShmaWxlbW9kaWZ5IHwgZmlsZWRlbGV0ZSB8IGZpbGVjb3B5IHwgZmlsZXJlbmFtZSB8IGZpbGVkZWxldGVhbGwgfCBub3RlbW9kaWZ5KSoKKwlMRj8KKy4uLi4KKword2hlcmUgYDxyZWY+YCBpcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIHRvIG1ha2UgdGhlIGNvbW1pdCBvbi4KK1R5cGljYWxseSBicmFuY2ggbmFtZXMgYXJlIHByZWZpeGVkIHdpdGggYHJlZnMvaGVhZHMvYCBpbgorR2l0LCBzbyBpbXBvcnRpbmcgdGhlIENWUyBicmFuY2ggc3ltYm9sIGBSRUxFTkctMV8wYCB3b3VsZCB1c2UKK2ByZWZzL2hlYWRzL1JFTEVORy0xXzBgIGZvciB0aGUgdmFsdWUgb2YgYDxyZWY+YC4gIFRoZSB2YWx1ZSBvZgorYDxyZWY+YCBtdXN0IGJlIGEgdmFsaWQgcmVmbmFtZSBpbiBHaXQuICBBcyBgTEZgIGlzIG5vdCB2YWxpZCBpbgorYSBHaXQgcmVmbmFtZSwgbm8gcXVvdGluZyBvciBlc2NhcGluZyBzeW50YXggaXMgc3VwcG9ydGVkIGhlcmUuCisKK0EgYG1hcmtgIGNvbW1hbmQgbWF5IG9wdGlvbmFsbHkgYXBwZWFyLCByZXF1ZXN0aW5nIGZhc3QtaW1wb3J0IHRvIHNhdmUgYQorcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBjcmVhdGVkIGNvbW1pdCBmb3IgZnV0dXJlIHVzZSBieSB0aGUgZnJvbnRlbmQKKyhzZWUgYmVsb3cgZm9yIGZvcm1hdCkuICBJdCBpcyB2ZXJ5IGNvbW1vbiBmb3IgZnJvbnRlbmRzIHRvIG1hcmsKK2V2ZXJ5IGNvbW1pdCB0aGV5IGNyZWF0ZSwgdGhlcmVieSBhbGxvd2luZyBmdXR1cmUgYnJhbmNoIGNyZWF0aW9uCitmcm9tIGFueSBpbXBvcnRlZCBjb21taXQuCisKK1RoZSBgZGF0YWAgY29tbWFuZCBmb2xsb3dpbmcgYGNvbW1pdHRlcmAgbXVzdCBzdXBwbHkgdGhlIGNvbW1pdAorbWVzc2FnZSAoc2VlIGJlbG93IGZvciBgZGF0YWAgY29tbWFuZCBzeW50YXgpLiAgVG8gaW1wb3J0IGFuIGVtcHR5Citjb21taXQgbWVzc2FnZSB1c2UgYSAwIGxlbmd0aCBkYXRhLiAgQ29tbWl0IG1lc3NhZ2VzIGFyZSBmcmVlLWZvcm0KK2FuZCBhcmUgbm90IGludGVycHJldGVkIGJ5IEdpdC4gIEN1cnJlbnRseSB0aGV5IG11c3QgYmUgZW5jb2RlZCBpbgorVVRGLTgsIGFzIGZhc3QtaW1wb3J0IGRvZXMgbm90IHBlcm1pdCBvdGhlciBlbmNvZGluZ3MgdG8gYmUgc3BlY2lmaWVkLgorCitaZXJvIG9yIG1vcmUgYGZpbGVtb2RpZnlgLCBgZmlsZWRlbGV0ZWAsIGBmaWxlY29weWAsIGBmaWxlcmVuYW1lYCwKK2BmaWxlZGVsZXRlYWxsYCBhbmQgYG5vdGVtb2RpZnlgIGNvbW1hbmRzCittYXkgYmUgaW5jbHVkZWQgdG8gdXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgYnJhbmNoIHByaW9yIHRvCitjcmVhdGluZyB0aGUgY29tbWl0LiAgVGhlc2UgY29tbWFuZHMgbWF5IGJlIHN1cHBsaWVkIGluIGFueSBvcmRlci4KK0hvd2V2ZXIgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhIGBmaWxlZGVsZXRlYWxsYCBjb21tYW5kIHByZWNlZGUKK2FsbCBgZmlsZW1vZGlmeWAsIGBmaWxlY29weWAsIGBmaWxlcmVuYW1lYCBhbmQgYG5vdGVtb2RpZnlgIGNvbW1hbmRzIGluCit0aGUgc2FtZSBjb21taXQsIGFzIGBmaWxlZGVsZXRlYWxsYCB3aXBlcyB0aGUgYnJhbmNoIGNsZWFuIChzZWUgYmVsb3cpLgorCitUaGUgYExGYCBhZnRlciB0aGUgY29tbWFuZCBpcyBvcHRpb25hbCAoaXQgdXNlZCB0byBiZSByZXF1aXJlZCkuICBOb3RlCit0aGF0IGZvciByZWFzb25zIG9mIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGlmIHRoZSBjb21taXQgZW5kcyB3aXRoIGEKK2BkYXRhYCBjb21tYW5kIChpLmUuIGl0IGhhcyBubyBgZnJvbWAsIGBtZXJnZWAsIGBmaWxlbW9kaWZ5YCwKK2BmaWxlZGVsZXRlYCwgYGZpbGVjb3B5YCwgYGZpbGVyZW5hbWVgLCBgZmlsZWRlbGV0ZWFsbGAgb3IKK2Bub3RlbW9kaWZ5YCBjb21tYW5kcykgdGhlbiB0d28gYExGYCBjb21tYW5kcyBtYXkgYXBwZWFyIGF0IHRoZSBlbmQgb2YKK3RoZSBjb21tYW5kIGluc3RlYWQgb2YganVzdCBvbmUuCisKK2BhdXRob3JgCiteXl5eXl5eXgorQW4gYGF1dGhvcmAgY29tbWFuZCBtYXkgb3B0aW9uYWxseSBhcHBlYXIsIGlmIHRoZSBhdXRob3IgaW5mb3JtYXRpb24KK21pZ2h0IGRpZmZlciBmcm9tIHRoZSBjb21taXR0ZXIgaW5mb3JtYXRpb24uICBJZiBgYXV0aG9yYCBpcyBvbWl0dGVkCit0aGVuIGZhc3QtaW1wb3J0IHdpbGwgYXV0b21hdGljYWxseSB1c2UgdGhlIGNvbW1pdHRlcidzIGluZm9ybWF0aW9uIGZvcgordGhlIGF1dGhvciBwb3J0aW9uIG9mIHRoZSBjb21taXQuICBTZWUgYmVsb3cgZm9yIGEgZGVzY3JpcHRpb24gb2YKK3RoZSBmaWVsZHMgaW4gYGF1dGhvcmAsIGFzIHRoZXkgYXJlIGlkZW50aWNhbCB0byBgY29tbWl0dGVyYC4KKworYGNvbW1pdHRlcmAKK15eXl5eXl5eXl5eCitUaGUgYGNvbW1pdHRlcmAgY29tbWFuZCBpbmRpY2F0ZXMgd2hvIG1hZGUgdGhpcyBjb21taXQsIGFuZCB3aGVuCit0aGV5IG1hZGUgaXQuCisKK0hlcmUgYDxuYW1lPmAgaXMgdGhlIHBlcnNvbidzIGRpc3BsYXkgbmFtZSAoZm9yIGV4YW1wbGUKK2BgQ29tIE0gSXR0ZXInJykgYW5kIGA8ZW1haWw+YCBpcyB0aGUgcGVyc29uJ3MgZW1haWwgYWRkcmVzcworKGBgXGNtQGV4YW1wbGUuY29tJycpLiAgYExUYCBhbmQgYEdUYCBhcmUgdGhlIGxpdGVyYWwgbGVzcy10aGFuIChceDNjKQorYW5kIGdyZWF0ZXItdGhhbiAoXHgzZSkgc3ltYm9scy4gIFRoZXNlIGFyZSByZXF1aXJlZCB0byBkZWxpbWl0Cit0aGUgZW1haWwgYWRkcmVzcyBmcm9tIHRoZSBvdGhlciBmaWVsZHMgaW4gdGhlIGxpbmUuICBOb3RlIHRoYXQKK2A8bmFtZT5gIGFuZCBgPGVtYWlsPmAgYXJlIGZyZWUtZm9ybSBhbmQgbWF5IGNvbnRhaW4gYW55IHNlcXVlbmNlCitvZiBieXRlcywgZXhjZXB0IGBMVGAsIGBHVGAgYW5kIGBMRmAuICBgPG5hbWU+YCBpcyB0eXBpY2FsbHkgVVRGLTggZW5jb2RlZC4KKworVGhlIHRpbWUgb2YgdGhlIGNoYW5nZSBpcyBzcGVjaWZpZWQgYnkgYDx3aGVuPmAgdXNpbmcgdGhlIGRhdGUgZm9ybWF0Cit0aGF0IHdhcyBzZWxlY3RlZCBieSB0aGUgLS1kYXRlLWZvcm1hdD08Zm10PiBjb21tYW5kLWxpbmUgb3B0aW9uLgorU2VlIGBgRGF0ZSBGb3JtYXRzJycgYWJvdmUgZm9yIHRoZSBzZXQgb2Ygc3VwcG9ydGVkIGZvcm1hdHMsIGFuZAordGhlaXIgc3ludGF4LgorCitgZW5jb2RpbmdgCiteXl5eXl5eXl5eCitUaGUgb3B0aW9uYWwgYGVuY29kaW5nYCBjb21tYW5kIGluZGljYXRlcyB0aGUgZW5jb2Rpbmcgb2YgdGhlIGNvbW1pdAorbWVzc2FnZS4gIE1vc3QgY29tbWl0cyBhcmUgVVRGLTggYW5kIHRoZSBlbmNvZGluZyBpcyBvbWl0dGVkLCBidXQgdGhpcworYWxsb3dzIGltcG9ydGluZyBjb21taXQgbWVzc2FnZXMgaW50byBnaXQgd2l0aG91dCBmaXJzdCByZWVuY29kaW5nIHRoZW0uCisKK2Bmcm9tYAorXl5eXl5eCitUaGUgYGZyb21gIGNvbW1hbmQgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBjb21taXQgdG8gaW5pdGlhbGl6ZQordGhpcyBicmFuY2ggZnJvbS4gIFRoaXMgcmV2aXNpb24gd2lsbCBiZSB0aGUgZmlyc3QgYW5jZXN0b3Igb2YgdGhlCituZXcgY29tbWl0LiAgVGhlIHN0YXRlIG9mIHRoZSB0cmVlIGJ1aWx0IGF0IHRoaXMgY29tbWl0IHdpbGwgYmVnaW4KK3dpdGggdGhlIHN0YXRlIGF0IHRoZSBgZnJvbWAgY29tbWl0LCBhbmQgYmUgYWx0ZXJlZCBieSB0aGUgY29udGVudAorbW9kaWZpY2F0aW9ucyBpbiB0aGlzIGNvbW1pdC4KKworT21pdHRpbmcgdGhlIGBmcm9tYCBjb21tYW5kIGluIHRoZSBmaXJzdCBjb21taXQgb2YgYSBuZXcgYnJhbmNoCit3aWxsIGNhdXNlIGZhc3QtaW1wb3J0IHRvIGNyZWF0ZSB0aGF0IGNvbW1pdCB3aXRoIG5vIGFuY2VzdG9yLiBUaGlzCit0ZW5kcyB0byBiZSBkZXNpcmVkIG9ubHkgZm9yIHRoZSBpbml0aWFsIGNvbW1pdCBvZiBhIHByb2plY3QuCitJZiB0aGUgZnJvbnRlbmQgY3JlYXRlcyBhbGwgZmlsZXMgZnJvbSBzY3JhdGNoIHdoZW4gbWFraW5nIGEgbmV3CiticmFuY2gsIGEgYG1lcmdlYCBjb21tYW5kIG1heSBiZSB1c2VkIGluc3RlYWQgb2YgYGZyb21gIHRvIHN0YXJ0Cit0aGUgY29tbWl0IHdpdGggYW4gZW1wdHkgdHJlZS4KK09taXR0aW5nIHRoZSBgZnJvbWAgY29tbWFuZCBvbiBleGlzdGluZyBicmFuY2hlcyBpcyB1c3VhbGx5IGRlc2lyZWQsCithcyB0aGUgY3VycmVudCBjb21taXQgb24gdGhhdCBicmFuY2ggaXMgYXV0b21hdGljYWxseSBhc3N1bWVkIHRvCitiZSB0aGUgZmlyc3QgYW5jZXN0b3Igb2YgdGhlIG5ldyBjb21taXQuCisKK0FzIGBMRmAgaXMgbm90IHZhbGlkIGluIGEgR2l0IHJlZm5hbWUgb3IgU0hBLTEgZXhwcmVzc2lvbiwgbm8KK3F1b3Rpbmcgb3IgZXNjYXBpbmcgc3ludGF4IGlzIHN1cHBvcnRlZCB3aXRoaW4gYDxjb21taXQtaXNoPmAuCisKK0hlcmUgYDxjb21taXQtaXNoPmAgaXMgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisKKyogVGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgYnJhbmNoIGFscmVhZHkgaW4gZmFzdC1pbXBvcnQncyBpbnRlcm5hbCBicmFuY2gKKyAgdGFibGUuICBJZiBmYXN0LWltcG9ydCBkb2Vzbid0IGtub3cgdGhlIG5hbWUsIGl0J3MgdHJlYXRlZCBhcyBhIFNIQS0xCisgIGV4cHJlc3Npb24uCisKKyogQSBtYXJrIHJlZmVyZW5jZSwgYDo8aWRudW0+YCwgd2hlcmUgYDxpZG51bT5gIGlzIHRoZSBtYXJrIG51bWJlci4KKysKK1RoZSByZWFzb24gZmFzdC1pbXBvcnQgdXNlcyBgOmAgdG8gZGVub3RlIGEgbWFyayByZWZlcmVuY2UgaXMgdGhpcyBjaGFyYWN0ZXIKK2lzIG5vdCBsZWdhbCBpbiBhIEdpdCBicmFuY2ggbmFtZS4gIFRoZSBsZWFkaW5nIGA6YCBtYWtlcyBpdCBlYXN5Cit0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBtYXJrIDQyIChgOjQyYCkgYW5kIHRoZSBicmFuY2ggNDIgKGA0MmAKK29yIGByZWZzL2hlYWRzLzQyYCksIG9yIGFuIGFiYnJldmlhdGVkIFNIQS0xIHdoaWNoIGhhcHBlbmVkIHRvCitjb25zaXN0IG9ubHkgb2YgYmFzZS0xMCBkaWdpdHMuCisrCitNYXJrcyBtdXN0IGJlIGRlY2xhcmVkICh2aWEgYG1hcmtgKSBiZWZvcmUgdGhleSBjYW4gYmUgdXNlZC4KKworKiBBIGNvbXBsZXRlIDQwIGJ5dGUgb3IgYWJicmV2aWF0ZWQgY29tbWl0IFNIQS0xIGluIGhleC4KKworKiBBbnkgdmFsaWQgR2l0IFNIQS0xIGV4cHJlc3Npb24gdGhhdCByZXNvbHZlcyB0byBhIGNvbW1pdC4gIFNlZQorICBgYFNQRUNJRllJTkcgUkVWSVNJT05TJycgaW4gbGlua2dpdDpnaXRyZXZpc2lvbnNbN10gZm9yIGRldGFpbHMuCisKKyogVGhlIHNwZWNpYWwgbnVsbCBTSEEtMSAoNDAgemVyb3MpIHNwZWNpZmllcyB0aGF0IHRoZSBicmFuY2ggaXMgdG8gYmUKKyAgcmVtb3ZlZC4KKworVGhlIHNwZWNpYWwgY2FzZSBvZiByZXN0YXJ0aW5nIGFuIGluY3JlbWVudGFsIGltcG9ydCBmcm9tIHRoZQorY3VycmVudCBicmFuY2ggdmFsdWUgc2hvdWxkIGJlIHdyaXR0ZW4gYXM6CistLS0tCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCistLS0tCitUaGUgYF4wYCBzdWZmaXggaXMgbmVjZXNzYXJ5IGFzIGZhc3QtaW1wb3J0IGRvZXMgbm90IHBlcm1pdCBhIGJyYW5jaCB0bworc3RhcnQgZnJvbSBpdHNlbGYsIGFuZCB0aGUgYnJhbmNoIGlzIGNyZWF0ZWQgaW4gbWVtb3J5IGJlZm9yZSB0aGUKK2Bmcm9tYCBjb21tYW5kIGlzIGV2ZW4gcmVhZCBmcm9tIHRoZSBpbnB1dC4gIEFkZGluZyBgXjBgIHdpbGwgZm9yY2UKK2Zhc3QtaW1wb3J0IHRvIHJlc29sdmUgdGhlIGNvbW1pdCB0aHJvdWdoIEdpdCdzIHJldmlzaW9uIHBhcnNpbmcgbGlicmFyeSwKK3JhdGhlciB0aGFuIGl0cyBpbnRlcm5hbCBicmFuY2ggdGFibGUsIHRoZXJlYnkgbG9hZGluZyBpbiB0aGUKK2V4aXN0aW5nIHZhbHVlIG9mIHRoZSBicmFuY2guCisKK2BtZXJnZWAKK15eXl5eXl4KK0luY2x1ZGVzIG9uZSBhZGRpdGlvbmFsIGFuY2VzdG9yIGNvbW1pdC4gIFRoZSBhZGRpdGlvbmFsIGFuY2VzdHJ5CitsaW5rIGRvZXMgbm90IGNoYW5nZSB0aGUgd2F5IHRoZSB0cmVlIHN0YXRlIGlzIGJ1aWx0IGF0IHRoaXMgY29tbWl0LgorSWYgdGhlIGBmcm9tYCBjb21tYW5kIGlzCitvbWl0dGVkIHdoZW4gY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGUgZmlyc3QgYG1lcmdlYCBjb21taXQgd2lsbCBiZQordGhlIGZpcnN0IGFuY2VzdG9yIG9mIHRoZSBjdXJyZW50IGNvbW1pdCwgYW5kIHRoZSBicmFuY2ggd2lsbCBzdGFydAorb3V0IHdpdGggbm8gZmlsZXMuICBBbiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGBtZXJnZWAgY29tbWFuZHMgcGVyCitjb21taXQgYXJlIHBlcm1pdHRlZCBieSBmYXN0LWltcG9ydCwgdGhlcmVieSBlc3RhYmxpc2hpbmcgYW4gbi13YXkgbWVyZ2UuCisKK0hlcmUgYDxjb21taXQtaXNoPmAgaXMgYW55IG9mIHRoZSBjb21taXQgc3BlY2lmaWNhdGlvbiBleHByZXNzaW9ucworYWxzbyBhY2NlcHRlZCBieSBgZnJvbWAgKHNlZSBhYm92ZSkuCisKK2BmaWxlbW9kaWZ5YAorXl5eXl5eXl5eXl5eCitJbmNsdWRlZCBpbiBhIGBjb21taXRgIGNvbW1hbmQgdG8gYWRkIGEgbmV3IGZpbGUgb3IgY2hhbmdlIHRoZQorY29udGVudCBvZiBhbiBleGlzdGluZyBmaWxlLiAgVGhpcyBjb21tYW5kIGhhcyB0d28gZGlmZmVyZW50IG1lYW5zCitvZiBzcGVjaWZ5aW5nIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlLgorCitFeHRlcm5hbCBkYXRhIGZvcm1hdDo6CisJVGhlIGRhdGEgY29udGVudCBmb3IgdGhlIGZpbGUgd2FzIGFscmVhZHkgc3VwcGxpZWQgYnkgYSBwcmlvcgorCWBibG9iYCBjb21tYW5kLiAgVGhlIGZyb250ZW5kIGp1c3QgbmVlZHMgdG8gY29ubmVjdCBpdC4KKysKKy4uLi4KKwknTScgU1AgPG1vZGU+IFNQIDxkYXRhcmVmPiBTUCA8cGF0aD4gTEYKKy4uLi4KKysKK0hlcmUgdXN1YWxseSBgPGRhdGFyZWY+YCBtdXN0IGJlIGVpdGhlciBhIG1hcmsgcmVmZXJlbmNlIChgOjxpZG51bT5gKQorc2V0IGJ5IGEgcHJpb3IgYGJsb2JgIGNvbW1hbmQsIG9yIGEgZnVsbCA0MC1ieXRlIFNIQS0xIG9mIGFuCitleGlzdGluZyBHaXQgYmxvYiBvYmplY3QuICBJZiBgPG1vZGU+YCBpcyBgMDQwMDAwYGAgdGhlbgorYDxkYXRhcmVmPmAgbXVzdCBiZSB0aGUgZnVsbCA0MC1ieXRlIFNIQS0xIG9mIGFuIGV4aXN0aW5nCitHaXQgdHJlZSBvYmplY3Qgb3IgYSBtYXJrIHJlZmVyZW5jZSBzZXQgd2l0aCBgLS1pbXBvcnQtbWFya3NgLgorCitJbmxpbmUgZGF0YSBmb3JtYXQ6OgorCVRoZSBkYXRhIGNvbnRlbnQgZm9yIHRoZSBmaWxlIGhhcyBub3QgYmVlbiBzdXBwbGllZCB5ZXQuCisJVGhlIGZyb250ZW5kIHdhbnRzIHRvIHN1cHBseSBpdCBhcyBwYXJ0IG9mIHRoaXMgbW9kaWZ5CisJY29tbWFuZC4KKysKKy4uLi4KKwknTScgU1AgPG1vZGU+IFNQICdpbmxpbmUnIFNQIDxwYXRoPiBMRgorCWRhdGEKKy4uLi4KKysKK1NlZSBiZWxvdyBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgYGRhdGFgIGNvbW1hbmQuCisKK0luIGJvdGggZm9ybWF0cyBgPG1vZGU+YCBpcyB0aGUgdHlwZSBvZiBmaWxlIGVudHJ5LCBzcGVjaWZpZWQKK2luIG9jdGFsLiAgR2l0IG9ubHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBtb2RlczoKKworKiBgMTAwNjQ0YCBvciBgNjQ0YDogQSBub3JtYWwgKG5vdC1leGVjdXRhYmxlKSBmaWxlLiAgVGhlIG1ham9yaXR5CisgIG9mIGZpbGVzIGluIG1vc3QgcHJvamVjdHMgdXNlIHRoaXMgbW9kZS4gIElmIGluIGRvdWJ0LCB0aGlzIGlzCisgIHdoYXQgeW91IHdhbnQuCisqIGAxMDA3NTVgIG9yIGA3NTVgOiBBIG5vcm1hbCwgYnV0IGV4ZWN1dGFibGUsIGZpbGUuCisqIGAxMjAwMDBgOiBBIHN5bWxpbmssIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIHdpbGwgYmUgdGhlIGxpbmsgdGFyZ2V0LgorKiBgMTYwMDAwYDogQSBnaXRsaW5rLCBTSEEtMSBvZiB0aGUgb2JqZWN0IHJlZmVycyB0byBhIGNvbW1pdCBpbgorICBhbm90aGVyIHJlcG9zaXRvcnkuIEdpdCBsaW5rcyBjYW4gb25seSBiZSBzcGVjaWZpZWQgYnkgU0hBIG9yIHRocm91Z2gKKyAgYSBjb21taXQgbWFyay4gVGhleSBhcmUgdXNlZCB0byBpbXBsZW1lbnQgc3VibW9kdWxlcy4KKyogYDA0MDAwMGA6IEEgc3ViZGlyZWN0b3J5LiAgU3ViZGlyZWN0b3JpZXMgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGJ5CisgIFNIQSBvciB0aHJvdWdoIGEgdHJlZSBtYXJrIHNldCB3aXRoIGAtLWltcG9ydC1tYXJrc2AuCisKK0luIGJvdGggZm9ybWF0cyBgPHBhdGg+YCBpcyB0aGUgY29tcGxldGUgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBhZGRlZAorKGlmIG5vdCBhbHJlYWR5IGV4aXN0aW5nKSBvciBtb2RpZmllZCAoaWYgYWxyZWFkeSBleGlzdGluZykuCisKK0EgYDxwYXRoPmAgc3RyaW5nIG11c3QgdXNlIFVOSVgtc3R5bGUgZGlyZWN0b3J5IHNlcGFyYXRvcnMgKGZvcndhcmQKK3NsYXNoIGAvYCksIG1heSBjb250YWluIGFueSBieXRlIG90aGVyIHRoYW4gYExGYCwgYW5kIG11c3Qgbm90CitzdGFydCB3aXRoIGRvdWJsZSBxdW90ZSAoYCJgKS4KKworQSBwYXRoIGNhbiB1c2UgQy1zdHlsZSBzdHJpbmcgcXVvdGluZzsgdGhpcyBpcyBhY2NlcHRlZCBpbiBhbGwgY2FzZXMKK2FuZCBtYW5kYXRvcnkgaWYgdGhlIGZpbGVuYW1lIHN0YXJ0cyB3aXRoIGRvdWJsZSBxdW90ZSBvciBjb250YWlucworYExGYC4gSW4gQy1zdHlsZSBxdW90aW5nLCB0aGUgY29tcGxldGUgbmFtZSBzaG91bGQgYmUgc3Vycm91bmRlZCB3aXRoCitkb3VibGUgcXVvdGVzLCBhbmQgYW55IGBMRmAsIGJhY2tzbGFzaCwgb3IgZG91YmxlIHF1b3RlIGNoYXJhY3RlcnMKK211c3QgYmUgZXNjYXBlZCBieSBwcmVjZWRpbmcgdGhlbSB3aXRoIGEgYmFja3NsYXNoIChlLmcuLAorYCJwYXRoL3dpdGhcbiwgXFwgYW5kIFwiIGluIGl0ImApLgorCitUaGUgdmFsdWUgb2YgYDxwYXRoPmAgbXVzdCBiZSBpbiBjYW5vbmljYWwgZm9ybS4gVGhhdCBpcyBpdCBtdXN0IG5vdDoKKworKiBjb250YWluIGFuIGVtcHR5IGRpcmVjdG9yeSBjb21wb25lbnQgKGUuZy4gYGZvby8vYmFyYCBpcyBpbnZhbGlkKSwKKyogZW5kIHdpdGggYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIChlLmcuIGBmb28vYCBpcyBpbnZhbGlkKSwKKyogc3RhcnQgd2l0aCBhIGRpcmVjdG9yeSBzZXBhcmF0b3IgKGUuZy4gYC9mb29gIGlzIGludmFsaWQpLAorKiBjb250YWluIHRoZSBzcGVjaWFsIGNvbXBvbmVudCBgLmAgb3IgYC4uYCAoZS5nLiBgZm9vLy4vYmFyYCBhbmQKKyAgYGZvby8uLi9iYXJgIGFyZSBpbnZhbGlkKS4KKworVGhlIHJvb3Qgb2YgdGhlIHRyZWUgY2FuIGJlIHJlcHJlc2VudGVkIGJ5IGFuIGVtcHR5IHN0cmluZyBhcyBgPHBhdGg+YC4KKworSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBgPHBhdGg+YCBhbHdheXMgYmUgZW5jb2RlZCB1c2luZyBVVEYtOC4KKworYGZpbGVkZWxldGVgCiteXl5eXl5eXl5eXl4KK0luY2x1ZGVkIGluIGEgYGNvbW1pdGAgY29tbWFuZCB0byByZW1vdmUgYSBmaWxlIG9yIHJlY3Vyc2l2ZWx5CitkZWxldGUgYW4gZW50aXJlIGRpcmVjdG9yeSBmcm9tIHRoZSBicmFuY2guICBJZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkKK3JlbW92YWwgbWFrZXMgaXRzIHBhcmVudCBkaXJlY3RvcnkgZW1wdHksIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHdpbGwKK2JlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB0b28uICBUaGlzIGNhc2NhZGVzIHVwIHRoZSB0cmVlIHVudGlsIHRoZQorZmlyc3Qgbm9uLWVtcHR5IGRpcmVjdG9yeSBvciB0aGUgcm9vdCBpcyByZWFjaGVkLgorCisuLi4uCisJJ0QnIFNQIDxwYXRoPiBMRgorLi4uLgorCitoZXJlIGA8cGF0aD5gIGlzIHRoZSBjb21wbGV0ZSBwYXRoIG9mIHRoZSBmaWxlIG9yIHN1YmRpcmVjdG9yeSB0bworYmUgcmVtb3ZlZCBmcm9tIHRoZSBicmFuY2guCitTZWUgYGZpbGVtb2RpZnlgIGFib3ZlIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGA8cGF0aD5gLgorCitgZmlsZWNvcHlgCiteXl5eXl5eXl5eCitSZWN1cnNpdmVseSBjb3BpZXMgYW4gZXhpc3RpbmcgZmlsZSBvciBzdWJkaXJlY3RvcnkgdG8gYSBkaWZmZXJlbnQKK2xvY2F0aW9uIHdpdGhpbiB0aGUgYnJhbmNoLiAgVGhlIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5IG11c3QKK2V4aXN0LiAgSWYgdGhlIGRlc3RpbmF0aW9uIGV4aXN0cyBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgcmVwbGFjZWQKK2J5IHRoZSBjb250ZW50IGNvcGllZCBmcm9tIHRoZSBzb3VyY2UuCisKKy4uLi4KKwknQycgU1AgPHBhdGg+IFNQIDxwYXRoPiBMRgorLi4uLgorCitoZXJlIHRoZSBmaXJzdCBgPHBhdGg+YCBpcyB0aGUgc291cmNlIGxvY2F0aW9uIGFuZCB0aGUgc2Vjb25kCitgPHBhdGg+YCBpcyB0aGUgZGVzdGluYXRpb24uICBTZWUgYGZpbGVtb2RpZnlgIGFib3ZlIGZvciBhIGRldGFpbGVkCitkZXNjcmlwdGlvbiBvZiB3aGF0IGA8cGF0aD5gIG1heSBsb29rIGxpa2UuICBUbyB1c2UgYSBzb3VyY2UgcGF0aAordGhhdCBjb250YWlucyBTUCB0aGUgcGF0aCBtdXN0IGJlIHF1b3RlZC4KKworQSBgZmlsZWNvcHlgIGNvbW1hbmQgdGFrZXMgZWZmZWN0IGltbWVkaWF0ZWx5LiAgT25jZSB0aGUgc291cmNlCitsb2NhdGlvbiBoYXMgYmVlbiBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGFueSBmdXR1cmUgY29tbWFuZHMKK2FwcGxpZWQgdG8gdGhlIHNvdXJjZSBsb2NhdGlvbiB3aWxsIG5vdCBpbXBhY3QgdGhlIGRlc3RpbmF0aW9uIG9mCit0aGUgY29weS4KKworYGZpbGVyZW5hbWVgCiteXl5eXl5eXl5eXl4KK1JlbmFtZXMgYW4gZXhpc3RpbmcgZmlsZSBvciBzdWJkaXJlY3RvcnkgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24KK3dpdGhpbiB0aGUgYnJhbmNoLiAgVGhlIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5IG11c3QgZXhpc3QuIElmCit0aGUgZGVzdGluYXRpb24gZXhpc3RzIGl0IHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIHNvdXJjZSBkaXJlY3RvcnkuCisKKy4uLi4KKwknUicgU1AgPHBhdGg+IFNQIDxwYXRoPiBMRgorLi4uLgorCitoZXJlIHRoZSBmaXJzdCBgPHBhdGg+YCBpcyB0aGUgc291cmNlIGxvY2F0aW9uIGFuZCB0aGUgc2Vjb25kCitgPHBhdGg+YCBpcyB0aGUgZGVzdGluYXRpb24uICBTZWUgYGZpbGVtb2RpZnlgIGFib3ZlIGZvciBhIGRldGFpbGVkCitkZXNjcmlwdGlvbiBvZiB3aGF0IGA8cGF0aD5gIG1heSBsb29rIGxpa2UuICBUbyB1c2UgYSBzb3VyY2UgcGF0aAordGhhdCBjb250YWlucyBTUCB0aGUgcGF0aCBtdXN0IGJlIHF1b3RlZC4KKworQSBgZmlsZXJlbmFtZWAgY29tbWFuZCB0YWtlcyBlZmZlY3QgaW1tZWRpYXRlbHkuICBPbmNlIHRoZSBzb3VyY2UKK2xvY2F0aW9uIGhhcyBiZWVuIHJlbmFtZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGFueSBmdXR1cmUgY29tbWFuZHMKK2FwcGxpZWQgdG8gdGhlIHNvdXJjZSBsb2NhdGlvbiB3aWxsIGNyZWF0ZSBuZXcgZmlsZXMgdGhlcmUgYW5kIG5vdAoraW1wYWN0IHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVuYW1lLgorCitOb3RlIHRoYXQgYSBgZmlsZXJlbmFtZWAgaXMgdGhlIHNhbWUgYXMgYSBgZmlsZWNvcHlgIGZvbGxvd2VkIGJ5IGEKK2BmaWxlZGVsZXRlYCBvZiB0aGUgc291cmNlIGxvY2F0aW9uLiAgVGhlcmUgaXMgYSBzbGlnaHQgcGVyZm9ybWFuY2UKK2FkdmFudGFnZSB0byB1c2luZyBgZmlsZXJlbmFtZWAsIGJ1dCB0aGUgYWR2YW50YWdlIGlzIHNvIHNtYWxsCit0aGF0IGl0IGlzIG5ldmVyIHdvcnRoIHRyeWluZyB0byBjb252ZXJ0IGEgZGVsZXRlL2FkZCBwYWlyIGluCitzb3VyY2UgbWF0ZXJpYWwgaW50byBhIHJlbmFtZSBmb3IgZmFzdC1pbXBvcnQuICBUaGlzIGBmaWxlcmVuYW1lYAorY29tbWFuZCBpcyBwcm92aWRlZCBqdXN0IHRvIHNpbXBsaWZ5IGZyb250ZW5kcyB0aGF0IGFscmVhZHkgaGF2ZQorcmVuYW1lIGluZm9ybWF0aW9uIGFuZCBkb24ndCB3YW50IGJvdGhlciB3aXRoIGRlY29tcG9zaW5nIGl0IGludG8gYQorYGZpbGVjb3B5YCBmb2xsb3dlZCBieSBhIGBmaWxlZGVsZXRlYC4KKworYGZpbGVkZWxldGVhbGxgCiteXl5eXl5eXl5eXl5eXl4KK0luY2x1ZGVkIGluIGEgYGNvbW1pdGAgY29tbWFuZCB0byByZW1vdmUgYWxsIGZpbGVzIChhbmQgYWxzbyBhbGwKK2RpcmVjdG9yaWVzKSBmcm9tIHRoZSBicmFuY2guICBUaGlzIGNvbW1hbmQgcmVzZXRzIHRoZSBpbnRlcm5hbAorYnJhbmNoIHN0cnVjdHVyZSB0byBoYXZlIG5vIGZpbGVzIGluIGl0LCBhbGxvd2luZyB0aGUgZnJvbnRlbmQKK3RvIHN1YnNlcXVlbnRseSBhZGQgYWxsIGludGVyZXN0aW5nIGZpbGVzIGZyb20gc2NyYXRjaC4KKworLi4uLgorCSdkZWxldGVhbGwnIExGCisuLi4uCisKK1RoaXMgY29tbWFuZCBpcyBleHRyZW1lbHkgdXNlZnVsIGlmIHRoZSBmcm9udGVuZCBkb2VzIG5vdCBrbm93Cisob3IgZG9lcyBub3QgY2FyZSB0byBrbm93KSB3aGF0IGZpbGVzIGFyZSBjdXJyZW50bHkgb24gdGhlIGJyYW5jaCwKK2FuZCB0aGVyZWZvcmUgY2Fubm90IGdlbmVyYXRlIHRoZSBwcm9wZXIgYGZpbGVkZWxldGVgIGNvbW1hbmRzIHRvCit1cGRhdGUgdGhlIGNvbnRlbnQuCisKK0lzc3VpbmcgYSBgZmlsZWRlbGV0ZWFsbGAgZm9sbG93ZWQgYnkgdGhlIG5lZWRlZCBgZmlsZW1vZGlmeWAKK2NvbW1hbmRzIHRvIHNldCB0aGUgY29ycmVjdCBjb250ZW50IHdpbGwgcHJvZHVjZSB0aGUgc2FtZSByZXN1bHRzCithcyBzZW5kaW5nIG9ubHkgdGhlIG5lZWRlZCBgZmlsZW1vZGlmeWAgYW5kIGBmaWxlZGVsZXRlYCBjb21tYW5kcy4KK1RoZSBgZmlsZWRlbGV0ZWFsbGAgYXBwcm9hY2ggbWF5IGhvd2V2ZXIgcmVxdWlyZSBmYXN0LWltcG9ydCB0byB1c2Ugc2xpZ2h0bHkKK21vcmUgbWVtb3J5IHBlciBhY3RpdmUgYnJhbmNoIChsZXNzIHRoYW4gMSBNaUIgZm9yIGV2ZW4gbW9zdCBsYXJnZQorcHJvamVjdHMpOyBzbyBmcm9udGVuZHMgdGhhdCBjYW4gZWFzaWx5IG9idGFpbiBvbmx5IHRoZSBhZmZlY3RlZAorcGF0aHMgZm9yIGEgY29tbWl0IGFyZSBlbmNvdXJhZ2VkIHRvIGRvIHNvLgorCitgbm90ZW1vZGlmeWAKK15eXl5eXl5eXl5eXgorSW5jbHVkZWQgaW4gYSBgY29tbWl0YCBgPG5vdGVzX3JlZj5gIGNvbW1hbmQgdG8gYWRkIGEgbmV3IG5vdGUKK2Fubm90YXRpbmcgYSBgPGNvbW1pdC1pc2g+YCBvciBjaGFuZ2UgdGhpcyBhbm5vdGF0aW9uIGNvbnRlbnRzLgorSW50ZXJuYWxseSBpdCBpcyBzaW1pbGFyIHRvIGZpbGVtb2RpZnkgMTAwNjQ0IG9uIGA8Y29tbWl0LWlzaD5gCitwYXRoIChtYXliZSBzcGxpdCBpbnRvIHN1YmRpcmVjdG9yaWVzKS4gSXQncyBub3QgYWR2aXNlZCB0bwordXNlIGFueSBvdGhlciBjb21tYW5kcyB0byB3cml0ZSB0byB0aGUgYDxub3Rlc19yZWY+YCB0cmVlIGV4Y2VwdAorYGZpbGVkZWxldGVhbGxgIHRvIGRlbGV0ZSBhbGwgZXhpc3Rpbmcgbm90ZXMgaW4gdGhpcyB0cmVlLgorVGhpcyBjb21tYW5kIGhhcyB0d28gZGlmZmVyZW50IG1lYW5zIG9mIHNwZWNpZnlpbmcgdGhlIGNvbnRlbnQKK29mIHRoZSBub3RlLgorCitFeHRlcm5hbCBkYXRhIGZvcm1hdDo6CisJVGhlIGRhdGEgY29udGVudCBmb3IgdGhlIG5vdGUgd2FzIGFscmVhZHkgc3VwcGxpZWQgYnkgYSBwcmlvcgorCWBibG9iYCBjb21tYW5kLiAgVGhlIGZyb250ZW5kIGp1c3QgbmVlZHMgdG8gY29ubmVjdCBpdCB0byB0aGUKKwljb21taXQgdGhhdCBpcyB0byBiZSBhbm5vdGF0ZWQuCisrCisuLi4uCisJJ04nIFNQIDxkYXRhcmVmPiBTUCA8Y29tbWl0LWlzaD4gTEYKKy4uLi4KKysKK0hlcmUgYDxkYXRhcmVmPmAgY2FuIGJlIGVpdGhlciBhIG1hcmsgcmVmZXJlbmNlIChgOjxpZG51bT5gKQorc2V0IGJ5IGEgcHJpb3IgYGJsb2JgIGNvbW1hbmQsIG9yIGEgZnVsbCA0MC1ieXRlIFNIQS0xIG9mIGFuCitleGlzdGluZyBHaXQgYmxvYiBvYmplY3QuCisKK0lubGluZSBkYXRhIGZvcm1hdDo6CisJVGhlIGRhdGEgY29udGVudCBmb3IgdGhlIG5vdGUgaGFzIG5vdCBiZWVuIHN1cHBsaWVkIHlldC4KKwlUaGUgZnJvbnRlbmQgd2FudHMgdG8gc3VwcGx5IGl0IGFzIHBhcnQgb2YgdGhpcyBtb2RpZnkKKwljb21tYW5kLgorKworLi4uLgorCSdOJyBTUCAnaW5saW5lJyBTUCA8Y29tbWl0LWlzaD4gTEYKKwlkYXRhCisuLi4uCisrCitTZWUgYmVsb3cgZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGBkYXRhYCBjb21tYW5kLgorCitJbiBib3RoIGZvcm1hdHMgYDxjb21taXQtaXNoPmAgaXMgYW55IG9mIHRoZSBjb21taXQgc3BlY2lmaWNhdGlvbgorZXhwcmVzc2lvbnMgYWxzbyBhY2NlcHRlZCBieSBgZnJvbWAgKHNlZSBhYm92ZSkuCisKK2BtYXJrYAorfn5+fn5+CitBcnJhbmdlcyBmb3IgZmFzdC1pbXBvcnQgdG8gc2F2ZSBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBvYmplY3QsIGFsbG93aW5nCit0aGUgZnJvbnRlbmQgdG8gcmVjYWxsIHRoaXMgb2JqZWN0IGF0IGEgZnV0dXJlIHBvaW50IGluIHRpbWUsIHdpdGhvdXQKK2tub3dpbmcgaXRzIFNIQS0xLiAgSGVyZSB0aGUgY3VycmVudCBvYmplY3QgaXMgdGhlIG9iamVjdCBjcmVhdGlvbgorY29tbWFuZCB0aGUgYG1hcmtgIGNvbW1hbmQgYXBwZWFycyB3aXRoaW4uICBUaGlzIGNhbiBiZSBgY29tbWl0YCwKK2B0YWdgLCBhbmQgYGJsb2JgLCBidXQgYGNvbW1pdGAgaXMgdGhlIG1vc3QgY29tbW9uIHVzYWdlLgorCisuLi4uCisJJ21hcmsnIFNQICc6JyA8aWRudW0+IExGCisuLi4uCisKK3doZXJlIGA8aWRudW0+YCBpcyB0aGUgbnVtYmVyIGFzc2lnbmVkIGJ5IHRoZSBmcm9udGVuZCB0byB0aGlzIG1hcmsuCitUaGUgdmFsdWUgb2YgYDxpZG51bT5gIGlzIGV4cHJlc3NlZCBhcyBhbiBBU0NJSSBkZWNpbWFsIGludGVnZXIuCitUaGUgdmFsdWUgMCBpcyByZXNlcnZlZCBhbmQgY2Fubm90IGJlIHVzZWQgYXMKK2EgbWFyay4gIE9ubHkgdmFsdWVzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxIG1heSBiZSB1c2VkIGFzIG1hcmtzLgorCitOZXcgbWFya3MgYXJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS4gIEV4aXN0aW5nIG1hcmtzIGNhbiBiZSBtb3ZlZAordG8gYW5vdGhlciBvYmplY3Qgc2ltcGx5IGJ5IHJldXNpbmcgdGhlIHNhbWUgYDxpZG51bT5gIGluIGFub3RoZXIKK2BtYXJrYCBjb21tYW5kLgorCitgb3JpZ2luYWwtb2lkYAorfn5+fn5+fn5+fn5+fn4KK1Byb3ZpZGVzIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250cm9sIHN5c3RlbS4KK2Zhc3QtaW1wb3J0IHdpbGwgc2ltcGx5IGlnbm9yZSB0aGlzIGRpcmVjdGl2ZSwgYnV0IGZpbHRlciBwcm9jZXNzZXMKK3doaWNoIG9wZXJhdGUgb24gYW5kIG1vZGlmeSB0aGUgc3RyZWFtIGJlZm9yZSBmZWVkaW5nIHRvIGZhc3QtaW1wb3J0CittYXkgaGF2ZSB1c2VzIGZvciB0aGlzIGluZm9ybWF0aW9uCisKKy4uLi4KKwknb3JpZ2luYWwtb2lkJyBTUCA8b2JqZWN0LWlkZW50aWZpZXI+IExGCisuLi4uCisKK3doZXJlIGA8b2JqZWN0LWlkZW50aWZlcj5gIGlzIGFueSBzdHJpbmcgbm90IGNvbnRhaW5pbmcgTEYuCisKK2B0YWdgCit+fn5+fgorQ3JlYXRlcyBhbiBhbm5vdGF0ZWQgdGFnIHJlZmVycmluZyB0byBhIHNwZWNpZmljIGNvbW1pdC4gIFRvIGNyZWF0ZQorbGlnaHR3ZWlnaHQgKG5vbi1hbm5vdGF0ZWQpIHRhZ3Mgc2VlIHRoZSBgcmVzZXRgIGNvbW1hbmQgYmVsb3cuCisKKy4uLi4KKwkndGFnJyBTUCA8bmFtZT4gTEYKKwltYXJrPworCSdmcm9tJyBTUCA8Y29tbWl0LWlzaD4gTEYKKwlvcmlnaW5hbC1vaWQ/CisJJ3RhZ2dlcicgKFNQIDxuYW1lPik/IFNQIExUIDxlbWFpbD4gR1QgU1AgPHdoZW4+IExGCisJZGF0YQorLi4uLgorCit3aGVyZSBgPG5hbWU+YCBpcyB0aGUgbmFtZSBvZiB0aGUgdGFnIHRvIGNyZWF0ZS4KKworVGFnIG5hbWVzIGFyZSBhdXRvbWF0aWNhbGx5IHByZWZpeGVkIHdpdGggYHJlZnMvdGFncy9gIHdoZW4gc3RvcmVkCitpbiBHaXQsIHNvIGltcG9ydGluZyB0aGUgQ1ZTIGJyYW5jaCBzeW1ib2wgYFJFTEVORy0xXzAtRklOQUxgIHdvdWxkCit1c2UganVzdCBgUkVMRU5HLTFfMC1GSU5BTGAgZm9yIGA8bmFtZT5gLCBhbmQgZmFzdC1pbXBvcnQgd2lsbCB3cml0ZSB0aGUKK2NvcnJlc3BvbmRpbmcgcmVmIGFzIGByZWZzL3RhZ3MvUkVMRU5HLTFfMC1GSU5BTGAuCisKK1RoZSB2YWx1ZSBvZiBgPG5hbWU+YCBtdXN0IGJlIGEgdmFsaWQgcmVmbmFtZSBpbiBHaXQgYW5kIHRoZXJlZm9yZQorbWF5IGNvbnRhaW4gZm9yd2FyZCBzbGFzaGVzLiAgQXMgYExGYCBpcyBub3QgdmFsaWQgaW4gYSBHaXQgcmVmbmFtZSwKK25vIHF1b3Rpbmcgb3IgZXNjYXBpbmcgc3ludGF4IGlzIHN1cHBvcnRlZCBoZXJlLgorCitUaGUgYGZyb21gIGNvbW1hbmQgaXMgdGhlIHNhbWUgYXMgaW4gdGhlIGBjb21taXRgIGNvbW1hbmQ7IHNlZQorYWJvdmUgZm9yIGRldGFpbHMuCisKK1RoZSBgdGFnZ2VyYCBjb21tYW5kIHVzZXMgdGhlIHNhbWUgZm9ybWF0IGFzIGBjb21taXR0ZXJgIHdpdGhpbgorYGNvbW1pdGA7IGFnYWluIHNlZSBhYm92ZSBmb3IgZGV0YWlscy4KKworVGhlIGBkYXRhYCBjb21tYW5kIGZvbGxvd2luZyBgdGFnZ2VyYCBtdXN0IHN1cHBseSB0aGUgYW5ub3RhdGVkIHRhZworbWVzc2FnZSAoc2VlIGJlbG93IGZvciBgZGF0YWAgY29tbWFuZCBzeW50YXgpLiAgVG8gaW1wb3J0IGFuIGVtcHR5Cit0YWcgbWVzc2FnZSB1c2UgYSAwIGxlbmd0aCBkYXRhLiAgVGFnIG1lc3NhZ2VzIGFyZSBmcmVlLWZvcm0gYW5kIGFyZQorbm90IGludGVycHJldGVkIGJ5IEdpdC4gIEN1cnJlbnRseSB0aGV5IG11c3QgYmUgZW5jb2RlZCBpbiBVVEYtOCwKK2FzIGZhc3QtaW1wb3J0IGRvZXMgbm90IHBlcm1pdCBvdGhlciBlbmNvZGluZ3MgdG8gYmUgc3BlY2lmaWVkLgorCitTaWduaW5nIGFubm90YXRlZCB0YWdzIGR1cmluZyBpbXBvcnQgZnJvbSB3aXRoaW4gZmFzdC1pbXBvcnQgaXMgbm90CitzdXBwb3J0ZWQuICBUcnlpbmcgdG8gaW5jbHVkZSB5b3VyIG93biBQR1AvR1BHIHNpZ25hdHVyZSBpcyBub3QKK3JlY29tbWVuZGVkLCBhcyB0aGUgZnJvbnRlbmQgZG9lcyBub3QgKGVhc2lseSkgaGF2ZSBhY2Nlc3MgdG8gdGhlCitjb21wbGV0ZSBzZXQgb2YgYnl0ZXMgd2hpY2ggbm9ybWFsbHkgZ29lcyBpbnRvIHN1Y2ggYSBzaWduYXR1cmUuCitJZiBzaWduaW5nIGlzIHJlcXVpcmVkLCBjcmVhdGUgbGlnaHR3ZWlnaHQgdGFncyBmcm9tIHdpdGhpbiBmYXN0LWltcG9ydCB3aXRoCitgcmVzZXRgLCB0aGVuIGNyZWF0ZSB0aGUgYW5ub3RhdGVkIHZlcnNpb25zIG9mIHRob3NlIHRhZ3Mgb2ZmbGluZQord2l0aCB0aGUgc3RhbmRhcmQgJ2dpdCB0YWcnIHByb2Nlc3MuCisKK2ByZXNldGAKK35+fn5+fn4KK0NyZWF0ZXMgKG9yIHJlY3JlYXRlcykgdGhlIG5hbWVkIGJyYW5jaCwgb3B0aW9uYWxseSBzdGFydGluZyBmcm9tCithIHNwZWNpZmljIHJldmlzaW9uLiAgVGhlIHJlc2V0IGNvbW1hbmQgYWxsb3dzIGEgZnJvbnRlbmQgdG8gaXNzdWUKK2EgbmV3IGBmcm9tYCBjb21tYW5kIGZvciBhbiBleGlzdGluZyBicmFuY2gsIG9yIHRvIGNyZWF0ZSBhIG5ldworYnJhbmNoIGZyb20gYW4gZXhpc3RpbmcgY29tbWl0IHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgY29tbWl0LgorCisuLi4uCisJJ3Jlc2V0JyBTUCA8cmVmPiBMRgorCSgnZnJvbScgU1AgPGNvbW1pdC1pc2g+IExGKT8KKwlMRj8KKy4uLi4KKworRm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgYDxyZWY+YCBhbmQgYDxjb21taXQtaXNoPmAgc2VlIGFib3ZlCit1bmRlciBgY29tbWl0YCBhbmQgYGZyb21gLgorCitUaGUgYExGYCBhZnRlciB0aGUgY29tbWFuZCBpcyBvcHRpb25hbCAoaXQgdXNlZCB0byBiZSByZXF1aXJlZCkuCisKK1RoZSBgcmVzZXRgIGNvbW1hbmQgY2FuIGFsc28gYmUgdXNlZCB0byBjcmVhdGUgbGlnaHR3ZWlnaHQKKyhub24tYW5ub3RhdGVkKSB0YWdzLiAgRm9yIGV4YW1wbGU6CisKKz09PT0KKwlyZXNldCByZWZzL3RhZ3MvOTM4CisJZnJvbSA6OTM4Cis9PT09CisKK3dvdWxkIGNyZWF0ZSB0aGUgbGlnaHR3ZWlnaHQgdGFnIGByZWZzL3RhZ3MvOTM4YCByZWZlcnJpbmcgdG8KK3doYXRldmVyIGNvbW1pdCBtYXJrIGA6OTM4YCByZWZlcmVuY2VzLgorCitgYmxvYmAKK35+fn5+fgorUmVxdWVzdHMgd3JpdGluZyBvbmUgZmlsZSByZXZpc2lvbiB0byB0aGUgcGFja2ZpbGUuICBUaGUgcmV2aXNpb24KK2lzIG5vdCBjb25uZWN0ZWQgdG8gYW55IGNvbW1pdDsgdGhpcyBjb25uZWN0aW9uIG11c3QgYmUgZm9ybWVkIGluCithIHN1YnNlcXVlbnQgYGNvbW1pdGAgY29tbWFuZCBieSByZWZlcmVuY2luZyB0aGUgYmxvYiB0aHJvdWdoIGFuCithc3NpZ25lZCBtYXJrLgorCisuLi4uCisJJ2Jsb2InIExGCisJbWFyaz8KKwlvcmlnaW5hbC1vaWQ/CisJZGF0YQorLi4uLgorCitUaGUgbWFyayBjb21tYW5kIGlzIG9wdGlvbmFsIGhlcmUgYXMgc29tZSBmcm9udGVuZHMgaGF2ZSBjaG9zZW4KK3RvIGdlbmVyYXRlIHRoZSBHaXQgU0hBLTEgZm9yIHRoZSBibG9iIG9uIHRoZWlyIG93biwgYW5kIGZlZWQgdGhhdAorZGlyZWN0bHkgdG8gYGNvbW1pdGAuICBUaGlzIGlzIHR5cGljYWxseSBtb3JlIHdvcmsgdGhhbiBpdCdzIHdvcnRoCitob3dldmVyLCBhcyBtYXJrcyBhcmUgaW5leHBlbnNpdmUgdG8gc3RvcmUgYW5kIGVhc3kgdG8gdXNlLgorCitgZGF0YWAKK35+fn5+fgorU3VwcGxpZXMgcmF3IGRhdGEgKGZvciB1c2UgYXMgYmxvYi9maWxlIGNvbnRlbnQsIGNvbW1pdCBtZXNzYWdlcywgb3IKK2Fubm90YXRlZCB0YWcgbWVzc2FnZXMpIHRvIGZhc3QtaW1wb3J0LiAgRGF0YSBjYW4gYmUgc3VwcGxpZWQgdXNpbmcgYW4gZXhhY3QKK2J5dGUgY291bnQgb3IgZGVsaW1pdGVkIHdpdGggYSB0ZXJtaW5hdGluZyBsaW5lLiAgUmVhbCBmcm9udGVuZHMKK2ludGVuZGVkIGZvciBwcm9kdWN0aW9uLXF1YWxpdHkgY29udmVyc2lvbnMgc2hvdWxkIGFsd2F5cyB1c2UgdGhlCitleGFjdCBieXRlIGNvdW50IGZvcm1hdCwgYXMgaXQgaXMgbW9yZSByb2J1c3QgYW5kIHBlcmZvcm1zIGJldHRlci4KK1RoZSBkZWxpbWl0ZWQgZm9ybWF0IGlzIGludGVuZGVkIHByaW1hcmlseSBmb3IgdGVzdGluZyBmYXN0LWltcG9ydC4KKworQ29tbWVudCBsaW5lcyBhcHBlYXJpbmcgd2l0aGluIHRoZSBgPHJhdz5gIHBhcnQgb2YgYGRhdGFgIGNvbW1hbmRzCithcmUgYWx3YXlzIHRha2VuIHRvIGJlIHBhcnQgb2YgdGhlIGJvZHkgb2YgdGhlIGRhdGEgYW5kIGFyZSB0aGVyZWZvcmUKK25ldmVyIGlnbm9yZWQgYnkgZmFzdC1pbXBvcnQuICBUaGlzIG1ha2VzIGl0IHNhZmUgdG8gaW1wb3J0IGFueQorZmlsZS9tZXNzYWdlIGNvbnRlbnQgd2hvc2UgbGluZXMgbWlnaHQgc3RhcnQgd2l0aCBgI2AuCisKK0V4YWN0IGJ5dGUgY291bnQgZm9ybWF0OjoKKwlUaGUgZnJvbnRlbmQgbXVzdCBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YS4KKysKKy4uLi4KKwknZGF0YScgU1AgPGNvdW50PiBMRgorCTxyYXc+IExGPworLi4uLgorKword2hlcmUgYDxjb3VudD5gIGlzIHRoZSBleGFjdCBudW1iZXIgb2YgYnl0ZXMgYXBwZWFyaW5nIHdpdGhpbgorYDxyYXc+YC4gIFRoZSB2YWx1ZSBvZiBgPGNvdW50PmAgaXMgZXhwcmVzc2VkIGFzIGFuIEFTQ0lJIGRlY2ltYWwKK2ludGVnZXIuICBUaGUgYExGYCBvbiBlaXRoZXIgc2lkZSBvZiBgPHJhdz5gIGlzIG5vdAoraW5jbHVkZWQgaW4gYDxjb3VudD5gIGFuZCB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgaW1wb3J0ZWQgZGF0YS4KKysKK1RoZSBgTEZgIGFmdGVyIGA8cmF3PmAgaXMgb3B0aW9uYWwgKGl0IHVzZWQgdG8gYmUgcmVxdWlyZWQpIGJ1dAorcmVjb21tZW5kZWQuICBBbHdheXMgaW5jbHVkaW5nIGl0IG1ha2VzIGRlYnVnZ2luZyBhIGZhc3QtaW1wb3J0CitzdHJlYW0gZWFzaWVyIGFzIHRoZSBuZXh0IGNvbW1hbmQgYWx3YXlzIHN0YXJ0cyBpbiBjb2x1bW4gMAorb2YgdGhlIG5leHQgbGluZSwgZXZlbiBpZiBgPHJhdz5gIGRpZCBub3QgZW5kIHdpdGggYW4gYExGYC4KKworRGVsaW1pdGVkIGZvcm1hdDo6CisJQSBkZWxpbWl0ZXIgc3RyaW5nIGlzIHVzZWQgdG8gbWFyayB0aGUgZW5kIG9mIHRoZSBkYXRhLgorCWZhc3QtaW1wb3J0IHdpbGwgY29tcHV0ZSB0aGUgbGVuZ3RoIGJ5IHNlYXJjaGluZyBmb3IgdGhlIGRlbGltaXRlci4KKwlUaGlzIGZvcm1hdCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciB0ZXN0aW5nIGFuZCBpcyBub3QKKwlyZWNvbW1lbmRlZCBmb3IgcmVhbCBkYXRhLgorKworLi4uLgorCSdkYXRhJyBTUCAnPDwnIDxkZWxpbT4gTEYKKwk8cmF3PiBMRgorCTxkZWxpbT4gTEYKKwlMRj8KKy4uLi4KKysKK3doZXJlIGA8ZGVsaW0+YCBpcyB0aGUgY2hvc2VuIGRlbGltaXRlciBzdHJpbmcuICBUaGUgc3RyaW5nIGA8ZGVsaW0+YAorbXVzdCBub3QgYXBwZWFyIG9uIGEgbGluZSBieSBpdHNlbGYgd2l0aGluIGA8cmF3PmAsIGFzIG90aGVyd2lzZQorZmFzdC1pbXBvcnQgd2lsbCB0aGluayB0aGUgZGF0YSBlbmRzIGVhcmxpZXIgdGhhbiBpdCByZWFsbHkgZG9lcy4gIFRoZSBgTEZgCitpbW1lZGlhdGVseSB0cmFpbGluZyBgPHJhdz5gIGlzIHBhcnQgb2YgYDxyYXc+YC4gIFRoaXMgaXMgb25lIG9mCit0aGUgbGltaXRhdGlvbnMgb2YgdGhlIGRlbGltaXRlZCBmb3JtYXQsIGl0IGlzIGltcG9zc2libGUgdG8gc3VwcGx5CithIGRhdGEgY2h1bmsgd2hpY2ggZG9lcyBub3QgaGF2ZSBhbiBMRiBhcyBpdHMgbGFzdCBieXRlLgorKworVGhlIGBMRmAgYWZ0ZXIgYDxkZWxpbT4gTEZgIGlzIG9wdGlvbmFsIChpdCB1c2VkIHRvIGJlIHJlcXVpcmVkKS4KKworYGFsaWFzYAorfn5+fn5+fgorUmVjb3JkIHRoYXQgYSBtYXJrIHJlZmVycyB0byBhIGdpdmVuIG9iamVjdCB3aXRob3V0IGZpcnN0IGNyZWF0aW5nIGFueQorbmV3IG9iamVjdC4KKworLi4uLgorCSdhbGlhcycgTEYKKwltYXJrCisJJ3RvJyBTUCA8Y29tbWl0LWlzaD4gTEYKKwlMRj8KKy4uLi4KKworRm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgYDxjb21taXQtaXNoPmAgc2VlIGFib3ZlIHVuZGVyIGBmcm9tYC4KKworCitgY2hlY2twb2ludGAKK35+fn5+fn5+fn5+fgorRm9yY2VzIGZhc3QtaW1wb3J0IHRvIGNsb3NlIHRoZSBjdXJyZW50IHBhY2tmaWxlLCBzdGFydCBhIG5ldyBvbmUsIGFuZCB0bworc2F2ZSBvdXQgYWxsIGN1cnJlbnQgYnJhbmNoIHJlZnMsIHRhZ3MgYW5kIG1hcmtzLgorCisuLi4uCisJJ2NoZWNrcG9pbnQnIExGCisJTEY/CisuLi4uCisKK05vdGUgdGhhdCBmYXN0LWltcG9ydCBhdXRvbWF0aWNhbGx5IHN3aXRjaGVzIHBhY2tmaWxlcyB3aGVuIHRoZSBjdXJyZW50CitwYWNrZmlsZSByZWFjaGVzIC0tbWF4LXBhY2stc2l6ZSwgb3IgNCBHaUIsIHdoaWNoZXZlciBsaW1pdCBpcworc21hbGxlci4gIER1cmluZyBhbiBhdXRvbWF0aWMgcGFja2ZpbGUgc3dpdGNoIGZhc3QtaW1wb3J0IGRvZXMgbm90IHVwZGF0ZQordGhlIGJyYW5jaCByZWZzLCB0YWdzIG9yIG1hcmtzLgorCitBcyBhIGBjaGVja3BvaW50YCBjYW4gcmVxdWlyZSBhIHNpZ25pZmljYW50IGFtb3VudCBvZiBDUFUgdGltZSBhbmQKK2Rpc2sgSU8gKHRvIGNvbXB1dGUgdGhlIG92ZXJhbGwgcGFjayBTSEEtMSBjaGVja3N1bSwgZ2VuZXJhdGUgdGhlCitjb3JyZXNwb25kaW5nIGluZGV4IGZpbGUsIGFuZCB1cGRhdGUgdGhlIHJlZnMpIGl0IGNhbiBlYXNpbHkgdGFrZQorc2V2ZXJhbCBtaW51dGVzIGZvciBhIHNpbmdsZSBgY2hlY2twb2ludGAgY29tbWFuZCB0byBjb21wbGV0ZS4KKworRnJvbnRlbmRzIG1heSBjaG9vc2UgdG8gaXNzdWUgY2hlY2twb2ludHMgZHVyaW5nIGV4dHJlbWVseSBsYXJnZQorYW5kIGxvbmcgcnVubmluZyBpbXBvcnRzLCBvciB3aGVuIHRoZXkgbmVlZCB0byBhbGxvdyBhbm90aGVyIEdpdAorcHJvY2VzcyBhY2Nlc3MgdG8gYSBicmFuY2guICBIb3dldmVyIGdpdmVuIHRoYXQgYSAzMCBHaUIgU3VidmVyc2lvbgorcmVwb3NpdG9yeSBjYW4gYmUgbG9hZGVkIGludG8gR2l0IHRocm91Z2ggZmFzdC1pbXBvcnQgaW4gYWJvdXQgMyBob3VycywKK2V4cGxpY2l0IGNoZWNrcG9pbnRpbmcgbWF5IG5vdCBiZSBuZWNlc3NhcnkuCisKK1RoZSBgTEZgIGFmdGVyIHRoZSBjb21tYW5kIGlzIG9wdGlvbmFsIChpdCB1c2VkIHRvIGJlIHJlcXVpcmVkKS4KKworYHByb2dyZXNzYAorfn5+fn5+fn5+fgorQ2F1c2VzIGZhc3QtaW1wb3J0IHRvIHByaW50IHRoZSBlbnRpcmUgYHByb2dyZXNzYCBsaW5lIHVubW9kaWZpZWQgdG8KK2l0cyBzdGFuZGFyZCBvdXRwdXQgY2hhbm5lbCAoZmlsZSBkZXNjcmlwdG9yIDEpIHdoZW4gdGhlIGNvbW1hbmQgaXMKK3Byb2Nlc3NlZCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0uICBUaGUgY29tbWFuZCBvdGhlcndpc2UgaGFzIG5vIGltcGFjdAorb24gdGhlIGN1cnJlbnQgaW1wb3J0LCBvciBvbiBhbnkgb2YgZmFzdC1pbXBvcnQncyBpbnRlcm5hbCBzdGF0ZS4KKworLi4uLgorCSdwcm9ncmVzcycgU1AgPGFueT4gTEYKKwlMRj8KKy4uLi4KKworVGhlIGA8YW55PmAgcGFydCBvZiB0aGUgY29tbWFuZCBtYXkgY29udGFpbiBhbnkgc2VxdWVuY2Ugb2YgYnl0ZXMKK3RoYXQgZG9lcyBub3QgY29udGFpbiBgTEZgLiAgVGhlIGBMRmAgYWZ0ZXIgdGhlIGNvbW1hbmQgaXMgb3B0aW9uYWwuCitDYWxsZXJzIG1heSB3aXNoIHRvIHByb2Nlc3MgdGhlIG91dHB1dCB0aHJvdWdoIGEgdG9vbCBzdWNoIGFzIHNlZCB0bworcmVtb3ZlIHRoZSBsZWFkaW5nIHBhcnQgb2YgdGhlIGxpbmUsIGZvciBleGFtcGxlOgorCis9PT09CisJZnJvbnRlbmQgfCBnaXQgZmFzdC1pbXBvcnQgfCBzZWQgJ3MvXnByb2dyZXNzIC8vJworPT09PQorCitQbGFjaW5nIGEgYHByb2dyZXNzYCBjb21tYW5kIGltbWVkaWF0ZWx5IGFmdGVyIGEgYGNoZWNrcG9pbnRgIHdpbGwKK2luZm9ybSB0aGUgcmVhZGVyIHdoZW4gdGhlIGBjaGVja3BvaW50YCBoYXMgYmVlbiBjb21wbGV0ZWQgYW5kIGl0CitjYW4gc2FmZWx5IGFjY2VzcyB0aGUgcmVmcyB0aGF0IGZhc3QtaW1wb3J0IHVwZGF0ZWQuCisKK2BnZXQtbWFya2AKK35+fn5+fn5+fn4KK0NhdXNlcyBmYXN0LWltcG9ydCB0byBwcmludCB0aGUgU0hBLTEgY29ycmVzcG9uZGluZyB0byBhIG1hcmsgdG8KK3N0ZG91dCBvciB0byB0aGUgZmlsZSBkZXNjcmlwdG9yIHByZXZpb3VzbHkgYXJyYW5nZWQgd2l0aCB0aGUKK2AtLWNhdC1ibG9iLWZkYCBhcmd1bWVudC4gVGhlIGNvbW1hbmQgb3RoZXJ3aXNlIGhhcyBubyBpbXBhY3Qgb24gdGhlCitjdXJyZW50IGltcG9ydDsgaXRzIHB1cnBvc2UgaXMgdG8gcmV0cmlldmUgU0hBLTFzIHRoYXQgbGF0ZXIgY29tbWl0cworbWlnaHQgd2FudCB0byByZWZlciB0byBpbiB0aGVpciBjb21taXQgbWVzc2FnZXMuCisKKy4uLi4KKwknZ2V0LW1hcmsnIFNQICc6JyA8aWRudW0+IExGCisuLi4uCisKK1NlZSBgYFJlc3BvbnNlcyBUbyBDb21tYW5kcycnIGJlbG93IGZvciBkZXRhaWxzIGFib3V0IGhvdyB0byByZWFkCit0aGlzIG91dHB1dCBzYWZlbHkuCisKK2BjYXQtYmxvYmAKK35+fn5+fn5+fn4KK0NhdXNlcyBmYXN0LWltcG9ydCB0byBwcmludCBhIGJsb2IgdG8gYSBmaWxlIGRlc2NyaXB0b3IgcHJldmlvdXNseQorYXJyYW5nZWQgd2l0aCB0aGUgYC0tY2F0LWJsb2ItZmRgIGFyZ3VtZW50LiAgVGhlIGNvbW1hbmQgb3RoZXJ3aXNlCitoYXMgbm8gaW1wYWN0IG9uIHRoZSBjdXJyZW50IGltcG9ydDsgaXRzIG1haW4gcHVycG9zZSBpcyB0bworcmV0cmlldmUgYmxvYnMgdGhhdCBtYXkgYmUgaW4gZmFzdC1pbXBvcnQncyBtZW1vcnkgYnV0IG5vdAorYWNjZXNzaWJsZSBmcm9tIHRoZSB0YXJnZXQgcmVwb3NpdG9yeS4KKworLi4uLgorCSdjYXQtYmxvYicgU1AgPGRhdGFyZWY+IExGCisuLi4uCisKK1RoZSBgPGRhdGFyZWY+YCBjYW4gYmUgZWl0aGVyIGEgbWFyayByZWZlcmVuY2UgKGA6PGlkbnVtPmApCitzZXQgcHJldmlvdXNseSBvciBhIGZ1bGwgNDAtYnl0ZSBTSEEtMSBvZiBhIEdpdCBibG9iLCBwcmVleGlzdGluZyBvcgorcmVhZHkgdG8gYmUgd3JpdHRlbi4KKworT3V0cHV0IHVzZXMgdGhlIHNhbWUgZm9ybWF0IGFzIGBnaXQgY2F0LWZpbGUgLS1iYXRjaGA6CisKKz09PT0KKwk8c2hhMT4gU1AgJ2Jsb2InIFNQIDxzaXplPiBMRgorCTxjb250ZW50cz4gTEYKKz09PT0KKworVGhpcyBjb21tYW5kIGNhbiBiZSB1c2VkIHdoZXJlIGEgYGZpbGVtb2RpZnlgIGRpcmVjdGl2ZSBjYW4gYXBwZWFyLAorYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBpbiB0aGUgbWlkZGxlIG9mIGEgY29tbWl0LiAgRm9yIGEgYGZpbGVtb2RpZnlgCit1c2luZyBhbiBpbmxpbmUgZGlyZWN0aXZlLCBpdCBjYW4gYWxzbyBhcHBlYXIgcmlnaHQgYmVmb3JlIHRoZSBgZGF0YWAKK2RpcmVjdGl2ZS4KKworU2VlIGBgUmVzcG9uc2VzIFRvIENvbW1hbmRzJycgYmVsb3cgZm9yIGRldGFpbHMgYWJvdXQgaG93IHRvIHJlYWQKK3RoaXMgb3V0cHV0IHNhZmVseS4KKworYGxzYAorfn5+fgorUHJpbnRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QgYXQgYSBwYXRoIHRvIGEgZmlsZSBkZXNjcmlwdG9yCitwcmV2aW91c2x5IGFycmFuZ2VkIHdpdGggdGhlIGAtLWNhdC1ibG9iLWZkYCBhcmd1bWVudC4gIFRoaXMgYWxsb3dzCitwcmludGluZyBhIGJsb2IgZnJvbSB0aGUgYWN0aXZlIGNvbW1pdCAod2l0aCBgY2F0LWJsb2JgKSBvciBjb3B5aW5nIGEKK2Jsb2Igb3IgdHJlZSBmcm9tIGEgcHJldmlvdXMgY29tbWl0IGZvciB1c2UgaW4gdGhlIGN1cnJlbnQgb25lICh3aXRoCitgZmlsZW1vZGlmeWApLgorCitUaGUgYGxzYCBjb21tYW5kIGNhbiBhbHNvIGJlIHVzZWQgd2hlcmUgYSBgZmlsZW1vZGlmeWAgZGlyZWN0aXZlIGNhbgorYXBwZWFyLCBhbGxvd2luZyBpdCB0byBiZSB1c2VkIGluIHRoZSBtaWRkbGUgb2YgYSBjb21taXQuCisKK1JlYWRpbmcgZnJvbSB0aGUgYWN0aXZlIGNvbW1pdDo6CisJVGhpcyBmb3JtIGNhbiBvbmx5IGJlIHVzZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGBjb21taXRgLgorCVRoZSBwYXRoIG5hbWVzIGEgZGlyZWN0b3J5IGVudHJ5IHdpdGhpbiBmYXN0LWltcG9ydCdzCisJYWN0aXZlIGNvbW1pdC4gIFRoZSBwYXRoIG11c3QgYmUgcXVvdGVkIGluIHRoaXMgY2FzZS4KKysKKy4uLi4KKwknbHMnIFNQIDxwYXRoPiBMRgorLi4uLgorCitSZWFkaW5nIGZyb20gYSBuYW1lZCB0cmVlOjoKKwlUaGUgYDxkYXRhcmVmPmAgY2FuIGJlIGEgbWFyayByZWZlcmVuY2UgKGA6PGlkbnVtPmApIG9yIHRoZQorCWZ1bGwgNDAtYnl0ZSBTSEEtMSBvZiBhIEdpdCB0YWcsIGNvbW1pdCwgb3IgdHJlZSBvYmplY3QsCisJcHJlZXhpc3Rpbmcgb3Igd2FpdGluZyB0byBiZSB3cml0dGVuLgorCVRoZSBwYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHRyZWUKKwluYW1lZCBieSBgPGRhdGFyZWY+YC4KKysKKy4uLi4KKwknbHMnIFNQIDxkYXRhcmVmPiBTUCA8cGF0aD4gTEYKKy4uLi4KKworU2VlIGBmaWxlbW9kaWZ5YCBhYm92ZSBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBgPHBhdGg+YC4KKworT3V0cHV0IHVzZXMgdGhlIHNhbWUgZm9ybWF0IGFzIGBnaXQgbHMtdHJlZSA8dHJlZT4gLS0gPHBhdGg+YDoKKworPT09PQorCTxtb2RlPiBTUCAoJ2Jsb2InIHwgJ3RyZWUnIHwgJ2NvbW1pdCcpIFNQIDxkYXRhcmVmPiBIVCA8cGF0aD4gTEYKKz09PT0KKworVGhlIDxkYXRhcmVmPiByZXByZXNlbnRzIHRoZSBibG9iLCB0cmVlLCBvciBjb21taXQgb2JqZWN0IGF0IDxwYXRoPgorYW5kIGNhbiBiZSB1c2VkIGluIGxhdGVyICdnZXQtbWFyaycsICdjYXQtYmxvYicsICdmaWxlbW9kaWZ5Jywgb3IKKydscycgY29tbWFuZHMuCisKK0lmIHRoZXJlIGlzIG5vIGZpbGUgb3Igc3VidHJlZSBhdCB0aGF0IHBhdGgsICdnaXQgZmFzdC1pbXBvcnQnIHdpbGwKK2luc3RlYWQgcmVwb3J0CisKKz09PT0KKwltaXNzaW5nIFNQIDxwYXRoPiBMRgorPT09PQorCitTZWUgYGBSZXNwb25zZXMgVG8gQ29tbWFuZHMnJyBiZWxvdyBmb3IgZGV0YWlscyBhYm91dCBob3cgdG8gcmVhZAordGhpcyBvdXRwdXQgc2FmZWx5LgorCitgZmVhdHVyZWAKK35+fn5+fn5+fgorUmVxdWlyZSB0aGF0IGZhc3QtaW1wb3J0IHN1cHBvcnRzIHRoZSBzcGVjaWZpZWQgZmVhdHVyZSwgb3IgYWJvcnQgaWYKK2l0IGRvZXMgbm90LgorCisuLi4uCisJJ2ZlYXR1cmUnIFNQIDxmZWF0dXJlPiAoJz0nIDxhcmd1bWVudD4pPyBMRgorLi4uLgorCitUaGUgPGZlYXR1cmU+IHBhcnQgb2YgdGhlIGNvbW1hbmQgbWF5IGJlIGFueSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworZGF0ZS1mb3JtYXQ6OgorZXhwb3J0LW1hcmtzOjoKK3JlbGF0aXZlLW1hcmtzOjoKK25vLXJlbGF0aXZlLW1hcmtzOjoKK2ZvcmNlOjoKKwlBY3QgYXMgdGhvdWdoIHRoZSBjb3JyZXNwb25kaW5nIGNvbW1hbmQtbGluZSBvcHRpb24gd2l0aAorCWEgbGVhZGluZyBgLS1gIHdhcyBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZQorCShzZWUgT1BUSU9OUywgYWJvdmUpLgorCitpbXBvcnQtbWFya3M6OgoraW1wb3J0LW1hcmtzLWlmLWV4aXN0czo6CisJTGlrZSAtLWltcG9ydC1tYXJrcyBleGNlcHQgaW4gdHdvIHJlc3BlY3RzOiBmaXJzdCwgb25seSBvbmUKKwkiZmVhdHVyZSBpbXBvcnQtbWFya3MiIG9yICJmZWF0dXJlIGltcG9ydC1tYXJrcy1pZi1leGlzdHMiCisJY29tbWFuZCBpcyBhbGxvd2VkIHBlciBzdHJlYW07IHNlY29uZCwgYW4gLS1pbXBvcnQtbWFya3M9CisJb3IgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIGNvbW1hbmQtbGluZSBvcHRpb24gb3ZlcnJpZGVzCisJYW55IG9mIHRoZXNlICJmZWF0dXJlIiBjb21tYW5kcyBpbiB0aGUgc3RyZWFtOyB0aGlyZCwKKwkiZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzIiBsaWtlIGEgY29ycmVzcG9uZGluZworCWNvbW1hbmQtbGluZSBvcHRpb24gc2lsZW50bHkgc2tpcHMgYSBub25leGlzdGVudCBmaWxlLgorCitnZXQtbWFyazo6CitjYXQtYmxvYjo6Citsczo6CisJUmVxdWlyZSB0aGF0IHRoZSBiYWNrZW5kIHN1cHBvcnQgdGhlICdnZXQtbWFyaycsICdjYXQtYmxvYicsCisJb3IgJ2xzJyBjb21tYW5kIHJlc3BlY3RpdmVseS4KKwlWZXJzaW9ucyBvZiBmYXN0LWltcG9ydCBub3Qgc3VwcG9ydGluZyB0aGUgc3BlY2lmaWVkIGNvbW1hbmQKKwl3aWxsIGV4aXQgd2l0aCBhIG1lc3NhZ2UgaW5kaWNhdGluZyBzby4KKwlUaGlzIGxldHMgdGhlIGltcG9ydCBlcnJvciBvdXQgZWFybHkgd2l0aCBhIGNsZWFyIG1lc3NhZ2UsCisJcmF0aGVyIHRoYW4gd2FzdGluZyB0aW1lIG9uIHRoZSBlYXJseSBwYXJ0IG9mIGFuIGltcG9ydAorCWJlZm9yZSB0aGUgdW5zdXBwb3J0ZWQgY29tbWFuZCBpcyBkZXRlY3RlZC4KKworbm90ZXM6OgorCVJlcXVpcmUgdGhhdCB0aGUgYmFja2VuZCBzdXBwb3J0IHRoZSAnbm90ZW1vZGlmeScgKE4pCisJc3ViY29tbWFuZCB0byB0aGUgJ2NvbW1pdCcgY29tbWFuZC4KKwlWZXJzaW9ucyBvZiBmYXN0LWltcG9ydCBub3Qgc3VwcG9ydGluZyBub3RlcyB3aWxsIGV4aXQKKwl3aXRoIGEgbWVzc2FnZSBpbmRpY2F0aW5nIHNvLgorCitkb25lOjoKKwlFcnJvciBvdXQgaWYgdGhlIHN0cmVhbSBlbmRzIHdpdGhvdXQgYSAnZG9uZScgY29tbWFuZC4KKwlXaXRob3V0IHRoaXMgZmVhdHVyZSwgZXJyb3JzIGNhdXNpbmcgdGhlIGZyb250ZW5kIHRvIGVuZAorCWFicnVwdGx5IGF0IGEgY29udmVuaWVudCBwb2ludCBpbiB0aGUgc3RyZWFtIGNhbiBnbworCXVuZGV0ZWN0ZWQuICBUaGlzIG1heSBvY2N1ciwgZm9yIGV4YW1wbGUsIGlmIGFuIGltcG9ydAorCWZyb250IGVuZCBkaWVzIGluIG1pZC1vcGVyYXRpb24gd2l0aG91dCBlbWl0dGluZyBTSUdURVJNCisJb3IgU0lHS0lMTCBhdCBpdHMgc3Vib3JkaW5hdGUgZ2l0IGZhc3QtaW1wb3J0IGluc3RhbmNlLgorCitgb3B0aW9uYAorfn5+fn5+fn4KK1Byb2Nlc3NlcyB0aGUgc3BlY2lmaWVkIG9wdGlvbiBzbyB0aGF0IGdpdCBmYXN0LWltcG9ydCBiZWhhdmVzIGluIGEKK3dheSB0aGF0IHN1aXRzIHRoZSBmcm9udGVuZCdzIG5lZWRzLgorTm90ZSB0aGF0IG9wdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSBmcm9udGVuZCBhcmUgb3ZlcnJpZGRlbiBieSBhbnkKK29wdGlvbnMgdGhlIHVzZXIgbWF5IHNwZWNpZnkgdG8gZ2l0IGZhc3QtaW1wb3J0IGl0c2VsZi4KKworLi4uLgorICAgICdvcHRpb24nIFNQIDxvcHRpb24+IExGCisuLi4uCisKK1RoZSBgPG9wdGlvbj5gIHBhcnQgb2YgdGhlIGNvbW1hbmQgbWF5IGNvbnRhaW4gYW55IG9mIHRoZSBvcHRpb25zCitsaXN0ZWQgaW4gdGhlIE9QVElPTlMgc2VjdGlvbiB0aGF0IGRvIG5vdCBjaGFuZ2UgaW1wb3J0IHNlbWFudGljcywKK3dpdGhvdXQgdGhlIGxlYWRpbmcgYC0tYCBhbmQgaXMgdHJlYXRlZCBpbiB0aGUgc2FtZSB3YXkuCisKK09wdGlvbiBjb21tYW5kcyBtdXN0IGJlIHRoZSBmaXJzdCBjb21tYW5kcyBvbiB0aGUgaW5wdXQgKG5vdCBjb3VudGluZworZmVhdHVyZSBjb21tYW5kcyksIHRvIGdpdmUgYW4gb3B0aW9uIGNvbW1hbmQgYWZ0ZXIgYW55IG5vbi1vcHRpb24KK2NvbW1hbmQgaXMgYW4gZXJyb3IuCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZC1saW5lIG9wdGlvbnMgY2hhbmdlIGltcG9ydCBzZW1hbnRpY3MgYW5kIG1heSB0aGVyZWZvcmUKK25vdCBiZSBwYXNzZWQgYXMgb3B0aW9uOgorCisqIGRhdGUtZm9ybWF0CisqIGltcG9ydC1tYXJrcworKiBleHBvcnQtbWFya3MKKyogY2F0LWJsb2ItZmQKKyogZm9yY2UKKworYGRvbmVgCit+fn5+fn4KK0lmIHRoZSBgZG9uZWAgZmVhdHVyZSBpcyBub3QgaW4gdXNlLCB0cmVhdGVkIGFzIGlmIEVPRiB3YXMgcmVhZC4KK1RoaXMgY2FuIGJlIHVzZWQgdG8gdGVsbCBmYXN0LWltcG9ydCB0byBmaW5pc2ggZWFybHkuCisKK0lmIHRoZSBgLS1kb25lYCBjb21tYW5kLWxpbmUgb3B0aW9uIG9yIGBmZWF0dXJlIGRvbmVgIGNvbW1hbmQgaXMKK2luIHVzZSwgdGhlIGBkb25lYCBjb21tYW5kIGlzIG1hbmRhdG9yeSBhbmQgbWFya3MgdGhlIGVuZCBvZiB0aGUKK3N0cmVhbS4KKworUkVTUE9OU0VTIFRPIENPTU1BTkRTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05ldyBvYmplY3RzIHdyaXR0ZW4gYnkgZmFzdC1pbXBvcnQgYXJlIG5vdCBhdmFpbGFibGUgaW1tZWRpYXRlbHkuCitNb3N0IGZhc3QtaW1wb3J0IGNvbW1hbmRzIGhhdmUgbm8gdmlzaWJsZSBlZmZlY3QgdW50aWwgdGhlIG5leHQKK2NoZWNrcG9pbnQgKG9yIGNvbXBsZXRpb24pLiAgVGhlIGZyb250ZW5kIGNhbiBzZW5kIGNvbW1hbmRzIHRvCitmaWxsIGZhc3QtaW1wb3J0J3MgaW5wdXQgcGlwZSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IGhvdyBxdWlja2x5Cit0aGV5IHdpbGwgdGFrZSBlZmZlY3QsIHdoaWNoIGltcHJvdmVzIHBlcmZvcm1hbmNlIGJ5IHNpbXBsaWZ5aW5nCitzY2hlZHVsaW5nLgorCitGb3Igc29tZSBmcm9udGVuZHMsIHRob3VnaCwgaXQgaXMgdXNlZnVsIHRvIGJlIGFibGUgdG8gcmVhZCBiYWNrCitkYXRhIGZyb20gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeSBhcyBpdCBpcyBiZWluZyB1cGRhdGVkIChmb3IKK2V4YW1wbGUgd2hlbiB0aGUgc291cmNlIG1hdGVyaWFsIGRlc2NyaWJlcyBvYmplY3RzIGluIHRlcm1zIG9mCitwYXRjaGVzIHRvIGJlIGFwcGxpZWQgdG8gcHJldmlvdXNseSBpbXBvcnRlZCBvYmplY3RzKS4gIFRoaXMgY2FuCitiZSBhY2NvbXBsaXNoZWQgYnkgY29ubmVjdGluZyB0aGUgZnJvbnRlbmQgYW5kIGZhc3QtaW1wb3J0IHZpYQorYmlkaXJlY3Rpb25hbCBwaXBlczoKKworPT09PQorCW1rZmlmbyBmYXN0LWltcG9ydC1vdXRwdXQKKwlmcm9udGVuZCA8ZmFzdC1pbXBvcnQtb3V0cHV0IHwKKwlnaXQgZmFzdC1pbXBvcnQgPmZhc3QtaW1wb3J0LW91dHB1dAorPT09PQorCitBIGZyb250ZW5kIHNldCB1cCB0aGlzIHdheSBjYW4gdXNlIGBwcm9ncmVzc2AsIGBnZXQtbWFya2AsIGBsc2AsIGFuZAorYGNhdC1ibG9iYCBjb21tYW5kcyB0byByZWFkIGluZm9ybWF0aW9uIGZyb20gdGhlIGltcG9ydCBpbiBwcm9ncmVzcy4KKworVG8gYXZvaWQgZGVhZGxvY2ssIHN1Y2ggZnJvbnRlbmRzIG11c3QgY29tcGxldGVseSBjb25zdW1lIGFueQorcGVuZGluZyBvdXRwdXQgZnJvbSBgcHJvZ3Jlc3NgLCBgbHNgLCBgZ2V0LW1hcmtgLCBhbmQgYGNhdC1ibG9iYCBiZWZvcmUKK3BlcmZvcm1pbmcgd3JpdGVzIHRvIGZhc3QtaW1wb3J0IHRoYXQgbWlnaHQgYmxvY2suCisKK0NSQVNIIFJFUE9SVFMKKy0tLS0tLS0tLS0tLS0KK0lmIGZhc3QtaW1wb3J0IGlzIHN1cHBsaWVkIGludmFsaWQgaW5wdXQgaXQgd2lsbCB0ZXJtaW5hdGUgd2l0aCBhCitub24temVybyBleGl0IHN0YXR1cyBhbmQgY3JlYXRlIGEgY3Jhc2ggcmVwb3J0IGluIHRoZSB0b3AgbGV2ZWwgb2YKK3RoZSBHaXQgcmVwb3NpdG9yeSBpdCB3YXMgaW1wb3J0aW5nIGludG8uICBDcmFzaCByZXBvcnRzIGNvbnRhaW4KK2Egc25hcHNob3Qgb2YgdGhlIGludGVybmFsIGZhc3QtaW1wb3J0IHN0YXRlIGFzIHdlbGwgYXMgdGhlIG1vc3QKK3JlY2VudCBjb21tYW5kcyB0aGF0IGxlYWQgdXAgdG8gdGhlIGNyYXNoLgorCitBbGwgcmVjZW50IGNvbW1hbmRzIChpbmNsdWRpbmcgc3RyZWFtIGNvbW1lbnRzLCBmaWxlIGNoYW5nZXMgYW5kCitwcm9ncmVzcyBjb21tYW5kcykgYXJlIHNob3duIGluIHRoZSBjb21tYW5kIGhpc3Rvcnkgd2l0aGluIHRoZSBjcmFzaAorcmVwb3J0LCBidXQgcmF3IGZpbGUgZGF0YSBhbmQgY29tbWl0IG1lc3NhZ2VzIGFyZSBleGNsdWRlZCBmcm9tIHRoZQorY3Jhc2ggcmVwb3J0LiAgVGhpcyBleGNsdXNpb24gc2F2ZXMgc3BhY2Ugd2l0aGluIHRoZSByZXBvcnQgZmlsZQorYW5kIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBidWZmZXJpbmcgdGhhdCBmYXN0LWltcG9ydCBtdXN0IHBlcmZvcm0KK2R1cmluZyBleGVjdXRpb24uCisKK0FmdGVyIHdyaXRpbmcgYSBjcmFzaCByZXBvcnQgZmFzdC1pbXBvcnQgd2lsbCBjbG9zZSB0aGUgY3VycmVudAorcGFja2ZpbGUgYW5kIGV4cG9ydCB0aGUgbWFya3MgdGFibGUuICBUaGlzIGFsbG93cyB0aGUgZnJvbnRlbmQKK2RldmVsb3BlciB0byBpbnNwZWN0IHRoZSByZXBvc2l0b3J5IHN0YXRlIGFuZCByZXN1bWUgdGhlIGltcG9ydCBmcm9tCit0aGUgcG9pbnQgd2hlcmUgaXQgY3Jhc2hlZC4gIFRoZSBtb2RpZmllZCBicmFuY2hlcyBhbmQgdGFncyBhcmUgbm90Cit1cGRhdGVkIGR1cmluZyBhIGNyYXNoLCBhcyB0aGUgaW1wb3J0IGRpZCBub3QgY29tcGxldGUgc3VjY2Vzc2Z1bGx5LgorQnJhbmNoIGFuZCB0YWcgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBjcmFzaCByZXBvcnQgYW5kCittdXN0IGJlIGFwcGxpZWQgbWFudWFsbHkgaWYgdGhlIHVwZGF0ZSBpcyBuZWVkZWQuCisKK0FuIGV4YW1wbGUgY3Jhc2g6CisKKz09PT0KKwkkIGNhdCA+aW4gPDxFTkRfT0ZfSU5QVVQKKwkjIG15IHZlcnkgZmlyc3QgdGVzdCBjb21taXQKKwljb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKKwljb21taXR0ZXIgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlPiAxOTI4MyAtMDQwMAorCSMgd2hvIGlzIHRoYXQgZ3V5IGFueXdheT8KKwlkYXRhIDw8RU9GCisJdGhpcyBpcyBteSBjb21taXQKKwlFT0YKKwlNIDY0NCBpbmxpbmUgLmdpdGlnbm9yZQorCWRhdGEgPDxFT0YKKwkuZ2l0aWdub3JlCisJRU9GCisJTSA3NzcgaW5saW5lIGJvYgorCUVORF9PRl9JTlBVVAorCisJJCBnaXQgZmFzdC1pbXBvcnQgPGluCisJZmF0YWw6IENvcnJ1cHQgbW9kZTogTSA3NzcgaW5saW5lIGJvYgorCWZhc3QtaW1wb3J0OiBkdW1waW5nIGNyYXNoIHJlcG9ydCB0byAuZ2l0L2Zhc3RfaW1wb3J0X2NyYXNoXzg0MzQKKworCSQgY2F0IC5naXQvZmFzdF9pbXBvcnRfY3Jhc2hfODQzNAorCWZhc3QtaW1wb3J0IGNyYXNoIHJlcG9ydDoKKwkgICAgZmFzdC1pbXBvcnQgcHJvY2VzczogODQzNAorCSAgICBwYXJlbnQgcHJvY2VzcyAgICAgOiAxMzkxCisJICAgIGF0IFNhdCBTZXAgMSAwMDo1ODoxMiAyMDA3CisKKwlmYXRhbDogQ29ycnVwdCBtb2RlOiBNIDc3NyBpbmxpbmUgYm9iCisKKwlNb3N0IFJlY2VudCBDb21tYW5kcyBCZWZvcmUgQ3Jhc2gKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICMgbXkgdmVyeSBmaXJzdCB0ZXN0IGNvbW1pdAorCSAgY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCisJICBjb21taXR0ZXIgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlPiAxOTI4MyAtMDQwMAorCSAgIyB3aG8gaXMgdGhhdCBndXkgYW55d2F5PworCSAgZGF0YSA8PEVPRgorCSAgTSA2NDQgaW5saW5lIC5naXRpZ25vcmUKKwkgIGRhdGEgPDxFT0YKKwkqIE0gNzc3IGlubGluZSBib2IKKworCUFjdGl2ZSBCcmFuY2ggTFJVCisJLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgYWN0aXZlX2JyYW5jaGVzID0gMSBjdXIsIDUgbWF4CisKKwkgIHBvcyAgY2xvY2sgbmFtZQorCSAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJICAgMSkgICAgICAwIHJlZnMvaGVhZHMvbWFzdGVyCisKKwlJbmFjdGl2ZSBCcmFuY2hlcworCS0tLS0tLS0tLS0tLS0tLS0tCisJcmVmcy9oZWFkcy9tYXN0ZXI6CisJICBzdGF0dXMgICAgICA6IGFjdGl2ZSBsb2FkZWQgZGlydHkKKwkgIHRpcCBjb21taXQgIDogMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCSAgb2xkIHRyZWUgICAgOiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisJICBjdXIgdHJlZSAgICA6IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKwkgIGNvbW1pdCBjbG9jazogMAorCSAgbGFzdCBwYWNrICAgOgorCisKKwktLS0tLS0tLS0tLS0tLS0tLS0tCisJRU5EIE9GIENSQVNIIFJFUE9SVAorPT09PQorCitUSVBTIEFORCBUUklDS1MKKy0tLS0tLS0tLS0tLS0tLQorVGhlIGZvbGxvd2luZyB0aXBzIGFuZCB0cmlja3MgaGF2ZSBiZWVuIGNvbGxlY3RlZCBmcm9tIHZhcmlvdXMKK3VzZXJzIG9mIGZhc3QtaW1wb3J0LCBhbmQgYXJlIG9mZmVyZWQgaGVyZSBhcyBzdWdnZXN0aW9ucy4KKworVXNlIE9uZSBNYXJrIFBlciBDb21taXQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitXaGVuIGRvaW5nIGEgcmVwb3NpdG9yeSBjb252ZXJzaW9uLCB1c2UgYSB1bmlxdWUgbWFyayBwZXIgY29tbWl0CisoYG1hcmsgOjxuPmApIGFuZCBzdXBwbHkgdGhlIC0tZXhwb3J0LW1hcmtzIG9wdGlvbiBvbiB0aGUgY29tbWFuZAorbGluZS4gIGZhc3QtaW1wb3J0IHdpbGwgZHVtcCBhIGZpbGUgd2hpY2ggbGlzdHMgZXZlcnkgbWFyayBhbmQgdGhlIEdpdAorb2JqZWN0IFNIQS0xIHRoYXQgY29ycmVzcG9uZHMgdG8gaXQuICBJZiB0aGUgZnJvbnRlbmQgY2FuIHRpZQordGhlIG1hcmtzIGJhY2sgdG8gdGhlIHNvdXJjZSByZXBvc2l0b3J5LCBpdCBpcyBlYXN5IHRvIHZlcmlmeSB0aGUKK2FjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgdGhlIGltcG9ydCBieSBjb21wYXJpbmcgZWFjaCBHaXQKK2NvbW1pdCB0byB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgcmV2aXNpb24uCisKK0NvbWluZyBmcm9tIGEgc3lzdGVtIHN1Y2ggYXMgUGVyZm9yY2Ugb3IgU3VidmVyc2lvbiB0aGlzIHNob3VsZCBiZQorcXVpdGUgc2ltcGxlLCBhcyB0aGUgZmFzdC1pbXBvcnQgbWFyayBjYW4gYWxzbyBiZSB0aGUgUGVyZm9yY2UgY2hhbmdlc2V0CitudW1iZXIgb3IgdGhlIFN1YnZlcnNpb24gcmV2aXNpb24gbnVtYmVyLgorCitGcmVlbHkgU2tpcCBBcm91bmQgQnJhbmNoZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorRG9uJ3QgYm90aGVyIHRyeWluZyB0byBvcHRpbWl6ZSB0aGUgZnJvbnRlbmQgdG8gc3RpY2sgdG8gb25lIGJyYW5jaAorYXQgYSB0aW1lIGR1cmluZyBhbiBpbXBvcnQuICBBbHRob3VnaCBkb2luZyBzbyBtaWdodCBiZSBzbGlnaHRseQorZmFzdGVyIGZvciBmYXN0LWltcG9ydCwgaXQgdGVuZHMgdG8gaW5jcmVhc2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGZyb250ZW5kCitjb2RlIGNvbnNpZGVyYWJseS4KKworVGhlIGJyYW5jaCBMUlUgYnVpbHRpbiB0byBmYXN0LWltcG9ydCB0ZW5kcyB0byBiZWhhdmUgdmVyeSB3ZWxsLCBhbmQgdGhlCitjb3N0IG9mIGFjdGl2YXRpbmcgYW4gaW5hY3RpdmUgYnJhbmNoIGlzIHNvIGxvdyB0aGF0IGJvdW5jaW5nIGFyb3VuZAorYmV0d2VlbiBicmFuY2hlcyBoYXMgdmlydHVhbGx5IG5vIGltcGFjdCBvbiBpbXBvcnQgcGVyZm9ybWFuY2UuCisKK0hhbmRsaW5nIFJlbmFtZXMKK35+fn5+fn5+fn5+fn5+fn4KK1doZW4gaW1wb3J0aW5nIGEgcmVuYW1lZCBmaWxlIG9yIGRpcmVjdG9yeSwgc2ltcGx5IGRlbGV0ZSB0aGUgb2xkCituYW1lKHMpIGFuZCBtb2RpZnkgdGhlIG5ldyBuYW1lKHMpIGR1cmluZyB0aGUgY29ycmVzcG9uZGluZyBjb21taXQuCitHaXQgcGVyZm9ybXMgcmVuYW1lIGRldGVjdGlvbiBhZnRlci10aGUtZmFjdCwgcmF0aGVyIHRoYW4gZXhwbGljaXRseQorZHVyaW5nIGEgY29tbWl0LgorCitVc2UgVGFnIEZpeHVwIEJyYW5jaGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitTb21lIG90aGVyIFNDTSBzeXN0ZW1zIGxldCB0aGUgdXNlciBjcmVhdGUgYSB0YWcgZnJvbSBtdWx0aXBsZQorZmlsZXMgd2hpY2ggYXJlIG5vdCBmcm9tIHRoZSBzYW1lIGNvbW1pdC9jaGFuZ2VzZXQuICBPciB0byBjcmVhdGUKK3RhZ3Mgd2hpY2ggYXJlIGEgc3Vic2V0IG9mIHRoZSBmaWxlcyBhdmFpbGFibGUgaW4gdGhlIHJlcG9zaXRvcnkuCisKK0ltcG9ydGluZyB0aGVzZSB0YWdzIGFzLWlzIGluIEdpdCBpcyBpbXBvc3NpYmxlIHdpdGhvdXQgbWFraW5nIGF0CitsZWFzdCBvbmUgY29tbWl0IHdoaWNoIGBgZml4ZXMgdXAnJyB0aGUgZmlsZXMgdG8gbWF0Y2ggdGhlIGNvbnRlbnQKK29mIHRoZSB0YWcuICBVc2UgZmFzdC1pbXBvcnQncyBgcmVzZXRgIGNvbW1hbmQgdG8gcmVzZXQgYSBkdW1teSBicmFuY2gKK291dHNpZGUgb2YgeW91ciBub3JtYWwgYnJhbmNoIHNwYWNlIHRvIHRoZSBiYXNlIGNvbW1pdCBmb3IgdGhlIHRhZywKK3RoZW4gY29tbWl0IG9uZSBvciBtb3JlIGZpbGUgZml4dXAgY29tbWl0cywgYW5kIGZpbmFsbHkgdGFnIHRoZQorZHVtbXkgYnJhbmNoLgorCitGb3IgZXhhbXBsZSBzaW5jZSBhbGwgbm9ybWFsIGJyYW5jaGVzIGFyZSBzdG9yZWQgdW5kZXIgYHJlZnMvaGVhZHMvYAorbmFtZSB0aGUgdGFnIGZpeHVwIGJyYW5jaCBgVEFHX0ZJWFVQYC4gIFRoaXMgd2F5IGl0IGlzIGltcG9zc2libGUgZm9yCit0aGUgZml4dXAgYnJhbmNoIHVzZWQgYnkgdGhlIGltcG9ydGVyIHRvIGhhdmUgbmFtZXNwYWNlIGNvbmZsaWN0cword2l0aCByZWFsIGJyYW5jaGVzIGltcG9ydGVkIGZyb20gdGhlIHNvdXJjZSAodGhlIG5hbWUgYFRBR19GSVhVUGAKK2lzIG5vdCBgcmVmcy9oZWFkcy9UQUdfRklYVVBgKS4KKworV2hlbiBjb21taXR0aW5nIGZpeHVwcywgY29uc2lkZXIgdXNpbmcgYG1lcmdlYCB0byBjb25uZWN0IHRoZQorY29tbWl0KHMpIHdoaWNoIGFyZSBzdXBwbHlpbmcgZmlsZSByZXZpc2lvbnMgdG8gdGhlIGZpeHVwIGJyYW5jaC4KK0RvaW5nIHNvIHdpbGwgYWxsb3cgdG9vbHMgc3VjaCBhcyAnZ2l0IGJsYW1lJyB0byB0cmFjawordGhyb3VnaCB0aGUgcmVhbCBjb21taXQgaGlzdG9yeSBhbmQgcHJvcGVybHkgYW5ub3RhdGUgdGhlIHNvdXJjZQorZmlsZXMuCisKK0FmdGVyIGZhc3QtaW1wb3J0IHRlcm1pbmF0ZXMgdGhlIGZyb250ZW5kIHdpbGwgbmVlZCB0byBkbyBgcm0gLmdpdC9UQUdfRklYVVBgCit0byByZW1vdmUgdGhlIGR1bW15IGJyYW5jaC4KKworSW1wb3J0IE5vdywgUmVwYWNrIExhdGVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0FzIHNvb24gYXMgZmFzdC1pbXBvcnQgY29tcGxldGVzIHRoZSBHaXQgcmVwb3NpdG9yeSBpcyBjb21wbGV0ZWx5IHZhbGlkCithbmQgcmVhZHkgZm9yIHVzZS4gIFR5cGljYWxseSB0aGlzIHRha2VzIG9ubHkgYSB2ZXJ5IHNob3J0IHRpbWUsCitldmVuIGZvciBjb25zaWRlcmFibHkgbGFyZ2UgcHJvamVjdHMgKDEwMCwwMDArIGNvbW1pdHMpLgorCitIb3dldmVyIHJlcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpcyBuZWNlc3NhcnkgdG8gaW1wcm92ZSBkYXRhCitsb2NhbGl0eSBhbmQgYWNjZXNzIHBlcmZvcm1hbmNlLiAgSXQgY2FuIGFsc28gdGFrZSBob3VycyBvbiBleHRyZW1lbHkKK2xhcmdlIHByb2plY3RzIChlc3BlY2lhbGx5IGlmIC1mIGFuZCBhIGxhcmdlIC0td2luZG93IHBhcmFtZXRlciBpcwordXNlZCkuICBTaW5jZSByZXBhY2tpbmcgaXMgc2FmZSB0byBydW4gYWxvbmdzaWRlIHJlYWRlcnMgYW5kIHdyaXRlcnMsCitydW4gdGhlIHJlcGFjayBpbiB0aGUgYmFja2dyb3VuZCBhbmQgbGV0IGl0IGZpbmlzaCB3aGVuIGl0IGZpbmlzaGVzLgorVGhlcmUgaXMgbm8gcmVhc29uIHRvIHdhaXQgdG8gZXhwbG9yZSB5b3VyIG5ldyBHaXQgcHJvamVjdCEKKworSWYgeW91IGNob29zZSB0byB3YWl0IGZvciB0aGUgcmVwYWNrLCBkb24ndCB0cnkgdG8gcnVuIGJlbmNobWFya3MKK29yIHBlcmZvcm1hbmNlIHRlc3RzIHVudGlsIHJlcGFja2luZyBpcyBjb21wbGV0ZWQuICBmYXN0LWltcG9ydCBvdXRwdXRzCitzdWJvcHRpbWFsIHBhY2tmaWxlcyB0aGF0IGFyZSBzaW1wbHkgbmV2ZXIgc2VlbiBpbiByZWFsIHVzZQorc2l0dWF0aW9ucy4KKworUmVwYWNraW5nIEhpc3RvcmljYWwgRGF0YQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorSWYgeW91IGFyZSByZXBhY2tpbmcgdmVyeSBvbGQgaW1wb3J0ZWQgZGF0YSAoZS5nLiBvbGRlciB0aGFuIHRoZQorbGFzdCB5ZWFyKSwgY29uc2lkZXIgZXhwZW5kaW5nIHNvbWUgZXh0cmEgQ1BVIHRpbWUgYW5kIHN1cHBseWluZworLS13aW5kb3c9NTAgKG9yIGhpZ2hlcikgd2hlbiB5b3UgcnVuICdnaXQgcmVwYWNrJy4KK1RoaXMgd2lsbCB0YWtlIGxvbmdlciwgYnV0IHdpbGwgYWxzbyBwcm9kdWNlIGEgc21hbGxlciBwYWNrZmlsZS4KK1lvdSBvbmx5IG5lZWQgdG8gZXhwZW5kIHRoZSBlZmZvcnQgb25jZSwgYW5kIGV2ZXJ5b25lIHVzaW5nIHlvdXIKK3Byb2plY3Qgd2lsbCBiZW5lZml0IGZyb20gdGhlIHNtYWxsZXIgcmVwb3NpdG9yeS4KKworSW5jbHVkZSBTb21lIFByb2dyZXNzIE1lc3NhZ2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0V2ZXJ5IG9uY2UgaW4gYSB3aGlsZSBoYXZlIHlvdXIgZnJvbnRlbmQgZW1pdCBhIGBwcm9ncmVzc2AgbWVzc2FnZQordG8gZmFzdC1pbXBvcnQuICBUaGUgY29udGVudHMgb2YgdGhlIG1lc3NhZ2VzIGFyZSBlbnRpcmVseSBmcmVlLWZvcm0sCitzbyBvbmUgc3VnZ2VzdGlvbiB3b3VsZCBiZSB0byBvdXRwdXQgdGhlIGN1cnJlbnQgbW9udGggYW5kIHllYXIKK2VhY2ggdGltZSB0aGUgY3VycmVudCBjb21taXQgZGF0ZSBtb3ZlcyBpbnRvIHRoZSBuZXh0IG1vbnRoLgorWW91ciB1c2VycyB3aWxsIGZlZWwgYmV0dGVyIGtub3dpbmcgaG93IG11Y2ggb2YgdGhlIGRhdGEgc3RyZWFtCitoYXMgYmVlbiBwcm9jZXNzZWQuCisKKworUEFDS0ZJTEUgT1BUSU1JWkFUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1doZW4gcGFja2luZyBhIGJsb2IgZmFzdC1pbXBvcnQgYWx3YXlzIGF0dGVtcHRzIHRvIGRlbHRpZnkgYWdhaW5zdCB0aGUgbGFzdAorYmxvYiB3cml0dGVuLiAgVW5sZXNzIHNwZWNpZmljYWxseSBhcnJhbmdlZCBmb3IgYnkgdGhlIGZyb250ZW5kLAordGhpcyB3aWxsIHByb2JhYmx5IG5vdCBiZSBhIHByaW9yIHZlcnNpb24gb2YgdGhlIHNhbWUgZmlsZSwgc28gdGhlCitnZW5lcmF0ZWQgZGVsdGEgd2lsbCBub3QgYmUgdGhlIHNtYWxsZXN0IHBvc3NpYmxlLiAgVGhlIHJlc3VsdGluZworcGFja2ZpbGUgd2lsbCBiZSBjb21wcmVzc2VkLCBidXQgd2lsbCBub3QgYmUgb3B0aW1hbC4KKworRnJvbnRlbmRzIHdoaWNoIGhhdmUgZWZmaWNpZW50IGFjY2VzcyB0byBhbGwgcmV2aXNpb25zIG9mIGEKK3NpbmdsZSBmaWxlIChmb3IgZXhhbXBsZSByZWFkaW5nIGFuIFJDUy9DVlMgLHYgZmlsZSkgY2FuIGNob29zZQordG8gc3VwcGx5IGFsbCByZXZpc2lvbnMgb2YgdGhhdCBmaWxlIGFzIGEgc2VxdWVuY2Ugb2YgY29uc2VjdXRpdmUKK2BibG9iYCBjb21tYW5kcy4gIFRoaXMgYWxsb3dzIGZhc3QtaW1wb3J0IHRvIGRlbHRpZnkgdGhlIGRpZmZlcmVudCBmaWxlCityZXZpc2lvbnMgYWdhaW5zdCBlYWNoIG90aGVyLCBzYXZpbmcgc3BhY2UgaW4gdGhlIGZpbmFsIHBhY2tmaWxlLgorTWFya3MgY2FuIGJlIHVzZWQgdG8gbGF0ZXIgaWRlbnRpZnkgaW5kaXZpZHVhbCBmaWxlIHJldmlzaW9ucyBkdXJpbmcKK2Egc2VxdWVuY2Ugb2YgYGNvbW1pdGAgY29tbWFuZHMuCisKK1RoZSBwYWNrZmlsZShzKSBjcmVhdGVkIGJ5IGZhc3QtaW1wb3J0IGRvIG5vdCBlbmNvdXJhZ2UgZ29vZCBkaXNrIGFjY2VzcworcGF0dGVybnMuICBUaGlzIGlzIGNhdXNlZCBieSBmYXN0LWltcG9ydCB3cml0aW5nIHRoZSBkYXRhIGluIHRoZSBvcmRlcgoraXQgaXMgcmVjZWl2ZWQgb24gc3RhbmRhcmQgaW5wdXQsIHdoaWxlIEdpdCB0eXBpY2FsbHkgb3JnYW5pemVzCitkYXRhIHdpdGhpbiBwYWNrZmlsZXMgdG8gbWFrZSB0aGUgbW9zdCByZWNlbnQgKGN1cnJlbnQgdGlwKSBkYXRhCithcHBlYXIgYmVmb3JlIGhpc3RvcmljYWwgZGF0YS4gIEdpdCBhbHNvIGNsdXN0ZXJzIGNvbW1pdHMgdG9nZXRoZXIsCitzcGVlZGluZyB1cCByZXZpc2lvbiB0cmF2ZXJzYWwgdGhyb3VnaCBiZXR0ZXIgY2FjaGUgbG9jYWxpdHkuCisKK0ZvciB0aGlzIHJlYXNvbiBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHVzZXJzIHJlcGFjayB0aGUKK3JlcG9zaXRvcnkgd2l0aCBgZ2l0IHJlcGFjayAtYSAtZGAgYWZ0ZXIgZmFzdC1pbXBvcnQgY29tcGxldGVzLCBhbGxvd2luZworR2l0IHRvIHJlb3JnYW5pemUgdGhlIHBhY2tmaWxlcyBmb3IgZmFzdGVyIGRhdGEgYWNjZXNzLiAgSWYgYmxvYgorZGVsdGFzIGFyZSBzdWJvcHRpbWFsIChzZWUgYWJvdmUpIHRoZW4gYWxzbyBhZGRpbmcgdGhlIGAtZmAgb3B0aW9uCit0byBmb3JjZSByZWNvbXB1dGF0aW9uIG9mIGFsbCBkZWx0YXMgY2FuIHNpZ25pZmljYW50bHkgcmVkdWNlIHRoZQorZmluYWwgcGFja2ZpbGUgc2l6ZSAoMzAtNTAlIHNtYWxsZXIgY2FuIGJlIHF1aXRlIHR5cGljYWwpLgorCitJbnN0ZWFkIG9mIHJ1bm5pbmcgYGdpdCByZXBhY2tgIHlvdSBjYW4gYWxzbyBydW4gYGdpdCBnYworLS1hZ2dyZXNzaXZlYCwgd2hpY2ggd2lsbCBhbHNvIG9wdGltaXplIG90aGVyIHRoaW5ncyBhZnRlciBhbiBpbXBvcnQKKyhlLmcuIHBhY2sgbG9vc2UgcmVmcykuIEFzIG5vdGVkIGluIHRoZSAiQUdHUkVTU0lWRSIgc2VjdGlvbiBpbgorbGlua2dpdDpnaXQtZ2NbMV0gdGhlIGAtLWFnZ3Jlc3NpdmVgIG9wdGlvbiB3aWxsIGZpbmQgbmV3IGRlbHRhcyB3aXRoCit0aGUgYC1mYCBvcHRpb24gdG8gbGlua2dpdDpnaXQtcmVwYWNrWzFdLiBGb3IgdGhlIHJlYXNvbnMgZWxhYm9yYXRlZAorb24gYWJvdmUgdXNpbmcgYC0tYWdncmVzc2l2ZWAgYWZ0ZXIgYSBmYXN0LWltcG9ydCBpcyBvbmUgb2YgdGhlIGZldworY2FzZXMgd2hlcmUgaXQncyBrbm93biB0byBiZSB3b3J0aHdoaWxlLgorCitNRU1PUlkgVVRJTElaQVRJT04KKy0tLS0tLS0tLS0tLS0tLS0tLQorVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGZhY3RvcnMgd2hpY2ggYWZmZWN0IGhvdyBtdWNoIG1lbW9yeSBmYXN0LWltcG9ydAorcmVxdWlyZXMgdG8gcGVyZm9ybSBhbiBpbXBvcnQuICBMaWtlIGNyaXRpY2FsIHNlY3Rpb25zIG9mIGNvcmUKK0dpdCwgZmFzdC1pbXBvcnQgdXNlcyBpdHMgb3duIG1lbW9yeSBhbGxvY2F0b3JzIHRvIGFtb3J0aXplIGFueSBvdmVyaGVhZHMKK2Fzc29jaWF0ZWQgd2l0aCBtYWxsb2MuICBJbiBwcmFjdGljZSBmYXN0LWltcG9ydCB0ZW5kcyB0byBhbW9ydGl6ZSBhbnkKK21hbGxvYyBvdmVyaGVhZHMgdG8gMCwgZHVlIHRvIGl0cyB1c2Ugb2YgbGFyZ2UgYmxvY2sgYWxsb2NhdGlvbnMuCisKK3BlciBvYmplY3QKK35+fn5+fn5+fn4KK2Zhc3QtaW1wb3J0IG1haW50YWlucyBhbiBpbi1tZW1vcnkgc3RydWN0dXJlIGZvciBldmVyeSBvYmplY3Qgd3JpdHRlbiBpbgordGhpcyBleGVjdXRpb24uICBPbiBhIDMyIGJpdCBzeXN0ZW0gdGhlIHN0cnVjdHVyZSBpcyAzMiBieXRlcywKK29uIGEgNjQgYml0IHN5c3RlbSB0aGUgc3RydWN0dXJlIGlzIDQwIGJ5dGVzIChkdWUgdG8gdGhlIGxhcmdlcgorcG9pbnRlciBzaXplcykuICBPYmplY3RzIGluIHRoZSB0YWJsZSBhcmUgbm90IGRlYWxsb2NhdGVkIHVudGlsCitmYXN0LWltcG9ydCB0ZXJtaW5hdGVzLiAgSW1wb3J0aW5nIDIgbWlsbGlvbiBvYmplY3RzIG9uIGEgMzIgYml0IHN5c3RlbQord2lsbCByZXF1aXJlIGFwcHJveGltYXRlbHkgNjQgTWlCIG9mIG1lbW9yeS4KKworVGhlIG9iamVjdCB0YWJsZSBpcyBhY3R1YWxseSBhIGhhc2h0YWJsZSBrZXllZCBvbiB0aGUgb2JqZWN0IG5hbWUKKyh0aGUgdW5pcXVlIFNIQS0xKS4gIFRoaXMgc3RvcmFnZSBjb25maWd1cmF0aW9uIGFsbG93cyBmYXN0LWltcG9ydCB0byByZXVzZQorYW4gZXhpc3Rpbmcgb3IgYWxyZWFkeSB3cml0dGVuIG9iamVjdCBhbmQgYXZvaWQgd3JpdGluZyBkdXBsaWNhdGVzCit0byB0aGUgb3V0cHV0IHBhY2tmaWxlLiAgRHVwbGljYXRlIGJsb2JzIGFyZSBzdXJwcmlzaW5nbHkgY29tbW9uCitpbiBhbiBpbXBvcnQsIHR5cGljYWxseSBkdWUgdG8gYnJhbmNoIG1lcmdlcyBpbiB0aGUgc291cmNlLgorCitwZXIgbWFyaworfn5+fn5+fn4KK01hcmtzIGFyZSBzdG9yZWQgaW4gYSBzcGFyc2UgYXJyYXksIHVzaW5nIDEgcG9pbnRlciAoNCBieXRlcyBvciA4CitieXRlcywgZGVwZW5kaW5nIG9uIHBvaW50ZXIgc2l6ZSkgcGVyIG1hcmsuICBBbHRob3VnaCB0aGUgYXJyYXkKK2lzIHNwYXJzZSwgZnJvbnRlbmRzIGFyZSBzdGlsbCBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIHVzZSBtYXJrcworYmV0d2VlbiAxIGFuZCBuLCB3aGVyZSBuIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgbWFya3MgcmVxdWlyZWQgZm9yCit0aGlzIGltcG9ydC4KKworcGVyIGJyYW5jaAorfn5+fn5+fn5+fgorQnJhbmNoZXMgYXJlIGNsYXNzaWZpZWQgYXMgYWN0aXZlIGFuZCBpbmFjdGl2ZS4gIFRoZSBtZW1vcnkgdXNhZ2UKK29mIHRoZSB0d28gY2xhc3NlcyBpcyBzaWduaWZpY2FudGx5IGRpZmZlcmVudC4KKworSW5hY3RpdmUgYnJhbmNoZXMgYXJlIHN0b3JlZCBpbiBhIHN0cnVjdHVyZSB3aGljaCB1c2VzIDk2IG9yIDEyMAorYnl0ZXMgKDMyIGJpdCBvciA2NCBiaXQgc3lzdGVtcywgcmVzcGVjdGl2ZWx5KSwgcGx1cyB0aGUgbGVuZ3RoIG9mCit0aGUgYnJhbmNoIG5hbWUgKHR5cGljYWxseSB1bmRlciAyMDAgYnl0ZXMpLCBwZXIgYnJhbmNoLiAgZmFzdC1pbXBvcnQgd2lsbAorZWFzaWx5IGhhbmRsZSBhcyBtYW55IGFzIDEwLDAwMCBpbmFjdGl2ZSBicmFuY2hlcyBpbiB1bmRlciAyIE1pQgorb2YgbWVtb3J5LgorCitBY3RpdmUgYnJhbmNoZXMgaGF2ZSB0aGUgc2FtZSBvdmVyaGVhZCBhcyBpbmFjdGl2ZSBicmFuY2hlcywgYnV0CithbHNvIGNvbnRhaW4gY29waWVzIG9mIGV2ZXJ5IHRyZWUgdGhhdCBoYXMgYmVlbiByZWNlbnRseSBtb2RpZmllZCBvbgordGhhdCBicmFuY2guICBJZiBzdWJ0cmVlIGBpbmNsdWRlYCBoYXMgbm90IGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlCiticmFuY2ggYmVjYW1lIGFjdGl2ZSwgaXRzIGNvbnRlbnRzIHdpbGwgbm90IGJlIGxvYWRlZCBpbnRvIG1lbW9yeSwKK2J1dCBpZiBzdWJ0cmVlIGBzcmNgIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGEgY29tbWl0IHNpbmNlIHRoZSBicmFuY2gKK2JlY2FtZSBhY3RpdmUsIHRoZW4gaXRzIGNvbnRlbnRzIHdpbGwgYmUgbG9hZGVkIGluIG1lbW9yeS4KKworQXMgYWN0aXZlIGJyYW5jaGVzIHN0b3JlIG1ldGFkYXRhIGFib3V0IHRoZSBmaWxlcyBjb250YWluZWQgb24gdGhhdAorYnJhbmNoLCB0aGVpciBpbi1tZW1vcnkgc3RvcmFnZSBzaXplIGNhbiBncm93IHRvIGEgY29uc2lkZXJhYmxlIHNpemUKKyhzZWUgYmVsb3cpLgorCitmYXN0LWltcG9ydCBhdXRvbWF0aWNhbGx5IG1vdmVzIGFjdGl2ZSBicmFuY2hlcyB0byBpbmFjdGl2ZSBzdGF0dXMgYmFzZWQgb24KK2Egc2ltcGxlIGxlYXN0LXJlY2VudGx5LXVzZWQgYWxnb3JpdGhtLiAgVGhlIExSVSBjaGFpbiBpcyB1cGRhdGVkIG9uCitlYWNoIGBjb21taXRgIGNvbW1hbmQuICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYWN0aXZlIGJyYW5jaGVzIGNhbiBiZQoraW5jcmVhc2VkIG9yIGRlY3JlYXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGggLS1hY3RpdmUtYnJhbmNoZXM9LgorCitwZXIgYWN0aXZlIHRyZWUKK35+fn5+fn5+fn5+fn5+fgorVHJlZXMgKGFrYSBkaXJlY3RvcmllcykgdXNlIGp1c3QgMTIgYnl0ZXMgb2YgbWVtb3J5IG9uIHRvcCBvZiB0aGUKK21lbW9yeSByZXF1aXJlZCBmb3IgdGhlaXIgZW50cmllcyAoc2VlIGBgcGVyIGFjdGl2ZSBmaWxlJycgYmVsb3cpLgorVGhlIGNvc3Qgb2YgYSB0cmVlIGlzIHZpcnR1YWxseSAwLCBhcyBpdHMgb3ZlcmhlYWQgYW1vcnRpemVzIG91dAorb3ZlciB0aGUgaW5kaXZpZHVhbCBmaWxlIGVudHJpZXMuCisKK3BlciBhY3RpdmUgZmlsZSBlbnRyeQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+CitGaWxlcyAoYW5kIHBvaW50ZXJzIHRvIHN1YnRyZWVzKSB3aXRoaW4gYWN0aXZlIHRyZWVzIHJlcXVpcmUgNTIgb3IgNjQKK2J5dGVzICgzMi82NCBiaXQgcGxhdGZvcm1zKSBwZXIgZW50cnkuICBUbyBjb25zZXJ2ZSBzcGFjZSwgZmlsZSBhbmQKK3RyZWUgbmFtZXMgYXJlIHBvb2xlZCBpbiBhIGNvbW1vbiBzdHJpbmcgdGFibGUsIGFsbG93aW5nIHRoZSBmaWxlbmFtZQorYGBNYWtlZmlsZScnIHRvIHVzZSBqdXN0IDE2IGJ5dGVzIChhZnRlciBpbmNsdWRpbmcgdGhlIHN0cmluZyBoZWFkZXIKK292ZXJoZWFkKSBubyBtYXR0ZXIgaG93IG1hbnkgdGltZXMgaXQgb2NjdXJzIHdpdGhpbiB0aGUgcHJvamVjdC4KKworVGhlIGFjdGl2ZSBicmFuY2ggTFJVLCB3aGVuIGNvdXBsZWQgd2l0aCB0aGUgZmlsZW5hbWUgc3RyaW5nIHBvb2wKK2FuZCBsYXp5IGxvYWRpbmcgb2Ygc3VidHJlZXMsIGFsbG93cyBmYXN0LWltcG9ydCB0byBlZmZpY2llbnRseSBpbXBvcnQKK3Byb2plY3RzIHdpdGggMiwwMDArIGJyYW5jaGVzIGFuZCA0NSwxMTQrIGZpbGVzIGluIGEgdmVyeSBsaW1pdGVkCittZW1vcnkgZm9vdHByaW50IChsZXNzIHRoYW4gMi43IE1pQiBwZXIgYWN0aXZlIGJyYW5jaCkuCisKK1NJR05BTFMKKy0tLS0tLS0KK1NlbmRpbmcgKlNJR1VTUjEqIHRvIHRoZSAnZ2l0IGZhc3QtaW1wb3J0JyBwcm9jZXNzIGVuZHMgdGhlIGN1cnJlbnQKK3BhY2tmaWxlIGVhcmx5LCBzaW11bGF0aW5nIGEgYGNoZWNrcG9pbnRgIGNvbW1hbmQuICBUaGUgaW1wYXRpZW50CitvcGVyYXRvciBjYW4gdXNlIHRoaXMgZmFjaWxpdHkgdG8gcGVlayBhdCB0aGUgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFuCitpbXBvcnQgaW4gcHJvZ3Jlc3MsIGF0IHRoZSBjb3N0IG9mIHNvbWUgYWRkZWQgcnVubmluZyB0aW1lIGFuZCB3b3JzZQorY29tcHJlc3Npb24uCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtZmFzdC1leHBvcnRbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLXBhY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzU4ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dApAQCAtMCwwICsxLDEzMiBAQAorZ2l0LWZldGNoLXBhY2soMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1mZXRjaC1wYWNrIC0gUmVjZWl2ZSBtaXNzaW5nIG9iamVjdHMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZmV0Y2gtcGFjaycgWy0tYWxsXSBbLS1xdWlldHwtcV0gWy0ta2VlcHwta10gWy0tdGhpbl0gWy0taW5jbHVkZS10YWddCisJWy0tdXBsb2FkLXBhY2s9PGdpdC11cGxvYWQtcGFjaz5dCisJWy0tZGVwdGg9PG4+XSBbLS1uby1wcm9ncmVzc10KKwlbLXZdIDxyZXBvc2l0b3J5PiBbPHJlZnM+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1VzdWFsbHkgeW91IHdvdWxkIHdhbnQgdG8gdXNlICdnaXQgZmV0Y2gnLCB3aGljaCBpcyBhCitoaWdoZXIgbGV2ZWwgd3JhcHBlciBvZiB0aGlzIGNvbW1hbmQsIGluc3RlYWQuCisKK0ludm9rZXMgJ2dpdC11cGxvYWQtcGFjaycgb24gYSBwb3NzaWJseSByZW1vdGUgcmVwb3NpdG9yeQorYW5kIGFza3MgaXQgdG8gc2VuZCBvYmplY3RzIG1pc3NpbmcgZnJvbSB0aGlzIHJlcG9zaXRvcnksIHRvCit1cGRhdGUgdGhlIG5hbWVkIGhlYWRzLiAgVGhlIGxpc3Qgb2YgY29tbWl0cyBhdmFpbGFibGUgbG9jYWxseQoraXMgZm91bmQgb3V0IGJ5IHNjYW5uaW5nIHRoZSBsb2NhbCByZWZzLyBoaWVyYXJjaHkgYW5kIHNlbnQgdG8KKydnaXQtdXBsb2FkLXBhY2snIHJ1bm5pbmcgb24gdGhlIG90aGVyIGVuZC4KKworVGhpcyBjb21tYW5kIGRlZ2VuZXJhdGVzIHRvIGRvd25sb2FkIGV2ZXJ5dGhpbmcgdG8gY29tcGxldGUgdGhlCithc2tlZCByZWZzIGZyb20gdGhlIHJlbW90ZSBzaWRlIHdoZW4gdGhlIGxvY2FsIHNpZGUgZG9lcyBub3QKK2hhdmUgYSBjb21tb24gYW5jZXN0b3IgY29tbWl0LgorCisKK09QVElPTlMKKy0tLS0tLS0KKy0tYWxsOjoKKwlGZXRjaCBhbGwgcmVtb3RlIHJlZnMuCisKKy0tc3RkaW46OgorCVRha2UgdGhlIGxpc3Qgb2YgcmVmcyBmcm9tIHN0ZGluLCBvbmUgcGVyIGxpbmUuIElmIHRoZXJlCisJYXJlIHJlZnMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgaW4gYWRkaXRpb24gdG8gdGhpcworCW9wdGlvbiwgdGhlbiB0aGUgcmVmcyBmcm9tIHN0ZGluIGFyZSBwcm9jZXNzZWQgYWZ0ZXIgdGhvc2UKKwlvbiB0aGUgY29tbWFuZCBsaW5lLgorKworSWYgYC0tc3RhdGVsZXNzLXJwY2AgaXMgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggdGhpcyBvcHRpb24gdGhlbgordGhlIGxpc3Qgb2YgcmVmcyBtdXN0IGJlIGluIHBhY2tldCBmb3JtYXQgKHBrdC1saW5lKS4gRWFjaCByZWYgbXVzdAorYmUgaW4gYSBzZXBhcmF0ZSBwYWNrZXQsIGFuZCB0aGUgbGlzdCBtdXN0IGVuZCB3aXRoIGEgZmx1c2ggcGFja2V0LgorCistcTo6CistLXF1aWV0OjoKKwlQYXNzIGAtcWAgZmxhZyB0byAnZ2l0IHVucGFjay1vYmplY3RzJzsgdGhpcyBtYWtlcyB0aGUKKwljbG9uaW5nIHByb2Nlc3MgbGVzcyB2ZXJib3NlLgorCistazo6CistLWtlZXA6OgorCURvIG5vdCBpbnZva2UgJ2dpdCB1bnBhY2stb2JqZWN0cycgb24gcmVjZWl2ZWQgZGF0YSwgYnV0CisJY3JlYXRlIGEgc2luZ2xlIHBhY2tmaWxlIG91dCBvZiBpdCBpbnN0ZWFkLCBhbmQgc3RvcmUgaXQKKwlpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLiBJZiBwcm92aWRlZCB0d2ljZSB0aGVuIHRoZSBwYWNrIGlzCisJbG9ja2VkIGFnYWluc3QgcmVwYWNraW5nLgorCistLXRoaW46OgorCUZldGNoIGEgInRoaW4iIHBhY2ssIHdoaWNoIHJlY29yZHMgb2JqZWN0cyBpbiBkZWx0aWZpZWQgZm9ybSBiYXNlZAorCW9uIG9iamVjdHMgbm90IGluY2x1ZGVkIGluIHRoZSBwYWNrIHRvIHJlZHVjZSBuZXR3b3JrIHRyYWZmaWMuCisKKy0taW5jbHVkZS10YWc6OgorCUlmIHRoZSByZW1vdGUgc2lkZSBzdXBwb3J0cyBpdCwgYW5ub3RhdGVkIHRhZ3Mgb2JqZWN0cyB3aWxsCisJYmUgZG93bmxvYWRlZCBvbiB0aGUgc2FtZSBjb25uZWN0aW9uIGFzIHRoZSBvdGhlciBvYmplY3RzIGlmCisJdGhlIG9iamVjdCB0aGUgdGFnIHJlZmVyZW5jZXMgaXMgZG93bmxvYWRlZC4gIFRoZSBjYWxsZXIgbXVzdAorCW90aGVyd2lzZSBkZXRlcm1pbmUgdGhlIHRhZ3MgdGhpcyBvcHRpb24gbWFkZSBhdmFpbGFibGUuCisKKy0tdXBsb2FkLXBhY2s9PGdpdC11cGxvYWQtcGFjaz46OgorCVVzZSB0aGlzIHRvIHNwZWNpZnkgdGhlIHBhdGggdG8gJ2dpdC11cGxvYWQtcGFjaycgb24gdGhlCisJcmVtb3RlIHNpZGUsIGlmIGlzIG5vdCBmb3VuZCBvbiB5b3VyICRQQVRILgorCUluc3RhbGxhdGlvbnMgb2Ygc3NoZCBpZ25vcmVzIHRoZSB1c2VyJ3MgZW52aXJvbm1lbnQKKwlzZXR1cCBzY3JpcHRzIGZvciBsb2dpbiBzaGVsbHMgKGUuZy4gLmJhc2hfcHJvZmlsZSkgYW5kCisJeW91ciBwcml2YXRlbHkgaW5zdGFsbGVkIGdpdCBtYXkgbm90IGJlIGZvdW5kIG9uIHRoZSBzeXN0ZW0KKwlkZWZhdWx0ICRQQVRILiAgQW5vdGhlciB3b3JrYXJvdW5kIHN1Z2dlc3RlZCBpcyB0byBzZXQKKwl1cCB5b3VyICRQQVRIIGluICIuYmFzaHJjIiwgYnV0IHRoaXMgZmxhZyBpcyBmb3IgcGVvcGxlCisJd2hvIGRvIG5vdCB3YW50IHRvIHBheSB0aGUgb3ZlcmhlYWQgZm9yIG5vbi1pbnRlcmFjdGl2ZQorCXNoZWxscyBieSBoYXZpbmcgYSBsZWFuIC5iYXNocmMgZmlsZSAodGhleSBzZXQgbW9zdCBvZgorCXRoZSB0aGluZ3MgdXAgaW4gLmJhc2hfcHJvZmlsZSkuCisKKy0tZXhlYz08Z2l0LXVwbG9hZC1wYWNrPjo6CisJU2FtZSBhcyAtLXVwbG9hZC1wYWNrPTxnaXQtdXBsb2FkLXBhY2s+LgorCistLWRlcHRoPTxuPjo6CisJTGltaXQgZmV0Y2hpbmcgdG8gYW5jZXN0b3ItY2hhaW5zIG5vdCBsb25nZXIgdGhhbiBuLgorCSdnaXQtdXBsb2FkLXBhY2snIHRyZWF0cyB0aGUgc3BlY2lhbCBkZXB0aCAyMTQ3NDgzNjQ3IGFzCisJaW5maW5pdGUgZXZlbiBpZiB0aGVyZSBpcyBhbiBhbmNlc3Rvci1jaGFpbiB0aGF0IGxvbmcuCisKKy0tc2hhbGxvdy1zaW5jZT08ZGF0ZT46OgorCURlZXBlbiBvciBzaG9ydGVuIHRoZSBoaXN0b3J5IG9mIGEgc2hhbGxvdyByZXBvc2l0b3J5IHRvCisJaW5jbHVkZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgYWZ0ZXIgPGRhdGU+LgorCistLXNoYWxsb3ctZXhjbHVkZT08cmV2aXNpb24+OjoKKwlEZWVwZW4gb3Igc2hvcnRlbiB0aGUgaGlzdG9yeSBvZiBhIHNoYWxsb3cgcmVwb3NpdG9yeSB0bworCWV4Y2x1ZGUgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhIHNwZWNpZmllZCByZW1vdGUgYnJhbmNoIG9yIHRhZy4KKwlUaGlzIG9wdGlvbiBjYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgorCistLWRlZXBlbi1yZWxhdGl2ZTo6CisJQXJndW1lbnQgLS1kZXB0aCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjb21taXRzIGZyb20gdGhlCisJY3VycmVudCBzaGFsbG93IGJvdW5kYXJ5IGluc3RlYWQgb2YgZnJvbSB0aGUgdGlwIG9mIGVhY2gKKwlyZW1vdGUgYnJhbmNoIGhpc3RvcnkuCisKKy0tbm8tcHJvZ3Jlc3M6OgorCURvIG5vdCBzaG93IHRoZSBwcm9ncmVzcy4KKworLS1jaGVjay1zZWxmLWNvbnRhaW5lZC1hbmQtY29ubmVjdGVkOjoKKwlPdXRwdXQgImNvbm5lY3Rpdml0eS1vayIgaWYgdGhlIHJlY2VpdmVkIHBhY2sgaXMKKwlzZWxmLWNvbnRhaW5lZCBhbmQgY29ubmVjdGVkLgorCistdjo6CisJUnVuIHZlcmJvc2VseS4KKworPHJlcG9zaXRvcnk+OjoKKwlUaGUgVVJMIHRvIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4KKworPHJlZnM+Li4uOjoKKwlUaGUgcmVtb3RlIGhlYWRzIHRvIHVwZGF0ZSBmcm9tLiBUaGlzIGlzIHJlbGF0aXZlIHRvCisJJEdJVF9ESVIgKGUuZy4gIkhFQUQiLCAicmVmcy9oZWFkcy9tYXN0ZXIiKS4gIFdoZW4KKwl1bnNwZWNpZmllZCwgdXBkYXRlIGZyb20gYWxsIGhlYWRzIHRoZSByZW1vdGUgc2lkZSBoYXMuCisrCitJZiB0aGUgcmVtb3RlIGhhcyBlbmFibGVkIHRoZSBvcHRpb25zIGB1cGxvYWRwYWNrLmFsbG93VGlwU0hBMUluV2FudGAsCitgdXBsb2FkcGFjay5hbGxvd1JlYWNoYWJsZVNIQTFJbldhbnRgLCBvciBgdXBsb2FkcGFjay5hbGxvd0FueVNIQTFJbldhbnRgLAordGhleSBtYXkgYWx0ZXJuYXRpdmVseSBiZSA0MC1oZXggc2hhMXMgcHJlc2VudCBvbiB0aGUgcmVtb3RlLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWZldGNoWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTkwOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC50eHQKQEAgLTAsMCArMSwyOTkgQEAKK2dpdC1mZXRjaCgxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1mZXRjaCAtIERvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZmV0Y2gnIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dCisnZ2l0IGZldGNoJyBbPG9wdGlvbnM+XSA8Z3JvdXA+CisnZ2l0IGZldGNoJyAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dCisnZ2l0IGZldGNoJyAtLWFsbCBbPG9wdGlvbnM+XQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorRmV0Y2ggYnJhbmNoZXMgYW5kL29yIHRhZ3MgKGNvbGxlY3RpdmVseSwgInJlZnMiKSBmcm9tIG9uZSBvciBtb3JlCitvdGhlciByZXBvc2l0b3JpZXMsIGFsb25nIHdpdGggdGhlIG9iamVjdHMgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIHRoZWlyCitoaXN0b3JpZXMuICBSZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgYXJlIHVwZGF0ZWQgKHNlZSB0aGUgZGVzY3JpcHRpb24KK29mIDxyZWZzcGVjPiBiZWxvdyBmb3Igd2F5cyB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IpLgorCitCeSBkZWZhdWx0LCBhbnkgdGFnIHRoYXQgcG9pbnRzIGludG8gdGhlIGhpc3RvcmllcyBiZWluZyBmZXRjaGVkIGlzCithbHNvIGZldGNoZWQ7IHRoZSBlZmZlY3QgaXMgdG8gZmV0Y2ggdGFncyB0aGF0Citwb2ludCBhdCBicmFuY2hlcyB0aGF0IHlvdSBhcmUgaW50ZXJlc3RlZCBpbi4gIFRoaXMgZGVmYXVsdCBiZWhhdmlvcgorY2FuIGJlIGNoYW5nZWQgYnkgdXNpbmcgdGhlIC0tdGFncyBvciAtLW5vLXRhZ3Mgb3B0aW9ucyBvciBieQorY29uZmlndXJpbmcgcmVtb3RlLjxuYW1lPi50YWdPcHQuICBCeSB1c2luZyBhIHJlZnNwZWMgdGhhdCBmZXRjaGVzIHRhZ3MKK2V4cGxpY2l0bHksIHlvdSBjYW4gZmV0Y2ggdGFncyB0aGF0IGRvIG5vdCBwb2ludCBpbnRvIGJyYW5jaGVzIHlvdQorYXJlIGludGVyZXN0ZWQgaW4gYXMgd2VsbC4KKworJ2dpdCBmZXRjaCcgY2FuIGZldGNoIGZyb20gZWl0aGVyIGEgc2luZ2xlIG5hbWVkIHJlcG9zaXRvcnkgb3IgVVJMLAorb3IgZnJvbSBzZXZlcmFsIHJlcG9zaXRvcmllcyBhdCBvbmNlIGlmIDxncm91cD4gaXMgZ2l2ZW4gYW5kCit0aGVyZSBpcyBhIHJlbW90ZXMuPGdyb3VwPiBlbnRyeSBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorKFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCitXaGVuIG5vIHJlbW90ZSBpcyBzcGVjaWZpZWQsIGJ5IGRlZmF1bHQgdGhlIGBvcmlnaW5gIHJlbW90ZSB3aWxsIGJlIHVzZWQsCit1bmxlc3MgdGhlcmUncyBhbiB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJlZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLgorCitUaGUgbmFtZXMgb2YgcmVmcyB0aGF0IGFyZSBmZXRjaGVkLCB0b2dldGhlciB3aXRoIHRoZSBvYmplY3QgbmFtZXMKK3RoZXkgcG9pbnQgYXQsIGFyZSB3cml0dGVuIHRvIGAuZ2l0L0ZFVENIX0hFQURgLiAgVGhpcyBpbmZvcm1hdGlvbgorbWF5IGJlIHVzZWQgYnkgc2NyaXB0cyBvciBvdGhlciBnaXQgY29tbWFuZHMsIHN1Y2ggYXMgbGlua2dpdDpnaXQtcHVsbFsxXS4KKworT1BUSU9OUworLS0tLS0tLQoraW5jbHVkZTo6ZmV0Y2gtb3B0aW9ucy50eHRbXQorCitpbmNsdWRlOjpwdWxsLWZldGNoLXBhcmFtLnR4dFtdCisKK2luY2x1ZGU6OnVybHMtcmVtb3Rlcy50eHRbXQorCisKK0NPTkZJR1VSRUQgUkVNT1RFLVRSQUNLSU5HIEJSQU5DSEVTW1tDUlRCXV0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IG9mdGVuIGludGVyYWN0IHdpdGggdGhlIHNhbWUgcmVtb3RlIHJlcG9zaXRvcnkgYnkKK3JlZ3VsYXJseSBhbmQgcmVwZWF0ZWRseSBmZXRjaGluZyBmcm9tIGl0LiAgSW4gb3JkZXIgdG8ga2VlcCB0cmFjaworb2YgdGhlIHByb2dyZXNzIG9mIHN1Y2ggYSByZW1vdGUgcmVwb3NpdG9yeSwgYGdpdCBmZXRjaGAgYWxsb3dzIHlvdQordG8gY29uZmlndXJlIGByZW1vdGUuPHJlcG9zaXRvcnk+LmZldGNoYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKworVHlwaWNhbGx5IHN1Y2ggYSB2YXJpYWJsZSBtYXkgbG9vayBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW3JlbW90ZSAib3JpZ2luIl0KKwlmZXRjaCA9ICtyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBjb25maWd1cmF0aW9uIGlzIHVzZWQgaW4gdHdvIHdheXM6CisKKyogV2hlbiBgZ2l0IGZldGNoYCBpcyBydW4gd2l0aG91dCBzcGVjaWZ5aW5nIHdoYXQgYnJhbmNoZXMKKyAgYW5kL29yIHRhZ3MgdG8gZmV0Y2ggb24gdGhlIGNvbW1hbmQgbGluZSwgZS5nLiBgZ2l0IGZldGNoIG9yaWdpbmAKKyAgb3IgYGdpdCBmZXRjaGAsIGByZW1vdGUuPHJlcG9zaXRvcnk+LmZldGNoYCB2YWx1ZXMgYXJlIHVzZWQgYXMKKyAgdGhlIHJlZnNwZWNzLS10aGV5IHNwZWNpZnkgd2hpY2ggcmVmcyB0byBmZXRjaCBhbmQgd2hpY2ggbG9jYWwgcmVmcworICB0byB1cGRhdGUuICBUaGUgZXhhbXBsZSBhYm92ZSB3aWxsIGZldGNoCisgIGFsbCBicmFuY2hlcyB0aGF0IGV4aXN0IGluIHRoZSBgb3JpZ2luYCAoaS5lLiBhbnkgcmVmIHRoYXQgbWF0Y2hlcworICB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgdGhlIHZhbHVlLCBgcmVmcy9oZWFkcy8qYCkgYW5kIHVwZGF0ZSB0aGUKKyAgY29ycmVzcG9uZGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgaW4gdGhlIGByZWZzL3JlbW90ZXMvb3JpZ2luLypgCisgIGhpZXJhcmNoeS4KKworKiBXaGVuIGBnaXQgZmV0Y2hgIGlzIHJ1biB3aXRoIGV4cGxpY2l0IGJyYW5jaGVzIGFuZC9vciB0YWdzCisgIHRvIGZldGNoIG9uIHRoZSBjb21tYW5kIGxpbmUsIGUuZy4gYGdpdCBmZXRjaCBvcmlnaW4gbWFzdGVyYCwgdGhlCisgIDxyZWZzcGVjPnMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSBkZXRlcm1pbmUgd2hhdCBhcmUgdG8gYmUKKyAgZmV0Y2hlZCAoZS5nLiBgbWFzdGVyYCBpbiB0aGUgZXhhbXBsZSwKKyAgd2hpY2ggaXMgYSBzaG9ydC1oYW5kIGZvciBgbWFzdGVyOmAsIHdoaWNoIGluIHR1cm4gbWVhbnMKKyAgImZldGNoIHRoZSAnbWFzdGVyJyBicmFuY2ggYnV0IEkgZG8gbm90IGV4cGxpY2l0bHkgc2F5IHdoYXQKKyAgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCB0byB1cGRhdGUgd2l0aCBpdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUiKSwKKyAgYW5kIHRoZSBleGFtcGxlIGNvbW1hbmQgd2lsbAorICBmZXRjaCBfb25seV8gdGhlICdtYXN0ZXInIGJyYW5jaC4gIFRoZSBgcmVtb3RlLjxyZXBvc2l0b3J5Pi5mZXRjaGAKKyAgdmFsdWVzIGRldGVybWluZSB3aGljaAorICByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLCBpZiBhbnksIGlzIHVwZGF0ZWQuICBXaGVuIHVzZWQgaW4gdGhpcworICB3YXksIHRoZSBgcmVtb3RlLjxyZXBvc2l0b3J5Pi5mZXRjaGAgdmFsdWVzIGRvIG5vdCBoYXZlIGFueQorICBlZmZlY3QgaW4gZGVjaWRpbmcgX3doYXRfIGdldHMgZmV0Y2hlZCAoaS5lLiB0aGUgdmFsdWVzIGFyZSBub3QKKyAgdXNlZCBhcyByZWZzcGVjcyB3aGVuIHRoZSBjb21tYW5kLWxpbmUgbGlzdHMgcmVmc3BlY3MpOyB0aGV5IGFyZQorICBvbmx5IHVzZWQgdG8gZGVjaWRlIF93aGVyZV8gdGhlIHJlZnMgdGhhdCBhcmUgZmV0Y2hlZCBhcmUgc3RvcmVkCisgIGJ5IGFjdGluZyBhcyBhIG1hcHBpbmcuCisKK1RoZSBsYXR0ZXIgdXNlIG9mIHRoZSBgcmVtb3RlLjxyZXBvc2l0b3J5Pi5mZXRjaGAgdmFsdWVzIGNhbiBiZQorb3ZlcnJpZGRlbiBieSBnaXZpbmcgdGhlIGAtLXJlZm1hcD08cmVmc3BlYz5gIHBhcmFtZXRlcihzKSBvbiB0aGUKK2NvbW1hbmQgbGluZS4KKworUFJVTklORworLS0tLS0tLQorCitHaXQgaGFzIGEgZGVmYXVsdCBkaXNwb3NpdGlvbiBvZiBrZWVwaW5nIGRhdGEgdW5sZXNzIGl0J3MgZXhwbGljaXRseQordGhyb3duIGF3YXk7IHRoaXMgZXh0ZW5kcyB0byBob2xkaW5nIG9udG8gbG9jYWwgcmVmZXJlbmNlcyB0byBicmFuY2hlcworb24gcmVtb3RlcyB0aGF0IGhhdmUgdGhlbXNlbHZlcyBkZWxldGVkIHRob3NlIGJyYW5jaGVzLgorCitJZiBsZWZ0IHRvIGFjY3VtdWxhdGUsIHRoZXNlIHN0YWxlIHJlZmVyZW5jZXMgbWlnaHQgbWFrZSBwZXJmb3JtYW5jZQord29yc2Ugb24gYmlnIGFuZCBidXN5IHJlcG9zIHRoYXQgaGF2ZSBhIGxvdCBvZiBicmFuY2ggY2h1cm4sIGFuZAorZS5nLiBtYWtlIHRoZSBvdXRwdXQgb2YgY29tbWFuZHMgbGlrZSBgZ2l0IGJyYW5jaCAtYSAtLWNvbnRhaW5zCis8Y29tbWl0PmAgbmVlZGxlc3NseSB2ZXJib3NlLCBhcyB3ZWxsIGFzIGltcGFjdGluZyBhbnl0aGluZyBlbHNlCit0aGF0J2xsIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgc2V0IG9mIGtub3duIHJlZmVyZW5jZXMuCisKK1RoZXNlIHJlbW90ZS10cmFja2luZyByZWZlcmVuY2VzIGNhbiBiZSBkZWxldGVkIGFzIGEgb25lLW9mZiB3aXRoCitlaXRoZXIgb2Y6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXaGlsZSBmZXRjaGluZworJCBnaXQgZmV0Y2ggLS1wcnVuZSA8bmFtZT4KKworIyBPbmx5IHBydW5lLCBkb24ndCBmZXRjaAorJCBnaXQgcmVtb3RlIHBydW5lIDxuYW1lPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHBydW5lIHJlZmVyZW5jZXMgYXMgcGFydCBvZiB5b3VyIG5vcm1hbCB3b3JrZmxvdyB3aXRob3V0IG5lZWRpbmcgdG8KK3JlbWVtYmVyIHRvIHJ1biB0aGF0LCBzZXQgYGZldGNoLnBydW5lYCBnbG9iYWxseSwgb3IKK2ByZW1vdGUuPG5hbWU+LnBydW5lYCBwZXItcmVtb3RlIGluIHRoZSBjb25maWcuIFNlZQorbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCitIZXJlJ3Mgd2hlcmUgdGhpbmdzIGdldCB0cmlja3kgYW5kIG1vcmUgc3BlY2lmaWMuIFRoZSBwcnVuaW5nIGZlYXR1cmUKK2RvZXNuJ3QgYWN0dWFsbHkgY2FyZSBhYm91dCBicmFuY2hlcywgaW5zdGVhZCBpdCdsbCBwcnVuZSBsb2NhbCA8LT4KK3JlbW90ZS1yZWZlcmVuY2VzIGFzIGEgZnVuY3Rpb24gb2YgdGhlIHJlZnNwZWMgb2YgdGhlIHJlbW90ZSAoc2VlCitgPHJlZnNwZWM+YCBhbmQgPDxDUlRCLENPTkZJR1VSRUQgUkVNT1RFLVRSQUNLSU5HIEJSQU5DSEVTPj4gYWJvdmUpLgorCitUaGVyZWZvcmUgaWYgdGhlIHJlZnNwZWMgZm9yIHRoZSByZW1vdGUgaW5jbHVkZXMKK2UuZy4gYHJlZnMvdGFncy8qOnJlZnMvdGFncy8qYCwgb3IgeW91IG1hbnVhbGx5IHJ1biBlLmcuIGBnaXQgZmV0Y2gKKy0tcHJ1bmUgPG5hbWU+ICJyZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKiJgIGl0IHdvbid0IGJlIHN0YWxlIHJlbW90ZQordHJhY2tpbmcgYnJhbmNoZXMgdGhhdCBhcmUgZGVsZXRlZCwgYnV0IGFueSBsb2NhbCB0YWcgdGhhdCBkb2Vzbid0CitleGlzdCBvbiB0aGUgcmVtb3RlLgorCitUaGlzIG1pZ2h0IG5vdCBiZSB3aGF0IHlvdSBleHBlY3QsIGkuZS4geW91IHdhbnQgdG8gcHJ1bmUgcmVtb3RlCitgPG5hbWU+YCwgYnV0IGFsc28gZXhwbGljaXRseSBmZXRjaCB0YWdzIGZyb20gaXQsIHNvIHdoZW4geW91IGZldGNoCitmcm9tIGl0IHlvdSBkZWxldGUgYWxsIHlvdXIgbG9jYWwgdGFncywgbW9zdCBvZiB3aGljaCBtYXkgbm90IGhhdmUKK2NvbWUgZnJvbSB0aGUgYDxuYW1lPmAgcmVtb3RlIGluIHRoZSBmaXJzdCBwbGFjZS4KKworU28gYmUgY2FyZWZ1bCB3aGVuIHVzaW5nIHRoaXMgd2l0aCBhIHJlZnNwZWMgbGlrZQorYHJlZnMvdGFncy8qOnJlZnMvdGFncy8qYCwgb3IgYW55IG90aGVyIHJlZnNwZWMgd2hpY2ggbWlnaHQgbWFwCityZWZlcmVuY2VzIGZyb20gbXVsdGlwbGUgcmVtb3RlcyB0byB0aGUgc2FtZSBsb2NhbCBuYW1lc3BhY2UuCisKK1NpbmNlIGtlZXBpbmcgdXAtdG8tZGF0ZSB3aXRoIGJvdGggYnJhbmNoZXMgYW5kIHRhZ3Mgb24gdGhlIHJlbW90ZSBpcworYSBjb21tb24gdXNlLWNhc2UgdGhlIGAtLXBydW5lLXRhZ3NgIG9wdGlvbiBjYW4gYmUgc3VwcGxpZWQgYWxvbmcgd2l0aAorYC0tcHJ1bmVgIHRvIHBydW5lIGxvY2FsIHRhZ3MgdGhhdCBkb24ndCBleGlzdCBvbiB0aGUgcmVtb3RlLCBhbmQKK2ZvcmNlLXVwZGF0ZSB0aG9zZSB0YWdzIHRoYXQgZGlmZmVyLiBUYWcgcHJ1bmluZyBjYW4gYWxzbyBiZSBlbmFibGVkCit3aXRoIGBmZXRjaC5wcnVuZVRhZ3NgIG9yIGByZW1vdGUuPG5hbWU+LnBydW5lVGFnc2AgaW4gdGhlIGNvbmZpZy4gU2VlCitsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKK1RoZSBgLS1wcnVuZS10YWdzYCBvcHRpb24gaXMgZXF1aXZhbGVudCB0byBoYXZpbmcKK2ByZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKmAgZGVjbGFyZWQgaW4gdGhlIHJlZnNwZWNzIG9mIHRoZSByZW1vdGUuIFRoaXMKK2NhbiBsZWFkIHRvIHNvbWUgc2VlbWluZ2x5IHN0cmFuZ2UgaW50ZXJhY3Rpb25zOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlc2UgYm90aCBmZXRjaCB0YWdzCiskIGdpdCBmZXRjaCAtLW5vLXRhZ3Mgb3JpZ2luICdyZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKicKKyQgZ2l0IGZldGNoIC0tbm8tdGFncyAtLXBydW5lLXRhZ3Mgb3JpZ2luCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHJlYXNvbiBpdCBkb2Vzbid0IGVycm9yIG91dCB3aGVuIHByb3ZpZGVkIHdpdGhvdXQgYC0tcHJ1bmVgIG9yIGl0cworY29uZmlnIHZlcnNpb25zIGlzIGZvciBmbGV4aWJpbGl0eSBvZiB0aGUgY29uZmlndXJlZCB2ZXJzaW9ucywgYW5kIHRvCittYWludGFpbiBhIDE9MSBtYXBwaW5nIGJldHdlZW4gd2hhdCB0aGUgY29tbWFuZCBsaW5lIGZsYWdzIGRvLCBhbmQKK3doYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmVyc2lvbnMgZG8uCisKK0l0J3MgcmVhc29uYWJsZSB0byBlLmcuIGNvbmZpZ3VyZSBgZmV0Y2gucHJ1bmVUYWdzPXRydWVgIGluCitgfi8uZ2l0Y29uZmlnYCB0byBoYXZlIHRhZ3MgcHJ1bmVkIHdoZW5ldmVyIGBnaXQgZmV0Y2ggLS1wcnVuZWAgaXMKK3J1biwgd2l0aG91dCBtYWtpbmcgZXZlcnkgaW52b2NhdGlvbiBvZiBgZ2l0IGZldGNoYCB3aXRob3V0IGAtLXBydW5lYAorYW4gZXJyb3IuCisKK1BydW5pbmcgdGFncyB3aXRoIGAtLXBydW5lLXRhZ3NgIGFsc28gd29ya3Mgd2hlbiBmZXRjaGluZyBhIFVSTAoraW5zdGVhZCBvZiBhIG5hbWVkIHJlbW90ZS4gVGhlc2Ugd2lsbCBhbGwgcHJ1bmUgdGFncyBub3QgZm91bmQgb24KK29yaWdpbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCBvcmlnaW4gLS1wcnVuZSAtLXBydW5lLXRhZ3MKKyQgZ2l0IGZldGNoIG9yaWdpbiAtLXBydW5lICdyZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKicKKyQgZ2l0IGZldGNoIDx1cmwgb2Ygb3JpZ2luPiAtLXBydW5lIC0tcHJ1bmUtdGFncworJCBnaXQgZmV0Y2ggPHVybCBvZiBvcmlnaW4+IC0tcHJ1bmUgJ3JlZnMvdGFncy8qOnJlZnMvdGFncy8qJworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09VVFBVVAorLS0tLS0tCisKK1RoZSBvdXRwdXQgb2YgImdpdCBmZXRjaCIgZGVwZW5kcyBvbiB0aGUgdHJhbnNwb3J0IG1ldGhvZCB1c2VkOyB0aGlzCitzZWN0aW9uIGRlc2NyaWJlcyB0aGUgb3V0cHV0IHdoZW4gZmV0Y2hpbmcgb3ZlciB0aGUgR2l0IHByb3RvY29sCisoZWl0aGVyIGxvY2FsbHkgb3IgdmlhIHNzaCkgYW5kIFNtYXJ0IEhUVFAgcHJvdG9jb2wuCisKK1RoZSBzdGF0dXMgb2YgdGhlIGZldGNoIGlzIG91dHB1dCBpbiB0YWJ1bGFyIGZvcm0sIHdpdGggZWFjaCBsaW5lCityZXByZXNlbnRpbmcgdGhlIHN0YXR1cyBvZiBhIHNpbmdsZSByZWYuIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDxmbGFnPiA8c3VtbWFyeT4gPGZyb20+IC0+IDx0bz4gWzxyZWFzb24+XQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc3RhdHVzIG9mIHVwLXRvLWRhdGUgcmVmcyBpcyBzaG93biBvbmx5IGlmIHRoZSAtLXZlcmJvc2Ugb3B0aW9uIGlzCit1c2VkLgorCitJbiBjb21wYWN0IG91dHB1dCBtb2RlLCBzcGVjaWZpZWQgd2l0aCBjb25maWd1cmF0aW9uIHZhcmlhYmxlCitmZXRjaC5vdXRwdXQsIGlmIGVpdGhlciBlbnRpcmUgYDxmcm9tPmAgb3IgYDx0bz5gIGlzIGZvdW5kIGluIHRoZQorb3RoZXIgc3RyaW5nLCBpdCB3aWxsIGJlIHN1YnN0aXR1dGVkIHdpdGggYCpgIGluIHRoZSBvdGhlciBzdHJpbmcuIEZvcgorZXhhbXBsZSwgYG1hc3RlciAtPiBvcmlnaW4vbWFzdGVyYCBiZWNvbWVzIGBtYXN0ZXIgLT4gb3JpZ2luLypgLgorCitmbGFnOjoKKwlBIHNpbmdsZSBjaGFyYWN0ZXIgaW5kaWNhdGluZyB0aGUgc3RhdHVzIG9mIHRoZSByZWY6Cisoc3BhY2UpOzsgZm9yIGEgc3VjY2Vzc2Z1bGx5IGZldGNoZWQgZmFzdC1mb3J3YXJkOworYCtgOzsgZm9yIGEgc3VjY2Vzc2Z1bCBmb3JjZWQgdXBkYXRlOworYC1gOzsgZm9yIGEgc3VjY2Vzc2Z1bGx5IHBydW5lZCByZWY7CitgdGA7OyBmb3IgYSBzdWNjZXNzZnVsIHRhZyB1cGRhdGU7CitgKmA7OyBmb3IgYSBzdWNjZXNzZnVsbHkgZmV0Y2hlZCBuZXcgcmVmOworYCFgOzsgZm9yIGEgcmVmIHRoYXQgd2FzIHJlamVjdGVkIG9yIGZhaWxlZCB0byB1cGRhdGU7IGFuZAorYD1gOzsgZm9yIGEgcmVmIHRoYXQgd2FzIHVwIHRvIGRhdGUgYW5kIGRpZCBub3QgbmVlZCBmZXRjaGluZy4KKworc3VtbWFyeTo6CisJRm9yIGEgc3VjY2Vzc2Z1bGx5IGZldGNoZWQgcmVmLCB0aGUgc3VtbWFyeSBzaG93cyB0aGUgb2xkIGFuZCBuZXcKKwl2YWx1ZXMgb2YgdGhlIHJlZiBpbiBhIGZvcm0gc3VpdGFibGUgZm9yIHVzaW5nIGFzIGFuIGFyZ3VtZW50IHRvCisJYGdpdCBsb2dgICh0aGlzIGlzIGA8b2xkPi4uPG5ldz5gIGluIG1vc3QgY2FzZXMsIGFuZAorCWA8b2xkPi4uLjxuZXc+YCBmb3IgZm9yY2VkIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcykuCisKK2Zyb206OgorCVRoZSBuYW1lIG9mIHRoZSByZW1vdGUgcmVmIGJlaW5nIGZldGNoZWQgZnJvbSwgbWludXMgaXRzCisJYHJlZnMvPHR5cGU+L2AgcHJlZml4LiBJbiB0aGUgY2FzZSBvZiBkZWxldGlvbiwgdGhlIG5hbWUgb2YKKwl0aGUgcmVtb3RlIHJlZiBpcyAiKG5vbmUpIi4KKwordG86OgorCVRoZSBuYW1lIG9mIHRoZSBsb2NhbCByZWYgYmVpbmcgdXBkYXRlZCwgbWludXMgaXRzCisJYHJlZnMvPHR5cGU+L2AgcHJlZml4LgorCityZWFzb246OgorCUEgaHVtYW4tcmVhZGFibGUgZXhwbGFuYXRpb24uIEluIHRoZSBjYXNlIG9mIHN1Y2Nlc3NmdWxseSBmZXRjaGVkCisJcmVmcywgbm8gZXhwbGFuYXRpb24gaXMgbmVlZGVkLiBGb3IgYSBmYWlsZWQgcmVmLCB0aGUgcmVhc29uIGZvcgorCWZhaWx1cmUgaXMgZGVzY3JpYmVkLgorCitFWEFNUExFUworLS0tLS0tLS0KKworKiBVcGRhdGUgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggb3JpZ2luCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoZSBhYm92ZSBjb21tYW5kIGNvcGllcyBhbGwgYnJhbmNoZXMgZnJvbSB0aGUgcmVtb3RlIHJlZnMvaGVhZHMvCituYW1lc3BhY2UgYW5kIHN0b3JlcyB0aGVtIHRvIHRoZSBsb2NhbCByZWZzL3JlbW90ZXMvb3JpZ2luLyBuYW1lc3BhY2UsCit1bmxlc3MgdGhlIGJyYW5jaC48bmFtZT4uZmV0Y2ggb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSBhIG5vbi1kZWZhdWx0CityZWZzcGVjLgorCisqIFVzaW5nIHJlZnNwZWNzIGV4cGxpY2l0bHk6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoIG9yaWdpbiArcHU6cHUgbWFpbnQ6dG1wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoaXMgdXBkYXRlcyAob3IgY3JlYXRlcywgYXMgbmVjZXNzYXJ5KSBicmFuY2hlcyBgcHVgIGFuZCBgdG1wYCBpbgordGhlIGxvY2FsIHJlcG9zaXRvcnkgYnkgZmV0Y2hpbmcgZnJvbSB0aGUgYnJhbmNoZXMgKHJlc3BlY3RpdmVseSkKK2BwdWAgYW5kIGBtYWludGAgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCisrCitUaGUgYHB1YCBicmFuY2ggd2lsbCBiZSB1cGRhdGVkIGV2ZW4gaWYgaXQgZG9lcyBub3QgZmFzdC1mb3J3YXJkLAorYmVjYXVzZSBpdCBpcyBwcmVmaXhlZCB3aXRoIGEgcGx1cyBzaWduOyBgdG1wYCB3aWxsIG5vdCBiZS4KKworKiBQZWVrIGF0IGEgcmVtb3RlJ3MgYnJhbmNoLCB3aXRob3V0IGNvbmZpZ3VyaW5nIHRoZSByZW1vdGUgaW4geW91ciBsb2NhbAorICByZXBvc2l0b3J5OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0IG1haW50CiskIGdpdCBsb2cgRkVUQ0hfSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGUgZmlyc3QgY29tbWFuZCBmZXRjaGVzIHRoZSBgbWFpbnRgIGJyYW5jaCBmcm9tIHRoZSByZXBvc2l0b3J5IGF0CitgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9naXQvZ2l0LmdpdGAgYW5kIHRoZSBzZWNvbmQgY29tbWFuZCB1c2VzCitgRkVUQ0hfSEVBRGAgdG8gZXhhbWluZSB0aGUgYnJhbmNoIHdpdGggbGlua2dpdDpnaXQtbG9nWzFdLiAgVGhlIGZldGNoZWQKK29iamVjdHMgd2lsbCBldmVudHVhbGx5IGJlIHJlbW92ZWQgYnkgZ2l0J3MgYnVpbHQtaW4gaG91c2VrZWVwaW5nIChzZWUKK2xpbmtnaXQ6Z2l0LWdjWzFdKS4KKworaW5jbHVkZTo6dHJhbnNmZXItZGF0YS1sZWFrcy50eHRbXQorCitCVUdTCistLS0tCitVc2luZyAtLXJlY3Vyc2Utc3VibW9kdWxlcyBjYW4gb25seSBmZXRjaCBuZXcgY29tbWl0cyBpbiBhbHJlYWR5IGNoZWNrZWQKK291dCBzdWJtb2R1bGVzIHJpZ2h0IG5vdy4gV2hlbiBlLmcuIHVwc3RyZWFtIGFkZGVkIGEgbmV3IHN1Ym1vZHVsZSBpbiB0aGUKK2p1c3QgZmV0Y2hlZCBjb21taXRzIG9mIHRoZSBzdXBlcnByb2plY3QgdGhlIHN1Ym1vZHVsZSBpdHNlbGYgY2Fubm90IGJlCitmZXRjaGVkLCBtYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBjaGVjayBvdXQgdGhhdCBzdWJtb2R1bGUgbGF0ZXIgd2l0aG91dAoraGF2aW5nIHRvIGRvIGEgZmV0Y2ggYWdhaW4uIFRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgZml4ZWQgaW4gYSBmdXR1cmUgR2l0Cit2ZXJzaW9uLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXB1bGxbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1maWx0ZXItYnJhbmNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYmE0YWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1maWx0ZXItYnJhbmNoLnR4dApAQCAtMCwwICsxLDcwMyBAQAorZ2l0LWZpbHRlci1icmFuY2goMSkKKz09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1maWx0ZXItYnJhbmNoIC0gUmV3cml0ZSBicmFuY2hlcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZmlsdGVyLWJyYW5jaCcgWy0tc2V0dXAgPGNvbW1hbmQ+XSBbLS1zdWJkaXJlY3RvcnktZmlsdGVyIDxkaXJlY3Rvcnk+XQorCVstLWVudi1maWx0ZXIgPGNvbW1hbmQ+XSBbLS10cmVlLWZpbHRlciA8Y29tbWFuZD5dCisJWy0taW5kZXgtZmlsdGVyIDxjb21tYW5kPl0gWy0tcGFyZW50LWZpbHRlciA8Y29tbWFuZD5dCisJWy0tbXNnLWZpbHRlciA8Y29tbWFuZD5dIFstLWNvbW1pdC1maWx0ZXIgPGNvbW1hbmQ+XQorCVstLXRhZy1uYW1lLWZpbHRlciA8Y29tbWFuZD5dIFstLXBydW5lLWVtcHR5XQorCVstLW9yaWdpbmFsIDxuYW1lc3BhY2U+XSBbLWQgPGRpcmVjdG9yeT5dIFstZiB8IC0tZm9yY2VdCisJWy0tc3RhdGUtYnJhbmNoIDxicmFuY2g+XSBbLS1dIFs8cmV2LWxpc3Qgb3B0aW9ucz4uLi5dCisKK1dBUk5JTkcKKy0tLS0tLS0KKydnaXQgZmlsdGVyLWJyYW5jaCcgaGFzIGEgcGxldGhvcmEgb2YgcGl0ZmFsbHMgdGhhdCBjYW4gcHJvZHVjZSBub24tb2J2aW91cworbWFuZ2xpbmdzIG9mIHRoZSBpbnRlbmRlZCBoaXN0b3J5IHJld3JpdGUgKGFuZCBjYW4gbGVhdmUgeW91IHdpdGggbGl0dGxlCit0aW1lIHRvIGludmVzdGlnYXRlIHN1Y2ggcHJvYmxlbXMgc2luY2UgaXQgaGFzIHN1Y2ggYWJ5c21hbCBwZXJmb3JtYW5jZSkuCitUaGVzZSBzYWZldHkgYW5kIHBlcmZvcm1hbmNlIGlzc3VlcyBjYW5ub3QgYmUgYmFja3dhcmQgY29tcGF0aWJseSBmaXhlZCBhbmQKK2FzIHN1Y2gsIGl0cyB1c2UgaXMgbm90IHJlY29tbWVuZGVkLiAgUGxlYXNlIHVzZSBhbiBhbHRlcm5hdGl2ZSBoaXN0b3J5CitmaWx0ZXJpbmcgdG9vbCBzdWNoIGFzIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXdyZW4vZ2l0LWZpbHRlci1yZXBvL1tnaXQKK2ZpbHRlci1yZXBvXS4gIElmIHlvdSBzdGlsbCBuZWVkIHRvIHVzZSAnZ2l0IGZpbHRlci1icmFuY2gnLCBwbGVhc2UKK2NhcmVmdWxseSByZWFkIDw8U0FGRVRZPj4gKGFuZCA8PFBFUkZPUk1BTkNFPj4pIHRvIGxlYXJuIGFib3V0IHRoZSBsYW5kCittaW5lcyBvZiBmaWx0ZXItYnJhbmNoLCBhbmQgdGhlbiB2aWdpbGFudGx5IGF2b2lkIGFzIG1hbnkgb2YgdGhlIGhhemFyZHMKK2xpc3RlZCB0aGVyZSBhcyByZWFzb25hYmx5IHBvc3NpYmxlLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0xldHMgeW91IHJld3JpdGUgR2l0IHJldmlzaW9uIGhpc3RvcnkgYnkgcmV3cml0aW5nIHRoZSBicmFuY2hlcyBtZW50aW9uZWQKK2luIHRoZSA8cmV2LWxpc3Qgb3B0aW9ucz4sIGFwcGx5aW5nIGN1c3RvbSBmaWx0ZXJzIG9uIGVhY2ggcmV2aXNpb24uCitUaG9zZSBmaWx0ZXJzIGNhbiBtb2RpZnkgZWFjaCB0cmVlIChlLmcuIHJlbW92aW5nIGEgZmlsZSBvciBydW5uaW5nCithIHBlcmwgcmV3cml0ZSBvbiBhbGwgZmlsZXMpIG9yIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggY29tbWl0LgorT3RoZXJ3aXNlLCBhbGwgaW5mb3JtYXRpb24gKGluY2x1ZGluZyBvcmlnaW5hbCBjb21taXQgdGltZXMgb3IgbWVyZ2UKK2luZm9ybWF0aW9uKSB3aWxsIGJlIHByZXNlcnZlZC4KKworVGhlIGNvbW1hbmQgd2lsbCBvbmx5IHJld3JpdGUgdGhlIF9wb3NpdGl2ZV8gcmVmcyBtZW50aW9uZWQgaW4gdGhlCitjb21tYW5kIGxpbmUgKGUuZy4gaWYgeW91IHBhc3MgJ2EuLmInLCBvbmx5ICdiJyB3aWxsIGJlIHJld3JpdHRlbikuCitJZiB5b3Ugc3BlY2lmeSBubyBmaWx0ZXJzLCB0aGUgY29tbWl0cyB3aWxsIGJlIHJlY29tbWl0dGVkIHdpdGhvdXQgYW55CitjaGFuZ2VzLCB3aGljaCB3b3VsZCBub3JtYWxseSBoYXZlIG5vIGVmZmVjdC4gIE5ldmVydGhlbGVzcywgdGhpcyBtYXkgYmUKK3VzZWZ1bCBpbiB0aGUgZnV0dXJlIGZvciBjb21wZW5zYXRpbmcgZm9yIHNvbWUgR2l0IGJ1Z3Mgb3Igc3VjaCwKK3RoZXJlZm9yZSBzdWNoIGEgdXNhZ2UgaXMgcGVybWl0dGVkLgorCisqTk9URSo6IFRoaXMgY29tbWFuZCBob25vcnMgYC5naXQvaW5mby9ncmFmdHNgIGZpbGUgYW5kIHJlZnMgaW4KK3RoZSBgcmVmcy9yZXBsYWNlL2AgbmFtZXNwYWNlLgorSWYgeW91IGhhdmUgYW55IGdyYWZ0cyBvciByZXBsYWNlbWVudCByZWZzIGRlZmluZWQsIHJ1bm5pbmcgdGhpcyBjb21tYW5kCit3aWxsIG1ha2UgdGhlbSBwZXJtYW5lbnQuCisKKypXQVJOSU5HKiEgVGhlIHJld3JpdHRlbiBoaXN0b3J5IHdpbGwgaGF2ZSBkaWZmZXJlbnQgb2JqZWN0IG5hbWVzIGZvciBhbGwKK3RoZSBvYmplY3RzIGFuZCB3aWxsIG5vdCBjb252ZXJnZSB3aXRoIHRoZSBvcmlnaW5hbCBicmFuY2guICBZb3Ugd2lsbCBub3QKK2JlIGFibGUgdG8gZWFzaWx5IHB1c2ggYW5kIGRpc3RyaWJ1dGUgdGhlIHJld3JpdHRlbiBicmFuY2ggb24gdG9wIG9mIHRoZQorb3JpZ2luYWwgYnJhbmNoLiAgUGxlYXNlIGRvIG5vdCB1c2UgdGhpcyBjb21tYW5kIGlmIHlvdSBkbyBub3Qga25vdyB0aGUKK2Z1bGwgaW1wbGljYXRpb25zLCBhbmQgYXZvaWQgdXNpbmcgaXQgYW55d2F5LCBpZiBhIHNpbXBsZSBzaW5nbGUgY29tbWl0Cit3b3VsZCBzdWZmaWNlIHRvIGZpeCB5b3VyIHByb2JsZW0uICAoU2VlIHRoZSAiUkVDT1ZFUklORyBGUk9NIFVQU1RSRUFNCitSRUJBU0UiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXQtcmViYXNlWzFdIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0CityZXdyaXRpbmcgcHVibGlzaGVkIGhpc3RvcnkuKQorCitBbHdheXMgdmVyaWZ5IHRoYXQgdGhlIHJld3JpdHRlbiB2ZXJzaW9uIGlzIGNvcnJlY3Q6IFRoZSBvcmlnaW5hbCByZWZzLAoraWYgZGlmZmVyZW50IGZyb20gdGhlIHJld3JpdHRlbiBvbmVzLCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgbmFtZXNwYWNlCisncmVmcy9vcmlnaW5hbC8nLgorCitOb3RlIHRoYXQgc2luY2UgdGhpcyBvcGVyYXRpb24gaXMgdmVyeSBJL08gZXhwZW5zaXZlLCBpdCBtaWdodAorYmUgYSBnb29kIGlkZWEgdG8gcmVkaXJlY3QgdGhlIHRlbXBvcmFyeSBkaXJlY3Rvcnkgb2ZmLWRpc2sgd2l0aCB0aGUKK2AtZGAgb3B0aW9uLCBlLmcuIG9uIHRtcGZzLiAgUmVwb3J0ZWRseSB0aGUgc3BlZWR1cCBpcyB2ZXJ5IG5vdGljZWFibGUuCisKKworRmlsdGVycworfn5+fn5+fgorCitUaGUgZmlsdGVycyBhcmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgYXMgbGlzdGVkIGJlbG93LiAgVGhlIDxjb21tYW5kPgorYXJndW1lbnQgaXMgYWx3YXlzIGV2YWx1YXRlZCBpbiB0aGUgc2hlbGwgY29udGV4dCB1c2luZyB0aGUgJ2V2YWwnIGNvbW1hbmQKKyh3aXRoIHRoZSBub3RhYmxlIGV4Y2VwdGlvbiBvZiB0aGUgY29tbWl0IGZpbHRlciwgZm9yIHRlY2huaWNhbCByZWFzb25zKS4KK1ByaW9yIHRvIHRoYXQsIHRoZSBgJEdJVF9DT01NSVRgIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIGNvbnRhaW4KK3RoZSBpZCBvZiB0aGUgY29tbWl0IGJlaW5nIHJld3JpdHRlbi4gIEFsc28sIEdJVF9BVVRIT1JfTkFNRSwKK0dJVF9BVVRIT1JfRU1BSUwsIEdJVF9BVVRIT1JfREFURSwgR0lUX0NPTU1JVFRFUl9OQU1FLCBHSVRfQ09NTUlUVEVSX0VNQUlMLAorYW5kIEdJVF9DT01NSVRURVJfREFURSBhcmUgdGFrZW4gZnJvbSB0aGUgY3VycmVudCBjb21taXQgYW5kIGV4cG9ydGVkIHRvCit0aGUgZW52aXJvbm1lbnQsIGluIG9yZGVyIHRvIGFmZmVjdCB0aGUgYXV0aG9yIGFuZCBjb21taXR0ZXIgaWRlbnRpdGllcyBvZgordGhlIHJlcGxhY2VtZW50IGNvbW1pdCBjcmVhdGVkIGJ5IGxpbmtnaXQ6Z2l0LWNvbW1pdC10cmVlWzFdIGFmdGVyIHRoZQorZmlsdGVycyBoYXZlIHJ1bi4KKworSWYgYW55IGV2YWx1YXRpb24gb2YgPGNvbW1hbmQ+IHJldHVybnMgYSBub24temVybyBleGl0IHN0YXR1cywgdGhlIHdob2xlCitvcGVyYXRpb24gd2lsbCBiZSBhYm9ydGVkLgorCitBICdtYXAnIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSB0aGF0IHRha2VzIGFuICJvcmlnaW5hbCBzaGExIGlkIiBhcmd1bWVudAorYW5kIG91dHB1dHMgYSAicmV3cml0dGVuIHNoYTEgaWQiIGlmIHRoZSBjb21taXQgaGFzIGJlZW4gYWxyZWFkeQorcmV3cml0dGVuLCBhbmQgIm9yaWdpbmFsIHNoYTEgaWQiIG90aGVyd2lzZTsgdGhlICdtYXAnIGZ1bmN0aW9uIGNhbgorcmV0dXJuIHNldmVyYWwgaWRzIG9uIHNlcGFyYXRlIGxpbmVzIGlmIHlvdXIgY29tbWl0IGZpbHRlciBlbWl0dGVkCittdWx0aXBsZSBjb21taXRzLgorCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1zZXR1cCA8Y29tbWFuZD46OgorCVRoaXMgaXMgbm90IGEgcmVhbCBmaWx0ZXIgZXhlY3V0ZWQgZm9yIGVhY2ggY29tbWl0IGJ1dCBhIG9uZQorCXRpbWUgc2V0dXAganVzdCBiZWZvcmUgdGhlIGxvb3AuIFRoZXJlZm9yZSBubyBjb21taXQtc3BlY2lmaWMKKwl2YXJpYWJsZXMgYXJlIGRlZmluZWQgeWV0LiAgRnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBkZWZpbmVkIGhlcmUKKwljYW4gYmUgdXNlZCBvciBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIGZpbHRlciBzdGVwcyBleGNlcHQKKwl0aGUgY29tbWl0IGZpbHRlciwgZm9yIHRlY2huaWNhbCByZWFzb25zLgorCistLXN1YmRpcmVjdG9yeS1maWx0ZXIgPGRpcmVjdG9yeT46OgorCU9ubHkgbG9vayBhdCB0aGUgaGlzdG9yeSB3aGljaCB0b3VjaGVzIHRoZSBnaXZlbiBzdWJkaXJlY3RvcnkuCisJVGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gdGhhdCBkaXJlY3RvcnkgKGFuZCBvbmx5IHRoYXQpIGFzIGl0cworCXByb2plY3Qgcm9vdC4gSW1wbGllcyA8PFJlbWFwX3RvX2FuY2VzdG9yPj4uCisKKy0tZW52LWZpbHRlciA8Y29tbWFuZD46OgorCVRoaXMgZmlsdGVyIG1heSBiZSB1c2VkIGlmIHlvdSBvbmx5IG5lZWQgdG8gbW9kaWZ5IHRoZSBlbnZpcm9ubWVudAorCWluIHdoaWNoIHRoZSBjb21taXQgd2lsbCBiZSBwZXJmb3JtZWQuICBTcGVjaWZpY2FsbHksIHlvdSBtaWdodAorCXdhbnQgdG8gcmV3cml0ZSB0aGUgYXV0aG9yL2NvbW1pdHRlciBuYW1lL2VtYWlsL3RpbWUgZW52aXJvbm1lbnQKKwl2YXJpYWJsZXMgKHNlZSBsaW5rZ2l0OmdpdC1jb21taXQtdHJlZVsxXSBmb3IgZGV0YWlscykuCisKKy0tdHJlZS1maWx0ZXIgPGNvbW1hbmQ+OjoKKwlUaGlzIGlzIHRoZSBmaWx0ZXIgZm9yIHJld3JpdGluZyB0aGUgdHJlZSBhbmQgaXRzIGNvbnRlbnRzLgorCVRoZSBhcmd1bWVudCBpcyBldmFsdWF0ZWQgaW4gc2hlbGwgd2l0aCB0aGUgd29ya2luZworCWRpcmVjdG9yeSBzZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIGNoZWNrZWQgb3V0IHRyZWUuICBUaGUgbmV3IHRyZWUKKwlpcyB0aGVuIHVzZWQgYXMtaXMgKG5ldyBmaWxlcyBhcmUgYXV0by1hZGRlZCwgZGlzYXBwZWFyZWQgZmlsZXMKKwlhcmUgYXV0by1yZW1vdmVkIC0gbmVpdGhlciAuZ2l0aWdub3JlIGZpbGVzIG5vciBhbnkgb3RoZXIgaWdub3JlCisJcnVsZXMgKkhBVkUgQU5ZIEVGRkVDVCohKS4KKworLS1pbmRleC1maWx0ZXIgPGNvbW1hbmQ+OjoKKwlUaGlzIGlzIHRoZSBmaWx0ZXIgZm9yIHJld3JpdGluZyB0aGUgaW5kZXguICBJdCBpcyBzaW1pbGFyIHRvIHRoZQorCXRyZWUgZmlsdGVyIGJ1dCBkb2VzIG5vdCBjaGVjayBvdXQgdGhlIHRyZWUsIHdoaWNoIG1ha2VzIGl0IG11Y2gKKwlmYXN0ZXIuICBGcmVxdWVudGx5IHVzZWQgd2l0aCBgZ2l0IHJtIC0tY2FjaGVkCisJLS1pZ25vcmUtdW5tYXRjaCAuLi5gLCBzZWUgRVhBTVBMRVMgYmVsb3cuICBGb3IgaGFpcnkKKwljYXNlcywgc2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXS4KKworLS1wYXJlbnQtZmlsdGVyIDxjb21tYW5kPjo6CisJVGhpcyBpcyB0aGUgZmlsdGVyIGZvciByZXdyaXRpbmcgdGhlIGNvbW1pdCdzIHBhcmVudCBsaXN0LgorCUl0IHdpbGwgcmVjZWl2ZSB0aGUgcGFyZW50IHN0cmluZyBvbiBzdGRpbiBhbmQgc2hhbGwgb3V0cHV0CisJdGhlIG5ldyBwYXJlbnQgc3RyaW5nIG9uIHN0ZG91dC4gIFRoZSBwYXJlbnQgc3RyaW5nIGlzIGluCisJdGhlIGZvcm1hdCBkZXNjcmliZWQgaW4gbGlua2dpdDpnaXQtY29tbWl0LXRyZWVbMV06IGVtcHR5IGZvcgorCXRoZSBpbml0aWFsIGNvbW1pdCwgIi1wIHBhcmVudCIgZm9yIGEgbm9ybWFsIGNvbW1pdCBhbmQKKwkiLXAgcGFyZW50MSAtcCBwYXJlbnQyIC1wIHBhcmVudDMgLi4uIiBmb3IgYSBtZXJnZSBjb21taXQuCisKKy0tbXNnLWZpbHRlciA8Y29tbWFuZD46OgorCVRoaXMgaXMgdGhlIGZpbHRlciBmb3IgcmV3cml0aW5nIHRoZSBjb21taXQgbWVzc2FnZXMuCisJVGhlIGFyZ3VtZW50IGlzIGV2YWx1YXRlZCBpbiB0aGUgc2hlbGwgd2l0aCB0aGUgb3JpZ2luYWwKKwljb21taXQgbWVzc2FnZSBvbiBzdGFuZGFyZCBpbnB1dDsgaXRzIHN0YW5kYXJkIG91dHB1dCBpcworCXVzZWQgYXMgdGhlIG5ldyBjb21taXQgbWVzc2FnZS4KKworLS1jb21taXQtZmlsdGVyIDxjb21tYW5kPjo6CisJVGhpcyBpcyB0aGUgZmlsdGVyIGZvciBwZXJmb3JtaW5nIHRoZSBjb21taXQuCisJSWYgdGhpcyBmaWx0ZXIgaXMgc3BlY2lmaWVkLCBpdCB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkIG9mIHRoZQorCSdnaXQgY29tbWl0LXRyZWUnIGNvbW1hbmQsIHdpdGggYXJndW1lbnRzIG9mIHRoZSBmb3JtCisJIjxUUkVFX0lEPiBbKC1wIDxQQVJFTlRfQ09NTUlUX0lEPikuLi5dIiBhbmQgdGhlIGxvZyBtZXNzYWdlIG9uCisJc3RkaW4uICBUaGUgY29tbWl0IGlkIGlzIGV4cGVjdGVkIG9uIHN0ZG91dC4KKysKK0FzIGEgc3BlY2lhbCBleHRlbnNpb24sIHRoZSBjb21taXQgZmlsdGVyIG1heSBlbWl0IG11bHRpcGxlCitjb21taXQgaWRzOyBpbiB0aGF0IGNhc2UsIHRoZSByZXdyaXR0ZW4gY2hpbGRyZW4gb2YgdGhlIG9yaWdpbmFsIGNvbW1pdCB3aWxsCitoYXZlIGFsbCBvZiB0aGVtIGFzIHBhcmVudHMuCisrCitZb3UgY2FuIHVzZSB0aGUgJ21hcCcgY29udmVuaWVuY2UgZnVuY3Rpb24gaW4gdGhpcyBmaWx0ZXIsIGFuZCBvdGhlcgorY29udmVuaWVuY2UgZnVuY3Rpb25zLCB0b28uICBGb3IgZXhhbXBsZSwgY2FsbGluZyAnc2tpcF9jb21taXQgIiRAIicKK3dpbGwgbGVhdmUgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCAoYnV0IG5vdCBpdHMgY2hhbmdlcyEgSWYgeW91IHdhbnQKK3RoYXQsIHVzZSAnZ2l0IHJlYmFzZScgaW5zdGVhZCkuCisrCitZb3UgY2FuIGFsc28gdXNlIHRoZSBgZ2l0X2NvbW1pdF9ub25fZW1wdHlfdHJlZSAiJEAiYCBpbnN0ZWFkIG9mCitgZ2l0IGNvbW1pdC10cmVlICIkQCJgIGlmIHlvdSBkb24ndCB3aXNoIHRvIGtlZXAgY29tbWl0cyB3aXRoIGEgc2luZ2xlIHBhcmVudAorYW5kIHRoYXQgbWFrZXMgbm8gY2hhbmdlIHRvIHRoZSB0cmVlLgorCistLXRhZy1uYW1lLWZpbHRlciA8Y29tbWFuZD46OgorCVRoaXMgaXMgdGhlIGZpbHRlciBmb3IgcmV3cml0aW5nIHRhZyBuYW1lcy4gV2hlbiBwYXNzZWQsCisJaXQgd2lsbCBiZSBjYWxsZWQgZm9yIGV2ZXJ5IHRhZyByZWYgdGhhdCBwb2ludHMgdG8gYSByZXdyaXR0ZW4KKwlvYmplY3QgKG9yIHRvIGEgdGFnIG9iamVjdCB3aGljaCBwb2ludHMgdG8gYSByZXdyaXR0ZW4gb2JqZWN0KS4KKwlUaGUgb3JpZ2luYWwgdGFnIG5hbWUgaXMgcGFzc2VkIHZpYSBzdGFuZGFyZCBpbnB1dCwgYW5kIHRoZSBuZXcKKwl0YWcgbmFtZSBpcyBleHBlY3RlZCBvbiBzdGFuZGFyZCBvdXRwdXQuCisrCitUaGUgb3JpZ2luYWwgdGFncyBhcmUgbm90IGRlbGV0ZWQsIGJ1dCBjYW4gYmUgb3ZlcndyaXR0ZW47Cit1c2UgIi0tdGFnLW5hbWUtZmlsdGVyIGNhdCIgdG8gc2ltcGx5IHVwZGF0ZSB0aGUgdGFncy4gIEluIHRoaXMKK2Nhc2UsIGJlIHZlcnkgY2FyZWZ1bCBhbmQgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBvbGQgdGFncworYmFja2VkIHVwIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gaGFzIHJ1biBhZm91bC4KKysKK05lYXJseSBwcm9wZXIgcmV3cml0aW5nIG9mIHRhZyBvYmplY3RzIGlzIHN1cHBvcnRlZC4gSWYgdGhlIHRhZyBoYXMKK2EgbWVzc2FnZSBhdHRhY2hlZCwgYSBuZXcgdGFnIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGUgc2FtZSBtZXNzYWdlLAorYXV0aG9yLCBhbmQgdGltZXN0YW1wLiBJZiB0aGUgdGFnIGhhcyBhIHNpZ25hdHVyZSBhdHRhY2hlZCwgdGhlCitzaWduYXR1cmUgd2lsbCBiZSBzdHJpcHBlZC4gSXQgaXMgYnkgZGVmaW5pdGlvbiBpbXBvc3NpYmxlIHRvIHByZXNlcnZlCitzaWduYXR1cmVzLiBUaGUgcmVhc29uIHRoaXMgaXMgIm5lYXJseSIgcHJvcGVyLCBpcyBiZWNhdXNlIGlkZWFsbHkgaWYKK3RoZSB0YWcgZGlkIG5vdCBjaGFuZ2UgKHBvaW50cyB0byB0aGUgc2FtZSBvYmplY3QsIGhhcyB0aGUgc2FtZSBuYW1lLCBldGMuKQoraXQgc2hvdWxkIHJldGFpbiBhbnkgc2lnbmF0dXJlLiBUaGF0IGlzIG5vdCB0aGUgY2FzZSwgc2lnbmF0dXJlcyB3aWxsIGFsd2F5cworYmUgcmVtb3ZlZCwgYnV5ZXIgYmV3YXJlLiBUaGVyZSBpcyBhbHNvIG5vIHN1cHBvcnQgZm9yIGNoYW5naW5nIHRoZQorYXV0aG9yIG9yIHRpbWVzdGFtcCAob3IgdGhlIHRhZyBtZXNzYWdlIGZvciB0aGF0IG1hdHRlcikuIFRhZ3Mgd2hpY2ggcG9pbnQKK3RvIG90aGVyIHRhZ3Mgd2lsbCBiZSByZXdyaXR0ZW4gdG8gcG9pbnQgdG8gdGhlIHVuZGVybHlpbmcgY29tbWl0LgorCistLXBydW5lLWVtcHR5OjoKKwlTb21lIGZpbHRlcnMgd2lsbCBnZW5lcmF0ZSBlbXB0eSBjb21taXRzIHRoYXQgbGVhdmUgdGhlIHRyZWUgdW50b3VjaGVkLgorCVRoaXMgb3B0aW9uIGluc3RydWN0cyBnaXQtZmlsdGVyLWJyYW5jaCB0byByZW1vdmUgc3VjaCBjb21taXRzIGlmIHRoZXkKKwloYXZlIGV4YWN0bHkgb25lIG9yIHplcm8gbm9uLXBydW5lZCBwYXJlbnRzOyBtZXJnZSBjb21taXRzIHdpbGwKKwl0aGVyZWZvcmUgcmVtYWluIGludGFjdC4gIFRoaXMgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKKwlgLS1jb21taXQtZmlsdGVyYCwgdGhvdWdoIHRoZSBzYW1lIGVmZmVjdCBjYW4gYmUgYWNoaWV2ZWQgYnkgdXNpbmcgdGhlCisJcHJvdmlkZWQgYGdpdF9jb21taXRfbm9uX2VtcHR5X3RyZWVgIGZ1bmN0aW9uIGluIGEgY29tbWl0IGZpbHRlci4KKworLS1vcmlnaW5hbCA8bmFtZXNwYWNlPjo6CisJVXNlIHRoaXMgb3B0aW9uIHRvIHNldCB0aGUgbmFtZXNwYWNlIHdoZXJlIHRoZSBvcmlnaW5hbCBjb21taXRzCisJd2lsbCBiZSBzdG9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzICdyZWZzL29yaWdpbmFsJy4KKworLWQgPGRpcmVjdG9yeT46OgorCVVzZSB0aGlzIG9wdGlvbiB0byBzZXQgdGhlIHBhdGggdG8gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgdXNlZCBmb3IKKwlyZXdyaXRpbmcuICBXaGVuIGFwcGx5aW5nIGEgdHJlZSBmaWx0ZXIsIHRoZSBjb21tYW5kIG5lZWRzIHRvCisJdGVtcG9yYXJpbHkgY2hlY2sgb3V0IHRoZSB0cmVlIHRvIHNvbWUgZGlyZWN0b3J5LCB3aGljaCBtYXkgY29uc3VtZQorCWNvbnNpZGVyYWJsZSBzcGFjZSBpbiBjYXNlIG9mIGxhcmdlIHByb2plY3RzLiAgQnkgZGVmYXVsdCBpdAorCWRvZXMgdGhpcyBpbiB0aGUgYC5naXQtcmV3cml0ZS9gIGRpcmVjdG9yeSBidXQgeW91IGNhbiBvdmVycmlkZQorCXRoYXQgY2hvaWNlIGJ5IHRoaXMgcGFyYW1ldGVyLgorCistZjo6CistLWZvcmNlOjoKKwknZ2l0IGZpbHRlci1icmFuY2gnIHJlZnVzZXMgdG8gc3RhcnQgd2l0aCBhbiBleGlzdGluZyB0ZW1wb3JhcnkKKwlkaXJlY3Rvcnkgb3Igd2hlbiB0aGVyZSBhcmUgYWxyZWFkeSByZWZzIHN0YXJ0aW5nIHdpdGgKKwkncmVmcy9vcmlnaW5hbC8nLCB1bmxlc3MgZm9yY2VkLgorCistLXN0YXRlLWJyYW5jaCA8YnJhbmNoPjo6CisJVGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUgbWFwcGluZyBmcm9tIG9sZCB0byBuZXcgb2JqZWN0cyB0bworCWJlIGxvYWRlZCBmcm9tIG5hbWVkIGJyYW5jaCB1cG9uIHN0YXJ0dXAgYW5kIHNhdmVkIGFzIGEgbmV3CisJY29tbWl0IHRvIHRoYXQgYnJhbmNoIHVwb24gZXhpdCwgZW5hYmxpbmcgaW5jcmVtZW50YWwgb2YgbGFyZ2UKKwl0cmVlcy4gSWYgJzxicmFuY2g+JyBkb2VzIG5vdCBleGlzdCBpdCB3aWxsIGJlIGNyZWF0ZWQuCisKKzxyZXYtbGlzdCBvcHRpb25zPi4uLjo6CisJQXJndW1lbnRzIGZvciAnZ2l0IHJldi1saXN0Jy4gIEFsbCBwb3NpdGl2ZSByZWZzIGluY2x1ZGVkIGJ5CisJdGhlc2Ugb3B0aW9ucyBhcmUgcmV3cml0dGVuLiAgWW91IG1heSBhbHNvIHNwZWNpZnkgb3B0aW9ucworCXN1Y2ggYXMgYC0tYWxsYCwgYnV0IHlvdSBtdXN0IHVzZSBgLS1gIHRvIHNlcGFyYXRlIHRoZW0gZnJvbQorCXRoZSAnZ2l0IGZpbHRlci1icmFuY2gnIG9wdGlvbnMuIEltcGxpZXMgPDxSZW1hcF90b19hbmNlc3Rvcj4+LgorCisKK1tbUmVtYXBfdG9fYW5jZXN0b3JdXQorUmVtYXAgdG8gYW5jZXN0b3IKK35+fn5+fn5+fn5+fn5+fn5+CisKK0J5IHVzaW5nIGxpbmtnaXQ6Z2l0LXJldi1saXN0WzFdIGFyZ3VtZW50cywgZS5nLiwgcGF0aCBsaW1pdGVycywgeW91IGNhbiBsaW1pdCB0aGUKK3NldCBvZiByZXZpc2lvbnMgd2hpY2ggZ2V0IHJld3JpdHRlbi4gSG93ZXZlciwgcG9zaXRpdmUgcmVmcyBvbiB0aGUgY29tbWFuZAorbGluZSBhcmUgZGlzdGluZ3Vpc2hlZDogd2UgZG9uJ3QgbGV0IHRoZW0gYmUgZXhjbHVkZWQgYnkgc3VjaCBsaW1pdGVycy4gRm9yCit0aGlzIHB1cnBvc2UsIHRoZXkgYXJlIGluc3RlYWQgcmV3cml0dGVuIHRvIHBvaW50IGF0IHRoZSBuZWFyZXN0IGFuY2VzdG9yIHRoYXQKK3dhcyBub3QgZXhjbHVkZWQuCisKKworRVhJVCBTVEFUVVMKKy0tLS0tLS0tLS0tCisKK09uIHN1Y2Nlc3MsIHRoZSBleGl0IHN0YXR1cyBpcyBgMGAuICBJZiB0aGUgZmlsdGVyIGNhbid0IGZpbmQgYW55IGNvbW1pdHMgdG8KK3Jld3JpdGUsIHRoZSBleGl0IHN0YXR1cyBpcyBgMmAuICBPbiBhbnkgb3RoZXIgZXJyb3IsIHRoZSBleGl0IHN0YXR1cyBtYXkgYmUKK2FueSBvdGhlciBub24temVybyB2YWx1ZS4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworU3VwcG9zZSB5b3Ugd2FudCB0byByZW1vdmUgYSBmaWxlIChjb250YWluaW5nIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbgorb3IgY29weXJpZ2h0IHZpb2xhdGlvbikgZnJvbSBhbGwgY29tbWl0czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLS10cmVlLWZpbHRlciAncm0gZmlsZW5hbWUnIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSG93ZXZlciwgaWYgdGhlIGZpbGUgaXMgYWJzZW50IGZyb20gdGhlIHRyZWUgb2Ygc29tZSBjb21taXQsCithIHNpbXBsZSBgcm0gZmlsZW5hbWVgIHdpbGwgZmFpbCBmb3IgdGhhdCB0cmVlIGFuZCBjb21taXQuCitUaHVzIHlvdSBtYXkgaW5zdGVhZCB3YW50IHRvIHVzZSBgcm0gLWYgZmlsZW5hbWVgIGFzIHRoZSBzY3JpcHQuCisKK1VzaW5nIGAtLWluZGV4LWZpbHRlcmAgd2l0aCAnZ2l0IHJtJyB5aWVsZHMgYSBzaWduaWZpY2FudGx5IGZhc3RlcgordmVyc2lvbi4gIExpa2Ugd2l0aCB1c2luZyBgcm0gZmlsZW5hbWVgLCBgZ2l0IHJtIC0tY2FjaGVkIGZpbGVuYW1lYAord2lsbCBmYWlsIGlmIHRoZSBmaWxlIGlzIGFic2VudCBmcm9tIHRoZSB0cmVlIG9mIGEgY29tbWl0LiAgSWYgeW91Cit3YW50IHRvICJjb21wbGV0ZWx5IGZvcmdldCIgYSBmaWxlLCBpdCBkb2VzIG5vdCBtYXR0ZXIgd2hlbiBpdCBlbnRlcmVkCitoaXN0b3J5LCBzbyB3ZSBhbHNvIGFkZCBgLS1pZ25vcmUtdW5tYXRjaGA6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgZmlsdGVyLWJyYW5jaCAtLWluZGV4LWZpbHRlciAnZ2l0IHJtIC0tY2FjaGVkIC0taWdub3JlLXVubWF0Y2ggZmlsZW5hbWUnIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdywgeW91IHdpbGwgZ2V0IHRoZSByZXdyaXR0ZW4gaGlzdG9yeSBzYXZlZCBpbiBIRUFELgorCitUbyByZXdyaXRlIHRoZSByZXBvc2l0b3J5IHRvIGxvb2sgYXMgaWYgYGZvb2Rpci9gIGhhZCBiZWVuIGl0cyBwcm9qZWN0Cityb290LCBhbmQgZGlzY2FyZCBhbGwgb3RoZXIgaGlzdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLS1zdWJkaXJlY3RvcnktZmlsdGVyIGZvb2RpciAtLSAtLWFsbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaHVzIHlvdSBjYW4sIGUuZy4sIHR1cm4gYSBsaWJyYXJ5IHN1YmRpcmVjdG9yeSBpbnRvIGEgcmVwb3NpdG9yeSBvZgoraXRzIG93bi4gIE5vdGUgdGhlIGAtLWAgdGhhdCBzZXBhcmF0ZXMgJ2ZpbHRlci1icmFuY2gnIG9wdGlvbnMgZnJvbQorcmV2aXNpb24gb3B0aW9ucywgYW5kIHRoZSBgLS1hbGxgIHRvIHJld3JpdGUgYWxsIGJyYW5jaGVzIGFuZCB0YWdzLgorCitUbyBzZXQgYSBjb21taXQgKHdoaWNoIHR5cGljYWxseSBpcyBhdCB0aGUgdGlwIG9mIGFub3RoZXIKK2hpc3RvcnkpIHRvIGJlIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgaW5pdGlhbCBjb21taXQsIGluCitvcmRlciB0byBwYXN0ZSB0aGUgb3RoZXIgaGlzdG9yeSBiZWhpbmQgdGhlIGN1cnJlbnQgaGlzdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLS1wYXJlbnQtZmlsdGVyICdzZWQgInMvXlwkLy1wIDxncmFmdC1pZD4vIicgSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoaWYgdGhlIHBhcmVudCBzdHJpbmcgaXMgZW1wdHkgLSB3aGljaCBoYXBwZW5zIHdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aAordGhlIGluaXRpYWwgY29tbWl0IC0gYWRkIGdyYWZ0Y29tbWl0IGFzIGEgcGFyZW50KS4gIE5vdGUgdGhhdCB0aGlzIGFzc3VtZXMKK2hpc3Rvcnkgd2l0aCBhIHNpbmdsZSByb290ICh0aGF0IGlzLCBubyBtZXJnZSB3aXRob3V0IGNvbW1vbiBhbmNlc3RvcnMKK2hhcHBlbmVkKS4gIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCB1c2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgZmlsdGVyLWJyYW5jaCAtLXBhcmVudC1maWx0ZXIgXAorCSd0ZXN0ICRHSVRfQ09NTUlUID0gPGNvbW1pdC1pZD4gJiYgZWNobyAiLXAgPGdyYWZ0LWlkPiIgfHwgY2F0JyBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvciBldmVuIHNpbXBsZXI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgcmVwbGFjZSAtLWdyYWZ0ICRjb21taXQtaWQgJGdyYWZ0LWlkCitnaXQgZmlsdGVyLWJyYW5jaCAkZ3JhZnQtaWQuLkhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHJlbW92ZSBjb21taXRzIGF1dGhvcmVkIGJ5ICJEYXJsIE1jQnJpYmUiIGZyb20gdGhlIGhpc3Rvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLS1jb21taXQtZmlsdGVyICcKKwlpZiBbICIkR0lUX0FVVEhPUl9OQU1FIiA9ICJEYXJsIE1jQnJpYmUiIF07CisJdGhlbgorCQlza2lwX2NvbW1pdCAiJEAiOworCWVsc2UKKwkJZ2l0IGNvbW1pdC10cmVlICIkQCI7CisJZmknIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZnVuY3Rpb24gJ3NraXBfY29tbWl0JyBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitza2lwX2NvbW1pdCgpCit7CisJc2hpZnQ7CisJd2hpbGUgWyAtbiAiJDEiIF07CisJZG8KKwkJc2hpZnQ7CisJCW1hcCAiJDEiOworCQlzaGlmdDsKKwlkb25lOworfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHNoaWZ0IG1hZ2ljIGZpcnN0IHRocm93cyBhd2F5IHRoZSB0cmVlIGlkIGFuZCB0aGVuIHRoZSAtcAorcGFyYW1ldGVycy4gIE5vdGUgdGhhdCB0aGlzIGhhbmRsZXMgbWVyZ2VzIHByb3Blcmx5ISBJbiBjYXNlIERhcmwKK2NvbW1pdHRlZCBhIG1lcmdlIGJldHdlZW4gUDEgYW5kIFAyLCBpdCB3aWxsIGJlIHByb3BhZ2F0ZWQgcHJvcGVybHkKK2FuZCBhbGwgY2hpbGRyZW4gb2YgdGhlIG1lcmdlIHdpbGwgYmVjb21lIG1lcmdlIGNvbW1pdHMgd2l0aCBQMSxQMgorYXMgdGhlaXIgcGFyZW50cyBpbnN0ZWFkIG9mIHRoZSBtZXJnZSBjb21taXQuCisKKypOT1RFKiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBjb21taXRzLCBhbmQgd2hpY2ggYXJlIG5vdCByZXZlcnRlZAorYnkgc3Vic2VxdWVudCBjb21taXRzLCB3aWxsIHN0aWxsIGJlIGluIHRoZSByZXdyaXR0ZW4gYnJhbmNoLiBJZiB5b3Ugd2FudAordG8gdGhyb3cgb3V0IF9jaGFuZ2VzXyB0b2dldGhlciB3aXRoIHRoZSBjb21taXRzLCB5b3Ugc2hvdWxkIHVzZSB0aGUKK2ludGVyYWN0aXZlIG1vZGUgb2YgJ2dpdCByZWJhc2UnLgorCitZb3UgY2FuIHJld3JpdGUgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZXMgdXNpbmcgYC0tbXNnLWZpbHRlcmAuICBGb3IKK2V4YW1wbGUsICdnaXQgc3ZuLWlkJyBzdHJpbmdzIGluIGEgcmVwb3NpdG9yeSBjcmVhdGVkIGJ5ICdnaXQgc3ZuJyBjYW4KK2JlIHJlbW92ZWQgdGhpcyB3YXk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmaWx0ZXItYnJhbmNoIC0tbXNnLWZpbHRlciAnCisJc2VkIC1lICIvXmdpdC1zdm4taWQ6L2QiCisnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBuZWVkIHRvIGFkZCAnQWNrZWQtYnknIGxpbmVzIHRvLCBzYXksIHRoZSBsYXN0IDEwIGNvbW1pdHMgKG5vbmUKK29mIHdoaWNoIGlzIGEgbWVyZ2UpLCB1c2UgdGhpcyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLS1tc2ctZmlsdGVyICcKKwljYXQgJiYKKwllY2hvICJBY2tlZC1ieTogQnVncyBCdW5ueSA8YnVubnlAYnVnemlsbGEub3JnPiIKKycgSEVBRH4xMC4uSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGAtLWVudi1maWx0ZXJgIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBtb2RpZnkgY29tbWl0dGVyIGFuZC9vciBhdXRob3IKK2lkZW50aXR5LiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBmb3VuZCBvdXQgdGhhdCB5b3VyIGNvbW1pdHMgaGF2ZSB0aGUgd3JvbmcKK2lkZW50aXR5IGR1ZSB0byBhIG1pc2NvbmZpZ3VyZWQgdXNlci5lbWFpbCwgeW91IGNhbiBtYWtlIGEgY29ycmVjdGlvbiwKK2JlZm9yZSBwdWJsaXNoaW5nIHRoZSBwcm9qZWN0LCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgZmlsdGVyLWJyYW5jaCAtLWVudi1maWx0ZXIgJworCWlmIHRlc3QgIiRHSVRfQVVUSE9SX0VNQUlMIiA9ICJyb290QGxvY2FsaG9zdCIKKwl0aGVuCisJCUdJVF9BVVRIT1JfRU1BSUw9am9obkBleGFtcGxlLmNvbQorCWZpCisJaWYgdGVzdCAiJEdJVF9DT01NSVRURVJfRU1BSUwiID0gInJvb3RAbG9jYWxob3N0IgorCXRoZW4KKwkJR0lUX0NPTU1JVFRFUl9FTUFJTD1qb2huQGV4YW1wbGUuY29tCisJZmkKKycgLS0gLS1hbGwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHJlc3RyaWN0IHJld3JpdGluZyB0byBvbmx5IHBhcnQgb2YgdGhlIGhpc3RvcnksIHNwZWNpZnkgYSByZXZpc2lvbgorcmFuZ2UgaW4gYWRkaXRpb24gdG8gdGhlIG5ldyBicmFuY2ggbmFtZS4gIFRoZSBuZXcgYnJhbmNoIG5hbWUgd2lsbAorcG9pbnQgdG8gdGhlIHRvcC1tb3N0IHJldmlzaW9uIHRoYXQgYSAnZ2l0IHJldi1saXN0JyBvZiB0aGlzIHJhbmdlCit3aWxsIHByaW50LgorCitDb25zaWRlciB0aGlzIGhpc3Rvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLQorICAgICBELS1FLS1GLS1HLS1ICisgICAgLyAgICAgLworQS0tQi0tLS0tQworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHJld3JpdGUgb25seSBjb21taXRzIEQsRSxGLEcsSCwgYnV0IGxlYXZlIEEsIEIgYW5kIEMgYWxvbmUsIHVzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmaWx0ZXItYnJhbmNoIC4uLiBDLi5ICistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyByZXdyaXRlIGNvbW1pdHMgRSxGLEcsSCwgdXNlIG9uZSBvZiB0aGVzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLi4uIEMuLkggLS1ub3QgRAorZ2l0IGZpbHRlci1icmFuY2ggLi4uIEQuLkggLS1ub3QgQworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBtb3ZlIHRoZSB3aG9sZSB0cmVlIGludG8gYSBzdWJkaXJlY3RvcnksIG9yIHJlbW92ZSBpdCBmcm9tIHRoZXJlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmaWx0ZXItYnJhbmNoIC0taW5kZXgtZmlsdGVyIFwKKwknZ2l0IGxzLWZpbGVzIC1zIHwgc2VkICJzLVx0XCIqLSZuZXdzdWJkaXIvLSIgfAorCQlHSVRfSU5ERVhfRklMRT0kR0lUX0lOREVYX0ZJTEUubmV3IFwKKwkJCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJIG12ICIkR0lUX0lOREVYX0ZJTEUubmV3IiAiJEdJVF9JTkRFWF9GSUxFIicgSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCitDSEVDS0xJU1QgRk9SIFNIUklOS0lORyBBIFJFUE9TSVRPUlkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnaXQtZmlsdGVyLWJyYW5jaCBjYW4gYmUgdXNlZCB0byBnZXQgcmlkIG9mIGEgc3Vic2V0IG9mIGZpbGVzLAordXN1YWxseSB3aXRoIHNvbWUgY29tYmluYXRpb24gb2YgYC0taW5kZXgtZmlsdGVyYCBhbmQKK2AtLXN1YmRpcmVjdG9yeS1maWx0ZXJgLiAgUGVvcGxlIGV4cGVjdCB0aGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkgdG8KK2JlIHNtYWxsZXIgdGhhbiB0aGUgb3JpZ2luYWwsIGJ1dCB5b3UgbmVlZCBhIGZldyBtb3JlIHN0ZXBzIHRvCithY3R1YWxseSBtYWtlIGl0IHNtYWxsZXIsIGJlY2F1c2UgR2l0IHRyaWVzIGhhcmQgbm90IHRvIGxvc2UgeW91cgorb2JqZWN0cyB1bnRpbCB5b3UgdGVsbCBpdCB0by4gIEZpcnN0IG1ha2Ugc3VyZSB0aGF0OgorCisqIFlvdSByZWFsbHkgcmVtb3ZlZCBhbGwgdmFyaWFudHMgb2YgYSBmaWxlbmFtZSwgaWYgYSBibG9iIHdhcyBtb3ZlZAorICBvdmVyIGl0cyBsaWZldGltZS4gIGBnaXQgbG9nIC0tbmFtZS1vbmx5IC0tZm9sbG93IC0tYWxsIC0tIGZpbGVuYW1lYAorICBjYW4gaGVscCB5b3UgZmluZCByZW5hbWVzLgorCisqIFlvdSByZWFsbHkgZmlsdGVyZWQgYWxsIHJlZnM6IHVzZSBgLS10YWctbmFtZS1maWx0ZXIgY2F0IC0tIC0tYWxsYAorICB3aGVuIGNhbGxpbmcgZ2l0LWZpbHRlci1icmFuY2guCisKK1RoZW4gdGhlcmUgYXJlIHR3byB3YXlzIHRvIGdldCBhIHNtYWxsZXIgcmVwb3NpdG9yeS4gIEEgc2FmZXIgd2F5IGlzCit0byBjbG9uZSwgdGhhdCBrZWVwcyB5b3VyIG9yaWdpbmFsIGludGFjdC4KKworKiBDbG9uZSBpdCB3aXRoIGBnaXQgY2xvbmUgZmlsZTovLy9wYXRoL3RvL3JlcG9gLiAgVGhlIGNsb25lCisgIHdpbGwgbm90IGhhdmUgdGhlIHJlbW92ZWQgb2JqZWN0cy4gIFNlZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXS4gIChOb3RlCisgIHRoYXQgY2xvbmluZyB3aXRoIGEgcGxhaW4gcGF0aCBqdXN0IGhhcmRsaW5rcyBldmVyeXRoaW5nISkKKworSWYgeW91IHJlYWxseSBkb24ndCB3YW50IHRvIGNsb25lIGl0LCBmb3Igd2hhdGV2ZXIgcmVhc29ucywgY2hlY2sgdGhlCitmb2xsb3dpbmcgcG9pbnRzIGluc3RlYWQgKGluIHRoaXMgb3JkZXIpLiAgVGhpcyBpcyBhIHZlcnkgZGVzdHJ1Y3RpdmUKK2FwcHJvYWNoLCBzbyAqbWFrZSBhIGJhY2t1cCogb3IgZ28gYmFjayB0byBjbG9uaW5nIGl0LiAgWW91IGhhdmUgYmVlbgord2FybmVkLgorCisqIFJlbW92ZSB0aGUgb3JpZ2luYWwgcmVmcyBiYWNrZWQgdXAgYnkgZ2l0LWZpbHRlci1icmFuY2g6IHNheSBgZ2l0CisgIGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgcmVmcy9vcmlnaW5hbC8gfCB4YXJncyAtbiAxIGdpdAorICB1cGRhdGUtcmVmIC1kYC4KKworKiBFeHBpcmUgYWxsIHJlZmxvZ3Mgd2l0aCBgZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9bm93IC0tYWxsYC4KKworKiBHYXJiYWdlIGNvbGxlY3QgYWxsIHVucmVmZXJlbmNlZCBvYmplY3RzIHdpdGggYGdpdCBnYyAtLXBydW5lPW5vd2AKKyAgKG9yIGlmIHlvdXIgZ2l0LWdjIGlzIG5vdCBuZXcgZW5vdWdoIHRvIHN1cHBvcnQgYXJndW1lbnRzIHRvCisgIGAtLXBydW5lYCwgdXNlIGBnaXQgcmVwYWNrIC1hZDsgZ2l0IHBydW5lYCBpbnN0ZWFkKS4KKworW1tQRVJGT1JNQU5DRV1dCitQRVJGT1JNQU5DRQorLS0tLS0tLS0tLS0KKworVGhlIHBlcmZvcm1hbmNlIG9mIGdpdC1maWx0ZXItYnJhbmNoIGlzIGdsYWNpYWxseSBzbG93OyBpdHMgZGVzaWduIG1ha2VzIGl0CitpbXBvc3NpYmxlIGZvciBhIGJhY2t3YXJkLWNvbXBhdGlibGUgaW1wbGVtZW50YXRpb24gdG8gZXZlciBiZSBmYXN0OgorCisqIEluIGVkaXRpbmcgZmlsZXMsIGdpdC1maWx0ZXItYnJhbmNoIGJ5IGRlc2lnbiBjaGVja3Mgb3V0IGVhY2ggYW5kCisgIGV2ZXJ5IGNvbW1pdCBhcyBpdCBleGlzdGVkIGluIHRoZSBvcmlnaW5hbCByZXBvLiAgSWYgeW91ciByZXBvIGhhcworICBgMTBeNWAgZmlsZXMgYW5kIGAxMF41YCBjb21taXRzLCBidXQgZWFjaCBjb21taXQgb25seSBtb2RpZmllcyBmaXZlCisgIGZpbGVzLCB0aGVuIGdpdC1maWx0ZXItYnJhbmNoIHdpbGwgbWFrZSB5b3UgZG8gYDEwXjEwYCBtb2RpZmljYXRpb25zLAorICBkZXNwaXRlIG9ubHkgaGF2aW5nIChhdCBtb3N0KSBgNSoxMF41YCB1bmlxdWUgYmxvYnMuCisKKyogSWYgeW91IHRyeSBhbmQgY2hlYXQgYW5kIHRyeSB0byBtYWtlIGdpdC1maWx0ZXItYnJhbmNoIG9ubHkgd29yayBvbgorICBmaWxlcyBtb2RpZmllZCBpbiBhIGNvbW1pdCwgdGhlbiB0d28gdGhpbmdzIGhhcHBlbgorCisgICoqIHlvdSBydW4gaW50byBwcm9ibGVtcyB3aXRoIGRlbGV0aW9ucyB3aGVuZXZlciB0aGUgdXNlciBpcyBzaW1wbHkKKyAgICAgdHJ5aW5nIHRvIHJlbmFtZSBmaWxlcyAoYmVjYXVzZSBhdHRlbXB0aW5nIHRvIGRlbGV0ZSBmaWxlcyB0aGF0CisgICAgIGRvbid0IGV4aXN0IGxvb2tzIGxpa2UgYSBuby1vcDsgaXQgdGFrZXMgc29tZSBjaGljYW5lcnkgdG8gcmVtYXAKKyAgICAgZGVsZXRlcyBhY3Jvc3MgZmlsZSByZW5hbWVzIHdoZW4gdGhlIHJlbmFtZXMgaGFwcGVuIHZpYSBhcmJpdHJhcnkKKyAgICAgdXNlci1wcm92aWRlZCBzaGVsbCkKKworICAqKiBldmVuIGlmIHlvdSBzdWNjZWVkIGF0IHRoZSBtYXAtZGVsZXRlcy1mb3ItcmVuYW1lcyBjaGljYW5lcnksIHlvdQorICAgICBzdGlsbCB0ZWNobmljYWxseSB2aW9sYXRlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYmVjYXVzZSB1c2VycworICAgICBhcmUgYWxsb3dlZCB0byBmaWx0ZXIgZmlsZXMgaW4gd2F5cyB0aGF0IGRlcGVuZCB1cG9uIHRvcG9sb2d5IG9mCisgICAgIGNvbW1pdHMgaW5zdGVhZCBvZiBmaWx0ZXJpbmcgc29sZWx5IGJhc2VkIG9uIGZpbGUgY29udGVudHMgb3IKKyAgICAgbmFtZXMgKHRob3VnaCB0aGlzIGhhcyBub3QgYmVlbiBvYnNlcnZlZCBpbiB0aGUgd2lsZCkuCisKKyogRXZlbiBpZiB5b3UgZG9uJ3QgbmVlZCB0byBlZGl0IGZpbGVzIGJ1dCBvbmx5IHdhbnQgdG8gZS5nLiByZW5hbWUgb3IKKyAgcmVtb3ZlIHNvbWUgYW5kIHRodXMgY2FuIGF2b2lkIGNoZWNraW5nIG91dCBlYWNoIGZpbGUgKGkuZS4geW91IGNhbgorICB1c2UgLS1pbmRleC1maWx0ZXIpLCB5b3Ugc3RpbGwgYXJlIHBhc3Npbmcgc2hlbGwgc25pcHBldHMgZm9yIHlvdXIKKyAgZmlsdGVycy4gIFRoaXMgbWVhbnMgdGhhdCBmb3IgZXZlcnkgY29tbWl0LCB5b3UgaGF2ZSB0byBoYXZlIGEKKyAgcHJlcGFyZWQgZ2l0IHJlcG8gd2hlcmUgdGhvc2UgZmlsdGVycyBjYW4gYmUgcnVuLiAgVGhhdCdzIGEKKyAgc2lnbmlmaWNhbnQgc2V0dXAuCisKKyogRnVydGhlciwgc2V2ZXJhbCBhZGRpdGlvbmFsIGZpbGVzIGFyZSBjcmVhdGVkIG9yIHVwZGF0ZWQgcGVyIGNvbW1pdAorICBieSBnaXQtZmlsdGVyLWJyYW5jaC4gIFNvbWUgb2YgdGhlc2UgYXJlIGZvciBzdXBwb3J0aW5nIHRoZQorICBjb252ZW5pZW5jZSBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgZ2l0LWZpbHRlci1icmFuY2ggKHN1Y2ggYXMgbWFwKCkpLAorICB3aGlsZSBvdGhlcnMgYXJlIGZvciBrZWVwaW5nIHRyYWNrIG9mIGludGVybmFsIHN0YXRlIChidXQgY291bGQgaGF2ZQorICBhbHNvIGJlZW4gYWNjZXNzZWQgYnkgdXNlciBmaWx0ZXJzOyBvbmUgb2YgZ2l0LWZpbHRlci1icmFuY2gncworICByZWdyZXNzaW9uIHRlc3RzIGRvZXMgc28pLiAgVGhpcyBlc3NlbnRpYWxseSBhbW91bnRzIHRvIHVzaW5nIHRoZQorICBmaWxlc3lzdGVtIGFzIGFuIElQQyBtZWNoYW5pc20gYmV0d2VlbiBnaXQtZmlsdGVyLWJyYW5jaCBhbmQgdGhlCisgIHVzZXItcHJvdmlkZWQgZmlsdGVycy4gIERpc2tzIHRlbmQgdG8gYmUgYSBzbG93IElQQyBtZWNoYW5pc20sIGFuZAorICB3cml0aW5nIHRoZXNlIGZpbGVzIGFsc28gZWZmZWN0aXZlbHkgcmVwcmVzZW50cyBhIGZvcmNlZAorICBzeW5jaHJvbml6YXRpb24gcG9pbnQgYmV0d2VlbiBzZXBhcmF0ZSBwcm9jZXNzZXMgdGhhdCB3ZSBoaXQgd2l0aAorICBldmVyeSBjb21taXQuCisKKyogVGhlIHVzZXItcHJvdmlkZWQgc2hlbGwgY29tbWFuZHMgd2lsbCBsaWtlbHkgaW52b2x2ZSBhIHBpcGVsaW5lIG9mCisgIGNvbW1hbmRzLCByZXN1bHRpbmcgaW4gdGhlIGNyZWF0aW9uIG9mIG1hbnkgcHJvY2Vzc2VzIHBlciBjb21taXQuCisgIENyZWF0aW5nIGFuZCBydW5uaW5nIGFub3RoZXIgcHJvY2VzcyB0YWtlcyBhIHdpZGVseSB2YXJ5aW5nIGFtb3VudAorICBvZiB0aW1lIGJldHdlZW4gb3BlcmF0aW5nIHN5c3RlbXMsIGJ1dCBvbiBhbnkgcGxhdGZvcm0gaXQgaXMgdmVyeQorICBzbG93IHJlbGF0aXZlIHRvIGludm9raW5nIGEgZnVuY3Rpb24uCisKKyogZ2l0LWZpbHRlci1icmFuY2ggaXRzZWxmIGlzIHdyaXR0ZW4gaW4gc2hlbGwsIHdoaWNoIGlzIGtpbmQgb2Ygc2xvdy4KKyAgVGhpcyBpcyB0aGUgb25lIHBlcmZvcm1hbmNlIGlzc3VlIHRoYXQgY291bGQgYmUgYmFja3dhcmQtY29tcGF0aWJseQorICBmaXhlZCwgYnV0IGNvbXBhcmVkIHRvIHRoZSBhYm92ZSBwcm9ibGVtcyB0aGF0IGFyZSBpbnRyaW5zaWMgdG8gdGhlCisgIGRlc2lnbiBvZiBnaXQtZmlsdGVyLWJyYW5jaCwgdGhlIGxhbmd1YWdlIG9mIHRoZSB0b29sIGl0c2VsZiBpcyBhCisgIHJlbGF0aXZlbHkgbWlub3IgaXNzdWUuCisKKyAgKiogU2lkZSBub3RlOiBVbmZvcnR1bmF0ZWx5LCBwZW9wbGUgdGVuZCB0byBmaXhhdGUgb24gdGhlCisgICAgIHdyaXR0ZW4taW4tc2hlbGwgYXNwZWN0IGFuZCBwZXJpb2RpY2FsbHkgYXNrIGlmIGdpdC1maWx0ZXItYnJhbmNoCisgICAgIGNvdWxkIGJlIHJld3JpdHRlbiBpbiBhbm90aGVyIGxhbmd1YWdlIHRvIGZpeCB0aGUgcGVyZm9ybWFuY2UKKyAgICAgaXNzdWVzLiAgTm90IG9ubHkgZG9lcyB0aGF0IGlnbm9yZSB0aGUgYmlnZ2VyIGludHJpbnNpYyBwcm9ibGVtcworICAgICB3aXRoIHRoZSBkZXNpZ24sIGl0J2QgaGVscCBsZXNzIHRoYW4geW91J2QgZXhwZWN0OiBpZgorICAgICBnaXQtZmlsdGVyLWJyYW5jaCBpdHNlbGYgd2VyZSBub3Qgc2hlbGwsIHRoZW4gdGhlIGNvbnZlbmllbmNlCisgICAgIGZ1bmN0aW9ucyAobWFwKCksIHNraXBfY29tbWl0KCksIGV0YykgYW5kIHRoZSBgLS1zZXR1cGAgYXJndW1lbnQKKyAgICAgY291bGQgbm8gbG9uZ2VyIGJlIGV4ZWN1dGVkIG9uY2UgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcHJvZ3JhbQorICAgICBidXQgd291bGQgaW5zdGVhZCBuZWVkIHRvIGJlIHByZXBlbmRlZCB0byBldmVyeSB1c2VyIGZpbHRlciAoYW5kCisgICAgIHRodXMgcmUtZXhlY3V0ZWQgd2l0aCBldmVyeSBjb21taXQpLgorCitUaGUgaHR0cHM6Ly9naXRodWIuY29tL25ld3Jlbi9naXQtZmlsdGVyLXJlcG8vW2dpdCBmaWx0ZXItcmVwb10gdG9vbCBpcworYW4gYWx0ZXJuYXRpdmUgdG8gZ2l0LWZpbHRlci1icmFuY2ggd2hpY2ggZG9lcyBub3Qgc3VmZmVyIGZyb20gdGhlc2UKK3BlcmZvcm1hbmNlIHByb2JsZW1zIG9yIHRoZSBzYWZldHkgcHJvYmxlbXMgKG1lbnRpb25lZCBiZWxvdykuIEZvciB0aG9zZQord2l0aCBleGlzdGluZyB0b29saW5nIHdoaWNoIHJlbGllcyB1cG9uIGdpdC1maWx0ZXItYnJhbmNoLCAnZ2l0CityZXBvLWZpbHRlcicgYWxzbyBwcm92aWRlcworaHR0cHM6Ly9naXRodWIuY29tL25ld3Jlbi9naXQtZmlsdGVyLXJlcG8vYmxvYi9tYXN0ZXIvY29udHJpYi9maWx0ZXItcmVwby1kZW1vcy9maWx0ZXItbGFtZWx5W2ZpbHRlci1sYW1lbHldLAorYSBkcm9wLWluIGdpdC1maWx0ZXItYnJhbmNoIHJlcGxhY2VtZW50ICh3aXRoIGEgZmV3IGNhdmVhdHMpLiAgV2hpbGUKK2ZpbHRlci1sYW1lbHkgc3VmZmVycyBmcm9tIGFsbCB0aGUgc2FtZSBzYWZldHkgaXNzdWVzIGFzCitnaXQtZmlsdGVyLWJyYW5jaCwgaXQgYXQgbGVhc3QgYW1lbGlvcmF0ZXMgdGhlIHBlcmZvcm1hbmNlIGlzc3VlcyBhCitsaXR0bGUuCisKK1tbU0FGRVRZXV0KK1NBRkVUWQorLS0tLS0tCisKK2dpdC1maWx0ZXItYnJhbmNoIGlzIHJpZGRsZWQgd2l0aCBnb3RjaGFzIHJlc3VsdGluZyBpbiB2YXJpb3VzIHdheXMgdG8KK2Vhc2lseSBjb3JydXB0IHJlcG9zIG9yIGVuZCB1cCB3aXRoIGEgbWVzcyB3b3JzZSB0aGFuIHdoYXQgeW91IHN0YXJ0ZWQKK3dpdGg6CisKKyogU29tZW9uZSBjYW4gaGF2ZSBhIHNldCBvZiAid29ya2luZyBhbmQgdGVzdGVkIGZpbHRlcnMiIHdoaWNoIHRoZXkKKyAgZG9jdW1lbnQgb3IgcHJvdmlkZSB0byBhIGNvd29ya2VyLCB3aG8gdGhlbiBydW5zIHRoZW0gb24gYSBkaWZmZXJlbnQKKyAgT1Mgd2hlcmUgdGhlIHNhbWUgY29tbWFuZHMgYXJlIG5vdCB3b3JraW5nL3Rlc3RlZCAoc29tZSBleGFtcGxlcyBpbgorICB0aGUgZ2l0LWZpbHRlci1icmFuY2ggbWFucGFnZSBhcmUgYWxzbyBhZmZlY3RlZCBieSB0aGlzKS4KKyAgQlNEIHZzLiBHTlUgdXNlcmxhbmQgZGlmZmVyZW5jZXMgY2FuIHJlYWxseSBiaXRlLiAgSWYgbHVja3ksIGVycm9yCisgIG1lc3NhZ2VzIGFyZSBzcGV3ZWQuICBCdXQganVzdCBhcyBsaWtlbHksIHRoZSBjb21tYW5kcyBlaXRoZXIgZG9uJ3QKKyAgZG8gdGhlIGZpbHRlcmluZyByZXF1ZXN0ZWQsIG9yIHNpbGVudGx5IGNvcnJ1cHQgYnkgbWFraW5nIHNvbWUKKyAgdW53YW50ZWQgY2hhbmdlLiAgVGhlIHVud2FudGVkIGNoYW5nZSBtYXkgb25seSBhZmZlY3QgYSBmZXcgY29tbWl0cywKKyAgc28gaXQncyBub3QgbmVjZXNzYXJpbHkgb2J2aW91cyBlaXRoZXIuICAoVGhlIGZhY3QgdGhhdCBwcm9ibGVtcworICB3b24ndCBuZWNlc3NhcmlseSBiZSBvYnZpb3VzIG1lYW5zIHRoZXkgYXJlIGxpa2VseSB0byBnbyB1bm5vdGljZWQKKyAgdW50aWwgdGhlIHJld3JpdHRlbiBoaXN0b3J5IGlzIGluIHVzZSBmb3IgcXVpdGUgYSB3aGlsZSwgYXQgd2hpY2gKKyAgcG9pbnQgaXQncyByZWFsbHkgaGFyZCB0byBqdXN0aWZ5IGFub3RoZXIgZmxhZy1kYXkgZm9yIGFub3RoZXIKKyAgcmV3cml0ZS4pCisKKyogRmlsZW5hbWVzIHdpdGggc3BhY2VzIGFyZSBvZnRlbiBtaXNoYW5kbGVkIGJ5IHNoZWxsIHNuaXBwZXRzIHNpbmNlCisgIHRoZXkgY2F1c2UgcHJvYmxlbXMgZm9yIHNoZWxsIHBpcGVsaW5lcy4gIE5vdCBldmVyeW9uZSBpcyBmYW1pbGlhcgorICB3aXRoIGZpbmQgLXByaW50MCwgeGFyZ3MgLTAsIGdpdC1scy1maWxlcyAteiwgZXRjLiAgRXZlbiBwZW9wbGUgd2hvCisgIGFyZSBmYW1pbGlhciB3aXRoIHRoZXNlIG1heSBhc3N1bWUgc3VjaCBmbGFncyBhcmUgbm90IHJlbGV2YW50CisgIGJlY2F1c2Ugc29tZW9uZSBlbHNlIHJlbmFtZWQgYW55IHN1Y2ggZmlsZXMgaW4gdGhlaXIgcmVwbyBiYWNrCisgIGJlZm9yZSB0aGUgcGVyc29uIGRvaW5nIHRoZSBmaWx0ZXJpbmcgam9pbmVkIHRoZSBwcm9qZWN0LiAgQW5kCisgIG9mdGVuLCBldmVuIHRob3NlIGZhbWlsaWFyIHdpdGggaGFuZGxpbmcgYXJndW1lbnRzIHdpdGggc3BhY2VzIG1heQorICBub3QgZG8gc28ganVzdCBiZWNhdXNlIHRoZXkgYXJlbid0IGluIHRoZSBtaW5kc2V0IG9mIHRoaW5raW5nIGFib3V0CisgIGV2ZXJ5dGhpbmcgdGhhdCBjb3VsZCBwb3NzaWJseSBnbyB3cm9uZy4KKworKiBOb24tYXNjaWkgZmlsZW5hbWVzIGNhbiBiZSBzaWxlbnRseSByZW1vdmVkIGRlc3BpdGUgYmVpbmcgaW4gYQorICBkZXNpcmVkIGRpcmVjdG9yeS4gIEtlZXBpbmcgb25seSB3YW50ZWQgcGF0aHMgaXMgb2Z0ZW4gZG9uZSB1c2luZworICBwaXBlbGluZXMgbGlrZSBgZ2l0IGxzLWZpbGVzIHwgZ3JlcCAtdiBeV0FOVEVEX0RJUi8gfCB4YXJncyBnaXQgcm1gLgorICBscy1maWxlcyB3aWxsIG9ubHkgcXVvdGUgZmlsZW5hbWVzIGlmIG5lZWRlZCwgc28gZm9sa3MgbWF5IG5vdAorICBub3RpY2UgdGhhdCBvbmUgb2YgdGhlIGZpbGVzIGRpZG4ndCBtYXRjaCB0aGUgcmVnZXggKGF0IGxlYXN0IG5vdAorICB1bnRpbCBpdCdzIG11Y2ggdG9vIGxhdGUpLiAgWWVzLCBzb21lb25lIHdobyBrbm93cyBhYm91dAorICBjb3JlLnF1b3RlUGF0aCBjYW4gYXZvaWQgdGhpcyAodW5sZXNzIHRoZXkgaGF2ZSBvdGhlciBzcGVjaWFsCisgIGNoYXJhY3RlcnMgbGlrZSBcdCwgXG4sIG9yICIpLCBhbmQgcGVvcGxlIHdobyB1c2UgbHMtZmlsZXMgLXogd2l0aAorICBzb21ldGhpbmcgb3RoZXIgdGhhbiBncmVwIGNhbiBhdm9pZCB0aGlzLCBidXQgdGhhdCBkb2Vzbid0IG1lYW4gdGhleQorICB3aWxsLgorCisqIFNpbWlsYXJseSwgd2hlbiBtb3ZpbmcgZmlsZXMgYXJvdW5kLCBvbmUgY2FuIGZpbmQgdGhhdCBmaWxlbmFtZXMKKyAgd2l0aCBub24tYXNjaWkgb3Igc3BlY2lhbCBjaGFyYWN0ZXJzIGVuZCB1cCBpbiBhIGRpZmZlcmVudAorICBkaXJlY3RvcnksIG9uZSB0aGF0IGluY2x1ZGVzIGEgZG91YmxlIHF1b3RlIGNoYXJhY3Rlci4gIChUaGlzIGlzCisgIHRlY2huaWNhbGx5IHRoZSBzYW1lIGlzc3VlIGFzIGFib3ZlIHdpdGggcXVvdGluZywgYnV0IHBlcmhhcHMgYW4KKyAgaW50ZXJlc3RpbmcgZGlmZmVyZW50IHdheSB0aGF0IGl0IGNhbiBhbmQgaGFzIG1hbmlmZXN0ZWQgYXMgYQorICBwcm9ibGVtLikKKworKiBJdCdzIGZhciB0b28gZWFzeSB0byBhY2NpZGVudGFsbHkgbWl4IHVwIG9sZCBhbmQgbmV3IGhpc3RvcnkuICBJdCdzCisgIHN0aWxsIHBvc3NpYmxlIHdpdGggYW55IHRvb2wsIGJ1dCBnaXQtZmlsdGVyLWJyYW5jaCBhbG1vc3QKKyAgaW52aXRlcyBpdC4gIElmIGx1Y2t5LCB0aGUgb25seSBkb3duc2lkZSBpcyB1c2VycyBnZXR0aW5nIGZydXN0cmF0ZWQKKyAgdGhhdCB0aGV5IGRvbid0IGtub3cgaG93IHRvIHNocmluayB0aGVpciByZXBvIGFuZCByZW1vdmUgdGhlIG9sZAorICBzdHVmZi4gIElmIHVubHVja3ksIHRoZXkgbWVyZ2Ugb2xkIGFuZCBuZXcgaGlzdG9yeSBhbmQgZW5kIHVwIHdpdGgKKyAgbXVsdGlwbGUgImNvcGllcyIgb2YgZWFjaCBjb21taXQsIHNvbWUgb2Ygd2hpY2ggaGF2ZSB1bndhbnRlZCBvcgorICBzZW5zaXRpdmUgZmlsZXMgYW5kIG90aGVycyB3aGljaCBkb24ndC4gIFRoaXMgY29tZXMgYWJvdXQgaW4KKyAgbXVsdGlwbGUgZGlmZmVyZW50IHdheXM6CisKKyAgKiogdGhlIGRlZmF1bHQgdG8gb25seSBkb2luZyBhIHBhcnRpYWwgaGlzdG9yeSByZXdyaXRlICgnLS1hbGwnIGlzIG5vdAorICAgICB0aGUgZGVmYXVsdCBhbmQgZmV3IGV4YW1wbGVzIHNob3cgaXQpCisKKyAgKiogdGhlIGZhY3QgdGhhdCB0aGVyZSdzIG5vIGF1dG9tYXRpYyBwb3N0LXJ1biBjbGVhbnVwCisKKyAgKiogdGhlIGZhY3QgdGhhdCAtLXRhZy1uYW1lLWZpbHRlciAod2hlbiB1c2VkIHRvIHJlbmFtZSB0YWdzKSBkb2Vzbid0CisgICAgIHJlbW92ZSB0aGUgb2xkIHRhZ3MgYnV0IGp1c3QgYWRkcyBuZXcgb25lcyB3aXRoIHRoZSBuZXcgbmFtZQorCisgICoqIHRoZSBmYWN0IHRoYXQgbGl0dGxlIGVkdWNhdGlvbmFsIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIHRvIGluZm9ybQorICAgICB1c2VycyBvZiB0aGUgcmFtaWZpY2F0aW9ucyBvZiBhIHJld3JpdGUgYW5kIGhvdyB0byBhdm9pZCBtaXhpbmcgb2xkCisgICAgIGFuZCBuZXcgaGlzdG9yeS4gIEZvciBleGFtcGxlLCB0aGlzIG1hbiBwYWdlIGRpc2N1c3NlcyBob3cgdXNlcnMKKyAgICAgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgdGhleSBuZWVkIHRvIHJlYmFzZSB0aGVpciBjaGFuZ2VzIGZvciBhbGwKKyAgICAgdGhlaXIgYnJhbmNoZXMgb24gdG9wIG9mIG5ldyBoaXN0b3J5IChvciBkZWxldGUgYW5kIHJlY2xvbmUpLCBidXQKKyAgICAgdGhhdCdzIG9ubHkgb25lIG9mIG11bHRpcGxlIGNvbmNlcm5zIHRvIGNvbnNpZGVyLiAgU2VlIHRoZQorICAgICAiRElTQ1VTU0lPTiIgc2VjdGlvbiBvZiB0aGUgZ2l0IGZpbHRlci1yZXBvIG1hbnVhbCBwYWdlIGZvciBtb3JlCisgICAgIGRldGFpbHMuCisKKyogQW5ub3RhdGVkIHRhZ3MgY2FuIGJlIGFjY2lkZW50YWxseSBjb252ZXJ0ZWQgdG8gbGlnaHR3ZWlnaHQgdGFncywKKyAgZHVlIHRvIGVpdGhlciBvZiB0d28gaXNzdWVzOgorCisgICoqIFNvbWVvbmUgY2FuIGRvIGEgaGlzdG9yeSByZXdyaXRlLCByZWFsaXplIHRoZXkgbWVzc2VkIHVwLCByZXN0b3JlCisgICAgIGZyb20gdGhlIGJhY2t1cHMgaW4gcmVmcy9vcmlnaW5hbC8sIGFuZCB0aGVuIHJlZG8gdGhlaXIKKyAgICAgZ2l0LWZpbHRlci1icmFuY2ggY29tbWFuZC4gIChUaGUgYmFja3VwIGluIHJlZnMvb3JpZ2luYWwvIGlzIG5vdCBhCisgICAgIHJlYWwgYmFja3VwOyBpdCBkZXJlZmVyZW5jZXMgdGFncyBmaXJzdC4pCisKKyAgKiogUnVubmluZyBnaXQtZmlsdGVyLWJyYW5jaCB3aXRoIGVpdGhlciAtLXRhZ3Mgb3IgLS1hbGwgaW4geW91cgorICAgICA8cmV2LWxpc3Qgb3B0aW9ucz4uICBJbiBvcmRlciB0byByZXRhaW4gYW5ub3RhdGVkIHRhZ3MgYXMKKyAgICAgYW5ub3RhdGVkLCB5b3UgbXVzdCB1c2UgLS10YWctbmFtZS1maWx0ZXIgKGFuZCBtdXN0IG5vdCBoYXZlCisgICAgIHJlc3RvcmVkIGZyb20gcmVmcy9vcmlnaW5hbC8gaW4gYSBwcmV2aW91c2x5IGJvdGNoZWQgcmV3cml0ZSkuCisKKyogQW55IGNvbW1pdCBtZXNzYWdlcyB0aGF0IHNwZWNpZnkgYW4gZW5jb2Rpbmcgd2lsbCBiZWNvbWUgY29ycnVwdGVkCisgIGJ5IHRoZSByZXdyaXRlOyBnaXQtZmlsdGVyLWJyYW5jaCBpZ25vcmVzIHRoZSBlbmNvZGluZywgdGFrZXMgdGhlCisgIG9yaWdpbmFsIGJ5dGVzLCBhbmQgZmVlZHMgaXQgdG8gY29tbWl0LXRyZWUgd2l0aG91dCB0ZWxsaW5nIGl0IHRoZQorICBwcm9wZXIgZW5jb2RpbmcuICAoVGhpcyBoYXBwZW5zIHdoZXRoZXIgb3Igbm90IC0tbXNnLWZpbHRlciBpcworICB1c2VkLikKKworKiBDb21taXQgbWVzc2FnZXMgKGV2ZW4gaWYgdGhleSBhcmUgYWxsIFVURi04KSBieSBkZWZhdWx0IGJlY29tZQorICBjb3JydXB0ZWQgZHVlIHRvIG5vdCBiZWluZyB1cGRhdGVkIC0tIGFueSByZWZlcmVuY2VzIHRvIG90aGVyIGNvbW1pdAorICBoYXNoZXMgaW4gY29tbWl0IG1lc3NhZ2VzIHdpbGwgbm93IHJlZmVyIHRvIG5vLWxvbmdlci1leHRhbnQKKyAgY29tbWl0cy4KKworKiBUaGVyZSBhcmUgbm8gZmFjaWxpdGllcyBmb3IgaGVscGluZyB1c2VycyBmaW5kIHdoYXQgdW53YW50ZWQgY3J1ZAorICB0aGV5IHNob3VsZCBkZWxldGUsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIG11Y2ggbW9yZSBsaWtlbHkgdG8gaGF2ZQorICBpbmNvbXBsZXRlIG9yIHBhcnRpYWwgY2xlYW51cHMgdGhhdCBzb21ldGltZXMgcmVzdWx0IGluIGNvbmZ1c2lvbgorICBhbmQgcGVvcGxlIHdhc3RpbmcgdGltZSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gIChGb3IgZXhhbXBsZSwgZm9sa3MKKyAgdGVuZCB0byBqdXN0IGxvb2sgZm9yIGJpZyBmaWxlcyB0byBkZWxldGUgaW5zdGVhZCBvZiBiaWcgZGlyZWN0b3JpZXMKKyAgb3IgZXh0ZW5zaW9ucywgYW5kIG9uY2UgdGhleSBkbyBzbywgdGhlbiBzb21ldGltZSBsYXRlciBmb2xrcyB1c2luZworICB0aGUgbmV3IHJlcG9zaXRvcnkgd2hvIGFyZSBnb2luZyB0aHJvdWdoIGhpc3Rvcnkgd2lsbCBub3RpY2UgYSBidWlsZAorICBhcnRpZmFjdCBkaXJlY3RvcnkgdGhhdCBoYXMgc29tZSBmaWxlcyBidXQgbm90IG90aGVycywgb3IgYSBjYWNoZSBvZgorICBkZXBlbmRlbmNpZXMgKG5vZGVfbW9kdWxlcyBvciBzaW1pbGFyKSB3aGljaCBjb3VsZG4ndCBoYXZlIGV2ZXIgYmVlbgorICBmdW5jdGlvbmFsIHNpbmNlIGl0J3MgbWlzc2luZyBzb21lIGZpbGVzLikKKworKiBJZiAtLXBydW5lLWVtcHR5IGlzbid0IHNwZWNpZmllZCwgdGhlbiB0aGUgZmlsdGVyaW5nIHByb2Nlc3MgY2FuCisgIGNyZWF0ZSBob2FyZHMgb2YgY29uZnVzaW5nIGVtcHR5IGNvbW1pdHMKKworKiBJZiAtLXBydW5lLWVtcHR5IGlzIHNwZWNpZmllZCwgdGhlbiBpbnRlbnRpb25hbGx5IHBsYWNlZCBlbXB0eQorICBjb21taXRzIGZyb20gYmVmb3JlIHRoZSBmaWx0ZXJpbmcgb3BlcmF0aW9uIGFyZSBhbHNvIHBydW5lZCBpbnN0ZWFkCisgIG9mIGp1c3QgcHJ1bmluZyBjb21taXRzIHRoYXQgYmVjYW1lIGVtcHR5IGR1ZSB0byBmaWx0ZXJpbmcgcnVsZXMuCisKKyogSWYgLS1wcnVuZS1lbXB0eSBpcyBzcGVjaWZpZWQsIHNvbWV0aW1lcyBlbXB0eSBjb21taXRzIGFyZSBtaXNzZWQKKyAgYW5kIGxlZnQgYXJvdW5kIGFueXdheSAoYSBzb21ld2hhdCByYXJlIGJ1ZywgYnV0IGl0IGhhcHBlbnMuLi4pCisKKyogQSBtaW5vciBpc3N1ZSwgYnV0IHVzZXJzIHdobyBoYXZlIGEgZ29hbCB0byB1cGRhdGUgYWxsIG5hbWVzIGFuZAorICBlbWFpbHMgaW4gYSByZXBvc2l0b3J5IG1heSBiZSBsZWQgdG8gLS1lbnYtZmlsdGVyIHdoaWNoIHdpbGwgb25seQorICB1cGRhdGUgYXV0aG9ycyBhbmQgY29tbWl0dGVycywgbWlzc2luZyB0YWdnZXJzLgorCisqIElmIHRoZSB1c2VyIHByb3ZpZGVzIGEgLS10YWctbmFtZS1maWx0ZXIgdGhhdCBtYXBzIG11bHRpcGxlIHRhZ3MgdG8KKyAgdGhlIHNhbWUgbmFtZSwgbm8gd2FybmluZyBvciBlcnJvciBpcyBwcm92aWRlZDsgZ2l0LWZpbHRlci1icmFuY2gKKyAgc2ltcGx5IG92ZXJ3cml0ZXMgZWFjaCB0YWcgaW4gc29tZSB1bmRvY3VtZW50ZWQgcHJlLWRlZmluZWQgb3JkZXIKKyAgcmVzdWx0aW5nIGluIG9ubHkgb25lIHRhZyBhdCB0aGUgZW5kLiAgKEEgZ2l0LWZpbHRlci1icmFuY2gKKyAgcmVncmVzc2lvbiB0ZXN0IHJlcXVpcmVzIHRoaXMgc3VycHJpc2luZyBiZWhhdmlvci4pCisKK0Fsc28sIHRoZSBwb29yIHBlcmZvcm1hbmNlIG9mIGdpdC1maWx0ZXItYnJhbmNoIG9mdGVuIGxlYWRzIHRvIHNhZmV0eQoraXNzdWVzOgorCisqIENvbWluZyB1cCB3aXRoIHRoZSBjb3JyZWN0IHNoZWxsIHNuaXBwZXQgdG8gZG8gdGhlIGZpbHRlcmluZyB5b3UKKyAgd2FudCBpcyBzb21ldGltZXMgZGlmZmljdWx0IHVubGVzcyB5b3UncmUganVzdCBkb2luZyBhIHRyaXZpYWwKKyAgbW9kaWZpY2F0aW9uIHN1Y2ggYXMgZGVsZXRpbmcgYSBjb3VwbGUgZmlsZXMuICBVbmZvcnR1bmF0ZWx5LCBwZW9wbGUKKyAgb2Z0ZW4gbGVhcm4gaWYgdGhlIHNuaXBwZXQgaXMgcmlnaHQgb3Igd3JvbmcgYnkgdHJ5aW5nIGl0IG91dCwgYnV0CisgIHRoZSByaWdodG5lc3Mgb3Igd3JvbmduZXNzIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiBzcGVjaWFsCisgIGNpcmN1bXN0YW5jZXMgKHNwYWNlcyBpbiBmaWxlbmFtZXMsIG5vbi1hc2NpaSBmaWxlbmFtZXMsIGZ1bm55CisgIGF1dGhvciBuYW1lcyBvciBlbWFpbHMsIGludmFsaWQgdGltZXpvbmVzLCBwcmVzZW5jZSBvZiBncmFmdHMgb3IKKyAgcmVwbGFjZSBvYmplY3RzLCBldGMuKSwgbWVhbmluZyB0aGV5IG1heSBoYXZlIHRvIHdhaXQgYSBsb25nIHRpbWUsCisgIGhpdCBhbiBlcnJvciwgdGhlbiByZXN0YXJ0LiAgVGhlIHBlcmZvcm1hbmNlIG9mIGdpdC1maWx0ZXItYnJhbmNoIGlzCisgIHNvIGJhZCB0aGF0IHRoaXMgY3ljbGUgaXMgcGFpbmZ1bCwgcmVkdWNpbmcgdGhlIHRpbWUgYXZhaWxhYmxlIHRvCisgIGNhcmVmdWxseSByZS1jaGVjayAodG8gc2F5IG5vdGhpbmcgYWJvdXQgd2hhdCBpdCBkb2VzIHRvIHRoZQorICBwYXRpZW5jZSBvZiB0aGUgcGVyc29uIGRvaW5nIHRoZSByZXdyaXRlIGV2ZW4gaWYgdGhleSBkbyB0ZWNobmljYWxseQorICBoYXZlIG1vcmUgdGltZSBhdmFpbGFibGUpLiAgVGhpcyBwcm9ibGVtIGlzIGV4dHJhIGNvbXBvdW5kZWQgYmVjYXVzZQorICBlcnJvcnMgZnJvbSBicm9rZW4gZmlsdGVycyBtYXkgbm90IGJlIHNob3duIGZvciBhIGxvbmcgdGltZSBhbmQvb3IKKyAgZ2V0IGxvc3QgaW4gYSBzZWEgb2Ygb3V0cHV0LiAgRXZlbiB3b3JzZSwgYnJva2VuIGZpbHRlcnMgb2Z0ZW4ganVzdAorICByZXN1bHQgaW4gc2lsZW50IGluY29ycmVjdCByZXdyaXRlcy4KKworKiBUbyB0b3AgaXQgYWxsIG9mZiwgZXZlbiB3aGVuIHVzZXJzIGZpbmFsbHkgZmluZCB3b3JraW5nIGNvbW1hbmRzLAorICB0aGV5IG5hdHVyYWxseSB3YW50IHRvIHNoYXJlIHRoZW0uICBCdXQgdGhleSBtYXkgYmUgdW5hd2FyZSB0aGF0CisgIHRoZWlyIHJlcG8gZGlkbid0IGhhdmUgc29tZSBzcGVjaWFsIGNhc2VzIHRoYXQgc29tZW9uZSBlbHNlJ3MgZG9lcy4KKyAgU28sIHdoZW4gc29tZW9uZSBlbHNlIHdpdGggYSBkaWZmZXJlbnQgcmVwb3NpdG9yeSBydW5zIHRoZSBzYW1lCisgIGNvbW1hbmRzLCB0aGV5IGdldCBoaXQgYnkgdGhlIHByb2JsZW1zIGFib3ZlLiAgT3IsIHRoZSB1c2VyIGp1c3QKKyAgcnVucyBjb21tYW5kcyB0aGF0IHJlYWxseSB3ZXJlIHZldHRlZCBmb3Igc3BlY2lhbCBjYXNlcywgYnV0IHRoZXkKKyAgcnVuIGl0IG9uIGEgZGlmZmVyZW50IE9TIHdoZXJlIGl0IGRvZXNuJ3Qgd29yaywgYXMgbm90ZWQgYWJvdmUuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZm10LW1lcmdlLW1zZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mbXQtbWVyZ2UtbXNnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzkzZDhmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZm10LW1lcmdlLW1zZy50eHQKQEAgLTAsMCArMSw3OCBAQAorZ2l0LWZtdC1tZXJnZS1tc2coMSkKKz09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1mbXQtbWVyZ2UtbXNnIC0gUHJvZHVjZSBhIG1lcmdlIGNvbW1pdCBtZXNzYWdlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGZtdC1tZXJnZS1tc2cnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXQorJ2dpdCBmbXQtbWVyZ2UtbXNnJyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gLUYgPGZpbGU+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGFrZXMgdGhlIGxpc3Qgb2YgbWVyZ2VkIG9iamVjdHMgb24gc3RkaW4gYW5kIHByb2R1Y2VzIGEgc3VpdGFibGUKK2NvbW1pdCBtZXNzYWdlIHRvIGJlIHVzZWQgZm9yIHRoZSBtZXJnZSBjb21taXQsIHVzdWFsbHkgdG8gYmUKK3Bhc3NlZCBhcyB0aGUgJzxtZXJnZS1tZXNzYWdlPicgYXJndW1lbnQgb2YgJ2dpdCBtZXJnZScuCisKK1RoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBtb3N0bHkgZm9yIGludGVybmFsIHVzZSBieSBzY3JpcHRzCithdXRvbWF0aWNhbGx5IGludm9raW5nICdnaXQgbWVyZ2UnLgorCitPUFRJT05TCistLS0tLS0tCisKKy0tbG9nWz08bj5dOjoKKwlJbiBhZGRpdGlvbiB0byBicmFuY2ggbmFtZXMsIHBvcHVsYXRlIHRoZSBsb2cgbWVzc2FnZSB3aXRoCisJb25lLWxpbmUgZGVzY3JpcHRpb25zIGZyb20gdGhlIGFjdHVhbCBjb21taXRzIHRoYXQgYXJlIGJlaW5nCisJbWVyZ2VkLiAgQXQgbW9zdCA8bj4gY29tbWl0cyBmcm9tIGVhY2ggbWVyZ2UgcGFyZW50IHdpbGwgYmUKKwl1c2VkICgyMCBpZiA8bj4gaXMgb21pdHRlZCkuICBUaGlzIG92ZXJyaWRlcyB0aGUgYG1lcmdlLmxvZ2AKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCistLW5vLWxvZzo6CisJRG8gbm90IGxpc3Qgb25lLWxpbmUgZGVzY3JpcHRpb25zIGZyb20gdGhlIGFjdHVhbCBjb21taXRzIGJlaW5nCisJbWVyZ2VkLgorCistLVtuby1dc3VtbWFyeTo6CisJU3lub255bXMgdG8gLS1sb2cgYW5kIC0tbm8tbG9nOyB0aGVzZSBhcmUgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZQorCXJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4KKworLW0gPG1lc3NhZ2U+OjoKKy0tbWVzc2FnZSA8bWVzc2FnZT46OgorCVVzZSA8bWVzc2FnZT4gaW5zdGVhZCBvZiB0aGUgYnJhbmNoIG5hbWVzIGZvciB0aGUgZmlyc3QgbGluZQorCW9mIHRoZSBsb2cgbWVzc2FnZS4gIEZvciB1c2Ugd2l0aCBgLS1sb2dgLgorCistRiA8ZmlsZT46OgorLS1maWxlIDxmaWxlPjo6CisJVGFrZSB0aGUgbGlzdCBvZiBtZXJnZWQgb2JqZWN0cyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mCisJc3RkaW4uCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KK2luY2x1ZGU6OmNvbmZpZy9mbXQtbWVyZ2UtbXNnLnR4dFtdCisKK21lcmdlLnN1bW1hcnk6OgorCVN5bm9ueW0gdG8gYG1lcmdlLmxvZ2A7IHRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluCisJdGhlIGZ1dHVyZS4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKy0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggb3JpZ2luIG1hc3RlcgorJCBnaXQgZm10LW1lcmdlLW1zZyAtLWxvZyA8JEdJVF9ESVIvRkVUQ0hfSEVBRAorLS0tLS0tLS0tCisKK1ByaW50IGEgbG9nIG1lc3NhZ2UgZGVzY3JpYmluZyBhIG1lcmdlIG9mIHRoZSAibWFzdGVyIiBicmFuY2ggZnJvbQordGhlICJvcmlnaW4iIHJlbW90ZS4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LW1lcmdlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZm9yLWVhY2gtcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZvci1lYWNoLXJlZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRjZDM5ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZvci1lYWNoLXJlZi50eHQKQEAgLTAsMCArMSwzOTQgQEAKK2dpdC1mb3ItZWFjaC1yZWYoMSkKKz09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWZvci1lYWNoLXJlZiAtIE91dHB1dCBpbmZvcm1hdGlvbiBvbiBlYWNoIHJlZgorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZm9yLWVhY2gtcmVmJyBbLS1jb3VudD08Y291bnQ+XSBbLS1zaGVsbHwtLXBlcmx8LS1weXRob258LS10Y2xdCisJCSAgIFsoLS1zb3J0PTxrZXk+KS4uLl0gWy0tZm9ybWF0PTxmb3JtYXQ+XSBbPHBhdHRlcm4+Li4uXQorCQkgICBbLS1wb2ludHMtYXQ9PG9iamVjdD5dCisJCSAgICgtLW1lcmdlZFs9PG9iamVjdD5dIHwgLS1uby1tZXJnZWRbPTxvYmplY3Q+XSkKKwkJICAgWy0tY29udGFpbnNbPTxvYmplY3Q+XV0gWy0tbm8tY29udGFpbnNbPTxvYmplY3Q+XV0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0l0ZXJhdGUgb3ZlciBhbGwgcmVmcyB0aGF0IG1hdGNoIGA8cGF0dGVybj5gIGFuZCBzaG93IHRoZW0KK2FjY29yZGluZyB0byB0aGUgZ2l2ZW4gYDxmb3JtYXQ+YCwgYWZ0ZXIgc29ydGluZyB0aGVtIGFjY29yZGluZwordG8gdGhlIGdpdmVuIHNldCBvZiBgPGtleT5gLiAgSWYgYDxjb3VudD5gIGlzIGdpdmVuLCBzdG9wIGFmdGVyCitzaG93aW5nIHRoYXQgbWFueSByZWZzLiAgVGhlIGludGVycG9sYXRlZCB2YWx1ZXMgaW4gYDxmb3JtYXQ+YAorY2FuIG9wdGlvbmFsbHkgYmUgcXVvdGVkIGFzIHN0cmluZyBsaXRlcmFscyBpbiB0aGUgc3BlY2lmaWVkCitob3N0IGxhbmd1YWdlIGFsbG93aW5nIHRoZWlyIGRpcmVjdCBldmFsdWF0aW9uIGluIHRoYXQgbGFuZ3VhZ2UuCisKK09QVElPTlMKKy0tLS0tLS0KKzxwYXR0ZXJuPi4uLjo6CisJSWYgb25lIG9yIG1vcmUgcGF0dGVybnMgYXJlIGdpdmVuLCBvbmx5IHJlZnMgYXJlIHNob3duIHRoYXQKKwltYXRjaCBhZ2FpbnN0IGF0IGxlYXN0IG9uZSBwYXR0ZXJuLCBlaXRoZXIgdXNpbmcgZm5tYXRjaCgzKSBvcgorCWxpdGVyYWxseSwgaW4gdGhlIGxhdHRlciBjYXNlIG1hdGNoaW5nIGNvbXBsZXRlbHkgb3IgZnJvbSB0aGUKKwliZWdpbm5pbmcgdXAgdG8gYSBzbGFzaC4KKworLS1jb3VudD08Y291bnQ+OjoKKwlCeSBkZWZhdWx0IHRoZSBjb21tYW5kIHNob3dzIGFsbCByZWZzIHRoYXQgbWF0Y2gKKwlgPHBhdHRlcm4+YC4gIFRoaXMgb3B0aW9uIG1ha2VzIGl0IHN0b3AgYWZ0ZXIgc2hvd2luZworCXRoYXQgbWFueSByZWZzLgorCistLXNvcnQ9PGtleT46OgorCUEgZmllbGQgbmFtZSB0byBzb3J0IG9uLiAgUHJlZml4IGAtYCB0byBzb3J0IGluCisJZGVzY2VuZGluZyBvcmRlciBvZiB0aGUgdmFsdWUuICBXaGVuIHVuc3BlY2lmaWVkLAorCWByZWZuYW1lYCBpcyB1c2VkLiAgWW91IG1heSB1c2UgdGhlIC0tc29ydD08a2V5PiBvcHRpb24KKwltdWx0aXBsZSB0aW1lcywgaW4gd2hpY2ggY2FzZSB0aGUgbGFzdCBrZXkgYmVjb21lcyB0aGUgcHJpbWFyeQorCWtleS4KKworLS1mb3JtYXQ9PGZvcm1hdD46OgorCUEgc3RyaW5nIHRoYXQgaW50ZXJwb2xhdGVzIGAlKGZpZWxkbmFtZSlgIGZyb20gYSByZWYgYmVpbmcgc2hvd24KKwlhbmQgdGhlIG9iamVjdCBpdCBwb2ludHMgYXQuICBJZiBgZmllbGRuYW1lYAorCWlzIHByZWZpeGVkIHdpdGggYW4gYXN0ZXJpc2sgKGAqYCkgYW5kIHRoZSByZWYgcG9pbnRzCisJYXQgYSB0YWcgb2JqZWN0LCB1c2UgdGhlIHZhbHVlIGZvciB0aGUgZmllbGQgaW4gdGhlIG9iamVjdAorCXdoaWNoIHRoZSB0YWcgb2JqZWN0IHJlZmVycyB0byAoaW5zdGVhZCBvZiB0aGUgZmllbGQgaW4gdGhlIHRhZyBvYmplY3QpLgorCVdoZW4gdW5zcGVjaWZpZWQsIGA8Zm9ybWF0PmAgZGVmYXVsdHMgdG8KKwlgJShvYmplY3RuYW1lKSBTUEMgJShvYmplY3R0eXBlKSBUQUIgJShyZWZuYW1lKWAuCisJSXQgYWxzbyBpbnRlcnBvbGF0ZXMgYCUlYCB0byBgJWAsIGFuZCBgJXh4YCB3aGVyZSBgeHhgCisJYXJlIGhleCBkaWdpdHMgaW50ZXJwb2xhdGVzIHRvIGNoYXJhY3RlciB3aXRoIGhleCBjb2RlCisJYHh4YDsgZm9yIGV4YW1wbGUgYCUwMGAgaW50ZXJwb2xhdGVzIHRvIGBcMGAgKE5VTCksCisJYCUwOWAgdG8gYFx0YCAoVEFCKSBhbmQgYCUwYWAgdG8gYFxuYCAoTEYpLgorCistLWNvbG9yWz08d2hlbj5dOjoKKwlSZXNwZWN0IGFueSBjb2xvcnMgc3BlY2lmaWVkIGluIHRoZSBgLS1mb3JtYXRgIG9wdGlvbi4gVGhlCisJYDx3aGVuPmAgZmllbGQgbXVzdCBiZSBvbmUgb2YgYGFsd2F5c2AsIGBuZXZlcmAsIG9yIGBhdXRvYCAoaWYKKwlgPHdoZW4+YCBpcyBhYnNlbnQsIGJlaGF2ZSBhcyBpZiBgYWx3YXlzYCB3YXMgZ2l2ZW4pLgorCistLXNoZWxsOjoKKy0tcGVybDo6CistLXB5dGhvbjo6CistLXRjbDo6CisJSWYgZ2l2ZW4sIHN0cmluZ3MgdGhhdCBzdWJzdGl0dXRlIGAlKGZpZWxkbmFtZSlgCisJcGxhY2Vob2xkZXJzIGFyZSBxdW90ZWQgYXMgc3RyaW5nIGxpdGVyYWxzIHN1aXRhYmxlIGZvcgorCXRoZSBzcGVjaWZpZWQgaG9zdCBsYW5ndWFnZS4gIFRoaXMgaXMgbWVhbnQgdG8gcHJvZHVjZQorCWEgc2NyaXB0bGV0IHRoYXQgY2FuIGRpcmVjdGx5IGJlIGBldmFsYGVkLgorCistLXBvaW50cy1hdD08b2JqZWN0Pjo6CisJT25seSBsaXN0IHJlZnMgd2hpY2ggcG9pbnRzIGF0IHRoZSBnaXZlbiBvYmplY3QuCisKKy0tbWVyZ2VkWz08b2JqZWN0Pl06OgorCU9ubHkgbGlzdCByZWZzIHdob3NlIHRpcHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZQorCXNwZWNpZmllZCBjb21taXQgKEhFQUQgaWYgbm90IHNwZWNpZmllZCksCisJaW5jb21wYXRpYmxlIHdpdGggYC0tbm8tbWVyZ2VkYC4KKworLS1uby1tZXJnZWRbPTxvYmplY3Q+XTo6CisJT25seSBsaXN0IHJlZnMgd2hvc2UgdGlwcyBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIHRoZQorCXNwZWNpZmllZCBjb21taXQgKEhFQUQgaWYgbm90IHNwZWNpZmllZCksCisJaW5jb21wYXRpYmxlIHdpdGggYC0tbWVyZ2VkYC4KKworLS1jb250YWluc1s9PG9iamVjdD5dOjoKKwlPbmx5IGxpc3QgcmVmcyB3aGljaCBjb250YWluIHRoZSBzcGVjaWZpZWQgY29tbWl0IChIRUFEIGlmIG5vdAorCXNwZWNpZmllZCkuCisKKy0tbm8tY29udGFpbnNbPTxvYmplY3Q+XTo6CisJT25seSBsaXN0IHJlZnMgd2hpY2ggZG9uJ3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIGNvbW1pdCAoSEVBRAorCWlmIG5vdCBzcGVjaWZpZWQpLgorCistLWlnbm9yZS1jYXNlOjoKKwlTb3J0aW5nIGFuZCBmaWx0ZXJpbmcgcmVmcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZS4KKworRklFTEQgTkFNRVMKKy0tLS0tLS0tLS0tCisKK1ZhcmlvdXMgdmFsdWVzIGZyb20gc3RydWN0dXJlZCBmaWVsZHMgaW4gcmVmZXJlbmNlZCBvYmplY3RzIGNhbgorYmUgdXNlZCB0byBpbnRlcnBvbGF0ZSBpbnRvIHRoZSByZXN1bHRpbmcgb3V0cHV0LCBvciBhcyBzb3J0CitrZXlzLgorCitGb3IgYWxsIG9iamVjdHMsIHRoZSBmb2xsb3dpbmcgbmFtZXMgY2FuIGJlIHVzZWQ6CisKK3JlZm5hbWU6OgorCVRoZSBuYW1lIG9mIHRoZSByZWYgKHRoZSBwYXJ0IGFmdGVyICRHSVRfRElSLykuCisJRm9yIGEgbm9uLWFtYmlndW91cyBzaG9ydCBuYW1lIG9mIHRoZSByZWYgYXBwZW5kIGA6c2hvcnRgLgorCVRoZSBvcHRpb24gY29yZS53YXJuQW1iaWd1b3VzUmVmcyBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgc3RyaWN0CisJYWJicmV2aWF0aW9uIG1vZGUuIElmIGBsc3RyaXA9PE4+YCAoYHJzdHJpcD08Tj5gKSBpcyBhcHBlbmRlZCwgc3RyaXBzIGA8Tj5gCisJc2xhc2gtc2VwYXJhdGVkIHBhdGggY29tcG9uZW50cyBmcm9tIHRoZSBmcm9udCAoYmFjaykgb2YgdGhlIHJlZm5hbWUKKwkoZS5nLiBgJShyZWZuYW1lOmxzdHJpcD0yKWAgdHVybnMgYHJlZnMvdGFncy9mb29gIGludG8gYGZvb2AgYW5kCisJYCUocmVmbmFtZTpyc3RyaXA9MilgIHR1cm5zIGByZWZzL3RhZ3MvZm9vYCBpbnRvIGByZWZzYCkuCisJSWYgYDxOPmAgaXMgYSBuZWdhdGl2ZSBudW1iZXIsIHN0cmlwIGFzIG1hbnkgcGF0aCBjb21wb25lbnRzIGFzCisJbmVjZXNzYXJ5IGZyb20gdGhlIHNwZWNpZmllZCBlbmQgdG8gbGVhdmUgYC08Tj5gIHBhdGggY29tcG9uZW50cworCShlLmcuIGAlKHJlZm5hbWU6bHN0cmlwPS0yKWAgdHVybnMKKwlgcmVmcy90YWdzL2Zvb2AgaW50byBgdGFncy9mb29gIGFuZCBgJShyZWZuYW1lOnJzdHJpcD0tMSlgCisJdHVybnMgYHJlZnMvdGFncy9mb29gIGludG8gYHJlZnNgKS4gV2hlbiB0aGUgcmVmIGRvZXMgbm90IGhhdmUKKwllbm91Z2ggY29tcG9uZW50cywgdGhlIHJlc3VsdCBiZWNvbWVzIGFuIGVtcHR5IHN0cmluZyBpZgorCXN0cmlwcGluZyB3aXRoIHBvc2l0aXZlIDxOPiwgb3IgaXQgYmVjb21lcyB0aGUgZnVsbCByZWZuYW1lIGlmCisJc3RyaXBwaW5nIHdpdGggbmVnYXRpdmUgPE4+LiAgTmVpdGhlciBpcyBhbiBlcnJvci4KKysKK2BzdHJpcGAgY2FuIGJlIHVzZWQgYXMgYSBzeW5vbnltIHRvIGBsc3RyaXBgLgorCitvYmplY3R0eXBlOjoKKwlUaGUgdHlwZSBvZiB0aGUgb2JqZWN0IChgYmxvYmAsIGB0cmVlYCwgYGNvbW1pdGAsIGB0YWdgKS4KKworb2JqZWN0c2l6ZTo6CisJVGhlIHNpemUgb2YgdGhlIG9iamVjdCAodGhlIHNhbWUgYXMgJ2dpdCBjYXQtZmlsZSAtcycgcmVwb3J0cykuCisJQXBwZW5kIGA6ZGlza2AgdG8gZ2V0IHRoZSBzaXplLCBpbiBieXRlcywgdGhhdCB0aGUgb2JqZWN0IHRha2VzIHVwIG9uCisJZGlzay4gU2VlIHRoZSBub3RlIGFib3V0IG9uLWRpc2sgc2l6ZXMgaW4gdGhlIGBDQVZFQVRTYCBzZWN0aW9uIGJlbG93Lgorb2JqZWN0bmFtZTo6CisJVGhlIG9iamVjdCBuYW1lIChha2EgU0hBLTEpLgorCUZvciBhIG5vbi1hbWJpZ3VvdXMgYWJicmV2aWF0aW9uIG9mIHRoZSBvYmplY3QgbmFtZSBhcHBlbmQgYDpzaG9ydGAuCisJRm9yIGFuIGFiYnJldmlhdGlvbiBvZiB0aGUgb2JqZWN0IG5hbWUgd2l0aCBkZXNpcmVkIGxlbmd0aCBhcHBlbmQKKwlgOnNob3J0PTxsZW5ndGg+YCwgd2hlcmUgdGhlIG1pbmltdW0gbGVuZ3RoIGlzIE1JTklNVU1fQUJCUkVWLiBUaGUKKwlsZW5ndGggbWF5IGJlIGV4Y2VlZGVkIHRvIGVuc3VyZSB1bmlxdWUgb2JqZWN0IG5hbWVzLgorZGVsdGFiYXNlOjoKKwlUaGlzIGV4cGFuZHMgdG8gdGhlIG9iamVjdCBuYW1lIG9mIHRoZSBkZWx0YSBiYXNlIGZvciB0aGUKKwlnaXZlbiBvYmplY3QsIGlmIGl0IGlzIHN0b3JlZCBhcyBhIGRlbHRhLiAgT3RoZXJ3aXNlIGl0CisJZXhwYW5kcyB0byB0aGUgbnVsbCBvYmplY3QgbmFtZSAoYWxsIHplcm9lcykuCisKK3Vwc3RyZWFtOjoKKwlUaGUgbmFtZSBvZiBhIGxvY2FsIHJlZiB3aGljaCBjYW4gYmUgY29uc2lkZXJlZCBgYHVwc3RyZWFtJycKKwlmcm9tIHRoZSBkaXNwbGF5ZWQgcmVmLiBSZXNwZWN0cyBgOnNob3J0YCwgYDpsc3RyaXBgIGFuZAorCWA6cnN0cmlwYCBpbiB0aGUgc2FtZSB3YXkgYXMgYHJlZm5hbWVgIGFib3ZlLiAgQWRkaXRpb25hbGx5CisJcmVzcGVjdHMgYDp0cmFja2AgdG8gc2hvdyAiW2FoZWFkIE4sIGJlaGluZCBNXSIgYW5kCisJYDp0cmFja3Nob3J0YCB0byBzaG93IHRoZSB0ZXJzZSB2ZXJzaW9uOiAiPiIgKGFoZWFkKSwgIjwiCisJKGJlaGluZCksICI8PiIgKGFoZWFkIGFuZCBiZWhpbmQpLCBvciAiPSIgKGluIHN5bmMpLiBgOnRyYWNrYAorCWFsc28gcHJpbnRzICJbZ29uZV0iIHdoZW5ldmVyIHVua25vd24gdXBzdHJlYW0gcmVmIGlzCisJZW5jb3VudGVyZWQuIEFwcGVuZCBgOnRyYWNrLG5vYnJhY2tldGAgdG8gc2hvdyB0cmFja2luZworCWluZm9ybWF0aW9uIHdpdGhvdXQgYnJhY2tldHMgKGkuZSAiYWhlYWQgTiwgYmVoaW5kIE0iKS4KKysKK0ZvciBhbnkgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBgJSh1cHN0cmVhbSlgLCBgJSh1cHN0cmVhbTpyZW1vdGVuYW1lKWAKK2FuZCBgJSh1cHN0cmVhbTpyZW1vdGVyZWYpYCByZWZlciB0byB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGFuZCB0aGUKK25hbWUgb2YgdGhlIHRyYWNrZWQgcmVtb3RlIHJlZiwgcmVzcGVjdGl2ZWx5LiBJbiBvdGhlciB3b3JkcywgdGhlCityZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGNhbiBiZSB1cGRhdGVkIGV4cGxpY2l0bHkgYW5kIGluZGl2aWR1YWxseSBieQordXNpbmcgdGhlIHJlZnNwZWMgYCUodXBzdHJlYW06cmVtb3RlcmVmKTolKHVwc3RyZWFtKWAgdG8gZmV0Y2ggZnJvbQorYCUodXBzdHJlYW06cmVtb3RlbmFtZSlgLgorKworSGFzIG5vIGVmZmVjdCBpZiB0aGUgcmVmIGRvZXMgbm90IGhhdmUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYXNzb2NpYXRlZAord2l0aCBpdC4gIEFsbCB0aGUgb3B0aW9ucyBhcGFydCBmcm9tIGBub2JyYWNrZXRgIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsCitidXQgaWYgdXNlZCB0b2dldGhlciB0aGUgbGFzdCBvcHRpb24gaXMgc2VsZWN0ZWQuCisKK3B1c2g6OgorCVRoZSBuYW1lIG9mIGEgbG9jYWwgcmVmIHdoaWNoIHJlcHJlc2VudHMgdGhlIGBAe3B1c2h9YAorCWxvY2F0aW9uIGZvciB0aGUgZGlzcGxheWVkIHJlZi4gUmVzcGVjdHMgYDpzaG9ydGAsIGA6bHN0cmlwYCwKKwlgOnJzdHJpcGAsIGA6dHJhY2tgLCBgOnRyYWNrc2hvcnRgLCBgOnJlbW90ZW5hbWVgLCBhbmQgYDpyZW1vdGVyZWZgCisJb3B0aW9ucyBhcyBgdXBzdHJlYW1gIGRvZXMuIFByb2R1Y2VzIGFuIGVtcHR5IHN0cmluZyBpZiBubyBgQHtwdXNofWAKKwlyZWYgaXMgY29uZmlndXJlZC4KKworSEVBRDo6CisJJyonIGlmIEhFQUQgbWF0Y2hlcyBjdXJyZW50IHJlZiAodGhlIGNoZWNrZWQgb3V0IGJyYW5jaCksICcgJworCW90aGVyd2lzZS4KKworY29sb3I6OgorCUNoYW5nZSBvdXRwdXQgY29sb3IuIEZvbGxvd2VkIGJ5IGA6PGNvbG9ybmFtZT5gLCB3aGVyZSBjb2xvcgorCW5hbWVzIGFyZSBkZXNjcmliZWQgdW5kZXIgVmFsdWVzIGluIHRoZSAiQ09ORklHVVJBVElPTiBGSUxFIgorCXNlY3Rpb24gb2YgbGlua2dpdDpnaXQtY29uZmlnWzFdLiAgRm9yIGV4YW1wbGUsCisJYCUoY29sb3I6Ym9sZCByZWQpYC4KKworYWxpZ246OgorCUxlZnQtLCBtaWRkbGUtLCBvciByaWdodC1hbGlnbiB0aGUgY29udGVudCBiZXR3ZWVuCisJJShhbGlnbjouLi4pIGFuZCAlKGVuZCkuIFRoZSAiYWxpZ246IiBpcyBmb2xsb3dlZCBieQorCWB3aWR0aD08d2lkdGg+YCBhbmQgYHBvc2l0aW9uPTxwb3NpdGlvbj5gIGluIGFueSBvcmRlcgorCXNlcGFyYXRlZCBieSBhIGNvbW1hLCB3aGVyZSB0aGUgYDxwb3NpdGlvbj5gIGlzIGVpdGhlciBsZWZ0LAorCXJpZ2h0IG9yIG1pZGRsZSwgZGVmYXVsdCBiZWluZyBsZWZ0IGFuZCBgPHdpZHRoPmAgaXMgdGhlIHRvdGFsCisJbGVuZ3RoIG9mIHRoZSBjb250ZW50IHdpdGggYWxpZ25tZW50LiBGb3IgYnJldml0eSwgdGhlCisJIndpZHRoPSIgYW5kL29yICJwb3NpdGlvbj0iIHByZWZpeGVzIG1heSBiZSBvbWl0dGVkLCBhbmQgYmFyZQorCTx3aWR0aD4gYW5kIDxwb3NpdGlvbj4gdXNlZCBpbnN0ZWFkLiAgRm9yIGluc3RhbmNlLAorCWAlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPilgLiBJZiB0aGUgY29udGVudHMgbGVuZ3RoIGlzIG1vcmUKKwl0aGFuIHRoZSB3aWR0aCB0aGVuIG5vIGFsaWdubWVudCBpcyBwZXJmb3JtZWQuIElmIHVzZWQgd2l0aAorCWAtLXF1b3RlYCBldmVyeXRoaW5nIGluIGJldHdlZW4gJShhbGlnbjouLi4pIGFuZCAlKGVuZCkgaXMKKwlxdW90ZWQsIGJ1dCBpZiBuZXN0ZWQgdGhlbiBvbmx5IHRoZSB0b3Btb3N0IGxldmVsIHBlcmZvcm1zCisJcXVvdGluZy4KKworaWY6OgorCVVzZWQgYXMgJShpZikuLi4lKHRoZW4pLi4uJShlbmQpIG9yCisJJShpZikuLi4lKHRoZW4pLi4uJShlbHNlKS4uLiUoZW5kKS4gIElmIHRoZXJlIGlzIGFuIGF0b20gd2l0aAorCXZhbHVlIG9yIHN0cmluZyBsaXRlcmFsIGFmdGVyIHRoZSAlKGlmKSB0aGVuIGV2ZXJ5dGhpbmcgYWZ0ZXIKKwl0aGUgJSh0aGVuKSBpcyBwcmludGVkLCBlbHNlIGlmIHRoZSAlKGVsc2UpIGF0b20gaXMgdXNlZCwgdGhlbgorCWV2ZXJ5dGhpbmcgYWZ0ZXIgJShlbHNlKSBpcyBwcmludGVkLiBXZSBpZ25vcmUgc3BhY2Ugd2hlbgorCWV2YWx1YXRpbmcgdGhlIHN0cmluZyBiZWZvcmUgJSh0aGVuKSwgdGhpcyBpcyB1c2VmdWwgd2hlbiB3ZQorCXVzZSB0aGUgJShIRUFEKSBhdG9tIHdoaWNoIHByaW50cyBlaXRoZXIgIioiIG9yICIgIiBhbmQgd2UKKwl3YW50IHRvIGFwcGx5IHRoZSAnaWYnIGNvbmRpdGlvbiBvbmx5IG9uIHRoZSAnSEVBRCcgcmVmLgorCUFwcGVuZCAiOmVxdWFscz08c3RyaW5nPiIgb3IgIjpub3RlcXVhbHM9PHN0cmluZz4iIHRvIGNvbXBhcmUKKwl0aGUgdmFsdWUgYmV0d2VlbiB0aGUgJShpZjouLi4pIGFuZCAlKHRoZW4pIGF0b21zIHdpdGggdGhlCisJZ2l2ZW4gc3RyaW5nLgorCitzeW1yZWY6OgorCVRoZSByZWYgd2hpY2ggdGhlIGdpdmVuIHN5bWJvbGljIHJlZiByZWZlcnMgdG8uIElmIG5vdCBhCisJc3ltYm9saWMgcmVmLCBub3RoaW5nIGlzIHByaW50ZWQuIFJlc3BlY3RzIHRoZSBgOnNob3J0YCwKKwlgOmxzdHJpcGAgYW5kIGA6cnN0cmlwYCBvcHRpb25zIGluIHRoZSBzYW1lIHdheSBhcyBgcmVmbmFtZWAKKwlhYm92ZS4KKword29ya3RyZWVwYXRoOjoKKwlUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgd29ya3RyZWUgaW4gd2hpY2ggdGhlIHJlZiBpcyBjaGVja2VkCisJb3V0LCBpZiBpdCBpcyBjaGVja2VkIG91dCBpbiBhbnkgbGlua2VkIHdvcmt0cmVlLiBFbXB0eSBzdHJpbmcKKwlvdGhlcndpc2UuCisKK0luIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSwgZm9yIGNvbW1pdCBhbmQgdGFnIG9iamVjdHMsIHRoZSBoZWFkZXIKK2ZpZWxkIG5hbWVzIChgdHJlZWAsIGBwYXJlbnRgLCBgb2JqZWN0YCwgYHR5cGVgLCBhbmQgYHRhZ2ApIGNhbgorYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB2YWx1ZSBpbiB0aGUgaGVhZGVyIGZpZWxkLgorCitGb3IgY29tbWl0IGFuZCB0YWcgb2JqZWN0cywgdGhlIHNwZWNpYWwgYGNyZWF0b3JkYXRlYCBhbmQgYGNyZWF0b3JgCitmaWVsZHMgd2lsbCBjb3JyZXNwb25kIHRvIHRoZSBhcHByb3ByaWF0ZSBkYXRlIG9yIG5hbWUtZW1haWwtZGF0ZSB0dXBsZQorZnJvbSB0aGUgYGNvbW1pdHRlcmAgb3IgYHRhZ2dlcmAgZmllbGRzIGRlcGVuZGluZyBvbiB0aGUgb2JqZWN0IHR5cGUuCitUaGVzZSBhcmUgaW50ZW5kZWQgZm9yIHdvcmtpbmcgb24gYSBtaXggb2YgYW5ub3RhdGVkIGFuZCBsaWdodHdlaWdodCB0YWdzLgorCitGaWVsZHMgdGhhdCBoYXZlIG5hbWUtZW1haWwtZGF0ZSB0dXBsZSBhcyBpdHMgdmFsdWUgKGBhdXRob3JgLAorYGNvbW1pdHRlcmAsIGFuZCBgdGFnZ2VyYCkgY2FuIGJlIHN1ZmZpeGVkIHdpdGggYG5hbWVgLCBgZW1haWxgLAorYW5kIGBkYXRlYCB0byBleHRyYWN0IHRoZSBuYW1lZCBjb21wb25lbnQuCisKK1RoZSBjb21wbGV0ZSBtZXNzYWdlIGluIGEgY29tbWl0IGFuZCB0YWcgb2JqZWN0IGlzIGBjb250ZW50c2AuCitJdHMgZmlyc3QgbGluZSBpcyBgY29udGVudHM6c3ViamVjdGAsIHdoZXJlIHN1YmplY3QgaXMgdGhlIGNvbmNhdGVuYXRpb24KK29mIGFsbCBsaW5lcyBvZiB0aGUgY29tbWl0IG1lc3NhZ2UgdXAgdG8gdGhlIGZpcnN0IGJsYW5rIGxpbmUuICBUaGUgbmV4dAorbGluZSBpcyBgY29udGVudHM6Ym9keWAsIHdoZXJlIGJvZHkgaXMgYWxsIG9mIHRoZSBsaW5lcyBhZnRlciB0aGUgZmlyc3QKK2JsYW5rIGxpbmUuICBUaGUgb3B0aW9uYWwgR1BHIHNpZ25hdHVyZSBpcyBgY29udGVudHM6c2lnbmF0dXJlYC4gIFRoZQorZmlyc3QgYE5gIGxpbmVzIG9mIHRoZSBtZXNzYWdlIGlzIG9idGFpbmVkIHVzaW5nIGBjb250ZW50czpsaW5lcz1OYC4KK0FkZGl0aW9uYWxseSwgdGhlIHRyYWlsZXJzIGFzIGludGVycHJldGVkIGJ5IGxpbmtnaXQ6Z2l0LWludGVycHJldC10cmFpbGVyc1sxXQorYXJlIG9idGFpbmVkIGFzIGB0cmFpbGVyc2AgKG9yIGJ5IHVzaW5nIHRoZSBoaXN0b3JpY2FsIGFsaWFzCitgY29udGVudHM6dHJhaWxlcnNgKS4gIE5vbi10cmFpbGVyIGxpbmVzIGZyb20gdGhlIHRyYWlsZXIgYmxvY2sgY2FuIGJlIG9taXR0ZWQKK3dpdGggYHRyYWlsZXJzOm9ubHlgLiBXaGl0ZXNwYWNlLWNvbnRpbnVhdGlvbnMgY2FuIGJlIHJlbW92ZWQgZnJvbSB0cmFpbGVycyBzbwordGhhdCBlYWNoIHRyYWlsZXIgYXBwZWFycyBvbiBhIGxpbmUgYnkgaXRzZWxmIHdpdGggaXRzIGZ1bGwgY29udGVudCB3aXRoCitgdHJhaWxlcnM6dW5mb2xkYC4gQm90aCBjYW4gYmUgdXNlZCB0b2dldGhlciBhcyBgdHJhaWxlcnM6dW5mb2xkLG9ubHlgLgorCitGb3Igc29ydGluZyBwdXJwb3NlcywgZmllbGRzIHdpdGggbnVtZXJpYyB2YWx1ZXMgc29ydCBpbiBudW1lcmljIG9yZGVyCisoYG9iamVjdHNpemVgLCBgYXV0aG9yZGF0ZWAsIGBjb21taXR0ZXJkYXRlYCwgYGNyZWF0b3JkYXRlYCwgYHRhZ2dlcmRhdGVgKS4KK0FsbCBvdGhlciBmaWVsZHMgYXJlIHVzZWQgdG8gc29ydCBpbiB0aGVpciBieXRlLXZhbHVlIG9yZGVyLgorCitUaGVyZSBpcyBhbHNvIGFuIG9wdGlvbiB0byBzb3J0IGJ5IHZlcnNpb25zLCB0aGlzIGNhbiBiZSBkb25lIGJ5IHVzaW5nCit0aGUgZmllbGRuYW1lIGB2ZXJzaW9uOnJlZm5hbWVgIG9yIGl0cyBhbGlhcyBgdjpyZWZuYW1lYC4KKworSW4gYW55IGNhc2UsIGEgZmllbGQgbmFtZSB0aGF0IHJlZmVycyB0byBhIGZpZWxkIGluYXBwbGljYWJsZSB0bwordGhlIG9iamVjdCByZWZlcnJlZCBieSB0aGUgcmVmIGRvZXMgbm90IGNhdXNlIGFuIGVycm9yLiAgSXQKK3JldHVybnMgYW4gZW1wdHkgc3RyaW5nIGluc3RlYWQuCisKK0FzIGEgc3BlY2lhbCBjYXNlIGZvciB0aGUgZGF0ZS10eXBlIGZpZWxkcywgeW91IG1heSBzcGVjaWZ5IGEgZm9ybWF0IGZvcgordGhlIGRhdGUgYnkgYWRkaW5nIGA6YCBmb2xsb3dlZCBieSBkYXRlIGZvcm1hdCBuYW1lIChzZWUgdGhlCit2YWx1ZXMgdGhlIGAtLWRhdGVgIG9wdGlvbiB0byBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSB0YWtlcykuCisKK1NvbWUgYXRvbXMgbGlrZSAlKGFsaWduKSBhbmQgJShpZikgYWx3YXlzIHJlcXVpcmUgYSBtYXRjaGluZyAlKGVuZCkuCitXZSBjYWxsIHRoZW0gIm9wZW5pbmcgYXRvbXMiIGFuZCBzb21ldGltZXMgZGVub3RlIHRoZW0gYXMgJSgkb3BlbikuCisKK1doZW4gYSBzY3JpcHRpbmcgbGFuZ3VhZ2Ugc3BlY2lmaWMgcXVvdGluZyBpcyBpbiBlZmZlY3QsIGV2ZXJ5dGhpbmcKK2JldHdlZW4gYSB0b3AtbGV2ZWwgb3BlbmluZyBhdG9tIGFuZCBpdHMgbWF0Y2hpbmcgJShlbmQpIGlzIGV2YWx1YXRlZAorYWNjb3JkaW5nIHRvIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIG9wZW5pbmcgYXRvbSBhbmQgb25seSBpdHMgcmVzdWx0Citmcm9tIHRoZSB0b3AtbGV2ZWwgaXMgcXVvdGVkLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitBbiBleGFtcGxlIGRpcmVjdGx5IHByb2R1Y2luZyBmb3JtYXR0ZWQgdGV4dC4gIFNob3cgdGhlIG1vc3QgcmVjZW50CiszIHRhZ2dlZCBjb21taXRzOgorCistLS0tLS0tLS0tLS0KKyMhL2Jpbi9zaAorCitnaXQgZm9yLWVhY2gtcmVmIC0tY291bnQ9MyAtLXNvcnQ9Jy0qYXV0aG9yZGF0ZScgXAorLS1mb3JtYXQ9J0Zyb206ICUoKmF1dGhvcm5hbWUpICUoKmF1dGhvcmVtYWlsKQorU3ViamVjdDogJSgqc3ViamVjdCkKK0RhdGU6ICUoKmF1dGhvcmRhdGUpCitSZWY6ICUoKnJlZm5hbWUpCisKKyUoKmJvZHkpCisnICdyZWZzL3RhZ3MnCistLS0tLS0tLS0tLS0KKworCitBIHNpbXBsZSBleGFtcGxlIHNob3dpbmcgdGhlIHVzZSBvZiBzaGVsbCBldmFsIG9uIHRoZSBvdXRwdXQsCitkZW1vbnN0cmF0aW5nIHRoZSB1c2Ugb2YgLS1zaGVsbC4gIExpc3QgdGhlIHByZWZpeGVzIG9mIGFsbCBoZWFkczoKKy0tLS0tLS0tLS0tLQorIyEvYmluL3NoCisKK2dpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0icmVmPSUocmVmbmFtZSkiIHJlZnMvaGVhZHMgfCBcCit3aGlsZSByZWFkIGVudHJ5CitkbworCWV2YWwgIiRlbnRyeSIKKwllY2hvIGBkaXJuYW1lICRyZWZgCitkb25lCistLS0tLS0tLS0tLS0KKworCitBIGJpdCBtb3JlIGVsYWJvcmF0ZSByZXBvcnQgb24gdGFncywgZGVtb25zdHJhdGluZyB0aGF0IHRoZSBmb3JtYXQKK21heSBiZSBhbiBlbnRpcmUgc2NyaXB0OgorLS0tLS0tLS0tLS0tCisjIS9iaW4vc2gKKworZm10PScKKwlyPSUocmVmbmFtZSkKKwl0PSUoKm9iamVjdHR5cGUpCisJVD0ke3IjcmVmcy90YWdzL30KKworCW89JSgqb2JqZWN0bmFtZSkKKwluPSUoKmF1dGhvcm5hbWUpCisJZT0lKCphdXRob3JlbWFpbCkKKwlzPSUoKnN1YmplY3QpCisJZD0lKCphdXRob3JkYXRlKQorCWI9JSgqYm9keSkKKworCWtpbmQ9VGFnCisJaWYgdGVzdCAieiR0IiA9IHoKKwl0aGVuCisJCSMgY291bGQgYmUgYSBsaWdodHdlaWdodCB0YWcKKwkJdD0lKG9iamVjdHR5cGUpCisJCWtpbmQ9IkxpZ2h0d2VpZ2h0IHRhZyIKKwkJbz0lKG9iamVjdG5hbWUpCisJCW49JShhdXRob3JuYW1lKQorCQllPSUoYXV0aG9yZW1haWwpCisJCXM9JShzdWJqZWN0KQorCQlkPSUoYXV0aG9yZGF0ZSkKKwkJYj0lKGJvZHkpCisJZmkKKwllY2hvICIka2luZCAkVCBwb2ludHMgYXQgYSAkdCBvYmplY3QgJG8iCisJaWYgdGVzdCAieiR0IiA9IHpjb21taXQKKwl0aGVuCisJCWVjaG8gIlRoZSBjb21taXQgd2FzIGF1dGhvcmVkIGJ5ICRuICRlCithdCAkZCwgYW5kIHRpdGxlZAorCisgICAgJHMKKworSXRzIG1lc3NhZ2UgcmVhZHMgYXM6CisiCisJCWVjaG8gIiRiIiB8IHNlZCAtZSAicy9eLyAgICAvIgorCQllY2hvCisJZmkKKycKKworZXZhbD1gZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIkZm10IiBcCisJLS1zb3J0PScqb2JqZWN0dHlwZScgXAorCS0tc29ydD0tdGFnZ2VyZGF0ZSBcCisJcmVmcy90YWdzYAorZXZhbCAiJGV2YWwiCistLS0tLS0tLS0tLS0KKworCitBbiBleGFtcGxlIHRvIHNob3cgdGhlIHVzYWdlIG9mICUoaWYpLi4uJSh0aGVuKS4uLiUoZWxzZSkuLi4lKGVuZCkuCitUaGlzIHByZWZpeGVzIHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIGEgc3Rhci4KKworLS0tLS0tLS0tLS0tCitnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGlmKSUoSEVBRCklKHRoZW4pKiAlKGVsc2UpICAlKGVuZCklKHJlZm5hbWU6c2hvcnQpIiByZWZzL2hlYWRzLworLS0tLS0tLS0tLS0tCisKKworQW4gZXhhbXBsZSB0byBzaG93IHRoZSB1c2FnZSBvZiAlKGlmKS4uLiUodGhlbikuLi4lKGVuZCkuCitUaGlzIHByaW50cyB0aGUgYXV0aG9ybmFtZSwgaWYgcHJlc2VudC4KKworLS0tLS0tLS0tLS0tCitnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpJShpZiklKGF1dGhvcm5hbWUpJSh0aGVuKSBBdXRob3JlZCBieTogJShhdXRob3JuYW1lKSUoZW5kKSIKKy0tLS0tLS0tLS0tLQorCitDQVZFQVRTCistLS0tLS0tCisKK05vdGUgdGhhdCB0aGUgc2l6ZXMgb2Ygb2JqZWN0cyBvbiBkaXNrIGFyZSByZXBvcnRlZCBhY2N1cmF0ZWx5LCBidXQgY2FyZQorc2hvdWxkIGJlIHRha2VuIGluIGRyYXdpbmcgY29uY2x1c2lvbnMgYWJvdXQgd2hpY2ggcmVmcyBvciBvYmplY3RzIGFyZQorcmVzcG9uc2libGUgZm9yIGRpc2sgdXNhZ2UuIFRoZSBzaXplIG9mIGEgcGFja2VkIG5vbi1kZWx0YSBvYmplY3QgbWF5IGJlCittdWNoIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIG9iamVjdHMgd2hpY2ggZGVsdGEgYWdhaW5zdCBpdCwgYnV0IHRoZQorY2hvaWNlIG9mIHdoaWNoIG9iamVjdCBpcyB0aGUgYmFzZSBhbmQgd2hpY2ggaXMgdGhlIGRlbHRhIGlzIGFyYml0cmFyeQorYW5kIGlzIHN1YmplY3QgdG8gY2hhbmdlIGR1cmluZyBhIHJlcGFjay4KKworTm90ZSBhbHNvIHRoYXQgbXVsdGlwbGUgY29waWVzIG9mIGFuIG9iamVjdCBtYXkgYmUgcHJlc2VudCBpbiB0aGUgb2JqZWN0CitkYXRhYmFzZTsgaW4gdGhpcyBjYXNlLCBpdCBpcyB1bmRlZmluZWQgd2hpY2ggY29weSdzIHNpemUgb3IgZGVsdGEgYmFzZQord2lsbCBiZSByZXBvcnRlZC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1zaG93LXJlZlsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmODFkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CkBAIC0wLDAgKzEsNzE5IEBACitnaXQtZm9ybWF0LXBhdGNoKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1mb3JtYXQtcGF0Y2ggLSBQcmVwYXJlIHBhdGNoZXMgZm9yIGUtbWFpbCBzdWJtaXNzaW9uCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGZvcm1hdC1wYXRjaCcgWy1rXSBbKC1vfC0tb3V0cHV0LWRpcmVjdG9yeSkgPGRpcj4gfCAtLXN0ZG91dF0KKwkJICAgWy0tbm8tdGhyZWFkIHwgLS10aHJlYWRbPTxzdHlsZT5dXQorCQkgICBbKC0tYXR0YWNofC0taW5saW5lKVs9PGJvdW5kYXJ5Pl0gfCAtLW5vLWF0dGFjaF0KKwkJICAgWy1zIHwgLS1zaWdub2ZmXQorCQkgICBbLS1zaWduYXR1cmU9PHNpZ25hdHVyZT4gfCAtLW5vLXNpZ25hdHVyZV0KKwkJICAgWy0tc2lnbmF0dXJlLWZpbGU9PGZpbGU+XQorCQkgICBbLW4gfCAtLW51bWJlcmVkIHwgLU4gfCAtLW5vLW51bWJlcmVkXQorCQkgICBbLS1zdGFydC1udW1iZXIgPG4+XSBbLS1udW1iZXJlZC1maWxlc10KKwkJICAgWy0taW4tcmVwbHktdG89PG1lc3NhZ2UgaWQ+XSBbLS1zdWZmaXg9LjxzZng+XQorCQkgICBbLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW1dCisJCSAgIFstLWNvdmVyLWZyb20tZGVzY3JpcHRpb249PG1vZGU+XQorCQkgICBbLS1yZmNdIFstLXN1YmplY3QtcHJlZml4PTxzdWJqZWN0IHByZWZpeD5dCisJCSAgIFsoLS1yZXJvbGwtY291bnR8LXYpIDxuPl0KKwkJICAgWy0tdG89PGVtYWlsPl0gWy0tY2M9PGVtYWlsPl0KKwkJICAgWy0tW25vLV1jb3Zlci1sZXR0ZXJdIFstLXF1aWV0XQorCQkgICBbLS1bbm8tXWVuY29kZS1lbWFpbC1oZWFkZXJzXQorCQkgICBbLS1uby1ub3RlcyB8IC0tbm90ZXNbPTxyZWY+XV0KKwkJICAgWy0taW50ZXJkaWZmPTxwcmV2aW91cz5dCisJCSAgIFstLXJhbmdlLWRpZmY9PHByZXZpb3VzPiBbLS1jcmVhdGlvbi1mYWN0b3I9PHBlcmNlbnQ+XV0KKwkJICAgWy0tcHJvZ3Jlc3NdCisJCSAgIFs8Y29tbW9uIGRpZmYgb3B0aW9ucz5dCisJCSAgIFsgPHNpbmNlPiB8IDxyZXZpc2lvbiByYW5nZT4gXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworUHJlcGFyZSBlYWNoIGNvbW1pdCB3aXRoIGl0cyBwYXRjaCBpbgorb25lIGZpbGUgcGVyIGNvbW1pdCwgZm9ybWF0dGVkIHRvIHJlc2VtYmxlIFVOSVggbWFpbGJveCBmb3JtYXQuCitUaGUgb3V0cHV0IG9mIHRoaXMgY29tbWFuZCBpcyBjb252ZW5pZW50IGZvciBlLW1haWwgc3VibWlzc2lvbiBvcgorZm9yIHVzZSB3aXRoICdnaXQgYW0nLgorCitUaGVyZSBhcmUgdHdvIHdheXMgdG8gc3BlY2lmeSB3aGljaCBjb21taXRzIHRvIG9wZXJhdGUgb24uCisKKzEuIEEgc2luZ2xlIGNvbW1pdCwgPHNpbmNlPiwgc3BlY2lmaWVzIHRoYXQgdGhlIGNvbW1pdHMgbGVhZGluZworICAgdG8gdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2ggdGhhdCBhcmUgbm90IGluIHRoZSBoaXN0b3J5CisgICB0aGF0IGxlYWRzIHRvIHRoZSA8c2luY2U+IHRvIGJlIG91dHB1dC4KKworMi4gR2VuZXJpYyA8cmV2aXNpb24gcmFuZ2U+IGV4cHJlc3Npb24gKHNlZSAiU1BFQ0lGWUlORworICAgUkVWSVNJT05TIiBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddKSBtZWFucyB0aGUKKyAgIGNvbW1pdHMgaW4gdGhlIHNwZWNpZmllZCByYW5nZS4KKworVGhlIGZpcnN0IHJ1bGUgdGFrZXMgcHJlY2VkZW5jZSBpbiB0aGUgY2FzZSBvZiBhIHNpbmdsZSA8Y29tbWl0Pi4gIFRvCithcHBseSB0aGUgc2Vjb25kIHJ1bGUsIGkuZS4sIGZvcm1hdCBldmVyeXRoaW5nIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YKK2hpc3RvcnkgdXAgdW50aWwgPGNvbW1pdD4sIHVzZSB0aGUgYC0tcm9vdGAgb3B0aW9uOiBgZ2l0IGZvcm1hdC1wYXRjaAorLS1yb290IDxjb21taXQ+YC4gIElmIHlvdSB3YW50IHRvIGZvcm1hdCBvbmx5IDxjb21taXQ+IGl0c2VsZiwgeW91CitjYW4gZG8gdGhpcyB3aXRoIGBnaXQgZm9ybWF0LXBhdGNoIC0xIDxjb21taXQ+YC4KKworQnkgZGVmYXVsdCwgZWFjaCBvdXRwdXQgZmlsZSBpcyBudW1iZXJlZCBzZXF1ZW50aWFsbHkgZnJvbSAxLCBhbmQgdXNlcyB0aGUKK2ZpcnN0IGxpbmUgb2YgdGhlIGNvbW1pdCBtZXNzYWdlIChtYXNzYWdlZCBmb3IgcGF0aG5hbWUgc2FmZXR5KSBhcwordGhlIGZpbGVuYW1lLiBXaXRoIHRoZSBgLS1udW1iZXJlZC1maWxlc2Agb3B0aW9uLCB0aGUgb3V0cHV0IGZpbGUgbmFtZXMKK3dpbGwgb25seSBiZSBudW1iZXJzLCB3aXRob3V0IHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBjb21taXQgYXBwZW5kZWQuCitUaGUgbmFtZXMgb2YgdGhlIG91dHB1dCBmaWxlcyBhcmUgcHJpbnRlZCB0byBzdGFuZGFyZAorb3V0cHV0LCB1bmxlc3MgdGhlIGAtLXN0ZG91dGAgb3B0aW9uIGlzIHNwZWNpZmllZC4KKworSWYgYC1vYCBpcyBzcGVjaWZpZWQsIG91dHB1dCBmaWxlcyBhcmUgY3JlYXRlZCBpbiA8ZGlyPi4gIE90aGVyd2lzZQordGhleSBhcmUgY3JlYXRlZCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gVGhlIGRlZmF1bHQgcGF0aAorY2FuIGJlIHNldCB3aXRoIHRoZSBgZm9ybWF0Lm91dHB1dERpcmVjdG9yeWAgY29uZmlndXJhdGlvbiBvcHRpb24uCitUaGUgYC1vYCBvcHRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBmb3JtYXQub3V0cHV0RGlyZWN0b3J5YC4KK1RvIHN0b3JlIHBhdGNoZXMgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgZXZlbiB3aGVuCitgZm9ybWF0Lm91dHB1dERpcmVjdG9yeWAgcG9pbnRzIGVsc2V3aGVyZSwgdXNlIGAtbyAuYC4gQWxsIGRpcmVjdG9yeQorY29tcG9uZW50cyB3aWxsIGJlIGNyZWF0ZWQuCisKK0J5IGRlZmF1bHQsIHRoZSBzdWJqZWN0IG9mIGEgc2luZ2xlIHBhdGNoIGlzICJbUEFUQ0hdICIgZm9sbG93ZWQgYnkKK3RoZSBjb25jYXRlbmF0aW9uIG9mIGxpbmVzIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlIHVwIHRvIHRoZSBmaXJzdCBibGFuaworbGluZSAoc2VlIHRoZSBESVNDVVNTSU9OIHNlY3Rpb24gb2YgbGlua2dpdDpnaXQtY29tbWl0WzFdKS4KKworV2hlbiBtdWx0aXBsZSBwYXRjaGVzIGFyZSBvdXRwdXQsIHRoZSBzdWJqZWN0IHByZWZpeCB3aWxsIGluc3RlYWQgYmUKKyJbUEFUQ0ggbi9tXSAiLiAgVG8gZm9yY2UgMS8xIHRvIGJlIGFkZGVkIGZvciBhIHNpbmdsZSBwYXRjaCwgdXNlIGAtbmAuCitUbyBvbWl0IHBhdGNoIG51bWJlcnMgZnJvbSB0aGUgc3ViamVjdCwgdXNlIGAtTmAuCisKK0lmIGdpdmVuIGAtLXRocmVhZGAsIGBnaXQtZm9ybWF0LXBhdGNoYCB3aWxsIGdlbmVyYXRlIGBJbi1SZXBseS1Ub2AgYW5kCitgUmVmZXJlbmNlc2AgaGVhZGVycyB0byBtYWtlIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgcGF0Y2ggbWFpbHMgYXBwZWFyCithcyByZXBsaWVzIHRvIHRoZSBmaXJzdCBtYWlsOyB0aGlzIGFsc28gZ2VuZXJhdGVzIGEgYE1lc3NhZ2UtSWRgIGhlYWRlciB0bworcmVmZXJlbmNlLgorCitPUFRJT05TCistLS0tLS0tCis6Z2l0LWZvcm1hdC1wYXRjaDogMQoraW5jbHVkZTo6ZGlmZi1vcHRpb25zLnR4dFtdCisKKy08bj46OgorCVByZXBhcmUgcGF0Y2hlcyBmcm9tIHRoZSB0b3Btb3N0IDxuPiBjb21taXRzLgorCistbyA8ZGlyPjo6CistLW91dHB1dC1kaXJlY3RvcnkgPGRpcj46OgorCVVzZSA8ZGlyPiB0byBzdG9yZSB0aGUgcmVzdWx0aW5nIGZpbGVzLCBpbnN0ZWFkIG9mIHRoZQorCWN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisKKy1uOjoKKy0tbnVtYmVyZWQ6OgorCU5hbWUgb3V0cHV0IGluICdbUEFUQ0ggbi9tXScgZm9ybWF0LCBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2guCisKKy1OOjoKKy0tbm8tbnVtYmVyZWQ6OgorCU5hbWUgb3V0cHV0IGluICdbUEFUQ0hdJyBmb3JtYXQuCisKKy0tc3RhcnQtbnVtYmVyIDxuPjo6CisJU3RhcnQgbnVtYmVyaW5nIHRoZSBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEuCisKKy0tbnVtYmVyZWQtZmlsZXM6OgorCU91dHB1dCBmaWxlIG5hbWVzIHdpbGwgYmUgYSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlCisJd2l0aG91dCB0aGUgZGVmYXVsdCBmaXJzdCBsaW5lIG9mIHRoZSBjb21taXQgYXBwZW5kZWQuCisKKy1rOjoKKy0ta2VlcC1zdWJqZWN0OjoKKwlEbyBub3Qgc3RyaXAvYWRkICdbUEFUQ0hdJyBmcm9tIHRoZSBmaXJzdCBsaW5lIG9mIHRoZQorCWNvbW1pdCBsb2cgbWVzc2FnZS4KKworLXM6OgorLS1zaWdub2ZmOjoKKwlBZGQgYFNpZ25lZC1vZmYtYnk6YCBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSwgdXNpbmcKKwl0aGUgY29tbWl0dGVyIGlkZW50aXR5IG9mIHlvdXJzZWxmLgorCVNlZSB0aGUgc2lnbm9mZiBvcHRpb24gaW4gbGlua2dpdDpnaXQtY29tbWl0WzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCistLXN0ZG91dDo6CisJUHJpbnQgYWxsIGNvbW1pdHMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCBpbiBtYm94IGZvcm1hdCwKKwlpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgZmlsZSBmb3IgZWFjaCBvbmUuCisKKy0tYXR0YWNoWz08Ym91bmRhcnk+XTo6CisJQ3JlYXRlIG11bHRpcGFydC9taXhlZCBhdHRhY2htZW50LCB0aGUgZmlyc3QgcGFydCBvZgorCXdoaWNoIGlzIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgdGhlIHBhdGNoIGl0c2VsZiBpbiB0aGUKKwlzZWNvbmQgcGFydCwgd2l0aCBgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudGAuCisKKy0tbm8tYXR0YWNoOjoKKwlEaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiBhbiBhdHRhY2htZW50LCBvdmVycmlkaW5nIHRoZQorCWNvbmZpZ3VyYXRpb24gc2V0dGluZy4KKworLS1pbmxpbmVbPTxib3VuZGFyeT5dOjoKKwlDcmVhdGUgbXVsdGlwYXJ0L21peGVkIGF0dGFjaG1lbnQsIHRoZSBmaXJzdCBwYXJ0IG9mCisJd2hpY2ggaXMgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCB0aGUgcGF0Y2ggaXRzZWxmIGluIHRoZQorCXNlY29uZCBwYXJ0LCB3aXRoIGBDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmVgLgorCistLXRocmVhZFs9PHN0eWxlPl06OgorLS1uby10aHJlYWQ6OgorCUNvbnRyb2xzIGFkZGl0aW9uIG9mIGBJbi1SZXBseS1Ub2AgYW5kIGBSZWZlcmVuY2VzYCBoZWFkZXJzIHRvCisJbWFrZSB0aGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IG1haWxzIGFwcGVhciBhcyByZXBsaWVzIHRvIHRoZQorCWZpcnN0LiAgQWxzbyBjb250cm9scyBnZW5lcmF0aW9uIG9mIHRoZSBgTWVzc2FnZS1JZGAgaGVhZGVyIHRvCisJcmVmZXJlbmNlLgorKworVGhlIG9wdGlvbmFsIDxzdHlsZT4gYXJndW1lbnQgY2FuIGJlIGVpdGhlciBgc2hhbGxvd2Agb3IgYGRlZXBgLgorJ3NoYWxsb3cnIHRocmVhZGluZyBtYWtlcyBldmVyeSBtYWlsIGEgcmVwbHkgdG8gdGhlIGhlYWQgb2YgdGhlCitzZXJpZXMsIHdoZXJlIHRoZSBoZWFkIGlzIGNob3NlbiBmcm9tIHRoZSBjb3ZlciBsZXR0ZXIsIHRoZQorYC0taW4tcmVwbHktdG9gLCBhbmQgdGhlIGZpcnN0IHBhdGNoIG1haWwsIGluIHRoaXMgb3JkZXIuICAnZGVlcCcKK3RocmVhZGluZyBtYWtlcyBldmVyeSBtYWlsIGEgcmVwbHkgdG8gdGhlIHByZXZpb3VzIG9uZS4KKysKK1RoZSBkZWZhdWx0IGlzIGAtLW5vLXRocmVhZGAsIHVubGVzcyB0aGUgYGZvcm1hdC50aHJlYWRgIGNvbmZpZ3VyYXRpb24KK2lzIHNldC4gIElmIGAtLXRocmVhZGAgaXMgc3BlY2lmaWVkIHdpdGhvdXQgYSBzdHlsZSwgaXQgZGVmYXVsdHMgdG8gdGhlCitzdHlsZSBzcGVjaWZpZWQgYnkgYGZvcm1hdC50aHJlYWRgIGlmIGFueSwgb3IgZWxzZSBgc2hhbGxvd2AuCisrCitCZXdhcmUgdGhhdCB0aGUgZGVmYXVsdCBmb3IgJ2dpdCBzZW5kLWVtYWlsJyBpcyB0byB0aHJlYWQgZW1haWxzCitpdHNlbGYuICBJZiB5b3Ugd2FudCBgZ2l0IGZvcm1hdC1wYXRjaGAgdG8gdGFrZSBjYXJlIG9mIHRocmVhZGluZywgeW91Cit3aWxsIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhyZWFkaW5nIGlzIGRpc2FibGVkIGZvciBgZ2l0IHNlbmQtZW1haWxgLgorCistLWluLXJlcGx5LXRvPTxtZXNzYWdlIGlkPjo6CisJTWFrZSB0aGUgZmlyc3QgbWFpbCAob3IgYWxsIHRoZSBtYWlscyB3aXRoIGAtLW5vLXRocmVhZGApIGFwcGVhciBhcyBhCisJcmVwbHkgdG8gdGhlIGdpdmVuIDxtZXNzYWdlIGlkPiwgd2hpY2ggYXZvaWRzIGJyZWFraW5nIHRocmVhZHMgdG8KKwlwcm92aWRlIGEgbmV3IHBhdGNoIHNlcmllcy4KKworLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW06OgorCURvIG5vdCBpbmNsdWRlIGEgcGF0Y2ggdGhhdCBtYXRjaGVzIGEgY29tbWl0IGluCisJPHVudGlsPi4uPHNpbmNlPi4gIFRoaXMgd2lsbCBleGFtaW5lIGFsbCBwYXRjaGVzIHJlYWNoYWJsZQorCWZyb20gPHNpbmNlPiBidXQgbm90IGZyb20gPHVudGlsPiBhbmQgY29tcGFyZSB0aGVtIHdpdGggdGhlCisJcGF0Y2hlcyBiZWluZyBnZW5lcmF0ZWQsIGFuZCBhbnkgcGF0Y2ggdGhhdCBtYXRjaGVzIGlzCisJaWdub3JlZC4KKworLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uPTxtb2RlPjo6CisJQ29udHJvbHMgd2hpY2ggcGFydHMgb2YgdGhlIGNvdmVyIGxldHRlciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKwlwb3B1bGF0ZWQgdXNpbmcgdGhlIGJyYW5jaCdzIGRlc2NyaXB0aW9uLgorKworSWYgYDxtb2RlPmAgaXMgYG1lc3NhZ2VgIG9yIGBkZWZhdWx0YCwgdGhlIGNvdmVyIGxldHRlciBzdWJqZWN0IHdpbGwgYmUKK3BvcHVsYXRlZCB3aXRoIHBsYWNlaG9sZGVyIHRleHQuIFRoZSBib2R5IG9mIHRoZSBjb3ZlciBsZXR0ZXIgd2lsbCBiZQorcG9wdWxhdGVkIHdpdGggdGhlIGJyYW5jaCdzIGRlc2NyaXB0aW9uLiBUaGlzIGlzIHRoZSBkZWZhdWx0IG1vZGUgd2hlbgorbm8gY29uZmlndXJhdGlvbiBub3IgY29tbWFuZCBsaW5lIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisrCitJZiBgPG1vZGU+YCBpcyBgc3ViamVjdGAsIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGhlIGJyYW5jaCBkZXNjcmlwdGlvbiB3aWxsCitwb3B1bGF0ZSB0aGUgY292ZXIgbGV0dGVyIHN1YmplY3QuIFRoZSByZW1haW5kZXIgb2YgdGhlIGRlc2NyaXB0aW9uIHdpbGwKK3BvcHVsYXRlIHRoZSBib2R5IG9mIHRoZSBjb3ZlciBsZXR0ZXIuCisrCitJZiBgPG1vZGU+YCBpcyBgYXV0b2AsIGlmIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGhlIGJyYW5jaCBkZXNjcmlwdGlvbgoraXMgZ3JlYXRlciB0aGFuIDEwMCBieXRlcywgdGhlbiB0aGUgbW9kZSB3aWxsIGJlIGBtZXNzYWdlYCwgb3RoZXJ3aXNlCitgc3ViamVjdGAgd2lsbCBiZSB1c2VkLgorKworSWYgYDxtb2RlPmAgaXMgYG5vbmVgLCBib3RoIHRoZSBjb3ZlciBsZXR0ZXIgc3ViamVjdCBhbmQgYm9keSB3aWxsIGJlCitwb3B1bGF0ZWQgd2l0aCBwbGFjZWhvbGRlciB0ZXh0LgorCistLXN1YmplY3QtcHJlZml4PTxzdWJqZWN0IHByZWZpeD46OgorCUluc3RlYWQgb2YgdGhlIHN0YW5kYXJkICdbUEFUQ0hdJyBwcmVmaXggaW4gdGhlIHN1YmplY3QKKwlsaW5lLCBpbnN0ZWFkIHVzZSAnWzxzdWJqZWN0IHByZWZpeD5dJy4gVGhpcworCWFsbG93cyBmb3IgdXNlZnVsIG5hbWluZyBvZiBhIHBhdGNoIHNlcmllcywgYW5kIGNhbiBiZQorCWNvbWJpbmVkIHdpdGggdGhlIGAtLW51bWJlcmVkYCBvcHRpb24uCisKKy0tcmZjOjoKKwlBbGlhcyBmb3IgYC0tc3ViamVjdC1wcmVmaXg9IlJGQyBQQVRDSCJgLiBSRkMgbWVhbnMgIlJlcXVlc3QgRm9yCisJQ29tbWVudHMiOyB1c2UgdGhpcyB3aGVuIHNlbmRpbmcgYW4gZXhwZXJpbWVudGFsIHBhdGNoIGZvcgorCWRpc2N1c3Npb24gcmF0aGVyIHRoYW4gYXBwbGljYXRpb24uCisKKy12IDxuPjo6CistLXJlcm9sbC1jb3VudD08bj46OgorCU1hcmsgdGhlIHNlcmllcyBhcyB0aGUgPG4+LXRoIGl0ZXJhdGlvbiBvZiB0aGUgdG9waWMuIFRoZQorCW91dHB1dCBmaWxlbmFtZXMgaGF2ZSBgdjxuPmAgcHJlcGVuZGVkIHRvIHRoZW0sIGFuZCB0aGUKKwlzdWJqZWN0IHByZWZpeCAoIlBBVENIIiBieSBkZWZhdWx0LCBidXQgY29uZmlndXJhYmxlIHZpYSB0aGUKKwlgLS1zdWJqZWN0LXByZWZpeGAgb3B0aW9uKSBoYXMgYCB2PG4+YCBhcHBlbmRlZCB0byBpdC4gIEUuZy4KKwlgLS1yZXJvbGwtY291bnQ9NGAgbWF5IHByb2R1Y2UgYHY0LTAwMDEtYWRkLW1ha2VmaWxlLnBhdGNoYAorCWZpbGUgdGhhdCBoYXMgIlN1YmplY3Q6IFtQQVRDSCB2NCAxLzIwXSBBZGQgbWFrZWZpbGUiIGluIGl0LgorCistLXRvPTxlbWFpbD46OgorCUFkZCBhIGBUbzpgIGhlYWRlciB0byB0aGUgZW1haWwgaGVhZGVycy4gVGhpcyBpcyBpbiBhZGRpdGlvbgorCXRvIGFueSBjb25maWd1cmVkIGhlYWRlcnMsIGFuZCBtYXkgYmUgdXNlZCBtdWx0aXBsZSB0aW1lcy4KKwlUaGUgbmVnYXRlZCBmb3JtIGAtLW5vLXRvYCBkaXNjYXJkcyBhbGwgYFRvOmAgaGVhZGVycyBhZGRlZCBzbworCWZhciAoZnJvbSBjb25maWcgb3IgY29tbWFuZCBsaW5lKS4KKworLS1jYz08ZW1haWw+OjoKKwlBZGQgYSBgQ2M6YCBoZWFkZXIgdG8gdGhlIGVtYWlsIGhlYWRlcnMuIFRoaXMgaXMgaW4gYWRkaXRpb24KKwl0byBhbnkgY29uZmlndXJlZCBoZWFkZXJzLCBhbmQgbWF5IGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuCisJVGhlIG5lZ2F0ZWQgZm9ybSBgLS1uby1jY2AgZGlzY2FyZHMgYWxsIGBDYzpgIGhlYWRlcnMgYWRkZWQgc28KKwlmYXIgKGZyb20gY29uZmlnIG9yIGNvbW1hbmQgbGluZSkuCisKKy0tZnJvbTo6CistLWZyb209PGlkZW50Pjo6CisJVXNlIGBpZGVudGAgaW4gdGhlIGBGcm9tOmAgaGVhZGVyIG9mIGVhY2ggY29tbWl0IGVtYWlsLiBJZiB0aGUKKwlhdXRob3IgaWRlbnQgb2YgdGhlIGNvbW1pdCBpcyBub3QgdGV4dHVhbGx5IGlkZW50aWNhbCB0byB0aGUKKwlwcm92aWRlZCBgaWRlbnRgLCBwbGFjZSBhIGBGcm9tOmAgaGVhZGVyIGluIHRoZSBib2R5IG9mIHRoZQorCW1lc3NhZ2Ugd2l0aCB0aGUgb3JpZ2luYWwgYXV0aG9yLiBJZiBubyBgaWRlbnRgIGlzIGdpdmVuLCB1c2UKKwl0aGUgY29tbWl0dGVyIGlkZW50LgorKworTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIGlmIHlvdSBhcmUgYWN0dWFsbHkgc2VuZGluZyB0aGUKK2VtYWlscyBhbmQgd2FudCB0byBpZGVudGlmeSB5b3Vyc2VsZiBhcyB0aGUgc2VuZGVyLCBidXQgcmV0YWluIHRoZQorb3JpZ2luYWwgYXV0aG9yIChhbmQgYGdpdCBhbWAgd2lsbCBjb3JyZWN0bHkgcGljayB1cCB0aGUgaW4tYm9keQoraGVhZGVyKS4gTm90ZSBhbHNvIHRoYXQgYGdpdCBzZW5kLWVtYWlsYCBhbHJlYWR5IGhhbmRsZXMgdGhpcwordHJhbnNmb3JtYXRpb24gZm9yIHlvdSwgYW5kIHRoaXMgb3B0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBpZiB5b3UgYXJlCitmZWVkaW5nIHRoZSByZXN1bHQgdG8gYGdpdCBzZW5kLWVtYWlsYC4KKworLS1hZGQtaGVhZGVyPTxoZWFkZXI+OjoKKwlBZGQgYW4gYXJiaXRyYXJ5IGhlYWRlciB0byB0aGUgZW1haWwgaGVhZGVycy4gIFRoaXMgaXMgaW4gYWRkaXRpb24KKwl0byBhbnkgY29uZmlndXJlZCBoZWFkZXJzLCBhbmQgbWF5IGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuCisJRm9yIGV4YW1wbGUsIGAtLWFkZC1oZWFkZXI9Ik9yZ2FuaXphdGlvbjogZ2l0LWZvbyJgLgorCVRoZSBuZWdhdGVkIGZvcm0gYC0tbm8tYWRkLWhlYWRlcmAgZGlzY2FyZHMgKmFsbCogKGBUbzpgLAorCWBDYzpgLCBhbmQgY3VzdG9tKSBoZWFkZXJzIGFkZGVkIHNvIGZhciBmcm9tIGNvbmZpZyBvciBjb21tYW5kCisJbGluZS4KKworLS1bbm8tXWNvdmVyLWxldHRlcjo6CisJSW4gYWRkaXRpb24gdG8gdGhlIHBhdGNoZXMsIGdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIGZpbGUKKwljb250YWluaW5nIHRoZSBicmFuY2ggZGVzY3JpcHRpb24sIHNob3J0bG9nIGFuZCB0aGUgb3ZlcmFsbCBkaWZmc3RhdC4gIFlvdSBjYW4KKwlmaWxsIGluIGEgZGVzY3JpcHRpb24gaW4gdGhlIGZpbGUgYmVmb3JlIHNlbmRpbmcgaXQgb3V0LgorCistLWVuY29kZS1lbWFpbC1oZWFkZXJzOjoKKy0tbm8tZW5jb2RlLWVtYWlsLWhlYWRlcnM6OgorCUVuY29kZSBlbWFpbCBoZWFkZXJzIHRoYXQgaGF2ZSBub24tQVNDSUkgY2hhcmFjdGVycyB3aXRoCisJIlEtZW5jb2RpbmciIChkZXNjcmliZWQgaW4gUkZDIDIwNDcpLCBpbnN0ZWFkIG9mIG91dHB1dHRpbmcgdGhlCisJaGVhZGVycyB2ZXJiYXRpbS4gRGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIHRoZQorCWBmb3JtYXQuZW5jb2RlRW1haWxIZWFkZXJzYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCistLWludGVyZGlmZj08cHJldmlvdXM+OjoKKwlBcyBhIHJldmlld2VyIGFpZCwgaW5zZXJ0IGFuIGludGVyZGlmZiBpbnRvIHRoZSBjb3ZlciBsZXR0ZXIsCisJb3IgYXMgY29tbWVudGFyeSBvZiB0aGUgbG9uZSBwYXRjaCBvZiBhIDEtcGF0Y2ggc2VyaWVzLCBzaG93aW5nCisJdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIHBhdGNoIHNlcmllcyBhbmQKKwl0aGUgc2VyaWVzIGN1cnJlbnRseSBiZWluZyBmb3JtYXR0ZWQuIGBwcmV2aW91c2AgaXMgYSBzaW5nbGUgcmV2aXNpb24KKwluYW1pbmcgdGhlIHRpcCBvZiB0aGUgcHJldmlvdXMgc2VyaWVzIHdoaWNoIHNoYXJlcyBhIGNvbW1vbiBiYXNlIHdpdGgKKwl0aGUgc2VyaWVzIGJlaW5nIGZvcm1hdHRlZCAoZm9yIGV4YW1wbGUgYGdpdCBmb3JtYXQtcGF0Y2gKKwktLWNvdmVyLWxldHRlciAtLWludGVyZGlmZj1mZWF0dXJlL3YxIC0zIGZlYXR1cmUvdjJgKS4KKworLS1yYW5nZS1kaWZmPTxwcmV2aW91cz46OgorCUFzIGEgcmV2aWV3ZXIgYWlkLCBpbnNlcnQgYSByYW5nZS1kaWZmIChzZWUgbGlua2dpdDpnaXQtcmFuZ2UtZGlmZlsxXSkKKwlpbnRvIHRoZSBjb3ZlciBsZXR0ZXIsIG9yIGFzIGNvbW1lbnRhcnkgb2YgdGhlIGxvbmUgcGF0Y2ggb2YgYQorCTEtcGF0Y2ggc2VyaWVzLCBzaG93aW5nIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBwcmV2aW91cworCXZlcnNpb24gb2YgdGhlIHBhdGNoIHNlcmllcyBhbmQgdGhlIHNlcmllcyBjdXJyZW50bHkgYmVpbmcgZm9ybWF0dGVkLgorCWBwcmV2aW91c2AgY2FuIGJlIGEgc2luZ2xlIHJldmlzaW9uIG5hbWluZyB0aGUgdGlwIG9mIHRoZSBwcmV2aW91cworCXNlcmllcyBpZiBpdCBzaGFyZXMgYSBjb21tb24gYmFzZSB3aXRoIHRoZSBzZXJpZXMgYmVpbmcgZm9ybWF0dGVkIChmb3IKKwlleGFtcGxlIGBnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0tcmFuZ2UtZGlmZj1mZWF0dXJlL3YxIC0zCisJZmVhdHVyZS92MmApLCBvciBhIHJldmlzaW9uIHJhbmdlIGlmIHRoZSB0d28gdmVyc2lvbnMgb2YgdGhlIHNlcmllcyBhcmUKKwlkaXNqb2ludCAoZm9yIGV4YW1wbGUgYGdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIKKwktLXJhbmdlLWRpZmY9ZmVhdHVyZS92MX4zLi5mZWF0dXJlL3YxIC0zIGZlYXR1cmUvdjJgKS4KKysKK05vdGUgdGhhdCBkaWZmIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBjb21tYW5kIGFmZmVjdCBob3cgdGhlIHByaW1hcnkKK3Byb2R1Y3Qgb2YgYGZvcm1hdC1wYXRjaGAgaXMgZ2VuZXJhdGVkLCBhbmQgdGhleSBhcmUgbm90IHBhc3NlZCB0bwordGhlIHVuZGVybHlpbmcgYHJhbmdlLWRpZmZgIG1hY2hpbmVyeSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjb3Zlci1sZXR0ZXIKK21hdGVyaWFsICh0aGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSkuCisKKy0tY3JlYXRpb24tZmFjdG9yPTxwZXJjZW50Pjo6CisJVXNlZCB3aXRoIGAtLXJhbmdlLWRpZmZgLCB0d2VhayB0aGUgaGV1cmlzdGljIHdoaWNoIG1hdGNoZXMgdXAgY29tbWl0cworCWJldHdlZW4gdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IHNlcmllcyBvZiBwYXRjaGVzIGJ5IGFkanVzdGluZyB0aGUKKwljcmVhdGlvbi9kZWxldGlvbiBjb3N0IGZ1ZGdlIGZhY3Rvci4gU2VlIGxpbmtnaXQ6Z2l0LXJhbmdlLWRpZmZbMV0pCisJZm9yIGRldGFpbHMuCisKKy0tbm90ZXNbPTxyZWY+XTo6CistLW5vLW5vdGVzOjoKKwlBcHBlbmQgdGhlIG5vdGVzIChzZWUgbGlua2dpdDpnaXQtbm90ZXNbMV0pIGZvciB0aGUgY29tbWl0CisJYWZ0ZXIgdGhlIHRocmVlLWRhc2ggbGluZS4KKysKK1RoZSBleHBlY3RlZCB1c2UgY2FzZSBvZiB0aGlzIGlzIHRvIHdyaXRlIHN1cHBvcnRpbmcgZXhwbGFuYXRpb24gZm9yCit0aGUgY29tbWl0IHRoYXQgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgcHJvcGVyLAorYW5kIGluY2x1ZGUgaXQgd2l0aCB0aGUgcGF0Y2ggc3VibWlzc2lvbi4gV2hpbGUgb25lIGNhbiBzaW1wbHkgd3JpdGUKK3RoZXNlIGV4cGxhbmF0aW9ucyBhZnRlciBgZm9ybWF0LXBhdGNoYCBoYXMgcnVuIGJ1dCBiZWZvcmUgc2VuZGluZywKK2tlZXBpbmcgdGhlbSBhcyBHaXQgbm90ZXMgYWxsb3dzIHRoZW0gdG8gYmUgbWFpbnRhaW5lZCBiZXR3ZWVuIHZlcnNpb25zCitvZiB0aGUgcGF0Y2ggc2VyaWVzIChidXQgc2VlIHRoZSBkaXNjdXNzaW9uIG9mIHRoZSBgbm90ZXMucmV3cml0ZWAKK2NvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBsaW5rZ2l0OmdpdC1ub3Rlc1sxXSB0byB1c2UgdGhpcyB3b3JrZmxvdykuCisrCitUaGUgZGVmYXVsdCBpcyBgLS1uby1ub3Rlc2AsIHVubGVzcyB0aGUgYGZvcm1hdC5ub3Rlc2AgY29uZmlndXJhdGlvbiBpcworc2V0LgorCistLVtuby1dc2lnbmF0dXJlPTxzaWduYXR1cmU+OjoKKwlBZGQgYSBzaWduYXR1cmUgdG8gZWFjaCBtZXNzYWdlIHByb2R1Y2VkLiBQZXIgUkZDIDM2NzYgdGhlIHNpZ25hdHVyZQorCWlzIHNlcGFyYXRlZCBmcm9tIHRoZSBib2R5IGJ5IGEgbGluZSB3aXRoICctLSAnIG9uIGl0LiBJZiB0aGUKKwlzaWduYXR1cmUgb3B0aW9uIGlzIG9taXR0ZWQgdGhlIHNpZ25hdHVyZSBkZWZhdWx0cyB0byB0aGUgR2l0IHZlcnNpb24KKwludW1iZXIuCisKKy0tc2lnbmF0dXJlLWZpbGU9PGZpbGU+OjoKKwlXb3JrcyBqdXN0IGxpa2UgLS1zaWduYXR1cmUgZXhjZXB0IHRoZSBzaWduYXR1cmUgaXMgcmVhZCBmcm9tIGEgZmlsZS4KKworLS1zdWZmaXg9LjxzZng+OjoKKwlJbnN0ZWFkIG9mIHVzaW5nIGAucGF0Y2hgIGFzIHRoZSBzdWZmaXggZm9yIGdlbmVyYXRlZAorCWZpbGVuYW1lcywgdXNlIHNwZWNpZmllZCBzdWZmaXguICBBIGNvbW1vbiBhbHRlcm5hdGl2ZSBpcworCWAtLXN1ZmZpeD0udHh0YC4gIExlYXZpbmcgdGhpcyBlbXB0eSB3aWxsIHJlbW92ZSB0aGUgYC5wYXRjaGAKKwlzdWZmaXguCisrCitOb3RlIHRoYXQgdGhlIGxlYWRpbmcgY2hhcmFjdGVyIGRvZXMgbm90IGhhdmUgdG8gYmUgYSBkb3Q7IGZvciBleGFtcGxlLAoreW91IGNhbiB1c2UgYC0tc3VmZml4PS1wYXRjaGAgdG8gZ2V0IGAwMDAxLWRlc2NyaXB0aW9uLW9mLW15LWNoYW5nZS1wYXRjaGAuCisKKy1xOjoKKy0tcXVpZXQ6OgorCURvIG5vdCBwcmludCB0aGUgbmFtZXMgb2YgdGhlIGdlbmVyYXRlZCBmaWxlcyB0byBzdGFuZGFyZCBvdXRwdXQuCisKKy0tbm8tYmluYXJ5OjoKKwlEbyBub3Qgb3V0cHV0IGNvbnRlbnRzIG9mIGNoYW5nZXMgaW4gYmluYXJ5IGZpbGVzLCBpbnN0ZWFkCisJZGlzcGxheSBhIG5vdGljZSB0aGF0IHRob3NlIGZpbGVzIGNoYW5nZWQuICBQYXRjaGVzIGdlbmVyYXRlZAorCXVzaW5nIHRoaXMgb3B0aW9uIGNhbm5vdCBiZSBhcHBsaWVkIHByb3Blcmx5LCBidXQgdGhleSBhcmUKKwlzdGlsbCB1c2VmdWwgZm9yIGNvZGUgcmV2aWV3LgorCistLXplcm8tY29tbWl0OjoKKyAgT3V0cHV0IGFuIGFsbC16ZXJvIGhhc2ggaW4gZWFjaCBwYXRjaCdzIEZyb20gaGVhZGVyIGluc3RlYWQKKyAgb2YgdGhlIGhhc2ggb2YgdGhlIGNvbW1pdC4KKworLS1bbm8tXWJhc2VbPTxjb21taXQ+XTo6CisJUmVjb3JkIHRoZSBiYXNlIHRyZWUgaW5mb3JtYXRpb24gdG8gaWRlbnRpZnkgdGhlIHN0YXRlIHRoZQorCXBhdGNoIHNlcmllcyBhcHBsaWVzIHRvLiAgU2VlIHRoZSBCQVNFIFRSRUUgSU5GT1JNQVRJT04gc2VjdGlvbgorCWJlbG93IGZvciBkZXRhaWxzLiBJZiA8Y29tbWl0PiBpcyAiYXV0byIsIGEgYmFzZSBjb21taXQgaXMKKwlhdXRvbWF0aWNhbGx5IGNob3Nlbi4gVGhlIGAtLW5vLWJhc2VgIG9wdGlvbiBvdmVycmlkZXMgYQorCWBmb3JtYXQudXNlQXV0b0Jhc2VgIGNvbmZpZ3VyYXRpb24uCisKKy0tcm9vdDo6CisJVHJlYXQgdGhlIHJldmlzaW9uIGFyZ3VtZW50IGFzIGEgPHJldmlzaW9uIHJhbmdlPiwgZXZlbiBpZiBpdAorCWlzIGp1c3QgYSBzaW5nbGUgY29tbWl0ICh0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIHRyZWF0ZWQgYXMgYQorCTxzaW5jZT4pLiAgTm90ZSB0aGF0IHJvb3QgY29tbWl0cyBpbmNsdWRlZCBpbiB0aGUgc3BlY2lmaWVkCisJcmFuZ2UgYXJlIGFsd2F5cyBmb3JtYXR0ZWQgYXMgY3JlYXRpb24gcGF0Y2hlcywgaW5kZXBlbmRlbnRseQorCW9mIHRoaXMgZmxhZy4KKworLS1wcm9ncmVzczo6CisJU2hvdyBwcm9ncmVzcyByZXBvcnRzIG9uIHN0ZGVyciBhcyBwYXRjaGVzIGFyZSBnZW5lcmF0ZWQuCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KK1lvdSBjYW4gc3BlY2lmeSBleHRyYSBtYWlsIGhlYWRlciBsaW5lcyB0byBiZSBhZGRlZCB0byBlYWNoIG1lc3NhZ2UsCitkZWZhdWx0cyBmb3IgdGhlIHN1YmplY3QgcHJlZml4IGFuZCBmaWxlIHN1ZmZpeCwgbnVtYmVyIHBhdGNoZXMgd2hlbgorb3V0cHV0dGluZyBtb3JlIHRoYW4gb25lIHBhdGNoLCBhZGQgIlRvOiIgb3IgIkNjOiIgaGVhZGVycywgY29uZmlndXJlCithdHRhY2htZW50cywgY2hhbmdlIHRoZSBwYXRjaCBvdXRwdXQgZGlyZWN0b3J5LCBhbmQgc2lnbiBvZmYgcGF0Y2hlcword2l0aCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKworLS0tLS0tLS0tLS0tCitbZm9ybWF0XQorCWhlYWRlcnMgPSAiT3JnYW5pemF0aW9uOiBnaXQtZm9vXG4iCisJc3ViamVjdFByZWZpeCA9IENIQU5HRQorCXN1ZmZpeCA9IC50eHQKKwludW1iZXJlZCA9IGF1dG8KKwl0byA9IDxlbWFpbD4KKwljYyA9IDxlbWFpbD4KKwlhdHRhY2ggWyA9IG1pbWUtYm91bmRhcnktc3RyaW5nIF0KKwlzaWduT2ZmID0gdHJ1ZQorCW91dHB1dERpcmVjdG9yeSA9IDxkaXJlY3Rvcnk+CisJY292ZXJMZXR0ZXIgPSBhdXRvCisJY292ZXJGcm9tRGVzY3JpcHRpb24gPSBhdXRvCistLS0tLS0tLS0tLS0KKworCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK1RoZSBwYXRjaCBwcm9kdWNlZCBieSAnZ2l0IGZvcm1hdC1wYXRjaCcgaXMgaW4gVU5JWCBtYWlsYm94IGZvcm1hdCwKK3dpdGggYSBmaXhlZCAibWFnaWMiIHRpbWUgc3RhbXAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZmlsZSBpcyBvdXRwdXQKK2Zyb20gZm9ybWF0LXBhdGNoIHJhdGhlciB0aGFuIGEgcmVhbCBtYWlsYm94LCBsaWtlIHNvOgorCistLS0tLS0tLS0tLS0KK0Zyb20gOGY3MmJhZDFiYWYxOWE1MzQ1OTY2MTM0M2UyMWQ2NDkxYzM5MDhkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRvbnkgTHVjayA8dG9ueS5sdWNrQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTMgSnVsIDIwMTAgMTE6NDI6NTQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gPT9VVEYtOD9xP1tJQTY0XT0yMFB1dD0yMGlhNjQ9MjBjb25maWc9MjBmaWxlcz0yMG9uPTIwdGhlPTIwPz0KKyA9P1VURi04P3E/VXdlPTIwS2xlaW5lLUs9QzM9QjZuaWc9MjBkaWV0Pz0KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworYXJjaC9hcm0gY29uZmlnIGZpbGVzIHdlcmUgc2xpbW1lZCBkb3duIHVzaW5nIGEgcHl0aG9uIHNjcmlwdAorKFNlZSBjb21taXQgYzIzMzBlMjg2ZjY4ZjFjNDA4YjRhYTY1MTViYTQ5ZDU3ZjA1YmVhZSBjb21tZW50KQorCitEbyB0aGUgc2FtZSBmb3IgaWE2NCBzbyB3ZSBjYW4gaGF2ZSBzbGVlayAmIHRyaW0gbG9va2luZworLi4uCistLS0tLS0tLS0tLS0KKworVHlwaWNhbGx5IGl0IHdpbGwgYmUgcGxhY2VkIGluIGEgTVVBJ3MgZHJhZnRzIGZvbGRlciwgZWRpdGVkIHRvIGFkZAordGltZWx5IGNvbW1lbnRhcnkgdGhhdCBzaG91bGQgbm90IGdvIGluIHRoZSBjaGFuZ2Vsb2cgYWZ0ZXIgdGhlIHRocmVlCitkYXNoZXMsIGFuZCB0aGVuIHNlbnQgYXMgYSBtZXNzYWdlIHdob3NlIGJvZHksIGluIG91ciBleGFtcGxlLCBzdGFydHMKK3dpdGggImFyY2gvYXJtIGNvbmZpZyBmaWxlcyB3ZXJlLi4uIi4gIE9uIHRoZSByZWNlaXZpbmcgZW5kLCByZWFkZXJzCitjYW4gc2F2ZSBpbnRlcmVzdGluZyBwYXRjaGVzIGluIGEgVU5JWCBtYWlsYm94IGFuZCBhcHBseSB0aGVtIHdpdGgKK2xpbmtnaXQ6Z2l0LWFtWzFdLgorCitXaGVuIGEgcGF0Y2ggaXMgcGFydCBvZiBhbiBvbmdvaW5nIGRpc2N1c3Npb24sIHRoZSBwYXRjaCBnZW5lcmF0ZWQgYnkKKydnaXQgZm9ybWF0LXBhdGNoJyBjYW4gYmUgdHdlYWtlZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgJ2dpdCBhbQorLS1zY2lzc29ycycgZmVhdHVyZS4gIEFmdGVyIHlvdXIgcmVzcG9uc2UgdG8gdGhlIGRpc2N1c3Npb24gY29tZXMgYQorbGluZSB0aGF0IGNvbnNpc3RzIHNvbGVseSBvZiAiYC0tID44IC0tYCIgKHNjaXNzb3JzIGFuZCBwZXJmb3JhdGlvbiksCitmb2xsb3dlZCBieSB0aGUgcGF0Y2ggd2l0aCB1bm5lY2Vzc2FyeSBoZWFkZXIgZmllbGRzIHJlbW92ZWQ6CisKKy0tLS0tLS0tLS0tLQorLi4uCis+IFNvIHdlIHNob3VsZCBkbyBzdWNoLWFuZC1zdWNoLgorCitNYWtlcyBzZW5zZSB0byBtZS4gIEhvdyBhYm91dCB0aGlzIHBhdGNoPworCistLSA+OCAtLQorU3ViamVjdDogW0lBNjRdIFB1dCBpYTY0IGNvbmZpZyBmaWxlcyBvbiB0aGUgVXdlIEtsZWluZS1Lw7ZuaWcgZGlldAorCithcmNoL2FybSBjb25maWcgZmlsZXMgd2VyZSBzbGltbWVkIGRvd24gdXNpbmcgYSBweXRob24gc2NyaXB0CisuLi4KKy0tLS0tLS0tLS0tLQorCitXaGVuIHNlbmRpbmcgYSBwYXRjaCB0aGlzIHdheSwgbW9zdCBvZnRlbiB5b3UgYXJlIHNlbmRpbmcgeW91ciBvd24KK3BhdGNoLCBzbyBpbiBhZGRpdGlvbiB0byB0aGUgImBGcm9tICRTSEExICRtYWdpY190aW1lc3RhbXBgIiBtYXJrZXIgeW91CitzaG91bGQgb21pdCBgRnJvbTpgIGFuZCBgRGF0ZTpgIGxpbmVzIGZyb20gdGhlIHBhdGNoIGZpbGUuICBUaGUgcGF0Y2gKK3RpdGxlIGlzIGxpa2VseSB0byBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgc3ViamVjdCBvZiB0aGUgZGlzY3Vzc2lvbiB0aGUKK3BhdGNoIGlzIGluIHJlc3BvbnNlIHRvLCBzbyBpdCBpcyBsaWtlbHkgdGhhdCB5b3Ugd291bGQgd2FudCB0byBrZWVwCit0aGUgU3ViamVjdDogbGluZSwgbGlrZSB0aGUgZXhhbXBsZSBhYm92ZS4KKworQ2hlY2tpbmcgZm9yIHBhdGNoIGNvcnJ1cHRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNYW55IG1haWxlcnMgaWYgbm90IHNldCB1cCBwcm9wZXJseSB3aWxsIGNvcnJ1cHQgd2hpdGVzcGFjZS4gIEhlcmUgYXJlCit0d28gY29tbW9uIHR5cGVzIG9mIGNvcnJ1cHRpb246CisKKyogRW1wdHkgY29udGV4dCBsaW5lcyB0aGF0IGRvIG5vdCBoYXZlIF9hbnlfIHdoaXRlc3BhY2UuCisKKyogTm9uLWVtcHR5IGNvbnRleHQgbGluZXMgdGhhdCBoYXZlIG9uZSBleHRyYSB3aGl0ZXNwYWNlIGF0IHRoZQorICBiZWdpbm5pbmcuCisKK09uZSB3YXkgdG8gdGVzdCBpZiB5b3VyIE1VQSBpcyBzZXQgdXAgY29ycmVjdGx5IGlzOgorCisqIFNlbmQgdGhlIHBhdGNoIHRvIHlvdXJzZWxmLCBleGFjdGx5IHRoZSB3YXkgeW91IHdvdWxkLCBleGNlcHQKKyAgd2l0aCBUbzogYW5kIENjOiBsaW5lcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBsaXN0IGFuZAorICBtYWludGFpbmVyIGFkZHJlc3MuCisKKyogU2F2ZSB0aGF0IHBhdGNoIHRvIGEgZmlsZSBpbiBVTklYIG1haWxib3ggZm9ybWF0LiAgQ2FsbCBpdCBhLnBhdGNoLAorICBzYXkuCisKKyogQXBwbHkgaXQ6CisKKyAgICAkIGdpdCBmZXRjaCA8cHJvamVjdD4gbWFzdGVyOnRlc3QtYXBwbHkKKyAgICAkIGdpdCBzd2l0Y2ggdGVzdC1hcHBseQorICAgICQgZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCAtLXN0YWdlZCAtLXdvcmt0cmVlIDovCisgICAgJCBnaXQgYW0gYS5wYXRjaAorCitJZiBpdCBkb2VzIG5vdCBhcHBseSBjb3JyZWN0bHksIHRoZXJlIGNhbiBiZSB2YXJpb3VzIHJlYXNvbnMuCisKKyogVGhlIHBhdGNoIGl0c2VsZiBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LiAgVGhhdCBpcyBfYmFkXyBidXQKKyAgZG9lcyBub3QgaGF2ZSBtdWNoIHRvIGRvIHdpdGggeW91ciBNVUEuICBZb3UgbWlnaHQgd2FudCB0byByZWJhc2UKKyAgdGhlIHBhdGNoIHdpdGggbGlua2dpdDpnaXQtcmViYXNlWzFdIGJlZm9yZSByZWdlbmVyYXRpbmcgaXQgaW4KKyAgdGhpcyBjYXNlLgorCisqIFRoZSBNVUEgY29ycnVwdGVkIHlvdXIgcGF0Y2g7ICJhbSIgd291bGQgY29tcGxhaW4gdGhhdAorICB0aGUgcGF0Y2ggZG9lcyBub3QgYXBwbHkuICBMb29rIGluIHRoZSAuZ2l0L3JlYmFzZS1hcHBseS8gc3ViZGlyZWN0b3J5IGFuZAorICBzZWUgd2hhdCAncGF0Y2gnIGZpbGUgY29udGFpbnMgYW5kIGNoZWNrIGZvciB0aGUgY29tbW9uCisgIGNvcnJ1cHRpb24gcGF0dGVybnMgbWVudGlvbmVkIGFib3ZlLgorCisqIFdoaWxlIGF0IGl0LCBjaGVjayB0aGUgJ2luZm8nIGFuZCAnZmluYWwtY29tbWl0JyBmaWxlcyBhcyB3ZWxsLgorICBJZiB3aGF0IGlzIGluICdmaW5hbC1jb21taXQnIGlzIG5vdCBleGFjdGx5IHdoYXQgeW91IHdvdWxkIHdhbnQgdG8KKyAgc2VlIGluIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UsIGl0IGlzIHZlcnkgbGlrZWx5IHRoYXQgdGhlCisgIHJlY2VpdmVyIHdvdWxkIGVuZCB1cCBoYW5kIGVkaXRpbmcgdGhlIGxvZyBtZXNzYWdlIHdoZW4gYXBwbHlpbmcKKyAgeW91ciBwYXRjaC4gIFRoaW5ncyBsaWtlICJIaSwgdGhpcyBpcyBteSBmaXJzdCBwYXRjaC5cbiIgaW4gdGhlCisgIHBhdGNoIGUtbWFpbCBzaG91bGQgY29tZSBhZnRlciB0aGUgdGhyZWUtZGFzaCBsaW5lIHRoYXQgc2lnbmFscworICB0aGUgZW5kIG9mIHRoZSBjb21taXQgbWVzc2FnZS4KKworTVVBLVNQRUNJRklDIEhJTlRTCistLS0tLS0tLS0tLS0tLS0tLS0KK0hlcmUgYXJlIHNvbWUgaGludHMgb24gaG93IHRvIHN1Y2Nlc3NmdWxseSBzdWJtaXQgcGF0Y2hlcyBpbmxpbmUgdXNpbmcKK3ZhcmlvdXMgbWFpbGVycy4KKworR01haWwKK35+fn5+CitHTWFpbCBkb2VzIG5vdCBoYXZlIGFueSB3YXkgdG8gdHVybiBvZmYgbGluZSB3cmFwcGluZyBpbiB0aGUgd2ViCitpbnRlcmZhY2UsIHNvIGl0IHdpbGwgbWFuZ2xlIGFueSBlbWFpbHMgdGhhdCB5b3Ugc2VuZC4gIFlvdSBjYW4gaG93ZXZlcgordXNlICJnaXQgc2VuZC1lbWFpbCIgYW5kIHNlbmQgeW91ciBwYXRjaGVzIHRocm91Z2ggdGhlIEdNYWlsIFNNVFAgc2VydmVyLCBvcgordXNlIGFueSBJTUFQIGVtYWlsIGNsaWVudCB0byBjb25uZWN0IHRvIHRoZSBnb29nbGUgSU1BUCBzZXJ2ZXIgYW5kIGZvcndhcmQKK3RoZSBlbWFpbHMgdGhyb3VnaCB0aGF0LgorCitGb3IgaGludHMgb24gdXNpbmcgJ2dpdCBzZW5kLWVtYWlsJyB0byBzZW5kIHlvdXIgcGF0Y2hlcyB0aHJvdWdoIHRoZQorR01haWwgU01UUCBzZXJ2ZXIsIHNlZSB0aGUgRVhBTVBMRSBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0uCisKK0ZvciBoaW50cyBvbiBzdWJtaXNzaW9uIHVzaW5nIHRoZSBJTUFQIGludGVyZmFjZSwgc2VlIHRoZSBFWEFNUExFCitzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWltYXAtc2VuZFsxXS4KKworVGh1bmRlcmJpcmQKK35+fn5+fn5+fn5+CitCeSBkZWZhdWx0LCBUaHVuZGVyYmlyZCB3aWxsIGJvdGggd3JhcCBlbWFpbHMgYXMgd2VsbCBhcyBmbGFnCit0aGVtIGFzIGJlaW5nICdmb3JtYXQ9Zmxvd2VkJywgYm90aCBvZiB3aGljaCB3aWxsIG1ha2UgdGhlCityZXN1bHRpbmcgZW1haWwgdW51c2FibGUgYnkgR2l0LgorCitUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IGFwcHJvYWNoZXM6IHVzZSBhbiBhZGQtb24gdG8gdHVybiBvZmYgbGluZSB3cmFwcywKK2NvbmZpZ3VyZSBUaHVuZGVyYmlyZCB0byBub3QgbWFuZ2xlIHBhdGNoZXMsIG9yIHVzZQorYW4gZXh0ZXJuYWwgZWRpdG9yIHRvIGtlZXAgVGh1bmRlcmJpcmQgZnJvbSBtYW5nbGluZyB0aGUgcGF0Y2hlcy4KKworQXBwcm9hY2ggIzEgKGFkZC1vbikKK15eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0luc3RhbGwgdGhlIFRvZ2dsZSBXb3JkIFdyYXAgYWRkLW9uIHRoYXQgaXMgYXZhaWxhYmxlIGZyb20KK2h0dHBzOi8vYWRkb25zLm1vemlsbGEub3JnL3RodW5kZXJiaXJkL2FkZG9uL3RvZ2dsZS13b3JkLXdyYXAvCitJdCBhZGRzIGEgbWVudSBlbnRyeSAiRW5hYmxlIFdvcmQgV3JhcCIgaW4gdGhlIGNvbXBvc2VyJ3MgIk9wdGlvbnMiIG1lbnUKK3RoYXQgeW91IGNhbiB0aWNrIG9mZi4gTm93IHlvdSBjYW4gY29tcG9zZSB0aGUgbWVzc2FnZSBhcyB5b3Ugb3RoZXJ3aXNlIGRvCisoY3V0ICsgcGFzdGUsICdnaXQgZm9ybWF0LXBhdGNoJyB8ICdnaXQgaW1hcC1zZW5kJywgZXRjKSwgYnV0IHlvdSBoYXZlIHRvCitpbnNlcnQgbGluZSBicmVha3MgbWFudWFsbHkgaW4gYW55IHRleHQgdGhhdCB5b3UgdHlwZS4KKworQXBwcm9hY2ggIzIgKGNvbmZpZ3VyYXRpb24pCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK1RocmVlIHN0ZXBzOgorCisxLiBDb25maWd1cmUgeW91ciBtYWlsIHNlcnZlciBjb21wb3NpdGlvbiBhcyBwbGFpbiB0ZXh0OgorICAgRWRpdC4uLkFjY291bnQgU2V0dGluZ3MuLi5Db21wb3NpdGlvbiAmIEFkZHJlc3NpbmcsCisgICB1bmNoZWNrICJDb21wb3NlIE1lc3NhZ2VzIGluIEhUTUwiLgorCisyLiBDb25maWd1cmUgeW91ciBnZW5lcmFsIGNvbXBvc2l0aW9uIHdpbmRvdyB0byBub3Qgd3JhcC4KKysKK0luIFRodW5kZXJiaXJkIDI6CitFZGl0Li5QcmVmZXJlbmNlcy4uQ29tcG9zaXRpb24sIHdyYXAgcGxhaW4gdGV4dCBtZXNzYWdlcyBhdCAwCisrCitJbiBUaHVuZGVyYmlyZCAzOgorRWRpdC4uUHJlZmVyZW5jZXMuLkFkdmFuY2VkLi5Db25maWcgRWRpdG9yLiAgU2VhcmNoIGZvcgorIm1haWwud3JhcF9sb25nX2xpbmVzIi4KK1RvZ2dsZSBpdCB0byBtYWtlIHN1cmUgaXQgaXMgc2V0IHRvIGBmYWxzZWAuIEFsc28sIHNlYXJjaCBmb3IKKyJtYWlsbmV3cy53cmFwbGVuZ3RoIiBhbmQgc2V0IHRoZSB2YWx1ZSB0byAwLgorCiszLiBEaXNhYmxlIHRoZSB1c2Ugb2YgZm9ybWF0PWZsb3dlZDoKKyAgIEVkaXQuLlByZWZlcmVuY2VzLi5BZHZhbmNlZC4uQ29uZmlnIEVkaXRvci4gIFNlYXJjaCBmb3IKKyAgICJtYWlsbmV3cy5zZW5kX3BsYWludGV4dF9mbG93ZWQiLgorICAgVG9nZ2xlIGl0IHRvIG1ha2Ugc3VyZSBpdCBpcyBzZXQgdG8gYGZhbHNlYC4KKworQWZ0ZXIgdGhhdCBpcyBkb25lLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29tcG9zZSBlbWFpbCBhcyB5b3UKK290aGVyd2lzZSB3b3VsZCAoY3V0ICsgcGFzdGUsICdnaXQgZm9ybWF0LXBhdGNoJyB8ICdnaXQgaW1hcC1zZW5kJywgZXRjKSwKK2FuZCB0aGUgcGF0Y2hlcyB3aWxsIG5vdCBiZSBtYW5nbGVkLgorCitBcHByb2FjaCAjMyAoZXh0ZXJuYWwgZWRpdG9yKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBUaHVuZGVyYmlyZCBleHRlbnNpb25zIGFyZSBuZWVkZWQ6CitBYm91dENvbmZpZyBmcm9tIGh0dHA6Ly9hYm91dGNvbmZpZy5tb3pkZXYub3JnLyBhbmQKK0V4dGVybmFsIEVkaXRvciBmcm9tIGh0dHA6Ly9nbG9icy5vcmcvYXJ0aWNsZXMucGhwP2xuZz1lbiZwZz04CisKKzEuIFByZXBhcmUgdGhlIHBhdGNoIGFzIGEgdGV4dCBmaWxlIHVzaW5nIHlvdXIgbWV0aG9kIG9mIGNob2ljZS4KKworMi4gQmVmb3JlIG9wZW5pbmcgYSBjb21wb3NlIHdpbmRvdywgdXNlIEVkaXQtPkFjY291bnQgU2V0dGluZ3MgdG8KKyAgIHVuY2hlY2sgdGhlICJDb21wb3NlIG1lc3NhZ2VzIGluIEhUTUwgZm9ybWF0IiBzZXR0aW5nIGluIHRoZQorICAgIkNvbXBvc2l0aW9uICYgQWRkcmVzc2luZyIgcGFuZWwgb2YgdGhlIGFjY291bnQgdG8gYmUgdXNlZCB0bworICAgc2VuZCB0aGUgcGF0Y2guCisKKzMuIEluIHRoZSBtYWluIFRodW5kZXJiaXJkIHdpbmRvdywgJ2JlZm9yZScgeW91IG9wZW4gdGhlIGNvbXBvc2UKKyAgIHdpbmRvdyBmb3IgdGhlIHBhdGNoLCB1c2UgVG9vbHMtPmFib3V0OmNvbmZpZyB0byBzZXQgdGhlCisgICBmb2xsb3dpbmcgdG8gdGhlIGluZGljYXRlZCB2YWx1ZXM6CisrCistLS0tLS0tLS0tCisJbWFpbG5ld3Muc2VuZF9wbGFpbnRleHRfZmxvd2VkICA9PiBmYWxzZQorCW1haWxuZXdzLndyYXBsZW5ndGggICAgICAgICAgICAgPT4gMAorLS0tLS0tLS0tLQorCis0LiBPcGVuIGEgY29tcG9zZSB3aW5kb3cgYW5kIGNsaWNrIHRoZSBleHRlcm5hbCBlZGl0b3IgaWNvbi4KKworNS4gSW4gdGhlIGV4dGVybmFsIGVkaXRvciB3aW5kb3csIHJlYWQgaW4gdGhlIHBhdGNoIGZpbGUgYW5kIGV4aXQKKyAgIHRoZSBlZGl0b3Igbm9ybWFsbHkuCisKK1NpZGUgbm90ZTogaXQgbWF5IGJlIHBvc3NpYmxlIHRvIGRvIHN0ZXAgMiB3aXRoCithYm91dDpjb25maWcgYW5kIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYnV0IG5vIG9uZSdzIHRyaWVkIHlldC4KKworLS0tLS0tLS0tLQorCW1haWwuaHRtbF9jb21wb3NlICAgICAgICAgICAgICAgICAgICAgICA9PiBmYWxzZQorCW1haWwuaWRlbnRpdHkuZGVmYXVsdC5jb21wb3NlX2h0bWwgICAgICA9PiBmYWxzZQorCW1haWwuaWRlbnRpdHkuaWQ/LmNvbXBvc2VfaHRtbCAgICAgICAgICA9PiBmYWxzZQorLS0tLS0tLS0tLQorCitUaGVyZSBpcyBhIHNjcmlwdCBpbiBjb250cmliL3RodW5kZXJiaXJkLXBhdGNoLWlubGluZSB3aGljaCBjYW4gaGVscAoreW91IGluY2x1ZGUgcGF0Y2hlcyB3aXRoIFRodW5kZXJiaXJkIGluIGFuIGVhc3kgd2F5LiBUbyB1c2UgaXQsIGRvIHRoZQorc3RlcHMgYWJvdmUgYW5kIHRoZW4gdXNlIHRoZSBzY3JpcHQgYXMgdGhlIGV4dGVybmFsIGVkaXRvci4KKworS01haWwKK35+fn5+CitUaGlzIHNob3VsZCBoZWxwIHlvdSB0byBzdWJtaXQgcGF0Y2hlcyBpbmxpbmUgdXNpbmcgS01haWwuCisKKzEuIFByZXBhcmUgdGhlIHBhdGNoIGFzIGEgdGV4dCBmaWxlLgorCisyLiBDbGljayBvbiBOZXcgTWFpbC4KKworMy4gR28gdW5kZXIgIk9wdGlvbnMiIGluIHRoZSBDb21wb3NlciB3aW5kb3cgYW5kIGJlIHN1cmUgdGhhdAorICAgIldvcmQgd3JhcCIgaXMgbm90IHNldC4KKworNC4gVXNlIE1lc3NhZ2UgLT4gSW5zZXJ0IGZpbGUuLi4gYW5kIGluc2VydCB0aGUgcGF0Y2guCisKKzUuIEJhY2sgaW4gdGhlIGNvbXBvc2Ugd2luZG93OiBhZGQgd2hhdGV2ZXIgb3RoZXIgdGV4dCB5b3Ugd2lzaCB0byB0aGUKKyAgIG1lc3NhZ2UsIGNvbXBsZXRlIHRoZSBhZGRyZXNzaW5nIGFuZCBzdWJqZWN0IGZpZWxkcywgYW5kIHByZXNzIHNlbmQuCisKK0JBU0UgVFJFRSBJTkZPUk1BVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBiYXNlIHRyZWUgaW5mb3JtYXRpb24gYmxvY2sgaXMgdXNlZCBmb3IgbWFpbnRhaW5lcnMgb3IgdGhpcmQgcGFydHkKK3Rlc3RlcnMgdG8ga25vdyB0aGUgZXhhY3Qgc3RhdGUgdGhlIHBhdGNoIHNlcmllcyBhcHBsaWVzIHRvLiBJdCBjb25zaXN0cworb2YgdGhlICdiYXNlIGNvbW1pdCcsIHdoaWNoIGlzIGEgd2VsbC1rbm93biBjb21taXQgdGhhdCBpcyBwYXJ0IG9mIHRoZQorc3RhYmxlIHBhcnQgb2YgdGhlIHByb2plY3QgaGlzdG9yeSBldmVyeWJvZHkgZWxzZSB3b3JrcyBvZmYgb2YsIGFuZCB6ZXJvCitvciBtb3JlICdwcmVyZXF1aXNpdGUgcGF0Y2hlcycsIHdoaWNoIGFyZSB3ZWxsLWtub3duIHBhdGNoZXMgaW4gZmxpZ2h0Cit0aGF0IGlzIG5vdCB5ZXQgcGFydCBvZiB0aGUgJ2Jhc2UgY29tbWl0JyB0aGF0IG5lZWQgdG8gYmUgYXBwbGllZCBvbiB0b3AKK29mICdiYXNlIGNvbW1pdCcgaW4gdG9wb2xvZ2ljYWwgb3JkZXIgYmVmb3JlIHRoZSBwYXRjaGVzIGNhbiBiZSBhcHBsaWVkLgorCitUaGUgJ2Jhc2UgY29tbWl0JyBpcyBzaG93biBhcyAiYmFzZS1jb21taXQ6ICIgZm9sbG93ZWQgYnkgdGhlIDQwLWhleCBvZgordGhlIGNvbW1pdCBvYmplY3QgbmFtZS4gIEEgJ3ByZXJlcXVpc2l0ZSBwYXRjaCcgaXMgc2hvd24gYXMKKyJwcmVyZXF1aXNpdGUtcGF0Y2gtaWQ6ICIgZm9sbG93ZWQgYnkgdGhlIDQwLWhleCAncGF0Y2ggaWQnLCB3aGljaCBjYW4KK2JlIG9idGFpbmVkIGJ5IHBhc3NpbmcgdGhlIHBhdGNoIHRocm91Z2ggdGhlIGBnaXQgcGF0Y2gtaWQgLS1zdGFibGVgCitjb21tYW5kLgorCitJbWFnaW5lIHRoYXQgb24gdG9wIG9mIHRoZSBwdWJsaWMgY29tbWl0IFAsIHlvdSBhcHBsaWVkIHdlbGwta25vd24KK3BhdGNoZXMgWCwgWSBhbmQgWiBmcm9tIHNvbWVib2R5IGVsc2UsIGFuZCB0aGVuIGJ1aWx0IHlvdXIgdGhyZWUtcGF0Y2gKK3NlcmllcyBBLCBCLCBDLCB0aGUgaGlzdG9yeSB3b3VsZCBiZSBsaWtlOgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKy0tLVAtLS1YLS0tWS0tLVotLS1BLS0tQi0tLUMKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitXaXRoIGBnaXQgZm9ybWF0LXBhdGNoIC0tYmFzZT1QIC0zIENgIChvciB2YXJpYW50cyB0aGVyZW9mLCBlLmcuIHdpdGgKK2AtLWNvdmVyLWxldHRlcmAgb3IgdXNpbmcgYFouLkNgIGluc3RlYWQgb2YgYC0zIENgIHRvIHNwZWNpZnkgdGhlCityYW5nZSksIHRoZSBiYXNlIHRyZWUgaW5mb3JtYXRpb24gYmxvY2sgaXMgc2hvd24gYXQgdGhlIGVuZCBvZiB0aGUKK2ZpcnN0IG1lc3NhZ2UgdGhlIGNvbW1hbmQgb3V0cHV0cyAoZWl0aGVyIHRoZSBmaXJzdCBwYXRjaCwgb3IgdGhlCitjb3ZlciBsZXR0ZXIpLCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorYmFzZS1jb21taXQ6IFAKK3ByZXJlcXVpc2l0ZS1wYXRjaC1pZDogWAorcHJlcmVxdWlzaXRlLXBhdGNoLWlkOiBZCitwcmVyZXF1aXNpdGUtcGF0Y2gtaWQ6IFoKKy0tLS0tLS0tLS0tLQorCitGb3Igbm9uLWxpbmVhciB0b3BvbG9neSwgc3VjaCBhcworCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKy0tLVAtLS1YLS0tQS0tLU0tLS1DCisgICAgXCAgICAgICAgIC8KKyAgICAgWS0tLVotLS1CCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworWW91IGNhbiBhbHNvIHVzZSBgZ2l0IGZvcm1hdC1wYXRjaCAtLWJhc2U9UCAtMyBDYCB0byBnZW5lcmF0ZSBwYXRjaGVzCitmb3IgQSwgQiBhbmQgQywgYW5kIHRoZSBpZGVudGlmaWVycyBmb3IgUCwgWCwgWSwgWiBhcmUgYXBwZW5kZWQgYXQgdGhlCitlbmQgb2YgdGhlIGZpcnN0IG1lc3NhZ2UuCisKK0lmIHNldCBgLS1iYXNlPWF1dG9gIGluIGNtZGxpbmUsIGl0IHdpbGwgdHJhY2sgYmFzZSBjb21taXQgYXV0b21hdGljYWxseSwKK3RoZSBiYXNlIGNvbW1pdCB3aWxsIGJlIHRoZSBtZXJnZSBiYXNlIG9mIHRpcCBjb21taXQgb2YgdGhlIHJlbW90ZS10cmFja2luZworYnJhbmNoIGFuZCByZXZpc2lvbi1yYW5nZSBzcGVjaWZpZWQgaW4gY21kbGluZS4KK0ZvciBhIGxvY2FsIGJyYW5jaCwgeW91IG5lZWQgdG8gdHJhY2sgYSByZW1vdGUgYnJhbmNoIGJ5IGBnaXQgYnJhbmNoCistLXNldC11cHN0cmVhbS10b2AgYmVmb3JlIHVzaW5nIHRoaXMgb3B0aW9uLgorCitFWEFNUExFUworLS0tLS0tLS0KKworKiBFeHRyYWN0IGNvbW1pdHMgYmV0d2VlbiByZXZpc2lvbnMgUjEgYW5kIFIyLCBhbmQgYXBwbHkgdGhlbSBvbiB0b3Agb2YKKyAgdGhlIGN1cnJlbnQgYnJhbmNoIHVzaW5nICdnaXQgYW0nIHRvIGNoZXJyeS1waWNrIHRoZW06CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGZvcm1hdC1wYXRjaCAtayAtLXN0ZG91dCBSMS4uUjIgfCBnaXQgYW0gLTMgLWsKKy0tLS0tLS0tLS0tLQorCisqIEV4dHJhY3QgYWxsIGNvbW1pdHMgd2hpY2ggYXJlIGluIHRoZSBjdXJyZW50IGJyYW5jaCBidXQgbm90IGluIHRoZQorICBvcmlnaW4gYnJhbmNoOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBmb3JtYXQtcGF0Y2ggb3JpZ2luCistLS0tLS0tLS0tLS0KKysKK0ZvciBlYWNoIGNvbW1pdCBhIHNlcGFyYXRlIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKyogRXh0cmFjdCBhbGwgY29tbWl0cyB0aGF0IGxlYWQgdG8gJ29yaWdpbicgc2luY2UgdGhlIGluY2VwdGlvbiBvZiB0aGUKKyAgcHJvamVjdDoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIC0tcm9vdCBvcmlnaW4KKy0tLS0tLS0tLS0tLQorCisqIFRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBvbmU6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGZvcm1hdC1wYXRjaCAtTSAtQiBvcmlnaW4KKy0tLS0tLS0tLS0tLQorKworQWRkaXRpb25hbGx5LCBpdCBkZXRlY3RzIGFuZCBoYW5kbGVzIHJlbmFtZXMgYW5kIGNvbXBsZXRlIHJld3JpdGVzCitpbnRlbGxpZ2VudGx5IHRvIHByb2R1Y2UgYSByZW5hbWluZyBwYXRjaC4gIEEgcmVuYW1pbmcgcGF0Y2ggcmVkdWNlcwordGhlIGFtb3VudCBvZiB0ZXh0IG91dHB1dCwgYW5kIGdlbmVyYWxseSBtYWtlcyBpdCBlYXNpZXIgdG8gcmV2aWV3LgorTm90ZSB0aGF0IG5vbi1HaXQgInBhdGNoIiBwcm9ncmFtcyB3b24ndCB1bmRlcnN0YW5kIHJlbmFtaW5nIHBhdGNoZXMsIHNvCit1c2UgaXQgb25seSB3aGVuIHlvdSBrbm93IHRoZSByZWNpcGllbnQgdXNlcyBHaXQgdG8gYXBwbHkgeW91ciBwYXRjaC4KKworKiBFeHRyYWN0IHRocmVlIHRvcG1vc3QgY29tbWl0cyBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgZm9ybWF0IHRoZW0KKyAgYXMgZS1tYWlsYWJsZSBwYXRjaGVzOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBmb3JtYXQtcGF0Y2ggLTMKKy0tLS0tLS0tLS0tLQorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWFtWzFdLCBsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZnNjay1vYmplY3RzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZzY2stb2JqZWN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVjNGJkYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZzY2stb2JqZWN0cy50eHQKQEAgLTAsMCArMSwyMiBAQAorZ2l0LWZzY2stb2JqZWN0cygxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZnNjay1vYmplY3RzIC0gVmVyaWZpZXMgdGhlIGNvbm5lY3Rpdml0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGZzY2stb2JqZWN0cycgLi4uCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGlzIGEgc3lub255bSBmb3IgbGlua2dpdDpnaXQtZnNja1sxXS4gIFBsZWFzZSByZWZlciB0byB0aGUKK2RvY3VtZW50YXRpb24gb2YgdGhhdCBjb21tYW5kLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZzY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZnNjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcyZDE1YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZzY2sudHh0CkBAIC0wLDAgKzEsMTc1IEBACitnaXQtZnNjaygxKQorPT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWZzY2sgLSBWZXJpZmllcyB0aGUgY29ubmVjdGl2aXR5IGFuZCB2YWxpZGl0eSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgZGF0YWJhc2UKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZnNjaycgWy0tdGFnc10gWy0tcm9vdF0gWy0tdW5yZWFjaGFibGVdIFstLWNhY2hlXSBbLS1uby1yZWZsb2dzXQorCSBbLS1bbm8tXWZ1bGxdIFstLXN0cmljdF0gWy0tdmVyYm9zZV0gWy0tbG9zdC1mb3VuZF0KKwkgWy0tW25vLV1kYW5nbGluZ10gWy0tW25vLV1wcm9ncmVzc10gWy0tY29ubmVjdGl2aXR5LW9ubHldCisJIFstLVtuby1dbmFtZS1vYmplY3RzXSBbPG9iamVjdD4qXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1ZlcmlmaWVzIHRoZSBjb25uZWN0aXZpdHkgYW5kIHZhbGlkaXR5IG9mIHRoZSBvYmplY3RzIGluIHRoZSBkYXRhYmFzZS4KKworT1BUSU9OUworLS0tLS0tLQorPG9iamVjdD46OgorCUFuIG9iamVjdCB0byB0cmVhdCBhcyB0aGUgaGVhZCBvZiBhbiB1bnJlYWNoYWJpbGl0eSB0cmFjZS4KKysKK0lmIG5vIG9iamVjdHMgYXJlIGdpdmVuLCAnZ2l0IGZzY2snIGRlZmF1bHRzIHRvIHVzaW5nIHRoZQoraW5kZXggZmlsZSwgYWxsIFNIQS0xIHJlZmVyZW5jZXMgaW4gYHJlZnNgIG5hbWVzcGFjZSwgYW5kIGFsbCByZWZsb2dzCisodW5sZXNzIC0tbm8tcmVmbG9ncyBpcyBnaXZlbikgYXMgaGVhZHMuCisKKy0tdW5yZWFjaGFibGU6OgorCVByaW50IG91dCBvYmplY3RzIHRoYXQgZXhpc3QgYnV0IHRoYXQgYXJlbid0IHJlYWNoYWJsZSBmcm9tIGFueQorCW9mIHRoZSByZWZlcmVuY2Ugbm9kZXMuCisKKy0tW25vLV1kYW5nbGluZzo6CisJUHJpbnQgb2JqZWN0cyB0aGF0IGV4aXN0IGJ1dCB0aGF0IGFyZSBuZXZlciAnZGlyZWN0bHknIHVzZWQgKGRlZmF1bHQpLgorCWAtLW5vLWRhbmdsaW5nYCBjYW4gYmUgdXNlZCB0byBvbWl0IHRoaXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3V0cHV0LgorCistLXJvb3Q6OgorCVJlcG9ydCByb290IG5vZGVzLgorCistLXRhZ3M6OgorCVJlcG9ydCB0YWdzLgorCistLWNhY2hlOjoKKwlDb25zaWRlciBhbnkgb2JqZWN0IHJlY29yZGVkIGluIHRoZSBpbmRleCBhbHNvIGFzIGEgaGVhZCBub2RlIGZvcgorCWFuIHVucmVhY2hhYmlsaXR5IHRyYWNlLgorCistLW5vLXJlZmxvZ3M6OgorCURvIG5vdCBjb25zaWRlciBjb21taXRzIHRoYXQgYXJlIHJlZmVyZW5jZWQgb25seSBieSBhbgorCWVudHJ5IGluIGEgcmVmbG9nIHRvIGJlIHJlYWNoYWJsZS4gIFRoaXMgb3B0aW9uIGlzIG1lYW50CisJb25seSB0byBzZWFyY2ggZm9yIGNvbW1pdHMgdGhhdCB1c2VkIHRvIGJlIGluIGEgcmVmLCBidXQKKwlub3cgYXJlbid0LCBidXQgYXJlIHN0aWxsIGluIHRoYXQgY29ycmVzcG9uZGluZyByZWZsb2cuCisKKy0tZnVsbDo6CisJQ2hlY2sgbm90IGp1c3Qgb2JqZWN0cyBpbiBHSVRfT0JKRUNUX0RJUkVDVE9SWQorCSgkR0lUX0RJUi9vYmplY3RzKSwgYnV0IGFsc28gdGhlIG9uZXMgZm91bmQgaW4gYWx0ZXJuYXRlCisJb2JqZWN0IHBvb2xzIGxpc3RlZCBpbiBHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUworCW9yICRHSVRfRElSL29iamVjdHMvaW5mby9hbHRlcm5hdGVzLAorCWFuZCBpbiBwYWNrZWQgR2l0IGFyY2hpdmVzIGZvdW5kIGluICRHSVRfRElSL29iamVjdHMvcGFjaworCWFuZCBjb3JyZXNwb25kaW5nIHBhY2sgc3ViZGlyZWN0b3JpZXMgaW4gYWx0ZXJuYXRlCisJb2JqZWN0IHBvb2xzLiAgVGhpcyBpcyBub3cgZGVmYXVsdDsgeW91IGNhbiB0dXJuIGl0IG9mZgorCXdpdGggLS1uby1mdWxsLgorCistLWNvbm5lY3Rpdml0eS1vbmx5OjoKKwlDaGVjayBvbmx5IHRoZSBjb25uZWN0aXZpdHkgb2YgcmVhY2hhYmxlIG9iamVjdHMsIG1ha2luZyBzdXJlCisJdGhhdCBhbnkgb2JqZWN0cyByZWZlcmVuY2VkIGJ5IGEgcmVhY2hhYmxlIHRhZywgY29tbWl0LCBvciB0cmVlCisJaXMgcHJlc2VudC4gVGhpcyBzcGVlZHMgdXAgdGhlIG9wZXJhdGlvbiBieSBhdm9pZGluZyByZWFkaW5nCisJYmxvYnMgZW50aXJlbHkgKHRob3VnaCBpdCBkb2VzIHN0aWxsIGNoZWNrIHRoYXQgcmVmZXJlbmNlZCBibG9icworCWV4aXN0KS4gVGhpcyB3aWxsIGRldGVjdCBjb3JydXB0aW9uIGluIGNvbW1pdHMgYW5kIHRyZWVzLCBidXQKKwlub3QgZG8gYW55IHNlbWFudGljIGNoZWNrcyAoZS5nLiwgZm9yIGZvcm1hdCBlcnJvcnMpLiBDb3JydXB0aW9uCisJaW4gYmxvYiBvYmplY3RzIHdpbGwgbm90IGJlIGRldGVjdGVkIGF0IGFsbC4KKysKK1VucmVhY2hhYmxlIHRhZ3MsIGNvbW1pdHMsIGFuZCB0cmVlcyB3aWxsIGFsc28gYmUgYWNjZXNzZWQgdG8gZmluZCB0aGUKK3RpcHMgb2YgZGFuZ2xpbmcgc2VnbWVudHMgb2YgaGlzdG9yeS4gVXNlIGAtLW5vLWRhbmdsaW5nYCBpZiB5b3UgZG9uJ3QKK2NhcmUgYWJvdXQgdGhpcyBvdXRwdXQgYW5kIHdhbnQgdG8gc3BlZWQgaXQgdXAgZnVydGhlci4KKworLS1zdHJpY3Q6OgorCUVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZywgbmFtZWx5IHRvIGNhdGNoIGEgZmlsZSBtb2RlCisJcmVjb3JkZWQgd2l0aCBnK3cgYml0IHNldCwgd2hpY2ggd2FzIGNyZWF0ZWQgYnkgb2xkZXIKKwl2ZXJzaW9ucyBvZiBHaXQuICBFeGlzdGluZyByZXBvc2l0b3JpZXMsIGluY2x1ZGluZyB0aGUKKwlMaW51eCBrZXJuZWwsIEdpdCBpdHNlbGYsIGFuZCBzcGFyc2UgcmVwb3NpdG9yeSBoYXZlIG9sZAorCW9iamVjdHMgdGhhdCB0cmlnZ2VycyB0aGlzIGNoZWNrLCBidXQgaXQgaXMgcmVjb21tZW5kZWQKKwl0byBjaGVjayBuZXcgcHJvamVjdHMgd2l0aCB0aGlzIGZsYWcuCisKKy0tdmVyYm9zZTo6CisJQmUgY2hhdHR5LgorCistLWxvc3QtZm91bmQ6OgorCVdyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW50byAuZ2l0L2xvc3QtZm91bmQvY29tbWl0LyBvcgorCS5naXQvbG9zdC1mb3VuZC9vdGhlci8sIGRlcGVuZGluZyBvbiB0eXBlLiAgSWYgdGhlIG9iamVjdCBpcworCWEgYmxvYiwgdGhlIGNvbnRlbnRzIGFyZSB3cml0dGVuIGludG8gdGhlIGZpbGUsIHJhdGhlciB0aGFuCisJaXRzIG9iamVjdCBuYW1lLgorCistLW5hbWUtb2JqZWN0czo6CisJV2hlbiBkaXNwbGF5aW5nIG5hbWVzIG9mIHJlYWNoYWJsZSBvYmplY3RzLCBpbiBhZGRpdGlvbiB0byB0aGUKKwlTSEEtMSBhbHNvIGRpc3BsYXkgYSBuYW1lIHRoYXQgZGVzY3JpYmVzICpob3cqIHRoZXkgYXJlIHJlYWNoYWJsZSwKKwljb21wYXRpYmxlIHdpdGggbGlua2dpdDpnaXQtcmV2LXBhcnNlWzFdLCBlLmcuCisJYEhFQURAezEyMzQ1Njc4OTB9fjI1XjI6c3JjL2AuCisKKy0tW25vLV1wcm9ncmVzczo6CisJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gYnkKKwlkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzCisJLS1uby1wcm9ncmVzcyBvciAtLXZlcmJvc2UgaXMgc3BlY2lmaWVkLiAtLXByb2dyZXNzIGZvcmNlcworCXByb2dyZXNzIHN0YXR1cyBldmVuIGlmIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gaXMgbm90CisJZGlyZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitpbmNsdWRlOjpjb25maWcvZnNjay50eHRbXQorCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK2dpdC1mc2NrIHRlc3RzIFNIQS0xIGFuZCBnZW5lcmFsIG9iamVjdCBzYW5pdHksIGFuZCBpdCBkb2VzIGZ1bGwgdHJhY2tpbmcKK29mIHRoZSByZXN1bHRpbmcgcmVhY2hhYmlsaXR5IGFuZCBldmVyeXRoaW5nIGVsc2UuIEl0IHByaW50cyBvdXQgYW55Citjb3JydXB0aW9uIGl0IGZpbmRzIChtaXNzaW5nIG9yIGJhZCBvYmplY3RzKSwgYW5kIGlmIHlvdSB1c2UgdGhlCitgLS11bnJlYWNoYWJsZWAgZmxhZyBpdCB3aWxsIGFsc28gcHJpbnQgb3V0IG9iamVjdHMgdGhhdCBleGlzdCBidXQgdGhhdAorYXJlbid0IHJlYWNoYWJsZSBmcm9tIGFueSBvZiB0aGUgc3BlY2lmaWVkIGhlYWQgbm9kZXMgKG9yIHRoZSBkZWZhdWx0CitzZXQsIGFzIG1lbnRpb25lZCBhYm92ZSkuCisKK0FueSBjb3JydXB0IG9iamVjdHMgeW91IHdpbGwgaGF2ZSB0byBmaW5kIGluIGJhY2t1cHMgb3Igb3RoZXIgYXJjaGl2ZXMKKyhpLmUuLCB5b3UgY2FuIGp1c3QgcmVtb3ZlIHRoZW0gYW5kIGRvIGFuICdyc3luYycgd2l0aCBzb21lIG90aGVyIHNpdGUgaW4KK3RoZSBob3BlcyB0aGF0IHNvbWVib2R5IGVsc2UgaGFzIHRoZSBvYmplY3QgeW91IGhhdmUgY29ycnVwdGVkKS4KKworSWYgY29yZS5jb21taXRHcmFwaCBpcyB0cnVlLCB0aGUgY29tbWl0LWdyYXBoIGZpbGUgd2lsbCBhbHNvIGJlIGluc3BlY3RlZAordXNpbmcgJ2dpdCBjb21taXQtZ3JhcGggdmVyaWZ5Jy4gU2VlIGxpbmtnaXQ6Z2l0LWNvbW1pdC1ncmFwaFsxXS4KKworRXh0cmFjdGVkIERpYWdub3N0aWNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZXhwZWN0IGRhbmdsaW5nIGNvbW1pdHMgLSBwb3RlbnRpYWwgaGVhZHMgLSBkdWUgdG8gbGFjayBvZiBoZWFkIGluZm9ybWF0aW9uOjoKKwlZb3UgaGF2ZW4ndCBzcGVjaWZpZWQgYW55IG5vZGVzIGFzIGhlYWRzIHNvIGl0IHdvbid0IGJlCisJcG9zc2libGUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHVuLXBhcmVudGVkIGNvbW1pdHMgYW5kCisJcm9vdCBub2Rlcy4KKworbWlzc2luZyBzaGExIGRpcmVjdG9yeSAnPGRpcj4nOjoKKwlUaGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIHNoYTEgb2JqZWN0cyBpcyBtaXNzaW5nLgorCit1bnJlYWNoYWJsZSA8dHlwZT4gPG9iamVjdD46OgorCVRoZSA8dHlwZT4gb2JqZWN0IDxvYmplY3Q+LCBpc24ndCBhY3R1YWxseSByZWZlcnJlZCB0byBkaXJlY3RseQorCW9yIGluZGlyZWN0bHkgaW4gYW55IG9mIHRoZSB0cmVlcyBvciBjb21taXRzIHNlZW4uIFRoaXMgY2FuCisJbWVhbiB0aGF0IHRoZXJlJ3MgYW5vdGhlciByb290IG5vZGUgdGhhdCB5b3UncmUgbm90IHNwZWNpZnlpbmcKKwlvciB0aGF0IHRoZSB0cmVlIGlzIGNvcnJ1cHQuIElmIHlvdSBoYXZlbid0IG1pc3NlZCBhIHJvb3Qgbm9kZQorCXRoZW4geW91IG1pZ2h0IGFzIHdlbGwgZGVsZXRlIHVucmVhY2hhYmxlIG5vZGVzIHNpbmNlIHRoZXkKKwljYW4ndCBiZSB1c2VkLgorCittaXNzaW5nIDx0eXBlPiA8b2JqZWN0Pjo6CisJVGhlIDx0eXBlPiBvYmplY3QgPG9iamVjdD4sIGlzIHJlZmVycmVkIHRvIGJ1dCBpc24ndCBwcmVzZW50IGluCisJdGhlIGRhdGFiYXNlLgorCitkYW5nbGluZyA8dHlwZT4gPG9iamVjdD46OgorCVRoZSA8dHlwZT4gb2JqZWN0IDxvYmplY3Q+LCBpcyBwcmVzZW50IGluIHRoZSBkYXRhYmFzZSBidXQgbmV2ZXIKKwknZGlyZWN0bHknIHVzZWQuIEEgZGFuZ2xpbmcgY29tbWl0IGNvdWxkIGJlIGEgcm9vdCBub2RlLgorCitoYXNoIG1pc21hdGNoIDxvYmplY3Q+OjoKKwlUaGUgZGF0YWJhc2UgaGFzIGFuIG9iamVjdCB3aG9zZSBoYXNoIGRvZXNuJ3QgbWF0Y2ggdGhlCisJb2JqZWN0IGRhdGFiYXNlIHZhbHVlLgorCVRoaXMgaW5kaWNhdGVzIGEgc2VyaW91cyBkYXRhIGludGVncml0eSBwcm9ibGVtLgorCitFbnZpcm9ubWVudCBWYXJpYWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHSVRfT0JKRUNUX0RJUkVDVE9SWTo6CisJdXNlZCB0byBzcGVjaWZ5IHRoZSBvYmplY3QgZGF0YWJhc2Ugcm9vdCAodXN1YWxseSAkR0lUX0RJUi9vYmplY3RzKQorCitHSVRfSU5ERVhfRklMRTo6CisJdXNlZCB0byBzcGVjaWZ5IHRoZSBpbmRleCBmaWxlIG9mIHRoZSBpbmRleAorCitHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUzo6CisJdXNlZCB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgb2JqZWN0IGRhdGFiYXNlIHJvb3RzICh1c3VhbGx5IHVuc2V0KQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWdjLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWdjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzExNGFkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZ2MudHh0CkBAIC0wLDAgKzEsMTYxIEBACitnaXQtZ2MoMSkKKz09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZ2MgLSBDbGVhbnVwIHVubmVjZXNzYXJ5IGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgbG9jYWwgcmVwb3NpdG9yeQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBnYycgWy0tYWdncmVzc2l2ZV0gWy0tYXV0b10gWy0tcXVpZXRdIFstLXBydW5lPTxkYXRlPiB8IC0tbm8tcHJ1bmVdIFstLWZvcmNlXSBbLS1rZWVwLWxhcmdlc3QtcGFja10KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSdW5zIGEgbnVtYmVyIG9mIGhvdXNla2VlcGluZyB0YXNrcyB3aXRoaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeSwKK3N1Y2ggYXMgY29tcHJlc3NpbmcgZmlsZSByZXZpc2lvbnMgKHRvIHJlZHVjZSBkaXNrIHNwYWNlIGFuZCBpbmNyZWFzZQorcGVyZm9ybWFuY2UpLCByZW1vdmluZyB1bnJlYWNoYWJsZSBvYmplY3RzIHdoaWNoIG1heSBoYXZlIGJlZW4KK2NyZWF0ZWQgZnJvbSBwcmlvciBpbnZvY2F0aW9ucyBvZiAnZ2l0IGFkZCcsIHBhY2tpbmcgcmVmcywgcHJ1bmluZworcmVmbG9nLCByZXJlcmUgbWV0YWRhdGEgb3Igc3RhbGUgd29ya2luZyB0cmVlcy4gTWF5IGFsc28gdXBkYXRlIGFuY2lsbGFyeQoraW5kZXhlcyBzdWNoIGFzIHRoZSBjb21taXQtZ3JhcGguCisKK1doZW4gY29tbW9uIHBvcmNlbGFpbiBvcGVyYXRpb25zIHRoYXQgY3JlYXRlIG9iamVjdHMgYXJlIHJ1biwgdGhleQord2lsbCBjaGVjayB3aGV0aGVyIHRoZSByZXBvc2l0b3J5IGhhcyBncm93biBzdWJzdGFudGlhbGx5IHNpbmNlIHRoZQorbGFzdCBtYWludGVuYW5jZSwgYW5kIGlmIHNvIHJ1biBgZ2l0IGdjYCBhdXRvbWF0aWNhbGx5LiBTZWUgYGdjLmF1dG9gCitiZWxvdyBmb3IgaG93IHRvIGRpc2FibGUgdGhpcyBiZWhhdmlvci4KKworUnVubmluZyBgZ2l0IGdjYCBtYW51YWxseSBzaG91bGQgb25seSBiZSBuZWVkZWQgd2hlbiBhZGRpbmcgb2JqZWN0cyB0bworYSByZXBvc2l0b3J5IHdpdGhvdXQgcmVndWxhcmx5IHJ1bm5pbmcgc3VjaCBwb3JjZWxhaW4gY29tbWFuZHMsIHRvIGRvCithIG9uZS1vZmYgcmVwb3NpdG9yeSBvcHRpbWl6YXRpb24sIG9yIGUuZy4gdG8gY2xlYW4gdXAgYSBzdWJvcHRpbWFsCittYXNzLWltcG9ydC4gU2VlIHRoZSAiUEFDS0ZJTEUgT1BUSU1JWkFUSU9OIiBzZWN0aW9uIGluCitsaW5rZ2l0OmdpdC1mYXN0LWltcG9ydFsxXSBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBpbXBvcnQgY2FzZS4KKworT1BUSU9OUworLS0tLS0tLQorCistLWFnZ3Jlc3NpdmU6OgorCVVzdWFsbHkgJ2dpdCBnYycgcnVucyB2ZXJ5IHF1aWNrbHkgd2hpbGUgcHJvdmlkaW5nIGdvb2QgZGlzaworCXNwYWNlIHV0aWxpemF0aW9uIGFuZCBwZXJmb3JtYW5jZS4gIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2UKKwknZ2l0IGdjJyB0byBtb3JlIGFnZ3Jlc3NpdmVseSBvcHRpbWl6ZSB0aGUgcmVwb3NpdG9yeSBhdCB0aGUgZXhwZW5zZQorCW9mIHRha2luZyBtdWNoIG1vcmUgdGltZS4gIFRoZSBlZmZlY3RzIG9mIHRoaXMgb3B0aW1pemF0aW9uIGFyZQorCW1vc3RseSBwZXJzaXN0ZW50LiBTZWUgdGhlICJBR0dSRVNTSVZFIiBzZWN0aW9uIGJlbG93IGZvciBkZXRhaWxzLgorCistLWF1dG86OgorCVdpdGggdGhpcyBvcHRpb24sICdnaXQgZ2MnIGNoZWNrcyB3aGV0aGVyIGFueSBob3VzZWtlZXBpbmcgaXMKKwlyZXF1aXJlZDsgaWYgbm90LCBpdCBleGl0cyB3aXRob3V0IHBlcmZvcm1pbmcgYW55IHdvcmsuCisrCitTZWUgdGhlIGBnYy5hdXRvYCBvcHRpb24gaW4gdGhlICJDT05GSUdVUkFUSU9OIiBzZWN0aW9uIGJlbG93IGZvciBob3cKK3RoaXMgaGV1cmlzdGljIHdvcmtzLgorKworT25jZSBob3VzZWtlZXBpbmcgaXMgdHJpZ2dlcmVkIGJ5IGV4Y2VlZGluZyB0aGUgbGltaXRzIG9mCitjb25maWd1cmF0aW9uIG9wdGlvbnMgc3VjaCBhcyBgZ2MuYXV0b2AgYW5kIGBnYy5hdXRvUGFja0xpbWl0YCwgYWxsCitvdGhlciBob3VzZWtlZXBpbmcgdGFza3MgKGUuZy4gcmVyZXJlLCB3b3JraW5nIHRyZWVzLCByZWZsb2cuLi4pIHdpbGwKK2JlIHBlcmZvcm1lZCBhcyB3ZWxsLgorCisKKy0tcHJ1bmU9PGRhdGU+OjoKKwlQcnVuZSBsb29zZSBvYmplY3RzIG9sZGVyIHRoYW4gZGF0ZSAoZGVmYXVsdCBpcyAyIHdlZWtzIGFnbywKKwlvdmVycmlkYWJsZSBieSB0aGUgY29uZmlnIHZhcmlhYmxlIGBnYy5wcnVuZUV4cGlyZWApLgorCS0tcHJ1bmU9bm93IHBydW5lcyBsb29zZSBvYmplY3RzIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgYWdlIGFuZAorCWluY3JlYXNlcyB0aGUgcmlzayBvZiBjb3JydXB0aW9uIGlmIGFub3RoZXIgcHJvY2VzcyBpcyB3cml0aW5nIHRvCisJdGhlIHJlcG9zaXRvcnkgY29uY3VycmVudGx5OyBzZWUgIk5PVEVTIiBiZWxvdy4gLS1wcnVuZSBpcyBvbiBieQorCWRlZmF1bHQuCisKKy0tbm8tcHJ1bmU6OgorCURvIG5vdCBwcnVuZSBhbnkgbG9vc2Ugb2JqZWN0cy4KKworLS1xdWlldDo6CisJU3VwcHJlc3MgYWxsIHByb2dyZXNzIHJlcG9ydHMuCisKKy0tZm9yY2U6OgorCUZvcmNlIGBnaXQgZ2NgIHRvIHJ1biBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGBnaXQgZ2NgCisJaW5zdGFuY2UgcnVubmluZyBvbiB0aGlzIHJlcG9zaXRvcnkuCisKKy0ta2VlcC1sYXJnZXN0LXBhY2s6OgorCUFsbCBwYWNrcyBleGNlcHQgdGhlIGxhcmdlc3QgcGFjayBhbmQgdGhvc2UgbWFya2VkIHdpdGggYQorCWAua2VlcGAgZmlsZXMgYXJlIGNvbnNvbGlkYXRlZCBpbnRvIGEgc2luZ2xlIHBhY2suIFdoZW4gdGhpcworCW9wdGlvbiBpcyB1c2VkLCBgZ2MuYmlnUGFja1RocmVzaG9sZGAgaXMgaWdub3JlZC4KKworQUdHUkVTU0lWRQorLS0tLS0tLS0tLQorCitXaGVuIHRoZSBgLS1hZ2dyZXNzaXZlYCBvcHRpb24gaXMgc3VwcGxpZWQsIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXSB3aWxsCitiZSBpbnZva2VkIHdpdGggdGhlIGAtZmAgZmxhZywgd2hpY2ggaW4gdHVybiB3aWxsIHBhc3MKK2AtLW5vLXJldXNlLWRlbHRhYCB0byBsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0uIFRoaXMgd2lsbCB0aHJvdworYXdheSBhbnkgZXhpc3RpbmcgZGVsdGFzIGFuZCByZS1jb21wdXRlIHRoZW0sIGF0IHRoZSBleHBlbnNlIG9mCitzcGVuZGluZyBtdWNoIG1vcmUgdGltZSBvbiB0aGUgcmVwYWNraW5nLgorCitUaGUgZWZmZWN0cyBvZiB0aGlzIGFyZSBtb3N0bHkgcGVyc2lzdGVudCwgZS5nLiB3aGVuIHBhY2tzIGFuZCBsb29zZQorb2JqZWN0cyBhcmUgY29hbGVzY2VkIGludG8gb25lIGFub3RoZXIgcGFjayB0aGUgZXhpc3RpbmcgZGVsdGFzIGluCit0aGF0IHBhY2sgbWlnaHQgZ2V0IHJlLXVzZWQsIGJ1dCB0aGVyZSBhcmUgYWxzbyB2YXJpb3VzIGNhc2VzIHdoZXJlIHdlCittaWdodCBwaWNrIGEgc3ViLW9wdGltYWwgZGVsdGEgZnJvbSBhIG5ld2VyIHBhY2sgaW5zdGVhZC4KKworRnVydGhlcm1vcmUsIHN1cHBseWluZyBgLS1hZ2dyZXNzaXZlYCB3aWxsIHR3ZWFrIHRoZSBgLS1kZXB0aGAgYW5kCitgLS13aW5kb3dgIG9wdGlvbnMgcGFzc2VkIHRvIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXS4gU2VlIHRoZQorYGdjLmFnZ3Jlc3NpdmVEZXB0aGAgYW5kIGBnYy5hZ2dyZXNzaXZlV2luZG93YCBzZXR0aW5ncyBiZWxvdy4gQnkKK3VzaW5nIGEgbGFyZ2VyIHdpbmRvdyBzaXplIHdlJ3JlIG1vcmUgbGlrZWx5IHRvIGZpbmQgbW9yZSBvcHRpbWFsCitkZWx0YXMuCisKK0l0J3MgcHJvYmFibHkgbm90IHdvcnRoIGl0IHRvIHVzZSB0aGlzIG9wdGlvbiBvbiBhIGdpdmVuIHJlcG9zaXRvcnkKK3dpdGhvdXQgcnVubmluZyB0YWlsb3JlZCBwZXJmb3JtYW5jZSBiZW5jaG1hcmtzIG9uIGl0LiBJdCB0YWtlcyBhIGxvdAorbW9yZSB0aW1lLCBhbmQgdGhlIHJlc3VsdGluZyBzcGFjZS9kZWx0YSBvcHRpbWl6YXRpb24gbWF5IG9yIG1heSBub3QKK2JlIHdvcnRoIGl0LiBOb3QgdXNpbmcgdGhpcyBhdCBhbGwgaXMgdGhlIHJpZ2h0IHRyYWRlLW9mZiBmb3IgbW9zdAordXNlcnMgYW5kIHRoZWlyIHJlcG9zaXRvcmllcy4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitUaGUgYmVsb3cgZG9jdW1lbnRhdGlvbiBpcyB0aGUgc2FtZSBhcyB3aGF0J3MgZm91bmQgaW4KK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXToKKworaW5jbHVkZTo6Y29uZmlnL2djLnR4dFtdCisKK05PVEVTCistLS0tLQorCisnZ2l0IGdjJyB0cmllcyB2ZXJ5IGhhcmQgbm90IHRvIGRlbGV0ZSBvYmplY3RzIHRoYXQgYXJlIHJlZmVyZW5jZWQKK2FueXdoZXJlIGluIHlvdXIgcmVwb3NpdG9yeS4gSW4gcGFydGljdWxhciwgaXQgd2lsbCBrZWVwIG5vdCBvbmx5CitvYmplY3RzIHJlZmVyZW5jZWQgYnkgeW91ciBjdXJyZW50IHNldCBvZiBicmFuY2hlcyBhbmQgdGFncywgYnV0IGFsc28KK29iamVjdHMgcmVmZXJlbmNlZCBieSB0aGUgaW5kZXgsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcywgbm90ZXMgc2F2ZWQKK2J5ICdnaXQgbm90ZXMnIHVuZGVyIHJlZnMvbm90ZXMvLCByZWZsb2dzICh3aGljaCBtYXkgcmVmZXJlbmNlIGNvbW1pdHMKK2luIGJyYW5jaGVzIHRoYXQgd2VyZSBsYXRlciBhbWVuZGVkIG9yIHJld291bmQpLCBhbmQgYW55dGhpbmcgZWxzZSBpbgordGhlIHJlZnMvKiBuYW1lc3BhY2UuICBJZiB5b3UgYXJlIGV4cGVjdGluZyBzb21lIG9iamVjdHMgdG8gYmUgZGVsZXRlZAorYW5kIHRoZXkgYXJlbid0LCBjaGVjayBhbGwgb2YgdGhvc2UgbG9jYXRpb25zIGFuZCBkZWNpZGUgd2hldGhlciBpdAorbWFrZXMgc2Vuc2UgaW4geW91ciBjYXNlIHRvIHJlbW92ZSB0aG9zZSByZWZlcmVuY2VzLgorCitPbiB0aGUgb3RoZXIgaGFuZCwgd2hlbiAnZ2l0IGdjJyBydW5zIGNvbmN1cnJlbnRseSB3aXRoIGFub3RoZXIgcHJvY2VzcywKK3RoZXJlIGlzIGEgcmlzayBvZiBpdCBkZWxldGluZyBhbiBvYmplY3QgdGhhdCB0aGUgb3RoZXIgcHJvY2VzcyBpcyB1c2luZworYnV0IGhhc24ndCBjcmVhdGVkIGEgcmVmZXJlbmNlIHRvLiBUaGlzIG1heSBqdXN0IGNhdXNlIHRoZSBvdGhlciBwcm9jZXNzCit0byBmYWlsIG9yIG1heSBjb3JydXB0IHRoZSByZXBvc2l0b3J5IGlmIHRoZSBvdGhlciBwcm9jZXNzIGxhdGVyIGFkZHMgYQorcmVmZXJlbmNlIHRvIHRoZSBkZWxldGVkIG9iamVjdC4gR2l0IGhhcyB0d28gZmVhdHVyZXMgdGhhdCBzaWduaWZpY2FudGx5CittaXRpZ2F0ZSB0aGlzIHByb2JsZW06CisKKy4gQW55IG9iamVjdCB3aXRoIG1vZGlmaWNhdGlvbiB0aW1lIG5ld2VyIHRoYW4gdGhlIGAtLXBydW5lYCBkYXRlIGlzIGtlcHQsCisgIGFsb25nIHdpdGggZXZlcnl0aGluZyByZWFjaGFibGUgZnJvbSBpdC4KKworLiBNb3N0IG9wZXJhdGlvbnMgdGhhdCBhZGQgYW4gb2JqZWN0IHRvIHRoZSBkYXRhYmFzZSB1cGRhdGUgdGhlCisgIG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBvYmplY3QgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IHNvIHRoYXQgIzEKKyAgYXBwbGllcy4KKworSG93ZXZlciwgdGhlc2UgZmVhdHVyZXMgZmFsbCBzaG9ydCBvZiBhIGNvbXBsZXRlIHNvbHV0aW9uLCBzbyB1c2VycyB3aG8KK3J1biBjb21tYW5kcyBjb25jdXJyZW50bHkgaGF2ZSB0byBsaXZlIHdpdGggc29tZSByaXNrIG9mIGNvcnJ1cHRpb24gKHdoaWNoCitzZWVtcyB0byBiZSBsb3cgaW4gcHJhY3RpY2UpLgorCitIT09LUworLS0tLS0KKworVGhlICdnaXQgZ2MgLS1hdXRvJyBjb21tYW5kIHdpbGwgcnVuIHRoZSAncHJlLWF1dG8tZ2MnIGhvb2suICBTZWUKK2xpbmtnaXQ6Z2l0aG9va3NbNV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1wcnVuZVsxXQorbGlua2dpdDpnaXQtcmVmbG9nWzFdCitsaW5rZ2l0OmdpdC1yZXBhY2tbMV0KK2xpbmtnaXQ6Z2l0LXJlcmVyZVsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWdldC10YXItY29tbWl0LWlkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWdldC10YXItY29tbWl0LWlkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzQ0ZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZ2V0LXRhci1jb21taXQtaWQudHh0CkBAIC0wLDAgKzEsMzAgQEAKK2dpdC1nZXQtdGFyLWNvbW1pdC1pZCgxKQorPT09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1nZXQtdGFyLWNvbW1pdC1pZCAtIEV4dHJhY3QgY29tbWl0IElEIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIHVzaW5nIGdpdC1hcmNoaXZlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGdldC10YXItY29tbWl0LWlkJworCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitSZWFkIGEgdGFyIGFyY2hpdmUgY3JlYXRlZCBieSAnZ2l0IGFyY2hpdmUnIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0CithbmQgZXh0cmFjdCB0aGUgY29tbWl0IElEIHN0b3JlZCBpbiBpdC4gIEl0IHJlYWRzIG9ubHkgdGhlIGZpcnN0CisxMDI0IGJ5dGVzIG9mIGlucHV0LCB0aHVzIGl0cyBydW50aW1lIGlzIG5vdCBpbmZsdWVuY2VkIGJ5IHRoZSBzaXplCitvZiB0aGUgdGFyIGFyY2hpdmUgdmVyeSBtdWNoLgorCitJZiBubyBjb21taXQgSUQgaXMgZm91bmQsICdnaXQgZ2V0LXRhci1jb21taXQtaWQnIHF1aWV0bHkgZXhpc3RzIHdpdGggYQorcmV0dXJuIGNvZGUgb2YgMS4gIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgYXJjaGl2ZSBoYWQgbm90IGJlZW4gY3JlYXRlZAordXNpbmcgJ2dpdCBhcmNoaXZlJyBvciBpZiB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mICdnaXQgYXJjaGl2ZScgaGFkIGJlZW4KK2EgdHJlZSBJRCBpbnN0ZWFkIG9mIGEgY29tbWl0IElEIG9yIHRhZy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZjliYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dApAQCAtMCwwICsxLDM2NiBAQAorZ2l0LWdyZXAoMSkKKz09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1ncmVwIC0gUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGdyZXAnIFstYSB8IC0tdGV4dF0gWy1JXSBbLS10ZXh0Y29udl0gWy1pIHwgLS1pZ25vcmUtY2FzZV0gWy13IHwgLS13b3JkLXJlZ2V4cF0KKwkgICBbLXYgfCAtLWludmVydC1tYXRjaF0gWy1ofC1IXSBbLS1mdWxsLW5hbWVdCisJICAgWy1FIHwgLS1leHRlbmRlZC1yZWdleHBdIFstRyB8IC0tYmFzaWMtcmVnZXhwXQorCSAgIFstUCB8IC0tcGVybC1yZWdleHBdCisJICAgWy1GIHwgLS1maXhlZC1zdHJpbmdzXSBbLW4gfCAtLWxpbmUtbnVtYmVyXSBbLS1jb2x1bW5dCisJICAgWy1sIHwgLS1maWxlcy13aXRoLW1hdGNoZXNdIFstTCB8IC0tZmlsZXMtd2l0aG91dC1tYXRjaF0KKwkgICBbKC1PIHwgLS1vcGVuLWZpbGVzLWluLXBhZ2VyKSBbPHBhZ2VyPl1dCisJICAgWy16IHwgLS1udWxsXQorCSAgIFsgLW8gfCAtLW9ubHktbWF0Y2hpbmcgXSBbLWMgfCAtLWNvdW50XSBbLS1hbGwtbWF0Y2hdIFstcSB8IC0tcXVpZXRdCisJICAgWy0tbWF4LWRlcHRoIDxkZXB0aD5dIFstLVtuby1dcmVjdXJzaXZlXQorCSAgIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0KKwkgICBbLS1icmVha10gWy0taGVhZGluZ10gWy1wIHwgLS1zaG93LWZ1bmN0aW9uXQorCSAgIFstQSA8cG9zdC1jb250ZXh0Pl0gWy1CIDxwcmUtY29udGV4dD5dIFstQyA8Y29udGV4dD5dCisJICAgWy1XIHwgLS1mdW5jdGlvbi1jb250ZXh0XQorCSAgIFstLXRocmVhZHMgPG51bT5dCisJICAgWy1mIDxmaWxlPl0gWy1lXSA8cGF0dGVybj4KKwkgICBbLS1hbmR8LS1vcnwtLW5vdHwofCl8LWUgPHBhdHRlcm4+Li4uXQorCSAgIFstLXJlY3Vyc2Utc3VibW9kdWxlc10gWy0tcGFyZW50LWJhc2VuYW1lIDxiYXNlbmFtZT5dCisJICAgWyBbLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmRdIFstLWNhY2hlZCB8IC0tbm8taW5kZXggfCAtLXVudHJhY2tlZF0gfCA8dHJlZT4uLi5dCisJICAgWy0tXSBbPHBhdGhzcGVjPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitMb29rIGZvciBzcGVjaWZpZWQgcGF0dGVybnMgaW4gdGhlIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmsgdHJlZSwgYmxvYnMKK3JlZ2lzdGVyZWQgaW4gdGhlIGluZGV4IGZpbGUsIG9yIGJsb2JzIGluIGdpdmVuIHRyZWUgb2JqZWN0cy4gIFBhdHRlcm5zCithcmUgbGlzdHMgb2Ygb25lIG9yIG1vcmUgc2VhcmNoIGV4cHJlc3Npb25zIHNlcGFyYXRlZCBieSBuZXdsaW5lCitjaGFyYWN0ZXJzLiAgQW4gZW1wdHkgc3RyaW5nIGFzIHNlYXJjaCBleHByZXNzaW9uIG1hdGNoZXMgYWxsIGxpbmVzLgorCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworZ3JlcC5saW5lTnVtYmVyOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlIGAtbmAgb3B0aW9uIGJ5IGRlZmF1bHQuCisKK2dyZXAuY29sdW1uOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlIHRoZSBgLS1jb2x1bW5gIG9wdGlvbiBieSBkZWZhdWx0LgorCitncmVwLnBhdHRlcm5UeXBlOjoKKwlTZXQgdGhlIGRlZmF1bHQgbWF0Y2hpbmcgYmVoYXZpb3IuIFVzaW5nIGEgdmFsdWUgb2YgJ2Jhc2ljJywgJ2V4dGVuZGVkJywKKwknZml4ZWQnLCBvciAncGVybCcgd2lsbCBlbmFibGUgdGhlIGAtLWJhc2ljLXJlZ2V4cGAsIGAtLWV4dGVuZGVkLXJlZ2V4cGAsCisJYC0tZml4ZWQtc3RyaW5nc2AsIG9yIGAtLXBlcmwtcmVnZXhwYCBvcHRpb24gYWNjb3JkaW5nbHksIHdoaWxlIHRoZQorCXZhbHVlICdkZWZhdWx0JyB3aWxsIHJldHVybiB0byB0aGUgZGVmYXVsdCBtYXRjaGluZyBiZWhhdmlvci4KKworZ3JlcC5leHRlbmRlZFJlZ2V4cDo6CisJSWYgc2V0IHRvIHRydWUsIGVuYWJsZSBgLS1leHRlbmRlZC1yZWdleHBgIG9wdGlvbiBieSBkZWZhdWx0LiBUaGlzCisJb3B0aW9uIGlzIGlnbm9yZWQgd2hlbiB0aGUgYGdyZXAucGF0dGVyblR5cGVgIG9wdGlvbiBpcyBzZXQgdG8gYSB2YWx1ZQorCW90aGVyIHRoYW4gJ2RlZmF1bHQnLgorCitncmVwLnRocmVhZHM6OgorCU51bWJlciBvZiBncmVwIHdvcmtlciB0aHJlYWRzIHRvIHVzZS4gSWYgdW5zZXQgKG9yIHNldCB0byAwKSwgR2l0IHdpbGwKKwl1c2UgYXMgbWFueSB0aHJlYWRzIGFzIHRoZSBudW1iZXIgb2YgbG9naWNhbCBjb3JlcyBhdmFpbGFibGUuCisKK2dyZXAuZnVsbE5hbWU6OgorCUlmIHNldCB0byB0cnVlLCBlbmFibGUgYC0tZnVsbC1uYW1lYCBvcHRpb24gYnkgZGVmYXVsdC4KKworZ3JlcC5mYWxsYmFja1RvTm9JbmRleDo6CisJSWYgc2V0IHRvIHRydWUsIGZhbGwgYmFjayB0byBnaXQgZ3JlcCAtLW5vLWluZGV4IGlmIGdpdCBncmVwCisJaXMgZXhlY3V0ZWQgb3V0c2lkZSBvZiBhIGdpdCByZXBvc2l0b3J5LiAgRGVmYXVsdHMgdG8gZmFsc2UuCisKKworT1BUSU9OUworLS0tLS0tLQorLS1jYWNoZWQ6OgorCUluc3RlYWQgb2Ygc2VhcmNoaW5nIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSwgc2VhcmNoCisJYmxvYnMgcmVnaXN0ZXJlZCBpbiB0aGUgaW5kZXggZmlsZS4KKworLS1uby1pbmRleDo6CisJU2VhcmNoIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0aGF0IGlzIG5vdCBtYW5hZ2VkIGJ5IEdpdC4KKworLS11bnRyYWNrZWQ6OgorCUluIGFkZGl0aW9uIHRvIHNlYXJjaGluZyBpbiB0aGUgdHJhY2tlZCBmaWxlcyBpbiB0aGUgd29ya2luZworCXRyZWUsIHNlYXJjaCBhbHNvIGluIHVudHJhY2tlZCBmaWxlcy4KKworLS1uby1leGNsdWRlLXN0YW5kYXJkOjoKKwlBbHNvIHNlYXJjaCBpbiBpZ25vcmVkIGZpbGVzIGJ5IG5vdCBob25vcmluZyB0aGUgYC5naXRpZ25vcmVgCisJbWVjaGFuaXNtLiBPbmx5IHVzZWZ1bCB3aXRoIGAtLXVudHJhY2tlZGAuCisKKy0tZXhjbHVkZS1zdGFuZGFyZDo6CisJRG8gbm90IHBheSBhdHRlbnRpb24gdG8gaWdub3JlZCBmaWxlcyBzcGVjaWZpZWQgdmlhIHRoZSBgLmdpdGlnbm9yZWAKKwltZWNoYW5pc20uICBPbmx5IHVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKKwl3aXRoIGAtLW5vLWluZGV4YC4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorCVJlY3Vyc2l2ZWx5IHNlYXJjaCBpbiBlYWNoIHN1Ym1vZHVsZSB0aGF0IGlzIGFjdGl2ZSBhbmQKKwljaGVja2VkIG91dCBpbiB0aGUgcmVwb3NpdG9yeS4gIFdoZW4gdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZQorCTx0cmVlPiBvcHRpb24gdGhlIHByZWZpeCBvZiBhbGwgc3VibW9kdWxlIG91dHB1dCB3aWxsIGJlIHRoZSBuYW1lIG9mCisJdGhlIHBhcmVudCBwcm9qZWN0J3MgPHRyZWU+IG9iamVjdC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdAorCWlmIGAtLW5vLWluZGV4YCBpcyBnaXZlbi4KKworLWE6OgorLS10ZXh0OjoKKwlQcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyBpZiB0aGV5IHdlcmUgdGV4dC4KKworLS10ZXh0Y29udjo6CisJSG9ub3IgdGV4dGNvbnYgZmlsdGVyIHNldHRpbmdzLgorCistLW5vLXRleHRjb252OjoKKwlEbyBub3QgaG9ub3IgdGV4dGNvbnYgZmlsdGVyIHNldHRpbmdzLgorCVRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKy1pOjoKKy0taWdub3JlLWNhc2U6OgorCUlnbm9yZSBjYXNlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHBhdHRlcm5zIGFuZCB0aGUKKwlmaWxlcy4KKworLUk6OgorCURvbid0IG1hdGNoIHRoZSBwYXR0ZXJuIGluIGJpbmFyeSBmaWxlcy4KKworLS1tYXgtZGVwdGggPGRlcHRoPjo6CisJRm9yIGVhY2ggPHBhdGhzcGVjPiBnaXZlbiBvbiBjb21tYW5kIGxpbmUsIGRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+CisJbGV2ZWxzIG9mIGRpcmVjdG9yaWVzLiBBIHZhbHVlIG9mIC0xIG1lYW5zIG5vIGxpbWl0LgorCVRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgPHBhdGhzcGVjPiBjb250YWlucyBhY3RpdmUgd2lsZGNhcmRzLgorCUluIG90aGVyIHdvcmRzIGlmICJhKiIgbWF0Y2hlcyBhIGRpcmVjdG9yeSBuYW1lZCAiYSoiLAorCSIqIiBpcyBtYXRjaGVkIGxpdGVyYWxseSBzbyAtLW1heC1kZXB0aCBpcyBzdGlsbCBlZmZlY3RpdmUuCisKKy1yOjoKKy0tcmVjdXJzaXZlOjoKKwlTYW1lIGFzIGAtLW1heC1kZXB0aD0tMWA7IHRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKy0tbm8tcmVjdXJzaXZlOjoKKwlTYW1lIGFzIGAtLW1heC1kZXB0aD0wYC4KKworLXc6OgorLS13b3JkLXJlZ2V4cDo6CisJTWF0Y2ggdGhlIHBhdHRlcm4gb25seSBhdCB3b3JkIGJvdW5kYXJ5IChlaXRoZXIgYmVnaW4gYXQgdGhlCisJYmVnaW5uaW5nIG9mIGEgbGluZSwgb3IgcHJlY2VkZWQgYnkgYSBub24td29yZCBjaGFyYWN0ZXI7IGVuZCBhdAorCXRoZSBlbmQgb2YgYSBsaW5lIG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXdvcmQgY2hhcmFjdGVyKS4KKworLXY6OgorLS1pbnZlcnQtbWF0Y2g6OgorCVNlbGVjdCBub24tbWF0Y2hpbmcgbGluZXMuCisKKy1oOjoKKy1IOjoKKwlCeSBkZWZhdWx0LCB0aGUgY29tbWFuZCBzaG93cyB0aGUgZmlsZW5hbWUgZm9yIGVhY2gKKwltYXRjaC4gIGAtaGAgb3B0aW9uIGlzIHVzZWQgdG8gc3VwcHJlc3MgdGhpcyBvdXRwdXQuCisJYC1IYCBpcyB0aGVyZSBmb3IgY29tcGxldGVuZXNzIGFuZCBkb2VzIG5vdCBkbyBhbnl0aGluZworCWV4Y2VwdCBpdCBvdmVycmlkZXMgYC1oYCBnaXZlbiBlYXJsaWVyIG9uIHRoZSBjb21tYW5kCisJbGluZS4KKworLS1mdWxsLW5hbWU6OgorCVdoZW4gcnVuIGZyb20gYSBzdWJkaXJlY3RvcnksIHRoZSBjb21tYW5kIHVzdWFsbHkKKwlvdXRwdXRzIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFRoaXMKKwlvcHRpb24gZm9yY2VzIHBhdGhzIHRvIGJlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdAorCXRvcCBkaXJlY3RvcnkuCisKKy1FOjoKKy0tZXh0ZW5kZWQtcmVnZXhwOjoKKy1HOjoKKy0tYmFzaWMtcmVnZXhwOjoKKwlVc2UgUE9TSVggZXh0ZW5kZWQvYmFzaWMgcmVnZXhwIGZvciBwYXR0ZXJucy4gIERlZmF1bHQKKwlpcyB0byB1c2UgYmFzaWMgcmVnZXhwLgorCistUDo6CistLXBlcmwtcmVnZXhwOjoKKwlVc2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIHBhdHRlcm5zLgorKworU3VwcG9ydCBmb3IgdGhlc2UgdHlwZXMgb2YgcmVndWxhciBleHByZXNzaW9ucyBpcyBhbiBvcHRpb25hbAorY29tcGlsZS10aW1lIGRlcGVuZGVuY3kuIElmIEdpdCB3YXNuJ3QgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciB0aGVtCitwcm92aWRpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSBpdCB0byBkaWUuCisKKy1GOjoKKy0tZml4ZWQtc3RyaW5nczo6CisJVXNlIGZpeGVkIHN0cmluZ3MgZm9yIHBhdHRlcm5zIChkb24ndCBpbnRlcnByZXQgcGF0dGVybgorCWFzIGEgcmVnZXgpLgorCistbjo6CistLWxpbmUtbnVtYmVyOjoKKwlQcmVmaXggdGhlIGxpbmUgbnVtYmVyIHRvIG1hdGNoaW5nIGxpbmVzLgorCistLWNvbHVtbjo6CisJUHJlZml4IHRoZSAxLWluZGV4ZWQgYnl0ZS1vZmZzZXQgb2YgdGhlIGZpcnN0IG1hdGNoIGZyb20gdGhlIHN0YXJ0IG9mIHRoZQorCW1hdGNoaW5nIGxpbmUuCisKKy1sOjoKKy0tZmlsZXMtd2l0aC1tYXRjaGVzOjoKKy0tbmFtZS1vbmx5OjoKKy1MOjoKKy0tZmlsZXMtd2l0aG91dC1tYXRjaDo6CisJSW5zdGVhZCBvZiBzaG93aW5nIGV2ZXJ5IG1hdGNoZWQgbGluZSwgc2hvdyBvbmx5IHRoZQorCW5hbWVzIG9mIGZpbGVzIHRoYXQgY29udGFpbiAob3IgZG8gbm90IGNvbnRhaW4pIG1hdGNoZXMuCisJRm9yIGJldHRlciBjb21wYXRpYmlsaXR5IHdpdGggJ2dpdCBkaWZmJywgYC0tbmFtZS1vbmx5YCBpcyBhCisJc3lub255bSBmb3IgYC0tZmlsZXMtd2l0aC1tYXRjaGVzYC4KKworLU9bPHBhZ2VyPl06OgorLS1vcGVuLWZpbGVzLWluLXBhZ2VyWz08cGFnZXI+XTo6CisJT3BlbiB0aGUgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIChub3QgdGhlIG91dHB1dCBvZiAnZ3JlcCcpLgorCUlmIHRoZSBwYWdlciBoYXBwZW5zIHRvIGJlICJsZXNzIiBvciAidmkiLCBhbmQgdGhlIHVzZXIKKwlzcGVjaWZpZWQgb25seSBvbmUgcGF0dGVybiwgdGhlIGZpcnN0IGZpbGUgaXMgcG9zaXRpb25lZCBhdAorCXRoZSBmaXJzdCBtYXRjaCBhdXRvbWF0aWNhbGx5LiBUaGUgYHBhZ2VyYCBhcmd1bWVudCBpcworCW9wdGlvbmFsOyBpZiBzcGVjaWZpZWQsIGl0IG11c3QgYmUgc3R1Y2sgdG8gdGhlIG9wdGlvbgorCXdpdGhvdXQgYSBzcGFjZS4gSWYgYHBhZ2VyYCBpcyB1bnNwZWNpZmllZCwgdGhlIGRlZmF1bHQgcGFnZXIKKwl3aWxsIGJlIHVzZWQgKHNlZSBgY29yZS5wYWdlcmAgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworLXo6OgorLS1udWxsOjoKKwlVc2UgXDAgYXMgdGhlIGRlbGltaXRlciBmb3IgcGF0aG5hbWVzIGluIHRoZSBvdXRwdXQsIGFuZCBwcmludAorCXRoZW0gdmVyYmF0aW0uIFdpdGhvdXQgdGhpcyBvcHRpb24sIHBhdGhuYW1lcyB3aXRoICJ1bnVzdWFsIgorCWNoYXJhY3RlcnMgYXJlIHF1b3RlZCBhcyBleHBsYWluZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uCisJdmFyaWFibGUgY29yZS5xdW90ZVBhdGggKHNlZSBnaXQtY29uZmlnKDEpKS4KKworLW86OgorLS1vbmx5LW1hdGNoaW5nOjoKKwlQcmludCBvbmx5IHRoZSBtYXRjaGVkIChub24tZW1wdHkpIHBhcnRzIG9mIGEgbWF0Y2hpbmcgbGluZSwgd2l0aCBlYWNoIHN1Y2gKKwlwYXJ0IG9uIGEgc2VwYXJhdGUgb3V0cHV0IGxpbmUuCisKKy1jOjoKKy0tY291bnQ6OgorCUluc3RlYWQgb2Ygc2hvd2luZyBldmVyeSBtYXRjaGVkIGxpbmUsIHNob3cgdGhlIG51bWJlciBvZgorCWxpbmVzIHRoYXQgbWF0Y2guCisKKy0tY29sb3JbPTx3aGVuPl06OgorCVNob3cgY29sb3JlZCBtYXRjaGVzLgorCVRoZSB2YWx1ZSBtdXN0IGJlIGFsd2F5cyAodGhlIGRlZmF1bHQpLCBuZXZlciwgb3IgYXV0by4KKworLS1uby1jb2xvcjo6CisJVHVybiBvZmYgbWF0Y2ggaGlnaGxpZ2h0aW5nLCBldmVuIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQorCWdpdmVzIHRoZSBkZWZhdWx0IHRvIGNvbG9yIG91dHB1dC4KKwlTYW1lIGFzIGAtLWNvbG9yPW5ldmVyYC4KKworLS1icmVhazo6CisJUHJpbnQgYW4gZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMuCisKKy0taGVhZGluZzo6CisJU2hvdyB0aGUgZmlsZW5hbWUgYWJvdmUgdGhlIG1hdGNoZXMgaW4gdGhhdCBmaWxlIGluc3RlYWQgb2YKKwlhdCB0aGUgc3RhcnQgb2YgZWFjaCBzaG93biBsaW5lLgorCistcDo6CistLXNob3ctZnVuY3Rpb246OgorCVNob3cgdGhlIHByZWNlZGluZyBsaW5lIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIG5hbWUgb2YKKwl0aGUgbWF0Y2gsIHVubGVzcyB0aGUgbWF0Y2hpbmcgbGluZSBpcyBhIGZ1bmN0aW9uIG5hbWUgaXRzZWxmLgorCVRoZSBuYW1lIGlzIGRldGVybWluZWQgaW4gdGhlIHNhbWUgd2F5IGFzICdnaXQgZGlmZicgd29ya3Mgb3V0CisJcGF0Y2ggaHVuayBoZWFkZXJzIChzZWUgJ0RlZmluaW5nIGEgY3VzdG9tIGh1bmstaGVhZGVyJyBpbgorCWxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSkuCisKKy08bnVtPjo6CistQyA8bnVtPjo6CistLWNvbnRleHQgPG51bT46OgorCVNob3cgPG51bT4gbGVhZGluZyBhbmQgdHJhaWxpbmcgbGluZXMsIGFuZCBwbGFjZSBhIGxpbmUKKwljb250YWluaW5nIGAtLWAgYmV0d2VlbiBjb250aWd1b3VzIGdyb3VwcyBvZiBtYXRjaGVzLgorCistQSA8bnVtPjo6CistLWFmdGVyLWNvbnRleHQgPG51bT46OgorCVNob3cgPG51bT4gdHJhaWxpbmcgbGluZXMsIGFuZCBwbGFjZSBhIGxpbmUgY29udGFpbmluZworCWAtLWAgYmV0d2VlbiBjb250aWd1b3VzIGdyb3VwcyBvZiBtYXRjaGVzLgorCistQiA8bnVtPjo6CistLWJlZm9yZS1jb250ZXh0IDxudW0+OjoKKwlTaG93IDxudW0+IGxlYWRpbmcgbGluZXMsIGFuZCBwbGFjZSBhIGxpbmUgY29udGFpbmluZworCWAtLWAgYmV0d2VlbiBjb250aWd1b3VzIGdyb3VwcyBvZiBtYXRjaGVzLgorCistVzo6CistLWZ1bmN0aW9uLWNvbnRleHQ6OgorCVNob3cgdGhlIHN1cnJvdW5kaW5nIHRleHQgZnJvbSB0aGUgcHJldmlvdXMgbGluZSBjb250YWluaW5nIGEKKwlmdW5jdGlvbiBuYW1lIHVwIHRvIHRoZSBvbmUgYmVmb3JlIHRoZSBuZXh0IGZ1bmN0aW9uIG5hbWUsCisJZWZmZWN0aXZlbHkgc2hvd2luZyB0aGUgd2hvbGUgZnVuY3Rpb24gaW4gd2hpY2ggdGhlIG1hdGNoIHdhcworCWZvdW5kLgorCistLXRocmVhZHMgPG51bT46OgorCU51bWJlciBvZiBncmVwIHdvcmtlciB0aHJlYWRzIHRvIHVzZS4KKwlTZWUgYGdyZXAudGhyZWFkc2AgaW4gJ0NPTkZJR1VSQVRJT04nIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCistZiA8ZmlsZT46OgorCVJlYWQgcGF0dGVybnMgZnJvbSA8ZmlsZT4sIG9uZSBwZXIgbGluZS4KKysKK1Bhc3NpbmcgdGhlIHBhdHRlcm4gdmlhIDxmaWxlPiBhbGxvd3MgZm9yIHByb3ZpZGluZyBhIHNlYXJjaCBwYXR0ZXJuCitjb250YWluaW5nIGEgXDAuCisrCitOb3QgYWxsIHBhdHRlcm4gdHlwZXMgc3VwcG9ydCBwYXR0ZXJucyBjb250YWluaW5nIFwwLiBHaXQgd2lsbCBlcnJvcgorb3V0IGlmIGEgZ2l2ZW4gcGF0dGVybiB0eXBlIGNhbid0IHN1cHBvcnQgc3VjaCBhIHBhdHRlcm4uIFRoZQorYC0tcGVybC1yZWdleHBgIHBhdHRlcm4gdHlwZSB3aGVuIGNvbXBpbGVkIGFnYWluc3QgdGhlIFBDUkUgdjIgYmFja2VuZAoraGFzIHRoZSB3aWRlc3Qgc3VwcG9ydCBmb3IgdGhlc2UgdHlwZXMgb2YgcGF0dGVybnMuCisrCitJbiB2ZXJzaW9ucyBvZiBHaXQgYmVmb3JlIDIuMjMuMCBwYXR0ZXJucyBjb250YWluaW5nIFwwIHdvdWxkIGJlCitzaWxlbnRseSBjb25zaWRlcmVkIGZpeGVkLiBUaGlzIHdhcyBuZXZlciBkb2N1bWVudGVkLCB0aGVyZSB3ZXJlIGFsc28KK29kZCBhbmQgdW5kb2N1bWVudGVkIGludGVyYWN0aW9ucyBiZXR3ZWVuIGUuZy4gbm9uLUFTQ0lJIHBhdHRlcm5zCitjb250YWluaW5nIFwwIGFuZCBgLS1pZ25vcmUtY2FzZWAuCisrCitJbiBmdXR1cmUgdmVyc2lvbnMgd2UgbWF5IGxlYXJuIHRvIHN1cHBvcnQgcGF0dGVybnMgY29udGFpbmluZyBcMCBmb3IKK21vcmUgc2VhcmNoIGJhY2tlbmRzLCB1bnRpbCB0aGVuIHdlJ2xsIGRpZSB3aGVuIHRoZSBwYXR0ZXJuIHR5cGUgaW4KK3F1ZXN0aW9uIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLgorCistZTo6CisJVGhlIG5leHQgcGFyYW1ldGVyIGlzIHRoZSBwYXR0ZXJuLiBUaGlzIG9wdGlvbiBoYXMgdG8gYmUKKwl1c2VkIGZvciBwYXR0ZXJucyBzdGFydGluZyB3aXRoIGAtYCBhbmQgc2hvdWxkIGJlIHVzZWQgaW4KKwlzY3JpcHRzIHBhc3NpbmcgdXNlciBpbnB1dCB0byBncmVwLiAgTXVsdGlwbGUgcGF0dGVybnMgYXJlCisJY29tYmluZWQgYnkgJ29yJy4KKworLS1hbmQ6OgorLS1vcjo6CistLW5vdDo6CisoIC4uLiApOjoKKwlTcGVjaWZ5IGhvdyBtdWx0aXBsZSBwYXR0ZXJucyBhcmUgY29tYmluZWQgdXNpbmcgQm9vbGVhbgorCWV4cHJlc3Npb25zLiAgYC0tb3JgIGlzIHRoZSBkZWZhdWx0IG9wZXJhdG9yLiAgYC0tYW5kYCBoYXMKKwloaWdoZXIgcHJlY2VkZW5jZSB0aGFuIGAtLW9yYC4gIGAtZWAgaGFzIHRvIGJlIHVzZWQgZm9yIGFsbAorCXBhdHRlcm5zLgorCistLWFsbC1tYXRjaDo6CisJV2hlbiBnaXZpbmcgbXVsdGlwbGUgcGF0dGVybiBleHByZXNzaW9ucyBjb21iaW5lZCB3aXRoIGAtLW9yYCwKKwl0aGlzIGZsYWcgaXMgc3BlY2lmaWVkIHRvIGxpbWl0IHRoZSBtYXRjaCB0byBmaWxlcyB0aGF0CisJaGF2ZSBsaW5lcyB0byBtYXRjaCBhbGwgb2YgdGhlbS4KKworLXE6OgorLS1xdWlldDo6CisJRG8gbm90IG91dHB1dCBtYXRjaGVkIGxpbmVzOyBpbnN0ZWFkLCBleGl0IHdpdGggc3RhdHVzIDAgd2hlbgorCXRoZXJlIGlzIGEgbWF0Y2ggYW5kIHdpdGggbm9uLXplcm8gc3RhdHVzIHdoZW4gdGhlcmUgaXNuJ3QuCisKKzx0cmVlPi4uLjo6CisJSW5zdGVhZCBvZiBzZWFyY2hpbmcgdHJhY2tlZCBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLCBzZWFyY2gKKwlibG9icyBpbiB0aGUgZ2l2ZW4gdHJlZXMuCisKK1wtLTo6CisJU2lnbmFscyB0aGUgZW5kIG9mIG9wdGlvbnM7IHRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzCisJYXJlIDxwYXRoc3BlYz4gbGltaXRlcnMuCisKKzxwYXRoc3BlYz4uLi46OgorCUlmIGdpdmVuLCBsaW1pdCB0aGUgc2VhcmNoIHRvIHBhdGhzIG1hdGNoaW5nIGF0IGxlYXN0IG9uZSBwYXR0ZXJuLgorCUJvdGggbGVhZGluZyBwYXRocyBtYXRjaCBhbmQgZ2xvYig3KSBwYXR0ZXJucyBhcmUgc3VwcG9ydGVkLgorKworRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgPHBhdGhzcGVjPiBzeW50YXgsIHNlZSB0aGUgJ3BhdGhzcGVjJyBlbnRyeQoraW4gbGlua2dpdDpnaXRnbG9zc2FyeVs3XS4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK2BnaXQgZ3JlcCAndGltZV90JyAtLSAnKi5bY2hdJ2A6OgorCUxvb2tzIGZvciBgdGltZV90YCBpbiBhbGwgdHJhY2tlZCAuYyBhbmQgLmggZmlsZXMgaW4gdGhlIHdvcmtpbmcKKwlkaXJlY3RvcnkgYW5kIGl0cyBzdWJkaXJlY3Rvcmllcy4KKworYGdpdCBncmVwIC1lICcjZGVmaW5lJyAtLWFuZCBcKCAtZSBNQVhfUEFUSCAtZSBQQVRIX01BWCBcKWA6OgorCUxvb2tzIGZvciBhIGxpbmUgdGhhdCBoYXMgYCNkZWZpbmVgIGFuZCBlaXRoZXIgYE1BWF9QQVRIYCBvcgorCWBQQVRIX01BWGAuCisKK2BnaXQgZ3JlcCAtLWFsbC1tYXRjaCAtZSBOT0RFIC1lIFVuZXhwZWN0ZWRgOjoKKwlMb29rcyBmb3IgYSBsaW5lIHRoYXQgaGFzIGBOT0RFYCBvciBgVW5leHBlY3RlZGAgaW4KKwlmaWxlcyB0aGF0IGhhdmUgbGluZXMgdGhhdCBtYXRjaCBib3RoLgorCitgZ2l0IGdyZXAgc29sdXRpb24gLS0gOl5Eb2N1bWVudGF0aW9uYDo6CisJTG9va3MgZm9yIGBzb2x1dGlvbmAsIGV4Y2x1ZGluZyBmaWxlcyBpbiBgRG9jdW1lbnRhdGlvbmAuCisKK05PVEVTIE9OIFRIUkVBRFMKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGAtLXRocmVhZHNgIG9wdGlvbiAoYW5kIHRoZSBncmVwLnRocmVhZHMgY29uZmlndXJhdGlvbikgd2lsbCBiZSBpZ25vcmVkIHdoZW4KK2AtLW9wZW4tZmlsZXMtaW4tcGFnZXJgIGlzIHVzZWQsIGZvcmNpbmcgYSBzaW5nbGUtdGhyZWFkZWQgZXhlY3V0aW9uLgorCitXaGVuIGdyZXBwaW5nIHRoZSBvYmplY3Qgc3RvcmUgKHdpdGggYC0tY2FjaGVkYCBvciBnaXZpbmcgdHJlZSBvYmplY3RzKSwgcnVubmluZword2l0aCBtdWx0aXBsZSB0aHJlYWRzIG1pZ2h0IHBlcmZvcm0gc2xvd2VyIHRoYW4gc2luZ2xlIHRocmVhZGVkIGlmIGAtLXRleHRjb252YAoraXMgZ2l2ZW4gYW5kIHRoZXJlJ3JlIHRvbyBtYW55IHRleHQgY29udmVyc2lvbnMuIFNvIGlmIHlvdSBleHBlcmllbmNlIGxvdworcGVyZm9ybWFuY2UgaW4gdGhpcyBjYXNlLCBpdCBtaWdodCBiZSBkZXNpcmFibGUgdG8gdXNlIGAtLXRocmVhZHM9MWAuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZ3VpLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWd1aS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkN2U5NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWd1aS50eHQKQEAgLTAsMCArMSwxMjEgQEAKK2dpdC1ndWkoMSkKKz09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWd1aSAtIEEgcG9ydGFibGUgZ3JhcGhpY2FsIGludGVyZmFjZSB0byBHaXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGd1aScgWzxjb21tYW5kPl0gW2FyZ3VtZW50c10KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitBIFRjbC9UayBiYXNlZCBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgdG8gR2l0LiAgJ2dpdCBndWknIGZvY3VzZXMKK29uIGFsbG93aW5nIHVzZXJzIHRvIG1ha2UgY2hhbmdlcyB0byB0aGVpciByZXBvc2l0b3J5IGJ5IG1ha2luZworbmV3IGNvbW1pdHMsIGFtZW5kaW5nIGV4aXN0aW5nIG9uZXMsIGNyZWF0aW5nIGJyYW5jaGVzLCBwZXJmb3JtaW5nCitsb2NhbCBtZXJnZXMsIGFuZCBmZXRjaGluZy9wdXNoaW5nIHRvIHJlbW90ZSByZXBvc2l0b3JpZXMuCisKK1VubGlrZSAnZ2l0aycsICdnaXQgZ3VpJyBmb2N1c2VzIG9uIGNvbW1pdCBnZW5lcmF0aW9uCithbmQgc2luZ2xlIGZpbGUgYW5ub3RhdGlvbiBhbmQgZG9lcyBub3Qgc2hvdyBwcm9qZWN0IGhpc3RvcnkuCitJdCBkb2VzIGhvd2V2ZXIgc3VwcGx5IG1lbnUgYWN0aW9ucyB0byBzdGFydCBhICdnaXRrJyBzZXNzaW9uIGZyb20KK3dpdGhpbiAnZ2l0IGd1aScuCisKKydnaXQgZ3VpJyBpcyBrbm93biB0byB3b3JrIG9uIGFsbCBwb3B1bGFyIFVOSVggc3lzdGVtcywgTWFjIE9TIFgsCithbmQgV2luZG93cyAodW5kZXIgYm90aCBDeWd3aW4gYW5kIE1TWVMpLiAgVG8gdGhlIGV4dGVudCBwb3NzaWJsZQorT1Mgc3BlY2lmaWMgdXNlciBpbnRlcmZhY2UgZ3VpZGVsaW5lcyBhcmUgZm9sbG93ZWQsIG1ha2luZyAnZ2l0IGd1aScKK2EgZmFpcmx5IG5hdGl2ZSBpbnRlcmZhY2UgZm9yIHVzZXJzLgorCitDT01NQU5EUworLS0tLS0tLS0KK2JsYW1lOjoKKwlTdGFydCBhIGJsYW1lIHZpZXdlciBvbiB0aGUgc3BlY2lmaWVkIGZpbGUgb24gdGhlIGdpdmVuCisJdmVyc2lvbiAob3Igd29ya2luZyBkaXJlY3RvcnkgaWYgbm90IHNwZWNpZmllZCkuCisKK2Jyb3dzZXI6OgorCVN0YXJ0IGEgdHJlZSBicm93c2VyIHNob3dpbmcgYWxsIGZpbGVzIGluIHRoZSBzcGVjaWZpZWQKKwljb21taXQuICBGaWxlcyBzZWxlY3RlZCB0aHJvdWdoIHRoZQorCWJyb3dzZXIgYXJlIG9wZW5lZCBpbiB0aGUgYmxhbWUgdmlld2VyLgorCitjaXRvb2w6OgorCVN0YXJ0ICdnaXQgZ3VpJyBhbmQgYXJyYW5nZSB0byBtYWtlIGV4YWN0bHkgb25lIGNvbW1pdCBiZWZvcmUKKwlleGl0aW5nIGFuZCByZXR1cm5pbmcgdG8gdGhlIHNoZWxsLiAgVGhlIGludGVyZmFjZSBpcyBsaW1pdGVkCisJdG8gb25seSBjb21taXQgYWN0aW9ucywgc2xpZ2h0bHkgcmVkdWNpbmcgdGhlIGFwcGxpY2F0aW9uJ3MKKwlzdGFydHVwIHRpbWUgYW5kIHNpbXBsaWZ5aW5nIHRoZSBtZW51YmFyLgorCit2ZXJzaW9uOjoKKwlEaXNwbGF5IHRoZSBjdXJyZW50bHkgcnVubmluZyB2ZXJzaW9uIG9mICdnaXQgZ3VpJy4KKworCitFeGFtcGxlcworLS0tLS0tLS0KK2BnaXQgZ3VpIGJsYW1lIE1ha2VmaWxlYDo6CisKKwlTaG93IHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSAnTWFrZWZpbGUnIGluIHRoZSBjdXJyZW50CisJd29ya2luZyBkaXJlY3RvcnksIGFuZCBwcm92aWRlIGFubm90YXRpb25zIGZvciBib3RoIHRoZQorCW9yaWdpbmFsIGF1dGhvciBvZiBlYWNoIGxpbmUsIGFuZCB3aG8gbW92ZWQgdGhlIGxpbmUgdG8gaXRzCisJY3VycmVudCBsb2NhdGlvbi4gIFRoZSB1bmNvbW1pdHRlZCBmaWxlIGlzIGFubm90YXRlZCwgYW5kCisJdW5jb21taXR0ZWQgY2hhbmdlcyAoaWYgYW55KSBhcmUgZXhwbGljaXRseSBhdHRyaWJ1dGVkIHRvCisJJ05vdCBZZXQgQ29tbWl0dGVkJy4KKworYGdpdCBndWkgYmxhbWUgdjAuOTkuOCBNYWtlZmlsZWA6OgorCisJU2hvdyB0aGUgY29udGVudHMgb2YgJ01ha2VmaWxlJyBpbiByZXZpc2lvbiAndjAuOTkuOCcKKwlhbmQgcHJvdmlkZSBhbm5vdGF0aW9ucyBmb3IgZWFjaCBsaW5lLiAgVW5saWtlIHRoZSBhYm92ZQorCWV4YW1wbGUgdGhlIGZpbGUgaXMgcmVhZCBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UgYW5kIG5vdAorCXRoZSB3b3JraW5nIGRpcmVjdG9yeS4KKworYGdpdCBndWkgYmxhbWUgLS1saW5lPTEwMCBNYWtlZmlsZWA6OgorCisJTG9hZHMgYW5ub3RhdGlvbnMgYXMgZGVzY3JpYmVkIGFib3ZlIGFuZCBhdXRvbWF0aWNhbGx5CisJc2Nyb2xscyB0aGUgdmlldyB0byBjZW50ZXIgb24gbGluZSAnMTAwJy4KKworYGdpdCBndWkgY2l0b29sYDo6CisKKwlNYWtlIG9uZSBjb21taXQgYW5kIHJldHVybiB0byB0aGUgc2hlbGwgd2hlbiBpdCBpcyBjb21wbGV0ZS4KKwlUaGlzIGNvbW1hbmQgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXQgY29kZSBpZiB0aGUgd2luZG93IHdhcworCWNsb3NlZCBpbiBhbnkgd2F5IG90aGVyIHRoYW4gYnkgbWFraW5nIGEgY29tbWl0LgorCitgZ2l0IGd1aSBjaXRvb2wgLS1hbWVuZGA6OgorCisJQXV0b21hdGljYWxseSBlbnRlciB0aGUgJ0FtZW5kIExhc3QgQ29tbWl0JyBtb2RlIG9mCisJdGhlIGludGVyZmFjZS4KKworYGdpdCBndWkgY2l0b29sIC0tbm9jb21taXRgOjoKKworCUJlaGF2ZSBhcyBub3JtYWwgY2l0b29sLCBidXQgaW5zdGVhZCBvZiBtYWtpbmcgYSBjb21taXQKKwlzaW1wbHkgdGVybWluYXRlIHdpdGggYSB6ZXJvIGV4aXQgY29kZS4gSXQgc3RpbGwgY2hlY2tzCisJdGhhdCB0aGUgaW5kZXggZG9lcyBub3QgY29udGFpbiBhbnkgdW5tZXJnZWQgZW50cmllcywgc28KKwl5b3UgY2FuIHVzZSBpdCBhcyBhIEdVSSB2ZXJzaW9uIG9mIGxpbmtnaXQ6Z2l0LW1lcmdldG9vbFsxXQorCitgZ2l0IGNpdG9vbGA6OgorCisJU2FtZSBhcyBgZ2l0IGd1aSBjaXRvb2xgIChhYm92ZSkuCisKK2BnaXQgZ3VpIGJyb3dzZXIgbWFpbnRgOjoKKworCVNob3cgYSBicm93c2VyIGZvciB0aGUgdHJlZSBvZiB0aGUgJ21haW50JyBicmFuY2guICBGaWxlcworCXNlbGVjdGVkIGluIHRoZSBicm93c2VyIGNhbiBiZSB2aWV3ZWQgd2l0aCB0aGUgaW50ZXJuYWwKKwlibGFtZSB2aWV3ZXIuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXRrWzFdOjoKKwlUaGUgR2l0IHJlcG9zaXRvcnkgYnJvd3Nlci4gIFNob3dzIGJyYW5jaGVzLCBjb21taXQgaGlzdG9yeQorCWFuZCBmaWxlIGRpZmZlcmVuY2VzLiAgZ2l0ayBpcyB0aGUgdXRpbGl0eSBzdGFydGVkIGJ5CisJJ2dpdCBndWknJ3MgUmVwb3NpdG9yeSBWaXN1YWxpemUgYWN0aW9ucy4KKworT3RoZXIKKy0tLS0tCisnZ2l0IGd1aScgaXMgYWN0dWFsbHkgbWFpbnRhaW5lZCBhcyBhbiBpbmRlcGVuZGVudCBwcm9qZWN0LCBidXQgc3RhYmxlCit2ZXJzaW9ucyBhcmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgR2l0IHN1aXRlIGZvciB0aGUgY29udmVuaWVuY2UKK29mIGVuZCB1c2Vycy4KKworVGhlIG9mZmljaWFsIHJlcG9zaXRvcnkgb2YgdGhlICdnaXQgZ3VpJyBwcm9qZWN0IGNhbiBiZSBmb3VuZCBhdDoKKworICBodHRwczovL2dpdGh1Yi5jb20vcHJhdGkwMTAwL2dpdC1ndWkuZ2l0LworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWhhc2gtb2JqZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWhhc2gtb2JqZWN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjllMmM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaGFzaC1vYmplY3QudHh0CkBAIC0wLDAgKzEsNjMgQEAKK2dpdC1oYXNoLW9iamVjdCgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1oYXNoLW9iamVjdCAtIENvbXB1dGUgb2JqZWN0IElEIGFuZCBvcHRpb25hbGx5IGNyZWF0ZXMgYSBibG9iIGZyb20gYSBmaWxlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGhhc2gtb2JqZWN0JyBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+fC0tbm8tZmlsdGVyc10gWy0tc3RkaW4gWy0tbGl0ZXJhbGx5XV0gWy0tXSA8ZmlsZT4uLi4KKydnaXQgaGFzaC1vYmplY3QnIFstdCA8dHlwZT5dIFstd10gLS1zdGRpbi1wYXRocyBbLS1uby1maWx0ZXJzXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0NvbXB1dGVzIHRoZSBvYmplY3QgSUQgdmFsdWUgZm9yIGFuIG9iamVjdCB3aXRoIHNwZWNpZmllZCB0eXBlCit3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgbmFtZWQgZmlsZSAod2hpY2ggY2FuIGJlIG91dHNpZGUgb2YgdGhlCit3b3JrIHRyZWUpLCBhbmQgb3B0aW9uYWxseSB3cml0ZXMgdGhlIHJlc3VsdGluZyBvYmplY3QgaW50byB0aGUKK29iamVjdCBkYXRhYmFzZS4gIFJlcG9ydHMgaXRzIG9iamVjdCBJRCB0byBpdHMgc3RhbmRhcmQgb3V0cHV0LgorV2hlbiA8dHlwZT4gaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gImJsb2IiLgorCitPUFRJT05TCistLS0tLS0tCisKKy10IDx0eXBlPjo6CisJU3BlY2lmeSB0aGUgdHlwZSAoZGVmYXVsdDogImJsb2IiKS4KKworLXc6OgorCUFjdHVhbGx5IHdyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlLgorCistLXN0ZGluOjoKKwlSZWFkIHRoZSBvYmplY3QgZnJvbSBzdGFuZGFyZCBpbnB1dCBpbnN0ZWFkIG9mIGZyb20gYSBmaWxlLgorCistLXN0ZGluLXBhdGhzOjoKKwlSZWFkIGZpbGUgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsIG9uZSBwZXIgbGluZSwgaW5zdGVhZAorCW9mIGZyb20gdGhlIGNvbW1hbmQtbGluZS4KKworLS1wYXRoOjoKKwlIYXNoIG9iamVjdCBhcyBpdCB3ZXJlIGxvY2F0ZWQgYXQgdGhlIGdpdmVuIHBhdGguIFRoZSBsb2NhdGlvbiBvZgorCWZpbGUgZG9lcyBub3QgZGlyZWN0bHkgaW5mbHVlbmNlIG9uIHRoZSBoYXNoIHZhbHVlLCBidXQgcGF0aCBpcworCXVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgR2l0IGZpbHRlcnMgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIG9iamVjdAorCWJlZm9yZSBpdCBjYW4gYmUgcGxhY2VkIHRvIHRoZSBvYmplY3QgZGF0YWJhc2UsIGFuZCwgYXMgcmVzdWx0IG9mCisJYXBwbHlpbmcgZmlsdGVycywgdGhlIGFjdHVhbCBibG9iIHB1dCBpbnRvIHRoZSBvYmplY3QgZGF0YWJhc2UgbWF5CisJZGlmZmVyIGZyb20gdGhlIGdpdmVuIGZpbGUuIFRoaXMgb3B0aW9uIGlzIG1haW5seSB1c2VmdWwgZm9yIGhhc2hpbmcKKwl0ZW1wb3JhcnkgZmlsZXMgbG9jYXRlZCBvdXRzaWRlIG9mIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBvciBmaWxlcworCXJlYWQgZnJvbSBzdGRpbi4KKworLS1uby1maWx0ZXJzOjoKKwlIYXNoIHRoZSBjb250ZW50cyBhcyBpcywgaWdub3JpbmcgYW55IGlucHV0IGZpbHRlciB0aGF0IHdvdWxkCisJaGF2ZSBiZWVuIGNob3NlbiBieSB0aGUgYXR0cmlidXRlcyBtZWNoYW5pc20sIGluY2x1ZGluZyB0aGUgZW5kLW9mLWxpbmUKKwljb252ZXJzaW9uLiBJZiB0aGUgZmlsZSBpcyByZWFkIGZyb20gc3RhbmRhcmQgaW5wdXQgdGhlbiB0aGlzCisJaXMgYWx3YXlzIGltcGxpZWQsIHVubGVzcyB0aGUgYC0tcGF0aGAgb3B0aW9uIGlzIGdpdmVuLgorCistLWxpdGVyYWxseTo6CisJQWxsb3cgYC0tc3RkaW5gIHRvIGhhc2ggYW55IGdhcmJhZ2UgaW50byBhIGxvb3NlIG9iamVjdCB3aGljaCBtaWdodCBub3QKKwlvdGhlcndpc2UgcGFzcyBzdGFuZGFyZCBvYmplY3QgcGFyc2luZyBvciBnaXQtZnNjayBjaGVja3MuIFVzZWZ1bCBmb3IKKwlzdHJlc3MtdGVzdGluZyBHaXQgaXRzZWxmIG9yIHJlcHJvZHVjaW5nIGNoYXJhY3RlcmlzdGljcyBvZiBjb3JydXB0IG9yCisJYm9ndXMgb2JqZWN0cyBlbmNvdW50ZXJlZCBpbiB0aGUgd2lsZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1oZWxwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWhlbHAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MWRiMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1oZWxwLnR4dApAQCAtMCwwICsxLDIwNCBAQAorZ2l0LWhlbHAoMSkKKz09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1oZWxwIC0gRGlzcGxheSBoZWxwIGluZm9ybWF0aW9uIGFib3V0IEdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgaGVscCcgWy1hfC0tYWxsIFstLVtuby1ddmVyYm9zZV1dIFstZ3wtLWd1aWRlXQorCSAgIFstaXwtLWluZm98LW18LS1tYW58LXd8LS13ZWJdIFtDT01NQU5EfEdVSURFXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworV2l0aCBubyBvcHRpb25zIGFuZCBubyBDT01NQU5EIG9yIEdVSURFIGdpdmVuLCB0aGUgc3lub3BzaXMgb2YgdGhlICdnaXQnCitjb21tYW5kIGFuZCBhIGxpc3Qgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBHaXQgY29tbWFuZHMgYXJlIHByaW50ZWQKK29uIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisKK0lmIHRoZSBvcHRpb24gYC0tYWxsYCBvciBgLWFgIGlzIGdpdmVuLCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIGFyZQorcHJpbnRlZCBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCitJZiB0aGUgb3B0aW9uIGAtLWd1aWRlYCBvciBgLWdgIGlzIGdpdmVuLCBhIGxpc3Qgb2YgdGhlIHVzZWZ1bAorR2l0IGd1aWRlcyBpcyBhbHNvIHByaW50ZWQgb24gdGhlIHN0YW5kYXJkIG91dHB1dC4KKworSWYgYSBjb21tYW5kLCBvciBhIGd1aWRlLCBpcyBnaXZlbiwgYSBtYW51YWwgcGFnZSBmb3IgdGhhdCBjb21tYW5kIG9yCitndWlkZSBpcyBicm91Z2h0IHVwLiBUaGUgJ21hbicgcHJvZ3JhbSBpcyB1c2VkIGJ5IGRlZmF1bHQgZm9yIHRoaXMKK3B1cnBvc2UsIGJ1dCB0aGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IG90aGVyIG9wdGlvbnMgb3IgY29uZmlndXJhdGlvbgordmFyaWFibGVzLgorCitJZiBhbiBhbGlhcyBpcyBnaXZlbiwgZ2l0IHNob3dzIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBhbGlhcyBvbgorc3RhbmRhcmQgb3V0cHV0LiBUbyBnZXQgdGhlIG1hbnVhbCBwYWdlIGZvciB0aGUgYWxpYXNlZCBjb21tYW5kLCB1c2UKK2BnaXQgQ09NTUFORCAtLWhlbHBgLgorCitOb3RlIHRoYXQgYGdpdCAtLWhlbHAgLi4uYCBpcyBpZGVudGljYWwgdG8gYGdpdCBoZWxwIC4uLmAgYmVjYXVzZSB0aGUKK2Zvcm1lciBpcyBpbnRlcm5hbGx5IGNvbnZlcnRlZCBpbnRvIHRoZSBsYXR0ZXIuCisKK1RvIGRpc3BsYXkgdGhlIGxpbmtnaXQ6Z2l0WzFdIG1hbiBwYWdlLCB1c2UgYGdpdCBoZWxwIGdpdGAuCisKK1RoaXMgcGFnZSBjYW4gYmUgZGlzcGxheWVkIHdpdGggJ2dpdCBoZWxwIGhlbHAnIG9yIGBnaXQgaGVscCAtLWhlbHBgCisKK09QVElPTlMKKy0tLS0tLS0KKy1hOjoKKy0tYWxsOjoKKwlQcmludHMgYWxsIHRoZSBhdmFpbGFibGUgY29tbWFuZHMgb24gdGhlIHN0YW5kYXJkIG91dHB1dC4gVGhpcworCW9wdGlvbiBvdmVycmlkZXMgYW55IGdpdmVuIGNvbW1hbmQgb3IgZ3VpZGUgbmFtZS4KKworLS12ZXJib3NlOjoKKwlXaGVuIHVzZWQgd2l0aCBgLS1hbGxgIHByaW50IGRlc2NyaXB0aW9uIGZvciBhbGwgcmVjb2duaXplZAorCWNvbW1hbmRzLiBUaGlzIGlzIHRoZSBkZWZhdWx0LgorCistYzo6CistLWNvbmZpZzo6CisJTGlzdCBhbGwgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiBUaGlzIGlzIGEgc2hvcnQKKwlzdW1tYXJ5IG9mIHRoZSBsaXN0IGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLWc6OgorLS1ndWlkZXM6OgorCVByaW50cyBhIGxpc3Qgb2YgdXNlZnVsIGd1aWRlcyBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LiBUaGlzCisJb3B0aW9uIG92ZXJyaWRlcyBhbnkgZ2l2ZW4gY29tbWFuZCBvciBndWlkZSBuYW1lLgorCistaTo6CistLWluZm86OgorCURpc3BsYXkgbWFudWFsIHBhZ2UgZm9yIHRoZSBjb21tYW5kIGluIHRoZSAnaW5mbycgZm9ybWF0LiBUaGUKKwknaW5mbycgcHJvZ3JhbSB3aWxsIGJlIHVzZWQgZm9yIHRoYXQgcHVycG9zZS4KKworLW06OgorLS1tYW46OgorCURpc3BsYXkgbWFudWFsIHBhZ2UgZm9yIHRoZSBjb21tYW5kIGluIHRoZSAnbWFuJyBmb3JtYXQuIFRoaXMKKwlvcHRpb24gbWF5IGJlIHVzZWQgdG8gb3ZlcnJpZGUgYSB2YWx1ZSBzZXQgaW4gdGhlCisJYGhlbHAuZm9ybWF0YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorKworQnkgZGVmYXVsdCB0aGUgJ21hbicgcHJvZ3JhbSB3aWxsIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgbWFudWFsIHBhZ2UsCitidXQgdGhlIGBtYW4udmlld2VyYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG1heSBiZSB1c2VkIHRvIGNob29zZQorb3RoZXIgZGlzcGxheSBwcm9ncmFtcyAoc2VlIGJlbG93KS4KKworLXc6OgorLS13ZWI6OgorCURpc3BsYXkgbWFudWFsIHBhZ2UgZm9yIHRoZSBjb21tYW5kIGluIHRoZSAnd2ViJyAoSFRNTCkKKwlmb3JtYXQuIEEgd2ViIGJyb3dzZXIgd2lsbCBiZSB1c2VkIGZvciB0aGF0IHB1cnBvc2UuCisrCitUaGUgd2ViIGJyb3dzZXIgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorYGhlbHAuYnJvd3NlcmAsIG9yIGB3ZWIuYnJvd3NlcmAgaWYgdGhlIGZvcm1lciBpcyBub3Qgc2V0LiBJZiBub25lIG9mCit0aGVzZSBjb25maWcgdmFyaWFibGVzIGlzIHNldCwgdGhlICdnaXQgd2Vie2xpdGRkfWJyb3dzZScgaGVscGVyIHNjcmlwdAorKGNhbGxlZCBieSAnZ2l0IGhlbHAnKSB3aWxsIHBpY2sgYSBzdWl0YWJsZSBkZWZhdWx0LiBTZWUKK2xpbmtnaXQ6Z2l0LXdlYntsaXRkZH1icm93c2VbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcy4KKworQ09ORklHVVJBVElPTiBWQVJJQUJMRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2hlbHAuZm9ybWF0Cit+fn5+fn5+fn5+fgorCitJZiBubyBjb21tYW5kLWxpbmUgb3B0aW9uIGlzIHBhc3NlZCwgdGhlIGBoZWxwLmZvcm1hdGAgY29uZmlndXJhdGlvbgordmFyaWFibGUgd2lsbCBiZSBjaGVja2VkLiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgc3VwcG9ydGVkIGZvciB0aGlzCit2YXJpYWJsZTsgdGhleSBtYWtlICdnaXQgaGVscCcgYmVoYXZlIGFzIHRoZWlyIGNvcnJlc3BvbmRpbmcgY29tbWFuZC0KK2xpbmUgb3B0aW9uOgorCisqICJtYW4iIGNvcnJlc3BvbmRzIHRvICctbXwtLW1hbicsCisqICJpbmZvIiBjb3JyZXNwb25kcyB0byAnLWl8LS1pbmZvJywKKyogIndlYiIgb3IgImh0bWwiIGNvcnJlc3BvbmQgdG8gJy13fC0td2ViJy4KKworaGVscC5icm93c2VyLCB3ZWIuYnJvd3NlciBhbmQgYnJvd3Nlci48dG9vbD4ucGF0aAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgYGhlbHAuYnJvd3NlcmAsIGB3ZWIuYnJvd3NlcmAgYW5kIGBicm93c2VyLjx0b29sPi5wYXRoYCB3aWxsIGFsc28KK2JlIGNoZWNrZWQgaWYgdGhlICd3ZWInIGZvcm1hdCBpcyBjaG9zZW4gKGVpdGhlciBieSBjb21tYW5kLWxpbmUKK29wdGlvbiBvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlKS4gU2VlICctd3wtLXdlYicgaW4gdGhlIE9QVElPTlMKK3NlY3Rpb24gYWJvdmUgYW5kIGxpbmtnaXQ6Z2l0LXdlYntsaXRkZH1icm93c2VbMV0uCisKK21hbi52aWV3ZXIKK35+fn5+fn5+fn4KKworVGhlIGBtYW4udmlld2VyYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHdpbGwgYmUgY2hlY2tlZCBpZiB0aGUgJ21hbicKK2Zvcm1hdCBpcyBjaG9zZW4uIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkOgorCisqICJtYW4iOiB1c2UgdGhlICdtYW4nIHByb2dyYW0gYXMgdXN1YWwsCisqICJ3b21hbiI6IHVzZSAnZW1hY3NjbGllbnQnIHRvIGxhdW5jaCB0aGUgIndvbWFuIiBtb2RlIGluIGVtYWNzCisgICh0aGlzIG9ubHkgd29ya3Mgc3RhcnRpbmcgd2l0aCBlbWFjc2NsaWVudCB2ZXJzaW9ucyAyMiksCisqICJrb25xdWVyb3IiOiB1c2UgJ2tmbWNsaWVudCcgdG8gb3BlbiB0aGUgbWFuIHBhZ2UgaW4gYSBuZXcga29ucXVlcm9yCisgIHRhYiAoc2VlICdOb3RlIGFib3V0IGtvbnF1ZXJvcicgYmVsb3cpLgorCitWYWx1ZXMgZm9yIG90aGVyIHRvb2xzIGNhbiBiZSB1c2VkIGlmIHRoZXJlIGlzIGEgY29ycmVzcG9uZGluZworYG1hbi48dG9vbD4uY21kYCBjb25maWd1cmF0aW9uIGVudHJ5IChzZWUgYmVsb3cpLgorCitNdWx0aXBsZSB2YWx1ZXMgbWF5IGJlIGdpdmVuIHRvIHRoZSBgbWFuLnZpZXdlcmAgY29uZmlndXJhdGlvbgordmFyaWFibGUuIFRoZWlyIGNvcnJlc3BvbmRpbmcgcHJvZ3JhbXMgd2lsbCBiZSB0cmllZCBpbiB0aGUgb3JkZXIKK2xpc3RlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorCitGb3IgZXhhbXBsZSwgdGhpcyBjb25maWd1cmF0aW9uOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlbbWFuXQorCQl2aWV3ZXIgPSBrb25xdWVyb3IKKwkJdmlld2VyID0gd29tYW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHRyeSB0byB1c2Uga29ucXVlcm9yIGZpcnN0LiBCdXQgdGhpcyBtYXkgZmFpbCAoZm9yIGV4YW1wbGUsIGlmCitESVNQTEFZIGlzIG5vdCBzZXQpIGFuZCBpbiB0aGF0IGNhc2UgZW1hY3MnIHdvbWFuIG1vZGUgd2lsbCBiZSB0cmllZC4KKworSWYgZXZlcnl0aGluZyBmYWlscywgb3IgaWYgbm8gdmlld2VyIGlzIGNvbmZpZ3VyZWQsIHRoZSB2aWV3ZXIgc3BlY2lmaWVkCitpbiB0aGUgYEdJVF9NQU5fVklFV0VSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIHRyaWVkLiAgSWYgdGhhdAorZmFpbHMgdG9vLCB0aGUgJ21hbicgcHJvZ3JhbSB3aWxsIGJlIHRyaWVkIGFueXdheS4KKworbWFuLjx0b29sPi5wYXRoCit+fn5+fn5+fn5+fn5+fn4KKworWW91IGNhbiBleHBsaWNpdGx5IHByb3ZpZGUgYSBmdWxsIHBhdGggdG8geW91ciBwcmVmZXJyZWQgbWFuIHZpZXdlciBieQorc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgbWFuLjx0b29sPi5wYXRoYC4gRm9yIGV4YW1wbGUsIHlvdQorY2FuIGNvbmZpZ3VyZSB0aGUgYWJzb2x1dGUgcGF0aCB0byBrb25xdWVyb3IgYnkgc2V0dGluZworJ21hbi5rb25xdWVyb3IucGF0aCcuIE90aGVyd2lzZSwgJ2dpdCBoZWxwJyBhc3N1bWVzIHRoZSB0b29sIGlzCithdmFpbGFibGUgaW4gUEFUSC4KKworbWFuLjx0b29sPi5jbWQKK35+fn5+fn5+fn5+fn5+CisKK1doZW4gdGhlIG1hbiB2aWV3ZXIsIHNwZWNpZmllZCBieSB0aGUgYG1hbi52aWV3ZXJgIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlcywgaXMgbm90IGFtb25nIHRoZSBzdXBwb3J0ZWQgb25lcywgdGhlbiB0aGUgY29ycmVzcG9uZGluZworYG1hbi48dG9vbD4uY21kYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHdpbGwgYmUgbG9va2VkIHVwLiBJZiB0aGlzCit2YXJpYWJsZSBleGlzdHMgdGhlbiB0aGUgc3BlY2lmaWVkIHRvb2wgd2lsbCBiZSB0cmVhdGVkIGFzIGEgY3VzdG9tCitjb21tYW5kIGFuZCBhIHNoZWxsIGV2YWwgd2lsbCBiZSB1c2VkIHRvIHJ1biB0aGUgY29tbWFuZCB3aXRoIHRoZSBtYW4KK3BhZ2UgcGFzc2VkIGFzIGFyZ3VtZW50cy4KKworTm90ZSBhYm91dCBrb25xdWVyb3IKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1doZW4gJ2tvbnF1ZXJvcicgaXMgc3BlY2lmaWVkIGluIHRoZSBgbWFuLnZpZXdlcmAgY29uZmlndXJhdGlvbgordmFyaWFibGUsIHdlIGxhdW5jaCAna2ZtY2xpZW50JyB0byB0cnkgdG8gb3BlbiB0aGUgbWFuIHBhZ2Ugb24gYW4KK2FscmVhZHkgb3BlbmVkIGtvbnF1ZXJvciBpbiBhIG5ldyB0YWIgaWYgcG9zc2libGUuCisKK0ZvciBjb25zaXN0ZW5jeSwgd2UgYWxzbyB0cnkgc3VjaCBhIHRyaWNrIGlmICdtYW4ua29ucXVlcm9yLnBhdGgnIGlzCitzZXQgdG8gc29tZXRoaW5nIGxpa2UgYEFfUEFUSF9UTy9rb25xdWVyb3JgLiBUaGF0IG1lYW5zIHdlIHdpbGwgdHJ5IHRvCitsYXVuY2ggYEFfUEFUSF9UTy9rZm1jbGllbnRgIGluc3RlYWQuCisKK0lmIHlvdSByZWFsbHkgd2FudCB0byB1c2UgJ2tvbnF1ZXJvcicsIHRoZW4geW91IGNhbiB1c2Ugc29tZXRoaW5nIGxpa2UKK3RoZSBmb2xsb3dpbmc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVttYW5dCisJCXZpZXdlciA9IGtvbnEKKworCVttYW4gImtvbnEiXQorCQljbWQgPSBBX1BBVEhfVE8va29ucXVlcm9yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSBhYm91dCBnaXQgY29uZmlnIC0tZ2xvYmFsCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworTm90ZSB0aGF0IGFsbCB0aGVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBzaG91bGQgcHJvYmFibHkgYmUgc2V0Cit1c2luZyB0aGUgYC0tZ2xvYmFsYCBmbGFnLCBmb3IgZXhhbXBsZSBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIGhlbHAuZm9ybWF0IHdlYgorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIHdlYi5icm93c2VyIGZpcmVmb3gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithcyB0aGV5IGFyZSBwcm9iYWJseSBtb3JlIHVzZXIgc3BlY2lmaWMgdGhhbiByZXBvc2l0b3J5IHNwZWNpZmljLgorU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtYmFja2VuZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWJhY2tlbmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ODk2NmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWJhY2tlbmQudHh0CkBAIC0wLDAgKzEsMjc3IEBACitnaXQtaHR0cC1iYWNrZW5kKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1odHRwLWJhY2tlbmQgLSBTZXJ2ZXIgc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBHaXQgb3ZlciBIVFRQCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBodHRwLWJhY2tlbmQnCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQSBzaW1wbGUgQ0dJIHByb2dyYW0gdG8gc2VydmUgdGhlIGNvbnRlbnRzIG9mIGEgR2l0IHJlcG9zaXRvcnkgdG8gR2l0CitjbGllbnRzIGFjY2Vzc2luZyB0aGUgcmVwb3NpdG9yeSBvdmVyIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIHByb3RvY29scy4KK1RoZSBwcm9ncmFtIHN1cHBvcnRzIGNsaWVudHMgZmV0Y2hpbmcgdXNpbmcgYm90aCB0aGUgc21hcnQgSFRUUCBwcm90b2NvbAorYW5kIHRoZSBiYWNrd2FyZHMtY29tcGF0aWJsZSBkdW1iIEhUVFAgcHJvdG9jb2wsIGFzIHdlbGwgYXMgY2xpZW50cworcHVzaGluZyB1c2luZyB0aGUgc21hcnQgSFRUUCBwcm90b2NvbC4KKworSXQgdmVyaWZpZXMgdGhhdCB0aGUgZGlyZWN0b3J5IGhhcyB0aGUgbWFnaWMgZmlsZQorImdpdC1kYWVtb24tZXhwb3J0LW9rIiwgYW5kIGl0IHdpbGwgcmVmdXNlIHRvIGV4cG9ydCBhbnkgR2l0IGRpcmVjdG9yeQordGhhdCBoYXNuJ3QgZXhwbGljaXRseSBiZWVuIG1hcmtlZCBmb3IgZXhwb3J0IHRoaXMgd2F5ICh1bmxlc3MgdGhlCitgR0lUX0hUVFBfRVhQT1JUX0FMTGAgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBpcyBzZXQpLgorCitCeSBkZWZhdWx0LCBvbmx5IHRoZSBgdXBsb2FkLXBhY2tgIHNlcnZpY2UgaXMgZW5hYmxlZCwgd2hpY2ggc2VydmVzCisnZ2l0IGZldGNoLXBhY2snIGFuZCAnZ2l0IGxzLXJlbW90ZScgY2xpZW50cywgd2hpY2ggYXJlIGludm9rZWQgZnJvbQorJ2dpdCBmZXRjaCcsICdnaXQgcHVsbCcsIGFuZCAnZ2l0IGNsb25lJy4gIElmIHRoZSBjbGllbnQgaXMgYXV0aGVudGljYXRlZCwKK3RoZSBgcmVjZWl2ZS1wYWNrYCBzZXJ2aWNlIGlzIGVuYWJsZWQsIHdoaWNoIHNlcnZlcyAnZ2l0IHNlbmQtcGFjaycKK2NsaWVudHMsIHdoaWNoIGlzIGludm9rZWQgZnJvbSAnZ2l0IHB1c2gnLgorCitTRVJWSUNFUworLS0tLS0tLS0KK1RoZXNlIHNlcnZpY2VzIGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIHVzaW5nIHRoZSBwZXItcmVwb3NpdG9yeQorY29uZmlndXJhdGlvbiBmaWxlOgorCitodHRwLmdldGFueWZpbGU6OgorCVRoaXMgc2VydmVzIEdpdCBjbGllbnRzIG9sZGVyIHRoYW4gdmVyc2lvbiAxLjYuNiB0aGF0IGFyZSB1bmFibGUgdG8gdXNlIHRoZQorCXVwbG9hZCBwYWNrIHNlcnZpY2UuICBXaGVuIGVuYWJsZWQsIGNsaWVudHMgYXJlIGFibGUgdG8gcmVhZAorCWFueSBmaWxlIHdpdGhpbiB0aGUgcmVwb3NpdG9yeSwgaW5jbHVkaW5nIG9iamVjdHMgdGhhdCBhcmUKKwlubyBsb25nZXIgcmVhY2hhYmxlIGZyb20gYSBicmFuY2ggYnV0IGFyZSBzdGlsbCBwcmVzZW50LgorCUl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGEgcmVwb3NpdG9yeSBjYW4gZGlzYWJsZSBpdAorCWJ5IHNldHRpbmcgdGhpcyBjb25maWd1cmF0aW9uIGl0ZW0gdG8gYGZhbHNlYC4KKworaHR0cC51cGxvYWRwYWNrOjoKKwlUaGlzIHNlcnZlcyAnZ2l0IGZldGNoLXBhY2snIGFuZCAnZ2l0IGxzLXJlbW90ZScgY2xpZW50cy4KKwlJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhIHJlcG9zaXRvcnkgY2FuIGRpc2FibGUgaXQKKwlieSBzZXR0aW5nIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtIHRvIGBmYWxzZWAuCisKK2h0dHAucmVjZWl2ZXBhY2s6OgorCVRoaXMgc2VydmVzICdnaXQgc2VuZC1wYWNrJyBjbGllbnRzLCBhbGxvd2luZyBwdXNoLiAgSXQgaXMKKwlkaXNhYmxlZCBieSBkZWZhdWx0IGZvciBhbm9ueW1vdXMgdXNlcnMsIGFuZCBlbmFibGVkIGJ5CisJZGVmYXVsdCBmb3IgdXNlcnMgYXV0aGVudGljYXRlZCBieSB0aGUgd2ViIHNlcnZlci4gIEl0IGNhbiBiZQorCWRpc2FibGVkIGJ5IHNldHRpbmcgdGhpcyBpdGVtIHRvIGBmYWxzZWAsIG9yIGVuYWJsZWQgZm9yIGFsbAorCXVzZXJzLCBpbmNsdWRpbmcgYW5vbnltb3VzIHVzZXJzLCBieSBzZXR0aW5nIGl0IHRvIGB0cnVlYC4KKworVVJMIFRSQU5TTEFUSU9OCistLS0tLS0tLS0tLS0tLS0KK1RvIGRldGVybWluZSB0aGUgbG9jYXRpb24gb2YgdGhlIHJlcG9zaXRvcnkgb24gZGlzaywgJ2dpdCBodHRwLWJhY2tlbmQnCitjb25jYXRlbmF0ZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBQQVRIX0lORk8sIHdoaWNoIGlzIHNldAorYXV0b21hdGljYWxseSBieSB0aGUgd2ViIHNlcnZlciwgYW5kIEdJVF9QUk9KRUNUX1JPT1QsIHdoaWNoIG11c3QgYmUgc2V0CittYW51YWxseSBpbiB0aGUgd2ViIHNlcnZlciBjb25maWd1cmF0aW9uLiAgSWYgR0lUX1BST0pFQ1RfUk9PVCBpcyBub3QKK3NldCwgJ2dpdCBodHRwLWJhY2tlbmQnIHJlYWRzIFBBVEhfVFJBTlNMQVRFRCwgd2hpY2ggaXMgYWxzbyBzZXQKK2F1dG9tYXRpY2FsbHkgYnkgdGhlIHdlYiBzZXJ2ZXIuCisKK0VYQU1QTEVTCistLS0tLS0tLQorQWxsIG9mIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgbWFwIGBodHRwOi8vJGhvc3RuYW1lL2dpdC9mb28vYmFyLmdpdGAKK3RvIGAvdmFyL3d3dy9naXQvZm9vL2Jhci5naXRgLgorCitBcGFjaGUgMi54OjoKKwlFbnN1cmUgbW9kX2NnaSwgbW9kX2FsaWFzLCBhbmQgbW9kX2VudiBhcmUgZW5hYmxlZCwgc2V0CisJR0lUX1BST0pFQ1RfUk9PVCAob3IgRG9jdW1lbnRSb290KSBhcHByb3ByaWF0ZWx5LCBhbmQKKwljcmVhdGUgYSBTY3JpcHRBbGlhcyB0byB0aGUgQ0dJOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2V0RW52IEdJVF9QUk9KRUNUX1JPT1QgL3Zhci93d3cvZ2l0CitTZXRFbnYgR0lUX0hUVFBfRVhQT1JUX0FMTAorU2NyaXB0QWxpYXMgL2dpdC8gL3Vzci9saWJleGVjL2dpdC1jb3JlL2dpdC1odHRwLWJhY2tlbmQvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUbyBlbmFibGUgYW5vbnltb3VzIHJlYWQgYWNjZXNzIGJ1dCBhdXRoZW50aWNhdGVkIHdyaXRlIGFjY2VzcywKK3JlcXVpcmUgYXV0aG9yaXphdGlvbiBmb3IgYm90aCB0aGUgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCAod2hpY2ggd2UKK2RldGVjdCBhcyBhIHB1c2ggdmlhIHRoZSBzZXJ2aWNlIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nKSwgYW5kIHRoZQorcmVjZWl2ZS1wYWNrIGludm9jYXRpb24gaXRzZWxmOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV3cml0ZUNvbmQgJXtRVUVSWV9TVFJJTkd9IHNlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBbT1JdCitSZXdyaXRlQ29uZCAle1JFUVVFU1RfVVJJfSAvZ2l0LXJlY2VpdmUtcGFjayQKK1Jld3JpdGVSdWxlIF4vZ2l0LyAtIFtFPUFVVEhSRVFVSVJFRDp5ZXNdCisKKzxMb2NhdGlvbk1hdGNoICJeL2dpdC8iPgorCU9yZGVyIERlbnksQWxsb3cKKwlEZW55IGZyb20gZW52PUFVVEhSRVFVSVJFRAorCisJQXV0aFR5cGUgQmFzaWMKKwlBdXRoTmFtZSAiR2l0IEFjY2VzcyIKKwlSZXF1aXJlIGdyb3VwIGNvbW1pdHRlcnMKKwlTYXRpc2Z5IEFueQorCS4uLgorPC9Mb2NhdGlvbk1hdGNoPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSWYgeW91IGRvIG5vdCBoYXZlIGBtb2RfcmV3cml0ZWAgYXZhaWxhYmxlIHRvIG1hdGNoIGFnYWluc3QgdGhlIHF1ZXJ5CitzdHJpbmcsIGl0IGlzIHN1ZmZpY2llbnQgdG8ganVzdCBwcm90ZWN0IGBnaXQtcmVjZWl2ZS1wYWNrYCBpdHNlbGYsCitsaWtlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPExvY2F0aW9uTWF0Y2ggIl4vZ2l0Ly4qL2dpdC1yZWNlaXZlLXBhY2skIj4KKwlBdXRoVHlwZSBCYXNpYworCUF1dGhOYW1lICJHaXQgQWNjZXNzIgorCVJlcXVpcmUgZ3JvdXAgY29tbWl0dGVycworCS4uLgorPC9Mb2NhdGlvbk1hdGNoPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSW4gdGhpcyBtb2RlLCB0aGUgc2VydmVyIHdpbGwgbm90IHJlcXVlc3QgYXV0aGVudGljYXRpb24gdW50aWwgdGhlCitjbGllbnQgYWN0dWFsbHkgc3RhcnRzIHRoZSBvYmplY3QgbmVnb3RpYXRpb24gcGhhc2Ugb2YgdGhlIHB1c2gsIHJhdGhlcgordGhhbiBkdXJpbmcgdGhlIGluaXRpYWwgY29udGFjdC4gIEZvciB0aGlzIHJlYXNvbiwgeW91IG11c3QgYWxzbyBlbmFibGUKK3RoZSBgaHR0cC5yZWNlaXZlcGFja2AgY29uZmlnIG9wdGlvbiBpbiBhbnkgcmVwb3NpdG9yaWVzIHRoYXQgc2hvdWxkCithY2NlcHQgYSBwdXNoLiBUaGUgZGVmYXVsdCBiZWhhdmlvciwgaWYgYGh0dHAucmVjZWl2ZXBhY2tgIGlzIG5vdCBzZXQsCitpcyB0byByZWplY3QgYW55IHB1c2hlcyBieSB1bmF1dGhlbnRpY2F0ZWQgdXNlcnM7IHRoZSBpbml0aWFsIHJlcXVlc3QKK3dpbGwgdGhlcmVmb3JlIHJlcG9ydCBgNDAzIEZvcmJpZGRlbmAgdG8gdGhlIGNsaWVudCwgd2l0aG91dCBldmVuIGdpdmluZworYW4gb3Bwb3J0dW5pdHkgZm9yIGF1dGhlbnRpY2F0aW9uLgorKworVG8gcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBmb3IgYm90aCByZWFkcyBhbmQgd3JpdGVzLCB1c2UgYSBMb2NhdGlvbgorZGlyZWN0aXZlIGFyb3VuZCB0aGUgcmVwb3NpdG9yeSwgb3Igb25lIG9mIGl0cyBwYXJlbnQgZGlyZWN0b3JpZXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8TG9jYXRpb24gL2dpdC9wcml2YXRlPgorCUF1dGhUeXBlIEJhc2ljCisJQXV0aE5hbWUgIlByaXZhdGUgR2l0IEFjY2VzcyIKKwlSZXF1aXJlIGdyb3VwIGNvbW1pdHRlcnMKKwkuLi4KKzwvTG9jYXRpb24+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUbyBzZXJ2ZSBnaXR3ZWIgYXQgdGhlIHNhbWUgdXJsLCB1c2UgYSBTY3JpcHRBbGlhc01hdGNoIHRvIG9ubHkKK3Rob3NlIFVSTHMgdGhhdCAnZ2l0IGh0dHAtYmFja2VuZCcgY2FuIGhhbmRsZSwgYW5kIGZvcndhcmQgdGhlCityZXN0IHRvIGdpdHdlYjoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NjcmlwdEFsaWFzTWF0Y2ggXAorCSIoP3gpXi9naXQvKC4qLyhIRUFEIHwgXAorCQkJaW5mby9yZWZzIHwgXAorCQkJb2JqZWN0cy8oaW5mby9bXi9dKyB8IFwKKwkJCQkgWzAtOWEtZl17Mn0vWzAtOWEtZl17Mzh9IHwgXAorCQkJCSBwYWNrL3BhY2stWzAtOWEtZl17NDB9XC4ocGFja3xpZHgpKSB8IFwKKwkJCWdpdC0odXBsb2FkfHJlY2VpdmUpLXBhY2spKSQiIFwKKwkvdXNyL2xpYmV4ZWMvZ2l0LWNvcmUvZ2l0LWh0dHAtYmFja2VuZC8kMQorCitTY3JpcHRBbGlhcyAvZ2l0LyAvdmFyL3d3dy9jZ2ktYmluL2dpdHdlYi5jZ2kvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUbyBzZXJ2ZSBtdWx0aXBsZSByZXBvc2l0b3JpZXMgZnJvbSBkaWZmZXJlbnQgbGlua2dpdDpnaXRuYW1lc3BhY2VzWzddIGluIGEKK3NpbmdsZSByZXBvc2l0b3J5OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2V0RW52SWYgUmVxdWVzdF9VUkkgIl4vZ2l0LyhbXi9dKikiIEdJVF9OQU1FU1BBQ0U9JDEKK1NjcmlwdEFsaWFzTWF0Y2ggXi9naXQvW14vXSooLiopIC91c3IvbGliZXhlYy9naXQtY29yZS9naXQtaHR0cC1iYWNrZW5kL3N0b3JhZ2UuZ2l0JDEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWNjZWxlcmF0ZWQgc3RhdGljIEFwYWNoZSAyLng6OgorCVNpbWlsYXIgdG8gdGhlIGFib3ZlLCBidXQgQXBhY2hlIGNhbiBiZSB1c2VkIHRvIHJldHVybiBzdGF0aWMKKwlmaWxlcyB0aGF0IGFyZSBzdG9yZWQgb24gZGlzay4gIE9uIG1hbnkgc3lzdGVtcyB0aGlzIG1heQorCWJlIG1vcmUgZWZmaWNpZW50IGFzIEFwYWNoZSBjYW4gYXNrIHRoZSBrZXJuZWwgdG8gY29weSB0aGUKKwlmaWxlIGNvbnRlbnRzIGZyb20gdGhlIGZpbGUgc3lzdGVtIGRpcmVjdGx5IHRvIHRoZSBuZXR3b3JrOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2V0RW52IEdJVF9QUk9KRUNUX1JPT1QgL3Zhci93d3cvZ2l0CisKK0FsaWFzTWF0Y2ggXi9naXQvKC4qL29iamVjdHMvWzAtOWEtZl17Mn0vWzAtOWEtZl17Mzh9KSQgICAgICAgICAgL3Zhci93d3cvZ2l0LyQxCitBbGlhc01hdGNoIF4vZ2l0LyguKi9vYmplY3RzL3BhY2svcGFjay1bMC05YS1mXXs0MH0uKHBhY2t8aWR4KSkkIC92YXIvd3d3L2dpdC8kMQorU2NyaXB0QWxpYXMgL2dpdC8gL3Vzci9saWJleGVjL2dpdC1jb3JlL2dpdC1odHRwLWJhY2tlbmQvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIGNhbiBiZSBjb21iaW5lZCB3aXRoIHRoZSBnaXR3ZWIgY29uZmlndXJhdGlvbjoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NldEVudiBHSVRfUFJPSkVDVF9ST09UIC92YXIvd3d3L2dpdAorCitBbGlhc01hdGNoIF4vZ2l0LyguKi9vYmplY3RzL1swLTlhLWZdezJ9L1swLTlhLWZdezM4fSkkICAgICAgICAgIC92YXIvd3d3L2dpdC8kMQorQWxpYXNNYXRjaCBeL2dpdC8oLiovb2JqZWN0cy9wYWNrL3BhY2stWzAtOWEtZl17NDB9LihwYWNrfGlkeCkpJCAvdmFyL3d3dy9naXQvJDEKK1NjcmlwdEFsaWFzTWF0Y2ggXAorCSIoP3gpXi9naXQvKC4qLyhIRUFEIHwgXAorCQkJaW5mby9yZWZzIHwgXAorCQkJb2JqZWN0cy9pbmZvL1teL10rIHwgXAorCQkJZ2l0LSh1cGxvYWR8cmVjZWl2ZSktcGFjaykpJCIgXAorCS91c3IvbGliZXhlYy9naXQtY29yZS9naXQtaHR0cC1iYWNrZW5kLyQxCitTY3JpcHRBbGlhcyAvZ2l0LyAvdmFyL3d3dy9jZ2ktYmluL2dpdHdlYi5jZ2kvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xpZ2h0dHBkOjoKKwlFbnN1cmUgdGhhdCBgbW9kX2NnaWAsIGBtb2RfYWxpYXNgLCBgbW9kX2F1dGhgLCBgbW9kX3NldGVudmAgYXJlCisJbG9hZGVkLCB0aGVuIHNldCBgR0lUX1BST0pFQ1RfUk9PVGAgYXBwcm9wcmlhdGVseSBhbmQgcmVkaXJlY3QKKwlhbGwgcmVxdWVzdHMgdG8gdGhlIENHSToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWFzLnVybCArPSAoICIvZ2l0IiA9PiAiL3Vzci9saWIvZ2l0LWNvcmUvZ2l0LWh0dHAtYmFja2VuZCIgKQorJEhUVFBbInVybCJdID1+ICJeL2dpdCIgeworCWNnaS5hc3NpZ24gPSAoIiIgPT4gIiIpCisJc2V0ZW52LmFkZC1lbnZpcm9ubWVudCA9ICgKKwkJIkdJVF9QUk9KRUNUX1JPT1QiID0+ICIvdmFyL3d3dy9naXQiLAorCQkiR0lUX0hUVFBfRVhQT1JUX0FMTCIgPT4gIiIKKwkpCit9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUbyBlbmFibGUgYW5vbnltb3VzIHJlYWQgYWNjZXNzIGJ1dCBhdXRoZW50aWNhdGVkIHdyaXRlIGFjY2VzczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyRIVFRQWyJxdWVyeXN0cmluZyJdID1+ICJzZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2siIHsKKwlpbmNsdWRlICJnaXQtYXV0aC5jb25mIgorfQorJEhUVFBbInVybCJdID1+ICJeL2dpdC8uKi9naXQtcmVjZWl2ZS1wYWNrJCIgeworCWluY2x1ZGUgImdpdC1hdXRoLmNvbmYiCit9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCit3aGVyZSBgZ2l0LWF1dGguY29uZmAgbG9va3Mgc29tZXRoaW5nIGxpa2U6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithdXRoLnJlcXVpcmUgPSAoCisJIi8iID0+ICgKKwkJIm1ldGhvZCIgPT4gImJhc2ljIiwKKwkJInJlYWxtIiA9PiAiR2l0IEFjY2VzcyIsCisJCSJyZXF1aXJlIiA9PiAidmFsaWQtdXNlciIKKwkgICAgICAgKQorKQorIyAuLi5hbmQgc2V0IHVwIGF1dGguYmFja2VuZCBoZXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUbyByZXF1aXJlIGF1dGhlbnRpY2F0aW9uIGZvciBib3RoIHJlYWRzIGFuZCB3cml0ZXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskSFRUUFsidXJsIl0gPX4gIl4vZ2l0L3ByaXZhdGUiIHsKKwlpbmNsdWRlICJnaXQtYXV0aC5jb25mIgorfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0VOVklST05NRU5UCistLS0tLS0tLS0tLQorJ2dpdCBodHRwLWJhY2tlbmQnIHJlbGllcyB1cG9uIHRoZSBgQ0dJYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2V0CitieSB0aGUgaW52b2tpbmcgd2ViIHNlcnZlciwgaW5jbHVkaW5nOgorCisqIFBBVEhfSU5GTyAoaWYgR0lUX1BST0pFQ1RfUk9PVCBpcyBzZXQsIG90aGVyd2lzZSBQQVRIX1RSQU5TTEFURUQpCisqIFJFTU9URV9VU0VSCisqIFJFTU9URV9BRERSCisqIENPTlRFTlRfVFlQRQorKiBRVUVSWV9TVFJJTkcKKyogUkVRVUVTVF9NRVRIT0QKKworVGhlIGBHSVRfSFRUUF9FWFBPUlRfQUxMYCBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIG1heSBiZSBwYXNzZWQgdG8KKydnaXQtaHR0cC1iYWNrZW5kJyB0byBieXBhc3MgdGhlIGNoZWNrIGZvciB0aGUgImdpdC1kYWVtb24tZXhwb3J0LW9rIgorZmlsZSBpbiBlYWNoIHJlcG9zaXRvcnkgYmVmb3JlIGFsbG93aW5nIGV4cG9ydCBvZiB0aGF0IHJlcG9zaXRvcnkuCisKK1RoZSBgR0lUX0hUVFBfTUFYX1JFUVVFU1RfQlVGRkVSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSAob3IgdGhlCitgaHR0cC5tYXhSZXF1ZXN0QnVmZmVyYCBjb25maWcgdmFyaWFibGUpIG1heSBiZSBzZXQgdG8gY2hhbmdlIHRoZQorbGFyZ2VzdCByZWYgbmVnb3RpYXRpb24gcmVxdWVzdCB0aGF0IGdpdCB3aWxsIGhhbmRsZSBkdXJpbmcgYSBmZXRjaDsgYW55CitmZXRjaCByZXF1aXJpbmcgYSBsYXJnZXIgYnVmZmVyIHdpbGwgbm90IHN1Y2NlZWQuICBUaGlzIHZhbHVlIHNob3VsZCBub3QKK25vcm1hbGx5IG5lZWQgdG8gYmUgY2hhbmdlZCwgYnV0IG1heSBiZSBoZWxwZnVsIGlmIHlvdSBhcmUgZmV0Y2hpbmcgZnJvbQorYSByZXBvc2l0b3J5IHdpdGggYW4gZXh0cmVtZWx5IGxhcmdlIG51bWJlciBvZiByZWZzLiAgVGhlIHZhbHVlIGNhbiBiZQorc3BlY2lmaWVkIHdpdGggYSB1bml0IChlLmcuLCBgMTAwTWAgZm9yIDEwMCBtZWdhYnl0ZXMpLiBUaGUgZGVmYXVsdCBpcworMTAgbWVnYWJ5dGVzLgorCitUaGUgYmFja2VuZCBwcm9jZXNzIHNldHMgR0lUX0NPTU1JVFRFUl9OQU1FIHRvICckUkVNT1RFX1VTRVInIGFuZAorR0lUX0NPTU1JVFRFUl9FTUFJTCB0byAnJFx7UkVNT1RFX1VTRVJ9QGh0dHAuJFx7UkVNT1RFX0FERFJcfScsCitlbnN1cmluZyB0aGF0IGFueSByZWZsb2dzIGNyZWF0ZWQgYnkgJ2dpdC1yZWNlaXZlLXBhY2snIGNvbnRhaW4gc29tZQoraWRlbnRpZnlpbmcgaW5mb3JtYXRpb24gb2YgdGhlIHJlbW90ZSB1c2VyIHdobyBwZXJmb3JtZWQgdGhlIHB1c2guCisKK0FsbCBgQ0dJYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSB0byBlYWNoIG9mIHRoZSBob29rcworaW52b2tlZCBieSB0aGUgJ2dpdC1yZWNlaXZlLXBhY2snLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtZmV0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1mZXRjaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY2YjA0MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtZmV0Y2gudHh0CkBAIC0wLDAgKzEsNDkgQEAKK2dpdC1odHRwLWZldGNoKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaHR0cC1mZXRjaCAtIERvd25sb2FkIGZyb20gYSByZW1vdGUgR2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgaHR0cC1mZXRjaCcgWy1jXSBbLXRdIFstYV0gWy1kXSBbLXZdIFstdyBmaWxlbmFtZV0gWy0tcmVjb3Zlcl0gWy0tc3RkaW5dIDxjb21taXQ+IDx1cmw+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorRG93bmxvYWRzIGEgcmVtb3RlIEdpdCByZXBvc2l0b3J5IHZpYSBIVFRQLgorCitUaGlzIGNvbW1hbmQgYWx3YXlzIGdldHMgYWxsIG9iamVjdHMuIEhpc3RvcmljYWxseSwgdGhlcmUgd2VyZSB0aHJlZSBvcHRpb25zCitgLWFgLCBgLWNgIGFuZCBgLXRgIGZvciBjaG9vc2luZyB3aGljaCBvYmplY3RzIHRvIGRvd25sb2FkLiBUaGV5IGFyZSBub3cKK3NpbGVudGx5IGlnbm9yZWQuCisKK09QVElPTlMKKy0tLS0tLS0KK2NvbW1pdC1pZDo6CisgICAgICAgIEVpdGhlciB0aGUgaGFzaCBvciB0aGUgZmlsZW5hbWUgdW5kZXIgW1VSTF0vcmVmcy8gdG8KKyAgICAgICAgcHVsbC4KKworLWEsIC1jLCAtdDo6CisJVGhlc2Ugb3B0aW9ucyBhcmUgaWdub3JlZCBmb3IgaGlzdG9yaWNhbCByZWFzb25zLgorLXY6OgorCVJlcG9ydCB3aGF0IGlzIGRvd25sb2FkZWQuCisKKy13IDxmaWxlbmFtZT46OgorICAgICAgICBXcml0ZXMgdGhlIGNvbW1pdC1pZCBpbnRvIHRoZSBmaWxlbmFtZSB1bmRlciAkR0lUX0RJUi9yZWZzLzxmaWxlbmFtZT4gb24KKyAgICAgICAgdGhlIGxvY2FsIGVuZCBhZnRlciB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuCisKKy0tc3RkaW46OgorCUluc3RlYWQgb2YgYSBjb21taXQgaWQgb24gdGhlIGNvbW1hbmQgbGluZSAod2hpY2ggaXMgbm90IGV4cGVjdGVkIGluIHRoaXMKKwljYXNlKSwgJ2dpdCBodHRwLWZldGNoJyBleHBlY3RzIGxpbmVzIG9uIHN0ZGluIGluIHRoZSBmb3JtYXQKKworCQk8Y29tbWl0LWlkPlsnXHQnPGZpbGVuYW1lLWFzLWluLS13Pl0KKworLS1yZWNvdmVyOjoKKwlWZXJpZnkgdGhhdCBldmVyeXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRhcmdldCBpcyBmZXRjaGVkLiAgVXNlZCBhZnRlcgorCWFuIGVhcmxpZXIgZmV0Y2ggaXMgaW50ZXJydXB0ZWQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1wdXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtcHVzaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEwM2E0ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtcHVzaC50eHQKQEAgLTAsMCArMSw5NyBAQAorZ2l0LWh0dHAtcHVzaCgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaHR0cC1wdXNoIC0gUHVzaCBvYmplY3RzIG92ZXIgSFRUUC9EQVYgdG8gYW5vdGhlciByZXBvc2l0b3J5CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGh0dHAtcHVzaCcgWy0tYWxsXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tdmVyYm9zZV0gPHVybD4gPHJlZj4gWzxyZWY+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1NlbmRzIG1pc3Npbmcgb2JqZWN0cyB0byByZW1vdGUgcmVwb3NpdG9yeSwgYW5kIHVwZGF0ZXMgdGhlCityZW1vdGUgYnJhbmNoLgorCisqTk9URSo6IFRoaXMgY29tbWFuZCBpcyB0ZW1wb3JhcmlseSBkaXNhYmxlZCBpZiB5b3VyIGxpYmN1cmwKK2lzIG9sZGVyIHRoYW4gNy4xNiwgYXMgdGhlIGNvbWJpbmF0aW9uIGhhcyBiZWVuIHJlcG9ydGVkCitub3QgdG8gd29yayBhbmQgc29tZXRpbWVzIGNvcnJ1cHRzIHJlcG9zaXRvcnkuCisKK09QVElPTlMKKy0tLS0tLS0KKy0tYWxsOjoKKwlEbyBub3QgYXNzdW1lIHRoYXQgdGhlIHJlbW90ZSByZXBvc2l0b3J5IGlzIGNvbXBsZXRlIGluIGl0cworCWN1cnJlbnQgc3RhdGUsIGFuZCB2ZXJpZnkgYWxsIG9iamVjdHMgaW4gdGhlIGVudGlyZSBsb2NhbAorCXJlZidzIGhpc3RvcnkgZXhpc3QgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LgorCistLWZvcmNlOjoKKwlVc3VhbGx5LCB0aGUgY29tbWFuZCByZWZ1c2VzIHRvIHVwZGF0ZSBhIHJlbW90ZSByZWYgdGhhdAorCWlzIG5vdCBhbiBhbmNlc3RvciBvZiB0aGUgbG9jYWwgcmVmIHVzZWQgdG8gb3ZlcndyaXRlIGl0LgorCVRoaXMgZmxhZyBkaXNhYmxlcyB0aGUgY2hlY2suICBXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdAorCXRoZSByZW1vdGUgcmVwb3NpdG9yeSBjYW4gbG9zZSBjb21taXRzOyB1c2UgaXQgd2l0aAorCWNhcmUuCisKKy0tZHJ5LXJ1bjo6CisJRG8gZXZlcnl0aGluZyBleGNlcHQgYWN0dWFsbHkgc2VuZCB0aGUgdXBkYXRlcy4KKworLS12ZXJib3NlOjoKKwlSZXBvcnQgdGhlIGxpc3Qgb2Ygb2JqZWN0cyBiZWluZyB3YWxrZWQgbG9jYWxseSBhbmQgdGhlCisJbGlzdCBvZiBvYmplY3RzIHN1Y2Nlc3NmdWxseSBzZW50IHRvIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4KKworLWQ6OgorLUQ6OgorCVJlbW92ZSA8cmVmPiBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LiAgVGhlIHNwZWNpZmllZCBicmFuY2gKKwljYW5ub3QgYmUgdGhlIHJlbW90ZSBIRUFELiAgSWYgLWQgaXMgc3BlY2lmaWVkIHRoZSBmb2xsb3dpbmcKKwlvdGhlciBjb25kaXRpb25zIG11c3QgYWxzbyBiZSBtZXQ6CisKKwktIFJlbW90ZSBIRUFEIG11c3QgcmVzb2x2ZSB0byBhbiBvYmplY3QgdGhhdCBleGlzdHMgbG9jYWxseQorCS0gU3BlY2lmaWVkIGJyYW5jaCByZXNvbHZlcyB0byBhbiBvYmplY3QgdGhhdCBleGlzdHMgbG9jYWxseQorCS0gU3BlY2lmaWVkIGJyYW5jaCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgcmVtb3RlIEhFQUQKKworPHJlZj4uLi46OgorCVRoZSByZW1vdGUgcmVmcyB0byB1cGRhdGUuCisKKworU1BFQ0lGWUlORyBUSEUgUkVGUworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBICc8cmVmPicgc3BlY2lmaWNhdGlvbiBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIHBhdHRlcm4sIG9yIGEgcGFpcgorb2Ygc3VjaCBwYXR0ZXJucyBzZXBhcmF0ZWQgYnkgYSBjb2xvbiAiOiIgKHRoaXMgbWVhbnMgdGhhdCBhIHJlZiBuYW1lCitjYW5ub3QgaGF2ZSBhIGNvbG9uIGluIGl0KS4gIEEgc2luZ2xlIHBhdHRlcm4gJzxuYW1lPicgaXMganVzdCBhCitzaG9ydGhhbmQgZm9yICc8bmFtZT46PG5hbWU+Jy4KKworRWFjaCBwYXR0ZXJuIHBhaXIgY29uc2lzdHMgb2YgdGhlIHNvdXJjZSBzaWRlIChiZWZvcmUgdGhlIGNvbG9uKQorYW5kIHRoZSBkZXN0aW5hdGlvbiBzaWRlIChhZnRlciB0aGUgY29sb24pLiAgVGhlIHJlZiB0byBiZQorcHVzaGVkIGlzIGRldGVybWluZWQgYnkgZmluZGluZyBhIG1hdGNoIHRoYXQgbWF0Y2hlcyB0aGUgc291cmNlCitzaWRlLCBhbmQgd2hlcmUgaXQgaXMgcHVzaGVkIGlzIGRldGVybWluZWQgYnkgdXNpbmcgdGhlCitkZXN0aW5hdGlvbiBzaWRlLgorCisgLSBJdCBpcyBhbiBlcnJvciBpZiA8c3JjPiBkb2VzIG5vdCBtYXRjaCBleGFjdGx5IG9uZSBvZiB0aGUKKyAgIGxvY2FsIHJlZnMuCisKKyAtIElmIDxkc3Q+IGRvZXMgbm90IG1hdGNoIGFueSByZW1vdGUgcmVmLCBlaXRoZXIKKworICAgKiBpdCBoYXMgdG8gc3RhcnQgd2l0aCAicmVmcy8iOyA8ZHN0PiBpcyB1c2VkIGFzIHRoZQorICAgICBkZXN0aW5hdGlvbiBsaXRlcmFsbHkgaW4gdGhpcyBjYXNlLgorCisgICAqIDxzcmM+ID09IDxkc3Q+IGFuZCB0aGUgcmVmIHRoYXQgbWF0Y2hlZCB0aGUgPHNyYz4gbXVzdCBub3QKKyAgICAgZXhpc3QgaW4gdGhlIHNldCBvZiByZW1vdGUgcmVmczsgdGhlIHJlZiBtYXRjaGVkIDxzcmM+CisgICAgIGxvY2FsbHkgaXMgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24uCisKK1dpdGhvdXQgYC0tZm9yY2VgLCB0aGUgPHNyYz4gcmVmIGlzIHN0b3JlZCBhdCB0aGUgcmVtb3RlIG9ubHkgaWYKKzxkc3Q+IGRvZXMgbm90IGV4aXN0LCBvciA8ZHN0PiBpcyBhIHByb3BlciBzdWJzZXQgKGkuZS4gYW4KK2FuY2VzdG9yKSBvZiA8c3JjPi4gIFRoaXMgY2hlY2ssIGtub3duIGFzICJmYXN0LWZvcndhcmQgY2hlY2siLAoraXMgcGVyZm9ybWVkIGluIG9yZGVyIHRvIGF2b2lkIGFjY2lkZW50YWxseSBvdmVyd3JpdGluZyB0aGUKK3JlbW90ZSByZWYgYW5kIGxvc2Ugb3RoZXIgcGVvcGxlcycgY29tbWl0cyBmcm9tIHRoZXJlLgorCitXaXRoIGAtLWZvcmNlYCwgdGhlIGZhc3QtZm9yd2FyZCBjaGVjayBpcyBkaXNhYmxlZCBmb3IgYWxsIHJlZnMuCisKK09wdGlvbmFsbHksIGEgPHJlZj4gcGFyYW1ldGVyIGNhbiBiZSBwcmVmaXhlZCB3aXRoIGEgcGx1cyAnKycgc2lnbgordG8gZGlzYWJsZSB0aGUgZmFzdC1mb3J3YXJkIGNoZWNrIG9ubHkgb24gdGhhdCByZWYuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaW1hcC1zZW5kLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWltYXAtc2VuZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjViNTNmYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWltYXAtc2VuZC50eHQKQEAgLTAsMCArMSwxNDAgQEAKK2dpdC1pbWFwLXNlbmQoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWltYXAtc2VuZCAtIFNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgZnJvbSBzdGRpbiB0byBhbiBJTUFQIGZvbGRlcgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBpbWFwLXNlbmQnIFstdl0gWy1xXSBbLS1bbm8tXWN1cmxdCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgdXBsb2FkcyBhIG1haWxib3ggZ2VuZXJhdGVkIHdpdGggJ2dpdCBmb3JtYXQtcGF0Y2gnCitpbnRvIGFuIElNQVAgZHJhZnRzIGZvbGRlci4gIFRoaXMgYWxsb3dzIHBhdGNoZXMgdG8gYmUgc2VudCBhcworb3RoZXIgZW1haWwgaXMgd2hlbiB1c2luZyBtYWlsIGNsaWVudHMgdGhhdCBjYW5ub3QgcmVhZCBtYWlsYm94CitmaWxlcyBkaXJlY3RseS4gVGhlIGNvbW1hbmQgYWxzbyB3b3JrcyB3aXRoIGFueSBnZW5lcmFsIG1haWxib3gKK2luIHdoaWNoIGVtYWlscyBoYXZlIHRoZSBmaWVsZHMgIkZyb20iLCAiRGF0ZSIsIGFuZCAiU3ViamVjdCIgaW4KK3RoYXQgb3JkZXIuCisKK1R5cGljYWwgdXNhZ2UgaXMgc29tZXRoaW5nIGxpa2U6CisKK2dpdCBmb3JtYXQtcGF0Y2ggLS1zaWdub2ZmIC0tc3Rkb3V0IC0tYXR0YWNoIG9yaWdpbiB8IGdpdCBpbWFwLXNlbmQKKworCitPUFRJT05TCistLS0tLS0tCisKKy12OjoKKy0tdmVyYm9zZTo6CisJQmUgdmVyYm9zZS4KKworLXE6OgorLS1xdWlldDo6CisJQmUgcXVpZXQuCisKKy0tY3VybDo6CisJVXNlIGxpYmN1cmwgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgSU1BUCBzZXJ2ZXIsIHVubGVzcyB0dW5uZWxpbmcKKwlpbnRvIGl0LiAgSWdub3JlZCBpZiBHaXQgd2FzIGJ1aWx0IHdpdGhvdXQgdGhlIFVTRV9DVVJMX0ZPUl9JTUFQX1NFTkQKKwlvcHRpb24gc2V0LgorCistLW5vLWN1cmw6OgorCVRhbGsgdG8gdGhlIElNQVAgc2VydmVyIHVzaW5nIGdpdCdzIG93biBJTUFQIHJvdXRpbmVzIGluc3RlYWQgb2YKKwl1c2luZyBsaWJjdXJsLiAgSWdub3JlZCBpZiBHaXQgd2FzIGJ1aWx0IHdpdGggdGhlIE5PX09QRU5TU0wgb3B0aW9uCisJc2V0LgorCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworVG8gdXNlIHRoZSB0b29sLCBpbWFwLmZvbGRlciBhbmQgZWl0aGVyIGltYXAudHVubmVsIG9yIGltYXAuaG9zdCBtdXN0IGJlIHNldAordG8gYXBwcm9wcmlhdGUgdmFsdWVzLgorCitWYXJpYWJsZXMKK35+fn5+fn5+fgorCitpbmNsdWRlOjpjb25maWcvaW1hcC50eHRbXQorCitFeGFtcGxlcworfn5+fn5+fn4KKworVXNpbmcgdHVubmVsIG1vZGU6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCitbaW1hcF0KKyAgICBmb2xkZXIgPSAiSU5CT1guRHJhZnRzIgorICAgIHR1bm5lbCA9ICJzc2ggLXEgLUMgdXNlckBleGFtcGxlLmNvbSAvdXNyL2Jpbi9pbWFwZCAuL01haWxkaXIgMj4gL2Rldi9udWxsIgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworVXNpbmcgZGlyZWN0IG1vZGU6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KK1tpbWFwXQorICAgIGZvbGRlciA9ICJJTkJPWC5EcmFmdHMiCisgICAgaG9zdCA9IGltYXA6Ly9pbWFwLmV4YW1wbGUuY29tCisgICAgdXNlciA9IGJvYgorICAgIHBhc3MgPSBwNHNzdzByZAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitVc2luZyBkaXJlY3QgbW9kZSB3aXRoIFNTTDoKKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorW2ltYXBdCisgICAgZm9sZGVyID0gIklOQk9YLkRyYWZ0cyIKKyAgICBob3N0ID0gaW1hcHM6Ly9pbWFwLmV4YW1wbGUuY29tCisgICAgdXNlciA9IGJvYgorICAgIHBhc3MgPSBwNHNzdzByZAorICAgIHBvcnQgPSAxMjMKKyAgICBzc2x2ZXJpZnkgPSBmYWxzZQorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorVG8gc3VibWl0IHBhdGNoZXMgdXNpbmcgR01haWwncyBJTUFQIGludGVyZmFjZSwgZmlyc3QsIGVkaXQgeW91ciB+Ly5naXRjb25maWcKK3RvIHNwZWNpZnkgeW91ciBhY2NvdW50IHNldHRpbmdzOgorCistLS0tLS0tLS0KK1tpbWFwXQorCWZvbGRlciA9ICJbR21haWxdL0RyYWZ0cyIKKwlob3N0ID0gaW1hcHM6Ly9pbWFwLmdtYWlsLmNvbQorCXVzZXIgPSB1c2VyQGdtYWlsLmNvbQorCXBvcnQgPSA5OTMKKwlzc2x2ZXJpZnkgPSBmYWxzZQorLS0tLS0tLS0tCisKK1lvdSBtaWdodCBuZWVkIHRvIGluc3RlYWQgdXNlOiBmb2xkZXIgPSAiW0dvb2dsZSBNYWlsXS9EcmFmdHMiIGlmIHlvdSBnZXQgYW4gZXJyb3IKK3RoYXQgdGhlICJGb2xkZXIgZG9lc24ndCBleGlzdCIuCisKK09uY2UgdGhlIGNvbW1pdHMgYXJlIHJlYWR5IHRvIGJlIHNlbnQsIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgJCBnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC1NIC0tc3Rkb3V0IG9yaWdpbi9tYXN0ZXIgfCBnaXQgaW1hcC1zZW5kCisKK0p1c3QgbWFrZSBzdXJlIHRvIGRpc2FibGUgbGluZSB3cmFwcGluZyBpbiB0aGUgZW1haWwgY2xpZW50IChHTWFpbCdzIHdlYgoraW50ZXJmYWNlIHdpbGwgd3JhcCBsaW5lcyBubyBtYXR0ZXIgd2hhdCwgc28geW91IG5lZWQgdG8gdXNlIGEgcmVhbAorSU1BUCBjbGllbnQpLgorCitDQVVUSU9OCistLS0tLS0tCitJdCBpcyBzdGlsbCB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBlbWFpbCBtZXNzYWdlCitzZW50IGJ5IHlvdXIgZW1haWwgcHJvZ3JhbSBtZWV0cyB0aGUgc3RhbmRhcmRzIG9mIHlvdXIgcHJvamVjdC4KK01hbnkgcHJvamVjdHMgZG8gbm90IGxpa2UgcGF0Y2hlcyB0byBiZSBhdHRhY2hlZC4gIFNvbWUgbWFpbAorYWdlbnRzIHdpbGwgdHJhbnNmb3JtIHBhdGNoZXMgKGUuZy4gd3JhcCBsaW5lcywgc2VuZCB0aGVtIGFzCitmb3JtYXQ9Zmxvd2VkKSBpbiB3YXlzIHRoYXQgbWFrZSB0aGVtIGZhaWwuICBZb3Ugd2lsbCBnZXQgYW5ncnkKK2ZsYW1lcyByaWRpY3VsaW5nIHlvdSBpZiB5b3UgZG9uJ3QgY2hlY2sgdGhpcy4KKworVGh1bmRlcmJpcmQgaW4gcGFydGljdWxhciBpcyBrbm93biB0byBiZSBwcm9ibGVtYXRpYy4gIFRodW5kZXJiaXJkCit1c2VycyBtYXkgd2lzaCB0byB2aXNpdCB0aGlzIHdlYiBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uOgorICBodHRwOi8va2IubW96aWxsYXppbmUub3JnL1BsYWluX3RleHRfZS1tYWlsXy1fVGh1bmRlcmJpcmQjQ29tcGxldGVseV9wbGFpbl9lbWFpbAorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSwgbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXSwgbWJveCg1KQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5kZXgtcGFjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDViNzU2MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0CkBAIC0wLDAgKzEsMTA4IEBACitnaXQtaW5kZXgtcGFjaygxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWluZGV4LXBhY2sgLSBCdWlsZCBwYWNrIGluZGV4IGZpbGUgZm9yIGFuIGV4aXN0aW5nIHBhY2tlZCBhcmNoaXZlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGluZGV4LXBhY2snIFstdl0gWy1vIDxpbmRleC1maWxlPl0gPHBhY2stZmlsZT4KKydnaXQgaW5kZXgtcGFjaycgLS1zdGRpbiBbLS1maXgtdGhpbl0gWy0ta2VlcF0gWy12XSBbLW8gPGluZGV4LWZpbGU+XQorICAgICAgICAgICAgICAgICBbPHBhY2stZmlsZT5dCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkcyBhIHBhY2tlZCBhcmNoaXZlICgucGFjaykgZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUsIGFuZAorYnVpbGRzIGEgcGFjayBpbmRleCBmaWxlICguaWR4KSBmb3IgaXQuICBUaGUgcGFja2VkIGFyY2hpdmUKK3RvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXggY2FuIHRoZW4gYmUgcGxhY2VkIGluIHRoZQorb2JqZWN0cy9wYWNrLyBkaXJlY3Rvcnkgb2YgYSBHaXQgcmVwb3NpdG9yeS4KKworCitPUFRJT05TCistLS0tLS0tCistdjo6CisJQmUgdmVyYm9zZSBhYm91dCB3aGF0IGlzIGdvaW5nIG9uLCBpbmNsdWRpbmcgcHJvZ3Jlc3Mgc3RhdHVzLgorCistbyA8aW5kZXgtZmlsZT46OgorCVdyaXRlIHRoZSBnZW5lcmF0ZWQgcGFjayBpbmRleCBpbnRvIHRoZSBzcGVjaWZpZWQKKwlmaWxlLiAgV2l0aG91dCB0aGlzIG9wdGlvbiB0aGUgbmFtZSBvZiBwYWNrIGluZGV4CisJZmlsZSBpcyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBuYW1lIG9mIHBhY2tlZCBhcmNoaXZlCisJZmlsZSBieSByZXBsYWNpbmcgLnBhY2sgd2l0aCAuaWR4IChhbmQgdGhlIHByb2dyYW0KKwlmYWlscyBpZiB0aGUgbmFtZSBvZiBwYWNrZWQgYXJjaGl2ZSBkb2VzIG5vdCBlbmQKKwl3aXRoIC5wYWNrKS4KKworLS1zdGRpbjo6CisJV2hlbiB0aGlzIGZsYWcgaXMgcHJvdmlkZWQsIHRoZSBwYWNrIGlzIHJlYWQgZnJvbSBzdGRpbgorCWluc3RlYWQgYW5kIGEgY29weSBpcyB0aGVuIHdyaXR0ZW4gdG8gPHBhY2stZmlsZT4uIElmCisJPHBhY2stZmlsZT4gaXMgbm90IHNwZWNpZmllZCwgdGhlIHBhY2sgaXMgd3JpdHRlbiB0bworCW9iamVjdHMvcGFjay8gZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IEdpdCByZXBvc2l0b3J5IHdpdGgKKwlhIGRlZmF1bHQgbmFtZSBkZXRlcm1pbmVkIGZyb20gdGhlIHBhY2sgY29udGVudC4gIElmCisJPHBhY2stZmlsZT4gaXMgbm90IHNwZWNpZmllZCBjb25zaWRlciB1c2luZyAtLWtlZXAgdG8KKwlwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiB0aGlzIHByb2Nlc3MgYW5kCisJJ2dpdCByZXBhY2snLgorCistLWZpeC10aGluOjoKKwlGaXggYSAidGhpbiIgcGFjayBwcm9kdWNlZCBieSBgZ2l0IHBhY2stb2JqZWN0cyAtLXRoaW5gIChzZWUKKwlsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0gZm9yIGRldGFpbHMpIGJ5IGFkZGluZyB0aGUKKwlleGNsdWRlZCBvYmplY3RzIHRoZSBkZWx0aWZpZWQgb2JqZWN0cyBhcmUgYmFzZWQgb24gdG8gdGhlCisJcGFjay4gVGhpcyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpbiBjb25qdW5jdGlvbiB3aXRoIC0tc3RkaW4uCisKKy0ta2VlcDo6CisJQmVmb3JlIG1vdmluZyB0aGUgaW5kZXggaW50byBpdHMgZmluYWwgZGVzdGluYXRpb24KKwljcmVhdGUgYW4gZW1wdHkgLmtlZXAgZmlsZSBmb3IgdGhlIGFzc29jaWF0ZWQgcGFjayBmaWxlLgorCVRoaXMgb3B0aW9uIGlzIHVzdWFsbHkgbmVjZXNzYXJ5IHdpdGggLS1zdGRpbiB0byBwcmV2ZW50IGEKKwlzaW11bHRhbmVvdXMgJ2dpdCByZXBhY2snIHByb2Nlc3MgZnJvbSBkZWxldGluZworCXRoZSBuZXdseSBjb25zdHJ1Y3RlZCBwYWNrIGFuZCBpbmRleCBiZWZvcmUgcmVmcyBjYW4gYmUKKwl1cGRhdGVkIHRvIHVzZSBvYmplY3RzIGNvbnRhaW5lZCBpbiB0aGUgcGFjay4KKworLS1rZWVwPTxtc2c+OjoKKwlMaWtlIC0ta2VlcCBjcmVhdGUgYSAua2VlcCBmaWxlIGJlZm9yZSBtb3ZpbmcgdGhlIGluZGV4IGludG8KKwlpdHMgZmluYWwgZGVzdGluYXRpb24sIGJ1dCByYXRoZXIgdGhhbiBjcmVhdGluZyBhbiBlbXB0eSBmaWxlCisJcGxhY2UgJzxtc2c+JyBmb2xsb3dlZCBieSBhbiBMRiBpbnRvIHRoZSAua2VlcCBmaWxlLiAgVGhlICc8bXNnPicKKwltZXNzYWdlIGNhbiBsYXRlciBiZSBzZWFyY2hlZCBmb3Igd2l0aGluIGFsbCAua2VlcCBmaWxlcyB0bworCWxvY2F0ZSBhbnkgd2hpY2ggaGF2ZSBvdXRsaXZlZCB0aGVpciB1c2VmdWxuZXNzLgorCistLWluZGV4LXZlcnNpb249PHZlcnNpb24+Wyw8b2Zmc2V0Pl06OgorCVRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSB0aGUgdGVzdCBzdWl0ZSBvbmx5LiBJdCBhbGxvd3MKKwl0byBmb3JjZSB0aGUgdmVyc2lvbiBmb3IgdGhlIGdlbmVyYXRlZCBwYWNrIGluZGV4LCBhbmQgdG8gZm9yY2UKKwk2NC1iaXQgaW5kZXggZW50cmllcyBvbiBvYmplY3RzIGxvY2F0ZWQgYWJvdmUgdGhlIGdpdmVuIG9mZnNldC4KKworLS1zdHJpY3Q6OgorCURpZSwgaWYgdGhlIHBhY2sgY29udGFpbnMgYnJva2VuIG9iamVjdHMgb3IgbGlua3MuCisKKy0tY2hlY2stc2VsZi1jb250YWluZWQtYW5kLWNvbm5lY3RlZDo6CisJRGllIGlmIHRoZSBwYWNrIGNvbnRhaW5zIGJyb2tlbiBsaW5rcy4gRm9yIGludGVybmFsIHVzZSBvbmx5LgorCistLWZzY2stb2JqZWN0czo6CisJRGllIGlmIHRoZSBwYWNrIGNvbnRhaW5zIGJyb2tlbiBvYmplY3RzLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisKKy0tdGhyZWFkcz08bj46OgorCVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdG8gc3Bhd24gd2hlbiByZXNvbHZpbmcKKwlkZWx0YXMuIFRoaXMgcmVxdWlyZXMgdGhhdCBpbmRleC1wYWNrIGJlIGNvbXBpbGVkIHdpdGgKKwlwdGhyZWFkcyBvdGhlcndpc2UgdGhpcyBvcHRpb24gaXMgaWdub3JlZCB3aXRoIGEgd2FybmluZy4KKwlUaGlzIGlzIG1lYW50IHRvIHJlZHVjZSBwYWNraW5nIHRpbWUgb24gbXVsdGlwcm9jZXNzb3IKKwltYWNoaW5lcy4gVGhlIHJlcXVpcmVkIGFtb3VudCBvZiBtZW1vcnkgZm9yIHRoZSBkZWx0YSBzZWFyY2gKKwl3aW5kb3cgaXMgaG93ZXZlciBtdWx0aXBsaWVkIGJ5IHRoZSBudW1iZXIgb2YgdGhyZWFkcy4KKwlTcGVjaWZ5aW5nIDAgd2lsbCBjYXVzZSBHaXQgdG8gYXV0by1kZXRlY3QgdGhlIG51bWJlciBvZiBDUFUncworCWFuZCB1c2UgbWF4aW11bSAzIHRocmVhZHMuCisKKy0tbWF4LWlucHV0LXNpemU9PHNpemU+OjoKKwlEaWUsIGlmIHRoZSBwYWNrIGlzIGxhcmdlciB0aGFuIDxzaXplPi4KKworTk9URVMKKy0tLS0tCisKK09uY2UgdGhlIGluZGV4IGhhcyBiZWVuIGNyZWF0ZWQsIHRoZSBsaXN0IG9mIG9iamVjdCBuYW1lcyBpcyBzb3J0ZWQKK2FuZCB0aGUgU0hBLTEgaGFzaCBvZiB0aGF0IGxpc3QgaXMgcHJpbnRlZCB0byBzdGRvdXQuIElmIC0tc3RkaW4gd2FzCithbHNvIHVzZWQgdGhlbiB0aGlzIGlzIHByZWZpeGVkIGJ5IGVpdGhlciAicGFja1x0Iiwgb3IgImtlZXBcdCIgaWYgYQorbmV3IC5rZWVwIGZpbGUgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLiBUaGlzIGlzIHVzZWZ1bCB0byByZW1vdmUgYQorLmtlZXAgZmlsZSB1c2VkIGFzIGEgbG9jayB0byBwcmV2ZW50IHRoZSByYWNlIHdpdGggJ2dpdCByZXBhY2snCittZW50aW9uZWQgYWJvdmUuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC1kYi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbml0LWRiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDhhNmNkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC1kYi50eHQKQEAgLTAsMCArMSwyMyBAQAorZ2l0LWluaXQtZGIoMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1pbml0LWRiIC0gQ3JlYXRlcyBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBpbml0LWRiJyBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGVfZGlyZWN0b3J5Pl0gWy0tc2VwYXJhdGUtZ2l0LWRpciA8Z2l0IGRpcj5dIFstLXNoYXJlZFs9PHBlcm1pc3Npb25zPl1dCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgYSBzeW5vbnltIGZvciBsaW5rZ2l0OmdpdC1pbml0WzFdLiAgUGxlYXNlIHJlZmVyIHRvIHRoZQorZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGNvbW1hbmQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbml0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGM2YWRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC50eHQKQEAgLTAsMCArMSwxNTkgQEAKK2dpdC1pbml0KDEpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaW5pdCAtIENyZWF0ZSBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeSBvciByZWluaXRpYWxpemUgYW4gZXhpc3Rpbmcgb25lCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGluaXQnIFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZV9kaXJlY3Rvcnk+XQorCSAgWy0tc2VwYXJhdGUtZ2l0LWRpciA8Z2l0IGRpcj5dIFstLW9iamVjdC1mb3JtYXQ9PGZvcm1hdF0KKwkgIFstLXNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFtkaXJlY3RvcnldCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgY29tbWFuZCBjcmVhdGVzIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IC0gYmFzaWNhbGx5IGEgYC5naXRgCitkaXJlY3Rvcnkgd2l0aCBzdWJkaXJlY3RvcmllcyBmb3IgYG9iamVjdHNgLCBgcmVmcy9oZWFkc2AsCitgcmVmcy90YWdzYCwgYW5kIHRlbXBsYXRlIGZpbGVzLiAgQW4gaW5pdGlhbCBgSEVBRGAgZmlsZSB0aGF0CityZWZlcmVuY2VzIHRoZSBIRUFEIG9mIHRoZSBtYXN0ZXIgYnJhbmNoIGlzIGFsc28gY3JlYXRlZC4KKworSWYgdGhlIGAkR0lUX0RJUmAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRoZW4gaXQgc3BlY2lmaWVzIGEgcGF0aAordG8gdXNlIGluc3RlYWQgb2YgYC4vLmdpdGAgZm9yIHRoZSBiYXNlIG9mIHRoZSByZXBvc2l0b3J5LgorCitJZiB0aGUgb2JqZWN0IHN0b3JhZ2UgZGlyZWN0b3J5IGlzIHNwZWNpZmllZCB2aWEgdGhlCitgJEdJVF9PQkpFQ1RfRElSRUNUT1JZYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGVuIHRoZSBzaGExIGRpcmVjdG9yaWVzCithcmUgY3JlYXRlZCB1bmRlcm5lYXRoIC0gb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IGAkR0lUX0RJUi9vYmplY3RzYAorZGlyZWN0b3J5IGlzIHVzZWQuCisKK1J1bm5pbmcgJ2dpdCBpbml0JyBpbiBhbiBleGlzdGluZyByZXBvc2l0b3J5IGlzIHNhZmUuIEl0IHdpbGwgbm90CitvdmVyd3JpdGUgdGhpbmdzIHRoYXQgYXJlIGFscmVhZHkgdGhlcmUuIFRoZSBwcmltYXJ5IHJlYXNvbiBmb3IKK3JlcnVubmluZyAnZ2l0IGluaXQnIGlzIHRvIHBpY2sgdXAgbmV3bHkgYWRkZWQgdGVtcGxhdGVzIChvciB0byBtb3ZlCit0aGUgcmVwb3NpdG9yeSB0byBhbm90aGVyIHBsYWNlIGlmIC0tc2VwYXJhdGUtZ2l0LWRpciBpcyBnaXZlbikuCisKK09QVElPTlMKKy0tLS0tLS0KKworLXE6OgorLS1xdWlldDo6CisKK09ubHkgcHJpbnQgZXJyb3IgYW5kIHdhcm5pbmcgbWVzc2FnZXM7IGFsbCBvdGhlciBvdXRwdXQgd2lsbCBiZSBzdXBwcmVzc2VkLgorCistLWJhcmU6OgorCitDcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkuIElmIGBHSVRfRElSYCBlbnZpcm9ubWVudCBpcyBub3Qgc2V0LCBpdCBpcyBzZXQgdG8gdGhlCitjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorCistLW9iamVjdC1mb3JtYXQ9PGZvcm1hdD46OgorCitTcGVjaWZ5IHRoZSBnaXZlbiBvYmplY3QgZm9ybWF0IChoYXNoIGFsZ29yaXRobSkgZm9yIHRoZSByZXBvc2l0b3J5LiAgVGhlIHZhbGlkCit2YWx1ZXMgYXJlICdzaGExJyBhbmQgKGlmIGVuYWJsZWQpICdzaGEyNTYnLiAgJ3NoYTEnIGlzIHRoZSBkZWZhdWx0LgorCistLXRlbXBsYXRlPTx0ZW1wbGF0ZV9kaXJlY3Rvcnk+OjoKKworU3BlY2lmeSB0aGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZC4gIChTZWUgdGhlICJURU1QTEFURQorRElSRUNUT1JZIiBzZWN0aW9uIGJlbG93LikKKworLS1zZXBhcmF0ZS1naXQtZGlyPTxnaXQgZGlyPjo6CisKK0luc3RlYWQgb2YgaW5pdGlhbGl6aW5nIHRoZSByZXBvc2l0b3J5IGFzIGEgZGlyZWN0b3J5IHRvIGVpdGhlciBgJEdJVF9ESVJgIG9yCitgLi8uZ2l0L2AsIGNyZWF0ZSBhIHRleHQgZmlsZSB0aGVyZSBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSBhY3R1YWwKK3JlcG9zaXRvcnkuICBUaGlzIGZpbGUgYWN0cyBhcyBmaWxlc3lzdGVtLWFnbm9zdGljIEdpdCBzeW1ib2xpYyBsaW5rIHRvIHRoZQorcmVwb3NpdG9yeS4KKysKK0lmIHRoaXMgaXMgcmVpbml0aWFsaXphdGlvbiwgdGhlIHJlcG9zaXRvcnkgd2lsbCBiZSBtb3ZlZCB0byB0aGUgc3BlY2lmaWVkIHBhdGguCisKKy0tc2hhcmVkWz0oZmFsc2V8dHJ1ZXx1bWFza3xncm91cHxhbGx8d29ybGR8ZXZlcnlib2R5fDB4eHgpXTo6CisKK1NwZWNpZnkgdGhhdCB0aGUgR2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2Vycy4gIFRoaXMKK2FsbG93cyB1c2VycyBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgZ3JvdXAgdG8gcHVzaCBpbnRvIHRoYXQKK3JlcG9zaXRvcnkuICBXaGVuIHNwZWNpZmllZCwgdGhlIGNvbmZpZyB2YXJpYWJsZSAiY29yZS5zaGFyZWRSZXBvc2l0b3J5IiBpcworc2V0IHNvIHRoYXQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHVuZGVyIGAkR0lUX0RJUmAgYXJlIGNyZWF0ZWQgd2l0aCB0aGUKK3JlcXVlc3RlZCBwZXJtaXNzaW9ucy4gIFdoZW4gbm90IHNwZWNpZmllZCwgR2l0IHdpbGwgdXNlIHBlcm1pc3Npb25zIHJlcG9ydGVkCitieSB1bWFzaygyKS4KKysKK1RoZSBvcHRpb24gY2FuIGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXMsIGRlZmF1bHRpbmcgdG8gJ2dyb3VwJyBpZiBubyB2YWx1ZQoraXMgZ2l2ZW46CisrCistLQorJ3VtYXNrJyAob3IgJ2ZhbHNlJyk6OgorCitVc2UgcGVybWlzc2lvbnMgcmVwb3J0ZWQgYnkgdW1hc2soMikuIFRoZSBkZWZhdWx0LCB3aGVuIGAtLXNoYXJlZGAgaXMgbm90CitzcGVjaWZpZWQuCisKKydncm91cCcgKG9yICd0cnVlJyk6OgorCitNYWtlIHRoZSByZXBvc2l0b3J5IGdyb3VwLXdyaXRhYmxlLCAoYW5kIGcrc3gsIHNpbmNlIHRoZSBnaXQgZ3JvdXAgbWF5IGJlIG5vdAordGhlIHByaW1hcnkgZ3JvdXAgb2YgYWxsIHVzZXJzKS4gVGhpcyBpcyB1c2VkIHRvIGxvb3NlbiB0aGUgcGVybWlzc2lvbnMgb2YgYW4KK290aGVyd2lzZSBzYWZlIHVtYXNrKDIpIHZhbHVlLiBOb3RlIHRoYXQgdGhlIHVtYXNrIHN0aWxsIGFwcGxpZXMgdG8gdGhlIG90aGVyCitwZXJtaXNzaW9uIGJpdHMgKGUuZy4gaWYgdW1hc2sgaXMgJzAwMjInLCB1c2luZyAnZ3JvdXAnIHdpbGwgbm90IHJlbW92ZSByZWFkCitwcml2aWxlZ2VzIGZyb20gb3RoZXIgKG5vbi1ncm91cCkgdXNlcnMpLiBTZWUgJzB4eHgnIGZvciBob3cgdG8gZXhhY3RseSBzcGVjaWZ5Cit0aGUgcmVwb3NpdG9yeSBwZXJtaXNzaW9ucy4KKworJ2FsbCcgKG9yICd3b3JsZCcgb3IgJ2V2ZXJ5Ym9keScpOjoKKworU2FtZSBhcyAnZ3JvdXAnLCBidXQgbWFrZSB0aGUgcmVwb3NpdG9yeSByZWFkYWJsZSBieSBhbGwgdXNlcnMuCisKKycweHh4Jzo6CisKKycweHh4JyBpcyBhbiBvY3RhbCBudW1iZXIgYW5kIGVhY2ggZmlsZSB3aWxsIGhhdmUgbW9kZSAnMHh4eCcuICcweHh4JyB3aWxsCitvdmVycmlkZSB1c2VycycgdW1hc2soMikgdmFsdWUgKGFuZCBub3Qgb25seSBsb29zZW4gcGVybWlzc2lvbnMgYXMgJ2dyb3VwJyBhbmQKKydhbGwnIGRvZXMpLiAnMDY0MCcgd2lsbCBjcmVhdGUgYSByZXBvc2l0b3J5IHdoaWNoIGlzIGdyb3VwLXJlYWRhYmxlLCBidXQgbm90Citncm91cC13cml0YWJsZSBvciBhY2Nlc3NpYmxlIHRvIG90aGVycy4gJzA2NjAnIHdpbGwgY3JlYXRlIGEgcmVwbyB0aGF0IGlzCityZWFkYWJsZSBhbmQgd3JpdGFibGUgdG8gdGhlIGN1cnJlbnQgdXNlciBhbmQgZ3JvdXAsIGJ1dCBpbmFjY2Vzc2libGUgdG8gb3RoZXJzLgorLS0KKworQnkgZGVmYXVsdCwgdGhlIGNvbmZpZ3VyYXRpb24gZmxhZyBgcmVjZWl2ZS5kZW55Tm9uRmFzdEZvcndhcmRzYCBpcyBlbmFibGVkCitpbiBzaGFyZWQgcmVwb3NpdG9yaWVzLCBzbyB0aGF0IHlvdSBjYW5ub3QgZm9yY2UgYSBub24gZmFzdC1mb3J3YXJkaW5nIHB1c2gKK2ludG8gaXQuCisKK0lmIHlvdSBwcm92aWRlIGEgJ2RpcmVjdG9yeScsIHRoZSBjb21tYW5kIGlzIHJ1biBpbnNpZGUgaXQuIElmIHRoaXMgZGlyZWN0b3J5Citkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLgorCitURU1QTEFURSBESVJFQ1RPUlkKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitGaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4gdGhlIHRlbXBsYXRlIGRpcmVjdG9yeSB3aG9zZSBuYW1lIGRvIG5vdCBzdGFydCB3aXRoIGEKK2RvdCB3aWxsIGJlIGNvcGllZCB0byB0aGUgYCRHSVRfRElSYCBhZnRlciBpdCBpcyBjcmVhdGVkLgorCitUaGUgdGVtcGxhdGUgZGlyZWN0b3J5IHdpbGwgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgKGluIG9yZGVyKToKKworIC0gdGhlIGFyZ3VtZW50IGdpdmVuIHdpdGggdGhlIGAtLXRlbXBsYXRlYCBvcHRpb247CisKKyAtIHRoZSBjb250ZW50cyBvZiB0aGUgYCRHSVRfVEVNUExBVEVfRElSYCBlbnZpcm9ubWVudCB2YXJpYWJsZTsKKworIC0gdGhlIGBpbml0LnRlbXBsYXRlRGlyYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlOyBvcgorCisgLSB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSBkaXJlY3Rvcnk6IGAvdXNyL3NoYXJlL2dpdC1jb3JlL3RlbXBsYXRlc2AuCisKK1RoZSBkZWZhdWx0IHRlbXBsYXRlIGRpcmVjdG9yeSBpbmNsdWRlcyBzb21lIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIHN1Z2dlc3RlZAorImV4Y2x1ZGUgcGF0dGVybnMiIChzZWUgbGlua2dpdDpnaXRpZ25vcmVbNV0pLCBhbmQgc2FtcGxlIGhvb2sgZmlsZXMuCisKK1RoZSBzYW1wbGUgaG9va3MgYXJlIGFsbCBkaXNhYmxlZCBieSBkZWZhdWx0LiBUbyBlbmFibGUgb25lIG9mIHRoZQorc2FtcGxlIGhvb2tzIHJlbmFtZSBpdCBieSByZW1vdmluZyBpdHMgYC5zYW1wbGVgIHN1ZmZpeC4KKworU2VlIGxpbmtnaXQ6Z2l0aG9va3NbNV0gZm9yIG1vcmUgZ2VuZXJhbCBpbmZvIG9uIGhvb2sgZXhlY3V0aW9uLgorCitFWEFNUExFUworLS0tLS0tLS0KKworU3RhcnQgYSBuZXcgR2l0IHJlcG9zaXRvcnkgZm9yIGFuIGV4aXN0aW5nIGNvZGUgYmFzZTo6CisrCistLS0tLS0tLS0tLS0tLS0tCiskIGNkIC9wYXRoL3RvL215L2NvZGViYXNlCiskIGdpdCBpbml0ICAgICAgPDE+CiskIGdpdCBhZGQgLiAgICAgPDI+CiskIGdpdCBjb21taXQgICAgPDM+CistLS0tLS0tLS0tLS0tLS0tCisrCis8MT4gQ3JlYXRlIGEgL3BhdGgvdG8vbXkvY29kZWJhc2UvLmdpdCBkaXJlY3RvcnkuCis8Mj4gQWRkIGFsbCBleGlzdGluZyBmaWxlcyB0byB0aGUgaW5kZXguCis8Mz4gUmVjb3JkIHRoZSBwcmlzdGluZSBzdGF0ZSBhcyB0aGUgZmlyc3QgY29tbWl0IGluIHRoZSBoaXN0b3J5LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluc3Rhd2ViLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWluc3Rhd2ViLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTRmZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW5zdGF3ZWIudHh0CkBAIC0wLDAgKzEsOTQgQEAKK2dpdC1pbnN0YXdlYigxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1pbnN0YXdlYiAtIEluc3RhbnRseSBicm93c2UgeW91ciB3b3JraW5nIHJlcG9zaXRvcnkgaW4gZ2l0d2ViCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBpbnN0YXdlYicgWy0tbG9jYWxdIFstLWh0dHBkPTxodHRwZD5dIFstLXBvcnQ9PHBvcnQ+XQorICAgICAgICAgICAgICAgWy0tYnJvd3Nlcj08YnJvd3Nlcj5dCisnZ2l0IGluc3Rhd2ViJyBbLS1zdGFydF0gWy0tc3RvcF0gWy0tcmVzdGFydF0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitBIHNpbXBsZSBzY3JpcHQgdG8gc2V0IHVwIGBnaXR3ZWJgIGFuZCBhIHdlYiBzZXJ2ZXIgZm9yIGJyb3dzaW5nIHRoZSBsb2NhbAorcmVwb3NpdG9yeS4KKworT1BUSU9OUworLS0tLS0tLQorCistbDo6CistLWxvY2FsOjoKKwlPbmx5IGJpbmQgdGhlIHdlYiBzZXJ2ZXIgdG8gdGhlIGxvY2FsIElQICgxMjcuMC4wLjEpLgorCistZDo6CistLWh0dHBkOjoKKwlUaGUgSFRUUCBkYWVtb24gY29tbWFuZC1saW5lIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4KKwlDb21tYW5kLWxpbmUgb3B0aW9ucyBtYXkgYmUgc3BlY2lmaWVkIGhlcmUsIGFuZCB0aGUKKwljb25maWd1cmF0aW9uIGZpbGUgd2lsbCBiZSBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZSBjb21tYW5kLWxpbmUuCisJQ3VycmVudGx5IGFwYWNoZTIsIGxpZ2h0dHBkLCBtb25nb29zZSwgcGxhY2t1cCwgcHl0aG9uIGFuZAorCXdlYnJpY2sgYXJlIHN1cHBvcnRlZC4KKwkoRGVmYXVsdDogbGlnaHR0cGQpCisKKy1tOjoKKy0tbW9kdWxlLXBhdGg6OgorCVRoZSBtb2R1bGUgcGF0aCAob25seSBuZWVkZWQgaWYgaHR0cGQgaXMgQXBhY2hlKS4KKwkoRGVmYXVsdDogL3Vzci9saWIvYXBhY2hlMi9tb2R1bGVzKQorCistcDo6CistLXBvcnQ6OgorCVRoZSBwb3J0IG51bWJlciB0byBiaW5kIHRoZSBodHRwZCB0by4gIChEZWZhdWx0OiAxMjM0KQorCistYjo6CistLWJyb3dzZXI6OgorCVRoZSB3ZWIgYnJvd3NlciB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHZpZXcgdGhlIGdpdHdlYgorCXBhZ2UuIFRoaXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlICdnaXQgd2Vie2xpdGRkfWJyb3dzZScgaGVscGVyCisJc2NyaXB0IGFsb25nIHdpdGggdGhlIFVSTCBvZiB0aGUgZ2l0d2ViIGluc3RhbmNlLiBTZWUKKwlsaW5rZ2l0OmdpdC13ZWJ7bGl0ZGR9YnJvd3NlWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMuIElmCisJdGhlIHNjcmlwdCBmYWlscywgdGhlIFVSTCB3aWxsIGJlIHByaW50ZWQgdG8gc3Rkb3V0LgorCitzdGFydDo6CistLXN0YXJ0OjoKKwlTdGFydCB0aGUgaHR0cGQgaW5zdGFuY2UgYW5kIGV4aXQuICBSZWdlbmVyYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMKKwlhcyBuZWNlc3NhcnkgZm9yIHNwYXduaW5nIGEgbmV3IGluc3RhbmNlLgorCitzdG9wOjoKKy0tc3RvcDo6CisJU3RvcCB0aGUgaHR0cGQgaW5zdGFuY2UgYW5kIGV4aXQuICBUaGlzIGRvZXMgbm90IGdlbmVyYXRlCisJYW55IG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBzcGF3bmluZyBhIG5ldyBpbnN0YW5jZSwKKwlub3IgZG9lcyBpdCBjbG9zZSB0aGUgYnJvd3Nlci4KKworcmVzdGFydDo6CistLXJlc3RhcnQ6OgorCVJlc3RhcnQgdGhlIGh0dHBkIGluc3RhbmNlIGFuZCBleGl0LiAgUmVnZW5lcmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzCisJYXMgbmVjZXNzYXJ5IGZvciBzcGF3bmluZyBhIG5ldyBpbnN0YW5jZS4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitZb3UgbWF5IHNwZWNpZnkgY29uZmlndXJhdGlvbiBpbiB5b3VyIC5naXQvY29uZmlnCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbaW5zdGF3ZWJdCisJbG9jYWwgPSB0cnVlCisJaHR0cGQgPSBhcGFjaGUyIC1mCisJcG9ydCA9IDQzMjEKKwlicm93c2VyID0ga29ucXVlcm9yCisJbW9kdWxlUGF0aCA9IC91c3IvbGliL2FwYWNoZTIvbW9kdWxlcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgaW5zdGF3ZWIuYnJvd3NlcmAgaXMgbm90IHNldCwKK2B3ZWIuYnJvd3NlcmAgd2lsbCBiZSB1c2VkIGluc3RlYWQgaWYgaXQgaXMgZGVmaW5lZC4gU2VlCitsaW5rZ2l0OmdpdC13ZWJ7bGl0ZGR9YnJvd3NlWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR3ZWJbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1pbnRlcnByZXQtdHJhaWxlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW50ZXJwcmV0LXRyYWlsZXJzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmVjNjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW50ZXJwcmV0LXRyYWlsZXJzLnR4dApAQCAtMCwwICsxLDM5MCBAQAorZ2l0LWludGVycHJldC10cmFpbGVycygxKQorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaW50ZXJwcmV0LXRyYWlsZXJzIC0gQWRkIG9yIHBhcnNlIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gaW4gY29tbWl0IG1lc3NhZ2VzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBpbnRlcnByZXQtdHJhaWxlcnMnIFs8b3B0aW9ucz5dIFsoLS10cmFpbGVyIDx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dIFs8ZmlsZT4uLi5dCisnZ2l0IGludGVycHJldC10cmFpbGVycycgWzxvcHRpb25zPl0gWy0tcGFyc2VdIFs8ZmlsZT4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorSGVscCBwYXJzaW5nIG9yIGFkZGluZyAndHJhaWxlcnMnIGxpbmVzLCB0aGF0IGxvb2sgc2ltaWxhciB0byBSRkMgODIyIGUtbWFpbAoraGVhZGVycywgYXQgdGhlIGVuZCBvZiB0aGUgb3RoZXJ3aXNlIGZyZWUtZm9ybSBwYXJ0IG9mIGEgY29tbWl0CittZXNzYWdlLgorCitUaGlzIGNvbW1hbmQgcmVhZHMgc29tZSBwYXRjaGVzIG9yIGNvbW1pdCBtZXNzYWdlcyBmcm9tIGVpdGhlciB0aGUKKzxmaWxlPiBhcmd1bWVudHMgb3IgdGhlIHN0YW5kYXJkIGlucHV0IGlmIG5vIDxmaWxlPiBpcyBzcGVjaWZpZWQuIElmCitgLS1wYXJzZWAgaXMgc3BlY2lmaWVkLCB0aGUgb3V0cHV0IGNvbnNpc3RzIG9mIHRoZSBwYXJzZWQgdHJhaWxlcnMuCisKK090aGVyd2lzZSwgdGhpcyBjb21tYW5kIGFwcGxpZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdXNpbmcgdGhlCitgLS10cmFpbGVyYCBvcHRpb24sIGlmIGFueSwgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIHBhcnQgb2YgZWFjaCBpbnB1dAorZmlsZS4gVGhlIHJlc3VsdCBpcyBlbWl0dGVkIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisKK1NvbWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgY29udHJvbCB0aGUgd2F5IHRoZSBgLS10cmFpbGVyYCBhcmd1bWVudHMKK2FyZSBhcHBsaWVkIHRvIGVhY2ggY29tbWl0IG1lc3NhZ2UgYW5kIHRoZSB3YXkgYW55IGV4aXN0aW5nIHRyYWlsZXIgaW4KK3RoZSBjb21taXQgbWVzc2FnZSBpcyBjaGFuZ2VkLiBUaGV5IGFsc28gbWFrZSBpdCBwb3NzaWJsZSB0bworYXV0b21hdGljYWxseSBhZGQgc29tZSB0cmFpbGVycy4KKworQnkgZGVmYXVsdCwgYSAnPHRva2VuPj08dmFsdWU+JyBvciAnPHRva2VuPjo8dmFsdWU+JyBhcmd1bWVudCBnaXZlbgordXNpbmcgYC0tdHJhaWxlcmAgd2lsbCBiZSBhcHBlbmRlZCBhZnRlciB0aGUgZXhpc3RpbmcgdHJhaWxlcnMgb25seSBpZgordGhlIGxhc3QgdHJhaWxlciBoYXMgYSBkaWZmZXJlbnQgKDx0b2tlbj4sIDx2YWx1ZT4pIHBhaXIgKG9yIGlmIHRoZXJlCitpcyBubyBleGlzdGluZyB0cmFpbGVyKS4gVGhlIDx0b2tlbj4gYW5kIDx2YWx1ZT4gcGFydHMgd2lsbCBiZSB0cmltbWVkCit0byByZW1vdmUgc3RhcnRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGFuZCB0aGUgcmVzdWx0aW5nIHRyaW1tZWQKKzx0b2tlbj4gYW5kIDx2YWx1ZT4gd2lsbCBhcHBlYXIgaW4gdGhlIG1lc3NhZ2UgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Rva2VuOiB2YWx1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbWVhbnMgdGhhdCB0aGUgdHJpbW1lZCA8dG9rZW4+IGFuZCA8dmFsdWU+IHdpbGwgYmUgc2VwYXJhdGVkIGJ5CitgJzogJ2AgKG9uZSBjb2xvbiBmb2xsb3dlZCBieSBvbmUgc3BhY2UpLgorCitCeSBkZWZhdWx0IHRoZSBuZXcgdHJhaWxlciB3aWxsIGFwcGVhciBhdCB0aGUgZW5kIG9mIGFsbCB0aGUgZXhpc3RpbmcKK3RyYWlsZXJzLiBJZiB0aGVyZSBpcyBubyBleGlzdGluZyB0cmFpbGVyLCB0aGUgbmV3IHRyYWlsZXIgd2lsbCBhcHBlYXIKK2FmdGVyIHRoZSBjb21taXQgbWVzc2FnZSBwYXJ0IG9mIHRoZSBvdXRwdXQsIGFuZCwgaWYgdGhlcmUgaXMgbm8gbGluZQord2l0aCBvbmx5IHNwYWNlcyBhdCB0aGUgZW5kIG9mIHRoZSBjb21taXQgbWVzc2FnZSBwYXJ0LCBvbmUgYmxhbmsgbGluZQord2lsbCBiZSBhZGRlZCBiZWZvcmUgdGhlIG5ldyB0cmFpbGVyLgorCitFeGlzdGluZyB0cmFpbGVycyBhcmUgZXh0cmFjdGVkIGZyb20gdGhlIGlucHV0IG1lc3NhZ2UgYnkgbG9va2luZyBmb3IKK2EgZ3JvdXAgb2Ygb25lIG9yIG1vcmUgbGluZXMgdGhhdCAoaSkgaXMgYWxsIHRyYWlsZXJzLCBvciAoaWkpIGNvbnRhaW5zIGF0CitsZWFzdCBvbmUgR2l0LWdlbmVyYXRlZCBvciB1c2VyLWNvbmZpZ3VyZWQgdHJhaWxlciBhbmQgY29uc2lzdHMgb2YgYXQKK2xlYXN0IDI1JSB0cmFpbGVycy4KK1RoZSBncm91cCBtdXN0IGJlIHByZWNlZGVkIGJ5IG9uZSBvciBtb3JlIGVtcHR5IChvciB3aGl0ZXNwYWNlLW9ubHkpIGxpbmVzLgorVGhlIGdyb3VwIG11c3QgZWl0aGVyIGJlIGF0IHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2Ugb3IgYmUgdGhlIGxhc3QKK25vbi13aGl0ZXNwYWNlIGxpbmVzIGJlZm9yZSBhIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAnLS0tJyAoZm9sbG93ZWQgYnkgYQorc3BhY2Ugb3IgdGhlIGVuZCBvZiB0aGUgbGluZSkuIFN1Y2ggdGhyZWUgbWludXMgc2lnbnMgc3RhcnQgdGhlIHBhdGNoCitwYXJ0IG9mIHRoZSBtZXNzYWdlLiBTZWUgYWxzbyBgLS1uby1kaXZpZGVyYCBiZWxvdy4KKworV2hlbiByZWFkaW5nIHRyYWlsZXJzLCB0aGVyZSBjYW4gYmUgd2hpdGVzcGFjZXMgYWZ0ZXIgdGhlCit0b2tlbiwgdGhlIHNlcGFyYXRvciBhbmQgdGhlIHZhbHVlLiBUaGVyZSBjYW4gYWxzbyBiZSB3aGl0ZXNwYWNlcworaW5zaWRlIHRoZSB0b2tlbiBhbmQgdGhlIHZhbHVlLiBUaGUgdmFsdWUgbWF5IGJlIHNwbGl0IG92ZXIgbXVsdGlwbGUgbGluZXMgd2l0aAorZWFjaCBzdWJzZXF1ZW50IGxpbmUgc3RhcnRpbmcgd2l0aCB3aGl0ZXNwYWNlLCBsaWtlIHRoZSAiZm9sZGluZyIgaW4gUkZDIDgyMi4KKworTm90ZSB0aGF0ICd0cmFpbGVycycgZG8gbm90IGZvbGxvdyBhbmQgYXJlIG5vdCBpbnRlbmRlZCB0byBmb2xsb3cgbWFueQorcnVsZXMgZm9yIFJGQyA4MjIgaGVhZGVycy4gRm9yIGV4YW1wbGUgdGhleSBkbyBub3QgZm9sbG93Cit0aGUgZW5jb2RpbmcgcnVsZXMgYW5kIHByb2JhYmx5IG1hbnkgb3RoZXIgcnVsZXMuCisKK09QVElPTlMKKy0tLS0tLS0KKy0taW4tcGxhY2U6OgorCUVkaXQgdGhlIGZpbGVzIGluIHBsYWNlLgorCistLXRyaW0tZW1wdHk6OgorCUlmIHRoZSA8dmFsdWU+IHBhcnQgb2YgYW55IHRyYWlsZXIgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlLAorCXRoZSB3aG9sZSB0cmFpbGVyIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSByZXN1bHRpbmcgbWVzc2FnZS4KKwlUaGlzIGFwcGxpZXMgdG8gZXhpc3RpbmcgdHJhaWxlcnMgYXMgd2VsbCBhcyBuZXcgdHJhaWxlcnMuCisKKy0tdHJhaWxlciA8dG9rZW4+Wyg9fDopPHZhbHVlPl06OgorCVNwZWNpZnkgYSAoPHRva2VuPiwgPHZhbHVlPikgcGFpciB0aGF0IHNob3VsZCBiZSBhcHBsaWVkIGFzIGEKKwl0cmFpbGVyIHRvIHRoZSBpbnB1dCBtZXNzYWdlcy4gU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzCisJY29tbWFuZC4KKworLS13aGVyZSA8cGxhY2VtZW50Pjo6CistLW5vLXdoZXJlOjoKKwlTcGVjaWZ5IHdoZXJlIGFsbCBuZXcgdHJhaWxlcnMgd2lsbCBiZSBhZGRlZC4gIEEgc2V0dGluZworCXByb3ZpZGVkIHdpdGggJy0td2hlcmUnIG92ZXJyaWRlcyBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKwlhbmQgYXBwbGllcyB0byBhbGwgJy0tdHJhaWxlcicgb3B0aW9ucyB1bnRpbCB0aGUgbmV4dCBvY2N1cnJlbmNlIG9mCisJJy0td2hlcmUnIG9yICctLW5vLXdoZXJlJy4gUG9zc2libGUgdmFsdWVzIGFyZSBgYWZ0ZXJgLCBgYmVmb3JlYCwKKwlgZW5kYCBvciBgc3RhcnRgLgorCistLWlmLWV4aXN0cyA8YWN0aW9uPjo6CistLW5vLWlmLWV4aXN0czo6CisJU3BlY2lmeSB3aGF0IGFjdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCB3aGVuIHRoZXJlIGlzIGFscmVhZHkgYXQKKwlsZWFzdCBvbmUgdHJhaWxlciB3aXRoIHRoZSBzYW1lIDx0b2tlbj4gaW4gdGhlIG1lc3NhZ2UuICBBIHNldHRpbmcKKwlwcm92aWRlZCB3aXRoICctLWlmLWV4aXN0cycgb3ZlcnJpZGVzIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCWFuZCBhcHBsaWVzIHRvIGFsbCAnLS10cmFpbGVyJyBvcHRpb25zIHVudGlsIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YKKwknLS1pZi1leGlzdHMnIG9yICctLW5vLWlmLWV4aXN0cycuIFBvc3NpYmxlIGFjdGlvbnMgYXJlIGBhZGRJZkRpZmZlcmVudGAsCisJYGFkZElmRGlmZmVyZW50TmVpZ2hib3JgLCBgYWRkYCwgYHJlcGxhY2VgIGFuZCBgZG9Ob3RoaW5nYC4KKworLS1pZi1taXNzaW5nIDxhY3Rpb24+OjoKKy0tbm8taWYtbWlzc2luZzo6CisJU3BlY2lmeSB3aGF0IGFjdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCB3aGVuIHRoZXJlIGlzIG5vIG90aGVyCisJdHJhaWxlciB3aXRoIHRoZSBzYW1lIDx0b2tlbj4gaW4gdGhlIG1lc3NhZ2UuICBBIHNldHRpbmcKKwlwcm92aWRlZCB3aXRoICctLWlmLW1pc3NpbmcnIG92ZXJyaWRlcyBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKwlhbmQgYXBwbGllcyB0byBhbGwgJy0tdHJhaWxlcicgb3B0aW9ucyB1bnRpbCB0aGUgbmV4dCBvY2N1cnJlbmNlIG9mCisJJy0taWYtbWlzc2luZycgb3IgJy0tbm8taWYtbWlzc2luZycuIFBvc3NpYmxlIGFjdGlvbnMgYXJlIGBkb05vdGhpbmdgCisJb3IgYGFkZGAuCisKKy0tb25seS10cmFpbGVyczo6CisJT3V0cHV0IG9ubHkgdGhlIHRyYWlsZXJzLCBub3QgYW55IG90aGVyIHBhcnRzIG9mIHRoZSBpbnB1dC4KKworLS1vbmx5LWlucHV0OjoKKwlPdXRwdXQgb25seSB0cmFpbGVycyB0aGF0IGV4aXN0IGluIHRoZSBpbnB1dDsgZG8gbm90IGFkZCBhbnkKKwlmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgYnkgZm9sbG93aW5nIGNvbmZpZ3VyZWQgYHRyYWlsZXIuKmAKKwlydWxlcy4KKworLS11bmZvbGQ6OgorCVJlbW92ZSBhbnkgd2hpdGVzcGFjZS1jb250aW51YXRpb24gaW4gdHJhaWxlcnMsIHNvIHRoYXQgZWFjaAorCXRyYWlsZXIgYXBwZWFycyBvbiBhIGxpbmUgYnkgaXRzZWxmIHdpdGggaXRzIGZ1bGwgY29udGVudC4KKworLS1wYXJzZTo6CisJQSBjb252ZW5pZW5jZSBhbGlhcyBmb3IgYC0tb25seS10cmFpbGVycyAtLW9ubHktaW5wdXQKKwktLXVuZm9sZGAuCisKKy0tbm8tZGl2aWRlcjo6CisJRG8gbm90IHRyZWF0IGAtLS1gIGFzIHRoZSBlbmQgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLiBVc2UgdGhpcworCXdoZW4geW91IGtub3cgeW91ciBpbnB1dCBjb250YWlucyBqdXN0IHRoZSBjb21taXQgbWVzc2FnZSBpdHNlbGYKKwkoYW5kIG5vdCBhbiBlbWFpbCBvciB0aGUgb3V0cHV0IG9mIGBnaXQgZm9ybWF0LXBhdGNoYCkuCisKK0NPTkZJR1VSQVRJT04gVkFSSUFCTEVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0cmFpbGVyLnNlcGFyYXRvcnM6OgorCVRoaXMgb3B0aW9uIHRlbGxzIHdoaWNoIGNoYXJhY3RlcnMgYXJlIHJlY29nbml6ZWQgYXMgdHJhaWxlcgorCXNlcGFyYXRvcnMuIEJ5IGRlZmF1bHQgb25seSAnOicgaXMgcmVjb2duaXplZCBhcyBhIHRyYWlsZXIKKwlzZXBhcmF0b3IsIGV4Y2VwdCB0aGF0ICc9JyBpcyBhbHdheXMgYWNjZXB0ZWQgb24gdGhlIGNvbW1hbmQKKwlsaW5lIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgZ2l0IGNvbW1hbmRzLgorKworVGhlIGZpcnN0IGNoYXJhY3RlciBnaXZlbiBieSB0aGlzIG9wdGlvbiB3aWxsIGJlIHRoZSBkZWZhdWx0IGNoYXJhY3RlcgordXNlZCB3aGVuIGFub3RoZXIgc2VwYXJhdG9yIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZyBmb3IgdGhpcwordHJhaWxlci4KKysKK0ZvciBleGFtcGxlLCBpZiB0aGUgdmFsdWUgZm9yIHRoaXMgb3B0aW9uIGlzICIlPSQiLCB0aGVuIG9ubHkgbGluZXMKK3VzaW5nIHRoZSBmb3JtYXQgJzx0b2tlbj48c2VwPjx2YWx1ZT4nIHdpdGggPHNlcD4gY29udGFpbmluZyAnJScsICc9Jworb3IgJyQnIGFuZCB0aGVuIHNwYWNlcyB3aWxsIGJlIGNvbnNpZGVyZWQgdHJhaWxlcnMuIEFuZCAnJScgd2lsbCBiZQordGhlIGRlZmF1bHQgc2VwYXJhdG9yIHVzZWQsIHNvIGJ5IGRlZmF1bHQgdHJhaWxlcnMgd2lsbCBhcHBlYXIgbGlrZToKKyc8dG9rZW4+JSA8dmFsdWU+JyAob25lIHBlcmNlbnQgc2lnbiBhbmQgb25lIHNwYWNlIHdpbGwgYXBwZWFyIGJldHdlZW4KK3RoZSB0b2tlbiBhbmQgdGhlIHZhbHVlKS4KKwordHJhaWxlci53aGVyZTo6CisJVGhpcyBvcHRpb24gdGVsbHMgd2hlcmUgYSBuZXcgdHJhaWxlciB3aWxsIGJlIGFkZGVkLgorKworVGhpcyBjYW4gYmUgYGVuZGAsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCBgc3RhcnRgLCBgYWZ0ZXJgIG9yIGBiZWZvcmVgLgorKworSWYgaXQgaXMgYGVuZGAsIHRoZW4gZWFjaCBuZXcgdHJhaWxlciB3aWxsIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZQorZXhpc3RpbmcgdHJhaWxlcnMuCisrCitJZiBpdCBpcyBgc3RhcnRgLCB0aGVuIGVhY2ggbmV3IHRyYWlsZXIgd2lsbCBhcHBlYXIgYXQgdGhlIHN0YXJ0LAoraW5zdGVhZCBvZiB0aGUgZW5kLCBvZiB0aGUgZXhpc3RpbmcgdHJhaWxlcnMuCisrCitJZiBpdCBpcyBgYWZ0ZXJgLCB0aGVuIGVhY2ggbmV3IHRyYWlsZXIgd2lsbCBhcHBlYXIganVzdCBhZnRlciB0aGUKK2xhc3QgdHJhaWxlciB3aXRoIHRoZSBzYW1lIDx0b2tlbj4uCisrCitJZiBpdCBpcyBgYmVmb3JlYCwgdGhlbiBlYWNoIG5ldyB0cmFpbGVyIHdpbGwgYXBwZWFyIGp1c3QgYmVmb3JlIHRoZQorZmlyc3QgdHJhaWxlciB3aXRoIHRoZSBzYW1lIDx0b2tlbj4uCisKK3RyYWlsZXIuaWZleGlzdHM6OgorCVRoaXMgb3B0aW9uIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNob29zZSB3aGF0IGFjdGlvbiB3aWxsIGJlCisJcGVyZm9ybWVkIHdoZW4gdGhlcmUgaXMgYWxyZWFkeSBhdCBsZWFzdCBvbmUgdHJhaWxlciB3aXRoIHRoZQorCXNhbWUgPHRva2VuPiBpbiB0aGUgbWVzc2FnZS4KKysKK1RoZSB2YWxpZCB2YWx1ZXMgZm9yIHRoaXMgb3B0aW9uIGFyZTogYGFkZElmRGlmZmVyZW50TmVpZ2hib3JgICh0aGlzCitpcyB0aGUgZGVmYXVsdCksIGBhZGRJZkRpZmZlcmVudGAsIGBhZGRgLCBgcmVwbGFjZWAgb3IgYGRvTm90aGluZ2AuCisrCitXaXRoIGBhZGRJZkRpZmZlcmVudE5laWdoYm9yYCwgYSBuZXcgdHJhaWxlciB3aWxsIGJlIGFkZGVkIG9ubHkgaWYgbm8KK3RyYWlsZXIgd2l0aCB0aGUgc2FtZSAoPHRva2VuPiwgPHZhbHVlPikgcGFpciBpcyBhYm92ZSBvciBiZWxvdyB0aGUgbGluZQord2hlcmUgdGhlIG5ldyB0cmFpbGVyIHdpbGwgYmUgYWRkZWQuCisrCitXaXRoIGBhZGRJZkRpZmZlcmVudGAsIGEgbmV3IHRyYWlsZXIgd2lsbCBiZSBhZGRlZCBvbmx5IGlmIG5vIHRyYWlsZXIKK3dpdGggdGhlIHNhbWUgKDx0b2tlbj4sIDx2YWx1ZT4pIHBhaXIgaXMgYWxyZWFkeSBpbiB0aGUgbWVzc2FnZS4KKysKK1dpdGggYGFkZGAsIGEgbmV3IHRyYWlsZXIgd2lsbCBiZSBhZGRlZCwgZXZlbiBpZiBzb21lIHRyYWlsZXJzIHdpdGgKK3RoZSBzYW1lICg8dG9rZW4+LCA8dmFsdWU+KSBwYWlyIGFyZSBhbHJlYWR5IGluIHRoZSBtZXNzYWdlLgorKworV2l0aCBgcmVwbGFjZWAsIGFuIGV4aXN0aW5nIHRyYWlsZXIgd2l0aCB0aGUgc2FtZSA8dG9rZW4+IHdpbGwgYmUKK2RlbGV0ZWQgYW5kIHRoZSBuZXcgdHJhaWxlciB3aWxsIGJlIGFkZGVkLiBUaGUgZGVsZXRlZCB0cmFpbGVyIHdpbGwgYmUKK3RoZSBjbG9zZXN0IG9uZSAod2l0aCB0aGUgc2FtZSA8dG9rZW4+KSB0byB0aGUgcGxhY2Ugd2hlcmUgdGhlIG5ldyBvbmUKK3dpbGwgYmUgYWRkZWQuCisrCitXaXRoIGBkb05vdGhpbmdgLCBub3RoaW5nIHdpbGwgYmUgZG9uZTsgdGhhdCBpcyBubyBuZXcgdHJhaWxlciB3aWxsIGJlCithZGRlZCBpZiB0aGVyZSBpcyBhbHJlYWR5IG9uZSB3aXRoIHRoZSBzYW1lIDx0b2tlbj4gaW4gdGhlIG1lc3NhZ2UuCisKK3RyYWlsZXIuaWZtaXNzaW5nOjoKKwlUaGlzIG9wdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSB0byBjaG9vc2Ugd2hhdCBhY3Rpb24gd2lsbCBiZQorCXBlcmZvcm1lZCB3aGVuIHRoZXJlIGlzIG5vdCB5ZXQgYW55IHRyYWlsZXIgd2l0aCB0aGUgc2FtZQorCTx0b2tlbj4gaW4gdGhlIG1lc3NhZ2UuCisrCitUaGUgdmFsaWQgdmFsdWVzIGZvciB0aGlzIG9wdGlvbiBhcmU6IGBhZGRgICh0aGlzIGlzIHRoZSBkZWZhdWx0KSBhbmQKK2Bkb05vdGhpbmdgLgorKworV2l0aCBgYWRkYCwgYSBuZXcgdHJhaWxlciB3aWxsIGJlIGFkZGVkLgorKworV2l0aCBgZG9Ob3RoaW5nYCwgbm90aGluZyB3aWxsIGJlIGRvbmUuCisKK3RyYWlsZXIuPHRva2VuPi5rZXk6OgorCVRoaXMgYGtleWAgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgPHRva2VuPiBpbiB0aGUgdHJhaWxlci4gQXQKKwl0aGUgZW5kIG9mIHRoaXMga2V5LCBhIHNlcGFyYXRvciBjYW4gYXBwZWFyIGFuZCB0aGVuIHNvbWUKKwlzcGFjZSBjaGFyYWN0ZXJzLiBCeSBkZWZhdWx0IHRoZSBvbmx5IHZhbGlkIHNlcGFyYXRvciBpcyAnOicsCisJYnV0IHRoaXMgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGB0cmFpbGVyLnNlcGFyYXRvcnNgIGNvbmZpZworCXZhcmlhYmxlLgorKworSWYgdGhlcmUgaXMgYSBzZXBhcmF0b3IsIHRoZW4gdGhlIGtleSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiBib3RoIHRoZQorPHRva2VuPiBhbmQgdGhlIGRlZmF1bHQgc2VwYXJhdG9yIHdoZW4gYWRkaW5nIHRoZSB0cmFpbGVyLgorCit0cmFpbGVyLjx0b2tlbj4ud2hlcmU6OgorCVRoaXMgb3B0aW9uIHRha2VzIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGUgJ3RyYWlsZXIud2hlcmUnCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZSBhbmQgaXQgb3ZlcnJpZGVzIHdoYXQgaXMgc3BlY2lmaWVkIGJ5CisJdGhhdCBvcHRpb24gZm9yIHRyYWlsZXJzIHdpdGggdGhlIHNwZWNpZmllZCA8dG9rZW4+LgorCit0cmFpbGVyLjx0b2tlbj4uaWZleGlzdHM6OgorCVRoaXMgb3B0aW9uIHRha2VzIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGUgJ3RyYWlsZXIuaWZleGlzdHMnCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZSBhbmQgaXQgb3ZlcnJpZGVzIHdoYXQgaXMgc3BlY2lmaWVkIGJ5CisJdGhhdCBvcHRpb24gZm9yIHRyYWlsZXJzIHdpdGggdGhlIHNwZWNpZmllZCA8dG9rZW4+LgorCit0cmFpbGVyLjx0b2tlbj4uaWZtaXNzaW5nOjoKKwlUaGlzIG9wdGlvbiB0YWtlcyB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlICd0cmFpbGVyLmlmbWlzc2luZycKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlIGFuZCBpdCBvdmVycmlkZXMgd2hhdCBpcyBzcGVjaWZpZWQgYnkKKwl0aGF0IG9wdGlvbiBmb3IgdHJhaWxlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIDx0b2tlbj4uCisKK3RyYWlsZXIuPHRva2VuPi5jb21tYW5kOjoKKwlUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgc2hlbGwgY29tbWFuZCB0aGF0IHdpbGwKKwliZSBjYWxsZWQgdG8gYXV0b21hdGljYWxseSBhZGQgb3IgbW9kaWZ5IGEgdHJhaWxlciB3aXRoIHRoZQorCXNwZWNpZmllZCA8dG9rZW4+LgorKworV2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBiZWhhdmlvciBpcyBhcyBpZiBhIHNwZWNpYWwKKyc8dG9rZW4+PTx2YWx1ZT4nIGFyZ3VtZW50IHdlcmUgYWRkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29tbWFuZAorbGluZSwgd2hlcmUgPHZhbHVlPiBpcyB0YWtlbiB0byBiZSB0aGUgc3RhbmRhcmQgb3V0cHV0IG9mIHRoZQorc3BlY2lmaWVkIGNvbW1hbmQgd2l0aCBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSB0cmltbWVkCitvZmYuCisrCitJZiB0aGUgY29tbWFuZCBjb250YWlucyB0aGUgYCRBUkdgIHN0cmluZywgdGhpcyBzdHJpbmcgd2lsbCBiZQorcmVwbGFjZWQgd2l0aCB0aGUgPHZhbHVlPiBwYXJ0IG9mIGFuIGV4aXN0aW5nIHRyYWlsZXIgd2l0aCB0aGUgc2FtZQorPHRva2VuPiwgaWYgYW55LCBiZWZvcmUgdGhlIGNvbW1hbmQgaXMgbGF1bmNoZWQuCisrCitJZiBzb21lICc8dG9rZW4+PTx2YWx1ZT4nIGFyZ3VtZW50cyBhcmUgYWxzbyBwYXNzZWQgb24gdGhlIGNvbW1hbmQKK2xpbmUsIHdoZW4gYSAndHJhaWxlci48dG9rZW4+LmNvbW1hbmQnIGlzIGNvbmZpZ3VyZWQsIHRoZSBjb21tYW5kIHdpbGwKK2Fsc28gYmUgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlc2UgYXJndW1lbnRzLiBBbmQgdGhlIDx2YWx1ZT4gcGFydCBvZgordGhlc2UgYXJndW1lbnRzLCBpZiBhbnksIHdpbGwgYmUgdXNlZCB0byByZXBsYWNlIHRoZSBgJEFSR2Agc3RyaW5nIGluCit0aGUgY29tbWFuZC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKyogQ29uZmlndXJlIGEgJ3NpZ24nIHRyYWlsZXIgd2l0aCBhICdTaWduZWQtb2ZmLWJ5JyBrZXksIGFuZCB0aGVuCisgIGFkZCB0d28gb2YgdGhlc2UgdHJhaWxlcnMgdG8gYSBtZXNzYWdlOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgdHJhaWxlci5zaWduLmtleSAiU2lnbmVkLW9mZi1ieSIKKyQgY2F0IG1zZy50eHQKK3N1YmplY3QKKworbWVzc2FnZQorJCBjYXQgbXNnLnR4dCB8IGdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICdzaWduOiBBbGljZSA8YWxpY2VAZXhhbXBsZS5jb20+JyAtLXRyYWlsZXIgJ3NpZ246IEJvYiA8Ym9iQGV4YW1wbGUuY29tPicKK3N1YmplY3QKKworbWVzc2FnZQorCitTaWduZWQtb2ZmLWJ5OiBBbGljZSA8YWxpY2VAZXhhbXBsZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBCb2IgPGJvYkBleGFtcGxlLmNvbT4KKy0tLS0tLS0tLS0tLQorCisqIFVzZSB0aGUgYC0taW4tcGxhY2VgIG9wdGlvbiB0byBlZGl0IGEgbWVzc2FnZSBmaWxlIGluIHBsYWNlOgorKworLS0tLS0tLS0tLS0tCiskIGNhdCBtc2cudHh0CitzdWJqZWN0CisKK21lc3NhZ2UKKworU2lnbmVkLW9mZi1ieTogQm9iIDxib2JAZXhhbXBsZS5jb20+CiskIGdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICdBY2tlZC1ieTogQWxpY2UgPGFsaWNlQGV4YW1wbGUuY29tPicgLS1pbi1wbGFjZSBtc2cudHh0CiskIGNhdCBtc2cudHh0CitzdWJqZWN0CisKK21lc3NhZ2UKKworU2lnbmVkLW9mZi1ieTogQm9iIDxib2JAZXhhbXBsZS5jb20+CitBY2tlZC1ieTogQWxpY2UgPGFsaWNlQGV4YW1wbGUuY29tPgorLS0tLS0tLS0tLS0tCisKKyogRXh0cmFjdCB0aGUgbGFzdCBjb21taXQgYXMgYSBwYXRjaCwgYW5kIGFkZCBhICdDYycgYW5kIGEKKyAgJ1Jldmlld2VkLWJ5JyB0cmFpbGVyIHRvIGl0OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBmb3JtYXQtcGF0Y2ggLTEKKzAwMDEtZm9vLnBhdGNoCiskIGdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICdDYzogQWxpY2UgPGFsaWNlQGV4YW1wbGUuY29tPicgLS10cmFpbGVyICdSZXZpZXdlZC1ieTogQm9iIDxib2JAZXhhbXBsZS5jb20+JyAwMDAxLWZvby5wYXRjaCA+MDAwMS1iYXIucGF0Y2gKKy0tLS0tLS0tLS0tLQorCisqIENvbmZpZ3VyZSBhICdzaWduJyB0cmFpbGVyIHdpdGggYSBjb21tYW5kIHRvIGF1dG9tYXRpY2FsbHkgYWRkIGEKKyAgJ1NpZ25lZC1vZmYtYnk6ICcgd2l0aCB0aGUgYXV0aG9yIGluZm9ybWF0aW9uIG9ubHkgaWYgdGhlcmUgaXMgbm8KKyAgJ1NpZ25lZC1vZmYtYnk6ICcgYWxyZWFkeSwgYW5kIHNob3cgaG93IGl0IHdvcmtzOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgdHJhaWxlci5zaWduLmtleSAiU2lnbmVkLW9mZi1ieTogIgorJCBnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5pZm1pc3NpbmcgYWRkCiskIGdpdCBjb25maWcgdHJhaWxlci5zaWduLmlmZXhpc3RzIGRvTm90aGluZworJCBnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5jb21tYW5kICdlY2hvICIkKGdpdCBjb25maWcgdXNlci5uYW1lKSA8JChnaXQgY29uZmlnIHVzZXIuZW1haWwpPiInCiskIGdpdCBpbnRlcnByZXQtdHJhaWxlcnMgPDxFT0YKKz4gRU9GCisKK1NpZ25lZC1vZmYtYnk6IEJvYiA8Ym9iQGV4YW1wbGUuY29tPgorJCBnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIDw8RU9GCis+IFNpZ25lZC1vZmYtYnk6IEFsaWNlIDxhbGljZUBleGFtcGxlLmNvbT4KKz4gRU9GCisKK1NpZ25lZC1vZmYtYnk6IEFsaWNlIDxhbGljZUBleGFtcGxlLmNvbT4KKy0tLS0tLS0tLS0tLQorCisqIENvbmZpZ3VyZSBhICdmaXgnIHRyYWlsZXIgd2l0aCBhIGtleSB0aGF0IGNvbnRhaW5zIGEgJyMnIGFuZCBubworICBzcGFjZSBhZnRlciB0aGlzIGNoYXJhY3RlciwgYW5kIHNob3cgaG93IGl0IHdvcmtzOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgdHJhaWxlci5zZXBhcmF0b3JzICI6IyIKKyQgZ2l0IGNvbmZpZyB0cmFpbGVyLmZpeC5rZXkgIkZpeCAjIgorJCBlY2hvICJzdWJqZWN0IiB8IGdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyIGZpeD00Mgorc3ViamVjdAorCitGaXggIzQyCistLS0tLS0tLS0tLS0KKworKiBDb25maWd1cmUgYSAnc2VlJyB0cmFpbGVyIHdpdGggYSBjb21tYW5kIHRvIHNob3cgdGhlIHN1YmplY3Qgb2YgYQorICBjb21taXQgdGhhdCBpcyByZWxhdGVkLCBhbmQgc2hvdyBob3cgaXQgd29ya3M6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyB0cmFpbGVyLnNlZS5rZXkgIlNlZS1hbHNvOiAiCiskIGdpdCBjb25maWcgdHJhaWxlci5zZWUuaWZFeGlzdHMgInJlcGxhY2UiCiskIGdpdCBjb25maWcgdHJhaWxlci5zZWUuaWZNaXNzaW5nICJkb05vdGhpbmciCiskIGdpdCBjb25maWcgdHJhaWxlci5zZWUuY29tbWFuZCAiZ2l0IGxvZyAtMSAtLW9uZWxpbmUgLS1mb3JtYXQ9XCIlaCAoJXMpXCIgLS1hYmJyZXYtY29tbWl0IC0tYWJicmV2PTE0IFwkQVJHIgorJCBnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIDw8RU9GCis+IHN1YmplY3QKKz4gCis+IG1lc3NhZ2UKKz4gCis+IHNlZTogSEVBRH4yCis+IEVPRgorc3ViamVjdAorCittZXNzYWdlCisKK1NlZS1hbHNvOiBmZTMxODc0ODlkNjljNCAoc3ViamVjdCBvZiByZWxhdGVkIGNvbW1pdCkKKy0tLS0tLS0tLS0tLQorCisqIENvbmZpZ3VyZSBhIGNvbW1pdCB0ZW1wbGF0ZSB3aXRoIHNvbWUgdHJhaWxlcnMgd2l0aCBlbXB0eSB2YWx1ZXMKKyAgKHVzaW5nIHNlZCB0byBzaG93IGFuZCBrZWVwIHRoZSB0cmFpbGluZyBzcGFjZXMgYXQgdGhlIGVuZCBvZiB0aGUKKyAgdHJhaWxlcnMpLCB0aGVuIGNvbmZpZ3VyZSBhIGNvbW1pdC1tc2cgaG9vayB0aGF0IHVzZXMKKyAgJ2dpdCBpbnRlcnByZXQtdHJhaWxlcnMnIHRvIHJlbW92ZSB0cmFpbGVycyB3aXRoIGVtcHR5IHZhbHVlcyBhbmQKKyAgdG8gYWRkIGEgJ2dpdC12ZXJzaW9uJyB0cmFpbGVyOgorKworLS0tLS0tLS0tLS0tCiskIHNlZCAtZSAncy8gWiQvIC8nID5jb21taXRfdGVtcGxhdGUudHh0IDw8RU9GCis+ICoqKnN1YmplY3QqKioKKz4gCis+ICoqKm1lc3NhZ2UqKioKKz4gCis+IEZpeGVzOiBaCis+IENjOiBaCis+IFJldmlld2VkLWJ5OiBaCis+IFNpZ25lZC1vZmYtYnk6IFoKKz4gRU9GCiskIGdpdCBjb25maWcgY29tbWl0LnRlbXBsYXRlIGNvbW1pdF90ZW1wbGF0ZS50eHQKKyQgY2F0ID4uZ2l0L2hvb2tzL2NvbW1pdC1tc2cgPDxFT0YKKz4gIyEvYmluL3NoCis+IGdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiZ2l0LXZlcnNpb246IFwkKGdpdCBkZXNjcmliZSkiICJcJDEiID4gIlwkMS5uZXciCis+IG12ICJcJDEubmV3IiAiXCQxIgorPiBFT0YKKyQgY2htb2QgK3ggLmdpdC9ob29rcy9jb21taXQtbXNnCistLS0tLS0tLS0tLS0KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1jb21taXRbMV0sIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSwgbGlua2dpdDpnaXQtY29uZmlnWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBlNmQyMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQKQEAgLTAsMCArMSwyNDMgQEAKK2dpdC1sb2coMSkKKz09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWxvZyAtIFNob3cgY29tbWl0IGxvZ3MKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbG9nJyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uIHJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1Nob3dzIHRoZSBjb21taXQgbG9ncy4KKworVGhlIGNvbW1hbmQgdGFrZXMgb3B0aW9ucyBhcHBsaWNhYmxlIHRvIHRoZSBgZ2l0IHJldi1saXN0YAorY29tbWFuZCB0byBjb250cm9sIHdoYXQgaXMgc2hvd24gYW5kIGhvdywgYW5kIG9wdGlvbnMgYXBwbGljYWJsZSB0bwordGhlIGBnaXQgZGlmZi0qYCBjb21tYW5kcyB0byBjb250cm9sIGhvdyB0aGUgY2hhbmdlcworZWFjaCBjb21taXQgaW50cm9kdWNlcyBhcmUgc2hvd24uCisKKworT1BUSU9OUworLS0tLS0tLQorCistLWZvbGxvdzo6CisJQ29udGludWUgbGlzdGluZyB0aGUgaGlzdG9yeSBvZiBhIGZpbGUgYmV5b25kIHJlbmFtZXMKKwkod29ya3Mgb25seSBmb3IgYSBzaW5nbGUgZmlsZSkuCisKKy0tbm8tZGVjb3JhdGU6OgorLS1kZWNvcmF0ZVs9c2hvcnR8ZnVsbHxhdXRvfG5vXTo6CisJUHJpbnQgb3V0IHRoZSByZWYgbmFtZXMgb2YgYW55IGNvbW1pdHMgdGhhdCBhcmUgc2hvd24uIElmICdzaG9ydCcgaXMKKwlzcGVjaWZpZWQsIHRoZSByZWYgbmFtZSBwcmVmaXhlcyAncmVmcy9oZWFkcy8nLCAncmVmcy90YWdzLycgYW5kCisJJ3JlZnMvcmVtb3Rlcy8nIHdpbGwgbm90IGJlIHByaW50ZWQuIElmICdmdWxsJyBpcyBzcGVjaWZpZWQsIHRoZQorCWZ1bGwgcmVmIG5hbWUgKGluY2x1ZGluZyBwcmVmaXgpIHdpbGwgYmUgcHJpbnRlZC4gSWYgJ2F1dG8nIGlzCisJc3BlY2lmaWVkLCB0aGVuIGlmIHRoZSBvdXRwdXQgaXMgZ29pbmcgdG8gYSB0ZXJtaW5hbCwgdGhlIHJlZiBuYW1lcworCWFyZSBzaG93biBhcyBpZiAnc2hvcnQnIHdlcmUgZ2l2ZW4sIG90aGVyd2lzZSBubyByZWYgbmFtZXMgYXJlCisJc2hvd24uIFRoZSBkZWZhdWx0IG9wdGlvbiBpcyAnc2hvcnQnLgorCistLWRlY29yYXRlLXJlZnM9PHBhdHRlcm4+OjoKKy0tZGVjb3JhdGUtcmVmcy1leGNsdWRlPTxwYXR0ZXJuPjo6CisJSWYgbm8gYC0tZGVjb3JhdGUtcmVmc2AgaXMgZ2l2ZW4sIHByZXRlbmQgYXMgaWYgYWxsIHJlZnMgd2VyZQorCWluY2x1ZGVkLiAgRm9yIGVhY2ggY2FuZGlkYXRlLCBkbyBub3QgdXNlIGl0IGZvciBkZWNvcmF0aW9uIGlmIGl0CisJbWF0Y2hlcyBhbnkgcGF0dGVybnMgZ2l2ZW4gdG8gYC0tZGVjb3JhdGUtcmVmcy1leGNsdWRlYCBvciBpZiBpdAorCWRvZXNuJ3QgbWF0Y2ggYW55IG9mIHRoZSBwYXR0ZXJucyBnaXZlbiB0byBgLS1kZWNvcmF0ZS1yZWZzYC4gVGhlCisJYGxvZy5leGNsdWRlRGVjb3JhdGlvbmAgY29uZmlnIG9wdGlvbiBhbGxvd3MgZXhjbHVkaW5nIHJlZnMgZnJvbQorCXRoZSBkZWNvcmF0aW9ucywgYnV0IGFuIGV4cGxpY2l0IGAtLWRlY29yYXRlLXJlZnNgIHBhdHRlcm4gd2lsbAorCW92ZXJyaWRlIGEgbWF0Y2ggaW4gYGxvZy5leGNsdWRlRGVjb3JhdGlvbmAuCisKKy0tc291cmNlOjoKKwlQcmludCBvdXQgdGhlIHJlZiBuYW1lIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgYnkgd2hpY2ggZWFjaAorCWNvbW1pdCB3YXMgcmVhY2hlZC4KKworLS1bbm8tXW1haWxtYXA6OgorLS1bbm8tXXVzZS1tYWlsbWFwOjoKKwlVc2UgbWFpbG1hcCBmaWxlIHRvIG1hcCBhdXRob3IgYW5kIGNvbW1pdHRlciBuYW1lcyBhbmQgZW1haWwKKwlhZGRyZXNzZXMgdG8gY2Fub25pY2FsIHJlYWwgbmFtZXMgYW5kIGVtYWlsIGFkZHJlc3Nlcy4gU2VlCisJbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0uCisKKy0tZnVsbC1kaWZmOjoKKwlXaXRob3V0IHRoaXMgZmxhZywgYGdpdCBsb2cgLXAgPHBhdGg+Li4uYCBzaG93cyBjb21taXRzIHRoYXQKKwl0b3VjaCB0aGUgc3BlY2lmaWVkIHBhdGhzLCBhbmQgZGlmZnMgYWJvdXQgdGhlIHNhbWUgc3BlY2lmaWVkCisJcGF0aHMuICBXaXRoIHRoaXMsIHRoZSBmdWxsIGRpZmYgaXMgc2hvd24gZm9yIGNvbW1pdHMgdGhhdCB0b3VjaAorCXRoZSBzcGVjaWZpZWQgcGF0aHM7IHRoaXMgbWVhbnMgdGhhdCAiPHBhdGg+Li4uIiBsaW1pdHMgb25seQorCWNvbW1pdHMsIGFuZCBkb2Vzbid0IGxpbWl0IGRpZmYgZm9yIHRob3NlIGNvbW1pdHMuCisrCitOb3RlIHRoYXQgdGhpcyBhZmZlY3RzIGFsbCBkaWZmLWJhc2VkIG91dHB1dCB0eXBlcywgZS5nLiB0aG9zZQorcHJvZHVjZWQgYnkgYC0tc3RhdGAsIGV0Yy4KKworLS1sb2ctc2l6ZTo6CisJSW5jbHVkZSBhIGxpbmUgYGBsb2cgc2l6ZSA8bnVtYmVyPicnIGluIHRoZSBvdXRwdXQgZm9yIGVhY2ggY29tbWl0LAorCXdoZXJlIDxudW1iZXI+IGlzIHRoZSBsZW5ndGggb2YgdGhhdCBjb21taXQncyBtZXNzYWdlIGluIGJ5dGVzLgorCUludGVuZGVkIHRvIHNwZWVkIHVwIHRvb2xzIHRoYXQgcmVhZCBsb2cgbWVzc2FnZXMgZnJvbSBgZ2l0IGxvZ2AKKwlvdXRwdXQgYnkgYWxsb3dpbmcgdGhlbSB0byBhbGxvY2F0ZSBzcGFjZSBpbiBhZHZhbmNlLgorCistTCA8c3RhcnQ+LDxlbmQ+OjxmaWxlPjo6CistTCA6PGZ1bmNuYW1lPjo8ZmlsZT46OgorCVRyYWNlIHRoZSBldm9sdXRpb24gb2YgdGhlIGxpbmUgcmFuZ2UgZ2l2ZW4gYnkgIjxzdGFydD4sPGVuZD4iCisJKG9yIHRoZSBmdW5jdGlvbiBuYW1lIHJlZ2V4IDxmdW5jbmFtZT4pIHdpdGhpbiB0aGUgPGZpbGU+LiAgWW91IG1heQorCW5vdCBnaXZlIGFueSBwYXRoc3BlYyBsaW1pdGVycy4gIFRoaXMgaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8KKwlhIHdhbGsgc3RhcnRpbmcgZnJvbSBhIHNpbmdsZSByZXZpc2lvbiwgaS5lLiwgeW91IG1heSBvbmx5CisJZ2l2ZSB6ZXJvIG9yIG9uZSBwb3NpdGl2ZSByZXZpc2lvbiBhcmd1bWVudHMsIGFuZAorCTxzdGFydD4gYW5kIDxlbmQ+IChvciA8ZnVuY25hbWU+KSBtdXN0IGV4aXN0IGluIHRoZSBzdGFydGluZyByZXZpc2lvbi4KKwlZb3UgY2FuIHNwZWNpZnkgdGhpcyBvcHRpb24gbW9yZSB0aGFuIG9uY2UuIEltcGxpZXMgYC0tcGF0Y2hgLgorCVBhdGNoIG91dHB1dCBjYW4gYmUgc3VwcHJlc3NlZCB1c2luZyBgLS1uby1wYXRjaGAsIGJ1dCBvdGhlciBkaWZmIGZvcm1hdHMKKwkobmFtZWx5IGAtLXJhd2AsIGAtLW51bXN0YXRgLCBgLS1zaG9ydHN0YXRgLCBgLS1kaXJzdGF0YCwgYC0tc3VtbWFyeWAsCisJYC0tbmFtZS1vbmx5YCwgYC0tbmFtZS1zdGF0dXNgLCBgLS1jaGVja2ApIGFyZSBub3QgY3VycmVudGx5IGltcGxlbWVudGVkLgorKworaW5jbHVkZTo6bGluZS1yYW5nZS1mb3JtYXQudHh0W10KKworPHJldmlzaW9uIHJhbmdlPjo6CisJU2hvdyBvbmx5IGNvbW1pdHMgaW4gdGhlIHNwZWNpZmllZCByZXZpc2lvbiByYW5nZS4gIFdoZW4gbm8KKwk8cmV2aXNpb24gcmFuZ2U+IGlzIHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYEhFQURgIChpLmUuIHRoZQorCXdob2xlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCBjb21taXQpLiAgYG9yaWdpbi4uSEVBRGAKKwlzcGVjaWZpZXMgYWxsIHRoZSBjb21taXRzIHJlYWNoYWJsZSBmcm9tIHRoZSBjdXJyZW50IGNvbW1pdAorCShpLmUuIGBIRUFEYCksIGJ1dCBub3QgZnJvbSBgb3JpZ2luYC4gRm9yIGEgY29tcGxldGUgbGlzdCBvZgorCXdheXMgdG8gc3BlbGwgPHJldmlzaW9uIHJhbmdlPiwgc2VlIHRoZSAnU3BlY2lmeWluZyBSYW5nZXMnCisJc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XS4KKworWy0tXSA8cGF0aD4uLi46OgorCVNob3cgb25seSBjb21taXRzIHRoYXQgYXJlIGVub3VnaCB0byBleHBsYWluIGhvdyB0aGUgZmlsZXMKKwl0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgcGF0aHMgY2FtZSB0byBiZS4gIFNlZSAnSGlzdG9yeQorCVNpbXBsaWZpY2F0aW9uJyBiZWxvdyBmb3IgZGV0YWlscyBhbmQgb3RoZXIgc2ltcGxpZmljYXRpb24KKwltb2Rlcy4KKysKK1BhdGhzIG1heSBuZWVkIHRvIGJlIHByZWZpeGVkIHdpdGggYC0tYCB0byBzZXBhcmF0ZSB0aGVtIGZyb20KK29wdGlvbnMgb3IgdGhlIHJldmlzaW9uIHJhbmdlLCB3aGVuIGNvbmZ1c2lvbiBhcmlzZXMuCisKK2luY2x1ZGU6OnJldi1saXN0LW9wdGlvbnMudHh0W10KKworaW5jbHVkZTo6cHJldHR5LWZvcm1hdHMudHh0W10KKworQ09NTU9OIERJRkYgT1BUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6Z2l0LWxvZzogMQoraW5jbHVkZTo6ZGlmZi1vcHRpb25zLnR4dFtdCisKK2luY2x1ZGU6OmRpZmYtZ2VuZXJhdGUtcGF0Y2gudHh0W10KKworRVhBTVBMRVMKKy0tLS0tLS0tCitgZ2l0IGxvZyAtLW5vLW1lcmdlc2A6OgorCisJU2hvdyB0aGUgd2hvbGUgY29tbWl0IGhpc3RvcnksIGJ1dCBza2lwIGFueSBtZXJnZXMKKworYGdpdCBsb2cgdjIuNi4xMi4uIGluY2x1ZGUvc2NzaSBkcml2ZXJzL3Njc2lgOjoKKworCVNob3cgYWxsIGNvbW1pdHMgc2luY2UgdmVyc2lvbiAndjIuNi4xMicgdGhhdCBjaGFuZ2VkIGFueSBmaWxlCisJaW4gdGhlIGBpbmNsdWRlL3Njc2lgIG9yIGBkcml2ZXJzL3Njc2lgIHN1YmRpcmVjdG9yaWVzCisKK2BnaXQgbG9nIC0tc2luY2U9IjIgd2Vla3MgYWdvIiAtLSBnaXRrYDo6CisKKwlTaG93IHRoZSBjaGFuZ2VzIGR1cmluZyB0aGUgbGFzdCB0d28gd2Vla3MgdG8gdGhlIGZpbGUgJ2dpdGsnLgorCVRoZSBgLS1gIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBjb25mdXNpb24gd2l0aCB0aGUgKmJyYW5jaCogbmFtZWQKKwknZ2l0aycKKworYGdpdCBsb2cgLS1uYW1lLXN0YXR1cyByZWxlYXNlLi50ZXN0YDo6CisKKwlTaG93IHRoZSBjb21taXRzIHRoYXQgYXJlIGluIHRoZSAidGVzdCIgYnJhbmNoIGJ1dCBub3QgeWV0CisJaW4gdGhlICJyZWxlYXNlIiBicmFuY2gsIGFsb25nIHdpdGggdGhlIGxpc3Qgb2YgcGF0aHMKKwllYWNoIGNvbW1pdCBtb2RpZmllcy4KKworYGdpdCBsb2cgLS1mb2xsb3cgYnVpbHRpbi9yZXYtbGlzdC5jYDo6CisKKwlTaG93cyB0aGUgY29tbWl0cyB0aGF0IGNoYW5nZWQgYGJ1aWx0aW4vcmV2LWxpc3QuY2AsIGluY2x1ZGluZworCXRob3NlIGNvbW1pdHMgdGhhdCBvY2N1cnJlZCBiZWZvcmUgdGhlIGZpbGUgd2FzIGdpdmVuIGl0cworCXByZXNlbnQgbmFtZS4KKworYGdpdCBsb2cgLS1icmFuY2hlcyAtLW5vdCAtLXJlbW90ZXM9b3JpZ2luYDo6CisKKwlTaG93cyBhbGwgY29tbWl0cyB0aGF0IGFyZSBpbiBhbnkgb2YgbG9jYWwgYnJhbmNoZXMgYnV0IG5vdCBpbgorCWFueSBvZiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgZm9yICdvcmlnaW4nICh3aGF0IHlvdSBoYXZlIHRoYXQKKwlvcmlnaW4gZG9lc24ndCkuCisKK2BnaXQgbG9nIG1hc3RlciAtLW5vdCAtLXJlbW90ZXM9Ki9tYXN0ZXJgOjoKKworCVNob3dzIGFsbCBjb21taXRzIHRoYXQgYXJlIGluIGxvY2FsIG1hc3RlciBidXQgbm90IGluIGFueSByZW1vdGUKKwlyZXBvc2l0b3J5IG1hc3RlciBicmFuY2hlcy4KKworYGdpdCBsb2cgLXAgLW0gLS1maXJzdC1wYXJlbnRgOjoKKworCVNob3dzIHRoZSBoaXN0b3J5IGluY2x1ZGluZyBjaGFuZ2UgZGlmZnMsIGJ1dCBvbmx5IGZyb20gdGhlCisJYGBtYWluIGJyYW5jaCcnIHBlcnNwZWN0aXZlLCBza2lwcGluZyBjb21taXRzIHRoYXQgY29tZSBmcm9tIG1lcmdlZAorCWJyYW5jaGVzLCBhbmQgc2hvd2luZyBmdWxsIGRpZmZzIG9mIGNoYW5nZXMgaW50cm9kdWNlZCBieSB0aGUgbWVyZ2VzLgorCVRoaXMgbWFrZXMgc2Vuc2Ugb25seSB3aGVuIGZvbGxvd2luZyBhIHN0cmljdCBwb2xpY3kgb2YgbWVyZ2luZyBhbGwKKwl0b3BpYyBicmFuY2hlcyB3aGVuIHN0YXlpbmcgb24gYSBzaW5nbGUgaW50ZWdyYXRpb24gYnJhbmNoLgorCitgZ2l0IGxvZyAtTCAnL2ludCBtYWluLycsL159LzptYWluLmNgOjoKKworCVNob3dzIGhvdyB0aGUgZnVuY3Rpb24gYG1haW4oKWAgaW4gdGhlIGZpbGUgYG1haW4uY2AgZXZvbHZlZAorCW92ZXIgdGltZS4KKworYGdpdCBsb2cgLTNgOjoKKworCUxpbWl0cyB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgdG8gc2hvdyB0byAzLgorCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK2luY2x1ZGU6OmkxOG4udHh0W10KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBjb3JlIHZhcmlhYmxlcyBhbmQgbGlua2dpdDpnaXQtZGlmZlsxXQorZm9yIHNldHRpbmdzIHJlbGF0ZWQgdG8gZGlmZiBnZW5lcmF0aW9uLgorCitmb3JtYXQucHJldHR5OjoKKwlEZWZhdWx0IGZvciB0aGUgYC0tZm9ybWF0YCBvcHRpb24uICAoU2VlICdQcmV0dHkgRm9ybWF0cycgYWJvdmUuKQorCURlZmF1bHRzIHRvIGBtZWRpdW1gLgorCitpMThuLmxvZ091dHB1dEVuY29kaW5nOjoKKwlFbmNvZGluZyB0byB1c2Ugd2hlbiBkaXNwbGF5aW5nIGxvZ3MuICAoU2VlICdEaXNjdXNzaW9uJyBhYm92ZS4pCisJRGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGBpMThuLmNvbW1pdEVuY29kaW5nYCBpZiBzZXQsIGFuZCBVVEYtOAorCW90aGVyd2lzZS4KKworbG9nLmRhdGU6OgorCURlZmF1bHQgZm9ybWF0IGZvciBodW1hbi1yZWFkYWJsZSBkYXRlcy4gIChDb21wYXJlIHRoZQorCWAtLWRhdGVgIG9wdGlvbi4pICBEZWZhdWx0cyB0byAiZGVmYXVsdCIsIHdoaWNoIG1lYW5zIHRvIHdyaXRlCisJZGF0ZXMgbGlrZSBgU2F0IE1heSA4IDE5OjM1OjM0IDIwMTAgLTA1MDBgLgorKworSWYgdGhlIGZvcm1hdCBpcyBzZXQgdG8gImF1dG86Zm9vIiBhbmQgdGhlIHBhZ2VyIGlzIGluIHVzZSwgZm9ybWF0CisiZm9vIiB3aWxsIGJlIHRoZSB1c2VkIGZvciB0aGUgZGF0ZSBmb3JtYXQuIE90aGVyd2lzZSAiZGVmYXVsdCIgd2lsbAorYmUgdXNlZC4KKworbG9nLmZvbGxvdzo6CisJSWYgYHRydWVgLCBgZ2l0IGxvZ2Agd2lsbCBhY3QgYXMgaWYgdGhlIGAtLWZvbGxvd2Agb3B0aW9uIHdhcyB1c2VkIHdoZW4KKwlhIHNpbmdsZSA8cGF0aD4gaXMgZ2l2ZW4uICBUaGlzIGhhcyB0aGUgc2FtZSBsaW1pdGF0aW9ucyBhcyBgLS1mb2xsb3dgLAorCWkuZS4gaXQgY2Fubm90IGJlIHVzZWQgdG8gZm9sbG93IG11bHRpcGxlIGZpbGVzIGFuZCBkb2VzIG5vdCB3b3JrIHdlbGwKKwlvbiBub24tbGluZWFyIGhpc3RvcnkuCisKK2xvZy5zaG93Um9vdDo6CisJSWYgYGZhbHNlYCwgYGdpdCBsb2dgIGFuZCByZWxhdGVkIGNvbW1hbmRzIHdpbGwgbm90IHRyZWF0IHRoZQorCWluaXRpYWwgY29tbWl0IGFzIGEgYmlnIGNyZWF0aW9uIGV2ZW50LiAgQW55IHJvb3QgY29tbWl0cyBpbgorCWBnaXQgbG9nIC1wYCBvdXRwdXQgd291bGQgYmUgc2hvd24gd2l0aG91dCBhIGRpZmYgYXR0YWNoZWQuCisJVGhlIGRlZmF1bHQgaXMgYHRydWVgLgorCitsb2cuc2hvd1NpZ25hdHVyZTo6CisJSWYgYHRydWVgLCBgZ2l0IGxvZ2AgYW5kIHJlbGF0ZWQgY29tbWFuZHMgd2lsbCBhY3QgYXMgaWYgdGhlCisJYC0tc2hvdy1zaWduYXR1cmVgIG9wdGlvbiB3YXMgcGFzc2VkIHRvIHRoZW0uCisKK21haWxtYXAuKjo6CisJU2VlIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdLgorCitub3Rlcy5kaXNwbGF5UmVmOjoKKwlXaGljaCByZWZzLCBpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBzZXQgYnkgYGNvcmUubm90ZXNSZWZgCisJb3IgYEdJVF9OT1RFU19SRUZgLCB0byByZWFkIG5vdGVzIGZyb20gd2hlbiBzaG93aW5nIGNvbW1pdAorCW1lc3NhZ2VzIHdpdGggdGhlIGBsb2dgIGZhbWlseSBvZiBjb21tYW5kcy4gIFNlZQorCWxpbmtnaXQ6Z2l0LW5vdGVzWzFdLgorKworTWF5IGJlIGFuIHVuYWJicmV2aWF0ZWQgcmVmIG5hbWUgb3IgYSBnbG9iIGFuZCBtYXkgYmUgc3BlY2lmaWVkCittdWx0aXBsZSB0aW1lcy4gIEEgd2FybmluZyB3aWxsIGJlIGlzc3VlZCBmb3IgcmVmcyB0aGF0IGRvIG5vdCBleGlzdCwKK2J1dCBhIGdsb2IgdGhhdCBkb2VzIG5vdCBtYXRjaCBhbnkgcmVmcyBpcyBzaWxlbnRseSBpZ25vcmVkLgorKworVGhpcyBzZXR0aW5nIGNhbiBiZSBkaXNhYmxlZCBieSB0aGUgYC0tbm8tbm90ZXNgIG9wdGlvbiwKK292ZXJyaWRkZW4gYnkgdGhlIGBHSVRfTk9URVNfRElTUExBWV9SRUZgIGVudmlyb25tZW50IHZhcmlhYmxlLAorYW5kIG92ZXJyaWRkZW4gYnkgdGhlIGAtLW5vdGVzPTxyZWY+YCBvcHRpb24uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtZmlsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtZmlsZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYjJlYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy1maWxlcy50eHQKQEAgLTAsMCArMSwyNTAgQEAKK2dpdC1scy1maWxlcygxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1scy1maWxlcyAtIFNob3cgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGxzLWZpbGVzJyBbLXpdIFstdF0gWy12XSBbLWZdCisJCSgtLVtjYWNoZWR8ZGVsZXRlZHxvdGhlcnN8aWdub3JlZHxzdGFnZXx1bm1lcmdlZHxraWxsZWR8bW9kaWZpZWRdKSoKKwkJKC1bY3xkfG98aXxzfHV8a3xtXSkqCisJCVstLWVvbF0KKwkJWy14IDxwYXR0ZXJuPnwtLWV4Y2x1ZGU9PHBhdHRlcm4+XQorCQlbLVggPGZpbGU+fC0tZXhjbHVkZS1mcm9tPTxmaWxlPl0KKwkJWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxmaWxlPl0KKwkJWy0tZXhjbHVkZS1zdGFuZGFyZF0KKwkJWy0tZXJyb3ItdW5tYXRjaF0gWy0td2l0aC10cmVlPTx0cmVlLWlzaD5dCisJCVstLWZ1bGwtbmFtZV0gWy0tcmVjdXJzZS1zdWJtb2R1bGVzXQorCQlbLS1hYmJyZXZdIFstLV0gWzxmaWxlPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIG1lcmdlcyB0aGUgZmlsZSBsaXN0aW5nIGluIHRoZSBkaXJlY3RvcnkgY2FjaGUgaW5kZXggd2l0aCB0aGUKK2FjdHVhbCB3b3JraW5nIGRpcmVjdG9yeSBsaXN0LCBhbmQgc2hvd3MgZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBvZiB0aGUKK3R3by4KKworT25lIG9yIG1vcmUgb2YgdGhlIG9wdGlvbnMgYmVsb3cgbWF5IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlcworc2hvd246CisKK09QVElPTlMKKy0tLS0tLS0KKy1jOjoKKy0tY2FjaGVkOjoKKwlTaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KQorCistZDo6CistLWRlbGV0ZWQ6OgorCVNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0CisKKy1tOjoKKy0tbW9kaWZpZWQ6OgorCVNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dAorCistbzo6CistLW90aGVyczo6CisJU2hvdyBvdGhlciAoaS5lLiB1bnRyYWNrZWQpIGZpbGVzIGluIHRoZSBvdXRwdXQKKworLWk6OgorLS1pZ25vcmVkOjoKKwlTaG93IG9ubHkgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0LiBXaGVuIHNob3dpbmcgZmlsZXMgaW4gdGhlCisJaW5kZXgsIHByaW50IG9ubHkgdGhvc2UgbWF0Y2hlZCBieSBhbiBleGNsdWRlIHBhdHRlcm4uIFdoZW4KKwlzaG93aW5nICJvdGhlciIgZmlsZXMsIHNob3cgb25seSB0aG9zZSBtYXRjaGVkIGJ5IGFuIGV4Y2x1ZGUKKwlwYXR0ZXJuLiBTdGFuZGFyZCBpZ25vcmUgcnVsZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlZCwKKwl0aGVyZWZvcmUgYXQgbGVhc3Qgb25lIG9mIHRoZSBgLS1leGNsdWRlKmAgb3B0aW9ucyBpcyByZXF1aXJlZC4KKworLXM6OgorLS1zdGFnZTo6CisJU2hvdyBzdGFnZWQgY29udGVudHMnIG1vZGUgYml0cywgb2JqZWN0IG5hbWUgYW5kIHN0YWdlIG51bWJlciBpbiB0aGUgb3V0cHV0LgorCistLWRpcmVjdG9yeTo6CisJSWYgYSB3aG9sZSBkaXJlY3RvcnkgaXMgY2xhc3NpZmllZCBhcyAib3RoZXIiLCBzaG93IGp1c3QgaXRzCisJbmFtZSAod2l0aCBhIHRyYWlsaW5nIHNsYXNoKSBhbmQgbm90IGl0cyB3aG9sZSBjb250ZW50cy4KKworLS1uby1lbXB0eS1kaXJlY3Rvcnk6OgorCURvIG5vdCBsaXN0IGVtcHR5IGRpcmVjdG9yaWVzLiBIYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1kaXJlY3RvcnkuCisKKy11OjoKKy0tdW5tZXJnZWQ6OgorCVNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZm9yY2VzIC0tc3RhZ2UpCisKKy1rOjoKKy0ta2lsbGVkOjoKKwlTaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIGR1ZQorCXRvIGZpbGUvZGlyZWN0b3J5IGNvbmZsaWN0cyBmb3IgY2hlY2tvdXQtaW5kZXggdG8KKwlzdWNjZWVkLgorCistejo6CisJXDAgbGluZSB0ZXJtaW5hdGlvbiBvbiBvdXRwdXQgYW5kIGRvIG5vdCBxdW90ZSBmaWxlbmFtZXMuCisJU2VlIE9VVFBVVCBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworLXggPHBhdHRlcm4+OjoKKy0tZXhjbHVkZT08cGF0dGVybj46OgorCVNraXAgdW50cmFja2VkIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4uCisJTm90ZSB0aGF0IHBhdHRlcm4gaXMgYSBzaGVsbCB3aWxkY2FyZCBwYXR0ZXJuLiBTZWUgRVhDTFVERSBQQVRURVJOUworCWJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCistWCA8ZmlsZT46OgorLS1leGNsdWRlLWZyb209PGZpbGU+OjoKKwlSZWFkIGV4Y2x1ZGUgcGF0dGVybnMgZnJvbSA8ZmlsZT47IDEgcGVyIGxpbmUuCisKKy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxmaWxlPjo6CisJUmVhZCBhZGRpdGlvbmFsIGV4Y2x1ZGUgcGF0dGVybnMgdGhhdCBhcHBseSBvbmx5IHRvIHRoZQorCWRpcmVjdG9yeSBhbmQgaXRzIHN1YmRpcmVjdG9yaWVzIGluIDxmaWxlPi4KKworLS1leGNsdWRlLXN0YW5kYXJkOjoKKwlBZGQgdGhlIHN0YW5kYXJkIEdpdCBleGNsdXNpb25zOiAuZ2l0L2luZm8vZXhjbHVkZSwgLmdpdGlnbm9yZQorCWluIGVhY2ggZGlyZWN0b3J5LCBhbmQgdGhlIHVzZXIncyBnbG9iYWwgZXhjbHVzaW9uIGZpbGUuCisKKy0tZXJyb3ItdW5tYXRjaDo6CisJSWYgYW55IDxmaWxlPiBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuCisJZXJyb3IgKHJldHVybiAxKS4KKworLS13aXRoLXRyZWU9PHRyZWUtaXNoPjo6CisJV2hlbiB1c2luZyAtLWVycm9yLXVubWF0Y2ggdG8gZXhwYW5kIHRoZSB1c2VyIHN1cHBsaWVkCisJPGZpbGU+IChpLmUuIHBhdGggcGF0dGVybikgYXJndW1lbnRzIHRvIHBhdGhzLCBwcmV0ZW5kCisJdGhhdCBwYXRocyB3aGljaCB3ZXJlIHJlbW92ZWQgaW4gdGhlIGluZGV4IHNpbmNlIHRoZQorCW5hbWVkIDx0cmVlLWlzaD4gYXJlIHN0aWxsIHByZXNlbnQuICBVc2luZyB0aGlzIG9wdGlvbgorCXdpdGggYC1zYCBvciBgLXVgIG9wdGlvbnMgZG9lcyBub3QgbWFrZSBhbnkgc2Vuc2UuCisKKy10OjoKKwlUaGlzIGZlYXR1cmUgaXMgc2VtaS1kZXByZWNhdGVkLiBGb3Igc2NyaXB0aW5nIHB1cnBvc2UsCisJbGlua2dpdDpnaXQtc3RhdHVzWzFdIGAtLXBvcmNlbGFpbmAgYW5kCisJbGlua2dpdDpnaXQtZGlmZi1maWxlc1sxXSBgLS1uYW1lLXN0YXR1c2AgYXJlIGFsbW9zdCBhbHdheXMKKwlzdXBlcmlvciBhbHRlcm5hdGl2ZXMsIGFuZCB1c2VycyBzaG91bGQgbG9vayBhdAorCWxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBgLS1zaG9ydGAgb3IgbGlua2dpdDpnaXQtZGlmZlsxXQorCWAtLW5hbWUtc3RhdHVzYCBmb3IgbW9yZSB1c2VyLWZyaWVuZGx5IGFsdGVybmF0aXZlcy4KKysKKy0tCitUaGlzIG9wdGlvbiBpZGVudGlmaWVzIHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRoZSBmb2xsb3dpbmcgdGFncyAoZm9sbG93ZWQgYnkKK2Egc3BhY2UpIGF0IHRoZSBzdGFydCBvZiBlYWNoIGxpbmU6CisKKwlIOjoJY2FjaGVkCisJUzo6CXNraXAtd29ya3RyZWUKKwlNOjoJdW5tZXJnZWQKKwlSOjoJcmVtb3ZlZC9kZWxldGVkCisJQzo6CW1vZGlmaWVkL2NoYW5nZWQKKwlLOjoJdG8gYmUga2lsbGVkCisJPzo6CW90aGVyCistLQorCistdjo6CisJU2ltaWxhciB0byBgLXRgLCBidXQgdXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciBmaWxlcworCXRoYXQgYXJlIG1hcmtlZCBhcyAnYXNzdW1lIHVuY2hhbmdlZCcgKHNlZQorCWxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXSkuCisKKy1mOjoKKwlTaW1pbGFyIHRvIGAtdGAsIGJ1dCB1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yIGZpbGVzCisJdGhhdCBhcmUgbWFya2VkIGFzICdmc21vbml0b3IgdmFsaWQnIChzZWUKKwlsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0pLgorCistLWZ1bGwtbmFtZTo6CisJV2hlbiBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeSwgdGhlIGNvbW1hbmQgdXN1YWxseQorCW91dHB1dHMgcGF0aHMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgVGhpcworCW9wdGlvbiBmb3JjZXMgcGF0aHMgdG8gYmUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0CisJdG9wIGRpcmVjdG9yeS4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorCVJlY3Vyc2l2ZWx5IGNhbGxzIGxzLWZpbGVzIG9uIGVhY2ggYWN0aXZlIHN1Ym1vZHVsZSBpbiB0aGUgcmVwb3NpdG9yeS4KKwlDdXJyZW50bHkgdGhlcmUgaXMgb25seSBzdXBwb3J0IGZvciB0aGUgLS1jYWNoZWQgbW9kZS4KKworLS1hYmJyZXZbPTxuPl06OgorCUluc3RlYWQgb2Ygc2hvd2luZyB0aGUgZnVsbCA0MC1ieXRlIGhleGFkZWNpbWFsIG9iamVjdAorCWxpbmVzLCBzaG93IG9ubHkgYSBwYXJ0aWFsIHByZWZpeC4KKwlOb24gZGVmYXVsdCBudW1iZXIgb2YgZGlnaXRzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCAtLWFiYnJldj08bj4uCisKKy0tZGVidWc6OgorCUFmdGVyIGVhY2ggbGluZSB0aGF0IGRlc2NyaWJlcyBhIGZpbGUsIGFkZCBtb3JlIGRhdGEgYWJvdXQgaXRzCisJY2FjaGUgZW50cnkuICBUaGlzIGlzIGludGVuZGVkIHRvIHNob3cgYXMgbXVjaCBpbmZvcm1hdGlvbiBhcworCXBvc3NpYmxlIGZvciBtYW51YWwgaW5zcGVjdGlvbjsgdGhlIGV4YWN0IGZvcm1hdCBtYXkgY2hhbmdlIGF0CisJYW55IHRpbWUuCisKKy0tZW9sOjoKKwlTaG93IDxlb2xpbmZvPiBhbmQgPGVvbGF0dHI+IG9mIGZpbGVzLgorCTxlb2xpbmZvPiBpcyB0aGUgZmlsZSBjb250ZW50IGlkZW50aWZpY2F0aW9uIHVzZWQgYnkgR2l0IHdoZW4KKwl0aGUgInRleHQiIGF0dHJpYnV0ZSBpcyAiYXV0byIgKG9yIG5vdCBzZXQgYW5kIGNvcmUuYXV0b2NybGYgaXMgbm90IGZhbHNlKS4KKwk8ZW9saW5mbz4gaXMgZWl0aGVyICItdGV4dCIsICJub25lIiwgImxmIiwgImNybGYiLCAibWl4ZWQiIG9yICIiLgorKworIiIgbWVhbnMgdGhlIGZpbGUgaXMgbm90IGEgcmVndWxhciBmaWxlLCBpdCBpcyBub3QgaW4gdGhlIGluZGV4IG9yCitub3QgYWNjZXNzaWJsZSBpbiB0aGUgd29ya2luZyB0cmVlLgorKworPGVvbGF0dHI+IGlzIHRoZSBhdHRyaWJ1dGUgdGhhdCBpcyB1c2VkIHdoZW4gY2hlY2tpbmcgb3V0IG9yIGNvbW1pdHRpbmcsCitpdCBpcyBlaXRoZXIgIiIsICItdGV4dCIsICJ0ZXh0IiwgInRleHQ9YXV0byIsICJ0ZXh0IGVvbD1sZiIsICJ0ZXh0IGVvbD1jcmxmIi4KK1NpbmNlIEdpdCAyLjEwICJ0ZXh0PWF1dG8gZW9sPWxmIiBhbmQgInRleHQ9YXV0byBlb2w9Y3JsZiIgYXJlIHN1cHBvcnRlZC4KKysKK0JvdGggdGhlIDxlb2xpbmZvPiBpbiB0aGUgaW5kZXggKCJpLzxlb2xpbmZvPiIpCithbmQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoIncvPGVvbGluZm8+IikgYXJlIHNob3duIGZvciByZWd1bGFyIGZpbGVzLAorZm9sbG93ZWQgYnkgdGhlICAoImF0dHIvPGVvbGF0dHI+IikuCisKK1wtLTo6CisJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KKworPGZpbGU+OjoKKwlGaWxlcyB0byBzaG93LiBJZiBubyBmaWxlcyBhcmUgZ2l2ZW4gYWxsIGZpbGVzIHdoaWNoIG1hdGNoIHRoZSBvdGhlcgorCXNwZWNpZmllZCBjcml0ZXJpYSBhcmUgc2hvd24uCisKK09VVFBVVAorLS0tLS0tCisnZ2l0IGxzLWZpbGVzJyBqdXN0IG91dHB1dHMgdGhlIGZpbGVuYW1lcyB1bmxlc3MgYC0tc3RhZ2VgIGlzIHNwZWNpZmllZCBpbgord2hpY2ggY2FzZSBpdCBvdXRwdXRzOgorCisgICAgICAgIFs8dGFnPiBdPG1vZGU+IDxvYmplY3Q+IDxzdGFnZT4gPGZpbGU+CisKKydnaXQgbHMtZmlsZXMgLS1lb2wnIHdpbGwgc2hvdworCWkvPGVvbGluZm8+PFNQQUNFUz53Lzxlb2xpbmZvPjxTUEFDRVM+YXR0ci88ZW9sYXR0cj48U1BBQ0UqPjxUQUI+PGZpbGU+CisKKydnaXQgbHMtZmlsZXMgLS11bm1lcmdlZCcgYW5kICdnaXQgbHMtZmlsZXMgLS1zdGFnZScgY2FuIGJlIHVzZWQgdG8gZXhhbWluZQorZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdW5tZXJnZWQgcGF0aHMuCisKK0ZvciBhbiB1bm1lcmdlZCBwYXRoLCBpbnN0ZWFkIG9mIHJlY29yZGluZyBhIHNpbmdsZSBtb2RlL1NIQS0xIHBhaXIsCit0aGUgaW5kZXggcmVjb3JkcyB1cCB0byB0aHJlZSBzdWNoIHBhaXJzOyBvbmUgZnJvbSB0cmVlIE8gaW4gc3RhZ2UKKzEsIEEgaW4gc3RhZ2UgMiwgYW5kIEIgaW4gc3RhZ2UgMy4gIFRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWQgYnkKK3RoZSB1c2VyIChvciB0aGUgcG9yY2VsYWluKSB0byBzZWUgd2hhdCBzaG91bGQgZXZlbnR1YWxseSBiZSByZWNvcmRlZCBhdCB0aGUKK3BhdGguIChzZWUgbGlua2dpdDpnaXQtcmVhZC10cmVlWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN0YXRlKQorCitXaXRob3V0IHRoZSBgLXpgIG9wdGlvbiwgcGF0aG5hbWVzIHdpdGggInVudXN1YWwiIGNoYXJhY3RlcnMgYXJlCitxdW90ZWQgYXMgZXhwbGFpbmVkIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgY29yZS5xdW90ZVBhdGhgCisoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuICBVc2luZyBgLXpgIHRoZSBmaWxlbmFtZSBpcyBvdXRwdXQKK3ZlcmJhdGltIGFuZCB0aGUgbGluZSBpcyB0ZXJtaW5hdGVkIGJ5IGEgTlVMIGJ5dGUuCisKKworRVhDTFVERSBQQVRURVJOUworLS0tLS0tLS0tLS0tLS0tLQorCisnZ2l0IGxzLWZpbGVzJyBjYW4gdXNlIGEgbGlzdCBvZiAiZXhjbHVkZSBwYXR0ZXJucyIgd2hlbgordHJhdmVyc2luZyB0aGUgZGlyZWN0b3J5IHRyZWUgYW5kIGZpbmRpbmcgZmlsZXMgdG8gc2hvdyB3aGVuIHRoZQorZmxhZ3MgLS1vdGhlcnMgb3IgLS1pZ25vcmVkIGFyZSBzcGVjaWZpZWQuICBsaW5rZ2l0OmdpdGlnbm9yZVs1XQorc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgZXhjbHVkZSBwYXR0ZXJucy4KKworVGhlc2UgZXhjbHVkZSBwYXR0ZXJucyBjb21lIGZyb20gdGhlc2UgcGxhY2VzLCBpbiBvcmRlcjoKKworICAxLiBUaGUgY29tbWFuZC1saW5lIGZsYWcgLS1leGNsdWRlPTxwYXR0ZXJuPiBzcGVjaWZpZXMgYQorICAgICBzaW5nbGUgcGF0dGVybi4gIFBhdHRlcm5zIGFyZSBvcmRlcmVkIGluIHRoZSBzYW1lIG9yZGVyCisgICAgIHRoZXkgYXBwZWFyIGluIHRoZSBjb21tYW5kIGxpbmUuCisKKyAgMi4gVGhlIGNvbW1hbmQtbGluZSBmbGFnIC0tZXhjbHVkZS1mcm9tPTxmaWxlPiBzcGVjaWZpZXMgYQorICAgICBmaWxlIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHBhdHRlcm5zLiAgUGF0dGVybnMgYXJlIG9yZGVyZWQKKyAgICAgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIGZpbGUuCisKKyAgMy4gVGhlIGNvbW1hbmQtbGluZSBmbGFnIC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxuYW1lPiBzcGVjaWZpZXMKKyAgICAgYSBuYW1lIG9mIHRoZSBmaWxlIGluIGVhY2ggZGlyZWN0b3J5ICdnaXQgbHMtZmlsZXMnCisgICAgIGV4YW1pbmVzLCBub3JtYWxseSBgLmdpdGlnbm9yZWAuICBGaWxlcyBpbiBkZWVwZXIKKyAgICAgZGlyZWN0b3JpZXMgdGFrZSBwcmVjZWRlbmNlLiAgUGF0dGVybnMgYXJlIG9yZGVyZWQgaW4gdGhlCisgICAgIHNhbWUgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIGZpbGVzLgorCitBIHBhdHRlcm4gc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCAtLWV4Y2x1ZGUgb3IgcmVhZAorZnJvbSB0aGUgZmlsZSBzcGVjaWZpZWQgd2l0aCAtLWV4Y2x1ZGUtZnJvbSBpcyByZWxhdGl2ZSB0byB0aGUKK3RvcCBvZiB0aGUgZGlyZWN0b3J5IHRyZWUuICBBIHBhdHRlcm4gcmVhZCBmcm9tIGEgZmlsZSBzcGVjaWZpZWQKK2J5IC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5IGlzIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGUKK3BhdHRlcm4gZmlsZSBhcHBlYXJzIGluLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXJlYWQtdHJlZVsxXSwgbGlua2dpdDpnaXRpZ25vcmVbNV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy1yZW1vdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtcmVtb3RlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTVjOGI3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtcmVtb3RlLnR4dApAQCAtMCwwICsxLDEyMSBAQAorZ2l0LWxzLXJlbW90ZSgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbHMtcmVtb3RlIC0gTGlzdCByZWZlcmVuY2VzIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbHMtcmVtb3RlJyBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XQorCSAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF0gWy0tc29ydD08a2V5Pl0KKwkgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorRGlzcGxheXMgcmVmZXJlbmNlcyBhdmFpbGFibGUgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSBhbG9uZyB3aXRoIHRoZSBhc3NvY2lhdGVkCitjb21taXQgSURzLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1oOjoKKy0taGVhZHM6OgorLXQ6OgorLS10YWdzOjoKKwlMaW1pdCB0byBvbmx5IHJlZnMvaGVhZHMgYW5kIHJlZnMvdGFncywgcmVzcGVjdGl2ZWx5LgorCVRoZXNlIG9wdGlvbnMgYXJlIF9ub3RfIG11dHVhbGx5IGV4Y2x1c2l2ZTsgd2hlbiBnaXZlbgorCWJvdGgsIHJlZmVyZW5jZXMgc3RvcmVkIGluIHJlZnMvaGVhZHMgYW5kIHJlZnMvdGFncyBhcmUKKwlkaXNwbGF5ZWQuICBOb3RlIHRoYXQgYGdpdCBscy1yZW1vdGUgLWhgIHVzZWQgd2l0aG91dAorCWFueXRoaW5nIGVsc2Ugb24gdGhlIGNvbW1hbmQgbGluZSBnaXZlcyBoZWxwLCBjb25zaXN0ZW50CisJd2l0aCBvdGhlciBnaXQgc3ViY29tbWFuZHMuCisKKy0tcmVmczo6CisJRG8gbm90IHNob3cgcGVlbGVkIHRhZ3Mgb3IgcHNldWRvcmVmcyBsaWtlIGBIRUFEYCBpbiB0aGUgb3V0cHV0LgorCistcTo6CistLXF1aWV0OjoKKwlEbyBub3QgcHJpbnQgcmVtb3RlIFVSTCB0byBzdGRlcnIuCisKKy0tdXBsb2FkLXBhY2s9PGV4ZWM+OjoKKwlTcGVjaWZ5IHRoZSBmdWxsIHBhdGggb2YgJ2dpdC11cGxvYWQtcGFjaycgb24gdGhlIHJlbW90ZQorCWhvc3QuIFRoaXMgYWxsb3dzIGxpc3RpbmcgcmVmZXJlbmNlcyBmcm9tIHJlcG9zaXRvcmllcyBhY2Nlc3NlZCB2aWEKKwlTU0ggYW5kIHdoZXJlIHRoZSBTU0ggZGFlbW9uIGRvZXMgbm90IHVzZSB0aGUgUEFUSCBjb25maWd1cmVkIGJ5IHRoZQorCXVzZXIuCisKKy0tZXhpdC1jb2RlOjoKKwlFeGl0IHdpdGggc3RhdHVzICIyIiB3aGVuIG5vIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kIGluIHRoZSByZW1vdGUKKwlyZXBvc2l0b3J5LiBVc3VhbGx5IHRoZSBjb21tYW5kIGV4aXRzIHdpdGggc3RhdHVzICIwIiB0byBpbmRpY2F0ZQorCWl0IHN1Y2Nlc3NmdWxseSB0YWxrZWQgd2l0aCB0aGUgcmVtb3RlIHJlcG9zaXRvcnksIHdoZXRoZXIgaXQKKwlmb3VuZCBhbnkgbWF0Y2hpbmcgcmVmcy4KKworLS1nZXQtdXJsOjoKKwlFeHBhbmQgdGhlIFVSTCBvZiB0aGUgZ2l2ZW4gcmVtb3RlIHJlcG9zaXRvcnkgdGFraW5nIGludG8gYWNjb3VudCBhbnkKKwkidXJsLjxiYXNlPi5pbnN0ZWFkT2YiIGNvbmZpZyBzZXR0aW5nIChTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKSBhbmQKKwlleGl0IHdpdGhvdXQgdGFsa2luZyB0byB0aGUgcmVtb3RlLgorCistLXN5bXJlZjo6CisJSW4gYWRkaXRpb24gdG8gdGhlIG9iamVjdCBwb2ludGVkIGJ5IGl0LCBzaG93IHRoZSB1bmRlcmx5aW5nCisJcmVmIHBvaW50ZWQgYnkgaXQgd2hlbiBzaG93aW5nIGEgc3ltYm9saWMgcmVmLiAgQ3VycmVudGx5LAorCXVwbG9hZC1wYWNrIG9ubHkgc2hvd3MgdGhlIHN5bXJlZiBIRUFELCBzbyBpdCB3aWxsIGJlIHRoZSBvbmx5CisJb25lIHNob3duIGJ5IGxzLXJlbW90ZS4KKworLS1zb3J0PTxrZXk+OjoKKwlTb3J0IGJhc2VkIG9uIHRoZSBrZXkgZ2l2ZW4uIFByZWZpeCBgLWAgdG8gc29ydCBpbiBkZXNjZW5kaW5nIG9yZGVyCisJb2YgdGhlIHZhbHVlLiBTdXBwb3J0cyAidmVyc2lvbjpyZWZuYW1lIiBvciAidjpyZWZuYW1lIiAodGFnIG5hbWVzCisJYXJlIHRyZWF0ZWQgYXMgdmVyc2lvbnMpLiBUaGUgInZlcnNpb246cmVmbmFtZSIgc29ydCBvcmRlciBjYW4gYWxzbworCWJlIGFmZmVjdGVkIGJ5IHRoZSAidmVyc2lvbnNvcnQuc3VmZml4IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCVNlZSBsaW5rZ2l0OmdpdC1mb3ItZWFjaC1yZWZbMV0gZm9yIG1vcmUgc29ydCBvcHRpb25zLCBidXQgYmUgYXdhcmUKKwlrZXlzIGxpa2UgYGNvbW1pdHRlcmRhdGVgIHRoYXQgcmVxdWlyZSBhY2Nlc3MgdG8gdGhlIG9iamVjdHMKKwl0aGVtc2VsdmVzIHdpbGwgbm90IHdvcmsgZm9yIHJlZnMgd2hvc2Ugb2JqZWN0cyBoYXZlIG5vdCB5ZXQgYmVlbgorCWZldGNoZWQgZnJvbSB0aGUgcmVtb3RlLCBhbmQgd2lsbCBnaXZlIGEgYG1pc3Npbmcgb2JqZWN0YCBlcnJvci4KKworLW8gPG9wdGlvbj46OgorLS1zZXJ2ZXItb3B0aW9uPTxvcHRpb24+OjoKKwlUcmFuc21pdCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBzZXJ2ZXIgd2hlbiBjb21tdW5pY2F0aW5nIHVzaW5nCisJcHJvdG9jb2wgdmVyc2lvbiAyLiAgVGhlIGdpdmVuIHN0cmluZyBtdXN0IG5vdCBjb250YWluIGEgTlVMIG9yIExGCisJY2hhcmFjdGVyLgorCVdoZW4gbXVsdGlwbGUgYC0tc2VydmVyLW9wdGlvbj08b3B0aW9uPmAgYXJlIGdpdmVuLCB0aGV5IGFyZSBhbGwKKwlzZW50IHRvIHRoZSBvdGhlciBzaWRlIGluIHRoZSBvcmRlciBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworPHJlcG9zaXRvcnk+OjoKKwlUaGUgInJlbW90ZSIgcmVwb3NpdG9yeSB0byBxdWVyeS4gIFRoaXMgcGFyYW1ldGVyIGNhbiBiZQorCWVpdGhlciBhIFVSTCBvciB0aGUgbmFtZSBvZiBhIHJlbW90ZSAoc2VlIHRoZSBHSVQgVVJMUyBhbmQKKwlSRU1PVEVTIHNlY3Rpb25zIG9mIGxpbmtnaXQ6Z2l0LWZldGNoWzFdKS4KKworPHJlZnM+Li4uOjoKKwlXaGVuIHVuc3BlY2lmaWVkLCBhbGwgcmVmZXJlbmNlcywgYWZ0ZXIgZmlsdGVyaW5nIGRvbmUKKwl3aXRoIC0taGVhZHMgYW5kIC0tdGFncywgYXJlIHNob3duLiAgV2hlbiA8cmVmcz4uLi4gYXJlCisJc3BlY2lmaWVkLCBvbmx5IHJlZmVyZW5jZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdHRlcm5zCisJYXJlIGRpc3BsYXllZC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKy0tLS0KKyQgZ2l0IGxzLXJlbW90ZSAtLXRhZ3MgLi8uCitkNjYwMmVjNTE5NGM4N2IwZmM4NzEwM2NhNGQ2NzI1MWM3NmYyMzNhCXJlZnMvdGFncy92MC45OQorZjI1YTI2NWEzNDJhZWQ2MDQxYWIwY2M0ODQyMjRkOWNhNTRiNmY0MQlyZWZzL3RhZ3MvdjAuOTkuMQorN2NlY2EyNzVkMDQ3YzkwYzBjN2Q1YWZiMTNhYjk3ZWZkZjUxYmQ2ZQlyZWZzL3RhZ3MvdjAuOTkuMworYzVkYjU0NTZhZTNiMDg3M2ZjNjU5YzE5ZmFmZGRlMjIzMTNjYzQ0MQlyZWZzL3RhZ3MvdjAuOTkuMgorMDkxODM4NWRiZDk2NTZjYWIwZDFkODFiYTc0NTNkNDliYmMxNjI1MAlyZWZzL3RhZ3MvanVuaW8tZ3BnLXB1YgorJCBnaXQgbHMtcmVtb3RlIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0IG1hc3RlciBwdSByYworNWZlOTc4YTUzODFmMWZiYWQyNmE4MGU2ODJkZGQyYTQwMTk2Njc0MAlyZWZzL2hlYWRzL21hc3RlcgorYzc4MWE4NGI1MjA0ZmIyOTRjOWNjYzc5ZjhiM2JhY2VlYjMyYzA2MQlyZWZzL2hlYWRzL3B1CiskIGdpdCByZW1vdGUgYWRkIGtvcmcgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQKKyQgZ2l0IGxzLXJlbW90ZSAtLXRhZ3Mga29yZyB2XCoKK2Q2NjAyZWM1MTk0Yzg3YjBmYzg3MTAzY2E0ZDY3MjUxYzc2ZjIzM2EJcmVmcy90YWdzL3YwLjk5CitmMjVhMjY1YTM0MmFlZDYwNDFhYjBjYzQ4NDIyNGQ5Y2E1NGI2ZjQxCXJlZnMvdGFncy92MC45OS4xCitjNWRiNTQ1NmFlM2IwODczZmM2NTljMTlmYWZkZGUyMjMxM2NjNDQxCXJlZnMvdGFncy92MC45OS4yCis3Y2VjYTI3NWQwNDdjOTBjMGM3ZDVhZmIxM2FiOTdlZmRmNTFiZDZlCXJlZnMvdGFncy92MC45OS4zCistLS0tCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtY2hlY2stcmVmLWZvcm1hdFsxXS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NTE1NzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dApAQCAtMCwwICsxLDEwNCBAQAorZ2l0LWxzLXRyZWUoMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1scy10cmVlIC0gTGlzdCB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBscy10cmVlJyBbLWRdIFstcl0gWy10XSBbLWxdIFstel0KKwkgICAgWy0tbmFtZS1vbmx5XSBbLS1uYW1lLXN0YXR1c10gWy0tZnVsbC1uYW1lXSBbLS1mdWxsLXRyZWVdIFstLWFiYnJldls9PG4+XV0KKwkgICAgPHRyZWUtaXNoPiBbPHBhdGg+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0xpc3RzIHRoZSBjb250ZW50cyBvZiBhIGdpdmVuIHRyZWUgb2JqZWN0LCBsaWtlIHdoYXQgIi9iaW4vbHMgLWEiIGRvZXMKK2luIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAgTm90ZSB0aGF0OgorCisgLSB0aGUgYmVoYXZpb3VyIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIHRoYXQgb2YgIi9iaW4vbHMiIGluIHRoYXQgdGhlCisgICAnPHBhdGg+JyBkZW5vdGVzIGp1c3QgYSBsaXN0IG9mIHBhdHRlcm5zIHRvIG1hdGNoLCBlLmcuIHNvIHNwZWNpZnlpbmcKKyAgIGRpcmVjdG9yeSBuYW1lICh3aXRob3V0IGAtcmApIHdpbGwgYmVoYXZlIGRpZmZlcmVudGx5LCBhbmQgb3JkZXIgb2YgdGhlCisgICBhcmd1bWVudHMgZG9lcyBub3QgbWF0dGVyLgorCisgLSB0aGUgYmVoYXZpb3VyIGlzIHNpbWlsYXIgdG8gdGhhdCBvZiAiL2Jpbi9scyIgaW4gdGhhdCB0aGUgJzxwYXRoPicgaXMKKyAgIHRha2VuIGFzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAgRS5nLiB3aGVuIHlvdSBhcmUKKyAgIGluIGEgZGlyZWN0b3J5ICdzdWInIHRoYXQgaGFzIGEgZGlyZWN0b3J5ICdkaXInLCB5b3UgY2FuIHJ1biAnZ2l0CisgICBscy10cmVlIC1yIEhFQUQgZGlyJyB0byBsaXN0IHRoZSBjb250ZW50cyBvZiB0aGUgdHJlZSAodGhhdCBpcworICAgYHN1Yi9kaXJgIGluIGBIRUFEYCkuICBZb3UgZG9uJ3Qgd2FudCB0byBnaXZlIGEgdHJlZSB0aGF0IGlzIG5vdCBhdCB0aGUKKyAgIHJvb3QgbGV2ZWwgKGUuZy4gYGdpdCBscy10cmVlIC1yIEhFQUQ6c3ViIGRpcmApIGluIHRoaXMgY2FzZSwgYXMgdGhhdAorICAgd291bGQgcmVzdWx0IGluIGFza2luZyBmb3IgYHN1Yi9zdWIvZGlyYCBpbiB0aGUgYEhFQURgIGNvbW1pdC4KKyAgIEhvd2V2ZXIsIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGNhbiBiZSBpZ25vcmVkIGJ5IHBhc3NpbmcKKyAgIC0tZnVsbC10cmVlIG9wdGlvbi4KKworT1BUSU9OUworLS0tLS0tLQorPHRyZWUtaXNoPjo6CisJSWQgb2YgYSB0cmVlLWlzaC4KKworLWQ6OgorCVNob3cgb25seSB0aGUgbmFtZWQgdHJlZSBlbnRyeSBpdHNlbGYsIG5vdCBpdHMgY2hpbGRyZW4uCisKKy1yOjoKKwlSZWN1cnNlIGludG8gc3ViLXRyZWVzLgorCistdDo6CisJU2hvdyB0cmVlIGVudHJpZXMgZXZlbiB3aGVuIGdvaW5nIHRvIHJlY3Vyc2UgdGhlbS4gSGFzIG5vIGVmZmVjdAorCWlmIGAtcmAgd2FzIG5vdCBwYXNzZWQuIGAtZGAgaW1wbGllcyBgLXRgLgorCistbDo6CistLWxvbmc6OgorCVNob3cgb2JqZWN0IHNpemUgb2YgYmxvYiAoZmlsZSkgZW50cmllcy4KKworLXo6OgorCVwwIGxpbmUgdGVybWluYXRpb24gb24gb3V0cHV0IGFuZCBkbyBub3QgcXVvdGUgZmlsZW5hbWVzLgorCVNlZSBPVVRQVVQgRk9STUFUIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCistLW5hbWUtb25seTo6CistLW5hbWUtc3RhdHVzOjoKKwlMaXN0IG9ubHkgZmlsZW5hbWVzIChpbnN0ZWFkIG9mIHRoZSAibG9uZyIgb3V0cHV0KSwgb25lIHBlciBsaW5lLgorCistLWFiYnJldls9PG4+XTo6CisJSW5zdGVhZCBvZiBzaG93aW5nIHRoZSBmdWxsIDQwLWJ5dGUgaGV4YWRlY2ltYWwgb2JqZWN0CisJbGluZXMsIHNob3cgb25seSBhIHBhcnRpYWwgcHJlZml4LgorCU5vbiBkZWZhdWx0IG51bWJlciBvZiBkaWdpdHMgY2FuIGJlIHNwZWNpZmllZCB3aXRoIC0tYWJicmV2PTxuPi4KKworLS1mdWxsLW5hbWU6OgorCUluc3RlYWQgb2Ygc2hvd2luZyB0aGUgcGF0aCBuYW1lcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nCisJZGlyZWN0b3J5LCBzaG93IHRoZSBmdWxsIHBhdGggbmFtZXMuCisKKy0tZnVsbC10cmVlOjoKKwlEbyBub3QgbGltaXQgdGhlIGxpc3RpbmcgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisJSW1wbGllcyAtLWZ1bGwtbmFtZS4KKworWzxwYXRoPi4uLl06OgorCVdoZW4gcGF0aHMgYXJlIGdpdmVuLCBzaG93IHRoZW0gKG5vdGUgdGhhdCB0aGlzIGlzbid0IHJlYWxseSByYXcKKwlwYXRobmFtZXMsIGJ1dCByYXRoZXIgYSBsaXN0IG9mIHBhdHRlcm5zIHRvIG1hdGNoKS4gIE90aGVyd2lzZQorCWltcGxpY2l0bHkgdXNlcyB0aGUgcm9vdCBsZXZlbCBvZiB0aGUgdHJlZSBhcyB0aGUgc29sZSBwYXRoIGFyZ3VtZW50LgorCisKK091dHB1dCBGb3JtYXQKKy0tLS0tLS0tLS0tLS0KKyAgICAgICAgPG1vZGU+IFNQIDx0eXBlPiBTUCA8b2JqZWN0PiBUQUIgPGZpbGU+CisKK1RoaXMgb3V0cHV0IGZvcm1hdCBpcyBjb21wYXRpYmxlIHdpdGggd2hhdCBgLS1pbmRleC1pbmZvIC0tc3RkaW5gIG9mCisnZ2l0IHVwZGF0ZS1pbmRleCcgZXhwZWN0cy4KKworV2hlbiB0aGUgYC1sYCBvcHRpb24gaXMgdXNlZCwgZm9ybWF0IGNoYW5nZXMgdG8KKworICAgICAgICA8bW9kZT4gU1AgPHR5cGU+IFNQIDxvYmplY3Q+IFNQIDxvYmplY3Qgc2l6ZT4gVEFCIDxmaWxlPgorCitPYmplY3Qgc2l6ZSBpZGVudGlmaWVkIGJ5IDxvYmplY3Q+IGlzIGdpdmVuIGluIGJ5dGVzLCBhbmQgcmlnaHQtanVzdGlmaWVkCit3aXRoIG1pbmltdW0gd2lkdGggb2YgNyBjaGFyYWN0ZXJzLiAgT2JqZWN0IHNpemUgaXMgZ2l2ZW4gb25seSBmb3IgYmxvYnMKKyhmaWxlKSBlbnRyaWVzOyBmb3Igb3RoZXIgZW50cmllcyBgLWAgY2hhcmFjdGVyIGlzIHVzZWQgaW4gcGxhY2Ugb2Ygc2l6ZS4KKworV2l0aG91dCB0aGUgYC16YCBvcHRpb24sIHBhdGhuYW1lcyB3aXRoICJ1bnVzdWFsIiBjaGFyYWN0ZXJzIGFyZQorcXVvdGVkIGFzIGV4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYAorKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLiAgVXNpbmcgYC16YCB0aGUgZmlsZW5hbWUgaXMgb3V0cHV0Cit2ZXJiYXRpbSBhbmQgdGhlIGxpbmUgaXMgdGVybWluYXRlZCBieSBhIE5VTCBieXRlLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1haWxpbmZvLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1haWxpbmZvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmJjNzMxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWFpbGluZm8udHh0CkBAIC0wLDAgKzEsMTAyIEBACitnaXQtbWFpbGluZm8oMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbWFpbGluZm8gLSBFeHRyYWN0cyBwYXRjaCBhbmQgYXV0aG9yc2hpcCBmcm9tIGEgc2luZ2xlIGUtbWFpbCBtZXNzYWdlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG1haWxpbmZvJyBbLWt8LWJdIFstdSB8IC0tZW5jb2Rpbmc9PGVuY29kaW5nPiB8IC1uXSBbLS1bbm8tXXNjaXNzb3JzXSA8bXNnPiA8cGF0Y2g+CisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkcyBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgYW5kCit3cml0ZXMgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBpbiA8bXNnPiBmaWxlLCBhbmQgdGhlIHBhdGNoZXMgaW4KKzxwYXRjaD4gZmlsZS4gIFRoZSBhdXRob3IgbmFtZSwgZS1tYWlsIGFuZCBlLW1haWwgc3ViamVjdCBhcmUKK3dyaXR0ZW4gb3V0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgdG8gYmUgdXNlZCBieSAnZ2l0IGFtJwordG8gY3JlYXRlIGEgY29tbWl0LiAgSXQgaXMgdXN1YWxseSBub3QgbmVjZXNzYXJ5IHRvIHVzZSB0aGlzCitjb21tYW5kIGRpcmVjdGx5LiAgU2VlIGxpbmtnaXQ6Z2l0LWFtWzFdIGluc3RlYWQuCisKKworT1BUSU9OUworLS0tLS0tLQorLWs6OgorCVVzdWFsbHkgdGhlIHByb2dyYW0gcmVtb3ZlcyBlbWFpbCBjcnVmdCBmcm9tIHRoZSBTdWJqZWN0OgorCWhlYWRlciBsaW5lIHRvIGV4dHJhY3QgdGhlIHRpdGxlIGxpbmUgZm9yIHRoZSBjb21taXQgbG9nCisJbWVzc2FnZS4gIFRoaXMgb3B0aW9uIHByZXZlbnRzIHRoaXMgbXVuZ2luZywgYW5kIGlzIG1vc3QKKwl1c2VmdWwgd2hlbiB1c2VkIHRvIHJlYWQgYmFjayAnZ2l0IGZvcm1hdC1wYXRjaCAtaycgb3V0cHV0LgorKworU3BlY2lmaWNhbGx5LCB0aGUgZm9sbG93aW5nIGFyZSByZW1vdmVkIHVudGlsIG5vbmUgb2YgdGhlbSByZW1haW46CisrCistLQorKglMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLgorCisqCUxlYWRpbmcgYFJlOmAsIGByZTpgLCBhbmQgYDpgLgorCisqCUxlYWRpbmcgYnJhY2tldGVkIHN0cmluZ3MgKGJldHdlZW4gYFtgIGFuZCBgXWAsIHVzdWFsbHkKKwlgW1BBVENIXWApLgorLS0KKysKK0ZpbmFsbHksIHJ1bnMgb2Ygd2hpdGVzcGFjZSBhcmUgbm9ybWFsaXplZCB0byBhIHNpbmdsZSBBU0NJSSBzcGFjZQorY2hhcmFjdGVyLgorCistYjo6CisJV2hlbiAtayBpcyBub3QgaW4gZWZmZWN0LCBhbGwgbGVhZGluZyBzdHJpbmdzIGJyYWNrZXRlZCB3aXRoICdbJworCWFuZCAnXScgcGFpcnMgYXJlIHN0cmlwcGVkLiAgVGhpcyBvcHRpb24gbGltaXRzIHRoZSBzdHJpcHBpbmcgdG8KKwlvbmx5IHRoZSBwYWlycyB3aG9zZSBicmFja2V0ZWQgc3RyaW5nIGNvbnRhaW5zIHRoZSB3b3JkICJQQVRDSCIuCisKKy11OjoKKwlUaGUgY29tbWl0IGxvZyBtZXNzYWdlLCBhdXRob3IgbmFtZSBhbmQgYXV0aG9yIGVtYWlsIGFyZQorCXRha2VuIGZyb20gdGhlIGUtbWFpbCwgYW5kIGFmdGVyIG1pbmltYWxseSBkZWNvZGluZyBNSU1FCisJdHJhbnNmZXIgZW5jb2RpbmcsIHJlLWNvZGVkIGluIHRoZSBjaGFyc2V0IHNwZWNpZmllZCBieQorCWkxOG4uY29tbWl0ZW5jb2RpbmcgKGRlZmF1bHRpbmcgdG8gVVRGLTgpIGJ5IHRyYW5zbGl0ZXJhdGluZworCXRoZW0uICBUaGlzIHVzZWQgdG8gYmUgb3B0aW9uYWwgYnV0IG5vdyBpdCBpcyB0aGUgZGVmYXVsdC4KKysKK05vdGUgdGhhdCB0aGUgcGF0Y2ggaXMgYWx3YXlzIHVzZWQgYXMtaXMgd2l0aG91dCBjaGFyc2V0Citjb252ZXJzaW9uLCBldmVuIHdpdGggdGhpcyBmbGFnLgorCistLWVuY29kaW5nPTxlbmNvZGluZz46OgorCVNpbWlsYXIgdG8gLXUuICBCdXQgd2hlbiByZS1jb2RpbmcsIHRoZSBjaGFyc2V0IHNwZWNpZmllZCBoZXJlIGlzCisJdXNlZCBpbnN0ZWFkIG9mIHRoZSBvbmUgc3BlY2lmaWVkIGJ5IGkxOG4uY29tbWl0ZW5jb2Rpbmcgb3IgVVRGLTguCisKKy1uOjoKKwlEaXNhYmxlIGFsbCBjaGFyc2V0IHJlLWNvZGluZyBvZiB0aGUgbWV0YWRhdGEuCisKKy1tOjoKKy0tbWVzc2FnZS1pZDo6CisJQ29weSB0aGUgTWVzc2FnZS1JRCBoZWFkZXIgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UuICBUaGlzCisJaXMgdXNlZnVsIGluIG9yZGVyIHRvIGFzc29jaWF0ZSBjb21taXRzIHdpdGggbWFpbGluZyBsaXN0IGRpc2N1c3Npb25zLgorCistLXNjaXNzb3JzOjoKKwlSZW1vdmUgZXZlcnl0aGluZyBpbiBib2R5IGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUuICBBIGxpbmUgdGhhdAorCW1haW5seSBjb25zaXN0cyBvZiBzY2lzc29ycyAoZWl0aGVyICI+OCIgb3IgIjg8IikgYW5kIHBlcmZvcmF0aW9uCisJKGRhc2ggIi0iKSBtYXJrcyBpcyBjYWxsZWQgYSBzY2lzc29ycyBsaW5lLCBhbmQgaXMgdXNlZCB0byByZXF1ZXN0CisJdGhlIHJlYWRlciB0byBjdXQgdGhlIG1lc3NhZ2UgYXQgdGhhdCBsaW5lLiAgSWYgc3VjaCBhIGxpbmUKKwlhcHBlYXJzIGluIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlIGJlZm9yZSB0aGUgcGF0Y2gsIGV2ZXJ5dGhpbmcKKwliZWZvcmUgaXQgKGluY2x1ZGluZyB0aGUgc2Npc3NvcnMgbGluZSBpdHNlbGYpIGlzIGlnbm9yZWQgd2hlbgorCXRoaXMgb3B0aW9uIGlzIHVzZWQuCisrCitUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBiZWdpbiB5b3VyIG1lc3NhZ2UgaW4gYSBkaXNjdXNzaW9uIHRocmVhZAord2l0aCBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgb24gdGhlIG1lc3NhZ2UgeW91IGFyZSByZXNwb25kaW5nIHRvLCBhbmQgdG8KK2NvbmNsdWRlIGl0IHdpdGggYSBwYXRjaCBzdWJtaXNzaW9uLCBzZXBhcmF0aW5nIHRoZSBkaXNjdXNzaW9uIGFuZCB0aGUKK2JlZ2lubmluZyBvZiB0aGUgcHJvcG9zZWQgY29tbWl0IGxvZyBtZXNzYWdlIHdpdGggYSBzY2lzc29ycyBsaW5lLgorKworVGhpcyBjYW4gYmUgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG1haWxpbmZvLnNjaXNzb3JzLgorCistLW5vLXNjaXNzb3JzOjoKKwlJZ25vcmUgc2Npc3NvcnMgbGluZXMuIFVzZWZ1bCBmb3Igb3ZlcnJpZGluZyBtYWlsaW5mby5zY2lzc29ycyBzZXR0aW5ncy4KKworPG1zZz46OgorCVRoZSBjb21taXQgbG9nIG1lc3NhZ2UgZXh0cmFjdGVkIGZyb20gZS1tYWlsLCB1c3VhbGx5CisJZXhjZXB0IHRoZSB0aXRsZSBsaW5lIHdoaWNoIGNvbWVzIGZyb20gZS1tYWlsIFN1YmplY3QuCisKKzxwYXRjaD46OgorCVRoZSBwYXRjaCBleHRyYWN0ZWQgZnJvbSBlLW1haWwuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWFpbHNwbGl0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1haWxzcGxpdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNiMmE4OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1haWxzcGxpdC50eHQKQEAgLTAsMCArMSw1NyBAQAorZ2l0LW1haWxzcGxpdCgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbWFpbHNwbGl0IC0gU2ltcGxlIFVOSVggbWJveCBzcGxpdHRlciBwcm9ncmFtCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtYWlsc3BsaXQnIFstYl0gWy1mPG5uPl0gWy1kPHByZWM+XSBbLS1rZWVwLWNyXSBbLS1tYm94cmRdCisJCS1vPGRpcmVjdG9yeT4gWy0tXSBbKDxtYm94Pnw8TWFpbGRpcj4pLi4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1NwbGl0cyBhIG1ib3ggZmlsZSBvciBhIE1haWxkaXIgaW50byBhIGxpc3Qgb2YgZmlsZXM6ICIwMDAxIiAiMDAwMiIgLi4gIGluIHRoZQorc3BlY2lmaWVkIGRpcmVjdG9yeSBzbyB5b3UgY2FuIHByb2Nlc3MgdGhlbSBmdXJ0aGVyIGZyb20gdGhlcmUuCisKK0lNUE9SVEFOVDogTWFpbGRpciBzcGxpdHRpbmcgcmVsaWVzIHVwb24gZmlsZW5hbWVzIGJlaW5nIHNvcnRlZCB0byBvdXRwdXQKK3BhdGNoZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCisKK09QVElPTlMKKy0tLS0tLS0KKzxtYm94Pjo6CisJTWJveCBmaWxlIHRvIHNwbGl0LiAgSWYgbm90IGdpdmVuLCB0aGUgbWJveCBpcyByZWFkIGZyb20KKwl0aGUgc3RhbmRhcmQgaW5wdXQuCisKKzxNYWlsZGlyPjo6CisJUm9vdCBvZiB0aGUgTWFpbGRpciB0byBzcGxpdC4gVGhpcyBkaXJlY3Rvcnkgc2hvdWxkIGNvbnRhaW4gdGhlIGN1ciwgdG1wCisJYW5kIG5ldyBzdWJkaXJlY3Rvcmllcy4KKworLW88ZGlyZWN0b3J5Pjo6CisJRGlyZWN0b3J5IGluIHdoaWNoIHRvIHBsYWNlIHRoZSBpbmRpdmlkdWFsIG1lc3NhZ2VzLgorCistYjo6CisJSWYgYW55IGZpbGUgZG9lc24ndCBiZWdpbiB3aXRoIGEgRnJvbSBsaW5lLCBhc3N1bWUgaXQgaXMgYQorCXNpbmdsZSBtYWlsIG1lc3NhZ2UgaW5zdGVhZCBvZiBzaWduYWxpbmcgZXJyb3IuCisKKy1kPHByZWM+OjoKKwlJbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IDQgZGlnaXRzIHdpdGggbGVhZGluZyB6ZXJvcywKKwlkaWZmZXJlbnQgcHJlY2lzaW9uIGNhbiBiZSBzcGVjaWZpZWQgZm9yIHRoZSBnZW5lcmF0ZWQKKwlmaWxlbmFtZXMuCisKKy1mPG5uPjo6CisJU2tpcCB0aGUgZmlyc3QgPG5uPiBudW1iZXJzLCBmb3IgZXhhbXBsZSBpZiAtZjMgaXMgc3BlY2lmaWVkLAorCXN0YXJ0IHRoZSBudW1iZXJpbmcgd2l0aCAwMDA0LgorCistLWtlZXAtY3I6OgorCURvIG5vdCByZW1vdmUgYFxyYCBmcm9tIGxpbmVzIGVuZGluZyB3aXRoIGBcclxuYC4KKworLS1tYm94cmQ6OgorCUlucHV0IGlzIG9mIHRoZSAibWJveHJkIiBmb3JtYXQgYW5kICJePitGcm9tICIgbGluZSBlc2NhcGluZyBpcworCXJldmVyc2VkLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtYmFzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5NDRlMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0CkBAIC0wLDAgKzEsMjQ3IEBACitnaXQtbWVyZ2UtYmFzZSgxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1lcmdlLWJhc2UgLSBGaW5kIGFzIGdvb2QgY29tbW9uIGFuY2VzdG9ycyBhcyBwb3NzaWJsZSBmb3IgYSBtZXJnZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtZXJnZS1iYXNlJyBbLWF8LS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uCisnZ2l0IG1lcmdlLWJhc2UnIFstYXwtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uCisnZ2l0IG1lcmdlLWJhc2UnIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4KKydnaXQgbWVyZ2UtYmFzZScgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLgorJ2dpdCBtZXJnZS1iYXNlJyAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworJ2dpdCBtZXJnZS1iYXNlJyBmaW5kcyBiZXN0IGNvbW1vbiBhbmNlc3RvcihzKSBiZXR3ZWVuIHR3byBjb21taXRzIHRvIHVzZQoraW4gYSB0aHJlZS13YXkgbWVyZ2UuICBPbmUgY29tbW9uIGFuY2VzdG9yIGlzICdiZXR0ZXInIHRoYW4gYW5vdGhlciBjb21tb24KK2FuY2VzdG9yIGlmIHRoZSBsYXR0ZXIgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGZvcm1lci4gIEEgY29tbW9uIGFuY2VzdG9yCit0aGF0IGRvZXMgbm90IGhhdmUgYW55IGJldHRlciBjb21tb24gYW5jZXN0b3IgaXMgYSAnYmVzdCBjb21tb24KK2FuY2VzdG9yJywgaS5lLiBhICdtZXJnZSBiYXNlJy4gIE5vdGUgdGhhdCB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZQorbWVyZ2UgYmFzZSBmb3IgYSBwYWlyIG9mIGNvbW1pdHMuCisKK09QRVJBVElPTiBNT0RFUworLS0tLS0tLS0tLS0tLS0tCisKK0FzIHRoZSBtb3N0IGNvbW1vbiBzcGVjaWFsIGNhc2UsIHNwZWNpZnlpbmcgb25seSB0d28gY29tbWl0cyBvbiB0aGUKK2NvbW1hbmQgbGluZSBtZWFucyBjb21wdXRpbmcgdGhlIG1lcmdlIGJhc2UgYmV0d2VlbiB0aGUgZ2l2ZW4gdHdvIGNvbW1pdHMuCisKK01vcmUgZ2VuZXJhbGx5LCBhbW9uZyB0aGUgdHdvIGNvbW1pdHMgdG8gY29tcHV0ZSB0aGUgbWVyZ2UgYmFzZSBmcm9tLAorb25lIGlzIHNwZWNpZmllZCBieSB0aGUgZmlyc3QgY29tbWl0IGFyZ3VtZW50IG9uIHRoZSBjb21tYW5kIGxpbmU7Cit0aGUgb3RoZXIgY29tbWl0IGlzIGEgKHBvc3NpYmx5IGh5cG90aGV0aWNhbCkgY29tbWl0IHRoYXQgaXMgYSBtZXJnZQorYWNyb3NzIGFsbCB0aGUgcmVtYWluaW5nIGNvbW1pdHMgb24gdGhlIGNvbW1hbmQgbGluZS4KKworQXMgYSBjb25zZXF1ZW5jZSwgdGhlICdtZXJnZSBiYXNlJyBpcyBub3QgbmVjZXNzYXJpbHkgY29udGFpbmVkIGluIGVhY2ggb2YgdGhlCitjb21taXQgYXJndW1lbnRzIGlmIG1vcmUgdGhhbiB0d28gY29tbWl0cyBhcmUgc3BlY2lmaWVkLiBUaGlzIGlzIGRpZmZlcmVudAorZnJvbSBsaW5rZ2l0OmdpdC1zaG93LWJyYW5jaFsxXSB3aGVuIHVzZWQgd2l0aCB0aGUgYC0tbWVyZ2UtYmFzZWAgb3B0aW9uLgorCistLW9jdG9wdXM6OgorCUNvbXB1dGUgdGhlIGJlc3QgY29tbW9uIGFuY2VzdG9ycyBvZiBhbGwgc3VwcGxpZWQgY29tbWl0cywKKwlpbiBwcmVwYXJhdGlvbiBmb3IgYW4gbi13YXkgbWVyZ2UuICBUaGlzIG1pbWljcyB0aGUgYmVoYXZpb3IKKwlvZiAnZ2l0IHNob3ctYnJhbmNoIC0tbWVyZ2UtYmFzZScuCisKKy0taW5kZXBlbmRlbnQ6OgorCUluc3RlYWQgb2YgcHJpbnRpbmcgbWVyZ2UgYmFzZXMsIHByaW50IGEgbWluaW1hbCBzdWJzZXQgb2YKKwl0aGUgc3VwcGxpZWQgY29tbWl0cyB3aXRoIHRoZSBzYW1lIGFuY2VzdG9ycy4gIEluIG90aGVyIHdvcmRzLAorCWFtb25nIHRoZSBjb21taXRzIGdpdmVuLCBsaXN0IHRob3NlIHdoaWNoIGNhbm5vdCBiZSByZWFjaGVkCisJZnJvbSBhbnkgb3RoZXIuICBUaGlzIG1pbWljcyB0aGUgYmVoYXZpb3Igb2YgJ2dpdCBzaG93LWJyYW5jaAorCS0taW5kZXBlbmRlbnQnLgorCistLWlzLWFuY2VzdG9yOjoKKwlDaGVjayBpZiB0aGUgZmlyc3QgPGNvbW1pdD4gaXMgYW4gYW5jZXN0b3Igb2YgdGhlIHNlY29uZCA8Y29tbWl0PiwKKwlhbmQgZXhpdCB3aXRoIHN0YXR1cyAwIGlmIHRydWUsIG9yIHdpdGggc3RhdHVzIDEgaWYgbm90LgorCUVycm9ycyBhcmUgc2lnbmFsZWQgYnkgYSBub24temVybyBzdGF0dXMgdGhhdCBpcyBub3QgMS4KKworLS1mb3JrLXBvaW50OjoKKwlGaW5kIHRoZSBwb2ludCBhdCB3aGljaCBhIGJyYW5jaCAob3IgYW55IGhpc3RvcnkgdGhhdCBsZWFkcworCXRvIDxjb21taXQ+KSBmb3JrZWQgZnJvbSBhbm90aGVyIGJyYW5jaCAob3IgYW55IHJlZmVyZW5jZSkKKwk8cmVmPi4gVGhpcyBkb2VzIG5vdCBqdXN0IGxvb2sgZm9yIHRoZSBjb21tb24gYW5jZXN0b3Igb2YKKwl0aGUgdHdvIGNvbW1pdHMsIGJ1dCBhbHNvIHRha2VzIGludG8gYWNjb3VudCB0aGUgcmVmbG9nIG9mCisJPHJlZj4gdG8gc2VlIGlmIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gPGNvbW1pdD4gZm9ya2VkIGZyb20KKwlhbiBlYXJsaWVyIGluY2FybmF0aW9uIG9mIHRoZSBicmFuY2ggPHJlZj4gKHNlZSBkaXNjdXNzaW9uCisJb24gdGhpcyBtb2RlIGJlbG93KS4KKworT1BUSU9OUworLS0tLS0tLQorLWE6OgorLS1hbGw6OgorCU91dHB1dCBhbGwgbWVyZ2UgYmFzZXMgZm9yIHRoZSBjb21taXRzLCBpbnN0ZWFkIG9mIGp1c3Qgb25lLgorCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK0dpdmVuIHR3byBjb21taXRzICdBJyBhbmQgJ0InLCBgZ2l0IG1lcmdlLWJhc2UgQSBCYCB3aWxsIG91dHB1dCBhIGNvbW1pdAord2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gYm90aCAnQScgYW5kICdCJyB0aHJvdWdoIHRoZSBwYXJlbnQgcmVsYXRpb25zaGlwLgorCitGb3IgZXhhbXBsZSwgd2l0aCB0aGlzIHRvcG9sb2d5OgorCisuLi4uCisJIG8tLS1vLS0tby0tLUIKKwkvCistLS1vLS0tMS0tLW8tLS1vLS0tby0tLUEKKy4uLi4KKwordGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAnQScgYW5kICdCJyBpcyAnMScuCisKK0dpdmVuIHRocmVlIGNvbW1pdHMgJ0EnLCAnQicgYW5kICdDJywgYGdpdCBtZXJnZS1iYXNlIEEgQiBDYCB3aWxsIGNvbXB1dGUgdGhlCittZXJnZSBiYXNlIGJldHdlZW4gJ0EnIGFuZCBhIGh5cG90aGV0aWNhbCBjb21taXQgJ00nLCB3aGljaCBpcyBhIG1lcmdlCitiZXR3ZWVuICdCJyBhbmQgJ0MnLiAgRm9yIGV4YW1wbGUsIHdpdGggdGhpcyB0b3BvbG9neToKKworLi4uLgorICAgICAgIG8tLS1vLS0tby0tLW8tLS1DCisgICAgICAvCisgICAgIC8gICBvLS0tby0tLW8tLS1CCisgICAgLyAgIC8KKy0tLTItLS0xLS0tby0tLW8tLS1vLS0tQQorLi4uLgorCit0aGUgcmVzdWx0IG9mIGBnaXQgbWVyZ2UtYmFzZSBBIEIgQ2AgaXMgJzEnLiAgVGhpcyBpcyBiZWNhdXNlIHRoZQorZXF1aXZhbGVudCB0b3BvbG9neSB3aXRoIGEgbWVyZ2UgY29tbWl0ICdNJyBiZXR3ZWVuICdCJyBhbmQgJ0MnIGlzOgorCisKKy4uLi4KKyAgICAgICBvLS0tby0tLW8tLS1vLS0tbworICAgICAgLyAgICAgICAgICAgICAgICAgXAorICAgICAvICAgby0tLW8tLS1vLS0tby0tLU0KKyAgICAvICAgLworLS0tMi0tLTEtLS1vLS0tby0tLW8tLS1BCisuLi4uCisKK2FuZCB0aGUgcmVzdWx0IG9mIGBnaXQgbWVyZ2UtYmFzZSBBIE1gIGlzICcxJy4gIENvbW1pdCAnMicgaXMgYWxzbyBhCitjb21tb24gYW5jZXN0b3IgYmV0d2VlbiAnQScgYW5kICdNJywgYnV0ICcxJyBpcyBhIGJldHRlciBjb21tb24gYW5jZXN0b3IsCitiZWNhdXNlICcyJyBpcyBhbiBhbmNlc3RvciBvZiAnMScuICBIZW5jZSwgJzInIGlzIG5vdCBhIG1lcmdlIGJhc2UuCisKK1RoZSByZXN1bHQgb2YgYGdpdCBtZXJnZS1iYXNlIC0tb2N0b3B1cyBBIEIgQ2AgaXMgJzInLCBiZWNhdXNlICcyJyBpcwordGhlIGJlc3QgY29tbW9uIGFuY2VzdG9yIG9mIGFsbCBjb21taXRzLgorCitXaGVuIHRoZSBoaXN0b3J5IGludm9sdmVzIGNyaXNzLWNyb3NzIG1lcmdlcywgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUKKydiZXN0JyBjb21tb24gYW5jZXN0b3IgZm9yIHR3byBjb21taXRzLiAgRm9yIGV4YW1wbGUsIHdpdGggdGhpcyB0b3BvbG9neToKKworLi4uLgorLS0tMS0tLW8tLS1BCisgICAgXCAvCisgICAgIFgKKyAgICAvIFwKKy0tLTItLS1vLS0tby0tLUIKKy4uLi4KKworYm90aCAnMScgYW5kICcyJyBhcmUgbWVyZ2UtYmFzZXMgb2YgQSBhbmQgQi4gIE5laXRoZXIgb25lIGlzIGJldHRlciB0aGFuCit0aGUgb3RoZXIgKGJvdGggYXJlICdiZXN0JyBtZXJnZSBiYXNlcykuICBXaGVuIHRoZSBgLS1hbGxgIG9wdGlvbiBpcyBub3QgZ2l2ZW4sCitpdCBpcyB1bnNwZWNpZmllZCB3aGljaCBiZXN0IG9uZSBpcyBvdXRwdXQuCisKK0EgY29tbW9uIGlkaW9tIHRvIGNoZWNrICJmYXN0LWZvcndhcmQtbmVzcyIgYmV0d2VlbiB0d28gY29tbWl0cyBBCithbmQgQiBpcyAob3IgYXQgbGVhc3QgdXNlZCB0byBiZSkgdG8gY29tcHV0ZSB0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuCitBIGFuZCBCLCBhbmQgY2hlY2sgaWYgaXQgaXMgdGhlIHNhbWUgYXMgQSwgaW4gd2hpY2ggY2FzZSwgQSBpcyBhbgorYW5jZXN0b3Igb2YgQi4gIFlvdSB3aWxsIHNlZSB0aGlzIGlkaW9tIHVzZWQgb2Z0ZW4gaW4gb2xkZXIgc2NyaXB0cy4KKworLi4uLgorQT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQSkKK2lmIHRlc3QgIiRBIiA9ICIkKGdpdCBtZXJnZS1iYXNlIEEgQikiCit0aGVuCisJLi4uIEEgaXMgYW4gYW5jZXN0b3Igb2YgQiAuLi4KK2ZpCisuLi4uCisKK0luIG1vZGVybiBnaXQsIHlvdSBjYW4gc2F5IHRoaXMgaW4gYSBtb3JlIGRpcmVjdCB3YXk6CisKKy4uLi4KK2lmIGdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgQSBCCit0aGVuCisJLi4uIEEgaXMgYW4gYW5jZXN0b3Igb2YgQiAuLi4KK2ZpCisuLi4uCisKK2luc3RlYWQuCisKK0Rpc2N1c3Npb24gb24gZm9yay1wb2ludCBtb2RlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZnRlciB3b3JraW5nIG9uIHRoZSBgdG9waWNgIGJyYW5jaCBjcmVhdGVkIHdpdGggYGdpdCBzd2l0Y2ggLWMKK3RvcGljIG9yaWdpbi9tYXN0ZXJgLCB0aGUgaGlzdG9yeSBvZiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoCitgb3JpZ2luL21hc3RlcmAgbWF5IGhhdmUgYmVlbiByZXdvdW5kIGFuZCByZWJ1aWx0LCBsZWFkaW5nIHRvIGEKK2hpc3Rvcnkgb2YgdGhpcyBzaGFwZToKKworLi4uLgorCQkgby0tLUIyCisJCS8KKy0tLW8tLS1vLS0tQjEtLW8tLS1vLS0tby0tLUIgKG9yaWdpbi9tYXN0ZXIpCisJXAorCSBCMAorCSAgXAorCSAgIEQwLS0tRDEtLS1EICh0b3BpYykKKy4uLi4KKword2hlcmUgYG9yaWdpbi9tYXN0ZXJgIHVzZWQgdG8gcG9pbnQgYXQgY29tbWl0cyBCMCwgQjEsIEIyIGFuZCBub3cgaXQKK3BvaW50cyBhdCBCLCBhbmQgeW91ciBgdG9waWNgIGJyYW5jaCB3YXMgc3RhcnRlZCBvbiB0b3Agb2YgaXQgYmFjaword2hlbiBgb3JpZ2luL21hc3RlcmAgd2FzIGF0IEIwLCBhbmQgeW91IGJ1aWx0IHRocmVlIGNvbW1pdHMsIEQwLCBEMSwKK2FuZCBELCBvbiB0b3Agb2YgaXQuICBJbWFnaW5lIHRoYXQgeW91IG5vdyB3YW50IHRvIHJlYmFzZSB0aGUgd29yaworeW91IGRpZCBvbiB0aGUgdG9waWMgb24gdG9wIG9mIHRoZSB1cGRhdGVkIG9yaWdpbi9tYXN0ZXIuCisKK0luIHN1Y2ggYSBjYXNlLCBgZ2l0IG1lcmdlLWJhc2Ugb3JpZ2luL21hc3RlciB0b3BpY2Agd291bGQgcmV0dXJuIHRoZQorcGFyZW50IG9mIEIwIGluIHRoZSBhYm92ZSBwaWN0dXJlLCBidXQgQjBeLi5EIGlzICpub3QqIHRoZSByYW5nZSBvZgorY29tbWl0cyB5b3Ugd291bGQgd2FudCB0byByZXBsYXkgb24gdG9wIG9mIEIgKGl0IGluY2x1ZGVzIEIwLCB3aGljaAoraXMgbm90IHdoYXQgeW91IHdyb3RlOyBpdCBpcyBhIGNvbW1pdCB0aGUgb3RoZXIgc2lkZSBkaXNjYXJkZWQgd2hlbgoraXQgbW92ZWQgaXRzIHRpcCBmcm9tIEIwIHRvIEIxKS4KKworYGdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCBvcmlnaW4vbWFzdGVyIHRvcGljYCBpcyBkZXNpZ25lZCB0bworaGVscCBpbiBzdWNoIGEgY2FzZS4gIEl0IHRha2VzIG5vdCBvbmx5IEIgYnV0IGFsc28gQjAsIEIxLCBhbmQgQjIKKyhpLmUuIG9sZCB0aXBzIG9mIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgeW91ciByZXBvc2l0b3J5J3MKK3JlZmxvZyBrbm93cyBhYm91dCkgaW50byBhY2NvdW50IHRvIHNlZSBvbiB3aGljaCBjb21taXQgeW91ciB0b3BpYworYnJhbmNoIHdhcyBidWlsdCBhbmQgZmluZHMgQjAsIGFsbG93aW5nIHlvdSB0byByZXBsYXkgb25seSB0aGUKK2NvbW1pdHMgb24geW91ciB0b3BpYywgZXhjbHVkaW5nIHRoZSBjb21taXRzIHRoZSBvdGhlciBzaWRlIGxhdGVyCitkaXNjYXJkZWQuCisKK0hlbmNlCisKKyAgICAkIGZvcmtfcG9pbnQ9JChnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgb3JpZ2luL21hc3RlciB0b3BpYykKKword2lsbCBmaW5kIEIwLCBhbmQKKworICAgICQgZ2l0IHJlYmFzZSAtLW9udG8gb3JpZ2luL21hc3RlciAkZm9ya19wb2ludCB0b3BpYworCit3aWxsIHJlcGxheSBEMCwgRDEgYW5kIEQgb24gdG9wIG9mIEIgdG8gY3JlYXRlIGEgbmV3IGhpc3Rvcnkgb2YgdGhpcworc2hhcGU6CisKKy4uLi4KKwkJIG8tLS1CMgorCQkvCistLS1vLS0tby0tLUIxLS1vLS0tby0tLW8tLS1CIChvcmlnaW4vbWFzdGVyKQorCVwgICAgICAgICAgICAgICAgICAgXAorCSBCMCAgICAgICAgICAgICAgICAgIEQwJy0tRDEnLS1EJyAodG9waWMgLSB1cGRhdGVkKQorCSAgXAorCSAgIEQwLS0tRDEtLS1EICh0b3BpYyAtIG9sZCkKKy4uLi4KKworQSBjYXZlYXQgaXMgdGhhdCBvbGRlciByZWZsb2cgZW50cmllcyBpbiB5b3VyIHJlcG9zaXRvcnkgbWF5IGJlCitleHBpcmVkIGJ5IGBnaXQgZ2NgLiAgSWYgQjAgbm8gbG9uZ2VyIGFwcGVhcnMgaW4gdGhlIHJlZmxvZyBvZiB0aGUKK3JlbW90ZS10cmFja2luZyBicmFuY2ggYG9yaWdpbi9tYXN0ZXJgLCB0aGUgYC0tZm9yay1wb2ludGAgbW9kZQorb2J2aW91c2x5IGNhbm5vdCBmaW5kIGl0IGFuZCBmYWlscywgYXZvaWRpbmcgdG8gZ2l2ZSBhIHJhbmRvbSBhbmQKK3VzZWxlc3MgcmVzdWx0IChzdWNoIGFzIHRoZSBwYXJlbnQgb2YgQjAsIGxpa2UgdGhlIHNhbWUgY29tbWFuZAord2l0aG91dCB0aGUgYC0tZm9yay1wb2ludGAgb3B0aW9uIGdpdmVzKS4KKworQWxzbywgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2ggeW91IHVzZSB0aGUgYC0tZm9yay1wb2ludGAgbW9kZQord2l0aCBtdXN0IGJlIHRoZSBvbmUgeW91ciB0b3BpYyBmb3JrZWQgZnJvbSBpdHMgdGlwLiAgSWYgeW91IGZvcmtlZAorZnJvbSBhbiBvbGRlciBjb21taXQgdGhhbiB0aGUgdGlwLCB0aGlzIG1vZGUgd291bGQgbm90IGZpbmQgdGhlIGZvcmsKK3BvaW50IChpbWFnaW5lIGluIHRoZSBhYm92ZSBzYW1wbGUgaGlzdG9yeSBCMCBkaWQgbm90IGV4aXN0LAorb3JpZ2luL21hc3RlciBzdGFydGVkIGF0IEIxLCBtb3ZlZCB0byBCMiBhbmQgdGhlbiBCLCBhbmQgeW91IGZvcmtlZAoreW91ciB0b3BpYyBhdCBvcmlnaW4vbWFzdGVyXiB3aGVuIG9yaWdpbi9tYXN0ZXIgd2FzIEIxOyB0aGUgc2hhcGUgb2YKK3RoZSBoaXN0b3J5IHdvdWxkIGJlIHRoZSBzYW1lIGFzIGFib3ZlLCB3aXRob3V0IEIwLCBhbmQgdGhlIHBhcmVudAorb2YgQjEgaXMgd2hhdCBgZ2l0IG1lcmdlLWJhc2Ugb3JpZ2luL21hc3RlciB0b3BpY2AgY29ycmVjdGx5IGZpbmRzLAorYnV0IHRoZSBgLS1mb3JrLXBvaW50YCBtb2RlIHdpbGwgbm90LCBiZWNhdXNlIGl0IGlzIG5vdCBvbmUgb2YgdGhlCitjb21taXRzIHRoYXQgdXNlZCB0byBiZSBhdCB0aGUgdGlwIG9mIG9yaWdpbi9tYXN0ZXIpLgorCisKK1NlZSBhbHNvCistLS0tLS0tLQorbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0sCitsaW5rZ2l0OmdpdC1zaG93LWJyYW5jaFsxXSwKK2xpbmtnaXQ6Z2l0LW1lcmdlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1maWxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODU2MDMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtZmlsZS50eHQKQEAgLTAsMCArMSw5NSBAQAorZ2l0LW1lcmdlLWZpbGUoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1tZXJnZS1maWxlIC0gUnVuIGEgdGhyZWUtd2F5IGZpbGUgbWVyZ2UKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbWVyZ2UtZmlsZScgWy1MIDxjdXJyZW50LW5hbWU+IFstTCA8YmFzZS1uYW1lPiBbLUwgPG90aGVyLW5hbWU+XV1dCisJWy0tb3Vyc3wtLXRoZWlyc3wtLXVuaW9uXSBbLXB8LS1zdGRvdXRdIFstcXwtLXF1aWV0XSBbLS1tYXJrZXItc2l6ZT08bj5dCisJWy0tW25vLV1kaWZmM10gPGN1cnJlbnQtZmlsZT4gPGJhc2UtZmlsZT4gPG90aGVyLWZpbGU+CisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisnZ2l0IG1lcmdlLWZpbGUnIGluY29ycG9yYXRlcyBhbGwgY2hhbmdlcyB0aGF0IGxlYWQgZnJvbSB0aGUgYDxiYXNlLWZpbGU+YAordG8gYDxvdGhlci1maWxlPmAgaW50byBgPGN1cnJlbnQtZmlsZT5gLiBUaGUgcmVzdWx0IG9yZGluYXJpbHkgZ29lcyBpbnRvCitgPGN1cnJlbnQtZmlsZT5gLiAnZ2l0IG1lcmdlLWZpbGUnIGlzIHVzZWZ1bCBmb3IgY29tYmluaW5nIHNlcGFyYXRlIGNoYW5nZXMKK3RvIGFuIG9yaWdpbmFsLiBTdXBwb3NlIGA8YmFzZS1maWxlPmAgaXMgdGhlIG9yaWdpbmFsLCBhbmQgYm90aAorYDxjdXJyZW50LWZpbGU+YCBhbmQgYDxvdGhlci1maWxlPmAgYXJlIG1vZGlmaWNhdGlvbnMgb2YgYDxiYXNlLWZpbGU+YCwKK3RoZW4gJ2dpdCBtZXJnZS1maWxlJyBjb21iaW5lcyBib3RoIGNoYW5nZXMuCisKK0EgY29uZmxpY3Qgb2NjdXJzIGlmIGJvdGggYDxjdXJyZW50LWZpbGU+YCBhbmQgYDxvdGhlci1maWxlPmAgaGF2ZSBjaGFuZ2VzCitpbiBhIGNvbW1vbiBzZWdtZW50IG9mIGxpbmVzLiBJZiBhIGNvbmZsaWN0IGlzIGZvdW5kLCAnZ2l0IG1lcmdlLWZpbGUnCitub3JtYWxseSBvdXRwdXRzIGEgd2FybmluZyBhbmQgYnJhY2tldHMgdGhlIGNvbmZsaWN0IHdpdGggbGluZXMgY29udGFpbmluZworPDw8PDw8PCBhbmQgPj4+Pj4+PiBtYXJrZXJzLiBBIHR5cGljYWwgY29uZmxpY3Qgd2lsbCBsb29rIGxpa2UgdGhpczoKKworCTw8PDw8PDwgQQorCWxpbmVzIGluIGZpbGUgQQorCT09PT09PT0KKwlsaW5lcyBpbiBmaWxlIEIKKwk+Pj4+Pj4+IEIKKworSWYgdGhlcmUgYXJlIGNvbmZsaWN0cywgdGhlIHVzZXIgc2hvdWxkIGVkaXQgdGhlIHJlc3VsdCBhbmQgZGVsZXRlIG9uZSBvZgordGhlIGFsdGVybmF0aXZlcy4gIFdoZW4gYC0tb3Vyc2AsIGAtLXRoZWlyc2AsIG9yIGAtLXVuaW9uYCBvcHRpb24gaXMgaW4gZWZmZWN0LAoraG93ZXZlciwgdGhlc2UgY29uZmxpY3RzIGFyZSByZXNvbHZlZCBmYXZvdXJpbmcgbGluZXMgZnJvbSBgPGN1cnJlbnQtZmlsZT5gLAorbGluZXMgZnJvbSBgPG90aGVyLWZpbGU+YCwgb3IgbGluZXMgZnJvbSBib3RoIHJlc3BlY3RpdmVseS4gIFRoZSBsZW5ndGggb2YgdGhlCitjb25mbGljdCBtYXJrZXJzIGNhbiBiZSBnaXZlbiB3aXRoIHRoZSBgLS1tYXJrZXItc2l6ZWAgb3B0aW9uLgorCitUaGUgZXhpdCB2YWx1ZSBvZiB0aGlzIHByb2dyYW0gaXMgbmVnYXRpdmUgb24gZXJyb3IsIGFuZCB0aGUgbnVtYmVyIG9mCitjb25mbGljdHMgb3RoZXJ3aXNlICh0cnVuY2F0ZWQgdG8gMTI3IGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gdGhhdCBtYW55Citjb25mbGljdHMpLiBJZiB0aGUgbWVyZ2Ugd2FzIGNsZWFuLCB0aGUgZXhpdCB2YWx1ZSBpcyAwLgorCisnZ2l0IG1lcmdlLWZpbGUnIGlzIGRlc2lnbmVkIHRvIGJlIGEgbWluaW1hbCBjbG9uZSBvZiBSQ1MgJ21lcmdlJzsgdGhhdCBpcywgaXQKK2ltcGxlbWVudHMgYWxsIG9mIFJDUyAnbWVyZ2UnJ3MgZnVuY3Rpb25hbGl0eSB3aGljaCBpcyBuZWVkZWQgYnkKK2xpbmtnaXQ6Z2l0WzFdLgorCisKK09QVElPTlMKKy0tLS0tLS0KKworLUwgPGxhYmVsPjo6CisJVGhpcyBvcHRpb24gbWF5IGJlIGdpdmVuIHVwIHRvIHRocmVlIHRpbWVzLCBhbmQKKwlzcGVjaWZpZXMgbGFiZWxzIHRvIGJlIHVzZWQgaW4gcGxhY2Ugb2YgdGhlCisJY29ycmVzcG9uZGluZyBmaWxlIG5hbWVzIGluIGNvbmZsaWN0IHJlcG9ydHMuIFRoYXQgaXMsCisJYGdpdCBtZXJnZS1maWxlIC1MIHggLUwgeSAtTCB6IGEgYiBjYCBnZW5lcmF0ZXMgb3V0cHV0IHRoYXQKKwlsb29rcyBsaWtlIGl0IGNhbWUgZnJvbSBmaWxlcyB4LCB5IGFuZCB6IGluc3RlYWQgb2YKKwlmcm9tIGZpbGVzIGEsIGIgYW5kIGMuCisKKy1wOjoKKwlTZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IGluc3RlYWQgb2Ygb3ZlcndyaXRpbmcKKwlgPGN1cnJlbnQtZmlsZT5gLgorCistcTo6CisJUXVpZXQ7IGRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cy4KKworLS1kaWZmMzo6CisJU2hvdyBjb25mbGljdHMgaW4gImRpZmYzIiBzdHlsZS4KKworLS1vdXJzOjoKKy0tdGhlaXJzOjoKKy0tdW5pb246OgorCUluc3RlYWQgb2YgbGVhdmluZyBjb25mbGljdHMgaW4gdGhlIGZpbGUsIHJlc29sdmUgY29uZmxpY3RzCisJZmF2b3VyaW5nIG91ciAob3IgdGhlaXIgb3IgYm90aCkgc2lkZSBvZiB0aGUgbGluZXMuCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK2BnaXQgbWVyZ2UtZmlsZSBSRUFETUUubXkgUkVBRE1FIFJFQURNRS51cHN0cmVhbWA6OgorCisJY29tYmluZXMgdGhlIGNoYW5nZXMgb2YgUkVBRE1FLm15IGFuZCBSRUFETUUudXBzdHJlYW0gc2luY2UgUkVBRE1FLAorCXRyaWVzIHRvIG1lcmdlIHRoZW0gYW5kIHdyaXRlcyB0aGUgcmVzdWx0IGludG8gUkVBRE1FLm15LgorCitgZ2l0IG1lcmdlLWZpbGUgLUwgYSAtTCBiIC1MIGMgdG1wL2ExMjMgdG1wL2IyMzQgdG1wL2MzNDVgOjoKKworCW1lcmdlcyB0bXAvYTEyMyBhbmQgdG1wL2MzNDUgd2l0aCB0aGUgYmFzZSB0bXAvYjIzNCwgYnV0IHVzZXMgbGFiZWxzCisJYGFgIGFuZCBgY2AgaW5zdGVhZCBvZiBgdG1wL2ExMjNgIGFuZCBgdG1wL2MzNDVgLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWluZGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWI4NGE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtaW5kZXgudHh0CkBAIC0wLDAgKzEsODMgQEAKK2dpdC1tZXJnZS1pbmRleCgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1tZXJnZS1pbmRleCAtIFJ1biBhIG1lcmdlIGZvciBmaWxlcyBuZWVkaW5nIG1lcmdpbmcKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbWVyZ2UtaW5kZXgnIFstb10gWy1xXSA8bWVyZ2UtcHJvZ3JhbT4gKC1hIHwgWy0tXSA8ZmlsZT4qKQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgbG9va3MgdXAgdGhlIDxmaWxlPihzKSBpbiB0aGUgaW5kZXggYW5kLCBpZiB0aGVyZSBhcmUgYW55IG1lcmdlCitlbnRyaWVzLCBwYXNzZXMgdGhlIFNIQS0xIGhhc2ggZm9yIHRob3NlIGZpbGVzIGFzIGFyZ3VtZW50cyAxLCAyLCAzIChlbXB0eQorYXJndW1lbnQgaWYgbm8gZmlsZSksIGFuZCA8ZmlsZT4gYXMgYXJndW1lbnQgNC4gIEZpbGUgbW9kZXMgZm9yIHRoZSB0aHJlZQorZmlsZXMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgNSwgNiBhbmQgNy4KKworT1BUSU9OUworLS0tLS0tLQorXC0tOjoKKwlEbyBub3QgaW50ZXJwcmV0IGFueSBtb3JlIGFyZ3VtZW50cyBhcyBvcHRpb25zLgorCistYTo6CisJUnVuIG1lcmdlIGFnYWluc3QgYWxsIGZpbGVzIGluIHRoZSBpbmRleCB0aGF0IG5lZWQgbWVyZ2luZy4KKworLW86OgorCUluc3RlYWQgb2Ygc3RvcHBpbmcgYXQgdGhlIGZpcnN0IGZhaWxlZCBtZXJnZSwgZG8gYWxsIG9mIHRoZW0KKwlpbiBvbmUgc2hvdCAtIGNvbnRpbnVlIHdpdGggbWVyZ2luZyBldmVuIHdoZW4gcHJldmlvdXMgbWVyZ2VzCisJcmV0dXJuZWQgZXJyb3JzLCBhbmQgb25seSByZXR1cm4gdGhlIGVycm9yIGNvZGUgYWZ0ZXIgYWxsIHRoZQorCW1lcmdlcy4KKworLXE6OgorCURvIG5vdCBjb21wbGFpbiBhYm91dCBhIGZhaWxlZCBtZXJnZSBwcm9ncmFtIChhIG1lcmdlIHByb2dyYW0KKwlmYWlsdXJlIHVzdWFsbHkgaW5kaWNhdGVzIGNvbmZsaWN0cyBkdXJpbmcgdGhlIG1lcmdlKS4gVGhpcyBpcyBmb3IKKwlwb3JjZWxhaW5zIHdoaWNoIG1pZ2h0IHdhbnQgdG8gZW1pdCBjdXN0b20gbWVzc2FnZXMuCisKK0lmICdnaXQgbWVyZ2UtaW5kZXgnIGlzIGNhbGxlZCB3aXRoIG11bHRpcGxlIDxmaWxlPnMgKG9yIC1hKSB0aGVuIGl0Citwcm9jZXNzZXMgdGhlbSBpbiB0dXJuIG9ubHkgc3RvcHBpbmcgaWYgbWVyZ2UgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXQKK2NvZGUuCisKK1R5cGljYWxseSB0aGlzIGlzIHJ1biB3aXRoIGEgc2NyaXB0IGNhbGxpbmcgR2l0J3MgaW1pdGF0aW9uIG9mCit0aGUgJ21lcmdlJyBjb21tYW5kIGZyb20gdGhlIFJDUyBwYWNrYWdlLgorCitBIHNhbXBsZSBzY3JpcHQgY2FsbGVkICdnaXQgbWVyZ2Utb25lLWZpbGUnIGlzIGluY2x1ZGVkIGluIHRoZQorZGlzdHJpYnV0aW9uLgorCitBTEVSVCBBTEVSVCBBTEVSVCEgVGhlIEdpdCAibWVyZ2Ugb2JqZWN0IG9yZGVyIiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUKK1JDUyAnbWVyZ2UnIHByb2dyYW0gbWVyZ2Ugb2JqZWN0IG9yZGVyLiBJbiB0aGUgYWJvdmUgb3JkZXJpbmcsIHRoZQorb3JpZ2luYWwgaXMgZmlyc3QuIEJ1dCB0aGUgYXJndW1lbnQgb3JkZXIgdG8gdGhlIDMtd2F5IG1lcmdlIHByb2dyYW0KKydtZXJnZScgaXMgdG8gaGF2ZSB0aGUgb3JpZ2luYWwgaW4gdGhlIG1pZGRsZS4gRG9uJ3QgYXNrIG1lIHdoeS4KKworRXhhbXBsZXM6CisKKy0tLS0KK3RvcnZhbGRzQHBwYzk3MDp+L21lcmdlLXRlc3Q+IGdpdCBtZXJnZS1pbmRleCBjYXQgTU0KK1RoaXMgaXMgTU0gZnJvbSB0aGUgb3JpZ2luYWwgdHJlZS4JCSMgb3JpZ2luYWwKK1RoaXMgaXMgbW9kaWZpZWQgTU0gaW4gdGhlIGJyYW5jaCBBLgkJIyBtZXJnZTEKK1RoaXMgaXMgbW9kaWZpZWQgTU0gaW4gdGhlIGJyYW5jaCBCLgkJIyBtZXJnZTIKK1RoaXMgaXMgbW9kaWZpZWQgTU0gaW4gdGhlIGJyYW5jaCBCLgkJIyBjdXJyZW50IGNvbnRlbnRzCistLS0tCisKK29yCisKKy0tLS0KK3RvcnZhbGRzQHBwYzk3MDp+L21lcmdlLXRlc3Q+IGdpdCBtZXJnZS1pbmRleCBjYXQgQUEgTU0KK2NhdDogOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitUaGlzIGlzIGFkZGVkIEFBIGluIHRoZSBicmFuY2ggQS4KK1RoaXMgaXMgYWRkZWQgQUEgaW4gdGhlIGJyYW5jaCBCLgorVGhpcyBpcyBhZGRlZCBBQSBpbiB0aGUgYnJhbmNoIEIuCitmYXRhbDogbWVyZ2UgcHJvZ3JhbSBmYWlsZWQKKy0tLS0KKword2hlcmUgdGhlIGxhdHRlciBleGFtcGxlIHNob3dzIGhvdyAnZ2l0IG1lcmdlLWluZGV4JyB3aWxsIHN0b3AgdHJ5aW5nIHRvCittZXJnZSBvbmNlIGFueXRoaW5nIGhhcyByZXR1cm5lZCBhbiBlcnJvciAoaS5lLiwgYGNhdGAgcmV0dXJuZWQgYW4gZXJyb3IKK2ZvciB0aGUgQUEgZmlsZSwgYmVjYXVzZSBpdCBkaWRuJ3QgZXhpc3QgaW4gdGhlIG9yaWdpbmFsLCBhbmQgdGh1cworJ2dpdCBtZXJnZS1pbmRleCcgZGlkbid0IGV2ZW4gdHJ5IHRvIG1lcmdlIHRoZSBNTSB0aGluZykuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2Utb25lLWZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2Utb25lLWZpbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZTgwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1vbmUtZmlsZS50eHQKQEAgLTAsMCArMSwyMSBAQAorZ2l0LW1lcmdlLW9uZS1maWxlKDEpCis9PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1lcmdlLW9uZS1maWxlIC0gVGhlIHN0YW5kYXJkIGhlbHBlciBwcm9ncmFtIHRvIHVzZSB3aXRoIGdpdC1tZXJnZS1pbmRleAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtZXJnZS1vbmUtZmlsZScKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGlzIHRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCAnZ2l0IG1lcmdlLWluZGV4JwordG8gcmVzb2x2ZSBhIG1lcmdlIGFmdGVyIHRoZSB0cml2aWFsIG1lcmdlIGRvbmUgd2l0aCAnZ2l0IHJlYWQtdHJlZSAtbScuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS10cmVlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODczMWMxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtdHJlZS50eHQKQEAgLTAsMCArMSwyOSBAQAorZ2l0LW1lcmdlLXRyZWUoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1tZXJnZS10cmVlIC0gU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtZXJnZS10cmVlJyA8YmFzZS10cmVlPiA8YnJhbmNoMT4gPGJyYW5jaDI+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgdGhyZWUgdHJlZS1pc2gsIGFuZCBvdXRwdXQgdHJpdmlhbCBtZXJnZSByZXN1bHRzIGFuZAorY29uZmxpY3Rpbmcgc3RhZ2VzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBUaGlzIGlzIHNpbWlsYXIgdG8KK3doYXQgdGhyZWUtd2F5ICdnaXQgcmVhZC10cmVlIC1tJyBkb2VzLCBidXQgaW5zdGVhZCBvZiBzdG9yaW5nIHRoZQorcmVzdWx0cyBpbiB0aGUgaW5kZXgsIHRoZSBjb21tYW5kIG91dHB1dHMgdGhlIGVudHJpZXMgdG8gdGhlCitzdGFuZGFyZCBvdXRwdXQuCisKK1RoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZCBieSBoaWdoZXIgbGV2ZWwgc2NyaXB0cyB0byBjb21wdXRlCittZXJnZSByZXN1bHRzIG91dHNpZGUgb2YgdGhlIGluZGV4LCBhbmQgc3R1ZmYgdGhlIHJlc3VsdHMgYmFjayBpbnRvIHRoZQoraW5kZXguICBGb3IgdGhpcyByZWFzb24sIHRoZSBvdXRwdXQgZnJvbSB0aGUgY29tbWFuZCBvbWl0cworZW50cmllcyB0aGF0IG1hdGNoIHRoZSA8YnJhbmNoMT4gdHJlZS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgxOWZhZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dApAQCAtMCwwICsxLDM3NyBAQAorZ2l0LW1lcmdlKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1lcmdlIC0gSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbWVyZ2UnIFstbl0gWy0tc3RhdF0gWy0tbm8tY29tbWl0XSBbLS1zcXVhc2hdIFstLVtuby1dZWRpdF0KKwlbLS1uby12ZXJpZnldIFstcyA8c3RyYXRlZ3k+XSBbLVggPHN0cmF0ZWd5LW9wdGlvbj5dIFstU1s8a2V5aWQ+XV0KKwlbLS1bbm8tXWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXNdCisJWy0tW25vLV1yZXJlcmUtYXV0b3VwZGF0ZV0gWy1tIDxtc2c+XSBbLUYgPGZpbGU+XSBbPGNvbW1pdD4uLi5dCisnZ2l0IG1lcmdlJyAoLS1jb250aW51ZSB8IC0tYWJvcnQgfCAtLXF1aXQpCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorSW5jb3Jwb3JhdGVzIGNoYW5nZXMgZnJvbSB0aGUgbmFtZWQgY29tbWl0cyAoc2luY2UgdGhlIHRpbWUgdGhlaXIKK2hpc3RvcmllcyBkaXZlcmdlZCBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCkgaW50byB0aGUgY3VycmVudAorYnJhbmNoLiAgVGhpcyBjb21tYW5kIGlzIHVzZWQgYnkgJ2dpdCBwdWxsJyB0byBpbmNvcnBvcmF0ZSBjaGFuZ2VzCitmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSBhbmQgY2FuIGJlIHVzZWQgYnkgaGFuZCB0byBtZXJnZSBjaGFuZ2VzCitmcm9tIG9uZSBicmFuY2ggaW50byBhbm90aGVyLgorCitBc3N1bWUgdGhlIGZvbGxvd2luZyBoaXN0b3J5IGV4aXN0cyBhbmQgdGhlIGN1cnJlbnQgYnJhbmNoIGlzCisiYG1hc3RlcmAiOgorCistLS0tLS0tLS0tLS0KKwkgIEEtLS1CLS0tQyB0b3BpYworCSAvCisgICAgRC0tLUUtLS1GLS0tRyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGVuICJgZ2l0IG1lcmdlIHRvcGljYCIgd2lsbCByZXBsYXkgdGhlIGNoYW5nZXMgbWFkZSBvbiB0aGUKK2B0b3BpY2AgYnJhbmNoIHNpbmNlIGl0IGRpdmVyZ2VkIGZyb20gYG1hc3RlcmAgKGkuZS4sIGBFYCkgdW50aWwKK2l0cyBjdXJyZW50IGNvbW1pdCAoYENgKSBvbiB0b3Agb2YgYG1hc3RlcmAsIGFuZCByZWNvcmQgdGhlIHJlc3VsdAoraW4gYSBuZXcgY29tbWl0IGFsb25nIHdpdGggdGhlIG5hbWVzIG9mIHRoZSB0d28gcGFyZW50IGNvbW1pdHMgYW5kCithIGxvZyBtZXNzYWdlIGZyb20gdGhlIHVzZXIgZGVzY3JpYmluZyB0aGUgY2hhbmdlcy4KKworLS0tLS0tLS0tLS0tCisJICBBLS0tQi0tLUMgdG9waWMKKwkgLyAgICAgICAgIFwKKyAgICBELS0tRS0tLUYtLS1HLS0tSCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGUgc2Vjb25kIHN5bnRheCAoImBnaXQgbWVyZ2UgLS1hYm9ydGAiKSBjYW4gb25seSBiZSBydW4gYWZ0ZXIgdGhlCittZXJnZSBoYXMgcmVzdWx0ZWQgaW4gY29uZmxpY3RzLiAnZ2l0IG1lcmdlIC0tYWJvcnQnIHdpbGwgYWJvcnQgdGhlCittZXJnZSBwcm9jZXNzIGFuZCB0cnkgdG8gcmVjb25zdHJ1Y3QgdGhlIHByZS1tZXJnZSBzdGF0ZS4gSG93ZXZlciwKK2lmIHRoZXJlIHdlcmUgdW5jb21taXR0ZWQgY2hhbmdlcyB3aGVuIHRoZSBtZXJnZSBzdGFydGVkIChhbmQKK2VzcGVjaWFsbHkgaWYgdGhvc2UgY2hhbmdlcyB3ZXJlIGZ1cnRoZXIgbW9kaWZpZWQgYWZ0ZXIgdGhlIG1lcmdlCit3YXMgc3RhcnRlZCksICdnaXQgbWVyZ2UgLS1hYm9ydCcgd2lsbCBpbiBzb21lIGNhc2VzIGJlIHVuYWJsZSB0bworcmVjb25zdHJ1Y3QgdGhlIG9yaWdpbmFsIChwcmUtbWVyZ2UpIGNoYW5nZXMuIFRoZXJlZm9yZToKKworKldhcm5pbmcqOiBSdW5uaW5nICdnaXQgbWVyZ2UnIHdpdGggbm9uLXRyaXZpYWwgdW5jb21taXR0ZWQgY2hhbmdlcyBpcworZGlzY291cmFnZWQ6IHdoaWxlIHBvc3NpYmxlLCBpdCBtYXkgbGVhdmUgeW91IGluIGEgc3RhdGUgdGhhdCBpcyBoYXJkIHRvCitiYWNrIG91dCBvZiBpbiB0aGUgY2FzZSBvZiBhIGNvbmZsaWN0LgorCitUaGUgdGhpcmQgc3ludGF4ICgiYGdpdCBtZXJnZSAtLWNvbnRpbnVlYCIpIGNhbiBvbmx5IGJlIHJ1biBhZnRlciB0aGUKK21lcmdlIGhhcyByZXN1bHRlZCBpbiBjb25mbGljdHMuCisKK09QVElPTlMKKy0tLS0tLS0KK2luY2x1ZGU6Om1lcmdlLW9wdGlvbnMudHh0W10KKworLW0gPG1zZz46OgorCVNldCB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gYmUgdXNlZCBmb3IgdGhlIG1lcmdlIGNvbW1pdCAoaW4KKwljYXNlIG9uZSBpcyBjcmVhdGVkKS4KKysKK0lmIGAtLWxvZ2AgaXMgc3BlY2lmaWVkLCBhIHNob3J0bG9nIG9mIHRoZSBjb21taXRzIGJlaW5nIG1lcmdlZAord2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCisrCitUaGUgJ2dpdCBmbXQtbWVyZ2UtbXNnJyBjb21tYW5kIGNhbiBiZQordXNlZCB0byBnaXZlIGEgZ29vZCBkZWZhdWx0IGZvciBhdXRvbWF0ZWQgJ2dpdCBtZXJnZScKK2ludm9jYXRpb25zLiBUaGUgYXV0b21hdGVkIG1lc3NhZ2UgY2FuIGluY2x1ZGUgdGhlIGJyYW5jaCBkZXNjcmlwdGlvbi4KKworLUYgPGZpbGU+OjoKKy0tZmlsZT08ZmlsZT46OgorCVJlYWQgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIGJlIHVzZWQgZm9yIHRoZSBtZXJnZSBjb21taXQgKGluCisJY2FzZSBvbmUgaXMgY3JlYXRlZCkuCisrCitJZiBgLS1sb2dgIGlzIHNwZWNpZmllZCwgYSBzaG9ydGxvZyBvZiB0aGUgY29tbWl0cyBiZWluZyBtZXJnZWQKK3dpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHNwZWNpZmllZCBtZXNzYWdlLgorCistLXJlcmVyZS1hdXRvdXBkYXRlOjoKKy0tbm8tcmVyZXJlLWF1dG91cGRhdGU6OgorCUFsbG93IHRoZSByZXJlcmUgbWVjaGFuaXNtIHRvIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCB0aGUKKwlyZXN1bHQgb2YgYXV0by1jb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlLgorCistLW92ZXJ3cml0ZS1pZ25vcmU6OgorLS1uby1vdmVyd3JpdGUtaWdub3JlOjoKKwlTaWxlbnRseSBvdmVyd3JpdGUgaWdub3JlZCBmaWxlcyBmcm9tIHRoZSBtZXJnZSByZXN1bHQuIFRoaXMKKwlpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVXNlIGAtLW5vLW92ZXJ3cml0ZS1pZ25vcmVgIHRvIGFib3J0LgorCistLWFib3J0OjoKKwlBYm9ydCB0aGUgY3VycmVudCBjb25mbGljdCByZXNvbHV0aW9uIHByb2Nlc3MsIGFuZAorCXRyeSB0byByZWNvbnN0cnVjdCB0aGUgcHJlLW1lcmdlIHN0YXRlLiBJZiBhbiBhdXRvc3Rhc2ggZW50cnkgaXMKKwlwcmVzZW50LCBhcHBseSBpdCB0byB0aGUgd29ya3RyZWUuCisrCitJZiB0aGVyZSB3ZXJlIHVuY29tbWl0dGVkIHdvcmt0cmVlIGNoYW5nZXMgcHJlc2VudCB3aGVuIHRoZSBtZXJnZQorc3RhcnRlZCwgJ2dpdCBtZXJnZSAtLWFib3J0JyB3aWxsIGluIHNvbWUgY2FzZXMgYmUgdW5hYmxlIHRvCityZWNvbnN0cnVjdCB0aGVzZSBjaGFuZ2VzLiBJdCBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYWx3YXlzCitjb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGJlZm9yZSBydW5uaW5nICdnaXQgbWVyZ2UnLgorKworJ2dpdCBtZXJnZSAtLWFib3J0JyBpcyBlcXVpdmFsZW50IHRvICdnaXQgcmVzZXQgLS1tZXJnZScgd2hlbgorYE1FUkdFX0hFQURgIGlzIHByZXNlbnQgdW5sZXNzIGBNRVJHRV9BVVRPU1RBU0hgIGlzIGFsc28gcHJlc2VudCBpbgord2hpY2ggY2FzZSAnZ2l0IG1lcmdlIC0tYWJvcnQnIGFwcGxpZXMgdGhlIHN0YXNoIGVudHJ5IHRvIHRoZSB3b3JrdHJlZQord2hlcmVhcyAnZ2l0IHJlc2V0IC0tbWVyZ2UnIHdpbGwgc2F2ZSB0aGUgc3Rhc2hlZCBjaGFuZ2VzIGluIHRoZSBzdGFzaAorbGlzdC4KKworLS1xdWl0OjoKKwlGb3JnZXQgYWJvdXQgdGhlIGN1cnJlbnQgbWVyZ2UgaW4gcHJvZ3Jlc3MuIExlYXZlIHRoZSBpbmRleAorCWFuZCB0aGUgd29ya2luZyB0cmVlIGFzLWlzLiBJZiBgTUVSR0VfQVVUT1NUQVNIYCBpcyBwcmVzZW50LCB0aGUKKwlzdGFzaCBlbnRyeSB3aWxsIGJlIHNhdmVkIHRvIHRoZSBzdGFzaCBsaXN0LgorCistLWNvbnRpbnVlOjoKKwlBZnRlciBhICdnaXQgbWVyZ2UnIHN0b3BzIGR1ZSB0byBjb25mbGljdHMgeW91IGNhbiBjb25jbHVkZSB0aGUKKwltZXJnZSBieSBydW5uaW5nICdnaXQgbWVyZ2UgLS1jb250aW51ZScgKHNlZSAiSE9XIFRPIFJFU09MVkUKKwlDT05GTElDVFMiIHNlY3Rpb24gYmVsb3cpLgorCis8Y29tbWl0Pi4uLjo6CisJQ29tbWl0cywgdXN1YWxseSBvdGhlciBicmFuY2ggaGVhZHMsIHRvIG1lcmdlIGludG8gb3VyIGJyYW5jaC4KKwlTcGVjaWZ5aW5nIG1vcmUgdGhhbiBvbmUgY29tbWl0IHdpbGwgY3JlYXRlIGEgbWVyZ2Ugd2l0aAorCW1vcmUgdGhhbiB0d28gcGFyZW50cyAoYWZmZWN0aW9uYXRlbHkgY2FsbGVkIGFuIE9jdG9wdXMgbWVyZ2UpLgorKworSWYgbm8gY29tbWl0IGlzIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgbWVyZ2UgdGhlIHJlbW90ZS10cmFja2luZworYnJhbmNoZXMgdGhhdCB0aGUgY3VycmVudCBicmFuY2ggaXMgY29uZmlndXJlZCB0byB1c2UgYXMgaXRzIHVwc3RyZWFtLgorU2VlIGFsc28gdGhlIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiBvZiB0aGlzIG1hbnVhbCBwYWdlLgorKworV2hlbiBgRkVUQ0hfSEVBRGAgKGFuZCBubyBvdGhlciBjb21taXQpIGlzIHNwZWNpZmllZCwgdGhlIGJyYW5jaGVzCityZWNvcmRlZCBpbiB0aGUgYC5naXQvRkVUQ0hfSEVBRGAgZmlsZSBieSB0aGUgcHJldmlvdXMgaW52b2NhdGlvbgorb2YgYGdpdCBmZXRjaGAgZm9yIG1lcmdpbmcgYXJlIG1lcmdlZCB0byB0aGUgY3VycmVudCBicmFuY2guCisKKworUFJFLU1FUkdFIENIRUNLUworLS0tLS0tLS0tLS0tLS0tLQorCitCZWZvcmUgYXBwbHlpbmcgb3V0c2lkZSBjaGFuZ2VzLCB5b3Ugc2hvdWxkIGdldCB5b3VyIG93biB3b3JrIGluCitnb29kIHNoYXBlIGFuZCBjb21taXR0ZWQgbG9jYWxseSwgc28gaXQgd2lsbCBub3QgYmUgY2xvYmJlcmVkIGlmCit0aGVyZSBhcmUgY29uZmxpY3RzLiAgU2VlIGFsc28gbGlua2dpdDpnaXQtc3Rhc2hbMV0uCisnZ2l0IHB1bGwnIGFuZCAnZ2l0IG1lcmdlJyB3aWxsIHN0b3Agd2l0aG91dCBkb2luZyBhbnl0aGluZyB3aGVuCitsb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzIG92ZXJsYXAgd2l0aCBmaWxlcyB0aGF0ICdnaXQgcHVsbCcvJ2dpdAorbWVyZ2UnIG1heSBuZWVkIHRvIHVwZGF0ZS4KKworVG8gYXZvaWQgcmVjb3JkaW5nIHVucmVsYXRlZCBjaGFuZ2VzIGluIHRoZSBtZXJnZSBjb21taXQsCisnZ2l0IHB1bGwnIGFuZCAnZ2l0IG1lcmdlJyB3aWxsIGFsc28gYWJvcnQgaWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzCityZWdpc3RlcmVkIGluIHRoZSBpbmRleCByZWxhdGl2ZSB0byB0aGUgYEhFQURgIGNvbW1pdC4gIChTcGVjaWFsCituYXJyb3cgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGUgbWF5IGV4aXN0IGRlcGVuZGluZyBvbiB3aGljaCBtZXJnZQorc3RyYXRlZ3kgaXMgaW4gdXNlLCBidXQgZ2VuZXJhbGx5LCB0aGUgaW5kZXggbXVzdCBtYXRjaCBIRUFELikKKworSWYgYWxsIG5hbWVkIGNvbW1pdHMgYXJlIGFscmVhZHkgYW5jZXN0b3JzIG9mIGBIRUFEYCwgJ2dpdCBtZXJnZScKK3dpbGwgZXhpdCBlYXJseSB3aXRoIHRoZSBtZXNzYWdlICJBbHJlYWR5IHVwIHRvIGRhdGUuIgorCitGQVNULUZPUldBUkQgTUVSR0UKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitPZnRlbiB0aGUgY3VycmVudCBicmFuY2ggaGVhZCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgbmFtZWQgY29tbWl0LgorVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gY2FzZSBlc3BlY2lhbGx5IHdoZW4gaW52b2tlZCBmcm9tICdnaXQKK3B1bGwnOiB5b3UgYXJlIHRyYWNraW5nIGFuIHVwc3RyZWFtIHJlcG9zaXRvcnksIHlvdSBoYXZlIGNvbW1pdHRlZAorbm8gbG9jYWwgY2hhbmdlcywgYW5kIG5vdyB5b3Ugd2FudCB0byB1cGRhdGUgdG8gYSBuZXdlciB1cHN0cmVhbQorcmV2aXNpb24uICBJbiB0aGlzIGNhc2UsIGEgbmV3IGNvbW1pdCBpcyBub3QgbmVlZGVkIHRvIHN0b3JlIHRoZQorY29tYmluZWQgaGlzdG9yeTsgaW5zdGVhZCwgdGhlIGBIRUFEYCAoYWxvbmcgd2l0aCB0aGUgaW5kZXgpIGlzCit1cGRhdGVkIHRvIHBvaW50IGF0IHRoZSBuYW1lZCBjb21taXQsIHdpdGhvdXQgY3JlYXRpbmcgYW4gZXh0cmEKK21lcmdlIGNvbW1pdC4KKworVGhpcyBiZWhhdmlvciBjYW4gYmUgc3VwcHJlc3NlZCB3aXRoIHRoZSBgLS1uby1mZmAgb3B0aW9uLgorCitUUlVFIE1FUkdFCistLS0tLS0tLS0tCisKK0V4Y2VwdCBpbiBhIGZhc3QtZm9yd2FyZCBtZXJnZSAoc2VlIGFib3ZlKSwgdGhlIGJyYW5jaGVzIHRvIGJlCittZXJnZWQgbXVzdCBiZSB0aWVkIHRvZ2V0aGVyIGJ5IGEgbWVyZ2UgY29tbWl0IHRoYXQgaGFzIGJvdGggb2YgdGhlbQorYXMgaXRzIHBhcmVudHMuCisKK0EgbWVyZ2VkIHZlcnNpb24gcmVjb25jaWxpbmcgdGhlIGNoYW5nZXMgZnJvbSBhbGwgYnJhbmNoZXMgdG8gYmUKK21lcmdlZCBpcyBjb21taXR0ZWQsIGFuZCB5b3VyIGBIRUFEYCwgaW5kZXgsIGFuZCB3b3JraW5nIHRyZWUgYXJlCit1cGRhdGVkIHRvIGl0LiAgSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBtb2RpZmljYXRpb25zIGluIHRoZSB3b3JraW5nCit0cmVlIGFzIGxvbmcgYXMgdGhleSBkbyBub3Qgb3ZlcmxhcDsgdGhlIHVwZGF0ZSB3aWxsIHByZXNlcnZlIHRoZW0uCisKK1doZW4gaXQgaXMgbm90IG9idmlvdXMgaG93IHRvIHJlY29uY2lsZSB0aGUgY2hhbmdlcywgdGhlIGZvbGxvd2luZworaGFwcGVuczoKKworMS4gVGhlIGBIRUFEYCBwb2ludGVyIHN0YXlzIHRoZSBzYW1lLgorMi4gVGhlIGBNRVJHRV9IRUFEYCByZWYgaXMgc2V0IHRvIHBvaW50IHRvIHRoZSBvdGhlciBicmFuY2ggaGVhZC4KKzMuIFBhdGhzIHRoYXQgbWVyZ2VkIGNsZWFubHkgYXJlIHVwZGF0ZWQgYm90aCBpbiB0aGUgaW5kZXggZmlsZSBhbmQKKyAgIGluIHlvdXIgd29ya2luZyB0cmVlLgorNC4gRm9yIGNvbmZsaWN0aW5nIHBhdGhzLCB0aGUgaW5kZXggZmlsZSByZWNvcmRzIHVwIHRvIHRocmVlCisgICB2ZXJzaW9uczogc3RhZ2UgMSBzdG9yZXMgdGhlIHZlcnNpb24gZnJvbSB0aGUgY29tbW9uIGFuY2VzdG9yLAorICAgc3RhZ2UgMiBmcm9tIGBIRUFEYCwgYW5kIHN0YWdlIDMgZnJvbSBgTUVSR0VfSEVBRGAgKHlvdQorICAgY2FuIGluc3BlY3QgdGhlIHN0YWdlcyB3aXRoIGBnaXQgbHMtZmlsZXMgLXVgKS4gIFRoZSB3b3JraW5nCisgICB0cmVlIGZpbGVzIGNvbnRhaW4gdGhlIHJlc3VsdCBvZiB0aGUgIm1lcmdlIiBwcm9ncmFtOyBpLmUuIDMtd2F5CisgICBtZXJnZSByZXN1bHRzIHdpdGggZmFtaWxpYXIgY29uZmxpY3QgbWFya2VycyBgPDw8YCBgPT09YCBgPj4+YC4KKzUuIE5vIG90aGVyIGNoYW5nZXMgYXJlIG1hZGUuICBJbiBwYXJ0aWN1bGFyLCB0aGUgbG9jYWwKKyAgIG1vZGlmaWNhdGlvbnMgeW91IGhhZCBiZWZvcmUgeW91IHN0YXJ0ZWQgbWVyZ2Ugd2lsbCBzdGF5IHRoZQorICAgc2FtZSBhbmQgdGhlIGluZGV4IGVudHJpZXMgZm9yIHRoZW0gc3RheSBhcyB0aGV5IHdlcmUsCisgICBpLmUuIG1hdGNoaW5nIGBIRUFEYC4KKworSWYgeW91IHRyaWVkIGEgbWVyZ2Ugd2hpY2ggcmVzdWx0ZWQgaW4gY29tcGxleCBjb25mbGljdHMgYW5kCit3YW50IHRvIHN0YXJ0IG92ZXIsIHlvdSBjYW4gcmVjb3ZlciB3aXRoIGBnaXQgbWVyZ2UgLS1hYm9ydGAuCisKK01FUkdJTkcgVEFHCistLS0tLS0tLS0tLQorCitXaGVuIG1lcmdpbmcgYW4gYW5ub3RhdGVkIChhbmQgcG9zc2libHkgc2lnbmVkKSB0YWcsIEdpdCBhbHdheXMKK2NyZWF0ZXMgYSBtZXJnZSBjb21taXQgZXZlbiBpZiBhIGZhc3QtZm9yd2FyZCBtZXJnZSBpcyBwb3NzaWJsZSwgYW5kCit0aGUgY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUgaXMgcHJlcGFyZWQgd2l0aCB0aGUgdGFnIG1lc3NhZ2UuCitBZGRpdGlvbmFsbHksIGlmIHRoZSB0YWcgaXMgc2lnbmVkLCB0aGUgc2lnbmF0dXJlIGNoZWNrIGlzIHJlcG9ydGVkCithcyBhIGNvbW1lbnQgaW4gdGhlIG1lc3NhZ2UgdGVtcGxhdGUuIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0LXRhZ1sxXS4KKworV2hlbiB5b3Ugd2FudCB0byBqdXN0IGludGVncmF0ZSB3aXRoIHRoZSB3b3JrIGxlYWRpbmcgdG8gdGhlIGNvbW1pdAordGhhdCBoYXBwZW5zIHRvIGJlIHRhZ2dlZCwgZS5nLiBzeW5jaHJvbml6aW5nIHdpdGggYW4gdXBzdHJlYW0KK3JlbGVhc2UgcG9pbnQsIHlvdSBtYXkgbm90IHdhbnQgdG8gbWFrZSBhbiB1bm5lY2Vzc2FyeSBtZXJnZSBjb21taXQuCisKK0luIHN1Y2ggYSBjYXNlLCB5b3UgY2FuICJ1bndyYXAiIHRoZSB0YWcgeW91cnNlbGYgYmVmb3JlIGZlZWRpbmcgaXQKK3RvIGBnaXQgbWVyZ2VgLCBvciBwYXNzIGAtLWZmLW9ubHlgIHdoZW4geW91IGRvIG5vdCBoYXZlIGFueSB3b3JrIG9uCit5b3VyIG93bi4gZS5nLgorCistLS0tCitnaXQgZmV0Y2ggb3JpZ2luCitnaXQgbWVyZ2UgdjEuMi4zXjAKK2dpdCBtZXJnZSAtLWZmLW9ubHkgdjEuMi4zCistLS0tCisKKworSE9XIENPTkZMSUNUUyBBUkUgUFJFU0VOVEVECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHVyaW5nIGEgbWVyZ2UsIHRoZSB3b3JraW5nIHRyZWUgZmlsZXMgYXJlIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgcmVzdWx0CitvZiB0aGUgbWVyZ2UuICBBbW9uZyB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBjb21tb24gYW5jZXN0b3IncyB2ZXJzaW9uLAorbm9uLW92ZXJsYXBwaW5nIG9uZXMgKHRoYXQgaXMsIHlvdSBjaGFuZ2VkIGFuIGFyZWEgb2YgdGhlIGZpbGUgd2hpbGUgdGhlCitvdGhlciBzaWRlIGxlZnQgdGhhdCBhcmVhIGludGFjdCwgb3IgdmljZSB2ZXJzYSkgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUKK2ZpbmFsIHJlc3VsdCB2ZXJiYXRpbS4gIFdoZW4gYm90aCBzaWRlcyBtYWRlIGNoYW5nZXMgdG8gdGhlIHNhbWUgYXJlYSwKK2hvd2V2ZXIsIEdpdCBjYW5ub3QgcmFuZG9tbHkgcGljayBvbmUgc2lkZSBvdmVyIHRoZSBvdGhlciwgYW5kIGFza3MgeW91IHRvCityZXNvbHZlIGl0IGJ5IGxlYXZpbmcgd2hhdCBib3RoIHNpZGVzIGRpZCB0byB0aGF0IGFyZWEuCisKK0J5IGRlZmF1bHQsIEdpdCB1c2VzIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSBvbmUgdXNlZCBieSB0aGUgIm1lcmdlIiBwcm9ncmFtCitmcm9tIHRoZSBSQ1Mgc3VpdGUgdG8gcHJlc2VudCBzdWNoIGEgY29uZmxpY3RlZCBodW5rLCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorSGVyZSBhcmUgbGluZXMgdGhhdCBhcmUgZWl0aGVyIHVuY2hhbmdlZCBmcm9tIHRoZSBjb21tb24KK2FuY2VzdG9yLCBvciBjbGVhbmx5IHJlc29sdmVkIGJlY2F1c2Ugb25seSBvbmUgc2lkZSBjaGFuZ2VkLgorPDw8PDw8PCB5b3VyczpzYW1wbGUudHh0CitDb25mbGljdCByZXNvbHV0aW9uIGlzIGhhcmQ7CitsZXQncyBnbyBzaG9wcGluZy4KKz09PT09PT0KK0dpdCBtYWtlcyBjb25mbGljdCByZXNvbHV0aW9uIGVhc3kuCis+Pj4+Pj4+IHRoZWlyczpzYW1wbGUudHh0CitBbmQgaGVyZSBpcyBhbm90aGVyIGxpbmUgdGhhdCBpcyBjbGVhbmx5IHJlc29sdmVkIG9yIHVubW9kaWZpZWQuCistLS0tLS0tLS0tLS0KKworVGhlIGFyZWEgd2hlcmUgYSBwYWlyIG9mIGNvbmZsaWN0aW5nIGNoYW5nZXMgaGFwcGVuZWQgaXMgbWFya2VkIHdpdGggbWFya2VycworYDw8PDw8PDxgLCBgPT09PT09PWAsIGFuZCBgPj4+Pj4+PmAuICBUaGUgcGFydCBiZWZvcmUgdGhlIGA9PT09PT09YAoraXMgdHlwaWNhbGx5IHlvdXIgc2lkZSwgYW5kIHRoZSBwYXJ0IGFmdGVyd2FyZHMgaXMgdHlwaWNhbGx5IHRoZWlyIHNpZGUuCisKK1RoZSBkZWZhdWx0IGZvcm1hdCBkb2VzIG5vdCBzaG93IHdoYXQgdGhlIG9yaWdpbmFsIHNhaWQgaW4gdGhlIGNvbmZsaWN0aW5nCithcmVhLiAgWW91IGNhbm5vdCB0ZWxsIGhvdyBtYW55IGxpbmVzIGFyZSBkZWxldGVkIGFuZCByZXBsYWNlZCB3aXRoCitCYXJiaWUncyByZW1hcmsgb24geW91ciBzaWRlLiAgVGhlIG9ubHkgdGhpbmcgeW91IGNhbiB0ZWxsIGlzIHRoYXQgeW91cgorc2lkZSB3YW50cyB0byBzYXkgaXQgaXMgaGFyZCBhbmQgeW91J2QgcHJlZmVyIHRvIGdvIHNob3BwaW5nLCB3aGlsZSB0aGUKK290aGVyIHNpZGUgd2FudHMgdG8gY2xhaW0gaXQgaXMgZWFzeS4KKworQW4gYWx0ZXJuYXRpdmUgc3R5bGUgY2FuIGJlIHVzZWQgYnkgc2V0dGluZyB0aGUgIm1lcmdlLmNvbmZsaWN0U3R5bGUiCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvICJkaWZmMyIuICBJbiAiZGlmZjMiIHN0eWxlLCB0aGUgYWJvdmUgY29uZmxpY3QKK21heSBsb29rIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCitIZXJlIGFyZSBsaW5lcyB0aGF0IGFyZSBlaXRoZXIgdW5jaGFuZ2VkIGZyb20gdGhlIGNvbW1vbgorYW5jZXN0b3IsIG9yIGNsZWFubHkgcmVzb2x2ZWQgYmVjYXVzZSBvbmx5IG9uZSBzaWRlIGNoYW5nZWQuCis8PDw8PDw8IHlvdXJzOnNhbXBsZS50eHQKK0NvbmZsaWN0IHJlc29sdXRpb24gaXMgaGFyZDsKK2xldCdzIGdvIHNob3BwaW5nLgorfHx8fHx8fAorQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyBoYXJkLgorPT09PT09PQorR2l0IG1ha2VzIGNvbmZsaWN0IHJlc29sdXRpb24gZWFzeS4KKz4+Pj4+Pj4gdGhlaXJzOnNhbXBsZS50eHQKK0FuZCBoZXJlIGlzIGFub3RoZXIgbGluZSB0aGF0IGlzIGNsZWFubHkgcmVzb2x2ZWQgb3IgdW5tb2RpZmllZC4KKy0tLS0tLS0tLS0tLQorCitJbiBhZGRpdGlvbiB0byB0aGUgYDw8PDw8PDxgLCBgPT09PT09PWAsIGFuZCBgPj4+Pj4+PmAgbWFya2VycywgaXQgdXNlcworYW5vdGhlciBgfHx8fHx8fGAgbWFya2VyIHRoYXQgaXMgZm9sbG93ZWQgYnkgdGhlIG9yaWdpbmFsIHRleHQuICBZb3UgY2FuCit0ZWxsIHRoYXQgdGhlIG9yaWdpbmFsIGp1c3Qgc3RhdGVkIGEgZmFjdCwgYW5kIHlvdXIgc2lkZSBzaW1wbHkgZ2F2ZSBpbiB0bwordGhhdCBzdGF0ZW1lbnQgYW5kIGdhdmUgdXAsIHdoaWxlIHRoZSBvdGhlciBzaWRlIHRyaWVkIHRvIGhhdmUgYSBtb3JlCitwb3NpdGl2ZSBhdHRpdHVkZS4gIFlvdSBjYW4gc29tZXRpbWVzIGNvbWUgdXAgd2l0aCBhIGJldHRlciByZXNvbHV0aW9uIGJ5Cit2aWV3aW5nIHRoZSBvcmlnaW5hbC4KKworCitIT1cgVE8gUkVTT0xWRSBDT05GTElDVFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZnRlciBzZWVpbmcgYSBjb25mbGljdCwgeW91IGNhbiBkbyB0d28gdGhpbmdzOgorCisgKiBEZWNpZGUgbm90IHRvIG1lcmdlLiAgVGhlIG9ubHkgY2xlYW4tdXBzIHlvdSBuZWVkIGFyZSB0byByZXNldAorICAgdGhlIGluZGV4IGZpbGUgdG8gdGhlIGBIRUFEYCBjb21taXQgdG8gcmV2ZXJzZSAyLiBhbmQgdG8gY2xlYW4KKyAgIHVwIHdvcmtpbmcgdHJlZSBjaGFuZ2VzIG1hZGUgYnkgMi4gYW5kIDMuOyBgZ2l0IG1lcmdlIC0tYWJvcnRgCisgICBjYW4gYmUgdXNlZCBmb3IgdGhpcy4KKworICogUmVzb2x2ZSB0aGUgY29uZmxpY3RzLiAgR2l0IHdpbGwgbWFyayB0aGUgY29uZmxpY3RzIGluCisgICB0aGUgd29ya2luZyB0cmVlLiAgRWRpdCB0aGUgZmlsZXMgaW50byBzaGFwZSBhbmQKKyAgICdnaXQgYWRkJyB0aGVtIHRvIHRoZSBpbmRleC4gIFVzZSAnZ2l0IGNvbW1pdCcgb3IKKyAgICdnaXQgbWVyZ2UgLS1jb250aW51ZScgdG8gc2VhbCB0aGUgZGVhbC4gVGhlIGxhdHRlciBjb21tYW5kCisgICBjaGVja3Mgd2hldGhlciB0aGVyZSBpcyBhIChpbnRlcnJ1cHRlZCkgbWVyZ2UgaW4gcHJvZ3Jlc3MKKyAgIGJlZm9yZSBjYWxsaW5nICdnaXQgY29tbWl0Jy4KKworWW91IGNhbiB3b3JrIHRocm91Z2ggdGhlIGNvbmZsaWN0IHdpdGggYSBudW1iZXIgb2YgdG9vbHM6CisKKyAqIFVzZSBhIG1lcmdldG9vbC4gIGBnaXQgbWVyZ2V0b29sYCB0byBsYXVuY2ggYSBncmFwaGljYWwKKyAgIG1lcmdldG9vbCB3aGljaCB3aWxsIHdvcmsgeW91IHRocm91Z2ggdGhlIG1lcmdlLgorCisgKiBMb29rIGF0IHRoZSBkaWZmcy4gIGBnaXQgZGlmZmAgd2lsbCBzaG93IGEgdGhyZWUtd2F5IGRpZmYsCisgICBoaWdobGlnaHRpbmcgY2hhbmdlcyBmcm9tIGJvdGggdGhlIGBIRUFEYCBhbmQgYE1FUkdFX0hFQURgCisgICB2ZXJzaW9ucy4KKworICogTG9vayBhdCB0aGUgZGlmZnMgZnJvbSBlYWNoIGJyYW5jaC4gYGdpdCBsb2cgLS1tZXJnZSAtcCA8cGF0aD5gCisgICB3aWxsIHNob3cgZGlmZnMgZmlyc3QgZm9yIHRoZSBgSEVBRGAgdmVyc2lvbiBhbmQgdGhlbiB0aGUKKyAgIGBNRVJHRV9IRUFEYCB2ZXJzaW9uLgorCisgKiBMb29rIGF0IHRoZSBvcmlnaW5hbHMuICBgZ2l0IHNob3cgOjE6ZmlsZW5hbWVgIHNob3dzIHRoZQorICAgY29tbW9uIGFuY2VzdG9yLCBgZ2l0IHNob3cgOjI6ZmlsZW5hbWVgIHNob3dzIHRoZSBgSEVBRGAKKyAgIHZlcnNpb24sIGFuZCBgZ2l0IHNob3cgOjM6ZmlsZW5hbWVgIHNob3dzIHRoZSBgTUVSR0VfSEVBRGAKKyAgIHZlcnNpb24uCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKyogTWVyZ2UgYnJhbmNoZXMgYGZpeGVzYCBhbmQgYGVuaGFuY2VtZW50c2Agb24gdG9wIG9mCisgIHRoZSBjdXJyZW50IGJyYW5jaCwgbWFraW5nIGFuIG9jdG9wdXMgbWVyZ2U6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IG1lcmdlIGZpeGVzIGVuaGFuY2VtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogTWVyZ2UgYnJhbmNoIGBvYnNvbGV0ZWAgaW50byB0aGUgY3VycmVudCBicmFuY2gsIHVzaW5nIGBvdXJzYAorICBtZXJnZSBzdHJhdGVneToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UgLXMgb3VycyBvYnNvbGV0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogTWVyZ2UgYnJhbmNoIGBtYWludGAgaW50byB0aGUgY3VycmVudCBicmFuY2gsIGJ1dCBkbyBub3QgbWFrZQorICBhIG5ldyBjb21taXQgYXV0b21hdGljYWxseToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UgLS1uby1jb21taXQgbWFpbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhpcyBjYW4gYmUgdXNlZCB3aGVuIHlvdSB3YW50IHRvIGluY2x1ZGUgZnVydGhlciBjaGFuZ2VzIHRvIHRoZQorbWVyZ2UsIG9yIHdhbnQgdG8gd3JpdGUgeW91ciBvd24gbWVyZ2UgY29tbWl0IG1lc3NhZ2UuCisrCitZb3Ugc2hvdWxkIHJlZnJhaW4gZnJvbSBhYnVzaW5nIHRoaXMgb3B0aW9uIHRvIHNuZWFrIHN1YnN0YW50aWFsCitjaGFuZ2VzIGludG8gYSBtZXJnZSBjb21taXQuICBTbWFsbCBmaXh1cHMgbGlrZSBidW1waW5nCityZWxlYXNlL3ZlcnNpb24gbmFtZSB3b3VsZCBiZSBhY2NlcHRhYmxlLgorCisKK2luY2x1ZGU6Om1lcmdlLXN0cmF0ZWdpZXMudHh0W10KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQoraW5jbHVkZTo6Y29uZmlnL21lcmdlLnR4dFtdCisKK2JyYW5jaC48bmFtZT4ubWVyZ2VPcHRpb25zOjoKKwlTZXRzIGRlZmF1bHQgb3B0aW9ucyBmb3IgbWVyZ2luZyBpbnRvIGJyYW5jaCA8bmFtZT4uIFRoZSBzeW50YXggYW5kCisJc3VwcG9ydGVkIG9wdGlvbnMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIG9mICdnaXQgbWVyZ2UnLCBidXQgb3B0aW9uCisJdmFsdWVzIGNvbnRhaW5pbmcgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1mbXQtbWVyZ2UtbXNnWzFdLCBsaW5rZ2l0OmdpdC1wdWxsWzFdLAorbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdLAorbGlua2dpdDpnaXQtcmVzZXRbMV0sCitsaW5rZ2l0OmdpdC1kaWZmWzFdLCBsaW5rZ2l0OmdpdC1scy1maWxlc1sxXSwKK2xpbmtnaXQ6Z2l0LWFkZFsxXSwgbGlua2dpdDpnaXQtcm1bMV0sCitsaW5rZ2l0OmdpdC1tZXJnZXRvb2xbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZXRvb2wtLWxpYi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZXRvb2wtLWxpYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRhOWQyNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC0tbGliLnR4dApAQCAtMCwwICsxLDQ5IEBACitnaXQtbWVyZ2V0b29se2xpdGRkfWxpYigxKQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1lcmdldG9vbC0tbGliIC0gQ29tbW9uIEdpdCBtZXJnZSB0b29sIHNoZWxsIHNjcmlwdGxldHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnVE9PTF9NT0RFPShkaWZmfG1lcmdlKSAuICIkKGdpdCAtLWV4ZWMtcGF0aCkvZ2l0LW1lcmdldG9vbHtsaXRkZH1saWIiJworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBpcyBub3QgYSBjb21tYW5kIHRoZSBlbmQgdXNlciB3b3VsZCB3YW50IHRvIHJ1bi4gIEV2ZXIuCitUaGlzIGRvY3VtZW50YXRpb24gaXMgbWVhbnQgZm9yIHBlb3BsZSB3aG8gYXJlIHN0dWR5aW5nIHRoZQorUG9yY2VsYWluLWlzaCBzY3JpcHRzIGFuZC9vciBhcmUgd3JpdGluZyBuZXcgb25lcy4KKworVGhlICdnaXQtbWVyZ2V0b29se2xpdGRkfWxpYicgc2NyaXB0bGV0IGlzIGRlc2lnbmVkIHRvIGJlIHNvdXJjZWQgKHVzaW5nCitgLmApIGJ5IG90aGVyIHNoZWxsIHNjcmlwdHMgdG8gc2V0IHVwIGZ1bmN0aW9ucyBmb3Igd29ya2luZword2l0aCBHaXQgbWVyZ2UgdG9vbHMuCisKK0JlZm9yZSBzb3VyY2luZyAnZ2l0LW1lcmdldG9vbHtsaXRkZH1saWInLCB5b3VyIHNjcmlwdCBtdXN0IHNldCBgVE9PTF9NT0RFYAordG8gZGVmaW5lIHRoZSBvcGVyYXRpb24gbW9kZSBmb3IgdGhlIGZ1bmN0aW9ucyBsaXN0ZWQgYmVsb3cuCisnZGlmZicgYW5kICdtZXJnZScgYXJlIHZhbGlkIHZhbHVlcy4KKworRlVOQ1RJT05TCistLS0tLS0tLS0KK2dldF9tZXJnZV90b29sOjoKKwlyZXR1cm5zIGEgbWVyZ2UgdG9vbC4gdGhlIHJldHVybiBjb2RlIGlzIDEgaWYgd2UgcmV0dXJuZWQgYSBndWVzc2VkCisJbWVyZ2UgdG9vbCwgZWxzZSAwLiAnJEdJVF9NRVJHRVRPT0xfR1VJJyBtYXkgYmUgc2V0IHRvICd0cnVlJyB0bworCXNlYXJjaCBmb3IgdGhlIGFwcHJvcHJpYXRlIGd1aXRvb2wuCisKK2dldF9tZXJnZV90b29sX2NtZDo6CisJcmV0dXJucyB0aGUgY3VzdG9tIGNvbW1hbmQgZm9yIGEgbWVyZ2UgdG9vbC4KKworZ2V0X21lcmdlX3Rvb2xfcGF0aDo6CisJcmV0dXJucyB0aGUgY3VzdG9tIHBhdGggZm9yIGEgbWVyZ2UgdG9vbC4KKworcnVuX21lcmdlX3Rvb2w6OgorCWxhdW5jaGVzIGEgbWVyZ2UgdG9vbCBnaXZlbiB0aGUgdG9vbCBuYW1lIGFuZCBhIHRydWUvZmFsc2UKKwlmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgYSBtZXJnZSBiYXNlIGlzIHByZXNlbnQuCisJJyRNRVJHRUQnLCAnJExPQ0FMJywgJyRSRU1PVEUnLCBhbmQgJyRCQVNFJyBtdXN0IGJlIGRlZmluZWQKKwlmb3IgdXNlIGJ5IHRoZSBtZXJnZSB0b29sLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZXRvb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMTQ3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZXRvb2wudHh0CkBAIC0wLDAgKzEsMTE0IEBACitnaXQtbWVyZ2V0b29sKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1tZXJnZXRvb2wgLSBSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbWVyZ2V0b29sJyBbLS10b29sPTx0b29sPl0gWy15IHwgLS1bbm8tXXByb21wdF0gWzxmaWxlPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1VzZSBgZ2l0IG1lcmdldG9vbGAgdG8gcnVuIG9uZSBvZiBzZXZlcmFsIG1lcmdlIHV0aWxpdGllcyB0byByZXNvbHZlCittZXJnZSBjb25mbGljdHMuICBJdCBpcyB0eXBpY2FsbHkgcnVuIGFmdGVyICdnaXQgbWVyZ2UnLgorCitJZiBvbmUgb3IgbW9yZSA8ZmlsZT4gcGFyYW1ldGVycyBhcmUgZ2l2ZW4sIHRoZSBtZXJnZSB0b29sIHByb2dyYW0gd2lsbAorYmUgcnVuIHRvIHJlc29sdmUgZGlmZmVyZW5jZXMgb24gZWFjaCBmaWxlIChza2lwcGluZyB0aG9zZSB3aXRob3V0Citjb25mbGljdHMpLiAgU3BlY2lmeWluZyBhIGRpcmVjdG9yeSB3aWxsIGluY2x1ZGUgYWxsIHVucmVzb2x2ZWQgZmlsZXMgaW4KK3RoYXQgcGF0aC4gIElmIG5vIDxmaWxlPiBuYW1lcyBhcmUgc3BlY2lmaWVkLCAnZ2l0IG1lcmdldG9vbCcgd2lsbCBydW4KK3RoZSBtZXJnZSB0b29sIHByb2dyYW0gb24gZXZlcnkgZmlsZSB3aXRoIG1lcmdlIGNvbmZsaWN0cy4KKworT1BUSU9OUworLS0tLS0tLQorLXQgPHRvb2w+OjoKKy0tdG9vbD08dG9vbD46OgorCVVzZSB0aGUgbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtIHNwZWNpZmllZCBieSA8dG9vbD4uCisJVmFsaWQgdmFsdWVzIGluY2x1ZGUgZW1lcmdlLCBndmltZGlmZiwga2RpZmYzLAorCW1lbGQsIHZpbWRpZmYsIGFuZCB0b3J0b2lzZW1lcmdlLiBSdW4gYGdpdCBtZXJnZXRvb2wgLS10b29sLWhlbHBgCisJZm9yIHRoZSBsaXN0IG9mIHZhbGlkIDx0b29sPiBzZXR0aW5ncy4KKysKK0lmIGEgbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtIGlzIG5vdCBzcGVjaWZpZWQsICdnaXQgbWVyZ2V0b29sJword2lsbCB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYG1lcmdlLnRvb2xgLiAgSWYgdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBtZXJnZS50b29sYCBpcyBub3Qgc2V0LCAnZ2l0IG1lcmdldG9vbCcKK3dpbGwgcGljayBhIHN1aXRhYmxlIGRlZmF1bHQuCisrCitZb3UgY2FuIGV4cGxpY2l0bHkgcHJvdmlkZSBhIGZ1bGwgcGF0aCB0byB0aGUgdG9vbCBieSBzZXR0aW5nIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgbWVyZ2V0b29sLjx0b29sPi5wYXRoYC4gRm9yIGV4YW1wbGUsIHlvdQorY2FuIGNvbmZpZ3VyZSB0aGUgYWJzb2x1dGUgcGF0aCB0byBrZGlmZjMgYnkgc2V0dGluZworYG1lcmdldG9vbC5rZGlmZjMucGF0aGAuIE90aGVyd2lzZSwgJ2dpdCBtZXJnZXRvb2wnIGFzc3VtZXMgdGhlCit0b29sIGlzIGF2YWlsYWJsZSBpbiBQQVRILgorKworSW5zdGVhZCBvZiBydW5uaW5nIG9uZSBvZiB0aGUga25vd24gbWVyZ2UgdG9vbCBwcm9ncmFtcywKKydnaXQgbWVyZ2V0b29sJyBjYW4gYmUgY3VzdG9taXplZCB0byBydW4gYW4gYWx0ZXJuYXRpdmUgcHJvZ3JhbQorYnkgc3BlY2lmeWluZyB0aGUgY29tbWFuZCBsaW5lIHRvIGludm9rZSBpbiBhIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlIGBtZXJnZXRvb2wuPHRvb2w+LmNtZGAuCisrCitXaGVuICdnaXQgbWVyZ2V0b29sJyBpcyBpbnZva2VkIHdpdGggdGhpcyB0b29sIChlaXRoZXIgdGhyb3VnaCB0aGUKK2AtdGAgb3IgYC0tdG9vbGAgb3B0aW9uIG9yIHRoZSBgbWVyZ2UudG9vbGAgY29uZmlndXJhdGlvbgordmFyaWFibGUpIHRoZSBjb25maWd1cmVkIGNvbW1hbmQgbGluZSB3aWxsIGJlIGludm9rZWQgd2l0aCBgJEJBU0VgCitzZXQgdG8gdGhlIG5hbWUgb2YgYSB0ZW1wb3JhcnkgZmlsZSBjb250YWluaW5nIHRoZSBjb21tb24gYmFzZSBmb3IKK3RoZSBtZXJnZSwgaWYgYXZhaWxhYmxlOyBgJExPQ0FMYCBzZXQgdG8gdGhlIG5hbWUgb2YgYSB0ZW1wb3JhcnkKK2ZpbGUgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgb24gdGhlIGN1cnJlbnQgYnJhbmNoOworYCRSRU1PVEVgIHNldCB0byB0aGUgbmFtZSBvZiBhIHRlbXBvcmFyeSBmaWxlIGNvbnRhaW5pbmcgdGhlCitjb250ZW50cyBvZiB0aGUgZmlsZSB0byBiZSBtZXJnZWQsIGFuZCBgJE1FUkdFRGAgc2V0IHRvIHRoZSBuYW1lCitvZiB0aGUgZmlsZSB0byB3aGljaCB0aGUgbWVyZ2UgdG9vbCBzaG91bGQgd3JpdGUgdGhlIHJlc3VsdCBvZiB0aGUKK21lcmdlIHJlc29sdXRpb24uCisrCitJZiB0aGUgY3VzdG9tIG1lcmdlIHRvb2wgY29ycmVjdGx5IGluZGljYXRlcyB0aGUgc3VjY2VzcyBvZiBhCittZXJnZSByZXNvbHV0aW9uIHdpdGggaXRzIGV4aXQgY29kZSwgdGhlbiB0aGUgY29uZmlndXJhdGlvbgordmFyaWFibGUgYG1lcmdldG9vbC48dG9vbD4udHJ1c3RFeGl0Q29kZWAgY2FuIGJlIHNldCB0byBgdHJ1ZWAuCitPdGhlcndpc2UsICdnaXQgbWVyZ2V0b29sJyB3aWxsIHByb21wdCB0aGUgdXNlciB0byBpbmRpY2F0ZSB0aGUKK3N1Y2Nlc3Mgb2YgdGhlIHJlc29sdXRpb24gYWZ0ZXIgdGhlIGN1c3RvbSB0b29sIGhhcyBleGl0ZWQuCisKKy0tdG9vbC1oZWxwOjoKKwlQcmludCBhIGxpc3Qgb2YgbWVyZ2UgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgLgorCisteTo6CistLW5vLXByb21wdDo6CisJRG9uJ3QgcHJvbXB0IGJlZm9yZSBlYWNoIGludm9jYXRpb24gb2YgdGhlIG1lcmdlIHJlc29sdXRpb24KKwlwcm9ncmFtLgorCVRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgdGhlIG1lcmdlIHJlc29sdXRpb24gcHJvZ3JhbSBpcworCWV4cGxpY2l0bHkgc3BlY2lmaWVkIHdpdGggdGhlIGAtLXRvb2xgIG9wdGlvbiBvciB3aXRoIHRoZQorCWBtZXJnZS50b29sYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCistLXByb21wdDo6CisJUHJvbXB0IGJlZm9yZSBlYWNoIGludm9jYXRpb24gb2YgdGhlIG1lcmdlIHJlc29sdXRpb24gcHJvZ3JhbQorCXRvIGdpdmUgdGhlIHVzZXIgYSBjaGFuY2UgdG8gc2tpcCB0aGUgcGF0aC4KKworLWc6OgorLS1ndWk6OgorCVdoZW4gJ2dpdC1tZXJnZXRvb2wnIGlzIGludm9rZWQgd2l0aCB0aGUgYC1nYCBvciBgLS1ndWlgIG9wdGlvbgorCXRoZSBkZWZhdWx0IG1lcmdlIHRvb2wgd2lsbCBiZSByZWFkIGZyb20gdGhlIGNvbmZpZ3VyZWQKKwlgbWVyZ2UuZ3VpdG9vbGAgdmFyaWFibGUgaW5zdGVhZCBvZiBgbWVyZ2UudG9vbGAuIElmCisJYG1lcmdlLmd1aXRvb2xgIGlzIG5vdCBzZXQsIHdlIHdpbGwgZmFsbGJhY2sgdG8gdGhlIHRvb2wKKwljb25maWd1cmVkIHVuZGVyIGBtZXJnZS50b29sYC4KKworLS1uby1ndWk6OgorCVRoaXMgb3ZlcnJpZGVzIGEgcHJldmlvdXMgYC1nYCBvciBgLS1ndWlgIHNldHRpbmcgYW5kIHJlYWRzIHRoZQorCWRlZmF1bHQgbWVyZ2UgdG9vbCB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgY29uZmlndXJlZCBgbWVyZ2UudG9vbGAKKwl2YXJpYWJsZS4KKworLU88b3JkZXJmaWxlPjo6CisJUHJvY2VzcyBmaWxlcyBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkIGluIHRoZQorCTxvcmRlcmZpbGU+LCB3aGljaCBoYXMgb25lIHNoZWxsIGdsb2IgcGF0dGVybiBwZXIgbGluZS4KKwlUaGlzIG92ZXJyaWRlcyB0aGUgYGRpZmYub3JkZXJGaWxlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisJKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLiAgVG8gY2FuY2VsIGBkaWZmLm9yZGVyRmlsZWAsCisJdXNlIGAtTy9kZXYvbnVsbGAuCisKK1RFTVBPUkFSWSBGSUxFUworLS0tLS0tLS0tLS0tLS0tCitgZ2l0IG1lcmdldG9vbGAgY3JlYXRlcyBgKi5vcmlnYCBiYWNrdXAgZmlsZXMgd2hpbGUgcmVzb2x2aW5nIG1lcmdlcy4KK1RoZXNlIGFyZSBzYWZlIHRvIHJlbW92ZSBvbmNlIGEgZmlsZSBoYXMgYmVlbiBtZXJnZWQgYW5kIGl0cworYGdpdCBtZXJnZXRvb2xgIHNlc3Npb24gaGFzIGNvbXBsZXRlZC4KKworU2V0dGluZyB0aGUgYG1lcmdldG9vbC5rZWVwQmFja3VwYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGBmYWxzZWAKK2NhdXNlcyBgZ2l0IG1lcmdldG9vbGAgdG8gYXV0b21hdGljYWxseSByZW1vdmUgdGhlIGJhY2t1cCBhcyBmaWxlcworYXJlIHN1Y2Nlc3NmdWxseSBtZXJnZWQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWt0YWcudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWt0YWcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNmE3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ta3RhZy50eHQKQEAgLTAsMCArMSwzOSBAQAorZ2l0LW1rdGFnKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1rdGFnIC0gQ3JlYXRlcyBhIHRhZyBvYmplY3QKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbWt0YWcnCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgYSB0YWcgY29udGVudHMgb24gc3RhbmRhcmQgaW5wdXQgYW5kIGNyZWF0ZXMgYSB0YWcgb2JqZWN0Cit0aGF0IGNhbiBhbHNvIGJlIHVzZWQgdG8gc2lnbiBvdGhlciBvYmplY3RzLgorCitUaGUgb3V0cHV0IGlzIHRoZSBuZXcgdGFnJ3MgPG9iamVjdD4gaWRlbnRpZmllci4KKworVGFnIEZvcm1hdAorLS0tLS0tLS0tLQorQSB0YWcgc2lnbmF0dXJlIGZpbGUsIHRvIGJlIGZlZCB0byB0aGlzIGNvbW1hbmQncyBzdGFuZGFyZCBpbnB1dCwKK2hhcyBhIHZlcnkgc2ltcGxlIGZpeGVkIGZvcm1hdDogZm91ciBsaW5lcyBvZgorCisgIG9iamVjdCA8c2hhMT4KKyAgdHlwZSA8dHlwZW5hbWU+CisgIHRhZyA8dGFnbmFtZT4KKyAgdGFnZ2VyIDx0YWdnZXI+CisKK2ZvbGxvd2VkIGJ5IHNvbWUgJ29wdGlvbmFsJyBmcmVlLWZvcm0gbWVzc2FnZSAoc29tZSB0YWdzIGNyZWF0ZWQKK2J5IG9sZGVyIEdpdCBtYXkgbm90IGhhdmUgYHRhZ2dlcmAgbGluZSkuICBUaGUgbWVzc2FnZSwgd2hlbgorZXhpc3RzLCBpcyBzZXBhcmF0ZWQgYnkgYSBibGFuayBsaW5lIGZyb20gdGhlIGhlYWRlci4gIFRoZQorbWVzc2FnZSBwYXJ0IG1heSBjb250YWluIGEgc2lnbmF0dXJlIHRoYXQgR2l0IGl0c2VsZiBkb2Vzbid0CitjYXJlIGFib3V0LCBidXQgdGhhdCBjYW4gYmUgdmVyaWZpZWQgd2l0aCBncGcuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWt0cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1rdHJlZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmZTJiMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1rdHJlZS50eHQKQEAgLTAsMCArMSw0MCBAQAorZ2l0LW1rdHJlZSgxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbWt0cmVlIC0gQnVpbGQgYSB0cmVlLW9iamVjdCBmcm9tIGxzLXRyZWUgZm9ybWF0dGVkIHRleHQKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbWt0cmVlJyBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlYWRzIHN0YW5kYXJkIGlucHV0IGluIG5vbi1yZWN1cnNpdmUgYGxzLXRyZWVgIG91dHB1dCBmb3JtYXQsIGFuZCBjcmVhdGVzCithIHRyZWUgb2JqZWN0LiAgVGhlIG9yZGVyIG9mIHRoZSB0cmVlIGVudHJpZXMgaXMgbm9ybWFsaXplZCBieSBta3RyZWUgc28KK3ByZS1zb3J0aW5nIHRoZSBpbnB1dCBpcyBub3QgcmVxdWlyZWQuICBUaGUgb2JqZWN0IG5hbWUgb2YgdGhlIHRyZWUgb2JqZWN0CitidWlsdCBpcyB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisKK09QVElPTlMKKy0tLS0tLS0KKy16OjoKKwlSZWFkIHRoZSBOVUwtdGVybWluYXRlZCBgbHMtdHJlZSAtemAgb3V0cHV0IGluc3RlYWQuCisKKy0tbWlzc2luZzo6CisJQWxsb3cgbWlzc2luZyBvYmplY3RzLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3VyICh3aXRob3V0IHRoaXMgb3B0aW9uKQorCWlzIHRvIHZlcmlmeSB0aGF0IGVhY2ggdHJlZSBlbnRyeSdzIHNoYTEgaWRlbnRpZmllcyBhbiBleGlzdGluZworCW9iamVjdC4gIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHRyZWF0bWVudCBvZiBnaXRsaW5rIGVudHJpZXMKKwkoYWthICJzdWJtb2R1bGVzIikgd2hpY2ggYXJlIGFsd2F5cyBhbGxvd2VkIHRvIGJlIG1pc3NpbmcuCisKKy0tYmF0Y2g6OgorCUFsbG93IGJ1aWxkaW5nIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSBvYmplY3QgYmVmb3JlIGV4aXRpbmcuICBFYWNoCisJdHJlZSBpcyBzZXBhcmF0ZWQgYnkgYXMgc2luZ2xlIGJsYW5rIGxpbmUuIFRoZSBmaW5hbCBuZXctbGluZSBpcworCW9wdGlvbmFsLiAgTm90ZSAtIGlmIHRoZSBgLXpgIG9wdGlvbiBpcyB1c2VkLCBsaW5lcyBhcmUgdGVybWluYXRlZAorCXdpdGggTlVMLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW11bHRpLXBhY2staW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbXVsdGktcGFjay1pbmRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2NjE5NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW11bHRpLXBhY2staW5kZXgudHh0CkBAIC0wLDAgKzEsOTUgQEAKK2dpdC1tdWx0aS1wYWNrLWluZGV4KDEpCis9PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbXVsdGktcGFjay1pbmRleCAtIFdyaXRlIGFuZCB2ZXJpZnkgbXVsdGktcGFjay1pbmRleGVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG11bHRpLXBhY2staW5kZXgnIFstLW9iamVjdC1kaXI9PGRpcj5dIFstLVtuby1dcHJvZ3Jlc3NdIDxzdWJjb21tYW5kPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1dyaXRlIG9yIHZlcmlmeSBhIG11bHRpLXBhY2staW5kZXggKE1JRFgpIGZpbGUuCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1vYmplY3QtZGlyPTxkaXI+OjoKKwlVc2UgZ2l2ZW4gZGlyZWN0b3J5IGZvciB0aGUgbG9jYXRpb24gb2YgR2l0IG9iamVjdHMuIFdlIGNoZWNrCisJYDxkaXI+L3BhY2tzL211bHRpLXBhY2staW5kZXhgIGZvciB0aGUgY3VycmVudCBNSURYIGZpbGUsIGFuZAorCWA8ZGlyPi9wYWNrc2AgZm9yIHRoZSBwYWNrLWZpbGVzIHRvIGluZGV4LgorCistLVtuby1dcHJvZ3Jlc3M6OgorCVR1cm4gcHJvZ3Jlc3Mgb24vb2ZmIGV4cGxpY2l0bHkuIElmIG5laXRoZXIgaXMgc3BlY2lmaWVkLCBwcm9ncmVzcyBpcworCXNob3duIGlmIHN0YW5kYXJkIGVycm9yIGlzIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLgorCitUaGUgZm9sbG93aW5nIHN1YmNvbW1hbmRzIGFyZSBhdmFpbGFibGU6CisKK3dyaXRlOjoKKwlXcml0ZSBhIG5ldyBNSURYIGZpbGUuCisKK3ZlcmlmeTo6CisJVmVyaWZ5IHRoZSBjb250ZW50cyBvZiB0aGUgTUlEWCBmaWxlLgorCitleHBpcmU6OgorCURlbGV0ZSB0aGUgcGFjay1maWxlcyB0aGF0IGFyZSB0cmFja2VkIAlieSB0aGUgTUlEWCBmaWxlLCBidXQKKwloYXZlIG5vIG9iamVjdHMgcmVmZXJlbmNlZCBieSB0aGUgTUlEWC4gUmV3cml0ZSB0aGUgTUlEWCBmaWxlCisJYWZ0ZXJ3YXJkIHRvIHJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGVzZSBwYWNrLWZpbGVzLgorCityZXBhY2s6OgorCUNyZWF0ZSBhIG5ldyBwYWNrLWZpbGUgY29udGFpbmluZyBvYmplY3RzIGluIHNtYWxsIHBhY2stZmlsZXMKKwlyZWZlcmVuY2VkIGJ5IHRoZSBtdWx0aS1wYWNrLWluZGV4LiBJZiB0aGUgc2l6ZSBnaXZlbiBieSB0aGUKKwlgLS1iYXRjaC1zaXplPTxzaXplPmAgYXJndW1lbnQgaXMgemVybywgdGhlbiBjcmVhdGUgYSBwYWNrCisJY29udGFpbmluZyBhbGwgb2JqZWN0cyByZWZlcmVuY2VkIGJ5IHRoZSBtdWx0aS1wYWNrLWluZGV4LiBGb3IKKwlhIG5vbi16ZXJvIGJhdGNoIHNpemUsIFNlbGVjdCB0aGUgcGFjay1maWxlcyBieSBleGFtaW5pbmcgcGFja3MKKwlmcm9tIG9sZGVzdC10by1uZXdlc3QsIGNvbXB1dGluZyB0aGUgImV4cGVjdGVkIHNpemUiIGJ5IGNvdW50aW5nCisJdGhlIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBwYWNrIHJlZmVyZW5jZWQgYnkgdGhlCisJbXVsdGktcGFjay1pbmRleCwgdGhlbiBkaXZpZGUgYnkgdGhlIHRvdGFsIG51bWJlciBvZiBvYmplY3RzIGluCisJdGhlIHBhY2sgYW5kIG11bHRpcGx5IGJ5IHRoZSBwYWNrIHNpemUuIFdlIHNlbGVjdCBwYWNrcyB3aXRoCisJZXhwZWN0ZWQgc2l6ZSBiZWxvdyB0aGUgYmF0Y2ggc2l6ZSB1bnRpbCB0aGUgc2V0IG9mIHBhY2tzIGhhdmUKKwl0b3RhbCBleHBlY3RlZCBzaXplIGF0IGxlYXN0IHRoZSBiYXRjaCBzaXplLiBJZiB0aGUgdG90YWwgc2l6ZQorCWRvZXMgbm90IHJlYWNoIHRoZSBiYXRjaCBzaXplLCB0aGVuIGRvIG5vdGhpbmcuIElmIGEgbmV3IHBhY2stCisJZmlsZSBpcyBjcmVhdGVkLCByZXdyaXRlIHRoZSBtdWx0aS1wYWNrLWluZGV4IHRvIHJlZmVyZW5jZSB0aGUKKwluZXcgcGFjay1maWxlLiBBIGxhdGVyIHJ1biBvZiAnZ2l0IG11bHRpLXBhY2staW5kZXggZXhwaXJlJyB3aWxsCisJZGVsZXRlIHRoZSBwYWNrLWZpbGVzIHRoYXQgd2VyZSBwYXJ0IG9mIHRoaXMgYmF0Y2guCisrCitJZiBgcmVwYWNrLnBhY2tLZXB0T2JqZWN0c2AgaXMgYGZhbHNlYCwgdGhlbiBhbnkgcGFjay1maWxlcyB3aXRoIGFuCithc3NvY2lhdGVkIGAua2VlcGAgZmlsZSB3aWxsIG5vdCBiZSBzZWxlY3RlZCBmb3IgdGhlIGJhdGNoIHRvIHJlcGFjay4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBXcml0ZSBhIE1JRFggZmlsZSBmb3IgdGhlIHBhY2tmaWxlcyBpbiB0aGUgY3VycmVudCAuZ2l0IGZvbGRlci4KKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtdWx0aS1wYWNrLWluZGV4IHdyaXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFdyaXRlIGEgTUlEWCBmaWxlIGZvciB0aGUgcGFja2ZpbGVzIGluIGFuIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUuCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXIgPGFsdD4gd3JpdGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVmVyaWZ5IHRoZSBNSURYIGZpbGUgZm9yIHRoZSBwYWNrZmlsZXMgaW4gdGhlIGN1cnJlbnQgLmdpdCBmb2xkZXIuCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbXVsdGktcGFjay1pbmRleCB2ZXJpZnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitTZWUgbGluazp0ZWNobmljYWwvbXVsdGktcGFjay1pbmRleC5odG1sW1RoZSBNdWx0aS1QYWNrLUluZGV4IERlc2lnbgorRG9jdW1lbnRdIGFuZCBsaW5rOnRlY2huaWNhbC9wYWNrLWZvcm1hdC5odG1sW1RoZSBNdWx0aS1QYWNrLUluZGV4CitGb3JtYXRdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBtdWx0aS1wYWNrLWluZGV4IGZlYXR1cmUuCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tdi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tdi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0NDliZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW12LnR4dApAQCAtMCwwICsxLDY5IEBACitnaXQtbXYoMSkKKz09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbXYgLSBNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbXYnIDxvcHRpb25zPi4uLiA8YXJncz4uLi4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGRpcmVjdG9yeSBvciBzeW1saW5rLgorCisgZ2l0IG12IFstdl0gWy1mXSBbLW5dIFsta10gPHNvdXJjZT4gPGRlc3RpbmF0aW9uPgorIGdpdCBtdiBbLXZdIFstZl0gWy1uXSBbLWtdIDxzb3VyY2U+IC4uLiA8ZGVzdGluYXRpb24gZGlyZWN0b3J5PgorCitJbiB0aGUgZmlyc3QgZm9ybSwgaXQgcmVuYW1lcyA8c291cmNlPiwgd2hpY2ggbXVzdCBleGlzdCBhbmQgYmUgZWl0aGVyCithIGZpbGUsIHN5bWxpbmsgb3IgZGlyZWN0b3J5LCB0byA8ZGVzdGluYXRpb24+LgorSW4gdGhlIHNlY29uZCBmb3JtLCB0aGUgbGFzdCBhcmd1bWVudCBoYXMgdG8gYmUgYW4gZXhpc3RpbmcKK2RpcmVjdG9yeTsgdGhlIGdpdmVuIHNvdXJjZXMgd2lsbCBiZSBtb3ZlZCBpbnRvIHRoaXMgZGlyZWN0b3J5LgorCitUaGUgaW5kZXggaXMgdXBkYXRlZCBhZnRlciBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIGJ1dCB0aGUgY2hhbmdlIG11c3Qgc3RpbGwgYmUKK2NvbW1pdHRlZC4KKworT1BUSU9OUworLS0tLS0tLQorLWY6OgorLS1mb3JjZTo6CisJRm9yY2UgcmVuYW1pbmcgb3IgbW92aW5nIG9mIGEgZmlsZSBldmVuIGlmIHRoZSB0YXJnZXQgZXhpc3RzCistazo6CisJU2tpcCBtb3ZlIG9yIHJlbmFtZSBhY3Rpb25zIHdoaWNoIHdvdWxkIGxlYWQgdG8gYW4gZXJyb3IKKwljb25kaXRpb24uIEFuIGVycm9yIGhhcHBlbnMgd2hlbiBhIHNvdXJjZSBpcyBuZWl0aGVyIGV4aXN0aW5nIG5vcgorCWNvbnRyb2xsZWQgYnkgR2l0LCBvciB3aGVuIGl0IHdvdWxkIG92ZXJ3cml0ZSBhbiBleGlzdGluZworCWZpbGUgdW5sZXNzIGAtZmAgaXMgZ2l2ZW4uCistbjo6CistLWRyeS1ydW46OgorCURvIG5vdGhpbmc7IG9ubHkgc2hvdyB3aGF0IHdvdWxkIGhhcHBlbgorCistdjo6CistLXZlcmJvc2U6OgorCVJlcG9ydCB0aGUgbmFtZXMgb2YgZmlsZXMgYXMgdGhleSBhcmUgbW92ZWQuCisKK1NVQk1PRFVMRVMKKy0tLS0tLS0tLS0KK01vdmluZyBhIHN1Ym1vZHVsZSB1c2luZyBhIGdpdGZpbGUgKHdoaWNoIG1lYW5zIHRoZXkgd2VyZSBjbG9uZWQKK3dpdGggYSBHaXQgdmVyc2lvbiAxLjcuOCBvciBuZXdlcikgd2lsbCB1cGRhdGUgdGhlIGdpdGZpbGUgYW5kCitjb3JlLndvcmt0cmVlIHNldHRpbmcgdG8gbWFrZSB0aGUgc3VibW9kdWxlIHdvcmsgaW4gdGhlIG5ldyBsb2NhdGlvbi4KK0l0IGFsc28gd2lsbCBhdHRlbXB0IHRvIHVwZGF0ZSB0aGUgc3VibW9kdWxlLjxuYW1lPi5wYXRoIHNldHRpbmcgaW4KK3RoZSBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0gZmlsZSBhbmQgc3RhZ2UgdGhhdCBmaWxlICh1bmxlc3MgLW4gaXMgdXNlZCkuCisKK0JVR1MKKy0tLS0KK0VhY2ggdGltZSBhIHN1cGVycHJvamVjdCB1cGRhdGUgbW92ZXMgYSBwb3B1bGF0ZWQgc3VibW9kdWxlIChlLmcuIHdoZW4KK3N3aXRjaGluZyBiZXR3ZWVuIGNvbW1pdHMgYmVmb3JlIGFuZCBhZnRlciB0aGUgbW92ZSkgYSBzdGFsZSBzdWJtb2R1bGUKK2NoZWNrb3V0IHdpbGwgcmVtYWluIGluIHRoZSBvbGQgbG9jYXRpb24gYW5kIGFuIGVtcHR5IGRpcmVjdG9yeSB3aWxsCithcHBlYXIgaW4gdGhlIG5ldyBsb2NhdGlvbi4gVG8gcG9wdWxhdGUgdGhlIHN1Ym1vZHVsZSBhZ2FpbiBpbiB0aGUgbmV3Citsb2NhdGlvbiB0aGUgdXNlciB3aWxsIGhhdmUgdG8gcnVuICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIKK2FmdGVyd2FyZHMuIFJlbW92aW5nIHRoZSBvbGQgZGlyZWN0b3J5IGlzIG9ubHkgc2FmZSB3aGVuIGl0IHVzZXMgYQorZ2l0ZmlsZSwgYXMgb3RoZXJ3aXNlIHRoZSBoaXN0b3J5IG9mIHRoZSBzdWJtb2R1bGUgd2lsbCBiZSBkZWxldGVkCit0b28uIEJvdGggc3RlcHMgd2lsbCBiZSBvYnNvbGV0ZSB3aGVuIHJlY3Vyc2l2ZSBzdWJtb2R1bGUgdXBkYXRlIGhhcworYmVlbiBpbXBsZW1lbnRlZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNiMGViMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW5hbWUtcmV2LnR4dApAQCAtMCwwICsxLDg5IEBACitnaXQtbmFtZS1yZXYoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbmFtZS1yZXYgLSBGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG5hbWUtcmV2JyBbLS10YWdzXSBbLS1yZWZzPTxwYXR0ZXJuPl0KKwkgICAgICAgKCAtLWFsbCB8IC0tc3RkaW4gfCA8Y29tbWl0LWlzaD4uLi4gKQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ZpbmRzIHN5bWJvbGljIG5hbWVzIHN1aXRhYmxlIGZvciBodW1hbiBkaWdlc3Rpb24gZm9yIHJldmlzaW9ucyBnaXZlbiBpbiBhbnkKK2Zvcm1hdCBwYXJzYWJsZSBieSAnZ2l0IHJldi1wYXJzZScuCisKKworT1BUSU9OUworLS0tLS0tLQorCistLXRhZ3M6OgorCURvIG5vdCB1c2UgYnJhbmNoIG5hbWVzLCBidXQgb25seSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMKKworLS1yZWZzPTxwYXR0ZXJuPjo6CisJT25seSB1c2UgcmVmcyB3aG9zZSBuYW1lcyBtYXRjaCBhIGdpdmVuIHNoZWxsIHBhdHRlcm4uICBUaGUgcGF0dGVybgorCWNhbiBiZSBvbmUgb2YgYnJhbmNoIG5hbWUsIHRhZyBuYW1lIG9yIGZ1bGx5IHF1YWxpZmllZCByZWYgbmFtZS4gSWYKKwlnaXZlbiBtdWx0aXBsZSB0aW1lcywgdXNlIHJlZnMgd2hvc2UgbmFtZXMgbWF0Y2ggYW55IG9mIHRoZSBnaXZlbiBzaGVsbAorCXBhdHRlcm5zLiBVc2UgYC0tbm8tcmVmc2AgdG8gY2xlYXIgYW55IHByZXZpb3VzIHJlZiBwYXR0ZXJucyBnaXZlbi4KKworLS1leGNsdWRlPTxwYXR0ZXJuPjo6CisJRG8gbm90IHVzZSBhbnkgcmVmIHdob3NlIG5hbWUgbWF0Y2hlcyBhIGdpdmVuIHNoZWxsIHBhdHRlcm4uIFRoZQorCXBhdHRlcm4gY2FuIGJlIG9uZSBvZiBicmFuY2ggbmFtZSwgdGFnIG5hbWUgb3IgZnVsbHkgcXVhbGlmaWVkIHJlZgorCW5hbWUuIElmIGdpdmVuIG11bHRpcGxlIHRpbWVzLCBhIHJlZiB3aWxsIGJlIGV4Y2x1ZGVkIHdoZW4gaXQgbWF0Y2hlcworCWFueSBvZiB0aGUgZ2l2ZW4gcGF0dGVybnMuIFdoZW4gdXNlZCB0b2dldGhlciB3aXRoIC0tcmVmcywgYSByZWYgd2lsbAorCWJlIHVzZWQgYXMgYSBtYXRjaCBvbmx5IHdoZW4gaXQgbWF0Y2hlcyBhdCBsZWFzdCBvbmUgLS1yZWZzIHBhdHRlcm4gYW5kCisJZG9lcyBub3QgbWF0Y2ggYW55IC0tZXhjbHVkZSBwYXR0ZXJucy4gVXNlIGAtLW5vLWV4Y2x1ZGVgIHRvIGNsZWFyIHRoZQorCWxpc3Qgb2YgZXhjbHVkZSBwYXR0ZXJucy4KKworLS1hbGw6OgorCUxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMKKworLS1zdGRpbjo6CisJVHJhbnNmb3JtIHN0ZGluIGJ5IHN1YnN0aXR1dGluZyBhbGwgdGhlIDQwLWNoYXJhY3RlciBTSEEtMQorCWhleGVzIChzYXkgJGhleCkgd2l0aCAiJGhleCAoJHJldl9uYW1lKSIuICBXaGVuIHVzZWQgd2l0aAorCS0tbmFtZS1vbmx5LCBzdWJzdGl0dXRlIHdpdGggIiRyZXZfbmFtZSIsIG9taXR0aW5nICRoZXgKKwlhbHRvZ2V0aGVyLiAgSW50ZW5kZWQgZm9yIHRoZSBzY3JpcHRlcidzIHVzZS4KKworLS1uYW1lLW9ubHk6OgorCUluc3RlYWQgb2YgcHJpbnRpbmcgYm90aCB0aGUgU0hBLTEgYW5kIHRoZSBuYW1lLCBwcmludCBvbmx5CisJdGhlIG5hbWUuICBJZiBnaXZlbiB3aXRoIC0tdGFncyB0aGUgdXN1YWwgdGFnIHByZWZpeCBvZgorCSJ0YWdzLyIgaXMgYWxzbyBvbWl0dGVkIGZyb20gdGhlIG5hbWUsIG1hdGNoaW5nIHRoZSBvdXRwdXQKKwlvZiBgZ2l0LWRlc2NyaWJlYCBtb3JlIGNsb3NlbHkuCisKKy0tbm8tdW5kZWZpbmVkOjoKKwlEaWUgd2l0aCBlcnJvciBjb2RlICE9IDAgd2hlbiBhIHJlZmVyZW5jZSBpcyB1bmRlZmluZWQsCisJaW5zdGVhZCBvZiBwcmludGluZyBgdW5kZWZpbmVkYC4KKworLS1hbHdheXM6OgorCVNob3cgdW5pcXVlbHkgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjay4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK0dpdmVuIGEgY29tbWl0LCBmaW5kIG91dCB3aGVyZSBpdCBpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgcmVmcy4gU2F5IHNvbWVib2R5Cit3cm90ZSB5b3UgYWJvdXQgdGhhdCBmYW50YXN0aWMgY29tbWl0IDMzZGI1ZjRkOTAyN2ExMGU0NzdjY2YwNTRiMmMxYWI5NGY3NGM4NWEuCitPZiBjb3Vyc2UsIHlvdSBsb29rIGludG8gdGhlIGNvbW1pdCwgYnV0IHRoYXQgb25seSB0ZWxscyB5b3Ugd2hhdCBoYXBwZW5lZCwgYnV0Citub3QgdGhlIGNvbnRleHQuCisKK0VudGVyICdnaXQgbmFtZS1yZXYnOgorCistLS0tLS0tLS0tLS0KKyUgZ2l0IG5hbWUtcmV2IDMzZGI1ZjRkOTAyN2ExMGU0NzdjY2YwNTRiMmMxYWI5NGY3NGM4NWEKKzMzZGI1ZjRkOTAyN2ExMGU0NzdjY2YwNTRiMmMxYWI5NGY3NGM4NWEgdGFncy92MC45OX45NDAKKy0tLS0tLS0tLS0tLQorCitOb3cgeW91IGFyZSB3aXNlciwgYmVjYXVzZSB5b3Uga25vdyB0aGF0IGl0IGhhcHBlbmVkIDk0MCByZXZpc2lvbnMgYmVmb3JlIHYwLjk5LgorCitBbm90aGVyIG5pY2UgdGhpbmcgeW91IGNhbiBkbyBpczoKKworLS0tLS0tLS0tLS0tCislIGdpdCBsb2cgfCBnaXQgbmFtZS1yZXYgLS1zdGRpbgorLS0tLS0tLS0tLS0tCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbm90ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbm90ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDJlODIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ub3Rlcy50eHQKQEAgLTAsMCArMSw0MDUgQEAKK2dpdC1ub3RlcygxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1ub3RlcyAtIEFkZCBvciBpbnNwZWN0IG9iamVjdCBub3RlcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbm90ZXMnIFtsaXN0IFs8b2JqZWN0Pl1dCisnZ2l0IG5vdGVzJyBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1GIDxmaWxlPiB8IC1tIDxtc2c+IHwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dCisnZ2l0IG5vdGVzJyBjb3B5IFstZl0gKCAtLXN0ZGluIHwgPGZyb20tb2JqZWN0PiBbPHRvLW9iamVjdD5dICkKKydnaXQgbm90ZXMnIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1GIDxmaWxlPiB8IC1tIDxtc2c+IHwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dCisnZ2l0IG5vdGVzJyBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVjdD5dCisnZ2l0IG5vdGVzJyBzaG93IFs8b2JqZWN0Pl0KKydnaXQgbm90ZXMnIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5PiBdIDxub3Rlcy1yZWY+CisnZ2l0IG5vdGVzJyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0KKydnaXQgbm90ZXMnIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdCisnZ2l0IG5vdGVzJyByZW1vdmUgWy0taWdub3JlLW1pc3NpbmddIFstLXN0ZGluXSBbPG9iamVjdD4uLi5dCisnZ2l0IG5vdGVzJyBwcnVuZSBbLW5dIFstdl0KKydnaXQgbm90ZXMnIGdldC1yZWYKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0FkZHMsIHJlbW92ZXMsIG9yIHJlYWRzIG5vdGVzIGF0dGFjaGVkIHRvIG9iamVjdHMsIHdpdGhvdXQgdG91Y2hpbmcKK3RoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCisKK0J5IGRlZmF1bHQsIG5vdGVzIGFyZSBzYXZlZCB0byBhbmQgcmVhZCBmcm9tIGByZWZzL25vdGVzL2NvbW1pdHNgLCBidXQKK3RoaXMgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbi4gIFNlZSB0aGUgT1BUSU9OUywgQ09ORklHVVJBVElPTiwgYW5kCitFTlZJUk9OTUVOVCBzZWN0aW9ucyBiZWxvdy4gIElmIHRoaXMgcmVmIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlCitxdWlldGx5IGNyZWF0ZWQgd2hlbiBpdCBpcyBmaXJzdCBuZWVkZWQgdG8gc3RvcmUgYSBub3RlLgorCitBIHR5cGljYWwgdXNlIG9mIG5vdGVzIGlzIHRvIHN1cHBsZW1lbnQgYSBjb21taXQgbWVzc2FnZSB3aXRob3V0CitjaGFuZ2luZyB0aGUgY29tbWl0IGl0c2VsZi4gTm90ZXMgY2FuIGJlIHNob3duIGJ5ICdnaXQgbG9nJyBhbG9uZyB3aXRoCit0aGUgb3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UuIFRvIGRpc3Rpbmd1aXNoIHRoZXNlIG5vdGVzIGZyb20gdGhlCittZXNzYWdlIHN0b3JlZCBpbiB0aGUgY29tbWl0IG9iamVjdCwgdGhlIG5vdGVzIGFyZSBpbmRlbnRlZCBsaWtlIHRoZQorbWVzc2FnZSwgYWZ0ZXIgYW4gdW5pbmRlbnRlZCBsaW5lIHNheWluZyAiTm90ZXMgKDxyZWZuYW1lPik6IiAob3IKKyJOb3RlczoiIGZvciBgcmVmcy9ub3Rlcy9jb21taXRzYCkuCisKK05vdGVzIGNhbiBhbHNvIGJlIGFkZGVkIHRvIHBhdGNoZXMgcHJlcGFyZWQgd2l0aCBgZ2l0IGZvcm1hdC1wYXRjaGAgYnkKK3VzaW5nIHRoZSBgLS1ub3Rlc2Agb3B0aW9uLiBTdWNoIG5vdGVzIGFyZSBhZGRlZCBhcyBhIHBhdGNoIGNvbW1lbnRhcnkKK2FmdGVyIGEgdGhyZWUgZGFzaCBzZXBhcmF0b3IgbGluZS4KKworVG8gY2hhbmdlIHdoaWNoIG5vdGVzIGFyZSBzaG93biBieSAnZ2l0IGxvZycsIHNlZSB0aGUKKyJub3Rlcy5kaXNwbGF5UmVmIiBjb25maWd1cmF0aW9uIGluIGxpbmtnaXQ6Z2l0LWxvZ1sxXS4KKworU2VlIHRoZSAibm90ZXMucmV3cml0ZS48Y29tbWFuZD4iIGNvbmZpZ3VyYXRpb24gZm9yIGEgd2F5IHRvIGNhcnJ5Citub3RlcyBhY3Jvc3MgY29tbWFuZHMgdGhhdCByZXdyaXRlIGNvbW1pdHMuCisKKworU1VCQ09NTUFORFMKKy0tLS0tLS0tLS0tCisKK2xpc3Q6OgorCUxpc3QgdGhlIG5vdGVzIG9iamVjdCBmb3IgYSBnaXZlbiBvYmplY3QuIElmIG5vIG9iamVjdCBpcworCWdpdmVuLCBzaG93IGEgbGlzdCBvZiBhbGwgbm90ZSBvYmplY3RzIGFuZCB0aGUgb2JqZWN0cyB0aGV5CisJYW5ub3RhdGUgKGluIHRoZSBmb3JtYXQgIjxub3RlIG9iamVjdD4gPGFubm90YXRlZCBvYmplY3Q+IikuCisJVGhpcyBpcyB0aGUgZGVmYXVsdCBzdWJjb21tYW5kIGlmIG5vIHN1YmNvbW1hbmQgaXMgZ2l2ZW4uCisKK2FkZDo6CisJQWRkIG5vdGVzIGZvciBhIGdpdmVuIG9iamVjdCAoZGVmYXVsdHMgdG8gSEVBRCkuIEFib3J0IGlmIHRoZQorCW9iamVjdCBhbHJlYWR5IGhhcyBub3RlcyAodXNlIGAtZmAgdG8gb3ZlcndyaXRlIGV4aXN0aW5nIG5vdGVzKS4KKwlIb3dldmVyLCBpZiB5b3UncmUgdXNpbmcgYGFkZGAgaW50ZXJhY3RpdmVseSAodXNpbmcgYW4gZWRpdG9yCisJdG8gc3VwcGx5IHRoZSBub3RlcyBjb250ZW50cyksIHRoZW4gLSBpbnN0ZWFkIG9mIGFib3J0aW5nIC0KKwl0aGUgZXhpc3Rpbmcgbm90ZXMgd2lsbCBiZSBvcGVuZWQgaW4gdGhlIGVkaXRvciAobGlrZSB0aGUgYGVkaXRgCisJc3ViY29tbWFuZCkuCisKK2NvcHk6OgorCUNvcHkgdGhlIG5vdGVzIGZvciB0aGUgZmlyc3Qgb2JqZWN0IG9udG8gdGhlIHNlY29uZCBvYmplY3QgKGRlZmF1bHRzIHRvCisJSEVBRCkuIEFib3J0IGlmIHRoZSBzZWNvbmQgb2JqZWN0IGFscmVhZHkgaGFzIG5vdGVzLCBvciBpZiB0aGUgZmlyc3QKKwlvYmplY3QgaGFzIG5vbmUgKHVzZSAtZiB0byBvdmVyd3JpdGUgZXhpc3Rpbmcgbm90ZXMgdG8gdGhlCisJc2Vjb25kIG9iamVjdCkuIFRoaXMgc3ViY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvOgorCWBnaXQgbm90ZXMgYWRkIFstZl0gLUMgJChnaXQgbm90ZXMgbGlzdCA8ZnJvbS1vYmplY3Q+KSA8dG8tb2JqZWN0PmAKKysKK0luIGAtLXN0ZGluYCBtb2RlLCB0YWtlIGxpbmVzIGluIHRoZSBmb3JtYXQKKysKKy0tLS0tLS0tLS0KKzxmcm9tLW9iamVjdD4gU1AgPHRvLW9iamVjdD4gWyBTUCA8cmVzdD4gXSBMRgorLS0tLS0tLS0tLQorKworb24gc3RhbmRhcmQgaW5wdXQsIGFuZCBjb3B5IHRoZSBub3RlcyBmcm9tIGVhY2ggPGZyb20tb2JqZWN0PiB0byBpdHMKK2NvcnJlc3BvbmRpbmcgPHRvLW9iamVjdD4uICAoVGhlIG9wdGlvbmFsIGA8cmVzdD5gIGlzIGlnbm9yZWQgc28gdGhhdAordGhlIGNvbW1hbmQgY2FuIHJlYWQgdGhlIGlucHV0IGdpdmVuIHRvIHRoZSBgcG9zdC1yZXdyaXRlYCBob29rLikKKworYXBwZW5kOjoKKwlBcHBlbmQgdG8gdGhlIG5vdGVzIG9mIGFuIGV4aXN0aW5nIG9iamVjdCAoZGVmYXVsdHMgdG8gSEVBRCkuCisJQ3JlYXRlcyBhIG5ldyBub3RlcyBvYmplY3QgaWYgbmVlZGVkLgorCitlZGl0OjoKKwlFZGl0IHRoZSBub3RlcyBmb3IgYSBnaXZlbiBvYmplY3QgKGRlZmF1bHRzIHRvIEhFQUQpLgorCitzaG93OjoKKwlTaG93IHRoZSBub3RlcyBmb3IgYSBnaXZlbiBvYmplY3QgKGRlZmF1bHRzIHRvIEhFQUQpLgorCittZXJnZTo6CisJTWVyZ2UgdGhlIGdpdmVuIG5vdGVzIHJlZiBpbnRvIHRoZSBjdXJyZW50IG5vdGVzIHJlZi4KKwlUaGlzIHdpbGwgdHJ5IHRvIG1lcmdlIHRoZSBjaGFuZ2VzIG1hZGUgYnkgdGhlIGdpdmVuCisJbm90ZXMgcmVmIChjYWxsZWQgInJlbW90ZSIpIHNpbmNlIHRoZSBtZXJnZS1iYXNlIChpZgorCWFueSkgaW50byB0aGUgY3VycmVudCBub3RlcyByZWYgKGNhbGxlZCAibG9jYWwiKS4KKysKK0lmIGNvbmZsaWN0cyBhcmlzZSBhbmQgYSBzdHJhdGVneSBmb3IgYXV0b21hdGljYWxseSByZXNvbHZpbmcKK2NvbmZsaWN0aW5nIG5vdGVzIChzZWUgdGhlICJOT1RFUyBNRVJHRSBTVFJBVEVHSUVTIiBzZWN0aW9uKSBpcyBub3QgZ2l2ZW4sCit0aGUgIm1hbnVhbCIgcmVzb2x2ZXIgaXMgdXNlZC4gVGhpcyByZXNvbHZlciBjaGVja3Mgb3V0IHRoZQorY29uZmxpY3Rpbmcgbm90ZXMgaW4gYSBzcGVjaWFsIHdvcmt0cmVlIChgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRWApLAorYW5kIGluc3RydWN0cyB0aGUgdXNlciB0byBtYW51YWxseSByZXNvbHZlIHRoZSBjb25mbGljdHMgdGhlcmUuCitXaGVuIGRvbmUsIHRoZSB1c2VyIGNhbiBlaXRoZXIgZmluYWxpemUgdGhlIG1lcmdlIHdpdGgKKydnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvciBhYm9ydCB0aGUgbWVyZ2Ugd2l0aAorJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0Jy4KKworcmVtb3ZlOjoKKwlSZW1vdmUgdGhlIG5vdGVzIGZvciBnaXZlbiBvYmplY3RzIChkZWZhdWx0cyB0byBIRUFEKS4gV2hlbgorCWdpdmluZyB6ZXJvIG9yIG9uZSBvYmplY3QgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB0aGlzIGlzCisJZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIGFuIGVtcHR5IG5vdGUgbWVzc2FnZSB0bworCXRoZSBgZWRpdGAgc3ViY29tbWFuZC4KKworcHJ1bmU6OgorCVJlbW92ZSBhbGwgbm90ZXMgZm9yIG5vbi1leGlzdGluZy91bnJlYWNoYWJsZSBvYmplY3RzLgorCitnZXQtcmVmOjoKKwlQcmludCB0aGUgY3VycmVudCBub3RlcyByZWYuIFRoaXMgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8KKwlyZXRyaWV2ZSB0aGUgY3VycmVudCBub3RlcyByZWYgKGUuZy4gZnJvbSBzY3JpcHRzKS4KKworT1BUSU9OUworLS0tLS0tLQorLWY6OgorLS1mb3JjZTo6CisJV2hlbiBhZGRpbmcgbm90ZXMgdG8gYW4gb2JqZWN0IHRoYXQgYWxyZWFkeSBoYXMgbm90ZXMsCisJb3ZlcndyaXRlIHRoZSBleGlzdGluZyBub3RlcyAoaW5zdGVhZCBvZiBhYm9ydGluZykuCisKKy1tIDxtc2c+OjoKKy0tbWVzc2FnZT08bXNnPjo6CisJVXNlIHRoZSBnaXZlbiBub3RlIG1lc3NhZ2UgKGluc3RlYWQgb2YgcHJvbXB0aW5nKS4KKwlJZiBtdWx0aXBsZSBgLW1gIG9wdGlvbnMgYXJlIGdpdmVuLCB0aGVpciB2YWx1ZXMKKwlhcmUgY29uY2F0ZW5hdGVkIGFzIHNlcGFyYXRlIHBhcmFncmFwaHMuCisJTGluZXMgc3RhcnRpbmcgd2l0aCBgI2AgYW5kIGVtcHR5IGxpbmVzIG90aGVyIHRoYW4gYQorCXNpbmdsZSBsaW5lIGJldHdlZW4gcGFyYWdyYXBocyB3aWxsIGJlIHN0cmlwcGVkIG91dC4KKworLUYgPGZpbGU+OjoKKy0tZmlsZT08ZmlsZT46OgorCVRha2UgdGhlIG5vdGUgbWVzc2FnZSBmcm9tIHRoZSBnaXZlbiBmaWxlLiAgVXNlICctJyB0bworCXJlYWQgdGhlIG5vdGUgbWVzc2FnZSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KKwlMaW5lcyBzdGFydGluZyB3aXRoIGAjYCBhbmQgZW1wdHkgbGluZXMgb3RoZXIgdGhhbiBhCisJc2luZ2xlIGxpbmUgYmV0d2VlbiBwYXJhZ3JhcGhzIHdpbGwgYmUgc3RyaXBwZWQgb3V0LgorCistQyA8b2JqZWN0Pjo6CistLXJldXNlLW1lc3NhZ2U9PG9iamVjdD46OgorCVRha2UgdGhlIGdpdmVuIGJsb2Igb2JqZWN0IChmb3IgZXhhbXBsZSwgYW5vdGhlciBub3RlKSBhcyB0aGUKKwlub3RlIG1lc3NhZ2UuIChVc2UgYGdpdCBub3RlcyBjb3B5IDxvYmplY3Q+YCBpbnN0ZWFkIHRvCisJY29weSBub3RlcyBiZXR3ZWVuIG9iamVjdHMuKQorCistYyA8b2JqZWN0Pjo6CistLXJlZWRpdC1tZXNzYWdlPTxvYmplY3Q+OjoKKwlMaWtlICctQycsIGJ1dCB3aXRoIGAtY2AgdGhlIGVkaXRvciBpcyBpbnZva2VkLCBzbyB0aGF0CisJdGhlIHVzZXIgY2FuIGZ1cnRoZXIgZWRpdCB0aGUgbm90ZSBtZXNzYWdlLgorCistLWFsbG93LWVtcHR5OjoKKwlBbGxvdyBhbiBlbXB0eSBub3RlIG9iamVjdCB0byBiZSBzdG9yZWQuIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzCisJdG8gYXV0b21hdGljYWxseSByZW1vdmUgZW1wdHkgbm90ZXMuCisKKy0tcmVmIDxyZWY+OjoKKwlNYW5pcHVsYXRlIHRoZSBub3RlcyB0cmVlIGluIDxyZWY+LiAgVGhpcyBvdmVycmlkZXMKKwlgR0lUX05PVEVTX1JFRmAgYW5kIHRoZSAiY29yZS5ub3Rlc1JlZiIgY29uZmlndXJhdGlvbi4gIFRoZSByZWYKKwlzcGVjaWZpZXMgdGhlIGZ1bGwgcmVmbmFtZSB3aGVuIGl0IGJlZ2lucyB3aXRoIGByZWZzL25vdGVzL2A7IHdoZW4gaXQKKwliZWdpbnMgd2l0aCBgbm90ZXMvYCwgYHJlZnMvYCBhbmQgb3RoZXJ3aXNlIGByZWZzL25vdGVzL2AgaXMgcHJlZml4ZWQKKwl0byBmb3JtIGEgZnVsbCBuYW1lIG9mIHRoZSByZWYuCisKKy0taWdub3JlLW1pc3Npbmc6OgorCURvIG5vdCBjb25zaWRlciBpdCBhbiBlcnJvciB0byByZXF1ZXN0IHJlbW92aW5nIG5vdGVzIGZyb20gYW4KKwlvYmplY3QgdGhhdCBkb2VzIG5vdCBoYXZlIG5vdGVzIGF0dGFjaGVkIHRvIGl0LgorCistLXN0ZGluOjoKKwlBbHNvIHJlYWQgdGhlIG9iamVjdCBuYW1lcyB0byByZW1vdmUgbm90ZXMgZnJvbSB0aGUgc3RhbmRhcmQKKwlpbnB1dCAodGhlcmUgaXMgbm8gcmVhc29uIHlvdSBjYW5ub3QgY29tYmluZSB0aGlzIHdpdGggb2JqZWN0CisJbmFtZXMgZnJvbSB0aGUgY29tbWFuZCBsaW5lKS4KKworLW46OgorLS1kcnktcnVuOjoKKwlEbyBub3QgcmVtb3ZlIGFueXRoaW5nOyBqdXN0IHJlcG9ydCB0aGUgb2JqZWN0IG5hbWVzIHdob3NlIG5vdGVzCisJd291bGQgYmUgcmVtb3ZlZC4KKworLXMgPHN0cmF0ZWd5Pjo6CistLXN0cmF0ZWd5PTxzdHJhdGVneT46OgorCVdoZW4gbWVyZ2luZyBub3RlcywgcmVzb2x2ZSBub3RlcyBjb25mbGljdHMgdXNpbmcgdGhlIGdpdmVuCisJc3RyYXRlZ3kuIFRoZSBmb2xsb3dpbmcgc3RyYXRlZ2llcyBhcmUgcmVjb2duaXplZDogIm1hbnVhbCIKKwkoZGVmYXVsdCksICJvdXJzIiwgInRoZWlycyIsICJ1bmlvbiIgYW5kICJjYXRfc29ydF91bmlxIi4KKwlUaGlzIG9wdGlvbiBvdmVycmlkZXMgdGhlICJub3Rlcy5tZXJnZVN0cmF0ZWd5IiBjb25maWd1cmF0aW9uIHNldHRpbmcuCisJU2VlIHRoZSAiTk9URVMgTUVSR0UgU1RSQVRFR0lFUyIgc2VjdGlvbiBiZWxvdyBmb3IgbW9yZQorCWluZm9ybWF0aW9uIG9uIGVhY2ggbm90ZXMgbWVyZ2Ugc3RyYXRlZ3kuCisKKy0tY29tbWl0OjoKKwlGaW5hbGl6ZSBhbiBpbi1wcm9ncmVzcyAnZ2l0IG5vdGVzIG1lcmdlJy4gVXNlIHRoaXMgb3B0aW9uCisJd2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGUgY29uZmxpY3RzIHRoYXQgJ2dpdCBub3RlcyBtZXJnZScKKwlzdG9yZWQgaW4gLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS4gVGhpcyBhbWVuZHMgdGhlIHBhcnRpYWwKKwltZXJnZSBjb21taXQgY3JlYXRlZCBieSAnZ2l0IG5vdGVzIG1lcmdlJyAoc3RvcmVkIGluCisJLmdpdC9OT1RFU19NRVJHRV9QQVJUSUFMKSBieSBhZGRpbmcgdGhlIG5vdGVzIGluCisJLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS4gVGhlIG5vdGVzIHJlZiBzdG9yZWQgaW4gdGhlCisJLmdpdC9OT1RFU19NRVJHRV9SRUYgc3ltcmVmIGlzIHVwZGF0ZWQgdG8gdGhlIHJlc3VsdGluZyBjb21taXQuCisKKy0tYWJvcnQ6OgorCUFib3J0L3Jlc2V0IGFuIGluLXByb2dyZXNzICdnaXQgbm90ZXMgbWVyZ2UnLCBpLmUuIGEgbm90ZXMgbWVyZ2UKKwl3aXRoIGNvbmZsaWN0cy4gVGhpcyBzaW1wbHkgcmVtb3ZlcyBhbGwgZmlsZXMgcmVsYXRlZCB0byB0aGUKKwlub3RlcyBtZXJnZS4KKworLXE6OgorLS1xdWlldDo6CisJV2hlbiBtZXJnaW5nIG5vdGVzLCBvcGVyYXRlIHF1aWV0bHkuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJV2hlbiBtZXJnaW5nIG5vdGVzLCBiZSBtb3JlIHZlcmJvc2UuCisJV2hlbiBwcnVuaW5nIG5vdGVzLCByZXBvcnQgYWxsIG9iamVjdCBuYW1lcyB3aG9zZSBub3RlcyBhcmUKKwlyZW1vdmVkLgorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworQ29tbWl0IG5vdGVzIGFyZSBibG9icyBjb250YWluaW5nIGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IGFuIG9iamVjdAorKHVzdWFsbHkgaW5mb3JtYXRpb24gdG8gc3VwcGxlbWVudCBhIGNvbW1pdCdzIG1lc3NhZ2UpLiAgVGhlc2UgYmxvYnMKK2FyZSB0YWtlbiBmcm9tIG5vdGVzIHJlZnMuICBBIG5vdGVzIHJlZiBpcyB1c3VhbGx5IGEgYnJhbmNoIHdoaWNoCitjb250YWlucyAiZmlsZXMiIHdob3NlIHBhdGhzIGFyZSB0aGUgb2JqZWN0IG5hbWVzIGZvciB0aGUgb2JqZWN0cwordGhleSBkZXNjcmliZSwgd2l0aCBzb21lIGRpcmVjdG9yeSBzZXBhcmF0b3JzIGluY2x1ZGVkIGZvciBwZXJmb3JtYW5jZQorcmVhc29ucyBmb290bm90ZTpbUGVybWl0dGVkIHBhdGhuYW1lcyBoYXZlIHRoZSBmb3JtCisnYWInYC9gJ2NkJ2AvYCdlZidgL2AnLi4uJ2AvYCdhYmNkZWYuLi4nOiBhIHNlcXVlbmNlIG9mIGRpcmVjdG9yeQorbmFtZXMgb2YgdHdvIGhleGFkZWNpbWFsIGRpZ2l0cyBlYWNoIGZvbGxvd2VkIGJ5IGEgZmlsZW5hbWUgd2l0aCB0aGUKK3Jlc3Qgb2YgdGhlIG9iamVjdCBJRC5dLgorCitFdmVyeSBub3RlcyBjaGFuZ2UgY3JlYXRlcyBhIG5ldyBjb21taXQgYXQgdGhlIHNwZWNpZmllZCBub3RlcyByZWYuCitZb3UgY2FuIHRoZXJlZm9yZSBpbnNwZWN0IHRoZSBoaXN0b3J5IG9mIHRoZSBub3RlcyBieSBpbnZva2luZywgZS5nLiwKK2BnaXQgbG9nIC1wIG5vdGVzL2NvbW1pdHNgLiAgQ3VycmVudGx5IHRoZSBjb21taXQgbWVzc2FnZSBvbmx5IHJlY29yZHMKK3doaWNoIG9wZXJhdGlvbiB0cmlnZ2VyZWQgdGhlIHVwZGF0ZSwgYW5kIHRoZSBjb21taXQgYXV0aG9yc2hpcCBpcworZGV0ZXJtaW5lZCBhY2NvcmRpbmcgdG8gdGhlIHVzdWFsIHJ1bGVzIChzZWUgbGlua2dpdDpnaXQtY29tbWl0WzFdKS4KK1RoZXNlIGRldGFpbHMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorCitJdCBpcyBhbHNvIHBlcm1pdHRlZCBmb3IgYSBub3RlcyByZWYgdG8gcG9pbnQgZGlyZWN0bHkgdG8gYSB0cmVlCitvYmplY3QsIGluIHdoaWNoIGNhc2UgdGhlIGhpc3Rvcnkgb2YgdGhlIG5vdGVzIGNhbiBiZSByZWFkIHdpdGgKK2BnaXQgbG9nIC1wIC1nIDxyZWZuYW1lPmAuCisKKworTk9URVMgTUVSR0UgU1RSQVRFR0lFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCBub3RlcyBtZXJnZSBzdHJhdGVneSBpcyAibWFudWFsIiwgd2hpY2ggY2hlY2tzIG91dAorY29uZmxpY3Rpbmcgbm90ZXMgaW4gYSBzcGVjaWFsIHdvcmsgdHJlZSBmb3IgcmVzb2x2aW5nIG5vdGVzIGNvbmZsaWN0cworKGAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFYCksIGFuZCBpbnN0cnVjdHMgdGhlIHVzZXIgdG8gcmVzb2x2ZSB0aGUKK2NvbmZsaWN0cyBpbiB0aGF0IHdvcmsgdHJlZS4KK1doZW4gZG9uZSwgdGhlIHVzZXIgY2FuIGVpdGhlciBmaW5hbGl6ZSB0aGUgbWVyZ2Ugd2l0aAorJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG9yIGFib3J0IHRoZSBtZXJnZSB3aXRoCisnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnLgorCitVc2VycyBtYXkgc2VsZWN0IGFuIGF1dG9tYXRlZCBtZXJnZSBzdHJhdGVneSBmcm9tIGFtb25nIHRoZSBmb2xsb3dpbmcgdXNpbmcKK2VpdGhlciAtcy8tLXN0cmF0ZWd5IG9wdGlvbiBvciBjb25maWd1cmluZyBub3Rlcy5tZXJnZVN0cmF0ZWd5IGFjY29yZGluZ2x5OgorCisib3VycyIgYXV0b21hdGljYWxseSByZXNvbHZlcyBjb25mbGljdGluZyBub3RlcyBpbiBmYXZvciBvZiB0aGUgbG9jYWwKK3ZlcnNpb24gKGkuZS4gdGhlIGN1cnJlbnQgbm90ZXMgcmVmKS4KKworInRoZWlycyIgYXV0b21hdGljYWxseSByZXNvbHZlcyBub3RlcyBjb25mbGljdHMgaW4gZmF2b3Igb2YgdGhlIHJlbW90ZQordmVyc2lvbiAoaS5lLiB0aGUgZ2l2ZW4gbm90ZXMgcmVmIGJlaW5nIG1lcmdlZCBpbnRvIHRoZSBjdXJyZW50IG5vdGVzCityZWYpLgorCisidW5pb24iIGF1dG9tYXRpY2FsbHkgcmVzb2x2ZXMgbm90ZXMgY29uZmxpY3RzIGJ5IGNvbmNhdGVuYXRpbmcgdGhlCitsb2NhbCBhbmQgcmVtb3RlIHZlcnNpb25zLgorCisiY2F0X3NvcnRfdW5pcSIgaXMgc2ltaWxhciB0byAidW5pb24iLCBidXQgaW4gYWRkaXRpb24gdG8gY29uY2F0ZW5hdGluZwordGhlIGxvY2FsIGFuZCByZW1vdGUgdmVyc2lvbnMsIHRoaXMgc3RyYXRlZ3kgYWxzbyBzb3J0cyB0aGUgcmVzdWx0aW5nCitsaW5lcywgYW5kIHJlbW92ZXMgZHVwbGljYXRlIGxpbmVzIGZyb20gdGhlIHJlc3VsdC4gVGhpcyBpcyBlcXVpdmFsZW50Cit0byBhcHBseWluZyB0aGUgImNhdCB8IHNvcnQgfCB1bmlxIiBzaGVsbCBwaXBlbGluZSB0byB0aGUgbG9jYWwgYW5kCityZW1vdGUgdmVyc2lvbnMuIFRoaXMgc3RyYXRlZ3kgaXMgdXNlZnVsIGlmIHRoZSBub3RlcyBmb2xsb3cgYSBsaW5lLWJhc2VkCitmb3JtYXQgd2hlcmUgb25lIHdhbnRzIHRvIGF2b2lkIGR1cGxpY2F0ZWQgbGluZXMgaW4gdGhlIG1lcmdlIHJlc3VsdC4KK05vdGUgdGhhdCBpZiBlaXRoZXIgdGhlIGxvY2FsIG9yIHJlbW90ZSB2ZXJzaW9uIGNvbnRhaW4gZHVwbGljYXRlIGxpbmVzCitwcmlvciB0byB0aGUgbWVyZ2UsIHRoZXNlIHdpbGwgYWxzbyBiZSByZW1vdmVkIGJ5IHRoaXMgbm90ZXMgbWVyZ2UKK3N0cmF0ZWd5LgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitZb3UgY2FuIHVzZSBub3RlcyB0byBhZGQgYW5ub3RhdGlvbnMgd2l0aCBpbmZvcm1hdGlvbiB0aGF0IHdhcyBub3QKK2F2YWlsYWJsZSBhdCB0aGUgdGltZSBhIGNvbW1pdCB3YXMgd3JpdHRlbi4KKworLS0tLS0tLS0tLS0tCiskIGdpdCBub3RlcyBhZGQgLW0gJ1Rlc3RlZC1ieTogSm9oYW5uZXMgU2l4dCA8ajZ0QGtkYmcub3JnPicgNzJhMTQ0ZTIKKyQgZ2l0IHNob3cgLXMgNzJhMTQ0ZQorWy4uLl0KKyAgICBTaWduZWQtb2ZmLWJ5OiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CisKK05vdGVzOgorICAgIFRlc3RlZC1ieTogSm9oYW5uZXMgU2l4dCA8ajZ0QGtkYmcub3JnPgorLS0tLS0tLS0tLS0tCisKK0luIHByaW5jaXBsZSwgYSBub3RlIGlzIGEgcmVndWxhciBHaXQgYmxvYiwgYW5kIGFueSBraW5kIG9mCisobm9uLSlmb3JtYXQgaXMgYWNjZXB0ZWQuICBZb3UgY2FuIGJpbmFyeS1zYWZlbHkgY3JlYXRlIG5vdGVzIGZyb20KK2FyYml0cmFyeSBmaWxlcyB1c2luZyAnZ2l0IGhhc2gtb2JqZWN0JzoKKworLS0tLS0tLS0tLS0tCiskIGNjICouYworJCBibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IC13IGEub3V0KQorJCBnaXQgbm90ZXMgLS1yZWY9YnVpbHQgYWRkIC0tYWxsb3ctZW1wdHkgLUMgIiRibG9iIiBIRUFECistLS0tLS0tLS0tLS0KKworKFlvdSBjYW5ub3Qgc2ltcGx5IHVzZSBgZ2l0IG5vdGVzIC0tcmVmPWJ1aWx0IGFkZCAtRiBhLm91dCBIRUFEYAorYmVjYXVzZSB0aGF0IGlzIG5vdCBiaW5hcnktc2FmZS4pCitPZiBjb3Vyc2UsIGl0IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHRvIGRpc3BsYXkgbm9uLXRleHQtZm9ybWF0IG5vdGVzCit3aXRoICdnaXQgbG9nJywgc28gaWYgeW91IHVzZSBzdWNoIG5vdGVzLCB5b3UnbGwgcHJvYmFibHkgbmVlZCB0byB3cml0ZQorc29tZSBzcGVjaWFsLXB1cnBvc2UgdG9vbHMgdG8gZG8gc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZW0uCisKKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitjb3JlLm5vdGVzUmVmOjoKKwlOb3RlcyByZWYgdG8gcmVhZCBhbmQgbWFuaXB1bGF0ZSBpbnN0ZWFkIG9mCisJYHJlZnMvbm90ZXMvY29tbWl0c2AuICBNdXN0IGJlIGFuIHVuYWJicmV2aWF0ZWQgcmVmIG5hbWUuCisJVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIHRocm91Z2ggdGhlIGVudmlyb25tZW50IGFuZAorCWNvbW1hbmQgbGluZS4KKworbm90ZXMubWVyZ2VTdHJhdGVneTo6CisJV2hpY2ggbWVyZ2Ugc3RyYXRlZ3kgdG8gY2hvb3NlIGJ5IGRlZmF1bHQgd2hlbiByZXNvbHZpbmcgbm90ZXMKKwljb25mbGljdHMuICBNdXN0IGJlIG9uZSBvZiBgbWFudWFsYCwgYG91cnNgLCBgdGhlaXJzYCwgYHVuaW9uYCwgb3IKKwlgY2F0X3NvcnRfdW5pcWAuICBEZWZhdWx0cyB0byBgbWFudWFsYC4gIFNlZSAiTk9URVMgTUVSR0UgU1RSQVRFR0lFUyIKKwlzZWN0aW9uIGFib3ZlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGVhY2ggc3RyYXRlZ3kuCisrCitUaGlzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyB0aGUgYC0tc3RyYXRlZ3lgIG9wdGlvbi4KKworbm90ZXMuPG5hbWU+Lm1lcmdlU3RyYXRlZ3k6OgorCVdoaWNoIG1lcmdlIHN0cmF0ZWd5IHRvIGNob29zZSB3aGVuIGRvaW5nIGEgbm90ZXMgbWVyZ2UgaW50bworCXJlZnMvbm90ZXMvPG5hbWU+LiAgVGhpcyBvdmVycmlkZXMgdGhlIG1vcmUgZ2VuZXJhbAorCSJub3Rlcy5tZXJnZVN0cmF0ZWd5Ii4gIFNlZSB0aGUgIk5PVEVTIE1FUkdFIFNUUkFURUdJRVMiIHNlY3Rpb24gYWJvdmUKKwlmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBlYWNoIGF2YWlsYWJsZSBzdHJhdGVneS4KKworbm90ZXMuZGlzcGxheVJlZjo6CisJV2hpY2ggcmVmIChvciByZWZzLCBpZiBhIGdsb2Igb3Igc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlKSwgaW4KKwlhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBzZXQgYnkgYGNvcmUubm90ZXNSZWZgIG9yCisJYEdJVF9OT1RFU19SRUZgLCB0byByZWFkIG5vdGVzIGZyb20gd2hlbiBzaG93aW5nIGNvbW1pdAorCW1lc3NhZ2VzIHdpdGggdGhlICdnaXQgbG9nJyBmYW1pbHkgb2YgY29tbWFuZHMuCisJVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgYnkgdGhlCisJYEdJVF9OT1RFU19ESVNQTEFZX1JFRmAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJU2VlIGxpbmtnaXQ6Z2l0LWxvZ1sxXS4KKworbm90ZXMucmV3cml0ZS48Y29tbWFuZD46OgorCVdoZW4gcmV3cml0aW5nIGNvbW1pdHMgd2l0aCA8Y29tbWFuZD4gKGN1cnJlbnRseSBgYW1lbmRgIG9yCisJYHJlYmFzZWApLCBpZiB0aGlzIHZhcmlhYmxlIGlzIGBmYWxzZWAsIGdpdCB3aWxsIG5vdCBjb3B5CisJbm90ZXMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIHJld3JpdHRlbiBjb21taXQuICBEZWZhdWx0cyB0bworCWB0cnVlYC4gIFNlZSBhbHNvICJgbm90ZXMucmV3cml0ZVJlZmAiIGJlbG93LgorKworVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX05PVEVTX1JFV1JJVEVfUkVGYAorZW52aXJvbm1lbnQgdmFyaWFibGUuCisKK25vdGVzLnJld3JpdGVNb2RlOjoKKwlXaGVuIGNvcHlpbmcgbm90ZXMgZHVyaW5nIGEgcmV3cml0ZSwgd2hhdCB0byBkbyBpZiB0aGUgdGFyZ2V0CisJY29tbWl0IGFscmVhZHkgaGFzIGEgbm90ZS4gIE11c3QgYmUgb25lIG9mIGBvdmVyd3JpdGVgLAorCWBjb25jYXRlbmF0ZWAsIGBjYXRfc29ydF91bmlxYCwgb3IgYGlnbm9yZWAuICBEZWZhdWx0cyB0bworCWBjb25jYXRlbmF0ZWAuCisrCitUaGlzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgYEdJVF9OT1RFU19SRVdSSVRFX01PREVgCitlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworbm90ZXMucmV3cml0ZVJlZjo6CisJV2hlbiBjb3B5aW5nIG5vdGVzIGR1cmluZyBhIHJld3JpdGUsIHNwZWNpZmllcyB0aGUgKGZ1bGx5CisJcXVhbGlmaWVkKSByZWYgd2hvc2Ugbm90ZXMgc2hvdWxkIGJlIGNvcGllZC4gIE1heSBiZSBhIGdsb2IsCisJaW4gd2hpY2ggY2FzZSBub3RlcyBpbiBhbGwgbWF0Y2hpbmcgcmVmcyB3aWxsIGJlIGNvcGllZC4gIFlvdQorCW1heSBhbHNvIHNwZWNpZnkgdGhpcyBjb25maWd1cmF0aW9uIHNldmVyYWwgdGltZXMuCisrCitEb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZTsgeW91IG11c3QgY29uZmlndXJlIHRoaXMgdmFyaWFibGUgdG8KK2VuYWJsZSBub3RlIHJld3JpdGluZy4KKysKK0NhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGBHSVRfTk9URVNfUkVXUklURV9SRUZgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisKK0VOVklST05NRU5UCistLS0tLS0tLS0tLQorCitgR0lUX05PVEVTX1JFRmA6OgorCVdoaWNoIHJlZiB0byBtYW5pcHVsYXRlIG5vdGVzIGZyb20sIGluc3RlYWQgb2YgYHJlZnMvbm90ZXMvY29tbWl0c2AuCisJVGhpcyBvdmVycmlkZXMgdGhlIGBjb3JlLm5vdGVzUmVmYCBzZXR0aW5nLgorCitgR0lUX05PVEVTX0RJU1BMQVlfUkVGYDo6CisJQ29sb24tZGVsaW1pdGVkIGxpc3Qgb2YgcmVmcyBvciBnbG9icyBpbmRpY2F0aW5nIHdoaWNoIHJlZnMsCisJaW4gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgZnJvbSBgY29yZS5ub3Rlc1JlZmAgb3IKKwlgR0lUX05PVEVTX1JFRmAsIHRvIHJlYWQgbm90ZXMgZnJvbSB3aGVuIHNob3dpbmcgY29tbWl0CisJbWVzc2FnZXMuCisJVGhpcyBvdmVycmlkZXMgdGhlIGBub3Rlcy5kaXNwbGF5UmVmYCBzZXR0aW5nLgorKworQSB3YXJuaW5nIHdpbGwgYmUgaXNzdWVkIGZvciByZWZzIHRoYXQgZG8gbm90IGV4aXN0LCBidXQgYSBnbG9iIHRoYXQKK2RvZXMgbm90IG1hdGNoIGFueSByZWZzIGlzIHNpbGVudGx5IGlnbm9yZWQuCisKK2BHSVRfTk9URVNfUkVXUklURV9NT0RFYDo6CisJV2hlbiBjb3B5aW5nIG5vdGVzIGR1cmluZyBhIHJld3JpdGUsIHdoYXQgdG8gZG8gaWYgdGhlIHRhcmdldAorCWNvbW1pdCBhbHJlYWR5IGhhcyBhIG5vdGUuCisJTXVzdCBiZSBvbmUgb2YgYG92ZXJ3cml0ZWAsIGBjb25jYXRlbmF0ZWAsIGBjYXRfc29ydF91bmlxYCwgb3IgYGlnbm9yZWAuCisJVGhpcyBvdmVycmlkZXMgdGhlIGBjb3JlLnJld3JpdGVNb2RlYCBzZXR0aW5nLgorCitgR0lUX05PVEVTX1JFV1JJVEVfUkVGYDo6CisJV2hlbiByZXdyaXRpbmcgY29tbWl0cywgd2hpY2ggbm90ZXMgdG8gY29weSBmcm9tIHRoZSBvcmlnaW5hbAorCXRvIHRoZSByZXdyaXR0ZW4gY29tbWl0LiAgTXVzdCBiZSBhIGNvbG9uLWRlbGltaXRlZCBsaXN0IG9mCisJcmVmcyBvciBnbG9icy4KKysKK0lmIG5vdCBzZXQgaW4gdGhlIGVudmlyb25tZW50LCB0aGUgbGlzdCBvZiBub3RlcyB0byBjb3B5IGRlcGVuZHMKK29uIHRoZSBgbm90ZXMucmV3cml0ZS48Y29tbWFuZD5gIGFuZCBgbm90ZXMucmV3cml0ZVJlZmAgc2V0dGluZ3MuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcDQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYjk2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wNC50eHQKQEAgLTAsMCArMSw3NjQgQEAKK2dpdC1wNCgxKQorPT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1wNCAtIEltcG9ydCBmcm9tIGFuZCBzdWJtaXQgdG8gUGVyZm9yY2UgcmVwb3NpdG9yaWVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHA0IGNsb25lJyBbPHN5bmMgb3B0aW9ucz5dIFs8Y2xvbmUgb3B0aW9ucz5dIDxwNCBkZXBvdCBwYXRoPi4uLgorJ2dpdCBwNCBzeW5jJyBbPHN5bmMgb3B0aW9ucz5dIFs8cDQgZGVwb3QgcGF0aD4uLi5dCisnZ2l0IHA0IHJlYmFzZScKKydnaXQgcDQgc3VibWl0JyBbPHN1Ym1pdCBvcHRpb25zPl0gWzxtYXN0ZXIgYnJhbmNoIG5hbWU+XQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBjb21tYW5kIHByb3ZpZGVzIGEgd2F5IHRvIGludGVyYWN0IHdpdGggcDQgcmVwb3NpdG9yaWVzCit1c2luZyBHaXQuCisKK0NyZWF0ZSBhIG5ldyBHaXQgcmVwb3NpdG9yeSBmcm9tIGFuIGV4aXN0aW5nIHA0IHJlcG9zaXRvcnkgdXNpbmcKKydnaXQgcDQgY2xvbmUnLCBnaXZpbmcgaXQgb25lIG9yIG1vcmUgcDQgZGVwb3QgcGF0aHMuICBJbmNvcnBvcmF0ZQorbmV3IGNvbW1pdHMgZnJvbSBwNCBjaGFuZ2VzIHdpdGggJ2dpdCBwNCBzeW5jJy4gIFRoZSAnc3luYycgY29tbWFuZAoraXMgYWxzbyB1c2VkIHRvIGluY2x1ZGUgbmV3IGJyYW5jaGVzIGZyb20gb3RoZXIgcDQgZGVwb3QgcGF0aHMuCitTdWJtaXQgR2l0IGNoYW5nZXMgYmFjayB0byBwNCB1c2luZyAnZ2l0IHA0IHN1Ym1pdCcuICBUaGUgY29tbWFuZAorJ2dpdCBwNCByZWJhc2UnIGRvZXMgYSBzeW5jIHBsdXMgcmViYXNlcyB0aGUgY3VycmVudCBicmFuY2ggb250bwordGhlIHVwZGF0ZWQgcDQgcmVtb3RlIGJyYW5jaC4KKworCitFWEFNUExFUworLS0tLS0tLS0KKyogQ2xvbmUgYSByZXBvc2l0b3J5OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBwNCBjbG9uZSAvL2RlcG90L3BhdGgvcHJvamVjdAorLS0tLS0tLS0tLS0tCisKKyogRG8gc29tZSB3b3JrIGluIHRoZSBuZXdseSBjcmVhdGVkIEdpdCByZXBvc2l0b3J5OgorKworLS0tLS0tLS0tLS0tCiskIGNkIHByb2plY3QKKyQgdmkgZm9vLmgKKyQgZ2l0IGNvbW1pdCAtYSAtbSAiZWRpdGVkIGZvby5oIgorLS0tLS0tLS0tLS0tCisKKyogVXBkYXRlIHRoZSBHaXQgcmVwb3NpdG9yeSB3aXRoIHJlY2VudCBjaGFuZ2VzIGZyb20gcDQsIHJlYmFzaW5nIHlvdXIKKyAgd29yayBvbiB0b3A6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHA0IHJlYmFzZQorLS0tLS0tLS0tLS0tCisKKyogU3VibWl0IHlvdXIgY29tbWl0cyBiYWNrIHRvIHA0OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBwNCBzdWJtaXQKKy0tLS0tLS0tLS0tLQorCisKK0NPTU1BTkRTCistLS0tLS0tLQorCitDbG9uZQorfn5+fn4KK0dlbmVyYWxseSwgJ2dpdCBwNCBjbG9uZScgaXMgdXNlZCB0byBjcmVhdGUgYSBuZXcgR2l0IGRpcmVjdG9yeQorZnJvbSBhbiBleGlzdGluZyBwNCByZXBvc2l0b3J5OgorLS0tLS0tLS0tLS0tCiskIGdpdCBwNCBjbG9uZSAvL2RlcG90L3BhdGgvcHJvamVjdAorLS0tLS0tLS0tLS0tCitUaGlzOgorCisxLiBDcmVhdGVzIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluIGEgc3ViZGlyZWN0b3J5IGNhbGxlZCAncHJvamVjdCcuCisrCisyLiBJbXBvcnRzIHRoZSBmdWxsIGNvbnRlbnRzIG9mIHRoZSBoZWFkIHJldmlzaW9uIGZyb20gdGhlIGdpdmVuIHA0CisgICBkZXBvdCBwYXRoIGludG8gYSBzaW5nbGUgY29tbWl0IGluIHRoZSBHaXQgYnJhbmNoICdyZWZzL3JlbW90ZXMvcDQvbWFzdGVyJy4KKysKKzMuIENyZWF0ZXMgYSBsb2NhbCBicmFuY2gsICdtYXN0ZXInIGZyb20gdGhpcyByZW1vdGUgYW5kIGNoZWNrcyBpdCBvdXQuCisKK1RvIHJlcHJvZHVjZSB0aGUgZW50aXJlIHA0IGhpc3RvcnkgaW4gR2l0LCB1c2UgdGhlICdAYWxsJyBtb2RpZmllciBvbgordGhlIGRlcG90IHBhdGg6CistLS0tLS0tLS0tLS0KKyQgZ2l0IHA0IGNsb25lIC8vZGVwb3QvcGF0aC9wcm9qZWN0QGFsbAorLS0tLS0tLS0tLS0tCisKKworU3luYworfn5+fgorQXMgZGV2ZWxvcG1lbnQgY29udGludWVzIGluIHRoZSBwNCByZXBvc2l0b3J5LCB0aG9zZSBjaGFuZ2VzIGNhbgorYmUgaW5jbHVkZWQgaW4gdGhlIEdpdCByZXBvc2l0b3J5IHVzaW5nOgorLS0tLS0tLS0tLS0tCiskIGdpdCBwNCBzeW5jCistLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCBmaW5kcyBuZXcgY2hhbmdlcyBpbiBwNCBhbmQgaW1wb3J0cyB0aGVtIGFzIEdpdCBjb21taXRzLgorCitQNCByZXBvc2l0b3JpZXMgY2FuIGJlIGFkZGVkIHRvIGFuIGV4aXN0aW5nIEdpdCByZXBvc2l0b3J5IHVzaW5nCisnZ2l0IHA0IHN5bmMnIHRvbzoKKy0tLS0tLS0tLS0tLQorJCBta2RpciByZXBvLWdpdAorJCBjZCByZXBvLWdpdAorJCBnaXQgaW5pdAorJCBnaXQgcDQgc3luYyAvL3BhdGgvaW4veW91ci9wZXJmb3JjZS9kZXBvdAorLS0tLS0tLS0tLS0tCitUaGlzIGltcG9ydHMgdGhlIHNwZWNpZmllZCBkZXBvdCBpbnRvCisncmVmcy9yZW1vdGVzL3A0L21hc3RlcicgaW4gYW4gZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkuICBUaGUKK2AtLWJyYW5jaGAgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgYnJhbmNoIHRvCitiZSB1c2VkIGZvciB0aGUgcDQgY29udGVudC4KKworSWYgYSBHaXQgcmVwb3NpdG9yeSBpbmNsdWRlcyBicmFuY2hlcyAncmVmcy9yZW1vdGVzL29yaWdpbi9wNCcsIHRoZXNlCit3aWxsIGJlIGZldGNoZWQgYW5kIGNvbnN1bHRlZCBmaXJzdCBkdXJpbmcgYSAnZ2l0IHA0IHN5bmMnLiAgU2luY2UKK2ltcG9ydGluZyBkaXJlY3RseSBmcm9tIHA0IGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBwdWxsaW5nIGNoYW5nZXMKK2Zyb20gYSBHaXQgcmVtb3RlLCB0aGlzIGNhbiBiZSB1c2VmdWwgaW4gYSBtdWx0aS1kZXZlbG9wZXIgZW52aXJvbm1lbnQuCisKK0lmIHRoZXJlIGFyZSBtdWx0aXBsZSBicmFuY2hlcywgZG9pbmcgJ2dpdCBwNCBzeW5jJyB3aWxsIGF1dG9tYXRpY2FsbHkKK3VzZSB0aGUgIkJSQU5DSCBERVRFQ1RJT04iIGFsZ29yaXRobSB0byB0cnkgdG8gcGFydGl0aW9uIG5ldyBjaGFuZ2VzCitpbnRvIHRoZSByaWdodCBicmFuY2guICBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGAtLWJyYW5jaGAKK29wdGlvbiB0byBzcGVjaWZ5IGp1c3QgYSBzaW5nbGUgYnJhbmNoIHRvIHVwZGF0ZS4KKworCitSZWJhc2UKK35+fn5+fgorQSBjb21tb24gd29ya2luZyBwYXR0ZXJuIGlzIHRvIGZldGNoIHRoZSBsYXRlc3QgY2hhbmdlcyBmcm9tIHRoZSBwNCBkZXBvdAorYW5kIG1lcmdlIHRoZW0gd2l0aCBsb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLiAgT2Z0ZW4sIHRoZSBwNCByZXBvc2l0b3J5CitpcyB0aGUgdWx0aW1hdGUgbG9jYXRpb24gZm9yIGFsbCBjb2RlLCB0aHVzIGEgcmViYXNlIHdvcmtmbG93IG1ha2VzCitzZW5zZS4gIFRoaXMgY29tbWFuZCBkb2VzICdnaXQgcDQgc3luYycgZm9sbG93ZWQgYnkgJ2dpdCByZWJhc2UnIHRvIG1vdmUKK2xvY2FsIGNvbW1pdHMgb24gdG9wIG9mIHVwZGF0ZWQgcDQgY2hhbmdlcy4KKy0tLS0tLS0tLS0tLQorJCBnaXQgcDQgcmViYXNlCistLS0tLS0tLS0tLS0KKworCitTdWJtaXQKK35+fn5+fgorU3VibWl0dGluZyBjaGFuZ2VzIGZyb20gYSBHaXQgcmVwb3NpdG9yeSBiYWNrIHRvIHRoZSBwNCByZXBvc2l0b3J5CityZXF1aXJlcyBhIHNlcGFyYXRlIHA0IGNsaWVudCB3b3Jrc3BhY2UuICBUaGlzIHNob3VsZCBiZSBzcGVjaWZpZWQKK3VzaW5nIHRoZSBgUDRDTElFTlRgIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIHRoZSBHaXQgY29uZmlndXJhdGlvbgordmFyaWFibGUgJ2dpdC1wNC5jbGllbnQnLiAgVGhlIHA0IGNsaWVudCBtdXN0IGV4aXN0LCBidXQgdGhlIGNsaWVudCByb290Cit3aWxsIGJlIGNyZWF0ZWQgYW5kIHBvcHVsYXRlZCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorCitUbyBzdWJtaXQgYWxsIGNoYW5nZXMgdGhhdCBhcmUgaW4gdGhlIGN1cnJlbnQgR2l0IGJyYW5jaCBidXQgbm90IGluCit0aGUgJ3A0L21hc3RlcicgYnJhbmNoLCB1c2U6CistLS0tLS0tLS0tLS0KKyQgZ2l0IHA0IHN1Ym1pdAorLS0tLS0tLS0tLS0tCisKK1RvIHNwZWNpZnkgYSBicmFuY2ggb3RoZXIgdGhhbiB0aGUgY3VycmVudCBvbmUsIHVzZToKKy0tLS0tLS0tLS0tLQorJCBnaXQgcDQgc3VibWl0IHRvcGljYnJhbmNoCistLS0tLS0tLS0tLS0KKworVG8gc3BlY2lmeSBhIHNpbmdsZSBjb21taXQgb3IgYSByYW5nZSBvZiBjb21taXRzLCB1c2U6CistLS0tLS0tLS0tLS0KKyQgZ2l0IHA0IHN1Ym1pdCAtLWNvbW1pdCA8c2hhMT4KKyQgZ2l0IHA0IHN1Ym1pdCAtLWNvbW1pdCA8c2hhMS4uc2hhMT4KKy0tLS0tLS0tLS0tLQorCitUaGUgdXBzdHJlYW0gcmVmZXJlbmNlIGlzIGdlbmVyYWxseSAncmVmcy9yZW1vdGVzL3A0L21hc3RlcicsIGJ1dCBjYW4KK2JlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIGAtLW9yaWdpbj1gIGNvbW1hbmQtbGluZSBvcHRpb24uCisKK1RoZSBwNCBjaGFuZ2VzIHdpbGwgYmUgY3JlYXRlZCBhcyB0aGUgdXNlciBpbnZva2luZyAnZ2l0IHA0IHN1Ym1pdCcuIFRoZQorYC0tcHJlc2VydmUtdXNlcmAgb3B0aW9uIHdpbGwgY2F1c2Ugb3duZXJzaGlwIHRvIGJlIG1vZGlmaWVkCithY2NvcmRpbmcgdG8gdGhlIGF1dGhvciBvZiB0aGUgR2l0IGNvbW1pdC4gIFRoaXMgb3B0aW9uIHJlcXVpcmVzIGFkbWluCitwcml2aWxlZ2VzIGluIHA0LCB3aGljaCBjYW4gYmUgZ3JhbnRlZCB1c2luZyAncDQgcHJvdGVjdCcuCisKK1RvIHNoZWx2ZSBjaGFuZ2VzIGluc3RlYWQgb2Ygc3VibWl0dGluZywgdXNlIGAtLXNoZWx2ZWAgYW5kIGAtLXVwZGF0ZS1zaGVsdmVgOgorCistLS0tCiskIGdpdCBwNCBzdWJtaXQgLS1zaGVsdmUKKyQgZ2l0IHA0IHN1Ym1pdCAtLXVwZGF0ZS1zaGVsdmUgMTIzNCAtLXVwZGF0ZS1zaGVsdmUgMjM0NQorLS0tLQorCisKK1Vuc2hlbHZlCit+fn5+fn5+fgorVW5zaGVsdmluZyB3aWxsIHRha2UgYSBzaGVsdmVkIFA0IGNoYW5nZWxpc3QsIGFuZCBwcm9kdWNlIHRoZSBlcXVpdmFsZW50IGdpdCBjb21taXQKK2luIHRoZSBicmFuY2ggcmVmcy9yZW1vdGVzL3A0LXVuc2hlbHZlZC88Y2hhbmdlbGlzdD4uCisKK1RoZSBnaXQgY29tbWl0IGlzIGNyZWF0ZWQgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgb3JpZ2luIHJldmlzaW9uIChIRUFEIGJ5IGRlZmF1bHQpLgorQSBwYXJlbnQgY29tbWl0IGlzIGNyZWF0ZWQgYmFzZWQgb24gdGhlIG9yaWdpbiwgYW5kIHRoZW4gdGhlIHVuc2hlbHZlIGNvbW1pdCBpcworY3JlYXRlZCBiYXNlZCBvbiB0aGF0LgorCitUaGUgb3JpZ2luIHJldmlzaW9uIGNhbiBiZSBjaGFuZ2VkIHdpdGggdGhlICItLW9yaWdpbiIgb3B0aW9uLgorCitJZiB0aGUgdGFyZ2V0IGJyYW5jaCBpbiByZWZzL3JlbW90ZXMvcDQtdW5zaGVsdmVkIGFscmVhZHkgZXhpc3RzLCB0aGUgb2xkIG9uZSB3aWxsCitiZSByZW5hbWVkLgorCistLS0tCiskIGdpdCBwNCBzeW5jCiskIGdpdCBwNCB1bnNoZWx2ZSAxMjM0NQorJCBnaXQgc2hvdyBwNC11bnNoZWx2ZWQvMTIzNDUKKzxzdWJtaXQgbW9yZSBjaGFuZ2VzIHZpYSBwNCB0byB0aGUgc2FtZSBmaWxlcz4KKyQgZ2l0IHA0IHVuc2hlbHZlIDEyMzQ1Cis8cmVmdXNlcyB0byB1bnNoZWx2ZSB1bnRpbCBnaXQgaXMgaW4gc3luYyB3aXRoIHA0IGFnYWluPgorCistLS0tCisKK09QVElPTlMKKy0tLS0tLS0KKworR2VuZXJhbCBvcHRpb25zCit+fn5+fn5+fn5+fn5+fn4KK0FsbCBjb21tYW5kcyBleGNlcHQgY2xvbmUgYWNjZXB0IHRoZXNlIG9wdGlvbnMuCisKKy0tZ2l0LWRpciA8ZGlyPjo6CisJU2V0IHRoZSBgR0lUX0RJUmAgZW52aXJvbm1lbnQgdmFyaWFibGUuICBTZWUgbGlua2dpdDpnaXRbMV0uCisKKy12OjoKKy0tdmVyYm9zZTo6CisJUHJvdmlkZSBtb3JlIHByb2dyZXNzIGluZm9ybWF0aW9uLgorCitTeW5jIG9wdGlvbnMKK35+fn5+fn5+fn5+fgorVGhlc2Ugb3B0aW9ucyBjYW4gYmUgdXNlZCBpbiB0aGUgaW5pdGlhbCAnY2xvbmUnIGFzIHdlbGwgYXMgaW4KK3N1YnNlcXVlbnQgJ3N5bmMnIG9wZXJhdGlvbnMuCisKKy0tYnJhbmNoIDxyZWY+OjoKKwlJbXBvcnQgY2hhbmdlcyBpbnRvIDxyZWY+IGluc3RlYWQgb2YgcmVmcy9yZW1vdGVzL3A0L21hc3Rlci4KKwlJZiA8cmVmPiBzdGFydHMgd2l0aCByZWZzLywgaXQgaXMgdXNlZCBhcyBpcy4gIE90aGVyd2lzZSwgaWYKKwlpdCBkb2VzIG5vdCBzdGFydCB3aXRoIHA0LywgdGhhdCBwcmVmaXggaXMgYWRkZWQuCisrCitCeSBkZWZhdWx0IGEgPHJlZj4gbm90IHN0YXJ0aW5nIHdpdGggcmVmcy8gaXMgdHJlYXRlZCBhcyB0aGUKK25hbWUgb2YgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICh1bmRlciByZWZzL3JlbW90ZXMvKS4gIFRoaXMKK2JlaGF2aW9yIGNhbiBiZSBtb2RpZmllZCB1c2luZyB0aGUgLS1pbXBvcnQtbG9jYWwgb3B0aW9uLgorKworVGhlIGRlZmF1bHQgPHJlZj4gaXMgIm1hc3RlciIuCisrCitUaGlzIGV4YW1wbGUgaW1wb3J0cyBhIG5ldyByZW1vdGUgInA0L3Byb2oyIiBpbnRvIGFuIGV4aXN0aW5nCitHaXQgcmVwb3NpdG9yeToKKysKKy0tLS0KKyAgICAkIGdpdCBpbml0CisgICAgJCBnaXQgcDQgc3luYyAtLWJyYW5jaD1yZWZzL3JlbW90ZXMvcDQvcHJvajIgLy9kZXBvdC9wcm9qMgorLS0tLQorCistLWRldGVjdC1icmFuY2hlczo6CisJVXNlIHRoZSBicmFuY2ggZGV0ZWN0aW9uIGFsZ29yaXRobSB0byBmaW5kIG5ldyBwYXRocyBpbiBwNC4gIEl0IGlzCisJZG9jdW1lbnRlZCBiZWxvdyBpbiAiQlJBTkNIIERFVEVDVElPTiIuCisKKy0tY2hhbmdlc2ZpbGUgPGZpbGU+OjoKKwlJbXBvcnQgZXhhY3RseSB0aGUgcDQgY2hhbmdlIG51bWJlcnMgbGlzdGVkIGluICdmaWxlJywgb25lIHBlcgorCWxpbmUuICBOb3JtYWxseSwgJ2dpdCBwNCcgaW5zcGVjdHMgdGhlIGN1cnJlbnQgcDQgcmVwb3NpdG9yeQorCXN0YXRlIGFuZCBkZXRlY3RzIHRoZSBjaGFuZ2VzIGl0IHNob3VsZCBpbXBvcnQuCisKKy0tc2lsZW50OjoKKwlEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uLgorCistLWRldGVjdC1sYWJlbHM6OgorCVF1ZXJ5IHA0IGZvciBsYWJlbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXBvdCBwYXRocywgYW5kIGFkZAorCXRoZW0gYXMgdGFncyBpbiBHaXQuIExpbWl0ZWQgdXNlZnVsbmVzcyBhcyBvbmx5IGltcG9ydHMgbGFiZWxzCisJYXNzb2NpYXRlZCB3aXRoIG5ldyBjaGFuZ2VsaXN0cy4gRGVwcmVjYXRlZC4KKworLS1pbXBvcnQtbGFiZWxzOjoKKwlJbXBvcnQgbGFiZWxzIGZyb20gcDQgaW50byBHaXQuCisKKy0taW1wb3J0LWxvY2FsOjoKKwlCeSBkZWZhdWx0LCBwNCBicmFuY2hlcyBhcmUgc3RvcmVkIGluICdyZWZzL3JlbW90ZXMvcDQvJywKKwl3aGVyZSB0aGV5IHdpbGwgYmUgdHJlYXRlZCBhcyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgYnkKKwlsaW5rZ2l0OmdpdC1icmFuY2hbMV0gYW5kIG90aGVyIGNvbW1hbmRzLiAgVGhpcyBvcHRpb24gaW5zdGVhZAorCXB1dHMgcDQgYnJhbmNoZXMgaW4gJ3JlZnMvaGVhZHMvcDQvJy4gIE5vdGUgdGhhdCBmdXR1cmUKKwlzeW5jIG9wZXJhdGlvbnMgbXVzdCBzcGVjaWZ5IGAtLWltcG9ydC1sb2NhbGAgYXMgd2VsbCBzbyB0aGF0CisJdGhleSBjYW4gZmluZCB0aGUgcDQgYnJhbmNoZXMgaW4gcmVmcy9oZWFkcy4KKworLS1tYXgtY2hhbmdlcyA8bj46OgorCUltcG9ydCBhdCBtb3N0ICduJyBjaGFuZ2VzLCByYXRoZXIgdGhhbiB0aGUgZW50aXJlIHJhbmdlIG9mCisJY2hhbmdlcyBpbmNsdWRlZCBpbiB0aGUgZ2l2ZW4gcmV2aXNpb24gc3BlY2lmaWVyLiBBIHR5cGljYWwKKwl1c2FnZSB3b3VsZCBiZSB1c2UgJ0BhbGwnIGFzIHRoZSByZXZpc2lvbiBzcGVjaWZpZXIsIGJ1dCB0aGVuCisJdG8gdXNlICctLW1heC1jaGFuZ2VzIDEwMDAnIHRvIGltcG9ydCBvbmx5IHRoZSBsYXN0IDEwMDAKKwlyZXZpc2lvbnMgcmF0aGVyIHRoYW4gdGhlIGVudGlyZSByZXZpc2lvbiBoaXN0b3J5LgorCistLWNoYW5nZXMtYmxvY2stc2l6ZSA8bj46OgorCVRoZSBpbnRlcm5hbCBibG9jayBzaXplIHRvIHVzZSB3aGVuIGNvbnZlcnRpbmcgYSByZXZpc2lvbgorCXNwZWNpZmllciBzdWNoIGFzICdAYWxsJyBpbnRvIGEgbGlzdCBvZiBzcGVjaWZpYyBjaGFuZ2UKKwludW1iZXJzLiBJbnN0ZWFkIG9mIHVzaW5nIGEgc2luZ2xlIGNhbGwgdG8gJ3A0IGNoYW5nZXMnIHRvCisJZmluZCB0aGUgZnVsbCBsaXN0IG9mIGNoYW5nZXMgZm9yIHRoZSBjb252ZXJzaW9uLCB0aGVyZSBhcmUgYQorCXNlcXVlbmNlIG9mIGNhbGxzIHRvICdwNCBjaGFuZ2VzIC1tJywgZWFjaCBvZiB3aGljaCByZXF1ZXN0cworCW9uZSBibG9jayBvZiBjaGFuZ2VzIG9mIHRoZSBnaXZlbiBzaXplLiBUaGUgZGVmYXVsdCBibG9jayBzaXplCisJaXMgNTAwLCB3aGljaCBzaG91bGQgdXN1YWxseSBiZSBzdWl0YWJsZS4KKworLS1rZWVwLXBhdGg6OgorCVRoZSBtYXBwaW5nIG9mIGZpbGUgbmFtZXMgZnJvbSB0aGUgcDQgZGVwb3QgcGF0aCB0byBHaXQsIGJ5CisJZGVmYXVsdCwgaW52b2x2ZXMgcmVtb3ZpbmcgdGhlIGVudGlyZSBkZXBvdCBwYXRoLiAgV2l0aCB0aGlzCisJb3B0aW9uLCB0aGUgZnVsbCBwNCBkZXBvdCBwYXRoIGlzIHJldGFpbmVkIGluIEdpdC4gIEZvciBleGFtcGxlLAorCXBhdGggJy8vZGVwb3QvbWFpbi9mb28vYmFyLmMnLCB3aGVuIGltcG9ydGVkIGZyb20KKwknLy9kZXBvdC9tYWluLycsIGJlY29tZXMgJ2Zvby9iYXIuYycuICBXaXRoIGAtLWtlZXAtcGF0aGAsIHRoZQorCUdpdCBwYXRoIGlzIGluc3RlYWQgJ2RlcG90L21haW4vZm9vL2Jhci5jJy4KKworLS11c2UtY2xpZW50LXNwZWM6OgorCVVzZSBhIGNsaWVudCBzcGVjIHRvIGZpbmQgdGhlIGxpc3Qgb2YgaW50ZXJlc3RpbmcgZmlsZXMgaW4gcDQuCisJU2VlIHRoZSAiQ0xJRU5UIFNQRUMiIHNlY3Rpb24gYmVsb3cuCisKKy0vIDxwYXRoPjo6CisJRXhjbHVkZSBzZWxlY3RlZCBkZXBvdCBwYXRocyB3aGVuIGNsb25pbmcgb3Igc3luY2luZy4KKworQ2xvbmUgb3B0aW9ucworfn5+fn5+fn5+fn5+fgorVGhlc2Ugb3B0aW9ucyBjYW4gYmUgdXNlZCBpbiBhbiBpbml0aWFsICdjbG9uZScsIGFsb25nIHdpdGggdGhlICdzeW5jJworb3B0aW9ucyBkZXNjcmliZWQgYWJvdmUuCisKKy0tZGVzdGluYXRpb24gPGRpcmVjdG9yeT46OgorCVdoZXJlIHRvIGNyZWF0ZSB0aGUgR2l0IHJlcG9zaXRvcnkuICBJZiBub3QgcHJvdmlkZWQsIHRoZSBsYXN0CisJY29tcG9uZW50IGluIHRoZSBwNCBkZXBvdCBwYXRoIGlzIHVzZWQgdG8gY3JlYXRlIGEgbmV3CisJZGlyZWN0b3J5LgorCistLWJhcmU6OgorCVBlcmZvcm0gYSBiYXJlIGNsb25lLiAgU2VlIGxpbmtnaXQ6Z2l0LWNsb25lWzFdLgorCitTdWJtaXQgb3B0aW9ucworfn5+fn5+fn5+fn5+fn4KK1RoZXNlIG9wdGlvbnMgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5ICdnaXQgcDQgc3VibWl0JyBiZWhhdmlvci4KKworLS1vcmlnaW4gPGNvbW1pdD46OgorCVVwc3RyZWFtIGxvY2F0aW9uIGZyb20gd2hpY2ggY29tbWl0cyBhcmUgaWRlbnRpZmllZCB0byBzdWJtaXQgdG8KKwlwNC4gIEJ5IGRlZmF1bHQsIHRoaXMgaXMgdGhlIG1vc3QgcmVjZW50IHA0IGNvbW1pdCByZWFjaGFibGUKKwlmcm9tIGBIRUFEYC4KKworLU06OgorCURldGVjdCByZW5hbWVzLiAgU2VlIGxpbmtnaXQ6Z2l0LWRpZmZbMV0uICBSZW5hbWVzIHdpbGwgYmUKKwlyZXByZXNlbnRlZCBpbiBwNCB1c2luZyBleHBsaWNpdCAnbW92ZScgb3BlcmF0aW9ucy4gIFRoZXJlCisJaXMgbm8gY29ycmVzcG9uZGluZyBvcHRpb24gdG8gZGV0ZWN0IGNvcGllcywgYnV0IHRoZXJlIGFyZQorCXZhcmlhYmxlcyBmb3IgYm90aCBtb3ZlcyBhbmQgY29waWVzLgorCistLXByZXNlcnZlLXVzZXI6OgorCVJlLWF1dGhvciBwNCBjaGFuZ2VzIGJlZm9yZSBzdWJtaXR0aW5nIHRvIHA0LiAgVGhpcyBvcHRpb24KKwlyZXF1aXJlcyBwNCBhZG1pbiBwcml2aWxlZ2VzLgorCistLWV4cG9ydC1sYWJlbHM6OgorCUV4cG9ydCB0YWdzIGZyb20gR2l0IGFzIHA0IGxhYmVscy4gVGFncyBmb3VuZCBpbiBHaXQgYXJlIGFwcGxpZWQKKwl0byB0aGUgcGVyZm9yY2Ugd29ya2luZyBkaXJlY3RvcnkuCisKKy1uOjoKKy0tZHJ5LXJ1bjo6CisJU2hvdyBqdXN0IHdoYXQgY29tbWl0cyB3b3VsZCBiZSBzdWJtaXR0ZWQgdG8gcDQ7IGRvIG5vdCBjaGFuZ2UKKwlzdGF0ZSBpbiBHaXQgb3IgcDQuCisKKy0tcHJlcGFyZS1wNC1vbmx5OjoKKwlBcHBseSBhIGNvbW1pdCB0byB0aGUgcDQgd29ya3NwYWNlLCBvcGVuaW5nLCBhZGRpbmcgYW5kIGRlbGV0aW5nCisJZmlsZXMgaW4gcDQgYXMgZm9yIGEgbm9ybWFsIHN1Ym1pdCBvcGVyYXRpb24uICBEbyBub3QgaXNzdWUgdGhlCisJZmluYWwgInA0IHN1Ym1pdCIsIGJ1dCBpbnN0ZWFkIHByaW50IGEgbWVzc2FnZSBhYm91dCBob3cgdG8KKwlzdWJtaXQgbWFudWFsbHkgb3IgcmV2ZXJ0LiAgVGhpcyBvcHRpb24gYWx3YXlzIHN0b3BzIGFmdGVyIHRoZQorCWZpcnN0IChvbGRlc3QpIGNvbW1pdC4gIEdpdCB0YWdzIGFyZSBub3QgZXhwb3J0ZWQgdG8gcDQuCisKKy0tc2hlbHZlOjoKKwlJbnN0ZWFkIG9mIHN1Ym1pdHRpbmcgY3JlYXRlIGEgc2VyaWVzIG9mIHNoZWx2ZWQgY2hhbmdlbGlzdHMuCisJQWZ0ZXIgY3JlYXRpbmcgZWFjaCBzaGVsdmUsIHRoZSByZWxldmFudCBmaWxlcyBhcmUgcmV2ZXJ0ZWQvZGVsZXRlZC4KKwlJZiB5b3UgaGF2ZSBtdWx0aXBsZSBjb21taXRzIHBlbmRpbmcgbXVsdGlwbGUgc2hlbHZlcyB3aWxsIGJlIGNyZWF0ZWQuCisKKy0tdXBkYXRlLXNoZWx2ZSBDSEFOR0VMSVNUOjoKKwlVcGRhdGUgYW4gZXhpc3Rpbmcgc2hlbHZlZCBjaGFuZ2VsaXN0IHdpdGggdGhpcyBjb21taXQuIEltcGxpZXMKKwktLXNoZWx2ZS4gUmVwZWF0IGZvciBtdWx0aXBsZSBzaGVsdmVkIGNoYW5nZWxpc3RzLgorCistLWNvbmZsaWN0PShhc2t8c2tpcHxxdWl0KTo6CisJQ29uZmxpY3RzIGNhbiBvY2N1ciB3aGVuIGFwcGx5aW5nIGEgY29tbWl0IHRvIHA0LiAgV2hlbiB0aGlzCisJaGFwcGVucywgdGhlIGRlZmF1bHQgYmVoYXZpb3IgKCJhc2siKSBpcyB0byBwcm9tcHQgd2hldGhlciB0bworCXNraXAgdGhpcyBjb21taXQgYW5kIGNvbnRpbnVlLCBvciBxdWl0LiAgVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQKKwl0byBieXBhc3MgdGhlIHByb21wdCwgY2F1c2luZyBjb25mbGljdGluZyBjb21taXRzIHRvIGJlIGF1dG9tYXRpY2FsbHkKKwlza2lwcGVkLCBvciB0byBxdWl0IHRyeWluZyB0byBhcHBseSBjb21taXRzLCB3aXRob3V0IHByb21wdGluZy4KKworLS1icmFuY2ggPGJyYW5jaD46OgorCUFmdGVyIHN1Ym1pdHRpbmcsIHN5bmMgdGhpcyBuYW1lZCBicmFuY2ggaW5zdGVhZCBvZiB0aGUgZGVmYXVsdAorCXA0L21hc3Rlci4gIFNlZSB0aGUgIlN5bmMgb3B0aW9ucyIgc2VjdGlvbiBhYm92ZSBmb3IgbW9yZQorCWluZm9ybWF0aW9uLgorCistLWNvbW1pdCA8c2hhMT58PHNoYTEuLnNoYTE+OjoKKyAgICBTdWJtaXQgb25seSB0aGUgc3BlY2lmaWVkIGNvbW1pdCBvciByYW5nZSBvZiBjb21taXRzLCBpbnN0ZWFkIG9mIHRoZSBmdWxsCisgICAgbGlzdCBvZiBjaGFuZ2VzIHRoYXQgYXJlIGluIHRoZSBjdXJyZW50IEdpdCBicmFuY2guCisKKy0tZGlzYWJsZS1yZWJhc2U6OgorICAgIERpc2FibGUgdGhlIGF1dG9tYXRpYyByZWJhc2UgYWZ0ZXIgYWxsIGNvbW1pdHMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseQorICAgIHN1Ym1pdHRlZC4gQ2FuIGFsc28gYmUgc2V0IHdpdGggZ2l0LXA0LmRpc2FibGVSZWJhc2UuCisKKy0tZGlzYWJsZS1wNHN5bmM6OgorICAgIERpc2FibGUgdGhlIGF1dG9tYXRpYyBzeW5jIG9mIHA0L21hc3RlciBmcm9tIFBlcmZvcmNlIGFmdGVyIGNvbW1pdHMgaGF2ZQorICAgIGJlZW4gc3VibWl0dGVkLiBJbXBsaWVzIC0tZGlzYWJsZS1yZWJhc2UuIENhbiBhbHNvIGJlIHNldCB3aXRoCisgICAgZ2l0LXA0LmRpc2FibGVQNFN5bmMuIFN5bmMgd2l0aCBvcmlnaW4vbWFzdGVyIHN0aWxsIGdvZXMgYWhlYWQgaWYgcG9zc2libGUuCisKK0hvb2tzIGZvciBzdWJtaXQKKy0tLS0tLS0tLS0tLS0tLS0KKworcDQtcHJlLXN1Ym1pdAorfn5+fn5+fn5+fn5+fgorCitUaGUgYHA0LXByZS1zdWJtaXRgIGhvb2sgaXMgZXhlY3V0ZWQgaWYgaXQgZXhpc3RzIGFuZCBpcyBleGVjdXRhYmxlLgorVGhlIGhvb2sgdGFrZXMgbm8gcGFyYW1ldGVycyBhbmQgbm90aGluZyBmcm9tIHN0YW5kYXJkIGlucHV0LiBFeGl0aW5nIHdpdGgKK25vbi16ZXJvIHN0YXR1cyBmcm9tIHRoaXMgc2NyaXB0IHByZXZlbnRzIGBnaXQtcDQgc3VibWl0YCBmcm9tIGxhdW5jaGluZy4KK0l0IGNhbiBiZSBieXBhc3NlZCB3aXRoIHRoZSBgLS1uby12ZXJpZnlgIGNvbW1hbmQgbGluZSBvcHRpb24uCisKK09uZSB1c2FnZSBzY2VuYXJpbyBpcyB0byBydW4gdW5pdCB0ZXN0cyBpbiB0aGUgaG9vay4KKworcDQtcHJlcGFyZS1jaGFuZ2VsaXN0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGBwNC1wcmVwYXJlLWNoYW5nZWxpc3RgIGhvb2sgaXMgZXhlY3V0ZWQgcmlnaHQgYWZ0ZXIgcHJlcGFyaW5nCit0aGUgZGVmYXVsdCBjaGFuZ2VsaXN0IG1lc3NhZ2UgYW5kIGJlZm9yZSB0aGUgZWRpdG9yIGlzIHN0YXJ0ZWQuCitJdCB0YWtlcyBvbmUgcGFyYW1ldGVyLCB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZQorY2hhbmdlbGlzdCB0ZXh0LiBFeGl0aW5nIHdpdGggYSBub24temVybyBzdGF0dXMgZnJvbSB0aGUgc2NyaXB0Cit3aWxsIGFib3J0IHRoZSBwcm9jZXNzLgorCitUaGUgcHVycG9zZSBvZiB0aGUgaG9vayBpcyB0byBlZGl0IHRoZSBtZXNzYWdlIGZpbGUgaW4gcGxhY2UsCithbmQgaXQgaXMgbm90IHN1cHJlc3NlZCBieSB0aGUgYC0tbm8tdmVyaWZ5YCBvcHRpb24uIFRoaXMgaG9vaworaXMgY2FsbGVkIGV2ZW4gaWYgYC0tcHJlcGFyZS1wNC1vbmx5YCBpcyBzZXQuCisKK3A0LWNoYW5nZWxpc3QKK35+fn5+fn5+fn5+fn4KKworVGhlIGBwNC1jaGFuZ2VsaXN0YCBob29rIGlzIGV4ZWN1dGVkIGFmdGVyIHRoZSBjaGFuZ2VsaXN0CittZXNzYWdlIGhhcyBiZWVuIGVkaXRlZCBieSB0aGUgdXNlci4gSXQgY2FuIGJlIGJ5cGFzc2VkIHdpdGggdGhlCitgLS1uby12ZXJpZnlgIG9wdGlvbi4gSXQgdGFrZXMgYSBzaW5nbGUgcGFyYW1ldGVyLCB0aGUgbmFtZQorb2YgdGhlIGZpbGUgdGhhdCBob2xkcyB0aGUgcHJvcG9zZWQgY2hhbmdlbGlzdCB0ZXh0LiBFeGl0aW5nCit3aXRoIGEgbm9uLXplcm8gc3RhdHVzIGNhdXNlcyB0aGUgY29tbWFuZCB0byBhYm9ydC4KKworVGhlIGhvb2sgaXMgYWxsb3dlZCB0byBlZGl0IHRoZSBjaGFuZ2VsaXN0IGZpbGUgYW5kIGNhbiBiZSB1c2VkCit0byBub3JtYWxpemUgdGhlIHRleHQgaW50byBzb21lIHByb2plY3Qgc3RhbmRhcmQgZm9ybWF0LiBJdCBjYW4KK2Fsc28gYmUgdXNlZCB0byByZWZ1c2UgdGhlIFN1Ym1pdCBhZnRlciBpbnNwZWN0IHRoZSBtZXNzYWdlIGZpbGUuCisKK3A0LXBvc3QtY2hhbmdlbGlzdAorfn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBgcDQtcG9zdC1jaGFuZ2VsaXN0YCBob29rIGlzIGludm9rZWQgYWZ0ZXIgdGhlIHN1Ym1pdCBoYXMKK3N1Y2Nlc3NmdWxseSBvY2N1cmVkIGluIFA0LiBJdCB0YWtlcyBubyBwYXJhbWV0ZXJzIGFuZCBpcyBtZWFudAorcHJpbWFyaWx5IGZvciBub3RpZmljYXRpb24gYW5kIGNhbm5vdCBhZmZlY3QgdGhlIG91dGNvbWUgb2YgdGhlCitnaXQgcDQgc3VibWl0IGFjdGlvbi4KKworCisKK1JlYmFzZSBvcHRpb25zCit+fn5+fn5+fn5+fn5+fgorVGhlc2Ugb3B0aW9ucyBjYW4gYmUgdXNlZCB0byBtb2RpZnkgJ2dpdCBwNCByZWJhc2UnIGJlaGF2aW9yLgorCistLWltcG9ydC1sYWJlbHM6OgorCUltcG9ydCBwNCBsYWJlbHMuCisKK1Vuc2hlbHZlIG9wdGlvbnMKK35+fn5+fn5+fn5+fn5+fn4KKworLS1vcmlnaW46OgorICAgIFNldHMgdGhlIGdpdCByZWZzcGVjIGFnYWluc3Qgd2hpY2ggdGhlIHNoZWx2ZWQgUDQgY2hhbmdlbGlzdCBpcyBjb21wYXJlZC4KKyAgICBEZWZhdWx0cyB0byBwNC9tYXN0ZXIuCisKK0RFUE9UIFBBVEggU1lOVEFYCistLS0tLS0tLS0tLS0tLS0tLQorVGhlIHA0IGRlcG90IHBhdGggYXJndW1lbnQgdG8gJ2dpdCBwNCBzeW5jJyBhbmQgJ2dpdCBwNCBjbG9uZScgY2FuCitiZSBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgcDQgZGVwb3QgcGF0aHMsIHdpdGggYW4gb3B0aW9uYWwKK3A0IHJldmlzaW9uIHNwZWNpZmllciBvbiB0aGUgZW5kOgorCisiLy9kZXBvdC9teS9wcm9qZWN0Ijo6CisgICAgSW1wb3J0IG9uZSBjb21taXQgd2l0aCBhbGwgZmlsZXMgaW4gdGhlICcjaGVhZCcgY2hhbmdlIHVuZGVyIHRoYXQgdHJlZS4KKworIi8vZGVwb3QvbXkvcHJvamVjdEBhbGwiOjoKKyAgICBJbXBvcnQgb25lIGNvbW1pdCBmb3IgZWFjaCBjaGFuZ2UgaW4gdGhlIGhpc3Rvcnkgb2YgdGhhdCBkZXBvdCBwYXRoLgorCisiLy9kZXBvdC9teS9wcm9qZWN0QDEsNiI6OgorICAgIEltcG9ydCBvbmx5IGNoYW5nZXMgMSB0aHJvdWdoIDYuCisKKyIvL2RlcG90L3Byb2oxQGFsbCAvL2RlcG90L3Byb2oyQGFsbCI6OgorICAgIEltcG9ydCBhbGwgY2hhbmdlcyBmcm9tIGJvdGggbmFtZWQgZGVwb3QgcGF0aHMgaW50byBhIHNpbmdsZQorICAgIHJlcG9zaXRvcnkuICBPbmx5IGZpbGVzIGJlbG93IHRoZXNlIGRpcmVjdG9yaWVzIGFyZSBpbmNsdWRlZC4KKyAgICBUaGVyZSBpcyBub3QgYSBzdWJkaXJlY3RvcnkgaW4gR2l0IGZvciBlYWNoICJwcm9qMSIgYW5kICJwcm9qMiIuCisgICAgWW91IG11c3QgdXNlIHRoZSBgLS1kZXN0aW5hdGlvbmAgb3B0aW9uIHdoZW4gc3BlY2lmeWluZyBtb3JlCisgICAgdGhhbiBvbmUgZGVwb3QgcGF0aC4gIFRoZSByZXZpc2lvbiBzcGVjaWZpZXIgbXVzdCBiZSBzcGVjaWZpZWQKKyAgICBpZGVudGljYWxseSBvbiBlYWNoIGRlcG90IHBhdGguICBJZiB0aGVyZSBhcmUgZmlsZXMgaW4gdGhlCisgICAgZGVwb3QgcGF0aHMgd2l0aCB0aGUgc2FtZSBuYW1lLCB0aGUgcGF0aCB3aXRoIHRoZSBtb3N0IHJlY2VudGx5CisgICAgdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGlzIHRoZSBvbmUgdGhhdCBhcHBlYXJzIGluIEdpdC4KKworU2VlICdwNCBoZWxwIHJldmlzaW9ucycgZm9yIHRoZSBmdWxsIHN5bnRheCBvZiBwNCByZXZpc2lvbiBzcGVjaWZpZXJzLgorCisKK0NMSUVOVCBTUEVDCistLS0tLS0tLS0tLQorVGhlIHA0IGNsaWVudCBzcGVjaWZpY2F0aW9uIGlzIG1haW50YWluZWQgd2l0aCB0aGUgJ3A0IGNsaWVudCcgY29tbWFuZAorYW5kIGNvbnRhaW5zIGFtb25nIG90aGVyIGZpZWxkcywgYSBWaWV3IHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgZGVwb3QKK2lzIG1hcHBlZCBpbnRvIHRoZSBjbGllbnQgcmVwb3NpdG9yeS4gIFRoZSAnY2xvbmUnIGFuZCAnc3luYycgY29tbWFuZHMKK2NhbiBjb25zdWx0IHRoZSBjbGllbnQgc3BlYyB3aGVuIGdpdmVuIHRoZSBgLS11c2UtY2xpZW50LXNwZWNgIG9wdGlvbiBvcgord2hlbiB0aGUgdXNlQ2xpZW50U3BlYyB2YXJpYWJsZSBpcyB0cnVlLiAgQWZ0ZXIgJ2dpdCBwNCBjbG9uZScsIHRoZQordXNlQ2xpZW50U3BlYyB2YXJpYWJsZSBpcyBhdXRvbWF0aWNhbGx5IHNldCBpbiB0aGUgcmVwb3NpdG9yeQorY29uZmlndXJhdGlvbiBmaWxlLiAgVGhpcyBhbGxvd3MgZnV0dXJlICdnaXQgcDQgc3VibWl0JyBjb21tYW5kcyB0bword29yayBwcm9wZXJseTsgdGhlIHN1Ym1pdCBjb21tYW5kIGxvb2tzIG9ubHkgYXQgdGhlIHZhcmlhYmxlIGFuZCBkb2VzCitub3QgaGF2ZSBhIGNvbW1hbmQtbGluZSBvcHRpb24uCisKK1RoZSBmdWxsIHN5bnRheCBmb3IgYSBwNCB2aWV3IGlzIGRvY3VtZW50ZWQgaW4gJ3A0IGhlbHAgdmlld3MnLiAgJ2dpdCBwNCcKK2tub3dzIG9ubHkgYSBzdWJzZXQgb2YgdGhlIHZpZXcgc3ludGF4LiAgSXQgdW5kZXJzdGFuZHMgbXVsdGktbGluZQorbWFwcGluZ3MsIG92ZXJsYXlzIHdpdGggJysnLCBleGNsdXNpb25zIHdpdGggJy0nIGFuZCBkb3VibGUtcXVvdGVzCithcm91bmQgd2hpdGVzcGFjZS4gIE9mIHRoZSBwb3NzaWJsZSB3aWxkY2FyZHMsICdnaXQgcDQnIG9ubHkgaGFuZGxlcworJy4uLicsIGFuZCBvbmx5IHdoZW4gaXQgaXMgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aC4gICdnaXQgcDQnIHdpbGwgY29tcGxhaW4KK2lmIGl0IGVuY291bnRlcnMgYW4gdW5oYW5kbGVkIHdpbGRjYXJkLgorCitCdWdzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBvdmVybGFwIG1hcHBpbmdzIGV4aXN0LiAgSWYgbXVsdGlwbGUgZGVwb3QKK3BhdGhzIG1hcCB0aHJvdWdoIG92ZXJsYXlzIHRvIHRoZSBzYW1lIGxvY2F0aW9uIGluIHRoZSByZXBvc2l0b3J5LAorJ2dpdCBwNCcgY2FuIGNob29zZSB0aGUgd3Jvbmcgb25lLiAgVGhpcyBpcyBoYXJkIHRvIHNvbHZlIHdpdGhvdXQKK2RlZGljYXRpbmcgYSBjbGllbnQgc3BlYyBqdXN0IGZvciAnZ2l0IHA0Jy4KKworVGhlIG5hbWUgb2YgdGhlIGNsaWVudCBjYW4gYmUgZ2l2ZW4gdG8gJ2dpdCBwNCcgaW4gbXVsdGlwbGUgd2F5cy4gIFRoZQordmFyaWFibGUgJ2dpdC1wNC5jbGllbnQnIHRha2VzIHByZWNlZGVuY2UgaWYgaXQgZXhpc3RzLiAgT3RoZXJ3aXNlLAorbm9ybWFsIHA0IG1lY2hhbmlzbXMgb2YgZGV0ZXJtaW5pbmcgdGhlIGNsaWVudCBhcmUgdXNlZDogIGVudmlyb25tZW50Cit2YXJpYWJsZSBgUDRDTElFTlRgLCBhIGZpbGUgcmVmZXJlbmNlZCBieSBgUDRDT05GSUdgLCBvciB0aGUgbG9jYWwgaG9zdCBuYW1lLgorCisKK0JSQU5DSCBERVRFQ1RJT04KKy0tLS0tLS0tLS0tLS0tLS0KK1A0IGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgY29uY2VwdCBvZiBhIGJyYW5jaCBhcyBHaXQuICBJbnN0ZWFkLAorcDQgb3JnYW5pemVzIGl0cyBjb250ZW50IGFzIGEgZGlyZWN0b3J5IHRyZWUsIHdoZXJlIGJ5IGNvbnZlbnRpb24KK2RpZmZlcmVudCBsb2dpY2FsIGJyYW5jaGVzIGFyZSBpbiBkaWZmZXJlbnQgbG9jYXRpb25zIGluIHRoZSB0cmVlLgorVGhlICdwNCBicmFuY2gnIGNvbW1hbmQgaXMgdXNlZCB0byBtYWludGFpbiBtYXBwaW5ncyBiZXR3ZWVuCitkaWZmZXJlbnQgYXJlYXMgaW4gdGhlIHRyZWUsIGFuZCBpbmRpY2F0ZSByZWxhdGVkIGNvbnRlbnQuICAnZ2l0IHA0JworY2FuIHVzZSB0aGVzZSBtYXBwaW5ncyB0byBkZXRlcm1pbmUgYnJhbmNoIHJlbGF0aW9uc2hpcHMuCisKK0lmIHlvdSBoYXZlIGEgcmVwb3NpdG9yeSB3aGVyZSBhbGwgdGhlIGJyYW5jaGVzIG9mIGludGVyZXN0IGV4aXN0IGFzCitzdWJkaXJlY3RvcmllcyBvZiBhIHNpbmdsZSBkZXBvdCBwYXRoLCB5b3UgY2FuIHVzZSBgLS1kZXRlY3QtYnJhbmNoZXNgCit3aGVuIGNsb25pbmcgb3Igc3luY2luZyB0byBoYXZlICdnaXQgcDQnIGF1dG9tYXRpY2FsbHkgZmluZAorc3ViZGlyZWN0b3JpZXMgaW4gcDQsIGFuZCB0byBnZW5lcmF0ZSB0aGVzZSBhcyBicmFuY2hlcyBpbiBHaXQuCisKK0ZvciBleGFtcGxlLCBpZiB0aGUgUDQgcmVwb3NpdG9yeSBzdHJ1Y3R1cmUgaXM6CistLS0tCisvL2RlcG90L21haW4vLi4uCisvL2RlcG90L2JyYW5jaDEvLi4uCistLS0tCisKK0FuZCAicDQgYnJhbmNoIC1vIGJyYW5jaDEiIHNob3dzIGEgVmlldyBsaW5lIHRoYXQgbG9va3MgbGlrZToKKy0tLS0KKy8vZGVwb3QvbWFpbi8uLi4gLy9kZXBvdC9icmFuY2gxLy4uLgorLS0tLQorCitUaGVuIHRoaXMgJ2dpdCBwNCBjbG9uZScgY29tbWFuZDoKKy0tLS0KK2dpdCBwNCBjbG9uZSAtLWRldGVjdC1icmFuY2hlcyAvL2RlcG90QGFsbAorLS0tLQorcHJvZHVjZXMgYSBzZXBhcmF0ZSBicmFuY2ggaW4gJ3JlZnMvcmVtb3Rlcy9wNC8nIGZvciAvL2RlcG90L21haW4sCitjYWxsZWQgJ21hc3RlcicsIGFuZCBvbmUgZm9yIC8vZGVwb3QvYnJhbmNoMSBjYWxsZWQgJ2RlcG90L2JyYW5jaDEnLgorCitIb3dldmVyLCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBicmFuY2hlcyBpbiBwNCB0byBiZSBhYmxlIHRvIHVzZQordGhlbSBsaWtlIGJyYW5jaGVzLiAgQmVjYXVzZSBpdCBpcyBkaWZmaWN1bHQgdG8gaW5mZXIgYnJhbmNoCityZWxhdGlvbnNoaXBzIGF1dG9tYXRpY2FsbHksIGEgR2l0IGNvbmZpZ3VyYXRpb24gc2V0dGluZworJ2dpdC1wNC5icmFuY2hMaXN0JyBjYW4gYmUgdXNlZCB0byBleHBsaWNpdGx5IGlkZW50aWZ5IGJyYW5jaAorcmVsYXRpb25zaGlwcy4gIEl0IGlzIGEgbGlzdCBvZiAic291cmNlOmRlc3RpbmF0aW9uIiBwYWlycywgbGlrZSBhCitzaW1wbGUgcDQgYnJhbmNoIHNwZWNpZmljYXRpb24sIHdoZXJlIHRoZSAic291cmNlIiBhbmQgImRlc3RpbmF0aW9uIiBhcmUKK3RoZSBwYXRoIGVsZW1lbnRzIGluIHRoZSBwNCByZXBvc2l0b3J5LiAgVGhlIGV4YW1wbGUgYWJvdmUgcmVsaWVkIG9uIHRoZQorcHJlc2VuY2Ugb2YgdGhlIHA0IGJyYW5jaC4gIFdpdGhvdXQgcDQgYnJhbmNoZXMsIHRoZSBzYW1lIHJlc3VsdCB3aWxsCitvY2N1ciB3aXRoOgorLS0tLQorZ2l0IGluaXQgZGVwb3QKK2NkIGRlcG90CitnaXQgY29uZmlnIGdpdC1wNC5icmFuY2hMaXN0IG1haW46YnJhbmNoMQorZ2l0IHA0IGNsb25lIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsIC4KKy0tLS0KKworCitQRVJGT1JNQU5DRQorLS0tLS0tLS0tLS0KK1RoZSBmYXN0LWltcG9ydCBtZWNoYW5pc20gdXNlZCBieSAnZ2l0IHA0JyBjcmVhdGVzIG9uZSBwYWNrIGZpbGUgZm9yCitlYWNoIGludm9jYXRpb24gb2YgJ2dpdCBwNCBzeW5jJy4gIE5vcm1hbGx5LCBHaXQgZ2FyYmFnZSBjb21wcmVzc2lvbgorKGxpbmtnaXQ6Z2l0LWdjWzFdKSBhdXRvbWF0aWNhbGx5IGNvbXByZXNzZXMgdGhlc2UgdG8gZmV3ZXIgcGFjayBmaWxlcywKK2J1dCBleHBsaWNpdCBpbnZvY2F0aW9uIG9mICdnaXQgcmVwYWNrIC1hZGYnIG1heSBpbXByb3ZlIHBlcmZvcm1hbmNlLgorCisKK0NPTkZJR1VSQVRJT04gVkFSSUFCTEVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGZvbGxvd2luZyBjb25maWcgc2V0dGluZ3MgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5ICdnaXQgcDQnIGJlaGF2aW9yLgorVGhleSBhbGwgYXJlIGluIHRoZSAnZ2l0LXA0JyBzZWN0aW9uLgorCitHZW5lcmFsIHZhcmlhYmxlcworfn5+fn5+fn5+fn5+fn5+fn4KK2dpdC1wNC51c2VyOjoKKwlVc2VyIHNwZWNpZmllZCBhcyBhbiBvcHRpb24gdG8gYWxsIHA0IGNvbW1hbmRzLCB3aXRoICctdSA8dXNlcj4nLgorCVRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgUDRVU0VSYCBjYW4gYmUgdXNlZCBpbnN0ZWFkLgorCitnaXQtcDQucGFzc3dvcmQ6OgorCVBhc3N3b3JkIHNwZWNpZmllZCBhcyBhbiBvcHRpb24gdG8gYWxsIHA0IGNvbW1hbmRzLCB3aXRoCisJJy1QIDxwYXNzd29yZD4nLgorCVRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgUDRQQVNTYCBjYW4gYmUgdXNlZCBpbnN0ZWFkLgorCitnaXQtcDQucG9ydDo6CisJUG9ydCBzcGVjaWZpZWQgYXMgYW4gb3B0aW9uIHRvIGFsbCBwNCBjb21tYW5kcywgd2l0aAorCSctcCA8cG9ydD4nLgorCVRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgUDRQT1JUYCBjYW4gYmUgdXNlZCBpbnN0ZWFkLgorCitnaXQtcDQuaG9zdDo6CisJSG9zdCBzcGVjaWZpZWQgYXMgYW4gb3B0aW9uIHRvIGFsbCBwNCBjb21tYW5kcywgd2l0aAorCSctaCA8aG9zdD4nLgorCVRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgUDRIT1NUYCBjYW4gYmUgdXNlZCBpbnN0ZWFkLgorCitnaXQtcDQuY2xpZW50OjoKKwlDbGllbnQgc3BlY2lmaWVkIGFzIGFuIG9wdGlvbiB0byBhbGwgcDQgY29tbWFuZHMsIHdpdGgKKwknLWMgPGNsaWVudD4nLCBpbmNsdWRpbmcgdGhlIGNsaWVudCBzcGVjLgorCitnaXQtcDQucmV0cmllczo6CisJU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgYSBwNCBjb21tYW5kIChub3RhYmx5LAorCSdwNCBzeW5jJykgaWYgdGhlIG5ldHdvcmsgdGltZXMgb3V0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAzLgorCVNldCB0aGUgdmFsdWUgdG8gMCB0byBkaXNhYmxlIHJldHJpZXMgb3IgaWYgeW91ciBwNCB2ZXJzaW9uCisJZG9lcyBub3Qgc3VwcG9ydCByZXRyaWVzIChwcmUgMjAxMi4yKS4KKworQ2xvbmUgYW5kIHN5bmMgdmFyaWFibGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK2dpdC1wNC5zeW5jRnJvbU9yaWdpbjo6CisJQmVjYXVzZSBpbXBvcnRpbmcgY29tbWl0cyBmcm9tIG90aGVyIEdpdCByZXBvc2l0b3JpZXMgaXMgbXVjaCBmYXN0ZXIKKwl0aGFuIGltcG9ydGluZyB0aGVtIGZyb20gcDQsIGEgbWVjaGFuaXNtIGV4aXN0cyB0byBmaW5kIHA0IGNoYW5nZXMKKwlmaXJzdCBpbiBHaXQgcmVtb3Rlcy4gIElmIGJyYW5jaGVzIGV4aXN0IHVuZGVyICdyZWZzL3JlbW90ZS9vcmlnaW4vcDQnLAorCXRob3NlIHdpbGwgYmUgZmV0Y2hlZCBhbmQgdXNlZCB3aGVuIHN5bmNpbmcgZnJvbSBwNC4gIFRoaXMKKwl2YXJpYWJsZSBjYW4gYmUgc2V0IHRvICdmYWxzZScgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLgorCitnaXQtcDQuYnJhbmNoVXNlcjo6CisJT25lIHBoYXNlIGluIGJyYW5jaCBkZXRlY3Rpb24gaW52b2x2ZXMgbG9va2luZyBhdCBwNCBicmFuY2hlcworCXRvIGZpbmQgbmV3IG9uZXMgdG8gaW1wb3J0LiAgQnkgZGVmYXVsdCwgYWxsIGJyYW5jaGVzIGFyZQorCWluc3BlY3RlZC4gIFRoaXMgb3B0aW9uIGxpbWl0cyB0aGUgc2VhcmNoIHRvIGp1c3QgdGhvc2Ugb3duZWQKKwlieSB0aGUgc2luZ2xlIHVzZXIgbmFtZWQgaW4gdGhlIHZhcmlhYmxlLgorCitnaXQtcDQuYnJhbmNoTGlzdDo6CisJTGlzdCBvZiBicmFuY2hlcyB0byBiZSBpbXBvcnRlZCB3aGVuIGJyYW5jaCBkZXRlY3Rpb24gaXMKKwllbmFibGVkLiAgRWFjaCBlbnRyeSBzaG91bGQgYmUgYSBwYWlyIG9mIGJyYW5jaCBuYW1lcyBzZXBhcmF0ZWQKKwlieSBhIGNvbG9uICg6KS4gIFRoaXMgZXhhbXBsZSBkZWNsYXJlcyB0aGF0IGJvdGggYnJhbmNoQSBhbmQKKwlicmFuY2hCIHdlcmUgY3JlYXRlZCBmcm9tIG1haW46CisrCistLS0tLS0tLS0tLS0tCitnaXQgY29uZmlnICAgICAgIGdpdC1wNC5icmFuY2hMaXN0IG1haW46YnJhbmNoQQorZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBtYWluOmJyYW5jaEIKKy0tLS0tLS0tLS0tLS0KKworZ2l0LXA0Lmlnbm9yZWRQNExhYmVsczo6CisJTGlzdCBvZiBwNCBsYWJlbHMgdG8gaWdub3JlLiBUaGlzIGlzIGJ1aWx0IGF1dG9tYXRpY2FsbHkgYXMKKwl1bmltcG9ydGFibGUgbGFiZWxzIGFyZSBkaXNjb3ZlcmVkLgorCitnaXQtcDQuaW1wb3J0TGFiZWxzOjoKKwlJbXBvcnQgcDQgbGFiZWxzIGludG8gZ2l0LCBhcyBwZXIgLS1pbXBvcnQtbGFiZWxzLgorCitnaXQtcDQubGFiZWxJbXBvcnRSZWdleHA6OgorCU9ubHkgcDQgbGFiZWxzIG1hdGNoaW5nIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwgYmUgaW1wb3J0ZWQuIFRoZQorCWRlZmF1bHQgdmFsdWUgaXMgJ1thLXpBLVowLTlfXC0uXSskJy4KKworZ2l0LXA0LnVzZUNsaWVudFNwZWM6OgorCVNwZWNpZnkgdGhhdCB0aGUgcDQgY2xpZW50IHNwZWMgc2hvdWxkIGJlIHVzZWQgdG8gaWRlbnRpZnkgcDQKKwlkZXBvdCBwYXRocyBvZiBpbnRlcmVzdC4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIHRoZQorCW9wdGlvbiBgLS11c2UtY2xpZW50LXNwZWNgLiAgU2VlIHRoZSAiQ0xJRU5UIFNQRUMiIHNlY3Rpb24gYWJvdmUuCisJVGhpcyB2YXJpYWJsZSBpcyBhIGJvb2xlYW4sIG5vdCB0aGUgbmFtZSBvZiBhIHA0IGNsaWVudC4KKworZ2l0LXA0LnBhdGhFbmNvZGluZzo6CisJUGVyZm9yY2Uga2VlcHMgdGhlIGVuY29kaW5nIG9mIGEgcGF0aCBhcyBnaXZlbiBieSB0aGUgb3JpZ2luYXRpbmcgT1MuCisJR2l0IGV4cGVjdHMgcGF0aHMgZW5jb2RlZCBhcyBVVEYtOC4gVXNlIHRoaXMgY29uZmlnIHRvIHRlbGwgZ2l0LXA0CisJd2hhdCBlbmNvZGluZyBQZXJmb3JjZSBoYWQgdXNlZCBmb3IgdGhlIHBhdGhzLiBUaGlzIGVuY29kaW5nIGlzIHVzZWQKKwl0byB0cmFuc2NvZGUgdGhlIHBhdGhzIHRvIFVURi04LiBBcyBhbiBleGFtcGxlLCBQZXJmb3JjZSBvbiBXaW5kb3dzCisJb2Z0ZW4gdXNlcyAiY3AxMjUyIiB0byBlbmNvZGUgcGF0aCBuYW1lcy4KKworZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbTo6CisJU3BlY2lmeSB0aGUgc3lzdGVtIHRoYXQgaXMgdXNlZCBmb3IgbGFyZ2UgKGJpbmFyeSkgZmlsZXMuIFBsZWFzZSBub3RlCisJdGhhdCBsYXJnZSBmaWxlIHN5c3RlbXMgZG8gbm90IHN1cHBvcnQgdGhlICdnaXQgcDQgc3VibWl0JyBjb21tYW5kLgorCU9ubHkgR2l0IExGUyBpcyBpbXBsZW1lbnRlZCByaWdodCBub3cgKHNlZSBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS8KKwlmb3IgbW9yZSBpbmZvcm1hdGlvbikuIERvd25sb2FkIGFuZCBpbnN0YWxsIHRoZSBHaXQgTEZTIGNvbW1hbmQgbGluZQorCWV4dGVuc2lvbiB0byB1c2UgdGhpcyBvcHRpb24gYW5kIGNvbmZpZ3VyZSBpdCBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0tCitnaXQgY29uZmlnICAgICAgIGdpdC1wNC5sYXJnZUZpbGVTeXN0ZW0gR2l0TEZTCistLS0tLS0tLS0tLS0tCisKK2dpdC1wNC5sYXJnZUZpbGVFeHRlbnNpb25zOjoKKwlBbGwgZmlsZXMgbWF0Y2hpbmcgYSBmaWxlIGV4dGVuc2lvbiBpbiB0aGUgbGlzdCB3aWxsIGJlIHByb2Nlc3NlZAorCWJ5IHRoZSBsYXJnZSBmaWxlIHN5c3RlbS4gRG8gbm90IHByZWZpeCB0aGUgZXh0ZW5zaW9ucyB3aXRoICcuJy4KKworZ2l0LXA0LmxhcmdlRmlsZVRocmVzaG9sZDo6CisJQWxsIGZpbGVzIHdpdGggYW4gdW5jb21wcmVzc2VkIHNpemUgZXhjZWVkaW5nIHRoZSB0aHJlc2hvbGQgd2lsbCBiZQorCXByb2Nlc3NlZCBieSB0aGUgbGFyZ2UgZmlsZSBzeXN0ZW0uIEJ5IGRlZmF1bHQgdGhlIHRocmVzaG9sZCBpcworCWRlZmluZWQgaW4gYnl0ZXMuIEFkZCB0aGUgc3VmZml4IGssIG0sIG9yIGcgdG8gY2hhbmdlIHRoZSB1bml0LgorCitnaXQtcDQubGFyZ2VGaWxlQ29tcHJlc3NlZFRocmVzaG9sZDo6CisJQWxsIGZpbGVzIHdpdGggYSBjb21wcmVzc2VkIHNpemUgZXhjZWVkaW5nIHRoZSB0aHJlc2hvbGQgd2lsbCBiZQorCXByb2Nlc3NlZCBieSB0aGUgbGFyZ2UgZmlsZSBzeXN0ZW0uIFRoaXMgb3B0aW9uIG1pZ2h0IHNsb3cgZG93bgorCXlvdXIgY2xvbmUvc3luYyBwcm9jZXNzLiBCeSBkZWZhdWx0IHRoZSB0aHJlc2hvbGQgaXMgZGVmaW5lZCBpbgorCWJ5dGVzLiBBZGQgdGhlIHN1ZmZpeCBrLCBtLCBvciBnIHRvIGNoYW5nZSB0aGUgdW5pdC4KKworZ2l0LXA0LmxhcmdlRmlsZVB1c2g6OgorCUJvb2xlYW4gdmFyaWFibGUgd2hpY2ggZGVmaW5lcyBpZiBsYXJnZSBmaWxlcyBhcmUgYXV0b21hdGljYWxseQorCXB1c2hlZCB0byBhIHNlcnZlci4KKworZ2l0LXA0LmtlZXBFbXB0eUNvbW1pdHM6OgorCUEgY2hhbmdlbGlzdCB0aGF0IGNvbnRhaW5zIG9ubHkgZXhjbHVkZWQgZmlsZXMgd2lsbCBiZSBpbXBvcnRlZAorCWFzIGFuIGVtcHR5IGNvbW1pdCBpZiB0aGlzIGJvb2xlYW4gb3B0aW9uIGlzIHNldCB0byB0cnVlLgorCitnaXQtcDQubWFwVXNlcjo6CisJTWFwIGEgUDQgdXNlciB0byBhIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3MgaW4gR2l0LiBVc2UgYSBzdHJpbmcKKwl3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybWF0IHRvIGNyZWF0ZSBhIG1hcHBpbmc6CisrCistLS0tLS0tLS0tLS0tCitnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5tYXBVc2VyICJwNHVzZXIgPSBGaXJzdCBMYXN0IDxtYWlsQGFkZHJlc3MuY29tPiIKKy0tLS0tLS0tLS0tLS0KKysKK0EgbWFwcGluZyB3aWxsIG92ZXJyaWRlIGFueSB1c2VyIGluZm9ybWF0aW9uIGZyb20gUDQuIE1hcHBpbmdzIGZvcgorbXVsdGlwbGUgUDQgdXNlciBjYW4gYmUgZGVmaW5lZC4KKworU3VibWl0IHZhcmlhYmxlcworfn5+fn5+fn5+fn5+fn5+fgorZ2l0LXA0LmRldGVjdFJlbmFtZXM6OgorCURldGVjdCByZW5hbWVzLiAgU2VlIGxpbmtnaXQ6Z2l0LWRpZmZbMV0uICBUaGlzIGNhbiBiZSB0cnVlLAorCWZhbHNlLCBvciBhIHNjb3JlIGFzIGV4cGVjdGVkIGJ5ICdnaXQgZGlmZiAtTScuCisKK2dpdC1wNC5kZXRlY3RDb3BpZXM6OgorCURldGVjdCBjb3BpZXMuICBTZWUgbGlua2dpdDpnaXQtZGlmZlsxXS4gIFRoaXMgY2FuIGJlIHRydWUsCisJZmFsc2UsIG9yIGEgc2NvcmUgYXMgZXhwZWN0ZWQgYnkgJ2dpdCBkaWZmIC1DJy4KKworZ2l0LXA0LmRldGVjdENvcGllc0hhcmRlcjo6CisJRGV0ZWN0IGNvcGllcyBoYXJkZXIuICBTZWUgbGlua2dpdDpnaXQtZGlmZlsxXS4gIEEgYm9vbGVhbi4KKworZ2l0LXA0LnByZXNlcnZlVXNlcjo6CisJT24gc3VibWl0LCByZS1hdXRob3IgY2hhbmdlcyB0byByZWZsZWN0IHRoZSBHaXQgYXV0aG9yLAorCXJlZ2FyZGxlc3Mgb2Ygd2hvIGludm9rZXMgJ2dpdCBwNCBzdWJtaXQnLgorCitnaXQtcDQuYWxsb3dNaXNzaW5nUDRVc2Vyczo6CisJV2hlbiAncHJlc2VydmVVc2VyJyBpcyB0cnVlLCAnZ2l0IHA0JyBub3JtYWxseSBkaWVzIGlmIGl0CisJY2Fubm90IGZpbmQgYW4gYXV0aG9yIGluIHRoZSBwNCB1c2VyIG1hcC4gIFRoaXMgc2V0dGluZworCXN1Ym1pdHMgdGhlIGNoYW5nZSByZWdhcmRsZXNzLgorCitnaXQtcDQuc2tpcFN1Ym1pdEVkaXQ6OgorCVRoZSBzdWJtaXQgcHJvY2VzcyBpbnZva2VzIHRoZSBlZGl0b3IgYmVmb3JlIGVhY2ggcDQgY2hhbmdlCisJaXMgc3VibWl0dGVkLiAgSWYgdGhpcyBzZXR0aW5nIGlzIHRydWUsIHRob3VnaCwgdGhlIGVkaXRpbmcKKwlzdGVwIGlzIHNraXBwZWQuCisKK2dpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrOjoKKwlBZnRlciBlZGl0aW5nIHRoZSBwNCBjaGFuZ2UgbWVzc2FnZSwgJ2dpdCBwNCcgbWFrZXMgc3VyZSB0aGF0CisJdGhlIGRlc2NyaXB0aW9uIHJlYWxseSB3YXMgY2hhbmdlZCBieSBsb29raW5nIGF0IHRoZSBmaWxlCisJbW9kaWZpY2F0aW9uIHRpbWUuICBUaGlzIG9wdGlvbiBkaXNhYmxlcyB0aGF0IHRlc3QuCisKK2dpdC1wNC5hbGxvd1N1Ym1pdDo6CisJQnkgZGVmYXVsdCwgYW55IGJyYW5jaCBjYW4gYmUgdXNlZCBhcyB0aGUgc291cmNlIGZvciBhICdnaXQgcDQKKwlzdWJtaXQnIG9wZXJhdGlvbi4gIFRoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgaWYgc2V0LCBwZXJtaXRzIG9ubHkKKwl0aGUgbmFtZWQgYnJhbmNoZXMgdG8gYmUgdXNlZCBhcyBzdWJtaXQgc291cmNlcy4gIEJyYW5jaCBuYW1lcworCW11c3QgYmUgdGhlIHNob3J0IG5hbWVzIChubyAicmVmcy9oZWFkcy8iKSwgYW5kIHNob3VsZCBiZQorCXNlcGFyYXRlZCBieSBjb21tYXMgKCIsIiksIHdpdGggbm8gc3BhY2VzLgorCitnaXQtcDQuc2tpcFVzZXJOYW1lQ2hlY2s6OgorCUlmIHRoZSB1c2VyIHJ1bm5pbmcgJ2dpdCBwNCBzdWJtaXQnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBwNAorCXVzZXIgbWFwLCAnZ2l0IHA0JyBleGl0cy4gIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGZvcmNlCisJc3VibWlzc2lvbiByZWdhcmRsZXNzLgorCitnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXA6OgorCUlmIGVuYWJsZWQsICdnaXQgcDQgc3VibWl0JyB3aWxsIGF0dGVtcHQgdG8gY2xlYW51cCBSQ1Mga2V5d29yZHMKKwkoJEhlYWRlciQsIGV0YykuIFRoZXNlIHdvdWxkIG90aGVyd2lzZSBjYXVzZSBtZXJnZSBjb25mbGljdHMgYW5kIHByZXZlbnQKKwl0aGUgc3VibWl0IGdvaW5nIGFoZWFkLiBUaGlzIG9wdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZCBleHBlcmltZW50YWwgYXQKKwlwcmVzZW50LgorCitnaXQtcDQuZXhwb3J0TGFiZWxzOjoKKwlFeHBvcnQgR2l0IHRhZ3MgdG8gcDQgbGFiZWxzLCBhcyBwZXIgLS1leHBvcnQtbGFiZWxzLgorCitnaXQtcDQubGFiZWxFeHBvcnRSZWdleHA6OgorCU9ubHkgcDQgbGFiZWxzIG1hdGNoaW5nIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwgYmUgZXhwb3J0ZWQuIFRoZQorCWRlZmF1bHQgdmFsdWUgaXMgJ1thLXpBLVowLTlfXC0uXSskJy4KKworZ2l0LXA0LmNvbmZsaWN0OjoKKwlTcGVjaWZ5IHN1Ym1pdCBiZWhhdmlvciB3aGVuIGEgY29uZmxpY3Qgd2l0aCBwNCBpcyBmb3VuZCwgYXMgcGVyCisJLS1jb25mbGljdC4gIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzICdhc2snLgorCitnaXQtcDQuZGlzYWJsZVJlYmFzZTo6CisgICAgRG8gbm90IHJlYmFzZSB0aGUgdHJlZSBhZ2FpbnN0IHA0L21hc3RlciBmb2xsb3dpbmcgYSBzdWJtaXQuCisKK2dpdC1wNC5kaXNhYmxlUDRTeW5jOjoKKyAgICBEbyBub3Qgc3luYyBwNC9tYXN0ZXIgd2l0aCBQZXJmb3JjZSBmb2xsb3dpbmcgYSBzdWJtaXQuIEltcGxpZXMgZ2l0LXA0LmRpc2FibGVSZWJhc2UuCisKK0lNUExFTUVOVEFUSU9OIERFVEFJTFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogQ2hhbmdlc2V0cyBmcm9tIHA0IGFyZSBpbXBvcnRlZCB1c2luZyBHaXQgZmFzdC1pbXBvcnQuCisqIENsb25pbmcgb3Igc3luY2luZyBkb2VzIG5vdCByZXF1aXJlIGEgcDQgY2xpZW50OyBmaWxlIGNvbnRlbnRzIGFyZQorICBjb2xsZWN0ZWQgdXNpbmcgJ3A0IHByaW50Jy4KKyogU3VibWl0dGluZyByZXF1aXJlcyBhIHA0IGNsaWVudCwgd2hpY2ggaXMgbm90IGluIHRoZSBzYW1lIGxvY2F0aW9uCisgIGFzIHRoZSBHaXQgcmVwb3NpdG9yeS4gIFBhdGNoZXMgYXJlIGFwcGxpZWQsIG9uZSBhdCBhIHRpbWUsIHRvCisgIHRoaXMgcDQgY2xpZW50IGFuZCBzdWJtaXR0ZWQgZnJvbSB0aGVyZS4KKyogRWFjaCBjb21taXQgaW1wb3J0ZWQgYnkgJ2dpdCBwNCcgaGFzIGEgbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBsb2cKKyAgbWVzc2FnZSBpbmRpY2F0aW5nIHRoZSBwNCBkZXBvdCBsb2NhdGlvbiBhbmQgY2hhbmdlIG51bWJlci4gIFRoaXMKKyAgbGluZSBpcyB1c2VkIGJ5IGxhdGVyICdnaXQgcDQgc3luYycgb3BlcmF0aW9ucyB0byBrbm93IHdoaWNoIHA0CisgIGNoYW5nZXMgYXJlIG5ldy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stb2JqZWN0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYTJmMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0CkBAIC0wLDAgKzEsNDA4IEBACitnaXQtcGFjay1vYmplY3RzKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1wYWNrLW9iamVjdHMgLSBDcmVhdGUgYSBwYWNrZWQgYXJjaGl2ZSBvZiBvYmplY3RzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHBhY2stb2JqZWN0cycgWy1xIHwgLS1wcm9ncmVzcyB8IC0tYWxsLXByb2dyZXNzXSBbLS1hbGwtcHJvZ3Jlc3MtaW1wbGllZF0KKwlbLS1uby1yZXVzZS1kZWx0YV0gWy0tZGVsdGEtYmFzZS1vZmZzZXRdIFstLW5vbi1lbXB0eV0KKwlbLS1sb2NhbF0gWy0taW5jcmVtZW50YWxdIFstLXdpbmRvdz08bj5dIFstLWRlcHRoPTxuPl0KKwlbLS1yZXZzIFstLXVucGFja2VkIHwgLS1hbGxdXSBbLS1rZWVwLXBhY2s9PHBhY2stbmFtZT5dCisJWy0tc3Rkb3V0IFstLWZpbHRlcj08ZmlsdGVyLXNwZWM+XSB8IGJhc2UtbmFtZV0KKwlbLS1zaGFsbG93XSBbLS1rZWVwLXRydWUtcGFyZW50c10gWy0tW25vLV1zcGFyc2VdIDwgb2JqZWN0LWxpc3QKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlYWRzIGxpc3Qgb2Ygb2JqZWN0cyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgYW5kIHdyaXRlcyBlaXRoZXIgb25lIG9yCittb3JlIHBhY2tlZCBhcmNoaXZlcyB3aXRoIHRoZSBzcGVjaWZpZWQgYmFzZS1uYW1lIHRvIGRpc2ssIG9yIGEgcGFja2VkCithcmNoaXZlIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisKK0EgcGFja2VkIGFyY2hpdmUgaXMgYW4gZWZmaWNpZW50IHdheSB0byB0cmFuc2ZlciBhIHNldCBvZiBvYmplY3RzCitiZXR3ZWVuIHR3byByZXBvc2l0b3JpZXMgYXMgd2VsbCBhcyBhbiBhY2Nlc3MgZWZmaWNpZW50IGFyY2hpdmFsCitmb3JtYXQuICBJbiBhIHBhY2tlZCBhcmNoaXZlLCBhbiBvYmplY3QgaXMgZWl0aGVyIHN0b3JlZCBhcyBhCitjb21wcmVzc2VkIHdob2xlIG9yIGFzIGEgZGlmZmVyZW5jZSBmcm9tIHNvbWUgb3RoZXIgb2JqZWN0LgorVGhlIGxhdHRlciBpcyBvZnRlbiBjYWxsZWQgYSBkZWx0YS4KKworVGhlIHBhY2tlZCBhcmNoaXZlIGZvcm1hdCAoLnBhY2spIGlzIGRlc2lnbmVkIHRvIGJlIHNlbGYtY29udGFpbmVkCitzbyB0aGF0IGl0IGNhbiBiZSB1bnBhY2tlZCB3aXRob3V0IGFueSBmdXJ0aGVyIGluZm9ybWF0aW9uLiBUaGVyZWZvcmUsCitlYWNoIG9iamVjdCB0aGF0IGEgZGVsdGEgZGVwZW5kcyB1cG9uIG11c3QgYmUgcHJlc2VudCB3aXRoaW4gdGhlIHBhY2suCisKK0EgcGFjayBpbmRleCBmaWxlICguaWR4KSBpcyBnZW5lcmF0ZWQgZm9yIGZhc3QsIHJhbmRvbSBhY2Nlc3MgdG8gdGhlCitvYmplY3RzIGluIHRoZSBwYWNrLiBQbGFjaW5nIGJvdGggdGhlIGluZGV4IGZpbGUgKC5pZHgpIGFuZCB0aGUgcGFja2VkCithcmNoaXZlICgucGFjaykgaW4gdGhlIHBhY2svIHN1YmRpcmVjdG9yeSBvZiAkR0lUX09CSkVDVF9ESVJFQ1RPUlkgKG9yCithbnkgb2YgdGhlIGRpcmVjdG9yaWVzIG9uICRHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUykKK2VuYWJsZXMgR2l0IHRvIHJlYWQgZnJvbSB0aGUgcGFjayBhcmNoaXZlLgorCitUaGUgJ2dpdCB1bnBhY2stb2JqZWN0cycgY29tbWFuZCBjYW4gcmVhZCB0aGUgcGFja2VkIGFyY2hpdmUgYW5kCitleHBhbmQgdGhlIG9iamVjdHMgY29udGFpbmVkIGluIHRoZSBwYWNrIGludG8gIm9uZS1maWxlCitvbmUtb2JqZWN0IiBmb3JtYXQ7IHRoaXMgaXMgdHlwaWNhbGx5IGRvbmUgYnkgdGhlIHNtYXJ0LXB1bGwKK2NvbW1hbmRzIHdoZW4gYSBwYWNrIGlzIGNyZWF0ZWQgb24tdGhlLWZseSBmb3IgZWZmaWNpZW50IG5ldHdvcmsKK3RyYW5zcG9ydCBieSB0aGVpciBwZWVycy4KKworCitPUFRJT05TCistLS0tLS0tCitiYXNlLW5hbWU6OgorCVdyaXRlIGludG8gcGFpcnMgb2YgZmlsZXMgKC5wYWNrIGFuZCAuaWR4KSwgdXNpbmcKKwk8YmFzZS1uYW1lPiB0byBkZXRlcm1pbmUgdGhlIG5hbWUgb2YgdGhlIGNyZWF0ZWQgZmlsZS4KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQsIHRoZSB0d28gZmlsZXMgaW4gYSBwYWlyIGFyZSB3cml0dGVuIGluCisJPGJhc2UtbmFtZT4tPFNIQS0xPi57cGFjayxpZHh9IGZpbGVzLiAgPFNIQS0xPiBpcyBhIGhhc2gKKwliYXNlZCBvbiB0aGUgcGFjayBjb250ZW50IGFuZCBpcyB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZAorCW91dHB1dCBvZiB0aGUgY29tbWFuZC4KKworLS1zdGRvdXQ6OgorCVdyaXRlIHRoZSBwYWNrIGNvbnRlbnRzICh3aGF0IHdvdWxkIGhhdmUgYmVlbiB3cml0dGVuIHRvCisJLnBhY2sgZmlsZSkgb3V0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisKKy0tcmV2czo6CisJUmVhZCB0aGUgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBpbnN0ZWFkIG9mCisJaW5kaXZpZHVhbCBvYmplY3QgbmFtZXMuICBUaGUgcmV2aXNpb24gYXJndW1lbnRzIGFyZSBwcm9jZXNzZWQKKwl0aGUgc2FtZSB3YXkgYXMgJ2dpdCByZXYtbGlzdCcgd2l0aCB0aGUgYC0tb2JqZWN0c2AgZmxhZworCXVzZXMgaXRzIGBjb21taXRgIGFyZ3VtZW50cyB0byBidWlsZCB0aGUgbGlzdCBvZiBvYmplY3RzIGl0CisJb3V0cHV0cy4gIFRoZSBvYmplY3RzIG9uIHRoZSByZXN1bHRpbmcgbGlzdCBhcmUgcGFja2VkLgorCUJlc2lkZXMgcmV2aXNpb25zLCBgLS1ub3RgIG9yIGAtLXNoYWxsb3cgPFNIQS0xPmAgbGluZXMgYXJlCisJYWxzbyBhY2NlcHRlZC4KKworLS11bnBhY2tlZDo6CisJVGhpcyBpbXBsaWVzIGAtLXJldnNgLiAgV2hlbiBwcm9jZXNzaW5nIHRoZSBsaXN0IG9mCisJcmV2aXNpb24gYXJndW1lbnRzIHJlYWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsIGxpbWl0CisJdGhlIG9iamVjdHMgcGFja2VkIHRvIHRob3NlIHRoYXQgYXJlIG5vdCBhbHJlYWR5IHBhY2tlZC4KKworLS1hbGw6OgorCVRoaXMgaW1wbGllcyBgLS1yZXZzYC4gIEluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IG9mCisJcmV2aXNpb24gYXJndW1lbnRzIHJlYWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsIHByZXRlbmQKKwlhcyBpZiBhbGwgcmVmcyB1bmRlciBgcmVmcy9gIGFyZSBzcGVjaWZpZWQgdG8gYmUKKwlpbmNsdWRlZC4KKworLS1pbmNsdWRlLXRhZzo6CisJSW5jbHVkZSB1bmFza2VkLWZvciBhbm5vdGF0ZWQgdGFncyBpZiB0aGUgb2JqZWN0IHRoZXkKKwlyZWZlcmVuY2Ugd2FzIGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgcGFja2ZpbGUuICBUaGlzCisJY2FuIGJlIHVzZWZ1bCB0byBzZW5kIG5ldyB0YWdzIHRvIG5hdGl2ZSBHaXQgY2xpZW50cy4KKworLS13aW5kb3c9PG4+OjoKKy0tZGVwdGg9PG4+OjoKKwlUaGVzZSB0d28gb3B0aW9ucyBhZmZlY3QgaG93IHRoZSBvYmplY3RzIGNvbnRhaW5lZCBpbgorCXRoZSBwYWNrIGFyZSBzdG9yZWQgdXNpbmcgZGVsdGEgY29tcHJlc3Npb24uICBUaGUKKwlvYmplY3RzIGFyZSBmaXJzdCBpbnRlcm5hbGx5IHNvcnRlZCBieSB0eXBlLCBzaXplIGFuZAorCW9wdGlvbmFsbHkgbmFtZXMgYW5kIGNvbXBhcmVkIGFnYWluc3QgdGhlIG90aGVyIG9iamVjdHMKKwl3aXRoaW4gLS13aW5kb3cgdG8gc2VlIGlmIHVzaW5nIGRlbHRhIGNvbXByZXNzaW9uIHNhdmVzCisJc3BhY2UuICAtLWRlcHRoIGxpbWl0cyB0aGUgbWF4aW11bSBkZWx0YSBkZXB0aDsgbWFraW5nCisJaXQgdG9vIGRlZXAgYWZmZWN0cyB0aGUgcGVyZm9ybWFuY2Ugb24gdGhlIHVucGFja2VyCisJc2lkZSwgYmVjYXVzZSBkZWx0YSBkYXRhIG5lZWRzIHRvIGJlIGFwcGxpZWQgdGhhdCBtYW55CisJdGltZXMgdG8gZ2V0IHRvIHRoZSBuZWNlc3Nhcnkgb2JqZWN0LgorKworVGhlIGRlZmF1bHQgdmFsdWUgZm9yIC0td2luZG93IGlzIDEwIGFuZCAtLWRlcHRoIGlzIDUwLiBUaGUgbWF4aW11bQorZGVwdGggaXMgNDA5NS4KKworLS13aW5kb3ctbWVtb3J5PTxuPjo6CisJVGhpcyBvcHRpb24gcHJvdmlkZXMgYW4gYWRkaXRpb25hbCBsaW1pdCBvbiB0b3Agb2YgYC0td2luZG93YDsKKwl0aGUgd2luZG93IHNpemUgd2lsbCBkeW5hbWljYWxseSBzY2FsZSBkb3duIHNvIGFzIHRvIG5vdCB0YWtlCisJdXAgbW9yZSB0aGFuICc8bj4nIGJ5dGVzIGluIG1lbW9yeS4gIFRoaXMgaXMgdXNlZnVsIGluCisJcmVwb3NpdG9yaWVzIHdpdGggYSBtaXggb2YgbGFyZ2UgYW5kIHNtYWxsIG9iamVjdHMgdG8gbm90IHJ1bgorCW91dCBvZiBtZW1vcnkgd2l0aCBhIGxhcmdlIHdpbmRvdywgYnV0IHN0aWxsIGJlIGFibGUgdG8gdGFrZQorCWFkdmFudGFnZSBvZiB0aGUgbGFyZ2Ugd2luZG93IGZvciB0aGUgc21hbGxlciBvYmplY3RzLiAgVGhlCisJc2l6ZSBjYW4gYmUgc3VmZml4ZWQgd2l0aCAiayIsICJtIiwgb3IgImciLgorCWAtLXdpbmRvdy1tZW1vcnk9MGAgbWFrZXMgbWVtb3J5IHVzYWdlIHVubGltaXRlZC4gIFRoZSBkZWZhdWx0CisJaXMgdGFrZW4gZnJvbSB0aGUgYHBhY2sud2luZG93TWVtb3J5YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCistLW1heC1wYWNrLXNpemU9PG4+OjoKKwlJbiB1bnVzdWFsIHNjZW5hcmlvcywgeW91IG1heSBub3QgYmUgYWJsZSB0byBjcmVhdGUgZmlsZXMKKwlsYXJnZXIgdGhhbiBhIGNlcnRhaW4gc2l6ZSBvbiB5b3VyIGZpbGVzeXN0ZW0sIGFuZCB0aGlzIG9wdGlvbgorCWNhbiBiZSB1c2VkIHRvIHRlbGwgdGhlIGNvbW1hbmQgdG8gc3BsaXQgdGhlIG91dHB1dCBwYWNrZmlsZQorCWludG8gbXVsdGlwbGUgaW5kZXBlbmRlbnQgcGFja2ZpbGVzLCBlYWNoIG5vdCBsYXJnZXIgdGhhbiB0aGUKKwlnaXZlbiBzaXplLiBUaGUgc2l6ZSBjYW4gYmUgc3VmZml4ZWQgd2l0aAorCSJrIiwgIm0iLCBvciAiZyIuIFRoZSBtaW5pbXVtIHNpemUgYWxsb3dlZCBpcyBsaW1pdGVkIHRvIDEgTWlCLgorCVRoaXMgb3B0aW9uCisJcHJldmVudHMgdGhlIGNyZWF0aW9uIG9mIGEgYml0bWFwIGluZGV4LgorCVRoZSBkZWZhdWx0IGlzIHVubGltaXRlZCwgdW5sZXNzIHRoZSBjb25maWcgdmFyaWFibGUKKwlgcGFjay5wYWNrU2l6ZUxpbWl0YCBpcyBzZXQuCisKKy0taG9ub3ItcGFjay1rZWVwOjoKKwlUaGlzIGZsYWcgY2F1c2VzIGFuIG9iamVjdCBhbHJlYWR5IGluIGEgbG9jYWwgcGFjayB0aGF0CisJaGFzIGEgLmtlZXAgZmlsZSB0byBiZSBpZ25vcmVkLCBldmVuIGlmIGl0IHdvdWxkIGhhdmUKKwlvdGhlcndpc2UgYmVlbiBwYWNrZWQuCisKKy0ta2VlcC1wYWNrPTxwYWNrLW5hbWU+OjoKKwlUaGlzIGZsYWcgY2F1c2VzIGFuIG9iamVjdCBhbHJlYWR5IGluIHRoZSBnaXZlbiBwYWNrIHRvIGJlCisJaWdub3JlZCwgZXZlbiBpZiBpdCB3b3VsZCBoYXZlIG90aGVyd2lzZSBiZWVuCisJcGFja2VkLiBgPHBhY2stbmFtZT5gIGlzIHRoZSBwYWNrIGZpbGUgbmFtZSB3aXRob3V0CisJbGVhZGluZyBkaXJlY3RvcnkgKGUuZy4gYHBhY2stMTIzLnBhY2tgKS4gVGhlIG9wdGlvbiBjb3VsZCBiZQorCXNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB0byBrZWVwIG11bHRpcGxlIHBhY2tzLgorCistLWluY3JlbWVudGFsOjoKKwlUaGlzIGZsYWcgY2F1c2VzIGFuIG9iamVjdCBhbHJlYWR5IGluIGEgcGFjayB0byBiZSBpZ25vcmVkCisJZXZlbiBpZiBpdCB3b3VsZCBoYXZlIG90aGVyd2lzZSBiZWVuIHBhY2tlZC4KKworLS1sb2NhbDo6CisJVGhpcyBmbGFnIGNhdXNlcyBhbiBvYmplY3QgdGhhdCBpcyBib3Jyb3dlZCBmcm9tIGFuIGFsdGVybmF0ZQorCW9iamVjdCBzdG9yZSB0byBiZSBpZ25vcmVkIGV2ZW4gaWYgaXQgd291bGQgaGF2ZSBvdGhlcndpc2UgYmVlbgorCXBhY2tlZC4KKworLS1ub24tZW1wdHk6OgorICAgICAgICBPbmx5IGNyZWF0ZSBhIHBhY2tlZCBhcmNoaXZlIGlmIGl0IHdvdWxkIGNvbnRhaW4gYXQKKyAgICAgICAgbGVhc3Qgb25lIG9iamVjdC4KKworLS1wcm9ncmVzczo6CisJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKwlieSBkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzIC1xCisJaXMgc3BlY2lmaWVkLiBUaGlzIGZsYWcgZm9yY2VzIHByb2dyZXNzIHN0YXR1cyBldmVuIGlmCisJdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBub3QgZGlyZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KKworLS1hbGwtcHJvZ3Jlc3M6OgorCVdoZW4gLS1zdGRvdXQgaXMgc3BlY2lmaWVkIHRoZW4gcHJvZ3Jlc3MgcmVwb3J0IGlzCisJZGlzcGxheWVkIGR1cmluZyB0aGUgb2JqZWN0IGNvdW50IGFuZCBjb21wcmVzc2lvbiBwaGFzZXMKKwlidXQgaW5oaWJpdGVkIGR1cmluZyB0aGUgd3JpdGUtb3V0IHBoYXNlLiBUaGUgcmVhc29uIGlzCisJdGhhdCBpbiBzb21lIGNhc2VzIHRoZSBvdXRwdXQgc3RyZWFtIGlzIGRpcmVjdGx5IGxpbmtlZAorCXRvIGFub3RoZXIgY29tbWFuZCB3aGljaCBtYXkgd2lzaCB0byBkaXNwbGF5IHByb2dyZXNzCisJc3RhdHVzIG9mIGl0cyBvd24gYXMgaXQgcHJvY2Vzc2VzIGluY29taW5nIHBhY2sgZGF0YS4KKwlUaGlzIGZsYWcgaXMgbGlrZSAtLXByb2dyZXNzIGV4Y2VwdCB0aGF0IGl0IGZvcmNlcyBwcm9ncmVzcworCXJlcG9ydCBmb3IgdGhlIHdyaXRlLW91dCBwaGFzZSBhcyB3ZWxsIGV2ZW4gaWYgLS1zdGRvdXQgaXMKKwl1c2VkLgorCistLWFsbC1wcm9ncmVzcy1pbXBsaWVkOjoKKwlUaGlzIGlzIHVzZWQgdG8gaW1wbHkgLS1hbGwtcHJvZ3Jlc3Mgd2hlbmV2ZXIgcHJvZ3Jlc3MgZGlzcGxheQorCWlzIGFjdGl2YXRlZC4gIFVubGlrZSAtLWFsbC1wcm9ncmVzcyB0aGlzIGZsYWcgZG9lc24ndCBhY3R1YWxseQorCWZvcmNlIGFueSBwcm9ncmVzcyBkaXNwbGF5IGJ5IGl0c2VsZi4KKworLXE6OgorCVRoaXMgZmxhZyBtYWtlcyB0aGUgY29tbWFuZCBub3QgdG8gcmVwb3J0IGl0cyBwcm9ncmVzcworCW9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0uCisKKy0tbm8tcmV1c2UtZGVsdGE6OgorCVdoZW4gY3JlYXRpbmcgYSBwYWNrZWQgYXJjaGl2ZSBpbiBhIHJlcG9zaXRvcnkgdGhhdAorCWhhcyBleGlzdGluZyBwYWNrcywgdGhlIGNvbW1hbmQgcmV1c2VzIGV4aXN0aW5nIGRlbHRhcy4KKwlUaGlzIHNvbWV0aW1lcyByZXN1bHRzIGluIGEgc2xpZ2h0bHkgc3Vib3B0aW1hbCBwYWNrLgorCVRoaXMgZmxhZyB0ZWxscyB0aGUgY29tbWFuZCBub3QgdG8gcmV1c2UgZXhpc3RpbmcgZGVsdGFzCisJYnV0IGNvbXB1dGUgdGhlbSBmcm9tIHNjcmF0Y2guCisKKy0tbm8tcmV1c2Utb2JqZWN0OjoKKwlUaGlzIGZsYWcgdGVsbHMgdGhlIGNvbW1hbmQgbm90IHRvIHJldXNlIGV4aXN0aW5nIG9iamVjdCBkYXRhIGF0IGFsbCwKKwlpbmNsdWRpbmcgbm9uIGRlbHRpZmllZCBvYmplY3QsIGZvcmNpbmcgcmVjb21wcmVzc2lvbiBvZiBldmVyeXRoaW5nLgorCVRoaXMgaW1wbGllcyAtLW5vLXJldXNlLWRlbHRhLiBVc2VmdWwgb25seSBpbiB0aGUgb2JzY3VyZSBjYXNlIHdoZXJlCisJd2hvbGVzYWxlIGVuZm9yY2VtZW50IG9mIGEgZGlmZmVyZW50IGNvbXByZXNzaW9uIGxldmVsIG9uIHRoZQorCXBhY2tlZCBkYXRhIGlzIGRlc2lyZWQuCisKKy0tY29tcHJlc3Npb249PG4+OjoKKwlTcGVjaWZpZXMgY29tcHJlc3Npb24gbGV2ZWwgZm9yIG5ld2x5LWNvbXByZXNzZWQgZGF0YSBpbiB0aGUKKwlnZW5lcmF0ZWQgcGFjay4gIElmIG5vdCBzcGVjaWZpZWQsICBwYWNrIGNvbXByZXNzaW9uIGxldmVsIGlzCisJZGV0ZXJtaW5lZCBmaXJzdCBieSBwYWNrLmNvbXByZXNzaW9uLCAgdGhlbiBieSBjb3JlLmNvbXByZXNzaW9uLAorCWFuZCBkZWZhdWx0cyB0byAtMSwgIHRoZSB6bGliIGRlZmF1bHQsICBpZiBuZWl0aGVyIGlzIHNldC4KKwlBZGQgLS1uby1yZXVzZS1vYmplY3QgaWYgeW91IHdhbnQgdG8gZm9yY2UgYSB1bmlmb3JtIGNvbXByZXNzaW9uCisJbGV2ZWwgb24gYWxsIGRhdGEgbm8gbWF0dGVyIHRoZSBzb3VyY2UuCisKKy0tW25vLV1zcGFyc2U6OgorCVRvZ2dsZSB0aGUgInNwYXJzZSIgYWxnb3JpdGhtIHRvIGRldGVybWluZSB3aGljaCBvYmplY3RzIHRvIGluY2x1ZGUgaW4KKwl0aGUgcGFjaywgd2hlbiBjb21iaW5lZCB3aXRoIHRoZSAiLS1yZXZzIiBvcHRpb24uIFRoaXMgYWxnb3JpdGhtCisJb25seSB3YWxrcyB0cmVlcyB0aGF0IGFwcGVhciBpbiBwYXRocyB0aGF0IGludHJvZHVjZSBuZXcgb2JqZWN0cy4KKwlUaGlzIGNhbiBoYXZlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGJlbmVmaXRzIHdoZW4gY29tcHV0aW5nCisJYSBwYWNrIHRvIHNlbmQgYSBzbWFsbCBjaGFuZ2UuIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgZXh0cmEKKwlvYmplY3RzIGFyZSBhZGRlZCB0byB0aGUgcGFjay1maWxlIGlmIHRoZSBpbmNsdWRlZCBjb21taXRzIGNvbnRhaW4KKwljZXJ0YWluIHR5cGVzIG9mIGRpcmVjdCByZW5hbWVzLiBJZiB0aGlzIG9wdGlvbiBpcyBub3QgaW5jbHVkZWQsCisJaXQgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGBwYWNrLnVzZVNwYXJzZWAsIHdoaWNoIGlzIHRydWUgdW5sZXNzCisJb3RoZXJ3aXNlIHNwZWNpZmllZC4KKworLS10aGluOjoKKwlDcmVhdGUgYSAidGhpbiIgcGFjayBieSBvbWl0dGluZyB0aGUgY29tbW9uIG9iamVjdHMgYmV0d2VlbiBhCisJc2VuZGVyIGFuZCBhIHJlY2VpdmVyIGluIG9yZGVyIHRvIHJlZHVjZSBuZXR3b3JrIHRyYW5zZmVyLiBUaGlzCisJb3B0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgaW4gY29uanVuY3Rpb24gd2l0aCAtLXN0ZG91dC4KKysKK05vdGU6IEEgdGhpbiBwYWNrIHZpb2xhdGVzIHRoZSBwYWNrZWQgYXJjaGl2ZSBmb3JtYXQgYnkgb21pdHRpbmcKK3JlcXVpcmVkIG9iamVjdHMgYW5kIGlzIHRodXMgdW51c2FibGUgYnkgR2l0IHdpdGhvdXQgbWFraW5nIGl0CitzZWxmLWNvbnRhaW5lZC4gVXNlIGBnaXQgaW5kZXgtcGFjayAtLWZpeC10aGluYAorKHNlZSBsaW5rZ2l0OmdpdC1pbmRleC1wYWNrWzFdKSB0byByZXN0b3JlIHRoZSBzZWxmLWNvbnRhaW5lZCBwcm9wZXJ0eS4KKworLS1zaGFsbG93OjoKKwlPcHRpbWl6ZSBhIHBhY2sgdGhhdCB3aWxsIGJlIHByb3ZpZGVkIHRvIGEgY2xpZW50IHdpdGggYSBzaGFsbG93CisJcmVwb3NpdG9yeS4gIFRoaXMgb3B0aW9uLCBjb21iaW5lZCB3aXRoIC0tdGhpbiwgY2FuIHJlc3VsdCBpbiBhCisJc21hbGxlciBwYWNrIGF0IHRoZSBjb3N0IG9mIHNwZWVkLgorCistLWRlbHRhLWJhc2Utb2Zmc2V0OjoKKwlBIHBhY2tlZCBhcmNoaXZlIGNhbiBleHByZXNzIHRoZSBiYXNlIG9iamVjdCBvZiBhIGRlbHRhIGFzCisJZWl0aGVyIGEgMjAtYnl0ZSBvYmplY3QgbmFtZSBvciBhcyBhbiBvZmZzZXQgaW4gdGhlCisJc3RyZWFtLCBidXQgYW5jaWVudCB2ZXJzaW9ucyBvZiBHaXQgZG9uJ3QgdW5kZXJzdGFuZCB0aGUKKwlsYXR0ZXIuICBCeSBkZWZhdWx0LCAnZ2l0IHBhY2stb2JqZWN0cycgb25seSB1c2VzIHRoZQorCWZvcm1lciBmb3JtYXQgZm9yIGJldHRlciBjb21wYXRpYmlsaXR5LiAgVGhpcyBvcHRpb24KKwlhbGxvd3MgdGhlIGNvbW1hbmQgdG8gdXNlIHRoZSBsYXR0ZXIgZm9ybWF0IGZvcgorCWNvbXBhY3RuZXNzLiAgRGVwZW5kaW5nIG9uIHRoZSBhdmVyYWdlIGRlbHRhIGNoYWluCisJbGVuZ3RoLCB0aGlzIG9wdGlvbiB0eXBpY2FsbHkgc2hyaW5rcyB0aGUgcmVzdWx0aW5nCisJcGFja2ZpbGUgYnkgMy01IHBlci1jZW50LgorKworTm90ZTogUG9yY2VsYWluIGNvbW1hbmRzIHN1Y2ggYXMgYGdpdCBnY2AgKHNlZSBsaW5rZ2l0OmdpdC1nY1sxXSksCitgZ2l0IHJlcGFja2AgKHNlZSBsaW5rZ2l0OmdpdC1yZXBhY2tbMV0pIHBhc3MgdGhpcyBvcHRpb24gYnkgZGVmYXVsdAoraW4gbW9kZXJuIEdpdCB3aGVuIHRoZXkgcHV0IG9iamVjdHMgaW4geW91ciByZXBvc2l0b3J5IGludG8gcGFjayBmaWxlcy4KK1NvIGRvZXMgYGdpdCBidW5kbGVgIChzZWUgbGlua2dpdDpnaXQtYnVuZGxlWzFdKSB3aGVuIGl0IGNyZWF0ZXMgYSBidW5kbGUuCisKKy0tdGhyZWFkcz08bj46OgorCVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdG8gc3Bhd24gd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QKKwlkZWx0YSBtYXRjaGVzLiAgVGhpcyByZXF1aXJlcyB0aGF0IHBhY2stb2JqZWN0cyBiZSBjb21waWxlZCB3aXRoCisJcHRocmVhZHMgb3RoZXJ3aXNlIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgd2l0aCBhIHdhcm5pbmcuCisJVGhpcyBpcyBtZWFudCB0byByZWR1Y2UgcGFja2luZyB0aW1lIG9uIG11bHRpcHJvY2Vzc29yIG1hY2hpbmVzLgorCVRoZSByZXF1aXJlZCBhbW91bnQgb2YgbWVtb3J5IGZvciB0aGUgZGVsdGEgc2VhcmNoIHdpbmRvdyBpcworCWhvd2V2ZXIgbXVsdGlwbGllZCBieSB0aGUgbnVtYmVyIG9mIHRocmVhZHMuCisJU3BlY2lmeWluZyAwIHdpbGwgY2F1c2UgR2l0IHRvIGF1dG8tZGV0ZWN0IHRoZSBudW1iZXIgb2YgQ1BVJ3MKKwlhbmQgc2V0IHRoZSBudW1iZXIgb2YgdGhyZWFkcyBhY2NvcmRpbmdseS4KKworLS1pbmRleC12ZXJzaW9uPTx2ZXJzaW9uPlssPG9mZnNldD5dOjoKKwlUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgdGhlIHRlc3Qgc3VpdGUgb25seS4gSXQgYWxsb3dzCisJdG8gZm9yY2UgdGhlIHZlcnNpb24gZm9yIHRoZSBnZW5lcmF0ZWQgcGFjayBpbmRleCwgYW5kIHRvIGZvcmNlCisJNjQtYml0IGluZGV4IGVudHJpZXMgb24gb2JqZWN0cyBsb2NhdGVkIGFib3ZlIHRoZSBnaXZlbiBvZmZzZXQuCisKKy0ta2VlcC10cnVlLXBhcmVudHM6OgorCVdpdGggdGhpcyBvcHRpb24sIHBhcmVudHMgdGhhdCBhcmUgaGlkZGVuIGJ5IGdyYWZ0cyBhcmUgcGFja2VkCisJbmV2ZXJ0aGVsZXNzLgorCistLWZpbHRlcj08ZmlsdGVyLXNwZWM+OjoKKwlSZXF1aXJlcyBgLS1zdGRvdXRgLiAgT21pdHMgY2VydGFpbiBvYmplY3RzICh1c3VhbGx5IGJsb2JzKSBmcm9tCisJdGhlIHJlc3VsdGluZyBwYWNrZmlsZS4gIFNlZSBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSBmb3IgdmFsaWQKKwlgPGZpbHRlci1zcGVjPmAgZm9ybXMuCisKKy0tbm8tZmlsdGVyOjoKKwlUdXJucyBvZmYgYW55IHByZXZpb3VzIGAtLWZpbHRlcj1gIGFyZ3VtZW50LgorCistLW1pc3Npbmc9PG1pc3NpbmctYWN0aW9uPjo6CisJQSBkZWJ1ZyBvcHRpb24gdG8gaGVscCB3aXRoIGZ1dHVyZSAicGFydGlhbCBjbG9uZSIgZGV2ZWxvcG1lbnQuCisJVGhpcyBvcHRpb24gc3BlY2lmaWVzIGhvdyBtaXNzaW5nIG9iamVjdHMgYXJlIGhhbmRsZWQuCisrCitUaGUgZm9ybSAnLS1taXNzaW5nPWVycm9yJyByZXF1ZXN0cyB0aGF0IHBhY2stb2JqZWN0cyBzdG9wIHdpdGggYW4gZXJyb3IgaWYKK2EgbWlzc2luZyBvYmplY3QgaXMgZW5jb3VudGVyZWQuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGFjdGlvbi4KKysKK1RoZSBmb3JtICctLW1pc3Npbmc9YWxsb3ctYW55JyB3aWxsIGFsbG93IG9iamVjdCB0cmF2ZXJzYWwgdG8gY29udGludWUKK2lmIGEgbWlzc2luZyBvYmplY3QgaXMgZW5jb3VudGVyZWQuICBNaXNzaW5nIG9iamVjdHMgd2lsbCBzaWxlbnRseSBiZQorb21pdHRlZCBmcm9tIHRoZSByZXN1bHRzLgorKworVGhlIGZvcm0gJy0tbWlzc2luZz1hbGxvdy1wcm9taXNvcicgaXMgbGlrZSAnYWxsb3ctYW55JywgYnV0IHdpbGwgb25seQorYWxsb3cgb2JqZWN0IHRyYXZlcnNhbCB0byBjb250aW51ZSBmb3IgRVhQRUNURUQgcHJvbWlzb3IgbWlzc2luZyBvYmplY3RzLgorVW5leHBlY3RlZCBtaXNzaW5nIG9iamVjdCB3aWxsIHJhaXNlIGFuIGVycm9yLgorCistLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0czo6CisJT21pdCBvYmplY3RzIHRoYXQgYXJlIGtub3duIHRvIGJlIGluIHRoZSBwcm9taXNvciByZW1vdGUuICAoVGhpcworCW9wdGlvbiBoYXMgdGhlIHB1cnBvc2Ugb2Ygb3BlcmF0aW5nIG9ubHkgb24gbG9jYWxseSBjcmVhdGVkIG9iamVjdHMsCisJc28gdGhhdCB3aGVuIHdlIHJlcGFjaywgd2Ugc3RpbGwgbWFpbnRhaW4gYSBkaXN0aW5jdGlvbiBiZXR3ZWVuCisJbG9jYWxseSBjcmVhdGVkIG9iamVjdHMgW3dpdGhvdXQgLnByb21pc29yXSBhbmQgb2JqZWN0cyBmcm9tIHRoZQorCXByb21pc29yIHJlbW90ZSBbd2l0aCAucHJvbWlzb3JdLikgIFRoaXMgaXMgdXNlZCB3aXRoIHBhcnRpYWwgY2xvbmUuCisKKy0ta2VlcC11bnJlYWNoYWJsZTo6CisJT2JqZWN0cyB1bnJlYWNoYWJsZSBmcm9tIHRoZSByZWZzIGluIHBhY2tzIG5hbWVkIHdpdGgKKwktLXVucGFja2VkPSBvcHRpb24gYXJlIGFkZGVkIHRvIHRoZSByZXN1bHRpbmcgcGFjaywgaW4KKwlhZGRpdGlvbiB0byB0aGUgcmVhY2hhYmxlIG9iamVjdHMgdGhhdCBhcmUgbm90IGluIHBhY2tzIG1hcmtlZAorCXdpdGggKi5rZWVwIGZpbGVzLiBUaGlzIGltcGxpZXMgYC0tcmV2c2AuCisKKy0tcGFjay1sb29zZS11bnJlYWNoYWJsZTo6CisJUGFjayB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzIChhbmQgdGhlaXIgbG9vc2UgY291bnRlcnBhcnRzCisJcmVtb3ZlZCkuIFRoaXMgaW1wbGllcyBgLS1yZXZzYC4KKworLS11bnBhY2stdW5yZWFjaGFibGU6OgorCUtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyBpbiBsb29zZSBmb3JtLiBUaGlzIGltcGxpZXMgYC0tcmV2c2AuCisKKy0tZGVsdGEtaXNsYW5kczo6CisJUmVzdHJpY3QgZGVsdGEgbWF0Y2hlcyBiYXNlZCBvbiAiaXNsYW5kcyIuIFNlZSBERUxUQSBJU0xBTkRTCisJYmVsb3cuCisKKworREVMVEEgSVNMQU5EUworLS0tLS0tLS0tLS0tLQorCitXaGVuIHBvc3NpYmxlLCBgcGFjay1vYmplY3RzYCB0cmllcyB0byByZXVzZSBleGlzdGluZyBvbi1kaXNrIGRlbHRhcyB0bworYXZvaWQgaGF2aW5nIHRvIHNlYXJjaCBmb3IgbmV3IG9uZXMgb24gdGhlIGZseS4gVGhpcyBpcyBhbiBpbXBvcnRhbnQKK29wdGltaXphdGlvbiBmb3Igc2VydmluZyBmZXRjaGVzLCBiZWNhdXNlIGl0IG1lYW5zIHRoZSBzZXJ2ZXIgY2FuIGF2b2lkCitpbmZsYXRpbmcgbW9zdCBvYmplY3RzIGF0IGFsbCBhbmQganVzdCBzZW5kIHRoZSBieXRlcyBkaXJlY3RseSBmcm9tCitkaXNrLiBUaGlzIG9wdGltaXphdGlvbiBjYW4ndCB3b3JrIHdoZW4gYW4gb2JqZWN0IGlzIHN0b3JlZCBhcyBhIGRlbHRhCithZ2FpbnN0IGEgYmFzZSB3aGljaCB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgaGF2ZSAoYW5kIHdoaWNoIHdlIGFyZSBub3QKK2FscmVhZHkgc2VuZGluZykuIEluIHRoYXQgY2FzZSB0aGUgc2VydmVyICJicmVha3MiIHRoZSBkZWx0YSBhbmQgaGFzIHRvCitmaW5kIGEgbmV3IG9uZSwgd2hpY2ggaGFzIGEgaGlnaCBDUFUgY29zdC4gVGhlcmVmb3JlIGl0J3MgaW1wb3J0YW50IGZvcgorcGVyZm9ybWFuY2UgdGhhdCB0aGUgc2V0IG9mIG9iamVjdHMgaW4gb24tZGlzayBkZWx0YSByZWxhdGlvbnNoaXBzIG1hdGNoCit3aGF0IGEgY2xpZW50IHdvdWxkIGZldGNoLgorCitJbiBhIG5vcm1hbCByZXBvc2l0b3J5LCB0aGlzIHRlbmRzIHRvIHdvcmsgYXV0b21hdGljYWxseS4gVGhlIG9iamVjdHMKK2FyZSBtb3N0bHkgcmVhY2hhYmxlIGZyb20gdGhlIGJyYW5jaGVzIGFuZCB0YWdzLCBhbmQgdGhhdCdzIHdoYXQgY2xpZW50cworZmV0Y2guIEFueSBkZWx0YXMgd2UgZmluZCBvbiB0aGUgc2VydmVyIGFyZSBsaWtlbHkgdG8gYmUgYmV0d2VlbiBvYmplY3RzCit0aGUgY2xpZW50IGhhcyBvciB3aWxsIGhhdmUuCisKK0J1dCBpbiBzb21lIHJlcG9zaXRvcnkgc2V0dXBzLCB5b3UgbWF5IGhhdmUgc2V2ZXJhbCByZWxhdGVkIGJ1dCBzZXBhcmF0ZQorZ3JvdXBzIG9mIHJlZiB0aXBzLCB3aXRoIGNsaWVudHMgdGVuZGluZyB0byBmZXRjaCB0aG9zZSBncm91cHMKK2luZGVwZW5kZW50bHkuIEZvciBleGFtcGxlLCBpbWFnaW5lIHRoYXQgeW91IGFyZSBob3N0aW5nIHNldmVyYWwgImZvcmtzIgorb2YgYSByZXBvc2l0b3J5IGluIGEgc2luZ2xlIHNoYXJlZCBvYmplY3Qgc3RvcmUsIGFuZCBsZXR0aW5nIGNsaWVudHMKK3ZpZXcgdGhlbSBhcyBzZXBhcmF0ZSByZXBvc2l0b3JpZXMgdGhyb3VnaCBgR0lUX05BTUVTUEFDRWAgb3Igc2VwYXJhdGUKK3JlcG9zIHVzaW5nIHRoZSBhbHRlcm5hdGVzIG1lY2hhbmlzbS4gQSBuYWl2ZSByZXBhY2sgbWF5IGZpbmQgdGhhdCB0aGUKK29wdGltYWwgZGVsdGEgZm9yIGFuIG9iamVjdCBpcyBhZ2FpbnN0IGEgYmFzZSB0aGF0IGlzIG9ubHkgZm91bmQgaW4KK2Fub3RoZXIgZm9yay4gQnV0IHdoZW4gYSBjbGllbnQgZmV0Y2hlcywgdGhleSB3aWxsIG5vdCBoYXZlIHRoZSBiYXNlCitvYmplY3QsIGFuZCB3ZSdsbCBoYXZlIHRvIGZpbmQgYSBuZXcgZGVsdGEgb24gdGhlIGZseS4KKworQSBzaW1pbGFyIHNpdHVhdGlvbiBtYXkgZXhpc3QgaWYgeW91IGhhdmUgbWFueSByZWZzIG91dHNpZGUgb2YKK2ByZWZzL2hlYWRzL2AgYW5kIGByZWZzL3RhZ3MvYCB0aGF0IHBvaW50IHRvIHJlbGF0ZWQgb2JqZWN0cyAoZS5nLiwKK2ByZWZzL3B1bGxgIG9yIGByZWZzL2NoYW5nZXNgIHVzZWQgYnkgc29tZSBob3N0aW5nIHByb3ZpZGVycykuIEJ5CitkZWZhdWx0LCBjbGllbnRzIGZldGNoIG9ubHkgaGVhZHMgYW5kIHRhZ3MsIGFuZCBkZWx0YXMgYWdhaW5zdCBvYmplY3RzCitmb3VuZCBvbmx5IGluIHRob3NlIG90aGVyIGdyb3VwcyBjYW5ub3QgYmUgc2VudCBhcy1pcy4KKworRGVsdGEgaXNsYW5kcyBzb2x2ZSB0aGlzIHByb2JsZW0gYnkgYWxsb3dpbmcgeW91IHRvIGdyb3VwIHlvdXIgcmVmcyBpbnRvCitkaXN0aW5jdCAiaXNsYW5kcyIuIFBhY2stb2JqZWN0cyBjb21wdXRlcyB3aGljaCBvYmplY3RzIGFyZSByZWFjaGFibGUKK2Zyb20gd2hpY2ggaXNsYW5kcywgYW5kIHJlZnVzZXMgdG8gbWFrZSBhIGRlbHRhIGZyb20gYW4gb2JqZWN0IGBBYAorYWdhaW5zdCBhIGJhc2Ugd2hpY2ggaXMgbm90IHByZXNlbnQgaW4gYWxsIG9mIGBBYCdzIGlzbGFuZHMuIFRoaXMKK3Jlc3VsdHMgaW4gc2xpZ2h0bHkgbGFyZ2VyIHBhY2tzIChiZWNhdXNlIHdlIG1pc3Mgc29tZSBkZWx0YQorb3Bwb3J0dW5pdGllcyksIGJ1dCBndWFyYW50ZWVzIHRoYXQgYSBmZXRjaCBvZiBvbmUgaXNsYW5kIHdpbGwgbm90IGhhdmUKK3RvIHJlY29tcHV0ZSBkZWx0YXMgb24gdGhlIGZseSBkdWUgdG8gY3Jvc3NpbmcgaXNsYW5kIGJvdW5kYXJpZXMuCisKK1doZW4gcmVwYWNraW5nIHdpdGggZGVsdGEgaXNsYW5kcyB0aGUgZGVsdGEgd2luZG93IHRlbmRzIHRvIGdldAorY2xvZ2dlZCB3aXRoIGNhbmRpZGF0ZXMgdGhhdCBhcmUgZm9yYmlkZGVuIGJ5IHRoZSBjb25maWcuIFJlcGFja2luZword2l0aCBhIGJpZyAtLXdpbmRvdyBoZWxwcyAoYW5kIGRvZXNuJ3QgdGFrZSBhcyBsb25nIGFzIGl0IG90aGVyd2lzZQorbWlnaHQgYmVjYXVzZSB3ZSBjYW4gcmVqZWN0IHNvbWUgb2JqZWN0IHBhaXJzIGJhc2VkIG9uIGlzbGFuZHMgYmVmb3JlCitkb2luZyBhbnkgY29tcHV0YXRpb24gb24gdGhlIGNvbnRlbnQpLgorCitJc2xhbmRzIGFyZSBjb25maWd1cmVkIHZpYSB0aGUgYHBhY2suaXNsYW5kYCBvcHRpb24sIHdoaWNoIGNhbiBiZQorc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLiBFYWNoIHZhbHVlIGlzIGEgbGVmdC1hbmNob3JlZCByZWd1bGFyCitleHByZXNzaW9ucyBtYXRjaGluZyByZWZuYW1lcy4gRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1twYWNrXQoraXNsYW5kID0gcmVmcy9oZWFkcy8KK2lzbGFuZCA9IHJlZnMvdGFncy8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcHV0cyBoZWFkcyBhbmQgdGFncyBpbnRvIGFuIGlzbGFuZCAod2hvc2UgbmFtZSBpcyB0aGUgZW1wdHkgc3RyaW5nOyBzZWUKK2JlbG93IGZvciBtb3JlIG9uIG5hbWluZykuIEFueSByZWZzIHdoaWNoIGRvIG5vdCBtYXRjaCB0aG9zZSByZWd1bGFyCitleHByZXNzaW9ucyAoZS5nLiwgYHJlZnMvcHVsbC8xMjNgKSBpcyBub3QgaW4gYW55IGlzbGFuZC4gQW55IG9iamVjdAord2hpY2ggaXMgcmVhY2hhYmxlIG9ubHkgZnJvbSBgcmVmcy9wdWxsL2AgKGJ1dCBub3QgaGVhZHMgb3IgdGFncykgaXMKK3RoZXJlZm9yZSBub3QgYSBjYW5kaWRhdGUgdG8gYmUgdXNlZCBhcyBhIGJhc2UgZm9yIGByZWZzL2hlYWRzL2AuCisKK1JlZnMgYXJlIGdyb3VwZWQgaW50byBpc2xhbmRzIGJhc2VkIG9uIHRoZWlyICJuYW1lcyIsIGFuZCB0d28gcmVnZXhlcwordGhhdCBwcm9kdWNlIHRoZSBzYW1lIG5hbWUgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW4gdGhlIHNhbWUKK2lzbGFuZC4gVGhlIG5hbWVzIGFyZSBjb21wdXRlZCBmcm9tIHRoZSByZWdleGVzIGJ5IGNvbmNhdGVuYXRpbmcgYW55CitjYXB0dXJlIGdyb3VwcyBmcm9tIHRoZSByZWdleCwgd2l0aCBhICctJyBkYXNoIGluIGJldHdlZW4uIChBbmQgaWYKK3RoZXJlIGFyZSBubyBjYXB0dXJlIGdyb3VwcywgdGhlbiB0aGUgbmFtZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCBhcyBpbgordGhlIGFib3ZlIGV4YW1wbGUuKSBUaGlzIGFsbG93cyB5b3UgdG8gY3JlYXRlIGFyYml0cmFyeSBudW1iZXJzIG9mCitpc2xhbmRzLiBPbmx5IHVwIHRvIDE0IHN1Y2ggY2FwdHVyZSBncm91cHMgYXJlIHN1cHBvcnRlZCB0aG91Z2guCisKK0ZvciBleGFtcGxlLCBpbWFnaW5lIHlvdSBzdG9yZSB0aGUgcmVmcyBmb3IgZWFjaCBmb3JrIGluCitgcmVmcy92aXJ0dWFsL0lEYCwgd2hlcmUgYElEYCBpcyBhIG51bWVyaWMgaWRlbnRpZmllci4gWW91IG1pZ2h0IHRoZW4KK2NvbmZpZ3VyZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW3BhY2tdCitpc2xhbmQgPSByZWZzL3ZpcnR1YWwvKFswLTldKykvaGVhZHMvCitpc2xhbmQgPSByZWZzL3ZpcnR1YWwvKFswLTldKykvdGFncy8KK2lzbGFuZCA9IHJlZnMvdmlydHVhbC8oWzAtOV0rKS8ocHVsbCkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoYXQgcHV0cyB0aGUgaGVhZHMgYW5kIHRhZ3MgZm9yIGVhY2ggZm9yayBpbiB0aGVpciBvd24gaXNsYW5kIChuYW1lZAorIjEyMzQiIG9yIHNpbWlsYXIpLCBhbmQgdGhlIHB1bGwgcmVmcyBmb3IgZWFjaCBnbyBpbnRvIHRoZWlyIG93bgorIjEyMzQtcHVsbCIuCisKK05vdGUgdGhhdCB3ZSBwaWNrIGEgc2luZ2xlIGlzbGFuZCBmb3IgZWFjaCByZWdleCB0byBnbyBpbnRvLCB1c2luZyAibGFzdAorb25lIHdpbnMiIG9yZGVyaW5nICh3aGljaCBhbGxvd3MgcmVwby1zcGVjaWZpYyBjb25maWcgdG8gdGFrZSBwcmVjZWRlbmNlCitvdmVyIHVzZXItd2lkZSBjb25maWcsIGFuZCBzbyBmb3J0aCkuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0KK2xpbmtnaXQ6Z2l0LXJlcGFja1sxXQorbGlua2dpdDpnaXQtcHJ1bmUtcGFja2VkWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWR1bmRhbnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWR1bmRhbnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODY5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZHVuZGFudC50eHQKQEAgLTAsMCArMSw1MCBAQAorZ2l0LXBhY2stcmVkdW5kYW50KDEpCis9PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXBhY2stcmVkdW5kYW50IC0gRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBwYWNrLXJlZHVuZGFudCcgWyAtLXZlcmJvc2UgXSBbIC0tYWx0LW9kYiBdIDwgLS1hbGwgfCAucGFjayBmaWxlbmFtZSAuLi4gPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgcHJvZ3JhbSBjb21wdXRlcyB3aGljaCBwYWNrcyBpbiB5b3VyIHJlcG9zaXRvcnkKK2FyZSByZWR1bmRhbnQuIFRoZSBvdXRwdXQgaXMgc3VpdGFibGUgZm9yIHBpcGluZyB0bworYHhhcmdzIHJtYCBpZiB5b3UgYXJlIGluIHRoZSByb290IG9mIHRoZSByZXBvc2l0b3J5LgorCisnZ2l0IHBhY2stcmVkdW5kYW50JyBhY2NlcHRzIGEgbGlzdCBvZiBvYmplY3RzIG9uIHN0YW5kYXJkIGlucHV0LiBBbnkgb2JqZWN0cworZ2l2ZW4gd2lsbCBiZSBpZ25vcmVkIHdoZW4gY2hlY2tpbmcgd2hpY2ggcGFja3MgYXJlIHJlcXVpcmVkLiBUaGlzIG1ha2VzIHRoZQorZm9sbG93aW5nIGNvbW1hbmQgdXNlZnVsIHdoZW4gd2FudGluZyB0byByZW1vdmUgcGFja3Mgd2hpY2ggY29udGFpbiB1bnJlYWNoYWJsZQorb2JqZWN0cy4KKworZ2l0IGZzY2sgLS1mdWxsIC0tdW5yZWFjaGFibGUgfCBjdXQgLWQgJyAnIC1mMyB8IFwKK2dpdCBwYWNrLXJlZHVuZGFudCAtLWFsbCB8IHhhcmdzIHJtCisKK09QVElPTlMKKy0tLS0tLS0KKworCistLWFsbDo6CisJUHJvY2Vzc2VzIGFsbCBwYWNrcy4gQW55IGZpbGVuYW1lcyBvbiB0aGUgY29tbWFuZCBsaW5lIGFyZSBpZ25vcmVkLgorCistLWFsdC1vZGI6OgorCURvbid0IHJlcXVpcmUgb2JqZWN0cyBwcmVzZW50IGluIHBhY2tzIGZyb20gYWx0ZXJuYXRlIG9iamVjdAorCWRpcmVjdG9yaWVzIHRvIGJlIHByZXNlbnQgaW4gbG9jYWwgcGFja3MuCisKKy0tdmVyYm9zZTo6CisJT3V0cHV0cyBzb21lIHN0YXRpc3RpY3MgdG8gc3RkZXJyLiBIYXMgYSBzbWFsbCBwZXJmb3JtYW5jZSBwZW5hbHR5LgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXQorbGlua2dpdDpnaXQtcmVwYWNrWzFdCitsaW5rZ2l0OmdpdC1wcnVuZS1wYWNrZWRbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTQwODFmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWZzLnR4dApAQCAtMCwwICsxLDczIEBACitnaXQtcGFjay1yZWZzKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1wYWNrLXJlZnMgLSBQYWNrIGhlYWRzIGFuZCB0YWdzIGZvciBlZmZpY2llbnQgcmVwb3NpdG9yeSBhY2Nlc3MKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHBhY2stcmVmcycgWy0tYWxsXSBbLS1uby1wcnVuZV0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RyYWRpdGlvbmFsbHksIHRpcHMgb2YgYnJhbmNoZXMgYW5kIHRhZ3MgKGNvbGxlY3RpdmVseSBrbm93biBhcworJ3JlZnMnKSB3ZXJlIHN0b3JlZCBvbmUgZmlsZSBwZXIgcmVmIGluIGEgKHN1YilkaXJlY3RvcnkKK3VuZGVyIGAkR0lUX0RJUi9yZWZzYAorZGlyZWN0b3J5LiAgV2hpbGUgbWFueSBicmFuY2ggdGlwcyB0ZW5kIHRvIGJlIHVwZGF0ZWQgb2Z0ZW4sCittb3N0IHRhZ3MgYW5kIHNvbWUgYnJhbmNoIHRpcHMgYXJlIG5ldmVyIHVwZGF0ZWQuICBXaGVuIGEKK3JlcG9zaXRvcnkgaGFzIGh1bmRyZWRzIG9yIHRob3VzYW5kcyBvZiB0YWdzLCB0aGlzCitvbmUtZmlsZS1wZXItcmVmIGZvcm1hdCBib3RoIHdhc3RlcyBzdG9yYWdlIGFuZCBodXJ0cworcGVyZm9ybWFuY2UuCisKK1RoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHNvbHZlIHRoZSBzdG9yYWdlIGFuZCBwZXJmb3JtYW5jZQorcHJvYmxlbSBieSBzdG9yaW5nIHRoZSByZWZzIGluIGEgc2luZ2xlIGZpbGUsCitgJEdJVF9ESVIvcGFja2VkLXJlZnNgLiAgV2hlbiBhIHJlZiBpcyBtaXNzaW5nIGZyb20gdGhlCit0cmFkaXRpb25hbCBgJEdJVF9ESVIvcmVmc2AgZGlyZWN0b3J5IGhpZXJhcmNoeSwgaXQgaXMgbG9va2VkCit1cCBpbiB0aGlzCitmaWxlIGFuZCB1c2VkIGlmIGZvdW5kLgorCitTdWJzZXF1ZW50IHVwZGF0ZXMgdG8gYnJhbmNoZXMgYWx3YXlzIGNyZWF0ZSBuZXcgZmlsZXMgdW5kZXIKK2AkR0lUX0RJUi9yZWZzYCBkaXJlY3RvcnkgaGllcmFyY2h5LgorCitBIHJlY29tbWVuZGVkIHByYWN0aWNlIHRvIGRlYWwgd2l0aCBhIHJlcG9zaXRvcnkgd2l0aCB0b28gbWFueQorcmVmcyBpcyB0byBwYWNrIGl0cyByZWZzIHdpdGggYC0tYWxsYCBvbmNlLCBhbmQKK29jY2FzaW9uYWxseSBydW4gYGdpdCBwYWNrLXJlZnNgLiAgVGFncyBhcmUgYnkKK2RlZmluaXRpb24gc3RhdGlvbmFyeSBhbmQgYXJlIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UuICBCcmFuY2gKK2hlYWRzIHdpbGwgYmUgcGFja2VkIHdpdGggdGhlIGluaXRpYWwgYHBhY2stcmVmcyAtLWFsbGAsIGJ1dAorb25seSB0aGUgY3VycmVudGx5IGFjdGl2ZSBicmFuY2ggaGVhZHMgd2lsbCBiZWNvbWUgdW5wYWNrZWQsCithbmQgdGhlIG5leHQgYHBhY2stcmVmc2AgKHdpdGhvdXQgYC0tYWxsYCkgd2lsbCBsZWF2ZSB0aGVtCit1bnBhY2tlZC4KKworCitPUFRJT05TCistLS0tLS0tCisKKy0tYWxsOjoKKworVGhlIGNvbW1hbmQgYnkgZGVmYXVsdCBwYWNrcyBhbGwgdGFncyBhbmQgcmVmcyB0aGF0IGFyZSBhbHJlYWR5CitwYWNrZWQsIGFuZCBsZWF2ZXMgb3RoZXIgcmVmcworYWxvbmUuICBUaGlzIGlzIGJlY2F1c2UgYnJhbmNoZXMgYXJlIGV4cGVjdGVkIHRvIGJlIGFjdGl2ZWx5CitkZXZlbG9wZWQgYW5kIHBhY2tpbmcgdGhlaXIgdGlwcyBkb2VzIG5vdCBoZWxwIHBlcmZvcm1hbmNlLgorVGhpcyBvcHRpb24gY2F1c2VzIGJyYW5jaCB0aXBzIHRvIGJlIHBhY2tlZCBhcyB3ZWxsLiAgVXNlZnVsIGZvcgorYSByZXBvc2l0b3J5IHdpdGggbWFueSBicmFuY2hlcyBvZiBoaXN0b3JpY2FsIGludGVyZXN0cy4KKworLS1uby1wcnVuZTo6CisKK1RoZSBjb21tYW5kIHVzdWFsbHkgcmVtb3ZlcyBsb29zZSByZWZzIHVuZGVyIGAkR0lUX0RJUi9yZWZzYAoraGllcmFyY2h5IGFmdGVyIHBhY2tpbmcgdGhlbS4gIFRoaXMgb3B0aW9uIHRlbGxzIGl0IG5vdCB0by4KKworCitCVUdTCistLS0tCisKK09sZGVyIGRvY3VtZW50YXRpb24gd3JpdHRlbiBiZWZvcmUgdGhlIHBhY2tlZC1yZWZzIG1lY2hhbmlzbSB3YXMKK2ludHJvZHVjZWQgbWF5IHN0aWxsIHNheSB0aGluZ3MgbGlrZSAiLmdpdC9yZWZzL2hlYWRzLzxicmFuY2g+IGZpbGUKK2V4aXN0cyIgd2hlbiBpdCBtZWFucyAiYnJhbmNoIDxicmFuY2g+IGV4aXN0cyIuCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYXJzZS1yZW1vdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFyc2UtcmVtb3RlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDVlYTFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGFyc2UtcmVtb3RlLnR4dApAQCAtMCwwICsxLDIzIEBACitnaXQtcGFyc2UtcmVtb3RlKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1wYXJzZS1yZW1vdGUgLSBSb3V0aW5lcyB0byBoZWxwIHBhcnNpbmcgcmVtb3RlIHJlcG9zaXRvcnkgYWNjZXNzIHBhcmFtZXRlcnMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKycuICIkKGdpdCAtLWV4ZWMtcGF0aCkvZ2l0LXBhcnNlLXJlbW90ZSInCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBzY3JpcHQgaXMgaW5jbHVkZWQgaW4gdmFyaW91cyBzY3JpcHRzIHRvIHN1cHBseQorcm91dGluZXMgdG8gcGFyc2UgZmlsZXMgdW5kZXIgJEdJVF9ESVIvcmVtb3Rlcy8gYW5kCiskR0lUX0RJUi9icmFuY2hlcy8gYW5kIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgYXJlIHJlbGF0ZWQKK3RvIGZldGNoaW5nLCBwdWxsaW5nIGFuZCBwdXNoaW5nLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBhdGNoLWlkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBhdGNoLWlkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDJjYWZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGF0Y2gtaWQudHh0CkBAIC0wLDAgKzEsNjEgQEAKK2dpdC1wYXRjaC1pZCgxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1wYXRjaC1pZCAtIENvbXB1dGUgdW5pcXVlIElEIGZvciBhIHBhdGNoCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBwYXRjaC1pZCcgWy0tc3RhYmxlIHwgLS11bnN0YWJsZV0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkIGEgcGF0Y2ggZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgYW5kIGNvbXB1dGUgdGhlIHBhdGNoIElEIGZvciBpdC4KKworQSAicGF0Y2ggSUQiIGlzIG5vdGhpbmcgYnV0IGEgc3VtIG9mIFNIQS0xIG9mIHRoZSBmaWxlIGRpZmZzIGFzc29jaWF0ZWQgd2l0aCBhCitwYXRjaCwgd2l0aCB3aGl0ZXNwYWNlIGFuZCBsaW5lIG51bWJlcnMgaWdub3JlZC4gIEFzIHN1Y2gsIGl0J3MgInJlYXNvbmFibHkKK3N0YWJsZSIsIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIGFsc28gcmVhc29uYWJseSB1bmlxdWUsIGkuZS4sIHR3byBwYXRjaGVzIHRoYXQKK2hhdmUgdGhlIHNhbWUgInBhdGNoIElEIiBhcmUgYWxtb3N0IGd1YXJhbnRlZWQgdG8gYmUgdGhlIHNhbWUgdGhpbmcuCisKK0lPVywgeW91IGNhbiB1c2UgdGhpcyB0aGluZyB0byBsb29rIGZvciBsaWtlbHkgZHVwbGljYXRlIGNvbW1pdHMuCisKK1doZW4gZGVhbGluZyB3aXRoICdnaXQgZGlmZi10cmVlJyBvdXRwdXQsIGl0IHRha2VzIGFkdmFudGFnZSBvZgordGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggaXMgcHJlZml4ZWQgd2l0aCB0aGUgb2JqZWN0IG5hbWUgb2YgdGhlCitjb21taXQsIGFuZCBvdXRwdXRzIHR3byA0MC1ieXRlIGhleGFkZWNpbWFsIHN0cmluZ3MuICBUaGUgZmlyc3QKK3N0cmluZyBpcyB0aGUgcGF0Y2ggSUQsIGFuZCB0aGUgc2Vjb25kIHN0cmluZyBpcyB0aGUgY29tbWl0IElELgorVGhpcyBjYW4gYmUgdXNlZCB0byBtYWtlIGEgbWFwcGluZyBmcm9tIHBhdGNoIElEIHRvIGNvbW1pdCBJRC4KKworT1BUSU9OUworLS0tLS0tLQorCistLXN0YWJsZTo6CisJVXNlIGEgInN0YWJsZSIgc3VtIG9mIGhhc2hlcyBhcyB0aGUgcGF0Y2ggSUQuIFdpdGggdGhpcyBvcHRpb246CisJIC0gUmVvcmRlcmluZyBmaWxlIGRpZmZzIHRoYXQgbWFrZSB1cCBhIHBhdGNoIGRvZXMgbm90IGFmZmVjdCB0aGUgSUQuCisJICAgSW4gcGFydGljdWxhciwgdHdvIHBhdGNoZXMgcHJvZHVjZWQgYnkgY29tcGFyaW5nIHRoZSBzYW1lIHR3byB0cmVlcworCSAgIHdpdGggdHdvIGRpZmZlcmVudCBzZXR0aW5ncyBmb3IgIi1PPG9yZGVyZmlsZT4iIHJlc3VsdCBpbiB0aGUgc2FtZQorCSAgIHBhdGNoIElEIHNpZ25hdHVyZSwgdGhlcmVieSBhbGxvd2luZyB0aGUgY29tcHV0ZWQgcmVzdWx0IHRvIGJlIHVzZWQKKwkgICBhcyBhIGtleSB0byBpbmRleCBzb21lIG1ldGEtaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYW5nZSBiZXR3ZWVuCisJICAgdGhlIHR3byB0cmVlczsKKworCSAtIFJlc3VsdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgdmFsdWUgcHJvZHVjZWQgYnkgZ2l0IDEuOSBhbmQgb2xkZXIKKwkgICBvciBwcm9kdWNlZCB3aGVuIGFuICJ1bnN0YWJsZSIgaGFzaCAoc2VlIC0tdW5zdGFibGUgYmVsb3cpIGlzCisJICAgY29uZmlndXJlZCAtIGV2ZW4gd2hlbiB1c2VkIG9uIGEgZGlmZiBvdXRwdXQgdGFrZW4gd2l0aG91dCBhbnkgdXNlCisJICAgb2YgIi1PPG9yZGVyZmlsZT4iLCB0aGVyZWJ5IG1ha2luZyBleGlzdGluZyBkYXRhYmFzZXMgc3RvcmluZyBzdWNoCisJICAgInVuc3RhYmxlIiBvciBoaXN0b3JpY2FsIHBhdGNoLWlkcyB1bnVzYWJsZS4KKworCVRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgcGF0Y2hpZC5zdGFibGUgaXMgc2V0IHRvIHRydWUuCisKKy0tdW5zdGFibGU6OgorCVVzZSBhbiAidW5zdGFibGUiIGhhc2ggYXMgdGhlIHBhdGNoIElELiBXaXRoIHRoaXMgb3B0aW9uLAorCXRoZSByZXN1bHQgcHJvZHVjZWQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBwYXRjaC1pZCB2YWx1ZSBwcm9kdWNlZAorCWJ5IGdpdCAxLjkgYW5kIG9sZGVyLiAgVXNlcnMgd2l0aCBwcmUtZXhpc3RpbmcgZGF0YWJhc2VzIHN0b3JpbmcKKwlwYXRjaC1pZHMgcHJvZHVjZWQgYnkgZ2l0IDEuOSBhbmQgb2xkZXIgKHdobyBkbyBub3QgZGVhbCB3aXRoIHJlb3JkZXJlZAorCXBhdGNoZXMpIG1heSB3YW50IHRvIHVzZSB0aGlzIG9wdGlvbi4KKworCVRoaXMgaXMgdGhlIGRlZmF1bHQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUtcGFja2VkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLXBhY2tlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlZDU5YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLXBhY2tlZC50eHQKQEAgLTAsMCArMSw0NyBAQAorZ2l0LXBydW5lLXBhY2tlZCgxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcHJ1bmUtcGFja2VkIC0gUmVtb3ZlIGV4dHJhIG9iamVjdHMgdGhhdCBhcmUgYWxyZWFkeSBpbiBwYWNrIGZpbGVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHBydW5lLXBhY2tlZCcgWy1ufC0tZHJ5LXJ1bl0gWy1xfC0tcXVpZXRdCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIHByb2dyYW0gc2VhcmNoZXMgdGhlIGAkR0lUX09CSkVDVF9ESVJFQ1RPUllgIGZvciBhbGwgb2JqZWN0cyB0aGF0IGN1cnJlbnRseQorZXhpc3QgaW4gYSBwYWNrIGZpbGUgYXMgd2VsbCBhcyB0aGUgaW5kZXBlbmRlbnQgb2JqZWN0IGRpcmVjdG9yaWVzLgorCitBbGwgc3VjaCBleHRyYSBvYmplY3RzIGFyZSByZW1vdmVkLgorCitBIHBhY2sgaXMgYSBjb2xsZWN0aW9uIG9mIG9iamVjdHMsIGluZGl2aWR1YWxseSBjb21wcmVzc2VkLCB3aXRoIGRlbHRhCitjb21wcmVzc2lvbiBhcHBsaWVkLCBzdG9yZWQgaW4gYSBzaW5nbGUgZmlsZSwgd2l0aCBhbiBhc3NvY2lhdGVkIGluZGV4IGZpbGUuCisKK1BhY2tzIGFyZSB1c2VkIHRvIHJlZHVjZSB0aGUgbG9hZCBvbiBtaXJyb3Igc3lzdGVtcywgYmFja3VwIGVuZ2luZXMsCitkaXNrIHN0b3JhZ2UsIGV0Yy4KKworCitPUFRJT05TCistLS0tLS0tCistbjo6CistLWRyeS1ydW46OgorICAgICAgICBEb24ndCBhY3R1YWxseSByZW1vdmUgYW55IG9iamVjdHMsIG9ubHkgc2hvdyB0aG9zZSB0aGF0IHdvdWxkIGhhdmUgYmVlbgorICAgICAgICByZW1vdmVkLgorCistcTo6CistLXF1aWV0OjoKKwlTcXVlbGNoIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdCitsaW5rZ2l0OmdpdC1yZXBhY2tbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM1NTJkZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLnR4dApAQCAtMCwwICsxLDg5IEBACitnaXQtcHJ1bmUoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcHJ1bmUgLSBQcnVuZSBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcHJ1bmUnIFstbl0gWy12XSBbLS1wcm9ncmVzc10gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworTk9URTogSW4gbW9zdCBjYXNlcywgdXNlcnMgc2hvdWxkIHJ1biAnZ2l0IGdjJywgd2hpY2ggY2FsbHMKKydnaXQgcHJ1bmUnLiBTZWUgdGhlIHNlY3Rpb24gIk5PVEVTIiwgYmVsb3cuCisKK1RoaXMgcnVucyAnZ2l0IGZzY2sgLS11bnJlYWNoYWJsZScgdXNpbmcgYWxsIHRoZSByZWZzCithdmFpbGFibGUgaW4gYHJlZnMvYCwgb3B0aW9uYWxseSB3aXRoIGFkZGl0aW9uYWwgc2V0IG9mCitvYmplY3RzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgcHJ1bmVzIGFsbCB1bnBhY2tlZAorb2JqZWN0cyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvZiB0aGVzZSBoZWFkIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlLgorSW4gYWRkaXRpb24sIGl0CitwcnVuZXMgdGhlIHVucGFja2VkIG9iamVjdHMgdGhhdCBhcmUgYWxzbyBmb3VuZCBpbiBwYWNrcyBieQorcnVubmluZyAnZ2l0IHBydW5lLXBhY2tlZCcuCitJdCBhbHNvIHJlbW92ZXMgZW50cmllcyBmcm9tIC5naXQvc2hhbGxvdyB0aGF0IGFyZSBub3QgcmVhY2hhYmxlIGJ5CithbnkgcmVmLgorCitOb3RlIHRoYXQgdW5yZWFjaGFibGUsIHBhY2tlZCBvYmplY3RzIHdpbGwgcmVtYWluLiAgSWYgdGhpcyBpcworbm90IGRlc2lyZWQsIHNlZSBsaW5rZ2l0OmdpdC1yZXBhY2tbMV0uCisKK09QVElPTlMKKy0tLS0tLS0KKworLW46OgorLS1kcnktcnVuOjoKKwlEbyBub3QgcmVtb3ZlIGFueXRoaW5nOyBqdXN0IHJlcG9ydCB3aGF0IGl0IHdvdWxkCisJcmVtb3ZlLgorCistdjo6CistLXZlcmJvc2U6OgorCVJlcG9ydCBhbGwgcmVtb3ZlZCBvYmplY3RzLgorCistLXByb2dyZXNzOjoKKwlTaG93IHByb2dyZXNzLgorCistLWV4cGlyZSA8dGltZT46OgorCU9ubHkgZXhwaXJlIGxvb3NlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4uCisKK1wtLTo6CisJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KKworPGhlYWQ+Li4uOjoKKwlJbiBhZGRpdGlvbiB0byBvYmplY3RzCisJcmVhY2hhYmxlIGZyb20gYW55IG9mIG91ciByZWZlcmVuY2VzLCBrZWVwIG9iamVjdHMKKwlyZWFjaGFibGUgZnJvbSBsaXN0ZWQgPGhlYWQ+cy4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1RvIHBydW5lIG9iamVjdHMgbm90IHVzZWQgYnkgeW91ciByZXBvc2l0b3J5IG9yIGFub3RoZXIgdGhhdAorYm9ycm93cyBmcm9tIHlvdXIgcmVwb3NpdG9yeSB2aWEgaXRzCitgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlc2A6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcHJ1bmUgJChjZCAuLi9hbm90aGVyICYmIGdpdCByZXYtcGFyc2UgLS1hbGwpCistLS0tLS0tLS0tLS0KKworTk9URVMKKy0tLS0tCisKK0luIG1vc3QgY2FzZXMsIHVzZXJzIHdpbGwgbm90IG5lZWQgdG8gY2FsbCAnZ2l0IHBydW5lJyBkaXJlY3RseSwgYnV0CitzaG91bGQgaW5zdGVhZCBjYWxsICdnaXQgZ2MnLCB3aGljaCBoYW5kbGVzIHBydW5pbmcgYWxvbmcgd2l0aAorbWFueSBvdGhlciBob3VzZWtlZXBpbmcgdGFza3MuCisKK0ZvciBhIGRlc2NyaXB0aW9uIG9mIHdoaWNoIG9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZm9yIHBydW5pbmcsIHNlZQorJ2dpdCBmc2NrJydzIC0tdW5yZWFjaGFibGUgb3B0aW9uLgorCitTRUUgQUxTTworLS0tLS0tLS0KKworbGlua2dpdDpnaXQtZnNja1sxXSwKK2xpbmtnaXQ6Z2l0LWdjWzFdLAorbGlua2dpdDpnaXQtcmVmbG9nWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdWxsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzNmYjY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcHVsbC50eHQKQEAgLTAsMCArMSwyNTUgQEAKK2dpdC1wdWxsKDEpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcHVsbCAtIEZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBwdWxsJyBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitJbmNvcnBvcmF0ZXMgY2hhbmdlcyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgaW50byB0aGUgY3VycmVudAorYnJhbmNoLiAgSW4gaXRzIGRlZmF1bHQgbW9kZSwgYGdpdCBwdWxsYCBpcyBzaG9ydGhhbmQgZm9yCitgZ2l0IGZldGNoYCBmb2xsb3dlZCBieSBgZ2l0IG1lcmdlIEZFVENIX0hFQURgLgorCitNb3JlIHByZWNpc2VseSwgJ2dpdCBwdWxsJyBydW5zICdnaXQgZmV0Y2gnIHdpdGggdGhlIGdpdmVuCitwYXJhbWV0ZXJzIGFuZCBjYWxscyAnZ2l0IG1lcmdlJyB0byBtZXJnZSB0aGUgcmV0cmlldmVkIGJyYW5jaAoraGVhZHMgaW50byB0aGUgY3VycmVudCBicmFuY2guCitXaXRoIGAtLXJlYmFzZWAsIGl0IHJ1bnMgJ2dpdCByZWJhc2UnIGluc3RlYWQgb2YgJ2dpdCBtZXJnZScuCisKKzxyZXBvc2l0b3J5PiBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYSByZW1vdGUgcmVwb3NpdG9yeSBhcworcGFzc2VkIHRvIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLiAgPHJlZnNwZWM+IGNhbiBuYW1lIGFuCithcmJpdHJhcnkgcmVtb3RlIHJlZiAoZm9yIGV4YW1wbGUsIHRoZSBuYW1lIG9mIGEgdGFnKSBvciBldmVuCithIGNvbGxlY3Rpb24gb2YgcmVmcyB3aXRoIGNvcnJlc3BvbmRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzCisoZS5nLiwgcmVmcy9oZWFkcy97YXN0ZXJpc2t9OnJlZnMvcmVtb3Rlcy9vcmlnaW4ve2FzdGVyaXNrfSksCitidXQgdXN1YWxseSBpdCBpcyB0aGUgbmFtZSBvZiBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCisKK0RlZmF1bHQgdmFsdWVzIGZvciA8cmVwb3NpdG9yeT4gYW5kIDxicmFuY2g+IGFyZSByZWFkIGZyb20gdGhlCisicmVtb3RlIiBhbmQgIm1lcmdlIiBjb25maWd1cmF0aW9uIGZvciB0aGUgY3VycmVudCBicmFuY2gKK2FzIHNldCBieSBsaW5rZ2l0OmdpdC1icmFuY2hbMV0gYC0tdHJhY2tgLgorCitBc3N1bWUgdGhlIGZvbGxvd2luZyBoaXN0b3J5IGV4aXN0cyBhbmQgdGhlIGN1cnJlbnQgYnJhbmNoIGlzCisiYG1hc3RlcmAiOgorCistLS0tLS0tLS0tLS0KKwkgIEEtLS1CLS0tQyBtYXN0ZXIgb24gb3JpZ2luCisJIC8KKyAgICBELS0tRS0tLUYtLS1HIG1hc3RlcgorCV4KKwlvcmlnaW4vbWFzdGVyIGluIHlvdXIgcmVwb3NpdG9yeQorLS0tLS0tLS0tLS0tCisKK1RoZW4gImBnaXQgcHVsbGAiIHdpbGwgZmV0Y2ggYW5kIHJlcGxheSB0aGUgY2hhbmdlcyBmcm9tIHRoZSByZW1vdGUKK2BtYXN0ZXJgIGJyYW5jaCBzaW5jZSBpdCBkaXZlcmdlZCBmcm9tIHRoZSBsb2NhbCBgbWFzdGVyYCAoaS5lLiwgYEVgKQordW50aWwgaXRzIGN1cnJlbnQgY29tbWl0IChgQ2ApIG9uIHRvcCBvZiBgbWFzdGVyYCBhbmQgcmVjb3JkIHRoZQorcmVzdWx0IGluIGEgbmV3IGNvbW1pdCBhbG9uZyB3aXRoIHRoZSBuYW1lcyBvZiB0aGUgdHdvIHBhcmVudCBjb21taXRzCithbmQgYSBsb2cgbWVzc2FnZSBmcm9tIHRoZSB1c2VyIGRlc2NyaWJpbmcgdGhlIGNoYW5nZXMuCisKKy0tLS0tLS0tLS0tLQorCSAgQS0tLUItLS1DIG9yaWdpbi9tYXN0ZXIKKwkgLyAgICAgICAgIFwKKyAgICBELS0tRS0tLUYtLS1HLS0tSCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitTZWUgbGlua2dpdDpnaXQtbWVyZ2VbMV0gZm9yIGRldGFpbHMsIGluY2x1ZGluZyBob3cgY29uZmxpY3RzCithcmUgcHJlc2VudGVkIGFuZCBoYW5kbGVkLgorCitJbiBHaXQgMS43LjAgb3IgbGF0ZXIsIHRvIGNhbmNlbCBhIGNvbmZsaWN0aW5nIG1lcmdlLCB1c2UKK2BnaXQgcmVzZXQgLS1tZXJnZWAuICAqV2FybmluZyo6IEluIG9sZGVyIHZlcnNpb25zIG9mIEdpdCwgcnVubmluZyAnZ2l0IHB1bGwnCit3aXRoIHVuY29tbWl0dGVkIGNoYW5nZXMgaXMgZGlzY291cmFnZWQ6IHdoaWxlIHBvc3NpYmxlLCBpdCBsZWF2ZXMgeW91CitpbiBhIHN0YXRlIHRoYXQgbWF5IGJlIGhhcmQgdG8gYmFjayBvdXQgb2YgaW4gdGhlIGNhc2Ugb2YgYSBjb25mbGljdC4KKworSWYgYW55IG9mIHRoZSByZW1vdGUgY2hhbmdlcyBvdmVybGFwIHdpdGggbG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywKK3RoZSBtZXJnZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2FuY2VsZWQgYW5kIHRoZSB3b3JrIHRyZWUgdW50b3VjaGVkLgorSXQgaXMgZ2VuZXJhbGx5IGJlc3QgdG8gZ2V0IGFueSBsb2NhbCBjaGFuZ2VzIGluIHdvcmtpbmcgb3JkZXIgYmVmb3JlCitwdWxsaW5nIG9yIHN0YXNoIHRoZW0gYXdheSB3aXRoIGxpbmtnaXQ6Z2l0LXN0YXNoWzFdLgorCitPUFRJT05TCistLS0tLS0tCisKKy1xOjoKKy0tcXVpZXQ6OgorCVRoaXMgaXMgcGFzc2VkIHRvIGJvdGggdW5kZXJseWluZyBnaXQtZmV0Y2ggdG8gc3F1ZWxjaCByZXBvcnRpbmcgb2YKKwlkdXJpbmcgdHJhbnNmZXIsIGFuZCB1bmRlcmx5aW5nIGdpdC1tZXJnZSB0byBzcXVlbGNoIG91dHB1dCBkdXJpbmcKKwltZXJnaW5nLgorCistdjo6CistLXZlcmJvc2U6OgorCVBhc3MgLS12ZXJib3NlIHRvIGdpdC1mZXRjaCBhbmQgZ2l0LW1lcmdlLgorCistLVtuby1dcmVjdXJzZS1zdWJtb2R1bGVzWz15ZXN8b24tZGVtYW5kfG5vXTo6CisJVGhpcyBvcHRpb24gY29udHJvbHMgaWYgbmV3IGNvbW1pdHMgb2YgcG9wdWxhdGVkIHN1Ym1vZHVsZXMgc2hvdWxkCisJYmUgZmV0Y2hlZCwgYW5kIGlmIHRoZSB3b3JraW5nIHRyZWVzIG9mIGFjdGl2ZSBzdWJtb2R1bGVzIHNob3VsZCBiZQorCXVwZGF0ZWQsIHRvbyAoc2VlIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLCBsaW5rZ2l0OmdpdC1jb25maWdbMV0gYW5kCisJbGlua2dpdDpnaXRtb2R1bGVzWzVdKS4KKysKK0lmIHRoZSBjaGVja291dCBpcyBkb25lIHZpYSByZWJhc2UsIGxvY2FsIHN1Ym1vZHVsZSBjb21taXRzIGFyZSByZWJhc2VkIGFzIHdlbGwuCisrCitJZiB0aGUgdXBkYXRlIGlzIGRvbmUgdmlhIG1lcmdlLCB0aGUgc3VibW9kdWxlIGNvbmZsaWN0cyBhcmUgcmVzb2x2ZWQgYW5kIGNoZWNrZWQgb3V0LgorCitPcHRpb25zIHJlbGF0ZWQgdG8gbWVyZ2luZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworOmdpdC1wdWxsOiAxCisKK2luY2x1ZGU6Om1lcmdlLW9wdGlvbnMudHh0W10KKworLXI6OgorLS1yZWJhc2VbPWZhbHNlfHRydWV8bWVyZ2VzfHByZXNlcnZlfGludGVyYWN0aXZlXTo6CisJV2hlbiB0cnVlLCByZWJhc2UgdGhlIGN1cnJlbnQgYnJhbmNoIG9uIHRvcCBvZiB0aGUgdXBzdHJlYW0KKwlicmFuY2ggYWZ0ZXIgZmV0Y2hpbmcuIElmIHRoZXJlIGlzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaAorCWNvcnJlc3BvbmRpbmcgdG8gdGhlIHVwc3RyZWFtIGJyYW5jaCBhbmQgdGhlIHVwc3RyZWFtIGJyYW5jaAorCXdhcyByZWJhc2VkIHNpbmNlIGxhc3QgZmV0Y2hlZCwgdGhlIHJlYmFzZSB1c2VzIHRoYXQgaW5mb3JtYXRpb24KKwl0byBhdm9pZCByZWJhc2luZyBub24tbG9jYWwgY2hhbmdlcy4KKysKK1doZW4gc2V0IHRvIGBtZXJnZXNgLCByZWJhc2UgdXNpbmcgYGdpdCByZWJhc2UgLS1yZWJhc2UtbWVyZ2VzYCBzbyB0aGF0Cit0aGUgbG9jYWwgbWVyZ2UgY29tbWl0cyBhcmUgaW5jbHVkZWQgaW4gdGhlIHJlYmFzZSAoc2VlCitsaW5rZ2l0OmdpdC1yZWJhc2VbMV0gZm9yIGRldGFpbHMpLgorKworV2hlbiBzZXQgdG8gYHByZXNlcnZlYCAoZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgbWVyZ2VzYCksIHJlYmFzZSB3aXRoIHRoZQorYC0tcHJlc2VydmUtbWVyZ2VzYCBvcHRpb24gcGFzc2VkIHRvIGBnaXQgcmViYXNlYCBzbyB0aGF0IGxvY2FsbHkgY3JlYXRlZAorbWVyZ2UgY29tbWl0cyB3aWxsIG5vdCBiZSBmbGF0dGVuZWQuCisrCitXaGVuIGZhbHNlLCBtZXJnZSB0aGUgY3VycmVudCBicmFuY2ggaW50byB0aGUgdXBzdHJlYW0gYnJhbmNoLgorKworV2hlbiBgaW50ZXJhY3RpdmVgLCBlbmFibGUgdGhlIGludGVyYWN0aXZlIG1vZGUgb2YgcmViYXNlLgorKworU2VlIGBwdWxsLnJlYmFzZWAsIGBicmFuY2guPG5hbWU+LnJlYmFzZWAgYW5kIGBicmFuY2guYXV0b1NldHVwUmViYXNlYCBpbgorbGlua2dpdDpnaXQtY29uZmlnWzFdIGlmIHlvdSB3YW50IHRvIG1ha2UgYGdpdCBwdWxsYCBhbHdheXMgdXNlCitgLS1yZWJhc2VgIGluc3RlYWQgb2YgbWVyZ2luZy4KKysKK1tOT1RFXQorVGhpcyBpcyBhIHBvdGVudGlhbGx5IF9kYW5nZXJvdXNfIG1vZGUgb2Ygb3BlcmF0aW9uLgorSXQgcmV3cml0ZXMgaGlzdG9yeSwgd2hpY2ggZG9lcyBub3QgYm9kZSB3ZWxsIHdoZW4geW91CitwdWJsaXNoZWQgdGhhdCBoaXN0b3J5IGFscmVhZHkuICBEbyAqbm90KiB1c2UgdGhpcyBvcHRpb24KK3VubGVzcyB5b3UgaGF2ZSByZWFkIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXSBjYXJlZnVsbHkuCisKKy0tbm8tcmViYXNlOjoKKwlPdmVycmlkZSBlYXJsaWVyIC0tcmViYXNlLgorCitPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmcKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitpbmNsdWRlOjpmZXRjaC1vcHRpb25zLnR4dFtdCisKK2luY2x1ZGU6OnB1bGwtZmV0Y2gtcGFyYW0udHh0W10KKworaW5jbHVkZTo6dXJscy1yZW1vdGVzLnR4dFtdCisKK2luY2x1ZGU6Om1lcmdlLXN0cmF0ZWdpZXMudHh0W10KKworREVGQVVMVCBCRUhBVklPVVIKKy0tLS0tLS0tLS0tLS0tLS0tCisKK09mdGVuIHBlb3BsZSB1c2UgYGdpdCBwdWxsYCB3aXRob3V0IGdpdmluZyBhbnkgcGFyYW1ldGVyLgorVHJhZGl0aW9uYWxseSwgdGhpcyBoYXMgYmVlbiBlcXVpdmFsZW50IHRvIHNheWluZyBgZ2l0IHB1bGwKK29yaWdpbmAuICBIb3dldmVyLCB3aGVuIGNvbmZpZ3VyYXRpb24gYGJyYW5jaC48bmFtZT4ucmVtb3RlYCBpcworcHJlc2VudCB3aGlsZSBvbiBicmFuY2ggYDxuYW1lPmAsIHRoYXQgdmFsdWUgaXMgdXNlZCBpbnN0ZWFkIG9mCitgb3JpZ2luYC4KKworSW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoYXQgVVJMIHRvIHVzZSB0byBmZXRjaCBmcm9tLCB0aGUgdmFsdWUKK29mIHRoZSBjb25maWd1cmF0aW9uIGByZW1vdGUuPG9yaWdpbj4udXJsYCBpcyBjb25zdWx0ZWQKK2FuZCBpZiB0aGVyZSBpcyBub3QgYW55IHN1Y2ggdmFyaWFibGUsIHRoZSB2YWx1ZSBvbiB0aGUgYFVSTDpgIGxpbmUKK2luIGAkR0lUX0RJUi9yZW1vdGVzLzxvcmlnaW4+YCBpcyB1c2VkLgorCitJbiBvcmRlciB0byBkZXRlcm1pbmUgd2hhdCByZW1vdGUgYnJhbmNoZXMgdG8gZmV0Y2ggKGFuZAorb3B0aW9uYWxseSBzdG9yZSBpbiB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzKSB3aGVuIHRoZSBjb21tYW5kIGlzCitydW4gd2l0aG91dCBhbnkgcmVmc3BlYyBwYXJhbWV0ZXJzIG9uIHRoZSBjb21tYW5kIGxpbmUsIHZhbHVlcworb2YgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYHJlbW90ZS48b3JpZ2luPi5mZXRjaGAgYXJlCitjb25zdWx0ZWQsIGFuZCBpZiB0aGVyZSBhcmVuJ3QgYW55LCBgJEdJVF9ESVIvcmVtb3Rlcy88b3JpZ2luPmAKK2lzIGNvbnN1bHRlZCBhbmQgaXRzIGBQdWxsOmAgbGluZXMgYXJlIHVzZWQuCitJbiBhZGRpdGlvbiB0byB0aGUgcmVmc3BlYyBmb3JtYXRzIGRlc2NyaWJlZCBpbiB0aGUgT1BUSU9OUworc2VjdGlvbiwgeW91IGNhbiBoYXZlIGEgZ2xvYmJpbmcgcmVmc3BlYyB0aGF0IGxvb2tzIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qCistLS0tLS0tLS0tLS0KKworQSBnbG9iYmluZyByZWZzcGVjIG11c3QgaGF2ZSBhIG5vbi1lbXB0eSBSSFMgKGkuZS4gbXVzdCBzdG9yZQord2hhdCB3ZXJlIGZldGNoZWQgaW4gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzKSwgYW5kIGl0cyBMSFMgYW5kIFJIUworbXVzdCBlbmQgd2l0aCBgLypgLiAgVGhlIGFib3ZlIHNwZWNpZmllcyB0aGF0IGFsbCByZW1vdGUKK2JyYW5jaGVzIGFyZSB0cmFja2VkIHVzaW5nIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBpbgorYHJlZnMvcmVtb3Rlcy9vcmlnaW4vYCBoaWVyYXJjaHkgdW5kZXIgdGhlIHNhbWUgbmFtZS4KKworVGhlIHJ1bGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlbW90ZSBicmFuY2ggdG8gbWVyZ2UgYWZ0ZXIKK2ZldGNoaW5nIGlzIGEgYml0IGludm9sdmVkLCBpbiBvcmRlciBub3QgdG8gYnJlYWsgYmFja3dhcmQKK2NvbXBhdGliaWxpdHkuCisKK0lmIGV4cGxpY2l0IHJlZnNwZWNzIHdlcmUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQKK2xpbmUgb2YgYGdpdCBwdWxsYCwgdGhleSBhcmUgYWxsIG1lcmdlZC4KKworV2hlbiBubyByZWZzcGVjIHdhcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGVuIGBnaXQgcHVsbGAKK3VzZXMgdGhlIHJlZnNwZWMgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBvcgorYCRHSVRfRElSL3JlbW90ZXMvPG9yaWdpbj5gLiAgSW4gc3VjaCBjYXNlcywgdGhlIGZvbGxvd2luZworcnVsZXMgYXBwbHk6CisKKy4gSWYgYGJyYW5jaC48bmFtZT4ubWVyZ2VgIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjdXJyZW50CisgIGJyYW5jaCBgPG5hbWU+YCBleGlzdHMsIHRoYXQgaXMgdGhlIG5hbWUgb2YgdGhlIGJyYW5jaCBhdCB0aGUKKyAgcmVtb3RlIHNpdGUgdGhhdCBpcyBtZXJnZWQuCisKKy4gSWYgdGhlIHJlZnNwZWMgaXMgYSBnbG9iYmluZyBvbmUsIG5vdGhpbmcgaXMgbWVyZ2VkLgorCisuIE90aGVyd2lzZSB0aGUgcmVtb3RlIGJyYW5jaCBvZiB0aGUgZmlyc3QgcmVmc3BlYyBpcyBtZXJnZWQuCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKyogVXBkYXRlIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgZm9yIHRoZSByZXBvc2l0b3J5CisgIHlvdSBjbG9uZWQgZnJvbSwgdGhlbiBtZXJnZSBvbmUgb2YgdGhlbSBpbnRvIHlvdXIKKyAgY3VycmVudCBicmFuY2g6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwKKyQgZ2l0IHB1bGwgb3JpZ2luCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK05vcm1hbGx5IHRoZSBicmFuY2ggbWVyZ2VkIGluIGlzIHRoZSBIRUFEIG9mIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwKK2J1dCB0aGUgY2hvaWNlIGlzIGRldGVybWluZWQgYnkgdGhlIGJyYW5jaC48bmFtZT4ucmVtb3RlIGFuZAorYnJhbmNoLjxuYW1lPi5tZXJnZSBvcHRpb25zOyBzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBkZXRhaWxzLgorCisqIE1lcmdlIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoIHRoZSByZW1vdGUgYnJhbmNoIGBuZXh0YDoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbCBvcmlnaW4gbmV4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIGxlYXZlcyBhIGNvcHkgb2YgYG5leHRgIHRlbXBvcmFyaWx5IGluIEZFVENIX0hFQUQsIGFuZAordXBkYXRlcyB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBgb3JpZ2luL25leHRgLgorVGhlIHNhbWUgY2FuIGJlIGRvbmUgYnkgaW52b2tpbmcgZmV0Y2ggYW5kIG1lcmdlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCBvcmlnaW4KKyQgZ2l0IG1lcmdlIG9yaWdpbi9uZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitJZiB5b3UgdHJpZWQgYSBwdWxsIHdoaWNoIHJlc3VsdGVkIGluIGNvbXBsZXggY29uZmxpY3RzIGFuZAord291bGQgd2FudCB0byBzdGFydCBvdmVyLCB5b3UgY2FuIHJlY292ZXIgd2l0aCAnZ2l0IHJlc2V0Jy4KKworCitpbmNsdWRlOjp0cmFuc2Zlci1kYXRhLWxlYWtzLnR4dFtdCisKK0JVR1MKKy0tLS0KK1VzaW5nIC0tcmVjdXJzZS1zdWJtb2R1bGVzIGNhbiBvbmx5IGZldGNoIG5ldyBjb21taXRzIGluIGFscmVhZHkgY2hlY2tlZAorb3V0IHN1Ym1vZHVsZXMgcmlnaHQgbm93LiBXaGVuIGUuZy4gdXBzdHJlYW0gYWRkZWQgYSBuZXcgc3VibW9kdWxlIGluIHRoZQoranVzdCBmZXRjaGVkIGNvbW1pdHMgb2YgdGhlIHN1cGVycHJvamVjdCB0aGUgc3VibW9kdWxlIGl0c2VsZiBjYW5ub3QgYmUKK2ZldGNoZWQsIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGNoZWNrIG91dCB0aGF0IHN1Ym1vZHVsZSBsYXRlciB3aXRob3V0CitoYXZpbmcgdG8gZG8gYSBmZXRjaCBhZ2Fpbi4gVGhpcyBpcyBleHBlY3RlZCB0byBiZSBmaXhlZCBpbiBhIGZ1dHVyZSBHaXQKK3ZlcnNpb24uCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtZmV0Y2hbMV0sIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdLCBsaW5rZ2l0OmdpdC1jb25maWdbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wdXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiODA1MzQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdXNoLnR4dApAQCAtMCwwICsxLDY3MyBAQAorZ2l0LXB1c2goMSkKKz09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1wdXNoIC0gVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHB1c2gnIFstLWFsbCB8IC0tbWlycm9yIHwgLS10YWdzXSBbLS1mb2xsb3ctdGFnc10gWy0tYXRvbWljXSBbLW4gfCAtLWRyeS1ydW5dIFstLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz5dCisJICAgWy0tcmVwbz08cmVwb3NpdG9yeT5dIFstZiB8IC0tZm9yY2VdIFstZCB8IC0tZGVsZXRlXSBbLS1wcnVuZV0gWy12IHwgLS12ZXJib3NlXQorCSAgIFstdSB8IC0tc2V0LXVwc3RyZWFtXSBbLW8gPHN0cmluZz4gfCAtLXB1c2gtb3B0aW9uPTxzdHJpbmc+XQorCSAgIFstLVtuby1dc2lnbmVkfC0tc2lnbmVkPSh0cnVlfGZhbHNlfGlmLWFza2VkKV0KKwkgICBbLS1mb3JjZS13aXRoLWxlYXNlWz08cmVmbmFtZT5bOjxleHBlY3Q+XV1dCisJICAgWy0tbm8tdmVyaWZ5XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVXBkYXRlcyByZW1vdGUgcmVmcyB1c2luZyBsb2NhbCByZWZzLCB3aGlsZSBzZW5kaW5nIG9iamVjdHMKK25lY2Vzc2FyeSB0byBjb21wbGV0ZSB0aGUgZ2l2ZW4gcmVmcy4KKworWW91IGNhbiBtYWtlIGludGVyZXN0aW5nIHRoaW5ncyBoYXBwZW4gdG8gYSByZXBvc2l0b3J5CitldmVyeSB0aW1lIHlvdSBwdXNoIGludG8gaXQsIGJ5IHNldHRpbmcgdXAgJ2hvb2tzJyB0aGVyZS4gIFNlZQorZG9jdW1lbnRhdGlvbiBmb3IgbGlua2dpdDpnaXQtcmVjZWl2ZS1wYWNrWzFdLgorCitXaGVuIHRoZSBjb21tYW5kIGxpbmUgZG9lcyBub3Qgc3BlY2lmeSB3aGVyZSB0byBwdXNoIHdpdGggdGhlCitgPHJlcG9zaXRvcnk+YCBhcmd1bWVudCwgYGJyYW5jaC4qLnJlbW90ZWAgY29uZmlndXJhdGlvbiBmb3IgdGhlCitjdXJyZW50IGJyYW5jaCBpcyBjb25zdWx0ZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIHB1c2guICBJZiB0aGUKK2NvbmZpZ3VyYXRpb24gaXMgbWlzc2luZywgaXQgZGVmYXVsdHMgdG8gJ29yaWdpbicuCisKK1doZW4gdGhlIGNvbW1hbmQgbGluZSBkb2VzIG5vdCBzcGVjaWZ5IHdoYXQgdG8gcHVzaCB3aXRoIGA8cmVmc3BlYz4uLi5gCithcmd1bWVudHMgb3IgYC0tYWxsYCwgYC0tbWlycm9yYCwgYC0tdGFnc2Agb3B0aW9ucywgdGhlIGNvbW1hbmQgZmluZHMKK3RoZSBkZWZhdWx0IGA8cmVmc3BlYz5gIGJ5IGNvbnN1bHRpbmcgYHJlbW90ZS4qLnB1c2hgIGNvbmZpZ3VyYXRpb24sCithbmQgaWYgaXQgaXMgbm90IGZvdW5kLCBob25vcnMgYHB1c2guZGVmYXVsdGAgY29uZmlndXJhdGlvbiB0byBkZWNpZGUKK3doYXQgdG8gcHVzaCAoU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgdGhlIG1lYW5pbmcgb2YgYHB1c2guZGVmYXVsdGApLgorCitXaGVuIG5laXRoZXIgdGhlIGNvbW1hbmQtbGluZSBub3IgdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmeSB3aGF0IHRvCitwdXNoLCB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyB1c2VkLCB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgYHNpbXBsZWAKK3ZhbHVlIGZvciBgcHVzaC5kZWZhdWx0YDogdGhlIGN1cnJlbnQgYnJhbmNoIGlzIHB1c2hlZCB0byB0aGUKK2NvcnJlc3BvbmRpbmcgdXBzdHJlYW0gYnJhbmNoLCBidXQgYXMgYSBzYWZldHkgbWVhc3VyZSwgdGhlIHB1c2ggaXMKK2Fib3J0ZWQgaWYgdGhlIHVwc3RyZWFtIGJyYW5jaCBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlCitsb2NhbCBvbmUuCisKKworT1BUSU9OU1tbT1BUSU9OU11dCistLS0tLS0tLS0tLS0tLS0tLS0KKzxyZXBvc2l0b3J5Pjo6CisJVGhlICJyZW1vdGUiIHJlcG9zaXRvcnkgdGhhdCBpcyBkZXN0aW5hdGlvbiBvZiBhIHB1c2gKKwlvcGVyYXRpb24uICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgZWl0aGVyIGEgVVJMCisJKHNlZSB0aGUgc2VjdGlvbiA8PFVSTFMsR0lUIFVSTFM+PiBiZWxvdykgb3IgdGhlIG5hbWUKKwlvZiBhIHJlbW90ZSAoc2VlIHRoZSBzZWN0aW9uIDw8UkVNT1RFUyxSRU1PVEVTPj4gYmVsb3cpLgorCis8cmVmc3BlYz4uLi46OgorCVNwZWNpZnkgd2hhdCBkZXN0aW5hdGlvbiByZWYgdG8gdXBkYXRlIHdpdGggd2hhdCBzb3VyY2Ugb2JqZWN0LgorCVRoZSBmb3JtYXQgb2YgYSA8cmVmc3BlYz4gcGFyYW1ldGVyIGlzIGFuIG9wdGlvbmFsIHBsdXMKKwlgK2AsIGZvbGxvd2VkIGJ5IHRoZSBzb3VyY2Ugb2JqZWN0IDxzcmM+LCBmb2xsb3dlZAorCWJ5IGEgY29sb24gYDpgLCBmb2xsb3dlZCBieSB0aGUgZGVzdGluYXRpb24gcmVmIDxkc3Q+LgorKworVGhlIDxzcmM+IGlzIG9mdGVuIHRoZSBuYW1lIG9mIHRoZSBicmFuY2ggeW91IHdvdWxkIHdhbnQgdG8gcHVzaCwgYnV0CitpdCBjYW4gYmUgYW55IGFyYml0cmFyeSAiU0hBLTEgZXhwcmVzc2lvbiIsIHN1Y2ggYXMgYG1hc3Rlcn40YCBvcgorYEhFQURgIChzZWUgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10pLgorKworVGhlIDxkc3Q+IHRlbGxzIHdoaWNoIHJlZiBvbiB0aGUgcmVtb3RlIHNpZGUgaXMgdXBkYXRlZCB3aXRoIHRoaXMKK3B1c2guIEFyYml0cmFyeSBleHByZXNzaW9ucyBjYW5ub3QgYmUgdXNlZCBoZXJlLCBhbiBhY3R1YWwgcmVmIG11c3QKK2JlIG5hbWVkLgorSWYgYGdpdCBwdXNoIFs8cmVwb3NpdG9yeT5dYCB3aXRob3V0IGFueSBgPHJlZnNwZWM+YCBhcmd1bWVudCBpcyBzZXQgdG8KK3VwZGF0ZSBzb21lIHJlZiBhdCB0aGUgZGVzdGluYXRpb24gd2l0aCBgPHNyYz5gIHdpdGgKK2ByZW1vdGUuPHJlcG9zaXRvcnk+LnB1c2hgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGA6PGRzdD5gIHBhcnQgY2FuCitiZSBvbWl0dGVkLS1zdWNoIGEgcHVzaCB3aWxsIHVwZGF0ZSBhIHJlZiB0aGF0IGA8c3JjPmAgbm9ybWFsbHkgdXBkYXRlcword2l0aG91dCBhbnkgYDxyZWZzcGVjPmAgb24gdGhlIGNvbW1hbmQgbGluZS4gIE90aGVyd2lzZSwgbWlzc2luZworYDo8ZHN0PmAgbWVhbnMgdG8gdXBkYXRlIHRoZSBzYW1lIHJlZiBhcyB0aGUgYDxzcmM+YC4KKysKK0lmIDxkc3Q+IGRvZXNuJ3Qgc3RhcnQgd2l0aCBgcmVmcy9gIChlLmcuIGByZWZzL2hlYWRzL21hc3RlcmApIHdlIHdpbGwKK3RyeSB0byBpbmZlciB3aGVyZSBpbiBgcmVmcy8qYCBvbiB0aGUgZGVzdGluYXRpb24gPHJlcG9zaXRvcnk+IGl0CitiZWxvbmdzIGJhc2VkIG9uIHRoZSB0eXBlIG9mIDxzcmM+IGJlaW5nIHB1c2hlZCBhbmQgd2hldGhlciA8ZHN0PgoraXMgYW1iaWd1b3VzLgorKworLS0KKyogSWYgPGRzdD4gdW5hbWJpZ3VvdXNseSByZWZlcnMgdG8gYSByZWYgb24gdGhlIDxyZXBvc2l0b3J5PiByZW1vdGUsCisgIHRoZW4gcHVzaCB0byB0aGF0IHJlZi4KKworKiBJZiA8c3JjPiByZXNvbHZlcyB0byBhIHJlZiBzdGFydGluZyB3aXRoIHJlZnMvaGVhZHMvIG9yIHJlZnMvdGFncy8sCisgIHRoZW4gcHJlcGVuZCB0aGF0IHRvIDxkc3Q+LgorCisqIE90aGVyIGFtYmlndWl0eSByZXNvbHV0aW9ucyBtaWdodCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLCBidXQgZm9yCisgIG5vdyBhbnkgb3RoZXIgY2FzZXMgd2lsbCBlcnJvciBvdXQgd2l0aCBhbiBlcnJvciBpbmRpY2F0aW5nIHdoYXQgd2UKKyAgdHJpZWQsIGFuZCBkZXBlbmRpbmcgb24gdGhlIGBhZHZpY2UucHVzaFVucXVhbGlmaWVkUmVmbmFtZWAKKyAgY29uZmlndXJhdGlvbiAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkgc3VnZ2VzdCB3aGF0IHJlZnMvCisgIG5hbWVzcGFjZSB5b3UgbWF5IGhhdmUgd2FudGVkIHRvIHB1c2ggdG8uCisKKy0tCisrCitUaGUgb2JqZWN0IHJlZmVyZW5jZWQgYnkgPHNyYz4gaXMgdXNlZCB0byB1cGRhdGUgdGhlIDxkc3Q+IHJlZmVyZW5jZQorb24gdGhlIHJlbW90ZSBzaWRlLiBXaGV0aGVyIHRoaXMgaXMgYWxsb3dlZCBkZXBlbmRzIG9uIHdoZXJlIGluCitgcmVmcy8qYCB0aGUgPGRzdD4gcmVmZXJlbmNlIGxpdmVzIGFzIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3csIGluCit0aG9zZSBzZWN0aW9ucyAidXBkYXRlIiBtZWFucyBhbnkgbW9kaWZpY2F0aW9ucyBleGNlcHQgZGVsZXRlcywgd2hpY2gKK2FzIG5vdGVkIGFmdGVyIHRoZSBuZXh0IGZldyBzZWN0aW9ucyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseS4KKysKK1RoZSBgcmVmcy9oZWFkcy8qYCBuYW1lc3BhY2Ugd2lsbCBvbmx5IGFjY2VwdCBjb21taXQgb2JqZWN0cywgYW5kCit1cGRhdGVzIG9ubHkgaWYgdGhleSBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuCisrCitUaGUgYHJlZnMvdGFncy8qYCBuYW1lc3BhY2Ugd2lsbCBhY2NlcHQgYW55IGtpbmQgb2Ygb2JqZWN0IChhcworY29tbWl0cywgdHJlZXMgYW5kIGJsb2JzIGNhbiBiZSB0YWdnZWQpLCBhbmQgYW55IHVwZGF0ZXMgdG8gdGhlbSB3aWxsCitiZSByZWplY3RlZC4KKysKK0l0J3MgcG9zc2libGUgdG8gcHVzaCBhbnkgdHlwZSBvZiBvYmplY3QgdG8gYW55IG5hbWVzcGFjZSBvdXRzaWRlIG9mCitgcmVmcy97dGFncyxoZWFkc30vKmAuIEluIHRoZSBjYXNlIG9mIHRhZ3MgYW5kIGNvbW1pdHMsIHRoZXNlIHdpbGwgYmUKK3RyZWF0ZWQgYXMgaWYgdGhleSB3ZXJlIHRoZSBjb21taXRzIGluc2lkZSBgcmVmcy9oZWFkcy8qYCBmb3IgdGhlCitwdXJwb3NlcyBvZiB3aGV0aGVyIHRoZSB1cGRhdGUgaXMgYWxsb3dlZC4KKysKK0kuZS4gYSBmYXN0LWZvcndhcmQgb2YgY29tbWl0cyBhbmQgdGFncyBvdXRzaWRlIGByZWZzL3t0YWdzLGhlYWRzfS8qYAoraXMgYWxsb3dlZCwgZXZlbiBpbiBjYXNlcyB3aGVyZSB3aGF0J3MgYmVpbmcgZmFzdC1mb3J3YXJkZWQgaXMgbm90IGEKK2NvbW1pdCwgYnV0IGEgdGFnIG9iamVjdCB3aGljaCBoYXBwZW5zIHRvIHBvaW50IHRvIGEgbmV3IGNvbW1pdCB3aGljaAoraXMgYSBmYXN0LWZvcndhcmQgb2YgdGhlIGNvbW1pdCB0aGUgbGFzdCB0YWcgKG9yIGNvbW1pdCkgaXQncworcmVwbGFjaW5nLiBSZXBsYWNpbmcgYSB0YWcgd2l0aCBhbiBlbnRpcmVseSBkaWZmZXJlbnQgdGFnIGlzIGFsc28KK2FsbG93ZWQsIGlmIGl0IHBvaW50cyB0byB0aGUgc2FtZSBjb21taXQsIGFzIHdlbGwgYXMgcHVzaGluZyBhIHBlZWxlZAordGFnLCBpLmUuIHB1c2hpbmcgdGhlIGNvbW1pdCB0aGF0IGV4aXN0aW5nIHRhZyBvYmplY3QgcG9pbnRzIHRvLCBvciBhCituZXcgdGFnIG9iamVjdCB3aGljaCBhbiBleGlzdGluZyBjb21taXQgcG9pbnRzIHRvLgorKworVHJlZSBhbmQgYmxvYiBvYmplY3RzIG91dHNpZGUgb2YgYHJlZnMve3RhZ3MsaGVhZHN9LypgIHdpbGwgYmUgdHJlYXRlZAordGhlIHNhbWUgd2F5IGFzIGlmIHRoZXkgd2VyZSBpbnNpZGUgYHJlZnMvdGFncy8qYCwgYW55IHVwZGF0ZSBvZiB0aGVtCit3aWxsIGJlIHJlamVjdGVkLgorKworQWxsIG9mIHRoZSBydWxlcyBkZXNjcmliZWQgYWJvdmUgYWJvdXQgd2hhdCdzIG5vdCBhbGxvd2VkIGFzIGFuIHVwZGF0ZQorY2FuIGJlIG92ZXJyaWRkZW4gYnkgYWRkaW5nIGFuIHRoZSBvcHRpb25hbCBsZWFkaW5nIGArYCB0byBhIHJlZnNwZWMKKyhvciB1c2luZyBgLS1mb3JjZWAgY29tbWFuZCBsaW5lIG9wdGlvbikuIFRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzCitpcyB0aGF0IG5vIGFtb3VudCBvZiBmb3JjaW5nIHdpbGwgbWFrZSB0aGUgYHJlZnMvaGVhZHMvKmAgbmFtZXNwYWNlCithY2NlcHQgYSBub24tY29tbWl0IG9iamVjdC4gSG9va3MgYW5kIGNvbmZpZ3VyYXRpb24gY2FuIGFsc28gb3ZlcnJpZGUKK29yIGFtZW5kIHRoZXNlIHJ1bGVzLCBzZWUgZS5nLiBgcmVjZWl2ZS5kZW55Tm9uRmFzdEZvcndhcmRzYCBpbgorbGlua2dpdDpnaXQtY29uZmlnWzFdIGFuZCBgcHJlLXJlY2VpdmVgIGFuZCBgdXBkYXRlYCBpbgorbGlua2dpdDpnaXRob29rc1s1XS4KKysKK1B1c2hpbmcgYW4gZW1wdHkgPHNyYz4gYWxsb3dzIHlvdSB0byBkZWxldGUgdGhlIDxkc3Q+IHJlZiBmcm9tIHRoZQorcmVtb3RlIHJlcG9zaXRvcnkuIERlbGV0aW9ucyBhcmUgYWx3YXlzIGFjY2VwdGVkIHdpdGhvdXQgYSBsZWFkaW5nIGArYAoraW4gdGhlIHJlZnNwZWMgKG9yIGAtLWZvcmNlYCksIGV4Y2VwdCB3aGVuIGZvcmJpZGRlbiBieSBjb25maWd1cmF0aW9uCitvciBob29rcy4gU2VlIGByZWNlaXZlLmRlbnlEZWxldGVzYCBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0gYW5kCitgcHJlLXJlY2VpdmVgIGFuZCBgdXBkYXRlYCBpbiBsaW5rZ2l0OmdpdGhvb2tzWzVdLgorKworVGhlIHNwZWNpYWwgcmVmc3BlYyBgOmAgKG9yIGArOmAgdG8gYWxsb3cgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzKQorZGlyZWN0cyBHaXQgdG8gcHVzaCAibWF0Y2hpbmciIGJyYW5jaGVzOiBmb3IgZXZlcnkgYnJhbmNoIHRoYXQgZXhpc3RzIG9uCit0aGUgbG9jYWwgc2lkZSwgdGhlIHJlbW90ZSBzaWRlIGlzIHVwZGF0ZWQgaWYgYSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZQorYWxyZWFkeSBleGlzdHMgb24gdGhlIHJlbW90ZSBzaWRlLgorKworYHRhZyA8dGFnPmAgbWVhbnMgdGhlIHNhbWUgYXMgYHJlZnMvdGFncy88dGFnPjpyZWZzL3RhZ3MvPHRhZz5gLgorCistLWFsbDo6CisJUHVzaCBhbGwgYnJhbmNoZXMgKGkuZS4gcmVmcyB1bmRlciBgcmVmcy9oZWFkcy9gKTsgY2Fubm90IGJlCisJdXNlZCB3aXRoIG90aGVyIDxyZWZzcGVjPi4KKworLS1wcnVuZTo6CisJUmVtb3ZlIHJlbW90ZSBicmFuY2hlcyB0aGF0IGRvbid0IGhhdmUgYSBsb2NhbCBjb3VudGVycGFydC4gRm9yIGV4YW1wbGUKKwlhIHJlbW90ZSBicmFuY2ggYHRtcGAgd2lsbCBiZSByZW1vdmVkIGlmIGEgbG9jYWwgYnJhbmNoIHdpdGggdGhlIHNhbWUKKwluYW1lIGRvZXNuJ3QgZXhpc3QgYW55IG1vcmUuIFRoaXMgYWxzbyByZXNwZWN0cyByZWZzcGVjcywgZS5nLgorCWBnaXQgcHVzaCAtLXBydW5lIHJlbW90ZSByZWZzL2hlYWRzLyo6cmVmcy90bXAvKmAgd291bGQKKwltYWtlIHN1cmUgdGhhdCByZW1vdGUgYHJlZnMvdG1wL2Zvb2Agd2lsbCBiZSByZW1vdmVkIGlmIGByZWZzL2hlYWRzL2Zvb2AKKwlkb2Vzbid0IGV4aXN0LgorCistLW1pcnJvcjo6CisJSW5zdGVhZCBvZiBuYW1pbmcgZWFjaCByZWYgdG8gcHVzaCwgc3BlY2lmaWVzIHRoYXQgYWxsCisJcmVmcyB1bmRlciBgcmVmcy9gICh3aGljaCBpbmNsdWRlcyBidXQgaXMgbm90CisJbGltaXRlZCB0byBgcmVmcy9oZWFkcy9gLCBgcmVmcy9yZW1vdGVzL2AsIGFuZCBgcmVmcy90YWdzL2ApCisJYmUgbWlycm9yZWQgdG8gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiAgTmV3bHkgY3JlYXRlZCBsb2NhbAorCXJlZnMgd2lsbCBiZSBwdXNoZWQgdG8gdGhlIHJlbW90ZSBlbmQsIGxvY2FsbHkgdXBkYXRlZCByZWZzCisJd2lsbCBiZSBmb3JjZSB1cGRhdGVkIG9uIHRoZSByZW1vdGUgZW5kLCBhbmQgZGVsZXRlZCByZWZzCisJd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHJlbW90ZSBlbmQuICBUaGlzIGlzIHRoZSBkZWZhdWx0CisJaWYgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGByZW1vdGUuPHJlbW90ZT4ubWlycm9yYCBpcworCXNldC4KKworLW46OgorLS1kcnktcnVuOjoKKwlEbyBldmVyeXRoaW5nIGV4Y2VwdCBhY3R1YWxseSBzZW5kIHRoZSB1cGRhdGVzLgorCistLXBvcmNlbGFpbjo6CisJUHJvZHVjZSBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dC4gIFRoZSBvdXRwdXQgc3RhdHVzIGxpbmUgZm9yIGVhY2ggcmVmCisJd2lsbCBiZSB0YWItc2VwYXJhdGVkIGFuZCBzZW50IHRvIHN0ZG91dCBpbnN0ZWFkIG9mIHN0ZGVyci4gIFRoZSBmdWxsCisJc3ltYm9saWMgbmFtZXMgb2YgdGhlIHJlZnMgd2lsbCBiZSBnaXZlbi4KKworLWQ6OgorLS1kZWxldGU6OgorCUFsbCBsaXN0ZWQgcmVmcyBhcmUgZGVsZXRlZCBmcm9tIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4gVGhpcyBpcworCXRoZSBzYW1lIGFzIHByZWZpeGluZyBhbGwgcmVmcyB3aXRoIGEgY29sb24uCisKKy0tdGFnczo6CisJQWxsIHJlZnMgdW5kZXIgYHJlZnMvdGFnc2AgYXJlIHB1c2hlZCwgaW4KKwlhZGRpdGlvbiB0byByZWZzcGVjcyBleHBsaWNpdGx5IGxpc3RlZCBvbiB0aGUgY29tbWFuZAorCWxpbmUuCisKKy0tZm9sbG93LXRhZ3M6OgorCVB1c2ggYWxsIHRoZSByZWZzIHRoYXQgd291bGQgYmUgcHVzaGVkIHdpdGhvdXQgdGhpcyBvcHRpb24sCisJYW5kIGFsc28gcHVzaCBhbm5vdGF0ZWQgdGFncyBpbiBgcmVmcy90YWdzYCB0aGF0IGFyZSBtaXNzaW5nCisJZnJvbSB0aGUgcmVtb3RlIGJ1dCBhcmUgcG9pbnRpbmcgYXQgY29tbWl0LWlzaCB0aGF0IGFyZQorCXJlYWNoYWJsZSBmcm9tIHRoZSByZWZzIGJlaW5nIHB1c2hlZC4gIFRoaXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkCisJd2l0aCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBwdXNoLmZvbGxvd1RhZ3NgLiAgRm9yIG1vcmUKKwlpbmZvcm1hdGlvbiwgc2VlIGBwdXNoLmZvbGxvd1RhZ3NgIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS1bbm8tXXNpZ25lZDo6CistLXNpZ25lZD0odHJ1ZXxmYWxzZXxpZi1hc2tlZCk6OgorCUdQRy1zaWduIHRoZSBwdXNoIHJlcXVlc3QgdG8gdXBkYXRlIHJlZnMgb24gdGhlIHJlY2VpdmluZworCXNpZGUsIHRvIGFsbG93IGl0IHRvIGJlIGNoZWNrZWQgYnkgdGhlIGhvb2tzIGFuZC9vciBiZQorCWxvZ2dlZC4gIElmIGBmYWxzZWAgb3IgYC0tbm8tc2lnbmVkYCwgbm8gc2lnbmluZyB3aWxsIGJlCisJYXR0ZW1wdGVkLiAgSWYgYHRydWVgIG9yIGAtLXNpZ25lZGAsIHRoZSBwdXNoIHdpbGwgZmFpbCBpZiB0aGUKKwlzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaWduZWQgcHVzaGVzLiAgSWYgc2V0IHRvIGBpZi1hc2tlZGAsCisJc2lnbiBpZiBhbmQgb25seSBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIHNpZ25lZCBwdXNoZXMuICBUaGUgcHVzaAorCXdpbGwgYWxzbyBmYWlsIGlmIHRoZSBhY3R1YWwgY2FsbCB0byBgZ3BnIC0tc2lnbmAgZmFpbHMuICBTZWUKKwlsaW5rZ2l0OmdpdC1yZWNlaXZlLXBhY2tbMV0gZm9yIHRoZSBkZXRhaWxzIG9uIHRoZSByZWNlaXZpbmcgZW5kLgorCistLVtuby1dYXRvbWljOjoKKwlVc2UgYW4gYXRvbWljIHRyYW5zYWN0aW9uIG9uIHRoZSByZW1vdGUgc2lkZSBpZiBhdmFpbGFibGUuCisJRWl0aGVyIGFsbCByZWZzIGFyZSB1cGRhdGVkLCBvciBvbiBlcnJvciwgbm8gcmVmcyBhcmUgdXBkYXRlZC4KKwlJZiB0aGUgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgYXRvbWljIHB1c2hlcyB0aGUgcHVzaCB3aWxsIGZhaWwuCisKKy1vIDxvcHRpb24+OjoKKy0tcHVzaC1vcHRpb249PG9wdGlvbj46OgorCVRyYW5zbWl0IHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhlIHNlcnZlciwgd2hpY2ggcGFzc2VzIHRoZW0gdG8KKwl0aGUgcHJlLXJlY2VpdmUgYXMgd2VsbCBhcyB0aGUgcG9zdC1yZWNlaXZlIGhvb2suIFRoZSBnaXZlbiBzdHJpbmcKKwltdXN0IG5vdCBjb250YWluIGEgTlVMIG9yIExGIGNoYXJhY3Rlci4KKwlXaGVuIG11bHRpcGxlIGAtLXB1c2gtb3B0aW9uPTxvcHRpb24+YCBhcmUgZ2l2ZW4sIHRoZXkgYXJlCisJYWxsIHNlbnQgdG8gdGhlIG90aGVyIHNpZGUgaW4gdGhlIG9yZGVyIGxpc3RlZCBvbiB0aGUKKwljb21tYW5kIGxpbmUuCisJV2hlbiBubyBgLS1wdXNoLW9wdGlvbj08b3B0aW9uPmAgaXMgZ2l2ZW4gZnJvbSB0aGUgY29tbWFuZAorCWxpbmUsIHRoZSB2YWx1ZXMgb2YgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgcHVzaC5wdXNoT3B0aW9uYAorCWFyZSB1c2VkIGluc3RlYWQuCisKKy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPjo6CistLWV4ZWM9PGdpdC1yZWNlaXZlLXBhY2s+OjoKKwlQYXRoIHRvIHRoZSAnZ2l0LXJlY2VpdmUtcGFjaycgcHJvZ3JhbSBvbiB0aGUgcmVtb3RlCisJZW5kLiAgU29tZXRpbWVzIHVzZWZ1bCB3aGVuIHB1c2hpbmcgdG8gYSByZW1vdGUKKwlyZXBvc2l0b3J5IG92ZXIgc3NoLCBhbmQgeW91IGRvIG5vdCBoYXZlIHRoZSBwcm9ncmFtIGluCisJYSBkaXJlY3Rvcnkgb24gdGhlIGRlZmF1bHQgJFBBVEguCisKKy0tW25vLV1mb3JjZS13aXRoLWxlYXNlOjoKKy0tZm9yY2Utd2l0aC1sZWFzZT08cmVmbmFtZT46OgorLS1mb3JjZS13aXRoLWxlYXNlPTxyZWZuYW1lPjo8ZXhwZWN0Pjo6CisJVXN1YWxseSwgImdpdCBwdXNoIiByZWZ1c2VzIHRvIHVwZGF0ZSBhIHJlbW90ZSByZWYgdGhhdCBpcworCW5vdCBhbiBhbmNlc3RvciBvZiB0aGUgbG9jYWwgcmVmIHVzZWQgdG8gb3ZlcndyaXRlIGl0LgorKworVGhpcyBvcHRpb24gb3ZlcnJpZGVzIHRoaXMgcmVzdHJpY3Rpb24gaWYgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlCityZW1vdGUgcmVmIGlzIHRoZSBleHBlY3RlZCB2YWx1ZS4gICJnaXQgcHVzaCIgZmFpbHMgb3RoZXJ3aXNlLgorKworSW1hZ2luZSB0aGF0IHlvdSBoYXZlIHRvIHJlYmFzZSB3aGF0IHlvdSBoYXZlIGFscmVhZHkgcHVibGlzaGVkLgorWW91IHdpbGwgaGF2ZSB0byBieXBhc3MgdGhlICJtdXN0IGZhc3QtZm9yd2FyZCIgcnVsZSBpbiBvcmRlciB0bworcmVwbGFjZSB0aGUgaGlzdG9yeSB5b3Ugb3JpZ2luYWxseSBwdWJsaXNoZWQgd2l0aCB0aGUgcmViYXNlZCBoaXN0b3J5LgorSWYgc29tZWJvZHkgZWxzZSBidWlsdCBvbiB0b3Agb2YgeW91ciBvcmlnaW5hbCBoaXN0b3J5IHdoaWxlIHlvdSBhcmUKK3JlYmFzaW5nLCB0aGUgdGlwIG9mIHRoZSBicmFuY2ggYXQgdGhlIHJlbW90ZSBtYXkgYWR2YW5jZSB3aXRoIGhlcgorY29tbWl0LCBhbmQgYmxpbmRseSBwdXNoaW5nIHdpdGggYC0tZm9yY2VgIHdpbGwgbG9zZSBoZXIgd29yay4KKysKK1RoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc2F5IHRoYXQgeW91IGV4cGVjdCB0aGUgaGlzdG9yeSB5b3UgYXJlCit1cGRhdGluZyBpcyB3aGF0IHlvdSByZWJhc2VkIGFuZCB3YW50IHRvIHJlcGxhY2UuIElmIHRoZSByZW1vdGUgcmVmCitzdGlsbCBwb2ludHMgYXQgdGhlIGNvbW1pdCB5b3Ugc3BlY2lmaWVkLCB5b3UgY2FuIGJlIHN1cmUgdGhhdCBubworb3RoZXIgcGVvcGxlIGRpZCBhbnl0aGluZyB0byB0aGUgcmVmLiBJdCBpcyBsaWtlIHRha2luZyBhICJsZWFzZSIgb24KK3RoZSByZWYgd2l0aG91dCBleHBsaWNpdGx5IGxvY2tpbmcgaXQsIGFuZCB0aGUgcmVtb3RlIHJlZiBpcyB1cGRhdGVkCitvbmx5IGlmIHRoZSAibGVhc2UiIGlzIHN0aWxsIHZhbGlkLgorKworYC0tZm9yY2Utd2l0aC1sZWFzZWAgYWxvbmUsIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUgZGV0YWlscywgd2lsbCBwcm90ZWN0CithbGwgcmVtb3RlIHJlZnMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgdXBkYXRlZCBieSByZXF1aXJpbmcgdGhlaXIKK2N1cnJlbnQgdmFsdWUgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2ggd2UgaGF2ZQorZm9yIHRoZW0uCisrCitgLS1mb3JjZS13aXRoLWxlYXNlPTxyZWZuYW1lPmAsIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUgZXhwZWN0ZWQgdmFsdWUsIHdpbGwKK3Byb3RlY3QgdGhlIG5hbWVkIHJlZiAoYWxvbmUpLCBpZiBpdCBpcyBnb2luZyB0byBiZSB1cGRhdGVkLCBieQorcmVxdWlyaW5nIGl0cyBjdXJyZW50IHZhbHVlIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSByZW1vdGUtdHJhY2tpbmcKK2JyYW5jaCB3ZSBoYXZlIGZvciBpdC4KKysKK2AtLWZvcmNlLXdpdGgtbGVhc2U9PHJlZm5hbWU+OjxleHBlY3Q+YCB3aWxsIHByb3RlY3QgdGhlIG5hbWVkIHJlZiAoYWxvbmUpLAoraWYgaXQgaXMgZ29pbmcgdG8gYmUgdXBkYXRlZCwgYnkgcmVxdWlyaW5nIGl0cyBjdXJyZW50IHZhbHVlIHRvIGJlCit0aGUgc2FtZSBhcyB0aGUgc3BlY2lmaWVkIHZhbHVlIGA8ZXhwZWN0PmAgKHdoaWNoIGlzIGFsbG93ZWQgdG8gYmUKK2RpZmZlcmVudCBmcm9tIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIHdlIGhhdmUgZm9yIHRoZSByZWZuYW1lLAorb3Igd2UgZG8gbm90IGV2ZW4gaGF2ZSB0byBoYXZlIHN1Y2ggYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIHdoZW4KK3RoaXMgZm9ybSBpcyB1c2VkKS4gIElmIGA8ZXhwZWN0PmAgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiB0aGUgbmFtZWQgcmVmCittdXN0IG5vdCBhbHJlYWR5IGV4aXN0LgorKworTm90ZSB0aGF0IGFsbCBmb3JtcyBvdGhlciB0aGFuIGAtLWZvcmNlLXdpdGgtbGVhc2U9PHJlZm5hbWU+OjxleHBlY3Q+YAordGhhdCBzcGVjaWZpZXMgdGhlIGV4cGVjdGVkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlZiBleHBsaWNpdGx5IGFyZQorc3RpbGwgZXhwZXJpbWVudGFsIGFuZCB0aGVpciBzZW1hbnRpY3MgbWF5IGNoYW5nZSBhcyB3ZSBnYWluIGV4cGVyaWVuY2UKK3dpdGggdGhpcyBmZWF0dXJlLgorKworIi0tbm8tZm9yY2Utd2l0aC1sZWFzZSIgd2lsbCBjYW5jZWwgYWxsIHRoZSBwcmV2aW91cyAtLWZvcmNlLXdpdGgtbGVhc2Ugb24gdGhlCitjb21tYW5kIGxpbmUuCisrCitBIGdlbmVyYWwgbm90ZSBvbiBzYWZldHk6IHN1cHBseWluZyB0aGlzIG9wdGlvbiB3aXRob3V0IGFuIGV4cGVjdGVkCit2YWx1ZSwgaS5lLiBhcyBgLS1mb3JjZS13aXRoLWxlYXNlYCBvciBgLS1mb3JjZS13aXRoLWxlYXNlPTxyZWZuYW1lPmAKK2ludGVyYWN0cyB2ZXJ5IGJhZGx5IHdpdGggYW55dGhpbmcgdGhhdCBpbXBsaWNpdGx5IHJ1bnMgYGdpdCBmZXRjaGAgb24KK3RoZSByZW1vdGUgdG8gYmUgcHVzaGVkIHRvIGluIHRoZSBiYWNrZ3JvdW5kLCBlLmcuIGBnaXQgZmV0Y2ggb3JpZ2luYAorb24geW91ciByZXBvc2l0b3J5IGluIGEgY3JvbmpvYi4KKysKK1RoZSBwcm90ZWN0aW9uIGl0IG9mZmVycyBvdmVyIGAtLWZvcmNlYCBpcyBlbnN1cmluZyB0aGF0IHN1YnNlcXVlbnQKK2NoYW5nZXMgeW91ciB3b3JrIHdhc24ndCBiYXNlZCBvbiBhcmVuJ3QgY2xvYmJlcmVkLCBidXQgdGhpcyBpcwordHJpdmlhbGx5IGRlZmVhdGVkIGlmIHNvbWUgYmFja2dyb3VuZCBwcm9jZXNzIGlzIHVwZGF0aW5nIHJlZnMgaW4gdGhlCitiYWNrZ3JvdW5kLiBXZSBkb24ndCBoYXZlIGFueXRoaW5nIGV4Y2VwdCB0aGUgcmVtb3RlIHRyYWNraW5nIGluZm8gdG8KK2dvIGJ5IGFzIGEgaGV1cmlzdGljIGZvciByZWZzIHlvdSdyZSBleHBlY3RlZCB0byBoYXZlIHNlZW4gJiBhcmUKK3dpbGxpbmcgdG8gY2xvYmJlci4KKysKK0lmIHlvdXIgZWRpdG9yIG9yIHNvbWUgb3RoZXIgc3lzdGVtIGlzIHJ1bm5pbmcgYGdpdCBmZXRjaGAgaW4gdGhlCitiYWNrZ3JvdW5kIGZvciB5b3UgYSB3YXkgdG8gbWl0aWdhdGUgdGhpcyBpcyB0byBzaW1wbHkgc2V0IHVwIGFub3RoZXIKK3JlbW90ZToKKysKKwlnaXQgcmVtb3RlIGFkZCBvcmlnaW4tcHVzaCAkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpCisJZ2l0IGZldGNoIG9yaWdpbi1wdXNoCisrCitOb3cgd2hlbiB0aGUgYmFja2dyb3VuZCBwcm9jZXNzIHJ1bnMgYGdpdCBmZXRjaCBvcmlnaW5gIHRoZSByZWZlcmVuY2VzCitvbiBgb3JpZ2luLXB1c2hgIHdvbid0IGJlIHVwZGF0ZWQsIGFuZCB0aHVzIGNvbW1hbmRzIGxpa2U6CisrCisJZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlIG9yaWdpbi1wdXNoCisrCitXaWxsIGZhaWwgdW5sZXNzIHlvdSBtYW51YWxseSBydW4gYGdpdCBmZXRjaCBvcmlnaW4tcHVzaGAuIFRoaXMgbWV0aG9kCitpcyBvZiBjb3Vyc2UgZW50aXJlbHkgZGVmZWF0ZWQgYnkgc29tZXRoaW5nIHRoYXQgcnVucyBgZ2l0IGZldGNoCistLWFsbGAsIGluIHRoYXQgY2FzZSB5b3UnZCBuZWVkIHRvIGVpdGhlciBkaXNhYmxlIGl0IG9yIGRvIHNvbWV0aGluZworbW9yZSB0ZWRpb3VzIGxpa2U6CisrCisJZ2l0IGZldGNoICAgICAgICAgICAgICAjIHVwZGF0ZSAnbWFzdGVyJyBmcm9tIHJlbW90ZQorCWdpdCB0YWcgYmFzZSBtYXN0ZXIgICAgIyBtYXJrIG91ciBiYXNlIHBvaW50CisJZ2l0IHJlYmFzZSAtaSBtYXN0ZXIgICAjIHJld3JpdGUgc29tZSBjb21taXRzCisJZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlPW1hc3RlcjpiYXNlIG1hc3RlcjptYXN0ZXIKKysKK0kuZS4gY3JlYXRlIGEgYGJhc2VgIHRhZyBmb3IgdmVyc2lvbnMgb2YgdGhlIHVwc3RyZWFtIGNvZGUgdGhhdCB5b3UndmUKK3NlZW4gYW5kIGFyZSB3aWxsaW5nIHRvIG92ZXJ3cml0ZSwgdGhlbiByZXdyaXRlIGhpc3RvcnksIGFuZCBmaW5hbGx5Citmb3JjZSBwdXNoIGNoYW5nZXMgdG8gYG1hc3RlcmAgaWYgdGhlIHJlbW90ZSB2ZXJzaW9uIGlzIHN0aWxsIGF0CitgYmFzZWAsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB5b3VyIGxvY2FsIGByZW1vdGVzL29yaWdpbi9tYXN0ZXJgIGhhcyBiZWVuCit1cGRhdGVkIHRvIGluIHRoZSBiYWNrZ3JvdW5kLgorCistZjo6CistLWZvcmNlOjoKKwlVc3VhbGx5LCB0aGUgY29tbWFuZCByZWZ1c2VzIHRvIHVwZGF0ZSBhIHJlbW90ZSByZWYgdGhhdCBpcworCW5vdCBhbiBhbmNlc3RvciBvZiB0aGUgbG9jYWwgcmVmIHVzZWQgdG8gb3ZlcndyaXRlIGl0LgorCUFsc28sIHdoZW4gYC0tZm9yY2Utd2l0aC1sZWFzZWAgb3B0aW9uIGlzIHVzZWQsIHRoZSBjb21tYW5kIHJlZnVzZXMKKwl0byB1cGRhdGUgYSByZW1vdGUgcmVmIHdob3NlIGN1cnJlbnQgdmFsdWUgZG9lcyBub3QgbWF0Y2gKKwl3aGF0IGlzIGV4cGVjdGVkLgorKworVGhpcyBmbGFnIGRpc2FibGVzIHRoZXNlIGNoZWNrcywgYW5kIGNhbiBjYXVzZSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkKK3RvIGxvc2UgY29tbWl0czsgdXNlIGl0IHdpdGggY2FyZS4KKysKK05vdGUgdGhhdCBgLS1mb3JjZWAgYXBwbGllcyB0byBhbGwgdGhlIHJlZnMgdGhhdCBhcmUgcHVzaGVkLCBoZW5jZQordXNpbmcgaXQgd2l0aCBgcHVzaC5kZWZhdWx0YCBzZXQgdG8gYG1hdGNoaW5nYCBvciB3aXRoIG11bHRpcGxlIHB1c2gKK2Rlc3RpbmF0aW9ucyBjb25maWd1cmVkIHdpdGggYHJlbW90ZS4qLnB1c2hgIG1heSBvdmVyd3JpdGUgcmVmcworb3RoZXIgdGhhbiB0aGUgY3VycmVudCBicmFuY2ggKGluY2x1ZGluZyBsb2NhbCByZWZzIHRoYXQgYXJlCitzdHJpY3RseSBiZWhpbmQgdGhlaXIgcmVtb3RlIGNvdW50ZXJwYXJ0KS4gIFRvIGZvcmNlIGEgcHVzaCB0byBvbmx5CitvbmUgYnJhbmNoLCB1c2UgYSBgK2AgaW4gZnJvbnQgb2YgdGhlIHJlZnNwZWMgdG8gcHVzaCAoZS5nIGBnaXQgcHVzaAorb3JpZ2luICttYXN0ZXJgIHRvIGZvcmNlIGEgcHVzaCB0byB0aGUgYG1hc3RlcmAgYnJhbmNoKS4gU2VlIHRoZQorYDxyZWZzcGVjPi4uLmAgc2VjdGlvbiBhYm92ZSBmb3IgZGV0YWlscy4KKworLS1yZXBvPTxyZXBvc2l0b3J5Pjo6CisJVGhpcyBvcHRpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgPHJlcG9zaXRvcnk+IGFyZ3VtZW50LiBJZiBib3RoCisJYXJlIHNwZWNpZmllZCwgdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudCB0YWtlcyBwcmVjZWRlbmNlLgorCistdTo6CistLXNldC11cHN0cmVhbTo6CisJRm9yIGV2ZXJ5IGJyYW5jaCB0aGF0IGlzIHVwIHRvIGRhdGUgb3Igc3VjY2Vzc2Z1bGx5IHB1c2hlZCwgYWRkCisJdXBzdHJlYW0gKHRyYWNraW5nKSByZWZlcmVuY2UsIHVzZWQgYnkgYXJndW1lbnQtbGVzcworCWxpbmtnaXQ6Z2l0LXB1bGxbMV0gYW5kIG90aGVyIGNvbW1hbmRzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwKKwlzZWUgYGJyYW5jaC48bmFtZT4ubWVyZ2VgIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS1bbm8tXXRoaW46OgorCVRoZXNlIG9wdGlvbnMgYXJlIHBhc3NlZCB0byBsaW5rZ2l0OmdpdC1zZW5kLXBhY2tbMV0uIEEgdGhpbiB0cmFuc2ZlcgorCXNpZ25pZmljYW50bHkgcmVkdWNlcyB0aGUgYW1vdW50IG9mIHNlbnQgZGF0YSB3aGVuIHRoZSBzZW5kZXIgYW5kCisJcmVjZWl2ZXIgc2hhcmUgbWFueSBvZiB0aGUgc2FtZSBvYmplY3RzIGluIGNvbW1vbi4gVGhlIGRlZmF1bHQgaXMKKwlgLS10aGluYC4KKworLXE6OgorLS1xdWlldDo6CisJU3VwcHJlc3MgYWxsIG91dHB1dCwgaW5jbHVkaW5nIHRoZSBsaXN0aW5nIG9mIHVwZGF0ZWQgcmVmcywKKwl1bmxlc3MgYW4gZXJyb3Igb2NjdXJzLiBQcm9ncmVzcyBpcyBub3QgcmVwb3J0ZWQgdG8gdGhlIHN0YW5kYXJkCisJZXJyb3Igc3RyZWFtLgorCistdjo6CistLXZlcmJvc2U6OgorCVJ1biB2ZXJib3NlbHkuCisKKy0tcHJvZ3Jlc3M6OgorCVByb2dyZXNzIHN0YXR1cyBpcyByZXBvcnRlZCBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtCisJYnkgZGVmYXVsdCB3aGVuIGl0IGlzIGF0dGFjaGVkIHRvIGEgdGVybWluYWwsIHVubGVzcyAtcQorCWlzIHNwZWNpZmllZC4gVGhpcyBmbGFnIGZvcmNlcyBwcm9ncmVzcyBzdGF0dXMgZXZlbiBpZiB0aGUKKwlzdGFuZGFyZCBlcnJvciBzdHJlYW0gaXMgbm90IGRpcmVjdGVkIHRvIGEgdGVybWluYWwuCisKKy0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzOjoKKy0tcmVjdXJzZS1zdWJtb2R1bGVzPWNoZWNrfG9uLWRlbWFuZHxvbmx5fG5vOjoKKwlNYXkgYmUgdXNlZCB0byBtYWtlIHN1cmUgYWxsIHN1Ym1vZHVsZSBjb21taXRzIHVzZWQgYnkgdGhlCisJcmV2aXNpb25zIHRvIGJlIHB1c2hlZCBhcmUgYXZhaWxhYmxlIG9uIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaC4KKwlJZiAnY2hlY2snIGlzIHVzZWQgR2l0IHdpbGwgdmVyaWZ5IHRoYXQgYWxsIHN1Ym1vZHVsZSBjb21taXRzIHRoYXQKKwljaGFuZ2VkIGluIHRoZSByZXZpc2lvbnMgdG8gYmUgcHVzaGVkIGFyZSBhdmFpbGFibGUgb24gYXQgbGVhc3Qgb25lCisJcmVtb3RlIG9mIHRoZSBzdWJtb2R1bGUuIElmIGFueSBjb21taXRzIGFyZSBtaXNzaW5nIHRoZSBwdXNoIHdpbGwKKwliZSBhYm9ydGVkIGFuZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzLiBJZiAnb24tZGVtYW5kJyBpcyB1c2VkCisJYWxsIHN1Ym1vZHVsZXMgdGhhdCBjaGFuZ2VkIGluIHRoZSByZXZpc2lvbnMgdG8gYmUgcHVzaGVkIHdpbGwgYmUKKwlwdXNoZWQuIElmIG9uLWRlbWFuZCB3YXMgbm90IGFibGUgdG8gcHVzaCBhbGwgbmVjZXNzYXJ5IHJldmlzaW9ucyBpdCB3aWxsCisJYWxzbyBiZSBhYm9ydGVkIGFuZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzLiBJZiAnb25seScgaXMgdXNlZCBhbGwKKwlzdWJtb2R1bGVzIHdpbGwgYmUgcmVjdXJzaXZlbHkgcHVzaGVkIHdoaWxlIHRoZSBzdXBlcnByb2plY3QgaXMgbGVmdAorCXVucHVzaGVkLiBBIHZhbHVlIG9mICdubycgb3IgdXNpbmcgYC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzYCBjYW4gYmUgdXNlZAorCXRvIG92ZXJyaWRlIHRoZSBwdXNoLnJlY3Vyc2VTdWJtb2R1bGVzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2hlbiBubworCXN1Ym1vZHVsZSByZWN1cnNpb24gaXMgcmVxdWlyZWQuCisKKy0tW25vLV12ZXJpZnk6OgorCVRvZ2dsZSB0aGUgcHJlLXB1c2ggaG9vayAoc2VlIGxpbmtnaXQ6Z2l0aG9va3NbNV0pLiAgVGhlCisJZGVmYXVsdCBpcyAtLXZlcmlmeSwgZ2l2aW5nIHRoZSBob29rIGEgY2hhbmNlIHRvIHByZXZlbnQgdGhlCisJcHVzaC4gIFdpdGggLS1uby12ZXJpZnksIHRoZSBob29rIGlzIGJ5cGFzc2VkIGNvbXBsZXRlbHkuCisKKy00OjoKKy0taXB2NDo6CisJVXNlIElQdjQgYWRkcmVzc2VzIG9ubHksIGlnbm9yaW5nIElQdjYgYWRkcmVzc2VzLgorCistNjo6CistLWlwdjY6OgorCVVzZSBJUHY2IGFkZHJlc3NlcyBvbmx5LCBpZ25vcmluZyBJUHY0IGFkZHJlc3Nlcy4KKworaW5jbHVkZTo6dXJscy1yZW1vdGVzLnR4dFtdCisKK09VVFBVVAorLS0tLS0tCisKK1RoZSBvdXRwdXQgb2YgImdpdCBwdXNoIiBkZXBlbmRzIG9uIHRoZSB0cmFuc3BvcnQgbWV0aG9kIHVzZWQ7IHRoaXMKK3NlY3Rpb24gZGVzY3JpYmVzIHRoZSBvdXRwdXQgd2hlbiBwdXNoaW5nIG92ZXIgdGhlIEdpdCBwcm90b2NvbCAoZWl0aGVyCitsb2NhbGx5IG9yIHZpYSBzc2gpLgorCitUaGUgc3RhdHVzIG9mIHRoZSBwdXNoIGlzIG91dHB1dCBpbiB0YWJ1bGFyIGZvcm0sIHdpdGggZWFjaCBsaW5lCityZXByZXNlbnRpbmcgdGhlIHN0YXR1cyBvZiBhIHNpbmdsZSByZWYuIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDxmbGFnPiA8c3VtbWFyeT4gPGZyb20+IC0+IDx0bz4gKDxyZWFzb24+KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiAtLXBvcmNlbGFpbiBpcyB1c2VkLCB0aGVuIGVhY2ggbGluZSBvZiB0aGUgb3V0cHV0IGlzIG9mIHRoZSBmb3JtOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgPGZsYWc+IFx0IDxmcm9tPjo8dG8+IFx0IDxzdW1tYXJ5PiAoPHJlYXNvbj4pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzdGF0dXMgb2YgdXAtdG8tZGF0ZSByZWZzIGlzIHNob3duIG9ubHkgaWYgLS1wb3JjZWxhaW4gb3IgLS12ZXJib3NlCitvcHRpb24gaXMgdXNlZC4KKworZmxhZzo6CisJQSBzaW5nbGUgY2hhcmFjdGVyIGluZGljYXRpbmcgdGhlIHN0YXR1cyBvZiB0aGUgcmVmOgorKHNwYWNlKTs7IGZvciBhIHN1Y2Nlc3NmdWxseSBwdXNoZWQgZmFzdC1mb3J3YXJkOworYCtgOzsgZm9yIGEgc3VjY2Vzc2Z1bCBmb3JjZWQgdXBkYXRlOworYC1gOzsgZm9yIGEgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQgcmVmOworYCpgOzsgZm9yIGEgc3VjY2Vzc2Z1bGx5IHB1c2hlZCBuZXcgcmVmOworYCFgOzsgZm9yIGEgcmVmIHRoYXQgd2FzIHJlamVjdGVkIG9yIGZhaWxlZCB0byBwdXNoOyBhbmQKK2A9YDs7IGZvciBhIHJlZiB0aGF0IHdhcyB1cCB0byBkYXRlIGFuZCBkaWQgbm90IG5lZWQgcHVzaGluZy4KKworc3VtbWFyeTo6CisJRm9yIGEgc3VjY2Vzc2Z1bGx5IHB1c2hlZCByZWYsIHRoZSBzdW1tYXJ5IHNob3dzIHRoZSBvbGQgYW5kIG5ldworCXZhbHVlcyBvZiB0aGUgcmVmIGluIGEgZm9ybSBzdWl0YWJsZSBmb3IgdXNpbmcgYXMgYW4gYXJndW1lbnQgdG8KKwlgZ2l0IGxvZ2AgKHRoaXMgaXMgYDxvbGQ+Li48bmV3PmAgaW4gbW9zdCBjYXNlcywgYW5kCisJYDxvbGQ+Li4uPG5ldz5gIGZvciBmb3JjZWQgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzKS4KKysKK0ZvciBhIGZhaWxlZCB1cGRhdGUsIG1vcmUgZGV0YWlscyBhcmUgZ2l2ZW46CisrCistLQorcmVqZWN0ZWQ6OgorCUdpdCBkaWQgbm90IHRyeSB0byBzZW5kIHRoZSByZWYgYXQgYWxsLCB0eXBpY2FsbHkgYmVjYXVzZSBpdAorCWlzIG5vdCBhIGZhc3QtZm9yd2FyZCBhbmQgeW91IGRpZCBub3QgZm9yY2UgdGhlIHVwZGF0ZS4KKworcmVtb3RlIHJlamVjdGVkOjoKKwlUaGUgcmVtb3RlIGVuZCByZWZ1c2VkIHRoZSB1cGRhdGUuICBVc3VhbGx5IGNhdXNlZCBieSBhIGhvb2sKKwlvbiB0aGUgcmVtb3RlIHNpZGUsIG9yIGJlY2F1c2UgdGhlIHJlbW90ZSByZXBvc2l0b3J5IGhhcyBvbmUKKwlvZiB0aGUgZm9sbG93aW5nIHNhZmV0eSBvcHRpb25zIGluIGVmZmVjdDoKKwlgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaGAgKGZvciBwdXNoZXMgdG8gdGhlIGNoZWNrZWQgb3V0CisJYnJhbmNoKSwgYHJlY2VpdmUuZGVueU5vbkZhc3RGb3J3YXJkc2AgKGZvciBmb3JjZWQKKwlub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMpLCBgcmVjZWl2ZS5kZW55RGVsZXRlc2Agb3IKKwlgcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudGAuICBTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCityZW1vdGUgZmFpbHVyZTo6CisJVGhlIHJlbW90ZSBlbmQgZGlkIG5vdCByZXBvcnQgdGhlIHN1Y2Nlc3NmdWwgdXBkYXRlIG9mIHRoZSByZWYsCisJcGVyaGFwcyBiZWNhdXNlIG9mIGEgdGVtcG9yYXJ5IGVycm9yIG9uIHRoZSByZW1vdGUgc2lkZSwgYQorCWJyZWFrIGluIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24sIG9yIG90aGVyIHRyYW5zaWVudCBlcnJvci4KKy0tCisKK2Zyb206OgorCVRoZSBuYW1lIG9mIHRoZSBsb2NhbCByZWYgYmVpbmcgcHVzaGVkLCBtaW51cyBpdHMKKwlgcmVmcy88dHlwZT4vYCBwcmVmaXguIEluIHRoZSBjYXNlIG9mIGRlbGV0aW9uLCB0aGUKKwluYW1lIG9mIHRoZSBsb2NhbCByZWYgaXMgb21pdHRlZC4KKwordG86OgorCVRoZSBuYW1lIG9mIHRoZSByZW1vdGUgcmVmIGJlaW5nIHVwZGF0ZWQsIG1pbnVzIGl0cworCWByZWZzLzx0eXBlPi9gIHByZWZpeC4KKworcmVhc29uOjoKKwlBIGh1bWFuLXJlYWRhYmxlIGV4cGxhbmF0aW9uLiBJbiB0aGUgY2FzZSBvZiBzdWNjZXNzZnVsbHkgcHVzaGVkCisJcmVmcywgbm8gZXhwbGFuYXRpb24gaXMgbmVlZGVkLiBGb3IgYSBmYWlsZWQgcmVmLCB0aGUgcmVhc29uIGZvcgorCWZhaWx1cmUgaXMgZGVzY3JpYmVkLgorCitOT1RFIEFCT1VUIEZBU1QtRk9SV0FSRFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGFuIHVwZGF0ZSBjaGFuZ2VzIGEgYnJhbmNoIChvciBtb3JlIGluIGdlbmVyYWwsIGEgcmVmKSB0aGF0IHVzZWQgdG8KK3BvaW50IGF0IGNvbW1pdCBBIHRvIHBvaW50IGF0IGFub3RoZXIgY29tbWl0IEIsIGl0IGlzIGNhbGxlZCBhCitmYXN0LWZvcndhcmQgdXBkYXRlIGlmIGFuZCBvbmx5IGlmIEIgaXMgYSBkZXNjZW5kYW50IG9mIEEuCisKK0luIGEgZmFzdC1mb3J3YXJkIHVwZGF0ZSBmcm9tIEEgdG8gQiwgdGhlIHNldCBvZiBjb21taXRzIHRoYXQgdGhlIG9yaWdpbmFsCitjb21taXQgQSBidWlsdCBvbiB0b3Agb2YgaXMgYSBzdWJzZXQgb2YgdGhlIGNvbW1pdHMgdGhlIG5ldyBjb21taXQgQgorYnVpbGRzIG9uIHRvcCBvZi4gIEhlbmNlLCBpdCBkb2VzIG5vdCBsb3NlIGFueSBoaXN0b3J5LgorCitJbiBjb250cmFzdCwgYSBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZSB3aWxsIGxvc2UgaGlzdG9yeS4gIEZvciBleGFtcGxlLAorc3VwcG9zZSB5b3UgYW5kIHNvbWVib2R5IGVsc2Ugc3RhcnRlZCBhdCB0aGUgc2FtZSBjb21taXQgWCwgYW5kIHlvdSBidWlsdAorYSBoaXN0b3J5IGxlYWRpbmcgdG8gY29tbWl0IEIgd2hpbGUgdGhlIG90aGVyIHBlcnNvbiBidWlsdCBhIGhpc3RvcnkKK2xlYWRpbmcgdG8gY29tbWl0IEEuICBUaGUgaGlzdG9yeSBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgQgorICAgICAvCisgLS0tWC0tLUEKKworLS0tLS0tLS0tLS0tLS0tLQorCitGdXJ0aGVyIHN1cHBvc2UgdGhhdCB0aGUgb3RoZXIgcGVyc29uIGFscmVhZHkgcHVzaGVkIGNoYW5nZXMgbGVhZGluZyB0byBBCitiYWNrIHRvIHRoZSBvcmlnaW5hbCByZXBvc2l0b3J5IGZyb20gd2hpY2ggeW91IHR3byBvYnRhaW5lZCB0aGUgb3JpZ2luYWwKK2NvbW1pdCBYLgorCitUaGUgcHVzaCBkb25lIGJ5IHRoZSBvdGhlciBwZXJzb24gdXBkYXRlZCB0aGUgYnJhbmNoIHRoYXQgdXNlZCB0byBwb2ludCBhdAorY29tbWl0IFggdG8gcG9pbnQgYXQgY29tbWl0IEEuICBJdCBpcyBhIGZhc3QtZm9yd2FyZC4KKworQnV0IGlmIHlvdSB0cnkgdG8gcHVzaCwgeW91IHdpbGwgYXR0ZW1wdCB0byB1cGRhdGUgdGhlIGJyYW5jaCAodGhhdAorbm93IHBvaW50cyBhdCBBKSB3aXRoIGNvbW1pdCBCLiAgVGhpcyBkb2VzIF9ub3RfIGZhc3QtZm9yd2FyZC4gIElmIHlvdSBkaWQKK3NvLCB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBBIHdpbGwgYmUgbG9zdCwgYmVjYXVzZSBldmVyeWJvZHkKK3dpbGwgbm93IHN0YXJ0IGJ1aWxkaW5nIG9uIHRvcCBvZiBCLgorCitUaGUgY29tbWFuZCBieSBkZWZhdWx0IGRvZXMgbm90IGFsbG93IGFuIHVwZGF0ZSB0aGF0IGlzIG5vdCBhIGZhc3QtZm9yd2FyZAordG8gcHJldmVudCBzdWNoIGxvc3Mgb2YgaGlzdG9yeS4KKworSWYgeW91IGRvIG5vdCB3YW50IHRvIGxvc2UgeW91ciB3b3JrIChoaXN0b3J5IGZyb20gWCB0byBCKSBvciB0aGUgd29yayBieQordGhlIG90aGVyIHBlcnNvbiAoaGlzdG9yeSBmcm9tIFggdG8gQSksIHlvdSB3b3VsZCBuZWVkIHRvIGZpcnN0IGZldGNoIHRoZQoraGlzdG9yeSBmcm9tIHRoZSByZXBvc2l0b3J5LCBjcmVhdGUgYSBoaXN0b3J5IHRoYXQgY29udGFpbnMgY2hhbmdlcyBkb25lCitieSBib3RoIHBhcnRpZXMsIGFuZCBwdXNoIHRoZSByZXN1bHQgYmFjay4KKworWW91IGNhbiBwZXJmb3JtICJnaXQgcHVsbCIsIHJlc29sdmUgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kICJnaXQgcHVzaCIKK3RoZSByZXN1bHQuICBBICJnaXQgcHVsbCIgd2lsbCBjcmVhdGUgYSBtZXJnZSBjb21taXQgQyBiZXR3ZWVuIGNvbW1pdHMgQQorYW5kIEIuCisKKy0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgQi0tLUMKKyAgICAgLyAgIC8KKyAtLS1YLS0tQQorCistLS0tLS0tLS0tLS0tLS0tCisKK1VwZGF0aW5nIEEgd2l0aCB0aGUgcmVzdWx0aW5nIG1lcmdlIGNvbW1pdCB3aWxsIGZhc3QtZm9yd2FyZCBhbmQgeW91cgorcHVzaCB3aWxsIGJlIGFjY2VwdGVkLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHJlYmFzZSB5b3VyIGNoYW5nZSBiZXR3ZWVuIFggYW5kIEIgb24gdG9wIG9mIEEsCit3aXRoICJnaXQgcHVsbCAtLXJlYmFzZSIsIGFuZCBwdXNoIHRoZSByZXN1bHQgYmFjay4gIFRoZSByZWJhc2Ugd2lsbAorY3JlYXRlIGEgbmV3IGNvbW1pdCBEIHRoYXQgYnVpbGRzIHRoZSBjaGFuZ2UgYmV0d2VlbiBYIGFuZCBCIG9uIHRvcCBvZgorQS4KKworLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICBCICAgRAorICAgICAvICAgLworIC0tLVgtLS1BCisKKy0tLS0tLS0tLS0tLS0tLS0KKworQWdhaW4sIHVwZGF0aW5nIEEgd2l0aCB0aGlzIGNvbW1pdCB3aWxsIGZhc3QtZm9yd2FyZCBhbmQgeW91ciBwdXNoIHdpbGwgYmUKK2FjY2VwdGVkLgorCitUaGVyZSBpcyBhbm90aGVyIGNvbW1vbiBzaXR1YXRpb24gd2hlcmUgeW91IG1heSBlbmNvdW50ZXIgbm9uLWZhc3QtZm9yd2FyZAorcmVqZWN0aW9uIHdoZW4geW91IHRyeSB0byBwdXNoLCBhbmQgaXQgaXMgcG9zc2libGUgZXZlbiB3aGVuIHlvdSBhcmUKK3B1c2hpbmcgaW50byBhIHJlcG9zaXRvcnkgbm9ib2R5IGVsc2UgcHVzaGVzIGludG8uIEFmdGVyIHlvdSBwdXNoIGNvbW1pdAorQSB5b3Vyc2VsZiAoaW4gdGhlIGZpcnN0IHBpY3R1cmUgaW4gdGhpcyBzZWN0aW9uKSwgcmVwbGFjZSBpdCB3aXRoICJnaXQKK2NvbW1pdCAtLWFtZW5kIiB0byBwcm9kdWNlIGNvbW1pdCBCLCBhbmQgeW91IHRyeSB0byBwdXNoIGl0IG91dCwgYmVjYXVzZQorZm9yZ290IHRoYXQgeW91IGhhdmUgcHVzaGVkIEEgb3V0IGFscmVhZHkuIEluIHN1Y2ggYSBjYXNlLCBhbmQgb25seSBpZgoreW91IGFyZSBjZXJ0YWluIHRoYXQgbm9ib2R5IGluIHRoZSBtZWFudGltZSBmZXRjaGVkIHlvdXIgZWFybGllciBjb21taXQgQQorKGFuZCBzdGFydGVkIGJ1aWxkaW5nIG9uIHRvcCBvZiBpdCksIHlvdSBjYW4gcnVuICJnaXQgcHVzaCAtLWZvcmNlIiB0bworb3ZlcndyaXRlIGl0LiBJbiBvdGhlciB3b3JkcywgImdpdCBwdXNoIC0tZm9yY2UiIGlzIGEgbWV0aG9kIHJlc2VydmVkIGZvcgorYSBjYXNlIHdoZXJlIHlvdSBkbyBtZWFuIHRvIGxvc2UgaGlzdG9yeS4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworYGdpdCBwdXNoYDo6CisJV29ya3MgbGlrZSBgZ2l0IHB1c2ggPHJlbW90ZT5gLCB3aGVyZSA8cmVtb3RlPiBpcyB0aGUKKwljdXJyZW50IGJyYW5jaCdzIHJlbW90ZSAob3IgYG9yaWdpbmAsIGlmIG5vIHJlbW90ZSBpcworCWNvbmZpZ3VyZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCkuCisKK2BnaXQgcHVzaCBvcmlnaW5gOjoKKwlXaXRob3V0IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiwgcHVzaGVzIHRoZSBjdXJyZW50IGJyYW5jaCB0bworCXRoZSBjb25maWd1cmVkIHVwc3RyZWFtIChgcmVtb3RlLm9yaWdpbi5tZXJnZWAgY29uZmlndXJhdGlvbgorCXZhcmlhYmxlKSBpZiBpdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUgY3VycmVudCBicmFuY2gsIGFuZAorCWVycm9ycyBvdXQgd2l0aG91dCBwdXNoaW5nIG90aGVyd2lzZS4KKysKK1RoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoaXMgY29tbWFuZCB3aGVuIG5vIDxyZWZzcGVjPiBpcyBnaXZlbiBjYW4gYmUKK2NvbmZpZ3VyZWQgYnkgc2V0dGluZyB0aGUgYHB1c2hgIG9wdGlvbiBvZiB0aGUgcmVtb3RlLCBvciB0aGUgYHB1c2guZGVmYXVsdGAKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisrCitGb3IgZXhhbXBsZSwgdG8gZGVmYXVsdCB0byBwdXNoaW5nIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIGBvcmlnaW5gCit1c2UgYGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5wdXNoIEhFQURgLiAgQW55IHZhbGlkIDxyZWZzcGVjPiAobGlrZQordGhlIG9uZXMgaW4gdGhlIGV4YW1wbGVzIGJlbG93KSBjYW4gYmUgY29uZmlndXJlZCBhcyB0aGUgZGVmYXVsdCBmb3IKK2BnaXQgcHVzaCBvcmlnaW5gLgorCitgZ2l0IHB1c2ggb3JpZ2luIDpgOjoKKwlQdXNoICJtYXRjaGluZyIgYnJhbmNoZXMgdG8gYG9yaWdpbmAuIFNlZQorCTxyZWZzcGVjPiBpbiB0aGUgPDxPUFRJT05TLE9QVElPTlM+PiBzZWN0aW9uIGFib3ZlIGZvciBhCisJZGVzY3JpcHRpb24gb2YgIm1hdGNoaW5nIiBicmFuY2hlcy4KKworYGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXJgOjoKKwlGaW5kIGEgcmVmIHRoYXQgbWF0Y2hlcyBgbWFzdGVyYCBpbiB0aGUgc291cmNlIHJlcG9zaXRvcnkKKwkobW9zdCBsaWtlbHksIGl0IHdvdWxkIGZpbmQgYHJlZnMvaGVhZHMvbWFzdGVyYCksIGFuZCB1cGRhdGUKKwl0aGUgc2FtZSByZWYgKGUuZy4gYHJlZnMvaGVhZHMvbWFzdGVyYCkgaW4gYG9yaWdpbmAgcmVwb3NpdG9yeQorCXdpdGggaXQuICBJZiBgbWFzdGVyYCBkaWQgbm90IGV4aXN0IHJlbW90ZWx5LCBpdCB3b3VsZCBiZQorCWNyZWF0ZWQuCisKK2BnaXQgcHVzaCBvcmlnaW4gSEVBRGA6OgorCUEgaGFuZHkgd2F5IHRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBzYW1lIG5hbWUgb24gdGhlCisJcmVtb3RlLgorCitgZ2l0IHB1c2ggbW90aGVyc2hpcCBtYXN0ZXI6c2F0ZWxsaXRlL21hc3RlciBkZXY6c2F0ZWxsaXRlL2RldmA6OgorCVVzZSB0aGUgc291cmNlIHJlZiB0aGF0IG1hdGNoZXMgYG1hc3RlcmAgKGUuZy4gYHJlZnMvaGVhZHMvbWFzdGVyYCkKKwl0byB1cGRhdGUgdGhlIHJlZiB0aGF0IG1hdGNoZXMgYHNhdGVsbGl0ZS9tYXN0ZXJgIChtb3N0IHByb2JhYmx5CisJYHJlZnMvcmVtb3Rlcy9zYXRlbGxpdGUvbWFzdGVyYCkgaW4gdGhlIGBtb3RoZXJzaGlwYCByZXBvc2l0b3J5OworCWRvIHRoZSBzYW1lIGZvciBgZGV2YCBhbmQgYHNhdGVsbGl0ZS9kZXZgLgorKworU2VlIHRoZSBzZWN0aW9uIGRlc2NyaWJpbmcgYDxyZWZzcGVjPi4uLmAgYWJvdmUgZm9yIGEgZGlzY3Vzc2lvbiBvZgordGhlIG1hdGNoaW5nIHNlbWFudGljcy4KKysKK1RoaXMgaXMgdG8gZW11bGF0ZSBgZ2l0IGZldGNoYCBydW4gb24gdGhlIGBtb3RoZXJzaGlwYCB1c2luZyBgZ2l0CitwdXNoYCB0aGF0IGlzIHJ1biBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIGluIG9yZGVyIHRvIGludGVncmF0ZQordGhlIHdvcmsgZG9uZSBvbiBgc2F0ZWxsaXRlYCwgYW5kIGlzIG9mdGVuIG5lY2Vzc2FyeSB3aGVuIHlvdSBjYW4KK29ubHkgbWFrZSBjb25uZWN0aW9uIGluIG9uZSB3YXkgKGkuZS4gc2F0ZWxsaXRlIGNhbiBzc2ggaW50bworbW90aGVyc2hpcCBidXQgbW90aGVyc2hpcCBjYW5ub3QgaW5pdGlhdGUgY29ubmVjdGlvbiB0byBzYXRlbGxpdGUKK2JlY2F1c2UgdGhlIGxhdHRlciBpcyBiZWhpbmQgYSBmaXJld2FsbCBvciBkb2VzIG5vdCBydW4gc3NoZCkuCisrCitBZnRlciBydW5uaW5nIHRoaXMgYGdpdCBwdXNoYCBvbiB0aGUgYHNhdGVsbGl0ZWAgbWFjaGluZSwgeW91IHdvdWxkCitzc2ggaW50byB0aGUgYG1vdGhlcnNoaXBgIGFuZCBydW4gYGdpdCBtZXJnZWAgdGhlcmUgdG8gY29tcGxldGUgdGhlCitlbXVsYXRpb24gb2YgYGdpdCBwdWxsYCB0aGF0IHdlcmUgcnVuIG9uIGBtb3RoZXJzaGlwYCB0byBwdWxsIGNoYW5nZXMKK21hZGUgb24gYHNhdGVsbGl0ZWAuCisKK2BnaXQgcHVzaCBvcmlnaW4gSEVBRDptYXN0ZXJgOjoKKwlQdXNoIHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgcmVtb3RlIHJlZiBtYXRjaGluZyBgbWFzdGVyYCBpbiB0aGUKKwlgb3JpZ2luYCByZXBvc2l0b3J5LiBUaGlzIGZvcm0gaXMgY29udmVuaWVudCB0byBwdXNoIHRoZSBjdXJyZW50CisJYnJhbmNoIHdpdGhvdXQgdGhpbmtpbmcgYWJvdXQgaXRzIGxvY2FsIG5hbWUuCisKK2BnaXQgcHVzaCBvcmlnaW4gbWFzdGVyOnJlZnMvaGVhZHMvZXhwZXJpbWVudGFsYDo6CisJQ3JlYXRlIHRoZSBicmFuY2ggYGV4cGVyaW1lbnRhbGAgaW4gdGhlIGBvcmlnaW5gIHJlcG9zaXRvcnkKKwlieSBjb3B5aW5nIHRoZSBjdXJyZW50IGBtYXN0ZXJgIGJyYW5jaC4gIFRoaXMgZm9ybSBpcyBvbmx5CisJbmVlZGVkIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggb3IgdGFnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB3aGVuCisJdGhlIGxvY2FsIG5hbWUgYW5kIHRoZSByZW1vdGUgbmFtZSBhcmUgZGlmZmVyZW50OyBvdGhlcndpc2UsCisJdGhlIHJlZiBuYW1lIG9uIGl0cyBvd24gd2lsbCB3b3JrLgorCitgZ2l0IHB1c2ggb3JpZ2luIDpleHBlcmltZW50YWxgOjoKKwlGaW5kIGEgcmVmIHRoYXQgbWF0Y2hlcyBgZXhwZXJpbWVudGFsYCBpbiB0aGUgYG9yaWdpbmAgcmVwb3NpdG9yeQorCShlLmcuIGByZWZzL2hlYWRzL2V4cGVyaW1lbnRhbGApLCBhbmQgZGVsZXRlIGl0LgorCitgZ2l0IHB1c2ggb3JpZ2luICtkZXY6bWFzdGVyYDo6CisJVXBkYXRlIHRoZSBvcmlnaW4gcmVwb3NpdG9yeSdzIG1hc3RlciBicmFuY2ggd2l0aCB0aGUgZGV2IGJyYW5jaCwKKwlhbGxvd2luZyBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMuICAqVGhpcyBjYW4gbGVhdmUgdW5yZWZlcmVuY2VkCisJY29tbWl0cyBkYW5nbGluZyBpbiB0aGUgb3JpZ2luIHJlcG9zaXRvcnkuKiAgQ29uc2lkZXIgdGhlCisJZm9sbG93aW5nIHNpdHVhdGlvbiwgd2hlcmUgYSBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlOgorKworLS0tLQorCSAgICBvLS0tby0tLW8tLS1BLS0tQiAgb3JpZ2luL21hc3RlcgorCQkgICAgIFwKKwkJICAgICAgWC0tLVktLS1aICBkZXYKKy0tLS0KKysKK1RoZSBhYm92ZSBjb21tYW5kIHdvdWxkIGNoYW5nZSB0aGUgb3JpZ2luIHJlcG9zaXRvcnkgdG8KKysKKy0tLS0KKwkJICAgICAgQS0tLUIgICh1bm5hbWVkIGJyYW5jaCkKKwkJICAgICAvCisJICAgIG8tLS1vLS0tby0tLVgtLS1ZLS0tWiAgbWFzdGVyCistLS0tCisrCitDb21taXRzIEEgYW5kIEIgd291bGQgbm8gbG9uZ2VyIGJlbG9uZyB0byBhIGJyYW5jaCB3aXRoIGEgc3ltYm9saWMgbmFtZSwKK2FuZCBzbyB3b3VsZCBiZSB1bnJlYWNoYWJsZS4gIEFzIHN1Y2gsIHRoZXNlIGNvbW1pdHMgd291bGQgYmUgcmVtb3ZlZCBieQorYSBgZ2l0IGdjYCBjb21tYW5kIG9uIHRoZSBvcmlnaW4gcmVwb3NpdG9yeS4KKworaW5jbHVkZTo6dHJhbnNmZXItZGF0YS1sZWFrcy50eHRbXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXF1aWx0aW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXF1aWx0aW1wb3J0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDU2MmRjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcXVpbHRpbXBvcnQudHh0CkBAIC0wLDAgKzEsNjQgQEAKK2dpdC1xdWlsdGltcG9ydCgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1xdWlsdGltcG9ydCAtIEFwcGxpZXMgYSBxdWlsdCBwYXRjaHNldCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBxdWlsdGltcG9ydCcgWy0tZHJ5LXJ1biB8IC1uXSBbLS1hdXRob3IgPGF1dGhvcj5dIFstLXBhdGNoZXMgPGRpcj5dCisJCVstLXNlcmllcyA8ZmlsZT5dIFstLWtlZXAtbm9uLXBhdGNoXQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQXBwbGllcyBhIHF1aWx0IHBhdGNoc2V0IG9udG8gdGhlIGN1cnJlbnQgR2l0IGJyYW5jaCwgcHJlc2VydmluZwordGhlIHBhdGNoIGJvdW5kYXJpZXMsIHBhdGNoIG9yZGVyLCBhbmQgcGF0Y2ggZGVzY3JpcHRpb25zIHByZXNlbnQKK2luIHRoZSBxdWlsdCBwYXRjaHNldC4KKworRm9yIGVhY2ggcGF0Y2ggdGhlIGNvZGUgYXR0ZW1wdHMgdG8gZXh0cmFjdCB0aGUgYXV0aG9yIGZyb20gdGhlCitwYXRjaCBkZXNjcmlwdGlvbi4gIElmIHRoYXQgZmFpbHMgaXQgZmFsbHMgYmFjayB0byB0aGUgYXV0aG9yCitzcGVjaWZpZWQgd2l0aCAtLWF1dGhvci4gIElmIHRoZSAtLWF1dGhvciBmbGFnIHdhcyBub3QgZ2l2ZW4KK3RoZSBwYXRjaCBkZXNjcmlwdGlvbiBpcyBkaXNwbGF5ZWQgYW5kIHRoZSB1c2VyIGlzIGFza2VkIHRvCitpbnRlcmFjdGl2ZWx5IGVudGVyIHRoZSBhdXRob3Igb2YgdGhlIHBhdGNoLgorCitJZiBhIHN1YmplY3QgaXMgbm90IGZvdW5kIGluIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiB0aGUgcGF0Y2ggbmFtZSBpcworcHJlc2VydmVkIGFzIHRoZSAxIGxpbmUgc3ViamVjdCBpbiB0aGUgR2l0IGRlc2NyaXB0aW9uLgorCitPUFRJT05TCistLS0tLS0tCisKKy1uOjoKKy0tZHJ5LXJ1bjo6CisJV2FsayB0aHJvdWdoIHRoZSBwYXRjaGVzIGluIHRoZSBzZXJpZXMgYW5kIHdhcm4KKwlpZiB3ZSBjYW5ub3QgZmluZCBhbGwgb2YgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBjb21taXQKKwlhIHBhdGNoLiAgQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nIG9ubHkgbWlzc2luZyBhdXRob3IKKwlpbmZvcm1hdGlvbiBpcyB3YXJuZWQgYWJvdXQuCisKKy0tYXV0aG9yIEF1dGhvciBOYW1lIDxBdXRob3IgRW1haWw+OjoKKwlUaGUgYXV0aG9yIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3MgdG8gdXNlIHdoZW4gbm8gYXV0aG9yCisJaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBwYXRjaCBkZXNjcmlwdGlvbi4KKworLS1wYXRjaGVzIDxkaXI+OjoKKwlUaGUgZGlyZWN0b3J5IHRvIGZpbmQgdGhlIHF1aWx0IHBhdGNoZXMuCisrCitUaGUgZGVmYXVsdCBmb3IgdGhlIHBhdGNoIGRpcmVjdG9yeSBpcyBwYXRjaGVzCitvciB0aGUgdmFsdWUgb2YgdGhlIGAkUVVJTFRfUEFUQ0hFU2AgZW52aXJvbm1lbnQKK3ZhcmlhYmxlLgorCistLXNlcmllcyA8ZmlsZT46OgorCVRoZSBxdWlsdCBzZXJpZXMgZmlsZS4KKysKK1RoZSBkZWZhdWx0IGZvciB0aGUgc2VyaWVzIGZpbGUgaXMgPHBhdGNoZXM+L3Nlcmllcworb3IgdGhlIHZhbHVlIG9mIHRoZSBgJFFVSUxUX1NFUklFU2AgZW52aXJvbm1lbnQKK3ZhcmlhYmxlLgorCistLWtlZXAtbm9uLXBhdGNoOjoKKwlQYXNzIGAtYmAgZmxhZyB0byAnZ2l0IG1haWxpbmZvJyAoc2VlIGxpbmtnaXQ6Z2l0LW1haWxpbmZvWzFdKS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yYW5nZS1kaWZmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJhbmdlLWRpZmYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MDFjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yYW5nZS1kaWZmLnR4dApAQCAtMCwwICsxLDI3MyBAQAorZ2l0LXJhbmdlLWRpZmYoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yYW5nZS1kaWZmIC0gQ29tcGFyZSB0d28gY29tbWl0IHJhbmdlcyAoZS5nLiB0d28gdmVyc2lvbnMgb2YgYSBicmFuY2gpCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByYW5nZS1kaWZmJyBbLS1jb2xvcj1bPHdoZW4+XV0gWy0tbm8tY29sb3JdIFs8ZGlmZi1vcHRpb25zPl0KKwlbLS1uby1kdWFsLWNvbG9yXSBbLS1jcmVhdGlvbi1mYWN0b3I9PGZhY3Rvcj5dCisJKCA8cmFuZ2UxPiA8cmFuZ2UyPiB8IDxyZXYxPi4uLjxyZXYyPiB8IDxiYXNlPiA8cmV2MT4gPHJldjI+ICkKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgY29tbWFuZCBzaG93cyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gdmVyc2lvbnMgb2YgYSBwYXRjaAorc2VyaWVzLCBvciBtb3JlIGdlbmVyYWxseSwgdHdvIGNvbW1pdCByYW5nZXMgKGlnbm9yaW5nIG1lcmdlIGNvbW1pdHMpLgorCitUbyB0aGF0IGVuZCwgaXQgZmlyc3QgZmluZHMgcGFpcnMgb2YgY29tbWl0cyBmcm9tIGJvdGggY29tbWl0IHJhbmdlcwordGhhdCBjb3JyZXNwb25kIHdpdGggZWFjaCBvdGhlci4gVHdvIGNvbW1pdHMgYXJlIHNhaWQgdG8gY29ycmVzcG9uZCB3aGVuCit0aGUgZGlmZiBiZXR3ZWVuIHRoZWlyIHBhdGNoZXMgKGkuZS4gdGhlIGF1dGhvciBpbmZvcm1hdGlvbiwgdGhlIGNvbW1pdAorbWVzc2FnZSBhbmQgdGhlIGNvbW1pdCBkaWZmKSBpcyByZWFzb25hYmx5IHNtYWxsIGNvbXBhcmVkIHRvIHRoZQorcGF0Y2hlcycgc2l6ZS4gU2VlIGBgQWxnb3JpdGhtYGAgYmVsb3cgZm9yIGRldGFpbHMuCisKK0ZpbmFsbHksIHRoZSBsaXN0IG9mIG1hdGNoaW5nIGNvbW1pdHMgaXMgc2hvd24gaW4gdGhlIG9yZGVyIG9mIHRoZQorc2Vjb25kIGNvbW1pdCByYW5nZSwgd2l0aCB1bm1hdGNoZWQgY29tbWl0cyBiZWluZyBpbnNlcnRlZCBqdXN0IGFmdGVyCithbGwgb2YgdGhlaXIgYW5jZXN0b3JzIGhhdmUgYmVlbiBzaG93bi4KKworCitPUFRJT05TCistLS0tLS0tCistLW5vLWR1YWwtY29sb3I6OgorCVdoZW4gdGhlIGNvbW1pdCBkaWZmcyBkaWZmZXIsIGBnaXQgcmFuZ2UtZGlmZmAgcmVjcmVhdGVzIHRoZQorCW9yaWdpbmFsIGRpZmZzJyBjb2xvcmluZywgYW5kIGFkZHMgb3V0ZXIgLS8rIGRpZmYgbWFya2VycyB3aXRoCisJdGhlICpiYWNrZ3JvdW5kKiBiZWluZyByZWQvZ3JlZW4gdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2VlIGUuZy4KKwl3aGVuIHRoZXJlIHdhcyBhIGNoYW5nZSBpbiB3aGF0IGV4YWN0IGxpbmVzIHdlcmUgYWRkZWQuCisrCitBZGRpdGlvbmFsbHksIHRoZSBjb21taXQgZGlmZiBsaW5lcyB0aGF0IGFyZSBvbmx5IHByZXNlbnQgaW4gdGhlIGZpcnN0IGNvbW1pdAorcmFuZ2UgYXJlIHNob3duICJkaW1tZWQiICh0aGlzIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBgY29sb3IuZGlmZi48c2xvdD5gCitjb25maWcgc2V0dGluZyB3aGVyZSBgPHNsb3Q+YCBpcyBvbmUgb2YgYGNvbnRleHREaW1tZWRgLCBgb2xkRGltbWVkYCBhbmQKK2BuZXdEaW1tZWRgKSwgYW5kIHRoZSBjb21taXQgZGlmZiBsaW5lcyB0aGF0IGFyZSBvbmx5IHByZXNlbnQgaW4gdGhlIHNlY29uZAorY29tbWl0IHJhbmdlIGFyZSBzaG93biBpbiBib2xkICh3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgY29uZmlnCitzZXR0aW5ncyBgY29sb3IuZGlmZi48c2xvdD5gIHdpdGggYDxzbG90PmAgYmVpbmcgb25lIG9mIGBjb250ZXh0Qm9sZGAsCitgb2xkQm9sZGAgb3IgYG5ld0JvbGRgKS4KKysKK1RoaXMgaXMga25vd24gdG8gYHJhbmdlLWRpZmZgIGFzICJkdWFsIGNvbG9yaW5nIi4gVXNlIGAtLW5vLWR1YWwtY29sb3JgCit0byByZXZlcnQgdG8gY29sb3IgYWxsIGxpbmVzIGFjY29yZGluZyB0byB0aGUgb3V0ZXIgZGlmZiBtYXJrZXJzCisoYW5kIGNvbXBsZXRlbHkgaWdub3JlIHRoZSBpbm5lciBkaWZmIHdoZW4gaXQgY29tZXMgdG8gY29sb3IpLgorCistLWNyZWF0aW9uLWZhY3Rvcj08cGVyY2VudD46OgorCVNldCB0aGUgY3JlYXRpb24vZGVsZXRpb24gY29zdCBmdWRnZSBmYWN0b3IgdG8gYDxwZXJjZW50PmAuCisJRGVmYXVsdHMgdG8gNjAuIFRyeSBhIGxhcmdlciB2YWx1ZSBpZiBgZ2l0IHJhbmdlLWRpZmZgIGVycm9uZW91c2x5CisJY29uc2lkZXJzIGEgbGFyZ2UgY2hhbmdlIGEgdG90YWwgcmV3cml0ZSAoZGVsZXRpb24gb2Ygb25lIGNvbW1pdAorCWFuZCBhZGRpdGlvbiBvZiBhbm90aGVyKSwgYW5kIGEgc21hbGxlciBvbmUgaW4gdGhlIHJldmVyc2UgY2FzZS4KKwlTZWUgdGhlIGBgQWxnb3JpdGhtYGAgc2VjdGlvbiBiZWxvdyBmb3IgYW4gZXhwbGFuYXRpb24gd2h5IHRoaXMgaXMKKwluZWVkZWQuCisKKy0tW25vLV1ub3Rlc1s9PHJlZj5dOjoKKwlUaGlzIGZsYWcgaXMgcGFzc2VkIHRvIHRoZSBgZ2l0IGxvZ2AgcHJvZ3JhbQorCShzZWUgbGlua2dpdDpnaXQtbG9nWzFdKSB0aGF0IGdlbmVyYXRlcyB0aGUgcGF0Y2hlcy4KKworPHJhbmdlMT4gPHJhbmdlMj46OgorCUNvbXBhcmUgdGhlIGNvbW1pdHMgc3BlY2lmaWVkIGJ5IHRoZSB0d28gcmFuZ2VzLCB3aGVyZQorCWA8cmFuZ2UxPmAgaXMgY29uc2lkZXJlZCBhbiBvbGRlciB2ZXJzaW9uIG9mIGA8cmFuZ2UyPmAuCisKKzxyZXYxPi4uLjxyZXYyPjo6CisJRXF1aXZhbGVudCB0byBwYXNzaW5nIGA8cmV2Mj4uLjxyZXYxPmAgYW5kIGA8cmV2MT4uLjxyZXYyPmAuCisKKzxiYXNlPiA8cmV2MT4gPHJldjI+OjoKKwlFcXVpdmFsZW50IHRvIHBhc3NpbmcgYDxiYXNlPi4uPHJldjE+YCBhbmQgYDxiYXNlPi4uPHJldjI+YC4KKwlOb3RlIHRoYXQgYDxiYXNlPmAgZG9lcyBub3QgbmVlZCB0byBiZSB0aGUgZXhhY3QgYnJhbmNoIHBvaW50CisJb2YgdGhlIGJyYW5jaGVzLiBFeGFtcGxlOiBhZnRlciByZWJhc2luZyBhIGJyYW5jaCBgbXktdG9waWNgLAorCWBnaXQgcmFuZ2UtZGlmZiBteS10b3BpY0B7dX0gbXktdG9waWNAezF9IG15LXRvcGljYCB3b3VsZAorCXNob3cgdGhlIGRpZmZlcmVuY2VzIGludHJvZHVjZWQgYnkgdGhlIHJlYmFzZS4KKworYGdpdCByYW5nZS1kaWZmYCBhbHNvIGFjY2VwdHMgdGhlIHJlZ3VsYXIgZGlmZiBvcHRpb25zIChzZWUKK2xpbmtnaXQ6Z2l0LWRpZmZbMV0pLCBtb3N0IG5vdGFibHkgdGhlIGAtLWNvbG9yPVs8d2hlbj5dYCBhbmQKK2AtLW5vLWNvbG9yYCBvcHRpb25zLiBUaGVzZSBvcHRpb25zIGFyZSB1c2VkIHdoZW4gZ2VuZXJhdGluZyB0aGUgImRpZmYKK2JldHdlZW4gcGF0Y2hlcyIsIGkuZS4gdG8gY29tcGFyZSB0aGUgYXV0aG9yLCBjb21taXQgbWVzc2FnZSBhbmQgZGlmZiBvZgorY29ycmVzcG9uZGluZyBvbGQvbmV3IGNvbW1pdHMuIFRoZXJlIGlzIGN1cnJlbnRseSBubyBtZWFucyB0byB0d2VhayBtb3N0IG9mIHRoZQorZGlmZiBvcHRpb25zIHBhc3NlZCB0byBgZ2l0IGxvZ2Agd2hlbiBnZW5lcmF0aW5nIHRob3NlIHBhdGNoZXMuCisKK09VVFBVVCBTVEFCSUxJVFkKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG91dHB1dCBvZiB0aGUgYHJhbmdlLWRpZmZgIGNvbW1hbmQgaXMgc3ViamVjdCB0byBjaGFuZ2UuIEl0IGlzCitpbnRlbmRlZCB0byBiZSBodW1hbi1yZWFkYWJsZSBwb3JjZWxhaW4gb3V0cHV0LCBub3Qgc29tZXRoaW5nIHRoYXQgY2FuCitiZSB1c2VkIGFjcm9zcyB2ZXJzaW9ucyBvZiBHaXQgdG8gZ2V0IGEgdGV4dHVhbGx5IHN0YWJsZSBgcmFuZ2UtZGlmZmAKKyhhcyBvcHBvc2VkIHRvIHNvbWV0aGluZyBsaWtlIHRoZSBgLS1zdGFibGVgIG9wdGlvbiB0bworbGlua2dpdDpnaXQtcGF0Y2gtaWRbMV0pLiBUaGVyZSdzIGFsc28gbm8gZXF1aXZhbGVudCBvZgorbGlua2dpdDpnaXQtYXBwbHlbMV0gZm9yIGByYW5nZS1kaWZmYCwgdGhlIG91dHB1dCBpcyBub3QgaW50ZW5kZWQgdG8KK2JlIG1hY2hpbmUtcmVhZGFibGUuCisKK1RoaXMgaXMgcGFydGljdWxhcmx5IHRydWUgd2hlbiBwYXNzaW5nIGluIGRpZmYgb3B0aW9ucy4gQ3VycmVudGx5IHNvbWUKK29wdGlvbnMgbGlrZSBgLS1zdGF0YCBjYW4sIGFzIGFuIGVtZXJnZW50IGVmZmVjdCwgcHJvZHVjZSBvdXRwdXQKK3RoYXQncyBxdWl0ZSB1c2VsZXNzIGluIHRoZSBjb250ZXh0IG9mIGByYW5nZS1kaWZmYC4gRnV0dXJlIHZlcnNpb25zCitvZiBgcmFuZ2UtZGlmZmAgbWF5IGxlYXJuIHRvIGludGVycHJldCBzdWNoIG9wdGlvbnMgaW4gYSBtYW5uZXIKK3NwZWNpZmljIHRvIGByYW5nZS1kaWZmYCAoZS5nLiBmb3IgYC0tc3RhdGAgcHJvZHVjaW5nIGh1bWFuLXJlYWRhYmxlCitvdXRwdXQgd2hpY2ggc3VtbWFyaXplcyBob3cgdGhlIGRpZmZzdGF0IGNoYW5nZWQpLgorCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgdXNlcyB0aGUgYGRpZmYuY29sb3IuKmAgYW5kIGBwYWdlci5yYW5nZS1kaWZmYCBzZXR0aW5ncworKHRoZSBsYXR0ZXIgaXMgb24gYnkgZGVmYXVsdCkuCitTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitXaGVuIGEgcmViYXNlIHJlcXVpcmVkIG1lcmdlIGNvbmZsaWN0cyB0byBiZSByZXNvbHZlZCwgY29tcGFyZSB0aGUgY2hhbmdlcworaW50cm9kdWNlZCBieSB0aGUgcmViYXNlIGRpcmVjdGx5IGFmdGVyd2FyZHMgdXNpbmc6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmFuZ2UtZGlmZiBAe3V9IEB7MX0gQAorLS0tLS0tLS0tLS0tCisKKworQSB0eXBpY2FsIG91dHB1dCBvZiBgZ2l0IHJhbmdlLWRpZmZgIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKy06ICAtLS0tLS0tID4gMTogIDBkZGJhMTEgUHJlcGFyZSBmb3IgdGhlIGluZXZpdGFibGUhCisxOiAgYzBkZWJlZSA9IDI6ICBjYWIwMDVlIEFkZCBhIGhlbHBmdWwgbWVzc2FnZSBhdCB0aGUgc3RhcnQKKzI6ICBmMDBkYmFsICEgMzogIGRlY2FmZTEgRGVzY3JpYmUgYSBidWcKKyAgICBAQCAtMSwzICsxLDMgQEAKKyAgICAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCisgICAgLVRPRE86IERlc2NyaWJlIGEgYnVnCisgICAgK0Rlc2NyaWJlIGEgYnVnCisgICAgQEAgLTMyNCw1ICszMjQsNgorICAgICAgVGhpcyBpcyBleHBlY3RlZC4KKworICAgIC0rV2hhdCBpcyB1bmV4cGVjdGVkIGlzIHRoYXQgaXQgd2lsbCBhbHNvIGNyYXNoLgorICAgICsrVW5leHBlY3RlZGx5LCBpdCBhbHNvIGNyYXNoZXMuIFRoaXMgaXMgYSBidWcsIGFuZCB0aGUganVyeSBpcworICAgICsrc3RpbGwgb3V0IHRoZXJlIGhvdyB0byBmaXggaXQgYmVzdC4gU2VlIHRpY2tldCAjMzE0IGZvciBkZXRhaWxzLgorCisgICAgICBDb250YWN0CiszOiAgYmVkZWFkIDwgLTogIC0tLS0tLS0gVE8tVU5ETworLS0tLS0tLS0tLS0tCisKK0luIHRoaXMgZXhhbXBsZSwgdGhlcmUgYXJlIDMgb2xkIGFuZCAzIG5ldyBjb21taXRzLCB3aGVyZSB0aGUgZGV2ZWxvcGVyCityZW1vdmVkIHRoZSAzcmQsIGFkZGVkIGEgbmV3IG9uZSBiZWZvcmUgdGhlIGZpcnN0IHR3bywgYW5kIG1vZGlmaWVkIHRoZQorY29tbWl0IG1lc3NhZ2Ugb2YgdGhlIDJuZCBjb21taXQgYXMgd2VsbCBpdHMgZGlmZi4KKworV2hlbiB0aGUgb3V0cHV0IGdvZXMgdG8gYSB0ZXJtaW5hbCwgaXQgaXMgY29sb3ItY29kZWQgYnkgZGVmYXVsdCwganVzdAorbGlrZSByZWd1bGFyIGBnaXQgZGlmZmAncyBvdXRwdXQuIEluIGFkZGl0aW9uLCB0aGUgZmlyc3QgbGluZSAoYWRkaW5nIGEKK2NvbW1pdCkgaXMgZ3JlZW4sIHRoZSBsYXN0IGxpbmUgKGRlbGV0aW5nIGEgY29tbWl0KSBpcyByZWQsIHRoZSBzZWNvbmQKK2xpbmUgKHdpdGggYSBwZXJmZWN0IG1hdGNoKSBpcyB5ZWxsb3cgbGlrZSB0aGUgY29tbWl0IGhlYWRlciBvZiBgZ2l0CitzaG93YCdzIG91dHB1dCwgYW5kIHRoZSB0aGlyZCBsaW5lIGNvbG9ycyB0aGUgb2xkIGNvbW1pdCByZWQsIHRoZSBuZXcKK29uZSBncmVlbiBhbmQgdGhlIHJlc3QgbGlrZSBgZ2l0IHNob3dgJ3MgY29tbWl0IGhlYWRlci4KKworQSBuYWl2ZSBjb2xvci1jb2RlZCBkaWZmIG9mIGRpZmZzIGlzIGFjdHVhbGx5IGEgYml0IGhhcmQgdG8gcmVhZCwKK3Rob3VnaCwgYXMgaXQgY29sb3JzIHRoZSBlbnRpcmUgbGluZXMgcmVkIG9yIGdyZWVuLiBUaGUgbGluZSB0aGF0IGFkZGVkCisiV2hhdCBpcyB1bmV4cGVjdGVkIiBpbiB0aGUgb2xkIGNvbW1pdCwgZm9yIGV4YW1wbGUsIGlzIGNvbXBsZXRlbHkgcmVkLAorZXZlbiBpZiB0aGUgaW50ZW50IG9mIHRoZSBvbGQgY29tbWl0IHdhcyB0byBhZGQgc29tZXRoaW5nLgorCitUbyBoZWxwIHdpdGggdGhhdCwgYHJhbmdlYCB1c2VzIHRoZSBgLS1kdWFsLWNvbG9yYCBtb2RlIGJ5IGRlZmF1bHQuIEluCit0aGlzIG1vZGUsIHRoZSBkaWZmIG9mIGRpZmZzIHdpbGwgcmV0YWluIHRoZSBvcmlnaW5hbCBkaWZmIGNvbG9ycywgYW5kCitwcmVmaXggdGhlIGxpbmVzIHdpdGggLS8rIG1hcmtlcnMgdGhhdCBoYXZlIHRoZWlyICpiYWNrZ3JvdW5kKiByZWQgb3IKK2dyZWVuLCB0byBtYWtlIGl0IG1vcmUgb2J2aW91cyB0aGF0IHRoZXkgZGVzY3JpYmUgaG93IHRoZSBkaWZmIGl0c2VsZgorY2hhbmdlZC4KKworCitBbGdvcml0aG0KKy0tLS0tLS0tLQorCitUaGUgZ2VuZXJhbCBpZGVhIGlzIHRoaXM6IHdlIGdlbmVyYXRlIGEgY29zdCBtYXRyaXggYmV0d2VlbiB0aGUgY29tbWl0cworaW4gYm90aCBjb21taXQgcmFuZ2VzLCB0aGVuIHNvbHZlIHRoZSBsZWFzdC1jb3N0IGFzc2lnbm1lbnQuCisKK1RoZSBjb3N0IG1hdHJpeCBpcyBwb3B1bGF0ZWQgdGh1c2x5OiBmb3IgZWFjaCBwYWlyIG9mIGNvbW1pdHMsIGJvdGgKK2RpZmZzIGFyZSBnZW5lcmF0ZWQgYW5kIHRoZSAiZGlmZiBvZiBkaWZmcyIgaXMgZ2VuZXJhdGVkLCB3aXRoIDMgY29udGV4dAorbGluZXMsIHRoZW4gdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGF0IGRpZmYgaXMgdXNlZCBhcyBjb3N0LgorCitUbyBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMgKGUuZy4gd2hlbiBhIHBhdGNoIGhhcyBiZWVuIHJlbW92ZWQsIGFuZCBhbgordW5yZWxhdGVkIHBhdGNoIGhhcyBiZWVuIGFkZGVkIGJldHdlZW4gdHdvIGl0ZXJhdGlvbnMgb2YgdGhlIHNhbWUgcGF0Y2gKK3NlcmllcyksIHRoZSBjb3N0IG1hdHJpeCBpcyBleHRlbmRlZCB0byBhbGxvdyBmb3IgdGhhdCwgYnkgYWRkaW5nCitmaXhlZC1jb3N0IGVudHJpZXMgZm9yIHdob2xlc2FsZSBkZWxldGVzL2FkZHMuCisKK0V4YW1wbGU6IExldCBjb21taXRzIGAxLS0yYCBiZSB0aGUgZmlyc3QgaXRlcmF0aW9uIG9mIGEgcGF0Y2ggc2VyaWVzIGFuZAorYEEtLUNgIHRoZSBzZWNvbmQgaXRlcmF0aW9uLiBMZXQncyBhc3N1bWUgdGhhdCBgQWAgaXMgYSBjaGVycnktcGljayBvZgorYDIsYCBhbmQgYENgIGlzIGEgY2hlcnJ5LXBpY2sgb2YgYDFgIGJ1dCB3aXRoIGEgc21hbGwgbW9kaWZpY2F0aW9uIChzYXksCithIGZpeGVkIHR5cG8pLiBWaXN1YWxpemUgdGhlIGNvbW1pdHMgYXMgYSBiaXBhcnRpdGUgZ3JhcGg6CisKKy0tLS0tLS0tLS0tLQorICAgIDEgICAgICAgICAgICBBCisKKyAgICAyICAgICAgICAgICAgQgorCisJCSBDCistLS0tLS0tLS0tLS0KKworV2UgYXJlIGxvb2tpbmcgZm9yIGEgImJlc3QiIGV4cGxhbmF0aW9uIG9mIHRoZSBuZXcgc2VyaWVzIGluIHRlcm1zIG9mCit0aGUgb2xkIG9uZS4gV2UgY2FuIHJlcHJlc2VudCBhbiAiZXhwbGFuYXRpb24iIGFzIGFuIGVkZ2UgaW4gdGhlIGdyYXBoOgorCisKKy0tLS0tLS0tLS0tLQorICAgIDEgICAgICAgICAgICBBCisJICAgICAgIC8KKyAgICAyIC0tLS0tLS0tJyAgQgorCisJCSBDCistLS0tLS0tLS0tLS0KKworVGhpcyBleHBsYW5hdGlvbiBjb21lcyBmb3IgImZyZWUiIGJlY2F1c2UgdGhlcmUgd2FzIG5vIGNoYW5nZS4gU2ltaWxhcmx5CitgQ2AgY291bGQgYmUgZXhwbGFpbmVkIHVzaW5nIGAxYCwgYnV0IHRoYXQgY29tZXMgYXQgc29tZSBjb3N0IGM+MAorYmVjYXVzZSBvZiB0aGUgbW9kaWZpY2F0aW9uOgorCistLS0tLS0tLS0tLS0KKyAgICAxIC0tLS0uICAgICAgQQorCSAgfCAgICAvCisgICAgMiAtLS0tKy0tLScgIEIKKwkgIHwKKwkgIGAtLS0tLSBDCisJICBjPjAKKy0tLS0tLS0tLS0tLQorCitJbiBtYXRoZW1hdGljYWwgdGVybXMsIHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yIGlzIHNvbWUgc29ydCBvZiBhIG1pbmltdW0KK2Nvc3QgYmlwYXJ0aXRlIG1hdGNoaW5nOyBgMWAgaXMgbWF0Y2hlZCB0byBgQ2AgYXQgc29tZSBjb3N0LCBldGMuIFRoZQordW5kZXJseWluZyBncmFwaCBpcyBpbiBmYWN0IGEgY29tcGxldGUgYmlwYXJ0aXRlIGdyYXBoOyB0aGUgY29zdCB3ZQorYXNzb2NpYXRlIHdpdGggZXZlcnkgZWRnZSBpcyB0aGUgc2l6ZSBvZiB0aGUgZGlmZiBiZXR3ZWVuIHRoZSB0d28KK2NvbW1pdHMnIHBhdGNoZXMuIFRvIGV4cGxhaW4gYWxzbyBuZXcgY29tbWl0cywgd2UgaW50cm9kdWNlIGR1bW15IG5vZGVzCitvbiBib3RoIHNpZGVzOgorCistLS0tLS0tLS0tLS0KKyAgICAxIC0tLS0uICAgICAgQQorCSAgfCAgICAvCisgICAgMiAtLS0tKy0tLScgIEIKKwkgIHwKKyAgICBvICAgICBgLS0tLS0gQworCSAgYz4wCisgICAgbyAgICAgICAgICAgIG8KKworICAgIG8gICAgICAgICAgICBvCistLS0tLS0tLS0tLS0KKworVGhlIGNvc3Qgb2YgYW4gZWRnZSBgby0tQ2AgaXMgdGhlIHNpemUgb2YgYENgJ3MgZGlmZiwgbW9kaWZpZWQgYnkgYQorZnVkZ2UgZmFjdG9yIHRoYXQgc2hvdWxkIGJlIHNtYWxsZXIgdGhhbiAxMDAlLiBUaGUgY29zdCBvZiBhbiBlZGdlCitgby0tb2AgaXMgZnJlZS4gVGhlIGZ1ZGdlIGZhY3RvciBpcyBuZWNlc3NhcnkgYmVjYXVzZSBldmVuIGlmIGAxYCBhbmQKK2BDYCBoYXZlIG5vdGhpbmcgaW4gY29tbW9uLCB0aGV5IG1heSBzdGlsbCBzaGFyZSBhIGZldyBlbXB0eSBsaW5lcyBhbmQKK3N1Y2gsIHBvc3NpYmx5IG1ha2luZyB0aGUgYXNzaWdubWVudCBgMS0tQ2AsIGBvLS1vYCBzbGlnaHRseSBjaGVhcGVyCit0aGFuIGAxLS1vYCwgYG8tLUNgIGV2ZW4gaWYgYDFgIGFuZCBgQ2AgaGF2ZSBub3RoaW5nIGluIGNvbW1vbi4gV2l0aCB0aGUKK2Z1ZGdlIGZhY3RvciB3ZSByZXF1aXJlIGEgbXVjaCBsYXJnZXIgY29tbW9uIHBhcnQgdG8gY29uc2lkZXIgcGF0Y2hlcyBhcworY29ycmVzcG9uZGluZy4KKworVGhlIG92ZXJhbGwgdGltZSBuZWVkZWQgdG8gY29tcHV0ZSB0aGlzIGFsZ29yaXRobSBpcyB0aGUgdGltZSBuZWVkZWQgdG8KK2NvbXB1dGUgbittIGNvbW1pdCBkaWZmcyBhbmQgdGhlbiBuKm0gZGlmZnMgb2YgcGF0Y2hlcywgcGx1cyB0aGUgdGltZQorbmVlZGVkIHRvIGNvbXB1dGUgdGhlIGxlYXN0LWNvc3QgYXNzaWdubWVudCBiZXR3ZWVuIG4gYW5kIG0gZGlmZnMuIEdpdAordXNlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSm9ua2VyLVZvbGdlbmFudCBhbGdvcml0aG0gdG8gc29sdmUgdGhlCithc3NpZ25tZW50IHByb2JsZW0sIHdoaWNoIGhhcyBjdWJpYyBydW50aW1lIGNvbXBsZXhpdHkuIFRoZSBtYXRjaGluZworZm91bmQgaW4gdGhpcyBjYXNlIHdpbGwgbG9vayBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorICAgIDEgLS0tLS4gICAgICBBCisJICB8ICAgIC8KKyAgICAyIC0tLS0rLS0tJyAgQgorICAgICAgIC4tLSstLS0tLScKKyAgICBvIC0nICBgLS0tLS0gQworCSAgYz4wCisgICAgbyAtLS0tLS0tLS0tIG8KKworICAgIG8gLS0tLS0tLS0tLSBvCistLS0tLS0tLS0tLS0KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWxvZ1sxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlYWQtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYThiYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0CkBAIC0wLDAgKzEsNDQzIEBACitnaXQtcmVhZC10cmVlKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZWFkLXRyZWUgLSBSZWFkcyB0cmVlIGluZm9ybWF0aW9uIGludG8gdGhlIGluZGV4CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJlYWQtdHJlZScgW1stbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4Pl0KKwkJWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dCisJCVstLWluZGV4LW91dHB1dD08ZmlsZT5dIFstLW5vLXNwYXJzZS1jaGVja291dF0KKwkJKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkcyB0aGUgdHJlZSBpbmZvcm1hdGlvbiBnaXZlbiBieSA8dHJlZS1pc2g+IGludG8gdGhlIGluZGV4LAorYnV0IGRvZXMgbm90IGFjdHVhbGx5ICp1cGRhdGUqIGFueSBvZiB0aGUgZmlsZXMgaXQgImNhY2hlcyIuIChzZWU6CitsaW5rZ2l0OmdpdC1jaGVja291dC1pbmRleFsxXSkKKworT3B0aW9uYWxseSwgaXQgY2FuIG1lcmdlIGEgdHJlZSBpbnRvIHRoZSBpbmRleCwgcGVyZm9ybSBhCitmYXN0LWZvcndhcmQgKGkuZS4gMi13YXkpIG1lcmdlLCBvciBhIDMtd2F5IG1lcmdlLCB3aXRoIHRoZSBgLW1gCitmbGFnLiAgV2hlbiB1c2VkIHdpdGggYC1tYCwgdGhlIGAtdWAgZmxhZyBjYXVzZXMgaXQgdG8gYWxzbyB1cGRhdGUKK3RoZSBmaWxlcyBpbiB0aGUgd29yayB0cmVlIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuCisKK1RyaXZpYWwgbWVyZ2VzIGFyZSBkb25lIGJ5ICdnaXQgcmVhZC10cmVlJyBpdHNlbGYuICBPbmx5IGNvbmZsaWN0aW5nIHBhdGhzCit3aWxsIGJlIGluIHVubWVyZ2VkIHN0YXRlIHdoZW4gJ2dpdCByZWFkLXRyZWUnIHJldHVybnMuCisKK09QVElPTlMKKy0tLS0tLS0KKy1tOjoKKwlQZXJmb3JtIGEgbWVyZ2UsIG5vdCBqdXN0IGEgcmVhZC4gIFRoZSBjb21tYW5kIHdpbGwKKwlyZWZ1c2UgdG8gcnVuIGlmIHlvdXIgaW5kZXggZmlsZSBoYXMgdW5tZXJnZWQgZW50cmllcywKKwlpbmRpY2F0aW5nIHRoYXQgeW91IGhhdmUgbm90IGZpbmlzaGVkIHByZXZpb3VzIG1lcmdlIHlvdQorCXN0YXJ0ZWQuCisKKy0tcmVzZXQ6OgorCVNhbWUgYXMgLW0sIGV4Y2VwdCB0aGF0IHVubWVyZ2VkIGVudHJpZXMgYXJlIGRpc2NhcmRlZCBpbnN0ZWFkCisJb2YgZmFpbGluZy4gV2hlbiB1c2VkIHdpdGggYC11YCwgdXBkYXRlcyBsZWFkaW5nIHRvIGxvc3Mgb2YKKwl3b3JraW5nIHRyZWUgY2hhbmdlcyB3aWxsIG5vdCBhYm9ydCB0aGUgb3BlcmF0aW9uLgorCistdTo6CisJQWZ0ZXIgYSBzdWNjZXNzZnVsIG1lcmdlLCB1cGRhdGUgdGhlIGZpbGVzIGluIHRoZSB3b3JrCisJdHJlZSB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlLgorCistaTo6CisJVXN1YWxseSBhIG1lcmdlIHJlcXVpcmVzIHRoZSBpbmRleCBmaWxlIGFzIHdlbGwgYXMgdGhlCisJZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byBiZSB1cCB0byBkYXRlIHdpdGggdGhlCisJY3VycmVudCBoZWFkIGNvbW1pdCwgaW4gb3JkZXIgbm90IHRvIGxvc2UgbG9jYWwKKwljaGFuZ2VzLiAgVGhpcyBmbGFnIGRpc2FibGVzIHRoZSBjaGVjayB3aXRoIHRoZSB3b3JraW5nCisJdHJlZSBhbmQgaXMgbWVhbnQgdG8gYmUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgbWVyZ2Ugb2YKKwl0cmVlcyB0aGF0IGFyZSBub3QgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgY3VycmVudAorCXdvcmtpbmcgdHJlZSBzdGF0dXMgaW50byBhIHRlbXBvcmFyeSBpbmRleCBmaWxlLgorCistbjo6CistLWRyeS1ydW46OgorCUNoZWNrIGlmIHRoZSBjb21tYW5kIHdvdWxkIGVycm9yIG91dCwgd2l0aG91dCB1cGRhdGluZyB0aGUgaW5kZXgKKwlvciB0aGUgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBmb3IgcmVhbC4KKworLXY6OgorCVNob3cgdGhlIHByb2dyZXNzIG9mIGNoZWNraW5nIGZpbGVzIG91dC4KKworLS10cml2aWFsOjoKKwlSZXN0cmljdCB0aHJlZS13YXkgbWVyZ2UgYnkgJ2dpdCByZWFkLXRyZWUnIHRvIGhhcHBlbgorCW9ubHkgaWYgdGhlcmUgaXMgbm8gZmlsZS1sZXZlbCBtZXJnaW5nIHJlcXVpcmVkLCBpbnN0ZWFkCisJb2YgcmVzb2x2aW5nIG1lcmdlIGZvciB0cml2aWFsIGNhc2VzIGFuZCBsZWF2aW5nCisJY29uZmxpY3RpbmcgZmlsZXMgdW5yZXNvbHZlZCBpbiB0aGUgaW5kZXguCisKKy0tYWdncmVzc2l2ZTo6CisJVXN1YWxseSBhIHRocmVlLXdheSBtZXJnZSBieSAnZ2l0IHJlYWQtdHJlZScgcmVzb2x2ZXMKKwl0aGUgbWVyZ2UgZm9yIHJlYWxseSB0cml2aWFsIGNhc2VzIGFuZCBsZWF2ZXMgb3RoZXIKKwljYXNlcyB1bnJlc29sdmVkIGluIHRoZSBpbmRleCwgc28gdGhhdCBwb3JjZWxhaW5zIGNhbgorCWltcGxlbWVudCBkaWZmZXJlbnQgbWVyZ2UgcG9saWNpZXMuICBUaGlzIGZsYWcgbWFrZXMgdGhlCisJY29tbWFuZCByZXNvbHZlIGEgZmV3IG1vcmUgY2FzZXMgaW50ZXJuYWxseToKKysKKyogd2hlbiBvbmUgc2lkZSByZW1vdmVzIGEgcGF0aCBhbmQgdGhlIG90aGVyIHNpZGUgbGVhdmVzIHRoZSBwYXRoCisgIHVubW9kaWZpZWQuICBUaGUgcmVzb2x1dGlvbiBpcyB0byByZW1vdmUgdGhhdCBwYXRoLgorKiB3aGVuIGJvdGggc2lkZXMgcmVtb3ZlIGEgcGF0aC4gIFRoZSByZXNvbHV0aW9uIGlzIHRvIHJlbW92ZSB0aGF0IHBhdGguCisqIHdoZW4gYm90aCBzaWRlcyBhZGQgYSBwYXRoIGlkZW50aWNhbGx5LiAgVGhlIHJlc29sdXRpb24KKyAgaXMgdG8gYWRkIHRoYXQgcGF0aC4KKworLS1wcmVmaXg9PHByZWZpeD46OgorCUtlZXAgdGhlIGN1cnJlbnQgaW5kZXggY29udGVudHMsIGFuZCByZWFkIHRoZSBjb250ZW50cworCW9mIHRoZSBuYW1lZCB0cmVlLWlzaCB1bmRlciB0aGUgZGlyZWN0b3J5IGF0IGA8cHJlZml4PmAuCisJVGhlIGNvbW1hbmQgd2lsbCByZWZ1c2UgdG8gb3ZlcndyaXRlIGVudHJpZXMgdGhhdCBhbHJlYWR5CisJZXhpc3RlZCBpbiB0aGUgb3JpZ2luYWwgaW5kZXggZmlsZS4KKworLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT46OgorCVdoZW4gcnVubmluZyB0aGUgY29tbWFuZCB3aXRoIGAtdWAgYW5kIGAtbWAgb3B0aW9ucywgdGhlCisJbWVyZ2UgcmVzdWx0IG1heSBuZWVkIHRvIG92ZXJ3cml0ZSBwYXRocyB0aGF0IGFyZSBub3QKKwl0cmFja2VkIGluIHRoZSBjdXJyZW50IGJyYW5jaC4gIFRoZSBjb21tYW5kIHVzdWFsbHkKKwlyZWZ1c2VzIHRvIHByb2NlZWQgd2l0aCB0aGUgbWVyZ2UgdG8gYXZvaWQgbG9zaW5nIHN1Y2ggYQorCXBhdGguICBIb3dldmVyIHRoaXMgc2FmZXR5IHZhbHZlIHNvbWV0aW1lcyBnZXRzIGluIHRoZQorCXdheS4gIEZvciBleGFtcGxlLCBpdCBvZnRlbiBoYXBwZW5zIHRoYXQgdGhlIG90aGVyCisJYnJhbmNoIGFkZGVkIGEgZmlsZSB0aGF0IHVzZWQgdG8gYmUgYSBnZW5lcmF0ZWQgZmlsZSBpbgorCXlvdXIgYnJhbmNoLCBhbmQgdGhlIHNhZmV0eSB2YWx2ZSB0cmlnZ2VycyB3aGVuIHlvdSB0cnkKKwl0byBzd2l0Y2ggdG8gdGhhdCBicmFuY2ggYWZ0ZXIgeW91IHJhbiBgbWFrZWAgYnV0IGJlZm9yZQorCXJ1bm5pbmcgYG1ha2UgY2xlYW5gIHRvIHJlbW92ZSB0aGUgZ2VuZXJhdGVkIGZpbGUuICBUaGlzCisJb3B0aW9uIHRlbGxzIHRoZSBjb21tYW5kIHRvIHJlYWQgcGVyLWRpcmVjdG9yeSBleGNsdWRlCisJZmlsZSAodXN1YWxseSAnLmdpdGlnbm9yZScpIGFuZCBhbGxvd3Mgc3VjaCBhbiB1bnRyYWNrZWQKKwlidXQgZXhwbGljaXRseSBpZ25vcmVkIGZpbGUgdG8gYmUgb3ZlcndyaXR0ZW4uCisKKy0taW5kZXgtb3V0cHV0PTxmaWxlPjo6CisJSW5zdGVhZCBvZiB3cml0aW5nIHRoZSByZXN1bHRzIG91dCB0byBgJEdJVF9JTkRFWF9GSUxFYCwKKwl3cml0ZSB0aGUgcmVzdWx0aW5nIGluZGV4IGluIHRoZSBuYW1lZCBmaWxlLiAgV2hpbGUgdGhlCisJY29tbWFuZCBpcyBvcGVyYXRpbmcsIHRoZSBvcmlnaW5hbCBpbmRleCBmaWxlIGlzIGxvY2tlZAorCXdpdGggdGhlIHNhbWUgbWVjaGFuaXNtIGFzIHVzdWFsLiAgVGhlIGZpbGUgbXVzdCBhbGxvdworCXRvIGJlIHJlbmFtZSgyKWVkIGludG8gZnJvbSBhIHRlbXBvcmFyeSBmaWxlIHRoYXQgaXMKKwljcmVhdGVkIG5leHQgdG8gdGhlIHVzdWFsIGluZGV4IGZpbGU7IHR5cGljYWxseSB0aGlzCisJbWVhbnMgaXQgbmVlZHMgdG8gYmUgb24gdGhlIHNhbWUgZmlsZXN5c3RlbSBhcyB0aGUgaW5kZXgKKwlmaWxlIGl0c2VsZiwgYW5kIHlvdSBuZWVkIHdyaXRlIHBlcm1pc3Npb24gdG8gdGhlCisJZGlyZWN0b3JpZXMgdGhlIGluZGV4IGZpbGUgYW5kIGluZGV4IG91dHB1dCBmaWxlIGFyZQorCWxvY2F0ZWQgaW4uCisKKy0tW25vLV1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorCVVzaW5nIC0tcmVjdXJzZS1zdWJtb2R1bGVzIHdpbGwgdXBkYXRlIHRoZSBjb250ZW50IG9mIGFsbCBhY3RpdmUKKwlzdWJtb2R1bGVzIGFjY29yZGluZyB0byB0aGUgY29tbWl0IHJlY29yZGVkIGluIHRoZSBzdXBlcnByb2plY3QgYnkKKwljYWxsaW5nIHJlYWQtdHJlZSByZWN1cnNpdmVseSwgYWxzbyBzZXR0aW5nIHRoZSBzdWJtb2R1bGVzJyBIRUFEIHRvIGJlCisJZGV0YWNoZWQgYXQgdGhhdCBjb21taXQuCisKKy0tbm8tc3BhcnNlLWNoZWNrb3V0OjoKKwlEaXNhYmxlIHNwYXJzZSBjaGVja291dCBzdXBwb3J0IGV2ZW4gaWYgYGNvcmUuc3BhcnNlQ2hlY2tvdXRgCisJaXMgdHJ1ZS4KKworLS1lbXB0eTo6CisJSW5zdGVhZCBvZiByZWFkaW5nIHRyZWUgb2JqZWN0KHMpIGludG8gdGhlIGluZGV4LCBqdXN0IGVtcHR5CisJaXQuCisKKy1xOjoKKy0tcXVpZXQ6OgorCVF1aWV0LCBzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcy4KKworPHRyZWUtaXNoIz46OgorCVRoZSBpZCBvZiB0aGUgdHJlZSBvYmplY3QocykgdG8gYmUgcmVhZC9tZXJnZWQuCisKKworTUVSR0lORworLS0tLS0tLQorSWYgYC1tYCBpcyBzcGVjaWZpZWQsICdnaXQgcmVhZC10cmVlJyBjYW4gcGVyZm9ybSAzIGtpbmRzIG9mCittZXJnZSwgYSBzaW5nbGUgdHJlZSBtZXJnZSBpZiBvbmx5IDEgdHJlZSBpcyBnaXZlbiwgYQorZmFzdC1mb3J3YXJkIG1lcmdlIHdpdGggMiB0cmVlcywgb3IgYSAzLXdheSBtZXJnZSBpZiAzIG9yIG1vcmUgdHJlZXMgYXJlCitwcm92aWRlZC4KKworCitTaW5nbGUgVHJlZSBNZXJnZQorfn5+fn5+fn5+fn5+fn5+fn4KK0lmIG9ubHkgMSB0cmVlIGlzIHNwZWNpZmllZCwgJ2dpdCByZWFkLXRyZWUnIG9wZXJhdGVzIGFzIGlmIHRoZSB1c2VyIGRpZCBub3QKK3NwZWNpZnkgYC1tYCwgZXhjZXB0IHRoYXQgaWYgdGhlIG9yaWdpbmFsIGluZGV4IGhhcyBhbiBlbnRyeSBmb3IgYQorZ2l2ZW4gcGF0aG5hbWUsIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIHBhdGggbWF0Y2ggd2l0aCB0aGUgdHJlZQorYmVpbmcgcmVhZCwgdGhlIHN0YXQgaW5mbyBmcm9tIHRoZSBpbmRleCBpcyB1c2VkLiAoSW4gb3RoZXIgd29yZHMsIHRoZQoraW5kZXgncyBzdGF0KClzIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoZSBtZXJnZWQgdHJlZSdzKS4KKworVGhhdCBtZWFucyB0aGF0IGlmIHlvdSBkbyBhIGBnaXQgcmVhZC10cmVlIC1tIDxuZXd0cmVlPmAgZm9sbG93ZWQgYnkgYQorYGdpdCBjaGVja291dC1pbmRleCAtZiAtdSAtYWAsIHRoZSAnZ2l0IGNoZWNrb3V0LWluZGV4JyBvbmx5IGNoZWNrcyBvdXQKK3RoZSBzdHVmZiB0aGF0IHJlYWxseSBjaGFuZ2VkLgorCitUaGlzIGlzIHVzZWQgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZmFsc2UgaGl0cyB3aGVuICdnaXQgZGlmZi1maWxlcycgaXMKK3J1biBhZnRlciAnZ2l0IHJlYWQtdHJlZScuCisKKworVHdvIFRyZWUgTWVyZ2UKK35+fn5+fn5+fn5+fn5+CisKK1R5cGljYWxseSwgdGhpcyBpcyBpbnZva2VkIGFzIGBnaXQgcmVhZC10cmVlIC1tICRIICRNYCwgd2hlcmUgJEgKK2lzIHRoZSBoZWFkIGNvbW1pdCBvZiB0aGUgY3VycmVudCByZXBvc2l0b3J5LCBhbmQgJE0gaXMgdGhlIGhlYWQKK29mIGEgZm9yZWlnbiB0cmVlLCB3aGljaCBpcyBzaW1wbHkgYWhlYWQgb2YgJEggKGkuZS4gd2UgYXJlIGluIGEKK2Zhc3QtZm9yd2FyZCBzaXR1YXRpb24pLgorCitXaGVuIHR3byB0cmVlcyBhcmUgc3BlY2lmaWVkLCB0aGUgdXNlciBpcyB0ZWxsaW5nICdnaXQgcmVhZC10cmVlJwordGhlIGZvbGxvd2luZzoKKworICAgICAxLiBUaGUgY3VycmVudCBpbmRleCBhbmQgd29yayB0cmVlIGlzIGRlcml2ZWQgZnJvbSAkSCwgYnV0CisJdGhlIHVzZXIgbWF5IGhhdmUgbG9jYWwgY2hhbmdlcyBpbiB0aGVtIHNpbmNlICRILgorCisgICAgIDIuIFRoZSB1c2VyIHdhbnRzIHRvIGZhc3QtZm9yd2FyZCB0byAkTS4KKworSW4gdGhpcyBjYXNlLCB0aGUgYGdpdCByZWFkLXRyZWUgLW0gJEggJE1gIGNvbW1hbmQgbWFrZXMgc3VyZQordGhhdCBubyBsb2NhbCBjaGFuZ2UgaXMgbG9zdCBhcyB0aGUgcmVzdWx0IG9mIHRoaXMgIm1lcmdlIi4KK0hlcmUgYXJlIHRoZSAiY2FycnkgZm9yd2FyZCIgcnVsZXMsIHdoZXJlICJJIiBkZW5vdGVzIHRoZSBpbmRleCwKKyJjbGVhbiIgbWVhbnMgdGhhdCBpbmRleCBhbmQgd29yayB0cmVlIGNvaW5jaWRlLCBhbmQgImV4aXN0cyIvIm5vdGhpbmciCityZWZlciB0byB0aGUgcHJlc2VuY2Ugb2YgYSBwYXRoIGluIHRoZSBzcGVjaWZpZWQgY29tbWl0OgorCisuLi4uCisJSSAgICAgICAgICAgICAgICAgICBIICAgICAgICBNICAgICAgICBSZXN1bHQKKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIDAgIG5vdGhpbmcgICAgICAgICAgICAgbm90aGluZyAgbm90aGluZyAgKGRvZXMgbm90IGhhcHBlbikKKyAgICAgMSAgbm90aGluZyAgICAgICAgICAgICBub3RoaW5nICBleGlzdHMgICB1c2UgTQorICAgICAyICBub3RoaW5nICAgICAgICAgICAgIGV4aXN0cyAgIG5vdGhpbmcgIHJlbW92ZSBwYXRoIGZyb20gaW5kZXgKKyAgICAgMyAgbm90aGluZyAgICAgICAgICAgICBleGlzdHMgICBleGlzdHMsICB1c2UgTSBpZiAiaW5pdGlhbCBjaGVja291dCIsCisJCQkJICAgICBIID09IE0gICBrZWVwIGluZGV4IG90aGVyd2lzZQorCQkJCSAgICAgZXhpc3RzLCAgZmFpbAorCQkJCSAgICAgSCAhPSBNCisKKyAgICAgICAgY2xlYW4gST09SCAgST09TQorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLQorICAgICA0ICB5ZXMgICBOL0EgICBOL0EgICAgIG5vdGhpbmcgIG5vdGhpbmcgIGtlZXAgaW5kZXgKKyAgICAgNSAgbm8gICAgTi9BICAgTi9BICAgICBub3RoaW5nICBub3RoaW5nICBrZWVwIGluZGV4CisKKyAgICAgNiAgeWVzICAgTi9BICAgeWVzICAgICBub3RoaW5nICBleGlzdHMgICBrZWVwIGluZGV4CisgICAgIDcgIG5vICAgIE4vQSAgIHllcyAgICAgbm90aGluZyAgZXhpc3RzICAga2VlcCBpbmRleAorICAgICA4ICB5ZXMgICBOL0EgICBubyAgICAgIG5vdGhpbmcgIGV4aXN0cyAgIGZhaWwKKyAgICAgOSAgbm8gICAgTi9BICAgbm8gICAgICBub3RoaW5nICBleGlzdHMgICBmYWlsCisKKyAgICAgMTAgeWVzICAgeWVzICAgTi9BICAgICBleGlzdHMgICBub3RoaW5nICByZW1vdmUgcGF0aCBmcm9tIGluZGV4CisgICAgIDExIG5vICAgIHllcyAgIE4vQSAgICAgZXhpc3RzICAgbm90aGluZyAgZmFpbAorICAgICAxMiB5ZXMgICBubyAgICBOL0EgICAgIGV4aXN0cyAgIG5vdGhpbmcgIGZhaWwKKyAgICAgMTMgbm8gICAgbm8gICAgTi9BICAgICBleGlzdHMgICBub3RoaW5nICBmYWlsCisKKwljbGVhbiAoSD09TSkKKyAgICAgICAtLS0tLS0KKyAgICAgMTQgeWVzICAgICAgICAgICAgICAgICBleGlzdHMgICBleGlzdHMgICBrZWVwIGluZGV4CisgICAgIDE1IG5vICAgICAgICAgICAgICAgICAgZXhpc3RzICAgZXhpc3RzICAga2VlcCBpbmRleAorCisgICAgICAgIGNsZWFuIEk9PUggIEk9PU0gKEghPU0pCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIDE2IHllcyAgIG5vICAgIG5vICAgICAgZXhpc3RzICAgZXhpc3RzICAgZmFpbAorICAgICAxNyBubyAgICBubyAgICBubyAgICAgIGV4aXN0cyAgIGV4aXN0cyAgIGZhaWwKKyAgICAgMTggeWVzICAgbm8gICAgeWVzICAgICBleGlzdHMgICBleGlzdHMgICBrZWVwIGluZGV4CisgICAgIDE5IG5vICAgIG5vICAgIHllcyAgICAgZXhpc3RzICAgZXhpc3RzICAga2VlcCBpbmRleAorICAgICAyMCB5ZXMgICB5ZXMgICBubyAgICAgIGV4aXN0cyAgIGV4aXN0cyAgIHVzZSBNCisgICAgIDIxIG5vICAgIHllcyAgIG5vICAgICAgZXhpc3RzICAgZXhpc3RzICAgZmFpbAorLi4uLgorCitJbiBhbGwgImtlZXAgaW5kZXgiIGNhc2VzLCB0aGUgaW5kZXggZW50cnkgc3RheXMgYXMgaW4gdGhlCitvcmlnaW5hbCBpbmRleCBmaWxlLiAgSWYgdGhlIGVudHJ5IGlzIG5vdCB1cCB0byBkYXRlLAorJ2dpdCByZWFkLXRyZWUnIGtlZXBzIHRoZSBjb3B5IGluIHRoZSB3b3JrIHRyZWUgaW50YWN0IHdoZW4KK29wZXJhdGluZyB1bmRlciB0aGUgLXUgZmxhZy4KKworV2hlbiB0aGlzIGZvcm0gb2YgJ2dpdCByZWFkLXRyZWUnIHJldHVybnMgc3VjY2Vzc2Z1bGx5LCB5b3UgY2FuCitzZWUgd2hpY2ggb2YgdGhlICJsb2NhbCBjaGFuZ2VzIiB0aGF0IHlvdSBtYWRlIHdlcmUgY2FycmllZCBmb3J3YXJkIGJ5IHJ1bm5pbmcKK2BnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkTWAuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdAorbmVjZXNzYXJpbHkgbWF0Y2ggd2hhdCBgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJEhgIHdvdWxkIGhhdmUKK3Byb2R1Y2VkIGJlZm9yZSBzdWNoIGEgdHdvIHRyZWUgbWVyZ2UuICBUaGlzIGlzIGJlY2F1c2Ugb2YgY2FzZXMKKzE4IGFuZCAxOSAtLS0gaWYgeW91IGFscmVhZHkgaGFkIHRoZSBjaGFuZ2VzIGluICRNIChlLmcuIG1heWJlCit5b3UgcGlja2VkIGl0IHVwIHZpYSBlLW1haWwgaW4gYSBwYXRjaCBmb3JtKSwgYGdpdCBkaWZmLWluZGV4CistLWNhY2hlZCAkSGAgd291bGQgaGF2ZSB0b2xkIHlvdSBhYm91dCB0aGUgY2hhbmdlIGJlZm9yZSB0aGlzCittZXJnZSwgYnV0IGl0IHdvdWxkIG5vdCBzaG93IGluIGBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkTWAKK291dHB1dCBhZnRlciB0aGUgdHdvLXRyZWUgbWVyZ2UuCisKK0Nhc2UgMyBpcyBzbGlnaHRseSB0cmlja3kgYW5kIG5lZWRzIGV4cGxhbmF0aW9uLiAgVGhlIHJlc3VsdCBmcm9tIHRoaXMKK3J1bGUgbG9naWNhbGx5IHNob3VsZCBiZSB0byByZW1vdmUgdGhlIHBhdGggaWYgdGhlIHVzZXIgc3RhZ2VkIHRoZSByZW1vdmFsCitvZiB0aGUgcGF0aCBhbmQgdGhlbiBzd2l0Y2hpbmcgdG8gYSBuZXcgYnJhbmNoLiAgVGhhdCBob3dldmVyIHdpbGwgcHJldmVudAordGhlIGluaXRpYWwgY2hlY2tvdXQgZnJvbSBoYXBwZW5pbmcsIHNvIHRoZSBydWxlIGlzIG1vZGlmaWVkIHRvIHVzZSBNIChuZXcKK3RyZWUpIG9ubHkgd2hlbiB0aGUgY29udGVudCBvZiB0aGUgaW5kZXggaXMgZW1wdHkuICBPdGhlcndpc2UgdGhlIHJlbW92YWwKK29mIHRoZSBwYXRoIGlzIGtlcHQgYXMgbG9uZyBhcyAkSCBhbmQgJE0gYXJlIHRoZSBzYW1lLgorCiszLVdheSBNZXJnZQorfn5+fn5+fn5+fn4KK0VhY2ggImluZGV4IiBlbnRyeSBoYXMgdHdvIGJpdHMgd29ydGggb2YgInN0YWdlIiBzdGF0ZS4gc3RhZ2UgMCBpcyB0aGUKK25vcm1hbCBvbmUsIGFuZCBpcyB0aGUgb25seSBvbmUgeW91J2Qgc2VlIGluIGFueSBraW5kIG9mIG5vcm1hbCB1c2UuCisKK0hvd2V2ZXIsIHdoZW4geW91IGRvICdnaXQgcmVhZC10cmVlJyB3aXRoIHRocmVlIHRyZWVzLCB0aGUgInN0YWdlIgorc3RhcnRzIG91dCBhdCAxLgorCitUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBkbworCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZWFkLXRyZWUgLW0gPHRyZWUxPiA8dHJlZTI+IDx0cmVlMz4KKy0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHlvdSB3aWxsIGVuZCB1cCB3aXRoIGFuIGluZGV4IHdpdGggYWxsIG9mIHRoZSA8dHJlZTE+IGVudHJpZXMgaW4KKyJzdGFnZTEiLCBhbGwgb2YgdGhlIDx0cmVlMj4gZW50cmllcyBpbiAic3RhZ2UyIiBhbmQgYWxsIG9mIHRoZQorPHRyZWUzPiBlbnRyaWVzIGluICJzdGFnZTMiLiAgV2hlbiBwZXJmb3JtaW5nIGEgbWVyZ2Ugb2YgYW5vdGhlcgorYnJhbmNoIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLCB3ZSB1c2UgdGhlIGNvbW1vbiBhbmNlc3RvciB0cmVlCithcyA8dHJlZTE+LCB0aGUgY3VycmVudCBicmFuY2ggaGVhZCBhcyA8dHJlZTI+LCBhbmQgdGhlIG90aGVyCiticmFuY2ggaGVhZCBhcyA8dHJlZTM+LgorCitGdXJ0aGVybW9yZSwgJ2dpdCByZWFkLXRyZWUnIGhhcyBzcGVjaWFsLWNhc2UgbG9naWMgdGhhdCBzYXlzOiBpZiB5b3Ugc2VlCithIGZpbGUgdGhhdCBtYXRjaGVzIGluIGFsbCByZXNwZWN0cyBpbiB0aGUgZm9sbG93aW5nIHN0YXRlcywgaXQKKyJjb2xsYXBzZXMiIGJhY2sgdG8gInN0YWdlMCI6CisKKyAgIC0gc3RhZ2UgMiBhbmQgMyBhcmUgdGhlIHNhbWU7IHRha2Ugb25lIG9yIHRoZSBvdGhlciAoaXQgbWFrZXMgbm8KKyAgICAgZGlmZmVyZW5jZSAtIHRoZSBzYW1lIHdvcmsgaGFzIGJlZW4gZG9uZSBvbiBvdXIgYnJhbmNoIGluCisgICAgIHN0YWdlIDIgYW5kIHRoZWlyIGJyYW5jaCBpbiBzdGFnZSAzKQorCisgICAtIHN0YWdlIDEgYW5kIHN0YWdlIDIgYXJlIHRoZSBzYW1lIGFuZCBzdGFnZSAzIGlzIGRpZmZlcmVudDsgdGFrZQorICAgICBzdGFnZSAzIChvdXIgYnJhbmNoIGluIHN0YWdlIDIgZGlkIG5vdCBkbyBhbnl0aGluZyBzaW5jZSB0aGUKKyAgICAgYW5jZXN0b3IgaW4gc3RhZ2UgMSB3aGlsZSB0aGVpciBicmFuY2ggaW4gc3RhZ2UgMyB3b3JrZWQgb24KKyAgICAgaXQpCisKKyAgIC0gc3RhZ2UgMSBhbmQgc3RhZ2UgMyBhcmUgdGhlIHNhbWUgYW5kIHN0YWdlIDIgaXMgZGlmZmVyZW50IHRha2UKKyAgICAgc3RhZ2UgMiAod2UgZGlkIHNvbWV0aGluZyB3aGlsZSB0aGV5IGRpZCBub3RoaW5nKQorCitUaGUgJ2dpdCB3cml0ZS10cmVlJyBjb21tYW5kIHJlZnVzZXMgdG8gd3JpdGUgYSBub25zZW5zaWNhbCB0cmVlLCBhbmQgaXQKK3dpbGwgY29tcGxhaW4gYWJvdXQgdW5tZXJnZWQgZW50cmllcyBpZiBpdCBzZWVzIGEgc2luZ2xlIGVudHJ5IHRoYXQgaXMgbm90CitzdGFnZSAwLgorCitPSywgdGhpcyBhbGwgc291bmRzIGxpa2UgYSBjb2xsZWN0aW9uIG9mIHRvdGFsbHkgbm9uc2Vuc2ljYWwgcnVsZXMsCitidXQgaXQncyBhY3R1YWxseSBleGFjdGx5IHdoYXQgeW91IHdhbnQgaW4gb3JkZXIgdG8gZG8gYSBmYXN0CittZXJnZS4gVGhlIGRpZmZlcmVudCBzdGFnZXMgcmVwcmVzZW50IHRoZSAicmVzdWx0IHRyZWUiIChzdGFnZSAwLCBha2EKKyJtZXJnZWQiKSwgdGhlIG9yaWdpbmFsIHRyZWUgKHN0YWdlIDEsIGFrYSAib3JpZyIpLCBhbmQgdGhlIHR3byB0cmVlcworeW91IGFyZSB0cnlpbmcgdG8gbWVyZ2UgKHN0YWdlIDIgYW5kIDMgcmVzcGVjdGl2ZWx5KS4KKworVGhlIG9yZGVyIG9mIHN0YWdlcyAxLCAyIGFuZCAzIChoZW5jZSB0aGUgb3JkZXIgb2YgdGhyZWUKKzx0cmVlLWlzaD4gY29tbWFuZC1saW5lIGFyZ3VtZW50cykgYXJlIHNpZ25pZmljYW50IHdoZW4geW91CitzdGFydCBhIDMtd2F5IG1lcmdlIHdpdGggYW4gaW5kZXggZmlsZSB0aGF0IGlzIGFscmVhZHkKK3BvcHVsYXRlZC4gIEhlcmUgaXMgYW4gb3V0bGluZSBvZiBob3cgdGhlIGFsZ29yaXRobSB3b3JrczoKKworLSBpZiBhIGZpbGUgZXhpc3RzIGluIGlkZW50aWNhbCBmb3JtYXQgaW4gYWxsIHRocmVlIHRyZWVzLCBpdCB3aWxsCisgIGF1dG9tYXRpY2FsbHkgY29sbGFwc2UgdG8gIm1lcmdlZCIgc3RhdGUgYnkgJ2dpdCByZWFkLXRyZWUnLgorCistIGEgZmlsZSB0aGF0IGhhcyBfYW55XyBkaWZmZXJlbmNlIHdoYXQtc28tZXZlciBpbiB0aGUgdGhyZWUgdHJlZXMKKyAgd2lsbCBzdGF5IGFzIHNlcGFyYXRlIGVudHJpZXMgaW4gdGhlIGluZGV4LiBJdCdzIHVwIHRvICJwb3JjZWxhaW4KKyAgcG9saWN5IiB0byBkZXRlcm1pbmUgaG93IHRvIHJlbW92ZSB0aGUgbm9uLTAgc3RhZ2VzLCBhbmQgaW5zZXJ0IGEKKyAgbWVyZ2VkIHZlcnNpb24uCisKKy0gdGhlIGluZGV4IGZpbGUgc2F2ZXMgYW5kIHJlc3RvcmVzIHdpdGggYWxsIHRoaXMgaW5mb3JtYXRpb24sIHNvIHlvdQorICBjYW4gbWVyZ2UgdGhpbmdzIGluY3JlbWVudGFsbHksIGJ1dCBhcyBsb25nIGFzIGl0IGhhcyBlbnRyaWVzIGluCisgIHN0YWdlcyAxLzIvMyAoaS5lLiwgInVubWVyZ2VkIGVudHJpZXMiKSB5b3UgY2FuJ3Qgd3JpdGUgdGhlIHJlc3VsdC4gU28KKyAgbm93IHRoZSBtZXJnZSBhbGdvcml0aG0gZW5kcyB1cCBiZWluZyByZWFsbHkgc2ltcGxlOgorCisgICogeW91IHdhbGsgdGhlIGluZGV4IGluIG9yZGVyLCBhbmQgaWdub3JlIGFsbCBlbnRyaWVzIG9mIHN0YWdlIDAsCisgICAgc2luY2UgdGhleSd2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KKworICAqIGlmIHlvdSBmaW5kIGEgInN0YWdlMSIsIGJ1dCBubyBtYXRjaGluZyAic3RhZ2UyIiBvciAic3RhZ2UzIiwgeW91CisgICAga25vdyBpdCdzIGJlZW4gcmVtb3ZlZCBmcm9tIGJvdGggdHJlZXMgKGl0IG9ubHkgZXhpc3RlZCBpbiB0aGUKKyAgICBvcmlnaW5hbCB0cmVlKSwgYW5kIHlvdSByZW1vdmUgdGhhdCBlbnRyeS4KKworICAqIGlmIHlvdSBmaW5kIGEgbWF0Y2hpbmcgInN0YWdlMiIgYW5kICJzdGFnZTMiIHRyZWUsIHlvdSByZW1vdmUgb25lCisgICAgb2YgdGhlbSwgYW5kIHR1cm4gdGhlIG90aGVyIGludG8gYSAic3RhZ2UwIiBlbnRyeS4gUmVtb3ZlIGFueQorICAgIG1hdGNoaW5nICJzdGFnZTEiIGVudHJ5IGlmIGl0IGV4aXN0cyB0b28uICAuLiBhbGwgdGhlIG5vcm1hbAorICAgIHRyaXZpYWwgcnVsZXMgLi4KKworWW91IHdvdWxkIG5vcm1hbGx5IHVzZSAnZ2l0IG1lcmdlLWluZGV4JyB3aXRoIHN1cHBsaWVkCisnZ2l0IG1lcmdlLW9uZS1maWxlJyB0byBkbyB0aGlzIGxhc3Qgc3RlcC4gIFRoZSBzY3JpcHQgdXBkYXRlcwordGhlIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYXMgaXQgbWVyZ2VzIGVhY2ggcGF0aCBhbmQgYXQgdGhlCitlbmQgb2YgYSBzdWNjZXNzZnVsIG1lcmdlLgorCitXaGVuIHlvdSBzdGFydCBhIDMtd2F5IG1lcmdlIHdpdGggYW4gaW5kZXggZmlsZSB0aGF0IGlzIGFscmVhZHkKK3BvcHVsYXRlZCwgaXQgaXMgYXNzdW1lZCB0aGF0IGl0IHJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIHRoZQorZmlsZXMgaW4geW91ciB3b3JrIHRyZWUsIGFuZCB5b3UgY2FuIGV2ZW4gaGF2ZSBmaWxlcyB3aXRoCitjaGFuZ2VzIHVucmVjb3JkZWQgaW4gdGhlIGluZGV4IGZpbGUuICBJdCBpcyBmdXJ0aGVyIGFzc3VtZWQKK3RoYXQgdGhpcyBzdGF0ZSBpcyAiZGVyaXZlZCIgZnJvbSB0aGUgc3RhZ2UgMiB0cmVlLiAgVGhlIDMtd2F5CittZXJnZSByZWZ1c2VzIHRvIHJ1biBpZiBpdCBmaW5kcyBhbiBlbnRyeSBpbiB0aGUgb3JpZ2luYWwgaW5kZXgKK2ZpbGUgdGhhdCBkb2VzIG5vdCBtYXRjaCBzdGFnZSAyLgorCitUaGlzIGlzIGRvbmUgdG8gcHJldmVudCB5b3UgZnJvbSBsb3NpbmcgeW91ciB3b3JrLWluLXByb2dyZXNzCitjaGFuZ2VzLCBhbmQgbWl4aW5nIHlvdXIgcmFuZG9tIGNoYW5nZXMgaW4gYW4gdW5yZWxhdGVkIG1lcmdlCitjb21taXQuICBUbyBpbGx1c3RyYXRlLCBzdXBwb3NlIHlvdSBzdGFydCBmcm9tIHdoYXQgaGFzIGJlZW4KK2NvbW1pdHRlZCBsYXN0IHRvIHlvdXIgcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLQorJCBKQz1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiSEVBRF4wImAKKyQgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC11IC1hICRKQworLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgZG8gcmFuZG9tIGVkaXRzLCB3aXRob3V0IHJ1bm5pbmcgJ2dpdCB1cGRhdGUtaW5kZXgnLiAgQW5kIHRoZW4KK3lvdSBub3RpY2UgdGhhdCB0aGUgdGlwIG9mIHlvdXIgInVwc3RyZWFtIiB0cmVlIGhhcyBhZHZhbmNlZAorc2luY2UgeW91IHB1bGxlZCBmcm9tIGhpbToKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggZ2l0Oi8vLi4uLiBsaW51cworJCBMVD1gZ2l0IHJldi1wYXJzZSBGRVRDSF9IRUFEYAorLS0tLS0tLS0tLS0tLS0tLQorCitZb3VyIHdvcmsgdHJlZSBpcyBzdGlsbCBiYXNlZCBvbiB5b3VyIEhFQUQgKCRKQyksIGJ1dCB5b3UgaGF2ZQorc29tZSBlZGl0cyBzaW5jZS4gIFRocmVlLXdheSBtZXJnZSBtYWtlcyBzdXJlIHRoYXQgeW91IGhhdmUgbm90CithZGRlZCBvciBtb2RpZmllZCBpbmRleCBlbnRyaWVzIHNpbmNlICRKQywgYW5kIGlmIHlvdSBoYXZlbid0LAordGhlbiBkb2VzIHRoZSByaWdodCB0aGluZy4gIFNvIHdpdGggdGhlIGZvbGxvd2luZyBzZXF1ZW5jZToKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVhZC10cmVlIC1tIC11IGBnaXQgbWVyZ2UtYmFzZSAkSkMgJExUYCAkSkMgJExUCiskIGdpdCBtZXJnZS1pbmRleCBnaXQtbWVyZ2Utb25lLWZpbGUgLWEKKyQgZWNobyAiTWVyZ2Ugd2l0aCBMaW51cyIgfCBcCisgIGdpdCBjb21taXQtdHJlZSBgZ2l0IHdyaXRlLXRyZWVgIC1wICRKQyAtcCAkTFQKKy0tLS0tLS0tLS0tLS0tLS0KKword2hhdCB5b3Ugd291bGQgY29tbWl0IGlzIGEgcHVyZSBtZXJnZSBiZXR3ZWVuICRKQyBhbmQgJExUIHdpdGhvdXQKK3lvdXIgd29yay1pbi1wcm9ncmVzcyBjaGFuZ2VzLCBhbmQgeW91ciB3b3JrIHRyZWUgd291bGQgYmUKK3VwZGF0ZWQgdG8gdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuCisKK0hvd2V2ZXIsIGlmIHlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0aGF0Cit3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSB0aGlzIG1lcmdlLCAnZ2l0IHJlYWQtdHJlZScgd2lsbCByZWZ1c2UKK3RvIHJ1biB0byBwcmV2ZW50IHlvdXIgY2hhbmdlcyBmcm9tIGJlaW5nIGxvc3QuCisKK0luIG90aGVyIHdvcmRzLCB0aGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IHdoYXQgZXhpc3RzIG9ubHkKK2luIHRoZSB3b3JraW5nIHRyZWUuICBXaGVuIHlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgaW4gYSBwYXJ0IG9mCit0aGUgcHJvamVjdCB0aGF0IGlzIG5vdCBpbnZvbHZlZCBpbiB0aGUgbWVyZ2UsIHlvdXIgY2hhbmdlcyBkbworbm90IGludGVyZmVyZSB3aXRoIHRoZSBtZXJnZSwgYW5kIGFyZSBrZXB0IGludGFjdC4gIFdoZW4gdGhleQorKmRvKiBpbnRlcmZlcmUsIHRoZSBtZXJnZSBkb2VzIG5vdCBldmVuIHN0YXJ0ICgnZ2l0IHJlYWQtdHJlZScKK2NvbXBsYWlucyBsb3VkbHkgYW5kIGZhaWxzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueXRoaW5nKS4gIEluIHN1Y2gKK2EgY2FzZSwgeW91IGNhbiBzaW1wbHkgY29udGludWUgZG9pbmcgd2hhdCB5b3Ugd2VyZSBpbiB0aGUKK21pZGRsZSBvZiBkb2luZywgYW5kIHdoZW4geW91ciB3b3JraW5nIHRyZWUgaXMgcmVhZHkgKGkuZS4geW91CitoYXZlIGZpbmlzaGVkIHlvdXIgd29yay1pbi1wcm9ncmVzcyksIGF0dGVtcHQgdGhlIG1lcmdlIGFnYWluLgorCisKK1NQQVJTRSBDSEVDS09VVAorLS0tLS0tLS0tLS0tLS0tCisKKyJTcGFyc2UgY2hlY2tvdXQiIGFsbG93cyBwb3B1bGF0aW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBzcGFyc2VseS4KK0l0IHVzZXMgdGhlIHNraXAtd29ya3RyZWUgYml0IChzZWUgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdKSB0byB0ZWxsCitHaXQgd2hldGhlciBhIGZpbGUgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIHdvcnRoIGxvb2tpbmcgYXQuCisKKydnaXQgcmVhZC10cmVlJyBhbmQgb3RoZXIgbWVyZ2UtYmFzZWQgY29tbWFuZHMgKCdnaXQgbWVyZ2UnLCAnZ2l0CitjaGVja291dCcuLi4pIGNhbiBoZWxwIG1haW50YWluaW5nIHRoZSBza2lwLXdvcmt0cmVlIGJpdG1hcCBhbmQgd29ya2luZworZGlyZWN0b3J5IHVwZGF0ZS4gYCRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0YCBpcyB1c2VkIHRvCitkZWZpbmUgdGhlIHNraXAtd29ya3RyZWUgcmVmZXJlbmNlIGJpdG1hcC4gV2hlbiAnZ2l0IHJlYWQtdHJlZScgbmVlZHMKK3RvIHVwZGF0ZSB0aGUgd29ya2luZyBkaXJlY3RvcnksIGl0IHJlc2V0cyB0aGUgc2tpcC13b3JrdHJlZSBiaXQgaW4gdGhlIGluZGV4CitiYXNlZCBvbiB0aGlzIGZpbGUsIHdoaWNoIHVzZXMgdGhlIHNhbWUgc3ludGF4IGFzIC5naXRpZ25vcmUgZmlsZXMuCitJZiBhbiBlbnRyeSBtYXRjaGVzIGEgcGF0dGVybiBpbiB0aGlzIGZpbGUsIHNraXAtd29ya3RyZWUgd2lsbCBub3QgYmUKK3NldCBvbiB0aGF0IGVudHJ5LiBPdGhlcndpc2UsIHNraXAtd29ya3RyZWUgd2lsbCBiZSBzZXQuCisKK1RoZW4gaXQgY29tcGFyZXMgdGhlIG5ldyBza2lwLXdvcmt0cmVlIHZhbHVlIHdpdGggdGhlIHByZXZpb3VzIG9uZS4gSWYKK3NraXAtd29ya3RyZWUgdHVybnMgZnJvbSBzZXQgdG8gdW5zZXQsIGl0IHdpbGwgYWRkIHRoZSBjb3JyZXNwb25kaW5nCitmaWxlIGJhY2suIElmIGl0IHR1cm5zIGZyb20gdW5zZXQgdG8gc2V0LCB0aGF0IGZpbGUgd2lsbCBiZSByZW1vdmVkLgorCitXaGlsZSBgJEdJVF9ESVIvaW5mby9zcGFyc2UtY2hlY2tvdXRgIGlzIHVzdWFsbHkgdXNlZCB0byBzcGVjaWZ5IHdoYXQKK2ZpbGVzIGFyZSBpbiwgeW91IGNhbiBhbHNvIHNwZWNpZnkgd2hhdCBmaWxlcyBhcmUgX25vdF8gaW4sIHVzaW5nCituZWdhdGUgcGF0dGVybnMuIEZvciBleGFtcGxlLCB0byByZW1vdmUgdGhlIGZpbGUgYHVud2FudGVkYDoKKworLS0tLS0tLS0tLS0tLS0tLQorLyoKKyF1bndhbnRlZAorLS0tLS0tLS0tLS0tLS0tLQorCitBbm90aGVyIHRyaWNreSB0aGluZyBpcyBmdWxseSByZXBvcHVsYXRpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4geW91CitubyBsb25nZXIgd2FudCBzcGFyc2UgY2hlY2tvdXQuIFlvdSBjYW5ub3QganVzdCBkaXNhYmxlICJzcGFyc2UKK2NoZWNrb3V0IiBiZWNhdXNlIHNraXAtd29ya3RyZWUgYml0cyBhcmUgc3RpbGwgaW4gdGhlIGluZGV4IGFuZCB5b3VyIHdvcmtpbmcKK2RpcmVjdG9yeSBpcyBzdGlsbCBzcGFyc2VseSBwb3B1bGF0ZWQuIFlvdSBzaG91bGQgcmUtcG9wdWxhdGUgdGhlIHdvcmtpbmcKK2RpcmVjdG9yeSB3aXRoIHRoZSBgJEdJVF9ESVIvaW5mby9zcGFyc2UtY2hlY2tvdXRgIGZpbGUgY29udGVudCBhcworZm9sbG93czoKKworLS0tLS0tLS0tLS0tLS0tLQorLyoKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlbiB5b3UgY2FuIGRpc2FibGUgc3BhcnNlIGNoZWNrb3V0LiBTcGFyc2UgY2hlY2tvdXQgc3VwcG9ydCBpbiAnZ2l0CityZWFkLXRyZWUnIGFuZCBzaW1pbGFyIGNvbW1hbmRzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFlvdSBuZWVkIHRvCit0dXJuIGBjb3JlLnNwYXJzZUNoZWNrb3V0YCBvbiBpbiBvcmRlciB0byBoYXZlIHNwYXJzZSBjaGVja291dAorc3VwcG9ydC4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXdyaXRlLXRyZWVbMV07IGxpbmtnaXQ6Z2l0LWxzLWZpbGVzWzFdOworbGlua2dpdDpnaXRpZ25vcmVbNV07IGxpbmtnaXQ6Z2l0LXNwYXJzZS1jaGVja291dFsxXTsKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjI0Y2ZkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dApAQCAtMCwwICsxLDEyNjMgQEAKK2dpdC1yZWJhc2UoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlYmFzZSAtIFJlYXBwbHkgY29tbWl0cyBvbiB0b3Agb2YgYW5vdGhlciBiYXNlIHRpcAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmViYXNlJyBbLWkgfCAtLWludGVyYWN0aXZlXSBbPG9wdGlvbnM+XSBbLS1leGVjIDxjbWQ+XQorCVstLW9udG8gPG5ld2Jhc2U+IHwgLS1rZWVwLWJhc2VdIFs8dXBzdHJlYW0+IFs8YnJhbmNoPl1dCisnZ2l0IHJlYmFzZScgWy1pIHwgLS1pbnRlcmFjdGl2ZV0gWzxvcHRpb25zPl0gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dCisJLS1yb290IFs8YnJhbmNoPl0KKydnaXQgcmViYXNlJyAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQgfCAtLXF1aXQgfCAtLWVkaXQtdG9kbyB8IC0tc2hvdy1jdXJyZW50LXBhdGNoKQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0lmIDxicmFuY2g+IGlzIHNwZWNpZmllZCwgJ2dpdCByZWJhc2UnIHdpbGwgcGVyZm9ybSBhbiBhdXRvbWF0aWMKK2BnaXQgc3dpdGNoIDxicmFuY2g+YCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIE90aGVyd2lzZQoraXQgcmVtYWlucyBvbiB0aGUgY3VycmVudCBicmFuY2guCisKK0lmIDx1cHN0cmVhbT4gaXMgbm90IHNwZWNpZmllZCwgdGhlIHVwc3RyZWFtIGNvbmZpZ3VyZWQgaW4KK2JyYW5jaC48bmFtZT4ucmVtb3RlIGFuZCBicmFuY2guPG5hbWU+Lm1lcmdlIG9wdGlvbnMgd2lsbCBiZSB1c2VkIChzZWUKK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgZGV0YWlscykgYW5kIHRoZSBgLS1mb3JrLXBvaW50YCBvcHRpb24gaXMKK2Fzc3VtZWQuICBJZiB5b3UgYXJlIGN1cnJlbnRseSBub3Qgb24gYW55IGJyYW5jaCBvciBpZiB0aGUgY3VycmVudAorYnJhbmNoIGRvZXMgbm90IGhhdmUgYSBjb25maWd1cmVkIHVwc3RyZWFtLCB0aGUgcmViYXNlIHdpbGwgYWJvcnQuCisKK0FsbCBjaGFuZ2VzIG1hZGUgYnkgY29tbWl0cyBpbiB0aGUgY3VycmVudCBicmFuY2ggYnV0IHRoYXQgYXJlIG5vdAoraW4gPHVwc3RyZWFtPiBhcmUgc2F2ZWQgdG8gYSB0ZW1wb3JhcnkgYXJlYS4gIFRoaXMgaXMgdGhlIHNhbWUgc2V0CitvZiBjb21taXRzIHRoYXQgd291bGQgYmUgc2hvd24gYnkgYGdpdCBsb2cgPHVwc3RyZWFtPi4uSEVBRGA7IG9yIGJ5CitgZ2l0IGxvZyAnZm9ya19wb2ludCcuLkhFQURgLCBpZiBgLS1mb3JrLXBvaW50YCBpcyBhY3RpdmUgKHNlZSB0aGUKK2Rlc2NyaXB0aW9uIG9uIGAtLWZvcmstcG9pbnRgIGJlbG93KTsgb3IgYnkgYGdpdCBsb2cgSEVBRGAsIGlmIHRoZQorYC0tcm9vdGAgb3B0aW9uIGlzIHNwZWNpZmllZC4KKworVGhlIGN1cnJlbnQgYnJhbmNoIGlzIHJlc2V0IHRvIDx1cHN0cmVhbT4sIG9yIDxuZXdiYXNlPiBpZiB0aGUKKy0tb250byBvcHRpb24gd2FzIHN1cHBsaWVkLiAgVGhpcyBoYXMgdGhlIGV4YWN0IHNhbWUgZWZmZWN0IGFzCitgZ2l0IHJlc2V0IC0taGFyZCA8dXBzdHJlYW0+YCAob3IgPG5ld2Jhc2U+KS4gIE9SSUdfSEVBRCBpcyBzZXQKK3RvIHBvaW50IGF0IHRoZSB0aXAgb2YgdGhlIGJyYW5jaCBiZWZvcmUgdGhlIHJlc2V0LgorCitUaGUgY29tbWl0cyB0aGF0IHdlcmUgcHJldmlvdXNseSBzYXZlZCBpbnRvIHRoZSB0ZW1wb3JhcnkgYXJlYSBhcmUKK3RoZW4gcmVhcHBsaWVkIHRvIHRoZSBjdXJyZW50IGJyYW5jaCwgb25lIGJ5IG9uZSwgaW4gb3JkZXIuIE5vdGUgdGhhdAorYW55IGNvbW1pdHMgaW4gSEVBRCB3aGljaCBpbnRyb2R1Y2UgdGhlIHNhbWUgdGV4dHVhbCBjaGFuZ2VzIGFzIGEgY29tbWl0CitpbiBIRUFELi48dXBzdHJlYW0+IGFyZSBvbWl0dGVkIChpLmUuLCBhIHBhdGNoIGFscmVhZHkgYWNjZXB0ZWQgdXBzdHJlYW0KK3dpdGggYSBkaWZmZXJlbnQgY29tbWl0IG1lc3NhZ2Ugb3IgdGltZXN0YW1wIHdpbGwgYmUgc2tpcHBlZCkuCisKK0l0IGlzIHBvc3NpYmxlIHRoYXQgYSBtZXJnZSBmYWlsdXJlIHdpbGwgcHJldmVudCB0aGlzIHByb2Nlc3MgZnJvbSBiZWluZworY29tcGxldGVseSBhdXRvbWF0aWMuICBZb3Ugd2lsbCBoYXZlIHRvIHJlc29sdmUgYW55IHN1Y2ggbWVyZ2UgZmFpbHVyZQorYW5kIHJ1biBgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlYC4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIGJ5cGFzcyB0aGUgY29tbWl0Cit0aGF0IGNhdXNlZCB0aGUgbWVyZ2UgZmFpbHVyZSB3aXRoIGBnaXQgcmViYXNlIC0tc2tpcGAuICBUbyBjaGVjayBvdXQgdGhlCitvcmlnaW5hbCA8YnJhbmNoPiBhbmQgcmVtb3ZlIHRoZSAuZ2l0L3JlYmFzZS1hcHBseSB3b3JraW5nIGZpbGVzLCB1c2UgdGhlCitjb21tYW5kIGBnaXQgcmViYXNlIC0tYWJvcnRgIGluc3RlYWQuCisKK0Fzc3VtZSB0aGUgZm9sbG93aW5nIGhpc3RvcnkgZXhpc3RzIGFuZCB0aGUgY3VycmVudCBicmFuY2ggaXMgInRvcGljIjoKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgQS0tLUItLS1DIHRvcGljCisgICAgICAgICAvCisgICAgRC0tLUUtLS1GLS0tRyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitGcm9tIHRoaXMgcG9pbnQsIHRoZSByZXN1bHQgb2YgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKworICAgIGdpdCByZWJhc2UgbWFzdGVyCisgICAgZ2l0IHJlYmFzZSBtYXN0ZXIgdG9waWMKKword291bGQgYmU6CisKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgQSctLUInLS1DJyB0b3BpYworICAgICAgICAgICAgICAgICAvCisgICAgRC0tLUUtLS1GLS0tRyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCisqTk9URToqIFRoZSBsYXR0ZXIgZm9ybSBpcyBqdXN0IGEgc2hvcnQtaGFuZCBvZiBgZ2l0IGNoZWNrb3V0IHRvcGljYAorZm9sbG93ZWQgYnkgYGdpdCByZWJhc2UgbWFzdGVyYC4gV2hlbiByZWJhc2UgZXhpdHMgYHRvcGljYCB3aWxsCityZW1haW4gdGhlIGNoZWNrZWQtb3V0IGJyYW5jaC4KKworSWYgdGhlIHVwc3RyZWFtIGJyYW5jaCBhbHJlYWR5IGNvbnRhaW5zIGEgY2hhbmdlIHlvdSBoYXZlIG1hZGUgKGUuZy4sCitiZWNhdXNlIHlvdSBtYWlsZWQgYSBwYXRjaCB3aGljaCB3YXMgYXBwbGllZCB1cHN0cmVhbSksIHRoZW4gdGhhdCBjb21taXQKK3dpbGwgYmUgc2tpcHBlZC4gRm9yIGV4YW1wbGUsIHJ1bm5pbmcgYGdpdCByZWJhc2UgbWFzdGVyYCBvbiB0aGUKK2ZvbGxvd2luZyBoaXN0b3J5IChpbiB3aGljaCBgQSdgIGFuZCBgQWAgaW50cm9kdWNlIHRoZSBzYW1lIHNldCBvZiBjaGFuZ2VzLAorYnV0IGhhdmUgZGlmZmVyZW50IGNvbW1pdHRlciBpbmZvcm1hdGlvbik6CisKKy0tLS0tLS0tLS0tLQorICAgICAgICAgIEEtLS1CLS0tQyB0b3BpYworICAgICAgICAgLworICAgIEQtLS1FLS0tQSctLS1GIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK3dpbGwgcmVzdWx0IGluOgorCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICBCJy0tLUMnIHRvcGljCisgICAgICAgICAgICAgICAgICAvCisgICAgRC0tLUUtLS1BJy0tLUYgbWFzdGVyCistLS0tLS0tLS0tLS0KKworSGVyZSBpcyBob3cgeW91IHdvdWxkIHRyYW5zcGxhbnQgYSB0b3BpYyBicmFuY2ggYmFzZWQgb24gb25lCiticmFuY2ggdG8gYW5vdGhlciwgdG8gcHJldGVuZCB0aGF0IHlvdSBmb3JrZWQgdGhlIHRvcGljIGJyYW5jaAorZnJvbSB0aGUgbGF0dGVyIGJyYW5jaCwgdXNpbmcgYHJlYmFzZSAtLW9udG9gLgorCitGaXJzdCBsZXQncyBhc3N1bWUgeW91ciAndG9waWMnIGlzIGJhc2VkIG9uIGJyYW5jaCAnbmV4dCcuCitGb3IgZXhhbXBsZSwgYSBmZWF0dXJlIGRldmVsb3BlZCBpbiAndG9waWMnIGRlcGVuZHMgb24gc29tZQorZnVuY3Rpb25hbGl0eSB3aGljaCBpcyBmb3VuZCBpbiAnbmV4dCcuCisKKy0tLS0tLS0tLS0tLQorICAgIG8tLS1vLS0tby0tLW8tLS1vICBtYXN0ZXIKKyAgICAgICAgIFwKKyAgICAgICAgICBvLS0tby0tLW8tLS1vLS0tbyAgbmV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLS1vLS0tbyAgdG9waWMKKy0tLS0tLS0tLS0tLQorCitXZSB3YW50IHRvIG1ha2UgJ3RvcGljJyBmb3JrZWQgZnJvbSBicmFuY2ggJ21hc3Rlcic7IGZvciBleGFtcGxlLAorYmVjYXVzZSB0aGUgZnVuY3Rpb25hbGl0eSBvbiB3aGljaCAndG9waWMnIGRlcGVuZHMgd2FzIG1lcmdlZCBpbnRvIHRoZQorbW9yZSBzdGFibGUgJ21hc3RlcicgYnJhbmNoLiBXZSB3YW50IG91ciB0cmVlIHRvIGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyAgICBvLS0tby0tLW8tLS1vLS0tbyAgbWFzdGVyCisgICAgICAgIHwgICAgICAgICAgICBcCisgICAgICAgIHwgICAgICAgICAgICAgbyctLW8nLS1vJyAgdG9waWMKKyAgICAgICAgIFwKKyAgICAgICAgICBvLS0tby0tLW8tLS1vLS0tbyAgbmV4dAorLS0tLS0tLS0tLS0tCisKK1dlIGNhbiBnZXQgdGhpcyB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgICBnaXQgcmViYXNlIC0tb250byBtYXN0ZXIgbmV4dCB0b3BpYworCisKK0Fub3RoZXIgZXhhbXBsZSBvZiAtLW9udG8gb3B0aW9uIGlzIHRvIHJlYmFzZSBwYXJ0IG9mIGEKK2JyYW5jaC4gIElmIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEgtLS1JLS0tSiB0b3BpY0IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8KKyAgICAgICAgICAgICAgICAgIEUtLS1GLS0tRyAgdG9waWNBCisgICAgICAgICAgICAgICAgIC8KKyAgICBBLS0tQi0tLUMtLS1EICBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCit0aGVuIHRoZSBjb21tYW5kCisKKyAgICBnaXQgcmViYXNlIC0tb250byBtYXN0ZXIgdG9waWNBIHRvcGljQgorCit3b3VsZCByZXN1bHQgaW46CisKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICBIJy0tSSctLUonICB0b3BpY0IKKyAgICAgICAgICAgICAgICAvCisgICAgICAgICAgICAgICAgfCBFLS0tRi0tLUcgIHRvcGljQQorICAgICAgICAgICAgICAgIHwvCisgICAgQS0tLUItLS1DLS0tRCAgbWFzdGVyCistLS0tLS0tLS0tLS0KKworVGhpcyBpcyB1c2VmdWwgd2hlbiB0b3BpY0IgZG9lcyBub3QgZGVwZW5kIG9uIHRvcGljQS4KKworQSByYW5nZSBvZiBjb21taXRzIGNvdWxkIGFsc28gYmUgcmVtb3ZlZCB3aXRoIHJlYmFzZS4gIElmIHdlIGhhdmUKK3RoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgorCistLS0tLS0tLS0tLS0KKyAgICBFLS0tRi0tLUctLS1ILS0tSS0tLUogIHRvcGljQQorLS0tLS0tLS0tLS0tCisKK3RoZW4gdGhlIGNvbW1hbmQKKworICAgIGdpdCByZWJhc2UgLS1vbnRvIHRvcGljQX41IHRvcGljQX4zIHRvcGljQQorCit3b3VsZCByZXN1bHQgaW4gdGhlIHJlbW92YWwgb2YgY29tbWl0cyBGIGFuZCBHOgorCistLS0tLS0tLS0tLS0KKyAgICBFLS0tSCctLS1JJy0tLUonICB0b3BpY0EKKy0tLS0tLS0tLS0tLQorCitUaGlzIGlzIHVzZWZ1bCBpZiBGIGFuZCBHIHdlcmUgZmxhd2VkIGluIHNvbWUgd2F5LCBvciBzaG91bGQgbm90IGJlCitwYXJ0IG9mIHRvcGljQS4gIE5vdGUgdGhhdCB0aGUgYXJndW1lbnQgdG8gLS1vbnRvIGFuZCB0aGUgPHVwc3RyZWFtPgorcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsaWQgY29tbWl0LWlzaC4KKworSW4gY2FzZSBvZiBjb25mbGljdCwgJ2dpdCByZWJhc2UnIHdpbGwgc3RvcCBhdCB0aGUgZmlyc3QgcHJvYmxlbWF0aWMgY29tbWl0CithbmQgbGVhdmUgY29uZmxpY3QgbWFya2VycyBpbiB0aGUgdHJlZS4gIFlvdSBjYW4gdXNlICdnaXQgZGlmZicgdG8gbG9jYXRlCit0aGUgbWFya2VycyAoPDw8PDw8KSBhbmQgbWFrZSBlZGl0cyB0byByZXNvbHZlIHRoZSBjb25mbGljdC4gIEZvciBlYWNoCitmaWxlIHlvdSBlZGl0LCB5b3UgbmVlZCB0byB0ZWxsIEdpdCB0aGF0IHRoZSBjb25mbGljdCBoYXMgYmVlbiByZXNvbHZlZCwKK3R5cGljYWxseSB0aGlzIHdvdWxkIGJlIGRvbmUgd2l0aAorCisKKyAgICBnaXQgYWRkIDxmaWxlbmFtZT4KKworCitBZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0IG1hbnVhbGx5IGFuZCB1cGRhdGluZyB0aGUgaW5kZXggd2l0aCB0aGUKK2Rlc2lyZWQgcmVzb2x1dGlvbiwgeW91IGNhbiBjb250aW51ZSB0aGUgcmViYXNpbmcgcHJvY2VzcyB3aXRoCisKKworICAgIGdpdCByZWJhc2UgLS1jb250aW51ZQorCisKK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gdW5kbyB0aGUgJ2dpdCByZWJhc2UnIHdpdGgKKworCisgICAgZ2l0IHJlYmFzZSAtLWFib3J0CisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworaW5jbHVkZTo6Y29uZmlnL3JlYmFzZS50eHRbXQorCitPUFRJT05TCistLS0tLS0tCistLW9udG8gPG5ld2Jhc2U+OjoKKwlTdGFydGluZyBwb2ludCBhdCB3aGljaCB0byBjcmVhdGUgdGhlIG5ldyBjb21taXRzLiBJZiB0aGUKKwktLW9udG8gb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBzdGFydGluZyBwb2ludCBpcworCTx1cHN0cmVhbT4uICBNYXkgYmUgYW55IHZhbGlkIGNvbW1pdCwgYW5kIG5vdCBqdXN0IGFuCisJZXhpc3RpbmcgYnJhbmNoIG5hbWUuCisrCitBcyBhIHNwZWNpYWwgY2FzZSwgeW91IG1heSB1c2UgIkFcLi4uQiIgYXMgYSBzaG9ydGN1dCBmb3IgdGhlCittZXJnZSBiYXNlIG9mIEEgYW5kIEIgaWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZS4gWW91IGNhbgorbGVhdmUgb3V0IGF0IG1vc3Qgb25lIG9mIEEgYW5kIEIsIGluIHdoaWNoIGNhc2UgaXQgZGVmYXVsdHMgdG8gSEVBRC4KKworLS1rZWVwLWJhc2U6OgorCVNldCB0aGUgc3RhcnRpbmcgcG9pbnQgYXQgd2hpY2ggdG8gY3JlYXRlIHRoZSBuZXcgY29tbWl0cyB0byB0aGUKKwltZXJnZSBiYXNlIG9mIDx1cHN0cmVhbT4gPGJyYW5jaD4uIFJ1bm5pbmcKKwknZ2l0IHJlYmFzZSAtLWtlZXAtYmFzZSA8dXBzdHJlYW0+IDxicmFuY2g+JyBpcyBlcXVpdmFsZW50IHRvCisJcnVubmluZyAnZ2l0IHJlYmFzZSAtLW9udG8gPHVwc3RyZWFtPi4uLiA8dXBzdHJlYW0+Jy4KKysKK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpbiB0aGUgY2FzZSB3aGVyZSBvbmUgaXMgZGV2ZWxvcGluZyBhIGZlYXR1cmUgb24KK3RvcCBvZiBhbiB1cHN0cmVhbSBicmFuY2guIFdoaWxlIHRoZSBmZWF0dXJlIGlzIGJlaW5nIHdvcmtlZCBvbiwgdGhlCit1cHN0cmVhbSBicmFuY2ggbWF5IGFkdmFuY2UgYW5kIGl0IG1heSBub3QgYmUgdGhlIGJlc3QgaWRlYSB0byBrZWVwCityZWJhc2luZyBvbiB0b3Agb2YgdGhlIHVwc3RyZWFtIGJ1dCB0byBrZWVwIHRoZSBiYXNlIGNvbW1pdCBhcy1pcy4KKysKK0FsdGhvdWdoIGJvdGggdGhpcyBvcHRpb24gYW5kIC0tZm9yay1wb2ludCBmaW5kIHRoZSBtZXJnZSBiYXNlIGJldHdlZW4KKzx1cHN0cmVhbT4gYW5kIDxicmFuY2g+LCB0aGlzIG9wdGlvbiB1c2VzIHRoZSBtZXJnZSBiYXNlIGFzIHRoZSBfc3RhcnRpbmcKK3BvaW50XyBvbiB3aGljaCBuZXcgY29tbWl0cyB3aWxsIGJlIGNyZWF0ZWQsIHdoZXJlYXMgLS1mb3JrLXBvaW50IHVzZXMKK3RoZSBtZXJnZSBiYXNlIHRvIGRldGVybWluZSB0aGUgX3NldCBvZiBjb21taXRzXyB3aGljaCB3aWxsIGJlIHJlYmFzZWQuCisrCitTZWUgYWxzbyBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KKworPHVwc3RyZWFtPjo6CisJVXBzdHJlYW0gYnJhbmNoIHRvIGNvbXBhcmUgYWdhaW5zdC4gIE1heSBiZSBhbnkgdmFsaWQgY29tbWl0LAorCW5vdCBqdXN0IGFuIGV4aXN0aW5nIGJyYW5jaCBuYW1lLiBEZWZhdWx0cyB0byB0aGUgY29uZmlndXJlZAorCXVwc3RyZWFtIGZvciB0aGUgY3VycmVudCBicmFuY2guCisKKzxicmFuY2g+OjoKKwlXb3JraW5nIGJyYW5jaDsgZGVmYXVsdHMgdG8gSEVBRC4KKworLS1jb250aW51ZTo6CisJUmVzdGFydCB0aGUgcmViYXNpbmcgcHJvY2VzcyBhZnRlciBoYXZpbmcgcmVzb2x2ZWQgYSBtZXJnZSBjb25mbGljdC4KKworLS1hYm9ydDo6CisJQWJvcnQgdGhlIHJlYmFzZSBvcGVyYXRpb24gYW5kIHJlc2V0IEhFQUQgdG8gdGhlIG9yaWdpbmFsCisJYnJhbmNoLiBJZiA8YnJhbmNoPiB3YXMgcHJvdmlkZWQgd2hlbiB0aGUgcmViYXNlIG9wZXJhdGlvbiB3YXMKKwlzdGFydGVkLCB0aGVuIEhFQUQgd2lsbCBiZSByZXNldCB0byA8YnJhbmNoPi4gT3RoZXJ3aXNlIEhFQUQKKwl3aWxsIGJlIHJlc2V0IHRvIHdoZXJlIGl0IHdhcyB3aGVuIHRoZSByZWJhc2Ugb3BlcmF0aW9uIHdhcworCXN0YXJ0ZWQuCisKKy0tcXVpdDo6CisJQWJvcnQgdGhlIHJlYmFzZSBvcGVyYXRpb24gYnV0IEhFQUQgaXMgbm90IHJlc2V0IGJhY2sgdG8gdGhlCisJb3JpZ2luYWwgYnJhbmNoLiBUaGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSBhcmUgYWxzbyBsZWZ0CisJdW5jaGFuZ2VkIGFzIGEgcmVzdWx0LiBJZiBhIHRlbXBvcmFyeSBzdGFzaCBlbnRyeSB3YXMgY3JlYXRlZAorCXVzaW5nIC0tYXV0b3N0YXNoLCBpdCB3aWxsIGJlIHNhdmVkIHRvIHRoZSBzdGFzaCBsaXN0LgorCistLWFwcGx5OgorCVVzZSBhcHBseWluZyBzdHJhdGVnaWVzIHRvIHJlYmFzZSAoY2FsbGluZyBgZ2l0LWFtYAorCWludGVybmFsbHkpLiAgVGhpcyBvcHRpb24gbWF5IGJlY29tZSBhIG5vLW9wIGluIHRoZSBmdXR1cmUKKwlvbmNlIHRoZSBtZXJnZSBiYWNrZW5kIGhhbmRsZXMgZXZlcnl0aGluZyB0aGUgYXBwbHkgb25lIGRvZXMuCisrCitTZWUgYWxzbyBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KKworLS1lbXB0eT17ZHJvcCxrZWVwLGFza306OgorCUhvdyB0byBoYW5kbGUgY29tbWl0cyB0aGF0IGFyZSBub3QgZW1wdHkgdG8gc3RhcnQgYW5kIGFyZSBub3QKKwljbGVhbiBjaGVycnktcGlja3Mgb2YgYW55IHVwc3RyZWFtIGNvbW1pdCwgYnV0IHdoaWNoIGJlY29tZQorCWVtcHR5IGFmdGVyIHJlYmFzaW5nIChiZWNhdXNlIHRoZXkgY29udGFpbiBhIHN1YnNldCBvZiBhbHJlYWR5CisJdXBzdHJlYW0gY2hhbmdlcykuICBXaXRoIGRyb3AgKHRoZSBkZWZhdWx0KSwgY29tbWl0cyB0aGF0CisJYmVjb21lIGVtcHR5IGFyZSBkcm9wcGVkLiAgV2l0aCBrZWVwLCBzdWNoIGNvbW1pdHMgYXJlIGtlcHQuCisJV2l0aCBhc2sgKGltcGxpZWQgYnkgLS1pbnRlcmFjdGl2ZSksIHRoZSByZWJhc2Ugd2lsbCBoYWx0IHdoZW4KKwlhbiBlbXB0eSBjb21taXQgaXMgYXBwbGllZCBhbGxvd2luZyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgdG8KKwlkcm9wIGl0LCBlZGl0IGZpbGVzIG1vcmUsIG9yIGp1c3QgY29tbWl0IHRoZSBlbXB0eSBjaGFuZ2VzLgorCU90aGVyIG9wdGlvbnMsIGxpa2UgLS1leGVjLCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBvZiBkcm9wIHVubGVzcworCS1pLy0taW50ZXJhY3RpdmUgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQuCisrCitOb3RlIHRoYXQgY29tbWl0cyB3aGljaCBzdGFydCBlbXB0eSBhcmUga2VwdCAodW5sZXNzIC0tbm8ta2VlcC1lbXB0eQoraXMgc3BlY2lmaWVkKSwgYW5kIGNvbW1pdHMgd2hpY2ggYXJlIGNsZWFuIGNoZXJyeS1waWNrcyAoYXMgZGV0ZXJtaW5lZAorYnkgYGdpdCBsb2cgLS1jaGVycnktbWFyayAuLi5gKSBhcmUgZGV0ZWN0ZWQgYW5kIGRyb3BwZWQgYXMgYQorcHJlbGltaW5hcnkgc3RlcCAodW5sZXNzIC0tcmVhcHBseS1jaGVycnktcGlja3MgaXMgcGFzc2VkKS4KKysKK1NlZSBhbHNvIElOQ09NUEFUSUJMRSBPUFRJT05TIGJlbG93LgorCistLW5vLWtlZXAtZW1wdHk6OgorLS1rZWVwLWVtcHR5OjoKKwlEbyBub3Qga2VlcCBjb21taXRzIHRoYXQgc3RhcnQgZW1wdHkgYmVmb3JlIHRoZSByZWJhc2UKKwkoaS5lLiB0aGF0IGRvIG5vdCBjaGFuZ2UgYW55dGhpbmcgZnJvbSBpdHMgcGFyZW50KSBpbiB0aGUKKwlyZXN1bHQuICBUaGUgZGVmYXVsdCBpcyB0byBrZWVwIGNvbW1pdHMgd2hpY2ggc3RhcnQgZW1wdHksCisJc2luY2UgY3JlYXRpbmcgc3VjaCBjb21taXRzIHJlcXVpcmVzIHBhc3NpbmcgdGhlIC0tYWxsb3ctZW1wdHkKKwlvdmVycmlkZSBmbGFnIHRvIGBnaXQgY29tbWl0YCwgc2lnbmlmeWluZyB0aGF0IGEgdXNlciBpcyB2ZXJ5CisJaW50ZW50aW9uYWxseSBjcmVhdGluZyBzdWNoIGEgY29tbWl0IGFuZCB0aHVzIHdhbnRzIHRvIGtlZXAKKwlpdC4KKysKK1VzYWdlIG9mIHRoaXMgZmxhZyB3aWxsIHByb2JhYmx5IGJlIHJhcmUsIHNpbmNlIHlvdSBjYW4gZ2V0IHJpZCBvZgorY29tbWl0cyB0aGF0IHN0YXJ0IGVtcHR5IGJ5IGp1c3QgZmlyaW5nIHVwIGFuIGludGVyYWN0aXZlIHJlYmFzZSBhbmQKK3JlbW92aW5nIHRoZSBsaW5lcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb21taXRzIHlvdSBkb24ndCB3YW50LiAgVGhpcworZmxhZyBleGlzdHMgYXMgYSBjb252ZW5pZW50IHNob3J0Y3V0LCBzdWNoIGFzIGZvciBjYXNlcyB3aGVyZSBleHRlcm5hbAordG9vbHMgZ2VuZXJhdGUgbWFueSBlbXB0eSBjb21taXRzIGFuZCB5b3Ugd2FudCB0aGVtIGFsbCByZW1vdmVkLgorKworRm9yIGNvbW1pdHMgd2hpY2ggZG8gbm90IHN0YXJ0IGVtcHR5IGJ1dCBiZWNvbWUgZW1wdHkgYWZ0ZXIgcmViYXNpbmcsCitzZWUgdGhlIC0tZW1wdHkgZmxhZy4KKysKK1NlZSBhbHNvIElOQ09NUEFUSUJMRSBPUFRJT05TIGJlbG93LgorCistLXJlYXBwbHktY2hlcnJ5LXBpY2tzOjoKKy0tbm8tcmVhcHBseS1jaGVycnktcGlja3M6OgorCVJlYXBwbHkgYWxsIGNsZWFuIGNoZXJyeS1waWNrcyBvZiBhbnkgdXBzdHJlYW0gY29tbWl0IGluc3RlYWQKKwlvZiBwcmVlbXB0aXZlbHkgZHJvcHBpbmcgdGhlbS4gKElmIHRoZXNlIGNvbW1pdHMgdGhlbiBiZWNvbWUKKwllbXB0eSBhZnRlciByZWJhc2luZywgYmVjYXVzZSB0aGV5IGNvbnRhaW4gYSBzdWJzZXQgb2YgYWxyZWFkeQorCXVwc3RyZWFtIGNoYW5nZXMsIHRoZSBiZWhhdmlvciB0b3dhcmRzIHRoZW0gaXMgY29udHJvbGxlZCBieQorCXRoZSBgLS1lbXB0eWAgZmxhZy4pCisrCitCeSBkZWZhdWx0IChvciBpZiBgLS1uby1yZWFwcGx5LWNoZXJyeS1waWNrc2AgaXMgZ2l2ZW4pLCB0aGVzZSBjb21taXRzCit3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZC4gIEJlY2F1c2UgdGhpcyBuZWNlc3NpdGF0ZXMgcmVhZGluZyBhbGwKK3Vwc3RyZWFtIGNvbW1pdHMsIHRoaXMgY2FuIGJlIGV4cGVuc2l2ZSBpbiByZXBvcyB3aXRoIGEgbGFyZ2UgbnVtYmVyCitvZiB1cHN0cmVhbSBjb21taXRzIHRoYXQgbmVlZCB0byBiZSByZWFkLgorKworYC0tcmVhcHBseS1jaGVycnktcGlja3NgIGFsbG93cyByZWJhc2UgdG8gZm9yZ28gcmVhZGluZyBhbGwgdXBzdHJlYW0KK2NvbW1pdHMsIHBvdGVudGlhbGx5IGltcHJvdmluZyBwZXJmb3JtYW5jZS4KKysKK1NlZSBhbHNvIElOQ09NUEFUSUJMRSBPUFRJT05TIGJlbG93LgorCistLWFsbG93LWVtcHR5LW1lc3NhZ2U6OgorCU5vLW9wLiAgUmViYXNpbmcgY29tbWl0cyB3aXRoIGFuIGVtcHR5IG1lc3NhZ2UgdXNlZCB0byBmYWlsCisJYW5kIHRoaXMgb3B0aW9uIHdvdWxkIG92ZXJyaWRlIHRoYXQgYmVoYXZpb3IsIGFsbG93aW5nIGNvbW1pdHMKKwl3aXRoIGVtcHR5IG1lc3NhZ2VzIHRvIGJlIHJlYmFzZWQuICBOb3cgY29tbWl0cyB3aXRoIGFuIGVtcHR5CisJbWVzc2FnZSBkbyBub3QgY2F1c2UgcmViYXNpbmcgdG8gaGFsdC4KKysKK1NlZSBhbHNvIElOQ09NUEFUSUJMRSBPUFRJT05TIGJlbG93LgorCistLXNraXA6OgorCVJlc3RhcnQgdGhlIHJlYmFzaW5nIHByb2Nlc3MgYnkgc2tpcHBpbmcgdGhlIGN1cnJlbnQgcGF0Y2guCisKKy0tZWRpdC10b2RvOjoKKwlFZGl0IHRoZSB0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZS4KKworLS1zaG93LWN1cnJlbnQtcGF0Y2g6OgorCVNob3cgdGhlIGN1cnJlbnQgcGF0Y2ggaW4gYW4gaW50ZXJhY3RpdmUgcmViYXNlIG9yIHdoZW4gcmViYXNlCisJaXMgc3RvcHBlZCBiZWNhdXNlIG9mIGNvbmZsaWN0cy4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZgorCWBnaXQgc2hvdyBSRUJBU0VfSEVBRGAuCisKKy1tOjoKKy0tbWVyZ2U6OgorCVVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlLiAgV2hlbiB0aGUgcmVjdXJzaXZlIChkZWZhdWx0KSBtZXJnZQorCXN0cmF0ZWd5IGlzIHVzZWQsIHRoaXMgYWxsb3dzIHJlYmFzZSB0byBiZSBhd2FyZSBvZiByZW5hbWVzIG9uIHRoZQorCXVwc3RyZWFtIHNpZGUuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorKworTm90ZSB0aGF0IGEgcmViYXNlIG1lcmdlIHdvcmtzIGJ5IHJlcGxheWluZyBlYWNoIGNvbW1pdCBmcm9tIHRoZSB3b3JraW5nCiticmFuY2ggb24gdG9wIG9mIHRoZSA8dXBzdHJlYW0+IGJyYW5jaC4gIEJlY2F1c2Ugb2YgdGhpcywgd2hlbiBhIG1lcmdlCitjb25mbGljdCBoYXBwZW5zLCB0aGUgc2lkZSByZXBvcnRlZCBhcyAnb3VycycgaXMgdGhlIHNvLWZhciByZWJhc2VkCitzZXJpZXMsIHN0YXJ0aW5nIHdpdGggPHVwc3RyZWFtPiwgYW5kICd0aGVpcnMnIGlzIHRoZSB3b3JraW5nIGJyYW5jaC4gIEluCitvdGhlciB3b3JkcywgdGhlIHNpZGVzIGFyZSBzd2FwcGVkLgorKworU2VlIGFsc28gSU5DT01QQVRJQkxFIE9QVElPTlMgYmVsb3cuCisKKy1zIDxzdHJhdGVneT46OgorLS1zdHJhdGVneT08c3RyYXRlZ3k+OjoKKwlVc2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5LgorCUlmIHRoZXJlIGlzIG5vIGAtc2Agb3B0aW9uICdnaXQgbWVyZ2UtcmVjdXJzaXZlJyBpcyB1c2VkCisJaW5zdGVhZC4gIFRoaXMgaW1wbGllcyAtLW1lcmdlLgorKworQmVjYXVzZSAnZ2l0IHJlYmFzZScgcmVwbGF5cyBlYWNoIGNvbW1pdCBmcm9tIHRoZSB3b3JraW5nIGJyYW5jaAorb24gdG9wIG9mIHRoZSA8dXBzdHJlYW0+IGJyYW5jaCB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3ksIHVzaW5nCit0aGUgJ291cnMnIHN0cmF0ZWd5IHNpbXBseSBlbXB0aWVzIGFsbCBwYXRjaGVzIGZyb20gdGhlIDxicmFuY2g+LAord2hpY2ggbWFrZXMgbGl0dGxlIHNlbnNlLgorKworU2VlIGFsc28gSU5DT01QQVRJQkxFIE9QVElPTlMgYmVsb3cuCisKKy1YIDxzdHJhdGVneS1vcHRpb24+OjoKKy0tc3RyYXRlZ3ktb3B0aW9uPTxzdHJhdGVneS1vcHRpb24+OjoKKwlQYXNzIHRoZSA8c3RyYXRlZ3ktb3B0aW9uPiB0aHJvdWdoIHRvIHRoZSBtZXJnZSBzdHJhdGVneS4KKwlUaGlzIGltcGxpZXMgYC0tbWVyZ2VgIGFuZCwgaWYgbm8gc3RyYXRlZ3kgaGFzIGJlZW4KKwlzcGVjaWZpZWQsIGAtcyByZWN1cnNpdmVgLiAgTm90ZSB0aGUgcmV2ZXJzYWwgb2YgJ291cnMnIGFuZAorCSd0aGVpcnMnIGFzIG5vdGVkIGFib3ZlIGZvciB0aGUgYC1tYCBvcHRpb24uCisrCitTZWUgYWxzbyBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KKworLS1yZXJlcmUtYXV0b3VwZGF0ZTo6CistLW5vLXJlcmVyZS1hdXRvdXBkYXRlOjoKKwlBbGxvdyB0aGUgcmVyZXJlIG1lY2hhbmlzbSB0byB1cGRhdGUgdGhlIGluZGV4IHdpdGggdGhlCisJcmVzdWx0IG9mIGF1dG8tY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZS4KKworLVNbPGtleWlkPl06OgorLS1ncGctc2lnbls9PGtleWlkPl06OgorLS1uby1ncGctc2lnbjo6CisJR1BHLXNpZ24gY29tbWl0cy4gVGhlIGBrZXlpZGAgYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kCisJZGVmYXVsdHMgdG8gdGhlIGNvbW1pdHRlciBpZGVudGl0eTsgaWYgc3BlY2lmaWVkLCBpdCBtdXN0IGJlCisJc3R1Y2sgdG8gdGhlIG9wdGlvbiB3aXRob3V0IGEgc3BhY2UuIGAtLW5vLWdwZy1zaWduYCBpcyB1c2VmdWwgdG8KKwljb3VudGVybWFuZCBib3RoIGBjb21taXQuZ3BnU2lnbmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYW5kCisJZWFybGllciBgLS1ncGctc2lnbmAuCisKKy1xOjoKKy0tcXVpZXQ6OgorCUJlIHF1aWV0LiBJbXBsaWVzIC0tbm8tc3RhdC4KKworLXY6OgorLS12ZXJib3NlOjoKKwlCZSB2ZXJib3NlLiBJbXBsaWVzIC0tc3RhdC4KKworLS1zdGF0OjoKKwlTaG93IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIHNpbmNlIHRoZSBsYXN0IHJlYmFzZS4gVGhlCisJZGlmZnN0YXQgaXMgYWxzbyBjb250cm9sbGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWJhc2Uuc3RhdC4KKworLW46OgorLS1uby1zdGF0OjoKKwlEbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGFzIHBhcnQgb2YgdGhlIHJlYmFzZSBwcm9jZXNzLgorCistLW5vLXZlcmlmeTo6CisJVGhpcyBvcHRpb24gYnlwYXNzZXMgdGhlIHByZS1yZWJhc2UgaG9vay4gIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0aG9va3NbNV0uCisKKy0tdmVyaWZ5OjoKKwlBbGxvd3MgdGhlIHByZS1yZWJhc2UgaG9vayB0byBydW4sIHdoaWNoIGlzIHRoZSBkZWZhdWx0LiAgVGhpcyBvcHRpb24gY2FuCisJYmUgdXNlZCB0byBvdmVycmlkZSAtLW5vLXZlcmlmeS4gIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0aG9va3NbNV0uCisKKy1DPG4+OjoKKwlFbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIHN1cnJvdW5kaW5nIGNvbnRleHQgbWF0Y2ggYmVmb3JlCisJYW5kIGFmdGVyIGVhY2ggY2hhbmdlLiAgV2hlbiBmZXdlciBsaW5lcyBvZiBzdXJyb3VuZGluZworCWNvbnRleHQgZXhpc3QgdGhleSBhbGwgbXVzdCBtYXRjaC4gIEJ5IGRlZmF1bHQgbm8gY29udGV4dCBpcworCWV2ZXIgaWdub3JlZC4gIEltcGxpZXMgLS1hcHBseS4KKysKK1NlZSBhbHNvIElOQ09NUEFUSUJMRSBPUFRJT05TIGJlbG93LgorCistLW5vLWZmOjoKKy0tZm9yY2UtcmViYXNlOjoKKy1mOjoKKwlJbmRpdmlkdWFsbHkgcmVwbGF5IGFsbCByZWJhc2VkIGNvbW1pdHMgaW5zdGVhZCBvZiBmYXN0LWZvcndhcmRpbmcKKwlvdmVyIHRoZSB1bmNoYW5nZWQgb25lcy4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBlbnRpcmUgaGlzdG9yeSBvZgorCXRoZSByZWJhc2VkIGJyYW5jaCBpcyBjb21wb3NlZCBvZiBuZXcgY29tbWl0cy4KKysKK1lvdSBtYXkgZmluZCB0aGlzIGhlbHBmdWwgYWZ0ZXIgcmV2ZXJ0aW5nIGEgdG9waWMgYnJhbmNoIG1lcmdlLCBhcyB0aGlzIG9wdGlvbgorcmVjcmVhdGVzIHRoZSB0b3BpYyBicmFuY2ggd2l0aCBmcmVzaCBjb21taXRzIHNvIGl0IGNhbiBiZSByZW1lcmdlZAorc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgbmVlZGluZyB0byAicmV2ZXJ0IHRoZSByZXZlcnNpb24iIChzZWUgdGhlCitsaW5rOmhvd3RvL3JldmVydC1hLWZhdWx0eS1tZXJnZS5odG1sW3JldmVydC1hLWZhdWx0eS1tZXJnZSBIb3ctVG9dIGZvcgorZGV0YWlscykuCisKKy0tZm9yay1wb2ludDo6CistLW5vLWZvcmstcG9pbnQ6OgorCVVzZSByZWZsb2cgdG8gZmluZCBhIGJldHRlciBjb21tb24gYW5jZXN0b3IgYmV0d2VlbiA8dXBzdHJlYW0+CisJYW5kIDxicmFuY2g+IHdoZW4gY2FsY3VsYXRpbmcgd2hpY2ggY29tbWl0cyBoYXZlIGJlZW4KKwlpbnRyb2R1Y2VkIGJ5IDxicmFuY2g+LgorKworV2hlbiAtLWZvcmstcG9pbnQgaXMgYWN0aXZlLCAnZm9ya19wb2ludCcgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YKKzx1cHN0cmVhbT4gdG8gY2FsY3VsYXRlIHRoZSBzZXQgb2YgY29tbWl0cyB0byByZWJhc2UsIHdoZXJlCisnZm9ya19wb2ludCcgaXMgdGhlIHJlc3VsdCBvZiBgZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDx1cHN0cmVhbT4KKzxicmFuY2g+YCBjb21tYW5kIChzZWUgbGlua2dpdDpnaXQtbWVyZ2UtYmFzZVsxXSkuICBJZiAnZm9ya19wb2ludCcKK2VuZHMgdXAgYmVpbmcgZW1wdHksIHRoZSA8dXBzdHJlYW0+IHdpbGwgYmUgdXNlZCBhcyBhIGZhbGxiYWNrLgorKworSWYgPHVwc3RyZWFtPiBpcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGVuIHRoZSBkZWZhdWx0IGlzCitgLS1uby1mb3JrLXBvaW50YCwgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IGlzIGAtLWZvcmstcG9pbnRgLgorKworSWYgeW91ciBicmFuY2ggd2FzIGJhc2VkIG9uIDx1cHN0cmVhbT4gYnV0IDx1cHN0cmVhbT4gd2FzIHJld291bmQgYW5kCit5b3VyIGJyYW5jaCBjb250YWlucyBjb21taXRzIHdoaWNoIHdlcmUgZHJvcHBlZCwgdGhpcyBvcHRpb24gY2FuIGJlIHVzZWQKK3dpdGggYC0ta2VlcC1iYXNlYCBpbiBvcmRlciB0byBkcm9wIHRob3NlIGNvbW1pdHMgZnJvbSB5b3VyIGJyYW5jaC4KKysKK1NlZSBhbHNvIElOQ09NUEFUSUJMRSBPUFRJT05TIGJlbG93LgorCistLWlnbm9yZS13aGl0ZXNwYWNlOjoKKy0td2hpdGVzcGFjZT08b3B0aW9uPjo6CisJVGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0byB0aGUgJ2dpdCBhcHBseScgcHJvZ3JhbQorCShzZWUgbGlua2dpdDpnaXQtYXBwbHlbMV0pIHRoYXQgYXBwbGllcyB0aGUgcGF0Y2guCisJSW1wbGllcyAtLWFwcGx5LgorKworU2VlIGFsc28gSU5DT01QQVRJQkxFIE9QVElPTlMgYmVsb3cuCisKKy0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGU6OgorLS1pZ25vcmUtZGF0ZTo6CisJVGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0byAnZ2l0IGFtJyB0byBlYXNpbHkgY2hhbmdlIHRoZSBkYXRlcworCW9mIHRoZSByZWJhc2VkIGNvbW1pdHMgKHNlZSBsaW5rZ2l0OmdpdC1hbVsxXSkuCisrCitTZWUgYWxzbyBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KKworLS1zaWdub2ZmOjoKKwlBZGQgYSBTaWduZWQtb2ZmLWJ5OiB0cmFpbGVyIHRvIGFsbCB0aGUgcmViYXNlZCBjb21taXRzLiBOb3RlCisJdGhhdCBpZiBgLS1pbnRlcmFjdGl2ZWAgaXMgZ2l2ZW4gdGhlbiBvbmx5IGNvbW1pdHMgbWFya2VkIHRvIGJlCisJcGlja2VkLCBlZGl0ZWQgb3IgcmV3b3JkZWQgd2lsbCBoYXZlIHRoZSB0cmFpbGVyIGFkZGVkLgorKworU2VlIGFsc28gSU5DT01QQVRJQkxFIE9QVElPTlMgYmVsb3cuCisKKy1pOjoKKy0taW50ZXJhY3RpdmU6OgorCU1ha2UgYSBsaXN0IG9mIHRoZSBjb21taXRzIHdoaWNoIGFyZSBhYm91dCB0byBiZSByZWJhc2VkLiAgTGV0IHRoZQorCXVzZXIgZWRpdCB0aGF0IGxpc3QgYmVmb3JlIHJlYmFzaW5nLiAgVGhpcyBtb2RlIGNhbiBhbHNvIGJlIHVzZWQgdG8KKwlzcGxpdCBjb21taXRzIChzZWUgU1BMSVRUSU5HIENPTU1JVFMgYmVsb3cpLgorKworVGhlIGNvbW1pdCBsaXN0IGZvcm1hdCBjYW4gYmUgY2hhbmdlZCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbgorcmViYXNlLmluc3RydWN0aW9uRm9ybWF0LiAgQSBjdXN0b21pemVkIGluc3RydWN0aW9uIGZvcm1hdCB3aWxsIGF1dG9tYXRpY2FsbHkKK2hhdmUgdGhlIGxvbmcgY29tbWl0IGhhc2ggcHJlcGVuZGVkIHRvIHRoZSBmb3JtYXQuCisrCitTZWUgYWxzbyBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KKworLXI6OgorLS1yZWJhc2UtbWVyZ2VzWz0ocmViYXNlLWNvdXNpbnN8bm8tcmViYXNlLWNvdXNpbnMpXTo6CisJQnkgZGVmYXVsdCwgYSByZWJhc2Ugd2lsbCBzaW1wbHkgZHJvcCBtZXJnZSBjb21taXRzIGZyb20gdGhlIHRvZG8KKwlsaXN0LCBhbmQgcHV0IHRoZSByZWJhc2VkIGNvbW1pdHMgaW50byBhIHNpbmdsZSwgbGluZWFyIGJyYW5jaC4KKwlXaXRoIGAtLXJlYmFzZS1tZXJnZXNgLCB0aGUgcmViYXNlIHdpbGwgaW5zdGVhZCB0cnkgdG8gcHJlc2VydmUKKwl0aGUgYnJhbmNoaW5nIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGNvbW1pdHMgdGhhdCBhcmUgdG8gYmUgcmViYXNlZCwKKwlieSByZWNyZWF0aW5nIHRoZSBtZXJnZSBjb21taXRzLiBBbnkgcmVzb2x2ZWQgbWVyZ2UgY29uZmxpY3RzIG9yCisJbWFudWFsIGFtZW5kbWVudHMgaW4gdGhlc2UgbWVyZ2UgY29tbWl0cyB3aWxsIGhhdmUgdG8gYmUKKwlyZXNvbHZlZC9yZS1hcHBsaWVkIG1hbnVhbGx5LgorKworQnkgZGVmYXVsdCwgb3Igd2hlbiBgbm8tcmViYXNlLWNvdXNpbnNgIHdhcyBzcGVjaWZpZWQsIGNvbW1pdHMgd2hpY2ggZG8gbm90CitoYXZlIGA8dXBzdHJlYW0+YCBhcyBkaXJlY3QgYW5jZXN0b3Igd2lsbCBrZWVwIHRoZWlyIG9yaWdpbmFsIGJyYW5jaCBwb2ludCwKK2kuZS4gY29tbWl0cyB0aGF0IHdvdWxkIGJlIGV4Y2x1ZGVkIGJ5IGxpbmtnaXQ6Z2l0LWxvZ1sxXSdzCitgLS1hbmNlc3RyeS1wYXRoYCBvcHRpb24gd2lsbCBrZWVwIHRoZWlyIG9yaWdpbmFsIGFuY2VzdHJ5IGJ5IGRlZmF1bHQuIElmCit0aGUgYHJlYmFzZS1jb3VzaW5zYCBtb2RlIGlzIHR1cm5lZCBvbiwgc3VjaCBjb21taXRzIGFyZSBpbnN0ZWFkIHJlYmFzZWQKK29udG8gYDx1cHN0cmVhbT5gIChvciBgPG9udG8+YCwgaWYgc3BlY2lmaWVkKS4KKysKK1RoZSBgLS1yZWJhc2UtbWVyZ2VzYCBtb2RlIGlzIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBkZXByZWNhdGVkCitgLS1wcmVzZXJ2ZS1tZXJnZXNgIGJ1dCB3b3JrcyB3aXRoIGludGVyYWN0aXZlIHJlYmFzZXMsCit3aGVyZSBjb21taXRzIGNhbiBiZSByZW9yZGVyZWQsIGluc2VydGVkIGFuZCBkcm9wcGVkIGF0IHdpbGwuCisrCitJdCBpcyBjdXJyZW50bHkgb25seSBwb3NzaWJsZSB0byByZWNyZWF0ZSB0aGUgbWVyZ2UgY29tbWl0cyB1c2luZyB0aGUKK2ByZWN1cnNpdmVgIG1lcmdlIHN0cmF0ZWd5OyBEaWZmZXJlbnQgbWVyZ2Ugc3RyYXRlZ2llcyBjYW4gYmUgdXNlZCBvbmx5IHZpYQorZXhwbGljaXQgYGV4ZWMgZ2l0IG1lcmdlIC1zIDxzdHJhdGVneT4gWy4uLl1gIGNvbW1hbmRzLgorKworU2VlIGFsc28gUkVCQVNJTkcgTUVSR0VTIGFuZCBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KKworLXA6OgorLS1wcmVzZXJ2ZS1tZXJnZXM6OgorCVtERVBSRUNBVEVEOiB1c2UgYC0tcmViYXNlLW1lcmdlc2AgaW5zdGVhZF0gUmVjcmVhdGUgbWVyZ2UgY29tbWl0cworCWluc3RlYWQgb2YgZmxhdHRlbmluZyB0aGUgaGlzdG9yeSBieSByZXBsYXlpbmcgY29tbWl0cyBhIG1lcmdlIGNvbW1pdAorCWludHJvZHVjZXMuIE1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb25zIG9yIG1hbnVhbCBhbWVuZG1lbnRzIHRvIG1lcmdlCisJY29tbWl0cyBhcmUgbm90IHByZXNlcnZlZC4KKysKK1RoaXMgdXNlcyB0aGUgYC0taW50ZXJhY3RpdmVgIG1hY2hpbmVyeSBpbnRlcm5hbGx5LCBidXQgY29tYmluaW5nIGl0Cit3aXRoIHRoZSBgLS1pbnRlcmFjdGl2ZWAgb3B0aW9uIGV4cGxpY2l0bHkgaXMgZ2VuZXJhbGx5IG5vdCBhIGdvb2QKK2lkZWEgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyAoc2VlIEJVR1MgYmVsb3cpLgorKworU2VlIGFsc28gSU5DT01QQVRJQkxFIE9QVElPTlMgYmVsb3cuCisKKy14IDxjbWQ+OjoKKy0tZXhlYyA8Y21kPjo6CisJQXBwZW5kICJleGVjIDxjbWQ+IiBhZnRlciBlYWNoIGxpbmUgY3JlYXRpbmcgYSBjb21taXQgaW4gdGhlCisJZmluYWwgaGlzdG9yeS4gPGNtZD4gd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBvbmUgb3IgbW9yZSBzaGVsbAorCWNvbW1hbmRzLiBBbnkgY29tbWFuZCB0aGF0IGZhaWxzIHdpbGwgaW50ZXJydXB0IHRoZSByZWJhc2UsCisJd2l0aCBleGl0IGNvZGUgMS4KKysKK1lvdSBtYXkgZXhlY3V0ZSBzZXZlcmFsIGNvbW1hbmRzIGJ5IGVpdGhlciB1c2luZyBvbmUgaW5zdGFuY2Ugb2YgYC0tZXhlY2AKK3dpdGggc2V2ZXJhbCBjb21tYW5kczoKKysKKwlnaXQgcmViYXNlIC1pIC0tZXhlYyAiY21kMSAmJiBjbWQyICYmIC4uLiIKKysKK29yIGJ5IGdpdmluZyBtb3JlIHRoYW4gb25lIGAtLWV4ZWNgOgorKworCWdpdCByZWJhc2UgLWkgLS1leGVjICJjbWQxIiAtLWV4ZWMgImNtZDIiIC0tZXhlYyAuLi4KKysKK0lmIGAtLWF1dG9zcXVhc2hgIGlzIHVzZWQsICJleGVjIiBsaW5lcyB3aWxsIG5vdCBiZSBhcHBlbmRlZCBmb3IKK3RoZSBpbnRlcm1lZGlhdGUgY29tbWl0cywgYW5kIHdpbGwgb25seSBhcHBlYXIgYXQgdGhlIGVuZCBvZiBlYWNoCitzcXVhc2gvZml4dXAgc2VyaWVzLgorKworVGhpcyB1c2VzIHRoZSBgLS1pbnRlcmFjdGl2ZWAgbWFjaGluZXJ5IGludGVybmFsbHksIGJ1dCBpdCBjYW4gYmUgcnVuCit3aXRob3V0IGFuIGV4cGxpY2l0IGAtLWludGVyYWN0aXZlYC4KKysKK1NlZSBhbHNvIElOQ09NUEFUSUJMRSBPUFRJT05TIGJlbG93LgorCistLXJvb3Q6OgorCVJlYmFzZSBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSA8YnJhbmNoPiwgaW5zdGVhZCBvZgorCWxpbWl0aW5nIHRoZW0gd2l0aCBhbiA8dXBzdHJlYW0+LiAgVGhpcyBhbGxvd3MgeW91IHRvIHJlYmFzZQorCXRoZSByb290IGNvbW1pdChzKSBvbiBhIGJyYW5jaC4gIFdoZW4gdXNlZCB3aXRoIC0tb250bywgaXQKKwl3aWxsIHNraXAgY2hhbmdlcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiA8bmV3YmFzZT4gKGluc3RlYWQgb2YKKwk8dXBzdHJlYW0+KSB3aGVyZWFzIHdpdGhvdXQgLS1vbnRvIGl0IHdpbGwgb3BlcmF0ZSBvbiBldmVyeSBjaGFuZ2UuCisJV2hlbiB1c2VkIHRvZ2V0aGVyIHdpdGggYm90aCAtLW9udG8gYW5kIC0tcHJlc2VydmUtbWVyZ2VzLAorCSdhbGwnIHJvb3QgY29tbWl0cyB3aWxsIGJlIHJld3JpdHRlbiB0byBoYXZlIDxuZXdiYXNlPiBhcyBwYXJlbnQKKwlpbnN0ZWFkLgorKworU2VlIGFsc28gSU5DT01QQVRJQkxFIE9QVElPTlMgYmVsb3cuCisKKy0tYXV0b3NxdWFzaDo6CistLW5vLWF1dG9zcXVhc2g6OgorCVdoZW4gdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBiZWdpbnMgd2l0aCAic3F1YXNoISAuLi4iIChvcgorCSJmaXh1cCEgLi4uIiksIGFuZCB0aGVyZSBpcyBhbHJlYWR5IGEgY29tbWl0IGluIHRoZSB0b2RvIGxpc3QgdGhhdAorCW1hdGNoZXMgdGhlIHNhbWUgYC4uLmAsIGF1dG9tYXRpY2FsbHkgbW9kaWZ5IHRoZSB0b2RvIGxpc3Qgb2YgcmViYXNlCisJLWkgc28gdGhhdCB0aGUgY29tbWl0IG1hcmtlZCBmb3Igc3F1YXNoaW5nIGNvbWVzIHJpZ2h0IGFmdGVyIHRoZQorCWNvbW1pdCB0byBiZSBtb2RpZmllZCwgYW5kIGNoYW5nZSB0aGUgYWN0aW9uIG9mIHRoZSBtb3ZlZCBjb21taXQKKwlmcm9tIGBwaWNrYCB0byBgc3F1YXNoYCAob3IgYGZpeHVwYCkuICBBIGNvbW1pdCBtYXRjaGVzIHRoZSBgLi4uYCBpZgorCXRoZSBjb21taXQgc3ViamVjdCBtYXRjaGVzLCBvciBpZiB0aGUgYC4uLmAgcmVmZXJzIHRvIHRoZSBjb21taXQncworCWhhc2guIEFzIGEgZmFsbC1iYWNrLCBwYXJ0aWFsIG1hdGNoZXMgb2YgdGhlIGNvbW1pdCBzdWJqZWN0IHdvcmssCisJdG9vLiAgVGhlIHJlY29tbWVuZGVkIHdheSB0byBjcmVhdGUgZml4dXAvc3F1YXNoIGNvbW1pdHMgaXMgYnkgdXNpbmcKKwl0aGUgYC0tZml4dXBgL2AtLXNxdWFzaGAgb3B0aW9ucyBvZiBsaW5rZ2l0OmdpdC1jb21taXRbMV0uCisrCitJZiB0aGUgYC0tYXV0b3NxdWFzaGAgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB1c2luZyB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgYHJlYmFzZS5hdXRvU3F1YXNoYCwgdGhpcyBvcHRpb24gY2FuIGJlCit1c2VkIHRvIG92ZXJyaWRlIGFuZCBkaXNhYmxlIHRoaXMgc2V0dGluZy4KKysKK1NlZSBhbHNvIElOQ09NUEFUSUJMRSBPUFRJT05TIGJlbG93LgorCistLWF1dG9zdGFzaDo6CistLW5vLWF1dG9zdGFzaDo6CisJQXV0b21hdGljYWxseSBjcmVhdGUgYSB0ZW1wb3Jhcnkgc3Rhc2ggZW50cnkgYmVmb3JlIHRoZSBvcGVyYXRpb24KKwliZWdpbnMsIGFuZCBhcHBseSBpdCBhZnRlciB0aGUgb3BlcmF0aW9uIGVuZHMuICBUaGlzIG1lYW5zCisJdGhhdCB5b3UgY2FuIHJ1biByZWJhc2Ugb24gYSBkaXJ0eSB3b3JrdHJlZS4gIEhvd2V2ZXIsIHVzZQorCXdpdGggY2FyZTogdGhlIGZpbmFsIHN0YXNoIGFwcGxpY2F0aW9uIGFmdGVyIGEgc3VjY2Vzc2Z1bAorCXJlYmFzZSBtaWdodCByZXN1bHQgaW4gbm9uLXRyaXZpYWwgY29uZmxpY3RzLgorCistLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWM6OgorLS1uby1yZXNjaGVkdWxlLWZhaWxlZC1leGVjOjoKKwlBdXRvbWF0aWNhbGx5IHJlc2NoZWR1bGUgYGV4ZWNgIGNvbW1hbmRzIHRoYXQgZmFpbGVkLiBUaGlzIG9ubHkgbWFrZXMKKwlzZW5zZSBpbiBpbnRlcmFjdGl2ZSBtb2RlIChvciB3aGVuIGFuIGAtLWV4ZWNgIG9wdGlvbiB3YXMgcHJvdmlkZWQpLgorCitJTkNPTVBBVElCTEUgT1BUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBvcHRpb25zOgorCisgKiAtLWFwcGx5CisgKiAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlCisgKiAtLWlnbm9yZS1kYXRlCisgKiAtLWlnbm9yZS13aGl0ZXNwYWNlCisgKiAtLXdoaXRlc3BhY2UKKyAqIC1DCisKK2FyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKKyAqIC0tbWVyZ2UKKyAqIC0tc3RyYXRlZ3kKKyAqIC0tc3RyYXRlZ3ktb3B0aW9uCisgKiAtLWFsbG93LWVtcHR5LW1lc3NhZ2UKKyAqIC0tW25vLV1hdXRvc3F1YXNoCisgKiAtLXJlYmFzZS1tZXJnZXMKKyAqIC0tcHJlc2VydmUtbWVyZ2VzCisgKiAtLWludGVyYWN0aXZlCisgKiAtLWV4ZWMKKyAqIC0tbm8ta2VlcC1lbXB0eQorICogLS1lbXB0eT0KKyAqIC0tcmVhcHBseS1jaGVycnktcGlja3MKKyAqIC0tZWRpdC10b2RvCisgKiAtLXJvb3Qgd2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggLS1vbnRvCisKK0luIGFkZGl0aW9uLCB0aGUgZm9sbG93aW5nIHBhaXJzIG9mIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZToKKworICogLS1wcmVzZXJ2ZS1tZXJnZXMgYW5kIC0taW50ZXJhY3RpdmUKKyAqIC0tcHJlc2VydmUtbWVyZ2VzIGFuZCAtLXNpZ25vZmYKKyAqIC0tcHJlc2VydmUtbWVyZ2VzIGFuZCAtLXJlYmFzZS1tZXJnZXMKKyAqIC0tcHJlc2VydmUtbWVyZ2VzIGFuZCAtLWVtcHR5PQorICogLS1rZWVwLWJhc2UgYW5kIC0tb250bworICogLS1rZWVwLWJhc2UgYW5kIC0tcm9vdAorICogLS1mb3JrLXBvaW50IGFuZCAtLXJvb3QKKworQkVIQVZJT1JBTCBESUZGRVJFTkNFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2l0IHJlYmFzZSBoYXMgdHdvIHByaW1hcnkgYmFja2VuZHM6IGFwcGx5IGFuZCBtZXJnZS4gIChUaGUgYXBwbHkKK2JhY2tlbmQgdXNlZCB0byBiZSBrbm93biBhcyB0aGUgJ2FtJyBiYWNrZW5kLCBidXQgdGhlIG5hbWUgbGVkIHRvCitjb25mdXNpb24gYXMgaXQgbG9va3MgbGlrZSBhIHZlcmIgaW5zdGVhZCBvZiBhIG5vdW4uICBBbHNvLCB0aGUgbWVyZ2UKK2JhY2tlbmQgdXNlZCB0byBiZSBrbm93biBhcyB0aGUgaW50ZXJhY3RpdmUgYmFja2VuZCwgYnV0IGl0IGlzIG5vdwordXNlZCBmb3Igbm9uLWludGVyYWN0aXZlIGNhc2VzIGFzIHdlbGwuICBCb3RoIHdlcmUgcmVuYW1lZCBiYXNlZCBvbgorbG93ZXItbGV2ZWwgZnVuY3Rpb25hbGl0eSB0aGF0IHVuZGVycGlubmVkIGVhY2guKSBUaGVyZSBhcmUgc29tZQorc3VidGxlIGRpZmZlcmVuY2VzIGluIGhvdyB0aGVzZSB0d28gYmFja2VuZHMgYmVoYXZlOgorCitFbXB0eSBjb21taXRzCit+fn5+fn5+fn5+fn5+CisKK1RoZSBhcHBseSBiYWNrZW5kIHVuZm9ydHVuYXRlbHkgZHJvcHMgaW50ZW50aW9uYWxseSBlbXB0eSBjb21taXRzLCBpLmUuCitjb21taXRzIHRoYXQgc3RhcnRlZCBlbXB0eSwgdGhvdWdoIHRoZXNlIGFyZSByYXJlIGluIHByYWN0aWNlLiAgSXQKK2Fsc28gZHJvcHMgY29tbWl0cyB0aGF0IGJlY29tZSBlbXB0eSBhbmQgaGFzIG5vIG9wdGlvbiBmb3IgY29udHJvbGxpbmcKK3RoaXMgYmVoYXZpb3IuCisKK1RoZSBtZXJnZSBiYWNrZW5kIGtlZXBzIGludGVudGlvbmFsbHkgZW1wdHkgY29tbWl0cyBieSBkZWZhdWx0ICh0aG91Z2gKK3dpdGggLWkgdGhleSBhcmUgbWFya2VkIGFzIGVtcHR5IGluIHRoZSB0b2RvIGxpc3QgZWRpdG9yLCBvciB0aGV5IGNhbgorYmUgZHJvcHBlZCBhdXRvbWF0aWNhbGx5IHdpdGggLS1uby1rZWVwLWVtcHR5KS4KKworU2ltaWxhciB0byB0aGUgYXBwbHkgYmFja2VuZCwgYnkgZGVmYXVsdCB0aGUgbWVyZ2UgYmFja2VuZCBkcm9wcworY29tbWl0cyB0aGF0IGJlY29tZSBlbXB0eSB1bmxlc3MgLWkvLS1pbnRlcmFjdGl2ZSBpcyBzcGVjaWZpZWQgKGluCit3aGljaCBjYXNlIGl0IHN0b3BzIGFuZCBhc2tzIHRoZSB1c2VyIHdoYXQgdG8gZG8pLiAgVGhlIG1lcmdlIGJhY2tlbmQKK2Fsc28gaGFzIGFuIC0tZW1wdHk9e2Ryb3Asa2VlcCxhc2t9IG9wdGlvbiBmb3IgY2hhbmdpbmcgdGhlIGJlaGF2aW9yCitvZiBoYW5kbGluZyBjb21taXRzIHRoYXQgYmVjb21lIGVtcHR5LgorCitEaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworRHVlIHRvIHRoZSBsYWNrIG9mIGFjY3VyYXRlIHRyZWUgaW5mb3JtYXRpb24gKGFyaXNpbmcgZnJvbQorY29uc3RydWN0aW5nIGZha2UgYW5jZXN0b3JzIHdpdGggdGhlIGxpbWl0ZWQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluCitwYXRjaGVzKSwgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gaXMgZGlzYWJsZWQgaW4gdGhlIGFwcGx5IGJhY2tlbmQuCitEaXNhYmxlZCBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBtZWFucyB0aGF0IGlmIG9uZSBzaWRlIG9mIGhpc3RvcnkKK3JlbmFtZXMgYSBkaXJlY3RvcnkgYW5kIHRoZSBvdGhlciBhZGRzIG5ldyBmaWxlcyB0byB0aGUgb2xkIGRpcmVjdG9yeSwKK3RoZW4gdGhlIG5ldyBmaWxlcyB3aWxsIGJlIGxlZnQgYmVoaW5kIGluIHRoZSBvbGQgZGlyZWN0b3J5IHdpdGhvdXQKK2FueSB3YXJuaW5nIGF0IHRoZSB0aW1lIG9mIHJlYmFzaW5nIHRoYXQgeW91IG1heSB3YW50IHRvIG1vdmUgdGhlc2UKK2ZpbGVzIGludG8gdGhlIG5ldyBkaXJlY3RvcnkuCisKK0RpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIHdvcmtzIHdpdGggdGhlIG1lcmdlIGJhY2tlbmQgdG8gcHJvdmlkZSB5b3UKK3dhcm5pbmdzIGluIHN1Y2ggY2FzZXMuCisKK0NvbnRleHQKK35+fn5+fn4KKworVGhlIGFwcGx5IGJhY2tlbmQgd29ya3MgYnkgY3JlYXRpbmcgYSBzZXF1ZW5jZSBvZiBwYXRjaGVzIChieSBjYWxsaW5nCitgZm9ybWF0LXBhdGNoYCBpbnRlcm5hbGx5KSwgYW5kIHRoZW4gYXBwbHlpbmcgdGhlIHBhdGNoZXMgaW4gc2VxdWVuY2UKKyhjYWxsaW5nIGBhbWAgaW50ZXJuYWxseSkuICBQYXRjaGVzIGFyZSBjb21wb3NlZCBvZiBtdWx0aXBsZSBodW5rcywKK2VhY2ggd2l0aCBsaW5lIG51bWJlcnMsIGEgY29udGV4dCByZWdpb24sIGFuZCB0aGUgYWN0dWFsIGNoYW5nZXMuICBUaGUKK2xpbmUgbnVtYmVycyBoYXZlIHRvIGJlIHRha2VuIHdpdGggc29tZSBmdXp6LCBzaW5jZSB0aGUgb3RoZXIgc2lkZQord2lsbCBsaWtlbHkgaGF2ZSBpbnNlcnRlZCBvciBkZWxldGVkIGxpbmVzIGVhcmxpZXIgaW4gdGhlIGZpbGUuICBUaGUKK2NvbnRleHQgcmVnaW9uIGlzIG1lYW50IHRvIGhlbHAgZmluZCBob3cgdG8gYWRqdXN0IHRoZSBsaW5lIG51bWJlcnMgaW4KK29yZGVyIHRvIGFwcGx5IHRoZSBjaGFuZ2VzIHRvIHRoZSByaWdodCBsaW5lcy4gIEhvd2V2ZXIsIGlmIG11bHRpcGxlCithcmVhcyBvZiB0aGUgY29kZSBoYXZlIHRoZSBzYW1lIHN1cnJvdW5kaW5nIGxpbmVzIG9mIGNvbnRleHQsIHRoZQord3Jvbmcgb25lIGNhbiBiZSBwaWNrZWQuICBUaGVyZSBhcmUgcmVhbC13b3JsZCBjYXNlcyB3aGVyZSB0aGlzIGhhcworY2F1c2VkIGNvbW1pdHMgdG8gYmUgcmVhcHBsaWVkIGluY29ycmVjdGx5IHdpdGggbm8gY29uZmxpY3RzIHJlcG9ydGVkLgorU2V0dGluZyBkaWZmLmNvbnRleHQgdG8gYSBsYXJnZXIgdmFsdWUgbWF5IHByZXZlbnQgc3VjaCB0eXBlcyBvZgorcHJvYmxlbXMsIGJ1dCBpbmNyZWFzZXMgdGhlIGNoYW5jZSBvZiBzcHVyaW91cyBjb25mbGljdHMgKHNpbmNlIGl0Cit3aWxsIHJlcXVpcmUgbW9yZSBsaW5lcyBvZiBtYXRjaGluZyBjb250ZXh0IHRvIGFwcGx5KS4KKworVGhlIG1lcmdlIGJhY2tlbmQgd29ya3Mgd2l0aCBhIGZ1bGwgY29weSBvZiBlYWNoIHJlbGV2YW50IGZpbGUsCitpbnN1bGF0aW5nIGl0IGZyb20gdGhlc2UgdHlwZXMgb2YgcHJvYmxlbXMuCisKK0xhYmVsbGluZyBvZiBjb25mbGljdHMgbWFya2Vycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1doZW4gdGhlcmUgYXJlIGNvbnRlbnQgY29uZmxpY3RzLCB0aGUgbWVyZ2UgbWFjaGluZXJ5IHRyaWVzIHRvCithbm5vdGF0ZSBlYWNoIHNpZGUncyBjb25mbGljdCBtYXJrZXJzIHdpdGggdGhlIGNvbW1pdHMgd2hlcmUgdGhlCitjb250ZW50IGNhbWUgZnJvbS4gIFNpbmNlIHRoZSBhcHBseSBiYWNrZW5kIGRyb3BzIHRoZSBvcmlnaW5hbAoraW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlYmFzZWQgY29tbWl0cyBhbmQgdGhlaXIgcGFyZW50cyAoYW5kIGluc3RlYWQKK2dlbmVyYXRlcyBuZXcgZmFrZSBjb21taXRzIGJhc2VkIG9mZiBsaW1pdGVkIGluZm9ybWF0aW9uIGluIHRoZQorZ2VuZXJhdGVkIHBhdGNoZXMpLCB0aG9zZSBjb21taXRzIGNhbm5vdCBiZSBpZGVudGlmaWVkOyBpbnN0ZWFkIGl0IGhhcwordG8gZmFsbCBiYWNrIHRvIGEgY29tbWl0IHN1bW1hcnkuICBBbHNvLCB3aGVuIG1lcmdlLmNvbmZsaWN0U3R5bGUgaXMKK3NldCB0byBkaWZmMywgdGhlIGFwcGx5IGJhY2tlbmQgd2lsbCB1c2UgImNvbnN0cnVjdGVkIG1lcmdlIGJhc2UiIHRvCitsYWJlbCB0aGUgY29udGVudCBmcm9tIHRoZSBtZXJnZSBiYXNlLCBhbmQgdGh1cyBwcm92aWRlIG5vIGluZm9ybWF0aW9uCithYm91dCB0aGUgbWVyZ2UgYmFzZSBjb21taXQgd2hhdHNvZXZlci4KKworVGhlIG1lcmdlIGJhY2tlbmQgd29ya3Mgd2l0aCB0aGUgZnVsbCBjb21taXRzIG9uIGJvdGggc2lkZXMgb2YgaGlzdG9yeQorYW5kIHRodXMgaGFzIG5vIHN1Y2ggbGltaXRhdGlvbnMuCisKK0hvb2tzCit+fn5+fgorCitUaGUgYXBwbHkgYmFja2VuZCBoYXMgbm90IHRyYWRpdGlvbmFsbHkgY2FsbGVkIHRoZSBwb3N0LWNvbW1pdCBob29rLAord2hpbGUgdGhlIG1lcmdlIGJhY2tlbmQgaGFzLiAgQm90aCBoYXZlIGNhbGxlZCB0aGUgcG9zdC1jaGVja291dCBob29rLAordGhvdWdoIHRoZSBtZXJnZSBiYWNrZW5kIGhhcyBzcXVlbGNoZWQgaXRzIG91dHB1dC4gIEZ1cnRoZXIsIGJvdGgKK2JhY2tlbmRzIG9ubHkgY2FsbCB0aGUgcG9zdC1jaGVja291dCBob29rIHdpdGggdGhlIHN0YXJ0aW5nIHBvaW50Citjb21taXQgb2YgdGhlIHJlYmFzZSwgbm90IHRoZSBpbnRlcm1lZGlhdGUgY29tbWl0cyBub3IgdGhlIGZpbmFsCitjb21taXQuICBJbiBlYWNoIGNhc2UsIHRoZSBjYWxsaW5nIG9mIHRoZXNlIGhvb2tzIHdhcyBieSBhY2NpZGVudCBvZgoraW1wbGVtZW50YXRpb24gcmF0aGVyIHRoYW4gYnkgZGVzaWduIChib3RoIGJhY2tlbmRzIHdlcmUgb3JpZ2luYWxseQoraW1wbGVtZW50ZWQgYXMgc2hlbGwgc2NyaXB0cyBhbmQgaGFwcGVuZWQgdG8gaW52b2tlIG90aGVyIGNvbW1hbmRzCitsaWtlICdnaXQgY2hlY2tvdXQnIG9yICdnaXQgY29tbWl0JyB0aGF0IHdvdWxkIGNhbGwgdGhlIGhvb2tzKS4gIEJvdGgKK2JhY2tlbmRzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGJlaGF2aW9yLCB0aG91Z2ggaXQgaXMgbm90IGVudGlyZWx5CitjbGVhciB3aGljaCwgaWYgYW55LCBpcyBjb3JyZWN0LiAgV2Ugd2lsbCBsaWtlbHkgbWFrZSByZWJhc2Ugc3RvcAorY2FsbGluZyBlaXRoZXIgb2YgdGhlc2UgaG9va3MgaW4gdGhlIGZ1dHVyZS4KKworSW50ZXJydXB0YWJpbGl0eQorfn5+fn5+fn5+fn5+fn5+fgorCitUaGUgYXBwbHkgYmFja2VuZCBoYXMgc2FmZXR5IHByb2JsZW1zIHdpdGggYW4gaWxsLXRpbWVkIGludGVycnVwdDsgaWYKK3RoZSB1c2VyIHByZXNzZXMgQ3RybC1DIGF0IHRoZSB3cm9uZyB0aW1lIHRvIHRyeSB0byBhYm9ydCB0aGUgcmViYXNlLAordGhlIHJlYmFzZSBjYW4gZW50ZXIgYSBzdGF0ZSB3aGVyZSBpdCBjYW5ub3QgYmUgYWJvcnRlZCB3aXRoIGEKK3N1YnNlcXVlbnQgYGdpdCByZWJhc2UgLS1hYm9ydGAuICBUaGUgbWVyZ2UgYmFja2VuZCBkb2VzIG5vdCBhcHBlYXIgdG8KK3N1ZmZlciBmcm9tIHRoZSBzYW1lIHNob3J0Y29taW5nLiAgKFNlZQoraHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMjAwMjA3MTMyMTUyLkdDMjg2OEBzemVkZXIuZGV2LyBmb3IKK2RldGFpbHMuKQorCitDb21taXQgUmV3b3JkaW5nCit+fn5+fn5+fn5+fn5+fn5+CisKK1doZW4gYSBjb25mbGljdCBvY2N1cnMgd2hpbGUgcmViYXNpbmcsIHJlYmFzZSBzdG9wcyBhbmQgYXNrcyB0aGUgdXNlcgordG8gcmVzb2x2ZS4gIFNpbmNlIHRoZSB1c2VyIG1heSBuZWVkIHRvIG1ha2Ugbm90YWJsZSBjaGFuZ2VzIHdoaWxlCityZXNvbHZpbmcgY29uZmxpY3RzLCBhZnRlciBjb25mbGljdHMgYXJlIHJlc29sdmVkIGFuZCB0aGUgdXNlciBoYXMgcnVuCitgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlYCwgdGhlIHJlYmFzZSBzaG91bGQgb3BlbiBhbiBlZGl0b3IgYW5kIGFzayB0aGUKK3VzZXIgdG8gdXBkYXRlIHRoZSBjb21taXQgbWVzc2FnZS4gIFRoZSBtZXJnZSBiYWNrZW5kIGRvZXMgdGhpcywgd2hpbGUKK3RoZSBhcHBseSBiYWNrZW5kIGJsaW5kbHkgYXBwbGllcyB0aGUgb3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UuCisKK01pc2NlbGxhbmVvdXMgZGlmZmVyZW5jZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlcmUgYXJlIGEgZmV3IG1vcmUgYmVoYXZpb3JhbCBkaWZmZXJlbmNlcyB0aGF0IG1vc3QgZm9sa3Mgd291bGQKK3Byb2JhYmx5IGNvbnNpZGVyIGluY29uc2VxdWVudGlhbCBidXQgd2hpY2ggYXJlIG1lbnRpb25lZCBmb3IKK2NvbXBsZXRlbmVzczoKKworKiBSZWZsb2c6IFRoZSB0d28gYmFja2VuZHMgd2lsbCB1c2UgZGlmZmVyZW50IHdvcmRpbmcgd2hlbiBkZXNjcmliaW5nCisgIHRoZSBjaGFuZ2VzIG1hZGUgaW4gdGhlIHJlZmxvZywgdGhvdWdoIGJvdGggd2lsbCBtYWtlIHVzZSBvZiB0aGUKKyAgd29yZCAicmViYXNlIi4KKworKiBQcm9ncmVzcywgaW5mb3JtYXRpb25hbCwgYW5kIGVycm9yIG1lc3NhZ2VzOiBUaGUgdHdvIGJhY2tlbmRzCisgIHByb3ZpZGUgc2xpZ2h0bHkgZGlmZmVyZW50IHByb2dyZXNzIGFuZCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzLgorICBBbHNvLCB0aGUgYXBwbHkgYmFja2VuZCB3cml0ZXMgZXJyb3IgbWVzc2FnZXMgKHN1Y2ggYXMgIllvdXIgZmlsZXMKKyAgd291bGQgYmUgb3ZlcndyaXR0ZW4uLi4iKSB0byBzdGRvdXQsIHdoaWxlIHRoZSBtZXJnZSBiYWNrZW5kIHdyaXRlcworICB0aGVtIHRvIHN0ZGVyci4KKworKiBTdGF0ZSBkaXJlY3RvcmllczogVGhlIHR3byBiYWNrZW5kcyBrZWVwIHRoZWlyIHN0YXRlIGluIGRpZmZlcmVudAorICBkaXJlY3RvcmllcyB1bmRlciAuZ2l0LworCitpbmNsdWRlOjptZXJnZS1zdHJhdGVnaWVzLnR4dFtdCisKK05PVEVTCistLS0tLQorCitZb3Ugc2hvdWxkIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyAnZ2l0IHJlYmFzZScgb24gYQorcmVwb3NpdG9yeSB0aGF0IHlvdSBzaGFyZS4gIFNlZSBhbHNvIFJFQ09WRVJJTkcgRlJPTSBVUFNUUkVBTSBSRUJBU0UKK2JlbG93LgorCitXaGVuIHRoZSBnaXQtcmViYXNlIGNvbW1hbmQgaXMgcnVuLCBpdCB3aWxsIGZpcnN0IGV4ZWN1dGUgYSAicHJlLXJlYmFzZSIKK2hvb2sgaWYgb25lIGV4aXN0cy4gIFlvdSBjYW4gdXNlIHRoaXMgaG9vayB0byBkbyBzYW5pdHkgY2hlY2tzIGFuZAorcmVqZWN0IHRoZSByZWJhc2UgaWYgaXQgaXNuJ3QgYXBwcm9wcmlhdGUuICBQbGVhc2Ugc2VlIHRoZSB0ZW1wbGF0ZQorcHJlLXJlYmFzZSBob29rIHNjcmlwdCBmb3IgYW4gZXhhbXBsZS4KKworVXBvbiBjb21wbGV0aW9uLCA8YnJhbmNoPiB3aWxsIGJlIHRoZSBjdXJyZW50IGJyYW5jaC4KKworSU5URVJBQ1RJVkUgTU9ERQorLS0tLS0tLS0tLS0tLS0tLQorCitSZWJhc2luZyBpbnRlcmFjdGl2ZWx5IG1lYW5zIHRoYXQgeW91IGhhdmUgYSBjaGFuY2UgdG8gZWRpdCB0aGUgY29tbWl0cword2hpY2ggYXJlIHJlYmFzZWQuICBZb3UgY2FuIHJlb3JkZXIgdGhlIGNvbW1pdHMsIGFuZCB5b3UgY2FuCityZW1vdmUgdGhlbSAod2VlZGluZyBvdXQgYmFkIG9yIG90aGVyd2lzZSB1bndhbnRlZCBwYXRjaGVzKS4KKworVGhlIGludGVyYWN0aXZlIG1vZGUgaXMgbWVhbnQgZm9yIHRoaXMgdHlwZSBvZiB3b3JrZmxvdzoKKworMS4gaGF2ZSBhIHdvbmRlcmZ1bCBpZGVhCisyLiBoYWNrIG9uIHRoZSBjb2RlCiszLiBwcmVwYXJlIGEgc2VyaWVzIGZvciBzdWJtaXNzaW9uCis0LiBzdWJtaXQKKword2hlcmUgcG9pbnQgMi4gY29uc2lzdHMgb2Ygc2V2ZXJhbCBpbnN0YW5jZXMgb2YKKworYSkgcmVndWxhciB1c2UKKworIDEuIGZpbmlzaCBzb21ldGhpbmcgd29ydGh5IG9mIGEgY29tbWl0CisgMi4gY29tbWl0CisKK2IpIGluZGVwZW5kZW50IGZpeHVwCisKKyAxLiByZWFsaXplIHRoYXQgc29tZXRoaW5nIGRvZXMgbm90IHdvcmsKKyAyLiBmaXggdGhhdAorIDMuIGNvbW1pdCBpdAorCitTb21ldGltZXMgdGhlIHRoaW5nIGZpeGVkIGluIGIuMi4gY2Fubm90IGJlIGFtZW5kZWQgdG8gdGhlIG5vdC1xdWl0ZQorcGVyZmVjdCBjb21taXQgaXQgZml4ZXMsIGJlY2F1c2UgdGhhdCBjb21taXQgaXMgYnVyaWVkIGRlZXBseSBpbiBhCitwYXRjaCBzZXJpZXMuICBUaGF0IGlzIGV4YWN0bHkgd2hhdCBpbnRlcmFjdGl2ZSByZWJhc2UgaXMgZm9yOiB1c2UgaXQKK2FmdGVyIHBsZW50eSBvZiAiYSJzIGFuZCAiYiJzLCBieSByZWFycmFuZ2luZyBhbmQgZWRpdGluZworY29tbWl0cywgYW5kIHNxdWFzaGluZyBtdWx0aXBsZSBjb21taXRzIGludG8gb25lLgorCitTdGFydCBpdCB3aXRoIHRoZSBsYXN0IGNvbW1pdCB5b3Ugd2FudCB0byByZXRhaW4gYXMtaXM6CisKKwlnaXQgcmViYXNlIC1pIDxhZnRlci10aGlzLWNvbW1pdD4KKworQW4gZWRpdG9yIHdpbGwgYmUgZmlyZWQgdXAgd2l0aCBhbGwgdGhlIGNvbW1pdHMgaW4geW91ciBjdXJyZW50IGJyYW5jaAorKGlnbm9yaW5nIG1lcmdlIGNvbW1pdHMpLCB3aGljaCBjb21lIGFmdGVyIHRoZSBnaXZlbiBjb21taXQuICBZb3UgY2FuCityZW9yZGVyIHRoZSBjb21taXRzIGluIHRoaXMgbGlzdCB0byB5b3VyIGhlYXJ0J3MgY29udGVudCwgYW5kIHlvdSBjYW4KK3JlbW92ZSB0aGVtLiAgVGhlIGxpc3QgbG9va3MgbW9yZSBvciBsZXNzIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGljayBkZWFkYmVlIFRoZSBvbmVsaW5lIG9mIHRoaXMgY29tbWl0CitwaWNrIGZhMWFmZTEgVGhlIG9uZWxpbmUgb2YgdGhlIG5leHQgY29tbWl0CisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG9uZWxpbmUgZGVzY3JpcHRpb25zIGFyZSBwdXJlbHkgZm9yIHlvdXIgcGxlYXN1cmU7ICdnaXQgcmViYXNlJyB3aWxsCitub3QgbG9vayBhdCB0aGVtIGJ1dCBhdCB0aGUgY29tbWl0IG5hbWVzICgiZGVhZGJlZSIgYW5kICJmYTFhZmUxIiBpbiB0aGlzCitleGFtcGxlKSwgc28gZG8gbm90IGRlbGV0ZSBvciBlZGl0IHRoZSBuYW1lcy4KKworQnkgcmVwbGFjaW5nIHRoZSBjb21tYW5kICJwaWNrIiB3aXRoIHRoZSBjb21tYW5kICJlZGl0IiwgeW91IGNhbiB0ZWxsCisnZ2l0IHJlYmFzZScgdG8gc3RvcCBhZnRlciBhcHBseWluZyB0aGF0IGNvbW1pdCwgc28gdGhhdCB5b3UgY2FuIGVkaXQKK3RoZSBmaWxlcyBhbmQvb3IgdGhlIGNvbW1pdCBtZXNzYWdlLCBhbWVuZCB0aGUgY29tbWl0LCBhbmQgY29udGludWUKK3JlYmFzaW5nLgorCitUbyBpbnRlcnJ1cHQgdGhlIHJlYmFzZSAoanVzdCBsaWtlIGFuICJlZGl0IiBjb21tYW5kIHdvdWxkIGRvLCBidXQgd2l0aG91dAorY2hlcnJ5LXBpY2tpbmcgYW55IGNvbW1pdCBmaXJzdCksIHVzZSB0aGUgImJyZWFrIiBjb21tYW5kLgorCitJZiB5b3UganVzdCB3YW50IHRvIGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciBhIGNvbW1pdCwgcmVwbGFjZSB0aGUKK2NvbW1hbmQgInBpY2siIHdpdGggdGhlIGNvbW1hbmQgInJld29yZCIuCisKK1RvIGRyb3AgYSBjb21taXQsIHJlcGxhY2UgdGhlIGNvbW1hbmQgInBpY2siIHdpdGggImRyb3AiLCBvciBqdXN0CitkZWxldGUgdGhlIG1hdGNoaW5nIGxpbmUuCisKK0lmIHlvdSB3YW50IHRvIGZvbGQgdHdvIG9yIG1vcmUgY29tbWl0cyBpbnRvIG9uZSwgcmVwbGFjZSB0aGUgY29tbWFuZAorInBpY2siIGZvciB0aGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IGNvbW1pdHMgd2l0aCAic3F1YXNoIiBvciAiZml4dXAiLgorSWYgdGhlIGNvbW1pdHMgaGFkIGRpZmZlcmVudCBhdXRob3JzLCB0aGUgZm9sZGVkIGNvbW1pdCB3aWxsIGJlCithdHRyaWJ1dGVkIHRvIHRoZSBhdXRob3Igb2YgdGhlIGZpcnN0IGNvbW1pdC4gIFRoZSBzdWdnZXN0ZWQgY29tbWl0CittZXNzYWdlIGZvciB0aGUgZm9sZGVkIGNvbW1pdCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgY29tbWl0CittZXNzYWdlcyBvZiB0aGUgZmlyc3QgY29tbWl0IGFuZCBvZiB0aG9zZSB3aXRoIHRoZSAic3F1YXNoIiBjb21tYW5kLAorYnV0IG9taXRzIHRoZSBjb21taXQgbWVzc2FnZXMgb2YgY29tbWl0cyB3aXRoIHRoZSAiZml4dXAiIGNvbW1hbmQuCisKKydnaXQgcmViYXNlJyB3aWxsIHN0b3Agd2hlbiAicGljayIgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCAiZWRpdCIgb3IKK3doZW4gYSBjb21tYW5kIGZhaWxzIGR1ZSB0byBtZXJnZSBlcnJvcnMuIFdoZW4geW91IGFyZSBkb25lIGVkaXRpbmcKK2FuZC9vciByZXNvbHZpbmcgY29uZmxpY3RzIHlvdSBjYW4gY29udGludWUgd2l0aCBgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlYC4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHJlb3JkZXIgdGhlIGxhc3QgNSBjb21taXRzLCBzdWNoIHRoYXQgd2hhdAord2FzIEhFQUR+NCBiZWNvbWVzIHRoZSBuZXcgSEVBRC4gVG8gYWNoaWV2ZSB0aGF0LCB5b3Ugd291bGQgY2FsbAorJ2dpdCByZWJhc2UnIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmViYXNlIC1pIEhFQUR+NQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbmQgbW92ZSB0aGUgZmlyc3QgcGF0Y2ggdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KKworWW91IG1pZ2h0IHdhbnQgdG8gcmVjcmVhdGUgbWVyZ2UgY29tbWl0cywgZS5nLiBpZiB5b3UgaGF2ZSBhIGhpc3RvcnkKK2xpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgIFgKKyAgICAgICAgICAgIFwKKyAgICAgICAgIEEtLS1NLS0tQgorICAgICAgICAvCistLS1vLS0tTy0tLVAtLS1RCistLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9zZSB5b3Ugd2FudCB0byByZWJhc2UgdGhlIHNpZGUgYnJhbmNoIHN0YXJ0aW5nIGF0ICJBIiB0byAiUSIuIE1ha2UKK3N1cmUgdGhhdCB0aGUgY3VycmVudCBIRUFEIGlzICJCIiwgYW5kIGNhbGwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlYmFzZSAtaSAtciAtLW9udG8gUSBPCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZW9yZGVyaW5nIGFuZCBlZGl0aW5nIGNvbW1pdHMgdXN1YWxseSBjcmVhdGVzIHVudGVzdGVkIGludGVybWVkaWF0ZQorc3RlcHMuICBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgdGhhdCB5b3VyIGhpc3RvcnkgZWRpdGluZyBkaWQgbm90IGJyZWFrCithbnl0aGluZyBieSBydW5uaW5nIGEgdGVzdCwgb3IgYXQgbGVhc3QgcmVjb21waWxpbmcgYXQgaW50ZXJtZWRpYXRlCitwb2ludHMgaW4gaGlzdG9yeSBieSB1c2luZyB0aGUgImV4ZWMiIGNvbW1hbmQgKHNob3J0Y3V0ICJ4IikuICBZb3UgbWF5CitkbyBzbyBieSBjcmVhdGluZyBhIHRvZG8gbGlzdCBsaWtlIHRoaXMgb25lOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwaWNrIGRlYWRiZWUgSW1wbGVtZW50IGZlYXR1cmUgWFhYCitmaXh1cCBmMWE1YzAwIEZpeCB0byBmZWF0dXJlIFhYWAorZXhlYyBtYWtlCitwaWNrIGMwZmZlZWUgVGhlIG9uZWxpbmUgb2YgdGhlIG5leHQgY29tbWl0CitlZGl0IGRlYWRiYWIgVGhlIG9uZWxpbmUgb2YgdGhlIGNvbW1pdCBhZnRlcgorZXhlYyBjZCBzdWJkaXI7IG1ha2UgdGVzdAorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBpbnRlcmFjdGl2ZSByZWJhc2Ugd2lsbCBzdG9wIHdoZW4gYSBjb21tYW5kIGZhaWxzIChpLmUuIGV4aXRzIHdpdGgKK25vbi0wIHN0YXR1cykgdG8gZ2l2ZSB5b3UgYW4gb3Bwb3J0dW5pdHkgdG8gZml4IHRoZSBwcm9ibGVtLiBZb3UgY2FuCitjb250aW51ZSB3aXRoIGBnaXQgcmViYXNlIC0tY29udGludWVgLgorCitUaGUgImV4ZWMiIGNvbW1hbmQgbGF1bmNoZXMgdGhlIGNvbW1hbmQgaW4gYSBzaGVsbCAodGhlIG9uZSBzcGVjaWZpZWQKK2luIGAkU0hFTExgLCBvciB0aGUgZGVmYXVsdCBzaGVsbCBpZiBgJFNIRUxMYCBpcyBub3Qgc2V0KSwgc28geW91IGNhbgordXNlIHNoZWxsIGZlYXR1cmVzIChsaWtlICJjZCIsICI+IiwgIjsiIC4uLikuIFRoZSBjb21tYW5kIGlzIHJ1biBmcm9tCit0aGUgcm9vdCBvZiB0aGUgd29ya2luZyB0cmVlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZWJhc2UgLWkgLS1leGVjICJtYWtlIHRlc3QiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgY29tbWFuZCBsZXRzIHlvdSBjaGVjayB0aGF0IGludGVybWVkaWF0ZSBjb21taXRzIGFyZSBjb21waWxhYmxlLgorVGhlIHRvZG8gbGlzdCBiZWNvbWVzIGxpa2UgdGhhdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BpY2sgNTkyOGFlYSBvbmUKK2V4ZWMgbWFrZSB0ZXN0CitwaWNrIDA0ZDBmZGEgdHdvCitleGVjIG1ha2UgdGVzdAorcGljayBiYTQ2MTY5IHRocmVlCitleGVjIG1ha2UgdGVzdAorcGljayBmNDU5M2Y5IGZvdXIKK2V4ZWMgbWFrZSB0ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTUExJVFRJTkcgQ09NTUlUUworLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gaW50ZXJhY3RpdmUgbW9kZSwgeW91IGNhbiBtYXJrIGNvbW1pdHMgd2l0aCB0aGUgYWN0aW9uICJlZGl0Ii4gIEhvd2V2ZXIsCit0aGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCAnZ2l0IHJlYmFzZScgZXhwZWN0cyB0aGUgcmVzdWx0IG9mIHRoaXMKK2VkaXQgdG8gYmUgZXhhY3RseSBvbmUgY29tbWl0LiAgSW5kZWVkLCB5b3UgY2FuIHVuZG8gdGhlIGNvbW1pdCwgb3IgeW91IGNhbgorYWRkIG90aGVyIGNvbW1pdHMuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHNwbGl0IGEgY29tbWl0IGludG8gdHdvOgorCistIFN0YXJ0IGFuIGludGVyYWN0aXZlIHJlYmFzZSB3aXRoIGBnaXQgcmViYXNlIC1pIDxjb21taXQ+XmAsIHdoZXJlCisgIDxjb21taXQ+IGlzIHRoZSBjb21taXQgeW91IHdhbnQgdG8gc3BsaXQuICBJbiBmYWN0LCBhbnkgY29tbWl0IHJhbmdlCisgIHdpbGwgZG8sIGFzIGxvbmcgYXMgaXQgY29udGFpbnMgdGhhdCBjb21taXQuCisKKy0gTWFyayB0aGUgY29tbWl0IHlvdSB3YW50IHRvIHNwbGl0IHdpdGggdGhlIGFjdGlvbiAiZWRpdCIuCisKKy0gV2hlbiBpdCBjb21lcyB0byBlZGl0aW5nIHRoYXQgY29tbWl0LCBleGVjdXRlIGBnaXQgcmVzZXQgSEVBRF5gLiAgVGhlCisgIGVmZmVjdCBpcyB0aGF0IHRoZSBIRUFEIGlzIHJld291bmQgYnkgb25lLCBhbmQgdGhlIGluZGV4IGZvbGxvd3Mgc3VpdC4KKyAgSG93ZXZlciwgdGhlIHdvcmtpbmcgdHJlZSBzdGF5cyB0aGUgc2FtZS4KKworLSBOb3cgYWRkIHRoZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCB0aGF0IHlvdSB3YW50IHRvIGhhdmUgaW4gdGhlIGZpcnN0CisgIGNvbW1pdC4gIFlvdSBjYW4gdXNlIGBnaXQgYWRkYCAocG9zc2libHkgaW50ZXJhY3RpdmVseSkgb3IKKyAgJ2dpdCBndWknIChvciBib3RoKSB0byBkbyB0aGF0LgorCistIENvbW1pdCB0aGUgbm93LWN1cnJlbnQgaW5kZXggd2l0aCB3aGF0ZXZlciBjb21taXQgbWVzc2FnZSBpcyBhcHByb3ByaWF0ZQorICBub3cuCisKKy0gUmVwZWF0IHRoZSBsYXN0IHR3byBzdGVwcyB1bnRpbCB5b3VyIHdvcmtpbmcgdHJlZSBpcyBjbGVhbi4KKworLSBDb250aW51ZSB0aGUgcmViYXNlIHdpdGggYGdpdCByZWJhc2UgLS1jb250aW51ZWAuCisKK0lmIHlvdSBhcmUgbm90IGFic29sdXRlbHkgc3VyZSB0aGF0IHRoZSBpbnRlcm1lZGlhdGUgcmV2aXNpb25zIGFyZQorY29uc2lzdGVudCAodGhleSBjb21waWxlLCBwYXNzIHRoZSB0ZXN0c3VpdGUsIGV0Yy4pIHlvdSBzaG91bGQgdXNlCisnZ2l0IHN0YXNoJyB0byBzdGFzaCBhd2F5IHRoZSBub3QteWV0LWNvbW1pdHRlZCBjaGFuZ2VzCithZnRlciBlYWNoIGNvbW1pdCwgdGVzdCwgYW5kIGFtZW5kIHRoZSBjb21taXQgaWYgZml4ZXMgYXJlIG5lY2Vzc2FyeS4KKworCitSRUNPVkVSSU5HIEZST00gVVBTVFJFQU0gUkVCQVNFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlYmFzaW5nIChvciBhbnkgb3RoZXIgZm9ybSBvZiByZXdyaXRpbmcpIGEgYnJhbmNoIHRoYXQgb3RoZXJzIGhhdmUKK2Jhc2VkIHdvcmsgb24gaXMgYSBiYWQgaWRlYTogYW55b25lIGRvd25zdHJlYW0gb2YgaXQgaXMgZm9yY2VkIHRvCittYW51YWxseSBmaXggdGhlaXIgaGlzdG9yeS4gIFRoaXMgc2VjdGlvbiBleHBsYWlucyBob3cgdG8gZG8gdGhlIGZpeAorZnJvbSB0aGUgZG93bnN0cmVhbSdzIHBvaW50IG9mIHZpZXcuICBUaGUgcmVhbCBmaXgsIGhvd2V2ZXIsIHdvdWxkIGJlCit0byBhdm9pZCByZWJhc2luZyB0aGUgdXBzdHJlYW0gaW4gdGhlIGZpcnN0IHBsYWNlLgorCitUbyBpbGx1c3RyYXRlLCBzdXBwb3NlIHlvdSBhcmUgaW4gYSBzaXR1YXRpb24gd2hlcmUgc29tZW9uZSBkZXZlbG9wcyBhCisnc3Vic3lzdGVtJyBicmFuY2gsIGFuZCB5b3UgYXJlIHdvcmtpbmcgb24gYSAndG9waWMnIHRoYXQgaXMgZGVwZW5kZW50CitvbiB0aGlzICdzdWJzeXN0ZW0nLiAgWW91IG1pZ2h0IGVuZCB1cCB3aXRoIGEgaGlzdG9yeSBsaWtlIHRoZQorZm9sbG93aW5nOgorCistLS0tLS0tLS0tLS0KKyAgICBvLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tbyAgbWFzdGVyCisJIFwKKwkgIG8tLS1vLS0tby0tLW8tLS1vICBzdWJzeXN0ZW0KKwkJCSAgIFwKKwkJCSAgICAqLS0tKi0tLSogIHRvcGljCistLS0tLS0tLS0tLS0KKworSWYgJ3N1YnN5c3RlbScgaXMgcmViYXNlZCBhZ2FpbnN0ICdtYXN0ZXInLCB0aGUgZm9sbG93aW5nIGhhcHBlbnM6CisKKy0tLS0tLS0tLS0tLQorICAgIG8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vICBtYXN0ZXIKKwkgXAkJCSBcCisJICBvLS0tby0tLW8tLS1vLS0tbwkgIG8nLS1vJy0tbyctLW8nLS1vJyAgc3Vic3lzdGVtCisJCQkgICBcCisJCQkgICAgKi0tLSotLS0qICB0b3BpYworLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBub3cgY29udGludWUgZGV2ZWxvcG1lbnQgYXMgdXN1YWwsIGFuZCBldmVudHVhbGx5IG1lcmdlICd0b3BpYycKK3RvICdzdWJzeXN0ZW0nLCB0aGUgY29tbWl0cyBmcm9tICdzdWJzeXN0ZW0nIHdpbGwgcmVtYWluIGR1cGxpY2F0ZWQgZm9yZXZlcjoKKworLS0tLS0tLS0tLS0tCisgICAgby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8gIG1hc3RlcgorCSBcCQkJIFwKKwkgIG8tLS1vLS0tby0tLW8tLS1vCSAgbyctLW8nLS1vJy0tbyctLW8nLS1NCSBzdWJzeXN0ZW0KKwkJCSAgIFwJCQkgICAgIC8KKwkJCSAgICAqLS0tKi0tLSotLi4uLi4uLi4uLi0qLS0qICB0b3BpYworLS0tLS0tLS0tLS0tCisKK1N1Y2ggZHVwbGljYXRlcyBhcmUgZ2VuZXJhbGx5IGZyb3duZWQgdXBvbiBiZWNhdXNlIHRoZXkgY2x1dHRlciB1cAoraGlzdG9yeSwgbWFraW5nIGl0IGhhcmRlciB0byBmb2xsb3cuICBUbyBjbGVhbiB0aGluZ3MgdXAsIHlvdSBuZWVkIHRvCit0cmFuc3BsYW50IHRoZSBjb21taXRzIG9uICd0b3BpYycgdG8gdGhlIG5ldyAnc3Vic3lzdGVtJyB0aXAsIGkuZS4sCityZWJhc2UgJ3RvcGljJy4gIFRoaXMgYmVjb21lcyBhIHJpcHBsZSBlZmZlY3Q6IGFueW9uZSBkb3duc3RyZWFtIGZyb20KKyd0b3BpYycgaXMgZm9yY2VkIHRvIHJlYmFzZSB0b28sIGFuZCBzbyBvbiEKKworVGhlcmUgYXJlIHR3byBraW5kcyBvZiBmaXhlcywgZGlzY3Vzc2VkIGluIHRoZSBmb2xsb3dpbmcgc3Vic2VjdGlvbnM6CisKK0Vhc3kgY2FzZTogVGhlIGNoYW5nZXMgYXJlIGxpdGVyYWxseSB0aGUgc2FtZS46OgorCisJVGhpcyBoYXBwZW5zIGlmIHRoZSAnc3Vic3lzdGVtJyByZWJhc2Ugd2FzIGEgc2ltcGxlIHJlYmFzZSBhbmQKKwloYWQgbm8gY29uZmxpY3RzLgorCitIYXJkIGNhc2U6IFRoZSBjaGFuZ2VzIGFyZSBub3QgdGhlIHNhbWUuOjoKKworCVRoaXMgaGFwcGVucyBpZiB0aGUgJ3N1YnN5c3RlbScgcmViYXNlIGhhZCBjb25mbGljdHMsIG9yIHVzZWQKKwlgLS1pbnRlcmFjdGl2ZWAgdG8gb21pdCwgZWRpdCwgc3F1YXNoLCBvciBmaXh1cCBjb21taXRzOyBvcgorCWlmIHRoZSB1cHN0cmVhbSB1c2VkIG9uZSBvZiBgY29tbWl0IC0tYW1lbmRgLCBgcmVzZXRgLCBvcgorCWEgZnVsbCBoaXN0b3J5IHJld3JpdGluZyBjb21tYW5kIGxpa2UKKwlodHRwczovL2dpdGh1Yi5jb20vbmV3cmVuL2dpdC1maWx0ZXItcmVwb1tgZmlsdGVyLXJlcG9gXS4KKworCitUaGUgZWFzeSBjYXNlCit+fn5+fn5+fn5+fn5+CisKK09ubHkgd29ya3MgaWYgdGhlIGNoYW5nZXMgKHBhdGNoIElEcyBiYXNlZCBvbiB0aGUgZGlmZiBjb250ZW50cykgb24KKydzdWJzeXN0ZW0nIGFyZSBsaXRlcmFsbHkgdGhlIHNhbWUgYmVmb3JlIGFuZCBhZnRlciB0aGUgcmViYXNlCisnc3Vic3lzdGVtJyBkaWQuCisKK0luIHRoYXQgY2FzZSwgdGhlIGZpeCBpcyBlYXN5IGJlY2F1c2UgJ2dpdCByZWJhc2UnIGtub3dzIHRvIHNraXAKK2NoYW5nZXMgdGhhdCBhcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBuZXcgdXBzdHJlYW0gKHVubGVzcworYC0tcmVhcHBseS1jaGVycnktcGlja3NgIGlzIGdpdmVuKS4gU28gaWYgeW91IHNheQorKGFzc3VtaW5nIHlvdSdyZSBvbiAndG9waWMnKQorLS0tLS0tLS0tLS0tCisgICAgJCBnaXQgcmViYXNlIHN1YnN5c3RlbQorLS0tLS0tLS0tLS0tCit5b3Ugd2lsbCBlbmQgdXAgd2l0aCB0aGUgZml4ZWQgaGlzdG9yeQorLS0tLS0tLS0tLS0tCisgICAgby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8gIG1hc3RlcgorCQkJCSBcCisJCQkJICBvJy0tbyctLW8nLS1vJy0tbycgIHN1YnN5c3RlbQorCQkJCQkJICAgXAorCQkJCQkJICAgICotLS0qLS0tKiAgdG9waWMKKy0tLS0tLS0tLS0tLQorCisKK1RoZSBoYXJkIGNhc2UKK35+fn5+fn5+fn5+fn4KKworVGhpbmdzIGdldCBtb3JlIGNvbXBsaWNhdGVkIGlmIHRoZSAnc3Vic3lzdGVtJyBjaGFuZ2VzIGRvIG5vdCBleGFjdGx5Citjb3JyZXNwb25kIHRvIHRoZSBvbmVzIGJlZm9yZSB0aGUgcmViYXNlLgorCitOT1RFOiBXaGlsZSBhbiAiZWFzeSBjYXNlIHJlY292ZXJ5IiBzb21ldGltZXMgYXBwZWFycyB0byBiZSBzdWNjZXNzZnVsCisgICAgICBldmVuIGluIHRoZSBoYXJkIGNhc2UsIGl0IG1heSBoYXZlIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiAgRm9yCisgICAgICBleGFtcGxlLCBhIGNvbW1pdCB0aGF0IHdhcyByZW1vdmVkIHZpYSBgZ2l0IHJlYmFzZQorICAgICAgLS1pbnRlcmFjdGl2ZWAgd2lsbCBiZSAqKnJlc3VycmVjdGVkKiohCisKK1RoZSBpZGVhIGlzIHRvIG1hbnVhbGx5IHRlbGwgJ2dpdCByZWJhc2UnICJ3aGVyZSB0aGUgb2xkICdzdWJzeXN0ZW0nCitlbmRlZCBhbmQgeW91ciAndG9waWMnIGJlZ2FuIiwgdGhhdCBpcywgd2hhdCB0aGUgb2xkIG1lcmdlIGJhc2UKK2JldHdlZW4gdGhlbSB3YXMuICBZb3Ugd2lsbCBoYXZlIHRvIGZpbmQgYSB3YXkgdG8gbmFtZSB0aGUgbGFzdCBjb21taXQKK29mIHRoZSBvbGQgJ3N1YnN5c3RlbScsIGZvciBleGFtcGxlOgorCisqIFdpdGggdGhlICdzdWJzeXN0ZW0nIHJlZmxvZzogYWZ0ZXIgJ2dpdCBmZXRjaCcsIHRoZSBvbGQgdGlwIG9mCisgICdzdWJzeXN0ZW0nIGlzIGF0IGBzdWJzeXN0ZW1AezF9YC4gIFN1YnNlcXVlbnQgZmV0Y2hlcyB3aWxsCisgIGluY3JlYXNlIHRoZSBudW1iZXIuICAoU2VlIGxpbmtnaXQ6Z2l0LXJlZmxvZ1sxXS4pCisKKyogUmVsYXRpdmUgdG8gdGhlIHRpcCBvZiAndG9waWMnOiBrbm93aW5nIHRoYXQgeW91ciAndG9waWMnIGhhcyB0aHJlZQorICBjb21taXRzLCB0aGUgb2xkIHRpcCBvZiAnc3Vic3lzdGVtJyBtdXN0IGJlIGB0b3BpY34zYC4KKworWW91IGNhbiB0aGVuIHRyYW5zcGxhbnQgdGhlIG9sZCBgc3Vic3lzdGVtLi50b3BpY2AgdG8gdGhlIG5ldyB0aXAgYnkKK3NheWluZyAoZm9yIHRoZSByZWZsb2cgY2FzZSwgYW5kIGFzc3VtaW5nIHlvdSBhcmUgb24gJ3RvcGljJyBhbHJlYWR5KToKKy0tLS0tLS0tLS0tLQorICAgICQgZ2l0IHJlYmFzZSAtLW9udG8gc3Vic3lzdGVtIHN1YnN5c3RlbUB7MX0KKy0tLS0tLS0tLS0tLQorCitUaGUgcmlwcGxlIGVmZmVjdCBvZiBhICJoYXJkIGNhc2UiIHJlY292ZXJ5IGlzIGVzcGVjaWFsbHkgYmFkOgorJ2V2ZXJ5b25lJyBkb3duc3RyZWFtIGZyb20gJ3RvcGljJyB3aWxsIG5vdyBoYXZlIHRvIHBlcmZvcm0gYSAiaGFyZAorY2FzZSIgcmVjb3ZlcnkgdG9vIQorCitSRUJBU0lORyBNRVJHRVMKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW50ZXJhY3RpdmUgcmViYXNlIGNvbW1hbmQgd2FzIG9yaWdpbmFsbHkgZGVzaWduZWQgdG8gaGFuZGxlCitpbmRpdmlkdWFsIHBhdGNoIHNlcmllcy4gQXMgc3VjaCwgaXQgbWFrZXMgc2Vuc2UgdG8gZXhjbHVkZSBtZXJnZQorY29tbWl0cyBmcm9tIHRoZSB0b2RvIGxpc3QsIGFzIHRoZSBkZXZlbG9wZXIgbWF5IGhhdmUgbWVyZ2VkIHRoZQordGhlbi1jdXJyZW50IGBtYXN0ZXJgIHdoaWxlIHdvcmtpbmcgb24gdGhlIGJyYW5jaCwgb25seSB0byByZWJhc2UKK2FsbCB0aGUgY29tbWl0cyBvbnRvIGBtYXN0ZXJgIGV2ZW50dWFsbHkgKHNraXBwaW5nIHRoZSBtZXJnZQorY29tbWl0cykuCisKK0hvd2V2ZXIsIHRoZXJlIGFyZSBsZWdpdGltYXRlIHJlYXNvbnMgd2h5IGEgZGV2ZWxvcGVyIG1heSB3YW50IHRvCityZWNyZWF0ZSBtZXJnZSBjb21taXRzOiB0byBrZWVwIHRoZSBicmFuY2ggc3RydWN0dXJlIChvciAiY29tbWl0Cit0b3BvbG9neSIpIHdoZW4gd29ya2luZyBvbiBtdWx0aXBsZSwgaW50ZXItcmVsYXRlZCBicmFuY2hlcy4KKworSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCB0aGUgZGV2ZWxvcGVyIHdvcmtzIG9uIGEgdG9waWMgYnJhbmNoIHRoYXQKK3JlZmFjdG9ycyB0aGUgd2F5IGJ1dHRvbnMgYXJlIGRlZmluZWQsIGFuZCBvbiBhbm90aGVyIHRvcGljIGJyYW5jaAordGhhdCB1c2VzIHRoYXQgcmVmYWN0b3JpbmcgdG8gaW1wbGVtZW50IGEgIlJlcG9ydCBhIGJ1ZyIgYnV0dG9uLiBUaGUKK291dHB1dCBvZiBgZ2l0IGxvZyAtLWdyYXBoIC0tZm9ybWF0PSVzIC01YCBtYXkgbG9vayBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorKiAgIE1lcmdlIGJyYW5jaCAncmVwb3J0LWEtYnVnJworfFwKK3wgKiBBZGQgdGhlIGZlZWRiYWNrIGJ1dHRvbgorKiB8IE1lcmdlIGJyYW5jaCAncmVmYWN0b3ItYnV0dG9uJworfFwgXAorfCB8LworfCAqIFVzZSB0aGUgQnV0dG9uIGNsYXNzIGZvciBhbGwgYnV0dG9ucworfCAqIEV4dHJhY3QgYSBnZW5lcmljIEJ1dHRvbiBjbGFzcyBmcm9tIHRoZSBEb3dubG9hZEJ1dHRvbiBvbmUKKy0tLS0tLS0tLS0tLQorCitUaGUgZGV2ZWxvcGVyIG1pZ2h0IHdhbnQgdG8gcmViYXNlIHRob3NlIGNvbW1pdHMgdG8gYSBuZXdlciBgbWFzdGVyYAord2hpbGUga2VlcGluZyB0aGUgYnJhbmNoIHRvcG9sb2d5LCBmb3IgZXhhbXBsZSB3aGVuIHRoZSBmaXJzdCB0b3BpYworYnJhbmNoIGlzIGV4cGVjdGVkIHRvIGJlIGludGVncmF0ZWQgaW50byBgbWFzdGVyYCBtdWNoIGVhcmxpZXIgdGhhbiB0aGUKK3NlY29uZCBvbmUsIHNheSwgdG8gcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMgd2l0aCBjaGFuZ2VzIHRvIHRoZQorRG93bmxvYWRCdXR0b24gY2xhc3MgdGhhdCBtYWRlIGl0IGludG8gYG1hc3RlcmAuCisKK1RoaXMgcmViYXNlIGNhbiBiZSBwZXJmb3JtZWQgdXNpbmcgdGhlIGAtLXJlYmFzZS1tZXJnZXNgIG9wdGlvbi4KK0l0IHdpbGwgZ2VuZXJhdGUgYSB0b2RvIGxpc3QgbG9va2luZyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorbGFiZWwgb250bworCisjIEJyYW5jaDogcmVmYWN0b3ItYnV0dG9uCityZXNldCBvbnRvCitwaWNrIDEyMzQ1NiBFeHRyYWN0IGEgZ2VuZXJpYyBCdXR0b24gY2xhc3MgZnJvbSB0aGUgRG93bmxvYWRCdXR0b24gb25lCitwaWNrIDY1NDMyMSBVc2UgdGhlIEJ1dHRvbiBjbGFzcyBmb3IgYWxsIGJ1dHRvbnMKK2xhYmVsIHJlZmFjdG9yLWJ1dHRvbgorCisjIEJyYW5jaDogcmVwb3J0LWEtYnVnCityZXNldCByZWZhY3Rvci1idXR0b24gIyBVc2UgdGhlIEJ1dHRvbiBjbGFzcyBmb3IgYWxsIGJ1dHRvbnMKK3BpY2sgYWJjZGVmIEFkZCB0aGUgZmVlZGJhY2sgYnV0dG9uCitsYWJlbCByZXBvcnQtYS1idWcKKworcmVzZXQgb250bworbWVyZ2UgLUMgYTFiMmMzIHJlZmFjdG9yLWJ1dHRvbiAjIE1lcmdlICdyZWZhY3Rvci1idXR0b24nCittZXJnZSAtQyA2ZjVlNGQgcmVwb3J0LWEtYnVnICMgTWVyZ2UgJ3JlcG9ydC1hLWJ1ZycKKy0tLS0tLS0tLS0tLQorCitJbiBjb250cmFzdCB0byBhIHJlZ3VsYXIgaW50ZXJhY3RpdmUgcmViYXNlLCB0aGVyZSBhcmUgYGxhYmVsYCwgYHJlc2V0YAorYW5kIGBtZXJnZWAgY29tbWFuZHMgaW4gYWRkaXRpb24gdG8gYHBpY2tgIG9uZXMuCisKK1RoZSBgbGFiZWxgIGNvbW1hbmQgYXNzb2NpYXRlcyBhIGxhYmVsIHdpdGggdGhlIGN1cnJlbnQgSEVBRCB3aGVuIHRoYXQKK2NvbW1hbmQgaXMgZXhlY3V0ZWQuIFRoZXNlIGxhYmVscyBhcmUgY3JlYXRlZCBhcyB3b3JrdHJlZS1sb2NhbCByZWZzCisoYHJlZnMvcmV3cml0dGVuLzxsYWJlbD5gKSB0aGF0IHdpbGwgYmUgZGVsZXRlZCB3aGVuIHRoZSByZWJhc2UKK2ZpbmlzaGVzLiBUaGF0IHdheSwgcmViYXNlIG9wZXJhdGlvbnMgaW4gbXVsdGlwbGUgd29ya3RyZWVzIGxpbmtlZCB0bwordGhlIHNhbWUgcmVwb3NpdG9yeSBkbyBub3QgaW50ZXJmZXJlIHdpdGggb25lIGFub3RoZXIuIElmIHRoZSBgbGFiZWxgCitjb21tYW5kIGZhaWxzLCBpdCBpcyByZXNjaGVkdWxlZCBpbW1lZGlhdGVseSwgd2l0aCBhIGhlbHBmdWwgbWVzc2FnZSBob3cKK3RvIHByb2NlZWQuCisKK1RoZSBgcmVzZXRgIGNvbW1hbmQgcmVzZXRzIHRoZSBIRUFELCBpbmRleCBhbmQgd29ya3RyZWUgdG8gdGhlIHNwZWNpZmllZAorcmV2aXNpb24uIEl0IGlzIHNpbWlsYXIgdG8gYW4gYGV4ZWMgZ2l0IHJlc2V0IC0taGFyZCA8bGFiZWw+YCwgYnV0CityZWZ1c2VzIHRvIG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZXMuIElmIHRoZSBgcmVzZXRgIGNvbW1hbmQgZmFpbHMsIGl0IGlzCityZXNjaGVkdWxlZCBpbW1lZGlhdGVseSwgd2l0aCBhIGhlbHBmdWwgbWVzc2FnZSBob3cgdG8gZWRpdCB0aGUgdG9kbyBsaXN0CisodGhpcyB0eXBpY2FsbHkgaGFwcGVucyB3aGVuIGEgYHJlc2V0YCBjb21tYW5kIHdhcyBpbnNlcnRlZCBpbnRvIHRoZSB0b2RvCitsaXN0IG1hbnVhbGx5IGFuZCBjb250YWlucyBhIHR5cG8pLgorCitUaGUgYG1lcmdlYCBjb21tYW5kIHdpbGwgbWVyZ2UgdGhlIHNwZWNpZmllZCByZXZpc2lvbihzKSBpbnRvIHdoYXRldmVyCitpcyBIRUFEIGF0IHRoYXQgdGltZS4gV2l0aCBgLUMgPG9yaWdpbmFsLWNvbW1pdD5gLCB0aGUgY29tbWl0IG1lc3NhZ2Ugb2YKK3RoZSBzcGVjaWZpZWQgbWVyZ2UgY29tbWl0IHdpbGwgYmUgdXNlZC4gV2hlbiB0aGUgYC1DYCBpcyBjaGFuZ2VkIHRvCithIGxvd2VyLWNhc2UgYC1jYCwgdGhlIG1lc3NhZ2Ugd2lsbCBiZSBvcGVuZWQgaW4gYW4gZWRpdG9yIGFmdGVyIGEKK3N1Y2Nlc3NmdWwgbWVyZ2Ugc28gdGhhdCB0aGUgdXNlciBjYW4gZWRpdCB0aGUgbWVzc2FnZS4KKworSWYgYSBgbWVyZ2VgIGNvbW1hbmQgZmFpbHMgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBtZXJnZSBjb25mbGljdHMgKGkuZS4KK3doZW4gdGhlIG1lcmdlIG9wZXJhdGlvbiBkaWQgbm90IGV2ZW4gc3RhcnQpLCBpdCBpcyByZXNjaGVkdWxlZCBpbW1lZGlhdGVseS4KKworQXQgdGhpcyB0aW1lLCB0aGUgYG1lcmdlYCBjb21tYW5kIHdpbGwgKmFsd2F5cyogdXNlIHRoZSBgcmVjdXJzaXZlYAorbWVyZ2Ugc3RyYXRlZ3kgZm9yIHJlZ3VsYXIgbWVyZ2VzLCBhbmQgYG9jdG9wdXNgIGZvciBvY3RvcHVzIG1lcmdlcywKK3dpdGggbm8gd2F5IHRvIGNob29zZSBhIGRpZmZlcmVudCBvbmUuIFRvIHdvcmsgYXJvdW5kCit0aGlzLCBhbiBgZXhlY2AgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBjYWxsIGBnaXQgbWVyZ2VgIGV4cGxpY2l0bHksCit1c2luZyB0aGUgZmFjdCB0aGF0IHRoZSBsYWJlbHMgYXJlIHdvcmt0cmVlLWxvY2FsIHJlZnMgKHRoZSByZWYKK2ByZWZzL3Jld3JpdHRlbi9vbnRvYCB3b3VsZCBjb3JyZXNwb25kIHRvIHRoZSBsYWJlbCBgb250b2AsIGZvciBleGFtcGxlKS4KKworTm90ZTogdGhlIGZpcnN0IGNvbW1hbmQgKGBsYWJlbCBvbnRvYCkgbGFiZWxzIHRoZSByZXZpc2lvbiBvbnRvIHdoaWNoCit0aGUgY29tbWl0cyBhcmUgcmViYXNlZDsgVGhlIG5hbWUgYG9udG9gIGlzIGp1c3QgYSBjb252ZW50aW9uLCBhcyBhIG5vZAordG8gdGhlIGAtLW9udG9gIG9wdGlvbi4KKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBpbnRyb2R1Y2UgY29tcGxldGVseSBuZXcgbWVyZ2UgY29tbWl0cyBmcm9tIHNjcmF0Y2gKK2J5IGFkZGluZyBhIGNvbW1hbmQgb2YgdGhlIGZvcm0gYG1lcmdlIDxtZXJnZS1oZWFkPmAuIFRoaXMgZm9ybSB3aWxsCitnZW5lcmF0ZSBhIHRlbnRhdGl2ZSBjb21taXQgbWVzc2FnZSBhbmQgYWx3YXlzIG9wZW4gYW4gZWRpdG9yIHRvIGxldCB0aGUKK3VzZXIgZWRpdCBpdC4gVGhpcyBjYW4gYmUgdXNlZnVsIGUuZy4gd2hlbiBhIHRvcGljIGJyYW5jaCB0dXJucyBvdXQgdG8KK2FkZHJlc3MgbW9yZSB0aGFuIGEgc2luZ2xlIGNvbmNlcm4gYW5kIHdhbnRzIHRvIGJlIHNwbGl0IGludG8gdHdvIG9yCitldmVuIG1vcmUgdG9waWMgYnJhbmNoZXMuIENvbnNpZGVyIHRoaXMgdG9kbyBsaXN0OgorCistLS0tLS0tLS0tLS0KK3BpY2sgMTkyODM3IFN3aXRjaCBmcm9tIEdOVSBNYWtlZmlsZXMgdG8gQ01ha2UKK3BpY2sgNWE2YzdlIERvY3VtZW50IHRoZSBzd2l0Y2ggdG8gQ01ha2UKK3BpY2sgOTE4MjczIEZpeCBkZXRlY3Rpb24gb2YgT3BlblNTTCBpbiBDTWFrZQorcGljayBhZmJlY2QgaHR0cDogYWRkIHN1cHBvcnQgZm9yIFRMUyB2MS4zCitwaWNrIGZkYmFlYyBGaXggZGV0ZWN0aW9uIG9mIGNVUkwgaW4gQ01ha2Ugb24gV2luZG93cworLS0tLS0tLS0tLS0tCisKK1RoZSBvbmUgY29tbWl0IGluIHRoaXMgbGlzdCB0aGF0IGlzIG5vdCByZWxhdGVkIHRvIENNYWtlIG1heSB2ZXJ5IHdlbGwKK2hhdmUgYmVlbiBtb3RpdmF0ZWQgYnkgd29ya2luZyBvbiBmaXhpbmcgYWxsIHRob3NlIGJ1Z3MgaW50cm9kdWNlZCBieQorc3dpdGNoaW5nIHRvIENNYWtlLCBidXQgaXQgYWRkcmVzc2VzIGEgZGlmZmVyZW50IGNvbmNlcm4uIFRvIHNwbGl0IHRoaXMKK2JyYW5jaCBpbnRvIHR3byB0b3BpYyBicmFuY2hlcywgdGhlIHRvZG8gbGlzdCBjb3VsZCBiZSBlZGl0ZWQgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KK2xhYmVsIG9udG8KKworcGljayBhZmJlY2QgaHR0cDogYWRkIHN1cHBvcnQgZm9yIFRMUyB2MS4zCitsYWJlbCB0bHN2MS4zCisKK3Jlc2V0IG9udG8KK3BpY2sgMTkyODM3IFN3aXRjaCBmcm9tIEdOVSBNYWtlZmlsZXMgdG8gQ01ha2UKK3BpY2sgOTE4MjczIEZpeCBkZXRlY3Rpb24gb2YgT3BlblNTTCBpbiBDTWFrZQorcGljayBmZGJhZWMgRml4IGRldGVjdGlvbiBvZiBjVVJMIGluIENNYWtlIG9uIFdpbmRvd3MKK3BpY2sgNWE2YzdlIERvY3VtZW50IHRoZSBzd2l0Y2ggdG8gQ01ha2UKK2xhYmVsIGNtYWtlCisKK3Jlc2V0IG9udG8KK21lcmdlIHRsc3YxLjMKK21lcmdlIGNtYWtlCistLS0tLS0tLS0tLS0KKworQlVHUworLS0tLQorVGhlIHRvZG8gbGlzdCBwcmVzZW50ZWQgYnkgdGhlIGRlcHJlY2F0ZWQgYC0tcHJlc2VydmUtbWVyZ2VzIC0taW50ZXJhY3RpdmVgCitkb2VzIG5vdCByZXByZXNlbnQgdGhlIHRvcG9sb2d5IG9mIHRoZSByZXZpc2lvbiBncmFwaCAodXNlIGAtLXJlYmFzZS1tZXJnZXNgCitpbnN0ZWFkKS4gIEVkaXRpbmcgY29tbWl0cyBhbmQgcmV3b3JkaW5nIHRoZWlyIGNvbW1pdCBtZXNzYWdlcyBzaG91bGQgd29yaworZmluZSwgYnV0IGF0dGVtcHRzIHRvIHJlb3JkZXIgY29tbWl0cyB0ZW5kIHRvIHByb2R1Y2UgY291bnRlcmludHVpdGl2ZSByZXN1bHRzLgorVXNlIGAtLXJlYmFzZS1tZXJnZXNgIGluIHN1Y2ggc2NlbmFyaW9zIGluc3RlYWQuCisKK0ZvciBleGFtcGxlLCBhbiBhdHRlbXB0IHRvIHJlYXJyYW5nZQorLS0tLS0tLS0tLS0tCisxIC0tLSAyIC0tLSAzIC0tLSA0IC0tLSA1CistLS0tLS0tLS0tLS0KK3RvCistLS0tLS0tLS0tLS0KKzEgLS0tIDIgLS0tIDQgLS0tIDMgLS0tIDUKKy0tLS0tLS0tLS0tLQorYnkgbW92aW5nIHRoZSAicGljayA0IiBsaW5lIHdpbGwgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgaGlzdG9yeToKKy0tLS0tLS0tLS0tLQorCTMKKyAgICAgICAvCisxIC0tLSAyIC0tLSA0IC0tLSA1CistLS0tLS0tLS0tLS0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWNlaXZlLXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVjZWl2ZS1wYWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTcwMmVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVjZWl2ZS1wYWNrLnR4dApAQCAtMCwwICsxLDI1NiBAQAorZ2l0LXJlY2VpdmUtcGFjaygxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVjZWl2ZS1wYWNrIC0gUmVjZWl2ZSB3aGF0IGlzIHB1c2hlZCBpbnRvIHRoZSByZXBvc2l0b3J5CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0LXJlY2VpdmUtcGFjaycgPGRpcmVjdG9yeT4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitJbnZva2VkIGJ5ICdnaXQgc2VuZC1wYWNrJyBhbmQgdXBkYXRlcyB0aGUgcmVwb3NpdG9yeSB3aXRoIHRoZQoraW5mb3JtYXRpb24gZmVkIGZyb20gdGhlIHJlbW90ZSBlbmQuCisKK1RoaXMgY29tbWFuZCBpcyB1c3VhbGx5IG5vdCBpbnZva2VkIGRpcmVjdGx5IGJ5IHRoZSBlbmQgdXNlci4KK1RoZSBVSSBmb3IgdGhlIHByb3RvY29sIGlzIG9uIHRoZSAnZ2l0IHNlbmQtcGFjaycgc2lkZSwgYW5kIHRoZQorcHJvZ3JhbSBwYWlyIGlzIG1lYW50IHRvIGJlIHVzZWQgdG8gcHVzaCB1cGRhdGVzIHRvIHJlbW90ZQorcmVwb3NpdG9yeS4gIEZvciBwdWxsIG9wZXJhdGlvbnMsIHNlZSBsaW5rZ2l0OmdpdC1mZXRjaC1wYWNrWzFdLgorCitUaGUgY29tbWFuZCBhbGxvd3MgZm9yIGNyZWF0aW9uIGFuZCBmYXN0LWZvcndhcmRpbmcgb2Ygc2hhMSByZWZzCisoaGVhZHMvdGFncykgb24gdGhlIHJlbW90ZSBlbmQgKHN0cmljdGx5IHNwZWFraW5nLCBpdCBpcyB0aGUKK2xvY2FsIGVuZCAnZ2l0LXJlY2VpdmUtcGFjaycgcnVucywgYnV0IHRvIHRoZSB1c2VyIHdobyBpcyBzaXR0aW5nIGF0Cit0aGUgc2VuZC1wYWNrIGVuZCwgaXQgaXMgdXBkYXRpbmcgdGhlIHJlbW90ZS4gIENvbmZ1c2VkPykKKworVGhlcmUgYXJlIG90aGVyIHJlYWwtd29ybGQgZXhhbXBsZXMgb2YgdXNpbmcgdXBkYXRlIGFuZAorcG9zdC11cGRhdGUgaG9va3MgZm91bmQgaW4gdGhlIERvY3VtZW50YXRpb24vaG93dG8gZGlyZWN0b3J5LgorCisnZ2l0LXJlY2VpdmUtcGFjaycgaG9ub3VycyB0aGUgcmVjZWl2ZS5kZW55Tm9uRmFzdEZvcndhcmRzIGNvbmZpZworb3B0aW9uLCB3aGljaCB0ZWxscyBpdCBpZiB1cGRhdGVzIHRvIGEgcmVmIHNob3VsZCBiZSBkZW5pZWQgaWYgdGhleQorYXJlIG5vdCBmYXN0LWZvcndhcmRzLgorCitBIG51bWJlciBvZiBvdGhlciByZWNlaXZlLiogY29uZmlnIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0byB0d2VhaworaXRzIGJlaGF2aW9yLCBzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCitPUFRJT05TCistLS0tLS0tCis8ZGlyZWN0b3J5Pjo6CisJVGhlIHJlcG9zaXRvcnkgdG8gc3luYyBpbnRvLgorCitQUkUtUkVDRUlWRSBIT09LCistLS0tLS0tLS0tLS0tLS0tCitCZWZvcmUgYW55IHJlZiBpcyB1cGRhdGVkLCBpZiAkR0lUX0RJUi9ob29rcy9wcmUtcmVjZWl2ZSBmaWxlIGV4aXN0cworYW5kIGlzIGV4ZWN1dGFibGUsIGl0IHdpbGwgYmUgaW52b2tlZCBvbmNlIHdpdGggbm8gcGFyYW1ldGVycy4gIFRoZQorc3RhbmRhcmQgaW5wdXQgb2YgdGhlIGhvb2sgd2lsbCBiZSBvbmUgbGluZSBwZXIgcmVmIHRvIGJlIHVwZGF0ZWQ6CisKKyAgICAgICBzaGExLW9sZCBTUCBzaGExLW5ldyBTUCByZWZuYW1lIExGCisKK1RoZSByZWZuYW1lIHZhbHVlIGlzIHJlbGF0aXZlIHRvICRHSVRfRElSOyBlLmcuIGZvciB0aGUgbWFzdGVyCitoZWFkIHRoaXMgaXMgInJlZnMvaGVhZHMvbWFzdGVyIi4gIFRoZSB0d28gc2hhMSB2YWx1ZXMgYmVmb3JlCitlYWNoIHJlZm5hbWUgYXJlIHRoZSBvYmplY3QgbmFtZXMgZm9yIHRoZSByZWZuYW1lIGJlZm9yZSBhbmQgYWZ0ZXIKK3RoZSB1cGRhdGUuICBSZWZzIHRvIGJlIGNyZWF0ZWQgd2lsbCBoYXZlIHNoYTEtb2xkIGVxdWFsIHRvIDBcezQwfSwKK3doaWxlIHJlZnMgdG8gYmUgZGVsZXRlZCB3aWxsIGhhdmUgc2hhMS1uZXcgZXF1YWwgdG8gMFx7NDB9LCBvdGhlcndpc2UKK3NoYTEtb2xkIGFuZCBzaGExLW5ldyBzaG91bGQgYmUgdmFsaWQgb2JqZWN0cyBpbiB0aGUgcmVwb3NpdG9yeS4KKworV2hlbiBhY2NlcHRpbmcgYSBzaWduZWQgcHVzaCAoc2VlIGxpbmtnaXQ6Z2l0LXB1c2hbMV0pLCB0aGUgc2lnbmVkCitwdXNoIGNlcnRpZmljYXRlIGlzIHN0b3JlZCBpbiBhIGJsb2IgYW5kIGFuIGVudmlyb25tZW50IHZhcmlhYmxlCitgR0lUX1BVU0hfQ0VSVGAgY2FuIGJlIGNvbnN1bHRlZCBmb3IgaXRzIG9iamVjdCBuYW1lLiAgU2VlIHRoZQorZGVzY3JpcHRpb24gb2YgYHBvc3QtcmVjZWl2ZWAgaG9vayBmb3IgYW4gZXhhbXBsZS4gIEluIGFkZGl0aW9uLCB0aGUKK2NlcnRpZmljYXRlIGlzIHZlcmlmaWVkIHVzaW5nIEdQRyBhbmQgdGhlIHJlc3VsdCBpcyBleHBvcnRlZCB3aXRoCit0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlczoKKworYEdJVF9QVVNIX0NFUlRfU0lHTkVSYDo6CisJVGhlIG5hbWUgYW5kIHRoZSBlLW1haWwgYWRkcmVzcyBvZiB0aGUgb3duZXIgb2YgdGhlIGtleSB0aGF0CisJc2lnbmVkIHRoZSBwdXNoIGNlcnRpZmljYXRlLgorCitgR0lUX1BVU0hfQ0VSVF9LRVlgOjoKKwlUaGUgR1BHIGtleSBJRCBvZiB0aGUga2V5IHRoYXQgc2lnbmVkIHRoZSBwdXNoIGNlcnRpZmljYXRlLgorCitgR0lUX1BVU0hfQ0VSVF9TVEFUVVNgOjoKKwlUaGUgc3RhdHVzIG9mIEdQRyB2ZXJpZmljYXRpb24gb2YgdGhlIHB1c2ggY2VydGlmaWNhdGUsCisJdXNpbmcgdGhlIHNhbWUgbW5lbW9uaWMgYXMgdXNlZCBpbiBgJUc/YCBmb3JtYXQgb2YgYGdpdCBsb2dgCisJZmFtaWx5IG9mIGNvbW1hbmRzIChzZWUgbGlua2dpdDpnaXQtbG9nWzFdKS4KKworYEdJVF9QVVNIX0NFUlRfTk9OQ0VgOjoKKwlUaGUgbm9uY2Ugc3RyaW5nIHRoZSBwcm9jZXNzIGFza2VkIHRoZSBzaWduZXIgdG8gaW5jbHVkZQorCWluIHRoZSBwdXNoIGNlcnRpZmljYXRlLiAgSWYgdGhpcyBkb2VzIG5vdCBtYXRjaCB0aGUgdmFsdWUKKwlyZWNvcmRlZCBvbiB0aGUgIm5vbmNlIiBoZWFkZXIgaW4gdGhlIHB1c2ggY2VydGlmaWNhdGUsIGl0CisJbWF5IGluZGljYXRlIHRoYXQgdGhlIGNlcnRpZmljYXRlIGlzIGEgdmFsaWQgb25lIHRoYXQgaXMKKwliZWluZyByZXBsYXllZCBmcm9tIGEgc2VwYXJhdGUgImdpdCBwdXNoIiBzZXNzaW9uLgorCitgR0lUX1BVU0hfQ0VSVF9OT05DRV9TVEFUVVNgOjoKK2BVTlNPTElDSVRFRGA7OworCSJnaXQgcHVzaCAtLXNpZ25lZCIgc2VudCBhIG5vbmNlIHdoZW4gd2UgZGlkIG5vdCBhc2sgaXQgdG8KKwlzZW5kIG9uZS4KK2BNSVNTSU5HYDs7CisJImdpdCBwdXNoIC0tc2lnbmVkIiBkaWQgbm90IHNlbmQgYW55IG5vbmNlIGhlYWRlci4KK2BCQURgOzsKKwkiZ2l0IHB1c2ggLS1zaWduZWQiIHNlbnQgYSBib2d1cyBub25jZS4KK2BPS2A7OworCSJnaXQgcHVzaCAtLXNpZ25lZCIgc2VudCB0aGUgbm9uY2Ugd2UgYXNrZWQgaXQgdG8gc2VuZC4KK2BTTE9QYDs7CisJImdpdCBwdXNoIC0tc2lnbmVkIiBzZW50IGEgbm9uY2UgZGlmZmVyZW50IGZyb20gd2hhdCB3ZQorCWFza2VkIGl0IHRvIHNlbmQgbm93LCBidXQgaW4gYSBwcmV2aW91cyBzZXNzaW9uLiAgU2VlCisJYEdJVF9QVVNIX0NFUlRfTk9OQ0VfU0xPUGAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKK2BHSVRfUFVTSF9DRVJUX05PTkNFX1NMT1BgOjoKKwkiZ2l0IHB1c2ggLS1zaWduZWQiIHNlbnQgYSBub25jZSBkaWZmZXJlbnQgZnJvbSB3aGF0IHdlCisJYXNrZWQgaXQgdG8gc2VuZCBub3csIGJ1dCBpbiBhIGRpZmZlcmVudCBzZXNzaW9uIHdob3NlCisJc3RhcnRpbmcgdGltZSBpcyBkaWZmZXJlbnQgYnkgdGhpcyBtYW55IHNlY29uZHMgZnJvbSB0aGUKKwljdXJyZW50IHNlc3Npb24uICBPbmx5IG1lYW5pbmdmdWwgd2hlbgorCWBHSVRfUFVTSF9DRVJUX05PTkNFX1NUQVRVU2Agc2F5cyBgU0xPUGAuCisJQWxzbyByZWFkIGFib3V0IGByZWNlaXZlLmNlcnROb25jZVNsb3BgIHZhcmlhYmxlIGluCisJbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCitUaGlzIGhvb2sgaXMgY2FsbGVkIGJlZm9yZSBhbnkgcmVmbmFtZSBpcyB1cGRhdGVkIGFuZCBiZWZvcmUgYW55CitmYXN0LWZvcndhcmQgY2hlY2tzIGFyZSBwZXJmb3JtZWQuCisKK0lmIHRoZSBwcmUtcmVjZWl2ZSBob29rIGV4aXRzIHdpdGggYSBub24temVybyBleGl0IHN0YXR1cyBubyB1cGRhdGVzCit3aWxsIGJlIHBlcmZvcm1lZCwgYW5kIHRoZSB1cGRhdGUsIHBvc3QtcmVjZWl2ZSBhbmQgcG9zdC11cGRhdGUKK2hvb2tzIHdpbGwgbm90IGJlIGludm9rZWQgZWl0aGVyLiAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHF1aWNrbHkKK2JhaWwgb3V0IGlmIHRoZSB1cGRhdGUgaXMgbm90IHRvIGJlIHN1cHBvcnRlZC4KKworU2VlIHRoZSBub3RlcyBvbiB0aGUgcXVhcmFudGluZSBlbnZpcm9ubWVudCBiZWxvdy4KKworVVBEQVRFIEhPT0sKKy0tLS0tLS0tLS0tCitCZWZvcmUgZWFjaCByZWYgaXMgdXBkYXRlZCwgaWYgJEdJVF9ESVIvaG9va3MvdXBkYXRlIGZpbGUgZXhpc3RzCithbmQgaXMgZXhlY3V0YWJsZSwgaXQgaXMgaW52b2tlZCBvbmNlIHBlciByZWYsIHdpdGggdGhyZWUgcGFyYW1ldGVyczoKKworICAgICAgICRHSVRfRElSL2hvb2tzL3VwZGF0ZSByZWZuYW1lIHNoYTEtb2xkIHNoYTEtbmV3CisKK1RoZSByZWZuYW1lIHBhcmFtZXRlciBpcyByZWxhdGl2ZSB0byAkR0lUX0RJUjsgZS5nLiBmb3IgdGhlIG1hc3RlcgoraGVhZCB0aGlzIGlzICJyZWZzL2hlYWRzL21hc3RlciIuICBUaGUgdHdvIHNoYTEgYXJndW1lbnRzIGFyZQordGhlIG9iamVjdCBuYW1lcyBmb3IgdGhlIHJlZm5hbWUgYmVmb3JlIGFuZCBhZnRlciB0aGUgdXBkYXRlLgorTm90ZSB0aGF0IHRoZSBob29rIGlzIGNhbGxlZCBiZWZvcmUgdGhlIHJlZm5hbWUgaXMgdXBkYXRlZCwKK3NvIGVpdGhlciBzaGExLW9sZCBpcyAwXHs0MH0gKG1lYW5pbmcgdGhlcmUgaXMgbm8gc3VjaCByZWYgeWV0KSwKK29yIGl0IHNob3VsZCBtYXRjaCB3aGF0IGlzIHJlY29yZGVkIGluIHJlZm5hbWUuCisKK1RoZSBob29rIHNob3VsZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzIGlmIGl0IHdhbnRzIHRvIGRpc2FsbG93Cit1cGRhdGluZyB0aGUgbmFtZWQgcmVmLiAgT3RoZXJ3aXNlIGl0IHNob3VsZCBleGl0IHdpdGggemVyby4KKworU3VjY2Vzc2Z1bCBleGVjdXRpb24gKGEgemVybyBleGl0IHN0YXR1cykgb2YgdGhpcyBob29rIGRvZXMgbm90CitlbnN1cmUgdGhlIHJlZiB3aWxsIGFjdHVhbGx5IGJlIHVwZGF0ZWQsIGl0IGlzIG9ubHkgYSBwcmVyZXF1aXNpdGUuCitBcyBzdWNoIGl0IGlzIG5vdCBhIGdvb2QgaWRlYSB0byBzZW5kIG5vdGljZXMgKGUuZy4gZW1haWwpIGZyb20KK3RoaXMgaG9vay4gIENvbnNpZGVyIHVzaW5nIHRoZSBwb3N0LXJlY2VpdmUgaG9vayBpbnN0ZWFkLgorCitQT1NULVJFQ0VJVkUgSE9PSworLS0tLS0tLS0tLS0tLS0tLS0KK0FmdGVyIGFsbCByZWZzIHdlcmUgdXBkYXRlZCAob3IgYXR0ZW1wdGVkIHRvIGJlIHVwZGF0ZWQpLCBpZiBhbnkKK3JlZiB1cGRhdGUgd2FzIHN1Y2Nlc3NmdWwsIGFuZCBpZiAkR0lUX0RJUi9ob29rcy9wb3N0LXJlY2VpdmUKK2ZpbGUgZXhpc3RzIGFuZCBpcyBleGVjdXRhYmxlLCBpdCB3aWxsIGJlIGludm9rZWQgb25jZSB3aXRoIG5vCitwYXJhbWV0ZXJzLiAgVGhlIHN0YW5kYXJkIGlucHV0IG9mIHRoZSBob29rIHdpbGwgYmUgb25lIGxpbmUKK2ZvciBlYWNoIHN1Y2Nlc3NmdWxseSB1cGRhdGVkIHJlZjoKKworICAgICAgIHNoYTEtb2xkIFNQIHNoYTEtbmV3IFNQIHJlZm5hbWUgTEYKKworVGhlIHJlZm5hbWUgdmFsdWUgaXMgcmVsYXRpdmUgdG8gJEdJVF9ESVI7IGUuZy4gZm9yIHRoZSBtYXN0ZXIKK2hlYWQgdGhpcyBpcyAicmVmcy9oZWFkcy9tYXN0ZXIiLiAgVGhlIHR3byBzaGExIHZhbHVlcyBiZWZvcmUKK2VhY2ggcmVmbmFtZSBhcmUgdGhlIG9iamVjdCBuYW1lcyBmb3IgdGhlIHJlZm5hbWUgYmVmb3JlIGFuZCBhZnRlcgordGhlIHVwZGF0ZS4gIFJlZnMgdGhhdCB3ZXJlIGNyZWF0ZWQgd2lsbCBoYXZlIHNoYTEtb2xkIGVxdWFsIHRvCiswXHs0MH0sIHdoaWxlIHJlZnMgdGhhdCB3ZXJlIGRlbGV0ZWQgd2lsbCBoYXZlIHNoYTEtbmV3IGVxdWFsIHRvCiswXHs0MH0sIG90aGVyd2lzZSBzaGExLW9sZCBhbmQgc2hhMS1uZXcgc2hvdWxkIGJlIHZhbGlkIG9iamVjdHMgaW4KK3RoZSByZXBvc2l0b3J5LgorCitUaGUgYEdJVF9QVVNIX0NFUlQqYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgY2FuIGJlIGluc3BlY3RlZCwganVzdCBhcworaW4gYHByZS1yZWNlaXZlYCBob29rLCBhZnRlciBhY2NlcHRpbmcgYSBzaWduZWQgcHVzaC4KKworVXNpbmcgdGhpcyBob29rLCBpdCBpcyBlYXN5IHRvIGdlbmVyYXRlIG1haWxzIGRlc2NyaWJpbmcgdGhlIHVwZGF0ZXMKK3RvIHRoZSByZXBvc2l0b3J5LiAgVGhpcyBleGFtcGxlIHNjcmlwdCBzZW5kcyBvbmUgbWFpbCBtZXNzYWdlIHBlcgorcmVmIGxpc3RpbmcgdGhlIGNvbW1pdHMgcHVzaGVkIHRvIHRoZSByZXBvc2l0b3J5LCBhbmQgbG9ncyB0aGUgcHVzaAorY2VydGlmaWNhdGVzIG9mIHNpZ25lZCBwdXNoZXMgd2l0aCBnb29kIHNpZ25hdHVyZXMgdG8gYSBsb2dnZXIKK3NlcnZpY2U6CisKKy0tLS0KKyMhL2Jpbi9zaAorIyBtYWlsIG91dCBjb21taXQgdXBkYXRlIGluZm9ybWF0aW9uLgord2hpbGUgcmVhZCBvdmFsIG52YWwgcmVmCitkbworCWlmIGV4cHIgIiRvdmFsIiA6ICcwKiQnID4vZGV2L251bGwKKwl0aGVuCisJCWVjaG8gIkNyZWF0ZWQgYSBuZXcgcmVmLCB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWl0czoiCisJCWdpdCByZXYtbGlzdCAtLXByZXR0eSAiJG52YWwiCisJZWxzZQorCQllY2hvICJOZXcgY29tbWl0czoiCisJCWdpdCByZXYtbGlzdCAtLXByZXR0eSAiJG52YWwiICJeJG92YWwiCisJZmkgfAorCW1haWwgLXMgIkNoYW5nZXMgdG8gcmVmICRyZWYiIGNvbW1pdC1saXN0QG15ZG9tYWluCitkb25lCisjIGxvZyBzaWduZWQgcHVzaCBjZXJ0aWZpY2F0ZSwgaWYgYW55CitpZiB0ZXN0IC1uICIke0dJVF9QVVNIX0NFUlQtfSIgJiYgdGVzdCAke0dJVF9QVVNIX0NFUlRfU1RBVFVTfSA9IEcKK3RoZW4KKwkoCisJCWVjaG8gZXhwZWN0ZWQgbm9uY2UgaXMgJHtHSVRfUFVTSF9OT05DRX0KKwkJZ2l0IGNhdC1maWxlIGJsb2IgJHtHSVRfUFVTSF9DRVJUfQorCSkgfCBtYWlsIC1zICJwdXNoIGNlcnRpZmljYXRlIGZyb20gJEdJVF9QVVNIX0NFUlRfU0lHTkVSIiBwdXNoLWxvZ0BteWRvbWFpbgorZmkKK2V4aXQgMAorLS0tLQorCitUaGUgZXhpdCBjb2RlIGZyb20gdGhpcyBob29rIGludm9jYXRpb24gaXMgaWdub3JlZCwgaG93ZXZlciBhCitub24temVybyBleGl0IGNvZGUgd2lsbCBnZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlLgorCitOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIHJlZm5hbWUgdG8gbm90IGhhdmUgc2hhMS1uZXcgd2hlbiB0aGlzCitob29rIHJ1bnMuICBUaGlzIGNhbiBlYXNpbHkgb2NjdXIgaWYgYW5vdGhlciB1c2VyIG1vZGlmaWVzIHRoZSByZWYKK2FmdGVyIGl0IHdhcyB1cGRhdGVkIGJ5ICdnaXQtcmVjZWl2ZS1wYWNrJywgYnV0IGJlZm9yZSB0aGUgaG9vayB3YXMgYWJsZQordG8gZXZhbHVhdGUgaXQuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGhvb2tzIHJlbHkgb24gc2hhMS1uZXcKK3JhdGhlciB0aGFuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHJlZm5hbWUuCisKK1BPU1QtVVBEQVRFIEhPT0sKKy0tLS0tLS0tLS0tLS0tLS0KK0FmdGVyIGFsbCBvdGhlciBwcm9jZXNzaW5nLCBpZiBhdCBsZWFzdCBvbmUgcmVmIHdhcyB1cGRhdGVkLCBhbmQKK2lmICRHSVRfRElSL2hvb2tzL3Bvc3QtdXBkYXRlIGZpbGUgZXhpc3RzIGFuZCBpcyBleGVjdXRhYmxlLCB0aGVuCitwb3N0LXVwZGF0ZSB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsaXN0IG9mIHJlZnMgdGhhdCBoYXZlIGJlZW4gdXBkYXRlZC4KK1RoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGFueSByZXBvc2l0b3J5IHdpZGUgY2xlYW51cCB0YXNrcy4KKworVGhlIGV4aXQgY29kZSBmcm9tIHRoaXMgaG9vayBpbnZvY2F0aW9uIGlzIGlnbm9yZWQ7IHRoZSBvbmx5IHRoaW5nCitsZWZ0IGZvciAnZ2l0LXJlY2VpdmUtcGFjaycgdG8gZG8gYXQgdGhhdCBwb2ludCBpcyB0byBleGl0IGl0c2VsZgorYW55d2F5LgorCitUaGlzIGhvb2sgY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBydW4gYGdpdCB1cGRhdGUtc2VydmVyLWluZm9gCitpZiB0aGUgcmVwb3NpdG9yeSBpcyBwYWNrZWQgYW5kIGlzIHNlcnZlZCB2aWEgYSBkdW1iIHRyYW5zcG9ydC4KKworLS0tLQorIyEvYmluL3NoCitleGVjIGdpdCB1cGRhdGUtc2VydmVyLWluZm8KKy0tLS0KKworCitRVUFSQU5USU5FIEVOVklST05NRU5UCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gYHJlY2VpdmUtcGFja2AgdGFrZXMgaW4gb2JqZWN0cywgdGhleSBhcmUgcGxhY2VkIGludG8gYSB0ZW1wb3JhcnkKKyJxdWFyYW50aW5lIiBkaXJlY3Rvcnkgd2l0aGluIHRoZSBgJEdJVF9ESVIvb2JqZWN0c2AgZGlyZWN0b3J5IGFuZAorbWlncmF0ZWQgaW50byB0aGUgbWFpbiBvYmplY3Qgc3RvcmUgb25seSBhZnRlciB0aGUgYHByZS1yZWNlaXZlYCBob29rCitoYXMgY29tcGxldGVkLiBJZiB0aGUgcHVzaCBmYWlscyBiZWZvcmUgdGhlbiwgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgaXMKK3JlbW92ZWQgZW50aXJlbHkuCisKK1RoaXMgaGFzIGEgZmV3IHVzZXItdmlzaWJsZSBlZmZlY3RzIGFuZCBjYXZlYXRzOgorCisgIDEuIFB1c2hlcyB3aGljaCBmYWlsIGR1ZSB0byBwcm9ibGVtcyB3aXRoIHRoZSBpbmNvbWluZyBwYWNrLCBtaXNzaW5nCisgICAgIG9iamVjdHMsIG9yIGR1ZSB0byB0aGUgYHByZS1yZWNlaXZlYCBob29rIHdpbGwgbm90IGxlYXZlIGFueQorICAgICBvbi1kaXNrIGRhdGEuIFRoaXMgaXMgdXN1YWxseSBoZWxwZnVsIHRvIHByZXZlbnQgcmVwZWF0ZWQgZmFpbGVkCisgICAgIHB1c2hlcyBmcm9tIGZpbGxpbmcgdXAgeW91ciBkaXNrLCBidXQgY2FuIG1ha2UgZGVidWdnaW5nIG1vcmUKKyAgICAgY2hhbGxlbmdpbmcuCisKKyAgMi4gQW55IG9iamVjdHMgY3JlYXRlZCBieSB0aGUgYHByZS1yZWNlaXZlYCBob29rIHdpbGwgYmUgY3JlYXRlZCBpbgorICAgICB0aGUgcXVhcmFudGluZSBkaXJlY3RvcnkgKGFuZCBtaWdyYXRlZCBvbmx5IGlmIGl0IHN1Y2NlZWRzKS4KKworICAzLiBUaGUgYHByZS1yZWNlaXZlYCBob29rIE1VU1QgTk9UIHVwZGF0ZSBhbnkgcmVmcyB0byBwb2ludCB0bworICAgICBxdWFyYW50aW5lZCBvYmplY3RzLiBPdGhlciBwcm9ncmFtcyBhY2Nlc3NpbmcgdGhlIHJlcG9zaXRvcnkgd2lsbAorICAgICBub3QgYmUgYWJsZSB0byBzZWUgdGhlIG9iamVjdHMgKGFuZCBpZiB0aGUgcHJlLXJlY2VpdmUgaG9vayBmYWlscywKKyAgICAgdGhvc2UgcmVmcyB3b3VsZCBiZWNvbWUgY29ycnVwdGVkKS4gRm9yIHNhZmV0eSwgYW55IHJlZiB1cGRhdGVzCisgICAgIGZyb20gd2l0aGluIGBwcmUtcmVjZWl2ZWAgYXJlIGF1dG9tYXRpY2FsbHkgcmVqZWN0ZWQuCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1zZW5kLXBhY2tbMV0sIGxpbmtnaXQ6Z2l0bmFtZXNwYWNlc1s3XQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlZmxvZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWZsb2cudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNDg3ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWZsb2cudHh0CkBAIC0wLDAgKzEsMTM4IEBACitnaXQtcmVmbG9nKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZWZsb2cgLSBNYW5hZ2UgcmVmbG9nIGluZm9ybWF0aW9uCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJlZmxvZycgPHN1YmNvbW1hbmQ+IDxvcHRpb25zPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoZSBjb21tYW5kIHRha2VzIHZhcmlvdXMgc3ViY29tbWFuZHMsIGFuZCBkaWZmZXJlbnQgb3B0aW9ucworZGVwZW5kaW5nIG9uIHRoZSBzdWJjb21tYW5kOgorCitbdmVyc2VdCisnZ2l0IHJlZmxvZycgWydzaG93J10gW2xvZy1vcHRpb25zXSBbPHJlZj5dCisnZ2l0IHJlZmxvZyBleHBpcmUnIFstLWV4cGlyZT08dGltZT5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT5dCisJWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdCisJWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGwgWy0tc2luZ2xlLXdvcmt0cmVlXSB8IDxyZWZzPi4uLl0KKydnaXQgcmVmbG9nIGRlbGV0ZScgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXQorCVstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gcmVmQFx7c3BlY2lmaWVyXH0uLi4KKydnaXQgcmVmbG9nIGV4aXN0cycgPHJlZj4KKworUmVmZXJlbmNlIGxvZ3MsIG9yICJyZWZsb2dzIiwgcmVjb3JkIHdoZW4gdGhlIHRpcHMgb2YgYnJhbmNoZXMgYW5kCitvdGhlciByZWZlcmVuY2VzIHdlcmUgdXBkYXRlZCBpbiB0aGUgbG9jYWwgcmVwb3NpdG9yeS4gUmVmbG9ncyBhcmUKK3VzZWZ1bCBpbiB2YXJpb3VzIEdpdCBjb21tYW5kcywgdG8gc3BlY2lmeSB0aGUgb2xkIHZhbHVlIG9mIGEKK3JlZmVyZW5jZS4gRm9yIGV4YW1wbGUsIGBIRUFEQHsyfWAgbWVhbnMgIndoZXJlIEhFQUQgdXNlZCB0byBiZSB0d28KK21vdmVzIGFnbyIsIGBtYXN0ZXJAe29uZS53ZWVrLmFnb31gIG1lYW5zICJ3aGVyZSBtYXN0ZXIgdXNlZCB0byBwb2ludAordG8gb25lIHdlZWsgYWdvIGluIHRoaXMgbG9jYWwgcmVwb3NpdG9yeSIsIGFuZCBzbyBvbi4gU2VlCitsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XSBmb3IgbW9yZSBkZXRhaWxzLgorCitUaGlzIGNvbW1hbmQgbWFuYWdlcyB0aGUgaW5mb3JtYXRpb24gcmVjb3JkZWQgaW4gdGhlIHJlZmxvZ3MuCisKK1RoZSAic2hvdyIgc3ViY29tbWFuZCAod2hpY2ggaXMgYWxzbyB0aGUgZGVmYXVsdCwgaW4gdGhlIGFic2VuY2Ugb2YKK2FueSBzdWJjb21tYW5kcykgc2hvd3MgdGhlIGxvZyBvZiB0aGUgcmVmZXJlbmNlIHByb3ZpZGVkIGluIHRoZQorY29tbWFuZC1saW5lIChvciBgSEVBRGAsIGJ5IGRlZmF1bHQpLiBUaGUgcmVmbG9nIGNvdmVycyBhbGwgcmVjZW50CithY3Rpb25zLCBhbmQgaW4gYWRkaXRpb24gdGhlIGBIRUFEYCByZWZsb2cgcmVjb3JkcyBicmFuY2ggc3dpdGNoaW5nLgorYGdpdCByZWZsb2cgc2hvd2AgaXMgYW4gYWxpYXMgZm9yIGBnaXQgbG9nIC1nIC0tYWJicmV2LWNvbW1pdAorLS1wcmV0dHk9b25lbGluZWA7IHNlZSBsaW5rZ2l0OmdpdC1sb2dbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1RoZSAiZXhwaXJlIiBzdWJjb21tYW5kIHBydW5lcyBvbGRlciByZWZsb2cgZW50cmllcy4gRW50cmllcyBvbGRlcgordGhhbiBgZXhwaXJlYCB0aW1lLCBvciBlbnRyaWVzIG9sZGVyIHRoYW4gYGV4cGlyZS11bnJlYWNoYWJsZWAgdGltZQorYW5kIG5vdCByZWFjaGFibGUgZnJvbSB0aGUgY3VycmVudCB0aXAsIGFyZSByZW1vdmVkIGZyb20gdGhlIHJlZmxvZy4KK1RoaXMgaXMgdHlwaWNhbGx5IG5vdCB1c2VkIGRpcmVjdGx5IGJ5IGVuZCB1c2VycyAtLSBpbnN0ZWFkLCBzZWUKK2xpbmtnaXQ6Z2l0LWdjWzFdLgorCitUaGUgImRlbGV0ZSIgc3ViY29tbWFuZCBkZWxldGVzIHNpbmdsZSBlbnRyaWVzIGZyb20gdGhlIHJlZmxvZy4gSXRzCithcmd1bWVudCBtdXN0IGJlIGFuIF9leGFjdF8gZW50cnkgKGUuZy4gImBnaXQgcmVmbG9nIGRlbGV0ZQorbWFzdGVyQHsyfWAiKS4gVGhpcyBzdWJjb21tYW5kIGlzIGFsc28gdHlwaWNhbGx5IG5vdCB1c2VkIGRpcmVjdGx5IGJ5CitlbmQgdXNlcnMuCisKK1RoZSAiZXhpc3RzIiBzdWJjb21tYW5kIGNoZWNrcyB3aGV0aGVyIGEgcmVmIGhhcyBhIHJlZmxvZy4gIEl0IGV4aXRzCit3aXRoIHplcm8gc3RhdHVzIGlmIHRoZSByZWZsb2cgZXhpc3RzLCBhbmQgbm9uLXplcm8gc3RhdHVzIGlmIGl0IGRvZXMKK25vdC4KKworT1BUSU9OUworLS0tLS0tLQorCitPcHRpb25zIGZvciBgc2hvd2AKK35+fn5+fn5+fn5+fn5+fn5+fgorCitgZ2l0IHJlZmxvZyBzaG93YCBhY2NlcHRzIGFueSBvZiB0aGUgb3B0aW9ucyBhY2NlcHRlZCBieSBgZ2l0IGxvZ2AuCisKKworT3B0aW9ucyBmb3IgYGV4cGlyZWAKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKKy0tYWxsOjoKKwlQcm9jZXNzIHRoZSByZWZsb2dzIG9mIGFsbCByZWZlcmVuY2VzLgorCistLXNpbmdsZS13b3JrdHJlZTo6CisJQnkgZGVmYXVsdCB3aGVuIGAtLWFsbGAgaXMgc3BlY2lmaWVkLCByZWZsb2dzIGZyb20gYWxsIHdvcmtpbmcKKwl0cmVlcyBhcmUgcHJvY2Vzc2VkLiBUaGlzIG9wdGlvbiBsaW1pdHMgdGhlIHByb2Nlc3NpbmcgdG8gcmVmbG9ncworCWZyb20gdGhlIGN1cnJlbnQgd29ya2luZyB0cmVlIG9ubHkuCisKKy0tZXhwaXJlPTx0aW1lPjo6CisJUHJ1bmUgZW50cmllcyBvbGRlciB0aGFuIHRoZSBzcGVjaWZpZWQgdGltZS4gSWYgdGhpcyBvcHRpb24gaXMKKwlub3Qgc3BlY2lmaWVkLCB0aGUgZXhwaXJhdGlvbiB0aW1lIGlzIHRha2VuIGZyb20gdGhlCisJY29uZmlndXJhdGlvbiBzZXR0aW5nIGBnYy5yZWZsb2dFeHBpcmVgLCB3aGljaCBpbiB0dXJuCisJZGVmYXVsdHMgdG8gOTAgZGF5cy4gYC0tZXhwaXJlPWFsbGAgcHJ1bmVzIGVudHJpZXMgcmVnYXJkbGVzcworCW9mIHRoZWlyIGFnZTsgYC0tZXhwaXJlPW5ldmVyYCB0dXJucyBvZmYgcHJ1bmluZyBvZiByZWFjaGFibGUKKwllbnRyaWVzIChidXQgc2VlIGAtLWV4cGlyZS11bnJlYWNoYWJsZWApLgorCistLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT46OgorCVBydW5lIGVudHJpZXMgb2xkZXIgdGhhbiBgPHRpbWU+YCB0aGF0IGFyZSBub3QgcmVhY2hhYmxlIGZyb20KKwl0aGUgY3VycmVudCB0aXAgb2YgdGhlIGJyYW5jaC4gSWYgdGhpcyBvcHRpb24gaXMgbm90CisJc3BlY2lmaWVkLCB0aGUgZXhwaXJhdGlvbiB0aW1lIGlzIHRha2VuIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24KKwlzZXR0aW5nIGBnYy5yZWZsb2dFeHBpcmVVbnJlYWNoYWJsZWAsIHdoaWNoIGluIHR1cm4gZGVmYXVsdHMKKwl0byAzMCBkYXlzLiBgLS1leHBpcmUtdW5yZWFjaGFibGU9YWxsYCBwcnVuZXMgdW5yZWFjaGFibGUKKwllbnRyaWVzIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgYWdlOyBgLS1leHBpcmUtdW5yZWFjaGFibGU9bmV2ZXJgCisJdHVybnMgb2ZmIGVhcmx5IHBydW5pbmcgb2YgdW5yZWFjaGFibGUgZW50cmllcyAoYnV0IHNlZQorCWAtLWV4cGlyZWApLgorCistLXVwZGF0ZXJlZjo6CisJVXBkYXRlIHRoZSByZWZlcmVuY2UgdG8gdGhlIHZhbHVlIG9mIHRoZSB0b3AgcmVmbG9nIGVudHJ5IChpLmUuCisJPHJlZj5AXHswXH0pIGlmIHRoZSBwcmV2aW91cyB0b3AgZW50cnkgd2FzIHBydW5lZC4gIChUaGlzCisJb3B0aW9uIGlzIGlnbm9yZWQgZm9yIHN5bWJvbGljIHJlZmVyZW5jZXMuKQorCistLXJld3JpdGU6OgorCUlmIGEgcmVmbG9nIGVudHJ5J3MgcHJlZGVjZXNzb3IgaXMgcHJ1bmVkLCBhZGp1c3QgaXRzICJvbGQiCisJU0hBLTEgdG8gYmUgZXF1YWwgdG8gdGhlICJuZXciIFNIQS0xIGZpZWxkIG9mIHRoZSBlbnRyeSB0aGF0CisJbm93IHByZWNlZGVzIGl0LgorCistLXN0YWxlLWZpeDo6CisJUHJ1bmUgYW55IHJlZmxvZyBlbnRyaWVzIHRoYXQgcG9pbnQgdG8gImJyb2tlbiBjb21taXRzIi4gQQorCWJyb2tlbiBjb21taXQgaXMgYSBjb21taXQgdGhhdCBpcyBub3QgcmVhY2hhYmxlIGZyb20gYW55IG9mCisJdGhlIHJlZmVyZW5jZSB0aXBzIGFuZCB0aGF0IHJlZmVycywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgdG8KKwlhIG1pc3NpbmcgY29tbWl0LCB0cmVlLCBvciBibG9iIG9iamVjdC4KKysKK1RoaXMgY29tcHV0YXRpb24gaW52b2x2ZXMgdHJhdmVyc2luZyBhbGwgdGhlIHJlYWNoYWJsZSBvYmplY3RzLCBpLmUuIGl0CitoYXMgdGhlIHNhbWUgY29zdCBhcyAnZ2l0IHBydW5lJy4gIEl0IGlzIHByaW1hcmlseSBpbnRlbmRlZCB0byBmaXgKK2NvcnJ1cHRpb24gY2F1c2VkIGJ5IGdhcmJhZ2UgY29sbGVjdGluZyB1c2luZyBvbGRlciB2ZXJzaW9ucyBvZiBHaXQsCit3aGljaCBkaWRuJ3QgcHJvdGVjdCBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHJlZmxvZ3MuCisKKy1uOjoKKy0tZHJ5LXJ1bjo6CisJRG8gbm90IGFjdHVhbGx5IHBydW5lIGFueSBlbnRyaWVzOyBqdXN0IHNob3cgd2hhdCB3b3VsZCBoYXZlCisJYmVlbiBwcnVuZWQuCisKKy0tdmVyYm9zZTo6CisJUHJpbnQgZXh0cmEgaW5mb3JtYXRpb24gb24gc2NyZWVuLgorCisKK09wdGlvbnMgZm9yIGBkZWxldGVgCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitgZ2l0IHJlZmxvZyBkZWxldGVgIGFjY2VwdHMgb3B0aW9ucyBgLS11cGRhdGVyZWZgLCBgLS1yZXdyaXRlYCwgYC1uYCwKK2AtLWRyeS1ydW5gLCBhbmQgYC0tdmVyYm9zZWAsIHdpdGggdGhlIHNhbWUgbWVhbmluZ3MgYXMgd2hlbiB0aGV5IGFyZQordXNlZCB3aXRoIGBleHBpcmVgLgorCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLWV4dC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtZXh0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGVhN2UxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLWV4dC50eHQKQEAgLTAsMCArMSwxMjUgQEAKK2dpdC1yZW1vdGUtZXh0KDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVtb3RlLWV4dCAtIEJyaWRnZSBzbWFydCB0cmFuc3BvcnQgdG8gZXh0ZXJuYWwgY29tbWFuZC4KKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCitnaXQgcmVtb3RlIGFkZCA8bmljaz4gImV4dDo6PGNvbW1hbmQ+WyA8YXJndW1lbnRzPi4uLl0iCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyByZW1vdGUgaGVscGVyIHVzZXMgdGhlIHNwZWNpZmllZCAnPGNvbW1hbmQ+JyB0byBjb25uZWN0Cit0byBhIHJlbW90ZSBHaXQgc2VydmVyLgorCitEYXRhIHdyaXR0ZW4gdG8gc3RkaW4gb2YgdGhlIHNwZWNpZmllZCAnPGNvbW1hbmQ+JyBpcyBhc3N1bWVkCit0byBiZSBzZW50IHRvIGEgZ2l0Oi8vIHNlcnZlciwgZ2l0LXVwbG9hZC1wYWNrLCBnaXQtcmVjZWl2ZS1wYWNrCitvciBnaXQtdXBsb2FkLWFyY2hpdmUgKGRlcGVuZGluZyBvbiBzaXR1YXRpb24pLCBhbmQgZGF0YSByZWFkCitmcm9tIHN0ZG91dCBvZiA8Y29tbWFuZD4gaXMgYXNzdW1lZCB0byBiZSByZWNlaXZlZCBmcm9tCit0aGUgc2FtZSBzZXJ2aWNlLgorCitDb21tYW5kIGFuZCBhcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBieSBhbiB1bmVzY2FwZWQgc3BhY2UuCisKK1RoZSBmb2xsb3dpbmcgc2VxdWVuY2VzIGhhdmUgYSBzcGVjaWFsIG1lYW5pbmc6CisKKyclICc6OgorCUxpdGVyYWwgc3BhY2UgaW4gY29tbWFuZCBvciBhcmd1bWVudC4KKworJyUlJzo6CisJTGl0ZXJhbCBwZXJjZW50IHNpZ24uCisKKyclcyc6OgorCVJlcGxhY2VkIHdpdGggbmFtZSAocmVjZWl2ZS1wYWNrLCB1cGxvYWQtcGFjaywgb3IKKwl1cGxvYWQtYXJjaGl2ZSkgb2YgdGhlIHNlcnZpY2UgR2l0IHdhbnRzIHRvIGludm9rZS4KKworJyVTJzo6CisJUmVwbGFjZWQgd2l0aCBsb25nIG5hbWUgKGdpdC1yZWNlaXZlLXBhY2ssCisJZ2l0LXVwbG9hZC1wYWNrLCBvciBnaXQtdXBsb2FkLWFyY2hpdmUpIG9mIHRoZSBzZXJ2aWNlCisJR2l0IHdhbnRzIHRvIGludm9rZS4KKworJyVHJyAobXVzdCBiZSB0aGUgZmlyc3QgY2hhcmFjdGVycyBpbiBhbiBhcmd1bWVudCk6OgorCVRoaXMgYXJndW1lbnQgd2lsbCBub3QgYmUgcGFzc2VkIHRvICc8Y29tbWFuZD4nLiBJbnN0ZWFkLCBpdAorCXdpbGwgY2F1c2UgdGhlIGhlbHBlciB0byBzdGFydCBieSBzZW5kaW5nIGdpdDovLyBzZXJ2aWNlIHJlcXVlc3RzIHRvCisJdGhlIHJlbW90ZSBzaWRlIHdpdGggdGhlIHNlcnZpY2UgZmllbGQgc2V0IHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlIGFuZAorCXRoZSByZXBvc2l0b3J5IGZpZWxkIHNldCB0byByZXN0IG9mIHRoZSBhcmd1bWVudC4gRGVmYXVsdCBpcyBub3QgdG8gc2VuZAorCXN1Y2ggYSByZXF1ZXN0LgorKworVGhpcyBpcyB1c2VmdWwgaWYgcmVtb3RlIHNpZGUgaXMgZ2l0Oi8vIHNlcnZlciBhY2Nlc3NlZCBvdmVyCitzb21lIHR1bm5lbC4KKworJyVWJyAobXVzdCBiZSBmaXJzdCBjaGFyYWN0ZXJzIGluIGFyZ3VtZW50KTo6CisJVGhpcyBhcmd1bWVudCB3aWxsIG5vdCBiZSBwYXNzZWQgdG8gJzxjb21tYW5kPicuIEluc3RlYWQgaXQgc2V0cworCXRoZSB2aG9zdCBmaWVsZCBpbiB0aGUgZ2l0Oi8vIHNlcnZpY2UgcmVxdWVzdCAodG8gcmVzdCBvZiB0aGUgYXJndW1lbnQpLgorCURlZmF1bHQgaXMgbm90IHRvIHNlbmQgdmhvc3QgaW4gc3VjaCByZXF1ZXN0IChpZiBzZW50KS4KKworRU5WSVJPTk1FTlQgVkFSSUFCTEVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR0lUX1RSQU5TTE9PUF9ERUJVRzo6CisJSWYgc2V0LCBwcmludHMgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHZhcmlvdXMgcmVhZHMvd3JpdGVzLgorCitFTlZJUk9OTUVOVCBWQVJJQUJMRVMgUEFTU0VEIFRPIENPTU1BTkQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHSVRfRVhUX1NFUlZJQ0U6OgorCVNldCB0byBsb25nIG5hbWUgKGdpdC11cGxvYWQtcGFjaywgZXRjLi4uKSBvZiBzZXJ2aWNlIGhlbHBlciBuZWVkcworCXRvIGludm9rZS4KKworR0lUX0VYVF9TRVJWSUNFX05PUFJFRklYOjoKKwlTZXQgdG8gbG9uZyBuYW1lICh1cGxvYWQtcGFjaywgZXRjLi4uKSBvZiBzZXJ2aWNlIGhlbHBlciBuZWVkcworCXRvIGludm9rZS4KKworCitFWEFNUExFUworLS0tLS0tLS0KK1RoaXMgcmVtb3RlIGhlbHBlciBpcyB0cmFuc3BhcmVudGx5IHVzZWQgYnkgR2l0IHdoZW4KK3lvdSB1c2UgY29tbWFuZHMgc3VjaCBhcyAiZ2l0IGZldGNoIDxVUkw+IiwgImdpdCBjbG9uZSA8VVJMPiIsCissICJnaXQgcHVzaCA8VVJMPiIgb3IgImdpdCByZW1vdGUgYWRkIDxuaWNrPiA8VVJMPiIsIHdoZXJlIDxVUkw+CitiZWdpbnMgd2l0aCBgZXh0OjpgLiAgRXhhbXBsZXM6CisKKyJleHQ6OnNzaCAtaSAvaG9tZS9mb28vLnNzaC9zb21la2V5IHVzZXImIzY0O2hvc3QuZXhhbXBsZSAlUyAnZm9vL3JlcG8nIjo6CisJTGlrZSBob3N0LmV4YW1wbGU6Zm9vL3JlcG8sIGJ1dCB1c2UgL2hvbWUvZm9vLy5zc2gvc29tZWtleSBhcworCWtleXBhaXIgYW5kIHVzZXIgYXMgdXNlciBvbiByZW1vdGUgc2lkZS4gVGhpcyBhdm9pZHMgbmVlZGluZyB0bworCWVkaXQgLnNzaC9jb25maWcuCisKKyJleHQ6OnNvY2F0IC10MzYwMCAtIEFCU1RSQUNULUNPTk5FQ1Q6L2dpdC1zZXJ2ZXIgJUcvc29tZXJlcG8iOjoKKwlSZXByZXNlbnRzIHJlcG9zaXRvcnkgd2l0aCBwYXRoIC9zb21lcmVwbyBhY2Nlc3NpYmxlIG92ZXIKKwlnaXQgcHJvdG9jb2wgYXQgYWJzdHJhY3QgbmFtZXNwYWNlIGFkZHJlc3MgL2dpdC1zZXJ2ZXIuCisKKyJleHQ6OmdpdC1zZXJ2ZXItYWxpYXMgZm9vICVHL3JlcG8iOjoKKwlSZXByZXNlbnRzIGEgcmVwb3NpdG9yeSB3aXRoIHBhdGggL3JlcG8gYWNjZXNzZWQgdXNpbmcgdGhlCisJaGVscGVyIHByb2dyYW0gImdpdC1zZXJ2ZXItYWxpYXMgZm9vIi4gIFRoZSBwYXRoIHRvIHRoZQorCXJlcG9zaXRvcnkgYW5kIHR5cGUgb2YgcmVxdWVzdCBhcmUgbm90IHBhc3NlZCBvbiB0aGUgY29tbWFuZAorCWxpbmUgYnV0IGFzIHBhcnQgb2YgdGhlIHByb3RvY29sIHN0cmVhbSwgYXMgdXN1YWwgd2l0aCBnaXQ6Ly8KKwlwcm90b2NvbC4KKworImV4dDo6Z2l0LXNlcnZlci1hbGlhcyBmb28gJUcvcmVwbyAlVmZvbyI6OgorCVJlcHJlc2VudHMgYSByZXBvc2l0b3J5IHdpdGggcGF0aCAvcmVwbyBhY2Nlc3NlZCB1c2luZyB0aGUKKwloZWxwZXIgcHJvZ3JhbSAiZ2l0LXNlcnZlci1hbGlhcyBmb28iLiAgVGhlIGhvc3RuYW1lIGZvciB0aGUKKwlyZW1vdGUgc2VydmVyIHBhc3NlZCBpbiB0aGUgcHJvdG9jb2wgc3RyZWFtIHdpbGwgYmUgImZvbyIKKwkodGhpcyBhbGxvd3MgbXVsdGlwbGUgdmlydHVhbCBHaXQgc2VydmVycyB0byBzaGFyZSBhCisJbGluay1sZXZlbCBhZGRyZXNzKS4KKworImV4dDo6Z2l0LXNlcnZlci1hbGlhcyBmb28gJUcvcmVwbyUgd2l0aCUgc3BhY2VzICVWZm9vIjo6CisJUmVwcmVzZW50cyBhIHJlcG9zaXRvcnkgd2l0aCBwYXRoIGAvcmVwbyB3aXRoIHNwYWNlc2AgYWNjZXNzZWQKKwl1c2luZyB0aGUgaGVscGVyIHByb2dyYW0gImdpdC1zZXJ2ZXItYWxpYXMgZm9vIi4gIFRoZSBob3N0bmFtZSBmb3IKKwl0aGUgcmVtb3RlIHNlcnZlciBwYXNzZWQgaW4gdGhlIHByb3RvY29sIHN0cmVhbSB3aWxsIGJlICJmb28iCisJKHRoaXMgYWxsb3dzIG11bHRpcGxlIHZpcnR1YWwgR2l0IHNlcnZlcnMgdG8gc2hhcmUgYQorCWxpbmstbGV2ZWwgYWRkcmVzcykuCisKKyJleHQ6OmdpdC1zc2wgZm9vLmV4YW1wbGUgL2JhciI6OgorCVJlcHJlc2VudHMgYSByZXBvc2l0b3J5IGFjY2Vzc2VkIHVzaW5nIHRoZSBoZWxwZXIgcHJvZ3JhbQorCSJnaXQtc3NsIGZvby5leGFtcGxlIC9iYXIiLiAgVGhlIHR5cGUgb2YgcmVxdWVzdCBjYW4gYmUKKwlkZXRlcm1pbmVkIGJ5IHRoZSBoZWxwZXIgdXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIChzZWUKKwlhYm92ZSkuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXRyZW1vdGUtaGVscGVyc1s3XQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1mZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtZmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NTFjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtZmQudHh0CkBAIC0wLDAgKzEsNTkgQEAKK2dpdC1yZW1vdGUtZmQoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlbW90ZS1mZCAtIFJlZmxlY3Qgc21hcnQgdHJhbnNwb3J0IHN0cmVhbSBiYWNrIHRvIGNhbGxlcgorCitTWU5PUFNJUworLS0tLS0tLS0KKyJmZDo6PGluZmQ+Wyw8b3V0ZmQ+XVsvPGFueXRoaW5nPl0iIChhcyBVUkwpCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBoZWxwZXIgdXNlcyBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9ycyB0byBjb25uZWN0IHRvIGEgcmVtb3RlIEdpdCBzZXJ2ZXIuCitUaGlzIGlzIG5vdCBtZWFudCBmb3IgZW5kIHVzZXJzIGJ1dCBmb3IgcHJvZ3JhbXMgYW5kIHNjcmlwdHMgY2FsbGluZyBnaXQKK2ZldGNoLCBwdXNoIG9yIGFyY2hpdmUuCisKK0lmIG9ubHkgPGluZmQ+IGlzIGdpdmVuLCBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgYmlkaXJlY3Rpb25hbCBzb2NrZXQgY29ubmVjdGVkCit0byByZW1vdGUgR2l0IHNlcnZlciAoZ2l0LXVwbG9hZC1wYWNrLCBnaXQtcmVjZWl2ZS1wYWNrIG9yCitnaXQtdXBsb2FkLWFyY2hpdmUpLiBJZiBib3RoIDxpbmZkPiBhbmQgPG91dGZkPiBhcmUgZ2l2ZW4sIHRoZXkgYXJlIGFzc3VtZWQKK3RvIGJlIHBpcGVzIGNvbm5lY3RlZCB0byBhIHJlbW90ZSBHaXQgc2VydmVyICg8aW5mZD4gYmVpbmcgdGhlIGluYm91bmQgcGlwZQorYW5kIDxvdXRmZD4gYmVpbmcgdGhlIG91dGJvdW5kIHBpcGUuCisKK0l0IGlzIGFzc3VtZWQgdGhhdCBhbnkgaGFuZHNoYWtpbmcgcHJvY2VkdXJlcyBoYXZlIGFscmVhZHkgYmVlbiBjb21wbGV0ZWQKKyhzdWNoIGFzIHNlbmRpbmcgc2VydmljZSByZXF1ZXN0IGZvciBnaXQ6Ly8pIGJlZm9yZSB0aGlzIGhlbHBlciBpcyBzdGFydGVkLgorCis8YW55dGhpbmc+IGNhbiBiZSBhbnkgc3RyaW5nLiBJdCBpcyBpZ25vcmVkLiBJdCBpcyBtZWFudCBmb3IgcHJvdmlkaW5nCitpbmZvcm1hdGlvbiB0byB1c2VyIGluIHRoZSBVUkwgaW4gY2FzZSB0aGF0IFVSTCBpcyBkaXNwbGF5ZWQgaW4gc29tZQorY29udGV4dC4KKworRU5WSVJPTk1FTlQgVkFSSUFCTEVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dJVF9UUkFOU0xPT1BfREVCVUc6OgorCUlmIHNldCwgcHJpbnRzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB2YXJpb3VzIHJlYWRzL3dyaXRlcy4KKworRVhBTVBMRVMKKy0tLS0tLS0tCitgZ2l0IGZldGNoIGZkOjoxNyBtYXN0ZXJgOjoKKwlGZXRjaCBtYXN0ZXIsIHVzaW5nIGZpbGUgZGVzY3JpcHRvciAjMTcgdG8gY29tbXVuaWNhdGUgd2l0aAorCWdpdC11cGxvYWQtcGFjay4KKworYGdpdCBmZXRjaCBmZDo6MTcvZm9vIG1hc3RlcmA6OgorCVNhbWUgYXMgYWJvdmUuCisKK2BnaXQgcHVzaCBmZDo6Nyw4IG1hc3RlciAoYXMgVVJMKWA6OgorCVB1c2ggbWFzdGVyLCB1c2luZyBmaWxlIGRlc2NyaXB0b3IgIzcgdG8gcmVhZCBkYXRhIGZyb20KKwlnaXQtcmVjZWl2ZS1wYWNrIGFuZCBmaWxlIGRlc2NyaXB0b3IgIzggdG8gd3JpdGUgZGF0YSB0bworCXNhbWUgc2VydmljZS4KKworYGdpdCBwdXNoIGZkOjo3LDgvYmFyIG1hc3RlcmA6OgorCVNhbWUgYXMgYWJvdmUuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXRyZW1vdGUtaGVscGVyc1s3XQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1oZWxwZXJzLnR4dG8gYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtaGVscGVycy50eHRvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMzUzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtaGVscGVycy50eHRvCkBAIC0wLDAgKzEsOSBAQAorZ2l0LXJlbW90ZS1oZWxwZXJzCis9PT09PT09PT09PT09PT09PT0KKworVGhpcyBkb2N1bWVudCBoYXMgYmVlbiBtb3ZlZCB0byBsaW5rZ2l0OmdpdHJlbW90ZS1oZWxwZXJzWzddLgorCitQbGVhc2UgbGV0IHRoZSBvd25lcnMgb2YgdGhlIHJlZmVycmluZyBzaXRlIGtub3cgc28gdGhhdCB0aGV5IGNhbiB1cGRhdGUgdGhlCitsaW5rIHlvdSBjbGlja2VkIHRvIGdldCBoZXJlLgorCitUaGFua3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjU5YWJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLnR4dApAQCAtMCwwICsxLDI1NiBAQAorZ2l0LXJlbW90ZSgxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVtb3RlIC0gTWFuYWdlIHNldCBvZiB0cmFja2VkIHJlcG9zaXRvcmllcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZW1vdGUnIFstdiB8IC0tdmVyYm9zZV0KKydnaXQgcmVtb3RlIGFkZCcgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tW25vLV10YWdzXSBbLS1taXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4KKydnaXQgcmVtb3RlIHJlbmFtZScgPG9sZD4gPG5ldz4KKydnaXQgcmVtb3RlIHJlbW92ZScgPG5hbWU+CisnZ2l0IHJlbW90ZSBzZXQtaGVhZCcgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNoPikKKydnaXQgcmVtb3RlIHNldC1icmFuY2hlcycgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4KKydnaXQgcmVtb3RlIGdldC11cmwnIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+CisnZ2l0IHJlbW90ZSBzZXQtdXJsJyBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XQorJ2dpdCByZW1vdGUgc2V0LXVybCAtLWFkZCcgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+CisnZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlJyBbLS1wdXNoXSA8bmFtZT4gPHVybD4KKydnaXQgcmVtb3RlJyBbLXYgfCAtLXZlcmJvc2VdICdzaG93JyBbLW5dIDxuYW1lPi4uLgorJ2dpdCByZW1vdGUgcHJ1bmUnIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+Li4uCisnZ2l0IHJlbW90ZScgWy12IHwgLS12ZXJib3NlXSAndXBkYXRlJyBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitNYW5hZ2UgdGhlIHNldCBvZiByZXBvc2l0b3JpZXMgKCJyZW1vdGVzIikgd2hvc2UgYnJhbmNoZXMgeW91IHRyYWNrLgorCisKK09QVElPTlMKKy0tLS0tLS0KKworLXY6OgorLS12ZXJib3NlOjoKKwlCZSBhIGxpdHRsZSBtb3JlIHZlcmJvc2UgYW5kIHNob3cgcmVtb3RlIHVybCBhZnRlciBuYW1lLgorCU5PVEU6IFRoaXMgbXVzdCBiZSBwbGFjZWQgYmV0d2VlbiBgcmVtb3RlYCBhbmQgYHN1YmNvbW1hbmRgLgorCisKK0NPTU1BTkRTCistLS0tLS0tLQorCitXaXRoIG5vIGFyZ3VtZW50cywgc2hvd3MgYSBsaXN0IG9mIGV4aXN0aW5nIHJlbW90ZXMuICBTZXZlcmFsCitzdWJjb21tYW5kcyBhcmUgYXZhaWxhYmxlIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiB0aGUgcmVtb3Rlcy4KKworJ2FkZCc6OgorCitBZGRzIGEgcmVtb3RlIG5hbWVkIDxuYW1lPiBmb3IgdGhlIHJlcG9zaXRvcnkgYXQKKzx1cmw+LiAgVGhlIGNvbW1hbmQgYGdpdCBmZXRjaCA8bmFtZT5gIGNhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIGFuZAordXBkYXRlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyA8bmFtZT4vPGJyYW5jaD4uCisrCitXaXRoIGAtZmAgb3B0aW9uLCBgZ2l0IGZldGNoIDxuYW1lPmAgaXMgcnVuIGltbWVkaWF0ZWx5IGFmdGVyCit0aGUgcmVtb3RlIGluZm9ybWF0aW9uIGlzIHNldCB1cC4KKysKK1dpdGggYC0tdGFnc2Agb3B0aW9uLCBgZ2l0IGZldGNoIDxuYW1lPmAgaW1wb3J0cyBldmVyeSB0YWcgZnJvbSB0aGUKK3JlbW90ZSByZXBvc2l0b3J5LgorKworV2l0aCBgLS1uby10YWdzYCBvcHRpb24sIGBnaXQgZmV0Y2ggPG5hbWU+YCBkb2VzIG5vdCBpbXBvcnQgdGFncyBmcm9tCit0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCisrCitCeSBkZWZhdWx0LCBvbmx5IHRhZ3Mgb24gZmV0Y2hlZCBicmFuY2hlcyBhcmUgaW1wb3J0ZWQKKyhzZWUgbGlua2dpdDpnaXQtZmV0Y2hbMV0pLgorKworV2l0aCBgLXQgPGJyYW5jaD5gIG9wdGlvbiwgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBnbG9iCityZWZzcGVjIGZvciB0aGUgcmVtb3RlIHRvIHRyYWNrIGFsbCBicmFuY2hlcyB1bmRlcgordGhlIGByZWZzL3JlbW90ZXMvPG5hbWU+L2AgbmFtZXNwYWNlLCBhIHJlZnNwZWMgdG8gdHJhY2sgb25seSBgPGJyYW5jaD5gCitpcyBjcmVhdGVkLiAgWW91IGNhbiBnaXZlIG1vcmUgdGhhbiBvbmUgYC10IDxicmFuY2g+YCB0byB0cmFjaworbXVsdGlwbGUgYnJhbmNoZXMgd2l0aG91dCBncmFiYmluZyBhbGwgYnJhbmNoZXMuCisrCitXaXRoIGAtbSA8bWFzdGVyPmAgb3B0aW9uLCBhIHN5bWJvbGljLXJlZiBgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEYCBpcyBzZXQKK3VwIHRvIHBvaW50IGF0IHJlbW90ZSdzIGA8bWFzdGVyPmAgYnJhbmNoLiBTZWUgYWxzbyB0aGUgc2V0LWhlYWQgY29tbWFuZC4KKysKK1doZW4gYSBmZXRjaCBtaXJyb3IgaXMgY3JlYXRlZCB3aXRoIGAtLW1pcnJvcj1mZXRjaGAsIHRoZSByZWZzIHdpbGwgbm90CitiZSBzdG9yZWQgaW4gdGhlICdyZWZzL3JlbW90ZXMvJyBuYW1lc3BhY2UsIGJ1dCByYXRoZXIgZXZlcnl0aGluZyBpbgorJ3JlZnMvJyBvbiB0aGUgcmVtb3RlIHdpbGwgYmUgZGlyZWN0bHkgbWlycm9yZWQgaW50byAncmVmcy8nIGluIHRoZQorbG9jYWwgcmVwb3NpdG9yeS4gVGhpcyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpbiBiYXJlIHJlcG9zaXRvcmllcywKK2JlY2F1c2UgYSBmZXRjaCB3b3VsZCBvdmVyd3JpdGUgYW55IGxvY2FsIGNvbW1pdHMuCisrCitXaGVuIGEgcHVzaCBtaXJyb3IgaXMgY3JlYXRlZCB3aXRoIGAtLW1pcnJvcj1wdXNoYCwgdGhlbiBgZ2l0IHB1c2hgCit3aWxsIGFsd2F5cyBiZWhhdmUgYXMgaWYgYC0tbWlycm9yYCB3YXMgcGFzc2VkLgorCisncmVuYW1lJzo6CisKK1JlbmFtZSB0aGUgcmVtb3RlIG5hbWVkIDxvbGQ+IHRvIDxuZXc+LiBBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGFuZAorY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIHJlbW90ZSBhcmUgdXBkYXRlZC4KKysKK0luIGNhc2UgPG9sZD4gYW5kIDxuZXc+IGFyZSB0aGUgc2FtZSwgYW5kIDxvbGQ+IGlzIGEgZmlsZSB1bmRlcgorYCRHSVRfRElSL3JlbW90ZXNgIG9yIGAkR0lUX0RJUi9icmFuY2hlc2AsIHRoZSByZW1vdGUgaXMgY29udmVydGVkIHRvCit0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdC4KKworJ3JlbW92ZSc6OgorJ3JtJzo6CisKK1JlbW92ZSB0aGUgcmVtb3RlIG5hbWVkIDxuYW1lPi4gQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBhbmQKK2NvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSByZW1vdGUgYXJlIHJlbW92ZWQuCisKKydzZXQtaGVhZCc6OgorCitTZXRzIG9yIGRlbGV0ZXMgdGhlIGRlZmF1bHQgYnJhbmNoIChpLmUuIHRoZSB0YXJnZXQgb2YgdGhlCitzeW1ib2xpYy1yZWYgYHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRGApIGZvcgordGhlIG5hbWVkIHJlbW90ZS4gSGF2aW5nIGEgZGVmYXVsdCBicmFuY2ggZm9yIGEgcmVtb3RlIGlzIG5vdCByZXF1aXJlZCwKK2J1dCBhbGxvd3MgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSB0byBiZSBzcGVjaWZpZWQgaW4gbGlldSBvZiBhIHNwZWNpZmljCiticmFuY2guIEZvciBleGFtcGxlLCBpZiB0aGUgZGVmYXVsdCBicmFuY2ggZm9yIGBvcmlnaW5gIGlzIHNldCB0bworYG1hc3RlcmAsIHRoZW4gYG9yaWdpbmAgbWF5IGJlIHNwZWNpZmllZCB3aGVyZXZlciB5b3Ugd291bGQgbm9ybWFsbHkKK3NwZWNpZnkgYG9yaWdpbi9tYXN0ZXJgLgorKworV2l0aCBgLWRgIG9yIGAtLWRlbGV0ZWAsIHRoZSBzeW1ib2xpYyByZWYgYHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRGAgaXMgZGVsZXRlZC4KKysKK1dpdGggYC1hYCBvciBgLS1hdXRvYCwgdGhlIHJlbW90ZSBpcyBxdWVyaWVkIHRvIGRldGVybWluZSBpdHMgYEhFQURgLCB0aGVuIHRoZQorc3ltYm9saWMtcmVmIGByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQURgIGlzIHNldCB0byB0aGUgc2FtZSBicmFuY2guIGUuZy4sIGlmIHRoZSByZW1vdGUKK2BIRUFEYCBpcyBwb2ludGVkIGF0IGBuZXh0YCwgImBnaXQgcmVtb3RlIHNldC1oZWFkIG9yaWdpbiAtYWAiIHdpbGwgc2V0Cit0aGUgc3ltYm9saWMtcmVmIGByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQURgIHRvIGByZWZzL3JlbW90ZXMvb3JpZ2luL25leHRgLiBUaGlzIHdpbGwKK29ubHkgd29yayBpZiBgcmVmcy9yZW1vdGVzL29yaWdpbi9uZXh0YCBhbHJlYWR5IGV4aXN0czsgaWYgbm90IGl0IG11c3QgYmUKK2ZldGNoZWQgZmlyc3QuCisrCitVc2UgYDxicmFuY2g+YCB0byBzZXQgdGhlIHN5bWJvbGljLXJlZiBgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEYCBleHBsaWNpdGx5LiBlLmcuLCAiZ2l0CityZW1vdGUgc2V0LWhlYWQgb3JpZ2luIG1hc3RlciIgd2lsbCBzZXQgdGhlIHN5bWJvbGljLXJlZiBgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEYCB0bworYHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyYC4gVGhpcyB3aWxsIG9ubHkgd29yayBpZgorYHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyYCBhbHJlYWR5IGV4aXN0czsgaWYgbm90IGl0IG11c3QgYmUgZmV0Y2hlZCBmaXJzdC4KKysKKworJ3NldC1icmFuY2hlcyc6OgorCitDaGFuZ2VzIHRoZSBsaXN0IG9mIGJyYW5jaGVzIHRyYWNrZWQgYnkgdGhlIG5hbWVkIHJlbW90ZS4KK1RoaXMgY2FuIGJlIHVzZWQgdG8gdHJhY2sgYSBzdWJzZXQgb2YgdGhlIGF2YWlsYWJsZSByZW1vdGUgYnJhbmNoZXMKK2FmdGVyIHRoZSBpbml0aWFsIHNldHVwIGZvciBhIHJlbW90ZS4KKysKK1RoZSBuYW1lZCBicmFuY2hlcyB3aWxsIGJlIGludGVycHJldGVkIGFzIGlmIHNwZWNpZmllZCB3aXRoIHRoZQorYC10YCBvcHRpb24gb24gdGhlICdnaXQgcmVtb3RlIGFkZCcgY29tbWFuZCBsaW5lLgorKworV2l0aCBgLS1hZGRgLCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGUgbGlzdCBvZiBjdXJyZW50bHkgdHJhY2tlZAorYnJhbmNoZXMsIGFkZHMgdG8gdGhhdCBsaXN0LgorCisnZ2V0LXVybCc6OgorCitSZXRyaWV2ZXMgdGhlIFVSTHMgZm9yIGEgcmVtb3RlLiBDb25maWd1cmF0aW9ucyBmb3IgYGluc3RlYWRPZmAgYW5kCitgcHVzaEluc3RlYWRPZmAgYXJlIGV4cGFuZGVkIGhlcmUuIEJ5IGRlZmF1bHQsIG9ubHkgdGhlIGZpcnN0IFVSTCBpcyBsaXN0ZWQuCisrCitXaXRoIGAtLXB1c2hgLCBwdXNoIFVSTHMgYXJlIHF1ZXJpZWQgcmF0aGVyIHRoYW4gZmV0Y2ggVVJMcy4KKysKK1dpdGggYC0tYWxsYCwgYWxsIFVSTHMgZm9yIHRoZSByZW1vdGUgd2lsbCBiZSBsaXN0ZWQuCisKKydzZXQtdXJsJzo6CisKK0NoYW5nZXMgVVJMcyBmb3IgdGhlIHJlbW90ZS4gU2V0cyBmaXJzdCBVUkwgZm9yIHJlbW90ZSA8bmFtZT4gdGhhdCBtYXRjaGVzCityZWdleCA8b2xkdXJsPiAoZmlyc3QgVVJMIGlmIG5vIDxvbGR1cmw+IGlzIGdpdmVuKSB0byA8bmV3dXJsPi4gSWYKKzxvbGR1cmw+IGRvZXNuJ3QgbWF0Y2ggYW55IFVSTCwgYW4gZXJyb3Igb2NjdXJzIGFuZCBub3RoaW5nIGlzIGNoYW5nZWQuCisrCitXaXRoIGAtLXB1c2hgLCBwdXNoIFVSTHMgYXJlIG1hbmlwdWxhdGVkIGluc3RlYWQgb2YgZmV0Y2ggVVJMcy4KKysKK1dpdGggYC0tYWRkYCwgaW5zdGVhZCBvZiBjaGFuZ2luZyBleGlzdGluZyBVUkxzLCBuZXcgVVJMIGlzIGFkZGVkLgorKworV2l0aCBgLS1kZWxldGVgLCBpbnN0ZWFkIG9mIGNoYW5naW5nIGV4aXN0aW5nIFVSTHMsIGFsbCBVUkxzIG1hdGNoaW5nCityZWdleCA8dXJsPiBhcmUgZGVsZXRlZCBmb3IgcmVtb3RlIDxuYW1lPi4gIFRyeWluZyB0byBkZWxldGUgYWxsCitub24tcHVzaCBVUkxzIGlzIGFuIGVycm9yLgorKworTm90ZSB0aGF0IHRoZSBwdXNoIFVSTCBhbmQgdGhlIGZldGNoIFVSTCwgZXZlbiB0aG91Z2ggdGhleSBjYW4KK2JlIHNldCBkaWZmZXJlbnRseSwgbXVzdCBzdGlsbCByZWZlciB0byB0aGUgc2FtZSBwbGFjZS4gIFdoYXQgeW91CitwdXNoZWQgdG8gdGhlIHB1c2ggVVJMIHNob3VsZCBiZSB3aGF0IHlvdSB3b3VsZCBzZWUgaWYgeW91CitpbW1lZGlhdGVseSBmZXRjaGVkIGZyb20gdGhlIGZldGNoIFVSTC4gIElmIHlvdSBhcmUgdHJ5aW5nIHRvCitmZXRjaCBmcm9tIG9uZSBwbGFjZSAoZS5nLiB5b3VyIHVwc3RyZWFtKSBhbmQgcHVzaCB0byBhbm90aGVyIChlLmcuCit5b3VyIHB1Ymxpc2hpbmcgcmVwb3NpdG9yeSksIHVzZSB0d28gc2VwYXJhdGUgcmVtb3Rlcy4KKworCisnc2hvdyc6OgorCitHaXZlcyBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZW1vdGUgPG5hbWU+LgorKworV2l0aCBgLW5gIG9wdGlvbiwgdGhlIHJlbW90ZSBoZWFkcyBhcmUgbm90IHF1ZXJpZWQgZmlyc3Qgd2l0aAorYGdpdCBscy1yZW1vdGUgPG5hbWU+YDsgY2FjaGVkIGluZm9ybWF0aW9uIGlzIHVzZWQgaW5zdGVhZC4KKworJ3BydW5lJzo6CisKK0RlbGV0ZXMgc3RhbGUgcmVmZXJlbmNlcyBhc3NvY2lhdGVkIHdpdGggPG5hbWU+LiBCeSBkZWZhdWx0LCBzdGFsZQorcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIHVuZGVyIDxuYW1lPiBhcmUgZGVsZXRlZCwgYnV0IGRlcGVuZGluZyBvbgorZ2xvYmFsIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSByZW1vdGUgd2UgbWlnaHQgZXZlbgorcHJ1bmUgbG9jYWwgdGFncyB0aGF0IGhhdmVuJ3QgYmVlbiBwdXNoZWQgdGhlcmUuIEVxdWl2YWxlbnQgdG8gYGdpdAorZmV0Y2ggLS1wcnVuZSA8bmFtZT5gLCBleGNlcHQgdGhhdCBubyBuZXcgcmVmZXJlbmNlcyB3aWxsIGJlIGZldGNoZWQuCisrCitTZWUgdGhlIFBSVU5JTkcgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBmb3Igd2hhdCBpdCdsbCBwcnVuZQorZGVwZW5kaW5nIG9uIHZhcmlvdXMgY29uZmlndXJhdGlvbi4KKysKK1dpdGggYC0tZHJ5LXJ1bmAgb3B0aW9uLCByZXBvcnQgd2hhdCBicmFuY2hlcyB3aWxsIGJlIHBydW5lZCwgYnV0IGRvIG5vdAorYWN0dWFsbHkgcHJ1bmUgdGhlbS4KKworJ3VwZGF0ZSc6OgorCitGZXRjaCB1cGRhdGVzIGZvciByZW1vdGVzIG9yIHJlbW90ZSBncm91cHMgaW4gdGhlIHJlcG9zaXRvcnkgYXMgZGVmaW5lZCBieQorcmVtb3Rlcy48Z3JvdXA+LiAgSWYgbmVpdGhlciBncm91cCBub3IgcmVtb3RlIGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLAordGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHJlbW90ZXMuZGVmYXVsdCB3aWxsIGJlIHVzZWQ7IGlmCityZW1vdGVzLmRlZmF1bHQgaXMgbm90IGRlZmluZWQsIGFsbCByZW1vdGVzIHdoaWNoIGRvIG5vdCBoYXZlIHRoZQorY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgcmVtb3RlLjxuYW1lPi5za2lwRGVmYXVsdFVwZGF0ZSBzZXQgdG8gdHJ1ZSB3aWxsCitiZSB1cGRhdGVkLiAgKFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorKworV2l0aCBgLS1wcnVuZWAgb3B0aW9uLCBydW4gcHJ1bmluZyBhZ2FpbnN0IGFsbCB0aGUgcmVtb3RlcyB0aGF0IGFyZSB1cGRhdGVkLgorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworVGhlIHJlbW90ZSBjb25maWd1cmF0aW9uIGlzIGFjaGlldmVkIHVzaW5nIHRoZSBgcmVtb3RlLm9yaWdpbi51cmxgIGFuZAorYHJlbW90ZS5vcmlnaW4uZmV0Y2hgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiAgKFNlZQorbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKyogQWRkIGEgbmV3IHJlbW90ZSwgZmV0Y2gsIGFuZCBjaGVjayBvdXQgYSBicmFuY2ggZnJvbSBpdAorKworLS0tLS0tLS0tLS0tCiskIGdpdCByZW1vdGUKK29yaWdpbgorJCBnaXQgYnJhbmNoIC1yCisgIG9yaWdpbi9IRUFEIC0+IG9yaWdpbi9tYXN0ZXIKKyAgb3JpZ2luL21hc3RlcgorJCBnaXQgcmVtb3RlIGFkZCBzdGFnaW5nIGdpdDovL2dpdC5rZXJuZWwub3JnLy4uLi9ncmVna2gvc3RhZ2luZy5naXQKKyQgZ2l0IHJlbW90ZQorb3JpZ2luCitzdGFnaW5nCiskIGdpdCBmZXRjaCBzdGFnaW5nCisuLi4KK0Zyb20gZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2dyZWdraC9zdGFnaW5nCisgKiBbbmV3IGJyYW5jaF0gICAgICBtYXN0ZXIgICAgIC0+IHN0YWdpbmcvbWFzdGVyCisgKiBbbmV3IGJyYW5jaF0gICAgICBzdGFnaW5nLWxpbnVzIC0+IHN0YWdpbmcvc3RhZ2luZy1saW51cworICogW25ldyBicmFuY2hdICAgICAgc3RhZ2luZy1uZXh0IC0+IHN0YWdpbmcvc3RhZ2luZy1uZXh0CiskIGdpdCBicmFuY2ggLXIKKyAgb3JpZ2luL0hFQUQgLT4gb3JpZ2luL21hc3RlcgorICBvcmlnaW4vbWFzdGVyCisgIHN0YWdpbmcvbWFzdGVyCisgIHN0YWdpbmcvc3RhZ2luZy1saW51cworICBzdGFnaW5nL3N0YWdpbmctbmV4dAorJCBnaXQgc3dpdGNoIC1jIHN0YWdpbmcgc3RhZ2luZy9tYXN0ZXIKKy4uLgorLS0tLS0tLS0tLS0tCisKKyogSW1pdGF0ZSAnZ2l0IGNsb25lJyBidXQgdHJhY2sgb25seSBzZWxlY3RlZCBicmFuY2hlcworKworLS0tLS0tLS0tLS0tCiskIG1rZGlyIHByb2plY3QuZ2l0CiskIGNkIHByb2plY3QuZ2l0CiskIGdpdCBpbml0CiskIGdpdCByZW1vdGUgYWRkIC1mIC10IG1hc3RlciAtbSBtYXN0ZXIgb3JpZ2luIGdpdDovL2V4YW1wbGUuY29tL2dpdC5naXQvCiskIGdpdCBtZXJnZSBvcmlnaW4KKy0tLS0tLS0tLS0tLQorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtZmV0Y2hbMV0KK2xpbmtnaXQ6Z2l0LWJyYW5jaFsxXQorbGlua2dpdDpnaXQtY29uZmlnWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGFjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmMTQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGFjay50eHQKQEAgLTAsMCArMSwxODggQEAKK2dpdC1yZXBhY2soMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlcGFjayAtIFBhY2sgdW5wYWNrZWQgb2JqZWN0cyBpbiBhIHJlcG9zaXRvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVwYWNrJyBbLWFdIFstQV0gWy1kXSBbLWZdIFstRl0gWy1sXSBbLW5dIFstcV0gWy1iXSBbLS13aW5kb3c9PG4+XSBbLS1kZXB0aD08bj5dIFstLXRocmVhZHM9PG4+XSBbLS1rZWVwLXBhY2s9PHBhY2stbmFtZT5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBjb21iaW5lIGFsbCBvYmplY3RzIHRoYXQgZG8gbm90IGN1cnJlbnRseQorcmVzaWRlIGluIGEgInBhY2siLCBpbnRvIGEgcGFjay4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gcmUtb3JnYW5pemUKK2V4aXN0aW5nIHBhY2tzIGludG8gYSBzaW5nbGUsIG1vcmUgZWZmaWNpZW50IHBhY2suCisKK0EgcGFjayBpcyBhIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cywgaW5kaXZpZHVhbGx5IGNvbXByZXNzZWQsIHdpdGgKK2RlbHRhIGNvbXByZXNzaW9uIGFwcGxpZWQsIHN0b3JlZCBpbiBhIHNpbmdsZSBmaWxlLCB3aXRoIGFuCithc3NvY2lhdGVkIGluZGV4IGZpbGUuCisKK1BhY2tzIGFyZSB1c2VkIHRvIHJlZHVjZSB0aGUgbG9hZCBvbiBtaXJyb3Igc3lzdGVtcywgYmFja3VwCitlbmdpbmVzLCBkaXNrIHN0b3JhZ2UsIGV0Yy4KKworT1BUSU9OUworLS0tLS0tLQorCistYTo6CisJSW5zdGVhZCBvZiBpbmNyZW1lbnRhbGx5IHBhY2tpbmcgdGhlIHVucGFja2VkIG9iamVjdHMsCisJcGFjayBldmVyeXRoaW5nIHJlZmVyZW5jZWQgaW50byBhIHNpbmdsZSBwYWNrLgorCUVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gcGFja2luZyBhIHJlcG9zaXRvcnkgdGhhdCBpcyB1c2VkCisJZm9yIHByaXZhdGUgZGV2ZWxvcG1lbnQuIFVzZQorCXdpdGggYC1kYC4gIFRoaXMgd2lsbCBjbGVhbiB1cCB0aGUgb2JqZWN0cyB0aGF0IGBnaXQgcHJ1bmVgCisJbGVhdmVzIGJlaGluZCwgYnV0IGBnaXQgZnNjayAtLWZ1bGwgLS1kYW5nbGluZ2Agc2hvd3MgYXMKKwlkYW5nbGluZy4KKysKK05vdGUgdGhhdCB1c2VycyBmZXRjaGluZyBvdmVyIGR1bWIgcHJvdG9jb2xzIHdpbGwgaGF2ZSB0byBmZXRjaCB0aGUKK3dob2xlIG5ldyBwYWNrIGluIG9yZGVyIHRvIGdldCBhbnkgY29udGFpbmVkIG9iamVjdCwgbm8gbWF0dGVyIGhvdyBtYW55CitvdGhlciBvYmplY3RzIGluIHRoYXQgcGFjayB0aGV5IGFscmVhZHkgaGF2ZSBsb2NhbGx5LgorKworUHJvbWlzb3IgcGFja2ZpbGVzIGFyZSByZXBhY2tlZCBzZXBhcmF0ZWx5OiBpZiB0aGVyZSBhcmUgcGFja2ZpbGVzIHRoYXQKK2hhdmUgYW4gYXNzb2NpYXRlZCAiLnByb21pc29yIiBmaWxlLCB0aGVzZSBwYWNrZmlsZXMgd2lsbCBiZSByZXBhY2tlZAoraW50byBhbm90aGVyIHNlcGFyYXRlIHBhY2ssIGFuZCBhbiBlbXB0eSAiLnByb21pc29yIiBmaWxlIGNvcnJlc3BvbmRpbmcKK3RvIHRoZSBuZXcgc2VwYXJhdGUgcGFjayB3aWxsIGJlIHdyaXR0ZW4uCisKKy1BOjoKKwlTYW1lIGFzIGAtYWAsIHVubGVzcyBgLWRgIGlzIHVzZWQuICBUaGVuIGFueSB1bnJlYWNoYWJsZQorCW9iamVjdHMgaW4gYSBwcmV2aW91cyBwYWNrIGJlY29tZSBsb29zZSwgdW5wYWNrZWQgb2JqZWN0cywKKwlpbnN0ZWFkIG9mIGJlaW5nIGxlZnQgaW4gdGhlIG9sZCBwYWNrLiAgVW5yZWFjaGFibGUgb2JqZWN0cworCWFyZSBuZXZlciBpbnRlbnRpb25hbGx5IGFkZGVkIHRvIGEgcGFjaywgZXZlbiB3aGVuIHJlcGFja2luZy4KKwlUaGlzIG9wdGlvbiBwcmV2ZW50cyB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gYmVpbmcgaW1tZWRpYXRlbHkKKwlkZWxldGVkIGJ5IHdheSBvZiBiZWluZyBsZWZ0IGluIHRoZSBvbGQgcGFjayBhbmQgdGhlbgorCXJlbW92ZWQuICBJbnN0ZWFkLCB0aGUgbG9vc2UgdW5yZWFjaGFibGUgb2JqZWN0cworCXdpbGwgYmUgcHJ1bmVkIGFjY29yZGluZyB0byBub3JtYWwgZXhwaXJ5IHJ1bGVzCisJd2l0aCB0aGUgbmV4dCAnZ2l0IGdjJyBpbnZvY2F0aW9uLiBTZWUgbGlua2dpdDpnaXQtZ2NbMV0uCisKKy1kOjoKKwlBZnRlciBwYWNraW5nLCBpZiB0aGUgbmV3bHkgY3JlYXRlZCBwYWNrcyBtYWtlIHNvbWUKKwlleGlzdGluZyBwYWNrcyByZWR1bmRhbnQsIHJlbW92ZSB0aGUgcmVkdW5kYW50IHBhY2tzLgorCUFsc28gcnVuICAnZ2l0IHBydW5lLXBhY2tlZCcgdG8gcmVtb3ZlIHJlZHVuZGFudAorCWxvb3NlIG9iamVjdCBmaWxlcy4KKworLWw6OgorCVBhc3MgdGhlIGAtLWxvY2FsYCBvcHRpb24gdG8gJ2dpdCBwYWNrLW9iamVjdHMnLiBTZWUKKwlsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0uCisKKy1mOjoKKwlQYXNzIHRoZSBgLS1uby1yZXVzZS1kZWx0YWAgb3B0aW9uIHRvIGBnaXQtcGFjay1vYmplY3RzYCwgc2VlCisJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdLgorCistRjo6CisJUGFzcyB0aGUgYC0tbm8tcmV1c2Utb2JqZWN0YCBvcHRpb24gdG8gYGdpdC1wYWNrLW9iamVjdHNgLCBzZWUKKwlsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0uCisKKy1xOjoKKwlQYXNzIHRoZSBgLXFgIG9wdGlvbiB0byAnZ2l0IHBhY2stb2JqZWN0cycuIFNlZQorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4KKworLW46OgorCURvIG5vdCB1cGRhdGUgdGhlIHNlcnZlciBpbmZvcm1hdGlvbiB3aXRoCisJJ2dpdCB1cGRhdGUtc2VydmVyLWluZm8nLiAgVGhpcyBvcHRpb24gc2tpcHMKKwl1cGRhdGluZyBsb2NhbCBjYXRhbG9nIGZpbGVzIG5lZWRlZCB0byBwdWJsaXNoCisJdGhpcyByZXBvc2l0b3J5IChvciBhIGRpcmVjdCBjb3B5IG9mIGl0KQorCW92ZXIgSFRUUCBvciBGVFAuICBTZWUgbGlua2dpdDpnaXQtdXBkYXRlLXNlcnZlci1pbmZvWzFdLgorCistLXdpbmRvdz08bj46OgorLS1kZXB0aD08bj46OgorCVRoZXNlIHR3byBvcHRpb25zIGFmZmVjdCBob3cgdGhlIG9iamVjdHMgY29udGFpbmVkIGluIHRoZSBwYWNrIGFyZQorCXN0b3JlZCB1c2luZyBkZWx0YSBjb21wcmVzc2lvbi4gVGhlIG9iamVjdHMgYXJlIGZpcnN0IGludGVybmFsbHkKKwlzb3J0ZWQgYnkgdHlwZSwgc2l6ZSBhbmQgb3B0aW9uYWxseSBuYW1lcyBhbmQgY29tcGFyZWQgYWdhaW5zdCB0aGUKKwlvdGhlciBvYmplY3RzIHdpdGhpbiBgLS13aW5kb3dgIHRvIHNlZSBpZiB1c2luZyBkZWx0YSBjb21wcmVzc2lvbiBzYXZlcworCXNwYWNlLiBgLS1kZXB0aGAgbGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoOyBtYWtpbmcgaXQgdG9vIGRlZXAKKwlhZmZlY3RzIHRoZSBwZXJmb3JtYW5jZSBvbiB0aGUgdW5wYWNrZXIgc2lkZSwgYmVjYXVzZSBkZWx0YSBkYXRhIG5lZWRzCisJdG8gYmUgYXBwbGllZCB0aGF0IG1hbnkgdGltZXMgdG8gZ2V0IHRvIHRoZSBuZWNlc3Nhcnkgb2JqZWN0LgorKworVGhlIGRlZmF1bHQgdmFsdWUgZm9yIC0td2luZG93IGlzIDEwIGFuZCAtLWRlcHRoIGlzIDUwLiBUaGUgbWF4aW11bQorZGVwdGggaXMgNDA5NS4KKworLS10aHJlYWRzPTxuPjo6CisJVGhpcyBvcHRpb24gaXMgcGFzc2VkIHRocm91Z2ggdG8gYGdpdCBwYWNrLW9iamVjdHNgLgorCistLXdpbmRvdy1tZW1vcnk9PG4+OjoKKwlUaGlzIG9wdGlvbiBwcm92aWRlcyBhbiBhZGRpdGlvbmFsIGxpbWl0IG9uIHRvcCBvZiBgLS13aW5kb3dgOworCXRoZSB3aW5kb3cgc2l6ZSB3aWxsIGR5bmFtaWNhbGx5IHNjYWxlIGRvd24gc28gYXMgdG8gbm90IHRha2UKKwl1cCBtb3JlIHRoYW4gJzxuPicgYnl0ZXMgaW4gbWVtb3J5LiAgVGhpcyBpcyB1c2VmdWwgaW4KKwlyZXBvc2l0b3JpZXMgd2l0aCBhIG1peCBvZiBsYXJnZSBhbmQgc21hbGwgb2JqZWN0cyB0byBub3QgcnVuCisJb3V0IG9mIG1lbW9yeSB3aXRoIGEgbGFyZ2Ugd2luZG93LCBidXQgc3RpbGwgYmUgYWJsZSB0byB0YWtlCisJYWR2YW50YWdlIG9mIHRoZSBsYXJnZSB3aW5kb3cgZm9yIHRoZSBzbWFsbGVyIG9iamVjdHMuICBUaGUKKwlzaXplIGNhbiBiZSBzdWZmaXhlZCB3aXRoICJrIiwgIm0iLCBvciAiZyIuCisJYC0td2luZG93LW1lbW9yeT0wYCBtYWtlcyBtZW1vcnkgdXNhZ2UgdW5saW1pdGVkLiAgVGhlIGRlZmF1bHQKKwlpcyB0YWtlbiBmcm9tIHRoZSBgcGFjay53aW5kb3dNZW1vcnlgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisJTm90ZSB0aGF0IHRoZSBhY3R1YWwgbWVtb3J5IHVzYWdlIHdpbGwgYmUgdGhlIGxpbWl0IG11bHRpcGxpZWQKKwlieSB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdXNlZCBieSBsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0uCisKKy0tbWF4LXBhY2stc2l6ZT08bj46OgorCU1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUuIFRoZSBzaXplIGNhbiBiZSBzdWZmaXhlZCB3aXRoCisJImsiLCAibSIsIG9yICJnIi4gVGhlIG1pbmltdW0gc2l6ZSBhbGxvd2VkIGlzIGxpbWl0ZWQgdG8gMSBNaUIuCisJSWYgc3BlY2lmaWVkLCBtdWx0aXBsZSBwYWNrZmlsZXMgbWF5IGJlIGNyZWF0ZWQsIHdoaWNoIGFsc28KKwlwcmV2ZW50cyB0aGUgY3JlYXRpb24gb2YgYSBiaXRtYXAgaW5kZXguCisJVGhlIGRlZmF1bHQgaXMgdW5saW1pdGVkLCB1bmxlc3MgdGhlIGNvbmZpZyB2YXJpYWJsZQorCWBwYWNrLnBhY2tTaXplTGltaXRgIGlzIHNldC4KKworLWI6OgorLS13cml0ZS1iaXRtYXAtaW5kZXg6OgorCVdyaXRlIGEgcmVhY2hhYmlsaXR5IGJpdG1hcCBpbmRleCBhcyBwYXJ0IG9mIHRoZSByZXBhY2suIFRoaXMKKwlvbmx5IG1ha2VzIHNlbnNlIHdoZW4gdXNlZCB3aXRoIGAtYWAgb3IgYC1BYCwgYXMgdGhlIGJpdG1hcHMKKwltdXN0IGJlIGFibGUgdG8gcmVmZXIgdG8gYWxsIHJlYWNoYWJsZSBvYmplY3RzLiBUaGlzIG9wdGlvbgorCW92ZXJyaWRlcyB0aGUgc2V0dGluZyBvZiBgcmVwYWNrLndyaXRlQml0bWFwc2AuICBUaGlzIG9wdGlvbgorCWhhcyBubyBlZmZlY3QgaWYgbXVsdGlwbGUgcGFja2ZpbGVzIGFyZSBjcmVhdGVkLgorCistLXBhY2sta2VwdC1vYmplY3RzOjoKKwlJbmNsdWRlIG9iamVjdHMgaW4gYC5rZWVwYCBmaWxlcyB3aGVuIHJlcGFja2luZy4gIE5vdGUgdGhhdCB3ZQorCXN0aWxsIGRvIG5vdCBkZWxldGUgYC5rZWVwYCBwYWNrcyBhZnRlciBgcGFjay1vYmplY3RzYCBmaW5pc2hlcy4KKwlUaGlzIG1lYW5zIHRoYXQgd2UgbWF5IGR1cGxpY2F0ZSBvYmplY3RzLCBidXQgdGhpcyBtYWtlcyB0aGUKKwlvcHRpb24gc2FmZSB0byB1c2Ugd2hlbiB0aGVyZSBhcmUgY29uY3VycmVudCBwdXNoZXMgb3IgZmV0Y2hlcy4KKwlUaGlzIG9wdGlvbiBpcyBnZW5lcmFsbHkgb25seSB1c2VmdWwgaWYgeW91IGFyZSB3cml0aW5nIGJpdG1hcHMKKwl3aXRoIGAtYmAgb3IgYHJlcGFjay53cml0ZUJpdG1hcHNgLCBhcyBpdCBlbnN1cmVzIHRoYXQgdGhlCisJYml0bWFwcGVkIHBhY2tmaWxlIGhhcyB0aGUgbmVjZXNzYXJ5IG9iamVjdHMuCisKKy0ta2VlcC1wYWNrPTxwYWNrLW5hbWU+OjoKKwlFeGNsdWRlIHRoZSBnaXZlbiBwYWNrIGZyb20gcmVwYWNraW5nLiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50CisJb2YgaGF2aW5nIGAua2VlcGAgZmlsZSBvbiB0aGUgcGFjay4gYDxwYWNrLW5hbWU+YCBpcyB0aGUKKwlwYWNrIGZpbGUgbmFtZSB3aXRob3V0IGxlYWRpbmcgZGlyZWN0b3J5IChlLmcuIGBwYWNrLTEyMy5wYWNrYCkuCisJVGhlIG9wdGlvbiBjb3VsZCBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgdG8ga2VlcCBtdWx0aXBsZQorCXBhY2tzLgorCistLXVucGFjay11bnJlYWNoYWJsZT08d2hlbj46OgorCVdoZW4gbG9vc2VuaW5nIHVucmVhY2hhYmxlIG9iamVjdHMsIGRvIG5vdCBib3RoZXIgbG9vc2VuaW5nIGFueQorCW9iamVjdHMgb2xkZXIgdGhhbiBgPHdoZW4+YC4gVGhpcyBjYW4gYmUgdXNlZCB0byBvcHRpbWl6ZSBvdXQKKwl0aGUgd3JpdGUgb2YgYW55IG9iamVjdHMgdGhhdCB3b3VsZCBiZSBpbW1lZGlhdGVseSBwcnVuZWQgYnkKKwlhIGZvbGxvdy11cCBgZ2l0IHBydW5lYC4KKworLWs6OgorLS1rZWVwLXVucmVhY2hhYmxlOjoKKwlXaGVuIHVzZWQgd2l0aCBgLWFkYCwgYW55IHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSBleGlzdGluZworCXBhY2tzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgcGFja2ZpbGUgaW5zdGVhZCBvZgorCWJlaW5nIHJlbW92ZWQuIEluIGFkZGl0aW9uLCBhbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0cyB3aWxsCisJYmUgcGFja2VkIChhbmQgdGhlaXIgbG9vc2UgY291bnRlcnBhcnRzIHJlbW92ZWQpLgorCistaTo6CistLWRlbHRhLWlzbGFuZHM6OgorCVBhc3MgdGhlIGAtLWRlbHRhLWlzbGFuZHNgIG9wdGlvbiB0byBgZ2l0LXBhY2stb2JqZWN0c2AsIHNlZQorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4KKworQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0LCB0aGUgY29tbWFuZCBwYXNzZXMgYC0tZGVsdGEtYmFzZS1vZmZzZXRgIG9wdGlvbiB0bworJ2dpdCBwYWNrLW9iamVjdHMnOyB0aGlzIHR5cGljYWxseSByZXN1bHRzIGluIHNsaWdodGx5IHNtYWxsZXIgcGFja3MsCitidXQgdGhlIGdlbmVyYXRlZCBwYWNrcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdmVyc2lvbnMgb2YgR2l0IG9sZGVyIHRoYW4KK3ZlcnNpb24gMS40LjQuIElmIHlvdSBuZWVkIHRvIHNoYXJlIHlvdXIgcmVwb3NpdG9yeSB3aXRoIHN1Y2ggYW5jaWVudCBHaXQKK3ZlcnNpb25zLCBlaXRoZXIgZGlyZWN0bHkgb3IgdmlhIHRoZSBkdW1iIGh0dHAgcHJvdG9jb2wsIHRoZW4geW91CituZWVkIHRvIHNldCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgcmVwYWNrLlVzZURlbHRhQmFzZU9mZnNldGAgdG8KKyJmYWxzZSIgYW5kIHJlcGFjay4gQWNjZXNzIGZyb20gb2xkIEdpdCB2ZXJzaW9ucyBvdmVyIHRoZSBuYXRpdmUgcHJvdG9jb2wKK2lzIHVuYWZmZWN0ZWQgYnkgdGhpcyBvcHRpb24gYXMgdGhlIGNvbnZlcnNpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBmbHkKK2FzIG5lZWRlZCBpbiB0aGF0IGNhc2UuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdCitsaW5rZ2l0OmdpdC1wcnVuZS1wYWNrZWRbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXBsYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGxhY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNzFkNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXBsYWNlLnR4dApAQCAtMCwwICsxLDE2MSBAQAorZ2l0LXJlcGxhY2UoMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZXBsYWNlIC0gQ3JlYXRlLCBsaXN0LCBkZWxldGUgcmVmcyB0byByZXBsYWNlIG9iamVjdHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJlcGxhY2UnIFstZl0gPG9iamVjdD4gPHJlcGxhY2VtZW50PgorJ2dpdCByZXBsYWNlJyBbLWZdIC0tZWRpdCA8b2JqZWN0PgorJ2dpdCByZXBsYWNlJyBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXQorJ2dpdCByZXBsYWNlJyBbLWZdIC0tY29udmVydC1ncmFmdC1maWxlCisnZ2l0IHJlcGxhY2UnIC1kIDxvYmplY3Q+Li4uCisnZ2l0IHJlcGxhY2UnIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0FkZHMgYSAncmVwbGFjZScgcmVmZXJlbmNlIGluIGByZWZzL3JlcGxhY2UvYCBuYW1lc3BhY2UuCisKK1RoZSBuYW1lIG9mIHRoZSAncmVwbGFjZScgcmVmZXJlbmNlIGlzIHRoZSBTSEEtMSBvZiB0aGUgb2JqZWN0IHRoYXQgaXMKK3JlcGxhY2VkLiBUaGUgY29udGVudCBvZiB0aGUgJ3JlcGxhY2UnIHJlZmVyZW5jZSBpcyB0aGUgU0hBLTEgb2YgdGhlCityZXBsYWNlbWVudCBvYmplY3QuCisKK1RoZSByZXBsYWNlZCBvYmplY3QgYW5kIHRoZSByZXBsYWNlbWVudCBvYmplY3QgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlLgorVGhpcyByZXN0cmljdGlvbiBjYW4gYmUgYnlwYXNzZWQgdXNpbmcgYC1mYC4KKworVW5sZXNzIGAtZmAgaXMgZ2l2ZW4sIHRoZSAncmVwbGFjZScgcmVmZXJlbmNlIG11c3Qgbm90IHlldCBleGlzdC4KKworVGhlcmUgaXMgbm8gb3RoZXIgcmVzdHJpY3Rpb24gb24gdGhlIHJlcGxhY2VkIGFuZCByZXBsYWNlbWVudCBvYmplY3RzLgorTWVyZ2UgY29tbWl0cyBjYW4gYmUgcmVwbGFjZWQgYnkgbm9uLW1lcmdlIGNvbW1pdHMgYW5kIHZpY2UgdmVyc2EuCisKK1JlcGxhY2VtZW50IHJlZmVyZW5jZXMgd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQgYnkgYWxsIEdpdCBjb21tYW5kcworZXhjZXB0IHRob3NlIGRvaW5nIHJlYWNoYWJpbGl0eSB0cmF2ZXJzYWwgKHBydW5lLCBwYWNrIHRyYW5zZmVyIGFuZAorZnNjaykuCisKK0l0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgdXNlIG9mIHJlcGxhY2VtZW50IHJlZmVyZW5jZXMgZm9yIGFueQorY29tbWFuZCB1c2luZyB0aGUgYC0tbm8tcmVwbGFjZS1vYmplY3RzYCBvcHRpb24ganVzdCBhZnRlciAnZ2l0Jy4KKworRm9yIGV4YW1wbGUgaWYgY29tbWl0ICdmb28nIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGNvbW1pdCAnYmFyJzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCAtLW5vLXJlcGxhY2Utb2JqZWN0cyBjYXQtZmlsZSBjb21taXQgZm9vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc2hvd3MgaW5mb3JtYXRpb24gYWJvdXQgY29tbWl0ICdmb28nLCB3aGlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSBjb21taXQgZm9vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc2hvd3MgaW5mb3JtYXRpb24gYWJvdXQgY29tbWl0ICdiYXInLgorCitUaGUgYEdJVF9OT19SRVBMQUNFX09CSkVDVFNgIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8KK2FjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgLS1uby1yZXBsYWNlLW9iamVjdHNgIG9wdGlvbi4KKworT1BUSU9OUworLS0tLS0tLQorLWY6OgorLS1mb3JjZTo6CisJSWYgYW4gZXhpc3RpbmcgcmVwbGFjZSByZWYgZm9yIHRoZSBzYW1lIG9iamVjdCBleGlzdHMsIGl0IHdpbGwKKwliZSBvdmVyd3JpdHRlbiAoaW5zdGVhZCBvZiBmYWlsaW5nKS4KKworLWQ6OgorLS1kZWxldGU6OgorCURlbGV0ZSBleGlzdGluZyByZXBsYWNlIHJlZnMgZm9yIHRoZSBnaXZlbiBvYmplY3RzLgorCistLWVkaXQgPG9iamVjdD46OgorCUVkaXQgYW4gb2JqZWN0J3MgY29udGVudCBpbnRlcmFjdGl2ZWx5LiBUaGUgZXhpc3RpbmcgY29udGVudAorCWZvciA8b2JqZWN0PiBpcyBwcmV0dHktcHJpbnRlZCBpbnRvIGEgdGVtcG9yYXJ5IGZpbGUsIGFuCisJZWRpdG9yIGlzIGxhdW5jaGVkIG9uIHRoZSBmaWxlLCBhbmQgdGhlIHJlc3VsdCBpcyBwYXJzZWQgdG8KKwljcmVhdGUgYSBuZXcgb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgPG9iamVjdD4uIEEKKwlyZXBsYWNlbWVudCByZWYgaXMgdGhlbiBjcmVhdGVkIHRvIHJlcGxhY2UgPG9iamVjdD4gd2l0aCB0aGUKKwluZXdseSBjcmVhdGVkIG9iamVjdC4gU2VlIGxpbmtnaXQ6Z2l0LXZhclsxXSBmb3IgZGV0YWlscyBhYm91dAorCWhvdyB0aGUgZWRpdG9yIHdpbGwgYmUgY2hvc2VuLgorCistLXJhdzo6CisJV2hlbiBlZGl0aW5nLCBwcm92aWRlIHRoZSByYXcgb2JqZWN0IGNvbnRlbnRzIHJhdGhlciB0aGFuCisJcHJldHR5LXByaW50ZWQgb25lcy4gQ3VycmVudGx5IHRoaXMgb25seSBhZmZlY3RzIHRyZWVzLCB3aGljaAorCXdpbGwgYmUgc2hvd24gaW4gdGhlaXIgYmluYXJ5IGZvcm0uIFRoaXMgaXMgaGFyZGVyIHRvIHdvcmsgd2l0aCwKKwlidXQgY2FuIGhlbHAgd2hlbiByZXBhaXJpbmcgYSB0cmVlIHRoYXQgaXMgc28gY29ycnVwdGVkIGl0CisJY2Fubm90IGJlIHByZXR0eS1wcmludGVkLiBOb3RlIHRoYXQgeW91IG1heSBuZWVkIHRvIGNvbmZpZ3VyZQorCXlvdXIgZWRpdG9yIHRvIGNsZWFubHkgcmVhZCBhbmQgd3JpdGUgYmluYXJ5IGRhdGEuCisKKy0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXTo6CisJQ3JlYXRlIGEgZ3JhZnQgY29tbWl0LiBBIG5ldyBjb21taXQgaXMgY3JlYXRlZCB3aXRoIHRoZSBzYW1lCisJY29udGVudCBhcyA8Y29tbWl0PiBleGNlcHQgdGhhdCBpdHMgcGFyZW50cyB3aWxsIGJlCisJWzxwYXJlbnQ+Li4uXSBpbnN0ZWFkIG9mIDxjb21taXQ+J3MgcGFyZW50cy4gQSByZXBsYWNlbWVudCByZWYKKwlpcyB0aGVuIGNyZWF0ZWQgdG8gcmVwbGFjZSA8Y29tbWl0PiB3aXRoIHRoZSBuZXdseSBjcmVhdGVkCisJY29tbWl0LiBVc2UgYC0tY29udmVydC1ncmFmdC1maWxlYCB0byBjb252ZXJ0IGEKKwlgJEdJVF9ESVIvaW5mby9ncmFmdHNgIGZpbGUgYW5kIHVzZSByZXBsYWNlIHJlZnMgaW5zdGVhZC4KKworLS1jb252ZXJ0LWdyYWZ0LWZpbGU6OgorCUNyZWF0ZXMgZ3JhZnQgY29tbWl0cyBmb3IgYWxsIGVudHJpZXMgaW4gYCRHSVRfRElSL2luZm8vZ3JhZnRzYAorCWFuZCBkZWxldGVzIHRoYXQgZmlsZSB1cG9uIHN1Y2Nlc3MuIFRoZSBwdXJwb3NlIGlzIHRvIGhlbHAgdXNlcnMKKwl3aXRoIHRyYW5zaXRpb25pbmcgb2ZmIG9mIHRoZSBub3ctZGVwcmVjYXRlZCBncmFmdCBmaWxlLgorCistbCA8cGF0dGVybj46OgorLS1saXN0IDxwYXR0ZXJuPjo6CisJTGlzdCByZXBsYWNlIHJlZnMgZm9yIG9iamVjdHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0dGVybiAob3IKKwlhbGwgaWYgbm8gcGF0dGVybiBpcyBnaXZlbikuCisJVHlwaW5nICJnaXQgcmVwbGFjZSIgd2l0aG91dCBhcmd1bWVudHMsIGFsc28gbGlzdHMgYWxsIHJlcGxhY2UKKwlyZWZzLgorCistLWZvcm1hdD08Zm9ybWF0Pjo6CisJV2hlbiBsaXN0aW5nLCB1c2UgdGhlIHNwZWNpZmllZCA8Zm9ybWF0Piwgd2hpY2ggY2FuIGJlIG9uZSBvZgorCSdzaG9ydCcsICdtZWRpdW0nIGFuZCAnbG9uZycuIFdoZW4gb21pdHRlZCwgdGhlIGZvcm1hdAorCWRlZmF1bHRzIHRvICdzaG9ydCcuCisKK0ZPUk1BVFMKKy0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBmb3JtYXQgYXJlIGF2YWlsYWJsZToKKworKiAnc2hvcnQnOgorCTxyZXBsYWNlZCBzaGExPgorKiAnbWVkaXVtJzoKKwk8cmVwbGFjZWQgc2hhMT4gLT4gPHJlcGxhY2VtZW50IHNoYTE+CisqICdsb25nJzoKKwk8cmVwbGFjZWQgc2hhMT4gKDxyZXBsYWNlZCB0eXBlPikgLT4gPHJlcGxhY2VtZW50IHNoYTE+ICg8cmVwbGFjZW1lbnQgdHlwZT4pCisKK0NSRUFUSU5HIFJFUExBQ0VNRU5UIE9CSkVDVFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbGlua2dpdDpnaXQtaGFzaC1vYmplY3RbMV0sIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXSwgYW5kCitodHRwczovL2dpdGh1Yi5jb20vbmV3cmVuL2dpdC1maWx0ZXItcmVwb1tnaXQtZmlsdGVyLXJlcG9dLCBhbW9uZyBvdGhlciBnaXQgY29tbWFuZHMsIGNhbiBiZSB1c2VkIHRvCitjcmVhdGUgcmVwbGFjZW1lbnQgb2JqZWN0cyBmcm9tIGV4aXN0aW5nIG9iamVjdHMuIFRoZSBgLS1lZGl0YCBvcHRpb24KK2NhbiBhbHNvIGJlIHVzZWQgd2l0aCAnZ2l0IHJlcGxhY2UnIHRvIGNyZWF0ZSBhIHJlcGxhY2VtZW50IG9iamVjdCBieQorZWRpdGluZyBhbiBleGlzdGluZyBvYmplY3QuCisKK0lmIHlvdSB3YW50IHRvIHJlcGxhY2UgbWFueSBibG9icywgdHJlZXMgb3IgY29tbWl0cyB0aGF0IGFyZSBwYXJ0IG9mIGEKK3N0cmluZyBvZiBjb21taXRzLCB5b3UgbWF5IGp1c3Qgd2FudCB0byBjcmVhdGUgYSByZXBsYWNlbWVudCBzdHJpbmcgb2YKK2NvbW1pdHMgYW5kIHRoZW4gb25seSByZXBsYWNlIHRoZSBjb21taXQgYXQgdGhlIHRpcCBvZiB0aGUgdGFyZ2V0CitzdHJpbmcgb2YgY29tbWl0cyB3aXRoIHRoZSBjb21taXQgYXQgdGhlIHRpcCBvZiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nCitvZiBjb21taXRzLgorCitCVUdTCistLS0tCitDb21wYXJpbmcgYmxvYnMgb3IgdHJlZXMgdGhhdCBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCB0aG9zZSB0aGF0CityZXBsYWNlIHRoZW0gd2lsbCBub3Qgd29yayBwcm9wZXJseS4gQW5kIHVzaW5nIGBnaXQgcmVzZXQgLS1oYXJkYCB0bworZ28gYmFjayB0byBhIHJlcGxhY2VkIGNvbW1pdCB3aWxsIG1vdmUgdGhlIGJyYW5jaCB0byB0aGUgcmVwbGFjZW1lbnQKK2NvbW1pdCBpbnN0ZWFkIG9mIHRoZSByZXBsYWNlZCBjb21taXQuCisKK1RoZXJlIG1heSBiZSBvdGhlciBwcm9ibGVtcyB3aGVuIHVzaW5nICdnaXQgcmV2LWxpc3QnIHJlbGF0ZWQgdG8KK3BlbmRpbmcgb2JqZWN0cy4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1oYXNoLW9iamVjdFsxXQorbGlua2dpdDpnaXQtcmViYXNlWzFdCitsaW5rZ2l0OmdpdC10YWdbMV0KK2xpbmtnaXQ6Z2l0LWJyYW5jaFsxXQorbGlua2dpdDpnaXQtY29tbWl0WzFdCitsaW5rZ2l0OmdpdC12YXJbMV0KK2xpbmtnaXQ6Z2l0WzFdCitodHRwczovL2dpdGh1Yi5jb20vbmV3cmVuL2dpdC1maWx0ZXItcmVwb1tnaXQtZmlsdGVyLXJlcG9dCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVxdWVzdC1wdWxsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcXVlc3QtcHVsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0MzkyZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcXVlc3QtcHVsbC50eHQKQEAgLTAsMCArMSw3OSBAQAorZ2l0LXJlcXVlc3QtcHVsbCgxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVxdWVzdC1wdWxsIC0gR2VuZXJhdGVzIGEgc3VtbWFyeSBvZiBwZW5kaW5nIGNoYW5nZXMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJlcXVlc3QtcHVsbCcgWy1wXSA8c3RhcnQ+IDx1cmw+IFs8ZW5kPl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0dlbmVyYXRlIGEgcmVxdWVzdCBhc2tpbmcgeW91ciB1cHN0cmVhbSBwcm9qZWN0IHRvIHB1bGwgY2hhbmdlcyBpbnRvCit0aGVpciB0cmVlLiAgVGhlIHJlcXVlc3QsIHByaW50ZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCwKK2JlZ2lucyB3aXRoIHRoZSBicmFuY2ggZGVzY3JpcHRpb24sIHN1bW1hcml6ZXMKK3RoZSBjaGFuZ2VzIGFuZCBpbmRpY2F0ZXMgZnJvbSB3aGVyZSB0aGV5IGNhbiBiZSBwdWxsZWQuCisKK1RoZSB1cHN0cmVhbSBwcm9qZWN0IGlzIGV4cGVjdGVkIHRvIGhhdmUgdGhlIGNvbW1pdCBuYW1lZCBieQorYDxzdGFydD5gIGFuZCB0aGUgb3V0cHV0IGFza3MgaXQgdG8gaW50ZWdyYXRlIHRoZSBjaGFuZ2VzIHlvdSBtYWRlCitzaW5jZSB0aGF0IGNvbW1pdCwgdXAgdG8gdGhlIGNvbW1pdCBuYW1lZCBieSBgPGVuZD5gLCBieSB2aXNpdGluZwordGhlIHJlcG9zaXRvcnkgbmFtZWQgYnkgYDx1cmw+YC4KKworCitPUFRJT05TCistLS0tLS0tCistcDo6CisJSW5jbHVkZSBwYXRjaCB0ZXh0IGluIHRoZSBvdXRwdXQuCisKKzxzdGFydD46OgorCUNvbW1pdCB0byBzdGFydCBhdC4gIFRoaXMgbmFtZXMgYSBjb21taXQgdGhhdCBpcyBhbHJlYWR5IGluCisJdGhlIHVwc3RyZWFtIGhpc3RvcnkuCisKKzx1cmw+OjoKKwlUaGUgcmVwb3NpdG9yeSBVUkwgdG8gYmUgcHVsbGVkIGZyb20uCisKKzxlbmQ+OjoKKwlDb21taXQgdG8gZW5kIGF0IChkZWZhdWx0cyB0byBIRUFEKS4gIFRoaXMgbmFtZXMgdGhlIGNvbW1pdAorCWF0IHRoZSB0aXAgb2YgdGhlIGhpc3RvcnkgeW91IGFyZSBhc2tpbmcgdG8gYmUgcHVsbGVkLgorKworV2hlbiB0aGUgcmVwb3NpdG9yeSBuYW1lZCBieSBgPHVybD5gIGhhcyB0aGUgY29tbWl0IGF0IGEgdGlwIG9mIGEKK3JlZiB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSByZWYgeW91IGhhdmUgbG9jYWxseSwgeW91IGNhbiB1c2UgdGhlCitgPGxvY2FsPjo8cmVtb3RlPmAgc3ludGF4LCB0byBoYXZlIGl0cyBsb2NhbCBuYW1lLCBhIGNvbG9uIGA6YCwgYW5kCitpdHMgcmVtb3RlIG5hbWUuCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK0ltYWdpbmUgdGhhdCB5b3UgYnVpbHQgeW91ciB3b3JrIG9uIHlvdXIgYG1hc3RlcmAgYnJhbmNoIG9uIHRvcCBvZgordGhlIGB2MS4wYCByZWxlYXNlLCBhbmQgd2FudCBpdCB0byBiZSBpbnRlZ3JhdGVkIHRvIHRoZSBwcm9qZWN0LgorRmlyc3QgeW91IHB1c2ggdGhhdCBjaGFuZ2UgdG8geW91ciBwdWJsaWMgcmVwb3NpdG9yeSBmb3Igb3RoZXJzIHRvCitzZWU6CisKKwlnaXQgcHVzaCBodHRwczovL2dpdC5rby54ei9wcm9qZWN0IG1hc3RlcgorCitUaGVuLCB5b3UgcnVuIHRoaXMgY29tbWFuZDoKKworCWdpdCByZXF1ZXN0LXB1bGwgdjEuMCBodHRwczovL2dpdC5rby54ei9wcm9qZWN0IG1hc3RlcgorCit3aGljaCB3aWxsIHByb2R1Y2UgYSByZXF1ZXN0IHRvIHRoZSB1cHN0cmVhbSwgc3VtbWFyaXppbmcgdGhlCitjaGFuZ2VzIGJldHdlZW4gdGhlIGB2MS4wYCByZWxlYXNlIGFuZCB5b3VyIGBtYXN0ZXJgLCB0byBwdWxsIGl0Citmcm9tIHlvdXIgcHVibGljIHJlcG9zaXRvcnkuCisKK0lmIHlvdSBwdXNoZWQgeW91ciBjaGFuZ2UgdG8gYSBicmFuY2ggd2hvc2UgbmFtZSBpcyBkaWZmZXJlbnQgZnJvbQordGhlIG9uZSB5b3UgaGF2ZSBsb2NhbGx5LCBlLmcuCisKKwlnaXQgcHVzaCBodHRwczovL2dpdC5rby54ei9wcm9qZWN0IG1hc3Rlcjpmb3ItbGludXMKKwordGhlbiB5b3UgY2FuIGFzayB0aGF0IHRvIGJlIHB1bGxlZCB3aXRoCisKKwlnaXQgcmVxdWVzdC1wdWxsIHYxLjAgaHR0cHM6Ly9naXQua28ueHovcHJvamVjdCBtYXN0ZXI6Zm9yLWxpbnVzCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVyZXJlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2ZjODgzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVyZXJlLnR4dApAQCAtMCwwICsxLDIyMiBAQAorZ2l0LXJlcmVyZSgxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVyZXJlIC0gUmV1c2UgcmVjb3JkZWQgcmVzb2x1dGlvbiBvZiBjb25mbGljdGVkIG1lcmdlcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVyZXJlJyBbJ2NsZWFyJ3wnZm9yZ2V0JyA8cGF0aHNwZWM+fCdkaWZmJ3wncmVtYWluaW5nJ3wnc3RhdHVzJ3wnZ2MnXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworSW4gYSB3b3JrZmxvdyBlbXBsb3lpbmcgcmVsYXRpdmVseSBsb25nIGxpdmVkIHRvcGljIGJyYW5jaGVzLAordGhlIGRldmVsb3BlciBzb21ldGltZXMgbmVlZHMgdG8gcmVzb2x2ZSB0aGUgc2FtZSBjb25mbGljdHMgb3ZlcgorYW5kIG92ZXIgYWdhaW4gdW50aWwgdGhlIHRvcGljIGJyYW5jaGVzIGFyZSBkb25lIChlaXRoZXIgbWVyZ2VkCit0byB0aGUgInJlbGVhc2UiIGJyYW5jaCwgb3Igc2VudCBvdXQgYW5kIGFjY2VwdGVkIHVwc3RyZWFtKS4KKworVGhpcyBjb21tYW5kIGFzc2lzdHMgdGhlIGRldmVsb3BlciBpbiB0aGlzIHByb2Nlc3MgYnkgcmVjb3JkaW5nCitjb25mbGljdGVkIGF1dG9tZXJnZSByZXN1bHRzIGFuZCBjb3JyZXNwb25kaW5nIGhhbmQgcmVzb2x2ZSByZXN1bHRzCitvbiB0aGUgaW5pdGlhbCBtYW51YWwgbWVyZ2UsIGFuZCBhcHBseWluZyBwcmV2aW91c2x5IHJlY29yZGVkCitoYW5kIHJlc29sdXRpb25zIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgYXV0b21lcmdlIHJlc3VsdHMuCisKK1tOT1RFXQorWW91IG5lZWQgdG8gc2V0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGByZXJlcmUuZW5hYmxlZGAgaW4gb3JkZXIgdG8KK2VuYWJsZSB0aGlzIGNvbW1hbmQuCisKKworQ09NTUFORFMKKy0tLS0tLS0tCisKK05vcm1hbGx5LCAnZ2l0IHJlcmVyZScgaXMgcnVuIHdpdGhvdXQgYXJndW1lbnRzIG9yIHVzZXItaW50ZXJ2ZW50aW9uLgorSG93ZXZlciwgaXQgaGFzIHNldmVyYWwgY29tbWFuZHMgdGhhdCBhbGxvdyBpdCB0byBpbnRlcmFjdCB3aXRoCitpdHMgd29ya2luZyBzdGF0ZS4KKworJ2NsZWFyJzo6CisKK1Jlc2V0IHRoZSBtZXRhZGF0YSB1c2VkIGJ5IHJlcmVyZSBpZiBhIG1lcmdlIHJlc29sdXRpb24gaXMgdG8gYmUKK2Fib3J0ZWQuICBDYWxsaW5nICdnaXQgYW0gWy0tc2tpcHwtLWFib3J0XScgb3IgJ2dpdCByZWJhc2UgWy0tc2tpcHwtLWFib3J0XScKK3dpbGwgYXV0b21hdGljYWxseSBpbnZva2UgdGhpcyBjb21tYW5kLgorCisnZm9yZ2V0JyA8cGF0aHNwZWM+OjoKKworUmVzZXQgdGhlIGNvbmZsaWN0IHJlc29sdXRpb25zIHdoaWNoIHJlcmVyZSBoYXMgcmVjb3JkZWQgZm9yIHRoZSBjdXJyZW50Citjb25mbGljdCBpbiA8cGF0aHNwZWM+LgorCisnZGlmZic6OgorCitEaXNwbGF5IGRpZmZzIGZvciB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcmVzb2x1dGlvbi4gIEl0IGlzCit1c2VmdWwgZm9yIHRyYWNraW5nIHdoYXQgaGFzIGNoYW5nZWQgd2hpbGUgdGhlIHVzZXIgaXMgcmVzb2x2aW5nCitjb25mbGljdHMuICBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBzeXN0ZW0KKydkaWZmJyBjb21tYW5kIGluc3RhbGxlZCBpbiBQQVRILgorCisnc3RhdHVzJzo6CisKK1ByaW50IHBhdGhzIHdpdGggY29uZmxpY3RzIHdob3NlIG1lcmdlIHJlc29sdXRpb24gcmVyZXJlIHdpbGwgcmVjb3JkLgorCisncmVtYWluaW5nJzo6CisKK1ByaW50IHBhdGhzIHdpdGggY29uZmxpY3RzIHRoYXQgaGF2ZSBub3QgYmVlbiBhdXRvcmVzb2x2ZWQgYnkgcmVyZXJlLgorVGhpcyBpbmNsdWRlcyBwYXRocyB3aG9zZSByZXNvbHV0aW9ucyBjYW5ub3QgYmUgdHJhY2tlZCBieSByZXJlcmUsCitzdWNoIGFzIGNvbmZsaWN0aW5nIHN1Ym1vZHVsZXMuCisKKydnYyc6OgorCitQcnVuZSByZWNvcmRzIG9mIGNvbmZsaWN0ZWQgbWVyZ2VzIHRoYXQKK29jY3VycmVkIGEgbG9uZyB0aW1lIGFnby4gIEJ5IGRlZmF1bHQsIHVucmVzb2x2ZWQgY29uZmxpY3RzIG9sZGVyCit0aGFuIDE1IGRheXMgYW5kIHJlc29sdmVkIGNvbmZsaWN0cyBvbGRlciB0aGFuIDYwCitkYXlzIGFyZSBwcnVuZWQuICBUaGVzZSBkZWZhdWx0cyBhcmUgY29udHJvbGxlZCB2aWEgdGhlCitgZ2MucmVyZXJlVW5yZXNvbHZlZGAgYW5kIGBnYy5yZXJlcmVSZXNvbHZlZGAgY29uZmlndXJhdGlvbgordmFyaWFibGVzIHJlc3BlY3RpdmVseS4KKworCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK1doZW4geW91ciB0b3BpYyBicmFuY2ggbW9kaWZpZXMgYW4gb3ZlcmxhcHBpbmcgYXJlYSB0aGF0IHlvdXIKK21hc3RlciBicmFuY2ggKG9yIHVwc3RyZWFtKSB0b3VjaGVkIHNpbmNlIHlvdXIgdG9waWMgYnJhbmNoCitmb3JrZWQgZnJvbSBpdCwgeW91IG1heSB3YW50IHRvIHRlc3QgaXQgd2l0aCB0aGUgbGF0ZXN0IG1hc3RlciwKK2V2ZW4gYmVmb3JlIHlvdXIgdG9waWMgYnJhbmNoIGlzIHJlYWR5IHRvIGJlIHB1c2hlZCB1cHN0cmVhbToKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIG8tLS0qLS0tbyB0b3BpYworICAgICAgICAgICAgIC8KKyAgICBvLS0tby0tLW8tLS0qLS0tby0tLW8gbWFzdGVyCistLS0tLS0tLS0tLS0KKworRm9yIHN1Y2ggYSB0ZXN0LCB5b3UgbmVlZCB0byBtZXJnZSBtYXN0ZXIgYW5kIHRvcGljIHNvbWVob3cuCitPbmUgd2F5IHRvIGRvIGl0IGlzIHRvIHB1bGwgbWFzdGVyIGludG8gdGhlIHRvcGljIGJyYW5jaDoKKworLS0tLS0tLS0tLS0tCisJJCBnaXQgc3dpdGNoIHRvcGljCisJJCBnaXQgbWVyZ2UgbWFzdGVyCisKKyAgICAgICAgICAgICAgby0tLSotLS1vLS0tKyB0b3BpYworICAgICAgICAgICAgIC8gICAgICAgICAgIC8KKyAgICBvLS0tby0tLW8tLS0qLS0tby0tLW8gbWFzdGVyCistLS0tLS0tLS0tLS0KKworVGhlIGNvbW1pdHMgbWFya2VkIHdpdGggYCpgIHRvdWNoIHRoZSBzYW1lIGFyZWEgaW4gdGhlIHNhbWUKK2ZpbGU7IHlvdSBuZWVkIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0cyB3aGVuIGNyZWF0aW5nIHRoZSBjb21taXQKK21hcmtlZCB3aXRoIGArYC4gIFRoZW4geW91IGNhbiB0ZXN0IHRoZSByZXN1bHQgdG8gbWFrZSBzdXJlIHlvdXIKK3dvcmstaW4tcHJvZ3Jlc3Mgc3RpbGwgd29ya3Mgd2l0aCB3aGF0IGlzIGluIHRoZSBsYXRlc3QgbWFzdGVyLgorCitBZnRlciB0aGlzIHRlc3QgbWVyZ2UsIHRoZXJlIGFyZSB0d28gd2F5cyB0byBjb250aW51ZSB5b3VyIHdvcmsKK29uIHRoZSB0b3BpYy4gIFRoZSBlYXNpZXN0IGlzIHRvIGJ1aWxkIG9uIHRvcCBvZiB0aGUgdGVzdCBtZXJnZQorY29tbWl0IGArYCwgYW5kIHdoZW4geW91ciB3b3JrIGluIHRoZSB0b3BpYyBicmFuY2ggaXMgZmluYWxseQorcmVhZHksIHB1bGwgdGhlIHRvcGljIGJyYW5jaCBpbnRvIG1hc3RlciwgYW5kL29yIGFzayB0aGUKK3Vwc3RyZWFtIHRvIHB1bGwgZnJvbSB5b3UuICBCeSB0aGF0IHRpbWUsIGhvd2V2ZXIsIHRoZSBtYXN0ZXIgb3IKK3RoZSB1cHN0cmVhbSBtaWdodCBoYXZlIGJlZW4gYWR2YW5jZWQgc2luY2UgdGhlIHRlc3QgbWVyZ2UgYCtgLAoraW4gd2hpY2ggY2FzZSB0aGUgZmluYWwgY29tbWl0IGdyYXBoIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKwkkIGdpdCBzd2l0Y2ggdG9waWMKKwkkIGdpdCBtZXJnZSBtYXN0ZXIKKwkkIC4uLiB3b3JrIG9uIGJvdGggdG9waWMgYW5kIG1hc3RlciBicmFuY2hlcworCSQgZ2l0IHN3aXRjaCBtYXN0ZXIKKwkkIGdpdCBtZXJnZSB0b3BpYworCisgICAgICAgICAgICAgIG8tLS0qLS0tby0tLSstLS1vLS0tbyB0b3BpYworICAgICAgICAgICAgIC8gICAgICAgICAgIC8gICAgICAgICBcCisgICAgby0tLW8tLS1vLS0tKi0tLW8tLS1vLS0tby0tLW8tLS0rIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK1doZW4geW91ciB0b3BpYyBicmFuY2ggaXMgbG9uZy1saXZlZCwgaG93ZXZlciwgeW91ciB0b3BpYyBicmFuY2gKK3dvdWxkIGVuZCB1cCBoYXZpbmcgbWFueSBzdWNoICJNZXJnZSBmcm9tIG1hc3RlciIgY29tbWl0cyBvbiBpdCwKK3doaWNoIHdvdWxkIHVubmVjZXNzYXJpbHkgY2x1dHRlciB0aGUgZGV2ZWxvcG1lbnQgaGlzdG9yeS4KK1JlYWRlcnMgb2YgdGhlIExpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3QgbWF5IHJlbWVtYmVyIHRoYXQgTGludXMKK2NvbXBsYWluZWQgYWJvdXQgc3VjaCB0b28gZnJlcXVlbnQgdGVzdCBtZXJnZXMgd2hlbiBhIHN1YnN5c3RlbQorbWFpbnRhaW5lciBhc2tlZCB0byBwdWxsIGZyb20gYSBicmFuY2ggZnVsbCBvZiAidXNlbGVzcyBtZXJnZXMiLgorCitBcyBhbiBhbHRlcm5hdGl2ZSwgdG8ga2VlcCB0aGUgdG9waWMgYnJhbmNoIGNsZWFuIG9mIHRlc3QKK21lcmdlcywgeW91IGNvdWxkIGJsb3cgYXdheSB0aGUgdGVzdCBtZXJnZSwgYW5kIGtlZXAgYnVpbGRpbmcgb24KK3RvcCBvZiB0aGUgdGlwIGJlZm9yZSB0aGUgdGVzdCBtZXJnZToKKworLS0tLS0tLS0tLS0tCisJJCBnaXQgc3dpdGNoIHRvcGljCisJJCBnaXQgbWVyZ2UgbWFzdGVyCisJJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUReIDsjIHJld2luZCB0aGUgdGVzdCBtZXJnZQorCSQgLi4uIHdvcmsgb24gYm90aCB0b3BpYyBhbmQgbWFzdGVyIGJyYW5jaGVzCisJJCBnaXQgc3dpdGNoIG1hc3RlcgorCSQgZ2l0IG1lcmdlIHRvcGljCisKKyAgICAgICAgICAgICAgby0tLSotLS1vLS0tLS0tLW8tLS1vIHRvcGljCisgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBvLS0tby0tLW8tLS0qLS0tby0tLW8tLS1vLS0tby0tLSsgbWFzdGVyCistLS0tLS0tLS0tLS0KKworVGhpcyB3b3VsZCBsZWF2ZSBvbmx5IG9uZSBtZXJnZSBjb21taXQgd2hlbiB5b3VyIHRvcGljIGJyYW5jaCBpcworZmluYWxseSByZWFkeSBhbmQgbWVyZ2VkIGludG8gdGhlIG1hc3RlciBicmFuY2guICBUaGlzIG1lcmdlCit3b3VsZCByZXF1aXJlIHlvdSB0byByZXNvbHZlIHRoZSBjb25mbGljdCwgaW50cm9kdWNlZCBieSB0aGUKK2NvbW1pdHMgbWFya2VkIHdpdGggYCpgLiAgSG93ZXZlciwgdGhpcyBjb25mbGljdCBpcyBvZnRlbiB0aGUKK3NhbWUgY29uZmxpY3QgeW91IHJlc29sdmVkIHdoZW4geW91IGNyZWF0ZWQgdGhlIHRlc3QgbWVyZ2UgeW91CitibGV3IGF3YXkuICAnZ2l0IHJlcmVyZScgaGVscHMgeW91IHJlc29sdmUgdGhpcyBmaW5hbAorY29uZmxpY3RlZCBtZXJnZSB1c2luZyB0aGUgaW5mb3JtYXRpb24gZnJvbSB5b3VyIGVhcmxpZXIgaGFuZAorcmVzb2x2ZS4KKworUnVubmluZyB0aGUgJ2dpdCByZXJlcmUnIGNvbW1hbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBjb25mbGljdGVkCithdXRvbWVyZ2UgcmVjb3JkcyB0aGUgY29uZmxpY3RlZCB3b3JraW5nIHRyZWUgZmlsZXMsIHdpdGggdGhlCit1c3VhbCBjb25mbGljdCBtYXJrZXJzIGA8PDw8PDw8YCwgYD09PT09PT1gLCBhbmQgYD4+Pj4+Pj5gIGluCit0aGVtLiAgTGF0ZXIsIGFmdGVyIHlvdSBhcmUgZG9uZSByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywKK3J1bm5pbmcgJ2dpdCByZXJlcmUnIGFnYWluIHdpbGwgcmVjb3JkIHRoZSByZXNvbHZlZCBzdGF0ZSBvZiB0aGVzZQorZmlsZXMuICBTdXBwb3NlIHlvdSBkaWQgdGhpcyB3aGVuIHlvdSBjcmVhdGVkIHRoZSB0ZXN0IG1lcmdlIG9mCittYXN0ZXIgaW50byB0aGUgdG9waWMgYnJhbmNoLgorCitOZXh0IHRpbWUsIGFmdGVyIHNlZWluZyB0aGUgc2FtZSBjb25mbGljdGVkIGF1dG9tZXJnZSwKK3J1bm5pbmcgJ2dpdCByZXJlcmUnIHdpbGwgcGVyZm9ybSBhIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIHRoZQorZWFybGllciBjb25mbGljdGVkIGF1dG9tZXJnZSwgdGhlIGVhcmxpZXIgbWFudWFsIHJlc29sdXRpb24sIGFuZAordGhlIGN1cnJlbnQgY29uZmxpY3RlZCBhdXRvbWVyZ2UuCitJZiB0aGlzIHRocmVlLXdheSBtZXJnZSByZXNvbHZlcyBjbGVhbmx5LCB0aGUgcmVzdWx0IGlzIHdyaXR0ZW4KK291dCB0byB5b3VyIHdvcmtpbmcgdHJlZSBmaWxlLCBzbyB5b3UgZG8gbm90IGhhdmUgdG8gbWFudWFsbHkKK3Jlc29sdmUgaXQuICBOb3RlIHRoYXQgJ2dpdCByZXJlcmUnIGxlYXZlcyB0aGUgaW5kZXggZmlsZSBhbG9uZSwKK3NvIHlvdSBzdGlsbCBuZWVkIHRvIGRvIHRoZSBmaW5hbCBzYW5pdHkgY2hlY2tzIHdpdGggYGdpdCBkaWZmYAorKG9yIGBnaXQgZGlmZiAtY2ApIGFuZCAnZ2l0IGFkZCcgd2hlbiB5b3UgYXJlIHNhdGlzZmllZC4KKworQXMgYSBjb252ZW5pZW5jZSBtZWFzdXJlLCAnZ2l0IG1lcmdlJyBhdXRvbWF0aWNhbGx5IGludm9rZXMKKydnaXQgcmVyZXJlJyB1cG9uIGV4aXRpbmcgd2l0aCBhIGZhaWxlZCBhdXRvbWVyZ2UgYW5kICdnaXQgcmVyZXJlJworcmVjb3JkcyB0aGUgaGFuZCByZXNvbHZlIHdoZW4gaXQgaXMgYSBuZXcgY29uZmxpY3QsIG9yIHJldXNlcyB0aGUgZWFybGllciBoYW5kCityZXNvbHZlIHdoZW4gaXQgaXMgbm90LiAgJ2dpdCBjb21taXQnIGFsc28gaW52b2tlcyAnZ2l0IHJlcmVyZScKK3doZW4gY29tbWl0dGluZyBhIG1lcmdlIHJlc3VsdC4gIFdoYXQgdGhpcyBtZWFucyBpcyB0aGF0IHlvdSBkbworbm90IGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbCB5b3Vyc2VsZiAoYmVzaWRlcyBlbmFibGluZwordGhlIHJlcmVyZS5lbmFibGVkIGNvbmZpZyB2YXJpYWJsZSkuCisKK0luIG91ciBleGFtcGxlLCB3aGVuIHlvdSBkbyB0aGUgdGVzdCBtZXJnZSwgdGhlIG1hbnVhbAorcmVzb2x1dGlvbiBpcyByZWNvcmRlZCwgYW5kIGl0IHdpbGwgYmUgcmV1c2VkIHdoZW4geW91IGRvIHRoZQorYWN0dWFsIG1lcmdlIGxhdGVyIHdpdGggdGhlIHVwZGF0ZWQgbWFzdGVyIGFuZCB0b3BpYyBicmFuY2gsIGFzIGxvbmcKK2FzIHRoZSByZWNvcmRlZCByZXNvbHV0aW9uIGlzIHN0aWxsIGFwcGxpY2FibGUuCisKK1RoZSBpbmZvcm1hdGlvbiAnZ2l0IHJlcmVyZScgcmVjb3JkcyBpcyBhbHNvIHVzZWQgd2hlbiBydW5uaW5nCisnZ2l0IHJlYmFzZScuICBBZnRlciBibG93aW5nIGF3YXkgdGhlIHRlc3QgbWVyZ2UgYW5kIGNvbnRpbnVpbmcKK2RldmVsb3BtZW50IG9uIHRoZSB0b3BpYyBicmFuY2g6CisKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBvLS0tKi0tLW8tLS0tLS0tby0tLW8gdG9waWMKKyAgICAgICAgICAgICAvCisgICAgby0tLW8tLS1vLS0tKi0tLW8tLS1vLS0tby0tLW8gICBtYXN0ZXIKKworCSQgZ2l0IHJlYmFzZSBtYXN0ZXIgdG9waWMKKworCQkJCSAgby0tLSotLS1vLS0tLS0tLW8tLS1vIHRvcGljCisJCQkJIC8KKyAgICBvLS0tby0tLW8tLS0qLS0tby0tLW8tLS1vLS0tbyAgIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK3lvdSBjb3VsZCBydW4gYGdpdCByZWJhc2UgbWFzdGVyIHRvcGljYCwgdG8gYnJpbmcgeW91cnNlbGYKK3VwIHRvIGRhdGUgYmVmb3JlIHlvdXIgdG9waWMgaXMgcmVhZHkgdG8gYmUgc2VudCB1cHN0cmVhbS4KK1RoaXMgd291bGQgcmVzdWx0IGluIGZhbGxpbmcgYmFjayB0byBhIHRocmVlLXdheSBtZXJnZSwgYW5kIGl0Cit3b3VsZCBjb25mbGljdCB0aGUgc2FtZSB3YXkgYXMgdGhlIHRlc3QgbWVyZ2UgeW91IHJlc29sdmVkIGVhcmxpZXIuCisnZ2l0IHJlcmVyZScgd2lsbCBiZSBydW4gYnkgJ2dpdCByZWJhc2UnIHRvIGhlbHAgeW91IHJlc29sdmUgdGhpcworY29uZmxpY3QuCisKK1tOT1RFXSAnZ2l0IHJlcmVyZScgcmVsaWVzIG9uIHRoZSBjb25mbGljdCBtYXJrZXJzIGluIHRoZSBmaWxlIHRvCitkZXRlY3QgdGhlIGNvbmZsaWN0LiAgSWYgdGhlIGZpbGUgYWxyZWFkeSBjb250YWlucyBsaW5lcyB0aGF0IGxvb2sgdGhlCitzYW1lIGFzIGxpbmVzIHdpdGggY29uZmxpY3QgbWFya2VycywgJ2dpdCByZXJlcmUnIG1heSBmYWlsIHRvIHJlY29yZCBhCitjb25mbGljdCByZXNvbHV0aW9uLiAgVG8gd29yayBhcm91bmQgdGhpcywgdGhlIGBjb25mbGljdC1tYXJrZXItc2l6ZWAKK3NldHRpbmcgaW4gbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGNhbiBiZSB1c2VkLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTJlMmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0CkBAIC0wLDAgKzEsNTAzIEBACitnaXQtcmVzZXQoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVzZXQgLSBSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVzZXQnIFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLgorJ2dpdCByZXNldCcgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+IFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWzx0cmVlLWlzaD5dCisnZ2l0IHJlc2V0JyAoLS1wYXRjaCB8IC1wKSBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0KKydnaXQgcmVzZXQnIFstLXNvZnQgfCAtLW1peGVkIFstTl0gfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitJbiB0aGUgZmlyc3QgdGhyZWUgZm9ybXMsIGNvcHkgZW50cmllcyBmcm9tIGA8dHJlZS1pc2g+YCB0byB0aGUgaW5kZXguCitJbiB0aGUgbGFzdCBmb3JtLCBzZXQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQgKGBIRUFEYCkgdG8gYDxjb21taXQ+YCwKK29wdGlvbmFsbHkgbW9kaWZ5aW5nIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgdG8gbWF0Y2guCitUaGUgYDx0cmVlLWlzaD5gL2A8Y29tbWl0PmAgZGVmYXVsdHMgdG8gYEhFQURgIGluIGFsbCBmb3Jtcy4KKworJ2dpdCByZXNldCcgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uOjoKKydnaXQgcmVzZXQnIFstcV0gWy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPiBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs8dHJlZS1pc2g+XTo6CisJVGhlc2UgZm9ybXMgcmVzZXQgdGhlIGluZGV4IGVudHJpZXMgZm9yIGFsbCBwYXRocyB0aGF0IG1hdGNoIHRoZQorCWA8cGF0aHNwZWM+YCB0byB0aGVpciBzdGF0ZSBhdCBgPHRyZWUtaXNoPmAuICAoSXQgZG9lcyBub3QgYWZmZWN0CisJdGhlIHdvcmtpbmcgdHJlZSBvciB0aGUgY3VycmVudCBicmFuY2guKQorKworVGhpcyBtZWFucyB0aGF0IGBnaXQgcmVzZXQgPHBhdGhzcGVjPmAgaXMgdGhlIG9wcG9zaXRlIG9mIGBnaXQgYWRkCis8cGF0aHNwZWM+YC4gVGhpcyBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8KK2BnaXQgcmVzdG9yZSBbLS1zb3VyY2U9PHRyZWUtaXNoPl0gLS1zdGFnZWQgPHBhdGhzcGVjPi4uLmAuCisrCitBZnRlciBydW5uaW5nIGBnaXQgcmVzZXQgPHBhdGhzcGVjPmAgdG8gdXBkYXRlIHRoZSBpbmRleCBlbnRyeSwgeW91IGNhbgordXNlIGxpbmtnaXQ6Z2l0LXJlc3RvcmVbMV0gdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG91dCBvZiB0aGUgaW5kZXggdG8KK3RoZSB3b3JraW5nIHRyZWUuIEFsdGVybmF0aXZlbHksIHVzaW5nIGxpbmtnaXQ6Z2l0LXJlc3RvcmVbMV0KK2FuZCBzcGVjaWZ5aW5nIGEgY29tbWl0IHdpdGggYC0tc291cmNlYCwgeW91CitjYW4gY29weSB0aGUgY29udGVudHMgb2YgYSBwYXRoIG91dCBvZiBhIGNvbW1pdCB0byB0aGUgaW5kZXggYW5kIHRvIHRoZQord29ya2luZyB0cmVlIGluIG9uZSBnby4KKworJ2dpdCByZXNldCcgKC0tcGF0Y2ggfCAtcCkgWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRoc3BlYz4uLi5dOjoKKwlJbnRlcmFjdGl2ZWx5IHNlbGVjdCBodW5rcyBpbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbmRleAorCWFuZCBgPHRyZWUtaXNoPmAgKGRlZmF1bHRzIHRvIGBIRUFEYCkuICBUaGUgY2hvc2VuIGh1bmtzIGFyZSBhcHBsaWVkCisJaW4gcmV2ZXJzZSB0byB0aGUgaW5kZXguCisrCitUaGlzIG1lYW5zIHRoYXQgYGdpdCByZXNldCAtcGAgaXMgdGhlIG9wcG9zaXRlIG9mIGBnaXQgYWRkIC1wYCwgaS5lLgoreW91IGNhbiB1c2UgaXQgdG8gc2VsZWN0aXZlbHkgcmVzZXQgaHVua3MuIFNlZSB0aGUgYGBJbnRlcmFjdGl2ZSBNb2RlJycKK3NlY3Rpb24gb2YgbGlua2dpdDpnaXQtYWRkWzFdIHRvIGxlYXJuIGhvdyB0byBvcGVyYXRlIHRoZSBgLS1wYXRjaGAgbW9kZS4KKworJ2dpdCByZXNldCcgWzxtb2RlPl0gWzxjb21taXQ+XTo6CisJVGhpcyBmb3JtIHJlc2V0cyB0aGUgY3VycmVudCBicmFuY2ggaGVhZCB0byBgPGNvbW1pdD5gIGFuZAorCXBvc3NpYmx5IHVwZGF0ZXMgdGhlIGluZGV4IChyZXNldHRpbmcgaXQgdG8gdGhlIHRyZWUgb2YgYDxjb21taXQ+YCkgYW5kCisJdGhlIHdvcmtpbmcgdHJlZSBkZXBlbmRpbmcgb24gYDxtb2RlPmAuIElmIGA8bW9kZT5gIGlzIG9taXR0ZWQsCisJZGVmYXVsdHMgdG8gYC0tbWl4ZWRgLiBUaGUgYDxtb2RlPmAgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKy0tCistLXNvZnQ6OgorCURvZXMgbm90IHRvdWNoIHRoZSBpbmRleCBmaWxlIG9yIHRoZSB3b3JraW5nIHRyZWUgYXQgYWxsIChidXQKKwlyZXNldHMgdGhlIGhlYWQgdG8gYDxjb21taXQ+YCwganVzdCBsaWtlIGFsbCBtb2RlcyBkbykuIFRoaXMgbGVhdmVzCisJYWxsIHlvdXIgY2hhbmdlZCBmaWxlcyAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQiLCBhcyBgZ2l0IHN0YXR1c2AKKwl3b3VsZCBwdXQgaXQuCisKKy0tbWl4ZWQ6OgorCVJlc2V0cyB0aGUgaW5kZXggYnV0IG5vdCB0aGUgd29ya2luZyB0cmVlIChpLmUuLCB0aGUgY2hhbmdlZCBmaWxlcworCWFyZSBwcmVzZXJ2ZWQgYnV0IG5vdCBtYXJrZWQgZm9yIGNvbW1pdCkgYW5kIHJlcG9ydHMgd2hhdCBoYXMgbm90CisJYmVlbiB1cGRhdGVkLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGFjdGlvbi4KKysKK0lmIGAtTmAgaXMgc3BlY2lmaWVkLCByZW1vdmVkIHBhdGhzIGFyZSBtYXJrZWQgYXMgaW50ZW50LXRvLWFkZCAoc2VlCitsaW5rZ2l0OmdpdC1hZGRbMV0pLgorCistLWhhcmQ6OgorCVJlc2V0cyB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZS4gQW55IGNoYW5nZXMgdG8gdHJhY2tlZCBmaWxlcyBpbiB0aGUKKwl3b3JraW5nIHRyZWUgc2luY2UgYDxjb21taXQ+YCBhcmUgZGlzY2FyZGVkLgorCistLW1lcmdlOjoKKwlSZXNldHMgdGhlIGluZGV4IGFuZCB1cGRhdGVzIHRoZSBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIHRoYXQgYXJlCisJZGlmZmVyZW50IGJldHdlZW4gYDxjb21taXQ+YCBhbmQgYEhFQURgLCBidXQga2VlcHMgdGhvc2Ugd2hpY2ggYXJlCisJZGlmZmVyZW50IGJldHdlZW4gdGhlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgKGkuZS4gd2hpY2ggaGF2ZSBjaGFuZ2VzCisJd2hpY2ggaGF2ZSBub3QgYmVlbiBhZGRlZCkuCisJSWYgYSBmaWxlIHRoYXQgaXMgZGlmZmVyZW50IGJldHdlZW4gYDxjb21taXQ+YCBhbmQgdGhlIGluZGV4IGhhcworCXVuc3RhZ2VkIGNoYW5nZXMsIHJlc2V0IGlzIGFib3J0ZWQuCisrCitJbiBvdGhlciB3b3JkcywgYC0tbWVyZ2VgIGRvZXMgc29tZXRoaW5nIGxpa2UgYSBgZ2l0IHJlYWQtdHJlZSAtdSAtbSA8Y29tbWl0PmAsCitidXQgY2FycmllcyBmb3J3YXJkIHVubWVyZ2VkIGluZGV4IGVudHJpZXMuCisKKy0ta2VlcDo6CisJUmVzZXRzIGluZGV4IGVudHJpZXMgYW5kIHVwZGF0ZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0aGF0IGFyZQorCWRpZmZlcmVudCBiZXR3ZWVuIGA8Y29tbWl0PmAgYW5kIGBIRUFEYC4KKwlJZiBhIGZpbGUgdGhhdCBpcyBkaWZmZXJlbnQgYmV0d2VlbiBgPGNvbW1pdD5gIGFuZCBgSEVBRGAgaGFzIGxvY2FsCisJY2hhbmdlcywgcmVzZXQgaXMgYWJvcnRlZC4KKworLS1bbm8tXXJlY3Vyc2Utc3VibW9kdWxlczo6CisJV2hlbiB0aGUgd29ya2luZyB0cmVlIGlzIHVwZGF0ZWQsIHVzaW5nIC0tcmVjdXJzZS1zdWJtb2R1bGVzIHdpbGwKKwlhbHNvIHJlY3Vyc2l2ZWx5IHJlc2V0IHRoZSB3b3JraW5nIHRyZWUgb2YgYWxsIGFjdGl2ZSBzdWJtb2R1bGVzCisJYWNjb3JkaW5nIHRvIHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCwgYWxzbyBzZXR0aW5nCisJdGhlIHN1Ym1vZHVsZXMnIEhFQUQgdG8gYmUgZGV0YWNoZWQgYXQgdGhhdCBjb21taXQuCistLQorCitTZWUgIlJlc2V0LCByZXN0b3JlIGFuZCByZXZlcnQiIGluIGxpbmtnaXQ6Z2l0WzFdIGZvciB0aGUgZGlmZmVyZW5jZXMKK2JldHdlZW4gdGhlIHRocmVlIGNvbW1hbmRzLgorCisKK09QVElPTlMKKy0tLS0tLS0KKworLXE6OgorLS1xdWlldDo6CistLW5vLXF1aWV0OjoKKwlCZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzLiBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyBzZXQgYnkgdGhlCisJYHJlc2V0LnF1aWV0YCBjb25maWcgb3B0aW9uLiBgLS1xdWlldGAgYW5kIGAtLW5vLXF1aWV0YCB3aWxsCisJb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisKKy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPjo6CisJUGF0aHNwZWMgaXMgcGFzc2VkIGluIGA8ZmlsZT5gIGluc3RlYWQgb2YgY29tbWFuZGxpbmUgYXJncy4gSWYKKwlgPGZpbGU+YCBpcyBleGFjdGx5IGAtYCB0aGVuIHN0YW5kYXJkIGlucHV0IGlzIHVzZWQuIFBhdGhzcGVjCisJZWxlbWVudHMgYXJlIHNlcGFyYXRlZCBieSBMRiBvciBDUi9MRi4gUGF0aHNwZWMgZWxlbWVudHMgY2FuIGJlCisJcXVvdGVkIGFzIGV4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYAorCShzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gU2VlIGFsc28gYC0tcGF0aHNwZWMtZmlsZS1udWxgIGFuZAorCWdsb2JhbCBgLS1saXRlcmFsLXBhdGhzcGVjc2AuCisKKy0tcGF0aHNwZWMtZmlsZS1udWw6OgorCU9ubHkgbWVhbmluZ2Z1bCB3aXRoIGAtLXBhdGhzcGVjLWZyb20tZmlsZWAuIFBhdGhzcGVjIGVsZW1lbnRzIGFyZQorCXNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIgYW5kIGFsbCBvdGhlciBjaGFyYWN0ZXJzIGFyZSB0YWtlbgorCWxpdGVyYWxseSAoaW5jbHVkaW5nIG5ld2xpbmVzIGFuZCBxdW90ZXMpLgorCitcLS06OgorCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCisKKzxwYXRoc3BlYz4uLi46OgorCUxpbWl0cyB0aGUgcGF0aHMgYWZmZWN0ZWQgYnkgdGhlIG9wZXJhdGlvbi4KKysKK0ZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUgJ3BhdGhzcGVjJyBlbnRyeSBpbiBsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddLgorCitFWEFNUExFUworLS0tLS0tLS0KKworVW5kbyBhZGQ6OgorKworLS0tLS0tLS0tLS0tCiskIGVkaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDE+CiskIGdpdCBhZGQgZnJvdHouYyBmaWxmcmUuYworJCBtYWlseCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwyPgorJCBnaXQgcmVzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwzPgorJCBnaXQgcHVsbCBnaXQ6Ly9pbmZvLmV4YW1wbGUuY29tLyBuaXRmb2wgIDw0PgorLS0tLS0tLS0tLS0tCisrCis8MT4gWW91IGFyZSBoYXBwaWx5IHdvcmtpbmcgb24gc29tZXRoaW5nLCBhbmQgZmluZCB0aGUgY2hhbmdlcworICAgIGluIHRoZXNlIGZpbGVzIGFyZSBpbiBnb29kIG9yZGVyLiAgWW91IGRvIG5vdCB3YW50IHRvIHNlZSB0aGVtCisgICAgd2hlbiB5b3UgcnVuIGBnaXQgZGlmZmAsIGJlY2F1c2UgeW91IHBsYW4gdG8gd29yayBvbiBvdGhlciBmaWxlcworICAgIGFuZCBjaGFuZ2VzIHdpdGggdGhlc2UgZmlsZXMgYXJlIGRpc3RyYWN0aW5nLgorPDI+IFNvbWVib2R5IGFza3MgeW91IHRvIHB1bGwsIGFuZCB0aGUgY2hhbmdlcyBzb3VuZCB3b3J0aHkgb2YgbWVyZ2luZy4KKzwzPiBIb3dldmVyLCB5b3UgYWxyZWFkeSBkaXJ0aWVkIHRoZSBpbmRleCAoaS5lLiB5b3VyIGluZGV4IGRvZXMKKyAgICBub3QgbWF0Y2ggdGhlIGBIRUFEYCBjb21taXQpLiAgQnV0IHlvdSBrbm93IHRoZSBwdWxsIHlvdSBhcmUgZ29pbmcKKyAgICB0byBtYWtlIGRvZXMgbm90IGFmZmVjdCBgZnJvdHouY2Agb3IgYGZpbGZyZS5jYCwgc28geW91IHJldmVydCB0aGUKKyAgICBpbmRleCBjaGFuZ2VzIGZvciB0aGVzZSB0d28gZmlsZXMuICBZb3VyIGNoYW5nZXMgaW4gd29ya2luZyB0cmVlCisgICAgcmVtYWluIHRoZXJlLgorPDQ+IFRoZW4geW91IGNhbiBwdWxsIGFuZCBtZXJnZSwgbGVhdmluZyBgZnJvdHouY2AgYW5kIGBmaWxmcmUuY2AKKyAgICBjaGFuZ2VzIHN0aWxsIGluIHRoZSB3b3JraW5nIHRyZWUuCisKK1VuZG8gYSBjb21taXQgYW5kIHJlZG86OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQgLi4uCiskIGdpdCByZXNldCAtLXNvZnQgSEVBRF4gICAgICA8MT4KKyQgZWRpdCAgICAgICAgICAgICAgICAgICAgICAgIDwyPgorJCBnaXQgY29tbWl0IC1hIC1jIE9SSUdfSEVBRCAgPDM+CistLS0tLS0tLS0tLS0KKysKKzwxPiBUaGlzIGlzIG1vc3Qgb2Z0ZW4gZG9uZSB3aGVuIHlvdSByZW1lbWJlcmVkIHdoYXQgeW91CisgICAganVzdCBjb21taXR0ZWQgaXMgaW5jb21wbGV0ZSwgb3IgeW91IG1pc3NwZWxsZWQgeW91ciBjb21taXQKKyAgICBtZXNzYWdlLCBvciBib3RoLiAgTGVhdmVzIHdvcmtpbmcgdHJlZSBhcyBpdCB3YXMgYmVmb3JlICJyZXNldCIuCis8Mj4gTWFrZSBjb3JyZWN0aW9ucyB0byB3b3JraW5nIHRyZWUgZmlsZXMuCis8Mz4gInJlc2V0IiBjb3BpZXMgdGhlIG9sZCBoZWFkIHRvIGAuZ2l0L09SSUdfSEVBRGA7IHJlZG8gdGhlCisgICAgY29tbWl0IGJ5IHN0YXJ0aW5nIHdpdGggaXRzIGxvZyBtZXNzYWdlLiAgSWYgeW91IGRvIG5vdCBuZWVkIHRvCisgICAgZWRpdCB0aGUgbWVzc2FnZSBmdXJ0aGVyLCB5b3UgY2FuIGdpdmUgYC1DYCBvcHRpb24gaW5zdGVhZC4KKysKK1NlZSBhbHNvIHRoZSBgLS1hbWVuZGAgb3B0aW9uIHRvIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXS4KKworVW5kbyBhIGNvbW1pdCwgbWFraW5nIGl0IGEgdG9waWMgYnJhbmNoOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIHRvcGljL3dpcCAgICAgICAgICA8MT4KKyQgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjMgICAgICAgPDI+CiskIGdpdCBzd2l0Y2ggdG9waWMvd2lwICAgICAgICAgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gWW91IGhhdmUgbWFkZSBzb21lIGNvbW1pdHMsIGJ1dCByZWFsaXplIHRoZXkgd2VyZSBwcmVtYXR1cmUKKyAgICB0byBiZSBpbiB0aGUgYG1hc3RlcmAgYnJhbmNoLiAgWW91IHdhbnQgdG8gY29udGludWUgcG9saXNoaW5nCisgICAgdGhlbSBpbiBhIHRvcGljIGJyYW5jaCwgc28gY3JlYXRlIGB0b3BpYy93aXBgIGJyYW5jaCBvZmYgb2YgdGhlCisgICAgY3VycmVudCBgSEVBRGAuCis8Mj4gUmV3aW5kIHRoZSBtYXN0ZXIgYnJhbmNoIHRvIGdldCByaWQgb2YgdGhvc2UgdGhyZWUgY29tbWl0cy4KKzwzPiBTd2l0Y2ggdG8gYHRvcGljL3dpcGAgYnJhbmNoIGFuZCBrZWVwIHdvcmtpbmcuCisKK1VuZG8gY29tbWl0cyBwZXJtYW5lbnRseTo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCAuLi4KKyQgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjMgICA8MT4KKy0tLS0tLS0tLS0tLQorKworPDE+IFRoZSBsYXN0IHRocmVlIGNvbW1pdHMgKGBIRUFEYCwgYEhFQUReYCwgYW5kIGBIRUFEfjJgKSB3ZXJlIGJhZAorICAgIGFuZCB5b3UgZG8gbm90IHdhbnQgdG8gZXZlciBzZWUgdGhlbSBhZ2Fpbi4gIERvICpub3QqIGRvIHRoaXMgaWYKKyAgICB5b3UgaGF2ZSBhbHJlYWR5IGdpdmVuIHRoZXNlIGNvbW1pdHMgdG8gc29tZWJvZHkgZWxzZS4gIChTZWUgdGhlCisgICAgIlJFQ09WRVJJTkcgRlJPTSBVUFNUUkVBTSBSRUJBU0UiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXQtcmViYXNlWzFdCisgICAgZm9yIHRoZSBpbXBsaWNhdGlvbnMgb2YgZG9pbmcgc28uKQorCitVbmRvIGEgbWVyZ2Ugb3IgcHVsbDo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgICAgICAgICAgICAgICAgICAgICAgICAgPDE+CitBdXRvLW1lcmdpbmcgbml0Zm9sCitDT05GTElDVCAoY29udGVudCk6IE1lcmdlIGNvbmZsaWN0IGluIG5pdGZvbAorQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC4KKyQgZ2l0IHJlc2V0IC0taGFyZCAgICAgICAgICAgICAgICAgPDI+CiskIGdpdCBwdWxsIC4gdG9waWMvYnJhbmNoICAgICAgICAgIDwzPgorVXBkYXRpbmcgZnJvbSA0MTIyMy4uLiB0byAxMzEzNC4uLgorRmFzdC1mb3J3YXJkCiskIGdpdCByZXNldCAtLWhhcmQgT1JJR19IRUFEICAgICAgIDw0PgorLS0tLS0tLS0tLS0tCisrCis8MT4gVHJ5IHRvIHVwZGF0ZSBmcm9tIHRoZSB1cHN0cmVhbSByZXN1bHRlZCBpbiBhIGxvdCBvZgorICAgIGNvbmZsaWN0czsgeW91IHdlcmUgbm90IHJlYWR5IHRvIHNwZW5kIGEgbG90IG9mIHRpbWUgbWVyZ2luZworICAgIHJpZ2h0IG5vdywgc28geW91IGRlY2lkZSB0byBkbyB0aGF0IGxhdGVyLgorPDI+ICJwdWxsIiBoYXMgbm90IG1hZGUgbWVyZ2UgY29tbWl0LCBzbyBgZ2l0IHJlc2V0IC0taGFyZGAKKyAgICB3aGljaCBpcyBhIHN5bm9ueW0gZm9yIGBnaXQgcmVzZXQgLS1oYXJkIEhFQURgIGNsZWFycyB0aGUgbWVzcworICAgIGZyb20gdGhlIGluZGV4IGZpbGUgYW5kIHRoZSB3b3JraW5nIHRyZWUuCis8Mz4gTWVyZ2UgYSB0b3BpYyBicmFuY2ggaW50byB0aGUgY3VycmVudCBicmFuY2gsIHdoaWNoIHJlc3VsdGVkCisgICAgaW4gYSBmYXN0LWZvcndhcmQuCis8ND4gQnV0IHlvdSBkZWNpZGVkIHRoYXQgdGhlIHRvcGljIGJyYW5jaCBpcyBub3QgcmVhZHkgZm9yIHB1YmxpYworICAgIGNvbnN1bXB0aW9uIHlldC4gICJwdWxsIiBvciAibWVyZ2UiIGFsd2F5cyBsZWF2ZXMgdGhlIG9yaWdpbmFsCisgICAgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBpbiBgT1JJR19IRUFEYCwgc28gcmVzZXR0aW5nIGhhcmQgdG8gaXQKKyAgICBicmluZ3MgeW91ciBpbmRleCBmaWxlIGFuZCB0aGUgd29ya2luZyB0cmVlIGJhY2sgdG8gdGhhdCBzdGF0ZSwKKyAgICBhbmQgcmVzZXRzIHRoZSB0aXAgb2YgdGhlIGJyYW5jaCB0byB0aGF0IGNvbW1pdC4KKworVW5kbyBhIG1lcmdlIG9yIHB1bGwgaW5zaWRlIGEgZGlydHkgd29ya2luZyB0cmVlOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbCAgICAgICAgICAgICAgICAgICAgICAgICA8MT4KK0F1dG8tbWVyZ2luZyBuaXRmb2wKK01lcmdlIG1hZGUgYnkgcmVjdXJzaXZlLgorIG5pdGZvbCAgICAgICAgICAgICAgICB8ICAgMjAgKysrKystLS0tCisgLi4uCiskIGdpdCByZXNldCAtLW1lcmdlIE9SSUdfSEVBRCAgICAgIDwyPgorLS0tLS0tLS0tLS0tCisrCis8MT4gRXZlbiBpZiB5b3UgbWF5IGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9ucyBpbiB5b3VyCisgICAgd29ya2luZyB0cmVlLCB5b3UgY2FuIHNhZmVseSBzYXkgYGdpdCBwdWxsYCB3aGVuIHlvdSBrbm93CisgICAgdGhhdCB0aGUgY2hhbmdlIGluIHRoZSBvdGhlciBicmFuY2ggZG9lcyBub3Qgb3ZlcmxhcCB3aXRoCisgICAgdGhlbS4KKzwyPiBBZnRlciBpbnNwZWN0aW5nIHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlLCB5b3UgbWF5IGZpbmQKKyAgICB0aGF0IHRoZSBjaGFuZ2UgaW4gdGhlIG90aGVyIGJyYW5jaCBpcyB1bnNhdGlzZmFjdG9yeS4gIFJ1bm5pbmcKKyAgICBgZ2l0IHJlc2V0IC0taGFyZCBPUklHX0hFQURgIHdpbGwgbGV0IHlvdSBnbyBiYWNrIHRvIHdoZXJlIHlvdQorICAgIHdlcmUsIGJ1dCBpdCB3aWxsIGRpc2NhcmQgeW91ciBsb2NhbCBjaGFuZ2VzLCB3aGljaCB5b3UgZG8gbm90CisgICAgd2FudC4gIGBnaXQgcmVzZXQgLS1tZXJnZWAga2VlcHMgeW91ciBsb2NhbCBjaGFuZ2VzLgorCisKK0ludGVycnVwdGVkIHdvcmtmbG93OjoKKysKK1N1cHBvc2UgeW91IGFyZSBpbnRlcnJ1cHRlZCBieSBhbiB1cmdlbnQgZml4IHJlcXVlc3Qgd2hpbGUgeW91CithcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGxhcmdlIGNoYW5nZS4gIFRoZSBmaWxlcyBpbiB5b3VyCit3b3JraW5nIHRyZWUgYXJlIG5vdCBpbiBhbnkgc2hhcGUgdG8gYmUgY29tbWl0dGVkIHlldCwgYnV0IHlvdQorbmVlZCB0byBnZXQgdG8gdGhlIG90aGVyIGJyYW5jaCBmb3IgYSBxdWljayBidWdmaXguCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCBmZWF0dXJlICA7IyB5b3Ugd2VyZSB3b3JraW5nIGluICJmZWF0dXJlIiBicmFuY2ggYW5kCiskIHdvcmsgd29yayB3b3JrICAgICAgOyMgZ290IGludGVycnVwdGVkCiskIGdpdCBjb21taXQgLWEgLW0gInNuYXBzaG90IFdJUCIgICAgICAgICAgICAgICAgIDwxPgorJCBnaXQgc3dpdGNoIG1hc3RlcgorJCBmaXggZml4IGZpeAorJCBnaXQgY29tbWl0IDsjIGNvbW1pdCB3aXRoIHJlYWwgbG9nCiskIGdpdCBzd2l0Y2ggZmVhdHVyZQorJCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReIDsjIGdvIGJhY2sgdG8gV0lQIHN0YXRlICA8Mj4KKyQgZ2l0IHJlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDM+CistLS0tLS0tLS0tLS0KKysKKzwxPiBUaGlzIGNvbW1pdCB3aWxsIGdldCBibG93biBhd2F5IHNvIGEgdGhyb3ctYXdheSBsb2cgbWVzc2FnZSBpcyBPSy4KKzwyPiBUaGlzIHJlbW92ZXMgdGhlICdXSVAnIGNvbW1pdCBmcm9tIHRoZSBjb21taXQgaGlzdG9yeSwgYW5kIHNldHMKKyAgICB5b3VyIHdvcmtpbmcgdHJlZSB0byB0aGUgc3RhdGUganVzdCBiZWZvcmUgeW91IG1hZGUgdGhhdCBzbmFwc2hvdC4KKzwzPiBBdCB0aGlzIHBvaW50IHRoZSBpbmRleCBmaWxlIHN0aWxsIGhhcyBhbGwgdGhlIFdJUCBjaGFuZ2VzIHlvdQorICAgIGNvbW1pdHRlZCBhcyAnc25hcHNob3QgV0lQJy4gIFRoaXMgdXBkYXRlcyB0aGUgaW5kZXggdG8gc2hvdyB5b3VyCisgICAgV0lQIGZpbGVzIGFzIHVuY29tbWl0dGVkLgorKworU2VlIGFsc28gbGlua2dpdDpnaXQtc3Rhc2hbMV0uCisKK1Jlc2V0IGEgc2luZ2xlIGZpbGUgaW4gdGhlIGluZGV4OjoKKysKK1N1cHBvc2UgeW91IGhhdmUgYWRkZWQgYSBmaWxlIHRvIHlvdXIgaW5kZXgsIGJ1dCBsYXRlciBkZWNpZGUgeW91IGRvIG5vdAord2FudCB0byBhZGQgaXQgdG8geW91ciBjb21taXQuIFlvdSBjYW4gcmVtb3ZlIHRoZSBmaWxlIGZyb20gdGhlIGluZGV4Cit3aGlsZSBrZWVwaW5nIHlvdXIgY2hhbmdlcyB3aXRoIGdpdCByZXNldC4KKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVzZXQgLS0gZnJvdHouYyAgICAgICAgICAgICAgICAgICAgICA8MT4KKyQgZ2l0IGNvbW1pdCAtbSAiQ29tbWl0IGZpbGVzIGluIGluZGV4IiAgICAgPDI+CiskIGdpdCBhZGQgZnJvdHouYyAgICAgICAgICAgICAgICAgICAgICAgICAgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gVGhpcyByZW1vdmVzIHRoZSBmaWxlIGZyb20gdGhlIGluZGV4IHdoaWxlIGtlZXBpbmcgaXQgaW4gdGhlIHdvcmtpbmcKKyAgICBkaXJlY3RvcnkuCis8Mj4gVGhpcyBjb21taXRzIGFsbCBvdGhlciBjaGFuZ2VzIGluIHRoZSBpbmRleC4KKzwzPiBBZGRzIHRoZSBmaWxlIHRvIHRoZSBpbmRleCBhZ2Fpbi4KKworS2VlcCBjaGFuZ2VzIGluIHdvcmtpbmcgdHJlZSB3aGlsZSBkaXNjYXJkaW5nIHNvbWUgcHJldmlvdXMgY29tbWl0czo6CisrCitTdXBwb3NlIHlvdSBhcmUgd29ya2luZyBvbiBzb21ldGhpbmcgYW5kIHlvdSBjb21taXQgaXQsIGFuZCB0aGVuIHlvdQorY29udGludWUgd29ya2luZyBhIGJpdCBtb3JlLCBidXQgbm93IHlvdSB0aGluayB0aGF0IHdoYXQgeW91IGhhdmUgaW4KK3lvdXIgd29ya2luZyB0cmVlIHNob3VsZCBiZSBpbiBhbm90aGVyIGJyYW5jaCB0aGF0IGhhcyBub3RoaW5nIHRvIGRvCit3aXRoIHdoYXQgeW91IGNvbW1pdHRlZCBwcmV2aW91c2x5LiBZb3UgY2FuIHN0YXJ0IGEgbmV3IGJyYW5jaCBhbmQKK3Jlc2V0IGl0IHdoaWxlIGtlZXBpbmcgdGhlIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHRhZyBzdGFydAorJCBnaXQgc3dpdGNoIC1jIGJyYW5jaDEKKyQgZWRpdAorJCBnaXQgY29tbWl0IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8MT4KKyQgZWRpdAorJCBnaXQgc3dpdGNoIC1jIGJyYW5jaDIgICAgICAgICAgICAgICAgICAgICA8Mj4KKyQgZ2l0IHJlc2V0IC0ta2VlcCBzdGFydCAgICAgICAgICAgICAgICAgICAgPDM+CistLS0tLS0tLS0tLS0KKysKKzwxPiBUaGlzIGNvbW1pdHMgeW91ciBmaXJzdCBlZGl0cyBpbiBgYnJhbmNoMWAuCis8Mj4gSW4gdGhlIGlkZWFsIHdvcmxkLCB5b3UgY291bGQgaGF2ZSByZWFsaXplZCB0aGF0IHRoZSBlYXJsaWVyCisgICAgY29tbWl0IGRpZCBub3QgYmVsb25nIHRvIHRoZSBuZXcgdG9waWMgd2hlbiB5b3UgY3JlYXRlZCBhbmQgc3dpdGNoZWQKKyAgICB0byBgYnJhbmNoMmAgKGkuZS4gYGdpdCBzd2l0Y2ggLWMgYnJhbmNoMiBzdGFydGApLCBidXQgbm9ib2R5IGlzCisgICAgcGVyZmVjdC4KKzwzPiBCdXQgeW91IGNhbiB1c2UgYHJlc2V0IC0ta2VlcGAgdG8gcmVtb3ZlIHRoZSB1bndhbnRlZCBjb21taXQgYWZ0ZXIKKyAgICB5b3Ugc3dpdGNoZWQgdG8gYGJyYW5jaDJgLgorCitTcGxpdCBhIGNvbW1pdCBhcGFydCBpbnRvIGEgc2VxdWVuY2Ugb2YgY29tbWl0czo6CisrCitTdXBwb3NlIHRoYXQgeW91IGhhdmUgY3JlYXRlZCBsb3RzIG9mIGxvZ2ljYWxseSBzZXBhcmF0ZSBjaGFuZ2VzIGFuZCBjb21taXR0ZWQKK3RoZW0gdG9nZXRoZXIuIFRoZW4sIGxhdGVyIHlvdSBkZWNpZGUgdGhhdCBpdCBtaWdodCBiZSBiZXR0ZXIgdG8gaGF2ZSBlYWNoCitsb2dpY2FsIGNodW5rIGFzc29jaWF0ZWQgd2l0aCBpdHMgb3duIGNvbW1pdC4gWW91IGNhbiB1c2UgZ2l0IHJlc2V0IHRvIHJld2luZAoraGlzdG9yeSB3aXRob3V0IGNoYW5naW5nIHRoZSBjb250ZW50cyBvZiB5b3VyIGxvY2FsIGZpbGVzLCBhbmQgdGhlbiBzdWNjZXNzaXZlbHkKK3VzZSBgZ2l0IGFkZCAtcGAgdG8gaW50ZXJhY3RpdmVseSBzZWxlY3Qgd2hpY2ggaHVua3MgdG8gaW5jbHVkZSBpbnRvIGVhY2ggY29tbWl0LAordXNpbmcgYGdpdCBjb21taXQgLWNgIHRvIHByZS1wb3B1bGF0ZSB0aGUgY29tbWl0IG1lc3NhZ2UuCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc2V0IC1OIEhFQUReICAgICAgICAgICAgICAgICAgICAgICAgPDE+CiskIGdpdCBhZGQgLXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwyPgorJCBnaXQgZGlmZiAtLWNhY2hlZCAgICAgICAgICAgICAgICAgICAgICAgICA8Mz4KKyQgZ2l0IGNvbW1pdCAtYyBIRUFEQHsxfSAgICAgICAgICAgICAgICAgICAgPDQ+CisuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw1PgorJCBnaXQgYWRkIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Nj4KKyQgZ2l0IGRpZmYgLS1jYWNoZWQgICAgICAgICAgICAgICAgICAgICAgICAgPDc+CiskIGdpdCBjb21taXQgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw4PgorLS0tLS0tLS0tLS0tCisrCis8MT4gRmlyc3QsIHJlc2V0IHRoZSBoaXN0b3J5IGJhY2sgb25lIGNvbW1pdCBzbyB0aGF0IHdlIHJlbW92ZSB0aGUgb3JpZ2luYWwKKyAgICBjb21taXQsIGJ1dCBsZWF2ZSB0aGUgd29ya2luZyB0cmVlIHdpdGggYWxsIHRoZSBjaGFuZ2VzLiBUaGUgLU4gZW5zdXJlcworICAgIHRoYXQgYW55IG5ldyBmaWxlcyBhZGRlZCB3aXRoIGBIRUFEYCBhcmUgc3RpbGwgbWFya2VkIHNvIHRoYXQgYGdpdCBhZGQgLXBgCisgICAgd2lsbCBmaW5kIHRoZW0uCis8Mj4gTmV4dCwgd2UgaW50ZXJhY3RpdmVseSBzZWxlY3QgZGlmZiBodW5rcyB0byBhZGQgdXNpbmcgdGhlIGBnaXQgYWRkIC1wYAorICAgIGZhY2lsaXR5LiBUaGlzIHdpbGwgYXNrIHlvdSBhYm91dCBlYWNoIGRpZmYgaHVuayBpbiBzZXF1ZW5jZSBhbmQgeW91IGNhbgorICAgIHVzZSBzaW1wbGUgY29tbWFuZHMgc3VjaCBhcyAieWVzLCBpbmNsdWRlIHRoaXMiLCAiTm8gZG9uJ3QgaW5jbHVkZSB0aGlzIgorICAgIG9yIGV2ZW4gdGhlIHZlcnkgcG93ZXJmdWwgImVkaXQiIGZhY2lsaXR5LgorPDM+IE9uY2Ugc2F0aXNmaWVkIHdpdGggdGhlIGh1bmtzIHlvdSB3YW50IHRvIGluY2x1ZGUsIHlvdSBzaG91bGQgdmVyaWZ5IHdoYXQKKyAgICBoYXMgYmVlbiBwcmVwYXJlZCBmb3IgdGhlIGZpcnN0IGNvbW1pdCBieSB1c2luZyBgZ2l0IGRpZmYgLS1jYWNoZWRgLiBUaGlzCisgICAgc2hvd3MgYWxsIHRoZSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG1vdmVkIGludG8gdGhlIGluZGV4IGFuZCBhcmUgYWJvdXQKKyAgICB0byBiZSBjb21taXR0ZWQuCis8ND4gTmV4dCwgY29tbWl0IHRoZSBjaGFuZ2VzIHN0b3JlZCBpbiB0aGUgaW5kZXguIFRoZSBgLWNgIG9wdGlvbiBzcGVjaWZpZXMgdG8KKyAgICBwcmUtcG9wdWxhdGUgdGhlIGNvbW1pdCBtZXNzYWdlIGZyb20gdGhlIG9yaWdpbmFsIG1lc3NhZ2UgdGhhdCB5b3Ugc3RhcnRlZAorICAgIHdpdGggaW4gdGhlIGZpcnN0IGNvbW1pdC4gVGhpcyBpcyBoZWxwZnVsIHRvIGF2b2lkIHJldHlwaW5nIGl0LiBUaGUKKyAgICBgSEVBREB7MX1gIGlzIGEgc3BlY2lhbCBub3RhdGlvbiBmb3IgdGhlIGNvbW1pdCB0aGF0IGBIRUFEYCB1c2VkIHRvIGJlIGF0CisgICAgcHJpb3IgdG8gdGhlIG9yaWdpbmFsIHJlc2V0IGNvbW1pdCAoMSBjaGFuZ2UgYWdvKS4KKyAgICBTZWUgbGlua2dpdDpnaXQtcmVmbG9nWzFdIGZvciBtb3JlIGRldGFpbHMuIFlvdSBtYXkgYWxzbyB1c2UgYW55IG90aGVyCisgICAgdmFsaWQgY29tbWl0IHJlZmVyZW5jZS4KKzw1PiBZb3UgY2FuIHJlcGVhdCBzdGVwcyAyLTQgbXVsdGlwbGUgdGltZXMgdG8gYnJlYWsgdGhlIG9yaWdpbmFsIGNvZGUgaW50bworICAgIGFueSBudW1iZXIgb2YgY29tbWl0cy4KKzw2PiBOb3cgeW91J3ZlIHNwbGl0IG91dCBtYW55IG9mIHRoZSBjaGFuZ2VzIGludG8gdGhlaXIgb3duIGNvbW1pdHMsIGFuZCBtaWdodAorICAgIG5vIGxvbmdlciB1c2UgdGhlIHBhdGNoIG1vZGUgb2YgYGdpdCBhZGRgLCBpbiBvcmRlciB0byBzZWxlY3QgYWxsIHJlbWFpbmluZworICAgIHVuY29tbWl0dGVkIGNoYW5nZXMuCis8Nz4gT25jZSBhZ2FpbiwgY2hlY2sgdG8gdmVyaWZ5IHRoYXQgeW91J3ZlIGluY2x1ZGVkIHdoYXQgeW91IHdhbnQgdG8uIFlvdSBtYXkKKyAgICBhbHNvIHdpc2ggdG8gdmVyaWZ5IHRoYXQgZ2l0IGRpZmYgZG9lc24ndCBzaG93IGFueSByZW1haW5pbmcgY2hhbmdlcyB0byBiZQorICAgIGNvbW1pdHRlZCBsYXRlci4KKzw4PiBBbmQgZmluYWxseSBjcmVhdGUgdGhlIGZpbmFsIGNvbW1pdC4KKworCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK1RoZSB0YWJsZXMgYmVsb3cgc2hvdyB3aGF0IGhhcHBlbnMgd2hlbiBydW5uaW5nOgorCistLS0tLS0tLS0tCitnaXQgcmVzZXQgLS1vcHRpb24gdGFyZ2V0CistLS0tLS0tLS0tCisKK3RvIHJlc2V0IHRoZSBgSEVBRGAgdG8gYW5vdGhlciBjb21taXQgKGB0YXJnZXRgKSB3aXRoIHRoZSBkaWZmZXJlbnQKK3Jlc2V0IG9wdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSBvZiB0aGUgZmlsZXMuCisKK0luIHRoZXNlIHRhYmxlcywgYEFgLCBgQmAsIGBDYCBhbmQgYERgIGFyZSBzb21lIGRpZmZlcmVudCBzdGF0ZXMgb2YgYQorZmlsZS4gRm9yIGV4YW1wbGUsIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmaXJzdCB0YWJsZSBtZWFucyB0aGF0IGlmIGEKK2ZpbGUgaXMgaW4gc3RhdGUgYEFgIGluIHRoZSB3b3JraW5nIHRyZWUsIGluIHN0YXRlIGBCYCBpbiB0aGUgaW5kZXgsIGluCitzdGF0ZSBgQ2AgaW4gYEhFQURgIGFuZCBpbiBzdGF0ZSBgRGAgaW4gdGhlIHRhcmdldCwgdGhlbiBgZ2l0IHJlc2V0IC0tc29mdAordGFyZ2V0YCB3aWxsIGxlYXZlIHRoZSBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUgaW4gc3RhdGUgYEFgIGFuZCBpbiB0aGUKK2luZGV4IGluIHN0YXRlIGBCYC4gIEl0IHJlc2V0cyAoaS5lLiBtb3ZlcykgdGhlIGBIRUFEYCAoaS5lLiB0aGUgdGlwIG9mCit0aGUgY3VycmVudCBicmFuY2gsIGlmIHlvdSBhcmUgb24gb25lKSB0byBgdGFyZ2V0YCAod2hpY2ggaGFzIHRoZSBmaWxlCitpbiBzdGF0ZSBgRGApLgorCisuLi4uCit3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQSAgICAgICBCICAgICBDICAgIEQgICAgIC0tc29mdCAgIEEgICAgICAgQiAgICAgRAorCQkJICAtLW1peGVkICBBICAgICAgIEQgICAgIEQKKwkJCSAgLS1oYXJkICAgRCAgICAgICBEICAgICBECisJCQkgIC0tbWVyZ2UgKGRpc2FsbG93ZWQpCisJCQkgIC0ta2VlcCAgKGRpc2FsbG93ZWQpCisuLi4uCisKKy4uLi4KK3dvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBICAgICAgIEIgICAgIEMgICAgQyAgICAgLS1zb2Z0ICAgQSAgICAgICBCICAgICBDCisJCQkgIC0tbWl4ZWQgIEEgICAgICAgQyAgICAgQworCQkJICAtLWhhcmQgICBDICAgICAgIEMgICAgIEMKKwkJCSAgLS1tZXJnZSAoZGlzYWxsb3dlZCkKKwkJCSAgLS1rZWVwICAgQSAgICAgICBDICAgICBDCisuLi4uCisKKy4uLi4KK3dvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCICAgICAgIEIgICAgIEMgICAgRCAgICAgLS1zb2Z0ICAgQiAgICAgICBCICAgICBECisJCQkgIC0tbWl4ZWQgIEIgICAgICAgRCAgICAgRAorCQkJICAtLWhhcmQgICBEICAgICAgIEQgICAgIEQKKwkJCSAgLS1tZXJnZSAgRCAgICAgICBEICAgICBECisJCQkgIC0ta2VlcCAgKGRpc2FsbG93ZWQpCisuLi4uCisKKy4uLi4KK3dvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCICAgICAgIEIgICAgIEMgICAgQyAgICAgLS1zb2Z0ICAgQiAgICAgICBCICAgICBDCisJCQkgIC0tbWl4ZWQgIEIgICAgICAgQyAgICAgQworCQkJICAtLWhhcmQgICBDICAgICAgIEMgICAgIEMKKwkJCSAgLS1tZXJnZSAgQyAgICAgICBDICAgICBDCisJCQkgIC0ta2VlcCAgIEIgICAgICAgQyAgICAgQworLi4uLgorCisuLi4uCit3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQiAgICAgICBDICAgICBDICAgIEQgICAgIC0tc29mdCAgIEIgICAgICAgQyAgICAgRAorCQkJICAtLW1peGVkICBCICAgICAgIEQgICAgIEQKKwkJCSAgLS1oYXJkICAgRCAgICAgICBEICAgICBECisJCQkgIC0tbWVyZ2UgKGRpc2FsbG93ZWQpCisJCQkgIC0ta2VlcCAgKGRpc2FsbG93ZWQpCisuLi4uCisKKy4uLi4KK3dvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCICAgICAgIEMgICAgIEMgICAgQyAgICAgLS1zb2Z0ICAgQiAgICAgICBDICAgICBDCisJCQkgIC0tbWl4ZWQgIEIgICAgICAgQyAgICAgQworCQkJICAtLWhhcmQgICBDICAgICAgIEMgICAgIEMKKwkJCSAgLS1tZXJnZSAgQiAgICAgICBDICAgICBDCisJCQkgIC0ta2VlcCAgIEIgICAgICAgQyAgICAgQworLi4uLgorCitgcmVzZXQgLS1tZXJnZWAgaXMgbWVhbnQgdG8gYmUgdXNlZCB3aGVuIHJlc2V0dGluZyBvdXQgb2YgYSBjb25mbGljdGVkCittZXJnZS4gQW55IG1lcmd5IG9wZXJhdGlvbiBndWFyYW50ZWVzIHRoYXQgdGhlIHdvcmtpbmcgdHJlZSBmaWxlIHRoYXQgaXMKK2ludm9sdmVkIGluIHRoZSBtZXJnZSBkb2VzIG5vdCBoYXZlIGEgbG9jYWwgY2hhbmdlIHdpdGggcmVzcGVjdCB0byB0aGUgaW5kZXgKK2JlZm9yZSBpdCBzdGFydHMsIGFuZCB0aGF0IGl0IHdyaXRlcyB0aGUgcmVzdWx0IG91dCB0byB0aGUgd29ya2luZyB0cmVlLiBTbyBpZgord2Ugc2VlIHNvbWUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbmRleCBhbmQgdGhlIHRhcmdldCBhbmQgYWxzbworYmV0d2VlbiB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUsIHRoZW4gaXQgbWVhbnMgdGhhdCB3ZSBhcmUgbm90CityZXNldHRpbmcgb3V0IGZyb20gYSBzdGF0ZSB0aGF0IGEgbWVyZ3kgb3BlcmF0aW9uIGxlZnQgYWZ0ZXIgZmFpbGluZword2l0aCBhIGNvbmZsaWN0LiBUaGF0IGlzIHdoeSB3ZSBkaXNhbGxvdyBgLS1tZXJnZWAgb3B0aW9uIGluIHRoaXMgY2FzZS4KKworYHJlc2V0IC0ta2VlcGAgaXMgbWVhbnQgdG8gYmUgdXNlZCB3aGVuIHJlbW92aW5nIHNvbWUgb2YgdGhlIGxhc3QKK2NvbW1pdHMgaW4gdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIGtlZXBpbmcgY2hhbmdlcyBpbiB0aGUgd29ya2luZwordHJlZS4gSWYgdGhlcmUgY291bGQgYmUgY29uZmxpY3RzIGJldHdlZW4gdGhlIGNoYW5nZXMgaW4gdGhlIGNvbW1pdCB3ZQord2FudCB0byByZW1vdmUgYW5kIHRoZSBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUgd2Ugd2FudCB0byBrZWVwLAordGhlIHJlc2V0IGlzIGRpc2FsbG93ZWQuIFRoYXQncyB3aHkgaXQgaXMgZGlzYWxsb3dlZCBpZiB0aGVyZSBhcmUgYm90aAorY2hhbmdlcyBiZXR3ZWVuIHRoZSB3b3JraW5nIHRyZWUgYW5kIGBIRUFEYCwgYW5kIGJldHdlZW4gYEhFQURgIGFuZCB0aGUKK3RhcmdldC4gVG8gYmUgc2FmZSwgaXQgaXMgYWxzbyBkaXNhbGxvd2VkIHdoZW4gdGhlcmUgYXJlIHVubWVyZ2VkCitlbnRyaWVzLgorCitUaGUgZm9sbG93aW5nIHRhYmxlcyBzaG93IHdoYXQgaGFwcGVucyB3aGVuIHRoZXJlIGFyZSB1bm1lcmdlZAorZW50cmllczoKKworLi4uLgord29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFggICAgICAgVSAgICAgQSAgICBCICAgICAtLXNvZnQgIChkaXNhbGxvd2VkKQorCQkJICAtLW1peGVkICBYICAgICAgIEIgICAgIEIKKwkJCSAgLS1oYXJkICAgQiAgICAgICBCICAgICBCCisJCQkgIC0tbWVyZ2UgIEIgICAgICAgQiAgICAgQgorCQkJICAtLWtlZXAgIChkaXNhbGxvd2VkKQorLi4uLgorCisuLi4uCit3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgWCAgICAgICBVICAgICBBICAgIEEgICAgIC0tc29mdCAgKGRpc2FsbG93ZWQpCisJCQkgIC0tbWl4ZWQgIFggICAgICAgQSAgICAgQQorCQkJICAtLWhhcmQgICBBICAgICAgIEEgICAgIEEKKwkJCSAgLS1tZXJnZSAgQSAgICAgICBBICAgICBBCisJCQkgIC0ta2VlcCAgKGRpc2FsbG93ZWQpCisuLi4uCisKK2BYYCBtZWFucyBhbnkgc3RhdGUgYW5kIGBVYCBtZWFucyBhbiB1bm1lcmdlZCBpbmRleC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXN0b3JlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlc3RvcmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YzZjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXN0b3JlLnR4dApAQCAtMCwwICsxLDIxNSBAQAorZ2l0LXJlc3RvcmUoMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZXN0b3JlIC0gUmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJlc3RvcmUnIFs8b3B0aW9ucz5dIFstLXNvdXJjZT08dHJlZT5dIFstLXN0YWdlZF0gWy0td29ya3RyZWVdIFstLV0gPHBhdGhzcGVjPi4uLgorJ2dpdCByZXN0b3JlJyBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PHRyZWU+XSBbLS1zdGFnZWRdIFstLXdvcmt0cmVlXSAtLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdCisnZ2l0IHJlc3RvcmUnICgtcHwtLXBhdGNoKSBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PHRyZWU+XSBbLS1zdGFnZWRdIFstLXdvcmt0cmVlXSBbLS1dIFs8cGF0aHNwZWM+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1Jlc3RvcmUgc3BlY2lmaWVkIHBhdGhzIGluIHRoZSB3b3JraW5nIHRyZWUgd2l0aCBzb21lIGNvbnRlbnRzIGZyb20gYQorcmVzdG9yZSBzb3VyY2UuIElmIGEgcGF0aCBpcyB0cmFja2VkIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcmVzdG9yZQorc291cmNlLCBpdCB3aWxsIGJlIHJlbW92ZWQgdG8gbWF0Y2ggdGhlIHNvdXJjZS4KKworVGhlIGNvbW1hbmQgY2FuIGFsc28gYmUgdXNlZCB0byByZXN0b3JlIHRoZSBjb250ZW50IGluIHRoZSBpbmRleCB3aXRoCitgLS1zdGFnZWRgLCBvciByZXN0b3JlIGJvdGggdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IHdpdGgKK2AtLXN0YWdlZCAtLXdvcmt0cmVlYC4KKworQnkgZGVmYXVsdCwgaWYgYC0tc3RhZ2VkYCBpcyBnaXZlbiwgdGhlIGNvbnRlbnRzIGFyZSByZXN0b3JlZCBmcm9tIGBIRUFEYCwKK290aGVyd2lzZSBmcm9tIHRoZSBpbmRleC4gVXNlIGAtLXNvdXJjZWAgdG8gcmVzdG9yZSBmcm9tIGEgZGlmZmVyZW50IGNvbW1pdC4KKworU2VlICJSZXNldCwgcmVzdG9yZSBhbmQgcmV2ZXJ0IiBpbiBsaW5rZ2l0OmdpdFsxXSBmb3IgdGhlIGRpZmZlcmVuY2VzCitiZXR3ZWVuIHRoZSB0aHJlZSBjb21tYW5kcy4KKworVEhJUyBDT01NQU5EIElTIEVYUEVSSU1FTlRBTC4gVEhFIEJFSEFWSU9SIE1BWSBDSEFOR0UuCisKK09QVElPTlMKKy0tLS0tLS0KKy1zIDx0cmVlPjo6CistLXNvdXJjZT08dHJlZT46OgorCVJlc3RvcmUgdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyB3aXRoIHRoZSBjb250ZW50IGZyb20gdGhlIGdpdmVuCisJdHJlZS4gSXQgaXMgY29tbW9uIHRvIHNwZWNpZnkgdGhlIHNvdXJjZSB0cmVlIGJ5IG5hbWluZyBhCisJY29tbWl0LCBicmFuY2ggb3IgdGFnIGFzc29jaWF0ZWQgd2l0aCBpdC4KKysKK0lmIG5vdCBzcGVjaWZpZWQsIHRoZSBjb250ZW50cyBhcmUgcmVzdG9yZWQgZnJvbSBgSEVBRGAgaWYgYC0tc3RhZ2VkYCBpcworZ2l2ZW4sIG90aGVyd2lzZSBmcm9tIHRoZSBpbmRleC4KKworLXA6OgorLS1wYXRjaDo6CisJSW50ZXJhY3RpdmVseSBzZWxlY3QgaHVua3MgaW4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUKKwlyZXN0b3JlIHNvdXJjZSBhbmQgdGhlIHJlc3RvcmUgbG9jYXRpb24uIFNlZSB0aGUgYGBJbnRlcmFjdGl2ZQorCU1vZGUnJyBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWFkZFsxXSB0byBsZWFybiBob3cgdG8gb3BlcmF0ZQorCXRoZSBgLS1wYXRjaGAgbW9kZS4KKysKK05vdGUgdGhhdCBgLS1wYXRjaGAgY2FuIGFjY2VwdCBubyBwYXRoc3BlYyBhbmQgd2lsbCBwcm9tcHQgdG8gcmVzdG9yZQorYWxsIG1vZGlmaWVkIHBhdGhzLgorCistVzo6CistLXdvcmt0cmVlOjoKKy1TOjoKKy0tc3RhZ2VkOjoKKwlTcGVjaWZ5IHRoZSByZXN0b3JlIGxvY2F0aW9uLiBJZiBuZWl0aGVyIG9wdGlvbiBpcyBzcGVjaWZpZWQsCisJYnkgZGVmYXVsdCB0aGUgd29ya2luZyB0cmVlIGlzIHJlc3RvcmVkLiBTcGVjaWZ5aW5nIGAtLXN0YWdlZGAKKwl3aWxsIG9ubHkgcmVzdG9yZSB0aGUgaW5kZXguIFNwZWNpZnlpbmcgYm90aCByZXN0b3JlcyBib3RoLgorCistcTo6CistLXF1aWV0OjoKKwlRdWlldCwgc3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMuIEltcGxpZXMgYC0tbm8tcHJvZ3Jlc3NgLgorCistLXByb2dyZXNzOjoKKy0tbm8tcHJvZ3Jlc3M6OgorCVByb2dyZXNzIHN0YXR1cyBpcyByZXBvcnRlZCBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtCisJYnkgZGVmYXVsdCB3aGVuIGl0IGlzIGF0dGFjaGVkIHRvIGEgdGVybWluYWwsIHVubGVzcyBgLS1xdWlldGAKKwlpcyBzcGVjaWZpZWQuIFRoaXMgZmxhZyBlbmFibGVzIHByb2dyZXNzIHJlcG9ydGluZyBldmVuIGlmIG5vdAorCWF0dGFjaGVkIHRvIGEgdGVybWluYWwsIHJlZ2FyZGxlc3Mgb2YgYC0tcXVpZXRgLgorCistLW91cnM6OgorLS10aGVpcnM6OgorCVdoZW4gcmVzdG9yaW5nIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgZnJvbSB0aGUgaW5kZXgsIHVzZQorCXN0YWdlICMyICgnb3VycycpIG9yICMzICgndGhlaXJzJykgZm9yIHVubWVyZ2VkIHBhdGhzLgorKworTm90ZSB0aGF0IGR1cmluZyBgZ2l0IHJlYmFzZWAgYW5kIGBnaXQgcHVsbCAtLXJlYmFzZWAsICdvdXJzJyBhbmQKKyd0aGVpcnMnIG1heSBhcHBlYXIgc3dhcHBlZC4gU2VlIHRoZSBleHBsYW5hdGlvbiBvZiB0aGUgc2FtZSBvcHRpb25zCitpbiBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSBmb3IgZGV0YWlscy4KKworLW06OgorLS1tZXJnZTo6CisJV2hlbiByZXN0b3JpbmcgZmlsZXMgb24gdGhlIHdvcmtpbmcgdHJlZSBmcm9tIHRoZSBpbmRleCwKKwlyZWNyZWF0ZSB0aGUgY29uZmxpY3RlZCBtZXJnZSBpbiB0aGUgdW5tZXJnZWQgcGF0aHMuCisKKy0tY29uZmxpY3Q9PHN0eWxlPjo6CisJVGhlIHNhbWUgYXMgYC0tbWVyZ2VgIG9wdGlvbiBhYm92ZSwgYnV0IGNoYW5nZXMgdGhlIHdheSB0aGUKKwljb25mbGljdGluZyBodW5rcyBhcmUgcHJlc2VudGVkLCBvdmVycmlkaW5nIHRoZQorCWBtZXJnZS5jb25mbGljdFN0eWxlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiAgUG9zc2libGUgdmFsdWVzCisJYXJlICJtZXJnZSIgKGRlZmF1bHQpIGFuZCAiZGlmZjMiIChpbiBhZGRpdGlvbiB0byB3aGF0IGlzCisJc2hvd24gYnkgIm1lcmdlIiBzdHlsZSwgc2hvd3MgdGhlIG9yaWdpbmFsIGNvbnRlbnRzKS4KKworLS1pZ25vcmUtdW5tZXJnZWQ6OgorCVdoZW4gcmVzdG9yaW5nIGZpbGVzIG9uIHRoZSB3b3JraW5nIHRyZWUgZnJvbSB0aGUgaW5kZXgsIGRvCisJbm90IGFib3J0IHRoZSBvcGVyYXRpb24gaWYgdGhlcmUgYXJlIHVubWVyZ2VkIGVudHJpZXMgYW5kCisJbmVpdGhlciBgLS1vdXJzYCwgYC0tdGhlaXJzYCwgYC0tbWVyZ2VgIG9yIGAtLWNvbmZsaWN0YCBpcworCXNwZWNpZmllZC4gVW5tZXJnZWQgcGF0aHMgb24gdGhlIHdvcmtpbmcgdHJlZSBhcmUgbGVmdCBhbG9uZS4KKworLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1iaXRzOjoKKwlJbiBzcGFyc2UgY2hlY2tvdXQgbW9kZSwgYnkgZGVmYXVsdCBpcyB0byBvbmx5IHVwZGF0ZSBlbnRyaWVzCisJbWF0Y2hlZCBieSBgPHBhdGhzcGVjPmAgYW5kIHNwYXJzZSBwYXR0ZXJucyBpbgorCSRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0LiBUaGlzIG9wdGlvbiBpZ25vcmVzIHRoZSBzcGFyc2UKKwlwYXR0ZXJucyBhbmQgdW5jb25kaXRpb25hbGx5IHJlc3RvcmVzIGFueSBmaWxlcyBpbgorCWA8cGF0aHNwZWM+YC4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorCUlmIGA8cGF0aHNwZWM+YCBuYW1lcyBhbiBhY3RpdmUgc3VibW9kdWxlIGFuZCB0aGUgcmVzdG9yZSBsb2NhdGlvbgorCWluY2x1ZGVzIHRoZSB3b3JraW5nIHRyZWUsIHRoZSBzdWJtb2R1bGUgd2lsbCBvbmx5IGJlIHVwZGF0ZWQgaWYKKwl0aGlzIG9wdGlvbiBpcyBnaXZlbiwgaW4gd2hpY2ggY2FzZSBpdHMgd29ya2luZyB0cmVlIHdpbGwgYmUKKwlyZXN0b3JlZCB0byB0aGUgY29tbWl0IHJlY29yZGVkIGluIHRoZSBzdXBlcnByb2plY3QsIGFuZCBhbnkgbG9jYWwKKwltb2RpZmljYXRpb25zIG92ZXJ3cml0dGVuLiBJZiBub3RoaW5nIChvcgorCWAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlc2ApIGlzIHVzZWQsIHN1Ym1vZHVsZXMgd29ya2luZyB0cmVlcyB3aWxsCisJbm90IGJlIHVwZGF0ZWQuIEp1c3QgbGlrZSBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwgdGhpcyB3aWxsIGRldGFjaAorCWBIRUFEYCBvZiB0aGUgc3VibW9kdWxlLgorCistLW92ZXJsYXk6OgorLS1uby1vdmVybGF5OjoKKwlJbiBvdmVybGF5IG1vZGUsIHRoZSBjb21tYW5kIG5ldmVyIHJlbW92ZXMgZmlsZXMgd2hlbgorCXJlc3RvcmluZy4gSW4gbm8tb3ZlcmxheSBtb2RlLCB0cmFja2VkIGZpbGVzIHRoYXQgZG8gbm90CisJYXBwZWFyIGluIHRoZSBgLS1zb3VyY2VgIHRyZWUgYXJlIHJlbW92ZWQsIHRvIG1ha2UgdGhlbSBtYXRjaAorCWA8dHJlZT5gIGV4YWN0bHkuIFRoZSBkZWZhdWx0IGlzIG5vLW92ZXJsYXkgbW9kZS4KKworLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+OjoKKwlQYXRoc3BlYyBpcyBwYXNzZWQgaW4gYDxmaWxlPmAgaW5zdGVhZCBvZiBjb21tYW5kbGluZSBhcmdzLiBJZgorCWA8ZmlsZT5gIGlzIGV4YWN0bHkgYC1gIHRoZW4gc3RhbmRhcmQgaW5wdXQgaXMgdXNlZC4gUGF0aHNwZWMKKwllbGVtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IExGIG9yIENSL0xGLiBQYXRoc3BlYyBlbGVtZW50cyBjYW4gYmUKKwlxdW90ZWQgYXMgZXhwbGFpbmVkIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgY29yZS5xdW90ZVBhdGhgCisJKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLiBTZWUgYWxzbyBgLS1wYXRoc3BlYy1maWxlLW51bGAgYW5kCisJZ2xvYmFsIGAtLWxpdGVyYWwtcGF0aHNwZWNzYC4KKworLS1wYXRoc3BlYy1maWxlLW51bDo6CisJT25seSBtZWFuaW5nZnVsIHdpdGggYC0tcGF0aHNwZWMtZnJvbS1maWxlYC4gUGF0aHNwZWMgZWxlbWVudHMgYXJlCisJc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciBhbmQgYWxsIG90aGVyIGNoYXJhY3RlcnMgYXJlIHRha2VuCisJbGl0ZXJhbGx5IChpbmNsdWRpbmcgbmV3bGluZXMgYW5kIHF1b3RlcykuCisKK1wtLTo6CisJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KKworPHBhdGhzcGVjPi4uLjo6CisJTGltaXRzIHRoZSBwYXRocyBhZmZlY3RlZCBieSB0aGUgb3BlcmF0aW9uLgorKworRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSAncGF0aHNwZWMnIGVudHJ5IGluIGxpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10uCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIHNlcXVlbmNlIHN3aXRjaGVzIHRvIHRoZSBgbWFzdGVyYCBicmFuY2gsIHJldmVydHMgdGhlCitgTWFrZWZpbGVgIHRvIHR3byByZXZpc2lvbnMgYmFjaywgZGVsZXRlcyBoZWxsby5jIGJ5IG1pc3Rha2UsIGFuZCBnZXRzCitpdCBiYWNrIGZyb20gdGhlIGluZGV4LgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCBtYXN0ZXIKKyQgZ2l0IHJlc3RvcmUgLS1zb3VyY2UgbWFzdGVyfjIgTWFrZWZpbGUgIDwxPgorJCBybSAtZiBoZWxsby5jCiskIGdpdCByZXN0b3JlIGhlbGxvLmMgICAgICAgICAgICAgICAgICAgICA8Mj4KKy0tLS0tLS0tLS0tLQorCis8MT4gdGFrZSBhIGZpbGUgb3V0IG9mIGFub3RoZXIgY29tbWl0Cis8Mj4gcmVzdG9yZSBoZWxsby5jIGZyb20gdGhlIGluZGV4CisKK0lmIHlvdSB3YW50IHRvIHJlc3RvcmUgX2FsbF8gQyBzb3VyY2UgZmlsZXMgdG8gbWF0Y2ggdGhlIHZlcnNpb24gaW4KK3RoZSBpbmRleCwgeW91IGNhbiBzYXkKKworLS0tLS0tLS0tLS0tCiskIGdpdCByZXN0b3JlICcqLmMnCistLS0tLS0tLS0tLS0KKworTm90ZSB0aGUgcXVvdGVzIGFyb3VuZCBgKi5jYC4gIFRoZSBmaWxlIGBoZWxsby5jYCB3aWxsIGFsc28gYmUKK3Jlc3RvcmVkLCBldmVuIHRob3VnaCBpdCBpcyBubyBsb25nZXIgaW4gdGhlIHdvcmtpbmcgdHJlZSwgYmVjYXVzZSB0aGUKK2ZpbGUgZ2xvYmJpbmcgaXMgdXNlZCB0byBtYXRjaCBlbnRyaWVzIGluIHRoZSBpbmRleCAobm90IGluIHRoZQord29ya2luZyB0cmVlIGJ5IHRoZSBzaGVsbCkuCisKK1RvIHJlc3RvcmUgYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc3RvcmUgLgorLS0tLS0tLS0tLS0tCisKK29yIHRvIHJlc3RvcmUgYWxsIHdvcmtpbmcgdHJlZSBmaWxlcyB3aXRoICd0b3AnIHBhdGhzcGVjIG1hZ2ljIChzZWUKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10pCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVzdG9yZSA6LworLS0tLS0tLS0tLS0tCisKK1RvIHJlc3RvcmUgYSBmaWxlIGluIHRoZSBpbmRleCB0byBtYXRjaCB0aGUgdmVyc2lvbiBpbiBgSEVBRGAgKHRoaXMgaXMKK3RoZSBzYW1lIGFzIHVzaW5nIGxpbmtnaXQ6Z2l0LXJlc2V0WzFdKQorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc3RvcmUgLS1zdGFnZWQgaGVsbG8uYworLS0tLS0tLS0tLS0tCisKK29yIHlvdSBjYW4gcmVzdG9yZSBib3RoIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZSAodGhpcyB0aGUgc2FtZQorYXMgdXNpbmcgbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0pCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEIC0tc3RhZ2VkIC0td29ya3RyZWUgaGVsbG8uYworLS0tLS0tLS0tLS0tCisKK29yIHRoZSBzaG9ydCBmb3JtIHdoaWNoIGlzIG1vcmUgcHJhY3RpY2FsIGJ1dCBsZXNzIHJlYWRhYmxlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc3RvcmUgLXNAIC1TVyBoZWxsby5jCistLS0tLS0tLS0tLS0KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwKK2xpbmtnaXQ6Z2l0LXJlc2V0WzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNWM5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtbGlzdC50eHQKQEAgLTAsMCArMSw3MiBAQAorZ2l0LXJldi1saXN0KDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJldi1saXN0IC0gTGlzdHMgY29tbWl0IG9iamVjdHMgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJldi1saXN0JyBbPG9wdGlvbnM+XSA8Y29tbWl0Pi4uLiBbWy0tXSA8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitMaXN0IGNvbW1pdHMgdGhhdCBhcmUgcmVhY2hhYmxlIGJ5IGZvbGxvd2luZyB0aGUgYHBhcmVudGAgbGlua3MgZnJvbSB0aGUKK2dpdmVuIGNvbW1pdChzKSwgYnV0IGV4Y2x1ZGUgY29tbWl0cyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB0aGUgb25lKHMpCitnaXZlbiB3aXRoIGEgJ3tjYXJldH0nIGluIGZyb250IG9mIHRoZW0uICBUaGUgb3V0cHV0IGlzIGdpdmVuIGluIHJldmVyc2UKK2Nocm9ub2xvZ2ljYWwgb3JkZXIgYnkgZGVmYXVsdC4KKworWW91IGNhbiB0aGluayBvZiB0aGlzIGFzIGEgc2V0IG9wZXJhdGlvbi4gIENvbW1pdHMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQKK2xpbmUgZm9ybSBhIHNldCBvZiBjb21taXRzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIGFueSBvZiB0aGVtLCBhbmQgdGhlbgorY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbnkgb2YgdGhlIG9uZXMgZ2l2ZW4gd2l0aCAne2NhcmV0fScgaW4gZnJvbnQgYXJlCitzdWJ0cmFjdGVkIGZyb20gdGhhdCBzZXQuICBUaGUgcmVtYWluaW5nIGNvbW1pdHMgYXJlIHdoYXQgY29tZXMgb3V0IGluIHRoZQorY29tbWFuZCdzIG91dHB1dC4gIFZhcmlvdXMgb3RoZXIgb3B0aW9ucyBhbmQgcGF0aHMgcGFyYW1ldGVycyBjYW4gYmUgdXNlZAordG8gZnVydGhlciBsaW1pdCB0aGUgcmVzdWx0LgorCitUaHVzLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJJCBnaXQgcmV2LWxpc3QgZm9vIGJhciBeYmF6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittZWFucyAibGlzdCBhbGwgdGhlIGNvbW1pdHMgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tICdmb28nIG9yICdiYXInLCBidXQKK25vdCBmcm9tICdiYXonIi4KKworQSBzcGVjaWFsIG5vdGF0aW9uICInPGNvbW1pdDE+Jy4uJzxjb21taXQyPiciIGNhbiBiZSB1c2VkIGFzIGEKK3Nob3J0LWhhbmQgZm9yICJ7Y2FyZXR9Jzxjb21taXQxPicgJzxjb21taXQyPiciLiBGb3IgZXhhbXBsZSwgZWl0aGVyIG9mCit0aGUgZm9sbG93aW5nIG1heSBiZSB1c2VkIGludGVyY2hhbmdlYWJseToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkkIGdpdCByZXYtbGlzdCBvcmlnaW4uLkhFQUQKKwkkIGdpdCByZXYtbGlzdCBIRUFEIF5vcmlnaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Fub3RoZXIgc3BlY2lhbCBub3RhdGlvbiBpcyAiJzxjb21taXQxPicuLi4nPGNvbW1pdDI+JyIgd2hpY2ggaXMgdXNlZnVsCitmb3IgbWVyZ2VzLiAgVGhlIHJlc3VsdGluZyBzZXQgb2YgY29tbWl0cyBpcyB0aGUgc3ltbWV0cmljIGRpZmZlcmVuY2UKK2JldHdlZW4gdGhlIHR3byBvcGVyYW5kcy4gIFRoZSBmb2xsb3dpbmcgdHdvIGNvbW1hbmRzIGFyZSBlcXVpdmFsZW50OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSQgZ2l0IHJldi1saXN0IEEgQiAtLW5vdCAkKGdpdCBtZXJnZS1iYXNlIC0tYWxsIEEgQikKKwkkIGdpdCByZXYtbGlzdCBBLi4uQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJ3Jldi1saXN0JyBpcyBhIHZlcnkgZXNzZW50aWFsIEdpdCBjb21tYW5kLCBzaW5jZSBpdAorcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gYnVpbGQgYW5kIHRyYXZlcnNlIGNvbW1pdCBhbmNlc3RyeSBncmFwaHMuIEZvcgordGhpcyByZWFzb24sIGl0IGhhcyBhIGxvdCBvZiBkaWZmZXJlbnQgb3B0aW9ucyB0aGF0IGVuYWJsZXMgaXQgdG8gYmUKK3VzZWQgYnkgY29tbWFuZHMgYXMgZGlmZmVyZW50IGFzICdnaXQgYmlzZWN0JyBhbmQKKydnaXQgcmVwYWNrJy4KKworT1BUSU9OUworLS0tLS0tLQorCis6Z2l0LXJldi1saXN0OiAxCitpbmNsdWRlOjpyZXYtbGlzdC1vcHRpb25zLnR4dFtdCisKK2luY2x1ZGU6OnByZXR0eS1mb3JtYXRzLnR4dFtdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliMTJiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQKQEAgLTAsMCArMSw0NjQgQEAKK2dpdC1yZXYtcGFyc2UoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJldi1wYXJzZSAtIFBpY2sgb3V0IGFuZCBtYXNzYWdlIHBhcmFtZXRlcnMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmV2LXBhcnNlJyBbPG9wdGlvbnM+XSA8YXJncz4uLi4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK01hbnkgR2l0IHBvcmNlbGFpbmlzaCBjb21tYW5kcyB0YWtlIG1peHR1cmUgb2YgZmxhZ3MKKyhpLmUuIHBhcmFtZXRlcnMgdGhhdCBiZWdpbiB3aXRoIGEgZGFzaCAnLScpIGFuZCBwYXJhbWV0ZXJzCittZWFudCBmb3IgdGhlIHVuZGVybHlpbmcgJ2dpdCByZXYtbGlzdCcgY29tbWFuZCB0aGV5IHVzZSBpbnRlcm5hbGx5CithbmQgZmxhZ3MgYW5kIHBhcmFtZXRlcnMgZm9yIHRoZSBvdGhlciBjb21tYW5kcyB0aGV5IHVzZQorZG93bnN0cmVhbSBvZiAnZ2l0IHJldi1saXN0Jy4gIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvCitkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0uCisKKworT1BUSU9OUworLS0tLS0tLQorCitPcGVyYXRpb24gTW9kZXMKK35+fn5+fn5+fn5+fn5+fgorCitFYWNoIG9mIHRoZXNlIG9wdGlvbnMgbXVzdCBhcHBlYXIgZmlyc3Qgb24gdGhlIGNvbW1hbmQgbGluZS4KKworLS1wYXJzZW9wdDo6CisJVXNlICdnaXQgcmV2LXBhcnNlJyBpbiBvcHRpb24gcGFyc2luZyBtb2RlIChzZWUgUEFSU0VPUFQgc2VjdGlvbiBiZWxvdykuCisKKy0tc3EtcXVvdGU6OgorCVVzZSAnZ2l0IHJldi1wYXJzZScgaW4gc2hlbGwgcXVvdGluZyBtb2RlIChzZWUgU1EtUVVPVEUKKwlzZWN0aW9uIGJlbG93KS4gSW4gY29udHJhc3QgdG8gdGhlIGAtLXNxYCBvcHRpb24gYmVsb3csIHRoaXMKKwltb2RlIGRvZXMgb25seSBxdW90aW5nLiBOb3RoaW5nIGVsc2UgaXMgZG9uZSB0byBjb21tYW5kIGlucHV0LgorCitPcHRpb25zIGZvciAtLXBhcnNlb3B0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKy0ta2VlcC1kYXNoZGFzaDo6CisJT25seSBtZWFuaW5nZnVsIGluIGAtLXBhcnNlb3B0YCBtb2RlLiBUZWxscyB0aGUgb3B0aW9uIHBhcnNlciB0byBlY2hvCisJb3V0IHRoZSBmaXJzdCBgLS1gIG1ldCBpbnN0ZWFkIG9mIHNraXBwaW5nIGl0LgorCistLXN0b3AtYXQtbm9uLW9wdGlvbjo6CisJT25seSBtZWFuaW5nZnVsIGluIGAtLXBhcnNlb3B0YCBtb2RlLiAgTGV0cyB0aGUgb3B0aW9uIHBhcnNlciBzdG9wIGF0CisJdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHBhcnNlIHN1Yi1jb21tYW5kcworCXRoYXQgdGFrZSBvcHRpb25zIHRoZW1zZWx2ZXMuCisKKy0tc3R1Y2stbG9uZzo6CisJT25seSBtZWFuaW5nZnVsIGluIGAtLXBhcnNlb3B0YCBtb2RlLiBPdXRwdXQgdGhlIG9wdGlvbnMgaW4gdGhlaXIKKwlsb25nIGZvcm0gaWYgYXZhaWxhYmxlLCBhbmQgd2l0aCB0aGVpciBhcmd1bWVudHMgc3R1Y2suCisKK09wdGlvbnMgZm9yIEZpbHRlcmluZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKy0tcmV2cy1vbmx5OjoKKwlEbyBub3Qgb3V0cHV0IGZsYWdzIGFuZCBwYXJhbWV0ZXJzIG5vdCBtZWFudCBmb3IKKwknZ2l0IHJldi1saXN0JyBjb21tYW5kLgorCistLW5vLXJldnM6OgorCURvIG5vdCBvdXRwdXQgZmxhZ3MgYW5kIHBhcmFtZXRlcnMgbWVhbnQgZm9yCisJJ2dpdCByZXYtbGlzdCcgY29tbWFuZC4KKworLS1mbGFnczo6CisJRG8gbm90IG91dHB1dCBub24tZmxhZyBwYXJhbWV0ZXJzLgorCistLW5vLWZsYWdzOjoKKwlEbyBub3Qgb3V0cHV0IGZsYWcgcGFyYW1ldGVycy4KKworT3B0aW9ucyBmb3IgT3V0cHV0Cit+fn5+fn5+fn5+fn5+fn5+fn4KKworLS1kZWZhdWx0IDxhcmc+OjoKKwlJZiB0aGVyZSBpcyBubyBwYXJhbWV0ZXIgZ2l2ZW4gYnkgdGhlIHVzZXIsIHVzZSBgPGFyZz5gCisJaW5zdGVhZC4KKworLS1wcmVmaXggPGFyZz46OgorCUJlaGF2ZSBhcyBpZiAnZ2l0IHJldi1wYXJzZScgd2FzIGludm9rZWQgZnJvbSB0aGUgYDxhcmc+YAorCXN1YmRpcmVjdG9yeSBvZiB0aGUgd29ya2luZyB0cmVlLiAgQW55IHJlbGF0aXZlIGZpbGVuYW1lcyBhcmUKKwlyZXNvbHZlZCBhcyBpZiB0aGV5IGFyZSBwcmVmaXhlZCBieSBgPGFyZz5gIGFuZCB3aWxsIGJlIHByaW50ZWQKKwlpbiB0aGF0IGZvcm0uCisrCitUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYXJndW1lbnRzIHRvIGEgY29tbWFuZCBydW4gaW4gYSBzdWJkaXJlY3RvcnkKK3NvIHRoYXQgdGhleSBjYW4gc3RpbGwgYmUgdXNlZCBhZnRlciBtb3ZpbmcgdG8gdGhlIHRvcC1sZXZlbCBvZiB0aGUKK3JlcG9zaXRvcnkuICBGb3IgZXhhbXBsZToKKysKKy0tLS0KK3ByZWZpeD0kKGdpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeCkKK2NkICIkKGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSIKKyMgcmV2LXBhcnNlIHByb3ZpZGVzIHRoZSAtLSBuZWVkZWQgZm9yICdzZXQnCitldmFsICJzZXQgJChnaXQgcmV2LXBhcnNlIC0tc3EgLS1wcmVmaXggIiRwcmVmaXgiIC0tICIkQCIpIgorLS0tLQorCistLXZlcmlmeTo6CisJVmVyaWZ5IHRoYXQgZXhhY3RseSBvbmUgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCBhbmQgdGhhdCBpdAorCWNhbiBiZSB0dXJuZWQgaW50byBhIHJhdyAyMC1ieXRlIFNIQS0xIHRoYXQgY2FuIGJlIHVzZWQgdG8KKwlhY2Nlc3MgdGhlIG9iamVjdCBkYXRhYmFzZS4gSWYgc28sIGVtaXQgaXQgdG8gdGhlIHN0YW5kYXJkCisJb3V0cHV0OyBvdGhlcndpc2UsIGVycm9yIG91dC4KKysKK0lmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBvdXRwdXQgYWN0dWFsbHkgbmFtZXMgYW4gb2JqZWN0IGluCit5b3VyIG9iamVjdCBkYXRhYmFzZSBhbmQvb3IgY2FuIGJlIHVzZWQgYXMgYSBzcGVjaWZpYyB0eXBlIG9mIG9iamVjdAoreW91IHJlcXVpcmUsIHlvdSBjYW4gYWRkIHRoZSBgXnt0eXBlfWAgcGVlbGluZyBvcGVyYXRvciB0byB0aGUgcGFyYW1ldGVyLgorRm9yIGV4YW1wbGUsIGBnaXQgcmV2LXBhcnNlICIkVkFSXntjb21taXR9ImAgd2lsbCBtYWtlIHN1cmUgYCRWQVJgCituYW1lcyBhbiBleGlzdGluZyBvYmplY3QgdGhhdCBpcyBhIGNvbW1pdC1pc2ggKGkuZS4gYSBjb21taXQsIG9yIGFuCithbm5vdGF0ZWQgdGFnIHRoYXQgcG9pbnRzIGF0IGEgY29tbWl0KS4gIFRvIG1ha2Ugc3VyZSB0aGF0IGAkVkFSYAorbmFtZXMgYW4gZXhpc3Rpbmcgb2JqZWN0IG9mIGFueSB0eXBlLCBgZ2l0IHJldi1wYXJzZSAiJFZBUl57b2JqZWN0fSJgCitjYW4gYmUgdXNlZC4KKworLXE6OgorLS1xdWlldDo6CisJT25seSBtZWFuaW5nZnVsIGluIGAtLXZlcmlmeWAgbW9kZS4gRG8gbm90IG91dHB1dCBhbiBlcnJvcgorCW1lc3NhZ2UgaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOworCWluc3RlYWQgZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cyBzaWxlbnRseS4KKwlTSEEtMXMgZm9yIHZhbGlkIG9iamVjdCBuYW1lcyBhcmUgcHJpbnRlZCB0byBzdGRvdXQgb24gc3VjY2Vzcy4KKworLS1zcTo6CisJVXN1YWxseSB0aGUgb3V0cHV0IGlzIG1hZGUgb25lIGxpbmUgcGVyIGZsYWcgYW5kCisJcGFyYW1ldGVyLiAgVGhpcyBvcHRpb24gbWFrZXMgb3V0cHV0IGEgc2luZ2xlIGxpbmUsCisJcHJvcGVybHkgcXVvdGVkIGZvciBjb25zdW1wdGlvbiBieSBzaGVsbC4gIFVzZWZ1bCB3aGVuCisJeW91IGV4cGVjdCB5b3VyIHBhcmFtZXRlciB0byBjb250YWluIHdoaXRlc3BhY2VzIGFuZAorCW5ld2xpbmVzIChlLmcuIHdoZW4gdXNpbmcgcGlja2F4ZSBgLVNgIHdpdGgKKwknZ2l0IGRpZmYte2FzdGVyaXNrfScpLiBJbiBjb250cmFzdCB0byB0aGUgYC0tc3EtcXVvdGVgIG9wdGlvbiwKKwl0aGUgY29tbWFuZCBpbnB1dCBpcyBzdGlsbCBpbnRlcnByZXRlZCBhcyB1c3VhbC4KKworLS1zaG9ydFs9bGVuZ3RoXTo6CisJU2FtZSBhcyBgLS12ZXJpZnlgIGJ1dCBzaG9ydGVucyB0aGUgb2JqZWN0IG5hbWUgdG8gYSB1bmlxdWUKKwlwcmVmaXggd2l0aCBhdCBsZWFzdCBgbGVuZ3RoYCBjaGFyYWN0ZXJzLiBUaGUgbWluaW11bSBsZW5ndGgKKwlpcyA0LCB0aGUgZGVmYXVsdCBpcyB0aGUgZWZmZWN0aXZlIHZhbHVlIG9mIHRoZSBgY29yZS5hYmJyZXZgCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisKKy0tbm90OjoKKwlXaGVuIHNob3dpbmcgb2JqZWN0IG5hbWVzLCBwcmVmaXggdGhlbSB3aXRoICd7Y2FyZXR9JyBhbmQKKwlzdHJpcCAne2NhcmV0fScgcHJlZml4IGZyb20gdGhlIG9iamVjdCBuYW1lcyB0aGF0IGFscmVhZHkgaGF2ZQorCW9uZS4KKworLS1hYmJyZXYtcmVmWz0oc3RyaWN0fGxvb3NlKV06OgorCUEgbm9uLWFtYmlndW91cyBzaG9ydCBuYW1lIG9mIHRoZSBvYmplY3RzIG5hbWUuCisJVGhlIG9wdGlvbiBjb3JlLndhcm5BbWJpZ3VvdXNSZWZzIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBzdHJpY3QKKwlhYmJyZXZpYXRpb24gbW9kZS4KKworLS1zeW1ib2xpYzo6CisJVXN1YWxseSB0aGUgb2JqZWN0IG5hbWVzIGFyZSBvdXRwdXQgaW4gU0hBLTEgZm9ybSAod2l0aAorCXBvc3NpYmxlICd7Y2FyZXR9JyBwcmVmaXgpOyB0aGlzIG9wdGlvbiBtYWtlcyB0aGVtIG91dHB1dCBpbiBhCisJZm9ybSBhcyBjbG9zZSB0byB0aGUgb3JpZ2luYWwgaW5wdXQgYXMgcG9zc2libGUuCisKKy0tc3ltYm9saWMtZnVsbC1uYW1lOjoKKwlUaGlzIGlzIHNpbWlsYXIgdG8gLS1zeW1ib2xpYywgYnV0IGl0IG9taXRzIGlucHV0IHRoYXQKKwlhcmUgbm90IHJlZnMgKGkuZS4gYnJhbmNoIG9yIHRhZyBuYW1lczsgb3IgbW9yZQorCWV4cGxpY2l0bHkgZGlzYW1iaWd1YXRpbmcgImhlYWRzL21hc3RlciIgZm9ybSwgd2hlbiB5b3UKKwl3YW50IHRvIG5hbWUgdGhlICJtYXN0ZXIiIGJyYW5jaCB3aGVuIHRoZXJlIGlzIGFuCisJdW5mb3J0dW5hdGVseSBuYW1lZCB0YWcgIm1hc3RlciIpLCBhbmQgc2hvdyB0aGVtIGFzIGZ1bGwKKwlyZWZuYW1lcyAoZS5nLiAicmVmcy9oZWFkcy9tYXN0ZXIiKS4KKworT3B0aW9ucyBmb3IgT2JqZWN0cworfn5+fn5+fn5+fn5+fn5+fn5+fgorCistLWFsbDo6CisJU2hvdyBhbGwgcmVmcyBmb3VuZCBpbiBgcmVmcy9gLgorCistLWJyYW5jaGVzWz1wYXR0ZXJuXTo6CistLXRhZ3NbPXBhdHRlcm5dOjoKKy0tcmVtb3Rlc1s9cGF0dGVybl06OgorCVNob3cgYWxsIGJyYW5jaGVzLCB0YWdzLCBvciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMsCisJcmVzcGVjdGl2ZWx5IChpLmUuLCByZWZzIGZvdW5kIGluIGByZWZzL2hlYWRzYCwKKwlgcmVmcy90YWdzYCwgb3IgYHJlZnMvcmVtb3Rlc2AsIHJlc3BlY3RpdmVseSkuCisrCitJZiBhIGBwYXR0ZXJuYCBpcyBnaXZlbiwgb25seSByZWZzIG1hdGNoaW5nIHRoZSBnaXZlbiBzaGVsbCBnbG9iIGFyZQorc2hvd24uICBJZiB0aGUgcGF0dGVybiBkb2VzIG5vdCBjb250YWluIGEgZ2xvYmJpbmcgY2hhcmFjdGVyIChgP2AsCitgKmAsIG9yIGBbYCksIGl0IGlzIHR1cm5lZCBpbnRvIGEgcHJlZml4IG1hdGNoIGJ5IGFwcGVuZGluZyBgLypgLgorCistLWdsb2I9cGF0dGVybjo6CisJU2hvdyBhbGwgcmVmcyBtYXRjaGluZyB0aGUgc2hlbGwgZ2xvYiBwYXR0ZXJuIGBwYXR0ZXJuYC4gSWYKKwl0aGUgcGF0dGVybiBkb2VzIG5vdCBzdGFydCB3aXRoIGByZWZzL2AsIHRoaXMgaXMgYXV0b21hdGljYWxseQorCXByZXBlbmRlZC4gIElmIHRoZSBwYXR0ZXJuIGRvZXMgbm90IGNvbnRhaW4gYSBnbG9iYmluZworCWNoYXJhY3RlciAoYD9gLCBgKmAsIG9yIGBbYCksIGl0IGlzIHR1cm5lZCBpbnRvIGEgcHJlZml4CisJbWF0Y2ggYnkgYXBwZW5kaW5nIGAvKmAuCisKKy0tZXhjbHVkZT08Z2xvYi1wYXR0ZXJuPjo6CisJRG8gbm90IGluY2x1ZGUgcmVmcyBtYXRjaGluZyAnPGdsb2ItcGF0dGVybj4nIHRoYXQgdGhlIG5leHQgYC0tYWxsYCwKKwlgLS1icmFuY2hlc2AsIGAtLXRhZ3NgLCBgLS1yZW1vdGVzYCwgb3IgYC0tZ2xvYmAgd291bGQgb3RoZXJ3aXNlCisJY29uc2lkZXIuIFJlcGV0aXRpb25zIG9mIHRoaXMgb3B0aW9uIGFjY3VtdWxhdGUgZXhjbHVzaW9uIHBhdHRlcm5zCisJdXAgdG8gdGhlIG5leHQgYC0tYWxsYCwgYC0tYnJhbmNoZXNgLCBgLS10YWdzYCwgYC0tcmVtb3Rlc2AsIG9yCisJYC0tZ2xvYmAgb3B0aW9uIChvdGhlciBvcHRpb25zIG9yIGFyZ3VtZW50cyBkbyBub3QgY2xlYXIKKwlhY2N1bXVsYXRlZCBwYXR0ZXJucykuCisrCitUaGUgcGF0dGVybnMgZ2l2ZW4gc2hvdWxkIG5vdCBiZWdpbiB3aXRoIGByZWZzL2hlYWRzYCwgYHJlZnMvdGFnc2AsIG9yCitgcmVmcy9yZW1vdGVzYCB3aGVuIGFwcGxpZWQgdG8gYC0tYnJhbmNoZXNgLCBgLS10YWdzYCwgb3IgYC0tcmVtb3Rlc2AsCityZXNwZWN0aXZlbHksIGFuZCB0aGV5IG11c3QgYmVnaW4gd2l0aCBgcmVmcy9gIHdoZW4gYXBwbGllZCB0byBgLS1nbG9iYAorb3IgYC0tYWxsYC4gSWYgYSB0cmFpbGluZyAnL3thc3Rlcmlza30nIGlzIGludGVuZGVkLCBpdCBtdXN0IGJlIGdpdmVuCitleHBsaWNpdGx5LgorCistLWRpc2FtYmlndWF0ZT08cHJlZml4Pjo6CisJU2hvdyBldmVyeSBvYmplY3Qgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCB0aGUgZ2l2ZW4gcHJlZml4LgorCVRoZSA8cHJlZml4PiBtdXN0IGJlIGF0IGxlYXN0IDQgaGV4YWRlY2ltYWwgZGlnaXRzIGxvbmcgdG8KKwlhdm9pZCBsaXN0aW5nIGVhY2ggYW5kIGV2ZXJ5IG9iamVjdCBpbiB0aGUgcmVwb3NpdG9yeSBieQorCW1pc3Rha2UuCisKK09wdGlvbnMgZm9yIEZpbGVzCit+fn5+fn5+fn5+fn5+fn5+fgorCistLWxvY2FsLWVudi12YXJzOjoKKwlMaXN0IHRoZSBHSVRfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBhcmUgbG9jYWwgdG8gdGhlCisJcmVwb3NpdG9yeSAoZS5nLiBHSVRfRElSIG9yIEdJVF9XT1JLX1RSRUUsIGJ1dCBub3QgR0lUX0VESVRPUikuCisJT25seSB0aGUgbmFtZXMgb2YgdGhlIHZhcmlhYmxlcyBhcmUgbGlzdGVkLCBub3QgdGhlaXIgdmFsdWUsCisJZXZlbiBpZiB0aGV5IGFyZSBzZXQuCisKKy0tZ2l0LWRpcjo6CisJU2hvdyBgJEdJVF9ESVJgIGlmIGRlZmluZWQuIE90aGVyd2lzZSBzaG93IHRoZSBwYXRoIHRvCisJdGhlIC5naXQgZGlyZWN0b3J5LiBUaGUgcGF0aCBzaG93biwgd2hlbiByZWxhdGl2ZSwgaXMKKwlyZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKysKK0lmIGAkR0lUX0RJUmAgaXMgbm90IGRlZmluZWQgYW5kIHRoZSBjdXJyZW50IGRpcmVjdG9yeQoraXMgbm90IGRldGVjdGVkIHRvIGxpZSBpbiBhIEdpdCByZXBvc2l0b3J5IG9yIHdvcmsgdHJlZQorcHJpbnQgYSBtZXNzYWdlIHRvIHN0ZGVyciBhbmQgZXhpdCB3aXRoIG5vbnplcm8gc3RhdHVzLgorCistLWFic29sdXRlLWdpdC1kaXI6OgorCUxpa2UgYC0tZ2l0LWRpcmAsIGJ1dCBpdHMgb3V0cHV0IGlzIGFsd2F5cyB0aGUgY2Fub25pY2FsaXplZAorCWFic29sdXRlIHBhdGguCisKKy0tZ2l0LWNvbW1vbi1kaXI6OgorCVNob3cgYCRHSVRfQ09NTU9OX0RJUmAgaWYgZGVmaW5lZCwgZWxzZSBgJEdJVF9ESVJgLgorCistLWlzLWluc2lkZS1naXQtZGlyOjoKKwlXaGVuIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIGJlbG93IHRoZSByZXBvc2l0b3J5CisJZGlyZWN0b3J5IHByaW50ICJ0cnVlIiwgb3RoZXJ3aXNlICJmYWxzZSIuCisKKy0taXMtaW5zaWRlLXdvcmstdHJlZTo6CisJV2hlbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyBpbnNpZGUgdGhlIHdvcmsgdHJlZSBvZiB0aGUKKwlyZXBvc2l0b3J5IHByaW50ICJ0cnVlIiwgb3RoZXJ3aXNlICJmYWxzZSIuCisKKy0taXMtYmFyZS1yZXBvc2l0b3J5OjoKKwlXaGVuIHRoZSByZXBvc2l0b3J5IGlzIGJhcmUgcHJpbnQgInRydWUiLCBvdGhlcndpc2UgImZhbHNlIi4KKworLS1pcy1zaGFsbG93LXJlcG9zaXRvcnk6OgorCVdoZW4gdGhlIHJlcG9zaXRvcnkgaXMgc2hhbGxvdyBwcmludCAidHJ1ZSIsIG90aGVyd2lzZSAiZmFsc2UiLgorCistLXJlc29sdmUtZ2l0LWRpciA8cGF0aD46OgorCUNoZWNrIGlmIDxwYXRoPiBpcyBhIHZhbGlkIHJlcG9zaXRvcnkgb3IgYSBnaXRmaWxlIHRoYXQKKwlwb2ludHMgYXQgYSB2YWxpZCByZXBvc2l0b3J5LCBhbmQgcHJpbnQgdGhlIGxvY2F0aW9uIG9mIHRoZQorCXJlcG9zaXRvcnkuICBJZiA8cGF0aD4gaXMgYSBnaXRmaWxlIHRoZW4gdGhlIHJlc29sdmVkIHBhdGgKKwl0byB0aGUgcmVhbCByZXBvc2l0b3J5IGlzIHByaW50ZWQuCisKKy0tZ2l0LXBhdGggPHBhdGg+OjoKKwlSZXNvbHZlICIkR0lUX0RJUi88cGF0aD4iIGFuZCB0YWtlcyBvdGhlciBwYXRoIHJlbG9jYXRpb24KKwl2YXJpYWJsZXMgc3VjaCBhcyAkR0lUX09CSkVDVF9ESVJFQ1RPUlksCisJJEdJVF9JTkRFWF9GSUxFLi4uIGludG8gYWNjb3VudC4gRm9yIGV4YW1wbGUsIGlmCisJJEdJVF9PQkpFQ1RfRElSRUNUT1JZIGlzIHNldCB0byAvZm9vL2JhciB0aGVuICJnaXQgcmV2LXBhcnNlCisJLS1naXQtcGF0aCBvYmplY3RzL2FiYyIgcmV0dXJucyAvZm9vL2Jhci9hYmMuCisKKy0tc2hvdy1jZHVwOjoKKwlXaGVuIHRoZSBjb21tYW5kIGlzIGludm9rZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSwgc2hvdyB0aGUKKwlwYXRoIG9mIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50CisJZGlyZWN0b3J5ICh0eXBpY2FsbHkgYSBzZXF1ZW5jZSBvZiAiLi4vIiwgb3IgYW4gZW1wdHkgc3RyaW5nKS4KKworLS1zaG93LXByZWZpeDo6CisJV2hlbiB0aGUgY29tbWFuZCBpcyBpbnZva2VkIGZyb20gYSBzdWJkaXJlY3RvcnksIHNob3cgdGhlCisJcGF0aCBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZXZlbAorCWRpcmVjdG9yeS4KKworLS1zaG93LXRvcGxldmVsOjoKKwlTaG93IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSB3b3JraW5nCisJdHJlZS4gSWYgdGhlcmUgaXMgbm8gd29ya2luZyB0cmVlLCByZXBvcnQgYW4gZXJyb3IuCisKKy0tc2hvdy1zdXBlcnByb2plY3Qtd29ya2luZy10cmVlOjoKKwlTaG93IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSByb290IG9mIHRoZSBzdXBlcnByb2plY3QncworCXdvcmtpbmcgdHJlZSAoaWYgZXhpc3RzKSB0aGF0IHVzZXMgdGhlIGN1cnJlbnQgcmVwb3NpdG9yeSBhcworCWl0cyBzdWJtb2R1bGUuICBPdXRwdXRzIG5vdGhpbmcgaWYgdGhlIGN1cnJlbnQgcmVwb3NpdG9yeSBpcworCW5vdCB1c2VkIGFzIGEgc3VibW9kdWxlIGJ5IGFueSBwcm9qZWN0LgorCistLXNoYXJlZC1pbmRleC1wYXRoOjoKKwlTaG93IHRoZSBwYXRoIHRvIHRoZSBzaGFyZWQgaW5kZXggZmlsZSBpbiBzcGxpdCBpbmRleCBtb2RlLCBvcgorCWVtcHR5IGlmIG5vdCBpbiBzcGxpdC1pbmRleCBtb2RlLgorCistLXNob3ctb2JqZWN0LWZvcm1hdFs9KHN0b3JhZ2V8aW5wdXR8b3V0cHV0KV06OgorCVNob3cgdGhlIG9iamVjdCBmb3JtYXQgKGhhc2ggYWxnb3JpdGhtKSB1c2VkIGZvciB0aGUgcmVwb3NpdG9yeQorCWZvciBzdG9yYWdlIGluc2lkZSB0aGUgYC5naXRgIGRpcmVjdG9yeSwgaW5wdXQsIG9yIG91dHB1dC4gRm9yCisJaW5wdXQsIG11bHRpcGxlIGFsZ29yaXRobXMgbWF5IGJlIHByaW50ZWQsIHNwYWNlLXNlcGFyYXRlZC4KKwlJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBpcyAic3RvcmFnZSIuCisKKworT3RoZXIgT3B0aW9ucworfn5+fn5+fn5+fn5+fgorCistLXNpbmNlPWRhdGVzdHJpbmc6OgorLS1hZnRlcj1kYXRlc3RyaW5nOjoKKwlQYXJzZSB0aGUgZGF0ZSBzdHJpbmcsIGFuZCBvdXRwdXQgdGhlIGNvcnJlc3BvbmRpbmcKKwktLW1heC1hZ2U9IHBhcmFtZXRlciBmb3IgJ2dpdCByZXYtbGlzdCcuCisKKy0tdW50aWw9ZGF0ZXN0cmluZzo6CistLWJlZm9yZT1kYXRlc3RyaW5nOjoKKwlQYXJzZSB0aGUgZGF0ZSBzdHJpbmcsIGFuZCBvdXRwdXQgdGhlIGNvcnJlc3BvbmRpbmcKKwktLW1pbi1hZ2U9IHBhcmFtZXRlciBmb3IgJ2dpdCByZXYtbGlzdCcuCisKKzxhcmdzPi4uLjo6CisJRmxhZ3MgYW5kIHBhcmFtZXRlcnMgdG8gYmUgcGFyc2VkLgorCisKK2luY2x1ZGU6OnJldmlzaW9ucy50eHRbXQorCitQQVJTRU9QVAorLS0tLS0tLS0KKworSW4gYC0tcGFyc2VvcHRgIG1vZGUsICdnaXQgcmV2LXBhcnNlJyBoZWxwcyBtYXNzYWdpbmcgb3B0aW9ucyB0byBicmluZyB0byBzaGVsbAorc2NyaXB0cyB0aGUgc2FtZSBmYWNpbGl0aWVzIEMgYnVpbHRpbnMgaGF2ZS4gSXQgd29ya3MgYXMgYW4gb3B0aW9uIG5vcm1hbGl6ZXIKKyhlLmcuIHNwbGl0cyBzaW5nbGUgc3dpdGNoZXMgYWdncmVnYXRlIHZhbHVlcyksIGEgYml0IGxpa2UgYGdldG9wdCgxKWAgZG9lcy4KKworSXQgdGFrZXMgb24gdGhlIHN0YW5kYXJkIGlucHV0IHRoZSBzcGVjaWZpY2F0aW9uIG9mIHRoZSBvcHRpb25zIHRvIHBhcnNlIGFuZAordW5kZXJzdGFuZCwgYW5kIGVjaG9lcyBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0IGEgc3RyaW5nIHN1aXRhYmxlIGZvciBgc2goMSlgIGBldmFsYAordG8gcmVwbGFjZSB0aGUgYXJndW1lbnRzIHdpdGggbm9ybWFsaXplZCBvbmVzLiAgSW4gY2FzZSBvZiBlcnJvciwgaXQgb3V0cHV0cwordXNhZ2Ugb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSwgYW5kIGV4aXRzIHdpdGggY29kZSAxMjkuCisKK05vdGU6IE1ha2Ugc3VyZSB5b3UgcXVvdGUgdGhlIHJlc3VsdCB3aGVuIHBhc3NpbmcgaXQgdG8gYGV2YWxgLiAgU2VlCitiZWxvdyBmb3IgYW4gZXhhbXBsZS4KKworSW5wdXQgRm9ybWF0Cit+fn5+fn5+fn5+fn4KKworJ2dpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCcgaW5wdXQgZm9ybWF0IGlzIGZ1bGx5IHRleHQgYmFzZWQuIEl0IGhhcyB0d28gcGFydHMsCitzZXBhcmF0ZWQgYnkgYSBsaW5lIHRoYXQgY29udGFpbnMgb25seSBgLS1gLiBUaGUgbGluZXMgYmVmb3JlIHRoZSBzZXBhcmF0b3IKKyhzaG91bGQgYmUgb25lIG9yIG1vcmUpIGFyZSB1c2VkIGZvciB0aGUgdXNhZ2UuCitUaGUgbGluZXMgYWZ0ZXIgdGhlIHNlcGFyYXRvciBkZXNjcmliZSB0aGUgb3B0aW9ucy4KKworRWFjaCBsaW5lIG9mIG9wdGlvbnMgaGFzIHRoaXMgZm9ybWF0OgorCistLS0tLS0tLS0tLS0KKzxvcHQtc3BlYz48ZmxhZ3M+KjxhcmctaGludD4/IFNQKyBoZWxwIExGCistLS0tLS0tLS0tLS0KKworYDxvcHQtc3BlYz5gOjoKKwlpdHMgZm9ybWF0IGlzIHRoZSBzaG9ydCBvcHRpb24gY2hhcmFjdGVyLCB0aGVuIHRoZSBsb25nIG9wdGlvbiBuYW1lCisJc2VwYXJhdGVkIGJ5IGEgY29tbWEuIEJvdGggcGFydHMgYXJlIG5vdCByZXF1aXJlZCwgdGhvdWdoIGF0IGxlYXN0IG9uZQorCWlzIG5lY2Vzc2FyeS4gTWF5IG5vdCBjb250YWluIGFueSBvZiB0aGUgYDxmbGFncz5gIGNoYXJhY3RlcnMuCisJYGgsaGVscGAsIGBkcnktcnVuYCBhbmQgYGZgIGFyZSBleGFtcGxlcyBvZiBjb3JyZWN0IGA8b3B0LXNwZWM+YC4KKworYDxmbGFncz5gOjoKKwlgPGZsYWdzPmAgYXJlIG9mIGAqYCwgYD1gLCBgP2Agb3IgYCFgLgorCSogVXNlIGA9YCBpZiB0aGUgb3B0aW9uIHRha2VzIGFuIGFyZ3VtZW50LgorCisJKiBVc2UgYD9gIHRvIG1lYW4gdGhhdCB0aGUgb3B0aW9uIHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50LiBZb3UKKwkgIHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoZSBgLS1zdHVjay1sb25nYCBtb2RlIHRvIGJlIGFibGUgdG8KKwkgIHVuYW1iaWd1b3VzbHkgcGFyc2UgdGhlIG9wdGlvbmFsIGFyZ3VtZW50LgorCisJKiBVc2UgYCpgIHRvIG1lYW4gdGhhdCB0aGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgdXNhZ2UKKwkgIGdlbmVyYXRlZCBmb3IgdGhlIGAtaGAgYXJndW1lbnQuIEl0J3Mgc2hvd24gZm9yIGAtLWhlbHAtYWxsYCBhcworCSAgZG9jdW1lbnRlZCBpbiBsaW5rZ2l0OmdpdGNsaVs3XS4KKworCSogVXNlIGAhYCB0byBub3QgbWFrZSB0aGUgY29ycmVzcG9uZGluZyBuZWdhdGVkIGxvbmcgb3B0aW9uIGF2YWlsYWJsZS4KKworYDxhcmctaGludD5gOjoKKwlgPGFyZy1oaW50PmAsIGlmIHNwZWNpZmllZCwgaXMgdXNlZCBhcyBhIG5hbWUgb2YgdGhlIGFyZ3VtZW50IGluIHRoZQorCWhlbHAgb3V0cHV0LCBmb3Igb3B0aW9ucyB0aGF0IHRha2UgYXJndW1lbnRzLiBgPGFyZy1oaW50PmAgaXMKKwl0ZXJtaW5hdGVkIGJ5IHRoZSBmaXJzdCB3aGl0ZXNwYWNlLiAgSXQgaXMgY3VzdG9tYXJ5IHRvIHVzZSBhCisJZGFzaCB0byBzZXBhcmF0ZSB3b3JkcyBpbiBhIG11bHRpLXdvcmQgYXJndW1lbnQgaGludC4KKworVGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZSwgYWZ0ZXIgc3RyaXBwaW5nIHRoZSBzcGFjZXMsIGlzIHVzZWQKK2FzIHRoZSBoZWxwIGFzc29jaWF0ZWQgdG8gdGhlIG9wdGlvbi4KKworQmxhbmsgbGluZXMgYXJlIGlnbm9yZWQsIGFuZCBsaW5lcyB0aGF0IGRvbid0IG1hdGNoIHRoaXMgc3BlY2lmaWNhdGlvbiBhcmUgdXNlZAorYXMgb3B0aW9uIGdyb3VwIGhlYWRlcnMgKHN0YXJ0IHRoZSBsaW5lIHdpdGggYSBzcGFjZSB0byBjcmVhdGUgc3VjaAorbGluZXMgb24gcHVycG9zZSkuCisKK0V4YW1wbGUKK35+fn5+fn4KKworLS0tLS0tLS0tLS0tCitPUFRTX1NQRUM9IlwKK3NvbWUtY29tbWFuZCBbPG9wdGlvbnM+XSA8YXJncz4uLi4KKworc29tZS1jb21tYW5kIGRvZXMgZm9vIGFuZCBiYXIhCistLQoraCxoZWxwICAgIHNob3cgdGhlIGhlbHAKKworZm9vICAgICAgIHNvbWUgbmlmdHkgb3B0aW9uIC0tZm9vCitiYXI9ICAgICAgc29tZSBjb29sIG9wdGlvbiAtLWJhciB3aXRoIGFuIGFyZ3VtZW50CitiYXo9YXJnICAgYW5vdGhlciBjb29sIG9wdGlvbiAtLWJheiB3aXRoIGEgbmFtZWQgYXJndW1lbnQKK3F1eD9wYXRoICBxdXggbWF5IHRha2UgYSBwYXRoIGFyZ3VtZW50IGJ1dCBoYXMgbWVhbmluZyBieSBpdHNlbGYKKworICBBbiBvcHRpb24gZ3JvdXAgSGVhZGVyCitDPyAgICAgICAgb3B0aW9uIEMgd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudCIKKworZXZhbCAiJChlY2hvICIkT1BUU19TUEVDIiB8IGdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAiJEAiIHx8IGVjaG8gZXhpdCAkPykiCistLS0tLS0tLS0tLS0KKworCitVc2FnZSB0ZXh0Cit+fn5+fn5+fn5+CisKK1doZW4gYCIkQCJgIGlzIGAtaGAgb3IgYC0taGVscGAgaW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcKK3VzYWdlIHRleHQgd291bGQgYmUgc2hvd246CisKKy0tLS0tLS0tLS0tLQordXNhZ2U6IHNvbWUtY29tbWFuZCBbPG9wdGlvbnM+XSA8YXJncz4uLi4KKworICAgIHNvbWUtY29tbWFuZCBkb2VzIGZvbyBhbmQgYmFyIQorCisgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhlIGhlbHAKKyAgICAtLWZvbyAgICAgICAgICAgICAgICAgc29tZSBuaWZ0eSBvcHRpb24gLS1mb28KKyAgICAtLWJhciAuLi4gICAgICAgICAgICAgc29tZSBjb29sIG9wdGlvbiAtLWJhciB3aXRoIGFuIGFyZ3VtZW50CisgICAgLS1iYXogPGFyZz4gICAgICAgICAgIGFub3RoZXIgY29vbCBvcHRpb24gLS1iYXogd2l0aCBhIG5hbWVkIGFyZ3VtZW50CisgICAgLS1xdXhbPTxwYXRoPl0gICAgICAgIHF1eCBtYXkgdGFrZSBhIHBhdGggYXJndW1lbnQgYnV0IGhhcyBtZWFuaW5nIGJ5IGl0c2VsZgorCitBbiBvcHRpb24gZ3JvdXAgSGVhZGVyCisgICAgLUNbLi4uXSAgICAgICAgICAgICAgIG9wdGlvbiBDIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnQKKy0tLS0tLS0tLS0tLQorCitTUS1RVU9URQorLS0tLS0tLS0KKworSW4gYC0tc3EtcXVvdGVgIG1vZGUsICdnaXQgcmV2LXBhcnNlJyBlY2hvZXMgb24gdGhlIHN0YW5kYXJkIG91dHB1dCBhCitzaW5nbGUgbGluZSBzdWl0YWJsZSBmb3IgYHNoKDEpYCBgZXZhbGAuIFRoaXMgbGluZSBpcyBtYWRlIGJ5Citub3JtYWxpemluZyB0aGUgYXJndW1lbnRzIGZvbGxvd2luZyBgLS1zcS1xdW90ZWAuIE5vdGhpbmcgb3RoZXIgdGhhbgorcXVvdGluZyB0aGUgYXJndW1lbnRzIGlzIGRvbmUuCisKK0lmIHlvdSB3YW50IGNvbW1hbmQgaW5wdXQgdG8gc3RpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgdXN1YWwgYnkKKydnaXQgcmV2LXBhcnNlJyBiZWZvcmUgdGhlIG91dHB1dCBpcyBzaGVsbCBxdW90ZWQsIHNlZSB0aGUgYC0tc3FgCitvcHRpb24uCisKK0V4YW1wbGUKK35+fn5+fn4KKworLS0tLS0tLS0tLS0tCiskIGNhdCA+eW91ci1naXQtc2NyaXB0LnNoIDw8XEVPRgorIyEvYmluL3NoCithcmdzPSQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkQCIpICAgIyBxdW90ZSB1c2VyLXN1cHBsaWVkIGFyZ3VtZW50cworY29tbWFuZD0iZ2l0IGZyb3R6IC1uMjQgJGFyZ3MiICAgICAgICAgICMgYW5kIHVzZSBpdCBpbnNpZGUgYSBoYW5kY3JhZnRlZAorCQkJCQkjIGNvbW1hbmQgbGluZQorZXZhbCAiJGNvbW1hbmQiCitFT0YKKworJCBzaCB5b3VyLWdpdC1zY3JpcHQuc2ggImEgYidjIgorLS0tLS0tLS0tLS0tCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisqIFByaW50IHRoZSBvYmplY3QgbmFtZSBvZiB0aGUgY3VycmVudCBjb21taXQ6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFECistLS0tLS0tLS0tLS0KKworKiBQcmludCB0aGUgY29tbWl0IG9iamVjdCBuYW1lIGZyb20gdGhlIHJldmlzaW9uIGluIHRoZSAkUkVWIHNoZWxsIHZhcmlhYmxlOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJFJFVl57Y29tbWl0fQorLS0tLS0tLS0tLS0tCisrCitUaGlzIHdpbGwgZXJyb3Igb3V0IGlmICRSRVYgaXMgZW1wdHkgb3Igbm90IGEgdmFsaWQgcmV2aXNpb24uCisKKyogU2ltaWxhciB0byBhYm92ZToKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmV2LXBhcnNlIC0tZGVmYXVsdCBtYXN0ZXIgLS12ZXJpZnkgJFJFVgorLS0tLS0tLS0tLS0tCisrCitidXQgaWYgJFJFViBpcyBlbXB0eSwgdGhlIGNvbW1pdCBvYmplY3QgbmFtZSBmcm9tIG1hc3RlciB3aWxsIGJlIHByaW50ZWQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2ZXJ0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0Mjc2ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQKQEAgLTAsMCArMSwxNDUgQEAKK2dpdC1yZXZlcnQoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJldmVydCAtIFJldmVydCBzb21lIGV4aXN0aW5nIGNvbW1pdHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJldmVydCcgWy0tW25vLV1lZGl0XSBbLW5dIFstbSBwYXJlbnQtbnVtYmVyXSBbLXNdIFstU1s8a2V5aWQ+XV0gPGNvbW1pdD4uLi4KKydnaXQgcmV2ZXJ0JyAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQgfCAtLXF1aXQpCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXZlbiBvbmUgb3IgbW9yZSBleGlzdGluZyBjb21taXRzLCByZXZlcnQgdGhlIGNoYW5nZXMgdGhhdCB0aGUKK3JlbGF0ZWQgcGF0Y2hlcyBpbnRyb2R1Y2UsIGFuZCByZWNvcmQgc29tZSBuZXcgY29tbWl0cyB0aGF0IHJlY29yZAordGhlbS4gIFRoaXMgcmVxdWlyZXMgeW91ciB3b3JraW5nIHRyZWUgdG8gYmUgY2xlYW4gKG5vIG1vZGlmaWNhdGlvbnMKK2Zyb20gdGhlIEhFQUQgY29tbWl0KS4KKworTm90ZTogJ2dpdCByZXZlcnQnIGlzIHVzZWQgdG8gcmVjb3JkIHNvbWUgbmV3IGNvbW1pdHMgdG8gcmV2ZXJzZSB0aGUKK2VmZmVjdCBvZiBzb21lIGVhcmxpZXIgY29tbWl0cyAob2Z0ZW4gb25seSBhIGZhdWx0eSBvbmUpLiAgSWYgeW91IHdhbnQgdG8KK3Rocm93IGF3YXkgYWxsIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSwgeW91CitzaG91bGQgc2VlIGxpbmtnaXQ6Z2l0LXJlc2V0WzFdLCBwYXJ0aWN1bGFybHkgdGhlIGAtLWhhcmRgIG9wdGlvbi4gIElmCit5b3Ugd2FudCB0byBleHRyYWN0IHNwZWNpZmljIGZpbGVzIGFzIHRoZXkgd2VyZSBpbiBhbm90aGVyIGNvbW1pdCwgeW91CitzaG91bGQgc2VlIGxpbmtnaXQ6Z2l0LXJlc3RvcmVbMV0sIHNwZWNpZmljYWxseSB0aGUgYC0tc291cmNlYAorb3B0aW9uLiBUYWtlIGNhcmUgd2l0aCB0aGVzZSBhbHRlcm5hdGl2ZXMgYXMKK2JvdGggd2lsbCBkaXNjYXJkIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeS4KKworU2VlICJSZXNldCwgcmVzdG9yZSBhbmQgcmV2ZXJ0IiBpbiBsaW5rZ2l0OmdpdFsxXSBmb3IgdGhlIGRpZmZlcmVuY2VzCitiZXR3ZWVuIHRoZSB0aHJlZSBjb21tYW5kcy4KKworT1BUSU9OUworLS0tLS0tLQorPGNvbW1pdD4uLi46OgorCUNvbW1pdHMgdG8gcmV2ZXJ0LgorCUZvciBhIG1vcmUgY29tcGxldGUgbGlzdCBvZiB3YXlzIHRvIHNwZWxsIGNvbW1pdCBuYW1lcywgc2VlCisJbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisJU2V0cyBvZiBjb21taXRzIGNhbiBhbHNvIGJlIGdpdmVuIGJ1dCBubyB0cmF2ZXJzYWwgaXMgZG9uZSBieQorCWRlZmF1bHQsIHNlZSBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSBhbmQgaXRzIGAtLW5vLXdhbGtgCisJb3B0aW9uLgorCistZTo6CistLWVkaXQ6OgorCVdpdGggdGhpcyBvcHRpb24sICdnaXQgcmV2ZXJ0JyB3aWxsIGxldCB5b3UgZWRpdCB0aGUgY29tbWl0CisJbWVzc2FnZSBwcmlvciB0byBjb21taXR0aW5nIHRoZSByZXZlcnQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgaWYKKwl5b3UgcnVuIHRoZSBjb21tYW5kIGZyb20gYSB0ZXJtaW5hbC4KKworLW0gcGFyZW50LW51bWJlcjo6CistLW1haW5saW5lIHBhcmVudC1udW1iZXI6OgorCVVzdWFsbHkgeW91IGNhbm5vdCByZXZlcnQgYSBtZXJnZSBiZWNhdXNlIHlvdSBkbyBub3Qga25vdyB3aGljaAorCXNpZGUgb2YgdGhlIG1lcmdlIHNob3VsZCBiZSBjb25zaWRlcmVkIHRoZSBtYWlubGluZS4gIFRoaXMKKwlvcHRpb24gc3BlY2lmaWVzIHRoZSBwYXJlbnQgbnVtYmVyIChzdGFydGluZyBmcm9tIDEpIG9mCisJdGhlIG1haW5saW5lIGFuZCBhbGxvd3MgcmV2ZXJ0IHRvIHJldmVyc2UgdGhlIGNoYW5nZQorCXJlbGF0aXZlIHRvIHRoZSBzcGVjaWZpZWQgcGFyZW50LgorKworUmV2ZXJ0aW5nIGEgbWVyZ2UgY29tbWl0IGRlY2xhcmVzIHRoYXQgeW91IHdpbGwgbmV2ZXIgd2FudCB0aGUgdHJlZSBjaGFuZ2VzCiticm91Z2h0IGluIGJ5IHRoZSBtZXJnZS4gIEFzIGEgcmVzdWx0LCBsYXRlciBtZXJnZXMgd2lsbCBvbmx5IGJyaW5nIGluIHRyZWUKK2NoYW5nZXMgaW50cm9kdWNlZCBieSBjb21taXRzIHRoYXQgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlIHByZXZpb3VzbHkKK3JldmVydGVkIG1lcmdlLiAgVGhpcyBtYXkgb3IgbWF5IG5vdCBiZSB3aGF0IHlvdSB3YW50LgorKworU2VlIHRoZSBsaW5rOmhvd3RvL3JldmVydC1hLWZhdWx0eS1tZXJnZS5odG1sW3JldmVydC1hLWZhdWx0eS1tZXJnZSBIb3ctVG9dIGZvcgorbW9yZSBkZXRhaWxzLgorCistLW5vLWVkaXQ6OgorCVdpdGggdGhpcyBvcHRpb24sICdnaXQgcmV2ZXJ0JyB3aWxsIG5vdCBzdGFydCB0aGUgY29tbWl0CisJbWVzc2FnZSBlZGl0b3IuCisKKy0tY2xlYW51cD08bW9kZT46OgorCVRoaXMgb3B0aW9uIGRldGVybWluZXMgaG93IHRoZSBjb21taXQgbWVzc2FnZSB3aWxsIGJlIGNsZWFuZWQgdXAgYmVmb3JlCisJYmVpbmcgcGFzc2VkIG9uIHRvIHRoZSBjb21taXQgbWFjaGluZXJ5LiBTZWUgbGlua2dpdDpnaXQtY29tbWl0WzFdIGZvciBtb3JlCisJZGV0YWlscy4gSW4gcGFydGljdWxhciwgaWYgdGhlICc8bW9kZT4nIGlzIGdpdmVuIGEgdmFsdWUgb2YgYHNjaXNzb3JzYCwKKwlzY2lzc29ycyB3aWxsIGJlIGFwcGVuZGVkIHRvIGBNRVJHRV9NU0dgIGJlZm9yZSBiZWluZyBwYXNzZWQgb24gaW4gdGhlIGNhc2UKKwlvZiBhIGNvbmZsaWN0LgorCistbjo6CistLW5vLWNvbW1pdDo6CisJVXN1YWxseSB0aGUgY29tbWFuZCBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgc29tZSBjb21taXRzIHdpdGgKKwljb21taXQgbG9nIG1lc3NhZ2VzIHN0YXRpbmcgd2hpY2ggY29tbWl0cyB3ZXJlCisJcmV2ZXJ0ZWQuICBUaGlzIGZsYWcgYXBwbGllcyB0aGUgY2hhbmdlcyBuZWNlc3NhcnkKKwl0byByZXZlcnQgdGhlIG5hbWVkIGNvbW1pdHMgdG8geW91ciB3b3JraW5nIHRyZWUKKwlhbmQgdGhlIGluZGV4LCBidXQgZG9lcyBub3QgbWFrZSB0aGUgY29tbWl0cy4gIEluIGFkZGl0aW9uLAorCXdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgeW91ciBpbmRleCBkb2VzIG5vdCBoYXZlIHRvIG1hdGNoCisJdGhlIEhFQUQgY29tbWl0LiAgVGhlIHJldmVydCBpcyBkb25lIGFnYWluc3QgdGhlCisJYmVnaW5uaW5nIHN0YXRlIG9mIHlvdXIgaW5kZXguCisrCitUaGlzIGlzIHVzZWZ1bCB3aGVuIHJldmVydGluZyBtb3JlIHRoYW4gb25lIGNvbW1pdHMnCitlZmZlY3QgdG8geW91ciBpbmRleCBpbiBhIHJvdy4KKworLVNbPGtleWlkPl06OgorLS1ncGctc2lnbls9PGtleWlkPl06OgorLS1uby1ncGctc2lnbjo6CisJR1BHLXNpZ24gY29tbWl0cy4gVGhlIGBrZXlpZGAgYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kCisJZGVmYXVsdHMgdG8gdGhlIGNvbW1pdHRlciBpZGVudGl0eTsgaWYgc3BlY2lmaWVkLCBpdCBtdXN0IGJlCisJc3R1Y2sgdG8gdGhlIG9wdGlvbiB3aXRob3V0IGEgc3BhY2UuIGAtLW5vLWdwZy1zaWduYCBpcyB1c2VmdWwgdG8KKwljb3VudGVybWFuZCBib3RoIGBjb21taXQuZ3BnU2lnbmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYW5kCisJZWFybGllciBgLS1ncGctc2lnbmAuCisKKy1zOjoKKy0tc2lnbm9mZjo6CisJQWRkIFNpZ25lZC1vZmYtYnkgbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBjb21taXQgbWVzc2FnZS4KKwlTZWUgdGhlIHNpZ25vZmYgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworLS1zdHJhdGVneT08c3RyYXRlZ3k+OjoKKwlVc2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5LiAgU2hvdWxkIG9ubHkgYmUgdXNlZCBvbmNlLgorCVNlZSB0aGUgTUVSR0UgU1RSQVRFR0lFUyBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdCisJZm9yIGRldGFpbHMuCisKKy1YPG9wdGlvbj46OgorLS1zdHJhdGVneS1vcHRpb249PG9wdGlvbj46OgorCVBhc3MgdGhlIG1lcmdlIHN0cmF0ZWd5LXNwZWNpZmljIG9wdGlvbiB0aHJvdWdoIHRvIHRoZQorCW1lcmdlIHN0cmF0ZWd5LiAgU2VlIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIGZvciBkZXRhaWxzLgorCistLXJlcmVyZS1hdXRvdXBkYXRlOjoKKy0tbm8tcmVyZXJlLWF1dG91cGRhdGU6OgorCUFsbG93IHRoZSByZXJlcmUgbWVjaGFuaXNtIHRvIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCB0aGUKKwlyZXN1bHQgb2YgYXV0by1jb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlLgorCitTRVFVRU5DRVIgU1VCQ09NTUFORFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW5jbHVkZTo6c2VxdWVuY2VyLnR4dFtdCisKK0VYQU1QTEVTCistLS0tLS0tLQorYGdpdCByZXZlcnQgSEVBRH4zYDo6CisKKwlSZXZlcnQgdGhlIGNoYW5nZXMgc3BlY2lmaWVkIGJ5IHRoZSBmb3VydGggbGFzdCBjb21taXQgaW4gSEVBRAorCWFuZCBjcmVhdGUgYSBuZXcgY29tbWl0IHdpdGggdGhlIHJldmVydGVkIGNoYW5nZXMuCisKK2BnaXQgcmV2ZXJ0IC1uIG1hc3Rlcn41Li5tYXN0ZXJ+MmA6OgorCisJUmV2ZXJ0IHRoZSBjaGFuZ2VzIGRvbmUgYnkgY29tbWl0cyBmcm9tIHRoZSBmaWZ0aCBsYXN0IGNvbW1pdAorCWluIG1hc3RlciAoaW5jbHVkZWQpIHRvIHRoZSB0aGlyZCBsYXN0IGNvbW1pdCBpbiBtYXN0ZXIKKwkoaW5jbHVkZWQpLCBidXQgZG8gbm90IGNyZWF0ZSBhbnkgY29tbWl0IHdpdGggdGhlIHJldmVydGVkCisJY2hhbmdlcy4gVGhlIHJldmVydCBvbmx5IG1vZGlmaWVzIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZQorCWluZGV4LgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWNoZXJyeS1waWNrWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcm0udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcm0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNzUwMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ybS50eHQKQEAgLTAsMCArMSwxOTYgQEAKK2dpdC1ybSgxKQorPT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1ybSAtIFJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBybScgWy1mIHwgLS1mb3JjZV0gWy1uXSBbLXJdIFstLWNhY2hlZF0gWy0taWdub3JlLXVubWF0Y2hdCisJICBbLS1xdWlldF0gWy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPiBbLS1wYXRoc3BlYy1maWxlLW51bF1dCisJICBbLS1dIFs8cGF0aHNwZWM+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlbW92ZSBmaWxlcyBtYXRjaGluZyBwYXRoc3BlYyBmcm9tIHRoZSBpbmRleCwgb3IgZnJvbSB0aGUgd29ya2luZyB0cmVlCithbmQgdGhlIGluZGV4LiBgZ2l0IHJtYCB3aWxsIG5vdCByZW1vdmUgYSBmaWxlIGZyb20ganVzdCB5b3VyIHdvcmtpbmcKK2RpcmVjdG9yeS4gKFRoZXJlIGlzIG5vIG9wdGlvbiB0byByZW1vdmUgYSBmaWxlIG9ubHkgZnJvbSB0aGUgd29ya2luZwordHJlZSBhbmQgeWV0IGtlZXAgaXQgaW4gdGhlIGluZGV4OyB1c2UgYC9iaW4vcm1gIGlmIHlvdSB3YW50IHRvIGRvCit0aGF0LikgVGhlIGZpbGVzIGJlaW5nIHJlbW92ZWQgaGF2ZSB0byBiZSBpZGVudGljYWwgdG8gdGhlIHRpcCBvZiB0aGUKK2JyYW5jaCwgYW5kIG5vIHVwZGF0ZXMgdG8gdGhlaXIgY29udGVudHMgY2FuIGJlIHN0YWdlZCBpbiB0aGUgaW5kZXgsCit0aG91Z2ggdGhhdCBkZWZhdWx0IGJlaGF2aW9yIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGAtZmAgb3B0aW9uLgorV2hlbiBgLS1jYWNoZWRgIGlzIGdpdmVuLCB0aGUgc3RhZ2VkIGNvbnRlbnQgaGFzIHRvCittYXRjaCBlaXRoZXIgdGhlIHRpcCBvZiB0aGUgYnJhbmNoIG9yIHRoZSBmaWxlIG9uIGRpc2ssCithbGxvd2luZyB0aGUgZmlsZSB0byBiZSByZW1vdmVkIGZyb20ganVzdCB0aGUgaW5kZXguCisKKworT1BUSU9OUworLS0tLS0tLQorPHBhdGhzcGVjPi4uLjo6CisJRmlsZXMgdG8gcmVtb3ZlLiAgQSBsZWFkaW5nIGRpcmVjdG9yeSBuYW1lIChlLmcuIGBkaXJgIHRvIHJlbW92ZQorCWBkaXIvZmlsZTFgIGFuZCBgZGlyL2ZpbGUyYCkgY2FuIGJlIGdpdmVuIHRvIHJlbW92ZSBhbGwgZmlsZXMgaW4KKwl0aGUgZGlyZWN0b3J5LCBhbmQgcmVjdXJzaXZlbHkgYWxsIHN1Yi1kaXJlY3RvcmllcywgYnV0IHRoaXMKKwlyZXF1aXJlcyB0aGUgYC1yYCBvcHRpb24gdG8gYmUgZXhwbGljaXRseSBnaXZlbi4KKysKK1RoZSBjb21tYW5kIHJlbW92ZXMgb25seSB0aGUgcGF0aHMgdGhhdCBhcmUga25vd24gdG8gR2l0LgorKworRmlsZSBnbG9iYmluZyBtYXRjaGVzIGFjcm9zcyBkaXJlY3RvcnkgYm91bmRhcmllcy4gIFRodXMsIGdpdmVuIHR3bworZGlyZWN0b3JpZXMgYGRgIGFuZCBgZDJgLCB0aGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiB1c2luZworYGdpdCBybSAnZConYCBhbmQgYGdpdCBybSAnZC8qJ2AsIGFzIHRoZSBmb3JtZXIgd2lsbCBhbHNvIHJlbW92ZSBhbGwKK29mIGRpcmVjdG9yeSBgZDJgLgorKworRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSAncGF0aHNwZWMnIGVudHJ5IGluIGxpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10uCisKKy1mOjoKKy0tZm9yY2U6OgorCU92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrLgorCistbjo6CistLWRyeS1ydW46OgorCURvbid0IGFjdHVhbGx5IHJlbW92ZSBhbnkgZmlsZShzKS4gIEluc3RlYWQsIGp1c3Qgc2hvdworCWlmIHRoZXkgZXhpc3QgaW4gdGhlIGluZGV4IGFuZCB3b3VsZCBvdGhlcndpc2UgYmUgcmVtb3ZlZAorCWJ5IHRoZSBjb21tYW5kLgorCistcjo6CisgICAgICAgIEFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIHdoZW4gYSBsZWFkaW5nIGRpcmVjdG9yeSBuYW1lIGlzCisgICAgICAgIGdpdmVuLgorCitcLS06OgorCVRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20KKwl0aGUgbGlzdCBvZiBmaWxlcywgKHVzZWZ1bCB3aGVuIGZpbGVuYW1lcyBtaWdodCBiZSBtaXN0YWtlbgorCWZvciBjb21tYW5kLWxpbmUgb3B0aW9ucykuCisKKy0tY2FjaGVkOjoKKwlVc2UgdGhpcyBvcHRpb24gdG8gdW5zdGFnZSBhbmQgcmVtb3ZlIHBhdGhzIG9ubHkgZnJvbSB0aGUgaW5kZXguCisJV29ya2luZyB0cmVlIGZpbGVzLCB3aGV0aGVyIG1vZGlmaWVkIG9yIG5vdCwgd2lsbCBiZQorCWxlZnQgYWxvbmUuCisKKy0taWdub3JlLXVubWF0Y2g6OgorCUV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm8gZmlsZXMgbWF0Y2hlZC4KKworLXE6OgorLS1xdWlldDo6CisJYGdpdCBybWAgbm9ybWFsbHkgb3V0cHV0cyBvbmUgbGluZSAoaW4gdGhlIGZvcm0gb2YgYW4gYHJtYCBjb21tYW5kKQorCWZvciBlYWNoIGZpbGUgcmVtb3ZlZC4gVGhpcyBvcHRpb24gc3VwcHJlc3NlcyB0aGF0IG91dHB1dC4KKworLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+OjoKKwlQYXRoc3BlYyBpcyBwYXNzZWQgaW4gYDxmaWxlPmAgaW5zdGVhZCBvZiBjb21tYW5kbGluZSBhcmdzLiBJZgorCWA8ZmlsZT5gIGlzIGV4YWN0bHkgYC1gIHRoZW4gc3RhbmRhcmQgaW5wdXQgaXMgdXNlZC4gUGF0aHNwZWMKKwllbGVtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IExGIG9yIENSL0xGLiBQYXRoc3BlYyBlbGVtZW50cyBjYW4gYmUKKwlxdW90ZWQgYXMgZXhwbGFpbmVkIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgY29yZS5xdW90ZVBhdGhgCisJKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLiBTZWUgYWxzbyBgLS1wYXRoc3BlYy1maWxlLW51bGAgYW5kCisJZ2xvYmFsIGAtLWxpdGVyYWwtcGF0aHNwZWNzYC4KKworLS1wYXRoc3BlYy1maWxlLW51bDo6CisJT25seSBtZWFuaW5nZnVsIHdpdGggYC0tcGF0aHNwZWMtZnJvbS1maWxlYC4gUGF0aHNwZWMgZWxlbWVudHMgYXJlCisJc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciBhbmQgYWxsIG90aGVyIGNoYXJhY3RlcnMgYXJlIHRha2VuCisJbGl0ZXJhbGx5IChpbmNsdWRpbmcgbmV3bGluZXMgYW5kIHF1b3RlcykuCisKKworUkVNT1ZJTkcgRklMRVMgVEhBVCBIQVZFIERJU0FQUEVBUkVEIEZST00gVEhFIEZJTEVTWVNURU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVyZSBpcyBubyBvcHRpb24gZm9yIGBnaXQgcm1gIHRvIHJlbW92ZSBmcm9tIHRoZSBpbmRleCBvbmx5Cit0aGUgcGF0aHMgdGhhdCBoYXZlIGRpc2FwcGVhcmVkIGZyb20gdGhlIGZpbGVzeXN0ZW0uIEhvd2V2ZXIsCitkZXBlbmRpbmcgb24gdGhlIHVzZSBjYXNlLCB0aGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRoYXQgY2FuIGJlCitkb25lLgorCitVc2luZyBgYGdpdCBjb21taXQgLWEnJworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0lmIHlvdSBpbnRlbmQgdGhhdCB5b3VyIG5leHQgY29tbWl0IHNob3VsZCByZWNvcmQgYWxsIG1vZGlmaWNhdGlvbnMKK29mIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgcmVjb3JkIGFsbCByZW1vdmFscyBvZgorZmlsZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSB3b3JraW5nIHRyZWUgd2l0aCBgcm1gCisoYXMgb3Bwb3NlZCB0byBgZ2l0IHJtYCksIHVzZSBgZ2l0IGNvbW1pdCAtYWAsIGFzIGl0IHdpbGwKK2F1dG9tYXRpY2FsbHkgbm90aWNlIGFuZCByZWNvcmQgYWxsIHJlbW92YWxzLiAgWW91IGNhbiBhbHNvIGhhdmUgYQorc2ltaWxhciBlZmZlY3Qgd2l0aG91dCBjb21taXR0aW5nIGJ5IHVzaW5nIGBnaXQgYWRkIC11YC4KKworVXNpbmcgYGBnaXQgYWRkIC1BJycKK35+fn5+fn5+fn5+fn5+fn5+fn5+CitXaGVuIGFjY2VwdGluZyBhIG5ldyBjb2RlIGRyb3AgZm9yIGEgdmVuZG9yIGJyYW5jaCwgeW91IHByb2JhYmx5Cit3YW50IHRvIHJlY29yZCBib3RoIHRoZSByZW1vdmFsIG9mIHBhdGhzIGFuZCBhZGRpdGlvbnMgb2YgbmV3IHBhdGhzCithcyB3ZWxsIGFzIG1vZGlmaWNhdGlvbnMgb2YgZXhpc3RpbmcgcGF0aHMuCisKK1R5cGljYWxseSB5b3Ugd291bGQgZmlyc3QgcmVtb3ZlIGFsbCB0cmFja2VkIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcKK3RyZWUgdXNpbmcgdGhpcyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0tLS0tCitnaXQgbHMtZmlsZXMgLXogfCB4YXJncyAtMCBybSAtZgorLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhlbiB1bnRhciB0aGUgbmV3IGNvZGUgaW4gdGhlIHdvcmtpbmcgdHJlZS4gQWx0ZXJuYXRlbHkKK3lvdSBjb3VsZCAncnN5bmMnIHRoZSBjaGFuZ2VzIGludG8gdGhlIHdvcmtpbmcgdHJlZS4KKworQWZ0ZXIgdGhhdCwgdGhlIGVhc2llc3Qgd2F5IHRvIHJlY29yZCBhbGwgcmVtb3ZhbHMsIGFkZGl0aW9ucywgYW5kCittb2RpZmljYXRpb25zIGluIHRoZSB3b3JraW5nIHRyZWUgaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0KK2dpdCBhZGQgLUEKKy0tLS0tLS0tLS0tLS0tLS0KKworU2VlIGxpbmtnaXQ6Z2l0LWFkZFsxXS4KKworT3RoZXIgd2F5cworfn5+fn5+fn5+fgorSWYgYWxsIHlvdSByZWFsbHkgd2FudCB0byBkbyBpcyB0byByZW1vdmUgZnJvbSB0aGUgaW5kZXggdGhlIGZpbGVzCit0aGF0IGFyZSBubyBsb25nZXIgcHJlc2VudCBpbiB0aGUgd29ya2luZyB0cmVlIChwZXJoYXBzIGJlY2F1c2UKK3lvdXIgd29ya2luZyB0cmVlIGlzIGRpcnR5IHNvIHRoYXQgeW91IGNhbm5vdCB1c2UgYGdpdCBjb21taXQgLWFgKSwKK3VzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLS0tLS0KK2dpdCBkaWZmIC0tbmFtZS1vbmx5IC0tZGlmZi1maWx0ZXI9RCAteiB8IHhhcmdzIC0wIGdpdCBybSAtLWNhY2hlZAorLS0tLS0tLS0tLS0tLS0tLQorCitTVUJNT0RVTEVTCistLS0tLS0tLS0tCitPbmx5IHN1Ym1vZHVsZXMgdXNpbmcgYSBnaXRmaWxlICh3aGljaCBtZWFucyB0aGV5IHdlcmUgY2xvbmVkCit3aXRoIGEgR2l0IHZlcnNpb24gMS43Ljggb3IgbmV3ZXIpIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSB3b3JrCit0cmVlLCBhcyB0aGVpciByZXBvc2l0b3J5IGxpdmVzIGluc2lkZSB0aGUgLmdpdCBkaXJlY3Rvcnkgb2YgdGhlCitzdXBlcnByb2plY3QuIElmIGEgc3VibW9kdWxlIChvciBvbmUgb2YgdGhvc2UgbmVzdGVkIGluc2lkZSBpdCkKK3N0aWxsIHVzZXMgYSAuZ2l0IGRpcmVjdG9yeSwgYGdpdCBybWAgd2lsbCBtb3ZlIHRoZSBzdWJtb2R1bGVzCitnaXQgZGlyZWN0b3J5IGludG8gdGhlIHN1cGVycHJvamVjdHMgZ2l0IGRpcmVjdG9yeSB0byBwcm90ZWN0Cit0aGUgc3VibW9kdWxlJ3MgaGlzdG9yeS4gSWYgaXQgZXhpc3RzIHRoZSBzdWJtb2R1bGUuPG5hbWU+IHNlY3Rpb24KK2luIHRoZSBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0gZmlsZSB3aWxsIGFsc28gYmUgcmVtb3ZlZCBhbmQgdGhhdCBmaWxlCit3aWxsIGJlIHN0YWdlZCAodW5sZXNzIC0tY2FjaGVkIG9yIC1uIGFyZSB1c2VkKS4KKworQSBzdWJtb2R1bGUgaXMgY29uc2lkZXJlZCB1cCB0byBkYXRlIHdoZW4gdGhlIEhFQUQgaXMgdGhlIHNhbWUgYXMKK3JlY29yZGVkIGluIHRoZSBpbmRleCwgbm8gdHJhY2tlZCBmaWxlcyBhcmUgbW9kaWZpZWQgYW5kIG5vIHVudHJhY2tlZAorZmlsZXMgdGhhdCBhcmVuJ3QgaWdub3JlZCBhcmUgcHJlc2VudCBpbiB0aGUgc3VibW9kdWxlcyB3b3JrIHRyZWUuCitJZ25vcmVkIGZpbGVzIGFyZSBkZWVtZWQgZXhwZW5kYWJsZSBhbmQgd29uJ3Qgc3RvcCBhIHN1Ym1vZHVsZSdzIHdvcmsKK3RyZWUgZnJvbSBiZWluZyByZW1vdmVkLgorCitJZiB5b3Ugb25seSB3YW50IHRvIHJlbW92ZSB0aGUgbG9jYWwgY2hlY2tvdXQgb2YgYSBzdWJtb2R1bGUgZnJvbSB5b3VyCit3b3JrIHRyZWUgd2l0aG91dCBjb21taXR0aW5nIHRoZSByZW1vdmFsLCB1c2UgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGBkZWluaXRgCitpbnN0ZWFkLiBBbHNvIHNlZSBsaW5rZ2l0OmdpdHN1Ym1vZHVsZXNbN10gZm9yIGRldGFpbHMgb24gc3VibW9kdWxlIHJlbW92YWwuCisKK0VYQU1QTEVTCistLS0tLS0tLQorYGdpdCBybSBEb2N1bWVudGF0aW9uL1wqLnR4dGA6OgorCVJlbW92ZXMgYWxsIGAqLnR4dGAgZmlsZXMgZnJvbSB0aGUgaW5kZXggdGhhdCBhcmUgdW5kZXIgdGhlCisJYERvY3VtZW50YXRpb25gIGRpcmVjdG9yeSBhbmQgYW55IG9mIGl0cyBzdWJkaXJlY3Rvcmllcy4KKysKK05vdGUgdGhhdCB0aGUgYXN0ZXJpc2sgYCpgIGlzIHF1b3RlZCBmcm9tIHRoZSBzaGVsbCBpbiB0aGlzCitleGFtcGxlOyB0aGlzIGxldHMgR2l0LCBhbmQgbm90IHRoZSBzaGVsbCwgZXhwYW5kIHRoZSBwYXRobmFtZXMKK29mIGZpbGVzIGFuZCBzdWJkaXJlY3RvcmllcyB1bmRlciB0aGUgYERvY3VtZW50YXRpb24vYCBkaXJlY3RvcnkuCisKK2BnaXQgcm0gLWYgZ2l0LSouc2hgOjoKKwlCZWNhdXNlIHRoaXMgZXhhbXBsZSBsZXRzIHRoZSBzaGVsbCBleHBhbmQgdGhlIGFzdGVyaXNrCisJKGkuZS4geW91IGFyZSBsaXN0aW5nIHRoZSBmaWxlcyBleHBsaWNpdGx5KSwgaXQKKwlkb2VzIG5vdCByZW1vdmUgYHN1YmRpci9naXQtZm9vLnNoYC4KKworQlVHUworLS0tLQorRWFjaCB0aW1lIGEgc3VwZXJwcm9qZWN0IHVwZGF0ZSByZW1vdmVzIGEgcG9wdWxhdGVkIHN1Ym1vZHVsZQorKGUuZy4gd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBjb21taXRzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHJlbW92YWwpIGEKK3N0YWxlIHN1Ym1vZHVsZSBjaGVja291dCB3aWxsIHJlbWFpbiBpbiB0aGUgb2xkIGxvY2F0aW9uLiBSZW1vdmluZyB0aGUKK29sZCBkaXJlY3RvcnkgaXMgb25seSBzYWZlIHdoZW4gaXQgdXNlcyBhIGdpdGZpbGUsIGFzIG90aGVyd2lzZSB0aGUKK2hpc3Rvcnkgb2YgdGhlIHN1Ym1vZHVsZSB3aWxsIGJlIGRlbGV0ZWQgdG9vLiBUaGlzIHN0ZXAgd2lsbCBiZQorb2Jzb2xldGUgd2hlbiByZWN1cnNpdmUgc3VibW9kdWxlIHVwZGF0ZSBoYXMgYmVlbiBpbXBsZW1lbnRlZC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1hZGRbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLWVtYWlsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtZW1haWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjk4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLWVtYWlsLnR4dApAQCAtMCwwICsxLDUyNiBAQAorZ2l0LXNlbmQtZW1haWwoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zZW5kLWVtYWlsIC0gU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBhcyBlbWFpbHMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc2VuZC1lbWFpbCcgWzxvcHRpb25zPl0gPGZpbGV8ZGlyZWN0b3J5fHJldi1saXN0IG9wdGlvbnM+Li4uCisnZ2l0IHNlbmQtZW1haWwnIC0tZHVtcC1hbGlhc2VzCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUYWtlcyB0aGUgcGF0Y2hlcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCBlbWFpbHMgdGhlbSBvdXQuCitQYXRjaGVzIGNhbiBiZSBzcGVjaWZpZWQgYXMgZmlsZXMsIGRpcmVjdG9yaWVzICh3aGljaCB3aWxsIHNlbmQgYWxsCitmaWxlcyBpbiB0aGUgZGlyZWN0b3J5KSwgb3IgZGlyZWN0bHkgYXMgYSByZXZpc2lvbiBsaXN0LiAgSW4gdGhlCitsYXN0IGNhc2UsIGFueSBmb3JtYXQgYWNjZXB0ZWQgYnkgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIGNhbgorYmUgcGFzc2VkIHRvIGdpdCBzZW5kLWVtYWlsLgorCitUaGUgaGVhZGVyIG9mIHRoZSBlbWFpbCBpcyBjb25maWd1cmFibGUgdmlhIGNvbW1hbmQtbGluZSBvcHRpb25zLiAgSWYgbm90CitzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlIHVzZXIgd2lsbCBiZSBwcm9tcHRlZCB3aXRoIGEgUmVhZExpbmUKK2VuYWJsZWQgaW50ZXJmYWNlIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi4KKworVGhlcmUgYXJlIHR3byBmb3JtYXRzIGFjY2VwdGVkIGZvciBwYXRjaCBmaWxlczoKKworMS4gbWJveCBmb3JtYXQgZmlsZXMKKysKK1RoaXMgaXMgd2hhdCBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gZ2VuZXJhdGVzLiAgTW9zdCBoZWFkZXJzIGFuZCBNSU1FCitmb3JtYXR0aW5nIGFyZSBpZ25vcmVkLgorCisyLiBUaGUgb3JpZ2luYWwgZm9ybWF0IHVzZWQgYnkgR3JlZyBLcm9haC1IYXJ0bWFuJ3MgJ3NlbmRfbG90c19vZl9lbWFpbC5wbCcKKyAgIHNjcmlwdAorKworVGhpcyBmb3JtYXQgZXhwZWN0cyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZmlsZSB0byBjb250YWluIHRoZSAiQ2M6IiB2YWx1ZQorYW5kIHRoZSAiU3ViamVjdDoiIG9mIHRoZSBtZXNzYWdlIGFzIHRoZSBzZWNvbmQgbGluZS4KKworCitPUFRJT05TCistLS0tLS0tCisKK0NvbXBvc2luZworfn5+fn5+fn5+CisKKy0tYW5ub3RhdGU6OgorCVJldmlldyBhbmQgZWRpdCBlYWNoIHBhdGNoIHlvdSdyZSBhYm91dCB0byBzZW5kLiBEZWZhdWx0IGlzIHRoZSB2YWx1ZQorCW9mIGBzZW5kZW1haWwuYW5ub3RhdGVgLiBTZWUgdGhlIENPTkZJR1VSQVRJT04gc2VjdGlvbiBmb3IKKwlgc2VuZGVtYWlsLm11bHRpRWRpdGAuCisKKy0tYmNjPTxhZGRyZXNzPiwuLi46OgorCVNwZWNpZnkgYSAiQmNjOiIgdmFsdWUgZm9yIGVhY2ggZW1haWwuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mCisJYHNlbmRlbWFpbC5iY2NgLgorKworVGhpcyBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KKworLS1jYz08YWRkcmVzcz4sLi4uOjoKKwlTcGVjaWZ5IGEgc3RhcnRpbmcgIkNjOiIgdmFsdWUgZm9yIGVhY2ggZW1haWwuCisJRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC5jY2AuCisrCitUaGlzIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgorCistLWNvbXBvc2U6OgorCUludm9rZSBhIHRleHQgZWRpdG9yIChzZWUgR0lUX0VESVRPUiBpbiBsaW5rZ2l0OmdpdC12YXJbMV0pCisJdG8gZWRpdCBhbiBpbnRyb2R1Y3RvcnkgbWVzc2FnZSBmb3IgdGhlIHBhdGNoIHNlcmllcy4KKysKK1doZW4gYC0tY29tcG9zZWAgaXMgdXNlZCwgZ2l0IHNlbmQtZW1haWwgd2lsbCB1c2UgdGhlIEZyb20sIFN1YmplY3QsIGFuZAorSW4tUmVwbHktVG8gaGVhZGVycyBzcGVjaWZpZWQgaW4gdGhlIG1lc3NhZ2UuIElmIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlCisod2hhdCB5b3UgdHlwZSBhZnRlciB0aGUgaGVhZGVycyBhbmQgYSBibGFuayBsaW5lKSBvbmx5IGNvbnRhaW5zIGJsYW5rCisob3IgR2l0OiBwcmVmaXhlZCkgbGluZXMsIHRoZSBzdW1tYXJ5IHdvbid0IGJlIHNlbnQsIGJ1dCBGcm9tLCBTdWJqZWN0LAorYW5kIEluLVJlcGx5LVRvIGhlYWRlcnMgd2lsbCBiZSB1c2VkIHVubGVzcyB0aGV5IGFyZSByZW1vdmVkLgorKworTWlzc2luZyBGcm9tIG9yIEluLVJlcGx5LVRvIGhlYWRlcnMgd2lsbCBiZSBwcm9tcHRlZCBmb3IuCisrCitTZWUgdGhlIENPTkZJR1VSQVRJT04gc2VjdGlvbiBmb3IgYHNlbmRlbWFpbC5tdWx0aUVkaXRgLgorCistLWZyb209PGFkZHJlc3M+OjoKKwlTcGVjaWZ5IHRoZSBzZW5kZXIgb2YgdGhlIGVtYWlscy4gIElmIG5vdCBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwKKwl0aGUgdmFsdWUgb2YgdGhlIGBzZW5kZW1haWwuZnJvbWAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgdXNlZC4gIElmCisJbmVpdGhlciB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiBub3IgYHNlbmRlbWFpbC5mcm9tYCBhcmUgc2V0LCB0aGVuIHRoZQorCXVzZXIgd2lsbCBiZSBwcm9tcHRlZCBmb3IgdGhlIHZhbHVlLiAgVGhlIGRlZmF1bHQgZm9yIHRoZSBwcm9tcHQgd2lsbCBiZQorCXRoZSB2YWx1ZSBvZiBHSVRfQVVUSE9SX0lERU5ULCBvciBHSVRfQ09NTUlUVEVSX0lERU5UIGlmIHRoYXQgaXMgbm90CisJc2V0LCBhcyByZXR1cm5lZCBieSAiZ2l0IHZhciAtbCIuCisKKy0tcmVwbHktdG89PGFkZHJlc3M+OjoKKwlTcGVjaWZ5IHRoZSBhZGRyZXNzIHdoZXJlIHJlcGxpZXMgZnJvbSByZWNpcGllbnRzIHNob3VsZCBnbyB0by4KKwlVc2UgdGhpcyBpZiByZXBsaWVzIHRvIG1lc3NhZ2VzIHNob3VsZCBnbyB0byBhbm90aGVyIGFkZHJlc3MgdGhhbiB3aGF0CisJaXMgc3BlY2lmaWVkIHdpdGggdGhlIC0tZnJvbSBwYXJhbWV0ZXIuCisKKy0taW4tcmVwbHktdG89PGlkZW50aWZpZXI+OjoKKwlNYWtlIHRoZSBmaXJzdCBtYWlsIChvciBhbGwgdGhlIG1haWxzIHdpdGggYC0tbm8tdGhyZWFkYCkgYXBwZWFyIGFzIGEKKwlyZXBseSB0byB0aGUgZ2l2ZW4gTWVzc2FnZS1JZCwgd2hpY2ggYXZvaWRzIGJyZWFraW5nIHRocmVhZHMgdG8KKwlwcm92aWRlIGEgbmV3IHBhdGNoIHNlcmllcy4KKwlUaGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IGVtYWlscyB3aWxsIGJlIHNlbnQgYXMgcmVwbGllcyBhY2NvcmRpbmcgdG8KKwl0aGUgYC0tW25vLV1jaGFpbi1yZXBseS10b2Agc2V0dGluZy4KKysKK1NvIGZvciBleGFtcGxlIHdoZW4gYC0tdGhyZWFkYCBhbmQgYC0tbm8tY2hhaW4tcmVwbHktdG9gIGFyZSBzcGVjaWZpZWQsIHRoZQorc2Vjb25kIGFuZCBzdWJzZXF1ZW50IHBhdGNoZXMgd2lsbCBiZSByZXBsaWVzIHRvIHRoZSBmaXJzdCBvbmUgbGlrZSBpbiB0aGUKK2lsbHVzdHJhdGlvbiBiZWxvdyB3aGVyZSBgW1BBVENIIHYyIDAvM11gIGlzIGluIHJlcGx5IHRvIGBbUEFUQ0ggMC8yXWA6CisrCisgIFtQQVRDSCAwLzJdIEhlcmUgaXMgd2hhdCBJIGRpZC4uLgorICAgIFtQQVRDSCAxLzJdIENsZWFuIHVwIGFuZCB0ZXN0cworICAgIFtQQVRDSCAyLzJdIEltcGxlbWVudGF0aW9uCisgICAgW1BBVENIIHYyIDAvM10gSGVyZSBpcyBhIHJlcm9sbAorICAgICAgW1BBVENIIHYyIDEvM10gQ2xlYW4gdXAKKyAgICAgIFtQQVRDSCB2MiAyLzNdIE5ldyB0ZXN0cworICAgICAgW1BBVENIIHYyIDMvM10gSW1wbGVtZW50YXRpb24KKysKK09ubHkgbmVjZXNzYXJ5IGlmIC0tY29tcG9zZSBpcyBhbHNvIHNldC4gIElmIC0tY29tcG9zZQoraXMgbm90IHNldCwgdGhpcyB3aWxsIGJlIHByb21wdGVkIGZvci4KKworLS1zdWJqZWN0PTxzdHJpbmc+OjoKKwlTcGVjaWZ5IHRoZSBpbml0aWFsIHN1YmplY3Qgb2YgdGhlIGVtYWlsIHRocmVhZC4KKwlPbmx5IG5lY2Vzc2FyeSBpZiAtLWNvbXBvc2UgaXMgYWxzbyBzZXQuICBJZiAtLWNvbXBvc2UKKwlpcyBub3Qgc2V0LCB0aGlzIHdpbGwgYmUgcHJvbXB0ZWQgZm9yLgorCistLXRvPTxhZGRyZXNzPiwuLi46OgorCVNwZWNpZnkgdGhlIHByaW1hcnkgcmVjaXBpZW50IG9mIHRoZSBlbWFpbHMgZ2VuZXJhdGVkLiBHZW5lcmFsbHksIHRoaXMKKwl3aWxsIGJlIHRoZSB1cHN0cmVhbSBtYWludGFpbmVyIG9mIHRoZSBwcm9qZWN0IGludm9sdmVkLiBEZWZhdWx0IGlzIHRoZQorCXZhbHVlIG9mIHRoZSBgc2VuZGVtYWlsLnRvYCBjb25maWd1cmF0aW9uIHZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLAorCWFuZCAtLXRvLWNtZCBpcyBub3Qgc3BlY2lmaWVkLCB0aGlzIHdpbGwgYmUgcHJvbXB0ZWQgZm9yLgorKworVGhpcyBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KKworLS04Yml0LWVuY29kaW5nPTxlbmNvZGluZz46OgorCVdoZW4gZW5jb3VudGVyaW5nIGEgbm9uLUFTQ0lJIG1lc3NhZ2Ugb3Igc3ViamVjdCB0aGF0IGRvZXMgbm90CisJZGVjbGFyZSBpdHMgZW5jb2RpbmcsIGFkZCBoZWFkZXJzL3F1b3RpbmcgdG8gaW5kaWNhdGUgaXQgaXMKKwllbmNvZGVkIGluIDxlbmNvZGluZz4uICBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUKKwknc2VuZGVtYWlsLmFzc3VtZThiaXRFbmNvZGluZyc7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsIHRoaXMKKwl3aWxsIGJlIHByb21wdGVkIGZvciBpZiBhbnkgbm9uLUFTQ0lJIGZpbGVzIGFyZSBlbmNvdW50ZXJlZC4KKysKK05vdGUgdGhhdCBubyBhdHRlbXB0cyB3aGF0c29ldmVyIGFyZSBtYWRlIHRvIHZhbGlkYXRlIHRoZSBlbmNvZGluZy4KKworLS1jb21wb3NlLWVuY29kaW5nPTxlbmNvZGluZz46OgorCVNwZWNpZnkgZW5jb2Rpbmcgb2YgY29tcG9zZSBtZXNzYWdlLiBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUKKwknc2VuZGVtYWlsLmNvbXBvc2VlbmNvZGluZyc7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsIFVURi04IGlzIGFzc3VtZWQuCisKKy0tdHJhbnNmZXItZW5jb2Rpbmc9KDdiaXR8OGJpdHxxdW90ZWQtcHJpbnRhYmxlfGJhc2U2NHxhdXRvKTo6CisJU3BlY2lmeSB0aGUgdHJhbnNmZXIgZW5jb2RpbmcgdG8gYmUgdXNlZCB0byBzZW5kIHRoZSBtZXNzYWdlIG92ZXIgU01UUC4KKwk3Yml0IHdpbGwgZmFpbCB1cG9uIGVuY291bnRlcmluZyBhIG5vbi1BU0NJSSBtZXNzYWdlLiAgcXVvdGVkLXByaW50YWJsZQorCWNhbiBiZSB1c2VmdWwgd2hlbiB0aGUgcmVwb3NpdG9yeSBjb250YWlucyBmaWxlcyB0aGF0IGNvbnRhaW4gY2FycmlhZ2UKKwlyZXR1cm5zLCBidXQgbWFrZXMgdGhlIHJhdyBwYXRjaCBlbWFpbCBmaWxlIChhcyBzYXZlZCBmcm9tIGEgTVVBKSBtdWNoCisJaGFyZGVyIHRvIGluc3BlY3QgbWFudWFsbHkuICBiYXNlNjQgaXMgZXZlbiBtb3JlIGZvb2wgcHJvb2YsIGJ1dCBhbHNvCisJZXZlbiBtb3JlIG9wYXF1ZS4gIGF1dG8gd2lsbCB1c2UgOGJpdCB3aGVuIHBvc3NpYmxlLCBhbmQgcXVvdGVkLXByaW50YWJsZQorCW90aGVyd2lzZS4KKysKK0RlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZSBgc2VuZGVtYWlsLnRyYW5zZmVyRW5jb2RpbmdgIGNvbmZpZ3VyYXRpb24KK3ZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvIGBhdXRvYC4KKworLS14bWFpbGVyOjoKKy0tbm8teG1haWxlcjo6CisJQWRkIChvciBwcmV2ZW50IGFkZGluZykgdGhlICJYLU1haWxlcjoiIGhlYWRlci4gIEJ5IGRlZmF1bHQsCisJdGhlIGhlYWRlciBpcyBhZGRlZCwgYnV0IGl0IGNhbiBiZSB0dXJuZWQgb2ZmIGJ5IHNldHRpbmcgdGhlCisJYHNlbmRlbWFpbC54bWFpbGVyYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGBmYWxzZWAuCisKK1NlbmRpbmcKK35+fn5+fn4KKworLS1lbnZlbG9wZS1zZW5kZXI9PGFkZHJlc3M+OjoKKwlTcGVjaWZ5IHRoZSBlbnZlbG9wZSBzZW5kZXIgdXNlZCB0byBzZW5kIHRoZSBlbWFpbHMuCisJVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBkZWZhdWx0IGFkZHJlc3MgaXMgbm90IHRoZSBhZGRyZXNzIHRoYXQgaXMKKwlzdWJzY3JpYmVkIHRvIGEgbGlzdC4gSW4gb3JkZXIgdG8gdXNlIHRoZSAnRnJvbScgYWRkcmVzcywgc2V0IHRoZQorCXZhbHVlIHRvICJhdXRvIi4gSWYgeW91IHVzZSB0aGUgc2VuZG1haWwgYmluYXJ5LCB5b3UgbXVzdCBoYXZlCisJc3VpdGFibGUgcHJpdmlsZWdlcyBmb3IgdGhlIC1mIHBhcmFtZXRlci4gIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZQorCWBzZW5kZW1haWwuZW52ZWxvcGVTZW5kZXJgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGU7IGlmIHRoYXQgaXMKKwl1bnNwZWNpZmllZCwgY2hvb3NpbmcgdGhlIGVudmVsb3BlIHNlbmRlciBpcyBsZWZ0IHRvIHlvdXIgTVRBLgorCistLXNtdHAtZW5jcnlwdGlvbj08ZW5jcnlwdGlvbj46OgorCVNwZWNpZnkgdGhlIGVuY3J5cHRpb24gdG8gdXNlLCBlaXRoZXIgJ3NzbCcgb3IgJ3RscycuICBBbnkgb3RoZXIKKwl2YWx1ZSByZXZlcnRzIHRvIHBsYWluIFNNVFAuICBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZgorCWBzZW5kZW1haWwuc210cEVuY3J5cHRpb25gLgorCistLXNtdHAtZG9tYWluPTxGUUROPjo6CisJU3BlY2lmaWVzIHRoZSBGdWxseSBRdWFsaWZpZWQgRG9tYWluIE5hbWUgKEZRRE4pIHVzZWQgaW4gdGhlCisJSEVMTy9FSExPIGNvbW1hbmQgdG8gdGhlIFNNVFAgc2VydmVyLiAgU29tZSBzZXJ2ZXJzIHJlcXVpcmUgdGhlCisJRlFETiB0byBtYXRjaCB5b3VyIElQIGFkZHJlc3MuICBJZiBub3Qgc2V0LCBnaXQgc2VuZC1lbWFpbCBhdHRlbXB0cworCXRvIGRldGVybWluZSB5b3VyIEZRRE4gYXV0b21hdGljYWxseS4gIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mCisJYHNlbmRlbWFpbC5zbXRwRG9tYWluYC4KKworLS1zbXRwLWF1dGg9PG1lY2hhbmlzbXM+OjoKKwlXaGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFsbG93ZWQgU01UUC1BVVRIIG1lY2hhbmlzbXMuIFRoaXMgc2V0dGluZworCWZvcmNlcyB1c2luZyBvbmx5IHRoZSBsaXN0ZWQgbWVjaGFuaXNtcy4gRXhhbXBsZToKKysKKy0tLS0tLQorJCBnaXQgc2VuZC1lbWFpbCAtLXNtdHAtYXV0aD0iUExBSU4gTE9HSU4gR1NTQVBJIiAuLi4KKy0tLS0tLQorKworSWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBzcGVjaWZpZWQgbWVjaGFuaXNtcyBtYXRjaGVzIHRoZSBvbmVzIGFkdmVydGlzZWQgYnkgdGhlCitTTVRQIHNlcnZlciBhbmQgaWYgaXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSB1dGlsaXplZCBTQVNMIGxpYnJhcnksIHRoZSBtZWNoYW5pc20KK2lzIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uLiBJZiBuZWl0aGVyICdzZW5kZW1haWwuc210cEF1dGgnIG5vciBgLS1zbXRwLWF1dGhgCitpcyBzcGVjaWZpZWQsIGFsbCBtZWNoYW5pc21zIHN1cHBvcnRlZCBieSB0aGUgU0FTTCBsaWJyYXJ5IGNhbiBiZSB1c2VkLiBUaGUKK3NwZWNpYWwgdmFsdWUgJ25vbmUnIG1heWJlIHNwZWNpZmllZCB0byBjb21wbGV0ZWx5IGRpc2FibGUgYXV0aGVudGljYXRpb24KK2luZGVwZW5kZW50bHkgb2YgYC0tc210cC11c2VyYAorCistLXNtdHAtcGFzc1s9PHBhc3N3b3JkPl06OgorCVBhc3N3b3JkIGZvciBTTVRQLUFVVEguIFRoZSBhcmd1bWVudCBpcyBvcHRpb25hbDogSWYgbm8KKwlhcmd1bWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGVtcHR5IHN0cmluZyBpcyB1c2VkIGFzCisJdGhlIHBhc3N3b3JkLiBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiBgc2VuZGVtYWlsLnNtdHBQYXNzYCwKKwlob3dldmVyIGAtLXNtdHAtcGFzc2AgYWx3YXlzIG92ZXJyaWRlcyB0aGlzIHZhbHVlLgorKworRnVydGhlcm1vcmUsIHBhc3N3b3JkcyBuZWVkIG5vdCBiZSBzcGVjaWZpZWQgaW4gY29uZmlndXJhdGlvbiBmaWxlcworb3Igb24gdGhlIGNvbW1hbmQgbGluZS4gSWYgYSB1c2VybmFtZSBoYXMgYmVlbiBzcGVjaWZpZWQgKHdpdGgKK2AtLXNtdHAtdXNlcmAgb3IgYSBgc2VuZGVtYWlsLnNtdHBVc2VyYCksIGJ1dCBubyBwYXNzd29yZCBoYXMgYmVlbgorc3BlY2lmaWVkICh3aXRoIGAtLXNtdHAtcGFzc2Agb3IgYHNlbmRlbWFpbC5zbXRwUGFzc2ApLCB0aGVuCithIHBhc3N3b3JkIGlzIG9idGFpbmVkIHVzaW5nICdnaXQtY3JlZGVudGlhbCcuCisKKy0tbm8tc210cC1hdXRoOjoKKwlEaXNhYmxlIFNNVFAgYXV0aGVudGljYXRpb24uIFNob3J0IGhhbmQgZm9yIGAtLXNtdHAtYXV0aD1ub25lYAorCistLXNtdHAtc2VydmVyPTxob3N0Pjo6CisJSWYgc2V0LCBzcGVjaWZpZXMgdGhlIG91dGdvaW5nIFNNVFAgc2VydmVyIHRvIHVzZSAoZS5nLgorCWBzbXRwLmV4YW1wbGUuY29tYCBvciBhIHJhdyBJUCBhZGRyZXNzKS4gIEFsdGVybmF0aXZlbHkgaXQgY2FuCisJc3BlY2lmeSBhIGZ1bGwgcGF0aG5hbWUgb2YgYSBzZW5kbWFpbC1saWtlIHByb2dyYW0gaW5zdGVhZDsKKwl0aGUgcHJvZ3JhbSBtdXN0IHN1cHBvcnQgdGhlIGAtaWAgb3B0aW9uLiAgRGVmYXVsdCB2YWx1ZSBjYW4KKwliZSBzcGVjaWZpZWQgYnkgdGhlIGBzZW5kZW1haWwuc210cFNlcnZlcmAgY29uZmlndXJhdGlvbgorCW9wdGlvbjsgdGhlIGJ1aWx0LWluIGRlZmF1bHQgaXMgdG8gc2VhcmNoIGZvciBgc2VuZG1haWxgIGluCisJYC91c3Ivc2JpbmAsIGAvdXNyL2xpYmAgYW5kICRQQVRIIGlmIHN1Y2ggcHJvZ3JhbSBpcworCWF2YWlsYWJsZSwgZmFsbGluZyBiYWNrIHRvIGBsb2NhbGhvc3RgIG90aGVyd2lzZS4KKworLS1zbXRwLXNlcnZlci1wb3J0PTxwb3J0Pjo6CisJU3BlY2lmaWVzIGEgcG9ydCBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCBwb3J0IChTTVRQCisJc2VydmVycyB0eXBpY2FsbHkgbGlzdGVuIHRvIHNtdHAgcG9ydCAyNSwgYnV0IG1heSBhbHNvIGxpc3RlbiB0bworCXN1Ym1pc3Npb24gcG9ydCA1ODcsIG9yIHRoZSBjb21tb24gU1NMIHNtdHAgcG9ydCA0NjUpOworCXN5bWJvbGljIHBvcnQgbmFtZXMgKGUuZy4gInN1Ym1pc3Npb24iIGluc3RlYWQgb2YgNTg3KQorCWFyZSBhbHNvIGFjY2VwdGVkLiBUaGUgcG9ydCBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUKKwlgc2VuZGVtYWlsLnNtdHBTZXJ2ZXJQb3J0YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCistLXNtdHAtc2VydmVyLW9wdGlvbj08b3B0aW9uPjo6CisJSWYgc2V0LCBzcGVjaWZpZXMgdGhlIG91dGdvaW5nIFNNVFAgc2VydmVyIG9wdGlvbiB0byB1c2UuCisJRGVmYXVsdCB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIGJ5IHRoZSBgc2VuZGVtYWlsLnNtdHBTZXJ2ZXJPcHRpb25gCisJY29uZmlndXJhdGlvbiBvcHRpb24uCisrCitUaGUgLS1zbXRwLXNlcnZlci1vcHRpb24gb3B0aW9uIG11c3QgYmUgcmVwZWF0ZWQgZm9yIGVhY2ggb3B0aW9uIHlvdSB3YW50Cit0byBwYXNzIHRvIHRoZSBzZXJ2ZXIuIExpa2V3aXNlLCBkaWZmZXJlbnQgbGluZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMKK211c3QgYmUgdXNlZCBmb3IgZWFjaCBvcHRpb24uCisKKy0tc210cC1zc2w6OgorCUxlZ2FjeSBhbGlhcyBmb3IgJy0tc210cC1lbmNyeXB0aW9uIHNzbCcuCisKKy0tc210cC1zc2wtY2VydC1wYXRoOjoKKwlQYXRoIHRvIGEgc3RvcmUgb2YgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZXMgZm9yIFNNVFAgU1NML1RMUworCWNlcnRpZmljYXRlIHZhbGlkYXRpb24gKGVpdGhlciBhIGRpcmVjdG9yeSB0aGF0IGhhcyBiZWVuIHByb2Nlc3NlZAorCWJ5ICdjX3JlaGFzaCcsIG9yIGEgc2luZ2xlIGZpbGUgY29udGFpbmluZyBvbmUgb3IgbW9yZSBQRU0gZm9ybWF0CisJY2VydGlmaWNhdGVzIGNvbmNhdGVuYXRlZCB0b2dldGhlcjogc2VlIHZlcmlmeSgxKSAtQ0FmaWxlIGFuZAorCS1DQXBhdGggZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UpLiBTZXQgaXQgdG8gYW4gZW1wdHkgc3RyaW5nCisJdG8gZGlzYWJsZSBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24uIERlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiB0aGUKKwlgc2VuZGVtYWlsLnNtdHBzc2xjZXJ0cGF0aGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgaWYgc2V0LCBvciB0aGUKKwliYWNraW5nIFNTTCBsaWJyYXJ5J3MgY29tcGlsZWQtaW4gZGVmYXVsdCBvdGhlcndpc2UgKHdoaWNoIHNob3VsZAorCWJlIHRoZSBiZXN0IGNob2ljZSBvbiBtb3N0IHBsYXRmb3JtcykuCisKKy0tc210cC11c2VyPTx1c2VyPjo6CisJVXNlcm5hbWUgZm9yIFNNVFAtQVVUSC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC5zbXRwVXNlcmA7CisJaWYgYSB1c2VybmFtZSBpcyBub3Qgc3BlY2lmaWVkICh3aXRoIGAtLXNtdHAtdXNlcmAgb3IgYHNlbmRlbWFpbC5zbXRwVXNlcmApLAorCXRoZW4gYXV0aGVudGljYXRpb24gaXMgbm90IGF0dGVtcHRlZC4KKworLS1zbXRwLWRlYnVnPTB8MTo6CisJRW5hYmxlICgxKSBvciBkaXNhYmxlICgwKSBkZWJ1ZyBvdXRwdXQuIElmIGVuYWJsZWQsIFNNVFAKKwljb21tYW5kcyBhbmQgcmVwbGllcyB3aWxsIGJlIHByaW50ZWQuIFVzZWZ1bCB0byBkZWJ1ZyBUTFMKKwljb25uZWN0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiBwcm9ibGVtcy4KKworLS1iYXRjaC1zaXplPTxudW0+OjoKKwlTb21lIGVtYWlsIHNlcnZlcnMgKGUuZy4gc210cC4xNjMuY29tKSBsaW1pdCB0aGUgbnVtYmVyIGVtYWlscyB0byBiZQorCXNlbnQgcGVyIHNlc3Npb24gKGNvbm5lY3Rpb24pIGFuZCB0aGlzIHdpbGwgbGVhZCB0byBhIGZhaWx1cmUgd2hlbgorCXNlbmRpbmcgbWFueSBtZXNzYWdlcy4gIFdpdGggdGhpcyBvcHRpb24sIHNlbmQtZW1haWwgd2lsbCBkaXNjb25uZWN0IGFmdGVyCisJc2VuZGluZyAkPG51bT4gbWVzc2FnZXMgYW5kIHdhaXQgZm9yIGEgZmV3IHNlY29uZHMgKHNlZSAtLXJlbG9naW4tZGVsYXkpCisJYW5kIHJlY29ubmVjdCwgdG8gd29yayBhcm91bmQgc3VjaCBhIGxpbWl0LiAgWW91IG1heSB3YW50IHRvCisJdXNlIHNvbWUgZm9ybSBvZiBjcmVkZW50aWFsIGhlbHBlciB0byBhdm9pZCBoYXZpbmcgdG8gcmV0eXBlCisJeW91ciBwYXNzd29yZCBldmVyeSB0aW1lIHRoaXMgaGFwcGVucy4gIERlZmF1bHRzIHRvIHRoZQorCWBzZW5kZW1haWwuc210cEJhdGNoU2l6ZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworLS1yZWxvZ2luLWRlbGF5PTxpbnQ+OjoKKwlXYWl0aW5nICQ8aW50PiBzZWNvbmRzIGJlZm9yZSByZWNvbm5lY3RpbmcgdG8gU01UUCBzZXJ2ZXIuIFVzZWQgdG9nZXRoZXIKKwl3aXRoIC0tYmF0Y2gtc2l6ZSBvcHRpb24uICBEZWZhdWx0cyB0byB0aGUgYHNlbmRlbWFpbC5zbXRwUmVsb2dpbkRlbGF5YAorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKK0F1dG9tYXRpbmcKK35+fn5+fn5+fn4KKworLS1uby1bdG98Y2N8YmNjXTo6CisJQ2xlYXJzIGFueSBsaXN0IG9mICJUbzoiLCAiQ2M6IiwgIkJjYzoiIGFkZHJlc3NlcyBwcmV2aW91c2x5CisJc2V0IHZpYSBjb25maWcuCisKKy0tbm8taWRlbnRpdHk6OgorCUNsZWFycyB0aGUgcHJldmlvdXNseSByZWFkIHZhbHVlIG9mIGBzZW5kZW1haWwuaWRlbnRpdHlgIHNldAorCXZpYSBjb25maWcsIGlmIGFueS4KKworLS10by1jbWQ9PGNvbW1hbmQ+OjoKKwlTcGVjaWZ5IGEgY29tbWFuZCB0byBleGVjdXRlIG9uY2UgcGVyIHBhdGNoIGZpbGUgd2hpY2gKKwlzaG91bGQgZ2VuZXJhdGUgcGF0Y2ggZmlsZSBzcGVjaWZpYyAiVG86IiBlbnRyaWVzLgorCU91dHB1dCBvZiB0aGlzIGNvbW1hbmQgbXVzdCBiZSBzaW5nbGUgZW1haWwgYWRkcmVzcyBwZXIgbGluZS4KKwlEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLnRvY21kJyBjb25maWd1cmF0aW9uIHZhbHVlLgorCistLWNjLWNtZD08Y29tbWFuZD46OgorCVNwZWNpZnkgYSBjb21tYW5kIHRvIGV4ZWN1dGUgb25jZSBwZXIgcGF0Y2ggZmlsZSB3aGljaAorCXNob3VsZCBnZW5lcmF0ZSBwYXRjaCBmaWxlIHNwZWNpZmljICJDYzoiIGVudHJpZXMuCisJT3V0cHV0IG9mIHRoaXMgY29tbWFuZCBtdXN0IGJlIHNpbmdsZSBlbWFpbCBhZGRyZXNzIHBlciBsaW5lLgorCURlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIGBzZW5kZW1haWwuY2NDbWRgIGNvbmZpZ3VyYXRpb24gdmFsdWUuCisKKy0tW25vLV1jaGFpbi1yZXBseS10bzo6CisJSWYgdGhpcyBpcyBzZXQsIGVhY2ggZW1haWwgd2lsbCBiZSBzZW50IGFzIGEgcmVwbHkgdG8gdGhlIHByZXZpb3VzCisJZW1haWwgc2VudC4gIElmIGRpc2FibGVkIHdpdGggIi0tbm8tY2hhaW4tcmVwbHktdG8iLCBhbGwgZW1haWxzIGFmdGVyCisJdGhlIGZpcnN0IHdpbGwgYmUgc2VudCBhcyByZXBsaWVzIHRvIHRoZSBmaXJzdCBlbWFpbCBzZW50LiAgV2hlbiB1c2luZworCXRoaXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIGZpcnN0IGZpbGUgZ2l2ZW4gYmUgYW4gb3ZlcnZpZXcgb2YgdGhlCisJZW50aXJlIHBhdGNoIHNlcmllcy4gRGlzYWJsZWQgYnkgZGVmYXVsdCwgYnV0IHRoZSBgc2VuZGVtYWlsLmNoYWluUmVwbHlUb2AKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBpdC4KKworLS1pZGVudGl0eT08aWRlbnRpdHk+OjoKKwlBIGNvbmZpZ3VyYXRpb24gaWRlbnRpdHkuIFdoZW4gZ2l2ZW4sIGNhdXNlcyB2YWx1ZXMgaW4gdGhlCisJJ3NlbmRlbWFpbC48aWRlbnRpdHk+JyBzdWJzZWN0aW9uIHRvIHRha2UgcHJlY2VkZW5jZSBvdmVyCisJdmFsdWVzIGluIHRoZSAnc2VuZGVtYWlsJyBzZWN0aW9uLiBUaGUgZGVmYXVsdCBpZGVudGl0eSBpcworCXRoZSB2YWx1ZSBvZiBgc2VuZGVtYWlsLmlkZW50aXR5YC4KKworLS1bbm8tXXNpZ25lZC1vZmYtYnktY2M6OgorCUlmIHRoaXMgaXMgc2V0LCBhZGQgZW1haWxzIGZvdW5kIGluIFNpZ25lZC1vZmYtYnk6IG9yIENjOiBsaW5lcyB0byB0aGUKKwljYyBsaXN0LiBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiBgc2VuZGVtYWlsLnNpZ25lZG9mZmJ5Y2NgIGNvbmZpZ3VyYXRpb24KKwl2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgZGVmYXVsdCB0byAtLXNpZ25lZC1vZmYtYnktY2MuCisKKy0tW25vLV1jYy1jb3Zlcjo6CisJSWYgdGhpcyBpcyBzZXQsIGVtYWlscyBmb3VuZCBpbiBDYzogaGVhZGVycyBpbiB0aGUgZmlyc3QgcGF0Y2ggb2YKKwl0aGUgc2VyaWVzICh0eXBpY2FsbHkgdGhlIGNvdmVyIGxldHRlcikgYXJlIGFkZGVkIHRvIHRoZSBjYyBsaXN0CisJZm9yIGVhY2ggZW1haWwgc2V0LiBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLmNjY292ZXInCisJY29uZmlndXJhdGlvbiB2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgZGVmYXVsdCB0byAtLW5vLWNjLWNvdmVyLgorCistLVtuby1ddG8tY292ZXI6OgorCUlmIHRoaXMgaXMgc2V0LCBlbWFpbHMgZm91bmQgaW4gVG86IGhlYWRlcnMgaW4gdGhlIGZpcnN0IHBhdGNoIG9mCisJdGhlIHNlcmllcyAodHlwaWNhbGx5IHRoZSBjb3ZlciBsZXR0ZXIpIGFyZSBhZGRlZCB0byB0aGUgdG8gbGlzdAorCWZvciBlYWNoIGVtYWlsIHNldC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC50b2NvdmVyJworCWNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsIGRlZmF1bHQgdG8gLS1uby10by1jb3Zlci4KKworLS1zdXBwcmVzcy1jYz08Y2F0ZWdvcnk+OjoKKwlTcGVjaWZ5IGFuIGFkZGl0aW9uYWwgY2F0ZWdvcnkgb2YgcmVjaXBpZW50cyB0byBzdXBwcmVzcyB0aGUKKwlhdXRvLWNjIG9mOgorKworLS0KKy0gJ2F1dGhvcicgd2lsbCBhdm9pZCBpbmNsdWRpbmcgdGhlIHBhdGNoIGF1dGhvci4KKy0gJ3NlbGYnIHdpbGwgYXZvaWQgaW5jbHVkaW5nIHRoZSBzZW5kZXIuCistICdjYycgd2lsbCBhdm9pZCBpbmNsdWRpbmcgYW55b25lIG1lbnRpb25lZCBpbiBDYyBsaW5lcyBpbiB0aGUgcGF0Y2ggaGVhZGVyCisgIGV4Y2VwdCBmb3Igc2VsZiAodXNlICdzZWxmJyBmb3IgdGhhdCkuCistICdib2R5Y2MnIHdpbGwgYXZvaWQgaW5jbHVkaW5nIGFueW9uZSBtZW50aW9uZWQgaW4gQ2MgbGluZXMgaW4gdGhlCisgIHBhdGNoIGJvZHkgKGNvbW1pdCBtZXNzYWdlKSBleGNlcHQgZm9yIHNlbGYgKHVzZSAnc2VsZicgZm9yIHRoYXQpLgorLSAnc29iJyB3aWxsIGF2b2lkIGluY2x1ZGluZyBhbnlvbmUgbWVudGlvbmVkIGluIFNpZ25lZC1vZmYtYnkgbGluZXMgZXhjZXB0CisgIGZvciBzZWxmICh1c2UgJ3NlbGYnIGZvciB0aGF0KS4KKy0gJ21pc2MtYnknIHdpbGwgYXZvaWQgaW5jbHVkaW5nIGFueW9uZSBtZW50aW9uZWQgaW4gQWNrZWQtYnksCisgIFJldmlld2VkLWJ5LCBUZXN0ZWQtYnkgYW5kIG90aGVyICItYnkiIGxpbmVzIGluIHRoZSBwYXRjaCBib2R5LAorICBleGNlcHQgU2lnbmVkLW9mZi1ieSAodXNlICdzb2InIGZvciB0aGF0KS4KKy0gJ2NjY21kJyB3aWxsIGF2b2lkIHJ1bm5pbmcgdGhlIC0tY2MtY21kLgorLSAnYm9keScgaXMgZXF1aXZhbGVudCB0byAnc29iJyArICdib2R5Y2MnICsgJ21pc2MtYnknLgorLSAnYWxsJyB3aWxsIHN1cHByZXNzIGFsbCBhdXRvIGNjIHZhbHVlcy4KKy0tCisrCitEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiBgc2VuZGVtYWlsLnN1cHByZXNzY2NgIGNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmCit0aGF0IGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvICdzZWxmJyBpZiAtLXN1cHByZXNzLWZyb20gaXMKK3NwZWNpZmllZCwgYXMgd2VsbCBhcyAnYm9keScgaWYgLS1uby1zaWduZWQtb2ZmLWNjIGlzIHNwZWNpZmllZC4KKworLS1bbm8tXXN1cHByZXNzLWZyb206OgorCUlmIHRoaXMgaXMgc2V0LCBkbyBub3QgYWRkIHRoZSBGcm9tOiBhZGRyZXNzIHRvIHRoZSBjYzogbGlzdC4KKwlEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiBgc2VuZGVtYWlsLnN1cHByZXNzRnJvbWAgY29uZmlndXJhdGlvbgorCXZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvIC0tbm8tc3VwcHJlc3MtZnJvbS4KKworLS1bbm8tXXRocmVhZDo6CisJSWYgdGhpcyBpcyBzZXQsIHRoZSBJbi1SZXBseS1UbyBhbmQgUmVmZXJlbmNlcyBoZWFkZXJzIHdpbGwgYmUKKwlhZGRlZCB0byBlYWNoIGVtYWlsIHNlbnQuICBXaGV0aGVyIGVhY2ggbWFpbCByZWZlcnMgdG8gdGhlCisJcHJldmlvdXMgZW1haWwgKGBkZWVwYCB0aHJlYWRpbmcgcGVyICdnaXQgZm9ybWF0LXBhdGNoJworCXdvcmRpbmcpIG9yIHRvIHRoZSBmaXJzdCBlbWFpbCAoYHNoYWxsb3dgIHRocmVhZGluZykgaXMKKwlnb3Zlcm5lZCBieSAiLS1bbm8tXWNoYWluLXJlcGx5LXRvIi4KKysKK0lmIGRpc2FibGVkIHdpdGggIi0tbm8tdGhyZWFkIiwgdGhvc2UgaGVhZGVycyB3aWxsIG5vdCBiZSBhZGRlZAorKHVubGVzcyBzcGVjaWZpZWQgd2l0aCAtLWluLXJlcGx5LXRvKS4gIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZQorYHNlbmRlbWFpbC50aHJlYWRgIGNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsCitkZWZhdWx0IHRvIC0tdGhyZWFkLgorKworSXQgaXMgdXAgdG8gdGhlIHVzZXIgdG8gZW5zdXJlIHRoYXQgbm8gSW4tUmVwbHktVG8gaGVhZGVyIGFscmVhZHkKK2V4aXN0cyB3aGVuICdnaXQgc2VuZC1lbWFpbCcgaXMgYXNrZWQgdG8gYWRkIGl0IChlc3BlY2lhbGx5IG5vdGUgdGhhdAorJ2dpdCBmb3JtYXQtcGF0Y2gnIGNhbiBiZSBjb25maWd1cmVkIHRvIGRvIHRoZSB0aHJlYWRpbmcgaXRzZWxmKS4KK0ZhaWx1cmUgdG8gZG8gc28gbWF5IG5vdCBwcm9kdWNlIHRoZSBleHBlY3RlZCByZXN1bHQgaW4gdGhlCityZWNpcGllbnQncyBNVUEuCisKKworQWRtaW5pc3RlcmluZworfn5+fn5+fn5+fn5+fgorCistLWNvbmZpcm09PG1vZGU+OjoKKwlDb25maXJtIGp1c3QgYmVmb3JlIHNlbmRpbmc6CisrCistLQorLSAnYWx3YXlzJyB3aWxsIGFsd2F5cyBjb25maXJtIGJlZm9yZSBzZW5kaW5nCistICduZXZlcicgd2lsbCBuZXZlciBjb25maXJtIGJlZm9yZSBzZW5kaW5nCistICdjYycgd2lsbCBjb25maXJtIGJlZm9yZSBzZW5kaW5nIHdoZW4gc2VuZC1lbWFpbCBoYXMgYXV0b21hdGljYWxseQorICBhZGRlZCBhZGRyZXNzZXMgZnJvbSB0aGUgcGF0Y2ggdG8gdGhlIENjIGxpc3QKKy0gJ2NvbXBvc2UnIHdpbGwgY29uZmlybSBiZWZvcmUgc2VuZGluZyB0aGUgZmlyc3QgbWVzc2FnZSB3aGVuIHVzaW5nIC0tY29tcG9zZS4KKy0gJ2F1dG8nIGlzIGVxdWl2YWxlbnQgdG8gJ2NjJyArICdjb21wb3NlJworLS0KKysKK0RlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIGBzZW5kZW1haWwuY29uZmlybWAgY29uZmlndXJhdGlvbiB2YWx1ZTsgaWYgdGhhdAoraXMgdW5zcGVjaWZpZWQsIGRlZmF1bHQgdG8gJ2F1dG8nIHVubGVzcyBhbnkgb2YgdGhlIHN1cHByZXNzIG9wdGlvbnMKK2hhdmUgYmVlbiBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgZGVmYXVsdCB0byAnY29tcG9zZScuCisKKy0tZHJ5LXJ1bjo6CisJRG8gZXZlcnl0aGluZyBleGNlcHQgYWN0dWFsbHkgc2VuZCB0aGUgZW1haWxzLgorCistLVtuby1dZm9ybWF0LXBhdGNoOjoKKwlXaGVuIGFuIGFyZ3VtZW50IG1heSBiZSB1bmRlcnN0b29kIGVpdGhlciBhcyBhIHJlZmVyZW5jZSBvciBhcyBhIGZpbGUgbmFtZSwKKwljaG9vc2UgdG8gdW5kZXJzdGFuZCBpdCBhcyBhIGZvcm1hdC1wYXRjaCBhcmd1bWVudCAoYC0tZm9ybWF0LXBhdGNoYCkKKwlvciBhcyBhIGZpbGUgbmFtZSAoYC0tbm8tZm9ybWF0LXBhdGNoYCkuIEJ5IGRlZmF1bHQsIHdoZW4gc3VjaCBhIGNvbmZsaWN0CisJb2NjdXJzLCBnaXQgc2VuZC1lbWFpbCB3aWxsIGZhaWwuCisKKy0tcXVpZXQ6OgorCU1ha2UgZ2l0LXNlbmQtZW1haWwgbGVzcyB2ZXJib3NlLiAgT25lIGxpbmUgcGVyIGVtYWlsIHNob3VsZCBiZQorCWFsbCB0aGF0IGlzIG91dHB1dC4KKworLS1bbm8tXXZhbGlkYXRlOjoKKwlQZXJmb3JtIHNhbml0eSBjaGVja3Mgb24gcGF0Y2hlcy4KKwlDdXJyZW50bHksIHZhbGlkYXRpb24gbWVhbnMgdGhlIGZvbGxvd2luZzoKKysKKy0tCisJCSoJSW52b2tlIHRoZSBzZW5kZW1haWwtdmFsaWRhdGUgaG9vayBpZiBwcmVzZW50IChzZWUgbGlua2dpdDpnaXRob29rc1s1XSkuCisJCSoJV2FybiBvZiBwYXRjaGVzIHRoYXQgY29udGFpbiBsaW5lcyBsb25nZXIgdGhhbgorCQkJOTk4IGNoYXJhY3RlcnMgdW5sZXNzIGEgc3VpdGFibGUgdHJhbnNmZXIgZW5jb2RpbmcKKwkJCSgnYXV0bycsICdiYXNlNjQnLCBvciAncXVvdGVkLXByaW50YWJsZScpIGlzIHVzZWQ7CisJCQl0aGlzIGlzIGR1ZSB0byBTTVRQIGxpbWl0cyBhcyBkZXNjcmliZWQgYnkKKwkJCWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzUzMjIudHh0LgorLS0KKysKK0RlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIGBzZW5kZW1haWwudmFsaWRhdGVgOyBpZiB0aGlzIGlzIG5vdCBzZXQsCitkZWZhdWx0IHRvIGAtLXZhbGlkYXRlYC4KKworLS1mb3JjZTo6CisJU2VuZCBlbWFpbHMgZXZlbiBpZiBzYWZldHkgY2hlY2tzIHdvdWxkIHByZXZlbnQgaXQuCisKKworSW5mb3JtYXRpb24KK35+fn5+fn5+fn5+CisKKy0tZHVtcC1hbGlhc2VzOjoKKwlJbnN0ZWFkIG9mIHRoZSBub3JtYWwgb3BlcmF0aW9uLCBkdW1wIHRoZSBzaG9ydGhhbmQgYWxpYXMgbmFtZXMgZnJvbQorCXRoZSBjb25maWd1cmVkIGFsaWFzIGZpbGUocyksIG9uZSBwZXIgbGluZSBpbiBhbHBoYWJldGljYWwgb3JkZXIuIE5vdGUsCisJdGhpcyBvbmx5IGluY2x1ZGVzIHRoZSBhbGlhcyBuYW1lIGFuZCBub3QgaXRzIGV4cGFuZGVkIGVtYWlsIGFkZHJlc3Nlcy4KKwlTZWUgJ3NlbmRlbWFpbC5hbGlhc2VzZmlsZScgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYWxpYXNlcy4KKworCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCisKK3NlbmRlbWFpbC5hbGlhc2VzRmlsZTo6CisJVG8gYXZvaWQgdHlwaW5nIGxvbmcgZW1haWwgYWRkcmVzc2VzLCBwb2ludCB0aGlzIHRvIG9uZSBvciBtb3JlCisJZW1haWwgYWxpYXNlcyBmaWxlcy4gIFlvdSBtdXN0IGFsc28gc3VwcGx5IGBzZW5kZW1haWwuYWxpYXNGaWxlVHlwZWAuCisKK3NlbmRlbWFpbC5hbGlhc0ZpbGVUeXBlOjoKKwlGb3JtYXQgb2YgdGhlIGZpbGUocykgc3BlY2lmaWVkIGluIHNlbmRlbWFpbC5hbGlhc2VzRmlsZS4gTXVzdCBiZQorCW9uZSBvZiAnbXV0dCcsICdtYWlscmMnLCAncGluZScsICdlbG0nLCBvciAnZ251cycsIG9yICdzZW5kbWFpbCcuCisrCitXaGF0IGFuIGFsaWFzIGZpbGUgaW4gZWFjaCBmb3JtYXQgbG9va3MgbGlrZSBjYW4gYmUgZm91bmQgaW4KK3RoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBlbWFpbCBwcm9ncmFtIG9mIHRoZSBzYW1lIG5hbWUuIFRoZQorZGlmZmVyZW5jZXMgYW5kIGxpbWl0YXRpb25zIGZyb20gdGhlIHN0YW5kYXJkIGZvcm1hdHMgYXJlCitkZXNjcmliZWQgYmVsb3c6CisrCistLQorc2VuZG1haWw7OworKglRdW90ZWQgYWxpYXNlcyBhbmQgcXVvdGVkIGFkZHJlc3NlcyBhcmUgbm90IHN1cHBvcnRlZDogbGluZXMgdGhhdAorCWNvbnRhaW4gYSBgImAgc3ltYm9sIGFyZSBpZ25vcmVkLgorKglSZWRpcmVjdGlvbiB0byBhIGZpbGUgKGAvcGF0aC9uYW1lYCkgb3IgcGlwZSAoYHxjb21tYW5kYCkgaXMgbm90CisJc3VwcG9ydGVkLgorKglGaWxlIGluY2x1c2lvbiAoYDppbmNsdWRlOiAvcGF0aC9uYW1lYCkgaXMgbm90IHN1cHBvcnRlZC4KKyoJV2FybmluZ3MgYXJlIHByaW50ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIG91dHB1dCBmb3IgYW55CisJZXhwbGljaXRseSB1bnN1cHBvcnRlZCBjb25zdHJ1Y3RzLCBhbmQgYW55IG90aGVyIGxpbmVzIHRoYXQgYXJlIG5vdAorCXJlY29nbml6ZWQgYnkgdGhlIHBhcnNlci4KKy0tCisKK3NlbmRlbWFpbC5tdWx0aUVkaXQ6OgorCUlmIHRydWUgKGRlZmF1bHQpLCBhIHNpbmdsZSBlZGl0b3IgaW5zdGFuY2Ugd2lsbCBiZSBzcGF3bmVkIHRvIGVkaXQKKwlmaWxlcyB5b3UgaGF2ZSB0byBlZGl0IChwYXRjaGVzIHdoZW4gYC0tYW5ub3RhdGVgIGlzIHVzZWQsIGFuZCB0aGUKKwlzdW1tYXJ5IHdoZW4gYC0tY29tcG9zZWAgaXMgdXNlZCkuIElmIGZhbHNlLCBmaWxlcyB3aWxsIGJlIGVkaXRlZCBvbmUKKwlhZnRlciB0aGUgb3RoZXIsIHNwYXduaW5nIGEgbmV3IGVkaXRvciBlYWNoIHRpbWUuCisKK3NlbmRlbWFpbC5jb25maXJtOjoKKwlTZXRzIHRoZSBkZWZhdWx0IGZvciB3aGV0aGVyIHRvIGNvbmZpcm0gYmVmb3JlIHNlbmRpbmcuIE11c3QgYmUKKwlvbmUgb2YgJ2Fsd2F5cycsICduZXZlcicsICdjYycsICdjb21wb3NlJywgb3IgJ2F1dG8nLiBTZWUgYC0tY29uZmlybWAKKwlpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBmb3IgdGhlIG1lYW5pbmcgb2YgdGhlc2UgdmFsdWVzLgorCitFWEFNUExFUworLS0tLS0tLS0KK1VzZSBnbWFpbCBhcyB0aGUgc210cCBzZXJ2ZXIKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RvIHVzZSAnZ2l0IHNlbmQtZW1haWwnIHRvIHNlbmQgeW91ciBwYXRjaGVzIHRocm91Z2ggdGhlIEdNYWlsIFNNVFAgc2VydmVyLAorZWRpdCB+Ly5naXRjb25maWcgdG8gc3BlY2lmeSB5b3VyIGFjY291bnQgc2V0dGluZ3M6CisKKy0tLS0KK1tzZW5kZW1haWxdCisJc210cEVuY3J5cHRpb24gPSB0bHMKKwlzbXRwU2VydmVyID0gc210cC5nbWFpbC5jb20KKwlzbXRwVXNlciA9IHlvdXJuYW1lQGdtYWlsLmNvbQorCXNtdHBTZXJ2ZXJQb3J0ID0gNTg3CistLS0tCisKK0lmIHlvdSBoYXZlIG11bHRpZmFjdG9yIGF1dGhlbnRpY2F0aW9uIHNldHVwIG9uIHlvdXIgZ21haWwgYWNjb3VudCwgeW91IHdpbGwKK25lZWQgdG8gZ2VuZXJhdGUgYW4gYXBwLXNwZWNpZmljIHBhc3N3b3JkIGZvciB1c2Ugd2l0aCAnZ2l0IHNlbmQtZW1haWwnLiBWaXNpdAoraHR0cHM6Ly9zZWN1cml0eS5nb29nbGUuY29tL3NldHRpbmdzL3NlY3VyaXR5L2FwcHBhc3N3b3JkcyB0byBjcmVhdGUgaXQuCisKK09uY2UgeW91ciBjb21taXRzIGFyZSByZWFkeSB0byBiZSBzZW50IHRvIHRoZSBtYWlsaW5nIGxpc3QsIHJ1biB0aGUKK2ZvbGxvd2luZyBjb21tYW5kczoKKworCSQgZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtTSBvcmlnaW4vbWFzdGVyIC1vIG91dGdvaW5nLworCSQgZWRpdCBvdXRnb2luZy8wMDAwLSoKKwkkIGdpdCBzZW5kLWVtYWlsIG91dGdvaW5nLyoKKworVGhlIGZpcnN0IHRpbWUgeW91IHJ1biBpdCwgeW91IHdpbGwgYmUgcHJvbXB0ZWQgZm9yIHlvdXIgY3JlZGVudGlhbHMuICBFbnRlciB0aGUKK2FwcC1zcGVjaWZpYyBvciB5b3VyIHJlZ3VsYXIgcGFzc3dvcmQgYXMgYXBwcm9wcmlhdGUuICBJZiB5b3UgaGF2ZSBjcmVkZW50aWFsCitoZWxwZXIgY29uZmlndXJlZCAoc2VlIGxpbmtnaXQ6Z2l0LWNyZWRlbnRpYWxbMV0pLCB0aGUgcGFzc3dvcmQgd2lsbCBiZSBzYXZlZCBpbgordGhlIGNyZWRlbnRpYWwgc3RvcmUgc28geW91IHdvbid0IGhhdmUgdG8gdHlwZSBpdCB0aGUgbmV4dCB0aW1lLgorCitOb3RlOiB0aGUgZm9sbG93aW5nIGNvcmUgUGVybCBtb2R1bGVzIHRoYXQgbWF5IGJlIGluc3RhbGxlZCB3aXRoIHlvdXIKK2Rpc3RyaWJ1dGlvbiBvZiBQZXJsIGFyZSByZXF1aXJlZDoKK01JTUU6OkJhc2U2NCwgTUlNRTo6UXVvdGVkUHJpbnQsIE5ldDo6RG9tYWluIGFuZCBOZXQ6OlNNVFAuCitUaGVzZSBhZGRpdGlvbmFsIFBlcmwgbW9kdWxlcyBhcmUgYWxzbyByZXF1aXJlZDoKK0F1dGhlbjo6U0FTTCBhbmQgTWFpbDo6QWRkcmVzcy4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSwgbGlua2dpdDpnaXQtaW1hcC1zZW5kWzFdLCBtYm94KDUpCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtcGFjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmZDE0NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtcGFjay50eHQKQEAgLTAsMCArMSwxNTYgQEAKK2dpdC1zZW5kLXBhY2soMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNlbmQtcGFjayAtIFB1c2ggb2JqZWN0cyBvdmVyIEdpdCBwcm90b2NvbCB0byBhbm90aGVyIHJlcG9zaXRvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc2VuZC1wYWNrJyBbLS1hbGxdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+XQorCQlbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdCisJCVstLVtuby1dc2lnbmVkfC0tc2lnbmVkPSh0cnVlfGZhbHNlfGlmLWFza2VkKV0KKwkJWzxob3N0PjpdPGRpcmVjdG9yeT4gWzxyZWY+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1VzdWFsbHkgeW91IHdvdWxkIHdhbnQgdG8gdXNlICdnaXQgcHVzaCcsIHdoaWNoIGlzIGEKK2hpZ2hlci1sZXZlbCB3cmFwcGVyIG9mIHRoaXMgY29tbWFuZCwgaW5zdGVhZC4gU2VlIGxpbmtnaXQ6Z2l0LXB1c2hbMV0uCisKK0ludm9rZXMgJ2dpdC1yZWNlaXZlLXBhY2snIG9uIGEgcG9zc2libHkgcmVtb3RlIHJlcG9zaXRvcnksIGFuZAordXBkYXRlcyBpdCBmcm9tIHRoZSBjdXJyZW50IHJlcG9zaXRvcnksIHNlbmRpbmcgbmFtZWQgcmVmcy4KKworCitPUFRJT05TCistLS0tLS0tCistLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz46OgorCVBhdGggdG8gdGhlICdnaXQtcmVjZWl2ZS1wYWNrJyBwcm9ncmFtIG9uIHRoZSByZW1vdGUKKwllbmQuICBTb21ldGltZXMgdXNlZnVsIHdoZW4gcHVzaGluZyB0byBhIHJlbW90ZQorCXJlcG9zaXRvcnkgb3ZlciBzc2gsIGFuZCB5b3UgZG8gbm90IGhhdmUgdGhlIHByb2dyYW0gaW4KKwlhIGRpcmVjdG9yeSBvbiB0aGUgZGVmYXVsdCAkUEFUSC4KKworLS1leGVjPTxnaXQtcmVjZWl2ZS1wYWNrPjo6CisJU2FtZSBhcyAtLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz4uCisKKy0tYWxsOjoKKwlJbnN0ZWFkIG9mIGV4cGxpY2l0bHkgc3BlY2lmeWluZyB3aGljaCByZWZzIHRvIHVwZGF0ZSwKKwl1cGRhdGUgYWxsIGhlYWRzIHRoYXQgbG9jYWxseSBleGlzdC4KKworLS1zdGRpbjo6CisJVGFrZSB0aGUgbGlzdCBvZiByZWZzIGZyb20gc3RkaW4sIG9uZSBwZXIgbGluZS4gSWYgdGhlcmUKKwlhcmUgcmVmcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSBpbiBhZGRpdGlvbiB0byB0aGlzCisJb3B0aW9uLCB0aGVuIHRoZSByZWZzIGZyb20gc3RkaW4gYXJlIHByb2Nlc3NlZCBhZnRlciB0aG9zZQorCW9uIHRoZSBjb21tYW5kIGxpbmUuCisrCitJZiBgLS1zdGF0ZWxlc3MtcnBjYCBpcyBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCB0aGlzIG9wdGlvbiB0aGVuCit0aGUgbGlzdCBvZiByZWZzIG11c3QgYmUgaW4gcGFja2V0IGZvcm1hdCAocGt0LWxpbmUpLiBFYWNoIHJlZiBtdXN0CitiZSBpbiBhIHNlcGFyYXRlIHBhY2tldCwgYW5kIHRoZSBsaXN0IG11c3QgZW5kIHdpdGggYSBmbHVzaCBwYWNrZXQuCisKKy0tZHJ5LXJ1bjo6CisJRG8gZXZlcnl0aGluZyBleGNlcHQgYWN0dWFsbHkgc2VuZCB0aGUgdXBkYXRlcy4KKworLS1mb3JjZTo6CisJVXN1YWxseSwgdGhlIGNvbW1hbmQgcmVmdXNlcyB0byB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQKKwlpcyBub3QgYW4gYW5jZXN0b3Igb2YgdGhlIGxvY2FsIHJlZiB1c2VkIHRvIG92ZXJ3cml0ZSBpdC4KKwlUaGlzIGZsYWcgZGlzYWJsZXMgdGhlIGNoZWNrLiAgV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQKKwl0aGUgcmVtb3RlIHJlcG9zaXRvcnkgY2FuIGxvc2UgY29tbWl0czsgdXNlIGl0IHdpdGgKKwljYXJlLgorCistLXZlcmJvc2U6OgorCVJ1biB2ZXJib3NlbHkuCisKKy0tdGhpbjo6CisJU2VuZCBhICJ0aGluIiBwYWNrLCB3aGljaCByZWNvcmRzIG9iamVjdHMgaW4gZGVsdGlmaWVkIGZvcm0gYmFzZWQKKwlvbiBvYmplY3RzIG5vdCBpbmNsdWRlZCBpbiB0aGUgcGFjayB0byByZWR1Y2UgbmV0d29yayB0cmFmZmljLgorCistLWF0b21pYzo6CisJVXNlIGFuIGF0b21pYyB0cmFuc2FjdGlvbiBmb3IgdXBkYXRpbmcgdGhlIHJlZnMuIElmIGFueSBvZiB0aGUgcmVmcworCWZhaWxzIHRvIHVwZGF0ZSB0aGVuIHRoZSBlbnRpcmUgcHVzaCB3aWxsIGZhaWwgd2l0aG91dCBjaGFuZ2luZyBhbnkKKwlyZWZzLgorCistLVtuby1dc2lnbmVkOjoKKy0tc2lnbmVkPSh0cnVlfGZhbHNlfGlmLWFza2VkKTo6CisJR1BHLXNpZ24gdGhlIHB1c2ggcmVxdWVzdCB0byB1cGRhdGUgcmVmcyBvbiB0aGUgcmVjZWl2aW5nCisJc2lkZSwgdG8gYWxsb3cgaXQgdG8gYmUgY2hlY2tlZCBieSB0aGUgaG9va3MgYW5kL29yIGJlCisJbG9nZ2VkLiAgSWYgYGZhbHNlYCBvciBgLS1uby1zaWduZWRgLCBubyBzaWduaW5nIHdpbGwgYmUKKwlhdHRlbXB0ZWQuICBJZiBgdHJ1ZWAgb3IgYC0tc2lnbmVkYCwgdGhlIHB1c2ggd2lsbCBmYWlsIGlmIHRoZQorCXNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNpZ25lZCBwdXNoZXMuICBJZiBzZXQgdG8gYGlmLWFza2VkYCwKKwlzaWduIGlmIGFuZCBvbmx5IGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgc2lnbmVkIHB1c2hlcy4gIFRoZSBwdXNoCisJd2lsbCBhbHNvIGZhaWwgaWYgdGhlIGFjdHVhbCBjYWxsIHRvIGBncGcgLS1zaWduYCBmYWlscy4gIFNlZQorCWxpbmtnaXQ6Z2l0LXJlY2VpdmUtcGFja1sxXSBmb3IgdGhlIGRldGFpbHMgb24gdGhlIHJlY2VpdmluZyBlbmQuCisKKy0tcHVzaC1vcHRpb249PHN0cmluZz46OgorCVBhc3MgdGhlIHNwZWNpZmllZCBzdHJpbmcgYXMgYSBwdXNoIG9wdGlvbiBmb3IgY29uc3VtcHRpb24gYnkKKwlob29rcyBvbiB0aGUgc2VydmVyIHNpZGUuICBJZiB0aGUgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBwdXNoCisJb3B0aW9ucywgZXJyb3Igb3V0LiAgU2VlIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gYW5kCisJbGlua2dpdDpnaXRob29rc1s1XSBmb3IgZGV0YWlscy4KKworPGhvc3Q+OjoKKwlBIHJlbW90ZSBob3N0IHRvIGhvdXNlIHRoZSByZXBvc2l0b3J5LiAgV2hlbiB0aGlzCisJcGFydCBpcyBzcGVjaWZpZWQsICdnaXQtcmVjZWl2ZS1wYWNrJyBpcyBpbnZva2VkIHZpYQorCXNzaC4KKworPGRpcmVjdG9yeT46OgorCVRoZSByZXBvc2l0b3J5IHRvIHVwZGF0ZS4KKworPHJlZj4uLi46OgorCVRoZSByZW1vdGUgcmVmcyB0byB1cGRhdGUuCisKKworU1BFQ0lGWUlORyBUSEUgUkVGUworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBzcGVjaWZ5IHdoaWNoIHJlZnMgdG8gdXBkYXRlIG9uIHRoZQorcmVtb3RlIGVuZC4KKworV2l0aCBgLS1hbGxgIGZsYWcsIGFsbCByZWZzIHRoYXQgZXhpc3QgbG9jYWxseSBhcmUgdHJhbnNmZXJyZWQgdG8KK3RoZSByZW1vdGUgc2lkZS4gIFlvdSBjYW5ub3Qgc3BlY2lmeSBhbnkgJzxyZWY+JyBpZiB5b3UgdXNlCit0aGlzIGZsYWcuCisKK1dpdGhvdXQgYC0tYWxsYCBhbmQgd2l0aG91dCBhbnkgJzxyZWY+JywgdGhlIGhlYWRzIHRoYXQgZXhpc3QKK2JvdGggb24gdGhlIGxvY2FsIHNpZGUgYW5kIG9uIHRoZSByZW1vdGUgc2lkZSBhcmUgdXBkYXRlZC4KKworV2hlbiBvbmUgb3IgbW9yZSAnPHJlZj4nIGFyZSBzcGVjaWZpZWQgZXhwbGljaXRseSAod2hldGhlciBvbiB0aGUKK2NvbW1hbmQgbGluZSBvciB2aWEgYC0tc3RkaW5gKSwgaXQgY2FuIGJlIGVpdGhlciBhCitzaW5nbGUgcGF0dGVybiwgb3IgYSBwYWlyIG9mIHN1Y2ggcGF0dGVybiBzZXBhcmF0ZWQgYnkgYSBjb2xvbgorIjoiICh0aGlzIG1lYW5zIHRoYXQgYSByZWYgbmFtZSBjYW5ub3QgaGF2ZSBhIGNvbG9uIGluIGl0KS4gIEEKK3NpbmdsZSBwYXR0ZXJuICc8bmFtZT4nIGlzIGp1c3QgYSBzaG9ydGhhbmQgZm9yICc8bmFtZT46PG5hbWU+Jy4KKworRWFjaCBwYXR0ZXJuIHBhaXIgY29uc2lzdHMgb2YgdGhlIHNvdXJjZSBzaWRlIChiZWZvcmUgdGhlIGNvbG9uKQorYW5kIHRoZSBkZXN0aW5hdGlvbiBzaWRlIChhZnRlciB0aGUgY29sb24pLiAgVGhlIHJlZiB0byBiZQorcHVzaGVkIGlzIGRldGVybWluZWQgYnkgZmluZGluZyBhIG1hdGNoIHRoYXQgbWF0Y2hlcyB0aGUgc291cmNlCitzaWRlLCBhbmQgd2hlcmUgaXQgaXMgcHVzaGVkIGlzIGRldGVybWluZWQgYnkgdXNpbmcgdGhlCitkZXN0aW5hdGlvbiBzaWRlLiBUaGUgcnVsZXMgdXNlZCB0byBtYXRjaCBhIHJlZiBhcmUgdGhlIHNhbWUKK3J1bGVzIHVzZWQgYnkgJ2dpdCByZXYtcGFyc2UnIHRvIHJlc29sdmUgYSBzeW1ib2xpYyByZWYKK25hbWUuIFNlZSBsaW5rZ2l0OmdpdC1yZXYtcGFyc2VbMV0uCisKKyAtIEl0IGlzIGFuIGVycm9yIGlmIDxzcmM+IGRvZXMgbm90IG1hdGNoIGV4YWN0bHkgb25lIG9mIHRoZQorICAgbG9jYWwgcmVmcy4KKworIC0gSXQgaXMgYW4gZXJyb3IgaWYgPGRzdD4gbWF0Y2hlcyBtb3JlIHRoYW4gb25lIHJlbW90ZSByZWZzLgorCisgLSBJZiA8ZHN0PiBkb2VzIG5vdCBtYXRjaCBhbnkgcmVtb3RlIHJlZiwgZWl0aGVyCisKKyAgICogaXQgaGFzIHRvIHN0YXJ0IHdpdGggInJlZnMvIjsgPGRzdD4gaXMgdXNlZCBhcyB0aGUKKyAgICAgZGVzdGluYXRpb24gbGl0ZXJhbGx5IGluIHRoaXMgY2FzZS4KKworICAgKiA8c3JjPiA9PSA8ZHN0PiBhbmQgdGhlIHJlZiB0aGF0IG1hdGNoZWQgdGhlIDxzcmM+IG11c3Qgbm90CisgICAgIGV4aXN0IGluIHRoZSBzZXQgb2YgcmVtb3RlIHJlZnM7IHRoZSByZWYgbWF0Y2hlZCA8c3JjPgorICAgICBsb2NhbGx5IGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uLgorCitXaXRob3V0IGAtLWZvcmNlYCwgdGhlIDxzcmM+IHJlZiBpcyBzdG9yZWQgYXQgdGhlIHJlbW90ZSBvbmx5IGlmCis8ZHN0PiBkb2VzIG5vdCBleGlzdCwgb3IgPGRzdD4gaXMgYSBwcm9wZXIgc3Vic2V0IChpLmUuIGFuCithbmNlc3Rvcikgb2YgPHNyYz4uICBUaGlzIGNoZWNrLCBrbm93biBhcyAiZmFzdC1mb3J3YXJkIGNoZWNrIiwKK2lzIHBlcmZvcm1lZCBpbiBvcmRlciB0byBhdm9pZCBhY2NpZGVudGFsbHkgb3ZlcndyaXRpbmcgdGhlCityZW1vdGUgcmVmIGFuZCBsb3NlIG90aGVyIHBlb3BsZXMnIGNvbW1pdHMgZnJvbSB0aGVyZS4KKworV2l0aCBgLS1mb3JjZWAsIHRoZSBmYXN0LWZvcndhcmQgY2hlY2sgaXMgZGlzYWJsZWQgZm9yIGFsbCByZWZzLgorCitPcHRpb25hbGx5LCBhIDxyZWY+IHBhcmFtZXRlciBjYW4gYmUgcHJlZml4ZWQgd2l0aCBhIHBsdXMgJysnIHNpZ24KK3RvIGRpc2FibGUgdGhlIGZhc3QtZm9yd2FyZCBjaGVjayBvbmx5IG9uIHRoYXQgcmVmLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNoLWkxOG4tLWVudnN1YnN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNoLWkxOG4tLWVudnN1YnN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmZhZjkzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2gtaTE4bi0tZW52c3Vic3QudHh0CkBAIC0wLDAgKzEsMzYgQEAKK2dpdC1zaC1pMThue2xpdGRkfWVudnN1YnN0KDEpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc2gtaTE4bi0tZW52c3Vic3QgLSBHaXQncyBvd24gZW52c3Vic3QoMSkgZm9yIGkxOG4gZmFsbGJhY2tzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorZXZhbF9nZXR0ZXh0ICgpIHsKKwlwcmludGYgIiVzIiAiJDEiIHwgKAorCQlleHBvcnQgUEFUSCAkKCdnaXQgc2gtaTE4bntsaXRkZH1lbnZzdWJzdCcgLS12YXJpYWJsZXMgIiQxIik7CisJCSdnaXQgc2gtaTE4bntsaXRkZH1lbnZzdWJzdCcgIiQxIgorCSkKK30KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgbm90IGEgY29tbWFuZCB0aGUgZW5kIHVzZXIgd291bGQgd2FudCB0byBydW4uICBFdmVyLgorVGhpcyBkb2N1bWVudGF0aW9uIGlzIG1lYW50IGZvciBwZW9wbGUgd2hvIGFyZSBzdHVkeWluZyB0aGUKK3BsdW1iaW5nIHNjcmlwdHMgYW5kL29yIGFyZSB3cml0aW5nIG5ldyBvbmVzLgorCisnZ2l0IHNoLWkxOG57bGl0ZGR9ZW52c3Vic3QnIGlzIEdpdCdzIHN0cmlwcGVkLWRvd24gY29weSBvZiB0aGUgR05VCitgZW52c3Vic3QoMSlgIHByb2dyYW0gdGhhdCBjb21lcyB3aXRoIHRoZSBHTlUgZ2V0dGV4dCBwYWNrYWdlLiBJdCdzCit1c2VkIGludGVybmFsbHkgYnkgbGlua2dpdDpnaXQtc2gtaTE4blsxXSB0byBpbnRlcnBvbGF0ZSB0aGUgdmFyaWFibGVzCitwYXNzZWQgdG8gdGhlIGBldmFsX2dldHRleHRgIGZ1bmN0aW9uLgorCitObyBwcm9taXNlcyBhcmUgbWFkZSBhYm91dCB0aGUgaW50ZXJmYWNlLCBvciB0aGF0IHRoaXMKK3Byb2dyYW0gd29uJ3QgZGlzYXBwZWFyIHdpdGhvdXQgd2FybmluZyBpbiB0aGUgbmV4dCB2ZXJzaW9uCitvZiBHaXQuIERvbid0IHVzZSBpdC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaC1pMThuLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNoLWkxOG4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwY2Y0OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaC1pMThuLnR4dApAQCAtMCwwICsxLDQzIEBACitnaXQtc2gtaTE4bigxKQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNoLWkxOG4gLSBHaXQncyBpMThuIHNldHVwIGNvZGUgZm9yIHNoZWxsIHNjcmlwdHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnLiAiJChnaXQgLS1leGVjLXBhdGgpL2dpdC1zaC1pMThuIicKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgbm90IGEgY29tbWFuZCB0aGUgZW5kIHVzZXIgd291bGQgd2FudCB0byBydW4uICBFdmVyLgorVGhpcyBkb2N1bWVudGF0aW9uIGlzIG1lYW50IGZvciBwZW9wbGUgd2hvIGFyZSBzdHVkeWluZyB0aGUKK1BvcmNlbGFpbi1pc2ggc2NyaXB0cyBhbmQvb3IgYXJlIHdyaXRpbmcgbmV3IG9uZXMuCisKK1RoZSAnZ2l0IHNoLWkxOG4gc2NyaXB0bGV0IGlzIGRlc2lnbmVkIHRvIGJlIHNvdXJjZWQgKHVzaW5nCitgLmApIGJ5IEdpdCdzIHBvcmNlbGFpbiBwcm9ncmFtcyBpbXBsZW1lbnRlZCBpbiBzaGVsbAorc2NyaXB0LiBJdCBwcm92aWRlcyB3cmFwcGVycyBmb3IgdGhlIEdOVSBgZ2V0dGV4dGAgYW5kCitgZXZhbF9nZXR0ZXh0YCBmdW5jdGlvbnMgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgZ2V0dGV4dC5zaGAKK3NjcmlwdCwgYW5kIHByb3ZpZGVzIHBhc3MtdGhyb3VnaCBmYWxsYmFja3Mgb24gc3lzdGVtcword2l0aG91dCBHTlUgZ2V0dGV4dC4KKworRlVOQ1RJT05TCistLS0tLS0tLS0KKworZ2V0dGV4dDo6CisJQ3VycmVudGx5IGEgZHVtbXkgZmFsbC10aHJvdWdoIGZ1bmN0aW9uIGltcGxlbWVudGVkIGFzIGEgd3JhcHBlcgorCWFyb3VuZCBgcHJpbnRmKDEpYC4gV2lsbCBiZSByZXBsYWNlZCBieSBhIHJlYWwgZ2V0dGV4dAorCWltcGxlbWVudGF0aW9uIGluIGEgbGF0ZXIgdmVyc2lvbi4KKworZXZhbF9nZXR0ZXh0OjoKKwlDdXJyZW50bHkgYSBkdW1teSBmYWxsLXRocm91Z2ggZnVuY3Rpb24gaW1wbGVtZW50ZWQgYXMgYSB3cmFwcGVyCisJYXJvdW5kIGBwcmludGYoMSlgIHdpdGggdmFyaWFibGVzIGV4cGFuZGVkIGJ5IHRoZQorCWxpbmtnaXQ6Z2l0LXNoLWkxOG57bGl0ZGR9ZW52c3Vic3RbMV0gaGVscGVyLiBXaWxsIGJlIHJlcGxhY2VkIGJ5IGEKKwlyZWFsIGdldHRleHQgaW1wbGVtZW50YXRpb24gaW4gYSBsYXRlciB2ZXJzaW9uLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNoLXNldHVwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNoLXNldHVwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjMyNjEyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2gtc2V0dXAudHh0CkBAIC0wLDAgKzEsOTUgQEAKK2dpdC1zaC1zZXR1cCgxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zaC1zZXR1cCAtIENvbW1vbiBHaXQgc2hlbGwgc2NyaXB0IHNldHVwIGNvZGUKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnLiAiJChnaXQgLS1leGVjLXBhdGgpL2dpdC1zaC1zZXR1cCInCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGlzIG5vdCBhIGNvbW1hbmQgdGhlIGVuZCB1c2VyIHdvdWxkIHdhbnQgdG8gcnVuLiAgRXZlci4KK1RoaXMgZG9jdW1lbnRhdGlvbiBpcyBtZWFudCBmb3IgcGVvcGxlIHdobyBhcmUgc3R1ZHlpbmcgdGhlCitQb3JjZWxhaW4taXNoIHNjcmlwdHMgYW5kL29yIGFyZSB3cml0aW5nIG5ldyBvbmVzLgorCitUaGUgJ2dpdCBzaC1zZXR1cCcgc2NyaXB0bGV0IGlzIGRlc2lnbmVkIHRvIGJlIHNvdXJjZWQgKHVzaW5nCitgLmApIGJ5IG90aGVyIHNoZWxsIHNjcmlwdHMgdG8gc2V0IHVwIHNvbWUgdmFyaWFibGVzIHBvaW50aW5nIGF0Cit0aGUgbm9ybWFsIEdpdCBkaXJlY3RvcmllcyBhbmQgYSBmZXcgaGVscGVyIHNoZWxsIGZ1bmN0aW9ucy4KKworQmVmb3JlIHNvdXJjaW5nIGl0LCB5b3VyIHNjcmlwdCBzaG91bGQgc2V0IHVwIGEgZmV3IHZhcmlhYmxlczsKK2BVU0FHRWAgKGFuZCBgTE9OR19VU0FHRWAsIGlmIGFueSkgaXMgdXNlZCB0byBkZWZpbmUgbWVzc2FnZQorZ2l2ZW4gYnkgYHVzYWdlKClgIHNoZWxsIGZ1bmN0aW9uLiAgYFNVQkRJUkVDVE9SWV9PS2AgY2FuIGJlIHNldAoraWYgdGhlIHNjcmlwdCBjYW4gcnVuIGZyb20gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHdvcmtpbmcgdHJlZQorKHNvbWUgY29tbWFuZHMgZG8gbm90KS4KKworVGhlIHNjcmlwdGxldCBzZXRzIGBHSVRfRElSYCBhbmQgYEdJVF9PQkpFQ1RfRElSRUNUT1JZYCBzaGVsbAordmFyaWFibGVzLCBidXQgZG9lcyAqbm90KiBleHBvcnQgdGhlbSB0byB0aGUgZW52aXJvbm1lbnQuCisKK0ZVTkNUSU9OUworLS0tLS0tLS0tCisKK2RpZTo6CisJZXhpdCBhZnRlciBlbWl0dGluZyB0aGUgc3VwcGxpZWQgZXJyb3IgbWVzc2FnZSB0byB0aGUKKwlzdGFuZGFyZCBlcnJvciBzdHJlYW0uCisKK3VzYWdlOjoKKwlkaWUgd2l0aCB0aGUgdXNhZ2UgbWVzc2FnZS4KKworc2V0X3JlZmxvZ19hY3Rpb246OgorCVNldCBgR0lUX1JFRkxPR19BQ1RJT05gIGVudmlyb25tZW50IHRvIGEgZ2l2ZW4gc3RyaW5nICh0eXBpY2FsbHkKKwl0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSkgdW5sZXNzIGl0IGlzIGFscmVhZHkgc2V0LiAgV2hlbmV2ZXIKKwl0aGUgc2NyaXB0IHJ1bnMgYSBgZ2l0YCBjb21tYW5kIHRoYXQgdXBkYXRlcyByZWZzLCBhIHJlZmxvZworCWVudHJ5IGlzIGNyZWF0ZWQgdXNpbmcgdGhlIHZhbHVlIG9mIHRoaXMgc3RyaW5nIHRvIGxlYXZlIHRoZQorCXJlY29yZCBvZiB3aGF0IGNvbW1hbmQgdXBkYXRlZCB0aGUgcmVmLgorCitnaXRfZWRpdG9yOjoKKwlydW5zIGFuIGVkaXRvciBvZiB1c2VyJ3MgY2hvaWNlIChHSVRfRURJVE9SLCBjb3JlLmVkaXRvciwgVklTVUFMIG9yCisJRURJVE9SKSBvbiBhIGdpdmVuIGZpbGUsIGJ1dCBlcnJvciBvdXQgaWYgbm8gZWRpdG9yIGlzIHNwZWNpZmllZAorCWFuZCB0aGUgdGVybWluYWwgaXMgZHVtYi4KKworaXNfYmFyZV9yZXBvc2l0b3J5OjoKKwlvdXRwdXRzIGB0cnVlYCBvciBgZmFsc2VgIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtCisJdG8gaW5kaWNhdGUgaWYgdGhlIHJlcG9zaXRvcnkgaXMgYSBiYXJlIHJlcG9zaXRvcnkKKwkoaS5lLiB3aXRob3V0IGFuIGFzc29jaWF0ZWQgd29ya2luZyB0cmVlKS4KKworY2RfdG9fdG9wbGV2ZWw6OgorCXJ1bnMgY2hkaXIgdG8gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUuCisKK3JlcXVpcmVfd29ya190cmVlOjoKKwljaGVja3MgaWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIHdpdGhpbiB0aGUgd29ya2luZyB0cmVlCisJb2YgdGhlIHJlcG9zaXRvcnksIGFuZCBvdGhlcndpc2UgZGllcy4KKworcmVxdWlyZV93b3JrX3RyZWVfZXhpc3RzOjoKKwljaGVja3MgaWYgdGhlIHdvcmtpbmcgdHJlZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcG9zaXRvcnkKKwlleGlzdHMsIGFuZCBvdGhlcndpc2UgZGllcy4gIE9mdGVuIGRvbmUgYmVmb3JlIGNhbGxpbmcKKwljZF90b190b3BsZXZlbCwgd2hpY2ggaXMgaW1wb3NzaWJsZSB0byBkbyBpZiB0aGVyZSBpcyBubworCXdvcmtpbmcgdHJlZS4KKworcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUgPGFjdGlvbj4gWzxoaW50Pl06OgorCWNoZWNrcyB0aGF0IHRoZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IGFzc29jaWF0ZWQgd2l0aCB0aGUKKwlyZXBvc2l0b3J5IGhhdmUgbm8gdW5jb21taXR0ZWQgY2hhbmdlcyB0byB0cmFja2VkIGZpbGVzLgorCU90aGVyd2lzZSBpdCBlbWl0cyBhbiBlcnJvciBtZXNzYWdlIG9mIHRoZSBmb3JtIGBDYW5ub3QKKwk8YWN0aW9uPjogPHJlYXNvbj4uIDxoaW50PmAsIGFuZCBkaWVzLiAgRXhhbXBsZToKKysKKy0tLS0tLS0tLS0tLS0tLS0KK3JlcXVpcmVfY2xlYW5fd29ya190cmVlIHJlYmFzZSAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKKy0tLS0tLS0tLS0tLS0tLS0KKworZ2V0X2F1dGhvcl9pZGVudF9mcm9tX2NvbW1pdDo6CisJb3V0cHV0cyBjb2RlIGZvciB1c2Ugd2l0aCBldmFsIHRvIHNldCB0aGUgR0lUX0FVVEhPUl9OQU1FLAorCUdJVF9BVVRIT1JfRU1BSUwgYW5kIEdJVF9BVVRIT1JfREFURSB2YXJpYWJsZXMgZm9yIGEgZ2l2ZW4gY29tbWl0LgorCitjcmVhdGVfdmlydHVhbF9iYXNlOjoKKwltb2RpZmllcyB0aGUgZmlyc3QgZmlsZSBzbyBvbmx5IGxpbmVzIGluIGNvbW1vbiB3aXRoIHRoZQorCXNlY29uZCBmaWxlIHJlbWFpbi4gSWYgdGhlcmUgaXMgaW5zdWZmaWNpZW50IGNvbW1vbiBtYXRlcmlhbCwKKwl0aGVuIHRoZSBmaXJzdCBmaWxlIGlzIGxlZnQgZW1wdHkuIFRoZSByZXN1bHQgaXMgc3VpdGFibGUKKwlhcyBhIHZpcnR1YWwgYmFzZSBpbnB1dCBmb3IgYSAzLXdheSBtZXJnZS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaGVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaGVsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzNjFmMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNoZWxsLnR4dApAQCAtMCwwICsxLDEwNiBAQAorZ2l0LXNoZWxsKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNoZWxsIC0gUmVzdHJpY3RlZCBsb2dpbiBzaGVsbCBmb3IgR2l0LW9ubHkgU1NIIGFjY2VzcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2Noc2gnIC1zICQoY29tbWFuZCAtdiBnaXQtc2hlbGwpIDx1c2VyPgorJ2dpdCBjbG9uZScgPHVzZXI+YEBsb2NhbGhvc3Q6L3BhdGgvdG8vcmVwby5naXRgCisnc3NoJyA8dXNlcj5gQGxvY2FsaG9zdGAKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgYSBsb2dpbiBzaGVsbCBmb3IgU1NIIGFjY291bnRzIHRvIHByb3ZpZGUgcmVzdHJpY3RlZCBHaXQgYWNjZXNzLgorSXQgcGVybWl0cyBleGVjdXRpb24gb25seSBvZiBzZXJ2ZXItc2lkZSBHaXQgY29tbWFuZHMgaW1wbGVtZW50aW5nIHRoZQorcHVsbC9wdXNoIGZ1bmN0aW9uYWxpdHksIHBsdXMgY3VzdG9tIGNvbW1hbmRzIHByZXNlbnQgaW4gYSBzdWJkaXJlY3RvcnkKK25hbWVkIGBnaXQtc2hlbGwtY29tbWFuZHNgIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuCisKK0NPTU1BTkRTCistLS0tLS0tLQorCisnZ2l0IHNoZWxsJyBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYWZ0ZXIgdGhlIGAtY2Agb3B0aW9uOgorCisnZ2l0IHJlY2VpdmUtcGFjayA8YXJndW1lbnQ+Jzo6CisnZ2l0IHVwbG9hZC1wYWNrIDxhcmd1bWVudD4nOjoKKydnaXQgdXBsb2FkLWFyY2hpdmUgPGFyZ3VtZW50Pic6OgorCUNhbGwgdGhlIGNvcnJlc3BvbmRpbmcgc2VydmVyLXNpZGUgY29tbWFuZCB0byBzdXBwb3J0CisJdGhlIGNsaWVudCdzICdnaXQgcHVzaCcsICdnaXQgZmV0Y2gnLCBvciAnZ2l0IGFyY2hpdmUgLS1yZW1vdGUnCisJcmVxdWVzdC4KKydjdnMgc2VydmVyJzo6CisJSW1pdGF0ZSBhIENWUyBzZXJ2ZXIuICBTZWUgbGlua2dpdDpnaXQtY3Zzc2VydmVyWzFdLgorCitJZiBhIGB+L2dpdC1zaGVsbC1jb21tYW5kc2AgZGlyZWN0b3J5IGlzIHByZXNlbnQsICdnaXQgc2hlbGwnIHdpbGwKK2Fsc28gaGFuZGxlIG90aGVyLCBjdXN0b20gY29tbWFuZHMgYnkgcnVubmluZworImBnaXQtc2hlbGwtY29tbWFuZHMvPGNvbW1hbmQ+IDxhcmd1bWVudHM+YCIgZnJvbSB0aGUgdXNlcidzIGhvbWUKK2RpcmVjdG9yeS4KKworSU5URVJBQ1RJVkUgVVNFCistLS0tLS0tLS0tLS0tLS0KKworQnkgZGVmYXVsdCwgdGhlIGNvbW1hbmRzIGFib3ZlIGNhbiBiZSBleGVjdXRlZCBvbmx5IHdpdGggdGhlIGAtY2AKK29wdGlvbjsgdGhlIHNoZWxsIGlzIG5vdCBpbnRlcmFjdGl2ZS4KKworSWYgYSBgfi9naXQtc2hlbGwtY29tbWFuZHNgIGRpcmVjdG9yeSBpcyBwcmVzZW50LCAnZ2l0IHNoZWxsJworY2FuIGFsc28gYmUgcnVuIGludGVyYWN0aXZlbHkgKHdpdGggbm8gYXJndW1lbnRzKS4gIElmIGEgYGhlbHBgCitjb21tYW5kIGlzIHByZXNlbnQgaW4gdGhlIGBnaXQtc2hlbGwtY29tbWFuZHNgIGRpcmVjdG9yeSwgaXQgaXMKK3J1biB0byBwcm92aWRlIHRoZSB1c2VyIHdpdGggYW4gb3ZlcnZpZXcgb2YgYWxsb3dlZCBhY3Rpb25zLiAgVGhlbiBhCisiZ2l0PiAiIHByb21wdCBpcyBwcmVzZW50ZWQgYXQgd2hpY2ggb25lIGNhbiBlbnRlciBhbnkgb2YgdGhlCitjb21tYW5kcyBmcm9tIHRoZSBgZ2l0LXNoZWxsLWNvbW1hbmRzYCBkaXJlY3RvcnksIG9yIGBleGl0YCB0byBjbG9zZQordGhlIGNvbm5lY3Rpb24uCisKK0dlbmVyYWxseSB0aGlzIG1vZGUgaXMgdXNlZCBhcyBhbiBhZG1pbmlzdHJhdGl2ZSBpbnRlcmZhY2UgdG8gYWxsb3cKK3VzZXJzIHRvIGxpc3QgcmVwb3NpdG9yaWVzIHRoZXkgaGF2ZSBhY2Nlc3MgdG8sIGNyZWF0ZSwgZGVsZXRlLCBvcgorcmVuYW1lIHJlcG9zaXRvcmllcywgb3IgY2hhbmdlIHJlcG9zaXRvcnkgZGVzY3JpcHRpb25zIGFuZAorcGVybWlzc2lvbnMuCisKK0lmIGEgYG5vLWludGVyYWN0aXZlLWxvZ2luYCBjb21tYW5kIGV4aXN0cywgdGhlbiBpdCBpcyBydW4gYW5kIHRoZQoraW50ZXJhY3RpdmUgc2hlbGwgaXMgYWJvcnRlZC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1RvIGRpc2FibGUgaW50ZXJhY3RpdmUgbG9naW5zLCBkaXNwbGF5aW5nIGEgZ3JlZXRpbmcgaW5zdGVhZDoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBjaHNoIC1zIC91c3IvYmluL2dpdC1zaGVsbAorJCBta2RpciAkSE9NRS9naXQtc2hlbGwtY29tbWFuZHMKKyQgY2F0ID4kSE9NRS9naXQtc2hlbGwtY29tbWFuZHMvbm8taW50ZXJhY3RpdmUtbG9naW4gPDxcRU9GCisjIS9iaW4vc2gKK3ByaW50ZiAnJXNcbicgIkhpICRVU0VSISBZb3UndmUgc3VjY2Vzc2Z1bGx5IGF1dGhlbnRpY2F0ZWQsIGJ1dCBJIGRvIG5vdCIKK3ByaW50ZiAnJXNcbicgInByb3ZpZGUgaW50ZXJhY3RpdmUgc2hlbGwgYWNjZXNzLiIKK2V4aXQgMTI4CitFT0YKKyQgY2htb2QgK3ggJEhPTUUvZ2l0LXNoZWxsLWNvbW1hbmRzL25vLWludGVyYWN0aXZlLWxvZ2luCistLS0tLS0tLS0tLS0tLS0tCisKK1RvIGVuYWJsZSBnaXQtY3Zzc2VydmVyIGFjY2VzcyAod2hpY2ggc2hvdWxkIGdlbmVyYWxseSBoYXZlIHRoZQorYG5vLWludGVyYWN0aXZlLWxvZ2luYCBleGFtcGxlIGFib3ZlIGFzIGEgcHJlcmVxdWlzaXRlLCBhcyBjcmVhdGluZwordGhlIGdpdC1zaGVsbC1jb21tYW5kcyBkaXJlY3RvcnkgYWxsb3dzIGludGVyYWN0aXZlIGxvZ2lucyk6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgY2F0ID4kSE9NRS9naXQtc2hlbGwtY29tbWFuZHMvY3ZzIDw8XEVPRgoraWYgISB0ZXN0ICQjID0gMSAmJiB0ZXN0ICIkMSIgPSAic2VydmVyIgordGhlbgorCWVjaG8gPiYyICJnaXQtY3Zzc2VydmVyIG9ubHkgaGFuZGxlcyBcInNlcnZlclwiIgorCWV4aXQgMQorZmkKK2V4ZWMgZ2l0IGN2c3NlcnZlciBzZXJ2ZXIKK0VPRgorJCBjaG1vZCAreCAkSE9NRS9naXQtc2hlbGwtY29tbWFuZHMvY3ZzCistLS0tLS0tLS0tLS0tLS0tCisKK1NFRSBBTFNPCistLS0tLS0tLQorc3NoKDEpLAorbGlua2dpdDpnaXQtZGFlbW9uWzFdLAorY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvUkVBRE1FCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MmVhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG9ydGxvZy50eHQKQEAgLTAsMCArMSw5MyBAQAorZ2l0LXNob3J0bG9nKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNob3J0bG9nIC0gU3VtbWFyaXplICdnaXQgbG9nJyBvdXRwdXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHNob3J0bG9nJyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uIHJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXQorZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8ICdnaXQgc2hvcnRsb2cnIFs8b3B0aW9ucz5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorU3VtbWFyaXplcyAnZ2l0IGxvZycgb3V0cHV0IGluIGEgZm9ybWF0IHN1aXRhYmxlIGZvciBpbmNsdXNpb24KK2luIHJlbGVhc2UgYW5ub3VuY2VtZW50cy4gRWFjaCBjb21taXQgd2lsbCBiZSBncm91cGVkIGJ5IGF1dGhvciBhbmQgdGl0bGUuCisKK0FkZGl0aW9uYWxseSwgIltQQVRDSF0iIHdpbGwgYmUgc3RyaXBwZWQgZnJvbSB0aGUgY29tbWl0IGRlc2NyaXB0aW9uLgorCitJZiBubyByZXZpc2lvbnMgYXJlIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCBlaXRoZXIgc3RhbmRhcmQgaW5wdXQKK2lzIG5vdCBhIHRlcm1pbmFsIG9yIHRoZXJlIGlzIG5vIGN1cnJlbnQgYnJhbmNoLCAnZ2l0IHNob3J0bG9nJyB3aWxsCitvdXRwdXQgYSBzdW1tYXJ5IG9mIHRoZSBsb2cgcmVhZCBmcm9tIHN0YW5kYXJkIGlucHV0LCB3aXRob3V0CityZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4KKworT1BUSU9OUworLS0tLS0tLQorCistbjo6CistLW51bWJlcmVkOjoKKwlTb3J0IG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBjb21taXRzIHBlciBhdXRob3IgaW5zdGVhZAorCW9mIGF1dGhvciBhbHBoYWJldGljIG9yZGVyLgorCistczo6CistLXN1bW1hcnk6OgorCVN1cHByZXNzIGNvbW1pdCBkZXNjcmlwdGlvbiBhbmQgcHJvdmlkZSBhIGNvbW1pdCBjb3VudCBzdW1tYXJ5IG9ubHkuCisKKy1lOjoKKy0tZW1haWw6OgorCVNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IuCisKKy0tZm9ybWF0Wz08Zm9ybWF0Pl06OgorCUluc3RlYWQgb2YgdGhlIGNvbW1pdCBzdWJqZWN0LCB1c2Ugc29tZSBvdGhlciBpbmZvcm1hdGlvbiB0bworCWRlc2NyaWJlIGVhY2ggY29tbWl0LiAgJzxmb3JtYXQ+JyBjYW4gYmUgYW55IHN0cmluZyBhY2NlcHRlZAorCWJ5IHRoZSBgLS1mb3JtYXRgIG9wdGlvbiBvZiAnZ2l0IGxvZycsIHN1Y2ggYXMgJyogWyVoXSAlcycuCisJKFNlZSB0aGUgIlBSRVRUWSBGT1JNQVRTIiBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWxvZ1sxXS4pCisKKwlFYWNoIHByZXR0eS1wcmludGVkIGNvbW1pdCB3aWxsIGJlIHJld3JhcHBlZCBiZWZvcmUgaXQgaXMgc2hvd24uCisKKy1jOjoKKy0tY29tbWl0dGVyOjoKKwlDb2xsZWN0IGFuZCBzaG93IGNvbW1pdHRlciBpZGVudGl0aWVzIGluc3RlYWQgb2YgYXV0aG9ycy4KKworLXdbPHdpZHRoPlssPGluZGVudDE+Wyw8aW5kZW50Mj5dXV06OgorCUxpbmV3cmFwIHRoZSBvdXRwdXQgYnkgd3JhcHBpbmcgZWFjaCBsaW5lIGF0IGB3aWR0aGAuICBUaGUgZmlyc3QKKwlsaW5lIG9mIGVhY2ggZW50cnkgaXMgaW5kZW50ZWQgYnkgYGluZGVudDFgIHNwYWNlcywgYW5kIHRoZSBzZWNvbmQKKwlhbmQgc3Vic2VxdWVudCBsaW5lcyBhcmUgaW5kZW50ZWQgYnkgYGluZGVudDJgIHNwYWNlcy4gYHdpZHRoYCwKKwlgaW5kZW50MWAsIGFuZCBgaW5kZW50MmAgZGVmYXVsdCB0byA3NiwgNiBhbmQgOSByZXNwZWN0aXZlbHkuCisrCitJZiB3aWR0aCBpcyBgMGAgKHplcm8pIHRoZW4gaW5kZW50IHRoZSBsaW5lcyBvZiB0aGUgb3V0cHV0IHdpdGhvdXQgd3JhcHBpbmcKK3RoZW0uCisKKzxyZXZpc2lvbiByYW5nZT46OgorCVNob3cgb25seSBjb21taXRzIGluIHRoZSBzcGVjaWZpZWQgcmV2aXNpb24gcmFuZ2UuICBXaGVuIG5vCisJPHJldmlzaW9uIHJhbmdlPiBpcyBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGBIRUFEYCAoaS5lLiB0aGUKKwl3aG9sZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgY29tbWl0KS4gIGBvcmlnaW4uLkhFQURgCisJc3BlY2lmaWVzIGFsbCB0aGUgY29tbWl0cyByZWFjaGFibGUgZnJvbSB0aGUgY3VycmVudCBjb21taXQKKwkoaS5lLiBgSEVBRGApLCBidXQgbm90IGZyb20gYG9yaWdpbmAuIEZvciBhIGNvbXBsZXRlIGxpc3Qgb2YKKwl3YXlzIHRvIHNwZWxsIDxyZXZpc2lvbiByYW5nZT4sIHNlZSB0aGUgIlNwZWNpZnlpbmcgUmFuZ2VzIgorCXNlY3Rpb24gb2YgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisKK1stLV0gPHBhdGg+Li4uOjoKKwlDb25zaWRlciBvbmx5IGNvbW1pdHMgdGhhdCBhcmUgZW5vdWdoIHRvIGV4cGxhaW4gaG93IHRoZSBmaWxlcworCXRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCBwYXRocyBjYW1lIHRvIGJlLgorKworUGF0aHMgbWF5IG5lZWQgdG8gYmUgcHJlZml4ZWQgd2l0aCBgLS1gIHRvIHNlcGFyYXRlIHRoZW0gZnJvbQorb3B0aW9ucyBvciB0aGUgcmV2aXNpb24gcmFuZ2UsIHdoZW4gY29uZnVzaW9uIGFyaXNlcy4KKworOmdpdC1zaG9ydGxvZzogMQoraW5jbHVkZTo6cmV2LWxpc3Qtb3B0aW9ucy50eHRbXQorCitNQVBQSU5HIEFVVEhPUlMKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgYC5tYWlsbWFwYCBmZWF0dXJlIGlzIHVzZWQgdG8gY29hbGVzY2UgdG9nZXRoZXIgY29tbWl0cyBieSB0aGUgc2FtZQorcGVyc29uIGluIHRoZSBzaG9ydGxvZywgd2hlcmUgdGhlaXIgbmFtZSBhbmQvb3IgZW1haWwgYWRkcmVzcyB3YXMKK3NwZWxsZWQgZGlmZmVyZW50bHkuCisKK2luY2x1ZGU6Om1haWxtYXAudHh0W10KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjMmZjZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctYnJhbmNoLnR4dApAQCAtMCwwICsxLDIwNCBAQAorZ2l0LXNob3ctYnJhbmNoKDEpCis9PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNob3ctYnJhbmNoIC0gU2hvdyBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc2hvdy1icmFuY2gnIFstYXwtLWFsbF0gWy1yfC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl0KKwkJWy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdCisJCVstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV0KKwkJWy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdCisJCVsoPHJldj4gfCA8Z2xvYj4pLi4uXQorJ2dpdCBzaG93LWJyYW5jaCcgKC1nfC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitTaG93cyB0aGUgY29tbWl0IGFuY2VzdHJ5IGdyYXBoIHN0YXJ0aW5nIGZyb20gdGhlIGNvbW1pdHMgbmFtZWQKK3dpdGggPHJldj5zIG9yIDxnbG9iPnMgKG9yIGFsbCByZWZzIHVuZGVyIHJlZnMvaGVhZHMKK2FuZC9vciByZWZzL3RhZ3MpIHNlbWktdmlzdWFsbHkuCisKK0l0IGNhbm5vdCBzaG93IG1vcmUgdGhhbiAyOSBicmFuY2hlcyBhbmQgY29tbWl0cyBhdCBhIHRpbWUuCisKK0l0IHVzZXMgYHNob3dicmFuY2guZGVmYXVsdGAgbXVsdGktdmFsdWVkIGNvbmZpZ3VyYXRpb24gaXRlbXMgaWYKK25vIDxyZXY+IG9yIDxnbG9iPiBpcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisKK09QVElPTlMKKy0tLS0tLS0KKzxyZXY+OjoKKwlBcmJpdHJhcnkgZXh0ZW5kZWQgU0hBLTEgZXhwcmVzc2lvbiAoc2VlIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddKQorCXRoYXQgdHlwaWNhbGx5IG5hbWVzIGEgYnJhbmNoIGhlYWQgb3IgYSB0YWcuCisKKzxnbG9iPjo6CisJQSBnbG9iIHBhdHRlcm4gdGhhdCBtYXRjaGVzIGJyYW5jaCBvciB0YWcgbmFtZXMgdW5kZXIKKwlyZWZzLy4gIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBtYW55IHRvcGljCisJYnJhbmNoZXMgdW5kZXIgcmVmcy9oZWFkcy90b3BpYywgZ2l2aW5nCisJYHRvcGljLypgIHdvdWxkIHNob3cgYWxsIG9mIHRoZW0uCisKKy1yOjoKKy0tcmVtb3Rlczo6CisJU2hvdyB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLgorCistYTo6CistLWFsbDo6CisJU2hvdyBib3RoIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBhbmQgbG9jYWwgYnJhbmNoZXMuCisKKy0tY3VycmVudDo6CisJV2l0aCB0aGlzIG9wdGlvbiwgdGhlIGNvbW1hbmQgaW5jbHVkZXMgdGhlIGN1cnJlbnQKKwlicmFuY2ggdG8gdGhlIGxpc3Qgb2YgcmV2cyB0byBiZSBzaG93biB3aGVuIGl0IGlzIG5vdAorCWdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKy0tdG9wby1vcmRlcjo6CisgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cyBhcmUgc2hvd24gaW4KKyAgICAgICAgcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLiAgVGhpcyBvcHRpb24gbWFrZXMgdGhlbQorICAgICAgICBhcHBlYXIgaW4gdG9wb2xvZ2ljYWwgb3JkZXIgKGkuZS4sIGRlc2NlbmRhbnQgY29tbWl0cworICAgICAgICBhcmUgc2hvd24gYmVmb3JlIHRoZWlyIHBhcmVudHMpLgorCistLWRhdGUtb3JkZXI6OgorCVRoaXMgb3B0aW9uIGlzIHNpbWlsYXIgdG8gYC0tdG9wby1vcmRlcmAgaW4gdGhlIHNlbnNlIHRoYXQgbm8KKwlwYXJlbnQgY29tZXMgYmVmb3JlIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGJ1dCBvdGhlcndpc2UgY29tbWl0cworCWFyZSBvcmRlcmVkIGFjY29yZGluZyB0byB0aGVpciBjb21taXQgZGF0ZS4KKworLS1zcGFyc2U6OgorCUJ5IGRlZmF1bHQsIHRoZSBvdXRwdXQgb21pdHMgbWVyZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZQorCWZyb20gb25seSBvbmUgdGlwIGJlaW5nIHNob3duLiAgVGhpcyBvcHRpb24gbWFrZXMgdGhlbQorCXZpc2libGUuCisKKy0tbW9yZT08bj46OgorCVVzdWFsbHkgdGhlIGNvbW1hbmQgc3RvcHMgb3V0cHV0IHVwb24gc2hvd2luZyB0aGUgY29tbWl0CisJdGhhdCBpcyB0aGUgY29tbW9uIGFuY2VzdG9yIG9mIGFsbCB0aGUgYnJhbmNoZXMuICBUaGlzCisJZmxhZyB0ZWxscyB0aGUgY29tbWFuZCB0byBnbyA8bj4gbW9yZSBjb21tb24gY29tbWl0cworCWJleW9uZCB0aGF0LiAgV2hlbiA8bj4gaXMgbmVnYXRpdmUsIGRpc3BsYXkgb25seSB0aGUKKwk8cmVmZXJlbmNlPnMgZ2l2ZW4sIHdpdGhvdXQgc2hvd2luZyB0aGUgY29tbWl0IGFuY2VzdHJ5CisJdHJlZS4KKworLS1saXN0OjoKKwlTeW5vbnltIHRvIGAtLW1vcmU9LTFgCisKKy0tbWVyZ2UtYmFzZTo6CisJSW5zdGVhZCBvZiBzaG93aW5nIHRoZSBjb21taXQgbGlzdCwgZGV0ZXJtaW5lIHBvc3NpYmxlCisJbWVyZ2UgYmFzZXMgZm9yIHRoZSBzcGVjaWZpZWQgY29tbWl0cy4gQWxsIG1lcmdlIGJhc2VzCisJd2lsbCBiZSBjb250YWluZWQgaW4gYWxsIHNwZWNpZmllZCBjb21taXRzLiBUaGlzIGlzCisJZGlmZmVyZW50IGZyb20gaG93IGxpbmtnaXQ6Z2l0LW1lcmdlLWJhc2VbMV0gaGFuZGxlcworCXRoZSBjYXNlIG9mIHRocmVlIG9yIG1vcmUgY29tbWl0cy4KKworLS1pbmRlcGVuZGVudDo6CisJQW1vbmcgdGhlIDxyZWZlcmVuY2U+cyBnaXZlbiwgZGlzcGxheSBvbmx5IHRoZSBvbmVzIHRoYXQKKwljYW5ub3QgYmUgcmVhY2hlZCBmcm9tIGFueSBvdGhlciA8cmVmZXJlbmNlPi4KKworLS1uby1uYW1lOjoKKwlEbyBub3Qgc2hvdyBuYW1pbmcgc3RyaW5ncyBmb3IgZWFjaCBjb21taXQuCisKKy0tc2hhMS1uYW1lOjoKKwlJbnN0ZWFkIG9mIG5hbWluZyB0aGUgY29tbWl0cyB1c2luZyB0aGUgcGF0aCB0byByZWFjaAorCXRoZW0gZnJvbSBoZWFkcyAoZS5nLiAibWFzdGVyfjIiIHRvIG1lYW4gdGhlIGdyYW5kcGFyZW50CisJb2YgIm1hc3RlciIpLCBuYW1lIHRoZW0gd2l0aCB0aGUgdW5pcXVlIHByZWZpeCBvZiB0aGVpcgorCW9iamVjdCBuYW1lcy4KKworLS10b3BpY3M6OgorCVNob3dzIG9ubHkgY29tbWl0cyB0aGF0IGFyZSBOT1Qgb24gdGhlIGZpcnN0IGJyYW5jaCBnaXZlbi4KKwlUaGlzIGhlbHBzIHRyYWNrIHRvcGljIGJyYW5jaGVzIGJ5IGhpZGluZyBhbnkgY29tbWl0IHRoYXQKKwlpcyBhbHJlYWR5IGluIHRoZSBtYWluIGxpbmUgb2YgZGV2ZWxvcG1lbnQuICBXaGVuIGdpdmVuCisJImdpdCBzaG93LWJyYW5jaCAtLXRvcGljcyBtYXN0ZXIgdG9waWMxIHRvcGljMiIsIHRoaXMKKwl3aWxsIHNob3cgdGhlIHJldmlzaW9ucyBnaXZlbiBieSAiZ2l0IHJldi1saXN0IHtjYXJldH1tYXN0ZXIKKwl0b3BpYzEgdG9waWMyIgorCistZzo6CistLXJlZmxvZ1s9PG4+Wyw8YmFzZT5dXSBbPHJlZj5dOjoKKwlTaG93cyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIGZvciB0aGUgZ2l2ZW4KKwlyZWYuICBJZiA8YmFzZT4gaXMgZ2l2ZW4sIDxuPiBlbnRyaWVzIGdvaW5nIGJhY2sgZnJvbQorCXRoYXQgZW50cnkuICA8YmFzZT4gY2FuIGJlIHNwZWNpZmllZCBhcyBjb3VudCBvciBkYXRlLgorCVdoZW4gbm8gZXhwbGljaXQgPHJlZj4gcGFyYW1ldGVyIGlzIGdpdmVuLCBpdCBkZWZhdWx0cyB0byB0aGUKKwljdXJyZW50IGJyYW5jaCAob3IgYEhFQURgIGlmIGl0IGlzIGRldGFjaGVkKS4KKworLS1jb2xvcls9PHdoZW4+XTo6CisJQ29sb3IgdGhlIHN0YXR1cyBzaWduIChvbmUgb2YgdGhlc2U6IGAqYCBgIWAgYCtgIGAtYCkgb2YgZWFjaCBjb21taXQKKwljb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2ggaXQncyBpbi4KKwlUaGUgdmFsdWUgbXVzdCBiZSBhbHdheXMgKHRoZSBkZWZhdWx0KSwgbmV2ZXIsIG9yIGF1dG8uCisKKy0tbm8tY29sb3I6OgorCVR1cm4gb2ZmIGNvbG9yZWQgb3V0cHV0LCBldmVuIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBnaXZlcyB0aGUKKwlkZWZhdWx0IHRvIGNvbG9yIG91dHB1dC4KKwlTYW1lIGFzIGAtLWNvbG9yPW5ldmVyYC4KKworTm90ZSB0aGF0IC0tbW9yZSwgLS1saXN0LCAtLWluZGVwZW5kZW50IGFuZCAtLW1lcmdlLWJhc2Ugb3B0aW9ucworYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KKworCitPVVRQVVQKKy0tLS0tLQorR2l2ZW4gTiA8cmVmZXJlbmNlcz4sIHRoZSBmaXJzdCBOIGxpbmVzIGFyZSB0aGUgb25lLWxpbmUKK2Rlc2NyaXB0aW9uIGZyb20gdGhlaXIgY29tbWl0IG1lc3NhZ2UuICBUaGUgYnJhbmNoIGhlYWQgdGhhdCBpcworcG9pbnRlZCBhdCBieSAkR0lUX0RJUi9IRUFEIGlzIHByZWZpeGVkIHdpdGggYW4gYXN0ZXJpc2sgYCpgCitjaGFyYWN0ZXIgd2hpbGUgb3RoZXIgaGVhZHMgYXJlIHByZWZpeGVkIHdpdGggYSBgIWAgY2hhcmFjdGVyLgorCitGb2xsb3dpbmcgdGhlc2UgTiBsaW5lcywgb25lLWxpbmUgbG9nIGZvciBlYWNoIGNvbW1pdCBpcworZGlzcGxheWVkLCBpbmRlbnRlZCBOIHBsYWNlcy4gIElmIGEgY29tbWl0IGlzIG9uIHRoZSBJLXRoCiticmFuY2gsIHRoZSBJLXRoIGluZGVudGF0aW9uIGNoYXJhY3RlciBzaG93cyBhIGArYCBzaWduOworb3RoZXJ3aXNlIGl0IHNob3dzIGEgc3BhY2UuICBNZXJnZSBjb21taXRzIGFyZSBkZW5vdGVkIGJ5CithIGAtYCBzaWduLiAgRWFjaCBjb21taXQgc2hvd3MgYSBzaG9ydCBuYW1lIHRoYXQKK2NhbiBiZSB1c2VkIGFzIGFuIGV4dGVuZGVkIFNIQS0xIHRvIG5hbWUgdGhhdCBjb21taXQuCisKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyB0aHJlZSBicmFuY2hlcywgIm1hc3RlciIsICJmaXhlcyIKK2FuZCAibWhmIjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCBtYXN0ZXIgZml4ZXMgbWhmCisqIFttYXN0ZXJdIEFkZCAnZ2l0IHNob3ctYnJhbmNoJy4KKyAhIFtmaXhlc10gSW50cm9kdWNlICJyZXNldCB0eXBlIiBmbGFnIHRvICJnaXQgcmVzZXQiCisgICEgW21oZl0gQWxsb3cgIityZW1vdGU6bG9jYWwiIHJlZnNwZWMgdG8gY2F1c2UgLS1mb3JjZSB3aGVuIGZldGNoaW5nLgorLS0tCisgICsgW21oZl0gQWxsb3cgIityZW1vdGU6bG9jYWwiIHJlZnNwZWMgdG8gY2F1c2UgLS1mb3JjZSB3aGVuIGZldGNoaW5nLgorICArIFttaGZ+MV0gVXNlIGdpdC1vY3RvcHVzIHdoZW4gcHVsbGluZyBtb3JlIHRoYW4gb25lIGhlYWRzLgorICsgIFtmaXhlc10gSW50cm9kdWNlICJyZXNldCB0eXBlIiBmbGFnIHRvICJnaXQgcmVzZXQiCisgICsgW21oZn4yXSAiZ2l0IGZldGNoIC0tZm9yY2UiLgorICArIFttaGZ+M10gVXNlIC5naXQvcmVtb3RlL29yaWdpbiwgbm90IC5naXQvYnJhbmNoZXMvb3JpZ2luLgorICArIFttaGZ+NF0gTWFrZSAiZ2l0IHB1bGwiIGFuZCAiZ2l0IGZldGNoIiBkZWZhdWx0IHRvIG9yaWdpbgorICArIFttaGZ+NV0gSW5mYW1vdXMgJ29jdG9wdXMgbWVyZ2UnCisgICsgW21oZn42XSBSZXRpcmUgZ2l0LXBhcnNlLXJlbW90ZS4KKyAgKyBbbWhmfjddIE11bHRpLWhlYWQgZmV0Y2guCisgICsgW21oZn44XSBTdGFydCBhZGRpbmcgdGhlICRHSVRfRElSL3JlbW90ZXMvIHN1cHBvcnQuCisqKysgW21hc3Rlcl0gQWRkICdnaXQgc2hvdy1icmFuY2gnLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIHRocmVlIGJyYW5jaGVzIGFsbCBmb3JrZWQgZnJvbSBhIGNvbW1vbiBjb21taXQsIFttYXN0ZXJdLAord2hvc2UgY29tbWl0IG1lc3NhZ2UgaXMgIkFkZCBcJ2dpdCBzaG93LWJyYW5jaCciLgorVGhlICJmaXhlcyIgYnJhbmNoIGFkZHMgb25lIGNvbW1pdCAiSW50cm9kdWNlICJyZXNldCB0eXBlIiBmbGFnIHRvCisiZ2l0IHJlc2V0IiIuIFRoZSAibWhmIiBicmFuY2ggYWRkcyBtYW55IG90aGVyIGNvbW1pdHMuCitUaGUgY3VycmVudCBicmFuY2ggaXMgIm1hc3RlciIuCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK0lmIHlvdSBrZWVwIHlvdXIgcHJpbWFyeSBicmFuY2hlcyBpbW1lZGlhdGVseSB1bmRlcgorYHJlZnMvaGVhZHNgLCBhbmQgdG9waWMgYnJhbmNoZXMgaW4gc3ViZGlyZWN0b3JpZXMgb2YKK2l0LCBoYXZpbmcgdGhlIGZvbGxvd2luZyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIG1heSBoZWxwOgorCistLS0tLS0tLS0tLS0KK1tzaG93YnJhbmNoXQorCWRlZmF1bHQgPSAtLXRvcG8tb3JkZXIKKwlkZWZhdWx0ID0gaGVhZHMvKgorCistLS0tLS0tLS0tLS0KKworV2l0aCB0aGlzLCBgZ2l0IHNob3ctYnJhbmNoYCB3aXRob3V0IGV4dHJhIHBhcmFtZXRlcnMgd291bGQgc2hvdworb25seSB0aGUgcHJpbWFyeSBicmFuY2hlcy4gIEluIGFkZGl0aW9uLCBpZiB5b3UgaGFwcGVuIHRvIGJlIG9uCit5b3VyIHRvcGljIGJyYW5jaCwgaXQgaXMgc2hvd24gYXMgd2VsbC4KKworLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCAtLXJlZmxvZz0iMTAsMSBob3VyIGFnbyIgLS1saXN0IG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK3Nob3dzIDEwIHJlZmxvZyBlbnRyaWVzIGdvaW5nIGJhY2sgZnJvbSB0aGUgdGlwIGFzIG9mIDEgaG91ciBhZ28uCitXaXRob3V0IGAtLWxpc3RgLCB0aGUgb3V0cHV0IGFsc28gc2hvd3MgaG93IHRoZXNlIHRpcHMgYXJlCit0b3BvbG9naWNhbGx5IHJlbGF0ZWQgd2l0aCBlYWNoIG90aGVyLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1pbmRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0ZTRiYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctaW5kZXgudHh0CkBAIC0wLDAgKzEsNDEgQEAKK2dpdC1zaG93LWluZGV4KDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc2hvdy1pbmRleCAtIFNob3cgcGFja2VkIGFyY2hpdmUgaW5kZXgKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc2hvdy1pbmRleCcKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlYWQgdGhlIGAuaWR4YCBmaWxlIGZvciBhIEdpdCBwYWNrZmlsZSAoY3JlYXRlZCB3aXRoCitsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0gb3IgbGlua2dpdDpnaXQtaW5kZXgtcGFja1sxXSkgZnJvbSB0aGUKK3N0YW5kYXJkIGlucHV0LCBhbmQgZHVtcCBpdHMgY29udGVudHMuIFRoZSBvdXRwdXQgY29uc2lzdHMgb2Ygb25lIG9iamVjdAorcGVyIGxpbmUsIHdpdGggZWFjaCBsaW5lIGNvbnRhaW5pbmcgdHdvIG9yIHRocmVlIHNwYWNlLXNlcGFyYXRlZAorY29sdW1uczoKKworICAtIHRoZSBmaXJzdCBjb2x1bW4gaXMgdGhlIG9mZnNldCBpbiBieXRlcyBvZiB0aGUgb2JqZWN0IHdpdGhpbiB0aGUKKyAgICBjb3JyZXNwb25kaW5nIHBhY2tmaWxlCisKKyAgLSB0aGUgc2Vjb25kIGNvbHVtbiBpcyB0aGUgb2JqZWN0IGlkIG9mIHRoZSBvYmplY3QKKworICAtIGlmIHRoZSBpbmRleCB2ZXJzaW9uIGlzIDIgb3IgaGlnaGVyLCB0aGUgdGhpcmQgY29sdW1uIGNvbnRhaW5zIHRoZQorICAgIENSQzMyIG9mIHRoZSBvYmplY3QgZGF0YQorCitUaGUgb2JqZWN0cyBhcmUgb3V0cHV0IGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBmb3VuZCBpbiB0aGUgaW5kZXgKK2ZpbGUsIHdoaWNoIHNob3VsZCBiZSAoaW4gYSBjb3JyZWN0bHkgY29uc3RydWN0ZWQgZmlsZSkgc29ydGVkIGJ5IG9iamVjdAoraWQuCisKK05vdGUgdGhhdCB5b3UgY2FuIGdldCBtb3JlIGluZm9ybWF0aW9uIG9uIGEgcGFja2ZpbGUgYnkgY2FsbGluZworbGlua2dpdDpnaXQtdmVyaWZ5LXBhY2tbMV0uIEhvd2V2ZXIsIGFzIHRoaXMgY29tbWFuZCBjb25zaWRlcnMgb25seSB0aGUKK2luZGV4IGZpbGUgaXRzZWxmLCBpdCdzIGJvdGggZmFzdGVyIGFuZCBtb3JlIGZsZXhpYmxlLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjRkMjcxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1yZWYudHh0CkBAIC0wLDAgKzEsMTg2IEBACitnaXQtc2hvdy1yZWYoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc2hvdy1yZWYgLSBMaXN0IHJlZmVyZW5jZXMgaW4gYSBsb2NhbCByZXBvc2l0b3J5CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzaG93LXJlZicgWy1xfC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kfC0tZGVyZWZlcmVuY2VdCisJICAgICBbLXN8LS1oYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdCisJICAgICBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXQorJ2dpdCBzaG93LXJlZicgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitEaXNwbGF5cyByZWZlcmVuY2VzIGF2YWlsYWJsZSBpbiBhIGxvY2FsIHJlcG9zaXRvcnkgYWxvbmcgd2l0aCB0aGUgYXNzb2NpYXRlZAorY29tbWl0IElEcy4gUmVzdWx0cyBjYW4gYmUgZmlsdGVyZWQgdXNpbmcgYSBwYXR0ZXJuIGFuZCB0YWdzIGNhbiBiZQorZGVyZWZlcmVuY2VkIGludG8gb2JqZWN0IElEcy4gQWRkaXRpb25hbGx5LCBpdCBjYW4gYmUgdXNlZCB0byB0ZXN0IHdoZXRoZXIgYQorcGFydGljdWxhciByZWYgZXhpc3RzLgorCitCeSBkZWZhdWx0LCBzaG93cyB0aGUgdGFncywgaGVhZHMsIGFuZCByZW1vdGUgcmVmcy4KKworVGhlIC0tZXhjbHVkZS1leGlzdGluZyBmb3JtIGlzIGEgZmlsdGVyIHRoYXQgZG9lcyB0aGUgaW52ZXJzZS4gSXQgcmVhZHMKK3JlZnMgZnJvbSBzdGRpbiwgb25lIHJlZiBwZXIgbGluZSwgYW5kIHNob3dzIHRob3NlIHRoYXQgZG9uJ3QgZXhpc3QgaW4KK3RoZSBsb2NhbCByZXBvc2l0b3J5LgorCitVc2Ugb2YgdGhpcyB1dGlsaXR5IGlzIGVuY291cmFnZWQgaW4gZmF2b3Igb2YgZGlyZWN0bHkgYWNjZXNzaW5nIGZpbGVzIHVuZGVyCit0aGUgYC5naXRgIGRpcmVjdG9yeS4KKworT1BUSU9OUworLS0tLS0tLQorCistLWhlYWQ6OgorCisJU2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgbm9ybWFsbHkgYmUgZmlsdGVyZWQgb3V0LgorCistLWhlYWRzOjoKKy0tdGFnczo6CisKKwlMaW1pdCB0byAicmVmcy9oZWFkcyIgYW5kICJyZWZzL3RhZ3MiLCByZXNwZWN0aXZlbHkuICBUaGVzZSBvcHRpb25zCisJYXJlIG5vdCBtdXR1YWxseSBleGNsdXNpdmU7IHdoZW4gZ2l2ZW4gYm90aCwgcmVmZXJlbmNlcyBzdG9yZWQgaW4KKwkicmVmcy9oZWFkcyIgYW5kICJyZWZzL3RhZ3MiIGFyZSBkaXNwbGF5ZWQuCisKKy1kOjoKKy0tZGVyZWZlcmVuY2U6OgorCisJRGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMgYXMgd2VsbC4gVGhleSB3aWxsIGJlIHNob3duIHdpdGggIntjYXJldH17fSIKKwlhcHBlbmRlZC4KKworLXM6OgorLS1oYXNoWz08bj5dOjoKKworCU9ubHkgc2hvdyB0aGUgU0hBLTEgaGFzaCwgbm90IHRoZSByZWZlcmVuY2UgbmFtZS4gV2hlbiBjb21iaW5lZCB3aXRoCisJLS1kZXJlZmVyZW5jZSB0aGUgZGVyZWZlcmVuY2VkIHRhZyB3aWxsIHN0aWxsIGJlIHNob3duIGFmdGVyIHRoZSBTSEEtMS4KKworLS12ZXJpZnk6OgorCisJRW5hYmxlIHN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZyBieSByZXF1aXJpbmcgYW4gZXhhY3QgcmVmIHBhdGguCisJQXNpZGUgZnJvbSByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBvZiAxLCBpdCB3aWxsIGFsc28gcHJpbnQgYW4gZXJyb3IKKwltZXNzYWdlIGlmIGAtLXF1aWV0YCB3YXMgbm90IHNwZWNpZmllZC4KKworLS1hYmJyZXZbPTxuPl06OgorCisJQWJicmV2aWF0ZSB0aGUgb2JqZWN0IG5hbWUuICBXaGVuIHVzaW5nIGAtLWhhc2hgLCB5b3UgZG8KKwlub3QgaGF2ZSB0byBzYXkgYC0taGFzaCAtLWFiYnJldmA7IGAtLWhhc2g9bmAgd291bGQgZG8uCisKKy1xOjoKKy0tcXVpZXQ6OgorCisJRG8gbm90IHByaW50IGFueSByZXN1bHRzIHRvIHN0ZG91dC4gV2hlbiBjb21iaW5lZCB3aXRoIGAtLXZlcmlmeWAgdGhpcworCWNhbiBiZSB1c2VkIHRvIHNpbGVudGx5IGNoZWNrIGlmIGEgcmVmZXJlbmNlIGV4aXN0cy4KKworLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dOjoKKworCU1ha2UgJ2dpdCBzaG93LXJlZicgYWN0IGFzIGEgZmlsdGVyIHRoYXQgcmVhZHMgcmVmcyBmcm9tIHN0ZGluIG9mIHRoZQorCWZvcm0gImBeKD86PGFueXRoaW5nPlxzKT88cmVmbmFtZT4oPzpcXnt9KT8kYCIKKwlhbmQgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBhY3Rpb25zIG9uIGVhY2g6CisJKDEpIHN0cmlwICJ7Y2FyZXR9e30iIGF0IHRoZSBlbmQgb2YgbGluZSBpZiBhbnk7CisJKDIpIGlnbm9yZSBpZiBwYXR0ZXJuIGlzIHByb3ZpZGVkIGFuZCBkb2VzIG5vdCBoZWFkLW1hdGNoIHJlZm5hbWU7CisJKDMpIHdhcm4gaWYgcmVmbmFtZSBpcyBub3QgYSB3ZWxsLWZvcm1lZCByZWZuYW1lIGFuZCBza2lwOworCSg0KSBpZ25vcmUgaWYgcmVmbmFtZSBpcyBhIHJlZiB0aGF0IGV4aXN0cyBpbiB0aGUgbG9jYWwgcmVwb3NpdG9yeTsKKwkoNSkgb3RoZXJ3aXNlIG91dHB1dCB0aGUgbGluZS4KKworCis8cGF0dGVybj4uLi46OgorCisJU2hvdyByZWZlcmVuY2VzIG1hdGNoaW5nIG9uZSBvciBtb3JlIHBhdHRlcm5zLiBQYXR0ZXJucyBhcmUgbWF0Y2hlZCBmcm9tCisJdGhlIGVuZCBvZiB0aGUgZnVsbCBuYW1lLCBhbmQgb25seSBjb21wbGV0ZSBwYXJ0cyBhcmUgbWF0Y2hlZCwgZS5nLgorCSdtYXN0ZXInIG1hdGNoZXMgJ3JlZnMvaGVhZHMvbWFzdGVyJywgJ3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyJywKKwkncmVmcy90YWdzL2plZGkvbWFzdGVyJyBidXQgbm90ICdyZWZzL2hlYWRzL215bWFzdGVyJyBvcgorCSdyZWZzL3JlbW90ZXMvbWFzdGVyL2plZGknLgorCitPVVRQVVQKKy0tLS0tLQorCitUaGUgb3V0cHV0IGlzIGluIHRoZSBmb3JtYXQ6ICc8U0hBLTEgSUQ+JyAnPHNwYWNlPicgJzxyZWZlcmVuY2UgbmFtZT4nLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1yZWYgLS1oZWFkIC0tZGVyZWZlcmVuY2UKKzgzMmU3NmE5ODk5ZjU2MGE5MGZmZDYyYWUyY2U4M2JiZWZmNThmNTQgSEVBRAorODMyZTc2YTk4OTlmNTYwYTkwZmZkNjJhZTJjZTgzYmJlZmY1OGY1NCByZWZzL2hlYWRzL21hc3RlcgorODMyZTc2YTk4OTlmNTYwYTkwZmZkNjJhZTJjZTgzYmJlZmY1OGY1NCByZWZzL2hlYWRzL29yaWdpbgorMzUyMTAxNzU1NmM1ZGU0MTU5ZGE0NjE1YTM5ZmE0ZDVkMmMyNzliNSByZWZzL3RhZ3MvdjAuOTkuOWMKKzZkZGMwOTY0MDM0MzQyNTE5YTg3ZmUwMTM3ODFhYmYzMWM2ZGI2YWQgcmVmcy90YWdzL3YwLjk5LjljXnt9CiswNTVlNGFlM2FlNmViMzQ0Y2JhYmYyYTUyNTZhNDllYTY2MDQwMTMxIHJlZnMvdGFncy92MS4wcmM0Cis0MjMzMjVhMmQyNDYzOGRkY2M4MmNlNDdiZTVlNDBiZTU1MGY0NTA3IHJlZnMvdGFncy92MS4wcmM0Xnt9CisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdXNpbmcgLS1oYXNoIChhbmQgbm90IC0tZGVyZWZlcmVuY2UpIHRoZSBvdXRwdXQgZm9ybWF0IGlzOiAnPFNIQS0xIElEPicKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctcmVmIC0taGVhZHMgLS1oYXNoCisyZTNiYTAxMTRhMWY1MmI0N2RmMjk3NDNkNjkxNWQwNTZiZTEzMjc4CisxODUwMDhhZTk3OTYwYzhkNTUxYWRjZDllMjM1NjUxOTQ2NTFiNWQxCiswM2FkZjQyYzk4ODE5NWI1MGUxYTE5MzViYTVmY2JjMzliMmIwMjliCisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitUbyBzaG93IGFsbCByZWZlcmVuY2VzIGNhbGxlZCAibWFzdGVyIiwgd2hldGhlciB0YWdzIG9yIGhlYWRzIG9yIGFueXRoaW5nCitlbHNlLCBhbmQgcmVnYXJkbGVzcyBvZiBob3cgZGVlcCBpbiB0aGUgcmVmZXJlbmNlIG5hbWluZyBoaWVyYXJjaHkgdGhleSBhcmUsCit1c2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJZ2l0IHNob3ctcmVmIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIHNob3cgInJlZnMvaGVhZHMvbWFzdGVyIiBidXQgYWxzbyAicmVmcy9yZW1vdGUvb3RoZXItcmVwby9tYXN0ZXIiLAoraWYgc3VjaCByZWZlcmVuY2VzIGV4aXN0cy4KKworV2hlbiB1c2luZyB0aGUgYC0tdmVyaWZ5YCBmbGFnLCB0aGUgY29tbWFuZCByZXF1aXJlcyBhbiBleGFjdCBwYXRoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWdpdCBzaG93LXJlZiAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCBvbmx5IG1hdGNoIHRoZSBleGFjdCBicmFuY2ggY2FsbGVkICJtYXN0ZXIiLgorCitJZiBub3RoaW5nIG1hdGNoZXMsICdnaXQgc2hvdy1yZWYnIHdpbGwgcmV0dXJuIGFuIGVycm9yIGNvZGUgb2YgMSwKK2FuZCBpbiB0aGUgY2FzZSBvZiB2ZXJpZmljYXRpb24sIGl0IHdpbGwgc2hvdyBhbiBlcnJvciBtZXNzYWdlLgorCitGb3Igc2NyaXB0aW5nLCB5b3UgY2FuIGFzayBpdCB0byBiZSBxdWlldCB3aXRoIHRoZSAiLS1xdWlldCIgZmxhZywgd2hpY2gKK2FsbG93cyB5b3UgdG8gZG8gdGhpbmdzIGxpa2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlnaXQgc2hvdy1yZWYgLS1xdWlldCAtLXZlcmlmeSAtLSAicmVmcy9oZWFkcy8kaGVhZG5hbWUiIHx8CisJCWVjaG8gIiRoZWFkbmFtZSBpcyBub3QgYSB2YWxpZCBicmFuY2giCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0byBjaGVjayB3aGV0aGVyIGEgcGFydGljdWxhciBicmFuY2ggZXhpc3RzIG9yIG5vdCAobm90aWNlIGhvdyB3ZSBkb24ndAorYWN0dWFsbHkgd2FudCB0byBzaG93IGFueSByZXN1bHRzLCBhbmQgd2Ugd2FudCB0byB1c2UgdGhlIGZ1bGwgcmVmbmFtZSBmb3IgaXQKK2luIG9yZGVyIHRvIG5vdCB0cmlnZ2VyIHRoZSBwcm9ibGVtIHdpdGggYW1iaWd1b3VzIHBhcnRpYWwgbWF0Y2hlcykuCisKK1RvIHNob3cgb25seSB0YWdzLCBvciBvbmx5IHByb3BlciBicmFuY2ggaGVhZHMsIHVzZSAiLS10YWdzIiBhbmQvb3IgIi0taGVhZHMiCityZXNwZWN0aXZlbHkgKHVzaW5nIGJvdGggbWVhbnMgdGhhdCBpdCBzaG93cyB0YWdzIGFuZCBoZWFkcywgYnV0IG5vdCBvdGhlcgorcmFuZG9tIHJlZmVyZW5jZXMgdW5kZXIgdGhlIHJlZnMvIHN1YmRpcmVjdG9yeSkuCisKK1RvIGRvIGF1dG9tYXRpYyB0YWcgb2JqZWN0IGRlcmVmZXJlbmNpbmcsIHVzZSB0aGUgIi1kIiBvciAiLS1kZXJlZmVyZW5jZSIKK2ZsYWcsIHNvIHlvdSBjYW4gZG8KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlnaXQgc2hvdy1yZWYgLS10YWdzIC0tZGVyZWZlcmVuY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIGdldCBhIGxpc3Rpbmcgb2YgYWxsIHRhZ3MgdG9nZXRoZXIgd2l0aCB3aGF0IHRoZXkgZGVyZWZlcmVuY2UuCisKK0ZJTEVTCistLS0tLQorYC5naXQvcmVmcy8qYCwgYC5naXQvcGFja2VkLXJlZnNgCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtZm9yLWVhY2gtcmVmWzFdLAorbGlua2dpdDpnaXQtbHMtcmVtb3RlWzFdLAorbGlua2dpdDpnaXQtdXBkYXRlLXJlZlsxXSwKK2xpbmtnaXQ6Z2l0cmVwb3NpdG9yeS1sYXlvdXRbNV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3cudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZjUyOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LnR4dApAQCAtMCwwICsxLDg3IEBACitnaXQtc2hvdygxKQorPT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNob3cgLSBTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzaG93JyBbPG9wdGlvbnM+XSBbPG9iamVjdD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorU2hvd3Mgb25lIG9yIG1vcmUgb2JqZWN0cyAoYmxvYnMsIHRyZWVzLCB0YWdzIGFuZCBjb21taXRzKS4KKworRm9yIGNvbW1pdHMgaXQgc2hvd3MgdGhlIGxvZyBtZXNzYWdlIGFuZCB0ZXh0dWFsIGRpZmYuIEl0IGFsc28KK3ByZXNlbnRzIHRoZSBtZXJnZSBjb21taXQgaW4gYSBzcGVjaWFsIGZvcm1hdCBhcyBwcm9kdWNlZCBieQorJ2dpdCBkaWZmLXRyZWUgLS1jYycuCisKK0ZvciB0YWdzLCBpdCBzaG93cyB0aGUgdGFnIG1lc3NhZ2UgYW5kIHRoZSByZWZlcmVuY2VkIG9iamVjdHMuCisKK0ZvciB0cmVlcywgaXQgc2hvd3MgdGhlIG5hbWVzIChlcXVpdmFsZW50IHRvICdnaXQgbHMtdHJlZScKK3dpdGggLS1uYW1lLW9ubHkpLgorCitGb3IgcGxhaW4gYmxvYnMsIGl0IHNob3dzIHRoZSBwbGFpbiBjb250ZW50cy4KKworVGhlIGNvbW1hbmQgdGFrZXMgb3B0aW9ucyBhcHBsaWNhYmxlIHRvIHRoZSAnZ2l0IGRpZmYtdHJlZScgY29tbWFuZCB0bworY29udHJvbCBob3cgdGhlIGNoYW5nZXMgdGhlIGNvbW1pdCBpbnRyb2R1Y2VzIGFyZSBzaG93bi4KKworVGhpcyBtYW51YWwgcGFnZSBkZXNjcmliZXMgb25seSB0aGUgbW9zdCBmcmVxdWVudGx5IHVzZWQgb3B0aW9ucy4KKworCitPUFRJT05TCistLS0tLS0tCis8b2JqZWN0Pi4uLjo6CisJVGhlIG5hbWVzIG9mIG9iamVjdHMgdG8gc2hvdyAoZGVmYXVsdHMgdG8gJ0hFQUQnKS4KKwlGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2Ygd2F5cyB0byBzcGVsbCBvYmplY3QgbmFtZXMsIHNlZQorCSJTUEVDSUZZSU5HIFJFVklTSU9OUyIgc2VjdGlvbiBpbiBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XS4KKworaW5jbHVkZTo6cHJldHR5LW9wdGlvbnMudHh0W10KKworCitpbmNsdWRlOjpwcmV0dHktZm9ybWF0cy50eHRbXQorCisKK0NPTU1PTiBESUZGIE9QVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworOmdpdC1sb2c6IDEKK2luY2x1ZGU6OmRpZmYtb3B0aW9ucy50eHRbXQorCitpbmNsdWRlOjpkaWZmLWdlbmVyYXRlLXBhdGNoLnR4dFtdCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK2BnaXQgc2hvdyB2MS4wLjBgOjoKKwlTaG93cyB0aGUgdGFnIGB2MS4wLjBgLCBhbG9uZyB3aXRoIHRoZSBvYmplY3QgdGhlIHRhZ3MKKwlwb2ludHMgYXQuCisKK2BnaXQgc2hvdyB2MS4wLjBee3RyZWV9YDo6CisJU2hvd3MgdGhlIHRyZWUgcG9pbnRlZCB0byBieSB0aGUgdGFnIGB2MS4wLjBgLgorCitgZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JXMgdjEuMC4wXntjb21taXR9YDo6CisJU2hvd3MgdGhlIHN1YmplY3Qgb2YgdGhlIGNvbW1pdCBwb2ludGVkIHRvIGJ5IHRoZQorCXRhZyBgdjEuMC4wYC4KKworYGdpdCBzaG93IG5leHR+MTA6RG9jdW1lbnRhdGlvbi9SRUFETUVgOjoKKwlTaG93cyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYERvY3VtZW50YXRpb24vUkVBRE1FYCBhcworCXRoZXkgd2VyZSBjdXJyZW50IGluIHRoZSAxMHRoIGxhc3QgY29tbWl0IG9mIHRoZSBicmFuY2gKKwlgbmV4dGAuCisKK2BnaXQgc2hvdyBtYXN0ZXI6TWFrZWZpbGUgbWFzdGVyOnQvTWFrZWZpbGVgOjoKKwlDb25jYXRlbmF0ZXMgdGhlIGNvbnRlbnRzIG9mIHNhaWQgTWFrZWZpbGVzIGluIHRoZSBoZWFkCisJb2YgdGhlIGJyYW5jaCBgbWFzdGVyYC4KKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorCitpbmNsdWRlOjppMThuLnR4dFtdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3BhcnNlLWNoZWNrb3V0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNwYXJzZS1jaGVja291dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzYWNlNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNwYXJzZS1jaGVja291dC50eHQKQEAgLTAsMCArMSwyMTcgQEAKK2dpdC1zcGFyc2UtY2hlY2tvdXQoMSkKKz09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNwYXJzZS1jaGVja291dCAtIEluaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3BhcnNlLWNoZWNrb3V0Citjb25maWd1cmF0aW9uLCB3aGljaCByZWR1Y2VzIHRoZSBjaGVja291dCB0byBhIHNldCBvZiBwYXRocworZ2l2ZW4gYnkgYSBsaXN0IG9mIHBhdHRlcm5zLgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzcGFyc2UtY2hlY2tvdXQgPHN1YmNvbW1hbmQ+IFtvcHRpb25zXScKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworSW5pdGlhbGl6ZSBhbmQgbW9kaWZ5IHRoZSBzcGFyc2UtY2hlY2tvdXQgY29uZmlndXJhdGlvbiwgd2hpY2ggcmVkdWNlcwordGhlIGNoZWNrb3V0IHRvIGEgc2V0IG9mIHBhdGhzIGdpdmVuIGJ5IGEgbGlzdCBvZiBwYXR0ZXJucy4KKworVEhJUyBDT01NQU5EIElTIEVYUEVSSU1FTlRBTC4gSVRTIEJFSEFWSU9SLCBBTkQgVEhFIEJFSEFWSU9SIE9GIE9USEVSCitDT01NQU5EUyBJTiBUSEUgUFJFU0VOQ0UgT0YgU1BBUlNFLUNIRUNLT1VUUywgV0lMTCBMSUtFTFkgQ0hBTkdFIElOCitUSEUgRlVUVVJFLgorCisKK0NPTU1BTkRTCistLS0tLS0tLQorJ2xpc3QnOjoKKwlEZXNjcmliZSB0aGUgcGF0dGVybnMgaW4gdGhlIHNwYXJzZS1jaGVja291dCBmaWxlLgorCisnaW5pdCc6OgorCUVuYWJsZSB0aGUgYGNvcmUuc3BhcnNlQ2hlY2tvdXRgIHNldHRpbmcuIElmIHRoZQorCXNwYXJzZS1jaGVja291dCBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGVuIHBvcHVsYXRlIGl0IHdpdGgKKwlwYXR0ZXJucyB0aGF0IG1hdGNoIGV2ZXJ5IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IGFuZAorCW5vIG90aGVyIGRpcmVjdG9yaWVzLCB0aGVuIHdpbGwgcmVtb3ZlIGFsbCBkaXJlY3RvcmllcyB0cmFja2VkCisJYnkgR2l0LiBBZGQgcGF0dGVybnMgdG8gdGhlIHNwYXJzZS1jaGVja291dCBmaWxlIHRvCisJcmVwb3B1bGF0ZSB0aGUgd29ya2luZyBkaXJlY3RvcnkuCisrCitUbyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIHdvcmt0cmVlcywgaXQgZmlyc3QgZW5hYmxlcyB0aGUKK2BleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnYCBzZXR0aW5nIGFuZCBtYWtlcyBzdXJlIHRvIHNldCB0aGUKK2Bjb3JlLnNwYXJzZUNoZWNrb3V0YCBzZXR0aW5nIGluIHRoZSB3b3JrdHJlZS1zcGVjaWZpYyBjb25maWcgZmlsZS4KKysKK1doZW4gYC0tY29uZWAgaXMgcHJvdmlkZWQsIHRoZSBgY29yZS5zcGFyc2VDaGVja291dENvbmVgIHNldHRpbmcgaXMKK2Fsc28gc2V0LCBhbGxvd2luZyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggYSBsaW1pdGVkIHNldCBvZgorcGF0dGVybnMgKHNlZSAnQ09ORSBQQVRURVJOIFNFVCcgYmVsb3cpLgorCisnc2V0Jzo6CisJV3JpdGUgYSBzZXQgb2YgcGF0dGVybnMgdG8gdGhlIHNwYXJzZS1jaGVja291dCBmaWxlLCBhcyBnaXZlbiBhcworCWEgbGlzdCBvZiBhcmd1bWVudHMgZm9sbG93aW5nIHRoZSAnc2V0JyBzdWJjb21tYW5kLiBVcGRhdGUgdGhlCisJd29ya2luZyBkaXJlY3RvcnkgdG8gbWF0Y2ggdGhlIG5ldyBwYXR0ZXJucy4gRW5hYmxlIHRoZQorCWNvcmUuc3BhcnNlQ2hlY2tvdXQgY29uZmlnIHNldHRpbmcgaWYgaXQgaXMgbm90IGFscmVhZHkgZW5hYmxlZC4KKysKK1doZW4gdGhlIGAtLXN0ZGluYCBvcHRpb24gaXMgcHJvdmlkZWQsIHRoZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tCitzdGFuZGFyZCBpbiBhcyBhIG5ld2xpbmUtZGVsaW1pdGVkIGxpc3QgaW5zdGVhZCBvZiBmcm9tIHRoZSBhcmd1bWVudHMuCisrCitXaGVuIGBjb3JlLnNwYXJzZUNoZWNrb3V0Q29uZWAgaXMgZW5hYmxlZCwgdGhlIGlucHV0IGxpc3QgaXMgY29uc2lkZXJlZCBhCitsaXN0IG9mIGRpcmVjdG9yaWVzIGluc3RlYWQgb2Ygc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zLiBUaGUgY29tbWFuZCB3cml0ZXMKK3BhdHRlcm5zIHRvIHRoZSBzcGFyc2UtY2hlY2tvdXQgZmlsZSB0byBpbmNsdWRlIGFsbCBmaWxlcyBjb250YWluZWQgaW4gdGhvc2UKK2RpcmVjdG9yaWVzIChyZWN1cnNpdmVseSkgYXMgd2VsbCBhcyBmaWxlcyB0aGF0IGFyZSBzaWJsaW5ncyBvZiBhbmNlc3RvcgorZGlyZWN0b3JpZXMuIFRoZSBpbnB1dCBmb3JtYXQgbWF0Y2hlcyB0aGUgb3V0cHV0IG9mIGBnaXQgbHMtdHJlZSAtLW5hbWUtb25seWAuCitUaGlzIGluY2x1ZGVzIGludGVycHJldGluZyBwYXRobmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG91YmxlIHF1b3RlICgiKSBhcworQy1zdHlsZSBxdW90ZWQgc3RyaW5ncy4KKworJ2FkZCc6OgorCVVwZGF0ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIHBhdHRlcm5zLgorCUJ5IGRlZmF1bHQsIHRoZXNlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsCisJYnV0IHRoZXkgY2FuIGJlIHJlYWQgZnJvbSBzdGRpbiB1c2luZyB0aGUgYC0tc3RkaW5gIG9wdGlvbi4gV2hlbgorCWBjb3JlLnNwYXJzZUNoZWNrb3V0Q29uZWAgaXMgZW5hYmxlZCwgdGhlIGdpdmVuIHBhdHRlcm5zIGFyZSBpbnRlcnByZXRlZAorCWFzIGRpcmVjdG9yeSBuYW1lcyBhcyBpbiB0aGUgJ3NldCcgc3ViY29tbWFuZC4KKworJ3JlYXBwbHk6OgorCVJlYXBwbHkgdGhlIHNwYXJzaXR5IHBhdHRlcm4gcnVsZXMgdG8gcGF0aHMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKwlDb21tYW5kcyBsaWtlIG1lcmdlIG9yIHJlYmFzZSBjYW4gbWF0ZXJpYWxpemUgcGF0aHMgdG8gZG8gdGhlaXIKKwl3b3JrIChlLmcuIGluIG9yZGVyIHRvIHNob3cgeW91IGEgY29uZmxpY3QpLCBhbmQgb3RoZXIKKwlzcGFyc2UtY2hlY2tvdXQgY29tbWFuZHMgbWlnaHQgZmFpbCB0byBzcGFyc2lmeSBhbiBpbmRpdmlkdWFsIGZpbGUKKwkoZS5nLiBiZWNhdXNlIGl0IGhhcyB1bnN0YWdlZCBjaGFuZ2VzIG9yIGNvbmZsaWN0cykuICBJbiBzdWNoCisJY2FzZXMsIGl0IGNhbiBtYWtlIHNlbnNlIHRvIHJ1biBgZ2l0IHNwYXJzZS1jaGVja291dCByZWFwcGx5YCBsYXRlcgorCWFmdGVyIGNsZWFuaW5nIHVwIGFmZmVjdGVkIHBhdGhzIChlLmcuIHJlc29sdmluZyBjb25mbGljdHMsIHVuZG9pbmcKKwlvciBjb21taXR0aW5nIGNoYW5nZXMsIGV0Yy4pLgorCisnZGlzYWJsZSc6OgorCURpc2FibGUgdGhlIGBjb3JlLnNwYXJzZUNoZWNrb3V0YCBjb25maWcgc2V0dGluZywgYW5kIHJlc3RvcmUgdGhlCisJd29ya2luZyBkaXJlY3RvcnkgdG8gaW5jbHVkZSBhbGwgZmlsZXMuIExlYXZlcyB0aGUgc3BhcnNlLWNoZWNrb3V0CisJZmlsZSBpbnRhY3Qgc28gYSBsYXRlciAnZ2l0IHNwYXJzZS1jaGVja291dCBpbml0JyBjb21tYW5kIG1heQorCXJldHVybiB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIHNhbWUgc3RhdGUuCisKK1NQQVJTRSBDSEVDS09VVAorLS0tLS0tLS0tLS0tLS0tCisKKyJTcGFyc2UgY2hlY2tvdXQiIGFsbG93cyBwb3B1bGF0aW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBzcGFyc2VseS4KK0l0IHVzZXMgdGhlIHNraXAtd29ya3RyZWUgYml0IChzZWUgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdKSB0byB0ZWxsCitHaXQgd2hldGhlciBhIGZpbGUgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIHdvcnRoIGxvb2tpbmcgYXQuIElmCit0aGUgc2tpcC13b3JrdHJlZSBiaXQgaXMgc2V0LCB0aGVuIHRoZSBmaWxlIGlzIGlnbm9yZWQgaW4gdGhlIHdvcmtpbmcKK2RpcmVjdG9yeS4gR2l0IHdpbGwgbm90IHBvcHVsYXRlIHRoZSBjb250ZW50cyBvZiB0aG9zZSBmaWxlcywgd2hpY2gKK21ha2VzIGEgc3BhcnNlIGNoZWNrb3V0IGhlbHBmdWwgd2hlbiB3b3JraW5nIGluIGEgcmVwb3NpdG9yeSB3aXRoIG1hbnkKK2ZpbGVzLCBidXQgb25seSBhIGZldyBhcmUgaW1wb3J0YW50IHRvIHRoZSBjdXJyZW50IHVzZXIuCisKK1RoZSBgJEdJVF9ESVIvaW5mby9zcGFyc2UtY2hlY2tvdXRgIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlCitza2lwLXdvcmt0cmVlIHJlZmVyZW5jZSBiaXRtYXAuIFdoZW4gR2l0IHVwZGF0ZXMgdGhlIHdvcmtpbmcKK2RpcmVjdG9yeSwgaXQgdXBkYXRlcyB0aGUgc2tpcC13b3JrdHJlZSBiaXRzIGluIHRoZSBpbmRleCBiYXNlZAorb24gdGhpcyBmaWxlLiBUaGUgZmlsZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm5zIGluIHRoZSBmaWxlIHdpbGwKK2FwcGVhciBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnksIGFuZCB0aGUgcmVzdCB3aWxsIG5vdC4KKworVG8gZW5hYmxlIHRoZSBzcGFyc2UtY2hlY2tvdXQgZmVhdHVyZSwgcnVuIGBnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXRgIHRvCitpbml0aWFsaXplIGEgc2ltcGxlIHNwYXJzZS1jaGVja291dCBmaWxlIGFuZCBlbmFibGUgdGhlIGBjb3JlLnNwYXJzZUNoZWNrb3V0YAorY29uZmlnIHNldHRpbmcuIFRoZW4sIHJ1biBgZ2l0IHNwYXJzZS1jaGVja291dCBzZXRgIHRvIG1vZGlmeSB0aGUgcGF0dGVybnMgaW4KK3RoZSBzcGFyc2UtY2hlY2tvdXQgZmlsZS4KKworVG8gcmVwb3B1bGF0ZSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2l0aCBhbGwgZmlsZXMsIHVzZSB0aGUKK2BnaXQgc3BhcnNlLWNoZWNrb3V0IGRpc2FibGVgIGNvbW1hbmQuCisKKworRlVMTCBQQVRURVJOIFNFVAorLS0tLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0LCB0aGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgdXNlcyB0aGUgc2FtZSBzeW50YXggYXMgYC5naXRpZ25vcmVgCitmaWxlcy4KKworV2hpbGUgYCRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0YCBpcyB1c3VhbGx5IHVzZWQgdG8gc3BlY2lmeSB3aGF0CitmaWxlcyBhcmUgaW5jbHVkZWQsIHlvdSBjYW4gYWxzbyBzcGVjaWZ5IHdoYXQgZmlsZXMgYXJlIF9ub3RfIGluY2x1ZGVkLAordXNpbmcgbmVnYXRpdmUgcGF0dGVybnMuIEZvciBleGFtcGxlLCB0byByZW1vdmUgdGhlIGZpbGUgYHVud2FudGVkYDoKKworLS0tLS0tLS0tLS0tLS0tLQorLyoKKyF1bndhbnRlZAorLS0tLS0tLS0tLS0tLS0tLQorCisKK0NPTkUgUEFUVEVSTiBTRVQKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZ1bGwgcGF0dGVybiBzZXQgYWxsb3dzIGZvciBhcmJpdHJhcnkgcGF0dGVybiBtYXRjaGVzIGFuZCBjb21wbGljYXRlZAoraW5jbHVzaW9uL2V4Y2x1c2lvbiBydWxlcy4gVGhlc2UgY2FuIHJlc3VsdCBpbiBPKE4qTSkgcGF0dGVybiBtYXRjaGVzIHdoZW4KK3VwZGF0aW5nIHRoZSBpbmRleCwgd2hlcmUgTiBpcyB0aGUgbnVtYmVyIG9mIHBhdHRlcm5zIGFuZCBNIGlzIHRoZSBudW1iZXIKK29mIHBhdGhzIGluIHRoZSBpbmRleC4gVG8gY29tYmF0IHRoaXMgcGVyZm9ybWFuY2UgaXNzdWUsIGEgbW9yZSByZXN0cmljdGVkCitwYXR0ZXJuIHNldCBpcyBhbGxvd2VkIHdoZW4gYGNvcmUuc3BhcnNlQ2hlY2tvdXRDb25lYCBpcyBlbmFibGVkLgorCitUaGUgYWNjZXB0ZWQgcGF0dGVybnMgaW4gdGhlIGNvbmUgcGF0dGVybiBzZXQgYXJlOgorCisxLiAqUmVjdXJzaXZlOiogQWxsIHBhdGhzIGluc2lkZSBhIGRpcmVjdG9yeSBhcmUgaW5jbHVkZWQuCisKKzIuICpQYXJlbnQ6KiBBbGwgZmlsZXMgaW1tZWRpYXRlbHkgaW5zaWRlIGEgZGlyZWN0b3J5IGFyZSBpbmNsdWRlZC4KKworSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIHR3byBwYXR0ZXJucywgd2UgYWxzbyBleHBlY3QgdGhhdCBhbGwgZmlsZXMgaW4gdGhlCityb290IGRpcmVjdG9yeSBhcmUgaW5jbHVkZWQuIElmIGEgcmVjdXJzaXZlIHBhdHRlcm4gaXMgYWRkZWQsIHRoZW4gYWxsCitsZWFkaW5nIGRpcmVjdG9yaWVzIGFyZSBhZGRlZCBhcyBwYXJlbnQgcGF0dGVybnMuCisKK0J5IGRlZmF1bHQsIHdoZW4gcnVubmluZyBgZ2l0IHNwYXJzZS1jaGVja291dCBpbml0YCwgdGhlIHJvb3QgZGlyZWN0b3J5IGlzCithZGRlZCBhcyBhIHBhcmVudCBwYXR0ZXJuLiBBdCB0aGlzIHBvaW50LCB0aGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgY29udGFpbnMKK3RoZSBmb2xsb3dpbmcgcGF0dGVybnM6CisKKy0tLS0tLS0tLS0tLS0tLS0KKy8qCishLyovCistLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc2F5cyAiaW5jbHVkZSBldmVyeXRoaW5nIGluIHJvb3QsIGJ1dCBub3RoaW5nIHR3byBsZXZlbHMgYmVsb3cgcm9vdC4iCisKK1doZW4gaW4gY29uZSBtb2RlLCB0aGUgYGdpdCBzcGFyc2UtY2hlY2tvdXQgc2V0YCBzdWJjb21tYW5kIHRha2VzIGEgbGlzdCBvZgorZGlyZWN0b3JpZXMgaW5zdGVhZCBvZiBhIGxpc3Qgb2Ygc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zLiBJbiB0aGlzIG1vZGUsCit0aGUgY29tbWFuZCBgZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgQS9CL0NgIHNldHMgdGhlIGRpcmVjdG9yeSBgQS9CL0NgIGFzCithIHJlY3Vyc2l2ZSBwYXR0ZXJuLCB0aGUgZGlyZWN0b3JpZXMgYEFgIGFuZCBgQS9CYCBhcmUgYWRkZWQgYXMgcGFyZW50CitwYXR0ZXJucy4gVGhlIHJlc3VsdGluZyBzcGFyc2UtY2hlY2tvdXQgZmlsZSBpcyBub3cKKworLS0tLS0tLS0tLS0tLS0tLQorLyoKKyEvKi8KKy9BLworIS9BLyovCisvQS9CLworIS9BL0IvKi8KKy9BL0IvQy8KKy0tLS0tLS0tLS0tLS0tLS0KKworSGVyZSwgb3JkZXIgbWF0dGVycywgc28gdGhlIG5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBvdmVycmlkZGVuIGJ5IHRoZSBwb3NpdGl2ZQorcGF0dGVybnMgdGhhdCBhcHBlYXIgbG93ZXIgaW4gdGhlIGZpbGUuCisKK0lmIGBjb3JlLnNwYXJzZUNoZWNrb3V0Q29uZT10cnVlYCwgdGhlbiBHaXQgd2lsbCBwYXJzZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUKK2V4cGVjdGluZyBwYXR0ZXJucyBvZiB0aGVzZSB0eXBlcy4gR2l0IHdpbGwgd2FybiBpZiB0aGUgcGF0dGVybnMgZG8gbm90IG1hdGNoLgorSWYgdGhlIHBhdHRlcm5zIGRvIG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQsIHRoZW4gR2l0IHdpbGwgdXNlIGZhc3RlciBoYXNoLQorYmFzZWQgYWxnb3JpdGhtcyB0byBjb21wdXRlIGluY2x1c2lvbiBpbiB0aGUgc3BhcnNlLWNoZWNrb3V0LgorCitJbiB0aGUgY29uZSBtb2RlIGNhc2UsIHRoZSBgZ2l0IHNwYXJzZS1jaGVja291dCBsaXN0YCBzdWJjb21tYW5kIHdpbGwgbGlzdCB0aGUKK2RpcmVjdG9yaWVzIHRoYXQgZGVmaW5lIHRoZSByZWN1cnNpdmUgcGF0dGVybnMuIEZvciB0aGUgZXhhbXBsZSBzcGFyc2UtY2hlY2tvdXQKK2ZpbGUgYWJvdmUsIHRoZSBvdXRwdXQgaXMgYXMgZm9sbG93czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNwYXJzZS1jaGVja291dCBsaXN0CitBL0IvQworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgYGNvcmUuaWdub3JlQ2FzZT10cnVlYCwgdGhlbiB0aGUgcGF0dGVybi1tYXRjaGluZyBhbGdvcml0aG0gd2lsbCB1c2UgYQorY2FzZS1pbnNlbnNpdGl2ZSBjaGVjay4gVGhpcyBjb3JyZWN0cyBmb3IgY2FzZSBtaXNtYXRjaGVkIGZpbGVuYW1lcyBpbiB0aGUKKydnaXQgc3BhcnNlLWNoZWNrb3V0IHNldCcgY29tbWFuZCB0byByZWZsZWN0IHRoZSBleHBlY3RlZCBjb25lIGluIHRoZSB3b3JraW5nCitkaXJlY3RvcnkuCisKKworU1VCTU9EVUxFUworLS0tLS0tLS0tLQorCitJZiB5b3VyIHJlcG9zaXRvcnkgY29udGFpbnMgb25lIG9yIG1vcmUgc3VibW9kdWxlcywgdGhlbiB0aG9zZSBzdWJtb2R1bGVzIHdpbGwKK2FwcGVhciBiYXNlZCBvbiB3aGljaCB5b3UgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYGdpdCBzdWJtb2R1bGVgIGNvbW1hbmQuIElmCit5b3VyIHNwYXJzZS1jaGVja291dCBwYXR0ZXJucyBleGNsdWRlIGFuIGluaXRpYWxpemVkIHN1Ym1vZHVsZSwgdGhlbiB0aGF0CitzdWJtb2R1bGUgd2lsbCBzdGlsbCBhcHBlYXIgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeS4KKworCitTRUUgQUxTTworLS0tLS0tLS0KKworbGlua2dpdDpnaXQtcmVhZC10cmVlWzFdCitsaW5rZ2l0OmdpdGlnbm9yZVs1XQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN0YWdlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YWdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWJjZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3RhZ2UudHh0CkBAIC0wLDAgKzEsMjMgQEAKK2dpdC1zdGFnZSgxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zdGFnZSAtIEFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBzdGFnaW5nIGFyZWEKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc3RhZ2UnIGFyZ3MuLi4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBpcyBhIHN5bm9ueW0gZm9yIGxpbmtnaXQ6Z2l0LWFkZFsxXS4gIFBsZWFzZSByZWZlciB0byB0aGUKK2RvY3VtZW50YXRpb24gb2YgdGhhdCBjb21tYW5kLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN0YXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YXNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWYxYmViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3Rhc2gudHh0CkBAIC0wLDAgKzEsMzU4IEBACitnaXQtc3Rhc2goMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc3Rhc2ggLSBTdGFzaCB0aGUgY2hhbmdlcyBpbiBhIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGF3YXkKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHN0YXNoJyBsaXN0IFs8b3B0aW9ucz5dCisnZ2l0IHN0YXNoJyBzaG93IFs8b3B0aW9ucz5dIFs8c3Rhc2g+XQorJ2dpdCBzdGFzaCcgZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dCisnZ2l0IHN0YXNoJyAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0KKydnaXQgc3Rhc2gnIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dCisnZ2l0IHN0YXNoJyBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF0KKwkgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XQorCSAgICAgWy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPiBbLS1wYXRoc3BlYy1maWxlLW51bF1dCisJICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0KKydnaXQgc3Rhc2gnIGNsZWFyCisnZ2l0IHN0YXNoJyBjcmVhdGUgWzxtZXNzYWdlPl0KKydnaXQgc3Rhc2gnIHN0b3JlIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XSBbLXF8LS1xdWlldF0gPGNvbW1pdD4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1VzZSBgZ2l0IHN0YXNoYCB3aGVuIHlvdSB3YW50IHRvIHJlY29yZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUKK3dvcmtpbmcgZGlyZWN0b3J5IGFuZCB0aGUgaW5kZXgsIGJ1dCB3YW50IHRvIGdvIGJhY2sgdG8gYSBjbGVhbgord29ya2luZyBkaXJlY3RvcnkuICBUaGUgY29tbWFuZCBzYXZlcyB5b3VyIGxvY2FsIG1vZGlmaWNhdGlvbnMgYXdheQorYW5kIHJldmVydHMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIG1hdGNoIHRoZSBgSEVBRGAgY29tbWl0LgorCitUaGUgbW9kaWZpY2F0aW9ucyBzdGFzaGVkIGF3YXkgYnkgdGhpcyBjb21tYW5kIGNhbiBiZSBsaXN0ZWQgd2l0aAorYGdpdCBzdGFzaCBsaXN0YCwgaW5zcGVjdGVkIHdpdGggYGdpdCBzdGFzaCBzaG93YCwgYW5kIHJlc3RvcmVkCisocG90ZW50aWFsbHkgb24gdG9wIG9mIGEgZGlmZmVyZW50IGNvbW1pdCkgd2l0aCBgZ2l0IHN0YXNoIGFwcGx5YC4KK0NhbGxpbmcgYGdpdCBzdGFzaGAgd2l0aG91dCBhbnkgYXJndW1lbnRzIGlzIGVxdWl2YWxlbnQgdG8gYGdpdCBzdGFzaCBwdXNoYC4KK0Egc3Rhc2ggaXMgYnkgZGVmYXVsdCBsaXN0ZWQgYXMgIldJUCBvbiAnYnJhbmNobmFtZScgLi4uIiwgYnV0Cit5b3UgY2FuIGdpdmUgYSBtb3JlIGRlc2NyaXB0aXZlIG1lc3NhZ2Ugb24gdGhlIGNvbW1hbmQgbGluZSB3aGVuCit5b3UgY3JlYXRlIG9uZS4KKworVGhlIGxhdGVzdCBzdGFzaCB5b3UgY3JlYXRlZCBpcyBzdG9yZWQgaW4gYHJlZnMvc3Rhc2hgOyBvbGRlcgorc3Rhc2hlcyBhcmUgZm91bmQgaW4gdGhlIHJlZmxvZyBvZiB0aGlzIHJlZmVyZW5jZSBhbmQgY2FuIGJlIG5hbWVkIHVzaW5nCit0aGUgdXN1YWwgcmVmbG9nIHN5bnRheCAoZS5nLiBgc3Rhc2hAezB9YCBpcyB0aGUgbW9zdCByZWNlbnRseQorY3JlYXRlZCBzdGFzaCwgYHN0YXNoQHsxfWAgaXMgdGhlIG9uZSBiZWZvcmUgaXQsIGBzdGFzaEB7Mi5ob3Vycy5hZ299YAoraXMgYWxzbyBwb3NzaWJsZSkuIFN0YXNoZXMgbWF5IGFsc28gYmUgcmVmZXJlbmNlZCBieSBzcGVjaWZ5aW5nIGp1c3QgdGhlCitzdGFzaCBpbmRleCAoZS5nLiB0aGUgaW50ZWdlciBgbmAgaXMgZXF1aXZhbGVudCB0byBgc3Rhc2hAe259YCkuCisKK0NPTU1BTkRTCistLS0tLS0tLQorCitwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstcXwtLXF1aWV0XSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPiBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFstLV0gWzxwYXRoc3BlYz4uLi5dOjoKKworCVNhdmUgeW91ciBsb2NhbCBtb2RpZmljYXRpb25zIHRvIGEgbmV3ICdzdGFzaCBlbnRyeScgYW5kIHJvbGwgdGhlbQorCWJhY2sgdG8gSEVBRCAoaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgaW4gdGhlIGluZGV4KS4KKwlUaGUgPG1lc3NhZ2U+IHBhcnQgaXMgb3B0aW9uYWwgYW5kIGdpdmVzCisJdGhlIGRlc2NyaXB0aW9uIGFsb25nIHdpdGggdGhlIHN0YXNoZWQgc3RhdGUuCisrCitGb3IgcXVpY2tseSBtYWtpbmcgYSBzbmFwc2hvdCwgeW91IGNhbiBvbWl0ICJwdXNoIi4gIEluIHRoaXMgbW9kZSwKK25vbi1vcHRpb24gYXJndW1lbnRzIGFyZSBub3QgYWxsb3dlZCB0byBwcmV2ZW50IGEgbWlzc3BlbGxlZAorc3ViY29tbWFuZCBmcm9tIG1ha2luZyBhbiB1bndhbnRlZCBzdGFzaCBlbnRyeS4gIFRoZSB0d28gZXhjZXB0aW9ucyB0byB0aGlzCithcmUgYHN0YXNoIC1wYCB3aGljaCBhY3RzIGFzIGFsaWFzIGZvciBgc3Rhc2ggcHVzaCAtcGAgYW5kIHBhdGhzcGVjIGVsZW1lbnRzLAord2hpY2ggYXJlIGFsbG93ZWQgYWZ0ZXIgYSBkb3VibGUgaHlwaGVuIGAtLWAgZm9yIGRpc2FtYmlndWF0aW9uLgorCitzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstcXwtLXF1aWV0XSBbPG1lc3NhZ2U+XTo6CisKKwlUaGlzIG9wdGlvbiBpcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiAnZ2l0IHN0YXNoIHB1c2gnLiAgSXQKKwlkaWZmZXJzIGZyb20gInN0YXNoIHB1c2giIGluIHRoYXQgaXQgY2Fubm90IHRha2UgcGF0aHNwZWMuCisJSW5zdGVhZCwgYWxsIG5vbi1vcHRpb24gYXJndW1lbnRzIGFyZSBjb25jYXRlbmF0ZWQgdG8gZm9ybSB0aGUgc3Rhc2gKKwltZXNzYWdlLgorCitsaXN0IFs8b3B0aW9ucz5dOjoKKworCUxpc3QgdGhlIHN0YXNoIGVudHJpZXMgdGhhdCB5b3UgY3VycmVudGx5IGhhdmUuICBFYWNoICdzdGFzaCBlbnRyeScgaXMKKwlsaXN0ZWQgd2l0aCBpdHMgbmFtZSAoZS5nLiBgc3Rhc2hAezB9YCBpcyB0aGUgbGF0ZXN0IGVudHJ5LCBgc3Rhc2hAezF9YCBpcworCXRoZSBvbmUgYmVmb3JlLCBldGMuKSwgdGhlIG5hbWUgb2YgdGhlIGJyYW5jaCB0aGF0IHdhcyBjdXJyZW50IHdoZW4gdGhlCisJZW50cnkgd2FzIG1hZGUsIGFuZCBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBjb21taXQgdGhlIGVudHJ5IHdhcworCWJhc2VkIG9uLgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3Rhc2hAezB9OiBXSVAgb24gc3VibWl0OiA2ZWJkMGUyLi4uIFVwZGF0ZSBnaXQtc3Rhc2ggZG9jdW1lbnRhdGlvbgorc3Rhc2hAezF9OiBPbiBtYXN0ZXI6IDljYzA1ODkuLi4gQWRkIGdpdC1zdGFzaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhlIGNvbW1hbmQgdGFrZXMgb3B0aW9ucyBhcHBsaWNhYmxlIHRvIHRoZSAnZ2l0IGxvZycKK2NvbW1hbmQgdG8gY29udHJvbCB3aGF0IGlzIHNob3duIGFuZCBob3cuIFNlZSBsaW5rZ2l0OmdpdC1sb2dbMV0uCisKK3Nob3cgWzxvcHRpb25zPl0gWzxzdGFzaD5dOjoKKworCVNob3cgdGhlIGNoYW5nZXMgcmVjb3JkZWQgaW4gdGhlIHN0YXNoIGVudHJ5IGFzIGEgZGlmZiBiZXR3ZWVuIHRoZQorCXN0YXNoZWQgY29udGVudHMgYW5kIHRoZSBjb21taXQgYmFjayB3aGVuIHRoZSBzdGFzaCBlbnRyeSB3YXMgZmlyc3QKKwljcmVhdGVkLgorCUJ5IGRlZmF1bHQsIHRoZSBjb21tYW5kIHNob3dzIHRoZSBkaWZmc3RhdCwgYnV0IGl0IHdpbGwgYWNjZXB0IGFueQorCWZvcm1hdCBrbm93biB0byAnZ2l0IGRpZmYnIChlLmcuLCBgZ2l0IHN0YXNoIHNob3cgLXAgc3Rhc2hAezF9YAorCXRvIHZpZXcgdGhlIHNlY29uZCBtb3N0IHJlY2VudCBlbnRyeSBpbiBwYXRjaCBmb3JtKS4KKwlZb3UgY2FuIHVzZSBzdGFzaC5zaG93U3RhdCBhbmQvb3Igc3Rhc2guc2hvd1BhdGNoIGNvbmZpZyB2YXJpYWJsZXMKKwl0byBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisKK3BvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XTo6CisKKwlSZW1vdmUgYSBzaW5nbGUgc3Rhc2hlZCBzdGF0ZSBmcm9tIHRoZSBzdGFzaCBsaXN0IGFuZCBhcHBseSBpdAorCW9uIHRvcCBvZiB0aGUgY3VycmVudCB3b3JraW5nIHRyZWUgc3RhdGUsIGkuZS4sIGRvIHRoZSBpbnZlcnNlCisJb3BlcmF0aW9uIG9mIGBnaXQgc3Rhc2ggcHVzaGAuIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBtdXN0CisJbWF0Y2ggdGhlIGluZGV4LgorKworQXBwbHlpbmcgdGhlIHN0YXRlIGNhbiBmYWlsIHdpdGggY29uZmxpY3RzOyBpbiB0aGlzIGNhc2UsIGl0IGlzIG5vdAorcmVtb3ZlZCBmcm9tIHRoZSBzdGFzaCBsaXN0LiBZb3UgbmVlZCB0byByZXNvbHZlIHRoZSBjb25mbGljdHMgYnkgaGFuZAorYW5kIGNhbGwgYGdpdCBzdGFzaCBkcm9wYCBtYW51YWxseSBhZnRlcndhcmRzLgorCithcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XTo6CisKKwlMaWtlIGBwb3BgLCBidXQgZG8gbm90IHJlbW92ZSB0aGUgc3RhdGUgZnJvbSB0aGUgc3Rhc2ggbGlzdC4gVW5saWtlIGBwb3BgLAorCWA8c3Rhc2g+YCBtYXkgYmUgYW55IGNvbW1pdCB0aGF0IGxvb2tzIGxpa2UgYSBjb21taXQgY3JlYXRlZCBieQorCWBzdGFzaCBwdXNoYCBvciBgc3Rhc2ggY3JlYXRlYC4KKworYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl06OgorCisJQ3JlYXRlcyBhbmQgY2hlY2tzIG91dCBhIG5ldyBicmFuY2ggbmFtZWQgYDxicmFuY2huYW1lPmAgc3RhcnRpbmcgZnJvbQorCXRoZSBjb21taXQgYXQgd2hpY2ggdGhlIGA8c3Rhc2g+YCB3YXMgb3JpZ2luYWxseSBjcmVhdGVkLCBhcHBsaWVzIHRoZQorCWNoYW5nZXMgcmVjb3JkZWQgaW4gYDxzdGFzaD5gIHRvIHRoZSBuZXcgd29ya2luZyB0cmVlIGFuZCBpbmRleC4KKwlJZiB0aGF0IHN1Y2NlZWRzLCBhbmQgYDxzdGFzaD5gIGlzIGEgcmVmZXJlbmNlIG9mIHRoZSBmb3JtCisJYHN0YXNoQHs8cmV2aXNpb24+fWAsIGl0IHRoZW4gZHJvcHMgdGhlIGA8c3Rhc2g+YC4KKysKK1RoaXMgaXMgdXNlZnVsIGlmIHRoZSBicmFuY2ggb24gd2hpY2ggeW91IHJhbiBgZ2l0IHN0YXNoIHB1c2hgIGhhcworY2hhbmdlZCBlbm91Z2ggdGhhdCBgZ2l0IHN0YXNoIGFwcGx5YCBmYWlscyBkdWUgdG8gY29uZmxpY3RzLiBTaW5jZQordGhlIHN0YXNoIGVudHJ5IGlzIGFwcGxpZWQgb24gdG9wIG9mIHRoZSBjb21taXQgdGhhdCB3YXMgSEVBRCBhdCB0aGUKK3RpbWUgYGdpdCBzdGFzaGAgd2FzIHJ1biwgaXQgcmVzdG9yZXMgdGhlIG9yaWdpbmFsbHkgc3Rhc2hlZCBzdGF0ZQord2l0aCBubyBjb25mbGljdHMuCisKK2NsZWFyOjoKKwlSZW1vdmUgYWxsIHRoZSBzdGFzaCBlbnRyaWVzLiBOb3RlIHRoYXQgdGhvc2UgZW50cmllcyB3aWxsIHRoZW4KKwliZSBzdWJqZWN0IHRvIHBydW5pbmcsIGFuZCBtYXkgYmUgaW1wb3NzaWJsZSB0byByZWNvdmVyIChzZWUKKwknRXhhbXBsZXMnIGJlbG93IGZvciBhIHBvc3NpYmxlIHN0cmF0ZWd5KS4KKworZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dOjoKKworCVJlbW92ZSBhIHNpbmdsZSBzdGFzaCBlbnRyeSBmcm9tIHRoZSBsaXN0IG9mIHN0YXNoIGVudHJpZXMuCisKK2NyZWF0ZTo6CisKKwlDcmVhdGUgYSBzdGFzaCBlbnRyeSAod2hpY2ggaXMgYSByZWd1bGFyIGNvbW1pdCBvYmplY3QpIGFuZAorCXJldHVybiBpdHMgb2JqZWN0IG5hbWUsIHdpdGhvdXQgc3RvcmluZyBpdCBhbnl3aGVyZSBpbiB0aGUgcmVmCisJbmFtZXNwYWNlLgorCVRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZnVsIGZvciBzY3JpcHRzLiAgSXQgaXMgcHJvYmFibHkgbm90CisJdGhlIGNvbW1hbmQgeW91IHdhbnQgdG8gdXNlOyBzZWUgInB1c2giIGFib3ZlLgorCitzdG9yZTo6CisKKwlTdG9yZSBhIGdpdmVuIHN0YXNoIGNyZWF0ZWQgdmlhICdnaXQgc3Rhc2ggY3JlYXRlJyAod2hpY2ggaXMgYQorCWRhbmdsaW5nIG1lcmdlIGNvbW1pdCkgaW4gdGhlIHN0YXNoIHJlZiwgdXBkYXRpbmcgdGhlIHN0YXNoCisJcmVmbG9nLiAgVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VmdWwgZm9yIHNjcmlwdHMuICBJdCBpcworCXByb2JhYmx5IG5vdCB0aGUgY29tbWFuZCB5b3Ugd2FudCB0byB1c2U7IHNlZSAicHVzaCIgYWJvdmUuCisKK09QVElPTlMKKy0tLS0tLS0KKy1hOjoKKy0tYWxsOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBgcHVzaGAgYW5kIGBzYXZlYCBjb21tYW5kcy4KKysKK0FsbCBpZ25vcmVkIGFuZCB1bnRyYWNrZWQgZmlsZXMgYXJlIGFsc28gc3Rhc2hlZCBhbmQgdGhlbiBjbGVhbmVkCit1cCB3aXRoIGBnaXQgY2xlYW5gLgorCistdTo6CistLWluY2x1ZGUtdW50cmFja2VkOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBgcHVzaGAgYW5kIGBzYXZlYCBjb21tYW5kcy4KKysKK0FsbCB1bnRyYWNrZWQgZmlsZXMgYXJlIGFsc28gc3Rhc2hlZCBhbmQgdGhlbiBjbGVhbmVkIHVwIHdpdGgKK2BnaXQgY2xlYW5gLgorCistLWluZGV4OjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBgcG9wYCBhbmQgYGFwcGx5YCBjb21tYW5kcy4KKysKK1RyaWVzIHRvIHJlaW5zdGF0ZSBub3Qgb25seSB0aGUgd29ya2luZyB0cmVlJ3MgY2hhbmdlcywgYnV0IGFsc28KK3RoZSBpbmRleCdzIG9uZXMuIEhvd2V2ZXIsIHRoaXMgY2FuIGZhaWwsIHdoZW4geW91IGhhdmUgY29uZmxpY3RzCisod2hpY2ggYXJlIHN0b3JlZCBpbiB0aGUgaW5kZXgsIHdoZXJlIHlvdSB0aGVyZWZvcmUgY2FuIG5vIGxvbmdlcgorYXBwbHkgdGhlIGNoYW5nZXMgYXMgdGhleSB3ZXJlIG9yaWdpbmFsbHkpLgorCistazo6CistLWtlZXAtaW5kZXg6OgorLS1uby1rZWVwLWluZGV4OjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBgcHVzaGAgYW5kIGBzYXZlYCBjb21tYW5kcy4KKysKK0FsbCBjaGFuZ2VzIGFscmVhZHkgYWRkZWQgdG8gdGhlIGluZGV4IGFyZSBsZWZ0IGludGFjdC4KKworLXA6OgorLS1wYXRjaDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYHB1c2hgIGFuZCBgc2F2ZWAgY29tbWFuZHMuCisrCitJbnRlcmFjdGl2ZWx5IHNlbGVjdCBodW5rcyBmcm9tIHRoZSBkaWZmIGJldHdlZW4gSEVBRCBhbmQgdGhlCit3b3JraW5nIHRyZWUgdG8gYmUgc3Rhc2hlZC4gIFRoZSBzdGFzaCBlbnRyeSBpcyBjb25zdHJ1Y3RlZCBzdWNoCit0aGF0IGl0cyBpbmRleCBzdGF0ZSBpcyB0aGUgc2FtZSBhcyB0aGUgaW5kZXggc3RhdGUgb2YgeW91cgorcmVwb3NpdG9yeSwgYW5kIGl0cyB3b3JrdHJlZSBjb250YWlucyBvbmx5IHRoZSBjaGFuZ2VzIHlvdSBzZWxlY3RlZAoraW50ZXJhY3RpdmVseS4gIFRoZSBzZWxlY3RlZCBjaGFuZ2VzIGFyZSB0aGVuIHJvbGxlZCBiYWNrIGZyb20geW91cgord29ya3RyZWUuIFNlZSB0aGUgYGBJbnRlcmFjdGl2ZSBNb2RlJycgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1hZGRbMV0KK3RvIGxlYXJuIGhvdyB0byBvcGVyYXRlIHRoZSBgLS1wYXRjaGAgbW9kZS4KKysKK1RoZSBgLS1wYXRjaGAgb3B0aW9uIGltcGxpZXMgYC0ta2VlcC1pbmRleGAuICBZb3UgY2FuIHVzZQorYC0tbm8ta2VlcC1pbmRleGAgdG8gb3ZlcnJpZGUgdGhpcy4KKworLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+OjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBgcHVzaGAgY29tbWFuZC4KKysKK1BhdGhzcGVjIGlzIHBhc3NlZCBpbiBgPGZpbGU+YCBpbnN0ZWFkIG9mIGNvbW1hbmRsaW5lIGFyZ3MuIElmCitgPGZpbGU+YCBpcyBleGFjdGx5IGAtYCB0aGVuIHN0YW5kYXJkIGlucHV0IGlzIHVzZWQuIFBhdGhzcGVjCitlbGVtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IExGIG9yIENSL0xGLiBQYXRoc3BlYyBlbGVtZW50cyBjYW4gYmUKK3F1b3RlZCBhcyBleHBsYWluZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBjb3JlLnF1b3RlUGF0aGAKKyhzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gU2VlIGFsc28gYC0tcGF0aHNwZWMtZmlsZS1udWxgIGFuZAorZ2xvYmFsIGAtLWxpdGVyYWwtcGF0aHNwZWNzYC4KKworLS1wYXRoc3BlYy1maWxlLW51bDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYHB1c2hgIGNvbW1hbmQuCisrCitPbmx5IG1lYW5pbmdmdWwgd2l0aCBgLS1wYXRoc3BlYy1mcm9tLWZpbGVgLiBQYXRoc3BlYyBlbGVtZW50cyBhcmUKK3NlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIgYW5kIGFsbCBvdGhlciBjaGFyYWN0ZXJzIGFyZSB0YWtlbgorbGl0ZXJhbGx5IChpbmNsdWRpbmcgbmV3bGluZXMgYW5kIHF1b3RlcykuCisKKy1xOjoKKy0tcXVpZXQ6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGBhcHBseWAsIGBkcm9wYCwgYHBvcGAsIGBwdXNoYCwKKwlgc2F2ZWAsIGBzdG9yZWAgY29tbWFuZHMuCisrCitRdWlldCwgc3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMuCisKK1wtLTo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYHB1c2hgIGNvbW1hbmQuCisrCitTZXBhcmF0ZXMgcGF0aHNwZWMgZnJvbSBvcHRpb25zIGZvciBkaXNhbWJpZ3VhdGlvbiBwdXJwb3Nlcy4KKworPHBhdGhzcGVjPi4uLjo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYHB1c2hgIGNvbW1hbmQuCisrCitUaGUgbmV3IHN0YXNoIGVudHJ5IHJlY29yZHMgdGhlIG1vZGlmaWVkIHN0YXRlcyBvbmx5IGZvciB0aGUgZmlsZXMKK3RoYXQgbWF0Y2ggdGhlIHBhdGhzcGVjLiAgVGhlIGluZGV4IGVudHJpZXMgYW5kIHdvcmtpbmcgdHJlZSBmaWxlcworYXJlIHRoZW4gcm9sbGVkIGJhY2sgdG8gdGhlIHN0YXRlIGluIEhFQUQgb25seSBmb3IgdGhlc2UgZmlsZXMsCit0b28sIGxlYXZpbmcgZmlsZXMgdGhhdCBkbyBub3QgbWF0Y2ggdGhlIHBhdGhzcGVjIGludGFjdC4KKysKK0ZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUgJ3BhdGhzcGVjJyBlbnRyeSBpbiBsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddLgorCis8c3Rhc2g+OjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBgYXBwbHlgLCBgYnJhbmNoYCwgYGRyb3BgLCBgcG9wYCwKKwlgc2hvd2AgY29tbWFuZHMuCisrCitBIHJlZmVyZW5jZSBvZiB0aGUgZm9ybSBgc3Rhc2hAezxyZXZpc2lvbj59YC4gV2hlbiBubyBgPHN0YXNoPmAgaXMKK2dpdmVuLCB0aGUgbGF0ZXN0IHN0YXNoIGlzIGFzc3VtZWQgKHRoYXQgaXMsIGBzdGFzaEB7MH1gKS4KKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorCitBIHN0YXNoIGVudHJ5IGlzIHJlcHJlc2VudGVkIGFzIGEgY29tbWl0IHdob3NlIHRyZWUgcmVjb3JkcyB0aGUgc3RhdGUKK29mIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIGl0cyBmaXJzdCBwYXJlbnQgaXMgdGhlIGNvbW1pdCBhdCBgSEVBRGAKK3doZW4gdGhlIGVudHJ5IHdhcyBjcmVhdGVkLiAgVGhlIHRyZWUgb2YgdGhlIHNlY29uZCBwYXJlbnQgcmVjb3JkcyB0aGUKK3N0YXRlIG9mIHRoZSBpbmRleCB3aGVuIHRoZSBlbnRyeSBpcyBtYWRlLCBhbmQgaXQgaXMgbWFkZSBhIGNoaWxkIG9mCit0aGUgYEhFQURgIGNvbW1pdC4gIFRoZSBhbmNlc3RyeSBncmFwaCBsb29rcyBsaWtlIHRoaXM6CisKKyAgICAgICAgICAgIC4tLS0tVworICAgICAgICAgICAvICAgIC8KKyAgICAgLS0tLS1ILS0tLUkKKword2hlcmUgYEhgIGlzIHRoZSBgSEVBRGAgY29tbWl0LCBgSWAgaXMgYSBjb21taXQgdGhhdCByZWNvcmRzIHRoZSBzdGF0ZQorb2YgdGhlIGluZGV4LCBhbmQgYFdgIGlzIGEgY29tbWl0IHRoYXQgcmVjb3JkcyB0aGUgc3RhdGUgb2YgdGhlIHdvcmtpbmcKK3RyZWUuCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1B1bGxpbmcgaW50byBhIGRpcnR5IHRyZWU6OgorCitXaGVuIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBzb21ldGhpbmcsIHlvdSBsZWFybiB0aGF0IHRoZXJlIGFyZQordXBzdHJlYW0gY2hhbmdlcyB0aGF0IGFyZSBwb3NzaWJseSByZWxldmFudCB0byB3aGF0IHlvdSBhcmUKK2RvaW5nLiAgV2hlbiB5b3VyIGxvY2FsIGNoYW5nZXMgZG8gbm90IGNvbmZsaWN0IHdpdGggdGhlIGNoYW5nZXMgaW4KK3RoZSB1cHN0cmVhbSwgYSBzaW1wbGUgYGdpdCBwdWxsYCB3aWxsIGxldCB5b3UgbW92ZSBmb3J3YXJkLgorKworSG93ZXZlciwgdGhlcmUgYXJlIGNhc2VzIGluIHdoaWNoIHlvdXIgbG9jYWwgY2hhbmdlcyBkbyBjb25mbGljdCB3aXRoCit0aGUgdXBzdHJlYW0gY2hhbmdlcywgYW5kIGBnaXQgcHVsbGAgcmVmdXNlcyB0byBvdmVyd3JpdGUgeW91cgorY2hhbmdlcy4gIEluIHN1Y2ggYSBjYXNlLCB5b3UgY2FuIHN0YXNoIHlvdXIgY2hhbmdlcyBhd2F5LAorcGVyZm9ybSBhIHB1bGwsIGFuZCB0aGVuIHVuc3Rhc2gsIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwKKyAuLi4KK2ZpbGUgZm9vYmFyIG5vdCB1cCB0byBkYXRlLCBjYW5ub3QgbWVyZ2UuCiskIGdpdCBzdGFzaAorJCBnaXQgcHVsbAorJCBnaXQgc3Rhc2ggcG9wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ludGVycnVwdGVkIHdvcmtmbG93OjoKKworV2hlbiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2Ygc29tZXRoaW5nLCB5b3VyIGJvc3MgY29tZXMgaW4gYW5kCitkZW1hbmRzIHRoYXQgeW91IGZpeCBzb21ldGhpbmcgaW1tZWRpYXRlbHkuICBUcmFkaXRpb25hbGx5LCB5b3Ugd291bGQKK21ha2UgYSBjb21taXQgdG8gYSB0ZW1wb3JhcnkgYnJhbmNoIHRvIHN0b3JlIHlvdXIgY2hhbmdlcyBhd2F5LCBhbmQKK3JldHVybiB0byB5b3VyIG9yaWdpbmFsIGJyYW5jaCB0byBtYWtlIHRoZSBlbWVyZ2VuY3kgZml4LCBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIC4uLiBoYWNrIGhhY2sgaGFjayAuLi4KKyQgZ2l0IHN3aXRjaCAtYyBteV93aXAKKyQgZ2l0IGNvbW1pdCAtYSAtbSAiV0lQIgorJCBnaXQgc3dpdGNoIG1hc3RlcgorJCBlZGl0IGVtZXJnZW5jeSBmaXgKKyQgZ2l0IGNvbW1pdCAtYSAtbSAiRml4IGluIGEgaHVycnkiCiskIGdpdCBzd2l0Y2ggbXlfd2lwCiskIGdpdCByZXNldCAtLXNvZnQgSEVBRF4KKyMgLi4uIGNvbnRpbnVlIGhhY2tpbmcgLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitZb3UgY2FuIHVzZSAnZ2l0IHN0YXNoJyB0byBzaW1wbGlmeSB0aGUgYWJvdmUsIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgLi4uIGhhY2sgaGFjayBoYWNrIC4uLgorJCBnaXQgc3Rhc2gKKyQgZWRpdCBlbWVyZ2VuY3kgZml4CiskIGdpdCBjb21taXQgLWEgLW0gIkZpeCBpbiBhIGh1cnJ5IgorJCBnaXQgc3Rhc2ggcG9wCisjIC4uLiBjb250aW51ZSBoYWNraW5nIC4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUZXN0aW5nIHBhcnRpYWwgY29tbWl0czo6CisKK1lvdSBjYW4gdXNlIGBnaXQgc3Rhc2ggcHVzaCAtLWtlZXAtaW5kZXhgIHdoZW4geW91IHdhbnQgdG8gbWFrZSB0d28gb3IKK21vcmUgY29tbWl0cyBvdXQgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHlvdSB3YW50IHRvIHRlc3QKK2VhY2ggY2hhbmdlIGJlZm9yZSBjb21taXR0aW5nOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAuLi4gaGFjayBoYWNrIGhhY2sgLi4uCiskIGdpdCBhZGQgLS1wYXRjaCBmb28gICAgICAgICAgICAjIGFkZCBqdXN0IGZpcnN0IHBhcnQgdG8gdGhlIGluZGV4CiskIGdpdCBzdGFzaCBwdXNoIC0ta2VlcC1pbmRleCAgICAjIHNhdmUgYWxsIG90aGVyIGNoYW5nZXMgdG8gdGhlIHN0YXNoCiskIGVkaXQvYnVpbGQvdGVzdCBmaXJzdCBwYXJ0CiskIGdpdCBjb21taXQgLW0gJ0ZpcnN0IHBhcnQnICAgICAjIGNvbW1pdCBmdWxseSB0ZXN0ZWQgY2hhbmdlCiskIGdpdCBzdGFzaCBwb3AgICAgICAgICAgICAgICAgICAjIHByZXBhcmUgdG8gd29yayBvbiBhbGwgb3RoZXIgY2hhbmdlcworIyAuLi4gcmVwZWF0IGFib3ZlIGZpdmUgc3RlcHMgdW50aWwgb25lIGNvbW1pdCByZW1haW5zIC4uLgorJCBlZGl0L2J1aWxkL3Rlc3QgcmVtYWluaW5nIHBhcnRzCiskIGdpdCBjb21taXQgZm9vIC1tICdSZW1haW5pbmcgcGFydHMnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlY292ZXJpbmcgc3Rhc2ggZW50cmllcyB0aGF0IHdlcmUgY2xlYXJlZC9kcm9wcGVkIGVycm9uZW91c2x5OjoKKworSWYgeW91IG1pc3Rha2VubHkgZHJvcCBvciBjbGVhciBzdGFzaCBlbnRyaWVzLCB0aGV5IGNhbm5vdCBiZSByZWNvdmVyZWQKK3Rocm91Z2ggdGhlIG5vcm1hbCBzYWZldHkgbWVjaGFuaXNtcy4gIEhvd2V2ZXIsIHlvdSBjYW4gdHJ5IHRoZQorZm9sbG93aW5nIGluY2FudGF0aW9uIHRvIGdldCBhIGxpc3Qgb2Ygc3Rhc2ggZW50cmllcyB0aGF0IGFyZSBzdGlsbCBpbgoreW91ciByZXBvc2l0b3J5LCBidXQgbm90IHJlYWNoYWJsZSBhbnkgbW9yZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmc2NrIC0tdW5yZWFjaGFibGUgfAorZ3JlcCBjb21taXQgfCBjdXQgLWRcICAtZjMgfAoreGFyZ3MgZ2l0IGxvZyAtLW1lcmdlcyAtLW5vLXdhbGsgLS1ncmVwPVdJUAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0sCitsaW5rZ2l0OmdpdC1jb21taXRbMV0sCitsaW5rZ2l0OmdpdC1yZWZsb2dbMV0sCitsaW5rZ2l0OmdpdC1yZXNldFsxXSwKK2xpbmtnaXQ6Z2l0LXN3aXRjaFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN0YXR1cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGF0dXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MzFiNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGF0dXMudHh0CkBAIC0wLDAgKzEsNDQzIEBACitnaXQtc3RhdHVzKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zdGF0dXMgLSBTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHN0YXR1cycgWzxvcHRpb25zPi4uLl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitEaXNwbGF5cyBwYXRocyB0aGF0IGhhdmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgaW5kZXggZmlsZSBhbmQgdGhlCitjdXJyZW50IEhFQUQgY29tbWl0LCBwYXRocyB0aGF0IGhhdmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgd29ya2luZwordHJlZSBhbmQgdGhlIGluZGV4IGZpbGUsIGFuZCBwYXRocyBpbiB0aGUgd29ya2luZyB0cmVlIHRoYXQgYXJlIG5vdAordHJhY2tlZCBieSBHaXQgKGFuZCBhcmUgbm90IGlnbm9yZWQgYnkgbGlua2dpdDpnaXRpZ25vcmVbNV0pLiBUaGUgZmlyc3QKK2FyZSB3aGF0IHlvdSBfd291bGRfIGNvbW1pdCBieSBydW5uaW5nIGBnaXQgY29tbWl0YDsgdGhlIHNlY29uZCBhbmQKK3RoaXJkIGFyZSB3aGF0IHlvdSBfY291bGRfIGNvbW1pdCBieSBydW5uaW5nICdnaXQgYWRkJyBiZWZvcmUgcnVubmluZworYGdpdCBjb21taXRgLgorCitPUFRJT05TCistLS0tLS0tCisKKy1zOjoKKy0tc2hvcnQ6OgorCUdpdmUgdGhlIG91dHB1dCBpbiB0aGUgc2hvcnQtZm9ybWF0LgorCistYjo6CistLWJyYW5jaDo6CisJU2hvdyB0aGUgYnJhbmNoIGFuZCB0cmFja2luZyBpbmZvIGV2ZW4gaW4gc2hvcnQtZm9ybWF0LgorCistLXNob3ctc3Rhc2g6OgorCVNob3cgdGhlIG51bWJlciBvZiBlbnRyaWVzIGN1cnJlbnRseSBzdGFzaGVkIGF3YXkuCisKKy0tcG9yY2VsYWluWz08dmVyc2lvbj5dOjoKKwlHaXZlIHRoZSBvdXRwdXQgaW4gYW4gZWFzeS10by1wYXJzZSBmb3JtYXQgZm9yIHNjcmlwdHMuCisJVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBzaG9ydCBvdXRwdXQsIGJ1dCB3aWxsIHJlbWFpbiBzdGFibGUKKwlhY3Jvc3MgR2l0IHZlcnNpb25zIGFuZCByZWdhcmRsZXNzIG9mIHVzZXIgY29uZmlndXJhdGlvbi4gU2VlCisJYmVsb3cgZm9yIGRldGFpbHMuCisrCitUaGUgdmVyc2lvbiBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBmb3JtYXQgdmVyc2lvbi4KK1RoaXMgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIHRoZSBvcmlnaW5hbCB2ZXJzaW9uICd2MScgZm9ybWF0LgorCistLWxvbmc6OgorCUdpdmUgdGhlIG91dHB1dCBpbiB0aGUgbG9uZy1mb3JtYXQuIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJSW4gYWRkaXRpb24gdG8gdGhlIG5hbWVzIG9mIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQsIGFsc28KKwlzaG93IHRoZSB0ZXh0dWFsIGNoYW5nZXMgdGhhdCBhcmUgc3RhZ2VkIHRvIGJlIGNvbW1pdHRlZAorCShpLmUuLCBsaWtlIHRoZSBvdXRwdXQgb2YgYGdpdCBkaWZmIC0tY2FjaGVkYCkuIElmIGAtdmAgaXMgc3BlY2lmaWVkCisJdHdpY2UsIHRoZW4gYWxzbyBzaG93IHRoZSBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdAorCWhhdmUgbm90IHlldCBiZWVuIHN0YWdlZCAoaS5lLiwgbGlrZSB0aGUgb3V0cHV0IG9mIGBnaXQgZGlmZmApLgorCistdVs8bW9kZT5dOjoKKy0tdW50cmFja2VkLWZpbGVzWz08bW9kZT5dOjoKKwlTaG93IHVudHJhY2tlZCBmaWxlcy4KKysKKy0tCitUaGUgbW9kZSBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBoYW5kbGluZyBvZiB1bnRyYWNrZWQgZmlsZXMuCitJdCBpcyBvcHRpb25hbDogaXQgZGVmYXVsdHMgdG8gJ2FsbCcsIGFuZCBpZiBzcGVjaWZpZWQsIGl0IG11c3QgYmUKK3N0dWNrIHRvIHRoZSBvcHRpb24gKGUuZy4gYC11bm9gLCBidXQgbm90IGAtdSBub2ApLgorCitUaGUgcG9zc2libGUgb3B0aW9ucyBhcmU6CisKKwktICdubycgICAgIC0gU2hvdyBubyB1bnRyYWNrZWQgZmlsZXMuCisJLSAnbm9ybWFsJyAtIFNob3dzIHVudHJhY2tlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisJLSAnYWxsJyAgICAtIEFsc28gc2hvd3MgaW5kaXZpZHVhbCBmaWxlcyBpbiB1bnRyYWNrZWQgZGlyZWN0b3JpZXMuCisKK1doZW4gYC11YCBvcHRpb24gaXMgbm90IHVzZWQsIHVudHJhY2tlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYXJlCitzaG93biAoaS5lLiB0aGUgc2FtZSBhcyBzcGVjaWZ5aW5nIGBub3JtYWxgKSwgdG8gaGVscCB5b3UgYXZvaWQKK2ZvcmdldHRpbmcgdG8gYWRkIG5ld2x5IGNyZWF0ZWQgZmlsZXMuICBCZWNhdXNlIGl0IHRha2VzIGV4dHJhIHdvcmsKK3RvIGZpbmQgdW50cmFja2VkIGZpbGVzIGluIHRoZSBmaWxlc3lzdGVtLCB0aGlzIG1vZGUgbWF5IHRha2Ugc29tZQordGltZSBpbiBhIGxhcmdlIHdvcmtpbmcgdHJlZS4KK0NvbnNpZGVyIGVuYWJsaW5nIHVudHJhY2tlZCBjYWNoZSBhbmQgc3BsaXQgaW5kZXggaWYgc3VwcG9ydGVkIChzZWUKK2BnaXQgdXBkYXRlLWluZGV4IC0tdW50cmFja2VkLWNhY2hlYCBhbmQgYGdpdCB1cGRhdGUtaW5kZXgKKy0tc3BsaXQtaW5kZXhgKSwgT3RoZXJ3aXNlIHlvdSBjYW4gdXNlIGBub2AgdG8gaGF2ZSBgZ2l0IHN0YXR1c2AKK3JldHVybiBtb3JlIHF1aWNrbHkgd2l0aG91dCBzaG93aW5nIHVudHJhY2tlZCBmaWxlcy4KKworVGhlIGRlZmF1bHQgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgZG9jdW1lbnRlZCBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCistLQorCistLWlnbm9yZS1zdWJtb2R1bGVzWz08d2hlbj5dOjoKKwlJZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzIHdoZW4gbG9va2luZyBmb3IgY2hhbmdlcy4gPHdoZW4+IGNhbiBiZQorCWVpdGhlciAibm9uZSIsICJ1bnRyYWNrZWQiLCAiZGlydHkiIG9yICJhbGwiLCB3aGljaCBpcyB0aGUgZGVmYXVsdC4KKwlVc2luZyAibm9uZSIgd2lsbCBjb25zaWRlciB0aGUgc3VibW9kdWxlIG1vZGlmaWVkIHdoZW4gaXQgZWl0aGVyIGNvbnRhaW5zCisJdW50cmFja2VkIG9yIG1vZGlmaWVkIGZpbGVzIG9yIGl0cyBIRUFEIGRpZmZlcnMgZnJvbSB0aGUgY29tbWl0IHJlY29yZGVkCisJaW4gdGhlIHN1cGVycHJvamVjdCBhbmQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYW55IHNldHRpbmdzIG9mIHRoZQorCSdpZ25vcmUnIG9wdGlvbiBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0gb3IgbGlua2dpdDpnaXRtb2R1bGVzWzVdLiBXaGVuCisJInVudHJhY2tlZCIgaXMgdXNlZCBzdWJtb2R1bGVzIGFyZSBub3QgY29uc2lkZXJlZCBkaXJ0eSB3aGVuIHRoZXkgb25seQorCWNvbnRhaW4gdW50cmFja2VkIGNvbnRlbnQgKGJ1dCB0aGV5IGFyZSBzdGlsbCBzY2FubmVkIGZvciBtb2RpZmllZAorCWNvbnRlbnQpLiBVc2luZyAiZGlydHkiIGlnbm9yZXMgYWxsIGNoYW5nZXMgdG8gdGhlIHdvcmsgdHJlZSBvZiBzdWJtb2R1bGVzLAorCW9ubHkgY2hhbmdlcyB0byB0aGUgY29tbWl0cyBzdG9yZWQgaW4gdGhlIHN1cGVycHJvamVjdCBhcmUgc2hvd24gKHRoaXMgd2FzCisJdGhlIGJlaGF2aW9yIGJlZm9yZSAxLjcuMCkuIFVzaW5nICJhbGwiIGhpZGVzIGFsbCBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMKKwkoYW5kIHN1cHByZXNzZXMgdGhlIG91dHB1dCBvZiBzdWJtb2R1bGUgc3VtbWFyaWVzIHdoZW4gdGhlIGNvbmZpZyBvcHRpb24KKwlgc3RhdHVzLnN1Ym1vZHVsZVN1bW1hcnlgIGlzIHNldCkuCisKKy0taWdub3JlZFs9PG1vZGU+XTo6CisJU2hvdyBpZ25vcmVkIGZpbGVzIGFzIHdlbGwuCisrCistLQorVGhlIG1vZGUgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgaGFuZGxpbmcgb2YgaWdub3JlZCBmaWxlcy4KK0l0IGlzIG9wdGlvbmFsOiBpdCBkZWZhdWx0cyB0byAndHJhZGl0aW9uYWwnLgorCitUaGUgcG9zc2libGUgb3B0aW9ucyBhcmU6CisKKwktICd0cmFkaXRpb25hbCcgLSBTaG93cyBpZ25vcmVkIGZpbGVzIGFuZCBkaXJlY3RvcmllcywgdW5sZXNzCisJCQkgIC0tdW50cmFja2VkLWZpbGVzPWFsbCBpcyBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UKKwkJCSAgaW5kaXZpZHVhbCBmaWxlcyBpbiBpZ25vcmVkIGRpcmVjdG9yaWVzIGFyZQorCQkJICBkaXNwbGF5ZWQuCisJLSAnbm8nCSAgICAgICAgLSBTaG93IG5vIGlnbm9yZWQgZmlsZXMuCisJLSAnbWF0Y2hpbmcnICAgIC0gU2hvd3MgaWdub3JlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgbWF0Y2hpbmcgYW4KKwkJCSAgaWdub3JlIHBhdHRlcm4uCisKK1doZW4gJ21hdGNoaW5nJyBtb2RlIGlzIHNwZWNpZmllZCwgcGF0aHMgdGhhdCBleHBsaWNpdGx5IG1hdGNoIGFuCitpZ25vcmVkIHBhdHRlcm4gYXJlIHNob3duLiBJZiBhIGRpcmVjdG9yeSBtYXRjaGVzIGFuIGlnbm9yZSBwYXR0ZXJuLAordGhlbiBpdCBpcyBzaG93biwgYnV0IG5vdCBwYXRocyBjb250YWluZWQgaW4gdGhlIGlnbm9yZWQgZGlyZWN0b3J5LiBJZgorYSBkaXJlY3RvcnkgZG9lcyBub3QgbWF0Y2ggYW4gaWdub3JlIHBhdHRlcm4sIGJ1dCBhbGwgY29udGVudHMgYXJlCitpZ25vcmVkLCB0aGVuIHRoZSBkaXJlY3RvcnkgaXMgbm90IHNob3duLCBidXQgYWxsIGNvbnRlbnRzIGFyZSBzaG93bi4KKy0tCisKKy16OjoKKwlUZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCwgaW5zdGVhZCBvZiBMRi4gIFRoaXMgaW1wbGllcworCXRoZSBgLS1wb3JjZWxhaW49djFgIG91dHB1dCBmb3JtYXQgaWYgbm8gb3RoZXIgZm9ybWF0IGlzIGdpdmVuLgorCistLWNvbHVtbls9PG9wdGlvbnM+XTo6CistLW5vLWNvbHVtbjo6CisJRGlzcGxheSB1bnRyYWNrZWQgZmlsZXMgaW4gY29sdW1ucy4gU2VlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKwljb2x1bW4uc3RhdHVzIGZvciBvcHRpb24gc3ludGF4LmAtLWNvbHVtbmAgYW5kIGAtLW5vLWNvbHVtbmAKKwl3aXRob3V0IG9wdGlvbnMgYXJlIGVxdWl2YWxlbnQgdG8gJ2Fsd2F5cycgYW5kICduZXZlcicKKwlyZXNwZWN0aXZlbHkuCisKKy0tYWhlYWQtYmVoaW5kOjoKKy0tbm8tYWhlYWQtYmVoaW5kOjoKKwlEaXNwbGF5IG9yIGRvIG5vdCBkaXNwbGF5IGRldGFpbGVkIGFoZWFkL2JlaGluZCBjb3VudHMgZm9yIHRoZQorCWJyYW5jaCByZWxhdGl2ZSB0byBpdHMgdXBzdHJlYW0gYnJhbmNoLiAgRGVmYXVsdHMgdG8gdHJ1ZS4KKworLS1yZW5hbWVzOjoKKy0tbm8tcmVuYW1lczo6CisJVHVybiBvbi9vZmYgcmVuYW1lIGRldGVjdGlvbiByZWdhcmRsZXNzIG9mIHVzZXIgY29uZmlndXJhdGlvbi4KKwlTZWUgYWxzbyBsaW5rZ2l0OmdpdC1kaWZmWzFdIGAtLW5vLXJlbmFtZXNgLgorCistLWZpbmQtcmVuYW1lc1s9PG4+XTo6CisJVHVybiBvbiByZW5hbWUgZGV0ZWN0aW9uLCBvcHRpb25hbGx5IHNldHRpbmcgdGhlIHNpbWlsYXJpdHkKKwl0aHJlc2hvbGQuCisJU2VlIGFsc28gbGlua2dpdDpnaXQtZGlmZlsxXSBgLS1maW5kLXJlbmFtZXNgLgorCis8cGF0aHNwZWM+Li4uOjoKKwlTZWUgdGhlICdwYXRoc3BlYycgZW50cnkgaW4gbGlua2dpdDpnaXRnbG9zc2FyeVs3XS4KKworT1VUUFVUCistLS0tLS0KK1RoZSBvdXRwdXQgZnJvbSB0aGlzIGNvbW1hbmQgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIGNvbW1pdAordGVtcGxhdGUgY29tbWVudC4KK1RoZSBkZWZhdWx0LCBsb25nIGZvcm1hdCwgaXMgZGVzaWduZWQgdG8gYmUgaHVtYW4gcmVhZGFibGUsCit2ZXJib3NlIGFuZCBkZXNjcmlwdGl2ZS4gIEl0cyBjb250ZW50cyBhbmQgZm9ybWF0IGFyZSBzdWJqZWN0IHRvIGNoYW5nZQorYXQgYW55IHRpbWUuCisKK1RoZSBwYXRocyBtZW50aW9uZWQgaW4gdGhlIG91dHB1dCwgdW5saWtlIG1hbnkgb3RoZXIgR2l0IGNvbW1hbmRzLCBhcmUKK21hZGUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlmIHlvdSBhcmUgd29ya2luZyBpbiBhCitzdWJkaXJlY3RvcnkgKHRoaXMgaXMgb24gcHVycG9zZSwgdG8gaGVscCBjdXR0aW5nIGFuZCBwYXN0aW5nKS4gU2VlCit0aGUgc3RhdHVzLnJlbGF0aXZlUGF0aHMgY29uZmlnIG9wdGlvbiBiZWxvdy4KKworU2hvcnQgRm9ybWF0Cit+fn5+fn5+fn5+fn4KKworSW4gdGhlIHNob3J0LWZvcm1hdCwgdGhlIHN0YXR1cyBvZiBlYWNoIHBhdGggaXMgc2hvd24gYXMgb25lIG9mIHRoZXNlCitmb3JtcworCisJWFkgUEFUSAorCVhZIE9SSUdfUEFUSCAtPiBQQVRICisKK3doZXJlIGBPUklHX1BBVEhgIGlzIHdoZXJlIHRoZSByZW5hbWVkL2NvcGllZCBjb250ZW50cyBjYW1lCitmcm9tLiBgT1JJR19QQVRIYCBpcyBvbmx5IHNob3duIHdoZW4gdGhlIGVudHJ5IGlzIHJlbmFtZWQgb3IKK2NvcGllZC4gVGhlIGBYWWAgaXMgYSB0d28tbGV0dGVyIHN0YXR1cyBjb2RlLgorCitUaGUgZmllbGRzIChpbmNsdWRpbmcgdGhlIGAtPmApIGFyZSBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IGEKK3NpbmdsZSBzcGFjZS4gSWYgYSBmaWxlbmFtZSBjb250YWlucyB3aGl0ZXNwYWNlIG9yIG90aGVyIG5vbnByaW50YWJsZQorY2hhcmFjdGVycywgdGhhdCBmaWVsZCB3aWxsIGJlIHF1b3RlZCBpbiB0aGUgbWFubmVyIG9mIGEgQyBzdHJpbmcKK2xpdGVyYWw6IHN1cnJvdW5kZWQgYnkgQVNDSUkgZG91YmxlIHF1b3RlICgzNCkgY2hhcmFjdGVycywgYW5kIHdpdGgKK2ludGVyaW9yIHNwZWNpYWwgY2hhcmFjdGVycyBiYWNrc2xhc2gtZXNjYXBlZC4KKworRm9yIHBhdGhzIHdpdGggbWVyZ2UgY29uZmxpY3RzLCBgWGAgYW5kIGBZYCBzaG93IHRoZSBtb2RpZmljYXRpb24KK3N0YXRlcyBvZiBlYWNoIHNpZGUgb2YgdGhlIG1lcmdlLiBGb3IgcGF0aHMgdGhhdCBkbyBub3QgaGF2ZSBtZXJnZQorY29uZmxpY3RzLCBgWGAgc2hvd3MgdGhlIHN0YXR1cyBvZiB0aGUgaW5kZXgsIGFuZCBgWWAgc2hvd3MgdGhlIHN0YXR1cworb2YgdGhlIHdvcmsgdHJlZS4gIEZvciB1bnRyYWNrZWQgcGF0aHMsIGBYWWAgYXJlIGA/P2AuICBPdGhlciBzdGF0dXMKK2NvZGVzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBmb2xsb3dzOgorCisqICcgJyA9IHVubW9kaWZpZWQKKyogJ00nID0gbW9kaWZpZWQKKyogJ0EnID0gYWRkZWQKKyogJ0QnID0gZGVsZXRlZAorKiAnUicgPSByZW5hbWVkCisqICdDJyA9IGNvcGllZAorKiAnVScgPSB1cGRhdGVkIGJ1dCB1bm1lcmdlZAorCitJZ25vcmVkIGZpbGVzIGFyZSBub3QgbGlzdGVkLCB1bmxlc3MgYC0taWdub3JlZGAgb3B0aW9uIGlzIGluIGVmZmVjdCwKK2luIHdoaWNoIGNhc2UgYFhZYCBhcmUgYCEhYC4KKworLi4uLgorWCAgICAgICAgICBZICAgICBNZWFuaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJIFtBTURdICAgbm90IHVwZGF0ZWQKK00gICAgICAgIFsgTURdICAgdXBkYXRlZCBpbiBpbmRleAorQSAgICAgICAgWyBNRF0gICBhZGRlZCB0byBpbmRleAorRCAgICAgICAgICAgICAgICBkZWxldGVkIGZyb20gaW5kZXgKK1IgICAgICAgIFsgTURdICAgcmVuYW1lZCBpbiBpbmRleAorQyAgICAgICAgWyBNRF0gICBjb3BpZWQgaW4gaW5kZXgKK1tNQVJDXSAgICAgICAgICAgaW5kZXggYW5kIHdvcmsgdHJlZSBtYXRjaGVzCitbIE1BUkNdICAgICBNICAgIHdvcmsgdHJlZSBjaGFuZ2VkIHNpbmNlIGluZGV4CitbIE1BUkNdICAgICBEICAgIGRlbGV0ZWQgaW4gd29yayB0cmVlCitbIERdICAgICAgICBSICAgIHJlbmFtZWQgaW4gd29yayB0cmVlCitbIERdICAgICAgICBDICAgIGNvcGllZCBpbiB3b3JrIHRyZWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0QgICAgICAgICAgIEQgICAgdW5tZXJnZWQsIGJvdGggZGVsZXRlZAorQSAgICAgICAgICAgVSAgICB1bm1lcmdlZCwgYWRkZWQgYnkgdXMKK1UgICAgICAgICAgIEQgICAgdW5tZXJnZWQsIGRlbGV0ZWQgYnkgdGhlbQorVSAgICAgICAgICAgQSAgICB1bm1lcmdlZCwgYWRkZWQgYnkgdGhlbQorRCAgICAgICAgICAgVSAgICB1bm1lcmdlZCwgZGVsZXRlZCBieSB1cworQSAgICAgICAgICAgQSAgICB1bm1lcmdlZCwgYm90aCBhZGRlZAorVSAgICAgICAgICAgVSAgICB1bm1lcmdlZCwgYm90aCBtb2RpZmllZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPyAgICAgICAgICAgPyAgICB1bnRyYWNrZWQKKyEgICAgICAgICAgICEgICAgaWdub3JlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLi4uLgorCitTdWJtb2R1bGVzIGhhdmUgbW9yZSBzdGF0ZSBhbmQgaW5zdGVhZCByZXBvcnQKKwkJTSAgICB0aGUgc3VibW9kdWxlIGhhcyBhIGRpZmZlcmVudCBIRUFEIHRoYW4KKwkJICAgICByZWNvcmRlZCBpbiB0aGUgaW5kZXgKKwkJbSAgICB0aGUgc3VibW9kdWxlIGhhcyBtb2RpZmllZCBjb250ZW50CisJCT8gICAgdGhlIHN1Ym1vZHVsZSBoYXMgdW50cmFja2VkIGZpbGVzCitzaW5jZSBtb2RpZmllZCBjb250ZW50IG9yIHVudHJhY2tlZCBmaWxlcyBpbiBhIHN1Ym1vZHVsZSBjYW5ub3QgYmUgYWRkZWQKK3ZpYSBgZ2l0IGFkZGAgaW4gdGhlIHN1cGVycHJvamVjdCB0byBwcmVwYXJlIGEgY29tbWl0LgorCisnbScgYW5kICc/JyBhcmUgYXBwbGllZCByZWN1cnNpdmVseS4gRm9yIGV4YW1wbGUgaWYgYSBuZXN0ZWQgc3VibW9kdWxlCitpbiBhIHN1Ym1vZHVsZSBjb250YWlucyBhbiB1bnRyYWNrZWQgZmlsZSwgdGhpcyBpcyByZXBvcnRlZCBhcyAnPycgYXMgd2VsbC4KKworSWYgLWIgaXMgdXNlZCB0aGUgc2hvcnQtZm9ybWF0IHN0YXR1cyBpcyBwcmVjZWRlZCBieSBhIGxpbmUKKworICAgICMjIGJyYW5jaG5hbWUgdHJhY2tpbmcgaW5mbworCitQb3JjZWxhaW4gRm9ybWF0IFZlcnNpb24gMQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVmVyc2lvbiAxIHBvcmNlbGFpbiBmb3JtYXQgaXMgc2ltaWxhciB0byB0aGUgc2hvcnQgZm9ybWF0LCBidXQgaXMgZ3VhcmFudGVlZAorbm90IHRvIGNoYW5nZSBpbiBhIGJhY2t3YXJkcy1pbmNvbXBhdGlibGUgd2F5IGJldHdlZW4gR2l0IHZlcnNpb25zIG9yCitiYXNlZCBvbiB1c2VyIGNvbmZpZ3VyYXRpb24uIFRoaXMgbWFrZXMgaXQgaWRlYWwgZm9yIHBhcnNpbmcgYnkgc2NyaXB0cy4KK1RoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc2hvcnQgZm9ybWF0IGFib3ZlIGFsc28gZGVzY3JpYmVzIHRoZSBwb3JjZWxhaW4KK2Zvcm1hdCwgd2l0aCBhIGZldyBleGNlcHRpb25zOgorCisxLiBUaGUgdXNlcidzIGNvbG9yLnN0YXR1cyBjb25maWd1cmF0aW9uIGlzIG5vdCByZXNwZWN0ZWQ7IGNvbG9yIHdpbGwKKyAgIGFsd2F5cyBiZSBvZmYuCisKKzIuIFRoZSB1c2VyJ3Mgc3RhdHVzLnJlbGF0aXZlUGF0aHMgY29uZmlndXJhdGlvbiBpcyBub3QgcmVzcGVjdGVkOyBwYXRocworICAgc2hvd24gd2lsbCBhbHdheXMgYmUgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdC4KKworVGhlcmUgaXMgYWxzbyBhbiBhbHRlcm5hdGUgLXogZm9ybWF0IHJlY29tbWVuZGVkIGZvciBtYWNoaW5lIHBhcnNpbmcuIEluCit0aGF0IGZvcm1hdCwgdGhlIHN0YXR1cyBmaWVsZCBpcyB0aGUgc2FtZSwgYnV0IHNvbWUgb3RoZXIgdGhpbmdzCitjaGFuZ2UuICBGaXJzdCwgdGhlICdcLT4nIGlzIG9taXR0ZWQgZnJvbSByZW5hbWUgZW50cmllcyBhbmQgdGhlIGZpZWxkCitvcmRlciBpcyByZXZlcnNlZCAoZS5nICdmcm9tIFwtPiB0bycgYmVjb21lcyAndG8gZnJvbScpLiBTZWNvbmQsIGEgTlVMCisoQVNDSUkgMCkgZm9sbG93cyBlYWNoIGZpbGVuYW1lLCByZXBsYWNpbmcgc3BhY2UgYXMgYSBmaWVsZCBzZXBhcmF0b3IKK2FuZCB0aGUgdGVybWluYXRpbmcgbmV3bGluZSAoYnV0IGEgc3BhY2Ugc3RpbGwgc2VwYXJhdGVzIHRoZSBzdGF0dXMKK2ZpZWxkIGZyb20gdGhlIGZpcnN0IGZpbGVuYW1lKS4gIFRoaXJkLCBmaWxlbmFtZXMgY29udGFpbmluZyBzcGVjaWFsCitjaGFyYWN0ZXJzIGFyZSBub3Qgc3BlY2lhbGx5IGZvcm1hdHRlZDsgbm8gcXVvdGluZyBvcgorYmFja3NsYXNoLWVzY2FwaW5nIGlzIHBlcmZvcm1lZC4KKworQW55IHN1Ym1vZHVsZSBjaGFuZ2VzIGFyZSByZXBvcnRlZCBhcyBtb2RpZmllZCBgTWAgaW5zdGVhZCBvZiBgbWAgb3Igc2luZ2xlIGA/YC4KKworUG9yY2VsYWluIEZvcm1hdCBWZXJzaW9uIDIKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1ZlcnNpb24gMiBmb3JtYXQgYWRkcyBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZgordGhlIHdvcmt0cmVlIGFuZCBjaGFuZ2VkIGl0ZW1zLiAgVmVyc2lvbiAyIGFsc28gZGVmaW5lcyBhbiBleHRlbnNpYmxlCitzZXQgb2YgZWFzeSB0byBwYXJzZSBvcHRpb25hbCBoZWFkZXJzLgorCitIZWFkZXIgbGluZXMgc3RhcnQgd2l0aCAiIyIgYW5kIGFyZSBhZGRlZCBpbiByZXNwb25zZSB0byBzcGVjaWZpYworY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gIFBhcnNlcnMgc2hvdWxkIGlnbm9yZSBoZWFkZXJzIHRoZXkKK2Rvbid0IHJlY29nbml6ZS4KKworQnJhbmNoIEhlYWRlcnMKK15eXl5eXl5eXl5eXl5eCisKK0lmIGAtLWJyYW5jaGAgaXMgZ2l2ZW4sIGEgc2VyaWVzIG9mIGhlYWRlciBsaW5lcyBhcmUgcHJpbnRlZCB3aXRoCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBicmFuY2guCisKKy4uLi4KK0xpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBicmFuY2gub2lkIDxjb21taXQ+IHwgKGluaXRpYWwpICAgICAgICBDdXJyZW50IGNvbW1pdC4KKyMgYnJhbmNoLmhlYWQgPGJyYW5jaD4gfCAoZGV0YWNoZWQpICAgICAgQ3VycmVudCBicmFuY2guCisjIGJyYW5jaC51cHN0cmVhbSA8dXBzdHJlYW1fYnJhbmNoPiAgICAgIElmIHVwc3RyZWFtIGlzIHNldC4KKyMgYnJhbmNoLmFiICs8YWhlYWQ+IC08YmVoaW5kPiAgICAgICAgICAgSWYgdXBzdHJlYW0gaXMgc2V0IGFuZAorCQkJCQkgdGhlIGNvbW1pdCBpcyBwcmVzZW50LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisuLi4uCisKK0NoYW5nZWQgVHJhY2tlZCBFbnRyaWVzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitGb2xsb3dpbmcgdGhlIGhlYWRlcnMsIGEgc2VyaWVzIG9mIGxpbmVzIGFyZSBwcmludGVkIGZvciB0cmFja2VkCitlbnRyaWVzLiAgT25lIG9mIHRocmVlIGRpZmZlcmVudCBsaW5lIGZvcm1hdHMgbWF5IGJlIHVzZWQgdG8gZGVzY3JpYmUKK2FuIGVudHJ5IGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBjaGFuZ2UuICBUcmFja2VkIGVudHJpZXMgYXJlIHByaW50ZWQKK2luIGFuIHVuZGVmaW5lZCBvcmRlcjsgcGFyc2VycyBzaG91bGQgYWxsb3cgZm9yIGEgbWl4dHVyZSBvZiB0aGUgMworbGluZSB0eXBlcyBpbiBhbnkgb3JkZXIuCisKK09yZGluYXJ5IGNoYW5nZWQgZW50cmllcyBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCisgICAgMSA8WFk+IDxzdWI+IDxtSD4gPG1JPiA8bVc+IDxoSD4gPGhJPiA8cGF0aD4KKworUmVuYW1lZCBvciBjb3BpZWQgZW50cmllcyBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCisgICAgMiA8WFk+IDxzdWI+IDxtSD4gPG1JPiA8bVc+IDxoSD4gPGhJPiA8WD48c2NvcmU+IDxwYXRoPjxzZXA+PG9yaWdQYXRoPgorCisuLi4uCitGaWVsZCAgICAgICBNZWFuaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPFhZPiAgICAgICAgQSAyIGNoYXJhY3RlciBmaWVsZCBjb250YWluaW5nIHRoZSBzdGFnZWQgYW5kCisJICAgIHVuc3RhZ2VkIFhZIHZhbHVlcyBkZXNjcmliZWQgaW4gdGhlIHNob3J0IGZvcm1hdCwKKwkgICAgd2l0aCB1bmNoYW5nZWQgaW5kaWNhdGVkIGJ5IGEgIi4iIHJhdGhlciB0aGFuCisJICAgIGEgc3BhY2UuCis8c3ViPiAgICAgICBBIDQgY2hhcmFjdGVyIGZpZWxkIGRlc2NyaWJpbmcgdGhlIHN1Ym1vZHVsZSBzdGF0ZS4KKwkgICAgIk4uLi4iIHdoZW4gdGhlIGVudHJ5IGlzIG5vdCBhIHN1Ym1vZHVsZS4KKwkgICAgIlM8Yz48bT48dT4iIHdoZW4gdGhlIGVudHJ5IGlzIGEgc3VibW9kdWxlLgorCSAgICA8Yz4gaXMgIkMiIGlmIHRoZSBjb21taXQgY2hhbmdlZDsgb3RoZXJ3aXNlICIuIi4KKwkgICAgPG0+IGlzICJNIiBpZiBpdCBoYXMgdHJhY2tlZCBjaGFuZ2VzOyBvdGhlcndpc2UgIi4iLgorCSAgICA8dT4gaXMgIlUiIGlmIHRoZXJlIGFyZSB1bnRyYWNrZWQgY2hhbmdlczsgb3RoZXJ3aXNlICIuIi4KKzxtSD4gICAgICAgIFRoZSBvY3RhbCBmaWxlIG1vZGUgaW4gSEVBRC4KKzxtST4gICAgICAgIFRoZSBvY3RhbCBmaWxlIG1vZGUgaW4gdGhlIGluZGV4LgorPG1XPiAgICAgICAgVGhlIG9jdGFsIGZpbGUgbW9kZSBpbiB0aGUgd29ya3RyZWUuCis8aEg+ICAgICAgICBUaGUgb2JqZWN0IG5hbWUgaW4gSEVBRC4KKzxoST4gICAgICAgIFRoZSBvYmplY3QgbmFtZSBpbiB0aGUgaW5kZXguCis8WD48c2NvcmU+ICBUaGUgcmVuYW1lIG9yIGNvcHkgc2NvcmUgKGRlbm90aW5nIHRoZSBwZXJjZW50YWdlCisJICAgIG9mIHNpbWlsYXJpdHkgYmV0d2VlbiB0aGUgc291cmNlIGFuZCB0YXJnZXQgb2YgdGhlCisJICAgIG1vdmUgb3IgY29weSkuIEZvciBleGFtcGxlICJSMTAwIiBvciAiQzc1Ii4KKzxwYXRoPiAgICAgIFRoZSBwYXRobmFtZS4gIEluIGEgcmVuYW1lZC9jb3BpZWQgZW50cnksIHRoaXMKKwkgICAgaXMgdGhlIHRhcmdldCBwYXRoLgorPHNlcD4gICAgICAgV2hlbiB0aGUgYC16YCBvcHRpb24gaXMgdXNlZCwgdGhlIDIgcGF0aG5hbWVzIGFyZSBzZXBhcmF0ZWQKKwkgICAgd2l0aCBhIE5VTCAoQVNDSUkgMHgwMCkgYnl0ZTsgb3RoZXJ3aXNlLCBhIHRhYiAoQVNDSUkgMHgwOSkKKwkgICAgYnl0ZSBzZXBhcmF0ZXMgdGhlbS4KKzxvcmlnUGF0aD4gIFRoZSBwYXRobmFtZSBpbiB0aGUgY29tbWl0IGF0IEhFQUQgb3IgaW4gdGhlIGluZGV4LgorCSAgICBUaGlzIGlzIG9ubHkgcHJlc2VudCBpbiBhIHJlbmFtZWQvY29waWVkIGVudHJ5LCBhbmQKKwkgICAgdGVsbHMgd2hlcmUgdGhlIHJlbmFtZWQvY29waWVkIGNvbnRlbnRzIGNhbWUgZnJvbS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisuLi4uCisKK1VubWVyZ2VkIGVudHJpZXMgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDsgdGhlIGZpcnN0IGNoYXJhY3RlciBpcworYSAidSIgdG8gZGlzdGluZ3Vpc2ggZnJvbSBvcmRpbmFyeSBjaGFuZ2VkIGVudHJpZXMuCisKKyAgICB1IDx4eT4gPHN1Yj4gPG0xPiA8bTI+IDxtMz4gPG1XPiA8aDE+IDxoMj4gPGgzPiA8cGF0aD4KKworLi4uLgorRmllbGQgICAgICAgTWVhbmluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzxYWT4gICAgICAgIEEgMiBjaGFyYWN0ZXIgZmllbGQgZGVzY3JpYmluZyB0aGUgY29uZmxpY3QgdHlwZQorCSAgICBhcyBkZXNjcmliZWQgaW4gdGhlIHNob3J0IGZvcm1hdC4KKzxzdWI+ICAgICAgIEEgNCBjaGFyYWN0ZXIgZmllbGQgZGVzY3JpYmluZyB0aGUgc3VibW9kdWxlIHN0YXRlCisJICAgIGFzIGRlc2NyaWJlZCBhYm92ZS4KKzxtMT4gICAgICAgIFRoZSBvY3RhbCBmaWxlIG1vZGUgaW4gc3RhZ2UgMS4KKzxtMj4gICAgICAgIFRoZSBvY3RhbCBmaWxlIG1vZGUgaW4gc3RhZ2UgMi4KKzxtMz4gICAgICAgIFRoZSBvY3RhbCBmaWxlIG1vZGUgaW4gc3RhZ2UgMy4KKzxtVz4gICAgICAgIFRoZSBvY3RhbCBmaWxlIG1vZGUgaW4gdGhlIHdvcmt0cmVlLgorPGgxPiAgICAgICAgVGhlIG9iamVjdCBuYW1lIGluIHN0YWdlIDEuCis8aDI+ICAgICAgICBUaGUgb2JqZWN0IG5hbWUgaW4gc3RhZ2UgMi4KKzxoMz4gICAgICAgIFRoZSBvYmplY3QgbmFtZSBpbiBzdGFnZSAzLgorPHBhdGg+ICAgICAgVGhlIHBhdGhuYW1lLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy4uLi4KKworT3RoZXIgSXRlbXMKK15eXl5eXl5eXl5eCisKK0ZvbGxvd2luZyB0aGUgdHJhY2tlZCBlbnRyaWVzIChhbmQgaWYgcmVxdWVzdGVkKSwgYSBzZXJpZXMgb2YKK2xpbmVzIHdpbGwgYmUgcHJpbnRlZCBmb3IgdW50cmFja2VkIGFuZCB0aGVuIGlnbm9yZWQgaXRlbXMKK2ZvdW5kIGluIHRoZSB3b3JrdHJlZS4KKworVW50cmFja2VkIGl0ZW1zIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisKKyAgICA/IDxwYXRoPgorCitJZ25vcmVkIGl0ZW1zIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisKKyAgICAhIDxwYXRoPgorCitQYXRobmFtZSBGb3JtYXQgTm90ZXMgYW5kIC16CiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1doZW4gdGhlIGAtemAgb3B0aW9uIGlzIGdpdmVuLCBwYXRobmFtZXMgYXJlIHByaW50ZWQgYXMgaXMgYW5kCit3aXRob3V0IGFueSBxdW90aW5nIGFuZCBsaW5lcyBhcmUgdGVybWluYXRlZCB3aXRoIGEgTlVMIChBU0NJSSAweDAwKQorYnl0ZS4KKworV2l0aG91dCB0aGUgYC16YCBvcHRpb24sIHBhdGhuYW1lcyB3aXRoICJ1bnVzdWFsIiBjaGFyYWN0ZXJzIGFyZQorcXVvdGVkIGFzIGV4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYAorKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworVGhlIGNvbW1hbmQgaG9ub3JzIGBjb2xvci5zdGF0dXNgIChvciBgc3RhdHVzLmNvbG9yYCAtLSB0aGV5CittZWFuIHRoZSBzYW1lIHRoaW5nIGFuZCB0aGUgbGF0dGVyIGlzIGtlcHQgZm9yIGJhY2t3YXJkCitjb21wYXRpYmlsaXR5KSBhbmQgYGNvbG9yLnN0YXR1cy48c2xvdD5gIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCit0byBjb2xvcml6ZSBpdHMgb3V0cHV0LgorCitJZiB0aGUgY29uZmlnIHZhcmlhYmxlIGBzdGF0dXMucmVsYXRpdmVQYXRoc2AgaXMgc2V0IHRvIGZhbHNlLCB0aGVuIGFsbAorcGF0aHMgc2hvd24gYXJlIHJlbGF0aXZlIHRvIHRoZSByZXBvc2l0b3J5IHJvb3QsIG5vdCB0byB0aGUgY3VycmVudAorZGlyZWN0b3J5LgorCitJZiBgc3RhdHVzLnN1Ym1vZHVsZVN1bW1hcnlgIGlzIHNldCB0byBhIG5vbiB6ZXJvIG51bWJlciBvciB0cnVlIChpZGVudGljYWwKK3RvIC0xIG9yIGFuIHVubGltaXRlZCBudW1iZXIpLCB0aGUgc3VibW9kdWxlIHN1bW1hcnkgd2lsbCBiZSBlbmFibGVkIGZvcgordGhlIGxvbmcgZm9ybWF0IGFuZCBhIHN1bW1hcnkgb2YgY29tbWl0cyBmb3IgbW9kaWZpZWQgc3VibW9kdWxlcyB3aWxsIGJlCitzaG93biAoc2VlIC0tc3VtbWFyeS1saW1pdCBvcHRpb24gb2YgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdKS4gUGxlYXNlIG5vdGUKK3RoYXQgdGhlIHN1bW1hcnkgb3V0cHV0IGZyb20gdGhlIHN0YXR1cyBjb21tYW5kIHdpbGwgYmUgc3VwcHJlc3NlZCBmb3IgYWxsCitzdWJtb2R1bGVzIHdoZW4gYGRpZmYuaWdub3JlU3VibW9kdWxlc2AgaXMgc2V0IHRvICdhbGwnIG9yIG9ubHkgZm9yIHRob3NlCitzdWJtb2R1bGVzIHdoZXJlIGBzdWJtb2R1bGUuPG5hbWU+Lmlnbm9yZT1hbGxgLiBUbyBhbHNvIHZpZXcgdGhlIHN1bW1hcnkgZm9yCitpZ25vcmVkIHN1Ym1vZHVsZXMgeW91IGNhbiBlaXRoZXIgdXNlIHRoZSAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IGNvbW1hbmQKK2xpbmUgb3B0aW9uIG9yIHRoZSAnZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5JyBjb21tYW5kLCB3aGljaCBzaG93cyBhIHNpbWlsYXIKK291dHB1dCBidXQgZG9lcyBub3QgaG9ub3IgdGhlc2Ugc2V0dGluZ3MuCisKK0JBQ0tHUk9VTkQgUkVGUkVTSAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIGBnaXQgc3RhdHVzYCB3aWxsIGF1dG9tYXRpY2FsbHkgcmVmcmVzaCB0aGUgaW5kZXgsIHVwZGF0aW5nCit0aGUgY2FjaGVkIHN0YXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCB3cml0aW5nIG91dCB0aGUKK3Jlc3VsdC4gV3JpdGluZyBvdXQgdGhlIHVwZGF0ZWQgaW5kZXggaXMgYW4gb3B0aW1pemF0aW9uIHRoYXQgaXNuJ3QKK3N0cmljdGx5IG5lY2Vzc2FyeSAoYHN0YXR1c2AgY29tcHV0ZXMgdGhlIHZhbHVlcyBmb3IgaXRzZWxmLCBidXQgd3JpdGluZwordGhlbSBvdXQgaXMganVzdCB0byBzYXZlIHN1YnNlcXVlbnQgcHJvZ3JhbXMgZnJvbSByZXBlYXRpbmcgb3VyCitjb21wdXRhdGlvbikuIFdoZW4gYHN0YXR1c2AgaXMgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLCB0aGUgbG9jayBoZWxkCitkdXJpbmcgdGhlIHdyaXRlIG1heSBjb25mbGljdCB3aXRoIG90aGVyIHNpbXVsdGFuZW91cyBwcm9jZXNzZXMsIGNhdXNpbmcKK3RoZW0gdG8gZmFpbC4gU2NyaXB0cyBydW5uaW5nIGBzdGF0dXNgIGluIHRoZSBiYWNrZ3JvdW5kIHNob3VsZCBjb25zaWRlcgordXNpbmcgYGdpdCAtLW5vLW9wdGlvbmFsLWxvY2tzIHN0YXR1c2AgKHNlZSBsaW5rZ2l0OmdpdFsxXSBmb3IgZGV0YWlscykuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXRpZ25vcmVbNV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdHJpcHNwYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN0cmlwc3BhY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzhmNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdHJpcHNwYWNlLnR4dApAQCAtMCwwICsxLDk0IEBACitnaXQtc3RyaXBzcGFjZSgxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXN0cmlwc3BhY2UgLSBSZW1vdmUgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzdHJpcHNwYWNlJyBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXQorJ2dpdCBzdHJpcHNwYWNlJyBbLWMgfCAtLWNvbW1lbnQtbGluZXNdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitSZWFkIHRleHQsIHN1Y2ggYXMgY29tbWl0IG1lc3NhZ2VzLCBub3RlcywgdGFncyBhbmQgYnJhbmNoCitkZXNjcmlwdGlvbnMsIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGFuZCBjbGVhbiBpdCBpbiB0aGUgbWFubmVyCit1c2VkIGJ5IEdpdC4KKworV2l0aCBubyBhcmd1bWVudHMsIHRoaXMgd2lsbDoKKworLSByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSBmcm9tIGFsbCBsaW5lcworLSBjb2xsYXBzZSBtdWx0aXBsZSBjb25zZWN1dGl2ZSBlbXB0eSBsaW5lcyBpbnRvIG9uZSBlbXB0eSBsaW5lCistIHJlbW92ZSBlbXB0eSBsaW5lcyBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgaW5wdXQKKy0gYWRkIGEgbWlzc2luZyAnXG4nIHRvIHRoZSBsYXN0IGxpbmUgaWYgbmVjZXNzYXJ5LgorCitJbiB0aGUgY2FzZSB3aGVyZSB0aGUgaW5wdXQgY29uc2lzdHMgZW50aXJlbHkgb2Ygd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLCBubworb3V0cHV0IHdpbGwgYmUgcHJvZHVjZWQuCisKKypOT1RFKjogVGhpcyBpcyBpbnRlbmRlZCBmb3IgY2xlYW5pbmcgbWV0YWRhdGEsIHByZWZlciB0aGUgYC0td2hpdGVzcGFjZT1maXhgCittb2RlIG9mIGxpbmtnaXQ6Z2l0LWFwcGx5WzFdIGZvciBjb3JyZWN0aW5nIHdoaXRlc3BhY2Ugb2YgcGF0Y2hlcyBvciBmaWxlcyBpbgordGhlIHJlcG9zaXRvcnkuCisKK09QVElPTlMKKy0tLS0tLS0KKy1zOjoKKy0tc3RyaXAtY29tbWVudHM6OgorCVNraXAgYW5kIHJlbW92ZSBhbGwgbGluZXMgc3RhcnRpbmcgd2l0aCBjb21tZW50IGNoYXJhY3RlciAoZGVmYXVsdCAnIycpLgorCistYzo6CistLWNvbW1lbnQtbGluZXM6OgorCVByZXBlbmQgY29tbWVudCBjaGFyYWN0ZXIgYW5kIGJsYW5rIHRvIGVhY2ggbGluZS4gTGluZXMgd2lsbCBhdXRvbWF0aWNhbGx5CisJYmUgdGVybWluYXRlZCB3aXRoIGEgbmV3bGluZS4gT24gZW1wdHkgbGluZXMsIG9ubHkgdGhlIGNvbW1lbnQgY2hhcmFjdGVyCisJd2lsbCBiZSBwcmVwZW5kZWQuCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitHaXZlbiB0aGUgZm9sbG93aW5nIG5vaXN5IGlucHV0IHdpdGggJyQnIGluZGljYXRpbmcgdGhlIGVuZCBvZiBhIGxpbmU6CisKKy0tLS0tLS0tLQorfEEgYnJpZWYgaW50cm9kdWN0aW9uICAgJAorfCAgICQKK3wkCit8QSBuZXcgcGFyYWdyYXBoJAorfCMgd2l0aCBhIGNvbW1lbnRlZC1vdXQgbGluZSAgICAkCit8ZXhwbGFpbmluZyBsb3RzIG9mIHN0dWZmLiQKK3wkCit8IyBBbiBvbGQgcGFyYWdyYXBoLCBhbHNvIGNvbW1lbnRlZC1vdXQuICQKK3wgICAgICAkCit8VGhlIGVuZC4kCit8ICAkCistLS0tLS0tLS0KKworVXNlICdnaXQgc3RyaXBzcGFjZScgd2l0aCBubyBhcmd1bWVudHMgdG8gb2J0YWluOgorCistLS0tLS0tLS0KK3xBIGJyaWVmIGludHJvZHVjdGlvbiQKK3wkCit8QSBuZXcgcGFyYWdyYXBoJAorfCMgd2l0aCBhIGNvbW1lbnRlZC1vdXQgbGluZSQKK3xleHBsYWluaW5nIGxvdHMgb2Ygc3R1ZmYuJAorfCQKK3wjIEFuIG9sZCBwYXJhZ3JhcGgsIGFsc28gY29tbWVudGVkLW91dC4kCit8JAorfFRoZSBlbmQuJAorLS0tLS0tLS0tCisKK1VzZSAnZ2l0IHN0cmlwc3BhY2UgLS1zdHJpcC1jb21tZW50cycgdG8gb2J0YWluOgorCistLS0tLS0tLS0KK3xBIGJyaWVmIGludHJvZHVjdGlvbiQKK3wkCit8QSBuZXcgcGFyYWdyYXBoJAorfGV4cGxhaW5pbmcgbG90cyBvZiBzdHVmZi4kCit8JAorfFRoZSBlbmQuJAorLS0tLS0tLS0tCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN1Ym1vZHVsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzllZDJiZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN1Ym1vZHVsZS50eHQKQEAgLTAsMCArMSw0NTYgQEAKK2dpdC1zdWJtb2R1bGUoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXN1Ym1vZHVsZSAtIEluaXRpYWxpemUsIHVwZGF0ZSBvciBpbnNwZWN0IHN1Ym1vZHVsZXMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gWy0tY2FjaGVkXQorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBhZGQgWzxvcHRpb25zPl0gWy0tXSA8cmVwb3NpdG9yeT4gWzxwYXRoPl0KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc3RhdHVzIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIGluaXQgWy0tXSBbPHBhdGg+Li4uXQorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBkZWluaXQgWy1mfC0tZm9yY2VdICgtLWFsbHxbLS1dIDxwYXRoPi4uLikKKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gdXBkYXRlIFs8b3B0aW9ucz5dIFstLV0gWzxwYXRoPi4uLl0KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc2V0LWJyYW5jaCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoPgorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBzZXQtdXJsIFstLV0gPHBhdGg+IDxuZXd1cmw+CisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHN1bW1hcnkgWzxvcHRpb25zPl0gWy0tXSBbPHBhdGg+Li4uXQorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBmb3JlYWNoIFstLXJlY3Vyc2l2ZV0gPGNvbW1hbmQ+CisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHN5bmMgWy0tcmVjdXJzaXZlXSBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIGFic29yYmdpdGRpcnMgWy0tXSBbPHBhdGg+Li4uXQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorSW5zcGVjdHMsIHVwZGF0ZXMgYW5kIG1hbmFnZXMgc3VibW9kdWxlcy4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc3VibW9kdWxlcywgc2VlIGxpbmtnaXQ6Z2l0c3VibW9kdWxlc1s3XS4KKworQ09NTUFORFMKKy0tLS0tLS0tCitXaXRoIG5vIGFyZ3VtZW50cywgc2hvd3MgdGhlIHN0YXR1cyBvZiBleGlzdGluZyBzdWJtb2R1bGVzLiAgU2V2ZXJhbAorc3ViY29tbWFuZHMgYXJlIGF2YWlsYWJsZSB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gdGhlIHN1Ym1vZHVsZXMuCisKK2FkZCBbLWIgPGJyYW5jaD5dIFstZnwtLWZvcmNlXSBbLS1uYW1lIDxuYW1lPl0gWy0tcmVmZXJlbmNlIDxyZXBvc2l0b3J5Pl0gWy0tZGVwdGggPGRlcHRoPl0gWy0tXSA8cmVwb3NpdG9yeT4gWzxwYXRoPl06OgorCUFkZCB0aGUgZ2l2ZW4gcmVwb3NpdG9yeSBhcyBhIHN1Ym1vZHVsZSBhdCB0aGUgZ2l2ZW4gcGF0aAorCXRvIHRoZSBjaGFuZ2VzZXQgdG8gYmUgY29tbWl0dGVkIG5leHQgdG8gdGhlIGN1cnJlbnQKKwlwcm9qZWN0OiB0aGUgY3VycmVudCBwcm9qZWN0IGlzIHRlcm1lZCB0aGUgInN1cGVycHJvamVjdCIuCisrCis8cmVwb3NpdG9yeT4gaXMgdGhlIFVSTCBvZiB0aGUgbmV3IHN1Ym1vZHVsZSdzIG9yaWdpbiByZXBvc2l0b3J5LgorVGhpcyBtYXkgYmUgZWl0aGVyIGFuIGFic29sdXRlIFVSTCwgb3IgKGlmIGl0IGJlZ2lucyB3aXRoIC4vCitvciAuLi8pLCB0aGUgbG9jYXRpb24gcmVsYXRpdmUgdG8gdGhlIHN1cGVycHJvamVjdCdzIGRlZmF1bHQgcmVtb3RlCityZXBvc2l0b3J5IChQbGVhc2Ugbm90ZSB0aGF0IHRvIHNwZWNpZnkgYSByZXBvc2l0b3J5ICdmb28uZ2l0Jword2hpY2ggaXMgbG9jYXRlZCByaWdodCBuZXh0IHRvIGEgc3VwZXJwcm9qZWN0ICdiYXIuZ2l0JywgeW91J2xsCitoYXZlIHRvIHVzZSBgLi4vZm9vLmdpdGAgaW5zdGVhZCBvZiBgLi9mb28uZ2l0YCAtIGFzIG9uZSBtaWdodCBleHBlY3QKK3doZW4gZm9sbG93aW5nIHRoZSBydWxlcyBmb3IgcmVsYXRpdmUgVVJMcyAtIGJlY2F1c2UgdGhlIGV2YWx1YXRpb24KK29mIHJlbGF0aXZlIFVSTHMgaW4gR2l0IGlzIGlkZW50aWNhbCB0byB0aGF0IG9mIHJlbGF0aXZlIGRpcmVjdG9yaWVzKS4KKysKK1RoZSBkZWZhdWx0IHJlbW90ZSBpcyB0aGUgcmVtb3RlIG9mIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoCitvZiB0aGUgY3VycmVudCBicmFuY2guIElmIG5vIHN1Y2ggcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBleGlzdHMgb3IKK3RoZSBIRUFEIGlzIGRldGFjaGVkLCAib3JpZ2luIiBpcyBhc3N1bWVkIHRvIGJlIHRoZSBkZWZhdWx0IHJlbW90ZS4KK0lmIHRoZSBzdXBlcnByb2plY3QgZG9lc24ndCBoYXZlIGEgZGVmYXVsdCByZW1vdGUgY29uZmlndXJlZAordGhlIHN1cGVycHJvamVjdCBpcyBpdHMgb3duIGF1dGhvcml0YXRpdmUgdXBzdHJlYW0gYW5kIHRoZSBjdXJyZW50Cit3b3JraW5nIGRpcmVjdG9yeSBpcyB1c2VkIGluc3RlYWQuCisrCitUaGUgb3B0aW9uYWwgYXJndW1lbnQgPHBhdGg+IGlzIHRoZSByZWxhdGl2ZSBsb2NhdGlvbiBmb3IgdGhlIGNsb25lZAorc3VibW9kdWxlIHRvIGV4aXN0IGluIHRoZSBzdXBlcnByb2plY3QuIElmIDxwYXRoPiBpcyBub3QgZ2l2ZW4sIHRoZQorY2Fub25pY2FsIHBhcnQgb2YgdGhlIHNvdXJjZSByZXBvc2l0b3J5IGlzIHVzZWQgKCJyZXBvIiBmb3IKKyIvcGF0aC90by9yZXBvLmdpdCIgYW5kICJmb28iIGZvciAiaG9zdC54ejpmb28vLmdpdCIpLiBJZiA8cGF0aD4KK2V4aXN0cyBhbmQgaXMgYWxyZWFkeSBhIHZhbGlkIEdpdCByZXBvc2l0b3J5LCB0aGVuIGl0IGlzIHN0YWdlZAorZm9yIGNvbW1pdCB3aXRob3V0IGNsb25pbmcuIFRoZSA8cGF0aD4gaXMgYWxzbyB1c2VkIGFzIHRoZSBzdWJtb2R1bGUncworbG9naWNhbCBuYW1lIGluIGl0cyBjb25maWd1cmF0aW9uIGVudHJpZXMgdW5sZXNzIGAtLW5hbWVgIGlzIHVzZWQKK3RvIHNwZWNpZnkgYSBsb2dpY2FsIG5hbWUuCisrCitUaGUgZ2l2ZW4gVVJMIGlzIHJlY29yZGVkIGludG8gYC5naXRtb2R1bGVzYCBmb3IgdXNlIGJ5IHN1YnNlcXVlbnQgdXNlcnMKK2Nsb25pbmcgdGhlIHN1cGVycHJvamVjdC4gSWYgdGhlIFVSTCBpcyBnaXZlbiByZWxhdGl2ZSB0byB0aGUKK3N1cGVycHJvamVjdCdzIHJlcG9zaXRvcnksIHRoZSBwcmVzdW1wdGlvbiBpcyB0aGUgc3VwZXJwcm9qZWN0IGFuZAorc3VibW9kdWxlIHJlcG9zaXRvcmllcyB3aWxsIGJlIGtlcHQgdG9nZXRoZXIgaW4gdGhlIHNhbWUgcmVsYXRpdmUKK2xvY2F0aW9uLCBhbmQgb25seSB0aGUgc3VwZXJwcm9qZWN0J3MgVVJMIG5lZWRzIHRvIGJlIHByb3ZpZGVkLgorZ2l0LXN1Ym1vZHVsZSB3aWxsIGNvcnJlY3RseSBsb2NhdGUgdGhlIHN1Ym1vZHVsZSB1c2luZyB0aGUgcmVsYXRpdmUKK1VSTCBpbiBgLmdpdG1vZHVsZXNgLgorCitzdGF0dXMgWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl06OgorCVNob3cgdGhlIHN0YXR1cyBvZiB0aGUgc3VibW9kdWxlcy4gVGhpcyB3aWxsIHByaW50IHRoZSBTSEEtMSBvZiB0aGUKKwljdXJyZW50bHkgY2hlY2tlZCBvdXQgY29tbWl0IGZvciBlYWNoIHN1Ym1vZHVsZSwgYWxvbmcgd2l0aCB0aGUKKwlzdWJtb2R1bGUgcGF0aCBhbmQgdGhlIG91dHB1dCBvZiAnZ2l0IGRlc2NyaWJlJyBmb3IgdGhlCisJU0hBLTEuIEVhY2ggU0hBLTEgd2lsbCBwb3NzaWJseSBiZSBwcmVmaXhlZCB3aXRoIGAtYCBpZiB0aGUgc3VibW9kdWxlIGlzCisJbm90IGluaXRpYWxpemVkLCBgK2AgaWYgdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dCBzdWJtb2R1bGUgY29tbWl0CisJZG9lcyBub3QgbWF0Y2ggdGhlIFNIQS0xIGZvdW5kIGluIHRoZSBpbmRleCBvZiB0aGUgY29udGFpbmluZworCXJlcG9zaXRvcnkgYW5kIGBVYCBpZiB0aGUgc3VibW9kdWxlIGhhcyBtZXJnZSBjb25mbGljdHMuCisrCitJZiBgLS1jYWNoZWRgIGlzIHNwZWNpZmllZCwgdGhpcyBjb21tYW5kIHdpbGwgaW5zdGVhZCBwcmludCB0aGUgU0hBLTEKK3JlY29yZGVkIGluIHRoZSBzdXBlcnByb2plY3QgZm9yIGVhY2ggc3VibW9kdWxlLgorKworSWYgYC0tcmVjdXJzaXZlYCBpcyBzcGVjaWZpZWQsIHRoaXMgY29tbWFuZCB3aWxsIHJlY3Vyc2UgaW50byBuZXN0ZWQKK3N1Ym1vZHVsZXMsIGFuZCBzaG93IHRoZWlyIHN0YXR1cyBhcyB3ZWxsLgorKworSWYgeW91IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gY2hhbmdlcyBvZiB0aGUgY3VycmVudGx5IGluaXRpYWxpemVkCitzdWJtb2R1bGVzIHdpdGggcmVzcGVjdCB0byB0aGUgY29tbWl0IHJlY29yZGVkIGluIHRoZSBpbmRleCBvciB0aGUgSEVBRCwKK2xpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBhbmQgbGlua2dpdDpnaXQtZGlmZlsxXSB3aWxsIHByb3ZpZGUgdGhhdCBpbmZvcm1hdGlvbgordG9vIChhbmQgY2FuIGFsc28gcmVwb3J0IGNoYW5nZXMgdG8gYSBzdWJtb2R1bGUncyB3b3JrIHRyZWUpLgorCitpbml0IFstLV0gWzxwYXRoPi4uLl06OgorCUluaXRpYWxpemUgdGhlIHN1Ym1vZHVsZXMgcmVjb3JkZWQgaW4gdGhlIGluZGV4ICh3aGljaCB3ZXJlCisJYWRkZWQgYW5kIGNvbW1pdHRlZCBlbHNld2hlcmUpIGJ5IHNldHRpbmcgYHN1Ym1vZHVsZS4kbmFtZS51cmxgCisJaW4gLmdpdC9jb25maWcuIEl0IHVzZXMgdGhlIHNhbWUgc2V0dGluZyBmcm9tIGAuZ2l0bW9kdWxlc2AgYXMKKwlhIHRlbXBsYXRlLiBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlLCBpdCB3aWxsIGJlIHJlc29sdmVkIHVzaW5nCisJdGhlIGRlZmF1bHQgcmVtb3RlLiBJZiB0aGVyZSBpcyBubyBkZWZhdWx0IHJlbW90ZSwgdGhlIGN1cnJlbnQKKwlyZXBvc2l0b3J5IHdpbGwgYmUgYXNzdW1lZCB0byBiZSB1cHN0cmVhbS4KKysKK09wdGlvbmFsIDxwYXRoPiBhcmd1bWVudHMgbGltaXQgd2hpY2ggc3VibW9kdWxlcyB3aWxsIGJlIGluaXRpYWxpemVkLgorSWYgbm8gcGF0aCBpcyBzcGVjaWZpZWQgYW5kIHN1Ym1vZHVsZS5hY3RpdmUgaGFzIGJlZW4gY29uZmlndXJlZCwgc3VibW9kdWxlcworY29uZmlndXJlZCB0byBiZSBhY3RpdmUgd2lsbCBiZSBpbml0aWFsaXplZCwgb3RoZXJ3aXNlIGFsbCBzdWJtb2R1bGVzIGFyZQoraW5pdGlhbGl6ZWQuCisrCitXaGVuIHByZXNlbnQsIGl0IHdpbGwgYWxzbyBjb3B5IHRoZSB2YWx1ZSBvZiBgc3VibW9kdWxlLiRuYW1lLnVwZGF0ZWAuCitUaGlzIGNvbW1hbmQgZG9lcyBub3QgYWx0ZXIgZXhpc3RpbmcgaW5mb3JtYXRpb24gaW4gLmdpdC9jb25maWcuCitZb3UgY2FuIHRoZW4gY3VzdG9taXplIHRoZSBzdWJtb2R1bGUgY2xvbmUgVVJMcyBpbiAuZ2l0L2NvbmZpZworZm9yIHlvdXIgbG9jYWwgc2V0dXAgYW5kIHByb2NlZWQgdG8gYGdpdCBzdWJtb2R1bGUgdXBkYXRlYDsKK3lvdSBjYW4gYWxzbyBqdXN0IHVzZSBgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0YCB3aXRob3V0Cit0aGUgZXhwbGljaXQgJ2luaXQnIHN0ZXAgaWYgeW91IGRvIG5vdCBpbnRlbmQgdG8gY3VzdG9taXplCithbnkgc3VibW9kdWxlIGxvY2F0aW9ucy4KKysKK1NlZSB0aGUgYWRkIHN1YmNvbW1hbmQgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGRlZmF1bHQgcmVtb3RlLgorCitkZWluaXQgWy1mfC0tZm9yY2VdICgtLWFsbHxbLS1dIDxwYXRoPi4uLik6OgorCVVucmVnaXN0ZXIgdGhlIGdpdmVuIHN1Ym1vZHVsZXMsIGkuZS4gcmVtb3ZlIHRoZSB3aG9sZQorCWBzdWJtb2R1bGUuJG5hbWVgIHNlY3Rpb24gZnJvbSAuZ2l0L2NvbmZpZyB0b2dldGhlciB3aXRoIHRoZWlyIHdvcmsKKwl0cmVlLiBGdXJ0aGVyIGNhbGxzIHRvIGBnaXQgc3VibW9kdWxlIHVwZGF0ZWAsIGBnaXQgc3VibW9kdWxlIGZvcmVhY2hgCisJYW5kIGBnaXQgc3VibW9kdWxlIHN5bmNgIHdpbGwgc2tpcCBhbnkgdW5yZWdpc3RlcmVkIHN1Ym1vZHVsZXMgdW50aWwKKwl0aGV5IGFyZSBpbml0aWFsaXplZCBhZ2Fpbiwgc28gdXNlIHRoaXMgY29tbWFuZCBpZiB5b3UgZG9uJ3Qgd2FudCB0bworCWhhdmUgYSBsb2NhbCBjaGVja291dCBvZiB0aGUgc3VibW9kdWxlIGluIHlvdXIgd29ya2luZyB0cmVlIGFueW1vcmUuCisrCitXaGVuIHRoZSBjb21tYW5kIGlzIHJ1biB3aXRob3V0IHBhdGhzcGVjLCBpdCBlcnJvcnMgb3V0LAoraW5zdGVhZCBvZiBkZWluaXQtaW5nIGV2ZXJ5dGhpbmcsIHRvIHByZXZlbnQgbWlzdGFrZXMuCisrCitJZiBgLS1mb3JjZWAgaXMgc3BlY2lmaWVkLCB0aGUgc3VibW9kdWxlJ3Mgd29ya2luZyB0cmVlIHdpbGwKK2JlIHJlbW92ZWQgZXZlbiBpZiBpdCBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zLgorKworSWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBhIHN1Ym1vZHVsZSBmcm9tIHRoZSByZXBvc2l0b3J5IGFuZCBjb21taXQKK3RoYXQgdXNlIGxpbmtnaXQ6Z2l0LXJtWzFdIGluc3RlYWQuIFNlZSBsaW5rZ2l0OmdpdHN1Ym1vZHVsZXNbN10gZm9yIHJlbW92YWwKK29wdGlvbnMuCisKK3VwZGF0ZSBbLS1pbml0XSBbLS1yZW1vdGVdIFstTnwtLW5vLWZldGNoXSBbLS1bbm8tXXJlY29tbWVuZC1zaGFsbG93XSBbLWZ8LS1mb3JjZV0gWy0tY2hlY2tvdXR8LS1yZWJhc2V8LS1tZXJnZV0gWy0tcmVmZXJlbmNlIDxyZXBvc2l0b3J5Pl0gWy0tZGVwdGggPGRlcHRoPl0gWy0tcmVjdXJzaXZlXSBbLS1qb2JzIDxuPl0gWy0tW25vLV1zaW5nbGUtYnJhbmNoXSBbLS1dIFs8cGF0aD4uLi5dOjoKKysKKy0tCitVcGRhdGUgdGhlIHJlZ2lzdGVyZWQgc3VibW9kdWxlcyB0byBtYXRjaCB3aGF0IHRoZSBzdXBlcnByb2plY3QKK2V4cGVjdHMgYnkgY2xvbmluZyBtaXNzaW5nIHN1Ym1vZHVsZXMsIGZldGNoaW5nIG1pc3NpbmcgY29tbWl0cworaW4gc3VibW9kdWxlcyBhbmQgdXBkYXRpbmcgdGhlIHdvcmtpbmcgdHJlZSBvZgordGhlIHN1Ym1vZHVsZXMuIFRoZSAidXBkYXRpbmciIGNhbiBiZSBkb25lIGluIHNldmVyYWwgd2F5cyBkZXBlbmRpbmcKK29uIGNvbW1hbmQgbGluZSBvcHRpb25zIGFuZCB0aGUgdmFsdWUgb2YgYHN1Ym1vZHVsZS48bmFtZT4udXBkYXRlYAorY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gVGhlIGNvbW1hbmQgbGluZSBvcHRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyCit0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gSWYgbmVpdGhlciBpcyBnaXZlbiwgYSAnY2hlY2tvdXQnIGlzIHBlcmZvcm1lZC4KK1RoZSAndXBkYXRlJyBwcm9jZWR1cmVzIHN1cHBvcnRlZCBib3RoIGZyb20gdGhlIGNvbW1hbmQgbGluZSBhcyB3ZWxsIGFzCit0aHJvdWdoIHRoZSBgc3VibW9kdWxlLjxuYW1lPi51cGRhdGVgIGNvbmZpZ3VyYXRpb24gYXJlOgorCisJY2hlY2tvdXQ7OyB0aGUgY29tbWl0IHJlY29yZGVkIGluIHRoZSBzdXBlcnByb2plY3Qgd2lsbCBiZQorCSAgICBjaGVja2VkIG91dCBpbiB0aGUgc3VibW9kdWxlIG9uIGEgZGV0YWNoZWQgSEVBRC4KKysKK0lmIGAtLWZvcmNlYCBpcyBzcGVjaWZpZWQsIHRoZSBzdWJtb2R1bGUgd2lsbCBiZSBjaGVja2VkIG91dCAodXNpbmcKK2BnaXQgY2hlY2tvdXQgLS1mb3JjZWApLCBldmVuIGlmIHRoZSBjb21taXQgc3BlY2lmaWVkCitpbiB0aGUgaW5kZXggb2YgdGhlIGNvbnRhaW5pbmcgcmVwb3NpdG9yeSBhbHJlYWR5IG1hdGNoZXMgdGhlIGNvbW1pdAorY2hlY2tlZCBvdXQgaW4gdGhlIHN1Ym1vZHVsZS4KKworCXJlYmFzZTs7IHRoZSBjdXJyZW50IGJyYW5jaCBvZiB0aGUgc3VibW9kdWxlIHdpbGwgYmUgcmViYXNlZAorCSAgICBvbnRvIHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdC4KKworCW1lcmdlOzsgdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IHdpbGwgYmUgbWVyZ2VkCisJICAgIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoIGluIHRoZSBzdWJtb2R1bGUuCisKK1RoZSBmb2xsb3dpbmcgJ3VwZGF0ZScgcHJvY2VkdXJlcyBhcmUgb25seSBhdmFpbGFibGUgdmlhIHRoZQorYHN1Ym1vZHVsZS48bmFtZT4udXBkYXRlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlOgorCisJY3VzdG9tIGNvbW1hbmQ7OyBhcmJpdHJhcnkgc2hlbGwgY29tbWFuZCB0aGF0IHRha2VzIGEgc2luZ2xlCisJICAgIGFyZ3VtZW50ICh0aGUgc2hhMSBvZiB0aGUgY29tbWl0IHJlY29yZGVkIGluIHRoZQorCSAgICBzdXBlcnByb2plY3QpIGlzIGV4ZWN1dGVkLiBXaGVuIGBzdWJtb2R1bGUuPG5hbWU+LnVwZGF0ZWAKKwkgICAgaXMgc2V0IHRvICchY29tbWFuZCcsIHRoZSByZW1haW5kZXIgYWZ0ZXIgdGhlIGV4Y2xhbWF0aW9uIG1hcmsKKwkgICAgaXMgdGhlIGN1c3RvbSBjb21tYW5kLgorCisJbm9uZTs7IHRoZSBzdWJtb2R1bGUgaXMgbm90IHVwZGF0ZWQuCisKK0lmIHRoZSBzdWJtb2R1bGUgaXMgbm90IHlldCBpbml0aWFsaXplZCwgYW5kIHlvdSBqdXN0IHdhbnQgdG8gdXNlIHRoZQorc2V0dGluZyBhcyBzdG9yZWQgaW4gYC5naXRtb2R1bGVzYCwgeW91IGNhbiBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemUgdGhlCitzdWJtb2R1bGUgd2l0aCB0aGUgYC0taW5pdGAgb3B0aW9uLgorCitJZiBgLS1yZWN1cnNpdmVgIGlzIHNwZWNpZmllZCwgdGhpcyBjb21tYW5kIHdpbGwgcmVjdXJzZSBpbnRvIHRoZQorcmVnaXN0ZXJlZCBzdWJtb2R1bGVzLCBhbmQgdXBkYXRlIGFueSBuZXN0ZWQgc3VibW9kdWxlcyB3aXRoaW4uCistLQorc2V0LWJyYW5jaCAoLWJ8LS1icmFuY2gpIDxicmFuY2g+IFstLV0gPHBhdGg+OjoKK3NldC1icmFuY2ggKC1kfC0tZGVmYXVsdCkgWy0tXSA8cGF0aD46OgorCVNldHMgdGhlIGRlZmF1bHQgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBmb3IgdGhlIHN1Ym1vZHVsZS4gVGhlCisJYC0tYnJhbmNoYCBvcHRpb24gYWxsb3dzIHRoZSByZW1vdGUgYnJhbmNoIHRvIGJlIHNwZWNpZmllZC4gVGhlCisJYC0tZGVmYXVsdGAgb3B0aW9uIHJlbW92ZXMgdGhlIHN1Ym1vZHVsZS48bmFtZT4uYnJhbmNoIGNvbmZpZ3VyYXRpb24KKwlrZXksIHdoaWNoIGNhdXNlcyB0aGUgdHJhY2tpbmcgYnJhbmNoIHRvIGRlZmF1bHQgdG8gJ21hc3RlcicuCisKK3NldC11cmwgWy0tXSA8cGF0aD4gPG5ld3VybD46OgorCVNldHMgdGhlIFVSTCBvZiB0aGUgc3BlY2lmaWVkIHN1Ym1vZHVsZSB0byA8bmV3dXJsPi4gVGhlbiwgaXQgd2lsbAorCWF1dG9tYXRpY2FsbHkgc3luY2hyb25pemUgdGhlIHN1Ym1vZHVsZSdzIG5ldyByZW1vdGUgVVJMCisJY29uZmlndXJhdGlvbi4KKworc3VtbWFyeSBbLS1jYWNoZWR8LS1maWxlc10gWygtbnwtLXN1bW1hcnktbGltaXQpIDxuPl0gW2NvbW1pdF0gWy0tXSBbPHBhdGg+Li4uXTo6CisJU2hvdyBjb21taXQgc3VtbWFyeSBiZXR3ZWVuIHRoZSBnaXZlbiBjb21taXQgKGRlZmF1bHRzIHRvIEhFQUQpIGFuZAorCXdvcmtpbmcgdHJlZS9pbmRleC4gRm9yIGEgc3VibW9kdWxlIGluIHF1ZXN0aW9uLCBhIHNlcmllcyBvZiBjb21taXRzCisJaW4gdGhlIHN1Ym1vZHVsZSBiZXR3ZWVuIHRoZSBnaXZlbiBzdXBlciBwcm9qZWN0IGNvbW1pdCBhbmQgdGhlCisJaW5kZXggb3Igd29ya2luZyB0cmVlIChzd2l0Y2hlZCBieSBgLS1jYWNoZWRgKSBhcmUgc2hvd24uIElmIHRoZSBvcHRpb24KKwlgLS1maWxlc2AgaXMgZ2l2ZW4sIHNob3cgdGhlIHNlcmllcyBvZiBjb21taXRzIGluIHRoZSBzdWJtb2R1bGUgYmV0d2VlbgorCXRoZSBpbmRleCBvZiB0aGUgc3VwZXIgcHJvamVjdCBhbmQgdGhlIHdvcmtpbmcgdHJlZSBvZiB0aGUgc3VibW9kdWxlCisJKHRoaXMgb3B0aW9uIGRvZXNuJ3QgYWxsb3cgdG8gdXNlIHRoZSBgLS1jYWNoZWRgIG9wdGlvbiBvciB0byBwcm92aWRlIGFuCisJZXhwbGljaXQgY29tbWl0KS4KKysKK1VzaW5nIHRoZSBgLS1zdWJtb2R1bGU9bG9nYCBvcHRpb24gd2l0aCBsaW5rZ2l0OmdpdC1kaWZmWzFdIHdpbGwgcHJvdmlkZSB0aGF0CitpbmZvcm1hdGlvbiB0b28uCisKK2ZvcmVhY2ggWy0tcmVjdXJzaXZlXSA8Y29tbWFuZD46OgorCUV2YWx1YXRlcyBhbiBhcmJpdHJhcnkgc2hlbGwgY29tbWFuZCBpbiBlYWNoIGNoZWNrZWQgb3V0IHN1Ym1vZHVsZS4KKwlUaGUgY29tbWFuZCBoYXMgYWNjZXNzIHRvIHRoZSB2YXJpYWJsZXMgJG5hbWUsICRzbV9wYXRoLCAkZGlzcGxheXBhdGgsCisJJHNoYTEgYW5kICR0b3BsZXZlbDoKKwkkbmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgcmVsZXZhbnQgc3VibW9kdWxlIHNlY3Rpb24gaW4gYC5naXRtb2R1bGVzYCwKKwkkc21fcGF0aCBpcyB0aGUgcGF0aCBvZiB0aGUgc3VibW9kdWxlIGFzIHJlY29yZGVkIGluIHRoZSBpbW1lZGlhdGUKKwlzdXBlcnByb2plY3QsICRkaXNwbGF5cGF0aCBjb250YWlucyB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZQorCWN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIHN1Ym1vZHVsZXMgcm9vdCBkaXJlY3RvcnksCisJJHNoYTEgaXMgdGhlIGNvbW1pdCBhcyByZWNvcmRlZCBpbiB0aGUgaW1tZWRpYXRlCisJc3VwZXJwcm9qZWN0LCBhbmQgJHRvcGxldmVsIGlzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB0b3AtbGV2ZWwKKwlvZiB0aGUgaW1tZWRpYXRlIHN1cGVycHJvamVjdC4KKwlOb3RlIHRoYXQgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggJyRQQVRIJyBvbiBXaW5kb3dzLCB0aGUgJyRwYXRoJworCXZhcmlhYmxlIGlzIG5vdyBhIGRlcHJlY2F0ZWQgc3lub255bSBvZiAnJHNtX3BhdGgnIHZhcmlhYmxlLgorCUFueSBzdWJtb2R1bGVzIGRlZmluZWQgaW4gdGhlIHN1cGVycHJvamVjdCBidXQgbm90IGNoZWNrZWQgb3V0IGFyZQorCWlnbm9yZWQgYnkgdGhpcyBjb21tYW5kLiBVbmxlc3MgZ2l2ZW4gYC0tcXVpZXRgLCBmb3JlYWNoIHByaW50cyB0aGUgbmFtZQorCW9mIGVhY2ggc3VibW9kdWxlIGJlZm9yZSBldmFsdWF0aW5nIHRoZSBjb21tYW5kLgorCUlmIGAtLXJlY3Vyc2l2ZWAgaXMgZ2l2ZW4sIHN1Ym1vZHVsZXMgYXJlIHRyYXZlcnNlZCByZWN1cnNpdmVseSAoaS5lLgorCXRoZSBnaXZlbiBzaGVsbCBjb21tYW5kIGlzIGV2YWx1YXRlZCBpbiBuZXN0ZWQgc3VibW9kdWxlcyBhcyB3ZWxsKS4KKwlBIG5vbi16ZXJvIHJldHVybiBmcm9tIHRoZSBjb21tYW5kIGluIGFueSBzdWJtb2R1bGUgY2F1c2VzCisJdGhlIHByb2Nlc3NpbmcgdG8gdGVybWluYXRlLiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGFkZGluZyAnfHwgOicKKwl0byB0aGUgZW5kIG9mIHRoZSBjb21tYW5kLgorKworQXMgYW4gZXhhbXBsZSwgdGhlIGNvbW1hbmQgYmVsb3cgd2lsbCBzaG93IHRoZSBwYXRoIGFuZCBjdXJyZW50bHkKK2NoZWNrZWQgb3V0IGNvbW1pdCBmb3IgZWFjaCBzdWJtb2R1bGU6CisrCistLS0tLS0tLS0tLS0tLQorZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoICdlY2hvICRzbV9wYXRoIGBnaXQgcmV2LXBhcnNlIEhFQURgJworLS0tLS0tLS0tLS0tLS0KKworc3luYyBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl06OgorCVN5bmNocm9uaXplcyBzdWJtb2R1bGVzJyByZW1vdGUgVVJMIGNvbmZpZ3VyYXRpb24gc2V0dGluZworCXRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgaW4gYC5naXRtb2R1bGVzYC4gSXQgd2lsbCBvbmx5IGFmZmVjdCB0aG9zZQorCXN1Ym1vZHVsZXMgd2hpY2ggYWxyZWFkeSBoYXZlIGEgVVJMIGVudHJ5IGluIC5naXQvY29uZmlnICh0aGF0IGlzIHRoZQorCWNhc2Ugd2hlbiB0aGV5IGFyZSBpbml0aWFsaXplZCBvciBmcmVzaGx5IGFkZGVkKS4gVGhpcyBpcyB1c2VmdWwgd2hlbgorCXN1Ym1vZHVsZSBVUkxzIGNoYW5nZSB1cHN0cmVhbSBhbmQgeW91IG5lZWQgdG8gdXBkYXRlIHlvdXIgbG9jYWwKKwlyZXBvc2l0b3JpZXMgYWNjb3JkaW5nbHkuCisrCitgZ2l0IHN1Ym1vZHVsZSBzeW5jYCBzeW5jaHJvbml6ZXMgYWxsIHN1Ym1vZHVsZXMgd2hpbGUKK2BnaXQgc3VibW9kdWxlIHN5bmMgLS0gQWAgc3luY2hyb25pemVzIHN1Ym1vZHVsZSAiQSIgb25seS4KKysKK0lmIGAtLXJlY3Vyc2l2ZWAgaXMgc3BlY2lmaWVkLCB0aGlzIGNvbW1hbmQgd2lsbCByZWN1cnNlIGludG8gdGhlCityZWdpc3RlcmVkIHN1Ym1vZHVsZXMsIGFuZCBzeW5jIGFueSBuZXN0ZWQgc3VibW9kdWxlcyB3aXRoaW4uCisKK2Fic29yYmdpdGRpcnM6OgorCUlmIGEgZ2l0IGRpcmVjdG9yeSBvZiBhIHN1Ym1vZHVsZSBpcyBpbnNpZGUgdGhlIHN1Ym1vZHVsZSwKKwltb3ZlIHRoZSBnaXQgZGlyZWN0b3J5IG9mIHRoZSBzdWJtb2R1bGUgaW50byBpdHMgc3VwZXJwcm9qZWN0J3MKKwlgJEdJVF9ESVIvbW9kdWxlc2AgcGF0aCBhbmQgdGhlbiBjb25uZWN0IHRoZSBnaXQgZGlyZWN0b3J5IGFuZAorCWl0cyB3b3JraW5nIGRpcmVjdG9yeSBieSBzZXR0aW5nIHRoZSBgY29yZS53b3JrdHJlZWAgYW5kIGFkZGluZworCWEgLmdpdCBmaWxlIHBvaW50aW5nIHRvIHRoZSBnaXQgZGlyZWN0b3J5IGVtYmVkZGVkIGluIHRoZQorCXN1cGVycHJvamVjdHMgZ2l0IGRpcmVjdG9yeS4KKysKK0EgcmVwb3NpdG9yeSB0aGF0IHdhcyBjbG9uZWQgaW5kZXBlbmRlbnRseSBhbmQgbGF0ZXIgYWRkZWQgYXMgYSBzdWJtb2R1bGUgb3IKK29sZCBzZXR1cHMgaGF2ZSB0aGUgc3VibW9kdWxlcyBnaXQgZGlyZWN0b3J5IGluc2lkZSB0aGUgc3VibW9kdWxlIGluc3RlYWQgb2YKK2VtYmVkZGVkIGludG8gdGhlIHN1cGVycHJvamVjdHMgZ2l0IGRpcmVjdG9yeS4KKysKK1RoaXMgY29tbWFuZCBpcyByZWN1cnNpdmUgYnkgZGVmYXVsdC4KKworT1BUSU9OUworLS0tLS0tLQorLXE6OgorLS1xdWlldDo6CisJT25seSBwcmludCBlcnJvciBtZXNzYWdlcy4KKworLS1wcm9ncmVzczo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYWRkIGFuZCB1cGRhdGUgY29tbWFuZHMuCisJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKwlieSBkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzIC1xCisJaXMgc3BlY2lmaWVkLiBUaGlzIGZsYWcgZm9yY2VzIHByb2dyZXNzIHN0YXR1cyBldmVuIGlmIHRoZQorCXN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBub3QgZGlyZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KKworLS1hbGw6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBkZWluaXQgY29tbWFuZC4gVW5yZWdpc3RlciBhbGwKKwlzdWJtb2R1bGVzIGluIHRoZSB3b3JraW5nIHRyZWUuCisKKy1iIDxicmFuY2g+OjoKKy0tYnJhbmNoIDxicmFuY2g+OjoKKwlCcmFuY2ggb2YgcmVwb3NpdG9yeSB0byBhZGQgYXMgc3VibW9kdWxlLgorCVRoZSBuYW1lIG9mIHRoZSBicmFuY2ggaXMgcmVjb3JkZWQgYXMgYHN1Ym1vZHVsZS48bmFtZT4uYnJhbmNoYCBpbgorCWAuZ2l0bW9kdWxlc2AgZm9yIGB1cGRhdGUgLS1yZW1vdGVgLiAgQSBzcGVjaWFsIHZhbHVlIG9mIGAuYCBpcyB1c2VkIHRvCisJaW5kaWNhdGUgdGhhdCB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIGluIHRoZSBzdWJtb2R1bGUgc2hvdWxkIGJlIHRoZQorCXNhbWUgbmFtZSBhcyB0aGUgY3VycmVudCBicmFuY2ggaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4gIElmIHRoZQorCW9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byAnbWFzdGVyJy4KKworLWY6OgorLS1mb3JjZTo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYWRkLCBkZWluaXQgYW5kIHVwZGF0ZSBjb21tYW5kcy4KKwlXaGVuIHJ1bm5pbmcgYWRkLCBhbGxvdyBhZGRpbmcgYW4gb3RoZXJ3aXNlIGlnbm9yZWQgc3VibW9kdWxlIHBhdGguCisJV2hlbiBydW5uaW5nIGRlaW5pdCB0aGUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZXMgd2lsbCBiZSByZW1vdmVkIGV2ZW4KKwlpZiB0aGV5IGNvbnRhaW4gbG9jYWwgY2hhbmdlcy4KKwlXaGVuIHJ1bm5pbmcgdXBkYXRlIChvbmx5IGVmZmVjdGl2ZSB3aXRoIHRoZSBjaGVja291dCBwcm9jZWR1cmUpLAorCXRocm93IGF3YXkgbG9jYWwgY2hhbmdlcyBpbiBzdWJtb2R1bGVzIHdoZW4gc3dpdGNoaW5nIHRvIGEKKwlkaWZmZXJlbnQgY29tbWl0OyBhbmQgYWx3YXlzIHJ1biBhIGNoZWNrb3V0IG9wZXJhdGlvbiBpbiB0aGUKKwlzdWJtb2R1bGUsIGV2ZW4gaWYgdGhlIGNvbW1pdCBsaXN0ZWQgaW4gdGhlIGluZGV4IG9mIHRoZQorCWNvbnRhaW5pbmcgcmVwb3NpdG9yeSBtYXRjaGVzIHRoZSBjb21taXQgY2hlY2tlZCBvdXQgaW4gdGhlCisJc3VibW9kdWxlLgorCistLWNhY2hlZDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3Igc3RhdHVzIGFuZCBzdW1tYXJ5IGNvbW1hbmRzLiAgVGhlc2UKKwljb21tYW5kcyB0eXBpY2FsbHkgdXNlIHRoZSBjb21taXQgZm91bmQgaW4gdGhlIHN1Ym1vZHVsZSBIRUFELCBidXQKKwl3aXRoIHRoaXMgb3B0aW9uLCB0aGUgY29tbWl0IHN0b3JlZCBpbiB0aGUgaW5kZXggaXMgdXNlZCBpbnN0ZWFkLgorCistLWZpbGVzOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgc3VtbWFyeSBjb21tYW5kLiBUaGlzIGNvbW1hbmQKKwljb21wYXJlcyB0aGUgY29tbWl0IGluIHRoZSBpbmRleCB3aXRoIHRoYXQgaW4gdGhlIHN1Ym1vZHVsZSBIRUFECisJd2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLgorCistbjo6CistLXN1bW1hcnktbGltaXQ6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBzdW1tYXJ5IGNvbW1hbmQuCisJTGltaXQgdGhlIHN1bW1hcnkgc2l6ZSAobnVtYmVyIG9mIGNvbW1pdHMgc2hvd24gaW4gdG90YWwpLgorCUdpdmluZyAwIHdpbGwgZGlzYWJsZSB0aGUgc3VtbWFyeTsgYSBuZWdhdGl2ZSBudW1iZXIgbWVhbnMgdW5saW1pdGVkCisJKHRoZSBkZWZhdWx0KS4gVGhpcyBsaW1pdCBvbmx5IGFwcGxpZXMgdG8gbW9kaWZpZWQgc3VibW9kdWxlcy4gVGhlCisJc2l6ZSBpcyBhbHdheXMgbGltaXRlZCB0byAxIGZvciBhZGRlZC9kZWxldGVkL3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZXMuCisKKy0tcmVtb3RlOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgdXBkYXRlIGNvbW1hbmQuICBJbnN0ZWFkIG9mIHVzaW5nCisJdGhlIHN1cGVycHJvamVjdCdzIHJlY29yZGVkIFNIQS0xIHRvIHVwZGF0ZSB0aGUgc3VibW9kdWxlLCB1c2UgdGhlCisJc3RhdHVzIG9mIHRoZSBzdWJtb2R1bGUncyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLiAgVGhlIHJlbW90ZSB1c2VkCisJaXMgYnJhbmNoJ3MgcmVtb3RlIChgYnJhbmNoLjxuYW1lPi5yZW1vdGVgKSwgZGVmYXVsdGluZyB0byBgb3JpZ2luYC4KKwlUaGUgcmVtb3RlIGJyYW5jaCB1c2VkIGRlZmF1bHRzIHRvIGBtYXN0ZXJgLCBidXQgdGhlIGJyYW5jaCBuYW1lIG1heQorCWJlIG92ZXJyaWRkZW4gYnkgc2V0dGluZyB0aGUgYHN1Ym1vZHVsZS48bmFtZT4uYnJhbmNoYCBvcHRpb24gaW4KKwllaXRoZXIgYC5naXRtb2R1bGVzYCBvciBgLmdpdC9jb25maWdgICh3aXRoIGAuZ2l0L2NvbmZpZ2AgdGFraW5nCisJcHJlY2VkZW5jZSkuCisrCitUaGlzIHdvcmtzIGZvciBhbnkgb2YgdGhlIHN1cHBvcnRlZCB1cGRhdGUgcHJvY2VkdXJlcyAoYC0tY2hlY2tvdXRgLAorYC0tcmViYXNlYCwgZXRjLikuICBUaGUgb25seSBjaGFuZ2UgaXMgdGhlIHNvdXJjZSBvZiB0aGUgdGFyZ2V0IFNIQS0xLgorRm9yIGV4YW1wbGUsIGBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlIC0tbWVyZ2VgIHdpbGwgbWVyZ2UgdXBzdHJlYW0KK3N1Ym1vZHVsZSBjaGFuZ2VzIGludG8gdGhlIHN1Ym1vZHVsZXMsIHdoaWxlIGBzdWJtb2R1bGUgdXBkYXRlCistLW1lcmdlYCB3aWxsIG1lcmdlIHN1cGVycHJvamVjdCBnaXRsaW5rIGNoYW5nZXMgaW50byB0aGUgc3VibW9kdWxlcy4KKysKK0luIG9yZGVyIHRvIGVuc3VyZSBhIGN1cnJlbnQgdHJhY2tpbmcgYnJhbmNoIHN0YXRlLCBgdXBkYXRlIC0tcmVtb3RlYAorZmV0Y2hlcyB0aGUgc3VibW9kdWxlJ3MgcmVtb3RlIHJlcG9zaXRvcnkgYmVmb3JlIGNhbGN1bGF0aW5nIHRoZQorU0hBLTEuICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBmZXRjaCwgeW91IHNob3VsZCB1c2UgYHN1Ym1vZHVsZSB1cGRhdGUKKy0tcmVtb3RlIC0tbm8tZmV0Y2hgLgorKworVXNlIHRoaXMgb3B0aW9uIHRvIGludGVncmF0ZSBjaGFuZ2VzIGZyb20gdGhlIHVwc3RyZWFtIHN1YnByb2plY3Qgd2l0aAoreW91ciBzdWJtb2R1bGUncyBjdXJyZW50IEhFQUQuICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHJ1biBgZ2l0IHB1bGxgCitmcm9tIHRoZSBzdWJtb2R1bGUsIHdoaWNoIGlzIGVxdWl2YWxlbnQgZXhjZXB0IGZvciB0aGUgcmVtb3RlIGJyYW5jaAorbmFtZTogYHVwZGF0ZSAtLXJlbW90ZWAgdXNlcyB0aGUgZGVmYXVsdCB1cHN0cmVhbSByZXBvc2l0b3J5IGFuZAorYHN1Ym1vZHVsZS48bmFtZT4uYnJhbmNoYCwgd2hpbGUgYGdpdCBwdWxsYCB1c2VzIHRoZSBzdWJtb2R1bGUncworYGJyYW5jaC48bmFtZT4ubWVyZ2VgLiAgUHJlZmVyIGBzdWJtb2R1bGUuPG5hbWU+LmJyYW5jaGAgaWYgeW91IHdhbnQKK3RvIGRpc3RyaWJ1dGUgdGhlIGRlZmF1bHQgdXBzdHJlYW0gYnJhbmNoIHdpdGggdGhlIHN1cGVycHJvamVjdCBhbmQKK2BicmFuY2guPG5hbWU+Lm1lcmdlYCBpZiB5b3Ugd2FudCBhIG1vcmUgbmF0aXZlIGZlZWwgd2hpbGUgd29ya2luZyBpbgordGhlIHN1Ym1vZHVsZSBpdHNlbGYuCisKKy1OOjoKKy0tbm8tZmV0Y2g6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSB1cGRhdGUgY29tbWFuZC4KKwlEb24ndCBmZXRjaCBuZXcgb2JqZWN0cyBmcm9tIHRoZSByZW1vdGUgc2l0ZS4KKworLS1jaGVja291dDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHVwZGF0ZSBjb21tYW5kLgorCUNoZWNrb3V0IHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCBvbiBhIGRldGFjaGVkIEhFQUQKKwlpbiB0aGUgc3VibW9kdWxlLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB0aGUgbWFpbiB1c2Ugb2YKKwl0aGlzIG9wdGlvbiBpcyB0byBvdmVycmlkZSBgc3VibW9kdWxlLiRuYW1lLnVwZGF0ZWAgd2hlbiBzZXQgdG8KKwlhIHZhbHVlIG90aGVyIHRoYW4gYGNoZWNrb3V0YC4KKwlJZiB0aGUga2V5IGBzdWJtb2R1bGUuJG5hbWUudXBkYXRlYCBpcyBlaXRoZXIgbm90IGV4cGxpY2l0bHkgc2V0IG9yCisJc2V0IHRvIGBjaGVja291dGAsIHRoaXMgb3B0aW9uIGlzIGltcGxpY2l0LgorCistLW1lcmdlOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgdXBkYXRlIGNvbW1hbmQuCisJTWVyZ2UgdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IGludG8gdGhlIGN1cnJlbnQgYnJhbmNoCisJb2YgdGhlIHN1Ym1vZHVsZS4gSWYgdGhpcyBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBzdWJtb2R1bGUncyBIRUFEIHdpbGwKKwlub3QgYmUgZGV0YWNoZWQuIElmIGEgbWVyZ2UgZmFpbHVyZSBwcmV2ZW50cyB0aGlzIHByb2Nlc3MsIHlvdSB3aWxsCisJaGF2ZSB0byByZXNvbHZlIHRoZSByZXN1bHRpbmcgY29uZmxpY3RzIHdpdGhpbiB0aGUgc3VibW9kdWxlIHdpdGggdGhlCisJdXN1YWwgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scy4KKwlJZiB0aGUga2V5IGBzdWJtb2R1bGUuJG5hbWUudXBkYXRlYCBpcyBzZXQgdG8gYG1lcmdlYCwgdGhpcyBvcHRpb24gaXMKKwlpbXBsaWNpdC4KKworLS1yZWJhc2U6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSB1cGRhdGUgY29tbWFuZC4KKwlSZWJhc2UgdGhlIGN1cnJlbnQgYnJhbmNoIG9udG8gdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUKKwlzdXBlcnByb2plY3QuIElmIHRoaXMgb3B0aW9uIGlzIGdpdmVuLCB0aGUgc3VibW9kdWxlJ3MgSEVBRCB3aWxsIG5vdAorCWJlIGRldGFjaGVkLiBJZiBhIG1lcmdlIGZhaWx1cmUgcHJldmVudHMgdGhpcyBwcm9jZXNzLCB5b3Ugd2lsbCBoYXZlCisJdG8gcmVzb2x2ZSB0aGVzZSBmYWlsdXJlcyB3aXRoIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXS4KKwlJZiB0aGUga2V5IGBzdWJtb2R1bGUuJG5hbWUudXBkYXRlYCBpcyBzZXQgdG8gYHJlYmFzZWAsIHRoaXMgb3B0aW9uIGlzCisJaW1wbGljaXQuCisKKy0taW5pdDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHVwZGF0ZSBjb21tYW5kLgorCUluaXRpYWxpemUgYWxsIHN1Ym1vZHVsZXMgZm9yIHdoaWNoICJnaXQgc3VibW9kdWxlIGluaXQiIGhhcyBub3QgYmVlbgorCWNhbGxlZCBzbyBmYXIgYmVmb3JlIHVwZGF0aW5nLgorCistLW5hbWU6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBhZGQgY29tbWFuZC4gSXQgc2V0cyB0aGUgc3VibW9kdWxlJ3MKKwluYW1lIHRvIHRoZSBnaXZlbiBzdHJpbmcgaW5zdGVhZCBvZiBkZWZhdWx0aW5nIHRvIGl0cyBwYXRoLiBUaGUgbmFtZQorCW11c3QgYmUgdmFsaWQgYXMgYSBkaXJlY3RvcnkgbmFtZSBhbmQgbWF5IG5vdCBlbmQgd2l0aCBhICcvJy4KKworLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+OjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBhZGQgYW5kIHVwZGF0ZSBjb21tYW5kcy4gIFRoZXNlCisJY29tbWFuZHMgc29tZXRpbWVzIG5lZWQgdG8gY2xvbmUgYSByZW1vdGUgcmVwb3NpdG9yeS4gSW4gdGhpcyBjYXNlLAorCXRoaXMgb3B0aW9uIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXSBjb21tYW5kLgorKworKk5PVEUqOiBEbyAqbm90KiB1c2UgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBoYXZlIHJlYWQgdGhlIG5vdGUKK2ZvciBsaW5rZ2l0OmdpdC1jbG9uZVsxXSdzIGAtLXJlZmVyZW5jZWAsIGAtLXNoYXJlZGAsIGFuZCBgLS1kaXNzb2NpYXRlYAorb3B0aW9ucyBjYXJlZnVsbHkuCisKKy0tZGlzc29jaWF0ZTo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYWRkIGFuZCB1cGRhdGUgY29tbWFuZHMuICBUaGVzZQorCWNvbW1hbmRzIHNvbWV0aW1lcyBuZWVkIHRvIGNsb25lIGEgcmVtb3RlIHJlcG9zaXRvcnkuIEluIHRoaXMgY2FzZSwKKwl0aGlzIG9wdGlvbiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgbGlua2dpdDpnaXQtY2xvbmVbMV0gY29tbWFuZC4KKysKKypOT1RFKjogc2VlIHRoZSBOT1RFIGZvciB0aGUgYC0tcmVmZXJlbmNlYCBvcHRpb24uCisKKy0tcmVjdXJzaXZlOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBmb3JlYWNoLCB1cGRhdGUsIHN0YXR1cyBhbmQgc3luYyBjb21tYW5kcy4KKwlUcmF2ZXJzZSBzdWJtb2R1bGVzIHJlY3Vyc2l2ZWx5LiBUaGUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBub3QKKwlvbmx5IGluIHRoZSBzdWJtb2R1bGVzIG9mIHRoZSBjdXJyZW50IHJlcG8sIGJ1dCBhbHNvCisJaW4gYW55IG5lc3RlZCBzdWJtb2R1bGVzIGluc2lkZSB0aG9zZSBzdWJtb2R1bGVzIChhbmQgc28gb24pLgorCistLWRlcHRoOjoKKwlUaGlzIG9wdGlvbiBpcyB2YWxpZCBmb3IgYWRkIGFuZCB1cGRhdGUgY29tbWFuZHMuIENyZWF0ZSBhICdzaGFsbG93JworCWNsb25lIHdpdGggYSBoaXN0b3J5IHRydW5jYXRlZCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXZpc2lvbnMuCisJU2VlIGxpbmtnaXQ6Z2l0LWNsb25lWzFdCisKKy0tW25vLV1yZWNvbW1lbmQtc2hhbGxvdzo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHVwZGF0ZSBjb21tYW5kLgorCVRoZSBpbml0aWFsIGNsb25lIG9mIGEgc3VibW9kdWxlIHdpbGwgdXNlIHRoZSByZWNvbW1lbmRlZAorCWBzdWJtb2R1bGUuPG5hbWU+LnNoYWxsb3dgIGFzIHByb3ZpZGVkIGJ5IHRoZSBgLmdpdG1vZHVsZXNgIGZpbGUKKwlieSBkZWZhdWx0LiBUbyBpZ25vcmUgdGhlIHN1Z2dlc3Rpb25zIHVzZSBgLS1uby1yZWNvbW1lbmQtc2hhbGxvd2AuCisKKy1qIDxuPjo6CistLWpvYnMgPG4+OjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgdXBkYXRlIGNvbW1hbmQuCisJQ2xvbmUgbmV3IHN1Ym1vZHVsZXMgaW4gcGFyYWxsZWwgd2l0aCBhcyBtYW55IGpvYnMuCisJRGVmYXVsdHMgdG8gdGhlIGBzdWJtb2R1bGUuZmV0Y2hKb2JzYCBvcHRpb24uCisKKy0tW25vLV1zaW5nbGUtYnJhbmNoOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgdXBkYXRlIGNvbW1hbmQuCisJQ2xvbmUgb25seSBvbmUgYnJhbmNoIGR1cmluZyB1cGRhdGU6IEhFQUQgb3Igb25lIHNwZWNpZmllZCBieSAtLWJyYW5jaC4KKworPHBhdGg+Li4uOjoKKwlQYXRocyB0byBzdWJtb2R1bGUocykuIFdoZW4gc3BlY2lmaWVkIHRoaXMgd2lsbCByZXN0cmljdCB0aGUgY29tbWFuZAorCXRvIG9ubHkgb3BlcmF0ZSBvbiB0aGUgc3VibW9kdWxlcyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIHBhdGhzLgorCShUaGlzIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdpdGggYWRkKS4KKworRklMRVMKKy0tLS0tCitXaGVuIGluaXRpYWxpemluZyBzdWJtb2R1bGVzLCBhIGAuZ2l0bW9kdWxlc2AgZmlsZSBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeQorb2YgdGhlIGNvbnRhaW5pbmcgcmVwb3NpdG9yeSBpcyB1c2VkIHRvIGZpbmQgdGhlIHVybCBvZiBlYWNoIHN1Ym1vZHVsZS4KK1RoaXMgZmlsZSBzaG91bGQgYmUgZm9ybWF0dGVkIGluIHRoZSBzYW1lIHdheSBhcyBgJEdJVF9ESVIvY29uZmlnYC4gVGhlIGtleQordG8gZWFjaCBzdWJtb2R1bGUgdXJsIGlzICJzdWJtb2R1bGUuJG5hbWUudXJsIi4gIFNlZSBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0KK2ZvciBkZXRhaWxzLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0c3VibW9kdWxlc1s3XSwgbGlua2dpdDpnaXRtb2R1bGVzWzVdLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdm4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MjRhMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdm4udHh0CkBAIC0wLDAgKzEsMTE3NSBAQAorZ2l0LXN2bigxKQorPT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc3ZuIC0gQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhbmQgR2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzdm4nIDxjb21tYW5kPiBbPG9wdGlvbnM+XSBbPGFyZ3VtZW50cz5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorJ2dpdCBzdm4nIGlzIGEgc2ltcGxlIGNvbmR1aXQgZm9yIGNoYW5nZXNldHMgYmV0d2VlbiBTdWJ2ZXJzaW9uIGFuZCBHaXQuCitJdCBwcm92aWRlcyBhIGJpZGlyZWN0aW9uYWwgZmxvdyBvZiBjaGFuZ2VzIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIGFuZCBhIEdpdAorcmVwb3NpdG9yeS4KKworJ2dpdCBzdm4nIGNhbiB0cmFjayBhIHN0YW5kYXJkIFN1YnZlcnNpb24gcmVwb3NpdG9yeSwKK2ZvbGxvd2luZyB0aGUgY29tbW9uICJ0cnVuay9icmFuY2hlcy90YWdzIiBsYXlvdXQsIHdpdGggdGhlIC0tc3RkbGF5b3V0IG9wdGlvbi4KK0l0IGNhbiBhbHNvIGZvbGxvdyBicmFuY2hlcyBhbmQgdGFncyBpbiBhbnkgbGF5b3V0IHdpdGggdGhlIC1ULy10Ly1iIG9wdGlvbnMKKyhzZWUgb3B0aW9ucyB0byAnaW5pdCcgYmVsb3csIGFuZCBhbHNvIHRoZSAnY2xvbmUnIGNvbW1hbmQpLgorCitPbmNlIHRyYWNraW5nIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5ICh3aXRoIGFueSBvZiB0aGUgYWJvdmUgbWV0aG9kcyksIHRoZSBHaXQKK3JlcG9zaXRvcnkgY2FuIGJlIHVwZGF0ZWQgZnJvbSBTdWJ2ZXJzaW9uIGJ5IHRoZSAnZmV0Y2gnIGNvbW1hbmQgYW5kCitTdWJ2ZXJzaW9uIHVwZGF0ZWQgZnJvbSBHaXQgYnkgdGhlICdkY29tbWl0JyBjb21tYW5kLgorCitDT01NQU5EUworLS0tLS0tLS0KKworJ2luaXQnOjoKKwlJbml0aWFsaXplcyBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeSB3aXRoIGFkZGl0aW9uYWwKKwltZXRhZGF0YSBkaXJlY3RvcmllcyBmb3IgJ2dpdCBzdm4nLiAgVGhlIFN1YnZlcnNpb24gVVJMCisJbWF5IGJlIHNwZWNpZmllZCBhcyBhIGNvbW1hbmQtbGluZSBhcmd1bWVudCwgb3IgYXMgZnVsbAorCVVSTCBhcmd1bWVudHMgdG8gLVQvLXQvLWIuICBPcHRpb25hbGx5LCB0aGUgdGFyZ2V0CisJZGlyZWN0b3J5IHRvIG9wZXJhdGUgb24gY2FuIGJlIHNwZWNpZmllZCBhcyBhIHNlY29uZAorCWFyZ3VtZW50LiAgTm9ybWFsbHkgdGhpcyBjb21tYW5kIGluaXRpYWxpemVzIHRoZSBjdXJyZW50CisJZGlyZWN0b3J5LgorCistVDx0cnVua19zdWJkaXI+OzsKKy0tdHJ1bms9PHRydW5rX3N1YmRpcj47OworLXQ8dGFnc19zdWJkaXI+OzsKKy0tdGFncz08dGFnc19zdWJkaXI+OzsKKy1iPGJyYW5jaGVzX3N1YmRpcj47OworLS1icmFuY2hlcz08YnJhbmNoZXNfc3ViZGlyPjs7Cistczs7CistLXN0ZGxheW91dDs7CisJVGhlc2UgYXJlIG9wdGlvbmFsIGNvbW1hbmQtbGluZSBvcHRpb25zIGZvciBpbml0LiAgRWFjaCBvZgorCXRoZXNlIGZsYWdzIGNhbiBwb2ludCB0byBhIHJlbGF0aXZlIHJlcG9zaXRvcnkgcGF0aAorCSgtLXRhZ3M9cHJvamVjdC90YWdzKSBvciBhIGZ1bGwgdXJsCisJKC0tdGFncz1odHRwczovL2Zvby5vcmcvcHJvamVjdC90YWdzKS4KKwlZb3UgY2FuIHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAtLXRhZ3MgYW5kL29yIC0tYnJhbmNoZXMgb3B0aW9ucywgaW4gY2FzZQorCXlvdXIgU3VidmVyc2lvbiByZXBvc2l0b3J5IHBsYWNlcyB0YWdzIG9yIGJyYW5jaGVzIHVuZGVyIG11bHRpcGxlIHBhdGhzLgorCVRoZSBvcHRpb24gLS1zdGRsYXlvdXQgaXMKKwlhIHNob3J0aGFuZCB3YXkgb2Ygc2V0dGluZyB0cnVuayx0YWdzLGJyYW5jaGVzIGFzIHRoZSByZWxhdGl2ZSBwYXRocywKKwl3aGljaCBpcyB0aGUgU3VidmVyc2lvbiBkZWZhdWx0LiBJZiBhbnkgb2YgdGhlIG90aGVyIG9wdGlvbnMgYXJlIGdpdmVuCisJYXMgd2VsbCwgdGhleSB0YWtlIHByZWNlZGVuY2UuCistLW5vLW1ldGFkYXRhOzsKKwlTZXQgdGhlICdub01ldGFkYXRhJyBvcHRpb24gaW4gdGhlIFtzdm4tcmVtb3RlXSBjb25maWcuCisJVGhpcyBvcHRpb24gaXMgbm90IHJlY29tbWVuZGVkLCBwbGVhc2UgcmVhZCB0aGUgJ3N2bi5ub01ldGFkYXRhJworCXNlY3Rpb24gb2YgdGhpcyBtYW5wYWdlIGJlZm9yZSB1c2luZyB0aGlzIG9wdGlvbi4KKy0tdXNlLXN2bS1wcm9wczs7CisJU2V0IHRoZSAndXNlU3ZtUHJvcHMnIG9wdGlvbiBpbiB0aGUgW3N2bi1yZW1vdGVdIGNvbmZpZy4KKy0tdXNlLXN2bnN5bmMtcHJvcHM7OworCVNldCB0aGUgJ3VzZVN2bnN5bmNQcm9wcycgb3B0aW9uIGluIHRoZSBbc3ZuLXJlbW90ZV0gY29uZmlnLgorLS1yZXdyaXRlLXJvb3Q9PFVSTD47OworCVNldCB0aGUgJ3Jld3JpdGVSb290JyBvcHRpb24gaW4gdGhlIFtzdm4tcmVtb3RlXSBjb25maWcuCistLXJld3JpdGUtdXVpZD08VVVJRD47OworCVNldCB0aGUgJ3Jld3JpdGVVVUlEJyBvcHRpb24gaW4gdGhlIFtzdm4tcmVtb3RlXSBjb25maWcuCistLXVzZXJuYW1lPTx1c2VyPjs7CisJRm9yIHRyYW5zcG9ydHMgdGhhdCBTVk4gaGFuZGxlcyBhdXRoZW50aWNhdGlvbiBmb3IgKGh0dHAsCisJaHR0cHMsIGFuZCBwbGFpbiBzdm4pLCBzcGVjaWZ5IHRoZSB1c2VybmFtZS4gIEZvciBvdGhlcgorCXRyYW5zcG9ydHMgKGUuZy4gYHN2bitzc2g6Ly9gKSwgeW91IG11c3QgaW5jbHVkZSB0aGUgdXNlcm5hbWUgaW4KKwl0aGUgVVJMLCBlLmcuIGBzdm4rc3NoOi8vZm9vQHN2bi5iYXIuY29tL3Byb2plY3RgCistLXByZWZpeD08cHJlZml4Pjs7CisJVGhpcyBhbGxvd3Mgb25lIHRvIHNwZWNpZnkgYSBwcmVmaXggd2hpY2ggaXMgcHJlcGVuZGVkCisJdG8gdGhlIG5hbWVzIG9mIHJlbW90ZXMgaWYgdHJ1bmsvYnJhbmNoZXMvdGFncyBhcmUKKwlzcGVjaWZpZWQuICBUaGUgcHJlZml4IGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBhCisJdHJhaWxpbmcgc2xhc2gsIHNvIGJlIHN1cmUgeW91IGluY2x1ZGUgb25lIGluIHRoZQorCWFyZ3VtZW50IGlmIHRoYXQgaXMgd2hhdCB5b3Ugd2FudC4gIElmIC0tYnJhbmNoZXMvLWIgaXMKKwlzcGVjaWZpZWQsIHRoZSBwcmVmaXggbXVzdCBpbmNsdWRlIGEgdHJhaWxpbmcgc2xhc2guCisJU2V0dGluZyBhIHByZWZpeCAod2l0aCBhIHRyYWlsaW5nIHNsYXNoKSBpcyBzdHJvbmdseQorCWVuY291cmFnZWQgaW4gYW55IGNhc2UsIGFzIHlvdXIgU1ZOLXRyYWNraW5nIHJlZnMgd2lsbAorCXRoZW4gYmUgbG9jYXRlZCBhdCAicmVmcy9yZW1vdGVzLyRwcmVmaXgvKiIsIHdoaWNoIGlzCisJY29tcGF0aWJsZSB3aXRoIEdpdCdzIG93biByZW1vdGUtdHJhY2tpbmcgcmVmIGxheW91dAorCShyZWZzL3JlbW90ZXMvJHJlbW90ZS8qKS4gU2V0dGluZyBhIHByZWZpeCBpcyBhbHNvIHVzZWZ1bAorCWlmIHlvdSB3aXNoIHRvIHRyYWNrIG11bHRpcGxlIHByb2plY3RzIHRoYXQgc2hhcmUgYSBjb21tb24KKwlyZXBvc2l0b3J5LgorCUJ5IGRlZmF1bHQsIHRoZSBwcmVmaXggaXMgc2V0IHRvICdvcmlnaW4vJy4KKysKK05PVEU6IEJlZm9yZSBHaXQgdjIuMCwgdGhlIGRlZmF1bHQgcHJlZml4IHdhcyAiIiAobm8gcHJlZml4KS4gVGhpcworbWVhbnQgdGhhdCBTVk4tdHJhY2tpbmcgcmVmcyB3ZXJlIHB1dCBhdCAicmVmcy9yZW1vdGVzLyoiLCB3aGljaCBpcworaW5jb21wYXRpYmxlIHdpdGggaG93IEdpdCdzIG93biByZW1vdGUtdHJhY2tpbmcgcmVmcyBhcmUgb3JnYW5pemVkLgorSWYgeW91IHN0aWxsIHdhbnQgdGhlIG9sZCBkZWZhdWx0LCB5b3UgY2FuIGdldCBpdCBieSBwYXNzaW5nCitgLS1wcmVmaXggIiJgIG9uIHRoZSBjb21tYW5kIGxpbmUgKGAtLXByZWZpeD0iImAgbWF5IG5vdCB3b3JrIGlmCit5b3VyIFBlcmwncyBHZXRvcHQ6OkxvbmcgaXMgPCB2Mi4zNykuCisKKy0taWdub3JlLXJlZnM9PHJlZ2V4Pjs7CisJV2hlbiBwYXNzZWQgdG8gJ2luaXQnIG9yICdjbG9uZScgdGhpcyByZWd1bGFyIGV4cHJlc3Npb24gd2lsbAorCWJlIHByZXNlcnZlZCBhcyBhIGNvbmZpZyBrZXkuICBTZWUgJ2ZldGNoJyBmb3IgYSBkZXNjcmlwdGlvbgorCW9mIGAtLWlnbm9yZS1yZWZzYC4KKy0taWdub3JlLXBhdGhzPTxyZWdleD47OworCVdoZW4gcGFzc2VkIHRvICdpbml0JyBvciAnY2xvbmUnIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwKKwliZSBwcmVzZXJ2ZWQgYXMgYSBjb25maWcga2V5LiAgU2VlICdmZXRjaCcgZm9yIGEgZGVzY3JpcHRpb24KKwlvZiBgLS1pZ25vcmUtcGF0aHNgLgorLS1pbmNsdWRlLXBhdGhzPTxyZWdleD47OworCVdoZW4gcGFzc2VkIHRvICdpbml0JyBvciAnY2xvbmUnIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwKKwliZSBwcmVzZXJ2ZWQgYXMgYSBjb25maWcga2V5LiAgU2VlICdmZXRjaCcgZm9yIGEgZGVzY3JpcHRpb24KKwlvZiBgLS1pbmNsdWRlLXBhdGhzYC4KKy0tbm8tbWluaW1pemUtdXJsOzsKKwlXaGVuIHRyYWNraW5nIG11bHRpcGxlIGRpcmVjdG9yaWVzICh1c2luZyAtLXN0ZGxheW91dCwKKwktLWJyYW5jaGVzLCBvciAtLXRhZ3Mgb3B0aW9ucyksIGdpdCBzdm4gd2lsbCBhdHRlbXB0IHRvIGNvbm5lY3QKKwl0byB0aGUgcm9vdCAob3IgaGlnaGVzdCBhbGxvd2VkIGxldmVsKSBvZiB0aGUgU3VidmVyc2lvbgorCXJlcG9zaXRvcnkuICBUaGlzIGRlZmF1bHQgYWxsb3dzIGJldHRlciB0cmFja2luZyBvZiBoaXN0b3J5IGlmCisJZW50aXJlIHByb2plY3RzIGFyZSBtb3ZlZCB3aXRoaW4gYSByZXBvc2l0b3J5LCBidXQgbWF5IGNhdXNlCisJaXNzdWVzIG9uIHJlcG9zaXRvcmllcyB3aGVyZSByZWFkIGFjY2VzcyByZXN0cmljdGlvbnMgYXJlIGluCisJcGxhY2UuICBQYXNzaW5nIGAtLW5vLW1pbmltaXplLXVybGAgd2lsbCBhbGxvdyBnaXQgc3ZuIHRvCisJYWNjZXB0IFVSTHMgYXMtaXMgd2l0aG91dCBhdHRlbXB0aW5nIHRvIGNvbm5lY3QgdG8gYSBoaWdoZXIKKwlsZXZlbCBkaXJlY3RvcnkuICBUaGlzIG9wdGlvbiBpcyBvZmYgYnkgZGVmYXVsdCB3aGVuIG9ubHkKKwlvbmUgVVJML2JyYW5jaCBpcyB0cmFja2VkIChpdCB3b3VsZCBkbyBsaXR0bGUgZ29vZCkuCisKKydmZXRjaCc6OgorCUZldGNoIHVuZmV0Y2hlZCByZXZpc2lvbnMgZnJvbSB0aGUgU3VidmVyc2lvbiByZW1vdGUgd2UgYXJlCisJdHJhY2tpbmcuICBUaGUgbmFtZSBvZiB0aGUgW3N2bi1yZW1vdGUgIi4uLiJdIHNlY3Rpb24gaW4gdGhlCisJJEdJVF9ESVIvY29uZmlnIGZpbGUgbWF5IGJlIHNwZWNpZmllZCBhcyBhbiBvcHRpb25hbAorCWNvbW1hbmQtbGluZSBhcmd1bWVudC4KKysKK1RoaXMgYXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSByZXZfbWFwIGlmIG5lZWRlZCAoc2VlCisnJEdJVF9ESVIvc3ZuL1wqKi8ucmV2X21hcC4qJyBpbiB0aGUgRklMRVMgc2VjdGlvbiBiZWxvdyBmb3IgZGV0YWlscykuCisKKy0tbG9jYWx0aW1lOzsKKwlTdG9yZSBHaXQgY29tbWl0IHRpbWVzIGluIHRoZSBsb2NhbCB0aW1lIHpvbmUgaW5zdGVhZCBvZiBVVEMuICBUaGlzCisJbWFrZXMgJ2dpdCBsb2cnIChldmVuIHdpdGhvdXQgLS1kYXRlPWxvY2FsKSBzaG93IHRoZSBzYW1lIHRpbWVzCisJdGhhdCBgc3ZuIGxvZ2Agd291bGQgaW4gdGhlIGxvY2FsIHRpbWUgem9uZS4KKysKK1RoaXMgZG9lc24ndCBpbnRlcmZlcmUgd2l0aCBpbnRlcm9wZXJhdGluZyB3aXRoIHRoZSBTdWJ2ZXJzaW9uCityZXBvc2l0b3J5IHlvdSBjbG9uZWQgZnJvbSwgYnV0IGlmIHlvdSB3aXNoIGZvciB5b3VyIGxvY2FsIEdpdAorcmVwb3NpdG9yeSB0byBiZSBhYmxlIHRvIGludGVyb3BlcmF0ZSB3aXRoIHNvbWVvbmUgZWxzZSdzIGxvY2FsIEdpdAorcmVwb3NpdG9yeSwgZWl0aGVyIGRvbid0IHVzZSB0aGlzIG9wdGlvbiBvciB5b3Ugc2hvdWxkIGJvdGggdXNlIGl0IGluCit0aGUgc2FtZSBsb2NhbCB0aW1lIHpvbmUuCisKKy0tcGFyZW50OzsKKwlGZXRjaCBvbmx5IGZyb20gdGhlIFNWTiBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgSEVBRC4KKworLS1pZ25vcmUtcmVmcz08cmVnZXg+OzsKKwlJZ25vcmUgcmVmcyBmb3IgYnJhbmNoZXMgb3IgdGFncyBtYXRjaGluZyB0aGUgUGVybCByZWd1bGFyCisJZXhwcmVzc2lvbi4gQSAibmVnYXRpdmUgbG9vay1haGVhZCBhc3NlcnRpb24iIGxpa2UKKwlgXnJlZnMvcmVtb3Rlcy9vcmlnaW4vKD8hdGFncy93YW50ZWQtdGFnfHdhbnRlZC1icmFuY2gpLiokYAorCWNhbiBiZSB1c2VkIHRvIGFsbG93IG9ubHkgY2VydGFpbiByZWZzLgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLXJlbW90ZS48bmFtZT4uaWdub3JlLXJlZnMKKysKK0lmIHRoZSBpZ25vcmUtcmVmcyBjb25maWd1cmF0aW9uIGtleSBpcyBzZXQsIGFuZCB0aGUgY29tbWFuZC1saW5lCitvcHRpb24gaXMgYWxzbyBnaXZlbiwgYm90aCByZWd1bGFyIGV4cHJlc3Npb25zIHdpbGwgYmUgdXNlZC4KKworLS1pZ25vcmUtcGF0aHM9PHJlZ2V4Pjs7CisJVGhpcyBhbGxvd3Mgb25lIHRvIHNwZWNpZnkgYSBQZXJsIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHdpbGwKKwljYXVzZSBza2lwcGluZyBvZiBhbGwgbWF0Y2hpbmcgcGF0aHMgZnJvbSBjaGVja291dCBmcm9tIFNWTi4KKwlUaGUgYC0taWdub3JlLXBhdGhzYCBvcHRpb24gc2hvdWxkIG1hdGNoIGZvciBldmVyeSAnZmV0Y2gnCisJKGluY2x1ZGluZyBhdXRvbWF0aWMgZmV0Y2hlcyBkdWUgdG8gJ2Nsb25lJywgJ2Rjb21taXQnLAorCSdyZWJhc2UnLCBldGMpIG9uIGEgZ2l2ZW4gcmVwb3NpdG9yeS4KKysKK1t2ZXJzZV0KK2NvbmZpZyBrZXk6IHN2bi1yZW1vdGUuPG5hbWU+Lmlnbm9yZS1wYXRocworKworSWYgdGhlIGlnbm9yZS1wYXRocyBjb25maWd1cmF0aW9uIGtleSBpcyBzZXQsIGFuZCB0aGUgY29tbWFuZC1saW5lCitvcHRpb24gaXMgYWxzbyBnaXZlbiwgYm90aCByZWd1bGFyIGV4cHJlc3Npb25zIHdpbGwgYmUgdXNlZC4KKysKK0V4YW1wbGVzOgorKworLS0KK1NraXAgImRvYyoiIGRpcmVjdG9yeSBmb3IgZXZlcnkgZmV0Y2g7OworKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLWlnbm9yZS1wYXRocz0iXmRvYyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTa2lwICJicmFuY2hlcyIgYW5kICJ0YWdzIiBvZiBmaXJzdCBsZXZlbCBkaXJlY3Rvcmllczs7CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0taWdub3JlLXBhdGhzPSJeW14vXSsvKD86YnJhbmNoZXN8dGFncykiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tCisKKy0taW5jbHVkZS1wYXRocz08cmVnZXg+OzsKKwlUaGlzIGFsbG93cyBvbmUgdG8gc3BlY2lmeSBhIFBlcmwgcmVndWxhciBleHByZXNzaW9uIHRoYXQgd2lsbAorCWNhdXNlIHRoZSBpbmNsdXNpb24gb2Ygb25seSBtYXRjaGluZyBwYXRocyBmcm9tIGNoZWNrb3V0IGZyb20gU1ZOLgorCVRoZSBgLS1pbmNsdWRlLXBhdGhzYCBvcHRpb24gc2hvdWxkIG1hdGNoIGZvciBldmVyeSAnZmV0Y2gnCisJKGluY2x1ZGluZyBhdXRvbWF0aWMgZmV0Y2hlcyBkdWUgdG8gJ2Nsb25lJywgJ2Rjb21taXQnLAorCSdyZWJhc2UnLCBldGMpIG9uIGEgZ2l2ZW4gcmVwb3NpdG9yeS4gYC0taWdub3JlLXBhdGhzYCB0YWtlcworCXByZWNlZGVuY2Ugb3ZlciBgLS1pbmNsdWRlLXBhdGhzYC4KKysKK1t2ZXJzZV0KK2NvbmZpZyBrZXk6IHN2bi1yZW1vdGUuPG5hbWU+LmluY2x1ZGUtcGF0aHMKKworLS1sb2ctd2luZG93LXNpemU9PG4+OzsKKwlGZXRjaCA8bj4gbG9nIGVudHJpZXMgcGVyIHJlcXVlc3Qgd2hlbiBzY2FubmluZyBTdWJ2ZXJzaW9uIGhpc3RvcnkuCisJVGhlIGRlZmF1bHQgaXMgMTAwLiBGb3IgdmVyeSBsYXJnZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcmllcywgbGFyZ2VyCisJdmFsdWVzIG1heSBiZSBuZWVkZWQgZm9yICdjbG9uZScvJ2ZldGNoJyB0byBjb21wbGV0ZSBpbiByZWFzb25hYmxlCisJdGltZS4gQnV0IG92ZXJseSBsYXJnZSB2YWx1ZXMgbWF5IGxlYWQgdG8gaGlnaGVyIG1lbW9yeSB1c2FnZSBhbmQKKwlyZXF1ZXN0IHRpbWVvdXRzLgorCisnY2xvbmUnOjoKKwlSdW5zICdpbml0JyBhbmQgJ2ZldGNoJy4gIEl0IHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgYQorCWRpcmVjdG9yeSBiYXNlZCBvbiB0aGUgYmFzZW5hbWUgb2YgdGhlIFVSTCBwYXNzZWQgdG8gaXQ7CisJb3IgaWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcGFzc2VkOyBpdCB3aWxsIGNyZWF0ZSBhIGRpcmVjdG9yeQorCWFuZCB3b3JrIHdpdGhpbiB0aGF0LiAgSXQgYWNjZXB0cyBhbGwgYXJndW1lbnRzIHRoYXQgdGhlCisJJ2luaXQnIGFuZCAnZmV0Y2gnIGNvbW1hbmRzIGFjY2VwdDsgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCisJYC0tZmV0Y2gtYWxsYCBhbmQgYC0tcGFyZW50YC4gIEFmdGVyIGEgcmVwb3NpdG9yeSBpcyBjbG9uZWQsCisJdGhlICdmZXRjaCcgY29tbWFuZCB3aWxsIGJlIGFibGUgdG8gdXBkYXRlIHJldmlzaW9ucyB3aXRob3V0CisJYWZmZWN0aW5nIHRoZSB3b3JraW5nIHRyZWU7IGFuZCB0aGUgJ3JlYmFzZScgY29tbWFuZCB3aWxsIGJlCisJYWJsZSB0byB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZSB3aXRoIHRoZSBsYXRlc3QgY2hhbmdlcy4KKworLS1wcmVzZXJ2ZS1lbXB0eS1kaXJzOzsKKwlDcmVhdGUgYSBwbGFjZWhvbGRlciBmaWxlIGluIHRoZSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBmb3IgZWFjaAorCWVtcHR5IGRpcmVjdG9yeSBmZXRjaGVkIGZyb20gU3VidmVyc2lvbi4gIFRoaXMgaW5jbHVkZXMgZGlyZWN0b3JpZXMKKwl0aGF0IGJlY29tZSBlbXB0eSBieSByZW1vdmluZyBhbGwgZW50cmllcyBpbiB0aGUgU3VidmVyc2lvbgorCXJlcG9zaXRvcnkgKGJ1dCBub3QgdGhlIGRpcmVjdG9yeSBpdHNlbGYpLiAgVGhlIHBsYWNlaG9sZGVyIGZpbGVzCisJYXJlIGFsc28gdHJhY2tlZCBhbmQgcmVtb3ZlZCB3aGVuIG5vIGxvbmdlciBuZWNlc3NhcnkuCisKKy0tcGxhY2Vob2xkZXItZmlsZW5hbWU9PGZpbGVuYW1lPjs7CisJU2V0IHRoZSBuYW1lIG9mIHBsYWNlaG9sZGVyIGZpbGVzIGNyZWF0ZWQgYnkgLS1wcmVzZXJ2ZS1lbXB0eS1kaXJzLgorCURlZmF1bHQ6ICIuZ2l0aWdub3JlIgorCisncmViYXNlJzo6CisJVGhpcyBmZXRjaGVzIHJldmlzaW9ucyBmcm9tIHRoZSBTVk4gcGFyZW50IG9mIHRoZSBjdXJyZW50IEhFQUQKKwlhbmQgcmViYXNlcyB0aGUgY3VycmVudCAodW5jb21taXR0ZWQgdG8gU1ZOKSB3b3JrIGFnYWluc3QgaXQuCisrCitUaGlzIHdvcmtzIHNpbWlsYXJseSB0byBgc3ZuIHVwZGF0ZWAgb3IgJ2dpdCBwdWxsJyBleGNlcHQgdGhhdAoraXQgcHJlc2VydmVzIGxpbmVhciBoaXN0b3J5IHdpdGggJ2dpdCByZWJhc2UnIGluc3RlYWQgb2YKKydnaXQgbWVyZ2UnIGZvciBlYXNlIG9mIGRjb21taXR0aW5nIHdpdGggJ2dpdCBzdm4nLgorKworVGhpcyBhY2NlcHRzIGFsbCBvcHRpb25zIHRoYXQgJ2dpdCBzdm4gZmV0Y2gnIGFuZCAnZ2l0IHJlYmFzZScKK2FjY2VwdC4gIEhvd2V2ZXIsIGAtLWZldGNoLWFsbGAgb25seSBmZXRjaGVzIGZyb20gdGhlIGN1cnJlbnQKK1tzdm4tcmVtb3RlXSwgYW5kIG5vdCBhbGwgW3N2bi1yZW1vdGVdIGRlZmluaXRpb25zLgorKworTGlrZSAnZ2l0IHJlYmFzZSc7IHRoaXMgcmVxdWlyZXMgdGhhdCB0aGUgd29ya2luZyB0cmVlIGJlIGNsZWFuCithbmQgaGF2ZSBubyB1bmNvbW1pdHRlZCBjaGFuZ2VzLgorKworVGhpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHJldl9tYXAgaWYgbmVlZGVkIChzZWUKKyckR0lUX0RJUi9zdm4vXCoqLy5yZXZfbWFwLionIGluIHRoZSBGSUxFUyBzZWN0aW9uIGJlbG93IGZvciBkZXRhaWxzKS4KKworLWw7OworLS1sb2NhbDs7CisJRG8gbm90IGZldGNoIHJlbW90ZWx5OyBvbmx5IHJ1biAnZ2l0IHJlYmFzZScgYWdhaW5zdCB0aGUKKwlsYXN0IGZldGNoZWQgY29tbWl0IGZyb20gdGhlIHVwc3RyZWFtIFNWTi4KKworJ2Rjb21taXQnOjoKKwlDb21taXQgZWFjaCBkaWZmIGZyb20gdGhlIGN1cnJlbnQgYnJhbmNoIGRpcmVjdGx5IHRvIHRoZSBTVk4KKwlyZXBvc2l0b3J5LCBhbmQgdGhlbiByZWJhc2Ugb3IgcmVzZXQgKGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yCisJbm90IHRoZXJlIGlzIGEgZGlmZiBiZXR3ZWVuIFNWTiBhbmQgaGVhZCkuICBUaGlzIHdpbGwgY3JlYXRlCisJYSByZXZpc2lvbiBpbiBTVk4gZm9yIGVhY2ggY29tbWl0IGluIEdpdC4KKysKK1doZW4gYW4gb3B0aW9uYWwgR2l0IGJyYW5jaCBuYW1lIChvciBhIEdpdCBjb21taXQgb2JqZWN0IG5hbWUpCitpcyBzcGVjaWZpZWQgYXMgYW4gYXJndW1lbnQsIHRoZSBzdWJjb21tYW5kIHdvcmtzIG9uIHRoZSBzcGVjaWZpZWQKK2JyYW5jaCwgbm90IG9uIHRoZSBjdXJyZW50IGJyYW5jaC4KKysKK1VzZSBvZiAnZGNvbW1pdCcgaXMgcHJlZmVycmVkIHRvICdzZXQtdHJlZScgKGJlbG93KS4KKysKKy0tbm8tcmViYXNlOzsKKwlBZnRlciBjb21taXR0aW5nLCBkbyBub3QgcmViYXNlIG9yIHJlc2V0LgorLS1jb21taXQtdXJsIDxVUkw+OzsKKwlDb21taXQgdG8gdGhpcyBTVk4gVVJMICh0aGUgZnVsbCBwYXRoKS4gIFRoaXMgaXMgaW50ZW5kZWQgdG8KKwlhbGxvdyBleGlzdGluZyAnZ2l0IHN2bicgcmVwb3NpdG9yaWVzIGNyZWF0ZWQgd2l0aCBvbmUgdHJhbnNwb3J0CisJbWV0aG9kIChlLmcuIGBzdm46Ly9gIG9yIGBodHRwOi8vYCBmb3IgYW5vbnltb3VzIHJlYWQpIHRvIGJlCisJcmV1c2VkIGlmIGEgdXNlciBpcyBsYXRlciBnaXZlbiBhY2Nlc3MgdG8gYW4gYWx0ZXJuYXRlIHRyYW5zcG9ydAorCW1ldGhvZCAoZS5nLiBgc3ZuK3NzaDovL2Agb3IgYGh0dHBzOi8vYCkgZm9yIGNvbW1pdC4KKysKK1t2ZXJzZV0KK2NvbmZpZyBrZXk6IHN2bi1yZW1vdGUuPG5hbWU+LmNvbW1pdHVybAorY29uZmlnIGtleTogc3ZuLmNvbW1pdHVybCAob3ZlcndyaXRlcyBhbGwgc3ZuLXJlbW90ZS48bmFtZT4uY29tbWl0dXJsIG9wdGlvbnMpCisrCitOb3RlIHRoYXQgdGhlIFNWTiBVUkwgb2YgdGhlIGNvbW1pdHVybCBjb25maWcga2V5IGluY2x1ZGVzIHRoZSBTVk4gYnJhbmNoLgorSWYgeW91IHJhdGhlciB3YW50IHRvIHNldCB0aGUgY29tbWl0IFVSTCBmb3IgYW4gZW50aXJlIFNWTiByZXBvc2l0b3J5IHVzZQorc3ZuLXJlbW90ZS48bmFtZT4ucHVzaHVybCBpbnN0ZWFkLgorKworVXNpbmcgdGhpcyBvcHRpb24gZm9yIGFueSBvdGhlciBwdXJwb3NlIChkb24ndCBhc2spIGlzIHZlcnkgc3Ryb25nbHkKK2Rpc2NvdXJhZ2VkLgorCistLW1lcmdlaW5mbz08bWVyZ2VpbmZvPjs7CisJQWRkIHRoZSBnaXZlbiBtZXJnZSBpbmZvcm1hdGlvbiBkdXJpbmcgdGhlIGRjb21taXQKKwkoZS5nLiBgLS1tZXJnZWluZm89Ii9icmFuY2hlcy9mb286MS0xMCJgKS4gQWxsIHN2biBzZXJ2ZXIgdmVyc2lvbnMgY2FuCisJc3RvcmUgdGhpcyBpbmZvcm1hdGlvbiAoYXMgYSBwcm9wZXJ0eSksIGFuZCBzdm4gY2xpZW50cyBzdGFydGluZyBmcm9tCisJdmVyc2lvbiAxLjUgY2FuIG1ha2UgdXNlIG9mIGl0LiBUbyBzcGVjaWZ5IG1lcmdlIGluZm9ybWF0aW9uIGZyb20gbXVsdGlwbGUKKwlicmFuY2hlcywgdXNlIGEgc2luZ2xlIHNwYWNlIGNoYXJhY3RlciBiZXR3ZWVuIHRoZSBicmFuY2hlcworCShgLS1tZXJnZWluZm89Ii9icmFuY2hlcy9mb286MS0xMCAvYnJhbmNoZXMvYmFyOjMsNS02LDgiYCkKKysKK1t2ZXJzZV0KK2NvbmZpZyBrZXk6IHN2bi5wdXNobWVyZ2VpbmZvCisrCitUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIGdpdC1zdm4gdG8gYXR0ZW1wdCB0byBhdXRvbWF0aWNhbGx5IHBvcHVsYXRlIHRoZQorc3ZuOm1lcmdlaW5mbyBwcm9wZXJ0eSBpbiB0aGUgU1ZOIHJlcG9zaXRvcnkgd2hlbiBwb3NzaWJsZS4gQ3VycmVudGx5LCB0aGlzIGNhbgorb25seSBiZSBkb25lIHdoZW4gZGNvbW1pdHRpbmcgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZXMgd2hlcmUgYWxsIHBhcmVudHMgYnV0IHRoZQorZmlyc3QgaGF2ZSBhbHJlYWR5IGJlZW4gcHVzaGVkIGludG8gU1ZOLgorCistLWludGVyYWN0aXZlOzsKKwlBc2sgdGhlIHVzZXIgdG8gY29uZmlybSB0aGF0IGEgcGF0Y2ggc2V0IHNob3VsZCBhY3R1YWxseSBiZSBzZW50IHRvIFNWTi4KKwlGb3IgZWFjaCBwYXRjaCwgb25lIG1heSBhbnN3ZXIgInllcyIgKGFjY2VwdCB0aGlzIHBhdGNoKSwgIm5vIiAoZGlzY2FyZCB0aGlzCisJcGF0Y2gpLCAiYWxsIiAoYWNjZXB0IGFsbCBwYXRjaGVzKSwgb3IgInF1aXQiLgorKworJ2dpdCBzdm4gZGNvbW1pdCcgcmV0dXJucyBpbW1lZGlhdGVseSBpZiBhbnN3ZXIgaXMgIm5vIiBvciAicXVpdCIsIHdpdGhvdXQKK2NvbW1pdHRpbmcgYW55dGhpbmcgdG8gU1ZOLgorCisnYnJhbmNoJzo6CisJQ3JlYXRlIGEgYnJhbmNoIGluIHRoZSBTVk4gcmVwb3NpdG9yeS4KKworLW07OworLS1tZXNzYWdlOzsKKwlBbGxvd3MgdG8gc3BlY2lmeSB0aGUgY29tbWl0IG1lc3NhZ2UuCisKKy10OzsKKy0tdGFnOzsKKwlDcmVhdGUgYSB0YWcgYnkgdXNpbmcgdGhlIHRhZ3Nfc3ViZGlyIGluc3RlYWQgb2YgdGhlIGJyYW5jaGVzX3N1YmRpcgorCXNwZWNpZmllZCBkdXJpbmcgZ2l0IHN2biBpbml0LgorCistZDxwYXRoPjs7CistLWRlc3RpbmF0aW9uPTxwYXRoPjs7CisKKwlJZiBtb3JlIHRoYW4gb25lIC0tYnJhbmNoZXMgKG9yIC0tdGFncykgb3B0aW9uIHdhcyBnaXZlbiB0byB0aGUgJ2luaXQnCisJb3IgJ2Nsb25lJyBjb21tYW5kLCB5b3UgbXVzdCBwcm92aWRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgYnJhbmNoIChvcgorCXRhZykgeW91IHdpc2ggdG8gY3JlYXRlIGluIHRoZSBTVk4gcmVwb3NpdG9yeS4gIDxwYXRoPiBzcGVjaWZpZXMgd2hpY2gKKwlwYXRoIHRvIHVzZSB0byBjcmVhdGUgdGhlIGJyYW5jaCBvciB0YWcgYW5kIHNob3VsZCBtYXRjaCB0aGUgcGF0dGVybgorCW9uIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiBvbmUgb2YgdGhlIGNvbmZpZ3VyZWQgYnJhbmNoZXMgb3IgdGFncworCXJlZnNwZWNzLiAgWW91IGNhbiBzZWUgdGhlc2UgcmVmc3BlY3Mgd2l0aCB0aGUgY29tbWFuZHMKKysKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCBzdm4tcmVtb3RlLjxuYW1lPi5icmFuY2hlcworCWdpdCBjb25maWcgLS1nZXQtYWxsIHN2bi1yZW1vdGUuPG5hbWU+LnRhZ3MKKysKK3doZXJlIDxuYW1lPiBpcyB0aGUgbmFtZSBvZiB0aGUgU1ZOIHJlcG9zaXRvcnkgYXMgc3BlY2lmaWVkIGJ5IHRoZSAtUiBvcHRpb24gdG8KKydpbml0JyAob3IgInN2biIgYnkgZGVmYXVsdCkuCisKKy0tdXNlcm5hbWU7OworCVNwZWNpZnkgdGhlIFNWTiB1c2VybmFtZSB0byBwZXJmb3JtIHRoZSBjb21taXQgYXMuICBUaGlzIG9wdGlvbiBvdmVycmlkZXMKKwl0aGUgJ3VzZXJuYW1lJyBjb25maWd1cmF0aW9uIHByb3BlcnR5LgorCistLWNvbW1pdC11cmw7OworCVVzZSB0aGUgc3BlY2lmaWVkIFVSTCB0byBjb25uZWN0IHRvIHRoZSBkZXN0aW5hdGlvbiBTdWJ2ZXJzaW9uCisJcmVwb3NpdG9yeS4gIFRoaXMgaXMgdXNlZnVsIGluIGNhc2VzIHdoZXJlIHRoZSBzb3VyY2UgU1ZOCisJcmVwb3NpdG9yeSBpcyByZWFkLW9ubHkuICBUaGlzIG9wdGlvbiBvdmVycmlkZXMgY29uZmlndXJhdGlvbgorCXByb3BlcnR5ICdjb21taXR1cmwnLgorKworCWdpdCBjb25maWcgLS1nZXQtYWxsIHN2bi1yZW1vdGUuPG5hbWU+LmNvbW1pdHVybAorKworCistLXBhcmVudHM7OworCUNyZWF0ZSBwYXJlbnQgZm9sZGVycy4gVGhpcyBwYXJhbWV0ZXIgaXMgZXF1aXZhbGVudCB0byB0aGUgcGFyYW1ldGVyCisJLS1wYXJlbnRzIG9uIHN2biBjcCBjb21tYW5kcyBhbmQgaXMgdXNlZnVsIGZvciBub24tc3RhbmRhcmQgcmVwb3NpdG9yeQorCWxheW91dHMuCisKKyd0YWcnOjoKKwlDcmVhdGUgYSB0YWcgaW4gdGhlIFNWTiByZXBvc2l0b3J5LiBUaGlzIGlzIGEgc2hvcnRoYW5kIGZvcgorCSdicmFuY2ggLXQnLgorCisnbG9nJzo6CisJVGhpcyBzaG91bGQgbWFrZSBpdCBlYXN5IHRvIGxvb2sgdXAgc3ZuIGxvZyBtZXNzYWdlcyB3aGVuIHN2bgorCXVzZXJzIHJlZmVyIHRvIC1yLy0tcmV2aXNpb24gbnVtYmVycy4KKysKK1RoZSBmb2xsb3dpbmcgZmVhdHVyZXMgZnJvbSBgc3ZuIGxvZycgYXJlIHN1cHBvcnRlZDoKKysKKy0tCistciA8bj5bOjxuPl07OworLS1yZXZpc2lvbj08bj5bOjxuPl07OworCWlzIHN1cHBvcnRlZCwgbm9uLW51bWVyaWMgYXJncyBhcmUgbm90OgorCUhFQUQsIE5FWFQsIEJBU0UsIFBSRVYsIGV0YyAuLi4KKy12OzsKKy0tdmVyYm9zZTs7CisJaXQncyBub3QgY29tcGxldGVseSBjb21wYXRpYmxlIHdpdGggdGhlIC0tdmVyYm9zZQorCW91dHB1dCBpbiBzdm4gbG9nLCBidXQgcmVhc29uYWJseSBjbG9zZS4KKy0tbGltaXQ9PG4+OzsKKwlpcyBOT1QgdGhlIHNhbWUgYXMgLS1tYXgtY291bnQsIGRvZXNuJ3QgY291bnQKKwltZXJnZWQvZXhjbHVkZWQgY29tbWl0cworLS1pbmNyZW1lbnRhbDs7CisJc3VwcG9ydGVkCistLQorKworTmV3IGZlYXR1cmVzOgorKworLS0KKy0tc2hvdy1jb21taXQ7OworCXNob3dzIHRoZSBHaXQgY29tbWl0IHNoYTEsIGFzIHdlbGwKKy0tb25lbGluZTs7CisJb3VyIHZlcnNpb24gb2YgLS1wcmV0dHk9b25lbGluZQorLS0KKysKK05PVEU6IFNWTiBpdHNlbGYgb25seSBzdG9yZXMgdGltZXMgaW4gVVRDIGFuZCBub3RoaW5nIGVsc2UuIFRoZSByZWd1bGFyIHN2bgorY2xpZW50IGNvbnZlcnRzIHRoZSBVVEMgdGltZSB0byB0aGUgbG9jYWwgdGltZSAob3IgYmFzZWQgb24gdGhlIFRaPQorZW52aXJvbm1lbnQpLiBUaGlzIGNvbW1hbmQgaGFzIHRoZSBzYW1lIGJlaGF2aW91ci4KKysKK0FueSBvdGhlciBhcmd1bWVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0IGxvZycKKworJ2JsYW1lJzo6CisJU2hvdyB3aGF0IHJldmlzaW9uIGFuZCBhdXRob3IgbGFzdCBtb2RpZmllZCBlYWNoIGxpbmUgb2YgYSBmaWxlLiBUaGUKKwlvdXRwdXQgb2YgdGhpcyBtb2RlIGlzIGZvcm1hdC1jb21wYXRpYmxlIHdpdGggdGhlIG91dHB1dCBvZgorCWBzdm4gYmxhbWUnIGJ5IGRlZmF1bHQuIExpa2UgdGhlIFNWTiBibGFtZSBjb21tYW5kLAorCWxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhcmUgaWdub3JlZDsKKwl0aGUgdmVyc2lvbiBvZiB0aGUgZmlsZSBpbiB0aGUgSEVBRCByZXZpc2lvbiBpcyBhbm5vdGF0ZWQuIFVua25vd24KKwlhcmd1bWVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0IGJsYW1lJy4KKysKKy0tZ2l0LWZvcm1hdDs7CisJUHJvZHVjZSBvdXRwdXQgaW4gdGhlIHNhbWUgZm9ybWF0IGFzICdnaXQgYmxhbWUnLCBidXQgd2l0aAorCVNWTiByZXZpc2lvbiBudW1iZXJzIGluc3RlYWQgb2YgR2l0IGNvbW1pdCBoYXNoZXMuIEluIHRoaXMgbW9kZSwKKwljaGFuZ2VzIHRoYXQgaGF2ZW4ndCBiZWVuIGNvbW1pdHRlZCB0byBTVk4gKGluY2x1ZGluZyBsb2NhbAorCXdvcmtpbmctY29weSBlZGl0cykgYXJlIHNob3duIGFzIHJldmlzaW9uIDAuCisKKydmaW5kLXJldic6OgorCVdoZW4gZ2l2ZW4gYW4gU1ZOIHJldmlzaW9uIG51bWJlciBvZiB0aGUgZm9ybSAnck4nLCByZXR1cm5zIHRoZQorCWNvcnJlc3BvbmRpbmcgR2l0IGNvbW1pdCBoYXNoICh0aGlzIGNhbiBvcHRpb25hbGx5IGJlIGZvbGxvd2VkIGJ5IGEKKwl0cmVlLWlzaCB0byBzcGVjaWZ5IHdoaWNoIGJyYW5jaCBzaG91bGQgYmUgc2VhcmNoZWQpLiAgV2hlbiBnaXZlbiBhCisJdHJlZS1pc2gsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgU1ZOIHJldmlzaW9uIG51bWJlci4KKysKKy1COzsKKy0tYmVmb3JlOzsKKwlEb24ndCByZXF1aXJlIGFuIGV4YWN0IG1hdGNoIGlmIGdpdmVuIGFuIFNWTiByZXZpc2lvbiwgaW5zdGVhZCBmaW5kCisJdGhlIGNvbW1pdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdGF0ZSBvZiB0aGUgU1ZOIHJlcG9zaXRvcnkgKG9uIHRoZQorCWN1cnJlbnQgYnJhbmNoKSBhdCB0aGUgc3BlY2lmaWVkIHJldmlzaW9uLgorKworLUE7OworLS1hZnRlcjs7CisJRG9uJ3QgcmVxdWlyZSBhbiBleGFjdCBtYXRjaCBpZiBnaXZlbiBhbiBTVk4gcmV2aXNpb247IGlmIHRoZXJlIGlzCisJbm90IGFuIGV4YWN0IG1hdGNoIHJldHVybiB0aGUgY2xvc2VzdCBtYXRjaCBzZWFyY2hpbmcgZm9yd2FyZCBpbiB0aGUKKwloaXN0b3J5LgorCisnc2V0LXRyZWUnOjoKKwlZb3Ugc2hvdWxkIGNvbnNpZGVyIHVzaW5nICdkY29tbWl0JyBpbnN0ZWFkIG9mIHRoaXMgY29tbWFuZC4KKwlDb21taXQgc3BlY2lmaWVkIGNvbW1pdCBvciB0cmVlIG9iamVjdHMgdG8gU1ZOLiAgVGhpcyByZWxpZXMgb24KKwl5b3VyIGltcG9ydGVkIGZldGNoIGRhdGEgYmVpbmcgdXAgdG8gZGF0ZS4gIFRoaXMgbWFrZXMKKwlhYnNvbHV0ZWx5IG5vIGF0dGVtcHRzIHRvIGRvIHBhdGNoaW5nIHdoZW4gY29tbWl0dGluZyB0byBTVk4sIGl0CisJc2ltcGx5IG92ZXJ3cml0ZXMgZmlsZXMgd2l0aCB0aG9zZSBzcGVjaWZpZWQgaW4gdGhlIHRyZWUgb3IKKwljb21taXQuICBBbGwgbWVyZ2luZyBpcyBhc3N1bWVkIHRvIGhhdmUgdGFrZW4gcGxhY2UKKwlpbmRlcGVuZGVudGx5IG9mICdnaXQgc3ZuJyBmdW5jdGlvbnMuCisKKydjcmVhdGUtaWdub3JlJzo6CisJUmVjdXJzaXZlbHkgZmluZHMgdGhlIHN2bjppZ25vcmUgcHJvcGVydHkgb24gZGlyZWN0b3JpZXMgYW5kCisJY3JlYXRlcyBtYXRjaGluZyAuZ2l0aWdub3JlIGZpbGVzLiBUaGUgcmVzdWx0aW5nIGZpbGVzIGFyZSBzdGFnZWQgdG8KKwliZSBjb21taXR0ZWQsIGJ1dCBhcmUgbm90IGNvbW1pdHRlZC4gVXNlIC1yLy0tcmV2aXNpb24gdG8gcmVmZXIgdG8gYQorCXNwZWNpZmljIHJldmlzaW9uLgorCisnc2hvdy1pZ25vcmUnOjoKKwlSZWN1cnNpdmVseSBmaW5kcyBhbmQgbGlzdHMgdGhlIHN2bjppZ25vcmUgcHJvcGVydHkgb24KKwlkaXJlY3Rvcmllcy4gIFRoZSBvdXRwdXQgaXMgc3VpdGFibGUgZm9yIGFwcGVuZGluZyB0bworCXRoZSAkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUgZmlsZS4KKworJ21rZGlycyc6OgorCUF0dGVtcHRzIHRvIHJlY3JlYXRlIGVtcHR5IGRpcmVjdG9yaWVzIHRoYXQgY29yZSBHaXQgY2Fubm90IHRyYWNrCisJYmFzZWQgb24gaW5mb3JtYXRpb24gaW4gJEdJVF9ESVIvc3ZuLzxyZWZuYW1lPi91bmhhbmRsZWQubG9nIGZpbGVzLgorCUVtcHR5IGRpcmVjdG9yaWVzIGFyZSBhdXRvbWF0aWNhbGx5IHJlY3JlYXRlZCB3aGVuIHVzaW5nCisJImdpdCBzdm4gY2xvbmUiIGFuZCAiZ2l0IHN2biByZWJhc2UiLCBzbyAibWtkaXJzIiBpcyBpbnRlbmRlZAorCWZvciB1c2UgYWZ0ZXIgY29tbWFuZHMgbGlrZSAiZ2l0IGNoZWNrb3V0IiBvciAiZ2l0IHJlc2V0Ii4KKwkoU2VlIHRoZSBzdm4tcmVtb3RlLjxuYW1lPi5hdXRvbWtkaXJzIGNvbmZpZyBmaWxlIG9wdGlvbiBmb3IKKwltb3JlIGluZm9ybWF0aW9uLikKKworJ2NvbW1pdC1kaWZmJzo6CisJQ29tbWl0cyB0aGUgZGlmZiBvZiB0d28gdHJlZS1pc2ggYXJndW1lbnRzIGZyb20gdGhlCisJY29tbWFuZC1saW5lLiAgVGhpcyBjb21tYW5kIGRvZXMgbm90IHJlbHkgb24gYmVpbmcgaW5zaWRlIGEgYGdpdCBzdm4KKwlpbml0YC1lZCByZXBvc2l0b3J5LiAgVGhpcyBjb21tYW5kIHRha2VzIHRocmVlIGFyZ3VtZW50cywgKGEpIHRoZQorCW9yaWdpbmFsIHRyZWUgdG8gZGlmZiBhZ2FpbnN0LCAoYikgdGhlIG5ldyB0cmVlIHJlc3VsdCwgKGMpIHRoZQorCVVSTCBvZiB0aGUgdGFyZ2V0IFN1YnZlcnNpb24gcmVwb3NpdG9yeS4gIFRoZSBmaW5hbCBhcmd1bWVudAorCShVUkwpIG1heSBiZSBvbWl0dGVkIGlmIHlvdSBhcmUgd29ya2luZyBmcm9tIGEgJ2dpdCBzdm4nLWF3YXJlCisJcmVwb3NpdG9yeSAodGhhdCBoYXMgYmVlbiBgaW5pdGAtZWQgd2l0aCAnZ2l0IHN2bicpLgorCVRoZSAtcjxyZXZpc2lvbj4gb3B0aW9uIGlzIHJlcXVpcmVkIGZvciB0aGlzLgorKworVGhlIGNvbW1pdCBtZXNzYWdlIGlzIHN1cHBsaWVkIGVpdGhlciBkaXJlY3RseSB3aXRoIHRoZSBgLW1gIG9yIGAtRmAKK29wdGlvbiwgb3IgaW5kaXJlY3RseSBmcm9tIHRoZSB0YWcgb3IgY29tbWl0IHdoZW4gdGhlIHNlY29uZCB0cmVlLWlzaAorZGVub3RlcyBzdWNoIGFuIG9iamVjdCwgb3IgaXQgaXMgcmVxdWVzdGVkIGJ5IGludm9raW5nIGFuIGVkaXRvciAoc2VlCitgLS1lZGl0YCBvcHRpb24gYmVsb3cpLgorCistbSA8bXNnPjs7CistLW1lc3NhZ2U9PG1zZz47OworCVVzZSB0aGUgZ2l2ZW4gYG1zZ2AgYXMgdGhlIGNvbW1pdCBtZXNzYWdlLiBUaGlzIG9wdGlvbgorCWRpc2FibGVzIHRoZSBgLS1lZGl0YCBvcHRpb24uCisKKy1GIDxmaWxlbmFtZT47OworLS1maWxlPTxmaWxlbmFtZT47OworCVRha2UgdGhlIGNvbW1pdCBtZXNzYWdlIGZyb20gdGhlIGdpdmVuIGZpbGUuIFRoaXMgb3B0aW9uCisJZGlzYWJsZXMgdGhlIGAtLWVkaXRgIG9wdGlvbi4KKworJ2luZm8nOjoKKwlTaG93cyBpbmZvcm1hdGlvbiBhYm91dCBhIGZpbGUgb3IgZGlyZWN0b3J5IHNpbWlsYXIgdG8gd2hhdAorCWBzdm4gaW5mbycgcHJvdmlkZXMuICBEb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBhIC1yLy0tcmV2aXNpb24KKwlhcmd1bWVudC4gIFVzZSB0aGUgLS11cmwgb3B0aW9uIHRvIG91dHB1dCBvbmx5IHRoZSB2YWx1ZSBvZiB0aGUKKwknVVJMOicgZmllbGQuCisKKydwcm9wbGlzdCc6OgorCUxpc3RzIHRoZSBwcm9wZXJ0aWVzIHN0b3JlZCBpbiB0aGUgU3VidmVyc2lvbiByZXBvc2l0b3J5IGFib3V0IGEKKwlnaXZlbiBmaWxlIG9yIGRpcmVjdG9yeS4gIFVzZSAtci8tLXJldmlzaW9uIHRvIHJlZmVyIHRvIGEgc3BlY2lmaWMKKwlTdWJ2ZXJzaW9uIHJldmlzaW9uLgorCisncHJvcGdldCc6OgorCUdldHMgdGhlIFN1YnZlcnNpb24gcHJvcGVydHkgZ2l2ZW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCBmb3IgYQorCWZpbGUuICBBIHNwZWNpZmljIHJldmlzaW9uIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCAtci8tLXJldmlzaW9uLgorCisncHJvcHNldCc6OgorCVNldHMgdGhlIFN1YnZlcnNpb24gcHJvcGVydHkgZ2l2ZW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCB0byB0aGUKKwl2YWx1ZSBnaXZlbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGZvciB0aGUgZmlsZSBnaXZlbiBhcyB0aGUKKwl0aGlyZCBhcmd1bWVudC4KKysKK0V4YW1wbGU6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBzdm4gcHJvcHNldCBzdm46a2V5d29yZHMgIkZyZWVCU0Q9JUgiIGRldmVsL3B5LXRpcHBlci9NYWtlZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIHdpbGwgc2V0IHRoZSBwcm9wZXJ0eSAnc3ZuOmtleXdvcmRzJyB0byAnRnJlZUJTRD0lSCcgZm9yIHRoZSBmaWxlCisnZGV2ZWwvcHktdGlwcGVyL01ha2VmaWxlJy4KKworJ3Nob3ctZXh0ZXJuYWxzJzo6CisJU2hvd3MgdGhlIFN1YnZlcnNpb24gZXh0ZXJuYWxzLiAgVXNlIC1yLy0tcmV2aXNpb24gdG8gc3BlY2lmeSBhCisJc3BlY2lmaWMgcmV2aXNpb24uCisKKydnYyc6OgorCUNvbXByZXNzICRHSVRfRElSL3N2bi88cmVmbmFtZT4vdW5oYW5kbGVkLmxvZyBmaWxlcyBhbmQgcmVtb3ZlCisJJEdJVF9ESVIvc3ZuLzxyZWZuYW1lPi9pbmRleCBmaWxlcy4KKworJ3Jlc2V0Jzo6CisJVW5kb2VzIHRoZSBlZmZlY3RzIG9mICdmZXRjaCcgYmFjayB0byB0aGUgc3BlY2lmaWVkIHJldmlzaW9uLgorCVRoaXMgYWxsb3dzIHlvdSB0byByZS0nZmV0Y2gnIGFuIFNWTiByZXZpc2lvbi4gIE5vcm1hbGx5IHRoZQorCWNvbnRlbnRzIG9mIGFuIFNWTiByZXZpc2lvbiBzaG91bGQgbmV2ZXIgY2hhbmdlIGFuZCAncmVzZXQnCisJc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuICBIb3dldmVyLCBpZiBTVk4gcGVybWlzc2lvbnMgY2hhbmdlLAorCW9yIGlmIHlvdSBhbHRlciB5b3VyIC0taWdub3JlLXBhdGhzIG9wdGlvbiwgYSAnZmV0Y2gnIG1heSBmYWlsCisJd2l0aCAibm90IGZvdW5kIGluIGNvbW1pdCIgKGZpbGUgbm90IHByZXZpb3VzbHkgdmlzaWJsZSkgb3IKKwkiY2hlY2tzdW0gbWlzbWF0Y2giIChtaXNzZWQgYSBtb2RpZmljYXRpb24pLiAgSWYgdGhlIHByb2JsZW0KKwlmaWxlIGNhbm5vdCBiZSBpZ25vcmVkIGZvcmV2ZXIgKHdpdGggLS1pZ25vcmUtcGF0aHMpIHRoZSBvbmx5CisJd2F5IHRvIHJlcGFpciB0aGUgcmVwbyBpcyB0byB1c2UgJ3Jlc2V0Jy4KKysKK09ubHkgdGhlIHJldl9tYXAgYW5kIHJlZnMvcmVtb3Rlcy9naXQtc3ZuIGFyZSBjaGFuZ2VkIChzZWUKKyckR0lUX0RJUi9zdm4vXCoqLy5yZXZfbWFwLionIGluIHRoZSBGSUxFUyBzZWN0aW9uIGJlbG93IGZvciBkZXRhaWxzKS4KK0ZvbGxvdyAncmVzZXQnIHdpdGggYSAnZmV0Y2gnIGFuZCB0aGVuICdnaXQgcmVzZXQnIG9yICdnaXQgcmViYXNlJyB0bworbW92ZSBsb2NhbCBicmFuY2hlcyBvbnRvIHRoZSBuZXcgdHJlZS4KKworLXIgPG4+OzsKKy0tcmV2aXNpb249PG4+OzsKKwlTcGVjaWZ5IHRoZSBtb3N0IHJlY2VudCByZXZpc2lvbiB0byBrZWVwLiAgQWxsIGxhdGVyIHJldmlzaW9ucworCWFyZSBkaXNjYXJkZWQuCistcDs7CistLXBhcmVudDs7CisJRGlzY2FyZCB0aGUgc3BlY2lmaWVkIHJldmlzaW9uIGFzIHdlbGwsIGtlZXBpbmcgdGhlIG5lYXJlc3QKKwlwYXJlbnQgaW5zdGVhZC4KK0V4YW1wbGU6OzsKK0Fzc3VtZSB5b3UgaGF2ZSBsb2NhbCBjaGFuZ2VzIGluICJtYXN0ZXIiLCBidXQgeW91IG5lZWQgdG8gcmVmZXRjaCAicjIiLgorKworLS0tLS0tLS0tLS0tCisgICAgcjEtLS1yMi0tLXIzIHJlbW90ZXMvZ2l0LXN2bgorICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgQS0tLUIgbWFzdGVyCistLS0tLS0tLS0tLS0KKysKK0ZpeCB0aGUgaWdub3JlLXBhdGhzIG9yIFNWTiBwZXJtaXNzaW9ucyBwcm9ibGVtIHRoYXQgY2F1c2VkICJyMiIgdG8KK2JlIGluY29tcGxldGUgaW4gdGhlIGZpcnN0IHBsYWNlLiAgVGhlbjoKKysKK1t2ZXJzZV0KK2dpdCBzdm4gcmVzZXQgLXIyIC1wCitnaXQgc3ZuIGZldGNoCisrCistLS0tLS0tLS0tLS0KKyAgICByMS0tLXIyJy0tcjMnIHJlbW90ZXMvZ2l0LXN2bgorICAgICAgXAorICAgICAgIHIyLS0tcjMtLS1BLS0tQiBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorKworVGhlbiBmaXh1cCAibWFzdGVyIiB3aXRoICdnaXQgcmViYXNlJy4KK0RvIE5PVCB1c2UgJ2dpdCBtZXJnZScgb3IgeW91ciBoaXN0b3J5IHdpbGwgbm90IGJlIGNvbXBhdGlibGUgd2l0aCBhCitmdXR1cmUgJ2Rjb21taXQnIQorKworW3ZlcnNlXQorZ2l0IHJlYmFzZSAtLW9udG8gcmVtb3Rlcy9naXQtc3ZuIEFeIG1hc3RlcgorKworLS0tLS0tLS0tLS0tCisgICAgcjEtLS1yMictLXIzJyByZW1vdGVzL2dpdC1zdm4KKyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIEEnLS1CJyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitPUFRJT05TCistLS0tLS0tCisKKy0tc2hhcmVkWz0oZmFsc2V8dHJ1ZXx1bWFza3xncm91cHxhbGx8d29ybGR8ZXZlcnlib2R5KV06OgorLS10ZW1wbGF0ZT08dGVtcGxhdGVfZGlyZWN0b3J5Pjo6CisJT25seSB1c2VkIHdpdGggdGhlICdpbml0JyBjb21tYW5kLgorCVRoZXNlIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdCBpbml0Jy4KKworLXIgPGFyZz46OgorLS1yZXZpc2lvbiA8YXJnPjo6CisJICAgVXNlZCB3aXRoIHRoZSAnZmV0Y2gnIGNvbW1hbmQuCisrCitUaGlzIGFsbG93cyByZXZpc2lvbiByYW5nZXMgZm9yIHBhcnRpYWwvY2F1dGVyaXplZCBoaXN0b3J5Cit0byBiZSBzdXBwb3J0ZWQuICAkTlVNQkVSLCAkTlVNQkVSMTokTlVNQkVSMiAobnVtZXJpYyByYW5nZXMpLAorJE5VTUJFUjpIRUFELCBhbmQgQkFTRTokTlVNQkVSIGFyZSBhbGwgc3VwcG9ydGVkLgorKworVGhpcyBjYW4gYWxsb3cgeW91IHRvIG1ha2UgcGFydGlhbCBtaXJyb3JzIHdoZW4gcnVubmluZyBmZXRjaDsKK2J1dCBpcyBnZW5lcmFsbHkgbm90IHJlY29tbWVuZGVkIGJlY2F1c2UgaGlzdG9yeSB3aWxsIGJlIHNraXBwZWQKK2FuZCBsb3N0LgorCistOjoKKy0tc3RkaW46OgorCU9ubHkgdXNlZCB3aXRoIHRoZSAnc2V0LXRyZWUnIGNvbW1hbmQuCisrCitSZWFkIGEgbGlzdCBvZiBjb21taXRzIGZyb20gc3RkaW4gYW5kIGNvbW1pdCB0aGVtIGluIHJldmVyc2UKK29yZGVyLiAgT25seSB0aGUgbGVhZGluZyBzaGExIGlzIHJlYWQgZnJvbSBlYWNoIGxpbmUsIHNvCisnZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUnIG91dHB1dCBjYW4gYmUgdXNlZC4KKworLS1ybWRpcjo6CisJT25seSB1c2VkIHdpdGggdGhlICdkY29tbWl0JywgJ3NldC10cmVlJyBhbmQgJ2NvbW1pdC1kaWZmJyBjb21tYW5kcy4KKysKK1JlbW92ZSBkaXJlY3RvcmllcyBmcm9tIHRoZSBTVk4gdHJlZSBpZiB0aGVyZSBhcmUgbm8gZmlsZXMgbGVmdAorYmVoaW5kLiAgU1ZOIGNhbiB2ZXJzaW9uIGVtcHR5IGRpcmVjdG9yaWVzLCBhbmQgdGhleSBhcmUgbm90CityZW1vdmVkIGJ5IGRlZmF1bHQgaWYgdGhlcmUgYXJlIG5vIGZpbGVzIGxlZnQgaW4gdGhlbS4gIEdpdAorY2Fubm90IHZlcnNpb24gZW1wdHkgZGlyZWN0b3JpZXMuICBFbmFibGluZyB0aGlzIGZsYWcgd2lsbCBtYWtlCit0aGUgY29tbWl0IHRvIFNWTiBhY3QgbGlrZSBHaXQuCisrCitbdmVyc2VdCitjb25maWcga2V5OiBzdm4ucm1kaXIKKworLWU6OgorLS1lZGl0OjoKKwlPbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnLCAnc2V0LXRyZWUnIGFuZCAnY29tbWl0LWRpZmYnIGNvbW1hbmRzLgorKworRWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmcgdG8gU1ZOLiAgVGhpcyBpcyBvZmYgYnkKK2RlZmF1bHQgZm9yIG9iamVjdHMgdGhhdCBhcmUgY29tbWl0cywgYW5kIGZvcmNlZCBvbiB3aGVuIGNvbW1pdHRpbmcKK3RyZWUgb2JqZWN0cy4KKysKK1t2ZXJzZV0KK2NvbmZpZyBrZXk6IHN2bi5lZGl0CisKKy1sPG51bT46OgorLS1maW5kLWNvcGllcy1oYXJkZXI6OgorCU9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcsICdzZXQtdHJlZScgYW5kICdjb21taXQtZGlmZicgY29tbWFuZHMuCisrCitUaGV5IGFyZSBib3RoIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0IGRpZmYtdHJlZSc7IHNlZQorbGlua2dpdDpnaXQtZGlmZi10cmVlWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLmwKK2NvbmZpZyBrZXk6IHN2bi5maW5kY29waWVzaGFyZGVyCisKKy1BPGZpbGVuYW1lPjo6CistLWF1dGhvcnMtZmlsZT08ZmlsZW5hbWU+OjoKKwlTeW50YXggaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBmaWxlIHVzZWQgYnkgJ2dpdCBjdnNpbXBvcnQnIGJ1dAorCWFuIGVtcHR5IGVtYWlsIGFkZHJlc3MgY2FuIGJlIHN1cHBsaWVkIHdpdGggJzw+JzoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWxvZ2lubmFtZSA9IEpvZSBVc2VyIDx1c2VyQGV4YW1wbGUuY29tPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQgYW5kICdnaXQgc3ZuJyBlbmNvdW50ZXJzIGFuIFNWTgorY29tbWl0dGVyIG5hbWUgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgYXV0aG9ycy1maWxlLCAnZ2l0IHN2bicKK3dpbGwgYWJvcnQgb3BlcmF0aW9uLiBUaGUgdXNlciB3aWxsIHRoZW4gaGF2ZSB0byBhZGQgdGhlCithcHByb3ByaWF0ZSBlbnRyeS4gIFJlLXJ1bm5pbmcgdGhlIHByZXZpb3VzICdnaXQgc3ZuJyBjb21tYW5kCithZnRlciB0aGUgYXV0aG9ycy1maWxlIGlzIG1vZGlmaWVkIHNob3VsZCBjb250aW51ZSBvcGVyYXRpb24uCisrCitbdmVyc2VdCitjb25maWcga2V5OiBzdm4uYXV0aG9yc2ZpbGUKKworLS1hdXRob3JzLXByb2c9PGZpbGVuYW1lPjo6CisJSWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLCBmb3IgZWFjaCBTVk4gY29tbWl0dGVyIG5hbWUgdGhhdAorCWRvZXMgbm90IGV4aXN0IGluIHRoZSBhdXRob3JzIGZpbGUsIHRoZSBnaXZlbiBmaWxlIGlzIGV4ZWN1dGVkCisJd2l0aCB0aGUgY29tbWl0dGVyIG5hbWUgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHByb2dyYW0gaXMKKwlleHBlY3RlZCB0byByZXR1cm4gYSBzaW5nbGUgbGluZSBvZiB0aGUgZm9ybSAiTmFtZSA8ZW1haWw+IiBvcgorCSJOYW1lIDw+Iiwgd2hpY2ggd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGluY2x1ZGVkIGluIHRoZSBhdXRob3JzCisJZmlsZS4KKysKK0R1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMgYSByZWxhdGl2ZSAnZmlsZW5hbWUnIGlzIGZpcnN0IHNlYXJjaGVkCityZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkgZm9yICdpbml0JyBhbmQgJ2Nsb25lJyBhbmQgcmVsYXRpdmUKK3RvIHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUgZm9yICdmZXRjaCcuIElmICdmaWxlbmFtZScgaXMKK25vdCBmb3VuZCwgaXQgaXMgc2VhcmNoZWQgbGlrZSBhbnkgb3RoZXIgY29tbWFuZCBpbiAnJFBBVEgnLgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLmF1dGhvcnNQcm9nCisKKy1xOjoKKy0tcXVpZXQ6OgorCU1ha2UgJ2dpdCBzdm4nIGxlc3MgdmVyYm9zZS4gU3BlY2lmeSBhIHNlY29uZCB0aW1lIHRvIG1ha2UgaXQKKwlldmVuIGxlc3MgdmVyYm9zZS4KKworLW06OgorLS1tZXJnZTo6CistczxzdHJhdGVneT46OgorLS1zdHJhdGVneT08c3RyYXRlZ3k+OjoKKy1wOjoKKy0tcmViYXNlLW1lcmdlczo6CistLXByZXNlcnZlLW1lcmdlcyAoREVQUkVDQVRFRCk6OgorCVRoZXNlIGFyZSBvbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnIGFuZCAncmViYXNlJyBjb21tYW5kcy4KKysKK1Bhc3NlZCBkaXJlY3RseSB0byAnZ2l0IHJlYmFzZScgd2hlbiB1c2luZyAnZGNvbW1pdCcgaWYgYQorJ2dpdCByZXNldCcgY2Fubm90IGJlIHVzZWQgKHNlZSAnZGNvbW1pdCcpLgorCistbjo6CistLWRyeS1ydW46OgorCVRoaXMgY2FuIGJlIHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnLCAncmViYXNlJywgJ2JyYW5jaCcgYW5kCisJJ3RhZycgY29tbWFuZHMuCisrCitGb3IgJ2Rjb21taXQnLCBwcmludCBvdXQgdGhlIHNlcmllcyBvZiBHaXQgYXJndW1lbnRzIHRoYXQgd291bGQgc2hvdword2hpY2ggZGlmZnMgd291bGQgYmUgY29tbWl0dGVkIHRvIFNWTi4KKysKK0ZvciAncmViYXNlJywgZGlzcGxheSB0aGUgbG9jYWwgYnJhbmNoIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXBzdHJlYW0gc3ZuCityZXBvc2l0b3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHRoZSBVUkwgb2Ygc3ZuCityZXBvc2l0b3J5IHRoYXQgd2lsbCBiZSBmZXRjaGVkIGZyb20uCisrCitGb3IgJ2JyYW5jaCcgYW5kICd0YWcnLCBkaXNwbGF5IHRoZSB1cmxzIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBjb3B5aW5nIHdoZW4KK2NyZWF0aW5nIHRoZSBicmFuY2ggb3IgdGFnLgorCistLXVzZS1sb2ctYXV0aG9yOjoKKwlXaGVuIHJldHJpZXZpbmcgc3ZuIGNvbW1pdHMgaW50byBHaXQgKGFzIHBhcnQgb2YgJ2ZldGNoJywgJ3JlYmFzZScsIG9yCisJJ2Rjb21taXQnIG9wZXJhdGlvbnMpLCBsb29rIGZvciB0aGUgZmlyc3QgYEZyb206YCBvciBgU2lnbmVkLW9mZi1ieTpgIGxpbmUKKwlpbiB0aGUgbG9nIG1lc3NhZ2UgYW5kIHVzZSB0aGF0IGFzIHRoZSBhdXRob3Igc3RyaW5nLgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLnVzZUxvZ0F1dGhvcgorCistLWFkZC1hdXRob3ItZnJvbTo6CisJV2hlbiBjb21taXR0aW5nIHRvIHN2biBmcm9tIEdpdCAoYXMgcGFydCBvZiAnc2V0LXRyZWUnIG9yICdkY29tbWl0JworCW9wZXJhdGlvbnMpLCBpZiB0aGUgZXhpc3RpbmcgbG9nIG1lc3NhZ2UgZG9lc24ndCBhbHJlYWR5IGhhdmUgYQorCWBGcm9tOmAgb3IgYFNpZ25lZC1vZmYtYnk6YCBsaW5lLCBhcHBlbmQgYSBgRnJvbTpgIGxpbmUgYmFzZWQgb24gdGhlCisJR2l0IGNvbW1pdCdzIGF1dGhvciBzdHJpbmcuICBJZiB5b3UgdXNlIHRoaXMsIHRoZW4gYC0tdXNlLWxvZy1hdXRob3JgCisJd2lsbCByZXRyaWV2ZSBhIHZhbGlkIGF1dGhvciBzdHJpbmcgZm9yIGFsbCBjb21taXRzLgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLmFkZEF1dGhvckZyb20KKworQURWQU5DRUQgT1BUSU9OUworLS0tLS0tLS0tLS0tLS0tLQorCistaTxHSVRfU1ZOX0lEPjo6CistLWlkIDxHSVRfU1ZOX0lEPjo6CisJVGhpcyBzZXRzIEdJVF9TVk5fSUQgKGluc3RlYWQgb2YgdXNpbmcgdGhlIGVudmlyb25tZW50KS4gIFRoaXMKKwlhbGxvd3MgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcmVmbmFtZSB0byBmZXRjaCBmcm9tCisJd2hlbiB0cmFja2luZyBhIHNpbmdsZSBVUkwuICBUaGUgJ2xvZycgYW5kICdkY29tbWl0JyBjb21tYW5kcworCW5vIGxvbmdlciByZXF1aXJlIHRoaXMgc3dpdGNoIGFzIGFuIGFyZ3VtZW50LgorCistUjxyZW1vdGUgbmFtZT46OgorLS1zdm4tcmVtb3RlIDxyZW1vdGUgbmFtZT46OgorCVNwZWNpZnkgdGhlIFtzdm4tcmVtb3RlICI8cmVtb3RlIG5hbWU+Il0gc2VjdGlvbiB0byB1c2UsCisJdGhpcyBhbGxvd3MgU1ZOIG11bHRpcGxlIHJlcG9zaXRvcmllcyB0byBiZSB0cmFja2VkLgorCURlZmF1bHQ6ICJzdm4iCisKKy0tZm9sbG93LXBhcmVudDo6CisJVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCBpZiB3ZSBhcmUgdHJhY2tpbmcgYnJhbmNoZXMgKHVzaW5nCisJb25lIG9mIHRoZSByZXBvc2l0b3J5IGxheW91dCBvcHRpb25zIC0tdHJ1bmssIC0tdGFncywKKwktLWJyYW5jaGVzLCAtLXN0ZGxheW91dCkuIEZvciBlYWNoIHRyYWNrZWQgYnJhbmNoLCB0cnkgdG8gZmluZAorCW91dCB3aGVyZSBpdHMgcmV2aXNpb24gd2FzIGNvcGllZCBmcm9tLCBhbmQgc2V0CisJYSBzdWl0YWJsZSBwYXJlbnQgaW4gdGhlIGZpcnN0IEdpdCBjb21taXQgZm9yIHRoZSBicmFuY2guCisJVGhpcyBpcyBlc3BlY2lhbGx5IGhlbHBmdWwgd2hlbiB3ZSdyZSB0cmFja2luZyBhIGRpcmVjdG9yeQorCXRoYXQgaGFzIGJlZW4gbW92ZWQgYXJvdW5kIHdpdGhpbiB0aGUgcmVwb3NpdG9yeS4gIElmIHRoaXMKKwlmZWF0dXJlIGlzIGRpc2FibGVkLCB0aGUgYnJhbmNoZXMgY3JlYXRlZCBieSAnZ2l0IHN2bicgd2lsbCBhbGwKKwliZSBsaW5lYXIgYW5kIG5vdCBzaGFyZSBhbnkgaGlzdG9yeSwgbWVhbmluZyB0aGF0IHRoZXJlIHdpbGwgYmUKKwlubyBpbmZvcm1hdGlvbiBvbiB3aGVyZSBicmFuY2hlcyB3ZXJlIGJyYW5jaGVkIG9mZiBvciBtZXJnZWQuCisJSG93ZXZlciwgZm9sbG93aW5nIGxvbmcvY29udm9sdXRlZCBoaXN0b3JpZXMgY2FuIHRha2UgYSBsb25nCisJdGltZSwgc28gZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBtYXkgc3BlZWQgdXAgdGhlIGNsb25pbmcKKwlwcm9jZXNzLiBUaGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB1c2UKKwktLW5vLWZvbGxvdy1wYXJlbnQgdG8gZGlzYWJsZSBpdC4KKysKK1t2ZXJzZV0KK2NvbmZpZyBrZXk6IHN2bi5mb2xsb3dwYXJlbnQKKworQ09ORklHIEZJTEUtT05MWSBPUFRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3ZuLm5vTWV0YWRhdGE6Ogorc3ZuLXJlbW90ZS48bmFtZT4ubm9NZXRhZGF0YTo6CisJVGhpcyBnZXRzIHJpZCBvZiB0aGUgJ2dpdC1zdm4taWQ6JyBsaW5lcyBhdCB0aGUgZW5kIG9mIGV2ZXJ5IGNvbW1pdC4KKysKK1RoaXMgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZm9yIG9uZS1zaG90IGltcG9ydHMgYXMgJ2dpdCBzdm4nCit3aWxsIG5vdCBiZSBhYmxlIHRvIGZldGNoIGFnYWluIHdpdGhvdXQgbWV0YWRhdGEuIEFkZGl0aW9uYWxseSwKK2lmIHlvdSBsb3NlIHlvdXIgJyRHSVRfRElSL3N2bi9cKiovLnJldl9tYXAuKicgZmlsZXMsICdnaXQgc3ZuJyB3aWxsIG5vdAorYmUgYWJsZSB0byByZWJ1aWxkIHRoZW0uCisrCitUaGUgJ2dpdCBzdm4gbG9nJyBjb21tYW5kIHdpbGwgbm90IHdvcmsgb24gcmVwb3NpdG9yaWVzIHVzaW5nCit0aGlzLCBlaXRoZXIuICBVc2luZyB0aGlzIGNvbmZsaWN0cyB3aXRoIHRoZSAndXNlU3ZtUHJvcHMnCitvcHRpb24gZm9yIChob3BlZnVsbHkpIG9idmlvdXMgcmVhc29ucy4KKysKK1RoaXMgb3B0aW9uIGlzIE5PVCByZWNvbW1lbmRlZCBhcyBpdCBtYWtlcyBpdCBkaWZmaWN1bHQgdG8gdHJhY2sgZG93bgorb2xkIHJlZmVyZW5jZXMgdG8gU1ZOIHJldmlzaW9uIG51bWJlcnMgaW4gZXhpc3RpbmcgZG9jdW1lbnRhdGlvbiwgYnVnCityZXBvcnRzLCBhbmQgYXJjaGl2ZXMuICBJZiB5b3UgcGxhbiB0byBldmVudHVhbGx5IG1pZ3JhdGUgZnJvbSBTVk4gdG8KK0dpdCBhbmQgYXJlIGNlcnRhaW4gYWJvdXQgZHJvcHBpbmcgU1ZOIGhpc3RvcnksIGNvbnNpZGVyCitodHRwczovL2dpdGh1Yi5jb20vbmV3cmVuL2dpdC1maWx0ZXItcmVwb1tnaXQtZmlsdGVyLXJlcG9dIGluc3RlYWQuCitmaWx0ZXItcmVwbyBhbHNvIGFsbG93cyByZWZvcm1hdHRpbmcgb2YgbWV0YWRhdGEgZm9yIGVhc2Utb2YtcmVhZGluZworYW5kIHJld3JpdGluZyBhdXRob3JzaGlwIGluZm8gZm9yIG5vbi0ic3ZuLmF1dGhvcnNGaWxlIiB1c2Vycy4KKworc3ZuLnVzZVN2bVByb3BzOjoKK3N2bi1yZW1vdGUuPG5hbWU+LnVzZVN2bVByb3BzOjoKKwlUaGlzIGFsbG93cyAnZ2l0IHN2bicgdG8gcmUtbWFwIHJlcG9zaXRvcnkgVVJMcyBhbmQgVVVJRHMgZnJvbQorCW1pcnJvcnMgY3JlYXRlZCB1c2luZyBTVk46Ok1pcnJvciAob3Igc3ZrKSBmb3IgbWV0YWRhdGEuCisrCitJZiBhbiBTVk4gcmV2aXNpb24gaGFzIGEgcHJvcGVydHksICJzdm06aGVhZHJldiIsIGl0IGlzIGxpa2VseQordGhhdCB0aGUgcmV2aXNpb24gd2FzIGNyZWF0ZWQgYnkgU1ZOOjpNaXJyb3IgKGFsc28gdXNlZCBieSBTVkspLgorVGhlIHByb3BlcnR5IGNvbnRhaW5zIGEgcmVwb3NpdG9yeSBVVUlEIGFuZCBhIHJldmlzaW9uLiAgV2Ugd2FudAordG8gbWFrZSBpdCBsb29rIGxpa2Ugd2UgYXJlIG1pcnJvcmluZyB0aGUgb3JpZ2luYWwgVVJMLCBzbworaW50cm9kdWNlIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgb3JpZ2luYWwgaWRlbnRpdHkKK1VSTCBhbmQgVVVJRCwgYW5kIHVzZSBpdCB3aGVuIGdlbmVyYXRpbmcgbWV0YWRhdGEgaW4gY29tbWl0CittZXNzYWdlcy4KKworc3ZuLnVzZVN2bnN5bmNQcm9wczo6Citzdm4tcmVtb3RlLjxuYW1lPi51c2VTdm5zeW5jcHJvcHM6OgorCVNpbWlsYXIgdG8gdGhlIHVzZVN2bVByb3BzIG9wdGlvbjsgdGhpcyBpcyBmb3IgdXNlcnMKKwlvZiB0aGUgc3Zuc3luYygxKSBjb21tYW5kIGRpc3RyaWJ1dGVkIHdpdGggU1ZOIDEuNC54IGFuZAorCWxhdGVyLgorCitzdm4tcmVtb3RlLjxuYW1lPi5yZXdyaXRlUm9vdDo6CisJVGhpcyBhbGxvd3MgdXNlcnMgdG8gY3JlYXRlIHJlcG9zaXRvcmllcyBmcm9tIGFsdGVybmF0ZQorCVVSTHMuICBGb3IgZXhhbXBsZSwgYW4gYWRtaW5pc3RyYXRvciBjb3VsZCBydW4gJ2dpdCBzdm4nIG9uIHRoZQorCXNlcnZlciBsb2NhbGx5IChhY2Nlc3NpbmcgdmlhIGZpbGU6Ly8pIGJ1dCB3aXNoIHRvIGRpc3RyaWJ1dGUKKwl0aGUgcmVwb3NpdG9yeSB3aXRoIGEgcHVibGljIGh0dHA6Ly8gb3Igc3ZuOi8vIFVSTCBpbiB0aGUKKwltZXRhZGF0YSBzbyB1c2VycyBvZiBpdCB3aWxsIHNlZSB0aGUgcHVibGljIFVSTC4KKworc3ZuLXJlbW90ZS48bmFtZT4ucmV3cml0ZVVVSUQ6OgorCVNpbWlsYXIgdG8gdGhlIHVzZVN2bVByb3BzIG9wdGlvbjsgdGhpcyBpcyBmb3IgdXNlcnMgd2hvIG5lZWQKKwl0byByZW1hcCB0aGUgVVVJRCBtYW51YWxseS4gVGhpcyBtYXkgYmUgdXNlZnVsIGluIHNpdHVhdGlvbnMKKwl3aGVyZSB0aGUgb3JpZ2luYWwgVVVJRCBpcyBub3QgYXZhaWxhYmxlIHZpYSBlaXRoZXIgdXNlU3ZtUHJvcHMKKwlvciB1c2VTdm5zeW5jUHJvcHMuCisKK3N2bi1yZW1vdGUuPG5hbWU+LnB1c2h1cmw6OgorCisJU2ltaWxhciB0byBHaXQncyBgcmVtb3RlLjxuYW1lPi5wdXNodXJsYCwgdGhpcyBrZXkgaXMgZGVzaWduZWQKKwl0byBiZSB1c2VkIGluIGNhc2VzIHdoZXJlICd1cmwnIHBvaW50cyB0byBhbiBTVk4gcmVwb3NpdG9yeQorCXZpYSBhIHJlYWQtb25seSB0cmFuc3BvcnQsIHRvIHByb3ZpZGUgYW4gYWx0ZXJuYXRlIHJlYWQvd3JpdGUKKwl0cmFuc3BvcnQuIEl0IGlzIGFzc3VtZWQgdGhhdCBib3RoIGtleXMgcG9pbnQgdG8gdGhlIHNhbWUKKwlyZXBvc2l0b3J5LiBVbmxpa2UgJ2NvbW1pdHVybCcsICdwdXNodXJsJyBpcyBhIGJhc2UgcGF0aC4gSWYKKwllaXRoZXIgJ2NvbW1pdHVybCcgb3IgJ3B1c2h1cmwnIGNvdWxkIGJlIHVzZWQsICdjb21taXR1cmwnCisJdGFrZXMgcHJlY2VkZW5jZS4KKworc3ZuLmJyb2tlblN5bWxpbmtXb3JrYXJvdW5kOjoKKwlUaGlzIGRpc2FibGVzIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBjaGVja3MgdG8gd29ya2Fyb3VuZAorCWJyb2tlbiBzeW1saW5rcyBjaGVja2VkIGludG8gU1ZOIGJ5IGJyb2tlbiBjbGllbnRzLiAgU2V0IHRoaXMKKwlvcHRpb24gdG8gImZhbHNlIiBpZiB5b3UgdHJhY2sgYSBTVk4gcmVwb3NpdG9yeSB3aXRoIG1hbnkKKwllbXB0eSBibG9icyB0aGF0IGFyZSBub3Qgc3ltbGlua3MuICBUaGlzIG9wdGlvbiBtYXkgYmUgY2hhbmdlZAorCXdoaWxlICdnaXQgc3ZuJyBpcyBydW5uaW5nIGFuZCB0YWtlIGVmZmVjdCBvbiB0aGUgbmV4dAorCXJldmlzaW9uIGZldGNoZWQuICBJZiB1bnNldCwgJ2dpdCBzdm4nIGFzc3VtZXMgdGhpcyBvcHRpb24gdG8KKwliZSAidHJ1ZSIuCisKK3N2bi5wYXRobmFtZWVuY29kaW5nOjoKKwlUaGlzIGluc3RydWN0cyBnaXQgc3ZuIHRvIHJlY29kZSBwYXRobmFtZXMgdG8gYSBnaXZlbiBlbmNvZGluZy4KKwlJdCBjYW4gYmUgdXNlZCBieSB3aW5kb3dzIHVzZXJzIGFuZCBieSB0aG9zZSB3aG8gd29yayBpbiBub24tdXRmOAorCWxvY2FsZXMgdG8gYXZvaWQgY29ycnVwdGVkIGZpbGUgbmFtZXMgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycy4KKwlWYWxpZCBlbmNvZGluZ3MgYXJlIHRoZSBvbmVzIHN1cHBvcnRlZCBieSBQZXJsJ3MgRW5jb2RlIG1vZHVsZS4KKworc3ZuLXJlbW90ZS48bmFtZT4uYXV0b21rZGlyczo6CisJTm9ybWFsbHksIHRoZSAiZ2l0IHN2biBjbG9uZSIgYW5kICJnaXQgc3ZuIHJlYmFzZSIgY29tbWFuZHMKKwlhdHRlbXB0IHRvIHJlY3JlYXRlIGVtcHR5IGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZQorCVN1YnZlcnNpb24gcmVwb3NpdG9yeS4gIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byAiZmFsc2UiLCB0aGVuCisJZW1wdHkgZGlyZWN0b3JpZXMgd2lsbCBvbmx5IGJlIGNyZWF0ZWQgaWYgdGhlICJnaXQgc3ZuIG1rZGlycyIKKwljb21tYW5kIGlzIHJ1biBleHBsaWNpdGx5LiAgSWYgdW5zZXQsICdnaXQgc3ZuJyBhc3N1bWVzIHRoaXMKKwlvcHRpb24gdG8gYmUgInRydWUiLgorCitTaW5jZSB0aGUgbm9NZXRhZGF0YSwgcmV3cml0ZVJvb3QsIHJld3JpdGVVVUlELCB1c2VTdm5zeW5jUHJvcHMgYW5kIHVzZVN2bVByb3BzCitvcHRpb25zIGFsbCBhZmZlY3QgdGhlIG1ldGFkYXRhIGdlbmVyYXRlZCBhbmQgdXNlZCBieSAnZ2l0IHN2bic7IHRoZXkKKyptdXN0KiBiZSBzZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBiZWZvcmUgYW55IGhpc3RvcnkgaXMgaW1wb3J0ZWQKK2FuZCB0aGVzZSBzZXR0aW5ncyBzaG91bGQgbmV2ZXIgYmUgY2hhbmdlZCBvbmNlIHRoZXkgYXJlIHNldC4KKworQWRkaXRpb25hbGx5LCBvbmx5IG9uZSBvZiB0aGVzZSBvcHRpb25zIGNhbiBiZSB1c2VkIHBlciBzdm4tcmVtb3RlCitzZWN0aW9uIGJlY2F1c2UgdGhleSBhZmZlY3QgdGhlICdnaXQtc3ZuLWlkOicgbWV0YWRhdGEgbGluZSwgZXhjZXB0Citmb3IgcmV3cml0ZVJvb3QgYW5kIHJld3JpdGVVVUlEIHdoaWNoIGNhbiBiZSB1c2VkIHRvZ2V0aGVyLgorCisKK0JBU0lDIEVYQU1QTEVTCistLS0tLS0tLS0tLS0tLQorCitUcmFja2luZyBhbmQgY29udHJpYnV0aW5nIHRvIHRoZSB0cnVuayBvZiBhIFN1YnZlcnNpb24tbWFuYWdlZCBwcm9qZWN0CisoaWdub3JpbmcgdGFncyBhbmQgYnJhbmNoZXMpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2xvbmUgYSByZXBvIChsaWtlIGdpdCBjbG9uZSk6CisJZ2l0IHN2biBjbG9uZSBodHRwOi8vc3ZuLmV4YW1wbGUuY29tL3Byb2plY3QvdHJ1bmsKKyMgRW50ZXIgdGhlIG5ld2x5IGNsb25lZCBkaXJlY3Rvcnk6CisJY2QgdHJ1bmsKKyMgWW91IHNob3VsZCBiZSBvbiBtYXN0ZXIgYnJhbmNoLCBkb3VibGUtY2hlY2sgd2l0aCAnZ2l0IGJyYW5jaCcKKwlnaXQgYnJhbmNoCisjIERvIHNvbWUgd29yayBhbmQgY29tbWl0IGxvY2FsbHkgdG8gR2l0OgorCWdpdCBjb21taXQgLi4uCisjIFNvbWV0aGluZyBpcyBjb21taXR0ZWQgdG8gU1ZOLCByZWJhc2UgeW91ciBsb2NhbCBjaGFuZ2VzIGFnYWluc3QgdGhlCisjIGxhdGVzdCBjaGFuZ2VzIGluIFNWTjoKKwlnaXQgc3ZuIHJlYmFzZQorIyBOb3cgY29tbWl0IHlvdXIgY2hhbmdlcyAodGhhdCB3ZXJlIGNvbW1pdHRlZCBwcmV2aW91c2x5IHVzaW5nIEdpdCkgdG8gU1ZOLAorIyBhcyB3ZWxsIGFzIGF1dG9tYXRpY2FsbHkgdXBkYXRpbmcgeW91ciB3b3JraW5nIEhFQUQ6CisJZ2l0IHN2biBkY29tbWl0CisjIEFwcGVuZCBzdm46aWdub3JlIHNldHRpbmdzIHRvIHRoZSBkZWZhdWx0IEdpdCBleGNsdWRlIGZpbGU6CisJZ2l0IHN2biBzaG93LWlnbm9yZSA+PiAuZ2l0L2luZm8vZXhjbHVkZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RyYWNraW5nIGFuZCBjb250cmlidXRpbmcgdG8gYW4gZW50aXJlIFN1YnZlcnNpb24tbWFuYWdlZCBwcm9qZWN0CisoY29tcGxldGUgd2l0aCBhIHRydW5rLCB0YWdzIGFuZCBicmFuY2hlcyk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDbG9uZSBhIHJlcG8gd2l0aCBzdGFuZGFyZCBTVk4gZGlyZWN0b3J5IGxheW91dCAobGlrZSBnaXQgY2xvbmUpOgorCWdpdCBzdm4gY2xvbmUgaHR0cDovL3N2bi5leGFtcGxlLmNvbS9wcm9qZWN0IC0tc3RkbGF5b3V0IC0tcHJlZml4IHN2bi8KKyMgT3IsIGlmIHRoZSByZXBvIHVzZXMgYSBub24tc3RhbmRhcmQgZGlyZWN0b3J5IGxheW91dDoKKwlnaXQgc3ZuIGNsb25lIGh0dHA6Ly9zdm4uZXhhbXBsZS5jb20vcHJvamVjdCAtVCB0ciAtYiBicmFuY2ggLXQgdGFnIC0tcHJlZml4IHN2bi8KKyMgVmlldyBhbGwgYnJhbmNoZXMgYW5kIHRhZ3MgeW91IGhhdmUgY2xvbmVkOgorCWdpdCBicmFuY2ggLXIKKyMgQ3JlYXRlIGEgbmV3IGJyYW5jaCBpbiBTVk4KKwlnaXQgc3ZuIGJyYW5jaCB3YWxkbworIyBSZXNldCB5b3VyIG1hc3RlciB0byB0cnVuayAob3IgYW55IG90aGVyIGJyYW5jaCwgcmVwbGFjaW5nICd0cnVuaycKKyMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbmFtZSk6CisJZ2l0IHJlc2V0IC0taGFyZCBzdm4vdHJ1bmsKKyMgWW91IG1heSBvbmx5IGRjb21taXQgdG8gb25lIGJyYW5jaC90YWcvdHJ1bmsgYXQgYSB0aW1lLiAgVGhlIHVzYWdlCisjIG9mIGRjb21taXQvcmViYXNlL3Nob3ctaWdub3JlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBhYm92ZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW5pdGlhbCAnZ2l0IHN2biBjbG9uZScgY2FuIGJlIHF1aXRlIHRpbWUtY29uc3VtaW5nCisoZXNwZWNpYWxseSBmb3IgbGFyZ2UgU3VidmVyc2lvbiByZXBvc2l0b3JpZXMpLiBJZiBtdWx0aXBsZQorcGVvcGxlIChvciBvbmUgcGVyc29uIHdpdGggbXVsdGlwbGUgbWFjaGluZXMpIHdhbnQgdG8gdXNlCisnZ2l0IHN2bicgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgc2FtZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnksIHlvdSBjYW4KK2RvIHRoZSBpbml0aWFsICdnaXQgc3ZuIGNsb25lJyB0byBhIHJlcG9zaXRvcnkgb24gYSBzZXJ2ZXIgYW5kCitoYXZlIGVhY2ggcGVyc29uIGNsb25lIHRoYXQgcmVwb3NpdG9yeSB3aXRoICdnaXQgY2xvbmUnOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRG8gdGhlIGluaXRpYWwgaW1wb3J0IG9uIGEgc2VydmVyCisJc3NoIHNlcnZlciAiY2QgL3B1YiAmJiBnaXQgc3ZuIGNsb25lIGh0dHA6Ly9zdm4uZXhhbXBsZS5jb20vcHJvamVjdCBbb3B0aW9ucy4uLl0iCisjIENsb25lIGxvY2FsbHkgLSBtYWtlIHN1cmUgdGhlIHJlZnMvcmVtb3Rlcy8gc3BhY2UgbWF0Y2hlcyB0aGUgc2VydmVyCisJbWtkaXIgcHJvamVjdAorCWNkIHByb2plY3QKKwlnaXQgaW5pdAorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiBzZXJ2ZXI6L3B1Yi9wcm9qZWN0CisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIHJlbW90ZS5vcmlnaW4uZmV0Y2ggJytyZWZzL3JlbW90ZXMvKjpyZWZzL3JlbW90ZXMvKicKKwlnaXQgZmV0Y2gKKyMgUHJldmVudCBmZXRjaC9wdWxsIGZyb20gcmVtb3RlIEdpdCBzZXJ2ZXIgaW4gdGhlIGZ1dHVyZSwKKyMgd2Ugb25seSB3YW50IHRvIHVzZSBnaXQgc3ZuIGZvciBmdXR1cmUgdXBkYXRlcworCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiByZW1vdGUub3JpZ2luCisjIENyZWF0ZSBhIGxvY2FsIGJyYW5jaCBmcm9tIG9uZSBvZiB0aGUgYnJhbmNoZXMganVzdCBmZXRjaGVkCisJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciBGRVRDSF9IRUFECisjIEluaXRpYWxpemUgJ2dpdCBzdm4nIGxvY2FsbHkgKGJlIHN1cmUgdG8gdXNlIHRoZSBzYW1lIFVSTCBhbmQKKyMgLS1zdGRsYXlvdXQvLVQvLWIvLXQvLS1wcmVmaXggb3B0aW9ucyBhcyB3ZXJlIHVzZWQgb24gc2VydmVyKQorCWdpdCBzdm4gaW5pdCBodHRwOi8vc3ZuLmV4YW1wbGUuY29tL3Byb2plY3QgW29wdGlvbnMuLi5dCisjIFB1bGwgdGhlIGxhdGVzdCBjaGFuZ2VzIGZyb20gU3VidmVyc2lvbgorCWdpdCBzdm4gcmViYXNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUkVCQVNFIFZTLiBQVUxML01FUkdFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1ByZWZlciB0byB1c2UgJ2dpdCBzdm4gcmViYXNlJyBvciAnZ2l0IHJlYmFzZScsIHJhdGhlciB0aGFuCisnZ2l0IHB1bGwnIG9yICdnaXQgbWVyZ2UnIHRvIHN5bmNocm9uaXplIHVuaW50ZWdyYXRlZCBjb21taXRzIHdpdGggYSAnZ2l0IHN2bicKK2JyYW5jaC4gRG9pbmcgc28gd2lsbCBrZWVwIHRoZSBoaXN0b3J5IG9mIHVuaW50ZWdyYXRlZCBjb21taXRzIGxpbmVhciB3aXRoCityZXNwZWN0IHRvIHRoZSB1cHN0cmVhbSBTVk4gcmVwb3NpdG9yeSBhbmQgYWxsb3cgdGhlIHVzZSBvZiB0aGUgcHJlZmVycmVkCisnZ2l0IHN2biBkY29tbWl0JyBzdWJjb21tYW5kIHRvIHB1c2ggdW5pbnRlZ3JhdGVkIGNvbW1pdHMgYmFjayBpbnRvIFNWTi4KKworT3JpZ2luYWxseSwgJ2dpdCBzdm4nIHJlY29tbWVuZGVkIHRoYXQgZGV2ZWxvcGVycyBwdWxsZWQgb3IgbWVyZ2VkIGZyb20KK3RoZSAnZ2l0IHN2bicgYnJhbmNoLiAgVGhpcyB3YXMgYmVjYXVzZSB0aGUgYXV0aG9yIGZhdm9yZWQKK2BnaXQgc3ZuIHNldC10cmVlIEJgIHRvIGNvbW1pdCBhIHNpbmdsZSBoZWFkIHJhdGhlciB0aGFuIHRoZQorYGdpdCBzdm4gc2V0LXRyZWUgQS4uQmAgbm90YXRpb24gdG8gY29tbWl0IG11bHRpcGxlIGNvbW1pdHMuIFVzZSBvZgorJ2dpdCBwdWxsJyBvciAnZ2l0IG1lcmdlJyB3aXRoIGBnaXQgc3ZuIHNldC10cmVlIEEuLkJgIHdpbGwgY2F1c2Ugbm9uLWxpbmVhcgoraGlzdG9yeSB0byBiZSBmbGF0dGVuZWQgd2hlbiBjb21taXR0aW5nIGludG8gU1ZOIGFuZCB0aGlzIGNhbiBsZWFkIHRvIG1lcmdlCitjb21taXRzIHVuZXhwZWN0ZWRseSByZXZlcnNpbmcgcHJldmlvdXMgY29tbWl0cyBpbiBTVk4uCisKK01FUkdFIFRSQUNLSU5HCistLS0tLS0tLS0tLS0tLQorV2hpbGUgJ2dpdCBzdm4nIGNhbiB0cmFjaworY29weSBoaXN0b3J5IChpbmNsdWRpbmcgYnJhbmNoZXMgYW5kIHRhZ3MpIGZvciByZXBvc2l0b3JpZXMgYWRvcHRpbmcgYQorc3RhbmRhcmQgbGF5b3V0LCBpdCBjYW5ub3QgeWV0IHJlcHJlc2VudCBtZXJnZSBoaXN0b3J5IHRoYXQgaGFwcGVuZWQKK2luc2lkZSBnaXQgYmFjayB1cHN0cmVhbSB0byBTVk4gdXNlcnMuICBUaGVyZWZvcmUgaXQgaXMgYWR2aXNlZCB0aGF0Cit1c2VycyBrZWVwIGhpc3RvcnkgYXMgbGluZWFyIGFzIHBvc3NpYmxlIGluc2lkZSBHaXQgdG8gZWFzZQorY29tcGF0aWJpbGl0eSB3aXRoIFNWTiAoc2VlIHRoZSBDQVZFQVRTIHNlY3Rpb24gYmVsb3cpLgorCitIQU5ETElORyBPRiBTVk4gQlJBTkNIRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgJ2dpdCBzdm4nIGlzIGNvbmZpZ3VyZWQgdG8gZmV0Y2ggYnJhbmNoZXMgKGFuZCAtLWZvbGxvdy1icmFuY2hlcworaXMgaW4gZWZmZWN0KSwgaXQgc29tZXRpbWVzIGNyZWF0ZXMgbXVsdGlwbGUgR2l0IGJyYW5jaGVzIGZvciBvbmUKK1NWTiBicmFuY2gsIHdoZXJlIHRoZSBhZGRpdGlvbmFsIGJyYW5jaGVzIGhhdmUgbmFtZXMgb2YgdGhlIGZvcm0KKydicmFuY2huYW1lQG5ubicgKHdpdGggbm5uIGFuIFNWTiByZXZpc2lvbiBudW1iZXIpLiAgVGhlc2UgYWRkaXRpb25hbAorYnJhbmNoZXMgYXJlIGNyZWF0ZWQgaWYgJ2dpdCBzdm4nIGNhbm5vdCBmaW5kIGEgcGFyZW50IGNvbW1pdCBmb3IgdGhlCitmaXJzdCBjb21taXQgaW4gYW4gU1ZOIGJyYW5jaCwgdG8gY29ubmVjdCB0aGUgYnJhbmNoIHRvIHRoZSBoaXN0b3J5IG9mCit0aGUgb3RoZXIgYnJhbmNoZXMuCisKK05vcm1hbGx5LCB0aGUgZmlyc3QgY29tbWl0IGluIGFuIFNWTiBicmFuY2ggY29uc2lzdHMKK29mIGEgY29weSBvcGVyYXRpb24uICdnaXQgc3ZuJyB3aWxsIHJlYWQgdGhpcyBjb21taXQgdG8gZ2V0IHRoZSBTVk4KK3JldmlzaW9uIHRoZSBicmFuY2ggd2FzIGNyZWF0ZWQgZnJvbS4gSXQgd2lsbCB0aGVuIHRyeSB0byBmaW5kIHRoZQorR2l0IGNvbW1pdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgU1ZOIHJldmlzaW9uLCBhbmQgdXNlIHRoYXQgYXMgdGhlCitwYXJlbnQgb2YgdGhlIGJyYW5jaC4gSG93ZXZlciwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBubyBzdWl0YWJsZQorR2l0IGNvbW1pdCB0byBzZXJ2ZSBhcyBwYXJlbnQuICBUaGlzIHdpbGwgaGFwcGVuLCBhbW9uZyBvdGhlciByZWFzb25zLAoraWYgdGhlIFNWTiBicmFuY2ggaXMgYSBjb3B5IG9mIGEgcmV2aXNpb24gdGhhdCB3YXMgbm90IGZldGNoZWQgYnkgJ2dpdAorc3ZuJyAoZS5nLiBiZWNhdXNlIGl0IGlzIGFuIG9sZCByZXZpc2lvbiB0aGF0IHdhcyBza2lwcGVkIHdpdGgKK2AtLXJldmlzaW9uYCksIG9yIGlmIGluIFNWTiBhIGRpcmVjdG9yeSB3YXMgY29waWVkIHRoYXQgaXMgbm90IHRyYWNrZWQKK2J5ICdnaXQgc3ZuJyAoc3VjaCBhcyBhIGJyYW5jaCB0aGF0IGlzIG5vdCB0cmFja2VkIGF0IGFsbCwgb3IgYQorc3ViZGlyZWN0b3J5IG9mIGEgdHJhY2tlZCBicmFuY2gpLiBJbiB0aGVzZSBjYXNlcywgJ2dpdCBzdm4nIHdpbGwgc3RpbGwKK2NyZWF0ZSBhIEdpdCBicmFuY2gsIGJ1dCBpbnN0ZWFkIG9mIHVzaW5nIGFuIGV4aXN0aW5nIEdpdCBjb21taXQgYXMgdGhlCitwYXJlbnQgb2YgdGhlIGJyYW5jaCwgaXQgd2lsbCByZWFkIHRoZSBTVk4gaGlzdG9yeSBvZiB0aGUgZGlyZWN0b3J5IHRoZQorYnJhbmNoIHdhcyBjb3BpZWQgZnJvbSBhbmQgY3JlYXRlIGFwcHJvcHJpYXRlIEdpdCBjb21taXRzLiAgVGhpcyBpcworaW5kaWNhdGVkIGJ5IHRoZSBtZXNzYWdlICJJbml0aWFsaXppbmcgcGFyZW50OiA8YnJhbmNobmFtZT4iLgorCitBZGRpdGlvbmFsbHksIGl0IHdpbGwgY3JlYXRlIGEgc3BlY2lhbCBicmFuY2ggbmFtZWQKKyc8YnJhbmNobmFtZT5APFNWTi1SZXZpc2lvbj4nLCB3aGVyZSA8U1ZOLVJldmlzaW9uPiBpcyB0aGUgU1ZOIHJldmlzaW9uCitudW1iZXIgdGhlIGJyYW5jaCB3YXMgY29waWVkIGZyb20uICBUaGlzIGJyYW5jaCB3aWxsIHBvaW50IHRvIHRoZSBuZXdseQorY3JlYXRlZCBwYXJlbnQgY29tbWl0IG9mIHRoZSBicmFuY2guICBJZiBpbiBTVk4gdGhlIGJyYW5jaCB3YXMgZGVsZXRlZAorYW5kIGxhdGVyIHJlY3JlYXRlZCBmcm9tIGEgZGlmZmVyZW50IHZlcnNpb24sIHRoZXJlIHdpbGwgYmUgbXVsdGlwbGUKK3N1Y2ggYnJhbmNoZXMgd2l0aCBhbiAnQCcuCisKK05vdGUgdGhhdCB0aGlzIG1heSBtZWFuIHRoYXQgbXVsdGlwbGUgR2l0IGNvbW1pdHMgYXJlIGNyZWF0ZWQgZm9yIGEKK3NpbmdsZSBTVk4gcmV2aXNpb24uCisKK0FuIGV4YW1wbGU6IGluIGFuIFNWTiByZXBvc2l0b3J5IHdpdGggYSBzdGFuZGFyZAordHJ1bmsvdGFncy9icmFuY2hlcyBsYXlvdXQsIGEgZGlyZWN0b3J5IHRydW5rL3N1YiBpcyBjcmVhdGVkIGluIHIuMTAwLgorSW4gci4yMDAsIHRydW5rL3N1YiBpcyBicmFuY2hlZCBieSBjb3B5aW5nIGl0IHRvIGJyYW5jaGVzLy4gJ2dpdCBzdm4KK2Nsb25lIC1zJyB3aWxsIHRoZW4gY3JlYXRlIGEgYnJhbmNoICdzdWInLiBJdCB3aWxsIGFsc28gY3JlYXRlIG5ldyBHaXQKK2NvbW1pdHMgZm9yIHIuMTAwIHRocm91Z2ggci4xOTkgYW5kIHVzZSB0aGVzZSBhcyB0aGUgaGlzdG9yeSBvZiBicmFuY2gKKydzdWInLiBUaHVzIHRoZXJlIHdpbGwgYmUgdHdvIEdpdCBjb21taXRzIGZvciBlYWNoIHJldmlzaW9uIGZyb20gci4xMDAKK3RvIHIuMTk5IChvbmUgY29udGFpbmluZyB0cnVuay8sIG9uZSBjb250YWluaW5nIHRydW5rL3N1Yi8pLiBGaW5hbGx5LAoraXQgd2lsbCBjcmVhdGUgYSBicmFuY2ggJ3N1YkAyMDAnIHBvaW50aW5nIHRvIHRoZSBuZXcgcGFyZW50IGNvbW1pdCBvZgorYnJhbmNoICdzdWInIChpLmUuIHRoZSBjb21taXQgZm9yIHIuMjAwIGFuZCB0cnVuay9zdWIvKS4KKworQ0FWRUFUUworLS0tLS0tLQorCitGb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eSBhbmQgaW50ZXJvcGVyYXRpbmcgd2l0aCBTdWJ2ZXJzaW9uLAoraXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbGwgJ2dpdCBzdm4nIHVzZXJzIGNsb25lLCBmZXRjaCBhbmQgZGNvbW1pdAorZGlyZWN0bHkgZnJvbSB0aGUgU1ZOIHNlcnZlciwgYW5kIGF2b2lkIGFsbCAnZ2l0IGNsb25lJy8ncHVsbCcvJ21lcmdlJy8ncHVzaCcKK29wZXJhdGlvbnMgYmV0d2VlbiBHaXQgcmVwb3NpdG9yaWVzIGFuZCBicmFuY2hlcy4gIFRoZSByZWNvbW1lbmRlZAorbWV0aG9kIG9mIGV4Y2hhbmdpbmcgY29kZSBiZXR3ZWVuIEdpdCBicmFuY2hlcyBhbmQgdXNlcnMgaXMKKydnaXQgZm9ybWF0LXBhdGNoJyBhbmQgJ2dpdCBhbScsIG9yIGp1c3QgJ2Rjb21taXQnaW5nIHRvIHRoZSBTVk4gcmVwb3NpdG9yeS4KKworUnVubmluZyAnZ2l0IG1lcmdlJyBvciAnZ2l0IHB1bGwnIGlzIE5PVCByZWNvbW1lbmRlZCBvbiBhIGJyYW5jaCB5b3UKK3BsYW4gdG8gJ2Rjb21taXQnIGZyb20gYmVjYXVzZSBTdWJ2ZXJzaW9uIHVzZXJzIGNhbm5vdCBzZWUgYW55CittZXJnZXMgeW91J3ZlIG1hZGUuICBGdXJ0aGVybW9yZSwgaWYgeW91IG1lcmdlIG9yIHB1bGwgZnJvbSBhIEdpdCBicmFuY2gKK3RoYXQgaXMgYSBtaXJyb3Igb2YgYW4gU1ZOIGJyYW5jaCwgJ2Rjb21taXQnIG1heSBjb21taXQgdG8gdGhlIHdyb25nCiticmFuY2guCisKK0lmIHlvdSBkbyBtZXJnZSwgbm90ZSB0aGUgZm9sbG93aW5nIHJ1bGU6ICdnaXQgc3ZuIGRjb21taXQnIHdpbGwKK2F0dGVtcHQgdG8gY29tbWl0IG9uIHRvcCBvZiB0aGUgU1ZOIGNvbW1pdCBuYW1lZCBpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgbG9nIC0tZ3JlcD1eZ2l0LXN2bi1pZDogLS1maXJzdC1wYXJlbnQgLTEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91ICdtdXN0JyB0aGVyZWZvcmUgZW5zdXJlIHRoYXQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBvZiB0aGUgYnJhbmNoCit5b3Ugd2FudCB0byBkY29tbWl0IHRvIGlzIHRoZSAnZmlyc3QnIHBhcmVudCBvZiB0aGUgbWVyZ2UuICBDaGFvcyB3aWxsCitlbnN1ZSBvdGhlcndpc2UsIGVzcGVjaWFsbHkgaWYgdGhlIGZpcnN0IHBhcmVudCBpcyBhbiBvbGRlciBjb21taXQgb24KK3RoZSBzYW1lIFNWTiBicmFuY2guCisKKydnaXQgY2xvbmUnIGRvZXMgbm90IGNsb25lIGJyYW5jaGVzIHVuZGVyIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSBvcgorYW55ICdnaXQgc3ZuJyBtZXRhZGF0YSwgb3IgY29uZmlnLiAgU28gcmVwb3NpdG9yaWVzIGNyZWF0ZWQgYW5kIG1hbmFnZWQgd2l0aAordXNpbmcgJ2dpdCBzdm4nIHNob3VsZCB1c2UgJ3JzeW5jJyBmb3IgY2xvbmluZywgaWYgY2xvbmluZyBpcyB0byBiZSBkb25lCithdCBhbGwuCisKK1NpbmNlICdkY29tbWl0JyB1c2VzIHJlYmFzZSBpbnRlcm5hbGx5LCBhbnkgR2l0IGJyYW5jaGVzIHlvdSAnZ2l0IHB1c2gnIHRvCitiZWZvcmUgJ2Rjb21taXQnIG9uIHdpbGwgcmVxdWlyZSBmb3JjaW5nIGFuIG92ZXJ3cml0ZSBvZiB0aGUgZXhpc3RpbmcgcmVmCitvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuICBUaGlzIGlzIGdlbmVyYWxseSBjb25zaWRlcmVkIGJhZCBwcmFjdGljZSwKK3NlZSB0aGUgbGlua2dpdDpnaXQtcHVzaFsxXSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorCitEbyBub3QgdXNlIHRoZSAtLWFtZW5kIG9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1jb21taXRbMV0gb24gYSBjaGFuZ2UgeW91J3ZlCithbHJlYWR5IGRjb21taXR0ZWQuICBJdCBpcyBjb25zaWRlcmVkIGJhZCBwcmFjdGljZSB0byAtLWFtZW5kIGNvbW1pdHMKK3lvdSd2ZSBhbHJlYWR5IHB1c2hlZCB0byBhIHJlbW90ZSByZXBvc2l0b3J5IGZvciBvdGhlciB1c2VycywgYW5kCitkY29tbWl0IHdpdGggU1ZOIGlzIGFuYWxvZ291cyB0byB0aGF0LgorCitXaGVuIGNsb25pbmcgYW4gU1ZOIHJlcG9zaXRvcnksIGlmIG5vbmUgb2YgdGhlIG9wdGlvbnMgZm9yIGRlc2NyaWJpbmcKK3RoZSByZXBvc2l0b3J5IGxheW91dCBpcyB1c2VkICgtLXRydW5rLCAtLXRhZ3MsIC0tYnJhbmNoZXMsCistLXN0ZGxheW91dCksICdnaXQgc3ZuIGNsb25lJyB3aWxsIGNyZWF0ZSBhIEdpdCByZXBvc2l0b3J5IHdpdGgKK2NvbXBsZXRlbHkgbGluZWFyIGhpc3RvcnksIHdoZXJlIGJyYW5jaGVzIGFuZCB0YWdzIGFwcGVhciBhcyBzZXBhcmF0ZQorZGlyZWN0b3JpZXMgaW4gdGhlIHdvcmtpbmcgY29weS4gIFdoaWxlIHRoaXMgaXMgdGhlIGVhc2llc3Qgd2F5IHRvIGdldCBhCitjb3B5IG9mIGEgY29tcGxldGUgcmVwb3NpdG9yeSwgZm9yIHByb2plY3RzIHdpdGggbWFueSBicmFuY2hlcyBpdCB3aWxsCitsZWFkIHRvIGEgd29ya2luZyBjb3B5IG1hbnkgdGltZXMgbGFyZ2VyIHRoYW4ganVzdCB0aGUgdHJ1bmsuIFRodXMgZm9yCitwcm9qZWN0cyB1c2luZyB0aGUgc3RhbmRhcmQgZGlyZWN0b3J5IHN0cnVjdHVyZSAodHJ1bmsvYnJhbmNoZXMvdGFncyksCitpdCBpcyByZWNvbW1lbmRlZCB0byBjbG9uZSB3aXRoIG9wdGlvbiBgLS1zdGRsYXlvdXRgLiBJZiB0aGUgcHJvamVjdAordXNlcyBhIG5vbi1zdGFuZGFyZCBzdHJ1Y3R1cmUsIGFuZC9vciBpZiBicmFuY2hlcyBhbmQgdGFncyBhcmUgbm90CityZXF1aXJlZCwgaXQgaXMgZWFzaWVzdCB0byBvbmx5IGNsb25lIG9uZSBkaXJlY3RvcnkgKHR5cGljYWxseSB0cnVuayksCit3aXRob3V0IGdpdmluZyBhbnkgcmVwb3NpdG9yeSBsYXlvdXQgb3B0aW9ucy4gIElmIHRoZSBmdWxsIGhpc3Rvcnkgd2l0aAorYnJhbmNoZXMgYW5kIHRhZ3MgaXMgcmVxdWlyZWQsIHRoZSBvcHRpb25zIGAtLXRydW5rYCAvIGAtLWJyYW5jaGVzYCAvCitgLS10YWdzYCBtdXN0IGJlIHVzZWQuCisKK1doZW4gdXNpbmcgbXVsdGlwbGUgLS1icmFuY2hlcyBvciAtLXRhZ3MsICdnaXQgc3ZuJyBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5CitoYW5kbGUgbmFtZSBjb2xsaXNpb25zIChmb3IgZXhhbXBsZSwgaWYgdHdvIGJyYW5jaGVzIGZyb20gZGlmZmVyZW50IHBhdGhzIGhhdmUKK3RoZSBzYW1lIG5hbWUsIG9yIGlmIGEgYnJhbmNoIGFuZCBhIHRhZyBoYXZlIHRoZSBzYW1lIG5hbWUpLiAgSW4gdGhlc2UgY2FzZXMsCit1c2UgJ2luaXQnIHRvIHNldCB1cCB5b3VyIEdpdCByZXBvc2l0b3J5IHRoZW4sIGJlZm9yZSB5b3VyIGZpcnN0ICdmZXRjaCcsIGVkaXQKK3RoZSAkR0lUX0RJUi9jb25maWcgZmlsZSBzbyB0aGF0IHRoZSBicmFuY2hlcyBhbmQgdGFncyBhcmUgYXNzb2NpYXRlZAord2l0aCBkaWZmZXJlbnQgbmFtZSBzcGFjZXMuICBGb3IgZXhhbXBsZToKKworCWJyYW5jaGVzID0gc3RhYmxlLyo6cmVmcy9yZW1vdGVzL3N2bi9zdGFibGUvKgorCWJyYW5jaGVzID0gZGVidWcvKjpyZWZzL3JlbW90ZXMvc3ZuL2RlYnVnLyoKKworQlVHUworLS0tLQorCitXZSBpZ25vcmUgYWxsIFNWTiBwcm9wZXJ0aWVzIGV4Y2VwdCBzdm46ZXhlY3V0YWJsZS4gIEFueSB1bmhhbmRsZWQKK3Byb3BlcnRpZXMgYXJlIGxvZ2dlZCB0byAkR0lUX0RJUi9zdm4vPHJlZm5hbWU+L3VuaGFuZGxlZC5sb2cKKworUmVuYW1lZCBhbmQgY29waWVkIGRpcmVjdG9yaWVzIGFyZSBub3QgZGV0ZWN0ZWQgYnkgR2l0IGFuZCBoZW5jZSBub3QKK3RyYWNrZWQgd2hlbiBjb21taXR0aW5nIHRvIFNWTi4gIEkgZG8gbm90IHBsYW4gb24gYWRkaW5nIHN1cHBvcnQgZm9yCit0aGlzIGFzIGl0J3MgcXVpdGUgZGlmZmljdWx0IGFuZCB0aW1lLWNvbnN1bWluZyB0byBnZXQgd29ya2luZyBmb3IgYWxsCit0aGUgcG9zc2libGUgY29ybmVyIGNhc2VzIChHaXQgZG9lc24ndCBkbyBpdCwgZWl0aGVyKS4gIENvbW1pdHRpbmcKK3JlbmFtZWQgYW5kIGNvcGllZCBmaWxlcyBpcyBmdWxseSBzdXBwb3J0ZWQgaWYgdGhleSdyZSBzaW1pbGFyIGVub3VnaAorZm9yIEdpdCB0byBkZXRlY3QgdGhlbS4KKworSW4gU1ZOLCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIGRpc2NvdXJhZ2VkKSB0byBjb21taXQgY2hhbmdlcyB0byBhIHRhZworKGJlY2F1c2UgYSB0YWcgaXMganVzdCBhIGRpcmVjdG9yeSBjb3B5LCB0aHVzIHRlY2huaWNhbGx5IHRoZSBzYW1lIGFzIGEKK2JyYW5jaCkuIFdoZW4gY2xvbmluZyBhbiBTVk4gcmVwb3NpdG9yeSwgJ2dpdCBzdm4nIGNhbm5vdCBrbm93IGlmIHN1Y2ggYQorY29tbWl0IHRvIGEgdGFnIHdpbGwgaGFwcGVuIGluIHRoZSBmdXR1cmUuIFRodXMgaXQgYWN0cyBjb25zZXJ2YXRpdmVseQorYW5kIGltcG9ydHMgYWxsIFNWTiB0YWdzIGFzIGJyYW5jaGVzLCBwcmVmaXhpbmcgdGhlIHRhZyBuYW1lIHdpdGggJ3RhZ3MvJy4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCisnZ2l0IHN2bicgc3RvcmVzIFtzdm4tcmVtb3RlXSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGluIHRoZQorcmVwb3NpdG9yeSAkR0lUX0RJUi9jb25maWcgZmlsZS4gIEl0IGlzIHNpbWlsYXIgdGhlIGNvcmUgR2l0CitbcmVtb3RlXSBzZWN0aW9ucyBleGNlcHQgJ2ZldGNoJyBrZXlzIGRvIG5vdCBhY2NlcHQgZ2xvYgorYXJndW1lbnRzOyBidXQgdGhleSBhcmUgaW5zdGVhZCBoYW5kbGVkIGJ5IHRoZSAnYnJhbmNoZXMnCithbmQgJ3RhZ3MnIGtleXMuICBTaW5jZSBzb21lIFNWTiByZXBvc2l0b3JpZXMgYXJlIG9kZGx5Citjb25maWd1cmVkIHdpdGggbXVsdGlwbGUgcHJvamVjdHMgZ2xvYiBleHBhbnNpb25zIHN1Y2ggdGhvc2UKK2xpc3RlZCBiZWxvdyBhcmUgYWxsb3dlZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbc3ZuLXJlbW90ZSAicHJvamVjdC1hIl0KKwl1cmwgPSBodHRwOi8vc2VydmVyLm9yZy9zdm4KKwlmZXRjaCA9IHRydW5rL3Byb2plY3QtYTpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL3RydW5rCisJYnJhbmNoZXMgPSBicmFuY2hlcy8qL3Byb2plY3QtYTpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL2JyYW5jaGVzLyoKKwlicmFuY2hlcyA9IGJyYW5jaGVzL3JlbGVhc2VfKjpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL2JyYW5jaGVzL3JlbGVhc2VfKgorCWJyYW5jaGVzID0gYnJhbmNoZXMvcmUqc2U6cmVmcy9yZW1vdGVzL3Byb2plY3QtYS9icmFuY2hlcy8qCisJdGFncyA9IHRhZ3MvKi9wcm9qZWN0LWE6cmVmcy9yZW1vdGVzL3Byb2plY3QtYS90YWdzLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitLZWVwIGluIG1pbmQgdGhhdCB0aGUgYCpgIChhc3Rlcmlzaykgd2lsZGNhcmQgb2YgdGhlIGxvY2FsIHJlZgorKHJpZ2h0IG9mIHRoZSBgOmApICptdXN0KiBiZSB0aGUgZmFydGhlc3QgcmlnaHQgcGF0aCBjb21wb25lbnQ7Citob3dldmVyIHRoZSByZW1vdGUgd2lsZGNhcmQgbWF5IGJlIGFueXdoZXJlIGFzIGxvbmcgYXMgaXQncyBhbgoraW5kZXBlbmRlbnQgcGF0aCBjb21wb25lbnQgKHN1cnJvdW5kZWQgYnkgYC9gIG9yIEVPTCkuICAgVGhpcwordHlwZSBvZiBjb25maWd1cmF0aW9uIGlzIG5vdCBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgJ2luaXQnIGFuZAorc2hvdWxkIGJlIG1hbnVhbGx5IGVudGVyZWQgd2l0aCBhIHRleHQtZWRpdG9yIG9yIHVzaW5nICdnaXQgY29uZmlnJy4KKworQWxzbyBub3RlIHRoYXQgb25seSBvbmUgYXN0ZXJpc2sgaXMgYWxsb3dlZCBwZXIgd29yZC4gRm9yIGV4YW1wbGU6CisKKwlicmFuY2hlcyA9IGJyYW5jaGVzL3JlKnNlOnJlZnMvcmVtb3Rlcy9wcm9qZWN0LWEvYnJhbmNoZXMvKgorCit3aWxsIG1hdGNoIGJyYW5jaGVzICdyZWxlYXNlJywgJ3Jlc2UnLCAncmUxMjNzZScsIGhvd2V2ZXIKKworCWJyYW5jaGVzID0gYnJhbmNoZXMvcmUqcyplOnJlZnMvcmVtb3Rlcy9wcm9qZWN0LWEvYnJhbmNoZXMvKgorCit3aWxsIHByb2R1Y2UgYW4gZXJyb3IuCisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZmV0Y2ggYSBzdWJzZXQgb2YgYnJhbmNoZXMgb3IgdGFncyBieSB1c2luZyBhCitjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBuYW1lcyB3aXRoaW4gYnJhY2VzLiBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbc3ZuLXJlbW90ZSAiaHVnZS1wcm9qZWN0Il0KKwl1cmwgPSBodHRwOi8vc2VydmVyLm9yZy9zdm4KKwlmZXRjaCA9IHRydW5rL3NyYzpyZWZzL3JlbW90ZXMvdHJ1bmsKKwlicmFuY2hlcyA9IGJyYW5jaGVzL3tyZWQsZ3JlZW59L3NyYzpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL2JyYW5jaGVzLyoKKwl0YWdzID0gdGFncy97MS4wLDIuMH0vc3JjOnJlZnMvcmVtb3Rlcy9wcm9qZWN0LWEvdGFncy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTXVsdGlwbGUgZmV0Y2gsIGJyYW5jaGVzLCBhbmQgdGFncyBrZXlzIGFyZSBzdXBwb3J0ZWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW3N2bi1yZW1vdGUgIm1lc3N5LXJlcG8iXQorCXVybCA9IGh0dHA6Ly9zZXJ2ZXIub3JnL3N2bgorCWZldGNoID0gdHJ1bmsvcHJvamVjdC1hOnJlZnMvcmVtb3Rlcy9wcm9qZWN0LWEvdHJ1bmsKKwlmZXRjaCA9IGJyYW5jaGVzL2RlbW9zL2p1bmUtcHJvamVjdC1hLWRlbW86cmVmcy9yZW1vdGVzL3Byb2plY3QtYS9kZW1vcy9qdW5lLWRlbW8KKwlicmFuY2hlcyA9IGJyYW5jaGVzL3NlcnZlci8qOnJlZnMvcmVtb3Rlcy9wcm9qZWN0LWEvYnJhbmNoZXMvKgorCWJyYW5jaGVzID0gYnJhbmNoZXMvZGVtb3MvMjAxMS8qOnJlZnMvcmVtb3Rlcy9wcm9qZWN0LWEvMjAxMS1kZW1vcy8qCisJdGFncyA9IHRhZ3Mvc2VydmVyLyo6cmVmcy9yZW1vdGVzL3Byb2plY3QtYS90YWdzLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDcmVhdGluZyBhIGJyYW5jaCBpbiBzdWNoIGEgY29uZmlndXJhdGlvbiByZXF1aXJlcyBkaXNhbWJpZ3VhdGluZyB3aGljaAorbG9jYXRpb24gdG8gdXNlIHVzaW5nIHRoZSAtZCBvciAtLWRlc3RpbmF0aW9uIGZsYWc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3ZuIGJyYW5jaCAtZCBicmFuY2hlcy9zZXJ2ZXIgcmVsZWFzZS0yLTMtMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCBnaXQtc3ZuIGtlZXBzIHRyYWNrIG9mIHRoZSBoaWdoZXN0IHJldmlzaW9uIGluIHdoaWNoIGEgYnJhbmNoCitvciB0YWcgaGFzIGFwcGVhcmVkLiBJZiB0aGUgc3Vic2V0IG9mIGJyYW5jaGVzIG9yIHRhZ3MgaXMgY2hhbmdlZCBhZnRlcgorZmV0Y2hpbmcsIHRoZW4gJEdJVF9ESVIvc3ZuLy5tZXRhZGF0YSBtdXN0IGJlIG1hbnVhbGx5IGVkaXRlZCB0byByZW1vdmUKKyhvciByZXNldCkgYnJhbmNoZXMtbWF4UmV2IGFuZC9vciB0YWdzLW1heFJldiBhcyBhcHByb3ByaWF0ZS4KKworRklMRVMKKy0tLS0tCiskR0lUX0RJUi9zdm4vXCoqLy5yZXZfbWFwLio6OgorCU1hcHBpbmcgYmV0d2VlbiBTdWJ2ZXJzaW9uIHJldmlzaW9uIG51bWJlcnMgYW5kIEdpdCBjb21taXQKKwluYW1lcy4gIEluIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGUgbm9NZXRhZGF0YSBvcHRpb24gaXMgbm90IHNldCwKKwl0aGlzIGNhbiBiZSByZWJ1aWx0IGZyb20gdGhlIGdpdC1zdm4taWQ6IGxpbmVzIHRoYXQgYXJlIGF0IHRoZQorCWVuZCBvZiBldmVyeSBjb21taXQgKHNlZSB0aGUgJ3N2bi5ub01ldGFkYXRhJyBzZWN0aW9uIGFib3ZlIGZvcgorCWRldGFpbHMpLgorKworJ2dpdCBzdm4gZmV0Y2gnIGFuZCAnZ2l0IHN2biByZWJhc2UnIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSByZXZfbWFwCitpZiBpdCBpcyBtaXNzaW5nIG9yIG5vdCB1cCB0byBkYXRlLiAgJ2dpdCBzdm4gcmVzZXQnIGF1dG9tYXRpY2FsbHkKK3Jld2luZHMgaXQuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcmViYXNlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3dpdGNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN3aXRjaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc1OWMzYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN3aXRjaC50eHQKQEAgLTAsMCArMSwyNzMgQEAKK2dpdC1zd2l0Y2goMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXN3aXRjaCAtIFN3aXRjaCBicmFuY2hlcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc3dpdGNoJyBbPG9wdGlvbnM+XSBbLS1uby1ndWVzc10gPGJyYW5jaD4KKydnaXQgc3dpdGNoJyBbPG9wdGlvbnM+XSAtLWRldGFjaCBbPHN0YXJ0LXBvaW50Pl0KKydnaXQgc3dpdGNoJyBbPG9wdGlvbnM+XSAoLWN8LUMpIDxuZXctYnJhbmNoPiBbPHN0YXJ0LXBvaW50Pl0KKydnaXQgc3dpdGNoJyBbPG9wdGlvbnM+XSAtLW9ycGhhbiA8bmV3LWJyYW5jaD4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitTd2l0Y2ggdG8gYSBzcGVjaWZpZWQgYnJhbmNoLiBUaGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXggYXJlCit1cGRhdGVkIHRvIG1hdGNoIHRoZSBicmFuY2guIEFsbCBuZXcgY29tbWl0cyB3aWxsIGJlIGFkZGVkIHRvIHRoZSB0aXAKK29mIHRoaXMgYnJhbmNoLgorCitPcHRpb25hbGx5IGEgbmV3IGJyYW5jaCBjb3VsZCBiZSBjcmVhdGVkIHdpdGggZWl0aGVyIGAtY2AsIGAtQ2AsCithdXRvbWF0aWNhbGx5IGZyb20gYSByZW1vdGUgYnJhbmNoIG9mIHNhbWUgbmFtZSAoc2VlIGAtLWd1ZXNzYCksIG9yCitkZXRhY2ggdGhlIHdvcmtpbmcgdHJlZSBmcm9tIGFueSBicmFuY2ggd2l0aCBgLS1kZXRhY2hgLCBhbG9uZyB3aXRoCitzd2l0Y2hpbmcuCisKK1N3aXRjaGluZyBicmFuY2hlcyBkb2VzIG5vdCByZXF1aXJlIGEgY2xlYW4gaW5kZXggYW5kIHdvcmtpbmcgdHJlZQorKGkuZS4gbm8gZGlmZmVyZW5jZXMgY29tcGFyZWQgdG8gYEhFQURgKS4gVGhlIG9wZXJhdGlvbiBpcyBhYm9ydGVkCitob3dldmVyIGlmIHRoZSBvcGVyYXRpb24gbGVhZHMgdG8gbG9zcyBvZiBsb2NhbCBjaGFuZ2VzLCB1bmxlc3MgdG9sZAorb3RoZXJ3aXNlIHdpdGggYC0tZGlzY2FyZC1jaGFuZ2VzYCBvciBgLS1tZXJnZWAuCisKK1RISVMgQ09NTUFORCBJUyBFWFBFUklNRU5UQUwuIFRIRSBCRUhBVklPUiBNQVkgQ0hBTkdFLgorCitPUFRJT05TCistLS0tLS0tCis8YnJhbmNoPjo6CisJQnJhbmNoIHRvIHN3aXRjaCB0by4KKworPG5ldy1icmFuY2g+OjoKKwlOYW1lIGZvciB0aGUgbmV3IGJyYW5jaC4KKworPHN0YXJ0LXBvaW50Pjo6CisJVGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgbmV3IGJyYW5jaC4gU3BlY2lmeWluZyBhCisJYDxzdGFydC1wb2ludD5gIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgYnJhbmNoIGJhc2VkIG9uIHNvbWUKKwlvdGhlciBwb2ludCBpbiBoaXN0b3J5IHRoYW4gd2hlcmUgSEVBRCBjdXJyZW50bHkgcG9pbnRzLiAoT3IsCisJaW4gdGhlIGNhc2Ugb2YgYC0tZGV0YWNoYCwgYWxsb3dzIHlvdSB0byBpbnNwZWN0IGFuZCBkZXRhY2gKKwlmcm9tIHNvbWUgb3RoZXIgcG9pbnQuKQorKworWW91IGNhbiB1c2UgdGhlIGBAey1OfWAgc3ludGF4IHRvIHJlZmVyIHRvIHRoZSBOLXRoIGxhc3QKK2JyYW5jaC9jb21taXQgc3dpdGNoZWQgdG8gdXNpbmcgImdpdCBzd2l0Y2giIG9yICJnaXQgY2hlY2tvdXQiCitvcGVyYXRpb24uIFlvdSBtYXkgYWxzbyBzcGVjaWZ5IGAtYCB3aGljaCBpcyBzeW5vbnltb3VzIHRvIGBAey0xfWAuCitUaGlzIGlzIG9mdGVuIHVzZWQgdG8gc3dpdGNoIHF1aWNrbHkgYmV0d2VlbiB0d28gYnJhbmNoZXMsIG9yIHRvIHVuZG8KK2EgYnJhbmNoIHN3aXRjaCBieSBtaXN0YWtlLgorKworQXMgYSBzcGVjaWFsIGNhc2UsIHlvdSBtYXkgdXNlIGBBLi4uQmAgYXMgYSBzaG9ydGN1dCBmb3IgdGhlIG1lcmdlCitiYXNlIG9mIGBBYCBhbmQgYEJgIGlmIHRoZXJlIGlzIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UuIFlvdSBjYW4gbGVhdmUKK291dCBhdCBtb3N0IG9uZSBvZiBgQWAgYW5kIGBCYCwgaW4gd2hpY2ggY2FzZSBpdCBkZWZhdWx0cyB0byBgSEVBRGAuCisKKy1jIDxuZXctYnJhbmNoPjo6CistLWNyZWF0ZSA8bmV3LWJyYW5jaD46OgorCUNyZWF0ZSBhIG5ldyBicmFuY2ggbmFtZWQgYDxuZXctYnJhbmNoPmAgc3RhcnRpbmcgYXQKKwlgPHN0YXJ0LXBvaW50PmAgYmVmb3JlIHN3aXRjaGluZyB0byB0aGUgYnJhbmNoLiBUaGlzIGlzIGEKKwljb252ZW5pZW50IHNob3J0Y3V0IGZvcjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIDxuZXctYnJhbmNoPgorJCBnaXQgc3dpdGNoIDxuZXctYnJhbmNoPgorLS0tLS0tLS0tLS0tCisKKy1DIDxuZXctYnJhbmNoPjo6CistLWZvcmNlLWNyZWF0ZSA8bmV3LWJyYW5jaD46OgorCVNpbWlsYXIgdG8gYC0tY3JlYXRlYCBleGNlcHQgdGhhdCBpZiBgPG5ldy1icmFuY2g+YCBhbHJlYWR5CisJZXhpc3RzLCBpdCB3aWxsIGJlIHJlc2V0IHRvIGA8c3RhcnQtcG9pbnQ+YC4gVGhpcyBpcyBhCisJY29udmVuaWVudCBzaG9ydGN1dCBmb3I6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCAtZiA8bmV3LWJyYW5jaD4KKyQgZ2l0IHN3aXRjaCA8bmV3LWJyYW5jaD4KKy0tLS0tLS0tLS0tLQorCistZDo6CistLWRldGFjaDo6CisJU3dpdGNoIHRvIGEgY29tbWl0IGZvciBpbnNwZWN0aW9uIGFuZCBkaXNjYXJkYWJsZQorCWV4cGVyaW1lbnRzLiBTZWUgdGhlICJERVRBQ0hFRCBIRUFEIiBzZWN0aW9uIGluCisJbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0gZm9yIGRldGFpbHMuCisKKy0tZ3Vlc3M6OgorLS1uby1ndWVzczo6CisJSWYgYDxicmFuY2g+YCBpcyBub3QgZm91bmQgYnV0IHRoZXJlIGRvZXMgZXhpc3QgYSB0cmFja2luZworCWJyYW5jaCBpbiBleGFjdGx5IG9uZSByZW1vdGUgKGNhbGwgaXQgYDxyZW1vdGU+YCkgd2l0aCBhCisJbWF0Y2hpbmcgbmFtZSwgdHJlYXQgYXMgZXF1aXZhbGVudCB0bworKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggLWMgPGJyYW5jaD4gLS10cmFjayA8cmVtb3RlPi88YnJhbmNoPgorLS0tLS0tLS0tLS0tCisrCitJZiB0aGUgYnJhbmNoIGV4aXN0cyBpbiBtdWx0aXBsZSByZW1vdGVzIGFuZCBvbmUgb2YgdGhlbSBpcyBuYW1lZCBieQordGhlIGBjaGVja291dC5kZWZhdWx0UmVtb3RlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB3ZSdsbCB1c2UgdGhhdAorb25lIGZvciB0aGUgcHVycG9zZXMgb2YgZGlzYW1iaWd1YXRpb24sIGV2ZW4gaWYgdGhlIGA8YnJhbmNoPmAgaXNuJ3QKK3VuaXF1ZSBhY3Jvc3MgYWxsIHJlbW90ZXMuIFNldCBpdCB0byBlLmcuIGBjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbmAKK3RvIGFsd2F5cyBjaGVja291dCByZW1vdGUgYnJhbmNoZXMgZnJvbSB0aGVyZSBpZiBgPGJyYW5jaD5gIGlzCithbWJpZ3VvdXMgYnV0IGV4aXN0cyBvbiB0aGUgJ29yaWdpbicgcmVtb3RlLiBTZWUgYWxzbworYGNoZWNrb3V0LmRlZmF1bHRSZW1vdGVgIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKysKK2AtLWd1ZXNzYCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVXNlIGAtLW5vLWd1ZXNzYCB0byBkaXNhYmxlIGl0LgorCistZjo6CistLWZvcmNlOjoKKwlBbiBhbGlhcyBmb3IgYC0tZGlzY2FyZC1jaGFuZ2VzYC4KKworLS1kaXNjYXJkLWNoYW5nZXM6OgorCVByb2NlZWQgZXZlbiBpZiB0aGUgaW5kZXggb3IgdGhlIHdvcmtpbmcgdHJlZSBkaWZmZXJzIGZyb20KKwlgSEVBRGAuIEJvdGggdGhlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgYXJlIHJlc3RvcmVkIHRvIG1hdGNoCisJdGhlIHN3aXRjaGluZyB0YXJnZXQuIElmIGAtLXJlY3Vyc2Utc3VibW9kdWxlc2AgaXMgc3BlY2lmaWVkLAorCXN1Ym1vZHVsZSBjb250ZW50IGlzIGFsc28gcmVzdG9yZWQgdG8gbWF0Y2ggdGhlIHN3aXRjaGluZworCXRhcmdldC4gVGhpcyBpcyB1c2VkIHRvIHRocm93IGF3YXkgbG9jYWwgY2hhbmdlcy4KKworLW06OgorLS1tZXJnZTo6CisJSWYgeW91IGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9ucyB0byBvbmUgb3IgbW9yZSBmaWxlcyB0aGF0IGFyZQorCWRpZmZlcmVudCBiZXR3ZWVuIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgdGhlIGJyYW5jaCB0byB3aGljaAorCXlvdSBhcmUgc3dpdGNoaW5nLCB0aGUgY29tbWFuZCByZWZ1c2VzIHRvIHN3aXRjaCBicmFuY2hlcyBpbgorCW9yZGVyIHRvIHByZXNlcnZlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiBjb250ZXh0LiAgSG93ZXZlciwKKwl3aXRoIHRoaXMgb3B0aW9uLCBhIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIHRoZSBjdXJyZW50CisJYnJhbmNoLCB5b3VyIHdvcmtpbmcgdHJlZSBjb250ZW50cywgYW5kIHRoZSBuZXcgYnJhbmNoIGlzCisJZG9uZSwgYW5kIHlvdSB3aWxsIGJlIG9uIHRoZSBuZXcgYnJhbmNoLgorKworV2hlbiBhIG1lcmdlIGNvbmZsaWN0IGhhcHBlbnMsIHRoZSBpbmRleCBlbnRyaWVzIGZvciBjb25mbGljdGluZworcGF0aHMgYXJlIGxlZnQgdW5tZXJnZWQsIGFuZCB5b3UgbmVlZCB0byByZXNvbHZlIHRoZSBjb25mbGljdHMKK2FuZCBtYXJrIHRoZSByZXNvbHZlZCBwYXRocyB3aXRoIGBnaXQgYWRkYCAob3IgYGdpdCBybWAgaWYgdGhlIG1lcmdlCitzaG91bGQgcmVzdWx0IGluIGRlbGV0aW9uIG9mIHRoZSBwYXRoKS4KKworLS1jb25mbGljdD08c3R5bGU+OjoKKwlUaGUgc2FtZSBhcyBgLS1tZXJnZWAgb3B0aW9uIGFib3ZlLCBidXQgY2hhbmdlcyB0aGUgd2F5IHRoZQorCWNvbmZsaWN0aW5nIGh1bmtzIGFyZSBwcmVzZW50ZWQsIG92ZXJyaWRpbmcgdGhlCisJYG1lcmdlLmNvbmZsaWN0U3R5bGVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBQb3NzaWJsZSB2YWx1ZXMgYXJlCisJIm1lcmdlIiAoZGVmYXVsdCkgYW5kICJkaWZmMyIgKGluIGFkZGl0aW9uIHRvIHdoYXQgaXMgc2hvd24gYnkKKwkibWVyZ2UiIHN0eWxlLCBzaG93cyB0aGUgb3JpZ2luYWwgY29udGVudHMpLgorCistcTo6CistLXF1aWV0OjoKKwlRdWlldCwgc3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMuCisKKy0tcHJvZ3Jlc3M6OgorLS1uby1wcm9ncmVzczo6CisJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKwlieSBkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzIGAtLXF1aWV0YAorCWlzIHNwZWNpZmllZC4gVGhpcyBmbGFnIGVuYWJsZXMgcHJvZ3Jlc3MgcmVwb3J0aW5nIGV2ZW4gaWYgbm90CisJYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgcmVnYXJkbGVzcyBvZiBgLS1xdWlldGAuCisKKy10OjoKKy0tdHJhY2s6OgorCVdoZW4gY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCBzZXQgdXAgInVwc3RyZWFtIiBjb25maWd1cmF0aW9uLgorCWAtY2AgaXMgaW1wbGllZC4gU2VlIGAtLXRyYWNrYCBpbiBsaW5rZ2l0OmdpdC1icmFuY2hbMV0gZm9yCisJZGV0YWlscy4KKysKK0lmIG5vIGAtY2Agb3B0aW9uIGlzIGdpdmVuLCB0aGUgbmFtZSBvZiB0aGUgbmV3IGJyYW5jaCB3aWxsIGJlIGRlcml2ZWQKK2Zyb20gdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2gsIGJ5IGxvb2tpbmcgYXQgdGhlIGxvY2FsIHBhcnQgb2YgdGhlCityZWZzcGVjIGNvbmZpZ3VyZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHJlbW90ZSwgYW5kIHRoZW4gc3RyaXBwaW5nCit0aGUgaW5pdGlhbCBwYXJ0IHVwIHRvIHRoZSAiKiIuICBUaGlzIHdvdWxkIHRlbGwgdXMgdG8gdXNlIGBoYWNrYCBhcwordGhlIGxvY2FsIGJyYW5jaCB3aGVuIGJyYW5jaGluZyBvZmYgb2YgYG9yaWdpbi9oYWNrYCAob3IKK2ByZW1vdGVzL29yaWdpbi9oYWNrYCwgb3IgZXZlbiBgcmVmcy9yZW1vdGVzL29yaWdpbi9oYWNrYCkuICBJZiB0aGUKK2dpdmVuIG5hbWUgaGFzIG5vIHNsYXNoLCBvciB0aGUgYWJvdmUgZ3Vlc3NpbmcgcmVzdWx0cyBpbiBhbiBlbXB0eQorbmFtZSwgdGhlIGd1ZXNzaW5nIGlzIGFib3J0ZWQuICBZb3UgY2FuIGV4cGxpY2l0bHkgZ2l2ZSBhIG5hbWUgd2l0aAorYC1jYCBpbiBzdWNoIGEgY2FzZS4KKworLS1uby10cmFjazo6CisJRG8gbm90IHNldCB1cCAidXBzdHJlYW0iIGNvbmZpZ3VyYXRpb24sIGV2ZW4gaWYgdGhlCisJYGJyYW5jaC5hdXRvU2V0dXBNZXJnZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyB0cnVlLgorCistLW9ycGhhbiA8bmV3LWJyYW5jaD46OgorCUNyZWF0ZSBhIG5ldyAnb3JwaGFuJyBicmFuY2gsIG5hbWVkIGA8bmV3LWJyYW5jaD5gLiBBbGwKKwl0cmFja2VkIGZpbGVzIGFyZSByZW1vdmVkLgorCistLWlnbm9yZS1vdGhlci13b3JrdHJlZXM6OgorCWBnaXQgc3dpdGNoYCByZWZ1c2VzIHdoZW4gdGhlIHdhbnRlZCByZWYgaXMgYWxyZWFkeQorCWNoZWNrZWQgb3V0IGJ5IGFub3RoZXIgd29ya3RyZWUuIFRoaXMgb3B0aW9uIG1ha2VzIGl0IGNoZWNrCisJdGhlIHJlZiBvdXQgYW55d2F5LiBJbiBvdGhlciB3b3JkcywgdGhlIHJlZiBjYW4gYmUgaGVsZCBieQorCW1vcmUgdGhhbiBvbmUgd29ya3RyZWUuCisKKy0tcmVjdXJzZS1zdWJtb2R1bGVzOjoKKy0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzOjoKKwlVc2luZyBgLS1yZWN1cnNlLXN1Ym1vZHVsZXNgIHdpbGwgdXBkYXRlIHRoZSBjb250ZW50IG9mIGFsbAorCWFjdGl2ZSBzdWJtb2R1bGVzIGFjY29yZGluZyB0byB0aGUgY29tbWl0IHJlY29yZGVkIGluIHRoZQorCXN1cGVycHJvamVjdC4gSWYgbm90aGluZyAob3IgYC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzYCkgaXMKKwl1c2VkLCBzdWJtb2R1bGVzIHdvcmtpbmcgdHJlZXMgd2lsbCBub3QgYmUgdXBkYXRlZC4gSnVzdAorCWxpa2UgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdLCB0aGlzIHdpbGwgZGV0YWNoIGBIRUFEYCBvZiB0aGUKKwlzdWJtb2R1bGVzLgorCitFWEFNUExFUworLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBjb21tYW5kIHN3aXRjaGVzIHRvIHRoZSAibWFzdGVyIiBicmFuY2g6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK0FmdGVyIHdvcmtpbmcgaW4gdGhlIHdyb25nIGJyYW5jaCwgc3dpdGNoaW5nIHRvIHRoZSBjb3JyZWN0IGJyYW5jaAord291bGQgYmUgZG9uZSB1c2luZzoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggbXl0b3BpYworLS0tLS0tLS0tLS0tCisKK0hvd2V2ZXIsIHlvdXIgIndyb25nIiBicmFuY2ggYW5kIGNvcnJlY3QgIm15dG9waWMiIGJyYW5jaCBtYXkgZGlmZmVyCitpbiBmaWxlcyB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIGxvY2FsbHksIGluIHdoaWNoIGNhc2UgdGhlIGFib3ZlCitzd2l0Y2ggd291bGQgZmFpbCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIG15dG9waWMKK2Vycm9yOiBZb3UgaGF2ZSBsb2NhbCBjaGFuZ2VzIHRvICdmcm90eic7IG5vdCBzd2l0Y2hpbmcgYnJhbmNoZXMuCistLS0tLS0tLS0tLS0KKworWW91IGNhbiBnaXZlIHRoZSBgLW1gIGZsYWcgdG8gdGhlIGNvbW1hbmQsIHdoaWNoIHdvdWxkIHRyeSBhIHRocmVlLXdheQorbWVyZ2U6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIC1tIG15dG9waWMKK0F1dG8tbWVyZ2luZyBmcm90egorLS0tLS0tLS0tLS0tCisKK0FmdGVyIHRoaXMgdGhyZWUtd2F5IG1lcmdlLCB0aGUgbG9jYWwgbW9kaWZpY2F0aW9ucyBhcmUgX25vdF8KK3JlZ2lzdGVyZWQgaW4geW91ciBpbmRleCBmaWxlLCBzbyBgZ2l0IGRpZmZgIHdvdWxkIHNob3cgeW91IHdoYXQKK2NoYW5nZXMgeW91IG1hZGUgc2luY2UgdGhlIHRpcCBvZiB0aGUgbmV3IGJyYW5jaC4KKworVG8gc3dpdGNoIGJhY2sgdG8gdGhlIHByZXZpb3VzIGJyYW5jaCBiZWZvcmUgd2Ugc3dpdGNoZWQgdG8gbXl0b3BpYworKGkuZS4gIm1hc3RlciIgYnJhbmNoKToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggLQorLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gZ3JvdyBhIG5ldyBicmFuY2ggZnJvbSBhbnkgY29tbWl0LiBGb3IgZXhhbXBsZSwgc3dpdGNoIHRvCisiSEVBRH4zIiBhbmQgY3JlYXRlIGJyYW5jaCAiZml4dXAiOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCAtYyBmaXh1cCBIRUFEfjMKK1N3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnZml4dXAnCistLS0tLS0tLS0tLS0KKworSWYgeW91IHdhbnQgdG8gc3RhcnQgYSBuZXcgYnJhbmNoIGZyb20gYSByZW1vdGUgYnJhbmNoIG9mIHRoZSBzYW1lCituYW1lOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCBuZXctdG9waWMKK0JyYW5jaCAnbmV3LXRvcGljJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnbmV3LXRvcGljJyBmcm9tICdvcmlnaW4nCitTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJ25ldy10b3BpYycKKy0tLS0tLS0tLS0tLQorCitUbyBjaGVjayBvdXQgY29tbWl0IGBIRUFEfjNgIGZvciB0ZW1wb3JhcnkgaW5zcGVjdGlvbiBvciBleHBlcmltZW50Cit3aXRob3V0IGNyZWF0aW5nIGEgbmV3IGJyYW5jaDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggLS1kZXRhY2ggSEVBRH4zCitIRUFEIGlzIG5vdyBhdCA5ZmM5NTU1MzEyIE1lcmdlIGJyYW5jaCAnY2Mvc2hhcmVkLWluZGV4LXBlcm1iaXRzJworLS0tLS0tLS0tLS0tCisKK0lmIGl0IHR1cm5zIG91dCB3aGF0ZXZlciB5b3UgaGF2ZSBkb25lIGlzIHdvcnRoIGtlZXBpbmcsIHlvdSBjYW4KK2Fsd2F5cyBjcmVhdGUgYSBuZXcgbmFtZSBmb3IgaXQgKHdpdGhvdXQgc3dpdGNoaW5nIGF3YXkpOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCAtYyBnb29kLXN1cnByaXNlcworLS0tLS0tLS0tLS0tCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0sCitsaW5rZ2l0OmdpdC1icmFuY2hbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zeW1ib2xpYy1yZWYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3ltYm9saWMtcmVmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjY4YWQyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3ltYm9saWMtcmVmLnR4dApAQCAtMCwwICsxLDY5IEBACitnaXQtc3ltYm9saWMtcmVmKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zeW1ib2xpYy1yZWYgLSBSZWFkLCBtb2RpZnkgYW5kIGRlbGV0ZSBzeW1ib2xpYyByZWZzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzeW1ib2xpYy1yZWYnIFstbSA8cmVhc29uPl0gPG5hbWU+IDxyZWY+CisnZ2l0IHN5bWJvbGljLXJlZicgWy1xXSBbLS1zaG9ydF0gPG5hbWU+CisnZ2l0IHN5bWJvbGljLXJlZicgLS1kZWxldGUgWy1xXSA8bmFtZT4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitHaXZlbiBvbmUgYXJndW1lbnQsIHJlYWRzIHdoaWNoIGJyYW5jaCBoZWFkIHRoZSBnaXZlbiBzeW1ib2xpYworcmVmIHJlZmVycyB0byBhbmQgb3V0cHV0cyBpdHMgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIGAuZ2l0L2AKK2RpcmVjdG9yeS4gIFR5cGljYWxseSB5b3Ugd291bGQgZ2l2ZSBgSEVBRGAgYXMgdGhlIDxuYW1lPgorYXJndW1lbnQgdG8gc2VlIHdoaWNoIGJyYW5jaCB5b3VyIHdvcmtpbmcgdHJlZSBpcyBvbi4KKworR2l2ZW4gdHdvIGFyZ3VtZW50cywgY3JlYXRlcyBvciB1cGRhdGVzIGEgc3ltYm9saWMgcmVmIDxuYW1lPiB0bworcG9pbnQgYXQgdGhlIGdpdmVuIGJyYW5jaCA8cmVmPi4KKworR2l2ZW4gYC0tZGVsZXRlYCBhbmQgYW4gYWRkaXRpb25hbCBhcmd1bWVudCwgZGVsZXRlcyB0aGUgZ2l2ZW4KK3N5bWJvbGljIHJlZi4KKworQSBzeW1ib2xpYyByZWYgaXMgYSByZWd1bGFyIGZpbGUgdGhhdCBzdG9yZXMgYSBzdHJpbmcgdGhhdAorYmVnaW5zIHdpdGggYHJlZjogcmVmcy9gLiAgRm9yIGV4YW1wbGUsIHlvdXIgYC5naXQvSEVBRGAgaXMKK2EgcmVndWxhciBmaWxlIHdob3NlIGNvbnRlbnRzIGlzIGByZWY6IHJlZnMvaGVhZHMvbWFzdGVyYC4KKworT1BUSU9OUworLS0tLS0tLQorCistZDo6CistLWRlbGV0ZTo6CisJRGVsZXRlIHRoZSBzeW1ib2xpYyByZWYgPG5hbWU+LgorCistcTo6CistLXF1aWV0OjoKKwlEbyBub3QgaXNzdWUgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgPG5hbWU+IGlzIG5vdCBhCisJc3ltYm9saWMgcmVmIGJ1dCBhIGRldGFjaGVkIEhFQUQ7IGluc3RlYWQgZXhpdCB3aXRoCisJbm9uLXplcm8gc3RhdHVzIHNpbGVudGx5LgorCistLXNob3J0OjoKKwlXaGVuIHNob3dpbmcgdGhlIHZhbHVlIG9mIDxuYW1lPiBhcyBhIHN5bWJvbGljIHJlZiwgdHJ5IHRvIHNob3J0ZW4gdGhlCisJdmFsdWUsIGUuZy4gZnJvbSBgcmVmcy9oZWFkcy9tYXN0ZXJgIHRvIGBtYXN0ZXJgLgorCistbTo6CisJVXBkYXRlIHRoZSByZWZsb2cgZm9yIDxuYW1lPiB3aXRoIDxyZWFzb24+LiAgVGhpcyBpcyB2YWxpZCBvbmx5CisJd2hlbiBjcmVhdGluZyBvciB1cGRhdGluZyBhIHN5bWJvbGljIHJlZi4KKworTk9URVMKKy0tLS0tCitJbiB0aGUgcGFzdCwgYC5naXQvSEVBRGAgd2FzIGEgc3ltYm9saWMgbGluayBwb2ludGluZyBhdAorYHJlZnMvaGVhZHMvbWFzdGVyYC4gIFdoZW4gd2Ugd2FudGVkIHRvIHN3aXRjaCB0byBhbm90aGVyIGJyYW5jaCwKK3dlIGRpZCBgbG4gLXNmIHJlZnMvaGVhZHMvbmV3YnJhbmNoIC5naXQvSEVBRGAsIGFuZCB3aGVuIHdlIHdhbnRlZAordG8gZmluZCBvdXQgd2hpY2ggYnJhbmNoIHdlIGFyZSBvbiwgd2UgZGlkIGByZWFkbGluayAuZ2l0L0hFQURgLgorQnV0IHN5bWJvbGljIGxpbmtzIGFyZSBub3QgZW50aXJlbHkgcG9ydGFibGUsIHNvIHRoZXkgYXJlIG5vdworZGVwcmVjYXRlZCBhbmQgc3ltYm9saWMgcmVmcyAoYXMgZGVzY3JpYmVkIGFib3ZlKSBhcmUgdXNlZCBieQorZGVmYXVsdC4KKworJ2dpdCBzeW1ib2xpYy1yZWYnIHdpbGwgZXhpdCB3aXRoIHN0YXR1cyAwIGlmIHRoZSBjb250ZW50cyBvZiB0aGUKK3N5bWJvbGljIHJlZiB3ZXJlIHByaW50ZWQgY29ycmVjdGx5LCB3aXRoIHN0YXR1cyAxIGlmIHRoZSByZXF1ZXN0ZWQKK25hbWUgaXMgbm90IGEgc3ltYm9saWMgcmVmLCBvciAxMjggaWYgYW5vdGhlciBlcnJvciBvY2N1cnMuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkOTc5MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKQEAgLTAsMCArMSwzODcgQEAKK2dpdC10YWcoMSkKKz09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXRhZyAtIENyZWF0ZSwgbGlzdCwgZGVsZXRlIG9yIHZlcmlmeSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHRhZycgWy1hIHwgLXMgfCAtdSA8a2V5aWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl0gWy1lXQorCTx0YWduYW1lPiBbPGNvbW1pdD4gfCA8b2JqZWN0Pl0KKydnaXQgdGFnJyAtZCA8dGFnbmFtZT4uLi4KKydnaXQgdGFnJyBbLW5bPG51bT5dXSAtbCBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPGNvbW1pdD5dCisJWy0tcG9pbnRzLWF0IDxvYmplY3Q+XSBbLS1jb2x1bW5bPTxvcHRpb25zPl0gfCAtLW5vLWNvbHVtbl0KKwlbLS1jcmVhdGUtcmVmbG9nXSBbLS1zb3J0PTxrZXk+XSBbLS1mb3JtYXQ9PGZvcm1hdD5dCisJWy0tW25vLV1tZXJnZWQgWzxjb21taXQ+XV0gWzxwYXR0ZXJuPi4uLl0KKydnaXQgdGFnJyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWduYW1lPi4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworQWRkIGEgdGFnIHJlZmVyZW5jZSBpbiBgcmVmcy90YWdzL2AsIHVubGVzcyBgLWQvLWwvLXZgIGlzIGdpdmVuCit0byBkZWxldGUsIGxpc3Qgb3IgdmVyaWZ5IHRhZ3MuCisKK1VubGVzcyBgLWZgIGlzIGdpdmVuLCB0aGUgbmFtZWQgdGFnIG11c3Qgbm90IHlldCBleGlzdC4KKworSWYgb25lIG9mIGAtYWAsIGAtc2AsIG9yIGAtdSA8a2V5aWQ+YCBpcyBwYXNzZWQsIHRoZSBjb21tYW5kCitjcmVhdGVzIGEgJ3RhZycgb2JqZWN0LCBhbmQgcmVxdWlyZXMgYSB0YWcgbWVzc2FnZS4gIFVubGVzcworYC1tIDxtc2c+YCBvciBgLUYgPGZpbGU+YCBpcyBnaXZlbiwgYW4gZWRpdG9yIGlzIHN0YXJ0ZWQgZm9yIHRoZSB1c2VyIHRvIHR5cGUKK2luIHRoZSB0YWcgbWVzc2FnZS4KKworSWYgYC1tIDxtc2c+YCBvciBgLUYgPGZpbGU+YCBpcyBnaXZlbiBhbmQgYC1hYCwgYC1zYCwgYW5kIGAtdSA8a2V5aWQ+YAorYXJlIGFic2VudCwgYC1hYCBpcyBpbXBsaWVkLgorCitPdGhlcndpc2UsIGEgdGFnIHJlZmVyZW5jZSB0aGF0IHBvaW50cyBkaXJlY3RseSBhdCB0aGUgZ2l2ZW4gb2JqZWN0CisoaS5lLiwgYSBsaWdodHdlaWdodCB0YWcpIGlzIGNyZWF0ZWQuCisKK0EgR251UEcgc2lnbmVkIHRhZyBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkIHdoZW4gYC1zYCBvciBgLXUKKzxrZXlpZD5gIGlzIHVzZWQuICBXaGVuIGAtdSA8a2V5aWQ+YCBpcyBub3QgdXNlZCwgdGhlCitjb21taXR0ZXIgaWRlbnRpdHkgZm9yIHRoZSBjdXJyZW50IHVzZXIgaXMgdXNlZCB0byBmaW5kIHRoZQorR251UEcga2V5IGZvciBzaWduaW5nLiAJVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGdwZy5wcm9ncmFtYAoraXMgdXNlZCB0byBzcGVjaWZ5IGN1c3RvbSBHbnVQRyBiaW5hcnkuCisKK1RhZyBvYmplY3RzIChjcmVhdGVkIHdpdGggYC1hYCwgYC1zYCwgb3IgYC11YCkgYXJlIGNhbGxlZCAiYW5ub3RhdGVkIgordGFnczsgdGhleSBjb250YWluIGEgY3JlYXRpb24gZGF0ZSwgdGhlIHRhZ2dlciBuYW1lIGFuZCBlLW1haWwsIGEKK3RhZ2dpbmcgbWVzc2FnZSwgYW5kIGFuIG9wdGlvbmFsIEdudVBHIHNpZ25hdHVyZS4gV2hlcmVhcyBhCisibGlnaHR3ZWlnaHQiIHRhZyBpcyBzaW1wbHkgYSBuYW1lIGZvciBhbiBvYmplY3QgKHVzdWFsbHkgYSBjb21taXQKK29iamVjdCkuCisKK0Fubm90YXRlZCB0YWdzIGFyZSBtZWFudCBmb3IgcmVsZWFzZSB3aGlsZSBsaWdodHdlaWdodCB0YWdzIGFyZSBtZWFudAorZm9yIHByaXZhdGUgb3IgdGVtcG9yYXJ5IG9iamVjdCBsYWJlbHMuIEZvciB0aGlzIHJlYXNvbiwgc29tZSBnaXQKK2NvbW1hbmRzIGZvciBuYW1pbmcgb2JqZWN0cyAobGlrZSBgZ2l0IGRlc2NyaWJlYCkgd2lsbCBpZ25vcmUKK2xpZ2h0d2VpZ2h0IHRhZ3MgYnkgZGVmYXVsdC4KKworCitPUFRJT05TCistLS0tLS0tCistYTo6CistLWFubm90YXRlOjoKKwlNYWtlIGFuIHVuc2lnbmVkLCBhbm5vdGF0ZWQgdGFnIG9iamVjdAorCistczo6CistLXNpZ246OgorCU1ha2UgYSBHUEctc2lnbmVkIHRhZywgdXNpbmcgdGhlIGRlZmF1bHQgZS1tYWlsIGFkZHJlc3MncyBrZXkuCisJVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGFnIEdQRy1zaWduaW5nIGlzIGNvbnRyb2xsZWQgYnkgYHRhZy5ncGdTaWduYAorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaWYgaXQgZXhpc3RzLCBvciBkaXNhYmxlZCBvdGhlcndpc2UuCisJU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS1uby1zaWduOjoKKwlPdmVycmlkZSBgdGFnLmdwZ1NpZ25gIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdGhhdCBpcworCXNldCB0byBmb3JjZSBlYWNoIGFuZCBldmVyeSB0YWcgdG8gYmUgc2lnbmVkLgorCistdSA8a2V5aWQ+OjoKKy0tbG9jYWwtdXNlcj08a2V5aWQ+OjoKKwlNYWtlIGEgR1BHLXNpZ25lZCB0YWcsIHVzaW5nIHRoZSBnaXZlbiBrZXkuCisKKy1mOjoKKy0tZm9yY2U6OgorCVJlcGxhY2UgYW4gZXhpc3RpbmcgdGFnIHdpdGggdGhlIGdpdmVuIG5hbWUgKGluc3RlYWQgb2YgZmFpbGluZykKKworLWQ6OgorLS1kZWxldGU6OgorCURlbGV0ZSBleGlzdGluZyB0YWdzIHdpdGggdGhlIGdpdmVuIG5hbWVzLgorCistdjo6CistLXZlcmlmeTo6CisJVmVyaWZ5IHRoZSBHUEcgc2lnbmF0dXJlIG9mIHRoZSBnaXZlbiB0YWcgbmFtZXMuCisKKy1uPG51bT46OgorCTxudW0+IHNwZWNpZmllcyBob3cgbWFueSBsaW5lcyBmcm9tIHRoZSBhbm5vdGF0aW9uLCBpZiBhbnksCisJYXJlIHByaW50ZWQgd2hlbiB1c2luZyAtbC4gSW1wbGllcyBgLS1saXN0YC4KKysKK1RoZSBkZWZhdWx0IGlzIG5vdCB0byBwcmludCBhbnkgYW5ub3RhdGlvbiBsaW5lcy4KK0lmIG5vIG51bWJlciBpcyBnaXZlbiB0byBgLW5gLCBvbmx5IHRoZSBmaXJzdCBsaW5lIGlzIHByaW50ZWQuCitJZiB0aGUgdGFnIGlzIG5vdCBhbm5vdGF0ZWQsIHRoZSBjb21taXQgbWVzc2FnZSBpcyBkaXNwbGF5ZWQgaW5zdGVhZC4KKworLWw6OgorLS1saXN0OjoKKwlMaXN0IHRhZ3MuIFdpdGggb3B0aW9uYWwgYDxwYXR0ZXJuPi4uLmAsIGUuZy4gYGdpdCB0YWcgLS1saXN0CisJJ3YtKidgLCBsaXN0IG9ubHkgdGhlIHRhZ3MgdGhhdCBtYXRjaCB0aGUgcGF0dGVybihzKS4KKysKK1J1bm5pbmcgImdpdCB0YWciIHdpdGhvdXQgYXJndW1lbnRzIGFsc28gbGlzdHMgYWxsIHRhZ3MuIFRoZSBwYXR0ZXJuCitpcyBhIHNoZWxsIHdpbGRjYXJkIChpLmUuLCBtYXRjaGVkIHVzaW5nIGZubWF0Y2goMykpLiBNdWx0aXBsZQorcGF0dGVybnMgbWF5IGJlIGdpdmVuOyBpZiBhbnkgb2YgdGhlbSBtYXRjaGVzLCB0aGUgdGFnIGlzIHNob3duLgorKworVGhpcyBvcHRpb24gaXMgaW1wbGljaXRseSBzdXBwbGllZCBpZiBhbnkgb3RoZXIgbGlzdC1saWtlIG9wdGlvbiBzdWNoCithcyBgLS1jb250YWluc2AgaXMgcHJvdmlkZWQuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZWFjaCBvZiB0aG9zZQorb3B0aW9ucyBmb3IgZGV0YWlscy4KKworLS1zb3J0PTxrZXk+OjoKKwlTb3J0IGJhc2VkIG9uIHRoZSBrZXkgZ2l2ZW4uICBQcmVmaXggYC1gIHRvIHNvcnQgaW4KKwlkZXNjZW5kaW5nIG9yZGVyIG9mIHRoZSB2YWx1ZS4gWW91IG1heSB1c2UgdGhlIC0tc29ydD08a2V5PiBvcHRpb24KKwltdWx0aXBsZSB0aW1lcywgaW4gd2hpY2ggY2FzZSB0aGUgbGFzdCBrZXkgYmVjb21lcyB0aGUgcHJpbWFyeQorCWtleS4gQWxzbyBzdXBwb3J0cyAidmVyc2lvbjpyZWZuYW1lIiBvciAidjpyZWZuYW1lIiAodGFnCisJbmFtZXMgYXJlIHRyZWF0ZWQgYXMgdmVyc2lvbnMpLiBUaGUgInZlcnNpb246cmVmbmFtZSIgc29ydAorCW9yZGVyIGNhbiBhbHNvIGJlIGFmZmVjdGVkIGJ5IHRoZSAidmVyc2lvbnNvcnQuc3VmZml4IgorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisJVGhlIGtleXMgc3VwcG9ydGVkIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBpbiBgZ2l0IGZvci1lYWNoLXJlZmAuCisJU29ydCBvcmRlciBkZWZhdWx0cyB0byB0aGUgdmFsdWUgY29uZmlndXJlZCBmb3IgdGhlIGB0YWcuc29ydGAKKwl2YXJpYWJsZSBpZiBpdCBleGlzdHMsIG9yIGxleGljb2dyYXBoaWMgb3JkZXIgb3RoZXJ3aXNlLiBTZWUKKwlsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKKy0tY29sb3JbPTx3aGVuPl06OgorCVJlc3BlY3QgYW55IGNvbG9ycyBzcGVjaWZpZWQgaW4gdGhlIGAtLWZvcm1hdGAgb3B0aW9uLiBUaGUKKwlgPHdoZW4+YCBmaWVsZCBtdXN0IGJlIG9uZSBvZiBgYWx3YXlzYCwgYG5ldmVyYCwgb3IgYGF1dG9gIChpZgorCWA8d2hlbj5gIGlzIGFic2VudCwgYmVoYXZlIGFzIGlmIGBhbHdheXNgIHdhcyBnaXZlbikuCisKKy1pOjoKKy0taWdub3JlLWNhc2U6OgorCVNvcnRpbmcgYW5kIGZpbHRlcmluZyB0YWdzIGFyZSBjYXNlIGluc2Vuc2l0aXZlLgorCistLWNvbHVtbls9PG9wdGlvbnM+XTo6CistLW5vLWNvbHVtbjo6CisJRGlzcGxheSB0YWcgbGlzdGluZyBpbiBjb2x1bW5zLiBTZWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorCWNvbHVtbi50YWcgZm9yIG9wdGlvbiBzeW50YXguYC0tY29sdW1uYCBhbmQgYC0tbm8tY29sdW1uYAorCXdpdGhvdXQgb3B0aW9ucyBhcmUgZXF1aXZhbGVudCB0byAnYWx3YXlzJyBhbmQgJ25ldmVyJyByZXNwZWN0aXZlbHkuCisrCitUaGlzIG9wdGlvbiBpcyBvbmx5IGFwcGxpY2FibGUgd2hlbiBsaXN0aW5nIHRhZ3Mgd2l0aG91dCBhbm5vdGF0aW9uIGxpbmVzLgorCistLWNvbnRhaW5zIFs8Y29tbWl0Pl06OgorCU9ubHkgbGlzdCB0YWdzIHdoaWNoIGNvbnRhaW4gdGhlIHNwZWNpZmllZCBjb21taXQgKEhFQUQgaWYgbm90CisJc3BlY2lmaWVkKS4gSW1wbGllcyBgLS1saXN0YC4KKworLS1uby1jb250YWlucyBbPGNvbW1pdD5dOjoKKwlPbmx5IGxpc3QgdGFncyB3aGljaCBkb24ndCBjb250YWluIHRoZSBzcGVjaWZpZWQgY29tbWl0IChIRUFEIGlmCisJbm90IHNwZWNpZmllZCkuIEltcGxpZXMgYC0tbGlzdGAuCisKKy0tbWVyZ2VkIFs8Y29tbWl0Pl06OgorCU9ubHkgbGlzdCB0YWdzIHdob3NlIGNvbW1pdHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZSBzcGVjaWZpZWQKKwljb21taXQgKGBIRUFEYCBpZiBub3Qgc3BlY2lmaWVkKSwgaW5jb21wYXRpYmxlIHdpdGggYC0tbm8tbWVyZ2VkYC4KKworLS1uby1tZXJnZWQgWzxjb21taXQ+XTo6CisJT25seSBsaXN0IHRhZ3Mgd2hvc2UgY29tbWl0cyBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIHRoZSBzcGVjaWZpZWQKKwljb21taXQgKGBIRUFEYCBpZiBub3Qgc3BlY2lmaWVkKSwgaW5jb21wYXRpYmxlIHdpdGggYC0tbWVyZ2VkYC4KKworLS1wb2ludHMtYXQgPG9iamVjdD46OgorCU9ubHkgbGlzdCB0YWdzIG9mIHRoZSBnaXZlbiBvYmplY3QgKEhFQUQgaWYgbm90CisJc3BlY2lmaWVkKS4gSW1wbGllcyBgLS1saXN0YC4KKworLW0gPG1zZz46OgorLS1tZXNzYWdlPTxtc2c+OjoKKwlVc2UgdGhlIGdpdmVuIHRhZyBtZXNzYWdlIChpbnN0ZWFkIG9mIHByb21wdGluZykuCisJSWYgbXVsdGlwbGUgYC1tYCBvcHRpb25zIGFyZSBnaXZlbiwgdGhlaXIgdmFsdWVzIGFyZQorCWNvbmNhdGVuYXRlZCBhcyBzZXBhcmF0ZSBwYXJhZ3JhcGhzLgorCUltcGxpZXMgYC1hYCBpZiBub25lIG9mIGAtYWAsIGAtc2AsIG9yIGAtdSA8a2V5aWQ+YAorCWlzIGdpdmVuLgorCistRiA8ZmlsZT46OgorLS1maWxlPTxmaWxlPjo6CisJVGFrZSB0aGUgdGFnIG1lc3NhZ2UgZnJvbSB0aGUgZ2l2ZW4gZmlsZS4gIFVzZSAnLScgdG8KKwlyZWFkIHRoZSBtZXNzYWdlIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCUltcGxpZXMgYC1hYCBpZiBub25lIG9mIGAtYWAsIGAtc2AsIG9yIGAtdSA8a2V5aWQ+YAorCWlzIGdpdmVuLgorCistZTo6CistLWVkaXQ6OgorCVRoZSBtZXNzYWdlIHRha2VuIGZyb20gZmlsZSB3aXRoIGAtRmAgYW5kIGNvbW1hbmQgbGluZSB3aXRoCisJYC1tYCBhcmUgdXN1YWxseSB1c2VkIGFzIHRoZSB0YWcgbWVzc2FnZSB1bm1vZGlmaWVkLgorCVRoaXMgb3B0aW9uIGxldHMgeW91IGZ1cnRoZXIgZWRpdCB0aGUgbWVzc2FnZSB0YWtlbiBmcm9tIHRoZXNlIHNvdXJjZXMuCisKKy0tY2xlYW51cD08bW9kZT46OgorCVRoaXMgb3B0aW9uIHNldHMgaG93IHRoZSB0YWcgbWVzc2FnZSBpcyBjbGVhbmVkIHVwLgorCVRoZSAgJzxtb2RlPicgY2FuIGJlIG9uZSBvZiAndmVyYmF0aW0nLCAnd2hpdGVzcGFjZScgYW5kICdzdHJpcCcuICBUaGUKKwknc3RyaXAnIG1vZGUgaXMgZGVmYXVsdC4gVGhlICd2ZXJiYXRpbScgbW9kZSBkb2VzIG5vdCBjaGFuZ2UgbWVzc2FnZSBhdAorCWFsbCwgJ3doaXRlc3BhY2UnIHJlbW92ZXMganVzdCBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UgbGluZXMgYW5kCisJJ3N0cmlwJyByZW1vdmVzIGJvdGggd2hpdGVzcGFjZSBhbmQgY29tbWVudGFyeS4KKworLS1jcmVhdGUtcmVmbG9nOjoKKwlDcmVhdGUgYSByZWZsb2cgZm9yIHRoZSB0YWcuIFRvIGdsb2JhbGx5IGVuYWJsZSByZWZsb2dzIGZvciB0YWdzLCBzZWUKKwlgY29yZS5sb2dBbGxSZWZVcGRhdGVzYCBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisJVGhlIG5lZ2F0ZWQgZm9ybSBgLS1uby1jcmVhdGUtcmVmbG9nYCBvbmx5IG92ZXJyaWRlcyBhbiBlYXJsaWVyCisJYC0tY3JlYXRlLXJlZmxvZ2AsIGJ1dCBjdXJyZW50bHkgZG9lcyBub3QgbmVnYXRlIHRoZSBzZXR0aW5nIG9mCisJYGNvcmUubG9nQWxsUmVmVXBkYXRlc2AuCisKKy0tZm9ybWF0PTxmb3JtYXQ+OjoKKwlBIHN0cmluZyB0aGF0IGludGVycG9sYXRlcyBgJShmaWVsZG5hbWUpYCBmcm9tIGEgdGFnIHJlZiBiZWluZyBzaG93bgorCWFuZCB0aGUgb2JqZWN0IGl0IHBvaW50cyBhdC4gIFRoZSBmb3JtYXQgaXMgdGhlIHNhbWUgYXMKKwl0aGF0IG9mIGxpbmtnaXQ6Z2l0LWZvci1lYWNoLXJlZlsxXS4gIFdoZW4gdW5zcGVjaWZpZWQsCisJZGVmYXVsdHMgdG8gYCUocmVmbmFtZTpzdHJpcD0yKWAuCisKKzx0YWduYW1lPjo6CisJVGhlIG5hbWUgb2YgdGhlIHRhZyB0byBjcmVhdGUsIGRlbGV0ZSwgb3IgZGVzY3JpYmUuCisJVGhlIG5ldyB0YWcgbmFtZSBtdXN0IHBhc3MgYWxsIGNoZWNrcyBkZWZpbmVkIGJ5CisJbGlua2dpdDpnaXQtY2hlY2stcmVmLWZvcm1hdFsxXS4gIFNvbWUgb2YgdGhlc2UgY2hlY2tzCisJbWF5IHJlc3RyaWN0IHRoZSBjaGFyYWN0ZXJzIGFsbG93ZWQgaW4gYSB0YWcgbmFtZS4KKworPGNvbW1pdD46OgorPG9iamVjdD46OgorCVRoZSBvYmplY3QgdGhhdCB0aGUgbmV3IHRhZyB3aWxsIHJlZmVyIHRvLCB1c3VhbGx5IGEgY29tbWl0LgorCURlZmF1bHRzIHRvIEhFQUQuCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KK0J5IGRlZmF1bHQsICdnaXQgdGFnJyBpbiBzaWduLXdpdGgtZGVmYXVsdCBtb2RlICgtcykgd2lsbCB1c2UgeW91cgorY29tbWl0dGVyIGlkZW50aXR5IChvZiB0aGUgZm9ybSBgWW91ciBOYW1lIDx5b3VyQGVtYWlsLmFkZHJlc3M+YCkgdG8KK2ZpbmQgYSBrZXkuICBJZiB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgZGVmYXVsdCBrZXksIHlvdSBjYW4gc3BlY2lmeQoraXQgaW4gdGhlIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBhcyBmb2xsb3dzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbdXNlcl0KKyAgICBzaWduaW5nS2V5ID0gPGdwZy1rZXlpZD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYHBhZ2VyLnRhZ2AgaXMgb25seSByZXNwZWN0ZWQgd2hlbiBsaXN0aW5nIHRhZ3MsIGkuZS4sIHdoZW4gYC1sYCBpcwordXNlZCBvciBpbXBsaWVkLiBUaGUgZGVmYXVsdCBpcyB0byB1c2UgYSBwYWdlci4KK1NlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworT24gUmUtdGFnZ2luZworfn5+fn5+fn5+fn5+fgorCitXaGF0IHNob3VsZCB5b3UgZG8gd2hlbiB5b3UgdGFnIGEgd3JvbmcgY29tbWl0IGFuZCB5b3Ugd291bGQKK3dhbnQgdG8gcmUtdGFnPworCitJZiB5b3UgbmV2ZXIgcHVzaGVkIGFueXRoaW5nIG91dCwganVzdCByZS10YWcgaXQuIFVzZSAiLWYiIHRvCityZXBsYWNlIHRoZSBvbGQgb25lLiBBbmQgeW91J3JlIGRvbmUuCisKK0J1dCBpZiB5b3UgaGF2ZSBwdXNoZWQgdGhpbmdzIG91dCAob3Igb3RoZXJzIGNvdWxkIGp1c3QgcmVhZAoreW91ciByZXBvc2l0b3J5IGRpcmVjdGx5KSwgdGhlbiBvdGhlcnMgd2lsbCBoYXZlIGFscmVhZHkgc2VlbgordGhlIG9sZCB0YWcuIEluIHRoYXQgY2FzZSB5b3UgY2FuIGRvIG9uZSBvZiB0d28gdGhpbmdzOgorCisuIFRoZSBzYW5lIHRoaW5nLgorICBKdXN0IGFkbWl0IHlvdSBzY3Jld2VkIHVwLCBhbmQgdXNlIGEgZGlmZmVyZW50IG5hbWUuIE90aGVycyBoYXZlCisgIGFscmVhZHkgc2VlbiBvbmUgdGFnLW5hbWUsIGFuZCBpZiB5b3Uga2VlcCB0aGUgc2FtZSBuYW1lLCB5b3UKKyAgbWF5IGJlIGluIHRoZSBzaXR1YXRpb24gdGhhdCB0d28gcGVvcGxlIGJvdGggaGF2ZSAidmVyc2lvbiBYIiwKKyAgYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSAnZGlmZmVyZW50JyAiWCIncy4gIFNvIGp1c3QgY2FsbCBpdCAiWC4xIgorICBhbmQgYmUgZG9uZSB3aXRoIGl0LgorCisuIFRoZSBpbnNhbmUgdGhpbmcuCisgIFlvdSByZWFsbHkgd2FudCB0byBjYWxsIHRoZSBuZXcgdmVyc2lvbiAiWCIgdG9vLCAnZXZlbiB0aG91Z2gnCisgIG90aGVycyBoYXZlIGFscmVhZHkgc2VlbiB0aGUgb2xkIG9uZS4gU28ganVzdCB1c2UgJ2dpdCB0YWcgLWYnCisgIGFnYWluLCBhcyBpZiB5b3UgaGFkbid0IGFscmVhZHkgcHVibGlzaGVkIHRoZSBvbGQgb25lLgorCitIb3dldmVyLCBHaXQgZG9lcyAqbm90KiAoYW5kIGl0IHNob3VsZCBub3QpIGNoYW5nZSB0YWdzIGJlaGluZAordXNlcnMgYmFjay4gU28gaWYgc29tZWJvZHkgYWxyZWFkeSBnb3QgdGhlIG9sZCB0YWcsIGRvaW5nIGEKKydnaXQgcHVsbCcgb24geW91ciB0cmVlIHNob3VsZG4ndCBqdXN0IG1ha2UgdGhlbSBvdmVyd3JpdGUgdGhlIG9sZAorb25lLgorCitJZiBzb21lYm9keSBnb3QgYSByZWxlYXNlIHRhZyBmcm9tIHlvdSwgeW91IGNhbm5vdCBqdXN0IGNoYW5nZQordGhlIHRhZyBmb3IgdGhlbSBieSB1cGRhdGluZyB5b3VyIG93biBvbmUuIFRoaXMgaXMgYSBiaWcKK3NlY3VyaXR5IGlzc3VlLCBpbiB0aGF0IHBlb3BsZSBNVVNUIGJlIGFibGUgdG8gdHJ1c3QgdGhlaXIKK3RhZy1uYW1lcy4gIElmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGUgaW5zYW5lIHRoaW5nLCB5b3UgbmVlZAordG8ganVzdCBmZXNzIHVwIHRvIGl0LCBhbmQgdGVsbCBwZW9wbGUgdGhhdCB5b3UgbWVzc2VkIHVwLiBZb3UKK2NhbiBkbyB0aGF0IGJ5IG1ha2luZyBhIHZlcnkgcHVibGljIGFubm91bmNlbWVudCBzYXlpbmc6CisKKy0tLS0tLS0tLS0tLQorT2ssIEkgbWVzc2VkIHVwLCBhbmQgSSBwdXNoZWQgb3V0IGFuIGVhcmxpZXIgdmVyc2lvbiB0YWdnZWQgYXMgWC4gSQordGhlbiBmaXhlZCBzb21ldGhpbmcsIGFuZCByZXRhZ2dlZCB0aGUgKmZpeGVkKiB0cmVlIGFzIFggYWdhaW4uCisKK0lmIHlvdSBnb3QgdGhlIHdyb25nIHRhZywgYW5kIHdhbnQgdGhlIG5ldyBvbmUsIHBsZWFzZSBkZWxldGUKK3RoZSBvbGQgb25lIGFuZCBmZXRjaCB0aGUgbmV3IG9uZSBieSBkb2luZzoKKworCWdpdCB0YWcgLWQgWAorCWdpdCBmZXRjaCBvcmlnaW4gdGFnIFgKKwordG8gZ2V0IG15IHVwZGF0ZWQgdGFnLgorCitZb3UgY2FuIHRlc3Qgd2hpY2ggdGFnIHlvdSBoYXZlIGJ5IGRvaW5nCisKKwlnaXQgcmV2LXBhcnNlIFgKKword2hpY2ggc2hvdWxkIHJldHVybiAwMTIzNDU2Nzg5YWJjZGVmLi4gaWYgeW91IGhhdmUgdGhlIG5ldyB2ZXJzaW9uLgorCitTb3JyeSBmb3IgdGhlIGluY29udmVuaWVuY2UuCistLS0tLS0tLS0tLS0KKworRG9lcyB0aGlzIHNlZW0gYSBiaXQgY29tcGxpY2F0ZWQ/ICBJdCAqc2hvdWxkKiBiZS4gVGhlcmUgaXMgbm8KK3dheSB0aGF0IGl0IHdvdWxkIGJlIGNvcnJlY3QgdG8ganVzdCAiZml4IiBpdCBhdXRvbWF0aWNhbGx5LgorUGVvcGxlIG5lZWQgdG8ga25vdyB0aGF0IHRoZWlyIHRhZ3MgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQuCisKKworT24gQXV0b21hdGljIGZvbGxvd2luZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitJZiB5b3UgYXJlIGZvbGxvd2luZyBzb21lYm9keSBlbHNlJ3MgdHJlZSwgeW91IGFyZSBtb3N0IGxpa2VseQordXNpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIChlZy4gYHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyYCkuCitZb3UgdXN1YWxseSB3YW50IHRoZSB0YWdzIGZyb20gdGhlIG90aGVyIGVuZC4KKworT24gdGhlIG90aGVyIGhhbmQsIGlmIHlvdSBhcmUgZmV0Y2hpbmcgYmVjYXVzZSB5b3Ugd291bGQgd2FudCBhCitvbmUtc2hvdCBtZXJnZSBmcm9tIHNvbWVib2R5IGVsc2UsIHlvdSB0eXBpY2FsbHkgZG8gbm90IHdhbnQgdG8KK2dldCB0YWdzIGZyb20gdGhlcmUuICBUaGlzIGhhcHBlbnMgbW9yZSBvZnRlbiBmb3IgcGVvcGxlIG5lYXIKK3RoZSB0b3BsZXZlbCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlbS4gIE1lcmUgbW9ydGFscyB3aGVuIHB1bGxpbmcKK2Zyb20gZWFjaCBvdGhlciBkbyBub3QgbmVjZXNzYXJpbHkgd2FudCB0byBhdXRvbWF0aWNhbGx5IGdldAorcHJpdmF0ZSBhbmNob3IgcG9pbnQgdGFncyBmcm9tIHRoZSBvdGhlciBwZXJzb24uCisKK09mdGVuLCAicGxlYXNlIHB1bGwiIG1lc3NhZ2VzIG9uIHRoZSBtYWlsaW5nIGxpc3QganVzdCBwcm92aWRlCit0d28gcGllY2VzIG9mIGluZm9ybWF0aW9uOiBhIHJlcG8gVVJMIGFuZCBhIGJyYW5jaCBuYW1lOyB0aGlzCitpcyBkZXNpZ25lZCB0byBiZSBlYXNpbHkgY3V0JnBhc3RlZCBhdCB0aGUgZW5kIG9mIGEgJ2dpdCBmZXRjaCcKK2NvbW1hbmQgbGluZToKKworLS0tLS0tLS0tLS0tCitMaW51cywgcGxlYXNlIHB1bGwgZnJvbQorCisJZ2l0Oi8vZ2l0Li4uLi9wcm9qLmdpdCBtYXN0ZXIKKwordG8gZ2V0IHRoZSBmb2xsb3dpbmcgdXBkYXRlcy4uLgorLS0tLS0tLS0tLS0tCisKK2JlY29tZXM6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbCBnaXQ6Ly9naXQuLi4uL3Byb2ouZ2l0IG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK0luIHN1Y2ggYSBjYXNlLCB5b3UgZG8gbm90IHdhbnQgdG8gYXV0b21hdGljYWxseSBmb2xsb3cgdGhlIG90aGVyCitwZXJzb24ncyB0YWdzLgorCitPbmUgaW1wb3J0YW50IGFzcGVjdCBvZiBHaXQgaXMgaXRzIGRpc3RyaWJ1dGVkIG5hdHVyZSwgd2hpY2gKK2xhcmdlbHkgbWVhbnMgdGhlcmUgaXMgbm8gaW5oZXJlbnQgInVwc3RyZWFtIiBvcgorImRvd25zdHJlYW0iIGluIHRoZSBzeXN0ZW0uICBPbiB0aGUgZmFjZSBvZiBpdCwgdGhlIGFib3ZlCitleGFtcGxlIG1pZ2h0IHNlZW0gdG8gaW5kaWNhdGUgdGhhdCB0aGUgdGFnIG5hbWVzcGFjZSBpcyBvd25lZAorYnkgdGhlIHVwcGVyIGVjaGVsb24gb2YgcGVvcGxlIGFuZCB0aGF0IHRhZ3Mgb25seSBmbG93IGRvd253YXJkcywgYnV0Cit0aGF0IGlzIG5vdCB0aGUgY2FzZS4gIEl0IG9ubHkgc2hvd3MgdGhhdCB0aGUgdXNhZ2UgcGF0dGVybgorZGV0ZXJtaW5lcyB3aG8gYXJlIGludGVyZXN0ZWQgaW4gd2hvc2UgdGFncy4KKworQSBvbmUtc2hvdCBwdWxsIGlzIGEgc2lnbiB0aGF0IGEgY29tbWl0IGhpc3RvcnkgaXMgbm93IGNyb3NzaW5nCit0aGUgYm91bmRhcnkgYmV0d2VlbiBvbmUgY2lyY2xlIG9mIHBlb3BsZSAoZS5nLiAicGVvcGxlIHdobyBhcmUKK3ByaW1hcmlseSBpbnRlcmVzdGVkIGluIHRoZSBuZXR3b3JraW5nIHBhcnQgb2YgdGhlIGtlcm5lbCIpIHdobyBtYXkKK2hhdmUgdGhlaXIgb3duIHNldCBvZiB0YWdzIChlLmcuICJ0aGlzIGlzIHRoZSB0aGlyZCByZWxlYXNlCitjYW5kaWRhdGUgZnJvbSB0aGUgbmV0d29ya2luZyBncm91cCB0byBiZSBwcm9wb3NlZCBmb3IgZ2VuZXJhbAorY29uc3VtcHRpb24gd2l0aCAyLjYuMjEgcmVsZWFzZSIpIHRvIGFub3RoZXIgY2lyY2xlIG9mIHBlb3BsZQorKGUuZy4gInBlb3BsZSB3aG8gaW50ZWdyYXRlIHZhcmlvdXMgc3Vic3lzdGVtIGltcHJvdmVtZW50cyIpLgorVGhlIGxhdHRlciBhcmUgdXN1YWxseSBub3QgaW50ZXJlc3RlZCBpbiB0aGUgZGV0YWlsZWQgdGFncyB1c2VkCitpbnRlcm5hbGx5IGluIHRoZSBmb3JtZXIgZ3JvdXAgKHRoYXQgaXMgd2hhdCAiaW50ZXJuYWwiIG1lYW5zKS4KK1RoYXQgaXMgd2h5IGl0IGlzIGRlc2lyYWJsZSBub3QgdG8gZm9sbG93IHRhZ3MgYXV0b21hdGljYWxseSBpbgordGhpcyBjYXNlLgorCitJdCBtYXkgd2VsbCBiZSB0aGF0IGFtb25nIG5ldHdvcmtpbmcgcGVvcGxlLCB0aGV5IG1heSB3YW50IHRvCitleGNoYW5nZSB0aGUgdGFncyBpbnRlcm5hbCB0byB0aGVpciBncm91cCwgYnV0IGluIHRoYXQgd29ya2Zsb3cKK3RoZXkgYXJlIG1vc3QgbGlrZWx5IHRyYWNraW5nIGVhY2ggb3RoZXIncyBwcm9ncmVzcyBieQoraGF2aW5nIHJlbW90ZS10cmFja2luZyBicmFuY2hlcy4gIEFnYWluLCB0aGUgaGV1cmlzdGljIHRvIGF1dG9tYXRpY2FsbHkKK2ZvbGxvdyBzdWNoIHRhZ3MgaXMgYSBnb29kIHRoaW5nLgorCisKK09uIEJhY2tkYXRpbmcgVGFncworfn5+fn5+fn5+fn5+fn5+fn5+CisKK0lmIHlvdSBoYXZlIGltcG9ydGVkIHNvbWUgY2hhbmdlcyBmcm9tIGFub3RoZXIgVkNTIGFuZCB3b3VsZCBsaWtlCit0byBhZGQgdGFncyBmb3IgbWFqb3IgcmVsZWFzZXMgb2YgeW91ciB3b3JrLCBpdCBpcyB1c2VmdWwgdG8gYmUgYWJsZQordG8gc3BlY2lmeSB0aGUgZGF0ZSB0byBlbWJlZCBpbnNpZGUgb2YgdGhlIHRhZyBvYmplY3Q7IHN1Y2ggZGF0YSBpbgordGhlIHRhZyBvYmplY3QgYWZmZWN0cywgZm9yIGV4YW1wbGUsIHRoZSBvcmRlcmluZyBvZiB0YWdzIGluIHRoZQorZ2l0d2ViIGludGVyZmFjZS4KKworVG8gc2V0IHRoZSBkYXRlIHVzZWQgaW4gZnV0dXJlIHRhZyBvYmplY3RzLCBzZXQgdGhlIGVudmlyb25tZW50Cit2YXJpYWJsZSBHSVRfQ09NTUlUVEVSX0RBVEUgKHNlZSB0aGUgbGF0ZXIgZGlzY3Vzc2lvbiBvZiBwb3NzaWJsZQordmFsdWVzOyB0aGUgbW9zdCBjb21tb24gZm9ybSBpcyAiWVlZWS1NTS1ERCBISDpNTSIpLgorCitGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tCiskIEdJVF9DT01NSVRURVJfREFURT0iMjAwNi0xMC0wMiAxMDozMSIgZ2l0IHRhZyAtcyB2MS4wLjEKKy0tLS0tLS0tLS0tLQorCitpbmNsdWRlOjpkYXRlLWZvcm1hdHMudHh0W10KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1jaGVjay1yZWYtZm9ybWF0WzFdLgorbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXRvb2xzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXRvb2xzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGZlYzRjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdG9vbHMudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0dpdCBUb29scworPT09PT09PT09CisKK1doZW4gR2l0IHdhcyB5b3VuZywgcGVvcGxlIGxvb2tpbmcgZm9yIHRoaXJkLXBhcnR5IEdpdC1yZWxhdGVkIHRvb2xzIGNhbWUKK3RvIHRoZSBHaXQgcHJvamVjdCBpdHNlbGYgdG8gZmluZCB0aGVtLCB0aHVzIGEgbGlzdCBvZiBzdWNoIHRvb2xzIHdhcworbWFpbnRhaW5lZCBoZXJlLiBUaGVzZSBkYXlzLCBob3dldmVyLCBzZWFyY2ggZW5naW5lcyBmaWxsIHRoYXQgcm9sZSBtdWNoCittb3JlIGVmZmljaWVudGx5LCBzbyB0aGlzIG1hbnVhbGx5LW1haW50YWluZWQgbGlzdCBoYXMgYmVlbiByZXRpcmVkLgorCitTZWUgYWxzbyB0aGUgYGNvbnRyaWIvYCBhcmVhLCBhbmQgdGhlIEdpdCB3aWtpOgoraHR0cHM6Ly9naXQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9JbnRlcmZhY2VzRnJvbnRlbmRzQW5kVG9vbHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1maWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1maWxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWYxNDhhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLWZpbGUudHh0CkBAIC0wLDAgKzEsMjggQEAKK2dpdC11bnBhY2stZmlsZSgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC11bnBhY2stZmlsZSAtIENyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGEgYmxvYidzIGNvbnRlbnRzCisKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdW5wYWNrLWZpbGUnIDxibG9iPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0NyZWF0ZXMgYSBmaWxlIGhvbGRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBibG9iIHNwZWNpZmllZCBieSBzaGExLiBJdAorcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisJLm1lcmdlX2ZpbGVfWFhYWFgKKworT1BUSU9OUworLS0tLS0tLQorPGJsb2I+OjoKKwlNdXN0IGJlIGEgYmxvYiBpZAorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1vYmplY3RzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1vYmplY3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2RlNTBkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLW9iamVjdHMudHh0CkBAIC0wLDAgKzEsNTIgQEAKK2dpdC11bnBhY2stb2JqZWN0cygxKQorPT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC11bnBhY2stb2JqZWN0cyAtIFVucGFjayBvYmplY3RzIGZyb20gYSBwYWNrZWQgYXJjaGl2ZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB1bnBhY2stb2JqZWN0cycgWy1uXSBbLXFdIFstcl0gWy0tc3RyaWN0XQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZCBhIHBhY2tlZCBhcmNoaXZlICgucGFjaykgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsIGV4cGFuZGluZwordGhlIG9iamVjdHMgY29udGFpbmVkIHdpdGhpbiBhbmQgd3JpdGluZyB0aGVtIGludG8gdGhlIHJlcG9zaXRvcnkgaW4KKyJsb29zZSIgKG9uZSBvYmplY3QgcGVyIGZpbGUpIGZvcm1hdC4KKworT2JqZWN0cyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHJlcG9zaXRvcnkgd2lsbCAqbm90KiBiZSB1bnBhY2tlZAorZnJvbSB0aGUgcGFja2ZpbGUuICBUaGVyZWZvcmUsIG5vdGhpbmcgd2lsbCBiZSB1bnBhY2tlZCBpZiB5b3UgdXNlCit0aGlzIGNvbW1hbmQgb24gYSBwYWNrZmlsZSB0aGF0IGV4aXN0cyB3aXRoaW4gdGhlIHRhcmdldCByZXBvc2l0b3J5LgorCitTZWUgbGlua2dpdDpnaXQtcmVwYWNrWzFdIGZvciBvcHRpb25zIHRvIGdlbmVyYXRlCituZXcgcGFja3MgYW5kIHJlcGxhY2UgZXhpc3Rpbmcgb25lcy4KKworT1BUSU9OUworLS0tLS0tLQorLW46OgorICAgICAgICBEcnkgcnVuLiAgQ2hlY2sgdGhlIHBhY2sgZmlsZSB3aXRob3V0IGFjdHVhbGx5IHVucGFja2luZworCXRoZSBvYmplY3RzLgorCistcTo6CisJVGhlIGNvbW1hbmQgdXN1YWxseSBzaG93cyBwZXJjZW50YWdlIHByb2dyZXNzLiAgVGhpcworCWZsYWcgc3VwcHJlc3NlcyBpdC4KKworLXI6OgorCVdoZW4gdW5wYWNraW5nIGEgY29ycnVwdCBwYWNrZmlsZSwgdGhlIGNvbW1hbmQgZGllcyBhdAorCXRoZSBmaXJzdCBjb3JydXB0aW9uLiAgVGhpcyBmbGFnIHRlbGxzIGl0IHRvIGtlZXAgZ29pbmcKKwlhbmQgbWFrZSB0aGUgYmVzdCBlZmZvcnQgdG8gcmVjb3ZlciBhcyBtYW55IG9iamVjdHMgYXMKKwlwb3NzaWJsZS4KKworLS1zdHJpY3Q6OgorCURvbid0IHdyaXRlIG9iamVjdHMgd2l0aCBicm9rZW4gY29udGVudCBvciBsaW5rcy4KKworLS1tYXgtaW5wdXQtc2l6ZT08c2l6ZT46OgorCURpZSwgaWYgdGhlIHBhY2sgaXMgbGFyZ2VyIHRoYW4gPHNpemU+LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ODljYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0CkBAIC0wLDAgKzEsNTc2IEBACitnaXQtdXBkYXRlLWluZGV4KDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC11cGRhdGUtaW5kZXggLSBSZWdpc3RlciBmaWxlIGNvbnRlbnRzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGluZGV4CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHVwZGF0ZS1pbmRleCcKKwkgICAgIFstLWFkZF0gWy0tcmVtb3ZlIHwgLS1mb3JjZS1yZW1vdmVdIFstLXJlcGxhY2VdCisJICAgICBbLS1yZWZyZXNoXSBbLXFdIFstLXVubWVyZ2VkXSBbLS1pZ25vcmUtbWlzc2luZ10KKwkgICAgIFsoLS1jYWNoZWluZm8gPG1vZGU+LDxvYmplY3Q+LDxmaWxlPikuLi5dCisJICAgICBbLS1jaG1vZD0oK3wtKXhdCisJICAgICBbLS1bbm8tXWFzc3VtZS11bmNoYW5nZWRdCisJICAgICBbLS1bbm8tXXNraXAtd29ya3RyZWVdCisJICAgICBbLS1bbm8tXWlnbm9yZS1za2lwLXdvcmt0cmVlLWVudHJpZXNdCisJICAgICBbLS1bbm8tXWZzbW9uaXRvci12YWxpZF0KKwkgICAgIFstLWlnbm9yZS1zdWJtb2R1bGVzXQorCSAgICAgWy0tW25vLV1zcGxpdC1pbmRleF0KKwkgICAgIFstLVtuby18dGVzdC18Zm9yY2UtXXVudHJhY2tlZC1jYWNoZV0KKwkgICAgIFstLVtuby1dZnNtb25pdG9yXQorCSAgICAgWy0tcmVhbGx5LXJlZnJlc2hdIFstLXVucmVzb2x2ZV0gWy0tYWdhaW4gfCAtZ10KKwkgICAgIFstLWluZm8tb25seV0gWy0taW5kZXgtaW5mb10KKwkgICAgIFstel0gWy0tc3RkaW5dIFstLWluZGV4LXZlcnNpb24gPG4+XQorCSAgICAgWy0tdmVyYm9zZV0KKwkgICAgIFstLV0gWzxmaWxlPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitNb2RpZmllcyB0aGUgaW5kZXggb3IgZGlyZWN0b3J5IGNhY2hlLiBFYWNoIGZpbGUgbWVudGlvbmVkIGlzIHVwZGF0ZWQKK2ludG8gdGhlIGluZGV4IGFuZCBhbnkgJ3VubWVyZ2VkJyBvciAnbmVlZHMgdXBkYXRpbmcnIHN0YXRlIGlzCitjbGVhcmVkLgorCitTZWUgYWxzbyBsaW5rZ2l0OmdpdC1hZGRbMV0gZm9yIGEgbW9yZSB1c2VyLWZyaWVuZGx5IHdheSB0byBkbyBzb21lIG9mCit0aGUgbW9zdCBjb21tb24gb3BlcmF0aW9ucyBvbiB0aGUgaW5kZXguCisKK1RoZSB3YXkgJ2dpdCB1cGRhdGUtaW5kZXgnIGhhbmRsZXMgZmlsZXMgaXQgaXMgdG9sZCBhYm91dCBjYW4gYmUgbW9kaWZpZWQKK3VzaW5nIHRoZSB2YXJpb3VzIG9wdGlvbnM6CisKK09QVElPTlMKKy0tLS0tLS0KKy0tYWRkOjoKKwlJZiBhIHNwZWNpZmllZCBmaWxlIGlzbid0IGluIHRoZSBpbmRleCBhbHJlYWR5IHRoZW4gaXQncworCWFkZGVkLgorCURlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIGlnbm9yZSBuZXcgZmlsZXMuCisKKy0tcmVtb3ZlOjoKKwlJZiBhIHNwZWNpZmllZCBmaWxlIGlzIGluIHRoZSBpbmRleCBidXQgaXMgbWlzc2luZyB0aGVuIGl0J3MKKwlyZW1vdmVkLgorCURlZmF1bHQgYmVoYXZpb3IgaXMgdG8gaWdub3JlIHJlbW92ZWQgZmlsZS4KKworLS1yZWZyZXNoOjoKKwlMb29rcyBhdCB0aGUgY3VycmVudCBpbmRleCBhbmQgY2hlY2tzIHRvIHNlZSBpZiBtZXJnZXMgb3IKKwl1cGRhdGVzIGFyZSBuZWVkZWQgYnkgY2hlY2tpbmcgc3RhdCgpIGluZm9ybWF0aW9uLgorCistcTo6CisgICAgICAgIFF1aWV0LiAgSWYgLS1yZWZyZXNoIGZpbmRzIHRoYXQgdGhlIGluZGV4IG5lZWRzIGFuIHVwZGF0ZSwgdGhlCisgICAgICAgIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gZXJyb3Igb3V0LiAgVGhpcyBvcHRpb24gbWFrZXMKKwknZ2l0IHVwZGF0ZS1pbmRleCcgY29udGludWUgYW55d2F5LgorCistLWlnbm9yZS1zdWJtb2R1bGVzOjoKKwlEbyBub3QgdHJ5IHRvIHVwZGF0ZSBzdWJtb2R1bGVzLiAgVGhpcyBvcHRpb24gaXMgb25seSByZXNwZWN0ZWQKKwl3aGVuIHBhc3NlZCBiZWZvcmUgLS1yZWZyZXNoLgorCistLXVubWVyZ2VkOjoKKyAgICAgICAgSWYgLS1yZWZyZXNoIGZpbmRzIHVubWVyZ2VkIGNoYW5nZXMgaW4gdGhlIGluZGV4LCB0aGUgZGVmYXVsdAorCWJlaGF2aW9yIGlzIHRvIGVycm9yIG91dC4gIFRoaXMgb3B0aW9uIG1ha2VzICdnaXQgdXBkYXRlLWluZGV4JworICAgICAgICBjb250aW51ZSBhbnl3YXkuCisKKy0taWdub3JlLW1pc3Npbmc6OgorCUlnbm9yZXMgbWlzc2luZyBmaWxlcyBkdXJpbmcgYSAtLXJlZnJlc2gKKworLS1jYWNoZWluZm8gPG1vZGU+LDxvYmplY3Q+LDxwYXRoPjo6CistLWNhY2hlaW5mbyA8bW9kZT4gPG9iamVjdD4gPHBhdGg+OjoKKwlEaXJlY3RseSBpbnNlcnQgdGhlIHNwZWNpZmllZCBpbmZvIGludG8gdGhlIGluZGV4LiAgRm9yCisJYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgeW91IGNhbiBhbHNvIGdpdmUgdGhlc2UgdGhyZWUKKwlhcmd1bWVudHMgYXMgdGhyZWUgc2VwYXJhdGUgcGFyYW1ldGVycywgYnV0IG5ldyB1c2VycyBhcmUKKwllbmNvdXJhZ2VkIHRvIHVzZSBhIHNpbmdsZS1wYXJhbWV0ZXIgZm9ybS4KKworLS1pbmRleC1pbmZvOjoKKyAgICAgICAgUmVhZCBpbmRleCBpbmZvcm1hdGlvbiBmcm9tIHN0ZGluLgorCistLWNobW9kPSgrfC0peDo6CisgICAgICAgIFNldCB0aGUgZXhlY3V0ZSBwZXJtaXNzaW9ucyBvbiB0aGUgdXBkYXRlZCBmaWxlcy4KKworLS1bbm8tXWFzc3VtZS11bmNoYW5nZWQ6OgorCVdoZW4gdGhpcyBmbGFnIGlzIHNwZWNpZmllZCwgdGhlIG9iamVjdCBuYW1lcyByZWNvcmRlZAorCWZvciB0aGUgcGF0aHMgYXJlIG5vdCB1cGRhdGVkLiAgSW5zdGVhZCwgdGhpcyBvcHRpb24KKwlzZXRzL3Vuc2V0cyB0aGUgImFzc3VtZSB1bmNoYW5nZWQiIGJpdCBmb3IgdGhlCisJcGF0aHMuICBXaGVuIHRoZSAiYXNzdW1lIHVuY2hhbmdlZCIgYml0IGlzIG9uLCB0aGUgdXNlcgorCXByb21pc2VzIG5vdCB0byBjaGFuZ2UgdGhlIGZpbGUgYW5kIGFsbG93cyBHaXQgdG8gYXNzdW1lCisJdGhhdCB0aGUgd29ya2luZyB0cmVlIGZpbGUgbWF0Y2hlcyB3aGF0IGlzIHJlY29yZGVkIGluCisJdGhlIGluZGV4LiAgSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSB3b3JraW5nIHRyZWUgZmlsZSwKKwl5b3UgbmVlZCB0byB1bnNldCB0aGUgYml0IHRvIHRlbGwgR2l0LiAgVGhpcyBpcworCXNvbWV0aW1lcyBoZWxwZnVsIHdoZW4gd29ya2luZyB3aXRoIGEgYmlnIHByb2plY3Qgb24gYQorCWZpbGVzeXN0ZW0gdGhhdCBoYXMgdmVyeSBzbG93IGxzdGF0KDIpIHN5c3RlbSBjYWxsCisJKGUuZy4gY2lmcykuCisrCitHaXQgd2lsbCBmYWlsIChncmFjZWZ1bGx5KSBpbiBjYXNlIGl0IG5lZWRzIHRvIG1vZGlmeSB0aGlzIGZpbGUKK2luIHRoZSBpbmRleCBlLmcuIHdoZW4gbWVyZ2luZyBpbiBhIGNvbW1pdDsKK3RodXMsIGluIGNhc2UgdGhlIGFzc3VtZWQtdW50cmFja2VkIGZpbGUgaXMgY2hhbmdlZCB1cHN0cmVhbSwKK3lvdSB3aWxsIG5lZWQgdG8gaGFuZGxlIHRoZSBzaXR1YXRpb24gbWFudWFsbHkuCisKKy0tcmVhbGx5LXJlZnJlc2g6OgorCUxpa2UgYC0tcmVmcmVzaGAsIGJ1dCBjaGVja3Mgc3RhdCBpbmZvcm1hdGlvbiB1bmNvbmRpdGlvbmFsbHksCisJd2l0aG91dCByZWdhcmQgdG8gdGhlICJhc3N1bWUgdW5jaGFuZ2VkIiBzZXR0aW5nLgorCistLVtuby1dc2tpcC13b3JrdHJlZTo6CisJV2hlbiBvbmUgb2YgdGhlc2UgZmxhZ3MgaXMgc3BlY2lmaWVkLCB0aGUgb2JqZWN0IG5hbWUgcmVjb3JkZWQKKwlmb3IgdGhlIHBhdGhzIGFyZSBub3QgdXBkYXRlZC4gSW5zdGVhZCwgdGhlc2Ugb3B0aW9ucworCXNldCBhbmQgdW5zZXQgdGhlICJza2lwLXdvcmt0cmVlIiBiaXQgZm9yIHRoZSBwYXRocy4gU2VlCisJc2VjdGlvbiAiU2tpcC13b3JrdHJlZSBiaXQiIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKKy0tW25vLV1pZ25vcmUtc2tpcC13b3JrdHJlZS1lbnRyaWVzOjoKKwlEbyBub3QgcmVtb3ZlIHNraXAtd29ya3RyZWUgKEFLQSAiaW5kZXgtb25seSIpIGVudHJpZXMgZXZlbiB3aGVuCisJdGhlIGAtLXJlbW92ZWAgb3B0aW9uIHdhcyBzcGVjaWZpZWQuCisKKy0tW25vLV1mc21vbml0b3ItdmFsaWQ6OgorCVdoZW4gb25lIG9mIHRoZXNlIGZsYWdzIGlzIHNwZWNpZmllZCwgdGhlIG9iamVjdCBuYW1lIHJlY29yZGVkCisJZm9yIHRoZSBwYXRocyBhcmUgbm90IHVwZGF0ZWQuIEluc3RlYWQsIHRoZXNlIG9wdGlvbnMKKwlzZXQgYW5kIHVuc2V0IHRoZSAiZnNtb25pdG9yIHZhbGlkIiBiaXQgZm9yIHRoZSBwYXRocy4gU2VlCisJc2VjdGlvbiAiRmlsZSBTeXN0ZW0gTW9uaXRvciIgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKy1nOjoKKy0tYWdhaW46OgorCVJ1bnMgJ2dpdCB1cGRhdGUtaW5kZXgnIGl0c2VsZiBvbiB0aGUgcGF0aHMgd2hvc2UgaW5kZXgKKwllbnRyaWVzIGFyZSBkaWZmZXJlbnQgZnJvbSB0aG9zZSBmcm9tIHRoZSBgSEVBRGAgY29tbWl0LgorCistLXVucmVzb2x2ZTo6CisJUmVzdG9yZXMgdGhlICd1bm1lcmdlZCcgb3IgJ25lZWRzIHVwZGF0aW5nJyBzdGF0ZSBvZiBhCisJZmlsZSBkdXJpbmcgYSBtZXJnZSBpZiBpdCB3YXMgY2xlYXJlZCBieSBhY2NpZGVudC4KKworLS1pbmZvLW9ubHk6OgorCURvIG5vdCBjcmVhdGUgb2JqZWN0cyBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlIGZvciBhbGwKKwk8ZmlsZT4gYXJndW1lbnRzIHRoYXQgZm9sbG93IHRoaXMgZmxhZzsganVzdCBpbnNlcnQKKwl0aGVpciBvYmplY3QgSURzIGludG8gdGhlIGluZGV4LgorCistLWZvcmNlLXJlbW92ZTo6CisJUmVtb3ZlIHRoZSBmaWxlIGZyb20gdGhlIGluZGV4IGV2ZW4gd2hlbiB0aGUgd29ya2luZyBkaXJlY3RvcnkKKwlzdGlsbCBoYXMgc3VjaCBhIGZpbGUuIChJbXBsaWVzIC0tcmVtb3ZlLikKKworLS1yZXBsYWNlOjoKKwlCeSBkZWZhdWx0LCB3aGVuIGEgZmlsZSBgcGF0aGAgZXhpc3RzIGluIHRoZSBpbmRleCwKKwknZ2l0IHVwZGF0ZS1pbmRleCcgcmVmdXNlcyBhbiBhdHRlbXB0IHRvIGFkZCBgcGF0aC9maWxlYC4KKwlTaW1pbGFybHkgaWYgYSBmaWxlIGBwYXRoL2ZpbGVgIGV4aXN0cywgYSBmaWxlIGBwYXRoYAorCWNhbm5vdCBiZSBhZGRlZC4gIFdpdGggLS1yZXBsYWNlIGZsYWcsIGV4aXN0aW5nIGVudHJpZXMKKwl0aGF0IGNvbmZsaWN0IHdpdGggdGhlIGVudHJ5IGJlaW5nIGFkZGVkIGFyZQorCWF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB3aXRoIHdhcm5pbmcgbWVzc2FnZXMuCisKKy0tc3RkaW46OgorCUluc3RlYWQgb2YgdGFraW5nIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLAorCXJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4gIFBhdGhzIGFyZQorCXNlcGFyYXRlZCBieSBMRiAoaS5lLiBvbmUgcGF0aCBwZXIgbGluZSkgYnkgZGVmYXVsdC4KKworLS12ZXJib3NlOjoKKyAgICAgICAgUmVwb3J0IHdoYXQgaXMgYmVpbmcgYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSBpbmRleC4KKworLS1pbmRleC12ZXJzaW9uIDxuPjo6CisJV3JpdGUgdGhlIHJlc3VsdGluZyBpbmRleCBvdXQgaW4gdGhlIG5hbWVkIG9uLWRpc2sgZm9ybWF0IHZlcnNpb24uCisJU3VwcG9ydGVkIHZlcnNpb25zIGFyZSAyLCAzIGFuZCA0LiBUaGUgY3VycmVudCBkZWZhdWx0IHZlcnNpb24gaXMgMgorCW9yIDMsIGRlcGVuZGluZyBvbiB3aGV0aGVyIGV4dHJhIGZlYXR1cmVzIGFyZSB1c2VkLCBzdWNoIGFzCisJYGdpdCBhZGQgLU5gLgorKworVmVyc2lvbiA0IHBlcmZvcm1zIGEgc2ltcGxlIHBhdGhuYW1lIGNvbXByZXNzaW9uIHRoYXQgcmVkdWNlcyBpbmRleAorc2l6ZSBieSAzMCUtNTAlIG9uIGxhcmdlIHJlcG9zaXRvcmllcywgd2hpY2ggcmVzdWx0cyBpbiBmYXN0ZXIgbG9hZAordGltZS4gVmVyc2lvbiA0IGlzIHJlbGF0aXZlbHkgeW91bmcgKGZpcnN0IHJlbGVhc2VkIGluIDEuOC4wIGluCitPY3RvYmVyIDIwMTIpLiBPdGhlciBHaXQgaW1wbGVtZW50YXRpb25zIHN1Y2ggYXMgSkdpdCBhbmQgbGliZ2l0MgorbWF5IG5vdCBzdXBwb3J0IGl0IHlldC4KKworLXo6OgorCU9ubHkgbWVhbmluZ2Z1bCB3aXRoIGAtLXN0ZGluYCBvciBgLS1pbmRleC1pbmZvYDsgcGF0aHMgYXJlCisJc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciBpbnN0ZWFkIG9mIExGLgorCistLXNwbGl0LWluZGV4OjoKKy0tbm8tc3BsaXQtaW5kZXg6OgorCUVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IG1vZGUuIElmIHNwbGl0LWluZGV4IG1vZGUgaXMKKwlhbHJlYWR5IGVuYWJsZWQgYW5kIGAtLXNwbGl0LWluZGV4YCBpcyBnaXZlbiBhZ2FpbiwgYWxsCisJY2hhbmdlcyBpbiAkR0lUX0RJUi9pbmRleCBhcmUgcHVzaGVkIGJhY2sgdG8gdGhlIHNoYXJlZCBpbmRleAorCWZpbGUuCisrCitUaGVzZSBvcHRpb25zIHRha2UgZWZmZWN0IHdoYXRldmVyIHRoZSB2YWx1ZSBvZiB0aGUgYGNvcmUuc3BsaXRJbmRleGAKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLiBCdXQgYSB3YXJuaW5nIGlzCitlbWl0dGVkIHdoZW4gdGhlIGNoYW5nZSBnb2VzIGFnYWluc3QgdGhlIGNvbmZpZ3VyZWQgdmFsdWUsIGFzIHRoZQorY29uZmlndXJlZCB2YWx1ZSB3aWxsIHRha2UgZWZmZWN0IG5leHQgdGltZSB0aGUgaW5kZXggaXMgcmVhZCBhbmQgdGhpcword2lsbCByZW1vdmUgdGhlIGludGVuZGVkIGVmZmVjdCBvZiB0aGUgb3B0aW9uLgorCistLXVudHJhY2tlZC1jYWNoZTo6CistLW5vLXVudHJhY2tlZC1jYWNoZTo6CisJRW5hYmxlIG9yIGRpc2FibGUgdW50cmFja2VkIGNhY2hlIGZlYXR1cmUuIFBsZWFzZSB1c2UKKwlgLS10ZXN0LXVudHJhY2tlZC1jYWNoZWAgYmVmb3JlIGVuYWJsaW5nIGl0LgorKworVGhlc2Ugb3B0aW9ucyB0YWtlIGVmZmVjdCB3aGF0ZXZlciB0aGUgdmFsdWUgb2YgdGhlIGBjb3JlLnVudHJhY2tlZENhY2hlYAorY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuIEJ1dCBhIHdhcm5pbmcgaXMKK2VtaXR0ZWQgd2hlbiB0aGUgY2hhbmdlIGdvZXMgYWdhaW5zdCB0aGUgY29uZmlndXJlZCB2YWx1ZSwgYXMgdGhlCitjb25maWd1cmVkIHZhbHVlIHdpbGwgdGFrZSBlZmZlY3QgbmV4dCB0aW1lIHRoZSBpbmRleCBpcyByZWFkIGFuZCB0aGlzCit3aWxsIHJlbW92ZSB0aGUgaW50ZW5kZWQgZWZmZWN0IG9mIHRoZSBvcHRpb24uCisKKy0tdGVzdC11bnRyYWNrZWQtY2FjaGU6OgorCU9ubHkgcGVyZm9ybSB0ZXN0cyBvbiB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gbWFrZSBzdXJlCisJdW50cmFja2VkIGNhY2hlIGNhbiBiZSB1c2VkLiBZb3UgaGF2ZSB0byBtYW51YWxseSBlbmFibGUKKwl1bnRyYWNrZWQgY2FjaGUgdXNpbmcgYC0tdW50cmFja2VkLWNhY2hlYCBvcgorCWAtLWZvcmNlLXVudHJhY2tlZC1jYWNoZWAgb3IgdGhlIGBjb3JlLnVudHJhY2tlZENhY2hlYAorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYWZ0ZXJ3YXJkcyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gdXNlCisJaXQuIElmIGEgdGVzdCBmYWlscyB0aGUgZXhpdCBjb2RlIGlzIDEgYW5kIGEgbWVzc2FnZQorCWV4cGxhaW5zIHdoYXQgaXMgbm90IHdvcmtpbmcgYXMgbmVlZGVkLCBvdGhlcndpc2UgdGhlIGV4aXQKKwljb2RlIGlzIDAgYW5kIE9LIGlzIHByaW50ZWQuCisKKy0tZm9yY2UtdW50cmFja2VkLWNhY2hlOjoKKwlTYW1lIGFzIGAtLXVudHJhY2tlZC1jYWNoZWAuIFByb3ZpZGVkIGZvciBiYWNrd2FyZHMKKwljb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgR2l0IHdoZXJlCisJYC0tdW50cmFja2VkLWNhY2hlYCB1c2VkIHRvIGltcGx5IGAtLXRlc3QtdW50cmFja2VkLWNhY2hlYCBidXQKKwl0aGlzIG9wdGlvbiB3b3VsZCBlbmFibGUgdGhlIGV4dGVuc2lvbiB1bmNvbmRpdGlvbmFsbHkuCisKKy0tZnNtb25pdG9yOjoKKy0tbm8tZnNtb25pdG9yOjoKKwlFbmFibGUgb3IgZGlzYWJsZSBmaWxlcyBzeXN0ZW0gbW9uaXRvciBmZWF0dXJlLiBUaGVzZSBvcHRpb25zCisJdGFrZSBlZmZlY3Qgd2hhdGV2ZXIgdGhlIHZhbHVlIG9mIHRoZSBgY29yZS5mc21vbml0b3JgCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuIEJ1dCBhIHdhcm5pbmcKKwlpcyBlbWl0dGVkIHdoZW4gdGhlIGNoYW5nZSBnb2VzIGFnYWluc3QgdGhlIGNvbmZpZ3VyZWQgdmFsdWUsIGFzCisJdGhlIGNvbmZpZ3VyZWQgdmFsdWUgd2lsbCB0YWtlIGVmZmVjdCBuZXh0IHRpbWUgdGhlIGluZGV4IGlzCisJcmVhZCBhbmQgdGhpcyB3aWxsIHJlbW92ZSB0aGUgaW50ZW5kZWQgZWZmZWN0IG9mIHRoZSBvcHRpb24uCisKK1wtLTo6CisJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KKworPGZpbGU+OjoKKwlGaWxlcyB0byBhY3Qgb24uCisJTm90ZSB0aGF0IGZpbGVzIGJlZ2lubmluZyB3aXRoICcuJyBhcmUgZGlzY2FyZGVkLiBUaGlzIGluY2x1ZGVzCisJYC4vZmlsZWAgYW5kIGBkaXIvLi9maWxlYC4gSWYgeW91IGRvbid0IHdhbnQgdGhpcywgdGhlbiB1c2UKKwljbGVhbmVyIG5hbWVzLgorCVRoZSBzYW1lIGFwcGxpZXMgdG8gZGlyZWN0b3JpZXMgZW5kaW5nICcvJyBhbmQgcGF0aHMgd2l0aCAnLy8nCisKK1VTSU5HIC0tUkVGUkVTSAorLS0tLS0tLS0tLS0tLS0tCitgLS1yZWZyZXNoYCBkb2VzIG5vdCBjYWxjdWxhdGUgYSBuZXcgc2hhMSBmaWxlIG9yIGJyaW5nIHRoZSBpbmRleAordXAgdG8gZGF0ZSBmb3IgbW9kZS9jb250ZW50IGNoYW5nZXMuIEJ1dCB3aGF0IGl0ICpkb2VzKiBkbyBpcyB0bworInJlLW1hdGNoIiB0aGUgc3RhdCBpbmZvcm1hdGlvbiBvZiBhIGZpbGUgd2l0aCB0aGUgaW5kZXgsIHNvIHRoYXQgeW91CitjYW4gcmVmcmVzaCB0aGUgaW5kZXggZm9yIGEgZmlsZSB0aGF0IGhhc24ndCBiZWVuIGNoYW5nZWQgYnV0IHdoZXJlCit0aGUgc3RhdCBlbnRyeSBpcyBvdXQgb2YgZGF0ZS4KKworRm9yIGV4YW1wbGUsIHlvdSdkIHdhbnQgdG8gZG8gdGhpcyBhZnRlciBkb2luZyBhICdnaXQgcmVhZC10cmVlJywgdG8gbGluawordXAgdGhlIHN0YXQgaW5kZXggZGV0YWlscyB3aXRoIHRoZSBwcm9wZXIgZmlsZXMuCisKK1VTSU5HIC0tQ0FDSEVJTkZPIE9SIC0tSU5GTy1PTkxZCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYC0tY2FjaGVpbmZvYCBpcyB1c2VkIHRvIHJlZ2lzdGVyIGEgZmlsZSB0aGF0IGlzIG5vdCBpbiB0aGUKK2N1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBUaGlzIGlzIHVzZWZ1bCBmb3IgbWluaW11bS1jaGVja291dAorbWVyZ2luZy4KKworVG8gcHJldGVuZCB5b3UgaGF2ZSBhIGZpbGUgYXQgcGF0aCB3aXRoIG1vZGUgYW5kIHNoYTEsIHNheToKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDxtb2RlPiw8c2hhMT4sPHBhdGg+CistLS0tLS0tLS0tLS0tLS0tCisKK2AtLWluZm8tb25seWAgaXMgdXNlZCB0byByZWdpc3RlciBmaWxlcyB3aXRob3V0IHBsYWNpbmcgdGhlbSBpbiB0aGUgb2JqZWN0CitkYXRhYmFzZS4gIFRoaXMgaXMgdXNlZnVsIGZvciBzdGF0dXMtb25seSByZXBvc2l0b3JpZXMuCisKK0JvdGggYC0tY2FjaGVpbmZvYCBhbmQgYC0taW5mby1vbmx5YCBiZWhhdmUgc2ltaWxhcmx5OiB0aGUgaW5kZXggaXMgdXBkYXRlZAorYnV0IHRoZSBvYmplY3QgZGF0YWJhc2UgaXNuJ3QuICBgLS1jYWNoZWluZm9gIGlzIHVzZWZ1bCB3aGVuIHRoZSBvYmplY3QgaXMKK2luIHRoZSBkYXRhYmFzZSBidXQgdGhlIGZpbGUgaXNuJ3QgYXZhaWxhYmxlIGxvY2FsbHkuICBgLS1pbmZvLW9ubHlgIGlzCit1c2VmdWwgd2hlbiB0aGUgZmlsZSBpcyBhdmFpbGFibGUsIGJ1dCB5b3UgZG8gbm90IHdpc2ggdG8gdXBkYXRlIHRoZQorb2JqZWN0IGRhdGFiYXNlLgorCisKK1VTSU5HIC0tSU5ERVgtSU5GTworLS0tLS0tLS0tLS0tLS0tLS0tCisKK2AtLWluZGV4LWluZm9gIGlzIGEgbW9yZSBwb3dlcmZ1bCBtZWNoYW5pc20gdGhhdCBsZXRzIHlvdSBmZWVkCittdWx0aXBsZSBlbnRyeSBkZWZpbml0aW9ucyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgYW5kIGRlc2lnbmVkCitzcGVjaWZpY2FsbHkgZm9yIHNjcmlwdHMuICBJdCBjYW4gdGFrZSBpbnB1dHMgb2YgdGhyZWUgZm9ybWF0czoKKworICAgIC4gbW9kZSBTUCB0eXBlIFNQIHNoYTEgICAgICAgICAgVEFCIHBhdGgKKysKK1RoaXMgZm9ybWF0IGlzIHRvIHN0dWZmIGBnaXQgbHMtdHJlZWAgb3V0cHV0IGludG8gdGhlIGluZGV4LgorCisgICAgLiBtb2RlICAgICAgICAgU1Agc2hhMSBTUCBzdGFnZSBUQUIgcGF0aAorKworVGhpcyBmb3JtYXQgaXMgdG8gcHV0IGhpZ2hlciBvcmRlciBzdGFnZXMgaW50byB0aGUKK2luZGV4IGZpbGUgYW5kIG1hdGNoZXMgJ2dpdCBscy1maWxlcyAtLXN0YWdlJyBvdXRwdXQuCisKKyAgICAuIG1vZGUgICAgICAgICBTUCBzaGExICAgICAgICAgIFRBQiBwYXRoCisrCitUaGlzIGZvcm1hdCBpcyBubyBsb25nZXIgcHJvZHVjZWQgYnkgYW55IEdpdCBjb21tYW5kLCBidXQgaXMKK2FuZCB3aWxsIGNvbnRpbnVlIHRvIGJlIHN1cHBvcnRlZCBieSBgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mb2AuCisKK1RvIHBsYWNlIGEgaGlnaGVyIHN0YWdlIGVudHJ5IHRvIHRoZSBpbmRleCwgdGhlIHBhdGggc2hvdWxkCitmaXJzdCBiZSByZW1vdmVkIGJ5IGZlZWRpbmcgYSBtb2RlPTAgZW50cnkgZm9yIHRoZSBwYXRoLCBhbmQKK3RoZW4gZmVlZGluZyBuZWNlc3NhcnkgaW5wdXQgbGluZXMgaW4gdGhlIHRoaXJkIGZvcm1hdC4KKworRm9yIGV4YW1wbGUsIHN0YXJ0aW5nIHdpdGggdGhpcyBpbmRleDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBscy1maWxlcyAtcworMTAwNjQ0IDhhMTIxOGExMDI0YTIxMmJiM2RiMzBiZWNkODYwMzE1ZjlmM2FjNTIgMCAgICAgICBmcm90egorLS0tLS0tLS0tLS0tCisKK3lvdSBjYW4gZmVlZCB0aGUgZm9sbG93aW5nIGlucHV0IHRvIGAtLWluZGV4LWluZm9gOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8KKzAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAlmcm90egorMTAwNjQ0IDhhMTIxOGExMDI0YTIxMmJiM2RiMzBiZWNkODYwMzE1ZjlmM2FjNTIgMQlmcm90egorMTAwNzU1IDhhMTIxOGExMDI0YTIxMmJiM2RiMzBiZWNkODYwMzE1ZjlmM2FjNTIgMglmcm90egorLS0tLS0tLS0tLS0tCisKK1RoZSBmaXJzdCBsaW5lIG9mIHRoZSBpbnB1dCBmZWVkcyAwIGFzIHRoZSBtb2RlIHRvIHJlbW92ZSB0aGUKK3BhdGg7IHRoZSBTSEEtMSBkb2VzIG5vdCBtYXR0ZXIgYXMgbG9uZyBhcyBpdCBpcyB3ZWxsIGZvcm1hdHRlZC4KK1RoZW4gdGhlIHNlY29uZCBhbmQgdGhpcmQgbGluZSBmZWVkcyBzdGFnZSAxIGFuZCBzdGFnZSAyIGVudHJpZXMKK2ZvciB0aGF0IHBhdGguICBBZnRlciB0aGUgYWJvdmUsIHdlIHdvdWxkIGVuZCB1cCB3aXRoIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbHMtZmlsZXMgLXMKKzEwMDY0NCA4YTEyMThhMTAyNGEyMTJiYjNkYjMwYmVjZDg2MDMxNWY5ZjNhYzUyIDEJZnJvdHoKKzEwMDc1NSA4YTEyMThhMTAyNGEyMTJiYjNkYjMwYmVjZDg2MDMxNWY5ZjNhYzUyIDIJZnJvdHoKKy0tLS0tLS0tLS0tLQorCisKK1VTSU5HIGBgQVNTVU1FIFVOQ0hBTkdFRCcnIEJJVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01hbnkgb3BlcmF0aW9ucyBpbiBHaXQgZGVwZW5kIG9uIHlvdXIgZmlsZXN5c3RlbSB0byBoYXZlIGFuCitlZmZpY2llbnQgYGxzdGF0KDIpYCBpbXBsZW1lbnRhdGlvbiwgc28gdGhhdCBgc3RfbXRpbWVgCitpbmZvcm1hdGlvbiBmb3Igd29ya2luZyB0cmVlIGZpbGVzIGNhbiBiZSBjaGVhcGx5IGNoZWNrZWQgdG8gc2VlCitpZiB0aGUgZmlsZSBjb250ZW50cyBoYXZlIGNoYW5nZWQgZnJvbSB0aGUgdmVyc2lvbiByZWNvcmRlZCBpbgordGhlIGluZGV4IGZpbGUuICBVbmZvcnR1bmF0ZWx5LCBzb21lIGZpbGVzeXN0ZW1zIGhhdmUKK2luZWZmaWNpZW50IGBsc3RhdCgyKWAuICBJZiB5b3VyIGZpbGVzeXN0ZW0gaXMgb25lIG9mIHRoZW0sIHlvdQorY2FuIHNldCAiYXNzdW1lIHVuY2hhbmdlZCIgYml0IHRvIHBhdGhzIHlvdSBoYXZlIG5vdCBjaGFuZ2VkIHRvCitjYXVzZSBHaXQgbm90IHRvIGRvIHRoaXMgY2hlY2suICBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIGJpdCBvbiBhCitwYXRoIGRvZXMgbm90IG1lYW4gR2l0IHdpbGwgY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIHRvCitzZWUgaWYgaXQgaGFzIGNoYW5nZWQgLS0gaXQgbWFrZXMgR2l0IHRvIG9taXQgYW55IGNoZWNraW5nIGFuZAorYXNzdW1lIGl0IGhhcyAqbm90KiBjaGFuZ2VkLiAgV2hlbiB5b3UgbWFrZSBjaGFuZ2VzIHRvIHdvcmtpbmcKK3RyZWUgZmlsZXMsIHlvdSBoYXZlIHRvIGV4cGxpY2l0bHkgdGVsbCBHaXQgYWJvdXQgaXQgYnkgZHJvcHBpbmcKKyJhc3N1bWUgdW5jaGFuZ2VkIiBiaXQsIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgeW91IG1vZGlmeSB0aGVtLgorCitJbiBvcmRlciB0byBzZXQgImFzc3VtZSB1bmNoYW5nZWQiIGJpdCwgdXNlIGAtLWFzc3VtZS11bmNoYW5nZWRgCitvcHRpb24uICBUbyB1bnNldCwgdXNlIGAtLW5vLWFzc3VtZS11bmNoYW5nZWRgLiBUbyBzZWUgd2hpY2ggZmlsZXMKK2hhdmUgdGhlICJhc3N1bWUgdW5jaGFuZ2VkIiBiaXQgc2V0LCB1c2UgYGdpdCBscy1maWxlcyAtdmAKKyhzZWUgbGlua2dpdDpnaXQtbHMtZmlsZXNbMV0pLgorCitUaGUgY29tbWFuZCBsb29rcyBhdCBgY29yZS5pZ25vcmVzdGF0YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiAgV2hlbgordGhpcyBpcyB0cnVlLCBwYXRocyB1cGRhdGVkIHdpdGggYGdpdCB1cGRhdGUtaW5kZXggcGF0aHMuLi5gIGFuZAorcGF0aHMgdXBkYXRlZCB3aXRoIG90aGVyIEdpdCBjb21tYW5kcyB0aGF0IHVwZGF0ZSBib3RoIGluZGV4IGFuZAord29ya2luZyB0cmVlIChlLmcuICdnaXQgYXBwbHkgLS1pbmRleCcsICdnaXQgY2hlY2tvdXQtaW5kZXggLXUnLAorYW5kICdnaXQgcmVhZC10cmVlIC11JykgYXJlIGF1dG9tYXRpY2FsbHkgbWFya2VkIGFzICJhc3N1bWUKK3VuY2hhbmdlZCIuICBOb3RlIHRoYXQgImFzc3VtZSB1bmNoYW5nZWQiIGJpdCBpcyAqbm90KiBzZXQgaWYKK2BnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaGAgZmluZHMgdGhlIHdvcmtpbmcgdHJlZSBmaWxlIG1hdGNoZXMKK3RoZSBpbmRleCAodXNlIGBnaXQgdXBkYXRlLWluZGV4IC0tcmVhbGx5LXJlZnJlc2hgIGlmIHlvdSB3YW50Cit0byBtYXJrIHRoZW0gYXMgImFzc3VtZSB1bmNoYW5nZWQiKS4KKworCitFWEFNUExFUworLS0tLS0tLS0KK1RvIHVwZGF0ZSBhbmQgcmVmcmVzaCBvbmx5IHRoZSBmaWxlcyBhbHJlYWR5IGNoZWNrZWQgb3V0OgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dC1pbmRleCAtbiAtZiAtYSAmJiBnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLW1pc3NpbmcgLS1yZWZyZXNoCistLS0tLS0tLS0tLS0tLS0tCisKK09uIGFuIGluZWZmaWNpZW50IGZpbGVzeXN0ZW0gd2l0aCBgY29yZS5pZ25vcmVzdGF0YCBzZXQ6OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCB1cGRhdGUtaW5kZXggLS1yZWFsbHktcmVmcmVzaCAgICAgICAgICAgICAgPDE+CiskIGdpdCB1cGRhdGUtaW5kZXggLS1uby1hc3N1bWUtdW5jaGFuZ2VkIGZvby5jICAgPDI+CiskIGdpdCBkaWZmIC0tbmFtZS1vbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgPDM+CiskIGVkaXQgZm9vLmMKKyQgZ2l0IGRpZmYgLS1uYW1lLW9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICA8ND4KK00gZm9vLmMKKyQgZ2l0IHVwZGF0ZS1pbmRleCBmb28uYyAgICAgICAgICAgICAgICAgICAgICAgICA8NT4KKyQgZ2l0IGRpZmYgLS1uYW1lLW9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICA8Nj4KKyQgZWRpdCBmb28uYworJCBnaXQgZGlmZiAtLW5hbWUtb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw3PgorJCBnaXQgdXBkYXRlLWluZGV4IC0tbm8tYXNzdW1lLXVuY2hhbmdlZCBmb28uYyAgIDw4PgorJCBnaXQgZGlmZiAtLW5hbWUtb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw5PgorTSBmb28uYworLS0tLS0tLS0tLS0tCisrCis8MT4gZm9yY2VzIGxzdGF0KDIpIHRvIHNldCAiYXNzdW1lIHVuY2hhbmdlZCIgYml0cyBmb3IgcGF0aHMgdGhhdCBtYXRjaCBpbmRleC4KKzwyPiBtYXJrIHRoZSBwYXRoIHRvIGJlIGVkaXRlZC4KKzwzPiB0aGlzIGRvZXMgbHN0YXQoMikgYW5kIGZpbmRzIGluZGV4IG1hdGNoZXMgdGhlIHBhdGguCis8ND4gdGhpcyBkb2VzIGxzdGF0KDIpIGFuZCBmaW5kcyBpbmRleCBkb2VzICpub3QqIG1hdGNoIHRoZSBwYXRoLgorPDU+IHJlZ2lzdGVyaW5nIHRoZSBuZXcgdmVyc2lvbiB0byBpbmRleCBzZXRzICJhc3N1bWUgdW5jaGFuZ2VkIiBiaXQuCis8Nj4gYW5kIGl0IGlzIGFzc3VtZWQgdW5jaGFuZ2VkLgorPDc+IGV2ZW4gYWZ0ZXIgeW91IGVkaXQgaXQuCis8OD4geW91IGNhbiB0ZWxsIGFib3V0IHRoZSBjaGFuZ2UgYWZ0ZXIgdGhlIGZhY3QuCis8OT4gbm93IGl0IGNoZWNrcyB3aXRoIGxzdGF0KDIpIGFuZCBmaW5kcyBpdCBoYXMgYmVlbiBjaGFuZ2VkLgorCisKK1NLSVAtV09SS1RSRUUgQklUCistLS0tLS0tLS0tLS0tLS0tLQorCitTa2lwLXdvcmt0cmVlIGJpdCBjYW4gYmUgZGVmaW5lZCBpbiBvbmUgKGxvbmcpIHNlbnRlbmNlOiBXaGVuIHJlYWRpbmcKK2FuIGVudHJ5LCBpZiBpdCBpcyBtYXJrZWQgYXMgc2tpcC13b3JrdHJlZSwgdGhlbiBHaXQgcHJldGVuZHMgaXRzCit3b3JraW5nIGRpcmVjdG9yeSB2ZXJzaW9uIGlzIHVwIHRvIGRhdGUgYW5kIHJlYWQgdGhlIGluZGV4IHZlcnNpb24KK2luc3RlYWQuCisKK1RvIGVsYWJvcmF0ZSwgInJlYWRpbmciIG1lYW5zIGNoZWNraW5nIGZvciBmaWxlIGV4aXN0ZW5jZSwgcmVhZGluZworZmlsZSBhdHRyaWJ1dGVzIG9yIGZpbGUgY29udGVudC4gVGhlIHdvcmtpbmcgZGlyZWN0b3J5IHZlcnNpb24gbWF5IGJlCitwcmVzZW50IG9yIGFic2VudC4gSWYgcHJlc2VudCwgaXRzIGNvbnRlbnQgbWF5IG1hdGNoIGFnYWluc3QgdGhlIGluZGV4Cit2ZXJzaW9uIG9yIG5vdC4gV3JpdGluZyBpcyBub3QgYWZmZWN0ZWQgYnkgdGhpcyBiaXQsIGNvbnRlbnQgc2FmZXR5CitpcyBzdGlsbCBmaXJzdCBwcmlvcml0eS4gTm90ZSB0aGF0IEdpdCBfY2FuXyB1cGRhdGUgd29ya2luZyBkaXJlY3RvcnkKK2ZpbGUsIHRoYXQgaXMgbWFya2VkIHNraXAtd29ya3RyZWUsIGlmIGl0IGlzIHNhZmUgdG8gZG8gc28gKGkuZS4KK3dvcmtpbmcgZGlyZWN0b3J5IHZlcnNpb24gbWF0Y2hlcyBpbmRleCB2ZXJzaW9uKQorCitBbHRob3VnaCB0aGlzIGJpdCBsb29rcyBzaW1pbGFyIHRvIGFzc3VtZS11bmNoYW5nZWQgYml0LCBpdHMgZ29hbCBpcworZGlmZmVyZW50IGZyb20gYXNzdW1lLXVuY2hhbmdlZCBiaXQncy4gU2tpcC13b3JrdHJlZSBhbHNvIHRha2VzCitwcmVjZWRlbmNlIG92ZXIgYXNzdW1lLXVuY2hhbmdlZCBiaXQgd2hlbiBib3RoIGFyZSBzZXQuCisKK1NQTElUIElOREVYCistLS0tLS0tLS0tLQorCitUaGlzIG1vZGUgaXMgZGVzaWduZWQgZm9yIHJlcG9zaXRvcmllcyB3aXRoIHZlcnkgbGFyZ2UgaW5kZXhlcywgYW5kCithaW1zIGF0IHJlZHVjaW5nIHRoZSB0aW1lIGl0IHRha2VzIHRvIHJlcGVhdGVkbHkgd3JpdGUgdGhlc2UgaW5kZXhlcy4KKworSW4gdGhpcyBtb2RlLCB0aGUgaW5kZXggaXMgc3BsaXQgaW50byB0d28gZmlsZXMsICRHSVRfRElSL2luZGV4IGFuZAorJEdJVF9ESVIvc2hhcmVkaW5kZXguPFNIQS0xPi4gQ2hhbmdlcyBhcmUgYWNjdW11bGF0ZWQgaW4KKyRHSVRfRElSL2luZGV4LCB0aGUgc3BsaXQgaW5kZXgsIHdoaWxlIHRoZSBzaGFyZWQgaW5kZXggZmlsZSBjb250YWlucworYWxsIGluZGV4IGVudHJpZXMgYW5kIHN0YXlzIHVuY2hhbmdlZC4KKworQWxsIGNoYW5nZXMgaW4gdGhlIHNwbGl0IGluZGV4IGFyZSBwdXNoZWQgYmFjayB0byB0aGUgc2hhcmVkIGluZGV4CitmaWxlIHdoZW4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzcGxpdCBpbmRleCByZWFjaGVzIGEgbGV2ZWwKK3NwZWNpZmllZCBieSB0aGUgc3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIGNvbmZpZyB2YXJpYWJsZSAoc2VlCitsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCitFYWNoIHRpbWUgYSBuZXcgc2hhcmVkIGluZGV4IGZpbGUgaXMgY3JlYXRlZCwgdGhlIG9sZCBzaGFyZWQgaW5kZXgKK2ZpbGVzIGFyZSBkZWxldGVkIGlmIHRoZWlyIG1vZGlmaWNhdGlvbiB0aW1lIGlzIG9sZGVyIHRoYW4gd2hhdCBpcworc3BlY2lmaWVkIGJ5IHRoZSBzcGxpdEluZGV4LnNoYXJlZEluZGV4RXhwaXJlIGNvbmZpZyB2YXJpYWJsZSAoc2VlCitsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCitUbyBhdm9pZCBkZWxldGluZyBhIHNoYXJlZCBpbmRleCBmaWxlIHRoYXQgaXMgc3RpbGwgdXNlZCwgaXRzCittb2RpZmljYXRpb24gdGltZSBpcyB1cGRhdGVkIHRvIHRoZSBjdXJyZW50IHRpbWUgZXZlcnkgdGltZSBhIG5ldyBzcGxpdAoraW5kZXggYmFzZWQgb24gdGhlIHNoYXJlZCBpbmRleCBmaWxlIGlzIGVpdGhlciBjcmVhdGVkIG9yIHJlYWQgZnJvbS4KKworVU5UUkFDS0VEIENBQ0hFCistLS0tLS0tLS0tLS0tLS0KKworVGhpcyBjYWNoZSBpcyBtZWFudCB0byBzcGVlZCB1cCBjb21tYW5kcyB0aGF0IGludm9sdmUgZGV0ZXJtaW5pbmcKK3VudHJhY2tlZCBmaWxlcyBzdWNoIGFzIGBnaXQgc3RhdHVzYC4KKworVGhpcyBmZWF0dXJlIHdvcmtzIGJ5IHJlY29yZGluZyB0aGUgbXRpbWUgb2YgdGhlIHdvcmtpbmcgdHJlZQorZGlyZWN0b3JpZXMgYW5kIHRoZW4gb21pdHRpbmcgcmVhZGluZyBkaXJlY3RvcmllcyBhbmQgc3RhdCBjYWxscworYWdhaW5zdCBmaWxlcyBpbiB0aG9zZSBkaXJlY3RvcmllcyB3aG9zZSBtdGltZSBoYXNuJ3QgY2hhbmdlZC4gRm9yCit0aGlzIHRvIHdvcmsgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSBhbmQgZmlsZSBzeXN0ZW0gbXVzdAorY2hhbmdlIHRoZSBgc3RfbXRpbWVgIGZpZWxkIG9mIGRpcmVjdG9yaWVzIGlmIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkKK2FyZSBhZGRlZCwgbW9kaWZpZWQgb3IgZGVsZXRlZC4KKworWW91IGNhbiB0ZXN0IHdoZXRoZXIgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhhdCB3aXRoIHRoZQorYC0tdGVzdC11bnRyYWNrZWQtY2FjaGVgIG9wdGlvbi4gVGhlIGAtLXVudHJhY2tlZC1jYWNoZWAgb3B0aW9uIHVzZWQKK3RvIGltcGxpY2l0bHkgcGVyZm9ybSB0aGF0IHRlc3QgaW4gb2xkZXIgdmVyc2lvbnMgb2YgR2l0LCBidXQgdGhhdCdzCitubyBsb25nZXIgdGhlIGNhc2UuCisKK0lmIHlvdSB3YW50IHRvIGVuYWJsZSAob3IgZGlzYWJsZSkgdGhpcyBmZWF0dXJlLCBpdCBpcyBlYXNpZXIgdG8gdXNlCit0aGUgYGNvcmUudW50cmFja2VkQ2FjaGVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKHNlZQorbGlua2dpdDpnaXQtY29uZmlnWzFdKSB0aGFuIHVzaW5nIHRoZSBgLS11bnRyYWNrZWQtY2FjaGVgIG9wdGlvbiB0bworYGdpdCB1cGRhdGUtaW5kZXhgIGluIGVhY2ggcmVwb3NpdG9yeSwgZXNwZWNpYWxseSBpZiB5b3Ugd2FudCB0byBkbyBzbworYWNyb3NzIGFsbCByZXBvc2l0b3JpZXMgeW91IHVzZSwgYmVjYXVzZSB5b3UgY2FuIHNldCB0aGUgY29uZmlndXJhdGlvbgordmFyaWFibGUgdG8gYHRydWVgIChvciBgZmFsc2VgKSBpbiB5b3VyIGAkSE9NRS8uZ2l0Y29uZmlnYCBqdXN0IG9uY2UKK2FuZCBoYXZlIGl0IGFmZmVjdCBhbGwgcmVwb3NpdG9yaWVzIHlvdSB0b3VjaC4KKworV2hlbiB0aGUgYGNvcmUudW50cmFja2VkQ2FjaGVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgY2hhbmdlZCwgdGhlCit1bnRyYWNrZWQgY2FjaGUgaXMgYWRkZWQgdG8gb3IgcmVtb3ZlZCBmcm9tIHRoZSBpbmRleCB0aGUgbmV4dCB0aW1lIGEKK2NvbW1hbmQgcmVhZHMgdGhlIGluZGV4OyB3aGlsZSB3aGVuIGAtLVtuby18Zm9yY2UtXXVudHJhY2tlZC1jYWNoZWAKK2FyZSB1c2VkLCB0aGUgdW50cmFja2VkIGNhY2hlIGlzIGltbWVkaWF0ZWx5IGFkZGVkIHRvIG9yIHJlbW92ZWQgZnJvbQordGhlIGluZGV4LgorCitCZWZvcmUgMi4xNywgdGhlIHVudHJhY2tlZCBjYWNoZSBoYWQgYSBidWcgd2hlcmUgcmVwbGFjaW5nIGEgZGlyZWN0b3J5Cit3aXRoIGEgc3ltbGluayB0byBhbm90aGVyIGRpcmVjdG9yeSBjb3VsZCBjYXVzZSBpdCB0byBpbmNvcnJlY3RseSBzaG93CitmaWxlcyB0cmFja2VkIGJ5IGdpdCBhcyB1bnRyYWNrZWQuIFNlZSB0aGUgInN0YXR1czogYWRkIGEgZmFpbGluZyB0ZXN0CitzaG93aW5nIGEgY29yZS51bnRyYWNrZWRDYWNoZSBidWciIGNvbW1pdCB0byBnaXQuZ2l0LiBBIHdvcmthcm91bmQgZm9yCit0aGF0IGlzIChhbmQgdGhpcyBtaWdodCB3b3JrIGZvciBvdGhlciB1bmRpc2NvdmVyZWQgYnVncyBpbiB0aGUKK2Z1dHVyZSk6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IC1jIGNvcmUudW50cmFja2VkQ2FjaGU9ZmFsc2Ugc3RhdHVzCistLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgYnVnIGhhcyBhbHNvIGJlZW4gc2hvd24gdG8gYWZmZWN0IG5vbi1zeW1saW5rIGNhc2VzIG9mIHJlcGxhY2luZworYSBkaXJlY3Rvcnkgd2l0aCBhIGZpbGUgd2hlbiBpdCBjb21lcyB0byB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBvZgordGhlIHVudHJhY2tlZCBjYWNoZSwgYnV0IG5vIGNhc2UgaGFzIGJlZW4gcmVwb3J0ZWQgd2hlcmUgdGhpcyByZXN1bHRlZCBpbgord3JvbmcgImdpdCBzdGF0dXMiIG91dHB1dC4KKworVGhlcmUgYXJlIGFsc28gY2FzZXMgd2hlcmUgZXhpc3RpbmcgaW5kZXhlcyB3cml0dGVuIGJ5IGdpdCB2ZXJzaW9ucworYmVmb3JlIDIuMTcgd2lsbCByZWZlcmVuY2UgZGlyZWN0b3JpZXMgdGhhdCBkb24ndCBleGlzdCBhbnltb3JlLAorcG90ZW50aWFsbHkgY2F1c2luZyBtYW55ICJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkiIHdhcm5pbmdzIHRvIGJlCitwcmludGVkIG9uICJnaXQgc3RhdHVzIi4gVGhlc2UgYXJlIG5ldyB3YXJuaW5ncyBmb3IgZXhpc3RpbmcgaXNzdWVzCit0aGF0IHdlcmUgcHJldmlvdXNseSBzaWxlbnRseSBkaXNjYXJkZWQuCisKK0FzIHdpdGggdGhlIGJ1ZyBkZXNjcmliZWQgYWJvdmUgdGhlIHNvbHV0aW9uIGlzIHRvIG9uZS1vZmYgZG8gYSAiZ2l0CitzdGF0dXMiIHJ1biB3aXRoIGBjb3JlLnVudHJhY2tlZENhY2hlPWZhbHNlYCB0byBmbHVzaCBvdXQgdGhlIGxlZnRvdmVyCitiYWQgZGF0YS4KKworRklMRSBTWVNURU0gTU9OSVRPUgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGZlYXR1cmUgaXMgaW50ZW5kZWQgdG8gc3BlZWQgdXAgZ2l0IG9wZXJhdGlvbnMgZm9yIHJlcG9zIHRoYXQgaGF2ZQorbGFyZ2Ugd29ya2luZyBkaXJlY3Rvcmllcy4KKworSXQgZW5hYmxlcyBnaXQgdG8gd29yayB0b2dldGhlciB3aXRoIGEgZmlsZSBzeXN0ZW0gbW9uaXRvciAoc2VlIHRoZQorImZzbW9uaXRvci13YXRjaG1hbiIgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdGhvb2tzWzVdKSB0aGF0IGNhbgoraW5mb3JtIGl0IGFzIHRvIHdoYXQgZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGlzIGVuYWJsZXMgZ2l0IHRvIGF2b2lkCitoYXZpbmcgdG8gbHN0YXQoKSBldmVyeSBmaWxlIHRvIGZpbmQgbW9kaWZpZWQgZmlsZXMuCisKK1doZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSB1bnRyYWNrZWQgY2FjaGUsIGl0IGNhbiBmdXJ0aGVyIGltcHJvdmUKK3BlcmZvcm1hbmNlIGJ5IGF2b2lkaW5nIHRoZSBjb3N0IG9mIHNjYW5uaW5nIHRoZSBlbnRpcmUgd29ya2luZyBkaXJlY3RvcnkKK2xvb2tpbmcgZm9yIG5ldyBmaWxlcy4KKworSWYgeW91IHdhbnQgdG8gZW5hYmxlIChvciBkaXNhYmxlKSB0aGlzIGZlYXR1cmUsIGl0IGlzIGVhc2llciB0byB1c2UKK3RoZSBgY29yZS5mc21vbml0b3JgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKHNlZQorbGlua2dpdDpnaXQtY29uZmlnWzFdKSB0aGFuIHVzaW5nIHRoZSBgLS1mc21vbml0b3JgIG9wdGlvbiB0bworYGdpdCB1cGRhdGUtaW5kZXhgIGluIGVhY2ggcmVwb3NpdG9yeSwgZXNwZWNpYWxseSBpZiB5b3Ugd2FudCB0byBkbyBzbworYWNyb3NzIGFsbCByZXBvc2l0b3JpZXMgeW91IHVzZSwgYmVjYXVzZSB5b3UgY2FuIHNldCB0aGUgY29uZmlndXJhdGlvbgordmFyaWFibGUgaW4geW91ciBgJEhPTUUvLmdpdGNvbmZpZ2AganVzdCBvbmNlIGFuZCBoYXZlIGl0IGFmZmVjdCBhbGwKK3JlcG9zaXRvcmllcyB5b3UgdG91Y2guCisKK1doZW4gdGhlIGBjb3JlLmZzbW9uaXRvcmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBjaGFuZ2VkLCB0aGUKK2ZpbGUgc3lzdGVtIG1vbml0b3IgaXMgYWRkZWQgdG8gb3IgcmVtb3ZlZCBmcm9tIHRoZSBpbmRleCB0aGUgbmV4dCB0aW1lCithIGNvbW1hbmQgcmVhZHMgdGhlIGluZGV4LiBXaGVuIGAtLVtuby1dZnNtb25pdG9yYCBhcmUgdXNlZCwgdGhlIGZpbGUKK3N5c3RlbSBtb25pdG9yIGlzIGltbWVkaWF0ZWx5IGFkZGVkIHRvIG9yIHJlbW92ZWQgZnJvbSB0aGUgaW5kZXguCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworVGhlIGNvbW1hbmQgaG9ub3JzIGBjb3JlLmZpbGVtb2RlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiAgSWYKK3lvdXIgcmVwb3NpdG9yeSBpcyBvbiBhIGZpbGVzeXN0ZW0gd2hvc2UgZXhlY3V0YWJsZSBiaXRzIGFyZQordW5yZWxpYWJsZSwgdGhpcyBzaG91bGQgYmUgc2V0IHRvICdmYWxzZScgKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorVGhpcyBjYXVzZXMgdGhlIGNvbW1hbmQgdG8gaWdub3JlIGRpZmZlcmVuY2VzIGluIGZpbGUgbW9kZXMgcmVjb3JkZWQKK2luIHRoZSBpbmRleCBhbmQgdGhlIGZpbGUgbW9kZSBvbiB0aGUgZmlsZXN5c3RlbSBpZiB0aGV5IGRpZmZlciBvbmx5IG9uCitleGVjdXRhYmxlIGJpdC4gICBPbiBzdWNoIGFuIHVuZm9ydHVuYXRlIGZpbGVzeXN0ZW0sIHlvdSBtYXkKK25lZWQgdG8gdXNlICdnaXQgdXBkYXRlLWluZGV4IC0tY2htb2Q9Jy4KKworUXVpdGUgc2ltaWxhcmx5LCBpZiBgY29yZS5zeW1saW5rc2AgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBzZXQKK3RvICdmYWxzZScgKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLCBzeW1ib2xpYyBsaW5rcyBhcmUgY2hlY2tlZCBvdXQKK2FzIHBsYWluIGZpbGVzLCBhbmQgdGhpcyBjb21tYW5kIGRvZXMgbm90IG1vZGlmeSBhIHJlY29yZGVkIGZpbGUgbW9kZQorZnJvbSBzeW1ib2xpYyBsaW5rIHRvIHJlZ3VsYXIgZmlsZS4KKworVGhlIGNvbW1hbmQgbG9va3MgYXQgYGNvcmUuaWdub3Jlc3RhdGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIFNlZQorJ1VzaW5nICJhc3N1bWUgdW5jaGFuZ2VkIiBiaXQnIHNlY3Rpb24gYWJvdmUuCisKK1RoZSBjb21tYW5kIGFsc28gbG9va3MgYXQgYGNvcmUudHJ1c3RjdGltZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KK0l0IGNhbiBiZSB1c2VmdWwgd2hlbiB0aGUgaW5vZGUgY2hhbmdlIHRpbWUgaXMgcmVndWxhcmx5IG1vZGlmaWVkIGJ5Citzb21ldGhpbmcgb3V0c2lkZSBHaXQgKGZpbGUgc3lzdGVtIGNyYXdsZXJzIGFuZCBiYWNrdXAgc3lzdGVtcyB1c2UKK2N0aW1lIGZvciBtYXJraW5nIGZpbGVzIHByb2Nlc3NlZCkgKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCitUaGUgdW50cmFja2VkIGNhY2hlIGV4dGVuc2lvbiBjYW4gYmUgZW5hYmxlZCBieSB0aGUKK2Bjb3JlLnVudHJhY2tlZENhY2hlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChzZWUKK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisKK05PVEVTCistLS0tLQorCitVc2VycyBvZnRlbiB0cnkgdG8gdXNlIHRoZSBhc3N1bWUtdW5jaGFuZ2VkIGFuZCBza2lwLXdvcmt0cmVlIGJpdHMKK3RvIHRlbGwgR2l0IHRvIGlnbm9yZSBjaGFuZ2VzIHRvIGZpbGVzIHRoYXQgYXJlIHRyYWNrZWQuICBUaGlzIGRvZXMgbm90Cit3b3JrIGFzIGV4cGVjdGVkLCBzaW5jZSBHaXQgbWF5IHN0aWxsIGNoZWNrIHdvcmtpbmcgdHJlZSBmaWxlcyBhZ2FpbnN0Cit0aGUgaW5kZXggd2hlbiBwZXJmb3JtaW5nIGNlcnRhaW4gb3BlcmF0aW9ucy4gIEluIGdlbmVyYWwsIEdpdCBkb2VzIG5vdAorcHJvdmlkZSBhIHdheSB0byBpZ25vcmUgY2hhbmdlcyB0byB0cmFja2VkIGZpbGVzLCBzbyBhbHRlcm5hdGUgc29sdXRpb25zCithcmUgcmVjb21tZW5kZWQuCisKK0ZvciBleGFtcGxlLCBpZiB0aGUgZmlsZSB5b3Ugd2FudCB0byBjaGFuZ2UgaXMgc29tZSBzb3J0IG9mIGNvbmZpZyBmaWxlLAordGhlIHJlcG9zaXRvcnkgY2FuIGluY2x1ZGUgYSBzYW1wbGUgY29uZmlnIGZpbGUgdGhhdCBjYW4gdGhlbiBiZSBjb3BpZWQKK2ludG8gdGhlIGlnbm9yZWQgbmFtZSBhbmQgbW9kaWZpZWQuICBUaGUgcmVwb3NpdG9yeSBjYW4gZXZlbiBpbmNsdWRlIGEKK3NjcmlwdCB0byB0cmVhdCB0aGUgc2FtcGxlIGZpbGUgYXMgYSB0ZW1wbGF0ZSwgbW9kaWZ5aW5nIGFuZCBjb3B5aW5nIGl0CithdXRvbWF0aWNhbGx5LgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSwKK2xpbmtnaXQ6Z2l0LWFkZFsxXSwKK2xpbmtnaXQ6Z2l0LWxzLWZpbGVzWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLXJlZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtcmVmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTczN2MyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLXJlZi50eHQKQEAgLTAsMCArMSwxNzggQEAKK2dpdC11cGRhdGUtcmVmKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtdXBkYXRlLXJlZiAtIFVwZGF0ZSB0aGUgb2JqZWN0IG5hbWUgc3RvcmVkIGluIGEgcmVmIHNhZmVseQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdXBkYXRlLXJlZicgWy1tIDxyZWFzb24+XSBbLS1uby1kZXJlZl0gKC1kIDxyZWY+IFs8b2xkdmFsdWU+XSB8IFstLWNyZWF0ZS1yZWZsb2ddIDxyZWY+IDxuZXd2YWx1ZT4gWzxvbGR2YWx1ZT5dIHwgLS1zdGRpbiBbLXpdKQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0dpdmVuIHR3byBhcmd1bWVudHMsIHN0b3JlcyB0aGUgPG5ld3ZhbHVlPiBpbiB0aGUgPHJlZj4sIHBvc3NpYmx5CitkZXJlZmVyZW5jaW5nIHRoZSBzeW1ib2xpYyByZWZzLiAgRS5nLiBgZ2l0IHVwZGF0ZS1yZWYgSEVBRAorPG5ld3ZhbHVlPmAgdXBkYXRlcyB0aGUgY3VycmVudCBicmFuY2ggaGVhZCB0byB0aGUgbmV3IG9iamVjdC4KKworR2l2ZW4gdGhyZWUgYXJndW1lbnRzLCBzdG9yZXMgdGhlIDxuZXd2YWx1ZT4gaW4gdGhlIDxyZWY+LAorcG9zc2libHkgZGVyZWZlcmVuY2luZyB0aGUgc3ltYm9saWMgcmVmcywgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQKK3RoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSA8cmVmPiBtYXRjaGVzIDxvbGR2YWx1ZT4uCitFLmcuIGBnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciA8bmV3dmFsdWU+IDxvbGR2YWx1ZT5gCit1cGRhdGVzIHRoZSBtYXN0ZXIgYnJhbmNoIGhlYWQgdG8gPG5ld3ZhbHVlPiBvbmx5IGlmIGl0cyBjdXJyZW50Cit2YWx1ZSBpcyA8b2xkdmFsdWU+LiAgWW91IGNhbiBzcGVjaWZ5IDQwICIwIiBvciBhbiBlbXB0eSBzdHJpbmcKK2FzIDxvbGR2YWx1ZT4gdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlZiB5b3UgYXJlIGNyZWF0aW5nIGRvZXMKK25vdCBleGlzdC4KKworSXQgYWxzbyBhbGxvd3MgYSAicmVmIiBmaWxlIHRvIGJlIGEgc3ltYm9saWMgcG9pbnRlciB0byBhbm90aGVyCityZWYgZmlsZSBieSBzdGFydGluZyB3aXRoIHRoZSBmb3VyLWJ5dGUgaGVhZGVyIHNlcXVlbmNlIG9mCisicmVmOiIuCisKK01vcmUgaW1wb3J0YW50bHksIGl0IGFsbG93cyB0aGUgdXBkYXRlIG9mIGEgcmVmIGZpbGUgdG8gZm9sbG93Cit0aGVzZSBzeW1ib2xpYyBwb2ludGVycywgd2hldGhlciB0aGV5IGFyZSBzeW1saW5rcyBvciB0aGVzZQorInJlZ3VsYXIgZmlsZSBzeW1ib2xpYyByZWZzIi4gIEl0IGZvbGxvd3MgKnJlYWwqIHN5bWxpbmtzIG9ubHkKK2lmIHRoZXkgc3RhcnQgd2l0aCAicmVmcy8iOiBvdGhlcndpc2UgaXQgd2lsbCBqdXN0IHRyeSB0byByZWFkCit0aGVtIGFuZCB1cGRhdGUgdGhlbSBhcyBhIHJlZ3VsYXIgZmlsZSAoaS5lLiBpdCB3aWxsIGFsbG93IHRoZQorZmlsZXN5c3RlbSB0byBmb2xsb3cgdGhlbSwgYnV0IHdpbGwgb3ZlcndyaXRlIHN1Y2ggYSBzeW1saW5rIHRvCitzb21ld2hlcmUgZWxzZSB3aXRoIGEgcmVndWxhciBmaWxlbmFtZSkuCisKK0lmIC0tbm8tZGVyZWYgaXMgZ2l2ZW4sIDxyZWY+IGl0c2VsZiBpcyBvdmVyd3JpdHRlbiwgcmF0aGVyIHRoYW4KK3RoZSByZXN1bHQgb2YgZm9sbG93aW5nIHRoZSBzeW1ib2xpYyBwb2ludGVycy4KKworSW4gZ2VuZXJhbCwgdXNpbmcKKworCWdpdCB1cGRhdGUtcmVmIEhFQUQgIiRoZWFkIgorCitzaG91bGQgYmUgYSBfbG90XyBzYWZlciB0aGFuIGRvaW5nCisKKwllY2hvICIkaGVhZCIgPiAiJEdJVF9ESVIvSEVBRCIKKworYm90aCBmcm9tIGEgc3ltbGluayBmb2xsb3dpbmcgc3RhbmRwb2ludCAqYW5kKiBhbiBlcnJvciBjaGVja2luZworc3RhbmRwb2ludC4gIFRoZSAicmVmcy8iIHJ1bGUgZm9yIHN5bWxpbmtzIG1lYW5zIHRoYXQgc3ltbGlua3MKK3RoYXQgcG9pbnQgdG8gIm91dHNpZGUiIHRoZSB0cmVlIGFyZSBzYWZlOiB0aGV5J2xsIGJlIGZvbGxvd2VkCitmb3IgcmVhZGluZyBidXQgbm90IGZvciB3cml0aW5nIChzbyB3ZSdsbCBuZXZlciB3cml0ZSB0aHJvdWdoIGEKK3JlZiBzeW1saW5rIHRvIHNvbWUgb3RoZXIgdHJlZSwgaWYgeW91IGhhdmUgY29waWVkIGEgd2hvbGUKK2FyY2hpdmUgYnkgY3JlYXRpbmcgYSBzeW1saW5rIHRyZWUpLgorCitXaXRoIGAtZGAgZmxhZywgaXQgZGVsZXRlcyB0aGUgbmFtZWQgPHJlZj4gYWZ0ZXIgdmVyaWZ5aW5nIGl0CitzdGlsbCBjb250YWlucyA8b2xkdmFsdWU+LgorCitXaXRoIGAtLXN0ZGluYCwgdXBkYXRlLXJlZiByZWFkcyBpbnN0cnVjdGlvbnMgZnJvbSBzdGFuZGFyZCBpbnB1dCBhbmQKK3BlcmZvcm1zIGFsbCBtb2RpZmljYXRpb25zIHRvZ2V0aGVyLiAgU3BlY2lmeSBjb21tYW5kcyBvZiB0aGUgZm9ybToKKworCXVwZGF0ZSBTUCA8cmVmPiBTUCA8bmV3dmFsdWU+IFtTUCA8b2xkdmFsdWU+XSBMRgorCWNyZWF0ZSBTUCA8cmVmPiBTUCA8bmV3dmFsdWU+IExGCisJZGVsZXRlIFNQIDxyZWY+IFtTUCA8b2xkdmFsdWU+XSBMRgorCXZlcmlmeSBTUCA8cmVmPiBbU1AgPG9sZHZhbHVlPl0gTEYKKwlvcHRpb24gU1AgPG9wdD4gTEYKKwlzdGFydCBMRgorCXByZXBhcmUgTEYKKwljb21taXQgTEYKKwlhYm9ydCBMRgorCitXaXRoIGAtLWNyZWF0ZS1yZWZsb2dgLCB1cGRhdGUtcmVmIHdpbGwgY3JlYXRlIGEgcmVmbG9nIGZvciBlYWNoIHJlZgorZXZlbiBpZiBvbmUgd291bGQgbm90IG9yZGluYXJpbHkgYmUgY3JlYXRlZC4KKworUXVvdGUgZmllbGRzIGNvbnRhaW5pbmcgd2hpdGVzcGFjZSBhcyBpZiB0aGV5IHdlcmUgc3RyaW5ncyBpbiBDIHNvdXJjZQorY29kZTsgaS5lLiwgc3Vycm91bmRlZCBieSBkb3VibGUtcXVvdGVzIGFuZCB3aXRoIGJhY2tzbGFzaCBlc2NhcGVzLgorVXNlIDQwICIwIiBjaGFyYWN0ZXJzIG9yIHRoZSBlbXB0eSBzdHJpbmcgdG8gc3BlY2lmeSBhIHplcm8gdmFsdWUuICBUbworc3BlY2lmeSBhIG1pc3NpbmcgdmFsdWUsIG9taXQgdGhlIHZhbHVlIGFuZCBpdHMgcHJlY2VkaW5nIFNQIGVudGlyZWx5LgorCitBbHRlcm5hdGl2ZWx5LCB1c2UgYC16YCB0byBzcGVjaWZ5IGluIE5VTC10ZXJtaW5hdGVkIGZvcm1hdCwgd2l0aG91dAorcXVvdGluZzoKKworCXVwZGF0ZSBTUCA8cmVmPiBOVUwgPG5ld3ZhbHVlPiBOVUwgWzxvbGR2YWx1ZT5dIE5VTAorCWNyZWF0ZSBTUCA8cmVmPiBOVUwgPG5ld3ZhbHVlPiBOVUwKKwlkZWxldGUgU1AgPHJlZj4gTlVMIFs8b2xkdmFsdWU+XSBOVUwKKwl2ZXJpZnkgU1AgPHJlZj4gTlVMIFs8b2xkdmFsdWU+XSBOVUwKKwlvcHRpb24gU1AgPG9wdD4gTlVMCisJc3RhcnQgTlVMCisJcHJlcGFyZSBOVUwKKwljb21taXQgTlVMCisJYWJvcnQgTlVMCisKK0luIHRoaXMgZm9ybWF0LCB1c2UgNDAgIjAiIHRvIHNwZWNpZnkgYSB6ZXJvIHZhbHVlLCBhbmQgdXNlIHRoZSBlbXB0eQorc3RyaW5nIHRvIHNwZWNpZnkgYSBtaXNzaW5nIHZhbHVlLgorCitJbiBlaXRoZXIgZm9ybWF0LCB2YWx1ZXMgY2FuIGJlIHNwZWNpZmllZCBpbiBhbnkgZm9ybSB0aGF0IEdpdAorcmVjb2duaXplcyBhcyBhbiBvYmplY3QgbmFtZS4gIENvbW1hbmRzIGluIGFueSBvdGhlciBmb3JtYXQgb3IgYQorcmVwZWF0ZWQgPHJlZj4gcHJvZHVjZSBhbiBlcnJvci4gIENvbW1hbmQgbWVhbmluZ3MgYXJlOgorCit1cGRhdGU6OgorCVNldCA8cmVmPiB0byA8bmV3dmFsdWU+IGFmdGVyIHZlcmlmeWluZyA8b2xkdmFsdWU+LCBpZiBnaXZlbi4KKwlTcGVjaWZ5IGEgemVybyA8bmV3dmFsdWU+IHRvIGVuc3VyZSB0aGUgcmVmIGRvZXMgbm90IGV4aXN0CisJYWZ0ZXIgdGhlIHVwZGF0ZSBhbmQvb3IgYSB6ZXJvIDxvbGR2YWx1ZT4gdG8gbWFrZSBzdXJlIHRoZQorCXJlZiBkb2VzIG5vdCBleGlzdCBiZWZvcmUgdGhlIHVwZGF0ZS4KKworY3JlYXRlOjoKKwlDcmVhdGUgPHJlZj4gd2l0aCA8bmV3dmFsdWU+IGFmdGVyIHZlcmlmeWluZyBpdCBkb2VzIG5vdAorCWV4aXN0LiAgVGhlIGdpdmVuIDxuZXd2YWx1ZT4gbWF5IG5vdCBiZSB6ZXJvLgorCitkZWxldGU6OgorCURlbGV0ZSA8cmVmPiBhZnRlciB2ZXJpZnlpbmcgaXQgZXhpc3RzIHdpdGggPG9sZHZhbHVlPiwgaWYKKwlnaXZlbi4gIElmIGdpdmVuLCA8b2xkdmFsdWU+IG1heSBub3QgYmUgemVyby4KKwordmVyaWZ5OjoKKwlWZXJpZnkgPHJlZj4gYWdhaW5zdCA8b2xkdmFsdWU+IGJ1dCBkbyBub3QgY2hhbmdlIGl0LiAgSWYKKwk8b2xkdmFsdWU+IGlzIHplcm8gb3IgbWlzc2luZywgdGhlIHJlZiBtdXN0IG5vdCBleGlzdC4KKworb3B0aW9uOjoKKwlNb2RpZnkgYmVoYXZpb3Igb2YgdGhlIG5leHQgY29tbWFuZCBuYW1pbmcgYSA8cmVmPi4KKwlUaGUgb25seSB2YWxpZCBvcHRpb24gaXMgYG5vLWRlcmVmYCB0byBhdm9pZCBkZXJlZmVyZW5jaW5nCisJYSBzeW1ib2xpYyByZWYuCisKK3N0YXJ0OjoKKwlTdGFydCBhIHRyYW5zYWN0aW9uLiBJbiBjb250cmFzdCB0byBhIG5vbi10cmFuc2FjdGlvbmFsIHNlc3Npb24sIGEKKwl0cmFuc2FjdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgYWJvcnQgaWYgdGhlIHNlc3Npb24gZW5kcyB3aXRob3V0IGFuCisJZXhwbGljaXQgY29tbWl0LgorCitwcmVwYXJlOjoKKwlQcmVwYXJlIHRvIGNvbW1pdCB0aGUgdHJhbnNhY3Rpb24uIFRoaXMgd2lsbCBjcmVhdGUgbG9jayBmaWxlcyBmb3IgYWxsCisJcXVldWVkIHJlZmVyZW5jZSB1cGRhdGVzLiBJZiBvbmUgcmVmZXJlbmNlIGNvdWxkIG5vdCBiZSBsb2NrZWQsIHRoZQorCXRyYW5zYWN0aW9uIHdpbGwgYmUgYWJvcnRlZC4KKworY29tbWl0OjoKKwlDb21taXQgYWxsIHJlZmVyZW5jZSB1cGRhdGVzIHF1ZXVlZCBmb3IgdGhlIHRyYW5zYWN0aW9uLCBlbmRpbmcgdGhlCisJdHJhbnNhY3Rpb24uCisKK2Fib3J0OjoKKwlBYm9ydCB0aGUgdHJhbnNhY3Rpb24sIHJlbGVhc2luZyBhbGwgbG9ja3MgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIGluCisJcHJlcGFyZWQgc3RhdGUuCisKK0lmIGFsbCA8cmVmPnMgY2FuIGJlIGxvY2tlZCB3aXRoIG1hdGNoaW5nIDxvbGR2YWx1ZT5zCitzaW11bHRhbmVvdXNseSwgYWxsIG1vZGlmaWNhdGlvbnMgYXJlIHBlcmZvcm1lZC4gIE90aGVyd2lzZSwgbm8KK21vZGlmaWNhdGlvbnMgYXJlIHBlcmZvcm1lZC4gIE5vdGUgdGhhdCB3aGlsZSBlYWNoIGluZGl2aWR1YWwKKzxyZWY+IGlzIHVwZGF0ZWQgb3IgZGVsZXRlZCBhdG9taWNhbGx5LCBhIGNvbmN1cnJlbnQgcmVhZGVyIG1heQorc3RpbGwgc2VlIGEgc3Vic2V0IG9mIHRoZSBtb2RpZmljYXRpb25zLgorCitMT0dHSU5HIFVQREFURVMKKy0tLS0tLS0tLS0tLS0tLQorSWYgY29uZmlnIHBhcmFtZXRlciAiY29yZS5sb2dBbGxSZWZVcGRhdGVzIiBpcyB0cnVlIGFuZCB0aGUgcmVmIGlzIG9uZSB1bmRlcgorInJlZnMvaGVhZHMvIiwgInJlZnMvcmVtb3Rlcy8iLCAicmVmcy9ub3Rlcy8iLCBvciB0aGUgc3ltYm9saWMgcmVmIEhFQUQ7IG9yCit0aGUgZmlsZSAiJEdJVF9ESVIvbG9ncy88cmVmPiIgZXhpc3RzIHRoZW4gYGdpdCB1cGRhdGUtcmVmYCB3aWxsIGFwcGVuZAorYSBsaW5lIHRvIHRoZSBsb2cgZmlsZSAiJEdJVF9ESVIvbG9ncy88cmVmPiIgKGRlcmVmZXJlbmNpbmcgYWxsCitzeW1ib2xpYyByZWZzIGJlZm9yZSBjcmVhdGluZyB0aGUgbG9nIG5hbWUpIGRlc2NyaWJpbmcgdGhlIGNoYW5nZQoraW4gcmVmIHZhbHVlLiAgTG9nIGxpbmVzIGFyZSBmb3JtYXR0ZWQgYXM6CisKKyAgICBvbGRzaGExIFNQIG5ld3NoYTEgU1AgY29tbWl0dGVyIExGCisKK1doZXJlICJvbGRzaGExIiBpcyB0aGUgNDAgY2hhcmFjdGVyIGhleGFkZWNpbWFsIHZhbHVlIHByZXZpb3VzbHkKK3N0b3JlZCBpbiA8cmVmPiwgIm5ld3NoYTEiIGlzIHRoZSA0MCBjaGFyYWN0ZXIgaGV4YWRlY2ltYWwgdmFsdWUgb2YKKzxuZXd2YWx1ZT4gYW5kICJjb21taXR0ZXIiIGlzIHRoZSBjb21taXR0ZXIncyBuYW1lLCBlbWFpbCBhZGRyZXNzCithbmQgZGF0ZSBpbiB0aGUgc3RhbmRhcmQgR2l0IGNvbW1pdHRlciBpZGVudCBmb3JtYXQuCisKK09wdGlvbmFsbHkgd2l0aCAtbToKKworICAgIG9sZHNoYTEgU1AgbmV3c2hhMSBTUCBjb21taXR0ZXIgVEFCIG1lc3NhZ2UgTEYKKworV2hlcmUgYWxsIGZpZWxkcyBhcmUgYXMgZGVzY3JpYmVkIGFib3ZlIGFuZCAibWVzc2FnZSIgaXMgdGhlCit2YWx1ZSBzdXBwbGllZCB0byB0aGUgLW0gb3B0aW9uLgorCitBbiB1cGRhdGUgd2lsbCBmYWlsICh3aXRob3V0IGNoYW5naW5nIDxyZWY+KSBpZiB0aGUgY3VycmVudCB1c2VyIGlzCit1bmFibGUgdG8gY3JlYXRlIGEgbmV3IGxvZyBmaWxlLCBhcHBlbmQgdG8gdGhlIGV4aXN0aW5nIGxvZyBmaWxlCitvciBkb2VzIG5vdCBoYXZlIGNvbW1pdHRlciBpbmZvcm1hdGlvbiBhdmFpbGFibGUuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLXNlcnZlci1pbmZvLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5YmIyZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mby50eHQKQEAgLTAsMCArMSwzNSBAQAorZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbygxKQorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtdXBkYXRlLXNlcnZlci1pbmZvIC0gVXBkYXRlIGF1eGlsaWFyeSBpbmZvIGZpbGUgdG8gaGVscCBkdW1iIHNlcnZlcnMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdXBkYXRlLXNlcnZlci1pbmZvJworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0EgZHVtYiBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCBkbyBvbi10aGUtZmx5IHBhY2sgZ2VuZXJhdGlvbnMgbXVzdAoraGF2ZSBzb21lIGF1eGlsaWFyeSBpbmZvcm1hdGlvbiBmaWxlcyBpbiAkR0lUX0RJUi9pbmZvIGFuZAorJEdJVF9PQkpFQ1RfRElSRUNUT1JZL2luZm8gZGlyZWN0b3JpZXMgdG8gaGVscCBjbGllbnRzIGRpc2NvdmVyCit3aGF0IHJlZmVyZW5jZXMgYW5kIHBhY2tzIHRoZSBzZXJ2ZXIgaGFzLiAgVGhpcyBjb21tYW5kCitnZW5lcmF0ZXMgc3VjaCBhdXhpbGlhcnkgZmlsZXMuCisKK09VVFBVVAorLS0tLS0tCisKK0N1cnJlbnRseSB0aGUgY29tbWFuZCB1cGRhdGVzIHRoZSBmb2xsb3dpbmcgZmlsZXMuICBQbGVhc2Ugc2VlCitsaW5rZ2l0OmdpdHJlcG9zaXRvcnktbGF5b3V0WzVdIGZvciBkZXNjcmlwdGlvbiBvZgord2hhdCB0aGV5IGFyZSBmb3I6CisKKyogb2JqZWN0cy9pbmZvL3BhY2tzCisKKyogaW5mby9yZWZzCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLWFyY2hpdmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLWFyY2hpdmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYTBmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtYXJjaGl2ZS50eHQKQEAgLTAsMCArMSw2MiBAQAorZ2l0LXVwbG9hZC1hcmNoaXZlKDEpCis9PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXVwbG9hZC1hcmNoaXZlIC0gU2VuZCBhcmNoaXZlIGJhY2sgdG8gZ2l0LWFyY2hpdmUKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdXBsb2FkLWFyY2hpdmUnIDxkaXJlY3Rvcnk+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorSW52b2tlZCBieSAnZ2l0IGFyY2hpdmUgLS1yZW1vdGUnIGFuZCBzZW5kcyBhIGdlbmVyYXRlZCBhcmNoaXZlIHRvIHRoZQorb3RoZXIgZW5kIG92ZXIgdGhlIEdpdCBwcm90b2NvbC4KKworVGhpcyBjb21tYW5kIGlzIHVzdWFsbHkgbm90IGludm9rZWQgZGlyZWN0bHkgYnkgdGhlIGVuZCB1c2VyLiAgVGhlIFVJCitmb3IgdGhlIHByb3RvY29sIGlzIG9uIHRoZSAnZ2l0IGFyY2hpdmUnIHNpZGUsIGFuZCB0aGUgcHJvZ3JhbSBwYWlyCitpcyBtZWFudCB0byBiZSB1c2VkIHRvIGdldCBhbiBhcmNoaXZlIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeS4KKworU0VDVVJJVFkKKy0tLS0tLS0tCisKK0luIG9yZGVyIHRvIHByb3RlY3QgdGhlIHByaXZhY3kgb2Ygb2JqZWN0cyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20KK2hpc3RvcnkgYnV0IG1heSBub3QgeWV0IGhhdmUgYmVlbiBwcnVuZWQsIGBnaXQtdXBsb2FkLWFyY2hpdmVgIGF2b2lkcworc2VydmluZyBhcmNoaXZlcyBmb3IgY29tbWl0cyBhbmQgdHJlZXMgdGhhdCBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIHRoZQorcmVwb3NpdG9yeSdzIHJlZnMuICBIb3dldmVyLCBiZWNhdXNlIGNhbGN1bGF0aW5nIG9iamVjdCByZWFjaGFiaWxpdHkgaXMKK2NvbXB1dGF0aW9uYWxseSBleHBlbnNpdmUsIGBnaXQtdXBsb2FkLWFyY2hpdmVgIGltcGxlbWVudHMgYSBzdHJpY3RlcgorYnV0IGVhc2llci10by1jaGVjayBzZXQgb2YgcnVsZXM6CisKKyAgMS4gQ2xpZW50cyBtYXkgcmVxdWVzdCBhIGNvbW1pdCBvciB0cmVlIHRoYXQgaXMgcG9pbnRlZCB0byBkaXJlY3RseSBieQorICAgICBhIHJlZi4gRS5nLiwgYGdpdCBhcmNoaXZlIC0tcmVtb3RlPW9yaWdpbiB2MS4wYC4KKworICAyLiBDbGllbnRzIG1heSByZXF1ZXN0IGEgc3ViLXRyZWUgd2l0aGluIGEgY29tbWl0IG9yIHRyZWUgdXNpbmcgdGhlCisgICAgIGByZWY6cGF0aGAgc3ludGF4LiBFLmcuLCBgZ2l0IGFyY2hpdmUgLS1yZW1vdGU9b3JpZ2luIHYxLjA6RG9jdW1lbnRhdGlvbmAuCisKKyAgMy4gQ2xpZW50cyBtYXkgX25vdF8gdXNlIG90aGVyIHNoYTEgZXhwcmVzc2lvbnMsIGV2ZW4gaWYgdGhlIGVuZAorICAgICByZXN1bHQgaXMgcmVhY2hhYmxlLiBFLmcuLCBuZWl0aGVyIGEgcmVsYXRpdmUgY29tbWl0IGxpa2UgYG1hc3Rlcl5gCisgICAgIG5vciBhIGxpdGVyYWwgc2hhMSBsaWtlIGBhYmNkMTIzNGAgaXMgYWxsb3dlZCwgZXZlbiBpZiB0aGUgcmVzdWx0CisgICAgIGlzIHJlYWNoYWJsZSBmcm9tIHRoZSByZWZzLgorCitOb3RlIHRoYXQgcnVsZSAzIGRpc2FsbG93cyBtYW55IGNhc2VzIHRoYXQgZG8gbm90IGhhdmUgYW55IHByaXZhY3kKK2ltcGxpY2F0aW9ucy4gVGhlc2UgcnVsZXMgYXJlIHN1YmplY3QgdG8gY2hhbmdlIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZgorZ2l0LCBhbmQgdGhlIHNlcnZlciBhY2Nlc3NlZCBieSBgZ2l0IGFyY2hpdmUgLS1yZW1vdGVgIG1heSBvciBtYXkgbm90Citmb2xsb3cgdGhlc2UgZXhhY3QgcnVsZXMuCisKK0lmIHRoZSBjb25maWcgb3B0aW9uIGB1cGxvYWRBcmNoaXZlLmFsbG93VW5yZWFjaGFibGVgIGlzIHRydWUsIHRoZXNlCitydWxlcyBhcmUgaWdub3JlZCwgYW5kIGNsaWVudHMgbWF5IHVzZSBhcmJpdHJhcnkgc2hhMSBleHByZXNzaW9ucy4KK1RoaXMgaXMgdXNlZnVsIGlmIHlvdSBkbyBub3QgY2FyZSBhYm91dCB0aGUgcHJpdmFjeSBvZiB1bnJlYWNoYWJsZQorb2JqZWN0cywgb3IgaWYgeW91ciBvYmplY3QgZGF0YWJhc2UgaXMgYWxyZWFkeSBwdWJsaWNseSBhdmFpbGFibGUgZm9yCithY2Nlc3MgdmlhIG5vbi1zbWFydC1odHRwLgorCitPUFRJT05TCistLS0tLS0tCis8ZGlyZWN0b3J5Pjo6CisJVGhlIHJlcG9zaXRvcnkgdG8gZ2V0IGEgdGFyIGFyY2hpdmUgZnJvbS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtcGFjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgyMmMxZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1wYWNrLnR4dApAQCAtMCwwICsxLDUzIEBACitnaXQtdXBsb2FkLXBhY2soMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtdXBsb2FkLXBhY2sgLSBTZW5kIG9iamVjdHMgcGFja2VkIGJhY2sgdG8gZ2l0LWZldGNoLXBhY2sKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQtdXBsb2FkLXBhY2snIFstLVtuby1dc3RyaWN0XSBbLS10aW1lb3V0PTxuPl0gWy0tc3RhdGVsZXNzLXJwY10KKwkJICBbLS1hZHZlcnRpc2UtcmVmc10gPGRpcmVjdG9yeT4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitJbnZva2VkIGJ5ICdnaXQgZmV0Y2gtcGFjaycsIGxlYXJucyB3aGF0CitvYmplY3RzIHRoZSBvdGhlciBzaWRlIGlzIG1pc3NpbmcsIGFuZCBzZW5kcyB0aGVtIGFmdGVyIHBhY2tpbmcuCisKK1RoaXMgY29tbWFuZCBpcyB1c3VhbGx5IG5vdCBpbnZva2VkIGRpcmVjdGx5IGJ5IHRoZSBlbmQgdXNlci4KK1RoZSBVSSBmb3IgdGhlIHByb3RvY29sIGlzIG9uIHRoZSAnZ2l0IGZldGNoLXBhY2snIHNpZGUsIGFuZCB0aGUKK3Byb2dyYW0gcGFpciBpcyBtZWFudCB0byBiZSB1c2VkIHRvIHB1bGwgdXBkYXRlcyBmcm9tIGEgcmVtb3RlCityZXBvc2l0b3J5LiAgRm9yIHB1c2ggb3BlcmF0aW9ucywgc2VlICdnaXQgc2VuZC1wYWNrJy4KKworT1BUSU9OUworLS0tLS0tLQorCistLVtuby1dc3RyaWN0OjoKKwlEbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkuCisKKy0tdGltZW91dD08bj46OgorCUludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5LgorCistLXN0YXRlbGVzcy1ycGM6OgorCVBlcmZvcm0gb25seSBhIHNpbmdsZSByZWFkLXdyaXRlIGN5Y2xlIHdpdGggc3RkaW4gYW5kIHN0ZG91dC4KKwlUaGlzIGZpdHMgd2l0aCB0aGUgSFRUUCBQT1NUIHJlcXVlc3QgcHJvY2Vzc2luZyBtb2RlbCB3aGVyZQorCWEgcHJvZ3JhbSBtYXkgcmVhZCB0aGUgcmVxdWVzdCwgd3JpdGUgYSByZXNwb25zZSwgYW5kIG11c3QgZXhpdC4KKworLS1hZHZlcnRpc2UtcmVmczo6CisJT25seSB0aGUgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCBpcyBvdXRwdXQsIGFuZCB0aGUgcHJvZ3JhbSBleGl0cworCWltbWVkaWF0ZWx5LiBUaGlzIGZpdHMgd2l0aCB0aGUgSFRUUCBHRVQgcmVxdWVzdCBtb2RlbCwgd2hlcmUKKwlubyByZXF1ZXN0IGNvbnRlbnQgaXMgcmVjZWl2ZWQgYnV0IGEgcmVzcG9uc2UgbXVzdCBiZSBwcm9kdWNlZC4KKworPGRpcmVjdG9yeT46OgorCVRoZSByZXBvc2l0b3J5IHRvIHN5bmMgZnJvbS4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdG5hbWVzcGFjZXNbN10KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC12YXIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdmFyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDcyZjkzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdmFyLnR4dApAQCAtMCwwICsxLDcwIEBACitnaXQtdmFyKDEpCis9PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC12YXIgLSBTaG93IGEgR2l0IGxvZ2ljYWwgdmFyaWFibGUKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdmFyJyAoIC1sIHwgPHZhcmlhYmxlPiApCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUHJpbnRzIGEgR2l0IGxvZ2ljYWwgdmFyaWFibGUuCisKK09QVElPTlMKKy0tLS0tLS0KKy1sOjoKKwlDYXVzZSB0aGUgbG9naWNhbCB2YXJpYWJsZXMgdG8gYmUgbGlzdGVkLiBJbiBhZGRpdGlvbiwgYWxsIHRoZQorCXZhcmlhYmxlcyBvZiB0aGUgR2l0IGNvbmZpZ3VyYXRpb24gZmlsZSAuZ2l0L2NvbmZpZyBhcmUgbGlzdGVkCisJYXMgd2VsbC4gKEhvd2V2ZXIsIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBsaXN0aW5nIGZ1bmN0aW9uYWxpdHkKKwlpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGBnaXQgY29uZmlnIC1sYC4pCisKK0VYQU1QTEVTCistLS0tLS0tLQorCSQgZ2l0IHZhciBHSVRfQVVUSE9SX0lERU5UCisJRXJpYyBXLiBCaWVkZXJtYW4gPGViaWVkZXJtQGxueGkuY29tPiAxMTIxMjIzMjc4IC0wNjAwCisKKworVkFSSUFCTEVTCistLS0tLS0tLS0KK0dJVF9BVVRIT1JfSURFTlQ6OgorICAgIFRoZSBhdXRob3Igb2YgYSBwaWVjZSBvZiBjb2RlLgorCitHSVRfQ09NTUlUVEVSX0lERU5UOjoKKyAgICBUaGUgcGVyc29uIHdobyBwdXQgYSBwaWVjZSBvZiBjb2RlIGludG8gR2l0LgorCitHSVRfRURJVE9SOjoKKyAgICBUZXh0IGVkaXRvciBmb3IgdXNlIGJ5IEdpdCBjb21tYW5kcy4gIFRoZSB2YWx1ZSBpcyBtZWFudCB0byBiZQorICAgIGludGVycHJldGVkIGJ5IHRoZSBzaGVsbCB3aGVuIGl0IGlzIHVzZWQuICBFeGFtcGxlczogYH4vYmluL3ZpYCwKKyAgICBgJFNPTUVfRU5WSVJPTk1FTlRfVkFSSUFCTEVgLCBgIkM6XFByb2dyYW0gRmlsZXNcVmltXGd2aW0uZXhlIgorICAgIC0tbm9mb3JrYC4gIFRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIGlzIHRoZSBgJEdJVF9FRElUT1JgCisgICAgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZW4gYGNvcmUuZWRpdG9yYCBjb25maWd1cmF0aW9uLCB0aGVuCisgICAgYCRWSVNVQUxgLCB0aGVuIGAkRURJVE9SYCwgYW5kIHRoZW4gdGhlIGRlZmF1bHQgY2hvc2VuIGF0IGNvbXBpbGUKKyAgICB0aW1lLCB3aGljaCBpcyB1c3VhbGx5ICd2aScuCitpZmRlZjo6Z2l0LWRlZmF1bHQtZWRpdG9yW10KKyAgICBUaGUgYnVpbGQgeW91IGFyZSB1c2luZyBjaG9zZSAne2dpdC1kZWZhdWx0LWVkaXRvcn0nIGFzIHRoZSBkZWZhdWx0LgorZW5kaWY6OmdpdC1kZWZhdWx0LWVkaXRvcltdCisKK0dJVF9QQUdFUjo6CisgICAgVGV4dCB2aWV3ZXIgZm9yIHVzZSBieSBHaXQgY29tbWFuZHMgKGUuZy4sICdsZXNzJykuICBUaGUgdmFsdWUKKyAgICBpcyBtZWFudCB0byBiZSBpbnRlcnByZXRlZCBieSB0aGUgc2hlbGwuICBUaGUgb3JkZXIgb2YgcHJlZmVyZW5jZQorICAgIGlzIHRoZSBgJEdJVF9QQUdFUmAgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZW4gYGNvcmUucGFnZXJgCisgICAgY29uZmlndXJhdGlvbiwgdGhlbiBgJFBBR0VSYCwgYW5kIHRoZW4gdGhlIGRlZmF1bHQgY2hvc2VuIGF0CisgICAgY29tcGlsZSB0aW1lICh1c3VhbGx5ICdsZXNzJykuCitpZmRlZjo6Z2l0LWRlZmF1bHQtcGFnZXJbXQorICAgIFRoZSBidWlsZCB5b3UgYXJlIHVzaW5nIGNob3NlICd7Z2l0LWRlZmF1bHQtcGFnZXJ9JyBhcyB0aGUgZGVmYXVsdC4KK2VuZGlmOjpnaXQtZGVmYXVsdC1wYWdlcltdCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtY29tbWl0LXRyZWVbMV0KK2xpbmtnaXQ6Z2l0LXRhZ1sxXQorbGlua2dpdDpnaXQtY29uZmlnWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LWNvbW1pdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktY29tbWl0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjA5N2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LWNvbW1pdC50eHQKQEAgLTAsMCArMSwzMiBAQAorZ2l0LXZlcmlmeS1jb21taXQoMSkKKz09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC12ZXJpZnktY29tbWl0IC0gQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgY29tbWl0cworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdmVyaWZ5LWNvbW1pdCcgPGNvbW1pdD4uLi4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitWYWxpZGF0ZXMgdGhlIEdQRyBzaWduYXR1cmUgY3JlYXRlZCBieSAnZ2l0IGNvbW1pdCAtUycuCisKK09QVElPTlMKKy0tLS0tLS0KKy0tcmF3OjoKKwlQcmludCB0aGUgcmF3IGdwZyBzdGF0dXMgb3V0cHV0IHRvIHN0YW5kYXJkIGVycm9yIGluc3RlYWQgb2YgdGhlIG5vcm1hbAorCWh1bWFuLXJlYWRhYmxlIG91dHB1dC4KKworLXY6OgorLS12ZXJib3NlOjoKKwlQcmludCB0aGUgY29udGVudHMgb2YgdGhlIGNvbW1pdCBvYmplY3QgYmVmb3JlIHZhbGlkYXRpbmcgaXQuCisKKzxjb21taXQ+Li4uOjoKKwlTSEEtMSBpZGVudGlmaWVycyBvZiBHaXQgY29tbWl0IG9iamVjdHMuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXBhY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxY2E2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktcGFjay50eHQKQEAgLTAsMCArMSw1MyBAQAorZ2l0LXZlcmlmeS1wYWNrKDEpCis9PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXZlcmlmeS1wYWNrIC0gVmFsaWRhdGUgcGFja2VkIEdpdCBhcmNoaXZlIGZpbGVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHZlcmlmeS1wYWNrJyBbLXZ8LS12ZXJib3NlXSBbLXN8LS1zdGF0LW9ubHldIFstLV0gPHBhY2s+LmlkeCAuLi4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlYWRzIGdpdmVuIGlkeCBmaWxlIGZvciBwYWNrZWQgR2l0IGFyY2hpdmUgY3JlYXRlZCB3aXRoIHRoZQorJ2dpdCBwYWNrLW9iamVjdHMnIGNvbW1hbmQgYW5kIHZlcmlmaWVzIGlkeCBmaWxlIGFuZCB0aGUKK2NvcnJlc3BvbmRpbmcgcGFjayBmaWxlLgorCitPUFRJT05TCistLS0tLS0tCis8cGFjaz4uaWR4IC4uLjo6CisJVGhlIGlkeCBmaWxlcyB0byB2ZXJpZnkuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJQWZ0ZXIgdmVyaWZ5aW5nIHRoZSBwYWNrLCBzaG93IGxpc3Qgb2Ygb2JqZWN0cyBjb250YWluZWQKKwlpbiB0aGUgcGFjayBhbmQgYSBoaXN0b2dyYW0gb2YgZGVsdGEgY2hhaW4gbGVuZ3RoLgorCistczo6CistLXN0YXQtb25seTo6CisJRG8gbm90IHZlcmlmeSB0aGUgcGFjayBjb250ZW50czsgb25seSBzaG93IHRoZSBoaXN0b2dyYW0gb2YgZGVsdGEKKwljaGFpbiBsZW5ndGguICBXaXRoIGAtLXZlcmJvc2VgLCBsaXN0IG9mIG9iamVjdHMgaXMgYWxzbyBzaG93bi4KKworXC0tOjoKKwlEbyBub3QgaW50ZXJwcmV0IGFueSBtb3JlIGFyZ3VtZW50cyBhcyBvcHRpb25zLgorCitPVVRQVVQgRk9STUFUCistLS0tLS0tLS0tLS0tCitXaGVuIHNwZWNpZnlpbmcgdGhlIC12IG9wdGlvbiB0aGUgZm9ybWF0IHVzZWQgaXM6CisKKwlTSEEtMSB0eXBlIHNpemUgc2l6ZS1pbi1wYWNrZmlsZSBvZmZzZXQtaW4tcGFja2ZpbGUKKworZm9yIG9iamVjdHMgdGhhdCBhcmUgbm90IGRlbHRpZmllZCBpbiB0aGUgcGFjaywgYW5kCisKKwlTSEEtMSB0eXBlIHNpemUgc2l6ZS1pbi1wYWNrZmlsZSBvZmZzZXQtaW4tcGFja2ZpbGUgZGVwdGggYmFzZS1TSEEtMQorCitmb3Igb2JqZWN0cyB0aGF0IGFyZSBkZWx0aWZpZWQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXRhZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktdGFnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjgwNzVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXRhZy50eHQKQEAgLTAsMCArMSwzMiBAQAorZ2l0LXZlcmlmeS10YWcoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC12ZXJpZnktdGFnIC0gQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgdGFncworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdmVyaWZ5LXRhZycgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1ZhbGlkYXRlcyB0aGUgZ3BnIHNpZ25hdHVyZSBjcmVhdGVkIGJ5ICdnaXQgdGFnJy4KKworT1BUSU9OUworLS0tLS0tLQorLS1yYXc6OgorCVByaW50IHRoZSByYXcgZ3BnIHN0YXR1cyBvdXRwdXQgdG8gc3RhbmRhcmQgZXJyb3IgaW5zdGVhZCBvZiB0aGUgbm9ybWFsCisJaHVtYW4tcmVhZGFibGUgb3V0cHV0LgorCistdjo6CistLXZlcmJvc2U6OgorCVByaW50IHRoZSBjb250ZW50cyBvZiB0aGUgdGFnIG9iamVjdCBiZWZvcmUgdmFsaWRhdGluZyBpdC4KKworPHRhZz4uLi46OgorCVNIQS0xIGlkZW50aWZpZXJzIG9mIEdpdCB0YWcgb2JqZWN0cy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC13ZWItLWJyb3dzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC13ZWItLWJyb3dzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxNjJiNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXdlYi0tYnJvd3NlLnR4dApAQCAtMCwwICsxLDEyNCBAQAorZ2l0LXdlYntsaXRkZH1icm93c2UoMSkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC13ZWItLWJyb3dzZSAtIEdpdCBoZWxwZXIgc2NyaXB0IHRvIGxhdW5jaCBhIHdlYiBicm93c2VyCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB3ZWJ7bGl0ZGR9YnJvd3NlJyBbPG9wdGlvbnM+XSA8dXJsfGZpbGU+Li4uCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIHNjcmlwdCB0cmllcywgYXMgbXVjaCBhcyBwb3NzaWJsZSwgdG8gZGlzcGxheSB0aGUgVVJMcyBhbmQgRklMRXMKK3RoYXQgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMsIGFzIEhUTUwgcGFnZXMgaW4gbmV3IHRhYnMgb24gYW4gYWxyZWFkeQorb3BlbmVkIHdlYiBicm93c2VyLgorCitUaGUgZm9sbG93aW5nIGJyb3dzZXJzIChvciBjb21tYW5kcykgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6CisKKyogZmlyZWZveCAodGhpcyBpcyB0aGUgZGVmYXVsdCB1bmRlciBYIFdpbmRvdyB3aGVuIG5vdCB1c2luZyBLREUpCisqIGljZXdlYXNlbAorKiBzZWFtb25rZXkKKyogaWNlYXBlCisqIGNocm9taXVtIChhbHNvIHN1cHBvcnRlZCBhcyBjaHJvbWl1bS1icm93c2VyKQorKiBnb29nbGUtY2hyb21lIChhbHNvIHN1cHBvcnRlZCBhcyBjaHJvbWUpCisqIGtvbnF1ZXJvciAodGhpcyBpcyB0aGUgZGVmYXVsdCB1bmRlciBLREUsIHNlZSAnTm90ZSBhYm91dCBrb25xdWVyb3InIGJlbG93KQorKiBvcGVyYQorKiB3M20gKHRoaXMgaXMgdGhlIGRlZmF1bHQgb3V0c2lkZSBncmFwaGljYWwgZW52aXJvbm1lbnRzKQorKiBlbGlua3MKKyogbGlua3MKKyogbHlueAorKiBkaWxsbworKiBvcGVuICh0aGlzIGlzIHRoZSBkZWZhdWx0IHVuZGVyIE1hYyBPUyBYIEdVSSkKKyogc3RhcnQgKHRoaXMgaXMgdGhlIGRlZmF1bHQgdW5kZXIgTWluR1cpCisqIGN5Z3N0YXJ0ICh0aGlzIGlzIHRoZSBkZWZhdWx0IHVuZGVyIEN5Z3dpbikKKyogeGRnLW9wZW4KKworQ3VzdG9tIGNvbW1hbmRzIG1heSBhbHNvIGJlIHNwZWNpZmllZC4KKworT1BUSU9OUworLS0tLS0tLQorLWIgPGJyb3dzZXI+OjoKKy0tYnJvd3Nlcj08YnJvd3Nlcj46OgorCVVzZSB0aGUgc3BlY2lmaWVkIGJyb3dzZXIuIEl0IG11c3QgYmUgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkCisJYnJvd3NlcnMuCisKKy10IDxicm93c2VyPjo6CistLXRvb2w9PGJyb3dzZXI+OjoKKwlTYW1lIGFzIGFib3ZlLgorCistYyA8Y29uZi52YXI+OjoKKy0tY29uZmlnPTxjb25mLnZhcj46OgorCUNPTkYuVkFSIGlzIGxvb2tlZCB1cCBpbiB0aGUgR2l0IGNvbmZpZyBmaWxlcy4gSWYgaXQncyBzZXQsCisJdGhlbiBpdHMgdmFsdWUgc3BlY2lmaWVzIHRoZSBicm93c2VyIHRoYXQgc2hvdWxkIGJlIHVzZWQuCisKK0NPTkZJR1VSQVRJT04gVkFSSUFCTEVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDT05GLlZBUiAoZnJvbSAtYyBvcHRpb24pIGFuZCB3ZWIuYnJvd3Nlcgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIHdlYiBicm93c2VyIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgYSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHBhc3NlZAord2l0aCB0aGUgLWMgKG9yIC0tY29uZmlnKSBjb21tYW5kLWxpbmUgb3B0aW9uLCBvciB0aGUgYHdlYi5icm93c2VyYAorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpZiB0aGUgZm9ybWVyIGlzIG5vdCB1c2VkLgorCiticm93c2VyLjx0b29sPi5wYXRoCit+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1lvdSBjYW4gZXhwbGljaXRseSBwcm92aWRlIGEgZnVsbCBwYXRoIHRvIHlvdXIgcHJlZmVycmVkIGJyb3dzZXIgYnkKK3NldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGJyb3dzZXIuPHRvb2w+LnBhdGhgLiBGb3IgZXhhbXBsZSwKK3lvdSBjYW4gY29uZmlndXJlIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGZpcmVmb3ggYnkgc2V0dGluZworJ2Jyb3dzZXIuZmlyZWZveC5wYXRoJy4gT3RoZXJ3aXNlLCAnZ2l0IHdlYntsaXRkZH1icm93c2UnIGFzc3VtZXMgdGhlIHRvb2wKK2lzIGF2YWlsYWJsZSBpbiBQQVRILgorCiticm93c2VyLjx0b29sPi5jbWQKK35+fn5+fn5+fn5+fn5+fn5+fgorCitXaGVuIHRoZSBicm93c2VyLCBzcGVjaWZpZWQgYnkgb3B0aW9ucyBvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcywgaXMKK25vdCBhbW9uZyB0aGUgc3VwcG9ydGVkIG9uZXMsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcKK2Bicm93c2VyLjx0b29sPi5jbWRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2lsbCBiZSBsb29rZWQgdXAuIElmIHRoaXMKK3ZhcmlhYmxlIGV4aXN0cyB0aGVuICdnaXQgd2Vie2xpdGRkfWJyb3dzZScgd2lsbCB0cmVhdCB0aGUgc3BlY2lmaWVkIHRvb2wKK2FzIGEgY3VzdG9tIGNvbW1hbmQgYW5kIHdpbGwgdXNlIGEgc2hlbGwgZXZhbCB0byBydW4gdGhlIGNvbW1hbmQgd2l0aAordGhlIFVSTHMgcGFzc2VkIGFzIGFyZ3VtZW50cy4KKworTk9URSBBQk9VVCBLT05RVUVST1IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gJ2tvbnF1ZXJvcicgaXMgc3BlY2lmaWVkIGJ5IGEgY29tbWFuZC1saW5lIG9wdGlvbiBvciBhCitjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB3ZSBsYXVuY2ggJ2tmbWNsaWVudCcgdG8gdHJ5IHRvIG9wZW4gdGhlIEhUTUwKK21hbiBwYWdlIG9uIGFuIGFscmVhZHkgb3BlbmVkIGtvbnF1ZXJvciBpbiBhIG5ldyB0YWIgaWYgcG9zc2libGUuCisKK0ZvciBjb25zaXN0ZW5jeSwgd2UgYWxzbyB0cnkgc3VjaCBhIHRyaWNrIGlmICdicm93c2VyLmtvbnF1ZXJvci5wYXRoJyBpcworc2V0IHRvIHNvbWV0aGluZyBsaWtlIGBBX1BBVEhfVE8va29ucXVlcm9yYC4gVGhhdCBtZWFucyB3ZSB3aWxsIHRyeSB0bworbGF1bmNoIGBBX1BBVEhfVE8va2ZtY2xpZW50YCBpbnN0ZWFkLgorCitJZiB5b3UgcmVhbGx5IHdhbnQgdG8gdXNlICdrb25xdWVyb3InLCB0aGVuIHlvdSBjYW4gdXNlIHNvbWV0aGluZyBsaWtlCit0aGUgZm9sbG93aW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlbd2ViXQorCQlicm93c2VyID0ga29ucQorCisJW2Jyb3dzZXIgImtvbnEiXQorCQljbWQgPSBBX1BBVEhfVE8va29ucXVlcm9yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSBhYm91dCBnaXQtY29uZmlnIC0tZ2xvYmFsCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworTm90ZSB0aGF0IHRoZXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHNob3VsZCBwcm9iYWJseSBiZSBzZXQgdXNpbmcKK3RoZSBgLS1nbG9iYWxgIGZsYWcsIGZvciBleGFtcGxlIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgLS1nbG9iYWwgd2ViLmJyb3dzZXIgZmlyZWZveAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FzIHRoZXkgYXJlIHByb2JhYmx5IG1vcmUgdXNlciBzcGVjaWZpYyB0aGFuIHJlcG9zaXRvcnkgc3BlY2lmaWMuCitTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtd2hhdGNoYW5nZWQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtd2hhdGNoYW5nZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNjNjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC13aGF0Y2hhbmdlZC50eHQKQEAgLTAsMCArMSw0MyBAQAorZ2l0LXdoYXRjaGFuZ2VkKDEpCis9PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXdoYXRjaGFuZ2VkIC0gU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHdoYXRjaGFuZ2VkJyA8b3B0aW9uPi4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworU2hvd3MgY29tbWl0IGxvZ3MgYW5kIGRpZmYgb3V0cHV0IGVhY2ggY29tbWl0IGludHJvZHVjZXMuCisKK05ldyB1c2VycyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgbGlua2dpdDpnaXQtbG9nWzFdIGluc3RlYWQuICBUaGUKK2B3aGF0Y2hhbmdlZGAgY29tbWFuZCBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBsaW5rZ2l0OmdpdC1sb2dbMV0KK2J1dCBkZWZhdWx0cyB0byBzaG93IHRoZSByYXcgZm9ybWF0IGRpZmYgb3V0cHV0IGFuZCB0byBza2lwIG1lcmdlcy4KKworVGhlIGNvbW1hbmQgaXMga2VwdCBwcmltYXJpbHkgZm9yIGhpc3RvcmljYWwgcmVhc29uczsgZmluZ2VycyBvZgorbWFueSBwZW9wbGUgd2hvIGxlYXJuZWQgR2l0IGxvbmcgYmVmb3JlIGBnaXQgbG9nYCB3YXMgaW52ZW50ZWQgYnkKK3JlYWRpbmcgTGludXgga2VybmVsIG1haWxpbmcgbGlzdCBhcmUgdHJhaW5lZCB0byB0eXBlIGl0LgorCisKK0V4YW1wbGVzCistLS0tLS0tLQorYGdpdCB3aGF0Y2hhbmdlZCAtcCB2Mi42LjEyLi4gaW5jbHVkZS9zY3NpIGRyaXZlcnMvc2NzaWA6OgorCisJU2hvdyBhcyBwYXRjaGVzIHRoZSBjb21taXRzIHNpbmNlIHZlcnNpb24gJ3YyLjYuMTInIHRoYXQgY2hhbmdlZAorCWFueSBmaWxlIGluIHRoZSBpbmNsdWRlL3Njc2kgb3IgZHJpdmVycy9zY3NpIHN1YmRpcmVjdG9yaWVzCisKK2BnaXQgd2hhdGNoYW5nZWQgLS1zaW5jZT0iMiB3ZWVrcyBhZ28iIC0tIGdpdGtgOjoKKworCVNob3cgdGhlIGNoYW5nZXMgZHVyaW5nIHRoZSBsYXN0IHR3byB3ZWVrcyB0byB0aGUgZmlsZSAnZ2l0aycuCisJVGhlICItLSIgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIHRoZSAqYnJhbmNoKiBuYW1lZAorCSdnaXRrJworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXdvcmt0cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXdvcmt0cmVlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWQ5MmM5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtd29ya3RyZWUudHh0CkBAIC0wLDAgKzEsMzgyIEBACitnaXQtd29ya3RyZWUoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtd29ya3RyZWUgLSBNYW5hZ2UgbXVsdGlwbGUgd29ya2luZyB0cmVlcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB3b3JrdHJlZSBhZGQnIFstZl0gWy0tZGV0YWNoXSBbLS1jaGVja291dF0gWy0tbG9ja10gWy1iIDxuZXctYnJhbmNoPl0gPHBhdGg+IFs8Y29tbWl0LWlzaD5dCisnZ2l0IHdvcmt0cmVlIGxpc3QnIFstLXBvcmNlbGFpbl0KKydnaXQgd29ya3RyZWUgbG9jaycgWy0tcmVhc29uIDxzdHJpbmc+XSA8d29ya3RyZWU+CisnZ2l0IHdvcmt0cmVlIG1vdmUnIDx3b3JrdHJlZT4gPG5ldy1wYXRoPgorJ2dpdCB3b3JrdHJlZSBwcnVuZScgWy1uXSBbLXZdIFstLWV4cGlyZSA8ZXhwaXJlPl0KKydnaXQgd29ya3RyZWUgcmVtb3ZlJyBbLWZdIDx3b3JrdHJlZT4KKydnaXQgd29ya3RyZWUgdW5sb2NrJyA8d29ya3RyZWU+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitNYW5hZ2UgbXVsdGlwbGUgd29ya2luZyB0cmVlcyBhdHRhY2hlZCB0byB0aGUgc2FtZSByZXBvc2l0b3J5LgorCitBIGdpdCByZXBvc2l0b3J5IGNhbiBzdXBwb3J0IG11bHRpcGxlIHdvcmtpbmcgdHJlZXMsIGFsbG93aW5nIHlvdSB0byBjaGVjaworb3V0IG1vcmUgdGhhbiBvbmUgYnJhbmNoIGF0IGEgdGltZS4gIFdpdGggYGdpdCB3b3JrdHJlZSBhZGRgIGEgbmV3IHdvcmtpbmcKK3RyZWUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXBvc2l0b3J5LiAgVGhpcyBuZXcgd29ya2luZyB0cmVlIGlzIGNhbGxlZCBhCisibGlua2VkIHdvcmtpbmcgdHJlZSIgYXMgb3Bwb3NlZCB0byB0aGUgIm1haW4gd29ya2luZyB0cmVlIiBwcmVwYXJlZCBieSAiZ2l0Citpbml0IiBvciAiZ2l0IGNsb25lIi4gIEEgcmVwb3NpdG9yeSBoYXMgb25lIG1haW4gd29ya2luZyB0cmVlIChpZiBpdCdzIG5vdCBhCitiYXJlIHJlcG9zaXRvcnkpIGFuZCB6ZXJvIG9yIG1vcmUgbGlua2VkIHdvcmtpbmcgdHJlZXMuIFdoZW4geW91IGFyZSBkb25lCit3aXRoIGEgbGlua2VkIHdvcmtpbmcgdHJlZSwgcmVtb3ZlIGl0IHdpdGggYGdpdCB3b3JrdHJlZSByZW1vdmVgLgorCitJZiBhIHdvcmtpbmcgdHJlZSBpcyBkZWxldGVkIHdpdGhvdXQgdXNpbmcgYGdpdCB3b3JrdHJlZSByZW1vdmVgLCB0aGVuCitpdHMgYXNzb2NpYXRlZCBhZG1pbmlzdHJhdGl2ZSBmaWxlcywgd2hpY2ggcmVzaWRlIGluIHRoZSByZXBvc2l0b3J5Cisoc2VlICJERVRBSUxTIiBiZWxvdyksIHdpbGwgZXZlbnR1YWxseSBiZSByZW1vdmVkIGF1dG9tYXRpY2FsbHkgKHNlZQorYGdjLndvcmt0cmVlUHJ1bmVFeHBpcmVgIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSksIG9yIHlvdSBjYW4gcnVuCitgZ2l0IHdvcmt0cmVlIHBydW5lYCBpbiB0aGUgbWFpbiBvciBhbnkgbGlua2VkIHdvcmtpbmcgdHJlZSB0bworY2xlYW4gdXAgYW55IHN0YWxlIGFkbWluaXN0cmF0aXZlIGZpbGVzLgorCitJZiBhIGxpbmtlZCB3b3JraW5nIHRyZWUgaXMgc3RvcmVkIG9uIGEgcG9ydGFibGUgZGV2aWNlIG9yIG5ldHdvcmsgc2hhcmUKK3doaWNoIGlzIG5vdCBhbHdheXMgbW91bnRlZCwgeW91IGNhbiBwcmV2ZW50IGl0cyBhZG1pbmlzdHJhdGl2ZSBmaWxlcyBmcm9tCitiZWluZyBwcnVuZWQgYnkgaXNzdWluZyB0aGUgYGdpdCB3b3JrdHJlZSBsb2NrYCBjb21tYW5kLCBvcHRpb25hbGx5CitzcGVjaWZ5aW5nIGAtLXJlYXNvbmAgdG8gZXhwbGFpbiB3aHkgdGhlIHdvcmtpbmcgdHJlZSBpcyBsb2NrZWQuCisKK0NPTU1BTkRTCistLS0tLS0tLQorYWRkIDxwYXRoPiBbPGNvbW1pdC1pc2g+XTo6CisKK0NyZWF0ZSBgPHBhdGg+YCBhbmQgY2hlY2tvdXQgYDxjb21taXQtaXNoPmAgaW50byBpdC4gVGhlIG5ldyB3b3JraW5nIGRpcmVjdG9yeQoraXMgbGlua2VkIHRvIHRoZSBjdXJyZW50IHJlcG9zaXRvcnksIHNoYXJpbmcgZXZlcnl0aGluZyBleGNlcHQgd29ya2luZworZGlyZWN0b3J5IHNwZWNpZmljIGZpbGVzIHN1Y2ggYXMgSEVBRCwgaW5kZXgsIGV0Yy4gYC1gIG1heSBhbHNvIGJlCitzcGVjaWZpZWQgYXMgYDxjb21taXQtaXNoPmA7IGl0IGlzIHN5bm9ueW1vdXMgd2l0aCBgQHstMX1gLgorKworSWYgPGNvbW1pdC1pc2g+IGlzIGEgYnJhbmNoIG5hbWUgKGNhbGwgaXQgYDxicmFuY2g+YCkgYW5kIGlzIG5vdCBmb3VuZCwKK2FuZCBuZWl0aGVyIGAtYmAgbm9yIGAtQmAgbm9yIGAtLWRldGFjaGAgYXJlIHVzZWQsIGJ1dCB0aGVyZSBkb2VzCitleGlzdCBhIHRyYWNraW5nIGJyYW5jaCBpbiBleGFjdGx5IG9uZSByZW1vdGUgKGNhbGwgaXQgYDxyZW1vdGU+YCkKK3dpdGggYSBtYXRjaGluZyBuYW1lLCB0cmVhdCBhcyBlcXVpdmFsZW50IHRvOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCB3b3JrdHJlZSBhZGQgLS10cmFjayAtYiA8YnJhbmNoPiA8cGF0aD4gPHJlbW90ZT4vPGJyYW5jaD4KKy0tLS0tLS0tLS0tLQorKworSWYgdGhlIGJyYW5jaCBleGlzdHMgaW4gbXVsdGlwbGUgcmVtb3RlcyBhbmQgb25lIG9mIHRoZW0gaXMgbmFtZWQgYnkKK3RoZSBgY2hlY2tvdXQuZGVmYXVsdFJlbW90ZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgd2UnbGwgdXNlIHRoYXQKK29uZSBmb3IgdGhlIHB1cnBvc2VzIG9mIGRpc2FtYmlndWF0aW9uLCBldmVuIGlmIHRoZSBgPGJyYW5jaD5gIGlzbid0Cit1bmlxdWUgYWNyb3NzIGFsbCByZW1vdGVzLiBTZXQgaXQgdG8KK2UuZy4gYGNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luYCB0byBhbHdheXMgY2hlY2tvdXQgcmVtb3RlCiticmFuY2hlcyBmcm9tIHRoZXJlIGlmIGA8YnJhbmNoPmAgaXMgYW1iaWd1b3VzIGJ1dCBleGlzdHMgb24gdGhlCisnb3JpZ2luJyByZW1vdGUuIFNlZSBhbHNvIGBjaGVja291dC5kZWZhdWx0UmVtb3RlYCBpbgorbGlua2dpdDpnaXQtY29uZmlnWzFdLgorKworSWYgYDxjb21taXQtaXNoPmAgaXMgb21pdHRlZCBhbmQgbmVpdGhlciBgLWJgIG5vciBgLUJgIG5vciBgLS1kZXRhY2hgIHVzZWQsCit0aGVuLCBhcyBhIGNvbnZlbmllbmNlLCB0aGUgbmV3IHdvcmt0cmVlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGJyYW5jaAorKGNhbGwgaXQgYDxicmFuY2g+YCkgbmFtZWQgYWZ0ZXIgYCQoYmFzZW5hbWUgPHBhdGg+KWAuICBJZiBgPGJyYW5jaD5gCitkb2Vzbid0IGV4aXN0LCBhIG5ldyBicmFuY2ggYmFzZWQgb24gSEVBRCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYXMKK2lmIGAtYiA8YnJhbmNoPmAgd2FzIGdpdmVuLiAgSWYgYDxicmFuY2g+YCBkb2VzIGV4aXN0LCBpdCB3aWxsIGJlCitjaGVja2VkIG91dCBpbiB0aGUgbmV3IHdvcmt0cmVlLCBpZiBpdCdzIG5vdCBjaGVja2VkIG91dCBhbnl3aGVyZQorZWxzZSwgb3RoZXJ3aXNlIHRoZSBjb21tYW5kIHdpbGwgcmVmdXNlIHRvIGNyZWF0ZSB0aGUgd29ya3RyZWUgKHVubGVzcworYC0tZm9yY2VgIGlzIHVzZWQpLgorCitsaXN0OjoKKworTGlzdCBkZXRhaWxzIG9mIGVhY2ggd29ya3RyZWUuICBUaGUgbWFpbiB3b3JrdHJlZSBpcyBsaXN0ZWQgZmlyc3QsIGZvbGxvd2VkIGJ5CitlYWNoIG9mIHRoZSBsaW5rZWQgd29ya3RyZWVzLiAgVGhlIG91dHB1dCBkZXRhaWxzIGluY2x1ZGUgaWYgdGhlIHdvcmt0cmVlIGlzCitiYXJlLCB0aGUgcmV2aXNpb24gY3VycmVudGx5IGNoZWNrZWQgb3V0LCBhbmQgdGhlIGJyYW5jaCBjdXJyZW50bHkgY2hlY2tlZCBvdXQKKyhvciAnZGV0YWNoZWQgSEVBRCcgaWYgbm9uZSkuCisKK2xvY2s6OgorCitJZiBhIHdvcmtpbmcgdHJlZSBpcyBvbiBhIHBvcnRhYmxlIGRldmljZSBvciBuZXR3b3JrIHNoYXJlIHdoaWNoCitpcyBub3QgYWx3YXlzIG1vdW50ZWQsIGxvY2sgaXQgdG8gcHJldmVudCBpdHMgYWRtaW5pc3RyYXRpdmUKK2ZpbGVzIGZyb20gYmVpbmcgcHJ1bmVkIGF1dG9tYXRpY2FsbHkuIFRoaXMgYWxzbyBwcmV2ZW50cyBpdCBmcm9tCitiZWluZyBtb3ZlZCBvciBkZWxldGVkLiBPcHRpb25hbGx5LCBzcGVjaWZ5IGEgcmVhc29uIGZvciB0aGUgbG9jaword2l0aCBgLS1yZWFzb25gLgorCittb3ZlOjoKKworTW92ZSBhIHdvcmtpbmcgdHJlZSB0byBhIG5ldyBsb2NhdGlvbi4gTm90ZSB0aGF0IHRoZSBtYWluIHdvcmtpbmcgdHJlZQorb3IgbGlua2VkIHdvcmtpbmcgdHJlZXMgY29udGFpbmluZyBzdWJtb2R1bGVzIGNhbm5vdCBiZSBtb3ZlZC4KKworcHJ1bmU6OgorCitQcnVuZSB3b3JraW5nIHRyZWUgaW5mb3JtYXRpb24gaW4gJEdJVF9ESVIvd29ya3RyZWVzLgorCityZW1vdmU6OgorCitSZW1vdmUgYSB3b3JraW5nIHRyZWUuIE9ubHkgY2xlYW4gd29ya2luZyB0cmVlcyAobm8gdW50cmFja2VkIGZpbGVzCithbmQgbm8gbW9kaWZpY2F0aW9uIGluIHRyYWNrZWQgZmlsZXMpIGNhbiBiZSByZW1vdmVkLiBVbmNsZWFuIHdvcmtpbmcKK3RyZWVzIG9yIG9uZXMgd2l0aCBzdWJtb2R1bGVzIGNhbiBiZSByZW1vdmVkIHdpdGggYC0tZm9yY2VgLiBUaGUgbWFpbgord29ya2luZyB0cmVlIGNhbm5vdCBiZSByZW1vdmVkLgorCit1bmxvY2s6OgorCitVbmxvY2sgYSB3b3JraW5nIHRyZWUsIGFsbG93aW5nIGl0IHRvIGJlIHBydW5lZCwgbW92ZWQgb3IgZGVsZXRlZC4KKworT1BUSU9OUworLS0tLS0tLQorCistZjo6CistLWZvcmNlOjoKKwlCeSBkZWZhdWx0LCBgYWRkYCByZWZ1c2VzIHRvIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHRyZWUgd2hlbgorCWA8Y29tbWl0LWlzaD5gIGlzIGEgYnJhbmNoIG5hbWUgYW5kIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgYnkKKwlhbm90aGVyIHdvcmtpbmcgdHJlZSwgb3IgaWYgYDxwYXRoPmAgaXMgYWxyZWFkeSBhc3NpZ25lZCB0byBzb21lCisJd29ya2luZyB0cmVlIGJ1dCBpcyBtaXNzaW5nIChmb3IgaW5zdGFuY2UsIGlmIGA8cGF0aD5gIHdhcyBkZWxldGVkCisJbWFudWFsbHkpLiBUaGlzIG9wdGlvbiBvdmVycmlkZXMgdGhlc2Ugc2FmZWd1YXJkcy4gVG8gYWRkIGEgbWlzc2luZyBidXQKKwlsb2NrZWQgd29ya2luZyB0cmVlIHBhdGgsIHNwZWNpZnkgYC0tZm9yY2VgIHR3aWNlLgorKworYG1vdmVgIHJlZnVzZXMgdG8gbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUgdW5sZXNzIGAtLWZvcmNlYCBpcyBzcGVjaWZpZWQKK3R3aWNlLgorKworYHJlbW92ZWAgcmVmdXNlcyB0byByZW1vdmUgYW4gdW5jbGVhbiB3b3JraW5nIHRyZWUgdW5sZXNzIGAtLWZvcmNlYCBpcyB1c2VkLgorVG8gcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgc3BlY2lmeSBgLS1mb3JjZWAgdHdpY2UuCisKKy1iIDxuZXctYnJhbmNoPjo6CistQiA8bmV3LWJyYW5jaD46OgorCVdpdGggYGFkZGAsIGNyZWF0ZSBhIG5ldyBicmFuY2ggbmFtZWQgYDxuZXctYnJhbmNoPmAgc3RhcnRpbmcgYXQKKwlgPGNvbW1pdC1pc2g+YCwgYW5kIGNoZWNrIG91dCBgPG5ldy1icmFuY2g+YCBpbnRvIHRoZSBuZXcgd29ya2luZyB0cmVlLgorCUlmIGA8Y29tbWl0LWlzaD5gIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIEhFQUQuCisJQnkgZGVmYXVsdCwgYC1iYCByZWZ1c2VzIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggaWYgaXQgYWxyZWFkeQorCWV4aXN0cy4gYC1CYCBvdmVycmlkZXMgdGhpcyBzYWZlZ3VhcmQsIHJlc2V0dGluZyBgPG5ldy1icmFuY2g+YCB0bworCWA8Y29tbWl0LWlzaD5gLgorCistLWRldGFjaDo6CisJV2l0aCBgYWRkYCwgZGV0YWNoIEhFQUQgaW4gdGhlIG5ldyB3b3JraW5nIHRyZWUuIFNlZSAiREVUQUNIRUQgSEVBRCIKKwlpbiBsaW5rZ2l0OmdpdC1jaGVja291dFsxXS4KKworLS1bbm8tXWNoZWNrb3V0OjoKKwlCeSBkZWZhdWx0LCBgYWRkYCBjaGVja3Mgb3V0IGA8Y29tbWl0LWlzaD5gLCBob3dldmVyLCBgLS1uby1jaGVja291dGAgY2FuCisJYmUgdXNlZCB0byBzdXBwcmVzcyBjaGVja291dCBpbiBvcmRlciB0byBtYWtlIGN1c3RvbWl6YXRpb25zLAorCXN1Y2ggYXMgY29uZmlndXJpbmcgc3BhcnNlLWNoZWNrb3V0LiBTZWUgIlNwYXJzZSBjaGVja291dCIKKwlpbiBsaW5rZ2l0OmdpdC1yZWFkLXRyZWVbMV0uCisKKy0tW25vLV1ndWVzcy1yZW1vdGU6OgorCVdpdGggYHdvcmt0cmVlIGFkZCA8cGF0aD5gLCB3aXRob3V0IGA8Y29tbWl0LWlzaD5gLCBpbnN0ZWFkCisJb2YgY3JlYXRpbmcgYSBuZXcgYnJhbmNoIGZyb20gSEVBRCwgaWYgdGhlcmUgZXhpc3RzIGEgdHJhY2tpbmcKKwlicmFuY2ggaW4gZXhhY3RseSBvbmUgcmVtb3RlIG1hdGNoaW5nIHRoZSBiYXNlbmFtZSBvZiBgPHBhdGg+YCwKKwliYXNlIHRoZSBuZXcgYnJhbmNoIG9uIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLCBhbmQgbWFyaworCXRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGFzICJ1cHN0cmVhbSIgZnJvbSB0aGUgbmV3IGJyYW5jaC4KKysKK1RoaXMgY2FuIGFsc28gYmUgc2V0IHVwIGFzIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBieSB1c2luZyB0aGUKK2B3b3JrdHJlZS5ndWVzc1JlbW90ZWAgY29uZmlnIG9wdGlvbi4KKworLS1bbm8tXXRyYWNrOjoKKwlXaGVuIGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgaWYgYDxjb21taXQtaXNoPmAgaXMgYSBicmFuY2gsCisJbWFyayBpdCBhcyAidXBzdHJlYW0iIGZyb20gdGhlIG5ldyBicmFuY2guICBUaGlzIGlzIHRoZQorCWRlZmF1bHQgaWYgYDxjb21taXQtaXNoPmAgaXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLiAgU2VlCisJIi0tdHJhY2siIGluIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBmb3IgZGV0YWlscy4KKworLS1sb2NrOjoKKwlLZWVwIHRoZSB3b3JraW5nIHRyZWUgbG9ja2VkIGFmdGVyIGNyZWF0aW9uLiBUaGlzIGlzIHRoZQorCWVxdWl2YWxlbnQgb2YgYGdpdCB3b3JrdHJlZSBsb2NrYCBhZnRlciBgZ2l0IHdvcmt0cmVlIGFkZGAsCisJYnV0IHdpdGhvdXQgcmFjZSBjb25kaXRpb24uCisKKy1uOjoKKy0tZHJ5LXJ1bjo6CisJV2l0aCBgcHJ1bmVgLCBkbyBub3QgcmVtb3ZlIGFueXRoaW5nOyBqdXN0IHJlcG9ydCB3aGF0IGl0IHdvdWxkCisJcmVtb3ZlLgorCistLXBvcmNlbGFpbjo6CisJV2l0aCBgbGlzdGAsIG91dHB1dCBpbiBhbiBlYXN5LXRvLXBhcnNlIGZvcm1hdCBmb3Igc2NyaXB0cy4KKwlUaGlzIGZvcm1hdCB3aWxsIHJlbWFpbiBzdGFibGUgYWNyb3NzIEdpdCB2ZXJzaW9ucyBhbmQgcmVnYXJkbGVzcyBvZiB1c2VyCisJY29uZmlndXJhdGlvbi4gIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4KKworLXE6OgorLS1xdWlldDo6CisJV2l0aCAnYWRkJywgc3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJV2l0aCBgcHJ1bmVgLCByZXBvcnQgYWxsIHJlbW92YWxzLgorCistLWV4cGlyZSA8dGltZT46OgorCVdpdGggYHBydW5lYCwgb25seSBleHBpcmUgdW51c2VkIHdvcmtpbmcgdHJlZXMgb2xkZXIgdGhhbiA8dGltZT4uCisKKy0tcmVhc29uIDxzdHJpbmc+OjoKKwlXaXRoIGBsb2NrYCwgYW4gZXhwbGFuYXRpb24gd2h5IHRoZSB3b3JraW5nIHRyZWUgaXMgbG9ja2VkLgorCis8d29ya3RyZWU+OjoKKwlXb3JraW5nIHRyZWVzIGNhbiBiZSBpZGVudGlmaWVkIGJ5IHBhdGgsIGVpdGhlciByZWxhdGl2ZSBvcgorCWFic29sdXRlLgorKworSWYgdGhlIGxhc3QgcGF0aCBjb21wb25lbnRzIGluIHRoZSB3b3JraW5nIHRyZWUncyBwYXRoIGlzIHVuaXF1ZSBhbW9uZword29ya2luZyB0cmVlcywgaXQgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgd29ya3RyZWVzLiBGb3IgZXhhbXBsZSBpZgoreW91IG9ubHkgaGF2ZSB0d28gd29ya2luZyB0cmVlcywgYXQgIi9hYmMvZGVmL2doaSIgYW5kICIvYWJjL2RlZi9nZ2ciLAordGhlbiAiZ2hpIiBvciAiZGVmL2doaSIgaXMgZW5vdWdoIHRvIHBvaW50IHRvIHRoZSBmb3JtZXIgd29ya2luZyB0cmVlLgorCitSRUZTCistLS0tCitJbiBtdWx0aXBsZSB3b3JraW5nIHRyZWVzLCBzb21lIHJlZnMgbWF5IGJlIHNoYXJlZCBiZXR3ZWVuIGFsbCB3b3JraW5nCit0cmVlcywgc29tZSByZWZzIGFyZSBsb2NhbC4gT25lIGV4YW1wbGUgaXMgSEVBRCBpcyBkaWZmZXJlbnQgZm9yIGFsbAord29ya2luZyB0cmVlcy4gVGhpcyBzZWN0aW9uIGlzIGFib3V0IHRoZSBzaGFyaW5nIHJ1bGVzIGFuZCBob3cgdG8gYWNjZXNzCityZWZzIG9mIG9uZSB3b3JraW5nIHRyZWUgZnJvbSBhbm90aGVyLgorCitJbiBnZW5lcmFsLCBhbGwgcHNldWRvIHJlZnMgYXJlIHBlciB3b3JraW5nIHRyZWUgYW5kIGFsbCByZWZzIHN0YXJ0aW5nCit3aXRoICJyZWZzLyIgYXJlIHNoYXJlZC4gUHNldWRvIHJlZnMgYXJlIG9uZXMgbGlrZSBIRUFEIHdoaWNoIGFyZQorZGlyZWN0bHkgdW5kZXIgR0lUX0RJUiBpbnN0ZWFkIG9mIGluc2lkZSBHSVRfRElSL3JlZnMuIFRoZXJlIGlzIG9uZQorZXhjZXB0aW9uIHRvIHRoaXM6IHJlZnMgaW5zaWRlIHJlZnMvYmlzZWN0IGFuZCByZWZzL3dvcmt0cmVlIGlzIG5vdAorc2hhcmVkLgorCitSZWZzIHRoYXQgYXJlIHBlciB3b3JraW5nIHRyZWUgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkIGZyb20gYW5vdGhlcgord29ya2luZyB0cmVlIHZpYSB0d28gc3BlY2lhbCBwYXRocywgbWFpbi13b3JrdHJlZSBhbmQgd29ya3RyZWVzLiBUaGUKK2Zvcm1lciBnaXZlcyBhY2Nlc3MgdG8gcGVyLXdvcmt0cmVlIHJlZnMgb2YgdGhlIG1haW4gd29ya2luZyB0cmVlLAord2hpbGUgdGhlIGxhdHRlciB0byBhbGwgbGlua2VkIHdvcmtpbmcgdHJlZXMuCisKK0ZvciBleGFtcGxlLCBtYWluLXdvcmt0cmVlL0hFQUQgb3IgbWFpbi13b3JrdHJlZS9yZWZzL2Jpc2VjdC9nb29kCityZXNvbHZlIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBtYWluIHdvcmtpbmcgdHJlZSdzIEhFQUQgYW5kCityZWZzL2Jpc2VjdC9nb29kIHJlc3BlY3RpdmVseS4gU2ltaWxhcmx5LCB3b3JrdHJlZXMvZm9vL0hFQUQgb3IKK3dvcmt0cmVlcy9iYXIvcmVmcy9iaXNlY3QvYmFkIGFyZSB0aGUgc2FtZSBhcworR0lUX0NPTU1PTl9ESVIvd29ya3RyZWVzL2Zvby9IRUFEIGFuZAorR0lUX0NPTU1PTl9ESVIvd29ya3RyZWVzL2Jhci9yZWZzL2Jpc2VjdC9iYWQuCisKK1RvIGFjY2VzcyByZWZzLCBpdCdzIGJlc3Qgbm90IHRvIGxvb2sgaW5zaWRlIEdJVF9ESVIgZGlyZWN0bHkuIEluc3RlYWQKK3VzZSBjb21tYW5kcyBzdWNoIGFzIGxpbmtnaXQ6Z2l0LXJldi1wYXJzZVsxXSBvciBsaW5rZ2l0OmdpdC11cGRhdGUtcmVmWzFdCit3aGljaCB3aWxsIGhhbmRsZSByZWZzIGNvcnJlY3RseS4KKworQ09ORklHVVJBVElPTiBGSUxFCistLS0tLS0tLS0tLS0tLS0tLS0KK0J5IGRlZmF1bHQsIHRoZSByZXBvc2l0b3J5ICJjb25maWciIGZpbGUgaXMgc2hhcmVkIGFjcm9zcyBhbGwgd29ya2luZwordHJlZXMuIElmIHRoZSBjb25maWcgdmFyaWFibGVzIGBjb3JlLmJhcmVgIG9yIGBjb3JlLndvcmt0cmVlYCBhcmUKK2FscmVhZHkgcHJlc2VudCBpbiB0aGUgY29uZmlnIGZpbGUsIHRoZXkgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBtYWluCit3b3JraW5nIHRyZWVzIG9ubHkuCisKK0luIG9yZGVyIHRvIGhhdmUgY29uZmlndXJhdGlvbiBzcGVjaWZpYyB0byB3b3JraW5nIHRyZWVzLCB5b3UgY2FuIHR1cm4KK29uICJ3b3JrdHJlZUNvbmZpZyIgZXh0ZW5zaW9uLCBlLmcuOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIHRydWUKKy0tLS0tLS0tLS0tLQorCitJbiB0aGlzIG1vZGUsIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc3RheXMgaW4gdGhlIHBhdGggcG9pbnRlZCBieSBgZ2l0CityZXYtcGFyc2UgLS1naXQtcGF0aCBjb25maWcud29ya3RyZWVgLiBZb3UgY2FuIGFkZCBvciB1cGRhdGUKK2NvbmZpZ3VyYXRpb24gaW4gdGhpcyBmaWxlIHdpdGggYGdpdCBjb25maWcgLS13b3JrdHJlZWAuIE9sZGVyIEdpdAordmVyc2lvbnMgd2lsbCByZWZ1c2UgdG8gYWNjZXNzIHJlcG9zaXRvcmllcyB3aXRoIHRoaXMgZXh0ZW5zaW9uLgorCitOb3RlIHRoYXQgaW4gdGhpcyBmaWxlLCB0aGUgZXhjZXB0aW9uIGZvciBgY29yZS5iYXJlYCBhbmQgYGNvcmUud29ya3RyZWVgCitpcyBnb25lLiBJZiB5b3UgaGF2ZSB0aGVtIGluICRHSVRfRElSL2NvbmZpZyBiZWZvcmUsIHlvdSBtdXN0IG1vdmUKK3RoZW0gdG8gdGhlIGBjb25maWcud29ya3RyZWVgIG9mIHRoZSBtYWluIHdvcmtpbmcgdHJlZS4gWW91IG1heSBhbHNvCit0YWtlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gcmV2aWV3IGFuZCBtb3ZlIG90aGVyIGNvbmZpZ3VyYXRpb24gdGhhdCB5b3UKK2RvIG5vdCB3YW50IHRvIHNoYXJlIHRvIGFsbCB3b3JraW5nIHRyZWVzOgorCisgLSBgY29yZS53b3JrdHJlZWAgYW5kIGBjb3JlLmJhcmVgIHNob3VsZCBuZXZlciBiZSBzaGFyZWQKKworIC0gYGNvcmUuc3BhcnNlQ2hlY2tvdXRgIGlzIHJlY29tbWVuZGVkIHBlciB3b3JraW5nIHRyZWUsIHVubGVzcyB5b3UKKyAgIGFyZSBzdXJlIHlvdSBhbHdheXMgdXNlIHNwYXJzZSBjaGVja291dCBmb3IgYWxsIHdvcmtpbmcgdHJlZXMuCisKK0RFVEFJTFMKKy0tLS0tLS0KK0VhY2ggbGlua2VkIHdvcmtpbmcgdHJlZSBoYXMgYSBwcml2YXRlIHN1Yi1kaXJlY3RvcnkgaW4gdGhlIHJlcG9zaXRvcnkncworJEdJVF9ESVIvd29ya3RyZWVzIGRpcmVjdG9yeS4gIFRoZSBwcml2YXRlIHN1Yi1kaXJlY3RvcnkncyBuYW1lIGlzIHVzdWFsbHkKK3RoZSBiYXNlIG5hbWUgb2YgdGhlIGxpbmtlZCB3b3JraW5nIHRyZWUncyBwYXRoLCBwb3NzaWJseSBhcHBlbmRlZCB3aXRoIGEKK251bWJlciB0byBtYWtlIGl0IHVuaXF1ZS4gIEZvciBleGFtcGxlLCB3aGVuIGAkR0lUX0RJUj0vcGF0aC9tYWluLy5naXRgIHRoZQorY29tbWFuZCBgZ2l0IHdvcmt0cmVlIGFkZCAvcGF0aC9vdGhlci90ZXN0LW5leHQgbmV4dGAgY3JlYXRlcyB0aGUgbGlua2VkCit3b3JraW5nIHRyZWUgaW4gYC9wYXRoL290aGVyL3Rlc3QtbmV4dGAgYW5kIGFsc28gY3JlYXRlcyBhCitgJEdJVF9ESVIvd29ya3RyZWVzL3Rlc3QtbmV4dGAgZGlyZWN0b3J5IChvciBgJEdJVF9ESVIvd29ya3RyZWVzL3Rlc3QtbmV4dDFgCitpZiBgdGVzdC1uZXh0YCBpcyBhbHJlYWR5IHRha2VuKS4KKworV2l0aGluIGEgbGlua2VkIHdvcmtpbmcgdHJlZSwgJEdJVF9ESVIgaXMgc2V0IHRvIHBvaW50IHRvIHRoaXMgcHJpdmF0ZQorZGlyZWN0b3J5IChlLmcuIGAvcGF0aC9tYWluLy5naXQvd29ya3RyZWVzL3Rlc3QtbmV4dGAgaW4gdGhlIGV4YW1wbGUpIGFuZAorJEdJVF9DT01NT05fRElSIGlzIHNldCB0byBwb2ludCBiYWNrIHRvIHRoZSBtYWluIHdvcmtpbmcgdHJlZSdzICRHSVRfRElSCisoZS5nLiBgL3BhdGgvbWFpbi8uZ2l0YCkuIFRoZXNlIHNldHRpbmdzIGFyZSBtYWRlIGluIGEgYC5naXRgIGZpbGUgbG9jYXRlZCBhdAordGhlIHRvcCBkaXJlY3Rvcnkgb2YgdGhlIGxpbmtlZCB3b3JraW5nIHRyZWUuCisKK1BhdGggcmVzb2x1dGlvbiB2aWEgYGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aGAgdXNlcyBlaXRoZXIKKyRHSVRfRElSIG9yICRHSVRfQ09NTU9OX0RJUiBkZXBlbmRpbmcgb24gdGhlIHBhdGguIEZvciBleGFtcGxlLCBpbiB0aGUKK2xpbmtlZCB3b3JraW5nIHRyZWUgYGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBIRUFEYCByZXR1cm5zCitgL3BhdGgvbWFpbi8uZ2l0L3dvcmt0cmVlcy90ZXN0LW5leHQvSEVBRGAgKG5vdAorYC9wYXRoL290aGVyL3Rlc3QtbmV4dC8uZ2l0L0hFQURgIG9yIGAvcGF0aC9tYWluLy5naXQvSEVBRGApIHdoaWxlIGBnaXQKK3Jldi1wYXJzZSAtLWdpdC1wYXRoIHJlZnMvaGVhZHMvbWFzdGVyYCB1c2VzCiskR0lUX0NPTU1PTl9ESVIgYW5kIHJldHVybnMgYC9wYXRoL21haW4vLmdpdC9yZWZzL2hlYWRzL21hc3RlcmAsCitzaW5jZSByZWZzIGFyZSBzaGFyZWQgYWNyb3NzIGFsbCB3b3JraW5nIHRyZWVzLCBleGNlcHQgcmVmcy9iaXNlY3QgYW5kCityZWZzL3dvcmt0cmVlLgorCitTZWUgbGlua2dpdDpnaXRyZXBvc2l0b3J5LWxheW91dFs1XSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gVGhlIHJ1bGUgb2YKK3RodW1iIGlzIGRvIG5vdCBtYWtlIGFueSBhc3N1bXB0aW9uIGFib3V0IHdoZXRoZXIgYSBwYXRoIGJlbG9uZ3MgdG8KKyRHSVRfRElSIG9yICRHSVRfQ09NTU9OX0RJUiB3aGVuIHlvdSBuZWVkIHRvIGRpcmVjdGx5IGFjY2VzcyBzb21ldGhpbmcKK2luc2lkZSAkR0lUX0RJUi4gVXNlIGBnaXQgcmV2LXBhcnNlIC0tZ2l0LXBhdGhgIHRvIGdldCB0aGUgZmluYWwgcGF0aC4KKworSWYgeW91IG1hbnVhbGx5IG1vdmUgYSBsaW5rZWQgd29ya2luZyB0cmVlLCB5b3UgbmVlZCB0byB1cGRhdGUgdGhlICdnaXRkaXInIGZpbGUKK2luIHRoZSBlbnRyeSdzIGRpcmVjdG9yeS4gRm9yIGV4YW1wbGUsIGlmIGEgbGlua2VkIHdvcmtpbmcgdHJlZSBpcyBtb3ZlZAordG8gYC9uZXdwYXRoL3Rlc3QtbmV4dGAgYW5kIGl0cyBgLmdpdGAgZmlsZSBwb2ludHMgdG8KK2AvcGF0aC9tYWluLy5naXQvd29ya3RyZWVzL3Rlc3QtbmV4dGAsIHRoZW4gdXBkYXRlCitgL3BhdGgvbWFpbi8uZ2l0L3dvcmt0cmVlcy90ZXN0LW5leHQvZ2l0ZGlyYCB0byByZWZlcmVuY2UgYC9uZXdwYXRoL3Rlc3QtbmV4dGAKK2luc3RlYWQuCisKK1RvIHByZXZlbnQgYSAkR0lUX0RJUi93b3JrdHJlZXMgZW50cnkgZnJvbSBiZWluZyBwcnVuZWQgKHdoaWNoCitjYW4gYmUgdXNlZnVsIGluIHNvbWUgc2l0dWF0aW9ucywgc3VjaCBhcyB3aGVuIHRoZQorZW50cnkncyB3b3JraW5nIHRyZWUgaXMgc3RvcmVkIG9uIGEgcG9ydGFibGUgZGV2aWNlKSwgdXNlIHRoZQorYGdpdCB3b3JrdHJlZSBsb2NrYCBjb21tYW5kLCB3aGljaCBhZGRzIGEgZmlsZSBuYW1lZAorJ2xvY2tlZCcgdG8gdGhlIGVudHJ5J3MgZGlyZWN0b3J5LiBUaGUgZmlsZSBjb250YWlucyB0aGUgcmVhc29uIGluCitwbGFpbiB0ZXh0LiBGb3IgZXhhbXBsZSwgaWYgYSBsaW5rZWQgd29ya2luZyB0cmVlJ3MgYC5naXRgIGZpbGUgcG9pbnRzCit0byBgL3BhdGgvbWFpbi8uZ2l0L3dvcmt0cmVlcy90ZXN0LW5leHRgIHRoZW4gYSBmaWxlIG5hbWVkCitgL3BhdGgvbWFpbi8uZ2l0L3dvcmt0cmVlcy90ZXN0LW5leHQvbG9ja2VkYCB3aWxsIHByZXZlbnQgdGhlCitgdGVzdC1uZXh0YCBlbnRyeSBmcm9tIGJlaW5nIHBydW5lZC4gIFNlZQorbGlua2dpdDpnaXRyZXBvc2l0b3J5LWxheW91dFs1XSBmb3IgZGV0YWlscy4KKworV2hlbiBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIGlzIGVuYWJsZWQsIHRoZSBjb25maWcgZmlsZQorYC5naXQvd29ya3RyZWVzLzxpZD4vY29uZmlnLndvcmt0cmVlYCBpcyByZWFkIGFmdGVyIGAuZ2l0L2NvbmZpZ2AgaXMuCisKK0xJU1QgT1VUUFVUIEZPUk1BVAorLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgd29ya3RyZWUgbGlzdCBjb21tYW5kIGhhcyB0d28gb3V0cHV0IGZvcm1hdHMuICBUaGUgZGVmYXVsdCBmb3JtYXQgc2hvd3MgdGhlCitkZXRhaWxzIG9uIGEgc2luZ2xlIGxpbmUgd2l0aCBjb2x1bW5zLiAgRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgd29ya3RyZWUgbGlzdAorL3BhdGgvdG8vYmFyZS1zb3VyY2UgICAgICAgICAgICAoYmFyZSkKKy9wYXRoL3RvL2xpbmtlZC13b3JrdHJlZSAgICAgICAgYWJjZDEyMzQgW21hc3Rlcl0KKy9wYXRoL3RvL290aGVyLWxpbmtlZC13b3JrdHJlZSAgMTIzNGFiYyAgKGRldGFjaGVkIEhFQUQpCistLS0tLS0tLS0tLS0KKworUG9yY2VsYWluIEZvcm1hdAorfn5+fn5+fn5+fn5+fn5+fgorVGhlIHBvcmNlbGFpbiBmb3JtYXQgaGFzIGEgbGluZSBwZXIgYXR0cmlidXRlLiAgQXR0cmlidXRlcyBhcmUgbGlzdGVkIHdpdGggYQorbGFiZWwgYW5kIHZhbHVlIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzcGFjZS4gIEJvb2xlYW4gYXR0cmlidXRlcyAobGlrZSAnYmFyZScKK2FuZCAnZGV0YWNoZWQnKSBhcmUgbGlzdGVkIGFzIGEgbGFiZWwgb25seSwgYW5kIGFyZSBvbmx5IHByZXNlbnQgaWYgYW5kIG9ubHkKK2lmIHRoZSB2YWx1ZSBpcyB0cnVlLiAgVGhlIGZpcnN0IGF0dHJpYnV0ZSBvZiBhIHdvcmt0cmVlIGlzIGFsd2F5cyBgd29ya3RyZWVgLAorYW4gZW1wdHkgbGluZSBpbmRpY2F0ZXMgdGhlIGVuZCBvZiB0aGUgcmVjb3JkLiAgRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgd29ya3RyZWUgbGlzdCAtLXBvcmNlbGFpbgord29ya3RyZWUgL3BhdGgvdG8vYmFyZS1zb3VyY2UKK2JhcmUKKword29ya3RyZWUgL3BhdGgvdG8vbGlua2VkLXdvcmt0cmVlCitIRUFEIGFiY2QxMjM0YWJjZDEyMzRhYmNkMTIzNGFiY2QxMjM0YWJjZDEyMzQKK2JyYW5jaCByZWZzL2hlYWRzL21hc3RlcgorCit3b3JrdHJlZSAvcGF0aC90by9vdGhlci1saW5rZWQtd29ya3RyZWUKK0hFQUQgMTIzNGFiYzEyMzRhYmMxMjM0YWJjMTIzNGFiYzEyMzRhYmMxMjM0YQorZGV0YWNoZWQKKworLS0tLS0tLS0tLS0tCisKK0VYQU1QTEVTCistLS0tLS0tLQorWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVmYWN0b3Jpbmcgc2Vzc2lvbiBhbmQgeW91ciBib3NzIGNvbWVzIGluIGFuZAorZGVtYW5kcyB0aGF0IHlvdSBmaXggc29tZXRoaW5nIGltbWVkaWF0ZWx5LiBZb3UgbWlnaHQgdHlwaWNhbGx5IHVzZQorbGlua2dpdDpnaXQtc3Rhc2hbMV0gdG8gc3RvcmUgeW91ciBjaGFuZ2VzIGF3YXkgdGVtcG9yYXJpbHksIGhvd2V2ZXIsIHlvdXIKK3dvcmtpbmcgdHJlZSBpcyBpbiBzdWNoIGEgc3RhdGUgb2YgZGlzYXJyYXkgKHdpdGggbmV3LCBtb3ZlZCwgYW5kIHJlbW92ZWQKK2ZpbGVzLCBhbmQgb3RoZXIgYml0cyBhbmQgcGllY2VzIHN0cmV3biBhcm91bmQpIHRoYXQgeW91IGRvbid0IHdhbnQgdG8gcmlzaworZGlzdHVyYmluZyBhbnkgb2YgaXQuIEluc3RlYWQsIHlvdSBjcmVhdGUgYSB0ZW1wb3JhcnkgbGlua2VkIHdvcmtpbmcgdHJlZSB0bworbWFrZSB0aGUgZW1lcmdlbmN5IGZpeCwgcmVtb3ZlIGl0IHdoZW4gZG9uZSwgYW5kIHRoZW4gcmVzdW1lIHlvdXIgZWFybGllcgorcmVmYWN0b3Jpbmcgc2Vzc2lvbi4KKworLS0tLS0tLS0tLS0tCiskIGdpdCB3b3JrdHJlZSBhZGQgLWIgZW1lcmdlbmN5LWZpeCAuLi90ZW1wIG1hc3RlcgorJCBwdXNoZCAuLi90ZW1wCisjIC4uLiBoYWNrIGhhY2sgaGFjayAuLi4KKyQgZ2l0IGNvbW1pdCAtYSAtbSAnZW1lcmdlbmN5IGZpeCBmb3IgYm9zcycKKyQgcG9wZAorJCBnaXQgd29ya3RyZWUgcmVtb3ZlIC4uL3RlbXAKKy0tLS0tLS0tLS0tLQorCitCVUdTCistLS0tCitNdWx0aXBsZSBjaGVja291dCBpbiBnZW5lcmFsIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCwgYW5kIHRoZSBzdXBwb3J0Citmb3Igc3VibW9kdWxlcyBpcyBpbmNvbXBsZXRlLiBJdCBpcyBOT1QgcmVjb21tZW5kZWQgdG8gbWFrZSBtdWx0aXBsZQorY2hlY2tvdXRzIG9mIGEgc3VwZXJwcm9qZWN0LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXdyaXRlLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtd3JpdGUtdHJlZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIyMDQxYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXdyaXRlLXRyZWUudHh0CkBAIC0wLDAgKzEsNDIgQEAKK2dpdC13cml0ZS10cmVlKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtd3JpdGUtdHJlZSAtIENyZWF0ZSBhIHRyZWUgb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgaW5kZXgKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgd3JpdGUtdHJlZScgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDcmVhdGVzIGEgdHJlZSBvYmplY3QgdXNpbmcgdGhlIGN1cnJlbnQgaW5kZXguIFRoZSBuYW1lIG9mIHRoZSBuZXcKK3RyZWUgb2JqZWN0IGlzIHByaW50ZWQgdG8gc3RhbmRhcmQgb3V0cHV0LgorCitUaGUgaW5kZXggbXVzdCBiZSBpbiBhIGZ1bGx5IG1lcmdlZCBzdGF0ZS4KKworQ29uY2VwdHVhbGx5LCAnZ2l0IHdyaXRlLXRyZWUnIHN5bmMoKXMgdGhlIGN1cnJlbnQgaW5kZXggY29udGVudHMKK2ludG8gYSBzZXQgb2YgdHJlZSBmaWxlcy4KK0luIG9yZGVyIHRvIGhhdmUgdGhhdCBtYXRjaCB3aGF0IGlzIGFjdHVhbGx5IGluIHlvdXIgZGlyZWN0b3J5IHJpZ2h0Citub3csIHlvdSBuZWVkIHRvIGhhdmUgZG9uZSBhICdnaXQgdXBkYXRlLWluZGV4JyBwaGFzZSBiZWZvcmUgeW91IGRpZCB0aGUKKydnaXQgd3JpdGUtdHJlZScuCisKKworT1BUSU9OUworLS0tLS0tLQorLS1taXNzaW5nLW9rOjoKKwlOb3JtYWxseSAnZ2l0IHdyaXRlLXRyZWUnIGVuc3VyZXMgdGhhdCB0aGUgb2JqZWN0cyByZWZlcmVuY2VkIGJ5IHRoZQorCWRpcmVjdG9yeSBleGlzdCBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLiAgVGhpcyBvcHRpb24gZGlzYWJsZXMgdGhpcworCWNoZWNrLgorCistLXByZWZpeD08cHJlZml4Pi86OgorCVdyaXRlcyBhIHRyZWUgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIHN1YmRpcmVjdG9yeQorCWA8cHJlZml4PmAuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHdyaXRlIHRoZSB0cmVlIG9iamVjdAorCWZvciBhIHN1YnByb2plY3QgdGhhdCBpcyBpbiB0aGUgbmFtZWQgc3ViZGlyZWN0b3J5LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDY3NjllCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CkBAIC0wLDAgKzEsOTk0IEBACitnaXQoMSkKKz09PT09PQorCitOQU1FCistLS0tCitnaXQgLSB0aGUgc3R1cGlkIGNvbnRlbnQgdHJhY2tlcgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCcgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxwYXRoPl0gWy1jIDxuYW1lPj08dmFsdWU+XQorICAgIFstLWV4ZWMtcGF0aFs9PHBhdGg+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXQorICAgIFstcHwtLXBhZ2luYXRlfC1QfC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tYmFyZV0KKyAgICBbLS1naXQtZGlyPTxwYXRoPl0gWy0td29yay10cmVlPTxwYXRoPl0gWy0tbmFtZXNwYWNlPTxuYW1lPl0KKyAgICBbLS1zdXBlci1wcmVmaXg9PHBhdGg+XQorICAgIDxjb21tYW5kPiBbPGFyZ3M+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0dpdCBpcyBhIGZhc3QsIHNjYWxhYmxlLCBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbSB3aXRoIGFuCit1bnVzdWFsbHkgcmljaCBjb21tYW5kIHNldCB0aGF0IHByb3ZpZGVzIGJvdGggaGlnaC1sZXZlbCBvcGVyYXRpb25zCithbmQgZnVsbCBhY2Nlc3MgdG8gaW50ZXJuYWxzLgorCitTZWUgbGlua2dpdDpnaXR0dXRvcmlhbFs3XSB0byBnZXQgc3RhcnRlZCwgdGhlbiBzZWUKK2xpbmtnaXQ6Z2l0ZXZlcnlkYXlbN10gZm9yIGEgdXNlZnVsIG1pbmltdW0gc2V0IG9mCitjb21tYW5kcy4gIFRoZSBsaW5rOnVzZXItbWFudWFsLmh0bWxbR2l0IFVzZXIncyBNYW51YWxdIGhhcyBhIG1vcmUKK2luLWRlcHRoIGludHJvZHVjdGlvbi4KKworQWZ0ZXIgeW91IG1hc3RlcmVkIHRoZSBiYXNpYyBjb25jZXB0cywgeW91IGNhbiBjb21lIGJhY2sgdG8gdGhpcworcGFnZSB0byBsZWFybiB3aGF0IGNvbW1hbmRzIEdpdCBvZmZlcnMuICBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQKK2luZGl2aWR1YWwgR2l0IGNvbW1hbmRzIHdpdGggImdpdCBoZWxwIGNvbW1hbmQiLiAgbGlua2dpdDpnaXRjbGlbN10KK21hbnVhbCBwYWdlIGdpdmVzIHlvdSBhbiBvdmVydmlldyBvZiB0aGUgY29tbWFuZC1saW5lIGNvbW1hbmQgc3ludGF4LgorCitBIGZvcm1hdHRlZCBhbmQgaHlwZXJsaW5rZWQgY29weSBvZiB0aGUgbGF0ZXN0IEdpdCBkb2N1bWVudGF0aW9uCitjYW4gYmUgdmlld2VkIGF0IGh0dHBzOi8vZ2l0LmdpdGh1Yi5pby9odG1sZG9jcy9naXQuaHRtbAorb3IgaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy0tdmVyc2lvbjo6CisJUHJpbnRzIHRoZSBHaXQgc3VpdGUgdmVyc2lvbiB0aGF0IHRoZSAnZ2l0JyBwcm9ncmFtIGNhbWUgZnJvbS4KKworLS1oZWxwOjoKKwlQcmludHMgdGhlIHN5bm9wc2lzIGFuZCBhIGxpc3Qgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZAorCWNvbW1hbmRzLiBJZiB0aGUgb3B0aW9uIGAtLWFsbGAgb3IgYC1hYCBpcyBnaXZlbiB0aGVuIGFsbAorCWF2YWlsYWJsZSBjb21tYW5kcyBhcmUgcHJpbnRlZC4gSWYgYSBHaXQgY29tbWFuZCBpcyBuYW1lZCB0aGlzCisJb3B0aW9uIHdpbGwgYnJpbmcgdXAgdGhlIG1hbnVhbCBwYWdlIGZvciB0aGF0IGNvbW1hbmQuCisrCitPdGhlciBvcHRpb25zIGFyZSBhdmFpbGFibGUgdG8gY29udHJvbCBob3cgdGhlIG1hbnVhbCBwYWdlIGlzCitkaXNwbGF5ZWQuIFNlZSBsaW5rZ2l0OmdpdC1oZWxwWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLAorYmVjYXVzZSBgZ2l0IC0taGVscCAuLi5gIGlzIGNvbnZlcnRlZCBpbnRlcm5hbGx5IGludG8gYGdpdAoraGVscCAuLi5gLgorCistQyA8cGF0aD46OgorCVJ1biBhcyBpZiBnaXQgd2FzIHN0YXJ0ZWQgaW4gJzxwYXRoPicgaW5zdGVhZCBvZiB0aGUgY3VycmVudCB3b3JraW5nCisJZGlyZWN0b3J5LiAgV2hlbiBtdWx0aXBsZSBgLUNgIG9wdGlvbnMgYXJlIGdpdmVuLCBlYWNoIHN1YnNlcXVlbnQKKwlub24tYWJzb2x1dGUgYC1DIDxwYXRoPmAgaXMgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIHByZWNlZGluZyBgLUMKKwk8cGF0aD5gLiAgSWYgJzxwYXRoPicgaXMgcHJlc2VudCBidXQgZW1wdHksIGUuZy4gYC1DICIiYCwgdGhlbiB0aGUKKwljdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIGxlZnQgdW5jaGFuZ2VkLgorKworVGhpcyBvcHRpb24gYWZmZWN0cyBvcHRpb25zIHRoYXQgZXhwZWN0IHBhdGggbmFtZSBsaWtlIGAtLWdpdC1kaXJgIGFuZAorYC0td29yay10cmVlYCBpbiB0aGF0IHRoZWlyIGludGVycHJldGF0aW9ucyBvZiB0aGUgcGF0aCBuYW1lcyB3b3VsZCBiZQorbWFkZSByZWxhdGl2ZSB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkgY2F1c2VkIGJ5IHRoZSBgLUNgIG9wdGlvbi4gRm9yCitleGFtcGxlIHRoZSBmb2xsb3dpbmcgaW52b2NhdGlvbnMgYXJlIGVxdWl2YWxlbnQ6CisKKyAgICBnaXQgLS1naXQtZGlyPWEuZ2l0IC0td29yay10cmVlPWIgLUMgYyBzdGF0dXMKKyAgICBnaXQgLS1naXQtZGlyPWMvYS5naXQgLS13b3JrLXRyZWU9Yy9iIHN0YXR1cworCistYyA8bmFtZT49PHZhbHVlPjo6CisJUGFzcyBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIHRoZSBjb21tYW5kLiBUaGUgdmFsdWUKKwlnaXZlbiB3aWxsIG92ZXJyaWRlIHZhbHVlcyBmcm9tIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisJVGhlIDxuYW1lPiBpcyBleHBlY3RlZCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgbGlzdGVkIGJ5CisJJ2dpdCBjb25maWcnIChzdWJrZXlzIHNlcGFyYXRlZCBieSBkb3RzKS4KKysKK05vdGUgdGhhdCBvbWl0dGluZyB0aGUgYD1gIGluIGBnaXQgLWMgZm9vLmJhciAuLi5gIGlzIGFsbG93ZWQgYW5kIHNldHMKK2Bmb28uYmFyYCB0byB0aGUgYm9vbGVhbiB0cnVlIHZhbHVlIChqdXN0IGxpa2UgYFtmb29dYmFyYCB3b3VsZCBpbiBhCitjb25maWcgZmlsZSkuIEluY2x1ZGluZyB0aGUgZXF1YWxzIGJ1dCB3aXRoIGFuIGVtcHR5IHZhbHVlIChsaWtlIGBnaXQgLWMKK2Zvby5iYXI9IC4uLmApIHNldHMgYGZvby5iYXJgIHRvIHRoZSBlbXB0eSBzdHJpbmcgd2hpY2ggYGdpdCBjb25maWcKKy0tdHlwZT1ib29sYCB3aWxsIGNvbnZlcnQgdG8gYGZhbHNlYC4KKworLS1leGVjLXBhdGhbPTxwYXRoPl06OgorCVBhdGggdG8gd2hlcmV2ZXIgeW91ciBjb3JlIEdpdCBwcm9ncmFtcyBhcmUgaW5zdGFsbGVkLgorCVRoaXMgY2FuIGFsc28gYmUgY29udHJvbGxlZCBieSBzZXR0aW5nIHRoZSBHSVRfRVhFQ19QQVRICisJZW52aXJvbm1lbnQgdmFyaWFibGUuIElmIG5vIHBhdGggaXMgZ2l2ZW4sICdnaXQnIHdpbGwgcHJpbnQKKwl0aGUgY3VycmVudCBzZXR0aW5nIGFuZCB0aGVuIGV4aXQuCisKKy0taHRtbC1wYXRoOjoKKwlQcmludCB0aGUgcGF0aCwgd2l0aG91dCB0cmFpbGluZyBzbGFzaCwgd2hlcmUgR2l0J3MgSFRNTAorCWRvY3VtZW50YXRpb24gaXMgaW5zdGFsbGVkIGFuZCBleGl0LgorCistLW1hbi1wYXRoOjoKKwlQcmludCB0aGUgbWFucGF0aCAoc2VlIGBtYW4oMSlgKSBmb3IgdGhlIG1hbiBwYWdlcyBmb3IKKwl0aGlzIHZlcnNpb24gb2YgR2l0IGFuZCBleGl0LgorCistLWluZm8tcGF0aDo6CisJUHJpbnQgdGhlIHBhdGggd2hlcmUgdGhlIEluZm8gZmlsZXMgZG9jdW1lbnRpbmcgdGhpcworCXZlcnNpb24gb2YgR2l0IGFyZSBpbnN0YWxsZWQgYW5kIGV4aXQuCisKKy1wOjoKKy0tcGFnaW5hdGU6OgorCVBpcGUgYWxsIG91dHB1dCBpbnRvICdsZXNzJyAob3IgaWYgc2V0LCAkUEFHRVIpIGlmIHN0YW5kYXJkCisJb3V0cHV0IGlzIGEgdGVybWluYWwuICBUaGlzIG92ZXJyaWRlcyB0aGUgYHBhZ2VyLjxjbWQ+YAorCWNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoc2VlIHRoZSAiQ29uZmlndXJhdGlvbiBNZWNoYW5pc20iIHNlY3Rpb24KKwliZWxvdykuCisKKy1QOjoKKy0tbm8tcGFnZXI6OgorCURvIG5vdCBwaXBlIEdpdCBvdXRwdXQgaW50byBhIHBhZ2VyLgorCistLWdpdC1kaXI9PHBhdGg+OjoKKwlTZXQgdGhlIHBhdGggdG8gdGhlIHJlcG9zaXRvcnkgKCIuZ2l0IiBkaXJlY3RvcnkpLiBUaGlzIGNhbiBhbHNvIGJlCisJY29udHJvbGxlZCBieSBzZXR0aW5nIHRoZSBgR0lUX0RJUmAgZW52aXJvbm1lbnQgdmFyaWFibGUuIEl0IGNhbiBiZQorCWFuIGFic29sdXRlIHBhdGggb3IgcmVsYXRpdmUgcGF0aCB0byBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorKworU3BlY2lmeWluZyB0aGUgbG9jYXRpb24gb2YgdGhlICIuZ2l0IiBkaXJlY3RvcnkgdXNpbmcgdGhpcworb3B0aW9uIChvciBgR0lUX0RJUmAgZW52aXJvbm1lbnQgdmFyaWFibGUpIHR1cm5zIG9mZiB0aGUKK3JlcG9zaXRvcnkgZGlzY292ZXJ5IHRoYXQgdHJpZXMgdG8gZmluZCBhIGRpcmVjdG9yeSB3aXRoCisiLmdpdCIgc3ViZGlyZWN0b3J5ICh3aGljaCBpcyBob3cgdGhlIHJlcG9zaXRvcnkgYW5kIHRoZQordG9wLWxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUgYXJlIGRpc2NvdmVyZWQpLCBhbmQgdGVsbHMgR2l0Cit0aGF0IHlvdSBhcmUgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiAgSWYgeW91CithcmUgbm90IGF0IHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSB3b3JraW5nIHRyZWUsIHlvdQorc2hvdWxkIHRlbGwgR2l0IHdoZXJlIHRoZSB0b3AtbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSBpcywKK3dpdGggdGhlIGAtLXdvcmstdHJlZT08cGF0aD5gIG9wdGlvbiAob3IgYEdJVF9XT1JLX1RSRUVgCitlbnZpcm9ubWVudCB2YXJpYWJsZSkKKysKK0lmIHlvdSBqdXN0IHdhbnQgdG8gcnVuIGdpdCBhcyBpZiBpdCB3YXMgc3RhcnRlZCBpbiBgPHBhdGg+YCB0aGVuIHVzZQorYGdpdCAtQyA8cGF0aD5gLgorCistLXdvcmstdHJlZT08cGF0aD46OgorCVNldCB0aGUgcGF0aCB0byB0aGUgd29ya2luZyB0cmVlLiBJdCBjYW4gYmUgYW4gYWJzb2x1dGUgcGF0aAorCW9yIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKwlUaGlzIGNhbiBhbHNvIGJlIGNvbnRyb2xsZWQgYnkgc2V0dGluZyB0aGUgR0lUX1dPUktfVFJFRQorCWVudmlyb25tZW50IHZhcmlhYmxlIGFuZCB0aGUgY29yZS53b3JrdHJlZSBjb25maWd1cmF0aW9uCisJdmFyaWFibGUgKHNlZSBjb3JlLndvcmt0cmVlIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgYQorCW1vcmUgZGV0YWlsZWQgZGlzY3Vzc2lvbikuCisKKy0tbmFtZXNwYWNlPTxwYXRoPjo6CisJU2V0IHRoZSBHaXQgbmFtZXNwYWNlLiAgU2VlIGxpbmtnaXQ6Z2l0bmFtZXNwYWNlc1s3XSBmb3IgbW9yZQorCWRldGFpbHMuICBFcXVpdmFsZW50IHRvIHNldHRpbmcgdGhlIGBHSVRfTkFNRVNQQUNFYCBlbnZpcm9ubWVudAorCXZhcmlhYmxlLgorCistLXN1cGVyLXByZWZpeD08cGF0aD46OgorCUN1cnJlbnRseSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuICBTZXQgYSBwcmVmaXggd2hpY2ggZ2l2ZXMgYSBwYXRoIGZyb20KKwlhYm92ZSBhIHJlcG9zaXRvcnkgZG93biB0byBpdHMgcm9vdC4gIE9uZSB1c2UgaXMgdG8gZ2l2ZSBzdWJtb2R1bGVzCisJY29udGV4dCBhYm91dCB0aGUgc3VwZXJwcm9qZWN0IHRoYXQgaW52b2tlZCBpdC4KKworLS1iYXJlOjoKKwlUcmVhdCB0aGUgcmVwb3NpdG9yeSBhcyBhIGJhcmUgcmVwb3NpdG9yeS4gIElmIEdJVF9ESVIKKwllbnZpcm9ubWVudCBpcyBub3Qgc2V0LCBpdCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgd29ya2luZworCWRpcmVjdG9yeS4KKworLS1uby1yZXBsYWNlLW9iamVjdHM6OgorCURvIG5vdCB1c2UgcmVwbGFjZW1lbnQgcmVmcyB0byByZXBsYWNlIEdpdCBvYmplY3RzLiBTZWUKKwlsaW5rZ2l0OmdpdC1yZXBsYWNlWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCistLWxpdGVyYWwtcGF0aHNwZWNzOjoKKwlUcmVhdCBwYXRoc3BlY3MgbGl0ZXJhbGx5IChpLmUuIG5vIGdsb2JiaW5nLCBubyBwYXRoc3BlYyBtYWdpYykuCisJVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgdGhlIGBHSVRfTElURVJBTF9QQVRIU1BFQ1NgIGVudmlyb25tZW50CisJdmFyaWFibGUgdG8gYDFgLgorCistLWdsb2ItcGF0aHNwZWNzOjoKKwlBZGQgImdsb2IiIG1hZ2ljIHRvIGFsbCBwYXRoc3BlYy4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcKKwl0aGUgYEdJVF9HTE9CX1BBVEhTUEVDU2AgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYDFgLiBEaXNhYmxpbmcKKwlnbG9iYmluZyBvbiBpbmRpdmlkdWFsIHBhdGhzcGVjcyBjYW4gYmUgZG9uZSB1c2luZyBwYXRoc3BlYworCW1hZ2ljICI6KGxpdGVyYWwpIgorCistLW5vZ2xvYi1wYXRoc3BlY3M6OgorCUFkZCAibGl0ZXJhbCIgbWFnaWMgdG8gYWxsIHBhdGhzcGVjLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZworCXRoZSBgR0lUX05PR0xPQl9QQVRIU1BFQ1NgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGAxYC4gRW5hYmxpbmcKKwlnbG9iYmluZyBvbiBpbmRpdmlkdWFsIHBhdGhzcGVjcyBjYW4gYmUgZG9uZSB1c2luZyBwYXRoc3BlYworCW1hZ2ljICI6KGdsb2IpIgorCistLWljYXNlLXBhdGhzcGVjczo6CisJQWRkICJpY2FzZSIgbWFnaWMgdG8gYWxsIHBhdGhzcGVjLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZworCXRoZSBgR0lUX0lDQVNFX1BBVEhTUEVDU2AgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYDFgLgorCistLW5vLW9wdGlvbmFsLWxvY2tzOjoKKwlEbyBub3QgcGVyZm9ybSBvcHRpb25hbCBvcGVyYXRpb25zIHRoYXQgcmVxdWlyZSBsb2Nrcy4gVGhpcyBpcworCWVxdWl2YWxlbnQgdG8gc2V0dGluZyB0aGUgYEdJVF9PUFRJT05BTF9MT0NLU2AgdG8gYDBgLgorCistLWxpc3QtY21kcz1ncm91cFssZ3JvdXAuLi5dOjoKKwlMaXN0IGNvbW1hbmRzIGJ5IGdyb3VwLiBUaGlzIGlzIGFuIGludGVybmFsL2V4cGVyaW1lbnRhbAorCW9wdGlvbiBhbmQgbWF5IGNoYW5nZSBvciBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFN1cHBvcnRlZAorCWdyb3VwcyBhcmU6IGJ1aWx0aW5zLCBwYXJzZW9wdCAoYnVpbHRpbiBjb21tYW5kcyB0aGF0IHVzZQorCXBhcnNlLW9wdGlvbnMpLCBtYWluIChhbGwgY29tbWFuZHMgaW4gbGliZXhlYyBkaXJlY3RvcnkpLAorCW90aGVycyAoYWxsIG90aGVyIGNvbW1hbmRzIGluIGAkUEFUSGAgdGhhdCBoYXZlIGdpdC0gcHJlZml4KSwKKwlsaXN0LTxjYXRlZ29yeT4gKHNlZSBjYXRlZ29yaWVzIGluIGNvbW1hbmQtbGlzdC50eHQpLAorCW5vaGVscGVycyAoZXhjbHVkZSBoZWxwZXIgY29tbWFuZHMpLCBhbGlhcyBhbmQgY29uZmlnCisJKHJldHJpZXZlIGNvbW1hbmQgbGlzdCBmcm9tIGNvbmZpZyB2YXJpYWJsZSBjb21wbGV0aW9uLmNvbW1hbmRzKQorCitHSVQgQ09NTUFORFMKKy0tLS0tLS0tLS0tLQorCitXZSBkaXZpZGUgR2l0IGludG8gaGlnaCBsZXZlbCAoInBvcmNlbGFpbiIpIGNvbW1hbmRzIGFuZCBsb3cgbGV2ZWwKKygicGx1bWJpbmciKSBjb21tYW5kcy4KKworSGlnaC1sZXZlbCBjb21tYW5kcyAocG9yY2VsYWluKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZSBzZXBhcmF0ZSB0aGUgcG9yY2VsYWluIGNvbW1hbmRzIGludG8gdGhlIG1haW4gY29tbWFuZHMgYW5kIHNvbWUKK2FuY2lsbGFyeSB1c2VyIHV0aWxpdGllcy4KKworTWFpbiBwb3JjZWxhaW4gY29tbWFuZHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2luY2x1ZGU6OmNtZHMtbWFpbnBvcmNlbGFpbi50eHRbXQorCitBbmNpbGxhcnkgQ29tbWFuZHMKK35+fn5+fn5+fn5+fn5+fn5+fgorTWFuaXB1bGF0b3JzOgorCitpbmNsdWRlOjpjbWRzLWFuY2lsbGFyeW1hbmlwdWxhdG9ycy50eHRbXQorCitJbnRlcnJvZ2F0b3JzOgorCitpbmNsdWRlOjpjbWRzLWFuY2lsbGFyeWludGVycm9nYXRvcnMudHh0W10KKworCitJbnRlcmFjdGluZyB3aXRoIE90aGVycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlc2UgY29tbWFuZHMgYXJlIHRvIGludGVyYWN0IHdpdGggZm9yZWlnbiBTQ00gYW5kIHdpdGggb3RoZXIKK3Blb3BsZSB2aWEgcGF0Y2ggb3ZlciBlLW1haWwuCisKK2luY2x1ZGU6OmNtZHMtZm9yZWlnbnNjbWludGVyZmFjZS50eHRbXQorCitSZXNldCwgcmVzdG9yZSBhbmQgcmV2ZXJ0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGVyZSBhcmUgdGhyZWUgY29tbWFuZHMgd2l0aCBzaW1pbGFyIG5hbWVzOiBgZ2l0IHJlc2V0YCwKK2BnaXQgcmVzdG9yZWAgYW5kIGBnaXQgcmV2ZXJ0YC4KKworKiBsaW5rZ2l0OmdpdC1yZXZlcnRbMV0gaXMgYWJvdXQgbWFraW5nIGEgbmV3IGNvbW1pdCB0aGF0IHJldmVydHMgdGhlCisgIGNoYW5nZXMgbWFkZSBieSBvdGhlciBjb21taXRzLgorCisqIGxpbmtnaXQ6Z2l0LXJlc3RvcmVbMV0gaXMgYWJvdXQgcmVzdG9yaW5nIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUKKyAgZnJvbSBlaXRoZXIgdGhlIGluZGV4IG9yIGFub3RoZXIgY29tbWl0LiBUaGlzIGNvbW1hbmQgZG9lcyBub3QKKyAgdXBkYXRlIHlvdXIgYnJhbmNoLiBUaGUgY29tbWFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvIHJlc3RvcmUgZmlsZXMgaW4KKyAgdGhlIGluZGV4IGZyb20gYW5vdGhlciBjb21taXQuCisKKyogbGlua2dpdDpnaXQtcmVzZXRbMV0gaXMgYWJvdXQgdXBkYXRpbmcgeW91ciBicmFuY2gsIG1vdmluZyB0aGUgdGlwCisgIGluIG9yZGVyIHRvIGFkZCBvciByZW1vdmUgY29tbWl0cyBmcm9tIHRoZSBicmFuY2guIFRoaXMgb3BlcmF0aW9uCisgIGNoYW5nZXMgdGhlIGNvbW1pdCBoaXN0b3J5LgorKworYGdpdCByZXNldGAgY2FuIGFsc28gYmUgdXNlZCB0byByZXN0b3JlIHRoZSBpbmRleCwgb3ZlcmxhcHBpbmcgd2l0aAorYGdpdCByZXN0b3JlYC4KKworCitMb3ctbGV2ZWwgY29tbWFuZHMgKHBsdW1iaW5nKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWx0aG91Z2ggR2l0IGluY2x1ZGVzIGl0cworb3duIHBvcmNlbGFpbiBsYXllciwgaXRzIGxvdy1sZXZlbCBjb21tYW5kcyBhcmUgc3VmZmljaWVudCB0byBzdXBwb3J0CitkZXZlbG9wbWVudCBvZiBhbHRlcm5hdGl2ZSBwb3JjZWxhaW5zLiAgRGV2ZWxvcGVycyBvZiBzdWNoIHBvcmNlbGFpbnMKK21pZ2h0IHN0YXJ0IGJ5IHJlYWRpbmcgYWJvdXQgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdIGFuZAorbGlua2dpdDpnaXQtcmVhZC10cmVlWzFdLgorCitUaGUgaW50ZXJmYWNlIChpbnB1dCwgb3V0cHV0LCBzZXQgb2Ygb3B0aW9ucyBhbmQgdGhlIHNlbWFudGljcykKK3RvIHRoZXNlIGxvdy1sZXZlbCBjb21tYW5kcyBhcmUgbWVhbnQgdG8gYmUgYSBsb3QgbW9yZSBzdGFibGUKK3RoYW4gUG9yY2VsYWluIGxldmVsIGNvbW1hbmRzLCBiZWNhdXNlIHRoZXNlIGNvbW1hbmRzIGFyZQorcHJpbWFyaWx5IGZvciBzY3JpcHRlZCB1c2UuICBUaGUgaW50ZXJmYWNlIHRvIFBvcmNlbGFpbiBjb21tYW5kcworb24gdGhlIG90aGVyIGhhbmQgYXJlIHN1YmplY3QgdG8gY2hhbmdlIGluIG9yZGVyIHRvIGltcHJvdmUgdGhlCitlbmQgdXNlciBleHBlcmllbmNlLgorCitUaGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGRpdmlkZXMKK3RoZSBsb3ctbGV2ZWwgY29tbWFuZHMgaW50byBjb21tYW5kcyB0aGF0IG1hbmlwdWxhdGUgb2JqZWN0cyAoaW4KK3RoZSByZXBvc2l0b3J5LCBpbmRleCwgYW5kIHdvcmtpbmcgdHJlZSksIGNvbW1hbmRzIHRoYXQgaW50ZXJyb2dhdGUgYW5kCitjb21wYXJlIG9iamVjdHMsIGFuZCBjb21tYW5kcyB0aGF0IG1vdmUgb2JqZWN0cyBhbmQgcmVmZXJlbmNlcyBiZXR3ZWVuCityZXBvc2l0b3JpZXMuCisKKworTWFuaXB1bGF0aW9uIGNvbW1hbmRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworaW5jbHVkZTo6Y21kcy1wbHVtYmluZ21hbmlwdWxhdG9ycy50eHRbXQorCisKK0ludGVycm9nYXRpb24gY29tbWFuZHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworaW5jbHVkZTo6Y21kcy1wbHVtYmluZ2ludGVycm9nYXRvcnMudHh0W10KKworSW4gZ2VuZXJhbCwgdGhlIGludGVycm9nYXRlIGNvbW1hbmRzIGRvIG5vdCB0b3VjaCB0aGUgZmlsZXMgaW4KK3RoZSB3b3JraW5nIHRyZWUuCisKKworU3luY2luZyByZXBvc2l0b3JpZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2luY2x1ZGU6OmNtZHMtc3luY2hpbmdyZXBvc2l0b3JpZXMudHh0W10KKworVGhlIGZvbGxvd2luZyBhcmUgaGVscGVyIGNvbW1hbmRzIHVzZWQgYnkgdGhlIGFib3ZlOyBlbmQgdXNlcnMKK3R5cGljYWxseSBkbyBub3QgdXNlIHRoZW0gZGlyZWN0bHkuCisKK2luY2x1ZGU6OmNtZHMtc3luY2hlbHBlcnMudHh0W10KKworCitJbnRlcm5hbCBoZWxwZXIgY29tbWFuZHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGVzZSBhcmUgaW50ZXJuYWwgaGVscGVyIGNvbW1hbmRzIHVzZWQgYnkgb3RoZXIgY29tbWFuZHM7IGVuZAordXNlcnMgdHlwaWNhbGx5IGRvIG5vdCB1c2UgdGhlbSBkaXJlY3RseS4KKworaW5jbHVkZTo6Y21kcy1wdXJlaGVscGVycy50eHRbXQorCisKK0NvbmZpZ3VyYXRpb24gTWVjaGFuaXNtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgdXNlcyBhIHNpbXBsZSB0ZXh0IGZvcm1hdCB0byBzdG9yZSBjdXN0b21pemF0aW9ucyB0aGF0IGFyZSBwZXIKK3JlcG9zaXRvcnkgYW5kIGFyZSBwZXIgdXNlci4gIFN1Y2ggYSBjb25maWd1cmF0aW9uIGZpbGUgbWF5IGxvb2sKK2xpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCisjCisjIEEgJyMnIG9yICc7JyBjaGFyYWN0ZXIgaW5kaWNhdGVzIGEgY29tbWVudC4KKyMKKworOyBjb3JlIHZhcmlhYmxlcworW2NvcmVdCisJOyBEb24ndCB0cnVzdCBmaWxlIG1vZGVzCisJZmlsZW1vZGUgPSBmYWxzZQorCis7IHVzZXIgaWRlbnRpdHkKK1t1c2VyXQorCW5hbWUgPSAiSnVuaW8gQyBIYW1hbm8iCisJZW1haWwgPSAiZ2l0c3RlckBwb2JveC5jb20iCisKKy0tLS0tLS0tLS0tLQorCitWYXJpb3VzIGNvbW1hbmRzIHJlYWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZCBhZGp1c3QKK3RoZWlyIG9wZXJhdGlvbiBhY2NvcmRpbmdseS4gIFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIGEKK2xpc3QgYW5kIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBtZWNoYW5pc20uCisKKworSWRlbnRpZmllciBUZXJtaW5vbG9neQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPG9iamVjdD46OgorCUluZGljYXRlcyB0aGUgb2JqZWN0IG5hbWUgZm9yIGFueSB0eXBlIG9mIG9iamVjdC4KKworPGJsb2I+OjoKKwlJbmRpY2F0ZXMgYSBibG9iIG9iamVjdCBuYW1lLgorCis8dHJlZT46OgorCUluZGljYXRlcyBhIHRyZWUgb2JqZWN0IG5hbWUuCisKKzxjb21taXQ+OjoKKwlJbmRpY2F0ZXMgYSBjb21taXQgb2JqZWN0IG5hbWUuCisKKzx0cmVlLWlzaD46OgorCUluZGljYXRlcyBhIHRyZWUsIGNvbW1pdCBvciB0YWcgb2JqZWN0IG5hbWUuICBBCisJY29tbWFuZCB0aGF0IHRha2VzIGEgPHRyZWUtaXNoPiBhcmd1bWVudCB1bHRpbWF0ZWx5IHdhbnRzIHRvCisJb3BlcmF0ZSBvbiBhIDx0cmVlPiBvYmplY3QgYnV0IGF1dG9tYXRpY2FsbHkgZGVyZWZlcmVuY2VzCisJPGNvbW1pdD4gYW5kIDx0YWc+IG9iamVjdHMgdGhhdCBwb2ludCBhdCBhIDx0cmVlPi4KKworPGNvbW1pdC1pc2g+OjoKKwlJbmRpY2F0ZXMgYSBjb21taXQgb3IgdGFnIG9iamVjdCBuYW1lLiAgQQorCWNvbW1hbmQgdGhhdCB0YWtlcyBhIDxjb21taXQtaXNoPiBhcmd1bWVudCB1bHRpbWF0ZWx5IHdhbnRzIHRvCisJb3BlcmF0ZSBvbiBhIDxjb21taXQ+IG9iamVjdCBidXQgYXV0b21hdGljYWxseSBkZXJlZmVyZW5jZXMKKwk8dGFnPiBvYmplY3RzIHRoYXQgcG9pbnQgYXQgYSA8Y29tbWl0Pi4KKworPHR5cGU+OjoKKwlJbmRpY2F0ZXMgdGhhdCBhbiBvYmplY3QgdHlwZSBpcyByZXF1aXJlZC4KKwlDdXJyZW50bHkgb25lIG9mOiBgYmxvYmAsIGB0cmVlYCwgYGNvbW1pdGAsIG9yIGB0YWdgLgorCis8ZmlsZT46OgorCUluZGljYXRlcyBhIGZpbGVuYW1lIC0gYWxtb3N0IGFsd2F5cyByZWxhdGl2ZSB0byB0aGUKKwlyb290IG9mIHRoZSB0cmVlIHN0cnVjdHVyZSBgR0lUX0lOREVYX0ZJTEVgIGRlc2NyaWJlcy4KKworU3ltYm9saWMgSWRlbnRpZmllcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitBbnkgR2l0IGNvbW1hbmQgYWNjZXB0aW5nIGFueSA8b2JqZWN0PiBjYW4gYWxzbyB1c2UgdGhlIGZvbGxvd2luZworc3ltYm9saWMgbm90YXRpb246CisKK0hFQUQ6OgorCWluZGljYXRlcyB0aGUgaGVhZCBvZiB0aGUgY3VycmVudCBicmFuY2guCisKKzx0YWc+OjoKKwlhIHZhbGlkIHRhZyAnbmFtZScKKwkoaS5lLiBhIGByZWZzL3RhZ3MvPHRhZz5gIHJlZmVyZW5jZSkuCisKKzxoZWFkPjo6CisJYSB2YWxpZCBoZWFkICduYW1lJworCShpLmUuIGEgYHJlZnMvaGVhZHMvPGhlYWQ+YCByZWZlcmVuY2UpLgorCitGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2Ygd2F5cyB0byBzcGVsbCBvYmplY3QgbmFtZXMsIHNlZQorIlNQRUNJRllJTkcgUkVWSVNJT05TIiBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddLgorCisKK0ZpbGUvRGlyZWN0b3J5IFN0cnVjdHVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BsZWFzZSBzZWUgdGhlIGxpbmtnaXQ6Z2l0cmVwb3NpdG9yeS1sYXlvdXRbNV0gZG9jdW1lbnQuCisKK1JlYWQgbGlua2dpdDpnaXRob29rc1s1XSBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IGVhY2ggaG9vay4KKworSGlnaGVyIGxldmVsIFNDTXMgbWF5IHByb3ZpZGUgYW5kIG1hbmFnZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRoZQorYCRHSVRfRElSYC4KKworCitUZXJtaW5vbG9neQorLS0tLS0tLS0tLS0KK1BsZWFzZSBzZWUgbGlua2dpdDpnaXRnbG9zc2FyeVs3XS4KKworCitFbnZpcm9ubWVudCBWYXJpYWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVmFyaW91cyBHaXQgY29tbWFuZHMgdXNlIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorCitUaGUgR2l0IFJlcG9zaXRvcnkKK35+fn5+fn5+fn5+fn5+fn5+fgorVGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFwcGx5IHRvICdhbGwnIGNvcmUgR2l0IGNvbW1hbmRzLiBOYjogaXQKK2lzIHdvcnRoIG5vdGluZyB0aGF0IHRoZXkgbWF5IGJlIHVzZWQvb3ZlcnJpZGRlbiBieSBTQ01TIHNpdHRpbmcgYWJvdmUKK0dpdCBzbyB0YWtlIGNhcmUgaWYgdXNpbmcgYSBmb3JlaWduIGZyb250LWVuZC4KKworYEdJVF9JTkRFWF9GSUxFYDo6CisJVGhpcyBlbnZpcm9ubWVudCBhbGxvd3MgdGhlIHNwZWNpZmljYXRpb24gb2YgYW4gYWx0ZXJuYXRlCisJaW5kZXggZmlsZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgb2YgYCRHSVRfRElSL2luZGV4YAorCWlzIHVzZWQuCisKK2BHSVRfSU5ERVhfVkVSU0lPTmA6OgorCVRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgYWxsb3dzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGFuIGluZGV4CisJdmVyc2lvbiBmb3IgbmV3IHJlcG9zaXRvcmllcy4gIEl0IHdvbid0IGFmZmVjdCBleGlzdGluZyBpbmRleAorCWZpbGVzLiAgQnkgZGVmYXVsdCBpbmRleCBmaWxlIHZlcnNpb24gMiBvciAzIGlzIHVzZWQuIFNlZQorCWxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworYEdJVF9PQkpFQ1RfRElSRUNUT1JZYDo6CisJSWYgdGhlIG9iamVjdCBzdG9yYWdlIGRpcmVjdG9yeSBpcyBzcGVjaWZpZWQgdmlhIHRoaXMKKwllbnZpcm9ubWVudCB2YXJpYWJsZSB0aGVuIHRoZSBzaGExIGRpcmVjdG9yaWVzIGFyZSBjcmVhdGVkCisJdW5kZXJuZWF0aCAtIG90aGVyd2lzZSB0aGUgZGVmYXVsdCBgJEdJVF9ESVIvb2JqZWN0c2AKKwlkaXJlY3RvcnkgaXMgdXNlZC4KKworYEdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTYDo6CisJRHVlIHRvIHRoZSBpbW11dGFibGUgbmF0dXJlIG9mIEdpdCBvYmplY3RzLCBvbGQgb2JqZWN0cyBjYW4gYmUKKwlhcmNoaXZlZCBpbnRvIHNoYXJlZCwgcmVhZC1vbmx5IGRpcmVjdG9yaWVzLiBUaGlzIHZhcmlhYmxlCisJc3BlY2lmaWVzIGEgIjoiIHNlcGFyYXRlZCAob24gV2luZG93cyAiOyIgc2VwYXJhdGVkKSBsaXN0CisJb2YgR2l0IG9iamVjdCBkaXJlY3RvcmllcyB3aGljaCBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIEdpdAorCW9iamVjdHMuIE5ldyBvYmplY3RzIHdpbGwgbm90IGJlIHdyaXR0ZW4gdG8gdGhlc2UgZGlyZWN0b3JpZXMuCisrCitFbnRyaWVzIHRoYXQgYmVnaW4gd2l0aCBgImAgKGRvdWJsZS1xdW90ZSkgd2lsbCBiZSBpbnRlcnByZXRlZAorYXMgQy1zdHlsZSBxdW90ZWQgcGF0aHMsIHJlbW92aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nCitkb3VibGUtcXVvdGVzIGFuZCByZXNwZWN0aW5nIGJhY2tzbGFzaCBlc2NhcGVzLiBFLmcuLCB0aGUgdmFsdWUKK2AicGF0aC13aXRoLVwiLWFuZC06LWluLWl0Ijp2YW5pbGxhLXBhdGhgIGhhcyB0d28gcGF0aHM6CitgcGF0aC13aXRoLSItYW5kLTotaW4taXRgIGFuZCBgdmFuaWxsYS1wYXRoYC4KKworYEdJVF9ESVJgOjoKKwlJZiB0aGUgYEdJVF9ESVJgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCB0aGVuIGl0CisJc3BlY2lmaWVzIGEgcGF0aCB0byB1c2UgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgLmdpdGAKKwlmb3IgdGhlIGJhc2Ugb2YgdGhlIHJlcG9zaXRvcnkuCisJVGhlIGAtLWdpdC1kaXJgIGNvbW1hbmQtbGluZSBvcHRpb24gYWxzbyBzZXRzIHRoaXMgdmFsdWUuCisKK2BHSVRfV09SS19UUkVFYDo6CisJU2V0IHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUuCisJVGhpcyBjYW4gYWxzbyBiZSBjb250cm9sbGVkIGJ5IHRoZSBgLS13b3JrLXRyZWVgIGNvbW1hbmQtbGluZQorCW9wdGlvbiBhbmQgdGhlIGNvcmUud29ya3RyZWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworYEdJVF9OQU1FU1BBQ0VgOjoKKwlTZXQgdGhlIEdpdCBuYW1lc3BhY2U7IHNlZSBsaW5rZ2l0OmdpdG5hbWVzcGFjZXNbN10gZm9yIGRldGFpbHMuCisJVGhlIGAtLW5hbWVzcGFjZWAgY29tbWFuZC1saW5lIG9wdGlvbiBhbHNvIHNldHMgdGhpcyB2YWx1ZS4KKworYEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTYDo6CisJVGhpcyBzaG91bGQgYmUgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBhYnNvbHV0ZSBwYXRocy4gIElmCisJc2V0LCBpdCBpcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdCBHaXQgc2hvdWxkIG5vdCBjaGRpciB1cAorCWludG8gd2hpbGUgbG9va2luZyBmb3IgYSByZXBvc2l0b3J5IGRpcmVjdG9yeSAodXNlZnVsIGZvcgorCWV4Y2x1ZGluZyBzbG93LWxvYWRpbmcgbmV0d29yayBkaXJlY3RvcmllcykuICBJdCB3aWxsIG5vdAorCWV4Y2x1ZGUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb3IgYSBHSVRfRElSIHNldCBvbiB0aGUKKwljb21tYW5kIGxpbmUgb3IgaW4gdGhlIGVudmlyb25tZW50LiAgTm9ybWFsbHksIEdpdCBoYXMgdG8gcmVhZAorCXRoZSBlbnRyaWVzIGluIHRoaXMgbGlzdCBhbmQgcmVzb2x2ZSBhbnkgc3ltbGluayB0aGF0CisJbWlnaHQgYmUgcHJlc2VudCBpbiBvcmRlciB0byBjb21wYXJlIHRoZW0gd2l0aCB0aGUgY3VycmVudAorCWRpcmVjdG9yeS4gIEhvd2V2ZXIsIGlmIGV2ZW4gdGhpcyBhY2Nlc3MgaXMgc2xvdywgeW91CisJY2FuIGFkZCBhbiBlbXB0eSBlbnRyeSB0byB0aGUgbGlzdCB0byB0ZWxsIEdpdCB0aGF0IHRoZQorCXN1YnNlcXVlbnQgZW50cmllcyBhcmUgbm90IHN5bWxpbmtzIGFuZCBuZWVkbid0IGJlIHJlc29sdmVkOworCWUuZy4sCisJYEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPS9tYXliZS9zeW1saW5rOjovdmVyeS9zbG93L25vbi9zeW1saW5rYC4KKworYEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU1gOjoKKwlXaGVuIHJ1biBpbiBhIGRpcmVjdG9yeSB0aGF0IGRvZXMgbm90IGhhdmUgIi5naXQiIHJlcG9zaXRvcnkKKwlkaXJlY3RvcnksIEdpdCB0cmllcyB0byBmaW5kIHN1Y2ggYSBkaXJlY3RvcnkgaW4gdGhlIHBhcmVudAorCWRpcmVjdG9yaWVzIHRvIGZpbmQgdGhlIHRvcCBvZiB0aGUgd29ya2luZyB0cmVlLCBidXQgYnkgZGVmYXVsdCBpdAorCWRvZXMgbm90IGNyb3NzIGZpbGVzeXN0ZW0gYm91bmRhcmllcy4gIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUKKwljYW4gYmUgc2V0IHRvIHRydWUgdG8gdGVsbCBHaXQgbm90IHRvIHN0b3AgYXQgZmlsZXN5c3RlbQorCWJvdW5kYXJpZXMuICBMaWtlIGBHSVRfQ0VJTElOR19ESVJFQ1RPUklFU2AsIHRoaXMgd2lsbCBub3QgYWZmZWN0CisJYW4gZXhwbGljaXQgcmVwb3NpdG9yeSBkaXJlY3Rvcnkgc2V0IHZpYSBgR0lUX0RJUmAgb3Igb24gdGhlCisJY29tbWFuZCBsaW5lLgorCitgR0lUX0NPTU1PTl9ESVJgOjoKKwlJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byBhIHBhdGgsIG5vbi13b3JrdHJlZSBmaWxlcyB0aGF0IGFyZQorCW5vcm1hbGx5IGluICRHSVRfRElSIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGlzIHBhdGgKKwlpbnN0ZWFkLiBXb3JrdHJlZS1zcGVjaWZpYyBmaWxlcyBzdWNoIGFzIEhFQUQgb3IgaW5kZXggYXJlCisJdGFrZW4gZnJvbSAkR0lUX0RJUi4gU2VlIGxpbmtnaXQ6Z2l0cmVwb3NpdG9yeS1sYXlvdXRbNV0gYW5kCisJbGlua2dpdDpnaXQtd29ya3RyZWVbMV0gZm9yCisJZGV0YWlscy4gVGhpcyB2YXJpYWJsZSBoYXMgbG93ZXIgcHJlY2VkZW5jZSB0aGFuIG90aGVyIHBhdGgKKwl2YXJpYWJsZXMgc3VjaCBhcyBHSVRfSU5ERVhfRklMRSwgR0lUX09CSkVDVF9ESVJFQ1RPUlkuLi4KKworYEdJVF9ERUZBVUxUX0hBU0hfQUxHT1JJVEhNYDo6CisJSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQsIHRoZSBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIGZvciBuZXcKKwlyZXBvc2l0b3JpZXMgd2lsbCBiZSBzZXQgdG8gdGhpcyB2YWx1ZS4gVGhpcyB2YWx1ZSBpcyBjdXJyZW50bHkKKwlpZ25vcmVkIHdoZW4gY2xvbmluZzsgdGhlIHNldHRpbmcgb2YgdGhlIHJlbW90ZSByZXBvc2l0b3J5CisJaXMgdXNlZCBpbnN0ZWFkLiBUaGUgZGVmYXVsdCBpcyAic2hhMSIuCisKK0dpdCBDb21taXRzCit+fn5+fn5+fn5+fgorYEdJVF9BVVRIT1JfTkFNRWA6OgorCVRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIHVzZWQgaW4gdGhlIGF1dGhvciBpZGVudGl0eSB3aGVuIGNyZWF0aW5nIGNvbW1pdCBvcgorCXRhZyBvYmplY3RzLCBvciB3aGVuIHdyaXRpbmcgcmVmbG9ncy4gT3ZlcnJpZGVzIHRoZSBgdXNlci5uYW1lYCBhbmQKKwlgYXV0aG9yLm5hbWVgIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisKK2BHSVRfQVVUSE9SX0VNQUlMYDo6CisJVGhlIGVtYWlsIGFkZHJlc3MgdXNlZCBpbiB0aGUgYXV0aG9yIGlkZW50aXR5IHdoZW4gY3JlYXRpbmcgY29tbWl0IG9yCisJdGFnIG9iamVjdHMsIG9yIHdoZW4gd3JpdGluZyByZWZsb2dzLiBPdmVycmlkZXMgdGhlIGB1c2VyLmVtYWlsYCBhbmQKKwlgYXV0aG9yLmVtYWlsYCBjb25maWd1cmF0aW9uIHNldHRpbmdzLgorCitgR0lUX0FVVEhPUl9EQVRFYDo6CisJVGhlIGRhdGUgdXNlZCBmb3IgdGhlIGF1dGhvciBpZGVudGl0eSB3aGVuIGNyZWF0aW5nIGNvbW1pdCBvciB0YWcgb2JqZWN0cywgb3IKKwl3aGVuIHdyaXRpbmcgcmVmbG9ncy4gU2VlIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBmb3IgdmFsaWQgZm9ybWF0cy4KKworYEdJVF9DT01NSVRURVJfTkFNRWA6OgorCVRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIHVzZWQgaW4gdGhlIGNvbW1pdHRlciBpZGVudGl0eSB3aGVuIGNyZWF0aW5nIGNvbW1pdCBvcgorCXRhZyBvYmplY3RzLCBvciB3aGVuIHdyaXRpbmcgcmVmbG9ncy4gT3ZlcnJpZGVzIHRoZSBgdXNlci5uYW1lYCBhbmQKKwlgY29tbWl0dGVyLm5hbWVgIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisKK2BHSVRfQ09NTUlUVEVSX0VNQUlMYDo6CisJVGhlIGVtYWlsIGFkZHJlc3MgdXNlZCBpbiB0aGUgYXV0aG9yIGlkZW50aXR5IHdoZW4gY3JlYXRpbmcgY29tbWl0IG9yCisJdGFnIG9iamVjdHMsIG9yIHdoZW4gd3JpdGluZyByZWZsb2dzLiBPdmVycmlkZXMgdGhlIGB1c2VyLmVtYWlsYCBhbmQKKwlgY29tbWl0dGVyLmVtYWlsYCBjb25maWd1cmF0aW9uIHNldHRpbmdzLgorCitgR0lUX0NPTU1JVFRFUl9EQVRFYDo6CisJVGhlIGRhdGUgdXNlZCBmb3IgdGhlIGNvbW1pdHRlciBpZGVudGl0eSB3aGVuIGNyZWF0aW5nIGNvbW1pdCBvciB0YWcgb2JqZWN0cywgb3IKKwl3aGVuIHdyaXRpbmcgcmVmbG9ncy4gU2VlIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBmb3IgdmFsaWQgZm9ybWF0cy4KKworYEVNQUlMYDo6CisJVGhlIGVtYWlsIGFkZHJlc3MgdXNlZCBpbiB0aGUgYXV0aG9yIGFuZCBjb21taXR0ZXIgaWRlbnRpdGllcyBpZiBubyBvdGhlcgorCXJlbGV2YW50IGVudmlyb25tZW50IHZhcmlhYmxlIG9yIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBoYXMgYmVlbiBzZXQuCisKK0dpdCBEaWZmcworfn5+fn5+fn5+CitgR0lUX0RJRkZfT1BUU2A6OgorCU9ubHkgdmFsaWQgc2V0dGluZyBpcyAiLS11bmlmaWVkPT8/IiBvciAiLXU/PyIgdG8gc2V0IHRoZQorCW51bWJlciBvZiBjb250ZXh0IGxpbmVzIHNob3duIHdoZW4gYSB1bmlmaWVkIGRpZmYgaXMgY3JlYXRlZC4KKwlUaGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBhbnkgIi1VIiBvciAiLS11bmlmaWVkIiBvcHRpb24KKwl2YWx1ZSBwYXNzZWQgb24gdGhlIEdpdCBkaWZmIGNvbW1hbmQgbGluZS4KKworYEdJVF9FWFRFUk5BTF9ESUZGYDo6CisJV2hlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYEdJVF9FWFRFUk5BTF9ESUZGYCBpcyBzZXQsIHRoZQorCXByb2dyYW0gbmFtZWQgYnkgaXQgaXMgY2FsbGVkLCBpbnN0ZWFkIG9mIHRoZSBkaWZmIGludm9jYXRpb24KKwlkZXNjcmliZWQgYWJvdmUuICBGb3IgYSBwYXRoIHRoYXQgaXMgYWRkZWQsIHJlbW92ZWQsIG9yIG1vZGlmaWVkLAorCWBHSVRfRVhURVJOQUxfRElGRmAgaXMgY2FsbGVkIHdpdGggNyBwYXJhbWV0ZXJzOgorCisJcGF0aCBvbGQtZmlsZSBvbGQtaGV4IG9sZC1tb2RlIG5ldy1maWxlIG5ldy1oZXggbmV3LW1vZGUKKysKK3doZXJlOgorCisJPG9sZHxuZXc+LWZpbGU6OiBhcmUgZmlsZXMgR0lUX0VYVEVSTkFMX0RJRkYgY2FuIHVzZSB0byByZWFkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzIG9mIDxvbGR8bmV3PiwKKwk8b2xkfG5ldz4taGV4OjogYXJlIHRoZSA0MC1oZXhkaWdpdCBTSEEtMSBoYXNoZXMsCisJPG9sZHxuZXc+LW1vZGU6OiBhcmUgdGhlIG9jdGFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmaWxlIG1vZGVzLgorKworVGhlIGZpbGUgcGFyYW1ldGVycyBjYW4gcG9pbnQgYXQgdGhlIHVzZXIncyB3b3JraW5nIGZpbGUKKyhlLmcuIGBuZXctZmlsZWAgaW4gImdpdC1kaWZmLWZpbGVzIiksIGAvZGV2L251bGxgIChlLmcuIGBvbGQtZmlsZWAKK3doZW4gYSBuZXcgZmlsZSBpcyBhZGRlZCksIG9yIGEgdGVtcG9yYXJ5IGZpbGUgKGUuZy4gYG9sZC1maWxlYCBpbiB0aGUKK2luZGV4KS4gIGBHSVRfRVhURVJOQUxfRElGRmAgc2hvdWxkIG5vdCB3b3JyeSBhYm91dCB1bmxpbmtpbmcgdGhlCit0ZW1wb3JhcnkgZmlsZSAtLS0gaXQgaXMgcmVtb3ZlZCB3aGVuIGBHSVRfRVhURVJOQUxfRElGRmAgZXhpdHMuCisrCitGb3IgYSBwYXRoIHRoYXQgaXMgdW5tZXJnZWQsIGBHSVRfRVhURVJOQUxfRElGRmAgaXMgY2FsbGVkIHdpdGggMQorcGFyYW1ldGVyLCA8cGF0aD4uCisrCitGb3IgZWFjaCBwYXRoIGBHSVRfRVhURVJOQUxfRElGRmAgaXMgY2FsbGVkLCB0d28gZW52aXJvbm1lbnQgdmFyaWFibGVzLAorYEdJVF9ESUZGX1BBVEhfQ09VTlRFUmAgYW5kIGBHSVRfRElGRl9QQVRIX1RPVEFMYCBhcmUgc2V0LgorCitgR0lUX0RJRkZfUEFUSF9DT1VOVEVSYDo6CisJQSAxLWJhc2VkIGNvdW50ZXIgaW5jcmVtZW50ZWQgYnkgb25lIGZvciBldmVyeSBwYXRoLgorCitgR0lUX0RJRkZfUEFUSF9UT1RBTGA6OgorCVRoZSB0b3RhbCBudW1iZXIgb2YgcGF0aHMuCisKK290aGVyCit+fn5+fgorYEdJVF9NRVJHRV9WRVJCT1NJVFlgOjoKKwlBIG51bWJlciBjb250cm9sbGluZyB0aGUgYW1vdW50IG9mIG91dHB1dCBzaG93biBieQorCXRoZSByZWN1cnNpdmUgbWVyZ2Ugc3RyYXRlZ3kuICBPdmVycmlkZXMgbWVyZ2UudmVyYm9zaXR5LgorCVNlZSBsaW5rZ2l0OmdpdC1tZXJnZVsxXQorCitgR0lUX1BBR0VSYDo6CisJVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBvdmVycmlkZXMgYCRQQUdFUmAuIElmIGl0IGlzIHNldAorCXRvIGFuIGVtcHR5IHN0cmluZyBvciB0byB0aGUgdmFsdWUgImNhdCIsIEdpdCB3aWxsIG5vdCBsYXVuY2gKKwlhIHBhZ2VyLiAgU2VlIGFsc28gdGhlIGBjb3JlLnBhZ2VyYCBvcHRpb24gaW4KKwlsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKK2BHSVRfUFJPR1JFU1NfREVMQVlgOjoKKwlBIG51bWJlciBjb250cm9sbGluZyBob3cgbWFueSBzZWNvbmRzIHRvIGRlbGF5IGJlZm9yZSBzaG93aW5nCisJb3B0aW9uYWwgcHJvZ3Jlc3MgaW5kaWNhdG9ycy4gRGVmYXVsdHMgdG8gMi4KKworYEdJVF9FRElUT1JgOjoKKwlUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlcyBgJEVESVRPUmAgYW5kIGAkVklTVUFMYC4KKwlJdCBpcyB1c2VkIGJ5IHNldmVyYWwgR2l0IGNvbW1hbmRzIHdoZW4sIG9uIGludGVyYWN0aXZlIG1vZGUsCisJYW4gZWRpdG9yIGlzIHRvIGJlIGxhdW5jaGVkLiBTZWUgYWxzbyBsaW5rZ2l0OmdpdC12YXJbMV0KKwlhbmQgdGhlIGBjb3JlLmVkaXRvcmAgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworYEdJVF9TU0hgOjoKK2BHSVRfU1NIX0NPTU1BTkRgOjoKKwlJZiBlaXRoZXIgb2YgdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGlzIHNldCB0aGVuICdnaXQgZmV0Y2gnCisJYW5kICdnaXQgcHVzaCcgd2lsbCB1c2UgdGhlIHNwZWNpZmllZCBjb21tYW5kIGluc3RlYWQgb2YgJ3NzaCcKKwl3aGVuIHRoZXkgbmVlZCB0byBjb25uZWN0IHRvIGEgcmVtb3RlIHN5c3RlbS4KKwlUaGUgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBjb25maWd1cmVkIGNvbW1hbmQgYXJlCisJZGV0ZXJtaW5lZCBieSB0aGUgc3NoIHZhcmlhbnQuICBTZWUgYHNzaC52YXJpYW50YCBvcHRpb24gaW4KKwlsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIGRldGFpbHMuCisrCitgJEdJVF9TU0hfQ09NTUFORGAgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGAkR0lUX1NTSGAsIGFuZCBpcyBpbnRlcnByZXRlZAorYnkgdGhlIHNoZWxsLCB3aGljaCBhbGxvd3MgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gYmUgaW5jbHVkZWQuCitgJEdJVF9TU0hgIG9uIHRoZSBvdGhlciBoYW5kIG11c3QgYmUganVzdCB0aGUgcGF0aCB0byBhIHByb2dyYW0KKyh3aGljaCBjYW4gYmUgYSB3cmFwcGVyIHNoZWxsIHNjcmlwdCwgaWYgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlCituZWVkZWQpLgorKworVXN1YWxseSBpdCBpcyBlYXNpZXIgdG8gY29uZmlndXJlIGFueSBkZXNpcmVkIG9wdGlvbnMgdGhyb3VnaCB5b3VyCitwZXJzb25hbCBgLnNzaC9jb25maWdgIGZpbGUuICBQbGVhc2UgY29uc3VsdCB5b3VyIHNzaCBkb2N1bWVudGF0aW9uCitmb3IgZnVydGhlciBkZXRhaWxzLgorCitgR0lUX1NTSF9WQVJJQU5UYDo6CisJSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGl0IG92ZXJyaWRlcyBHaXQncyBhdXRvZGV0ZWN0aW9uCisJd2hldGhlciBgR0lUX1NTSGAvYEdJVF9TU0hfQ09NTUFORGAvYGNvcmUuc3NoQ29tbWFuZGAgcmVmZXIgdG8gT3BlblNTSCwKKwlwbGluayBvciB0b3J0b2lzZXBsaW5rLiBUaGlzIHZhcmlhYmxlIG92ZXJyaWRlcyB0aGUgY29uZmlnIHNldHRpbmcKKwlgc3NoLnZhcmlhbnRgIHRoYXQgc2VydmVzIHRoZSBzYW1lIHB1cnBvc2UuCisKK2BHSVRfQVNLUEFTU2A6OgorCUlmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCB0aGVuIEdpdCBjb21tYW5kcyB3aGljaCBuZWVkIHRvCisJYWNxdWlyZSBwYXNzd29yZHMgb3IgcGFzc3BocmFzZXMgKGUuZy4gZm9yIEhUVFAgb3IgSU1BUCBhdXRoZW50aWNhdGlvbikKKwl3aWxsIGNhbGwgdGhpcyBwcm9ncmFtIHdpdGggYSBzdWl0YWJsZSBwcm9tcHQgYXMgY29tbWFuZC1saW5lIGFyZ3VtZW50CisJYW5kIHJlYWQgdGhlIHBhc3N3b3JkIGZyb20gaXRzIFNURE9VVC4gU2VlIGFsc28gdGhlIGBjb3JlLmFza1Bhc3NgCisJb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworYEdJVF9URVJNSU5BTF9QUk9NUFRgOjoKKwlJZiB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCB0byBgMGAsIGdpdCB3aWxsIG5vdCBwcm9tcHQKKwlvbiB0aGUgdGVybWluYWwgKGUuZy4sIHdoZW4gYXNraW5nIGZvciBIVFRQIGF1dGhlbnRpY2F0aW9uKS4KKworYEdJVF9DT05GSUdfTk9TWVNURU1gOjoKKwlXaGV0aGVyIHRvIHNraXAgcmVhZGluZyBzZXR0aW5ncyBmcm9tIHRoZSBzeXN0ZW0td2lkZQorCWAkKHByZWZpeCkvZXRjL2dpdGNvbmZpZ2AgZmlsZS4gIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuCisJYmUgdXNlZCBhbG9uZyB3aXRoIGAkSE9NRWAgYW5kIGAkWERHX0NPTkZJR19IT01FYCB0byBjcmVhdGUgYQorCXByZWRpY3RhYmxlIGVudmlyb25tZW50IGZvciBhIHBpY2t5IHNjcmlwdCwgb3IgeW91IGNhbiBzZXQgaXQKKwl0ZW1wb3JhcmlseSB0byBhdm9pZCB1c2luZyBhIGJ1Z2d5IGAvZXRjL2dpdGNvbmZpZ2AgZmlsZSB3aGlsZQorCXdhaXRpbmcgZm9yIHNvbWVvbmUgd2l0aCBzdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIGZpeCBpdC4KKworYEdJVF9GTFVTSGA6OgorCUlmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvICIxIiwgdGhlbiBjb21tYW5kcyBzdWNoCisJYXMgJ2dpdCBibGFtZScgKGluIGluY3JlbWVudGFsIG1vZGUpLCAnZ2l0IHJldi1saXN0JywgJ2dpdCBsb2cnLAorCSdnaXQgY2hlY2stYXR0cicgYW5kICdnaXQgY2hlY2staWdub3JlJyB3aWxsCisJZm9yY2UgYSBmbHVzaCBvZiB0aGUgb3V0cHV0IHN0cmVhbSBhZnRlciBlYWNoIHJlY29yZCBoYXZlIGJlZW4KKwlmbHVzaGVkLiBJZiB0aGlzCisJdmFyaWFibGUgaXMgc2V0IHRvICIwIiwgdGhlIG91dHB1dCBvZiB0aGVzZSBjb21tYW5kcyB3aWxsIGJlIGRvbmUKKwl1c2luZyBjb21wbGV0ZWx5IGJ1ZmZlcmVkIEkvTy4gICBJZiB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzCisJbm90IHNldCwgR2l0IHdpbGwgY2hvb3NlIGJ1ZmZlcmVkIG9yIHJlY29yZC1vcmllbnRlZCBmbHVzaGluZworCWJhc2VkIG9uIHdoZXRoZXIgc3Rkb3V0IGFwcGVhcnMgdG8gYmUgcmVkaXJlY3RlZCB0byBhIGZpbGUgb3Igbm90LgorCitgR0lUX1RSQUNFYDo6CisJRW5hYmxlcyBnZW5lcmFsIHRyYWNlIG1lc3NhZ2VzLCBlLmcuIGFsaWFzIGV4cGFuc2lvbiwgYnVpbHQtaW4KKwljb21tYW5kIGV4ZWN1dGlvbiBhbmQgZXh0ZXJuYWwgY29tbWFuZCBleGVjdXRpb24uCisrCitJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byAiMSIsICIyIiBvciAidHJ1ZSIgKGNvbXBhcmlzb24KK2lzIGNhc2UgaW5zZW5zaXRpdmUpLCB0cmFjZSBtZXNzYWdlcyB3aWxsIGJlIHByaW50ZWQgdG8KK3N0ZGVyci4KKysKK0lmIHRoZSB2YXJpYWJsZSBpcyBzZXQgdG8gYW4gaW50ZWdlciB2YWx1ZSBncmVhdGVyIHRoYW4gMgorYW5kIGxvd2VyIHRoYW4gMTAgKHN0cmljdGx5KSB0aGVuIEdpdCB3aWxsIGludGVycHJldCB0aGlzCit2YWx1ZSBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciBhbmQgd2lsbCB0cnkgdG8gd3JpdGUgdGhlCit0cmFjZSBtZXNzYWdlcyBpbnRvIHRoaXMgZmlsZSBkZXNjcmlwdG9yLgorKworQWx0ZXJuYXRpdmVseSwgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCB0byBhbiBhYnNvbHV0ZSBwYXRoCisoc3RhcnRpbmcgd2l0aCBhICcvJyBjaGFyYWN0ZXIpLCBHaXQgd2lsbCBpbnRlcnByZXQgdGhpcworYXMgYSBmaWxlIHBhdGggYW5kIHdpbGwgdHJ5IHRvIGFwcGVuZCB0aGUgdHJhY2UgbWVzc2FnZXMKK3RvIGl0LgorKworVW5zZXR0aW5nIHRoZSB2YXJpYWJsZSwgb3Igc2V0dGluZyBpdCB0byBlbXB0eSwgIjAiIG9yCisiZmFsc2UiIChjYXNlIGluc2Vuc2l0aXZlKSBkaXNhYmxlcyB0cmFjZSBtZXNzYWdlcy4KKworYEdJVF9UUkFDRV9GU01PTklUT1JgOjoKKwlFbmFibGVzIHRyYWNlIG1lc3NhZ2VzIGZvciB0aGUgZmlsZXN5c3RlbSBtb25pdG9yIGV4dGVuc2lvbi4KKwlTZWUgYEdJVF9UUkFDRWAgZm9yIGF2YWlsYWJsZSB0cmFjZSBvdXRwdXQgb3B0aW9ucy4KKworYEdJVF9UUkFDRV9QQUNLX0FDQ0VTU2A6OgorCUVuYWJsZXMgdHJhY2UgbWVzc2FnZXMgZm9yIGFsbCBhY2Nlc3NlcyB0byBhbnkgcGFja3MuIEZvciBlYWNoCisJYWNjZXNzLCB0aGUgcGFjayBmaWxlIG5hbWUgYW5kIGFuIG9mZnNldCBpbiB0aGUgcGFjayBpcworCXJlY29yZGVkLiBUaGlzIG1heSBiZSBoZWxwZnVsIGZvciB0cm91Ymxlc2hvb3Rpbmcgc29tZQorCXBhY2stcmVsYXRlZCBwZXJmb3JtYW5jZSBwcm9ibGVtcy4KKwlTZWUgYEdJVF9UUkFDRWAgZm9yIGF2YWlsYWJsZSB0cmFjZSBvdXRwdXQgb3B0aW9ucy4KKworYEdJVF9UUkFDRV9QQUNLRVRgOjoKKwlFbmFibGVzIHRyYWNlIG1lc3NhZ2VzIGZvciBhbGwgcGFja2V0cyBjb21pbmcgaW4gb3Igb3V0IG9mIGEKKwlnaXZlbiBwcm9ncmFtLiBUaGlzIGNhbiBoZWxwIHdpdGggZGVidWdnaW5nIG9iamVjdCBuZWdvdGlhdGlvbgorCW9yIG90aGVyIHByb3RvY29sIGlzc3Vlcy4gVHJhY2luZyBpcyB0dXJuZWQgb2ZmIGF0IGEgcGFja2V0CisJc3RhcnRpbmcgd2l0aCAiUEFDSyIgKGJ1dCBzZWUgYEdJVF9UUkFDRV9QQUNLRklMRWAgYmVsb3cpLgorCVNlZSBgR0lUX1RSQUNFYCBmb3IgYXZhaWxhYmxlIHRyYWNlIG91dHB1dCBvcHRpb25zLgorCitgR0lUX1RSQUNFX1BBQ0tGSUxFYDo6CisJRW5hYmxlcyB0cmFjaW5nIG9mIHBhY2tmaWxlcyBzZW50IG9yIHJlY2VpdmVkIGJ5IGEKKwlnaXZlbiBwcm9ncmFtLiBVbmxpa2Ugb3RoZXIgdHJhY2Ugb3V0cHV0LCB0aGlzIHRyYWNlIGlzCisJdmVyYmF0aW06IG5vIGhlYWRlcnMsIGFuZCBubyBxdW90aW5nIG9mIGJpbmFyeSBkYXRhLiBZb3UgYWxtb3N0CisJY2VydGFpbmx5IHdhbnQgdG8gZGlyZWN0IGludG8gYSBmaWxlIChlLmcuLAorCWBHSVRfVFJBQ0VfUEFDS0ZJTEU9L3RtcC9teS5wYWNrYCkgcmF0aGVyIHRoYW4gZGlzcGxheWluZyBpdCBvbgorCXRoZSB0ZXJtaW5hbCBvciBtaXhpbmcgaXQgd2l0aCBvdGhlciB0cmFjZSBvdXRwdXQuCisrCitOb3RlIHRoYXQgdGhpcyBpcyBjdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIGNsaWVudCBzaWRlCitvZiBjbG9uZXMgYW5kIGZldGNoZXMuCisKK2BHSVRfVFJBQ0VfUEVSRk9STUFOQ0VgOjoKKwlFbmFibGVzIHBlcmZvcm1hbmNlIHJlbGF0ZWQgdHJhY2UgbWVzc2FnZXMsIGUuZy4gdG90YWwgZXhlY3V0aW9uCisJdGltZSBvZiBlYWNoIEdpdCBjb21tYW5kLgorCVNlZSBgR0lUX1RSQUNFYCBmb3IgYXZhaWxhYmxlIHRyYWNlIG91dHB1dCBvcHRpb25zLgorCitgR0lUX1RSQUNFX1NFVFVQYDo6CisJRW5hYmxlcyB0cmFjZSBtZXNzYWdlcyBwcmludGluZyB0aGUgLmdpdCwgd29ya2luZyB0cmVlIGFuZCBjdXJyZW50CisJd29ya2luZyBkaXJlY3RvcnkgYWZ0ZXIgR2l0IGhhcyBjb21wbGV0ZWQgaXRzIHNldHVwIHBoYXNlLgorCVNlZSBgR0lUX1RSQUNFYCBmb3IgYXZhaWxhYmxlIHRyYWNlIG91dHB1dCBvcHRpb25zLgorCitgR0lUX1RSQUNFX1NIQUxMT1dgOjoKKwlFbmFibGVzIHRyYWNlIG1lc3NhZ2VzIHRoYXQgY2FuIGhlbHAgZGVidWdnaW5nIGZldGNoaW5nIC8KKwljbG9uaW5nIG9mIHNoYWxsb3cgcmVwb3NpdG9yaWVzLgorCVNlZSBgR0lUX1RSQUNFYCBmb3IgYXZhaWxhYmxlIHRyYWNlIG91dHB1dCBvcHRpb25zLgorCitgR0lUX1RSQUNFX0NVUkxgOjoKKwlFbmFibGVzIGEgY3VybCBmdWxsIHRyYWNlIGR1bXAgb2YgYWxsIGluY29taW5nIGFuZCBvdXRnb2luZyBkYXRhLAorCWluY2x1ZGluZyBkZXNjcmlwdGl2ZSBpbmZvcm1hdGlvbiwgb2YgdGhlIGdpdCB0cmFuc3BvcnQgcHJvdG9jb2wuCisJVGhpcyBpcyBzaW1pbGFyIHRvIGRvaW5nIGN1cmwgYC0tdHJhY2UtYXNjaWlgIG9uIHRoZSBjb21tYW5kIGxpbmUuCisJVGhpcyBvcHRpb24gb3ZlcnJpZGVzIHNldHRpbmcgdGhlIGBHSVRfQ1VSTF9WRVJCT1NFYCBlbnZpcm9ubWVudAorCXZhcmlhYmxlLgorCVNlZSBgR0lUX1RSQUNFYCBmb3IgYXZhaWxhYmxlIHRyYWNlIG91dHB1dCBvcHRpb25zLgorCitgR0lUX1RSQUNFX0NVUkxfTk9fREFUQWA6OgorCVdoZW4gYSBjdXJsIHRyYWNlIGlzIGVuYWJsZWQgKHNlZSBgR0lUX1RSQUNFX0NVUkxgIGFib3ZlKSwgZG8gbm90IGR1bXAKKwlkYXRhICh0aGF0IGlzLCBvbmx5IGR1bXAgaW5mbyBsaW5lcyBhbmQgaGVhZGVycykuCisKK2BHSVRfVFJBQ0UyYDo6CisJRW5hYmxlcyBtb3JlIGRldGFpbGVkIHRyYWNlIG1lc3NhZ2VzIGZyb20gdGhlICJ0cmFjZTIiIGxpYnJhcnkuCisJT3V0cHV0IGZyb20gYEdJVF9UUkFDRTJgIGlzIGEgc2ltcGxlIHRleHQtYmFzZWQgZm9ybWF0IGZvciBodW1hbgorCXJlYWRhYmlsaXR5LgorKworSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gIjEiLCAiMiIgb3IgInRydWUiIChjb21wYXJpc29uCitpcyBjYXNlIGluc2Vuc2l0aXZlKSwgdHJhY2UgbWVzc2FnZXMgd2lsbCBiZSBwcmludGVkIHRvCitzdGRlcnIuCisrCitJZiB0aGUgdmFyaWFibGUgaXMgc2V0IHRvIGFuIGludGVnZXIgdmFsdWUgZ3JlYXRlciB0aGFuIDIKK2FuZCBsb3dlciB0aGFuIDEwIChzdHJpY3RseSkgdGhlbiBHaXQgd2lsbCBpbnRlcnByZXQgdGhpcwordmFsdWUgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgYW5kIHdpbGwgdHJ5IHRvIHdyaXRlIHRoZQordHJhY2UgbWVzc2FnZXMgaW50byB0aGlzIGZpbGUgZGVzY3JpcHRvci4KKysKK0FsdGVybmF0aXZlbHksIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgdG8gYW4gYWJzb2x1dGUgcGF0aAorKHN0YXJ0aW5nIHdpdGggYSAnLycgY2hhcmFjdGVyKSwgR2l0IHdpbGwgaW50ZXJwcmV0IHRoaXMKK2FzIGEgZmlsZSBwYXRoIGFuZCB3aWxsIHRyeSB0byBhcHBlbmQgdGhlIHRyYWNlIG1lc3NhZ2VzCit0byBpdC4gIElmIHRoZSBwYXRoIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBhIGRpcmVjdG9yeSwgdGhlCit0cmFjZSBtZXNzYWdlcyB3aWxsIGJlIHdyaXR0ZW4gdG8gZmlsZXMgKG9uZSBwZXIgcHJvY2VzcykKK2luIHRoYXQgZGlyZWN0b3J5LCBuYW1lZCBhY2NvcmRpbmcgdG8gdGhlIGxhc3QgY29tcG9uZW50CitvZiB0aGUgU0lEIGFuZCBhbiBvcHRpb25hbCBjb3VudGVyICh0byBhdm9pZCBmaWxlbmFtZQorY29sbGlzaW9ucykuCisrCitJbiBhZGRpdGlvbiwgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCB0bworYGFmX3VuaXg6Wzxzb2NrZXRfdHlwZT46XTxhYnNvbHV0ZS1wYXRobmFtZT5gLCBHaXQgd2lsbCB0cnkKK3RvIG9wZW4gdGhlIHBhdGggYXMgYSBVbml4IERvbWFpbiBTb2NrZXQuICBUaGUgc29ja2V0IHR5cGUKK2NhbiBiZSBlaXRoZXIgYHN0cmVhbWAgb3IgYGRncmFtYC4KKysKK1Vuc2V0dGluZyB0aGUgdmFyaWFibGUsIG9yIHNldHRpbmcgaXQgdG8gZW1wdHksICIwIiBvcgorImZhbHNlIiAoY2FzZSBpbnNlbnNpdGl2ZSkgZGlzYWJsZXMgdHJhY2UgbWVzc2FnZXMuCisrCitTZWUgbGluazp0ZWNobmljYWwvYXBpLXRyYWNlMi5odG1sW1RyYWNlMiBkb2N1bWVudGF0aW9uXQorZm9yIGZ1bGwgZGV0YWlscy4KKworCitgR0lUX1RSQUNFMl9FVkVOVGA6OgorCVRoaXMgc2V0dGluZyB3cml0ZXMgYSBKU09OLWJhc2VkIGZvcm1hdCB0aGF0IGlzIHN1aXRlZCBmb3IgbWFjaGluZQorCWludGVycHJldGF0aW9uLgorCVNlZSBgR0lUX1RSQUNFMmAgZm9yIGF2YWlsYWJsZSB0cmFjZSBvdXRwdXQgb3B0aW9ucyBhbmQKKwlsaW5rOnRlY2huaWNhbC9hcGktdHJhY2UyLmh0bWxbVHJhY2UyIGRvY3VtZW50YXRpb25dIGZvciBmdWxsIGRldGFpbHMuCisKK2BHSVRfVFJBQ0UyX1BFUkZgOjoKKwlJbiBhZGRpdGlvbiB0byB0aGUgdGV4dC1iYXNlZCBtZXNzYWdlcyBhdmFpbGFibGUgaW4gYEdJVF9UUkFDRTJgLCB0aGlzCisJc2V0dGluZyB3cml0ZXMgYSBjb2x1bW4tYmFzZWQgZm9ybWF0IGZvciB1bmRlcnN0YW5kaW5nIG5lc3RpbmcKKwlyZWdpb25zLgorCVNlZSBgR0lUX1RSQUNFMmAgZm9yIGF2YWlsYWJsZSB0cmFjZSBvdXRwdXQgb3B0aW9ucyBhbmQKKwlsaW5rOnRlY2huaWNhbC9hcGktdHJhY2UyLmh0bWxbVHJhY2UyIGRvY3VtZW50YXRpb25dIGZvciBmdWxsIGRldGFpbHMuCisKK2BHSVRfUkVEQUNUX0NPT0tJRVNgOjoKKwlUaGlzIGNhbiBiZSBzZXQgdG8gYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzdHJpbmdzLiBXaGVuIGEgY3VybCB0cmFjZQorCWlzIGVuYWJsZWQgKHNlZSBgR0lUX1RSQUNFX0NVUkxgIGFib3ZlKSwgd2hlbmV2ZXIgYSAiQ29va2llczoiIGhlYWRlcgorCXNlbnQgYnkgdGhlIGNsaWVudCBpcyBkdW1wZWQsIHZhbHVlcyBvZiBjb29raWVzIHdob3NlIGtleSBpcyBpbiB0aGF0CisJbGlzdCAoY2FzZS1zZW5zaXRpdmUpIGFyZSByZWRhY3RlZC4KKworYEdJVF9MSVRFUkFMX1BBVEhTUEVDU2A6OgorCVNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byBgMWAgd2lsbCBjYXVzZSBHaXQgdG8gdHJlYXQgYWxsCisJcGF0aHNwZWNzIGxpdGVyYWxseSwgcmF0aGVyIHRoYW4gYXMgZ2xvYiBwYXR0ZXJucy4gRm9yIGV4YW1wbGUsCisJcnVubmluZyBgR0lUX0xJVEVSQUxfUEFUSFNQRUNTPTEgZ2l0IGxvZyAtLSAnKi5jJ2Agd2lsbCBzZWFyY2gKKwlmb3IgY29tbWl0cyB0aGF0IHRvdWNoIHRoZSBwYXRoIGAqLmNgLCBub3QgYW55IHBhdGhzIHRoYXQgdGhlCisJZ2xvYiBgKi5jYCBtYXRjaGVzLiBZb3UgbWlnaHQgd2FudCB0aGlzIGlmIHlvdSBhcmUgZmVlZGluZworCWxpdGVyYWwgcGF0aHMgdG8gR2l0IChlLmcuLCBwYXRocyBwcmV2aW91c2x5IGdpdmVuIHRvIHlvdSBieQorCWBnaXQgbHMtdHJlZWAsIGAtLXJhd2AgZGlmZiBvdXRwdXQsIGV0YykuCisKK2BHSVRfR0xPQl9QQVRIU1BFQ1NgOjoKKwlTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gYDFgIHdpbGwgY2F1c2UgR2l0IHRvIHRyZWF0IGFsbAorCXBhdGhzcGVjcyBhcyBnbG9iIHBhdHRlcm5zIChha2EgImdsb2IiIG1hZ2ljKS4KKworYEdJVF9OT0dMT0JfUEFUSFNQRUNTYDo6CisJU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIGAxYCB3aWxsIGNhdXNlIEdpdCB0byB0cmVhdCBhbGwKKwlwYXRoc3BlY3MgYXMgbGl0ZXJhbCAoYWthICJsaXRlcmFsIiBtYWdpYykuCisKK2BHSVRfSUNBU0VfUEFUSFNQRUNTYDo6CisJU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIGAxYCB3aWxsIGNhdXNlIEdpdCB0byB0cmVhdCBhbGwKKwlwYXRoc3BlY3MgYXMgY2FzZS1pbnNlbnNpdGl2ZS4KKworYEdJVF9SRUZMT0dfQUNUSU9OYDo6CisJV2hlbiBhIHJlZiBpcyB1cGRhdGVkLCByZWZsb2cgZW50cmllcyBhcmUgY3JlYXRlZCB0byBrZWVwCisJdHJhY2sgb2YgdGhlIHJlYXNvbiB3aHkgdGhlIHJlZiB3YXMgdXBkYXRlZCAod2hpY2ggaXMKKwl0eXBpY2FsbHkgdGhlIG5hbWUgb2YgdGhlIGhpZ2gtbGV2ZWwgY29tbWFuZCB0aGF0IHVwZGF0ZWQKKwl0aGUgcmVmKSwgaW4gYWRkaXRpb24gdG8gdGhlIG9sZCBhbmQgbmV3IHZhbHVlcyBvZiB0aGUgcmVmLgorCUEgc2NyaXB0ZWQgUG9yY2VsYWluIGNvbW1hbmQgY2FuIHVzZSBzZXRfcmVmbG9nX2FjdGlvbgorCWhlbHBlciBmdW5jdGlvbiBpbiBgZ2l0LXNoLXNldHVwYCB0byBzZXQgaXRzIG5hbWUgdG8gdGhpcworCXZhcmlhYmxlIHdoZW4gaXQgaXMgaW52b2tlZCBhcyB0aGUgdG9wIGxldmVsIGNvbW1hbmQgYnkgdGhlCisJZW5kIHVzZXIsIHRvIGJlIHJlY29yZGVkIGluIHRoZSBib2R5IG9mIHRoZSByZWZsb2cuCisKK2BHSVRfUkVGX1BBUkFOT0lBYDo6CisJSWYgc2V0IHRvIGAxYCwgaW5jbHVkZSBicm9rZW4gb3IgYmFkbHkgbmFtZWQgcmVmcyB3aGVuIGl0ZXJhdGluZworCW92ZXIgbGlzdHMgb2YgcmVmcy4gSW4gYSBub3JtYWwsIG5vbi1jb3JydXB0ZWQgcmVwb3NpdG9yeSwgdGhpcworCWRvZXMgbm90aGluZy4gSG93ZXZlciwgZW5hYmxpbmcgaXQgbWF5IGhlbHAgZ2l0IHRvIGRldGVjdCBhbmQKKwlhYm9ydCBzb21lIG9wZXJhdGlvbnMgaW4gdGhlIHByZXNlbmNlIG9mIGJyb2tlbiByZWZzLiBHaXQgc2V0cworCXRoaXMgdmFyaWFibGUgYXV0b21hdGljYWxseSB3aGVuIHBlcmZvcm1pbmcgZGVzdHJ1Y3RpdmUKKwlvcGVyYXRpb25zIGxpa2UgbGlua2dpdDpnaXQtcHJ1bmVbMV0uIFlvdSBzaG91bGQgbm90IG5lZWQgdG8gc2V0CisJaXQgeW91cnNlbGYgdW5sZXNzIHlvdSB3YW50IHRvIGJlIHBhcmFub2lkIGFib3V0IG1ha2luZyBzdXJlCisJYW4gb3BlcmF0aW9uIGhhcyB0b3VjaGVkIGV2ZXJ5IHJlZiAoZS5nLiwgYmVjYXVzZSB5b3UgYXJlCisJY2xvbmluZyBhIHJlcG9zaXRvcnkgdG8gbWFrZSBhIGJhY2t1cCkuCisKK2BHSVRfQUxMT1dfUFJPVE9DT0xgOjoKKwlJZiBzZXQgdG8gYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwcm90b2NvbHMsIGJlaGF2ZSBhcyBpZgorCWBwcm90b2NvbC5hbGxvd2AgaXMgc2V0IHRvIGBuZXZlcmAsIGFuZCBlYWNoIG9mIHRoZSBsaXN0ZWQKKwlwcm90b2NvbHMgaGFzIGBwcm90b2NvbC48bmFtZT4uYWxsb3dgIHNldCB0byBgYWx3YXlzYAorCShvdmVycmlkaW5nIGFueSBleGlzdGluZyBjb25maWd1cmF0aW9uKS4gSW4gb3RoZXIgd29yZHMsIGFueQorCXByb3RvY29sIG5vdCBtZW50aW9uZWQgd2lsbCBiZSBkaXNhbGxvd2VkIChpLmUuLCB0aGlzIGlzIGEKKwl3aGl0ZWxpc3QsIG5vdCBhIGJsYWNrbGlzdCkuIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YKKwlgcHJvdG9jb2wuYWxsb3dgIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgbW9yZSBkZXRhaWxzLgorCitgR0lUX1BST1RPQ09MX0ZST01fVVNFUmA6OgorCVNldCB0byAwIHRvIHByZXZlbnQgcHJvdG9jb2xzIHVzZWQgYnkgZmV0Y2gvcHVzaC9jbG9uZSB3aGljaCBhcmUKKwljb25maWd1cmVkIHRvIHRoZSBgdXNlcmAgc3RhdGUuICBUaGlzIGlzIHVzZWZ1bCB0byByZXN0cmljdCByZWN1cnNpdmUKKwlzdWJtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnJvbSBhbiB1bnRydXN0ZWQgcmVwb3NpdG9yeSBvciBmb3IgcHJvZ3JhbXMKKwl3aGljaCBmZWVkIHBvdGVudGlhbGx5LXVudHJ1c3RlZCBVUkxTIHRvIGdpdCBjb21tYW5kcy4gIFNlZQorCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgbW9yZSBkZXRhaWxzLgorCitgR0lUX1BST1RPQ09MYDo6CisJRm9yIGludGVybmFsIHVzZSBvbmx5LiAgVXNlZCBpbiBoYW5kc2hha2luZyB0aGUgd2lyZSBwcm90b2NvbC4KKwlDb250YWlucyBhIGNvbG9uICc6JyBzZXBhcmF0ZWQgbGlzdCBvZiBrZXlzIHdpdGggb3B0aW9uYWwgdmFsdWVzCisJJ2tleVs9dmFsdWVdJy4gIFByZXNlbmNlIG9mIHVua25vd24ga2V5cyBhbmQgdmFsdWVzIG11c3QgYmUKKwlpZ25vcmVkLgorCitgR0lUX09QVElPTkFMX0xPQ0tTYDo6CisJSWYgc2V0IHRvIGAwYCwgR2l0IHdpbGwgY29tcGxldGUgYW55IHJlcXVlc3RlZCBvcGVyYXRpb24gd2l0aG91dAorCXBlcmZvcm1pbmcgYW55IG9wdGlvbmFsIHN1Yi1vcGVyYXRpb25zIHRoYXQgcmVxdWlyZSB0YWtpbmcgYSBsb2NrLgorCUZvciBleGFtcGxlLCB0aGlzIHdpbGwgcHJldmVudCBgZ2l0IHN0YXR1c2AgZnJvbSByZWZyZXNoaW5nIHRoZQorCWluZGV4IGFzIGEgc2lkZSBlZmZlY3QuIFRoaXMgaXMgdXNlZnVsIGZvciBwcm9jZXNzZXMgcnVubmluZyBpbgorCXRoZSBiYWNrZ3JvdW5kIHdoaWNoIGRvIG5vdCB3YW50IHRvIGNhdXNlIGxvY2sgY29udGVudGlvbiB3aXRoCisJb3RoZXIgb3BlcmF0aW9ucyBvbiB0aGUgcmVwb3NpdG9yeS4gIERlZmF1bHRzIHRvIGAxYC4KKworYEdJVF9SRURJUkVDVF9TVERJTmA6OgorYEdJVF9SRURJUkVDVF9TVERPVVRgOjoKK2BHSVRfUkVESVJFQ1RfU1RERVJSYDo6CisJV2luZG93cy1vbmx5OiBhbGxvdyByZWRpcmVjdGluZyB0aGUgc3RhbmRhcmQgaW5wdXQvb3V0cHV0L2Vycm9yCisJaGFuZGxlcyB0byBwYXRocyBzcGVjaWZpZWQgYnkgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gVGhpcyBpcworCXBhcnRpY3VsYXJseSB1c2VmdWwgaW4gbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zIHdoZXJlIHRoZQorCWNhbm9uaWNhbCB3YXkgdG8gcGFzcyBzdGFuZGFyZCBoYW5kbGVzIHZpYSBgQ3JlYXRlUHJvY2VzcygpYCBpcworCW5vdCBhbiBvcHRpb24gYmVjYXVzZSBpdCB3b3VsZCByZXF1aXJlIHRoZSBoYW5kbGVzIHRvIGJlIG1hcmtlZAorCWluaGVyaXRhYmxlIChhbmQgY29uc2VxdWVudGx5ICpldmVyeSogc3Bhd25lZCBwcm9jZXNzIHdvdWxkCisJaW5oZXJpdCB0aGVtLCBwb3NzaWJseSBibG9ja2luZyByZWd1bGFyIEdpdCBvcGVyYXRpb25zKS4gVGhlCisJcHJpbWFyeSBpbnRlbmRlZCB1c2UgY2FzZSBpcyB0byB1c2UgbmFtZWQgcGlwZXMgZm9yIGNvbW11bmljYXRpb24KKwkoZS5nLiBgXFwuXHBpcGVcbXktZ2l0LXN0ZGluLTEyM2ApLgorKworVHdvIHNwZWNpYWwgdmFsdWVzIGFyZSBzdXBwb3J0ZWQ6IGBvZmZgIHdpbGwgc2ltcGx5IGNsb3NlIHRoZQorY29ycmVzcG9uZGluZyBzdGFuZGFyZCBoYW5kbGUsIGFuZCBpZiBgR0lUX1JFRElSRUNUX1NUREVSUmAgaXMKK2AyPiYxYCwgc3RhbmRhcmQgZXJyb3Igd2lsbCBiZSByZWRpcmVjdGVkIHRvIHRoZSBzYW1lIGhhbmRsZSBhcworc3RhbmRhcmQgb3V0cHV0LgorCitgR0lUX1BSSU5UX1NIQTFfRUxMSVBTSVNgIChkZXByZWNhdGVkKTo6CisJSWYgc2V0IHRvIGB5ZXNgLCBwcmludCBhbiBlbGxpcHNpcyBmb2xsb3dpbmcgYW4KKwkoYWJicmV2aWF0ZWQpIFNIQS0xIHZhbHVlLiAgVGhpcyBhZmZlY3RzIGluZGljYXRpb25zIG9mCisJZGV0YWNoZWQgSEVBRHMgKGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdKSBhbmQgdGhlIHJhdworCWRpZmYgb3V0cHV0IChsaW5rZ2l0OmdpdC1kaWZmWzFdKS4gIFByaW50aW5nIGFuCisJZWxsaXBzaXMgaW4gdGhlIGNhc2VzIG1lbnRpb25lZCBpcyBubyBsb25nZXIgY29uc2lkZXJlZAorCWFkZXF1YXRlIGFuZCBzdXBwb3J0IGZvciBpdCBpcyBsaWtlbHkgdG8gYmUgcmVtb3ZlZCBpbiB0aGUKKwlmb3Jlc2VlYWJsZSBmdXR1cmUgKGFsb25nIHdpdGggdGhlIHZhcmlhYmxlKS4KKworRGlzY3Vzc2lvbltbRGlzY3Vzc2lvbl1dCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTW9yZSBkZXRhaWwgb24gdGhlIGZvbGxvd2luZyBpcyBhdmFpbGFibGUgZnJvbSB0aGUKK2xpbms6dXNlci1tYW51YWwuaHRtbCNnaXQtY29uY2VwdHNbR2l0IGNvbmNlcHRzIGNoYXB0ZXIgb2YgdGhlCit1c2VyLW1hbnVhbF0gYW5kIGxpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XS4KKworQSBHaXQgcHJvamVjdCBub3JtYWxseSBjb25zaXN0cyBvZiBhIHdvcmtpbmcgZGlyZWN0b3J5IHdpdGggYSAiLmdpdCIKK3N1YmRpcmVjdG9yeSBhdCB0aGUgdG9wIGxldmVsLiAgVGhlIC5naXQgZGlyZWN0b3J5IGNvbnRhaW5zLCBhbW9uZyBvdGhlcgordGhpbmdzLCBhIGNvbXByZXNzZWQgb2JqZWN0IGRhdGFiYXNlIHJlcHJlc2VudGluZyB0aGUgY29tcGxldGUgaGlzdG9yeQorb2YgdGhlIHByb2plY3QsIGFuICJpbmRleCIgZmlsZSB3aGljaCBsaW5rcyB0aGF0IGhpc3RvcnkgdG8gdGhlIGN1cnJlbnQKK2NvbnRlbnRzIG9mIHRoZSB3b3JraW5nIHRyZWUsIGFuZCBuYW1lZCBwb2ludGVycyBpbnRvIHRoYXQgaGlzdG9yeSBzdWNoCithcyB0YWdzIGFuZCBicmFuY2ggaGVhZHMuCisKK1RoZSBvYmplY3QgZGF0YWJhc2UgY29udGFpbnMgb2JqZWN0cyBvZiB0aHJlZSBtYWluIHR5cGVzOiBibG9icywgd2hpY2gKK2hvbGQgZmlsZSBkYXRhOyB0cmVlcywgd2hpY2ggcG9pbnQgdG8gYmxvYnMgYW5kIG90aGVyIHRyZWVzIHRvIGJ1aWxkIHVwCitkaXJlY3RvcnkgaGllcmFyY2hpZXM7IGFuZCBjb21taXRzLCB3aGljaCBlYWNoIHJlZmVyZW5jZSBhIHNpbmdsZSB0cmVlCithbmQgc29tZSBudW1iZXIgb2YgcGFyZW50IGNvbW1pdHMuCisKK1RoZSBjb21taXQsIGVxdWl2YWxlbnQgdG8gd2hhdCBvdGhlciBzeXN0ZW1zIGNhbGwgYSAiY2hhbmdlc2V0IiBvcgorInZlcnNpb24iLCByZXByZXNlbnRzIGEgc3RlcCBpbiB0aGUgcHJvamVjdCdzIGhpc3RvcnksIGFuZCBlYWNoIHBhcmVudAorcmVwcmVzZW50cyBhbiBpbW1lZGlhdGVseSBwcmVjZWRpbmcgc3RlcC4gIENvbW1pdHMgd2l0aCBtb3JlIHRoYW4gb25lCitwYXJlbnQgcmVwcmVzZW50IG1lcmdlcyBvZiBpbmRlcGVuZGVudCBsaW5lcyBvZiBkZXZlbG9wbWVudC4KKworQWxsIG9iamVjdHMgYXJlIG5hbWVkIGJ5IHRoZSBTSEEtMSBoYXNoIG9mIHRoZWlyIGNvbnRlbnRzLCBub3JtYWxseQord3JpdHRlbiBhcyBhIHN0cmluZyBvZiA0MCBoZXggZGlnaXRzLiAgU3VjaCBuYW1lcyBhcmUgZ2xvYmFsbHkgdW5pcXVlLgorVGhlIGVudGlyZSBoaXN0b3J5IGxlYWRpbmcgdXAgdG8gYSBjb21taXQgY2FuIGJlIHZvdWNoZWQgZm9yIGJ5IHNpZ25pbmcKK2p1c3QgdGhhdCBjb21taXQuICBBIGZvdXJ0aCBvYmplY3QgdHlwZSwgdGhlIHRhZywgaXMgcHJvdmlkZWQgZm9yIHRoaXMKK3B1cnBvc2UuCisKK1doZW4gZmlyc3QgY3JlYXRlZCwgb2JqZWN0cyBhcmUgc3RvcmVkIGluIGluZGl2aWR1YWwgZmlsZXMsIGJ1dCBmb3IKK2VmZmljaWVuY3kgbWF5IGxhdGVyIGJlIGNvbXByZXNzZWQgdG9nZXRoZXIgaW50byAicGFjayBmaWxlcyIuCisKK05hbWVkIHBvaW50ZXJzIGNhbGxlZCByZWZzIG1hcmsgaW50ZXJlc3RpbmcgcG9pbnRzIGluIGhpc3RvcnkuICBBIHJlZgorbWF5IGNvbnRhaW4gdGhlIFNIQS0xIG5hbWUgb2YgYW4gb2JqZWN0IG9yIHRoZSBuYW1lIG9mIGFub3RoZXIgcmVmLiAgUmVmcword2l0aCBuYW1lcyBiZWdpbm5pbmcgYHJlZi9oZWFkL2AgY29udGFpbiB0aGUgU0hBLTEgbmFtZSBvZiB0aGUgbW9zdAorcmVjZW50IGNvbW1pdCAob3IgImhlYWQiKSBvZiBhIGJyYW5jaCB1bmRlciBkZXZlbG9wbWVudC4gIFNIQS0xIG5hbWVzIG9mCit0YWdzIG9mIGludGVyZXN0IGFyZSBzdG9yZWQgdW5kZXIgYHJlZi90YWdzL2AuICBBIHNwZWNpYWwgcmVmIG5hbWVkCitgSEVBRGAgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2guCisKK1RoZSBpbmRleCBmaWxlIGlzIGluaXRpYWxpemVkIHdpdGggYSBsaXN0IG9mIGFsbCBwYXRocyBhbmQsIGZvciBlYWNoCitwYXRoLCBhIGJsb2Igb2JqZWN0IGFuZCBhIHNldCBvZiBhdHRyaWJ1dGVzLiAgVGhlIGJsb2Igb2JqZWN0IHJlcHJlc2VudHMKK3RoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcyBvZiB0aGUgaGVhZCBvZiB0aGUgY3VycmVudCBicmFuY2guICBUaGUKK2F0dHJpYnV0ZXMgKGxhc3QgbW9kaWZpZWQgdGltZSwgc2l6ZSwgZXRjLikgYXJlIHRha2VuIGZyb20gdGhlCitjb3JyZXNwb25kaW5nIGZpbGUgaW4gdGhlIHdvcmtpbmcgdHJlZS4gIFN1YnNlcXVlbnQgY2hhbmdlcyB0byB0aGUKK3dvcmtpbmcgdHJlZSBjYW4gYmUgZm91bmQgYnkgY29tcGFyaW5nIHRoZXNlIGF0dHJpYnV0ZXMuICBUaGUgaW5kZXggbWF5CitiZSB1cGRhdGVkIHdpdGggbmV3IGNvbnRlbnQsIGFuZCBuZXcgY29tbWl0cyBtYXkgYmUgY3JlYXRlZCBmcm9tIHRoZQorY29udGVudCBzdG9yZWQgaW4gdGhlIGluZGV4LgorCitUaGUgaW5kZXggaXMgYWxzbyBjYXBhYmxlIG9mIHN0b3JpbmcgbXVsdGlwbGUgZW50cmllcyAoY2FsbGVkICJzdGFnZXMiKQorZm9yIGEgZ2l2ZW4gcGF0aG5hbWUuICBUaGVzZSBzdGFnZXMgYXJlIHVzZWQgdG8gaG9sZCB0aGUgdmFyaW91cwordW5tZXJnZWQgdmVyc2lvbiBvZiBhIGZpbGUgd2hlbiBhIG1lcmdlIGlzIGluIHByb2dyZXNzLgorCitGVVJUSEVSIERPQ1VNRU5UQVRJT04KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgdGhlIHJlZmVyZW5jZXMgaW4gdGhlICJkZXNjcmlwdGlvbiIgc2VjdGlvbiB0byBnZXQgc3RhcnRlZAordXNpbmcgR2l0LiAgVGhlIGZvbGxvd2luZyBpcyBwcm9iYWJseSBtb3JlIGRldGFpbCB0aGFuIG5lY2Vzc2FyeQorZm9yIGEgZmlyc3QtdGltZSB1c2VyLgorCitUaGUgbGluazp1c2VyLW1hbnVhbC5odG1sI2dpdC1jb25jZXB0c1tHaXQgY29uY2VwdHMgY2hhcHRlciBvZiB0aGUKK3VzZXItbWFudWFsXSBhbmQgbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddIGJvdGggcHJvdmlkZQoraW50cm9kdWN0aW9ucyB0byB0aGUgdW5kZXJseWluZyBHaXQgYXJjaGl0ZWN0dXJlLgorCitTZWUgbGlua2dpdDpnaXR3b3JrZmxvd3NbN10gZm9yIGFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cy4KKworU2VlIGFsc28gdGhlIGxpbms6aG93dG8taW5kZXguaHRtbFtob3d0b10gZG9jdW1lbnRzIGZvciBzb21lIHVzZWZ1bAorZXhhbXBsZXMuCisKK1RoZSBpbnRlcm5hbHMgYXJlIGRvY3VtZW50ZWQgaW4gdGhlCitsaW5rOnRlY2huaWNhbC9hcGktaW5kZXguaHRtbFtHaXQgQVBJIGRvY3VtZW50YXRpb25dLgorCitVc2VycyBtaWdyYXRpbmcgZnJvbSBDVlMgbWF5IGFsc28gd2FudCB0bworcmVhZCBsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10uCisKKworQXV0aG9ycworLS0tLS0tLQorR2l0IHdhcyBzdGFydGVkIGJ5IExpbnVzIFRvcnZhbGRzLCBhbmQgaXMgY3VycmVudGx5IG1haW50YWluZWQgYnkgSnVuaW8KK0MgSGFtYW5vLiBOdW1lcm91cyBjb250cmlidXRpb25zIGhhdmUgY29tZSBmcm9tIHRoZSBHaXQgbWFpbGluZyBsaXN0Cis8Z2l0QHZnZXIua2VybmVsLm9yZz4uICBodHRwOi8vd3d3Lm9wZW5odWIubmV0L3AvZ2l0L2NvbnRyaWJ1dG9ycy9zdW1tYXJ5CitnaXZlcyB5b3UgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2YgY29udHJpYnV0b3JzLgorCitJZiB5b3UgaGF2ZSBhIGNsb25lIG9mIGdpdC5naXQgaXRzZWxmLCB0aGUKK291dHB1dCBvZiBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBhbmQgbGlua2dpdDpnaXQtYmxhbWVbMV0gY2FuIHNob3cgeW91Cit0aGUgYXV0aG9ycyBmb3Igc3BlY2lmaWMgcGFydHMgb2YgdGhlIHByb2plY3QuCisKK1JlcG9ydGluZyBCdWdzCistLS0tLS0tLS0tLS0tLQorCitSZXBvcnQgYnVncyB0byB0aGUgR2l0IG1haWxpbmcgbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4gd2hlcmUgdGhlCitkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgaXMgcHJpbWFyaWx5IGRvbmUuICBZb3UgZG8gbm90IGhhdmUgdG8gYmUKK3N1YnNjcmliZWQgdG8gdGhlIGxpc3QgdG8gc2VuZCBhIG1lc3NhZ2UgdGhlcmUuICBTZWUgdGhlIGxpc3QgYXJjaGl2ZQorYXQgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0IGZvciBwcmV2aW91cyBidWcgcmVwb3J0cyBhbmQgb3RoZXIKK2Rpc2N1c3Npb25zLgorCitJc3N1ZXMgd2hpY2ggYXJlIHNlY3VyaXR5IHJlbGV2YW50IHNob3VsZCBiZSBkaXNjbG9zZWQgcHJpdmF0ZWx5IHRvCit0aGUgR2l0IFNlY3VyaXR5IG1haWxpbmcgbGlzdCA8Z2l0LXNlY3VyaXR5QGdvb2dsZWdyb3Vwcy5jb20+LgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0dHV0b3JpYWxbN10sIGxpbmtnaXQ6Z2l0dHV0b3JpYWwtMls3XSwKK2xpbmtnaXQ6Z2l0ZXZlcnlkYXlbN10sIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSwKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10sIGxpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0Y2xpWzddLCBsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXSwKK2xpbmtnaXQ6Z2l0d29ya2Zsb3dzWzddCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwYTAzNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQKQEAgLTAsMCArMSwxMzAwIEBACitnaXRhdHRyaWJ1dGVzKDUpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdGF0dHJpYnV0ZXMgLSBEZWZpbmluZyBhdHRyaWJ1dGVzIHBlciBwYXRoCisKK1NZTk9QU0lTCistLS0tLS0tLQorJEdJVF9ESVIvaW5mby9hdHRyaWJ1dGVzLCAuZ2l0YXR0cmlidXRlcworCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitBIGBnaXRhdHRyaWJ1dGVzYCBmaWxlIGlzIGEgc2ltcGxlIHRleHQgZmlsZSB0aGF0IGdpdmVzCitgYXR0cmlidXRlc2AgdG8gcGF0aG5hbWVzLgorCitFYWNoIGxpbmUgaW4gYGdpdGF0dHJpYnV0ZXNgIGZpbGUgaXMgb2YgZm9ybToKKworCXBhdHRlcm4gYXR0cjEgYXR0cjIgLi4uCisKK1RoYXQgaXMsIGEgcGF0dGVybiBmb2xsb3dlZCBieSBhbiBhdHRyaWJ1dGVzIGxpc3QsCitzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZXMuIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2VzIGFyZQoraWdub3JlZC4gTGluZXMgdGhhdCBiZWdpbiB3aXRoICcjJyBhcmUgaWdub3JlZC4gUGF0dGVybnMKK3RoYXQgYmVnaW4gd2l0aCBhIGRvdWJsZSBxdW90ZSBhcmUgcXVvdGVkIGluIEMgc3R5bGUuCitXaGVuIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIHBhdGggaW4gcXVlc3Rpb24sIHRoZSBhdHRyaWJ1dGVzCitsaXN0ZWQgb24gdGhlIGxpbmUgYXJlIGdpdmVuIHRvIHRoZSBwYXRoLgorCitFYWNoIGF0dHJpYnV0ZSBjYW4gYmUgaW4gb25lIG9mIHRoZXNlIHN0YXRlcyBmb3IgYSBnaXZlbiBwYXRoOgorCitTZXQ6OgorCisJVGhlIHBhdGggaGFzIHRoZSBhdHRyaWJ1dGUgd2l0aCBzcGVjaWFsIHZhbHVlICJ0cnVlIjsKKwl0aGlzIGlzIHNwZWNpZmllZCBieSBsaXN0aW5nIG9ubHkgdGhlIG5hbWUgb2YgdGhlCisJYXR0cmlidXRlIGluIHRoZSBhdHRyaWJ1dGUgbGlzdC4KKworVW5zZXQ6OgorCisJVGhlIHBhdGggaGFzIHRoZSBhdHRyaWJ1dGUgd2l0aCBzcGVjaWFsIHZhbHVlICJmYWxzZSI7CisJdGhpcyBpcyBzcGVjaWZpZWQgYnkgbGlzdGluZyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCisJcHJlZml4ZWQgd2l0aCBhIGRhc2ggYC1gIGluIHRoZSBhdHRyaWJ1dGUgbGlzdC4KKworU2V0IHRvIGEgdmFsdWU6OgorCisJVGhlIHBhdGggaGFzIHRoZSBhdHRyaWJ1dGUgd2l0aCBzcGVjaWZpZWQgc3RyaW5nIHZhbHVlOworCXRoaXMgaXMgc3BlY2lmaWVkIGJ5IGxpc3RpbmcgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQorCWZvbGxvd2VkIGJ5IGFuIGVxdWFsIHNpZ24gYD1gIGFuZCBpdHMgdmFsdWUgaW4gdGhlCisJYXR0cmlidXRlIGxpc3QuCisKK1Vuc3BlY2lmaWVkOjoKKworCU5vIHBhdHRlcm4gbWF0Y2hlcyB0aGUgcGF0aCwgYW5kIG5vdGhpbmcgc2F5cyBpZgorCXRoZSBwYXRoIGhhcyBvciBkb2VzIG5vdCBoYXZlIHRoZSBhdHRyaWJ1dGUsIHRoZQorCWF0dHJpYnV0ZSBmb3IgdGhlIHBhdGggaXMgc2FpZCB0byBiZSBVbnNwZWNpZmllZC4KKworV2hlbiBtb3JlIHRoYW4gb25lIHBhdHRlcm4gbWF0Y2hlcyB0aGUgcGF0aCwgYSBsYXRlciBsaW5lCitvdmVycmlkZXMgYW4gZWFybGllciBsaW5lLiAgVGhpcyBvdmVycmlkaW5nIGlzIGRvbmUgcGVyCithdHRyaWJ1dGUuCisKK1RoZSBydWxlcyBieSB3aGljaCB0aGUgcGF0dGVybiBtYXRjaGVzIHBhdGhzIGFyZSB0aGUgc2FtZSBhcyBpbgorYC5naXRpZ25vcmVgIGZpbGVzIChzZWUgbGlua2dpdDpnaXRpZ25vcmVbNV0pLCB3aXRoIGEgZmV3IGV4Y2VwdGlvbnM6CisKKyAgLSBuZWdhdGl2ZSBwYXR0ZXJucyBhcmUgZm9yYmlkZGVuCisKKyAgLSBwYXR0ZXJucyB0aGF0IG1hdGNoIGEgZGlyZWN0b3J5IGRvIG5vdCByZWN1cnNpdmVseSBtYXRjaCBwYXRocworICAgIGluc2lkZSB0aGF0IGRpcmVjdG9yeSAoc28gdXNpbmcgdGhlIHRyYWlsaW5nLXNsYXNoIGBwYXRoL2Agc3ludGF4IGlzCisgICAgcG9pbnRsZXNzIGluIGFuIGF0dHJpYnV0ZXMgZmlsZTsgdXNlIGBwYXRoLyoqYCBpbnN0ZWFkKQorCitXaGVuIGRlY2lkaW5nIHdoYXQgYXR0cmlidXRlcyBhcmUgYXNzaWduZWQgdG8gYSBwYXRoLCBHaXQKK2NvbnN1bHRzIGAkR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXNgIGZpbGUgKHdoaWNoIGhhcyB0aGUgaGlnaGVzdAorcHJlY2VkZW5jZSksIGAuZ2l0YXR0cmlidXRlc2AgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCitwYXRoIGluIHF1ZXN0aW9uLCBhbmQgaXRzIHBhcmVudCBkaXJlY3RvcmllcyB1cCB0byB0aGUgdG9wbGV2ZWwgb2YgdGhlCit3b3JrIHRyZWUgKHRoZSBmdXJ0aGVyIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBgLmdpdGF0dHJpYnV0ZXNgCitpcyBmcm9tIHRoZSBwYXRoIGluIHF1ZXN0aW9uLCB0aGUgbG93ZXIgaXRzIHByZWNlZGVuY2UpLiBGaW5hbGx5CitnbG9iYWwgYW5kIHN5c3RlbS13aWRlIGZpbGVzIGFyZSBjb25zaWRlcmVkICh0aGV5IGhhdmUgdGhlIGxvd2VzdAorcHJlY2VkZW5jZSkuCisKK1doZW4gdGhlIGAuZ2l0YXR0cmlidXRlc2AgZmlsZSBpcyBtaXNzaW5nIGZyb20gdGhlIHdvcmsgdHJlZSwgdGhlCitwYXRoIGluIHRoZSBpbmRleCBpcyB1c2VkIGFzIGEgZmFsbC1iYWNrLiAgRHVyaW5nIGNoZWNrb3V0IHByb2Nlc3MsCitgLmdpdGF0dHJpYnV0ZXNgIGluIHRoZSBpbmRleCBpcyB1c2VkIGFuZCB0aGVuIHRoZSBmaWxlIGluIHRoZQord29ya2luZyB0cmVlIGlzIHVzZWQgYXMgYSBmYWxsLWJhY2suCisKK0lmIHlvdSB3aXNoIHRvIGFmZmVjdCBvbmx5IGEgc2luZ2xlIHJlcG9zaXRvcnkgKGkuZS4sIHRvIGFzc2lnbgorYXR0cmlidXRlcyB0byBmaWxlcyB0aGF0IGFyZSBwYXJ0aWN1bGFyIHRvCitvbmUgdXNlcidzIHdvcmtmbG93IGZvciB0aGF0IHJlcG9zaXRvcnkpLCB0aGVuCithdHRyaWJ1dGVzIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlIGAkR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXNgIGZpbGUuCitBdHRyaWJ1dGVzIHdoaWNoIHNob3VsZCBiZSB2ZXJzaW9uLWNvbnRyb2xsZWQgYW5kIGRpc3RyaWJ1dGVkIHRvIG90aGVyCityZXBvc2l0b3JpZXMgKGkuZS4sIGF0dHJpYnV0ZXMgb2YgaW50ZXJlc3QgdG8gYWxsIHVzZXJzKSBzaG91bGQgZ28gaW50bworYC5naXRhdHRyaWJ1dGVzYCBmaWxlcy4gQXR0cmlidXRlcyB0aGF0IHNob3VsZCBhZmZlY3QgYWxsIHJlcG9zaXRvcmllcworZm9yIGEgc2luZ2xlIHVzZXIgc2hvdWxkIGJlIHBsYWNlZCBpbiBhIGZpbGUgc3BlY2lmaWVkIGJ5IHRoZQorYGNvcmUuYXR0cmlidXRlc0ZpbGVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KK0l0cyBkZWZhdWx0IHZhbHVlIGlzICRYREdfQ09ORklHX0hPTUUvZ2l0L2F0dHJpYnV0ZXMuIElmICRYREdfQ09ORklHX0hPTUUKK2lzIGVpdGhlciBub3Qgc2V0IG9yIGVtcHR5LCAkSE9NRS8uY29uZmlnL2dpdC9hdHRyaWJ1dGVzIGlzIHVzZWQgaW5zdGVhZC4KK0F0dHJpYnV0ZXMgZm9yIGFsbCB1c2VycyBvbiBhIHN5c3RlbSBzaG91bGQgYmUgcGxhY2VkIGluIHRoZQorYCQocHJlZml4KS9ldGMvZ2l0YXR0cmlidXRlc2AgZmlsZS4KKworU29tZXRpbWVzIHlvdSB3b3VsZCBuZWVkIHRvIG92ZXJyaWRlIGEgc2V0dGluZyBvZiBhbiBhdHRyaWJ1dGUKK2ZvciBhIHBhdGggdG8gYFVuc3BlY2lmaWVkYCBzdGF0ZS4gIFRoaXMgY2FuIGJlIGRvbmUgYnkgbGlzdGluZwordGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBwcmVmaXhlZCB3aXRoIGFuIGV4Y2xhbWF0aW9uIHBvaW50IGAhYC4KKworCitFRkZFQ1RTCistLS0tLS0tCisKK0NlcnRhaW4gb3BlcmF0aW9ucyBieSBHaXQgY2FuIGJlIGluZmx1ZW5jZWQgYnkgYXNzaWduaW5nCitwYXJ0aWN1bGFyIGF0dHJpYnV0ZXMgdG8gYSBwYXRoLiAgQ3VycmVudGx5LCB0aGUgZm9sbG93aW5nCitvcGVyYXRpb25zIGFyZSBhdHRyaWJ1dGVzLWF3YXJlLgorCitDaGVja2luZy1vdXQgYW5kIGNoZWNraW5nLWluCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZXNlIGF0dHJpYnV0ZXMgYWZmZWN0IGhvdyB0aGUgY29udGVudHMgc3RvcmVkIGluIHRoZQorcmVwb3NpdG9yeSBhcmUgY29waWVkIHRvIHRoZSB3b3JraW5nIHRyZWUgZmlsZXMgd2hlbiBjb21tYW5kcworc3VjaCBhcyAnZ2l0IHN3aXRjaCcsICdnaXQgY2hlY2tvdXQnICBhbmQgJ2dpdCBtZXJnZScgcnVuLgorVGhleSBhbHNvIGFmZmVjdCBob3cKK0dpdCBzdG9yZXMgdGhlIGNvbnRlbnRzIHlvdSBwcmVwYXJlIGluIHRoZSB3b3JraW5nIHRyZWUgaW4gdGhlCityZXBvc2l0b3J5IHVwb24gJ2dpdCBhZGQnIGFuZCAnZ2l0IGNvbW1pdCcuCisKK2B0ZXh0YAorXl5eXl5eCisKK1RoaXMgYXR0cmlidXRlIGVuYWJsZXMgYW5kIGNvbnRyb2xzIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24uICBXaGVuIGEKK3RleHQgZmlsZSBpcyBub3JtYWxpemVkLCBpdHMgbGluZSBlbmRpbmdzIGFyZSBjb252ZXJ0ZWQgdG8gTEYgaW4gdGhlCityZXBvc2l0b3J5LiAgVG8gY29udHJvbCB3aGF0IGxpbmUgZW5kaW5nIHN0eWxlIGlzIHVzZWQgaW4gdGhlIHdvcmtpbmcKK2RpcmVjdG9yeSwgdXNlIHRoZSBgZW9sYCBhdHRyaWJ1dGUgZm9yIGEgc2luZ2xlIGZpbGUgYW5kIHRoZQorYGNvcmUuZW9sYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZvciBhbGwgdGV4dCBmaWxlcy4KK05vdGUgdGhhdCBzZXR0aW5nIGBjb3JlLmF1dG9jcmxmYCB0byBgdHJ1ZWAgb3IgYGlucHV0YCBvdmVycmlkZXMKK2Bjb3JlLmVvbGAgKHNlZSB0aGUgZGVmaW5pdGlvbnMgb2YgdGhvc2Ugb3B0aW9ucyBpbgorbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworU2V0OjoKKworCVNldHRpbmcgdGhlIGB0ZXh0YCBhdHRyaWJ1dGUgb24gYSBwYXRoIGVuYWJsZXMgZW5kLW9mLWxpbmUKKwlub3JtYWxpemF0aW9uIGFuZCBtYXJrcyB0aGUgcGF0aCBhcyBhIHRleHQgZmlsZS4gIEVuZC1vZi1saW5lCisJY29udmVyc2lvbiB0YWtlcyBwbGFjZSB3aXRob3V0IGd1ZXNzaW5nIHRoZSBjb250ZW50IHR5cGUuCisKK1Vuc2V0OjoKKworCVVuc2V0dGluZyB0aGUgYHRleHRgIGF0dHJpYnV0ZSBvbiBhIHBhdGggdGVsbHMgR2l0IG5vdCB0bworCWF0dGVtcHQgYW55IGVuZC1vZi1saW5lIGNvbnZlcnNpb24gdXBvbiBjaGVja2luIG9yIGNoZWNrb3V0LgorCitTZXQgdG8gc3RyaW5nIHZhbHVlICJhdXRvIjo6CisKKwlXaGVuIGB0ZXh0YCBpcyBzZXQgdG8gImF1dG8iLCB0aGUgcGF0aCBpcyBtYXJrZWQgZm9yIGF1dG9tYXRpYworCWVuZC1vZi1saW5lIGNvbnZlcnNpb24uICBJZiBHaXQgZGVjaWRlcyB0aGF0IHRoZSBjb250ZW50IGlzCisJdGV4dCwgaXRzIGxpbmUgZW5kaW5ncyBhcmUgY29udmVydGVkIHRvIExGIG9uIGNoZWNraW4uCisJV2hlbiB0aGUgZmlsZSBoYXMgYmVlbiBjb21taXR0ZWQgd2l0aCBDUkxGLCBubyBjb252ZXJzaW9uIGlzIGRvbmUuCisKK1Vuc3BlY2lmaWVkOjoKKworCUlmIHRoZSBgdGV4dGAgYXR0cmlidXRlIGlzIHVuc3BlY2lmaWVkLCBHaXQgdXNlcyB0aGUKKwlgY29yZS5hdXRvY3JsZmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBkZXRlcm1pbmUgaWYgdGhlCisJZmlsZSBzaG91bGQgYmUgY29udmVydGVkLgorCitBbnkgb3RoZXIgdmFsdWUgY2F1c2VzIEdpdCB0byBhY3QgYXMgaWYgYHRleHRgIGhhcyBiZWVuIGxlZnQKK3Vuc3BlY2lmaWVkLgorCitgZW9sYAorXl5eXl4KKworVGhpcyBhdHRyaWJ1dGUgc2V0cyBhIHNwZWNpZmljIGxpbmUtZW5kaW5nIHN0eWxlIHRvIGJlIHVzZWQgaW4gdGhlCit3b3JraW5nIGRpcmVjdG9yeS4gIEl0IGVuYWJsZXMgZW5kLW9mLWxpbmUgY29udmVyc2lvbiB3aXRob3V0IGFueQorY29udGVudCBjaGVja3MsIGVmZmVjdGl2ZWx5IHNldHRpbmcgdGhlIGB0ZXh0YCBhdHRyaWJ1dGUuICBOb3RlIHRoYXQKK3NldHRpbmcgdGhpcyBhdHRyaWJ1dGUgb24gcGF0aHMgd2hpY2ggYXJlIGluIHRoZSBpbmRleCB3aXRoIENSTEYgbGluZQorZW5kaW5ncyBtYXkgbWFrZSB0aGUgcGF0aHMgdG8gYmUgY29uc2lkZXJlZCBkaXJ0eS4gIEFkZGluZyB0aGUgcGF0aCB0bwordGhlIGluZGV4IGFnYWluIHdpbGwgbm9ybWFsaXplIHRoZSBsaW5lIGVuZGluZ3MgaW4gdGhlIGluZGV4LgorCitTZXQgdG8gc3RyaW5nIHZhbHVlICJjcmxmIjo6CisKKwlUaGlzIHNldHRpbmcgZm9yY2VzIEdpdCB0byBub3JtYWxpemUgbGluZSBlbmRpbmdzIGZvciB0aGlzCisJZmlsZSBvbiBjaGVja2luIGFuZCBjb252ZXJ0IHRoZW0gdG8gQ1JMRiB3aGVuIHRoZSBmaWxlIGlzCisJY2hlY2tlZCBvdXQuCisKK1NldCB0byBzdHJpbmcgdmFsdWUgImxmIjo6CisKKwlUaGlzIHNldHRpbmcgZm9yY2VzIEdpdCB0byBub3JtYWxpemUgbGluZSBlbmRpbmdzIHRvIExGIG9uCisJY2hlY2tpbiBhbmQgcHJldmVudHMgY29udmVyc2lvbiB0byBDUkxGIHdoZW4gdGhlIGZpbGUgaXMKKwljaGVja2VkIG91dC4KKworQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBgY3JsZmAgYXR0cmlidXRlCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgYGNybGZgIGF0dHJpYnV0ZSBpcyBpbnRlcnByZXRlZCBhcworZm9sbG93czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjcmxmCQl0ZXh0CistY3JsZgkJLXRleHQKK2NybGY9aW5wdXQJZW9sPWxmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRW5kLW9mLWxpbmUgY29udmVyc2lvbgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitXaGlsZSBHaXQgbm9ybWFsbHkgbGVhdmVzIGZpbGUgY29udGVudHMgYWxvbmUsIGl0IGNhbiBiZSBjb25maWd1cmVkIHRvCitub3JtYWxpemUgbGluZSBlbmRpbmdzIHRvIExGIGluIHRoZSByZXBvc2l0b3J5IGFuZCwgb3B0aW9uYWxseSwgdG8KK2NvbnZlcnQgdGhlbSB0byBDUkxGIHdoZW4gZmlsZXMgYXJlIGNoZWNrZWQgb3V0LgorCitJZiB5b3Ugc2ltcGx5IHdhbnQgdG8gaGF2ZSBDUkxGIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5CityZWdhcmRsZXNzIG9mIHRoZSByZXBvc2l0b3J5IHlvdSBhcmUgd29ya2luZyB3aXRoLCB5b3UgY2FuIHNldCB0aGUKK2NvbmZpZyB2YXJpYWJsZSAiY29yZS5hdXRvY3JsZiIgd2l0aG91dCB1c2luZyBhbnkgYXR0cmlidXRlcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbY29yZV0KKwlhdXRvY3JsZiA9IHRydWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRvZXMgbm90IGZvcmNlIG5vcm1hbGl6YXRpb24gb2YgdGV4dCBmaWxlcywgYnV0IGRvZXMgZW5zdXJlCit0aGF0IHRleHQgZmlsZXMgdGhhdCB5b3UgaW50cm9kdWNlIHRvIHRoZSByZXBvc2l0b3J5IGhhdmUgdGhlaXIgbGluZQorZW5kaW5ncyBub3JtYWxpemVkIHRvIExGIHdoZW4gdGhleSBhcmUgYWRkZWQsIGFuZCB0aGF0IGZpbGVzIHRoYXQgYXJlCithbHJlYWR5IG5vcm1hbGl6ZWQgaW4gdGhlIHJlcG9zaXRvcnkgc3RheSBub3JtYWxpemVkLgorCitJZiB5b3Ugd2FudCB0byBlbnN1cmUgdGhhdCB0ZXh0IGZpbGVzIHRoYXQgYW55IGNvbnRyaWJ1dG9yIGludHJvZHVjZXMgdG8KK3RoZSByZXBvc2l0b3J5IGhhdmUgdGhlaXIgbGluZSBlbmRpbmdzIG5vcm1hbGl6ZWQsIHlvdSBjYW4gc2V0IHRoZQorYHRleHRgIGF0dHJpYnV0ZSB0byAiYXV0byIgZm9yIF9hbGxfIGZpbGVzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoJdGV4dD1hdXRvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGF0dHJpYnV0ZXMgYWxsb3cgYSBmaW5lLWdyYWluZWQgY29udHJvbCwgaG93IHRoZSBsaW5lIGVuZGluZ3MKK2FyZSBjb252ZXJ0ZWQuCitIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB3aWxsIG1ha2UgR2l0IG5vcm1hbGl6ZSAudHh0LCAudmNwcm9qIGFuZCAuc2gKK2ZpbGVzLCBlbnN1cmUgdGhhdCAudmNwcm9qIGZpbGVzIGhhdmUgQ1JMRiBhbmQgLnNoIGZpbGVzIGhhdmUgTEYgaW4KK3RoZSB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIHByZXZlbnQgLmpwZyBmaWxlcyBmcm9tIGJlaW5nIG5vcm1hbGl6ZWQKK3JlZ2FyZGxlc3Mgb2YgdGhlaXIgY29udGVudC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICAgICAgICAgICAgICAgdGV4dD1hdXRvCisqLnR4dAkJdGV4dAorKi52Y3Byb2oJdGV4dCBlb2w9Y3JsZgorKi5zaAkJdGV4dCBlb2w9bGYKKyouanBnCQktdGV4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05PVEU6IFdoZW4gYHRleHQ9YXV0b2AgY29udmVyc2lvbiBpcyBlbmFibGVkIGluIGEgY3Jvc3MtcGxhdGZvcm0KK3Byb2plY3QgdXNpbmcgcHVzaCBhbmQgcHVsbCB0byBhIGNlbnRyYWwgcmVwb3NpdG9yeSB0aGUgdGV4dCBmaWxlcworY29udGFpbmluZyBDUkxGcyBzaG91bGQgYmUgbm9ybWFsaXplZC4KKworRnJvbSBhIGNsZWFuIHdvcmtpbmcgZGlyZWN0b3J5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGVjaG8gIiogdGV4dD1hdXRvIiA+LmdpdGF0dHJpYnV0ZXMKKyQgZ2l0IGFkZCAtLXJlbm9ybWFsaXplIC4KKyQgZ2l0IHN0YXR1cyAgICAgICAgIyBTaG93IGZpbGVzIHRoYXQgd2lsbCBiZSBub3JtYWxpemVkCiskIGdpdCBjb21taXQgLW0gIkludHJvZHVjZSBlbmQtb2YtbGluZSBub3JtYWxpemF0aW9uIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBhbnkgZmlsZXMgdGhhdCBzaG91bGQgbm90IGJlIG5vcm1hbGl6ZWQgc2hvdyB1cCBpbiAnZ2l0IHN0YXR1cycsCit1bnNldCB0aGVpciBgdGV4dGAgYXR0cmlidXRlIGJlZm9yZSBydW5uaW5nICdnaXQgYWRkIC11Jy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittYW51YWwucGRmCS10ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29udmVyc2VseSwgdGV4dCBmaWxlcyB0aGF0IEdpdCBkb2VzIG5vdCBkZXRlY3QgY2FuIGhhdmUgbm9ybWFsaXphdGlvbgorZW5hYmxlZCBtYW51YWxseS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3ZWlyZGNoYXJzLnR4dAl0ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgYGNvcmUuc2FmZWNybGZgIGlzIHNldCB0byAidHJ1ZSIgb3IgIndhcm4iLCBHaXQgdmVyaWZpZXMgaWYKK3RoZSBjb252ZXJzaW9uIGlzIHJldmVyc2libGUgZm9yIHRoZSBjdXJyZW50IHNldHRpbmcgb2YKK2Bjb3JlLmF1dG9jcmxmYC4gIEZvciAidHJ1ZSIsIEdpdCByZWplY3RzIGlycmV2ZXJzaWJsZQorY29udmVyc2lvbnM7IGZvciAid2FybiIsIEdpdCBvbmx5IHByaW50cyBhIHdhcm5pbmcgYnV0IGFjY2VwdHMKK2FuIGlycmV2ZXJzaWJsZSBjb252ZXJzaW9uLiAgVGhlIHNhZmV0eSB0cmlnZ2VycyB0byBwcmV2ZW50IHN1Y2gKK2EgY29udmVyc2lvbiBkb25lIHRvIHRoZSBmaWxlcyBpbiB0aGUgd29yayB0cmVlLCBidXQgdGhlcmUgYXJlIGEKK2ZldyBleGNlcHRpb25zLiAgRXZlbiB0aG91Z2guLi4KKworLSAnZ2l0IGFkZCcgaXRzZWxmIGRvZXMgbm90IHRvdWNoIHRoZSBmaWxlcyBpbiB0aGUgd29yayB0cmVlLCB0aGUKKyAgbmV4dCBjaGVja291dCB3b3VsZCwgc28gdGhlIHNhZmV0eSB0cmlnZ2VyczsKKworLSAnZ2l0IGFwcGx5JyB0byB1cGRhdGUgYSB0ZXh0IGZpbGUgd2l0aCBhIHBhdGNoIGRvZXMgdG91Y2ggdGhlIGZpbGVzCisgIGluIHRoZSB3b3JrIHRyZWUsIGJ1dCB0aGUgb3BlcmF0aW9uIGlzIGFib3V0IHRleHQgZmlsZXMgYW5kIENSTEYKKyAgY29udmVyc2lvbiBpcyBhYm91dCBmaXhpbmcgdGhlIGxpbmUgZW5kaW5nIGluY29uc2lzdGVuY2llcywgc28gdGhlCisgIHNhZmV0eSBkb2VzIG5vdCB0cmlnZ2VyOworCistICdnaXQgZGlmZicgaXRzZWxmIGRvZXMgbm90IHRvdWNoIHRoZSBmaWxlcyBpbiB0aGUgd29yayB0cmVlLCBpdCBpcworICBvZnRlbiBydW4gdG8gaW5zcGVjdCB0aGUgY2hhbmdlcyB5b3UgaW50ZW5kIHRvIG5leHQgJ2dpdCBhZGQnLiAgVG8KKyAgY2F0Y2ggcG90ZW50aWFsIHByb2JsZW1zIGVhcmx5LCBzYWZldHkgdHJpZ2dlcnMuCisKKworYHdvcmtpbmctdHJlZS1lbmNvZGluZ2AKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0dpdCByZWNvZ25pemVzIGZpbGVzIGVuY29kZWQgaW4gQVNDSUkgb3Igb25lIG9mIGl0cyBzdXBlcnNldHMgKGUuZy4KK1VURi04LCBJU08tODg1OS0xLCAuLi4pIGFzIHRleHQgZmlsZXMuIEZpbGVzIGVuY29kZWQgaW4gY2VydGFpbiBvdGhlcgorZW5jb2RpbmdzIChlLmcuIFVURi0xNikgYXJlIGludGVycHJldGVkIGFzIGJpbmFyeSBhbmQgY29uc2VxdWVudGx5CitidWlsdC1pbiBHaXQgdGV4dCBwcm9jZXNzaW5nIHRvb2xzIChlLmcuICdnaXQgZGlmZicpIGFzIHdlbGwgYXMgbW9zdCBHaXQKK3dlYiBmcm9udCBlbmRzIGRvIG5vdCB2aXN1YWxpemUgdGhlIGNvbnRlbnRzIG9mIHRoZXNlIGZpbGVzIGJ5IGRlZmF1bHQuCisKK0luIHRoZXNlIGNhc2VzIHlvdSBjYW4gdGVsbCBHaXQgdGhlIGVuY29kaW5nIG9mIGEgZmlsZSBpbiB0aGUgd29ya2luZworZGlyZWN0b3J5IHdpdGggdGhlIGB3b3JraW5nLXRyZWUtZW5jb2RpbmdgIGF0dHJpYnV0ZS4gSWYgYSBmaWxlIHdpdGggdGhpcworYXR0cmlidXRlIGlzIGFkZGVkIHRvIEdpdCwgdGhlbiBHaXQgcmUtZW5jb2RlcyB0aGUgY29udGVudCBmcm9tIHRoZQorc3BlY2lmaWVkIGVuY29kaW5nIHRvIFVURi04LiBGaW5hbGx5LCBHaXQgc3RvcmVzIHRoZSBVVEYtOCBlbmNvZGVkCitjb250ZW50IGluIGl0cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSAoY2FsbGVkICJ0aGUgaW5kZXgiKS4gT24gY2hlY2tvdXQKK3RoZSBjb250ZW50IGlzIHJlLWVuY29kZWQgYmFjayB0byB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLgorCitQbGVhc2Ugbm90ZSB0aGF0IHVzaW5nIHRoZSBgd29ya2luZy10cmVlLWVuY29kaW5nYCBhdHRyaWJ1dGUgbWF5IGhhdmUgYQorbnVtYmVyIG9mIHBpdGZhbGxzOgorCistIEFsdGVybmF0aXZlIEdpdCBpbXBsZW1lbnRhdGlvbnMgKGUuZy4gSkdpdCBvciBsaWJnaXQyKSBhbmQgb2xkZXIgR2l0CisgIHZlcnNpb25zIChhcyBvZiBNYXJjaCAyMDE4KSBkbyBub3Qgc3VwcG9ydCB0aGUgYHdvcmtpbmctdHJlZS1lbmNvZGluZ2AKKyAgYXR0cmlidXRlLiBJZiB5b3UgZGVjaWRlIHRvIHVzZSB0aGUgYHdvcmtpbmctdHJlZS1lbmNvZGluZ2AgYXR0cmlidXRlCisgIGluIHlvdXIgcmVwb3NpdG9yeSwgdGhlbiBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhhdCBhbGwKKyAgY2xpZW50cyB3b3JraW5nIHdpdGggdGhlIHJlcG9zaXRvcnkgc3VwcG9ydCBpdC4KKysKK0ZvciBleGFtcGxlLCBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyByZXNvdXJjZXMgZmlsZXMgKGAqLnJjYCkgb3IKK1Bvd2VyU2hlbGwgc2NyaXB0IGZpbGVzIChgKi5wczFgKSBhcmUgc29tZXRpbWVzIGVuY29kZWQgaW4gVVRGLTE2LgorSWYgeW91IGRlY2xhcmUgYCoucHMxYCBhcyBmaWxlcyBhcyBVVEYtMTYgYW5kIHlvdSBhZGQgYGZvby5wczFgIHdpdGgKK2EgYHdvcmtpbmctdHJlZS1lbmNvZGluZ2AgZW5hYmxlZCBHaXQgY2xpZW50LCB0aGVuIGBmb28ucHMxYCB3aWxsIGJlCitzdG9yZWQgYXMgVVRGLTggaW50ZXJuYWxseS4gQSBjbGllbnQgd2l0aG91dCBgd29ya2luZy10cmVlLWVuY29kaW5nYAorc3VwcG9ydCB3aWxsIGNoZWNrb3V0IGBmb28ucHMxYCBhcyBVVEYtOCBlbmNvZGVkIGZpbGUuIFRoaXMgd2lsbAordHlwaWNhbGx5IGNhdXNlIHRyb3VibGUgZm9yIHRoZSB1c2VycyBvZiB0aGlzIGZpbGUuCisrCitJZiBhIEdpdCBjbGllbnQgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBgd29ya2luZy10cmVlLWVuY29kaW5nYAorYXR0cmlidXRlIGFkZHMgYSBuZXcgZmlsZSBgYmFyLnBzMWAsIHRoZW4gYGJhci5wczFgIHdpbGwgYmUKK3N0b3JlZCAiYXMtaXMiIGludGVybmFsbHkgKGluIHRoaXMgZXhhbXBsZSBwcm9iYWJseSBhcyBVVEYtMTYpLgorQSBjbGllbnQgd2l0aCBgd29ya2luZy10cmVlLWVuY29kaW5nYCBzdXBwb3J0IHdpbGwgaW50ZXJwcmV0IHRoZQoraW50ZXJuYWwgY29udGVudHMgYXMgVVRGLTggYW5kIHRyeSB0byBjb252ZXJ0IGl0IHRvIFVURi0xNiBvbiBjaGVja291dC4KK1RoYXQgb3BlcmF0aW9uIHdpbGwgZmFpbCBhbmQgY2F1c2UgYW4gZXJyb3IuCisKKy0gUmVlbmNvZGluZyBjb250ZW50IHRvIG5vbi1VVEYgZW5jb2RpbmdzIGNhbiBjYXVzZSBlcnJvcnMgYXMgdGhlCisgIGNvbnZlcnNpb24gbWlnaHQgbm90IGJlIFVURi04IHJvdW5kIHRyaXAgc2FmZS4gSWYgeW91IHN1c3BlY3QgeW91cgorICBlbmNvZGluZyB0byBub3QgYmUgcm91bmQgdHJpcCBzYWZlLCB0aGVuIGFkZCBpdCB0bworICBgY29yZS5jaGVja1JvdW5kdHJpcEVuY29kaW5nYCB0byBtYWtlIEdpdCBjaGVjayB0aGUgcm91bmQgdHJpcAorICBlbmNvZGluZyAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuIFNISUZULUpJUyAoSmFwYW5lc2UgY2hhcmFjdGVyCisgIHNldCkgaXMga25vd24gdG8gaGF2ZSByb3VuZCB0cmlwIGlzc3VlcyB3aXRoIFVURi04IGFuZCBpcyBjaGVja2VkIGJ5CisgIGRlZmF1bHQuCisKKy0gUmVlbmNvZGluZyBjb250ZW50IHJlcXVpcmVzIHJlc291cmNlcyB0aGF0IG1pZ2h0IHNsb3cgZG93biBjZXJ0YWluCisgIEdpdCBvcGVyYXRpb25zIChlLmcgJ2dpdCBjaGVja291dCcgb3IgJ2dpdCBhZGQnKS4KKworVXNlIHRoZSBgd29ya2luZy10cmVlLWVuY29kaW5nYCBhdHRyaWJ1dGUgb25seSBpZiB5b3UgY2Fubm90IHN0b3JlIGEgZmlsZQoraW4gVVRGLTggZW5jb2RpbmcgYW5kIGlmIHlvdSB3YW50IEdpdCB0byBiZSBhYmxlIHRvIHByb2Nlc3MgdGhlIGNvbnRlbnQKK2FzIHRleHQuCisKK0FzIGFuIGV4YW1wbGUsIHVzZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgaWYgeW91ciAnKi5wczEnIGZpbGVzIGFyZQorVVRGLTE2IGVuY29kZWQgd2l0aCBieXRlIG9yZGVyIG1hcmsgKEJPTSkgYW5kIHlvdSB3YW50IEdpdCB0byBwZXJmb3JtCithdXRvbWF0aWMgbGluZSBlbmRpbmcgY29udmVyc2lvbiBiYXNlZCBvbiB5b3VyIHBsYXRmb3JtLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoucHMxCQl0ZXh0IHdvcmtpbmctdHJlZS1lbmNvZGluZz1VVEYtMTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVc2UgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGlmIHlvdXIgJyoucHMxJyBmaWxlcyBhcmUgVVRGLTE2IGxpdHRsZQorZW5kaWFuIGVuY29kZWQgd2l0aG91dCBCT00gYW5kIHlvdSB3YW50IEdpdCB0byB1c2UgV2luZG93cyBsaW5lIGVuZGluZ3MKK2luIHRoZSB3b3JraW5nIGRpcmVjdG9yeSAodXNlIGBVVEYtMTZMRS1CT01gIGluc3RlYWQgb2YgYFVURi0xNkxFYCBpZgoreW91IHdhbnQgVVRGLTE2IGxpdHRsZSBlbmRpYW4gd2l0aCBCT00pLgorUGxlYXNlIG5vdGUsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0bworZXhwbGljaXRseSBkZWZpbmUgdGhlIGxpbmUgZW5kaW5ncyB3aXRoIGBlb2xgIGlmIHRoZSBgd29ya2luZy10cmVlLWVuY29kaW5nYAorYXR0cmlidXRlIGlzIHVzZWQgdG8gYXZvaWQgYW1iaWd1aXR5LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoucHMxCQl0ZXh0IHdvcmtpbmctdHJlZS1lbmNvZGluZz1VVEYtMTZMRSBlb2w9Q1JMRgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gZ2V0IGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGVuY29kaW5ncyBvbiB5b3VyIHBsYXRmb3JtIHdpdGggdGhlCitmb2xsb3dpbmcgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpY29udiAtLWxpc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgZG8gbm90IGtub3cgdGhlIGVuY29kaW5nIG9mIGEgZmlsZSwgdGhlbiB5b3UgY2FuIHVzZSB0aGUgYGZpbGVgCitjb21tYW5kIHRvIGd1ZXNzIHRoZSBlbmNvZGluZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitmaWxlIGZvby5wczEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK2BpZGVudGAKK15eXl5eXl4KKworV2hlbiB0aGUgYXR0cmlidXRlIGBpZGVudGAgaXMgc2V0IGZvciBhIHBhdGgsIEdpdCByZXBsYWNlcworYCRJZCRgIGluIHRoZSBibG9iIG9iamVjdCB3aXRoIGAkSWQ6YCwgZm9sbG93ZWQgYnkgdGhlCis0MC1jaGFyYWN0ZXIgaGV4YWRlY2ltYWwgYmxvYiBvYmplY3QgbmFtZSwgZm9sbG93ZWQgYnkgYSBkb2xsYXIKK3NpZ24gYCRgIHVwb24gY2hlY2tvdXQuICBBbnkgYnl0ZSBzZXF1ZW5jZSB0aGF0IGJlZ2lucyB3aXRoCitgJElkOmAgYW5kIGVuZHMgd2l0aCBgJGAgaW4gdGhlIHdvcmt0cmVlIGZpbGUgaXMgcmVwbGFjZWQKK3dpdGggYCRJZCRgIHVwb24gY2hlY2staW4uCisKKworYGZpbHRlcmAKK15eXl5eXl5eCisKK0EgYGZpbHRlcmAgYXR0cmlidXRlIGNhbiBiZSBzZXQgdG8gYSBzdHJpbmcgdmFsdWUgdGhhdCBuYW1lcyBhCitmaWx0ZXIgZHJpdmVyIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KKworQSBmaWx0ZXIgZHJpdmVyIGNvbnNpc3RzIG9mIGEgYGNsZWFuYCBjb21tYW5kIGFuZCBhIGBzbXVkZ2VgCitjb21tYW5kLCBlaXRoZXIgb2Ygd2hpY2ggY2FuIGJlIGxlZnQgdW5zcGVjaWZpZWQuICBVcG9uCitjaGVja291dCwgd2hlbiB0aGUgYHNtdWRnZWAgY29tbWFuZCBpcyBzcGVjaWZpZWQsIHRoZSBjb21tYW5kIGlzCitmZWQgdGhlIGJsb2Igb2JqZWN0IGZyb20gaXRzIHN0YW5kYXJkIGlucHV0LCBhbmQgaXRzIHN0YW5kYXJkCitvdXRwdXQgaXMgdXNlZCB0byB1cGRhdGUgdGhlIHdvcmt0cmVlIGZpbGUuICBTaW1pbGFybHksIHRoZQorYGNsZWFuYCBjb21tYW5kIGlzIHVzZWQgdG8gY29udmVydCB0aGUgY29udGVudHMgb2Ygd29ya3RyZWUgZmlsZQordXBvbiBjaGVja2luLiBCeSBkZWZhdWx0IHRoZXNlIGNvbW1hbmRzIHByb2Nlc3Mgb25seSBhIHNpbmdsZQorYmxvYiBhbmQgdGVybWluYXRlLiBJZiBhIGxvbmcgcnVubmluZyBgcHJvY2Vzc2AgZmlsdGVyIGlzIHVzZWQKK2luIHBsYWNlIG9mIGBjbGVhbmAgYW5kL29yIGBzbXVkZ2VgIGZpbHRlcnMsIHRoZW4gR2l0IGNhbiBwcm9jZXNzCithbGwgYmxvYnMgd2l0aCBhIHNpbmdsZSBmaWx0ZXIgY29tbWFuZCBpbnZvY2F0aW9uIGZvciB0aGUgZW50aXJlCitsaWZlIG9mIGEgc2luZ2xlIEdpdCBjb21tYW5kLCBmb3IgZXhhbXBsZSBgZ2l0IGFkZCAtLWFsbGAuIElmIGEKK2xvbmcgcnVubmluZyBgcHJvY2Vzc2AgZmlsdGVyIGlzIGNvbmZpZ3VyZWQgdGhlbiBpdCBhbHdheXMgdGFrZXMKK3ByZWNlZGVuY2Ugb3ZlciBhIGNvbmZpZ3VyZWQgc2luZ2xlIGJsb2IgZmlsdGVyLiBTZWUgc2VjdGlvbgorYmVsb3cgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvdG9jb2wgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoCithIGBwcm9jZXNzYCBmaWx0ZXIuCisKK09uZSB1c2Ugb2YgdGhlIGNvbnRlbnQgZmlsdGVyaW5nIGlzIHRvIG1hc3NhZ2UgdGhlIGNvbnRlbnQgaW50byBhIHNoYXBlCit0aGF0IGlzIG1vcmUgY29udmVuaWVudCBmb3IgdGhlIHBsYXRmb3JtLCBmaWxlc3lzdGVtLCBhbmQgdGhlIHVzZXIgdG8gdXNlLgorRm9yIHRoaXMgbW9kZSBvZiBvcGVyYXRpb24sIHRoZSBrZXkgcGhyYXNlIGhlcmUgaXMgIm1vcmUgY29udmVuaWVudCIgYW5kCitub3QgInR1cm5pbmcgc29tZXRoaW5nIHVudXNhYmxlIGludG8gdXNhYmxlIi4gIEluIG90aGVyIHdvcmRzLCB0aGUgaW50ZW50CitpcyB0aGF0IGlmIHNvbWVvbmUgdW5zZXRzIHRoZSBmaWx0ZXIgZHJpdmVyIGRlZmluaXRpb24sIG9yIGRvZXMgbm90IGhhdmUKK3RoZSBhcHByb3ByaWF0ZSBmaWx0ZXIgcHJvZ3JhbSwgdGhlIHByb2plY3Qgc2hvdWxkIHN0aWxsIGJlIHVzYWJsZS4KKworQW5vdGhlciB1c2Ugb2YgdGhlIGNvbnRlbnQgZmlsdGVyaW5nIGlzIHRvIHN0b3JlIHRoZSBjb250ZW50IHRoYXQgY2Fubm90CitiZSBkaXJlY3RseSB1c2VkIGluIHRoZSByZXBvc2l0b3J5IChlLmcuIGEgVVVJRCB0aGF0IHJlZmVycyB0byB0aGUgdHJ1ZQorY29udGVudCBzdG9yZWQgb3V0c2lkZSBHaXQsIG9yIGFuIGVuY3J5cHRlZCBjb250ZW50KSBhbmQgdHVybiBpdCBpbnRvIGEKK3VzYWJsZSBmb3JtIHVwb24gY2hlY2tvdXQgKGUuZy4gZG93bmxvYWQgdGhlIGV4dGVybmFsIGNvbnRlbnQsIG9yIGRlY3J5cHQKK3RoZSBlbmNyeXB0ZWQgY29udGVudCkuCisKK1RoZXNlIHR3byBmaWx0ZXJzIGJlaGF2ZSBkaWZmZXJlbnRseSwgYW5kIGJ5IGRlZmF1bHQsIGEgZmlsdGVyIGlzIHRha2VuIGFzCit0aGUgZm9ybWVyLCBtYXNzYWdpbmcgdGhlIGNvbnRlbnRzIGludG8gbW9yZSBjb252ZW5pZW50IHNoYXBlLiAgQSBtaXNzaW5nCitmaWx0ZXIgZHJpdmVyIGRlZmluaXRpb24gaW4gdGhlIGNvbmZpZywgb3IgYSBmaWx0ZXIgZHJpdmVyIHRoYXQgZXhpdHMgd2l0aAorYSBub24temVybyBzdGF0dXMsIGlzIG5vdCBhbiBlcnJvciBidXQgbWFrZXMgdGhlIGZpbHRlciBhIG5vLW9wIHBhc3N0aHJ1LgorCitZb3UgY2FuIGRlY2xhcmUgdGhhdCBhIGZpbHRlciB0dXJucyBhIGNvbnRlbnQgdGhhdCBieSBpdHNlbGYgaXMgdW51c2FibGUKK2ludG8gYSB1c2FibGUgY29udGVudCBieSBzZXR0aW5nIHRoZSBmaWx0ZXIuPGRyaXZlcj4ucmVxdWlyZWQgY29uZmlndXJhdGlvbgordmFyaWFibGUgdG8gYHRydWVgLgorCitOb3RlOiBXaGVuZXZlciB0aGUgY2xlYW4gZmlsdGVyIGlzIGNoYW5nZWQsIHRoZSByZXBvIHNob3VsZCBiZSByZW5vcm1hbGl6ZWQ6CiskIGdpdCBhZGQgLS1yZW5vcm1hbGl6ZSAuCisKK0ZvciBleGFtcGxlLCBpbiAuZ2l0YXR0cmlidXRlcywgeW91IHdvdWxkIGFzc2lnbiB0aGUgYGZpbHRlcmAKK2F0dHJpYnV0ZSBmb3IgcGF0aHMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi5jCWZpbHRlcj1pbmRlbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuIHlvdSB3b3VsZCBkZWZpbmUgYSAiZmlsdGVyLmluZGVudC5jbGVhbiIgYW5kICJmaWx0ZXIuaW5kZW50LnNtdWRnZSIKK2NvbmZpZ3VyYXRpb24gaW4geW91ciAuZ2l0L2NvbmZpZyB0byBzcGVjaWZ5IGEgcGFpciBvZiBjb21tYW5kcyB0bworbW9kaWZ5IHRoZSBjb250ZW50cyBvZiBDIHByb2dyYW1zIHdoZW4gdGhlIHNvdXJjZSBmaWxlcyBhcmUgY2hlY2tlZAoraW4gKCJjbGVhbiIgaXMgcnVuKSBhbmQgY2hlY2tlZCBvdXQgKG5vIGNoYW5nZSBpcyBtYWRlIGJlY2F1c2UgdGhlCitjb21tYW5kIGlzICJjYXQiKS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZmlsdGVyICJpbmRlbnQiXQorCWNsZWFuID0gaW5kZW50CisJc211ZGdlID0gY2F0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIGJlc3QgcmVzdWx0cywgYGNsZWFuYCBzaG91bGQgbm90IGFsdGVyIGl0cyBvdXRwdXQgZnVydGhlciBpZiBpdCBpcworcnVuIHR3aWNlICgiY2xlYW4tPmNsZWFuIiBzaG91bGQgYmUgZXF1aXZhbGVudCB0byAiY2xlYW4iKSwgYW5kCittdWx0aXBsZSBgc211ZGdlYCBjb21tYW5kcyBzaG91bGQgbm90IGFsdGVyIGBjbGVhbmAncyBvdXRwdXQKKygic211ZGdlLT5zbXVkZ2UtPmNsZWFuIiBzaG91bGQgYmUgZXF1aXZhbGVudCB0byAiY2xlYW4iKS4gIFNlZSB0aGUKK3NlY3Rpb24gb24gbWVyZ2luZyBiZWxvdy4KKworVGhlICJpbmRlbnQiIGZpbHRlciBpcyB3ZWxsLWJlaGF2ZWQgaW4gdGhpcyByZWdhcmQ6IGl0IHdpbGwgbm90IG1vZGlmeQoraW5wdXQgdGhhdCBpcyBhbHJlYWR5IGNvcnJlY3RseSBpbmRlbnRlZC4gIEluIHRoaXMgY2FzZSwgdGhlIGxhY2sgb2YgYQorc211ZGdlIGZpbHRlciBtZWFucyB0aGF0IHRoZSBjbGVhbiBmaWx0ZXIgX211c3RfIGFjY2VwdCBpdHMgb3duIG91dHB1dAord2l0aG91dCBtb2RpZnlpbmcgaXQuCisKK0lmIGEgZmlsdGVyIF9tdXN0XyBzdWNjZWVkIGluIG9yZGVyIHRvIG1ha2UgdGhlIHN0b3JlZCBjb250ZW50cyB1c2FibGUsCit5b3UgY2FuIGRlY2xhcmUgdGhhdCB0aGUgZmlsdGVyIGlzIGByZXF1aXJlZGAsIGluIHRoZSBjb25maWd1cmF0aW9uOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tmaWx0ZXIgImNyeXB0Il0KKwljbGVhbiA9IG9wZW5zc2wgZW5jIC4uLgorCXNtdWRnZSA9IG9wZW5zc2wgZW5jIC1kIC4uLgorCXJlcXVpcmVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VxdWVuY2UgIiVmIiBvbiB0aGUgZmlsdGVyIGNvbW1hbmQgbGluZSBpcyByZXBsYWNlZCB3aXRoIHRoZSBuYW1lIG9mCit0aGUgZmlsZSB0aGUgZmlsdGVyIGlzIHdvcmtpbmcgb24uICBBIGZpbHRlciBtaWdodCB1c2UgdGhpcyBpbiBrZXl3b3JkCitzdWJzdGl0dXRpb24uICBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZmlsdGVyICJwNCJdCisJY2xlYW4gPSBnaXQtcDQtZmlsdGVyIC0tY2xlYW4gJWYKKwlzbXVkZ2UgPSBnaXQtcDQtZmlsdGVyIC0tc211ZGdlICVmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0ICIlZiIgaXMgdGhlIG5hbWUgb2YgdGhlIHBhdGggdGhhdCBpcyBiZWluZyB3b3JrZWQgb24uIERlcGVuZGluZworb24gdGhlIHZlcnNpb24gdGhhdCBpcyBiZWluZyBmaWx0ZXJlZCwgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZSBvbiBkaXNrIG1heQorbm90IGV4aXN0LCBvciBtYXkgaGF2ZSBkaWZmZXJlbnQgY29udGVudHMuIFNvLCBzbXVkZ2UgYW5kIGNsZWFuIGNvbW1hbmRzCitzaG91bGQgbm90IHRyeSB0byBhY2Nlc3MgdGhlIGZpbGUgb24gZGlzaywgYnV0IG9ubHkgYWN0IGFzIGZpbHRlcnMgb24gdGhlCitjb250ZW50IHByb3ZpZGVkIHRvIHRoZW0gb24gc3RhbmRhcmQgaW5wdXQuCisKK0xvbmcgUnVubmluZyBGaWx0ZXIgUHJvY2VzcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0lmIHRoZSBmaWx0ZXIgY29tbWFuZCAoYSBzdHJpbmcgdmFsdWUpIGlzIGRlZmluZWQgdmlhCitgZmlsdGVyLjxkcml2ZXI+LnByb2Nlc3NgIHRoZW4gR2l0IGNhbiBwcm9jZXNzIGFsbCBibG9icyB3aXRoIGEKK3NpbmdsZSBmaWx0ZXIgaW52b2NhdGlvbiBmb3IgdGhlIGVudGlyZSBsaWZlIG9mIGEgc2luZ2xlIEdpdAorY29tbWFuZC4gVGhpcyBpcyBhY2hpZXZlZCBieSB1c2luZyB0aGUgbG9uZy1ydW5uaW5nIHByb2Nlc3MgcHJvdG9jb2wKKyhkZXNjcmliZWQgaW4gdGVjaG5pY2FsL2xvbmctcnVubmluZy1wcm9jZXNzLXByb3RvY29sLnR4dCkuCisKK1doZW4gR2l0IGVuY291bnRlcnMgdGhlIGZpcnN0IGZpbGUgdGhhdCBuZWVkcyB0byBiZSBjbGVhbmVkIG9yIHNtdWRnZWQsCitpdCBzdGFydHMgdGhlIGZpbHRlciBhbmQgcGVyZm9ybXMgdGhlIGhhbmRzaGFrZS4gSW4gdGhlIGhhbmRzaGFrZSwgdGhlCit3ZWxjb21lIG1lc3NhZ2Ugc2VudCBieSBHaXQgaXMgImdpdC1maWx0ZXItY2xpZW50Iiwgb25seSB2ZXJzaW9uIDIgaXMKK3N1cHBvcnRlZCwgYW5kIHRoZSBzdXBwb3J0ZWQgY2FwYWJpbGl0aWVzIGFyZSAiY2xlYW4iLCAic211ZGdlIiwgYW5kCisiZGVsYXkiLgorCitBZnRlcndhcmRzIEdpdCBzZW5kcyBhIGxpc3Qgb2YgImtleT12YWx1ZSIgcGFpcnMgdGVybWluYXRlZCB3aXRoCithIGZsdXNoIHBhY2tldC4gVGhlIGxpc3Qgd2lsbCBjb250YWluIGF0IGxlYXN0IHRoZSBmaWx0ZXIgY29tbWFuZAorKGJhc2VkIG9uIHRoZSBzdXBwb3J0ZWQgY2FwYWJpbGl0aWVzKSBhbmQgdGhlIHBhdGhuYW1lIG9mIHRoZSBmaWxlCit0byBmaWx0ZXIgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdC4gUmlnaHQgYWZ0ZXIgdGhlIGZsdXNoIHBhY2tldAorR2l0IHNlbmRzIHRoZSBjb250ZW50IHNwbGl0IGluIHplcm8gb3IgbW9yZSBwa3QtbGluZSBwYWNrZXRzIGFuZCBhCitmbHVzaCBwYWNrZXQgdG8gdGVybWluYXRlIGNvbnRlbnQuIFBsZWFzZSBub3RlLCB0aGF0IHRoZSBmaWx0ZXIKK211c3Qgbm90IHNlbmQgYW55IHJlc3BvbnNlIGJlZm9yZSBpdCByZWNlaXZlZCB0aGUgY29udGVudCBhbmQgdGhlCitmaW5hbCBmbHVzaCBwYWNrZXQuIEFsc28gbm90ZSB0aGF0IHRoZSAidmFsdWUiIG9mIGEgImtleT12YWx1ZSIgcGFpcgorY2FuIGNvbnRhaW4gdGhlICI9IiBjaGFyYWN0ZXIgd2hlcmVhcyB0aGUga2V5IHdvdWxkIG5ldmVyIGNvbnRhaW4KK3RoYXQgY2hhcmFjdGVyLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrZXQ6ICAgICAgICAgIGdpdD4gY29tbWFuZD1zbXVkZ2UKK3BhY2tldDogICAgICAgICAgZ2l0PiBwYXRobmFtZT1wYXRoL3Rlc3RmaWxlLmRhdAorcGFja2V0OiAgICAgICAgICBnaXQ+IDAwMDAKK3BhY2tldDogICAgICAgICAgZ2l0PiBDT05URU5UCitwYWNrZXQ6ICAgICAgICAgIGdpdD4gMDAwMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaWx0ZXIgaXMgZXhwZWN0ZWQgdG8gcmVzcG9uZCB3aXRoIGEgbGlzdCBvZiAia2V5PXZhbHVlIiBwYWlycwordGVybWluYXRlZCB3aXRoIGEgZmx1c2ggcGFja2V0LiBJZiB0aGUgZmlsdGVyIGRvZXMgbm90IGV4cGVyaWVuY2UKK3Byb2JsZW1zIHRoZW4gdGhlIGxpc3QgbXVzdCBjb250YWluIGEgInN1Y2Nlc3MiIHN0YXR1cy4gUmlnaHQgYWZ0ZXIKK3RoZXNlIHBhY2tldHMgdGhlIGZpbHRlciBpcyBleHBlY3RlZCB0byBzZW5kIHRoZSBjb250ZW50IGluIHplcm8KK29yIG1vcmUgcGt0LWxpbmUgcGFja2V0cyBhbmQgYSBmbHVzaCBwYWNrZXQgYXQgdGhlIGVuZC4gRmluYWxseSwgYQorc2Vjb25kIGxpc3Qgb2YgImtleT12YWx1ZSIgcGFpcnMgdGVybWluYXRlZCB3aXRoIGEgZmx1c2ggcGFja2V0CitpcyBleHBlY3RlZC4gVGhlIGZpbHRlciBjYW4gY2hhbmdlIHRoZSBzdGF0dXMgaW4gdGhlIHNlY29uZCBsaXN0CitvciBrZWVwIHRoZSBzdGF0dXMgYXMgaXMgd2l0aCBhbiBlbXB0eSBsaXN0LiBQbGVhc2Ugbm90ZSB0aGF0IHRoZQorZW1wdHkgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCBhIGZsdXNoIHBhY2tldCByZWdhcmRsZXNzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2tldDogICAgICAgICAgZ2l0PCBzdGF0dXM9c3VjY2VzcworcGFja2V0OiAgICAgICAgICBnaXQ8IDAwMDAKK3BhY2tldDogICAgICAgICAgZ2l0PCBTTVVER0VEX0NPTlRFTlQKK3BhY2tldDogICAgICAgICAgZ2l0PCAwMDAwCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgMDAwMCAgIyBlbXB0eSBsaXN0LCBrZWVwICJzdGF0dXM9c3VjY2VzcyIgdW5jaGFuZ2VkIQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSByZXN1bHQgY29udGVudCBpcyBlbXB0eSB0aGVuIHRoZSBmaWx0ZXIgaXMgZXhwZWN0ZWQgdG8gcmVzcG9uZAord2l0aCBhICJzdWNjZXNzIiBzdGF0dXMgYW5kIGEgZmx1c2ggcGFja2V0IHRvIHNpZ25hbCB0aGUgZW1wdHkgY29udGVudC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2V0OiAgICAgICAgICBnaXQ8IHN0YXR1cz1zdWNjZXNzCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgMDAwMAorcGFja2V0OiAgICAgICAgICBnaXQ8IDAwMDAgICMgZW1wdHkgY29udGVudCEKK3BhY2tldDogICAgICAgICAgZ2l0PCAwMDAwICAjIGVtcHR5IGxpc3QsIGtlZXAgInN0YXR1cz1zdWNjZXNzIiB1bmNoYW5nZWQhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gY2FzZSB0aGUgZmlsdGVyIGNhbm5vdCBvciBkb2VzIG5vdCB3YW50IHRvIHByb2Nlc3MgdGhlIGNvbnRlbnQsCitpdCBpcyBleHBlY3RlZCB0byByZXNwb25kIHdpdGggYW4gImVycm9yIiBzdGF0dXMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2tldDogICAgICAgICAgZ2l0PCBzdGF0dXM9ZXJyb3IKK3BhY2tldDogICAgICAgICAgZ2l0PCAwMDAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgdGhlIGZpbHRlciBleHBlcmllbmNlcyBhbiBlcnJvciBkdXJpbmcgcHJvY2Vzc2luZywgdGhlbiBpdCBjYW4KK3NlbmQgdGhlIHN0YXR1cyAiZXJyb3IiIGFmdGVyIHRoZSBjb250ZW50IHdhcyAocGFydGlhbGx5IG9yCitjb21wbGV0ZWx5KSBzZW50LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgc3RhdHVzPXN1Y2Nlc3MKK3BhY2tldDogICAgICAgICAgZ2l0PCAwMDAwCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgSEFMRl9XUklUVEVOX0VSUk9ORU9VU19DT05URU5UCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgMDAwMAorcGFja2V0OiAgICAgICAgICBnaXQ8IHN0YXR1cz1lcnJvcgorcGFja2V0OiAgICAgICAgICBnaXQ8IDAwMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBjYXNlIHRoZSBmaWx0ZXIgY2Fubm90IG9yIGRvZXMgbm90IHdhbnQgdG8gcHJvY2VzcyB0aGUgY29udGVudAorYXMgd2VsbCBhcyBhbnkgZnV0dXJlIGNvbnRlbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgR2l0IHByb2Nlc3MsCit0aGVuIGl0IGlzIGV4cGVjdGVkIHRvIHJlc3BvbmQgd2l0aCBhbiAiYWJvcnQiIHN0YXR1cyBhdCBhbnkgcG9pbnQKK2luIHRoZSBwcm90b2NvbC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2V0OiAgICAgICAgICBnaXQ8IHN0YXR1cz1hYm9ydAorcGFja2V0OiAgICAgICAgICBnaXQ8IDAwMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgbmVpdGhlciBzdG9wcyBub3IgcmVzdGFydHMgdGhlIGZpbHRlciBwcm9jZXNzIGluIGNhc2UgdGhlCisiZXJyb3IiLyJhYm9ydCIgc3RhdHVzIGlzIHNldC4gSG93ZXZlciwgR2l0IHNldHMgaXRzIGV4aXQgY29kZQorYWNjb3JkaW5nIHRvIHRoZSBgZmlsdGVyLjxkcml2ZXI+LnJlcXVpcmVkYCBmbGFnLCBtaW1pY2tpbmcgdGhlCitiZWhhdmlvciBvZiB0aGUgYGZpbHRlci48ZHJpdmVyPi5jbGVhbmAgLyBgZmlsdGVyLjxkcml2ZXI+LnNtdWRnZWAKK21lY2hhbmlzbS4KKworSWYgdGhlIGZpbHRlciBkaWVzIGR1cmluZyB0aGUgY29tbXVuaWNhdGlvbiBvciBkb2VzIG5vdCBhZGhlcmUgdG8KK3RoZSBwcm90b2NvbCB0aGVuIEdpdCB3aWxsIHN0b3AgdGhlIGZpbHRlciBwcm9jZXNzIGFuZCByZXN0YXJ0IGl0Cit3aXRoIHRoZSBuZXh0IGZpbGUgdGhhdCBuZWVkcyB0byBiZSBwcm9jZXNzZWQuIERlcGVuZGluZyBvbiB0aGUKK2BmaWx0ZXIuPGRyaXZlcj4ucmVxdWlyZWRgIGZsYWcgR2l0IHdpbGwgaW50ZXJwcmV0IHRoYXQgYXMgZXJyb3IuCisKK0RlbGF5CiteXl5eXgorCitJZiB0aGUgZmlsdGVyIHN1cHBvcnRzIHRoZSAiZGVsYXkiIGNhcGFiaWxpdHksIHRoZW4gR2l0IGNhbiBzZW5kIHRoZQorZmxhZyAiY2FuLWRlbGF5IiBhZnRlciB0aGUgZmlsdGVyIGNvbW1hbmQgYW5kIHBhdGhuYW1lLiBUaGlzIGZsYWcKK2Rlbm90ZXMgdGhhdCB0aGUgZmlsdGVyIGNhbiBkZWxheSBmaWx0ZXJpbmcgdGhlIGN1cnJlbnQgYmxvYiAoZS5nLiB0bworY29tcGVuc2F0ZSBuZXR3b3JrIGxhdGVuY2llcykgYnkgcmVzcG9uZGluZyB3aXRoIG5vIGNvbnRlbnQgYnV0IHdpdGgKK3RoZSBzdGF0dXMgImRlbGF5ZWQiIGFuZCBhIGZsdXNoIHBhY2tldC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2V0OiAgICAgICAgICBnaXQ+IGNvbW1hbmQ9c211ZGdlCitwYWNrZXQ6ICAgICAgICAgIGdpdD4gcGF0aG5hbWU9cGF0aC90ZXN0ZmlsZS5kYXQKK3BhY2tldDogICAgICAgICAgZ2l0PiBjYW4tZGVsYXk9MQorcGFja2V0OiAgICAgICAgICBnaXQ+IDAwMDAKK3BhY2tldDogICAgICAgICAgZ2l0PiBDT05URU5UCitwYWNrZXQ6ICAgICAgICAgIGdpdD4gMDAwMAorcGFja2V0OiAgICAgICAgICBnaXQ8IHN0YXR1cz1kZWxheWVkCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgMDAwMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBmaWx0ZXIgc3VwcG9ydHMgdGhlICJkZWxheSIgY2FwYWJpbGl0eSB0aGVuIGl0IG11c3Qgc3VwcG9ydCB0aGUKKyJsaXN0X2F2YWlsYWJsZV9ibG9icyIgY29tbWFuZC4gSWYgR2l0IHNlbmRzIHRoaXMgY29tbWFuZCwgdGhlbiB0aGUKK2ZpbHRlciBpcyBleHBlY3RlZCB0byByZXR1cm4gYSBsaXN0IG9mIHBhdGhuYW1lcyByZXByZXNlbnRpbmcgYmxvYnMKK3RoYXQgaGF2ZSBiZWVuIGRlbGF5ZWQgZWFybGllciBhbmQgYXJlIG5vdyBhdmFpbGFibGUuCitUaGUgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCBhIGZsdXNoIHBhY2tldCBmb2xsb3dlZAorYnkgYSAic3VjY2VzcyIgc3RhdHVzIHRoYXQgaXMgYWxzbyB0ZXJtaW5hdGVkIHdpdGggYSBmbHVzaCBwYWNrZXQuIElmCitubyBibG9icyBmb3IgdGhlIGRlbGF5ZWQgcGF0aHMgYXJlIGF2YWlsYWJsZSwgeWV0LCB0aGVuIHRoZSBmaWx0ZXIgaXMKK2V4cGVjdGVkIHRvIGJsb2NrIHRoZSByZXNwb25zZSB1bnRpbCBhdCBsZWFzdCBvbmUgYmxvYiBiZWNvbWVzCithdmFpbGFibGUuIFRoZSBmaWx0ZXIgY2FuIHRlbGwgR2l0IHRoYXQgaXQgaGFzIG5vIG1vcmUgZGVsYXllZCBibG9icworYnkgc2VuZGluZyBhbiBlbXB0eSBsaXN0LiBBcyBzb29uIGFzIHRoZSBmaWx0ZXIgcmVzcG9uZHMgd2l0aCBhbiBlbXB0eQorbGlzdCwgR2l0IHN0b3BzIGFza2luZy4gQWxsIGJsb2JzIHRoYXQgR2l0IGhhcyBub3QgcmVjZWl2ZWQgYXQgdGhpcworcG9pbnQgYXJlIGNvbnNpZGVyZWQgbWlzc2luZyBhbmQgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2V0OiAgICAgICAgICBnaXQ+IGNvbW1hbmQ9bGlzdF9hdmFpbGFibGVfYmxvYnMKK3BhY2tldDogICAgICAgICAgZ2l0PiAwMDAwCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgcGF0aG5hbWU9cGF0aC90ZXN0ZmlsZS5kYXQKK3BhY2tldDogICAgICAgICAgZ2l0PCBwYXRobmFtZT1wYXRoL290aGVyZmlsZS5kYXQKK3BhY2tldDogICAgICAgICAgZ2l0PCAwMDAwCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgc3RhdHVzPXN1Y2Nlc3MKK3BhY2tldDogICAgICAgICAgZ2l0PCAwMDAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgR2l0IHJlY2VpdmVkIHRoZSBwYXRobmFtZXMsIGl0IHdpbGwgcmVxdWVzdCB0aGUgY29ycmVzcG9uZGluZworYmxvYnMgYWdhaW4uIFRoZXNlIHJlcXVlc3RzIGNvbnRhaW4gYSBwYXRobmFtZSBhbmQgYW4gZW1wdHkgY29udGVudAorc2VjdGlvbi4gVGhlIGZpbHRlciBpcyBleHBlY3RlZCB0byByZXNwb25kIHdpdGggdGhlIHNtdWRnZWQgY29udGVudAoraW4gdGhlIHVzdWFsIHdheSBhcyBleHBsYWluZWQgYWJvdmUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2tldDogICAgICAgICAgZ2l0PiBjb21tYW5kPXNtdWRnZQorcGFja2V0OiAgICAgICAgICBnaXQ+IHBhdGhuYW1lPXBhdGgvdGVzdGZpbGUuZGF0CitwYWNrZXQ6ICAgICAgICAgIGdpdD4gMDAwMAorcGFja2V0OiAgICAgICAgICBnaXQ+IDAwMDAgICMgZW1wdHkgY29udGVudCEKK3BhY2tldDogICAgICAgICAgZ2l0PCBzdGF0dXM9c3VjY2VzcworcGFja2V0OiAgICAgICAgICBnaXQ8IDAwMDAKK3BhY2tldDogICAgICAgICAgZ2l0PCBTTVVER0VEX0NPTlRFTlQKK3BhY2tldDogICAgICAgICAgZ2l0PCAwMDAwCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgMDAwMCAgIyBlbXB0eSBsaXN0LCBrZWVwICJzdGF0dXM9c3VjY2VzcyIgdW5jaGFuZ2VkIQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4YW1wbGUKK15eXl5eXl4KKworQSBsb25nIHJ1bm5pbmcgZmlsdGVyIGRlbW8gaW1wbGVtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluCitgY29udHJpYi9sb25nLXJ1bm5pbmctZmlsdGVyL2V4YW1wbGUucGxgIGxvY2F0ZWQgaW4gdGhlIEdpdAorY29yZSByZXBvc2l0b3J5LiBJZiB5b3UgZGV2ZWxvcCB5b3VyIG93biBsb25nIHJ1bm5pbmcgZmlsdGVyCitwcm9jZXNzIHRoZW4gdGhlIGBHSVRfVFJBQ0VfUEFDS0VUYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgY2FuIGJlCit2ZXJ5IGhlbHBmdWwgZm9yIGRlYnVnZ2luZyAoc2VlIGxpbmtnaXQ6Z2l0WzFdKS4KKworUGxlYXNlIG5vdGUgdGhhdCB5b3UgY2Fubm90IHVzZSBhbiBleGlzdGluZyBgZmlsdGVyLjxkcml2ZXI+LmNsZWFuYAorb3IgYGZpbHRlci48ZHJpdmVyPi5zbXVkZ2VgIGNvbW1hbmQgd2l0aCBgZmlsdGVyLjxkcml2ZXI+LnByb2Nlc3NgCitiZWNhdXNlIHRoZSBmb3JtZXIgdHdvIHVzZSBhIGRpZmZlcmVudCBpbnRlciBwcm9jZXNzIGNvbW11bmljYXRpb24KK3Byb3RvY29sIHRoYW4gdGhlIGxhdHRlciBvbmUuCisKKworSW50ZXJhY3Rpb24gYmV0d2VlbiBjaGVja2luL2NoZWNrb3V0IGF0dHJpYnV0ZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0luIHRoZSBjaGVjay1pbiBjb2RlcGF0aCwgdGhlIHdvcmt0cmVlIGZpbGUgaXMgZmlyc3QgY29udmVydGVkCit3aXRoIGBmaWx0ZXJgIGRyaXZlciAoaWYgc3BlY2lmaWVkIGFuZCBjb3JyZXNwb25kaW5nIGRyaXZlcgorZGVmaW5lZCksIHRoZW4gdGhlIHJlc3VsdCBpcyBwcm9jZXNzZWQgd2l0aCBgaWRlbnRgIChpZgorc3BlY2lmaWVkKSwgYW5kIHRoZW4gZmluYWxseSB3aXRoIGB0ZXh0YCAoYWdhaW4sIGlmIHNwZWNpZmllZAorYW5kIGFwcGxpY2FibGUpLgorCitJbiB0aGUgY2hlY2stb3V0IGNvZGVwYXRoLCB0aGUgYmxvYiBjb250ZW50IGlzIGZpcnN0IGNvbnZlcnRlZAord2l0aCBgdGV4dGAsIGFuZCB0aGVuIGBpZGVudGAgYW5kIGZlZCB0byBgZmlsdGVyYC4KKworCitNZXJnaW5nIGJyYW5jaGVzIHdpdGggZGlmZmVyaW5nIGNoZWNraW4vY2hlY2tvdXQgYXR0cmlidXRlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworSWYgeW91IGhhdmUgYWRkZWQgYXR0cmlidXRlcyB0byBhIGZpbGUgdGhhdCBjYXVzZSB0aGUgY2Fub25pY2FsCityZXBvc2l0b3J5IGZvcm1hdCBmb3IgdGhhdCBmaWxlIHRvIGNoYW5nZSwgc3VjaCBhcyBhZGRpbmcgYQorY2xlYW4vc211ZGdlIGZpbHRlciBvciB0ZXh0L2VvbC9pZGVudCBhdHRyaWJ1dGVzLCBtZXJnaW5nIGFueXRoaW5nCit3aGVyZSB0aGUgYXR0cmlidXRlIGlzIG5vdCBpbiBwbGFjZSB3b3VsZCBub3JtYWxseSBjYXVzZSBtZXJnZQorY29uZmxpY3RzLgorCitUbyBwcmV2ZW50IHRoZXNlIHVubmVjZXNzYXJ5IG1lcmdlIGNvbmZsaWN0cywgR2l0IGNhbiBiZSB0b2xkIHRvIHJ1biBhCit2aXJ0dWFsIGNoZWNrLW91dCBhbmQgY2hlY2staW4gb2YgYWxsIHRocmVlIHN0YWdlcyBvZiBhIGZpbGUgd2hlbgorcmVzb2x2aW5nIGEgdGhyZWUtd2F5IG1lcmdlIGJ5IHNldHRpbmcgdGhlIGBtZXJnZS5yZW5vcm1hbGl6ZWAKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBUaGlzIHByZXZlbnRzIGNoYW5nZXMgY2F1c2VkIGJ5IGNoZWNrLWluCitjb252ZXJzaW9uIGZyb20gY2F1c2luZyBzcHVyaW91cyBtZXJnZSBjb25mbGljdHMgd2hlbiBhIGNvbnZlcnRlZCBmaWxlCitpcyBtZXJnZWQgd2l0aCBhbiB1bmNvbnZlcnRlZCBmaWxlLgorCitBcyBsb25nIGFzIGEgInNtdWRnZS0+Y2xlYW4iIHJlc3VsdHMgaW4gdGhlIHNhbWUgb3V0cHV0IGFzIGEgImNsZWFuIgorZXZlbiBvbiBmaWxlcyB0aGF0IGFyZSBhbHJlYWR5IHNtdWRnZWQsIHRoaXMgc3RyYXRlZ3kgd2lsbAorYXV0b21hdGljYWxseSByZXNvbHZlIGFsbCBmaWx0ZXItcmVsYXRlZCBjb25mbGljdHMuICBGaWx0ZXJzIHRoYXQgZG8KK25vdCBhY3QgaW4gdGhpcyB3YXkgbWF5IGNhdXNlIGFkZGl0aW9uYWwgbWVyZ2UgY29uZmxpY3RzIHRoYXQgbXVzdCBiZQorcmVzb2x2ZWQgbWFudWFsbHkuCisKKworR2VuZXJhdGluZyBkaWZmIHRleHQKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2BkaWZmYAorXl5eXl5eCisKK1RoZSBhdHRyaWJ1dGUgYGRpZmZgIGFmZmVjdHMgaG93IEdpdCBnZW5lcmF0ZXMgZGlmZnMgZm9yIHBhcnRpY3VsYXIKK2ZpbGVzLiBJdCBjYW4gdGVsbCBHaXQgd2hldGhlciB0byBnZW5lcmF0ZSBhIHRleHR1YWwgcGF0Y2ggZm9yIHRoZSBwYXRoCitvciB0byB0cmVhdCB0aGUgcGF0aCBhcyBhIGJpbmFyeSBmaWxlLiAgSXQgY2FuIGFsc28gYWZmZWN0IHdoYXQgbGluZSBpcworc2hvd24gb24gdGhlIGh1bmsgaGVhZGVyIGBAQCAtayxsICtuLG0gQEBgIGxpbmUsIHRlbGwgR2l0IHRvIHVzZSBhbgorZXh0ZXJuYWwgY29tbWFuZCB0byBnZW5lcmF0ZSB0aGUgZGlmZiwgb3IgYXNrIEdpdCB0byBjb252ZXJ0IGJpbmFyeQorZmlsZXMgdG8gYSB0ZXh0IGZvcm1hdCBiZWZvcmUgZ2VuZXJhdGluZyB0aGUgZGlmZi4KKworU2V0OjoKKworCUEgcGF0aCB0byB3aGljaCB0aGUgYGRpZmZgIGF0dHJpYnV0ZSBpcyBzZXQgaXMgdHJlYXRlZAorCWFzIHRleHQsIGV2ZW4gd2hlbiB0aGV5IGNvbnRhaW4gYnl0ZSB2YWx1ZXMgdGhhdAorCW5vcm1hbGx5IG5ldmVyIGFwcGVhciBpbiB0ZXh0IGZpbGVzLCBzdWNoIGFzIE5VTC4KKworVW5zZXQ6OgorCisJQSBwYXRoIHRvIHdoaWNoIHRoZSBgZGlmZmAgYXR0cmlidXRlIGlzIHVuc2V0IHdpbGwKKwlnZW5lcmF0ZSBgQmluYXJ5IGZpbGVzIGRpZmZlcmAgKG9yIGEgYmluYXJ5IHBhdGNoLCBpZgorCWJpbmFyeSBwYXRjaGVzIGFyZSBlbmFibGVkKS4KKworVW5zcGVjaWZpZWQ6OgorCisJQSBwYXRoIHRvIHdoaWNoIHRoZSBgZGlmZmAgYXR0cmlidXRlIGlzIHVuc3BlY2lmaWVkCisJZmlyc3QgZ2V0cyBpdHMgY29udGVudHMgaW5zcGVjdGVkLCBhbmQgaWYgaXQgbG9va3MgbGlrZQorCXRleHQgYW5kIGlzIHNtYWxsZXIgdGhhbiBjb3JlLmJpZ0ZpbGVUaHJlc2hvbGQsIGl0IGlzIHRyZWF0ZWQKKwlhcyB0ZXh0LiBPdGhlcndpc2UgaXQgd291bGQgZ2VuZXJhdGUgYEJpbmFyeSBmaWxlcyBkaWZmZXJgLgorCitTdHJpbmc6OgorCisJRGlmZiBpcyBzaG93biB1c2luZyB0aGUgc3BlY2lmaWVkIGRpZmYgZHJpdmVyLiAgRWFjaCBkcml2ZXIgbWF5CisJc3BlY2lmeSBvbmUgb3IgbW9yZSBvcHRpb25zLCBhcyBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZworCXNlY3Rpb24uIFRoZSBvcHRpb25zIGZvciB0aGUgZGlmZiBkcml2ZXIgImZvbyIgYXJlIGRlZmluZWQKKwlieSB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgaW4gdGhlICJkaWZmLmZvbyIgc2VjdGlvbiBvZiB0aGUKKwlHaXQgY29uZmlnIGZpbGUuCisKKworRGVmaW5pbmcgYW4gZXh0ZXJuYWwgZGlmZiBkcml2ZXIKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBkZWZpbml0aW9uIG9mIGEgZGlmZiBkcml2ZXIgaXMgZG9uZSBpbiBgZ2l0Y29uZmlnYCwgbm90CitgZ2l0YXR0cmlidXRlc2AgZmlsZSwgc28gc3RyaWN0bHkgc3BlYWtpbmcgdGhpcyBtYW51YWwgcGFnZSBpcyBhCit3cm9uZyBwbGFjZSB0byB0YWxrIGFib3V0IGl0LiAgSG93ZXZlci4uLgorCitUbyBkZWZpbmUgYW4gZXh0ZXJuYWwgZGlmZiBkcml2ZXIgYGpjZGlmZmAsIGFkZCBhIHNlY3Rpb24gdG8geW91cgorYCRHSVRfRElSL2NvbmZpZ2AgZmlsZSAob3IgYCRIT01FLy5naXRjb25maWdgIGZpbGUpIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2RpZmYgImpjZGlmZiJdCisJY29tbWFuZCA9IGotYy1kaWZmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gR2l0IG5lZWRzIHRvIHNob3cgeW91IGEgZGlmZiBmb3IgdGhlIHBhdGggd2l0aCBgZGlmZmAKK2F0dHJpYnV0ZSBzZXQgdG8gYGpjZGlmZmAsIGl0IGNhbGxzIHRoZSBjb21tYW5kIHlvdSBzcGVjaWZpZWQKK3dpdGggdGhlIGFib3ZlIGNvbmZpZ3VyYXRpb24sIGkuZS4gYGotYy1kaWZmYCwgd2l0aCA3CitwYXJhbWV0ZXJzLCBqdXN0IGxpa2UgYEdJVF9FWFRFUk5BTF9ESUZGYCBwcm9ncmFtIGlzIGNhbGxlZC4KK1NlZSBsaW5rZ2l0OmdpdFsxXSBmb3IgZGV0YWlscy4KKworCitEZWZpbmluZyBhIGN1c3RvbSBodW5rLWhlYWRlcgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRWFjaCBncm91cCBvZiBjaGFuZ2VzIChjYWxsZWQgYSAiaHVuayIpIGluIHRoZSB0ZXh0dWFsIGRpZmYgb3V0cHV0CitpcyBwcmVmaXhlZCB3aXRoIGEgbGluZSBvZiB0aGUgZm9ybToKKworCUBAIC1rLGwgK24sbSBAQCBURVhUCisKK1RoaXMgaXMgY2FsbGVkIGEgJ2h1bmsgaGVhZGVyJy4gIFRoZSAiVEVYVCIgcG9ydGlvbiBpcyBieSBkZWZhdWx0IGEgbGluZQordGhhdCBiZWdpbnMgd2l0aCBhbiBhbHBoYWJldCwgYW4gdW5kZXJzY29yZSBvciBhIGRvbGxhciBzaWduOyB0aGlzCittYXRjaGVzIHdoYXQgR05VICdkaWZmIC1wJyBvdXRwdXQgdXNlcy4gIFRoaXMgZGVmYXVsdCBzZWxlY3Rpb24gaG93ZXZlcgoraXMgbm90IHN1aXRlZCBmb3Igc29tZSBjb250ZW50cywgYW5kIHlvdSBjYW4gdXNlIGEgY3VzdG9taXplZCBwYXR0ZXJuCit0byBtYWtlIGEgc2VsZWN0aW9uLgorCitGaXJzdCwgaW4gLmdpdGF0dHJpYnV0ZXMsIHlvdSB3b3VsZCBhc3NpZ24gdGhlIGBkaWZmYCBhdHRyaWJ1dGUKK2ZvciBwYXRocy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLnRleAlkaWZmPXRleAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZW4sIHlvdSB3b3VsZCBkZWZpbmUgYSAiZGlmZi50ZXgueGZ1bmNuYW1lIiBjb25maWd1cmF0aW9uIHRvCitzcGVjaWZ5IGEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyBhIGxpbmUgdGhhdCB5b3Ugd291bGQKK3dhbnQgdG8gYXBwZWFyIGFzIHRoZSBodW5rIGhlYWRlciAiVEVYVCIuIEFkZCBhIHNlY3Rpb24gdG8geW91cgorYCRHSVRfRElSL2NvbmZpZ2AgZmlsZSAob3IgYCRIT01FLy5naXRjb25maWdgIGZpbGUpIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZGlmZiAidGV4Il0KKwl4ZnVuY25hbWUgPSAiXihcXFxcKHN1Yikqc2VjdGlvblxcey4qKSQiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZS4gIEEgc2luZ2xlIGxldmVsIG9mIGJhY2tzbGFzaGVzIGFyZSBlYXRlbiBieSB0aGUKK2NvbmZpZ3VyYXRpb24gZmlsZSBwYXJzZXIsIHNvIHlvdSB3b3VsZCBuZWVkIHRvIGRvdWJsZSB0aGUKK2JhY2tzbGFzaGVzOyB0aGUgcGF0dGVybiBhYm92ZSBwaWNrcyBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCBhCitiYWNrc2xhc2gsIGFuZCB6ZXJvIG9yIG1vcmUgb2NjdXJyZW5jZXMgb2YgYHN1YmAgZm9sbG93ZWQgYnkKK2BzZWN0aW9uYCBmb2xsb3dlZCBieSBvcGVuIGJyYWNlLCB0byB0aGUgZW5kIG9mIGxpbmUuCisKK1RoZXJlIGFyZSBhIGZldyBidWlsdC1pbiBwYXR0ZXJucyB0byBtYWtlIHRoaXMgZWFzaWVyLCBhbmQgYHRleGAKK2lzIG9uZSBvZiB0aGVtLCBzbyB5b3UgZG8gbm90IGhhdmUgdG8gd3JpdGUgdGhlIGFib3ZlIGluIHlvdXIKK2NvbmZpZ3VyYXRpb24gZmlsZSAoeW91IHN0aWxsIG5lZWQgdG8gZW5hYmxlIHRoaXMgd2l0aCB0aGUKK2F0dHJpYnV0ZSBtZWNoYW5pc20sIHZpYSBgLmdpdGF0dHJpYnV0ZXNgKS4gIFRoZSBmb2xsb3dpbmcgYnVpbHQgaW4KK3BhdHRlcm5zIGFyZSBhdmFpbGFibGU6CisKKy0gYGFkYWAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBBZGEgbGFuZ3VhZ2UuCisKKy0gYGJpYnRleGAgc3VpdGFibGUgZm9yIGZpbGVzIHdpdGggQmliVGVYIGNvZGVkIHJlZmVyZW5jZXMuCisKKy0gYGNwcGAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBDIGFuZCBDKysgbGFuZ3VhZ2VzLgorCistIGBjc2hhcnBgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgQyMgbGFuZ3VhZ2UuCisKKy0gYGNzc2Agc3VpdGFibGUgZm9yIGNhc2NhZGluZyBzdHlsZSBzaGVldHMuCisKKy0gYGR0c2Agc3VpdGFibGUgZm9yIGRldmljZXRyZWUgKERUUykgZmlsZXMuCisKKy0gYGVsaXhpcmAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBFbGl4aXIgbGFuZ3VhZ2UuCisKKy0gYGZvcnRyYW5gIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgRm9ydHJhbiBsYW5ndWFnZS4KKworLSBgZm91bnRhaW5gIHN1aXRhYmxlIGZvciBGb3VudGFpbiBkb2N1bWVudHMuCisKKy0gYGdvbGFuZ2Agc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBHbyBsYW5ndWFnZS4KKworLSBgaHRtbGAgc3VpdGFibGUgZm9yIEhUTUwvWEhUTUwgZG9jdW1lbnRzLgorCistIGBqYXZhYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIEphdmEgbGFuZ3VhZ2UuCisKKy0gYG1hcmtkb3duYCBzdWl0YWJsZSBmb3IgTWFya2Rvd24gZG9jdW1lbnRzLgorCistIGBtYXRsYWJgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgTUFUTEFCIGFuZCBPY3RhdmUgbGFuZ3VhZ2VzLgorCistIGBvYmpjYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIE9iamVjdGl2ZS1DIGxhbmd1YWdlLgorCistIGBwYXNjYWxgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgUGFzY2FsL0RlbHBoaSBsYW5ndWFnZS4KKworLSBgcGVybGAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBQZXJsIGxhbmd1YWdlLgorCistIGBwaHBgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgUEhQIGxhbmd1YWdlLgorCistIGBweXRob25gIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgUHl0aG9uIGxhbmd1YWdlLgorCistIGBydWJ5YCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIFJ1YnkgbGFuZ3VhZ2UuCisKKy0gYHJ1c3RgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgUnVzdCBsYW5ndWFnZS4KKworLSBgdGV4YCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgZm9yIExhVGVYIGRvY3VtZW50cy4KKworCitDdXN0b21pemluZyB3b3JkIGRpZmYKK15eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitZb3UgY2FuIGN1c3RvbWl6ZSB0aGUgcnVsZXMgdGhhdCBgZ2l0IGRpZmYgLS13b3JkLWRpZmZgIHVzZXMgdG8KK3NwbGl0IHdvcmRzIGluIGEgbGluZSwgYnkgc3BlY2lmeWluZyBhbiBhcHByb3ByaWF0ZSByZWd1bGFyIGV4cHJlc3Npb24KK2luIHRoZSAiZGlmZi4qLndvcmRSZWdleCIgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIEZvciBleGFtcGxlLCBpbiBUZVgKK2EgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGEgc2VxdWVuY2Ugb2YgbGV0dGVycyBmb3JtcyBhIGNvbW1hbmQsIGJ1dAorc2V2ZXJhbCBzdWNoIGNvbW1hbmRzIGNhbiBiZSBydW4gdG9nZXRoZXIgd2l0aG91dCBpbnRlcnZlbmluZword2hpdGVzcGFjZS4gIFRvIHNlcGFyYXRlIHRoZW0sIHVzZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiB5b3VyCitgJEdJVF9ESVIvY29uZmlnYCBmaWxlIChvciBgJEhPTUUvLmdpdGNvbmZpZ2AgZmlsZSkgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tkaWZmICJ0ZXgiXQorCXdvcmRSZWdleCA9ICJcXFxcW2EtekEtWl0rfFt7fV18XFxcXC58W15cXHt9WzpzcGFjZTpdXSsiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBidWlsdC1pbiBwYXR0ZXJuIGlzIHByb3ZpZGVkIGZvciBhbGwgbGFuZ3VhZ2VzIGxpc3RlZCBpbiB0aGUKK3ByZXZpb3VzIHNlY3Rpb24uCisKKworUGVyZm9ybWluZyB0ZXh0IGRpZmZzIG9mIGJpbmFyeSBmaWxlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitTb21ldGltZXMgaXQgaXMgZGVzaXJhYmxlIHRvIHNlZSB0aGUgZGlmZiBvZiBhIHRleHQtY29udmVydGVkCit2ZXJzaW9uIG9mIHNvbWUgYmluYXJ5IGZpbGVzLiBGb3IgZXhhbXBsZSwgYSB3b3JkIHByb2Nlc3NvcgorZG9jdW1lbnQgY2FuIGJlIGNvbnZlcnRlZCB0byBhbiBBU0NJSSB0ZXh0IHJlcHJlc2VudGF0aW9uLCBhbmQKK3RoZSBkaWZmIG9mIHRoZSB0ZXh0IHNob3duLiBFdmVuIHRob3VnaCB0aGlzIGNvbnZlcnNpb24gbG9zZXMKK3NvbWUgaW5mb3JtYXRpb24sIHRoZSByZXN1bHRpbmcgZGlmZiBpcyB1c2VmdWwgZm9yIGh1bWFuCit2aWV3aW5nIChidXQgY2Fubm90IGJlIGFwcGxpZWQgZGlyZWN0bHkpLgorCitUaGUgYHRleHRjb252YCBjb25maWcgb3B0aW9uIGlzIHVzZWQgdG8gZGVmaW5lIGEgcHJvZ3JhbSBmb3IKK3BlcmZvcm1pbmcgc3VjaCBhIGNvbnZlcnNpb24uIFRoZSBwcm9ncmFtIHNob3VsZCB0YWtlIGEgc2luZ2xlCithcmd1bWVudCwgdGhlIG5hbWUgb2YgYSBmaWxlIHRvIGNvbnZlcnQsIGFuZCBwcm9kdWNlIHRoZQorcmVzdWx0aW5nIHRleHQgb24gc3Rkb3V0LgorCitGb3IgZXhhbXBsZSwgdG8gc2hvdyB0aGUgZGlmZiBvZiB0aGUgZXhpZiBpbmZvcm1hdGlvbiBvZiBhCitmaWxlIGluc3RlYWQgb2YgdGhlIGJpbmFyeSBpbmZvcm1hdGlvbiAoYXNzdW1pbmcgeW91IGhhdmUgdGhlCitleGlmIHRvb2wgaW5zdGFsbGVkKSwgYWRkIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiB0byB5b3VyCitgJEdJVF9ESVIvY29uZmlnYCBmaWxlIChvciBgJEhPTUUvLmdpdGNvbmZpZ2AgZmlsZSk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2RpZmYgImpwZyJdCisJdGV4dGNvbnYgPSBleGlmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTk9URTogVGhlIHRleHQgY29udmVyc2lvbiBpcyBnZW5lcmFsbHkgYSBvbmUtd2F5IGNvbnZlcnNpb247CitpbiB0aGlzIGV4YW1wbGUsIHdlIGxvc2UgdGhlIGFjdHVhbCBpbWFnZSBjb250ZW50cyBhbmQgZm9jdXMKK2p1c3Qgb24gdGhlIHRleHQgZGF0YS4gVGhpcyBtZWFucyB0aGF0IGRpZmZzIGdlbmVyYXRlZCBieQordGV4dGNvbnYgYXJlIF9ub3RfIHN1aXRhYmxlIGZvciBhcHBseWluZy4gRm9yIHRoaXMgcmVhc29uLAorb25seSBgZ2l0IGRpZmZgIGFuZCB0aGUgYGdpdCBsb2dgIGZhbWlseSBvZiBjb21tYW5kcyAoaS5lLiwKK2xvZywgd2hhdGNoYW5nZWQsIHNob3cpIHdpbGwgcGVyZm9ybSB0ZXh0IGNvbnZlcnNpb24uIGBnaXQKK2Zvcm1hdC1wYXRjaGAgd2lsbCBuZXZlciBnZW5lcmF0ZSB0aGlzIG91dHB1dC4gSWYgeW91IHdhbnQgdG8KK3NlbmQgc29tZWJvZHkgYSB0ZXh0LWNvbnZlcnRlZCBkaWZmIG9mIGEgYmluYXJ5IGZpbGUgKGUuZy4sCitiZWNhdXNlIGl0IHF1aWNrbHkgY29udmV5cyB0aGUgY2hhbmdlcyB5b3UgaGF2ZSBtYWRlKSwgeW91CitzaG91bGQgZ2VuZXJhdGUgaXQgc2VwYXJhdGVseSBhbmQgc2VuZCBpdCBhcyBhIGNvbW1lbnQgX2luCithZGRpdGlvbiB0b18gdGhlIHVzdWFsIGJpbmFyeSBkaWZmIHRoYXQgeW91IG1pZ2h0IHNlbmQuCisKK0JlY2F1c2UgdGV4dCBjb252ZXJzaW9uIGNhbiBiZSBzbG93LCBlc3BlY2lhbGx5IHdoZW4gZG9pbmcgYQorbGFyZ2UgbnVtYmVyIG9mIHRoZW0gd2l0aCBgZ2l0IGxvZyAtcGAsIEdpdCBwcm92aWRlcyBhIG1lY2hhbmlzbQordG8gY2FjaGUgdGhlIG91dHB1dCBhbmQgdXNlIGl0IGluIGZ1dHVyZSBkaWZmcy4gIFRvIGVuYWJsZQorY2FjaGluZywgc2V0IHRoZSAiY2FjaGV0ZXh0Y29udiIgdmFyaWFibGUgaW4geW91ciBkaWZmIGRyaXZlcidzCitjb25maWcuIEZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tkaWZmICJqcGciXQorCXRleHRjb252ID0gZXhpZgorCWNhY2hldGV4dGNvbnYgPSB0cnVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIGNhY2hlIHRoZSByZXN1bHQgb2YgcnVubmluZyAiZXhpZiIgb24gZWFjaCBibG9iCitpbmRlZmluaXRlbHkuIElmIHlvdSBjaGFuZ2UgdGhlIHRleHRjb252IGNvbmZpZyB2YXJpYWJsZSBmb3IgYQorZGlmZiBkcml2ZXIsIEdpdCB3aWxsIGF1dG9tYXRpY2FsbHkgaW52YWxpZGF0ZSB0aGUgY2FjaGUgZW50cmllcworYW5kIHJlLXJ1biB0aGUgdGV4dGNvbnYgZmlsdGVyLiBJZiB5b3Ugd2FudCB0byBpbnZhbGlkYXRlIHRoZQorY2FjaGUgbWFudWFsbHkgKGUuZy4sIGJlY2F1c2UgeW91ciB2ZXJzaW9uIG9mICJleGlmIiB3YXMgdXBkYXRlZAorYW5kIG5vdyBwcm9kdWNlcyBiZXR0ZXIgb3V0cHV0KSwgeW91IGNhbiByZW1vdmUgdGhlIGNhY2hlCittYW51YWxseSB3aXRoIGBnaXQgdXBkYXRlLXJlZiAtZCByZWZzL25vdGVzL3RleHRjb252L2pwZ2AgKHdoZXJlCisianBnIiBpcyB0aGUgbmFtZSBvZiB0aGUgZGlmZiBkcml2ZXIsIGFzIGluIHRoZSBleGFtcGxlIGFib3ZlKS4KKworQ2hvb3NpbmcgdGV4dGNvbnYgdmVyc3VzIGV4dGVybmFsIGRpZmYKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0lmIHlvdSB3YW50IHRvIHNob3cgZGlmZmVyZW5jZXMgYmV0d2VlbiBiaW5hcnkgb3Igc3BlY2lhbGx5LWZvcm1hdHRlZAorYmxvYnMgaW4geW91ciByZXBvc2l0b3J5LCB5b3UgY2FuIGNob29zZSB0byB1c2UgZWl0aGVyIGFuIGV4dGVybmFsIGRpZmYKK2NvbW1hbmQsIG9yIHRvIHVzZSB0ZXh0Y29udiB0byBjb252ZXJ0IHRoZW0gdG8gYSBkaWZmLWFibGUgdGV4dCBmb3JtYXQuCitXaGljaCBtZXRob2QgeW91IGNob29zZSBkZXBlbmRzIG9uIHlvdXIgZXhhY3Qgc2l0dWF0aW9uLgorCitUaGUgYWR2YW50YWdlIG9mIHVzaW5nIGFuIGV4dGVybmFsIGRpZmYgY29tbWFuZCBpcyBmbGV4aWJpbGl0eS4gWW91IGFyZQorbm90IGJvdW5kIHRvIGZpbmQgbGluZS1vcmllbnRlZCBjaGFuZ2VzLCBub3IgaXMgaXQgbmVjZXNzYXJ5IGZvciB0aGUKK291dHB1dCB0byByZXNlbWJsZSB1bmlmaWVkIGRpZmYuIFlvdSBhcmUgZnJlZSB0byBsb2NhdGUgYW5kIHJlcG9ydAorY2hhbmdlcyBpbiB0aGUgbW9zdCBhcHByb3ByaWF0ZSB3YXkgZm9yIHlvdXIgZGF0YSBmb3JtYXQuCisKK0EgdGV4dGNvbnYsIGJ5IGNvbXBhcmlzb24sIGlzIG11Y2ggbW9yZSBsaW1pdGluZy4gWW91IHByb3ZpZGUgYQordHJhbnNmb3JtYXRpb24gb2YgdGhlIGRhdGEgaW50byBhIGxpbmUtb3JpZW50ZWQgdGV4dCBmb3JtYXQsIGFuZCBHaXQKK3VzZXMgaXRzIHJlZ3VsYXIgZGlmZiB0b29scyB0byBnZW5lcmF0ZSB0aGUgb3V0cHV0LiBUaGVyZSBhcmUgc2V2ZXJhbAorYWR2YW50YWdlcyB0byBjaG9vc2luZyB0aGlzIG1ldGhvZDoKKworMS4gRWFzZSBvZiB1c2UuIEl0IGlzIG9mdGVuIG11Y2ggc2ltcGxlciB0byB3cml0ZSBhIGJpbmFyeSB0byB0ZXh0CisgICB0cmFuc2Zvcm1hdGlvbiB0aGFuIGl0IGlzIHRvIHBlcmZvcm0geW91ciBvd24gZGlmZi4gSW4gbWFueSBjYXNlcywKKyAgIGV4aXN0aW5nIHByb2dyYW1zIGNhbiBiZSB1c2VkIGFzIHRleHRjb252IGZpbHRlcnMgKGUuZy4sIGV4aWYsCisgICBvZHQydHh0KS4KKworMi4gR2l0IGRpZmYgZmVhdHVyZXMuIEJ5IHBlcmZvcm1pbmcgb25seSB0aGUgdHJhbnNmb3JtYXRpb24gc3RlcAorICAgeW91cnNlbGYsIHlvdSBjYW4gc3RpbGwgdXRpbGl6ZSBtYW55IG9mIEdpdCdzIGRpZmYgZmVhdHVyZXMsCisgICBpbmNsdWRpbmcgY29sb3JpemF0aW9uLCB3b3JkLWRpZmYsIGFuZCBjb21iaW5lZCBkaWZmcyBmb3IgbWVyZ2VzLgorCiszLiBDYWNoaW5nLiBUZXh0Y29udiBjYWNoaW5nIGNhbiBzcGVlZCB1cCByZXBlYXRlZCBkaWZmcywgc3VjaCBhcyB0aG9zZQorICAgeW91IG1pZ2h0IHRyaWdnZXIgYnkgcnVubmluZyBgZ2l0IGxvZyAtcGAuCisKKworTWFya2luZyBmaWxlcyBhcyBiaW5hcnkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0dpdCB1c3VhbGx5IGd1ZXNzZXMgY29ycmVjdGx5IHdoZXRoZXIgYSBibG9iIGNvbnRhaW5zIHRleHQgb3IgYmluYXJ5CitkYXRhIGJ5IGV4YW1pbmluZyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb250ZW50cy4gSG93ZXZlciwgc29tZXRpbWVzIHlvdQorbWF5IHdhbnQgdG8gb3ZlcnJpZGUgaXRzIGRlY2lzaW9uLCBlaXRoZXIgYmVjYXVzZSBhIGJsb2IgY29udGFpbnMgYmluYXJ5CitkYXRhIGxhdGVyIGluIHRoZSBmaWxlLCBvciBiZWNhdXNlIHRoZSBjb250ZW50LCB3aGlsZSB0ZWNobmljYWxseQorY29tcG9zZWQgb2YgdGV4dCBjaGFyYWN0ZXJzLCBpcyBvcGFxdWUgdG8gYSBodW1hbiByZWFkZXIuIEZvciBleGFtcGxlLAorbWFueSBwb3N0c2NyaXB0IGZpbGVzIGNvbnRhaW4gb25seSBBU0NJSSBjaGFyYWN0ZXJzLCBidXQgcHJvZHVjZSBub2lzeQorYW5kIG1lYW5pbmdsZXNzIGRpZmZzLgorCitUaGUgc2ltcGxlc3Qgd2F5IHRvIG1hcmsgYSBmaWxlIGFzIGJpbmFyeSBpcyB0byB1bnNldCB0aGUgZGlmZgorYXR0cmlidXRlIGluIHRoZSBgLmdpdGF0dHJpYnV0ZXNgIGZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi5wcyAtZGlmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd2lsbCBjYXVzZSBHaXQgdG8gZ2VuZXJhdGUgYEJpbmFyeSBmaWxlcyBkaWZmZXJgIChvciBhIGJpbmFyeQorcGF0Y2gsIGlmIGJpbmFyeSBwYXRjaGVzIGFyZSBlbmFibGVkKSBpbnN0ZWFkIG9mIGEgcmVndWxhciBkaWZmLgorCitIb3dldmVyLCBvbmUgbWF5IGFsc28gd2FudCB0byBzcGVjaWZ5IG90aGVyIGRpZmYgZHJpdmVyIGF0dHJpYnV0ZXMuIEZvcgorZXhhbXBsZSwgeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGB0ZXh0Y29udmAgdG8gY29udmVydCBwb3N0c2NyaXB0IGZpbGVzIHRvCithbiBBU0NJSSByZXByZXNlbnRhdGlvbiBmb3IgaHVtYW4gdmlld2luZywgYnV0IG90aGVyd2lzZSB0cmVhdCB0aGVtIGFzCitiaW5hcnkgZmlsZXMuIFlvdSBjYW5ub3Qgc3BlY2lmeSBib3RoIGAtZGlmZmAgYW5kIGBkaWZmPXBzYCBhdHRyaWJ1dGVzLgorVGhlIHNvbHV0aW9uIGlzIHRvIHVzZSB0aGUgYGRpZmYuKi5iaW5hcnlgIGNvbmZpZyBvcHRpb246CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2RpZmYgInBzIl0KKyAgdGV4dGNvbnYgPSBwczJhc2NpaQorICBiaW5hcnkgPSB0cnVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGVyZm9ybWluZyBhIHRocmVlLXdheSBtZXJnZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitgbWVyZ2VgCiteXl5eXl5eCisKK1RoZSBhdHRyaWJ1dGUgYG1lcmdlYCBhZmZlY3RzIGhvdyB0aHJlZSB2ZXJzaW9ucyBvZiBhIGZpbGUgYXJlCittZXJnZWQgd2hlbiBhIGZpbGUtbGV2ZWwgbWVyZ2UgaXMgbmVjZXNzYXJ5IGR1cmluZyBgZ2l0IG1lcmdlYCwKK2FuZCBvdGhlciBjb21tYW5kcyBzdWNoIGFzIGBnaXQgcmV2ZXJ0YCBhbmQgYGdpdCBjaGVycnktcGlja2AuCisKK1NldDo6CisKKwlCdWlsdC1pbiAzLXdheSBtZXJnZSBkcml2ZXIgaXMgdXNlZCB0byBtZXJnZSB0aGUKKwljb250ZW50cyBpbiBhIHdheSBzaW1pbGFyIHRvICdtZXJnZScgY29tbWFuZCBvZiBgUkNTYAorCXN1aXRlLiAgVGhpcyBpcyBzdWl0YWJsZSBmb3Igb3JkaW5hcnkgdGV4dCBmaWxlcy4KKworVW5zZXQ6OgorCisJVGFrZSB0aGUgdmVyc2lvbiBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCBhcyB0aGUKKwl0ZW50YXRpdmUgbWVyZ2UgcmVzdWx0LCBhbmQgZGVjbGFyZSB0aGF0IHRoZSBtZXJnZSBoYXMKKwljb25mbGljdHMuICBUaGlzIGlzIHN1aXRhYmxlIGZvciBiaW5hcnkgZmlsZXMgdGhhdCBkbworCW5vdCBoYXZlIGEgd2VsbC1kZWZpbmVkIG1lcmdlIHNlbWFudGljcy4KKworVW5zcGVjaWZpZWQ6OgorCisJQnkgZGVmYXVsdCwgdGhpcyB1c2VzIHRoZSBzYW1lIGJ1aWx0LWluIDMtd2F5IG1lcmdlCisJZHJpdmVyIGFzIGlzIHRoZSBjYXNlIHdoZW4gdGhlIGBtZXJnZWAgYXR0cmlidXRlIGlzIHNldC4KKwlIb3dldmVyLCB0aGUgYG1lcmdlLmRlZmF1bHRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIG5hbWUKKwlkaWZmZXJlbnQgbWVyZ2UgZHJpdmVyIHRvIGJlIHVzZWQgd2l0aCBwYXRocyBmb3Igd2hpY2ggdGhlCisJYG1lcmdlYCBhdHRyaWJ1dGUgaXMgdW5zcGVjaWZpZWQuCisKK1N0cmluZzo6CisKKwkzLXdheSBtZXJnZSBpcyBwZXJmb3JtZWQgdXNpbmcgdGhlIHNwZWNpZmllZCBjdXN0b20KKwltZXJnZSBkcml2ZXIuICBUaGUgYnVpbHQtaW4gMy13YXkgbWVyZ2UgZHJpdmVyIGNhbiBiZQorCWV4cGxpY2l0bHkgc3BlY2lmaWVkIGJ5IGFza2luZyBmb3IgInRleHQiIGRyaXZlcjsgdGhlCisJYnVpbHQtaW4gInRha2UgdGhlIGN1cnJlbnQgYnJhbmNoIiBkcml2ZXIgY2FuIGJlCisJcmVxdWVzdGVkIHdpdGggImJpbmFyeSIuCisKKworQnVpbHQtaW4gbWVyZ2UgZHJpdmVycworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGVyZSBhcmUgYSBmZXcgYnVpbHQtaW4gbG93LWxldmVsIG1lcmdlIGRyaXZlcnMgZGVmaW5lZCB0aGF0CitjYW4gYmUgYXNrZWQgZm9yIHZpYSB0aGUgYG1lcmdlYCBhdHRyaWJ1dGUuCisKK3RleHQ6OgorCisJVXN1YWwgMy13YXkgZmlsZSBsZXZlbCBtZXJnZSBmb3IgdGV4dCBmaWxlcy4gIENvbmZsaWN0ZWQKKwlyZWdpb25zIGFyZSBtYXJrZWQgd2l0aCBjb25mbGljdCBtYXJrZXJzIGA8PDw8PDw8YCwKKwlgPT09PT09PWAgYW5kIGA+Pj4+Pj4+YC4gIFRoZSB2ZXJzaW9uIGZyb20geW91ciBicmFuY2gKKwlhcHBlYXJzIGJlZm9yZSB0aGUgYD09PT09PT1gIG1hcmtlciwgYW5kIHRoZSB2ZXJzaW9uCisJZnJvbSB0aGUgbWVyZ2VkIGJyYW5jaCBhcHBlYXJzIGFmdGVyIHRoZSBgPT09PT09PWAKKwltYXJrZXIuCisKK2JpbmFyeTo6CisKKwlLZWVwIHRoZSB2ZXJzaW9uIGZyb20geW91ciBicmFuY2ggaW4gdGhlIHdvcmsgdHJlZSwgYnV0CisJbGVhdmUgdGhlIHBhdGggaW4gdGhlIGNvbmZsaWN0ZWQgc3RhdGUgZm9yIHRoZSB1c2VyIHRvCisJc29ydCBvdXQuCisKK3VuaW9uOjoKKworCVJ1biAzLXdheSBmaWxlIGxldmVsIG1lcmdlIGZvciB0ZXh0IGZpbGVzLCBidXQgdGFrZQorCWxpbmVzIGZyb20gYm90aCB2ZXJzaW9ucywgaW5zdGVhZCBvZiBsZWF2aW5nIGNvbmZsaWN0CisJbWFya2Vycy4gIFRoaXMgdGVuZHMgdG8gbGVhdmUgdGhlIGFkZGVkIGxpbmVzIGluIHRoZQorCXJlc3VsdGluZyBmaWxlIGluIHJhbmRvbSBvcmRlciBhbmQgdGhlIHVzZXIgc2hvdWxkCisJdmVyaWZ5IHRoZSByZXN1bHQuIERvIG5vdCB1c2UgdGhpcyBpZiB5b3UgZG8gbm90CisJdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgorCisKK0RlZmluaW5nIGEgY3VzdG9tIG1lcmdlIGRyaXZlcgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBkZWZpbml0aW9uIG9mIGEgbWVyZ2UgZHJpdmVyIGlzIGRvbmUgaW4gdGhlIGAuZ2l0L2NvbmZpZ2AKK2ZpbGUsIG5vdCBpbiB0aGUgYGdpdGF0dHJpYnV0ZXNgIGZpbGUsIHNvIHN0cmljdGx5IHNwZWFraW5nIHRoaXMKK21hbnVhbCBwYWdlIGlzIGEgd3JvbmcgcGxhY2UgdG8gdGFsayBhYm91dCBpdC4gIEhvd2V2ZXIuLi4KKworVG8gZGVmaW5lIGEgY3VzdG9tIG1lcmdlIGRyaXZlciBgZmlsZnJlYCwgYWRkIGEgc2VjdGlvbiB0byB5b3VyCitgJEdJVF9ESVIvY29uZmlnYCBmaWxlIChvciBgJEhPTUUvLmdpdGNvbmZpZ2AgZmlsZSkgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbbWVyZ2UgImZpbGZyZSJdCisJbmFtZSA9IGZlZWwtZnJlZSBtZXJnZSBkcml2ZXIKKwlkcml2ZXIgPSBmaWxmcmUgJU8gJUEgJUIgJUwgJVAKKwlyZWN1cnNpdmUgPSBiaW5hcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGBtZXJnZS4qLm5hbWVgIHZhcmlhYmxlIGdpdmVzIHRoZSBkcml2ZXIgYSBodW1hbi1yZWFkYWJsZQorbmFtZS4KKworVGhlIGBtZXJnZS4qLmRyaXZlcmAgdmFyaWFibGUncyB2YWx1ZSBpcyB1c2VkIHRvIGNvbnN0cnVjdCBhCitjb21tYW5kIHRvIHJ1biB0byBtZXJnZSBhbmNlc3RvcidzIHZlcnNpb24gKGAlT2ApLCBjdXJyZW50Cit2ZXJzaW9uIChgJUFgKSBhbmQgdGhlIG90aGVyIGJyYW5jaGVzJyB2ZXJzaW9uIChgJUJgKS4gIFRoZXNlCit0aHJlZSB0b2tlbnMgYXJlIHJlcGxhY2VkIHdpdGggdGhlIG5hbWVzIG9mIHRlbXBvcmFyeSBmaWxlcyB0aGF0Citob2xkIHRoZSBjb250ZW50cyBvZiB0aGVzZSB2ZXJzaW9ucyB3aGVuIHRoZSBjb21tYW5kIGxpbmUgaXMKK2J1aWx0LiBBZGRpdGlvbmFsbHksICVMIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgY29uZmxpY3QgbWFya2VyCitzaXplIChzZWUgYmVsb3cpLgorCitUaGUgbWVyZ2UgZHJpdmVyIGlzIGV4cGVjdGVkIHRvIGxlYXZlIHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlIGluCit0aGUgZmlsZSBuYW1lZCB3aXRoIGAlQWAgYnkgb3ZlcndyaXRpbmcgaXQsIGFuZCBleGl0IHdpdGggemVybworc3RhdHVzIGlmIGl0IG1hbmFnZWQgdG8gbWVyZ2UgdGhlbSBjbGVhbmx5LCBvciBub24temVybyBpZiB0aGVyZQord2VyZSBjb25mbGljdHMuCisKK1RoZSBgbWVyZ2UuKi5yZWN1cnNpdmVgIHZhcmlhYmxlIHNwZWNpZmllcyB3aGF0IG90aGVyIG1lcmdlCitkcml2ZXIgdG8gdXNlIHdoZW4gdGhlIG1lcmdlIGRyaXZlciBpcyBjYWxsZWQgZm9yIGFuIGludGVybmFsCittZXJnZSBiZXR3ZWVuIGNvbW1vbiBhbmNlc3RvcnMsIHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUuCitXaGVuIGxlZnQgdW5zcGVjaWZpZWQsIHRoZSBkcml2ZXIgaXRzZWxmIGlzIHVzZWQgZm9yIGJvdGgKK2ludGVybmFsIG1lcmdlIGFuZCB0aGUgZmluYWwgbWVyZ2UuCisKK1RoZSBtZXJnZSBkcml2ZXIgY2FuIGxlYXJuIHRoZSBwYXRobmFtZSBpbiB3aGljaCB0aGUgbWVyZ2VkIHJlc3VsdAord2lsbCBiZSBzdG9yZWQgdmlhIHBsYWNlaG9sZGVyIGAlUGAuCisKKworYGNvbmZsaWN0LW1hcmtlci1zaXplYAorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGlzIGF0dHJpYnV0ZSBjb250cm9scyB0aGUgbGVuZ3RoIG9mIGNvbmZsaWN0IG1hcmtlcnMgbGVmdCBpbgordGhlIHdvcmsgdHJlZSBmaWxlIGR1cmluZyBhIGNvbmZsaWN0ZWQgbWVyZ2UuICBPbmx5IHNldHRpbmcgdG8KK3RoZSB2YWx1ZSB0byBhIHBvc2l0aXZlIGludGVnZXIgaGFzIGFueSBtZWFuaW5nZnVsIGVmZmVjdC4KKworRm9yIGV4YW1wbGUsIHRoaXMgbGluZSBpbiBgLmdpdGF0dHJpYnV0ZXNgIGNhbiBiZSB1c2VkIHRvIHRlbGwgdGhlIG1lcmdlCittYWNoaW5lcnkgdG8gbGVhdmUgbXVjaCBsb25nZXIgKGluc3RlYWQgb2YgdGhlIHVzdWFsIDctY2hhcmFjdGVyLWxvbmcpCitjb25mbGljdCBtYXJrZXJzIHdoZW4gbWVyZ2luZyB0aGUgZmlsZSBgRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UudHh0YAorcmVzdWx0cyBpbiBhIGNvbmZsaWN0LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dAljb25mbGljdC1tYXJrZXItc2l6ZT0zMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworQ2hlY2tpbmcgd2hpdGVzcGFjZSBlcnJvcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2B3aGl0ZXNwYWNlYAorXl5eXl5eXl5eXl5eCisKK1RoZSBgY29yZS53aGl0ZXNwYWNlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGFsbG93cyB5b3UgdG8gZGVmaW5lIHdoYXQKKydkaWZmJyBhbmQgJ2FwcGx5JyBzaG91bGQgY29uc2lkZXIgd2hpdGVzcGFjZSBlcnJvcnMgZm9yIGFsbCBwYXRocyBpbgordGhlIHByb2plY3QgKFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLiAgVGhpcyBhdHRyaWJ1dGUgZ2l2ZXMgeW91IGZpbmVyCitjb250cm9sIHBlciBwYXRoLgorCitTZXQ6OgorCisJTm90aWNlIGFsbCB0eXBlcyBvZiBwb3RlbnRpYWwgd2hpdGVzcGFjZSBlcnJvcnMga25vd24gdG8gR2l0LgorCVRoZSB0YWIgd2lkdGggaXMgdGFrZW4gZnJvbSB0aGUgdmFsdWUgb2YgdGhlIGBjb3JlLndoaXRlc3BhY2VgCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworVW5zZXQ6OgorCisJRG8gbm90IG5vdGljZSBhbnl0aGluZyBhcyBlcnJvci4KKworVW5zcGVjaWZpZWQ6OgorCisJVXNlIHRoZSB2YWx1ZSBvZiB0aGUgYGNvcmUud2hpdGVzcGFjZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0bworCWRlY2lkZSB3aGF0IHRvIG5vdGljZSBhcyBlcnJvci4KKworU3RyaW5nOjoKKworCVNwZWNpZnkgYSBjb21tYSBzZXBhcmF0ZSBsaXN0IG9mIGNvbW1vbiB3aGl0ZXNwYWNlIHByb2JsZW1zIHRvCisJbm90aWNlIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgYGNvcmUud2hpdGVzcGFjZWAgY29uZmlndXJhdGlvbgorCXZhcmlhYmxlLgorCisKK0NyZWF0aW5nIGFuIGFyY2hpdmUKK35+fn5+fn5+fn5+fn5+fn5+fn4KKworYGV4cG9ydC1pZ25vcmVgCiteXl5eXl5eXl5eXl5eXl4KKworRmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdpdGggdGhlIGF0dHJpYnV0ZSBgZXhwb3J0LWlnbm9yZWAgd29uJ3QgYmUgYWRkZWQgdG8KK2FyY2hpdmUgZmlsZXMuCisKK2BleHBvcnQtc3Vic3RgCiteXl5eXl5eXl5eXl5eXgorCitJZiB0aGUgYXR0cmlidXRlIGBleHBvcnQtc3Vic3RgIGlzIHNldCBmb3IgYSBmaWxlIHRoZW4gR2l0IHdpbGwgZXhwYW5kCitzZXZlcmFsIHBsYWNlaG9sZGVycyB3aGVuIGFkZGluZyB0aGlzIGZpbGUgdG8gYW4gYXJjaGl2ZS4gIFRoZQorZXhwYW5zaW9uIGRlcGVuZHMgb24gdGhlIGF2YWlsYWJpbGl0eSBvZiBhIGNvbW1pdCBJRCwgaS5lLiwgaWYKK2xpbmtnaXQ6Z2l0LWFyY2hpdmVbMV0gaGFzIGJlZW4gZ2l2ZW4gYSB0cmVlIGluc3RlYWQgb2YgYSBjb21taXQgb3IgYQordGFnIHRoZW4gbm8gcmVwbGFjZW1lbnQgd2lsbCBiZSBkb25lLiAgVGhlIHBsYWNlaG9sZGVycyBhcmUgdGhlIHNhbWUKK2FzIHRob3NlIGZvciB0aGUgb3B0aW9uIGAtLXByZXR0eT1mb3JtYXQ6YCBvZiBsaW5rZ2l0OmdpdC1sb2dbMV0sCitleGNlcHQgdGhhdCB0aGV5IG5lZWQgdG8gYmUgd3JhcHBlZCBsaWtlIHRoaXM6IGAkRm9ybWF0OlBMQUNFSE9MREVSUyRgCitpbiB0aGUgZmlsZS4gIEUuZy4gdGhlIHN0cmluZyBgJEZvcm1hdDolSCRgIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlCitjb21taXQgaGFzaC4KKworCitQYWNraW5nIG9iamVjdHMKK35+fn5+fn5+fn5+fn5+fgorCitgZGVsdGFgCiteXl5eXl5eCisKK0RlbHRhIGNvbXByZXNzaW9uIHdpbGwgbm90IGJlIGF0dGVtcHRlZCBmb3IgYmxvYnMgZm9yIHBhdGhzIHdpdGggdGhlCithdHRyaWJ1dGUgYGRlbHRhYCBzZXQgdG8gZmFsc2UuCisKKworVmlld2luZyBmaWxlcyBpbiBHVUkgdG9vbHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2BlbmNvZGluZ2AKK15eXl5eXl5eXl4KKworVGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIHRoYXQgc2hvdWxkCitiZSB1c2VkIGJ5IEdVSSB0b29scyAoZS5nLiBsaW5rZ2l0OmdpdGtbMV0gYW5kIGxpbmtnaXQ6Z2l0LWd1aVsxXSkgdG8KK2Rpc3BsYXkgdGhlIGNvbnRlbnRzIG9mIHRoZSByZWxldmFudCBmaWxlLiBOb3RlIHRoYXQgZHVlIHRvIHBlcmZvcm1hbmNlCitjb25zaWRlcmF0aW9ucyBsaW5rZ2l0OmdpdGtbMV0gZG9lcyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIHVubGVzcyB5b3UKK21hbnVhbGx5IGVuYWJsZSBwZXItZmlsZSBlbmNvZGluZ3MgaW4gaXRzIG9wdGlvbnMuCisKK0lmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQgb3IgaGFzIGFuIGludmFsaWQgdmFsdWUsIHRoZSB2YWx1ZSBvZiB0aGUKK2BndWkuZW5jb2RpbmdgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgdXNlZCBpbnN0ZWFkCisoU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisKKworVVNJTkcgTUFDUk8gQVRUUklCVVRFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgZG8gbm90IHdhbnQgYW55IGVuZC1vZi1saW5lIGNvbnZlcnNpb25zIGFwcGxpZWQgdG8sIG5vciB0ZXh0dWFsIGRpZmZzCitwcm9kdWNlZCBmb3IsIGFueSBiaW5hcnkgZmlsZSB5b3UgdHJhY2suICBZb3Ugd291bGQgbmVlZCB0byBzcGVjaWZ5IGUuZy4KKworLS0tLS0tLS0tLS0tCisqLmpwZyAtdGV4dCAtZGlmZgorLS0tLS0tLS0tLS0tCisKK2J1dCB0aGF0IG1heSBiZWNvbWUgY3VtYmVyc29tZSwgd2hlbiB5b3UgaGF2ZSBtYW55IGF0dHJpYnV0ZXMuICBVc2luZworbWFjcm8gYXR0cmlidXRlcywgeW91IGNhbiBkZWZpbmUgYW4gYXR0cmlidXRlIHRoYXQsIHdoZW4gc2V0LCBhbHNvCitzZXRzIG9yIHVuc2V0cyBhIG51bWJlciBvZiBvdGhlciBhdHRyaWJ1dGVzIGF0IHRoZSBzYW1lIHRpbWUuICBUaGUKK3N5c3RlbSBrbm93cyBhIGJ1aWx0LWluIG1hY3JvIGF0dHJpYnV0ZSwgYGJpbmFyeWA6CisKKy0tLS0tLS0tLS0tLQorKi5qcGcgYmluYXJ5CistLS0tLS0tLS0tLS0KKworU2V0dGluZyB0aGUgImJpbmFyeSIgYXR0cmlidXRlIGFsc28gdW5zZXRzIHRoZSAidGV4dCIgYW5kICJkaWZmIgorYXR0cmlidXRlcyBhcyBhYm92ZS4gIE5vdGUgdGhhdCBtYWNybyBhdHRyaWJ1dGVzIGNhbiBvbmx5IGJlICJTZXQiLAordGhvdWdoIHNldHRpbmcgb25lIG1pZ2h0IGhhdmUgdGhlIGVmZmVjdCBvZiBzZXR0aW5nIG9yIHVuc2V0dGluZyBvdGhlcgorYXR0cmlidXRlcyBvciBldmVuIHJldHVybmluZyBvdGhlciBhdHRyaWJ1dGVzIHRvIHRoZSAiVW5zcGVjaWZpZWQiCitzdGF0ZS4KKworCitERUZJTklORyBNQUNSTyBBVFRSSUJVVEVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0N1c3RvbSBtYWNybyBhdHRyaWJ1dGVzIGNhbiBiZSBkZWZpbmVkIG9ubHkgaW4gdG9wLWxldmVsIGdpdGF0dHJpYnV0ZXMKK2ZpbGVzIChgJEdJVF9ESVIvaW5mby9hdHRyaWJ1dGVzYCwgdGhlIGAuZ2l0YXR0cmlidXRlc2AgZmlsZSBhdCB0aGUKK3RvcCBsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLCBvciB0aGUgZ2xvYmFsIG9yIHN5c3RlbS13aWRlCitnaXRhdHRyaWJ1dGVzIGZpbGVzKSwgbm90IGluIGAuZ2l0YXR0cmlidXRlc2AgZmlsZXMgaW4gd29ya2luZyB0cmVlCitzdWJkaXJlY3Rvcmllcy4gIFRoZSBidWlsdC1pbiBtYWNybyBhdHRyaWJ1dGUgImJpbmFyeSIgaXMgZXF1aXZhbGVudAordG86CisKKy0tLS0tLS0tLS0tLQorW2F0dHJdYmluYXJ5IC1kaWZmIC1tZXJnZSAtdGV4dAorLS0tLS0tLS0tLS0tCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK0lmIHlvdSBoYXZlIHRoZXNlIHRocmVlIGBnaXRhdHRyaWJ1dGVzYCBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoaW4gJEdJVF9ESVIvaW5mby9hdHRyaWJ1dGVzKQorCithKglmb28gIWJhciAtYmF6CisKKyhpbiAuZ2l0YXR0cmlidXRlcykKK2FiYwlmb28gYmFyIGJhegorCisoaW4gdC8uZ2l0YXR0cmlidXRlcykKK2FiKgltZXJnZT1maWxmcmUKK2FiYwktZm9vIC1iYXIKKyouYwlmcm90egorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0aGUgYXR0cmlidXRlcyBnaXZlbiB0byBwYXRoIGB0L2FiY2AgYXJlIGNvbXB1dGVkIGFzIGZvbGxvd3M6CisKKzEuIEJ5IGV4YW1pbmluZyBgdC8uZ2l0YXR0cmlidXRlc2AgKHdoaWNoIGlzIGluIHRoZSBzYW1lCisgICBkaXJlY3RvcnkgYXMgdGhlIHBhdGggaW4gcXVlc3Rpb24pLCBHaXQgZmluZHMgdGhhdCB0aGUgZmlyc3QKKyAgIGxpbmUgbWF0Y2hlcy4gIGBtZXJnZWAgYXR0cmlidXRlIGlzIHNldC4gIEl0IGFsc28gZmluZHMgdGhhdAorICAgdGhlIHNlY29uZCBsaW5lIG1hdGNoZXMsIGFuZCBhdHRyaWJ1dGVzIGBmb29gIGFuZCBgYmFyYAorICAgYXJlIHVuc2V0LgorCisyLiBUaGVuIGl0IGV4YW1pbmVzIGAuZ2l0YXR0cmlidXRlc2AgKHdoaWNoIGlzIGluIHRoZSBwYXJlbnQKKyAgIGRpcmVjdG9yeSksIGFuZCBmaW5kcyB0aGF0IHRoZSBmaXJzdCBsaW5lIG1hdGNoZXMsIGJ1dAorICAgYHQvLmdpdGF0dHJpYnV0ZXNgIGZpbGUgYWxyZWFkeSBkZWNpZGVkIGhvdyBgbWVyZ2VgLCBgZm9vYAorICAgYW5kIGBiYXJgIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGdpdmVuIHRvIHRoaXMgcGF0aCwgc28gaXQKKyAgIGxlYXZlcyBgZm9vYCBhbmQgYGJhcmAgdW5zZXQuICBBdHRyaWJ1dGUgYGJhemAgaXMgc2V0LgorCiszLiBGaW5hbGx5IGl0IGV4YW1pbmVzIGAkR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXNgLiAgVGhpcyBmaWxlCisgICBpcyB1c2VkIHRvIG92ZXJyaWRlIHRoZSBpbi10cmVlIHNldHRpbmdzLiAgVGhlIGZpcnN0IGxpbmUgaXMKKyAgIGEgbWF0Y2gsIGFuZCBgZm9vYCBpcyBzZXQsIGBiYXJgIGlzIHJldmVydGVkIHRvIHVuc3BlY2lmaWVkCisgICBzdGF0ZSwgYW5kIGBiYXpgIGlzIHVuc2V0LgorCitBcyB0aGUgcmVzdWx0LCB0aGUgYXR0cmlidXRlcyBhc3NpZ25tZW50IHRvIGB0L2FiY2AgYmVjb21lczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZm9vCXNldCB0byB0cnVlCitiYXIJdW5zcGVjaWZpZWQKK2JheglzZXQgdG8gZmFsc2UKK21lcmdlCXNldCB0byBzdHJpbmcgdmFsdWUgImZpbGZyZSIKK2Zyb3R6CXVuc3BlY2lmaWVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1jaGVjay1hdHRyWzFdLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmU0YmE2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRjbGkudHh0CkBAIC0wLDAgKzEsMjM3IEBACitnaXRjbGkoNykKKz09PT09PT09PQorCitOQU1FCistLS0tCitnaXRjbGkgLSBHaXQgY29tbWFuZC1saW5lIGludGVyZmFjZSBhbmQgY29udmVudGlvbnMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitnaXRjbGkKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBtYW51YWwgZGVzY3JpYmVzIHRoZSBjb252ZW50aW9uIHVzZWQgdGhyb3VnaG91dCBHaXQgQ0xJLgorCitNYW55IGNvbW1hbmRzIHRha2UgcmV2aXNpb25zIChtb3N0IG9mdGVuICJjb21taXRzIiwgYnV0IHNvbWV0aW1lcworInRyZWUtaXNoIiwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IGFuZCBjb21tYW5kKSBhbmQgcGF0aHMgYXMgdGhlaXIKK2FyZ3VtZW50cy4gIEhlcmUgYXJlIHRoZSBydWxlczoKKworICogUmV2aXNpb25zIGNvbWUgZmlyc3QgYW5kIHRoZW4gcGF0aHMuCisgICBFLmcuIGluIGBnaXQgZGlmZiB2MS4wIHYyLjAgYXJjaC94ODYgaW5jbHVkZS9hc20teDg2YCwKKyAgIGB2MS4wYCBhbmQgYHYyLjBgIGFyZSByZXZpc2lvbnMgYW5kIGBhcmNoL3g4NmAgYW5kIGBpbmNsdWRlL2FzbS14ODZgCisgICBhcmUgcGF0aHMuCisKKyAqIFdoZW4gYW4gYXJndW1lbnQgY2FuIGJlIG1pc3VuZGVyc3Rvb2QgYXMgZWl0aGVyIGEgcmV2aXNpb24gb3IgYSBwYXRoLAorICAgdGhleSBjYW4gYmUgZGlzYW1iaWd1YXRlZCBieSBwbGFjaW5nIGAtLWAgYmV0d2VlbiB0aGVtLgorICAgRS5nLiBgZ2l0IGRpZmYgLS0gSEVBRGAgaXMsICJJIGhhdmUgYSBmaWxlIGNhbGxlZCBIRUFEIGluIG15IHdvcmsKKyAgIHRyZWUuICBQbGVhc2Ugc2hvdyBjaGFuZ2VzIGJldHdlZW4gdGhlIHZlcnNpb24gSSBzdGFnZWQgaW4gdGhlIGluZGV4CisgICBhbmQgd2hhdCBJIGhhdmUgaW4gdGhlIHdvcmsgdHJlZSBmb3IgdGhhdCBmaWxlIiwgbm90ICJzaG93IGRpZmZlcmVuY2UKKyAgIGJldHdlZW4gdGhlIEhFQUQgY29tbWl0IGFuZCB0aGUgd29yayB0cmVlIGFzIGEgd2hvbGUiLiAgWW91IGNhbiBzYXkKKyAgIGBnaXQgZGlmZiBIRUFEIC0tYCB0byBhc2sgZm9yIHRoZSBsYXR0ZXIuCisKKyAqIFdpdGhvdXQgZGlzYW1iaWd1YXRpbmcgYC0tYCwgR2l0IG1ha2VzIGEgcmVhc29uYWJsZSBndWVzcywgYnV0IGVycm9ycworICAgb3V0IGFuZCBhc2tpbmcgeW91IHRvIGRpc2FtYmlndWF0ZSB3aGVuIGFtYmlndW91cy4gIEUuZy4gaWYgeW91IGhhdmUgYQorICAgZmlsZSBjYWxsZWQgSEVBRCBpbiB5b3VyIHdvcmsgdHJlZSwgYGdpdCBkaWZmIEhFQURgIGlzIGFtYmlndW91cywgYW5kCisgICB5b3UgaGF2ZSB0byBzYXkgZWl0aGVyIGBnaXQgZGlmZiBIRUFEIC0tYCBvciBgZ2l0IGRpZmYgLS0gSEVBRGAgdG8KKyAgIGRpc2FtYmlndWF0ZS4KKworICogQmVjYXVzZSBgLS1gIGRpc2FtYmlndWF0ZXMgcmV2aXNpb25zIGFuZCBwYXRocyBpbiBzb21lIGNvbW1hbmRzLCBpdAorICAgY2Fubm90IGJlIHVzZWQgZm9yIHRob3NlIGNvbW1hbmRzIHRvIHNlcGFyYXRlIG9wdGlvbnMgYW5kIHJldmlzaW9ucy4KKyAgIFlvdSBjYW4gdXNlIGAtLWVuZC1vZi1vcHRpb25zYCBmb3IgdGhpcyAoaXQgYWxzbyB3b3JrcyBmb3IgY29tbWFuZHMKKyAgIHRoYXQgZG8gbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gcmV2aXNpb25zIGluIHBhdGhzLCBpbiB3aGljaCBjYXNlIGl0CisgICBpcyBzaW1wbHkgYW4gYWxpYXMgZm9yIGAtLWApLgorKworV2hlbiB3cml0aW5nIGEgc2NyaXB0IHRoYXQgaXMgZXhwZWN0ZWQgdG8gaGFuZGxlIHJhbmRvbSB1c2VyLWlucHV0LCBpdCBpcworYSBnb29kIHByYWN0aWNlIHRvIG1ha2UgaXQgZXhwbGljaXQgd2hpY2ggYXJndW1lbnRzIGFyZSB3aGljaCBieSBwbGFjaW5nCitkaXNhbWJpZ3VhdGluZyBgLS1gIGF0IGFwcHJvcHJpYXRlIHBsYWNlcy4KKworICogTWFueSBjb21tYW5kcyBhbGxvdyB3aWxkY2FyZHMgaW4gcGF0aHMsIGJ1dCB5b3UgbmVlZCB0byBwcm90ZWN0CisgICB0aGVtIGZyb20gZ2V0dGluZyBnbG9iYmVkIGJ5IHRoZSBzaGVsbC4gIFRoZXNlIHR3byBtZWFuIGRpZmZlcmVudAorICAgdGhpbmdzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc3RvcmUgKi5jCiskIGdpdCByZXN0b3JlIFwqLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGUgZm9ybWVyIGxldHMgeW91ciBzaGVsbCBleHBhbmQgdGhlIGZpbGVnbG9iLCBhbmQgeW91IGFyZSBhc2tpbmcKK3RoZSBkb3QtQyBmaWxlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZSB0byBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSB2ZXJzaW9uCitpbiB0aGUgaW5kZXguICBUaGUgbGF0dGVyIHBhc3NlcyB0aGUgYCouY2AgdG8gR2l0LCBhbmQgeW91IGFyZSBhc2tpbmcKK3RoZSBwYXRocyBpbiB0aGUgaW5kZXggdGhhdCBtYXRjaCB0aGUgcGF0dGVybiB0byBiZSBjaGVja2VkIG91dCB0byB5b3VyCit3b3JraW5nIHRyZWUuICBBZnRlciBydW5uaW5nIGBnaXQgYWRkIGhlbGxvLmM7IHJtIGhlbGxvLmNgLCB5b3Ugd2lsbCBfbm90Xworc2VlIGBoZWxsby5jYCBpbiB5b3VyIHdvcmtpbmcgdHJlZSB3aXRoIHRoZSBmb3JtZXIsIGJ1dCB3aXRoIHRoZSBsYXR0ZXIKK3lvdSB3aWxsLgorCisgKiBKdXN0IGFzIHRoZSBmaWxlc3lzdGVtICcuJyAocGVyaW9kKSByZWZlcnMgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LAorICAgdXNpbmcgYSAnLicgYXMgYSByZXBvc2l0b3J5IG5hbWUgaW4gR2l0IChhIGRvdC1yZXBvc2l0b3J5KSBpcyBhIHJlbGF0aXZlCisgICBwYXRoIGFuZCBtZWFucyB5b3VyIGN1cnJlbnQgcmVwb3NpdG9yeS4KKworSGVyZSBhcmUgdGhlIHJ1bGVzIHJlZ2FyZGluZyB0aGUgImZsYWdzIiB0aGF0IHlvdSBzaG91bGQgZm9sbG93IHdoZW4geW91IGFyZQorc2NyaXB0aW5nIEdpdDoKKworICogaXQncyBwcmVmZXJyZWQgdG8gdXNlIHRoZSBub24tZGFzaGVkIGZvcm0gb2YgR2l0IGNvbW1hbmRzLCB3aGljaCBtZWFucyB0aGF0CisgICB5b3Ugc2hvdWxkIHByZWZlciBgZ2l0IGZvb2AgdG8gYGdpdC1mb29gLgorCisgKiBzcGxpdHRpbmcgc2hvcnQgb3B0aW9ucyB0byBzZXBhcmF0ZSB3b3JkcyAocHJlZmVyIGBnaXQgZm9vIC1hIC1iYAorICAgdG8gYGdpdCBmb28gLWFiYCwgdGhlIGxhdHRlciBtYXkgbm90IGV2ZW4gd29yaykuCisKKyAqIHdoZW4gYSBjb21tYW5kLWxpbmUgb3B0aW9uIHRha2VzIGFuIGFyZ3VtZW50LCB1c2UgdGhlICdzdHVjaycgZm9ybS4gIEluCisgICBvdGhlciB3b3Jkcywgd3JpdGUgYGdpdCBmb28gLW9BcmdgIGluc3RlYWQgb2YgYGdpdCBmb28gLW8gQXJnYCBmb3Igc2hvcnQKKyAgIG9wdGlvbnMsIGFuZCBgZ2l0IGZvbyAtLWxvbmctb3B0PUFyZ2AgaW5zdGVhZCBvZiBgZ2l0IGZvbyAtLWxvbmctb3B0IEFyZ2AKKyAgIGZvciBsb25nIG9wdGlvbnMuICBBbiBvcHRpb24gdGhhdCB0YWtlcyBvcHRpb25hbCBvcHRpb24tYXJndW1lbnQgbXVzdCBiZQorICAgd3JpdHRlbiBpbiB0aGUgJ3N0dWNrJyBmb3JtLgorCisgKiB3aGVuIHlvdSBnaXZlIGEgcmV2aXNpb24gcGFyYW1ldGVyIHRvIGEgY29tbWFuZCwgbWFrZSBzdXJlIHRoZSBwYXJhbWV0ZXIgaXMKKyAgIG5vdCBhbWJpZ3VvdXMgd2l0aCBhIG5hbWUgb2YgYSBmaWxlIGluIHRoZSB3b3JrIHRyZWUuICBFLmcuIGRvIG5vdCB3cml0ZQorICAgYGdpdCBsb2cgLTEgSEVBRGAgYnV0IHdyaXRlIGBnaXQgbG9nIC0xIEhFQUQgLS1gOyB0aGUgZm9ybWVyIHdpbGwgbm90IHdvcmsKKyAgIGlmIHlvdSBoYXBwZW4gdG8gaGF2ZSBhIGZpbGUgY2FsbGVkIGBIRUFEYCBpbiB0aGUgd29yayB0cmVlLgorCisgKiBtYW55IGNvbW1hbmRzIGFsbG93IGEgbG9uZyBvcHRpb24gYC0tb3B0aW9uYCB0byBiZSBhYmJyZXZpYXRlZAorICAgb25seSB0byB0aGVpciB1bmlxdWUgcHJlZml4IChlLmcuIGlmIHRoZXJlIGlzIG5vIG90aGVyIG9wdGlvbgorICAgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBgb3B0YCwgeW91IG1heSBiZSBhYmxlIHRvIHNwZWxsIGAtLW9wdGAgdG8KKyAgIGludm9rZSB0aGUgYC0tb3B0aW9uYCBmbGFnKSwgYnV0IHlvdSBzaG91bGQgZnVsbHkgc3BlbGwgdGhlbSBvdXQKKyAgIHdoZW4gd3JpdGluZyB5b3VyIHNjcmlwdHM7IGxhdGVyIHZlcnNpb25zIG9mIEdpdCBtYXkgaW50cm9kdWNlIGEKKyAgIG5ldyBvcHRpb24gd2hvc2UgbmFtZSBzaGFyZXMgdGhlIHNhbWUgcHJlZml4LCBlLmcuIGAtLW9wdGltaXplYCwKKyAgIHRvIG1ha2UgYSBzaG9ydCBwcmVmaXggdGhhdCB1c2VkIHRvIGJlIHVuaXF1ZSBubyBsb25nZXIgdW5pcXVlLgorCisKK0VOSEFOQ0VEIE9QVElPTiBQQVJTRVIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Zyb20gdGhlIEdpdCAxLjUuNCBzZXJpZXMgYW5kIGZ1cnRoZXIsIG1hbnkgR2l0IGNvbW1hbmRzIChub3QgYWxsIG9mIHRoZW0gYXQgdGhlCit0aW1lIG9mIHRoZSB3cml0aW5nIHRob3VnaCkgY29tZSB3aXRoIGFuIGVuaGFuY2VkIG9wdGlvbiBwYXJzZXIuCisKK0hlcmUgaXMgYSBsaXN0IG9mIHRoZSBmYWNpbGl0aWVzIHByb3ZpZGVkIGJ5IHRoaXMgb3B0aW9uIHBhcnNlci4KKworCitNYWdpYyBPcHRpb25zCit+fn5+fn5+fn5+fn5+CitDb21tYW5kcyB3aGljaCBoYXZlIHRoZSBlbmhhbmNlZCBvcHRpb24gcGFyc2VyIGFjdGl2YXRlZCBhbGwgdW5kZXJzdGFuZCBhCitjb3VwbGUgb2YgbWFnaWMgY29tbWFuZC1saW5lIG9wdGlvbnM6CisKKy1oOjoKKwlnaXZlcyBhIHByZXR0eSBwcmludGVkIHVzYWdlIG9mIHRoZSBjb21tYW5kLgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkZXNjcmliZSAtaAordXNhZ2U6IGdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4qCisgICBvcjogZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIC0tZGlydHkKKworICAgIC0tY29udGFpbnMgICAgICAgICAgICBmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0CisgICAgLS1kZWJ1ZyAgICAgICAgICAgICAgIGRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIKKyAgICAtLWFsbCAgICAgICAgICAgICAgICAgdXNlIGFueSByZWYKKyAgICAtLXRhZ3MgICAgICAgICAgICAgICAgdXNlIGFueSB0YWcsIGV2ZW4gdW5hbm5vdGF0ZWQKKyAgICAtLWxvbmcgICAgICAgICAgICAgICAgYWx3YXlzIHVzZSBsb25nIGZvcm1hdAorICAgIC0tYWJicmV2Wz08bj5dICAgICAgICB1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitOb3RlIHRoYXQgc29tZSBzdWJjb21tYW5kIChlLmcuIGBnaXQgZ3JlcGApIG1heSBiZWhhdmUgZGlmZmVyZW50bHkKK3doZW4gdGhlcmUgYXJlIHRoaW5ncyBvbiB0aGUgY29tbWFuZCBsaW5lIG90aGVyIHRoYW4gYC1oYCwgYnV0IGBnaXQKK3N1YmNtZCAtaGAgd2l0aG91dCBhbnl0aGluZyBlbHNlIG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgbWVhbnQgdG8KK2NvbnNpc3RlbnRseSBnaXZlIHRoZSB1c2FnZS4KKworLS1oZWxwLWFsbDo6CisJU29tZSBHaXQgY29tbWFuZHMgdGFrZSBvcHRpb25zIHRoYXQgYXJlIG9ubHkgdXNlZCBmb3IgcGx1bWJpbmcgb3IgdGhhdAorCWFyZSBkZXByZWNhdGVkLCBhbmQgc3VjaCBvcHRpb25zIGFyZSBoaWRkZW4gZnJvbSB0aGUgZGVmYXVsdCB1c2FnZS4gVGhpcworCW9wdGlvbiBnaXZlcyB0aGUgZnVsbCBsaXN0IG9mIG9wdGlvbnMuCisKKworTmVnYXRpbmcgb3B0aW9ucworfn5+fn5+fn5+fn5+fn5+fgorT3B0aW9ucyB3aXRoIGxvbmcgb3B0aW9uIG5hbWVzIGNhbiBiZSBuZWdhdGVkIGJ5IHByZWZpeGluZyBgLS1uby1gLiBGb3IKK2V4YW1wbGUsIGBnaXQgYnJhbmNoYCBoYXMgdGhlIG9wdGlvbiBgLS10cmFja2Agd2hpY2ggaXMgJ29uJyBieSBkZWZhdWx0LiBZb3UKK2NhbiB1c2UgYC0tbm8tdHJhY2tgIHRvIG92ZXJyaWRlIHRoYXQgYmVoYXZpb3VyLiBUaGUgc2FtZSBnb2VzIGZvciBgLS1jb2xvcmAKK2FuZCBgLS1uby1jb2xvcmAuCisKKworQWdncmVnYXRpbmcgc2hvcnQgb3B0aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorQ29tbWFuZHMgdGhhdCBzdXBwb3J0IHRoZSBlbmhhbmNlZCBvcHRpb24gcGFyc2VyIGFsbG93IHlvdSB0byBhZ2dyZWdhdGUgc2hvcnQKK29wdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIGZvciBleGFtcGxlIHVzZSBgZ2l0IHJtIC1yZmAgb3IKK2BnaXQgY2xlYW4gLWZkeGAuCisKKworQWJicmV2aWF0aW5nIGxvbmcgb3B0aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorQ29tbWFuZHMgdGhhdCBzdXBwb3J0IHRoZSBlbmhhbmNlZCBvcHRpb24gcGFyc2VyIGFjY2VwdHMgdW5pcXVlCitwcmVmaXggb2YgYSBsb25nIG9wdGlvbiBhcyBpZiBpdCBpcyBmdWxseSBzcGVsbGVkIG91dCwgYnV0IHVzZSB0aGlzCit3aXRoIGEgY2F1dGlvbi4gIEZvciBleGFtcGxlLCBgZ2l0IGNvbW1pdCAtLWFtZW5gIGJlaGF2ZXMgYXMgaWYgeW91Cit0eXBlZCBgZ2l0IGNvbW1pdCAtLWFtZW5kYCwgYnV0IHRoYXQgaXMgdHJ1ZSBvbmx5IHVudGlsIGEgbGF0ZXIgdmVyc2lvbgorb2YgR2l0IGludHJvZHVjZXMgYW5vdGhlciBvcHRpb24gdGhhdCBzaGFyZXMgdGhlIHNhbWUgcHJlZml4LAorZS5nLiBgZ2l0IGNvbW1pdCAtLWFtZW5pdHlgIG9wdGlvbi4KKworCitTZXBhcmF0aW5nIGFyZ3VtZW50IGZyb20gdGhlIG9wdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1lvdSBjYW4gd3JpdGUgdGhlIG1hbmRhdG9yeSBvcHRpb24gcGFyYW1ldGVyIHRvIGFuIG9wdGlvbiBhcyBhIHNlcGFyYXRlCit3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGF0IG1lYW5zIHRoYXQgYWxsIHRoZSBmb2xsb3dpbmcgdXNlcyB3b3JrOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmb28gLS1sb25nLW9wdD1BcmcKKyQgZ2l0IGZvbyAtLWxvbmctb3B0IEFyZworJCBnaXQgZm9vIC1vQXJnCiskIGdpdCBmb28gLW8gQXJnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hvd2V2ZXIsIHRoaXMgaXMgKk5PVCogYWxsb3dlZCBmb3Igc3dpdGNoZXMgd2l0aCBhbiBvcHRpb25hbCB2YWx1ZSwgd2hlcmUgdGhlCisnc3R1Y2snIGZvcm0gbXVzdCBiZSB1c2VkOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGVzY3JpYmUgLS1hYmJyZXYgSEVBRCAgICAgIyBjb3JyZWN0CiskIGdpdCBkZXNjcmliZSAtLWFiYnJldj0xMCBIRUFEICAjIGNvcnJlY3QKKyQgZ2l0IGRlc2NyaWJlIC0tYWJicmV2IDEwIEhFQUQgICMgTk9UIFdIQVQgWU9VIE1FQU5UCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworTk9URVMgT04gRlJFUVVFTlRMWSBDT05GVVNFRCBPUFRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFueSBjb21tYW5kcyB0aGF0IGNhbiB3b3JrIG9uIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUKK2FuZC9vciBpbiB0aGUgaW5kZXggY2FuIHRha2UgYC0tY2FjaGVkYCBhbmQvb3IgYC0taW5kZXhgCitvcHRpb25zLiAgU29tZXRpbWVzIHBlb3BsZSBpbmNvcnJlY3RseSB0aGluayB0aGF0LCBiZWNhdXNlCit0aGUgaW5kZXggd2FzIG9yaWdpbmFsbHkgY2FsbGVkIGNhY2hlLCB0aGVzZSB0d28gYXJlCitzeW5vbnltcy4gIFRoZXkgYXJlICpub3QqIC0tIHRoZXNlIHR3byBvcHRpb25zIG1lYW4gdmVyeQorZGlmZmVyZW50IHRoaW5ncy4KKworICogVGhlIGAtLWNhY2hlZGAgb3B0aW9uIGlzIHVzZWQgdG8gYXNrIGEgY29tbWFuZCB0aGF0CisgICB1c3VhbGx5IHdvcmtzIG9uIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gKm9ubHkqIHdvcmsKKyAgIHdpdGggdGhlIGluZGV4LiAgRm9yIGV4YW1wbGUsIGBnaXQgZ3JlcGAsIHdoZW4gdXNlZAorICAgd2l0aG91dCBhIGNvbW1pdCB0byBzcGVjaWZ5IGZyb20gd2hpY2ggY29tbWl0IHRvIGxvb2sgZm9yCisgICBzdHJpbmdzIGluLCB1c3VhbGx5IHdvcmtzIG9uIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUsCisgICBidXQgd2l0aCB0aGUgYC0tY2FjaGVkYCBvcHRpb24sIGl0IGxvb2tzIGZvciBzdHJpbmdzIGluCisgICB0aGUgaW5kZXguCisKKyAqIFRoZSBgLS1pbmRleGAgb3B0aW9uIGlzIHVzZWQgdG8gYXNrIGEgY29tbWFuZCB0aGF0CisgICB1c3VhbGx5IHdvcmtzIG9uIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gKmFsc28qCisgICBhZmZlY3QgdGhlIGluZGV4LiAgRm9yIGV4YW1wbGUsIGBnaXQgc3Rhc2ggYXBwbHlgIHVzdWFsbHkKKyAgIG1lcmdlcyBjaGFuZ2VzIHJlY29yZGVkIGluIGEgc3Rhc2ggZW50cnkgdG8gdGhlIHdvcmtpbmcgdHJlZSwKKyAgIGJ1dCB3aXRoIHRoZSBgLS1pbmRleGAgb3B0aW9uLCBpdCBhbHNvIG1lcmdlcyBjaGFuZ2VzIHRvCisgICB0aGUgaW5kZXggYXMgd2VsbC4KKworYGdpdCBhcHBseWAgY29tbWFuZCBjYW4gYmUgdXNlZCB3aXRoIGAtLWNhY2hlZGAgYW5kCitgLS1pbmRleGAgKGJ1dCBub3QgYXQgdGhlIHNhbWUgdGltZSkuICBVc3VhbGx5IHRoZSBjb21tYW5kCitvbmx5IGFmZmVjdHMgdGhlIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUsIGJ1dCB3aXRoCitgLS1pbmRleGAsIGl0IHBhdGNoZXMgYm90aCB0aGUgZmlsZXMgYW5kIHRoZWlyIGluZGV4CitlbnRyaWVzLCBhbmQgd2l0aCBgLS1jYWNoZWRgLCBpdCBtb2RpZmllcyBvbmx5IHRoZSBpbmRleAorZW50cmllcy4KKworU2VlIGFsc28gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0Lzd2NjRjbGc1dTkuZnNmQGFzc2lnbmVkLWJ5LWRoY3AuY294Lm5ldC8gYW5kCitodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvN3Z5N2VqOWczOC5mc2ZAZ2l0c3Rlci5zaWFtZXNlLmR5bmRucy5vcmcvIGZvciBmdXJ0aGVyCitpbmZvcm1hdGlvbi4KKworU29tZSBvdGhlciBjb21tYW5kcyB0aGF0IGFsc28gd29yayBvbiBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFuZC9vcgoraW4gdGhlIGluZGV4IGNhbiB0YWtlIGAtLXN0YWdlZGAgYW5kL29yIGAtLXdvcmt0cmVlYC4KKworKiBgLS1zdGFnZWRgIGlzIGV4YWN0bHkgbGlrZSBgLS1jYWNoZWRgLCB3aGljaCBpcyB1c2VkIHRvIGFzayBhCisgIGNvbW1hbmQgdG8gb25seSB3b3JrIG9uIHRoZSBpbmRleCwgbm90IHRoZSB3b3JraW5nIHRyZWUuCisKKyogYC0td29ya3RyZWVgIGlzIHRoZSBvcHBvc2l0ZSwgdG8gYXNrIGEgY29tbWFuZCB0byB3b3JrIG9uIHRoZQorICB3b3JraW5nIHRyZWUgb25seSwgbm90IHRoZSBpbmRleC4KKworKiBUaGUgdHdvIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCB0b2dldGhlciB0byBhc2sgYSBjb21tYW5kIHRvIHdvcmsKKyAgb24gYm90aCB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRjb3JlLXR1dG9yaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Y29yZS10dXRvcmlhbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBiOTUyNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0Y29yZS10dXRvcmlhbC50eHQKQEAgLTAsMCArMSwxNjYwIEBACitnaXRjb3JlLXR1dG9yaWFsKDcpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdGNvcmUtdHV0b3JpYWwgLSBBIEdpdCBjb3JlIHR1dG9yaWFsIGZvciBkZXZlbG9wZXJzCisKK1NZTk9QU0lTCistLS0tLS0tLQorZ2l0ICoKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgdHV0b3JpYWwgZXhwbGFpbnMgaG93IHRvIHVzZSB0aGUgImNvcmUiIEdpdCBjb21tYW5kcyB0byBzZXQgdXAgYW5kCit3b3JrIHdpdGggYSBHaXQgcmVwb3NpdG9yeS4KKworSWYgeW91IGp1c3QgbmVlZCB0byB1c2UgR2l0IGFzIGEgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0geW91IG1heSBwcmVmZXIKK3RvIHN0YXJ0IHdpdGggIkEgVHV0b3JpYWwgSW50cm9kdWN0aW9uIHRvIEdpdCIgKGxpbmtnaXQ6Z2l0dHV0b3JpYWxbN10pIG9yCitsaW5rOnVzZXItbWFudWFsLmh0bWxbdGhlIEdpdCBVc2VyIE1hbnVhbF0uCisKK0hvd2V2ZXIsIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlc2UgbG93LWxldmVsIHRvb2xzIGNhbiBiZSBoZWxwZnVsIGlmCit5b3Ugd2FudCB0byB1bmRlcnN0YW5kIEdpdCdzIGludGVybmFscy4KKworVGhlIGNvcmUgR2l0IGlzIG9mdGVuIGNhbGxlZCAicGx1bWJpbmciLCB3aXRoIHRoZSBwcmV0dGllciB1c2VyCitpbnRlcmZhY2VzIG9uIHRvcCBvZiBpdCBjYWxsZWQgInBvcmNlbGFpbiIuIFlvdSBtYXkgbm90IHdhbnQgdG8gdXNlIHRoZQorcGx1bWJpbmcgZGlyZWN0bHkgdmVyeSBvZnRlbiwgYnV0IGl0IGNhbiBiZSBnb29kIHRvIGtub3cgd2hhdCB0aGUKK3BsdW1iaW5nIGRvZXMgd2hlbiB0aGUgcG9yY2VsYWluIGlzbid0IGZsdXNoaW5nLgorCitCYWNrIHdoZW4gdGhpcyBkb2N1bWVudCB3YXMgb3JpZ2luYWxseSB3cml0dGVuLCBtYW55IHBvcmNlbGFpbgorY29tbWFuZHMgd2VyZSBzaGVsbCBzY3JpcHRzLiBGb3Igc2ltcGxpY2l0eSwgaXQgc3RpbGwgdXNlcyB0aGVtIGFzCitleGFtcGxlcyB0byBpbGx1c3RyYXRlIGhvdyBwbHVtYmluZyBpcyBmaXQgdG9nZXRoZXIgdG8gZm9ybSB0aGUKK3BvcmNlbGFpbiBjb21tYW5kcy4gVGhlIHNvdXJjZSB0cmVlIGluY2x1ZGVzIHNvbWUgb2YgdGhlc2Ugc2NyaXB0cyBpbgorY29udHJpYi9leGFtcGxlcy8gZm9yIHJlZmVyZW5jZS4gQWx0aG91Z2ggdGhlc2UgYXJlIG5vdCBpbXBsZW1lbnRlZCBhcworc2hlbGwgc2NyaXB0cyBhbnltb3JlLCB0aGUgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGUgcGx1bWJpbmcgbGF5ZXIKK2NvbW1hbmRzIGRvIGlzIHN0aWxsIHZhbGlkLgorCitbTk9URV0KK0RlZXBlciB0ZWNobmljYWwgZGV0YWlscyBhcmUgb2Z0ZW4gbWFya2VkIGFzIE5vdGVzLCB3aGljaCB5b3UgY2FuCitza2lwIG9uIHlvdXIgZmlyc3QgcmVhZGluZy4KKworCitDcmVhdGluZyBhIEdpdCByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NyZWF0aW5nIGEgbmV3IEdpdCByZXBvc2l0b3J5IGNvdWxkbid0IGJlIGVhc2llcjogYWxsIEdpdCByZXBvc2l0b3JpZXMgc3RhcnQKK291dCBlbXB0eSwgYW5kIHRoZSBvbmx5IHRoaW5nIHlvdSBuZWVkIHRvIGRvIGlzIGZpbmQgeW91cnNlbGYgYQorc3ViZGlyZWN0b3J5IHRoYXQgeW91IHdhbnQgdG8gdXNlIGFzIGEgd29ya2luZyB0cmVlIC0gZWl0aGVyIGFuIGVtcHR5CitvbmUgZm9yIGEgdG90YWxseSBuZXcgcHJvamVjdCwgb3IgYW4gZXhpc3Rpbmcgd29ya2luZyB0cmVlIHRoYXQgeW91IHdhbnQKK3RvIGltcG9ydCBpbnRvIEdpdC4KKworRm9yIG91ciBmaXJzdCBleGFtcGxlLCB3ZSdyZSBnb2luZyB0byBzdGFydCBhIHRvdGFsbHkgbmV3IHJlcG9zaXRvcnkgZnJvbQorc2NyYXRjaCwgd2l0aCBubyBwcmUtZXhpc3RpbmcgZmlsZXMsIGFuZCB3ZSdsbCBjYWxsIGl0ICdnaXQtdHV0b3JpYWwnLgorVG8gc3RhcnQgdXAsIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeSBmb3IgaXQsIGNoYW5nZSBpbnRvIHRoYXQKK3N1YmRpcmVjdG9yeSwgYW5kIGluaXRpYWxpemUgdGhlIEdpdCBpbmZyYXN0cnVjdHVyZSB3aXRoICdnaXQgaW5pdCc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBta2RpciBnaXQtdHV0b3JpYWwKKyQgY2QgZ2l0LXR1dG9yaWFsCiskIGdpdCBpbml0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gd2hpY2ggR2l0IHdpbGwgcmVwbHkKKworLS0tLS0tLS0tLS0tLS0tLQorSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gLmdpdC8KKy0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggaXMganVzdCBHaXQncyB3YXkgb2Ygc2F5aW5nIHRoYXQgeW91IGhhdmVuJ3QgYmVlbiBkb2luZyBhbnl0aGluZworc3RyYW5nZSwgYW5kIHRoYXQgaXQgd2lsbCBoYXZlIGNyZWF0ZWQgYSBsb2NhbCBgLmdpdGAgZGlyZWN0b3J5IHNldHVwIGZvcgoreW91ciBuZXcgcHJvamVjdC4gWW91IHdpbGwgbm93IGhhdmUgYSBgLmdpdGAgZGlyZWN0b3J5LCBhbmQgeW91IGNhbgoraW5zcGVjdCB0aGF0IHdpdGggJ2xzJy4gRm9yIHlvdXIgbmV3IGVtcHR5IHByb2plY3QsIGl0IHNob3VsZCBzaG93IHlvdQordGhyZWUgZW50cmllcywgYW1vbmcgb3RoZXIgdGhpbmdzOgorCisgLSBhIGZpbGUgY2FsbGVkIGBIRUFEYCwgdGhhdCBoYXMgYHJlZjogcmVmcy9oZWFkcy9tYXN0ZXJgIGluIGl0LgorICAgVGhpcyBpcyBzaW1pbGFyIHRvIGEgc3ltYm9saWMgbGluayBhbmQgcG9pbnRzIGF0CisgICBgcmVmcy9oZWFkcy9tYXN0ZXJgIHJlbGF0aXZlIHRvIHRoZSBgSEVBRGAgZmlsZS4KKysKK0Rvbid0IHdvcnJ5IGFib3V0IHRoZSBmYWN0IHRoYXQgdGhlIGZpbGUgdGhhdCB0aGUgYEhFQURgIGxpbmsgcG9pbnRzIHRvCitkb2Vzbid0IGV2ZW4gZXhpc3QgeWV0IC0tIHlvdSBoYXZlbid0IGNyZWF0ZWQgdGhlIGNvbW1pdCB0aGF0IHdpbGwKK3N0YXJ0IHlvdXIgYEhFQURgIGRldmVsb3BtZW50IGJyYW5jaCB5ZXQuCisKKyAtIGEgc3ViZGlyZWN0b3J5IGNhbGxlZCBgb2JqZWN0c2AsIHdoaWNoIHdpbGwgY29udGFpbiBhbGwgdGhlCisgICBvYmplY3RzIG9mIHlvdXIgcHJvamVjdC4gWW91IHNob3VsZCBuZXZlciBoYXZlIGFueSByZWFsIHJlYXNvbiB0bworICAgbG9vayBhdCB0aGUgb2JqZWN0cyBkaXJlY3RseSwgYnV0IHlvdSBtaWdodCB3YW50IHRvIGtub3cgdGhhdCB0aGVzZQorICAgb2JqZWN0cyBhcmUgd2hhdCBjb250YWlucyBhbGwgdGhlIHJlYWwgJ2RhdGEnIGluIHlvdXIgcmVwb3NpdG9yeS4KKworIC0gYSBzdWJkaXJlY3RvcnkgY2FsbGVkIGByZWZzYCwgd2hpY2ggY29udGFpbnMgcmVmZXJlbmNlcyB0byBvYmplY3RzLgorCitJbiBwYXJ0aWN1bGFyLCB0aGUgYHJlZnNgIHN1YmRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gdHdvIG90aGVyCitzdWJkaXJlY3RvcmllcywgbmFtZWQgYGhlYWRzYCBhbmQgYHRhZ3NgIHJlc3BlY3RpdmVseS4gVGhleSBkbworZXhhY3RseSB3aGF0IHRoZWlyIG5hbWVzIGltcGx5OiB0aGV5IGNvbnRhaW4gcmVmZXJlbmNlcyB0byBhbnkgbnVtYmVyCitvZiBkaWZmZXJlbnQgJ2hlYWRzJyBvZiBkZXZlbG9wbWVudCAoYWthICdicmFuY2hlcycpLCBhbmQgdG8gYW55CisndGFncycgdGhhdCB5b3UgaGF2ZSBjcmVhdGVkIHRvIG5hbWUgc3BlY2lmaWMgdmVyc2lvbnMgaW4geW91cgorcmVwb3NpdG9yeS4KKworT25lIG5vdGU6IHRoZSBzcGVjaWFsIGBtYXN0ZXJgIGhlYWQgaXMgdGhlIGRlZmF1bHQgYnJhbmNoLCB3aGljaCBpcword2h5IHRoZSBgLmdpdC9IRUFEYCBmaWxlIHdhcyBjcmVhdGVkIHBvaW50cyB0byBpdCBldmVuIGlmIGl0Citkb2Vzbid0IHlldCBleGlzdC4gQmFzaWNhbGx5LCB0aGUgYEhFQURgIGxpbmsgaXMgc3VwcG9zZWQgdG8gYWx3YXlzCitwb2ludCB0byB0aGUgYnJhbmNoIHlvdSBhcmUgd29ya2luZyBvbiByaWdodCBub3csIGFuZCB5b3UgYWx3YXlzCitzdGFydCBvdXQgZXhwZWN0aW5nIHRvIHdvcmsgb24gdGhlIGBtYXN0ZXJgIGJyYW5jaC4KKworSG93ZXZlciwgdGhpcyBpcyBvbmx5IGEgY29udmVudGlvbiwgYW5kIHlvdSBjYW4gbmFtZSB5b3VyIGJyYW5jaGVzCithbnl0aGluZyB5b3Ugd2FudCwgYW5kIGRvbid0IGhhdmUgdG8gZXZlciBldmVuICdoYXZlJyBhIGBtYXN0ZXJgCiticmFuY2guIEEgbnVtYmVyIG9mIHRoZSBHaXQgdG9vbHMgd2lsbCBhc3N1bWUgdGhhdCBgLmdpdC9IRUFEYCBpcwordmFsaWQsIHRob3VnaC4KKworW05PVEVdCitBbiAnb2JqZWN0JyBpcyBpZGVudGlmaWVkIGJ5IGl0cyAxNjAtYml0IFNIQS0xIGhhc2gsIGFrYSAnb2JqZWN0IG5hbWUnLAorYW5kIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCBpcyBhbHdheXMgdGhlIDQwLWJ5dGUgaGV4CityZXByZXNlbnRhdGlvbiBvZiB0aGF0IFNIQS0xIG5hbWUuIFRoZSBmaWxlcyBpbiB0aGUgYHJlZnNgCitzdWJkaXJlY3RvcnkgYXJlIGV4cGVjdGVkIHRvIGNvbnRhaW4gdGhlc2UgaGV4IHJlZmVyZW5jZXMKKyh1c3VhbGx5IHdpdGggYSBmaW5hbCBgXG5gIGF0IHRoZSBlbmQpLCBhbmQgeW91IHNob3VsZCB0aHVzCitleHBlY3QgdG8gc2VlIGEgbnVtYmVyIG9mIDQxLWJ5dGUgZmlsZXMgY29udGFpbmluZyB0aGVzZQorcmVmZXJlbmNlcyBpbiB0aGVzZSBgcmVmc2Agc3ViZGlyZWN0b3JpZXMgd2hlbiB5b3UgYWN0dWFsbHkgc3RhcnQKK3BvcHVsYXRpbmcgeW91ciB0cmVlLgorCitbTk9URV0KK0FuIGFkdmFuY2VkIHVzZXIgbWF5IHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgbGlua2dpdDpnaXRyZXBvc2l0b3J5LWxheW91dFs1XQorYWZ0ZXIgZmluaXNoaW5nIHRoaXMgdHV0b3JpYWwuCisKK1lvdSBoYXZlIG5vdyBjcmVhdGVkIHlvdXIgZmlyc3QgR2l0IHJlcG9zaXRvcnkuIE9mIGNvdXJzZSwgc2luY2UgaXQncworZW1wdHksIHRoYXQncyBub3QgdmVyeSB1c2VmdWwsIHNvIGxldCdzIHN0YXJ0IHBvcHVsYXRpbmcgaXQgd2l0aCBkYXRhLgorCisKK1BvcHVsYXRpbmcgYSBHaXQgcmVwb3NpdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlJ2xsIGtlZXAgdGhpcyBzaW1wbGUgYW5kIHN0dXBpZCwgc28gd2UnbGwgc3RhcnQgb2ZmIHdpdGggcG9wdWxhdGluZyBhCitmZXcgdHJpdmlhbCBmaWxlcyBqdXN0IHRvIGdldCBhIGZlZWwgZm9yIGl0LgorCitTdGFydCBvZmYgd2l0aCBqdXN0IGNyZWF0aW5nIGFueSByYW5kb20gZmlsZXMgdGhhdCB5b3Ugd2FudCB0byBtYWludGFpbgoraW4geW91ciBHaXQgcmVwb3NpdG9yeS4gV2UnbGwgc3RhcnQgb2ZmIHdpdGggYSBmZXcgYmFkIGV4YW1wbGVzLCBqdXN0IHRvCitnZXQgYSBmZWVsIGZvciBob3cgdGhpcyB3b3JrczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGVjaG8gIkhlbGxvIFdvcmxkIiA+aGVsbG8KKyQgZWNobyAiU2lsbHkgZXhhbXBsZSIgPmV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit5b3UgaGF2ZSBub3cgY3JlYXRlZCB0d28gZmlsZXMgaW4geW91ciB3b3JraW5nIHRyZWUgKGFrYSAnd29ya2luZyBkaXJlY3RvcnknKSwKK2J1dCB0byBhY3R1YWxseSBjaGVjayBpbiB5b3VyIGhhcmQgd29yaywgeW91IHdpbGwgaGF2ZSB0byBnbyB0aHJvdWdoIHR3byBzdGVwczoKKworIC0gZmlsbCBpbiB0aGUgJ2luZGV4JyBmaWxlIChha2EgJ2NhY2hlJykgd2l0aCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgeW91cgorICAgd29ya2luZyB0cmVlIHN0YXRlLgorCisgLSBjb21taXQgdGhhdCBpbmRleCBmaWxlIGFzIGFuIG9iamVjdC4KKworVGhlIGZpcnN0IHN0ZXAgaXMgdHJpdmlhbDogd2hlbiB5b3Ugd2FudCB0byB0ZWxsIEdpdCBhYm91dCBhbnkgY2hhbmdlcwordG8geW91ciB3b3JraW5nIHRyZWUsIHlvdSB1c2UgdGhlICdnaXQgdXBkYXRlLWluZGV4JyBwcm9ncmFtLiBUaGF0Citwcm9ncmFtIG5vcm1hbGx5IGp1c3QgdGFrZXMgYSBsaXN0IG9mIGZpbGVuYW1lcyB5b3Ugd2FudCB0byB1cGRhdGUsIGJ1dAordG8gYXZvaWQgdHJpdmlhbCBtaXN0YWtlcywgaXQgcmVmdXNlcyB0byBhZGQgbmV3IGVudHJpZXMgdG8gdGhlIGluZGV4Cisob3IgcmVtb3ZlIGV4aXN0aW5nIG9uZXMpIHVubGVzcyB5b3UgZXhwbGljaXRseSB0ZWxsIGl0IHRoYXQgeW91J3JlCithZGRpbmcgYSBuZXcgZW50cnkgd2l0aCB0aGUgYC0tYWRkYCBmbGFnIChvciByZW1vdmluZyBhbiBlbnRyeSB3aXRoIHRoZQorYC0tcmVtb3ZlYCkgZmxhZy4KKworU28gdG8gcG9wdWxhdGUgdGhlIGluZGV4IHdpdGggdGhlIHR3byBmaWxlcyB5b3UganVzdCBjcmVhdGVkLCB5b3UgY2FuIGRvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGhlbGxvIGV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgeW91IGhhdmUgbm93IHRvbGQgR2l0IHRvIHRyYWNrIHRob3NlIHR3byBmaWxlcy4KKworSW4gZmFjdCwgYXMgeW91IGRpZCB0aGF0LCBpZiB5b3Ugbm93IGxvb2sgaW50byB5b3VyIG9iamVjdCBkaXJlY3RvcnksCit5b3UnbGwgbm90aWNlIHRoYXQgR2l0IHdpbGwgaGF2ZSBhZGRlZCB0d28gbmV3IG9iamVjdHMgdG8gdGhlIG9iamVjdAorZGF0YWJhc2UuIElmIHlvdSBkaWQgZXhhY3RseSB0aGUgc3RlcHMgYWJvdmUsIHlvdSBzaG91bGQgbm93IGJlIGFibGUgdG8gZG8KKworCistLS0tLS0tLS0tLS0tLS0tCiskIGxzIC5naXQvb2JqZWN0cy8/Py8qCistLS0tLS0tLS0tLS0tLS0tCisKK2FuZCBzZWUgdHdvIGZpbGVzOgorCistLS0tLS0tLS0tLS0tLS0tCisuZ2l0L29iamVjdHMvNTUvN2RiMDNkZTk5N2M4NmE0YTAyOGUxZWJkM2ExY2ViMjI1YmUyMzgKKy5naXQvb2JqZWN0cy9mMi80Yzc0YTJlNTAwZjVlZTEzMzJjODZiOTQxOTlmNTJiMWQxZDk2MgorLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCBjb3JyZXNwb25kIHdpdGggdGhlIG9iamVjdHMgd2l0aCBuYW1lcyBvZiBgNTU3ZGIuLi5gIGFuZAorYGYyNGM3Li4uYCByZXNwZWN0aXZlbHkuCisKK0lmIHlvdSB3YW50IHRvLCB5b3UgY2FuIHVzZSAnZ2l0IGNhdC1maWxlJyB0byBsb29rIGF0IHRob3NlIG9iamVjdHMsIGJ1dAoreW91J2xsIGhhdmUgdG8gdXNlIHRoZSBvYmplY3QgbmFtZSwgbm90IHRoZSBmaWxlbmFtZSBvZiB0aGUgb2JqZWN0OgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSAtdCA1NTdkYjAzZGU5OTdjODZhNGEwMjhlMWViZDNhMWNlYjIyNWJlMjM4CistLS0tLS0tLS0tLS0tLS0tCisKK3doZXJlIHRoZSBgLXRgIHRlbGxzICdnaXQgY2F0LWZpbGUnIHRvIHRlbGwgeW91IHdoYXQgdGhlICJ0eXBlIiBvZiB0aGUKK29iamVjdCBpcy4gR2l0IHdpbGwgdGVsbCB5b3UgdGhhdCB5b3UgaGF2ZSBhICJibG9iIiBvYmplY3QgKGkuZS4sIGp1c3QgYQorcmVndWxhciBmaWxlKSwgYW5kIHlvdSBjYW4gc2VlIHRoZSBjb250ZW50cyB3aXRoCisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNhdC1maWxlIGJsb2IgNTU3ZGIwMworLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIHByaW50IG91dCAiSGVsbG8gV29ybGQiLiBUaGUgb2JqZWN0IGA1NTdkYjAzYCBpcyBub3RoaW5nCittb3JlIHRoYW4gdGhlIGNvbnRlbnRzIG9mIHlvdXIgZmlsZSBgaGVsbG9gLgorCitbTk9URV0KK0Rvbid0IGNvbmZ1c2UgdGhhdCBvYmplY3Qgd2l0aCB0aGUgZmlsZSBgaGVsbG9gIGl0c2VsZi4gVGhlCitvYmplY3QgaXMgbGl0ZXJhbGx5IGp1c3QgdGhvc2Ugc3BlY2lmaWMgKmNvbnRlbnRzKiBvZiB0aGUgZmlsZSwgYW5kCitob3dldmVyIG11Y2ggeW91IGxhdGVyIGNoYW5nZSB0aGUgY29udGVudHMgaW4gZmlsZSBgaGVsbG9gLCB0aGUgb2JqZWN0Cit3ZSBqdXN0IGxvb2tlZCBhdCB3aWxsIG5ldmVyIGNoYW5nZS4gT2JqZWN0cyBhcmUgaW1tdXRhYmxlLgorCitbTk9URV0KK1RoZSBzZWNvbmQgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgdGhhdCB5b3UgY2FuCithYmJyZXZpYXRlIHRoZSBvYmplY3QgbmFtZSB0byBvbmx5IHRoZSBmaXJzdCBzZXZlcmFsCitoZXhhZGVjaW1hbCBkaWdpdHMgaW4gbW9zdCBwbGFjZXMuCisKK0FueXdheSwgYXMgd2UgbWVudGlvbmVkIHByZXZpb3VzbHksIHlvdSBub3JtYWxseSBuZXZlciBhY3R1YWxseSB0YWtlIGEKK2xvb2sgYXQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcywgYW5kIHR5cGluZyBsb25nIDQwLWNoYXJhY3RlciBoZXgKK25hbWVzIGlzIG5vdCBzb21ldGhpbmcgeW91J2Qgbm9ybWFsbHkgd2FudCB0byBkby4gVGhlIGFib3ZlIGRpZ3Jlc3Npb24KK3dhcyBqdXN0IHRvIHNob3cgdGhhdCAnZ2l0IHVwZGF0ZS1pbmRleCcgZGlkIHNvbWV0aGluZyBtYWdpY2FsLCBhbmQKK2FjdHVhbGx5IHNhdmVkIGF3YXkgdGhlIGNvbnRlbnRzIG9mIHlvdXIgZmlsZXMgaW50byB0aGUgR2l0IG9iamVjdAorZGF0YWJhc2UuCisKK1VwZGF0aW5nIHRoZSBpbmRleCBkaWQgc29tZXRoaW5nIGVsc2UgdG9vOiBpdCBjcmVhdGVkIGEgYC5naXQvaW5kZXhgCitmaWxlLiBUaGlzIGlzIHRoZSBpbmRleCB0aGF0IGRlc2NyaWJlcyB5b3VyIGN1cnJlbnQgd29ya2luZyB0cmVlLCBhbmQKK3NvbWV0aGluZyB5b3Ugc2hvdWxkIGJlIHZlcnkgYXdhcmUgb2YuIEFnYWluLCB5b3Ugbm9ybWFsbHkgbmV2ZXIgd29ycnkKK2Fib3V0IHRoZSBpbmRleCBmaWxlIGl0c2VsZiwgYnV0IHlvdSBzaG91bGQgYmUgYXdhcmUgb2YgdGhlIGZhY3QgdGhhdAoreW91IGhhdmUgbm90IGFjdHVhbGx5IHJlYWxseSAiY2hlY2tlZCBpbiIgeW91ciBmaWxlcyBpbnRvIEdpdCBzbyBmYXIsCit5b3UndmUgb25seSAqdG9sZCogR2l0IGFib3V0IHRoZW0uCisKK0hvd2V2ZXIsIHNpbmNlIEdpdCBrbm93cyBhYm91dCB0aGVtLCB5b3UgY2FuIG5vdyBzdGFydCB1c2luZyBzb21lIG9mIHRoZQorbW9zdCBiYXNpYyBHaXQgY29tbWFuZHMgdG8gbWFuaXB1bGF0ZSB0aGUgZmlsZXMgb3IgbG9vayBhdCB0aGVpciBzdGF0dXMuCisKK0luIHBhcnRpY3VsYXIsIGxldCdzIG5vdCBldmVuIGNoZWNrIGluIHRoZSB0d28gZmlsZXMgaW50byBHaXQgeWV0LCB3ZSdsbAorc3RhcnQgb2ZmIGJ5IGFkZGluZyBhbm90aGVyIGxpbmUgdG8gYGhlbGxvYCBmaXJzdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGVjaG8gIkl0J3MgYSBuZXcgZGF5IGZvciBnaXQiID4+aGVsbG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgeW91IGNhbiBub3csIHNpbmNlIHlvdSB0b2xkIEdpdCBhYm91dCB0aGUgcHJldmlvdXMgc3RhdGUgb2YgYGhlbGxvYCwgYXNrCitHaXQgd2hhdCBoYXMgY2hhbmdlZCBpbiB0aGUgdHJlZSBjb21wYXJlZCB0byB5b3VyIG9sZCBpbmRleCwgdXNpbmcgdGhlCisnZ2l0IGRpZmYtZmlsZXMnIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZi1maWxlcworLS0tLS0tLS0tLS0tCisKK09vcHMuIFRoYXQgd2Fzbid0IHZlcnkgcmVhZGFibGUuIEl0IGp1c3Qgc3BpdCBvdXQgaXRzIG93biBpbnRlcm5hbAordmVyc2lvbiBvZiBhICdkaWZmJywgYnV0IHRoYXQgaW50ZXJuYWwgdmVyc2lvbiByZWFsbHkganVzdCB0ZWxscyB5b3UKK3RoYXQgaXQgaGFzIG5vdGljZWQgdGhhdCAiaGVsbG8iIGhhcyBiZWVuIG1vZGlmaWVkLCBhbmQgdGhhdCB0aGUgb2xkIG9iamVjdAorY29udGVudHMgaXQgaGFkIGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIHNvbWV0aGluZyBlbHNlLgorCitUbyBtYWtlIGl0IHJlYWRhYmxlLCB3ZSBjYW4gdGVsbCAnZ2l0IGRpZmYtZmlsZXMnIHRvIG91dHB1dCB0aGUKK2RpZmZlcmVuY2VzIGFzIGEgcGF0Y2gsIHVzaW5nIHRoZSBgLXBgIGZsYWc6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZi1maWxlcyAtcAorZGlmZiAtLWdpdCBhL2hlbGxvIGIvaGVsbG8KK2luZGV4IDU1N2RiMDMuLjI2MzQxNGYgMTAwNjQ0CistLS0gYS9oZWxsbworKysrIGIvaGVsbG8KK0BAIC0xICsxLDIgQEAKKyBIZWxsbyBXb3JsZAorK0l0J3MgYSBuZXcgZGF5IGZvciBnaXQKKy0tLS0tLS0tLS0tLQorCitpLmUuIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2Ugd2UgY2F1c2VkIGJ5IGFkZGluZyBhbm90aGVyIGxpbmUgdG8gYGhlbGxvYC4KKworSW4gb3RoZXIgd29yZHMsICdnaXQgZGlmZi1maWxlcycgYWx3YXlzIHNob3dzIHVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KK3doYXQgaXMgcmVjb3JkZWQgaW4gdGhlIGluZGV4LCBhbmQgd2hhdCBpcyBjdXJyZW50bHkgaW4gdGhlIHdvcmtpbmcKK3RyZWUuIFRoYXQncyB2ZXJ5IHVzZWZ1bC4KKworQSBjb21tb24gc2hvcnRoYW5kIGZvciBgZ2l0IGRpZmYtZmlsZXMgLXBgIGlzIHRvIGp1c3Qgd3JpdGUgYGdpdAorZGlmZmAsIHdoaWNoIHdpbGwgZG8gdGhlIHNhbWUgdGhpbmcuCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZgorZGlmZiAtLWdpdCBhL2hlbGxvIGIvaGVsbG8KK2luZGV4IDU1N2RiMDMuLjI2MzQxNGYgMTAwNjQ0CistLS0gYS9oZWxsbworKysrIGIvaGVsbG8KK0BAIC0xICsxLDIgQEAKKyBIZWxsbyBXb3JsZAorK0l0J3MgYSBuZXcgZGF5IGZvciBnaXQKKy0tLS0tLS0tLS0tLQorCisKK0NvbW1pdHRpbmcgR2l0IHN0YXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3csIHdlIHdhbnQgdG8gZ28gdG8gdGhlIG5leHQgc3RhZ2UgaW4gR2l0LCB3aGljaCBpcyB0byB0YWtlIHRoZSBmaWxlcwordGhhdCBHaXQga25vd3MgYWJvdXQgaW4gdGhlIGluZGV4LCBhbmQgY29tbWl0IHRoZW0gYXMgYSByZWFsIHRyZWUuIFdlIGRvCit0aGF0IGluIHR3byBwaGFzZXM6IGNyZWF0aW5nIGEgJ3RyZWUnIG9iamVjdCwgYW5kIGNvbW1pdHRpbmcgdGhhdCAndHJlZScKK29iamVjdCBhcyBhICdjb21taXQnIG9iamVjdCB0b2dldGhlciB3aXRoIGFuIGV4cGxhbmF0aW9uIG9mIHdoYXQgdGhlCit0cmVlIHdhcyBhbGwgYWJvdXQsIGFsb25nIHdpdGggaW5mb3JtYXRpb24gb2YgaG93IHdlIGNhbWUgdG8gdGhhdCBzdGF0ZS4KKworQ3JlYXRpbmcgYSB0cmVlIG9iamVjdCBpcyB0cml2aWFsLCBhbmQgaXMgZG9uZSB3aXRoICdnaXQgd3JpdGUtdHJlZScuCitUaGVyZSBhcmUgbm8gb3B0aW9ucyBvciBvdGhlciBpbnB1dDogYGdpdCB3cml0ZS10cmVlYCB3aWxsIHRha2UgdGhlCitjdXJyZW50IGluZGV4IHN0YXRlLCBhbmQgd3JpdGUgYW4gb2JqZWN0IHRoYXQgZGVzY3JpYmVzIHRoYXQgd2hvbGUKK2luZGV4LiBJbiBvdGhlciB3b3Jkcywgd2UncmUgbm93IHR5aW5nIHRvZ2V0aGVyIGFsbCB0aGUgZGlmZmVyZW50CitmaWxlbmFtZXMgd2l0aCB0aGVpciBjb250ZW50cyAoYW5kIHRoZWlyIHBlcm1pc3Npb25zKSwgYW5kIHdlJ3JlCitjcmVhdGluZyB0aGUgZXF1aXZhbGVudCBvZiBhIEdpdCAiZGlyZWN0b3J5IiBvYmplY3Q6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgd3JpdGUtdHJlZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB0aGlzIHdpbGwganVzdCBvdXRwdXQgdGhlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyB0cmVlLCBpbiB0aGlzIGNhc2UKKyhpZiB5b3UgaGF2ZSBkb25lIGV4YWN0bHkgYXMgSSd2ZSBkZXNjcmliZWQpIGl0IHNob3VsZCBiZQorCistLS0tLS0tLS0tLS0tLS0tCis4OTg4ZGExNWQwNzdkNDgyOWZjNTFkODU0NGMwOTdkZWY2NjQ0ZGJiCistLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIGlzIGFub3RoZXIgaW5jb21wcmVoZW5zaWJsZSBvYmplY3QgbmFtZS4gQWdhaW4sIGlmIHlvdSB3YW50IHRvLAoreW91IGNhbiB1c2UgYGdpdCBjYXQtZmlsZSAtdCA4OTg4ZC4uLmAgdG8gc2VlIHRoYXQgdGhpcyB0aW1lIHRoZSBvYmplY3QKK2lzIG5vdCBhICJibG9iIiBvYmplY3QsIGJ1dCBhICJ0cmVlIiBvYmplY3QgKHlvdSBjYW4gYWxzbyB1c2UKK2BnaXQgY2F0LWZpbGVgIHRvIGFjdHVhbGx5IG91dHB1dCB0aGUgcmF3IG9iamVjdCBjb250ZW50cywgYnV0IHlvdSdsbCBzZWUKK21haW5seSBhIGJpbmFyeSBtZXNzLCBzbyB0aGF0J3MgbGVzcyBpbnRlcmVzdGluZykuCisKK0hvd2V2ZXIgLS0gbm9ybWFsbHkgeW91J2QgbmV2ZXIgdXNlICdnaXQgd3JpdGUtdHJlZScgb24gaXRzIG93biwgYmVjYXVzZQorbm9ybWFsbHkgeW91IGFsd2F5cyBjb21taXQgYSB0cmVlIGludG8gYSBjb21taXQgb2JqZWN0IHVzaW5nIHRoZQorJ2dpdCBjb21taXQtdHJlZScgY29tbWFuZC4gSW4gZmFjdCwgaXQncyBlYXNpZXIgdG8gbm90IGFjdHVhbGx5IHVzZQorJ2dpdCB3cml0ZS10cmVlJyBvbiBpdHMgb3duIGF0IGFsbCwgYnV0IHRvIGp1c3QgcGFzcyBpdHMgcmVzdWx0IGluIGFzIGFuCithcmd1bWVudCB0byAnZ2l0IGNvbW1pdC10cmVlJy4KKworJ2dpdCBjb21taXQtdHJlZScgbm9ybWFsbHkgdGFrZXMgc2V2ZXJhbCBhcmd1bWVudHMgLS0gaXQgd2FudHMgdG8ga25vdword2hhdCB0aGUgJ3BhcmVudCcgb2YgYSBjb21taXQgd2FzLCBidXQgc2luY2UgdGhpcyBpcyB0aGUgZmlyc3QgY29tbWl0CitldmVyIGluIHRoaXMgbmV3IHJlcG9zaXRvcnksIGFuZCBpdCBoYXMgbm8gcGFyZW50cywgd2Ugb25seSBuZWVkIHRvIHBhc3MgaW4KK3RoZSBvYmplY3QgbmFtZSBvZiB0aGUgdHJlZS4gSG93ZXZlciwgJ2dpdCBjb21taXQtdHJlZScgYWxzbyB3YW50cyB0byBnZXQgYQorY29tbWl0IG1lc3NhZ2Ugb24gaXRzIHN0YW5kYXJkIGlucHV0LCBhbmQgaXQgd2lsbCB3cml0ZSBvdXQgdGhlIHJlc3VsdGluZworb2JqZWN0IG5hbWUgZm9yIHRoZSBjb21taXQgdG8gaXRzIHN0YW5kYXJkIG91dHB1dC4KKworQW5kIHRoaXMgaXMgd2hlcmUgd2UgY3JlYXRlIHRoZSBgLmdpdC9yZWZzL2hlYWRzL21hc3RlcmAgZmlsZQord2hpY2ggaXMgcG9pbnRlZCBhdCBieSBgSEVBRGAuIFRoaXMgZmlsZSBpcyBzdXBwb3NlZCB0byBjb250YWluCit0aGUgcmVmZXJlbmNlIHRvIHRoZSB0b3Atb2YtdHJlZSBvZiB0aGUgbWFzdGVyIGJyYW5jaCwgYW5kIHNpbmNlCit0aGF0J3MgZXhhY3RseSB3aGF0ICdnaXQgY29tbWl0LXRyZWUnIHNwaXRzIG91dCwgd2UgY2FuIGRvIHRoaXMKK2FsbCB3aXRoIGEgc2VxdWVuY2Ugb2Ygc2ltcGxlIHNoZWxsIGNvbW1hbmRzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgdHJlZT0kKGdpdCB3cml0ZS10cmVlKQorJCBjb21taXQ9JChlY2hvICdJbml0aWFsIGNvbW1pdCcgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUpCiskIGdpdCB1cGRhdGUtcmVmIEhFQUQgJGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoaXMgY2FzZSB0aGlzIGNyZWF0ZXMgYSB0b3RhbGx5IG5ldyBjb21taXQgdGhhdCBpcyBub3QgcmVsYXRlZCB0bworYW55dGhpbmcgZWxzZS4gTm9ybWFsbHkgeW91IGRvIHRoaXMgb25seSAqb25jZSogZm9yIGEgcHJvamVjdCBldmVyLCBhbmQKK2FsbCBsYXRlciBjb21taXRzIHdpbGwgYmUgcGFyZW50ZWQgb24gdG9wIG9mIGFuIGVhcmxpZXIgY29tbWl0LgorCitBZ2Fpbiwgbm9ybWFsbHkgeW91J2QgbmV2ZXIgYWN0dWFsbHkgZG8gdGhpcyBieSBoYW5kLiBUaGVyZSBpcyBhCitoZWxwZnVsIHNjcmlwdCBjYWxsZWQgYGdpdCBjb21taXRgIHRoYXQgd2lsbCBkbyBhbGwgb2YgdGhpcyBmb3IgeW91LiBTbworeW91IGNvdWxkIGhhdmUganVzdCB3cml0dGVuIGBnaXQgY29tbWl0YAoraW5zdGVhZCwgYW5kIGl0IHdvdWxkIGhhdmUgZG9uZSB0aGUgYWJvdmUgbWFnaWMgc2NyaXB0aW5nIGZvciB5b3UuCisKKworTWFraW5nIGEgY2hhbmdlCistLS0tLS0tLS0tLS0tLS0KKworUmVtZW1iZXIgaG93IHdlIGRpZCB0aGUgJ2dpdCB1cGRhdGUtaW5kZXgnIG9uIGZpbGUgYGhlbGxvYCBhbmQgdGhlbiB3ZQorY2hhbmdlZCBgaGVsbG9gIGFmdGVyd2FyZCwgYW5kIGNvdWxkIGNvbXBhcmUgdGhlIG5ldyBzdGF0ZSBvZiBgaGVsbG9gIHdpdGggdGhlCitzdGF0ZSB3ZSBzYXZlZCBpbiB0aGUgaW5kZXggZmlsZT8KKworRnVydGhlciwgcmVtZW1iZXIgaG93IEkgc2FpZCB0aGF0ICdnaXQgd3JpdGUtdHJlZScgd3JpdGVzIHRoZSBjb250ZW50cworb2YgdGhlICppbmRleCogZmlsZSB0byB0aGUgdHJlZSwgYW5kIHRodXMgd2hhdCB3ZSBqdXN0IGNvbW1pdHRlZCB3YXMgaW4KK2ZhY3QgdGhlICpvcmlnaW5hbCogY29udGVudHMgb2YgdGhlIGZpbGUgYGhlbGxvYCwgbm90IHRoZSBuZXcgb25lcy4gV2UgZGlkCit0aGF0IG9uIHB1cnBvc2UsIHRvIHNob3cgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5kZXggc3RhdGUsIGFuZCB0aGUKK3N0YXRlIGluIHRoZSB3b3JraW5nIHRyZWUsIGFuZCBob3cgdGhleSBkb24ndCBoYXZlIHRvIG1hdGNoLCBldmVuCit3aGVuIHdlIGNvbW1pdCB0aGluZ3MuCisKK0FzIGJlZm9yZSwgaWYgd2UgZG8gYGdpdCBkaWZmLWZpbGVzIC1wYCBpbiBvdXIgZ2l0LXR1dG9yaWFsIHByb2plY3QsCit3ZSdsbCBzdGlsbCBzZWUgdGhlIHNhbWUgZGlmZmVyZW5jZSB3ZSBzYXcgbGFzdCB0aW1lOiB0aGUgaW5kZXggZmlsZQoraGFzbid0IGNoYW5nZWQgYnkgdGhlIGFjdCBvZiBjb21taXR0aW5nIGFueXRoaW5nLiBIb3dldmVyLCBub3cgdGhhdCB3ZQoraGF2ZSBjb21taXR0ZWQgc29tZXRoaW5nLCB3ZSBjYW4gYWxzbyBsZWFybiB0byB1c2UgYSBuZXcgY29tbWFuZDoKKydnaXQgZGlmZi1pbmRleCcuCisKK1VubGlrZSAnZ2l0IGRpZmYtZmlsZXMnLCB3aGljaCBzaG93ZWQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5kZXgKK2ZpbGUgYW5kIHRoZSB3b3JraW5nIHRyZWUsICdnaXQgZGlmZi1pbmRleCcgc2hvd3MgdGhlIGRpZmZlcmVuY2VzCitiZXR3ZWVuIGEgY29tbWl0dGVkICp0cmVlKiBhbmQgZWl0aGVyIHRoZSBpbmRleCBmaWxlIG9yIHRoZSB3b3JraW5nCit0cmVlLiBJbiBvdGhlciB3b3JkcywgJ2dpdCBkaWZmLWluZGV4JyB3YW50cyBhIHRyZWUgdG8gYmUgZGlmZmVkCithZ2FpbnN0LCBhbmQgYmVmb3JlIHdlIGRpZCB0aGUgY29tbWl0LCB3ZSBjb3VsZG4ndCBkbyB0aGF0LCBiZWNhdXNlIHdlCitkaWRuJ3QgaGF2ZSBhbnl0aGluZyB0byBkaWZmIGFnYWluc3QuCisKK0J1dCBub3cgd2UgY2FuIGRvCisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYtaW5kZXggLXAgSEVBRAorLS0tLS0tLS0tLS0tLS0tLQorCisod2hlcmUgYC1wYCBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBpdCBkaWQgaW4gJ2dpdCBkaWZmLWZpbGVzJyksIGFuZCBpdAord2lsbCBzaG93IHVzIHRoZSBzYW1lIGRpZmZlcmVuY2UsIGJ1dCBmb3IgYSB0b3RhbGx5IGRpZmZlcmVudCByZWFzb24uCitOb3cgd2UncmUgY29tcGFyaW5nIHRoZSB3b3JraW5nIHRyZWUgbm90IGFnYWluc3QgdGhlIGluZGV4IGZpbGUsCitidXQgYWdhaW5zdCB0aGUgdHJlZSB3ZSBqdXN0IHdyb3RlLiBJdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB0aG9zZSB0d28KK2FyZSBvYnZpb3VzbHkgdGhlIHNhbWUsIHNvIHdlIGdldCB0aGUgc2FtZSByZXN1bHQuCisKK0FnYWluLCBiZWNhdXNlIHRoaXMgaXMgYSBjb21tb24gb3BlcmF0aW9uLCB5b3UgY2FuIGFsc28ganVzdCBzaG9ydGhhbmQKK2l0IHdpdGgKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiBIRUFECistLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIGVuZHMgdXAgZG9pbmcgdGhlIGFib3ZlIGZvciB5b3UuCisKK0luIG90aGVyIHdvcmRzLCAnZ2l0IGRpZmYtaW5kZXgnIG5vcm1hbGx5IGNvbXBhcmVzIGEgdHJlZSBhZ2FpbnN0IHRoZQord29ya2luZyB0cmVlLCBidXQgd2hlbiBnaXZlbiB0aGUgYC0tY2FjaGVkYCBmbGFnLCBpdCBpcyB0b2xkIHRvCitpbnN0ZWFkIGNvbXBhcmUgYWdhaW5zdCBqdXN0IHRoZSBpbmRleCBjYWNoZSBjb250ZW50cywgYW5kIGlnbm9yZSB0aGUKK2N1cnJlbnQgd29ya2luZyB0cmVlIHN0YXRlIGVudGlyZWx5LiBTaW5jZSB3ZSBqdXN0IHdyb3RlIHRoZSBpbmRleAorZmlsZSB0byBIRUFELCBkb2luZyBgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLXAgSEVBRGAgc2hvdWxkIHRodXMgcmV0dXJuCithbiBlbXB0eSBzZXQgb2YgZGlmZmVyZW5jZXMsIGFuZCB0aGF0J3MgZXhhY3RseSB3aGF0IGl0IGRvZXMuCisKK1tOT1RFXQorPT09PT09PT09PT09PT09PQorJ2dpdCBkaWZmLWluZGV4JyByZWFsbHkgYWx3YXlzIHVzZXMgdGhlIGluZGV4IGZvciBpdHMKK2NvbXBhcmlzb25zLCBhbmQgc2F5aW5nIHRoYXQgaXQgY29tcGFyZXMgYSB0cmVlIGFnYWluc3QgdGhlIHdvcmtpbmcKK3RyZWUgaXMgdGh1cyBub3Qgc3RyaWN0bHkgYWNjdXJhdGUuIEluIHBhcnRpY3VsYXIsIHRoZSBsaXN0IG9mCitmaWxlcyB0byBjb21wYXJlICh0aGUgIm1ldGEtZGF0YSIpICphbHdheXMqIGNvbWVzIGZyb20gdGhlIGluZGV4IGZpbGUsCityZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGAtLWNhY2hlZGAgZmxhZyBpcyB1c2VkIG9yIG5vdC4gVGhlIGAtLWNhY2hlZGAKK2ZsYWcgcmVhbGx5IG9ubHkgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWxlICpjb250ZW50cyogdG8gYmUgY29tcGFyZWQKK2NvbWUgZnJvbSB0aGUgd29ya2luZyB0cmVlIG9yIG5vdC4KKworVGhpcyBpcyBub3QgaGFyZCB0byB1bmRlcnN0YW5kLCBhcyBzb29uIGFzIHlvdSByZWFsaXplIHRoYXQgR2l0IHNpbXBseQorbmV2ZXIga25vd3MgKG9yIGNhcmVzKSBhYm91dCBmaWxlcyB0aGF0IGl0IGlzIG5vdCB0b2xkIGFib3V0CitleHBsaWNpdGx5LiBHaXQgd2lsbCBuZXZlciBnbyAqbG9va2luZyogZm9yIGZpbGVzIHRvIGNvbXBhcmUsIGl0CitleHBlY3RzIHlvdSB0byB0ZWxsIGl0IHdoYXQgdGhlIGZpbGVzIGFyZSwgYW5kIHRoYXQncyB3aGF0IHRoZSBpbmRleAoraXMgdGhlcmUgZm9yLgorPT09PT09PT09PT09PT09PQorCitIb3dldmVyLCBvdXIgbmV4dCBzdGVwIGlzIHRvIGNvbW1pdCB0aGUgKmNoYW5nZSogd2UgZGlkLCBhbmQgYWdhaW4sIHRvCit1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiwga2VlcCBpbiBtaW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gIndvcmtpbmcKK3RyZWUgY29udGVudHMiLCAiaW5kZXggZmlsZSIgYW5kICJjb21taXR0ZWQgdHJlZSIuIFdlIGhhdmUgY2hhbmdlcworaW4gdGhlIHdvcmtpbmcgdHJlZSB0aGF0IHdlIHdhbnQgdG8gY29tbWl0LCBhbmQgd2UgYWx3YXlzIGhhdmUgdG8KK3dvcmsgdGhyb3VnaCB0aGUgaW5kZXggZmlsZSwgc28gdGhlIGZpcnN0IHRoaW5nIHdlIG5lZWQgdG8gZG8gaXMgdG8KK3VwZGF0ZSB0aGUgaW5kZXggY2FjaGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgdXBkYXRlLWluZGV4IGhlbGxvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKG5vdGUgaG93IHdlIGRpZG4ndCBuZWVkIHRoZSBgLS1hZGRgIGZsYWcgdGhpcyB0aW1lLCBzaW5jZSBHaXQga25ldworYWJvdXQgdGhlIGZpbGUgYWxyZWFkeSkuCisKK05vdGUgd2hhdCBoYXBwZW5zIHRvIHRoZSBkaWZmZXJlbnQgJ2dpdCBkaWZmLXthc3Rlcmlza30nIHZlcnNpb25zIGhlcmUuCitBZnRlciB3ZSd2ZSB1cGRhdGVkIGBoZWxsb2AgaW4gdGhlIGluZGV4LCBgZ2l0IGRpZmYtZmlsZXMgLXBgIG5vdyBzaG93cyBubworZGlmZmVyZW5jZXMsIGJ1dCBgZ2l0IGRpZmYtaW5kZXggLXAgSEVBRGAgc3RpbGwgKmRvZXMqIHNob3cgdGhhdCB0aGUKK2N1cnJlbnQgc3RhdGUgaXMgZGlmZmVyZW50IGZyb20gdGhlIHN0YXRlIHdlIGNvbW1pdHRlZC4gSW4gZmFjdCwgbm93CisnZ2l0IGRpZmYtaW5kZXgnIHNob3dzIHRoZSBzYW1lIGRpZmZlcmVuY2Ugd2hldGhlciB3ZSB1c2UgdGhlIGAtLWNhY2hlZGAKK2ZsYWcgb3Igbm90LCBzaW5jZSBub3cgdGhlIGluZGV4IGlzIGNvaGVyZW50IHdpdGggdGhlIHdvcmtpbmcgdHJlZS4KKworTm93LCBzaW5jZSB3ZSd2ZSB1cGRhdGVkIGBoZWxsb2AgaW4gdGhlIGluZGV4LCB3ZSBjYW4gY29tbWl0IHRoZSBuZXcKK3ZlcnNpb24uIFdlIGNvdWxkIGRvIGl0IGJ5IHdyaXRpbmcgdGhlIHRyZWUgYnkgaGFuZCBhZ2FpbiwgYW5kCitjb21taXR0aW5nIHRoZSB0cmVlICh0aGlzIHRpbWUgd2UnZCBoYXZlIHRvIHVzZSB0aGUgYC1wIEhFQURgIGZsYWcgdG8KK3RlbGwgY29tbWl0IHRoYXQgdGhlIEhFQUQgd2FzIHRoZSAqcGFyZW50KiBvZiB0aGUgbmV3IGNvbW1pdCwgYW5kIHRoYXQKK3RoaXMgd2Fzbid0IGFuIGluaXRpYWwgY29tbWl0IGFueSBtb3JlKSwgYnV0IHlvdSd2ZSBkb25lIHRoYXQgb25jZQorYWxyZWFkeSwgc28gbGV0J3MganVzdCB1c2UgdGhlIGhlbHBmdWwgc2NyaXB0IHRoaXMgdGltZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCBzdGFydHMgYW4gZWRpdG9yIGZvciB5b3UgdG8gd3JpdGUgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCB0ZWxscyB5b3UKK2EgYml0IGFib3V0IHdoYXQgeW91IGhhdmUgZG9uZS4KKworV3JpdGUgd2hhdGV2ZXIgbWVzc2FnZSB5b3Ugd2FudCwgYW5kIGFsbCB0aGUgbGluZXMgdGhhdCBzdGFydCB3aXRoICcjJword2lsbCBiZSBwcnVuZWQgb3V0LCBhbmQgdGhlIHJlc3Qgd2lsbCBiZSB1c2VkIGFzIHRoZSBjb21taXQgbWVzc2FnZSBmb3IKK3RoZSBjaGFuZ2UuIElmIHlvdSBkZWNpZGUgeW91IGRvbid0IHdhbnQgdG8gY29tbWl0IGFueXRoaW5nIGFmdGVyIGFsbCBhdAordGhpcyBwb2ludCAoeW91IGNhbiBjb250aW51ZSB0byBlZGl0IHRoaW5ncyBhbmQgdXBkYXRlIHRoZSBpbmRleCksIHlvdQorY2FuIGp1c3QgbGVhdmUgYW4gZW1wdHkgbWVzc2FnZS4gT3RoZXJ3aXNlIGBnaXQgY29tbWl0YCB3aWxsIGNvbW1pdAordGhlIGNoYW5nZSBmb3IgeW91LgorCitZb3UndmUgbm93IG1hZGUgeW91ciBmaXJzdCByZWFsIEdpdCBjb21taXQuIEFuZCBpZiB5b3UncmUgaW50ZXJlc3RlZCBpbgorbG9va2luZyBhdCB3aGF0IGBnaXQgY29tbWl0YCByZWFsbHkgZG9lcywgZmVlbCBmcmVlIHRvIGludmVzdGlnYXRlOgoraXQncyBhIGZldyB2ZXJ5IHNpbXBsZSBzaGVsbCBzY3JpcHRzIHRvIGdlbmVyYXRlIHRoZSBoZWxwZnVsICg/KSBjb21taXQKK21lc3NhZ2UgaGVhZGVycywgYW5kIGEgZmV3IG9uZS1saW5lcnMgdGhhdCBhY3R1YWxseSBkbyB0aGUKK2NvbW1pdCBpdHNlbGYgKCdnaXQgY29tbWl0JykuCisKKworSW5zcGVjdGluZyBDaGFuZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0KKworV2hpbGUgY3JlYXRpbmcgY2hhbmdlcyBpcyB1c2VmdWwsIGl0J3MgZXZlbiBtb3JlIHVzZWZ1bCBpZiB5b3UgY2FuIHRlbGwKK2xhdGVyIHdoYXQgY2hhbmdlZC4gVGhlIG1vc3QgdXNlZnVsIGNvbW1hbmQgZm9yIHRoaXMgaXMgYW5vdGhlciBvZiB0aGUKKydkaWZmJyBmYW1pbHksIG5hbWVseSAnZ2l0IGRpZmYtdHJlZScuCisKKydnaXQgZGlmZi10cmVlJyBjYW4gYmUgZ2l2ZW4gdHdvIGFyYml0cmFyeSB0cmVlcywgYW5kIGl0IHdpbGwgdGVsbCB5b3UgdGhlCitkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZW0uIFBlcmhhcHMgZXZlbiBtb3JlIGNvbW1vbmx5LCB0aG91Z2gsIHlvdSBjYW4KK2dpdmUgaXQganVzdCBhIHNpbmdsZSBjb21taXQgb2JqZWN0LCBhbmQgaXQgd2lsbCBmaWd1cmUgb3V0IHRoZSBwYXJlbnQKK29mIHRoYXQgY29tbWl0IGl0c2VsZiwgYW5kIHNob3cgdGhlIGRpZmZlcmVuY2UgZGlyZWN0bHkuIFRodXMsIHRvIGdldAordGhlIHNhbWUgZGlmZiB0aGF0IHdlJ3ZlIGFscmVhZHkgc2VlbiBzZXZlcmFsIHRpbWVzLCB3ZSBjYW4gbm93IGRvCisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYtdHJlZSAtcCBIRUFECistLS0tLS0tLS0tLS0tLS0tCisKKyhhZ2FpbiwgYC1wYCBtZWFucyB0byBzaG93IHRoZSBkaWZmZXJlbmNlIGFzIGEgaHVtYW4tcmVhZGFibGUgcGF0Y2gpLAorYW5kIGl0IHdpbGwgc2hvdyB3aGF0IHRoZSBsYXN0IGNvbW1pdCAoaW4gYEhFQURgKSBhY3R1YWxseSBjaGFuZ2VkLgorCitbTk9URV0KKz09PT09PT09PT09PQorSGVyZSBpcyBhbiBBU0NJSSBhcnQgYnkgSm9uIExvZWxpZ2VyIHRoYXQgaWxsdXN0cmF0ZXMgaG93Cit2YXJpb3VzICdkaWZmLXthc3Rlcmlza30nIGNvbW1hbmRzIGNvbXBhcmUgdGhpbmdzLgorCisgICAgICAgICAgICAgICAgICAgICAgZGlmZi10cmVlCisgICAgICAgICAgICAgICAgICAgICAgICstLS0tKworICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIFYgICAgVgorICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIHwgT2JqZWN0IERCIHwKKyAgICAgICAgICAgICAgICAgICAgfCAgQmFja2luZyAgfAorICAgICAgICAgICAgICAgICAgICB8ICAgU3RvcmUgICB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICBeICAgIF4KKyAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgIGRpZmYtaW5kZXggLS1jYWNoZWQKKyAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICBkaWZmLWluZGV4ICB8ICAgIFYKKyAgICAgICAgICAgICAgICAgICAgICB8ICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgfCAgfCAgIEluZGV4ICAgfAorICAgICAgICAgICAgICAgICAgICAgIHwgIHwgICJjYWNoZSIgIHwKKyAgICAgICAgICAgICAgICAgICAgICB8ICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgfCAgICBeCisgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgICAgfCAgICB8ICBkaWZmLWZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgICAgViAgICBWCisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgfCAgV29ya2luZyAgfAorICAgICAgICAgICAgICAgICAgICB8IERpcmVjdG9yeSB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKz09PT09PT09PT09PQorCitNb3JlIGludGVyZXN0aW5nbHksIHlvdSBjYW4gYWxzbyBnaXZlICdnaXQgZGlmZi10cmVlJyB0aGUgYC0tcHJldHR5YCBmbGFnLAord2hpY2ggdGVsbHMgaXQgdG8gYWxzbyBzaG93IHRoZSBjb21taXQgbWVzc2FnZSBhbmQgYXV0aG9yIGFuZCBkYXRlIG9mIHRoZQorY29tbWl0LCBhbmQgeW91IGNhbiB0ZWxsIGl0IHRvIHNob3cgYSB3aG9sZSBzZXJpZXMgb2YgZGlmZnMuCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHRlbGwgaXQgdG8gYmUgInNpbGVudCIsIGFuZCBub3Qgc2hvdyB0aGUgZGlmZnMgYXQKK2FsbCwgYnV0IGp1c3Qgc2hvdyB0aGUgYWN0dWFsIGNvbW1pdCBtZXNzYWdlLgorCitJbiBmYWN0LCB0b2dldGhlciB3aXRoIHRoZSAnZ2l0IHJldi1saXN0JyBwcm9ncmFtICh3aGljaCBnZW5lcmF0ZXMgYQorbGlzdCBvZiByZXZpc2lvbnMpLCAnZ2l0IGRpZmYtdHJlZScgZW5kcyB1cCBiZWluZyBhIHZlcml0YWJsZSBmb3VudCBvZgorY2hhbmdlcy4gIFlvdSBjYW4gZW11bGF0ZSBgZ2l0IGxvZ2AsIGBnaXQgbG9nIC1wYCwgZXRjLiB3aXRoIGEgdHJpdmlhbAorc2NyaXB0IHRoYXQgcGlwZXMgdGhlIG91dHB1dCBvZiBgZ2l0IHJldi1saXN0YCB0byBgZ2l0IGRpZmYtdHJlZSAtLXN0ZGluYCwKK3doaWNoIHdhcyBleGFjdGx5IGhvdyBlYXJseSB2ZXJzaW9ucyBvZiBgZ2l0IGxvZ2Agd2VyZSBpbXBsZW1lbnRlZC4KKworCitUYWdnaW5nIGEgdmVyc2lvbgorLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gR2l0LCB0aGVyZSBhcmUgdHdvIGtpbmRzIG9mIHRhZ3MsIGEgImxpZ2h0IiBvbmUsIGFuZCBhbiAiYW5ub3RhdGVkIHRhZyIuCisKK0EgImxpZ2h0IiB0YWcgaXMgdGVjaG5pY2FsbHkgbm90aGluZyBtb3JlIHRoYW4gYSBicmFuY2gsIGV4Y2VwdCB3ZSBwdXQKK2l0IGluIHRoZSBgLmdpdC9yZWZzL3RhZ3MvYCBzdWJkaXJlY3RvcnkgaW5zdGVhZCBvZiBjYWxsaW5nIGl0IGEgYGhlYWRgLgorU28gdGhlIHNpbXBsZXN0IGZvcm0gb2YgdGFnIGludm9sdmVzIG5vdGhpbmcgbW9yZSB0aGFuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgdGFnIG15LWZpcnN0LXRhZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIGp1c3Qgd3JpdGVzIHRoZSBjdXJyZW50IGBIRUFEYCBpbnRvIHRoZSBgLmdpdC9yZWZzL3RhZ3MvbXktZmlyc3QtdGFnYAorZmlsZSwgYWZ0ZXIgd2hpY2ggcG9pbnQgeW91IGNhbiB0aGVuIHVzZSB0aGlzIHN5bWJvbGljIG5hbWUgZm9yIHRoYXQKK3BhcnRpY3VsYXIgc3RhdGUuIFlvdSBjYW4sIGZvciBleGFtcGxlLCBkbworCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIG15LWZpcnN0LXRhZworLS0tLS0tLS0tLS0tLS0tLQorCit0byBkaWZmIHlvdXIgY3VycmVudCBzdGF0ZSBhZ2FpbnN0IHRoYXQgdGFnIHdoaWNoIGF0IHRoaXMgcG9pbnQgd2lsbAorb2J2aW91c2x5IGJlIGFuIGVtcHR5IGRpZmYsIGJ1dCBpZiB5b3UgY29udGludWUgdG8gZGV2ZWxvcCBhbmQgY29tbWl0CitzdHVmZiwgeW91IGNhbiB1c2UgeW91ciB0YWcgYXMgYW4gImFuY2hvci1wb2ludCIgdG8gc2VlIHdoYXQgaGFzIGNoYW5nZWQKK3NpbmNlIHlvdSB0YWdnZWQgaXQuCisKK0FuICJhbm5vdGF0ZWQgdGFnIiBpcyBhY3R1YWxseSBhIHJlYWwgR2l0IG9iamVjdCwgYW5kIGNvbnRhaW5zIG5vdCBvbmx5IGEKK3BvaW50ZXIgdG8gdGhlIHN0YXRlIHlvdSB3YW50IHRvIHRhZywgYnV0IGFsc28gYSBzbWFsbCB0YWcgbmFtZSBhbmQKK21lc3NhZ2UsIGFsb25nIHdpdGggb3B0aW9uYWxseSBhIFBHUCBzaWduYXR1cmUgdGhhdCBzYXlzIHRoYXQgeWVzLAoreW91IHJlYWxseSBkaWQKK3RoYXQgdGFnLiBZb3UgY3JlYXRlIHRoZXNlIGFubm90YXRlZCB0YWdzIHdpdGggZWl0aGVyIHRoZSBgLWFgIG9yCitgLXNgIGZsYWcgdG8gJ2dpdCB0YWcnOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB0YWcgLXMgPHRhZ25hbWU+CistLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgc2lnbiB0aGUgY3VycmVudCBgSEVBRGAgKGJ1dCB5b3UgY2FuIGFsc28gZ2l2ZSBpdCBhbm90aGVyCithcmd1bWVudCB0aGF0IHNwZWNpZmllcyB0aGUgdGhpbmcgdG8gdGFnLCBlLmcuLCB5b3UgY291bGQgaGF2ZSB0YWdnZWQgdGhlCitjdXJyZW50IGBteWJyYW5jaGAgcG9pbnQgYnkgdXNpbmcgYGdpdCB0YWcgPHRhZ25hbWU+IG15YnJhbmNoYCkuCisKK1lvdSBub3JtYWxseSBvbmx5IGRvIHNpZ25lZCB0YWdzIGZvciBtYWpvciByZWxlYXNlcyBvciB0aGluZ3MKK2xpa2UgdGhhdCwgd2hpbGUgdGhlIGxpZ2h0LXdlaWdodCB0YWdzIGFyZSB1c2VmdWwgZm9yIGFueSBtYXJraW5nIHlvdQord2FudCB0byBkbyAtLSBhbnkgdGltZSB5b3UgZGVjaWRlIHRoYXQgeW91IHdhbnQgdG8gcmVtZW1iZXIgYSBjZXJ0YWluCitwb2ludCwganVzdCBjcmVhdGUgYSBwcml2YXRlIHRhZyBmb3IgaXQsIGFuZCB5b3UgaGF2ZSBhIG5pY2Ugc3ltYm9saWMKK25hbWUgZm9yIHRoZSBzdGF0ZSBhdCB0aGF0IHBvaW50LgorCisKK0NvcHlpbmcgcmVwb3NpdG9yaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgcmVwb3NpdG9yaWVzIGFyZSBub3JtYWxseSB0b3RhbGx5IHNlbGYtc3VmZmljaWVudCBhbmQgcmVsb2NhdGFibGUuCitVbmxpa2UgQ1ZTLCBmb3IgZXhhbXBsZSwgdGhlcmUgaXMgbm8gc2VwYXJhdGUgbm90aW9uIG9mCisicmVwb3NpdG9yeSIgYW5kICJ3b3JraW5nIHRyZWUiLiBBIEdpdCByZXBvc2l0b3J5IG5vcm1hbGx5ICppcyogdGhlCit3b3JraW5nIHRyZWUsIHdpdGggdGhlIGxvY2FsIEdpdCBpbmZvcm1hdGlvbiBoaWRkZW4gaW4gdGhlIGAuZ2l0YAorc3ViZGlyZWN0b3J5LiBUaGVyZSBpcyBub3RoaW5nIGVsc2UuIFdoYXQgeW91IHNlZSBpcyB3aGF0IHlvdSBnb3QuCisKK1tOT1RFXQorWW91IGNhbiB0ZWxsIEdpdCB0byBzcGxpdCB0aGUgR2l0IGludGVybmFsIGluZm9ybWF0aW9uIGZyb20KK3RoZSBkaXJlY3RvcnkgdGhhdCBpdCB0cmFja3MsIGJ1dCB3ZSdsbCBpZ25vcmUgdGhhdCBmb3Igbm93OiBpdCdzIG5vdAoraG93IG5vcm1hbCBwcm9qZWN0cyB3b3JrLCBhbmQgaXQncyByZWFsbHkgb25seSBtZWFudCBmb3Igc3BlY2lhbCB1c2VzLgorU28gdGhlIG1lbnRhbCBtb2RlbCBvZiAidGhlIEdpdCBpbmZvcm1hdGlvbiBpcyBhbHdheXMgdGllZCBkaXJlY3RseSB0bwordGhlIHdvcmtpbmcgdHJlZSB0aGF0IGl0IGRlc2NyaWJlcyIgbWF5IG5vdCBiZSB0ZWNobmljYWxseSAxMDAlCithY2N1cmF0ZSwgYnV0IGl0J3MgYSBnb29kIG1vZGVsIGZvciBhbGwgbm9ybWFsIHVzZS4KKworVGhpcyBoYXMgdHdvIGltcGxpY2F0aW9uczoKKworIC0gaWYgeW91IGdyb3cgYm9yZWQgd2l0aCB0aGUgdHV0b3JpYWwgcmVwb3NpdG9yeSB5b3UgY3JlYXRlZCAob3IgeW91J3ZlCisgICBtYWRlIGEgbWlzdGFrZSBhbmQgd2FudCB0byBzdGFydCBhbGwgb3ZlciksIHlvdSBjYW4ganVzdCBkbyBzaW1wbGUKKysKKy0tLS0tLS0tLS0tLS0tLS0KKyQgcm0gLXJmIGdpdC10dXRvcmlhbAorLS0tLS0tLS0tLS0tLS0tLQorKworYW5kIGl0IHdpbGwgYmUgZ29uZS4gVGhlcmUncyBubyBleHRlcm5hbCByZXBvc2l0b3J5LCBhbmQgdGhlcmUncyBubworaGlzdG9yeSBvdXRzaWRlIHRoZSBwcm9qZWN0IHlvdSBjcmVhdGVkLgorCisgLSBpZiB5b3Ugd2FudCB0byBtb3ZlIG9yIGR1cGxpY2F0ZSBhIEdpdCByZXBvc2l0b3J5LCB5b3UgY2FuIGRvIHNvLiBUaGVyZQorICAgaXMgJ2dpdCBjbG9uZScgY29tbWFuZCwgYnV0IGlmIGFsbCB5b3Ugd2FudCB0byBkbyBpcyBqdXN0IHRvCisgICBjcmVhdGUgYSBjb3B5IG9mIHlvdXIgcmVwb3NpdG9yeSAod2l0aCBhbGwgdGhlIGZ1bGwgaGlzdG9yeSB0aGF0CisgICB3ZW50IGFsb25nIHdpdGggaXQpLCB5b3UgY2FuIGRvIHNvIHdpdGggYSByZWd1bGFyCisgICBgY3AgLWEgZ2l0LXR1dG9yaWFsIG5ldy1naXQtdHV0b3JpYWxgLgorKworTm90ZSB0aGF0IHdoZW4geW91J3ZlIG1vdmVkIG9yIGNvcGllZCBhIEdpdCByZXBvc2l0b3J5LCB5b3VyIEdpdCBpbmRleAorZmlsZSAod2hpY2ggY2FjaGVzIHZhcmlvdXMgaW5mb3JtYXRpb24sIG5vdGFibHkgc29tZSBvZiB0aGUgInN0YXQiCitpbmZvcm1hdGlvbiBmb3IgdGhlIGZpbGVzIGludm9sdmVkKSB3aWxsIGxpa2VseSBuZWVkIHRvIGJlIHJlZnJlc2hlZC4KK1NvIGFmdGVyIHlvdSBkbyBhIGBjcCAtYWAgdG8gY3JlYXRlIGEgbmV3IGNvcHksIHlvdSdsbCB3YW50IHRvIGRvCisrCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCistLS0tLS0tLS0tLS0tLS0tCisrCitpbiB0aGUgbmV3IHJlcG9zaXRvcnkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGluZGV4IGZpbGUgaXMgdXAgdG8gZGF0ZS4KKworTm90ZSB0aGF0IHRoZSBzZWNvbmQgcG9pbnQgaXMgdHJ1ZSBldmVuIGFjcm9zcyBtYWNoaW5lcy4gWW91IGNhbgorZHVwbGljYXRlIGEgcmVtb3RlIEdpdCByZXBvc2l0b3J5IHdpdGggKmFueSogcmVndWxhciBjb3B5IG1lY2hhbmlzbSwgYmUgaXQKKydzY3AnLCAncnN5bmMnIG9yICd3Z2V0Jy4KKworV2hlbiBjb3B5aW5nIGEgcmVtb3RlIHJlcG9zaXRvcnksIHlvdSdsbCB3YW50IHRvIGF0IGEgbWluaW11bSB1cGRhdGUgdGhlCitpbmRleCBjYWNoZSB3aGVuIHlvdSBkbyB0aGlzLCBhbmQgZXNwZWNpYWxseSB3aXRoIG90aGVyIHBlb3BsZXMnCityZXBvc2l0b3JpZXMgeW91IG9mdGVuIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGluZGV4IGNhY2hlIGlzIGluIHNvbWUKK2tub3duIHN0YXRlICh5b3UgZG9uJ3Qga25vdyAqd2hhdCogdGhleSd2ZSBkb25lIGFuZCBub3QgeWV0IGNoZWNrZWQgaW4pLAorc28gdXN1YWxseSB5b3UnbGwgcHJlY2VkZSB0aGUgJ2dpdCB1cGRhdGUtaW5kZXgnIHdpdGggYQorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZWFkLXRyZWUgLS1yZXNldCBIRUFECiskIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCistLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgZm9yY2UgYSB0b3RhbCBpbmRleCByZS1idWlsZCBmcm9tIHRoZSB0cmVlIHBvaW50ZWQgdG8gYnkgYEhFQURgLgorSXQgcmVzZXRzIHRoZSBpbmRleCBjb250ZW50cyB0byBgSEVBRGAsIGFuZCB0aGVuIHRoZSAnZ2l0IHVwZGF0ZS1pbmRleCcKK21ha2VzIHN1cmUgdG8gbWF0Y2ggdXAgYWxsIGluZGV4IGVudHJpZXMgd2l0aCB0aGUgY2hlY2tlZC1vdXQgZmlsZXMuCitJZiB0aGUgb3JpZ2luYWwgcmVwb3NpdG9yeSBoYWQgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiBpdHMKK3dvcmtpbmcgdHJlZSwgYGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoYCBub3RpY2VzIHRoZW0gYW5kCit0ZWxscyB5b3UgdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCisKK1RoZSBhYm92ZSBjYW4gYWxzbyBiZSB3cml0dGVuIGFzIHNpbXBseQorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZXNldAorLS0tLS0tLS0tLS0tLS0tLQorCithbmQgaW4gZmFjdCBhIGxvdCBvZiB0aGUgY29tbW9uIEdpdCBjb21tYW5kIGNvbWJpbmF0aW9ucyBjYW4gYmUgc2NyaXB0ZWQKK3dpdGggdGhlIGBnaXQgeHl6YCBpbnRlcmZhY2VzLiAgWW91IGNhbiBsZWFybiB0aGluZ3MgYnkganVzdCBsb29raW5nCithdCB3aGF0IHRoZSB2YXJpb3VzIGdpdCBzY3JpcHRzIGRvLiAgRm9yIGV4YW1wbGUsIGBnaXQgcmVzZXRgIHVzZWQgdG8gYmUKK3RoZSBhYm92ZSB0d28gbGluZXMgaW1wbGVtZW50ZWQgaW4gJ2dpdCByZXNldCcsIGJ1dCBzb21lIHRoaW5ncyBsaWtlCisnZ2l0IHN0YXR1cycgYW5kICdnaXQgY29tbWl0JyBhcmUgc2xpZ2h0bHkgbW9yZSBjb21wbGV4IHNjcmlwdHMgYXJvdW5kCit0aGUgYmFzaWMgR2l0IGNvbW1hbmRzLgorCitNYW55IChtb3N0PykgcHVibGljIHJlbW90ZSByZXBvc2l0b3JpZXMgd2lsbCBub3QgY29udGFpbiBhbnkgb2YKK3RoZSBjaGVja2VkIG91dCBmaWxlcyBvciBldmVuIGFuIGluZGV4IGZpbGUsIGFuZCB3aWxsICpvbmx5KiBjb250YWluIHRoZQorYWN0dWFsIGNvcmUgR2l0IGZpbGVzLiBTdWNoIGEgcmVwb3NpdG9yeSB1c3VhbGx5IGRvZXNuJ3QgZXZlbiBoYXZlIHRoZQorYC5naXRgIHN1YmRpcmVjdG9yeSwgYnV0IGhhcyBhbGwgdGhlIEdpdCBmaWxlcyBkaXJlY3RseSBpbiB0aGUKK3JlcG9zaXRvcnkuCisKK1RvIGNyZWF0ZSB5b3VyIG93biBsb2NhbCBsaXZlIGNvcHkgb2Ygc3VjaCBhICJyYXciIEdpdCByZXBvc2l0b3J5LCB5b3UnZAorZmlyc3QgY3JlYXRlIHlvdXIgb3duIHN1YmRpcmVjdG9yeSBmb3IgdGhlIHByb2plY3QsIGFuZCB0aGVuIGNvcHkgdGhlCityYXcgcmVwb3NpdG9yeSBjb250ZW50cyBpbnRvIHRoZSBgLmdpdGAgZGlyZWN0b3J5LiBGb3IgZXhhbXBsZSwgdG8KK2NyZWF0ZSB5b3VyIG93biBjb3B5IG9mIHRoZSBHaXQgcmVwb3NpdG9yeSwgeW91J2QgZG8gdGhlIGZvbGxvd2luZworCistLS0tLS0tLS0tLS0tLS0tCiskIG1rZGlyIG15LWdpdAorJCBjZCBteS1naXQKKyQgcnN5bmMgLXJMIHJzeW5jOi8vcnN5bmMua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0LyAuZ2l0CistLS0tLS0tLS0tLS0tLS0tCisKK2ZvbGxvd2VkIGJ5CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlYWQtdHJlZSBIRUFECistLS0tLS0tLS0tLS0tLS0tCisKK3RvIHBvcHVsYXRlIHRoZSBpbmRleC4gSG93ZXZlciwgbm93IHlvdSBoYXZlIHBvcHVsYXRlZCB0aGUgaW5kZXgsIGFuZAoreW91IGhhdmUgYWxsIHRoZSBHaXQgaW50ZXJuYWwgZmlsZXMsIGJ1dCB5b3Ugd2lsbCBub3RpY2UgdGhhdCB5b3UgZG9uJ3QKK2FjdHVhbGx5IGhhdmUgYW55IG9mIHRoZSB3b3JraW5nIHRyZWUgZmlsZXMgdG8gd29yayBvbi4gVG8gZ2V0Cit0aG9zZSwgeW91J2QgY2hlY2sgdGhlbSBvdXQgd2l0aAorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dC1pbmRleCAtdSAtYQorLS0tLS0tLS0tLS0tLS0tLQorCit3aGVyZSB0aGUgYC11YCBmbGFnIG1lYW5zIHRoYXQgeW91IHdhbnQgdGhlIGNoZWNrb3V0IHRvIGtlZXAgdGhlIGluZGV4Cit1cCB0byBkYXRlIChzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIHJlZnJlc2ggaXQgYWZ0ZXJ3YXJkKSwgYW5kIHRoZQorYC1hYCBmbGFnIG1lYW5zICJjaGVjayBvdXQgYWxsIGZpbGVzIiAoaWYgeW91IGhhdmUgYSBzdGFsZSBjb3B5IG9yIGFuCitvbGRlciB2ZXJzaW9uIG9mIGEgY2hlY2tlZCBvdXQgdHJlZSB5b3UgbWF5IGFsc28gbmVlZCB0byBhZGQgdGhlIGAtZmAKK2ZsYWcgZmlyc3QsIHRvIHRlbGwgJ2dpdCBjaGVja291dC1pbmRleCcgdG8gKmZvcmNlKiBvdmVyd3JpdGluZyBvZiBhbnkgb2xkCitmaWxlcykuCisKK0FnYWluLCB0aGlzIGNhbiBhbGwgYmUgc2ltcGxpZmllZCB3aXRoCisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQvIG15LWdpdAorJCBjZCBteS1naXQKKyQgZ2l0IGNoZWNrb3V0CistLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgZW5kIHVwIGRvaW5nIGFsbCBvZiB0aGUgYWJvdmUgZm9yIHlvdS4KKworWW91IGhhdmUgbm93IHN1Y2Nlc3NmdWxseSBjb3BpZWQgc29tZWJvZHkgZWxzZSdzIChtaW5lKSByZW1vdGUKK3JlcG9zaXRvcnksIGFuZCBjaGVja2VkIGl0IG91dC4KKworCitDcmVhdGluZyBhIG5ldyBicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCcmFuY2hlcyBpbiBHaXQgYXJlIHJlYWxseSBub3RoaW5nIG1vcmUgdGhhbiBwb2ludGVycyBpbnRvIHRoZSBHaXQKK29iamVjdCBkYXRhYmFzZSBmcm9tIHdpdGhpbiB0aGUgYC5naXQvcmVmcy9gIHN1YmRpcmVjdG9yeSwgYW5kIGFzIHdlCithbHJlYWR5IGRpc2N1c3NlZCwgdGhlIGBIRUFEYCBicmFuY2ggaXMgbm90aGluZyBidXQgYSBzeW1saW5rIHRvIG9uZSBvZgordGhlc2Ugb2JqZWN0IHBvaW50ZXJzLgorCitZb3UgY2FuIGF0IGFueSB0aW1lIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkganVzdCBwaWNraW5nIGFuIGFyYml0cmFyeQorcG9pbnQgaW4gdGhlIHByb2plY3QgaGlzdG9yeSwgYW5kIGp1c3Qgd3JpdGluZyB0aGUgU0hBLTEgbmFtZSBvZiB0aGF0CitvYmplY3QgaW50byBhIGZpbGUgdW5kZXIgYC5naXQvcmVmcy9oZWFkcy9gLiBZb3UgY2FuIHVzZSBhbnkgZmlsZW5hbWUgeW91Cit3YW50IChhbmQgaW5kZWVkLCBzdWJkaXJlY3RvcmllcyksIGJ1dCB0aGUgY29udmVudGlvbiBpcyB0aGF0IHRoZQorIm5vcm1hbCIgYnJhbmNoIGlzIGNhbGxlZCBgbWFzdGVyYC4gVGhhdCdzIGp1c3QgYSBjb252ZW50aW9uLCB0aG91Z2gsCithbmQgbm90aGluZyBlbmZvcmNlcyBpdC4KKworVG8gc2hvdyB0aGF0IGFzIGFuIGV4YW1wbGUsIGxldCdzIGdvIGJhY2sgdG8gdGhlIGdpdC10dXRvcmlhbCByZXBvc2l0b3J5IHdlCit1c2VkIGVhcmxpZXIsIGFuZCBjcmVhdGUgYSBicmFuY2ggaW4gaXQuIFlvdSBkbyB0aGF0IGJ5IHNpbXBseSBqdXN0CitzYXlpbmcgdGhhdCB5b3Ugd2FudCB0byBjaGVjayBvdXQgYSBuZXcgYnJhbmNoOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCAtYyBteWJyYW5jaAorLS0tLS0tLS0tLS0tCisKK3dpbGwgY3JlYXRlIGEgbmV3IGJyYW5jaCBiYXNlZCBhdCB0aGUgY3VycmVudCBgSEVBRGAgcG9zaXRpb24sIGFuZCBzd2l0Y2gKK3RvIGl0LgorCitbTk9URV0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSWYgeW91IG1ha2UgdGhlIGRlY2lzaW9uIHRvIHN0YXJ0IHlvdXIgbmV3IGJyYW5jaCBhdCBzb21lCitvdGhlciBwb2ludCBpbiB0aGUgaGlzdG9yeSB0aGFuIHRoZSBjdXJyZW50IGBIRUFEYCwgeW91IGNhbiBkbyBzbyBieQoranVzdCB0ZWxsaW5nICdnaXQgc3dpdGNoJyB3aGF0IHRoZSBiYXNlIG9mIHRoZSBjaGVja291dCB3b3VsZCBiZS4KK0luIG90aGVyIHdvcmRzLCBpZiB5b3UgaGF2ZSBhbiBlYXJsaWVyIHRhZyBvciBicmFuY2gsIHlvdSdkIGp1c3QgZG8KKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggLWMgbXlicmFuY2ggZWFybGllci1jb21taXQKKy0tLS0tLS0tLS0tLQorCithbmQgaXQgd291bGQgY3JlYXRlIHRoZSBuZXcgYnJhbmNoIGBteWJyYW5jaGAgYXQgdGhlIGVhcmxpZXIgY29tbWl0LAorYW5kIGNoZWNrIG91dCB0aGUgc3RhdGUgYXQgdGhhdCB0aW1lLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSBjYW4gYWx3YXlzIGp1c3QganVtcCBiYWNrIHRvIHlvdXIgb3JpZ2luYWwgYG1hc3RlcmAgYnJhbmNoIGJ5IGRvaW5nCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKKyhvciBhbnkgb3RoZXIgYnJhbmNoLW5hbWUsIGZvciB0aGF0IG1hdHRlcikgYW5kIGlmIHlvdSBmb3JnZXQgd2hpY2gKK2JyYW5jaCB5b3UgaGFwcGVuIHRvIGJlIG9uLCBhIHNpbXBsZQorCistLS0tLS0tLS0tLS0KKyQgY2F0IC5naXQvSEVBRAorLS0tLS0tLS0tLS0tCisKK3dpbGwgdGVsbCB5b3Ugd2hlcmUgaXQncyBwb2ludGluZy4gIFRvIGdldCB0aGUgbGlzdCBvZiBicmFuY2hlcworeW91IGhhdmUsIHlvdSBjYW4gc2F5CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoCistLS0tLS0tLS0tLS0KKword2hpY2ggdXNlZCB0byBiZSBub3RoaW5nIG1vcmUgdGhhbiBhIHNpbXBsZSBzY3JpcHQgYXJvdW5kIGBscyAuZ2l0L3JlZnMvaGVhZHNgLgorVGhlcmUgd2lsbCBiZSBhbiBhc3RlcmlzayBpbiBmcm9udCBvZiB0aGUgYnJhbmNoIHlvdSBhcmUgY3VycmVudGx5IG9uLgorCitTb21ldGltZXMgeW91IG1heSB3aXNoIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggX3dpdGhvdXRfIGFjdHVhbGx5CitjaGVja2luZyBpdCBvdXQgYW5kIHN3aXRjaGluZyB0byBpdC4gSWYgc28sIGp1c3QgdXNlIHRoZSBjb21tYW5kCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIDxicmFuY2huYW1lPiBbc3RhcnRpbmdwb2ludF0KKy0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIHNpbXBseSBfY3JlYXRlXyB0aGUgYnJhbmNoLCBidXQgd2lsbCBub3QgZG8gYW55dGhpbmcgZnVydGhlci4KK1lvdSBjYW4gdGhlbiBsYXRlciAtLSBvbmNlIHlvdSBkZWNpZGUgdGhhdCB5b3Ugd2FudCB0byBhY3R1YWxseSBkZXZlbG9wCitvbiB0aGF0IGJyYW5jaCAtLSBzd2l0Y2ggdG8gdGhhdCBicmFuY2ggd2l0aCBhIHJlZ3VsYXIgJ2dpdCBzd2l0Y2gnCit3aXRoIHRoZSBicmFuY2huYW1lIGFzIHRoZSBhcmd1bWVudC4KKworCitNZXJnaW5nIHR3byBicmFuY2hlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT25lIG9mIHRoZSBpZGVhcyBvZiBoYXZpbmcgYSBicmFuY2ggaXMgdGhhdCB5b3UgZG8gc29tZSAocG9zc2libHkKK2V4cGVyaW1lbnRhbCkgd29yayBpbiBpdCwgYW5kIGV2ZW50dWFsbHkgbWVyZ2UgaXQgYmFjayB0byB0aGUgbWFpbgorYnJhbmNoLiBTbyBhc3N1bWluZyB5b3UgY3JlYXRlZCB0aGUgYWJvdmUgYG15YnJhbmNoYCB0aGF0IHN0YXJ0ZWQgb3V0CitiZWluZyB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwgYG1hc3RlcmAgYnJhbmNoLCBsZXQncyBtYWtlIHN1cmUgd2UncmUgaW4KK3RoYXQgYnJhbmNoLCBhbmQgZG8gc29tZSB3b3JrIHRoZXJlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCBteWJyYW5jaAorJCBlY2hvICJXb3JrLCB3b3JrLCB3b3JrIiA+PmhlbGxvCiskIGdpdCBjb21taXQgLW0gIlNvbWUgd29yay4iIC1pIGhlbGxvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGVyZSwgd2UganVzdCBhZGRlZCBhbm90aGVyIGxpbmUgdG8gYGhlbGxvYCwgYW5kIHdlIHVzZWQgYSBzaG9ydGhhbmQgZm9yCitkb2luZyBib3RoIGBnaXQgdXBkYXRlLWluZGV4IGhlbGxvYCBhbmQgYGdpdCBjb21taXRgIGJ5IGp1c3QgZ2l2aW5nIHRoZQorZmlsZW5hbWUgZGlyZWN0bHkgdG8gYGdpdCBjb21taXRgLCB3aXRoIGFuIGAtaWAgZmxhZyAoaXQgdGVsbHMKK0dpdCB0byAnaW5jbHVkZScgdGhhdCBmaWxlIGluIGFkZGl0aW9uIHRvIHdoYXQgeW91IGhhdmUgZG9uZSB0bwordGhlIGluZGV4IGZpbGUgc28gZmFyIHdoZW4gbWFraW5nIHRoZSBjb21taXQpLiAgVGhlIGAtbWAgZmxhZyBpcyB0byBnaXZlIHRoZQorY29tbWl0IGxvZyBtZXNzYWdlIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworTm93LCB0byBtYWtlIGl0IGEgYml0IG1vcmUgaW50ZXJlc3RpbmcsIGxldCdzIGFzc3VtZSB0aGF0IHNvbWVib2R5IGVsc2UKK2RvZXMgc29tZSB3b3JrIGluIHRoZSBvcmlnaW5hbCBicmFuY2gsIGFuZCBzaW11bGF0ZSB0aGF0IGJ5IGdvaW5nIGJhY2sKK3RvIHRoZSBtYXN0ZXIgYnJhbmNoLCBhbmQgZWRpdGluZyB0aGUgc2FtZSBmaWxlIGRpZmZlcmVudGx5IHRoZXJlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitIZXJlLCB0YWtlIGEgbW9tZW50IHRvIGxvb2sgYXQgdGhlIGNvbnRlbnRzIG9mIGBoZWxsb2AsIGFuZCBub3RpY2UgaG93IHRoZXkKK2Rvbid0IGNvbnRhaW4gdGhlIHdvcmsgd2UganVzdCBkaWQgaW4gYG15YnJhbmNoYCAtLSBiZWNhdXNlIHRoYXQgd29yaworaGFzbid0IGhhcHBlbmVkIGluIHRoZSBgbWFzdGVyYCBicmFuY2ggYXQgYWxsLiBUaGVuIGRvCisKKy0tLS0tLS0tLS0tLQorJCBlY2hvICJQbGF5LCBwbGF5LCBwbGF5IiA+PmhlbGxvCiskIGVjaG8gIkxvdHMgb2YgZnVuIiA+PmV4YW1wbGUKKyQgZ2l0IGNvbW1pdCAtbSAiU29tZSBmdW4uIiAtaSBoZWxsbyBleGFtcGxlCistLS0tLS0tLS0tLS0KKworc2luY2UgdGhlIG1hc3RlciBicmFuY2ggaXMgb2J2aW91c2x5IGluIGEgbXVjaCBiZXR0ZXIgbW9vZC4KKworTm93LCB5b3UndmUgZ290IHR3byBicmFuY2hlcywgYW5kIHlvdSBkZWNpZGUgdGhhdCB5b3Ugd2FudCB0byBtZXJnZSB0aGUKK3dvcmsgZG9uZS4gQmVmb3JlIHdlIGRvIHRoYXQsIGxldCdzIGludHJvZHVjZSBhIGNvb2wgZ3JhcGhpY2FsIHRvb2wgdGhhdAoraGVscHMgeW91IHZpZXcgd2hhdCdzIGdvaW5nIG9uOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdGsgLS1hbGwKKy0tLS0tLS0tLS0tLS0tLS0KKword2lsbCBzaG93IHlvdSBncmFwaGljYWxseSBib3RoIG9mIHlvdXIgYnJhbmNoZXMgKHRoYXQncyB3aGF0IHRoZSBgLS1hbGxgCittZWFuczogbm9ybWFsbHkgaXQgd2lsbCBqdXN0IHNob3cgeW91IHlvdXIgY3VycmVudCBgSEVBRGApIGFuZCB0aGVpcgoraGlzdG9yaWVzLiBZb3UgY2FuIGFsc28gc2VlIGV4YWN0bHkgaG93IHRoZXkgY2FtZSB0byBiZSBmcm9tIGEgY29tbW9uCitzb3VyY2UuCisKK0FueXdheSwgbGV0J3MgZXhpdCAnZ2l0aycgKGBeUWAgb3IgdGhlIEZpbGUgbWVudSksIGFuZCBkZWNpZGUgdGhhdCB3ZSB3YW50Cit0byBtZXJnZSB0aGUgd29yayB3ZSBkaWQgb24gdGhlIGBteWJyYW5jaGAgYnJhbmNoIGludG8gdGhlIGBtYXN0ZXJgCiticmFuY2ggKHdoaWNoIGlzIGN1cnJlbnRseSBvdXIgYEhFQURgIHRvbykuIFRvIGRvIHRoYXQsIHRoZXJlJ3MgYSBuaWNlCitzY3JpcHQgY2FsbGVkICdnaXQgbWVyZ2UnLCB3aGljaCB3YW50cyB0byBrbm93IHdoaWNoIGJyYW5jaGVzIHlvdSB3YW50Cit0byByZXNvbHZlIGFuZCB3aGF0IHRoZSBtZXJnZSBpcyBhbGwgYWJvdXQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UgLW0gIk1lcmdlIHdvcmsgaW4gbXlicmFuY2giIG15YnJhbmNoCistLS0tLS0tLS0tLS0KKword2hlcmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGdvaW5nIHRvIGJlIHVzZWQgYXMgdGhlIGNvbW1pdCBtZXNzYWdlIGlmCit0aGUgbWVyZ2UgY2FuIGJlIHJlc29sdmVkIGF1dG9tYXRpY2FsbHkuCisKK05vdywgaW4gdGhpcyBjYXNlIHdlJ3ZlIGludGVudGlvbmFsbHkgY3JlYXRlZCBhIHNpdHVhdGlvbiB3aGVyZSB0aGUKK21lcmdlIHdpbGwgbmVlZCB0byBiZSBmaXhlZCB1cCBieSBoYW5kLCB0aG91Z2gsIHNvIEdpdCB3aWxsIGRvIGFzIG11Y2gKK29mIGl0IGFzIGl0IGNhbiBhdXRvbWF0aWNhbGx5ICh3aGljaCBpbiB0aGlzIGNhc2UgaXMganVzdCBtZXJnZSB0aGUgYGV4YW1wbGVgCitmaWxlLCB3aGljaCBoYWQgbm8gZGlmZmVyZW5jZXMgaW4gdGhlIGBteWJyYW5jaGAgYnJhbmNoKSwgYW5kIHNheToKKworLS0tLS0tLS0tLS0tLS0tLQorCUF1dG8tbWVyZ2luZyBoZWxsbworCUNPTkZMSUNUIChjb250ZW50KTogTWVyZ2UgY29uZmxpY3QgaW4gaGVsbG8KKwlBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LgorLS0tLS0tLS0tLS0tLS0tLQorCitJdCB0ZWxscyB5b3UgdGhhdCBpdCBkaWQgYW4gIkF1dG9tYXRpYyBtZXJnZSIsIHdoaWNoCitmYWlsZWQgZHVlIHRvIGNvbmZsaWN0cyBpbiBgaGVsbG9gLgorCitOb3QgdG8gd29ycnkuIEl0IGxlZnQgdGhlICh0cml2aWFsKSBjb25mbGljdCBpbiBgaGVsbG9gIGluIHRoZSBzYW1lIGZvcm0geW91CitzaG91bGQgYWxyZWFkeSBiZSB3ZWxsIHVzZWQgdG8gaWYgeW91J3ZlIGV2ZXIgdXNlZCBDVlMsIHNvIGxldCdzIGp1c3QKK29wZW4gYGhlbGxvYCBpbiBvdXIgZWRpdG9yICh3aGF0ZXZlciB0aGF0IG1heSBiZSksIGFuZCBmaXggaXQgdXAgc29tZWhvdy4KK0knZCBzdWdnZXN0IGp1c3QgbWFraW5nIGl0IHNvIHRoYXQgYGhlbGxvYCBjb250YWlucyBhbGwgZm91ciBsaW5lczoKKworLS0tLS0tLS0tLS0tCitIZWxsbyBXb3JsZAorSXQncyBhIG5ldyBkYXkgZm9yIGdpdAorUGxheSwgcGxheSwgcGxheQorV29yaywgd29yaywgd29yaworLS0tLS0tLS0tLS0tCisKK2FuZCBvbmNlIHlvdSdyZSBoYXBweSB3aXRoIHlvdXIgbWFudWFsIG1lcmdlLCBqdXN0IGRvIGEKKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQgLWkgaGVsbG8KKy0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIHZlcnkgbG91ZGx5IHdhcm4geW91IHRoYXQgeW91J3JlIG5vdyBjb21taXR0aW5nIGEgbWVyZ2UKKyh3aGljaCBpcyBjb3JyZWN0LCBzbyBuZXZlciBtaW5kKSwgYW5kIHlvdSBjYW4gd3JpdGUgYSBzbWFsbCBtZXJnZQorbWVzc2FnZSBhYm91dCB5b3VyIGFkdmVudHVyZXMgaW4gJ2dpdCBtZXJnZSctbGFuZC4KKworQWZ0ZXIgeW91J3JlIGRvbmUsIHN0YXJ0IHVwIGBnaXRrIC0tYWxsYCB0byBzZWUgZ3JhcGhpY2FsbHkgd2hhdCB0aGUKK2hpc3RvcnkgbG9va3MgbGlrZS4gTm90aWNlIHRoYXQgYG15YnJhbmNoYCBzdGlsbCBleGlzdHMsIGFuZCB5b3UgY2FuCitzd2l0Y2ggdG8gaXQsIGFuZCBjb250aW51ZSB0byB3b3JrIHdpdGggaXQgaWYgeW91IHdhbnQgdG8uIFRoZQorYG15YnJhbmNoYCBicmFuY2ggd2lsbCBub3QgY29udGFpbiB0aGUgbWVyZ2UsIGJ1dCBuZXh0IHRpbWUgeW91IG1lcmdlIGl0Citmcm9tIHRoZSBgbWFzdGVyYCBicmFuY2gsIEdpdCB3aWxsIGtub3cgaG93IHlvdSBtZXJnZWQgaXQsIHNvIHlvdSdsbCBub3QKK2hhdmUgdG8gZG8gX3RoYXRfIG1lcmdlIGFnYWluLgorCitBbm90aGVyIHVzZWZ1bCB0b29sLCBlc3BlY2lhbGx5IGlmIHlvdSBkbyBub3QgYWx3YXlzIHdvcmsgaW4gWC1XaW5kb3cKK2Vudmlyb25tZW50LCBpcyBgZ2l0IHNob3ctYnJhbmNoYC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCAtLXRvcG8tb3JkZXIgLS1tb3JlPTEgbWFzdGVyIG15YnJhbmNoCisqIFttYXN0ZXJdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKKyAhIFtteWJyYW5jaF0gU29tZSB3b3JrLgorLS0KKy0gIFttYXN0ZXJdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKKyorIFtteWJyYW5jaF0gU29tZSB3b3JrLgorKiAgW21hc3Rlcl5dIFNvbWUgZnVuLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaXJzdCB0d28gbGluZXMgaW5kaWNhdGUgdGhhdCBpdCBpcyBzaG93aW5nIHRoZSB0d28gYnJhbmNoZXMKK3dpdGggdGhlIHRpdGxlcyBvZiB0aGVpciB0b3Atb2YtdGhlLXRyZWUgY29tbWl0cywgeW91IGFyZSBjdXJyZW50bHkgb24KK2BtYXN0ZXJgIGJyYW5jaCAobm90aWNlIHRoZSBhc3RlcmlzayBgKmAgY2hhcmFjdGVyKSwgYW5kIHRoZSBmaXJzdAorY29sdW1uIGZvciB0aGUgbGF0ZXIgb3V0cHV0IGxpbmVzIGlzIHVzZWQgdG8gc2hvdyBjb21taXRzIGNvbnRhaW5lZCBpbiB0aGUKK2BtYXN0ZXJgIGJyYW5jaCwgYW5kIHRoZSBzZWNvbmQgY29sdW1uIGZvciB0aGUgYG15YnJhbmNoYAorYnJhbmNoLiBUaHJlZSBjb21taXRzIGFyZSBzaG93biBhbG9uZyB3aXRoIHRoZWlyIHRpdGxlcy4KK0FsbCBvZiB0aGVtIGhhdmUgbm9uIGJsYW5rIGNoYXJhY3RlcnMgaW4gdGhlIGZpcnN0IGNvbHVtbiAoYCpgCitzaG93cyBhbiBvcmRpbmFyeSBjb21taXQgb24gdGhlIGN1cnJlbnQgYnJhbmNoLCBgLWAgaXMgYSBtZXJnZSBjb21taXQpLCB3aGljaAorbWVhbnMgdGhleSBhcmUgbm93IHBhcnQgb2YgdGhlIGBtYXN0ZXJgIGJyYW5jaC4gT25seSB0aGUgIlNvbWUKK3dvcmsiIGNvbW1pdCBoYXMgdGhlIHBsdXMgYCtgIGNoYXJhY3RlciBpbiB0aGUgc2Vjb25kIGNvbHVtbiwKK2JlY2F1c2UgYG15YnJhbmNoYCBoYXMgbm90IGJlZW4gbWVyZ2VkIHRvIGluY29ycG9yYXRlIHRoZXNlCitjb21taXRzIGZyb20gdGhlIG1hc3RlciBicmFuY2guICBUaGUgc3RyaW5nIGluc2lkZSBicmFja2V0cworYmVmb3JlIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgaXMgYSBzaG9ydCBuYW1lIHlvdSBjYW4gdXNlIHRvCituYW1lIHRoZSBjb21taXQuICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgJ21hc3RlcicgYW5kICdteWJyYW5jaCcKK2FyZSBicmFuY2ggaGVhZHMuICAnbWFzdGVyXicgaXMgdGhlIGZpcnN0IHBhcmVudCBvZiAnbWFzdGVyJworYnJhbmNoIGhlYWQuICBQbGVhc2Ugc2VlIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddIGlmIHlvdSB3YW50IHRvCitzZWUgbW9yZSBjb21wbGV4IGNhc2VzLgorCitbTk9URV0KK1dpdGhvdXQgdGhlICctLW1vcmU9MScgb3B0aW9uLCAnZ2l0IHNob3ctYnJhbmNoJyB3b3VsZCBub3Qgb3V0cHV0IHRoZQorJ1ttYXN0ZXJeXScgY29tbWl0LCBhcyAnW215YnJhbmNoXScgY29tbWl0IGlzIGEgY29tbW9uIGFuY2VzdG9yIG9mCitib3RoICdtYXN0ZXInIGFuZCAnbXlicmFuY2gnIHRpcHMuICBQbGVhc2Ugc2VlIGxpbmtnaXQ6Z2l0LXNob3ctYnJhbmNoWzFdCitmb3IgZGV0YWlscy4KKworW05PVEVdCitJZiB0aGVyZSB3ZXJlIG1vcmUgY29tbWl0cyBvbiB0aGUgJ21hc3RlcicgYnJhbmNoIGFmdGVyIHRoZSBtZXJnZSwgdGhlCittZXJnZSBjb21taXQgaXRzZWxmIHdvdWxkIG5vdCBiZSBzaG93biBieSAnZ2l0IHNob3ctYnJhbmNoJyBieQorZGVmYXVsdC4gIFlvdSB3b3VsZCBuZWVkIHRvIHByb3ZpZGUgYC0tc3BhcnNlYCBvcHRpb24gdG8gbWFrZSB0aGUKK21lcmdlIGNvbW1pdCB2aXNpYmxlIGluIHRoaXMgY2FzZS4KKworTm93LCBsZXQncyBwcmV0ZW5kIHlvdSBhcmUgdGhlIG9uZSB3aG8gZGlkIGFsbCB0aGUgd29yayBpbgorYG15YnJhbmNoYCwgYW5kIHRoZSBmcnVpdCBvZiB5b3VyIGhhcmQgd29yayBoYXMgZmluYWxseSBiZWVuIG1lcmdlZAordG8gdGhlIGBtYXN0ZXJgIGJyYW5jaC4gTGV0J3MgZ28gYmFjayB0byBgbXlicmFuY2hgLCBhbmQgcnVuCisnZ2l0IG1lcmdlJyB0byBnZXQgdGhlICJ1cHN0cmVhbSBjaGFuZ2VzIiBiYWNrIHRvIHlvdXIgYnJhbmNoLgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCBteWJyYW5jaAorJCBnaXQgbWVyZ2UgLW0gIk1lcmdlIHVwc3RyZWFtIGNoYW5nZXMuIiBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGlzIG91dHB1dHMgc29tZXRoaW5nIGxpa2UgdGhpcyAodGhlIGFjdHVhbCBjb21taXQgb2JqZWN0IG5hbWVzCit3b3VsZCBiZSBkaWZmZXJlbnQpCisKKy0tLS0tLS0tLS0tLS0tLS0KK1VwZGF0aW5nIGZyb20gYWUzYTJkYS4uLiB0byBhODBiNGFhLi4uLgorRmFzdC1mb3J3YXJkIChubyBjb21taXQgY3JlYXRlZDsgLW0gb3B0aW9uIGlnbm9yZWQpCisgZXhhbXBsZSB8IDEgKworIGhlbGxvICAgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorLS0tLS0tLS0tLS0tLS0tLQorCitCZWNhdXNlIHlvdXIgYnJhbmNoIGRpZCBub3QgY29udGFpbiBhbnl0aGluZyBtb3JlIHRoYW4gd2hhdCBoYWQKK2FscmVhZHkgYmVlbiBtZXJnZWQgaW50byB0aGUgYG1hc3RlcmAgYnJhbmNoLCB0aGUgbWVyZ2Ugb3BlcmF0aW9uIGRpZAorbm90IGFjdHVhbGx5IGRvIGEgbWVyZ2UuIEluc3RlYWQsIGl0IGp1c3QgdXBkYXRlZCB0aGUgdG9wIG9mCit0aGUgdHJlZSBvZiB5b3VyIGJyYW5jaCB0byB0aGF0IG9mIHRoZSBgbWFzdGVyYCBicmFuY2guIFRoaXMgaXMKK29mdGVuIGNhbGxlZCAnZmFzdC1mb3J3YXJkJyBtZXJnZS4KKworWW91IGNhbiBydW4gYGdpdGsgLS1hbGxgIGFnYWluIHRvIHNlZSBob3cgdGhlIGNvbW1pdCBhbmNlc3RyeQorbG9va3MgbGlrZSwgb3IgcnVuICdzaG93LWJyYW5jaCcsIHdoaWNoIHRlbGxzIHlvdSB0aGlzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoIG1hc3RlciBteWJyYW5jaAorISBbbWFzdGVyXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCisgKiBbbXlicmFuY2hdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKKy0tCistLSBbbWFzdGVyXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitNZXJnaW5nIGV4dGVybmFsIHdvcmsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCdzIHVzdWFsbHkgbXVjaCBtb3JlIGNvbW1vbiB0aGF0IHlvdSBtZXJnZSB3aXRoIHNvbWVib2R5IGVsc2UgdGhhbgorbWVyZ2luZyB3aXRoIHlvdXIgb3duIGJyYW5jaGVzLCBzbyBpdCdzIHdvcnRoIHBvaW50aW5nIG91dCB0aGF0IEdpdAorbWFrZXMgdGhhdCB2ZXJ5IGVhc3kgdG9vLCBhbmQgaW4gZmFjdCwgaXQncyBub3QgdGhhdCBkaWZmZXJlbnQgZnJvbQorZG9pbmcgYSAnZ2l0IG1lcmdlJy4gSW4gZmFjdCwgYSByZW1vdGUgbWVyZ2UgZW5kcyB1cCBiZWluZyBub3RoaW5nCittb3JlIHRoYW4gImZldGNoIHRoZSB3b3JrIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBpbnRvIGEgdGVtcG9yYXJ5IHRhZyIKK2ZvbGxvd2VkIGJ5IGEgJ2dpdCBtZXJnZScuCisKK0ZldGNoaW5nIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBpcyBkb25lIGJ5LCB1bnN1cnByaXNpbmdseSwKKydnaXQgZmV0Y2gnOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCA8cmVtb3RlLXJlcG9zaXRvcnk+CistLS0tLS0tLS0tLS0tLS0tCisKK09uZSBvZiB0aGUgZm9sbG93aW5nIHRyYW5zcG9ydHMgY2FuIGJlIHVzZWQgdG8gbmFtZSB0aGUKK3JlcG9zaXRvcnkgdG8gZG93bmxvYWQgZnJvbToKKworU1NIOjoKKwlgcmVtb3RlLm1hY2hpbmU6L3BhdGgvdG8vcmVwby5naXQvYCBvcgorKworYHNzaDovL3JlbW90ZS5tYWNoaW5lL3BhdGgvdG8vcmVwby5naXQvYAorKworVGhpcyB0cmFuc3BvcnQgY2FuIGJlIHVzZWQgZm9yIGJvdGggdXBsb2FkaW5nIGFuZCBkb3dubG9hZGluZywKK2FuZCByZXF1aXJlcyB5b3UgdG8gaGF2ZSBhIGxvZy1pbiBwcml2aWxlZ2Ugb3ZlciBgc3NoYCB0byB0aGUKK3JlbW90ZSBtYWNoaW5lLiAgSXQgZmluZHMgb3V0IHRoZSBzZXQgb2Ygb2JqZWN0cyB0aGUgb3RoZXIgc2lkZQorbGFja3MgYnkgZXhjaGFuZ2luZyB0aGUgaGVhZCBjb21taXRzIGJvdGggZW5kcyBoYXZlIGFuZAordHJhbnNmZXJzIChjbG9zZSB0bykgbWluaW11bSBzZXQgb2Ygb2JqZWN0cy4gIEl0IGlzIGJ5IGZhciB0aGUKK21vc3QgZWZmaWNpZW50IHdheSB0byBleGNoYW5nZSBHaXQgb2JqZWN0cyBiZXR3ZWVuIHJlcG9zaXRvcmllcy4KKworTG9jYWwgZGlyZWN0b3J5OjoKKwlgL3BhdGgvdG8vcmVwby5naXQvYAorKworVGhpcyB0cmFuc3BvcnQgaXMgdGhlIHNhbWUgYXMgU1NIIHRyYW5zcG9ydCBidXQgdXNlcyAnc2gnIHRvIHJ1bgorYm90aCBlbmRzIG9uIHRoZSBsb2NhbCBtYWNoaW5lIGluc3RlYWQgb2YgcnVubmluZyBvdGhlciBlbmQgb24KK3RoZSByZW1vdGUgbWFjaGluZSB2aWEgJ3NzaCcuCisKK0dpdCBOYXRpdmU6OgorCWBnaXQ6Ly9yZW1vdGUubWFjaGluZS9wYXRoL3RvL3JlcG8uZ2l0L2AKKysKK1RoaXMgdHJhbnNwb3J0IHdhcyBkZXNpZ25lZCBmb3IgYW5vbnltb3VzIGRvd25sb2FkaW5nLiAgTGlrZSBTU0gKK3RyYW5zcG9ydCwgaXQgZmluZHMgb3V0IHRoZSBzZXQgb2Ygb2JqZWN0cyB0aGUgZG93bnN0cmVhbSBzaWRlCitsYWNrcyBhbmQgdHJhbnNmZXJzIChjbG9zZSB0bykgbWluaW11bSBzZXQgb2Ygb2JqZWN0cy4KKworSFRUUChTKTo6CisJYGh0dHA6Ly9yZW1vdGUubWFjaGluZS9wYXRoL3RvL3JlcG8uZ2l0L2AKKysKK0Rvd25sb2FkZXIgZnJvbSBodHRwIGFuZCBodHRwcyBVUkwKK2ZpcnN0IG9idGFpbnMgdGhlIHRvcG1vc3QgY29tbWl0IG9iamVjdCBuYW1lIGZyb20gdGhlIHJlbW90ZSBzaXRlCitieSBsb29raW5nIGF0IHRoZSBzcGVjaWZpZWQgcmVmbmFtZSB1bmRlciBgcmVwby5naXQvcmVmcy9gIGRpcmVjdG9yeSwKK2FuZCB0aGVuIHRyaWVzIHRvIG9idGFpbiB0aGUKK2NvbW1pdCBvYmplY3QgYnkgZG93bmxvYWRpbmcgZnJvbSBgcmVwby5naXQvb2JqZWN0cy94eC94eHguLi5gCit1c2luZyB0aGUgb2JqZWN0IG5hbWUgb2YgdGhhdCBjb21taXQgb2JqZWN0LiAgVGhlbiBpdCByZWFkcyB0aGUKK2NvbW1pdCBvYmplY3QgdG8gZmluZCBvdXQgaXRzIHBhcmVudCBjb21taXRzIGFuZCB0aGUgYXNzb2NpYXRlCit0cmVlIG9iamVjdDsgaXQgcmVwZWF0cyB0aGlzIHByb2Nlc3MgdW50aWwgaXQgZ2V0cyBhbGwgdGhlCituZWNlc3Nhcnkgb2JqZWN0cy4gIEJlY2F1c2Ugb2YgdGhpcyBiZWhhdmlvciwgdGhleSBhcmUKK3NvbWV0aW1lcyBhbHNvIGNhbGxlZCAnY29tbWl0IHdhbGtlcnMnLgorKworVGhlICdjb21taXQgd2Fsa2VycycgYXJlIHNvbWV0aW1lcyBhbHNvIGNhbGxlZCAnZHVtYgordHJhbnNwb3J0cycsIGJlY2F1c2UgdGhleSBkbyBub3QgcmVxdWlyZSBhbnkgR2l0IGF3YXJlIHNtYXJ0CitzZXJ2ZXIgbGlrZSBHaXQgTmF0aXZlIHRyYW5zcG9ydCBkb2VzLiAgQW55IHN0b2NrIEhUVFAgc2VydmVyCit0aGF0IGRvZXMgbm90IGV2ZW4gc3VwcG9ydCBkaXJlY3RvcnkgaW5kZXggd291bGQgc3VmZmljZS4gIEJ1dAoreW91IG11c3QgcHJlcGFyZSB5b3VyIHJlcG9zaXRvcnkgd2l0aCAnZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbycKK3RvIGhlbHAgZHVtYiB0cmFuc3BvcnQgZG93bmxvYWRlcnMuCisKK09uY2UgeW91IGZldGNoIGZyb20gdGhlIHJlbW90ZSByZXBvc2l0b3J5LCB5b3UgYG1lcmdlYCB0aGF0Cit3aXRoIHlvdXIgY3VycmVudCBicmFuY2guCisKK0hvd2V2ZXIgLS0gaXQncyBzdWNoIGEgY29tbW9uIHRoaW5nIHRvIGBmZXRjaGAgYW5kIHRoZW4KK2ltbWVkaWF0ZWx5IGBtZXJnZWAsIHRoYXQgaXQncyBjYWxsZWQgYGdpdCBwdWxsYCwgYW5kIHlvdSBjYW4KK3NpbXBseSBkbworCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsIDxyZW1vdGUtcmVwb3NpdG9yeT4KKy0tLS0tLS0tLS0tLS0tLS0KKworYW5kIG9wdGlvbmFsbHkgZ2l2ZSBhIGJyYW5jaC1uYW1lIGZvciB0aGUgcmVtb3RlIGVuZCBhcyBhIHNlY29uZAorYXJndW1lbnQuCisKK1tOT1RFXQorWW91IGNvdWxkIGRvIHdpdGhvdXQgdXNpbmcgYW55IGJyYW5jaGVzIGF0IGFsbCwgYnkKK2tlZXBpbmcgYXMgbWFueSBsb2NhbCByZXBvc2l0b3JpZXMgYXMgeW91IHdvdWxkIGxpa2UgdG8gaGF2ZQorYnJhbmNoZXMsIGFuZCBtZXJnaW5nIGJldHdlZW4gdGhlbSB3aXRoICdnaXQgcHVsbCcsIGp1c3QgbGlrZQoreW91IG1lcmdlIGJldHdlZW4gYnJhbmNoZXMuIFRoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBhcHByb2FjaCBpcwordGhhdCBpdCBsZXRzIHlvdSBrZWVwIGEgc2V0IG9mIGZpbGVzIGZvciBlYWNoIGBicmFuY2hgIGNoZWNrZWQKK291dCBhbmQgeW91IG1heSBmaW5kIGl0IGVhc2llciB0byBzd2l0Y2ggYmFjayBhbmQgZm9ydGggaWYgeW91CitqdWdnbGUgbXVsdGlwbGUgbGluZXMgb2YgZGV2ZWxvcG1lbnQgc2ltdWx0YW5lb3VzbHkuIE9mCitjb3Vyc2UsIHlvdSB3aWxsIHBheSB0aGUgcHJpY2Ugb2YgbW9yZSBkaXNrIHVzYWdlIHRvIGhvbGQKK211bHRpcGxlIHdvcmtpbmcgdHJlZXMsIGJ1dCBkaXNrIHNwYWNlIGlzIGNoZWFwIHRoZXNlIGRheXMuCisKK0l0IGlzIGxpa2VseSB0aGF0IHlvdSB3aWxsIGJlIHB1bGxpbmcgZnJvbSB0aGUgc2FtZSByZW1vdGUKK3JlcG9zaXRvcnkgZnJvbSB0aW1lIHRvIHRpbWUuIEFzIGEgc2hvcnQgaGFuZCwgeW91IGNhbiBzdG9yZQordGhlIHJlbW90ZSByZXBvc2l0b3J5IFVSTCBpbiB0aGUgbG9jYWwgcmVwb3NpdG9yeSdzIGNvbmZpZyBmaWxlCitsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIHJlbW90ZS5saW51cy51cmwgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHVzZSB0aGUgImxpbnVzIiBrZXl3b3JkIHdpdGggJ2dpdCBwdWxsJyBpbnN0ZWFkIG9mIHRoZSBmdWxsIFVSTC4KKworRXhhbXBsZXMuCisKKy4gYGdpdCBwdWxsIGxpbnVzYAorLiBgZ2l0IHB1bGwgbGludXMgdGFnIHYwLjk5LjFgCisKK3RoZSBhYm92ZSBhcmUgZXF1aXZhbGVudCB0bzoKKworLiBgZ2l0IHB1bGwgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQvIEhFQURgCisuIGBnaXQgcHVsbCBodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NjbS9naXQvZ2l0LmdpdC8gdGFnIHYwLjk5LjFgCisKKworSG93IGRvZXMgdGhlIG1lcmdlIHdvcms/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2Ugc2FpZCB0aGlzIHR1dG9yaWFsIHNob3dzIHdoYXQgcGx1bWJpbmcgZG9lcyB0byBoZWxwIHlvdSBjb3BlCit3aXRoIHRoZSBwb3JjZWxhaW4gdGhhdCBpc24ndCBmbHVzaGluZywgYnV0IHdlIHNvIGZhciBkaWQgbm90Cit0YWxrIGFib3V0IGhvdyB0aGUgbWVyZ2UgcmVhbGx5IHdvcmtzLiAgSWYgeW91IGFyZSBmb2xsb3dpbmcKK3RoaXMgdHV0b3JpYWwgdGhlIGZpcnN0IHRpbWUsIEknZCBzdWdnZXN0IHRvIHNraXAgdG8gIlB1Ymxpc2hpbmcKK3lvdXIgd29yayIgc2VjdGlvbiBhbmQgY29tZSBiYWNrIGhlcmUgbGF0ZXIuCisKK09LLCBzdGlsbCB3aXRoIG1lPyAgVG8gZ2l2ZSB1cyBhbiBleGFtcGxlIHRvIGxvb2sgYXQsIGxldCdzIGdvCitiYWNrIHRvIHRoZSBlYXJsaWVyIHJlcG9zaXRvcnkgd2l0aCAiaGVsbG8iIGFuZCAiZXhhbXBsZSIgZmlsZSwKK2FuZCBicmluZyBvdXJzZWx2ZXMgYmFjayB0byB0aGUgcHJlLW1lcmdlIHN0YXRlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoIC0tbW9yZT0yIG1hc3RlciBteWJyYW5jaAorISBbbWFzdGVyXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCisgKiBbbXlicmFuY2hdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKKy0tCistLSBbbWFzdGVyXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCisrKiBbbWFzdGVyXjJdIFNvbWUgd29yay4KKysqIFttYXN0ZXJeXSBTb21lIGZ1bi4KKy0tLS0tLS0tLS0tLQorCitSZW1lbWJlciwgYmVmb3JlIHJ1bm5pbmcgJ2dpdCBtZXJnZScsIG91ciBgbWFzdGVyYCBoZWFkIHdhcyBhdAorIlNvbWUgZnVuLiIgY29tbWl0LCB3aGlsZSBvdXIgYG15YnJhbmNoYCBoZWFkIHdhcyBhdCAiU29tZQord29yay4iIGNvbW1pdC4KKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggLUMgbXlicmFuY2ggbWFzdGVyXjIKKyQgZ2l0IHN3aXRjaCBtYXN0ZXIKKyQgZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXJeCistLS0tLS0tLS0tLS0KKworQWZ0ZXIgcmV3aW5kaW5nLCB0aGUgY29tbWl0IHN0cnVjdHVyZSBzaG91bGQgbG9vayBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1icmFuY2gKKyogW21hc3Rlcl0gU29tZSBmdW4uCisgISBbbXlicmFuY2hdIFNvbWUgd29yay4KKy0tCisqICBbbWFzdGVyXSBTb21lIGZ1bi4KKyArIFtteWJyYW5jaF0gU29tZSB3b3JrLgorKisgW21hc3Rlcl5dIEluaXRpYWwgY29tbWl0CistLS0tLS0tLS0tLS0KKworTm93IHdlIGFyZSByZWFkeSB0byBleHBlcmltZW50IHdpdGggdGhlIG1lcmdlIGJ5IGhhbmQuCisKK2BnaXQgbWVyZ2VgIGNvbW1hbmQsIHdoZW4gbWVyZ2luZyB0d28gYnJhbmNoZXMsIHVzZXMgMy13YXkgbWVyZ2UKK2FsZ29yaXRobS4gIEZpcnN0LCBpdCBmaW5kcyB0aGUgY29tbW9uIGFuY2VzdG9yIGJldHdlZW4gdGhlbS4KK1RoZSBjb21tYW5kIGl0IHVzZXMgaXMgJ2dpdCBtZXJnZS1iYXNlJzoKKworLS0tLS0tLS0tLS0tCiskIG1iPSQoZ2l0IG1lcmdlLWJhc2UgSEVBRCBteWJyYW5jaCkKKy0tLS0tLS0tLS0tLQorCitUaGUgY29tbWFuZCB3cml0ZXMgdGhlIGNvbW1pdCBvYmplY3QgbmFtZSBvZiB0aGUgY29tbW9uIGFuY2VzdG9yCit0byB0aGUgc3RhbmRhcmQgb3V0cHV0LCBzbyB3ZSBjYXB0dXJlZCBpdHMgb3V0cHV0IHRvIGEgdmFyaWFibGUsCitiZWNhdXNlIHdlIHdpbGwgYmUgdXNpbmcgaXQgaW4gdGhlIG5leHQgc3RlcC4gIEJ5IHRoZSB3YXksIHRoZSBjb21tb24KK2FuY2VzdG9yIGNvbW1pdCBpcyB0aGUgIkluaXRpYWwgY29tbWl0IiBjb21taXQgaW4gdGhpcyBjYXNlLiAgWW91IGNhbgordGVsbCBpdCBieToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBuYW1lLXJldiAtLW5hbWUtb25seSAtLXRhZ3MgJG1iCitteS1maXJzdC10YWcKKy0tLS0tLS0tLS0tLQorCitBZnRlciBmaW5kaW5nIG91dCBhIGNvbW1vbiBhbmNlc3RvciBjb21taXQsIHRoZSBzZWNvbmQgc3RlcCBpcwordGhpczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCByZWFkLXRyZWUgLW0gLXUgJG1iIEhFQUQgbXlicmFuY2gKKy0tLS0tLS0tLS0tLQorCitUaGlzIGlzIHRoZSBzYW1lICdnaXQgcmVhZC10cmVlJyBjb21tYW5kIHdlIGhhdmUgYWxyZWFkeSBzZWVuLAorYnV0IGl0IHRha2VzIHRocmVlIHRyZWVzLCB1bmxpa2UgcHJldmlvdXMgZXhhbXBsZXMuICBUaGlzIHJlYWRzCit0aGUgY29udGVudHMgb2YgZWFjaCB0cmVlIGludG8gZGlmZmVyZW50ICdzdGFnZScgaW4gdGhlIGluZGV4CitmaWxlICh0aGUgZmlyc3QgdHJlZSBnb2VzIHRvIHN0YWdlIDEsIHRoZSBzZWNvbmQgdG8gc3RhZ2UgMiwKK2V0Yy4pLiAgQWZ0ZXIgcmVhZGluZyB0aHJlZSB0cmVlcyBpbnRvIHRocmVlIHN0YWdlcywgdGhlIHBhdGhzCit0aGF0IGFyZSB0aGUgc2FtZSBpbiBhbGwgdGhyZWUgc3RhZ2VzIGFyZSAnY29sbGFwc2VkJyBpbnRvIHN0YWdlCiswLiAgQWxzbyBwYXRocyB0aGF0IGFyZSB0aGUgc2FtZSBpbiB0d28gb2YgdGhyZWUgc3RhZ2VzIGFyZQorY29sbGFwc2VkIGludG8gc3RhZ2UgMCwgdGFraW5nIHRoZSBTSEEtMSBmcm9tIGVpdGhlciBzdGFnZSAyIG9yCitzdGFnZSAzLCB3aGljaGV2ZXIgaXMgZGlmZmVyZW50IGZyb20gc3RhZ2UgMSAoaS5lLiBvbmx5IG9uZSBzaWRlCitjaGFuZ2VkIGZyb20gdGhlIGNvbW1vbiBhbmNlc3RvcikuCisKK0FmdGVyICdjb2xsYXBzaW5nJyBvcGVyYXRpb24sIHBhdGhzIHRoYXQgYXJlIGRpZmZlcmVudCBpbiB0aHJlZQordHJlZXMgYXJlIGxlZnQgaW4gbm9uLXplcm8gc3RhZ2VzLiAgQXQgdGhpcyBwb2ludCwgeW91IGNhbgoraW5zcGVjdCB0aGUgaW5kZXggZmlsZSB3aXRoIHRoaXMgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBscy1maWxlcyAtLXN0YWdlCisxMDA2NDQgN2Y4YjE0MWI2NWZkY2VlNDczMjFlMzk5YTI1OThhMjM1YTAzMjQyMiAwCWV4YW1wbGUKKzEwMDY0NCA1NTdkYjAzZGU5OTdjODZhNGEwMjhlMWViZDNhMWNlYjIyNWJlMjM4IDEJaGVsbG8KKzEwMDY0NCBiYTQyYTJhOTZlMzAyN2YzMzMzZTEzZWRlNGNjZjQ0OThjM2FlOTQyIDIJaGVsbG8KKzEwMDY0NCBjYzQ0YzczZWI3ODM1NjVkYTU4MzFiNGQ4MjBjOTYyOTU0MDE5YjY5IDMJaGVsbG8KKy0tLS0tLS0tLS0tLQorCitJbiBvdXIgZXhhbXBsZSBvZiBvbmx5IHR3byBmaWxlcywgd2UgZGlkIG5vdCBoYXZlIHVuY2hhbmdlZAorZmlsZXMgc28gb25seSAnZXhhbXBsZScgcmVzdWx0ZWQgaW4gY29sbGFwc2luZy4gIEJ1dCBpbiByZWFsLWxpZmUKK2xhcmdlIHByb2plY3RzLCB3aGVuIG9ubHkgYSBzbWFsbCBudW1iZXIgb2YgZmlsZXMgY2hhbmdlIGluIG9uZSBjb21taXQsCit0aGlzICdjb2xsYXBzaW5nJyB0ZW5kcyB0byB0cml2aWFsbHkgbWVyZ2UgbW9zdCBvZiB0aGUgcGF0aHMKK2ZhaXJseSBxdWlja2x5LCBsZWF2aW5nIG9ubHkgYSBoYW5kZnVsIG9mIHJlYWwgY2hhbmdlcyBpbiBub24temVybworc3RhZ2VzLgorCitUbyBsb29rIGF0IG9ubHkgbm9uLXplcm8gc3RhZ2VzLCB1c2UgYC0tdW5tZXJnZWRgIGZsYWc6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbHMtZmlsZXMgLS11bm1lcmdlZAorMTAwNjQ0IDU1N2RiMDNkZTk5N2M4NmE0YTAyOGUxZWJkM2ExY2ViMjI1YmUyMzggMQloZWxsbworMTAwNjQ0IGJhNDJhMmE5NmUzMDI3ZjMzMzNlMTNlZGU0Y2NmNDQ5OGMzYWU5NDIgMgloZWxsbworMTAwNjQ0IGNjNDRjNzNlYjc4MzU2NWRhNTgzMWI0ZDgyMGM5NjI5NTQwMTliNjkgMwloZWxsbworLS0tLS0tLS0tLS0tCisKK1RoZSBuZXh0IHN0ZXAgb2YgbWVyZ2luZyBpcyB0byBtZXJnZSB0aGVzZSB0aHJlZSB2ZXJzaW9ucyBvZiB0aGUKK2ZpbGUsIHVzaW5nIDMtd2F5IG1lcmdlLiAgVGhpcyBpcyBkb25lIGJ5IGdpdmluZworJ2dpdCBtZXJnZS1vbmUtZmlsZScgY29tbWFuZCBhcyBvbmUgb2YgdGhlIGFyZ3VtZW50cyB0bworJ2dpdCBtZXJnZS1pbmRleCcgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZS1pbmRleCBnaXQtbWVyZ2Utb25lLWZpbGUgaGVsbG8KK0F1dG8tbWVyZ2luZyBoZWxsbworRVJST1I6IE1lcmdlIGNvbmZsaWN0IGluIGhlbGxvCitmYXRhbDogbWVyZ2UgcHJvZ3JhbSBmYWlsZWQKKy0tLS0tLS0tLS0tLQorCisnZ2l0IG1lcmdlLW9uZS1maWxlJyBzY3JpcHQgaXMgY2FsbGVkIHdpdGggcGFyYW1ldGVycyB0bworZGVzY3JpYmUgdGhvc2UgdGhyZWUgdmVyc2lvbnMsIGFuZCBpcyByZXNwb25zaWJsZSB0byBsZWF2ZSB0aGUKK21lcmdlIHJlc3VsdHMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KK0l0IGlzIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBzaGVsbCBzY3JpcHQsIGFuZAorZXZlbnR1YWxseSBjYWxscyAnbWVyZ2UnIHByb2dyYW0gZnJvbSBSQ1Mgc3VpdGUgdG8gcGVyZm9ybSBhCitmaWxlLWxldmVsIDMtd2F5IG1lcmdlLiAgSW4gdGhpcyBjYXNlLCAnbWVyZ2UnIGRldGVjdHMKK2NvbmZsaWN0cywgYW5kIHRoZSBtZXJnZSByZXN1bHQgd2l0aCBjb25mbGljdCBtYXJrcyBpcyBsZWZ0IGluCit0aGUgd29ya2luZyB0cmVlLi4gIFRoaXMgY2FuIGJlIHNlZW4gaWYgeW91IHJ1biBgbHMtZmlsZXMKKy0tc3RhZ2VgIGFnYWluIGF0IHRoaXMgcG9pbnQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbHMtZmlsZXMgLS1zdGFnZQorMTAwNjQ0IDdmOGIxNDFiNjVmZGNlZTQ3MzIxZTM5OWEyNTk4YTIzNWEwMzI0MjIgMAlleGFtcGxlCisxMDA2NDQgNTU3ZGIwM2RlOTk3Yzg2YTRhMDI4ZTFlYmQzYTFjZWIyMjViZTIzOCAxCWhlbGxvCisxMDA2NDQgYmE0MmEyYTk2ZTMwMjdmMzMzM2UxM2VkZTRjY2Y0NDk4YzNhZTk0MiAyCWhlbGxvCisxMDA2NDQgY2M0NGM3M2ViNzgzNTY1ZGE1ODMxYjRkODIwYzk2Mjk1NDAxOWI2OSAzCWhlbGxvCistLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgc3RhdGUgb2YgdGhlIGluZGV4IGZpbGUgYW5kIHRoZSB3b3JraW5nIGZpbGUgYWZ0ZXIKKydnaXQgbWVyZ2UnIHJldHVybnMgY29udHJvbCBiYWNrIHRvIHlvdSwgbGVhdmluZyB0aGUgY29uZmxpY3RpbmcKK21lcmdlIGZvciB5b3UgdG8gcmVzb2x2ZS4gIE5vdGljZSB0aGF0IHRoZSBwYXRoIGBoZWxsb2AgaXMgc3RpbGwKK3VubWVyZ2VkLCBhbmQgd2hhdCB5b3Ugc2VlIHdpdGggJ2dpdCBkaWZmJyBhdCB0aGlzIHBvaW50IGlzCitkaWZmZXJlbmNlcyBzaW5jZSBzdGFnZSAyIChpLmUuIHlvdXIgdmVyc2lvbikuCisKKworUHVibGlzaGluZyB5b3VyIHdvcmsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvLCB3ZSBjYW4gdXNlIHNvbWVib2R5IGVsc2UncyB3b3JrIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSwgYnV0Citob3cgY2FuICp5b3UqIHByZXBhcmUgYSByZXBvc2l0b3J5IHRvIGxldCBvdGhlciBwZW9wbGUgcHVsbCBmcm9tCitpdD8KKworWW91IGRvIHlvdXIgcmVhbCB3b3JrIGluIHlvdXIgd29ya2luZyB0cmVlIHRoYXQgaGFzIHlvdXIKK3ByaW1hcnkgcmVwb3NpdG9yeSBoYW5naW5nIHVuZGVyIGl0IGFzIGl0cyBgLmdpdGAgc3ViZGlyZWN0b3J5LgorWW91ICpjb3VsZCogbWFrZSB0aGF0IHJlcG9zaXRvcnkgYWNjZXNzaWJsZSByZW1vdGVseSBhbmQgYXNrCitwZW9wbGUgdG8gcHVsbCBmcm9tIGl0LCBidXQgaW4gcHJhY3RpY2UgdGhhdCBpcyBub3QgdGhlIHdheQordGhpbmdzIGFyZSB1c3VhbGx5IGRvbmUuIEEgcmVjb21tZW5kZWQgd2F5IGlzIHRvIGhhdmUgYSBwdWJsaWMKK3JlcG9zaXRvcnksIG1ha2UgaXQgcmVhY2hhYmxlIGJ5IG90aGVyIHBlb3BsZSwgYW5kIHdoZW4gdGhlCitjaGFuZ2VzIHlvdSBtYWRlIGluIHlvdXIgcHJpbWFyeSB3b3JraW5nIHRyZWUgYXJlIGluIGdvb2Qgc2hhcGUsCit1cGRhdGUgdGhlIHB1YmxpYyByZXBvc2l0b3J5IGZyb20gaXQuIFRoaXMgaXMgb2Z0ZW4gY2FsbGVkCisncHVzaGluZycuCisKK1tOT1RFXQorVGhpcyBwdWJsaWMgcmVwb3NpdG9yeSBjb3VsZCBmdXJ0aGVyIGJlIG1pcnJvcmVkLCBhbmQgdGhhdCBpcworaG93IEdpdCByZXBvc2l0b3JpZXMgYXQgYGtlcm5lbC5vcmdgIGFyZSBtYW5hZ2VkLgorCitQdWJsaXNoaW5nIHRoZSBjaGFuZ2VzIGZyb20geW91ciBsb2NhbCAocHJpdmF0ZSkgcmVwb3NpdG9yeSB0bworeW91ciByZW1vdGUgKHB1YmxpYykgcmVwb3NpdG9yeSByZXF1aXJlcyBhIHdyaXRlIHByaXZpbGVnZSBvbgordGhlIHJlbW90ZSBtYWNoaW5lLiBZb3UgbmVlZCB0byBoYXZlIGFuIFNTSCBhY2NvdW50IHRoZXJlIHRvCitydW4gYSBzaW5nbGUgY29tbWFuZCwgJ2dpdC1yZWNlaXZlLXBhY2snLgorCitGaXJzdCwgeW91IG5lZWQgdG8gY3JlYXRlIGFuIGVtcHR5IHJlcG9zaXRvcnkgb24gdGhlIHJlbW90ZQorbWFjaGluZSB0aGF0IHdpbGwgaG91c2UgeW91ciBwdWJsaWMgcmVwb3NpdG9yeS4gVGhpcyBlbXB0eQorcmVwb3NpdG9yeSB3aWxsIGJlIHBvcHVsYXRlZCBhbmQgYmUga2VwdCB1cCB0byBkYXRlIGJ5IHB1c2hpbmcKK2ludG8gaXQgbGF0ZXIuIE9idmlvdXNseSwgdGhpcyByZXBvc2l0b3J5IGNyZWF0aW9uIG5lZWRzIHRvIGJlCitkb25lIG9ubHkgb25jZS4KKworW05PVEVdCisnZ2l0IHB1c2gnIHVzZXMgYSBwYWlyIG9mIGNvbW1hbmRzLAorJ2dpdCBzZW5kLXBhY2snIG9uIHlvdXIgbG9jYWwgbWFjaGluZSwgYW5kICdnaXQtcmVjZWl2ZS1wYWNrJworb24gdGhlIHJlbW90ZSBtYWNoaW5lLiBUaGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSB0d28gb3ZlcgordGhlIG5ldHdvcmsgaW50ZXJuYWxseSB1c2VzIGFuIFNTSCBjb25uZWN0aW9uLgorCitZb3VyIHByaXZhdGUgcmVwb3NpdG9yeSdzIEdpdCBkaXJlY3RvcnkgaXMgdXN1YWxseSBgLmdpdGAsIGJ1dAoreW91ciBwdWJsaWMgcmVwb3NpdG9yeSBpcyBvZnRlbiBuYW1lZCBhZnRlciB0aGUgcHJvamVjdCBuYW1lLAoraS5lLiBgPHByb2plY3Q+LmdpdGAuIExldCdzIGNyZWF0ZSBzdWNoIGEgcHVibGljIHJlcG9zaXRvcnkgZm9yCitwcm9qZWN0IGBteS1naXRgLiBBZnRlciBsb2dnaW5nIGludG8gdGhlIHJlbW90ZSBtYWNoaW5lLCBjcmVhdGUKK2FuIGVtcHR5IGRpcmVjdG9yeToKKworLS0tLS0tLS0tLS0tCiskIG1rZGlyIG15LWdpdC5naXQKKy0tLS0tLS0tLS0tLQorCitUaGVuLCBtYWtlIHRoYXQgZGlyZWN0b3J5IGludG8gYSBHaXQgcmVwb3NpdG9yeSBieSBydW5uaW5nCisnZ2l0IGluaXQnLCBidXQgdGhpcyB0aW1lLCBzaW5jZSBpdHMgbmFtZSBpcyBub3QgdGhlIHVzdWFsCitgLmdpdGAsIHdlIGRvIHRoaW5ncyBzbGlnaHRseSBkaWZmZXJlbnRseToKKworLS0tLS0tLS0tLS0tCiskIEdJVF9ESVI9bXktZ2l0LmdpdCBnaXQgaW5pdAorLS0tLS0tLS0tLS0tCisKK01ha2Ugc3VyZSB0aGlzIGRpcmVjdG9yeSBpcyBhdmFpbGFibGUgZm9yIG90aGVycyB5b3Ugd2FudCB5b3VyCitjaGFuZ2VzIHRvIGJlIHB1bGxlZCB2aWEgdGhlIHRyYW5zcG9ydCBvZiB5b3VyIGNob2ljZS4gQWxzbworeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlICdnaXQtcmVjZWl2ZS1wYWNrJworcHJvZ3JhbSBvbiB0aGUgYCRQQVRIYC4KKworW05PVEVdCitNYW55IGluc3RhbGxhdGlvbnMgb2Ygc3NoZCBkbyBub3QgaW52b2tlIHlvdXIgc2hlbGwgYXMgdGhlIGxvZ2luCitzaGVsbCB3aGVuIHlvdSBkaXJlY3RseSBydW4gcHJvZ3JhbXM7IHdoYXQgdGhpcyBtZWFucyBpcyB0aGF0IGlmCit5b3VyIGxvZ2luIHNoZWxsIGlzICdiYXNoJywgb25seSBgLmJhc2hyY2AgaXMgcmVhZCBhbmQgbm90CitgLmJhc2hfcHJvZmlsZWAuIEFzIGEgd29ya2Fyb3VuZCwgbWFrZSBzdXJlIGAuYmFzaHJjYCBzZXRzIHVwCitgJFBBVEhgIHNvIHRoYXQgeW91IGNhbiBydW4gJ2dpdC1yZWNlaXZlLXBhY2snIHByb2dyYW0uCisKK1tOT1RFXQorSWYgeW91IHBsYW4gdG8gcHVibGlzaCB0aGlzIHJlcG9zaXRvcnkgdG8gYmUgYWNjZXNzZWQgb3ZlciBodHRwLAoreW91IHNob3VsZCBkbyBgbXYgbXktZ2l0LmdpdC9ob29rcy9wb3N0LXVwZGF0ZS5zYW1wbGUKK215LWdpdC5naXQvaG9va3MvcG9zdC11cGRhdGVgIGF0IHRoaXMgcG9pbnQuCitUaGlzIG1ha2VzIHN1cmUgdGhhdCBldmVyeSB0aW1lIHlvdSBwdXNoIGludG8gdGhpcworcmVwb3NpdG9yeSwgYGdpdCB1cGRhdGUtc2VydmVyLWluZm9gIGlzIHJ1bi4KKworWW91ciAicHVibGljIHJlcG9zaXRvcnkiIGlzIG5vdyByZWFkeSB0byBhY2NlcHQgeW91ciBjaGFuZ2VzLgorQ29tZSBiYWNrIHRvIHRoZSBtYWNoaW5lIHlvdSBoYXZlIHlvdXIgcHJpdmF0ZSByZXBvc2l0b3J5LiBGcm9tCit0aGVyZSwgcnVuIHRoaXMgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIDxwdWJsaWMtaG9zdD46L3BhdGgvdG8vbXktZ2l0LmdpdCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGlzIHN5bmNocm9uaXplcyB5b3VyIHB1YmxpYyByZXBvc2l0b3J5IHRvIG1hdGNoIHRoZSBuYW1lZAorYnJhbmNoIGhlYWQgKGkuZS4gYG1hc3RlcmAgaW4gdGhpcyBjYXNlKSBhbmQgb2JqZWN0cyByZWFjaGFibGUKK2Zyb20gdGhlbSBpbiB5b3VyIGN1cnJlbnQgcmVwb3NpdG9yeS4KKworQXMgYSByZWFsIGV4YW1wbGUsIHRoaXMgaXMgaG93IEkgdXBkYXRlIG15IHB1YmxpYyBHaXQKK3JlcG9zaXRvcnkuIEtlcm5lbC5vcmcgbWlycm9yIG5ldHdvcmsgdGFrZXMgY2FyZSBvZiB0aGUKK3Byb3BhZ2F0aW9uIHRvIG90aGVyIHB1YmxpY2x5IHZpc2libGUgbWFjaGluZXM6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcHVzaCBtYXN0ZXIua2VybmVsLm9yZzovcHViL3NjbS9naXQvZ2l0LmdpdC8KKy0tLS0tLS0tLS0tLQorCisKK1BhY2tpbmcgeW91ciByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFYXJsaWVyLCB3ZSBzYXcgdGhhdCBvbmUgZmlsZSB1bmRlciBgLmdpdC9vYmplY3RzLz8/L2AgZGlyZWN0b3J5CitpcyBzdG9yZWQgZm9yIGVhY2ggR2l0IG9iamVjdCB5b3UgY3JlYXRlLiBUaGlzIHJlcHJlc2VudGF0aW9uCitpcyBlZmZpY2llbnQgdG8gY3JlYXRlIGF0b21pY2FsbHkgYW5kIHNhZmVseSwgYnV0Citub3Qgc28gY29udmVuaWVudCB0byB0cmFuc3BvcnQgb3ZlciB0aGUgbmV0d29yay4gU2luY2UgR2l0IG9iamVjdHMgYXJlCitpbW11dGFibGUgb25jZSB0aGV5IGFyZSBjcmVhdGVkLCB0aGVyZSBpcyBhIHdheSB0byBvcHRpbWl6ZSB0aGUKK3N0b3JhZ2UgYnkgInBhY2tpbmcgdGhlbSB0b2dldGhlciIuIFRoZSBjb21tYW5kCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVwYWNrCistLS0tLS0tLS0tLS0KKword2lsbCBkbyBpdCBmb3IgeW91LiBJZiB5b3UgZm9sbG93ZWQgdGhlIHR1dG9yaWFsIGV4YW1wbGVzLCB5b3UKK3dvdWxkIGhhdmUgYWNjdW11bGF0ZWQgYWJvdXQgMTcgb2JqZWN0cyBpbiBgLmdpdC9vYmplY3RzLz8/L2AKK2RpcmVjdG9yaWVzIGJ5IG5vdy4gJ2dpdCByZXBhY2snIHRlbGxzIHlvdSBob3cgbWFueSBvYmplY3RzIGl0CitwYWNrZWQsIGFuZCBzdG9yZXMgdGhlIHBhY2tlZCBmaWxlIGluIHRoZSBgLmdpdC9vYmplY3RzL3BhY2tgCitkaXJlY3RvcnkuCisKK1tOT1RFXQorWW91IHdpbGwgc2VlIHR3byBmaWxlcywgYHBhY2stKi5wYWNrYCBhbmQgYHBhY2stKi5pZHhgLAoraW4gYC5naXQvb2JqZWN0cy9wYWNrYCBkaXJlY3RvcnkuIFRoZXkgYXJlIGNsb3NlbHkgcmVsYXRlZCB0bworZWFjaCBvdGhlciwgYW5kIGlmIHlvdSBldmVyIGNvcHkgdGhlbSBieSBoYW5kIHRvIGEgZGlmZmVyZW50CityZXBvc2l0b3J5IGZvciB3aGF0ZXZlciByZWFzb24sIHlvdSBzaG91bGQgbWFrZSBzdXJlIHlvdSBjb3B5Cit0aGVtIHRvZ2V0aGVyLiBUaGUgZm9ybWVyIGhvbGRzIGFsbCB0aGUgZGF0YSBmcm9tIHRoZSBvYmplY3RzCitpbiB0aGUgcGFjaywgYW5kIHRoZSBsYXR0ZXIgaG9sZHMgdGhlIGluZGV4IGZvciByYW5kb20KK2FjY2Vzcy4KKworSWYgeW91IGFyZSBwYXJhbm9pZCwgcnVubmluZyAnZ2l0IHZlcmlmeS1wYWNrJyBjb21tYW5kIHdvdWxkCitkZXRlY3QgaWYgeW91IGhhdmUgYSBjb3JydXB0IHBhY2ssIGJ1dCBkbyBub3Qgd29ycnkgdG9vIG11Y2guCitPdXIgcHJvZ3JhbXMgYXJlIGFsd2F5cyBwZXJmZWN0IDstKS4KKworT25jZSB5b3UgaGF2ZSBwYWNrZWQgb2JqZWN0cywgeW91IGRvIG5vdCBuZWVkIHRvIGxlYXZlIHRoZQordW5wYWNrZWQgb2JqZWN0cyB0aGF0IGFyZSBjb250YWluZWQgaW4gdGhlIHBhY2sgZmlsZSBhbnltb3JlLgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHBydW5lLXBhY2tlZAorLS0tLS0tLS0tLS0tCisKK3dvdWxkIHJlbW92ZSB0aGVtIGZvciB5b3UuCisKK1lvdSBjYW4gdHJ5IHJ1bm5pbmcgYGZpbmQgLmdpdC9vYmplY3RzIC10eXBlIGZgIGJlZm9yZSBhbmQgYWZ0ZXIKK3lvdSBydW4gYGdpdCBwcnVuZS1wYWNrZWRgIGlmIHlvdSBhcmUgY3VyaW91cy4gIEFsc28gYGdpdAorY291bnQtb2JqZWN0c2Agd291bGQgdGVsbCB5b3UgaG93IG1hbnkgdW5wYWNrZWQgb2JqZWN0cyBhcmUgaW4KK3lvdXIgcmVwb3NpdG9yeSBhbmQgaG93IG11Y2ggc3BhY2UgdGhleSBhcmUgY29uc3VtaW5nLgorCitbTk9URV0KK2BnaXQgcHVsbGAgaXMgc2xpZ2h0bHkgY3VtYmVyc29tZSBmb3IgSFRUUCB0cmFuc3BvcnQsIGFzIGEKK3BhY2tlZCByZXBvc2l0b3J5IG1heSBjb250YWluIHJlbGF0aXZlbHkgZmV3IG9iamVjdHMgaW4gYQorcmVsYXRpdmVseSBsYXJnZSBwYWNrLiBJZiB5b3UgZXhwZWN0IG1hbnkgSFRUUCBwdWxscyBmcm9tIHlvdXIKK3B1YmxpYyByZXBvc2l0b3J5IHlvdSBtaWdodCB3YW50IHRvIHJlcGFjayAmIHBydW5lIG9mdGVuLCBvcgorbmV2ZXIuCisKK0lmIHlvdSBydW4gYGdpdCByZXBhY2tgIGFnYWluIGF0IHRoaXMgcG9pbnQsIGl0IHdpbGwgc2F5CisiTm90aGluZyBuZXcgdG8gcGFjay4iLiBPbmNlIHlvdSBjb250aW51ZSB5b3VyIGRldmVsb3BtZW50IGFuZAorYWNjdW11bGF0ZSB0aGUgY2hhbmdlcywgcnVubmluZyBgZ2l0IHJlcGFja2AgYWdhaW4gd2lsbCBjcmVhdGUgYQorbmV3IHBhY2ssIHRoYXQgY29udGFpbnMgb2JqZWN0cyBjcmVhdGVkIHNpbmNlIHlvdSBwYWNrZWQgeW91cgorcmVwb3NpdG9yeSB0aGUgbGFzdCB0aW1lLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgcGFjayB5b3VyIHByb2plY3QKK3Nvb24gYWZ0ZXIgdGhlIGluaXRpYWwgaW1wb3J0ICh1bmxlc3MgeW91IGFyZSBzdGFydGluZyB5b3VyCitwcm9qZWN0IGZyb20gc2NyYXRjaCksIGFuZCB0aGVuIHJ1biBgZ2l0IHJlcGFja2AgZXZlcnkgb25jZSBpbiBhCit3aGlsZSwgZGVwZW5kaW5nIG9uIGhvdyBhY3RpdmUgeW91ciBwcm9qZWN0IGlzLgorCitXaGVuIGEgcmVwb3NpdG9yeSBpcyBzeW5jaHJvbml6ZWQgdmlhIGBnaXQgcHVzaGAgYW5kIGBnaXQgcHVsbGAKK29iamVjdHMgcGFja2VkIGluIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBhcmUgdXN1YWxseSBzdG9yZWQKK3VucGFja2VkIGluIHRoZSBkZXN0aW5hdGlvbi4KK1doaWxlIHRoaXMgYWxsb3dzIHlvdSB0byB1c2UgZGlmZmVyZW50IHBhY2tpbmcgc3RyYXRlZ2llcyBvbgorYm90aCBlbmRzLCBpdCBhbHNvIG1lYW5zIHlvdSBtYXkgbmVlZCB0byByZXBhY2sgYm90aAorcmVwb3NpdG9yaWVzIGV2ZXJ5IG9uY2UgaW4gYSB3aGlsZS4KKworCitXb3JraW5nIHdpdGggT3RoZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsdGhvdWdoIEdpdCBpcyBhIHRydWx5IGRpc3RyaWJ1dGVkIHN5c3RlbSwgaXQgaXMgb2Z0ZW4KK2NvbnZlbmllbnQgdG8gb3JnYW5pemUgeW91ciBwcm9qZWN0IHdpdGggYW4gaW5mb3JtYWwgaGllcmFyY2h5CitvZiBkZXZlbG9wZXJzLiBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQgaXMgcnVuIHRoaXMgd2F5LiBUaGVyZQoraXMgYSBuaWNlIGlsbHVzdHJhdGlvbiAocGFnZSAxNywgIk1lcmdlcyB0byBNYWlubGluZSIpIGluCitodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMjA5MTUyMDM2MDkvaHR0cDovL3d3dy54ZW5vdGltZS5uZXQvbGludXgvbWVudG9yL2xpbnV4LW1lbnRvcmluZy0yMDA2LnBkZltSYW5keSBEdW5sYXAncyBwcmVzZW50YXRpb25dLgorCitJdCBzaG91bGQgYmUgc3RyZXNzZWQgdGhhdCB0aGlzIGhpZXJhcmNoeSBpcyBwdXJlbHkgKmluZm9ybWFsKi4KK1RoZXJlIGlzIG5vdGhpbmcgZnVuZGFtZW50YWwgaW4gR2l0IHRoYXQgZW5mb3JjZXMgdGhlICJjaGFpbiBvZgorcGF0Y2ggZmxvdyIgdGhpcyBoaWVyYXJjaHkgaW1wbGllcy4gWW91IGRvIG5vdCBoYXZlIHRvIHB1bGwKK2Zyb20gb25seSBvbmUgcmVtb3RlIHJlcG9zaXRvcnkuCisKK0EgcmVjb21tZW5kZWQgd29ya2Zsb3cgZm9yIGEgInByb2plY3QgbGVhZCIgZ29lcyBsaWtlIHRoaXM6CisKKzEuIFByZXBhcmUgeW91ciBwcmltYXJ5IHJlcG9zaXRvcnkgb24geW91ciBsb2NhbCBtYWNoaW5lLiBZb3VyCisgICB3b3JrIGlzIGRvbmUgdGhlcmUuCisKKzIuIFByZXBhcmUgYSBwdWJsaWMgcmVwb3NpdG9yeSBhY2Nlc3NpYmxlIHRvIG90aGVycy4KKysKK0lmIG90aGVyIHBlb3BsZSBhcmUgcHVsbGluZyBmcm9tIHlvdXIgcmVwb3NpdG9yeSBvdmVyIGR1bWIKK3RyYW5zcG9ydCBwcm90b2NvbHMgKEhUVFApLCB5b3UgbmVlZCB0byBrZWVwIHRoaXMgcmVwb3NpdG9yeQorJ2R1bWIgdHJhbnNwb3J0IGZyaWVuZGx5Jy4gIEFmdGVyIGBnaXQgaW5pdGAsCitgJEdJVF9ESVIvaG9va3MvcG9zdC11cGRhdGUuc2FtcGxlYCBjb3BpZWQgZnJvbSB0aGUgc3RhbmRhcmQgdGVtcGxhdGVzCit3b3VsZCBjb250YWluIGEgY2FsbCB0byAnZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbycKK2J1dCB5b3UgbmVlZCB0byBtYW51YWxseSBlbmFibGUgdGhlIGhvb2sgd2l0aAorYG12IHBvc3QtdXBkYXRlLnNhbXBsZSBwb3N0LXVwZGF0ZWAuICBUaGlzIG1ha2VzIHN1cmUKKydnaXQgdXBkYXRlLXNlcnZlci1pbmZvJyBrZWVwcyB0aGUgbmVjZXNzYXJ5IGZpbGVzIHVwIHRvIGRhdGUuCisKKzMuIFB1c2ggaW50byB0aGUgcHVibGljIHJlcG9zaXRvcnkgZnJvbSB5b3VyIHByaW1hcnkKKyAgIHJlcG9zaXRvcnkuCisKKzQuICdnaXQgcmVwYWNrJyB0aGUgcHVibGljIHJlcG9zaXRvcnkuIFRoaXMgZXN0YWJsaXNoZXMgYSBiaWcKKyAgIHBhY2sgdGhhdCBjb250YWlucyB0aGUgaW5pdGlhbCBzZXQgb2Ygb2JqZWN0cyBhcyB0aGUKKyAgIGJhc2VsaW5lLCBhbmQgcG9zc2libHkgJ2dpdCBwcnVuZScgaWYgdGhlIHRyYW5zcG9ydAorICAgdXNlZCBmb3IgcHVsbGluZyBmcm9tIHlvdXIgcmVwb3NpdG9yeSBzdXBwb3J0cyBwYWNrZWQKKyAgIHJlcG9zaXRvcmllcy4KKworNS4gS2VlcCB3b3JraW5nIGluIHlvdXIgcHJpbWFyeSByZXBvc2l0b3J5LiBZb3VyIGNoYW5nZXMKKyAgIGluY2x1ZGUgbW9kaWZpY2F0aW9ucyBvZiB5b3VyIG93biwgcGF0Y2hlcyB5b3UgcmVjZWl2ZSB2aWEKKyAgIGUtbWFpbHMsIGFuZCBtZXJnZXMgcmVzdWx0aW5nIGZyb20gcHVsbGluZyB0aGUgInB1YmxpYyIKKyAgIHJlcG9zaXRvcmllcyBvZiB5b3VyICJzdWJzeXN0ZW0gbWFpbnRhaW5lcnMiLgorKworWW91IGNhbiByZXBhY2sgdGhpcyBwcml2YXRlIHJlcG9zaXRvcnkgd2hlbmV2ZXIgeW91IGZlZWwgbGlrZS4KKworNi4gUHVzaCB5b3VyIGNoYW5nZXMgdG8gdGhlIHB1YmxpYyByZXBvc2l0b3J5LCBhbmQgYW5ub3VuY2UgaXQKKyAgIHRvIHRoZSBwdWJsaWMuCisKKzcuIEV2ZXJ5IG9uY2UgaW4gYSB3aGlsZSwgJ2dpdCByZXBhY2snIHRoZSBwdWJsaWMgcmVwb3NpdG9yeS4KKyAgIEdvIGJhY2sgdG8gc3RlcCA1LiBhbmQgY29udGludWUgd29ya2luZy4KKworCitBIHJlY29tbWVuZGVkIHdvcmsgY3ljbGUgZm9yIGEgInN1YnN5c3RlbSBtYWludGFpbmVyIiB3aG8gd29ya3MKK29uIHRoYXQgcHJvamVjdCBhbmQgaGFzIGFuIG93biAicHVibGljIHJlcG9zaXRvcnkiIGdvZXMgbGlrZSB0aGlzOgorCisxLiBQcmVwYXJlIHlvdXIgd29yayByZXBvc2l0b3J5LCBieSBydW5uaW5nICdnaXQgY2xvbmUnIG9uIHRoZSBwdWJsaWMKKyAgIHJlcG9zaXRvcnkgb2YgdGhlICJwcm9qZWN0IGxlYWQiLiBUaGUgVVJMIHVzZWQgZm9yIHRoZQorICAgaW5pdGlhbCBjbG9uaW5nIGlzIHN0b3JlZCBpbiB0aGUgcmVtb3RlLm9yaWdpbi51cmwKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKzIuIFByZXBhcmUgYSBwdWJsaWMgcmVwb3NpdG9yeSBhY2Nlc3NpYmxlIHRvIG90aGVycywganVzdCBsaWtlCisgICB0aGUgInByb2plY3QgbGVhZCIgcGVyc29uIGRvZXMuCisKKzMuIENvcHkgb3ZlciB0aGUgcGFja2VkIGZpbGVzIGZyb20gInByb2plY3QgbGVhZCIgcHVibGljCisgICByZXBvc2l0b3J5IHRvIHlvdXIgcHVibGljIHJlcG9zaXRvcnksIHVubGVzcyB0aGUgInByb2plY3QKKyAgIGxlYWQiIHJlcG9zaXRvcnkgbGl2ZXMgb24gdGhlIHNhbWUgbWFjaGluZSBhcyB5b3Vycy4gIEluIHRoZQorICAgbGF0dGVyIGNhc2UsIHlvdSBjYW4gdXNlIGBvYmplY3RzL2luZm8vYWx0ZXJuYXRlc2AgZmlsZSB0bworICAgcG9pbnQgYXQgdGhlIHJlcG9zaXRvcnkgeW91IGFyZSBib3Jyb3dpbmcgZnJvbS4KKworNC4gUHVzaCBpbnRvIHRoZSBwdWJsaWMgcmVwb3NpdG9yeSBmcm9tIHlvdXIgcHJpbWFyeQorICAgcmVwb3NpdG9yeS4gUnVuICdnaXQgcmVwYWNrJywgYW5kIHBvc3NpYmx5ICdnaXQgcHJ1bmUnIGlmIHRoZQorICAgdHJhbnNwb3J0IHVzZWQgZm9yIHB1bGxpbmcgZnJvbSB5b3VyIHJlcG9zaXRvcnkgc3VwcG9ydHMKKyAgIHBhY2tlZCByZXBvc2l0b3JpZXMuCisKKzUuIEtlZXAgd29ya2luZyBpbiB5b3VyIHByaW1hcnkgcmVwb3NpdG9yeS4gWW91ciBjaGFuZ2VzCisgICBpbmNsdWRlIG1vZGlmaWNhdGlvbnMgb2YgeW91ciBvd24sIHBhdGNoZXMgeW91IHJlY2VpdmUgdmlhCisgICBlLW1haWxzLCBhbmQgbWVyZ2VzIHJlc3VsdGluZyBmcm9tIHB1bGxpbmcgdGhlICJwdWJsaWMiCisgICByZXBvc2l0b3JpZXMgb2YgeW91ciAicHJvamVjdCBsZWFkIiBhbmQgcG9zc2libHkgeW91cgorICAgInN1Yi1zdWJzeXN0ZW0gbWFpbnRhaW5lcnMiLgorKworWW91IGNhbiByZXBhY2sgdGhpcyBwcml2YXRlIHJlcG9zaXRvcnkgd2hlbmV2ZXIgeW91IGZlZWwKK2xpa2UuCisKKzYuIFB1c2ggeW91ciBjaGFuZ2VzIHRvIHlvdXIgcHVibGljIHJlcG9zaXRvcnksIGFuZCBhc2sgeW91cgorICAgInByb2plY3QgbGVhZCIgYW5kIHBvc3NpYmx5IHlvdXIgInN1Yi1zdWJzeXN0ZW0KKyAgIG1haW50YWluZXJzIiB0byBwdWxsIGZyb20gaXQuCisKKzcuIEV2ZXJ5IG9uY2UgaW4gYSB3aGlsZSwgJ2dpdCByZXBhY2snIHRoZSBwdWJsaWMgcmVwb3NpdG9yeS4KKyAgIEdvIGJhY2sgdG8gc3RlcCA1LiBhbmQgY29udGludWUgd29ya2luZy4KKworCitBIHJlY29tbWVuZGVkIHdvcmsgY3ljbGUgZm9yIGFuICJpbmRpdmlkdWFsIGRldmVsb3BlciIgd2hvIGRvZXMKK25vdCBoYXZlIGEgInB1YmxpYyIgcmVwb3NpdG9yeSBpcyBzb21ld2hhdCBkaWZmZXJlbnQuIEl0IGdvZXMKK2xpa2UgdGhpczoKKworMS4gUHJlcGFyZSB5b3VyIHdvcmsgcmVwb3NpdG9yeSwgYnkgJ2dpdCBjbG9uZScgdGhlIHB1YmxpYworICAgcmVwb3NpdG9yeSBvZiB0aGUgInByb2plY3QgbGVhZCIgKG9yIGEgInN1YnN5c3RlbQorICAgbWFpbnRhaW5lciIsIGlmIHlvdSB3b3JrIG9uIGEgc3Vic3lzdGVtKS4gVGhlIFVSTCB1c2VkIGZvcgorICAgdGhlIGluaXRpYWwgY2xvbmluZyBpcyBzdG9yZWQgaW4gdGhlIHJlbW90ZS5vcmlnaW4udXJsCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisyLiBEbyB5b3VyIHdvcmsgaW4geW91ciByZXBvc2l0b3J5IG9uICdtYXN0ZXInIGJyYW5jaC4KKworMy4gUnVuIGBnaXQgZmV0Y2ggb3JpZ2luYCBmcm9tIHRoZSBwdWJsaWMgcmVwb3NpdG9yeSBvZiB5b3VyCisgICB1cHN0cmVhbSBldmVyeSBvbmNlIGluIGEgd2hpbGUuIFRoaXMgZG9lcyBvbmx5IHRoZSBmaXJzdAorICAgaGFsZiBvZiBgZ2l0IHB1bGxgIGJ1dCBkb2VzIG5vdCBtZXJnZS4gVGhlIGhlYWQgb2YgdGhlCisgICBwdWJsaWMgcmVwb3NpdG9yeSBpcyBzdG9yZWQgaW4gYC5naXQvcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXJgLgorCis0LiBVc2UgYGdpdCBjaGVycnkgb3JpZ2luYCB0byBzZWUgd2hpY2ggb25lcyBvZiB5b3VyIHBhdGNoZXMKKyAgIHdlcmUgYWNjZXB0ZWQsIGFuZC9vciB1c2UgYGdpdCByZWJhc2Ugb3JpZ2luYCB0byBwb3J0IHlvdXIKKyAgIHVubWVyZ2VkIGNoYW5nZXMgZm9yd2FyZCB0byB0aGUgdXBkYXRlZCB1cHN0cmVhbS4KKworNS4gVXNlIGBnaXQgZm9ybWF0LXBhdGNoIG9yaWdpbmAgdG8gcHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwKKyAgIHN1Ym1pc3Npb24gdG8geW91ciB1cHN0cmVhbSBhbmQgc2VuZCBpdCBvdXQuIEdvIGJhY2sgdG8KKyAgIHN0ZXAgMi4gYW5kIGNvbnRpbnVlLgorCisKK1dvcmtpbmcgd2l0aCBPdGhlcnMsIFNoYXJlZCBSZXBvc2l0b3J5IFN0eWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgYXJlIGNvbWluZyBmcm9tIGEgQ1ZTIGJhY2tncm91bmQsIHRoZSBzdHlsZSBvZiBjb29wZXJhdGlvbgorc3VnZ2VzdGVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uIG1heSBiZSBuZXcgdG8geW91LiBZb3UgZG8gbm90CitoYXZlIHRvIHdvcnJ5LiBHaXQgc3VwcG9ydHMgdGhlICJzaGFyZWQgcHVibGljIHJlcG9zaXRvcnkiIHN0eWxlIG9mCitjb29wZXJhdGlvbiB5b3UgYXJlIHByb2JhYmx5IG1vcmUgZmFtaWxpYXIgd2l0aCBhcyB3ZWxsLgorCitTZWUgbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddIGZvciB0aGUgZGV0YWlscy4KKworQnVuZGxpbmcgeW91ciB3b3JrIHRvZ2V0aGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgbGlrZWx5IHRoYXQgeW91IHdpbGwgYmUgd29ya2luZyBvbiBtb3JlIHRoYW4gb25lIHRoaW5nIGF0CithIHRpbWUuICBJdCBpcyBlYXN5IHRvIG1hbmFnZSB0aG9zZSBtb3JlLW9yLWxlc3MgaW5kZXBlbmRlbnQgdGFza3MKK3VzaW5nIGJyYW5jaGVzIHdpdGggR2l0LgorCitXZSBoYXZlIGFscmVhZHkgc2VlbiBob3cgYnJhbmNoZXMgd29yayBwcmV2aW91c2x5LAord2l0aCAiZnVuIGFuZCB3b3JrIiBleGFtcGxlIHVzaW5nIHR3byBicmFuY2hlcy4gIFRoZSBpZGVhIGlzIHRoZQorc2FtZSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIHR3byBicmFuY2hlcy4gIExldCdzIHNheSB5b3Ugc3RhcnRlZAorb3V0IGZyb20gIm1hc3RlciIgaGVhZCwgYW5kIGhhdmUgc29tZSBuZXcgY29kZSBpbiB0aGUgIm1hc3RlciIKK2JyYW5jaCwgYW5kIHR3byBpbmRlcGVuZGVudCBmaXhlcyBpbiB0aGUgImNvbW1pdC1maXgiIGFuZAorImRpZmYtZml4IiBicmFuY2hlczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaAorISBbY29tbWl0LWZpeF0gRml4IGNvbW1pdCBtZXNzYWdlIG5vcm1hbGl6YXRpb24uCisgISBbZGlmZi1maXhdIEZpeCByZW5hbWUgZGV0ZWN0aW9uLgorICAqIFttYXN0ZXJdIFJlbGVhc2UgY2FuZGlkYXRlICMxCistLS0KKyArICBbZGlmZi1maXhdIEZpeCByZW5hbWUgZGV0ZWN0aW9uLgorICsgIFtkaWZmLWZpeH4xXSBCZXR0ZXIgY29tbW9uIHN1YnN0cmluZyBhbGdvcml0aG0uCisrICAgW2NvbW1pdC1maXhdIEZpeCBjb21taXQgbWVzc2FnZSBub3JtYWxpemF0aW9uLgorICAqIFttYXN0ZXJdIFJlbGVhc2UgY2FuZGlkYXRlICMxCisrKyogW2RpZmYtZml4fjJdIFByZXR0eS1wcmludCBtZXNzYWdlcy4KKy0tLS0tLS0tLS0tLQorCitCb3RoIGZpeGVzIGFyZSB0ZXN0ZWQgd2VsbCwgYW5kIGF0IHRoaXMgcG9pbnQsIHlvdSB3YW50IHRvIG1lcmdlCitpbiBib3RoIG9mIHRoZW0uICBZb3UgY291bGQgbWVyZ2UgaW4gJ2RpZmYtZml4JyBmaXJzdCBhbmQgdGhlbgorJ2NvbW1pdC1maXgnIG5leHQsIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSAtbSAiTWVyZ2UgZml4IGluIGRpZmYtZml4IiBkaWZmLWZpeAorJCBnaXQgbWVyZ2UgLW0gIk1lcmdlIGZpeCBpbiBjb21taXQtZml4IiBjb21taXQtZml4CistLS0tLS0tLS0tLS0KKworV2hpY2ggd291bGQgcmVzdWx0IGluOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoCishIFtjb21taXQtZml4XSBGaXggY29tbWl0IG1lc3NhZ2Ugbm9ybWFsaXphdGlvbi4KKyAhIFtkaWZmLWZpeF0gRml4IHJlbmFtZSBkZXRlY3Rpb24uCisgICogW21hc3Rlcl0gTWVyZ2UgZml4IGluIGNvbW1pdC1maXgKKy0tLQorICAtIFttYXN0ZXJdIE1lcmdlIGZpeCBpbiBjb21taXQtZml4CisrICogW2NvbW1pdC1maXhdIEZpeCBjb21taXQgbWVzc2FnZSBub3JtYWxpemF0aW9uLgorICAtIFttYXN0ZXJ+MV0gTWVyZ2UgZml4IGluIGRpZmYtZml4CisgKyogW2RpZmYtZml4XSBGaXggcmVuYW1lIGRldGVjdGlvbi4KKyArKiBbZGlmZi1maXh+MV0gQmV0dGVyIGNvbW1vbiBzdWJzdHJpbmcgYWxnb3JpdGhtLgorICAqIFttYXN0ZXJ+Ml0gUmVsZWFzZSBjYW5kaWRhdGUgIzEKKysrKiBbbWFzdGVyfjNdIFByZXR0eS1wcmludCBtZXNzYWdlcy4KKy0tLS0tLS0tLS0tLQorCitIb3dldmVyLCB0aGVyZSBpcyBubyBwYXJ0aWN1bGFyIHJlYXNvbiB0byBtZXJnZSBpbiBvbmUgYnJhbmNoCitmaXJzdCBhbmQgdGhlIG90aGVyIG5leHQsIHdoZW4gd2hhdCB5b3UgaGF2ZSBhcmUgYSBzZXQgb2YgdHJ1bHkKK2luZGVwZW5kZW50IGNoYW5nZXMgKGlmIHRoZSBvcmRlciBtYXR0ZXJlZCwgdGhlbiB0aGV5IGFyZSBub3QKK2luZGVwZW5kZW50IGJ5IGRlZmluaXRpb24pLiAgWW91IGNvdWxkIGluc3RlYWQgbWVyZ2UgdGhvc2UgdHdvCiticmFuY2hlcyBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCBhdCBvbmNlLiAgRmlyc3QgbGV0J3MgdW5kbyB3aGF0Cit3ZSBqdXN0IGRpZCBhbmQgc3RhcnQgb3Zlci4gIFdlIHdvdWxkIHdhbnQgdG8gZ2V0IHRoZSBtYXN0ZXIKK2JyYW5jaCBiZWZvcmUgdGhlc2UgdHdvIG1lcmdlcyBieSByZXNldHRpbmcgaXQgdG8gJ21hc3Rlcn4yJzoKKworLS0tLS0tLS0tLS0tCiskIGdpdCByZXNldCAtLWhhcmQgbWFzdGVyfjIKKy0tLS0tLS0tLS0tLQorCitZb3UgY2FuIG1ha2Ugc3VyZSBgZ2l0IHNob3ctYnJhbmNoYCBtYXRjaGVzIHRoZSBzdGF0ZSBiZWZvcmUKK3Rob3NlIHR3byAnZ2l0IG1lcmdlJyB5b3UganVzdCBkaWQuICBUaGVuLCBpbnN0ZWFkIG9mIHJ1bm5pbmcKK3R3byAnZ2l0IG1lcmdlJyBjb21tYW5kcyBpbiBhIHJvdywgeW91IHdvdWxkIG1lcmdlIHRoZXNlIHR3bworYnJhbmNoIGhlYWRzICh0aGlzIGlzIGtub3duIGFzICdtYWtpbmcgYW4gT2N0b3B1cycpOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IG1lcmdlIGNvbW1pdC1maXggZGlmZi1maXgKKyQgZ2l0IHNob3ctYnJhbmNoCishIFtjb21taXQtZml4XSBGaXggY29tbWl0IG1lc3NhZ2Ugbm9ybWFsaXphdGlvbi4KKyAhIFtkaWZmLWZpeF0gRml4IHJlbmFtZSBkZXRlY3Rpb24uCisgICogW21hc3Rlcl0gT2N0b3B1cyBtZXJnZSBvZiBicmFuY2hlcyAnZGlmZi1maXgnIGFuZCAnY29tbWl0LWZpeCcKKy0tLQorICAtIFttYXN0ZXJdIE9jdG9wdXMgbWVyZ2Ugb2YgYnJhbmNoZXMgJ2RpZmYtZml4JyBhbmQgJ2NvbW1pdC1maXgnCisrICogW2NvbW1pdC1maXhdIEZpeCBjb21taXQgbWVzc2FnZSBub3JtYWxpemF0aW9uLgorICsqIFtkaWZmLWZpeF0gRml4IHJlbmFtZSBkZXRlY3Rpb24uCisgKyogW2RpZmYtZml4fjFdIEJldHRlciBjb21tb24gc3Vic3RyaW5nIGFsZ29yaXRobS4KKyAgKiBbbWFzdGVyfjFdIFJlbGVhc2UgY2FuZGlkYXRlICMxCisrKyogW21hc3Rlcn4yXSBQcmV0dHktcHJpbnQgbWVzc2FnZXMuCistLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IHlvdSBzaG91bGQgbm90IGRvIE9jdG9wdXMganVzdCBiZWNhdXNlIHlvdSBjYW4uICBBbiBvY3RvcHVzCitpcyBhIHZhbGlkIHRoaW5nIHRvIGRvIGFuZCBvZnRlbiBtYWtlcyBpdCBlYXNpZXIgdG8gdmlldyB0aGUKK2NvbW1pdCBoaXN0b3J5IGlmIHlvdSBhcmUgbWVyZ2luZyBtb3JlIHRoYW4gdHdvIGluZGVwZW5kZW50CitjaGFuZ2VzIGF0IHRoZSBzYW1lIHRpbWUuICBIb3dldmVyLCBpZiB5b3UgaGF2ZSBtZXJnZSBjb25mbGljdHMKK3dpdGggYW55IG9mIHRoZSBicmFuY2hlcyB5b3UgYXJlIG1lcmdpbmcgaW4gYW5kIG5lZWQgdG8gaGFuZAorcmVzb2x2ZSwgdGhhdCBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIGRldmVsb3BtZW50IGhhcHBlbmVkIGluCit0aG9zZSBicmFuY2hlcyB3ZXJlIG5vdCBpbmRlcGVuZGVudCBhZnRlciBhbGwsIGFuZCB5b3Ugc2hvdWxkCittZXJnZSB0d28gYXQgYSB0aW1lLCBkb2N1bWVudGluZyBob3cgeW91IHJlc29sdmVkIHRoZSBjb25mbGljdHMsCithbmQgdGhlIHJlYXNvbiB3aHkgeW91IHByZWZlcnJlZCBjaGFuZ2VzIG1hZGUgaW4gb25lIHNpZGUgb3ZlcgordGhlIG90aGVyLiAgT3RoZXJ3aXNlIGl0IHdvdWxkIG1ha2UgdGhlIHByb2plY3QgaGlzdG9yeSBoYXJkZXIKK3RvIGZvbGxvdywgbm90IGVhc2llci4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHR1dG9yaWFsWzddLAorbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLAorbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLAorbGlua2dpdDpnaXQtaGVscFsxXSwKK2xpbmtnaXQ6Z2l0ZXZlcnlkYXlbN10sCitsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Y3JlZGVudGlhbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRjcmVkZW50aWFscy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0ODFhZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0Y3JlZGVudGlhbHMudHh0CkBAIC0wLDAgKzEsMjk4IEBACitnaXRjcmVkZW50aWFscyg3KQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0Y3JlZGVudGlhbHMgLSBwcm92aWRpbmcgdXNlcm5hbWVzIGFuZCBwYXNzd29yZHMgdG8gR2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS51c2VybmFtZSBteXVzZXJuYW1lCitnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICIkaGVscGVyICRvcHRpb25zIgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXQgd2lsbCBzb21ldGltZXMgbmVlZCBjcmVkZW50aWFscyBmcm9tIHRoZSB1c2VyIGluIG9yZGVyIHRvIHBlcmZvcm0KK29wZXJhdGlvbnM7IGZvciBleGFtcGxlLCBpdCBtYXkgbmVlZCB0byBhc2sgZm9yIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkCitpbiBvcmRlciB0byBhY2Nlc3MgYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIEhUVFAuIFRoaXMgbWFudWFsIGRlc2NyaWJlcwordGhlIG1lY2hhbmlzbXMgR2l0IHVzZXMgdG8gcmVxdWVzdCB0aGVzZSBjcmVkZW50aWFscywgYXMgd2VsbCBhcyBzb21lCitmZWF0dXJlcyB0byBhdm9pZCBpbnB1dHRpbmcgdGhlc2UgY3JlZGVudGlhbHMgcmVwZWF0ZWRseS4KKworUkVRVUVTVElORyBDUkVERU5USUFMUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRob3V0IGFueSBjcmVkZW50aWFsIGhlbHBlcnMgZGVmaW5lZCwgR2l0IHdpbGwgdHJ5IHRoZSBmb2xsb3dpbmcKK3N0cmF0ZWdpZXMgdG8gYXNrIHRoZSB1c2VyIGZvciB1c2VybmFtZXMgYW5kIHBhc3N3b3JkczoKKworMS4gSWYgdGhlIGBHSVRfQVNLUEFTU2AgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCB0aGUgcHJvZ3JhbQorICAgc3BlY2lmaWVkIGJ5IHRoZSB2YXJpYWJsZSBpcyBpbnZva2VkLiBBIHN1aXRhYmxlIHByb21wdCBpcyBwcm92aWRlZAorICAgdG8gdGhlIHByb2dyYW0gb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIHRoZSB1c2VyJ3MgaW5wdXQgaXMgcmVhZAorICAgZnJvbSBpdHMgc3RhbmRhcmQgb3V0cHV0LgorCisyLiBPdGhlcndpc2UsIGlmIHRoZSBgY29yZS5hc2tQYXNzYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIHNldCwgaXRzCisgICB2YWx1ZSBpcyB1c2VkIGFzIGFib3ZlLgorCiszLiBPdGhlcndpc2UsIGlmIHRoZSBgU1NIX0FTS1BBU1NgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgaXRzCisgICB2YWx1ZSBpcyB1c2VkIGFzIGFib3ZlLgorCis0LiBPdGhlcndpc2UsIHRoZSB1c2VyIGlzIHByb21wdGVkIG9uIHRoZSB0ZXJtaW5hbC4KKworQVZPSURJTkcgUkVQRVRJVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBjYW4gYmUgY3VtYmVyc29tZSB0byBpbnB1dCB0aGUgc2FtZSBjcmVkZW50aWFscyBvdmVyIGFuZCBvdmVyLiAgR2l0Citwcm92aWRlcyB0d28gbWV0aG9kcyB0byByZWR1Y2UgdGhpcyBhbm5veWFuY2U6CisKKzEuIFN0YXRpYyBjb25maWd1cmF0aW9uIG9mIHVzZXJuYW1lcyBmb3IgYSBnaXZlbiBhdXRoZW50aWNhdGlvbiBjb250ZXh0LgorCisyLiBDcmVkZW50aWFsIGhlbHBlcnMgdG8gY2FjaGUgb3Igc3RvcmUgcGFzc3dvcmRzLCBvciB0byBpbnRlcmFjdCB3aXRoCisgICBhIHN5c3RlbSBwYXNzd29yZCB3YWxsZXQgb3Iga2V5Y2hhaW4uCisKK1RoZSBmaXJzdCBpcyBzaW1wbGUgYW5kIGFwcHJvcHJpYXRlIGlmIHlvdSBkbyBub3QgaGF2ZSBzZWN1cmUgc3RvcmFnZSBhdmFpbGFibGUKK2ZvciBhIHBhc3N3b3JkLiBJdCBpcyBnZW5lcmFsbHkgY29uZmlndXJlZCBieSBhZGRpbmcgdGhpcyB0byB5b3VyIGNvbmZpZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbY3JlZGVudGlhbCAiaHR0cHM6Ly9leGFtcGxlLmNvbSJdCisJdXNlcm5hbWUgPSBtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NyZWRlbnRpYWwgaGVscGVycywgb24gdGhlIG90aGVyIGhhbmQsIGFyZSBleHRlcm5hbCBwcm9ncmFtcyBmcm9tIHdoaWNoIEdpdCBjYW4KK3JlcXVlc3QgYm90aCB1c2VybmFtZXMgYW5kIHBhc3N3b3JkczsgdGhleSB0eXBpY2FsbHkgaW50ZXJmYWNlIHdpdGggc2VjdXJlCitzdG9yYWdlIHByb3ZpZGVkIGJ5IHRoZSBPUyBvciBvdGhlciBwcm9ncmFtcy4KKworVG8gdXNlIGEgaGVscGVyLCB5b3UgbXVzdCBmaXJzdCBzZWxlY3Qgb25lIHRvIHVzZS4gR2l0IGN1cnJlbnRseQoraW5jbHVkZXMgdGhlIGZvbGxvd2luZyBoZWxwZXJzOgorCitjYWNoZTo6CisKKwlDYWNoZSBjcmVkZW50aWFscyBpbiBtZW1vcnkgZm9yIGEgc2hvcnQgcGVyaW9kIG9mIHRpbWUuIFNlZQorCWxpbmtnaXQ6Z2l0LWNyZWRlbnRpYWwtY2FjaGVbMV0gZm9yIGRldGFpbHMuCisKK3N0b3JlOjoKKworCVN0b3JlIGNyZWRlbnRpYWxzIGluZGVmaW5pdGVseSBvbiBkaXNrLiBTZWUKKwlsaW5rZ2l0OmdpdC1jcmVkZW50aWFsLXN0b3JlWzFdIGZvciBkZXRhaWxzLgorCitZb3UgbWF5IGFsc28gaGF2ZSB0aGlyZC1wYXJ0eSBoZWxwZXJzIGluc3RhbGxlZDsgc2VhcmNoIGZvcgorYGNyZWRlbnRpYWwtKmAgaW4gdGhlIG91dHB1dCBvZiBgZ2l0IGhlbHAgLWFgLCBhbmQgY29uc3VsdCB0aGUKK2RvY3VtZW50YXRpb24gb2YgaW5kaXZpZHVhbCBoZWxwZXJzLiAgT25jZSB5b3UgaGF2ZSBzZWxlY3RlZCBhIGhlbHBlciwKK3lvdSBjYW4gdGVsbCBHaXQgdG8gdXNlIGl0IGJ5IHB1dHRpbmcgaXRzIG5hbWUgaW50byB0aGUKK2NyZWRlbnRpYWwuaGVscGVyIHZhcmlhYmxlLgorCisxLiBGaW5kIGEgaGVscGVyLgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgaGVscCAtYSB8IGdyZXAgY3JlZGVudGlhbC0KK2NyZWRlbnRpYWwtZm9vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzIuIFJlYWQgaXRzIGRlc2NyaXB0aW9uLgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgaGVscCBjcmVkZW50aWFsLWZvbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiszLiBUZWxsIEdpdCB0byB1c2UgaXQuCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgLS1nbG9iYWwgY3JlZGVudGlhbC5oZWxwZXIgZm9vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworQ1JFREVOVElBTCBDT05URVhUUworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgY29uc2lkZXJzIGVhY2ggY3JlZGVudGlhbCB0byBoYXZlIGEgY29udGV4dCBkZWZpbmVkIGJ5IGEgVVJMLiBUaGlzIGNvbnRleHQKK2lzIHVzZWQgdG8gbG9vayB1cCBjb250ZXh0LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24sIGFuZCBpcyBwYXNzZWQgdG8gYW55CitoZWxwZXJzLCB3aGljaCBtYXkgdXNlIGl0IGFzIGFuIGluZGV4IGludG8gc2VjdXJlIHN0b3JhZ2UuCisKK0ZvciBpbnN0YW5jZSwgaW1hZ2luZSB3ZSBhcmUgYWNjZXNzaW5nIGBodHRwczovL2V4YW1wbGUuY29tL2Zvby5naXRgLiBXaGVuIEdpdAorbG9va3MgaW50byBhIGNvbmZpZyBmaWxlIHRvIHNlZSBpZiBhIHNlY3Rpb24gbWF0Y2hlcyB0aGlzIGNvbnRleHQsIGl0IHdpbGwKK2NvbnNpZGVyIHRoZSB0d28gYSBtYXRjaCBpZiB0aGUgY29udGV4dCBpcyBhIG1vcmUtc3BlY2lmaWMgc3Vic2V0IG9mIHRoZQorcGF0dGVybiBpbiB0aGUgY29uZmlnIGZpbGUuIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0aGlzIGluIHlvdXIgY29uZmlnIGZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbY3JlZGVudGlhbCAiaHR0cHM6Ly9leGFtcGxlLmNvbSJdCisJdXNlcm5hbWUgPSBmb28KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RoZW4gd2Ugd2lsbCBtYXRjaDogYm90aCBwcm90b2NvbHMgYXJlIHRoZSBzYW1lLCBib3RoIGhvc3RzIGFyZSB0aGUgc2FtZSwgYW5kCit0aGUgInBhdHRlcm4iIFVSTCBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSBwYXRoIGNvbXBvbmVudCBhdCBhbGwuIEhvd2V2ZXIsIHRoaXMKK2NvbnRleHQgd291bGQgbm90IG1hdGNoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2NyZWRlbnRpYWwgImh0dHBzOi8va2VybmVsLm9yZyJdCisJdXNlcm5hbWUgPSBmb28KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2JlY2F1c2UgdGhlIGhvc3RuYW1lcyBkaWZmZXIuIE5vciB3b3VsZCBpdCBtYXRjaCBgZm9vLmV4YW1wbGUuY29tYDsgR2l0Citjb21wYXJlcyBob3N0bmFtZXMgZXhhY3RseSwgd2l0aG91dCBjb25zaWRlcmluZyB3aGV0aGVyIHR3byBob3N0cyBhcmUgcGFydCBvZgordGhlIHNhbWUgZG9tYWluLiBMaWtld2lzZSwgYSBjb25maWcgZW50cnkgZm9yIGBodHRwOi8vZXhhbXBsZS5jb21gIHdvdWxkIG5vdAorbWF0Y2g6IEdpdCBjb21wYXJlcyB0aGUgcHJvdG9jb2xzIGV4YWN0bHkuICBIb3dldmVyLCB5b3UgbWF5IHVzZSB3aWxkY2FyZHMgaW4KK3RoZSBkb21haW4gbmFtZSBhbmQgb3RoZXIgcGF0dGVybiBtYXRjaGluZyB0ZWNobmlxdWVzIGFzIHdpdGggdGhlIGBodHRwLjx1cmw+LipgCitvcHRpb25zLgorCitJZiB0aGUgInBhdHRlcm4iIFVSTCBkb2VzIGluY2x1ZGUgYSBwYXRoIGNvbXBvbmVudCwgdGhlbiB0aGlzIHRvbyBtdXN0IG1hdGNoCitleGFjdGx5OiB0aGUgY29udGV4dCBgaHR0cHM6Ly9leGFtcGxlLmNvbS9iYXIvYmF6LmdpdGAgd2lsbCBtYXRjaCBhIGNvbmZpZworZW50cnkgZm9yIGBodHRwczovL2V4YW1wbGUuY29tL2Jhci9iYXouZ2l0YCAoaW4gYWRkaXRpb24gdG8gbWF0Y2hpbmcgdGhlIGNvbmZpZworZW50cnkgZm9yIGBodHRwczovL2V4YW1wbGUuY29tYCkgYnV0IHdpbGwgbm90IG1hdGNoIGEgY29uZmlnIGVudHJ5IGZvcgorYGh0dHBzOi8vZXhhbXBsZS5jb20vYmFyYC4KKworCitDT05GSUdVUkFUSU9OIE9QVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPcHRpb25zIGZvciBhIGNyZWRlbnRpYWwgY29udGV4dCBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgaW4KK2BjcmVkZW50aWFsLipgICh3aGljaCBhcHBsaWVzIHRvIGFsbCBjcmVkZW50aWFscyksIG9yCitgY3JlZGVudGlhbC48dXJsPi4qYCwgd2hlcmUgPHVybD4gbWF0Y2hlcyB0aGUgY29udGV4dCBhcyBkZXNjcmliZWQKK2Fib3ZlLgorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiBlaXRoZXIgbG9jYXRpb246CisKK2hlbHBlcjo6CisKKwlUaGUgbmFtZSBvZiBhbiBleHRlcm5hbCBjcmVkZW50aWFsIGhlbHBlciwgYW5kIGFueSBhc3NvY2lhdGVkIG9wdGlvbnMuCisJSWYgdGhlIGhlbHBlciBuYW1lIGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoLCB0aGVuIHRoZSBzdHJpbmcgYGdpdAorCWNyZWRlbnRpYWwtYCBpcyBwcmVwZW5kZWQuIFRoZSByZXN1bHRpbmcgc3RyaW5nIGlzIGV4ZWN1dGVkIGJ5IHRoZQorCXNoZWxsIChzbywgZm9yIGV4YW1wbGUsIHNldHRpbmcgdGhpcyB0byBgZm9vIC0tb3B0aW9uPWJhcmAgd2lsbCBleGVjdXRlCisJYGdpdCBjcmVkZW50aWFsLWZvbyAtLW9wdGlvbj1iYXJgIHZpYSB0aGUgc2hlbGwuIFNlZSB0aGUgbWFudWFsIG9mCisJc3BlY2lmaWMgaGVscGVycyBmb3IgZXhhbXBsZXMgb2YgdGhlaXIgdXNlLgorKworSWYgdGhlcmUgYXJlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgYGNyZWRlbnRpYWwuaGVscGVyYCBjb25maWd1cmF0aW9uCit2YXJpYWJsZSwgZWFjaCBoZWxwZXIgd2lsbCBiZSB0cmllZCBpbiB0dXJuLCBhbmQgbWF5IHByb3ZpZGUgYSB1c2VybmFtZSwKK3Bhc3N3b3JkLCBvciBub3RoaW5nLiBPbmNlIEdpdCBoYXMgYWNxdWlyZWQgYm90aCBhIHVzZXJuYW1lIGFuZCBhCitwYXNzd29yZCwgbm8gbW9yZSBoZWxwZXJzIHdpbGwgYmUgdHJpZWQuCisrCitJZiBgY3JlZGVudGlhbC5oZWxwZXJgIGlzIGNvbmZpZ3VyZWQgdG8gdGhlIGVtcHR5IHN0cmluZywgdGhpcyByZXNldHMKK3RoZSBoZWxwZXIgbGlzdCB0byBlbXB0eSAoc28geW91IG1heSBvdmVycmlkZSBhIGhlbHBlciBzZXQgYnkgYQorbG93ZXItcHJpb3JpdHkgY29uZmlnIGZpbGUgYnkgY29uZmlndXJpbmcgdGhlIGVtcHR5LXN0cmluZyBoZWxwZXIsCitmb2xsb3dlZCBieSB3aGF0ZXZlciBzZXQgb2YgaGVscGVycyB5b3Ugd291bGQgbGlrZSkuCisKK3VzZXJuYW1lOjoKKworCUEgZGVmYXVsdCB1c2VybmFtZSwgaWYgb25lIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgVVJMLgorCit1c2VIdHRwUGF0aDo6CisKKwlCeSBkZWZhdWx0LCBHaXQgZG9lcyBub3QgY29uc2lkZXIgdGhlICJwYXRoIiBjb21wb25lbnQgb2YgYW4gaHR0cCBVUkwKKwl0byBiZSB3b3J0aCBtYXRjaGluZyB2aWEgZXh0ZXJuYWwgaGVscGVycy4gVGhpcyBtZWFucyB0aGF0IGEgY3JlZGVudGlhbAorCXN0b3JlZCBmb3IgYGh0dHBzOi8vZXhhbXBsZS5jb20vZm9vLmdpdGAgd2lsbCBhbHNvIGJlIHVzZWQgZm9yCisJYGh0dHBzOi8vZXhhbXBsZS5jb20vYmFyLmdpdGAuIElmIHlvdSBkbyB3YW50IHRvIGRpc3Rpbmd1aXNoIHRoZXNlCisJY2FzZXMsIHNldCB0aGlzIG9wdGlvbiB0byBgdHJ1ZWAuCisKKworQ1VTVE9NIEhFTFBFUlMKKy0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gd3JpdGUgeW91ciBvd24gY3VzdG9tIGhlbHBlcnMgdG8gaW50ZXJmYWNlIHdpdGggYW55IHN5c3RlbSBpbgord2hpY2ggeW91IGtlZXAgY3JlZGVudGlhbHMuCisKK0NyZWRlbnRpYWwgaGVscGVycyBhcmUgcHJvZ3JhbXMgZXhlY3V0ZWQgYnkgR2l0IHRvIGZldGNoIG9yIHNhdmUKK2NyZWRlbnRpYWxzIGZyb20gYW5kIHRvIGxvbmctdGVybSBzdG9yYWdlICh3aGVyZSAibG9uZy10ZXJtIiBpcyBzaW1wbHkKK2xvbmdlciB0aGFuIGEgc2luZ2xlIEdpdCBwcm9jZXNzOyBlLmcuLCBjcmVkZW50aWFscyBtYXkgYmUgc3RvcmVkCitpbi1tZW1vcnkgZm9yIGEgZmV3IG1pbnV0ZXMsIG9yIGluZGVmaW5pdGVseSBvbiBkaXNrKS4KKworRWFjaCBoZWxwZXIgaXMgc3BlY2lmaWVkIGJ5IGEgc2luZ2xlIHN0cmluZyBpbiB0aGUgY29uZmlndXJhdGlvbgordmFyaWFibGUgYGNyZWRlbnRpYWwuaGVscGVyYCAoYW5kIG90aGVycywgc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCitUaGUgc3RyaW5nIGlzIHRyYW5zZm9ybWVkIGJ5IEdpdCBpbnRvIGEgY29tbWFuZCB0byBiZSBleGVjdXRlZCB1c2luZwordGhlc2UgcnVsZXM6CisKKyAgMS4gSWYgdGhlIGhlbHBlciBzdHJpbmcgYmVnaW5zIHdpdGggIiEiLCBpdCBpcyBjb25zaWRlcmVkIGEgc2hlbGwKKyAgICAgc25pcHBldCwgYW5kIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlICIhIiBiZWNvbWVzIHRoZSBjb21tYW5kLgorCisgIDIuIE90aGVyd2lzZSwgaWYgdGhlIGhlbHBlciBzdHJpbmcgYmVnaW5zIHdpdGggYW4gYWJzb2x1dGUgcGF0aCwgdGhlCisgICAgIHZlcmJhdGltIGhlbHBlciBzdHJpbmcgYmVjb21lcyB0aGUgY29tbWFuZC4KKworICAzLiBPdGhlcndpc2UsIHRoZSBzdHJpbmcgImdpdCBjcmVkZW50aWFsLSIgaXMgcHJlcGVuZGVkIHRvIHRoZSBoZWxwZXIKKyAgICAgc3RyaW5nLCBhbmQgdGhlIHJlc3VsdCBiZWNvbWVzIHRoZSBjb21tYW5kLgorCitUaGUgcmVzdWx0aW5nIGNvbW1hbmQgdGhlbiBoYXMgYW4gIm9wZXJhdGlvbiIgYXJndW1lbnQgYXBwZW5kZWQgdG8gaXQKKyhzZWUgYmVsb3cgZm9yIGRldGFpbHMpLCBhbmQgdGhlIHJlc3VsdCBpcyBleGVjdXRlZCBieSB0aGUgc2hlbGwuCisKK0hlcmUgYXJlIHNvbWUgZXhhbXBsZSBzcGVjaWZpY2F0aW9uczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBydW4gImdpdCBjcmVkZW50aWFsLWZvbyIKK1tjcmVkZW50aWFsXQorCWhlbHBlciA9IGZvbworCisjIHNhbWUgYXMgYWJvdmUsIGJ1dCBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSBoZWxwZXIKK1tjcmVkZW50aWFsXQorCWhlbHBlciA9ICJmb28gLS1iYXI9YmF6IgorCisjIHRoZSBhcmd1bWVudHMgYXJlIHBhcnNlZCBieSB0aGUgc2hlbGwsIHNvIHVzZSBzaGVsbAorIyBxdW90aW5nIGlmIG5lY2Vzc2FyeQorW2NyZWRlbnRpYWxdCisJaGVscGVyID0gImZvbyAtLWJhcj0nd2hpdGVzcGFjZSBhcmcnIgorCisjIHlvdSBjYW4gYWxzbyB1c2UgYW4gYWJzb2x1dGUgcGF0aCwgd2hpY2ggd2lsbCBub3QgdXNlIHRoZSBnaXQgd3JhcHBlcgorW2NyZWRlbnRpYWxdCisJaGVscGVyID0gIi9wYXRoL3RvL215L2hlbHBlciAtLXdpdGgtYXJndW1lbnRzIgorCisjIG9yIHlvdSBjYW4gc3BlY2lmeSB5b3VyIG93biBzaGVsbCBzbmlwcGV0CitbY3JlZGVudGlhbCAiaHR0cHM6Ly9leGFtcGxlLmNvbSJdCisJdXNlcm5hbWUgPSB5b3VyX3VzZXIKKwloZWxwZXIgPSAiIWYoKSB7IHRlc3QgXCIkMVwiID0gZ2V0ICYmIGVjaG8gXCJwYXNzd29yZD0kKGNhdCAkSE9NRS8uc2VjcmV0KVwiOyB9OyBmIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHZW5lcmFsbHkgc3BlYWtpbmcsIHJ1bGUgKDMpIGFib3ZlIGlzIHRoZSBzaW1wbGVzdCBmb3IgdXNlcnMgdG8gc3BlY2lmeS4KK0F1dGhvcnMgb2YgY3JlZGVudGlhbCBoZWxwZXJzIHNob3VsZCBtYWtlIGFuIGVmZm9ydCB0byBhc3Npc3QgdGhlaXIKK3VzZXJzIGJ5IG5hbWluZyB0aGVpciBwcm9ncmFtICJnaXQtY3JlZGVudGlhbC0kTkFNRSIsIGFuZCBwdXR0aW5nIGl0IGluCit0aGUgYCRQQVRIYCBvciBgJEdJVF9FWEVDX1BBVEhgIGR1cmluZyBpbnN0YWxsYXRpb24sIHdoaWNoIHdpbGwgYWxsb3cgYQordXNlciB0byBlbmFibGUgaXQgd2l0aCBgZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAkTkFNRWAuCisKK1doZW4gYSBoZWxwZXIgaXMgZXhlY3V0ZWQsIGl0IHdpbGwgaGF2ZSBvbmUgIm9wZXJhdGlvbiIgYXJndW1lbnQKK2FwcGVuZGVkIHRvIGl0cyBjb21tYW5kIGxpbmUsIHdoaWNoIGlzIG9uZSBvZjoKKworYGdldGA6OgorCisJUmV0dXJuIGEgbWF0Y2hpbmcgY3JlZGVudGlhbCwgaWYgYW55IGV4aXN0cy4KKworYHN0b3JlYDo6CisKKwlTdG9yZSB0aGUgY3JlZGVudGlhbCwgaWYgYXBwbGljYWJsZSB0byB0aGUgaGVscGVyLgorCitgZXJhc2VgOjoKKworCVJlbW92ZSBhIG1hdGNoaW5nIGNyZWRlbnRpYWwsIGlmIGFueSwgZnJvbSB0aGUgaGVscGVyJ3Mgc3RvcmFnZS4KKworVGhlIGRldGFpbHMgb2YgdGhlIGNyZWRlbnRpYWwgd2lsbCBiZSBwcm92aWRlZCBvbiB0aGUgaGVscGVyJ3Mgc3RkaW4KK3N0cmVhbS4gVGhlIGV4YWN0IGZvcm1hdCBpcyB0aGUgc2FtZSBhcyB0aGUgaW5wdXQvb3V0cHV0IGZvcm1hdCBvZiB0aGUKK2BnaXQgY3JlZGVudGlhbGAgcGx1bWJpbmcgY29tbWFuZCAoc2VlIHRoZSBzZWN0aW9uIGBJTlBVVC9PVVRQVVQKK0ZPUk1BVGAgaW4gbGlua2dpdDpnaXQtY3JlZGVudGlhbFsxXSBmb3IgYSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uKS4KKworRm9yIGEgYGdldGAgb3BlcmF0aW9uLCB0aGUgaGVscGVyIHNob3VsZCBwcm9kdWNlIGEgbGlzdCBvZiBhdHRyaWJ1dGVzIG9uCitzdGRvdXQgaW4gdGhlIHNhbWUgZm9ybWF0IChzZWUgbGlua2dpdDpnaXQtY3JlZGVudGlhbFsxXSBmb3IgY29tbW9uCithdHRyaWJ1dGVzKS4gQSBoZWxwZXIgaXMgZnJlZSB0byBwcm9kdWNlIGEgc3Vic2V0LCBvciBldmVuIG5vIHZhbHVlcyBhdAorYWxsIGlmIGl0IGhhcyBub3RoaW5nIHVzZWZ1bCB0byBwcm92aWRlLiBBbnkgcHJvdmlkZWQgYXR0cmlidXRlcyB3aWxsCitvdmVyd3JpdGUgdGhvc2UgYWxyZWFkeSBrbm93biBhYm91dCBieSBHaXQncyBjcmVkZW50aWFsIHN1YnN5c3RlbS4KKworV2hpbGUgaXQgaXMgcG9zc2libGUgdG8gb3ZlcnJpZGUgYWxsIGF0dHJpYnV0ZXMsIHdlbGwgYmVoYXZpbmcgaGVscGVycworc2hvdWxkIHJlZnJhaW4gZnJvbSBkb2luZyBzbyBmb3IgYW55IGF0dHJpYnV0ZSBvdGhlciB0aGFuIHVzZXJuYW1lIGFuZAorcGFzc3dvcmQuCisKK0lmIGEgaGVscGVyIG91dHB1dHMgYSBgcXVpdGAgYXR0cmlidXRlIHdpdGggYSB2YWx1ZSBvZiBgdHJ1ZWAgb3IgYDFgLAorbm8gZnVydGhlciBoZWxwZXJzIHdpbGwgYmUgY29uc3VsdGVkLCBub3Igd2lsbCB0aGUgdXNlciBiZSBwcm9tcHRlZAorKGlmIG5vIGNyZWRlbnRpYWwgaGFzIGJlZW4gcHJvdmlkZWQsIHRoZSBvcGVyYXRpb24gd2lsbCB0aGVuIGZhaWwpLgorCitTaW1pbGFybHksIG5vIG1vcmUgaGVscGVycyB3aWxsIGJlIGNvbnN1bHRlZCBvbmNlIGJvdGggdXNlcm5hbWUgYW5kCitwYXNzd29yZCBoYWQgYmVlbiBwcm92aWRlZC4KKworRm9yIGEgYHN0b3JlYCBvciBgZXJhc2VgIG9wZXJhdGlvbiwgdGhlIGhlbHBlcidzIG91dHB1dCBpcyBpZ25vcmVkLgorCitJZiBhIGhlbHBlciBmYWlscyB0byBwZXJmb3JtIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIG9yIG5lZWRzIHRvIG5vdGlmeQordGhlIHVzZXIgb2YgYSBwb3RlbnRpYWwgaXNzdWUsIGl0IG1heSB3cml0ZSB0byBzdGRlcnIuCisKK0lmIGl0IGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gKGUuZy4sIGEgcmVhZC1vbmx5IHN0b3JlKSwKK2l0IHNob3VsZCBzaWxlbnRseSBpZ25vcmUgdGhlIHJlcXVlc3QuCisKK0lmIGEgaGVscGVyIHJlY2VpdmVzIGFueSBvdGhlciBvcGVyYXRpb24sIGl0IHNob3VsZCBzaWxlbnRseSBpZ25vcmUgdGhlCityZXF1ZXN0LiBUaGlzIGxlYXZlcyByb29tIGZvciBmdXR1cmUgb3BlcmF0aW9ucyB0byBiZSBhZGRlZCAob2xkZXIKK2hlbHBlcnMgd2lsbCBqdXN0IGlnbm9yZSB0aGUgbmV3IHJlcXVlc3RzKS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGN2cy1taWdyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9naXRjdnMtbWlncmF0aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2QxMjgzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRjdnMtbWlncmF0aW9uLnR4dApAQCAtMCwwICsxLDIwNiBAQAorZ2l0Y3ZzLW1pZ3JhdGlvbig3KQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRjdnMtbWlncmF0aW9uIC0gR2l0IGZvciBDVlMgdXNlcnMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGN2c2ltcG9ydCcgKgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworR2l0IGRpZmZlcnMgZnJvbSBDVlMgaW4gdGhhdCBldmVyeSB3b3JraW5nIHRyZWUgY29udGFpbnMgYSByZXBvc2l0b3J5IHdpdGgKK2EgZnVsbCBjb3B5IG9mIHRoZSBwcm9qZWN0IGhpc3RvcnksIGFuZCBubyByZXBvc2l0b3J5IGlzIGluaGVyZW50bHkgbW9yZQoraW1wb3J0YW50IHRoYW4gYW55IG90aGVyLiAgSG93ZXZlciwgeW91IGNhbiBlbXVsYXRlIHRoZSBDVlMgbW9kZWwgYnkKK2Rlc2lnbmF0aW5nIGEgc2luZ2xlIHNoYXJlZCByZXBvc2l0b3J5IHdoaWNoIHBlb3BsZSBjYW4gc3luY2hyb25pemUgd2l0aDsKK3RoaXMgZG9jdW1lbnQgZXhwbGFpbnMgaG93IHRvIGRvIHRoYXQuCisKK1NvbWUgYmFzaWMgZmFtaWxpYXJpdHkgd2l0aCBHaXQgaXMgcmVxdWlyZWQuIEhhdmluZyBnb25lIHRocm91Z2gKK2xpbmtnaXQ6Z2l0dHV0b3JpYWxbN10gYW5kCitsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddIHNob3VsZCBiZSBzdWZmaWNpZW50LgorCitEZXZlbG9waW5nIGFnYWluc3QgYSBzaGFyZWQgcmVwb3NpdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9zZSBhIHNoYXJlZCByZXBvc2l0b3J5IGlzIHNldCB1cCBpbiAvcHViL3JlcG8uZ2l0IG9uIHRoZSBob3N0Citmb28uY29tLiAgVGhlbiBhcyBhbiBpbmRpdmlkdWFsIGNvbW1pdHRlciB5b3UgY2FuIGNsb25lIHRoZSBzaGFyZWQKK3JlcG9zaXRvcnkgb3ZlciBzc2ggd2l0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjbG9uZSBmb28uY29tOi9wdWIvcmVwby5naXQvIG15LXByb2plY3QKKyQgY2QgbXktcHJvamVjdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCBoYWNrIGF3YXkuICBUaGUgZXF1aXZhbGVudCBvZiAnY3ZzIHVwZGF0ZScgaXMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsIG9yaWdpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIG1lcmdlcyBpbiBhbnkgd29yayB0aGF0IG90aGVycyBtaWdodCBoYXZlIGRvbmUgc2luY2UgdGhlIGNsb25lCitvcGVyYXRpb24uICBJZiB0aGVyZSBhcmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZSwgY29tbWl0Cit0aGVtIGZpcnN0IGJlZm9yZSBydW5uaW5nIGdpdCBwdWxsLgorCitbTk9URV0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgJ3B1bGwnIGNvbW1hbmQga25vd3Mgd2hlcmUgdG8gZ2V0IHVwZGF0ZXMgZnJvbSBiZWNhdXNlIG9mIGNlcnRhaW4KK2NvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgd2VyZSBzZXQgYnkgdGhlIGZpcnN0ICdnaXQgY2xvbmUnCitjb21tYW5kOyBzZWUgYGdpdCBjb25maWcgLWxgIGFuZCB0aGUgbGlua2dpdDpnaXQtY29uZmlnWzFdIG1hbgorcGFnZSBmb3IgZGV0YWlscy4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSBjYW4gdXBkYXRlIHRoZSBzaGFyZWQgcmVwb3NpdG9yeSB3aXRoIHlvdXIgY2hhbmdlcyBieSBmaXJzdCBjb21taXR0aW5nCit5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHVzaW5nIHRoZSAnZ2l0IHB1c2gnIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVzaCBvcmlnaW4gbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gInB1c2giIHRob3NlIGNvbW1pdHMgdG8gdGhlIHNoYXJlZCByZXBvc2l0b3J5LiAgSWYgc29tZW9uZSBlbHNlIGhhcwordXBkYXRlZCB0aGUgcmVwb3NpdG9yeSBtb3JlIHJlY2VudGx5LCAnZ2l0IHB1c2gnLCBsaWtlICdjdnMgY29tbWl0Jywgd2lsbAorY29tcGxhaW4sIGluIHdoaWNoIGNhc2UgeW91IG11c3QgcHVsbCBhbnkgY2hhbmdlcyBiZWZvcmUgYXR0ZW1wdGluZyB0aGUKK3B1c2ggYWdhaW4uCisKK0luIHRoZSAnZ2l0IHB1c2gnIGNvbW1hbmQgYWJvdmUgd2Ugc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGJyYW5jaAordG8gdXBkYXRlIChgbWFzdGVyYCkuICBJZiB3ZSBsZWF2ZSB0aGF0IG91dCwgJ2dpdCBwdXNoJyB0cmllcyB0byB1cGRhdGUKK2FueSBicmFuY2hlcyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgYSBicmFuY2gKK2luIHRoZSBsb2NhbCByZXBvc2l0b3J5LiAgU28gdGhlIGxhc3QgJ3B1c2gnIGNhbiBiZSBkb25lIHdpdGggZWl0aGVyIG9mOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggb3JpZ2luCiskIGdpdCBwdXNoIGZvby5jb206L3B1Yi9wcm9qZWN0LmdpdC8KKy0tLS0tLS0tLS0tLQorCithcyBsb25nIGFzIHRoZSBzaGFyZWQgcmVwb3NpdG9yeSBkb2VzIG5vdCBoYXZlIGFueSBicmFuY2hlcworb3RoZXIgdGhhbiBgbWFzdGVyYC4KKworU2V0dGluZyBVcCBhIFNoYXJlZCBSZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2UgYXNzdW1lIHlvdSBoYXZlIGFscmVhZHkgY3JlYXRlZCBhIEdpdCByZXBvc2l0b3J5IGZvciB5b3VyIHByb2plY3QsCitwb3NzaWJseSBjcmVhdGVkIGZyb20gc2NyYXRjaCBvciBmcm9tIGEgdGFyYmFsbCAoc2VlCitsaW5rZ2l0OmdpdHR1dG9yaWFsWzddKSwgb3IgaW1wb3J0ZWQgZnJvbSBhbiBhbHJlYWR5IGV4aXN0aW5nIENWUworcmVwb3NpdG9yeSAoc2VlIHRoZSBuZXh0IHNlY3Rpb24pLgorCitBc3N1bWUgeW91ciBleGlzdGluZyByZXBvIGlzIGF0IC9ob21lL2FsaWNlL215cHJvamVjdC4gIENyZWF0ZSBhIG5ldyAiYmFyZSIKK3JlcG9zaXRvcnkgKGEgcmVwb3NpdG9yeSB3aXRob3V0IGEgd29ya2luZyB0cmVlKSBhbmQgZmV0Y2ggeW91ciBwcm9qZWN0IGludG8KK2l0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgbWtkaXIgL3B1Yi9teS1yZXBvLmdpdAorJCBjZCAvcHViL215LXJlcG8uZ2l0CiskIGdpdCAtLWJhcmUgaW5pdCAtLXNoYXJlZAorJCBnaXQgLS1iYXJlIGZldGNoIC9ob21lL2FsaWNlL215cHJvamVjdCBtYXN0ZXI6bWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTmV4dCwgZ2l2ZSBldmVyeSB0ZWFtIG1lbWJlciByZWFkL3dyaXRlIGFjY2VzcyB0byB0aGlzIHJlcG9zaXRvcnkuICBPbmUKK2Vhc3kgd2F5IHRvIGRvIHRoaXMgaXMgdG8gZ2l2ZSBhbGwgdGhlIHRlYW0gbWVtYmVycyBzc2ggYWNjZXNzIHRvIHRoZQorbWFjaGluZSB3aGVyZSB0aGUgcmVwb3NpdG9yeSBpcyBob3N0ZWQuICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBnaXZlIHRoZW0gYQorZnVsbCBzaGVsbCBvbiB0aGUgbWFjaGluZSwgdGhlcmUgaXMgYSByZXN0cmljdGVkIHNoZWxsIHdoaWNoIG9ubHkgYWxsb3dzCit1c2VycyB0byBkbyBHaXQgcHVzaGVzIGFuZCBwdWxsczsgc2VlIGxpbmtnaXQ6Z2l0LXNoZWxsWzFdLgorCitQdXQgYWxsIHRoZSBjb21taXR0ZXJzIGluIHRoZSBzYW1lIGdyb3VwLCBhbmQgbWFrZSB0aGUgcmVwb3NpdG9yeQord3JpdGFibGUgYnkgdGhhdCBncm91cDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNoZ3JwIC1SICRncm91cCAvcHViL215LXJlcG8uZ2l0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFrZSBzdXJlIGNvbW1pdHRlcnMgaGF2ZSBhIHVtYXNrIG9mIGF0IG1vc3QgMDI3LCBzbyB0aGF0IHRoZSBkaXJlY3RvcmllcwordGhleSBjcmVhdGUgYXJlIHdyaXRhYmxlIGFuZCBzZWFyY2hhYmxlIGJ5IG90aGVyIGdyb3VwIG1lbWJlcnMuCisKK0ltcG9ydGluZyBhIENWUyBhcmNoaXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOT1RFOiBUaGVzZSBpbnN0cnVjdGlvbnMgdXNlIHRoZSBgZ2l0LWN2c2ltcG9ydGAgc2NyaXB0IHdoaWNoIHNoaXBzIHdpdGgKK2dpdCwgYnV0IG90aGVyIGltcG9ydGVycyBtYXkgcHJvdmlkZSBiZXR0ZXIgcmVzdWx0cy4gU2VlIHRoZSBub3RlIGluCitsaW5rZ2l0OmdpdC1jdnNpbXBvcnRbMV0gZm9yIG90aGVyIG9wdGlvbnMuCisKK0ZpcnN0LCBpbnN0YWxsIHZlcnNpb24gMi4xIG9yIGhpZ2hlciBvZiBjdnNwcyBmcm9tCitodHRwczovL2dpdGh1Yi5jb20vYW5kcmV5dml0L2N2c3BzW2h0dHBzOi8vZ2l0aHViLmNvbS9hbmRyZXl2aXQvY3ZzcHNdIGFuZCBtYWtlCitzdXJlIGl0IGlzIGluIHlvdXIgcGF0aC4gIFRoZW4gY2QgdG8gYSBjaGVja2VkIG91dCBDVlMgd29ya2luZyBkaXJlY3RvcnkKK29mIHRoZSBwcm9qZWN0IHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBhbmQgcnVuIGxpbmtnaXQ6Z2l0LWN2c2ltcG9ydFsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY3ZzaW1wb3J0IC1DIDxkZXN0aW5hdGlvbj4gPG1vZHVsZT4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBwdXRzIGEgR2l0IGFyY2hpdmUgb2YgdGhlIG5hbWVkIENWUyBtb2R1bGUgaW4gdGhlIGRpcmVjdG9yeQorPGRlc3RpbmF0aW9uPiwgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIGlmIG5lY2Vzc2FyeS4KKworVGhlIGltcG9ydCBjaGVja3Mgb3V0IGZyb20gQ1ZTIGV2ZXJ5IHJldmlzaW9uIG9mIGV2ZXJ5IGZpbGUuICBSZXBvcnRlZGx5CitjdnNpbXBvcnQgY2FuIGF2ZXJhZ2Ugc29tZSB0d2VudHkgcmV2aXNpb25zIHBlciBzZWNvbmQsIHNvIGZvciBhCittZWRpdW0tc2l6ZWQgcHJvamVjdCB0aGlzIHNob3VsZCBub3QgdGFrZSBtb3JlIHRoYW4gYSBjb3VwbGUgb2YgbWludXRlcy4KK0xhcmdlciBwcm9qZWN0cyBvciByZW1vdGUgcmVwb3NpdG9yaWVzIG1heSB0YWtlIGxvbmdlci4KKworVGhlIG1haW4gdHJ1bmsgaXMgc3RvcmVkIGluIHRoZSBHaXQgYnJhbmNoIG5hbWVkIGBvcmlnaW5gLCBhbmQgYWRkaXRpb25hbAorQ1ZTIGJyYW5jaGVzIGFyZSBzdG9yZWQgaW4gR2l0IGJyYW5jaGVzIHdpdGggdGhlIHNhbWUgbmFtZXMuICBUaGUgbW9zdAorcmVjZW50IHZlcnNpb24gb2YgdGhlIG1haW4gdHJ1bmsgaXMgYWxzbyBsZWZ0IGNoZWNrZWQgb3V0IG9uIHRoZSBgbWFzdGVyYAorYnJhbmNoLCBzbyB5b3UgY2FuIHN0YXJ0IGFkZGluZyB5b3VyIG93biBjaGFuZ2VzIHJpZ2h0IGF3YXkuCisKK1RoZSBpbXBvcnQgaXMgaW5jcmVtZW50YWwsIHNvIGlmIHlvdSBjYWxsIGl0IGFnYWluIG5leHQgbW9udGggaXQgd2lsbAorZmV0Y2ggYW55IENWUyB1cGRhdGVzIHRoYXQgaGF2ZSBiZWVuIG1hZGUgaW4gdGhlIG1lYW50aW1lLiAgRm9yIHRoaXMgdG8KK3dvcmssIHlvdSBtdXN0IG5vdCBtb2RpZnkgdGhlIGltcG9ydGVkIGJyYW5jaGVzOyBpbnN0ZWFkLCBjcmVhdGUgbmV3CiticmFuY2hlcyBmb3IgeW91ciBvd24gY2hhbmdlcywgYW5kIG1lcmdlIGluIHRoZSBpbXBvcnRlZCBicmFuY2hlcyBhcworbmVjZXNzYXJ5LgorCitJZiB5b3Ugd2FudCBhIHNoYXJlZCByZXBvc2l0b3J5LCB5b3Ugd2lsbCBuZWVkIHRvIG1ha2UgYSBiYXJlIGNsb25lCitvZiB0aGUgaW1wb3J0ZWQgZGlyZWN0b3J5LCBhcyBkZXNjcmliZWQgYWJvdmUuIFRoZW4gdHJlYXQgdGhlIGltcG9ydGVkCitkaXJlY3RvcnkgYXMgYW5vdGhlciBkZXZlbG9wbWVudCBjbG9uZSBmb3IgcHVycG9zZXMgb2YgbWVyZ2luZworaW5jcmVtZW50YWwgaW1wb3J0cy4KKworQWR2YW5jZWQgU2hhcmVkIFJlcG9zaXRvcnkgTWFuYWdlbWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHNjcmlwdHMgY2FsbGVkICJob29rcyIgdG8gYmUgcnVuIGF0IGNlcnRhaW4KK3BvaW50cy4gIFlvdSBjYW4gdXNlIHRoZXNlLCBmb3IgZXhhbXBsZSwgdG8gc2VuZCBhbGwgY29tbWl0cyB0byB0aGUgc2hhcmVkCityZXBvc2l0b3J5IHRvIGEgbWFpbGluZyBsaXN0LiAgU2VlIGxpbmtnaXQ6Z2l0aG9va3NbNV0uCisKK1lvdSBjYW4gZW5mb3JjZSBmaW5lciBncmFpbmVkIHBlcm1pc3Npb25zIHVzaW5nIHVwZGF0ZSBob29rcy4gIFNlZQorbGluazpob3d0by91cGRhdGUtaG9vay1leGFtcGxlLmh0bWxbQ29udHJvbGxpbmcgYWNjZXNzIHRvIGJyYW5jaGVzIHVzaW5nCit1cGRhdGUgaG9va3NdLgorCitQcm92aWRpbmcgQ1ZTIEFjY2VzcyB0byBhIEdpdCBSZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gcHJvdmlkZSB0cnVlIENWUyBhY2Nlc3MgdG8gYSBHaXQgcmVwb3NpdG9yeSwgc28KK3RoYXQgZGV2ZWxvcGVycyBjYW4gc3RpbGwgdXNlIENWUzsgc2VlIGxpbmtnaXQ6Z2l0LWN2c3NlcnZlclsxXSBmb3IKK2RldGFpbHMuCisKK0FsdGVybmF0aXZlIERldmVsb3BtZW50IE1vZGVscworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NWUyB1c2VycyBhcmUgYWNjdXN0b21lZCB0byBnaXZpbmcgYSBncm91cCBvZiBkZXZlbG9wZXJzIGNvbW1pdCBhY2Nlc3MgdG8KK2EgY29tbW9uIHJlcG9zaXRvcnkuICBBcyB3ZSd2ZSBzZWVuLCB0aGlzIGlzIGFsc28gcG9zc2libGUgd2l0aCBHaXQuCitIb3dldmVyLCB0aGUgZGlzdHJpYnV0ZWQgbmF0dXJlIG9mIEdpdCBhbGxvd3Mgb3RoZXIgZGV2ZWxvcG1lbnQgbW9kZWxzLAorYW5kIHlvdSBtYXkgd2FudCB0byBmaXJzdCBjb25zaWRlciB3aGV0aGVyIG9uZSBvZiB0aGVtIG1pZ2h0IGJlIGEgYmV0dGVyCitmaXQgZm9yIHlvdXIgcHJvamVjdC4KKworRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2hvb3NlIGEgc2luZ2xlIHBlcnNvbiB0byBtYWludGFpbiB0aGUgcHJvamVjdCdzCitwcmltYXJ5IHB1YmxpYyByZXBvc2l0b3J5LiAgT3RoZXIgZGV2ZWxvcGVycyB0aGVuIGNsb25lIHRoaXMgcmVwb3NpdG9yeQorYW5kIGVhY2ggd29yayBpbiB0aGVpciBvd24gY2xvbmUuICBXaGVuIHRoZXkgaGF2ZSBhIHNlcmllcyBvZiBjaGFuZ2VzIHRoYXQKK3RoZXkncmUgaGFwcHkgd2l0aCwgdGhleSBhc2sgdGhlIG1haW50YWluZXIgdG8gcHVsbCBmcm9tIHRoZSBicmFuY2gKK2NvbnRhaW5pbmcgdGhlIGNoYW5nZXMuICBUaGUgbWFpbnRhaW5lciByZXZpZXdzIHRoZWlyIGNoYW5nZXMgYW5kIHB1bGxzCit0aGVtIGludG8gdGhlIHByaW1hcnkgcmVwb3NpdG9yeSwgd2hpY2ggb3RoZXIgZGV2ZWxvcGVycyBwdWxsIGZyb20gYXMKK25lY2Vzc2FyeSB0byBzdGF5IGNvb3JkaW5hdGVkLiAgVGhlIExpbnV4IGtlcm5lbCBhbmQgb3RoZXIgcHJvamVjdHMgdXNlCit2YXJpYW50cyBvZiB0aGlzIG1vZGVsLgorCitXaXRoIGEgc21hbGwgZ3JvdXAsIGRldmVsb3BlcnMgbWF5IGp1c3QgcHVsbCBjaGFuZ2VzIGZyb20gZWFjaCBvdGhlcidzCityZXBvc2l0b3JpZXMgd2l0aG91dCB0aGUgbmVlZCBmb3IgYSBjZW50cmFsIG1haW50YWluZXIuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0dHV0b3JpYWwtMls3XSwKK2xpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10sCitsaW5rZ2l0OmdpdGV2ZXJ5ZGF5WzddLAorbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGRpZmZjb3JlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0ZGlmZmNvcmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzBkOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGRpZmZjb3JlLnR4dApAQCAtMCwwICsxLDI5MiBAQAorZ2l0ZGlmZmNvcmUoNykKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdGRpZmZjb3JlIC0gVHdlYWtpbmcgZGlmZiBvdXRwdXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGRpZmYnICoKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoZSBkaWZmIGNvbW1hbmRzICdnaXQgZGlmZi1pbmRleCcsICdnaXQgZGlmZi1maWxlcycsIGFuZCAnZ2l0IGRpZmYtdHJlZScKK2NhbiBiZSB0b2xkIHRvIG1hbmlwdWxhdGUgZGlmZmVyZW5jZXMgdGhleSBmaW5kIGluCit1bmNvbnZlbnRpb25hbCB3YXlzIGJlZm9yZSBzaG93aW5nICdkaWZmJyBvdXRwdXQuICBUaGUgbWFuaXB1bGF0aW9uCitpcyBjb2xsZWN0aXZlbHkgY2FsbGVkICJkaWZmY29yZSB0cmFuc2Zvcm1hdGlvbiIuICBUaGlzIHNob3J0IG5vdGUKK2Rlc2NyaWJlcyB3aGF0IHRoZXkgYXJlIGFuZCBob3cgdG8gdXNlIHRoZW0gdG8gcHJvZHVjZSAnZGlmZicgb3V0cHV0Cit0aGF0IGlzIGVhc2llciB0byB1bmRlcnN0YW5kIHRoYW4gdGhlIGNvbnZlbnRpb25hbCBraW5kLgorCisKK1RoZSBjaGFpbiBvZiBvcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICdnaXQgZGlmZi17YXN0ZXJpc2t9JyBmYW1pbHkgd29ya3MgYnkgZmlyc3QgY29tcGFyaW5nIHR3byBzZXRzIG9mCitmaWxlczoKKworIC0gJ2dpdCBkaWZmLWluZGV4JyBjb21wYXJlcyBjb250ZW50cyBvZiBhICJ0cmVlIiBvYmplY3QgYW5kIHRoZQorICAgd29ya2luZyBkaXJlY3RvcnkgKHdoZW4gYC0tY2FjaGVkYCBmbGFnIGlzIG5vdCB1c2VkKSBvciBhCisgICAidHJlZSIgb2JqZWN0IGFuZCB0aGUgaW5kZXggZmlsZSAod2hlbiBgLS1jYWNoZWRgIGZsYWcgaXMKKyAgIHVzZWQpOworCisgLSAnZ2l0IGRpZmYtZmlsZXMnIGNvbXBhcmVzIGNvbnRlbnRzIG9mIHRoZSBpbmRleCBmaWxlIGFuZCB0aGUKKyAgIHdvcmtpbmcgZGlyZWN0b3J5OworCisgLSAnZ2l0IGRpZmYtdHJlZScgY29tcGFyZXMgY29udGVudHMgb2YgdHdvICJ0cmVlIiBvYmplY3RzOworCitJbiBhbGwgb2YgdGhlc2UgY2FzZXMsIHRoZSBjb21tYW5kcyB0aGVtc2VsdmVzIGZpcnN0IG9wdGlvbmFsbHkgbGltaXQKK3RoZSB0d28gc2V0cyBvZiBmaWxlcyBieSBhbnkgcGF0aHNwZWNzIGdpdmVuIG9uIHRoZWlyIGNvbW1hbmQtbGluZXMsCithbmQgY29tcGFyZSBjb3JyZXNwb25kaW5nIHBhdGhzIGluIHRoZSB0d28gcmVzdWx0aW5nIHNldHMgb2YgZmlsZXMuCisKK1RoZSBwYXRoc3BlY3MgYXJlIHVzZWQgdG8gbGltaXQgdGhlIHdvcmxkIGRpZmYgb3BlcmF0ZXMgaW4uICBUaGV5IHJlbW92ZQordGhlIGZpbGVwYWlycyBvdXRzaWRlIHRoZSBzcGVjaWZpZWQgc2V0cyBvZiBwYXRobmFtZXMuICBFLmcuIElmIHRoZQoraW5wdXQgc2V0IG9mIGZpbGVwYWlycyBpbmNsdWRlZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis6MTAwNjQ0IDEwMDY0NCBiY2QxMjM0Li4uIDAxMjM0NTYuLi4gTSBqdW5rZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2J1dCB0aGUgY29tbWFuZCBpbnZvY2F0aW9uIHdhcyBgZ2l0IGRpZmYtZmlsZXMgbXlmaWxlYCwgdGhlbiB0aGUKK2p1bmtmaWxlIGVudHJ5IHdvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBiZWNhdXNlIG9ubHkgIm15ZmlsZSIKK2lzIHVuZGVyIGNvbnNpZGVyYXRpb24uCisKK1RoZSByZXN1bHQgb2YgY29tcGFyaXNvbiBpcyBwYXNzZWQgZnJvbSB0aGVzZSBjb21tYW5kcyB0byB3aGF0IGlzCitpbnRlcm5hbGx5IGNhbGxlZCAiZGlmZmNvcmUiLCBpbiBhIGZvcm1hdCBzaW1pbGFyIHRvIHdoYXQgaXMgb3V0cHV0Cit3aGVuIHRoZSAtcCBvcHRpb24gaXMgbm90IHVzZWQuICBFLmcuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW4tcGxhY2UgZWRpdCAgOjEwMDY0NCAxMDA2NDQgYmNkMTIzNC4uLiAwMTIzNDU2Li4uIE0gZmlsZTAKK2NyZWF0ZSAgICAgICAgIDowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMTIzNDU2Ny4uLiBBIGZpbGU0CitkZWxldGUgICAgICAgICA6MTAwNjQ0IDAwMDAwMCAxMjM0NTY3Li4uIDAwMDAwMDAuLi4gRCBmaWxlNQordW5tZXJnZWQgICAgICAgOjAwMDAwMCAwMDAwMDAgMDAwMDAwMC4uLiAwMDAwMDAwLi4uIFUgZmlsZTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGlmZmNvcmUgbWVjaGFuaXNtIGlzIGZlZCBhIGxpc3Qgb2Ygc3VjaCBjb21wYXJpc29uIHJlc3VsdHMKKyhlYWNoIG9mIHdoaWNoIGlzIGNhbGxlZCAiZmlsZXBhaXIiLCBhbHRob3VnaCBhdCB0aGlzIHBvaW50IGVhY2gKK29mIHRoZW0gdGFsa3MgYWJvdXQgYSBzaW5nbGUgZmlsZSksIGFuZCB0cmFuc2Zvcm1zIHN1Y2ggYSBsaXN0CitpbnRvIGFub3RoZXIgbGlzdC4gIFRoZXJlIGFyZSBjdXJyZW50bHkgNSBzdWNoIHRyYW5zZm9ybWF0aW9uczoKKworLSBkaWZmY29yZS1icmVhaworLSBkaWZmY29yZS1yZW5hbWUKKy0gZGlmZmNvcmUtbWVyZ2UtYnJva2VuCistIGRpZmZjb3JlLXBpY2theGUKKy0gZGlmZmNvcmUtb3JkZXIKKworVGhlc2UgYXJlIGFwcGxpZWQgaW4gc2VxdWVuY2UuICBUaGUgc2V0IG9mIGZpbGVwYWlycyAnZ2l0IGRpZmYte2FzdGVyaXNrfScKK2NvbW1hbmRzIGZpbmQgYXJlIHVzZWQgYXMgdGhlIGlucHV0IHRvIGRpZmZjb3JlLWJyZWFrLCBhbmQKK3RoZSBvdXRwdXQgZnJvbSBkaWZmY29yZS1icmVhayBpcyB1c2VkIGFzIHRoZSBpbnB1dCB0byB0aGUKK25leHQgdHJhbnNmb3JtYXRpb24uICBUaGUgZmluYWwgcmVzdWx0IGlzIHRoZW4gcGFzc2VkIHRvIHRoZQorb3V0cHV0IHJvdXRpbmUgYW5kIGdlbmVyYXRlcyBlaXRoZXIgZGlmZi1yYXcgZm9ybWF0IChzZWUgT3V0cHV0Citmb3JtYXQgc2VjdGlvbnMgb2YgdGhlIG1hbnVhbCBmb3IgJ2dpdCBkaWZmLXthc3Rlcmlza30nIGNvbW1hbmRzKSBvcgorZGlmZi1wYXRjaCBmb3JtYXQuCisKKworZGlmZmNvcmUtYnJlYWs6IEZvciBTcGxpdHRpbmcgVXAgQ29tcGxldGUgUmV3cml0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzZWNvbmQgdHJhbnNmb3JtYXRpb24gaW4gdGhlIGNoYWluIGlzIGRpZmZjb3JlLWJyZWFrLCBhbmQgaXMKK2NvbnRyb2xsZWQgYnkgdGhlIC1CIG9wdGlvbiB0byB0aGUgJ2dpdCBkaWZmLXthc3Rlcmlza30nIGNvbW1hbmRzLiAgVGhpcyBpcwordXNlZCB0byBkZXRlY3QgYSBmaWxlcGFpciB0aGF0IHJlcHJlc2VudHMgImNvbXBsZXRlIHJld3JpdGUiIGFuZAorYnJlYWsgc3VjaCBmaWxlcGFpciBpbnRvIHR3byBmaWxlcGFpcnMgdGhhdCByZXByZXNlbnQgZGVsZXRlIGFuZAorY3JlYXRlLiAgRS5nLiAgSWYgdGhlIGlucHV0IGNvbnRhaW5lZCB0aGlzIGZpbGVwYWlyOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzoxMDA2NDQgMTAwNjQ0IGJjZDEyMzQuLi4gMDEyMzQ1Ni4uLiBNIGZpbGUwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIGlmIGl0IGRldGVjdHMgdGhhdCB0aGUgZmlsZSAiZmlsZTAiIGlzIGNvbXBsZXRlbHkgcmV3cml0dGVuLAoraXQgY2hhbmdlcyBpdCB0bzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis6MTAwNjQ0IDAwMDAwMCBiY2QxMjM0Li4uIDAwMDAwMDAuLi4gRCBmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiAwMTIzNDU2Li4uIEEgZmlsZTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgdGhlIHB1cnBvc2Ugb2YgYnJlYWtpbmcgYSBmaWxlcGFpciwgZGlmZmNvcmUtYnJlYWsgZXhhbWluZXMKK3RoZSBleHRlbnQgb2YgY2hhbmdlcyBiZXR3ZWVuIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZXMgYmVmb3JlCithbmQgYWZ0ZXIgbW9kaWZpY2F0aW9uIChpLmUuIHRoZSBjb250ZW50cyB0aGF0IGhhdmUgImJjZDEyMzQuLi4iCithbmQgIjAxMjM0NTYuLi4iIGFzIHRoZWlyIFNIQS0xIGNvbnRlbnQgSUQsIGluIHRoZSBhYm92ZQorZXhhbXBsZSkuICBUaGUgYW1vdW50IG9mIGRlbGV0aW9uIG9mIG9yaWdpbmFsIGNvbnRlbnRzIGFuZAoraW5zZXJ0aW9uIG9mIG5ldyBtYXRlcmlhbCBhcmUgYWRkZWQgdG9nZXRoZXIsIGFuZCBpZiBpdCBleGNlZWRzCit0aGUgImJyZWFrIHNjb3JlIiwgdGhlIGZpbGVwYWlyIGlzIGJyb2tlbiBpbnRvIHR3by4gIFRoZSBicmVhaworc2NvcmUgZGVmYXVsdHMgdG8gNTAlIG9mIHRoZSBzaXplIG9mIHRoZSBzbWFsbGVyIG9mIHRoZSBvcmlnaW5hbAorYW5kIHRoZSByZXN1bHQgKGkuZS4gaWYgdGhlIGVkaXQgc2hyaW5rcyB0aGUgZmlsZSwgdGhlIHNpemUgb2YKK3RoZSByZXN1bHQgaXMgdXNlZDsgaWYgdGhlIGVkaXQgbGVuZ3RoZW5zIHRoZSBmaWxlLCB0aGUgc2l6ZSBvZgordGhlIG9yaWdpbmFsIGlzIHVzZWQpLCBhbmQgY2FuIGJlIGN1c3RvbWl6ZWQgYnkgZ2l2aW5nIGEgbnVtYmVyCithZnRlciAiLUIiIG9wdGlvbiAoZS5nLiAiLUI3NSIgdG8gdGVsbCBpdCB0byB1c2UgNzUlKS4KKworCitkaWZmY29yZS1yZW5hbWU6IEZvciBEZXRlY3RpbmcgUmVuYW1lcyBhbmQgQ29waWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdHJhbnNmb3JtYXRpb24gaXMgdXNlZCB0byBkZXRlY3QgcmVuYW1lcyBhbmQgY29waWVzLCBhbmQgaXMKK2NvbnRyb2xsZWQgYnkgdGhlIC1NIG9wdGlvbiAodG8gZGV0ZWN0IHJlbmFtZXMpIGFuZCB0aGUgLUMgb3B0aW9uCisodG8gZGV0ZWN0IGNvcGllcyBhcyB3ZWxsKSB0byB0aGUgJ2dpdCBkaWZmLXthc3Rlcmlza30nIGNvbW1hbmRzLiAgSWYgdGhlCitpbnB1dCBjb250YWluZWQgdGhlc2UgZmlsZXBhaXJzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzoxMDA2NDQgMDAwMDAwIDAxMjM0NTYuLi4gMDAwMDAwMC4uLiBEIGZpbGVYCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAxMjM0NTYuLi4gQSBmaWxlMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB0aGUgY29udGVudHMgb2YgdGhlIGRlbGV0ZWQgZmlsZSBmaWxlWCBpcyBzaW1pbGFyIGVub3VnaCB0bwordGhlIGNvbnRlbnRzIG9mIHRoZSBjcmVhdGVkIGZpbGUgZmlsZTAsIHRoZW4gcmVuYW1lIGRldGVjdGlvbgorbWVyZ2VzIHRoZXNlIGZpbGVwYWlycyBhbmQgY3JlYXRlczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis6MTAwNjQ0IDEwMDY0NCAwMTIzNDU2Li4uIDAxMjM0NTYuLi4gUjEwMCBmaWxlWCBmaWxlMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdGhlICItQyIgb3B0aW9uIGlzIHVzZWQsIHRoZSBvcmlnaW5hbCBjb250ZW50cyBvZiBtb2RpZmllZCBmaWxlcywKK2FuZCBkZWxldGVkIGZpbGVzIChhbmQgYWxzbyB1bm1vZGlmaWVkIGZpbGVzLCBpZiB0aGUKKyItLWZpbmQtY29waWVzLWhhcmRlciIgb3B0aW9uIGlzIHVzZWQpIGFyZSBjb25zaWRlcmVkIGFzIGNhbmRpZGF0ZXMKK29mIHRoZSBzb3VyY2UgZmlsZXMgaW4gcmVuYW1lL2NvcHkgb3BlcmF0aW9uLiAgSWYgdGhlIGlucHV0IHdlcmUgbGlrZQordGhlc2UgZmlsZXBhaXJzLCB0aGF0IHRhbGsgYWJvdXQgYSBtb2RpZmllZCBmaWxlIGZpbGVZIGFuZCBhIG5ld2x5CitjcmVhdGVkIGZpbGUgZmlsZTA6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOjEwMDY0NCAxMDA2NDQgMDEyMzQ1Ni4uLiAxMjM0NTY3Li4uIE0gZmlsZVkKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gYmNkMzQ1Ni4uLiBBIGZpbGUwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGhlIG9yaWdpbmFsIGNvbnRlbnRzIG9mIGZpbGVZIGFuZCB0aGUgcmVzdWx0aW5nIGNvbnRlbnRzIG9mCitmaWxlMCBhcmUgY29tcGFyZWQsIGFuZCBpZiB0aGV5IGFyZSBzaW1pbGFyIGVub3VnaCwgdGhleSBhcmUKK2NoYW5nZWQgdG86CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOjEwMDY0NCAxMDA2NDQgMDEyMzQ1Ni4uLiAxMjM0NTY3Li4uIE0gZmlsZVkKKzoxMDA2NDQgMTAwNjQ0IDAxMjM0NTYuLi4gYmNkMzQ1Ni4uLiBDMTAwIGZpbGVZIGZpbGUwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gYm90aCByZW5hbWUgYW5kIGNvcHkgZGV0ZWN0aW9uLCB0aGUgc2FtZSAiZXh0ZW50IG9mIGNoYW5nZXMiCithbGdvcml0aG0gdXNlZCBpbiBkaWZmY29yZS1icmVhayBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB0d28KK2ZpbGVzIGFyZSAic2ltaWxhciBlbm91Z2giLCBhbmQgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gdXNlCithIHNpbWlsYXJpdHkgc2NvcmUgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQgb2YgNTAlIGJ5IGdpdmluZyBhCitudW1iZXIgYWZ0ZXIgdGhlICItTSIgb3IgIi1DIiBvcHRpb24gKGUuZy4gIi1NOCIgdG8gdGVsbCBpdCB0byB1c2UKKzgvMTAgPSA4MCUpLgorCitOb3RlLiAgV2hlbiB0aGUgIi1DIiBvcHRpb24gaXMgdXNlZCB3aXRoIGAtLWZpbmQtY29waWVzLWhhcmRlcmAKK29wdGlvbiwgJ2dpdCBkaWZmLXthc3Rlcmlza30nIGNvbW1hbmRzIGZlZWQgdW5tb2RpZmllZCBmaWxlcGFpcnMgdG8KK2RpZmZjb3JlIG1lY2hhbmlzbSBhcyB3ZWxsIGFzIG1vZGlmaWVkIG9uZXMuICBUaGlzIGxldHMgdGhlIGNvcHkKK2RldGVjdG9yIGNvbnNpZGVyIHVubW9kaWZpZWQgZmlsZXMgYXMgY29weSBzb3VyY2UgY2FuZGlkYXRlcyBhdAordGhlIGV4cGVuc2Ugb2YgbWFraW5nIGl0IHNsb3dlci4gIFdpdGhvdXQgYC0tZmluZC1jb3BpZXMtaGFyZGVyYCwKKydnaXQgZGlmZi17YXN0ZXJpc2t9JyBjb21tYW5kcyBjYW4gZGV0ZWN0IGNvcGllcyBvbmx5IGlmIHRoZSBmaWxlIHRoYXQgd2FzCitjb3BpZWQgaGFwcGVuZWQgdG8gaGF2ZSBiZWVuIG1vZGlmaWVkIGluIHRoZSBzYW1lIGNoYW5nZXNldC4KKworCitkaWZmY29yZS1tZXJnZS1icm9rZW46IEZvciBQdXR0aW5nIENvbXBsZXRlIFJld3JpdGVzIEJhY2sgVG9nZXRoZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHRyYW5zZm9ybWF0aW9uIGlzIHVzZWQgdG8gbWVyZ2UgZmlsZXBhaXJzIGJyb2tlbiBieQorZGlmZmNvcmUtYnJlYWssIGFuZCBub3QgdHJhbnNmb3JtZWQgaW50byByZW5hbWUvY29weSBieQorZGlmZmNvcmUtcmVuYW1lLCBiYWNrIGludG8gYSBzaW5nbGUgbW9kaWZpY2F0aW9uLiAgVGhpcyBhbHdheXMKK3J1bnMgd2hlbiBkaWZmY29yZS1icmVhayBpcyB1c2VkLgorCitGb3IgdGhlIHB1cnBvc2Ugb2YgbWVyZ2luZyBicm9rZW4gZmlsZXBhaXJzIGJhY2ssIGl0IHVzZXMgYQorZGlmZmVyZW50ICJleHRlbnQgb2YgY2hhbmdlcyIgY29tcHV0YXRpb24gZnJvbSB0aGUgb25lcyB1c2VkIGJ5CitkaWZmY29yZS1icmVhayBhbmQgZGlmZmNvcmUtcmVuYW1lLiAgSXQgY291bnRzIG9ubHkgdGhlIGRlbGV0aW9uCitmcm9tIHRoZSBvcmlnaW5hbCwgYW5kIGRvZXMgbm90IGNvdW50IGluc2VydGlvbi4gIElmIHlvdSByZW1vdmVkCitvbmx5IDEwIGxpbmVzIGZyb20gYSAxMDAtbGluZSBkb2N1bWVudCwgZXZlbiBpZiB5b3UgYWRkZWQgOTEwCituZXcgbGluZXMgdG8gbWFrZSBhIG5ldyAxMDAwLWxpbmUgZG9jdW1lbnQsIHlvdSBkaWQgbm90IGRvIGEKK2NvbXBsZXRlIHJld3JpdGUuICBkaWZmY29yZS1icmVhayBicmVha3Mgc3VjaCBhIGNhc2UgaW4gb3JkZXIgdG8KK2hlbHAgZGlmZmNvcmUtcmVuYW1lIHRvIGNvbnNpZGVyIHN1Y2ggZmlsZXBhaXJzIGFzIGNhbmRpZGF0ZSBvZgorcmVuYW1lL2NvcHkgZGV0ZWN0aW9uLCBidXQgaWYgZmlsZXBhaXJzIGJyb2tlbiB0aGF0IHdheSB3ZXJlIG5vdAorbWF0Y2hlZCB3aXRoIG90aGVyIGZpbGVwYWlycyB0byBjcmVhdGUgcmVuYW1lL2NvcHksIHRoZW4gdGhpcwordHJhbnNmb3JtYXRpb24gbWVyZ2VzIHRoZW0gYmFjayBpbnRvIHRoZSBvcmlnaW5hbAorIm1vZGlmaWNhdGlvbiIuCisKK1RoZSAiZXh0ZW50IG9mIGNoYW5nZXMiIHBhcmFtZXRlciBjYW4gYmUgdHdlYWtlZCBmcm9tIHRoZQorZGVmYXVsdCA4MCUgKHRoYXQgaXMsIHVubGVzcyBtb3JlIHRoYW4gODAlIG9mIHRoZSBvcmlnaW5hbAorbWF0ZXJpYWwgaXMgZGVsZXRlZCwgdGhlIGJyb2tlbiBwYWlycyBhcmUgbWVyZ2VkIGJhY2sgaW50byBhCitzaW5nbGUgbW9kaWZpY2F0aW9uKSBieSBnaXZpbmcgYSBzZWNvbmQgbnVtYmVyIHRvIC1CIG9wdGlvbiwKK2xpa2UgdGhlc2U6CisKKyogLUI1MC82MCAoZ2l2ZSA1MCUgImJyZWFrIHNjb3JlIiB0byBkaWZmY29yZS1icmVhaywgdXNlIDYwJQorICBmb3IgZGlmZmNvcmUtbWVyZ2UtYnJva2VuKS4KKworKiAtQi82MCAodGhlIHNhbWUgYXMgYWJvdmUsIHNpbmNlIGRpZmZjb3JlLWJyZWFrIGRlZmF1bHRzIHRvIDUwJSkuCisKK05vdGUgdGhhdCBlYXJsaWVyIGltcGxlbWVudGF0aW9uIGxlZnQgYSBicm9rZW4gcGFpciBhcyBhIHNlcGFyYXRlCitjcmVhdGlvbiBhbmQgZGVsZXRpb24gcGF0Y2hlcy4gIFRoaXMgd2FzIGFuIHVubmVjZXNzYXJ5IGhhY2sgYW5kCit0aGUgbGF0ZXN0IGltcGxlbWVudGF0aW9uIGFsd2F5cyBtZXJnZXMgYWxsIHRoZSBicm9rZW4gcGFpcnMKK2JhY2sgaW50byBtb2RpZmljYXRpb25zLCBidXQgdGhlIHJlc3VsdGluZyBwYXRjaCBvdXRwdXQgaXMKK2Zvcm1hdHRlZCBkaWZmZXJlbnRseSBmb3IgZWFzaWVyIHJldmlldyBpbiBjYXNlIG9mIHN1Y2gKK2EgY29tcGxldGUgcmV3cml0ZSBieSBzaG93aW5nIHRoZSBlbnRpcmUgY29udGVudHMgb2Ygb2xkIHZlcnNpb24KK3ByZWZpeGVkIHdpdGggJy0nLCBmb2xsb3dlZCBieSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIG5ldwordmVyc2lvbiBwcmVmaXhlZCB3aXRoICcrJy4KKworCitkaWZmY29yZS1waWNrYXhlOiBGb3IgRGV0ZWN0aW5nIEFkZGl0aW9uL0RlbGV0aW9uIG9mIFNwZWNpZmllZCBTdHJpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHRyYW5zZm9ybWF0aW9uIGxpbWl0cyB0aGUgc2V0IG9mIGZpbGVwYWlycyB0byB0aG9zZSB0aGF0IGNoYW5nZQorc3BlY2lmaWVkIHN0cmluZ3MgYmV0d2VlbiB0aGUgcHJlaW1hZ2UgYW5kIHRoZSBwb3N0aW1hZ2UgaW4gYSBjZXJ0YWluCit3YXkuICAtUzxibG9jayBvZiB0ZXh0PiBhbmQgLUc8cmVndWxhciBleHByZXNzaW9uPiBvcHRpb25zIGFyZSB1c2VkIHRvCitzcGVjaWZ5IGRpZmZlcmVudCB3YXlzIHRoZXNlIHN0cmluZ3MgYXJlIHNvdWdodC4KKworIi1TPGJsb2NrIG9mIHRleHQ+IiBkZXRlY3RzIGZpbGVwYWlycyB3aG9zZSBwcmVpbWFnZSBhbmQgcG9zdGltYWdlCitoYXZlIGRpZmZlcmVudCBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCBibG9jayBvZiB0ZXh0LgorQnkgZGVmaW5pdGlvbiwgaXQgd2lsbCBub3QgZGV0ZWN0IGluLWZpbGUgbW92ZXMuICBBbHNvLCB3aGVuIGEKK2NoYW5nZXNldCBtb3ZlcyBhIGZpbGUgd2hvbGVzYWxlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBpbnRlcmVzdGluZworc3RyaW5nLCBkaWZmY29yZS1yZW5hbWUga2lja3MgaW4gYXMgdXN1YWwsIGFuZCBgLVNgIG9taXRzIHRoZSBmaWxlcGFpcgorKHNpbmNlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhhdCBzdHJpbmcgZGlkbid0IGNoYW5nZSBpbiB0aGF0CityZW5hbWUtZGV0ZWN0ZWQgZmlsZXBhaXIpLiAgV2hlbiB1c2VkIHdpdGggYC0tcGlja2F4ZS1yZWdleGAsIHRyZWF0Cit0aGUgPGJsb2NrIG9mIHRleHQ+IGFzIGFuIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCwKK2luc3RlYWQgb2YgYSBsaXRlcmFsIHN0cmluZy4KKworIi1HPHJlZ3VsYXIgZXhwcmVzc2lvbj4iIChtbmVtb25pYzogZ3JlcCkgZGV0ZWN0cyBmaWxlcGFpcnMgd2hvc2UKK3RleHR1YWwgZGlmZiBoYXMgYW4gYWRkZWQgb3IgYSBkZWxldGVkIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbgorcmVndWxhciBleHByZXNzaW9uLiAgVGhpcyBtZWFucyB0aGF0IGl0IHdpbGwgZGV0ZWN0IGluLWZpbGUgKG9yIHdoYXQKK3JlbmFtZS1kZXRlY3Rpb24gY29uc2lkZXJzIHRoZSBzYW1lIGZpbGUpIG1vdmVzLCB3aGljaCBpcyBub2lzZS4gIFRoZQoraW1wbGVtZW50YXRpb24gcnVucyBkaWZmIHR3aWNlIGFuZCBncmVwcywgYW5kIHRoaXMgY2FuIGJlIHF1aXRlCitleHBlbnNpdmUuICBUbyBzcGVlZCB0aGluZ3MgdXAgYmluYXJ5IGZpbGVzIHdpdGhvdXQgdGV4dGNvbnYgZmlsdGVycword2lsbCBiZSBpZ25vcmVkLgorCitXaGVuIGAtU2Agb3IgYC1HYCBhcmUgdXNlZCB3aXRob3V0IGAtLXBpY2theGUtYWxsYCwgb25seSBmaWxlcGFpcnMKK3RoYXQgbWF0Y2ggdGhlaXIgcmVzcGVjdGl2ZSBjcml0ZXJpb24gYXJlIGtlcHQgaW4gdGhlIG91dHB1dC4gIFdoZW4KK2AtLXBpY2theGUtYWxsYCBpcyB1c2VkLCBpZiBldmVuIG9uZSBmaWxlcGFpciBtYXRjaGVzIHRoZWlyIHJlc3BlY3RpdmUKK2NyaXRlcmlvbiBpbiBhIGNoYW5nZXNldCwgdGhlIGVudGlyZSBjaGFuZ2VzZXQgaXMga2VwdC4gIFRoaXMgYmVoYXZpb3IKK2lzIGRlc2lnbmVkIHRvIG1ha2UgcmV2aWV3aW5nIGNoYW5nZXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHdob2xlCitjaGFuZ2VzZXQgZWFzaWVyLgorCitkaWZmY29yZS1vcmRlcjogRm9yIFNvcnRpbmcgdGhlIE91dHB1dCBCYXNlZCBvbiBGaWxlbmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIHVzZWQgdG8gcmVvcmRlciB0aGUgZmlsZXBhaXJzIGFjY29yZGluZyB0byB0aGUgdXNlcidzCisob3IgcHJvamVjdCdzKSB0YXN0ZSwgYW5kIGlzIGNvbnRyb2xsZWQgYnkgdGhlIC1PIG9wdGlvbiB0byB0aGUKKydnaXQgZGlmZi17YXN0ZXJpc2t9JyBjb21tYW5kcy4KKworVGhpcyB0YWtlcyBhIHRleHQgZmlsZSBlYWNoIG9mIHdob3NlIGxpbmVzIGlzIGEgc2hlbGwgZ2xvYgorcGF0dGVybi4gIEZpbGVwYWlycyB0aGF0IG1hdGNoIGEgZ2xvYiBwYXR0ZXJuIG9uIGFuIGVhcmxpZXIgbGluZQoraW4gdGhlIGZpbGUgYXJlIG91dHB1dCBiZWZvcmUgb25lcyB0aGF0IG1hdGNoIGEgbGF0ZXIgbGluZSwgYW5kCitmaWxlcGFpcnMgdGhhdCBkbyBub3QgbWF0Y2ggYW55IGdsb2IgcGF0dGVybiBhcmUgb3V0cHV0IGxhc3QuCisKK0FzIGFuIGV4YW1wbGUsIGEgdHlwaWNhbCBvcmRlcmZpbGUgZm9yIHRoZSBjb3JlIEdpdCBwcm9iYWJseQord291bGQgbG9vayBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUkVBRE1FCitNYWtlZmlsZQorRG9jdW1lbnRhdGlvbgorKi5oCisqLmMKK3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWRpZmZbMV0sCitsaW5rZ2l0OmdpdC1kaWZmLWZpbGVzWzFdLAorbGlua2dpdDpnaXQtZGlmZi1pbmRleFsxXSwKK2xpbmtnaXQ6Z2l0LWRpZmYtdHJlZVsxXSwKK2xpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSwKK2xpbmtnaXQ6Z2l0LWxvZ1sxXSwKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10sCitsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0ZXZlcnlkYXkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRldmVyeWRheS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJkOTE5ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0ZXZlcnlkYXkudHh0CkBAIC0wLDAgKzEsNDU1IEBACitnaXRldmVyeWRheSg3KQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0ZXZlcnlkYXkgLSBBIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcyBmb3IgRXZlcnlkYXkgR2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorCitFdmVyeWRheSBHaXQgV2l0aCAyMCBDb21tYW5kcyBPciBTbworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworR2l0IHVzZXJzIGNhbiBicm9hZGx5IGJlIGdyb3VwZWQgaW50byBmb3VyIGNhdGVnb3JpZXMgZm9yIHRoZSBwdXJwb3NlcyBvZgorZGVzY3JpYmluZyBoZXJlIGEgc21hbGwgc2V0IG9mIHVzZWZ1bCBjb21tYW5kIGZvciBldmVyeWRheSBHaXQuCisKKyoJPDxTVEFOREFMT05FLEluZGl2aWR1YWwgRGV2ZWxvcGVyIChTdGFuZGFsb25lKT4+IGNvbW1hbmRzIGFyZSBlc3NlbnRpYWwKKwlmb3IgYW55Ym9keSB3aG8gbWFrZXMgYSBjb21taXQsIGV2ZW4gZm9yIHNvbWVib2R5IHdobyB3b3JrcyBhbG9uZS4KKworKglJZiB5b3Ugd29yayB3aXRoIG90aGVyIHBlb3BsZSwgeW91IHdpbGwgbmVlZCBjb21tYW5kcyBsaXN0ZWQgaW4KKwl0aGUgPDxQQVJUSUNJUEFOVCxJbmRpdmlkdWFsIERldmVsb3BlciAoUGFydGljaXBhbnQpPj4gc2VjdGlvbiBhcyB3ZWxsLgorCisqCVBlb3BsZSB3aG8gcGxheSB0aGUgPDxJTlRFR1JBVE9SLEludGVncmF0b3I+PiByb2xlIG5lZWQgdG8gbGVhcm4gc29tZQorCW1vcmUgY29tbWFuZHMgaW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlLgorCisqCTw8QURNSU5JU1RSQVRJT04sUmVwb3NpdG9yeSBBZG1pbmlzdHJhdGlvbj4+IGNvbW1hbmRzIGFyZSBmb3Igc3lzdGVtCisJYWRtaW5pc3RyYXRvcnMgd2hvIGFyZSByZXNwb25zaWJsZSBmb3IgdGhlIGNhcmUgYW5kIGZlZWRpbmcKKwlvZiBHaXQgcmVwb3NpdG9yaWVzLgorCisKK0luZGl2aWR1YWwgRGV2ZWxvcGVyIChTdGFuZGFsb25lKVtbU1RBTkRBTE9ORV1dCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIHN0YW5kYWxvbmUgaW5kaXZpZHVhbCBkZXZlbG9wZXIgZG9lcyBub3QgZXhjaGFuZ2UgcGF0Y2hlcyB3aXRoCitvdGhlciBwZW9wbGUsIGFuZCB3b3JrcyBhbG9uZSBpbiBhIHNpbmdsZSByZXBvc2l0b3J5LCB1c2luZyB0aGUKK2ZvbGxvd2luZyBjb21tYW5kcy4KKworICAqIGxpbmtnaXQ6Z2l0LWluaXRbMV0gdG8gY3JlYXRlIGEgbmV3IHJlcG9zaXRvcnkuCisKKyAgKiBsaW5rZ2l0OmdpdC1sb2dbMV0gdG8gc2VlIHdoYXQgaGFwcGVuZWQuCisKKyAgKiBsaW5rZ2l0OmdpdC1zd2l0Y2hbMV0gYW5kIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSB0byBzd2l0Y2gKKyAgICBicmFuY2hlcy4KKworICAqIGxpbmtnaXQ6Z2l0LWFkZFsxXSB0byBtYW5hZ2UgdGhlIGluZGV4IGZpbGUuCisKKyAgKiBsaW5rZ2l0OmdpdC1kaWZmWzFdIGFuZCBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gdG8gc2VlIHdoYXQKKyAgICB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgZG9pbmcuCisKKyAgKiBsaW5rZ2l0OmdpdC1jb21taXRbMV0gdG8gYWR2YW5jZSB0aGUgY3VycmVudCBicmFuY2guCisKKyAgKiBsaW5rZ2l0OmdpdC1yZXN0b3JlWzFdIHRvIHVuZG8gY2hhbmdlcy4KKworICAqIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIHRvIG1lcmdlIGJldHdlZW4gbG9jYWwgYnJhbmNoZXMuCisKKyAgKiBsaW5rZ2l0OmdpdC1yZWJhc2VbMV0gdG8gbWFpbnRhaW4gdG9waWMgYnJhbmNoZXMuCisKKyAgKiBsaW5rZ2l0OmdpdC10YWdbMV0gdG8gbWFyayBhIGtub3duIHBvaW50LgorCitFeGFtcGxlcworfn5+fn5+fn4KKworVXNlIGEgdGFyYmFsbCBhcyBhIHN0YXJ0aW5nIHBvaW50IGZvciBhIG5ldyByZXBvc2l0b3J5Ljo6CisrCistLS0tLS0tLS0tLS0KKyQgdGFyIHp4ZiBmcm90ei50YXIuZ3oKKyQgY2QgZnJvdHoKKyQgZ2l0IGluaXQKKyQgZ2l0IGFkZCAuIDwxPgorJCBnaXQgY29tbWl0IC1tICJpbXBvcnQgb2YgZnJvdHogc291cmNlIHRyZWUuIgorJCBnaXQgdGFnIHYyLjQzIDwyPgorLS0tLS0tLS0tLS0tCisrCis8MT4gYWRkIGV2ZXJ5dGhpbmcgdW5kZXIgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorPDI+IG1ha2UgYSBsaWdodHdlaWdodCwgdW5hbm5vdGF0ZWQgdGFnLgorCitDcmVhdGUgYSB0b3BpYyBicmFuY2ggYW5kIGRldmVsb3AuOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIC1jIGFsc2EtYXVkaW8gPDE+CiskIGVkaXQvY29tcGlsZS90ZXN0CiskIGdpdCByZXN0b3JlIGN1cnNlcy91eF9hdWRpb19vc3MuYyA8Mj4KKyQgZ2l0IGFkZCBjdXJzZXMvdXhfYXVkaW9fYWxzYS5jIDwzPgorJCBlZGl0L2NvbXBpbGUvdGVzdAorJCBnaXQgZGlmZiBIRUFEIDw0PgorJCBnaXQgY29tbWl0IC1hIC1zIDw1PgorJCBlZGl0L2NvbXBpbGUvdGVzdAorJCBnaXQgZGlmZiBIRUFEXiA8Nj4KKyQgZ2l0IGNvbW1pdCAtYSAtLWFtZW5kIDw3PgorJCBnaXQgc3dpdGNoIG1hc3RlciA8OD4KKyQgZ2l0IG1lcmdlIGFsc2EtYXVkaW8gPDk+CiskIGdpdCBsb2cgLS1zaW5jZT0nMyBkYXlzIGFnbycgPDEwPgorJCBnaXQgbG9nIHYyLjQzLi4gY3Vyc2VzLyA8MTE+CistLS0tLS0tLS0tLS0KKysKKzwxPiBjcmVhdGUgYSBuZXcgdG9waWMgYnJhbmNoLgorPDI+IHJldmVydCB5b3VyIGJvdGNoZWQgY2hhbmdlcyBpbiBgY3Vyc2VzL3V4X2F1ZGlvX29zcy5jYC4KKzwzPiB5b3UgbmVlZCB0byB0ZWxsIEdpdCBpZiB5b3UgYWRkZWQgYSBuZXcgZmlsZTsgcmVtb3ZhbCBhbmQKK21vZGlmaWNhdGlvbiB3aWxsIGJlIGNhdWdodCBpZiB5b3UgZG8gYGdpdCBjb21taXQgLWFgIGxhdGVyLgorPDQ+IHRvIHNlZSB3aGF0IGNoYW5nZXMgeW91IGFyZSBjb21taXR0aW5nLgorPDU+IGNvbW1pdCBldmVyeXRoaW5nLCBhcyB5b3UgaGF2ZSB0ZXN0ZWQsIHdpdGggeW91ciBzaWduLW9mZi4KKzw2PiBsb29rIGF0IGFsbCB5b3VyIGNoYW5nZXMgaW5jbHVkaW5nIHRoZSBwcmV2aW91cyBjb21taXQuCis8Nz4gYW1lbmQgdGhlIHByZXZpb3VzIGNvbW1pdCwgYWRkaW5nIGFsbCB5b3VyIG5ldyBjaGFuZ2VzLAordXNpbmcgeW91ciBvcmlnaW5hbCBtZXNzYWdlLgorPDg+IHN3aXRjaCB0byB0aGUgbWFzdGVyIGJyYW5jaC4KKzw5PiBtZXJnZSBhIHRvcGljIGJyYW5jaCBpbnRvIHlvdXIgbWFzdGVyIGJyYW5jaC4KKzwxMD4gcmV2aWV3IGNvbW1pdCBsb2dzOyBvdGhlciBmb3JtcyB0byBsaW1pdCBvdXRwdXQgY2FuIGJlCitjb21iaW5lZCBhbmQgaW5jbHVkZSBgLTEwYCAodG8gc2hvdyB1cCB0byAxMCBjb21taXRzKSwKK2AtLXVudGlsPTIwMDUtMTItMTBgLCBldGMuCis8MTE+IHZpZXcgb25seSB0aGUgY2hhbmdlcyB0aGF0IHRvdWNoIHdoYXQncyBpbiBgY3Vyc2VzL2AKK2RpcmVjdG9yeSwgc2luY2UgYHYyLjQzYCB0YWcuCisKKworSW5kaXZpZHVhbCBEZXZlbG9wZXIgKFBhcnRpY2lwYW50KVtbUEFSVElDSVBBTlRdXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGRldmVsb3BlciB3b3JraW5nIGFzIGEgcGFydGljaXBhbnQgaW4gYSBncm91cCBwcm9qZWN0IG5lZWRzIHRvCitsZWFybiBob3cgdG8gY29tbXVuaWNhdGUgd2l0aCBvdGhlcnMsIGFuZCB1c2VzIHRoZXNlIGNvbW1hbmRzIGluCithZGRpdGlvbiB0byB0aGUgb25lcyBuZWVkZWQgYnkgYSBzdGFuZGFsb25lIGRldmVsb3Blci4KKworICAqIGxpbmtnaXQ6Z2l0LWNsb25lWzFdIGZyb20gdGhlIHVwc3RyZWFtIHRvIHByaW1lIHlvdXIgbG9jYWwKKyAgICByZXBvc2l0b3J5LgorCisgICogbGlua2dpdDpnaXQtcHVsbFsxXSBhbmQgbGlua2dpdDpnaXQtZmV0Y2hbMV0gZnJvbSAib3JpZ2luIgorICAgIHRvIGtlZXAgdXAtdG8tZGF0ZSB3aXRoIHRoZSB1cHN0cmVhbS4KKworICAqIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gdG8gc2hhcmVkIHJlcG9zaXRvcnksIGlmIHlvdSBhZG9wdCBDVlMKKyAgICBzdHlsZSBzaGFyZWQgcmVwb3NpdG9yeSB3b3JrZmxvdy4KKworICAqIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSB0byBwcmVwYXJlIGUtbWFpbCBzdWJtaXNzaW9uLCBpZgorICAgIHlvdSBhZG9wdCBMaW51eCBrZXJuZWwtc3R5bGUgcHVibGljIGZvcnVtIHdvcmtmbG93LgorCisgICogbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXSB0byBzZW5kIHlvdXIgZS1tYWlsIHN1Ym1pc3Npb24gd2l0aG91dAorICAgIGNvcnJ1cHRpb24gYnkgeW91ciBNVUEuCisKKyAgKiBsaW5rZ2l0OmdpdC1yZXF1ZXN0LXB1bGxbMV0gdG8gY3JlYXRlIGEgc3VtbWFyeSBvZiBjaGFuZ2VzCisgICAgZm9yIHlvdXIgdXBzdHJlYW0gdG8gcHVsbC4KKworCitFeGFtcGxlcworfn5+fn5+fn4KKworQ2xvbmUgdGhlIHVwc3RyZWFtIGFuZCB3b3JrIG9uIGl0LiAgRmVlZCBjaGFuZ2VzIHRvIHVwc3RyZWFtLjo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vLi4uL3RvcnZhbGRzL2xpbnV4LTIuNiBteTIuNgorJCBjZCBteTIuNgorJCBnaXQgc3dpdGNoIC1jIG1pbmUgbWFzdGVyIDwxPgorJCBlZGl0L2NvbXBpbGUvdGVzdDsgZ2l0IGNvbW1pdCAtYSAtcyA8Mj4KKyQgZ2l0IGZvcm1hdC1wYXRjaCBtYXN0ZXIgPDM+CiskIGdpdCBzZW5kLWVtYWlsIC0tdG89InBlcnNvbiA8ZW1haWxAZXhhbXBsZS5jb20+IiAwMCoucGF0Y2ggPDQ+CiskIGdpdCBzd2l0Y2ggbWFzdGVyIDw1PgorJCBnaXQgcHVsbCA8Nj4KKyQgZ2l0IGxvZyAtcCBPUklHX0hFQUQuLiBhcmNoL2kzODYgaW5jbHVkZS9hc20taTM4NiA8Nz4KKyQgZ2l0IGxzLXJlbW90ZSAtLWhlYWRzIGh0dHA6Ly9naXQua2VybmVsLm9yZy8uLi4vamdhcnppay9saWJhdGEtZGV2LmdpdCA8OD4KKyQgZ2l0IHB1bGwgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViLy4uLi9qZ2FyemlrL2xpYmF0YS1kZXYuZ2l0IEFMTCA8OT4KKyQgZ2l0IHJlc2V0IC0taGFyZCBPUklHX0hFQUQgPDEwPgorJCBnaXQgZ2MgPDExPgorLS0tLS0tLS0tLS0tCisrCis8MT4gY2hlY2tvdXQgYSBuZXcgYnJhbmNoIGBtaW5lYCBmcm9tIG1hc3Rlci4KKzwyPiByZXBlYXQgYXMgbmVlZGVkLgorPDM+IGV4dHJhY3QgcGF0Y2hlcyBmcm9tIHlvdXIgYnJhbmNoLCByZWxhdGl2ZSB0byBtYXN0ZXIsCis8ND4gYW5kIGVtYWlsIHRoZW0uCis8NT4gcmV0dXJuIHRvIGBtYXN0ZXJgLCByZWFkeSB0byBzZWUgd2hhdCdzIG5ldworPDY+IGBnaXQgcHVsbGAgZmV0Y2hlcyBmcm9tIGBvcmlnaW5gIGJ5IGRlZmF1bHQgYW5kIG1lcmdlcyBpbnRvIHRoZQorY3VycmVudCBicmFuY2guCis8Nz4gaW1tZWRpYXRlbHkgYWZ0ZXIgcHVsbGluZywgbG9vayBhdCB0aGUgY2hhbmdlcyBkb25lIHVwc3RyZWFtCitzaW5jZSBsYXN0IHRpbWUgd2UgY2hlY2tlZCwgb25seSBpbiB0aGUKK2FyZWEgd2UgYXJlIGludGVyZXN0ZWQgaW4uCis8OD4gY2hlY2sgdGhlIGJyYW5jaCBuYW1lcyBpbiBhbiBleHRlcm5hbCByZXBvc2l0b3J5IChpZiBub3Qga25vd24pLgorPDk+IGZldGNoIGZyb20gYSBzcGVjaWZpYyBicmFuY2ggYEFMTGAgZnJvbSBhIHNwZWNpZmljIHJlcG9zaXRvcnkKK2FuZCBtZXJnZSBpdC4KKzwxMD4gcmV2ZXJ0IHRoZSBwdWxsLgorPDExPiBnYXJiYWdlIGNvbGxlY3QgbGVmdG92ZXIgb2JqZWN0cyBmcm9tIHJldmVydGVkIHB1bGwuCisKKworUHVzaCBpbnRvIGFub3RoZXIgcmVwb3NpdG9yeS46OgorKworLS0tLS0tLS0tLS0tCitzYXRlbGxpdGUkIGdpdCBjbG9uZSBtb3RoZXJzaGlwOmZyb3R6IGZyb3R6IDwxPgorc2F0ZWxsaXRlJCBjZCBmcm90egorc2F0ZWxsaXRlJCBnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAnXihyZW1vdGV8YnJhbmNoKVwuJyA8Mj4KK3JlbW90ZS5vcmlnaW4udXJsIG1vdGhlcnNoaXA6ZnJvdHoKK3JlbW90ZS5vcmlnaW4uZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKgorYnJhbmNoLm1hc3Rlci5yZW1vdGUgb3JpZ2luCiticmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyCitzYXRlbGxpdGUkIGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5wdXNoIFwKKwkgICArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9zYXRlbGxpdGUvKiA8Mz4KK3NhdGVsbGl0ZSQgZWRpdC9jb21waWxlL3Rlc3QvY29tbWl0CitzYXRlbGxpdGUkIGdpdCBwdXNoIG9yaWdpbiA8ND4KKworbW90aGVyc2hpcCQgY2QgZnJvdHoKK21vdGhlcnNoaXAkIGdpdCBzd2l0Y2ggbWFzdGVyCittb3RoZXJzaGlwJCBnaXQgbWVyZ2Ugc2F0ZWxsaXRlL21hc3RlciA8NT4KKy0tLS0tLS0tLS0tLQorKworPDE+IG1vdGhlcnNoaXAgbWFjaGluZSBoYXMgYSBmcm90eiByZXBvc2l0b3J5IHVuZGVyIHlvdXIgaG9tZQorZGlyZWN0b3J5OyBjbG9uZSBmcm9tIGl0IHRvIHN0YXJ0IGEgcmVwb3NpdG9yeSBvbiB0aGUgc2F0ZWxsaXRlCittYWNoaW5lLgorPDI+IGNsb25lIHNldHMgdGhlc2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYnkgZGVmYXVsdC4KK0l0IGFycmFuZ2VzIGBnaXQgcHVsbGAgdG8gZmV0Y2ggYW5kIHN0b3JlIHRoZSBicmFuY2hlcyBvZiBtb3RoZXJzaGlwCittYWNoaW5lIHRvIGxvY2FsIGByZW1vdGVzL29yaWdpbi8qYCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCis8Mz4gYXJyYW5nZSBgZ2l0IHB1c2hgIHRvIHB1c2ggYWxsIGxvY2FsIGJyYW5jaGVzIHRvCit0aGVpciBjb3JyZXNwb25kaW5nIGJyYW5jaCBvZiB0aGUgbW90aGVyc2hpcCBtYWNoaW5lLgorPDQ+IHB1c2ggd2lsbCBzdGFzaCBhbGwgb3VyIHdvcmsgYXdheSBvbiBgcmVtb3Rlcy9zYXRlbGxpdGUvKmAKK3JlbW90ZS10cmFja2luZyBicmFuY2hlcyBvbiB0aGUgbW90aGVyc2hpcCBtYWNoaW5lLiAgWW91IGNvdWxkIHVzZSB0aGlzCithcyBhIGJhY2stdXAgbWV0aG9kLiBMaWtld2lzZSwgeW91IGNhbiBwcmV0ZW5kIHRoYXQgbW90aGVyc2hpcAorImZldGNoZWQiIGZyb20geW91ICh1c2VmdWwgd2hlbiBhY2Nlc3MgaXMgb25lIHNpZGVkKS4KKzw1PiBvbiBtb3RoZXJzaGlwIG1hY2hpbmUsIG1lcmdlIHRoZSB3b3JrIGRvbmUgb24gdGhlIHNhdGVsbGl0ZQorbWFjaGluZSBpbnRvIHRoZSBtYXN0ZXIgYnJhbmNoLgorCitCcmFuY2ggb2ZmIG9mIGEgc3BlY2lmaWMgdGFnLjo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCAtYyBwcml2YXRlMi42LjE0IHYyLjYuMTQgPDE+CiskIGVkaXQvY29tcGlsZS90ZXN0OyBnaXQgY29tbWl0IC1hCiskIGdpdCBjaGVja291dCBtYXN0ZXIKKyQgZ2l0IGNoZXJyeS1waWNrIHYyLjYuMTQuLnByaXZhdGUyLjYuMTQgPDI+CistLS0tLS0tLS0tLS0KKysKKzwxPiBjcmVhdGUgYSBwcml2YXRlIGJyYW5jaCBiYXNlZCBvbiBhIHdlbGwga25vd24gKGJ1dCBzb21ld2hhdCBiZWhpbmQpCit0YWcuCis8Mj4gZm9yd2FyZCBwb3J0IGFsbCBjaGFuZ2VzIGluIGBwcml2YXRlMi42LjE0YCBicmFuY2ggdG8gYG1hc3RlcmAgYnJhbmNoCit3aXRob3V0IGEgZm9ybWFsICJtZXJnaW5nIi4gT3IgbG9uZ2hhbmQgKworYGdpdCBmb3JtYXQtcGF0Y2ggLWsgLW0gLS1zdGRvdXQgdjIuNi4xNC4ucHJpdmF0ZTIuNi4xNCB8CisgIGdpdCBhbSAtMyAta2AKKworQW4gYWx0ZXJuYXRlIHBhcnRpY2lwYW50IHN1Ym1pc3Npb24gbWVjaGFuaXNtIGlzIHVzaW5nIHRoZQorYGdpdCByZXF1ZXN0LXB1bGxgIG9yIHB1bGwtcmVxdWVzdCBtZWNoYW5pc21zIChlLmcgYXMgdXNlZCBvbgorR2l0SHViICh3d3cuZ2l0aHViLmNvbSkgdG8gbm90aWZ5IHlvdXIgdXBzdHJlYW0gb2YgeW91cgorY29udHJpYnV0aW9uLgorCitJbnRlZ3JhdG9yW1tJTlRFR1JBVE9SXV0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGZhaXJseSBjZW50cmFsIHBlcnNvbiBhY3RpbmcgYXMgdGhlIGludGVncmF0b3IgaW4gYSBncm91cAorcHJvamVjdCByZWNlaXZlcyBjaGFuZ2VzIG1hZGUgYnkgb3RoZXJzLCByZXZpZXdzIGFuZCBpbnRlZ3JhdGVzCit0aGVtIGFuZCBwdWJsaXNoZXMgdGhlIHJlc3VsdCBmb3Igb3RoZXJzIHRvIHVzZSwgdXNpbmcgdGhlc2UKK2NvbW1hbmRzIGluIGFkZGl0aW9uIHRvIHRoZSBvbmVzIG5lZWRlZCBieSBwYXJ0aWNpcGFudHMuCisKK1RoaXMgc2VjdGlvbiBjYW4gYWxzbyBiZSB1c2VkIGJ5IHRob3NlIHdobyByZXNwb25kIHRvIGBnaXQKK3JlcXVlc3QtcHVsbGAgb3IgcHVsbC1yZXF1ZXN0IG9uIEdpdEh1YiAod3d3LmdpdGh1Yi5jb20pIHRvCitpbnRlZ3JhdGUgdGhlIHdvcmsgb2Ygb3RoZXJzIGludG8gdGhlaXIgaGlzdG9yeS4gQSBzdWItYXJlYQorbGlldXRlbmFudCBmb3IgYSByZXBvc2l0b3J5IHdpbGwgYWN0IGJvdGggYXMgYSBwYXJ0aWNpcGFudCBhbmQKK2FzIGFuIGludGVncmF0b3IuCisKKworICAqIGxpbmtnaXQ6Z2l0LWFtWzFdIHRvIGFwcGx5IHBhdGNoZXMgZS1tYWlsZWQgaW4gZnJvbSB5b3VyCisgICAgY29udHJpYnV0b3JzLgorCisgICogbGlua2dpdDpnaXQtcHVsbFsxXSB0byBtZXJnZSBmcm9tIHlvdXIgdHJ1c3RlZCBsaWV1dGVuYW50cy4KKworICAqIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSB0byBwcmVwYXJlIGFuZCBzZW5kIHN1Z2dlc3RlZAorICAgIGFsdGVybmF0aXZlIHRvIGNvbnRyaWJ1dG9ycy4KKworICAqIGxpbmtnaXQ6Z2l0LXJldmVydFsxXSB0byB1bmRvIGJvdGNoZWQgY29tbWl0cy4KKworICAqIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gdG8gcHVibGlzaCB0aGUgYmxlZWRpbmcgZWRnZS4KKworCitFeGFtcGxlcworfn5+fn5+fn4KKworQSB0eXBpY2FsIGludGVncmF0b3IncyBHaXQgZGF5Ljo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN0YXR1cyA8MT4KKyQgZ2l0IGJyYW5jaCAtLW5vLW1lcmdlZCBtYXN0ZXIgPDI+CiskIG1haWx4IDwzPgorJiBzIDIgMyA0IDUgLi8rdG8tYXBwbHkKKyYgcyA3IDggLi8raG9sZC1saW51cworJiBxCiskIGdpdCBzd2l0Y2ggLWMgdG9waWMvb25lIG1hc3RlcgorJCBnaXQgYW0gLTMgLWkgLXMgLi8rdG8tYXBwbHkgPDQ+CiskIGNvbXBpbGUvdGVzdAorJCBnaXQgc3dpdGNoIC1jIGhvbGQvbGludXMgJiYgZ2l0IGFtIC0zIC1pIC1zIC4vK2hvbGQtbGludXMgPDU+CiskIGdpdCBzd2l0Y2ggdG9waWMvb25lICYmIGdpdCByZWJhc2UgbWFzdGVyIDw2PgorJCBnaXQgc3dpdGNoIC1DIHB1IG5leHQgPDc+CiskIGdpdCBtZXJnZSB0b3BpYy9vbmUgdG9waWMvdHdvICYmIGdpdCBtZXJnZSBob2xkL2xpbnVzIDw4PgorJCBnaXQgc3dpdGNoIG1haW50CiskIGdpdCBjaGVycnktcGljayBtYXN0ZXJ+NCA8OT4KKyQgY29tcGlsZS90ZXN0CiskIGdpdCB0YWcgLXMgLW0gIkdJVCAwLjk5Ljl4IiB2MC45OS45eCA8MTA+CiskIGdpdCBmZXRjaCBrbyAmJiBmb3IgYnJhbmNoIGluIG1hc3RlciBtYWludCBuZXh0IHB1IDwxMT4KKyAgICBkbworCWdpdCBzaG93LWJyYW5jaCBrby8kYnJhbmNoICRicmFuY2ggPDEyPgorICAgIGRvbmUKKyQgZ2l0IHB1c2ggLS1mb2xsb3ctdGFncyBrbyA8MTM+CistLS0tLS0tLS0tLS0KKysKKzwxPiBzZWUgd2hhdCB5b3Ugd2VyZSBpbiB0aGUgbWlkZGxlIG9mIGRvaW5nLCBpZiBhbnl0aGluZy4KKzwyPiBzZWUgd2hpY2ggYnJhbmNoZXMgaGF2ZW4ndCBiZWVuIG1lcmdlZCBpbnRvIGBtYXN0ZXJgIHlldC4KK0xpa2V3aXNlIGZvciBhbnkgb3RoZXIgaW50ZWdyYXRpb24gYnJhbmNoZXMgZS5nLiBgbWFpbnRgLCBgbmV4dGAKK2FuZCBgcHVgIChwb3RlbnRpYWwgdXBkYXRlcykuCis8Mz4gcmVhZCBtYWlscywgc2F2ZSBvbmVzIHRoYXQgYXJlIGFwcGxpY2FibGUsIGFuZCBzYXZlIG90aGVycwordGhhdCBhcmUgbm90IHF1aXRlIHJlYWR5IChvdGhlciBtYWlsIHJlYWRlcnMgYXJlIGF2YWlsYWJsZSkuCis8ND4gYXBwbHkgdGhlbSwgaW50ZXJhY3RpdmVseSwgd2l0aCB5b3VyIHNpZ24tb2Zmcy4KKzw1PiBjcmVhdGUgdG9waWMgYnJhbmNoIGFzIG5lZWRlZCBhbmQgYXBwbHksIGFnYWluIHdpdGggc2lnbi1vZmZzLgorPDY+IHJlYmFzZSBpbnRlcm5hbCB0b3BpYyBicmFuY2ggdGhhdCBoYXMgbm90IGJlZW4gbWVyZ2VkIHRvIHRoZQorbWFzdGVyIG9yIGV4cG9zZWQgYXMgYSBwYXJ0IG9mIGEgc3RhYmxlIGJyYW5jaC4KKzw3PiByZXN0YXJ0IGBwdWAgZXZlcnkgdGltZSBmcm9tIHRoZSBuZXh0LgorPDg+IGFuZCBidW5kbGUgdG9waWMgYnJhbmNoZXMgc3RpbGwgY29va2luZy4KKzw5PiBiYWNrcG9ydCBhIGNyaXRpY2FsIGZpeC4KKzwxMD4gY3JlYXRlIGEgc2lnbmVkIHRhZy4KKzwxMT4gbWFrZSBzdXJlIG1hc3RlciB3YXMgbm90IGFjY2lkZW50YWxseSByZXdvdW5kIGJleW9uZCB0aGF0CithbHJlYWR5IHB1c2hlZCBvdXQuCis8MTI+IEluIHRoZSBvdXRwdXQgZnJvbSBgZ2l0IHNob3ctYnJhbmNoYCwgYG1hc3RlcmAgc2hvdWxkIGhhdmUKK2V2ZXJ5dGhpbmcgYGtvL21hc3RlcmAgaGFzLCBhbmQgYG5leHRgIHNob3VsZCBoYXZlCitldmVyeXRoaW5nIGBrby9uZXh0YCBoYXMsIGV0Yy4KKzwxMz4gcHVzaCBvdXQgdGhlIGJsZWVkaW5nIGVkZ2UsIHRvZ2V0aGVyIHdpdGggbmV3IHRhZ3MgdGhhdCBwb2ludAoraW50byB0aGUgcHVzaGVkIGhpc3RvcnkuCisKK0luIHRoaXMgZXhhbXBsZSwgdGhlIGBrb2Agc2hvcnRoYW5kIHBvaW50cyBhdCB0aGUgR2l0IG1haW50YWluZXIncworcmVwb3NpdG9yeSBhdCBrZXJuZWwub3JnLCBhbmQgbG9va3MgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyhpbiAuZ2l0L2NvbmZpZykKK1tyZW1vdGUgImtvIl0KKwl1cmwgPSBrZXJuZWwub3JnOi9wdWIvc2NtL2dpdC9naXQuZ2l0CisJZmV0Y2ggPSByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2tvLyoKKwlwdXNoID0gcmVmcy9oZWFkcy9tYXN0ZXIKKwlwdXNoID0gcmVmcy9oZWFkcy9uZXh0CisJcHVzaCA9ICtyZWZzL2hlYWRzL3B1CisJcHVzaCA9IHJlZnMvaGVhZHMvbWFpbnQKKy0tLS0tLS0tLS0tLQorCisKK1JlcG9zaXRvcnkgQWRtaW5pc3RyYXRpb25bW0FETUlOSVNUUkFUSU9OXV0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSByZXBvc2l0b3J5IGFkbWluaXN0cmF0b3IgdXNlcyB0aGUgZm9sbG93aW5nIHRvb2xzIHRvIHNldCB1cAorYW5kIG1haW50YWluIGFjY2VzcyB0byB0aGUgcmVwb3NpdG9yeSBieSBkZXZlbG9wZXJzLgorCisgICogbGlua2dpdDpnaXQtZGFlbW9uWzFdIHRvIGFsbG93IGFub255bW91cyBkb3dubG9hZCBmcm9tCisgICAgcmVwb3NpdG9yeS4KKworICAqIGxpbmtnaXQ6Z2l0LXNoZWxsWzFdIGNhbiBiZSB1c2VkIGFzIGEgJ3Jlc3RyaWN0ZWQgbG9naW4gc2hlbGwnCisgICAgZm9yIHNoYXJlZCBjZW50cmFsIHJlcG9zaXRvcnkgdXNlcnMuCisKKyAgKiBsaW5rZ2l0OmdpdC1odHRwLWJhY2tlbmRbMV0gcHJvdmlkZXMgYSBzZXJ2ZXIgc2lkZSBpbXBsZW1lbnRhdGlvbgorICAgIG9mIEdpdC1vdmVyLUhUVFAgKCJTbWFydCBodHRwIikgYWxsb3dpbmcgYm90aCBmZXRjaCBhbmQgcHVzaCBzZXJ2aWNlcy4KKworICAqIGxpbmtnaXQ6Z2l0d2ViWzFdIHByb3ZpZGVzIGEgd2ViIGZyb250LWVuZCB0byBHaXQgcmVwb3NpdG9yaWVzLAorICAgIHdoaWNoIGNhbiBiZSBzZXQtdXAgdXNpbmcgdGhlIGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdIHNjcmlwdC4KKworbGluazpob3d0by91cGRhdGUtaG9vay1leGFtcGxlLmh0bWxbdXBkYXRlIGhvb2sgaG93dG9dIGhhcyBhIGdvb2QKK2V4YW1wbGUgb2YgbWFuYWdpbmcgYSBzaGFyZWQgY2VudHJhbCByZXBvc2l0b3J5LgorCitJbiBhZGRpdGlvbiB0aGVyZSBhcmUgYSBudW1iZXIgb2Ygb3RoZXIgd2lkZWx5IGRlcGxveWVkIGhvc3RpbmcsIGJyb3dzaW5nCithbmQgcmV2aWV3aW5nIHNvbHV0aW9ucyBzdWNoIGFzOgorCisgICogZ2l0b2xpdGUsIGdlcnJpdCBjb2RlIHJldmlldywgY2dpdCBhbmQgb3RoZXJzLgorCitFeGFtcGxlcworfn5+fn5+fn4KK1dlIGFzc3VtZSB0aGUgZm9sbG93aW5nIGluIC9ldGMvc2VydmljZXM6OgorKworLS0tLS0tLS0tLS0tCiskIGdyZXAgOTQxOCAvZXRjL3NlcnZpY2VzCitnaXQJCTk0MTgvdGNwCQkjIEdpdCBWZXJzaW9uIENvbnRyb2wgU3lzdGVtCistLS0tLS0tLS0tLS0KKworUnVuIGdpdC1kYWVtb24gdG8gc2VydmUgL3B1Yi9zY20gZnJvbSBpbmV0ZC46OgorKworLS0tLS0tLS0tLS0tCiskIGdyZXAgZ2l0IC9ldGMvaW5ldGQuY29uZgorZ2l0CXN0cmVhbQl0Y3AJbm93YWl0CW5vYm9keSBcCisgIC91c3IvYmluL2dpdC1kYWVtb24gZ2l0LWRhZW1vbiAtLWluZXRkIC0tZXhwb3J0LWFsbCAvcHViL3NjbQorLS0tLS0tLS0tLS0tCisrCitUaGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gbGluZSBzaG91bGQgYmUgb24gb25lIGxpbmUuCisKK1J1biBnaXQtZGFlbW9uIHRvIHNlcnZlIC9wdWIvc2NtIGZyb20geGluZXRkLjo6CisrCistLS0tLS0tLS0tLS0KKyQgY2F0IC9ldGMveGluZXRkLmQvZ2l0LWRhZW1vbgorIyBkZWZhdWx0OiBvZmYKKyMgZGVzY3JpcHRpb246IFRoZSBHaXQgc2VydmVyIG9mZmVycyBhY2Nlc3MgdG8gR2l0IHJlcG9zaXRvcmllcworc2VydmljZSBnaXQKK3sKKwlkaXNhYmxlID0gbm8KKwl0eXBlICAgICAgICAgICAgPSBVTkxJU1RFRAorCXBvcnQgICAgICAgICAgICA9IDk0MTgKKwlzb2NrZXRfdHlwZSAgICAgPSBzdHJlYW0KKwl3YWl0ICAgICAgICAgICAgPSBubworCXVzZXIgICAgICAgICAgICA9IG5vYm9keQorCXNlcnZlciAgICAgICAgICA9IC91c3IvYmluL2dpdC1kYWVtb24KKwlzZXJ2ZXJfYXJncyAgICAgPSAtLWluZXRkIC0tZXhwb3J0LWFsbCAtLWJhc2UtcGF0aD0vcHViL3NjbQorCWxvZ19vbl9mYWlsdXJlICArPSBVU0VSSUQKK30KKy0tLS0tLS0tLS0tLQorKworQ2hlY2sgeW91ciB4aW5ldGQoOCkgZG9jdW1lbnRhdGlvbiBhbmQgc2V0dXAsIHRoaXMgaXMgZnJvbSBhIEZlZG9yYSBzeXN0ZW0uCitPdGhlcnMgbWlnaHQgYmUgZGlmZmVyZW50LgorCitHaXZlIHB1c2gvcHVsbCBvbmx5IGFjY2VzcyB0byBkZXZlbG9wZXJzIHVzaW5nIGdpdC1vdmVyLXNzaC46OgorCitlLmcuIHRob3NlIHVzaW5nOgorYCQgZ2l0IHB1c2gvcHVsbCBzc2g6Ly9ob3N0Lnh6L3B1Yi9zY20vcHJvamVjdGAKKysKKy0tLS0tLS0tLS0tLQorJCBncmVwIGdpdCAvZXRjL3Bhc3N3ZCA8MT4KK2FsaWNlOng6MTAwMDoxMDAwOjovaG9tZS9hbGljZTovdXNyL2Jpbi9naXQtc2hlbGwKK2JvYjp4OjEwMDE6MTAwMTo6L2hvbWUvYm9iOi91c3IvYmluL2dpdC1zaGVsbAorY2luZHk6eDoxMDAyOjEwMDI6Oi9ob21lL2NpbmR5Oi91c3IvYmluL2dpdC1zaGVsbAorZGF2aWQ6eDoxMDAzOjEwMDM6Oi9ob21lL2RhdmlkOi91c3IvYmluL2dpdC1zaGVsbAorJCBncmVwIGdpdCAvZXRjL3NoZWxscyA8Mj4KKy91c3IvYmluL2dpdC1zaGVsbAorLS0tLS0tLS0tLS0tCisrCis8MT4gbG9nLWluIHNoZWxsIGlzIHNldCB0byAvdXNyL2Jpbi9naXQtc2hlbGwsIHdoaWNoIGRvZXMgbm90CithbGxvdyBhbnl0aGluZyBidXQgYGdpdCBwdXNoYCBhbmQgYGdpdCBwdWxsYC4gIFRoZSB1c2VycyByZXF1aXJlCitzc2ggYWNjZXNzIHRvIHRoZSBtYWNoaW5lLgorPDI+IGluIG1hbnkgZGlzdHJpYnV0aW9ucyAvZXRjL3NoZWxscyBuZWVkcyB0byBsaXN0IHdoYXQgaXMgdXNlZAorYXMgdGhlIGxvZ2luIHNoZWxsLgorCitDVlMtc3R5bGUgc2hhcmVkIHJlcG9zaXRvcnkuOjoKKysKKy0tLS0tLS0tLS0tLQorJCBncmVwIGdpdCAvZXRjL2dyb3VwIDwxPgorZ2l0Ong6OTQxODphbGljZSxib2IsY2luZHksZGF2aWQKKyQgY2QgL2hvbWUvZGV2by5naXQKKyQgbHMgLWwgPDI+CisgIGxyd3hyd3hyd3ggICAxIGRhdmlkIGdpdCAgICAxNyBEZWMgIDQgMjI6NDAgSEVBRCAtPiByZWZzL2hlYWRzL21hc3RlcgorICBkcnd4cndzci14ICAgMiBkYXZpZCBnaXQgIDQwOTYgRGVjICA0IDIyOjQwIGJyYW5jaGVzCisgIC1ydy1ydy1yLS0gICAxIGRhdmlkIGdpdCAgICA4NCBEZWMgIDQgMjI6NDAgY29uZmlnCisgIC1ydy1ydy1yLS0gICAxIGRhdmlkIGdpdCAgICA1OCBEZWMgIDQgMjI6NDAgZGVzY3JpcHRpb24KKyAgZHJ3eHJ3c3IteCAgIDIgZGF2aWQgZ2l0ICA0MDk2IERlYyAgNCAyMjo0MCBob29rcworICAtcnctcnctci0tICAgMSBkYXZpZCBnaXQgMzc1MDQgRGVjICA0IDIyOjQwIGluZGV4CisgIGRyd3hyd3NyLXggICAyIGRhdmlkIGdpdCAgNDA5NiBEZWMgIDQgMjI6NDAgaW5mbworICBkcnd4cndzci14ICAgNCBkYXZpZCBnaXQgIDQwOTYgRGVjICA0IDIyOjQwIG9iamVjdHMKKyAgZHJ3eHJ3c3IteCAgIDQgZGF2aWQgZ2l0ICA0MDk2IE5vdiAgNyAxNDo1OCByZWZzCisgIGRyd3hyd3NyLXggICAyIGRhdmlkIGdpdCAgNDA5NiBEZWMgIDQgMjI6NDAgcmVtb3RlcworJCBscyAtbCBob29rcy91cGRhdGUgPDM+CisgIC1yLXhyLXhyLXggICAxIGRhdmlkIGdpdCAgMzUzNiBEZWMgIDQgMjI6NDAgdXBkYXRlCiskIGNhdCBpbmZvL2FsbG93ZWQtdXNlcnMgPDQ+CityZWZzL2hlYWRzL21hc3RlcglhbGljZVx8Y2luZHkKK3JlZnMvaGVhZHMvZG9jLXVwZGF0ZQlib2IKK3JlZnMvdGFncy92WzAtOV0qCWRhdmlkCistLS0tLS0tLS0tLS0KKysKKzwxPiBwbGFjZSB0aGUgZGV2ZWxvcGVycyBpbnRvIHRoZSBzYW1lIGdpdCBncm91cC4KKzwyPiBhbmQgbWFrZSB0aGUgc2hhcmVkIHJlcG9zaXRvcnkgd3JpdGFibGUgYnkgdGhlIGdyb3VwLgorPDM+IHVzZSB1cGRhdGUtaG9vayBleGFtcGxlIGJ5IENhcmwgZnJvbSBEb2N1bWVudGF0aW9uL2hvd3RvLworZm9yIGJyYW5jaCBwb2xpY3kgY29udHJvbC4KKzw0PiBhbGljZSBhbmQgY2luZHkgY2FuIHB1c2ggaW50byBtYXN0ZXIsIG9ubHkgYm9iIGNhbiBwdXNoIGludG8gZG9jLXVwZGF0ZS4KK2RhdmlkIGlzIHRoZSByZWxlYXNlIG1hbmFnZXIgYW5kIGlzIHRoZSBvbmx5IHBlcnNvbiB3aG8gY2FuCitjcmVhdGUgYW5kIHB1c2ggdmVyc2lvbiB0YWdzLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0ZmFxLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0ZmFxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzBkNjJkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRmYXEudHh0CkBAIC0wLDAgKzEsMzU1IEBACitnaXRmYXEoNykKKz09PT09PT09PQorCitOQU1FCistLS0tCitnaXRmYXEgLSBGcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucyBhYm91dCB1c2luZyBHaXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitnaXRmYXEKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoZSBleGFtcGxlcyBpbiB0aGlzIEZBUSBhc3N1bWUgYSBzdGFuZGFyZCBQT1NJWCBzaGVsbCwgbGlrZSBgYmFzaGAgb3IgYGRhc2hgLAorYW5kIGEgdXNlciwgQSBVIFRob3IsIHdobyBoYXMgdGhlIGFjY291bnQgYGF1dGhvcmAgb24gdGhlIGhvc3RpbmcgcHJvdmlkZXIKK2BnaXQuZXhhbXBsZS5vcmdgLgorCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK1tbdXNlci1uYW1lXV0KK1doYXQgc2hvdWxkIEkgcHV0IGluIGB1c2VyLm5hbWVgPzo6CisJWW91IHNob3VsZCBwdXQgeW91ciBwZXJzb25hbCBuYW1lLCBnZW5lcmFsbHkgYSBmb3JtIHVzaW5nIGEgZ2l2ZW4gbmFtZQorCWFuZCBmYW1pbHkgbmFtZS4gIEZvciBleGFtcGxlLCB0aGUgY3VycmVudCBtYWludGFpbmVyIG9mIEdpdCB1c2VzICJKdW5pbworCUMgSGFtYW5vIi4gIFRoaXMgd2lsbCBiZSB0aGUgbmFtZSBwb3J0aW9uIHRoYXQgaXMgc3RvcmVkIGluIGV2ZXJ5IGNvbW1pdAorCXlvdSBtYWtlLgorKworVGhpcyBjb25maWd1cmF0aW9uIGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0IG9uIGF1dGhlbnRpY2F0aW5nIHRvIHJlbW90ZSBzZXJ2aWNlczsKK2ZvciB0aGF0LCBzZWUgYGNyZWRlbnRpYWwudXNlcm5hbWVgIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworW1todHRwLXBvc3RidWZmZXJdXQorV2hhdCBkb2VzIGBodHRwLnBvc3RCdWZmZXJgIHJlYWxseSBkbz86OgorCVRoaXMgb3B0aW9uIGNoYW5nZXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0aGF0IEdpdCB1c2VzIHdoZW4gcHVzaGluZworCWRhdGEgdG8gYSByZW1vdGUgb3ZlciBIVFRQIG9yIEhUVFBTLiAgSWYgdGhlIGRhdGEgaXMgbGFyZ2VyIHRoYW4gdGhpcworCXNpemUsIGxpYmN1cmwsIHdoaWNoIGhhbmRsZXMgdGhlIEhUVFAgc3VwcG9ydCBmb3IgR2l0LCB3aWxsIHVzZSBjaHVua2VkCisJdHJhbnNmZXIgZW5jb2Rpbmcgc2luY2UgaXQgaXNuJ3Qga25vd24gYWhlYWQgb2YgdGltZSB3aGF0IHRoZSBzaXplIG9mCisJdGhlIHB1c2hlZCBkYXRhIHdpbGwgYmUuCisrCitMZWF2aW5nIHRoaXMgdmFsdWUgYXQgdGhlIGRlZmF1bHQgc2l6ZSBpcyBmaW5lIHVubGVzcyB5b3Uga25vdyB0aGF0IGVpdGhlciB0aGUKK3JlbW90ZSBzZXJ2ZXIgb3IgYSBwcm94eSBpbiB0aGUgbWlkZGxlIGRvZXNuJ3Qgc3VwcG9ydCBIVFRQLzEuMSAod2hpY2gKK2ludHJvZHVjZWQgdGhlIGNodW5rZWQgdHJhbnNmZXIgZW5jb2RpbmcpIG9yIGlzIGtub3duIHRvIGJlIGJyb2tlbiB3aXRoIGNodW5rZWQKK2RhdGEuICBUaGlzIGlzIG9mdGVuIChlcnJvbmVvdXNseSkgc3VnZ2VzdGVkIGFzIGEgc29sdXRpb24gZm9yIGdlbmVyaWMgcHVzaAorcHJvYmxlbXMsIGJ1dCBzaW5jZSBhbG1vc3QgZXZlcnkgc2VydmVyIGFuZCBwcm94eSBzdXBwb3J0cyBhdCBsZWFzdCBIVFRQLzEuMSwKK3JhaXNpbmcgdGhpcyB2YWx1ZSB1c3VhbGx5IGRvZXNuJ3Qgc29sdmUgbW9zdCBwdXNoIHByb2JsZW1zLiAgQSBzZXJ2ZXIgb3IgcHJveHkKK3RoYXQgZGlkbid0IGNvcnJlY3RseSBzdXBwb3J0IEhUVFAvMS4xIGFuZCBjaHVua2VkIHRyYW5zZmVyIGVuY29kaW5nIHdvdWxkbid0IGJlCit0aGF0IHVzZWZ1bCBvbiB0aGUgSW50ZXJuZXQgdG9kYXksIHNpbmNlIGl0IHdvdWxkIGJyZWFrIGxvdHMgb2YgdHJhZmZpYy4KKysKK05vdGUgdGhhdCBpbmNyZWFzaW5nIHRoaXMgdmFsdWUgd2lsbCBpbmNyZWFzZSB0aGUgbWVtb3J5IHVzZWQgb24gZXZlcnkgcmVsZXZhbnQKK3B1c2ggdGhhdCBHaXQgZG9lcyBvdmVyIEhUVFAgb3IgSFRUUFMsIHNpbmNlIHRoZSBlbnRpcmUgYnVmZmVyIGlzIGFsbG9jYXRlZAorcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCBpdCBpcyBhbGwgdXNlZC4gIFRodXMsIGl0J3MgYmVzdCB0byBsZWF2ZSBpdCBhdCB0aGUKK2RlZmF1bHQgdW5sZXNzIHlvdSBhcmUgc3VyZSB5b3UgbmVlZCBhIGRpZmZlcmVudCB2YWx1ZS4KKworW1tjb25maWd1cmUtZWRpdG9yXV0KK0hvdyBkbyBJIGNvbmZpZ3VyZSBhIGRpZmZlcmVudCBlZGl0b3I/OjoKKwlJZiB5b3UgaGF2ZW4ndCBzcGVjaWZpZWQgYW4gZWRpdG9yIHNwZWNpZmljYWxseSBmb3IgR2l0LCBpdCB3aWxsIGJ5IGRlZmF1bHQKKwl1c2UgdGhlIGVkaXRvciB5b3UndmUgY29uZmlndXJlZCB1c2luZyB0aGUgYFZJU1VBTGAgb3IgYEVESVRPUmAgZW52aXJvbm1lbnQKKwl2YXJpYWJsZXMsIG9yIGlmIG5laXRoZXIgaXMgc3BlY2lmaWVkLCB0aGUgc3lzdGVtIGRlZmF1bHQgKHdoaWNoIGlzIHVzdWFsbHkKKwlgdmlgKS4gIFNpbmNlIHNvbWUgcGVvcGxlIGZpbmQgYHZpYCBkaWZmaWN1bHQgdG8gdXNlIG9yIHByZWZlciBhIGRpZmZlcmVudAorCWVkaXRvciwgaXQgbWF5IGJlIGRlc2lyYWJsZSB0byBjaGFuZ2UgdGhlIGVkaXRvciB1c2VkLgorKworSWYgeW91IHdhbnQgdG8gY29uZmlndXJlIGEgZ2VuZXJhbCBlZGl0b3IgZm9yIG1vc3QgcHJvZ3JhbXMgd2hpY2ggbmVlZCBvbmUsIHlvdQorY2FuIGVkaXQgeW91ciBzaGVsbCBjb25maWd1cmF0aW9uIChlLmcuLCBgfi8uYmFzaHJjYCBvciBgfi8uenNoZW52YCkgdG8gY29udGFpbgorYSBsaW5lIHNldHRpbmcgdGhlIGBFRElUT1JgIG9yIGBWSVNVQUxgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGFuIGFwcHJvcHJpYXRlCit2YWx1ZS4gIEZvciBleGFtcGxlLCBpZiB5b3UgcHJlZmVyIHRoZSBlZGl0b3IgYG5hbm9gLCB0aGVuIHlvdSBjb3VsZCB3cml0ZSB0aGUKK2ZvbGxvd2luZzoKKysKKy0tLS0KK2V4cG9ydCBWSVNVQUw9bmFubworLS0tLQorKworSWYgeW91IHdhbnQgdG8gY29uZmlndXJlIGFuIGVkaXRvciBzcGVjaWZpY2FsbHkgZm9yIEdpdCwgeW91IGNhbiBlaXRoZXIgc2V0IHRoZQorYGNvcmUuZWRpdG9yYCBjb25maWd1cmF0aW9uIHZhbHVlIG9yIHRoZSBgR0lUX0VESVRPUmAgZW52aXJvbm1lbnQgdmFyaWFibGUuICBZb3UKK2NhbiBzZWUgbGlua2dpdDpnaXQtdmFyWzFdIGZvciBkZXRhaWxzIG9uIHRoZSBvcmRlciBpbiB3aGljaCB0aGVzZSBvcHRpb25zIGFyZQorY29uc3VsdGVkLgorKworTm90ZSB0aGF0IGluIGFsbCBjYXNlcywgdGhlIGVkaXRvciB2YWx1ZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgc2hlbGwsIHNvIGFueQorYXJndW1lbnRzIGNvbnRhaW5pbmcgc3BhY2VzIHNob3VsZCBiZSBhcHByb3ByaWF0ZWx5IHF1b3RlZC4gIEFkZGl0aW9uYWxseSwgaWYKK3lvdXIgZWRpdG9yIG5vcm1hbGx5IGRldGFjaGVzIGZyb20gdGhlIHRlcm1pbmFsIHdoZW4gaW52b2tlZCwgeW91IHNob3VsZCBzcGVjaWZ5CitpdCB3aXRoIGFuIGFyZ3VtZW50IHRoYXQgbWFrZXMgaXQgbm90IGRvIHRoYXQsIG9yIGVsc2UgR2l0IHdpbGwgbm90IHNlZSBhbnkKK2NoYW5nZXMuICBBbiBleGFtcGxlIG9mIGEgY29uZmlndXJhdGlvbiBhZGRyZXNzaW5nIGJvdGggb2YgdGhlc2UgaXNzdWVzIG9uCitXaW5kb3dzIHdvdWxkIGJlIHRoZSBjb25maWd1cmF0aW9uIGAiQzpcUHJvZ3JhbSBGaWxlc1xWaW1cZ3ZpbS5leGUiIC0tbm9mb3JrYCwKK3doaWNoIHF1b3RlcyB0aGUgZmlsZW5hbWUgd2l0aCBzcGFjZXMgYW5kIHNwZWNpZmllcyB0aGUgYC0tbm9mb3JrYCBvcHRpb24gdG8KK2F2b2lkIGJhY2tncm91bmRpbmcgdGhlIHByb2Nlc3MuCisKK0NyZWRlbnRpYWxzCistLS0tLS0tLS0tLQorCitbW2h0dHAtY3JlZGVudGlhbHNdXQorSG93IGRvIEkgc3BlY2lmeSBteSBjcmVkZW50aWFscyB3aGVuIHB1c2hpbmcgb3ZlciBIVFRQPzo6CisJVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMgaXMgdG8gdXNlIGEgY3JlZGVudGlhbCBoZWxwZXIgdmlhIHRoZQorCWBjcmVkZW50aWFsLmhlbHBlcmAgY29uZmlndXJhdGlvbi4gIE1vc3Qgc3lzdGVtcyBwcm92aWRlIGEgc3RhbmRhcmQKKwljaG9pY2UgdG8gaW50ZWdyYXRlIHdpdGggdGhlIHN5c3RlbSBjcmVkZW50aWFsIG1hbmFnZXIuICBGb3IgZXhhbXBsZSwKKwlHaXQgZm9yIFdpbmRvd3MgcHJvdmlkZXMgdGhlIGB3aW5jcmVkYCBjcmVkZW50aWFsIG1hbmFnZXIsIG1hY09TIGhhcyB0aGUKKwlgb3N4a2V5Y2hhaW5gIGNyZWRlbnRpYWwgbWFuYWdlciwgYW5kIFVuaXggc3lzdGVtcyB3aXRoIGEgc3RhbmRhcmQKKwlkZXNrdG9wIGVudmlyb25tZW50IGNhbiB1c2UgdGhlIGBsaWJzZWNyZXRgIGNyZWRlbnRpYWwgbWFuYWdlci4gIEFsbCBvZgorCXRoZXNlIHN0b3JlIGNyZWRlbnRpYWxzIGluIGFuIGVuY3J5cHRlZCBzdG9yZSB0byBrZWVwIHlvdXIgcGFzc3dvcmRzIG9yCisJdG9rZW5zIHNlY3VyZS4KKysKK0luIGFkZGl0aW9uLCB5b3UgY2FuIHVzZSB0aGUgYHN0b3JlYCBjcmVkZW50aWFsIG1hbmFnZXIgd2hpY2ggc3RvcmVzIGluIGEgZmlsZQoraW4geW91ciBob21lIGRpcmVjdG9yeSwgb3IgdGhlIGBjYWNoZWAgY3JlZGVudGlhbCBtYW5hZ2VyLCB3aGljaCBkb2VzIG5vdAorcGVybWFuZW50bHkgc3RvcmUgeW91ciBjcmVkZW50aWFscywgYnV0IGRvZXMgcHJldmVudCB5b3UgZnJvbSBiZWluZyBwcm9tcHRlZCBmb3IKK3RoZW0gZm9yIGEgY2VydGFpbiBwZXJpb2Qgb2YgdGltZS4KKysKK1lvdSBjYW4gYWxzbyBqdXN0IGVudGVyIHlvdXIgcGFzc3dvcmQgd2hlbiBwcm9tcHRlZC4gIFdoaWxlIGl0IGlzIHBvc3NpYmxlIHRvCitwbGFjZSB0aGUgcGFzc3dvcmQgKHdoaWNoIG11c3QgYmUgcGVyY2VudC1lbmNvZGVkKSBpbiB0aGUgVVJMLCB0aGlzIGlzIG5vdAorcGFydGljdWxhcmx5IHNlY3VyZSBhbmQgY2FuIGxlYWQgdG8gYWNjaWRlbnRhbCBleHBvc3VyZSBvZiBjcmVkZW50aWFscywgc28gaXQgaXMKK25vdCByZWNvbW1lbmRlZC4KKworW1todHRwLWNyZWRlbnRpYWxzLWVudmlyb25tZW50XV0KK0hvdyBkbyBJIHJlYWQgYSBwYXNzd29yZCBvciB0b2tlbiBmcm9tIGFuIGVudmlyb25tZW50IHZhcmlhYmxlPzo6CisJVGhlIGBjcmVkZW50aWFsLmhlbHBlcmAgY29uZmlndXJhdGlvbiBvcHRpb24gY2FuIGFsc28gdGFrZSBhbiBhcmJpdHJhcnkKKwlzaGVsbCBjb21tYW5kIHRoYXQgcHJvZHVjZXMgdGhlIGNyZWRlbnRpYWwgcHJvdG9jb2wgb24gc3RhbmRhcmQgb3V0cHV0LgorCVRoaXMgaXMgdXNlZnVsIHdoZW4gcGFzc2luZyBjcmVkZW50aWFscyBpbnRvIGEgY29udGFpbmVyLCBmb3IgZXhhbXBsZS4KKysKK1N1Y2ggYSBzaGVsbCBjb21tYW5kIGNhbiBiZSBzcGVjaWZpZWQgYnkgc3RhcnRpbmcgdGhlIG9wdGlvbiB2YWx1ZSB3aXRoIGFuCitleGNsYW1hdGlvbiBwb2ludC4gIElmIHlvdXIgcGFzc3dvcmQgb3IgdG9rZW4gd2VyZSBzdG9yZWQgaW4gdGhlIGBHSVRfVE9LRU5gLAoreW91IGNvdWxkIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gc2V0IHlvdXIgY3JlZGVudGlhbCBoZWxwZXI6CisrCistLS0tCiskIGdpdCBjb25maWcgY3JlZGVudGlhbC5oZWxwZXIgXAorCSchZigpIHsgZWNobyB1c2VybmFtZT1hdXRob3I7IGVjaG8gInBhc3N3b3JkPSRHSVRfVE9LRU4iOyB9O2YnCistLS0tCisKK1tbaHR0cC1yZXNldC1jcmVkZW50aWFsc11dCitIb3cgZG8gSSBjaGFuZ2UgdGhlIHBhc3N3b3JkIG9yIHRva2VuIEkndmUgc2F2ZWQgaW4gbXkgY3JlZGVudGlhbCBtYW5hZ2VyPzo6CisJVXN1YWxseSwgaWYgdGhlIHBhc3N3b3JkIG9yIHRva2VuIGlzIGludmFsaWQsIEdpdCB3aWxsIGVyYXNlIGl0IGFuZAorCXByb21wdCBmb3IgYSBuZXcgb25lLiAgSG93ZXZlciwgdGhlcmUgYXJlIHRpbWVzIHdoZW4gdGhpcyBkb2Vzbid0IGFsd2F5cworCWhhcHBlbi4gIFRvIGNoYW5nZSB0aGUgcGFzc3dvcmQgb3IgdG9rZW4sIHlvdSBjYW4gZXJhc2UgdGhlIGV4aXN0aW5nCisJY3JlZGVudGlhbHMgYW5kIHRoZW4gR2l0IHdpbGwgcHJvbXB0IGZvciBuZXcgb25lcy4gIFRvIGVyYXNlCisJY3JlZGVudGlhbHMsIHVzZSBhIHN5bnRheCBsaWtlIHRoZSBmb2xsb3dpbmcgKHN1YnN0aXR1dGluZyB5b3VyIHVzZXJuYW1lCisJYW5kIHRoZSBob3N0bmFtZSk6CisrCistLS0tCiskIGVjaG8gdXJsPWh0dHBzOi8vYXV0aG9yQGdpdC5leGFtcGxlLm9yZyB8IGdpdCBjcmVkZW50aWFsIHJlamVjdAorLS0tLQorCitbW211bHRpcGxlLWFjY291bnRzLWh0dHBdXQorSG93IGRvIEkgdXNlIG11bHRpcGxlIGFjY291bnRzIHdpdGggdGhlIHNhbWUgaG9zdGluZyBwcm92aWRlciB1c2luZyBIVFRQPzo6CisJVXN1YWxseSB0aGUgZWFzaWVzdCB3YXkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVzZSBhY2NvdW50cyBpcyB0byB1c2UKKwl0aGUgdXNlcm5hbWUgaW4gdGhlIFVSTC4gIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0aGUgYWNjb3VudHMgYGF1dGhvcmAKKwlhbmQgYGNvbW1pdHRlcmAgb24gYGdpdC5leGFtcGxlLm9yZ2AsIHlvdSBjYW4gdXNlIHRoZSBVUkxzCisJaHR0cHM6Ly9hdXRob3JAZ2l0LmV4YW1wbGUub3JnL29yZzEvcHJvamVjdDEuZ2l0IGFuZAorCWh0dHBzOi8vY29tbWl0dGVyQGdpdC5leGFtcGxlLm9yZy9vcmcyL3Byb2plY3QyLmdpdC4gIFRoaXMgd2F5LCB3aGVuIHlvdQorCXVzZSBhIGNyZWRlbnRpYWwgaGVscGVyLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgdHJ5IHRvIGxvb2sgdXAgdGhlCisJY29ycmVjdCBjcmVkZW50aWFscyBmb3IgeW91ciBhY2NvdW50LiAgSWYgeW91IGFscmVhZHkgaGF2ZSBhIHJlbW90ZSBzZXQKKwl1cCwgeW91IGNhbiBjaGFuZ2UgdGhlIFVSTCB3aXRoIHNvbWV0aGluZyBsaWtlIGBnaXQgcmVtb3RlIHNldC11cmwKKwlvcmlnaW4gaHR0cHM6Ly9hdXRob3JAZ2l0LmV4YW1wbGUub3JnL29yZzEvcHJvamVjdDEuZ2l0YCAoc2VlCisJbGlua2dpdDpnaXQtcmVtb3RlWzFdIGZvciBkZXRhaWxzKS4KKworW1ttdWx0aXBsZS1hY2NvdW50cy1zc2hdXQorSG93IGRvIEkgdXNlIG11bHRpcGxlIGFjY291bnRzIHdpdGggdGhlIHNhbWUgaG9zdGluZyBwcm92aWRlciB1c2luZyBTU0g/OjoKKwlXaXRoIG1vc3QgaG9zdGluZyBwcm92aWRlcnMgdGhhdCBzdXBwb3J0IFNTSCwgYSBzaW5nbGUga2V5IHBhaXIgdW5pcXVlbHkKKwlpZGVudGlmaWVzIGEgdXNlci4gIFRoZXJlZm9yZSwgdG8gdXNlIG11bHRpcGxlIGFjY291bnRzLCBpdCdzIG5lY2Vzc2FyeQorCXRvIGNyZWF0ZSBhIGtleSBwYWlyIGZvciBlYWNoIGFjY291bnQuICBJZiB5b3UncmUgdXNpbmcgYSByZWFzb25hYmx5CisJbW9kZXJuIE9wZW5TU0ggdmVyc2lvbiwgeW91IGNhbiBjcmVhdGUgYSBuZXcga2V5IHBhaXIgd2l0aCBzb21ldGhpbmcKKwlsaWtlIGBzc2gta2V5Z2VuIC10IGVkMjU1MTkgLWYgfi8uc3NoL2lkX2NvbW1pdHRlcmAuICBZb3UgY2FuIHRoZW4KKwlyZWdpc3RlciB0aGUgcHVibGljIGtleSAoaW4gdGhpcyBjYXNlLCBgfi8uc3NoL2lkX2NvbW1pdHRlci5wdWJgOyBub3RlCisJdGhlIGAucHViYCkgd2l0aCB0aGUgaG9zdGluZyBwcm92aWRlci4KKysKK01vc3QgaG9zdGluZyBwcm92aWRlcnMgdXNlIGEgc2luZ2xlIFNTSCBhY2NvdW50IGZvciBwdXNoaW5nOyB0aGF0IGlzLCBhbGwgdXNlcnMKK3B1c2ggdG8gdGhlIGBnaXRgIGFjY291bnQgKGUuZy4sIGBnaXRAZ2l0LmV4YW1wbGUub3JnYCkuICBJZiB0aGF0J3MgdGhlIGNhc2UgZm9yCit5b3VyIHByb3ZpZGVyLCB5b3UgY2FuIHNldCB1cCBtdWx0aXBsZSBhbGlhc2VzIGluIFNTSCB0byBtYWtlIGl0IGNsZWFyIHdoaWNoIGtleQorcGFpciB0byB1c2UuICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIHdyaXRlIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgaW4KK2B+Ly5zc2gvY29uZmlnYCwgc3Vic3RpdHV0aW5nIHRoZSBwcm9wZXIgcHJpdmF0ZSBrZXkgZmlsZToKKysKKy0tLS0KKyMgVGhpcyBpcyB0aGUgYWNjb3VudCBmb3IgYXV0aG9yIG9uIGdpdC5leGFtcGxlLm9yZy4KK0hvc3QgZXhhbXBsZV9hdXRob3IKKwlIb3N0TmFtZSBnaXQuZXhhbXBsZS5vcmcKKwlVc2VyIGdpdAorCSMgVGhpcyBpcyB0aGUga2V5IHBhaXIgcmVnaXN0ZXJlZCBmb3IgYXV0aG9yIHdpdGggZ2l0LmV4YW1wbGUub3JnLgorCUlkZW50aXR5RmlsZSB+Ly5zc2gvaWRfYXV0aG9yCisJSWRlbnRpdGllc09ubHkgeWVzCisjIFRoaXMgaXMgdGhlIGFjY291bnQgZm9yIGNvbW1pdHRlciBvbiBnaXQuZXhhbXBsZS5vcmcuCitIb3N0IGV4YW1wbGVfY29tbWl0dGVyCisJSG9zdE5hbWUgZ2l0LmV4YW1wbGUub3JnCisJVXNlciBnaXQKKwkjIFRoaXMgaXMgdGhlIGtleSBwYWlyIHJlZ2lzdGVyZWQgZm9yIGNvbW1pdHRlciB3aXRoIGdpdC5leGFtcGxlLm9yZy4KKwlJZGVudGl0eUZpbGUgfi8uc3NoL2lkX2NvbW1pdHRlcgorCUlkZW50aXRpZXNPbmx5IHllcworLS0tLQorKworVGhlbiwgeW91IGNhbiBhZGp1c3QgeW91ciBwdXNoIFVSTCB0byB1c2UgYGdpdEBleGFtcGxlX2F1dGhvcmAgb3IKK2BnaXRAZXhhbXBsZV9jb21taXR0ZXJgIGluc3RlYWQgb2YgYGdpdEBleGFtcGxlLm9yZ2AgKGUuZy4sIGBnaXQgcmVtb3RlIHNldC11cmwKK2dpdEBleGFtcGxlX2F1dGhvcjpvcmcxL3Byb2plY3QxLmdpdGApLgorCitDb21tb24gSXNzdWVzCistLS0tLS0tLS0tLS0tCisKK1tbbGFzdC1jb21taXQtYW1lbmRdXQorSSd2ZSBtYWRlIGEgbWlzdGFrZSBpbiB0aGUgbGFzdCBjb21taXQuICBIb3cgZG8gSSBjaGFuZ2UgaXQ/OjoKKwlZb3UgY2FuIG1ha2UgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZSB0byB5b3VyIHdvcmtpbmcgdHJlZSwgcnVuIGBnaXQgYWRkCisJPGZpbGU+YCBvciBgZ2l0IHJtIDxmaWxlPmAsIGFzIGFwcHJvcHJpYXRlLCB0byBzdGFnZSBpdCwgYW5kIHRoZW4gYGdpdAorCWNvbW1pdCAtLWFtZW5kYC4gIFlvdXIgY2hhbmdlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGNvbW1pdCwgYW5kIHlvdSdsbAorCWJlIHByb21wdGVkIHRvIGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIGFnYWluOyBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlCisJb3JpZ2luYWwgbWVzc2FnZSB2ZXJiYXRpbSwgeW91IGNhbiB1c2UgdGhlIGAtLW5vLWVkaXRgIG9wdGlvbiB0byBgZ2l0CisJY29tbWl0YCBpbiBhZGRpdGlvbiwgb3IganVzdCBzYXZlIGFuZCBxdWl0IHdoZW4geW91ciBlZGl0b3Igb3BlbnMuCisKK1tbdW5kby1wcmV2aW91cy1jaGFuZ2VdXQorSSd2ZSBtYWRlIGEgY2hhbmdlIHdpdGggYSBidWcgYW5kIGl0J3MgYmVlbiBpbmNsdWRlZCBpbiB0aGUgbWFpbiBicmFuY2guICBIb3cgc2hvdWxkIEkgdW5kbyBpdD86OgorCVRoZSB1c3VhbCB3YXkgdG8gZGVhbCB3aXRoIHRoaXMgaXMgdG8gdXNlIGBnaXQgcmV2ZXJ0YC4gIFRoaXMgcHJlc2VydmVzCisJdGhlIGhpc3RvcnkgdGhhdCB0aGUgb3JpZ2luYWwgY2hhbmdlIHdhcyBtYWRlIGFuZCB3YXMgYSB2YWx1YWJsZQorCWNvbnRyaWJ1dGlvbiwgYnV0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBjb21taXQgdGhhdCB1bmRvZXMgdGhvc2UgY2hhbmdlcworCWJlY2F1c2UgdGhlIG9yaWdpbmFsIGhhZCBhIHByb2JsZW0uICBUaGUgY29tbWl0IG1lc3NhZ2Ugb2YgdGhlIHJldmVydAorCWluZGljYXRlcyB0aGUgY29tbWl0IHdoaWNoIHdhcyByZXZlcnRlZCBhbmQgaXMgdXN1YWxseSBlZGl0ZWQgdG8gaW5jbHVkZQorCWFuIGV4cGxhbmF0aW9uIGFzIHRvIHdoeSB0aGUgcmV2ZXJ0IHdhcyBtYWRlLgorCitbW2lnbm9yZS10cmFja2VkLWZpbGVzXV0KK0hvdyBkbyBJIGlnbm9yZSBjaGFuZ2VzIHRvIGEgdHJhY2tlZCBmaWxlPzo6CisJR2l0IGRvZXNuJ3QgcHJvdmlkZSBhIHdheSB0byBkbyB0aGlzLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGlmIEdpdCBuZWVkcworCXRvIG92ZXJ3cml0ZSB0aGlzIGZpbGUsIHN1Y2ggYXMgZHVyaW5nIGEgY2hlY2tvdXQsIGl0IGRvZXNuJ3Qga25vdworCXdoZXRoZXIgdGhlIGNoYW5nZXMgdG8gdGhlIGZpbGUgYXJlIHByZWNpb3VzIGFuZCBzaG91bGQgYmUga2VwdCwgb3IKKwl3aGV0aGVyIHRoZXkgYXJlIGlycmVsZXZhbnQgYW5kIGNhbiBzYWZlbHkgYmUgZGVzdHJveWVkLiAgVGhlcmVmb3JlLCBpdAorCWhhcyB0byB0YWtlIHRoZSBzYWZlIHJvdXRlIGFuZCBhbHdheXMgcHJlc2VydmUgdGhlbS4KKysKK0l0J3MgdGVtcHRpbmcgdG8gdHJ5IHRvIHVzZSBjZXJ0YWluIGZlYXR1cmVzIG9mIGBnaXQgdXBkYXRlLWluZGV4YCwgbmFtZWx5IHRoZQorYXNzdW1lLXVuY2hhbmdlZCBhbmQgc2tpcC13b3JrdHJlZSBiaXRzLCBidXQgdGhlc2UgZG9uJ3Qgd29yayBwcm9wZXJseSBmb3IgdGhpcworcHVycG9zZSBhbmQgc2hvdWxkbid0IGJlIHVzZWQgdGhpcyB3YXkuCisrCitJZiB5b3VyIGdvYWwgaXMgdG8gbW9kaWZ5IGEgY29uZmlndXJhdGlvbiBmaWxlLCBpdCBjYW4gb2Z0ZW4gYmUgaGVscGZ1bCB0byBoYXZlCithIGZpbGUgY2hlY2tlZCBpbnRvIHRoZSByZXBvc2l0b3J5IHdoaWNoIGlzIGEgdGVtcGxhdGUgb3Igc2V0IG9mIGRlZmF1bHRzIHdoaWNoCitjYW4gdGhlbiBiZSBjb3BpZWQgYWxvbmdzaWRlIGFuZCBtb2RpZmllZCBhcyBhcHByb3ByaWF0ZS4gIFRoaXMgc2Vjb25kLCBtb2RpZmllZAorZmlsZSBpcyB1c3VhbGx5IGlnbm9yZWQgdG8gcHJldmVudCBhY2NpZGVudGFsbHkgY29tbWl0dGluZyBpdC4KKworW1tmaWxlcy1pbi0uZ2l0aWdub3JlLWFyZS10cmFja2VkXV0KK0kgYXNrZWQgR2l0IHRvIGlnbm9yZSB2YXJpb3VzIGZpbGVzLCB5ZXQgdGhleSBhcmUgc3RpbGwgdHJhY2tlZDo6CisJQSBgZ2l0aWdub3JlYCBmaWxlIGVuc3VyZXMgdGhhdCBjZXJ0YWluIGZpbGUocykgd2hpY2ggYXJlIG5vdAorCXRyYWNrZWQgYnkgR2l0IHJlbWFpbiB1bnRyYWNrZWQuICBIb3dldmVyLCBzb21ldGltZXMgcGFydGljdWxhcgorCWZpbGUocykgbWF5IGhhdmUgYmVlbiB0cmFja2VkIGJlZm9yZSBhZGRpbmcgdGhlbSBpbnRvIHRoZQorCWAuZ2l0aWdub3JlYCwgaGVuY2UgdGhleSBzdGlsbCByZW1haW4gdHJhY2tlZC4gIFRvIHVudHJhY2sgYW5kCisJaWdub3JlIGZpbGVzL3BhdHRlcm5zLCB1c2UgYGdpdCBybSAtLWNhY2hlZCA8ZmlsZS9wYXR0ZXJuPmAKKwlhbmQgYWRkIGEgcGF0dGVybiB0byBgLmdpdGlnbm9yZWAgdGhhdCBtYXRjaGVzIHRoZSA8ZmlsZT4uCisJU2VlIGxpbmtnaXQ6Z2l0aWdub3JlWzVdIGZvciBkZXRhaWxzLgorCitbW2ZldGNoaW5nLWFuZC1wdWxsaW5nXV0KK0hvdyBkbyBJIGtub3cgaWYgSSB3YW50IHRvIGRvIGEgZmV0Y2ggb3IgYSBwdWxsPzo6CisJQSBmZXRjaCBzdG9yZXMgYSBjb3B5IG9mIHRoZSBsYXRlc3QgY2hhbmdlcyBmcm9tIHRoZSByZW1vdGUKKwlyZXBvc2l0b3J5LCB3aXRob3V0IG1vZGlmeWluZyB0aGUgd29ya2luZyB0cmVlIG9yIGN1cnJlbnQgYnJhbmNoLgorCVlvdSBjYW4gdGhlbiBhdCB5b3VyIGxlaXN1cmUgaW5zcGVjdCwgbWVyZ2UsIHJlYmFzZSBvbiB0b3Agb2YsIG9yCisJaWdub3JlIHRoZSB1cHN0cmVhbSBjaGFuZ2VzLiAgQSBwdWxsIGNvbnNpc3RzIG9mIGEgZmV0Y2ggZm9sbG93ZWQKKwlpbW1lZGlhdGVseSBieSBlaXRoZXIgYSBtZXJnZSBvciByZWJhc2UuICBTZWUgbGlua2dpdDpnaXQtcHVsbFsxXS4KKworSG9va3MKKy0tLS0tCisKK1tbcmVzdHJpY3Qtd2l0aC1ob29rc11dCitIb3cgZG8gSSB1c2UgaG9va3MgdG8gcHJldmVudCB1c2VycyBmcm9tIG1ha2luZyBjZXJ0YWluIGNoYW5nZXM/OjoKKwlUaGUgb25seSBzYWZlIHBsYWNlIHRvIG1ha2UgdGhlc2UgY2hhbmdlcyBpcyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkKKwkoaS5lLiwgdGhlIEdpdCBzZXJ2ZXIpLCB1c3VhbGx5IGluIHRoZSBgcHJlLXJlY2VpdmVgIGhvb2sgb3IgaW4gYQorCWNvbnRpbnVvdXMgaW50ZWdyYXRpb24gKENJKSBzeXN0ZW0uICBUaGVzZSBhcmUgdGhlIGxvY2F0aW9ucyBpbiB3aGljaAorCXBvbGljeSBjYW4gYmUgZW5mb3JjZWQgZWZmZWN0aXZlbHkuCisrCitJdCdzIGNvbW1vbiB0byB0cnkgdG8gdXNlIGBwcmUtY29tbWl0YCBob29rcyAob3IsIGZvciBjb21taXQgbWVzc2FnZXMsCitgY29tbWl0LW1zZ2AgaG9va3MpIHRvIGNoZWNrIHRoZXNlIHRoaW5ncywgd2hpY2ggaXMgZ3JlYXQgaWYgeW91J3JlIHdvcmtpbmcgYXMgYQorc29sbyBkZXZlbG9wZXIgYW5kIHdhbnQgdGhlIHRvb2xpbmcgdG8gaGVscCB5b3UuICBIb3dldmVyLCB1c2luZyBob29rcyBvbiBhCitkZXZlbG9wZXIgbWFjaGluZSBpcyBub3QgZWZmZWN0aXZlIGFzIGEgcG9saWN5IGNvbnRyb2wgYmVjYXVzZSBhIHVzZXIgY2FuIGJ5cGFzcwordGhlc2UgaG9va3Mgd2l0aCBgLS1uby12ZXJpZnlgIHdpdGhvdXQgYmVpbmcgbm90aWNlZCAoYW1vbmcgdmFyaW91cyBvdGhlciB3YXlzKS4KK0dpdCBhc3N1bWVzIHRoYXQgdGhlIHVzZXIgaXMgaW4gY29udHJvbCBvZiB0aGVpciBsb2NhbCByZXBvc2l0b3JpZXMgYW5kIGRvZXNuJ3QKK3RyeSB0byBwcmV2ZW50IHRoaXMgb3IgdGF0dGxlIG9uIHRoZSB1c2VyLgorKworSW4gYWRkaXRpb24sIHNvbWUgYWR2YW5jZWQgdXNlcnMgZmluZCBgcHJlLWNvbW1pdGAgaG9va3MgdG8gYmUgYW4gaW1wZWRpbWVudCB0bword29ya2Zsb3dzIHRoYXQgdXNlIHRlbXBvcmFyeSBjb21taXRzIHRvIHN0YWdlIHdvcmsgaW4gcHJvZ3Jlc3Mgb3IgdGhhdCBjcmVhdGUKK2ZpeHVwIGNvbW1pdHMsIHNvIGl0J3MgYmV0dGVyIHRvIHB1c2ggdGhlc2Uga2luZHMgb2YgY2hlY2tzIHRvIHRoZSBzZXJ2ZXIKK2FueXdheS4KKworQ3Jvc3MtUGxhdGZvcm0gSXNzdWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworW1t3aW5kb3dzLXRleHQtYmluYXJ5XV0KK0knbSBvbiBXaW5kb3dzIGFuZCBteSB0ZXh0IGZpbGVzIGFyZSBkZXRlY3RlZCBhcyBiaW5hcnkuOjoKKwlHaXQgd29ya3MgYmVzdCB3aGVuIHlvdSBzdG9yZSB0ZXh0IGZpbGVzIGFzIFVURi04LiAgTWFueSBwcm9ncmFtcyBvbgorCVdpbmRvd3Mgc3VwcG9ydCBVVEYtOCwgYnV0IHNvbWUgZG8gbm90IGFuZCBvbmx5IHVzZSB0aGUgbGl0dGxlLWVuZGlhbgorCVVURi0xNiBmb3JtYXQsIHdoaWNoIEdpdCBkZXRlY3RzIGFzIGJpbmFyeS4gIElmIHlvdSBjYW4ndCB1c2UgVVRGLTggd2l0aAorCXlvdXIgcHJvZ3JhbXMsIHlvdSBjYW4gc3BlY2lmeSBhIHdvcmtpbmcgdHJlZSBlbmNvZGluZyB0aGF0IGluZGljYXRlcworCXdoaWNoIGVuY29kaW5nIHlvdXIgZmlsZXMgc2hvdWxkIGJlIGNoZWNrZWQgb3V0IHdpdGgsIHdoaWxlIHN0aWxsCisJc3RvcmluZyB0aGVzZSBmaWxlcyBhcyBVVEYtOCBpbiB0aGUgcmVwb3NpdG9yeS4gIFRoaXMgYWxsb3dzIHRvb2xzIGxpa2UKKwlsaW5rZ2l0OmdpdC1kaWZmWzFdIHRvIHdvcmsgYXMgZXhwZWN0ZWQsIHdoaWxlIHN0aWxsIGFsbG93aW5nIHlvdXIgdG9vbHMKKwl0byB3b3JrLgorKworVG8gZG8gc28sIHlvdSBjYW4gc3BlY2lmeSBhIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBwYXR0ZXJuIHdpdGggdGhlCitgd29ya2luZy10cmVlLWVuY29kaW5nYCBhdHRyaWJ1dGUuICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBwYXR0ZXJuIHNldHMgYWxsCitDIGZpbGVzIHRvIHVzZSBVVEYtMTZMRS1CT00sIHdoaWNoIGlzIGEgY29tbW9uIGVuY29kaW5nIG9uIFdpbmRvd3M6CisrCistLS0tCisqLmMJd29ya2luZy10cmVlLWVuY29kaW5nPVVURi0xNkxFLUJPTQorLS0tLQorKworWW91IHdpbGwgbmVlZCB0byBydW4gYGdpdCBhZGQgLS1yZW5vcm1hbGl6ZWAgdG8gaGF2ZSB0aGlzIHRha2UgZWZmZWN0LiAgTm90ZQordGhhdCBpZiB5b3UgYXJlIG1ha2luZyB0aGVzZSBjaGFuZ2VzIG9uIGEgcHJvamVjdCB0aGF0IGlzIHVzZWQgYWNyb3NzIHBsYXRmb3JtcywKK3lvdSdsbCBwcm9iYWJseSB3YW50IHRvIG1ha2UgaXQgaW4gYSBwZXItdXNlciBjb25maWd1cmF0aW9uIGZpbGUgb3IgaW4gdGhlIG9uZQoraW4gYCRHSVRfRElSL2luZm8vYXR0cmlidXRlc2AsIHNpbmNlIG1ha2luZyBpdCBpbiBhIGAuZ2l0YXR0cmlidXRlc2AgZmlsZSBpbiB0aGUKK3JlcG9zaXRvcnkgd2lsbCBhcHBseSB0byBhbGwgdXNlcnMgb2YgdGhlIHJlcG9zaXRvcnkuCisrCitTZWUgdGhlIGZvbGxvd2luZyBlbnRyeSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgbm9ybWFsaXppbmcgbGluZSBlbmRpbmdzIGFzIHdlbGwsCithbmQgc2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBhdHRyaWJ1dGUgZmlsZXMuCisKK1tbd2luZG93cy1kaWZmLWNvbnRyb2wtbV1dCitJJ20gb24gV2luZG93cyBhbmQgZ2l0IGRpZmYgc2hvd3MgbXkgZmlsZXMgYXMgaGF2aW5nIGEgYF5NYCBhdCB0aGUgZW5kLjo6CisJQnkgZGVmYXVsdCwgR2l0IGV4cGVjdHMgZmlsZXMgdG8gYmUgc3RvcmVkIHdpdGggVW5peCBsaW5lIGVuZGluZ3MuICBBcyBzdWNoLAorCXRoZSBjYXJyaWFnZSByZXR1cm4gKGBeTWApIHRoYXQgaXMgcGFydCBvZiBhIFdpbmRvd3MgbGluZSBlbmRpbmcgaXMgc2hvd24KKwliZWNhdXNlIGl0IGlzIGNvbnNpZGVyZWQgdG8gYmUgdHJhaWxpbmcgd2hpdGVzcGFjZS4gIEdpdCBkZWZhdWx0cyB0byBzaG93aW5nCisJdHJhaWxpbmcgd2hpdGVzcGFjZSBvbmx5IG9uIG5ldyBsaW5lcywgbm90IGV4aXN0aW5nIG9uZXMuCisrCitZb3UgY2FuIHN0b3JlIHRoZSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSB3aXRoIFVuaXggbGluZSBlbmRpbmdzIGFuZCBjb252ZXJ0Cit0aGVtIGF1dG9tYXRpY2FsbHkgdG8geW91ciBwbGF0Zm9ybSdzIGxpbmUgZW5kaW5ncy4gIFRvIGRvIHRoYXQsIHNldCB0aGUKK2NvbmZpZ3VyYXRpb24gb3B0aW9uIGBjb3JlLmVvbGAgdG8gYG5hdGl2ZWAgYW5kIHNlZSB0aGUgZm9sbG93aW5nIGVudHJ5IGZvcgoraW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGNvbmZpZ3VyZSBmaWxlcyBhcyB0ZXh0IG9yIGJpbmFyeS4KKysKK1lvdSBjYW4gYWxzbyBjb250cm9sIHRoaXMgYmVoYXZpb3Igd2l0aCB0aGUgYGNvcmUud2hpdGVzcGFjZWAgc2V0dGluZyBpZiB5b3UKK2Rvbid0IHdpc2ggdG8gcmVtb3ZlIHRoZSBjYXJyaWFnZSByZXR1cm5zIGZyb20geW91ciBsaW5lIGVuZGluZ3MuCisKK1tbcmVjb21tZW5kZWQtc3RvcmFnZS1zZXR0aW5nc11dCitXaGF0J3MgdGhlIHJlY29tbWVuZGVkIHdheSB0byBzdG9yZSBmaWxlcyBpbiBHaXQ/OjoKKwlXaGlsZSBHaXQgY2FuIHN0b3JlIGFuZCBoYW5kbGUgYW55IGZpbGUgb2YgYW55IHR5cGUsIHRoZXJlIGFyZSBzb21lCisJc2V0dGluZ3MgdGhhdCB3b3JrIGJldHRlciB0aGFuIG90aGVycy4gIEluIGdlbmVyYWwsIHdlIHJlY29tbWVuZCB0aGF0CisJdGV4dCBmaWxlcyBiZSBzdG9yZWQgaW4gVVRGLTggd2l0aG91dCBhIGJ5dGUtb3JkZXIgbWFyayAoQk9NKSB3aXRoIExGCisJKFVuaXgtc3R5bGUpIGVuZGluZ3MuICBXZSBhbHNvIHJlY29tbWVuZCB0aGUgdXNlIG9mIFVURi04IChhZ2FpbiwKKwl3aXRob3V0IEJPTSkgaW4gY29tbWl0IG1lc3NhZ2VzLiAgVGhlc2UgYXJlIHRoZSBzZXR0aW5ncyB0aGF0IHdvcmsgYmVzdAorCWFjcm9zcyBwbGF0Zm9ybXMgYW5kIHdpdGggdG9vbHMgc3VjaCBhcyBgZ2l0IGRpZmZgIGFuZCBgZ2l0IG1lcmdlYC4KKysKK0FkZGl0aW9uYWxseSwgaWYgeW91IGhhdmUgYSBjaG9pY2UgYmV0d2VlbiBzdG9yYWdlIGZvcm1hdHMgdGhhdCBhcmUgdGV4dCBiYXNlZAorb3Igbm9uLXRleHQgYmFzZWQsIHdlIHJlY29tbWVuZCBzdG9yaW5nIGZpbGVzIGluIHRoZSB0ZXh0IGZvcm1hdCBhbmQsIGlmCituZWNlc3NhcnksIHRyYW5zZm9ybWluZyB0aGVtIGludG8gdGhlIG90aGVyIGZvcm1hdC4gIEZvciBleGFtcGxlLCBhIHRleHQtYmFzZWQKK1NRTCBkdW1wIHdpdGggb25lIHJlY29yZCBwZXIgbGluZSB3aWxsIHdvcmsgbXVjaCBiZXR0ZXIgZm9yIGRpZmZpbmcgYW5kIG1lcmdpbmcKK3RoYW4gYW4gYWN0dWFsIGRhdGFiYXNlIGZpbGUuICBTaW1pbGFybHksIHRleHQtYmFzZWQgZm9ybWF0cyBzdWNoIGFzIE1hcmtkb3duCithbmQgQXNjaWlEb2Mgd2lsbCB3b3JrIGJldHRlciB0aGFuIGJpbmFyeSBmb3JtYXRzIHN1Y2ggYXMgTWljcm9zb2Z0IFdvcmQgYW5kCitQREYuCisrCitTaW1pbGFybHksIHN0b3JpbmcgYmluYXJ5IGRlcGVuZGVuY2llcyAoZS5nLiwgc2hhcmVkIGxpYnJhcmllcyBvciBKQVIgZmlsZXMpIG9yCitidWlsZCBwcm9kdWN0cyBpbiB0aGUgcmVwb3NpdG9yeSBpcyBnZW5lcmFsbHkgbm90IHJlY29tbWVuZGVkLiAgRGVwZW5kZW5jaWVzIGFuZAorYnVpbGQgcHJvZHVjdHMgYXJlIGJlc3Qgc3RvcmVkIG9uIGFuIGFydGlmYWN0IG9yIHBhY2thZ2Ugc2VydmVyIHdpdGggb25seQorcmVmZXJlbmNlcywgVVJMcywgYW5kIGhhc2hlcyBzdG9yZWQgaW4gdGhlIHJlcG9zaXRvcnkuCisrCitXZSBhbHNvIHJlY29tbWVuZCBzZXR0aW5nIGEgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZpbGUgdG8gZXhwbGljaXRseSBtYXJrCit3aGljaCBmaWxlcyBhcmUgdGV4dCBhbmQgd2hpY2ggYXJlIGJpbmFyeS4gIElmIHlvdSB3YW50IEdpdCB0byBndWVzcywgeW91IGNhbgorc2V0IHRoZSBhdHRyaWJ1dGUgYHRleHQ9YXV0b2AuICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBtaWdodCBiZSBhcHByb3ByaWF0ZQoraW4gc29tZSBwcm9qZWN0czoKKysKKy0tLS0KKyMgQnkgZGVmYXVsdCwgZ3Vlc3MuCisqCXRleHQ9YXV0bworIyBNYXJrIGFsbCBDIGZpbGVzIGFzIHRleHQuCisqLmMJdGV4dAorIyBNYXJrIGFsbCBKUEVHIGZpbGVzIGFzIGJpbmFyeS4KKyouanBnCWJpbmFyeQorLS0tLQorKworVGhlc2Ugc2V0dGluZ3MgaGVscCB0b29scyBwaWNrIHRoZSByaWdodCBmb3JtYXQgZm9yIG91dHB1dCBzdWNoIGFzIHBhdGNoZXMgYW5kCityZXN1bHQgaW4gZmlsZXMgYmVpbmcgY2hlY2tlZCBvdXQgaW4gdGhlIGFwcHJvcHJpYXRlIGxpbmUgZW5kaW5nIGZvciB0aGUKK3BsYXRmb3JtLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Z2xvc3NhcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRnbG9zc2FyeS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcxZjY0MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0Z2xvc3NhcnkudHh0CkBAIC0wLDAgKzEsMjcgQEAKK2dpdGdsb3NzYXJ5KDcpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRnbG9zc2FyeSAtIEEgR2l0IEdsb3NzYXJ5CisKK1NZTk9QU0lTCistLS0tLS0tLQorKgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworaW5jbHVkZTo6Z2xvc3NhcnktY29udGVudC50eHRbXQorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0dHV0b3JpYWxbN10sCitsaW5rZ2l0OmdpdHR1dG9yaWFsLTJbN10sCitsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10sCitsaW5rZ2l0OmdpdGV2ZXJ5ZGF5WzddLAorbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0aG9va3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjJhODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dApAQCAtMCwwICsxLDYwMSBAQAorZ2l0aG9va3MoNSkKKz09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdGhvb2tzIC0gSG9va3MgdXNlZCBieSBHaXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCiskR0lUX0RJUi9ob29rcy8qIChvciBcYGdpdCBjb25maWcgY29yZS5ob29rc1BhdGhgLyopCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0hvb2tzIGFyZSBwcm9ncmFtcyB5b3UgY2FuIHBsYWNlIGluIGEgaG9va3MgZGlyZWN0b3J5IHRvIHRyaWdnZXIKK2FjdGlvbnMgYXQgY2VydGFpbiBwb2ludHMgaW4gZ2l0J3MgZXhlY3V0aW9uLiBIb29rcyB0aGF0IGRvbid0IGhhdmUKK3RoZSBleGVjdXRhYmxlIGJpdCBzZXQgYXJlIGlnbm9yZWQuCisKK0J5IGRlZmF1bHQgdGhlIGhvb2tzIGRpcmVjdG9yeSBpcyBgJEdJVF9ESVIvaG9va3NgLCBidXQgdGhhdCBjYW4gYmUKK2NoYW5nZWQgdmlhIHRoZSBgY29yZS5ob29rc1BhdGhgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKHNlZQorbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworQmVmb3JlIEdpdCBpbnZva2VzIGEgaG9vaywgaXQgY2hhbmdlcyBpdHMgd29ya2luZyBkaXJlY3RvcnkgdG8gZWl0aGVyCiskR0lUX0RJUiBpbiBhIGJhcmUgcmVwb3NpdG9yeSBvciB0aGUgcm9vdCBvZiB0aGUgd29ya2luZyB0cmVlIGluIGEgbm9uLWJhcmUKK3JlcG9zaXRvcnkuIEFuIGV4Y2VwdGlvbiBhcmUgaG9va3MgdHJpZ2dlcmVkIGR1cmluZyBhIHB1c2ggKCdwcmUtcmVjZWl2ZScsCisndXBkYXRlJywgJ3Bvc3QtcmVjZWl2ZScsICdwb3N0LXVwZGF0ZScsICdwdXNoLXRvLWNoZWNrb3V0Jykgd2hpY2ggYXJlIGFsd2F5cworZXhlY3V0ZWQgaW4gJEdJVF9ESVIuCisKK0hvb2tzIGNhbiBnZXQgdGhlaXIgYXJndW1lbnRzIHZpYSB0aGUgZW52aXJvbm1lbnQsIGNvbW1hbmQtbGluZQorYXJndW1lbnRzLCBhbmQgc3RkaW4uIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZWFjaCBob29rIGJlbG93IGZvcgorZGV0YWlscy4KKworYGdpdCBpbml0YCBtYXkgY29weSBob29rcyB0byB0aGUgbmV3IHJlcG9zaXRvcnksIGRlcGVuZGluZyBvbiBpdHMKK2NvbmZpZ3VyYXRpb24uIFNlZSB0aGUgIlRFTVBMQVRFIERJUkVDVE9SWSIgc2VjdGlvbiBpbgorbGlua2dpdDpnaXQtaW5pdFsxXSBmb3IgZGV0YWlscy4gV2hlbiB0aGUgcmVzdCBvZiB0aGlzIGRvY3VtZW50IHJlZmVycwordG8gImRlZmF1bHQgaG9va3MiIGl0J3MgdGFsa2luZyBhYm91dCB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSBzaGlwcGVkCit3aXRoIEdpdC4KKworVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgaG9va3MgYXJlIGRlc2NyaWJlZCBiZWxvdy4KKworSE9PS1MKKy0tLS0tCisKK2FwcGx5cGF0Y2gtbXNnCit+fn5+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBsaW5rZ2l0OmdpdC1hbVsxXS4gIEl0IHRha2VzIGEgc2luZ2xlCitwYXJhbWV0ZXIsIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgaG9sZHMgdGhlIHByb3Bvc2VkIGNvbW1pdAorbG9nIG1lc3NhZ2UuICBFeGl0aW5nIHdpdGggYSBub24temVybyBzdGF0dXMgY2F1c2VzIGBnaXQgYW1gIHRvIGFib3J0CitiZWZvcmUgYXBwbHlpbmcgdGhlIHBhdGNoLgorCitUaGUgaG9vayBpcyBhbGxvd2VkIHRvIGVkaXQgdGhlIG1lc3NhZ2UgZmlsZSBpbiBwbGFjZSwgYW5kIGNhbgorYmUgdXNlZCB0byBub3JtYWxpemUgdGhlIG1lc3NhZ2UgaW50byBzb21lIHByb2plY3Qgc3RhbmRhcmQKK2Zvcm1hdC4gSXQgY2FuIGFsc28gYmUgdXNlZCB0byByZWZ1c2UgdGhlIGNvbW1pdCBhZnRlciBpbnNwZWN0aW5nCit0aGUgbWVzc2FnZSBmaWxlLgorCitUaGUgZGVmYXVsdCAnYXBwbHlwYXRjaC1tc2cnIGhvb2ssIHdoZW4gZW5hYmxlZCwgcnVucyB0aGUKKydjb21taXQtbXNnJyBob29rLCBpZiB0aGUgbGF0dGVyIGlzIGVuYWJsZWQuCisKK3ByZS1hcHBseXBhdGNoCit+fn5+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBsaW5rZ2l0OmdpdC1hbVsxXS4gIEl0IHRha2VzIG5vIHBhcmFtZXRlciwgYW5kIGlzCitpbnZva2VkIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkLCBidXQgYmVmb3JlIGEgY29tbWl0IGlzIG1hZGUuCisKK0lmIGl0IGV4aXRzIHdpdGggbm9uLXplcm8gc3RhdHVzLCB0aGVuIHRoZSB3b3JraW5nIHRyZWUgd2lsbCBub3QgYmUKK2NvbW1pdHRlZCBhZnRlciBhcHBseWluZyB0aGUgcGF0Y2guCisKK0l0IGNhbiBiZSB1c2VkIHRvIGluc3BlY3QgdGhlIGN1cnJlbnQgd29ya2luZyB0cmVlIGFuZCByZWZ1c2UgdG8KK21ha2UgYSBjb21taXQgaWYgaXQgZG9lcyBub3QgcGFzcyBjZXJ0YWluIHRlc3QuCisKK1RoZSBkZWZhdWx0ICdwcmUtYXBwbHlwYXRjaCcgaG9vaywgd2hlbiBlbmFibGVkLCBydW5zIHRoZQorJ3ByZS1jb21taXQnIGhvb2ssIGlmIHRoZSBsYXR0ZXIgaXMgZW5hYmxlZC4KKworcG9zdC1hcHBseXBhdGNoCit+fn5+fn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgbGlua2dpdDpnaXQtYW1bMV0uICBJdCB0YWtlcyBubyBwYXJhbWV0ZXIsCithbmQgaXMgaW52b2tlZCBhZnRlciB0aGUgcGF0Y2ggaXMgYXBwbGllZCBhbmQgYSBjb21taXQgaXMgbWFkZS4KKworVGhpcyBob29rIGlzIG1lYW50IHByaW1hcmlseSBmb3Igbm90aWZpY2F0aW9uLCBhbmQgY2Fubm90IGFmZmVjdAordGhlIG91dGNvbWUgb2YgYGdpdCBhbWAuCisKK3ByZS1jb21taXQKK35+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgbGlua2dpdDpnaXQtY29tbWl0WzFdLCBhbmQgY2FuIGJlIGJ5cGFzc2VkCit3aXRoIHRoZSBgLS1uby12ZXJpZnlgIG9wdGlvbi4gIEl0IHRha2VzIG5vIHBhcmFtZXRlcnMsIGFuZCBpcworaW52b2tlZCBiZWZvcmUgb2J0YWluaW5nIHRoZSBwcm9wb3NlZCBjb21taXQgbG9nIG1lc3NhZ2UgYW5kCittYWtpbmcgYSBjb21taXQuICBFeGl0aW5nIHdpdGggYSBub24temVybyBzdGF0dXMgZnJvbSB0aGlzIHNjcmlwdAorY2F1c2VzIHRoZSBgZ2l0IGNvbW1pdGAgY29tbWFuZCB0byBhYm9ydCBiZWZvcmUgY3JlYXRpbmcgYSBjb21taXQuCisKK1RoZSBkZWZhdWx0ICdwcmUtY29tbWl0JyBob29rLCB3aGVuIGVuYWJsZWQsIGNhdGNoZXMgaW50cm9kdWN0aW9uCitvZiBsaW5lcyB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2VzIGFuZCBhYm9ydHMgdGhlIGNvbW1pdCB3aGVuCitzdWNoIGEgbGluZSBpcyBmb3VuZC4KKworQWxsIHRoZSBgZ2l0IGNvbW1pdGAgaG9va3MgYXJlIGludm9rZWQgd2l0aCB0aGUgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIGBHSVRfRURJVE9SPTpgIGlmIHRoZSBjb21tYW5kIHdpbGwgbm90IGJyaW5nIHVwIGFuIGVkaXRvcgordG8gbW9kaWZ5IHRoZSBjb21taXQgbWVzc2FnZS4KKworVGhlIGRlZmF1bHQgJ3ByZS1jb21taXQnIGhvb2ssIHdoZW4gZW5hYmxlZC0tYW5kIHdpdGggdGhlCitgaG9va3MuYWxsb3dub25hc2NpaWAgY29uZmlnIG9wdGlvbiB1bnNldCBvciBzZXQgdG8gZmFsc2UtLXByZXZlbnRzCit0aGUgdXNlIG9mIG5vbi1BU0NJSSBmaWxlbmFtZXMuCisKK3ByZS1tZXJnZS1jb21taXQKK35+fn5+fn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgbGlua2dpdDpnaXQtbWVyZ2VbMV0sIGFuZCBjYW4gYmUgYnlwYXNzZWQKK3dpdGggdGhlIGAtLW5vLXZlcmlmeWAgb3B0aW9uLiAgSXQgdGFrZXMgbm8gcGFyYW1ldGVycywgYW5kIGlzCitpbnZva2VkIGFmdGVyIHRoZSBtZXJnZSBoYXMgYmVlbiBjYXJyaWVkIG91dCBzdWNjZXNzZnVsbHkgYW5kIGJlZm9yZQorb2J0YWluaW5nIHRoZSBwcm9wb3NlZCBjb21taXQgbG9nIG1lc3NhZ2UgdG8KK21ha2UgYSBjb21taXQuICBFeGl0aW5nIHdpdGggYSBub24temVybyBzdGF0dXMgZnJvbSB0aGlzIHNjcmlwdAorY2F1c2VzIHRoZSBgZ2l0IG1lcmdlYCBjb21tYW5kIHRvIGFib3J0IGJlZm9yZSBjcmVhdGluZyBhIGNvbW1pdC4KKworVGhlIGRlZmF1bHQgJ3ByZS1tZXJnZS1jb21taXQnIGhvb2ssIHdoZW4gZW5hYmxlZCwgcnVucyB0aGUKKydwcmUtY29tbWl0JyBob29rLCBpZiB0aGUgbGF0dGVyIGlzIGVuYWJsZWQuCisKK1RoaXMgaG9vayBpcyBpbnZva2VkIHdpdGggdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCitgR0lUX0VESVRPUj06YCBpZiB0aGUgY29tbWFuZCB3aWxsIG5vdCBicmluZyB1cCBhbiBlZGl0b3IKK3RvIG1vZGlmeSB0aGUgY29tbWl0IG1lc3NhZ2UuCisKK0lmIHRoZSBtZXJnZSBjYW5ub3QgYmUgY2FycmllZCBvdXQgYXV0b21hdGljYWxseSwgdGhlIGNvbmZsaWN0cworbmVlZCB0byBiZSByZXNvbHZlZCBhbmQgdGhlIHJlc3VsdCBjb21taXR0ZWQgc2VwYXJhdGVseSAoc2VlCitsaW5rZ2l0OmdpdC1tZXJnZVsxXSkuIEF0IHRoYXQgcG9pbnQsIHRoaXMgaG9vayB3aWxsIG5vdCBiZSBleGVjdXRlZCwKK2J1dCB0aGUgJ3ByZS1jb21taXQnIGhvb2sgd2lsbCwgaWYgaXQgaXMgZW5hYmxlZC4KKworcHJlcGFyZS1jb21taXQtbXNnCit+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgbGlua2dpdDpnaXQtY29tbWl0WzFdIHJpZ2h0IGFmdGVyIHByZXBhcmluZyB0aGUKK2RlZmF1bHQgbG9nIG1lc3NhZ2UsIGFuZCBiZWZvcmUgdGhlIGVkaXRvciBpcyBzdGFydGVkLgorCitJdCB0YWtlcyBvbmUgdG8gdGhyZWUgcGFyYW1ldGVycy4gIFRoZSBmaXJzdCBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZQordGhhdCBjb250YWlucyB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLiAgVGhlIHNlY29uZCBpcyB0aGUgc291cmNlIG9mIHRoZSBjb21taXQKK21lc3NhZ2UsIGFuZCBjYW4gYmU6IGBtZXNzYWdlYCAoaWYgYSBgLW1gIG9yIGAtRmAgb3B0aW9uIHdhcworZ2l2ZW4pOyBgdGVtcGxhdGVgIChpZiBhIGAtdGAgb3B0aW9uIHdhcyBnaXZlbiBvciB0aGUKK2NvbmZpZ3VyYXRpb24gb3B0aW9uIGBjb21taXQudGVtcGxhdGVgIGlzIHNldCk7IGBtZXJnZWAgKGlmIHRoZQorY29tbWl0IGlzIGEgbWVyZ2Ugb3IgYSBgLmdpdC9NRVJHRV9NU0dgIGZpbGUgZXhpc3RzKTsgYHNxdWFzaGAKKyhpZiBhIGAuZ2l0L1NRVUFTSF9NU0dgIGZpbGUgZXhpc3RzKTsgb3IgYGNvbW1pdGAsIGZvbGxvd2VkIGJ5CithIGNvbW1pdCBTSEEtMSAoaWYgYSBgLWNgLCBgLUNgIG9yIGAtLWFtZW5kYCBvcHRpb24gd2FzIGdpdmVuKS4KKworSWYgdGhlIGV4aXQgc3RhdHVzIGlzIG5vbi16ZXJvLCBgZ2l0IGNvbW1pdGAgd2lsbCBhYm9ydC4KKworVGhlIHB1cnBvc2Ugb2YgdGhlIGhvb2sgaXMgdG8gZWRpdCB0aGUgbWVzc2FnZSBmaWxlIGluIHBsYWNlLCBhbmQKK2l0IGlzIG5vdCBzdXBwcmVzc2VkIGJ5IHRoZSBgLS1uby12ZXJpZnlgIG9wdGlvbi4gIEEgbm9uLXplcm8gZXhpdAorbWVhbnMgYSBmYWlsdXJlIG9mIHRoZSBob29rIGFuZCBhYm9ydHMgdGhlIGNvbW1pdC4gIEl0IHNob3VsZCBub3QKK2JlIHVzZWQgYXMgcmVwbGFjZW1lbnQgZm9yIHByZS1jb21taXQgaG9vay4KKworVGhlIHNhbXBsZSBgcHJlcGFyZS1jb21taXQtbXNnYCBob29rIHRoYXQgY29tZXMgd2l0aCBHaXQgcmVtb3ZlcyB0aGUKK2hlbHAgbWVzc2FnZSBmb3VuZCBpbiB0aGUgY29tbWVudGVkIHBvcnRpb24gb2YgdGhlIGNvbW1pdCB0ZW1wbGF0ZS4KKworY29tbWl0LW1zZworfn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBsaW5rZ2l0OmdpdC1jb21taXRbMV0gYW5kIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdLCBhbmQgY2FuIGJlCitieXBhc3NlZCB3aXRoIHRoZSBgLS1uby12ZXJpZnlgIG9wdGlvbi4gIEl0IHRha2VzIGEgc2luZ2xlIHBhcmFtZXRlciwKK3RoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgaG9sZHMgdGhlIHByb3Bvc2VkIGNvbW1pdCBsb2cgbWVzc2FnZS4KK0V4aXRpbmcgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cyBjYXVzZXMgdGhlIGNvbW1hbmQgdG8gYWJvcnQuCisKK1RoZSBob29rIGlzIGFsbG93ZWQgdG8gZWRpdCB0aGUgbWVzc2FnZSBmaWxlIGluIHBsYWNlLCBhbmQgY2FuIGJlIHVzZWQKK3RvIG5vcm1hbGl6ZSB0aGUgbWVzc2FnZSBpbnRvIHNvbWUgcHJvamVjdCBzdGFuZGFyZCBmb3JtYXQuIEl0CitjYW4gYWxzbyBiZSB1c2VkIHRvIHJlZnVzZSB0aGUgY29tbWl0IGFmdGVyIGluc3BlY3RpbmcgdGhlIG1lc3NhZ2UKK2ZpbGUuCisKK1RoZSBkZWZhdWx0ICdjb21taXQtbXNnJyBob29rLCB3aGVuIGVuYWJsZWQsIGRldGVjdHMgZHVwbGljYXRlCisiU2lnbmVkLW9mZi1ieSIgbGluZXMsIGFuZCBhYm9ydHMgdGhlIGNvbW1pdCBpZiBvbmUgaXMgZm91bmQuCisKK3Bvc3QtY29tbWl0Cit+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBsaW5rZ2l0OmdpdC1jb21taXRbMV0uIEl0IHRha2VzIG5vIHBhcmFtZXRlcnMsIGFuZCBpcworaW52b2tlZCBhZnRlciBhIGNvbW1pdCBpcyBtYWRlLgorCitUaGlzIGhvb2sgaXMgbWVhbnQgcHJpbWFyaWx5IGZvciBub3RpZmljYXRpb24sIGFuZCBjYW5ub3QgYWZmZWN0Cit0aGUgb3V0Y29tZSBvZiBgZ2l0IGNvbW1pdGAuCisKK3ByZS1yZWJhc2UKK35+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGNhbGxlZCBieSBsaW5rZ2l0OmdpdC1yZWJhc2VbMV0gYW5kIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgYQorYnJhbmNoIGZyb20gZ2V0dGluZyByZWJhc2VkLiAgVGhlIGhvb2sgbWF5IGJlIGNhbGxlZCB3aXRoIG9uZSBvcgordHdvIHBhcmFtZXRlcnMuICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSB1cHN0cmVhbSBmcm9tIHdoaWNoCit0aGUgc2VyaWVzIHdhcyBmb3JrZWQuICBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0aGUgYnJhbmNoIGJlaW5nCityZWJhc2VkLCBhbmQgaXMgbm90IHNldCB3aGVuIHJlYmFzaW5nIHRoZSBjdXJyZW50IGJyYW5jaC4KKworcG9zdC1jaGVja291dAorfn5+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCB3aGVuIGEgbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0gb3IKK2xpbmtnaXQ6Z2l0LXN3aXRjaFsxXSBpcyBydW4gYWZ0ZXIgaGF2aW5nIHVwZGF0ZWQgdGhlCit3b3JrdHJlZS4gIFRoZSBob29rIGlzIGdpdmVuIHRocmVlIHBhcmFtZXRlcnM6IHRoZSByZWYgb2YgdGhlIHByZXZpb3VzIEhFQUQsCit0aGUgcmVmIG9mIHRoZSBuZXcgSEVBRCAod2hpY2ggbWF5IG9yIG1heSBub3QgaGF2ZSBjaGFuZ2VkKSwgYW5kIGEgZmxhZworaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjaGVja291dCB3YXMgYSBicmFuY2ggY2hlY2tvdXQgKGNoYW5naW5nIGJyYW5jaGVzLAorZmxhZz0xKSBvciBhIGZpbGUgY2hlY2tvdXQgKHJldHJpZXZpbmcgYSBmaWxlIGZyb20gdGhlIGluZGV4LCBmbGFnPTApLgorVGhpcyBob29rIGNhbm5vdCBhZmZlY3QgdGhlIG91dGNvbWUgb2YgYGdpdCBzd2l0Y2hgIG9yIGBnaXQgY2hlY2tvdXRgLgorCitJdCBpcyBhbHNvIHJ1biBhZnRlciBsaW5rZ2l0OmdpdC1jbG9uZVsxXSwgdW5sZXNzIHRoZSBgLS1uby1jaGVja291dGAgKGAtbmApIG9wdGlvbiBpcwordXNlZC4gVGhlIGZpcnN0IHBhcmFtZXRlciBnaXZlbiB0byB0aGUgaG9vayBpcyB0aGUgbnVsbC1yZWYsIHRoZSBzZWNvbmQgdGhlCityZWYgb2YgdGhlIG5ldyBIRUFEIGFuZCB0aGUgZmxhZyBpcyBhbHdheXMgMS4gTGlrZXdpc2UgZm9yIGBnaXQgd29ya3RyZWUgYWRkYAordW5sZXNzIGAtLW5vLWNoZWNrb3V0YCBpcyB1c2VkLgorCitUaGlzIGhvb2sgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSByZXBvc2l0b3J5IHZhbGlkaXR5IGNoZWNrcywgYXV0by1kaXNwbGF5CitkaWZmZXJlbmNlcyBmcm9tIHRoZSBwcmV2aW91cyBIRUFEIGlmIGRpZmZlcmVudCwgb3Igc2V0IHdvcmtpbmcgZGlyIG1ldGFkYXRhCitwcm9wZXJ0aWVzLgorCitwb3N0LW1lcmdlCit+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5IGxpbmtnaXQ6Z2l0LW1lcmdlWzFdLCB3aGljaCBoYXBwZW5zIHdoZW4gYSBgZ2l0IHB1bGxgCitpcyBkb25lIG9uIGEgbG9jYWwgcmVwb3NpdG9yeS4gIFRoZSBob29rIHRha2VzIGEgc2luZ2xlIHBhcmFtZXRlciwgYSBzdGF0dXMKK2ZsYWcgc3BlY2lmeWluZyB3aGV0aGVyIG9yIG5vdCB0aGUgbWVyZ2UgYmVpbmcgZG9uZSB3YXMgYSBzcXVhc2ggbWVyZ2UuCitUaGlzIGhvb2sgY2Fubm90IGFmZmVjdCB0aGUgb3V0Y29tZSBvZiBgZ2l0IG1lcmdlYCBhbmQgaXMgbm90IGV4ZWN1dGVkLAoraWYgdGhlIG1lcmdlIGZhaWxlZCBkdWUgdG8gY29uZmxpY3RzLgorCitUaGlzIGhvb2sgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIGNvcnJlc3BvbmRpbmcgcHJlLWNvbW1pdCBob29rIHRvCitzYXZlIGFuZCByZXN0b3JlIGFueSBmb3JtIG9mIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgd29ya2luZyB0cmVlCisoZS5nLjogcGVybWlzc2lvbnMvb3duZXJzaGlwLCBBQ0xTLCBldGMpLiAgU2VlIGNvbnRyaWIvaG9va3Mvc2V0Z2l0cGVybXMucGVybAorZm9yIGFuIGV4YW1wbGUgb2YgaG93IHRvIGRvIHRoaXMuCisKK3ByZS1wdXNoCit+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgY2FsbGVkIGJ5IGxpbmtnaXQ6Z2l0LXB1c2hbMV0gYW5kIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQKK2EgcHVzaCBmcm9tIHRha2luZyBwbGFjZS4gIFRoZSBob29rIGlzIGNhbGxlZCB3aXRoIHR3byBwYXJhbWV0ZXJzCit3aGljaCBwcm92aWRlIHRoZSBuYW1lIGFuZCBsb2NhdGlvbiBvZiB0aGUgZGVzdGluYXRpb24gcmVtb3RlLCBpZiBhCituYW1lZCByZW1vdGUgaXMgbm90IGJlaW5nIHVzZWQgYm90aCB2YWx1ZXMgd2lsbCBiZSB0aGUgc2FtZS4KKworSW5mb3JtYXRpb24gYWJvdXQgd2hhdCBpcyB0byBiZSBwdXNoZWQgaXMgcHJvdmlkZWQgb24gdGhlIGhvb2sncyBzdGFuZGFyZAoraW5wdXQgd2l0aCBsaW5lcyBvZiB0aGUgZm9ybToKKworICA8bG9jYWwgcmVmPiBTUCA8bG9jYWwgc2hhMT4gU1AgPHJlbW90ZSByZWY+IFNQIDxyZW1vdGUgc2hhMT4gTEYKKworRm9yIGluc3RhbmNlLCBpZiB0aGUgY29tbWFuZCArZ2l0IHB1c2ggb3JpZ2luIG1hc3Rlcjpmb3JlaWduKyB3ZXJlIHJ1biB0aGUKK2hvb2sgd291bGQgcmVjZWl2ZSBhIGxpbmUgbGlrZSB0aGUgZm9sbG93aW5nOgorCisgIHJlZnMvaGVhZHMvbWFzdGVyIDY3ODkwIHJlZnMvaGVhZHMvZm9yZWlnbiAxMjM0NQorCithbHRob3VnaCB0aGUgZnVsbCwgNDAtY2hhcmFjdGVyIFNIQS0xcyB3b3VsZCBiZSBzdXBwbGllZC4gIElmIHRoZSBmb3JlaWduIHJlZgorZG9lcyBub3QgeWV0IGV4aXN0IHRoZSBgPHJlbW90ZSBTSEEtMT5gIHdpbGwgYmUgNDAgYDBgLiAgSWYgYSByZWYgaXMgdG8gYmUKK2RlbGV0ZWQsIHRoZSBgPGxvY2FsIHJlZj5gIHdpbGwgYmUgc3VwcGxpZWQgYXMgYChkZWxldGUpYCBhbmQgdGhlIGA8bG9jYWwKK1NIQS0xPmAgd2lsbCBiZSA0MCBgMGAuICBJZiB0aGUgbG9jYWwgY29tbWl0IHdhcyBzcGVjaWZpZWQgYnkgc29tZXRoaW5nIG90aGVyCit0aGFuIGEgbmFtZSB3aGljaCBjb3VsZCBiZSBleHBhbmRlZCAoc3VjaCBhcyBgSEVBRH5gLCBvciBhIFNIQS0xKSBpdCB3aWxsIGJlCitzdXBwbGllZCBhcyBpdCB3YXMgb3JpZ2luYWxseSBnaXZlbi4KKworSWYgdGhpcyBob29rIGV4aXRzIHdpdGggYSBub24temVybyBzdGF0dXMsIGBnaXQgcHVzaGAgd2lsbCBhYm9ydCB3aXRob3V0CitwdXNoaW5nIGFueXRoaW5nLiAgSW5mb3JtYXRpb24gYWJvdXQgd2h5IHRoZSBwdXNoIGlzIHJlamVjdGVkIG1heSBiZSBzZW50Cit0byB0aGUgdXNlciBieSB3cml0aW5nIHRvIHN0YW5kYXJkIGVycm9yLgorCitbW3ByZS1yZWNlaXZlXV0KK3ByZS1yZWNlaXZlCit+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBsaW5rZ2l0OmdpdC1yZWNlaXZlLXBhY2tbMV0gd2hlbiBpdCByZWFjdHMgdG8KK2BnaXQgcHVzaGAgYW5kIHVwZGF0ZXMgcmVmZXJlbmNlKHMpIGluIGl0cyByZXBvc2l0b3J5LgorSnVzdCBiZWZvcmUgc3RhcnRpbmcgdG8gdXBkYXRlIHJlZnMgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5LCB0aGUKK3ByZS1yZWNlaXZlIGhvb2sgaXMgaW52b2tlZC4gIEl0cyBleGl0IHN0YXR1cyBkZXRlcm1pbmVzIHRoZSBzdWNjZXNzCitvciBmYWlsdXJlIG9mIHRoZSB1cGRhdGUuCisKK1RoaXMgaG9vayBleGVjdXRlcyBvbmNlIGZvciB0aGUgcmVjZWl2ZSBvcGVyYXRpb24uIEl0IHRha2VzIG5vCithcmd1bWVudHMsIGJ1dCBmb3IgZWFjaCByZWYgdG8gYmUgdXBkYXRlZCBpdCByZWNlaXZlcyBvbiBzdGFuZGFyZAoraW5wdXQgYSBsaW5lIG9mIHRoZSBmb3JtYXQ6CisKKyAgPG9sZC12YWx1ZT4gU1AgPG5ldy12YWx1ZT4gU1AgPHJlZi1uYW1lPiBMRgorCit3aGVyZSBgPG9sZC12YWx1ZT5gIGlzIHRoZSBvbGQgb2JqZWN0IG5hbWUgc3RvcmVkIGluIHRoZSByZWYsCitgPG5ldy12YWx1ZT5gIGlzIHRoZSBuZXcgb2JqZWN0IG5hbWUgdG8gYmUgc3RvcmVkIGluIHRoZSByZWYgYW5kCitgPHJlZi1uYW1lPmAgaXMgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgcmVmLgorV2hlbiBjcmVhdGluZyBhIG5ldyByZWYsIGA8b2xkLXZhbHVlPmAgaXMgNDAgYDBgLgorCitJZiB0aGUgaG9vayBleGl0cyB3aXRoIG5vbi16ZXJvIHN0YXR1cywgbm9uZSBvZiB0aGUgcmVmcyB3aWxsIGJlCit1cGRhdGVkLiBJZiB0aGUgaG9vayBleGl0cyB3aXRoIHplcm8sIHVwZGF0aW5nIG9mIGluZGl2aWR1YWwgcmVmcyBjYW4KK3N0aWxsIGJlIHByZXZlbnRlZCBieSB0aGUgPDx1cGRhdGUsJ3VwZGF0ZSc+PiBob29rLgorCitCb3RoIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IGFyZSBmb3J3YXJkZWQgdG8KK2BnaXQgc2VuZC1wYWNrYCBvbiB0aGUgb3RoZXIgZW5kLCBzbyB5b3UgY2FuIHNpbXBseSBgZWNob2AgbWVzc2FnZXMKK2ZvciB0aGUgdXNlci4KKworVGhlIG51bWJlciBvZiBwdXNoIG9wdGlvbnMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSBvZgorYGdpdCBwdXNoIC0tcHVzaC1vcHRpb249Li4uYCBjYW4gYmUgcmVhZCBmcm9tIHRoZSBlbnZpcm9ubWVudAordmFyaWFibGUgYEdJVF9QVVNIX09QVElPTl9DT1VOVGAsIGFuZCB0aGUgb3B0aW9ucyB0aGVtc2VsdmVzIGFyZQorZm91bmQgaW4gYEdJVF9QVVNIX09QVElPTl8wYCwgYEdJVF9QVVNIX09QVElPTl8xYCwuLi4KK0lmIGl0IGlzIG5lZ290aWF0ZWQgdG8gbm90IHVzZSB0aGUgcHVzaCBvcHRpb25zIHBoYXNlLCB0aGUKK2Vudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIG5vdCBiZSBzZXQuIElmIHRoZSBjbGllbnQgc2VsZWN0cwordG8gdXNlIHB1c2ggb3B0aW9ucywgYnV0IGRvZXNuJ3QgdHJhbnNtaXQgYW55LCB0aGUgY291bnQgdmFyaWFibGUKK3dpbGwgYmUgc2V0IHRvIHplcm8sIGBHSVRfUFVTSF9PUFRJT05fQ09VTlQ9MGAuCisKK1NlZSB0aGUgc2VjdGlvbiBvbiAiUXVhcmFudGluZSBFbnZpcm9ubWVudCIgaW4KK2xpbmtnaXQ6Z2l0LXJlY2VpdmUtcGFja1sxXSBmb3Igc29tZSBjYXZlYXRzLgorCitbW3VwZGF0ZV1dCit1cGRhdGUKK35+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBsaW5rZ2l0OmdpdC1yZWNlaXZlLXBhY2tbMV0gd2hlbiBpdCByZWFjdHMgdG8KK2BnaXQgcHVzaGAgYW5kIHVwZGF0ZXMgcmVmZXJlbmNlKHMpIGluIGl0cyByZXBvc2l0b3J5LgorSnVzdCBiZWZvcmUgdXBkYXRpbmcgdGhlIHJlZiBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnksIHRoZSB1cGRhdGUgaG9vaworaXMgaW52b2tlZC4gIEl0cyBleGl0IHN0YXR1cyBkZXRlcm1pbmVzIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YKK3RoZSByZWYgdXBkYXRlLgorCitUaGUgaG9vayBleGVjdXRlcyBvbmNlIGZvciBlYWNoIHJlZiB0byBiZSB1cGRhdGVkLCBhbmQgdGFrZXMKK3RocmVlIHBhcmFtZXRlcnM6CisKKyAtIHRoZSBuYW1lIG9mIHRoZSByZWYgYmVpbmcgdXBkYXRlZCwKKyAtIHRoZSBvbGQgb2JqZWN0IG5hbWUgc3RvcmVkIGluIHRoZSByZWYsCisgLSBhbmQgdGhlIG5ldyBvYmplY3QgbmFtZSB0byBiZSBzdG9yZWQgaW4gdGhlIHJlZi4KKworQSB6ZXJvIGV4aXQgZnJvbSB0aGUgdXBkYXRlIGhvb2sgYWxsb3dzIHRoZSByZWYgdG8gYmUgdXBkYXRlZC4KK0V4aXRpbmcgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cyBwcmV2ZW50cyBgZ2l0IHJlY2VpdmUtcGFja2AKK2Zyb20gdXBkYXRpbmcgdGhhdCByZWYuCisKK1RoaXMgaG9vayBjYW4gYmUgdXNlZCB0byBwcmV2ZW50ICdmb3JjZWQnIHVwZGF0ZSBvbiBjZXJ0YWluIHJlZnMgYnkKK21ha2luZyBzdXJlIHRoYXQgdGhlIG9iamVjdCBuYW1lIGlzIGEgY29tbWl0IG9iamVjdCB0aGF0IGlzIGEKK2Rlc2NlbmRhbnQgb2YgdGhlIGNvbW1pdCBvYmplY3QgbmFtZWQgYnkgdGhlIG9sZCBvYmplY3QgbmFtZS4KK1RoYXQgaXMsIHRvIGVuZm9yY2UgYSAiZmFzdC1mb3J3YXJkIG9ubHkiIHBvbGljeS4KKworSXQgY291bGQgYWxzbyBiZSB1c2VkIHRvIGxvZyB0aGUgb2xkLi5uZXcgc3RhdHVzLiAgSG93ZXZlciwgaXQKK2RvZXMgbm90IGtub3cgdGhlIGVudGlyZSBzZXQgb2YgYnJhbmNoZXMsIHNvIGl0IHdvdWxkIGVuZCB1cAorZmlyaW5nIG9uZSBlLW1haWwgcGVyIHJlZiB3aGVuIHVzZWQgbmFpdmVseSwgdGhvdWdoLiAgVGhlCis8PHBvc3QtcmVjZWl2ZSwncG9zdC1yZWNlaXZlJz4+IGhvb2sgaXMgbW9yZSBzdWl0ZWQgdG8gdGhhdC4KKworSW4gYW4gZW52aXJvbm1lbnQgdGhhdCByZXN0cmljdHMgdGhlIHVzZXJzJyBhY2Nlc3Mgb25seSB0byBnaXQKK2NvbW1hbmRzIG92ZXIgdGhlIHdpcmUsIHRoaXMgaG9vayBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgYWNjZXNzCitjb250cm9sIHdpdGhvdXQgcmVseWluZyBvbiBmaWxlc3lzdGVtIG93bmVyc2hpcCBhbmQgZ3JvdXAKK21lbWJlcnNoaXAuIFNlZSBsaW5rZ2l0OmdpdC1zaGVsbFsxXSBmb3IgaG93IHlvdSBtaWdodCB1c2UgdGhlIGxvZ2luCitzaGVsbCB0byByZXN0cmljdCB0aGUgdXNlcidzIGFjY2VzcyB0byBvbmx5IGdpdCBjb21tYW5kcy4KKworQm90aCBzdGFuZGFyZCBvdXRwdXQgYW5kIHN0YW5kYXJkIGVycm9yIG91dHB1dCBhcmUgZm9yd2FyZGVkIHRvCitgZ2l0IHNlbmQtcGFja2Agb24gdGhlIG90aGVyIGVuZCwgc28geW91IGNhbiBzaW1wbHkgYGVjaG9gIG1lc3NhZ2VzCitmb3IgdGhlIHVzZXIuCisKK1RoZSBkZWZhdWx0ICd1cGRhdGUnIGhvb2ssIHdoZW4gZW5hYmxlZC0tYW5kIHdpdGgKK2Bob29rcy5hbGxvd3VuYW5ub3RhdGVkYCBjb25maWcgb3B0aW9uIHVuc2V0IG9yIHNldCB0byBmYWxzZS0tcHJldmVudHMKK3VuYW5ub3RhdGVkIHRhZ3MgdG8gYmUgcHVzaGVkLgorCitbW3Bvc3QtcmVjZWl2ZV1dCitwb3N0LXJlY2VpdmUKK35+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBsaW5rZ2l0OmdpdC1yZWNlaXZlLXBhY2tbMV0gd2hlbiBpdCByZWFjdHMgdG8KK2BnaXQgcHVzaGAgYW5kIHVwZGF0ZXMgcmVmZXJlbmNlKHMpIGluIGl0cyByZXBvc2l0b3J5LgorSXQgZXhlY3V0ZXMgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5IG9uY2UgYWZ0ZXIgYWxsIHRoZSByZWZzIGhhdmUKK2JlZW4gdXBkYXRlZC4KKworVGhpcyBob29rIGV4ZWN1dGVzIG9uY2UgZm9yIHRoZSByZWNlaXZlIG9wZXJhdGlvbi4gIEl0IHRha2VzIG5vCithcmd1bWVudHMsIGJ1dCBnZXRzIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIHRoZQorPDxwcmUtcmVjZWl2ZSwncHJlLXJlY2VpdmUnPj4KK2hvb2sgZG9lcyBvbiBpdHMgc3RhbmRhcmQgaW5wdXQuCisKK1RoaXMgaG9vayBkb2VzIG5vdCBhZmZlY3QgdGhlIG91dGNvbWUgb2YgYGdpdCByZWNlaXZlLXBhY2tgLCBhcyBpdAoraXMgY2FsbGVkIGFmdGVyIHRoZSByZWFsIHdvcmsgaXMgZG9uZS4KKworVGhpcyBzdXBlcnNlZGVzIHRoZSA8PHBvc3QtdXBkYXRlLCdwb3N0LXVwZGF0ZSc+PiBob29rIGluIHRoYXQgaXQgZ2V0cworYm90aCBvbGQgYW5kIG5ldyB2YWx1ZXMgb2YgYWxsIHRoZSByZWZzIGluIGFkZGl0aW9uIHRvIHRoZWlyCituYW1lcy4KKworQm90aCBzdGFuZGFyZCBvdXRwdXQgYW5kIHN0YW5kYXJkIGVycm9yIG91dHB1dCBhcmUgZm9yd2FyZGVkIHRvCitgZ2l0IHNlbmQtcGFja2Agb24gdGhlIG90aGVyIGVuZCwgc28geW91IGNhbiBzaW1wbHkgYGVjaG9gIG1lc3NhZ2VzCitmb3IgdGhlIHVzZXIuCisKK1RoZSBkZWZhdWx0ICdwb3N0LXJlY2VpdmUnIGhvb2sgaXMgZW1wdHksIGJ1dCB0aGVyZSBpcworYSBzYW1wbGUgc2NyaXB0IGBwb3N0LXJlY2VpdmUtZW1haWxgIHByb3ZpZGVkIGluIHRoZSBgY29udHJpYi9ob29rc2AKK2RpcmVjdG9yeSBpbiBHaXQgZGlzdHJpYnV0aW9uLCB3aGljaCBpbXBsZW1lbnRzIHNlbmRpbmcgY29tbWl0CitlbWFpbHMuCisKK1RoZSBudW1iZXIgb2YgcHVzaCBvcHRpb25zIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgb2YKK2BnaXQgcHVzaCAtLXB1c2gtb3B0aW9uPS4uLmAgY2FuIGJlIHJlYWQgZnJvbSB0aGUgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIGBHSVRfUFVTSF9PUFRJT05fQ09VTlRgLCBhbmQgdGhlIG9wdGlvbnMgdGhlbXNlbHZlcyBhcmUKK2ZvdW5kIGluIGBHSVRfUFVTSF9PUFRJT05fMGAsIGBHSVRfUFVTSF9PUFRJT05fMWAsLi4uCitJZiBpdCBpcyBuZWdvdGlhdGVkIHRvIG5vdCB1c2UgdGhlIHB1c2ggb3B0aW9ucyBwaGFzZSwgdGhlCitlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2lsbCBub3QgYmUgc2V0LiBJZiB0aGUgY2xpZW50IHNlbGVjdHMKK3RvIHVzZSBwdXNoIG9wdGlvbnMsIGJ1dCBkb2Vzbid0IHRyYW5zbWl0IGFueSwgdGhlIGNvdW50IHZhcmlhYmxlCit3aWxsIGJlIHNldCB0byB6ZXJvLCBgR0lUX1BVU0hfT1BUSU9OX0NPVU5UPTBgLgorCitbW3Bvc3QtdXBkYXRlXV0KK3Bvc3QtdXBkYXRlCit+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBsaW5rZ2l0OmdpdC1yZWNlaXZlLXBhY2tbMV0gd2hlbiBpdCByZWFjdHMgdG8KK2BnaXQgcHVzaGAgYW5kIHVwZGF0ZXMgcmVmZXJlbmNlKHMpIGluIGl0cyByZXBvc2l0b3J5LgorSXQgZXhlY3V0ZXMgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5IG9uY2UgYWZ0ZXIgYWxsIHRoZSByZWZzIGhhdmUKK2JlZW4gdXBkYXRlZC4KKworSXQgdGFrZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgcGFyYW1ldGVycywgZWFjaCBvZiB3aGljaCBpcyB0aGUKK25hbWUgb2YgcmVmIHRoYXQgd2FzIGFjdHVhbGx5IHVwZGF0ZWQuCisKK1RoaXMgaG9vayBpcyBtZWFudCBwcmltYXJpbHkgZm9yIG5vdGlmaWNhdGlvbiwgYW5kIGNhbm5vdCBhZmZlY3QKK3RoZSBvdXRjb21lIG9mIGBnaXQgcmVjZWl2ZS1wYWNrYC4KKworVGhlICdwb3N0LXVwZGF0ZScgaG9vayBjYW4gdGVsbCB3aGF0IGFyZSB0aGUgaGVhZHMgdGhhdCB3ZXJlIHB1c2hlZCwKK2J1dCBpdCBkb2VzIG5vdCBrbm93IHdoYXQgdGhlaXIgb3JpZ2luYWwgYW5kIHVwZGF0ZWQgdmFsdWVzIGFyZSwKK3NvIGl0IGlzIGEgcG9vciBwbGFjZSB0byBkbyBsb2cgb2xkLi5uZXcuIFRoZQorPDxwb3N0LXJlY2VpdmUsJ3Bvc3QtcmVjZWl2ZSc+PiBob29rIGRvZXMgZ2V0IGJvdGggb3JpZ2luYWwgYW5kCit1cGRhdGVkIHZhbHVlcyBvZiB0aGUgcmVmcy4gWW91IG1pZ2h0IGNvbnNpZGVyIGl0IGluc3RlYWQgaWYgeW91IG5lZWQKK3RoZW0uCisKK1doZW4gZW5hYmxlZCwgdGhlIGRlZmF1bHQgJ3Bvc3QtdXBkYXRlJyBob29rIHJ1bnMKK2BnaXQgdXBkYXRlLXNlcnZlci1pbmZvYCB0byBrZWVwIHRoZSBpbmZvcm1hdGlvbiB1c2VkIGJ5IGR1bWIKK3RyYW5zcG9ydHMgKGUuZy4sIEhUVFApIHVwIHRvIGRhdGUuICBJZiB5b3UgYXJlIHB1Ymxpc2hpbmcKK2EgR2l0IHJlcG9zaXRvcnkgdGhhdCBpcyBhY2Nlc3NpYmxlIHZpYSBIVFRQLCB5b3Ugc2hvdWxkCitwcm9iYWJseSBlbmFibGUgdGhpcyBob29rLgorCitCb3RoIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IGFyZSBmb3J3YXJkZWQgdG8KK2BnaXQgc2VuZC1wYWNrYCBvbiB0aGUgb3RoZXIgZW5kLCBzbyB5b3UgY2FuIHNpbXBseSBgZWNob2AgbWVzc2FnZXMKK2ZvciB0aGUgdXNlci4KKworcHVzaC10by1jaGVja291dAorfn5+fn5+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBsaW5rZ2l0OmdpdC1yZWNlaXZlLXBhY2tbMV0gd2hlbiBpdCByZWFjdHMgdG8KK2BnaXQgcHVzaGAgYW5kIHVwZGF0ZXMgcmVmZXJlbmNlKHMpIGluIGl0cyByZXBvc2l0b3J5LCBhbmQgd2hlbgordGhlIHB1c2ggdHJpZXMgdG8gdXBkYXRlIHRoZSBicmFuY2ggdGhhdCBpcyBjdXJyZW50bHkgY2hlY2tlZCBvdXQKK2FuZCB0aGUgYHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2hgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgc2V0IHRvCitgdXBkYXRlSW5zdGVhZGAuICBTdWNoIGEgcHVzaCBieSBkZWZhdWx0IGlzIHJlZnVzZWQgaWYgdGhlIHdvcmtpbmcKK3RyZWUgYW5kIHRoZSBpbmRleCBvZiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgaGFzIGFueSBkaWZmZXJlbmNlIGZyb20KK3RoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQgY29tbWl0OyB3aGVuIGJvdGggdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlCitpbmRleCBtYXRjaCB0aGUgY3VycmVudCBjb21taXQsIHRoZXkgYXJlIHVwZGF0ZWQgdG8gbWF0Y2ggdGhlIG5ld2x5CitwdXNoZWQgdGlwIG9mIHRoZSBicmFuY2guICBUaGlzIGhvb2sgaXMgdG8gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUKK2RlZmF1bHQgYmVoYXZpb3VyLgorCitUaGUgaG9vayByZWNlaXZlcyB0aGUgY29tbWl0IHdpdGggd2hpY2ggdGhlIHRpcCBvZiB0aGUgY3VycmVudAorYnJhbmNoIGlzIGdvaW5nIHRvIGJlIHVwZGF0ZWQuICBJdCBjYW4gZXhpdCB3aXRoIGEgbm9uLXplcm8gc3RhdHVzCit0byByZWZ1c2UgdGhlIHB1c2ggKHdoZW4gaXQgZG9lcyBzbywgaXQgbXVzdCBub3QgbW9kaWZ5IHRoZSBpbmRleCBvcgordGhlIHdvcmtpbmcgdHJlZSkuICBPciBpdCBjYW4gbWFrZSBhbnkgbmVjZXNzYXJ5IGNoYW5nZXMgdG8gdGhlCit3b3JraW5nIHRyZWUgYW5kIHRvIHRoZSBpbmRleCB0byBicmluZyB0aGVtIHRvIHRoZSBkZXNpcmVkIHN0YXRlCit3aGVuIHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIHVwZGF0ZWQgdG8gdGhlIG5ldyBjb21taXQsIGFuZAorZXhpdCB3aXRoIGEgemVybyBzdGF0dXMuCisKK0ZvciBleGFtcGxlLCB0aGUgaG9vayBjYW4gc2ltcGx5IHJ1biBgZ2l0IHJlYWQtdHJlZSAtdSAtbSBIRUFEICIkMSJgCitpbiBvcmRlciB0byBlbXVsYXRlIGBnaXQgZmV0Y2hgIHRoYXQgaXMgcnVuIGluIHRoZSByZXZlcnNlIGRpcmVjdGlvbgord2l0aCBgZ2l0IHB1c2hgLCBhcyB0aGUgdHdvLXRyZWUgZm9ybSBvZiBgZ2l0IHJlYWQtdHJlZSAtdSAtbWAgaXMKK2Vzc2VudGlhbGx5IHRoZSBzYW1lIGFzIGBnaXQgc3dpdGNoYCBvciBgZ2l0IGNoZWNrb3V0YAordGhhdCBzd2l0Y2hlcyBicmFuY2hlcyB3aGlsZQora2VlcGluZyB0aGUgbG9jYWwgY2hhbmdlcyBpbiB0aGUgd29ya2luZyB0cmVlIHRoYXQgZG8gbm90IGludGVyZmVyZQord2l0aCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBicmFuY2hlcy4KKworCitwcmUtYXV0by1nYworfn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgYGdpdCBnYyAtLWF1dG9gIChzZWUgbGlua2dpdDpnaXQtZ2NbMV0pLiBJdAordGFrZXMgbm8gcGFyYW1ldGVyLCBhbmQgZXhpdGluZyB3aXRoIG5vbi16ZXJvIHN0YXR1cyBmcm9tIHRoaXMgc2NyaXB0CitjYXVzZXMgdGhlIGBnaXQgZ2MgLS1hdXRvYCB0byBhYm9ydC4KKworcG9zdC1yZXdyaXRlCit+fn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgY29tbWFuZHMgdGhhdCByZXdyaXRlIGNvbW1pdHMKKyhsaW5rZ2l0OmdpdC1jb21taXRbMV0gd2hlbiBjYWxsZWQgd2l0aCBgLS1hbWVuZGAgYW5kCitsaW5rZ2l0OmdpdC1yZWJhc2VbMV07IGhvd2V2ZXIsIGZ1bGwtaGlzdG9yeSAocmUpd3JpdGluZyB0b29scyBsaWtlCitsaW5rZ2l0OmdpdC1mYXN0LWltcG9ydFsxXSBvcgoraHR0cHM6Ly9naXRodWIuY29tL25ld3Jlbi9naXQtZmlsdGVyLXJlcG9bZ2l0LWZpbHRlci1yZXBvXSB0eXBpY2FsbHkKK2RvIG5vdCBjYWxsIGl0ISkuICBJdHMgZmlyc3QgYXJndW1lbnQgZGVub3RlcyB0aGUgY29tbWFuZCBpdCB3YXMKK2ludm9rZWQgYnk6IGN1cnJlbnRseSBvbmUgb2YgYGFtZW5kYCBvciBgcmViYXNlYC4gIEZ1cnRoZXIKK2NvbW1hbmQtZGVwZW5kZW50IGFyZ3VtZW50cyBtYXkgYmUgcGFzc2VkIGluIHRoZSBmdXR1cmUuCisKK1RoZSBob29rIHJlY2VpdmVzIGEgbGlzdCBvZiB0aGUgcmV3cml0dGVuIGNvbW1pdHMgb24gc3RkaW4sIGluIHRoZQorZm9ybWF0CisKKyAgPG9sZC1zaGExPiBTUCA8bmV3LXNoYTE+IFsgU1AgPGV4dHJhLWluZm8+IF0gTEYKKworVGhlICdleHRyYS1pbmZvJyBpcyBhZ2FpbiBjb21tYW5kLWRlcGVuZGVudC4gIElmIGl0IGlzIGVtcHR5LCB0aGUKK3ByZWNlZGluZyBTUCBpcyBhbHNvIG9taXR0ZWQuICBDdXJyZW50bHksIG5vIGNvbW1hbmRzIHBhc3MgYW55CisnZXh0cmEtaW5mbycuCisKK1RoZSBob29rIGFsd2F5cyBydW5zIGFmdGVyIHRoZSBhdXRvbWF0aWMgbm90ZSBjb3B5aW5nIChzZWUKKyJub3Rlcy5yZXdyaXRlLjxjb21tYW5kPiIgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdKSBoYXMgaGFwcGVuZWQsIGFuZAordGh1cyBoYXMgYWNjZXNzIHRvIHRoZXNlIG5vdGVzLgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmQtc3BlY2lmaWMgY29tbWVudHMgYXBwbHk6CisKK3JlYmFzZTo6CisJRm9yIHRoZSAnc3F1YXNoJyBhbmQgJ2ZpeHVwJyBvcGVyYXRpb24sIGFsbCBjb21taXRzIHRoYXQgd2VyZQorCXNxdWFzaGVkIGFyZSBsaXN0ZWQgYXMgYmVpbmcgcmV3cml0dGVuIHRvIHRoZSBzcXVhc2hlZCBjb21taXQuCisJVGhpcyBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgc2V2ZXJhbCBsaW5lcyBzaGFyaW5nIHRoZSBzYW1lCisJJ25ldy1zaGExJy4KKysKK1RoZSBjb21taXRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGxpc3RlZCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHdlcmUKK3Byb2Nlc3NlZCBieSByZWJhc2UuCisKK3NlbmRlbWFpbC12YWxpZGF0ZQorfn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5IGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0uICBJdCB0YWtlcyBhIHNpbmdsZSBwYXJhbWV0ZXIsCit0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGhvbGRzIHRoZSBlLW1haWwgdG8gYmUgc2VudC4gIEV4aXRpbmcgd2l0aCBhCitub24temVybyBzdGF0dXMgY2F1c2VzIGBnaXQgc2VuZC1lbWFpbGAgdG8gYWJvcnQgYmVmb3JlIHNlbmRpbmcgYW55CitlLW1haWxzLgorCitmc21vbml0b3Itd2F0Y2htYW4KK35+fn5+fn5+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCB3aGVuIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgY29yZS5mc21vbml0b3JgIGlzCitzZXQgdG8gYC5naXQvaG9va3MvZnNtb25pdG9yLXdhdGNobWFuYCBvciBgLmdpdC9ob29rcy9mc21vbml0b3Itd2F0Y2htYW52MmAKK2RlcGVuZGluZyBvbiB0aGUgdmVyc2lvbiBvZiB0aGUgaG9vayB0byB1c2UuCisKK1ZlcnNpb24gMSB0YWtlcyB0d28gYXJndW1lbnRzLCBhIHZlcnNpb24gKDEpIGFuZCB0aGUgdGltZSBpbiBlbGFwc2VkCituYW5vc2Vjb25kcyBzaW5jZSBtaWRuaWdodCwgSmFudWFyeSAxLCAxOTcwLgorCitWZXJzaW9uIDIgdGFrZXMgdHdvIGFyZ3VtZW50cywgYSB2ZXJzaW9uICgyKSBhbmQgYSB0b2tlbiB0aGF0IGlzIHVzZWQKK2ZvciBpZGVudGlmeWluZyBjaGFuZ2VzIHNpbmNlIHRoZSB0b2tlbi4gRm9yIHdhdGNobWFuIHRoaXMgd291bGQgYmUKK2EgY2xvY2sgaWQuIFRoaXMgdmVyc2lvbiBtdXN0IG91dHB1dCB0byBzdGRvdXQgdGhlIG5ldyB0b2tlbiBmb2xsb3dlZAorYnkgYSBOVUwgYmVmb3JlIHRoZSBsaXN0IG9mIGZpbGVzLgorCitUaGUgaG9vayBzaG91bGQgb3V0cHV0IHRvIHN0ZG91dCB0aGUgbGlzdCBvZiBhbGwgZmlsZXMgaW4gdGhlIHdvcmtpbmcKK2RpcmVjdG9yeSB0aGF0IG1heSBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIHJlcXVlc3RlZCB0aW1lLiAgVGhlIGxvZ2ljCitzaG91bGQgYmUgaW5jbHVzaXZlIHNvIHRoYXQgaXQgZG9lcyBub3QgbWlzcyBhbnkgcG90ZW50aWFsIGNoYW5nZXMuCitUaGUgcGF0aHMgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSB3b3JraW5nIGRpcmVjdG9yeQorYW5kIGJlIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBOVUwuCisKK0l0IGlzIE9LIHRvIGluY2x1ZGUgZmlsZXMgd2hpY2ggaGF2ZSBub3QgYWN0dWFsbHkgY2hhbmdlZC4gIEFsbCBjaGFuZ2VzCitpbmNsdWRpbmcgbmV3bHktY3JlYXRlZCBhbmQgZGVsZXRlZCBmaWxlcyBzaG91bGQgYmUgaW5jbHVkZWQuIFdoZW4KK2ZpbGVzIGFyZSByZW5hbWVkLCBib3RoIHRoZSBvbGQgYW5kIHRoZSBuZXcgbmFtZSBzaG91bGQgYmUgaW5jbHVkZWQuCisKK0dpdCB3aWxsIGxpbWl0IHdoYXQgZmlsZXMgaXQgY2hlY2tzIGZvciBjaGFuZ2VzIGFzIHdlbGwgYXMgd2hpY2gKK2RpcmVjdG9yaWVzIGFyZSBjaGVja2VkIGZvciB1bnRyYWNrZWQgZmlsZXMgYmFzZWQgb24gdGhlIHBhdGggbmFtZXMKK2dpdmVuLgorCitBbiBvcHRpbWl6ZWQgd2F5IHRvIHRlbGwgZ2l0ICJhbGwgZmlsZXMgaGF2ZSBjaGFuZ2VkIiBpcyB0byByZXR1cm4KK3RoZSBmaWxlbmFtZSBgL2AuCisKK1RoZSBleGl0IHN0YXR1cyBkZXRlcm1pbmVzIHdoZXRoZXIgZ2l0IHdpbGwgdXNlIHRoZSBkYXRhIGZyb20gdGhlCitob29rIHRvIGxpbWl0IGl0cyBzZWFyY2guICBPbiBlcnJvciwgaXQgd2lsbCBmYWxsIGJhY2sgdG8gdmVyaWZ5aW5nCithbGwgZmlsZXMgYW5kIGZvbGRlcnMuCisKK3A0LWNoYW5nZWxpc3QKK35+fn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgYGdpdC1wNCBzdWJtaXRgLgorCitUaGUgYHA0LWNoYW5nZWxpc3RgIGhvb2sgaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGNoYW5nZWxpc3QKK21lc3NhZ2UgaGFzIGJlZW4gZWRpdGVkIGJ5IHRoZSB1c2VyLiBJdCBjYW4gYmUgYnlwYXNzZWQgd2l0aCB0aGUKK2AtLW5vLXZlcmlmeWAgb3B0aW9uLiBJdCB0YWtlcyBhIHNpbmdsZSBwYXJhbWV0ZXIsIHRoZSBuYW1lCitvZiB0aGUgZmlsZSB0aGF0IGhvbGRzIHRoZSBwcm9wb3NlZCBjaGFuZ2VsaXN0IHRleHQuIEV4aXRpbmcKK3dpdGggYSBub24temVybyBzdGF0dXMgY2F1c2VzIHRoZSBjb21tYW5kIHRvIGFib3J0LgorCitUaGUgaG9vayBpcyBhbGxvd2VkIHRvIGVkaXQgdGhlIGNoYW5nZWxpc3QgZmlsZSBhbmQgY2FuIGJlIHVzZWQKK3RvIG5vcm1hbGl6ZSB0aGUgdGV4dCBpbnRvIHNvbWUgcHJvamVjdCBzdGFuZGFyZCBmb3JtYXQuIEl0IGNhbgorYWxzbyBiZSB1c2VkIHRvIHJlZnVzZSB0aGUgU3VibWl0IGFmdGVyIGluc3BlY3QgdGhlIG1lc3NhZ2UgZmlsZS4KKworUnVuIGBnaXQtcDQgc3VibWl0IC0taGVscGAgZm9yIGRldGFpbHMuCisKK3A0LXByZXBhcmUtY2hhbmdlbGlzdAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5IGBnaXQtcDQgc3VibWl0YC4KKworVGhlIGBwNC1wcmVwYXJlLWNoYW5nZWxpc3RgIGhvb2sgaXMgZXhlY3V0ZWQgcmlnaHQgYWZ0ZXIgcHJlcGFyaW5nCit0aGUgZGVmYXVsdCBjaGFuZ2VsaXN0IG1lc3NhZ2UgYW5kIGJlZm9yZSB0aGUgZWRpdG9yIGlzIHN0YXJ0ZWQuCitJdCB0YWtlcyBvbmUgcGFyYW1ldGVyLCB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZQorY2hhbmdlbGlzdCB0ZXh0LiBFeGl0aW5nIHdpdGggYSBub24temVybyBzdGF0dXMgZnJvbSB0aGUgc2NyaXB0Cit3aWxsIGFib3J0IHRoZSBwcm9jZXNzLgorCitUaGUgcHVycG9zZSBvZiB0aGUgaG9vayBpcyB0byBlZGl0IHRoZSBtZXNzYWdlIGZpbGUgaW4gcGxhY2UsCithbmQgaXQgaXMgbm90IHN1cHJlc3NlZCBieSB0aGUgYC0tbm8tdmVyaWZ5YCBvcHRpb24uIFRoaXMgaG9vaworaXMgY2FsbGVkIGV2ZW4gaWYgYC0tcHJlcGFyZS1wNC1vbmx5YCBpcyBzZXQuCisKK1J1biBgZ2l0LXA0IHN1Ym1pdCAtLWhlbHBgIGZvciBkZXRhaWxzLgorCitwNC1wb3N0LWNoYW5nZWxpc3QKK35+fn5+fn5+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBgZ2l0LXA0IHN1Ym1pdGAuCisKK1RoZSBgcDQtcG9zdC1jaGFuZ2VsaXN0YCBob29rIGlzIGludm9rZWQgYWZ0ZXIgdGhlIHN1Ym1pdCBoYXMKK3N1Y2Nlc3NmdWxseSBvY2N1cmVkIGluIFA0LiBJdCB0YWtlcyBubyBwYXJhbWV0ZXJzIGFuZCBpcyBtZWFudAorcHJpbWFyaWx5IGZvciBub3RpZmljYXRpb24gYW5kIGNhbm5vdCBhZmZlY3QgdGhlIG91dGNvbWUgb2YgdGhlCitnaXQgcDQgc3VibWl0IGFjdGlvbi4KKworUnVuIGBnaXQtcDQgc3VibWl0IC0taGVscGAgZm9yIGRldGFpbHMuCisKK3A0LXByZS1zdWJtaXQKK35+fn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgYGdpdC1wNCBzdWJtaXRgLiBJdCB0YWtlcyBubyBwYXJhbWV0ZXJzIGFuZCBub3RoaW5nCitmcm9tIHN0YW5kYXJkIGlucHV0LiBFeGl0aW5nIHdpdGggbm9uLXplcm8gc3RhdHVzIGZyb20gdGhpcyBzY3JpcHQgcHJldmVudAorYGdpdC1wNCBzdWJtaXRgIGZyb20gbGF1bmNoaW5nLiBJdCBjYW4gYmUgYnlwYXNzZWQgd2l0aCB0aGUgYC0tbm8tdmVyaWZ5YAorY29tbWFuZCBsaW5lIG9wdGlvbi4gUnVuIGBnaXQtcDQgc3VibWl0IC0taGVscGAgZm9yIGRldGFpbHMuCisKKworCitwb3N0LWluZGV4LWNoYW5nZQorfn5+fn5+fn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgd2hlbiB0aGUgaW5kZXggaXMgd3JpdHRlbiBpbiByZWFkLWNhY2hlLmMKK2RvX3dyaXRlX2xvY2tlZF9pbmRleC4KKworVGhlIGZpcnN0IHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIGhvb2sgaXMgdGhlIGluZGljYXRvciBmb3IgdGhlCit3b3JraW5nIGRpcmVjdG9yeSBiZWluZyB1cGRhdGVkLiAgIjEiIG1lYW5pbmcgd29ya2luZyBkaXJlY3RvcnkKK3dhcyB1cGRhdGVkIG9yICIwIiB3aGVuIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3YXMgbm90IHVwZGF0ZWQuCisKK1RoZSBzZWNvbmQgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgaG9vayBpcyB0aGUgaW5kaWNhdG9yIGZvciB3aGV0aGVyCitvciBub3QgdGhlIGluZGV4IHdhcyB1cGRhdGVkIGFuZCB0aGUgc2tpcC13b3JrdHJlZSBiaXQgY291bGQgaGF2ZQorY2hhbmdlZC4gICIxIiBtZWFuaW5nIHNraXAtd29ya3RyZWUgYml0cyBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZAorYW5kICIwIiBtZWFuaW5nIHRoZXkgd2VyZSBub3QuCisKK09ubHkgb25lIHBhcmFtZXRlciBzaG91bGQgYmUgc2V0IHRvICIxIiB3aGVuIHRoZSBob29rIHJ1bnMuICBUaGUgaG9vaworcnVubmluZyBwYXNzaW5nICIxIiwgIjEiIHNob3VsZCBub3QgYmUgcG9zc2libGUuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRpZ25vcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRpZ25vcmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0N2IxYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGlnbm9yZS50eHQKQEAgLTAsMCArMSwyMzggQEAKK2dpdGlnbm9yZSg1KQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdGlnbm9yZSAtIFNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUKKworU1lOT1BTSVMKKy0tLS0tLS0tCiskWERHX0NPTkZJR19IT01FL2dpdC9pZ25vcmUsICRHSVRfRElSL2luZm8vZXhjbHVkZSwgLmdpdGlnbm9yZQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworQSBgZ2l0aWdub3JlYCBmaWxlIHNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0aGF0CitHaXQgc2hvdWxkIGlnbm9yZS4KK0ZpbGVzIGFscmVhZHkgdHJhY2tlZCBieSBHaXQgYXJlIG5vdCBhZmZlY3RlZDsgc2VlIHRoZSBOT1RFUworYmVsb3cgZm9yIGRldGFpbHMuCisKK0VhY2ggbGluZSBpbiBhIGBnaXRpZ25vcmVgIGZpbGUgc3BlY2lmaWVzIGEgcGF0dGVybi4KK1doZW4gZGVjaWRpbmcgd2hldGhlciB0byBpZ25vcmUgYSBwYXRoLCBHaXQgbm9ybWFsbHkgY2hlY2tzCitgZ2l0aWdub3JlYCBwYXR0ZXJucyBmcm9tIG11bHRpcGxlIHNvdXJjZXMsIHdpdGggdGhlIGZvbGxvd2luZworb3JkZXIgb2YgcHJlY2VkZW5jZSwgZnJvbSBoaWdoZXN0IHRvIGxvd2VzdCAod2l0aGluIG9uZSBsZXZlbCBvZgorcHJlY2VkZW5jZSwgdGhlIGxhc3QgbWF0Y2hpbmcgcGF0dGVybiBkZWNpZGVzIHRoZSBvdXRjb21lKToKKworICogUGF0dGVybnMgcmVhZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgZm9yIHRob3NlIGNvbW1hbmRzIHRoYXQgc3VwcG9ydAorICAgdGhlbS4KKworICogUGF0dGVybnMgcmVhZCBmcm9tIGEgYC5naXRpZ25vcmVgIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5CisgICBhcyB0aGUgcGF0aCwgb3IgaW4gYW55IHBhcmVudCBkaXJlY3RvcnksIHdpdGggcGF0dGVybnMgaW4gdGhlCisgICBoaWdoZXIgbGV2ZWwgZmlsZXMgKHVwIHRvIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29yayB0cmVlKSBiZWluZyBvdmVycmlkZGVuCisgICBieSB0aG9zZSBpbiBsb3dlciBsZXZlbCBmaWxlcyBkb3duIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZmlsZS4KKyAgIFRoZXNlIHBhdHRlcm5zIG1hdGNoIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUKKyAgIGAuZ2l0aWdub3JlYCBmaWxlLiAgQSBwcm9qZWN0IG5vcm1hbGx5IGluY2x1ZGVzIHN1Y2gKKyAgIGAuZ2l0aWdub3JlYCBmaWxlcyBpbiBpdHMgcmVwb3NpdG9yeSwgY29udGFpbmluZyBwYXR0ZXJucyBmb3IKKyAgIGZpbGVzIGdlbmVyYXRlZCBhcyBwYXJ0IG9mIHRoZSBwcm9qZWN0IGJ1aWxkLgorCisgKiBQYXR0ZXJucyByZWFkIGZyb20gYCRHSVRfRElSL2luZm8vZXhjbHVkZWAuCisKKyAqIFBhdHRlcm5zIHJlYWQgZnJvbSB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIGBjb3JlLmV4Y2x1ZGVzRmlsZWAuCisKK1doaWNoIGZpbGUgdG8gcGxhY2UgYSBwYXR0ZXJuIGluIGRlcGVuZHMgb24gaG93IHRoZSBwYXR0ZXJuIGlzIG1lYW50IHRvCitiZSB1c2VkLgorCisgKiBQYXR0ZXJucyB3aGljaCBzaG91bGQgYmUgdmVyc2lvbi1jb250cm9sbGVkIGFuZCBkaXN0cmlidXRlZCB0bworICAgb3RoZXIgcmVwb3NpdG9yaWVzIHZpYSBjbG9uZSAoaS5lLiwgZmlsZXMgdGhhdCBhbGwgZGV2ZWxvcGVycyB3aWxsIHdhbnQKKyAgIHRvIGlnbm9yZSkgc2hvdWxkIGdvIGludG8gYSBgLmdpdGlnbm9yZWAgZmlsZS4KKworICogUGF0dGVybnMgd2hpY2ggYXJlCisgICBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgcmVwb3NpdG9yeSBidXQgd2hpY2ggZG8gbm90IG5lZWQgdG8gYmUgc2hhcmVkCisgICB3aXRoIG90aGVyIHJlbGF0ZWQgcmVwb3NpdG9yaWVzIChlLmcuLCBhdXhpbGlhcnkgZmlsZXMgdGhhdCBsaXZlIGluc2lkZQorICAgdGhlIHJlcG9zaXRvcnkgYnV0IGFyZSBzcGVjaWZpYyB0byBvbmUgdXNlcidzIHdvcmtmbG93KSBzaG91bGQgZ28gaW50bworICAgdGhlIGAkR0lUX0RJUi9pbmZvL2V4Y2x1ZGVgIGZpbGUuCisKKyAqIFBhdHRlcm5zIHdoaWNoIGEgdXNlciB3YW50cyBHaXQgdG8KKyAgIGlnbm9yZSBpbiBhbGwgc2l0dWF0aW9ucyAoZS5nLiwgYmFja3VwIG9yIHRlbXBvcmFyeSBmaWxlcyBnZW5lcmF0ZWQgYnkKKyAgIHRoZSB1c2VyJ3MgZWRpdG9yIG9mIGNob2ljZSkgZ2VuZXJhbGx5IGdvIGludG8gYSBmaWxlIHNwZWNpZmllZCBieQorICAgYGNvcmUuZXhjbHVkZXNGaWxlYCBpbiB0aGUgdXNlcidzIGB+Ly5naXRjb25maWdgLiBJdHMgZGVmYXVsdCB2YWx1ZSBpcworICAgJFhER19DT05GSUdfSE9NRS9naXQvaWdub3JlLiBJZiAkWERHX0NPTkZJR19IT01FIGlzIGVpdGhlciBub3Qgc2V0IG9yCisgICBlbXB0eSwgJEhPTUUvLmNvbmZpZy9naXQvaWdub3JlIGlzIHVzZWQgaW5zdGVhZC4KKworVGhlIHVuZGVybHlpbmcgR2l0IHBsdW1iaW5nIHRvb2xzLCBzdWNoIGFzCisnZ2l0IGxzLWZpbGVzJyBhbmQgJ2dpdCByZWFkLXRyZWUnLCByZWFkCitgZ2l0aWdub3JlYCBwYXR0ZXJucyBzcGVjaWZpZWQgYnkgY29tbWFuZC1saW5lIG9wdGlvbnMsIG9yIGZyb20KK2ZpbGVzIHNwZWNpZmllZCBieSBjb21tYW5kLWxpbmUgb3B0aW9ucy4gIEhpZ2hlci1sZXZlbCBHaXQKK3Rvb2xzLCBzdWNoIGFzICdnaXQgc3RhdHVzJyBhbmQgJ2dpdCBhZGQnLAordXNlIHBhdHRlcm5zIGZyb20gdGhlIHNvdXJjZXMgc3BlY2lmaWVkIGFib3ZlLgorCitQQVRURVJOIEZPUk1BVAorLS0tLS0tLS0tLS0tLS0KKworIC0gQSBibGFuayBsaW5lIG1hdGNoZXMgbm8gZmlsZXMsIHNvIGl0IGNhbiBzZXJ2ZSBhcyBhIHNlcGFyYXRvcgorICAgZm9yIHJlYWRhYmlsaXR5LgorCisgLSBBIGxpbmUgc3RhcnRpbmcgd2l0aCAjIHNlcnZlcyBhcyBhIGNvbW1lbnQuCisgICBQdXQgYSBiYWNrc2xhc2ggKCJgXGAiKSBpbiBmcm9udCBvZiB0aGUgZmlyc3QgaGFzaCBmb3IgcGF0dGVybnMKKyAgIHRoYXQgYmVnaW4gd2l0aCBhIGhhc2guCisKKyAtIFRyYWlsaW5nIHNwYWNlcyBhcmUgaWdub3JlZCB1bmxlc3MgdGhleSBhcmUgcXVvdGVkIHdpdGggYmFja3NsYXNoCisgICAoImBcYCIpLgorCisgLSBBbiBvcHRpb25hbCBwcmVmaXggImAhYCIgd2hpY2ggbmVnYXRlcyB0aGUgcGF0dGVybjsgYW55CisgICBtYXRjaGluZyBmaWxlIGV4Y2x1ZGVkIGJ5IGEgcHJldmlvdXMgcGF0dGVybiB3aWxsIGJlY29tZQorICAgaW5jbHVkZWQgYWdhaW4uIEl0IGlzIG5vdCBwb3NzaWJsZSB0byByZS1pbmNsdWRlIGEgZmlsZSBpZiBhIHBhcmVudAorICAgZGlyZWN0b3J5IG9mIHRoYXQgZmlsZSBpcyBleGNsdWRlZC4gR2l0IGRvZXNuJ3QgbGlzdCBleGNsdWRlZAorICAgZGlyZWN0b3JpZXMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHNvIGFueSBwYXR0ZXJucyBvbiBjb250YWluZWQKKyAgIGZpbGVzIGhhdmUgbm8gZWZmZWN0LCBubyBtYXR0ZXIgd2hlcmUgdGhleSBhcmUgZGVmaW5lZC4KKyAgIFB1dCBhIGJhY2tzbGFzaCAoImBcYCIpIGluIGZyb250IG9mIHRoZSBmaXJzdCAiYCFgIiBmb3IgcGF0dGVybnMKKyAgIHRoYXQgYmVnaW4gd2l0aCBhIGxpdGVyYWwgImAhYCIsIGZvciBleGFtcGxlLCAiYFwhaW1wb3J0YW50IS50eHRgIi4KKworIC0gVGhlIHNsYXNoICcvJyBpcyB1c2VkIGFzIHRoZSBkaXJlY3Rvcnkgc2VwYXJhdG9yLiBTZXBhcmF0b3JzIG1heQorICAgb2NjdXIgYXQgdGhlIGJlZ2lubmluZywgbWlkZGxlIG9yIGVuZCBvZiB0aGUgYC5naXRpZ25vcmVgIHNlYXJjaCBwYXR0ZXJuLgorCisgLSBJZiB0aGVyZSBpcyBhIHNlcGFyYXRvciBhdCB0aGUgYmVnaW5uaW5nIG9yIG1pZGRsZSAob3IgYm90aCkgb2YgdGhlCisgICBwYXR0ZXJuLCB0aGVuIHRoZSBwYXR0ZXJuIGlzIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgbGV2ZWwgb2YgdGhlCisgICBwYXJ0aWN1bGFyIGAuZ2l0aWdub3JlYCBmaWxlIGl0c2VsZi4gT3RoZXJ3aXNlIHRoZSBwYXR0ZXJuIG1heSBhbHNvCisgICBtYXRjaCBhdCBhbnkgbGV2ZWwgYmVsb3cgdGhlIGAuZ2l0aWdub3JlYCBsZXZlbC4KKworIC0gSWYgdGhlcmUgaXMgYSBzZXBhcmF0b3IgYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiB0aGVuIHRoZSBwYXR0ZXJuCisgICB3aWxsIG9ubHkgbWF0Y2ggZGlyZWN0b3JpZXMsIG90aGVyd2lzZSB0aGUgcGF0dGVybiBjYW4gbWF0Y2ggYm90aAorICAgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgorCisgLSBGb3IgZXhhbXBsZSwgYSBwYXR0ZXJuIGBkb2MvZnJvdHovYCBtYXRjaGVzIGBkb2MvZnJvdHpgIGRpcmVjdG9yeSwKKyAgIGJ1dCBub3QgYGEvZG9jL2Zyb3R6YCBkaXJlY3Rvcnk7IGhvd2V2ZXIgYGZyb3R6L2AgbWF0Y2hlcyBgZnJvdHpgCisgICBhbmQgYGEvZnJvdHpgIHRoYXQgaXMgYSBkaXJlY3RvcnkgKGFsbCBwYXRocyBhcmUgcmVsYXRpdmUgZnJvbQorICAgdGhlIGAuZ2l0aWdub3JlYCBmaWxlKS4KKworIC0gQW4gYXN0ZXJpc2sgImAqYCIgbWF0Y2hlcyBhbnl0aGluZyBleGNlcHQgYSBzbGFzaC4KKyAgIFRoZSBjaGFyYWN0ZXIgImA/YCIgbWF0Y2hlcyBhbnkgb25lIGNoYXJhY3RlciBleGNlcHQgImAvYCIuCisgICBUaGUgcmFuZ2Ugbm90YXRpb24sIGUuZy4gYFthLXpBLVpdYCwgY2FuIGJlIHVzZWQgdG8gbWF0Y2gKKyAgIG9uZSBvZiB0aGUgY2hhcmFjdGVycyBpbiBhIHJhbmdlLiBTZWUgZm5tYXRjaCgzKSBhbmQgdGhlCisgICBGTk1fUEFUSE5BTUUgZmxhZyBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uLgorCitUd28gY29uc2VjdXRpdmUgYXN0ZXJpc2tzICgiYCoqYCIpIGluIHBhdHRlcm5zIG1hdGNoZWQgYWdhaW5zdAorZnVsbCBwYXRobmFtZSBtYXkgaGF2ZSBzcGVjaWFsIG1lYW5pbmc6CisKKyAtIEEgbGVhZGluZyAiYCoqYCIgZm9sbG93ZWQgYnkgYSBzbGFzaCBtZWFucyBtYXRjaCBpbiBhbGwKKyAgIGRpcmVjdG9yaWVzLiBGb3IgZXhhbXBsZSwgImAqKi9mb29gIiBtYXRjaGVzIGZpbGUgb3IgZGlyZWN0b3J5CisgICAiYGZvb2AiIGFueXdoZXJlLCB0aGUgc2FtZSBhcyBwYXR0ZXJuICJgZm9vYCIuICJgKiovZm9vL2JhcmAiCisgICBtYXRjaGVzIGZpbGUgb3IgZGlyZWN0b3J5ICJgYmFyYCIgYW55d2hlcmUgdGhhdCBpcyBkaXJlY3RseQorICAgdW5kZXIgZGlyZWN0b3J5ICJgZm9vYCIuCisKKyAtIEEgdHJhaWxpbmcgImAvKipgIiBtYXRjaGVzIGV2ZXJ5dGhpbmcgaW5zaWRlLiBGb3IgZXhhbXBsZSwKKyAgICJgYWJjLyoqYCIgbWF0Y2hlcyBhbGwgZmlsZXMgaW5zaWRlIGRpcmVjdG9yeSAiYGFiY2AiLCByZWxhdGl2ZQorICAgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBgLmdpdGlnbm9yZWAgZmlsZSwgd2l0aCBpbmZpbml0ZSBkZXB0aC4KKworIC0gQSBzbGFzaCBmb2xsb3dlZCBieSB0d28gY29uc2VjdXRpdmUgYXN0ZXJpc2tzIHRoZW4gYSBzbGFzaAorICAgbWF0Y2hlcyB6ZXJvIG9yIG1vcmUgZGlyZWN0b3JpZXMuIEZvciBleGFtcGxlLCAiYGEvKiovYmAiCisgICBtYXRjaGVzICJgYS9iYCIsICJgYS94L2JgIiwgImBhL3gveS9iYCIgYW5kIHNvIG9uLgorCisgLSBPdGhlciBjb25zZWN1dGl2ZSBhc3Rlcmlza3MgYXJlIGNvbnNpZGVyZWQgcmVndWxhciBhc3Rlcmlza3MgYW5kCisgICB3aWxsIG1hdGNoIGFjY29yZGluZyB0byB0aGUgcHJldmlvdXMgcnVsZXMuCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUuZXhjbHVkZXNGaWxlYCBpbmRpY2F0ZXMgYSBwYXRoIHRvIGEKK2ZpbGUgY29udGFpbmluZyBwYXR0ZXJucyBvZiBmaWxlIG5hbWVzIHRvIGV4Y2x1ZGUsIHNpbWlsYXIgdG8KK2AkR0lUX0RJUi9pbmZvL2V4Y2x1ZGVgLiAgUGF0dGVybnMgaW4gdGhlIGV4Y2x1ZGUgZmlsZSBhcmUgdXNlZCBpbiBhZGRpdGlvbiB0bwordGhvc2UgaW4gYCRHSVRfRElSL2luZm8vZXhjbHVkZWAuCisKK05PVEVTCistLS0tLQorCitUaGUgcHVycG9zZSBvZiBnaXRpZ25vcmUgZmlsZXMgaXMgdG8gZW5zdXJlIHRoYXQgY2VydGFpbiBmaWxlcworbm90IHRyYWNrZWQgYnkgR2l0IHJlbWFpbiB1bnRyYWNrZWQuCisKK1RvIHN0b3AgdHJhY2tpbmcgYSBmaWxlIHRoYXQgaXMgY3VycmVudGx5IHRyYWNrZWQsIHVzZQorJ2dpdCBybSAtLWNhY2hlZCcuCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisgLSBUaGUgcGF0dGVybiBgaGVsbG8uKmAgbWF0Y2hlcyBhbnkgZmlsZSBvciBmb2xkZXIKKyAgIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYGhlbGxvYC4gSWYgb25lIHdhbnRzIHRvIHJlc3RyaWN0CisgICB0aGlzIG9ubHkgdG8gdGhlIGRpcmVjdG9yeSBhbmQgbm90IGluIGl0cyBzdWJkaXJlY3RvcmllcywKKyAgIG9uZSBjYW4gcHJlcGVuZCB0aGUgcGF0dGVybiB3aXRoIGEgc2xhc2gsIGkuZS4gYC9oZWxsby4qYDsKKyAgIHRoZSBwYXR0ZXJuIG5vdyBtYXRjaGVzIGBoZWxsby50eHRgLCBgaGVsbG8uY2AgYnV0IG5vdAorICAgYGEvaGVsbG8uamF2YWAuCisKKyAtIFRoZSBwYXR0ZXJuIGBmb28vYCB3aWxsIG1hdGNoIGEgZGlyZWN0b3J5IGBmb29gIGFuZAorICAgcGF0aHMgdW5kZXJuZWF0aCBpdCwgYnV0IHdpbGwgbm90IG1hdGNoIGEgcmVndWxhciBmaWxlCisgICBvciBhIHN5bWJvbGljIGxpbmsgYGZvb2AgKHRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZQorICAgd2F5IGhvdyBwYXRoc3BlYyB3b3JrcyBpbiBnZW5lcmFsIGluIEdpdCkKKworIC0gVGhlIHBhdHRlcm4gYGRvYy9mcm90emAgYW5kIGAvZG9jL2Zyb3R6YCBoYXZlIHRoZSBzYW1lIGVmZmVjdAorICAgaW4gYW55IGAuZ2l0aWdub3JlYCBmaWxlLiBJbiBvdGhlciB3b3JkcywgYSBsZWFkaW5nIHNsYXNoCisgICBpcyBub3QgcmVsZXZhbnQgIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBtaWRkbGUgc2xhc2ggaW4KKyAgIHRoZSBwYXR0ZXJuLgorCisgLSBUaGUgcGF0dGVybiAiZm9vLyoiLCBtYXRjaGVzICJmb28vdGVzdC5qc29uIgorICAgKGEgcmVndWxhciBmaWxlKSwgImZvby9iYXIiIChhIGRpcmVjdG9yeSksIGJ1dCBpdCBkb2VzIG5vdCBtYXRjaAorICAgImZvby9iYXIvaGVsbG8uYyIgKGEgcmVndWxhciBmaWxlKSwgYXMgdGhlIGFzdGVyaXNrIGluIHRoZQorICAgcGF0dGVybiBkb2VzIG5vdCBtYXRjaCAiYmFyL2hlbGxvLmMiIHdoaWNoIGhhcyBhIHNsYXNoIGluIGl0LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICQgZ2l0IHN0YXR1cworICAgIFsuLi5dCisgICAgIyBVbnRyYWNrZWQgZmlsZXM6CisgICAgWy4uLl0KKyAgICAjICAgICAgIERvY3VtZW50YXRpb24vZm9vLmh0bWwKKyAgICAjICAgICAgIERvY3VtZW50YXRpb24vZ2l0aWdub3JlLmh0bWwKKyAgICAjICAgICAgIGZpbGUubworICAgICMgICAgICAgbGliLmEKKyAgICAjICAgICAgIHNyYy9pbnRlcm5hbC5vCisgICAgWy4uLl0KKyAgICAkIGNhdCAuZ2l0L2luZm8vZXhjbHVkZQorICAgICMgaWdub3JlIG9iamVjdHMgYW5kIGFyY2hpdmVzLCBhbnl3aGVyZSBpbiB0aGUgdHJlZS4KKyAgICAqLltvYV0KKyAgICAkIGNhdCBEb2N1bWVudGF0aW9uLy5naXRpZ25vcmUKKyAgICAjIGlnbm9yZSBnZW5lcmF0ZWQgaHRtbCBmaWxlcywKKyAgICAqLmh0bWwKKyAgICAjIGV4Y2VwdCBmb28uaHRtbCB3aGljaCBpcyBtYWludGFpbmVkIGJ5IGhhbmQKKyAgICAhZm9vLmh0bWwKKyAgICAkIGdpdCBzdGF0dXMKKyAgICBbLi4uXQorICAgICMgVW50cmFja2VkIGZpbGVzOgorICAgIFsuLi5dCisgICAgIyAgICAgICBEb2N1bWVudGF0aW9uL2Zvby5odG1sCisgICAgWy4uLl0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Fub3RoZXIgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAkIGNhdCAuZ2l0aWdub3JlCisgICAgdm1saW51eCoKKyAgICAkIGxzIGFyY2gvZm9vL2tlcm5lbC92bSoKKyAgICBhcmNoL2Zvby9rZXJuZWwvdm1saW51eC5sZHMuUworICAgICQgZWNobyAnIS92bWxpbnV4KicgPmFyY2gvZm9vL2tlcm5lbC8uZ2l0aWdub3JlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc2Vjb25kIC5naXRpZ25vcmUgcHJldmVudHMgR2l0IGZyb20gaWdub3JpbmcKK2BhcmNoL2Zvby9rZXJuZWwvdm1saW51eC5sZHMuU2AuCisKK0V4YW1wbGUgdG8gZXhjbHVkZSBldmVyeXRoaW5nIGV4Y2VwdCBhIHNwZWNpZmljIGRpcmVjdG9yeSBgZm9vL2JhcmAKKyhub3RlIHRoZSBgLypgIC0gd2l0aG91dCB0aGUgc2xhc2gsIHRoZSB3aWxkY2FyZCB3b3VsZCBhbHNvIGV4Y2x1ZGUKK2V2ZXJ5dGhpbmcgd2l0aGluIGBmb28vYmFyYCk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgJCBjYXQgLmdpdGlnbm9yZQorICAgICMgZXhjbHVkZSBldmVyeXRoaW5nIGV4Y2VwdCBkaXJlY3RvcnkgZm9vL2JhcgorICAgIC8qCisgICAgIS9mb28KKyAgICAvZm9vLyoKKyAgICAhL2Zvby9iYXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcm1bMV0sCitsaW5rZ2l0OmdpdHJlcG9zaXRvcnktbGF5b3V0WzVdLAorbGlua2dpdDpnaXQtY2hlY2staWdub3JlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0ay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1M2ViYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0ay50eHQKQEAgLTAsMCArMSwyMDYgQEAKK2dpdGsoMSkKKz09PT09PT0KKworTkFNRQorLS0tLQorZ2l0ayAtIFRoZSBHaXQgcmVwb3NpdG9yeSBicm93c2VyCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdGsnIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24gcmFuZ2U+XSBbLS1dIFs8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorRGlzcGxheXMgY2hhbmdlcyBpbiBhIHJlcG9zaXRvcnkgb3IgYSBzZWxlY3RlZCBzZXQgb2YgY29tbWl0cy4gVGhpcyBpbmNsdWRlcwordmlzdWFsaXppbmcgdGhlIGNvbW1pdCBncmFwaCwgc2hvd2luZyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGVhY2ggY29tbWl0LCBhbmQKK3RoZSBmaWxlcyBpbiB0aGUgdHJlZXMgb2YgZWFjaCByZXZpc2lvbi4KKworT1BUSU9OUworLS0tLS0tLQorCitUbyBjb250cm9sIHdoaWNoIHJldmlzaW9ucyB0byBzaG93LCBnaXRrIHN1cHBvcnRzIG1vc3Qgb3B0aW9ucworYXBwbGljYWJsZSB0byB0aGUgJ2dpdCByZXYtbGlzdCcgY29tbWFuZC4gIEl0IGFsc28gc3VwcG9ydHMgYSBmZXcKK29wdGlvbnMgYXBwbGljYWJsZSB0byB0aGUgJ2dpdCBkaWZmLSonIGNvbW1hbmRzIHRvIGNvbnRyb2wgaG93IHRoZQorY2hhbmdlcyBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIGFyZSBzaG93bi4gIEZpbmFsbHksIGl0IHN1cHBvcnRzIHNvbWUKK2dpdGstc3BlY2lmaWMgb3B0aW9ucy4KKworZ2l0ayBnZW5lcmFsbHkgb25seSB1bmRlcnN0YW5kcyBvcHRpb25zIHdpdGggYXJndW1lbnRzIGluIHRoZQorJ3N0aWNrZWQnIGZvcm0gKHNlZSBsaW5rZ2l0OmdpdGNsaVs3XSkgZHVlIHRvIGxpbWl0YXRpb25zIGluIHRoZQorY29tbWFuZC1saW5lIHBhcnNlci4KKworcmV2LWxpc3Qgb3B0aW9ucyBhbmQgYXJndW1lbnRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhpcyBtYW51YWwgcGFnZSBkZXNjcmliZXMgb25seSB0aGUgbW9zdCBmcmVxdWVudGx5IHVzZWQgb3B0aW9ucy4gIFNlZQorbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0gZm9yIGEgY29tcGxldGUgbGlzdC4KKworLS1hbGw6OgorCisJU2hvdyBhbGwgcmVmcyAoYnJhbmNoZXMsIHRhZ3MsIGV0Yy4pLgorCistLWJyYW5jaGVzWz08cGF0dGVybj5dOjoKKy0tdGFnc1s9PHBhdHRlcm4+XTo6CistLXJlbW90ZXNbPTxwYXR0ZXJuPl06OgorCisJUHJldGVuZCBhcyBpZiBhbGwgdGhlIGJyYW5jaGVzICh0YWdzLCByZW1vdGUgYnJhbmNoZXMsIHJlc3AuKQorCWFyZSBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhcyAnPGNvbW1pdD4nLiBJZiAnPHBhdHRlcm4+JworCWlzIGdpdmVuLCBsaW1pdCByZWZzIHRvIG9uZXMgbWF0Y2hpbmcgZ2l2ZW4gc2hlbGwgZ2xvYi4gSWYKKwlwYXR0ZXJuIGxhY2tzICc/JywgJ3thc3Rlcmlza30nLCBvciAnWycsICcve2FzdGVyaXNrfScgYXQgdGhlCisJZW5kIGlzIGltcGxpZWQuCisKKy0tc2luY2U9PGRhdGU+OjoKKworCVNob3cgY29tbWl0cyBtb3JlIHJlY2VudCB0aGFuIGEgc3BlY2lmaWMgZGF0ZS4KKworLS11bnRpbD08ZGF0ZT46OgorCisJU2hvdyBjb21taXRzIG9sZGVyIHRoYW4gYSBzcGVjaWZpYyBkYXRlLgorCistLWRhdGUtb3JkZXI6OgorCisJU29ydCBjb21taXRzIGJ5IGRhdGUgd2hlbiBwb3NzaWJsZS4KKworLS1tZXJnZTo6CisKKwlBZnRlciBhbiBhdHRlbXB0IHRvIG1lcmdlIHN0b3BzIHdpdGggY29uZmxpY3RzLCBzaG93IHRoZSBjb21taXRzIG9uCisJdGhlIGhpc3RvcnkgYmV0d2VlbiB0d28gYnJhbmNoZXMgKGkuZS4gdGhlIEhFQUQgYW5kIHRoZSBNRVJHRV9IRUFEKQorCXRoYXQgbW9kaWZ5IHRoZSBjb25mbGljdGVkIGZpbGVzIGFuZCBkbyBub3QgZXhpc3Qgb24gYWxsIHRoZSBoZWFkcworCWJlaW5nIG1lcmdlZC4KKworLS1sZWZ0LXJpZ2h0OjoKKworCU1hcmsgd2hpY2ggc2lkZSBvZiBhIHN5bW1ldHJpYyBkaWZmZXJlbmNlIGEgY29tbWl0IGlzIHJlYWNoYWJsZQorCWZyb20uICBDb21taXRzIGZyb20gdGhlIGxlZnQgc2lkZSBhcmUgcHJlZml4ZWQgd2l0aCBhIGA8YAorCXN5bWJvbCBhbmQgdGhvc2UgZnJvbSB0aGUgcmlnaHQgd2l0aCBhIGA+YCBzeW1ib2wuCisKKy0tZnVsbC1oaXN0b3J5OjoKKworCVdoZW4gZmlsdGVyaW5nIGhpc3Rvcnkgd2l0aCAnPHBhdGg+Li4uJywgZG9lcyBub3QgcHJ1bmUgc29tZQorCWhpc3RvcnkuICAoU2VlICJIaXN0b3J5IHNpbXBsaWZpY2F0aW9uIiBpbiBsaW5rZ2l0OmdpdC1sb2dbMV0KKwlmb3IgYSBtb3JlIGRldGFpbGVkIGV4cGxhbmF0aW9uLikKKworLS1zaW1wbGlmeS1tZXJnZXM6OgorCisJQWRkaXRpb25hbCBvcHRpb24gdG8gYC0tZnVsbC1oaXN0b3J5YCB0byByZW1vdmUgc29tZSBuZWVkbGVzcworCW1lcmdlcyBmcm9tIHRoZSByZXN1bHRpbmcgaGlzdG9yeSwgYXMgdGhlcmUgYXJlIG5vIHNlbGVjdGVkCisJY29tbWl0cyBjb250cmlidXRpbmcgdG8gdGhpcyBtZXJnZS4gIChTZWUgIkhpc3RvcnkKKwlzaW1wbGlmaWNhdGlvbiIgaW4gbGlua2dpdDpnaXQtbG9nWzFdIGZvciBhIG1vcmUgZGV0YWlsZWQKKwlleHBsYW5hdGlvbi4pCisKKy0tYW5jZXN0cnktcGF0aDo6CisKKwlXaGVuIGdpdmVuIGEgcmFuZ2Ugb2YgY29tbWl0cyB0byBkaXNwbGF5CisJKGUuZy4gJ2NvbW1pdDEuLmNvbW1pdDInIG9yICdjb21taXQyIHtjYXJldH1jb21taXQxJyksIG9ubHkKKwlkaXNwbGF5IGNvbW1pdHMgdGhhdCBleGlzdCBkaXJlY3RseSBvbiB0aGUgYW5jZXN0cnkgY2hhaW4KKwliZXR3ZWVuIHRoZSAnY29tbWl0MScgYW5kICdjb21taXQyJywgaS5lLiBjb21taXRzIHRoYXQgYXJlCisJYm90aCBkZXNjZW5kYW50cyBvZiAnY29tbWl0MScsIGFuZCBhbmNlc3RvcnMgb2YgJ2NvbW1pdDInLgorCShTZWUgIkhpc3Rvcnkgc2ltcGxpZmljYXRpb24iIGluIGxpbmtnaXQ6Z2l0LWxvZ1sxXSBmb3IgYSBtb3JlCisJZGV0YWlsZWQgZXhwbGFuYXRpb24uKQorCistTDxzdGFydD4sPGVuZD46PGZpbGU+OjoKKy1MOjxmdW5jbmFtZT46PGZpbGU+OjoKKworCVRyYWNlIHRoZSBldm9sdXRpb24gb2YgdGhlIGxpbmUgcmFuZ2UgZ2l2ZW4gYnkgIjxzdGFydD4sPGVuZD4iCisJKG9yIHRoZSBmdW5jdGlvbiBuYW1lIHJlZ2V4IDxmdW5jbmFtZT4pIHdpdGhpbiB0aGUgPGZpbGU+LiAgWW91IG1heQorCW5vdCBnaXZlIGFueSBwYXRoc3BlYyBsaW1pdGVycy4gIFRoaXMgaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8KKwlhIHdhbGsgc3RhcnRpbmcgZnJvbSBhIHNpbmdsZSByZXZpc2lvbiwgaS5lLiwgeW91IG1heSBvbmx5CisJZ2l2ZSB6ZXJvIG9yIG9uZSBwb3NpdGl2ZSByZXZpc2lvbiBhcmd1bWVudHMsIGFuZAorCTxzdGFydD4gYW5kIDxlbmQ+IChvciA8ZnVuY25hbWU+KSBtdXN0IGV4aXN0IGluIHRoZSBzdGFydGluZyByZXZpc2lvbi4KKwlZb3UgY2FuIHNwZWNpZnkgdGhpcyBvcHRpb24gbW9yZSB0aGFuIG9uY2UuIEltcGxpZXMgYC0tcGF0Y2hgLgorCVBhdGNoIG91dHB1dCBjYW4gYmUgc3VwcHJlc3NlZCB1c2luZyBgLS1uby1wYXRjaGAsIGJ1dCBvdGhlciBkaWZmIGZvcm1hdHMKKwkobmFtZWx5IGAtLXJhd2AsIGAtLW51bXN0YXRgLCBgLS1zaG9ydHN0YXRgLCBgLS1kaXJzdGF0YCwgYC0tc3VtbWFyeWAsCisJYC0tbmFtZS1vbmx5YCwgYC0tbmFtZS1zdGF0dXNgLCBgLS1jaGVja2ApIGFyZSBub3QgY3VycmVudGx5IGltcGxlbWVudGVkLgorKworKk5vdGU6KiBnaXRrICh1bmxpa2UgbGlua2dpdDpnaXQtbG9nWzFdKSBjdXJyZW50bHkgb25seSB1bmRlcnN0YW5kcwordGhpcyBvcHRpb24gaWYgeW91IHNwZWNpZnkgaXQgImdsdWVkIHRvZ2V0aGVyIiB3aXRoIGl0cyBhcmd1bWVudC4gIERvCisqbm90KiBwdXQgYSBzcGFjZSBhZnRlciBgLUxgLgorKworaW5jbHVkZTo6bGluZS1yYW5nZS1mb3JtYXQudHh0W10KKworPHJldmlzaW9uIHJhbmdlPjo6CisKKwlMaW1pdCB0aGUgcmV2aXNpb25zIHRvIHNob3cuIFRoaXMgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSByZXZpc2lvbgorCW1lYW5pbmcgc2hvdyBmcm9tIHRoZSBnaXZlbiByZXZpc2lvbiBhbmQgYmFjaywgb3IgaXQgY2FuIGJlIGEgcmFuZ2UgaW4KKwl0aGUgZm9ybSAiJzxmcm9tPicuLic8dG8+JyIgdG8gc2hvdyBhbGwgcmV2aXNpb25zIGJldHdlZW4gJzxmcm9tPicgYW5kCisJYmFjayB0byAnPHRvPicuIE5vdGUsIG1vcmUgYWR2YW5jZWQgcmV2aXNpb24gc2VsZWN0aW9uIGNhbiBiZSBhcHBsaWVkLgorCUZvciBhIG1vcmUgY29tcGxldGUgbGlzdCBvZiB3YXlzIHRvIHNwZWxsIG9iamVjdCBuYW1lcywgc2VlCisJbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisKKzxwYXRoPi4uLjo6CisKKwlMaW1pdCBjb21taXRzIHRvIHRoZSBvbmVzIHRvdWNoaW5nIGZpbGVzIGluIHRoZSBnaXZlbiBwYXRocy4gTm90ZSwgdG8KKwlhdm9pZCBhbWJpZ3VpdHkgd2l0aCByZXNwZWN0IHRvIHJldmlzaW9uIG5hbWVzIHVzZSAiLS0iIHRvIHNlcGFyYXRlIHRoZSBwYXRocworCWZyb20gYW55IHByZWNlZGluZyBvcHRpb25zLgorCitnaXRrLXNwZWNpZmljIG9wdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorCistLWFyZ3NjbWQ9PGNvbW1hbmQ+OjoKKworCUNvbW1hbmQgdG8gYmUgcnVuIGVhY2ggdGltZSBnaXRrIGhhcyB0byBkZXRlcm1pbmUgdGhlIHJldmlzaW9uCisJcmFuZ2UgdG8gc2hvdy4gIFRoZSBjb21tYW5kIGlzIGV4cGVjdGVkIHRvIHByaW50IG9uIGl0cworCXN0YW5kYXJkIG91dHB1dCBhIGxpc3Qgb2YgYWRkaXRpb25hbCByZXZpc2lvbnMgdG8gYmUgc2hvd24sCisJb25lIHBlciBsaW5lLiAgVXNlIHRoaXMgaW5zdGVhZCBvZiBleHBsaWNpdGx5IHNwZWNpZnlpbmcgYQorCSc8cmV2aXNpb24gcmFuZ2U+JyBpZiB0aGUgc2V0IG9mIGNvbW1pdHMgdG8gc2hvdyBtYXkgdmFyeQorCWJldHdlZW4gcmVmcmVzaGVzLgorCistLXNlbGVjdC1jb21taXQ9PHJlZj46OgorCisJU2VsZWN0IHRoZSBzcGVjaWZpZWQgY29tbWl0IGFmdGVyIGxvYWRpbmcgdGhlIGdyYXBoLgorCURlZmF1bHQgYmVoYXZpb3IgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nICctLXNlbGVjdC1jb21taXQ9SEVBRCcuCisKK0V4YW1wbGVzCistLS0tLS0tLQorZ2l0ayB2Mi42LjEyLi4gaW5jbHVkZS9zY3NpIGRyaXZlcnMvc2NzaTo6CisKKwlTaG93IHRoZSBjaGFuZ2VzIHNpbmNlIHZlcnNpb24gJ3YyLjYuMTInIHRoYXQgY2hhbmdlZCBhbnkKKwlmaWxlIGluIHRoZSBpbmNsdWRlL3Njc2kgb3IgZHJpdmVycy9zY3NpIHN1YmRpcmVjdG9yaWVzCisKK2dpdGsgLS1zaW5jZT0iMiB3ZWVrcyBhZ28iIFwtLSBnaXRrOjoKKworCVNob3cgdGhlIGNoYW5nZXMgZHVyaW5nIHRoZSBsYXN0IHR3byB3ZWVrcyB0byB0aGUgZmlsZSAnZ2l0aycuCisJVGhlICItLSIgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIHRoZSAqYnJhbmNoKiBuYW1lZAorCSdnaXRrJworCitnaXRrIC0tbWF4LWNvdW50PTEwMCAtLWFsbCBcLS0gTWFrZWZpbGU6OgorCisJU2hvdyBhdCBtb3N0IDEwMCBjaGFuZ2VzIG1hZGUgdG8gdGhlIGZpbGUgJ01ha2VmaWxlJy4gSW5zdGVhZCBvZiBvbmx5CisJbG9va2luZyBmb3IgY2hhbmdlcyBpbiB0aGUgY3VycmVudCBicmFuY2ggbG9vayBpbiBhbGwgYnJhbmNoZXMuCisKK0ZpbGVzCistLS0tLQorVXNlciBjb25maWd1cmF0aW9uIGFuZCBwcmVmZXJlbmNlcyBhcmUgc3RvcmVkIGF0OgorCisqIGAkWERHX0NPTkZJR19IT01FL2dpdC9naXRrYCBpZiBpdCBleGlzdHMsIG90aGVyd2lzZQorKiBgJEhPTUUvLmdpdGtgIGlmIGl0IGV4aXN0cworCitJZiBuZWl0aGVyIG9mIHRoZSBhYm92ZSBleGlzdCB0aGVuIGAkWERHX0NPTkZJR19IT01FL2dpdC9naXRrYCBpcyBjcmVhdGVkIGFuZAordXNlZCBieSBkZWZhdWx0LiBJZiAnJFhER19DT05GSUdfSE9NRScgaXMgbm90IHNldCBpdCBkZWZhdWx0cyB0bworYCRIT01FLy5jb25maWdgIGluIGFsbCBjYXNlcy4KKworSGlzdG9yeQorLS0tLS0tLQorR2l0ayB3YXMgdGhlIGZpcnN0IGdyYXBoaWNhbCByZXBvc2l0b3J5IGJyb3dzZXIuIEl0J3Mgd3JpdHRlbiBpbgordGNsL3RrLgorCisnZ2l0aycgaXMgYWN0dWFsbHkgbWFpbnRhaW5lZCBhcyBhbiBpbmRlcGVuZGVudCBwcm9qZWN0LCBidXQgc3RhYmxlCit2ZXJzaW9ucyBhcmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgR2l0IHN1aXRlIGZvciB0aGUgY29udmVuaWVuY2UKK29mIGVuZCB1c2Vycy4KKworZ2l0ay1naXQvIGNvbWVzIGZyb20gUGF1bCBNYWNrZXJyYXMncyBnaXRrIHByb2plY3Q6CisKKwlnaXQ6Ly9vemxhYnMub3JnL35wYXVsdXMvZ2l0aworCitTRUUgQUxTTworLS0tLS0tLS0KKydxZ2l0KDEpJzo6CisJQSByZXBvc2l0b3J5IGJyb3dzZXIgd3JpdHRlbiBpbiBDKysgdXNpbmcgUXQuCisKKyd0aWcoMSknOjoKKwlBIG1pbmltYWwgcmVwb3NpdG9yeSBicm93c2VyIGFuZCBHaXQgdG9vbCBvdXRwdXQgaGlnaGxpZ2h0ZXIgd3JpdHRlbgorCWluIEMgdXNpbmcgTmN1cnNlcy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdG1vZHVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzI3NWZkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dApAQCAtMCwwICsxLDEyNyBAQAorZ2l0bW9kdWxlcyg1KQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRtb2R1bGVzIC0gRGVmaW5pbmcgc3VibW9kdWxlIHByb3BlcnRpZXMKKworU1lOT1BTSVMKKy0tLS0tLS0tCiskR0lUX1dPUktfRElSLy5naXRtb2R1bGVzCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoZSBgLmdpdG1vZHVsZXNgIGZpbGUsIGxvY2F0ZWQgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YgYSBHaXQKK3dvcmtpbmcgdHJlZSwgaXMgYSB0ZXh0IGZpbGUgd2l0aCBhIHN5bnRheCBtYXRjaGluZyB0aGUgcmVxdWlyZW1lbnRzCitvZiBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKK1RoZSBmaWxlIGNvbnRhaW5zIG9uZSBzdWJzZWN0aW9uIHBlciBzdWJtb2R1bGUsIGFuZCB0aGUgc3Vic2VjdGlvbiB2YWx1ZQoraXMgdGhlIG5hbWUgb2YgdGhlIHN1Ym1vZHVsZS4gVGhlIG5hbWUgaXMgc2V0IHRvIHRoZSBwYXRoIHdoZXJlIHRoZQorc3VibW9kdWxlIGhhcyBiZWVuIGFkZGVkIHVubGVzcyBpdCB3YXMgY3VzdG9taXplZCB3aXRoIHRoZSBgLS1uYW1lYAorb3B0aW9uIG9mICdnaXQgc3VibW9kdWxlIGFkZCcuIEVhY2ggc3VibW9kdWxlIHNlY3Rpb24gYWxzbyBjb250YWlucyB0aGUKK2ZvbGxvd2luZyByZXF1aXJlZCBrZXlzOgorCitzdWJtb2R1bGUuPG5hbWU+LnBhdGg6OgorCURlZmluZXMgdGhlIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBHaXQKKwl3b3JraW5nIHRyZWUsIHdoZXJlIHRoZSBzdWJtb2R1bGUgaXMgZXhwZWN0ZWQgdG8gYmUgY2hlY2tlZCBvdXQuCisJVGhlIHBhdGggbmFtZSBtdXN0IG5vdCBlbmQgd2l0aCBhIGAvYC4gQWxsIHN1Ym1vZHVsZSBwYXRocyBtdXN0CisJYmUgdW5pcXVlIHdpdGhpbiB0aGUgLmdpdG1vZHVsZXMgZmlsZS4KKworc3VibW9kdWxlLjxuYW1lPi51cmw6OgorCURlZmluZXMgYSBVUkwgZnJvbSB3aGljaCB0aGUgc3VibW9kdWxlIHJlcG9zaXRvcnkgY2FuIGJlIGNsb25lZC4KKwlUaGlzIG1heSBiZSBlaXRoZXIgYW4gYWJzb2x1dGUgVVJMIHJlYWR5IHRvIGJlIHBhc3NlZCB0bworCWxpbmtnaXQ6Z2l0LWNsb25lWzFdIG9yIChpZiBpdCBiZWdpbnMgd2l0aCAuLyBvciAuLi8pIGEgbG9jYXRpb24KKwlyZWxhdGl2ZSB0byB0aGUgc3VwZXJwcm9qZWN0J3Mgb3JpZ2luIHJlcG9zaXRvcnkuCisKK0luIGFkZGl0aW9uLCB0aGVyZSBhcmUgYSBudW1iZXIgb2Ygb3B0aW9uYWwga2V5czoKKworc3VibW9kdWxlLjxuYW1lPi51cGRhdGU6OgorCURlZmluZXMgdGhlIGRlZmF1bHQgdXBkYXRlIHByb2NlZHVyZSBmb3IgdGhlIG5hbWVkIHN1Ym1vZHVsZSwKKwlpLmUuIGhvdyB0aGUgc3VibW9kdWxlIGlzIHVwZGF0ZWQgYnkgImdpdCBzdWJtb2R1bGUgdXBkYXRlIgorCWNvbW1hbmQgaW4gdGhlIHN1cGVycHJvamVjdC4gVGhpcyBpcyBvbmx5IHVzZWQgYnkgYGdpdAorCXN1Ym1vZHVsZSBpbml0YCB0byBpbml0aWFsaXplIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG9mCisJdGhlIHNhbWUgbmFtZS4gQWxsb3dlZCB2YWx1ZXMgaGVyZSBhcmUgJ2NoZWNrb3V0JywgJ3JlYmFzZScsCisJJ21lcmdlJyBvciAnbm9uZScuIFNlZSBkZXNjcmlwdGlvbiBvZiAndXBkYXRlJyBjb21tYW5kIGluCisJbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGZvciB0aGVpciBtZWFuaW5nLiBGb3Igc2VjdXJpdHkKKwlyZWFzb25zLCB0aGUgJyFjb21tYW5kJyBmb3JtIGlzIG5vdCBhY2NlcHRlZCBoZXJlLgorCitzdWJtb2R1bGUuPG5hbWU+LmJyYW5jaDo6CisJQSByZW1vdGUgYnJhbmNoIG5hbWUgZm9yIHRyYWNraW5nIHVwZGF0ZXMgaW4gdGhlIHVwc3RyZWFtIHN1Ym1vZHVsZS4KKwlJZiB0aGUgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvICdtYXN0ZXInLiAgQSBzcGVjaWFsCisJdmFsdWUgb2YgYC5gIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIGluIHRoZQorCXN1Ym1vZHVsZSBzaG91bGQgYmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgY3VycmVudCBicmFuY2ggaW4gdGhlCisJY3VycmVudCByZXBvc2l0b3J5LiAgU2VlIHRoZSBgLS1yZW1vdGVgIGRvY3VtZW50YXRpb24gaW4KKwlsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0gZm9yIGRldGFpbHMuCisKK3N1Ym1vZHVsZS48bmFtZT4uZmV0Y2hSZWN1cnNlU3VibW9kdWxlczo6CisJVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2YgdGhpcworCXN1Ym1vZHVsZS4gSWYgdGhpcyBvcHRpb24gaXMgYWxzbyBwcmVzZW50IGluIHRoZSBzdWJtb2R1bGVzIGVudHJ5IGluCisJLmdpdC9jb25maWcgb2YgdGhlIHN1cGVycHJvamVjdCwgdGhlIHNldHRpbmcgdGhlcmUgd2lsbCBvdmVycmlkZSB0aGUKKwlvbmUgZm91bmQgaW4gLmdpdG1vZHVsZXMuCisJQm90aCBzZXR0aW5ncyBjYW4gYmUgb3ZlcnJpZGRlbiBvbiB0aGUgY29tbWFuZCBsaW5lIGJ5IHVzaW5nIHRoZQorCSItLVtuby1dcmVjdXJzZS1zdWJtb2R1bGVzIiBvcHRpb24gdG8gImdpdCBmZXRjaCIgYW5kICJnaXQgcHVsbCIuCisKK3N1Ym1vZHVsZS48bmFtZT4uaWdub3JlOjoKKwlEZWZpbmVzIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyAiZ2l0IHN0YXR1cyIgYW5kIHRoZSBkaWZmIGZhbWlseSBzaG93CisJYSBzdWJtb2R1bGUgYXMgbW9kaWZpZWQuIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBzdXBwb3J0ZWQ6CisrCistLQorCWFsbDs7IFRoZSBzdWJtb2R1bGUgd2lsbCBuZXZlciBiZSBjb25zaWRlcmVkIG1vZGlmaWVkIChidXQgd2lsbAorCSAgICBub25ldGhlbGVzcyBzaG93IHVwIGluIHRoZSBvdXRwdXQgb2Ygc3RhdHVzIGFuZCBjb21taXQgd2hlbiBpdCBoYXMKKwkgICAgYmVlbiBzdGFnZWQpLgorCisJZGlydHk7OyBBbGwgY2hhbmdlcyB0byB0aGUgc3VibW9kdWxlJ3Mgd29yayB0cmVlIHdpbGwgYmUgaWdub3JlZCwgb25seQorCSAgICBjb21taXR0ZWQgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgSEVBRCBvZiB0aGUgc3VibW9kdWxlIGFuZCBpdHMKKwkgICAgcmVjb3JkZWQgc3RhdGUgaW4gdGhlIHN1cGVycHJvamVjdCBhcmUgdGFrZW4gaW50byBhY2NvdW50LgorCisJdW50cmFja2VkOzsgT25seSB1bnRyYWNrZWQgZmlsZXMgaW4gc3VibW9kdWxlcyB3aWxsIGJlIGlnbm9yZWQuCisJICAgIENvbW1pdHRlZCBkaWZmZXJlbmNlcyBhbmQgbW9kaWZpY2F0aW9ucyB0byB0cmFja2VkIGZpbGVzIHdpbGwgc2hvdworCSAgICB1cC4KKworCW5vbmU7OyBObyBtb2RpZmljYXRpb25zIHRvIHN1Ym1vZHVsZXMgYXJlIGlnbm9yZWQsIGFsbCBvZiBjb21taXR0ZWQKKwkgICAgZGlmZmVyZW5jZXMsIGFuZCBtb2RpZmljYXRpb25zIHRvIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyBhcmUKKwkgICAgc2hvd24uIFRoaXMgaXMgdGhlIGRlZmF1bHQgb3B0aW9uLgorCitJZiB0aGlzIG9wdGlvbiBpcyBhbHNvIHByZXNlbnQgaW4gdGhlIHN1Ym1vZHVsZXMgZW50cnkgaW4gLmdpdC9jb25maWcKK29mIHRoZSBzdXBlcnByb2plY3QsIHRoZSBzZXR0aW5nIHRoZXJlIHdpbGwgb3ZlcnJpZGUgdGhlIG9uZSBmb3VuZCBpbgorLmdpdG1vZHVsZXMuCisKK0JvdGggc2V0dGluZ3MgY2FuIGJlIG92ZXJyaWRkZW4gb24gdGhlIGNvbW1hbmQgbGluZSBieSB1c2luZyB0aGUKKyItLWlnbm9yZS1zdWJtb2R1bGVzIiBvcHRpb24uIFRoZSAnZ2l0IHN1Ym1vZHVsZScgY29tbWFuZHMgYXJlIG5vdAorYWZmZWN0ZWQgYnkgdGhpcyBzZXR0aW5nLgorLS0KKworc3VibW9kdWxlLjxuYW1lPi5zaGFsbG93OjoKKwlXaGVuIHNldCB0byB0cnVlLCBhIGNsb25lIG9mIHRoaXMgc3VibW9kdWxlIHdpbGwgYmUgcGVyZm9ybWVkIGFzIGEKKwlzaGFsbG93IGNsb25lICh3aXRoIGEgaGlzdG9yeSBkZXB0aCBvZiAxKSB1bmxlc3MgdGhlIHVzZXIgZXhwbGljaXRseQorCWFza3MgZm9yIGEgbm9uLXNoYWxsb3cgY2xvbmUuCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK0NvbnNpZGVyIHRoZSBmb2xsb3dpbmcgLmdpdG1vZHVsZXMgZmlsZToKKworLS0tLQorW3N1Ym1vZHVsZSAibGliZm9vIl0KKwlwYXRoID0gaW5jbHVkZS9mb28KKwl1cmwgPSBnaXQ6Ly9mb28uY29tL2dpdC9saWIuZ2l0CisKK1tzdWJtb2R1bGUgImxpYmJhciJdCisJcGF0aCA9IGluY2x1ZGUvYmFyCisJdXJsID0gZ2l0Oi8vYmFyLmNvbS9naXQvbGliLmdpdAorLS0tLQorCitUaGlzIGRlZmluZXMgdHdvIHN1Ym1vZHVsZXMsIGBsaWJmb29gIGFuZCBgbGliYmFyYC4gVGhlc2UgYXJlIGV4cGVjdGVkIHRvCitiZSBjaGVja2VkIG91dCBpbiB0aGUgcGF0aHMgYGluY2x1ZGUvZm9vYCBhbmQgYGluY2x1ZGUvYmFyYCwgYW5kIGZvciBib3RoCitzdWJtb2R1bGVzIGEgVVJMIGlzIHNwZWNpZmllZCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgY2xvbmluZyB0aGUgc3VibW9kdWxlcy4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0sIGxpbmtnaXQ6Z2l0c3VibW9kdWxlc1s3XSwgbGlua2dpdDpnaXQtY29uZmlnWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRuYW1lc3BhY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0bmFtZXNwYWNlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxNDk2OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0bmFtZXNwYWNlcy50eHQKQEAgLTAsMCArMSw2NCBAQAorZ2l0bmFtZXNwYWNlcyg3KQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRuYW1lc3BhY2VzIC0gR2l0IG5hbWVzcGFjZXMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCitHSVRfTkFNRVNQQUNFPTxuYW1lc3BhY2U+ICdnaXQgdXBsb2FkLXBhY2snCitHSVRfTkFNRVNQQUNFPTxuYW1lc3BhY2U+ICdnaXQgcmVjZWl2ZS1wYWNrJworCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXQgc3VwcG9ydHMgZGl2aWRpbmcgdGhlIHJlZnMgb2YgYSBzaW5nbGUgcmVwb3NpdG9yeSBpbnRvIG11bHRpcGxlCituYW1lc3BhY2VzLCBlYWNoIG9mIHdoaWNoIGhhcyBpdHMgb3duIGJyYW5jaGVzLCB0YWdzLCBhbmQgSEVBRC4gIEdpdCBjYW4KK2V4cG9zZSBlYWNoIG5hbWVzcGFjZSBhcyBhbiBpbmRlcGVuZGVudCByZXBvc2l0b3J5IHRvIHB1bGwgZnJvbSBhbmQgcHVzaAordG8sIHdoaWxlIHNoYXJpbmcgdGhlIG9iamVjdCBzdG9yZSwgYW5kIGV4cG9zaW5nIGFsbCB0aGUgcmVmcyB0bworb3BlcmF0aW9ucyBzdWNoIGFzIGxpbmtnaXQ6Z2l0LWdjWzFdLgorCitTdG9yaW5nIG11bHRpcGxlIHJlcG9zaXRvcmllcyBhcyBuYW1lc3BhY2VzIG9mIGEgc2luZ2xlIHJlcG9zaXRvcnkKK2F2b2lkcyBzdG9yaW5nIGR1cGxpY2F0ZSBjb3BpZXMgb2YgdGhlIHNhbWUgb2JqZWN0cywgc3VjaCBhcyB3aGVuCitzdG9yaW5nIG11bHRpcGxlIGJyYW5jaGVzIG9mIHRoZSBzYW1lIHNvdXJjZS4gIFRoZSBhbHRlcm5hdGVzIG1lY2hhbmlzbQorcHJvdmlkZXMgc2ltaWxhciBzdXBwb3J0IGZvciBhdm9pZGluZyBkdXBsaWNhdGVzLCBidXQgYWx0ZXJuYXRlcyBkbyBub3QKK3ByZXZlbnQgZHVwbGljYXRpb24gYmV0d2VlbiBuZXcgb2JqZWN0cyBhZGRlZCB0byB0aGUgcmVwb3NpdG9yaWVzCit3aXRob3V0IG9uZ29pbmcgbWFpbnRlbmFuY2UsIHdoaWxlIG5hbWVzcGFjZXMgZG8uCisKK1RvIHNwZWNpZnkgYSBuYW1lc3BhY2UsIHNldCB0aGUgYEdJVF9OQU1FU1BBQ0VgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvCit0aGUgbmFtZXNwYWNlLiAgRm9yIGVhY2ggcmVmIG5hbWVzcGFjZSwgR2l0IHN0b3JlcyB0aGUgY29ycmVzcG9uZGluZworcmVmcyBpbiBhIGRpcmVjdG9yeSB1bmRlciBgcmVmcy9uYW1lc3BhY2VzL2AuICBGb3IgZXhhbXBsZSwKK2BHSVRfTkFNRVNQQUNFPWZvb2Agd2lsbCBzdG9yZSByZWZzIHVuZGVyIGByZWZzL25hbWVzcGFjZXMvZm9vL2AuICBZb3UKK2NhbiBhbHNvIHNwZWNpZnkgbmFtZXNwYWNlcyB2aWEgdGhlIGAtLW5hbWVzcGFjZWAgb3B0aW9uIHRvCitsaW5rZ2l0OmdpdFsxXS4KKworTm90ZSB0aGF0IG5hbWVzcGFjZXMgd2hpY2ggaW5jbHVkZSBhIGAvYCB3aWxsIGV4cGFuZCB0byBhIGhpZXJhcmNoeSBvZgorbmFtZXNwYWNlczsgZm9yIGV4YW1wbGUsIGBHSVRfTkFNRVNQQUNFPWZvby9iYXJgIHdpbGwgc3RvcmUgcmVmcyB1bmRlcgorYHJlZnMvbmFtZXNwYWNlcy9mb28vcmVmcy9uYW1lc3BhY2VzL2Jhci9gLiAgVGhpcyBtYWtlcyBwYXRocyBpbgorYEdJVF9OQU1FU1BBQ0VgIGJlaGF2ZSBoaWVyYXJjaGljYWxseSwgc28gdGhhdCBjbG9uaW5nIHdpdGgKK2BHSVRfTkFNRVNQQUNFPWZvby9iYXJgIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdCBhcyBjbG9uaW5nIHdpdGgKK2BHSVRfTkFNRVNQQUNFPWZvb2AgYW5kIGNsb25pbmcgZnJvbSB0aGF0IHJlcG8gd2l0aCBgR0lUX05BTUVTUEFDRT1iYXJgLiAgSXQKK2Fsc28gYXZvaWRzIGFtYmlndWl0eSB3aXRoIHN0cmFuZ2UgbmFtZXNwYWNlIHBhdGhzIHN1Y2ggYXMgYGZvby9yZWZzL2hlYWRzL2AsCit3aGljaCBjb3VsZCBvdGhlcndpc2UgZ2VuZXJhdGUgZGlyZWN0b3J5L2ZpbGUgY29uZmxpY3RzIHdpdGhpbiB0aGUgYHJlZnNgCitkaXJlY3RvcnkuCisKK2xpbmtnaXQ6Z2l0LXVwbG9hZC1wYWNrWzFdIGFuZCBsaW5rZ2l0OmdpdC1yZWNlaXZlLXBhY2tbMV0gcmV3cml0ZSB0aGUKK25hbWVzIG9mIHJlZnMgYXMgc3BlY2lmaWVkIGJ5IGBHSVRfTkFNRVNQQUNFYC4gIGdpdC11cGxvYWQtcGFjayBhbmQKK2dpdC1yZWNlaXZlLXBhY2sgd2lsbCBpZ25vcmUgYWxsIHJlZmVyZW5jZXMgb3V0c2lkZSB0aGUgc3BlY2lmaWVkCituYW1lc3BhY2UuCisKK1RoZSBzbWFydCBIVFRQIHNlcnZlciwgbGlua2dpdDpnaXQtaHR0cC1iYWNrZW5kWzFdLCB3aWxsIHBhc3MKK0dJVF9OQU1FU1BBQ0UgdGhyb3VnaCB0byB0aGUgYmFja2VuZCBwcm9ncmFtczsgc2VlCitsaW5rZ2l0OmdpdC1odHRwLWJhY2tlbmRbMV0gZm9yIHNhbXBsZSBjb25maWd1cmF0aW9uIHRvIGV4cG9zZQorcmVwb3NpdG9yeSBuYW1lc3BhY2VzIGFzIHJlcG9zaXRvcmllcy4KKworRm9yIGEgc2ltcGxlIGxvY2FsIHRlc3QsIHlvdSBjYW4gdXNlIGxpbmtnaXQ6Z2l0LXJlbW90ZS1leHRbMV06CisKKy0tLS0tLS0tLS0KK2dpdCBjbG9uZSBleHQ6OidnaXQgLS1uYW1lc3BhY2U9Zm9vICVzIC90bXAvcHJlZml4ZWQuZ2l0JworLS0tLS0tLS0tLQorCitpbmNsdWRlOjp0cmFuc2Zlci1kYXRhLWxlYWtzLnR4dFtdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHJlbW90ZS1oZWxwZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0cmVtb3RlLWhlbHBlcnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OGEwMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHJlbW90ZS1oZWxwZXJzLnR4dApAQCAtMCwwICsxLDUyOSBAQAorZ2l0cmVtb3RlLWhlbHBlcnMoNykKKz09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHJlbW90ZS1oZWxwZXJzIC0gSGVscGVyIHByb2dyYW1zIHRvIGludGVyYWN0IHdpdGggcmVtb3RlIHJlcG9zaXRvcmllcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVtb3RlLTx0cmFuc3BvcnQ+JyA8cmVwb3NpdG9yeT4gWzxVUkw+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworUmVtb3RlIGhlbHBlciBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgbm90IHVzZWQgZGlyZWN0bHkgYnkgZW5kIHVzZXJzLAorYnV0IHRoZXkgYXJlIGludm9rZWQgYnkgR2l0IHdoZW4gaXQgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCByZW1vdGUKK3JlcG9zaXRvcmllcyBHaXQgZG9lcyBub3Qgc3VwcG9ydCBuYXRpdmVseS4gIEEgZ2l2ZW4gaGVscGVyIHdpbGwKK2ltcGxlbWVudCBhIHN1YnNldCBvZiB0aGUgY2FwYWJpbGl0aWVzIGRvY3VtZW50ZWQgaGVyZS4gV2hlbiBHaXQKK25lZWRzIHRvIGludGVyYWN0IHdpdGggYSByZXBvc2l0b3J5IHVzaW5nIGEgcmVtb3RlIGhlbHBlciwgaXQgc3Bhd25zCit0aGUgaGVscGVyIGFzIGFuIGluZGVwZW5kZW50IHByb2Nlc3MsIHNlbmRzIGNvbW1hbmRzIHRvIHRoZSBoZWxwZXIncworc3RhbmRhcmQgaW5wdXQsIGFuZCBleHBlY3RzIHJlc3VsdHMgZnJvbSB0aGUgaGVscGVyJ3Mgc3RhbmRhcmQKK291dHB1dC4gQmVjYXVzZSBhIHJlbW90ZSBoZWxwZXIgcnVucyBhcyBhbiBpbmRlcGVuZGVudCBwcm9jZXNzIGZyb20KK0dpdCwgdGhlcmUgaXMgbm8gbmVlZCB0byByZS1saW5rIEdpdCB0byBhZGQgYSBuZXcgaGVscGVyLCBub3IgYW55CituZWVkIHRvIGxpbmsgdGhlIGhlbHBlciB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBHaXQuCisKK0V2ZXJ5IGhlbHBlciBtdXN0IHN1cHBvcnQgdGhlICJjYXBhYmlsaXRpZXMiIGNvbW1hbmQsIHdoaWNoIEdpdAordXNlcyB0byBkZXRlcm1pbmUgd2hhdCBvdGhlciBjb21tYW5kcyB0aGUgaGVscGVyIHdpbGwgYWNjZXB0LiAgVGhvc2UKK290aGVyIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGRpc2NvdmVyIGFuZCB1cGRhdGUgcmVtb3RlIHJlZnMsCit0cmFuc3BvcnQgb2JqZWN0cyBiZXR3ZWVuIHRoZSBvYmplY3QgZGF0YWJhc2UgYW5kIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwKK2FuZCB1cGRhdGUgdGhlIGxvY2FsIG9iamVjdCBzdG9yZS4KKworR2l0IGNvbWVzIHdpdGggYSAiY3VybCIgZmFtaWx5IG9mIHJlbW90ZSBoZWxwZXJzLCB0aGF0IGhhbmRsZSB2YXJpb3VzCit0cmFuc3BvcnQgcHJvdG9jb2xzLCBzdWNoIGFzICdnaXQtcmVtb3RlLWh0dHAnLCAnZ2l0LXJlbW90ZS1odHRwcycsCisnZ2l0LXJlbW90ZS1mdHAnIGFuZCAnZ2l0LXJlbW90ZS1mdHBzJy4gVGhleSBpbXBsZW1lbnQgdGhlIGNhcGFiaWxpdGllcworJ2ZldGNoJywgJ29wdGlvbicsIGFuZCAncHVzaCcuCisKK0lOVk9DQVRJT04KKy0tLS0tLS0tLS0KKworUmVtb3RlIGhlbHBlciBwcm9ncmFtcyBhcmUgaW52b2tlZCB3aXRoIG9uZSBvciAob3B0aW9uYWxseSkgdHdvCithcmd1bWVudHMuIFRoZSBmaXJzdCBhcmd1bWVudCBzcGVjaWZpZXMgYSByZW1vdGUgcmVwb3NpdG9yeSBhcyBpbiBHaXQ7CitpdCBpcyBlaXRoZXIgdGhlIG5hbWUgb2YgYSBjb25maWd1cmVkIHJlbW90ZSBvciBhIFVSTC4gVGhlIHNlY29uZAorYXJndW1lbnQgc3BlY2lmaWVzIGEgVVJMOyBpdCBpcyB1c3VhbGx5IG9mIHRoZSBmb3JtCisnPHRyYW5zcG9ydD46Ly88YWRkcmVzcz4nLCBidXQgYW55IGFyYml0cmFyeSBzdHJpbmcgaXMgcG9zc2libGUuCitUaGUgYEdJVF9ESVJgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCB1cCBmb3IgdGhlIHJlbW90ZSBoZWxwZXIKK2FuZCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hlcmUgdG8gc3RvcmUgYWRkaXRpb25hbCBkYXRhIG9yIGZyb20KK3doaWNoIGRpcmVjdG9yeSB0byBpbnZva2UgYXV4aWxpYXJ5IEdpdCBjb21tYW5kcy4KKworV2hlbiBHaXQgZW5jb3VudGVycyBhIFVSTCBvZiB0aGUgZm9ybSAnPHRyYW5zcG9ydD46Ly88YWRkcmVzcz4nLCB3aGVyZQorJzx0cmFuc3BvcnQ+JyBpcyBhIHByb3RvY29sIHRoYXQgaXQgY2Fubm90IGhhbmRsZSBuYXRpdmVseSwgaXQKK2F1dG9tYXRpY2FsbHkgaW52b2tlcyAnZ2l0IHJlbW90ZS08dHJhbnNwb3J0Picgd2l0aCB0aGUgZnVsbCBVUkwgYXMKK3RoZSBzZWNvbmQgYXJndW1lbnQuIElmIHN1Y2ggYSBVUkwgaXMgZW5jb3VudGVyZWQgZGlyZWN0bHkgb24gdGhlCitjb21tYW5kIGxpbmUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgc2FtZSBhcyB0aGUgc2Vjb25kLCBhbmQgaWYgaXQKK2lzIGVuY291bnRlcmVkIGluIGEgY29uZmlndXJlZCByZW1vdGUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgbmFtZQorb2YgdGhhdCByZW1vdGUuCisKK0EgVVJMIG9mIHRoZSBmb3JtICc8dHJhbnNwb3J0Pjo6PGFkZHJlc3M+JyBleHBsaWNpdGx5IGluc3RydWN0cyBHaXQgdG8KK2ludm9rZSAnZ2l0IHJlbW90ZS08dHJhbnNwb3J0Picgd2l0aCAnPGFkZHJlc3M+JyBhcyB0aGUgc2Vjb25kCithcmd1bWVudC4gSWYgc3VjaCBhIFVSTCBpcyBlbmNvdW50ZXJlZCBkaXJlY3RseSBvbiB0aGUgY29tbWFuZCBsaW5lLAordGhlIGZpcnN0IGFyZ3VtZW50IGlzICc8YWRkcmVzcz4nLCBhbmQgaWYgaXQgaXMgZW5jb3VudGVyZWQgaW4gYQorY29uZmlndXJlZCByZW1vdGUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGF0IHJlbW90ZS4KKworQWRkaXRpb25hbGx5LCB3aGVuIGEgY29uZmlndXJlZCByZW1vdGUgaGFzIGByZW1vdGUuPG5hbWU+LnZjc2Agc2V0IHRvCisnPHRyYW5zcG9ydD4nLCBHaXQgZXhwbGljaXRseSBpbnZva2VzICdnaXQgcmVtb3RlLTx0cmFuc3BvcnQ+JyB3aXRoCisnPG5hbWU+JyBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIElmIHNldCwgdGhlIHNlY29uZCBhcmd1bWVudCBpcworYHJlbW90ZS48bmFtZT4udXJsYDsgb3RoZXJ3aXNlLCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG9taXR0ZWQuCisKK0lOUFVUIEZPUk1BVAorLS0tLS0tLS0tLS0tCisKK0dpdCBzZW5kcyB0aGUgcmVtb3RlIGhlbHBlciBhIGxpc3Qgb2YgY29tbWFuZHMgb24gc3RhbmRhcmQgaW5wdXQsIG9uZQorcGVyIGxpbmUuICBUaGUgZmlyc3QgY29tbWFuZCBpcyBhbHdheXMgdGhlICdjYXBhYmlsaXRpZXMnIGNvbW1hbmQsIGluCityZXNwb25zZSB0byB3aGljaCB0aGUgcmVtb3RlIGhlbHBlciBtdXN0IHByaW50IGEgbGlzdCBvZiB0aGUKK2NhcGFiaWxpdGllcyBpdCBzdXBwb3J0cyAoc2VlIGJlbG93KSBmb2xsb3dlZCBieSBhIGJsYW5rIGxpbmUuICBUaGUKK3Jlc3BvbnNlIHRvIHRoZSBjYXBhYmlsaXRpZXMgY29tbWFuZCBkZXRlcm1pbmVzIHdoYXQgY29tbWFuZHMgR2l0IHVzZXMKK2luIHRoZSByZW1haW5kZXIgb2YgdGhlIGNvbW1hbmQgc3RyZWFtLgorCitUaGUgY29tbWFuZCBzdHJlYW0gaXMgdGVybWluYXRlZCBieSBhIGJsYW5rIGxpbmUuICBJbiBzb21lIGNhc2VzCisoaW5kaWNhdGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSByZWxldmFudCBjb21tYW5kcyksIHRoaXMgYmxhbmsKK2xpbmUgaXMgZm9sbG93ZWQgYnkgYSBwYXlsb2FkIGluIHNvbWUgb3RoZXIgcHJvdG9jb2wgKGUuZy4sIHRoZSBwYWNrCitwcm90b2NvbCksIHdoaWxlIGluIG90aGVycyBpdCBpbmRpY2F0ZXMgdGhlIGVuZCBvZiBpbnB1dC4KKworQ2FwYWJpbGl0aWVzCit+fn5+fn5+fn5+fn4KKworRWFjaCByZW1vdGUgaGVscGVyIGlzIGV4cGVjdGVkIHRvIHN1cHBvcnQgb25seSBhIHN1YnNldCBvZiBjb21tYW5kcy4KK1RoZSBvcGVyYXRpb25zIGEgaGVscGVyIHN1cHBvcnRzIGFyZSBkZWNsYXJlZCB0byBHaXQgaW4gdGhlIHJlc3BvbnNlCit0byB0aGUgYGNhcGFiaWxpdGllc2AgY29tbWFuZCAoc2VlIENPTU1BTkRTLCBiZWxvdykuCisKK0luIHRoZSBmb2xsb3dpbmcsIHdlIGxpc3QgYWxsIGRlZmluZWQgY2FwYWJpbGl0aWVzIGFuZCBmb3IKK2VhY2ggd2UgbGlzdCB3aGljaCBjb21tYW5kcyBhIGhlbHBlciB3aXRoIHRoYXQgY2FwYWJpbGl0eQorbXVzdCBwcm92aWRlLgorCitDYXBhYmlsaXRpZXMgZm9yIFB1c2hpbmcKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorJ2Nvbm5lY3QnOjoKKwlDYW4gYXR0ZW1wdCB0byBjb25uZWN0IHRvICdnaXQgcmVjZWl2ZS1wYWNrJyAoZm9yIHB1c2hpbmcpLAorCSdnaXQgdXBsb2FkLXBhY2snLCBldGMgZm9yIGNvbW11bmljYXRpb24gdXNpbmcKKwlnaXQncyBuYXRpdmUgcGFja2ZpbGUgcHJvdG9jb2wuIFRoaXMKKwlyZXF1aXJlcyBhIGJpZGlyZWN0aW9uYWwsIGZ1bGwtZHVwbGV4IGNvbm5lY3Rpb24uCisrCitTdXBwb3J0ZWQgY29tbWFuZHM6ICdjb25uZWN0Jy4KKworJ3N0YXRlbGVzcy1jb25uZWN0Jzo6CisJRXhwZXJpbWVudGFsOyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisJQ2FuIGF0dGVtcHQgdG8gY29ubmVjdCB0byBhIHJlbW90ZSBzZXJ2ZXIgZm9yIGNvbW11bmljYXRpb24KKwl1c2luZyBnaXQncyB3aXJlLXByb3RvY29sIHZlcnNpb24gMi4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbgorCWZvciB0aGUgc3RhdGVsZXNzLWNvbm5lY3QgY29tbWFuZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKysKK1N1cHBvcnRlZCBjb21tYW5kczogJ3N0YXRlbGVzcy1jb25uZWN0Jy4KKworJ3B1c2gnOjoKKwlDYW4gZGlzY292ZXIgcmVtb3RlIHJlZnMgYW5kIHB1c2ggbG9jYWwgY29tbWl0cyBhbmQgdGhlCisJaGlzdG9yeSBsZWFkaW5nIHVwIHRvIHRoZW0gdG8gbmV3IG9yIGV4aXN0aW5nIHJlbW90ZSByZWZzLgorKworU3VwcG9ydGVkIGNvbW1hbmRzOiAnbGlzdCBmb3ItcHVzaCcsICdwdXNoJy4KKworJ2V4cG9ydCc6OgorCUNhbiBkaXNjb3ZlciByZW1vdGUgcmVmcyBhbmQgcHVzaCBzcGVjaWZpZWQgb2JqZWN0cyBmcm9tIGEKKwlmYXN0LWltcG9ydCBzdHJlYW0gdG8gcmVtb3RlIHJlZnMuCisrCitTdXBwb3J0ZWQgY29tbWFuZHM6ICdsaXN0IGZvci1wdXNoJywgJ2V4cG9ydCcuCisKK0lmIGEgaGVscGVyIGFkdmVydGlzZXMgJ2Nvbm5lY3QnLCBHaXQgd2lsbCB1c2UgaXQgaWYgcG9zc2libGUgYW5kCitmYWxsIGJhY2sgdG8gYW5vdGhlciBjYXBhYmlsaXR5IGlmIHRoZSBoZWxwZXIgcmVxdWVzdHMgc28gd2hlbgorY29ubmVjdGluZyAoc2VlIHRoZSAnY29ubmVjdCcgY29tbWFuZCB1bmRlciBDT01NQU5EUykuCitXaGVuIGNob29zaW5nIGJldHdlZW4gJ3B1c2gnIGFuZCAnZXhwb3J0JywgR2l0IHByZWZlcnMgJ3B1c2gnLgorT3RoZXIgZnJvbnRlbmRzIG1heSBoYXZlIHNvbWUgb3RoZXIgb3JkZXIgb2YgcHJlZmVyZW5jZS4KKworJ25vLXByaXZhdGUtdXBkYXRlJzo6CisJV2hlbiB1c2luZyB0aGUgJ3JlZnNwZWMnIGNhcGFiaWxpdHksIGdpdCBub3JtYWxseSB1cGRhdGVzIHRoZQorCXByaXZhdGUgcmVmIG9uIHN1Y2Nlc3NmdWwgcHVzaC4gVGhpcyB1cGRhdGUgaXMgZGlzYWJsZWQgd2hlbgorCXRoZSByZW1vdGUtaGVscGVyIGRlY2xhcmVzIHRoZSBjYXBhYmlsaXR5ICduby1wcml2YXRlLXVwZGF0ZScuCisKKworQ2FwYWJpbGl0aWVzIGZvciBGZXRjaGluZworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorJ2Nvbm5lY3QnOjoKKwlDYW4gdHJ5IHRvIGNvbm5lY3QgdG8gJ2dpdCB1cGxvYWQtcGFjaycgKGZvciBmZXRjaGluZyksCisJJ2dpdCByZWNlaXZlLXBhY2snLCBldGMgZm9yIGNvbW11bmljYXRpb24gdXNpbmcgdGhlCisJR2l0J3MgbmF0aXZlIHBhY2tmaWxlIHByb3RvY29sLiBUaGlzCisJcmVxdWlyZXMgYSBiaWRpcmVjdGlvbmFsLCBmdWxsLWR1cGxleCBjb25uZWN0aW9uLgorKworU3VwcG9ydGVkIGNvbW1hbmRzOiAnY29ubmVjdCcuCisKKydzdGF0ZWxlc3MtY29ubmVjdCc6OgorCUV4cGVyaW1lbnRhbDsgZm9yIGludGVybmFsIHVzZSBvbmx5LgorCUNhbiBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gYSByZW1vdGUgc2VydmVyIGZvciBjb21tdW5pY2F0aW9uCisJdXNpbmcgZ2l0J3Mgd2lyZS1wcm90b2NvbCB2ZXJzaW9uIDIuICBTZWUgdGhlIGRvY3VtZW50YXRpb24KKwlmb3IgdGhlIHN0YXRlbGVzcy1jb25uZWN0IGNvbW1hbmQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisrCitTdXBwb3J0ZWQgY29tbWFuZHM6ICdzdGF0ZWxlc3MtY29ubmVjdCcuCisKKydmZXRjaCc6OgorCUNhbiBkaXNjb3ZlciByZW1vdGUgcmVmcyBhbmQgdHJhbnNmZXIgb2JqZWN0cyByZWFjaGFibGUgZnJvbQorCXRoZW0gdG8gdGhlIGxvY2FsIG9iamVjdCBzdG9yZS4KKysKK1N1cHBvcnRlZCBjb21tYW5kczogJ2xpc3QnLCAnZmV0Y2gnLgorCisnaW1wb3J0Jzo6CisJQ2FuIGRpc2NvdmVyIHJlbW90ZSByZWZzIGFuZCBvdXRwdXQgb2JqZWN0cyByZWFjaGFibGUgZnJvbQorCXRoZW0gYXMgYSBzdHJlYW0gaW4gZmFzdC1pbXBvcnQgZm9ybWF0LgorKworU3VwcG9ydGVkIGNvbW1hbmRzOiAnbGlzdCcsICdpbXBvcnQnLgorCisnY2hlY2stY29ubmVjdGl2aXR5Jzo6CisJQ2FuIGd1YXJhbnRlZSB0aGF0IHdoZW4gYSBjbG9uZSBpcyByZXF1ZXN0ZWQsIHRoZSByZWNlaXZlZAorCXBhY2sgaXMgc2VsZiBjb250YWluZWQgYW5kIGlzIGNvbm5lY3RlZC4KKworSWYgYSBoZWxwZXIgYWR2ZXJ0aXNlcyAnY29ubmVjdCcsIEdpdCB3aWxsIHVzZSBpdCBpZiBwb3NzaWJsZSBhbmQKK2ZhbGwgYmFjayB0byBhbm90aGVyIGNhcGFiaWxpdHkgaWYgdGhlIGhlbHBlciByZXF1ZXN0cyBzbyB3aGVuCitjb25uZWN0aW5nIChzZWUgdGhlICdjb25uZWN0JyBjb21tYW5kIHVuZGVyIENPTU1BTkRTKS4KK1doZW4gY2hvb3NpbmcgYmV0d2VlbiAnZmV0Y2gnIGFuZCAnaW1wb3J0JywgR2l0IHByZWZlcnMgJ2ZldGNoJy4KK090aGVyIGZyb250ZW5kcyBtYXkgaGF2ZSBzb21lIG90aGVyIG9yZGVyIG9mIHByZWZlcmVuY2UuCisKK01pc2NlbGxhbmVvdXMgY2FwYWJpbGl0aWVzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisnb3B0aW9uJzo6CisJRm9yIHNwZWNpZnlpbmcgc2V0dGluZ3MgbGlrZSBgdmVyYm9zaXR5YCAoaG93IG11Y2ggb3V0cHV0IHRvCisJd3JpdGUgdG8gc3RkZXJyKSBhbmQgYGRlcHRoYCAoaG93IG11Y2ggaGlzdG9yeSBpcyB3YW50ZWQgaW4gdGhlCisJY2FzZSBvZiBhIHNoYWxsb3cgY2xvbmUpIHRoYXQgYWZmZWN0IGhvdyBvdGhlciBjb21tYW5kcyBhcmUKKwljYXJyaWVkIG91dC4KKworJ3JlZnNwZWMnIDxyZWZzcGVjPjo6CisJRm9yIHJlbW90ZSBoZWxwZXJzIHRoYXQgaW1wbGVtZW50ICdpbXBvcnQnIG9yICdleHBvcnQnLCB0aGlzIGNhcGFiaWxpdHkKKwlhbGxvd3MgdGhlIHJlZnMgdG8gYmUgY29uc3RyYWluZWQgdG8gYSBwcml2YXRlIG5hbWVzcGFjZSwgaW5zdGVhZCBvZgorCXdyaXRpbmcgdG8gcmVmcy9oZWFkcyBvciByZWZzL3JlbW90ZXMgZGlyZWN0bHkuCisJSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbGwgaW1wb3J0ZXJzIHByb3ZpZGluZyB0aGUgJ2ltcG9ydCcKKwljYXBhYmlsaXR5IHVzZSB0aGlzLiBJdCdzIG1hbmRhdG9yeSBmb3IgJ2V4cG9ydCcuCisrCitBIGhlbHBlciBhZHZlcnRpc2luZyB0aGUgY2FwYWJpbGl0eQorYHJlZnNwZWMgcmVmcy9oZWFkcy8qOnJlZnMvc3ZuL29yaWdpbi9icmFuY2hlcy8qYAoraXMgc2F5aW5nIHRoYXQsIHdoZW4gaXQgaXMgYXNrZWQgdG8gYGltcG9ydCByZWZzL2hlYWRzL3RvcGljYCwgdGhlCitzdHJlYW0gaXQgb3V0cHV0cyB3aWxsIHVwZGF0ZSB0aGUgYHJlZnMvc3ZuL29yaWdpbi9icmFuY2hlcy90b3BpY2AKK3JlZi4KKysKK1RoaXMgY2FwYWJpbGl0eSBjYW4gYmUgYWR2ZXJ0aXNlZCBtdWx0aXBsZSB0aW1lcy4gIFRoZSBmaXJzdAorYXBwbGljYWJsZSByZWZzcGVjIHRha2VzIHByZWNlZGVuY2UuICBUaGUgbGVmdC1oYW5kIG9mIHJlZnNwZWNzCithZHZlcnRpc2VkIHdpdGggdGhpcyBjYXBhYmlsaXR5IG11c3QgY292ZXIgYWxsIHJlZnMgcmVwb3J0ZWQgYnkKK3RoZSBsaXN0IGNvbW1hbmQuICBJZiBubyAncmVmc3BlYycgY2FwYWJpbGl0eSBpcyBhZHZlcnRpc2VkLAordGhlcmUgaXMgYW4gaW1wbGllZCBgcmVmc3BlYyAqOipgLgorKworV2hlbiB3cml0aW5nIHJlbW90ZS1oZWxwZXJzIGZvciBkZWNlbnRyYWxpemVkIHZlcnNpb24gY29udHJvbAorc3lzdGVtcywgaXQgaXMgYWR2aXNlZCB0byBrZWVwIGEgbG9jYWwgY29weSBvZiB0aGUgcmVwb3NpdG9yeSB0bworaW50ZXJhY3Qgd2l0aCwgYW5kIHRvIGxldCB0aGUgcHJpdmF0ZSBuYW1lc3BhY2UgcmVmcyBwb2ludCB0byB0aGlzCitsb2NhbCByZXBvc2l0b3J5LCB3aGlsZSB0aGUgcmVmcy9yZW1vdGVzIG5hbWVzcGFjZSBpcyB1c2VkIHRvIHRyYWNrCit0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCisKKydiaWRpLWltcG9ydCc6OgorCVRoaXMgbW9kaWZpZXMgdGhlICdpbXBvcnQnIGNhcGFiaWxpdHkuCisJVGhlIGZhc3QtaW1wb3J0IGNvbW1hbmRzICdjYXQtYmxvYicgYW5kICdscycgY2FuIGJlIHVzZWQgYnkgcmVtb3RlLWhlbHBlcnMKKwl0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBibG9icyBhbmQgdHJlZXMgdGhhdCBhbHJlYWR5IGV4aXN0IGluCisJZmFzdC1pbXBvcnQncyBtZW1vcnkuIFRoaXMgcmVxdWlyZXMgYSBjaGFubmVsIGZyb20gZmFzdC1pbXBvcnQgdG8gdGhlCisJcmVtb3RlLWhlbHBlci4KKwlJZiBpdCBpcyBhZHZlcnRpc2VkIGluIGFkZGl0aW9uIHRvICJpbXBvcnQiLCBHaXQgZXN0YWJsaXNoZXMgYSBwaXBlIGZyb20KKwlmYXN0LWltcG9ydCB0byB0aGUgcmVtb3RlLWhlbHBlcidzIHN0ZGluLgorCUl0IGZvbGxvd3MgdGhhdCBHaXQgYW5kIGZhc3QtaW1wb3J0IGFyZSBib3RoIGNvbm5lY3RlZCB0byB0aGUKKwlyZW1vdGUtaGVscGVyJ3Mgc3RkaW4uIEJlY2F1c2UgR2l0IGNhbiBzZW5kIG11bHRpcGxlIGNvbW1hbmRzIHRvCisJdGhlIHJlbW90ZS1oZWxwZXIgaXQgaXMgcmVxdWlyZWQgdGhhdCBoZWxwZXJzIHRoYXQgdXNlICdiaWRpLWltcG9ydCcKKwlidWZmZXIgYWxsICdpbXBvcnQnIGNvbW1hbmRzIG9mIGEgYmF0Y2ggYmVmb3JlIHNlbmRpbmcgZGF0YSB0byBmYXN0LWltcG9ydC4KKwlUaGlzIGlzIHRvIHByZXZlbnQgbWl4aW5nIGNvbW1hbmRzIGFuZCBmYXN0LWltcG9ydCByZXNwb25zZXMgb24gdGhlCisJaGVscGVyJ3Mgc3RkaW4uCisKKydleHBvcnQtbWFya3MnIDxmaWxlPjo6CisJVGhpcyBtb2RpZmllcyB0aGUgJ2V4cG9ydCcgY2FwYWJpbGl0eSwgaW5zdHJ1Y3RpbmcgR2l0IHRvIGR1bXAgdGhlCisJaW50ZXJuYWwgbWFya3MgdGFibGUgdG8gPGZpbGU+IHdoZW4gY29tcGxldGUuIEZvciBkZXRhaWxzLAorCXJlYWQgdXAgb24gYC0tZXhwb3J0LW1hcmtzPTxmaWxlPmAgaW4gbGlua2dpdDpnaXQtZmFzdC1leHBvcnRbMV0uCisKKydpbXBvcnQtbWFya3MnIDxmaWxlPjo6CisJVGhpcyBtb2RpZmllcyB0aGUgJ2V4cG9ydCcgY2FwYWJpbGl0eSwgaW5zdHJ1Y3RpbmcgR2l0IHRvIGxvYWQgdGhlCisJbWFya3Mgc3BlY2lmaWVkIGluIDxmaWxlPiBiZWZvcmUgcHJvY2Vzc2luZyBhbnkgaW5wdXQuIEZvciBkZXRhaWxzLAorCXJlYWQgdXAgb24gYC0taW1wb3J0LW1hcmtzPTxmaWxlPmAgaW4gbGlua2dpdDpnaXQtZmFzdC1leHBvcnRbMV0uCisKKydzaWduZWQtdGFncyc6OgorCVRoaXMgbW9kaWZpZXMgdGhlICdleHBvcnQnIGNhcGFiaWxpdHksIGluc3RydWN0aW5nIEdpdCB0byBwYXNzCisJYC0tc2lnbmVkLXRhZ3M9dmVyYmF0aW1gIHRvIGxpbmtnaXQ6Z2l0LWZhc3QtZXhwb3J0WzFdLiAgSW4gdGhlCisJYWJzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHksIEdpdCB3aWxsIHVzZSBgLS1zaWduZWQtdGFncz13YXJuLXN0cmlwYC4KKworCisKK0NPTU1BTkRTCistLS0tLS0tLQorCitDb21tYW5kcyBhcmUgZ2l2ZW4gYnkgdGhlIGNhbGxlciBvbiB0aGUgaGVscGVyJ3Mgc3RhbmRhcmQgaW5wdXQsIG9uZSBwZXIgbGluZS4KKworJ2NhcGFiaWxpdGllcyc6OgorCUxpc3RzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGhlbHBlciwgb25lIHBlciBsaW5lLCBlbmRpbmcKKwl3aXRoIGEgYmxhbmsgbGluZS4gRWFjaCBjYXBhYmlsaXR5IG1heSBiZSBwcmVjZWRlZCB3aXRoICcqJywKKwl3aGljaCBtYXJrcyB0aGVtIG1hbmRhdG9yeSBmb3IgR2l0IHZlcnNpb25zIHVzaW5nIHRoZSByZW1vdGUKKwloZWxwZXIgdG8gdW5kZXJzdGFuZC4gQW55IHVua25vd24gbWFuZGF0b3J5IGNhcGFiaWxpdHkgaXMgYQorCWZhdGFsIGVycm9yLgorKworU3VwcG9ydCBmb3IgdGhpcyBjb21tYW5kIGlzIG1hbmRhdG9yeS4KKworJ2xpc3QnOjoKKwlMaXN0cyB0aGUgcmVmcywgb25lIHBlciBsaW5lLCBpbiB0aGUgZm9ybWF0ICI8dmFsdWU+IDxuYW1lPgorCVs8YXR0cj4gLi4uXSIuIFRoZSB2YWx1ZSBtYXkgYmUgYSBoZXggc2hhMSBoYXNoLCAiQDxkZXN0PiIgZm9yCisJYSBzeW1yZWYsIG9yICI/IiB0byBpbmRpY2F0ZSB0aGF0IHRoZSBoZWxwZXIgY291bGQgbm90IGdldCB0aGUKKwl2YWx1ZSBvZiB0aGUgcmVmLiBBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXMgZm9sbG93cworCXRoZSBuYW1lOyB1bnJlY29nbml6ZWQgYXR0cmlidXRlcyBhcmUgaWdub3JlZC4gVGhlIGxpc3QgZW5kcworCXdpdGggYSBibGFuayBsaW5lLgorKworU2VlIFJFRiBMSVNUIEFUVFJJQlVURVMgZm9yIGEgbGlzdCBvZiBjdXJyZW50bHkgZGVmaW5lZCBhdHRyaWJ1dGVzLgorKworU3VwcG9ydGVkIGlmIHRoZSBoZWxwZXIgaGFzIHRoZSAiZmV0Y2giIG9yICJpbXBvcnQiIGNhcGFiaWxpdHkuCisKKydsaXN0IGZvci1wdXNoJzo6CisJU2ltaWxhciB0byAnbGlzdCcsIGV4Y2VwdCB0aGF0IGl0IGlzIHVzZWQgaWYgYW5kIG9ubHkgaWYKKwl0aGUgY2FsbGVyIHdhbnRzIHRvIHRoZSByZXN1bHRpbmcgcmVmIGxpc3QgdG8gcHJlcGFyZQorCXB1c2ggY29tbWFuZHMuCisJQSBoZWxwZXIgc3VwcG9ydGluZyBib3RoIHB1c2ggYW5kIGZldGNoIGNhbiB1c2UgdGhpcworCXRvIGRpc3Rpbmd1aXNoIGZvciB3aGljaCBvcGVyYXRpb24gdGhlIG91dHB1dCBvZiAnbGlzdCcKKwlpcyBnb2luZyB0byBiZSB1c2VkLCBwb3NzaWJseSByZWR1Y2luZyB0aGUgYW1vdW50CisJb2Ygd29yayB0aGF0IG5lZWRzIHRvIGJlIHBlcmZvcm1lZC4KKysKK1N1cHBvcnRlZCBpZiB0aGUgaGVscGVyIGhhcyB0aGUgInB1c2giIG9yICJleHBvcnQiIGNhcGFiaWxpdHkuCisKKydvcHRpb24nIDxuYW1lPiA8dmFsdWU+OjoKKwlTZXRzIHRoZSB0cmFuc3BvcnQgaGVscGVyIG9wdGlvbiA8bmFtZT4gdG8gPHZhbHVlPi4gIE91dHB1dHMgYQorCXNpbmdsZSBsaW5lIGNvbnRhaW5pbmcgb25lIG9mICdvaycgKG9wdGlvbiBzdWNjZXNzZnVsbHkgc2V0KSwKKwkndW5zdXBwb3J0ZWQnIChvcHRpb24gbm90IHJlY29nbml6ZWQpIG9yICdlcnJvciA8bXNnPicKKwkob3B0aW9uIDxuYW1lPiBpcyBzdXBwb3J0ZWQgYnV0IDx2YWx1ZT4gaXMgbm90IHZhbGlkCisJZm9yIGl0KS4gIE9wdGlvbnMgc2hvdWxkIGJlIHNldCBiZWZvcmUgb3RoZXIgY29tbWFuZHMsCisJYW5kIG1heSBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRob3NlIGNvbW1hbmRzLgorKworU2VlIE9QVElPTlMgZm9yIGEgbGlzdCBvZiBjdXJyZW50bHkgZGVmaW5lZCBvcHRpb25zLgorKworU3VwcG9ydGVkIGlmIHRoZSBoZWxwZXIgaGFzIHRoZSAib3B0aW9uIiBjYXBhYmlsaXR5LgorCisnZmV0Y2gnIDxzaGExPiA8bmFtZT46OgorCUZldGNoZXMgdGhlIGdpdmVuIG9iamVjdCwgd3JpdGluZyB0aGUgbmVjZXNzYXJ5IG9iamVjdHMKKwl0byB0aGUgZGF0YWJhc2UuICBGZXRjaCBjb21tYW5kcyBhcmUgc2VudCBpbiBhIGJhdGNoLCBvbmUKKwlwZXIgbGluZSwgdGVybWluYXRlZCB3aXRoIGEgYmxhbmsgbGluZS4KKwlPdXRwdXRzIGEgc2luZ2xlIGJsYW5rIGxpbmUgd2hlbiBhbGwgZmV0Y2ggY29tbWFuZHMgaW4gdGhlCisJc2FtZSBiYXRjaCBhcmUgY29tcGxldGUuIE9ubHkgb2JqZWN0cyB3aGljaCB3ZXJlIHJlcG9ydGVkCisJaW4gdGhlIG91dHB1dCBvZiAnbGlzdCcgd2l0aCBhIHNoYTEgbWF5IGJlIGZldGNoZWQgdGhpcyB3YXkuCisrCitPcHRpb25hbGx5IG1heSBvdXRwdXQgYSAnbG9jayA8ZmlsZT4nIGxpbmUgaW5kaWNhdGluZyB0aGUgZnVsbCBwYXRoIG9mCithIGZpbGUgdW5kZXIgYCRHSVRfRElSL29iamVjdHMvcGFja2Agd2hpY2ggaXMga2VlcGluZyBhIHBhY2sgdW50aWwKK3JlZnMgY2FuIGJlIHN1aXRhYmx5IHVwZGF0ZWQuICBUaGUgcGF0aCBtdXN0IGVuZCB3aXRoIGAua2VlcGAuIFRoaXMgaXMKK2EgbWVjaGFuaXNtIHRvIG5hbWUgYSA8cGFjayxpZHgsa2VlcD4gdHVwbGUgYnkgZ2l2aW5nIG9ubHkgdGhlIGtlZXAKK2NvbXBvbmVudC4gIFRoZSBrZXB0IHBhY2sgd2lsbCBub3QgYmUgZGVsZXRlZCBieSBhIGNvbmN1cnJlbnQgcmVwYWNrLAorZXZlbiB0aG91Z2ggaXRzIG9iamVjdHMgbWF5IG5vdCBiZSByZWZlcmVuY2VkIHVudGlsIHRoZSBmZXRjaCBjb21wbGV0ZXMuCitUaGUgYC5rZWVwYCBmaWxlIHdpbGwgYmUgZGVsZXRlZCBhdCB0aGUgY29uY2x1c2lvbiBvZiB0aGUgZmV0Y2guCisrCitJZiBvcHRpb24gJ2NoZWNrLWNvbm5lY3Rpdml0eScgaXMgcmVxdWVzdGVkLCB0aGUgaGVscGVyIG11c3Qgb3V0cHV0CisnY29ubmVjdGl2aXR5LW9rJyBpZiB0aGUgY2xvbmUgaXMgc2VsZi1jb250YWluZWQgYW5kIGNvbm5lY3RlZC4KKysKK1N1cHBvcnRlZCBpZiB0aGUgaGVscGVyIGhhcyB0aGUgImZldGNoIiBjYXBhYmlsaXR5LgorCisncHVzaCcgKzxzcmM+Ojxkc3Q+OjoKKwlQdXNoZXMgdGhlIGdpdmVuIGxvY2FsIDxzcmM+IGNvbW1pdCBvciBicmFuY2ggdG8gdGhlCisJcmVtb3RlIGJyYW5jaCBkZXNjcmliZWQgYnkgPGRzdD4uICBBIGJhdGNoIHNlcXVlbmNlIG9mCisJb25lIG9yIG1vcmUgJ3B1c2gnIGNvbW1hbmRzIGlzIHRlcm1pbmF0ZWQgd2l0aCBhIGJsYW5rIGxpbmUKKwkoaWYgdGhlcmUgaXMgb25seSBvbmUgcmVmZXJlbmNlIHRvIHB1c2gsIGEgc2luZ2xlICdwdXNoJyBjb21tYW5kCisJaXMgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lKS4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgd291bGQKKwliZSB0d28gYmF0Y2hlcyBvZiAncHVzaCcsIHRoZSBmaXJzdCBhc2tpbmcgdGhlIHJlbW90ZS1oZWxwZXIKKwl0byBwdXNoIHRoZSBsb2NhbCByZWYgJ21hc3RlcicgdG8gdGhlIHJlbW90ZSByZWYgJ21hc3RlcicgYW5kCisJdGhlIGxvY2FsIGBIRUFEYCB0byB0aGUgcmVtb3RlICdicmFuY2gnLCBhbmQgdGhlIHNlY29uZAorCWFza2luZyB0byBwdXNoIHJlZiAnZm9vJyB0byByZWYgJ2JhcicgKGZvcmNlZCB1cGRhdGUgcmVxdWVzdGVkCisJYnkgdGhlICcrJykuCisrCistLS0tLS0tLS0tLS0KK3B1c2ggcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9tYXN0ZXIKK3B1c2ggSEVBRDpyZWZzL2hlYWRzL2JyYW5jaAorXG4KK3B1c2ggK3JlZnMvaGVhZHMvZm9vOnJlZnMvaGVhZHMvYmFyCitcbgorLS0tLS0tLS0tLS0tCisrCitaZXJvIG9yIG1vcmUgcHJvdG9jb2wgb3B0aW9ucyBtYXkgYmUgZW50ZXJlZCBhZnRlciB0aGUgbGFzdCAncHVzaCcKK2NvbW1hbmQsIGJlZm9yZSB0aGUgYmF0Y2gncyB0ZXJtaW5hdGluZyBibGFuayBsaW5lLgorKworV2hlbiB0aGUgcHVzaCBpcyBjb21wbGV0ZSwgb3V0cHV0cyBvbmUgb3IgbW9yZSAnb2sgPGRzdD4nIG9yCisnZXJyb3IgPGRzdD4gPHdoeT4/JyBsaW5lcyB0byBpbmRpY2F0ZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YKK2VhY2ggcHVzaGVkIHJlZi4gIFRoZSBzdGF0dXMgcmVwb3J0IG91dHB1dCBpcyB0ZXJtaW5hdGVkIGJ5CithIGJsYW5rIGxpbmUuICBUaGUgb3B0aW9uIGZpZWxkIDx3aHk+IG1heSBiZSBxdW90ZWQgaW4gYSBDCitzdHlsZSBzdHJpbmcgaWYgaXQgY29udGFpbnMgYW4gTEYuCisrCitTdXBwb3J0ZWQgaWYgdGhlIGhlbHBlciBoYXMgdGhlICJwdXNoIiBjYXBhYmlsaXR5LgorCisnaW1wb3J0JyA8bmFtZT46OgorCVByb2R1Y2VzIGEgZmFzdC1pbXBvcnQgc3RyZWFtIHdoaWNoIGltcG9ydHMgdGhlIGN1cnJlbnQgdmFsdWUKKwlvZiB0aGUgbmFtZWQgcmVmLiBJdCBtYXkgYWRkaXRpb25hbGx5IGltcG9ydCBvdGhlciByZWZzIGFzCisJbmVlZGVkIHRvIGNvbnN0cnVjdCB0aGUgaGlzdG9yeSBlZmZpY2llbnRseS4gVGhlIHNjcmlwdCB3cml0ZXMKKwl0byBhIGhlbHBlci1zcGVjaWZpYyBwcml2YXRlIG5hbWVzcGFjZS4gVGhlIHZhbHVlIG9mIHRoZSBuYW1lZAorCXJlZiBzaG91bGQgYmUgd3JpdHRlbiB0byBhIGxvY2F0aW9uIGluIHRoaXMgbmFtZXNwYWNlIGRlcml2ZWQKKwlieSBhcHBseWluZyB0aGUgcmVmc3BlY3MgZnJvbSB0aGUgInJlZnNwZWMiIGNhcGFiaWxpdHkgdG8gdGhlCisJbmFtZSBvZiB0aGUgcmVmLgorKworRXNwZWNpYWxseSB1c2VmdWwgZm9yIGludGVyb3BlcmFiaWxpdHkgd2l0aCBhIGZvcmVpZ24gdmVyc2lvbmluZworc3lzdGVtLgorKworSnVzdCBsaWtlICdwdXNoJywgYSBiYXRjaCBzZXF1ZW5jZSBvZiBvbmUgb3IgbW9yZSAnaW1wb3J0JyBpcwordGVybWluYXRlZCB3aXRoIGEgYmxhbmsgbGluZS4gRm9yIGVhY2ggYmF0Y2ggb2YgJ2ltcG9ydCcsIHRoZSByZW1vdGUKK2hlbHBlciBzaG91bGQgcHJvZHVjZSBhIGZhc3QtaW1wb3J0IHN0cmVhbSB0ZXJtaW5hdGVkIGJ5IGEgJ2RvbmUnCitjb21tYW5kLgorKworTm90ZSB0aGF0IGlmIHRoZSAnYmlkaS1pbXBvcnQnIGNhcGFiaWxpdHkgaXMgdXNlZCB0aGUgY29tcGxldGUgYmF0Y2gKK3NlcXVlbmNlIGhhcyB0byBiZSBidWZmZXJlZCBiZWZvcmUgc3RhcnRpbmcgdG8gc2VuZCBkYXRhIHRvIGZhc3QtaW1wb3J0Cit0byBwcmV2ZW50IG1peGluZyBvZiBjb21tYW5kcyBhbmQgZmFzdC1pbXBvcnQgcmVzcG9uc2VzIG9uIHRoZSBoZWxwZXIncworc3RkaW4uCisrCitTdXBwb3J0ZWQgaWYgdGhlIGhlbHBlciBoYXMgdGhlICJpbXBvcnQiIGNhcGFiaWxpdHkuCisKKydleHBvcnQnOjoKKwlJbnN0cnVjdHMgdGhlIHJlbW90ZSBoZWxwZXIgdGhhdCBhbnkgc3Vic2VxdWVudCBpbnB1dCBpcworCXBhcnQgb2YgYSBmYXN0LWltcG9ydCBzdHJlYW0gKGdlbmVyYXRlZCBieSAnZ2l0IGZhc3QtZXhwb3J0JykKKwljb250YWluaW5nIG9iamVjdHMgd2hpY2ggc2hvdWxkIGJlIHB1c2hlZCB0byB0aGUgcmVtb3RlLgorKworRXNwZWNpYWxseSB1c2VmdWwgZm9yIGludGVyb3BlcmFiaWxpdHkgd2l0aCBhIGZvcmVpZ24gdmVyc2lvbmluZworc3lzdGVtLgorKworVGhlICdleHBvcnQtbWFya3MnIGFuZCAnaW1wb3J0LW1hcmtzJyBjYXBhYmlsaXRpZXMsIGlmIHNwZWNpZmllZCwKK2FmZmVjdCB0aGlzIGNvbW1hbmQgaW4gc28gZmFyIGFzIHRoZXkgYXJlIHBhc3NlZCBvbiB0byAnZ2l0CitmYXN0LWV4cG9ydCcsIHdoaWNoIHRoZW4gd2lsbCBsb2FkL3N0b3JlIGEgdGFibGUgb2YgbWFya3MgZm9yCitsb2NhbCBvYmplY3RzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBmb3IgaW5jcmVtZW50YWwKK29wZXJhdGlvbnMuCisrCitTdXBwb3J0ZWQgaWYgdGhlIGhlbHBlciBoYXMgdGhlICJleHBvcnQiIGNhcGFiaWxpdHkuCisKKydjb25uZWN0JyA8c2VydmljZT46OgorCUNvbm5lY3RzIHRvIGdpdmVuIHNlcnZpY2UuIFN0YW5kYXJkIGlucHV0IGFuZCBzdGFuZGFyZCBvdXRwdXQKKwlvZiBoZWxwZXIgYXJlIGNvbm5lY3RlZCB0byBzcGVjaWZpZWQgc2VydmljZSAoZ2l0IHByZWZpeCBpcworCWluY2x1ZGVkIGluIHNlcnZpY2UgbmFtZSBzbyBlLmcuIGZldGNoaW5nIHVzZXMgJ2dpdC11cGxvYWQtcGFjaycKKwlhcyBzZXJ2aWNlKSBvbiByZW1vdGUgc2lkZS4gVmFsaWQgcmVwbGllcyB0byB0aGlzIGNvbW1hbmQgYXJlCisJZW1wdHkgbGluZSAoY29ubmVjdGlvbiBlc3RhYmxpc2hlZCksICdmYWxsYmFjaycgKG5vIHNtYXJ0CisJdHJhbnNwb3J0IHN1cHBvcnQsIGZhbGwgYmFjayB0byBkdW1iIHRyYW5zcG9ydHMpIGFuZCBqdXN0CisJZXhpdGluZyB3aXRoIGVycm9yIG1lc3NhZ2UgcHJpbnRlZCAoY2FuJ3QgY29ubmVjdCwgZG9uJ3QKKwlib3RoZXIgdHJ5aW5nIHRvIGZhbGwgYmFjaykuIEFmdGVyIGxpbmUgZmVlZCB0ZXJtaW5hdGluZyB0aGUKKwlwb3NpdGl2ZSAoZW1wdHkpIHJlc3BvbnNlLCB0aGUgb3V0cHV0IG9mIHNlcnZpY2Ugc3RhcnRzLiBBZnRlcgorCXRoZSBjb25uZWN0aW9uIGVuZHMsIHRoZSByZW1vdGUgaGVscGVyIGV4aXRzLgorKworU3VwcG9ydGVkIGlmIHRoZSBoZWxwZXIgaGFzIHRoZSAiY29ubmVjdCIgY2FwYWJpbGl0eS4KKworJ3N0YXRlbGVzcy1jb25uZWN0JyA8c2VydmljZT46OgorCUV4cGVyaW1lbnRhbDsgZm9yIGludGVybmFsIHVzZSBvbmx5LgorCUNvbm5lY3RzIHRvIHRoZSBnaXZlbiByZW1vdGUgc2VydmljZSBmb3IgY29tbXVuaWNhdGlvbiB1c2luZworCWdpdCdzIHdpcmUtcHJvdG9jb2wgdmVyc2lvbiAyLiAgVmFsaWQgcmVwbGllcyB0byB0aGlzIGNvbW1hbmQKKwlhcmUgZW1wdHkgbGluZSAoY29ubmVjdGlvbiBlc3RhYmxpc2hlZCksICdmYWxsYmFjaycgKG5vIHNtYXJ0CisJdHJhbnNwb3J0IHN1cHBvcnQsIGZhbGwgYmFjayB0byBkdW1iIHRyYW5zcG9ydHMpIGFuZCBqdXN0CisJZXhpdGluZyB3aXRoIGVycm9yIG1lc3NhZ2UgcHJpbnRlZCAoY2FuJ3QgY29ubmVjdCwgZG9uJ3QgYm90aGVyCisJdHJ5aW5nIHRvIGZhbGwgYmFjaykuICBBZnRlciBsaW5lIGZlZWQgdGVybWluYXRpbmcgdGhlIHBvc2l0aXZlCisJKGVtcHR5KSByZXNwb25zZSwgdGhlIG91dHB1dCBvZiB0aGUgc2VydmljZSBzdGFydHMuICBNZXNzYWdlcworCShib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlKSBtdXN0IGNvbnNpc3Qgb2YgemVybyBvciBtb3JlCisJUEtULUxJTkVzLCB0ZXJtaW5hdGluZyBpbiBhIGZsdXNoIHBhY2tldC4gVGhlIGNsaWVudCBtdXN0IG5vdAorCWV4cGVjdCB0aGUgc2VydmVyIHRvIHN0b3JlIGFueSBzdGF0ZSBpbiBiZXR3ZWVuIHJlcXVlc3QtcmVzcG9uc2UKKwlwYWlycy4gIEFmdGVyIHRoZSBjb25uZWN0aW9uIGVuZHMsIHRoZSByZW1vdGUgaGVscGVyIGV4aXRzLgorKworU3VwcG9ydGVkIGlmIHRoZSBoZWxwZXIgaGFzIHRoZSAic3RhdGVsZXNzLWNvbm5lY3QiIGNhcGFiaWxpdHkuCisKK0lmIGEgZmF0YWwgZXJyb3Igb2NjdXJzLCB0aGUgcHJvZ3JhbSB3cml0ZXMgdGhlIGVycm9yIG1lc3NhZ2UgdG8KK3N0ZGVyciBhbmQgZXhpdHMuIFRoZSBjYWxsZXIgc2hvdWxkIGV4cGVjdCB0aGF0IGEgc3VpdGFibGUgZXJyb3IKK21lc3NhZ2UgaGFzIGJlZW4gcHJpbnRlZCBpZiB0aGUgY2hpbGQgY2xvc2VzIHRoZSBjb25uZWN0aW9uIHdpdGhvdXQKK2NvbXBsZXRpbmcgYSB2YWxpZCByZXNwb25zZSBmb3IgdGhlIGN1cnJlbnQgY29tbWFuZC4KKworQWRkaXRpb25hbCBjb21tYW5kcyBtYXkgYmUgc3VwcG9ydGVkLCBhcyBtYXkgYmUgZGV0ZXJtaW5lZCBmcm9tCitjYXBhYmlsaXRpZXMgcmVwb3J0ZWQgYnkgdGhlIGhlbHBlci4KKworUkVGIExJU1QgQVRUUklCVVRFUworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgJ2xpc3QnIGNvbW1hbmQgcHJvZHVjZXMgYSBsaXN0IG9mIHJlZnMgaW4gd2hpY2ggZWFjaCByZWYKK21heSBiZSBmb2xsb3dlZCBieSBhIGxpc3Qgb2YgYXR0cmlidXRlcy4gVGhlIGZvbGxvd2luZyByZWYgbGlzdAorYXR0cmlidXRlcyBhcmUgZGVmaW5lZC4KKworJ3VuY2hhbmdlZCc6OgorCVRoaXMgcmVmIGlzIHVuY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBpbXBvcnQgb3IgZmV0Y2gsIGFsdGhvdWdoCisJdGhlIGhlbHBlciBjYW5ub3QgbmVjZXNzYXJpbHkgZGV0ZXJtaW5lIHdoYXQgdmFsdWUgdGhhdCBwcm9kdWNlZC4KKworT1BUSU9OUworLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGRlZmluZWQgYW5kICh1bmRlciBzdWl0YWJsZSBjaXJjdW1zdGFuY2VzKQorc2V0IGJ5IEdpdCBpZiB0aGUgcmVtb3RlIGhlbHBlciBoYXMgdGhlICdvcHRpb24nIGNhcGFiaWxpdHkuCisKKydvcHRpb24gdmVyYm9zaXR5JyA8bj46OgorCUNoYW5nZXMgdGhlIHZlcmJvc2l0eSBvZiBtZXNzYWdlcyBkaXNwbGF5ZWQgYnkgdGhlIGhlbHBlci4KKwlBIHZhbHVlIG9mIDAgZm9yIDxuPiBtZWFucyB0aGF0IHByb2Nlc3NlcyBvcGVyYXRlCisJcXVpZXRseSwgYW5kIHRoZSBoZWxwZXIgcHJvZHVjZXMgb25seSBlcnJvciBvdXRwdXQuCisJMSBpcyB0aGUgZGVmYXVsdCBsZXZlbCBvZiB2ZXJib3NpdHksIGFuZCBoaWdoZXIgdmFsdWVzCisJb2YgPG4+IGNvcnJlc3BvbmQgdG8gdGhlIG51bWJlciBvZiAtdiBmbGFncyBwYXNzZWQgb24gdGhlCisJY29tbWFuZCBsaW5lLgorCisnb3B0aW9uIHByb2dyZXNzJyB7J3RydWUnfCdmYWxzZSd9OjoKKwlFbmFibGVzIChvciBkaXNhYmxlcykgcHJvZ3Jlc3MgbWVzc2FnZXMgZGlzcGxheWVkIGJ5IHRoZQorCXRyYW5zcG9ydCBoZWxwZXIgZHVyaW5nIGEgY29tbWFuZC4KKworJ29wdGlvbiBkZXB0aCcgPGRlcHRoPjo6CisJRGVlcGVucyB0aGUgaGlzdG9yeSBvZiBhIHNoYWxsb3cgcmVwb3NpdG9yeS4KKworJ29wdGlvbiBkZWVwZW4tc2luY2UgPHRpbWVzdGFtcD46OgorCURlZXBlbnMgdGhlIGhpc3Rvcnkgb2YgYSBzaGFsbG93IHJlcG9zaXRvcnkgYmFzZWQgb24gdGltZS4KKworJ29wdGlvbiBkZWVwZW4tbm90IDxyZWY+OjoKKwlEZWVwZW5zIHRoZSBoaXN0b3J5IG9mIGEgc2hhbGxvdyByZXBvc2l0b3J5IGV4Y2x1ZGluZyByZWYuCisJTXVsdGlwbGUgb3B0aW9ucyBhZGQgdXAuCisKKydvcHRpb24gZGVlcGVuLXJlbGF0aXZlIHsndHJ1ZSd8J2ZhbHNlJ306OgorCURlZXBlbnMgdGhlIGhpc3Rvcnkgb2YgYSBzaGFsbG93IHJlcG9zaXRvcnkgcmVsYXRpdmUgdG8KKwljdXJyZW50IGJvdW5kYXJ5LiBPbmx5IHZhbGlkIHdoZW4gdXNlZCB3aXRoICJvcHRpb24gZGVwdGgiLgorCisnb3B0aW9uIGZvbGxvd3RhZ3MnIHsndHJ1ZSd8J2ZhbHNlJ306OgorCUlmIGVuYWJsZWQgdGhlIGhlbHBlciBzaG91bGQgYXV0b21hdGljYWxseSBmZXRjaCBhbm5vdGF0ZWQKKwl0YWcgb2JqZWN0cyBpZiB0aGUgb2JqZWN0IHRoZSB0YWcgcG9pbnRzIGF0IHdhcyB0cmFuc2ZlcnJlZAorCWR1cmluZyB0aGUgZmV0Y2ggY29tbWFuZC4gIElmIHRoZSB0YWcgaXMgbm90IGZldGNoZWQgYnkKKwl0aGUgaGVscGVyIGEgc2Vjb25kIGZldGNoIGNvbW1hbmQgd2lsbCB1c3VhbGx5IGJlIHNlbnQgdG8KKwlhc2sgZm9yIHRoZSB0YWcgc3BlY2lmaWNhbGx5LiAgU29tZSBoZWxwZXJzIG1heSBiZSBhYmxlIHRvCisJdXNlIHRoaXMgb3B0aW9uIHRvIGF2b2lkIGEgc2Vjb25kIG5ldHdvcmsgY29ubmVjdGlvbi4KKworJ29wdGlvbiBkcnktcnVuJyB7J3RydWUnfCdmYWxzZSd9OgorCUlmIHRydWUsIHByZXRlbmQgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LAorCWJ1dCBkb24ndCBhY3R1YWxseSBjaGFuZ2UgYW55IHJlcG9zaXRvcnkgZGF0YS4gIEZvciBtb3N0CisJaGVscGVycyB0aGlzIG9ubHkgYXBwbGllcyB0byB0aGUgJ3B1c2gnLCBpZiBzdXBwb3J0ZWQuCisKKydvcHRpb24gc2VydnBhdGggPGMtc3R5bGUtcXVvdGVkLXBhdGg+Jzo6CisJU2V0cyBzZXJ2aWNlIHBhdGggKC0tdXBsb2FkLXBhY2ssIC0tcmVjZWl2ZS1wYWNrIGV0Yy4pIGZvcgorCW5leHQgY29ubmVjdC4gUmVtb3RlIGhlbHBlciBtYXkgc3VwcG9ydCB0aGlzIG9wdGlvbiwgYnV0CisJbXVzdCBub3QgcmVseSBvbiB0aGlzIG9wdGlvbiBiZWluZyBzZXQgYmVmb3JlCisJY29ubmVjdCByZXF1ZXN0IG9jY3Vycy4KKworJ29wdGlvbiBjaGVjay1jb25uZWN0aXZpdHknIHsndHJ1ZSd8J2ZhbHNlJ306OgorCVJlcXVlc3QgdGhlIGhlbHBlciB0byBjaGVjayBjb25uZWN0aXZpdHkgb2YgYSBjbG9uZS4KKworJ29wdGlvbiBmb3JjZScgeyd0cnVlJ3wnZmFsc2UnfTo6CisJUmVxdWVzdCB0aGUgaGVscGVyIHRvIHBlcmZvcm0gYSBmb3JjZSB1cGRhdGUuICBEZWZhdWx0cyB0bworCSdmYWxzZScuCisKKydvcHRpb24gY2xvbmluZycgeyd0cnVlJ3wnZmFsc2UnfTo6CisJTm90aWZ5IHRoZSBoZWxwZXIgdGhpcyBpcyBhIGNsb25lIHJlcXVlc3QgKGkuZS4gdGhlIGN1cnJlbnQKKwlyZXBvc2l0b3J5IGlzIGd1YXJhbnRlZWQgZW1wdHkpLgorCisnb3B0aW9uIHVwZGF0ZS1zaGFsbG93JyB7J3RydWUnfCdmYWxzZSd9OjoKKwlBbGxvdyB0byBleHRlbmQgLmdpdC9zaGFsbG93IGlmIHRoZSBuZXcgcmVmcyByZXF1aXJlIGl0LgorCisnb3B0aW9uIHB1c2hjZXJ0JyB7J3RydWUnfCdmYWxzZSd9OjoKKwlHUEcgc2lnbiBwdXNoZXMuCisKKydvcHRpb24gcHVzaC1vcHRpb24gPHN0cmluZz46OgorCVRyYW5zbWl0IDxzdHJpbmc+IGFzIGEgcHVzaCBvcHRpb24uIEFzIHRoZSBwdXNoIG9wdGlvbgorCW11c3Qgbm90IGNvbnRhaW4gTEYgb3IgTlVMIGNoYXJhY3RlcnMsIHRoZSBzdHJpbmcgaXMgbm90IGVuY29kZWQuCisKKydvcHRpb24gZnJvbS1wcm9taXNvcicgeyd0cnVlJ3wnZmFsc2UnfTo6CisJSW5kaWNhdGUgdGhhdCB0aGVzZSBvYmplY3RzIGFyZSBiZWluZyBmZXRjaGVkIGZyb20gYSBwcm9taXNvci4KKworJ29wdGlvbiBuby1kZXBlbmRlbnRzJyB7J3RydWUnfCdmYWxzZSd9OjoKKwlJbmRpY2F0ZSB0aGF0IG9ubHkgdGhlIG9iamVjdHMgd2FudGVkIG5lZWQgdG8gYmUgZmV0Y2hlZCwgbm90CisJdGhlaXIgZGVwZW5kZW50cy4KKworJ29wdGlvbiBhdG9taWMnIHsndHJ1ZSd8J2ZhbHNlJ306OgorCVdoZW4gcHVzaGluZywgcmVxdWVzdCB0aGUgcmVtb3RlIHNlcnZlciB0byB1cGRhdGUgcmVmcyBpbiBhIHNpbmdsZSBhdG9taWMKKwl0cmFuc2FjdGlvbi4gIElmIHN1Y2Nlc3NmdWwsIGFsbCByZWZzIHdpbGwgYmUgdXBkYXRlZCwgb3Igbm9uZSB3aWxsLiAgSWYgdGhlCisJcmVtb3RlIHNpZGUgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGNhcGFiaWxpdHksIHRoZSBwdXNoIHdpbGwgZmFpbC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1yZW1vdGVbMV0KKworbGlua2dpdDpnaXQtcmVtb3RlLWV4dFsxXQorCitsaW5rZ2l0OmdpdC1yZW1vdGUtZmRbMV0KKworbGlua2dpdDpnaXQtZmFzdC1pbXBvcnRbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHJlcG9zaXRvcnktbGF5b3V0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0cmVwb3NpdG9yeS1sYXlvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMmVmNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHJlcG9zaXRvcnktbGF5b3V0LnR4dApAQCAtMCwwICsxLDMwOCBAQAorZ2l0cmVwb3NpdG9yeS1sYXlvdXQoNSkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHJlcG9zaXRvcnktbGF5b3V0IC0gR2l0IFJlcG9zaXRvcnkgTGF5b3V0CisKK1NZTk9QU0lTCistLS0tLS0tLQorJEdJVF9ESVIvKgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworQSBHaXQgcmVwb3NpdG9yeSBjb21lcyBpbiB0d28gZGlmZmVyZW50IGZsYXZvdXJzOgorCisgKiBhIGAuZ2l0YCBkaXJlY3RvcnkgYXQgdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZTsKKworICogYSBgPHByb2plY3Q+LmdpdGAgZGlyZWN0b3J5IHRoYXQgaXMgYSAnYmFyZScgcmVwb3NpdG9yeQorICAgKGkuZS4gd2l0aG91dCBpdHMgb3duIHdvcmtpbmcgdHJlZSksIHRoYXQgaXMgdHlwaWNhbGx5IHVzZWQgZm9yCisgICBleGNoYW5naW5nIGhpc3RvcmllcyB3aXRoIG90aGVycyBieSBwdXNoaW5nIGludG8gaXQgYW5kIGZldGNoaW5nCisgICBmcm9tIGl0LgorCisqTm90ZSo6IEFsc28geW91IGNhbiBoYXZlIGEgcGxhaW4gdGV4dCBmaWxlIGAuZ2l0YCBhdCB0aGUgcm9vdCBvZgoreW91ciB3b3JraW5nIHRyZWUsIGNvbnRhaW5pbmcgYGdpdGRpcjogPHBhdGg+YCB0byBwb2ludCBhdCB0aGUgcmVhbAorZGlyZWN0b3J5IHRoYXQgaGFzIHRoZSByZXBvc2l0b3J5LiAgVGhpcyBtZWNoYW5pc20gaXMgb2Z0ZW4gdXNlZCBmb3IKK2Egd29ya2luZyB0cmVlIG9mIGEgc3VibW9kdWxlIGNoZWNrb3V0LCB0byBhbGxvdyB5b3UgaW4gdGhlCitjb250YWluaW5nIHN1cGVycHJvamVjdCB0byBgZ2l0IGNoZWNrb3V0YCBhIGJyYW5jaCB0aGF0IGRvZXMgbm90CitoYXZlIHRoZSBzdWJtb2R1bGUuICBUaGUgYGNoZWNrb3V0YCBoYXMgdG8gcmVtb3ZlIHRoZSBlbnRpcmUKK3N1Ym1vZHVsZSB3b3JraW5nIHRyZWUsIHdpdGhvdXQgbG9zaW5nIHRoZSBzdWJtb2R1bGUgcmVwb3NpdG9yeS4KKworVGhlc2UgdGhpbmdzIG1heSBleGlzdCBpbiBhIEdpdCByZXBvc2l0b3J5LgorCitvYmplY3RzOjoKKwlPYmplY3Qgc3RvcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVwb3NpdG9yeS4gIFVzdWFsbHkKKwlhbiBvYmplY3Qgc3RvcmUgaXMgc2VsZiBzdWZmaWNpZW50IChpLmUuIGFsbCB0aGUgb2JqZWN0cworCXRoYXQgYXJlIHJlZmVycmVkIHRvIGJ5IGFuIG9iamVjdCBmb3VuZCBpbiBpdCBhcmUgYWxzbworCWZvdW5kIGluIGl0KSwgYnV0IHRoZXJlIGFyZSBhIGZldyB3YXlzIHRvIHZpb2xhdGUgaXQuCisrCisuIFlvdSBjb3VsZCBoYXZlIGFuIGluY29tcGxldGUgYnV0IGxvY2FsbHkgdXNhYmxlIHJlcG9zaXRvcnkKK2J5IGNyZWF0aW5nIGEgc2hhbGxvdyBjbG9uZS4gIFNlZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXS4KKy4gWW91IGNvdWxkIGJlIHVzaW5nIHRoZSBgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXNgIG9yCitgJEdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTYCBtZWNoYW5pc21zIHRvICdib3Jyb3cnCitvYmplY3RzIGZyb20gb3RoZXIgb2JqZWN0IHN0b3Jlcy4gIEEgcmVwb3NpdG9yeSB3aXRoIHRoaXMga2luZAorb2YgaW5jb21wbGV0ZSBvYmplY3Qgc3RvcmUgaXMgbm90IHN1aXRhYmxlIHRvIGJlIHB1Ymxpc2hlZCBmb3IKK3VzZSB3aXRoIGR1bWIgdHJhbnNwb3J0cyBidXQgb3RoZXJ3aXNlIGlzIE9LIGFzIGxvbmcgYXMKK2BvYmplY3RzL2luZm8vYWx0ZXJuYXRlc2AgcG9pbnRzIGF0IHRoZSBvYmplY3Qgc3RvcmVzIGl0Citib3Jyb3dzIGZyb20uCisrCitUaGlzIGRpcmVjdG9yeSBpcyBpZ25vcmVkIGlmICRHSVRfQ09NTU9OX0RJUiBpcyBzZXQgYW5kCisiJEdJVF9DT01NT05fRElSL29iamVjdHMiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCitvYmplY3RzL1swLTlhLWZdWzAtOWEtZl06OgorCUEgbmV3bHkgY3JlYXRlZCBvYmplY3QgaXMgc3RvcmVkIGluIGl0cyBvd24gZmlsZS4KKwlUaGUgb2JqZWN0cyBhcmUgc3BsYXllZCBvdmVyIDI1NiBzdWJkaXJlY3RvcmllcyB1c2luZworCXRoZSBmaXJzdCB0d28gY2hhcmFjdGVycyBvZiB0aGUgc2hhMSBvYmplY3QgbmFtZSB0bworCWtlZXAgdGhlIG51bWJlciBvZiBkaXJlY3RvcnkgZW50cmllcyBpbiBgb2JqZWN0c2AKKwlpdHNlbGYgdG8gYSBtYW5hZ2VhYmxlIG51bWJlci4gT2JqZWN0cyBmb3VuZAorCWhlcmUgYXJlIG9mdGVuIGNhbGxlZCAndW5wYWNrZWQnIChvciAnbG9vc2UnKSBvYmplY3RzLgorCitvYmplY3RzL3BhY2s6OgorCVBhY2tzIChmaWxlcyB0aGF0IHN0b3JlIG1hbnkgb2JqZWN0cyBpbiBjb21wcmVzc2VkIGZvcm0sCisJYWxvbmcgd2l0aCBpbmRleCBmaWxlcyB0byBhbGxvdyB0aGVtIHRvIGJlIHJhbmRvbWx5CisJYWNjZXNzZWQpIGFyZSBmb3VuZCBpbiB0aGlzIGRpcmVjdG9yeS4KKworb2JqZWN0cy9pbmZvOjoKKwlBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3Qgc3RvcmUgaXMKKwlyZWNvcmRlZCBpbiB0aGlzIGRpcmVjdG9yeS4KKworb2JqZWN0cy9pbmZvL3BhY2tzOjoKKwlUaGlzIGZpbGUgaXMgdG8gaGVscCBkdW1iIHRyYW5zcG9ydHMgZGlzY292ZXIgd2hhdCBwYWNrcworCWFyZSBhdmFpbGFibGUgaW4gdGhpcyBvYmplY3Qgc3RvcmUuICBXaGVuZXZlciBhIHBhY2sgaXMKKwlhZGRlZCBvciByZW1vdmVkLCBgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mb2Agc2hvdWxkIGJlIHJ1bgorCXRvIGtlZXAgdGhpcyBmaWxlIHVwIHRvIGRhdGUgaWYgdGhlIHJlcG9zaXRvcnkgaXMKKwlwdWJsaXNoZWQgZm9yIGR1bWIgdHJhbnNwb3J0cy4gICdnaXQgcmVwYWNrJyBkb2VzIHRoaXMKKwlieSBkZWZhdWx0LgorCitvYmplY3RzL2luZm8vYWx0ZXJuYXRlczo6CisJVGhpcyBmaWxlIHJlY29yZHMgcGF0aHMgdG8gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMgdGhhdAorCXRoaXMgb2JqZWN0IHN0b3JlIGJvcnJvd3Mgb2JqZWN0cyBmcm9tLCBvbmUgcGF0aG5hbWUgcGVyCisJbGluZS4gTm90ZSB0aGF0IG5vdCBvbmx5IG5hdGl2ZSBHaXQgdG9vbHMgdXNlIGl0IGxvY2FsbHksCisJYnV0IHRoZSBIVFRQIGZldGNoZXIgYWxzbyB0cmllcyB0byB1c2UgaXQgcmVtb3RlbHk7IHRoaXMKKwl3aWxsIHVzdWFsbHkgd29yayBpZiB5b3UgaGF2ZSByZWxhdGl2ZSBwYXRocyAocmVsYXRpdmUKKwl0byB0aGUgb2JqZWN0IGRhdGFiYXNlLCBub3QgdG8gdGhlIHJlcG9zaXRvcnkhKSBpbiB5b3VyCisJYWx0ZXJuYXRlcyBmaWxlLCBidXQgaXQgd2lsbCBub3Qgd29yayBpZiB5b3UgdXNlIGFic29sdXRlCisJcGF0aHMgdW5sZXNzIHRoZSBhYnNvbHV0ZSBwYXRoIGluIGZpbGVzeXN0ZW0gYW5kIHdlYiBVUkwKKwlpcyB0aGUgc2FtZS4gU2VlIGFsc28gYG9iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXNgLgorCitvYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzOjoKKwlUaGlzIGZpbGUgcmVjb3JkcyBVUkxzIHRvIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzIHRoYXQKKwl0aGlzIG9iamVjdCBzdG9yZSBib3Jyb3dzIG9iamVjdHMgZnJvbSwgdG8gYmUgdXNlZCB3aGVuCisJdGhlIHJlcG9zaXRvcnkgaXMgZmV0Y2hlZCBvdmVyIEhUVFAuCisKK3JlZnM6OgorCVJlZmVyZW5jZXMgYXJlIHN0b3JlZCBpbiBzdWJkaXJlY3RvcmllcyBvZiB0aGlzCisJZGlyZWN0b3J5LiAgVGhlICdnaXQgcHJ1bmUnIGNvbW1hbmQga25vd3MgdG8gcHJlc2VydmUKKwlvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHJlZnMgZm91bmQgaW4gdGhpcyBkaXJlY3RvcnkgYW5kCisJaXRzIHN1YmRpcmVjdG9yaWVzLgorCVRoaXMgZGlyZWN0b3J5IGlzIGlnbm9yZWQgKGV4Y2VwdCByZWZzL2Jpc2VjdCwKKwlyZWZzL3Jld3JpdHRlbiBhbmQgcmVmcy93b3JrdHJlZSkgaWYgJEdJVF9DT01NT05fRElSIGlzCisJc2V0IGFuZCAiJEdJVF9DT01NT05fRElSL3JlZnMiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCityZWZzL2hlYWRzL2BuYW1lYDo6CisJcmVjb3JkcyB0aXAtb2YtdGhlLXRyZWUgY29tbWl0IG9iamVjdHMgb2YgYnJhbmNoIGBuYW1lYAorCityZWZzL3RhZ3MvYG5hbWVgOjoKKwlyZWNvcmRzIGFueSBvYmplY3QgbmFtZSAobm90IG5lY2Vzc2FyaWx5IGEgY29tbWl0CisJb2JqZWN0LCBvciBhIHRhZyBvYmplY3QgdGhhdCBwb2ludHMgYXQgYSBjb21taXQgb2JqZWN0KS4KKworcmVmcy9yZW1vdGVzL2BuYW1lYDo6CisJcmVjb3JkcyB0aXAtb2YtdGhlLXRyZWUgY29tbWl0IG9iamVjdHMgb2YgYnJhbmNoZXMgY29waWVkCisJZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5LgorCityZWZzL3JlcGxhY2UvYDxvYmotc2hhMT5gOjoKKwlyZWNvcmRzIHRoZSBTSEEtMSBvZiB0aGUgb2JqZWN0IHRoYXQgcmVwbGFjZXMgYDxvYmotc2hhMT5gLgorCVRoaXMgaXMgc2ltaWxhciB0byBpbmZvL2dyYWZ0cyBhbmQgaXMgaW50ZXJuYWxseSB1c2VkIGFuZAorCW1haW50YWluZWQgYnkgbGlua2dpdDpnaXQtcmVwbGFjZVsxXS4gU3VjaCByZWZzIGNhbiBiZSBleGNoYW5nZWQKKwliZXR3ZWVuIHJlcG9zaXRvcmllcyB3aGlsZSBncmFmdHMgYXJlIG5vdC4KKworcGFja2VkLXJlZnM6OgorCXJlY29yZHMgdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgcmVmcy9oZWFkcy8sIHJlZnMvdGFncy8sCisJYW5kIGZyaWVuZHMgcmVjb3JkIGluIGEgbW9yZSBlZmZpY2llbnQgd2F5LiAgU2VlCisJbGlua2dpdDpnaXQtcGFjay1yZWZzWzFdLiBUaGlzIGZpbGUgaXMgaWdub3JlZCBpZiAkR0lUX0NPTU1PTl9ESVIKKwlpcyBzZXQgYW5kICIkR0lUX0NPTU1PTl9ESVIvcGFja2VkLXJlZnMiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCitIRUFEOjoKKwlBIHN5bXJlZiAoc2VlIGdsb3NzYXJ5KSB0byB0aGUgYHJlZnMvaGVhZHMvYCBuYW1lc3BhY2UKKwlkZXNjcmliaW5nIHRoZSBjdXJyZW50bHkgYWN0aXZlIGJyYW5jaC4gIEl0IGRvZXMgbm90IG1lYW4KKwltdWNoIGlmIHRoZSByZXBvc2l0b3J5IGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHdvcmtpbmcgdHJlZQorCShpLmUuIGEgJ2JhcmUnIHJlcG9zaXRvcnkpLCBidXQgYSB2YWxpZCBHaXQgcmVwb3NpdG9yeQorCSptdXN0KiBoYXZlIHRoZSBIRUFEIGZpbGU7IHNvbWUgcG9yY2VsYWlucyBtYXkgdXNlIGl0IHRvCisJZ3Vlc3MgdGhlIGRlc2lnbmF0ZWQgImRlZmF1bHQiIGJyYW5jaCBvZiB0aGUgcmVwb3NpdG9yeQorCSh1c3VhbGx5ICdtYXN0ZXInKS4gIEl0IGlzIGxlZ2FsIGlmIHRoZSBuYW1lZCBicmFuY2gKKwknbmFtZScgZG9lcyBub3QgKHlldCkgZXhpc3QuICBJbiBzb21lIGxlZ2FjeSBzZXR1cHMsIGl0IGlzCisJYSBzeW1ib2xpYyBsaW5rIGluc3RlYWQgb2YgYSBzeW1yZWYgdGhhdCBwb2ludHMgYXQgdGhlIGN1cnJlbnQKKwlicmFuY2guCisrCitIRUFEIGNhbiBhbHNvIHJlY29yZCBhIHNwZWNpZmljIGNvbW1pdCBkaXJlY3RseSwgaW5zdGVhZCBvZgorYmVpbmcgYSBzeW1yZWYgdG8gcG9pbnQgYXQgdGhlIGN1cnJlbnQgYnJhbmNoLiAgU3VjaCBhIHN0YXRlCitpcyBvZnRlbiBjYWxsZWQgJ2RldGFjaGVkIEhFQUQuJyAgU2VlIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdCitmb3IgZGV0YWlscy4KKworY29uZmlnOjoKKwlSZXBvc2l0b3J5IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhpcyBmaWxlIGlzIGlnbm9yZWQKKwlpZiAkR0lUX0NPTU1PTl9ESVIgaXMgc2V0IGFuZCAiJEdJVF9DT01NT05fRElSL2NvbmZpZyIgd2lsbCBiZQorCXVzZWQgaW5zdGVhZC4KKworY29uZmlnLndvcmt0cmVlOjoKKwlXb3JraW5nIGRpcmVjdG9yeSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBtYWluCisJd29ya2luZyBkaXJlY3RvcnkgaW4gbXVsdGlwbGUgd29ya2luZyBkaXJlY3Rvcnkgc2V0dXAgKHNlZQorCWxpbmtnaXQ6Z2l0LXdvcmt0cmVlWzFdKS4KKworYnJhbmNoZXM6OgorCUEgc2xpZ2h0bHkgZGVwcmVjYXRlZCB3YXkgdG8gc3RvcmUgc2hvcnRoYW5kcyB0byBiZSB1c2VkCisJdG8gc3BlY2lmeSBhIFVSTCB0byAnZ2l0IGZldGNoJywgJ2dpdCBwdWxsJyBhbmQgJ2dpdCBwdXNoJy4KKwlBIGZpbGUgY2FuIGJlIHN0b3JlZCBhcyBgYnJhbmNoZXMvPG5hbWU+YCBhbmQgdGhlbgorCSduYW1lJyBjYW4gYmUgZ2l2ZW4gdG8gdGhlc2UgY29tbWFuZHMgaW4gcGxhY2Ugb2YKKwkncmVwb3NpdG9yeScgYXJndW1lbnQuICBTZWUgdGhlIFJFTU9URVMgc2VjdGlvbiBpbgorCWxpbmtnaXQ6Z2l0LWZldGNoWzFdIGZvciBkZXRhaWxzLiAgVGhpcyBtZWNoYW5pc20gaXMgbGVnYWN5CisJYW5kIG5vdCBsaWtlbHkgdG8gYmUgZm91bmQgaW4gbW9kZXJuIHJlcG9zaXRvcmllcy4gVGhpcworCWRpcmVjdG9yeSBpcyBpZ25vcmVkIGlmICRHSVRfQ09NTU9OX0RJUiBpcyBzZXQgYW5kCisJIiRHSVRfQ09NTU9OX0RJUi9icmFuY2hlcyIgd2lsbCBiZSB1c2VkIGluc3RlYWQuCisKKworaG9va3M6OgorCUhvb2tzIGFyZSBjdXN0b21pemF0aW9uIHNjcmlwdHMgdXNlZCBieSB2YXJpb3VzIEdpdAorCWNvbW1hbmRzLiAgQSBoYW5kZnVsIG9mIHNhbXBsZSBob29rcyBhcmUgaW5zdGFsbGVkIHdoZW4KKwknZ2l0IGluaXQnIGlzIHJ1biwgYnV0IGFsbCBvZiB0aGVtIGFyZSBkaXNhYmxlZCBieQorCWRlZmF1bHQuICBUbyBlbmFibGUsIHRoZSBgLnNhbXBsZWAgc3VmZml4IGhhcyB0byBiZQorCXJlbW92ZWQgZnJvbSB0aGUgZmlsZW5hbWUgYnkgcmVuYW1pbmcuCisJUmVhZCBsaW5rZ2l0OmdpdGhvb2tzWzVdIGZvciBtb3JlIGRldGFpbHMgYWJvdXQKKwllYWNoIGhvb2suIFRoaXMgZGlyZWN0b3J5IGlzIGlnbm9yZWQgaWYgJEdJVF9DT01NT05fRElSIGlzIHNldAorCWFuZCAiJEdJVF9DT01NT05fRElSL2hvb2tzIiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKworY29tbW9uOjoKKwlXaGVuIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgYXJlIHVzZWQsIG1vc3Qgb2YgZmlsZXMgaW4KKwkkR0lUX0RJUiBhcmUgcGVyLXdvcmt0cmVlIHdpdGggYSBmZXcga25vd24gZXhjZXB0aW9ucy4gQWxsCisJZmlsZXMgdW5kZXIgJ2NvbW1vbicgaG93ZXZlciB3aWxsIGJlIHNoYXJlZCBiZXR3ZWVuIGFsbAorCXdvcmtpbmcgdHJlZXMuCisKK2luZGV4OjoKKwlUaGUgY3VycmVudCBpbmRleCBmaWxlIGZvciB0aGUgcmVwb3NpdG9yeS4gIEl0IGlzCisJdXN1YWxseSBub3QgZm91bmQgaW4gYSBiYXJlIHJlcG9zaXRvcnkuCisKK3NoYXJlZGluZGV4LjxTSEEtMT46OgorCVRoZSBzaGFyZWQgaW5kZXggcGFydCwgdG8gYmUgcmVmZXJlbmNlZCBieSAkR0lUX0RJUi9pbmRleCBhbmQKKwlvdGhlciB0ZW1wb3JhcnkgaW5kZXggZmlsZXMuIE9ubHkgdmFsaWQgaW4gc3BsaXQgaW5kZXggbW9kZS4KKworaW5mbzo6CisJQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVwb3NpdG9yeSBpcyByZWNvcmRlZAorCWluIHRoaXMgZGlyZWN0b3J5LiBUaGlzIGRpcmVjdG9yeSBpcyBpZ25vcmVkIGlmICRHSVRfQ09NTU9OX0RJUgorCWlzIHNldCBhbmQgIiRHSVRfQ09NTU9OX0RJUi9pbmZvIiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKworaW5mby9yZWZzOjoKKwlUaGlzIGZpbGUgaGVscHMgZHVtYiB0cmFuc3BvcnRzIGRpc2NvdmVyIHdoYXQgcmVmcyBhcmUKKwlhdmFpbGFibGUgaW4gdGhpcyByZXBvc2l0b3J5LiAgSWYgdGhlIHJlcG9zaXRvcnkgaXMKKwlwdWJsaXNoZWQgZm9yIGR1bWIgdHJhbnNwb3J0cywgdGhpcyBmaWxlIHNob3VsZCBiZQorCXJlZ2VuZXJhdGVkIGJ5ICdnaXQgdXBkYXRlLXNlcnZlci1pbmZvJyBldmVyeSB0aW1lIGEgdGFnCisJb3IgYnJhbmNoIGlzIGNyZWF0ZWQgb3IgbW9kaWZpZWQuICBUaGlzIGlzIG5vcm1hbGx5IGRvbmUKKwlmcm9tIHRoZSBgaG9va3MvdXBkYXRlYCBob29rLCB3aGljaCBpcyBydW4gYnkgdGhlCisJJ2dpdC1yZWNlaXZlLXBhY2snIGNvbW1hbmQgd2hlbiB5b3UgJ2dpdCBwdXNoJyBpbnRvIHRoZQorCXJlcG9zaXRvcnkuCisKK2luZm8vZ3JhZnRzOjoKKwlUaGlzIGZpbGUgcmVjb3JkcyBmYWtlIGNvbW1pdCBhbmNlc3RyeSBpbmZvcm1hdGlvbiwgdG8KKwlwcmV0ZW5kIHRoZSBzZXQgb2YgcGFyZW50cyBhIGNvbW1pdCBoYXMgaXMgZGlmZmVyZW50CisJZnJvbSBob3cgdGhlIGNvbW1pdCB3YXMgYWN0dWFsbHkgY3JlYXRlZC4gIE9uZSByZWNvcmQKKwlwZXIgbGluZSBkZXNjcmliZXMgYSBjb21taXQgYW5kIGl0cyBmYWtlIHBhcmVudHMgYnkKKwlsaXN0aW5nIHRoZWlyIDQwLWJ5dGUgaGV4YWRlY2ltYWwgb2JqZWN0IG5hbWVzIHNlcGFyYXRlZAorCWJ5IGEgc3BhY2UgYW5kIHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5lLgorKworTm90ZSB0aGF0IHRoZSBncmFmdHMgbWVjaGFuaXNtIGlzIG91dGRhdGVkIGFuZCBjYW4gbGVhZCB0byBwcm9ibGVtcwordHJhbnNmZXJyaW5nIG9iamVjdHMgYmV0d2VlbiByZXBvc2l0b3JpZXM7IHNlZSBsaW5rZ2l0OmdpdC1yZXBsYWNlWzFdCitmb3IgYSBtb3JlIGZsZXhpYmxlIGFuZCByb2J1c3Qgc3lzdGVtIHRvIGRvIHRoZSBzYW1lIHRoaW5nLgorCitpbmZvL2V4Y2x1ZGU6OgorCVRoaXMgZmlsZSwgYnkgY29udmVudGlvbiBhbW9uZyBQb3JjZWxhaW5zLCBzdG9yZXMgdGhlCisJZXhjbHVkZSBwYXR0ZXJuIGxpc3QuIGAuZ2l0aWdub3JlYCBpcyB0aGUgcGVyLWRpcmVjdG9yeQorCWlnbm9yZSBmaWxlLiAgJ2dpdCBzdGF0dXMnLCAnZ2l0IGFkZCcsICdnaXQgcm0nIGFuZAorCSdnaXQgY2xlYW4nIGxvb2sgYXQgaXQgYnV0IHRoZSBjb3JlIEdpdCBjb21tYW5kcyBkbyBub3QgbG9vaworCWF0IGl0LiAgU2VlIGFsc286IGxpbmtnaXQ6Z2l0aWdub3JlWzVdLgorCitpbmZvL2F0dHJpYnV0ZXM6OgorCURlZmluZXMgd2hpY2ggYXR0cmlidXRlcyB0byBhc3NpZ24gdG8gYSBwYXRoLCBzaW1pbGFyIHRvIHBlci1kaXJlY3RvcnkKKwlgLmdpdGF0dHJpYnV0ZXNgIGZpbGVzLiAgIFNlZSBhbHNvOiBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0uCisKK2luZm8vc3BhcnNlLWNoZWNrb3V0OjoKKwlUaGlzIGZpbGUgc3RvcmVzIHNwYXJzZSBjaGVja291dCBwYXR0ZXJucy4KKwlTZWUgYWxzbzogbGlua2dpdDpnaXQtcmVhZC10cmVlWzFdLgorCityZW1vdGVzOjoKKwlTdG9yZXMgc2hvcnRoYW5kcyBmb3IgVVJMIGFuZCBkZWZhdWx0IHJlZm5hbWVzIGZvciB1c2UKKwl3aGVuIGludGVyYWN0aW5nIHdpdGggcmVtb3RlIHJlcG9zaXRvcmllcyB2aWEgJ2dpdCBmZXRjaCcsCisJJ2dpdCBwdWxsJyBhbmQgJ2dpdCBwdXNoJyBjb21tYW5kcy4gIFNlZSB0aGUgUkVNT1RFUyBzZWN0aW9uCisJaW4gbGlua2dpdDpnaXQtZmV0Y2hbMV0gZm9yIGRldGFpbHMuICBUaGlzIG1lY2hhbmlzbSBpcyBsZWdhY3kKKwlhbmQgbm90IGxpa2VseSB0byBiZSBmb3VuZCBpbiBtb2Rlcm4gcmVwb3NpdG9yaWVzLiBUaGlzCisJZGlyZWN0b3J5IGlzIGlnbm9yZWQgaWYgJEdJVF9DT01NT05fRElSIGlzIHNldCBhbmQKKwkiJEdJVF9DT01NT05fRElSL3JlbW90ZXMiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCitsb2dzOjoKKwlSZWNvcmRzIG9mIGNoYW5nZXMgbWFkZSB0byByZWZzIGFyZSBzdG9yZWQgaW4gdGhpcyBkaXJlY3RvcnkuCisJU2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1yZWZbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uIFRoaXMKKwlkaXJlY3RvcnkgaXMgaWdub3JlZCAoZXhjZXB0IGxvZ3MvSEVBRCkgaWYgJEdJVF9DT01NT05fRElSIGlzCisJc2V0IGFuZCAiJEdJVF9DT01NT05fRElSL2xvZ3MiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCitsb2dzL3JlZnMvaGVhZHMvYG5hbWVgOjoKKwlSZWNvcmRzIGFsbCBjaGFuZ2VzIG1hZGUgdG8gdGhlIGJyYW5jaCB0aXAgbmFtZWQgYG5hbWVgLgorCitsb2dzL3JlZnMvdGFncy9gbmFtZWA6OgorCVJlY29yZHMgYWxsIGNoYW5nZXMgbWFkZSB0byB0aGUgdGFnIG5hbWVkIGBuYW1lYC4KKworc2hhbGxvdzo6CisJVGhpcyBpcyBzaW1pbGFyIHRvIGBpbmZvL2dyYWZ0c2AgYnV0IGlzIGludGVybmFsbHkgdXNlZAorCWFuZCBtYWludGFpbmVkIGJ5IHNoYWxsb3cgY2xvbmUgbWVjaGFuaXNtLiAgU2VlIGAtLWRlcHRoYAorCW9wdGlvbiB0byBsaW5rZ2l0OmdpdC1jbG9uZVsxXSBhbmQgbGlua2dpdDpnaXQtZmV0Y2hbMV0uIFRoaXMKKwlmaWxlIGlzIGlnbm9yZWQgaWYgJEdJVF9DT01NT05fRElSIGlzIHNldCBhbmQKKwkiJEdJVF9DT01NT05fRElSL3NoYWxsb3ciIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCitjb21tb25kaXI6OgorCUlmIHRoaXMgZmlsZSBleGlzdHMsICRHSVRfQ09NTU9OX0RJUiAoc2VlIGxpbmtnaXQ6Z2l0WzFdKSB3aWxsCisJYmUgc2V0IHRvIHRoZSBwYXRoIHNwZWNpZmllZCBpbiB0aGlzIGZpbGUgaWYgaXQgaXMgbm90CisJZXhwbGljaXRseSBzZXQuIElmIHRoZSBzcGVjaWZpZWQgcGF0aCBpcyByZWxhdGl2ZSwgaXQgaXMKKwlyZWxhdGl2ZSB0byAkR0lUX0RJUi4gVGhlIHJlcG9zaXRvcnkgd2l0aCBjb21tb25kaXIgaXMKKwlpbmNvbXBsZXRlIHdpdGhvdXQgdGhlIHJlcG9zaXRvcnkgcG9pbnRlZCBieSAiY29tbW9uZGlyIi4KKworbW9kdWxlczo6CisJQ29udGFpbnMgdGhlIGdpdC1yZXBvc2l0b3JpZXMgb2YgdGhlIHN1Ym1vZHVsZXMuCisKK3dvcmt0cmVlczo6CisJQ29udGFpbnMgYWRtaW5pc3RyYXRpdmUgZGF0YSBmb3IgbGlua2VkCisJd29ya2luZyB0cmVlcy4gRWFjaCBzdWJkaXJlY3RvcnkgY29udGFpbnMgdGhlIHdvcmtpbmcgdHJlZS1yZWxhdGVkCisJcGFydCBvZiBhIGxpbmtlZCB3b3JraW5nIHRyZWUuIFRoaXMgZGlyZWN0b3J5IGlzIGlnbm9yZWQgaWYKKwkkR0lUX0NPTU1PTl9ESVIgaXMgc2V0LCBpbiB3aGljaCBjYXNlCisJIiRHSVRfQ09NTU9OX0RJUi93b3JrdHJlZXMiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCit3b3JrdHJlZXMvPGlkPi9naXRkaXI6OgorCUEgdGV4dCBmaWxlIGNvbnRhaW5pbmcgdGhlIGFic29sdXRlIHBhdGggYmFjayB0byB0aGUgLmdpdCBmaWxlCisJdGhhdCBwb2ludHMgdG8gaGVyZS4gVGhpcyBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBsaW5rZWQKKwlyZXBvc2l0b3J5IGhhcyBiZWVuIG1hbnVhbGx5IHJlbW92ZWQgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8KKwlrZWVwIHRoaXMgZGlyZWN0b3J5IGFueSBtb3JlLiBUaGUgbXRpbWUgb2YgdGhpcyBmaWxlIHNob3VsZCBiZQorCXVwZGF0ZWQgZXZlcnkgdGltZSB0aGUgbGlua2VkIHJlcG9zaXRvcnkgaXMgYWNjZXNzZWQuCisKK3dvcmt0cmVlcy88aWQ+L2xvY2tlZDo6CisJSWYgdGhpcyBmaWxlIGV4aXN0cywgdGhlIGxpbmtlZCB3b3JraW5nIHRyZWUgbWF5IGJlIG9uIGEKKwlwb3J0YWJsZSBkZXZpY2UgYW5kIG5vdCBhdmFpbGFibGUuIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGZpbGUKKwlwcmV2ZW50cyBgd29ya3RyZWVzLzxpZD5gIGZyb20gYmVpbmcgcHJ1bmVkIGVpdGhlciBhdXRvbWF0aWNhbGx5CisJb3IgbWFudWFsbHkgYnkgYGdpdCB3b3JrdHJlZSBwcnVuZWAuIFRoZSBmaWxlIG1heSBjb250YWluIGEgc3RyaW5nCisJZXhwbGFpbmluZyB3aHkgdGhlIHJlcG9zaXRvcnkgaXMgbG9ja2VkLgorCit3b3JrdHJlZXMvPGlkPi9jb25maWcud29ya3RyZWU6OgorCVdvcmtpbmcgZGlyZWN0b3J5IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworaW5jbHVkZTo6dGVjaG5pY2FsL3JlcG9zaXRvcnktdmVyc2lvbi50eHRbXQorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWluaXRbMV0sCitsaW5rZ2l0OmdpdC1jbG9uZVsxXSwKK2xpbmtnaXQ6Z2l0LWZldGNoWzFdLAorbGlua2dpdDpnaXQtcGFjay1yZWZzWzFdLAorbGlua2dpdDpnaXQtZ2NbMV0sCitsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10sCitsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0cmV2aXNpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0cmV2aXNpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDA3YjdkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRyZXZpc2lvbnMudHh0CkBAIC0wLDAgKzEsMzYgQEAKK2dpdHJldmlzaW9ucyg3KQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHJldmlzaW9ucyAtIFNwZWNpZnlpbmcgcmV2aXNpb25zIGFuZCByYW5nZXMgZm9yIEdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KK2dpdHJldmlzaW9ucworCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitNYW55IEdpdCBjb21tYW5kcyB0YWtlIHJldmlzaW9uIHBhcmFtZXRlcnMgYXMgYXJndW1lbnRzLiBEZXBlbmRpbmcgb24KK3RoZSBjb21tYW5kLCB0aGV5IGRlbm90ZSBhIHNwZWNpZmljIGNvbW1pdCBvciwgZm9yIGNvbW1hbmRzIHdoaWNoCit3YWxrIHRoZSByZXZpc2lvbiBncmFwaCAoc3VjaCBhcyBsaW5rZ2l0OmdpdC1sb2dbMV0pLCBhbGwgY29tbWl0cyB3aGljaCBhcmUKK3JlYWNoYWJsZSBmcm9tIHRoYXQgY29tbWl0LiBGb3IgY29tbWFuZHMgdGhhdCB3YWxrIHRoZSByZXZpc2lvbiBncmFwaCBvbmUgY2FuCithbHNvIHNwZWNpZnkgYSByYW5nZSBvZiByZXZpc2lvbnMgZXhwbGljaXRseS4KKworSW4gYWRkaXRpb24sIHNvbWUgR2l0IGNvbW1hbmRzIChzdWNoIGFzIGxpbmtnaXQ6Z2l0LXNob3dbMV0gYW5kCitsaW5rZ2l0OmdpdC1wdXNoWzFdKSBjYW4gYWxzbyB0YWtlIHJldmlzaW9uIHBhcmFtZXRlcnMgd2hpY2ggZGVub3RlCitvdGhlciBvYmplY3RzIHRoYW4gY29tbWl0cywgZS5nLiBibG9icyAoImZpbGVzIikgb3IgdHJlZXMKKygiZGlyZWN0b3JpZXMgb2YgZmlsZXMiKS4KKworaW5jbHVkZTo6cmV2aXNpb25zLnR4dFtdCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1yZXYtcGFyc2VbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHN1Ym1vZHVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRzdWJtb2R1bGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWY0ZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRzdWJtb2R1bGVzLnR4dApAQCAtMCwwICsxLDI4NCBAQAorZ2l0c3VibW9kdWxlcyg3KQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRzdWJtb2R1bGVzIC0gTW91bnRpbmcgb25lIHJlcG9zaXRvcnkgaW5zaWRlIGFub3RoZXIKKworU1lOT1BTSVMKKy0tLS0tLS0tCisgLmdpdG1vZHVsZXMsICRHSVRfRElSL2NvbmZpZworLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgc3VibW9kdWxlCitnaXQgPGNvbW1hbmQ+IC0tcmVjdXJzZS1zdWJtb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0Egc3VibW9kdWxlIGlzIGEgcmVwb3NpdG9yeSBlbWJlZGRlZCBpbnNpZGUgYW5vdGhlciByZXBvc2l0b3J5LgorVGhlIHN1Ym1vZHVsZSBoYXMgaXRzIG93biBoaXN0b3J5OyB0aGUgcmVwb3NpdG9yeSBpdCBpcyBlbWJlZGRlZAoraW4gaXMgY2FsbGVkIGEgc3VwZXJwcm9qZWN0LgorCitPbiB0aGUgZmlsZXN5c3RlbSwgYSBzdWJtb2R1bGUgdXN1YWxseSAoYnV0IG5vdCBhbHdheXMgLSBzZWUgRk9STVMgYmVsb3cpCitjb25zaXN0cyBvZiAoaSkgYSBHaXQgZGlyZWN0b3J5IGxvY2F0ZWQgdW5kZXIgdGhlIGAkR0lUX0RJUi9tb2R1bGVzL2AKK2RpcmVjdG9yeSBvZiBpdHMgc3VwZXJwcm9qZWN0LCAoaWkpIGEgd29ya2luZyBkaXJlY3RvcnkgaW5zaWRlIHRoZQorc3VwZXJwcm9qZWN0J3Mgd29ya2luZyBkaXJlY3RvcnksIGFuZCBhIGAuZ2l0YCBmaWxlIGF0IHRoZSByb290IG9mCit0aGUgc3VibW9kdWxlJ3Mgd29ya2luZyBkaXJlY3RvcnkgcG9pbnRpbmcgdG8gKGkpLgorCitBc3N1bWluZyB0aGUgc3VibW9kdWxlIGhhcyBhIEdpdCBkaXJlY3RvcnkgYXQgYCRHSVRfRElSL21vZHVsZXMvZm9vL2AKK2FuZCBhIHdvcmtpbmcgZGlyZWN0b3J5IGF0IGBwYXRoL3RvL2Jhci9gLCB0aGUgc3VwZXJwcm9qZWN0IHRyYWNrcyB0aGUKK3N1Ym1vZHVsZSB2aWEgYSBgZ2l0bGlua2AgZW50cnkgaW4gdGhlIHRyZWUgYXQgYHBhdGgvdG8vYmFyYCBhbmQgYW4gZW50cnkKK2luIGl0cyBgLmdpdG1vZHVsZXNgIGZpbGUgKHNlZSBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0pIG9mIHRoZSBmb3JtCitgc3VibW9kdWxlLmZvby5wYXRoID0gcGF0aC90by9iYXJgLgorCitUaGUgYGdpdGxpbmtgIGVudHJ5IGNvbnRhaW5zIHRoZSBvYmplY3QgbmFtZSBvZiB0aGUgY29tbWl0IHRoYXQgdGhlCitzdXBlcnByb2plY3QgZXhwZWN0cyB0aGUgc3VibW9kdWxlJ3Mgd29ya2luZyBkaXJlY3RvcnkgdG8gYmUgYXQuCisKK1RoZSBzZWN0aW9uIGBzdWJtb2R1bGUuZm9vLipgIGluIHRoZSBgLmdpdG1vZHVsZXNgIGZpbGUgZ2l2ZXMgYWRkaXRpb25hbAoraGludHMgdG8gR2l0J3MgcG9yY2VsYWluIGxheWVyLiBGb3IgZXhhbXBsZSwgdGhlIGBzdWJtb2R1bGUuZm9vLnVybGAKK3NldHRpbmcgc3BlY2lmaWVzIHdoZXJlIHRvIG9idGFpbiB0aGUgc3VibW9kdWxlLgorCitTdWJtb2R1bGVzIGNhbiBiZSB1c2VkIGZvciBhdCBsZWFzdCB0d28gZGlmZmVyZW50IHVzZSBjYXNlczoKKworMS4gVXNpbmcgYW5vdGhlciBwcm9qZWN0IHdoaWxlIG1haW50YWluaW5nIGluZGVwZW5kZW50IGhpc3RvcnkuCisgIFN1Ym1vZHVsZXMgYWxsb3cgeW91IHRvIGNvbnRhaW4gdGhlIHdvcmtpbmcgdHJlZSBvZiBhbm90aGVyIHByb2plY3QKKyAgd2l0aGluIHlvdXIgb3duIHdvcmtpbmcgdHJlZSB3aGlsZSBrZWVwaW5nIHRoZSBoaXN0b3J5IG9mIGJvdGgKKyAgcHJvamVjdHMgc2VwYXJhdGUuIEFsc28sIHNpbmNlIHN1Ym1vZHVsZXMgYXJlIGZpeGVkIHRvIGFuIGFyYml0cmFyeQorICB2ZXJzaW9uLCB0aGUgb3RoZXIgcHJvamVjdCBjYW4gYmUgaW5kZXBlbmRlbnRseSBkZXZlbG9wZWQgd2l0aG91dAorICBhZmZlY3RpbmcgdGhlIHN1cGVycHJvamVjdCwgYWxsb3dpbmcgdGhlIHN1cGVycHJvamVjdCBwcm9qZWN0IHRvCisgIGZpeCBpdHNlbGYgdG8gbmV3IHZlcnNpb25zIG9ubHkgd2hlbiBkZXNpcmVkLgorCisyLiBTcGxpdHRpbmcgYSAobG9naWNhbGx5IHNpbmdsZSkgcHJvamVjdCBpbnRvIG11bHRpcGxlCisgICByZXBvc2l0b3JpZXMgYW5kIHR5aW5nIHRoZW0gYmFjayB0b2dldGhlci4gVGhpcyBjYW4gYmUgdXNlZCB0bworICAgb3ZlcmNvbWUgY3VycmVudCBsaW1pdGF0aW9ucyBvZiBHaXQncyBpbXBsZW1lbnRhdGlvbiB0byBoYXZlCisgICBmaW5lciBncmFpbmVkIGFjY2VzczoKKworICAgICogU2l6ZSBvZiB0aGUgR2l0IHJlcG9zaXRvcnk6CisgICAgICBJbiBpdHMgY3VycmVudCBmb3JtIEdpdCBzY2FsZXMgdXAgcG9vcmx5IGZvciBsYXJnZSByZXBvc2l0b3JpZXMgY29udGFpbmluZworICAgICAgY29udGVudCB0aGF0IGlzIG5vdCBjb21wcmVzc2VkIGJ5IGRlbHRhIGNvbXB1dGF0aW9uIGJldHdlZW4gdHJlZXMuCisgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiB1c2Ugc3VibW9kdWxlcyB0byBob2xkIGxhcmdlIGJpbmFyeSBhc3NldHMKKyAgICAgIGFuZCB0aGVzZSByZXBvc2l0b3JpZXMgY2FuIGJlIHNoYWxsb3dseSBjbG9uZWQgc3VjaCB0aGF0IHlvdSBkbyBub3QKKyAgICAgIGhhdmUgYSBsYXJnZSBoaXN0b3J5IGxvY2FsbHkuCisgICAgKiBUcmFuc2ZlciBzaXplOgorICAgICAgSW4gaXRzIGN1cnJlbnQgZm9ybSBHaXQgcmVxdWlyZXMgdGhlIHdob2xlIHdvcmtpbmcgdHJlZSBwcmVzZW50LiBJdAorICAgICAgZG9lcyBub3QgYWxsb3cgcGFydGlhbCB0cmVlcyB0byBiZSB0cmFuc2ZlcnJlZCBpbiBmZXRjaCBvciBjbG9uZS4KKyAgICAgIElmIHRoZSBwcm9qZWN0IHlvdSB3b3JrIG9uIGNvbnNpc3RzIG9mIG11bHRpcGxlIHJlcG9zaXRvcmllcyB0aWVkCisgICAgICB0b2dldGhlciBhcyBzdWJtb2R1bGVzIGluIGEgc3VwZXJwcm9qZWN0LCB5b3UgY2FuIGF2b2lkIGZldGNoaW5nIHRoZQorICAgICAgd29ya2luZyB0cmVlcyBvZiB0aGUgcmVwb3NpdG9yaWVzIHlvdSBhcmUgbm90IGludGVyZXN0ZWQgaW4uCisgICAgKiBBY2Nlc3MgY29udHJvbDoKKyAgICAgIEJ5IHJlc3RyaWN0aW5nIHVzZXIgYWNjZXNzIHRvIHN1Ym1vZHVsZXMsIHRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50CisgICAgICByZWFkL3dyaXRlIHBvbGljaWVzIGZvciBkaWZmZXJlbnQgdXNlcnMuCisKK1RoZSBjb25maWd1cmF0aW9uIG9mIHN1Ym1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3VibW9kdWxlIG9wZXJhdGlvbnMgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBtZWNoYW5pc21zCisoZnJvbSBoaWdoZXN0IHRvIGxvd2VzdCBwcmVjZWRlbmNlKToKKworICogVGhlIGNvbW1hbmQgbGluZSBmb3IgdGhvc2UgY29tbWFuZHMgdGhhdCBzdXBwb3J0IHRha2luZyBzdWJtb2R1bGVzCisgICBhcyBwYXJ0IG9mIHRoZWlyIHBhdGhzcGVjcy4gTW9zdCBjb21tYW5kcyBoYXZlIGEgYm9vbGVhbiBmbGFnCisgICBgLS1yZWN1cnNlLXN1Ym1vZHVsZXNgIHdoaWNoIHNwZWNpZnkgd2hldGhlciB0byByZWN1cnNlIGludG8gc3VibW9kdWxlcy4KKyAgIEV4YW1wbGVzIGFyZSBgZ3JlcGAgYW5kIGBjaGVja291dGAuCisgICBTb21lIGNvbW1hbmRzIHRha2UgZW51bXMsIHN1Y2ggYXMgYGZldGNoYCBhbmQgYHB1c2hgLCB3aGVyZSB5b3UgY2FuCisgICBzcGVjaWZ5IGhvdyBzdWJtb2R1bGVzIGFyZSBhZmZlY3RlZC4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gaW5zaWRlIHRoZSBzdWJtb2R1bGUuIFRoaXMgaW5jbHVkZXMgYCRHSVRfRElSL2NvbmZpZ2AKKyAgIGluIHRoZSBzdWJtb2R1bGUsIGJ1dCBhbHNvIHNldHRpbmdzIGluIHRoZSB0cmVlIHN1Y2ggYXMgYSBgLmdpdGF0dHJpYnV0ZXNgCisgICBvciBgLmdpdGlnbm9yZWAgZmlsZXMgdGhhdCBzcGVjaWZ5IGJlaGF2aW9yIG9mIGNvbW1hbmRzIGluc2lkZSB0aGUKKyAgIHN1Ym1vZHVsZS4KKysKK0ZvciBleGFtcGxlIGFuIGVmZmVjdCBmcm9tIHRoZSBzdWJtb2R1bGUncyBgLmdpdGlnbm9yZWAgZmlsZQord291bGQgYmUgb2JzZXJ2ZWQgd2hlbiB5b3UgcnVuIGBnaXQgc3RhdHVzIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZWAgaW4KK3RoZSBzdXBlcnByb2plY3QuIFRoaXMgY29sbGVjdHMgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3VibW9kdWxlJ3Mgd29ya2luZworZGlyZWN0b3J5IGJ5IHJ1bm5pbmcgYHN0YXR1c2AgaW4gdGhlIHN1Ym1vZHVsZSB3aGlsZSBwYXlpbmcgYXR0ZW50aW9uCit0byB0aGUgYC5naXRpZ25vcmVgIGZpbGUgb2YgdGhlIHN1Ym1vZHVsZS4KKysKK1RoZSBzdWJtb2R1bGUncyBgJEdJVF9ESVIvY29uZmlnYCBmaWxlIHdvdWxkIGNvbWUgaW50byBwbGF5IHdoZW4gcnVubmluZworYGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPWNoZWNrYCBpbiB0aGUgc3VwZXJwcm9qZWN0LCBhcyB0aGlzIHdvdWxkCitjaGVjayBpZiB0aGUgc3VibW9kdWxlIGhhcyBhbnkgY2hhbmdlcyBub3QgcHVibGlzaGVkIHRvIGFueSByZW1vdGUuIFRoZQorcmVtb3RlcyBhcmUgY29uZmlndXJlZCBpbiB0aGUgc3VibW9kdWxlIGFzIHVzdWFsIGluIHRoZSBgJEdJVF9ESVIvY29uZmlnYAorZmlsZS4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBgJEdJVF9ESVIvY29uZmlnYCBpbiB0aGUgc3VwZXJwcm9qZWN0LgorICAgR2l0IG9ubHkgcmVjdXJzZXMgaW50byBhY3RpdmUgc3VibW9kdWxlcyAoc2VlICJBQ1RJVkUgU1VCTU9EVUxFUyIKKyAgIHNlY3Rpb24gYmVsb3cpLgorKworSWYgdGhlIHN1Ym1vZHVsZSBpcyBub3QgeWV0IGluaXRpYWxpemVkLCB0aGVuIHRoZSBjb25maWd1cmF0aW9uCitpbnNpZGUgdGhlIHN1Ym1vZHVsZSBkb2VzIG5vdCBleGlzdCB5ZXQsIHNvIHdoZXJlIHRvCitvYnRhaW4gdGhlIHN1Ym1vZHVsZSBmcm9tIGlzIGNvbmZpZ3VyZWQgaGVyZSBmb3IgZXhhbXBsZS4KKworICogVGhlIGAuZ2l0bW9kdWxlc2AgZmlsZSBpbnNpZGUgdGhlIHN1cGVycHJvamVjdC4gQSBwcm9qZWN0IHVzdWFsbHkKKyAgIHVzZXMgdGhpcyBmaWxlIHRvIHN1Z2dlc3QgZGVmYXVsdHMgZm9yIHRoZSB1cHN0cmVhbSBjb2xsZWN0aW9uCisgICBvZiByZXBvc2l0b3JpZXMgZm9yIHRoZSBtYXBwaW5nIHRoYXQgaXMgcmVxdWlyZWQgYmV0d2VlbiBhCisgICBzdWJtb2R1bGUncyBuYW1lIGFuZCBpdHMgcGF0aC4KKysKK1RoaXMgZmlsZSBtYWlubHkgc2VydmVzIGFzIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIG5hbWUgYW5kIHBhdGggb2Ygc3VibW9kdWxlcworaW4gdGhlIHN1cGVycHJvamVjdCwgc3VjaCB0aGF0IHRoZSBzdWJtb2R1bGUncyBHaXQgZGlyZWN0b3J5IGNhbiBiZQorbG9jYXRlZC4KKysKK0lmIHRoZSBzdWJtb2R1bGUgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQsIHRoaXMgaXMgdGhlIG9ubHkgcGxhY2UKK3doZXJlIHN1Ym1vZHVsZSBjb25maWd1cmF0aW9uIGlzIGZvdW5kLiBJdCBzZXJ2ZXMgYXMgdGhlIGxhc3QgZmFsbGJhY2sKK3RvIHNwZWNpZnkgd2hlcmUgdG8gb2J0YWluIHRoZSBzdWJtb2R1bGUgZnJvbS4KKworRk9STVMKKy0tLS0tCisKK1N1Ym1vZHVsZXMgY2FuIHRha2UgdGhlIGZvbGxvd2luZyBmb3JtczoKKworICogVGhlIGJhc2ljIGZvcm0gZGVzY3JpYmVkIGluIERFU0NSSVBUSU9OIHdpdGggYSBHaXQgZGlyZWN0b3J5LAorYSB3b3JraW5nIGRpcmVjdG9yeSwgYSBgZ2l0bGlua2AsIGFuZCBhIGAuZ2l0bW9kdWxlc2AgZW50cnkuCisKKyAqICJPbGQtZm9ybSIgc3VibW9kdWxlOiBBIHdvcmtpbmcgZGlyZWN0b3J5IHdpdGggYW4gZW1iZWRkZWQKK2AuZ2l0YCBkaXJlY3RvcnksIGFuZCB0aGUgdHJhY2tpbmcgYGdpdGxpbmtgIGFuZCBgLmdpdG1vZHVsZXNgIGVudHJ5IGluCit0aGUgc3VwZXJwcm9qZWN0LiBUaGlzIGlzIHR5cGljYWxseSBmb3VuZCBpbiByZXBvc2l0b3JpZXMgZ2VuZXJhdGVkCit1c2luZyBvbGRlciB2ZXJzaW9ucyBvZiBHaXQuCisrCitJdCBpcyBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgdGhlc2Ugb2xkIGZvcm0gcmVwb3NpdG9yaWVzIG1hbnVhbGx5LgorKworV2hlbiBkZWluaXRpYWxpemVkIG9yIGRlbGV0ZWQgKHNlZSBiZWxvdyksIHRoZSBzdWJtb2R1bGUncyBHaXQKK2RpcmVjdG9yeSBpcyBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIGAkR0lUX0RJUi9tb2R1bGVzLzxuYW1lPi9gCitvZiB0aGUgc3VwZXJwcm9qZWN0LgorCisgKiBEZWluaXRpYWxpemVkIHN1Ym1vZHVsZTogQSBgZ2l0bGlua2AsIGFuZCBhIGAuZ2l0bW9kdWxlc2AgZW50cnksCitidXQgbm8gc3VibW9kdWxlIHdvcmtpbmcgZGlyZWN0b3J5LiBUaGUgc3VibW9kdWxlJ3MgR2l0IGRpcmVjdG9yeQorbWF5IGJlIHRoZXJlIGFzIGFmdGVyIGRlaW5pdGlhbGl6aW5nIHRoZSBHaXQgZGlyZWN0b3J5IGlzIGtlcHQgYXJvdW5kLgorVGhlIGRpcmVjdG9yeSB3aGljaCBpcyBzdXBwb3NlZCB0byBiZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgaXMgZW1wdHkgaW5zdGVhZC4KKysKK0Egc3VibW9kdWxlIGNhbiBiZSBkZWluaXRpYWxpemVkIGJ5IHJ1bm5pbmcgYGdpdCBzdWJtb2R1bGUgZGVpbml0YC4KK0Jlc2lkZXMgZW1wdHlpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB0aGlzIGNvbW1hbmQgb25seSBtb2RpZmllcwordGhlIHN1cGVycHJvamVjdCdzIGAkR0lUX0RJUi9jb25maWdgIGZpbGUsIHNvIHRoZSBzdXBlcnByb2plY3QncyBoaXN0b3J5CitpcyBub3QgYWZmZWN0ZWQuIFRoaXMgY2FuIGJlIHVuZG9uZSB1c2luZyBgZ2l0IHN1Ym1vZHVsZSBpbml0YC4KKworICogRGVsZXRlZCBzdWJtb2R1bGU6IEEgc3VibW9kdWxlIGNhbiBiZSBkZWxldGVkIGJ5IHJ1bm5pbmcKK2BnaXQgcm0gPHN1Ym1vZHVsZSBwYXRoPiAmJiBnaXQgY29tbWl0YC4gVGhpcyBjYW4gYmUgdW5kb25lCit1c2luZyBgZ2l0IHJldmVydGAuCisrCitUaGUgZGVsZXRpb24gcmVtb3ZlcyB0aGUgc3VwZXJwcm9qZWN0J3MgdHJhY2tpbmcgZGF0YSwgd2hpY2ggYXJlCitib3RoIHRoZSBgZ2l0bGlua2AgZW50cnkgYW5kIHRoZSBzZWN0aW9uIGluIHRoZSBgLmdpdG1vZHVsZXNgIGZpbGUuCitUaGUgc3VibW9kdWxlJ3Mgd29ya2luZyBkaXJlY3RvcnkgaXMgcmVtb3ZlZCBmcm9tIHRoZSBmaWxlCitzeXN0ZW0sIGJ1dCB0aGUgR2l0IGRpcmVjdG9yeSBpcyBrZXB0IGFyb3VuZCBhcyBpdCB0byBtYWtlIGl0Citwb3NzaWJsZSB0byBjaGVja291dCBwYXN0IGNvbW1pdHMgd2l0aG91dCByZXF1aXJpbmcgZmV0Y2hpbmcKK2Zyb20gYW5vdGhlciByZXBvc2l0b3J5LgorKworVG8gY29tcGxldGVseSByZW1vdmUgYSBzdWJtb2R1bGUsIG1hbnVhbGx5IGRlbGV0ZQorYCRHSVRfRElSL21vZHVsZXMvPG5hbWU+L2AuCisKK0FDVElWRSBTVUJNT0RVTEVTCistLS0tLS0tLS0tLS0tLS0tLQorCitBIHN1Ym1vZHVsZSBpcyBjb25zaWRlcmVkIGFjdGl2ZSwKKworICAxLiBpZiBgc3VibW9kdWxlLjxuYW1lPi5hY3RpdmVgIGlzIHNldCB0byBgdHJ1ZWAKKysKK29yCisKKyAgMi4gaWYgdGhlIHN1Ym1vZHVsZSdzIHBhdGggbWF0Y2hlcyB0aGUgcGF0aHNwZWMgaW4gYHN1Ym1vZHVsZS5hY3RpdmVgCisrCitvcgorCisgIDMuIGlmIGBzdWJtb2R1bGUuPG5hbWU+LnVybGAgaXMgc2V0LgorCithbmQgdGhlc2UgYXJlIGV2YWx1YXRlZCBpbiB0aGlzIG9yZGVyLgorCitGb3IgZXhhbXBsZToKKworICBbc3VibW9kdWxlICJmb28iXQorICAgIGFjdGl2ZSA9IGZhbHNlCisgICAgdXJsID0gaHR0cHM6Ly9leGFtcGxlLm9yZy9mb28KKyAgW3N1Ym1vZHVsZSAiYmFyIl0KKyAgICBhY3RpdmUgPSB0cnVlCisgICAgdXJsID0gaHR0cHM6Ly9leGFtcGxlLm9yZy9iYXIKKyAgW3N1Ym1vZHVsZSAiYmF6Il0KKyAgICB1cmwgPSBodHRwczovL2V4YW1wbGUub3JnL2JhegorCitJbiB0aGUgYWJvdmUgY29uZmlnIG9ubHkgdGhlIHN1Ym1vZHVsZSAnYmFyJyBhbmQgJ2JheicgYXJlIGFjdGl2ZSwKKydiYXInIGR1ZSB0byAoMSkgYW5kICdiYXonIGR1ZSB0byAoMykuICdmb28nIGlzIGluYWN0aXZlIGJlY2F1c2UKKygxKSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgKDMpCisKK05vdGUgdGhhdCAoMykgaXMgYSBoaXN0b3JpY2FsIGFydGVmYWN0IGFuZCB3aWxsIGJlIGlnbm9yZWQgaWYgdGhlCisoMSkgYW5kICgyKSBzcGVjaWZ5IHRoYXQgdGhlIHN1Ym1vZHVsZSBpcyBub3QgYWN0aXZlLiBJbiBvdGhlciB3b3JkcywKK2lmIHdlIGhhdmUgYSBgc3VibW9kdWxlLjxuYW1lPi5hY3RpdmVgIHNldCB0byBgZmFsc2VgIG9yIGlmIHRoZQorc3VibW9kdWxlJ3MgcGF0aCBpcyBleGNsdWRlZCBpbiB0aGUgcGF0aHNwZWMgaW4gYHN1Ym1vZHVsZS5hY3RpdmVgLCB0aGUKK3VybCBkb2Vzbid0IG1hdHRlciB3aGV0aGVyIGl0IGlzIHByZXNlbnQgb3Igbm90LiBUaGlzIGlzIGlsbHVzdHJhdGVkIGluCit0aGUgZXhhbXBsZSB0aGF0IGZvbGxvd3MuCisKKyAgW3N1Ym1vZHVsZSAiZm9vIl0KKyAgICBhY3RpdmUgPSB0cnVlCisgICAgdXJsID0gaHR0cHM6Ly9leGFtcGxlLm9yZy9mb28KKyAgW3N1Ym1vZHVsZSAiYmFyIl0KKyAgICB1cmwgPSBodHRwczovL2V4YW1wbGUub3JnL2JhcgorICBbc3VibW9kdWxlICJiYXoiXQorICAgIHVybCA9IGh0dHBzOi8vZXhhbXBsZS5vcmcvYmF6CisgIFtzdWJtb2R1bGUgImJvYiJdCisgICAgaWdub3JlID0gdHJ1ZQorICBbc3VibW9kdWxlXQorICAgIGFjdGl2ZSA9IGIqCisgICAgYWN0aXZlID0gOihleGNsdWRlKSBiYXoKKworSW4gaGVyZSBhbGwgc3VibW9kdWxlcyBleGNlcHQgJ2JheicgKGZvbywgYmFyLCBib2IpIGFyZSBhY3RpdmUuCisnZm9vJyBkdWUgdG8gaXRzIG93biBhY3RpdmUgZmxhZyBhbmQgYWxsIHRoZSBvdGhlcnMgZHVlIHRvIHRoZQorc3VibW9kdWxlIGFjdGl2ZSBwYXRoc3BlYywgd2hpY2ggc3BlY2lmaWVzIHRoYXQgYW55IHN1Ym1vZHVsZQorc3RhcnRpbmcgd2l0aCAnYicgZXhjZXB0ICdiYXonIGFyZSBhbHNvIGFjdGl2ZSwgcmVnYXJkbGVzcyBvZiB0aGUKK3ByZXNlbmNlIG9mIHRoZSAudXJsIGZpZWxkLgorCitXb3JrZmxvdyBmb3IgYSB0aGlyZCBwYXJ0eSBsaWJyYXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIyBhZGQgYSBzdWJtb2R1bGUKKyAgZ2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gPHBhdGg+CisKKyAgIyBvY2Nhc2lvbmFsbHkgdXBkYXRlIHRoZSBzdWJtb2R1bGUgdG8gYSBuZXcgdmVyc2lvbjoKKyAgZ2l0IC1DIDxwYXRoPiBjaGVja291dCA8bmV3IHZlcnNpb24+CisgIGdpdCBhZGQgPHBhdGg+CisgIGdpdCBjb21taXQgLW0gInVwZGF0ZSBzdWJtb2R1bGUgdG8gbmV3IHZlcnNpb24iCisKKyAgIyBTZWUgdGhlIGxpc3Qgb2Ygc3VibW9kdWxlcyBpbiBhIHN1cGVycHJvamVjdAorICBnaXQgc3VibW9kdWxlIHN0YXR1cworCisgICMgU2VlIEZPUk1TIG9uIHJlbW92aW5nIHN1Ym1vZHVsZXMKKworCitXb3JrZmxvdyBmb3IgYW4gYXJ0aWZpY2lhbGx5IHNwbGl0IHJlcG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIyBFbmFibGUgcmVjdXJzaW9uIGZvciByZWxldmFudCBjb21tYW5kcywgc3VjaCB0aGF0CisgICMgcmVndWxhciBjb21tYW5kcyByZWN1cnNlIGludG8gc3VibW9kdWxlcyBieSBkZWZhdWx0CisgIGdpdCBjb25maWcgLS1nbG9iYWwgc3VibW9kdWxlLnJlY3Vyc2UgdHJ1ZQorCisgICMgVW5saWtlIHRoZSBvdGhlciBjb21tYW5kcyBiZWxvdyBjbG9uZSBzdGlsbCBuZWVkcworICAjIGl0cyBvd24gcmVjdXJzZSBmbGFnOgorICBnaXQgY2xvbmUgLS1yZWN1cnNlIDxVUkw+IDxkaXJlY3Rvcnk+CisgIGNkIDxkaXJlY3Rvcnk+CisKKyAgIyBHZXQgdG8ga25vdyB0aGUgY29kZToKKyAgZ2l0IGdyZXAgZm9vCisgIGdpdCBscy1maWxlcworCisgICMgR2V0IG5ldyBjb2RlCisgIGdpdCBmZXRjaAorICBnaXQgcHVsbCAtLXJlYmFzZQorCisgICMgY2hhbmdlIHdvcmt0cmVlCisgIGdpdCBjaGVja291dAorICBnaXQgcmVzZXQKKworSW1wbGVtZW50YXRpb24gZGV0YWlscworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGNsb25pbmcgb3IgcHVsbGluZyBhIHJlcG9zaXRvcnkgY29udGFpbmluZyBzdWJtb2R1bGVzIHRoZSBzdWJtb2R1bGVzCit3aWxsIG5vdCBiZSBjaGVja2VkIG91dCBieSBkZWZhdWx0OyBZb3UgY2FuIGluc3RydWN0ICdjbG9uZScgdG8gcmVjdXJzZQoraW50byBzdWJtb2R1bGVzLiBUaGUgJ2luaXQnIGFuZCAndXBkYXRlJyBzdWJjb21tYW5kcyBvZiAnZ2l0IHN1Ym1vZHVsZScKK3dpbGwgbWFpbnRhaW4gc3VibW9kdWxlcyBjaGVja2VkIG91dCBhbmQgYXQgYW4gYXBwcm9wcmlhdGUgcmV2aXNpb24gaW4KK3lvdXIgd29ya2luZyB0cmVlLiBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gc2V0ICdzdWJtb2R1bGUucmVjdXJzZScgdG8gaGF2ZQorJ2NoZWNrb3V0JyByZWN1cnNpbmcgaW50byBzdWJtb2R1bGVzIChub3RlIHRoYXQgJ3N1Ym1vZHVsZS5yZWN1cnNlJyBhbHNvCithZmZlY3RzIG90aGVyIGdpdCBjb21tYW5kcywgc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgYSBjb21wbGV0ZSBsaXN0KS4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXN1Ym1vZHVsZVsxXSwgbGlua2dpdDpnaXRtb2R1bGVzWzVdLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwtMi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGI3ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLTIudHh0CkBAIC0wLDAgKzEsNDM2IEBACitnaXR0dXRvcmlhbC0yKDcpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHR1dG9yaWFsLTIgLSBBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQ6IHBhcnQgdHdvCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorZ2l0ICoKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1lvdSBzaG91bGQgd29yayB0aHJvdWdoIGxpbmtnaXQ6Z2l0dHV0b3JpYWxbN10gYmVmb3JlIHJlYWRpbmcgdGhpcyB0dXRvcmlhbC4KKworVGhlIGdvYWwgb2YgdGhpcyB0dXRvcmlhbCBpcyB0byBpbnRyb2R1Y2UgdHdvIGZ1bmRhbWVudGFsIHBpZWNlcyBvZgorR2l0J3MgYXJjaGl0ZWN0dXJlLS10aGUgb2JqZWN0IGRhdGFiYXNlIGFuZCB0aGUgaW5kZXggZmlsZS0tYW5kIHRvCitwcm92aWRlIHRoZSByZWFkZXIgd2l0aCBldmVyeXRoaW5nIG5lY2Vzc2FyeSB0byB1bmRlcnN0YW5kIHRoZSByZXN0CitvZiB0aGUgR2l0IGRvY3VtZW50YXRpb24uCisKK1RoZSBHaXQgb2JqZWN0IGRhdGFiYXNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMZXQncyBzdGFydCBhIG5ldyBwcm9qZWN0IGFuZCBjcmVhdGUgYSBzbWFsbCBhbW91bnQgb2YgaGlzdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIG1rZGlyIHRlc3QtcHJvamVjdAorJCBjZCB0ZXN0LXByb2plY3QKKyQgZ2l0IGluaXQKK0luaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluIC5naXQvCiskIGVjaG8gJ2hlbGxvIHdvcmxkJyA+IGZpbGUudHh0CiskIGdpdCBhZGQgLgorJCBnaXQgY29tbWl0IC1hIC1tICJpbml0aWFsIGNvbW1pdCIKK1ttYXN0ZXIgKHJvb3QtY29tbWl0KSA1NDE5NmNjXSBpbml0aWFsIGNvbW1pdAorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlLnR4dAorJCBlY2hvICdoZWxsbyB3b3JsZCEnID5maWxlLnR4dAorJCBnaXQgY29tbWl0IC1hIC1tICJhZGQgZW1waGFzaXMiCitbbWFzdGVyIGM0ZDU5ZjNdIGFkZCBlbXBoYXNpcworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQgYXJlIHRoZSA3IGRpZ2l0cyBvZiBoZXggdGhhdCBHaXQgcmVzcG9uZGVkIHRvIHRoZSBjb21taXQgd2l0aD8KKworV2Ugc2F3IGluIHBhcnQgb25lIG9mIHRoZSB0dXRvcmlhbCB0aGF0IGNvbW1pdHMgaGF2ZSBuYW1lcyBsaWtlIHRoaXMuCitJdCB0dXJucyBvdXQgdGhhdCBldmVyeSBvYmplY3QgaW4gdGhlIEdpdCBoaXN0b3J5IGlzIHN0b3JlZCB1bmRlcgorYSA0MC1kaWdpdCBoZXggbmFtZS4gIFRoYXQgbmFtZSBpcyB0aGUgU0hBLTEgaGFzaCBvZiB0aGUgb2JqZWN0J3MKK2NvbnRlbnRzOyBhbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgZW5zdXJlcyB0aGF0IEdpdCB3aWxsIG5ldmVyIHN0b3JlCit0aGUgc2FtZSBkYXRhIHR3aWNlIChzaW5jZSBpZGVudGljYWwgZGF0YSBpcyBnaXZlbiBhbiBpZGVudGljYWwgU0hBLTEKK25hbWUpLCBhbmQgdGhhdCB0aGUgY29udGVudHMgb2YgYSBHaXQgb2JqZWN0IHdpbGwgbmV2ZXIgY2hhbmdlIChzaW5jZQordGhhdCB3b3VsZCBjaGFuZ2UgdGhlIG9iamVjdCdzIG5hbWUgYXMgd2VsbCkuIFRoZSA3IGNoYXIgaGV4IHN0cmluZ3MKK2hlcmUgYXJlIHNpbXBseSB0aGUgYWJicmV2aWF0aW9uIG9mIHN1Y2ggNDAgY2hhcmFjdGVyIGxvbmcgc3RyaW5ncy4KK0FiYnJldmlhdGlvbnMgY2FuIGJlIHVzZWQgZXZlcnl3aGVyZSB3aGVyZSB0aGUgNDAgY2hhcmFjdGVyIHN0cmluZ3MKK2NhbiBiZSB1c2VkLCBzbyBsb25nIGFzIHRoZXkgYXJlIHVuYW1iaWd1b3VzLgorCitJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBjb250ZW50IG9mIHRoZSBjb21taXQgb2JqZWN0IHlvdSBjcmVhdGVkIHdoaWxlCitmb2xsb3dpbmcgdGhlIGV4YW1wbGUgYWJvdmUgZ2VuZXJhdGVzIGEgZGlmZmVyZW50IFNIQS0xIGhhc2ggdGhhbgordGhlIG9uZSBzaG93biBhYm92ZSBiZWNhdXNlIHRoZSBjb21taXQgb2JqZWN0IHJlY29yZHMgdGhlIHRpbWUgd2hlbgoraXQgd2FzIGNyZWF0ZWQgYW5kIHRoZSBuYW1lIG9mIHRoZSBwZXJzb24gcGVyZm9ybWluZyB0aGUgY29tbWl0LgorCitXZSBjYW4gYXNrIEdpdCBhYm91dCB0aGlzIHBhcnRpY3VsYXIgb2JqZWN0IHdpdGggdGhlIGBjYXQtZmlsZWAKK2NvbW1hbmQuIERvbid0IGNvcHkgdGhlIDQwIGhleCBkaWdpdHMgZnJvbSB0aGlzIGV4YW1wbGUgYnV0IHVzZSB0aG9zZQorZnJvbSB5b3VyIG93biB2ZXJzaW9uLiBOb3RlIHRoYXQgeW91IGNhbiBzaG9ydGVuIGl0IHRvIG9ubHkgYSBmZXcKK2NoYXJhY3RlcnMgdG8gc2F2ZSB5b3Vyc2VsZiB0eXBpbmcgYWxsIDQwIGhleCBkaWdpdHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgLXQgNTQxOTZjYzIKK2NvbW1pdAorJCBnaXQgY2F0LWZpbGUgY29tbWl0IDU0MTk2Y2MyCit0cmVlIDkyYjhiNjk0ZmZiMTY3NWU1OTc1MTQ4ZTExMjE4MTAwODFkYmRmZmUKK2F1dGhvciBKLiBCcnVjZSBGaWVsZHMgPGJmaWVsZHNAcHV6emxlLmZpZWxkc2VzLm9yZz4gMTE0MzQxNDY2OCAtMDUwMAorY29tbWl0dGVyIEouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BwdXp6bGUuZmllbGRzZXMub3JnPiAxMTQzNDE0NjY4IC0wNTAwCisKK2luaXRpYWwgY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSB0cmVlIGNhbiByZWZlciB0byBvbmUgb3IgbW9yZSAiYmxvYiIgb2JqZWN0cywgZWFjaCBjb3JyZXNwb25kaW5nIHRvCithIGZpbGUuICBJbiBhZGRpdGlvbiwgYSB0cmVlIGNhbiBhbHNvIHJlZmVyIHRvIG90aGVyIHRyZWUgb2JqZWN0cywKK3RodXMgY3JlYXRpbmcgYSBkaXJlY3RvcnkgaGllcmFyY2h5LiAgWW91IGNhbiBleGFtaW5lIHRoZSBjb250ZW50cyBvZgorYW55IHRyZWUgdXNpbmcgbHMtdHJlZSAocmVtZW1iZXIgdGhhdCBhIGxvbmcgZW5vdWdoIGluaXRpYWwgcG9ydGlvbgorb2YgdGhlIFNIQS0xIHdpbGwgYWxzbyB3b3JrKToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBscy10cmVlIDkyYjhiNjk0CisxMDA2NDQgYmxvYiAzYjE4ZTUxMmRiYTc5ZTRjODMwMGRkMDhhZWIzN2Y4ZTcyOGI4ZGFkICAgIGZpbGUudHh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGh1cyB3ZSBzZWUgdGhhdCB0aGlzIHRyZWUgaGFzIG9uZSBmaWxlIGluIGl0LiAgVGhlIFNIQS0xIGhhc2ggaXMgYQorcmVmZXJlbmNlIHRvIHRoYXQgZmlsZSdzIGRhdGE6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgLXQgM2IxOGU1MTIKK2Jsb2IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBICJibG9iIiBpcyBqdXN0IGZpbGUgZGF0YSwgd2hpY2ggd2UgY2FuIGFsc28gZXhhbWluZSB3aXRoIGNhdC1maWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNhdC1maWxlIGJsb2IgM2IxOGU1MTIKK2hlbGxvIHdvcmxkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG9sZCBmaWxlIGRhdGE7IHNvIHRoZSBvYmplY3QgdGhhdCBHaXQgbmFtZWQgaW4KK2l0cyByZXNwb25zZSB0byB0aGUgaW5pdGlhbCB0cmVlIHdhcyBhIHRyZWUgd2l0aCBhIHNuYXBzaG90IG9mIHRoZQorZGlyZWN0b3J5IHN0YXRlIHRoYXQgd2FzIHJlY29yZGVkIGJ5IHRoZSBmaXJzdCBjb21taXQuCisKK0FsbCBvZiB0aGVzZSBvYmplY3RzIGFyZSBzdG9yZWQgdW5kZXIgdGhlaXIgU0hBLTEgbmFtZXMgaW5zaWRlIHRoZSBHaXQKK2RpcmVjdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGZpbmQgLmdpdC9vYmplY3RzLworLmdpdC9vYmplY3RzLworLmdpdC9vYmplY3RzL3BhY2sKKy5naXQvb2JqZWN0cy9pbmZvCisuZ2l0L29iamVjdHMvM2IKKy5naXQvb2JqZWN0cy8zYi8xOGU1MTJkYmE3OWU0YzgzMDBkZDA4YWViMzdmOGU3MjhiOGRhZAorLmdpdC9vYmplY3RzLzkyCisuZ2l0L29iamVjdHMvOTIvYjhiNjk0ZmZiMTY3NWU1OTc1MTQ4ZTExMjE4MTAwODFkYmRmZmUKKy5naXQvb2JqZWN0cy81NAorLmdpdC9vYmplY3RzLzU0LzE5NmNjMjcwM2RjMTY1Y2JkMzczYTY1YTRkY2YyMmQ1MGFlN2Y3CisuZ2l0L29iamVjdHMvYTAKKy5naXQvb2JqZWN0cy9hMC80MjM4OTY5NzM2NDQ3NzE0OTdiZGMwM2ViOTlkNTI4MTYxNWI1MQorLmdpdC9vYmplY3RzL2QwCisuZ2l0L29iamVjdHMvZDAvNDkyYjM2OGI2NmJkYWJmMmFjMWZkOGM5MmIzOWQzZGI5MTZlNTkKKy5naXQvb2JqZWN0cy9jNAorLmdpdC9vYmplY3RzL2M0L2Q1OWYzOTBiOWNmZDQzMTgxMTdhZmRlMTFkNjAxYzEwODVmMjQxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHRoZSBjb250ZW50cyBvZiB0aGVzZSBmaWxlcyBpcyBqdXN0IHRoZSBjb21wcmVzc2VkIGRhdGEgcGx1cyBhCitoZWFkZXIgaWRlbnRpZnlpbmcgdGhlaXIgbGVuZ3RoIGFuZCB0aGVpciB0eXBlLiAgVGhlIHR5cGUgaXMgZWl0aGVyIGEKK2Jsb2IsIGEgdHJlZSwgYSBjb21taXQsIG9yIGEgdGFnLgorCitUaGUgc2ltcGxlc3QgY29tbWl0IHRvIGZpbmQgaXMgdGhlIEhFQUQgY29tbWl0LCB3aGljaCB3ZSBjYW4gZmluZAorZnJvbSAuZ2l0L0hFQUQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBjYXQgLmdpdC9IRUFECityZWY6IHJlZnMvaGVhZHMvbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgeW91IGNhbiBzZWUsIHRoaXMgdGVsbHMgdXMgd2hpY2ggYnJhbmNoIHdlJ3JlIGN1cnJlbnRseSBvbiwgYW5kIGl0Cit0ZWxscyB1cyB0aGlzIGJ5IG5hbWluZyBhIGZpbGUgdW5kZXIgdGhlIC5naXQgZGlyZWN0b3J5LCB3aGljaCBpdHNlbGYKK2NvbnRhaW5zIGEgU0hBLTEgbmFtZSByZWZlcnJpbmcgdG8gYSBjb21taXQgb2JqZWN0LCB3aGljaCB3ZSBjYW4KK2V4YW1pbmUgd2l0aCBjYXQtZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNhdCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyCitjNGQ1OWYzOTBiOWNmZDQzMTgxMTdhZmRlMTFkNjAxYzEwODVmMjQxCiskIGdpdCBjYXQtZmlsZSAtdCBjNGQ1OWYzOQorY29tbWl0CiskIGdpdCBjYXQtZmlsZSBjb21taXQgYzRkNTlmMzkKK3RyZWUgZDA0OTJiMzY4YjY2YmRhYmYyYWMxZmQ4YzkyYjM5ZDNkYjkxNmU1OQorcGFyZW50IDU0MTk2Y2MyNzAzZGMxNjVjYmQzNzNhNjVhNGRjZjIyZDUwYWU3ZjcKK2F1dGhvciBKLiBCcnVjZSBGaWVsZHMgPGJmaWVsZHNAcHV6emxlLmZpZWxkc2VzLm9yZz4gMTE0MzQxODcwMiAtMDUwMAorY29tbWl0dGVyIEouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BwdXp6bGUuZmllbGRzZXMub3JnPiAxMTQzNDE4NzAyIC0wNTAwCisKK2FkZCBlbXBoYXNpcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAidHJlZSIgb2JqZWN0IGhlcmUgcmVmZXJzIHRvIHRoZSBuZXcgc3RhdGUgb2YgdGhlIHRyZWU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbHMtdHJlZSBkMDQ5MmIzNgorMTAwNjQ0IGJsb2IgYTA0MjM4OTY5NzM2NDQ3NzE0OTdiZGMwM2ViOTlkNTI4MTYxNWI1MSAgICBmaWxlLnR4dAorJCBnaXQgY2F0LWZpbGUgYmxvYiBhMDQyMzg5NgoraGVsbG8gd29ybGQhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHRoZSAicGFyZW50IiBvYmplY3QgcmVmZXJzIHRvIHRoZSBwcmV2aW91cyBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgY29tbWl0IDU0MTk2Y2MyCit0cmVlIDkyYjhiNjk0ZmZiMTY3NWU1OTc1MTQ4ZTExMjE4MTAwODFkYmRmZmUKK2F1dGhvciBKLiBCcnVjZSBGaWVsZHMgPGJmaWVsZHNAcHV6emxlLmZpZWxkc2VzLm9yZz4gMTE0MzQxNDY2OCAtMDUwMAorY29tbWl0dGVyIEouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BwdXp6bGUuZmllbGRzZXMub3JnPiAxMTQzNDE0NjY4IC0wNTAwCisKK2luaXRpYWwgY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHRyZWUgb2JqZWN0IGlzIHRoZSB0cmVlIHdlIGV4YW1pbmVkIGZpcnN0LCBhbmQgdGhpcyBjb21taXQgaXMKK3VudXN1YWwgaW4gdGhhdCBpdCBsYWNrcyBhbnkgcGFyZW50LgorCitNb3N0IGNvbW1pdHMgaGF2ZSBvbmx5IG9uZSBwYXJlbnQsIGJ1dCBpdCBpcyBhbHNvIGNvbW1vbiBmb3IgYSBjb21taXQKK3RvIGhhdmUgbXVsdGlwbGUgcGFyZW50cy4gICBJbiB0aGF0IGNhc2UgdGhlIGNvbW1pdCByZXByZXNlbnRzIGEKK21lcmdlLCB3aXRoIHRoZSBwYXJlbnQgcmVmZXJlbmNlcyBwb2ludGluZyB0byB0aGUgaGVhZHMgb2YgdGhlIG1lcmdlZAorYnJhbmNoZXMuCisKK0Jlc2lkZXMgYmxvYnMsIHRyZWVzLCBhbmQgY29tbWl0cywgdGhlIG9ubHkgcmVtYWluaW5nIHR5cGUgb2Ygb2JqZWN0CitpcyBhICJ0YWciLCB3aGljaCB3ZSB3b24ndCBkaXNjdXNzIGhlcmU7IHJlZmVyIHRvIGxpbmtnaXQ6Z2l0LXRhZ1sxXQorZm9yIGRldGFpbHMuCisKK1NvIG5vdyB3ZSBrbm93IGhvdyBHaXQgdXNlcyB0aGUgb2JqZWN0IGRhdGFiYXNlIHRvIHJlcHJlc2VudCBhCitwcm9qZWN0J3MgaGlzdG9yeToKKworICAqICJjb21taXQiIG9iamVjdHMgcmVmZXIgdG8gInRyZWUiIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZQorICAgIHNuYXBzaG90IG9mIGEgZGlyZWN0b3J5IHRyZWUgYXQgYSBwYXJ0aWN1bGFyIHBvaW50IGluIHRoZQorICAgIGhpc3RvcnksIGFuZCByZWZlciB0byAicGFyZW50IiBjb21taXRzIHRvIHNob3cgaG93IHRoZXkncmUKKyAgICBjb25uZWN0ZWQgaW50byB0aGUgcHJvamVjdCBoaXN0b3J5LgorICAqICJ0cmVlIiBvYmplY3RzIHJlcHJlc2VudCB0aGUgc3RhdGUgb2YgYSBzaW5nbGUgZGlyZWN0b3J5LAorICAgIGFzc29jaWF0aW5nIGRpcmVjdG9yeSBuYW1lcyB0byAiYmxvYiIgb2JqZWN0cyBjb250YWluaW5nIGZpbGUKKyAgICBkYXRhIGFuZCAidHJlZSIgb2JqZWN0cyBjb250YWluaW5nIHN1YmRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KKyAgKiAiYmxvYiIgb2JqZWN0cyBjb250YWluIGZpbGUgZGF0YSB3aXRob3V0IGFueSBvdGhlciBzdHJ1Y3R1cmUuCisgICogUmVmZXJlbmNlcyB0byBjb21taXQgb2JqZWN0cyBhdCB0aGUgaGVhZCBvZiBlYWNoIGJyYW5jaCBhcmUKKyAgICBzdG9yZWQgaW4gZmlsZXMgdW5kZXIgLmdpdC9yZWZzL2hlYWRzLy4KKyAgKiBUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBicmFuY2ggaXMgc3RvcmVkIGluIC5naXQvSEVBRC4KKworTm90ZSwgYnkgdGhlIHdheSwgdGhhdCBsb3RzIG9mIGNvbW1hbmRzIHRha2UgYSB0cmVlIGFzIGFuIGFyZ3VtZW50LgorQnV0IGFzIHdlIGNhbiBzZWUgYWJvdmUsIGEgdHJlZSBjYW4gYmUgcmVmZXJyZWQgdG8gaW4gbWFueSBkaWZmZXJlbnQKK3dheXMtLWJ5IHRoZSBTSEEtMSBuYW1lIGZvciB0aGF0IHRyZWUsIGJ5IHRoZSBuYW1lIG9mIGEgY29tbWl0IHRoYXQKK3JlZmVycyB0byB0aGUgdHJlZSwgYnkgdGhlIG5hbWUgb2YgYSBicmFuY2ggd2hvc2UgaGVhZCByZWZlcnMgdG8gdGhhdAordHJlZSwgZXRjLi0tYW5kIG1vc3Qgc3VjaCBjb21tYW5kcyBjYW4gYWNjZXB0IGFueSBvZiB0aGVzZSBuYW1lcy4KKworSW4gY29tbWFuZCBzeW5vcHNlcywgdGhlIHdvcmQgInRyZWUtaXNoIiBpcyBzb21ldGltZXMgdXNlZCB0bworZGVzaWduYXRlIHN1Y2ggYW4gYXJndW1lbnQuCisKK1RoZSBpbmRleCBmaWxlCistLS0tLS0tLS0tLS0tLQorCitUaGUgcHJpbWFyeSB0b29sIHdlJ3ZlIGJlZW4gdXNpbmcgdG8gY3JlYXRlIGNvbW1pdHMgaXMgYGdpdC1jb21taXQKKy1hYCwgd2hpY2ggY3JlYXRlcyBhIGNvbW1pdCBpbmNsdWRpbmcgZXZlcnkgY2hhbmdlIHlvdSd2ZSBtYWRlIHRvCit5b3VyIHdvcmtpbmcgdHJlZS4gIEJ1dCB3aGF0IGlmIHlvdSB3YW50IHRvIGNvbW1pdCBjaGFuZ2VzIG9ubHkgdG8KK2NlcnRhaW4gZmlsZXM/ICBPciBvbmx5IGNlcnRhaW4gY2hhbmdlcyB0byBjZXJ0YWluIGZpbGVzPworCitJZiB3ZSBsb29rIGF0IHRoZSB3YXkgY29tbWl0cyBhcmUgY3JlYXRlZCB1bmRlciB0aGUgY292ZXIsIHdlJ2xsIHNlZQordGhhdCB0aGVyZSBhcmUgbW9yZSBmbGV4aWJsZSB3YXlzIGNyZWF0aW5nIGNvbW1pdHMuCisKK0NvbnRpbnVpbmcgd2l0aCBvdXIgdGVzdC1wcm9qZWN0LCBsZXQncyBtb2RpZnkgZmlsZS50eHQgYWdhaW46CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBlY2hvICJoZWxsbyB3b3JsZCwgYWdhaW4iID4+ZmlsZS50eHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitidXQgdGhpcyB0aW1lIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgbWFraW5nIHRoZSBjb21taXQsIGxldCdzIHRha2UgYW4KK2ludGVybWVkaWF0ZSBzdGVwLCBhbmQgYXNrIGZvciBkaWZmcyBhbG9uZyB0aGUgd2F5IHRvIGtlZXAgdHJhY2sgb2YKK3doYXQncyBoYXBwZW5pbmc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZgorLS0tIGEvZmlsZS50eHQKKysrKyBiL2ZpbGUudHh0CitAQCAtMSArMSwyIEBACisgaGVsbG8gd29ybGQhCisraGVsbG8gd29ybGQsIGFnYWluCiskIGdpdCBhZGQgZmlsZS50eHQKKyQgZ2l0IGRpZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGFzdCBkaWZmIGlzIGVtcHR5LCBidXQgbm8gbmV3IGNvbW1pdHMgaGF2ZSBiZWVuIG1hZGUsIGFuZCB0aGUKK2hlYWQgc3RpbGwgZG9lc24ndCBjb250YWluIHRoZSBuZXcgbGluZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIEhFQUQKK2RpZmYgLS1naXQgYS9maWxlLnR4dCBiL2ZpbGUudHh0CitpbmRleCBhMDQyMzg5Li41MTNmZWJhIDEwMDY0NAorLS0tIGEvZmlsZS50eHQKKysrKyBiL2ZpbGUudHh0CitAQCAtMSArMSwyIEBACisgaGVsbG8gd29ybGQhCisraGVsbG8gd29ybGQsIGFnYWluCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU28gJ2dpdCBkaWZmJyBpcyBjb21wYXJpbmcgYWdhaW5zdCBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgaGVhZC4KK1RoZSB0aGluZyB0aGF0IGl0J3MgY29tcGFyaW5nIGFnYWluc3QgaXMgYWN0dWFsbHkgdGhlIGluZGV4IGZpbGUsCit3aGljaCBpcyBzdG9yZWQgaW4gLmdpdC9pbmRleCBpbiBhIGJpbmFyeSBmb3JtYXQsIGJ1dCB3aG9zZSBjb250ZW50cword2UgY2FuIGV4YW1pbmUgd2l0aCBscy1maWxlczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBscy1maWxlcyAtLXN0YWdlCisxMDA2NDQgNTEzZmViYTJlNTNlYmJkMjUzMjQxOWRlZDg0OGJhMTlkZTg4YmEwMCAwICAgICAgIGZpbGUudHh0CiskIGdpdCBjYXQtZmlsZSAtdCA1MTNmZWJhMgorYmxvYgorJCBnaXQgY2F0LWZpbGUgYmxvYiA1MTNmZWJhMgoraGVsbG8gd29ybGQhCitoZWxsbyB3b3JsZCwgYWdhaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTbyB3aGF0IG91ciAnZ2l0IGFkZCcgZGlkIHdhcyBzdG9yZSBhIG5ldyBibG9iIGFuZCB0aGVuIHB1dAorYSByZWZlcmVuY2UgdG8gaXQgaW4gdGhlIGluZGV4IGZpbGUuICBJZiB3ZSBtb2RpZnkgdGhlIGZpbGUgYWdhaW4sCit3ZSdsbCBzZWUgdGhhdCB0aGUgbmV3IG1vZGlmaWNhdGlvbnMgYXJlIHJlZmxlY3RlZCBpbiB0aGUgJ2dpdCBkaWZmJworb3V0cHV0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZWNobyAnYWdhaW4/JyA+PmZpbGUudHh0CiskIGdpdCBkaWZmCitpbmRleCA1MTNmZWJhLi5iYTNkYTdiIDEwMDY0NAorLS0tIGEvZmlsZS50eHQKKysrKyBiL2ZpbGUudHh0CitAQCAtMSwyICsxLDMgQEAKKyBoZWxsbyB3b3JsZCEKKyBoZWxsbyB3b3JsZCwgYWdhaW4KKythZ2Fpbj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRoIHRoZSByaWdodCBhcmd1bWVudHMsICdnaXQgZGlmZicgY2FuIGFsc28gc2hvdyB1cyB0aGUgZGlmZmVyZW5jZQorYmV0d2VlbiB0aGUgd29ya2luZyBkaXJlY3RvcnkgYW5kIHRoZSBsYXN0IGNvbW1pdCwgb3IgYmV0d2VlbiB0aGUKK2luZGV4IGFuZCB0aGUgbGFzdCBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiBIRUFECitkaWZmIC0tZ2l0IGEvZmlsZS50eHQgYi9maWxlLnR4dAoraW5kZXggYTA0MjM4OS4uYmEzZGE3YiAxMDA2NDQKKy0tLSBhL2ZpbGUudHh0CisrKysgYi9maWxlLnR4dAorQEAgLTEgKzEsMyBAQAorIGhlbGxvIHdvcmxkIQorK2hlbGxvIHdvcmxkLCBhZ2FpbgorK2FnYWluPworJCBnaXQgZGlmZiAtLWNhY2hlZAorZGlmZiAtLWdpdCBhL2ZpbGUudHh0IGIvZmlsZS50eHQKK2luZGV4IGEwNDIzODkuLjUxM2ZlYmEgMTAwNjQ0CistLS0gYS9maWxlLnR4dAorKysrIGIvZmlsZS50eHQKK0BAIC0xICsxLDIgQEAKKyBoZWxsbyB3b3JsZCEKKytoZWxsbyB3b3JsZCwgYWdhaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBdCBhbnkgdGltZSwgd2UgY2FuIGNyZWF0ZSBhIG5ldyBjb21taXQgdXNpbmcgJ2dpdCBjb21taXQnICh3aXRob3V0Cit0aGUgIi1hIiBvcHRpb24pLCBhbmQgdmVyaWZ5IHRoYXQgdGhlIHN0YXRlIGNvbW1pdHRlZCBvbmx5IGluY2x1ZGVzIHRoZQorY2hhbmdlcyBzdG9yZWQgaW4gdGhlIGluZGV4IGZpbGUsIG5vdCB0aGUgYWRkaXRpb25hbCBjaGFuZ2UgdGhhdCBpcworc3RpbGwgb25seSBpbiBvdXIgd29ya2luZyB0cmVlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCAtbSAicmVwZWF0IgorJCBnaXQgZGlmZiBIRUFECitkaWZmIC0tZ2l0IGEvZmlsZS50eHQgYi9maWxlLnR4dAoraW5kZXggNTEzZmViYS4uYmEzZGE3YiAxMDA2NDQKKy0tLSBhL2ZpbGUudHh0CisrKysgYi9maWxlLnR4dAorQEAgLTEsMiArMSwzIEBACisgaGVsbG8gd29ybGQhCisgaGVsbG8gd29ybGQsIGFnYWluCisrYWdhaW4/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU28gYnkgZGVmYXVsdCAnZ2l0IGNvbW1pdCcgdXNlcyB0aGUgaW5kZXggdG8gY3JlYXRlIHRoZSBjb21taXQsIG5vdAordGhlIHdvcmtpbmcgdHJlZTsgdGhlICItYSIgb3B0aW9uIHRvIGNvbW1pdCB0ZWxscyBpdCB0byBmaXJzdCB1cGRhdGUKK3RoZSBpbmRleCB3aXRoIGFsbCBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUuCisKK0ZpbmFsbHksIGl0J3Mgd29ydGggbG9va2luZyBhdCB0aGUgZWZmZWN0IG9mICdnaXQgYWRkJyBvbiB0aGUgaW5kZXgKK2ZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBlY2hvICJnb29kYnllLCB3b3JsZCIgPmNsb3NpbmcudHh0CiskIGdpdCBhZGQgY2xvc2luZy50eHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWZmZWN0IG9mIHRoZSAnZ2l0IGFkZCcgd2FzIHRvIGFkZCBvbmUgZW50cnkgdG8gdGhlIGluZGV4IGZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbHMtZmlsZXMgLS1zdGFnZQorMTAwNjQ0IDhiOTc0M2IyMGQ0YjE1YmUzOTU1ZmM4ZDVjZDJiMDljZDIzMzYxMzggMCAgICAgICBjbG9zaW5nLnR4dAorMTAwNjQ0IDUxM2ZlYmEyZTUzZWJiZDI1MzI0MTlkZWQ4NDhiYTE5ZGU4OGJhMDAgMCAgICAgICBmaWxlLnR4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuZCwgYXMgeW91IGNhbiBzZWUgd2l0aCBjYXQtZmlsZSwgdGhpcyBuZXcgZW50cnkgcmVmZXJzIHRvIHRoZQorY3VycmVudCBjb250ZW50cyBvZiB0aGUgZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSBibG9iIDhiOTc0M2IyCitnb29kYnllLCB3b3JsZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAic3RhdHVzIiBjb21tYW5kIGlzIGEgdXNlZnVsIHdheSB0byBnZXQgYSBxdWljayBzdW1tYXJ5IG9mIHRoZQorc2l0dWF0aW9uOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHN0YXR1cworT24gYnJhbmNoIG1hc3RlcgorQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKworCW5ldyBmaWxlOiAgIGNsb3NpbmcudHh0CisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCisJbW9kaWZpZWQ6ICAgZmlsZS50eHQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NpbmNlIHRoZSBjdXJyZW50IHN0YXRlIG9mIGNsb3NpbmcudHh0IGlzIGNhY2hlZCBpbiB0aGUgaW5kZXggZmlsZSwKK2l0IGlzIGxpc3RlZCBhcyAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQiLiAgU2luY2UgZmlsZS50eHQgaGFzCitjaGFuZ2VzIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0aGF0IGFyZW4ndCByZWZsZWN0ZWQgaW4gdGhlIGluZGV4LAoraXQgaXMgbWFya2VkICJjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZCIuICBBdCB0aGlzIHBvaW50LCBydW5uaW5nICJnaXQKK2NvbW1pdCIgd291bGQgY3JlYXRlIGEgY29tbWl0IHRoYXQgYWRkZWQgY2xvc2luZy50eHQgKHdpdGggaXRzIG5ldworY29udGVudHMpLCBidXQgdGhhdCBkaWRuJ3QgbW9kaWZ5IGZpbGUudHh0LgorCitBbHNvLCBub3RlIHRoYXQgYSBiYXJlIGBnaXQgZGlmZmAgc2hvd3MgdGhlIGNoYW5nZXMgdG8gZmlsZS50eHQsIGJ1dAorbm90IHRoZSBhZGRpdGlvbiBvZiBjbG9zaW5nLnR4dCwgYmVjYXVzZSB0aGUgdmVyc2lvbiBvZiBjbG9zaW5nLnR4dAoraW4gdGhlIGluZGV4IGZpbGUgaXMgaWRlbnRpY2FsIHRvIHRoZSBvbmUgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorCitJbiBhZGRpdGlvbiB0byBiZWluZyB0aGUgc3RhZ2luZyBhcmVhIGZvciBuZXcgY29tbWl0cywgdGhlIGluZGV4IGZpbGUKK2lzIGFsc28gcG9wdWxhdGVkIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSB3aGVuIGNoZWNraW5nIG91dCBhCiticmFuY2gsIGFuZCBpcyB1c2VkIHRvIGhvbGQgdGhlIHRyZWVzIGludm9sdmVkIGluIGEgbWVyZ2Ugb3BlcmF0aW9uLgorU2VlIGxpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XSBhbmQgdGhlIHJlbGV2YW50IG1hbgorcGFnZXMgZm9yIGRldGFpbHMuCisKK1doYXQgbmV4dD8KKy0tLS0tLS0tLS0KKworQXQgdGhpcyBwb2ludCB5b3Ugc2hvdWxkIGtub3cgZXZlcnl0aGluZyBuZWNlc3NhcnkgdG8gcmVhZCB0aGUgbWFuCitwYWdlcyBmb3IgYW55IG9mIHRoZSBnaXQgY29tbWFuZHM7IG9uZSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlCit3aXRoIHRoZSBjb21tYW5kcyBtZW50aW9uZWQgaW4gbGlua2dpdDpnaXRldmVyeWRheVs3XS4gIFlvdQorc2hvdWxkIGJlIGFibGUgdG8gZmluZCBhbnkgdW5rbm93biBqYXJnb24gaW4gbGlua2dpdDpnaXRnbG9zc2FyeVs3XS4KKworVGhlIGxpbms6dXNlci1tYW51YWwuaHRtbFtHaXQgVXNlcidzIE1hbnVhbF0gcHJvdmlkZXMgYSBtb3JlCitjb21wcmVoZW5zaXZlIGludHJvZHVjdGlvbiB0byBHaXQuCisKK2xpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSBleHBsYWlucyBob3cgdG8KK2ltcG9ydCBhIENWUyByZXBvc2l0b3J5IGludG8gR2l0LCBhbmQgc2hvd3MgaG93IHRvIHVzZSBHaXQgaW4gYQorQ1ZTLWxpa2Ugd2F5LgorCitGb3Igc29tZSBpbnRlcmVzdGluZyBleGFtcGxlcyBvZiBHaXQgdXNlLCBzZWUgdGhlCitsaW5rOmhvd3RvLWluZGV4Lmh0bWxbaG93dG9zXS4KKworRm9yIEdpdCBkZXZlbG9wZXJzLCBsaW5rZ2l0OmdpdGNvcmUtdHV0b3JpYWxbN10gZ29lcworaW50byBkZXRhaWwgb24gdGhlIGxvd2VyLWxldmVsIEdpdCBtZWNoYW5pc21zIGludm9sdmVkIGluLCBmb3IKK2V4YW1wbGUsIGNyZWF0aW5nIGEgbmV3IGNvbW1pdC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHR1dG9yaWFsWzddLAorbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLAorbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLAorbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwKK2xpbmtnaXQ6Z2l0LWhlbHBbMV0sCitsaW5rZ2l0OmdpdGV2ZXJ5ZGF5WzddLAorbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZWY1Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLnR4dApAQCAtMCwwICsxLDY3NyBAQAorZ2l0dHV0b3JpYWwoNykKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHR1dG9yaWFsIC0gQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorZ2l0ICoKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgdHV0b3JpYWwgZXhwbGFpbnMgaG93IHRvIGltcG9ydCBhIG5ldyBwcm9qZWN0IGludG8gR2l0LCBtYWtlCitjaGFuZ2VzIHRvIGl0LCBhbmQgc2hhcmUgY2hhbmdlcyB3aXRoIG90aGVyIGRldmVsb3BlcnMuCisKK0lmIHlvdSBhcmUgaW5zdGVhZCBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB1c2luZyBHaXQgdG8gZmV0Y2ggYSBwcm9qZWN0LAorZm9yIGV4YW1wbGUsIHRvIHRlc3QgdGhlIGxhdGVzdCB2ZXJzaW9uLCB5b3UgbWF5IHByZWZlciB0byBzdGFydCB3aXRoCit0aGUgZmlyc3QgdHdvIGNoYXB0ZXJzIG9mIGxpbms6dXNlci1tYW51YWwuaHRtbFtUaGUgR2l0IFVzZXIncyBNYW51YWxdLgorCitGaXJzdCwgbm90ZSB0aGF0IHlvdSBjYW4gZ2V0IGRvY3VtZW50YXRpb24gZm9yIGEgY29tbWFuZCBzdWNoIGFzCitgZ2l0IGxvZyAtLWdyYXBoYCB3aXRoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgbWFuIGdpdC1sb2cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvcjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBoZWxwIGxvZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dpdGggdGhlIGxhdHRlciwgeW91IGNhbiB1c2UgdGhlIG1hbnVhbCB2aWV3ZXIgb2YgeW91ciBjaG9pY2U7IHNlZQorbGlua2dpdDpnaXQtaGVscFsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworSXQgaXMgYSBnb29kIGlkZWEgdG8gaW50cm9kdWNlIHlvdXJzZWxmIHRvIEdpdCB3aXRoIHlvdXIgbmFtZSBhbmQKK3B1YmxpYyBlbWFpbCBhZGRyZXNzIGJlZm9yZSBkb2luZyBhbnkgb3BlcmF0aW9uLiAgVGhlIGVhc2llc3QKK3dheSB0byBkbyBzbyBpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lICJZb3VyIE5hbWUgQ29tZXMgSGVyZSIKKyQgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUB5b3VyZG9tYWluLmV4YW1wbGUuY29tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitJbXBvcnRpbmcgYSBuZXcgcHJvamVjdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXNzdW1lIHlvdSBoYXZlIGEgdGFyYmFsbCBwcm9qZWN0LnRhci5neiB3aXRoIHlvdXIgaW5pdGlhbCB3b3JrLiAgWW91CitjYW4gcGxhY2UgaXQgdW5kZXIgR2l0IHJldmlzaW9uIGNvbnRyb2wgYXMgZm9sbG93cy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIHRhciB4emYgcHJvamVjdC50YXIuZ3oKKyQgY2QgcHJvamVjdAorJCBnaXQgaW5pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dpdCB3aWxsIHJlcGx5CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gLmdpdC8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UndmUgbm93IGluaXRpYWxpemVkIHRoZSB3b3JraW5nIGRpcmVjdG9yeS0teW91IG1heSBub3RpY2UgYSBuZXcKK2RpcmVjdG9yeSBjcmVhdGVkLCBuYW1lZCAiLmdpdCIuCisKK05leHQsIHRlbGwgR2l0IHRvIHRha2UgYSBzbmFwc2hvdCBvZiB0aGUgY29udGVudHMgb2YgYWxsIGZpbGVzIHVuZGVyIHRoZQorY3VycmVudCBkaXJlY3RvcnkgKG5vdGUgdGhlICcuJyksIHdpdGggJ2dpdCBhZGQnOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGFkZCAuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzbmFwc2hvdCBpcyBub3cgc3RvcmVkIGluIGEgdGVtcG9yYXJ5IHN0YWdpbmcgYXJlYSB3aGljaCBHaXQgY2FsbHMKK3RoZSAiaW5kZXgiLiAgWW91IGNhbiBwZXJtYW5lbnRseSBzdG9yZSB0aGUgY29udGVudHMgb2YgdGhlIGluZGV4IGluIHRoZQorcmVwb3NpdG9yeSB3aXRoICdnaXQgY29tbWl0JzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdpbGwgcHJvbXB0IHlvdSBmb3IgYSBjb21taXQgbWVzc2FnZS4gIFlvdSd2ZSBub3cgc3RvcmVkIHRoZSBmaXJzdAordmVyc2lvbiBvZiB5b3VyIHByb2plY3QgaW4gR2l0LgorCitNYWtpbmcgY2hhbmdlcworLS0tLS0tLS0tLS0tLS0KKworTW9kaWZ5IHNvbWUgZmlsZXMsIHRoZW4gYWRkIHRoZWlyIHVwZGF0ZWQgY29udGVudHMgdG8gdGhlIGluZGV4OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGFkZCBmaWxlMSBmaWxlMiBmaWxlMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBhcmUgbm93IHJlYWR5IHRvIGNvbW1pdC4gIFlvdSBjYW4gc2VlIHdoYXQgaXMgYWJvdXQgdG8gYmUgY29tbWl0dGVkCit1c2luZyAnZ2l0IGRpZmYnIHdpdGggdGhlIC0tY2FjaGVkIG9wdGlvbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIC0tY2FjaGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKFdpdGhvdXQgLS1jYWNoZWQsICdnaXQgZGlmZicgd2lsbCBzaG93IHlvdSBhbnkgY2hhbmdlcyB0aGF0Cit5b3UndmUgbWFkZSBidXQgbm90IHlldCBhZGRlZCB0byB0aGUgaW5kZXguKSAgWW91IGNhbiBhbHNvIGdldCBhIGJyaWVmCitzdW1tYXJ5IG9mIHRoZSBzaXR1YXRpb24gd2l0aCAnZ2l0IHN0YXR1cyc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3RhdHVzCitPbiBicmFuY2ggbWFzdGVyCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKK1lvdXIgYnJhbmNoIGlzIHVwIHRvIGRhdGUgd2l0aCAnb3JpZ2luL21hc3RlcicuCisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKworCW1vZGlmaWVkOiAgIGZpbGUxCisJbW9kaWZpZWQ6ICAgZmlsZTIKKwltb2RpZmllZDogICBmaWxlMworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IG5lZWQgdG8gbWFrZSBhbnkgZnVydGhlciBhZGp1c3RtZW50cywgZG8gc28gbm93LCBhbmQgdGhlbiBhZGQgYW55CituZXdseSBtb2RpZmllZCBjb250ZW50IHRvIHRoZSBpbmRleC4gIEZpbmFsbHksIGNvbW1pdCB5b3VyIGNoYW5nZXMgd2l0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdpbGwgYWdhaW4gcHJvbXB0IHlvdSBmb3IgYSBtZXNzYWdlIGRlc2NyaWJpbmcgdGhlIGNoYW5nZSwgYW5kIHRoZW4KK3JlY29yZCBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0LgorCitBbHRlcm5hdGl2ZWx5LCBpbnN0ZWFkIG9mIHJ1bm5pbmcgJ2dpdCBhZGQnIGJlZm9yZWhhbmQsIHlvdSBjYW4gdXNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC1hCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCBhdXRvbWF0aWNhbGx5IG5vdGljZSBhbnkgbW9kaWZpZWQgKGJ1dCBub3QgbmV3KSBmaWxlcywgYWRkCit0aGVtIHRvIHRoZSBpbmRleCwgYW5kIGNvbW1pdCwgYWxsIGluIG9uZSBzdGVwLgorCitBIG5vdGUgb24gY29tbWl0IG1lc3NhZ2VzOiBUaG91Z2ggbm90IHJlcXVpcmVkLCBpdCdzIGEgZ29vZCBpZGVhIHRvCitiZWdpbiB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aCBhIHNpbmdsZSBzaG9ydCAobGVzcyB0aGFuIDUwIGNoYXJhY3RlcikKK2xpbmUgc3VtbWFyaXppbmcgdGhlIGNoYW5nZSwgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lIGFuZCB0aGVuIGEgbW9yZQordGhvcm91Z2ggZGVzY3JpcHRpb24uIFRoZSB0ZXh0IHVwIHRvIHRoZSBmaXJzdCBibGFuayBsaW5lIGluIGEgY29tbWl0CittZXNzYWdlIGlzIHRyZWF0ZWQgYXMgdGhlIGNvbW1pdCB0aXRsZSwgYW5kIHRoYXQgdGl0bGUgaXMgdXNlZAordGhyb3VnaG91dCBHaXQuICBGb3IgZXhhbXBsZSwgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIHR1cm5zIGEKK2NvbW1pdCBpbnRvIGVtYWlsLCBhbmQgaXQgdXNlcyB0aGUgdGl0bGUgb24gdGhlIFN1YmplY3QgbGluZSBhbmQgdGhlCityZXN0IG9mIHRoZSBjb21taXQgaW4gdGhlIGJvZHkuCisKK0dpdCB0cmFja3MgY29udGVudCBub3QgZmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFueSByZXZpc2lvbiBjb250cm9sIHN5c3RlbXMgcHJvdmlkZSBhbiBgYWRkYCBjb21tYW5kIHRoYXQgdGVsbHMgdGhlCitzeXN0ZW0gdG8gc3RhcnQgdHJhY2tpbmcgY2hhbmdlcyB0byBhIG5ldyBmaWxlLiAgR2l0J3MgYGFkZGAgY29tbWFuZAorZG9lcyBzb21ldGhpbmcgc2ltcGxlciBhbmQgbW9yZSBwb3dlcmZ1bDogJ2dpdCBhZGQnIGlzIHVzZWQgYm90aCBmb3IgbmV3CithbmQgbmV3bHkgbW9kaWZpZWQgZmlsZXMsIGFuZCBpbiBib3RoIGNhc2VzIGl0IHRha2VzIGEgc25hcHNob3Qgb2YgdGhlCitnaXZlbiBmaWxlcyBhbmQgc3RhZ2VzIHRoYXQgY29udGVudCBpbiB0aGUgaW5kZXgsIHJlYWR5IGZvciBpbmNsdXNpb24gaW4KK3RoZSBuZXh0IGNvbW1pdC4KKworVmlld2luZyBwcm9qZWN0IGhpc3RvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0F0IGFueSBwb2ludCB5b3UgY2FuIHZpZXcgdGhlIGhpc3Rvcnkgb2YgeW91ciBjaGFuZ2VzIHVzaW5nCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGFsc28gd2FudCB0byBzZWUgY29tcGxldGUgZGlmZnMgYXQgZWFjaCBzdGVwLCB1c2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPZnRlbiB0aGUgb3ZlcnZpZXcgb2YgdGhlIGNoYW5nZSBpcyB1c2VmdWwgdG8gZ2V0IGEgZmVlbCBvZgorZWFjaCBzdGVwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC0tc3RhdCAtLXN1bW1hcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYW5hZ2luZyBicmFuY2hlcworLS0tLS0tLS0tLS0tLS0tLS0KKworQSBzaW5nbGUgR2l0IHJlcG9zaXRvcnkgY2FuIG1haW50YWluIG11bHRpcGxlIGJyYW5jaGVzIG9mCitkZXZlbG9wbWVudC4gIFRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggbmFtZWQgImV4cGVyaW1lbnRhbCIsIHVzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCBleHBlcmltZW50YWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugbm93IHJ1bgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3lvdSdsbCBnZXQgYSBsaXN0IG9mIGFsbCBleGlzdGluZyBicmFuY2hlczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGV4cGVyaW1lbnRhbAorKiBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgImV4cGVyaW1lbnRhbCIgYnJhbmNoIGlzIHRoZSBvbmUgeW91IGp1c3QgY3JlYXRlZCwgYW5kIHRoZQorIm1hc3RlciIgYnJhbmNoIGlzIGEgZGVmYXVsdCBicmFuY2ggdGhhdCB3YXMgY3JlYXRlZCBmb3IgeW91CithdXRvbWF0aWNhbGx5LiAgVGhlIGFzdGVyaXNrIG1hcmtzIHRoZSBicmFuY2ggeW91IGFyZSBjdXJyZW50bHkgb247Cit0eXBlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIGV4cGVyaW1lbnRhbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIHN3aXRjaCB0byB0aGUgZXhwZXJpbWVudGFsIGJyYW5jaC4gIE5vdyBlZGl0IGEgZmlsZSwgY29tbWl0IHRoZQorY2hhbmdlLCBhbmQgc3dpdGNoIGJhY2sgdG8gdGhlIG1hc3RlciBicmFuY2g6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKGVkaXQgZmlsZSkKKyQgZ2l0IGNvbW1pdCAtYQorJCBnaXQgc3dpdGNoIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoZWNrIHRoYXQgdGhlIGNoYW5nZSB5b3UgbWFkZSBpcyBubyBsb25nZXIgdmlzaWJsZSwgc2luY2UgaXQgd2FzCittYWRlIG9uIHRoZSBleHBlcmltZW50YWwgYnJhbmNoIGFuZCB5b3UncmUgYmFjayBvbiB0aGUgbWFzdGVyIGJyYW5jaC4KKworWW91IGNhbiBtYWtlIGEgZGlmZmVyZW50IGNoYW5nZSBvbiB0aGUgbWFzdGVyIGJyYW5jaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoZWRpdCBmaWxlKQorJCBnaXQgY29tbWl0IC1hCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXQgdGhpcyBwb2ludCB0aGUgdHdvIGJyYW5jaGVzIGhhdmUgZGl2ZXJnZWQsIHdpdGggZGlmZmVyZW50IGNoYW5nZXMKK21hZGUgaW4gZWFjaC4gIFRvIG1lcmdlIHRoZSBjaGFuZ2VzIG1hZGUgaW4gZXhwZXJpbWVudGFsIGludG8gbWFzdGVyLCBydW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSBleHBlcmltZW50YWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB0aGUgY2hhbmdlcyBkb24ndCBjb25mbGljdCwgeW91J3JlIGRvbmUuICBJZiB0aGVyZSBhcmUgY29uZmxpY3RzLAorbWFya2VycyB3aWxsIGJlIGxlZnQgaW4gdGhlIHByb2JsZW1hdGljIGZpbGVzIHNob3dpbmcgdGhlIGNvbmZsaWN0OworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHNob3cgdGhpcy4gIE9uY2UgeW91J3ZlIGVkaXRlZCB0aGUgZmlsZXMgdG8gcmVzb2x2ZSB0aGUKK2NvbmZsaWN0cywKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQgLWEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIGNvbW1pdCB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZS4gRmluYWxseSwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdGsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHNob3cgYSBuaWNlIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVzdWx0aW5nIGhpc3RvcnkuCisKK0F0IHRoaXMgcG9pbnQgeW91IGNvdWxkIGRlbGV0ZSB0aGUgZXhwZXJpbWVudGFsIGJyYW5jaCB3aXRoCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC1kIGV4cGVyaW1lbnRhbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgY29tbWFuZCBlbnN1cmVzIHRoYXQgdGhlIGNoYW5nZXMgaW4gdGhlIGV4cGVyaW1lbnRhbCBicmFuY2ggYXJlCithbHJlYWR5IGluIHRoZSBjdXJyZW50IGJyYW5jaC4KKworSWYgeW91IGRldmVsb3Agb24gYSBicmFuY2ggY3JhenktaWRlYSwgdGhlbiByZWdyZXQgaXQsIHlvdSBjYW4gYWx3YXlzCitkZWxldGUgdGhlIGJyYW5jaCB3aXRoCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCAtRCBjcmF6eS1pZGVhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JyYW5jaGVzIGFyZSBjaGVhcCBhbmQgZWFzeSwgc28gdGhpcyBpcyBhIGdvb2Qgd2F5IHRvIHRyeSBzb21ldGhpbmcKK291dC4KKworVXNpbmcgR2l0IGZvciBjb2xsYWJvcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9zZSB0aGF0IEFsaWNlIGhhcyBzdGFydGVkIGEgbmV3IHByb2plY3Qgd2l0aCBhIEdpdCByZXBvc2l0b3J5IGluCisvaG9tZS9hbGljZS9wcm9qZWN0LCBhbmQgdGhhdCBCb2IsIHdobyBoYXMgYSBob21lIGRpcmVjdG9yeSBvbiB0aGUKK3NhbWUgbWFjaGluZSwgd2FudHMgdG8gY29udHJpYnV0ZS4KKworQm9iIGJlZ2lucyB3aXRoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2JvYiQgZ2l0IGNsb25lIC9ob21lL2FsaWNlL3Byb2plY3QgbXlyZXBvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBjcmVhdGVzIGEgbmV3IGRpcmVjdG9yeSAibXlyZXBvIiBjb250YWluaW5nIGEgY2xvbmUgb2YgQWxpY2UncworcmVwb3NpdG9yeS4gIFRoZSBjbG9uZSBpcyBvbiBhbiBlcXVhbCBmb290aW5nIHdpdGggdGhlIG9yaWdpbmFsCitwcm9qZWN0LCBwb3NzZXNzaW5nIGl0cyBvd24gY29weSBvZiB0aGUgb3JpZ2luYWwgcHJvamVjdCdzIGhpc3RvcnkuCisKK0JvYiB0aGVuIG1ha2VzIHNvbWUgY2hhbmdlcyBhbmQgY29tbWl0cyB0aGVtOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyhlZGl0IGZpbGVzKQorYm9iJCBnaXQgY29tbWl0IC1hCisocmVwZWF0IGFzIG5lY2Vzc2FyeSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGhlJ3MgcmVhZHksIGhlIHRlbGxzIEFsaWNlIHRvIHB1bGwgY2hhbmdlcyBmcm9tIHRoZSByZXBvc2l0b3J5CithdCAvaG9tZS9ib2IvbXlyZXBvLiAgU2hlIGRvZXMgdGhpcyB3aXRoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBjZCAvaG9tZS9hbGljZS9wcm9qZWN0CithbGljZSQgZ2l0IHB1bGwgL2hvbWUvYm9iL215cmVwbyBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIG1lcmdlcyB0aGUgY2hhbmdlcyBmcm9tIEJvYidzICJtYXN0ZXIiIGJyYW5jaCBpbnRvIEFsaWNlJ3MKK2N1cnJlbnQgYnJhbmNoLiAgSWYgQWxpY2UgaGFzIG1hZGUgaGVyIG93biBjaGFuZ2VzIGluIHRoZSBtZWFudGltZSwKK3RoZW4gc2hlIG1heSBuZWVkIHRvIG1hbnVhbGx5IGZpeCBhbnkgY29uZmxpY3RzLgorCitUaGUgInB1bGwiIGNvbW1hbmQgdGh1cyBwZXJmb3JtcyB0d28gb3BlcmF0aW9uczogaXQgZmV0Y2hlcyBjaGFuZ2VzCitmcm9tIGEgcmVtb3RlIGJyYW5jaCwgdGhlbiBtZXJnZXMgdGhlbSBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaC4KKworTm90ZSB0aGF0IGluIGdlbmVyYWwsIEFsaWNlIHdvdWxkIHdhbnQgaGVyIGxvY2FsIGNoYW5nZXMgY29tbWl0dGVkIGJlZm9yZQoraW5pdGlhdGluZyB0aGlzICJwdWxsIi4gIElmIEJvYidzIHdvcmsgY29uZmxpY3RzIHdpdGggd2hhdCBBbGljZSBkaWQgc2luY2UKK3RoZWlyIGhpc3RvcmllcyBmb3JrZWQsIEFsaWNlIHdpbGwgdXNlIGhlciB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCB0bworcmVzb2x2ZSBjb25mbGljdHMsIGFuZCBleGlzdGluZyBsb2NhbCBjaGFuZ2VzIHdpbGwgaW50ZXJmZXJlIHdpdGggdGhlCitjb25mbGljdCByZXNvbHV0aW9uIHByb2Nlc3MgKEdpdCB3aWxsIHN0aWxsIHBlcmZvcm0gdGhlIGZldGNoIGJ1dCB3aWxsCityZWZ1c2UgdG8gbWVyZ2UgLS0tIEFsaWNlIHdpbGwgaGF2ZSB0byBnZXQgcmlkIG9mIGhlciBsb2NhbCBjaGFuZ2VzIGluCitzb21lIHdheSBhbmQgcHVsbCBhZ2FpbiB3aGVuIHRoaXMgaGFwcGVucykuCisKK0FsaWNlIGNhbiBwZWVrIGF0IHdoYXQgQm9iIGRpZCB3aXRob3V0IG1lcmdpbmcgZmlyc3QsIHVzaW5nIHRoZSAiZmV0Y2giCitjb21tYW5kOyB0aGlzIGFsbG93cyBBbGljZSB0byBpbnNwZWN0IHdoYXQgQm9iIGRpZCwgdXNpbmcgYSBzcGVjaWFsCitzeW1ib2wgIkZFVENIX0hFQUQiLCBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgaGUgaGFzIGFueXRoaW5nIHdvcnRoCitwdWxsaW5nLCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGdpdCBmZXRjaCAvaG9tZS9ib2IvbXlyZXBvIG1hc3RlcgorYWxpY2UkIGdpdCBsb2cgLXAgSEVBRC4uRkVUQ0hfSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgb3BlcmF0aW9uIGlzIHNhZmUgZXZlbiBpZiBBbGljZSBoYXMgdW5jb21taXR0ZWQgbG9jYWwgY2hhbmdlcy4KK1RoZSByYW5nZSBub3RhdGlvbiAiSEVBRC4uRkVUQ0hfSEVBRCIgbWVhbnMgInNob3cgZXZlcnl0aGluZyB0aGF0IGlzIHJlYWNoYWJsZQorZnJvbSB0aGUgRkVUQ0hfSEVBRCBidXQgZXhjbHVkZSBhbnl0aGluZyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIEhFQUQiLgorQWxpY2UgYWxyZWFkeSBrbm93cyBldmVyeXRoaW5nIHRoYXQgbGVhZHMgdG8gaGVyIGN1cnJlbnQgc3RhdGUgKEhFQUQpLAorYW5kIHJldmlld3Mgd2hhdCBCb2IgaGFzIGluIGhpcyBzdGF0ZSAoRkVUQ0hfSEVBRCkgdGhhdCBzaGUgaGFzIG5vdAorc2VlbiB3aXRoIHRoaXMgY29tbWFuZC4KKworSWYgQWxpY2Ugd2FudHMgdG8gdmlzdWFsaXplIHdoYXQgQm9iIGRpZCBzaW5jZSB0aGVpciBoaXN0b3JpZXMgZm9ya2VkCitzaGUgY2FuIGlzc3VlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdGsgSEVBRC4uRkVUQ0hfSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdXNlcyB0aGUgc2FtZSB0d28tZG90IHJhbmdlIG5vdGF0aW9uIHdlIHNhdyBlYXJsaWVyIHdpdGggJ2dpdCBsb2cnLgorCitBbGljZSBtYXkgd2FudCB0byB2aWV3IHdoYXQgYm90aCBvZiB0aGVtIGRpZCBzaW5jZSB0aGV5IGZvcmtlZC4KK1NoZSBjYW4gdXNlIHRocmVlLWRvdCBmb3JtIGluc3RlYWQgb2YgdGhlIHR3by1kb3QgZm9ybToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdGsgSEVBRC4uLkZFVENIX0hFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIG1lYW5zICJzaG93IGV2ZXJ5dGhpbmcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBlaXRoZXIgb25lLCBidXQKK2V4Y2x1ZGUgYW55dGhpbmcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBib3RoIG9mIHRoZW0iLgorCitQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHJhbmdlIG5vdGF0aW9uIGNhbiBiZSB1c2VkIHdpdGggYm90aCBnaXRrCithbmQgImdpdCBsb2ciLgorCitBZnRlciBpbnNwZWN0aW5nIHdoYXQgQm9iIGRpZCwgaWYgdGhlcmUgaXMgbm90aGluZyB1cmdlbnQsIEFsaWNlIG1heQorZGVjaWRlIHRvIGNvbnRpbnVlIHdvcmtpbmcgd2l0aG91dCBwdWxsaW5nIGZyb20gQm9iLiAgSWYgQm9iJ3MgaGlzdG9yeQorZG9lcyBoYXZlIHNvbWV0aGluZyBBbGljZSB3b3VsZCBpbW1lZGlhdGVseSBuZWVkLCBBbGljZSBtYXkgY2hvb3NlIHRvCitzdGFzaCBoZXIgd29yay1pbi1wcm9ncmVzcyBmaXJzdCwgZG8gYSAicHVsbCIsIGFuZCB0aGVuIGZpbmFsbHkgdW5zdGFzaAoraGVyIHdvcmstaW4tcHJvZ3Jlc3Mgb24gdG9wIG9mIHRoZSByZXN1bHRpbmcgaGlzdG9yeS4KKworV2hlbiB5b3UgYXJlIHdvcmtpbmcgaW4gYSBzbWFsbCBjbG9zZWx5IGtuaXQgZ3JvdXAsIGl0IGlzIG5vdAordW51c3VhbCB0byBpbnRlcmFjdCB3aXRoIHRoZSBzYW1lIHJlcG9zaXRvcnkgb3ZlciBhbmQgb3ZlcgorYWdhaW4uICBCeSBkZWZpbmluZyAncmVtb3RlJyByZXBvc2l0b3J5IHNob3J0aGFuZCwgeW91IGNhbiBtYWtlCitpdCBlYXNpZXI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGdpdCByZW1vdGUgYWRkIGJvYiAvaG9tZS9ib2IvbXlyZXBvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGlzLCBBbGljZSBjYW4gcGVyZm9ybSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgInB1bGwiIG9wZXJhdGlvbgorYWxvbmUgdXNpbmcgdGhlICdnaXQgZmV0Y2gnIGNvbW1hbmQgd2l0aG91dCBtZXJnaW5nIHRoZW0gd2l0aCBoZXIgb3duCiticmFuY2gsIHVzaW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbGljZSQgZ2l0IGZldGNoIGJvYgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxpa2UgdGhlIGxvbmdoYW5kIGZvcm0sIHdoZW4gQWxpY2UgZmV0Y2hlcyBmcm9tIEJvYiB1c2luZyBhCityZW1vdGUgcmVwb3NpdG9yeSBzaG9ydGhhbmQgc2V0IHVwIHdpdGggJ2dpdCByZW1vdGUnLCB3aGF0IHdhcworZmV0Y2hlZCBpcyBzdG9yZWQgaW4gYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLCBpbiB0aGlzIGNhc2UKK2Bib2IvbWFzdGVyYC4gIFNvIGFmdGVyIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBnaXQgbG9nIC1wIG1hc3Rlci4uYm9iL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBjaGFuZ2VzIHRoYXQgQm9iIG1hZGUgc2luY2UgaGUgYnJhbmNoZWQgZnJvbQorQWxpY2UncyBtYXN0ZXIgYnJhbmNoLgorCitBZnRlciBleGFtaW5pbmcgdGhvc2UgY2hhbmdlcywgQWxpY2UKK2NvdWxkIG1lcmdlIHRoZSBjaGFuZ2VzIGludG8gaGVyIG1hc3RlciBicmFuY2g6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBnaXQgbWVyZ2UgYm9iL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGBtZXJnZWAgY2FuIGFsc28gYmUgZG9uZSBieSAncHVsbGluZyBmcm9tIGhlciBvd24gcmVtb3RlLXRyYWNraW5nCiticmFuY2gnLCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBnaXQgcHVsbCAuIHJlbW90ZXMvYm9iL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgZ2l0IHB1bGwgYWx3YXlzIG1lcmdlcyBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwKK3JlZ2FyZGxlc3Mgb2Ygd2hhdCBlbHNlIGlzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKK0xhdGVyLCBCb2IgY2FuIHVwZGF0ZSBoaXMgcmVwbyB3aXRoIEFsaWNlJ3MgbGF0ZXN0IGNoYW5nZXMgdXNpbmcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9iJCBnaXQgcHVsbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgaGUgZG9lc24ndCBuZWVkIHRvIGdpdmUgdGhlIHBhdGggdG8gQWxpY2UncyByZXBvc2l0b3J5Oword2hlbiBCb2IgY2xvbmVkIEFsaWNlJ3MgcmVwb3NpdG9yeSwgR2l0IHN0b3JlZCB0aGUgbG9jYXRpb24gb2YgaGVyCityZXBvc2l0b3J5IGluIHRoZSByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24sIGFuZCB0aGF0IGxvY2F0aW9uIGlzCit1c2VkIGZvciBwdWxsczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9iJCBnaXQgY29uZmlnIC0tZ2V0IHJlbW90ZS5vcmlnaW4udXJsCisvaG9tZS9hbGljZS9wcm9qZWN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhUaGUgY29tcGxldGUgY29uZmlndXJhdGlvbiBjcmVhdGVkIGJ5ICdnaXQgY2xvbmUnIGlzIHZpc2libGUgdXNpbmcKK2BnaXQgY29uZmlnIC1sYCwgYW5kIHRoZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gbWFuIHBhZ2UKK2V4cGxhaW5zIHRoZSBtZWFuaW5nIG9mIGVhY2ggb3B0aW9uLikKKworR2l0IGFsc28ga2VlcHMgYSBwcmlzdGluZSBjb3B5IG9mIEFsaWNlJ3MgbWFzdGVyIGJyYW5jaCB1bmRlciB0aGUKK25hbWUgIm9yaWdpbi9tYXN0ZXIiOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib2IkIGdpdCBicmFuY2ggLXIKKyAgb3JpZ2luL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBCb2IgbGF0ZXIgZGVjaWRlcyB0byB3b3JrIGZyb20gYSBkaWZmZXJlbnQgaG9zdCwgaGUgY2FuIHN0aWxsCitwZXJmb3JtIGNsb25lcyBhbmQgcHVsbHMgdXNpbmcgdGhlIHNzaCBwcm90b2NvbDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9iJCBnaXQgY2xvbmUgYWxpY2Uub3JnOi9ob21lL2FsaWNlL3Byb2plY3QgbXlyZXBvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsdGVybmF0aXZlbHksIEdpdCBoYXMgYSBuYXRpdmUgcHJvdG9jb2wsIG9yIGNhbiB1c2UgaHR0cDsKK3NlZSBsaW5rZ2l0OmdpdC1wdWxsWzFdIGZvciBkZXRhaWxzLgorCitHaXQgY2FuIGFsc28gYmUgdXNlZCBpbiBhIENWUy1saWtlIG1vZGUsIHdpdGggYSBjZW50cmFsIHJlcG9zaXRvcnkKK3RoYXQgdmFyaW91cyB1c2VycyBwdXNoIGNoYW5nZXMgdG87IHNlZSBsaW5rZ2l0OmdpdC1wdXNoWzFdIGFuZAorbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLgorCitFeHBsb3JpbmcgaGlzdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0KKworR2l0IGhpc3RvcnkgaXMgcmVwcmVzZW50ZWQgYXMgYSBzZXJpZXMgb2YgaW50ZXJyZWxhdGVkIGNvbW1pdHMuICBXZQoraGF2ZSBhbHJlYWR5IHNlZW4gdGhhdCB0aGUgJ2dpdCBsb2cnIGNvbW1hbmQgY2FuIGxpc3QgdGhvc2UgY29tbWl0cy4KK05vdGUgdGhhdCBmaXJzdCBsaW5lIG9mIGVhY2ggZ2l0IGxvZyBlbnRyeSBhbHNvIGdpdmVzIGEgbmFtZSBmb3IgdGhlCitjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZworY29tbWl0IGM4MmEyMmMzOWNiYzMyNTc2ZjY0ZjVjNmIzZjI0Yjk5ZWE4MTQ5YzcKK0F1dGhvcjogSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorRGF0ZTogICBUdWUgTWF5IDE2IDE3OjE4OjIyIDIwMDYgLTA3MDAKKworICAgIG1lcmdlLWJhc2U6IENsYXJpZnkgdGhlIGNvbW1lbnRzIG9uIHBvc3QgcHJvY2Vzc2luZy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2UgY2FuIGdpdmUgdGhpcyBuYW1lIHRvICdnaXQgc2hvdycgdG8gc2VlIHRoZSBkZXRhaWxzIGFib3V0IHRoaXMKK2NvbW1pdC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyBjODJhMjJjMzljYmMzMjU3NmY2NGY1YzZiM2YyNGI5OWVhODE0OWM3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J1dCB0aGVyZSBhcmUgb3RoZXIgd2F5cyB0byByZWZlciB0byBjb21taXRzLiAgWW91IGNhbiB1c2UgYW55IGluaXRpYWwKK3BhcnQgb2YgdGhlIG5hbWUgdGhhdCBpcyBsb25nIGVub3VnaCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgY29tbWl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IGM4MmEyMmMzOWMJIyB0aGUgZmlyc3QgZmV3IGNoYXJhY3RlcnMgb2YgdGhlIG5hbWUgYXJlCisJCQkjIHVzdWFsbHkgZW5vdWdoCiskIGdpdCBzaG93IEhFQUQJCSMgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2gKKyQgZ2l0IHNob3cgZXhwZXJpbWVudGFsCSMgdGhlIHRpcCBvZiB0aGUgImV4cGVyaW1lbnRhbCIgYnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V2ZXJ5IGNvbW1pdCB1c3VhbGx5IGhhcyBvbmUgInBhcmVudCIgY29tbWl0Cit3aGljaCBwb2ludHMgdG8gdGhlIHByZXZpb3VzIHN0YXRlIG9mIHRoZSBwcm9qZWN0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IEhFQUReICAjIHRvIHNlZSB0aGUgcGFyZW50IG9mIEhFQUQKKyQgZ2l0IHNob3cgSEVBRF5eICMgdG8gc2VlIHRoZSBncmFuZHBhcmVudCBvZiBIRUFECiskIGdpdCBzaG93IEhFQUR+NCAjIHRvIHNlZSB0aGUgZ3JlYXQtZ3JlYXQgZ3JhbmRwYXJlbnQgb2YgSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgbWVyZ2UgY29tbWl0cyBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIHBhcmVudDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyBIRUFEXjEgIyBzaG93IHRoZSBmaXJzdCBwYXJlbnQgb2YgSEVBRCAoc2FtZSBhcyBIRUFEXikKKyQgZ2l0IHNob3cgSEVBRF4yICMgc2hvdyB0aGUgc2Vjb25kIHBhcmVudCBvZiBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYWxzbyBnaXZlIGNvbW1pdHMgbmFtZXMgb2YgeW91ciBvd247IGFmdGVyIHJ1bm5pbmcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgdGFnIHYyLjUgMWIyZTFkNjNmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit5b3UgY2FuIHJlZmVyIHRvIDFiMmUxZDYzZmYgYnkgdGhlIG5hbWUgInYyLjUiLiAgSWYgeW91IGludGVuZCB0bworc2hhcmUgdGhpcyBuYW1lIHdpdGggb3RoZXIgcGVvcGxlIChmb3IgZXhhbXBsZSwgdG8gaWRlbnRpZnkgYSByZWxlYXNlCit2ZXJzaW9uKSwgeW91IHNob3VsZCBjcmVhdGUgYSAidGFnIiBvYmplY3QsIGFuZCBwZXJoYXBzIHNpZ24gaXQ7IHNlZQorbGlua2dpdDpnaXQtdGFnWzFdIGZvciBkZXRhaWxzLgorCitBbnkgR2l0IGNvbW1hbmQgdGhhdCBuZWVkcyB0byBrbm93IGEgY29tbWl0IGNhbiB0YWtlIGFueSBvZiB0aGVzZQorbmFtZXMuICBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiB2Mi41IEhFQUQJICMgY29tcGFyZSB0aGUgY3VycmVudCBIRUFEIHRvIHYyLjUKKyQgZ2l0IGJyYW5jaCBzdGFibGUgdjIuNSAjIHN0YXJ0IGEgbmV3IGJyYW5jaCBuYW1lZCAic3RhYmxlIiBiYXNlZAorCQkJICMgYXQgdjIuNQorJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUReICMgcmVzZXQgeW91ciBjdXJyZW50IGJyYW5jaCBhbmQgd29ya2luZworCQkJICMgZGlyZWN0b3J5IHRvIGl0cyBzdGF0ZSBhdCBIRUFEXgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZSBjYXJlZnVsIHdpdGggdGhhdCBsYXN0IGNvbW1hbmQ6IGluIGFkZGl0aW9uIHRvIGxvc2luZyBhbnkgY2hhbmdlcworaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCBpdCB3aWxsIGFsc28gcmVtb3ZlIGFsbCBsYXRlciBjb21taXRzIGZyb20KK3RoaXMgYnJhbmNoLiAgSWYgdGhpcyBicmFuY2ggaXMgdGhlIG9ubHkgYnJhbmNoIGNvbnRhaW5pbmcgdGhvc2UKK2NvbW1pdHMsIHRoZXkgd2lsbCBiZSBsb3N0LiAgQWxzbywgZG9uJ3QgdXNlICdnaXQgcmVzZXQnIG9uIGEKK3B1YmxpY2x5LXZpc2libGUgYnJhbmNoIHRoYXQgb3RoZXIgZGV2ZWxvcGVycyBwdWxsIGZyb20sIGFzIGl0IHdpbGwKK2ZvcmNlIG5lZWRsZXNzIG1lcmdlcyBvbiBvdGhlciBkZXZlbG9wZXJzIHRvIGNsZWFuIHVwIHRoZSBoaXN0b3J5LgorSWYgeW91IG5lZWQgdG8gdW5kbyBjaGFuZ2VzIHRoYXQgeW91IGhhdmUgcHVzaGVkLCB1c2UgJ2dpdCByZXZlcnQnCitpbnN0ZWFkLgorCitUaGUgJ2dpdCBncmVwJyBjb21tYW5kIGNhbiBzZWFyY2ggZm9yIHN0cmluZ3MgaW4gYW55IHZlcnNpb24gb2YgeW91cgorcHJvamVjdCwgc28KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZ3JlcCAiaGVsbG8iIHYyLjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc2VhcmNoZXMgZm9yIGFsbCBvY2N1cnJlbmNlcyBvZiAiaGVsbG8iIGluIHYyLjUuCisKK0lmIHlvdSBsZWF2ZSBvdXQgdGhlIGNvbW1pdCBuYW1lLCAnZ2l0IGdyZXAnIHdpbGwgc2VhcmNoIGFueSBvZiB0aGUKK2ZpbGVzIGl0IG1hbmFnZXMgaW4geW91ciBjdXJyZW50IGRpcmVjdG9yeS4gIFNvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGdyZXAgImhlbGxvIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpcyBhIHF1aWNrIHdheSB0byBzZWFyY2gganVzdCB0aGUgZmlsZXMgdGhhdCBhcmUgdHJhY2tlZCBieSBHaXQuCisKK01hbnkgR2l0IGNvbW1hbmRzIGFsc28gdGFrZSBzZXRzIG9mIGNvbW1pdHMsIHdoaWNoIGNhbiBiZSBzcGVjaWZpZWQKK2luIGEgbnVtYmVyIG9mIHdheXMuICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIHdpdGggJ2dpdCBsb2cnOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgdjIuNS4udjIuNiAgICAgICAgICAgICMgY29tbWl0cyBiZXR3ZWVuIHYyLjUgYW5kIHYyLjYKKyQgZ2l0IGxvZyB2Mi41Li4gICAgICAgICAgICAgICAgIyBjb21taXRzIHNpbmNlIHYyLjUKKyQgZ2l0IGxvZyAtLXNpbmNlPSIyIHdlZWtzIGFnbyIgIyBjb21taXRzIGZyb20gdGhlIGxhc3QgMiB3ZWVrcworJCBnaXQgbG9nIHYyLjUuLiBNYWtlZmlsZSAgICAgICAjIGNvbW1pdHMgc2luY2UgdjIuNSB3aGljaCBtb2RpZnkKKwkJCQkjIE1ha2VmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYWxzbyBnaXZlICdnaXQgbG9nJyBhICJyYW5nZSIgb2YgY29tbWl0cyB3aGVyZSB0aGUgZmlyc3QgaXMgbm90CituZWNlc3NhcmlseSBhbiBhbmNlc3RvciBvZiB0aGUgc2Vjb25kOyBmb3IgZXhhbXBsZSwgaWYgdGhlIHRpcHMgb2YKK3RoZSBicmFuY2hlcyAic3RhYmxlIiBhbmQgIm1hc3RlciIgZGl2ZXJnZWQgZnJvbSBhIGNvbW1vbgorY29tbWl0IHNvbWUgdGltZSBhZ28sIHRoZW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIHN0YWJsZS4ubWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgbGlzdCBjb21taXRzIG1hZGUgaW4gdGhlIG1hc3RlciBicmFuY2ggYnV0IG5vdCBpbiB0aGUKK3N0YWJsZSBicmFuY2gsIHdoaWxlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyBtYXN0ZXIuLnN0YWJsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHNob3cgdGhlIGxpc3Qgb2YgY29tbWl0cyBtYWRlIG9uIHRoZSBzdGFibGUgYnJhbmNoIGJ1dCBub3QKK3RoZSBtYXN0ZXIgYnJhbmNoLgorCitUaGUgJ2dpdCBsb2cnIGNvbW1hbmQgaGFzIGEgd2Vha25lc3M6IGl0IG11c3QgcHJlc2VudCBjb21taXRzIGluIGEKK2xpc3QuICBXaGVuIHRoZSBoaXN0b3J5IGhhcyBsaW5lcyBvZiBkZXZlbG9wbWVudCB0aGF0IGRpdmVyZ2VkIGFuZAordGhlbiBtZXJnZWQgYmFjayB0b2dldGhlciwgdGhlIG9yZGVyIGluIHdoaWNoICdnaXQgbG9nJyBwcmVzZW50cwordGhvc2UgY29tbWl0cyBpcyBtZWFuaW5nbGVzcy4KKworTW9zdCBwcm9qZWN0cyB3aXRoIG11bHRpcGxlIGNvbnRyaWJ1dG9ycyAoc3VjaCBhcyB0aGUgTGludXgga2VybmVsLAorb3IgR2l0IGl0c2VsZikgaGF2ZSBmcmVxdWVudCBtZXJnZXMsIGFuZCAnZ2l0aycgZG9lcyBhIGJldHRlciBqb2Igb2YKK3Zpc3VhbGl6aW5nIHRoZWlyIGhpc3RvcnkuICBGb3IgZXhhbXBsZSwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrIC0tc2luY2U9IjIgd2Vla3MgYWdvIiBkcml2ZXJzLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbGxvd3MgeW91IHRvIGJyb3dzZSBhbnkgY29tbWl0cyBmcm9tIHRoZSBsYXN0IDIgd2Vla3Mgb2YgY29tbWl0cwordGhhdCBtb2RpZmllZCBmaWxlcyB1bmRlciB0aGUgImRyaXZlcnMiIGRpcmVjdG9yeS4gIChOb3RlOiB5b3UgY2FuCithZGp1c3QgZ2l0aydzIGZvbnRzIGJ5IGhvbGRpbmcgZG93biB0aGUgY29udHJvbCBrZXkgd2hpbGUgcHJlc3NpbmcKKyItIiBvciAiKyIuKQorCitGaW5hbGx5LCBtb3N0IGNvbW1hbmRzIHRoYXQgdGFrZSBmaWxlbmFtZXMgd2lsbCBvcHRpb25hbGx5IGFsbG93IHlvdQordG8gcHJlY2VkZSBhbnkgZmlsZW5hbWUgYnkgYSBjb21taXQsIHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIHZlcnNpb24KK29mIHRoZSBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIHYyLjU6TWFrZWZpbGUgSEVBRDpNYWtlZmlsZS5pbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGFsc28gdXNlICdnaXQgc2hvdycgdG8gc2VlIGFueSBzdWNoIGZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgdjIuNTpNYWtlZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOZXh0IFN0ZXBzCistLS0tLS0tLS0tCisKK1RoaXMgdHV0b3JpYWwgc2hvdWxkIGJlIGVub3VnaCB0byBwZXJmb3JtIGJhc2ljIGRpc3RyaWJ1dGVkIHJldmlzaW9uCitjb250cm9sIGZvciB5b3VyIHByb2plY3RzLiAgSG93ZXZlciwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGVwdGgKK2FuZCBwb3dlciBvZiBHaXQgeW91IG5lZWQgdG8gdW5kZXJzdGFuZCB0d28gc2ltcGxlIGlkZWFzIG9uIHdoaWNoIGl0CitpcyBiYXNlZDoKKworICAqIFRoZSBvYmplY3QgZGF0YWJhc2UgaXMgdGhlIHJhdGhlciBlbGVnYW50IHN5c3RlbSB1c2VkIHRvCisgICAgc3RvcmUgdGhlIGhpc3Rvcnkgb2YgeW91ciBwcm9qZWN0LS1maWxlcywgZGlyZWN0b3JpZXMsIGFuZAorICAgIGNvbW1pdHMuCisKKyAgKiBUaGUgaW5kZXggZmlsZSBpcyBhIGNhY2hlIG9mIHRoZSBzdGF0ZSBvZiBhIGRpcmVjdG9yeSB0cmVlLAorICAgIHVzZWQgdG8gY3JlYXRlIGNvbW1pdHMsIGNoZWNrIG91dCB3b3JraW5nIGRpcmVjdG9yaWVzLCBhbmQKKyAgICBob2xkIHRoZSB2YXJpb3VzIHRyZWVzIGludm9sdmVkIGluIGEgbWVyZ2UuCisKK1BhcnQgdHdvIG9mIHRoaXMgdHV0b3JpYWwgZXhwbGFpbnMgdGhlIG9iamVjdAorZGF0YWJhc2UsIHRoZSBpbmRleCBmaWxlLCBhbmQgYSBmZXcgb3RoZXIgb2RkcyBhbmQgZW5kcyB0aGF0IHlvdSdsbAorbmVlZCB0byBtYWtlIHRoZSBtb3N0IG9mIEdpdC4gWW91IGNhbiBmaW5kIGl0IGF0IGxpbmtnaXQ6Z2l0dHV0b3JpYWwtMls3XS4KKworSWYgeW91IGRvbid0IHdhbnQgdG8gY29udGludWUgd2l0aCB0aGF0IHJpZ2h0IGF3YXksIGEgZmV3IG90aGVyCitkaWdyZXNzaW9ucyB0aGF0IG1heSBiZSBpbnRlcmVzdGluZyBhdCB0aGlzIHBvaW50IGFyZToKKworICAqIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSwgbGlua2dpdDpnaXQtYW1bMV06IFRoZXNlIGNvbnZlcnQKKyAgICBzZXJpZXMgb2YgZ2l0IGNvbW1pdHMgaW50byBlbWFpbGVkIHBhdGNoZXMsIGFuZCB2aWNlIHZlcnNhLAorICAgIHVzZWZ1bCBmb3IgcHJvamVjdHMgc3VjaCBhcyB0aGUgTGludXgga2VybmVsIHdoaWNoIHJlbHkgaGVhdmlseQorICAgIG9uIGVtYWlsZWQgcGF0Y2hlcy4KKworICAqIGxpbmtnaXQ6Z2l0LWJpc2VjdFsxXTogV2hlbiB0aGVyZSBpcyBhIHJlZ3Jlc3Npb24gaW4geW91cgorICAgIHByb2plY3QsIG9uZSB3YXkgdG8gdHJhY2sgZG93biB0aGUgYnVnIGlzIGJ5IHNlYXJjaGluZyB0aHJvdWdoCisgICAgdGhlIGhpc3RvcnkgdG8gZmluZCB0aGUgZXhhY3QgY29tbWl0IHRoYXQncyB0byBibGFtZS4gIEdpdCBiaXNlY3QKKyAgICBjYW4gaGVscCB5b3UgcGVyZm9ybSBhIGJpbmFyeSBzZWFyY2ggZm9yIHRoYXQgY29tbWl0LiAgSXQgaXMKKyAgICBzbWFydCBlbm91Z2ggdG8gcGVyZm9ybSBhIGNsb3NlLXRvLW9wdGltYWwgc2VhcmNoIGV2ZW4gaW4gdGhlCisgICAgY2FzZSBvZiBjb21wbGV4IG5vbi1saW5lYXIgaGlzdG9yeSB3aXRoIGxvdHMgb2YgbWVyZ2VkIGJyYW5jaGVzLgorCisgICogbGlua2dpdDpnaXR3b3JrZmxvd3NbN106IEdpdmVzIGFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkCisgICAgd29ya2Zsb3dzLgorCisgICogbGlua2dpdDpnaXRldmVyeWRheVs3XTogRXZlcnlkYXkgR2l0IHdpdGggMjAgQ29tbWFuZHMgT3IgU28uCisKKyAgKiBsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN106IEdpdCBmb3IgQ1ZTIHVzZXJzLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0dHV0b3JpYWwtMls3XSwKK2xpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSwKK2xpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10sCitsaW5rZ2l0OmdpdC1oZWxwWzFdLAorbGlua2dpdDpnaXR3b3JrZmxvd3NbN10sCitsaW5rZ2l0OmdpdGV2ZXJ5ZGF5WzddLAorbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHdlYi5jb25mLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0d2ViLmNvbmYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NjNhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHdlYi5jb25mLnR4dApAQCAtMCwwICsxLDk3MCBAQAorZ2l0d2ViLmNvbmYoNSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHdlYi5jb25mIC0gR2l0d2ViIChHaXQgd2ViIGludGVyZmFjZSkgY29uZmlndXJhdGlvbiBmaWxlCisKK1NZTk9QU0lTCistLS0tLS0tLQorL2V0Yy9naXR3ZWIuY29uZiwgL2V0Yy9naXR3ZWItY29tbW9uLmNvbmYsICRHSVRXRUJESVIvZ2l0d2ViX2NvbmZpZy5wZXJsCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGUgZ2l0d2ViIENHSSBzY3JpcHQgZm9yIHZpZXdpbmcgR2l0IHJlcG9zaXRvcmllcyBvdmVyIHRoZSB3ZWIgdXNlcyBhCitwZXJsIHNjcmlwdCBmcmFnbWVudCBhcyBpdHMgY29uZmlndXJhdGlvbiBmaWxlLiAgWW91IGNhbiBzZXQgdmFyaWFibGVzCit1c2luZyAiYG91ciAkdmFyaWFibGUgPSB2YWx1ZWAiOyB0ZXh0IGZyb20gYSAiIyIgY2hhcmFjdGVyIHVudGlsIHRoZQorZW5kIG9mIGEgbGluZSBpcyBpZ25vcmVkLiAgU2VlICpwZXJsc3luKigxKSBmb3IgZGV0YWlscy4KKworQW4gZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGdpdHdlYiBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGh0dHA6Ly9naXQuZXhhbXBsZS5vcmcKKyMKK291ciAkcHJvamVjdHJvb3QgPSAiL3Nydi9naXQiOyAjIEZIUyByZWNvbW1lbmRhdGlvbgorb3VyICRzaXRlX25hbWUgPSAnRXhhbXBsZS5vcmcgPj4gUmVwb3MnOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldHRpbmdzIHRoYXQKK3dlcmUgYnVpbHQgaW50byBnaXR3ZWIgYXQgdGhlIHRpbWUgdGhlICdnaXR3ZWIuY2dpJyBzY3JpcHQgd2FzIGdlbmVyYXRlZC4KKworV2hpbGUgb25lIGNvdWxkIGp1c3QgYWx0ZXIgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaW4gdGhlIGdpdHdlYgorQ0dJIGl0c2VsZiwgdGhvc2UgY2hhbmdlcyB3b3VsZCBiZSBsb3N0IHVwb24gdXBncmFkZS4gIENvbmZpZ3VyYXRpb24KK3NldHRpbmdzIG1pZ2h0IGFsc28gYmUgcGxhY2VkIGludG8gYSBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUKK0NHSSBzY3JpcHQgd2l0aCB0aGUgZGVmYXVsdCBuYW1lICdnaXR3ZWJfY29uZmlnLnBlcmwnIC0tIGFsbG93aW5nCitvbmUgdG8gaGF2ZSBtdWx0aXBsZSBnaXR3ZWIgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGJ5Cit0aGUgdXNlIG9mIHN5bWxpbmtzLgorCitOb3RlIHRoYXQgc29tZSBjb25maWd1cmF0aW9uIGNhbiBiZSBjb250cm9sbGVkIG9uIHBlci1yZXBvc2l0b3J5IHJhdGhlciB0aGFuCitnaXR3ZWItd2lkZSBiYXNpczogc2VlICJQZXItcmVwb3NpdG9yeSBnaXR3ZWIgY29uZmlndXJhdGlvbiIgc3Vic2VjdGlvbiBvbgorbGlua2dpdDpnaXR3ZWJbMV0gbWFucGFnZS4KKworCitESVNDVVNTSU9OCistLS0tLS0tLS0tCitHaXR3ZWIgcmVhZHMgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gdGhlIGZvbGxvd2luZyBzb3VyY2VzIGluIHRoZQorZm9sbG93aW5nIG9yZGVyOgorCisgKiBidWlsdC1pbiB2YWx1ZXMgKHNvbWUgc2V0IGR1cmluZyBidWlsZCBzdGFnZSksCisKKyAqIGNvbW1vbiBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvCisgICBgL2V0Yy9naXR3ZWItY29tbW9uLmNvbmZgKSwKKworICogZWl0aGVyIHBlci1pbnN0YW5jZSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICdnaXR3ZWJfY29uZmlnLnBlcmwnCisgICBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGluc3RhbGxlZCBnaXR3ZWIpLCBvciBpZiBpdCBkb2VzIG5vdCBleGlzdHMKKyAgIHRoZW4gZmFsbGJhY2sgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlIChkZWZhdWx0cyB0byBgL2V0Yy9naXR3ZWIuY29uZmApLgorCitWYWx1ZXMgb2J0YWluZWQgaW4gbGF0ZXIgY29uZmlndXJhdGlvbiBmaWxlcyBvdmVycmlkZSB2YWx1ZXMgb2J0YWluZWQgZWFybGllcgoraW4gdGhlIGFib3ZlIHNlcXVlbmNlLgorCitMb2NhdGlvbnMgb2YgdGhlIGNvbW1vbiBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUsIHRoZSBmYWxsYmFjaworc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZCB0aGUgcGVyLWluc3RhbmNlIGNvbmZpZ3VyYXRpb24gZmlsZQorYXJlIGRlZmluZWQgYXQgY29tcGlsZSB0aW1lIHVzaW5nIGJ1aWxkLXRpbWUgTWFrZWZpbGUgY29uZmlndXJhdGlvbgordmFyaWFibGVzLCByZXNwZWN0aXZlbHkgYEdJVFdFQl9DT05GSUdfQ09NTU9OYCwgYEdJVFdFQl9DT05GSUdfU1lTVEVNYAorYW5kIGBHSVRXRUJfQ09ORklHYC4KKworWW91IGNhbiBhbHNvIG92ZXJyaWRlIGxvY2F0aW9ucyBvZiBnaXR3ZWIgY29uZmlndXJhdGlvbiBmaWxlcyBkdXJpbmcKK3J1bnRpbWUgYnkgc2V0dGluZyB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlczoKK2BHSVRXRUJfQ09ORklHX0NPTU1PTmAsIGBHSVRXRUJfQ09ORklHX1NZU1RFTWAgYW5kIGBHSVRXRUJfQ09ORklHYAordG8gYSBub24tZW1wdHkgdmFsdWUuCisKKworVGhlIHN5bnRheCBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBpcyB0aGF0IG9mIFBlcmwsIHNpbmNlIHRoZXNlIGZpbGVzIGFyZQoraGFuZGxlZCBieSBzb3VyY2luZyB0aGVtIGFzIGZyYWdtZW50cyBvZiBQZXJsIGNvZGUgKHRoZSBsYW5ndWFnZSB0aGF0CitnaXR3ZWIgaXRzZWxmIGlzIHdyaXR0ZW4gaW4pLiBWYXJpYWJsZXMgYXJlIHR5cGljYWxseSBzZXQgdXNpbmcgdGhlCitgb3VyYCBxdWFsaWZpZXIgKGFzIGluICJgb3VyICR2YXJpYWJsZSA9IDx2YWx1ZT47YCIpIHRvIGF2b2lkIHN5bnRheAorZXJyb3JzIGlmIGEgbmV3IHZlcnNpb24gb2YgZ2l0d2ViIG5vIGxvbmdlciB1c2VzIGEgdmFyaWFibGUgYW5kIHRoZXJlZm9yZQorc3RvcHMgZGVjbGFyaW5nIGl0LgorCitZb3UgY2FuIGluY2x1ZGUgb3RoZXIgY29uZmlndXJhdGlvbiBmaWxlIHVzaW5nIHJlYWRfY29uZmlnX2ZpbGUoKQorc3Vicm91dGluZS4gIEZvciBleGFtcGxlLCBvbmUgbWlnaHQgd2FudCB0byBwdXQgZ2l0d2ViIGNvbmZpZ3VyYXRpb24KK3JlbGF0ZWQgdG8gYWNjZXNzIGNvbnRyb2wgZm9yIHZpZXdpbmcgcmVwb3NpdG9yaWVzIHZpYSBHaXRvbGl0ZSAob25lCitvZiBHaXQgcmVwb3NpdG9yeSBtYW5hZ2VtZW50IHRvb2xzKSBpbiBhIHNlcGFyYXRlIGZpbGUsIGUuZy4gaW4KK2AvZXRjL2dpdHdlYi1naXRvbGl0ZS5jb25mYC4gIFRvIGluY2x1ZGUgaXQsIHB1dAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVhZF9jb25maWdfZmlsZSgiL2V0Yy9naXR3ZWItZ2l0b2xpdGUuY29uZiIpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc29tZXdoZXJlIGluIGdpdHdlYiBjb25maWd1cmF0aW9uIGZpbGUgdXNlZCwgZS5nLiBpbiBwZXItaW5zdGFsbGF0aW9uCitnaXR3ZWIgY29uZmlndXJhdGlvbiBmaWxlLiAgTm90ZSB0aGF0IHJlYWRfY29uZmlnX2ZpbGUoKSBjaGVja3MgaXRzZWxmCit0aGF0IHRoZSBmaWxlIGl0IHJlYWRzIGV4aXN0cywgYW5kIGRvZXMgbm90aGluZyBpZiBpdCBpcyBub3QgZm91bmQuCitJdCBhbHNvIGhhbmRsZXMgZXJyb3JzIGluIGluY2x1ZGVkIGZpbGUuCisKKworVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3aXRoIG5vIGNvbmZpZ3VyYXRpb24gZmlsZSBhdCBhbGwgbWF5IHdvcmsKK3BlcmZlY3RseSB3ZWxsIGZvciBzb21lIGluc3RhbGxhdGlvbnMuICBTdGlsbCwgYSBjb25maWd1cmF0aW9uIGZpbGUgaXMKK3VzZWZ1bCBmb3IgY3VzdG9taXppbmcgb3IgdHdlYWtpbmcgdGhlIGJlaGF2aW9yIG9mIGdpdHdlYiBpbiBtYW55IHdheXMsIGFuZAorc29tZSBvcHRpb25hbCBmZWF0dXJlcyB3aWxsIG5vdCBiZSBwcmVzZW50IHVubGVzcyBleHBsaWNpdGx5IGVuYWJsZWQgdXNpbmcKK3RoZSBjb25maWd1cmFibGUgYCVmZWF0dXJlc2AgdmFyaWFibGUgKHNlZSBhbHNvICJDb25maWd1cmluZyBnaXR3ZWIKK2ZlYXR1cmVzIiBzZWN0aW9uIGJlbG93KS4KKworCitDT05GSUdVUkFUSU9OIFZBUklBQkxFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NvbWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgaGF2ZSB0aGVpciBkZWZhdWx0IHZhbHVlcyAoZW1iZWRkZWQgaW4gdGhlIENHSQorc2NyaXB0KSBzZXQgZHVyaW5nIGJ1aWxkaW5nIGdpdHdlYiAtLSBpZiB0aGF0IGlzIHRoZSBjYXNlLCB0aGlzIGZhY3QgaXMgcHV0CitpbiB0aGVpciBkZXNjcmlwdGlvbi4gIFNlZSBnaXR3ZWIncyAnSU5TVEFMTCcgZmlsZSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGJ1aWxkaW5nCithbmQgaW5zdGFsbGluZyBnaXR3ZWIuCisKKworTG9jYXRpb24gb2YgcmVwb3NpdG9yaWVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBkZXNjcmliZWQgYmVsb3cgY29udHJvbCBob3cgZ2l0d2ViIGZpbmRzCitHaXQgcmVwb3NpdG9yaWVzLCBhbmQgaG93IHJlcG9zaXRvcmllcyBhcmUgZGlzcGxheWVkIGFuZCBhY2Nlc3NlZC4KKworU2VlIGFsc28gIlJlcG9zaXRvcmllcyIgYW5kIGxhdGVyIHN1YnNlY3Rpb25zIGluIGxpbmtnaXQ6Z2l0d2ViWzFdIG1hbnBhZ2UuCisKKyRwcm9qZWN0cm9vdDo6CisJQWJzb2x1dGUgZmlsZXN5c3RlbSBwYXRoIHdoaWNoIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHByb2plY3QgcGF0aDsKKwl0aGUgcGF0aCB0byByZXBvc2l0b3J5IGlzIGAkcHJvamVjdHJvb3QvJHByb2plY3RgLiAgU2V0IHRvCisJYCRHSVRXRUJfUFJPSkVDVFJPT1RgIGR1cmluZyBpbnN0YWxsYXRpb24uICBUaGlzIHZhcmlhYmxlIGhhcyB0byBiZQorCXNldCBjb3JyZWN0bHkgZm9yIGdpdHdlYiB0byBmaW5kIHJlcG9zaXRvcmllcy4KKysKK0ZvciBleGFtcGxlLCBpZiBgJHByb2plY3Ryb290YCBpcyBzZXQgdG8gIi9zcnYvZ2l0IiBieSBwdXR0aW5nIHRoZSBmb2xsb3dpbmcKK2luIGdpdHdlYiBjb25maWcgZmlsZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291ciAkcHJvamVjdHJvb3QgPSAiL3Nydi9naXQiOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKwordGhlbgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitodHRwOi8vZ2l0LmV4YW1wbGUuY29tL2dpdHdlYi5jZ2k/cD1mb28vYmFyLmdpdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCithbmQgaXRzIHBhdGhfaW5mbyBiYXNlZCBlcXVpdmFsZW50CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2h0dHA6Ly9naXQuZXhhbXBsZS5jb20vZ2l0d2ViLmNnaS9mb28vYmFyLmdpdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCit3aWxsIG1hcCB0byB0aGUgcGF0aCBgL3Nydi9naXQvZm9vL2Jhci5naXRgIG9uIHRoZSBmaWxlc3lzdGVtLgorCiskcHJvamVjdHNfbGlzdDo6CisJTmFtZSBvZiBhIHBsYWluIHRleHQgZmlsZSBsaXN0aW5nIHByb2plY3RzLCBvciBhIG5hbWUgb2YgZGlyZWN0b3J5CisJdG8gYmUgc2Nhbm5lZCBmb3IgcHJvamVjdHMuCisrCitQcm9qZWN0IGxpc3QgZmlsZXMgc2hvdWxkIGxpc3Qgb25lIHByb2plY3QgcGVyIGxpbmUsIHdpdGggZWFjaCBsaW5lCitoYXZpbmcgdGhlIGZvbGxvd2luZyBmb3JtYXQKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8VVJJLWVuY29kZWQgZmlsZXN5c3RlbSBwYXRoIHRvIHJlcG9zaXRvcnk+IFNQIDxVUkktZW5jb2RlZCByZXBvc2l0b3J5IG93bmVyPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYEdJVFdFQl9MSVNUYAorbWFrZWZpbGUgdmFyaWFibGUgYXQgaW5zdGFsbGF0aW9uIHRpbWUuICBJZiB0aGlzIHZhcmlhYmxlIGlzIGVtcHR5LCBnaXR3ZWIKK3dpbGwgZmFsbCBiYWNrIHRvIHNjYW5uaW5nIHRoZSBgJHByb2plY3Ryb290YCBkaXJlY3RvcnkgZm9yIHJlcG9zaXRvcmllcy4KKworJHByb2plY3RfbWF4ZGVwdGg6OgorCUlmIGAkcHJvamVjdHNfbGlzdGAgdmFyaWFibGUgaXMgdW5zZXQsIGdpdHdlYiB3aWxsIHJlY3Vyc2l2ZWx5CisJc2NhbiBmaWxlc3lzdGVtIGZvciBHaXQgcmVwb3NpdG9yaWVzLiAgVGhlIGAkcHJvamVjdF9tYXhkZXB0aGAKKwlpcyB1c2VkIHRvIGxpbWl0IHRyYXZlcnNpbmcgZGVwdGgsIHJlbGF0aXZlIHRvIGAkcHJvamVjdHJvb3RgCisJKHN0YXJ0aW5nIHBvaW50KTsgaXQgbWVhbnMgdGhhdCBkaXJlY3RvcmllcyB3aGljaCBhcmUgZnVydGhlcgorCWZyb20gYCRwcm9qZWN0cm9vdGAgdGhhbiBgJHByb2plY3RfbWF4ZGVwdGhgIHdpbGwgYmUgc2tpcHBlZC4KKysKK0l0IGlzIHB1cmVseSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yaWdpbmFsbHkgaW50ZW5kZWQgZm9yIE1hY09TIFgsCit3aGVyZSByZWN1cnNpdmUgZGlyZWN0b3J5IHRyYXZlcnNhbCBpcyBzbG93LiAgR2l0d2ViIGZvbGxvd3Mgc3ltYm9saWMKK2xpbmtzLCBidXQgaXQgZGV0ZWN0cyBjeWNsZXMsIGlnbm9yaW5nIGFueSBkdXBsaWNhdGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgorKworVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBidWlsZC10aW1lCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBHSVRXRUJfUFJPSkVDVF9NQVhERVBUSGAsIHdoaWNoIGRlZmF1bHRzIHRvCisyMDA3LgorCiskZXhwb3J0X29rOjoKKwlTaG93IHJlcG9zaXRvcnkgb25seSBpZiB0aGlzIGZpbGUgZXhpc3RzIChpbiByZXBvc2l0b3J5KS4gIE9ubHkKKwllZmZlY3RpdmUgaWYgdGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdHJ1ZS4gIENhbiBiZSBzZXQgd2hlbgorCWJ1aWxkaW5nIGdpdHdlYiBieSBzZXR0aW5nIGBHSVRXRUJfRVhQT1JUX09LYC4gIFRoaXMgcGF0aCBpcworCXJlbGF0aXZlIHRvIGBHSVRfRElSYC4gIGdpdC1kYWVtb25bMV0gdXNlcyAnZ2l0LWRhZW1vbi1leHBvcnQtb2snLAorCXVubGVzcyBzdGFydGVkIHdpdGggYC0tZXhwb3J0LWFsbGAuICBCeSBkZWZhdWx0IHRoaXMgdmFyaWFibGUgaXMKKwlub3Qgc2V0LCB3aGljaCBtZWFucyB0aGF0IHRoaXMgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmLgorCiskZXhwb3J0X2F1dGhfaG9vazo6CisJRnVuY3Rpb24gdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggcmVwb3NpdG9yaWVzIHNob3VsZCBiZSBzaG93bi4KKwlUaGlzIHN1YnJvdXRpbmUgc2hvdWxkIHRha2Ugb25lIHBhcmFtZXRlciwgdGhlIGZ1bGwgcGF0aCB0bworCWEgcHJvamVjdCwgYW5kIGlmIGl0IHJldHVybnMgdHJ1ZSwgdGhhdCBwcm9qZWN0IHdpbGwgYmUgaW5jbHVkZWQKKwlpbiB0aGUgcHJvamVjdHMgbGlzdCBhbmQgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggZ2l0d2ViIGFzIGxvbmcKKwlhcyBpdCBmdWxmaWxscyB0aGUgb3RoZXIgcmVxdWlyZW1lbnRzIGRlc2NyaWJlZCBieSAkZXhwb3J0X29rLAorCSRwcm9qZWN0c19saXN0LCBhbmQgJHByb2plY3RzX21heGRlcHRoLiAgRXhhbXBsZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291ciAkZXhwb3J0X2F1dGhfaG9vayA9IHN1YiB7IHJldHVybiAtZSAiJF9bMF0vZ2l0LWRhZW1vbi1leHBvcnQtb2siOyB9OworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKwordGhvdWdoIHRoZSBhYm92ZSBtaWdodCBiZSBkb25lIGJ5IHVzaW5nIGAkZXhwb3J0X29rYCBpbnN0ZWFkCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXIgJGV4cG9ydF9vayA9ICJnaXQtZGFlbW9uLWV4cG9ydC1vayI7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitJZiBub3Qgc2V0IChkZWZhdWx0KSwgaXQgbWVhbnMgdGhhdCB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQuCisrCitTZWUgYWxzbyBtb3JlIGludm9sdmVkIGV4YW1wbGUgaW4gIkNvbnRyb2xsaW5nIGFjY2VzcyB0byBHaXQgcmVwb3NpdG9yaWVzIgorc3Vic2VjdGlvbiBvbiBsaW5rZ2l0OmdpdHdlYlsxXSBtYW5wYWdlLgorCiskc3RyaWN0X2V4cG9ydDo6CisJT25seSBhbGxvdyB2aWV3aW5nIG9mIHJlcG9zaXRvcmllcyBhbHNvIHNob3duIG9uIHRoZSBvdmVydmlldyBwYWdlLgorCVRoaXMgZm9yIGV4YW1wbGUgbWFrZXMgYCRleHBvcnRfb2tgIGZpbGUgZGVjaWRlIGlmIHJlcG9zaXRvcnkgaXMKKwlhdmFpbGFibGUgYW5kIG5vdCBvbmx5IGlmIGl0IGlzIHNob3duLiAgSWYgYCRwcm9qZWN0c19saXN0YCBwb2ludHMgdG8KKwlmaWxlIHdpdGggbGlzdCBvZiBwcm9qZWN0LCBvbmx5IHRob3NlIHJlcG9zaXRvcmllcyBsaXN0ZWQgd291bGQgYmUKKwlhdmFpbGFibGUgZm9yIGdpdHdlYi4gIENhbiBiZSBzZXQgZHVyaW5nIGJ1aWxkaW5nIGdpdHdlYiB2aWEKKwlgR0lUV0VCX1NUUklDVF9FWFBPUlRgLiAgQnkgZGVmYXVsdCB0aGlzIHZhcmlhYmxlIGlzIG5vdCBzZXQsIHdoaWNoCisJbWVhbnMgdGhhdCB5b3UgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aG9zZSByZXBvc2l0b3JpZXMgdGhhdCBhcmUgaGlkZGVuCisJZnJvbSBwcm9qZWN0cyBsaXN0IHBhZ2UgKGUuZy4gdGhlIGFyZSBub3QgbGlzdGVkIGluIHRoZSAkcHJvamVjdHNfbGlzdAorCWZpbGUpLgorCisKK0ZpbmRpbmcgZmlsZXMKK35+fn5+fn5+fn5+fn4KK1RoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGVsbCBnaXR3ZWIgd2hlcmUgdG8gZmluZCBmaWxlcy4KK1RoZSB2YWx1ZXMgb2YgdGhlc2UgdmFyaWFibGVzIGFyZSBwYXRocyBvbiB0aGUgZmlsZXN5c3RlbS4KKworJEdJVDo6CisJQ29yZSBnaXQgZXhlY3V0YWJsZSB0byB1c2UuICBCeSBkZWZhdWx0IHNldCB0byBgJEdJVF9CSU5ESVIvZ2l0YCwgd2hpY2gKKwlpbiB0dXJuIGlzIGJ5IGRlZmF1bHQgc2V0IHRvIGAkKGJpbmRpcikvZ2l0YC4gIElmIHlvdSB1c2UgR2l0IGluc3RhbGxlZAorCWZyb20gYSBiaW5hcnkgcGFja2FnZSwgeW91IHNob3VsZCB1c3VhbGx5IHNldCB0aGlzIHRvICIvdXNyL2Jpbi9naXQiLgorCVRoaXMgY2FuIGp1c3QgYmUgImdpdCIgaWYgeW91ciB3ZWIgc2VydmVyIGhhcyBhIHNlbnNpYmxlIFBBVEg7IGZyb20KKwlzZWN1cml0eSBwb2ludCBvZiB2aWV3IGl0IGlzIGJldHRlciB0byB1c2UgYWJzb2x1dGUgcGF0aCB0byBnaXQgYmluYXJ5LgorCUlmIHlvdSBoYXZlIG11bHRpcGxlIEdpdCB2ZXJzaW9ucyBpbnN0YWxsZWQgaXQgY2FuIGJlIHVzZWQgdG8gY2hvb3NlCisJd2hpY2ggb25lIHRvIHVzZS4gIE11c3QgYmUgKGNvcnJlY3RseSkgc2V0IGZvciBnaXR3ZWIgdG8gYmUgYWJsZSB0bworCXdvcmsuCisKKyRtaW1ldHlwZXNfZmlsZTo6CisJRmlsZSB0byB1c2UgZm9yIChmaWxlbmFtZSBleHRlbnNpb24gYmFzZWQpIGd1ZXNzaW5nIG9mIE1JTUUgdHlwZXMgYmVmb3JlCisJdHJ5aW5nIGAvZXRjL21pbWUudHlwZXNgLiAgKk5PVEUqIHRoYXQgdGhpcyBwYXRoLCBpZiByZWxhdGl2ZSwgaXMgdGFrZW4KKwlhcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBHaXQgcmVwb3NpdG9yeSwgbm90IHRvIENHSSBzY3JpcHQuICBJZiB1bnNldCwKKwlvbmx5IGAvZXRjL21pbWUudHlwZXNgIGlzIHVzZWQgKGlmIHByZXNlbnQgb24gZmlsZXN5c3RlbSkuICBJZiBubyBtaW1ldHlwZXMKKwlmaWxlIGlzIGZvdW5kLCBtaW1ldHlwZSBndWVzc2luZyBiYXNlZCBvbiBleHRlbnNpb24gb2YgZmlsZSBpcyBkaXNhYmxlZC4KKwlVbnNldCBieSBkZWZhdWx0LgorCiskaGlnaGxpZ2h0X2Jpbjo6CisJUGF0aCB0byB0aGUgaGlnaGxpZ2h0IGV4ZWN1dGFibGUgdG8gdXNlIChpdCBtdXN0IGJlIHRoZSBvbmUgZnJvbQorCWh0dHA6Ly93d3cuYW5kcmUtc2ltb24uZGVbXSBkdWUgdG8gYXNzdW1wdGlvbnMgYWJvdXQgcGFyYW1ldGVycyBhbmQgb3V0cHV0KS4KKwlCeSBkZWZhdWx0IHNldCB0byAnaGlnaGxpZ2h0Jzsgc2V0IGl0IHRvIGZ1bGwgcGF0aCB0byBoaWdobGlnaHQKKwlleGVjdXRhYmxlIGlmIGl0IGlzIG5vdCBpbnN0YWxsZWQgb24geW91ciB3ZWIgc2VydmVyJ3MgUEFUSC4KKwlOb3RlIHRoYXQgJ2hpZ2hsaWdodCcgZmVhdHVyZSBtdXN0IGJlIHNldCBmb3IgZ2l0d2ViIHRvIGFjdHVhbGx5CisJdXNlIHN5bnRheCBoaWdobGlnaHRpbmcuCisrCisqTk9URSo6IGZvciBhIGZpbGUgdG8gYmUgaGlnaGxpZ2h0ZWQsIGl0cyBzeW50YXggdHlwZSBtdXN0IGJlIGRldGVjdGVkCithbmQgdGhhdCBzeW50YXggbXVzdCBiZSBzdXBwb3J0ZWQgYnkgImhpZ2hsaWdodCIuICBUaGUgZGVmYXVsdCBzeW50YXgKK2RldGVjdGlvbiBpcyBtaW5pbWFsLCBhbmQgdGhlcmUgYXJlIG1hbnkgc3VwcG9ydGVkIHN5bnRheCB0eXBlcyB3aXRoIG5vCitkZXRlY3Rpb24gYnkgZGVmYXVsdC4gIFRoZXJlIGFyZSB0aHJlZSBvcHRpb25zIGZvciBhZGRpbmcgc3ludGF4CitkZXRlY3Rpb24uICBUaGUgZmlyc3QgYW5kIHNlY29uZCBwcmlvcml0eSBhcmUgYCVoaWdobGlnaHRfYmFzZW5hbWVgIGFuZAorYCVoaWdobGlnaHRfZXh0YCwgd2hpY2ggZGV0ZWN0IGJhc2VkIG9uIGJhc2VuYW1lICh0aGUgZnVsbCBmaWxlbmFtZSwgZm9yCitleGFtcGxlICJNYWtlZmlsZSIpIGFuZCBleHRlbnNpb24gKGZvciBleGFtcGxlICJzaCIpLiAgVGhlIGtleXMgb2YgdGhlc2UKK2hhc2hlcyBhcmUgdGhlIGJhc2VuYW1lIGFuZCBleHRlbnNpb24sIHJlc3BlY3RpdmVseSwgYW5kIHRoZSB2YWx1ZSBmb3IgYQorZ2l2ZW4ga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBzeW50YXggdG8gYmUgcGFzc2VkIHZpYSBgLS1zeW50YXggPHN5bnRheD5gCit0byAiaGlnaGxpZ2h0Ii4gIFRoZSBsYXN0IHByaW9yaXR5IGlzIHRoZSAiaGlnaGxpZ2h0IiBjb25maWd1cmF0aW9uIG9mCitgU2hlYmFuZ2AgcmVndWxhciBleHByZXNzaW9ucyB0byBkZXRlY3QgdGhlIGxhbmd1YWdlIGJhc2VkIG9uIHRoZSBmaXJzdAorbGluZSBpbiB0aGUgZmlsZSwgKGZvciBleGFtcGxlLCBtYXRjaGluZyB0aGUgbGluZSAiIyEvYmluL2Jhc2giKS4gIFNlZQordGhlIGhpZ2hsaWdodCBkb2N1bWVudGF0aW9uIGFuZCB0aGUgZGVmYXVsdCBjb25maWcgYXQKKy9ldGMvaGlnaGxpZ2h0L2ZpbGV0eXBlcy5jb25mIGZvciBtb3JlIGRldGFpbHMuCisrCitGb3IgZXhhbXBsZSBpZiByZXBvc2l0b3JpZXMgeW91IGFyZSBob3N0aW5nIHVzZSAicGh0bWwiIGV4dGVuc2lvbiBmb3IKK1BIUCBmaWxlcywgYW5kIHlvdSB3YW50IHRvIGhhdmUgY29ycmVjdCBzeW50YXgtaGlnaGxpZ2h0aW5nIGZvciB0aG9zZQorZmlsZXMsIHlvdSBjYW4gYWRkIHRoZSBmb2xsb3dpbmcgdG8gZ2l0d2ViIGNvbmZpZ3VyYXRpb246CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291ciAlaGlnaGxpZ2h0X2V4dDsKKyRoaWdobGlnaHRfZXh0eydwaHRtbCd9ID0gJ3BocCc7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitMaW5rcyBhbmQgdGhlaXIgdGFyZ2V0cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBkZXNjcmliZWQgYmVsb3cgY29uZmlndXJlIHNvbWUgb2YgZ2l0d2ViIGxpbmtzOgordGhlaXIgdGFyZ2V0IGFuZCB0aGVpciBsb29rICh0ZXh0IG9yIGltYWdlKSwgYW5kIHdoZXJlIHRvIGZpbmQgcGFnZQorcHJlcmVxdWlzaXRlcyAoc3R5bGVzaGVldCwgZmF2aWNvbiwgaW1hZ2VzLCBzY3JpcHRzKS4gIFVzdWFsbHkgdGhleSBhcmUgbGVmdAorYXQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMsIHdpdGggdGhlIHBvc3NpYmxlIGV4Y2VwdGlvbiBvZiBgQHN0eWxlc2hlZXRzYAordmFyaWFibGUuCisKK0BzdHlsZXNoZWV0czo6CisJTGlzdCBvZiBVUklzIG9mIHN0eWxlc2hlZXRzIChyZWxhdGl2ZSB0byB0aGUgYmFzZSBVUkkgb2YgYSBwYWdlKS4gWW91CisJbWlnaHQgc3BlY2lmeSBtb3JlIHRoYW4gb25lIHN0eWxlc2hlZXQsIGZvciBleGFtcGxlIHRvIHVzZSAiZ2l0d2ViLmNzcyIKKwlhcyBiYXNlIHdpdGggc2l0ZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zIGluIGEgc2VwYXJhdGUgc3R5bGVzaGVldAorCXRvIG1ha2UgaXQgZWFzaWVyIHRvIHVwZ3JhZGUgZ2l0d2ViLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gYWRkCisJYSBgc2l0ZWAgc3R5bGVzaGVldCBieSBwdXR0aW5nCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwdXNoIEBzdHlsZXNoZWV0cywgImdpdHdlYi1zaXRlLmNzcyI7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitpbiB0aGUgZ2l0d2ViIGNvbmZpZyBmaWxlLiAgVGhvc2UgdmFsdWVzIHRoYXQgYXJlIHJlbGF0aXZlIHBhdGhzIGFyZQorcmVsYXRpdmUgdG8gYmFzZSBVUkkgb2YgZ2l0d2ViLgorKworVGhpcyBsaXN0IHNob3VsZCBjb250YWluIHRoZSBVUkkgb2YgZ2l0d2ViJ3Mgc3RhbmRhcmQgc3R5bGVzaGVldC4gIFRoZSBkZWZhdWx0CitVUkkgb2YgZ2l0d2ViIHN0eWxlc2hlZXQgY2FuIGJlIHNldCBhdCBidWlsZCB0aW1lIHVzaW5nIHRoZSBgR0lUV0VCX0NTU2AKK21ha2VmaWxlIHZhcmlhYmxlLiAgSXRzIGRlZmF1bHQgdmFsdWUgaXMgYHN0YXRpYy9naXR3ZWIuY3NzYAorKG9yIGBzdGF0aWMvZ2l0d2ViLm1pbi5jc3NgIGlmIHRoZSBgQ1NTTUlOYCB2YXJpYWJsZSBpcyBkZWZpbmVkLAoraS5lLiBpZiBDU1MgbWluaWZpZXIgaXMgdXNlZCBkdXJpbmcgYnVpbGQpLgorKworKk5vdGUqOiB0aGVyZSBpcyBhbHNvIGEgbGVnYWN5IGAkc3R5bGVzaGVldGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgd2hpY2ggd2FzCit1c2VkIGJ5IG9sZGVyIGdpdHdlYi4gIElmIGAkc3R5bGVzaGVldGAgdmFyaWFibGUgaXMgZGVmaW5lZCwgb25seSBDU1Mgc3R5bGVzaGVldAorZ2l2ZW4gYnkgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IGdpdHdlYi4KKworJGxvZ286OgorCVBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgeW91IHB1dCAnZ2l0LWxvZ28ucG5nJyBvbiB5b3VyIHdlYgorCXNlcnZlciwgb3IgdG8gYmUgbW9yZSB0aGUgZ2VuZXJpYyBVUkkgb2YgbG9nbywgNzJ4Mjcgc2l6ZSkuICBUaGlzIGltYWdlCisJaXMgZGlzcGxheWVkIGluIHRoZSB0b3AgcmlnaHQgY29ybmVyIG9mIGVhY2ggZ2l0d2ViIHBhZ2UgYW5kIHVzZWQgYXMKKwlhIGxvZ28gZm9yIHRoZSBBdG9tIGZlZWQuICBSZWxhdGl2ZSB0byB0aGUgYmFzZSBVUkkgb2YgZ2l0d2ViIChhcyBhIHBhdGgpLgorCUNhbiBiZSBhZGp1c3RlZCB3aGVuIGJ1aWxkaW5nIGdpdHdlYiB1c2luZyBgR0lUV0VCX0xPR09gIHZhcmlhYmxlCisJQnkgZGVmYXVsdCBzZXQgdG8gYHN0YXRpYy9naXQtbG9nby5wbmdgLgorCiskZmF2aWNvbjo6CisJUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3UgcHV0ICdnaXQtZmF2aWNvbi5wbmcnIG9uIHlvdXIgd2ViCisJc2VydmVyLCBvciB0byBiZSBtb3JlIHRoZSBnZW5lcmljIFVSSSBvZiBmYXZpY29uLCB3aGljaCB3aWxsIGJlIHNlcnZlZAorCWFzICJpbWFnZS9wbmciIHR5cGUuICBXZWIgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGZhdmljb25zICh3ZWJzaXRlIGljb25zKQorCW1heSBkaXNwbGF5IHRoZW0gaW4gdGhlIGJyb3dzZXIncyBVUkwgYmFyIGFuZCBuZXh0IHRvIHRoZSBzaXRlIG5hbWUgaW4KKwlib29rbWFya3MuICBSZWxhdGl2ZSB0byB0aGUgYmFzZSBVUkkgb2YgZ2l0d2ViLiAgQ2FuIGJlIGFkanVzdGVkIGF0CisJYnVpbGQgdGltZSB1c2luZyBgR0lUV0VCX0ZBVklDT05gIHZhcmlhYmxlLgorCUJ5IGRlZmF1bHQgc2V0IHRvIGBzdGF0aWMvZ2l0LWZhdmljb24ucG5nYC4KKworJGphdmFzY3JpcHQ6OgorCVBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgeW91IHB1dCAnZ2l0d2ViLmpzJyBvbiB5b3VyIHdlYiBzZXJ2ZXIsCisJb3IgdG8gYmUgbW9yZSBnZW5lcmljIHRoZSBVUkkgb2YgSmF2YVNjcmlwdCBjb2RlIHVzZWQgYnkgZ2l0d2ViLgorCVJlbGF0aXZlIHRvIHRoZSBiYXNlIFVSSSBvZiBnaXR3ZWIuICBDYW4gYmUgc2V0IGF0IGJ1aWxkIHRpbWUgdXNpbmcKKwl0aGUgYEdJVFdFQl9KU2AgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorKworVGhlIGRlZmF1bHQgdmFsdWUgaXMgZWl0aGVyIGBzdGF0aWMvZ2l0d2ViLmpzYCwgb3IgYHN0YXRpYy9naXR3ZWIubWluLmpzYCBpZgordGhlIGBKU01JTmAgYnVpbGQgdmFyaWFibGUgd2FzIGRlZmluZWQsIGkuZS4gaWYgSmF2YVNjcmlwdCBtaW5pZmllciB3YXMgdXNlZAorYXQgYnVpbGQgdGltZS4gICpOb3RlKiB0aGF0IHRoaXMgc2luZ2xlIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20gbXVsdGlwbGUKK2luZGl2aWR1YWwgSmF2YVNjcmlwdCAibW9kdWxlcyIuCisKKyRob21lX2xpbms6OgorCVRhcmdldCBvZiB0aGUgaG9tZSBsaW5rIG9uIHRoZSB0b3Agb2YgYWxsIHBhZ2VzICh0aGUgZmlyc3QgcGFydCBvZiB2aWV3CisJImJyZWFkY3J1bWJzIikuICBCeSBkZWZhdWx0IGl0IGlzIHNldCB0byB0aGUgYWJzb2x1dGUgVVJJIG9mIGEgY3VycmVudCBwYWdlCisJKHRvIHRoZSB2YWx1ZSBvZiBgJG15X3VyaWAgdmFyaWFibGUsIG9yIHRvICIvIiBpZiBgJG15X3VyaWAgaXMgdW5kZWZpbmVkCisJb3IgaXMgYW4gZW1wdHkgc3RyaW5nKS4KKworJGhvbWVfbGlua19zdHI6OgorCUxhYmVsIGZvciB0aGUgImhvbWUgbGluayIgYXQgdGhlIHRvcCBvZiBhbGwgcGFnZXMsIGxlYWRpbmcgdG8gYCRob21lX2xpbmtgCisJKHVzdWFsbHkgdGhlIG1haW4gZ2l0d2ViIHBhZ2UsIHdoaWNoIGNvbnRhaW5zIHRoZSBwcm9qZWN0cyBsaXN0KS4gIEl0IGlzCisJdXNlZCBhcyB0aGUgZmlyc3QgY29tcG9uZW50IG9mIGdpdHdlYidzICJicmVhZGNydW1iIHRyYWlsIjoKKwlgPGhvbWUgbGluaz4gLyA8cHJvamVjdD4gLyA8YWN0aW9uPmAuICBDYW4gYmUgc2V0IGF0IGJ1aWxkIHRpbWUgdXNpbmcKKwl0aGUgYEdJVFdFQl9IT01FX0xJTktfU1RSYCB2YXJpYWJsZS4gIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvICJwcm9qZWN0cyIsCisJYXMgdGhpcyBsaW5rIGxlYWRzIHRvIHRoZSBsaXN0IG9mIHByb2plY3RzLiAgQW5vdGhlciBwb3B1bGFyIGNob2ljZSBpcyB0bworCXNldCBpdCB0byB0aGUgbmFtZSBvZiBzaXRlLiAgTm90ZSB0aGF0IGl0IGlzIHRyZWF0ZWQgYXMgcmF3IEhUTUwgc28gaXQKKwlzaG91bGQgbm90IGJlIHNldCBmcm9tIHVudHJ1c3RlZCBzb3VyY2VzLgorCitAZXh0cmFfYnJlYWRjcnVtYnM6OgorCUFkZGl0aW9uYWwgbGlua3MgdG8gYmUgYWRkZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBicmVhZGNydW1iIHRyYWlsIGJlZm9yZQorCXRoZSBob21lIGxpbmssIHRvIHBhZ2VzIHRoYXQgYXJlIGxvZ2ljYWxseSAiYWJvdmUiIHRoZSBnaXR3ZWIgcHJvamVjdHMKKwlsaXN0LCBzdWNoIGFzIHRoZSBvcmdhbml6YXRpb24gYW5kIGRlcGFydG1lbnQgd2hpY2ggaG9zdCB0aGUgZ2l0d2ViCisJc2VydmVyLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QgaXMgYSByZWZlcmVuY2UgdG8gYW4gYXJyYXksIGluIHdoaWNoCisJZWxlbWVudCAwIGlzIHRoZSBsaW5rIHRleHQgKGVxdWl2YWxlbnQgdG8gYCRob21lX2xpbmtfc3RyYCkgYW5kIGVsZW1lbnQKKwkxIGlzIHRoZSB0YXJnZXQgVVJMIChlcXVpdmFsZW50IHRvIGAkaG9tZV9saW5rYCkuCisrCitGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXR0aW5nIHByb2R1Y2VzIGEgYnJlYWRjcnVtYiB0cmFpbCBsaWtlCisiaG9tZSAvIGRldiAvIHByb2plY3RzIC8gLi4uIiB3aGVyZSAicHJvamVjdHMiIGlzIHRoZSBob21lIGxpbmsuCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgb3VyIEBleHRyYV9icmVhZGNydW1icyA9ICgKKyAgICAgIFsgJ2hvbWUnID0+ICdodHRwczovL3d3dy5leGFtcGxlLm9yZy8nIF0sCisgICAgICBbICdkZXYnICA9PiAnaHR0cHM6Ly9kZXYuZXhhbXBsZS5vcmcvJyBdLAorICAgICk7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyRsb2dvX3VybDo6CiskbG9nb19sYWJlbDo6CisJVVJJIGFuZCBsYWJlbCAodGl0bGUpIGZvciB0aGUgR2l0IGxvZ28gbGluayAob3IgeW91ciBzaXRlIGxvZ28sCisJaWYgeW91IGNob3NlIHRvIHVzZSBkaWZmZXJlbnQgbG9nbyBpbWFnZSkuIEJ5IGRlZmF1bHQsIHRoZXNlIGJvdGgKKwlyZWZlciB0byBHaXQgaG9tZXBhZ2UsIGh0dHBzOi8vZ2l0LXNjbS5jb21bXTsgaW4gdGhlIHBhc3QsIHRoZXkgcG9pbnRlZAorCXRvIEdpdCBkb2N1bWVudGF0aW9uIGF0IGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmdbXS4KKworCitDaGFuZ2luZyBnaXR3ZWIncyBsb29rCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitZb3UgY2FuIGFkanVzdCBob3cgcGFnZXMgZ2VuZXJhdGVkIGJ5IGdpdHdlYiBsb29rIHVzaW5nIHRoZSB2YXJpYWJsZXMgZGVzY3JpYmVkCitiZWxvdy4gIFlvdSBjYW4gY2hhbmdlIHRoZSBzaXRlIG5hbWUsIGFkZCBjb21tb24gaGVhZGVycyBhbmQgZm9vdGVycyBmb3IgYWxsCitwYWdlcywgYW5kIGFkZCBhIGRlc2NyaXB0aW9uIG9mIHRoaXMgZ2l0d2ViIGluc3RhbGxhdGlvbiBvbiBpdHMgbWFpbiBwYWdlCisod2hpY2ggaXMgdGhlIHByb2plY3RzIGxpc3QgcGFnZSksIGV0Yy4KKworJHNpdGVfbmFtZTo6CisJTmFtZSBvZiB5b3VyIHNpdGUgb3Igb3JnYW5pemF0aW9uLCB0byBhcHBlYXIgaW4gcGFnZSB0aXRsZXMuICBTZXQgaXQKKwl0byBzb21ldGhpbmcgZGVzY3JpcHRpdmUgZm9yIGNsZWFyZXIgYm9va21hcmtzIGV0Yy4gIElmIHRoaXMgdmFyaWFibGUKKwlpcyBub3Qgc2V0IG9yIGlzLCB0aGVuIGdpdHdlYiB1c2VzIHRoZSB2YWx1ZSBvZiB0aGUgYFNFUlZFUl9OQU1FYAorCWBDR0lgIGVudmlyb25tZW50IHZhcmlhYmxlLCBzZXR0aW5nIHNpdGUgbmFtZSB0byAiJFNFUlZFUl9OQU1FIEdpdCIsCisJb3IgIlVudGl0bGVkIEdpdCIgaWYgdGhpcyB2YXJpYWJsZSBpcyBub3Qgc2V0IChlLmcuIGlmIHJ1bm5pbmcgZ2l0d2ViCisJYXMgc3RhbmRhbG9uZSBzY3JpcHQpLgorKworQ2FuIGJlIHNldCB1c2luZyB0aGUgYEdJVFdFQl9TSVRFTkFNRWAgYXQgYnVpbGQgdGltZS4gIFVuc2V0IGJ5IGRlZmF1bHQuCisKKyRzaXRlX2h0bWxfaGVhZF9zdHJpbmc6OgorCUhUTUwgc25pcHBldCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgPGhlYWQ+IHNlY3Rpb24gb2YgZWFjaCBwYWdlLgorCUNhbiBiZSBzZXQgdXNpbmcgYEdJVFdFQl9TSVRFX0hUTUxfSEVBRF9TVFJJTkdgIGF0IGJ1aWxkIHRpbWUuCisJTm8gZGVmYXVsdCB2YWx1ZS4KKworJHNpdGVfaGVhZGVyOjoKKwlOYW1lIG9mIGEgZmlsZSB3aXRoIEhUTUwgdG8gYmUgaW5jbHVkZWQgYXQgdGhlIHRvcCBvZiBlYWNoIHBhZ2UuCisJUmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAnZ2l0d2ViLmNnaScgc2NyaXB0LgorCUNhbiBiZSBzZXQgdXNpbmcgYEdJVFdFQl9TSVRFX0hFQURFUmAgYXQgYnVpbGQgdGltZS4gIE5vIGRlZmF1bHQKKwl2YWx1ZS4KKworJHNpdGVfZm9vdGVyOjoKKwlOYW1lIG9mIGEgZmlsZSB3aXRoIEhUTUwgdG8gYmUgaW5jbHVkZWQgYXQgdGhlIGJvdHRvbSBvZiBlYWNoIHBhZ2UuCisJUmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAnZ2l0d2ViLmNnaScgc2NyaXB0LgorCUNhbiBiZSBzZXQgdXNpbmcgYEdJVFdFQl9TSVRFX0ZPT1RFUmAgYXQgYnVpbGQgdGltZS4gIE5vIGRlZmF1bHQKKwl2YWx1ZS4KKworJGhvbWVfdGV4dDo6CisJTmFtZSBvZiBhIEhUTUwgZmlsZSB3aGljaCwgaWYgaXQgZXhpc3RzLCBpcyBpbmNsdWRlZCBvbiB0aGUKKwlnaXR3ZWIgcHJvamVjdHMgb3ZlcnZpZXcgcGFnZSAoInByb2plY3RzX2xpc3QiIHZpZXcpLiAgUmVsYXRpdmUgdG8KKwl0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGdpdHdlYi5jZ2kgc2NyaXB0LiAgRGVmYXVsdCB2YWx1ZQorCWNhbiBiZSBhZGp1c3RlZCBkdXJpbmcgYnVpbGQgdGltZSB1c2luZyBgR0lUV0VCX0hPTUVURVhUYCB2YXJpYWJsZS4KKwlCeSBkZWZhdWx0IHNldCB0byAnaW5kZXh0ZXh0Lmh0bWwnLgorCiskcHJvamVjdHNfbGlzdF9kZXNjcmlwdGlvbl93aWR0aDo6CisJVGhlIHdpZHRoIChpbiBjaGFyYWN0ZXJzKSBvZiB0aGUgIkRlc2NyaXB0aW9uIiBjb2x1bW4gb2YgdGhlIHByb2plY3RzIGxpc3QuCisJTG9uZ2VyIGRlc2NyaXB0aW9ucyB3aWxsIGJlIHRydW5jYXRlZCAodHJ5aW5nIHRvIGN1dCBhdCB3b3JkIGJvdW5kYXJ5KTsKKwl0aGUgZnVsbCBkZXNjcmlwdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlICd0aXRsZScgYXR0cmlidXRlICh1c3VhbGx5IHNob3duIG9uCisJbW91c2VvdmVyKS4gIFRoZSBkZWZhdWx0IGlzIDI1LCB3aGljaCBtaWdodCBiZSB0b28gc21hbGwgaWYgeW91CisJdXNlIGxvbmcgcHJvamVjdCBkZXNjcmlwdGlvbnMuCisKKyRkZWZhdWx0X3Byb2plY3RzX29yZGVyOjoKKwlEZWZhdWx0IHZhbHVlIG9mIG9yZGVyaW5nIG9mIHByb2plY3RzIG9uIHByb2plY3RzIGxpc3QgcGFnZSwgd2hpY2gKKwltZWFucyB0aGUgb3JkZXJpbmcgdXNlZCBpZiB5b3UgZG9uJ3QgZXhwbGljaXRseSBzb3J0IHByb2plY3RzIGxpc3QKKwkoaWYgdGhlcmUgaXMgbm8gIm8iIENHSSBxdWVyeSBwYXJhbWV0ZXIgaW4gdGhlIFVSTCkuICBWYWxpZCB2YWx1ZXMKKwlhcmUgIm5vbmUiICh1bnNvcnRlZCksICJwcm9qZWN0IiAocHJvamVjdHMgYXJlIGJ5IHByb2plY3QgbmFtZSwKKwlpLmUuIHBhdGggdG8gcmVwb3NpdG9yeSByZWxhdGl2ZSB0byBgJHByb2plY3Ryb290YCksICJkZXNjciIKKwkocHJvamVjdCBkZXNjcmlwdGlvbiksICJvd25lciIsIGFuZCAiYWdlIiAoYnkgZGF0ZSBvZiBtb3N0IGN1cnJlbnQKKwljb21taXQpLgorKworRGVmYXVsdCB2YWx1ZSBpcyAicHJvamVjdCIuICBVbmtub3duIHZhbHVlIG1lYW5zIHVuc29ydGVkLgorCisKK0NoYW5naW5nIGdpdHdlYidzIGJlaGF2aW9yCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlc2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgY29udHJvbCBfaW50ZXJuYWxfIGdpdHdlYiBiZWhhdmlvci4KKworJGRlZmF1bHRfYmxvYl9wbGFpbl9taW1ldHlwZTo6CisJRGVmYXVsdCBtaW1ldHlwZSBmb3IgdGhlIGJsb2JfcGxhaW4gKHJhdykgdmlldywgaWYgbWltZXR5cGUgY2hlY2tpbmcKKwlkb2Vzbid0IHJlc3VsdCBpbiBzb21lIG90aGVyIHR5cGU7IGJ5IGRlZmF1bHQgInRleHQvcGxhaW4iLgorCUdpdHdlYiBndWVzc2VzIG1pbWV0eXBlIG9mIGEgZmlsZSB0byBkaXNwbGF5IGJhc2VkIG9uIGV4dGVuc2lvbgorCW9mIGl0cyBmaWxlbmFtZSwgdXNpbmcgYCRtaW1ldHlwZXNfZmlsZWAgKGlmIHNldCBhbmQgZmlsZSBleGlzdHMpCisJYW5kIGAvZXRjL21pbWUudHlwZXNgIGZpbGVzIChzZWUgKm1pbWUudHlwZXMqKDUpIG1hbnBhZ2U7IG9ubHkKKwlmaWxlbmFtZSBleHRlbnNpb24gcnVsZXMgYXJlIHN1cHBvcnRlZCBieSBnaXR3ZWIpLgorCiskZGVmYXVsdF90ZXh0X3BsYWluX2NoYXJzZXQ6OgorCURlZmF1bHQgY2hhcnNldCBmb3IgdGV4dCBmaWxlcy4gSWYgdGhpcyBpcyBub3Qgc2V0LCB0aGUgd2ViIHNlcnZlcgorCWNvbmZpZ3VyYXRpb24gd2lsbCBiZSB1c2VkLiAgVW5zZXQgYnkgZGVmYXVsdC4KKworJGZhbGxiYWNrX2VuY29kaW5nOjoKKwlHaXR3ZWIgYXNzdW1lcyB0aGlzIGNoYXJzZXQgd2hlbiBhIGxpbmUgY29udGFpbnMgbm9uLVVURi04IGNoYXJhY3RlcnMuCisJVGhlIGZhbGxiYWNrIGRlY29kaW5nIGlzIHVzZWQgd2l0aG91dCBlcnJvciBjaGVja2luZywgc28gaXQgY2FuIGJlIGV2ZW4KKwkidXRmLTgiLiBUaGUgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGVuY29kaW5nOyBzZWUgdGhlICpFbmNvZGluZzo6U3VwcG9ydGVkKigzcG0pCisJbWFuIHBhZ2UgZm9yIGEgbGlzdC4gVGhlIGRlZmF1bHQgaXMgImxhdGluMSIsIGFrYS4gImlzby04ODU5LTEiLgorCitAZGlmZl9vcHRzOjoKKwlSZW5hbWUgZGV0ZWN0aW9uIG9wdGlvbnMgZm9yIGdpdC1kaWZmIGFuZCBnaXQtZGlmZi10cmVlLiBUaGUgZGVmYXVsdCBpcworCShcJy1NJyk7IHNldCBpdCB0byAoXCctQycpIG9yIChcJy1DJywgXCctQycpIHRvIGFsc28gZGV0ZWN0IGNvcGllcywKKwlvciBzZXQgaXQgdG8gKCkgaS5lLiBlbXB0eSBsaXN0IGlmIHlvdSBkb24ndCB3YW50IHRvIGhhdmUgcmVuYW1lcworCWRldGVjdGlvbi4KKysKKypOb3RlKiB0aGF0IHJlbmFtZSBhbmQgZXNwZWNpYWxseSBjb3B5IGRldGVjdGlvbiBjYW4gYmUgcXVpdGUKK0NQVS1pbnRlbnNpdmUuICBOb3RlIGFsc28gdGhhdCBub24gR2l0IHRvb2xzIGNhbiBoYXZlIHByb2JsZW1zIHdpdGgKK3BhdGNoZXMgZ2VuZXJhdGVkIHdpdGggb3B0aW9ucyBtZW50aW9uZWQgYWJvdmUsIGVzcGVjaWFsbHkgd2hlbiB0aGV5CitpbnZvbHZlIGZpbGUgY29waWVzIChcJy1DJykgb3IgY3Jpc3MtY3Jvc3MgcmVuYW1lcyAoXCctQicpLgorCisKK1NvbWUgb3B0aW9uYWwgZmVhdHVyZXMgYW5kIHBvbGljaWVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTW9zdCBvZiBmZWF0dXJlcyBhcmUgY29uZmlndXJlZCB2aWEgYCVmZWF0dXJlYCBoYXNoOyBob3dldmVyIHNvbWUgb2YgZXh0cmEKK2dpdHdlYiBmZWF0dXJlcyBjYW4gYmUgdHVybmVkIG9uIGFuZCBjb25maWd1cmVkIHVzaW5nIHZhcmlhYmxlcyBkZXNjcmliZWQKK2JlbG93LiAgVGhpcyBsaXN0IGJlc2lkZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0aGF0IGNvbnRyb2wgaG93IGdpdHdlYgorbG9va3MgZG9lcyBjb250YWluIHZhcmlhYmxlcyBjb25maWd1cmluZyBhZG1pbmlzdHJhdGl2ZSBzaWRlIG9mIGdpdHdlYgorKGUuZy4gY3Jvc3Mtc2l0ZSBzY3JpcHRpbmcgcHJldmVudGlvbjsgYWRtaXR0ZWRseSB0aGlzIGFzIHNpZGUgZWZmZWN0CithZmZlY3RzIGhvdyAic3VtbWFyeSIgcGFnZXMgbG9vayBsaWtlLCBvciBsb2FkIGxpbWl0aW5nKS4KKworQGdpdF9iYXNlX3VybF9saXN0OjoKKwlMaXN0IG9mIEdpdCBiYXNlIFVSTHMuICBUaGVzZSBVUkxzIGFyZSB1c2VkIHRvIGdlbmVyYXRlIFVSTHMKKwlkZXNjcmliaW5nIGZyb20gd2hlcmUgdG8gZmV0Y2ggYSBwcm9qZWN0LCB3aGljaCBhcmUgc2hvd24gb24KKwlwcm9qZWN0IHN1bW1hcnkgcGFnZS4gIFRoZSBmdWxsIGZldGNoIFVSTCBpcyAiYCRnaXRfYmFzZV91cmwvJHByb2plY3RgIiwKKwlmb3IgZWFjaCBlbGVtZW50IG9mIHRoaXMgbGlzdC4gWW91IGNhbiBzZXQgdXAgbXVsdGlwbGUgYmFzZSBVUkxzCisJKGZvciBleGFtcGxlIG9uZSBmb3IgYGdpdDovL2AgcHJvdG9jb2wsIGFuZCBvbmUgZm9yIGBodHRwOi8vYAorCXByb3RvY29sKS4KKysKK05vdGUgdGhhdCBwZXIgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGNhbiBiZSBzZXQgaW4gYCRHSVRfRElSL2Nsb25ldXJsYAorZmlsZSwgb3IgYXMgdmFsdWVzIG9mIG11bHRpLXZhbHVlIGBnaXR3ZWIudXJsYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGluCitwcm9qZWN0IGNvbmZpZy4gIFBlci1yZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHZhbHVlCitjb21wb3NlZCBmcm9tIGBAZ2l0X2Jhc2VfdXJsX2xpc3RgIGVsZW1lbnRzIGFuZCBwcm9qZWN0IG5hbWUuCisrCitZb3UgY2FuIHNldHVwIG9uZSBzaW5nbGUgdmFsdWUgKHNpbmdsZSBlbnRyeS9pdGVtIGluIHRoaXMgbGlzdCkgYXQgYnVpbGQKK3RpbWUgYnkgc2V0dGluZyB0aGUgYEdJVFdFQl9CQVNFX1VSTGAgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gKCksIGkuZS4gYW4gZW1wdHkgbGlzdC4gIFRoaXMgbWVhbnMgdGhhdCBnaXR3ZWIKK3dvdWxkIG5vdCB0cnkgdG8gY3JlYXRlIHByb2plY3QgVVJMICh0byBmZXRjaCkgZnJvbSBwcm9qZWN0IG5hbWUuCisKKyRwcm9qZWN0c19saXN0X2dyb3VwX2NhdGVnb3JpZXM6OgorCVdoZXRoZXIgdG8gZW5hYmxlIHRoZSBncm91cGluZyBvZiBwcm9qZWN0cyBieSBjYXRlZ29yeSBvbiB0aGUgcHJvamVjdAorCWxpc3QgcGFnZS4gVGhlIGNhdGVnb3J5IG9mIGEgcHJvamVjdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZQorCWAkR0lUX0RJUi9jYXRlZ29yeWAgZmlsZSBvciB0aGUgYGdpdHdlYi5jYXRlZ29yeWAgdmFyaWFibGUgaW4gZWFjaAorCXJlcG9zaXRvcnkncyBjb25maWd1cmF0aW9uLiAgRGlzYWJsZWQgYnkgZGVmYXVsdCAoc2V0IHRvIDApLgorCiskcHJvamVjdF9saXN0X2RlZmF1bHRfY2F0ZWdvcnk6OgorCURlZmF1bHQgY2F0ZWdvcnkgZm9yIHByb2plY3RzIGZvciB3aGljaCBub25lIGlzIHNwZWNpZmllZC4gIElmIHRoaXMgaXMKKwlzZXQgdG8gdGhlIGVtcHR5IHN0cmluZywgc3VjaCBwcm9qZWN0cyB3aWxsIHJlbWFpbiB1bmNhdGVnb3JpemVkIGFuZAorCWxpc3RlZCBhdCB0aGUgdG9wLCBhYm92ZSBjYXRlZ29yaXplZCBwcm9qZWN0cy4gIFVzZWQgb25seSBpZiBwcm9qZWN0CisJY2F0ZWdvcmllcyBhcmUgZW5hYmxlZCwgd2hpY2ggbWVhbnMgaWYgYCRwcm9qZWN0c19saXN0X2dyb3VwX2NhdGVnb3JpZXNgCisJaXMgdHJ1ZS4gIEJ5IGRlZmF1bHQgc2V0IHRvICIiIChlbXB0eSBzdHJpbmcpLgorCiskcHJldmVudF94c3M6OgorCUlmIHRydWUsIHNvbWUgZ2l0d2ViIGZlYXR1cmVzIGFyZSBkaXNhYmxlZCB0byBwcmV2ZW50IGNvbnRlbnQgaW4KKwlyZXBvc2l0b3JpZXMgZnJvbSBsYXVuY2hpbmcgY3Jvc3Mtc2l0ZSBzY3JpcHRpbmcgKFhTUykgYXR0YWNrcy4gIFNldCB0aGlzCisJdG8gdHJ1ZSBpZiB5b3UgZG9uJ3QgdHJ1c3QgdGhlIGNvbnRlbnQgb2YgeW91ciByZXBvc2l0b3JpZXMuCisJRmFsc2UgYnkgZGVmYXVsdCAoc2V0IHRvIDApLgorCiskbWF4bG9hZDo6CisJVXNlZCB0byBzZXQgdGhlIG1heGltdW0gbG9hZCB0aGF0IHdlIHdpbGwgc3RpbGwgcmVzcG9uZCB0byBnaXR3ZWIgcXVlcmllcy4KKwlJZiB0aGUgc2VydmVyIGxvYWQgZXhjZWVkcyB0aGlzIHZhbHVlIHRoZW4gZ2l0d2ViIHdpbGwgcmV0dXJuCisJIjUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlIiBlcnJvci4gIFRoZSBzZXJ2ZXIgbG9hZCBpcyB0YWtlbiB0byBiZSAwCisJaWYgZ2l0d2ViIGNhbm5vdCBkZXRlcm1pbmUgaXRzIHZhbHVlLiAgQ3VycmVudGx5IGl0IHdvcmtzIG9ubHkgb24gTGludXgsCisJd2hlcmUgaXQgdXNlcyBgL3Byb2MvbG9hZGF2Z2A7IHRoZSBsb2FkIHRoZXJlIGlzIHRoZSBudW1iZXIgb2YgYWN0aXZlCisJdGFza3Mgb24gdGhlIHN5c3RlbSAtLSBwcm9jZXNzZXMgdGhhdCBhcmUgYWN0dWFsbHkgcnVubmluZyAtLSBhdmVyYWdlZAorCW92ZXIgdGhlIGxhc3QgbWludXRlLgorKworU2V0IGAkbWF4bG9hZGAgdG8gdW5kZWZpbmVkIHZhbHVlIChgdW5kZWZgKSB0byB0dXJuIHRoaXMgZmVhdHVyZSBvZmYuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAzMDAuCisKKyRvbWl0X2FnZV9jb2x1bW46OgorCUlmIHRydWUsIG9taXQgdGhlIGNvbHVtbiB3aXRoIGRhdGUgb2YgdGhlIG1vc3QgY3VycmVudCBjb21taXQgb24gdGhlCisJcHJvamVjdHMgbGlzdCBwYWdlLiBJdCBjYW4gc2F2ZSBhIGJpdCBvZiBJL08gYW5kIGEgZm9yayBwZXIgcmVwb3NpdG9yeS4KKworJG9taXRfb3duZXI6OgorCUlmIHRydWUgcHJldmVudHMgZGlzcGxheWluZyBpbmZvcm1hdGlvbiBhYm91dCByZXBvc2l0b3J5IG93bmVyLgorCiskcGVyX3JlcXVlc3RfY29uZmlnOjoKKwlJZiB0aGlzIGlzIHNldCB0byBjb2RlIHJlZmVyZW5jZSwgaXQgd2lsbCBiZSBydW4gb25jZSBmb3IgZWFjaCByZXF1ZXN0LgorCVlvdSBjYW4gc2V0IHBhcnRzIG9mIGNvbmZpZ3VyYXRpb24gdGhhdCBjaGFuZ2UgcGVyIHNlc3Npb24gdGhpcyB3YXkuCisJRm9yIGV4YW1wbGUsIG9uZSBtaWdodCB1c2UgdGhlIGZvbGxvd2luZyBjb2RlIGluIGEgZ2l0d2ViIGNvbmZpZ3VyYXRpb24KKwlmaWxlCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3VyICRwZXJfcmVxdWVzdF9jb25maWcgPSBzdWIgeworCSRFTlZ7R0xfVVNFUn0gPSAkY2dpLT5yZW1vdGVfdXNlciB8fCAiZ2l0d2ViIjsKK307CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSWYgYCRwZXJfcmVxdWVzdF9jb25maWdgIGlzIG5vdCBhIGNvZGUgcmVmZXJlbmNlLCBpdCBpcyBpbnRlcnByZXRlZCBhcyBib29sZWFuCit2YWx1ZS4gIElmIGl0IGlzIHRydWUgZ2l0d2ViIHdpbGwgcHJvY2VzcyBjb25maWcgZmlsZXMgb25jZSBwZXIgcmVxdWVzdCwKK2FuZCBpZiBpdCBpcyBmYWxzZSBnaXR3ZWIgd2lsbCBwcm9jZXNzIGNvbmZpZyBmaWxlcyBvbmx5IG9uY2UsIGVhY2ggdGltZSBpdAoraXMgZXhlY3V0ZWQuICBUcnVlIGJ5IGRlZmF1bHQgKHNldCB0byAxKS4KKysKKypOT1RFKjogYCRteV91cmxgLCBgJG15X3VyaWAsIGFuZCBgJGJhc2VfdXJsYCBhcmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGVpciBkZWZhdWx0Cit2YWx1ZXMgYmVmb3JlIGV2ZXJ5IHJlcXVlc3QsIHNvIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGVtLCBiZSBzdXJlIHRvIHNldAordGhpcyB2YXJpYWJsZSB0byB0cnVlIG9yIGEgY29kZSByZWZlcmVuY2UgZWZmZWN0aW5nIHRoZSBkZXNpcmVkIGNoYW5nZXMuCisrCitUaGlzIHZhcmlhYmxlIG1hdHRlcnMgb25seSB3aGVuIHVzaW5nIHBlcnNpc3RlbnQgd2ViIGVudmlyb25tZW50cyB0aGF0CitzZXJ2ZSBtdWx0aXBsZSByZXF1ZXN0cyB1c2luZyBzaW5nbGUgZ2l0d2ViIGluc3RhbmNlLCBsaWtlIG1vZF9wZXJsLAorRmFzdENHSSBvciBQbGFja3VwLgorCisKK090aGVyIHZhcmlhYmxlcworfn5+fn5+fn5+fn5+fn5+CitVc3VhbGx5IHlvdSBzaG91bGQgbm90IG5lZWQgdG8gY2hhbmdlIChhZGp1c3QpIGFueSBvZiBjb25maWd1cmF0aW9uCit2YXJpYWJsZXMgZGVzY3JpYmVkIGJlbG93OyB0aGV5IHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IHNldCBieSBnaXR3ZWIgdG8KK2NvcnJlY3QgdmFsdWUuCisKKworJHZlcnNpb246OgorCUdpdHdlYiB2ZXJzaW9uLCBzZXQgYXV0b21hdGljYWxseSB3aGVuIGNyZWF0aW5nIGdpdHdlYi5jZ2kgZnJvbQorCWdpdHdlYi5wZXJsLiBZb3UgbWlnaHQgd2FudCB0byBtb2RpZnkgaXQgaWYgeW91IGFyZSBydW5uaW5nIG1vZGlmaWVkCisJZ2l0d2ViLCBmb3IgZXhhbXBsZQorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXIgJHZlcnNpb24gLj0gIiB3aXRoIGNhY2hpbmciOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitpZiB5b3UgcnVuIG1vZGlmaWVkIHZlcnNpb24gb2YgZ2l0d2ViIHdpdGggY2FjaGluZyBzdXBwb3J0LiAgVGhpcyB2YXJpYWJsZQoraXMgcHVyZWx5IGluZm9ybWF0aW9uYWwsIHVzZWQgZS5nLiBpbiB0aGUgImdlbmVyYXRvciIgbWV0YSBoZWFkZXIgaW4gSFRNTAoraGVhZGVyLgorCiskbXlfdXJsOjoKKyRteV91cmk6OgorCUZ1bGwgVVJMIGFuZCBhYnNvbHV0ZSBVUkwgb2YgdGhlIGdpdHdlYiBzY3JpcHQ7CisJaW4gZWFybGllciB2ZXJzaW9ucyBvZiBnaXR3ZWIgeW91IG1pZ2h0IGhhdmUgbmVlZCB0byBzZXQgdGhvc2UKKwl2YXJpYWJsZXMsIGJ1dCBub3cgdGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8gZG8gaXQuICBTZWUKKwlgJHBlcl9yZXF1ZXN0X2NvbmZpZ2AgaWYgeW91IG5lZWQgdG8gc2V0IHRoZW0gc3RpbGwuCisKKyRiYXNlX3VybDo6CisJQmFzZSBVUkwgZm9yIHJlbGF0aXZlIFVSTHMgaW4gcGFnZXMgZ2VuZXJhdGVkIGJ5IGdpdHdlYiwKKwkoZS5nLiBgJGxvZ29gLCBgJGZhdmljb25gLCBgQHN0eWxlc2hlZXRzYCBpZiB0aGV5IGFyZSByZWxhdGl2ZSBVUkxzKSwKKwluZWVkZWQgYW5kIHVzZWQgJzxiYXNlIGhyZWY9IiRiYXNlX3VybCI+JyBvbmx5IGZvciBVUkxzIHdpdGggbm9uZW1wdHkKKwlQQVRIX0lORk8uICBVc3VhbGx5IGdpdHdlYiBzZXRzIGl0cyB2YWx1ZSBjb3JyZWN0bHksCisJYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUsIGUuZy4gdG8gJG15X3VyaSBvciAiLyIuCisJU2VlIGAkcGVyX3JlcXVlc3RfY29uZmlnYCBpZiB5b3UgbmVlZCB0byBvdmVycmlkZSBpdCBhbnl3YXkuCisKKworQ09ORklHVVJJTkcgR0lUV0VCIEZFQVRVUkVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01hbnkgZ2l0d2ViIGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkIChvciBkaXNhYmxlZCkgYW5kIGNvbmZpZ3VyZWQgdXNpbmcgdGhlCitgJWZlYXR1cmVgIGhhc2guICBOYW1lcyBvZiBnaXR3ZWIgZmVhdHVyZXMgYXJlIGtleXMgb2YgdGhpcyBoYXNoLgorCitFYWNoIGAlZmVhdHVyZWAgaGFzaCBlbGVtZW50IGlzIGEgaGFzaCByZWZlcmVuY2UgYW5kIGhhcyB0aGUgZm9sbG93aW5nCitzdHJ1Y3R1cmU6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiPGZlYXR1cmVfbmFtZT4iID0+IHsKKwkic3ViIiA9PiA8ZmVhdHVyZS1zdWIgKHN1YnJvdXRpbmUpPiwKKwkib3ZlcnJpZGUiID0+IDxhbGxvdy1vdmVycmlkZSAoYm9vbGVhbik+LAorCSJkZWZhdWx0IiA9PiBbIDxvcHRpb25zPi4uLiBdCit9LAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU29tZSBmZWF0dXJlcyBjYW5ub3QgYmUgb3ZlcnJpZGRlbiBwZXIgcHJvamVjdC4gIEZvciB0aG9zZQorZmVhdHVyZXMgdGhlIHN0cnVjdHVyZSBvZiBhcHByb3ByaWF0ZSBgJWZlYXR1cmVgIGhhc2ggZWxlbWVudCBoYXMgYSBzaW1wbGVyCitmb3JtOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIjxmZWF0dXJlX25hbWU+IiA9PiB7CisJIm92ZXJyaWRlIiA9PiAwLAorCSJkZWZhdWx0IiA9PiBbIDxvcHRpb25zPi4uLiBdCit9LAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQXMgb25lIGNhbiBzZWUgaXQgbGFja3MgdGhlIFwnc3ViJyBlbGVtZW50LgorCitUaGUgbWVhbmluZyBvZiBlYWNoIHBhcnQgb2YgZmVhdHVyZSBjb25maWd1cmF0aW9uIGlzIGRlc2NyaWJlZAorYmVsb3c6CisKK2RlZmF1bHQ6OgorCUxpc3QgKGFycmF5IHJlZmVyZW5jZSkgb2YgZmVhdHVyZSBwYXJhbWV0ZXJzIChpZiB0aGVyZSBhcmUgYW55KSwKKwl1c2VkIGFsc28gdG8gdG9nZ2xlIChlbmFibGUgb3IgZGlzYWJsZSkgZ2l2ZW4gZmVhdHVyZS4KKysKK05vdGUgdGhhdCBpdCBpcyBjdXJyZW50bHkgKmFsd2F5cyogYW4gYXJyYXkgcmVmZXJlbmNlLCBldmVuIGlmCitmZWF0dXJlIGRvZXNuJ3QgYWNjZXB0IGFueSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIGFuZCBcJ2RlZmF1bHQnCitpcyB1c2VkIG9ubHkgdG8gdHVybiBpdCBvbiBvciBvZmYuICBJbiBzdWNoIGNhc2UgeW91IHR1cm4gZmVhdHVyZSBvbgorYnkgc2V0dGluZyB0aGlzIGVsZW1lbnQgdG8gYFsxXWAsIGFuZCB0b3JuIGl0IG9mZiBieSBzZXR0aW5nIGl0IHRvCitgWzBdYC4gIFNlZSBhbHNvIHRoZSBwYXNzYWdlIGFib3V0IHRoZSAiYmxhbWUiIGZlYXR1cmUgaW4gdGhlICJFeGFtcGxlcyIKK3NlY3Rpb24uCisrCitUbyBkaXNhYmxlIGZlYXR1cmVzIHRoYXQgYWNjZXB0IHBhcmFtZXRlcnMgKGFyZSBjb25maWd1cmFibGUpLCB5b3UKK25lZWQgdG8gc2V0IHRoaXMgZWxlbWVudCB0byBlbXB0eSBsaXN0IGkuZS4gYFtdYC4KKworb3ZlcnJpZGU6OgorCUlmIHRoaXMgZmllbGQgaGFzIGEgdHJ1ZSB2YWx1ZSB0aGVuIHRoZSBnaXZlbiBmZWF0dXJlIGlzCisJb3ZlcnJpZGFibGUsIHdoaWNoIG1lYW5zIHRoYXQgaXQgY2FuIGJlIGNvbmZpZ3VyZWQKKwkob3IgZW5hYmxlZC9kaXNhYmxlZCkgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcy4KKysKK1VzdWFsbHkgZ2l2ZW4gIjxmZWF0dXJlPiIgaXMgY29uZmlndXJhYmxlIHZpYSB0aGUgYGdpdHdlYi48ZmVhdHVyZT5gCitjb25maWcgdmFyaWFibGUgaW4gdGhlIHBlci1yZXBvc2l0b3J5IEdpdCBjb25maWd1cmF0aW9uIGZpbGUuCisrCisqTm90ZSogdGhhdCBubyBmZWF0dXJlIGlzIG92ZXJyaWRhYmxlIGJ5IGRlZmF1bHQuCisKK3N1Yjo6CisJSW50ZXJuYWwgZGV0YWlsIG9mIGltcGxlbWVudGF0aW9uLiAgV2hhdCBpcyBpbXBvcnRhbnQgaXMgdGhhdAorCWlmIHRoaXMgZmllbGQgaXMgbm90IHByZXNlbnQgdGhlbiBwZXItcmVwb3NpdG9yeSBvdmVycmlkZSBmb3IKKwlnaXZlbiBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuCisrCitZb3Ugd291bGRuJ3QgbmVlZCB0byBldmVyIGNoYW5nZSBpdCBpbiBnaXR3ZWIgY29uZmlnIGZpbGUuCisKKworRmVhdHVyZXMgaW4gYCVmZWF0dXJlYAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIGdpdHdlYiBmZWF0dXJlcyB0aGF0IGFyZSBjb25maWd1cmFibGUgdmlhIGAlZmVhdHVyZWAgaGFzaCBhcmUgbGlzdGVkCitiZWxvdy4gIFRoaXMgc2hvdWxkIGJlIGEgY29tcGxldGUgbGlzdCwgYnV0IHVsdGltYXRlbHkgdGhlIGF1dGhvcml0YXRpdmUKK2FuZCBjb21wbGV0ZSBsaXN0IGlzIGluIGdpdHdlYi5jZ2kgc291cmNlIGNvZGUsIHdpdGggZmVhdHVyZXMgZGVzY3JpYmVkCitpbiB0aGUgY29tbWVudHMuCisKK2JsYW1lOjoKKwlFbmFibGUgdGhlICJibGFtZSIgYW5kICJibGFtZV9pbmNyZW1lbnRhbCIgYmxvYiB2aWV3cywgc2hvd2luZyBmb3IKKwllYWNoIGxpbmUgdGhlIGxhc3QgY29tbWl0IHRoYXQgbW9kaWZpZWQgaXQ7IHNlZSBsaW5rZ2l0OmdpdC1ibGFtZVsxXS4KKwlUaGlzIGNhbiBiZSB2ZXJ5IENQVS1pbnRlbnNpdmUgYW5kIGlzIHRoZXJlZm9yZSBkaXNhYmxlZCBieSBkZWZhdWx0LgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5ibGFtZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoYm9vbGVhbikuCisKK3NuYXBzaG90OjoKKwlFbmFibGUgYW5kIGNvbmZpZ3VyZSB0aGUgInNuYXBzaG90IiBhY3Rpb24sIHdoaWNoIGFsbG93cyB1c2VyIHRvCisJZG93bmxvYWQgYSBjb21wcmVzc2VkIGFyY2hpdmUgb2YgYW55IHRyZWUgb3IgY29tbWl0LCBhcyBwcm9kdWNlZAorCWJ5IGxpbmtnaXQ6Z2l0LWFyY2hpdmVbMV0gYW5kIHBvc3NpYmx5IGFkZGl0aW9uYWxseSBjb21wcmVzc2VkLgorCVRoaXMgY2FuIHBvdGVudGlhbGx5IGdlbmVyYXRlIGhpZ2ggdHJhZmZpYyBpZiB5b3UgaGF2ZSBsYXJnZSBwcm9qZWN0LgorKworVGhlIHZhbHVlIG9mIFwnZGVmYXVsdCcgaXMgYSBsaXN0IG9mIG5hbWVzIG9mIHNuYXBzaG90IGZvcm1hdHMsCitkZWZpbmVkIGluIGAla25vd25fc25hcHNob3RfZm9ybWF0c2AgaGFzaCwgdGhhdCB5b3Ugd2lzaCB0byBvZmZlci4KK1N1cHBvcnRlZCBmb3JtYXRzIGluY2x1ZGUgInRneiIsICJ0YnoyIiwgInR4eiIgKGd6aXAvYnppcDIveHoKK2NvbXByZXNzZWQgdGFyIGFyY2hpdmUpIGFuZCAiemlwIjsgcGxlYXNlIGNvbnN1bHQgZ2l0d2ViIHNvdXJjZXMgZm9yCithIGRlZmluaXRpdmUgbGlzdC4gIEJ5IGRlZmF1bHQgb25seSAidGd6IiBpcyBvZmZlcmVkLgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5zbmFwc2hvdGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgd2hpY2ggY29udGFpbnMKK2EgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZm9ybWF0cyBvciAibm9uZSIgdG8gZGlzYWJsZSBzbmFwc2hvdHMuCitVbmtub3duIHZhbHVlcyBhcmUgaWdub3JlZC4KKworZ3JlcDo6CisJRW5hYmxlIGdyZXAgc2VhcmNoLCB3aGljaCBsaXN0cyB0aGUgZmlsZXMgaW4gY3VycmVudGx5IHNlbGVjdGVkCisJdHJlZSAoZGlyZWN0b3J5KSBjb250YWluaW5nIHRoZSBnaXZlbiBzdHJpbmc7IHNlZSBsaW5rZ2l0OmdpdC1ncmVwWzFdLgorCVRoaXMgY2FuIGJlIHBvdGVudGlhbGx5IENQVS1pbnRlbnNpdmUsIG9mIGNvdXJzZS4gIEVuYWJsZWQgYnkgZGVmYXVsdC4KKysKK1RoaXMgZmVhdHVyZSBjYW4gYmUgY29uZmlndXJlZCBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzIHZpYQorcmVwb3NpdG9yeSdzIGBnaXR3ZWIuZ3JlcGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoYm9vbGVhbikuCisKK3BpY2theGU6OgorCUVuYWJsZSB0aGUgc28gY2FsbGVkIHBpY2theGUgc2VhcmNoLCB3aGljaCB3aWxsIGxpc3QgdGhlIGNvbW1pdHMKKwl0aGF0IGludHJvZHVjZWQgb3IgcmVtb3ZlZCBhIGdpdmVuIHN0cmluZyBpbiBhIGZpbGUuICBUaGlzIGNhbiBiZQorCXByYWN0aWNhbCBhbmQgcXVpdGUgZmFzdGVyIGFsdGVybmF0aXZlIHRvICJibGFtZSIgYWN0aW9uLCBidXQgaXQgaXMKKwlzdGlsbCBwb3RlbnRpYWxseSBDUFUtaW50ZW5zaXZlLiAgRW5hYmxlZCBieSBkZWZhdWx0LgorKworVGhlIHBpY2theGUgc2VhcmNoIGlzIGRlc2NyaWJlZCBpbiBsaW5rZ2l0OmdpdC1sb2dbMV0gKHRoZQorZGVzY3JpcHRpb24gb2YgYC1TPHN0cmluZz5gIG9wdGlvbiwgd2hpY2ggcmVmZXJzIHRvIHBpY2theGUgZW50cnkgaW4KK2xpbmtnaXQ6Z2l0ZGlmZmNvcmVbN10gZm9yIG1vcmUgZGV0YWlscykuCisrCitUaGlzIGZlYXR1cmUgY2FuIGJlIGNvbmZpZ3VyZWQgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcyBieSBzZXR0aW5nCityZXBvc2l0b3J5J3MgYGdpdHdlYi5waWNrYXhlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChib29sZWFuKS4KKworc2hvdy1zaXplczo6CisJRW5hYmxlIHNob3dpbmcgc2l6ZSBvZiBibG9icyAob3JkaW5hcnkgZmlsZXMpIGluIGEgInRyZWUiIHZpZXcsIGluIGEKKwlzZXBhcmF0ZSBjb2x1bW4sIHNpbWlsYXIgdG8gd2hhdCBgbHMgLWxgIGRvZXM7IHNlZSBkZXNjcmlwdGlvbiBvZgorCWAtbGAgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWxzLXRyZWVbMV0gbWFucGFnZS4gIFRoaXMgY29zdHMgYSBiaXQgb2YKKwlJL08uICBFbmFibGVkIGJ5IGRlZmF1bHQuCisrCitUaGlzIGZlYXR1cmUgY2FuIGJlIGNvbmZpZ3VyZWQgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcyB2aWEKK3JlcG9zaXRvcnkncyBgZ2l0d2ViLnNob3dTaXplc2AgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoYm9vbGVhbikuCisKK3BhdGNoZXM6OgorCUVuYWJsZSBhbmQgY29uZmlndXJlICJwYXRjaGVzIiB2aWV3LCB3aGljaCBkaXNwbGF5cyBsaXN0IG9mIGNvbW1pdHMgaW4gZW1haWwKKwkocGxhaW4gdGV4dCkgb3V0cHV0IGZvcm1hdDsgc2VlIGFsc28gbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLgorCVRoZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGF0Y2hlcyBpbiBhIHBhdGNoc2V0IGdlbmVyYXRlZAorCWluICJwYXRjaGVzIiB2aWV3LiAgU2V0IHRoZSAnZGVmYXVsdCcgZmllbGQgdG8gYSBsaXN0IGNvbnRhaW5pbmcgc2luZ2xlCisJaXRlbSBvZiBvciB0byBhbiBlbXB0eSBsaXN0IHRvIGRpc2FibGUgcGF0Y2ggdmlldywgb3IgdG8gYSBsaXN0CisJY29udGFpbmluZyBhIHNpbmdsZSBuZWdhdGl2ZSBudW1iZXIgdG8gcmVtb3ZlIGFueSBsaW1pdC4KKwlEZWZhdWx0IHZhbHVlIGlzIDE2LgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5wYXRjaGVzYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChpbnRlZ2VyKS4KKworYXZhdGFyOjoKKwlBdmF0YXIgc3VwcG9ydC4gIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHZpZXdzIHN1Y2ggYXMKKwkic2hvcnRsb2ciIG9yICJjb21taXQiIHdpbGwgZGlzcGxheSBhbiBhdmF0YXIgYXNzb2NpYXRlZCB3aXRoCisJdGhlIGVtYWlsIG9mIGVhY2ggY29tbWl0dGVyIGFuZCBhdXRob3IuCisrCitDdXJyZW50bHkgYXZhaWxhYmxlIHByb3ZpZGVycyBhcmUgKiJncmF2YXRhciIqIGFuZCAqInBpY29uIiouCitPbmx5IG9uZSBwcm92aWRlciBhdCBhIHRpbWUgY2FuIGJlIHNlbGVjdGVkICgnZGVmYXVsdCcgaXMgb25lIGVsZW1lbnQgbGlzdCkuCitJZiBhbiB1bmtub3duIHByb3ZpZGVyIGlzIHNwZWNpZmllZCwgdGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQuCisqTm90ZSogdGhhdCBzb21lIHByb3ZpZGVycyBtaWdodCByZXF1aXJlIGV4dHJhIFBlcmwgcGFja2FnZXMgdG8gYmUKK2luc3RhbGxlZDsgc2VlIGBnaXR3ZWIvSU5TVEFMTGAgZm9yIG1vcmUgZGV0YWlscy4KKysKK1RoaXMgZmVhdHVyZSBjYW4gYmUgY29uZmlndXJlZCBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzIHZpYQorcmVwb3NpdG9yeSdzIGBnaXR3ZWIuYXZhdGFyYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorKworU2VlIGFsc28gYCVhdmF0YXJfc2l6ZWAgd2l0aCBwaXhlbCBzaXplcyBmb3IgaWNvbnMgYW5kIGF2YXRhcnMKKygiZGVmYXVsdCIgaXMgdXNlZCBmb3Igb25lLWxpbmUgbGlrZSAibG9nIiBhbmQgInNob3J0bG9nIiwgImRvdWJsZSIKK2lzIHVzZWQgZm9yIHR3by1saW5lIGxpa2UgImNvbW1pdCIsICJjb21taXRkaWZmIiBvciAidGFnIikuICBJZiB0aGUKK2RlZmF1bHQgZm9udCBzaXplcyBvciBsaW5laGVpZ2h0cyBhcmUgY2hhbmdlZCAoZS5nLiB2aWEgYWRkaW5nIGV4dHJhCitDU1Mgc3R5bGVzaGVldCBpbiBgQHN0eWxlc2hlZXRzYCksIGl0IG1heSBiZSBhcHByb3ByaWF0ZSB0byBjaGFuZ2UKK3RoZXNlIHZhbHVlcy4KKworaGlnaGxpZ2h0OjoKKwlTZXJ2ZXItc2lkZSBzeW50YXggaGlnaGxpZ2h0IHN1cHBvcnQgaW4gImJsb2IiIHZpZXcuICBJdCByZXF1aXJlcworCWAkaGlnaGxpZ2h0X2JpbmAgcHJvZ3JhbSB0byBiZSBhdmFpbGFibGUgKHNlZSB0aGUgZGVzY3JpcHRpb24gb2YKKwl0aGlzIHZhcmlhYmxlIGluIHRoZSAiQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMiIHNlY3Rpb24gYWJvdmUpLAorCWFuZCB0aGVyZWZvcmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKysKK1RoaXMgZmVhdHVyZSBjYW4gYmUgY29uZmlndXJlZCBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzIHZpYQorcmVwb3NpdG9yeSdzIGBnaXR3ZWIuaGlnaGxpZ2h0YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChib29sZWFuKS4KKworcmVtb3RlX2hlYWRzOjoKKwlFbmFibGUgZGlzcGxheWluZyByZW1vdGUgaGVhZHMgKHJlbW90ZS10cmFja2luZyBicmFuY2hlcykgaW4gdGhlICJoZWFkcyIKKwlsaXN0LiAgSW4gbW9zdCBjYXNlcyB0aGUgbGlzdCBvZiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgaXMgYW4KKwl1bm5lY2Vzc2FyeSBpbnRlcm5hbCBwcml2YXRlIGRldGFpbCwgYW5kIHRoaXMgZmVhdHVyZSBpcyB0aGVyZWZvcmUKKwlkaXNhYmxlZCBieSBkZWZhdWx0LiAgbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0sIHdoaWNoIGlzIHVzdWFsbHkgdXNlZAorCXRvIGJyb3dzZSBsb2NhbCByZXBvc2l0b3JpZXMsIGVuYWJsZXMgYW5kIHVzZXMgdGhpcyBmZWF0dXJlLgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5yZW1vdGVfaGVhZHNgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKGJvb2xlYW4pLgorCisKK1RoZSByZW1haW5pbmcgZmVhdHVyZXMgY2Fubm90IGJlIG92ZXJyaWRkZW4gb24gYSBwZXIgcHJvamVjdCBiYXNpcy4KKworc2VhcmNoOjoKKwlFbmFibGUgdGV4dCBzZWFyY2gsIHdoaWNoIHdpbGwgbGlzdCB0aGUgY29tbWl0cyB3aGljaCBtYXRjaCBhdXRob3IsCisJY29tbWl0dGVyIG9yIGNvbW1pdCB0ZXh0IHRvIGEgZ2l2ZW4gc3RyaW5nOyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mCisJYC0tYXV0aG9yYCwgYC0tY29tbWl0dGVyYCBhbmQgYC0tZ3JlcGAgb3B0aW9ucyBpbiBsaW5rZ2l0OmdpdC1sb2dbMV0KKwltYW5wYWdlLiAgRW5hYmxlZCBieSBkZWZhdWx0LgorKworUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCitmb3Jrczo6CisJSWYgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGdpdHdlYiBjb25zaWRlcnMgcHJvamVjdHMgaW4KKwlzdWJkaXJlY3RvcmllcyBvZiBwcm9qZWN0IHJvb3QgKGJhc2VuYW1lKSB0byBiZSBmb3JrcyBvZiBleGlzdGluZworCXByb2plY3RzLiAgRm9yIGVhY2ggcHJvamVjdCArJHByb2puYW1lLmdpdCssIHByb2plY3RzIGluIHRoZQorCSskcHJvam5hbWUvKyBkaXJlY3RvcnkgYW5kIGl0cyBzdWJkaXJlY3RvcmllcyB3aWxsIG5vdCBiZQorCXNob3duIGluIHRoZSBtYWluIHByb2plY3RzIGxpc3QuICBJbnN0ZWFkLCBhIFwnKycgbWFyayBpcyBzaG93bgorCW5leHQgdG8gYCRwcm9qbmFtZWAsIHdoaWNoIGxpbmtzIHRvIGEgImZvcmtzIiB2aWV3IHRoYXQgbGlzdHMgYWxsCisJdGhlIGZvcmtzIChhbGwgcHJvamVjdHMgaW4gYCRwcm9qbmFtZS9gIHN1YmRpcmVjdG9yeSkuICBBZGRpdGlvbmFsbHkKKwlhICJmb3JrcyIgdmlldyBmb3IgYSBwcm9qZWN0IGlzIGxpbmtlZCBmcm9tIHByb2plY3Qgc3VtbWFyeSBwYWdlLgorKworSWYgdGhlIHByb2plY3QgbGlzdCBpcyB0YWtlbiBmcm9tIGEgZmlsZSAoKyRwcm9qZWN0c19saXN0KyBwb2ludHMgdG8gYQorZmlsZSksIGZvcmtzIGFyZSBvbmx5IHJlY29nbml6ZWQgaWYgdGhleSBhcmUgbGlzdGVkIGFmdGVyIHRoZSBtYWluIHByb2plY3QKK2luIHRoYXQgZmlsZS4KKysKK1Byb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgbm90IHN1cHBvcnRlZC4KKworYWN0aW9uczo6CisJSW5zZXJ0IGN1c3RvbSBsaW5rcyB0byB0aGUgYWN0aW9uIGJhciBvZiBhbGwgcHJvamVjdCBwYWdlcy4gIFRoaXMKKwlhbGxvd3MgeW91IHRvIGxpbmsgdG8gdGhpcmQtcGFydHkgc2NyaXB0cyBpbnRlZ3JhdGluZyBpbnRvIGdpdHdlYi4KKysKK1RoZSAiZGVmYXVsdCIgdmFsdWUgY29uc2lzdHMgb2YgYSBsaXN0IG9mIHRyaXBsZXRzIGluIHRoZSBmb3JtCitgKCI8bGFiZWw+IiwgIjxsaW5rPiIsICI8cG9zaXRpb24+IilgIHdoZXJlICJwb3NpdGlvbiIgaXMgdGhlIGxhYmVsCithZnRlciB3aGljaCB0byBpbnNlcnQgdGhlIGxpbmssICJsaW5rIiBpcyBhIGZvcm1hdCBzdHJpbmcgd2hlcmUgYCVuYAorZXhwYW5kcyB0byB0aGUgcHJvamVjdCBuYW1lLCBgJWZgIHRvIHRoZSBwcm9qZWN0IHBhdGggd2l0aGluIHRoZQorZmlsZXN5c3RlbSAoaS5lLiAiJHByb2plY3Ryb290LyRwcm9qZWN0IiksIGAlaGAgdG8gdGhlIGN1cnJlbnQgaGFzaAorKFwnaCcgZ2l0d2ViIHBhcmFtZXRlcikgYW5kIGAlYmAgdG8gdGhlIGN1cnJlbnQgaGFzaCBiYXNlCisoXCdoYicgZ2l0d2ViIHBhcmFtZXRlcik7IGAlJWAgZXhwYW5kcyB0byBcJyUnLgorKworRm9yIGV4YW1wbGUsIGF0IHRoZSB0aW1lIHRoaXMgcGFnZSB3YXMgd3JpdHRlbiwgdGhlIGh0dHA6Ly9yZXBvLm9yLmN6W10KK0dpdCBob3N0aW5nIHNpdGUgc2V0IGl0IHRvIHRoZSBmb2xsb3dpbmcgdG8gZW5hYmxlIGdyYXBoaWNhbCBsb2cKKyh1c2luZyB0aGUgdGhpcmQgcGFydHkgdG9vbCAqZ2l0LWJyb3dzZXIqKToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyRmZWF0dXJleydhY3Rpb25zJ317J2RlZmF1bHQnfSA9CisJWyAoJ2dyYXBoaWNsb2cnLCAnL2dpdC1icm93c2VyL2J5LWNvbW1pdC5odG1sP3I9JW4nLCAnc3VtbWFyeScpXTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoaXMgYWRkcyBhIGxpbmsgdGl0bGVkICJncmFwaGljbG9nIiBhZnRlciB0aGUgInN1bW1hcnkiIGxpbmssIGxlYWRpbmcgdG8KK2BnaXQtYnJvd3NlcmAgc2NyaXB0LCBwYXNzaW5nIGByPTxwcm9qZWN0PmAgYXMgYSBxdWVyeSBwYXJhbWV0ZXIuCisrCitQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisKK3RpbWVkOjoKKwlFbmFibGUgZGlzcGxheWluZyBob3cgbXVjaCB0aW1lIGFuZCBob3cgbWFueSBHaXQgY29tbWFuZHMgaXQgdG9vayB0bworCWdlbmVyYXRlIGFuZCBkaXNwbGF5IGVhY2ggcGFnZSBpbiB0aGUgcGFnZSBmb290ZXIgKGF0IHRoZSBib3R0b20gb2YKKwlwYWdlKS4gIEZvciBleGFtcGxlIHRoZSBmb290ZXIgbWlnaHQgY29udGFpbjogIlRoaXMgcGFnZSB0b29rIDYuNTMzMjUKKwlzZWNvbmRzIGFuZCAxMyBHaXQgY29tbWFuZHMgdG8gZ2VuZXJhdGUuIiAgRGlzYWJsZWQgYnkgZGVmYXVsdC4KKysKK1Byb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgbm90IHN1cHBvcnRlZC4KKworamF2YXNjcmlwdC10aW1lem9uZTo6CisJRW5hYmxlIGFuZCBjb25maWd1cmUgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIGEgY29tbW9uIHRpbWUgem9uZSBmb3IgZGF0ZXMKKwlpbiBnaXR3ZWIgb3V0cHV0IHZpYSBKYXZhU2NyaXB0LiAgRGF0ZXMgaW4gZ2l0d2ViIG91dHB1dCBpbmNsdWRlCisJYXV0aG9yZGF0ZSBhbmQgY29tbWl0dGVyZGF0ZSBpbiAiY29tbWl0IiwgImNvbW1pdGRpZmYiIGFuZCAibG9nIgorCXZpZXdzLCBhbmQgdGFnZ2VyZGF0ZSBpbiAidGFnIiB2aWV3LiAgRW5hYmxlZCBieSBkZWZhdWx0LgorKworVGhlIHZhbHVlIGlzIGEgbGlzdCBvZiB0aHJlZSB2YWx1ZXM6IGEgZGVmYXVsdCB0aW1lIHpvbmUgKGZvciBpZiB0aGUgY2xpZW50CitoYXNuJ3Qgc2VsZWN0ZWQgc29tZSBvdGhlciB0aW1lIHpvbmUgYW5kIHNhdmVkIGl0IGluIGEgY29va2llKSwgYSBuYW1lIG9mIGNvb2tpZQord2hlcmUgdG8gc3RvcmUgc2VsZWN0ZWQgdGltZSB6b25lLCBhbmQgYSBDU1MgY2xhc3MgdXNlZCB0byBtYXJrIHVwCitkYXRlcyBmb3IgbWFuaXB1bGF0aW9uLiAgSWYgeW91IHdhbnQgdG8gdHVybiB0aGlzIGZlYXR1cmUgb2ZmLCBzZXQgImRlZmF1bHQiCit0byBlbXB0eSBsaXN0OiBgW11gLgorKworVHlwaWNhbCBnaXR3ZWIgY29uZmlnIGZpbGVzIHdpbGwgb25seSBjaGFuZ2Ugc3RhcnRpbmcgKGRlZmF1bHQpIHRpbWUgem9uZSwKK2FuZCBsZWF2ZSBvdGhlciBlbGVtZW50cyBhdCB0aGVpciBkZWZhdWx0IHZhbHVlczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJGZlYXR1cmV7J2phdmFzY3JpcHQtdGltZXpvbmUnfXsnZGVmYXVsdCd9WzBdID0gInV0YyI7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoZSBleGFtcGxlIGNvbmZpZ3VyYXRpb24gcHJlc2VudGVkIGhlcmUgaXMgZ3VhcmFudGVlZCB0byBiZSBiYWNrd2FyZHMKK2FuZCBmb3J3YXJkIGNvbXBhdGlibGUuCisrCitUaW1lIHpvbmUgdmFsdWVzIGNhbiBiZSAibG9jYWwiIChmb3IgbG9jYWwgdGltZSB6b25lIHRoYXQgYnJvd3NlciB1c2VzKSwgInV0YyIKKyh3aGF0IGdpdHdlYiB1c2VzIHdoZW4gSmF2YVNjcmlwdCBvciB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQpLCBvciBudW1lcmljYWwKK3RpbWUgem9uZXMgaW4gdGhlIGZvcm0gb2YgIisvLUhITU0iLCBzdWNoIGFzICIrMDIwMCIuCisrCitQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisKK2V4dHJhLWJyYW5jaC1yZWZzOjoKKwlMaXN0IG9mIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgdW5kZXIgInJlZnMiIHdoaWNoIGFyZSBnb2luZyB0bworCWJlIHVzZWQgYXMgYnJhbmNoIHJlZnMuIEZvciBleGFtcGxlIGlmIHlvdSBoYXZlIGEgZ2Vycml0IHNldHVwCisJd2hlcmUgYWxsIGJyYW5jaGVzIHVuZGVyIHJlZnMvaGVhZHMvIGFyZSBvZmZpY2lhbCwKKwlwdXNoLWFmdGVyLXJldmlldyBvbmVzIGFuZCBicmFuY2hlcyB1bmRlciByZWZzL3NhbmRib3gvLAorCXJlZnMvd2lwIGFuZCByZWZzL290aGVyIGFyZSB1c2VyIG9uZXMgd2hlcmUgcGVybWlzc2lvbnMgYXJlCisJbXVjaCB3aWRlciwgdGhlbiB5b3UgbWlnaHQgd2FudCB0byBzZXQgdGhpcyB2YXJpYWJsZSBhcworCWZvbGxvd3M6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJGZlYXR1cmV7J2V4dHJhLWJyYW5jaC1yZWZzJ317J2RlZmF1bHQnfSA9CisJWydzYW5kYm94JywgJ3dpcCcsICdvdGhlciddOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoaXMgZmVhdHVyZSBjYW4gYmUgY29uZmlndXJlZCBvbiBwZXItcmVwb3NpdG9yeSBiYXNpcyBhZnRlciBzZXR0aW5nCiskZmVhdHVyZXsnZXh0cmEtYnJhbmNoLXJlZnMnfXsnb3ZlcnJpZGUnfSB0byB0cnVlLCB2aWEgcmVwb3NpdG9yeSdzCitgZ2l0d2ViLmV4dHJhQnJhbmNoUmVmc2AgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgd2hpY2ggY29udGFpbnMgYQorc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgcmVmcy4gQW4gZXhhbXBsZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZ2l0d2ViXQorCWV4dHJhQnJhbmNoUmVmcyA9IHNhbmRib3ggd2lwIG90aGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhlIGdpdHdlYi5leHRyYUJyYW5jaFJlZnMgaXMgYWN0dWFsbHkgYSBtdWx0aS12YWx1ZWQgY29uZmlndXJhdGlvbgordmFyaWFibGUsIHNvIGZvbGxvd2luZyBleGFtcGxlIGlzIGFsc28gY29ycmVjdCBhbmQgdGhlIHJlc3VsdCBpcyB0aGUKK3NhbWUgYXMgb2YgdGhlIHNuaXBwZXQgYWJvdmU6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2dpdHdlYl0KKwlleHRyYUJyYW5jaFJlZnMgPSBzYW5kYm94CisJZXh0cmFCcmFuY2hSZWZzID0gd2lwIG90aGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSXQgaXMgYW4gZXJyb3IgdG8gc3BlY2lmeSBhIHJlZiB0aGF0IGRvZXMgbm90IHBhc3MgImdpdCBjaGVjay1yZWYtZm9ybWF0Igorc2NydXRpbnkuIER1cGxpY2F0ZWQgdmFsdWVzIGFyZSBmaWx0ZXJlZC4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworVG8gZW5hYmxlIGJsYW1lLCBwaWNrYXhlIHNlYXJjaCwgYW5kIHNuYXBzaG90IHN1cHBvcnQgKGFsbG93aW5nICJ0YXIuZ3oiIGFuZAorInppcCIgc25hcHNob3RzKSwgd2hpbGUgYWxsb3dpbmcgaW5kaXZpZHVhbCBwcm9qZWN0cyB0byB0dXJuIHRoZW0gb2ZmLCBwdXQKK3RoZSBmb2xsb3dpbmcgaW4geW91ciBHSVRXRUJfQ09ORklHIGZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskZmVhdHVyZXsnYmxhbWUnfXsnZGVmYXVsdCd9ID0gWzFdOworJGZlYXR1cmV7J2JsYW1lJ317J292ZXJyaWRlJ30gPSAxOworCiskZmVhdHVyZXsncGlja2F4ZSd9eydkZWZhdWx0J30gPSBbMV07CiskZmVhdHVyZXsncGlja2F4ZSd9eydvdmVycmlkZSd9ID0gMTsKKworJGZlYXR1cmV7J3NuYXBzaG90J317J2RlZmF1bHQnfSA9IFsnemlwJywgJ3RneiddOworJGZlYXR1cmV7J3NuYXBzaG90J317J292ZXJyaWRlJ30gPSAxOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGFsbG93IG92ZXJyaWRpbmcgZm9yIHRoZSBzbmFwc2hvdCBmZWF0dXJlLCB5b3UgY2FuIHNwZWNpZnkgd2hpY2gKK3NuYXBzaG90IGZvcm1hdHMgYXJlIGdsb2JhbGx5IGRpc2FibGVkLiBZb3UgY2FuIGFsc28gYWRkIGFueSBjb21tYW5kLWxpbmUKK29wdGlvbnMgeW91IHdhbnQgKHN1Y2ggYXMgc2V0dGluZyB0aGUgY29tcHJlc3Npb24gbGV2ZWwpLiBGb3IgaW5zdGFuY2UsIHlvdQorY2FuIGRpc2FibGUgWmlwIGNvbXByZXNzZWQgc25hcHNob3RzIGFuZCBzZXQgKmd6aXAqKDEpIHRvIHJ1biBhdCBsZXZlbCA2IGJ5CithZGRpbmcgdGhlIGZvbGxvd2luZyBsaW5lcyB0byB5b3VyIGdpdHdlYiBjb25maWd1cmF0aW9uIGZpbGU6CisKKwkka25vd25fc25hcHNob3RfZm9ybWF0c3snemlwJ317J2Rpc2FibGVkJ30gPSAxOworCSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyd0Z3onfXsnY29tcHJlc3Nvcid9ID0gWydnemlwJywnLTYnXTsKKworQlVHUworLS0tLQorRGVidWdnaW5nIHdvdWxkIGJlIGVhc2llciBpZiB0aGUgZmFsbGJhY2sgY29uZmlndXJhdGlvbiBmaWxlCisoYC9ldGMvZ2l0d2ViLmNvbmZgKSBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJpZGUgaXRzIGxvY2F0aW9uCisoJ0dJVFdFQl9DT05GSUdfU1lTVEVNJykgaGFkIG5hbWVzIHJlZmxlY3RpbmcgdGhlaXIgImZhbGxiYWNrIiByb2xlLgorVGhlIGN1cnJlbnQgbmFtZXMgYXJlIGtlcHQgdG8gYXZvaWQgYnJlYWtpbmcgd29ya2luZyBzZXR1cHMuCisKK0VOVklST05NRU5UCistLS0tLS0tLS0tLQorVGhlIGxvY2F0aW9uIG9mIHBlci1pbnN0YW5jZSBhbmQgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlcyBjYW4gYmUKK292ZXJyaWRkZW4gdXNpbmcgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisKK0dJVFdFQl9DT05GSUc6OgorCVNldHMgbG9jYXRpb24gb2YgcGVyLWluc3RhbmNlIGNvbmZpZ3VyYXRpb24gZmlsZS4KK0dJVFdFQl9DT05GSUdfU1lTVEVNOjoKKwlTZXRzIGxvY2F0aW9uIG9mIGZhbGxiYWNrIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKwlUaGlzIGZpbGUgaXMgcmVhZCBvbmx5IGlmIHBlci1pbnN0YW5jZSBvbmUgZG9lcyBub3QgZXhpc3QuCitHSVRXRUJfQ09ORklHX0NPTU1PTjo6CisJU2V0cyBsb2NhdGlvbiBvZiBjb21tb24gc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlLgorCisKK0ZJTEVTCistLS0tLQorZ2l0d2ViX2NvbmZpZy5wZXJsOjoKKwlUaGlzIGlzIGRlZmF1bHQgbmFtZSBvZiBwZXItaW5zdGFuY2UgY29uZmlndXJhdGlvbiBmaWxlLiAgVGhlCisJZm9ybWF0IG9mIHRoaXMgZmlsZSBpcyBkZXNjcmliZWQgYWJvdmUuCisvZXRjL2dpdHdlYi5jb25mOjoKKwlUaGlzIGlzIGRlZmF1bHQgbmFtZSBvZiBmYWxsYmFjayBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uCisJZmlsZS4gIFRoaXMgZmlsZSBpcyB1c2VkIG9ubHkgaWYgcGVyLWluc3RhbmNlIGNvbmZpZ3VyYXRpb24KKwl2YXJpYWJsZSBpcyBub3QgZm91bmQuCisvZXRjL2dpdHdlYi1jb21tb24uY29uZjo6CisJVGhpcyBpcyBkZWZhdWx0IG5hbWUgb2YgY29tbW9uIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24KKwlmaWxlLgorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR3ZWJbMV0sIGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdCisKKydnaXR3ZWIvUkVBRE1FJywgJ2dpdHdlYi9JTlNUQUxMJworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0d2ViLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0d2ViLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2M5YjAzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXR3ZWIudHh0CkBAIC0wLDAgKzEsNzAzIEBACitnaXR3ZWIoMSkKKz09PT09PT09PQorCitOQU1FCistLS0tCitnaXR3ZWIgLSBHaXQgd2ViIGludGVyZmFjZSAod2ViIGZyb250ZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMpCisKK1NZTk9QU0lTCistLS0tLS0tLQorVG8gZ2V0IHN0YXJ0ZWQgd2l0aCBnaXR3ZWIsIHJ1biBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXSBmcm9tIGEgR2l0IHJlcG9zaXRvcnkuCitUaGlzIHdvdWxkIGNvbmZpZ3VyZSBhbmQgc3RhcnQgeW91ciB3ZWIgc2VydmVyLCBhbmQgcnVuIHdlYiBicm93c2VyIHBvaW50aW5nIHRvCitnaXR3ZWIuCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitHaXR3ZWIgcHJvdmlkZXMgYSB3ZWIgaW50ZXJmYWNlIHRvIEdpdCByZXBvc2l0b3JpZXMuICBJdHMgZmVhdHVyZXMgaW5jbHVkZToKKworKiBWaWV3aW5nIG11bHRpcGxlIEdpdCByZXBvc2l0b3JpZXMgd2l0aCBjb21tb24gcm9vdC4KKyogQnJvd3NpbmcgZXZlcnkgcmV2aXNpb24gb2YgdGhlIHJlcG9zaXRvcnkuCisqIFZpZXdpbmcgdGhlIGNvbnRlbnRzIG9mIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IGF0IGFueSByZXZpc2lvbi4KKyogVmlld2luZyB0aGUgcmV2aXNpb24gbG9nIG9mIGJyYW5jaGVzLCBoaXN0b3J5IG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcywKKyAgc2VlIHdoYXQgd2FzIGNoYW5nZWQgd2hlbiwgYnkgd2hvLgorKiBWaWV3aW5nIHRoZSBibGFtZS9hbm5vdGF0aW9uIGRldGFpbHMgb2YgYW55IGZpbGUgKGlmIGVuYWJsZWQpLgorKiBHZW5lcmF0aW5nIFJTUyBhbmQgQXRvbSBmZWVkcyBvZiBjb21taXRzLCBmb3IgYW55IGJyYW5jaC4KKyAgVGhlIGZlZWRzIGFyZSBhdXRvLWRpc2NvdmVyYWJsZSBpbiBtb2Rlcm4gd2ViIGJyb3dzZXJzLgorKiBWaWV3aW5nIGV2ZXJ5dGhpbmcgdGhhdCB3YXMgY2hhbmdlZCBpbiBhIHJldmlzaW9uLCBhbmQgc3RlcCB0aHJvdWdoCisgIHJldmlzaW9ucyBvbmUgYXQgYSB0aW1lLCB2aWV3aW5nIHRoZSBoaXN0b3J5IG9mIHRoZSByZXBvc2l0b3J5LgorKiBGaW5kaW5nIGNvbW1pdHMgd2hpY2ggY29tbWl0IG1lc3NhZ2VzIG1hdGNoZXMgZ2l2ZW4gc2VhcmNoIHRlcm0uCisKK1NlZSBodHRwOi8vcmVwby5vci5jei93L2dpdC5naXQvdHJlZS9IRUFEOi9naXR3ZWIvW10gZm9yIGdpdHdlYiBzb3VyY2UgY29kZSwKK2Jyb3dzZWQgdXNpbmcgZ2l0d2ViIGl0c2VsZi4KKworCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCitWYXJpb3VzIGFzcGVjdHMgb2YgZ2l0d2ViJ3MgYmVoYXZpb3IgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCB0aGUgY29uZmlndXJhdGlvbgorZmlsZSBgZ2l0d2ViX2NvbmZpZy5wZXJsYCBvciBgL2V0Yy9naXR3ZWIuY29uZmAuICBTZWUgdGhlIGxpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0KK2ZvciBkZXRhaWxzLgorCitSZXBvc2l0b3JpZXMKK35+fn5+fn5+fn5+fgorR2l0d2ViIGNhbiBzaG93IGluZm9ybWF0aW9uIGZyb20gb25lIG9yIG1vcmUgR2l0IHJlcG9zaXRvcmllcy4gIFRoZXNlCityZXBvc2l0b3JpZXMgaGF2ZSB0byBiZSBhbGwgb24gbG9jYWwgZmlsZXN5c3RlbSwgYW5kIGhhdmUgdG8gc2hhcmUgY29tbW9uCityZXBvc2l0b3J5IHJvb3QsIGkuZS4gYmUgYWxsIHVuZGVyIGEgc2luZ2xlIHBhcmVudCByZXBvc2l0b3J5IChidXQgc2VlIGFsc28KKyJBZHZhbmNlZCB3ZWIgc2VydmVyIHNldHVwIiBzZWN0aW9uLCAiV2Vic2VydmVyIGNvbmZpZ3VyYXRpb24gd2l0aCBtdWx0aXBsZQorcHJvamVjdHMnIHJvb3QiIHN1YnNlY3Rpb24pLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3VyICRwcm9qZWN0cm9vdCA9ICcvcGF0aC90by9wYXJlbnQvZGlyZWN0b3J5JzsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciBgJHByb2plY3Ryb290YCBpcyBgL3B1Yi9naXRgLiAgWW91IGNhbiBjaGFuZ2UgaXQgZHVyaW5nCitidWlsZGluZyBnaXR3ZWIgdmlhIGBHSVRXRUJfUFJPSkVDVFJPT1RgIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKK0J5IGRlZmF1bHQgYWxsIEdpdCByZXBvc2l0b3JpZXMgdW5kZXIgYCRwcm9qZWN0cm9vdGAgYXJlIHZpc2libGUgYW5kIGF2YWlsYWJsZQordG8gZ2l0d2ViLiAgVGhlIGxpc3Qgb2YgcHJvamVjdHMgaXMgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgYnkgc2Nhbm5pbmcgdGhlCitgJHByb2plY3Ryb290YCBkaXJlY3RvcnkgZm9yIEdpdCByZXBvc2l0b3JpZXMgKGZvciBvYmplY3QgZGF0YWJhc2VzIHRvIGJlCittb3JlIGV4YWN0OyBnaXR3ZWIgaXMgbm90IGludGVyZXN0ZWQgaW4gYSB3b3JraW5nIGFyZWEsIGFuZCBpcyBiZXN0IHN1aXRlZAordG8gc2hvd2luZyAiYmFyZSIgcmVwb3NpdG9yaWVzKS4KKworVGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkgaW4gZ2l0d2ViIGlzIHRoZSBwYXRoIHRvIGl0cyBgJEdJVF9ESVJgIChpdHMgb2JqZWN0CitkYXRhYmFzZSkgcmVsYXRpdmUgdG8gYCRwcm9qZWN0cm9vdGAuICBUaGVyZWZvcmUgdGhlIHJlcG9zaXRvcnkgJHJlcG8gY2FuIGJlCitmb3VuZCBhdCAiJHByb2plY3Ryb290LyRyZXBvIi4KKworCitQcm9qZWN0cyBsaXN0IGZpbGUgZm9ybWF0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitJbnN0ZWFkIG9mIGhhdmluZyBnaXR3ZWIgZmluZCByZXBvc2l0b3JpZXMgYnkgc2Nhbm5pbmcgZmlsZXN5c3RlbQorc3RhcnRpbmcgZnJvbSAkcHJvamVjdHJvb3QsIHlvdSBjYW4gcHJvdmlkZSBhIHByZS1nZW5lcmF0ZWQgbGlzdCBvZgordmlzaWJsZSBwcm9qZWN0cyBieSBzZXR0aW5nIGAkcHJvamVjdHNfbGlzdGAgdG8gcG9pbnQgdG8gYSBwbGFpbiB0ZXh0CitmaWxlIHdpdGggYSBsaXN0IG9mIHByb2plY3RzICh3aXRoIHNvbWUgYWRkaXRpb25hbCBpbmZvKS4KKworVGhpcyBmaWxlIHVzZXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisKKyogT25lIHJlY29yZCAoZm9yIHByb2plY3QgLyByZXBvc2l0b3J5KSBwZXIgbGluZTsgZG9lcyBub3Qgc3VwcG9ydCBsaW5lCitjb250aW51YXRpb24gKG5ld2xpbmUgZXNjYXBpbmcpLgorCisqIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgYXJlIGlnbm9yZWQuCisKKyogV2hpdGVzcGFjZSBzZXBhcmF0ZWQgZmllbGRzOyBhbnkgcnVuIG9mIHdoaXRlc3BhY2UgY2FuIGJlIHVzZWQgYXMgZmllbGQKK3NlcGFyYXRvciAocnVsZXMgZm9yIFBlcmwncyAiYHNwbGl0KCIgIiwgJGxpbmUpYCIpLgorCisqIEZpZWxkcyB1c2UgbW9kaWZpZWQgVVJJIGVuY29kaW5nLCBkZWZpbmVkIGluIFJGQyAzOTg2LCBzZWN0aW9uIDIuMQorKFBlcmNlbnQtRW5jb2RpbmcpLCBvciByYXRoZXIgIlF1ZXJ5IHN0cmluZyBlbmNvZGluZyIgKHNlZQoraHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVlcnlfc3RyaW5nI1VSTF9lbmNvZGluZ1tdKSwgdGhlIGRpZmZlcmVuY2UKK2JlaW5nIHRoYXQgU1AgKCIgIikgY2FuIGJlIGVuY29kZWQgYXMgIntwbHVzfSIgKGFuZCB0aGVyZWZvcmUgIntwbHVzfSIgaGFzIHRvIGJlCithbHNvIHBlcmNlbnQtZW5jb2RlZCkuCisrCitSZXNlcnZlZCBjaGFyYWN0ZXJzIGFyZTogIiUiICh1c2VkIGZvciBlbmNvZGluZyksICJ7cGx1c30iIChjYW4gYmUgdXNlZCB0bworZW5jb2RlIFNQQUNFKSwgYWxsIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcyBkZWZpbmVkIGluIFBlcmwsIGluY2x1ZGluZyBTUCwKK1RBQiBhbmQgTEYsICh1c2VkIHRvIHNlcGFyYXRlIGZpZWxkcyBpbiBhIHJlY29yZCkuCisKKyogQ3VycmVudGx5IHJlY29nbml6ZWQgZmllbGRzIGFyZToKKzxyZXBvc2l0b3J5IHBhdGg+OjoKKwlwYXRoIHRvIHJlcG9zaXRvcnkgR0lUX0RJUiwgcmVsYXRpdmUgdG8gYCRwcm9qZWN0cm9vdGAKKzxyZXBvc2l0b3J5IG93bmVyPjo6CisJZGlzcGxheWVkIGFzIHJlcG9zaXRvcnkgb3duZXIsIHByZWZlcmFibHkgZnVsbCBuYW1lLCBvciBlbWFpbCwKKwlvciBib3RoCisKK1lvdSBjYW4gZ2VuZXJhdGUgdGhlIHByb2plY3RzIGxpc3QgaW5kZXggZmlsZSB1c2luZyB0aGUgcHJvamVjdF9pbmRleCBhY3Rpb24KKyh0aGUgJ1RYVCcgbGluayBvbiBwcm9qZWN0cyBsaXN0IHBhZ2UpIGRpcmVjdGx5IGZyb20gZ2l0d2ViOyBzZWUgYWxzbworIkdlbmVyYXRpbmcgcHJvamVjdHMgbGlzdCB1c2luZyBnaXR3ZWIiIHNlY3Rpb24gYmVsb3cuCisKK0V4YW1wbGUgY29udGVudHM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZm9vLmdpdCAgICAgICBKb2UrUitIYWNrZXIrPGpvZUBleGFtcGxlLmNvbT4KK2Zvby9iYXIuZ2l0ICAgTytXK05lcis8b3duZXJAZXhhbXBsZS5vcmc+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0J5IGRlZmF1bHQgdGhpcyBmaWxlIGNvbnRyb2xzIG9ubHkgd2hpY2ggcHJvamVjdHMgYXJlICp2aXNpYmxlKiBvbiBwcm9qZWN0cworbGlzdCBwYWdlIChub3RlIHRoYXQgZW50cmllcyB0aGF0IGRvIG5vdCBwb2ludCB0byBjb3JyZWN0bHkgcmVjb2duaXplZCBHaXQKK3JlcG9zaXRvcmllcyB3b24ndCBiZSBkaXNwbGF5ZWQgYnkgZ2l0d2ViKS4gIEV2ZW4gaWYgYSBwcm9qZWN0IGlzIG5vdAordmlzaWJsZSBvbiBwcm9qZWN0cyBsaXN0IHBhZ2UsIHlvdSBjYW4gdmlldyBpdCBuZXZlcnRoZWxlc3MgYnkgaGFuZC1jcmFmdGluZworYSBnaXR3ZWIgVVJMLiAgQnkgc2V0dGluZyBgJHN0cmljdF9leHBvcnRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKHNlZQorbGlua2dpdDpnaXR3ZWIuY29uZls1XSkgdG8gdHJ1ZSB2YWx1ZSB5b3UgY2FuIGFsbG93IHZpZXdpbmcgb25seSBvZgorcmVwb3NpdG9yaWVzIGFsc28gc2hvd24gb24gdGhlIG92ZXJ2aWV3IHBhZ2UgKGkuZS4gb25seSBwcm9qZWN0cyBleHBsaWNpdGx5CitsaXN0ZWQgaW4gcHJvamVjdHMgbGlzdCBmaWxlIHdpbGwgYmUgYWNjZXNzaWJsZSkuCisKKworR2VuZXJhdGluZyBwcm9qZWN0cyBsaXN0IHVzaW5nIGdpdHdlYgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitXZSBhc3N1bWUgdGhhdCBHSVRXRUJfQ09ORklHIGhhcyBpdHMgZGVmYXVsdCBNYWtlZmlsZSB2YWx1ZSwgbmFtZWx5CisnZ2l0d2ViX2NvbmZpZy5wZXJsJy4gUHV0IHRoZSBmb2xsb3dpbmcgaW4gJ2dpdHdlYl9tYWtlX2luZGV4LnBlcmwnIGZpbGU6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWFkX2NvbmZpZ19maWxlKCJnaXR3ZWJfY29uZmlnLnBlcmwiKTsKKyRwcm9qZWN0c19saXN0ID0gJHByb2plY3Ryb290OworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuIGNyZWF0ZSB0aGUgZm9sbG93aW5nIHNjcmlwdCB0byBnZXQgbGlzdCBvZiBwcm9qZWN0IGluIHRoZSBmb3JtYXQKK3N1aXRhYmxlIGZvciBHSVRXRUJfTElTVCBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChvcgorYCRwcm9qZWN0c19saXN0YCB2YXJpYWJsZSBpbiBnaXR3ZWIgY29uZmlnKToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyEvYmluL3NoCisKK2V4cG9ydCBHSVRXRUJfQ09ORklHPSJnaXR3ZWJfbWFrZV9pbmRleC5wZXJsIgorZXhwb3J0IEdBVEVXQVlfSU5URVJGQUNFPSJDR0kvMS4xIgorZXhwb3J0IEhUVFBfQUNDRVBUPSIqLyoiCitleHBvcnQgUkVRVUVTVF9NRVRIT0Q9IkdFVCIKK2V4cG9ydCBRVUVSWV9TVFJJTkc9ImE9cHJvamVjdF9pbmRleCIKKworcGVybCAtLSAvdmFyL3d3dy9jZ2ktYmluL2dpdHdlYi5jZ2kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUnVuIHRoaXMgc2NyaXB0IGFuZCBzYXZlIGl0cyBvdXRwdXQgdG8gYSBmaWxlLiAgVGhpcyBmaWxlIGNvdWxkIHRoZW4gYmUgdXNlZAorYXMgcHJvamVjdHMgbGlzdCBmaWxlLCB3aGljaCBtZWFucyB0aGF0IHlvdSBjYW4gc2V0IGAkcHJvamVjdHNfbGlzdGAgdG8gaXRzCitmaWxlbmFtZS4KKworCitDb250cm9sbGluZyBhY2Nlc3MgdG8gR2l0IHJlcG9zaXRvcmllcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0J5IGRlZmF1bHQgYWxsIEdpdCByZXBvc2l0b3JpZXMgdW5kZXIgYCRwcm9qZWN0cm9vdGAgYXJlIHZpc2libGUgYW5kCithdmFpbGFibGUgdG8gZ2l0d2ViLiAgWW91IGNhbiBob3dldmVyIGNvbmZpZ3VyZSBob3cgZ2l0d2ViIGNvbnRyb2xzIGFjY2VzcwordG8gcmVwb3NpdG9yaWVzLgorCisqIEFzIGRlc2NyaWJlZCBpbiAiUHJvamVjdHMgbGlzdCBmaWxlIGZvcm1hdCIgc2VjdGlvbiwgeW91IGNhbiBjb250cm9sIHdoaWNoCitwcm9qZWN0cyBhcmUgKnZpc2libGUqIGJ5IHNlbGVjdGl2ZWx5IGluY2x1ZGluZyByZXBvc2l0b3JpZXMgaW4gcHJvamVjdHMKK2xpc3QgZmlsZSwgYW5kIHNldHRpbmcgYCRwcm9qZWN0c19saXN0YCBnaXR3ZWIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0bworcG9pbnQgdG8gaXQuICBXaXRoIGAkc3RyaWN0X2V4cG9ydGAgc2V0LCBwcm9qZWN0cyBsaXN0IGZpbGUgY2FuIGJlIHVzZWQgdG8KK2NvbnRyb2wgd2hpY2ggcmVwb3NpdG9yaWVzIGFyZSAqYXZhaWxhYmxlKiBhcyB3ZWxsLgorCisqIFlvdSBjYW4gY29uZmlndXJlIGdpdHdlYiB0byBvbmx5IGxpc3QgYW5kIGFsbG93IHZpZXdpbmcgb2YgdGhlIGV4cGxpY2l0bHkKK2V4cG9ydGVkIHJlcG9zaXRvcmllcywgdmlhIGAkZXhwb3J0X29rYCB2YXJpYWJsZSBpbiBnaXR3ZWIgY29uZmlnIGZpbGU7IHNlZQorbGlua2dpdDpnaXR3ZWIuY29uZls1XSBtYW5wYWdlLiAgSWYgaXQgZXZhbHVhdGVzIHRvIHRydWUsIGdpdHdlYiBzaG93cworcmVwb3NpdG9yaWVzIG9ubHkgaWYgdGhpcyBmaWxlIG5hbWVkIGJ5IGAkZXhwb3J0X29rYCBleGlzdHMgaW4gaXRzIG9iamVjdAorZGF0YWJhc2UgKGlmIGRpcmVjdG9yeSBoYXMgdGhlIG1hZ2ljIGZpbGUgbmFtZWQgYCRleHBvcnRfb2tgKS4KKysKK0ZvciBleGFtcGxlIGxpbmtnaXQ6Z2l0LWRhZW1vblsxXSBieSBkZWZhdWx0ICh1bmxlc3MgYC0tZXhwb3J0LWFsbGAgb3B0aW9uCitpcyB1c2VkKSBhbGxvd3MgcHVsbGluZyBvbmx5IGZvciB0aG9zZSByZXBvc2l0b3JpZXMgdGhhdCBoYXZlCisnZ2l0LWRhZW1vbi1leHBvcnQtb2snIGZpbGUuICBBZGRpbmcKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXIgJGV4cG9ydF9vayA9ICJnaXQtZGFlbW9uLWV4cG9ydC1vayI7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworbWFrZXMgZ2l0d2ViIHNob3cgYW5kIGFsbG93IGFjY2VzcyBvbmx5IHRvIHRob3NlIHJlcG9zaXRvcmllcyB0aGF0IGNhbiBiZQorZmV0Y2hlZCBmcm9tIHZpYSBgZ2l0Oi8vYCBwcm90b2NvbC4KKworKiBGaW5hbGx5LCBpdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IGFuIGFyYml0cmFyeSBwZXJsIHN1YnJvdXRpbmUgdGhhdCB3aWxsCitiZSBjYWxsZWQgZm9yIGVhY2ggcmVwb3NpdG9yeSB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIGJlIGV4cG9ydGVkLiAgVGhlCitzdWJyb3V0aW5lIHJlY2VpdmVzIGFuIGFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3QgKHJlcG9zaXRvcnkpIGFzIGl0cyBvbmx5CitwYXJhbWV0ZXIgKGkuZS4gIiRwcm9qZWN0cm9vdC8kcHJvamVjdCIpLgorKworRm9yIGV4YW1wbGUsIGlmIHlvdSB1c2UgbW9kX3BlcmwgdG8gcnVuIHRoZSBzY3JpcHQsIGFuZCBoYXZlIGR1bWIKK0hUVFAgcHJvdG9jb2wgYXV0aGVudGljYXRpb24gY29uZmlndXJlZCBmb3IgeW91ciByZXBvc2l0b3JpZXMsIHlvdQorY2FuIHVzZSB0aGUgZm9sbG93aW5nIGhvb2sgdG8gYWxsb3cgYWNjZXNzIG9ubHkgaWYgdGhlIHVzZXIgaXMKK2F1dGhvcml6ZWQgdG8gcmVhZCB0aGUgZmlsZXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJGV4cG9ydF9hdXRoX2hvb2sgPSBzdWIgeworCXVzZSBBcGFjaGUyOjpTdWJSZXF1ZXN0ICgpOworCXVzZSBBcGFjaGUyOjpDb25zdCAtY29tcGlsZSA9PiBxdyhIVFRQX09LKTsKKwlteSAkcGF0aCA9ICIkX1swXS9IRUFEIjsKKwlteSAkciAgICA9IEFwYWNoZTI6OlJlcXVlc3RVdGlsLT5yZXF1ZXN0OworCW15ICRzdWIgID0gJHItPmxvb2t1cF9maWxlKCRwYXRoKTsKKwlyZXR1cm4gJHN1Yi0+ZmlsZW5hbWUgZXEgJHBhdGgKKwkgICAgJiYgJHN1Yi0+c3RhdHVzID09IEFwYWNoZTI6OkNvbnN0OjpIVFRQX09LOworfTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworUGVyLXJlcG9zaXRvcnkgZ2l0d2ViIGNvbmZpZ3VyYXRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitZb3UgY2FuIGNvbmZpZ3VyZSBpbmRpdmlkdWFsIHJlcG9zaXRvcmllcyBzaG93biBpbiBnaXR3ZWIgYnkgY3JlYXRpbmcgZmlsZQoraW4gdGhlIGBHSVRfRElSYCBvZiBHaXQgcmVwb3NpdG9yeSwgb3IgYnkgc2V0dGluZyBzb21lIHJlcG8gY29uZmlndXJhdGlvbgordmFyaWFibGUgKGluIGBHSVRfRElSL2NvbmZpZ2AsIHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCitZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGZpbGVzIGluIHJlcG9zaXRvcnk6CisKK1JFQURNRS5odG1sOjoKKwlBIGh0bWwgZmlsZSAoSFRNTCBmcmFnbWVudCkgd2hpY2ggaXMgaW5jbHVkZWQgb24gdGhlIGdpdHdlYiBwcm9qZWN0CisJInN1bW1hcnkiIHBhZ2UgaW5zaWRlIGA8ZGl2PmAgYmxvY2sgZWxlbWVudC4gWW91IGNhbiB1c2UgaXQgZm9yIGxvbmdlcgorCWRlc2NyaXB0aW9uIG9mIGEgcHJvamVjdCwgdG8gcHJvdmlkZSBsaW5rcyAoZm9yIGV4YW1wbGUgdG8gcHJvamVjdCdzCisJaG9tZXBhZ2UpLCBldGMuIFRoaXMgaXMgcmVjb2duaXplZCBvbmx5IGlmIFhTUyBwcmV2ZW50aW9uIGlzIG9mZgorCShgJHByZXZlbnRfeHNzYCBpcyBmYWxzZSwgc2VlIGxpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0pOyBhIHdheSB0byBpbmNsdWRlCisJYSBSRUFETUUgc2FmZWx5IHdoZW4gWFNTIHByZXZlbnRpb24gaXMgb24gbWF5IGJlIHdvcmtlZCBvdXQgaW4gdGhlCisJZnV0dXJlLgorCitkZXNjcmlwdGlvbiAob3IgYGdpdHdlYi5kZXNjcmlwdGlvbmApOjoKKwlTaG9ydCAoc2hvcnRlbmVkIHRvIGAkcHJvamVjdHNfbGlzdF9kZXNjcmlwdGlvbl93aWR0aGAgaW4gdGhlIHByb2plY3RzCisJbGlzdCBwYWdlLCB3aGljaCBpcyAyNSBjaGFyYWN0ZXJzIGJ5IGRlZmF1bHQ7IHNlZQorCWxpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0pIHNpbmdsZSBsaW5lIGRlc2NyaXB0aW9uIG9mIGEgcHJvamVjdCAob2YgYQorCXJlcG9zaXRvcnkpLiAgUGxhaW4gdGV4dCBmaWxlOyBIVE1MIHdpbGwgYmUgZXNjYXBlZC4gIEJ5IGRlZmF1bHQgc2V0IHRvCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitVbm5hbWVkIHJlcG9zaXRvcnk7IGVkaXQgdGhpcyBmaWxlIHRvIG5hbWUgaXQgZm9yIGdpdHdlYi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK2Zyb20gdGhlIHRlbXBsYXRlIGR1cmluZyByZXBvc2l0b3J5IGNyZWF0aW9uLCB1c3VhbGx5IGluc3RhbGxlZCBpbgorYC91c3Ivc2hhcmUvZ2l0LWNvcmUvdGVtcGxhdGVzL2AuICBZb3UgY2FuIHVzZSB0aGUgYGdpdHdlYi5kZXNjcmlwdGlvbmAgcmVwbworY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYnV0IHRoZSBmaWxlIHRha2VzIHByZWNlZGVuY2UuCisKK2NhdGVnb3J5IChvciBgZ2l0d2ViLmNhdGVnb3J5YCk6OgorCVNpbmdlIGxpbmUgY2F0ZWdvcnkgb2YgYSBwcm9qZWN0LCB1c2VkIHRvIGdyb3VwIHByb2plY3RzIGlmCisJYCRwcm9qZWN0c19saXN0X2dyb3VwX2NhdGVnb3JpZXNgIGlzIGVuYWJsZWQuICBCeSBkZWZhdWx0IChmaWxlIGFuZAorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYWJzZW50KSwgdW5jYXRlZ29yaXplZCBwcm9qZWN0cyBhcmUgcHV0IGluIHRoZQorCWAkcHJvamVjdF9saXN0X2RlZmF1bHRfY2F0ZWdvcnlgIGNhdGVnb3J5LiAgWW91IGNhbiB1c2UgdGhlCisJYGdpdHdlYi5jYXRlZ29yeWAgcmVwbyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBidXQgdGhlIGZpbGUgdGFrZXMKKwlwcmVjZWRlbmNlLgorKworVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGAkcHJvamVjdHNfbGlzdF9ncm91cF9jYXRlZ29yaWVzYCBhbmQKK2AkcHJvamVjdF9saXN0X2RlZmF1bHRfY2F0ZWdvcnlgIGFyZSBkZXNjcmliZWQgaW4gbGlua2dpdDpnaXR3ZWIuY29uZls1XQorCitjbG9uZXVybCAob3IgbXVsdGlwbGUtdmFsdWVkIGBnaXR3ZWIudXJsYCk6OgorCUZpbGUgd2l0aCByZXBvc2l0b3J5IFVSTCAodXNlZCBmb3IgY2xvbmUgYW5kIGZldGNoKSwgb25lIHBlciBsaW5lLgorCURpc3BsYXllZCBpbiB0aGUgcHJvamVjdCBzdW1tYXJ5IHBhZ2UuIFlvdSBjYW4gdXNlIG11bHRpcGxlLXZhbHVlZAorCWBnaXR3ZWIudXJsYCByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9yIHRoYXQsIGJ1dCB0aGUgZmlsZQorCXRha2VzIHByZWNlZGVuY2UuCisrCitUaGlzIGlzIHBlci1yZXBvc2l0b3J5IGVuaGFuY2VtZW50IC8gdmVyc2lvbiBvZiBnbG9iYWwgcHJlZml4LWJhc2VkCitgQGdpdF9iYXNlX3VybF9saXN0YCBnaXR3ZWIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoc2VlCitsaW5rZ2l0OmdpdHdlYi5jb25mWzVdKS4KKworZ2l0d2ViLm93bmVyOjoKKwlZb3UgY2FuIHVzZSB0aGUgYGdpdHdlYi5vd25lcmAgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIHNldAorCXJlcG9zaXRvcnkncyBvd25lci4gIEl0IGlzIGRpc3BsYXllZCBpbiB0aGUgcHJvamVjdCBsaXN0IGFuZCBzdW1tYXJ5CisJcGFnZS4KKysKK0lmIGl0J3Mgbm90IHNldCwgZmlsZXN5c3RlbSBkaXJlY3RvcnkncyBvd25lciBpcyB1c2VkICh2aWEgR0VDT1MgZmllbGQsCitpLmUuIHJlYWwgbmFtZSBmaWVsZCBmcm9tICpnZXRwd3VpZCooMykpIGlmIGAkcHJvamVjdHNfbGlzdGAgaXMgdW5zZXQKKyhnaXR3ZWIgc2NhbnMgYCRwcm9qZWN0cm9vdGAgZm9yIHJlcG9zaXRvcmllcyk7IGlmIGAkcHJvamVjdHNfbGlzdGAKK3BvaW50cyB0byBmaWxlIHdpdGggbGlzdCBvZiByZXBvc2l0b3JpZXMsIHRoZW4gcHJvamVjdCBvd25lciBkZWZhdWx0cyB0bwordmFsdWUgZnJvbSB0aGlzIGZpbGUgZm9yIGdpdmVuIHJlcG9zaXRvcnkuCisKK3ZhcmlvdXMgYGdpdHdlYi4qYCBjb25maWcgdmFyaWFibGVzIChpbiBjb25maWcpOjoKKwlSZWFkIGRlc2NyaXB0aW9uIG9mIGAlZmVhdHVyZWAgaGFzaCBmb3IgZGV0YWlsZWQgbGlzdCwgYW5kIGRlc2NyaXB0aW9ucy4KKwlTZWUgYWxzbyAiQ29uZmlndXJpbmcgZ2l0d2ViIGZlYXR1cmVzIiBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0KKworCitBQ1RJT05TLCBBTkQgVVJMUworLS0tLS0tLS0tLS0tLS0tLS0KK0dpdHdlYiBjYW4gdXNlIHBhdGhfaW5mbyAoY29tcG9uZW50KSBiYXNlZCBVUkxzLCBvciBpdCBjYW4gcGFzcyBhbGwgbmVjZXNzYXJ5CitpbmZvcm1hdGlvbiB2aWEgcXVlcnkgcGFyYW1ldGVycy4gIFRoZSB0eXBpY2FsIGdpdHdlYiBVUkxzIGFyZSBicm9rZW4gZG93biBpbiB0bworZml2ZSBjb21wb25lbnRzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLi4uL2dpdHdlYi5jZ2kvPHJlcG8+LzxhY3Rpb24+LzxyZXZpc2lvbj46LzxwYXRoPj88YXJndW1lbnRzPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcmVwbzo6CisJVGhlIHJlcG9zaXRvcnkgdGhlIGFjdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBvbi4KKysKK0FsbCBhY3Rpb25zIGV4Y2VwdCBmb3IgdGhvc2UgdGhhdCBsaXN0IGFsbCBhdmFpbGFibGUgcHJvamVjdHMsCitpbiB3aGF0ZXZlciBmb3JtLCByZXF1aXJlIHRoaXMgcGFyYW1ldGVyLgorCithY3Rpb246OgorCVRoZSBhY3Rpb24gdGhhdCB3aWxsIGJlIHJ1bi4gIERlZmF1bHRzIHRvICdwcm9qZWN0c19saXN0JyBpZiByZXBvCisJaXMgbm90IHNldCwgYW5kIHRvICdzdW1tYXJ5JyBvdGhlcndpc2UuCisKK3JldmlzaW9uOjoKKwlSZXZpc2lvbiBzaG93bi4gIERlZmF1bHRzIHRvIEhFQUQuCisKK3BhdGg6OgorCVRoZSBwYXRoIHdpdGhpbiB0aGUgPHJlcG9zaXRvcnk+IHRoYXQgdGhlIGFjdGlvbiBpcyBwZXJmb3JtZWQgb24sCisJZm9yIHRob3NlIGFjdGlvbnMgdGhhdCByZXF1aXJlIGl0LgorCithcmd1bWVudHM6OgorCUFueSBhcmd1bWVudHMgdGhhdCBjb250cm9sIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGFjdGlvbi4KKworU29tZSBhY3Rpb25zIHJlcXVpcmUgb3IgYWxsb3cgdG8gc3BlY2lmeSB0d28gcmV2aXNpb25zLCBhbmQgc29tZXRpbWVzIGV2ZW4gdHdvCitwYXRobmFtZXMuICBJbiBtb3N0IGdlbmVyYWwgZm9ybSBzdWNoIHBhdGhfaW5mbyAoY29tcG9uZW50KSBiYXNlZCBnaXR3ZWIgVVJMCitsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisuLi4vZ2l0d2ViLmNnaS88cmVwbz4vPGFjdGlvbj4vPHJldmlzaW9uX2Zyb20+Oi88cGF0aF9mcm9tPi4uPHJldmlzaW9uX3RvPjovPHBhdGhfdG8+Pzxhcmd1bWVudHM+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0VhY2ggYWN0aW9uIGlzIGltcGxlbWVudGVkIGFzIGEgc3Vicm91dGluZSwgYW5kIG11c3QgYmUgcHJlc2VudCBpbiAlYWN0aW9ucworaGFzaC4gIFNvbWUgYWN0aW9ucyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYW5kIG11c3QgYmUgdHVybmVkIG9uIHZpYSBmZWF0dXJlCittZWNoYW5pc20uICBGb3IgZXhhbXBsZSB0byBlbmFibGUgJ2JsYW1lJyB2aWV3IGFkZCB0aGUgZm9sbG93aW5nIHRvIGdpdHdlYgorY29uZmlndXJhdGlvbiBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJGZlYXR1cmV7J2JsYW1lJ317J2RlZmF1bHQnfSA9IFsxXTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworQWN0aW9uczoKK35+fn5+fn5+CitUaGUgc3RhbmRhcmQgYWN0aW9ucyBhcmU6CisKK3Byb2plY3RfbGlzdDo6CisJTGlzdHMgdGhlIGF2YWlsYWJsZSBHaXQgcmVwb3NpdG9yaWVzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBjb21tYW5kIGlmIG5vCisJcmVwb3NpdG9yeSBpcyBzcGVjaWZpZWQgaW4gdGhlIFVSTC4KKworc3VtbWFyeTo6CisJRGlzcGxheXMgc3VtbWFyeSBhYm91dCBnaXZlbiByZXBvc2l0b3J5LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBjb21tYW5kIGlmCisJbm8gYWN0aW9uIGlzIHNwZWNpZmllZCBpbiBVUkwsIGFuZCBvbmx5IHJlcG9zaXRvcnkgaXMgc3BlY2lmaWVkLgorCitoZWFkczo6CityZW1vdGVzOjoKKwlMaXN0cyBhbGwgbG9jYWwgb3IgYWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBpbiBnaXZlbiByZXBvc2l0b3J5LgorKworVGhlIGxhdHRlciBpcyBub3QgYXZhaWxhYmxlIGJ5IGRlZmF1bHQsIHVubGVzcyBjb25maWd1cmVkLgorCit0YWdzOjoKKwlMaXN0IGFsbCB0YWdzIChsaWdodHdlaWdodCBhbmQgYW5ub3RhdGVkKSBpbiBnaXZlbiByZXBvc2l0b3J5LgorCitibG9iOjoKK3RyZWU6OgorCVNob3dzIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4gYSBnaXZlbiByZXBvc2l0b3J5IHBhdGgsIGF0IGdpdmVuCisJcmV2aXNpb24uICBUaGlzIGlzIGRlZmF1bHQgY29tbWFuZCBpZiBubyBhY3Rpb24gaXMgc3BlY2lmaWVkIGluIHRoZSBVUkwsCisJYW5kIHBhdGggaXMgZ2l2ZW4uCisKK2Jsb2JfcGxhaW46OgorCVJldHVybnMgdGhlIHJhdyBkYXRhIGZvciB0aGUgZmlsZSBpbiBnaXZlbiByZXBvc2l0b3J5LCBhdCBnaXZlbiBwYXRoIGFuZAorCXJldmlzaW9uLiAgTGlua3MgdG8gdGhpcyBhY3Rpb24gYXJlIG1hcmtlZCAncmF3Jy4KKworYmxvYmRpZmY6OgorCVNob3dzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHJldmlzaW9ucyBvZiB0aGUgc2FtZSBmaWxlLgorCitibGFtZTo6CitibGFtZV9pbmNyZW1lbnRhbDo6CisJU2hvd3MgdGhlIGJsYW1lIChhbHNvIGNhbGxlZCBhbm5vdGF0aW9uKSBpbmZvcm1hdGlvbiBmb3IgYSBmaWxlLiBPbiBhCisJcGVyIGxpbmUgYmFzaXMgaXQgc2hvd3MgdGhlIHJldmlzaW9uIGluIHdoaWNoIHRoYXQgbGluZSB3YXMgbGFzdCBjaGFuZ2VkCisJYW5kIHRoZSB1c2VyIHRoYXQgY29tbWl0dGVkIHRoZSBjaGFuZ2UuICBUaGUgaW5jcmVtZW50YWwgdmVyc2lvbiAod2hpY2gKKwlpZiBjb25maWd1cmVkIGlzIHVzZWQgYXV0b21hdGljYWxseSB3aGVuIEphdmFTY3JpcHQgaXMgZW5hYmxlZCkgdXNlcworCUFqYXggdG8gaW5jcmVtZW50YWxseSBhZGQgYmxhbWUgaW5mbyB0byB0aGUgY29udGVudHMgb2YgZ2l2ZW4gZmlsZS4KKysKK1RoaXMgYWN0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCisKK2NvbW1pdDo6Citjb21taXRkaWZmOjoKKwlTaG93cyBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIGNvbW1pdCBpbiBhIHJlcG9zaXRvcnkuICBUaGUgJ2NvbW1pdCcKKwl2aWV3IHNob3dzIGluZm9ybWF0aW9uIGFib3V0IGNvbW1pdCBpbiBtb3JlIGRldGFpbCwgdGhlICdjb21taXRkaWZmJworCWFjdGlvbiBzaG93cyBjaGFuZ2VzZXQgZm9yIGdpdmVuIGNvbW1pdC4KKworcGF0Y2g6OgorCVJldHVybnMgdGhlIGNvbW1pdCBpbiBwbGFpbiB0ZXh0IG1haWwgZm9ybWF0LCBzdWl0YWJsZSBmb3IgYXBwbHlpbmcgd2l0aAorCWxpbmtnaXQ6Z2l0LWFtWzFdLgorCit0YWc6OgorCURpc3BsYXkgc3BlY2lmaWMgYW5ub3RhdGVkIHRhZyAodGFnIG9iamVjdCkuCisKK2xvZzo6CitzaG9ydGxvZzo6CisJU2hvd3MgbG9nIGluZm9ybWF0aW9uIChjb21taXQgbWVzc2FnZSBvciBqdXN0IGNvbW1pdCBzdWJqZWN0KSBmb3IgYQorCWdpdmVuIGJyYW5jaCAoc3RhcnRpbmcgZnJvbSBnaXZlbiByZXZpc2lvbikuCisrCitUaGUgJ3Nob3J0bG9nJyB2aWV3IGlzIG1vcmUgY29tcGFjdDsgaXQgc2hvd3Mgb25lIGNvbW1pdCBwZXIgbGluZS4KKworaGlzdG9yeTo6CisJU2hvd3MgaGlzdG9yeSBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgaW4gYSBnaXZlbiByZXBvc2l0b3J5IHBhdGgsCisJc3RhcnRpbmcgZnJvbSBnaXZlbiByZXZpc2lvbiAoZGVmYXVsdHMgdG8gSEVBRCwgaS5lLiBkZWZhdWx0IGJyYW5jaCkuCisrCitUaGlzIHZpZXcgaXMgc2ltaWxhciB0byAnc2hvcnRsb2cnIHZpZXcuCisKK3Jzczo6CithdG9tOjoKKwlHZW5lcmF0ZXMgYW4gUlNTIChvciBBdG9tKSBmZWVkIG9mIGNoYW5nZXMgdG8gcmVwb3NpdG9yeS4KKworCitXRUJTRVJWRVIgQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgc2VjdGlvbiBleHBsYWlucyBob3cgdG8gY29uZmlndXJlIHNvbWUgY29tbW9uIHdlYnNlcnZlcnMgdG8gcnVuIGdpdHdlYi4gSW4KK2FsbCBjYXNlcywgYC9wYXRoL3RvL2dpdHdlYmAgaW4gdGhlIGV4YW1wbGVzIGlzIHRoZSBkaXJlY3RvcnkgeW91IHJhbiBpbnN0YWxsZWQKK2dpdHdlYiBpbiwgYW5kIGNvbnRhaW5zIGBnaXR3ZWJfY29uZmlnLnBlcmxgLgorCitJZiB5b3UndmUgY29uZmlndXJlZCBhIHdlYiBzZXJ2ZXIgdGhhdCBpc24ndCBsaXN0ZWQgaGVyZSBmb3IgZ2l0d2ViLCBwbGVhc2Ugc2VuZAoraW4gdGhlIGluc3RydWN0aW9ucyBzbyB0aGV5IGNhbiBiZSBpbmNsdWRlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLgorCitBcGFjaGUgYXMgQ0dJCit+fn5+fn5+fn5+fn5+CitBcGFjaGUgbXVzdCBiZSBjb25maWd1cmVkIHRvIHN1cHBvcnQgQ0dJIHNjcmlwdHMgaW4gdGhlIGRpcmVjdG9yeSBpbgord2hpY2ggZ2l0d2ViIGlzIGluc3RhbGxlZC4gIExldCdzIGFzc3VtZSB0aGF0IGl0IGlzIGAvdmFyL3d3dy9jZ2ktYmluYAorZGlyZWN0b3J5LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2NyaXB0QWxpYXMgL2NnaS1iaW4vICIvdmFyL3d3dy9jZ2ktYmluLyIKKworPERpcmVjdG9yeSAiL3Zhci93d3cvY2dpLWJpbiI+CisgICAgT3B0aW9ucyBJbmRleGVzIEZvbGxvd1N5bWxpbmtzIEV4ZWNDR0kKKyAgICBBbGxvd092ZXJyaWRlIE5vbmUKKyAgICBPcmRlciBhbGxvdyxkZW55CisgICAgQWxsb3cgZnJvbSBhbGwKKzwvRGlyZWN0b3J5PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGF0IGNvbmZpZ3VyYXRpb24gdGhlIGZ1bGwgcGF0aCB0byBicm93c2UgcmVwb3NpdG9yaWVzIHdvdWxkIGJlOgorCisgIGh0dHA6Ly9zZXJ2ZXIvY2dpLWJpbi9naXR3ZWIuY2dpCisKK0FwYWNoZSB3aXRoIG1vZF9wZXJsLCB2aWEgTW9kUGVybDo6UmVnaXN0cnkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1lvdSBjYW4gdXNlIG1vZF9wZXJsIHdpdGggZ2l0d2ViLiAgWW91IG11c3QgaW5zdGFsbCBBcGFjaGU6OlJlZ2lzdHJ5CisoZm9yIG1vZF9wZXJsIDEueCkgb3IgTW9kUGVybDo6UmVnaXN0cnkgKGZvciBtb2RfcGVybCAyLngpIHRvIGVuYWJsZQordGhpcyBzdXBwb3J0LgorCitBc3N1bWluZyB0aGF0IGdpdHdlYiBpcyBpbnN0YWxsZWQgdG8gYC92YXIvd3d3L3BlcmxgLCB0aGUgZm9sbG93aW5nCitBcGFjaGUgY29uZmlndXJhdGlvbiAoZm9yIG1vZF9wZXJsIDIueCkgaXMgc3VpdGFibGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBbGlhcyAvcGVybCAiL3Zhci93d3cvcGVybCIKKworPERpcmVjdG9yeSAiL3Zhci93d3cvcGVybCI+CisgICAgU2V0SGFuZGxlciBwZXJsLXNjcmlwdAorICAgIFBlcmxSZXNwb25zZUhhbmRsZXIgTW9kUGVybDo6UmVnaXN0cnkKKyAgICBQZXJsT3B0aW9ucyArUGFyc2VIZWFkZXJzCisgICAgT3B0aW9ucyBJbmRleGVzIEZvbGxvd1N5bWxpbmtzICtFeGVjQ0dJCisgICAgQWxsb3dPdmVycmlkZSBOb25lCisgICAgT3JkZXIgYWxsb3csZGVueQorICAgIEFsbG93IGZyb20gYWxsCis8L0RpcmVjdG9yeT4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dpdGggdGhhdCBjb25maWd1cmF0aW9uIHRoZSBmdWxsIHBhdGggdG8gYnJvd3NlIHJlcG9zaXRvcmllcyB3b3VsZCBiZToKKworICBodHRwOi8vc2VydmVyL3BlcmwvZ2l0d2ViLmNnaQorCitBcGFjaGUgd2l0aCBGYXN0Q0dJCit+fn5+fn5+fn5+fn5+fn5+fn5+CitHaXR3ZWIgd29ya3Mgd2l0aCBBcGFjaGUgYW5kIEZhc3RDR0kuICBGaXJzdCB5b3UgbmVlZCB0byByZW5hbWUsIGNvcHkKK29yIHN5bWxpbmsgZ2l0d2ViLmNnaSB0byBnaXR3ZWIuZmNnaS4gIExldCdzIGFzc3VtZSB0aGF0IGdpdHdlYiBpcworaW5zdGFsbGVkIGluIGAvdXNyL3NoYXJlL2dpdHdlYmAgZGlyZWN0b3J5LiAgVGhlIGZvbGxvd2luZyBBcGFjaGUKK2NvbmZpZ3VyYXRpb24gaXMgc3VpdGFibGUgKFVOVEVTVEVEISkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Zhc3RDZ2lTZXJ2ZXIgL3Vzci9zaGFyZS9naXR3ZWIvZ2l0d2ViLmNnaQorU2NyaXB0QWxpYXMgL2dpdHdlYiAvdXNyL3NoYXJlL2dpdHdlYi9naXR3ZWIuY2dpCisKK0FsaWFzIC9naXR3ZWIvc3RhdGljIC91c3Ivc2hhcmUvZ2l0d2ViL3N0YXRpYworPERpcmVjdG9yeSAvdXNyL3NoYXJlL2dpdHdlYi9zdGF0aWM+CisgICAgU2V0SGFuZGxlciBkZWZhdWx0LWhhbmRsZXIKKzwvRGlyZWN0b3J5PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGF0IGNvbmZpZ3VyYXRpb24gdGhlIGZ1bGwgcGF0aCB0byBicm93c2UgcmVwb3NpdG9yaWVzIHdvdWxkIGJlOgorCisgIGh0dHA6Ly9zZXJ2ZXIvZ2l0d2ViCisKKworQURWQU5DRUQgV0VCIFNFUlZFUiBTRVRVUAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQWxsIG9mIHRob3NlIGV4YW1wbGVzIHVzZSByZXF1ZXN0IHJld3JpdGluZywgYW5kIG5lZWQgYG1vZF9yZXdyaXRlYAorKG9yIGVxdWl2YWxlbnQ7IGV4YW1wbGVzIGJlbG93IGFyZSB3cml0dGVuIGZvciBBcGFjaGUpLgorCitTaW5nbGUgVVJMIGZvciBnaXR3ZWIgYW5kIGZvciBmZXRjaGluZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0lmIHlvdSB3YW50IHRvIGhhdmUgb25lIFVSTCBmb3IgYm90aCBnaXR3ZWIgYW5kIHlvdXIgYGh0dHA6Ly9gCityZXBvc2l0b3JpZXMsIHlvdSBjYW4gY29uZmlndXJlIEFwYWNoZSBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8VmlydHVhbEhvc3QgKjo4MD4KKyAgICBTZXJ2ZXJOYW1lICAgIGdpdC5leGFtcGxlLm9yZworICAgIERvY3VtZW50Um9vdCAgL3B1Yi9naXQKKyAgICBTZXRFbnYgICAgICAgIEdJVFdFQl9DT05GSUcgICAvZXRjL2dpdHdlYi5jb25mCisKKyAgICAjIHR1cm5pbmcgb24gbW9kIHJld3JpdGUKKyAgICBSZXdyaXRlRW5naW5lIG9uCisKKyAgICAjIG1ha2UgdGhlIGZyb250IHBhZ2UgYW4gaW50ZXJuYWwgcmV3cml0ZSB0byB0aGUgZ2l0d2ViIHNjcmlwdAorICAgIFJld3JpdGVSdWxlIF4vJCAgL2NnaS1iaW4vZ2l0d2ViLmNnaQorCisgICAgIyBtYWtlIGFjY2VzcyBmb3IgImR1bWIgY2xpZW50cyIgd29yaworICAgIFJld3JpdGVSdWxlIF4vKC4qXC5naXQvKD8hLz8oSEVBRHxpbmZvfG9iamVjdHN8cmVmcykpLiopPyQgXAorCQkvY2dpLWJpbi9naXR3ZWIuY2dpJXtSRVFVRVNUX1VSSX0gIFtMLFBUXQorPC9WaXJ0dWFsSG9zdD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBhYm92ZSBjb25maWd1cmF0aW9uIGV4cGVjdHMgeW91ciBwdWJsaWMgcmVwb3NpdG9yaWVzIHRvIGxpdmUgdW5kZXIKK2AvcHViL2dpdGAgYW5kIHdpbGwgc2VydmUgdGhlbSBhcyBgaHR0cDovL2dpdC5kb21haW4ub3JnL2Rpci11bmRlci1wdWItZ2l0YCwKK2JvdGggYXMgY2xvbmFibGUgR2l0IFVSTCBhbmQgYXMgYnJvd3NlYWJsZSBnaXR3ZWIgaW50ZXJmYWNlLiAgSWYgeW91IHRoZW4KK3N0YXJ0IHlvdXIgbGlua2dpdDpnaXQtZGFlbW9uWzFdIHdpdGggYC0tYmFzZS1wYXRoPS9wdWIvZ2l0IC0tZXhwb3J0LWFsbGAKK3RoZW4geW91IGNhbiBldmVuIHVzZSB0aGUgYGdpdDovL2AgVVJMIHdpdGggZXhhY3RseSB0aGUgc2FtZSBwYXRoLgorCitTZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgR0lUV0VCX0NPTkZJR2Agd2lsbCB0ZWxsIGdpdHdlYiB0byB1c2UgdGhlCituYW1lZCBmaWxlIChpLmUuIGluIHRoaXMgZXhhbXBsZSBgL2V0Yy9naXR3ZWIuY29uZmApIGFzIGEgY29uZmlndXJhdGlvbiBmb3IKK2dpdHdlYi4gIFlvdSBkb24ndCByZWFsbHkgbmVlZCBpdCBpbiBhYm92ZSBleGFtcGxlOyBpdCBpcyByZXF1aXJlZCBvbmx5IGlmCit5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBpbiBkaWZmZXJlbnQgcGxhY2UgdGhhbiBidWlsdC1pbiAoZHVyaW5nCitjb21waWxpbmcgZ2l0d2ViKSAnZ2l0d2ViX2NvbmZpZy5wZXJsJyBvciBgL2V0Yy9naXR3ZWIuY29uZmAuICBTZWUKK2xpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0gZm9yIGRldGFpbHMsIGVzcGVjaWFsbHkgaW5mb3JtYXRpb24gYWJvdXQgcHJlY2VkZW5jZQorcnVsZXMuCisKK0lmIHlvdSB1c2UgdGhlIHJld3JpdGUgcnVsZXMgZnJvbSB0aGUgZXhhbXBsZSB5b3UgKm1pZ2h0KiBhbHNvIG5lZWQKK3NvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgaW4geW91ciBnaXR3ZWIgY29uZmlndXJhdGlvbiBmaWxlCisoYC9ldGMvZ2l0d2ViLmNvbmZgIGZvbGxvd2luZyBleGFtcGxlKToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0BzdHlsZXNoZWV0cyA9ICgiL3NvbWUvYWJzb2x1dGUvcGF0aC9naXR3ZWIuY3NzIik7CiskbXlfdXJpICAgID0gIi8iOworJGhvbWVfbGluayA9ICIvIjsKKyRwZXJfcmVxdWVzdF9jb25maWcgPSAxOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTm93YWRheXMgdGhvdWdoIGdpdHdlYiBzaG91bGQgY3JlYXRlIEhUTUwgYmFzZSB0YWcgd2hlbiBuZWVkZWQgKHRvIHNldCBiYXNlCitVUkkgZm9yIHJlbGF0aXZlIGxpbmtzKSwgc28gaXQgc2hvdWxkIHdvcmsgYXV0b21hdGljYWxseS4KKworCitXZWJzZXJ2ZXIgY29uZmlndXJhdGlvbiB3aXRoIG11bHRpcGxlIHByb2plY3RzJyByb290Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitJZiB5b3Ugd2FudCB0byB1c2UgZ2l0d2ViIHdpdGggc2V2ZXJhbCBwcm9qZWN0IHJvb3RzIHlvdSBjYW4gZWRpdCB5b3VyCitBcGFjaGUgdmlydHVhbCBob3N0IGFuZCBnaXR3ZWIgY29uZmlndXJhdGlvbiBmaWxlcyBpbiB0aGUgZm9sbG93aW5nIHdheS4KKworVGhlIHZpcnR1YWwgaG9zdCBjb25maWd1cmF0aW9uIChpbiBBcGFjaGUgY29uZmlndXJhdGlvbiBmaWxlKSBzaG91bGQgbG9vaworbGlrZSB0aGlzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzxWaXJ0dWFsSG9zdCAqOjgwPgorICAgIFNlcnZlck5hbWUgICAgZ2l0LmV4YW1wbGUub3JnCisgICAgRG9jdW1lbnRSb290ICAvcHViL2dpdAorICAgIFNldEVudiAgICAgICAgR0lUV0VCX0NPTkZJRyAgL2V0Yy9naXR3ZWIuY29uZgorCisgICAgIyB0dXJuaW5nIG9uIG1vZCByZXdyaXRlCisgICAgUmV3cml0ZUVuZ2luZSBvbgorCisgICAgIyBtYWtlIHRoZSBmcm9udCBwYWdlIGFuIGludGVybmFsIHJld3JpdGUgdG8gdGhlIGdpdHdlYiBzY3JpcHQKKyAgICBSZXdyaXRlUnVsZSBeLyQgIC9jZ2ktYmluL2dpdHdlYi5jZ2kgIFtRU0EsTCxQVF0KKworICAgICMgbG9vayBmb3IgYSBwdWJsaWNfZ2l0IGZvbGRlciBpbiB1bml4IHVzZXJzJyBob21lCisgICAgIyBodHRwOi8vZ2l0LmV4YW1wbGUub3JnL348dXNlcj4vCisgICAgUmV3cml0ZVJ1bGUgXi9cfihbXlwvXSspKC98L2dpdHdlYi5jZ2kpPyQJL2NnaS1iaW4vZ2l0d2ViLmNnaSBcCisJCVtRU0EsRT1HSVRXRUJfUFJPSkVDVFJPT1Q6L2hvbWUvJDEvcHVibGljX2dpdC8sTCxQVF0KKworICAgICMgaHR0cDovL2dpdC5leGFtcGxlLm9yZy8rPHVzZXI+LworICAgICNSZXdyaXRlUnVsZSBeL1wrKFteXC9dKykoL3wvZ2l0d2ViLmNnaSk/JAkvY2dpLWJpbi9naXR3ZWIuY2dpIFwKKwkJIFtRU0EsRT1HSVRXRUJfUFJPSkVDVFJPT1Q6L2hvbWUvJDEvcHVibGljX2dpdC8sTCxQVF0KKworICAgICMgaHR0cDovL2dpdC5leGFtcGxlLm9yZy91c2VyLzx1c2VyPi8KKyAgICAjUmV3cml0ZVJ1bGUgXi91c2VyLyhbXlwvXSspLyhnaXR3ZWIuY2dpKT8kCS9jZ2ktYmluL2dpdHdlYi5jZ2kgXAorCQkgW1FTQSxFPUdJVFdFQl9QUk9KRUNUUk9PVDovaG9tZS8kMS9wdWJsaWNfZ2l0LyxMLFBUXQorCisgICAgIyBkZWZpbmVkIGxpc3Qgb2YgcHJvamVjdCByb290cworICAgIFJld3JpdGVSdWxlIF4vc2NtKC98L2dpdHdlYi5jZ2kpPyQgL2NnaS1iaW4vZ2l0d2ViLmNnaSBcCisJCVtRU0EsRT1HSVRXRUJfUFJPSkVDVFJPT1Q6L3B1Yi9zY20vLEwsUFRdCisgICAgUmV3cml0ZVJ1bGUgXi92YXIoL3wvZ2l0d2ViLmNnaSk/JCAvY2dpLWJpbi9naXR3ZWIuY2dpIFwKKwkJW1FTQSxFPUdJVFdFQl9QUk9KRUNUUk9PVDovdmFyL2dpdC8sTCxQVF0KKworICAgICMgbWFrZSBhY2Nlc3MgZm9yICJkdW1iIGNsaWVudHMiIHdvcmsKKyAgICBSZXdyaXRlUnVsZSBeLyguKlwuZ2l0Lyg/IS8/KEhFQUR8aW5mb3xvYmplY3RzfHJlZnMpKS4qKT8kIFwKKwkJL2NnaS1iaW4vZ2l0d2ViLmNnaSV7UkVRVUVTVF9VUkl9ICBbTCxQVF0KKzwvVmlydHVhbEhvc3Q+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIZXJlIGFjdHVhbCBwcm9qZWN0IHJvb3QgaXMgcGFzc2VkIHRvIGdpdHdlYiB2aWEgYEdJVFdFQl9QUk9KRUNUX1JPT1RgCitlbnZpcm9ubWVudCB2YXJpYWJsZSBmcm9tIGEgd2ViIHNlcnZlciwgc28geW91IG5lZWQgdG8gcHV0IHRoZSBmb2xsb3dpbmcKK2xpbmUgaW4gZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZSAoYC9ldGMvZ2l0d2ViLmNvbmZgIGluIGFib3ZlIGV4YW1wbGUpOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyRwcm9qZWN0cm9vdCA9ICRFTlZ7J0dJVFdFQl9QUk9KRUNUUk9PVCd9IHx8ICIvcHViL2dpdCI7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKk5vdGUqIHRoYXQgdGhpcyByZXF1aXJlcyB0byBiZSBzZXQgZm9yIGVhY2ggcmVxdWVzdCwgc28gZWl0aGVyCitgJHBlcl9yZXF1ZXN0X2NvbmZpZ2AgbXVzdCBiZSBmYWxzZSwgb3IgdGhlIGFib3ZlIG11c3QgYmUgcHV0IGluIGNvZGUKK3JlZmVyZW5jZWQgYnkgYCRwZXJfcmVxdWVzdF9jb25maWdgOworCitUaGVzZSBjb25maWd1cmF0aW9ucyBlbmFibGUgdHdvIHRoaW5ncy4gRmlyc3QsIGVhY2ggdW5peCB1c2VyIChgPHVzZXI+YCkgb2YKK3RoZSBzZXJ2ZXIgd2lsbCBiZSBhYmxlIHRvIGJyb3dzZSB0aHJvdWdoIGdpdHdlYiBHaXQgcmVwb3NpdG9yaWVzIGZvdW5kIGluCitgfi9wdWJsaWNfZ2l0L2Agd2l0aCB0aGUgZm9sbG93aW5nIHVybDoKKworICBodHRwOi8vZ2l0LmV4YW1wbGUub3JnL348dXNlcj4vCisKK0lmIHlvdSBkbyBub3Qgd2FudCB0aGlzIGZlYXR1cmUgb24geW91ciBzZXJ2ZXIganVzdCByZW1vdmUgdGhlIHNlY29uZAorcmV3cml0ZSBydWxlLgorCitJZiB5b3UgYWxyZWFkeSB1c2UgYG1vZF91c2VyZGlyYCBpbiB5b3VyIHZpcnR1YWwgaG9zdCBvciB5b3UgZG9uJ3Qgd2FudCB0bwordXNlIHRoZSBcJ34nIGFzIGZpcnN0IGNoYXJhY3RlciwganVzdCBjb21tZW50IG9yIHJlbW92ZSB0aGUgc2Vjb25kIHJld3JpdGUKK3J1bGUsIGFuZCB1bmNvbW1lbnQgb25lIG9mIHRoZSBmb2xsb3dpbmcgYWNjb3JkaW5nIHRvIHdoYXQgeW91IHdhbnQuCisKK1NlY29uZCwgcmVwb3NpdG9yaWVzIGZvdW5kIGluIGAvcHViL3NjbS9gIGFuZCBgL3Zhci9naXQvYCB3aWxsIGJlIGFjY2Vzc2libGUKK3Rocm91Z2ggYGh0dHA6Ly9naXQuZXhhbXBsZS5vcmcvc2NtL2AgYW5kIGBodHRwOi8vZ2l0LmV4YW1wbGUub3JnL3Zhci9gLgorWW91IGNhbiBhZGQgYXMgbWFueSBwcm9qZWN0IHJvb3RzIGFzIHlvdSB3YW50IGJ5IGFkZGluZyByZXdyaXRlIHJ1bGVzIGxpa2UKK3RoZSB0aGlyZCBhbmQgdGhlIGZvdXJ0aC4KKworCitQQVRIX0lORk8gdXNhZ2UKK35+fn5+fn5+fn5+fn5+fgorSWYgeW91IGVuYWJsZSBQQVRIX0lORk8gdXNhZ2UgaW4gZ2l0d2ViIGJ5IHB1dHRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyRmZWF0dXJleydwYXRoaW5mbyd9eydkZWZhdWx0J30gPSBbMV07CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbiB5b3VyIGdpdHdlYiBjb25maWd1cmF0aW9uIGZpbGUsIGl0IGlzIHBvc3NpYmxlIHRvIHNldCB1cCB5b3VyIHNlcnZlciBzbwordGhhdCBpdCBjb25zdW1lcyBhbmQgcHJvZHVjZXMgVVJMcyBpbiB0aGUgZm9ybQorCisgIGh0dHA6Ly9naXQuZXhhbXBsZS5jb20vcHJvamVjdC5naXQvc2hvcnRsb2cvc29tZXRhZworCitpLmUuIHdpdGhvdXQgJ2dpdHdlYi5jZ2knIHBhcnQsIGJ5IHVzaW5nIGEgY29uZmlndXJhdGlvbiBzdWNoIGFzIHRoZQorZm9sbG93aW5nLiAgVGhpcyBjb25maWd1cmF0aW9uIGFzc3VtZXMgdGhhdCBgL3Zhci93d3cvZ2l0d2ViYCBpcyB0aGUKK0RvY3VtZW50Um9vdCBvZiB5b3VyIHdlYnNlcnZlciwgY29udGFpbnMgdGhlIGdpdHdlYi5jZ2kgc2NyaXB0IGFuZAorY29tcGxlbWVudGFyeSBzdGF0aWMgZmlsZXMgKHN0eWxlc2hlZXQsIGZhdmljb24sIEphdmFTY3JpcHQpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8VmlydHVhbEhvc3QgKjo4MD4KKwlTZXJ2ZXJBbGlhcyBnaXQuZXhhbXBsZS5jb20KKworCURvY3VtZW50Um9vdCAvdmFyL3d3dy9naXR3ZWIKKworCTxEaXJlY3RvcnkgL3Zhci93d3cvZ2l0d2ViPgorCQlPcHRpb25zIEV4ZWNDR0kKKwkJQWRkSGFuZGxlciBjZ2ktc2NyaXB0IGNnaQorCisJCURpcmVjdG9yeUluZGV4IGdpdHdlYi5jZ2kKKworCQlSZXdyaXRlRW5naW5lIE9uCisJCVJld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1mCisJCVJld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1kCisJCVJld3JpdGVSdWxlIF4uKiAvZ2l0d2ViLmNnaS8kMCBbTCxQVF0KKwk8L0RpcmVjdG9yeT4KKzwvVmlydHVhbEhvc3Q+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgcmV3cml0ZSBydWxlIGd1YXJhbnRlZXMgdGhhdCBleGlzdGluZyBzdGF0aWMgZmlsZXMgd2lsbCBiZSBwcm9wZXJseQorc2VydmVkLCB3aGVyZWFzIGFueSBvdGhlciBVUkwgd2lsbCBiZSBwYXNzZWQgdG8gZ2l0d2ViIGFzIFBBVEhfSU5GTworcGFyYW1ldGVyLgorCisqTm90aWNlKiB0aGF0IGluIHRoaXMgY2FzZSB5b3UgZG9uJ3QgbmVlZCBzcGVjaWFsIHNldHRpbmdzIGZvcgorYEBzdHlsZXNoZWV0c2AsIGAkbXlfdXJpYCBhbmQgYCRob21lX2xpbmtgLCBidXQgeW91IGxvc2UgImR1bWIgY2xpZW50IgorYWNjZXNzIHRvIHlvdXIgcHJvamVjdCAuZ2l0IGRpcnMgKGRlc2NyaWJlZCBpbiAiU2luZ2xlIFVSTCBmb3IgZ2l0d2ViIGFuZAorZm9yIGZldGNoaW5nIiBzZWN0aW9uKS4gIEEgcG9zc2libGUgd29ya2Fyb3VuZCBmb3IgdGhlIGxhdHRlciBpcyB0aGUKK2ZvbGxvd2luZzogaW4geW91ciBwcm9qZWN0IHJvb3QgZGlyIChlLmcuIGAvcHViL2dpdGApIGhhdmUgdGhlIHByb2plY3RzCituYW1lZCAqd2l0aG91dCogYSAuZ2l0IGV4dGVuc2lvbiAoZS5nLiBgL3B1Yi9naXQvcHJvamVjdGAgaW5zdGVhZCBvZgorYC9wdWIvZ2l0L3Byb2plY3QuZ2l0YCkgYW5kIGNvbmZpZ3VyZSBBcGFjaGUgYXMgZm9sbG93czoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzxWaXJ0dWFsSG9zdCAqOjgwPgorCVNlcnZlckFsaWFzIGdpdC5leGFtcGxlLmNvbQorCisJRG9jdW1lbnRSb290IC92YXIvd3d3L2dpdHdlYgorCisJQWxpYXNNYXRjaCBeKC8uKj8pKFwuZ2l0KSgvLiopPyQgL3B1Yi9naXQkMSQzCisJPERpcmVjdG9yeSAvdmFyL3d3dy9naXR3ZWI+CisJCU9wdGlvbnMgRXhlY0NHSQorCQlBZGRIYW5kbGVyIGNnaS1zY3JpcHQgY2dpCisKKwkJRGlyZWN0b3J5SW5kZXggZ2l0d2ViLmNnaQorCisJCVJld3JpdGVFbmdpbmUgT24KKwkJUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWYKKwkJUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWQKKwkJUmV3cml0ZVJ1bGUgXi4qIC9naXR3ZWIuY2dpLyQwIFtMLFBUXQorCTwvRGlyZWN0b3J5PgorPC9WaXJ0dWFsSG9zdD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGFkZGl0aW9uYWwgQWxpYXNNYXRjaCBtYWtlcyBpdCBzbyB0aGF0CisKKyAgaHR0cDovL2dpdC5leGFtcGxlLmNvbS9wcm9qZWN0LmdpdAorCit3aWxsIGdpdmUgcmF3IGFjY2VzcyB0byB0aGUgcHJvamVjdCdzIEdpdCBkaXIgKHNvIHRoYXQgdGhlIHByb2plY3QgY2FuIGJlCitjbG9uZWQpLCB3aGlsZQorCisgIGh0dHA6Ly9naXQuZXhhbXBsZS5jb20vcHJvamVjdAorCit3aWxsIHByb3ZpZGUgaHVtYW4tZnJpZW5kbHkgZ2l0d2ViIGFjY2Vzcy4KKworVGhpcyBzb2x1dGlvbiBpcyBub3QgMTAwJSBidWxsZXRwcm9vZiwgaW4gdGhlIHNlbnNlIHRoYXQgaWYgc29tZSBwcm9qZWN0IGhhcworYSBuYW1lZCByZWYgKGJyYW5jaCwgdGFnKSBzdGFydGluZyB3aXRoIGBnaXQvYCwgdGhlbiBwYXRocyBzdWNoIGFzCisKKyAgaHR0cDovL2dpdC5leGFtcGxlLmNvbS9wcm9qZWN0L2NvbW1hbmQvYWJyYW5jaC4uZ2l0L2FicmFuY2gKKword2lsbCBmYWlsIHdpdGggYSA0MDQgZXJyb3IuCisKKworQlVHUworLS0tLQorUGxlYXNlIHJlcG9ydCBhbnkgYnVncyBvciBmZWF0dXJlIHJlcXVlc3RzIHRvIGdpdEB2Z2VyLmtlcm5lbC5vcmcsCitwdXR0aW5nICJnaXR3ZWIiIGluIHRoZSBzdWJqZWN0IG9mIGVtYWlsLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0sIGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdCisKK2BnaXR3ZWIvUkVBRE1FYCwgYGdpdHdlYi9JTlNUQUxMYAorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0d29ya2Zsb3dzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0d29ya2Zsb3dzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmMwZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXR3b3JrZmxvd3MudHh0CkBAIC0wLDAgKzEsNDc5IEBACitnaXR3b3JrZmxvd3MoNykKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXR3b3JrZmxvd3MgLSBBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCitnaXQgKgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGRvY3VtZW50IGF0dGVtcHRzIHRvIHdyaXRlIGRvd24gYW5kIG1vdGl2YXRlIHNvbWUgb2YgdGhlIHdvcmtmbG93CitlbGVtZW50cyB1c2VkIGZvciBgZ2l0LmdpdGAgaXRzZWxmLiAgTWFueSBpZGVhcyBhcHBseSBpbiBnZW5lcmFsLAordGhvdWdoIHRoZSBmdWxsIHdvcmtmbG93IGlzIHJhcmVseSByZXF1aXJlZCBmb3Igc21hbGxlciBwcm9qZWN0cyB3aXRoCitmZXdlciBwZW9wbGUgaW52b2x2ZWQuCisKK1dlIGZvcm11bGF0ZSBhIHNldCBvZiAncnVsZXMnIGZvciBxdWljayByZWZlcmVuY2UsIHdoaWxlIHRoZSBwcm9zZQordHJpZXMgdG8gbW90aXZhdGUgZWFjaCBvZiB0aGVtLiAgRG8gbm90IGFsd2F5cyB0YWtlIHRoZW0gbGl0ZXJhbGx5OworeW91IHNob3VsZCB2YWx1ZSBnb29kIHJlYXNvbnMgZm9yIHlvdXIgYWN0aW9ucyBoaWdoZXIgdGhhbiBtYW5wYWdlcworc3VjaCBhcyB0aGlzIG9uZS4KKworCitTRVBBUkFURSBDSEFOR0VTCistLS0tLS0tLS0tLS0tLS0tCisKK0FzIGEgZ2VuZXJhbCBydWxlLCB5b3Ugc2hvdWxkIHRyeSB0byBzcGxpdCB5b3VyIGNoYW5nZXMgaW50byBzbWFsbAorbG9naWNhbCBzdGVwcywgYW5kIGNvbW1pdCBlYWNoIG9mIHRoZW0uICBUaGV5IHNob3VsZCBiZSBjb25zaXN0ZW50LAord29ya2luZyBpbmRlcGVuZGVudGx5IG9mIGFueSBsYXRlciBjb21taXRzLCBwYXNzIHRoZSB0ZXN0IHN1aXRlLCBldGMuCitUaGlzIG1ha2VzIHRoZSByZXZpZXcgcHJvY2VzcyBtdWNoIGVhc2llciwgYW5kIHRoZSBoaXN0b3J5IG11Y2ggbW9yZQordXNlZnVsIGZvciBsYXRlciBpbnNwZWN0aW9uIGFuZCBhbmFseXNpcywgZm9yIGV4YW1wbGUgd2l0aAorbGlua2dpdDpnaXQtYmxhbWVbMV0gYW5kIGxpbmtnaXQ6Z2l0LWJpc2VjdFsxXS4KKworVG8gYWNoaWV2ZSB0aGlzLCB0cnkgdG8gc3BsaXQgeW91ciB3b3JrIGludG8gc21hbGwgc3RlcHMgZnJvbSB0aGUgdmVyeQorYmVnaW5uaW5nLiBJdCBpcyBhbHdheXMgZWFzaWVyIHRvIHNxdWFzaCBhIGZldyBjb21taXRzIHRvZ2V0aGVyIHRoYW4KK3RvIHNwbGl0IG9uZSBiaWcgY29tbWl0IGludG8gc2V2ZXJhbC4gIERvbid0IGJlIGFmcmFpZCBvZiBtYWtpbmcgdG9vCitzbWFsbCBvciBpbXBlcmZlY3Qgc3RlcHMgYWxvbmcgdGhlIHdheS4gWW91IGNhbiBhbHdheXMgZ28gYmFjayBsYXRlcgorYW5kIGVkaXQgdGhlIGNvbW1pdHMgd2l0aCBgZ2l0IHJlYmFzZSAtLWludGVyYWN0aXZlYCBiZWZvcmUgeW91CitwdWJsaXNoIHRoZW0uICBZb3UgY2FuIHVzZSBgZ2l0IHN0YXNoIHB1c2ggLS1rZWVwLWluZGV4YCB0byBydW4gdGhlCit0ZXN0IHN1aXRlIGluZGVwZW5kZW50IG9mIG90aGVyIHVuY29tbWl0dGVkIGNoYW5nZXM7IHNlZSB0aGUgRVhBTVBMRVMKK3NlY3Rpb24gb2YgbGlua2dpdDpnaXQtc3Rhc2hbMV0uCisKKworTUFOQUdJTkcgQlJBTkNIRVMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSB0d28gbWFpbiB0b29scyB0aGF0IGNhbiBiZSB1c2VkIHRvIGluY2x1ZGUgY2hhbmdlcyBmcm9tIG9uZQorYnJhbmNoIG9uIGFub3RoZXI6IGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIGFuZAorbGlua2dpdDpnaXQtY2hlcnJ5LXBpY2tbMV0uCisKK01lcmdlcyBoYXZlIG1hbnkgYWR2YW50YWdlcywgc28gd2UgdHJ5IHRvIHNvbHZlIGFzIG1hbnkgcHJvYmxlbXMgYXMKK3Bvc3NpYmxlIHdpdGggbWVyZ2VzIGFsb25lLiAgQ2hlcnJ5LXBpY2tpbmcgaXMgc3RpbGwgb2NjYXNpb25hbGx5Cit1c2VmdWw7IHNlZSAiTWVyZ2luZyB1cHdhcmRzIiBiZWxvdyBmb3IgYW4gZXhhbXBsZS4KKworTW9zdCBpbXBvcnRhbnRseSwgbWVyZ2luZyB3b3JrcyBhdCB0aGUgYnJhbmNoIGxldmVsLCB3aGlsZQorY2hlcnJ5LXBpY2tpbmcgd29ya3MgYXQgdGhlIGNvbW1pdCBsZXZlbC4gIFRoaXMgbWVhbnMgdGhhdCBhIG1lcmdlIGNhbgorY2Fycnkgb3ZlciB0aGUgY2hhbmdlcyBmcm9tIDEsIDEwLCBvciAxMDAwIGNvbW1pdHMgd2l0aCBlcXVhbCBlYXNlLAord2hpY2ggaW4gdHVybiBtZWFucyB0aGUgd29ya2Zsb3cgc2NhbGVzIG11Y2ggYmV0dGVyIHRvIGEgbGFyZ2UgbnVtYmVyCitvZiBjb250cmlidXRvcnMgKGFuZCBjb250cmlidXRpb25zKS4gIE1lcmdlcyBhcmUgYWxzbyBlYXNpZXIgdG8KK3VuZGVyc3RhbmQgYmVjYXVzZSBhIG1lcmdlIGNvbW1pdCBpcyBhICJwcm9taXNlIiB0aGF0IGFsbCBjaGFuZ2VzIGZyb20KK2FsbCBpdHMgcGFyZW50cyBhcmUgbm93IGluY2x1ZGVkLgorCitUaGVyZSBpcyBhIHRyYWRlb2ZmIG9mIGNvdXJzZTogbWVyZ2VzIHJlcXVpcmUgYSBtb3JlIGNhcmVmdWwgYnJhbmNoCittYW5hZ2VtZW50LiAgVGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucyBkaXNjdXNzIHRoZSBpbXBvcnRhbnQgcG9pbnRzLgorCisKK0dyYWR1YXRpb24KK35+fn5+fn5+fn4KKworQXMgYSBnaXZlbiBmZWF0dXJlIGdvZXMgZnJvbSBleHBlcmltZW50YWwgdG8gc3RhYmxlLCBpdCBhbHNvCisiZ3JhZHVhdGVzIiBiZXR3ZWVuIHRoZSBjb3JyZXNwb25kaW5nIGJyYW5jaGVzIG9mIHRoZSBzb2Z0d2FyZS4KK2BnaXQuZ2l0YCB1c2VzIHRoZSBmb2xsb3dpbmcgJ2ludGVncmF0aW9uIGJyYW5jaGVzJzoKKworKiAnbWFpbnQnIHRyYWNrcyB0aGUgY29tbWl0cyB0aGF0IHNob3VsZCBnbyBpbnRvIHRoZSBuZXh0ICJtYWludGVuYW5jZQorICByZWxlYXNlIiwgaS5lLiwgdXBkYXRlIG9mIHRoZSBsYXN0IHJlbGVhc2VkIHN0YWJsZSB2ZXJzaW9uOworCisqICdtYXN0ZXInIHRyYWNrcyB0aGUgY29tbWl0cyB0aGF0IHNob3VsZCBnbyBpbnRvIHRoZSBuZXh0IHJlbGVhc2U7CisKKyogJ25leHQnIGlzIGludGVuZGVkIGFzIGEgdGVzdGluZyBicmFuY2ggZm9yIHRvcGljcyBiZWluZyB0ZXN0ZWQgZm9yCisgIHN0YWJpbGl0eSBmb3IgbWFzdGVyLgorCitUaGVyZSBpcyBhIGZvdXJ0aCBvZmZpY2lhbCBicmFuY2ggdGhhdCBpcyB1c2VkIHNsaWdodGx5IGRpZmZlcmVudGx5OgorCisqICdwdScgKHByb3Bvc2VkIHVwZGF0ZXMpIGlzIGFuIGludGVncmF0aW9uIGJyYW5jaCBmb3IgdGhpbmdzIHRoYXQgYXJlCisgIG5vdCBxdWl0ZSByZWFkeSBmb3IgaW5jbHVzaW9uIHlldCAoc2VlICJJbnRlZ3JhdGlvbiBCcmFuY2hlcyIKKyAgYmVsb3cpLgorCitFYWNoIG9mIHRoZSBmb3VyIGJyYW5jaGVzIGlzIHVzdWFsbHkgYSBkaXJlY3QgZGVzY2VuZGFudCBvZiB0aGUgb25lCithYm92ZSBpdC4KKworQ29uY2VwdHVhbGx5LCB0aGUgZmVhdHVyZSBlbnRlcnMgYXQgYW4gdW5zdGFibGUgYnJhbmNoICh1c3VhbGx5ICduZXh0Jworb3IgJ3B1JyksIGFuZCAiZ3JhZHVhdGVzIiB0byAnbWFzdGVyJyBmb3IgdGhlIG5leHQgcmVsZWFzZSBvbmNlIGl0IGlzCitjb25zaWRlcmVkIHN0YWJsZSBlbm91Z2guCisKKworTWVyZ2luZyB1cHdhcmRzCit+fn5+fn5+fn5+fn5+fn4KKworVGhlICJkb3dud2FyZHMgZ3JhZHVhdGlvbiIgZGlzY3Vzc2VkIGFib3ZlIGNhbm5vdCBiZSBkb25lIGJ5IGFjdHVhbGx5CittZXJnaW5nIGRvd253YXJkcywgaG93ZXZlciwgc2luY2UgdGhhdCB3b3VsZCBtZXJnZSAnYWxsJyBjaGFuZ2VzIG9uCit0aGUgdW5zdGFibGUgYnJhbmNoIGludG8gdGhlIHN0YWJsZSBvbmUuICBIZW5jZSB0aGUgZm9sbG93aW5nOgorCisuTWVyZ2UgdXB3YXJkcworW2NhcHRpb249IlJ1bGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitBbHdheXMgY29tbWl0IHlvdXIgZml4ZXMgdG8gdGhlIG9sZGVzdCBzdXBwb3J0ZWQgYnJhbmNoIHRoYXQgcmVxdWlyZXMKK3RoZW0uICBUaGVuIChwZXJpb2RpY2FsbHkpIG1lcmdlIHRoZSBpbnRlZ3JhdGlvbiBicmFuY2hlcyB1cHdhcmRzIGludG8gZWFjaAorb3RoZXIuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZ2l2ZXMgYSB2ZXJ5IGNvbnRyb2xsZWQgZmxvdyBvZiBmaXhlcy4gIElmIHlvdSBub3RpY2UgdGhhdCB5b3UKK2hhdmUgYXBwbGllZCBhIGZpeCB0byBlLmcuICdtYXN0ZXInIHRoYXQgaXMgYWxzbyByZXF1aXJlZCBpbiAnbWFpbnQnLAoreW91IHdpbGwgbmVlZCB0byBjaGVycnktcGljayBpdCAodXNpbmcgbGlua2dpdDpnaXQtY2hlcnJ5LXBpY2tbMV0pCitkb3dud2FyZHMuICBUaGlzIHdpbGwgaGFwcGVuIGEgZmV3IHRpbWVzIGFuZCBpcyBub3RoaW5nIHRvIHdvcnJ5IGFib3V0Cit1bmxlc3MgeW91IGRvIGl0IHZlcnkgZnJlcXVlbnRseS4KKworCitUb3BpYyBicmFuY2hlcworfn5+fn5+fn5+fn5+fn4KKworQW55IG5vbnRyaXZpYWwgZmVhdHVyZSB3aWxsIHJlcXVpcmUgc2V2ZXJhbCBwYXRjaGVzIHRvIGltcGxlbWVudCwgYW5kCittYXkgZ2V0IGV4dHJhIGJ1Z2ZpeGVzIG9yIGltcHJvdmVtZW50cyBkdXJpbmcgaXRzIGxpZmV0aW1lLgorCitDb21taXR0aW5nIGV2ZXJ5dGhpbmcgZGlyZWN0bHkgb24gdGhlIGludGVncmF0aW9uIGJyYW5jaGVzIGxlYWRzIHRvIG1hbnkKK3Byb2JsZW1zOiBCYWQgY29tbWl0cyBjYW5ub3QgYmUgdW5kb25lLCBzbyB0aGV5IG11c3QgYmUgcmV2ZXJ0ZWQgb25lCitieSBvbmUsIHdoaWNoIGNyZWF0ZXMgY29uZnVzaW5nIGhpc3RvcmllcyBhbmQgZnVydGhlciBlcnJvciBwb3RlbnRpYWwKK3doZW4geW91IGZvcmdldCB0byByZXZlcnQgcGFydCBvZiBhIGdyb3VwIG9mIGNoYW5nZXMuICBXb3JraW5nIGluCitwYXJhbGxlbCBtaXhlcyB1cCB0aGUgY2hhbmdlcywgY3JlYXRpbmcgZnVydGhlciBjb25mdXNpb24uCisKK1VzZSBvZiAidG9waWMgYnJhbmNoZXMiIHNvbHZlcyB0aGVzZSBwcm9ibGVtcy4gIFRoZSBuYW1lIGlzIHByZXR0eQorc2VsZiBleHBsYW5hdG9yeSwgd2l0aCBhIGNhdmVhdCB0aGF0IGNvbWVzIGZyb20gdGhlICJtZXJnZSB1cHdhcmRzIgorcnVsZSBhYm92ZToKKworLlRvcGljIGJyYW5jaGVzCitbY2FwdGlvbj0iUnVsZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK01ha2UgYSBzaWRlIGJyYW5jaCBmb3IgZXZlcnkgdG9waWMgKGZlYXR1cmUsIGJ1Z2ZpeCwgLi4uKS4gRm9yayBpdCBvZmYKK2F0IHRoZSBvbGRlc3QgaW50ZWdyYXRpb24gYnJhbmNoIHRoYXQgeW91IHdpbGwgZXZlbnR1YWxseSB3YW50IHRvIG1lcmdlIGl0CitpbnRvLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNYW55IHRoaW5ncyBjYW4gdGhlbiBiZSBkb25lIHZlcnkgbmF0dXJhbGx5OgorCisqIFRvIGdldCB0aGUgZmVhdHVyZS9idWdmaXggaW50byBhbiBpbnRlZ3JhdGlvbiBicmFuY2gsIHNpbXBseSBtZXJnZQorICBpdC4gIElmIHRoZSB0b3BpYyBoYXMgZXZvbHZlZCBmdXJ0aGVyIGluIHRoZSBtZWFudGltZSwgbWVyZ2UgYWdhaW4uCisgIChOb3RlIHRoYXQgeW91IGRvIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIG1lcmdlIGl0IHRvIHRoZSBvbGRlc3QKKyAgaW50ZWdyYXRpb24gYnJhbmNoIGZpcnN0LiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gZmlyc3QgbWVyZ2UgYSBidWdmaXgKKyAgdG8gJ25leHQnLCBnaXZlIGl0IHNvbWUgdGVzdGluZyB0aW1lLCBhbmQgbWVyZ2UgdG8gJ21haW50JyB3aGVuIHlvdQorICBrbm93IGl0IGlzIHN0YWJsZS4pCisKKyogSWYgeW91IGZpbmQgeW91IG5lZWQgbmV3IGZlYXR1cmVzIGZyb20gdGhlIGJyYW5jaCAnb3RoZXInIHRvIGNvbnRpbnVlCisgIHdvcmtpbmcgb24geW91ciB0b3BpYywgbWVyZ2UgJ290aGVyJyB0byAndG9waWMnLiAgKEhvd2V2ZXIsIGRvIG5vdAorICBkbyB0aGlzICJqdXN0IGhhYml0dWFsbHkiLCBzZWUgYmVsb3cuKQorCisqIElmIHlvdSBmaW5kIHlvdSBmb3JrZWQgb2ZmIHRoZSB3cm9uZyBicmFuY2ggYW5kIHdhbnQgdG8gbW92ZSBpdAorICAiYmFjayBpbiB0aW1lIiwgdXNlIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXS4KKworTm90ZSB0aGF0IHRoZSBsYXN0IHBvaW50IGNsYXNoZXMgd2l0aCB0aGUgb3RoZXIgdHdvOiBhIHRvcGljIHRoYXQgaGFzCitiZWVuIG1lcmdlZCBlbHNld2hlcmUgc2hvdWxkIG5vdCBiZSByZWJhc2VkLiAgU2VlIHRoZSBzZWN0aW9uIG9uCitSRUNPVkVSSU5HIEZST00gVVBTVFJFQU0gUkVCQVNFIGluIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXS4KKworV2Ugc2hvdWxkIHBvaW50IG91dCB0aGF0ICJoYWJpdHVhbGx5IiAocmVndWxhcmx5IGZvciBubyByZWFsIHJlYXNvbikKK21lcmdpbmcgYW4gaW50ZWdyYXRpb24gYnJhbmNoIGludG8geW91ciB0b3BpY3MgLS0gYW5kIGJ5IGV4dGVuc2lvbiwKK21lcmdpbmcgYW55dGhpbmcgdXBzdHJlYW0gaW50byBhbnl0aGluZyBkb3duc3RyZWFtIG9uIGEgcmVndWxhciBiYXNpcworLS0gaXMgZnJvd25lZCB1cG9uOgorCisuTWVyZ2UgdG8gZG93bnN0cmVhbSBvbmx5IGF0IHdlbGwtZGVmaW5lZCBwb2ludHMKK1tjYXB0aW9uPSJSdWxlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRG8gbm90IG1lcmdlIHRvIGRvd25zdHJlYW0gZXhjZXB0IHdpdGggYSBnb29kIHJlYXNvbjogdXBzdHJlYW0gQVBJCitjaGFuZ2VzIGFmZmVjdCB5b3VyIGJyYW5jaDsgeW91ciBicmFuY2ggbm8gbG9uZ2VyIG1lcmdlcyB0byB1cHN0cmVhbQorY2xlYW5seTsgZXRjLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPdGhlcndpc2UsIHRoZSB0b3BpYyB0aGF0IHdhcyBtZXJnZWQgdG8gc3VkZGVubHkgY29udGFpbnMgbW9yZSB0aGFuIGEKK3NpbmdsZSAod2VsbC1zZXBhcmF0ZWQpIGNoYW5nZS4gIFRoZSBtYW55IHJlc3VsdGluZyBzbWFsbCBtZXJnZXMgd2lsbAorZ3JlYXRseSBjbHV0dGVyIHVwIGhpc3RvcnkuICBBbnlvbmUgd2hvIGxhdGVyIGludmVzdGlnYXRlcyB0aGUgaGlzdG9yeQorb2YgYSBmaWxlIHdpbGwgaGF2ZSB0byBmaW5kIG91dCB3aGV0aGVyIHRoYXQgbWVyZ2UgYWZmZWN0ZWQgdGhlIHRvcGljCitpbiBkZXZlbG9wbWVudC4gIEFuIHVwc3RyZWFtIG1pZ2h0IGV2ZW4gaW5hZHZlcnRlbnRseSBiZSBtZXJnZWQgaW50byBhCisibW9yZSBzdGFibGUiIGJyYW5jaC4gIEFuZCBzbyBvbi4KKworCitUaHJvdy1hd2F5IGludGVncmF0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0lmIHlvdSBmb2xsb3dlZCB0aGUgbGFzdCBwYXJhZ3JhcGgsIHlvdSB3aWxsIG5vdyBoYXZlIG1hbnkgc21hbGwgdG9waWMKK2JyYW5jaGVzLCBhbmQgb2NjYXNpb25hbGx5IHdvbmRlciBob3cgdGhleSBpbnRlcmFjdC4gIFBlcmhhcHMgdGhlCityZXN1bHQgb2YgbWVyZ2luZyB0aGVtIGRvZXMgbm90IGV2ZW4gd29yaz8gIEJ1dCBvbiB0aGUgb3RoZXIgaGFuZCwgd2UKK3dhbnQgdG8gYXZvaWQgbWVyZ2luZyB0aGVtIGFueXdoZXJlICJzdGFibGUiIGJlY2F1c2Ugc3VjaCBtZXJnZXMKK2Nhbm5vdCBlYXNpbHkgYmUgdW5kb25lLgorCitUaGUgc29sdXRpb24sIG9mIGNvdXJzZSwgaXMgdG8gbWFrZSBhIG1lcmdlIHRoYXQgd2UgY2FuIHVuZG86IG1lcmdlCitpbnRvIGEgdGhyb3ctYXdheSBicmFuY2guCisKKy5UaHJvdy1hd2F5IGludGVncmF0aW9uIGJyYW5jaGVzCitbY2FwdGlvbj0iUnVsZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RvIHRlc3QgdGhlIGludGVyYWN0aW9uIG9mIHNldmVyYWwgdG9waWNzLCBtZXJnZSB0aGVtIGludG8gYQordGhyb3ctYXdheSBicmFuY2guICBZb3UgbXVzdCBuZXZlciBiYXNlIGFueSB3b3JrIG9uIHN1Y2ggYSBicmFuY2ghCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSBtYWtlIGl0ICh2ZXJ5KSBjbGVhciB0aGF0IHRoaXMgYnJhbmNoIGlzIGdvaW5nIHRvIGJlIGRlbGV0ZWQKK3JpZ2h0IGFmdGVyIHRoZSB0ZXN0aW5nLCB5b3UgY2FuIGV2ZW4gcHVibGlzaCB0aGlzIGJyYW5jaCwgZm9yIGV4YW1wbGUKK3RvIGdpdmUgdGhlIHRlc3RlcnMgYSBjaGFuY2UgdG8gd29yayB3aXRoIGl0LCBvciBvdGhlciBkZXZlbG9wZXJzIGEKK2NoYW5jZSB0byBzZWUgaWYgdGhlaXIgaW4tcHJvZ3Jlc3Mgd29yayB3aWxsIGJlIGNvbXBhdGlibGUuICBgZ2l0LmdpdGAKK2hhcyBzdWNoIGFuIG9mZmljaWFsIHRocm93LWF3YXkgaW50ZWdyYXRpb24gYnJhbmNoIGNhbGxlZCAncHUnLgorCisKK0JyYW5jaCBtYW5hZ2VtZW50IGZvciBhIHJlbGVhc2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQXNzdW1pbmcgeW91IGFyZSB1c2luZyB0aGUgbWVyZ2UgYXBwcm9hY2ggZGlzY3Vzc2VkIGFib3ZlLCB3aGVuIHlvdQorYXJlIHJlbGVhc2luZyB5b3VyIHByb2plY3QgeW91IHdpbGwgbmVlZCB0byBkbyBzb21lIGFkZGl0aW9uYWwgYnJhbmNoCittYW5hZ2VtZW50IHdvcmsuCisKK0EgZmVhdHVyZSByZWxlYXNlIGlzIGNyZWF0ZWQgZnJvbSB0aGUgJ21hc3RlcicgYnJhbmNoLCBzaW5jZSAnbWFzdGVyJwordHJhY2tzIHRoZSBjb21taXRzIHRoYXQgc2hvdWxkIGdvIGludG8gdGhlIG5leHQgZmVhdHVyZSByZWxlYXNlLgorCitUaGUgJ21hc3RlcicgYnJhbmNoIGlzIHN1cHBvc2VkIHRvIGJlIGEgc3VwZXJzZXQgb2YgJ21haW50Jy4gSWYgdGhpcworY29uZGl0aW9uIGRvZXMgbm90IGhvbGQsIHRoZW4gJ21haW50JyBjb250YWlucyBzb21lIGNvbW1pdHMgdGhhdAorYXJlIG5vdCBpbmNsdWRlZCBvbiAnbWFzdGVyJy4gVGhlIGZpeGVzIHJlcHJlc2VudGVkIGJ5IHRob3NlIGNvbW1pdHMKK3dpbGwgdGhlcmVmb3JlIG5vdCBiZSBpbmNsdWRlZCBpbiB5b3VyIGZlYXR1cmUgcmVsZWFzZS4KKworVG8gdmVyaWZ5IHRoYXQgJ21hc3RlcicgaXMgaW5kZWVkIGEgc3VwZXJzZXQgb2YgJ21haW50JywgdXNlIGdpdCBsb2c6CisKKy5WZXJpZnkgJ21hc3RlcicgaXMgYSBzdXBlcnNldCBvZiAnbWFpbnQnCitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorYGdpdCBsb2cgbWFzdGVyLi5tYWludGAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBjb21tYW5kIHNob3VsZCBub3QgbGlzdCBhbnkgY29tbWl0cy4gIE90aGVyd2lzZSwgY2hlY2sgb3V0CisnbWFzdGVyJyBhbmQgbWVyZ2UgJ21haW50JyBpbnRvIGl0LgorCitOb3cgeW91IGNhbiBwcm9jZWVkIHdpdGggdGhlIGNyZWF0aW9uIG9mIHRoZSBmZWF0dXJlIHJlbGVhc2UuIEFwcGx5IGEKK3RhZyB0byB0aGUgdGlwIG9mICdtYXN0ZXInIGluZGljYXRpbmcgdGhlIHJlbGVhc2UgdmVyc2lvbjoKKworLlJlbGVhc2UgdGFnZ2luZworW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2BnaXQgdGFnIC1zIC1tICJHaXQgWC5ZLloiIHZYLlkuWiBtYXN0ZXJgCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSBuZWVkIHRvIHB1c2ggdGhlIG5ldyB0YWcgdG8gYSBwdWJsaWMgR2l0IHNlcnZlciAoc2VlCisiRElTVFJJQlVURUQgV09SS0ZMT1dTIiBiZWxvdykuIFRoaXMgbWFrZXMgdGhlIHRhZyBhdmFpbGFibGUgdG8KK290aGVycyB0cmFja2luZyB5b3VyIHByb2plY3QuIFRoZSBwdXNoIGNvdWxkIGFsc28gdHJpZ2dlciBhCitwb3N0LXVwZGF0ZSBob29rIHRvIHBlcmZvcm0gcmVsZWFzZS1yZWxhdGVkIGl0ZW1zIHN1Y2ggYXMgYnVpbGRpbmcKK3JlbGVhc2UgdGFyYmFsbHMgYW5kIHByZWZvcm1hdHRlZCBkb2N1bWVudGF0aW9uIHBhZ2VzLgorCitTaW1pbGFybHksIGZvciBhIG1haW50ZW5hbmNlIHJlbGVhc2UsICdtYWludCcgaXMgdHJhY2tpbmcgdGhlIGNvbW1pdHMKK3RvIGJlIHJlbGVhc2VkLiBUaGVyZWZvcmUsIGluIHRoZSBzdGVwcyBhYm92ZSBzaW1wbHkgdGFnIGFuZCBwdXNoCisnbWFpbnQnIHJhdGhlciB0aGFuICdtYXN0ZXInLgorCisKK01haW50ZW5hbmNlIGJyYW5jaCBtYW5hZ2VtZW50IGFmdGVyIGEgZmVhdHVyZSByZWxlYXNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBZnRlciBhIGZlYXR1cmUgcmVsZWFzZSwgeW91IG5lZWQgdG8gbWFuYWdlIHlvdXIgbWFpbnRlbmFuY2UgYnJhbmNoZXMuCisKK0ZpcnN0LCBpZiB5b3Ugd2lzaCB0byBjb250aW51ZSB0byByZWxlYXNlIG1haW50ZW5hbmNlIGZpeGVzIGZvciB0aGUKK2ZlYXR1cmUgcmVsZWFzZSBtYWRlIGJlZm9yZSB0aGUgcmVjZW50IG9uZSwgdGhlbiB5b3UgbXVzdCBjcmVhdGUKK2Fub3RoZXIgYnJhbmNoIHRvIHRyYWNrIGNvbW1pdHMgZm9yIHRoYXQgcHJldmlvdXMgcmVsZWFzZS4KKworVG8gZG8gdGhpcywgdGhlIGN1cnJlbnQgbWFpbnRlbmFuY2UgYnJhbmNoIGlzIGNvcGllZCB0byBhbm90aGVyIGJyYW5jaAorbmFtZWQgd2l0aCB0aGUgcHJldmlvdXMgcmVsZWFzZSB2ZXJzaW9uIG51bWJlciAoZS5nLiBtYWludC1YLlkuKFotMSkKK3doZXJlIFguWS5aIGlzIHRoZSBjdXJyZW50IHJlbGVhc2UpLgorCisuQ29weSBtYWludAorW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2BnaXQgYnJhbmNoIG1haW50LVguWS4oWi0xKSBtYWludGAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlICdtYWludCcgYnJhbmNoIHNob3VsZCBub3cgYmUgZmFzdC1mb3J3YXJkZWQgdG8gdGhlIG5ld2x5IHJlbGVhc2VkCitjb2RlIHNvIHRoYXQgbWFpbnRlbmFuY2UgZml4ZXMgY2FuIGJlIHRyYWNrZWQgZm9yIHRoZSBjdXJyZW50IHJlbGVhc2U6CisKKy5VcGRhdGUgbWFpbnQgdG8gbmV3IHJlbGVhc2UKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqIGBnaXQgY2hlY2tvdXQgbWFpbnRgCisqIGBnaXQgbWVyZ2UgLS1mZi1vbmx5IG1hc3RlcmAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgdGhlIG1lcmdlIGZhaWxzIGJlY2F1c2UgaXQgaXMgbm90IGEgZmFzdC1mb3J3YXJkLCB0aGVuIGl0IGlzCitwb3NzaWJsZSBzb21lIGZpeGVzIG9uICdtYWludCcgd2VyZSBtaXNzZWQgaW4gdGhlIGZlYXR1cmUgcmVsZWFzZS4KK1RoaXMgd2lsbCBub3QgaGFwcGVuIGlmIHRoZSBjb250ZW50IG9mIHRoZSBicmFuY2hlcyB3YXMgdmVyaWZpZWQgYXMKK2Rlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KKworCitCcmFuY2ggbWFuYWdlbWVudCBmb3IgbmV4dCBhbmQgcHUgYWZ0ZXIgYSBmZWF0dXJlIHJlbGVhc2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBZnRlciBhIGZlYXR1cmUgcmVsZWFzZSwgdGhlIGludGVncmF0aW9uIGJyYW5jaCAnbmV4dCcgbWF5IG9wdGlvbmFsbHkgYmUKK3Jld291bmQgYW5kIHJlYnVpbHQgZnJvbSB0aGUgdGlwIG9mICdtYXN0ZXInIHVzaW5nIHRoZSBzdXJ2aXZpbmcKK3RvcGljcyBvbiAnbmV4dCc6CisKKy5SZXdpbmQgYW5kIHJlYnVpbGQgbmV4dAorW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogYGdpdCBzd2l0Y2ggLUMgbmV4dCBtYXN0ZXJgCisqIGBnaXQgbWVyZ2UgYWkvdG9waWNfaW5fbmV4dDFgCisqIGBnaXQgbWVyZ2UgYWkvdG9waWNfaW5fbmV4dDJgCisqIC4uLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgYWR2YW50YWdlIG9mIGRvaW5nIHRoaXMgaXMgdGhhdCB0aGUgaGlzdG9yeSBvZiAnbmV4dCcgd2lsbCBiZQorY2xlYW4uIEZvciBleGFtcGxlLCBzb21lIHRvcGljcyBtZXJnZWQgaW50byAnbmV4dCcgbWF5IGhhdmUgaW5pdGlhbGx5Citsb29rZWQgcHJvbWlzaW5nLCBidXQgd2VyZSBsYXRlciBmb3VuZCB0byBiZSB1bmRlc2lyYWJsZSBvciBwcmVtYXR1cmUuCitJbiBzdWNoIGEgY2FzZSwgdGhlIHRvcGljIGlzIHJldmVydGVkIG91dCBvZiAnbmV4dCcgYnV0IHRoZSBmYWN0CityZW1haW5zIGluIHRoZSBoaXN0b3J5IHRoYXQgaXQgd2FzIG9uY2UgbWVyZ2VkIGFuZCByZXZlcnRlZC4gQnkKK3JlY3JlYXRpbmcgJ25leHQnLCB5b3UgZ2l2ZSBhbm90aGVyIGluY2FybmF0aW9uIG9mIHN1Y2ggdG9waWNzIGEgY2xlYW4KK3NsYXRlIHRvIHJldHJ5LCBhbmQgYSBmZWF0dXJlIHJlbGVhc2UgaXMgYSBnb29kIHBvaW50IGluIGhpc3RvcnkgdG8gZG8KK3NvLgorCitJZiB5b3UgZG8gdGhpcywgdGhlbiB5b3Ugc2hvdWxkIG1ha2UgYSBwdWJsaWMgYW5ub3VuY2VtZW50IGluZGljYXRpbmcKK3RoYXQgJ25leHQnIHdhcyByZXdvdW5kIGFuZCByZWJ1aWx0LgorCitUaGUgc2FtZSByZXdpbmQgYW5kIHJlYnVpbGQgcHJvY2VzcyBtYXkgYmUgZm9sbG93ZWQgZm9yICdwdScuIEEgcHVibGljCithbm5vdW5jZW1lbnQgaXMgbm90IG5lY2Vzc2FyeSBzaW5jZSAncHUnIGlzIGEgdGhyb3ctYXdheSBicmFuY2gsIGFzCitkZXNjcmliZWQgYWJvdmUuCisKKworRElTVFJJQlVURUQgV09SS0ZMT1dTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgdGhlIGxhc3Qgc2VjdGlvbiwgeW91IHNob3VsZCBrbm93IGhvdyB0byBtYW5hZ2UgdG9waWNzLiAgSW4KK2dlbmVyYWwsIHlvdSB3aWxsIG5vdCBiZSB0aGUgb25seSBwZXJzb24gd29ya2luZyBvbiB0aGUgcHJvamVjdCwgc28KK3lvdSB3aWxsIGhhdmUgdG8gc2hhcmUgeW91ciB3b3JrLgorCitSb3VnaGx5IHNwZWFraW5nLCB0aGVyZSBhcmUgdHdvIGltcG9ydGFudCB3b3JrZmxvd3M6IG1lcmdlIGFuZCBwYXRjaC4KK1RoZSBpbXBvcnRhbnQgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBtZXJnZSB3b3JrZmxvdyBjYW4gcHJvcGFnYXRlIGZ1bGwKK2hpc3RvcnksIGluY2x1ZGluZyBtZXJnZXMsIHdoaWxlIHBhdGNoZXMgY2Fubm90LiAgQm90aCB3b3JrZmxvd3MgY2FuCitiZSB1c2VkIGluIHBhcmFsbGVsOiBpbiBgZ2l0LmdpdGAsIG9ubHkgc3Vic3lzdGVtIG1haW50YWluZXJzIHVzZQordGhlIG1lcmdlIHdvcmtmbG93LCB3aGlsZSBldmVyeW9uZSBlbHNlIHNlbmRzIHBhdGNoZXMuCisKK05vdGUgdGhhdCB0aGUgbWFpbnRhaW5lcihzKSBtYXkgaW1wb3NlIHJlc3RyaWN0aW9ucywgc3VjaCBhcworIlNpZ25lZC1vZmYtYnkiIHJlcXVpcmVtZW50cywgdGhhdCBhbGwgY29tbWl0cy9wYXRjaGVzIHN1Ym1pdHRlZCBmb3IKK2luY2x1c2lvbiBtdXN0IGFkaGVyZSB0by4gIENvbnN1bHQgeW91ciBwcm9qZWN0J3MgZG9jdW1lbnRhdGlvbiBmb3IKK21vcmUgaW5mb3JtYXRpb24uCisKKworTWVyZ2Ugd29ya2Zsb3cKK35+fn5+fn5+fn5+fn5+CisKK1RoZSBtZXJnZSB3b3JrZmxvdyB3b3JrcyBieSBjb3B5aW5nIGJyYW5jaGVzIGJldHdlZW4gdXBzdHJlYW0gYW5kCitkb3duc3RyZWFtLiAgVXBzdHJlYW0gY2FuIG1lcmdlIGNvbnRyaWJ1dGlvbnMgaW50byB0aGUgb2ZmaWNpYWwKK2hpc3Rvcnk7IGRvd25zdHJlYW0gYmFzZSB0aGVpciB3b3JrIG9uIHRoZSBvZmZpY2lhbCBoaXN0b3J5LgorCitUaGVyZSBhcmUgdGhyZWUgbWFpbiB0b29scyB0aGF0IGNhbiBiZSB1c2VkIGZvciB0aGlzOgorCisqIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gY29waWVzIHlvdXIgYnJhbmNoZXMgdG8gYSByZW1vdGUgcmVwb3NpdG9yeSwKKyAgdXN1YWxseSB0byBvbmUgdGhhdCBjYW4gYmUgcmVhZCBieSBhbGwgaW52b2x2ZWQgcGFydGllczsKKworKiBsaW5rZ2l0OmdpdC1mZXRjaFsxXSB0aGF0IGNvcGllcyByZW1vdGUgYnJhbmNoZXMgdG8geW91ciByZXBvc2l0b3J5OworICBhbmQKKworKiBsaW5rZ2l0OmdpdC1wdWxsWzFdIHRoYXQgZG9lcyBmZXRjaCBhbmQgbWVyZ2UgaW4gb25lIGdvLgorCitOb3RlIHRoZSBsYXN0IHBvaW50LiAgRG8gJ25vdCcgdXNlICdnaXQgcHVsbCcgdW5sZXNzIHlvdSBhY3R1YWxseSB3YW50Cit0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaC4KKworR2V0dGluZyBjaGFuZ2VzIG91dCBpcyBlYXN5OgorCisuUHVzaC9wdWxsOiBQdWJsaXNoaW5nIGJyYW5jaGVzL3RvcGljcworW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2BnaXQgcHVzaCA8cmVtb3RlPiA8YnJhbmNoPmAgYW5kIHRlbGwgZXZlcnlvbmUgd2hlcmUgdGhleSBjYW4gZmV0Y2gKK2Zyb20uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSB3aWxsIHN0aWxsIGhhdmUgdG8gdGVsbCBwZW9wbGUgYnkgb3RoZXIgbWVhbnMsIHN1Y2ggYXMgbWFpbC4gIChHaXQKK3Byb3ZpZGVzIHRoZSBsaW5rZ2l0OmdpdC1yZXF1ZXN0LXB1bGxbMV0gdG8gc2VuZCBwcmVmb3JtYXR0ZWQgcHVsbAorcmVxdWVzdHMgdG8gdXBzdHJlYW0gbWFpbnRhaW5lcnMgdG8gc2ltcGxpZnkgdGhpcyB0YXNrLikKKworSWYgeW91IGp1c3Qgd2FudCB0byBnZXQgdGhlIG5ld2VzdCBjb3BpZXMgb2YgdGhlIGludGVncmF0aW9uIGJyYW5jaGVzLAorc3RheWluZyB1cCB0byBkYXRlIGlzIGVhc3kgdG9vOgorCisuUHVzaC9wdWxsOiBTdGF5aW5nIHVwIHRvIGRhdGUKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitVc2UgYGdpdCBmZXRjaCA8cmVtb3RlPmAgb3IgYGdpdCByZW1vdGUgdXBkYXRlYCB0byBzdGF5IHVwIHRvIGRhdGUuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZW4gc2ltcGx5IGZvcmsgeW91ciB0b3BpYyBicmFuY2hlcyBmcm9tIHRoZSBzdGFibGUgcmVtb3RlcyBhcworZXhwbGFpbmVkIGVhcmxpZXIuCisKK0lmIHlvdSBhcmUgYSBtYWludGFpbmVyIGFuZCB3b3VsZCBsaWtlIHRvIG1lcmdlIG90aGVyIHBlb3BsZSdzIHRvcGljCiticmFuY2hlcyB0byB0aGUgaW50ZWdyYXRpb24gYnJhbmNoZXMsIHRoZXkgd2lsbCB0eXBpY2FsbHkgc2VuZCBhCityZXF1ZXN0IHRvIGRvIHNvIGJ5IG1haWwuICBTdWNoIGEgcmVxdWVzdCBsb29rcyBsaWtlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1BsZWFzZSBwdWxsIGZyb20KKyAgICA8dXJsPiA8YnJhbmNoPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiB0aGF0IGNhc2UsICdnaXQgcHVsbCcgY2FuIGRvIHRoZSBmZXRjaCBhbmQgbWVyZ2UgaW4gb25lIGdvLCBhcworZm9sbG93cy4KKworLlB1c2gvcHVsbDogTWVyZ2luZyByZW1vdGUgdG9waWNzCitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorYGdpdCBwdWxsIDx1cmw+IDxicmFuY2g+YAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPY2Nhc2lvbmFsbHksIHRoZSBtYWludGFpbmVyIG1heSBnZXQgbWVyZ2UgY29uZmxpY3RzIHdoZW4gdGhleSB0cnkgdG8KK3B1bGwgY2hhbmdlcyBmcm9tIGRvd25zdHJlYW0uICBJbiB0aGlzIGNhc2UsIHRoZXkgY2FuIGFzayBkb3duc3RyZWFtIHRvCitkbyB0aGUgbWVyZ2UgYW5kIHJlc29sdmUgdGhlIGNvbmZsaWN0cyB0aGVtc2VsdmVzIChwZXJoYXBzIHRoZXkgd2lsbAora25vdyBiZXR0ZXIgaG93IHRvIHJlc29sdmUgdGhlbSkuICBJdCBpcyBvbmUgb2YgdGhlIHJhcmUgY2FzZXMgd2hlcmUKK2Rvd25zdHJlYW0gJ3Nob3VsZCcgbWVyZ2UgZnJvbSB1cHN0cmVhbS4KKworCitQYXRjaCB3b3JrZmxvdworfn5+fn5+fn5+fn5+fn4KKworSWYgeW91IGFyZSBhIGNvbnRyaWJ1dG9yIHRoYXQgc2VuZHMgY2hhbmdlcyB1cHN0cmVhbSBpbiB0aGUgZm9ybSBvZgorZW1haWxzLCB5b3Ugc2hvdWxkIHVzZSB0b3BpYyBicmFuY2hlcyBhcyB1c3VhbCAoc2VlIGFib3ZlKS4gIFRoZW4gdXNlCitsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gdG8gZ2VuZXJhdGUgdGhlIGNvcnJlc3BvbmRpbmcgZW1haWxzCisoaGlnaGx5IHJlY29tbWVuZGVkIG92ZXIgbWFudWFsbHkgZm9ybWF0dGluZyB0aGVtIGJlY2F1c2UgaXQgbWFrZXMgdGhlCittYWludGFpbmVyJ3MgbGlmZSBlYXNpZXIpLgorCisuZm9ybWF0LXBhdGNoL2FtOiBQdWJsaXNoaW5nIGJyYW5jaGVzL3RvcGljcworW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogYGdpdCBmb3JtYXQtcGF0Y2ggLU0gdXBzdHJlYW0uLnRvcGljYCB0byB0dXJuIHRoZW0gaW50byBwcmVmb3JtYXR0ZWQKKyAgcGF0Y2ggZmlsZXMKKyogYGdpdCBzZW5kLWVtYWlsIC0tdG89PHJlY2lwaWVudD4gPHBhdGNoZXM+YAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTZWUgdGhlIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSBhbmQgbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXQorbWFucGFnZXMgZm9yIGZ1cnRoZXIgdXNhZ2Ugbm90ZXMuCisKK0lmIHRoZSBtYWludGFpbmVyIHRlbGxzIHlvdSB0aGF0IHlvdXIgcGF0Y2ggbm8gbG9uZ2VyIGFwcGxpZXMgdG8gdGhlCitjdXJyZW50IHVwc3RyZWFtLCB5b3Ugd2lsbCBoYXZlIHRvIHJlYmFzZSB5b3VyIHRvcGljICh5b3UgY2Fubm90IHVzZSBhCittZXJnZSBiZWNhdXNlIHlvdSBjYW5ub3QgZm9ybWF0LXBhdGNoIG1lcmdlcyk6CisKKy5mb3JtYXQtcGF0Y2gvYW06IEtlZXBpbmcgdG9waWNzIHVwIHRvIGRhdGUKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitgZ2l0IHB1bGwgLS1yZWJhc2UgPHVybD4gPGJyYW5jaD5gCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSBjYW4gdGhlbiBmaXggdGhlIGNvbmZsaWN0cyBkdXJpbmcgdGhlIHJlYmFzZS4gIFByZXN1bWFibHkgeW91IGhhdmUKK25vdCBwdWJsaXNoZWQgeW91ciB0b3BpYyBvdGhlciB0aGFuIGJ5IG1haWwsIHNvIHJlYmFzaW5nIGl0IGlzIG5vdCBhCitwcm9ibGVtLgorCitJZiB5b3UgcmVjZWl2ZSBzdWNoIGEgcGF0Y2ggc2VyaWVzIChhcyBtYWludGFpbmVyLCBvciBwZXJoYXBzIGFzIGEKK3JlYWRlciBvZiB0aGUgbWFpbGluZyBsaXN0IGl0IHdhcyBzZW50IHRvKSwgc2F2ZSB0aGUgbWFpbHMgdG8gZmlsZXMsCitjcmVhdGUgYSBuZXcgdG9waWMgYnJhbmNoIGFuZCB1c2UgJ2dpdCBhbScgdG8gaW1wb3J0IHRoZSBjb21taXRzOgorCisuZm9ybWF0LXBhdGNoL2FtOiBJbXBvcnRpbmcgcGF0Y2hlcworW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2BnaXQgYW0gPCBwYXRjaGAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT25lIGZlYXR1cmUgd29ydGggcG9pbnRpbmcgb3V0IGlzIHRoZSB0aHJlZS13YXkgbWVyZ2UsIHdoaWNoIGNhbiBoZWxwCitpZiB5b3UgZ2V0IGNvbmZsaWN0czogYGdpdCBhbSAtM2Agd2lsbCB1c2UgaW5kZXggaW5mb3JtYXRpb24gY29udGFpbmVkCitpbiBwYXRjaGVzIHRvIGZpZ3VyZSBvdXQgdGhlIG1lcmdlIGJhc2UuICBTZWUgbGlua2dpdDpnaXQtYW1bMV0gZm9yCitvdGhlciBvcHRpb25zLgorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0LXB1c2hbMV0sCitsaW5rZ2l0OmdpdC1wdWxsWzFdLAorbGlua2dpdDpnaXQtbWVyZ2VbMV0sCitsaW5rZ2l0OmdpdC1yZWJhc2VbMV0sCitsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0sCitsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdLAorbGlua2dpdDpnaXQtYW1bMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dsb3NzYXJ5LWNvbnRlbnQudHh0IGIvRG9jdW1lbnRhdGlvbi9nbG9zc2FyeS1jb250ZW50LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTBjODg4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9nbG9zc2FyeS1jb250ZW50LnR4dApAQCAtMCwwICsxLDY3MSBAQAorW1tkZWZfYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZV1dYWx0ZXJuYXRlIG9iamVjdCBkYXRhYmFzZTo6CisJVmlhIHRoZSBhbHRlcm5hdGVzIG1lY2hhbmlzbSwgYSA8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+PgorCWNhbiBpbmhlcml0IHBhcnQgb2YgaXRzIDw8ZGVmX29iamVjdF9kYXRhYmFzZSxvYmplY3QgZGF0YWJhc2U+PgorCWZyb20gYW5vdGhlciBvYmplY3QgZGF0YWJhc2UsIHdoaWNoIGlzIGNhbGxlZCBhbiAiYWx0ZXJuYXRlIi4KKworW1tkZWZfYmFyZV9yZXBvc2l0b3J5XV1iYXJlIHJlcG9zaXRvcnk6OgorCUEgYmFyZSByZXBvc2l0b3J5IGlzIG5vcm1hbGx5IGFuIGFwcHJvcHJpYXRlbHkKKwluYW1lZCA8PGRlZl9kaXJlY3RvcnksZGlyZWN0b3J5Pj4gd2l0aCBhIGAuZ2l0YCBzdWZmaXggdGhhdCBkb2VzIG5vdAorCWhhdmUgYSBsb2NhbGx5IGNoZWNrZWQtb3V0IGNvcHkgb2YgYW55IG9mIHRoZSBmaWxlcyB1bmRlcgorCXJldmlzaW9uIGNvbnRyb2wuIFRoYXQgaXMsIGFsbCBvZiB0aGUgR2l0CisJYWRtaW5pc3RyYXRpdmUgYW5kIGNvbnRyb2wgZmlsZXMgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBwcmVzZW50IGluIHRoZQorCWhpZGRlbiBgLmdpdGAgc3ViLWRpcmVjdG9yeSBhcmUgZGlyZWN0bHkgcHJlc2VudCBpbiB0aGUKKwlgcmVwb3NpdG9yeS5naXRgIGRpcmVjdG9yeSBpbnN0ZWFkLAorCWFuZCBubyBvdGhlciBmaWxlcyBhcmUgcHJlc2VudCBhbmQgY2hlY2tlZCBvdXQuIFVzdWFsbHkgcHVibGlzaGVycyBvZgorCXB1YmxpYyByZXBvc2l0b3JpZXMgbWFrZSBiYXJlIHJlcG9zaXRvcmllcyBhdmFpbGFibGUuCisKK1tbZGVmX2Jsb2Jfb2JqZWN0XV1ibG9iIG9iamVjdDo6CisJVW50eXBlZCA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4sIGUuZy4gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZS4KKworW1tkZWZfYnJhbmNoXV1icmFuY2g6OgorCUEgImJyYW5jaCIgaXMgYW4gYWN0aXZlIGxpbmUgb2YgZGV2ZWxvcG1lbnQuICBUaGUgbW9zdCByZWNlbnQKKwk8PGRlZl9jb21taXQsY29tbWl0Pj4gb24gYSBicmFuY2ggaXMgcmVmZXJyZWQgdG8gYXMgdGhlIHRpcCBvZgorCXRoYXQgYnJhbmNoLiAgVGhlIHRpcCBvZiB0aGUgYnJhbmNoIGlzIHJlZmVyZW5jZWQgYnkgYSBicmFuY2gKKwk8PGRlZl9oZWFkLGhlYWQ+Piwgd2hpY2ggbW92ZXMgZm9yd2FyZCBhcyBhZGRpdGlvbmFsIGRldmVsb3BtZW50CisJaXMgZG9uZSBvbiB0aGUgYnJhbmNoLiAgQSBzaW5nbGUgR2l0CisJPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4gY2FuIHRyYWNrIGFuIGFyYml0cmFyeSBudW1iZXIgb2YKKwlicmFuY2hlcywgYnV0IHlvdXIgPDxkZWZfd29ya2luZ190cmVlLHdvcmtpbmcgdHJlZT4+IGlzCisJYXNzb2NpYXRlZCB3aXRoIGp1c3Qgb25lIG9mIHRoZW0gKHRoZSAiY3VycmVudCIgb3IgImNoZWNrZWQgb3V0IgorCWJyYW5jaCksIGFuZCA8PGRlZl9IRUFELEhFQUQ+PiBwb2ludHMgdG8gdGhhdCBicmFuY2guCisKK1tbZGVmX2NhY2hlXV1jYWNoZTo6CisJT2Jzb2xldGUgZm9yOiA8PGRlZl9pbmRleCxpbmRleD4+LgorCitbW2RlZl9jaGFpbl1dY2hhaW46OgorCUEgbGlzdCBvZiBvYmplY3RzLCB3aGVyZSBlYWNoIDw8ZGVmX29iamVjdCxvYmplY3Q+PiBpbiB0aGUgbGlzdCBjb250YWlucworCWEgcmVmZXJlbmNlIHRvIGl0cyBzdWNjZXNzb3IgKGZvciBleGFtcGxlLCB0aGUgc3VjY2Vzc29yIG9mIGEKKwk8PGRlZl9jb21taXQsY29tbWl0Pj4gY291bGQgYmUgb25lIG9mIGl0cyA8PGRlZl9wYXJlbnQscGFyZW50cz4+KS4KKworW1tkZWZfY2hhbmdlc2V0XV1jaGFuZ2VzZXQ6OgorCUJpdEtlZXBlci9jdnNwcyBzcGVhayBmb3IgIjw8ZGVmX2NvbW1pdCxjb21taXQ+PiIuIFNpbmNlIEdpdCBkb2VzIG5vdAorCXN0b3JlIGNoYW5nZXMsIGJ1dCBzdGF0ZXMsIGl0IHJlYWxseSBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIHVzZSB0aGUgdGVybQorCSJjaGFuZ2VzZXRzIiB3aXRoIEdpdC4KKworW1tkZWZfY2hlY2tvdXRdXWNoZWNrb3V0OjoKKwlUaGUgYWN0aW9uIG9mIHVwZGF0aW5nIGFsbCBvciBwYXJ0IG9mIHRoZQorCTw8ZGVmX3dvcmtpbmdfdHJlZSx3b3JraW5nIHRyZWU+PiB3aXRoIGEgPDxkZWZfdHJlZV9vYmplY3QsdHJlZSBvYmplY3Q+PgorCW9yIDw8ZGVmX2Jsb2Jfb2JqZWN0LGJsb2I+PiBmcm9tIHRoZQorCTw8ZGVmX29iamVjdF9kYXRhYmFzZSxvYmplY3QgZGF0YWJhc2U+PiwgYW5kIHVwZGF0aW5nIHRoZQorCTw8ZGVmX2luZGV4LGluZGV4Pj4gYW5kIDw8ZGVmX0hFQUQsSEVBRD4+IGlmIHRoZSB3aG9sZSB3b3JraW5nIHRyZWUgaGFzCisJYmVlbiBwb2ludGVkIGF0IGEgbmV3IDw8ZGVmX2JyYW5jaCxicmFuY2g+Pi4KKworW1tkZWZfY2hlcnJ5LXBpY2tpbmddXWNoZXJyeS1waWNraW5nOjoKKwlJbiA8PGRlZl9TQ00sU0NNPj4gamFyZ29uLCAiY2hlcnJ5IHBpY2siIG1lYW5zIHRvIGNob29zZSBhIHN1YnNldCBvZgorCWNoYW5nZXMgb3V0IG9mIGEgc2VyaWVzIG9mIGNoYW5nZXMgKHR5cGljYWxseSBjb21taXRzKSBhbmQgcmVjb3JkIHRoZW0KKwlhcyBhIG5ldyBzZXJpZXMgb2YgY2hhbmdlcyBvbiB0b3Agb2YgYSBkaWZmZXJlbnQgY29kZWJhc2UuIEluIEdpdCwgdGhpcyBpcworCXBlcmZvcm1lZCBieSB0aGUgImdpdCBjaGVycnktcGljayIgY29tbWFuZCB0byBleHRyYWN0IHRoZSBjaGFuZ2UgaW50cm9kdWNlZAorCWJ5IGFuIGV4aXN0aW5nIDw8ZGVmX2NvbW1pdCxjb21taXQ+PiBhbmQgdG8gcmVjb3JkIGl0IGJhc2VkIG9uIHRoZSB0aXAKKwlvZiB0aGUgY3VycmVudCA8PGRlZl9icmFuY2gsYnJhbmNoPj4gYXMgYSBuZXcgY29tbWl0LgorCitbW2RlZl9jbGVhbl1dY2xlYW46OgorCUEgPDxkZWZfd29ya2luZ190cmVlLHdvcmtpbmcgdHJlZT4+IGlzIGNsZWFuLCBpZiBpdAorCWNvcnJlc3BvbmRzIHRvIHRoZSA8PGRlZl9yZXZpc2lvbixyZXZpc2lvbj4+IHJlZmVyZW5jZWQgYnkgdGhlIGN1cnJlbnQKKwk8PGRlZl9oZWFkLGhlYWQ+Pi4gQWxzbyBzZWUgIjw8ZGVmX2RpcnR5LGRpcnR5Pj4iLgorCitbW2RlZl9jb21taXRdXWNvbW1pdDo6CisJQXMgYSBub3VuOiBBIHNpbmdsZSBwb2ludCBpbiB0aGUKKwlHaXQgaGlzdG9yeTsgdGhlIGVudGlyZSBoaXN0b3J5IG9mIGEgcHJvamVjdCBpcyByZXByZXNlbnRlZCBhcyBhCisJc2V0IG9mIGludGVycmVsYXRlZCBjb21taXRzLiAgVGhlIHdvcmQgImNvbW1pdCIgaXMgb2Z0ZW4KKwl1c2VkIGJ5IEdpdCBpbiB0aGUgc2FtZSBwbGFjZXMgb3RoZXIgcmV2aXNpb24gY29udHJvbCBzeXN0ZW1zCisJdXNlIHRoZSB3b3JkcyAicmV2aXNpb24iIG9yICJ2ZXJzaW9uIi4gIEFsc28gdXNlZCBhcyBhIHNob3J0CisJaGFuZCBmb3IgPDxkZWZfY29tbWl0X29iamVjdCxjb21taXQgb2JqZWN0Pj4uCisrCitBcyBhIHZlcmI6IFRoZSBhY3Rpb24gb2Ygc3RvcmluZyBhIG5ldyBzbmFwc2hvdCBvZiB0aGUgcHJvamVjdCdzCitzdGF0ZSBpbiB0aGUgR2l0IGhpc3RvcnksIGJ5IGNyZWF0aW5nIGEgbmV3IGNvbW1pdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQKK3N0YXRlIG9mIHRoZSA8PGRlZl9pbmRleCxpbmRleD4+IGFuZCBhZHZhbmNpbmcgPDxkZWZfSEVBRCxIRUFEPj4KK3RvIHBvaW50IGF0IHRoZSBuZXcgY29tbWl0LgorCitbW2RlZl9jb21taXRfb2JqZWN0XV1jb21taXQgb2JqZWN0OjoKKwlBbiA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4gd2hpY2ggY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEKKwlwYXJ0aWN1bGFyIDw8ZGVmX3JldmlzaW9uLHJldmlzaW9uPj4sIHN1Y2ggYXMgPDxkZWZfcGFyZW50LHBhcmVudHM+PiwgY29tbWl0dGVyLAorCWF1dGhvciwgZGF0ZSBhbmQgdGhlIDw8ZGVmX3RyZWVfb2JqZWN0LHRyZWUgb2JqZWN0Pj4gd2hpY2ggY29ycmVzcG9uZHMKKwl0byB0aGUgdG9wIDw8ZGVmX2RpcmVjdG9yeSxkaXJlY3Rvcnk+PiBvZiB0aGUgc3RvcmVkCisJcmV2aXNpb24uCisKK1tbZGVmX2NvbW1pdC1pc2hdXWNvbW1pdC1pc2ggKGFsc28gY29tbWl0dGlzaCk6OgorCUEgPDxkZWZfY29tbWl0X29iamVjdCxjb21taXQgb2JqZWN0Pj4gb3IgYW4KKwk8PGRlZl9vYmplY3Qsb2JqZWN0Pj4gdGhhdCBjYW4gYmUgcmVjdXJzaXZlbHkgZGVyZWZlcmVuY2VkIHRvCisJYSBjb21taXQgb2JqZWN0LgorCVRoZSBmb2xsb3dpbmcgYXJlIGFsbCBjb21taXQtaXNoZXM6CisJYSBjb21taXQgb2JqZWN0LAorCWEgPDxkZWZfdGFnX29iamVjdCx0YWcgb2JqZWN0Pj4gdGhhdCBwb2ludHMgdG8gYSBjb21taXQKKwlvYmplY3QsCisJYSB0YWcgb2JqZWN0IHRoYXQgcG9pbnRzIHRvIGEgdGFnIG9iamVjdCB0aGF0IHBvaW50cyB0byBhCisJY29tbWl0IG9iamVjdCwKKwlldGMuCisKK1tbZGVmX2NvcmVfZ2l0XV1jb3JlIEdpdDo6CisJRnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB1dGlsaXRpZXMgb2YgR2l0LiBFeHBvc2VzIG9ubHkgbGltaXRlZAorCXNvdXJjZSBjb2RlIG1hbmFnZW1lbnQgdG9vbHMuCisKK1tbZGVmX0RBR11dREFHOjoKKwlEaXJlY3RlZCBhY3ljbGljIGdyYXBoLiBUaGUgPDxkZWZfY29tbWl0X29iamVjdCxjb21taXQgb2JqZWN0cz4+IGZvcm0gYQorCWRpcmVjdGVkIGFjeWNsaWMgZ3JhcGgsIGJlY2F1c2UgdGhleSBoYXZlIHBhcmVudHMgKGRpcmVjdGVkKSwgYW5kIHRoZQorCWdyYXBoIG9mIGNvbW1pdCBvYmplY3RzIGlzIGFjeWNsaWMgKHRoZXJlIGlzIG5vIDw8ZGVmX2NoYWluLGNoYWluPj4KKwl3aGljaCBiZWdpbnMgYW5kIGVuZHMgd2l0aCB0aGUgc2FtZSA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4pLgorCitbW2RlZl9kYW5nbGluZ19vYmplY3RdXWRhbmdsaW5nIG9iamVjdDo6CisJQW4gPDxkZWZfdW5yZWFjaGFibGVfb2JqZWN0LHVucmVhY2hhYmxlIG9iamVjdD4+IHdoaWNoIGlzIG5vdAorCTw8ZGVmX3JlYWNoYWJsZSxyZWFjaGFibGU+PiBldmVuIGZyb20gb3RoZXIgdW5yZWFjaGFibGUgb2JqZWN0czsgYQorCWRhbmdsaW5nIG9iamVjdCBoYXMgbm8gcmVmZXJlbmNlcyB0byBpdCBmcm9tIGFueQorCXJlZmVyZW5jZSBvciA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4gaW4gdGhlIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+LgorCitbW2RlZl9kZXRhY2hlZF9IRUFEXV1kZXRhY2hlZCBIRUFEOjoKKwlOb3JtYWxseSB0aGUgPDxkZWZfSEVBRCxIRUFEPj4gc3RvcmVzIHRoZSBuYW1lIG9mIGEKKwk8PGRlZl9icmFuY2gsYnJhbmNoPj4sIGFuZCBjb21tYW5kcyB0aGF0IG9wZXJhdGUgb24gdGhlCisJaGlzdG9yeSBIRUFEIHJlcHJlc2VudHMgb3BlcmF0ZSBvbiB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZQorCXRpcCBvZiB0aGUgYnJhbmNoIHRoZSBIRUFEIHBvaW50cyBhdC4gIEhvd2V2ZXIsIEdpdCBhbHNvCisJYWxsb3dzIHlvdSB0byA8PGRlZl9jaGVja291dCxjaGVjayBvdXQ+PiBhbiBhcmJpdHJhcnkKKwk8PGRlZl9jb21taXQsY29tbWl0Pj4gdGhhdCBpc24ndCBuZWNlc3NhcmlseSB0aGUgdGlwIG9mIGFueQorCXBhcnRpY3VsYXIgYnJhbmNoLiAgVGhlIEhFQUQgaW4gc3VjaCBhIHN0YXRlIGlzIGNhbGxlZAorCSJkZXRhY2hlZCIuCisrCitOb3RlIHRoYXQgY29tbWFuZHMgdGhhdCBvcGVyYXRlIG9uIHRoZSBoaXN0b3J5IG9mIHRoZSBjdXJyZW50IGJyYW5jaAorKGUuZy4gYGdpdCBjb21taXRgIHRvIGJ1aWxkIGEgbmV3IGhpc3Rvcnkgb24gdG9wIG9mIGl0KSBzdGlsbCB3b3JrCit3aGlsZSB0aGUgSEVBRCBpcyBkZXRhY2hlZC4gVGhleSB1cGRhdGUgdGhlIEhFQUQgdG8gcG9pbnQgYXQgdGhlIHRpcAorb2YgdGhlIHVwZGF0ZWQgaGlzdG9yeSB3aXRob3V0IGFmZmVjdGluZyBhbnkgYnJhbmNoLiAgQ29tbWFuZHMgdGhhdAordXBkYXRlIG9yIGlucXVpcmUgaW5mb3JtYXRpb24gX2Fib3V0XyB0aGUgY3VycmVudCBicmFuY2ggKGUuZy4gYGdpdAorYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvYCB0aGF0IHNldHMgd2hhdCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIHRoZQorY3VycmVudCBicmFuY2ggaW50ZWdyYXRlcyB3aXRoKSBvYnZpb3VzbHkgZG8gbm90IHdvcmssIGFzIHRoZXJlIGlzIG5vCisocmVhbCkgY3VycmVudCBicmFuY2ggdG8gYXNrIGFib3V0IGluIHRoaXMgc3RhdGUuCisKK1tbZGVmX2RpcmVjdG9yeV1dZGlyZWN0b3J5OjoKKwlUaGUgbGlzdCB5b3UgZ2V0IHdpdGggImxzIiA6LSkKKworW1tkZWZfZGlydHldXWRpcnR5OjoKKwlBIDw8ZGVmX3dvcmtpbmdfdHJlZSx3b3JraW5nIHRyZWU+PiBpcyBzYWlkIHRvIGJlICJkaXJ0eSIgaWYKKwlpdCBjb250YWlucyBtb2RpZmljYXRpb25zIHdoaWNoIGhhdmUgbm90IGJlZW4gPDxkZWZfY29tbWl0LGNvbW1pdHRlZD4+IHRvIHRoZSBjdXJyZW50CisJPDxkZWZfYnJhbmNoLGJyYW5jaD4+LgorCitbW2RlZl9ldmlsX21lcmdlXV1ldmlsIG1lcmdlOjoKKwlBbiBldmlsIG1lcmdlIGlzIGEgPDxkZWZfbWVyZ2UsbWVyZ2U+PiB0aGF0IGludHJvZHVjZXMgY2hhbmdlcyB0aGF0CisJZG8gbm90IGFwcGVhciBpbiBhbnkgPDxkZWZfcGFyZW50LHBhcmVudD4+LgorCitbW2RlZl9mYXN0X2ZvcndhcmRdXWZhc3QtZm9yd2FyZDo6CisJQSBmYXN0LWZvcndhcmQgaXMgYSBzcGVjaWFsIHR5cGUgb2YgPDxkZWZfbWVyZ2UsbWVyZ2U+PiB3aGVyZSB5b3UgaGF2ZSBhCisJPDxkZWZfcmV2aXNpb24scmV2aXNpb24+PiBhbmQgeW91IGFyZSAibWVyZ2luZyIgYW5vdGhlcgorCTw8ZGVmX2JyYW5jaCxicmFuY2g+PidzIGNoYW5nZXMgdGhhdCBoYXBwZW4gdG8gYmUgYSBkZXNjZW5kYW50IG9mIHdoYXQKKwl5b3UgaGF2ZS4gSW4gc3VjaCBhIGNhc2UsIHlvdSBkbyBub3QgbWFrZSBhIG5ldyA8PGRlZl9tZXJnZSxtZXJnZT4+CisJPDxkZWZfY29tbWl0LGNvbW1pdD4+IGJ1dCBpbnN0ZWFkIGp1c3QgdXBkYXRlIHRvIGhpcworCXJldmlzaW9uLiBUaGlzIHdpbGwgaGFwcGVuIGZyZXF1ZW50bHkgb24gYQorCTw8ZGVmX3JlbW90ZV90cmFja2luZ19icmFuY2gscmVtb3RlLXRyYWNraW5nIGJyYW5jaD4+IG9mIGEgcmVtb3RlCisJPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4uCisKK1tbZGVmX2ZldGNoXV1mZXRjaDo6CisJRmV0Y2hpbmcgYSA8PGRlZl9icmFuY2gsYnJhbmNoPj4gbWVhbnMgdG8gZ2V0IHRoZQorCWJyYW5jaCdzIDw8ZGVmX2hlYWRfcmVmLGhlYWQgcmVmPj4gZnJvbSBhIHJlbW90ZQorCTw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+LCB0byBmaW5kIG91dCB3aGljaCBvYmplY3RzIGFyZQorCW1pc3NpbmcgZnJvbSB0aGUgbG9jYWwgPDxkZWZfb2JqZWN0X2RhdGFiYXNlLG9iamVjdCBkYXRhYmFzZT4+LAorCWFuZCB0byBnZXQgdGhlbSwgdG9vLiAgU2VlIGFsc28gbGlua2dpdDpnaXQtZmV0Y2hbMV0uCisKK1tbZGVmX2ZpbGVfc3lzdGVtXV1maWxlIHN5c3RlbTo6CisJTGludXMgVG9ydmFsZHMgb3JpZ2luYWxseSBkZXNpZ25lZCBHaXQgdG8gYmUgYSB1c2VyIHNwYWNlIGZpbGUgc3lzdGVtLAorCWkuZS4gdGhlIGluZnJhc3RydWN0dXJlIHRvIGhvbGQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLiBUaGF0IGVuc3VyZWQgdGhlCisJZWZmaWNpZW5jeSBhbmQgc3BlZWQgb2YgR2l0LgorCitbW2RlZl9naXRfYXJjaGl2ZV1dR2l0IGFyY2hpdmU6OgorCVN5bm9ueW0gZm9yIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+IChmb3IgYXJjaCBwZW9wbGUpLgorCitbW2RlZl9naXRmaWxlXV1naXRmaWxlOjoKKwlBIHBsYWluIGZpbGUgYC5naXRgIGF0IHRoZSByb290IG9mIGEgd29ya2luZyB0cmVlIHRoYXQKKwlwb2ludHMgYXQgdGhlIGRpcmVjdG9yeSB0aGF0IGlzIHRoZSByZWFsIHJlcG9zaXRvcnkuCisKK1tbZGVmX2dyYWZ0c11dZ3JhZnRzOjoKKwlHcmFmdHMgZW5hYmxlcyB0d28gb3RoZXJ3aXNlIGRpZmZlcmVudCBsaW5lcyBvZiBkZXZlbG9wbWVudCB0byBiZSBqb2luZWQKKwl0b2dldGhlciBieSByZWNvcmRpbmcgZmFrZSBhbmNlc3RyeSBpbmZvcm1hdGlvbiBmb3IgY29tbWl0cy4gVGhpcyB3YXkKKwl5b3UgY2FuIG1ha2UgR2l0IHByZXRlbmQgdGhlIHNldCBvZiA8PGRlZl9wYXJlbnQscGFyZW50cz4+IGEgPDxkZWZfY29tbWl0LGNvbW1pdD4+IGhhcworCWlzIGRpZmZlcmVudCBmcm9tIHdoYXQgd2FzIHJlY29yZGVkIHdoZW4gdGhlIGNvbW1pdCB3YXMKKwljcmVhdGVkLiBDb25maWd1cmVkIHZpYSB0aGUgYC5naXQvaW5mby9ncmFmdHNgIGZpbGUuCisrCitOb3RlIHRoYXQgdGhlIGdyYWZ0cyBtZWNoYW5pc20gaXMgb3V0ZGF0ZWQgYW5kIGNhbiBsZWFkIHRvIHByb2JsZW1zCit0cmFuc2ZlcnJpbmcgb2JqZWN0cyBiZXR3ZWVuIHJlcG9zaXRvcmllczsgc2VlIGxpbmtnaXQ6Z2l0LXJlcGxhY2VbMV0KK2ZvciBhIG1vcmUgZmxleGlibGUgYW5kIHJvYnVzdCBzeXN0ZW0gdG8gZG8gdGhlIHNhbWUgdGhpbmcuCisKK1tbZGVmX2hhc2hdXWhhc2g6OgorCUluIEdpdCdzIGNvbnRleHQsIHN5bm9ueW0gZm9yIDw8ZGVmX29iamVjdF9uYW1lLG9iamVjdCBuYW1lPj4uCisKK1tbZGVmX2hlYWRdXWhlYWQ6OgorCUEgPDxkZWZfcmVmLG5hbWVkIHJlZmVyZW5jZT4+IHRvIHRoZSA8PGRlZl9jb21taXQsY29tbWl0Pj4gYXQgdGhlIHRpcCBvZiBhCisJPDxkZWZfYnJhbmNoLGJyYW5jaD4+LiAgSGVhZHMgYXJlIHN0b3JlZCBpbiBhIGZpbGUgaW4KKwlgJEdJVF9ESVIvcmVmcy9oZWFkcy9gIGRpcmVjdG9yeSwgZXhjZXB0IHdoZW4gdXNpbmcgcGFja2VkIHJlZnMuIChTZWUKKwlsaW5rZ2l0OmdpdC1wYWNrLXJlZnNbMV0uKQorCitbW2RlZl9IRUFEXV1IRUFEOjoKKwlUaGUgY3VycmVudCA8PGRlZl9icmFuY2gsYnJhbmNoPj4uICBJbiBtb3JlIGRldGFpbDogWW91ciA8PGRlZl93b3JraW5nX3RyZWUsCisJd29ya2luZyB0cmVlPj4gaXMgbm9ybWFsbHkgZGVyaXZlZCBmcm9tIHRoZSBzdGF0ZSBvZiB0aGUgdHJlZQorCXJlZmVycmVkIHRvIGJ5IEhFQUQuICBIRUFEIGlzIGEgcmVmZXJlbmNlIHRvIG9uZSBvZiB0aGUKKwk8PGRlZl9oZWFkLGhlYWRzPj4gaW4geW91ciByZXBvc2l0b3J5LCBleGNlcHQgd2hlbiB1c2luZyBhCisJPDxkZWZfZGV0YWNoZWRfSEVBRCxkZXRhY2hlZCBIRUFEPj4sIGluIHdoaWNoIGNhc2UgaXQgZGlyZWN0bHkKKwlyZWZlcmVuY2VzIGFuIGFyYml0cmFyeSBjb21taXQuCisKK1tbZGVmX2hlYWRfcmVmXV1oZWFkIHJlZjo6CisJQSBzeW5vbnltIGZvciA8PGRlZl9oZWFkLGhlYWQ+Pi4KKworW1tkZWZfaG9va11daG9vazo6CisJRHVyaW5nIHRoZSBub3JtYWwgZXhlY3V0aW9uIG9mIHNldmVyYWwgR2l0IGNvbW1hbmRzLCBjYWxsLW91dHMgYXJlIG1hZGUKKwl0byBvcHRpb25hbCBzY3JpcHRzIHRoYXQgYWxsb3cgYSBkZXZlbG9wZXIgdG8gYWRkIGZ1bmN0aW9uYWxpdHkgb3IKKwljaGVja2luZy4gVHlwaWNhbGx5LCB0aGUgaG9va3MgYWxsb3cgZm9yIGEgY29tbWFuZCB0byBiZSBwcmUtdmVyaWZpZWQKKwlhbmQgcG90ZW50aWFsbHkgYWJvcnRlZCwgYW5kIGFsbG93IGZvciBhIHBvc3Qtbm90aWZpY2F0aW9uIGFmdGVyIHRoZQorCW9wZXJhdGlvbiBpcyBkb25lLiBUaGUgaG9vayBzY3JpcHRzIGFyZSBmb3VuZCBpbiB0aGUKKwlgJEdJVF9ESVIvaG9va3MvYCBkaXJlY3RvcnksIGFuZCBhcmUgZW5hYmxlZCBieSBzaW1wbHkKKwlyZW1vdmluZyB0aGUgYC5zYW1wbGVgIHN1ZmZpeCBmcm9tIHRoZSBmaWxlbmFtZS4gSW4gZWFybGllciB2ZXJzaW9ucworCW9mIEdpdCB5b3UgaGFkIHRvIG1ha2UgdGhlbSBleGVjdXRhYmxlLgorCitbW2RlZl9pbmRleF1daW5kZXg6OgorCUEgY29sbGVjdGlvbiBvZiBmaWxlcyB3aXRoIHN0YXQgaW5mb3JtYXRpb24sIHdob3NlIGNvbnRlbnRzIGFyZSBzdG9yZWQKKwlhcyBvYmplY3RzLiBUaGUgaW5kZXggaXMgYSBzdG9yZWQgdmVyc2lvbiBvZiB5b3VyCisJPDxkZWZfd29ya2luZ190cmVlLHdvcmtpbmcgdHJlZT4+LiBUcnV0aCBiZSB0b2xkLCBpdCBjYW4gYWxzbyBjb250YWluIGEgc2Vjb25kLCBhbmQgZXZlbgorCWEgdGhpcmQgdmVyc2lvbiBvZiBhIHdvcmtpbmcgdHJlZSwgd2hpY2ggYXJlIHVzZWQKKwl3aGVuIDw8ZGVmX21lcmdlLG1lcmdpbmc+Pi4KKworW1tkZWZfaW5kZXhfZW50cnldXWluZGV4IGVudHJ5OjoKKwlUaGUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGEgcGFydGljdWxhciBmaWxlLCBzdG9yZWQgaW4gdGhlCisJPDxkZWZfaW5kZXgsaW5kZXg+Pi4gQW4gaW5kZXggZW50cnkgY2FuIGJlIHVubWVyZ2VkLCBpZiBhCisJPDxkZWZfbWVyZ2UsbWVyZ2U+PiB3YXMgc3RhcnRlZCwgYnV0IG5vdCB5ZXQgZmluaXNoZWQgKGkuZS4gaWYKKwl0aGUgaW5kZXggY29udGFpbnMgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhhdCBmaWxlKS4KKworW1tkZWZfbWFzdGVyXV1tYXN0ZXI6OgorCVRoZSBkZWZhdWx0IGRldmVsb3BtZW50IDw8ZGVmX2JyYW5jaCxicmFuY2g+Pi4gV2hlbmV2ZXIgeW91CisJY3JlYXRlIGEgR2l0IDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+LCBhIGJyYW5jaCBuYW1lZAorCSJtYXN0ZXIiIGlzIGNyZWF0ZWQsIGFuZCBiZWNvbWVzIHRoZSBhY3RpdmUgYnJhbmNoLiBJbiBtb3N0CisJY2FzZXMsIHRoaXMgY29udGFpbnMgdGhlIGxvY2FsIGRldmVsb3BtZW50LCB0aG91Z2ggdGhhdCBpcworCXB1cmVseSBieSBjb252ZW50aW9uIGFuZCBpcyBub3QgcmVxdWlyZWQuCisKK1tbZGVmX21lcmdlXV1tZXJnZTo6CisJQXMgYSB2ZXJiOiBUbyBicmluZyB0aGUgY29udGVudHMgb2YgYW5vdGhlcgorCTw8ZGVmX2JyYW5jaCxicmFuY2g+PiAocG9zc2libHkgZnJvbSBhbiBleHRlcm5hbAorCTw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+KSBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaC4gIEluIHRoZQorCWNhc2Ugd2hlcmUgdGhlIG1lcmdlZC1pbiBicmFuY2ggaXMgZnJvbSBhIGRpZmZlcmVudCByZXBvc2l0b3J5LAorCXRoaXMgaXMgZG9uZSBieSBmaXJzdCA8PGRlZl9mZXRjaCxmZXRjaGluZz4+IHRoZSByZW1vdGUgYnJhbmNoCisJYW5kIHRoZW4gbWVyZ2luZyB0aGUgcmVzdWx0IGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhpcworCWNvbWJpbmF0aW9uIG9mIGZldGNoIGFuZCBtZXJnZSBvcGVyYXRpb25zIGlzIGNhbGxlZCBhCisJPDxkZWZfcHVsbCxwdWxsPj4uICBNZXJnaW5nIGlzIHBlcmZvcm1lZCBieSBhbiBhdXRvbWF0aWMgcHJvY2VzcworCXRoYXQgaWRlbnRpZmllcyBjaGFuZ2VzIG1hZGUgc2luY2UgdGhlIGJyYW5jaGVzIGRpdmVyZ2VkLCBhbmQKKwl0aGVuIGFwcGxpZXMgYWxsIHRob3NlIGNoYW5nZXMgdG9nZXRoZXIuICBJbiBjYXNlcyB3aGVyZSBjaGFuZ2VzCisJY29uZmxpY3QsIG1hbnVhbCBpbnRlcnZlbnRpb24gbWF5IGJlIHJlcXVpcmVkIHRvIGNvbXBsZXRlIHRoZQorCW1lcmdlLgorKworQXMgYSBub3VuOiB1bmxlc3MgaXQgaXMgYSA8PGRlZl9mYXN0X2ZvcndhcmQsZmFzdC1mb3J3YXJkPj4sIGEKK3N1Y2Nlc3NmdWwgbWVyZ2UgcmVzdWx0cyBpbiB0aGUgY3JlYXRpb24gb2YgYSBuZXcgPDxkZWZfY29tbWl0LGNvbW1pdD4+CityZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UsIGFuZCBoYXZpbmcgYXMKKzw8ZGVmX3BhcmVudCxwYXJlbnRzPj4gdGhlIHRpcHMgb2YgdGhlIG1lcmdlZCA8PGRlZl9icmFuY2gsYnJhbmNoZXM+Pi4KK1RoaXMgY29tbWl0IGlzIHJlZmVycmVkIHRvIGFzIGEgIm1lcmdlIGNvbW1pdCIsIG9yIHNvbWV0aW1lcyBqdXN0IGEKKyJtZXJnZSIuCisKK1tbZGVmX29iamVjdF1db2JqZWN0OjoKKwlUaGUgdW5pdCBvZiBzdG9yYWdlIGluIEdpdC4gSXQgaXMgdW5pcXVlbHkgaWRlbnRpZmllZCBieSB0aGUKKwk8PGRlZl9TSEExLFNIQS0xPj4gb2YgaXRzIGNvbnRlbnRzLiBDb25zZXF1ZW50bHksIGFuCisJb2JqZWN0IGNhbm5vdCBiZSBjaGFuZ2VkLgorCitbW2RlZl9vYmplY3RfZGF0YWJhc2VdXW9iamVjdCBkYXRhYmFzZTo6CisJU3RvcmVzIGEgc2V0IG9mICJvYmplY3RzIiwgYW5kIGFuIGluZGl2aWR1YWwgPDxkZWZfb2JqZWN0LG9iamVjdD4+IGlzCisJaWRlbnRpZmllZCBieSBpdHMgPDxkZWZfb2JqZWN0X25hbWUsb2JqZWN0IG5hbWU+Pi4gVGhlIG9iamVjdHMgdXN1YWxseQorCWxpdmUgaW4gYCRHSVRfRElSL29iamVjdHMvYC4KKworW1tkZWZfb2JqZWN0X2lkZW50aWZpZXJdXW9iamVjdCBpZGVudGlmaWVyOjoKKwlTeW5vbnltIGZvciA8PGRlZl9vYmplY3RfbmFtZSxvYmplY3QgbmFtZT4+LgorCitbW2RlZl9vYmplY3RfbmFtZV1db2JqZWN0IG5hbWU6OgorCVRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiBhbiA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4uICBUaGUKKwlvYmplY3QgbmFtZSBpcyB1c3VhbGx5IHJlcHJlc2VudGVkIGJ5IGEgNDAgY2hhcmFjdGVyCisJaGV4YWRlY2ltYWwgc3RyaW5nLiAgQWxzbyBjb2xsb3F1aWFsbHkgY2FsbGVkIDw8ZGVmX1NIQTEsU0hBLTE+Pi4KKworW1tkZWZfb2JqZWN0X3R5cGVdXW9iamVjdCB0eXBlOjoKKwlPbmUgb2YgdGhlIGlkZW50aWZpZXJzICI8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdD4+IiwKKwkiPDxkZWZfdHJlZV9vYmplY3QsdHJlZT4+IiwgIjw8ZGVmX3RhZ19vYmplY3QsdGFnPj4iIG9yCisJIjw8ZGVmX2Jsb2Jfb2JqZWN0LGJsb2I+PiIgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBhbgorCTw8ZGVmX29iamVjdCxvYmplY3Q+Pi4KKworW1tkZWZfb2N0b3B1c11db2N0b3B1czo6CisJVG8gPDxkZWZfbWVyZ2UsbWVyZ2U+PiBtb3JlIHRoYW4gdHdvIDw8ZGVmX2JyYW5jaCxicmFuY2hlcz4+LgorCitbW2RlZl9vcmlnaW5dXW9yaWdpbjo6CisJVGhlIGRlZmF1bHQgdXBzdHJlYW0gPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4uIE1vc3QgcHJvamVjdHMgaGF2ZQorCWF0IGxlYXN0IG9uZSB1cHN0cmVhbSBwcm9qZWN0IHdoaWNoIHRoZXkgdHJhY2suIEJ5IGRlZmF1bHQKKwknb3JpZ2luJyBpcyB1c2VkIGZvciB0aGF0IHB1cnBvc2UuIE5ldyB1cHN0cmVhbSB1cGRhdGVzCisJd2lsbCBiZSBmZXRjaGVkIGludG8gPDxkZWZfcmVtb3RlX3RyYWNraW5nX2JyYW5jaCxyZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXM+PiBuYW1lZAorCW9yaWdpbi9uYW1lLW9mLXVwc3RyZWFtLWJyYW5jaCwgd2hpY2ggeW91IGNhbiBzZWUgdXNpbmcKKwlgZ2l0IGJyYW5jaCAtcmAuCisKK1tbZGVmX292ZXJsYXldXW92ZXJsYXk6OgorCU9ubHkgdXBkYXRlIGFuZCBhZGQgZmlsZXMgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCBidXQgZG9uJ3QKKwlkZWxldGUgdGhlbSwgc2ltaWxhciB0byBob3cgJ2NwIC1SJyB3b3VsZCB1cGRhdGUgdGhlIGNvbnRlbnRzCisJaW4gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgbW9kZSBpbiBhCisJPDxkZWZfY2hlY2tvdXQsY2hlY2tvdXQ+PiB3aGVuIGNoZWNraW5nIG91dCBmaWxlcyBmcm9tIHRoZQorCTw8ZGVmX2luZGV4LGluZGV4Pj4gb3IgYSA8PGRlZl90cmVlLWlzaCx0cmVlLWlzaD4+LiAgSW4KKwljb250cmFzdCwgbm8tb3ZlcmxheSBtb2RlIGFsc28gZGVsZXRlcyB0cmFja2VkIGZpbGVzIG5vdAorCXByZXNlbnQgaW4gdGhlIHNvdXJjZSwgc2ltaWxhciB0byAncnN5bmMgLS1kZWxldGUnLgorCitbW2RlZl9wYWNrXV1wYWNrOjoKKwlBIHNldCBvZiBvYmplY3RzIHdoaWNoIGhhdmUgYmVlbiBjb21wcmVzc2VkIGludG8gb25lIGZpbGUgKHRvIHNhdmUgc3BhY2UKKwlvciB0byB0cmFuc21pdCB0aGVtIGVmZmljaWVudGx5KS4KKworW1tkZWZfcGFja19pbmRleF1dcGFjayBpbmRleDo6CisJVGhlIGxpc3Qgb2YgaWRlbnRpZmllcnMsIGFuZCBvdGhlciBpbmZvcm1hdGlvbiwgb2YgdGhlIG9iamVjdHMgaW4gYQorCTw8ZGVmX3BhY2sscGFjaz4+LCB0byBhc3Npc3QgaW4gZWZmaWNpZW50bHkgYWNjZXNzaW5nIHRoZSBjb250ZW50cyBvZiBhCisJcGFjay4KKworW1tkZWZfcGF0aHNwZWNdXXBhdGhzcGVjOjoKKwlQYXR0ZXJuIHVzZWQgdG8gbGltaXQgcGF0aHMgaW4gR2l0IGNvbW1hbmRzLgorKworUGF0aHNwZWNzIGFyZSB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgb2YgImdpdCBscy1maWxlcyIsICJnaXQKK2xzLXRyZWUiLCAiZ2l0IGFkZCIsICJnaXQgZ3JlcCIsICJnaXQgZGlmZiIsICJnaXQgY2hlY2tvdXQiLAorYW5kIG1hbnkgb3RoZXIgY29tbWFuZHMgdG8KK2xpbWl0IHRoZSBzY29wZSBvZiBvcGVyYXRpb25zIHRvIHNvbWUgc3Vic2V0IG9mIHRoZSB0cmVlIG9yCit3b3JrdHJlZS4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiBlYWNoIGNvbW1hbmQgZm9yIHdoZXRoZXIKK3BhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb3IgdG9wbGV2ZWwuICBUaGUKK3BhdGhzcGVjIHN5bnRheCBpcyBhcyBmb2xsb3dzOgorKworLS0KKworKiBhbnkgcGF0aCBtYXRjaGVzIGl0c2VsZgorKiB0aGUgcGF0aHNwZWMgdXAgdG8gdGhlIGxhc3Qgc2xhc2ggcmVwcmVzZW50cyBhCisgIGRpcmVjdG9yeSBwcmVmaXguICBUaGUgc2NvcGUgb2YgdGhhdCBwYXRoc3BlYyBpcworICBsaW1pdGVkIHRvIHRoYXQgc3VidHJlZS4KKyogdGhlIHJlc3Qgb2YgdGhlIHBhdGhzcGVjIGlzIGEgcGF0dGVybiBmb3IgdGhlIHJlbWFpbmRlcgorICBvZiB0aGUgcGF0aG5hbWUuICBQYXRocyByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5CisgIHByZWZpeCB3aWxsIGJlIG1hdGNoZWQgYWdhaW5zdCB0aGF0IHBhdHRlcm4gdXNpbmcgZm5tYXRjaCgzKTsKKyAgaW4gcGFydGljdWxhciwgJyonIGFuZCAnPycgX2Nhbl8gbWF0Y2ggZGlyZWN0b3J5IHNlcGFyYXRvcnMuCisKKy0tCisrCitGb3IgZXhhbXBsZSwgRG9jdW1lbnRhdGlvbi8qLmpwZyB3aWxsIG1hdGNoIGFsbCAuanBnIGZpbGVzCitpbiB0aGUgRG9jdW1lbnRhdGlvbiBzdWJ0cmVlLAoraW5jbHVkaW5nIERvY3VtZW50YXRpb24vY2hhcHRlcl8xL2ZpZ3VyZV8xLmpwZy4KKysKK0EgcGF0aHNwZWMgdGhhdCBiZWdpbnMgd2l0aCBhIGNvbG9uIGA6YCBoYXMgc3BlY2lhbCBtZWFuaW5nLiAgSW4gdGhlCitzaG9ydCBmb3JtLCB0aGUgbGVhZGluZyBjb2xvbiBgOmAgaXMgZm9sbG93ZWQgYnkgemVybyBvciBtb3JlICJtYWdpYworc2lnbmF0dXJlIiBsZXR0ZXJzICh3aGljaCBvcHRpb25hbGx5IGlzIHRlcm1pbmF0ZWQgYnkgYW5vdGhlciBjb2xvbiBgOmApLAorYW5kIHRoZSByZW1haW5kZXIgaXMgdGhlIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgcGF0aC4KK1RoZSAibWFnaWMgc2lnbmF0dXJlIiBjb25zaXN0cyBvZiBBU0NJSSBzeW1ib2xzIHRoYXQgYXJlIG5laXRoZXIKK2FscGhhbnVtZXJpYywgZ2xvYiwgcmVnZXggc3BlY2lhbCBjaGFyYWN0ZXJzIG5vciBjb2xvbi4KK1RoZSBvcHRpb25hbCBjb2xvbiB0aGF0IHRlcm1pbmF0ZXMgdGhlICJtYWdpYyBzaWduYXR1cmUiIGNhbiBiZQorb21pdHRlZCBpZiB0aGUgcGF0dGVybiBiZWdpbnMgd2l0aCBhIGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGJlbG9uZyB0bworIm1hZ2ljIHNpZ25hdHVyZSIgc3ltYm9sIHNldCBhbmQgaXMgbm90IGEgY29sb24uCisrCitJbiB0aGUgbG9uZyBmb3JtLCB0aGUgbGVhZGluZyBjb2xvbiBgOmAgaXMgZm9sbG93ZWQgYnkgYW4gb3BlbgorcGFyZW50aGVzaXMgYChgLCBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHplcm8gb3IgbW9yZSAibWFnaWMgd29yZHMiLAorYW5kIGEgY2xvc2UgcGFyZW50aGVzZXMgYClgLCBhbmQgdGhlIHJlbWFpbmRlciBpcyB0aGUgcGF0dGVybiB0byBtYXRjaAorYWdhaW5zdCB0aGUgcGF0aC4KKysKK0EgcGF0aHNwZWMgd2l0aCBvbmx5IGEgY29sb24gbWVhbnMgInRoZXJlIGlzIG5vIHBhdGhzcGVjIi4gVGhpcyBmb3JtCitzaG91bGQgbm90IGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgcGF0aHNwZWMuCisrCistLQordG9wOzsKKwlUaGUgbWFnaWMgd29yZCBgdG9wYCAobWFnaWMgc2lnbmF0dXJlOiBgL2ApIG1ha2VzIHRoZSBwYXR0ZXJuCisJbWF0Y2ggZnJvbSB0aGUgcm9vdCBvZiB0aGUgd29ya2luZyB0cmVlLCBldmVuIHdoZW4geW91IGFyZQorCXJ1bm5pbmcgdGhlIGNvbW1hbmQgZnJvbSBpbnNpZGUgYSBzdWJkaXJlY3RvcnkuCisKK2xpdGVyYWw7OworCVdpbGRjYXJkcyBpbiB0aGUgcGF0dGVybiBzdWNoIGFzIGAqYCBvciBgP2AgYXJlIHRyZWF0ZWQKKwlhcyBsaXRlcmFsIGNoYXJhY3RlcnMuCisKK2ljYXNlOzsKKwlDYXNlIGluc2Vuc2l0aXZlIG1hdGNoLgorCitnbG9iOzsKKwlHaXQgdHJlYXRzIHRoZSBwYXR0ZXJuIGFzIGEgc2hlbGwgZ2xvYiBzdWl0YWJsZSBmb3IKKwljb25zdW1wdGlvbiBieSBmbm1hdGNoKDMpIHdpdGggdGhlIEZOTV9QQVRITkFNRSBmbGFnOgorCXdpbGRjYXJkcyBpbiB0aGUgcGF0dGVybiB3aWxsIG5vdCBtYXRjaCBhIC8gaW4gdGhlIHBhdGhuYW1lLgorCUZvciBleGFtcGxlLCAiRG9jdW1lbnRhdGlvbi97YXN0ZXJpc2t9Lmh0bWwiIG1hdGNoZXMKKwkiRG9jdW1lbnRhdGlvbi9naXQuaHRtbCIgYnV0IG5vdCAiRG9jdW1lbnRhdGlvbi9wcGMvcHBjLmh0bWwiCisJb3IgInRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLmh0bWwiLgorKworVHdvIGNvbnNlY3V0aXZlIGFzdGVyaXNrcyAoImAqKmAiKSBpbiBwYXR0ZXJucyBtYXRjaGVkIGFnYWluc3QKK2Z1bGwgcGF0aG5hbWUgbWF5IGhhdmUgc3BlY2lhbCBtZWFuaW5nOgorCisgLSBBIGxlYWRpbmcgImAqKmAiIGZvbGxvd2VkIGJ5IGEgc2xhc2ggbWVhbnMgbWF0Y2ggaW4gYWxsCisgICBkaXJlY3Rvcmllcy4gRm9yIGV4YW1wbGUsICJgKiovZm9vYCIgbWF0Y2hlcyBmaWxlIG9yIGRpcmVjdG9yeQorICAgImBmb29gIiBhbnl3aGVyZSwgdGhlIHNhbWUgYXMgcGF0dGVybiAiYGZvb2AiLiAiYCoqL2Zvby9iYXJgIgorICAgbWF0Y2hlcyBmaWxlIG9yIGRpcmVjdG9yeSAiYGJhcmAiIGFueXdoZXJlIHRoYXQgaXMgZGlyZWN0bHkKKyAgIHVuZGVyIGRpcmVjdG9yeSAiYGZvb2AiLgorCisgLSBBIHRyYWlsaW5nICJgLyoqYCIgbWF0Y2hlcyBldmVyeXRoaW5nIGluc2lkZS4gRm9yIGV4YW1wbGUsCisgICAiYGFiYy8qKmAiIG1hdGNoZXMgYWxsIGZpbGVzIGluc2lkZSBkaXJlY3RvcnkgImFiYyIsIHJlbGF0aXZlCisgICB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGAuZ2l0aWdub3JlYCBmaWxlLCB3aXRoIGluZmluaXRlIGRlcHRoLgorCisgLSBBIHNsYXNoIGZvbGxvd2VkIGJ5IHR3byBjb25zZWN1dGl2ZSBhc3Rlcmlza3MgdGhlbiBhIHNsYXNoCisgICBtYXRjaGVzIHplcm8gb3IgbW9yZSBkaXJlY3Rvcmllcy4gRm9yIGV4YW1wbGUsICJgYS8qKi9iYCIKKyAgIG1hdGNoZXMgImBhL2JgIiwgImBhL3gvYmAiLCAiYGEveC95L2JgIiBhbmQgc28gb24uCisKKyAtIE90aGVyIGNvbnNlY3V0aXZlIGFzdGVyaXNrcyBhcmUgY29uc2lkZXJlZCBpbnZhbGlkLgorKworR2xvYiBtYWdpYyBpcyBpbmNvbXBhdGlibGUgd2l0aCBsaXRlcmFsIG1hZ2ljLgorCithdHRyOzsKK0FmdGVyIGBhdHRyOmAgY29tZXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiAiYXR0cmlidXRlCityZXF1aXJlbWVudHMiLCBhbGwgb2Ygd2hpY2ggbXVzdCBiZSBtZXQgaW4gb3JkZXIgZm9yIHRoZQorcGF0aCB0byBiZSBjb25zaWRlcmVkIGEgbWF0Y2g7IHRoaXMgaXMgaW4gYWRkaXRpb24gdG8gdGhlCit1c3VhbCBub24tbWFnaWMgcGF0aHNwZWMgcGF0dGVybiBtYXRjaGluZy4KK1NlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0uCisrCitFYWNoIG9mIHRoZSBhdHRyaWJ1dGUgcmVxdWlyZW1lbnRzIGZvciB0aGUgcGF0aCB0YWtlcyBvbmUgb2YKK3RoZXNlIGZvcm1zOgorCistICJgQVRUUmAiIHJlcXVpcmVzIHRoYXQgdGhlIGF0dHJpYnV0ZSBgQVRUUmAgYmUgc2V0LgorCistICJgLUFUVFJgIiByZXF1aXJlcyB0aGF0IHRoZSBhdHRyaWJ1dGUgYEFUVFJgIGJlIHVuc2V0LgorCistICJgQVRUUj1WQUxVRWAiIHJlcXVpcmVzIHRoYXQgdGhlIGF0dHJpYnV0ZSBgQVRUUmAgYmUKKyAgc2V0IHRvIHRoZSBzdHJpbmcgYFZBTFVFYC4KKworLSAiYCFBVFRSYCIgcmVxdWlyZXMgdGhhdCB0aGUgYXR0cmlidXRlIGBBVFRSYCBiZQorICB1bnNwZWNpZmllZC4KKysKK05vdGUgdGhhdCB3aGVuIG1hdGNoaW5nIGFnYWluc3QgYSB0cmVlIG9iamVjdCwgYXR0cmlidXRlcyBhcmUgc3RpbGwKK29idGFpbmVkIGZyb20gd29ya2luZyB0cmVlLCBub3QgZnJvbSB0aGUgZ2l2ZW4gdHJlZSBvYmplY3QuCisKK2V4Y2x1ZGU7OworCUFmdGVyIGEgcGF0aCBtYXRjaGVzIGFueSBub24tZXhjbHVkZSBwYXRoc3BlYywgaXQgd2lsbCBiZSBydW4KKwl0aHJvdWdoIGFsbCBleGNsdWRlIHBhdGhzcGVjcyAobWFnaWMgc2lnbmF0dXJlOiBgIWAgb3IgaXRzCisJc3lub255bSBgXmApLiBJZiBpdCBtYXRjaGVzLCB0aGUgcGF0aCBpcyBpZ25vcmVkLiAgV2hlbiB0aGVyZQorCWlzIG5vIG5vbi1leGNsdWRlIHBhdGhzcGVjLCB0aGUgZXhjbHVzaW9uIGlzIGFwcGxpZWQgdG8gdGhlCisJcmVzdWx0IHNldCBhcyBpZiBpbnZva2VkIHdpdGhvdXQgYW55IHBhdGhzcGVjLgorLS0KKworW1tkZWZfcGFyZW50XV1wYXJlbnQ6OgorCUEgPDxkZWZfY29tbWl0X29iamVjdCxjb21taXQgb2JqZWN0Pj4gY29udGFpbnMgYSAocG9zc2libHkgZW1wdHkpIGxpc3QKKwlvZiB0aGUgbG9naWNhbCBwcmVkZWNlc3NvcihzKSBpbiB0aGUgbGluZSBvZiBkZXZlbG9wbWVudCwgaS5lLiBpdHMKKwlwYXJlbnRzLgorCitbW2RlZl9waWNrYXhlXV1waWNrYXhlOjoKKwlUaGUgdGVybSA8PGRlZl9waWNrYXhlLHBpY2theGU+PiByZWZlcnMgdG8gYW4gb3B0aW9uIHRvIHRoZSBkaWZmY29yZQorCXJvdXRpbmVzIHRoYXQgaGVscCBzZWxlY3QgY2hhbmdlcyB0aGF0IGFkZCBvciBkZWxldGUgYSBnaXZlbiB0ZXh0CisJc3RyaW5nLiBXaXRoIHRoZSBgLS1waWNrYXhlLWFsbGAgb3B0aW9uLCBpdCBjYW4gYmUgdXNlZCB0byB2aWV3IHRoZSBmdWxsCisJPDxkZWZfY2hhbmdlc2V0LGNoYW5nZXNldD4+IHRoYXQgaW50cm9kdWNlZCBvciByZW1vdmVkLCBzYXksIGEKKwlwYXJ0aWN1bGFyIGxpbmUgb2YgdGV4dC4gU2VlIGxpbmtnaXQ6Z2l0LWRpZmZbMV0uCisKK1tbZGVmX3BsdW1iaW5nXV1wbHVtYmluZzo6CisJQ3V0ZSBuYW1lIGZvciA8PGRlZl9jb3JlX2dpdCxjb3JlIEdpdD4+LgorCitbW2RlZl9wb3JjZWxhaW5dXXBvcmNlbGFpbjo6CisJQ3V0ZSBuYW1lIGZvciBwcm9ncmFtcyBhbmQgcHJvZ3JhbSBzdWl0ZXMgZGVwZW5kaW5nIG9uCisJPDxkZWZfY29yZV9naXQsY29yZSBHaXQ+PiwgcHJlc2VudGluZyBhIGhpZ2ggbGV2ZWwgYWNjZXNzIHRvCisJY29yZSBHaXQuIFBvcmNlbGFpbnMgZXhwb3NlIG1vcmUgb2YgYSA8PGRlZl9TQ00sU0NNPj4KKwlpbnRlcmZhY2UgdGhhbiB0aGUgPDxkZWZfcGx1bWJpbmcscGx1bWJpbmc+Pi4KKworW1tkZWZfcGVyX3dvcmt0cmVlX3JlZl1dcGVyLXdvcmt0cmVlIHJlZjo6CisJUmVmcyB0aGF0IGFyZSBwZXItPDxkZWZfd29ya2luZ190cmVlLHdvcmt0cmVlPj4sIHJhdGhlciB0aGFuCisJZ2xvYmFsLiAgVGhpcyBpcyBwcmVzZW50bHkgb25seSA8PGRlZl9IRUFELEhFQUQ+PiBhbmQgYW55IHJlZnMKKwl0aGF0IHN0YXJ0IHdpdGggYHJlZnMvYmlzZWN0L2AsIGJ1dCBtaWdodCBsYXRlciBpbmNsdWRlIG90aGVyCisJdW51c3VhbCByZWZzLgorCitbW2RlZl9wc2V1ZG9yZWZdXXBzZXVkb3JlZjo6CisJUHNldWRvcmVmcyBhcmUgYSBjbGFzcyBvZiBmaWxlcyB1bmRlciBgJEdJVF9ESVJgIHdoaWNoIGJlaGF2ZQorCWxpa2UgcmVmcyBmb3IgdGhlIHB1cnBvc2VzIG9mIHJldi1wYXJzZSwgYnV0IHdoaWNoIGFyZSB0cmVhdGVkCisJc3BlY2lhbGx5IGJ5IGdpdC4gIFBzZXVkb3JlZnMgYm90aCBoYXZlIG5hbWVzIHRoYXQgYXJlIGFsbC1jYXBzLAorCWFuZCBhbHdheXMgc3RhcnQgd2l0aCBhIGxpbmUgY29uc2lzdGluZyBvZiBhCisJPDxkZWZfU0hBMSxTSEEtMT4+IGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UuICBTbywgSEVBRCBpcyBub3QgYQorCXBzZXVkb3JlZiwgYmVjYXVzZSBpdCBpcyBzb21ldGltZXMgYSBzeW1ib2xpYyByZWYuICBUaGV5IG1pZ2h0CisJb3B0aW9uYWxseSBjb250YWluIHNvbWUgYWRkaXRpb25hbCBkYXRhLiAgYE1FUkdFX0hFQURgIGFuZAorCWBDSEVSUllfUElDS19IRUFEYCBhcmUgZXhhbXBsZXMuICBVbmxpa2UKKwk8PGRlZl9wZXJfd29ya3RyZWVfcmVmLHBlci13b3JrdHJlZSByZWZzPj4sIHRoZXNlIGZpbGVzIGNhbm5vdAorCWJlIHN5bWJvbGljIHJlZnMsIGFuZCBuZXZlciBoYXZlIHJlZmxvZ3MuICBUaGV5IGFsc28gY2Fubm90IGJlCisJdXBkYXRlZCB0aHJvdWdoIHRoZSBub3JtYWwgcmVmIHVwZGF0ZSBtYWNoaW5lcnkuICBJbnN0ZWFkLAorCXRoZXkgYXJlIHVwZGF0ZWQgYnkgZGlyZWN0bHkgd3JpdGluZyB0byB0aGUgZmlsZXMuICBIb3dldmVyLAorCXRoZXkgY2FuIGJlIHJlYWQgYXMgaWYgdGhleSB3ZXJlIHJlZnMsIHNvIGBnaXQgcmV2LXBhcnNlCisJTUVSR0VfSEVBRGAgd2lsbCB3b3JrLgorCitbW2RlZl9wdWxsXV1wdWxsOjoKKwlQdWxsaW5nIGEgPDxkZWZfYnJhbmNoLGJyYW5jaD4+IG1lYW5zIHRvIDw8ZGVmX2ZldGNoLGZldGNoPj4gaXQgYW5kCisJPDxkZWZfbWVyZ2UsbWVyZ2U+PiBpdC4gIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0LXB1bGxbMV0uCisKK1tbZGVmX3B1c2hdXXB1c2g6OgorCVB1c2hpbmcgYSA8PGRlZl9icmFuY2gsYnJhbmNoPj4gbWVhbnMgdG8gZ2V0IHRoZSBicmFuY2gncworCTw8ZGVmX2hlYWRfcmVmLGhlYWQgcmVmPj4gZnJvbSBhIHJlbW90ZSA8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+PiwKKwlmaW5kIG91dCBpZiBpdCBpcyBhbiBhbmNlc3RvciB0byB0aGUgYnJhbmNoJ3MgbG9jYWwKKwloZWFkIHJlZiwgYW5kIGluIHRoYXQgY2FzZSwgcHV0dGluZyBhbGwKKwlvYmplY3RzLCB3aGljaCBhcmUgPDxkZWZfcmVhY2hhYmxlLHJlYWNoYWJsZT4+IGZyb20gdGhlIGxvY2FsCisJaGVhZCByZWYsIGFuZCB3aGljaCBhcmUgbWlzc2luZyBmcm9tIHRoZSByZW1vdGUKKwlyZXBvc2l0b3J5LCBpbnRvIHRoZSByZW1vdGUKKwk8PGRlZl9vYmplY3RfZGF0YWJhc2Usb2JqZWN0IGRhdGFiYXNlPj4sIGFuZCB1cGRhdGluZyB0aGUgcmVtb3RlCisJaGVhZCByZWYuIElmIHRoZSByZW1vdGUgPDxkZWZfaGVhZCxoZWFkPj4gaXMgbm90IGFuCisJYW5jZXN0b3IgdG8gdGhlIGxvY2FsIGhlYWQsIHRoZSBwdXNoIGZhaWxzLgorCitbW2RlZl9yZWFjaGFibGVdXXJlYWNoYWJsZTo6CisJQWxsIG9mIHRoZSBhbmNlc3RvcnMgb2YgYSBnaXZlbiA8PGRlZl9jb21taXQsY29tbWl0Pj4gYXJlIHNhaWQgdG8gYmUKKwkicmVhY2hhYmxlIiBmcm9tIHRoYXQgY29tbWl0LiBNb3JlCisJZ2VuZXJhbGx5LCBvbmUgPDxkZWZfb2JqZWN0LG9iamVjdD4+IGlzIHJlYWNoYWJsZSBmcm9tCisJYW5vdGhlciBpZiB3ZSBjYW4gcmVhY2ggdGhlIG9uZSBmcm9tIHRoZSBvdGhlciBieSBhIDw8ZGVmX2NoYWluLGNoYWluPj4KKwl0aGF0IGZvbGxvd3MgPDxkZWZfdGFnLHRhZ3M+PiB0byB3aGF0ZXZlciB0aGV5IHRhZywKKwk8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdHM+PiB0byB0aGVpciBwYXJlbnRzIG9yIHRyZWVzLCBhbmQKKwk8PGRlZl90cmVlX29iamVjdCx0cmVlcz4+IHRvIHRoZSB0cmVlcyBvciA8PGRlZl9ibG9iX29iamVjdCxibG9icz4+CisJdGhhdCB0aGV5IGNvbnRhaW4uCisKK1tbZGVmX3JlYmFzZV1dcmViYXNlOjoKKwlUbyByZWFwcGx5IGEgc2VyaWVzIG9mIGNoYW5nZXMgZnJvbSBhIDw8ZGVmX2JyYW5jaCxicmFuY2g+PiB0byBhCisJZGlmZmVyZW50IGJhc2UsIGFuZCByZXNldCB0aGUgPDxkZWZfaGVhZCxoZWFkPj4gb2YgdGhhdCBicmFuY2gKKwl0byB0aGUgcmVzdWx0LgorCitbW2RlZl9yZWZdXXJlZjo6CisJQSBuYW1lIHRoYXQgYmVnaW5zIHdpdGggYHJlZnMvYCAoZS5nLiBgcmVmcy9oZWFkcy9tYXN0ZXJgKQorCXRoYXQgcG9pbnRzIHRvIGFuIDw8ZGVmX29iamVjdF9uYW1lLG9iamVjdCBuYW1lPj4gb3IgYW5vdGhlcgorCXJlZiAodGhlIGxhdHRlciBpcyBjYWxsZWQgYSA8PGRlZl9zeW1yZWYsc3ltYm9saWMgcmVmPj4pLgorCUZvciBjb252ZW5pZW5jZSwgYSByZWYgY2FuIHNvbWV0aW1lcyBiZSBhYmJyZXZpYXRlZCB3aGVuIHVzZWQKKwlhcyBhbiBhcmd1bWVudCB0byBhIEdpdCBjb21tYW5kOyBzZWUgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10KKwlmb3IgZGV0YWlscy4KKwlSZWZzIGFyZSBzdG9yZWQgaW4gdGhlIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+LgorKworVGhlIHJlZiBuYW1lc3BhY2UgaXMgaGllcmFyY2hpY2FsLgorRGlmZmVyZW50IHN1YmhpZXJhcmNoaWVzIGFyZSB1c2VkIGZvciBkaWZmZXJlbnQgcHVycG9zZXMgKGUuZy4gdGhlCitgcmVmcy9oZWFkcy9gIGhpZXJhcmNoeSBpcyB1c2VkIHRvIHJlcHJlc2VudCBsb2NhbCBicmFuY2hlcykuCisrCitUaGVyZSBhcmUgYSBmZXcgc3BlY2lhbC1wdXJwb3NlIHJlZnMgdGhhdCBkbyBub3QgYmVnaW4gd2l0aCBgcmVmcy9gLgorVGhlIG1vc3Qgbm90YWJsZSBleGFtcGxlIGlzIGBIRUFEYC4KKworW1tkZWZfcmVmbG9nXV1yZWZsb2c6OgorCUEgcmVmbG9nIHNob3dzIHRoZSBsb2NhbCAiaGlzdG9yeSIgb2YgYSByZWYuICBJbiBvdGhlciB3b3JkcywKKwlpdCBjYW4gdGVsbCB5b3Ugd2hhdCB0aGUgM3JkIGxhc3QgcmV2aXNpb24gaW4gX3RoaXNfIHJlcG9zaXRvcnkKKwl3YXMsIGFuZCB3aGF0IHdhcyB0aGUgY3VycmVudCBzdGF0ZSBpbiBfdGhpc18gcmVwb3NpdG9yeSwKKwl5ZXN0ZXJkYXkgOToxNHBtLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlZmxvZ1sxXSBmb3IgZGV0YWlscy4KKworW1tkZWZfcmVmc3BlY11dcmVmc3BlYzo6CisJQSAicmVmc3BlYyIgaXMgdXNlZCBieSA8PGRlZl9mZXRjaCxmZXRjaD4+IGFuZAorCTw8ZGVmX3B1c2gscHVzaD4+IHRvIGRlc2NyaWJlIHRoZSBtYXBwaW5nIGJldHdlZW4gcmVtb3RlCisJPDxkZWZfcmVmLHJlZj4+IGFuZCBsb2NhbCByZWYuCisKK1tbZGVmX3JlbW90ZV1dcmVtb3RlIHJlcG9zaXRvcnk6OgorCUEgPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4gd2hpY2ggaXMgdXNlZCB0byB0cmFjayB0aGUgc2FtZQorCXByb2plY3QgYnV0IHJlc2lkZXMgc29tZXdoZXJlIGVsc2UuIFRvIGNvbW11bmljYXRlIHdpdGggcmVtb3RlcywKKwlzZWUgPDxkZWZfZmV0Y2gsZmV0Y2g+PiBvciA8PGRlZl9wdXNoLHB1c2g+Pi4KKworW1tkZWZfcmVtb3RlX3RyYWNraW5nX2JyYW5jaF1dcmVtb3RlLXRyYWNraW5nIGJyYW5jaDo6CisJQSA8PGRlZl9yZWYscmVmPj4gdGhhdCBpcyB1c2VkIHRvIGZvbGxvdyBjaGFuZ2VzIGZyb20gYW5vdGhlcgorCTw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+LiBJdCB0eXBpY2FsbHkgbG9va3MgbGlrZQorCSdyZWZzL3JlbW90ZXMvZm9vL2JhcicgKGluZGljYXRpbmcgdGhhdCBpdCB0cmFja3MgYSBicmFuY2ggbmFtZWQKKwknYmFyJyBpbiBhIHJlbW90ZSBuYW1lZCAnZm9vJyksIGFuZCBtYXRjaGVzIHRoZSByaWdodC1oYW5kLXNpZGUgb2YKKwlhIGNvbmZpZ3VyZWQgZmV0Y2ggPDxkZWZfcmVmc3BlYyxyZWZzcGVjPj4uIEEgcmVtb3RlLXRyYWNraW5nCisJYnJhbmNoIHNob3VsZCBub3QgY29udGFpbiBkaXJlY3QgbW9kaWZpY2F0aW9ucyBvciBoYXZlIGxvY2FsCisJY29tbWl0cyBtYWRlIHRvIGl0LgorCitbW2RlZl9yZXBvc2l0b3J5XV1yZXBvc2l0b3J5OjoKKwlBIGNvbGxlY3Rpb24gb2YgPDxkZWZfcmVmLHJlZnM+PiB0b2dldGhlciB3aXRoIGFuCisJPDxkZWZfb2JqZWN0X2RhdGFiYXNlLG9iamVjdCBkYXRhYmFzZT4+IGNvbnRhaW5pbmcgYWxsIG9iamVjdHMKKwl3aGljaCBhcmUgPDxkZWZfcmVhY2hhYmxlLHJlYWNoYWJsZT4+IGZyb20gdGhlIHJlZnMsIHBvc3NpYmx5CisJYWNjb21wYW5pZWQgYnkgbWV0YSBkYXRhIGZyb20gb25lIG9yIG1vcmUgPDxkZWZfcG9yY2VsYWluLHBvcmNlbGFpbnM+Pi4gQQorCXJlcG9zaXRvcnkgY2FuIHNoYXJlIGFuIG9iamVjdCBkYXRhYmFzZSB3aXRoIG90aGVyIHJlcG9zaXRvcmllcworCXZpYSA8PGRlZl9hbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlLGFsdGVybmF0ZXMgbWVjaGFuaXNtPj4uCisKK1tbZGVmX3Jlc29sdmVdXXJlc29sdmU6OgorCVRoZSBhY3Rpb24gb2YgZml4aW5nIHVwIG1hbnVhbGx5IHdoYXQgYSBmYWlsZWQgYXV0b21hdGljCisJPDxkZWZfbWVyZ2UsbWVyZ2U+PiBsZWZ0IGJlaGluZC4KKworW1tkZWZfcmV2aXNpb25dXXJldmlzaW9uOjoKKwlTeW5vbnltIGZvciA8PGRlZl9jb21taXQsY29tbWl0Pj4gKHRoZSBub3VuKS4KKworW1tkZWZfcmV3aW5kXV1yZXdpbmQ6OgorCVRvIHRocm93IGF3YXkgcGFydCBvZiB0aGUgZGV2ZWxvcG1lbnQsIGkuZS4gdG8gYXNzaWduIHRoZQorCTw8ZGVmX2hlYWQsaGVhZD4+IHRvIGFuIGVhcmxpZXIgPDxkZWZfcmV2aXNpb24scmV2aXNpb24+Pi4KKworW1tkZWZfU0NNXV1TQ006OgorCVNvdXJjZSBjb2RlIG1hbmFnZW1lbnQgKHRvb2wpLgorCitbW2RlZl9TSEExXV1TSEEtMTo6CisJIlNlY3VyZSBIYXNoIEFsZ29yaXRobSAxIjsgYSBjcnlwdG9ncmFwaGljIGhhc2ggZnVuY3Rpb24uCisJSW4gdGhlIGNvbnRleHQgb2YgR2l0IHVzZWQgYXMgYSBzeW5vbnltIGZvciA8PGRlZl9vYmplY3RfbmFtZSxvYmplY3QgbmFtZT4+LgorCitbW2RlZl9zaGFsbG93X2Nsb25lXV1zaGFsbG93IGNsb25lOjoKKwlNb3N0bHkgYSBzeW5vbnltIHRvIDw8ZGVmX3NoYWxsb3dfcmVwb3NpdG9yeSxzaGFsbG93IHJlcG9zaXRvcnk+PgorCWJ1dCB0aGUgcGhyYXNlIG1ha2VzIGl0IG1vcmUgZXhwbGljaXQgdGhhdCBpdCB3YXMgY3JlYXRlZCBieQorCXJ1bm5pbmcgYGdpdCBjbG9uZSAtLWRlcHRoPS4uLmAgY29tbWFuZC4KKworW1tkZWZfc2hhbGxvd19yZXBvc2l0b3J5XV1zaGFsbG93IHJlcG9zaXRvcnk6OgorCUEgc2hhbGxvdyA8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+PiBoYXMgYW4gaW5jb21wbGV0ZQorCWhpc3Rvcnkgc29tZSBvZiB3aG9zZSA8PGRlZl9jb21taXQsY29tbWl0cz4+IGhhdmUgPDxkZWZfcGFyZW50LHBhcmVudHM+PiBjYXV0ZXJpemVkIGF3YXkgKGluIG90aGVyCisJd29yZHMsIEdpdCBpcyB0b2xkIHRvIHByZXRlbmQgdGhhdCB0aGVzZSBjb21taXRzIGRvIG5vdCBoYXZlIHRoZQorCXBhcmVudHMsIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHJlY29yZGVkIGluIHRoZSA8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdAorCW9iamVjdD4+KS4gVGhpcyBpcyBzb21ldGltZXMgdXNlZnVsIHdoZW4geW91IGFyZSBpbnRlcmVzdGVkIG9ubHkgaW4gdGhlCisJcmVjZW50IGhpc3Rvcnkgb2YgYSBwcm9qZWN0IGV2ZW4gdGhvdWdoIHRoZSByZWFsIGhpc3RvcnkgcmVjb3JkZWQgaW4gdGhlCisJdXBzdHJlYW0gaXMgbXVjaCBsYXJnZXIuIEEgc2hhbGxvdyByZXBvc2l0b3J5CisJaXMgY3JlYXRlZCBieSBnaXZpbmcgdGhlIGAtLWRlcHRoYCBvcHRpb24gdG8gbGlua2dpdDpnaXQtY2xvbmVbMV0sIGFuZAorCWl0cyBoaXN0b3J5IGNhbiBiZSBsYXRlciBkZWVwZW5lZCB3aXRoIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLgorCitbW2RlZl9zdGFzaF1dc3Rhc2ggZW50cnk6OgorCUFuIDw8ZGVmX29iamVjdCxvYmplY3Q+PiB1c2VkIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHRoZSBjb250ZW50cyBvZiBhCisJPDxkZWZfZGlydHksZGlydHk+PiB3b3JraW5nIGRpcmVjdG9yeSBhbmQgdGhlIGluZGV4IGZvciBmdXR1cmUgcmV1c2UuCisKK1tbZGVmX3N1Ym1vZHVsZV1dc3VibW9kdWxlOjoKKwlBIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+IHRoYXQgaG9sZHMgdGhlIGhpc3Rvcnkgb2YgYQorCXNlcGFyYXRlIHByb2plY3QgaW5zaWRlIGFub3RoZXIgcmVwb3NpdG9yeSAodGhlIGxhdHRlciBvZgorCXdoaWNoIGlzIGNhbGxlZCA8PGRlZl9zdXBlcnByb2plY3QsIHN1cGVycHJvamVjdD4+KS4KKworW1tkZWZfc3VwZXJwcm9qZWN0XV1zdXBlcnByb2plY3Q6OgorCUEgPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4gdGhhdCByZWZlcmVuY2VzIHJlcG9zaXRvcmllcworCW9mIG90aGVyIHByb2plY3RzIGluIGl0cyB3b3JraW5nIHRyZWUgYXMgPDxkZWZfc3VibW9kdWxlLHN1Ym1vZHVsZXM+Pi4KKwlUaGUgc3VwZXJwcm9qZWN0IGtub3dzIGFib3V0IHRoZSBuYW1lcyBvZiAoYnV0IGRvZXMgbm90IGhvbGQKKwljb3BpZXMgb2YpIGNvbW1pdCBvYmplY3RzIG9mIHRoZSBjb250YWluZWQgc3VibW9kdWxlcy4KKworW1tkZWZfc3ltcmVmXV1zeW1yZWY6OgorCVN5bWJvbGljIHJlZmVyZW5jZTogaW5zdGVhZCBvZiBjb250YWluaW5nIHRoZSA8PGRlZl9TSEExLFNIQS0xPj4KKwlpZCBpdHNlbGYsIGl0IGlzIG9mIHRoZSBmb3JtYXQgJ3JlZjogcmVmcy9zb21lL3RoaW5nJyBhbmQgd2hlbgorCXJlZmVyZW5jZWQsIGl0IHJlY3Vyc2l2ZWx5IGRlcmVmZXJlbmNlcyB0byB0aGlzIHJlZmVyZW5jZS4KKwknPDxkZWZfSEVBRCxIRUFEPj4nIGlzIGEgcHJpbWUgZXhhbXBsZSBvZiBhIHN5bXJlZi4gU3ltYm9saWMKKwlyZWZlcmVuY2VzIGFyZSBtYW5pcHVsYXRlZCB3aXRoIHRoZSBsaW5rZ2l0OmdpdC1zeW1ib2xpYy1yZWZbMV0KKwljb21tYW5kLgorCitbW2RlZl90YWddXXRhZzo6CisJQSA8PGRlZl9yZWYscmVmPj4gdW5kZXIgYHJlZnMvdGFncy9gIG5hbWVzcGFjZSB0aGF0IHBvaW50cyB0byBhbgorCW9iamVjdCBvZiBhbiBhcmJpdHJhcnkgdHlwZSAodHlwaWNhbGx5IGEgdGFnIHBvaW50cyB0byBlaXRoZXIgYQorCTw8ZGVmX3RhZ19vYmplY3QsdGFnPj4gb3IgYSA8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdCBvYmplY3Q+PikuCisJSW4gY29udHJhc3QgdG8gYSA8PGRlZl9oZWFkLGhlYWQ+PiwgYSB0YWcgaXMgbm90IHVwZGF0ZWQgYnkKKwl0aGUgYGNvbW1pdGAgY29tbWFuZC4gQSBHaXQgdGFnIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggYSBMaXNwCisJdGFnICh3aGljaCB3b3VsZCBiZSBjYWxsZWQgYW4gPDxkZWZfb2JqZWN0X3R5cGUsb2JqZWN0IHR5cGU+PgorCWluIEdpdCdzIGNvbnRleHQpLiBBIHRhZyBpcyBtb3N0IHR5cGljYWxseSB1c2VkIHRvIG1hcmsgYSBwYXJ0aWN1bGFyCisJcG9pbnQgaW4gdGhlIGNvbW1pdCBhbmNlc3RyeSA8PGRlZl9jaGFpbixjaGFpbj4+LgorCitbW2RlZl90YWdfb2JqZWN0XV10YWcgb2JqZWN0OjoKKwlBbiA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4gY29udGFpbmluZyBhIDw8ZGVmX3JlZixyZWY+PiBwb2ludGluZyB0bworCWFub3RoZXIgb2JqZWN0LCB3aGljaCBjYW4gY29udGFpbiBhIG1lc3NhZ2UganVzdCBsaWtlIGEKKwk8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdCBvYmplY3Q+Pi4gSXQgY2FuIGFsc28gY29udGFpbiBhIChQR1ApCisJc2lnbmF0dXJlLCBpbiB3aGljaCBjYXNlIGl0IGlzIGNhbGxlZCBhICJzaWduZWQgdGFnIG9iamVjdCIuCisKK1tbZGVmX3RvcGljX2JyYW5jaF1ddG9waWMgYnJhbmNoOjoKKwlBIHJlZ3VsYXIgR2l0IDw8ZGVmX2JyYW5jaCxicmFuY2g+PiB0aGF0IGlzIHVzZWQgYnkgYSBkZXZlbG9wZXIgdG8KKwlpZGVudGlmeSBhIGNvbmNlcHR1YWwgbGluZSBvZiBkZXZlbG9wbWVudC4gU2luY2UgYnJhbmNoZXMgYXJlIHZlcnkgZWFzeQorCWFuZCBpbmV4cGVuc2l2ZSwgaXQgaXMgb2Z0ZW4gZGVzaXJhYmxlIHRvIGhhdmUgc2V2ZXJhbCBzbWFsbCBicmFuY2hlcworCXRoYXQgZWFjaCBjb250YWluIHZlcnkgd2VsbCBkZWZpbmVkIGNvbmNlcHRzIG9yIHNtYWxsIGluY3JlbWVudGFsIHlldAorCXJlbGF0ZWQgY2hhbmdlcy4KKworW1tkZWZfdHJlZV1ddHJlZTo6CisJRWl0aGVyIGEgPDxkZWZfd29ya2luZ190cmVlLHdvcmtpbmcgdHJlZT4+LCBvciBhIDw8ZGVmX3RyZWVfb2JqZWN0LHRyZWUKKwlvYmplY3Q+PiB0b2dldGhlciB3aXRoIHRoZSBkZXBlbmRlbnQgPDxkZWZfYmxvYl9vYmplY3QsYmxvYj4+IGFuZCB0cmVlIG9iamVjdHMKKwkoaS5lLiBhIHN0b3JlZCByZXByZXNlbnRhdGlvbiBvZiBhIHdvcmtpbmcgdHJlZSkuCisKK1tbZGVmX3RyZWVfb2JqZWN0XV10cmVlIG9iamVjdDo6CisJQW4gPDxkZWZfb2JqZWN0LG9iamVjdD4+IGNvbnRhaW5pbmcgYSBsaXN0IG9mIGZpbGUgbmFtZXMgYW5kIG1vZGVzIGFsb25nCisJd2l0aCByZWZzIHRvIHRoZSBhc3NvY2lhdGVkIGJsb2IgYW5kL29yIHRyZWUgb2JqZWN0cy4gQQorCTw8ZGVmX3RyZWUsdHJlZT4+IGlzIGVxdWl2YWxlbnQgdG8gYSA8PGRlZl9kaXJlY3RvcnksZGlyZWN0b3J5Pj4uCisKK1tbZGVmX3RyZWUtaXNoXV10cmVlLWlzaCAoYWxzbyB0cmVlaXNoKTo6CisJQSA8PGRlZl90cmVlX29iamVjdCx0cmVlIG9iamVjdD4+IG9yIGFuIDw8ZGVmX29iamVjdCxvYmplY3Q+PgorCXRoYXQgY2FuIGJlIHJlY3Vyc2l2ZWx5IGRlcmVmZXJlbmNlZCB0byBhIHRyZWUgb2JqZWN0LgorCURlcmVmZXJlbmNpbmcgYSA8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdCBvYmplY3Q+PiB5aWVsZHMgdGhlCisJdHJlZSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgPDxkZWZfcmV2aXNpb24scmV2aXNpb24+PidzCisJdG9wIDw8ZGVmX2RpcmVjdG9yeSxkaXJlY3Rvcnk+Pi4KKwlUaGUgZm9sbG93aW5nIGFyZSBhbGwgdHJlZS1pc2hlczoKKwlhIDw8ZGVmX2NvbW1pdC1pc2gsY29tbWl0LWlzaD4+LAorCWEgdHJlZSBvYmplY3QsCisJYSA8PGRlZl90YWdfb2JqZWN0LHRhZyBvYmplY3Q+PiB0aGF0IHBvaW50cyB0byBhIHRyZWUgb2JqZWN0LAorCWEgdGFnIG9iamVjdCB0aGF0IHBvaW50cyB0byBhIHRhZyBvYmplY3QgdGhhdCBwb2ludHMgdG8gYSB0cmVlCisJb2JqZWN0LAorCWV0Yy4KKworW1tkZWZfdW5tZXJnZWRfaW5kZXhdXXVubWVyZ2VkIGluZGV4OjoKKwlBbiA8PGRlZl9pbmRleCxpbmRleD4+IHdoaWNoIGNvbnRhaW5zIHVubWVyZ2VkCisJPDxkZWZfaW5kZXhfZW50cnksaW5kZXggZW50cmllcz4+LgorCitbW2RlZl91bnJlYWNoYWJsZV9vYmplY3RdXXVucmVhY2hhYmxlIG9iamVjdDo6CisJQW4gPDxkZWZfb2JqZWN0LG9iamVjdD4+IHdoaWNoIGlzIG5vdCA8PGRlZl9yZWFjaGFibGUscmVhY2hhYmxlPj4gZnJvbSBhCisJPDxkZWZfYnJhbmNoLGJyYW5jaD4+LCA8PGRlZl90YWcsdGFnPj4sIG9yIGFueSBvdGhlciByZWZlcmVuY2UuCisKK1tbZGVmX3Vwc3RyZWFtX2JyYW5jaF1ddXBzdHJlYW0gYnJhbmNoOjoKKwlUaGUgZGVmYXVsdCA8PGRlZl9icmFuY2gsYnJhbmNoPj4gdGhhdCBpcyBtZXJnZWQgaW50byB0aGUgYnJhbmNoIGluCisJcXVlc3Rpb24gKG9yIHRoZSBicmFuY2ggaW4gcXVlc3Rpb24gaXMgcmViYXNlZCBvbnRvKS4gSXQgaXMgY29uZmlndXJlZAorCXZpYSBicmFuY2guPG5hbWU+LnJlbW90ZSBhbmQgYnJhbmNoLjxuYW1lPi5tZXJnZS4gSWYgdGhlIHVwc3RyZWFtIGJyYW5jaAorCW9mICdBJyBpcyAnb3JpZ2luL0InIHNvbWV0aW1lcyB3ZSBzYXkgIidBJyBpcyB0cmFja2luZyAnb3JpZ2luL0InIi4KKworW1tkZWZfd29ya2luZ190cmVlXV13b3JraW5nIHRyZWU6OgorCVRoZSB0cmVlIG9mIGFjdHVhbCBjaGVja2VkIG91dCBmaWxlcy4gIFRoZSB3b3JraW5nIHRyZWUgbm9ybWFsbHkKKwljb250YWlucyB0aGUgY29udGVudHMgb2YgdGhlIDw8ZGVmX0hFQUQsSEVBRD4+IGNvbW1pdCdzIHRyZWUsCisJcGx1cyBhbnkgbG9jYWwgY2hhbmdlcyB0aGF0IHlvdSBoYXZlIG1hZGUgYnV0IG5vdCB5ZXQgY29tbWl0dGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by1pbmRleC5zaCBiL0RvY3VtZW50YXRpb24vaG93dG8taW5kZXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTY3YjM2MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8taW5kZXguc2gKQEAgLTAsMCArMSw1NiBAQAorIyEvYmluL3NoCisKK2NhdCA8PFxFT0YKK0dpdCBIb3d0byBJbmRleAorPT09PT09PT09PT09PT09CisKK0hlcmUgaXMgYSBjb2xsZWN0aW9uIG9mIG1haWxpbmcgbGlzdCBwb3N0aW5ncyBtYWRlIGJ5IHZhcmlvdXMKK3Blb3BsZSBkZXNjcmliaW5nIGhvdyB0aGV5IHVzZSBHaXQgaW4gdGhlaXIgd29ya2Zsb3cuCisKK0VPRgorCitmb3IgdHh0CitkbworCXRpdGxlPSQoZXhwciAiJHR4dCIgOiAnLiovXCguKlwpXC50eHQkJykKKwlmcm9tPSQoc2VkIC1uZSAnCisJL14kL3EKKwkvXkZyb206WyAJXS97CisJCXMvLy8KKwkJcy9eWyAJXSovLworCQlzL1sgCV0qJC8vCisJCXMvXi9ieSAvCisJCXAKKwl9CisJJyAiJHR4dCIpCisKKwlhYnN0cmFjdD0kKHNlZCAtbmUgJworCS9eQWJzdHJhY3Q6WyAJXS97CisJCXMvXlteIAldKi8vCisJCXgKKwkJcy8uKi8vCisJCXgKKwkJOiBhZ2FpbgorCQkvXlsgCV0veworCQkJcy9eWyAJXSovLworCQkJSAorCQkJbgorCQkJYiBhZ2FpbgorCQl9CisJCXgKKwkJcAorCQlxCisJfScgIiR0eHQiKQorCisJaWYgZ3JlcCAnQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jJyA+L2Rldi9udWxsICR0eHQKKwl0aGVuCisJCWZpbGU9JChleHByICIkdHh0IiA6ICdcKC4qXClcLnR4dCQnKS5odG1sCisJZWxzZQorCQlmaWxlPSIkdHh0IgorCWZpCisKKwllY2hvICIqIGxpbms6JGZpbGVbJHRpdGxlXSAkZnJvbQorJGFic3RyYWN0CisKKyIKKworZG9uZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9rZWVwLWNhbm9uaWNhbC1oaXN0b3J5LWNvcnJlY3QudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9rZWVwLWNhbm9uaWNhbC1oaXN0b3J5LWNvcnJlY3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZDQ4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL2tlZXAtY2Fub25pY2FsLWhpc3RvcnktY29ycmVjdC50eHQKQEAgLTAsMCArMSwyMTYgQEAKK0Zyb206IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KK0RhdGU6IFdlZCwgMDcgTWF5IDIwMTQgMTM6MTU6MzkgLTA3MDAKK1N1YmplY3Q6IEJlZ2lubmVyIHF1ZXN0aW9uIG9uICJQdWxsIGlzIG1vc3RseSBldmlsIgorQWJzdHJhY3Q6IFRoaXMgaG93LXRvIGV4cGxhaW5zIGEgbWV0aG9kIGZvciBrZWVwaW5nIGEKKyBwcm9qZWN0J3MgaGlzdG9yeSBjb3JyZWN0IHdoZW4gdXNpbmcgZ2l0IHB1bGwuCitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKKworS2VlcCBhdXRob3JpdGF0aXZlIGNhbm9uaWNhbCBoaXN0b3J5IGNvcnJlY3Qgd2l0aCBnaXQgcHVsbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTb21ldGltZXMgYSBuZXcgcHJvamVjdCBpbnRlZ3JhdG9yIHdpbGwgZW5kIHVwIHdpdGggcHJvamVjdCBoaXN0b3J5Cit0aGF0IGFwcGVhcnMgdG8gYmUgImJhY2t3YXJkcyIgZnJvbSB3aGF0IG90aGVyIHByb2plY3QgZGV2ZWxvcGVycworZXhwZWN0LiBUaGlzIGhvd3RvIHByZXNlbnRzIGEgc3VnZ2VzdGVkIGludGVncmF0aW9uIHdvcmtmbG93IGZvcgorbWFpbnRhaW5pbmcgYSBjZW50cmFsIHJlcG9zaXRvcnkuCisKK1N1cHBvc2UgdGhhdCB0aGF0IGNlbnRyYWwgcmVwb3NpdG9yeSBoYXMgdGhpcyBoaXN0b3J5OgorCistLS0tLS0tLS0tLS0KKyAgICAtLS1vLS0tby0tLUEKKy0tLS0tLS0tLS0tLQorCit3aGljaCBlbmRzIGF0IGNvbW1pdCBgQWAgKHRpbWUgZmxvd3MgZnJvbSBsZWZ0IHRvIHJpZ2h0IGFuZCBlYWNoIG5vZGUKK2luIHRoZSBncmFwaCBpcyBhIGNvbW1pdCwgbGluZXMgYmV0d2VlbiB0aGVtIGluZGljYXRpbmcgcGFyZW50LWNoaWxkCityZWxhdGlvbnNoaXApLgorCitUaGVuIHlvdSBjbG9uZSBpdCBhbmQgd29yayBvbiB5b3VyIG93biBjb21taXRzLCB3aGljaCBsZWFkcyB5b3UgdG8KK2hhdmUgdGhpcyBoaXN0b3J5IGluICp5b3VyKiByZXBvc2l0b3J5OgorCistLS0tLS0tLS0tLS0KKyAgICAtLS1vLS0tby0tLUEtLS1CLS0tQworLS0tLS0tLS0tLS0tCisKK0ltYWdpbmUgeW91ciBjb3dvcmtlciBkaWQgdGhlIHNhbWUgYW5kIGJ1aWx0IG9uIHRvcCBvZiBgQWAgaW4gKmhpcyoKK3JlcG9zaXRvcnkgaW4gdGhlIG1lYW50aW1lLCBhbmQgdGhlbiBwdXNoZWQgaXQgdG8gdGhlCitjZW50cmFsIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLQorICAgIC0tLW8tLS1vLS0tQS0tLVgtLS1ZLS0tWgorLS0tLS0tLS0tLS0tCisKK05vdywgaWYgeW91IGBnaXQgcHVzaGAgYXQgdGhpcyBwb2ludCwgYmVjYXVzZSB5b3VyIGhpc3RvcnkgdGhhdCBsZWFkcwordG8gYENgIGxhY2tzIGBYYCwgYFlgIGFuZCBgWmAsIGl0IHdpbGwgZmFpbC4gIFlvdSBuZWVkIHRvIHNvbWVob3cgbWFrZQordGhlIHRpcCBvZiB5b3VyIGhpc3RvcnkgYSBkZXNjZW5kYW50IG9mIGBaYC4KKworT25lIHN1Z2dlc3RlZCB3YXkgdG8gc29sdmUgdGhlIHByb2JsZW0gaXMgImZldGNoIGFuZCB0aGVuIG1lcmdlIiwgYWthCitgZ2l0IHB1bGxgLiBXaGVuIHlvdSBmZXRjaCwgeW91ciByZXBvc2l0b3J5IHdpbGwgaGF2ZSBhIGhpc3RvcnkgbGlrZQordGhpczoKKworLS0tLS0tLS0tLS0tCisgICAgLS0tby0tLW8tLS1BLS0tQi0tLUMKKwkJXAorCQkgWC0tLVktLS1aCistLS0tLS0tLS0tLS0KKworT25jZSB5b3UgcnVuIG1lcmdlIGFmdGVyIHRoYXQsIHdoaWxlIHN0aWxsIG9uICp5b3VyKiBicmFuY2gsIGkuZS4gYENgLAoreW91IHdpbGwgY3JlYXRlIGEgbWVyZ2UgYE1gIGFuZCBtYWtlIHRoZSBoaXN0b3J5IGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyAgICAtLS1vLS0tby0tLUEtLS1CLS0tQy0tLU0KKwkJXCAgICAgICAgIC8KKwkJIFgtLS1ZLS0tWgorLS0tLS0tLS0tLS0tCisKK2BNYCBpcyBhIGRlc2NlbmRhbnQgb2YgYFpgLCBzbyB5b3UgY2FuIHB1c2ggdG8gdXBkYXRlIHRoZSBjZW50cmFsCityZXBvc2l0b3J5LiAgU3VjaCBhIG1lcmdlIGBNYCBkb2VzIG5vdCBsb3NlIGFueSBjb21taXQgaW4gYm90aAoraGlzdG9yaWVzLCBzbyBpbiB0aGF0IHNlbnNlIGl0IG1heSBub3QgYmUgd3JvbmcsIGJ1dCB3aGVuIHBlb3BsZSB3YW50Cit0byB0YWxrIGFib3V0ICJ0aGUgYXV0aG9yaXRhdGl2ZSBjYW5vbmljYWwgaGlzdG9yeSB0aGF0IGlzIHNoYXJlZAorYW1vbmcgdGhlIHByb2plY3QgcGFydGljaXBhbnRzIiwgaS5lLiAidGhlIHRydW5rIiwgdGhleSBvZnRlbiB2aWV3CitpdCBhcyAiY29tbWl0cyB5b3Ugc2VlIGJ5IGZvbGxvd2luZyB0aGUgZmlyc3QtcGFyZW50IGNoYWluIiwgYW5kIHVzZQordGhpcyBjb21tYW5kIHRvIHZpZXcgaXQ6CisKKy0tLS0tLS0tLS0tLQorICAgICQgZ2l0IGxvZyAtLWZpcnN0LXBhcmVudAorLS0tLS0tLS0tLS0tCisKK0ZvciBhbGwgb3RoZXIgcGVvcGxlIHdobyBvYnNlcnZlZCB0aGUgY2VudHJhbCByZXBvc2l0b3J5IGFmdGVyIHlvdXIKK2Nvd29ya2VyIHB1c2hlZCBgWmAgYnV0IGJlZm9yZSB5b3UgcHVzaGVkIGBNYCwgdGhlIGNvbW1pdCBvbiB0aGUgdHJ1bmsKK3VzZWQgdG8gYmUgYG8tby1BLVgtWS1aYC4gIEJ1dCBiZWNhdXNlIHlvdSBtYWRlIGBNYCB3aGlsZSB5b3Ugd2VyZSBvbgorYENgLCBgTWAncyBmaXJzdCBwYXJlbnQgaXMgYENgLCBzbyBieSBwdXNoaW5nIGBNYCB0byBhZHZhbmNlIHRoZQorY2VudHJhbCByZXBvc2l0b3J5LCB5b3UgbWFkZSBgWC1ZLVpgIGEgc2lkZSBicmFuY2gsIG5vdCBvbiB0aGUgdHJ1bmsuCisKK1lvdSB3b3VsZCByYXRoZXIgd2FudCB0byBoYXZlIGEgaGlzdG9yeSBvZiB0aGlzIHNoYXBlOgorCistLS0tLS0tLS0tLS0KKyAgICAtLS1vLS0tby0tLUEtLS1YLS0tWS0tLVotLS1NJworCQlcICAgICAgICAgICAgIC8KKwkJIEItLS0tLS0tLS0tLUMKKy0tLS0tLS0tLS0tLQorCitzbyB0aGF0IGluIHRoZSBmaXJzdC1wYXJlbnQgY2hhaW4sIGl0IGlzIGNsZWFyIHRoYXQgdGhlIHByb2plY3QgZmlyc3QKK2RpZCBgWGAgYW5kIHRoZW4gYFlgIGFuZCB0aGVuIGBaYCBhbmQgbWVyZ2VkIGEgY2hhbmdlIHRoYXQgY29uc2lzdHMgb2YKK3R3byBjb21taXRzIGBCYCBhbmQgYENgIHRoYXQgYWNoaWV2ZXMgYSBzaW5nbGUgZ29hbC4gIFlvdSBtYXkgaGF2ZQord29ya2VkIG9uIGZpeGluZyB0aGUgYnVnICMxMjM0NSB3aXRoIHRoZXNlIHR3byBwYXRjaGVzLCBhbmQgdGhlIG1lcmdlCitgTSdgIHdpdGggc3dhcHBlZCBwYXJlbnRzIGNhbiBzYXkgaW4gaXRzIGxvZyBtZXNzYWdlICJNZXJnZQorZml4LWJ1Zy0xMjM0NSIuIEhhdmluZyBhIHdheSB0byB0ZWxsIGBnaXQgcHVsbGAgdG8gY3JlYXRlIGEgbWVyZ2UKK2J1dCByZWNvcmQgdGhlIHBhcmVudHMgaW4gcmV2ZXJzZSBvcmRlciBtYXkgYmUgYSB3YXkgdG8gZG8gc28uCisKK05vdGUgdGhhdCBJIHNhaWQgImFjaGlldmVzIGEgc2luZ2xlIGdvYWwiIGFib3ZlLCBiZWNhdXNlIHRoaXMgaXMKK2ltcG9ydGFudC4gICJTd2FwcGluZyB0aGUgbWVyZ2Ugb3JkZXIiIG9ubHkgY292ZXJzIGEgc3BlY2lhbCBjYXNlCit3aGVyZSB0aGUgcHJvamVjdCBkb2VzIG5vdCBjYXJlIHRvbyBtdWNoIGFib3V0IGhhdmluZyB1bnJlbGF0ZWQKK3RoaW5ncyBkb25lIG9uIGEgc2luZ2xlIG1lcmdlIGJ1dCBjYXJlcyBhIGxvdCBhYm91dCBmaXJzdC1wYXJlbnQKK2NoYWluLgorCitUaGVyZSBhcmUgbXVsdGlwbGUgc2Nob29scyBvZiB0aG91Z2h0IGFib3V0IHRoZSAidHJ1bmsiIG1hbmFnZW1lbnQuCisKKyAxLiBTb21lIHByb2plY3RzIHdhbnQgdG8ga2VlcCBhIGNvbXBsZXRlbHkgbGluZWFyIGhpc3Rvcnkgd2l0aG91dCBhbnkKKyAgICBtZXJnZXMuICBPYnZpb3VzbHksIHN3YXBwaW5nIHRoZSBtZXJnZSBvcmRlciB3b3VsZCBub3QgbWF0Y2ggdGhlaXIKKyAgICB0YXN0ZS4gIFlvdSB3b3VsZCBuZWVkIHRvIGZsYXR0ZW4geW91ciBoaXN0b3J5IG9uIHRvcCBvZiB0aGUKKyAgICB1cGRhdGVkIHVwc3RyZWFtIHRvIHJlc3VsdCBpbiBhIGhpc3Rvcnkgb2YgdGhpcyBzaGFwZSBpbnN0ZWFkOgorKworLS0tLS0tLS0tLS0tCisgICAgLS0tby0tLW8tLS1BLS0tWC0tLVktLS1aLS0tQi0tLUMKKy0tLS0tLS0tLS0tLQorKword2l0aCBgZ2l0IHB1bGwgLS1yZWJhc2VgIG9yIHNvbWV0aGluZy4KKworIDIuIFNvbWUgcHJvamVjdHMgdG9sZXJhdGUgbWVyZ2VzIGluIHRoZWlyIGhpc3RvcnksIGJ1dCBkbyBub3Qgd29ycnkKKyAgICB0b28gbXVjaCBhYm91dCB0aGUgZmlyc3QtcGFyZW50IG9yZGVyLCBhbmQgYWxsb3cgZmFzdC1mb3J3YXJkCisgICAgbWVyZ2VzLiAgVG8gdGhlbSwgc3dhcHBpbmcgdGhlIG1lcmdlIG9yZGVyIGRvZXMgbm90IGh1cnQsIGJ1dAorICAgIGl0IGlzIHVubmVjZXNzYXJ5LgorCisgMy4gU29tZSBwcm9qZWN0cyB3YW50IGVhY2ggY29tbWl0IG9uIHRoZSAidHJ1bmsiIHRvIGRvIG9uZSBzaW5nbGUKKyAgICB0aGluZy4gIFRoZSBvdXRwdXQgb2YgYGdpdCBsb2cgLS1maXJzdC1wYXJlbnRgIGluIHN1Y2ggYSBwcm9qZWN0CisgICAgd291bGQgc2hvdyBlaXRoZXIgYSBtZXJnZSBvZiBhIHNpZGUgYnJhbmNoIHRoYXQgY29tcGxldGVzIGEgc2luZ2xlCisgICAgdGhlbWUsIG9yIGEgc2luZ2xlIGNvbW1pdCB0aGF0IGNvbXBsZXRlcyBhIHNpbmdsZSB0aGVtZSBieSBpdHNlbGYuCisgICAgSWYgeW91ciB0d28gY29tbWl0cyBgQmAgYW5kIGBDYCAob3IgdGhleSBtYXkgZXZlbiBiZSB0d28gZ3JvdXBzIG9mCisgICAgY29tbWl0cykgd2VyZSBzb2x2aW5nIHR3byBpbmRlcGVuZGVudCBpc3N1ZXMsIHRoZW4gdGhlIG1lcmdlIGBNJ2AKKyAgICB3ZSBtYWRlIGluIHRoZSBlYXJsaWVyIGV4YW1wbGUgYnkgc3dhcHBpbmcgdGhlIG1lcmdlIG9yZGVyIGlzCisgICAgc3RpbGwgbm90IHVwIHRvIHRoZSBwcm9qZWN0IHN0YW5kYXJkLiAgSXQgbWVyZ2VzIHR3byB1bnJlbGF0ZWQKKyAgICBlZmZvcnRzIGBCYCBhbmQgYENgIGF0IHRoZSBzYW1lIHRpbWUuCisKK0ZvciBwcm9qZWN0cyBpbiB0aGUgbGFzdCBjYXRlZ29yeSAoR2l0IGl0c2VsZiBpcyBvbmUgb2YgdGhlbSksCitpbmRpdmlkdWFsIGRldmVsb3BlcnMgd291bGQgd2FudCB0byBwcmVwYXJlIGEgaGlzdG9yeSBtb3JlIGxpa2UKK3RoaXM6CisKKy0tLS0tLS0tLS0tLQorCQkgQzAtLUMxLS1DMiAgICAgdG9waWMtYworCQkvCisgICAgLS0tby0tLW8tLS1BICAgICAgICAgICAgICAgIG1hc3RlcgorCQlcCisJCSBCMC0tQjEtLUIyICAgICB0b3BpYy1iCistLS0tLS0tLS0tLS0KKworVGhhdCBpcywga2VlcGluZyBzZXBhcmF0ZSB0b3BpY3Mgb24gc2VwYXJhdGUgYnJhbmNoZXMsIHBlcmhhcHMgbGlrZQorc286CisKKy0tLS0tLS0tLS0tLQorICAgICQgZ2l0IGNsb25lICRVUkwgd29yayAmJiBjZCB3b3JrCisgICAgJCBnaXQgY2hlY2tvdXQgLWIgdG9waWMtYiBtYXN0ZXIKKyAgICAkIC4uLiB3b3JrIHRvIGNyZWF0ZSBCMCwgQjEgYW5kIEIyIHRvIGNvbXBsZXRlIG9uZSB0aGVtZQorICAgICQgZ2l0IGNoZWNrb3V0IC1iIHRvcGljLWMgbWFzdGVyCisgICAgJCAuLi4gc2FtZSBmb3IgdGhlIHRoZW1lIG9mIHRvcGljLWMKKy0tLS0tLS0tLS0tLQorCitBbmQgdGhlbgorCistLS0tLS0tLS0tLS0KKyAgICAkIGdpdCBjaGVja291dCBtYXN0ZXIKKyAgICAkIGdpdCBwdWxsIC0tZmYtb25seQorLS0tLS0tLS0tLS0tCisKK3dvdWxkIGdyYWIgYFhgLCBgWWAgYW5kIGBaYCBmcm9tIHRoZSB1cHN0cmVhbSBhbmQgYWR2YW5jZSB5b3VyIG1hc3RlcgorYnJhbmNoOgorCistLS0tLS0tLS0tLS0KKwkJIEMwLS1DMS0tQzIgICAgIHRvcGljLWMKKwkJLworICAgIC0tLW8tLS1vLS0tQS0tLVgtLS1ZLS0tWiAgICBtYXN0ZXIKKwkJXAorCQkgQjAtLUIxLS1CMiAgICAgdG9waWMtYgorLS0tLS0tLS0tLS0tCisKK0FuZCB0aGVuIHlvdSB3b3VsZCBtZXJnZSB0aGVzZSB0d28gYnJhbmNoZXMgc2VwYXJhdGVseToKKworLS0tLS0tLS0tLS0tCisgICAgJCBnaXQgbWVyZ2UgdG9waWMtYgorICAgICQgZ2l0IG1lcmdlIHRvcGljLWMKKy0tLS0tLS0tLS0tLQorCit0byByZXN1bHQgaW4KKworLS0tLS0tLS0tLS0tCisJCSBDMC0tQzEtLS0tLS0tLS1DMgorCQkvICAgICAgICAgICAgICAgICBcCisgICAgLS0tby0tLW8tLS1BLS0tWC0tLVktLS1aLS0tTS0tLU4KKwkJXCAgICAgICAgICAgICAvCisJCSBCMC0tQjEtLS0tLUIyCistLS0tLS0tLS0tLS0KKworYW5kIHB1c2ggaXQgYmFjayB0byB0aGUgY2VudHJhbCByZXBvc2l0b3J5LgorCitJdCBpcyB2ZXJ5IG11Y2ggcG9zc2libGUgdGhhdCB3aGlsZSB5b3UgYXJlIG1lcmdpbmcgdG9waWMtYiBhbmQKK3RvcGljLWMsIHNvbWVib2R5IGFnYWluIGFkdmFuY2VkIHRoZSBoaXN0b3J5IGluIHRoZSBjZW50cmFsIHJlcG9zaXRvcnkKK3RvIHB1dCBgV2Agb24gdG9wIG9mIGBaYCwgYW5kIG1ha2UgeW91ciBgZ2l0IHB1c2hgIGZhaWwuCisKK0luIHN1Y2ggYSBjYXNlLCB5b3Ugd291bGQgcmV3aW5kIHRvIGRpc2NhcmQgYE1gIGFuZCBgTmAsIHVwZGF0ZSB0aGUKK3RpcCBvZiB5b3VyICdtYXN0ZXInIGFnYWluIGFuZCByZWRvIHRoZSB0d28gbWVyZ2VzOgorCistLS0tLS0tLS0tLS0KKyAgICAkIGdpdCByZXNldCAtLWhhcmQgb3JpZ2luL21hc3RlcgorICAgICQgZ2l0IHB1bGwgLS1mZi1vbmx5CisgICAgJCBnaXQgbWVyZ2UgdG9waWMtYgorICAgICQgZ2l0IG1lcmdlIHRvcGljLWMKKy0tLS0tLS0tLS0tLQorCitUaGUgcHJvY2VkdXJlIHdpbGwgcmVzdWx0IGluIGEgaGlzdG9yeSB0aGF0IGxvb2tzIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCisJCSBDMC0tQzEtLS0tLS0tLS0tLS0tLUMyCisJCS8gICAgICAgICAgICAgICAgICAgICBcCisgICAgLS0tby0tLW8tLS1BLS0tWC0tLVktLS1aLS0tVy0tLU0nLS1OJworCQlcICAgICAgICAgICAgICAgICAvCisJCSBCMC0tQjEtLS0tLS0tLS1CMgorLS0tLS0tLS0tLS0tCisKK1NlZSBhbHNvIGh0dHA6Ly9naXQtYmxhbWUuYmxvZ3Nwb3QuY29tLzIwMTMvMDkvZnVuLXdpdGgtZmlyc3QtcGFyZW50LWhpc3RvcnkuaHRtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9tYWludGFpbi1naXQudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9tYWludGFpbi1naXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYmU4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL21haW50YWluLWdpdC50eHQKQEAgLTAsMCArMSw0NzUgQEAKK0Zyb206IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KK0RhdGU6IFdlZCwgMjEgTm92IDIwMDcgMTY6MzI6NTUgLTA4MDAKK1N1YmplY3Q6IEFkZGVuZHVtIHRvICJNYWludE5vdGVzIgorQWJzdHJhY3Q6IEltYWdpbmUgdGhhdCBHaXQgZGV2ZWxvcG1lbnQgaXMgcmFjaW5nIGFsb25nIGFzIHVzdWFsLCB3aGVuIG91ciBmcmllbmRseQorIG5laWdoYm9yaG9vZCBtYWludGFpbmVyIGlzIHN0cnVjayBkb3duIGJ5IGEgd2F5d2FyZCBidXMuIE91dCBvZiB0aGUKKyBob3JkZXMgb2Ygc3Vja2VycyAobG95YWwgZGV2ZWxvcGVycyksIHlvdSBoYXZlIGJlZW4gdHJpY2tlZCAoY2hvc2VuKSB0bworIHN0ZXAgdXAgYXMgdGhlIG5ldyBtYWludGFpbmVyLiBUaGlzIGhvd3RvIHdpbGwgc2hvdyB5b3UgImhvdyB0byIgZG8gaXQuCitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKKworSG93IHRvIG1haW50YWluIEdpdAorPT09PT09PT09PT09PT09PT09PQorCitBY3Rpdml0aWVzCistLS0tLS0tLS0tCisKK1RoZSBtYWludGFpbmVyJ3MgR2l0IHRpbWUgaXMgc3BlbnQgb24gdGhyZWUgYWN0aXZpdGllcy4KKworIC0gQ29tbXVuaWNhdGlvbiAoNDUlKQorCisgICBNYWlsaW5nIGxpc3QgZGlzY3Vzc2lvbnMgb24gZ2VuZXJhbCBkZXNpZ24sIGZpZWxkaW5nIHVzZXIKKyAgIHF1ZXN0aW9ucywgZGlhZ25vc2luZyBidWcgcmVwb3J0czsgcmV2aWV3aW5nLCBjb21tZW50aW5nIG9uLAorICAgc3VnZ2VzdGluZyBhbHRlcm5hdGl2ZXMgdG8sIGFuZCByZWplY3RpbmcgcGF0Y2hlcy4KKworIC0gSW50ZWdyYXRpb24gKDUwJSkKKworICAgQXBwbHlpbmcgbmV3IHBhdGNoZXMgZnJvbSB0aGUgY29udHJpYnV0b3JzIHdoaWxlIHNwb3R0aW5nIGFuZAorICAgY29ycmVjdGluZyBtaW5vciBtaXN0YWtlcywgc2h1ZmZsaW5nIHRoZSBpbnRlZ3JhdGlvbiBhbmQKKyAgIHRlc3RpbmcgYnJhbmNoZXMsIHB1c2hpbmcgdGhlIHJlc3VsdHMgb3V0LCBjdXR0aW5nIHRoZQorICAgcmVsZWFzZXMsIGFuZCBtYWtpbmcgYW5ub3VuY2VtZW50cy4KKworIC0gT3duIGRldmVsb3BtZW50ICg1JSkKKworICAgU2NyYXRjaGluZyBteSBvd24gaXRjaCBhbmQgc2VuZGluZyBwcm9wb3NlZCBwYXRjaCBzZXJpZXMgb3V0LgorCitUaGUgUG9saWN5CistLS0tLS0tLS0tCisKK1RoZSBwb2xpY3kgb24gSW50ZWdyYXRpb24gaXMgaW5mb3JtYWxseSBtZW50aW9uZWQgaW4gIkEgTm90ZQorZnJvbSB0aGUgbWFpbnRhaW5lciIgbWVzc2FnZSwgd2hpY2ggaXMgcGVyaW9kaWNhbGx5IHBvc3RlZCB0bwordGhpcyBtYWlsaW5nIGxpc3QgYWZ0ZXIgZWFjaCBmZWF0dXJlIHJlbGVhc2UgaXMgbWFkZS4KKworIC0gRmVhdHVyZSByZWxlYXNlcyBhcmUgbnVtYmVyZWQgYXMgdlguWS4wIGFuZCBhcmUgbWVhbnQgdG8KKyAgIGNvbnRhaW4gYnVnZml4ZXMgYW5kIGVuaGFuY2VtZW50cyBpbiBhbnkgYXJlYSwgaW5jbHVkaW5nCisgICBmdW5jdGlvbmFsaXR5LCBwZXJmb3JtYW5jZSBhbmQgdXNhYmlsaXR5LCB3aXRob3V0IHJlZ3Jlc3Npb24uCisKKyAtIE9uZSByZWxlYXNlIGN5Y2xlIGZvciBhIGZlYXR1cmUgcmVsZWFzZSBpcyBleHBlY3RlZCB0byBsYXN0IGZvcgorICAgZWlnaHQgdG8gdGVuIHdlZWtzLgorCisgLSBNYWludGVuYW5jZSByZWxlYXNlcyBhcmUgbnVtYmVyZWQgYXMgdlguWS5aIGFuZCBhcmUgbWVhbnQKKyAgIHRvIGNvbnRhaW4gb25seSBidWdmaXhlcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdlguWS4wIGZlYXR1cmUKKyAgIHJlbGVhc2UgYW5kIGVhcmxpZXIgbWFpbnRlbmFuY2UgcmVsZWFzZXMgdlguWS5XIChXIDwgWikuCisKKyAtICdtYXN0ZXInIGJyYW5jaCBpcyB1c2VkIHRvIHByZXBhcmUgZm9yIHRoZSBuZXh0IGZlYXR1cmUKKyAgIHJlbGVhc2UuIEluIG90aGVyIHdvcmRzLCBhdCBzb21lIHBvaW50LCB0aGUgdGlwIG9mICdtYXN0ZXInCisgICBicmFuY2ggaXMgdGFnZ2VkIHdpdGggdlguWS4wLgorCisgLSAnbWFpbnQnIGJyYW5jaCBpcyB1c2VkIHRvIHByZXBhcmUgZm9yIHRoZSBuZXh0IG1haW50ZW5hbmNlCisgICByZWxlYXNlLiAgQWZ0ZXIgdGhlIGZlYXR1cmUgcmVsZWFzZSB2WC5ZLjAgaXMgbWFkZSwgdGhlIHRpcAorICAgb2YgJ21haW50JyBicmFuY2ggaXMgc2V0IHRvIHRoYXQgcmVsZWFzZSwgYW5kIGJ1Z2ZpeGVzIHdpbGwKKyAgIGFjY3VtdWxhdGUgb24gdGhlIGJyYW5jaCwgYW5kIGF0IHNvbWUgcG9pbnQsIHRoZSB0aXAgb2YgdGhlCisgICBicmFuY2ggaXMgdGFnZ2VkIHdpdGggdlguWS4xLCB2WC5ZLjIsIGFuZCBzbyBvbi4KKworIC0gJ25leHQnIGJyYW5jaCBpcyB1c2VkIHRvIHB1Ymxpc2ggY2hhbmdlcyAoYm90aCBlbmhhbmNlbWVudHMKKyAgIGFuZCBmaXhlcykgdGhhdCAoMSkgaGF2ZSB3b3J0aHdoaWxlIGdvYWwsICgyKSBhcmUgaW4gYSBmYWlybHkKKyAgIGdvb2Qgc2hhcGUgc3VpdGFibGUgZm9yIGV2ZXJ5ZGF5IHVzZSwgKDMpIGJ1dCBoYXZlIG5vdCB5ZXQKKyAgIGRlbW9uc3RyYXRlZCB0byBiZSByZWdyZXNzaW9uIGZyZWUuICBOZXcgY2hhbmdlcyBhcmUgdGVzdGVkCisgICBpbiAnbmV4dCcgYmVmb3JlIG1lcmdlZCB0byAnbWFzdGVyJy4KKworIC0gJ3B1JyBicmFuY2ggaXMgdXNlZCB0byBwdWJsaXNoIG90aGVyIHByb3Bvc2VkIGNoYW5nZXMgdGhhdCBkbworICAgbm90IHlldCBwYXNzIHRoZSBjcml0ZXJpYSBzZXQgZm9yICduZXh0Jy4KKworIC0gVGhlIHRpcHMgb2YgJ21hc3RlcicgYW5kICdtYWludCcgYnJhbmNoZXMgd2lsbCBub3QgYmUgcmV3b3VuZCB0bworICAgYWxsb3cgcGVvcGxlIHRvIGJ1aWxkIHRoZWlyIG93biBjdXN0b21pemF0aW9uIG9uIHRvcCBvZiB0aGVtLgorICAgRWFybHkgaW4gYSBuZXcgZGV2ZWxvcG1lbnQgY3ljbGUsICduZXh0JyBpcyByZXdvdW5kIHRvIHRoZSB0aXAgb2YKKyAgICdtYXN0ZXInIG9uY2UsIGJ1dCBvdGhlcndpc2UgaXQgd2lsbCBub3QgYmUgcmV3b3VuZCB1bnRpbCB0aGUgZW5kCisgICBvZiB0aGUgY3ljbGUuCisKKyAtIFVzdWFsbHkgJ21hc3RlcicgY29udGFpbnMgYWxsIG9mICdtYWludCcgYW5kICduZXh0JyBjb250YWlucyBhbGwKKyAgIG9mICdtYXN0ZXInLiAgJ3B1JyBjb250YWlucyBhbGwgdGhlIHRvcGljcyBtZXJnZWQgdG8gJ25leHQnLCBidXQKKyAgIGlzIHJlYnVpbHQgZGlyZWN0bHkgb24gJ21hc3RlcicuCisKKyAtIFRoZSB0aXAgb2YgJ21hc3RlcicgaXMgbWVhbnQgdG8gYmUgbW9yZSBzdGFibGUgdGhhbiBhbnkKKyAgIHRhZ2dlZCByZWxlYXNlcywgYW5kIHRoZSB1c2VycyBhcmUgZW5jb3VyYWdlZCB0byBmb2xsb3cgaXQuCisKKyAtIFRoZSAnbmV4dCcgYnJhbmNoIGlzIHdoZXJlIG5ldyBhY3Rpb24gdGFrZXMgcGxhY2UsIGFuZCB0aGUKKyAgIHVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHRlc3QgaXQgc28gdGhhdCByZWdyZXNzaW9ucyBhbmQgYnVncworICAgYXJlIGZvdW5kIGJlZm9yZSBuZXcgdG9waWNzIGFyZSBtZXJnZWQgdG8gJ21hc3RlcicuCisKK05vdGUgdGhhdCBiZWZvcmUgdjEuOS4wIHJlbGVhc2UsIHRoZSB2ZXJzaW9uIG51bWJlcnMgdXNlZCB0byBiZQorc3RydWN0dXJlZCBzbGlnaHRseSBkaWZmZXJlbnRseS4gIHZYLlkuWiB3ZXJlIGZlYXR1cmUgcmVsZWFzZXMgd2hpbGUKK3ZYLlkuWi5XIHdlcmUgbWFpbnRlbmFuY2UgcmVsZWFzZXMgZm9yIHZYLlkuWi4KKworCitBIFR5cGljYWwgR2l0IERheQorLS0tLS0tLS0tLS0tLS0tLS0KKworQSB0eXBpY2FsIEdpdCBkYXkgZm9yIHRoZSBtYWludGFpbmVyIGltcGxlbWVudHMgdGhlIGFib3ZlIHBvbGljeQorYnkgZG9pbmcgdGhlIGZvbGxvd2luZzoKKworIC0gU2NhbiBtYWlsaW5nIGxpc3QuICBSZXNwb25kIHdpdGggcmV2aWV3IGNvbW1lbnRzLCBzdWdnZXN0aW9ucworICAgZXRjLiAgS2liaXR6LiAgQ29sbGVjdCBwb3RlbnRpYWxseSB1c2FibGUgcGF0Y2hlcyBmcm9tIHRoZQorICAgbWFpbGluZyBsaXN0LiAgUGF0Y2hlcyBhYm91dCBhIHNpbmdsZSB0b3BpYyBnbyB0byBvbmUgbWFpbGJveCAoSQorICAgcmVhZCBteSBtYWlsIGluIEdudXMsIGFuZCB0eXBlIFxDLW8gdG8gc2F2ZS9hcHBlbmQgbWVzc2FnZXMgaW4KKyAgIGZpbGVzIGluIG1ib3ggZm9ybWF0KS4KKworIC0gV3JpdGUgaGlzIG93biBwYXRjaGVzIHRvIGFkZHJlc3MgaXNzdWVzIHJhaXNlZCBvbiB0aGUgbGlzdCBidXQKKyAgIG5vYm9keSBoYXMgc3RlcHBlZCB1cCBzb2x2aW5nLiAgU2VuZCBpdCBvdXQganVzdCBsaWtlIG90aGVyCisgICBjb250cmlidXRvcnMgZG8sIGFuZCBwaWNrIHRoZW0gdXAganVzdCBsaWtlIHBhdGNoZXMgZnJvbSBvdGhlcgorICAgY29udHJpYnV0b3JzIChzZWUgYWJvdmUpLgorCisgLSBSZXZpZXcgdGhlIHBhdGNoZXMgaW4gdGhlIHNhdmVkIG1haWxib3hlcy4gIEVkaXQgcHJvcG9zZWQgbG9nCisgICBtZXNzYWdlIGZvciB0eXBvZml4ZXMgYW5kIGNsYXJpZmljYXRpb25zLCBhbmQgYWRkIEFja3MKKyAgIGNvbGxlY3RlZCBmcm9tIHRoZSBsaXN0LiAgRWRpdCBwYXRjaCB0byBpbmNvcnBvcmF0ZSAiT29wcywKKyAgIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBsaWtlIHRoaXMiIGZpeGVzIGZyb20gdGhlIGRpc2N1c3Npb24uCisKKyAtIENsYXNzaWZ5IHRoZSBjb2xsZWN0ZWQgcGF0Y2hlcyBhbmQgaGFuZGxlICdtYXN0ZXInIGFuZAorICAgJ21haW50JyB1cGRhdGVzOgorCisgICAtIE9idmlvdXNseSBjb3JyZWN0IGZpeGVzIHRoYXQgcGVydGFpbiB0byB0aGUgdGlwIG9mICdtYWludCcKKyAgICAgYXJlIGRpcmVjdGx5IGFwcGxpZWQgdG8gJ21haW50Jy4KKworICAgLSBPYnZpb3VzbHkgY29ycmVjdCBmaXhlcyB0aGF0IHBlcnRhaW4gdG8gdGhlIHRpcCBvZiAnbWFzdGVyJworICAgICBhcmUgZGlyZWN0bHkgYXBwbGllZCB0byAnbWFzdGVyJy4KKworICAgLSBPdGhlciB0b3BpY3MgYXJlIG5vdCBoYW5kbGVkIGluIHRoaXMgc3RlcC4KKworICAgVGhpcyBzdGVwIGlzIGRvbmUgd2l0aCAiZ2l0IGFtIi4KKworICAgICAkIGdpdCBjaGVja291dCBtYXN0ZXIgICAgOyMgb3IgImdpdCBjaGVja291dCBtYWludCIKKyAgICAgJCBnaXQgYW0gLXNjMyBtYWlsYm94CisgICAgICQgbWFrZSB0ZXN0CisKKyAgIEluIHByYWN0aWNlLCBhbG1vc3Qgbm8gcGF0Y2ggZGlyZWN0bHkgZ29lcyB0byAnbWFzdGVyJyBvcgorICAgJ21haW50Jy4KKworIC0gUmV2aWV3IHRoZSBsYXN0IGlzc3VlIG9mICJXaGF0J3MgY29va2luZyIgbWVzc2FnZSwgcmV2aWV3IHRoZQorICAgdG9waWNzIHJlYWR5IGZvciBtZXJnaW5nICh0b3BpYy0+bWFzdGVyIGFuZCB0b3BpYy0+bWFpbnQpLiAgVXNlCisgICAiTWV0YS9jb29rIC13IiBzY3JpcHQgKHdoZXJlIE1ldGEvIGNvbnRhaW5zIGEgY2hlY2tvdXQgb2YgdGhlCisgICAndG9kbycgYnJhbmNoKSB0byBhaWQgdGhpcyBzdGVwLgorCisgICBBbmQgcGVyZm9ybSB0aGUgbWVyZ2UuICBVc2UgIk1ldGEvUmVpbnRlZ3JhdGUgLWUiIHNjcmlwdCAoc2VlCisgICBsYXRlcikgdG8gYWlkIHRoaXMgc3RlcC4KKworICAgICAkIE1ldGEvY29vayAtdyBsYXN0LWlzc3VlLW9mLXdoYXRzLWNvb2tpbmcubWJveAorCisgICAgICQgZ2l0IGNoZWNrb3V0IG1hc3RlciAgICA7IyBvciAiZ2l0IGNoZWNrb3V0IG1haW50IgorICAgICAkIGVjaG8gYWkvdG9waWMgfCBNZXRhL1JlaW50ZWdyYXRlIC1lIDsjICJnaXQgbWVyZ2UgYWkvdG9waWMiCisgICAgICQgZ2l0IGxvZyAtcCBPUklHX0hFQUQuLiA7IyBmaW5hbCByZXZpZXcKKyAgICAgJCBnaXQgZGlmZiBPUklHX0hFQUQuLiAgIDsjIGZpbmFsIHJldmlldworICAgICAkIG1ha2UgdGVzdCAgICAgICAgICAgICAgOyMgZmluYWwgcmV2aWV3CisKKyAtIEhhbmRsZSB0aGUgcmVtYWluaW5nIHBhdGNoZXM6CisKKyAgIC0gQW55dGhpbmcgdW5vYnZpb3VzIHRoYXQgaXMgYXBwbGljYWJsZSB0byAnbWFzdGVyJyAoaW4gb3RoZXIKKyAgICAgd29yZHMsIGRvZXMgbm90IGRlcGVuZCBvbiBhbnl0aGluZyB0aGF0IGlzIHN0aWxsIGluICduZXh0JworICAgICBhbmQgbm90IGluICdtYXN0ZXInKSBpcyBhcHBsaWVkIHRvIGEgbmV3IHRvcGljIGJyYW5jaCB0aGF0CisgICAgIGlzIGZvcmtlZCBmcm9tIHRoZSB0aXAgb2YgJ21hc3RlcicgKG9yIHRoZSBsYXN0IGZlYXR1cmUgcmVsZWFzZSwKKyAgICAgd2hpY2ggaXMgYSBiaXQgb2xkZXIgdGhhbiAnbWFzdGVyJykuICBUaGlzIGluY2x1ZGVzIGJvdGgKKyAgICAgZW5oYW5jZW1lbnRzIGFuZCB1bm9idmlvdXMgZml4ZXMgdG8gJ21hc3RlcicuICBBIHRvcGljCisgICAgIGJyYW5jaCBpcyBuYW1lZCBhcyBhaS90b3BpYyB3aGVyZSAiYWkiIGlzIHR3by1sZXR0ZXIgc3RyaW5nCisgICAgIG5hbWVkIGFmdGVyIGF1dGhvcidzIGluaXRpYWwgYW5kICJ0b3BpYyIgaXMgYSBkZXNjcmlwdGl2ZSBuYW1lCisgICAgIG9mIHRoZSB0b3BpYyAoaW4gb3RoZXIgd29yZHMsICJ3aGF0J3MgdGhlIHNlcmllcyBpcyBhYm91dCIpLgorCisgICAtIEFuIHVub2J2aW91cyBmaXggbWVhbnQgZm9yICdtYWludCcgaXMgYXBwbGllZCB0byBhIG5ldworICAgICB0b3BpYyBicmFuY2ggdGhhdCBpcyBmb3JrZWQgZnJvbSB0aGUgdGlwIG9mICdtYWludCcgKG9yIHRoZQorICAgICBvbGRlc3QgYW5kIHN0aWxsIHJlbGV2YW50IG1haW50ZW5hbmNlIGJyYW5jaCkuICBUaGUKKyAgICAgdG9waWMgbWF5IGJlIG5hbWVkIGFzIGFpL21haW50LXRvcGljLgorCisgICAtIENoYW5nZXMgdGhhdCBwZXJ0YWluIHRvIGFuIGV4aXN0aW5nIHRvcGljIGFyZSBhcHBsaWVkIHRvCisgICAgIHRoZSBicmFuY2gsIGJ1dDoKKworICAgICAtIG9idmlvdXNseSBjb3JyZWN0IG9uZXMgYXJlIGFwcGxpZWQgZmlyc3Q7CisKKyAgICAgLSBxdWVzdGlvbmFibGUgb25lcyBhcmUgZGlzY2FyZGVkIG9yIGFwcGxpZWQgdG8gbmVhciB0aGUgdGlwOworCisgICAtIFJlcGxhY2VtZW50IHBhdGNoZXMgdG8gYW4gZXhpc3RpbmcgdG9waWMgYXJlIGFjY2VwdGVkIG9ubHkKKyAgICAgZm9yIGNvbW1pdHMgbm90IGluICduZXh0Jy4KKworICAgVGhlIGluaXRpYWwgcm91bmQgaXMgZG9uZSB3aXRoOgorCisgICAgICQgZ2l0IGNoZWNrb3V0IGFpL3RvcGljIDsjIG9yICJnaXQgY2hlY2tvdXQgLWIgYWkvdG9waWMgbWFzdGVyIgorICAgICAkIGdpdCBhbSAtc2MzIG1haWxib3gKKworICAgYW5kIHJlcGxhY2luZyBhbiBleGlzdGluZyB0b3BpYyB3aXRoIHN1YnNlcXVlbnQgcm91bmQgaXMgZG9uZSB3aXRoOgorCisgICAgICQgZ2l0IGNoZWNrb3V0IG1hc3Rlci4uLmFpL3RvcGljIDsjIHRyeSB0byByZWFwcGx5IHRvIHRoZSBzYW1lIGJhc2UKKyAgICAgJCBnaXQgYW0gLXNjMyBtYWlsYm94CisKKyAgIHRvIHByZXBhcmUgdGhlIG5ldyByb3VuZCBvbiBhIGRldGFjaGVkIEhFQUQsIGFuZCB0aGVuCisKKyAgICAgJCBnaXQgcmFuZ2UtZGlmZiBAey0xfS4uLgorICAgICAkIGdpdCBkaWZmIEB7LTF9CisKKyAgIHRvIGRvdWJsZSBjaGVjayB3aGF0IGNoYW5nZWQgc2luY2UgdGhlIGxhc3Qgcm91bmQsIGFuZCBmaW5hbGx5CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgLUIgQHstMX0KKworICAgdG8gY29uY2x1ZGUgKHRoZSBsYXN0IHN0ZXAgaXMgd2h5IGEgdG9waWMgYWxyZWFkeSBpbiAnbmV4dCcgaXMKKyAgIG5vdCByZXBsYWNlZCBidXQgdXBkYXRlZCBpbmNyZW1lbnRhbGx5KS4KKworICAgV2hldGhlciBpdCBpcyB0aGUgaW5pdGlhbCByb3VuZCBvciBhIHN1YnNlcXVlbnQgcm91bmQsIHRoZSB0b3BpYworICAgbWF5IG5vdCBidWlsZCBldmVuIGluIGlzb2xhdGlvbiwgb3IgbWF5IGJyZWFrIHRoZSBidWlsZCB3aGVuCisgICBtZXJnZWQgdG8gaW50ZWdyYXRpb24gYnJhbmNoZXMgZHVlIHRvIGJ1Z3MuICBUaGVyZSBtYXkgYWxyZWFkeQorICAgYmUgb2J2aW91cyBhbmQgdHJpdmlhbCBpbXByb3ZlbWVudHMgc3VnZ2VzdGVkIG9uIHRoZSBsaXN0LiAgVGhlCisgICBtYWludGFpbmVyIG9mdGVuIGFkZHMgYW4gZXh0cmEgY29tbWl0LCB3aXRoICJTUVVBU0g/Pz8iIGluIGl0cworICAgdGl0bGUsIHRvIGZpeCB0aGluZ3MgdXAsIGJlZm9yZSBwdWJsaXNoaW5nIHRoZSBpbnRlZ3JhdGlvbgorICAgYnJhbmNoZXMgdG8gbWFrZSBpdCB1c2FibGUgYnkgb3RoZXIgZGV2ZWxvcGVycyBmb3IgdGVzdGluZy4KKyAgIFRoZXNlIGNoYW5nZXMgYXJlIHdoYXQgdGhlIG1haW50YWluZXIgaXMgbm90IDEwMCUgY29tbWl0dGVkIHRvCisgICAodHJpdmlhbCB0eXBvZml4ZXMgZXRjLiBhcmUgb2Z0ZW4gc3F1YXNoZWQgZGlyZWN0bHkgaW50byB0aGUKKyAgIHBhdGNoZXMgdGhhdCBuZWVkIGZpeGluZywgd2l0aG91dCBiZWluZyBhcHBsaWVkIGFzIGEgc2VwYXJhdGUKKyAgICJTUVVBU0g/Pz8iIGNvbW1pdCksIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVtb3ZlZCBlYXNpbHkgYXMgbmVlZGVkLgorCisKKyAtIE1lcmdlIG1haW50IHRvIG1hc3RlciBhcyBuZWVkZWQ6CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgbWFzdGVyCisgICAgICQgZ2l0IG1lcmdlIG1haW50CisgICAgICQgbWFrZSB0ZXN0CisKKyAtIE1lcmdlIG1hc3RlciB0byBuZXh0IGFzIG5lZWRlZDoKKworICAgICAkIGdpdCBjaGVja291dCBuZXh0CisgICAgICQgZ2l0IG1lcmdlIG1hc3RlcgorICAgICAkIG1ha2UgdGVzdAorCisgLSBSZXZpZXcgdGhlIGxhc3QgaXNzdWUgb2YgIldoYXQncyBjb29raW5nIiBhZ2FpbiBhbmQgc2VlIGlmIHRvcGljcworICAgdGhhdCBhcmUgcmVhZHkgdG8gYmUgbWVyZ2VkIHRvICduZXh0JyBhcmUgc3RpbGwgaW4gZ29vZCBzaGFwZQorICAgKGUuZy4gaGFzIHRoZXJlIGFueSBuZXcgaXNzdWUgaWRlbnRpZmllZCBvbiB0aGUgbGlzdCB3aXRoIHRoZQorICAgc2VyaWVzPykKKworIC0gUHJlcGFyZSAnamNoJyBicmFuY2gsIHdoaWNoIGlzIHVzZWQgdG8gcmVwcmVzZW50IHNvbWV3aGVyZQorICAgYmV0d2VlbiAnbWFzdGVyJyBhbmQgJ3B1JyBhbmQgb2Z0ZW4gaXMgc2xpZ2h0bHkgYWhlYWQgb2YgJ25leHQnLgorCisgICAgICQgTWV0YS9SZWludGVncmF0ZSBtYXN0ZXIuLnB1ID5NZXRhL3JlZG8tamNoLnNoCisKKyAgIFRoZSByZXN1bHQgaXMgYSBzY3JpcHQgdGhhdCBsaXN0cyB0b3BpY3MgdG8gYmUgbWVyZ2VkIGluIG9yZGVyIHRvCisgICByZWJ1aWxkICdwdScgYXMgdGhlIGlucHV0IHRvIE1ldGEvUmVpbnRlZ3JhdGUgc2NyaXB0LiAgUmVtb3ZlCisgICBsYXRlciB0b3BpY3MgdGhhdCBzaG91bGQgbm90IGJlIGluICdqY2gnIHlldC4gIEFkZCBhIGxpbmUgdGhhdAorICAgY29uc2lzdHMgb2YgJyMjIyBtYXRjaCBuZXh0JyBiZWZvcmUgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IHRvcGljCisgICBpbiB0aGUgb3V0cHV0IHRoYXQgc2hvdWxkIGJlIGluICdqY2gnIGJ1dCBub3QgaW4gJ25leHQnIHlldC4KKworIC0gTm93IHdlIGFyZSByZWFkeSB0byBzdGFydCBtZXJnaW5nIHRvcGljcyB0byAnbmV4dCcuICBGb3IgZWFjaAorICAgYnJhbmNoIHdob3NlIHRpcCBpcyBub3QgbWVyZ2VkIHRvICduZXh0Jywgb25lIG9mIHRocmVlIHRoaW5ncyBjYW4KKyAgIGhhcHBlbjoKKworICAgLSBUaGUgY29tbWl0cyBhcmUgYWxsIG5leHQtd29ydGh5OyBtZXJnZSB0aGUgdG9waWMgdG8gbmV4dDsKKyAgIC0gVGhlIG5ldyBwYXJ0cyBhcmUgb2YgbWl4ZWQgcXVhbGl0eSwgYnV0IGVhcmxpZXIgb25lcyBhcmUKKyAgICAgbmV4dC13b3J0aHk7IG1lcmdlIHRoZSBlYXJseSBwYXJ0cyB0byBuZXh0OworICAgLSBOb3RoaW5nIGlzIG5leHQtd29ydGh5OyBkbyBub3QgZG8gYW55dGhpbmcuCisKKyAgIFRoaXMgc3RlcCBpcyBhaWRlZCB3aXRoIE1ldGEvcmVkby1qY2guc2ggc2NyaXB0IGNyZWF0ZWQgZWFybGllci4KKyAgIElmIGEgdG9waWMgdGhhdCB3YXMgYWxyZWFkeSBpbiAnbmV4dCcgZ2FpbmVkIGEgcGF0Y2gsIHRoZSBzY3JpcHQKKyAgIHdvdWxkIGxpc3QgaXQgYXMgImFpL3RvcGljfjEiLiAgVG8gaW5jbHVkZSB0aGUgbmV3IHBhdGNoIHRvIHRoZQorICAgdXBkYXRlZCAnbmV4dCcsIGRyb3AgdGhlICJ+MSIgcGFydDsgdG8ga2VlcCBpdCBleGNsdWRlZCwgZG8gbm90CisgICB0b3VjaCB0aGUgbGluZS4gIElmIGEgdG9waWMgdGhhdCB3YXMgbm90IGluICduZXh0JyBzaG91bGQgYmUKKyAgIG1lcmdlZCB0byAnbmV4dCcsIGFkZCBpdCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LiAgVGhlbjoKKworICAgICAkIGdpdCBjaGVja291dCAtQiBqY2ggbWFzdGVyCisgICAgICQgTWV0YS9yZWRvLWpjaC5zaCAtYzEKKworICAgdG8gcmVidWlsZCB0aGUgJ2pjaCcgYnJhbmNoIGZyb20gc2NyYXRjaC4gICItYzEiIHRlbGxzIHRoZSBzY3JpcHQKKyAgIHRvIHN0b3AgbWVyZ2luZyBhdCB0aGUgZmlyc3QgbGluZSB0aGF0IGJlZ2lucyB3aXRoICcjIyMnCisgICAoaS5lLiB0aGUgIiMjIyBtYXRjaCBuZXh0IiBsaW5lIHlvdSBhZGRlZCBlYXJsaWVyKS4KKworICAgQXQgdGhpcyBwb2ludCwgYnVpbGQtdGVzdCB0aGUgcmVzdWx0LiAgSXQgbWF5IHJldmVhbCBzZW1hbnRpYworICAgY29uZmxpY3RzIChlLmcuIGEgdG9waWMgcmVuYW1lZCBhIHZhcmlhYmxlLCBhbm90aGVyIGFkZGVkIGEgbmV3CisgICByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIHVuZGVyIGl0cyBvbGQgbmFtZSksIGluIHdoaWNoIGNhc2UKKyAgIHByZXBhcmUgYW4gYXBwcm9wcmlhdGUgbWVyZ2UtZml4IGZpcnN0IChzZWUgYXBwZW5kaXgpLCBhbmQKKyAgIHJlYnVpbGQgdGhlICdqY2gnIGJyYW5jaCBmcm9tIHNjcmF0Y2gsIHN0YXJ0aW5nIGF0IHRoZSB0aXAgb2YKKyAgICdtYXN0ZXInLgorCisgICBUaGVuIGRvIHRoZSBzYW1lIHRvICduZXh0JworCisgICAgICQgZ2l0IGNoZWNrb3V0IG5leHQKKyAgICAgJCBzaCBNZXRhL3JlZG8tamNoLnNoIC1jMSAtZQorCisgICBUaGUgIi1lIiBvcHRpb24gYWxsb3dzIHRoZSBtZXJnZSBtZXNzYWdlIHRoYXQgY29tZXMgZnJvbSB0aGUKKyAgIGhpc3Rvcnkgb2YgdGhlIHRvcGljIGFuZCB0aGUgY29tbWVudHMgaW4gdGhlICJXaGF0J3MgY29va2luZyIgdG8KKyAgIGJlIGVkaXRlZC4gIFRoZSByZXN1bHRpbmcgdHJlZSBzaG91bGQgbWF0Y2ggJ2pjaCcgYXMgdGhlIHNhbWUgc2V0CisgICBvZiB0b3BpY3MgYXJlIG1lcmdlZCBvbiAnbWFzdGVyJzsgb3RoZXJ3aXNlIHRoZXJlIGlzIGEgbWlzbWVyZ2UuCisgICBJbnZlc3RpZ2F0ZSB3aHkgYW5kIGRvIG5vdCBwcm9jZWVkIHVudGlsIHRoZSBtaXNtZXJnZSBpcyBmb3VuZAorICAgYW5kIHJlY3RpZmllZC4KKworICAgICAkIGdpdCBkaWZmIGpjaCBuZXh0CisKKyAgIFdoZW4gYWxsIGlzIHdlbGwsIGNsZWFuIHVwIHRoZSByZWRvLWpjaC5zaCBzY3JpcHQgd2l0aAorCisgICAgICQgc2ggTWV0YS9yZWRvLWpjaC5zaCAtdQorCisgICBUaGlzIHJlbW92ZXMgdG9waWNzIGxpc3RlZCBpbiB0aGUgc2NyaXB0IHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4KKyAgIG1lcmdlZCB0byAnbWFzdGVyJy4gIFRoaXMgbWF5IGxvc2UgJyMjIyBtYXRjaCBuZXh0JyBtYXJrZXI7CisgICBhZGQgaXQgYWdhaW4gdG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIHdoZW4gaXQgaGFwcGVucy4KKworIC0gUmVidWlsZCAncHUnLgorCisgICAgICQgTWV0YS9SZWludGVncmF0ZSBtYXN0ZXIuLnB1ID5NZXRhL3JlZG8tcHUuc2gKKworICAgRWRpdCB0aGUgcmVzdWx0IGJ5IGFkZGluZyBuZXcgdG9waWNzIHRoYXQgYXJlIG5vdCBzdGlsbCBpbiAncHUnCisgICBpbiB0aGUgc2NyaXB0LiAgVGhlbgorCisgICAgICQgZ2l0IGNoZWNrb3V0IC1CIHB1IGpjaAorICAgICAkIHNoIE1ldGEvcmVkby1wdS5zaAorCisgICBXaGVuIGFsbCBpcyB3ZWxsLCBjbGVhbiB1cCB0aGUgcmVkby1wdS5zaCBzY3JpcHQgd2l0aAorCisgICAgICQgc2ggTWV0YS9yZWRvLXB1LnNoIC11CisKKyAgIERvdWJsZSBjaGVjayBieSBydW5uaW5nCisKKyAgICAgJCBnaXQgYnJhbmNoIC0tbm8tbWVyZ2VkIHB1CisKKyAgIHRvIHNlZSB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIGxlZnRvdmVyIHRvcGljcy4KKworICAgQXQgdGhpcyBwb2ludCwgYnVpbGQtdGVzdCB0aGUgcmVzdWx0IGZvciBzZW1hbnRpYyBjb25mbGljdHMsIGFuZAorICAgaWYgdGhlcmUgYXJlLCBwcmVwYXJlIGFuIGFwcHJvcHJpYXRlIG1lcmdlLWZpeCBmaXJzdCAoc2VlCisgICBhcHBlbmRpeCksIGFuZCByZWJ1aWxkIHRoZSAncHUnIGJyYW5jaCBmcm9tIHNjcmF0Y2gsIHN0YXJ0aW5nIGF0CisgICB0aGUgdGlwIG9mICdqY2gnLgorCisgLSBVcGRhdGUgIldoYXQncyBjb29raW5nIiBtZXNzYWdlIHRvIHJldmlldyB0aGUgdXBkYXRlcyB0bworICAgZXhpc3RpbmcgdG9waWNzLCBuZXdseSBhZGRlZCB0b3BpY3MgYW5kIGdyYWR1YXRlZCB0b3BpY3MuCisKKyAgIFRoaXMgc3RlcCBpcyBoZWxwZWQgd2l0aCBNZXRhL2Nvb2sgc2NyaXB0LgorCisgICAgICQgTWV0YS9jb29rCisKKyAgIFRoaXMgc2NyaXB0IGluc3BlY3RzIHRoZSBoaXN0b3J5IGJldHdlZW4gbWFzdGVyLi5wdSwgZmluZHMgdGlwcworICAgb2YgdG9waWMgYnJhbmNoZXMsIGNvbXBhcmVzIHdoYXQgaXQgZm91bmQgd2l0aCB0aGUgY3VycmVudAorICAgY29udGVudHMgaW4gTWV0YS93aGF0cy1jb29raW5nLnR4dCwgYW5kIHVwZGF0ZXMgdGhhdCBmaWxlLgorICAgVG9waWNzIG5vdCBsaXN0ZWQgaW4gdGhlIGZpbGUgYnV0IGFyZSBmb3VuZCBpbiBtYXN0ZXIuLnB1IGFyZQorICAgYWRkZWQgdG8gdGhlICJOZXcgdG9waWNzIiBzZWN0aW9uLCB0b3BpY3MgbGlzdGVkIGluIHRoZSBmaWxlIHRoYXQKKyAgIGFyZSBubyBsb25nZXIgZm91bmQgaW4gbWFzdGVyLi5wdSBhcmUgbW92ZWQgdG8gdGhlICJHcmFkdWF0ZWQgdG8KKyAgIG1hc3RlciIgc2VjdGlvbiwgYW5kIHRvcGljcyB3aG9zZSBjb21taXRzIGNoYW5nZWQgdGhlaXIgc3RhdGVzCisgICAoZS5nLiB1c2VkIHRvIGJlIG9ubHkgaW4gJ3B1Jywgbm93IG1lcmdlZCB0byAnbmV4dCcpIGFyZSB1cGRhdGVkCisgICB3aXRoIGNoYW5nZSBtYXJrZXJzICI8PCIgYW5kICI+PiIuCisKKyAgIExvb2sgZm9yIGxpbmVzIGVuY2xvc2VkIGluICI8PCIgYW5kICI+PiI7IHRoZXkgaG9sZCBjb250ZW50cyBmcm9tCisgICBvbGQgZmlsZSB0aGF0IGFyZSByZXBsYWNlZCBieSB0aGlzIGludGVncmF0aW9uIHJvdW5kLiAgQWZ0ZXIKKyAgIHZlcmlmeWluZyB0aGVtLCByZW1vdmUgdGhlIG9sZCBwYXJ0LiAgUmV2aWV3IHRoZSBkZXNjcmlwdGlvbiBmb3IKKyAgIGVhY2ggdG9waWMgYW5kIHVwZGF0ZSBpdHMgZG9uZW5lc3MgYW5kIHBsYW4gYXMgbmVlZGVkLiAgVG8gcmV2aWV3CisgICB0aGUgdXBkYXRlZCBwbGFuLCBydW4KKworICAgICAkIE1ldGEvY29vayAtdworCisgICB3aGljaCB3aWxsIHBpY2sgdXAgY29tbWVudHMgZ2l2ZW4gdG8gdGhlIHRvcGljcywgc3VjaCBhcyAiV2lsbAorICAgbWVyZ2UgdG8gJ25leHQnIiwgZXRjLiAoc2VlIE1ldGEvY29vayBzY3JpcHQgdG8gbGVhcm4gd2hhdCBraW5kCisgICBvZiBwaHJhc2VzIGFyZSBzdXBwb3J0ZWQpLgorCisgLSBDb21waWxlLCB0ZXN0IGFuZCBpbnN0YWxsIGFsbCBmb3VyIChmaXZlKSBpbnRlZ3JhdGlvbiBicmFuY2hlczsKKyAgIE1ldGEvRG90aGVtIHNjcmlwdCBtYXkgYWlkIHRoaXMgc3RlcC4KKworIC0gRm9ybWF0IGRvY3VtZW50YXRpb24gaWYgdGhlICdtYXN0ZXInIGJyYW5jaCB3YXMgdXBkYXRlZDsKKyAgIE1ldGEvZG9kb2Muc2ggc2NyaXB0IG1heSBhaWQgdGhpcyBzdGVwLgorCisgLSBQdXNoIHRoZSBpbnRlZ3JhdGlvbiBicmFuY2hlcyBvdXQgdG8gcHVibGljIHBsYWNlczsgTWV0YS9wdXNoYWxsCisgICBzY3JpcHQgbWF5IGFpZCB0aGlzIHN0ZXAuCisKK09ic2VydmF0aW9ucworLS0tLS0tLS0tLS0tCisKK1NvbWUgb2JzZXJ2YXRpb25zIHRvIGJlIG1hZGUuCisKKyAqIEVhY2ggdG9waWMgaXMgdGVzdGVkIGluZGl2aWR1YWxseSwgYW5kIGFsc28gdG9nZXRoZXIgd2l0aCBvdGhlcgorICAgdG9waWNzIGNvb2tpbmcgZmlyc3QgaW4gJ3B1JywgdGhlbiBpbiAnamNoJyBhbmQgdGhlbiBpbiAnbmV4dCcuCisgICBVbnRpbCBpdCBtYXR1cmVzLCBubyBwYXJ0IG9mIGl0IGlzIG1lcmdlZCB0byAnbWFzdGVyJy4KKworICogQSB0b3BpYyBhbHJlYWR5IGluICduZXh0JyBjYW4gZ2V0IGZpeGVzIHdoaWxlIHN0aWxsIGluCisgICAnbmV4dCcuICBTdWNoIGEgdG9waWMgd2lsbCBoYXZlIG1hbnkgbWVyZ2VzIHRvICduZXh0JyAoaW4KKyAgIG90aGVyIHdvcmRzLCAiZ2l0IGxvZyAtLWZpcnN0LXBhcmVudCBuZXh0IiB3aWxsIHNob3cgbWFueQorICAgIk1lcmdlIGJyYW5jaCAnYWkvdG9waWMnIHRvIG5leHQiIGZvciB0aGUgc2FtZSB0b3BpYy4KKworICogQW4gdW5vYnZpb3VzIGZpeCBmb3IgJ21haW50JyBpcyBjb29rZWQgaW4gJ25leHQnIGFuZCB0aGVuCisgICBtZXJnZWQgdG8gJ21hc3RlcicgdG8gbWFrZSBleHRyYSBzdXJlIGl0IGlzIE9rIGFuZCB0aGVuCisgICBtZXJnZWQgdG8gJ21haW50Jy4KKworICogRXZlbiB3aGVuICduZXh0JyBiZWNvbWVzIGVtcHR5IChpbiBvdGhlciB3b3JkcywgYWxsIHRvcGljcworICAgcHJvdmUgc3RhYmxlIGFuZCBhcmUgbWVyZ2VkIHRvICdtYXN0ZXInIGFuZCAiZ2l0IGRpZmYgbWFzdGVyCisgICBuZXh0IiBzaG93cyBlbXB0eSksIGl0IGhhcyB0b25zIG9mIG1lcmdlIGNvbW1pdHMgdGhhdCB3aWxsCisgICBuZXZlciBiZSBpbiAnbWFzdGVyJy4KKworICogSW4gcHJpbmNpcGxlLCAiZ2l0IGxvZyAtLWZpcnN0LXBhcmVudCBtYXN0ZXIuLm5leHQiIHNob3VsZAorICAgc2hvdyBub3RoaW5nIGJ1dCBtZXJnZXMgKGluIHByYWN0aWNlLCB0aGVyZSBhcmUgZml4dXAgY29tbWl0cworICAgYW5kIHJldmVydHMgdGhhdCBhcmUgbm90IG1lcmdlcykuCisKKyAqIENvbW1pdHMgbmVhciB0aGUgdGlwIG9mIGEgdG9waWMgYnJhbmNoIHRoYXQgYXJlIG5vdCBpbiAnbmV4dCcKKyAgIGFyZSBmYWlyIGdhbWUgdG8gYmUgZGlzY2FyZGVkLCByZXBsYWNlZCBvciByZXdyaXR0ZW4uCisgICBDb21taXRzIGFscmVhZHkgbWVyZ2VkIHRvICduZXh0JyB3aWxsIG5vdCBiZS4KKworICogQmVpbmcgaW4gdGhlICduZXh0JyBicmFuY2ggaXMgbm90IGEgZ3VhcmFudGVlIGZvciBhIHRvcGljIHRvCisgICBiZSBpbmNsdWRlZCBpbiB0aGUgbmV4dCBmZWF0dXJlIHJlbGVhc2UuICBCZWluZyBpbiB0aGUKKyAgICdtYXN0ZXInIGJyYW5jaCB0eXBpY2FsbHkgaXMuCisKKyAqIER1ZSB0byB0aGUgbmF0dXJlIG9mICJTUVVBU0g/Pz8iIGZpeC11cHMsIGlmIHRoZSBvcmlnaW5hbCBhdXRob3IKKyAgIGFncmVlcyB3aXRoIHRoZSBzdWdnZXN0ZWQgY2hhbmdlcywgaXQgaXMgT0sgdG8gc3F1YXNoIHRoZW0gdG8KKyAgIGFwcHJvcHJpYXRlIHBhdGNoZXMgaW4gdGhlIG5leHQgcm91bmQgKHdoZW4gdGhlIHN1Z2dlc3RlZCBjaGFuZ2UKKyAgIGlzIHNtYWxsIGVub3VnaCwgdGhlIGF1dGhvciBzaG91bGQgbm90IGV2ZW4gYm90aGVyIHdpdGgKKyAgICJIZWxwZWQtYnkiKS4gIEl0IGlzIGFsc28gT0sgdG8gZHJvcCB0aGVtIGZyb20gdGhlIG5leHQgcm91bmQKKyAgIHdoZW4gdGhlIG9yaWdpbmFsIGF1dGhvciBkb2VzIG5vdCBhZ3JlZSB3aXRoIHRoZSBzdWdnZXN0aW9uLCBidXQKKyAgIHRoZSBhdXRob3IgaXMgZXhwZWN0ZWQgdG8gc2F5IHdoeSBzb21ld2hlcmUgaW4gdGhlIGRpc2N1c3Npb24uCisKKworQXBwZW5kaXgKKy0tLS0tLS0tCisKK1ByZXBhcmluZyBhICJtZXJnZS1maXgiCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBIG1lcmdlIG9mIHR3byB0b3BpY3MgbWF5IG5vdCB0ZXh0dWFsbHkgY29uZmxpY3QgYnV0IHN0aWxsIGhhdmUKK2NvbmZsaWN0IGF0IHRoZSBzZW1hbnRpYyBsZXZlbC4gQSBjbGFzc2ljIGV4YW1wbGUgaXMgZm9yIG9uZSB0b3BpYwordG8gcmVuYW1lIGFuIHZhcmlhYmxlIGFuZCBhbGwgaXRzIHVzZXMsIHdoaWxlIGFub3RoZXIgdG9waWMgYWRkcyBhCituZXcgdXNlIG9mIHRoZSB2YXJpYWJsZSB1bmRlciBpdHMgb2xkIG5hbWUuIFdoZW4gdGhlc2UgdHdvIHRvcGljcworYXJlIG1lcmdlZCB0b2dldGhlciwgdGhlIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgbmV3bHkgYWRkZWQgYnkKK3RoZSBsYXR0ZXIgdG9waWMgd2lsbCBzdGlsbCB1c2UgdGhlIG9sZCBuYW1lIGluIHRoZSByZXN1bHQuCisKK1RoZSBNZXRhL1JlaW50ZWdyYXRlIHNjcmlwdCB0aGF0IGlzIHVzZWQgYnkgcmVkby1qY2ggYW5kIHJlZG8tcHUKK3NjcmlwdHMgaW1wbGVtZW50cyBhIGNydWRlIGJ1dCB1c2FibGUgd2F5IHRvIHdvcmsgdGhpcyBpc3N1ZSBhcm91bmQuCitXaGVuIHRoZSBzY3JpcHQgbWVyZ2VzIGJyYW5jaCAkWCwgaXQgY2hlY2tzIGlmICJyZWZzL21lcmdlLWZpeC8kWCIKK2V4aXN0cywgYW5kIGlmIHNvLCB0aGUgZWZmZWN0IG9mIGl0IGlzIHNxdWFzaGVkIGludG8gdGhlIHJlc3VsdCBvZgordGhlIG1lY2hhbmljYWwgbWVyZ2UuICBJbiBvdGhlciB3b3JkcywKKworICAgICAkIGVjaG8gJFggfCBNZXRhL1JlaW50ZWdyYXRlCisKK2lzIHJvdWdobHkgZXF1aXZhbGVudCB0byB0aGlzIHNlcXVlbmNlOgorCisgICAgICQgZ2l0IG1lcmdlIC0tcmVyZXJlLWF1dG91cGRhdGUgJFgKKyAgICAgJCBnaXQgY29tbWl0CisgICAgICQgZ2l0IGNoZXJyeS1waWNrIC1uIHJlZnMvbWVyZ2UtZml4LyRYCisgICAgICQgZ2l0IGNvbW1pdCAtLWFtZW5kCisKK1RoZSBnb2FsIG9mIHRoaXMgInByZXBhcmUgYSBtZXJnZS1maXgiIHN0ZXAgaXMgdG8gY29tZSB1cCB3aXRoIGEKK2NvbW1pdCB0aGF0IGNhbiBiZSBzcXVhc2hlZCBpbnRvIGEgcmVzdWx0IG9mIG1lY2hhbmljYWwgbWVyZ2UgdG8KK2NvcnJlY3Qgc2VtYW50aWMgY29uZmxpY3RzLgorCitBZnRlciBmaW5kaW5nIHRoYXQgdGhlIHJlc3VsdCBvZiBtZXJnaW5nIGJyYW5jaCAiYWkvdG9waWMiIHRvIGFuCitpbnRlZ3JhdGlvbiBicmFuY2ggaGFkIHN1Y2ggYSBzZW1hbnRpYyBjb25mbGljdCwgc2F5IHB1fjQsIGNoZWNrIHRoZQorcHJvYmxlbWF0aWMgbWVyZ2Ugb3V0IG9uIGEgZGV0YWNoZWQgSEVBRCwgZWRpdCB0aGUgd29ya2luZyB0cmVlIHRvCitmaXggdGhlIHNlbWFudGljIGNvbmZsaWN0LCBhbmQgbWFrZSBhIHNlcGFyYXRlIGNvbW1pdCB0byByZWNvcmQgdGhlCitmaXgtdXA6CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgcHV+NAorICAgICAkIGdpdCBzaG93IC1zIC0tcHJldHR5PSVzIDsjIGRvdWJsZSBjaGVjaworICAgICBNZXJnZSBicmFuY2ggJ2FpL3RvcGljJyB0byBwdQorICAgICAkIGVkaXQKKyAgICAgJCBnaXQgY29tbWl0IC1tICdtZXJnZS1maXgvYWkvdG9waWMnIC1hCisKK1RoZW4gbWFrZSBhIHJlZmVyZW5jZSAicmVmcy9tZXJnZS1maXgvYWkvdG9waWMiIHRvIHBvaW50IGF0IHRoaXMKK3Jlc3VsdDoKKworICAgICAkIGdpdCB1cGRhdGUtcmVmIHJlZnMvbWVyZ2UtZml4L2FpL3RvcGljIEhFQUQKKworVGhlbiBkb3VibGUgY2hlY2sgdGhlIHJlc3VsdCBieSBhc2tpbmcgTWV0YS9SZWludGVncmF0ZSB0byByZWRvIHRoZQorbWVyZ2U6CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgcHV+NSA7IyB0aGUgcGFyZW50IG9mIHRoZSBwcm9ibGVtIG1lcmdlCisgICAgICQgZWNobyBhaS90b3BpYyB8IE1ldGEvUmVpbnRlZ3JhdGUKKyAgICAgJCBnaXQgZGlmZiBwdX40CisKK1RoaXMgdGltZSwgYmVjYXVzZSB5b3UgcHJlcGFyZWQgcmVmcy9tZXJnZS1maXgvYWkvdG9waWMsIHRoZQorcmVzdWx0aW5nIG1lcmdlIHNob3VsZCBoYXZlIGJlZW4gdHdlYWtlZCB0byBpbmNsdWRlIHRoZSBmaXggZm9yIHRoZQorc2VtYW50aWMgY29uZmxpY3QuCisKK05vdGUgdGhhdCB0aGlzIGFzc3VtZXMgdGhhdCB0aGUgb3JkZXIgaW4gd2hpY2ggY29uZmxpY3RpbmcgYnJhbmNoZXMKK2FyZSBtZXJnZWQgZG9lcyBub3QgY2hhbmdlLiAgSWYgdGhlIHJlYXNvbiB3aHkgbWVyZ2luZyBhaS90b3BpYworYnJhbmNoIG5lZWRzIHRoaXMgbWVyZ2UtZml4IGlzIGJlY2F1c2UgYW5vdGhlciBicmFuY2ggbWVyZ2VkIGVhcmxpZXIKK3RvIHRoZSBpbnRlZ3JhdGlvbiBicmFuY2ggY2hhbmdlZCB0aGUgdW5kZXJseWluZyBhc3N1bXB0aW9uIGFpL3RvcGljCiticmFuY2ggbWFkZSAoZS5nLiBhaS90b3BpYyBicmFuY2ggYWRkZWQgYSBzaXRlIHRvIHJlZmVyIHRvIGEKK3ZhcmlhYmxlLCB3aGlsZSB0aGUgb3RoZXIgYnJhbmNoIHJlbmFtZWQgdGhhdCB2YXJpYWJsZSBhbmQgYWRqdXN0ZWQKK2V4aXN0aW5nIHVzZSBzaXRlcyksIGFuZCBpZiB5b3UgY2hhbmdlZCByZWRvLWpjaCAob3IgcmVkby1wdSkgc2NyaXB0Cit0byBtZXJnZSBhaS90b3BpYyBicmFuY2ggYmVmb3JlIHRoZSBvdGhlciBicmFuY2gsIHRoZW4gdGhlIGFib3ZlCittZXJnZS1maXggc2hvdWxkIG5vdCBiZSBhcHBsaWVkIHdoaWxlIG1lcmdpbmcgYWkvdG9waWMsIGJ1dCBzaG91bGQKK2luc3RlYWQgYmUgYXBwbGllZCB3aGlsZSBtZXJnaW5nIHRoZSBvdGhlciBicmFuY2guICBZb3Ugd291bGQgbmVlZAordG8gbW92ZSB0aGUgZml4IHRvIGFwcGx5IHRvIHRoZSBvdGhlciBicmFuY2gsIHBlcmhhcHMgbGlrZSB0aGlzOgorCisgICAgICAkIG1mPXJlZnMvbWVyZ2UtZml4CisgICAgICAkIGdpdCB1cGRhdGUtcmVmICRtZi8kdGhlX290aGVyX2JyYW5jaCAkbWYvYWkvdG9waWMKKyAgICAgICQgZ2l0IHVwZGF0ZS1yZWYgLWQgJG1mL2FpL3RvcGljCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL25ldy1jb21tYW5kLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vbmV3LWNvbW1hbmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTRjODAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL25ldy1jb21tYW5kLnR4dApAQCAtMCwwICsxLDEwNiBAQAorRnJvbTogRXJpYyBTLiBSYXltb25kIDxlc3JAdGh5cnN1cy5jb20+CitBYnN0cmFjdDogVGhpcyBpcyBob3ctdG8gZG9jdW1lbnRhdGlvbiBmb3IgcGVvcGxlIHdobyB3YW50IHRvIGFkZCBleHRlbnNpb24KKyBjb21tYW5kcyB0byBHaXQuICBJdCBzaG91bGQgYmUgcmVhZCBhbG9uZ3NpZGUgYXBpLWJ1aWx0aW4udHh0LgorQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jCisKK0hvdyB0byBpbnRlZ3JhdGUgbmV3IHN1YmNvbW1hbmRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIGhvdy10byBkb2N1bWVudGF0aW9uIGZvciBwZW9wbGUgd2hvIHdhbnQgdG8gYWRkIGV4dGVuc2lvbgorY29tbWFuZHMgdG8gR2l0LiAgSXQgc2hvdWxkIGJlIHJlYWQgYWxvbmdzaWRlIGFwaS1idWlsdGluLnR4dC4KKworUnVudGltZSBlbnZpcm9ubWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgc3ViY29tbWFuZHMgYXJlIHN0YW5kYWxvbmUgZXhlY3V0YWJsZXMgdGhhdCBsaXZlIGluIHRoZSBHaXQgZXhlYworcGF0aCwgbm9ybWFsbHkgL3Vzci9saWIvZ2l0LWNvcmUuICBUaGUgZ2l0IGV4ZWN1dGFibGUgaXRzZWxmIGlzIGEKK3RoaW4gd3JhcHBlciB0aGF0IGtub3dzIHdoZXJlIHRoZSBzdWJjb21tYW5kcyBsaXZlLCBhbmQgcnVucyB0aGVtIGJ5CitwYXNzaW5nIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdG8gdGhlbS4KKworKElmICJnaXQgZm9vIiBpcyBub3QgZm91bmQgaW4gdGhlIEdpdCBleGVjIHBhdGgsIHRoZSB3cmFwcGVyCit3aWxsIGxvb2sgaW4gdGhlIHJlc3Qgb2YgeW91ciAkUEFUSCBmb3IgaXQuICBUaHVzLCBpdCdzIHBvc3NpYmxlCit0byB3cml0ZSBsb2NhbCBHaXQgZXh0ZW5zaW9ucyB0aGF0IGRvbid0IGxpdmUgaW4gc3lzdGVtIHNwYWNlLikKKworSW1wbGVtZW50YXRpb24gbGFuZ3VhZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTW9zdCBzdWJjb21tYW5kcyBhcmUgd3JpdHRlbiBpbiBDIG9yIHNoZWxsLiAgQSBmZXcgYXJlIHdyaXR0ZW4gaW4KK1BlcmwuCisKK1doaWxlIHdlIHN0cm9uZ2x5IGVuY291cmFnZSBjb2RpbmcgaW4gcG9ydGFibGUgQyBmb3IgcG9ydGFiaWxpdHksCit0aGVzZSBzcGVjaWZpYyBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGFyZSBhbHNvIGFjY2VwdGFibGUuICBXZSB3b24ndAorYWNjZXB0IG1vcmUgd2l0aG91dCBhIHZlcnkgc3Ryb25nIHRlY2huaWNhbCBjYXNlLCBhcyB3ZSBkb24ndCB3YW50Cit0byBicm9hZGVuIHRoZSBHaXQgc3VpdGUncyByZXF1aXJlZCBkZXBlbmRlbmNpZXMuICBJbXBvcnQgdXRpbGl0aWVzLAorc3VyZ2ljYWwgdG9vbHMsIHJlbW90ZSBoZWxwZXJzIGFuZCBvdGhlciBjb2RlIGF0IHRoZSBlZGdlcyBvZiB0aGUKK0dpdCBzdWl0ZSBhcmUgbW9yZSBsZW5pZW50IGFuZCB3ZSBhbGxvdyBQeXRob24gKGFuZCBldmVuIFRjbC90ayksCitidXQgdGhleSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIGNvcmUgZnVuY3Rpb25zLgorCitUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4gIEVzcGVjaWFsbHkgUHl0aG9uIGlzIG5vdCBhbGxvd2VkIGluCitjb3JlIGJlY2F1c2Ugd2UgbmVlZCBiZXR0ZXIgUHl0aG9uIGludGVncmF0aW9uIGluIHRoZSBHaXQgV2luZG93cworaW5zdGFsbGVyIGJlZm9yZSB3ZSBjYW4gYmUgY29uZmlkZW50IHBlb3BsZSBpbiB0aGF0IGVudmlyb25tZW50Cit3b24ndCBleHBlcmllbmNlIGFuIHVuYWNjZXB0YWJseSBsYXJnZSBsb3NzIG9mIGNhcGFiaWxpdHkuCisKK0MgY29tbWFuZHMgYXJlIG5vcm1hbGx5IHdyaXR0ZW4gYXMgc2luZ2xlIG1vZHVsZXMsIG5hbWVkIGFmdGVyIHRoZQorY29tbWFuZCwgdGhhdCBsaW5rIGEgY29sbGVjdGlvbiBvZiBmdW5jdGlvbnMgY2FsbGVkIGxpYmdpdC4gIFRodXMsCit5b3VyIGNvbW1hbmQgJ2dpdC1mb28nIHdvdWxkIG5vcm1hbGx5IGJlIGltcGxlbWVudGVkIGFzIGEgc2luZ2xlCisiZ2l0LWZvby5jIiAob3IgImJ1aWx0aW4vZm9vLmMiIGlmIGl0IGlzIHRvIGJlIGxpbmtlZCB0byB0aGUgbWFpbgorYmluYXJ5KTsgdGhpcyBvcmdhbml6YXRpb24gbWFrZXMgaXQgZWFzeSBmb3IgcGVvcGxlIHJlYWRpbmcgdGhlIGNvZGUKK3RvIGZpbmQgdGhpbmdzLgorCitTZWUgdGhlIENvZGluZ0d1aWRlbGluZXMgZG9jdW1lbnQgZm9yIG90aGVyIGd1aWRhbmNlIG9uIHdoYXQgd2UgY29uc2lkZXIKK2dvb2QgcHJhY3RpY2UgaW4gQyBhbmQgc2hlbGwsIGFuZCBhcGktYnVpbHRpbi50eHQgZm9yIHRoZSBzdXBwb3J0CitmdW5jdGlvbnMgYXZhaWxhYmxlIHRvIGJ1aWx0LWluIGNvbW1hbmRzIHdyaXR0ZW4gaW4gQy4KKworV2hhdCBldmVyeSBleHRlbnNpb24gY29tbWFuZCBuZWVkcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgbXVzdCBoYXZlIGEgbWFuIHBhZ2UsIHdyaXR0ZW4gaW4gYXNjaWlkb2MgKHRoaXMgaXMgd2hhdCBHaXQgaGVscAorZm9sbG93ZWQgYnkgeW91ciBzdWJjb21tYW5kIG5hbWUgd2lsbCBkaXNwbGF5KS4gIEJlIGF3YXJlIHRoYXQgdGhlcmUgaXMKK2EgbG9jYWwgYXNjaWlkb2MgY29uZmlndXJhdGlvbiBhbmQgbWFjcm9zIHdoaWNoIHlvdSBzaG91bGQgdXNlLiAgSXQncworb2Z0ZW4gaGVscGZ1bCB0byBzdGFydCBieSBjbG9uaW5nIGFuIGV4aXN0aW5nIHBhZ2UgYW5kIHJlcGxhY2luZyB0aGUKK3RleHQgY29udGVudC4KKworWW91IG11c3QgaGF2ZSBhIHRlc3QsIHdyaXR0ZW4gdG8gcmVwb3J0IGluIFRBUCAoVGVzdCBBbnl0aGluZyBQcm90b2NvbCkuCitUZXN0cyBhcmUgZXhlY3V0YWJsZXMgKHVzdWFsbHkgc2hlbGwgc2NyaXB0cykgdGhhdCBsaXZlIGluIHRoZSAndCcKK3N1YmRpcmVjdG9yeSBvZiB0aGUgdHJlZS4gIEVhY2ggdGVzdCBuYW1lIGJlZ2lucyB3aXRoICd0JyBhbmQgYSBzZXF1ZW5jZQorbnVtYmVyIHRoYXQgY29udHJvbHMgd2hlcmUgaW4gdGhlIHRlc3Qgc2VxdWVuY2UgaXQgd2lsbCBiZSBleGVjdXRlZDsKK2NvbnZlbnRpb25hbGx5IHRoZSByZXN0IG9mIHRoZSBuYW1lIHN0ZW0gaXMgdGhhdCBvZiB0aGUgY29tbWFuZAorYmVpbmcgdGVzdGVkLgorCitSZWFkIHRoZSBmaWxlIHQvUkVBRE1FIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIGNvbnZlbnRpb25zIHRvIGJlIHVzZWQKK2luIHdyaXRpbmcgdGVzdHMsIGFuZCB0aGUgdGVzdCBzdXBwb3J0IGxpYnJhcnkuCisKK0ludGVncmF0aW5nIGEgY29tbWFuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hlcmUgYXJlIHRoZSB0aGluZ3MgeW91IG5lZWQgdG8gZG8gd2hlbiB5b3Ugd2FudCB0byBtZXJnZSBhIG5ldworc3ViY29tbWFuZCBpbnRvIHRoZSBHaXQgdHJlZS4KKworMS4gRG9uJ3QgZm9yZ2V0IHRvIHNpZ24gb2ZmIHlvdXIgcGF0Y2ghCisKKzIuIEFwcGVuZCB5b3VyIGNvbW1hbmQgbmFtZSB0byBvbmUgb2YgdGhlIHZhcmlhYmxlcyBCVUlMVElOX09CSlMsCitFWFRSQV9QUk9HUkFNUywgU0NSSVBUX1NILCBTQ1JJUFRfUEVSTCBvciBTQ1JJUFRfUFlUSE9OLgorCiszLiBEcm9wIGl0cyB0ZXN0IGluIHRoZSB0IGRpcmVjdG9yeS4KKworNC4gSWYgeW91ciBjb21tYW5kIGlzIGltcGxlbWVudGVkIGluIGFuIGludGVycHJldGVkIGxhbmd1YWdlIHdpdGggYQorcC1jb2RlIGludGVybWVkaWF0ZSBmb3JtLCBtYWtlIHN1cmUgLmdpdGlnbm9yZSBpbiB0aGUgbWFpbiBkaXJlY3RvcnkKK2luY2x1ZGVzIGEgcGF0dGVybiBlbnRyeSB0aGF0IGlnbm9yZXMgc3VjaCBmaWxlcy4gIFB5dGhvbiAucHljIGFuZAorLnB5byBmaWxlcyB3aWxsIGFscmVhZHkgYmUgY292ZXJlZC4KKworNS4gSWYgeW91ciBjb21tYW5kIGhhcyBhbnkgZGVwZW5kZW5jeSBvbiBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZgoreW91ciBsYW5ndWFnZSwgZG9jdW1lbnQgaXQgaW4gdGhlIElOU1RBTEwgZmlsZS4KKworNi4gVGhlcmUgaXMgYSBmaWxlIGNvbW1hbmQtbGlzdC50eHQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBtYWluIGRpcmVjdG9yeQordGhhdCBjYXRlZ29yaXplcyBjb21tYW5kcyBieSB0eXBlLCBzbyB0aGV5IGNhbiBiZSBsaXN0ZWQgaW4gYXBwcm9wcmlhdGUKK3N1YnNlY3Rpb25zIGluIHRoZSBkb2N1bWVudGF0aW9uJ3Mgc3VtbWFyeSBjb21tYW5kIGxpc3QuICBBZGQgYW4gZW50cnkKK2ZvciB5b3Vycy4gIFRvIHVuZGVyc3RhbmQgdGhlIGNhdGVnb3JpZXMsIGxvb2sgYXQgY29tbWFuZC1saXN0LnR4dAoraW4gdGhlIG1haW4gZGlyZWN0b3J5LiAgSWYgdGhlIG5ldyBjb21tYW5kIGlzIHBhcnQgb2YgdGhlIHR5cGljYWwgR2l0Cit3b3JrZmxvdyBhbmQgeW91IGJlbGlldmUgaXQgY29tbW9uIGVub3VnaCB0byBiZSBtZW50aW9uZWQgaW4gJ2dpdCBoZWxwJywKK21hcCB0aGlzIGNvbW1hbmQgdG8gYSBjb21tb24gZ3JvdXAgaW4gdGhlIGNvbHVtbiBbY29tbW9uXS4KKworNy4gR2l2ZSB0aGUgbWFpbnRhaW5lciBvbmUgcGFyYWdyYXBoIHRvIGluY2x1ZGUgaW4gdGhlIFJlbE5vdGVzIGZpbGUKK3RvIGRlc2NyaWJlIHRoZSBuZXcgZmVhdHVyZTsgYSBnb29kIHBsYWNlIHRvIGRvIHNvIGlzIGluIHRoZSBjb3ZlcgorbGV0dGVyIFtQQVRDSCAwL25dLgorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJhc2UtZnJvbS1pbnRlcm5hbC1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJhc2UtZnJvbS1pbnRlcm5hbC1icmFuY2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyY2I1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlYmFzZS1mcm9tLWludGVybmFsLWJyYW5jaC50eHQKQEAgLTAsMCArMSwxNjQgQEAKK0Zyb206CUp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KK1RvOglnaXRAdmdlci5rZXJuZWwub3JnCitDYzoJUGV0ciBCYXVkaXMgPHBhc2t5QHN1c2UuY3o+LCBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CitTdWJqZWN0OiBSZTogc2VuZGluZyBjaGFuZ2VzZXRzIGZyb20gdGhlIG1pZGRsZSBvZiBhIGdpdCB0cmVlCitEYXRlOglTdW4sIDE0IEF1ZyAyMDA1IDE4OjM3OjM5IC0wNzAwCitBYnN0cmFjdDogSW4gdGhpcyBhcnRpY2xlLCBKQyB0YWxrcyBhYm91dCBob3cgaGUgcmViYXNlcyB0aGUKKyBwdWJsaWMgInB1IiBicmFuY2ggdXNpbmcgdGhlIGNvcmUgR2l0IHRvb2xzIHdoZW4gaGUgdXBkYXRlcworIHRoZSAibWFzdGVyIiBicmFuY2gsIGFuZCBob3cgInJlYmFzZSIgd29ya3MuICBBbHNvIGRpc2N1c3NlZAorIGlzIGhvdyB0aGlzIGFwcGxpZXMgdG8gaW5kaXZpZHVhbCBkZXZlbG9wZXJzIHdobyBzZW5kcyBwYXRjaGVzCisgdXBzdHJlYW0uCitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKKworSG93IHRvIHJlYmFzZSBmcm9tIGFuIGludGVybmFsIGJyYW5jaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUGV0ciBCYXVkaXMgPHBhc2t5QHN1c2UuY3o+IHdyaXRlczoKKworPiBEZWFyIGRpYXJ5LCBvbiBTdW4sIEF1ZyAxNCwgMjAwNSBhdCAwOTo1NzoxM0FNIENFU1QsIEkgZ290IGEgbGV0dGVyCis+IHdoZXJlIEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4gdG9sZCBtZSB0aGF0Li4uCis+PiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+IHdyaXRlczoKKz4+Cis+PiA+IEp1bmlvLCBtYXliZSB5b3Ugd2FudCB0byB0YWxrIGFib3V0IGhvdyB5b3UgbW92ZSBwYXRjaGVzIGZyb20geW91ciAicHUiCis+PiA+IGJyYW5jaCB0byB0aGUgcmVhbCBicmFuY2hlcy4KKz4+Cis+IEFjdHVhbGx5LCB3b3VsZG4ndCB0aGlzIGJlIGFsc28gcHJlY2lzZWx5IGZvciB3aGF0IFN0R0lUIGlzIGludGVuZGVkIHRvPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRXhhY3RseSBteSBmZWVsaW5nLiAgSSB3YXMgc29ydCBvZiB3YWl0aW5nIGZvciBDYXRhbGluIHRvIHNwZWFrCit1cC4gIFdpdGggaXRzIGJhc2luZyBwaGlsb3NvcGhpY2FsIGFuY2VzdHJ5IG9uIHF1aWx0LCB0aGlzIGlzCit0aGUga2luZCBvZiB0YXNrIFN0R0lUIGlzIGRlc2lnbmVkIHRvIGRvLgorCitJIGp1c3QgaGF2ZSBkb25lIGEgc2ltcGxlciBvbmUsIHRoaXMgdGltZSB1c2luZyBvbmx5IHRoZSBjb3JlCitHaXQgdG9vbHMuCisKK0kgaGFkIGEgaGFuZGZ1bCBvZiBjb21taXRzIHRoYXQgd2VyZSBhaGVhZCBvZiBtYXN0ZXIgaW4gcHUsIGFuZCBJCit3YW50ZWQgdG8gYWRkIHNvbWUgZG9jdW1lbnRhdGlvbiBieXBhc3NpbmcgbXkgdXN1YWwgaGFiaXQgb2YKK3BsYWNpbmcgbmV3IHRoaW5ncyBpbiBwdSBmaXJzdC4gIEF0IHRoZSBiZWdpbm5pbmcsIHRoZSBjb21taXQKK2FuY2VzdHJ5IGdyYXBoIGxvb2tlZCBsaWtlIHRoaXM6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiJwdSIgaGVhZAorICAgIG1hc3RlciAtLT4gIzEgLS0+ICMyIC0tPiAjMworCitTbyBJIHN0YXJ0ZWQgZnJvbSBtYXN0ZXIsIG1hZGUgYSBidW5jaCBvZiBlZGl0cywgYW5kIGNvbW1pdHRlZDoKKworICAgICQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorICAgICQgY2QgRG9jdW1lbnRhdGlvbjsgZWQgZ2l0LnR4dCAuLi4KKyAgICAkIGNkIC4uOyBnaXQgYWRkIERvY3VtZW50YXRpb24vKi50eHQKKyAgICAkIGdpdCBjb21taXQgLXMKKworQWZ0ZXIgdGhlIGNvbW1pdCwgdGhlIGFuY2VzdHJ5IGdyYXBoIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqInB1IiBoZWFkCisgICAgbWFzdGVyXiAtLT4gIzEgLS0+ICMyIC0tPiAjMworICAgICAgICAgIFwKKyAgICAgICAgICAgIFwtLS0+IG1hc3RlcgorCitUaGUgb2xkIG1hc3RlciBpcyBub3cgbWFzdGVyXiAodGhlIGZpcnN0IHBhcmVudCBvZiB0aGUgbWFzdGVyKS4KK1RoZSBuZXcgbWFzdGVyIGNvbW1pdCBob2xkcyBteSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKK05vdyBJIGhhdmUgdG8gZGVhbCB3aXRoICJwdSIgYnJhbmNoLgorCitUaGlzIGlzIHRoZSBraW5kIG9mIHNpdHVhdGlvbiBJIHVzZWQgdG8gaGF2ZSBhbGwgdGhlIHRpbWUgd2hlbgorTGludXMgd2FzIHRoZSBtYWludGFpbmVyIGFuZCBJIHdhcyBhIGNvbnRyaWJ1dG9yLCB3aGVuIHlvdSBsb29rCithdCAibWFzdGVyIiBicmFuY2ggYmVpbmcgdGhlICJtYWludGFpbmVyIiBicmFuY2gsIGFuZCAicHUiCiticmFuY2ggYmVpbmcgdGhlICJjb250cmlidXRvciIgYnJhbmNoLiAgWW91ciB3b3JrIHN0YXJ0ZWQgYXQgdGhlCit0aXAgb2YgdGhlICJtYWludGFpbmVyIiBicmFuY2ggc29tZSB0aW1lIGFnbywgeW91IG1hZGUgYSBsb3Qgb2YKK3Byb2dyZXNzIGluIHRoZSBtZWFudGltZSwgYW5kIG5vdyB0aGUgbWFpbnRhaW5lciBicmFuY2ggaGFzIHNvbWUKK290aGVyIGNvbW1pdHMgeW91IGRvIG5vdCBoYXZlIHlldC4gIEFuZCAiZ2l0IHJlYmFzZSIgd2FzIHdyaXR0ZW4KK3dpdGggdGhlIGV4cGxpY2l0IHB1cnBvc2Ugb2YgaGVscGluZyB0byBtYWludGFpbiBicmFuY2hlcyBsaWtlCisicHUiLiAgWW91IF9jb3VsZF8gbWVyZ2UgbWFzdGVyIHRvIHB1IGFuZCBrZWVwIGdvaW5nLCBidXQgaWYgeW91CitldmVudHVhbGx5IHdhbnQgdG8gY2hlcnJ5cGljayBhbmQgbWVyZ2Ugc29tZSBidXQgbm90IG5lY2Vzc2FyaWx5CithbGwgY2hhbmdlcyBiYWNrIHRvIHRoZSBtYXN0ZXIgYnJhbmNoLCBpdCBvZnRlbiBtYWtlcyBsYXRlcgorb3BlcmF0aW9ucyBmb3IgX3lvdV8gZWFzaWVyIGlmIHlvdSByZWJhc2UgKGkuZS4gY2FycnkgZm9yd2FyZAoreW91ciBjaGFuZ2VzKSAicHUiIHJhdGhlciB0aGFuIG1lcmdlLiAgU28gSSByYW4gImdpdCByZWJhc2UiOgorCisgICAgJCBnaXQgY2hlY2tvdXQgcHUKKyAgICAkIGdpdCByZWJhc2UgbWFzdGVyIHB1CisKK1doYXQgdGhpcyBkb2VzIGlzIHRvIHBpY2sgYWxsIHRoZSBjb21taXRzIHNpbmNlIHRoZSBjdXJyZW50CiticmFuY2ggKG5vdGUgdGhhdCBJIG5vdyBhbSBvbiAicHUiIGJyYW5jaCkgZm9ya2VkIGZyb20gdGhlCittYXN0ZXIgYnJhbmNoLCBhbmQgZm9yd2FyZCBwb3J0IHRoZXNlIGNoYW5nZXMuCisKKyAgICBtYXN0ZXJeIC0tPiAjMSAtLT4gIzIgLS0+ICMzCisgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqInB1IiBoZWFkCisgICAgICAgICAgICBcLS0tPiBtYXN0ZXIgLS0+ICMxJyAtLT4gIzInIC0tPiAjMycKKworVGhlIGRpZmYgYmV0d2VlbiBtYXN0ZXJeIGFuZCAjMSBpcyBhcHBsaWVkIHRvIG1hc3RlciBhbmQKK2NvbW1pdHRlZCB0byBjcmVhdGUgIzEnIGNvbW1pdCB3aXRoIHRoZSBjb21taXQgaW5mb3JtYXRpb24gKGxvZywKK2F1dGhvciBhbmQgZGF0ZSkgdGFrZW4gZnJvbSBjb21taXQgIzEuICBPbiB0b3Agb2YgdGhhdCAjMicgYW5kICMzJworY29tbWl0cyBhcmUgbWFkZSBzaW1pbGFybHkgb3V0IG9mICMyIGFuZCAjMyBjb21taXRzLgorCitPbGQgIzMgaXMgbm90IHJlY29yZGVkIGluIGFueSBvZiB0aGUgLmdpdC9yZWZzL2hlYWRzLyBmaWxlCithbnltb3JlLCBzbyBhZnRlciBkb2luZyB0aGlzIHlvdSB3aWxsIGhhdmUgZGFuZ2xpbmcgY29tbWl0IGlmCit5b3UgcmFuIGZzY2stY2FjaGUsIHdoaWNoIGlzIG5vcm1hbC4gIEFmdGVyIHRlc3RpbmcgInB1IiwgeW91CitjYW4gcnVuICJnaXQgcHJ1bmUiIHRvIGdldCByaWQgb2YgdGhvc2Ugb3JpZ2luYWwgdGhyZWUgY29tbWl0cy4KKworV2hpbGUgSSBhbSB0YWxraW5nIGFib3V0ICJnaXQgcmViYXNlIiwgSSBzaG91bGQgdGFsayBhYm91dCBob3cKK3RvIGRvIGNoZXJyeXBpY2tpbmcgdXNpbmcgb25seSB0aGUgY29yZSBHaXQgdG9vbHMuCisKK0xldCdzIGdvIGJhY2sgdG8gdGhlIGVhcmxpZXIgcGljdHVyZSwgd2l0aCBkaWZmZXJlbnQgbGFiZWxzLgorCitZb3UsIGFzIGFuIGluZGl2aWR1YWwgZGV2ZWxvcGVyLCBjbG9uZWQgdXBzdHJlYW0gcmVwb3NpdG9yeSBhbmQKK21hZGUgYSBjb3VwbGUgb2YgY29tbWl0cyBvbiB0b3Agb2YgaXQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5b3VyICJtYXN0ZXIiIGhlYWQKKyAgIHVwc3RyZWFtIC0tPiAjMSAtLT4gIzIgLS0+ICMzCisKK1lvdSB3b3VsZCB3YW50IGNoYW5nZXMgIzIgYW5kICMzIGluY29ycG9yYXRlZCBpbiB0aGUgdXBzdHJlYW0sCit3aGlsZSB5b3UgZmVlbCB0aGF0ICMxIG1heSBuZWVkIGZ1cnRoZXIgaW1wcm92ZW1lbnRzLiAgU28geW91CitwcmVwYXJlICMyIGFuZCAjMyBmb3IgZS1tYWlsIHN1Ym1pc3Npb24uCisKKyAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggbWFzdGVyXl4gbWFzdGVyCisKK1RoaXMgY3JlYXRlcyB0d28gZmlsZXMsIDAwMDEtWFhYWC5wYXRjaCBhbmQgMDAwMi1YWFhYLnBhdGNoLiAgU2VuZAordGhlbSBvdXQgIlRvOiAiIHlvdXIgcHJvamVjdCBtYWludGFpbmVyIGFuZCAiQ2M6ICIgeW91ciBtYWlsaW5nCitsaXN0LiAgWW91IGNvdWxkIHVzZSBjb250cmlidXRlZCBzY3JpcHQgZ2l0LXNlbmQtZW1haWwgaWYKK3lvdXIgaG9zdCBoYXMgbmVjZXNzYXJ5IHBlcmwgbW9kdWxlcyBmb3IgdGhpcywgYnV0IHlvdXIgdXN1YWwKK01VQSB3b3VsZCBkbyBhcyBsb25nIGFzIGl0IGRvZXMgbm90IGNvcnJ1cHQgd2hpdGVzcGFjZXMgaW4gdGhlCitwYXRjaC4KKworVGhlbiB5b3Ugd291bGQgd2FpdCwgYW5kIHlvdSBmaW5kIG91dCB0aGF0IHRoZSB1cHN0cmVhbSBwaWNrZWQKK3VwIHlvdXIgY2hhbmdlcywgYWxvbmcgd2l0aCBvdGhlciBjaGFuZ2VzLgorCisgICB3aGVyZSAgICAgICAgICAgICAgICAgICAgICAqeW91ciAibWFzdGVyIiBoZWFkCisgIHVwc3RyZWFtIC0tPiAjMSAtLT4gIzIgLS0+ICMzCisgICAgdXNlZCAgIFwKKyAgIHRvIGJlICAgICBcLS0+ICNBIC0tPiAjMicgLS0+ICMzJyAtLT4gI0IgLS0+ICNDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXBzdHJlYW0gaGVhZAorCitUaGUgdHdvIGNvbW1pdHMgIzInIGFuZCAjMycgaW4gdGhlIGFib3ZlIHBpY3R1cmUgcmVjb3JkIHRoZSBzYW1lCitjaGFuZ2VzIHlvdXIgZS1tYWlsIHN1Ym1pc3Npb24gZm9yICMyIGFuZCAjMyBjb250YWluZWQsIGJ1dAorcHJvYmFibHkgd2l0aCB0aGUgbmV3IHNpZ24tb2ZmIGxpbmUgYWRkZWQgYnkgdGhlIHVwc3RyZWFtCittYWludGFpbmVyIGFuZCBkZWZpbml0ZWx5IHdpdGggZGlmZmVyZW50IGNvbW1pdHRlciBhbmQgYW5jZXN0cnkKK2luZm9ybWF0aW9uLCB0aGV5IGFyZSBkaWZmZXJlbnQgb2JqZWN0cyBmcm9tICMyIGFuZCAjMyBjb21taXRzLgorCitZb3UgZmV0Y2ggZnJvbSB1cHN0cmVhbSwgYnV0IG5vdCBtZXJnZS4KKworICAgICQgZ2l0IGZldGNoIHVwc3RyZWFtCisKK1RoaXMgbGVhdmVzIHRoZSB1cGRhdGVkIHVwc3RyZWFtIGhlYWQgaW4gLmdpdC9GRVRDSF9IRUFEIGJ1dAorZG9lcyBub3QgdG91Y2ggeW91ciAuZ2l0L0hFQUQgb3IgLmdpdC9yZWZzL2hlYWRzL21hc3Rlci4KK1lvdSBydW4gImdpdCByZWJhc2UiIG5vdy4KKworICAgICQgZ2l0IHJlYmFzZSBGRVRDSF9IRUFEIG1hc3RlcgorCitFYXJsaWVyLCBJIHNhaWQgdGhhdCByZWJhc2UgYXBwbGllcyBhbGwgdGhlIGNvbW1pdHMgZnJvbSB5b3VyCiticmFuY2ggb24gdG9wIG9mIHRoZSB1cHN0cmVhbSBoZWFkLiAgV2VsbCwgSSBsaWVkLiAgImdpdCByZWJhc2UiCitpcyBhIGJpdCBzbWFydGVyIHRoYW4gdGhhdCBhbmQgbm90aWNlcyB0aGF0ICMyIGFuZCAjMyBuZWVkIG5vdAorYmUgYXBwbGllZCwgc28gaXQgb25seSBhcHBsaWVzICMxLiAgVGhlIGNvbW1pdCBhbmNlc3RyeSBncmFwaAorYmVjb21lcyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisgICB3aGVyZSAgICAgICAgICAgICAgICAgICAgICp5b3VyIG9sZCAibWFzdGVyIiBoZWFkCisgIHVwc3RyZWFtIC0tPiAjMSAtLT4gIzIgLS0+ICMzCisgICAgdXNlZCAgIFwgICAgICAgICAgICAgICAgICAgICAgeW91ciBuZXcgIm1hc3RlciIgaGVhZCoKKyAgIHRvIGJlICAgICBcLS0+ICNBIC0tPiAjMicgLS0+ICMzJyAtLT4gI0IgLS0+ICNDIC0tPiAjMScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1cHN0cmVhbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZAorCitBZ2FpbiwgImdpdCBwcnVuZSIgd291bGQgZGlzY2FyZCB0aGUgZGlzdXNlZCBjb21taXRzICMxLSMzIGFuZAoreW91IGNvbnRpbnVlIG9uIHN0YXJ0aW5nIGZyb20gdGhlIG5ldyAibWFzdGVyIiBoZWFkLCB3aGljaCBpcwordGhlICMxJyBjb21taXQuCisKKy1qYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJ1aWxkLWZyb20tdXBkYXRlLWhvb2sudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJ1aWxkLWZyb20tdXBkYXRlLWhvb2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMjE5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlYnVpbGQtZnJvbS11cGRhdGUtaG9vay50eHQKQEAgLTAsMCArMSw5MCBAQAorU3ViamVjdDogW0hPV1RPXSBVc2luZyBwb3N0LXVwZGF0ZSBob29rCitNZXNzYWdlLUlEOiA8N3Z5ODZvNnVzeC5mc2ZAYXNzaWduZWQtYnktZGhjcC5jb3gubmV0PgorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorRGF0ZTogRnJpLCAyNiBBdWcgMjAwNSAxODoxOToxMCAtMDcwMAorQWJzdHJhY3Q6IEluIHRoaXMgaG93LXRvIGFydGljbGUsIEpDIHRhbGtzIGFib3V0IGhvdyBoZQorIHVzZXMgdGhlIHBvc3QtdXBkYXRlIGhvb2sgdG8gYXV0b21hdGUgR2l0IGRvY3VtZW50YXRpb24gcGFnZQorIHNob3duIGF0IGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy8uCitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKKworSG93IHRvIHJlYnVpbGQgZnJvbSB1cGRhdGUgaG9vaworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgcGFnZXMgdW5kZXIgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzLworYXJlIGJ1aWx0IGZyb20gRG9jdW1lbnRhdGlvbi8gZGlyZWN0b3J5IG9mIHRoZSBnaXQuZ2l0IHByb2plY3QKK2FuZCBuZWVkZWQgdG8gYmUga2VwdCB1cC10by1kYXRlLiAgVGhlIHd3dy5rZXJuZWwub3JnLyBzZXJ2ZXJzCithcmUgbWlycm9yZWQgYW5kIEkgd2FzIHRvbGQgdGhhdCB0aGUgb3JpZ2luIG9mIHRoZSBtaXJyb3IgaXMgb24KK3RoZSBtYWNoaW5lICRzb21lLmtlcm5lbC5vcmcsIG9uIHdoaWNoIEkgd2FzIGdpdmVuIGFuIGFjY291bnQKK3doZW4gSSB0b29rIG92ZXIgR2l0IG1haW50YWluZXJzaGlwIGZyb20gTGludXMuCisKK1RoZSBkaXJlY3RvcmllcyByZWxldmFudCB0byB0aGlzIGhvdy10byBhcmUgdGhlc2UgdHdvOgorCisgICAgL3B1Yi9zY20vZ2l0L2dpdC5naXQvCVRoZSBwdWJsaWMgR2l0IHJlcG9zaXRvcnkuCisgICAgL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MvCVRoZSBIVE1MIGRvY3VtZW50YXRpb24gcGFnZS4KKworU28gSSBtYWRlIGEgcmVwb3NpdG9yeSB0byBnZW5lcmF0ZSB0aGUgZG9jdW1lbnRhdGlvbiB1bmRlciBteQoraG9tZSBkaXJlY3Rvcnkgb3ZlciB0aGVyZS4KKworICAgICQgY2QKKyAgICAkIG1rZGlyIGRvYy1naXQgJiYgY2QgZG9jLWdpdAorICAgICQgZ2l0IGNsb25lIC9wdWIvc2NtL2dpdC9naXQuZ2l0LyBkb2NnZW4KKworV2hhdCBuZWVkcyB0byBoYXBwZW4gaXMgdG8gdXBkYXRlIHRoZSAkSE9NRS9kb2MtZ2l0L2RvY2dlbi8KK3dvcmtpbmcgdHJlZSwgYnVpbGQgSFRNTCBkb2NzIHRoZXJlIGFuZCBpbnN0YWxsIHRoZSByZXN1bHQgaW4KKy9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzLyBkaXJlY3RvcnkuICBTbyBJIHdyb3RlIGEgbGl0dGxlCitzY3JpcHQ6CisKKyAgICAkIGNhdCA+ZG9kb2RvYy5zaCA8PFxFT0YKKyAgICAjIS9iaW4vc2gKKyAgICBjZCAkSE9NRS9kb2MtZ2l0L2RvY2dlbiB8fCBleGl0CisKKyAgICB1bnNldCBHSVRfRElSCisKKyAgICBnaXQgcHVsbCAvcHViL3NjbS9naXQvZ2l0LmdpdC8gbWFzdGVyICYmCisgICAgY2QgRG9jdW1lbnRhdGlvbiAmJgorICAgIG1ha2UgaW5zdGFsbC13ZWJkb2MKKyAgICBFT0YKKworSW5pdGlhbGx5IEkgdXNlZCB0byBydW4gdGhpcyBieSBoYW5kIHdoZW5ldmVyIEkgcHVzaCBpbnRvIHRoZQorcHVibGljIEdpdCByZXBvc2l0b3J5LiAgVGhlbiBJIGRpZCBhIGNyb24gam9iIHRoYXQgcmFuIHR3aWNlIGEKK2RheS4gIFRoZSBjdXJyZW50IHJvdW5kIHVzZXMgdGhlIHBvc3QtdXBkYXRlIGhvb2sgbWVjaGFuaXNtLAorbGlrZSB0aGlzOgorCisgICAgJCBjYXQgPi9wdWIvc2NtL2dpdC9naXQuZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlIDw8XEVPRgorICAgICMhL2Jpbi9zaAorICAgICMKKyAgICAjIEFuIGV4YW1wbGUgaG9vayBzY3JpcHQgdG8gcHJlcGFyZSBhIHBhY2tlZCByZXBvc2l0b3J5IGZvciB1c2Ugb3ZlcgorICAgICMgZHVtYiB0cmFuc3BvcnRzLgorICAgICMKKyAgICAjIFRvIGVuYWJsZSB0aGlzIGhvb2ssIG1ha2UgdGhpcyBmaWxlIGV4ZWN1dGFibGUgYnkgImNobW9kICt4IHBvc3QtdXBkYXRlIi4KKworICAgIGNhc2UgIiAkKiAiIGluCisgICAgKicgcmVmcy9oZWFkcy9tYXN0ZXIgJyopCisgICAgICAgICAgICBlY2hvICRIT01FL2RvYy1naXQvZG9kb2RvYy5zaCB8IGF0IG5vdworICAgICAgICAgICAgOzsKKyAgICBlc2FjCisgICAgZXhlYyBnaXQtdXBkYXRlLXNlcnZlci1pbmZvCisgICAgRU9GCisgICAgJCBjaG1vZCAreCAvcHViL3NjbS9naXQvZ2l0LmdpdC9ob29rcy9wb3N0LXVwZGF0ZQorCitUaGVyZSBhcmUgZm91ciB0aGluZ3Mgd29ydGggbWVudGlvbmluZzoKKworIC0gVGhlIHVwZGF0ZS1ob29rIGlzIHJ1biBhZnRlciB0aGUgcmVwb3NpdG9yeSBhY2NlcHRzIGEgImdpdAorICAgcHVzaCIsIHVuZGVyIG15IHVzZXIgcHJpdmlsZWdlLiAgSXQgaXMgZ2l2ZW4gdGhlIGZ1bGwgbmFtZXMKKyAgIG9mIHJlZnMgdGhhdCBoYXZlIGJlZW4gdXBkYXRlZCBhcyBhcmd1bWVudHMuICBNeSBwb3N0LXVwZGF0ZQorICAgcnVucyB0aGUgZG9kb2RvYy5zaCBzY3JpcHQgb25seSB3aGVuIHRoZSBtYXN0ZXIgaGVhZCBpcworICAgdXBkYXRlZC4KKworIC0gV2hlbiB1cGRhdGUtaG9vayBpcyBydW4sIEdJVF9ESVIgaXMgc2V0IHRvICcuJyBieSB0aGUgY2FsbGluZworICAgcmVjZWl2ZS1wYWNrLiAgVGhpcyBpcyBpbmhlcml0ZWQgYnkgdGhlIGRvZG9kb2Muc2ggcnVuIHZpYQorICAgdGhlICJhdCIgY29tbWFuZCwgYW5kIG5lZWRzIHRvIGJlIHVuc2V0OyBvdGhlcndpc2UsICJnaXQKKyAgIHB1bGwiIGl0IGRvZXMgaW50byAkSE9NRS9kb2MtZ2l0L2RvY2dlbi8gcmVwb3NpdG9yeSB3b3VsZCBub3QKKyAgIHdvcmsgY29ycmVjdGx5LgorCisgLSBUaGUgc3Rkb3V0IG9mIHVwZGF0ZSBob29rIHNjcmlwdCBpcyBub3QgY29ubmVjdGVkIHRvIGdpdAorICAgcHVzaDsgSSBydW4gdGhlIGhlYXZ5IHBhcnQgb2YgdGhlIGNvbW1hbmQgaW5zaWRlICJhdCIsIHRvCisgICByZWNlaXZlIHRoZSBleGVjdXRpb24gcmVwb3J0IHZpYSBlLW1haWwuCisKKyAtIFRoaXMgaXMgc3RpbGwgY3J1ZGUgYW5kIGRvZXMgbm90IHByb3RlY3QgYWdhaW5zdCBzaW11bHRhbmVvdXMKKyAgIG1ha2UgaW52b2NhdGlvbnMgc3RvbXBpbmcgb24gZWFjaCBvdGhlci4gIEkgd291bGQgbmVlZCB0byBhZGQKKyAgIHNvbWUgbG9ja2luZyBtZWNoYW5pc20gZm9yIHRoaXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlY292ZXItY29ycnVwdGVkLWJsb2Itb2JqZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vcmVjb3Zlci1jb3JydXB0ZWQtYmxvYi1vYmplY3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiM2IxODgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlY292ZXItY29ycnVwdGVkLWJsb2Itb2JqZWN0LnR4dApAQCAtMCwwICsxLDE0NCBAQAorRGF0ZTogRnJpLCA5IE5vdiAyMDA3IDA4OjI4OjM4IC0wODAwIChQU1QpCitGcm9tOiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CitTdWJqZWN0OiBjb3JydXB0IG9iamVjdCBvbiBnaXQtZ2MKK0Fic3RyYWN0OiBTb21lIHRyaWNrcyB0byByZWNvbnN0cnVjdCBibG9iIG9iamVjdHMgaW4gb3JkZXIgdG8gZml4CisgYSBjb3JydXB0ZWQgcmVwb3NpdG9yeS4KK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gcmVjb3ZlciBhIGNvcnJ1cHRlZCBibG9iIG9iamVjdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK09uIEZyaSwgOSBOb3YgMjAwNywgWW9zc2kgTGV5Ym92aWNoIHdyb3RlOgorPgorPiBEaWQgbm90IGhlbHAgc3RpbGwgdGhlIHJlcG9zaXRvcnkgbG9vayBmb3IgdGhpcyBvYmplY3Q/Cis+IEFueSBvbmUga25vdyBob3cgY2FuIEkgdHJhY2sgdGhpcyBvYmplY3QgYW5kIHVuZGVyc3RhbmQgd2hpY2ggZmlsZSBpcyBpdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU28gZXhhY3RseSAqYmVjYXVzZSogdGhlIFNIQS0xIGhhc2ggaXMgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlLCB0aGUgaGFzaAoraXRzZWxmIGRvZXNuJ3QgYWN0dWFsbHkgdGVsbCB5b3UgYW55dGhpbmcsIGluIG9yZGVyIHRvIGZpeCBhIGNvcnJ1cHQKK29iamVjdCB5b3UgYmFzaWNhbGx5IGhhdmUgdG8gZmluZCB0aGUgIm9yaWdpbmFsIHNvdXJjZSIgZm9yIGl0LgorCitUaGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhhdCBpcyBhbG1vc3QgYWx3YXlzIHRvIGhhdmUgYmFja3VwcywgYW5kIGZpbmQgdGhlCitzYW1lIG9iamVjdCBzb21ld2hlcmUgZWxzZS4gQmFja3VwcyByZWFsbHkgYXJlIGEgZ29vZCBpZGVhLCBhbmQgR2l0IG1ha2VzCitpdCBwcmV0dHkgZWFzeSAoaWYgbm90aGluZyBlbHNlLCBqdXN0IGNsb25lIHRoZSByZXBvc2l0b3J5IHNvbWV3aGVyZSBlbHNlLAorYW5kIG1ha2Ugc3VyZSB0aGF0IHlvdSBkbyAqbm90KiB1c2UgYSBoYXJkLWxpbmtlZCBjbG9uZSwgYW5kIHByZWZlcmFibHkKK25vdCB0aGUgc2FtZSBkaXNrL21hY2hpbmUpLgorCitCdXQgc2luY2UgeW91IGRvbid0IHNlZW0gdG8gaGF2ZSBiYWNrdXBzIHJpZ2h0IG5vdywgdGhlIGdvb2QgbmV3cyBpcyB0aGF0Citlc3BlY2lhbGx5IHdpdGggYSBzaW5nbGUgYmxvYiBiZWluZyBjb3JydXB0LCB0aGVzZSB0aGluZ3MgKmFyZSogc29tZXdoYXQKK2RlYnVnZ2FibGUuCisKK0ZpcnN0IG9mZiwgbW92ZSB0aGUgY29ycnVwdCBvYmplY3QgYXdheSwgYW5kICpzYXZlKiBpdC4gVGhlIG1vc3QgY29tbW9uCitjYXVzZSBvZiBjb3JydXB0aW9uIHNvIGZhciBoYXMgYmVlbiBtZW1vcnkgY29ycnVwdGlvbiwgYnV0IGV2ZW4gc28sIHRoZXJlCithcmUgcGVvcGxlIHdobyB3b3VsZCBiZSBpbnRlcmVzdGVkIGluIHNlZWluZyB0aGUgY29ycnVwdGlvbiAtIGJ1dCBpdCdzCitiYXNpY2FsbHkgaW1wb3NzaWJsZSB0byBqdWRnZSB0aGUgY29ycnVwdGlvbiB1bnRpbCB3ZSBjYW4gYWxzbyBzZWUgdGhlCitvcmlnaW5hbCBvYmplY3QsIHNvIHJpZ2h0IG5vdyB0aGUgY29ycnVwdCBvYmplY3QgaXMgdXNlbGVzcywgYnV0IGl0J3MgdmVyeQoraW50ZXJlc3RpbmcgZm9yIHRoZSBmdXR1cmUsIGluIHRoZSBob3BlIHRoYXQgeW91IGNhbiByZS1jcmVhdGUgYQorbm9uLWNvcnJ1cHQgdmVyc2lvbi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NvOgorCis+IGliXSQgbXYgLmdpdC9vYmplY3RzLzRiLzk0NThiMzc4NjIyODM2OWM2MzkzNmRiNjU4MjdkZTNjYzA2MjAwIC4uLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIGFsdGhvdWdoIGl0J3MgdXN1YWxseSBiZXN0IHRvIHNhdmUgaXQgdW5kZXIKK2l0J3MgZnVsbCBTSEEtMSBuYW1lICh5b3UganVzdCBkcm9wcGVkIHRoZSAiNGIiIGZyb20gdGhlIHJlc3VsdCA7KS4KKworTGV0J3Mgc2VlIHdoYXQgdGhhdCB0ZWxscyB1czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKz4gaWJdJCBnaXQtZnNjayAtLWZ1bGwKKz4gYnJva2VuIGxpbmsgZnJvbSAgICB0cmVlIDJkOTI2M2M2ZDIzNTk1ZTdjYjJhMjFlNWViYmI1MzY1NTI3OGRmZjgKKz4gICAgICAgICAgICAgIHRvICAgIGJsb2IgNGI5NDU4YjM3ODYyMjgzNjljNjM5MzZkYjY1ODI3ZGUzY2MwNjIwMAorPiBtaXNzaW5nIGJsb2IgNGI5NDU4YjM3ODYyMjgzNjljNjM5MzZkYjY1ODI3ZGUzY2MwNjIwMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT2ssIEkgcmVtb3ZlZCB0aGUgImRhbmdsaW5nIGNvbW1pdCIgbWVzc2FnZXMsIGJlY2F1c2UgdGhleSBhcmUganVzdAorbWVzc2FnZXMgYWJvdXQgdGhlIGZhY3QgdGhhdCB5b3UgcHJvYmFibHkgaGF2ZSByZWJhc2VkIGV0Yywgc28gdGhleSdyZSBub3QKK2F0IGFsbCBpbnRlcmVzdGluZy4gQnV0IHdoYXQgcmVtYWlucyBpcyBzdGlsbCB2ZXJ5IHVzZWZ1bC4gSW4gcGFydGljdWxhciwKK3dlIG5vdyBrbm93IHdoaWNoIHRyZWUgcG9pbnRzIHRvIGl0IQorCitOb3cgeW91IGNhbiBkbworCisJZ2l0IGxzLXRyZWUgMmQ5MjYzYzZkMjM1OTVlN2NiMmEyMWU1ZWJiYjUzNjU1Mjc4ZGZmOAorCit3aGljaCB3aWxsIHNob3cgc29tZXRoaW5nIGxpa2UKKworCTEwMDY0NCBibG9iIDhkMTQ1MzE4NDZiOTViZmEzNTY0YjU4Y2NmYjc5MTNhMDM0MzIzYjggICAgLmdpdGlnbm9yZQorCTEwMDY0NCBibG9iIGViZjliZjg0ZGEwYWFiNWVkOTQ0MjY0YTVkYjJhNjVmZTNhM2U4ODMgICAgLm1haWxtYXAKKwkxMDA2NDQgYmxvYiBjYTQ0MmQzMTNkODZkYzY3ZTBhMmU1ZDU4NGI0NjViZDM4MmNiZjVjICAgIENPUFlJTkcKKwkxMDA2NDQgYmxvYiBlZTkwOWYyY2M0OWU1NGYwNzk5YTQ3MzlkMjRjNGNiOTE1MWFlNDUzICAgIENSRURJVFMKKwkwNDAwMDAgdHJlZSAwZjVmNzA5YzE3YWQ4OWU3MmJkYmJlZjZlYTIyMWM2OTgwNzAwOWY2ICAgIERvY3VtZW50YXRpb24KKwkxMDA2NDQgYmxvYiAxNTcwZDI0OGFkOTIzN2U0ZmE2ZTRkMDc5MzM2YjlkYTYyZDliYTMyICAgIEtidWlsZAorCTEwMDY0NCBibG9iIDFjN2MyMjlhMDkyNjY1YjExY2Q0NmEyNWRiZDQwZmVlYjMxNjYxZDkgICAgTUFJTlRBSU5FUlMKKwkuLi4KKworYW5kIHlvdSBzaG91bGQgbm93IGhhdmUgYSBsaW5lIHRoYXQgbG9va3MgbGlrZQorCisJMTAwNjQgYmxvYiA0Yjk0NThiMzc4NjIyODM2OWM2MzkzNmRiNjU4MjdkZTNjYzA2MjAwCW15LW1hZ2ljLWZpbGUKKworaW4gdGhlIG91dHB1dC4gVGhpcyBhbHJlYWR5IHRlbGxzIHlvdSBhICpsb3QqIGl0IHRlbGxzIHlvdSB3aGF0IGZpbGUgdGhlCitjb3JydXB0IGJsb2IgY2FtZSBmcm9tIQorCitOb3csIGl0IGRvZXNuJ3QgdGVsbCB5b3UgcXVpdGUgZW5vdWdoLCB0aG91Z2g6IGl0IGRvZXNuJ3QgdGVsbCB3aGF0CisqdmVyc2lvbiogb2YgdGhlIGZpbGUgZGlkbid0IGdldCBjb3JyZWN0bHkgd3JpdHRlbiEgWW91IG1pZ2h0IGJlIHJlYWxseQorbHVja3ksIGFuZCBpdCBtYXkgYmUgdGhlIHZlcnNpb24gdGhhdCB5b3UgYWxyZWFkeSBoYXZlIGNoZWNrZWQgb3V0IGluIHlvdXIKK3dvcmtpbmcgdHJlZSwgaW4gd2hpY2ggY2FzZSBmaXhpbmcgdGhpcyBwcm9ibGVtIGlzIHJlYWxseSBzaW1wbGUsIGp1c3QgZG8KKworCWdpdCBoYXNoLW9iamVjdCAtdyBteS1tYWdpYy1maWxlCisKK2FnYWluLCBhbmQgaWYgaXQgb3V0cHV0cyB0aGUgbWlzc2luZyBTSEEtMSAoNGI5NDUuLikgeW91J3JlIG5vdyBhbGwgZG9uZSEKKworQnV0IHRoYXQncyB0aGUgcmVhbGx5IGx1Y2t5IGNhc2UsIHNvIGxldCdzIGFzc3VtZSB0aGF0IGl0IHdhcyBzb21lIG9sZGVyCit2ZXJzaW9uIHRoYXQgd2FzIGJyb2tlbi4gSG93IGRvIHlvdSB0ZWxsIHdoaWNoIHZlcnNpb24gaXQgd2FzPworCitUaGUgZWFzaWVzdCB3YXkgdG8gZG8gaXQgaXMgdG8gZG8KKworCWdpdCBsb2cgLS1yYXcgLS1hbGwgLS1mdWxsLWhpc3RvcnkgLS0gc3ViZGlyZWN0b3J5L215LW1hZ2ljLWZpbGUKKworYW5kIHRoYXQgd2lsbCBzaG93IHlvdSB0aGUgd2hvbGUgbG9nIGZvciB0aGF0IGZpbGUgKHBsZWFzZSByZWFsaXplIHRoYXQKK3RoZSB0cmVlIHlvdSBoYWQgbWF5IG5vdCBiZSB0aGUgdG9wLWxldmVsIHRyZWUsIHNvIHlvdSBuZWVkIHRvIGZpZ3VyZSBvdXQKK3doaWNoIHN1YmRpcmVjdG9yeSBpdCB3YXMgaW4gb24geW91ciBvd24pLCBhbmQgYmVjYXVzZSB5b3UncmUgYXNraW5nIGZvcgorcmF3IG91dHB1dCwgeW91J2xsIG5vdyBnZXQgc29tZXRoaW5nIGxpa2UKKworCWNvbW1pdCBhYmMKKwlBdXRob3I6CisJRGF0ZToKKwkgIC4uCisJOjEwMDY0NCAxMDA2NDQgNGI5NDU4Yi4uLiBuZXdzaGEuLi4gTSAgc29tZWRpcmVjdG9yeS9teS1tYWdpYy1maWxlCisKKworCWNvbW1pdCB4eXoKKwlBdXRob3I6CisJRGF0ZToKKworCSAgLi4KKwk6MTAwNjQ0IDEwMDY0NCBvbGRzaGEuLi4gNGI5NDU4Yi4uLiBNCXNvbWVkaXJlY3RvcnkvbXktbWFnaWMtZmlsZQorCithbmQgdGhpcyBhY3R1YWxseSB0ZWxscyB5b3Ugd2hhdCB0aGUgKnByZXZpb3VzKiBhbmQgKnN1YnNlcXVlbnQqIHZlcnNpb25zCitvZiB0aGF0IGZpbGUgd2VyZSEgU28gbm93IHlvdSBjYW4gbG9vayBhdCB0aG9zZSAoIm9sZHNoYSIgYW5kICJuZXdzaGEiCityZXNwZWN0aXZlbHkpLCBhbmQgaG9wZWZ1bGx5IHlvdSBoYXZlIGRvbmUgY29tbWl0cyBvZnRlbiwgYW5kIGNhbgorcmUtY3JlYXRlIHRoZSBtaXNzaW5nIG15LW1hZ2ljLWZpbGUgdmVyc2lvbiBieSBsb29raW5nIGF0IHRob3NlIG9sZGVyIGFuZAorbmV3ZXIgdmVyc2lvbnMhCisKK0lmIHlvdSBjYW4gZG8gdGhhdCwgeW91IGNhbiBub3cgcmVjcmVhdGUgdGhlIG1pc3Npbmcgb2JqZWN0IHdpdGgKKworCWdpdCBoYXNoLW9iamVjdCAtdyA8cmVjcmVhdGVkLWZpbGU+CisKK2FuZCB5b3VyIHJlcG9zaXRvcnkgaXMgZ29vZCBhZ2FpbiEKKworKEJ0dywgeW91IGNvdWxkIGhhdmUgaWdub3JlZCB0aGUgZnNjaywgYW5kIHN0YXJ0ZWQgd2l0aCBkb2luZyBhCisKKwlnaXQgbG9nIC0tcmF3IC0tYWxsCisKK2FuZCBqdXN0IGxvb2tlZCBmb3IgdGhlIHNoYSBvZiB0aGUgbWlzc2luZyBvYmplY3QgKDRiOTQ1OGIuLikgaW4gdGhhdAord2hvbGUgdGhpbmcuIEl0J3MgdXAgdG8geW91IC0gR2l0IGRvZXMgKmhhdmUqIGEgbG90IG9mIGluZm9ybWF0aW9uLCBpdCBpcworanVzdCBtaXNzaW5nIG9uZSBwYXJ0aWN1bGFyIGJsb2IgdmVyc2lvbi4KKworVHJ5aW5nIHRvIHJlY3JlYXRlIHRyZWVzIGFuZCBlc3BlY2lhbGx5IGNvbW1pdHMgaXMgKm11Y2gqIGhhcmRlci4gU28geW91Cit3ZXJlIGx1Y2t5IHRoYXQgaXQncyBhIGJsb2IuIEl0J3MgcXVpdGUgcG9zc2libGUgdGhhdCB5b3UgY2FuIHJlY3JlYXRlIHRoZQordGhpbmcuCisKKwkJCUxpbnVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlY292ZXItY29ycnVwdGVkLW9iamVjdC1oYXJkZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWNvdmVyLWNvcnJ1cHRlZC1vYmplY3QtaGFyZGVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTk0ZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWNvdmVyLWNvcnJ1cHRlZC1vYmplY3QtaGFyZGVyLnR4dApAQCAtMCwwICsxLDQ3OSBAQAorRGF0ZTogV2VkLCAxNiBPY3QgMjAxMyAwNDozNDowMSAtMDQwMAorRnJvbTogSmVmZiBLaW5nIDxwZWZmQHBlZmYubmV0PgorU3ViamVjdDogcGFjayBjb3JydXB0aW9uIHBvc3QtbW9ydGVtCitBYnN0cmFjdDogUmVjb3ZlcmluZyBhIGNvcnJ1cHRlZCBvYmplY3Qgd2hlbiBubyBnb29kIGNvcHkgaXMgYXZhaWxhYmxlLgorQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jCisKK0hvdyB0byByZWNvdmVyIGFuIG9iamVjdCBmcm9tIHNjcmF0Y2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSSB3YXMgcmVjZW50bHkgcHJlc2VudGVkIHdpdGggYSByZXBvc2l0b3J5IHdpdGggYSBjb3JydXB0ZWQgcGFja2ZpbGUsCithbmQgd2FzIGFza2VkIGlmIHRoZSBkYXRhIHdhcyByZWNvdmVyYWJsZS4gVGhpcyBwb3N0LW1vcnRlbSBkZXNjcmliZXMKK3RoZSBzdGVwcyBJIHRvb2sgdG8gaW52ZXN0aWdhdGUgYW5kIGZpeCB0aGUgcHJvYmxlbS4gSSB0aG91Z2h0IG90aGVycworbWlnaHQgZmluZCB0aGUgcHJvY2VzcyBpbnRlcmVzdGluZywgYW5kIGl0IG1pZ2h0IGhlbHAgc29tZWJvZHkgaW4gdGhlCitzYW1lIHNpdHVhdGlvbi4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK05vdGU6IEluIHRoaXMgY2FzZSwgbm8gZ29vZCBjb3B5IG9mIHRoZSByZXBvc2l0b3J5IHdhcyBhdmFpbGFibGUuIEZvcgordGhlIG11Y2ggZWFzaWVyIGNhc2Ugd2hlcmUgeW91IGNhbiBnZXQgdGhlIGNvcnJ1cHRlZCBvYmplY3QgZnJvbQorZWxzZXdoZXJlLCBzZWUgbGluazpyZWNvdmVyLWNvcnJ1cHRlZC1ibG9iLW9iamVjdC5odG1sW3RoaXMgaG93dG9dLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworSSBzdGFydGVkIHdpdGggYW4gZnNjaywgd2hpY2ggZm91bmQgYSBwcm9ibGVtIHdpdGggZXhhY3RseSBvbmUgb2JqZWN0CisoSSd2ZSB1c2VkICRwYWNrIGFuZCAkb2JqIGJlbG93IHRvIGtlZXAgdGhlIG91dHB1dCByZWFkYWJsZSwgYW5kIGFsc28KK2JlY2F1c2UgSSdsbCByZWZlciB0byB0aGVtIGxhdGVyKToKKworLS0tLS0tLS0tLS0KKyAgICAkIGdpdCBmc2NrCisgICAgZXJyb3I6ICRwYWNrIFNIQTEgY2hlY2tzdW0gbWlzbWF0Y2gKKyAgICBlcnJvcjogaW5kZXggQ1JDIG1pc21hdGNoIGZvciBvYmplY3QgJG9iaiBmcm9tICRwYWNrIGF0IG9mZnNldCA1MTY1Mzg3MworICAgIGVycm9yOiBpbmZsYXRlOiBkYXRhIHN0cmVhbSBlcnJvciAoaW5jb3JyZWN0IGRhdGEgY2hlY2spCisgICAgZXJyb3I6IGNhbm5vdCB1bnBhY2sgJG9iaiBmcm9tICRwYWNrIGF0IG9mZnNldCA1MTY1Mzg3MworLS0tLS0tLS0tLS0KKworVGhlIHBhY2sgY2hlY2tzdW0gZmFpbGluZyBtZWFucyBhIGJ5dGUgaXMgbXVuZ2VkIHNvbWV3aGVyZSwgYW5kIGl0IGlzCitwcmVzdW1hYmx5IGluIHRoZSBvYmplY3QgbWVudGlvbmVkIChzaW5jZSBib3RoIHRoZSBpbmRleCBjaGVja3N1bSBhbmQKK3psaWIgd2VyZSBmYWlsaW5nKS4KKworUmVhZGluZyB0aGUgemxpYiBzb3VyY2UgY29kZSwgSSBmb3VuZCB0aGF0ICJpbmNvcnJlY3QgZGF0YSBjaGVjayIgbWVhbnMKK3RoYXQgdGhlIGFkbGVyLTMyIGNoZWNrc3VtIGF0IHRoZSBlbmQgb2YgdGhlIHpsaWIgZGF0YSBkaWQgbm90IG1hdGNoIHRoZQoraW5mbGF0ZWQgZGF0YS4gU28gc3RlcHBpbmcgdGhlIGRhdGEgdGhyb3VnaCB6bGliIHdvdWxkIG5vdCBoZWxwLCBhcyBpdAorZGlkIG5vdCBmYWlsIHVudGlsIHRoZSB2ZXJ5IGVuZCwgd2hlbiB3ZSByZWFsaXplIHRoZSBDUkMgZG9lcyBub3QgbWF0Y2guCitUaGUgcHJvYmxlbWF0aWMgYnl0ZXMgY291bGQgYmUgYW55d2hlcmUgaW4gdGhlIG9iamVjdCBkYXRhLgorCitUaGUgZmlyc3QgdGhpbmcgSSBkaWQgd2FzIHB1bGwgdGhlIGJyb2tlbiBkYXRhIG91dCBvZiB0aGUgcGFja2ZpbGUuIEkKK25lZWRlZCB0byBrbm93IGhvdyBiaWcgdGhlIG9iamVjdCB3YXMsIHdoaWNoIEkgZm91bmQgb3V0IHdpdGg6CisKKy0tLS0tLS0tLS0tLQorICAgICQgZ2l0IHNob3ctaW5kZXggPCRpZHggfCBjdXQgLWQnICcgLWYxIHwgc29ydCAtbiB8IGdyZXAgLUExIDUxNjUzODczCisgICAgNTE2NTM4NzMKKyAgICA1MTY2NDczNgorLS0tLS0tLS0tLS0tCisKK1Nob3ctaW5kZXggZ2l2ZXMgdXMgdGhlIGxpc3Qgb2Ygb2JqZWN0cyBhbmQgdGhlaXIgb2Zmc2V0cy4gV2UgdGhyb3cgYXdheQorZXZlcnl0aGluZyBidXQgdGhlIG9mZnNldHMsIGFuZCB0aGVuIHNvcnQgdGhlbSBzbyB0aGF0IG91ciBpbnRlcmVzdGluZworb2Zmc2V0ICh3aGljaCB3ZSBnb3QgZnJvbSB0aGUgZnNjayBvdXRwdXQgYWJvdmUpIGlzIGZvbGxvd2VkIGltbWVkaWF0ZWx5CitieSB0aGUgb2Zmc2V0IG9mIHRoZSBuZXh0IG9iamVjdC4gTm93IHdlIGtub3cgdGhhdCB0aGUgb2JqZWN0IGRhdGEgaXMKKzEwODYzIGJ5dGVzIGxvbmcsIGFuZCB3ZSBjYW4gZ3JhYiBpdCB3aXRoOgorCistLS0tLS0tLS0tLS0KKyAgZGQgaWY9JHBhY2sgb2Y9b2JqZWN0IGJzPTEgc2tpcD01MTY1Mzg3MyBjb3VudD0xMDg2MworLS0tLS0tLS0tLS0tCisKK0kgaW5zcGVjdGVkIGEgaGV4ZHVtcCBvZiB0aGUgZGF0YSwgbG9va2luZyBmb3IgYW55IG9idmlvdXMgYm9nb3NpdHkKKyhlLmcuLCBhIDRLIHJ1biBvZiB6ZXJvZXMgd291bGQgYmUgYSBnb29kIHNpZ24gb2YgZmlsZXN5c3RlbQorY29ycnVwdGlvbikuIEJ1dCBldmVyeXRoaW5nIGxvb2tlZCBwcmV0dHkgcmVhc29uYWJsZS4KKworTm90ZSB0aGF0IHRoZSAib2JqZWN0IiBmaWxlIGlzbid0IGZpdCBmb3IgZmVlZGluZyBzdHJhaWdodCB0byB6bGliOyBpdAoraGFzIHRoZSBnaXQgcGFja2VkIG9iamVjdCBoZWFkZXIsIHdoaWNoIGlzIHZhcmlhYmxlLWxlbmd0aC4gV2Ugd2FudCB0bworc3RyaXAgdGhhdCBvZmYgc28gd2UgY2FuIHN0YXJ0IHBsYXlpbmcgd2l0aCB0aGUgemxpYiBkYXRhIGRpcmVjdGx5LiBZb3UKK2NhbiBlaXRoZXIgd29yayB5b3VyIHdheSB0aHJvdWdoIGl0IG1hbnVhbGx5ICh0aGUgZm9ybWF0IGlzIGRlc2NyaWJlZCBpbgorbGluazouLi90ZWNobmljYWwvcGFjay1mb3JtYXQuaHRtbFtEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLWZvcm1hdC50eHRdKSwKK29yIHlvdSBjYW4gd2FsayB0aHJvdWdoIGl0IGluIGEgZGVidWdnZXIuIEkgZGlkIHRoZSBsYXR0ZXIsIGNyZWF0aW5nIGEKK3ZhbGlkIHBhY2sgbGlrZToKKworLS0tLS0tLS0tLS0tCisgICAgIyBwYWNrIG1hZ2ljIGFuZCB2ZXJzaW9uCisgICAgcHJpbnRmICdQQUNLXDBcMFwwXDInID50bXAucGFjaworICAgICMgcGFjayBoYXMgb25lIG9iamVjdAorICAgIHByaW50ZiAnXDBcMFwwXDEnID4+dG1wLnBhY2sKKyAgICAjIG5vdyBhZGQgb3VyIG9iamVjdCBkYXRhCisgICAgY2F0IG9iamVjdCA+PnRtcC5wYWNrCisgICAgIyBhbmQgdGhlbiBhcHBlbmQgdGhlIHBhY2sgdHJhaWxlcgorICAgIC9wYXRoL3RvL2dpdC5naXQvdC9oZWxwZXIvdGVzdC10b29sIHNoYTEgLWIgPHRtcC5wYWNrID50cmFpbGVyCisgICAgY2F0IHRyYWlsZXIgPj50bXAucGFjaworLS0tLS0tLS0tLS0tCisKK2FuZCB0aGVuIHJ1bm5pbmcgImdpdCBpbmRleC1wYWNrIHRtcC5wYWNrIiBpbiB0aGUgZGVidWdnZXIgKHN0b3AgYXQKK3VucGFja19yYXdfZW50cnkpLiBEb2luZyB0aGlzLCBJIGZvdW5kIHRoYXQgdGhlcmUgd2VyZSAzIGJ5dGVzIG9mIGhlYWRlcgorKGFuZCB0aGUgaGVhZGVyIGl0c2VsZiBoYWQgYSBzYW5lIHR5cGUgYW5kIHNpemUpLiBTbyBJIHN0cmlwcGVkIHRob3NlCitvZmYgd2l0aDoKKworLS0tLS0tLS0tLS0tCisgICAgZGQgaWY9b2JqZWN0IG9mPXpsaWIgYnM9MSBza2lwPTMKKy0tLS0tLS0tLS0tLQorCitJIHJhbiB0aGUgcmVzdWx0IHRocm91Z2ggemxpYidzIGluZmxhdGUgdXNpbmcgYSBjdXN0b20gQyBwcm9ncmFtLiBBbmQKK3doaWxlIGl0IGRpZCByZXBvcnQgdGhlIGVycm9yLCBJIGRpZCBnZXQgdGhlIHJpZ2h0IG51bWJlciBvZiBvdXRwdXQKK2J5dGVzIChpLmUuLCBpdCBtYXRjaGVkIGdpdCdzIHNpemUgaGVhZGVyIHRoYXQgd2UgZGVjb2RlZCBhYm92ZSkuIEJ1dAorZmVlZGluZyB0aGUgcmVzdWx0IGJhY2sgdG8gImdpdCBoYXNoLW9iamVjdCIgZGlkbid0IHByb2R1Y2UgdGhlIHNhbWUKK3NoYTEuIFNvIHRoZXJlIHdlcmUgc29tZSB3cm9uZyBieXRlcywgYnV0IEkgZGlkbid0IGtub3cgd2hpY2guIFRoZSBmaWxlCitoYXBwZW5lZCB0byBiZSBDIHNvdXJjZSBjb2RlLCBzbyBJIGhvcGVkIEkgY291bGQgbm90aWNlIHNvbWV0aGluZworb2J2aW91c2x5IHdyb25nIHdpdGggaXQsIGJ1dCBJIGRpZG4ndC4gSSBldmVuIGdvdCBpdCB0byBjb21waWxlIQorCitJIGFsc28gdHJpZWQgY29tcGFyaW5nIGl0IHRvIG90aGVyIHZlcnNpb25zIG9mIHRoZSBzYW1lIHBhdGggaW4gdGhlCityZXBvc2l0b3J5LCBob3BpbmcgdGhhdCB0aGVyZSB3b3VsZCBiZSBzb21lIHBhcnQgb2YgdGhlIGRpZmYgdGhhdCBkaWRuJ3QKK21ha2Ugc2Vuc2UuIFVuZm9ydHVuYXRlbHksIHRoaXMgaGFwcGVuZWQgdG8gYmUgdGhlIG9ubHkgcmV2aXNpb24gb2YgdGhpcworcGFydGljdWxhciBmaWxlIGluIHRoZSByZXBvc2l0b3J5LCBzbyBJIGhhZCBub3RoaW5nIHRvIGNvbXBhcmUgYWdhaW5zdC4KKworU28gSSB0b29rIGEgZGlmZmVyZW50IGFwcHJvYWNoLiBXb3JraW5nIHVuZGVyIHRoZSBndWVzcyB0aGF0IHRoZQorY29ycnVwdGlvbiB3YXMgbGltaXRlZCB0byBhIHNpbmdsZSBieXRlLCBJIHdyb3RlIGEgcHJvZ3JhbSB0byBtdW5nZSBlYWNoCitieXRlIGluZGl2aWR1YWxseSwgYW5kIHRyeSBpbmZsYXRpbmcgdGhlIHJlc3VsdC4gU2luY2UgdGhlIG9iamVjdCB3YXMKK29ubHkgMTBLIGNvbXByZXNzZWQsIHRoYXQgd29ya2VkIG91dCB0byBhYm91dCAyLjVNIGF0dGVtcHRzLCB3aGljaCB0b29rCithIGZldyBtaW51dGVzLgorCitUaGUgcHJvZ3JhbSBJIHVzZWQgaXMgaGVyZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8emxpYi5oPgorCitzdGF0aWMgaW50IHRyeV96bGliKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwkvKiBtYWtlIHRoaXMgYWJzdXJkbHkgbGFyZ2Ugc28gd2UgZG9uJ3QgaGF2ZSB0byBsb29wICovCisJc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0WzEwMjQqMTAyNF07CisJel9zdHJlYW0gejsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZ6LCAwLCBzaXplb2YoeikpOworCWluZmxhdGVJbml0KCZ6KTsKKworCXoubmV4dF9pbiA9IGJ1ZjsKKwl6LmF2YWlsX2luID0gbGVuOworCXoubmV4dF9vdXQgPSBvdXQ7CisJei5hdmFpbF9vdXQgPSBzaXplb2Yob3V0KTsKKworCXJldCA9IGluZmxhdGUoJnosIDApOworCWluZmxhdGVFbmQoJnopOworCXJldHVybiByZXQgPj0gMDsKK30KKworLyogZXllIGNhbmR5ICovCitzdGF0aWMgaW50IGNvdW50ZXIgPSAwOworc3RhdGljIHZvaWQgcHJvZ3Jlc3MoaW50IHNpZykKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlxyJWQiLCBjb3VudGVyKTsKKwlhbGFybSgxKTsKK30KKworaW50IG1haW4odm9pZCkKK3sKKwkvKiBvdmVyc2l6ZWQgc28gd2UgY2FuIHJlYWQgdGhlIHdob2xlIGJ1ZmZlciBpbiAqLworCXVuc2lnbmVkIGNoYXIgYnVmWzEwMjQqMTAyNF07CisJaW50IGxlbjsKKwl1bnNpZ25lZCBpLCBqOworCisJc2lnbmFsKFNJR0FMUk0sIHByb2dyZXNzKTsKKwlhbGFybSgxKTsKKworCWxlbiA9IHJlYWQoMCwgYnVmLCBzaXplb2YoYnVmKSk7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9IGJ1ZltpXTsKKwkJZm9yIChqID0gMDsgaiA8PSAweGZmOyBqKyspIHsKKwkJCWJ1ZltpXSA9IGo7CisKKwkJCWNvdW50ZXIrKzsKKwkJCWlmICh0cnlfemxpYihidWYsIGxlbikpCisJCQkJcHJpbnRmKCJpPSVkLCBqPSV4XG4iLCBpLCBqKTsKKwkJfQorCQlidWZbaV0gPSBjOworCX0KKworCWFsYXJtKDApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwlyZXR1cm4gMDsKK30KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSSBjb21waWxlZCBhbmQgcmFuIHdpdGg6CisKKy0tLS0tLS0KKyAgZ2NjIC1XYWxsIC1XZXJyb3IgLU8zIG11bmdlLmMgLW8gbXVuZ2UgLWx6CisgIC4vbXVuZ2UgPHpsaWIKKy0tLS0tLS0KKworCitUaGVyZSB3ZXJlIGEgZmV3IGZhbHNlIHBvc2l0aXZlcyBlYXJseSBvbiAoaWYgeW91IHdyaXRlICJubyBkYXRhIiBpbiB0aGUKK3psaWIgaGVhZGVyLCB6bGliIHRoaW5rcyBpdCdzIGp1c3QgZmluZSA6KSApLiBCdXQgSSBnb3QgYSBoaXQgYWJvdXQKK2hhbGZ3YXkgdGhyb3VnaDoKKworLS0tLS0tLQorICBpPTU2NDIsIGo9YzcKKy0tLS0tLS0KKworSSBsZXQgaXQgcnVuIHRvIGNvbXBsZXRpb24sIGFuZCBnb3QgYSBmZXcgbW9yZSBoaXRzIGF0IHRoZSBlbmQgKHdoZXJlIGl0Cit3YXMgbXVuZ2luZyB0aGUgQ1JDIHRvIG1hdGNoIG91ciBicm9rZW4gZGF0YSkuIFNvIHRoZXJlIHdhcyBhIGdvb2QKK2NoYW5jZSB0aGlzIG1pZGRsZSBoaXQgd2FzIHRoZSBzb3VyY2Ugb2YgdGhlIHByb2JsZW0uCisKK0kgY29uZmlybWVkIGJ5IHR3ZWFraW5nIHRoZSBieXRlIGluIGEgaGV4IGVkaXRvciwgemxpYiBpbmZsYXRpbmcgdGhlCityZXN1bHQgKG5vIGVycm9ycyEpLCBhbmQgdGhlbiBwaXBpbmcgdGhlIG91dHB1dCBpbnRvICJnaXQgaGFzaC1vYmplY3QiLAord2hpY2ggcmVwb3J0ZWQgdGhlIHNoYTEgb2YgdGhlIGJyb2tlbiBvYmplY3QuIFN1Y2Nlc3MhCisKK0kgZml4ZWQgdGhlIHBhY2tmaWxlIGl0c2VsZiB3aXRoOgorCistLS0tLS0tCisgIGNobW9kICt3ICRwYWNrCisgIHByaW50ZiAnXHhjNycgfCBkZCBvZj0kcGFjayBicz0xIHNlZWs9NTE2NTk1MTggY29udj1ub3RydW5jCisgIGNobW9kIC13ICRwYWNrCistLS0tLS0tCisKK1RoZSBgXHhjN2AgY29tZXMgZnJvbSB0aGUgcmVwbGFjZW1lbnQgYnl0ZSBvdXIgIm11bmdlIiBwcm9ncmFtIGZvdW5kLgorVGhlIG9mZnNldCA1MTY1OTUxOCBpcyBkZXJpdmVkIGJ5IHRha2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0IG9mZnNldAorKDUxNjUzODczKSwgYWRkaW5nIHRoZSByZXBsYWNlbWVudCBvZmZzZXQgZm91bmQgYnkgIm11bmdlIiAoNTY0MiksIGFuZAordGhlbiBhZGRpbmcgYmFjayBpbiB0aGUgMyBieXRlcyBvZiBnaXQgaGVhZGVyIHdlIHN0cmlwcGVkLgorCitBZnRlciB0aGF0LCAiZ2l0IGZzY2siIHJhbiBjbGVhbi4KKworQXMgZm9yIHRoZSBjb3JydXB0aW9uIGl0c2VsZiwgSSB3YXMgbHVja3kgdGhhdCBpdCB3YXMgaW5kZWVkIGEgc2luZ2xlCitieXRlLiBJbiBmYWN0LCBpdCB0dXJuZWQgb3V0IHRvIGJlIGEgc2luZ2xlIGJpdC4gVGhlIGJ5dGUgMHhjNyB3YXMKK2NvcnJ1cHRlZCB0byAweGM1LiBTbyBwcmVzdW1hYmx5IGl0IHdhcyBjYXVzZWQgYnkgZmF1bHR5IGhhcmR3YXJlLCBvciBhCitjb3NtaWMgcmF5LgorCitBbmQgdGhlIGFib3J0ZWQgYXR0ZW1wdCB0byBsb29rIGF0IHRoZSBpbmZsYXRlZCBvdXRwdXQgdG8gc2VlIHdoYXQgd2FzCit3cm9uZz8gSSBjb3VsZCBoYXZlIGxvb2tlZCBmb3JldmVyIGFuZCBuZXZlciBmb3VuZCBpdC4gSGVyZSdzIHRoZSBkaWZmCitiZXR3ZWVuIHdoYXQgdGhlIGNvcnJ1cHRlZCBkYXRhIGluZmxhdGVzIHRvLCB2ZXJzdXMgdGhlIHJlYWwgZGF0YToKKworLS0tLS0tLS0tLS0tLS0KKyAgLSAgICAgICBjcCA9IHN0cnRvayAoYXJnLCAiKyIpOworICArICAgICAgIGNwID0gc3RydG9rIChhcmcsICIuIik7CistLS0tLS0tLS0tLS0tLQorCitJdCB0d2Vha2VkIG9uZSBieXRlIGFuZCBzdGlsbCBlbmRlZCB1cCBhcyB2YWxpZCwgcmVhZGFibGUgQyB0aGF0IGp1c3QKK2hhcHBlbmVkIHRvIGRvIHNvbWV0aGluZyB0b3RhbGx5IGRpZmZlcmVudCEgT25lIHRha2Vhd2F5IGlzIHRoYXQgb24gYQorbGVzcyB1bmx1Y2t5IGRheSwgbG9va2luZyBhdCB0aGUgemxpYiBvdXRwdXQgbWlnaHQgaGF2ZSBhY3R1YWxseSBiZWVuCitoZWxwZnVsLCBhcyBtb3N0IHJhbmRvbSBjaGFuZ2VzIHdvdWxkIGFjdHVhbGx5IGJyZWFrIHRoZSBDIGNvZGUuCisKK0J1dCBtb3JlIGltcG9ydGFudGx5LCBnaXQncyBoYXNoaW5nIGFuZCBjaGVja3N1bW1pbmcgbm90aWNlZCBhIHByb2JsZW0KK3RoYXQgZWFzaWx5IGNvdWxkIGhhdmUgZ29uZSB1bmRldGVjdGVkIGluIGFub3RoZXIgc3lzdGVtLiBUaGUgcmVzdWx0CitzdGlsbCBjb21waWxlZCwgYnV0IHdvdWxkIGhhdmUgY2F1c2VkIGFuIGludGVyZXN0aW5nIGJ1ZyAodGhhdCB3b3VsZAoraGF2ZSBiZWVuIGJsYW1lZCBvbiBzb21lIHJhbmRvbSBjb21taXQpLgorCisKK1RoZSBhZHZlbnR1cmUgY29udGludWVzLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJIGVuZGVkIHVwIGRvaW5nIHRoaXMgYWdhaW4hIFNhbWUgZW50aXR5LCBuZXcgaGFyZHdhcmUuIFRoZSBhc3N1bXB0aW9uCithdCB0aGlzIHBvaW50IGlzIHRoYXQgdGhlIG9sZCBkaXNrIGNvcnJ1cHRlZCB0aGUgcGFja2ZpbGUsIGFuZCB0aGVuIHRoZQorY29ycnVwdGlvbiB3YXMgbWlncmF0ZWQgdG8gdGhlIG5ldyBoYXJkd2FyZSAoYmVjYXVzZSBpdCB3YXMgZG9uZSBieQorcnN5bmMgb3Igc2ltaWxhciwgYW5kIG5vIGZzY2sgd2FzIGRvbmUgYXQgdGhlIHRpbWUgb2YgbWlncmF0aW9uKS4KKworVGhpcyB0aW1lLCB0aGUgYWZmZWN0ZWQgYmxvYiB3YXMgb3ZlciAyMCBtZWdhYnl0ZXMsIHdoaWNoIHdhcyBmYXIgdG9vCitsYXJnZSB0byBkbyBhIGJydXRlLWZvcmNlIG9uLiBJIGZvbGxvd2VkIHRoZSBpbnN0cnVjdGlvbnMgYWJvdmUgdG8KK2NyZWF0ZSB0aGUgYHpsaWJgIGZpbGUuIEkgdGhlbiB1c2VkIHRoZSBgaW5mbGF0ZWAgcHJvZ3JhbSBiZWxvdyB0byBwdWxsCit0aGUgY29ycnVwdGVkIGRhdGEgZnJvbSB0aGF0LiBFeGFtaW5pbmcgdGhhdCBvdXRwdXQgZ2F2ZSBtZSBhIGhpbnQgYWJvdXQKK3doZXJlIGluIHRoZSBmaWxlIHRoZSBjb3JydXB0aW9uIHdhcy4gQnV0IG5vdyBJIHdhcyB3b3JraW5nIHdpdGggdGhlCitmaWxlIGl0c2VsZiwgbm90IHRoZSB6bGliIGNvbnRlbnRzLiBTbyBrbm93aW5nIHRoZSBzaGExIG9mIHRoZSBvYmplY3QKK2FuZCB0aGUgYXBwcm94aW1hdGUgYXJlYSBvZiB0aGUgY29ycnVwdGlvbiwgSSB1c2VkIHRoZSBgc2hhMS1tdW5nZWAKK3Byb2dyYW0gYmVsb3cgdG8gYnJ1dGUtZm9yY2UgdGhlIGNvcnJlY3QgYnl0ZS4KKworSGVyZSdzIHRoZSBpbmZsYXRlIHByb2dyYW0gKGl0J3MgZXNzZW50aWFsbHkgYGd1bnppcGAgYnV0IHdpdGhvdXQgdGhlCitgLmd6YCBoZWFkZXIgcHJvY2Vzc2luZyk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx6bGliLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwkvKgorCSAqIG92ZXJzaXplZCBzbyB3ZSBjYW4gcmVhZCB0aGUgd2hvbGUgYnVmZmVyIGluOworCSAqIHRoaXMgY291bGQgYWN0dWFsbHkgYmUgc3dpdGNoZWQgdG8gc3RyZWFtaW5nCisJICogdG8gYXZvaWQgYW55IG1lbW9yeSBsaW1pdGF0aW9ucworCSAqLworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJ1ZlsyNSAqIDEwMjQgKiAxMDI0XTsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRbMjUgKiAxMDI0ICogMTAyNF07CisJaW50IGxlbjsKKwl6X3N0cmVhbSB6OworCWludCByZXQ7CisKKwlsZW4gPSByZWFkKDAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCW1lbXNldCgmeiwgMCwgc2l6ZW9mKHopKTsKKwlpbmZsYXRlSW5pdCgmeik7CisKKwl6Lm5leHRfaW4gPSBidWY7CisJei5hdmFpbF9pbiA9IGxlbjsKKwl6Lm5leHRfb3V0ID0gb3V0OworCXouYXZhaWxfb3V0ID0gc2l6ZW9mKG91dCk7CisKKwlyZXQgPSBpbmZsYXRlKCZ6LCAwKTsKKwlpZiAocmV0ICE9IFpfT0sgJiYgcmV0ICE9IFpfU1RSRUFNX0VORCkKKwkJZnByaW50ZihzdGRlcnIsICJpbml0aWFsIGluZmxhdGUgZmFpbGVkICglZClcbiIsIHJldCk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIm91dHB1dHRpbmcgJWx1IGJ5dGVzIiwgei50b3RhbF9vdXQpOworCWZ3cml0ZShvdXQsIDEsIHoudG90YWxfb3V0LCBzdGRvdXQpOworCXJldHVybiAwOworfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW5kIGhlcmUgaXMgdGhlIGBzaGExLW11bmdlYCBwcm9ncmFtOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogZXllIGNhbmR5ICovCitzdGF0aWMgaW50IGNvdW50ZXIgPSAwOworc3RhdGljIHZvaWQgcHJvZ3Jlc3MoaW50IHNpZykKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlxyJWQiLCBjb3VudGVyKTsKKwlhbGFybSgxKTsKK30KKworc3RhdGljIGNvbnN0IHNpZ25lZCBjaGFyIGhleHZhbF90YWJsZVsyNTZdID0geworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAwMC0wNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAwOC0wZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAxMC0xNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAxOC0xZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAyMC0yNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAyOC0yZiAqLworCSAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsCQkvKiAzMC0zNyAqLworCSAgOCwgIDksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAzOC0zZiAqLworCSAtMSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgLTEsCQkvKiA0MC00NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA0OC00ZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA1MC01NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA1OC01ZiAqLworCSAtMSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgLTEsCQkvKiA2MC02NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA2OC02NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA3MC03NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA3OC03ZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA4MC04NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA4OC04ZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA5MC05NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA5OC05ZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBhMC1hNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBhOC1hZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBiMC1iNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBiOC1iZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBjMC1jNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBjOC1jZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBkMC1kNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBkOC1kZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBlMC1lNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBlOC1lZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBmMC1mNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBmOC1mZiAqLworfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaGV4dmFsKHVuc2lnbmVkIGNoYXIgYykKK3sKK3JldHVybiBoZXh2YWxfdGFibGVbY107Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3NoYTFfaGV4KGNvbnN0IGNoYXIgKmhleCwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgdmFsOworCQkvKgorCQkgKiBoZXhbMV09PSdcMCcgaXMgY2F1Z2h0IHdoZW4gdmFsIGlzIGNoZWNrZWQgYmVsb3csCisJCSAqIGJ1dCBpZiBoZXhbMF0gaXMgTlVMIHdlIGhhdmUgdG8gYXZvaWQgcmVhZGluZworCQkgKiBwYXN0IHRoZSBlbmQgb2YgdGhlIHN0cmluZzoKKwkJICovCisJCWlmICghaGV4WzBdKQorCQkJcmV0dXJuIC0xOworCQl2YWwgPSAoaGV4dmFsKGhleFswXSkgPDwgNCkgfCBoZXh2YWwoaGV4WzFdKTsKKwkJaWYgKHZhbCAmIH4weGZmKQorCQkJcmV0dXJuIC0xOworCQkqc2hhMSsrID0gdmFsOworCQloZXggKz0gMjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwkvKiBvdmVyc2l6ZWQgc28gd2UgY2FuIHJlYWQgdGhlIHdob2xlIGJ1ZmZlciBpbiAqLworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJ1ZlsyNSAqIDEwMjQgKiAxMDI0XTsKKwljaGFyIGhlYWRlclszMl07CisJaW50IGhlYWRlcl9sZW47CisJdW5zaWduZWQgY2hhciBoYXZlWzIwXSwgd2FudFsyMF07CisJaW50IHN0YXJ0LCBsZW47CisJU0hBX0NUWCBvcmlnOworCXVuc2lnbmVkIGksIGo7CisKKwlpZiAoIWFyZ3ZbMV0gfHwgZ2V0X3NoYTFfaGV4KGFyZ3ZbMV0sIHdhbnQpKSB7CisJCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6IHNoYTEtbXVuZ2UgPHNoYTE+IFtzdGFydF0gPGZpbGUuaW5cbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoYXJndlsyXSkKKwkJc3RhcnQgPSBhdG9pKGFyZ3ZbMl0pOworCWVsc2UKKwkJc3RhcnQgPSAwOworCisJbGVuID0gcmVhZCgwLCBidWYsIHNpemVvZihidWYpKTsKKwloZWFkZXJfbGVuID0gc3ByaW50ZihoZWFkZXIsICJibG9iICVkIiwgbGVuKSArIDE7CisJZnByaW50ZihzdGRlcnIsICJ1c2luZyBoZWFkZXI6ICVzXG4iLCBoZWFkZXIpOworCisJLyoKKwkgKiBXZSBrZWVwIGEgcnVubmluZyBzaGExIHNvIHRoYXQgaWYgeW91IGFyZSBtdW5naW5nCisJICogbmVhciB0aGUgZW5kIG9mIHRoZSBmaWxlLCB3ZSBkbyBub3QgaGF2ZSB0byByZS1zaGExCisJICogdGhlIHVuY2hhbmdlZCBlYXJsaWVyIGJ5dGVzCisJICovCisJU0hBMV9Jbml0KCZvcmlnKTsKKwlTSEExX1VwZGF0ZSgmb3JpZywgaGVhZGVyLCBoZWFkZXJfbGVuKTsKKwlpZiAoc3RhcnQpCisJCVNIQTFfVXBkYXRlKCZvcmlnLCBidWYsIHN0YXJ0KTsKKworCXNpZ25hbChTSUdBTFJNLCBwcm9ncmVzcyk7CisJYWxhcm0oMSk7CisKKwlmb3IgKGkgPSBzdGFydDsgaSA8IGxlbjsgaSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgYzsKKwkJU0hBX0NUWCB4OworCisjaWYgMAorCQkvKgorCQkgKiBkZWxldGlvbiAtLSB0aGlzIHdvdWxkIG5vdCBhY3R1YWxseSB3b3JrIGluIHByYWN0aWNlLAorCQkgKiBJIHRoaW5rLCBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgY29tbWl0dGVkIHRvIGEKKwkJICogcGFydGljdWxhciBzaXplIGluIHRoZSBoZWFkZXIuIERpdHRvIGZvciBhZGRpdGlvbgorCQkgKiBiZWxvdy4gSW4gdGhvc2UgY2FzZXMsIHlvdSdkIGhhdmUgdG8gZG8gdGhlIHdob2xlCisJCSAqIHNoYTEgZnJvbSBzY3JhdGNoLCBvciBwb3NzaWJseSBrZWVwIHRocmVlIHJ1bm5pbmcKKwkJICogIm9yaWciIHNoYTEgY29tcHV0YXRpb25zIGdvaW5nLgorCQkgKi8KKwkJbWVtY3B5KCZ4LCAmb3JpZywgc2l6ZW9mKHgpKTsKKwkJU0hBMV9VcGRhdGUoJngsIGJ1ZiArIGkgKyAxLCBsZW4gLSBpIC0gMSk7CisJCVNIQTFfRmluYWwoaGF2ZSwgJngpOworCQlpZiAoIW1lbWNtcChoYXZlLCB3YW50LCAyMCkpCisJCQlwcmludGYoImk9JWQsIGRlbGV0aW9uXG4iLCBpKTsKKyNlbmRpZgorCisJCS8qCisJCSAqIHJlcGxhY2VtZW50IC0tIG5vdGUgdGhhdCB0aGlzIHRyaWVzIGVhY2ggb2YgdGhlIDI1NgorCQkgKiBwb3NzaWJsZSBieXRlcy4gSWYgeW91IHN1c3BlY3QgYSBzaW5nbGUtYml0IGZsaXAsCisJCSAqIGl0IHdvdWxkIGJlIG11Y2ggc2hvcnRlciB0byBqdXN0IHRyeSB0aGUgOAorCQkgKiBiaXQtZmxpcHBlZCB2YXJpYW50cy4KKwkJICovCisJCWMgPSBidWZbaV07CisJCWZvciAoaiA9IDA7IGogPD0gMHhmZjsgaisrKSB7CisJCQlidWZbaV0gPSBqOworCisJCQltZW1jcHkoJngsICZvcmlnLCBzaXplb2YoeCkpOworCQkJU0hBMV9VcGRhdGUoJngsIGJ1ZiArIGksIGxlbiAtIGkpOworCQkJU0hBMV9GaW5hbChoYXZlLCAmeCk7CisJCQlpZiAoIW1lbWNtcChoYXZlLCB3YW50LCAyMCkpCisJCQkJcHJpbnRmKCJpPSVkLCBqPSUwMnhcbiIsIGksIGopOworCQl9CisJCWJ1ZltpXSA9IGM7CisKKyNpZiAwCisJCS8qIGFkZGl0aW9uICovCisJCWZvciAoaiA9IDA7IGogPD0gMHhmZjsgaisrKSB7CisJCQl1bnNpZ25lZCBjaGFyIGV4dHJhID0gajsKKwkJCW1lbWNweSgmeCwgJm9yaWcsIHNpemVvZih4KSk7CisJCQlTSEExX1VwZGF0ZSgmeCwgJmV4dHJhLCAxKTsKKwkJCVNIQTFfVXBkYXRlKCZ4LCBidWYgKyBpLCBsZW4gLSBpKTsKKwkJCVNIQTFfRmluYWwoaGF2ZSwgJngpOworCQkJaWYgKCFtZW1jbXAoaGF2ZSwgd2FudCwgMjApKQorCQkJCXByaW50ZigiaT0lZCwgYWRkaXRpb249JTAyeCIsIGksIGopOworCQl9CisjZW5kaWYKKworCQlTSEExX1VwZGF0ZSgmb3JpZywgYnVmICsgaSwgMSk7CisJCWNvdW50ZXIrKzsKKwl9CisKKwlhbGFybSgwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxyJWRcbiIsIGNvdW50ZXIpOworCXJldHVybiAwOworfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWEtZmF1bHR5LW1lcmdlLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWEtZmF1bHR5LW1lcmdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWY1OWNjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZXZlcnQtYS1mYXVsdHktbWVyZ2UudHh0CkBAIC0wLDAgKzEsMjczIEBACitEYXRlOiBGcmksIDE5IERlYyAyMDA4IDAwOjQ1OjE5IC0wODAwCitGcm9tOiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+LCBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitTdWJqZWN0OiBSZTogT2RkIG1lcmdlIGJlaGF2aW91ciBpbnZvbHZpbmcgcmV2ZXJ0cworQWJzdHJhY3Q6IFNvbWV0aW1lcyBhIGJyYW5jaCB0aGF0IHdhcyBhbHJlYWR5IG1lcmdlZCB0byB0aGUgbWFpbmxpbmUKKyBpcyBsYXRlciBmb3VuZCB0byBiZSBmYXVsdHkuICBMaW51cyBhbmQgSnVuaW8gZ2l2ZSBndWlkYW5jZSBvbgorIHJlY292ZXJpbmcgZnJvbSBzdWNoIGEgcHJlbWF0dXJlIG1lcmdlIGFuZCBjb250aW51aW5nIGRldmVsb3BtZW50CisgYWZ0ZXIgdGhlIG9mZmVuZGluZyBicmFuY2ggaXMgZml4ZWQuCitNZXNzYWdlLUlEOiA8N3ZvY3o4YTZ6ay5mc2ZAZ2l0c3Rlci5zaWFtZXNlLmR5bmRucy5vcmc+CitSZWZlcmVuY2VzOiA8YWxwaW5lLkxGRC4yLjAwLjA4MTIxODE5NDk0NTAuMTQwMTRAbG9jYWxob3N0LmxvY2FsZG9tYWluPgorQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jCisKK0hvdyB0byByZXZlcnQgYSBmYXVsdHkgbWVyZ2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQWxhbiA8YWxhbkBjbHVlc2VydmVyLm9yZz4gc2FpZDoKKworICAgIEkgaGF2ZSBhIG1hc3RlciBicmFuY2guICBXZSBoYXZlIGEgYnJhbmNoIG9mZiBvZiB0aGF0IHRoYXQgc29tZQorICAgIGRldmVsb3BlcnMgYXJlIGRvaW5nIHdvcmsgb24uICBUaGV5IGNsYWltIGl0IGlzIHJlYWR5LiBXZSBtZXJnZSBpdAorICAgIGludG8gdGhlIG1hc3RlciBicmFuY2guICBJdCBicmVha3Mgc29tZXRoaW5nIHNvIHdlIHJldmVydCB0aGUgbWVyZ2UuCisgICAgVGhleSBtYWtlIGNoYW5nZXMgdG8gdGhlIGNvZGUuICB0aGV5IGdldCBpdCB0byBhIHBvaW50IHdoZXJlIHRoZXkgc2F5CisgICAgaXQgaXMgb2sgYW5kIHdlIG1lcmdlIGFnYWluLgorCisgICAgV2hlbiBleGFtaW5lZCwgd2UgZmluZCB0aGF0IGNvZGUgY2hhbmdlcyBtYWRlIGJlZm9yZSB0aGUgcmV2ZXJ0IGFyZQorICAgIG5vdCBpbiB0aGUgbWFzdGVyIGJyYW5jaCwgYnV0IGNvZGUgY2hhbmdlcyBhZnRlciBhcmUgaW4gdGhlIG1hc3RlcgorICAgIGJyYW5jaC4KKworYW5kIGFza2VkIGZvciBoZWxwIHJlY292ZXJpbmcgZnJvbSB0aGlzIHNpdHVhdGlvbi4KKworVGhlIGhpc3RvcnkgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICJyZXZlcnQgb2YgdGhlIG1lcmdlIiB3b3VsZCBsb29rIGxpa2UKK3RoaXM6CisKKyAtLS1vLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XCisgICAgICAgICAgICAgICAvCisgICAgICAgLS0tQS0tLUIKKword2hlcmUgQSBhbmQgQiBhcmUgb24gdGhlIHNpZGUgZGV2ZWxvcG1lbnQgdGhhdCB3YXMgbm90IHNvIGdvb2QsIE0gaXMgdGhlCittZXJnZSB0aGF0IGJyaW5ncyB0aGVzZSBwcmVtYXR1cmUgY2hhbmdlcyBpbnRvIHRoZSBtYWlubGluZSwgeCBhcmUgY2hhbmdlcwordW5yZWxhdGVkIHRvIHdoYXQgdGhlIHNpZGUgYnJhbmNoIGRpZCBhbmQgYWxyZWFkeSBtYWRlIG9uIHRoZSBtYWlubGluZSwKK2FuZCBXIGlzIHRoZSAicmV2ZXJ0IG9mIHRoZSBtZXJnZSBNIiAoZG9lc24ndCBXIGxvb2sgTSB1cHNpZGUgZG93bj8pLgorSU9XLCBgImRpZmYgV14uLlciYCBpcyBzaW1pbGFyIHRvIGAiZGlmZiAtUiBNXi4uTSJgLgorCitTdWNoIGEgInJldmVydCIgb2YgYSBtZXJnZSBjYW4gYmUgbWFkZSB3aXRoOgorCisgICAgJCBnaXQgcmV2ZXJ0IC1tIDEgTQorCitBZnRlciB0aGUgZGV2ZWxvcGVycyBvZiB0aGUgc2lkZSBicmFuY2ggZml4IHRoZWlyIG1pc3Rha2VzLCB0aGUgaGlzdG9yeQorbWF5IGxvb2sgbGlrZSB0aGlzOgorCisgLS0tby0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgKKyAgICAgICAgICAgICAgIC8KKyAgICAgICAtLS1BLS0tQi0tLS0tLS0tLS0tLS0tLS0tLS1DLS0tRAorCit3aGVyZSBDIGFuZCBEIGFyZSB0byBmaXggd2hhdCB3YXMgYnJva2VuIGluIEEgYW5kIEIsIGFuZCB5b3UgbWF5IGFscmVhZHkKK2hhdmUgc29tZSBvdGhlciBjaGFuZ2VzIG9uIHRoZSBtYWlubGluZSBhZnRlciBXLgorCitJZiB5b3UgbWVyZ2UgdGhlIHVwZGF0ZWQgc2lkZSBicmFuY2ggKHdpdGggRCBhdCBpdHMgdGlwKSwgbm9uZSBvZiB0aGUKK2NoYW5nZXMgbWFkZSBpbiBBIG9yIEIgd2lsbCBiZSBpbiB0aGUgcmVzdWx0LCBiZWNhdXNlIHRoZXkgd2VyZSByZXZlcnRlZAorYnkgVy4gIFRoYXQgaXMgd2hhdCBBbGFuIHNhdy4KKworTGludXMgZXhwbGFpbnMgdGhlIHNpdHVhdGlvbjoKKworICAgIFJldmVydGluZyBhIHJlZ3VsYXIgY29tbWl0IGp1c3QgZWZmZWN0aXZlbHkgdW5kb2VzIHdoYXQgdGhhdCBjb21taXQKKyAgICBkaWQsIGFuZCBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiBCdXQgcmV2ZXJ0aW5nIGEgbWVyZ2UgY29tbWl0IGFsc28KKyAgICB1bmRvZXMgdGhlIF9kYXRhXyB0aGF0IHRoZSBjb21taXQgY2hhbmdlZCwgYnV0IGl0IGRvZXMgYWJzb2x1dGVseQorICAgIG5vdGhpbmcgdG8gdGhlIGVmZmVjdHMgb24gX2hpc3RvcnlfIHRoYXQgdGhlIG1lcmdlIGhhZC4KKworICAgIFNvIHRoZSBtZXJnZSB3aWxsIHN0aWxsIGV4aXN0LCBhbmQgaXQgd2lsbCBzdGlsbCBiZSBzZWVuIGFzIGpvaW5pbmcKKyAgICB0aGUgdHdvIGJyYW5jaGVzIHRvZ2V0aGVyLCBhbmQgZnV0dXJlIG1lcmdlcyB3aWxsIHNlZSB0aGF0IG1lcmdlIGFzCisgICAgdGhlIGxhc3Qgc2hhcmVkIHN0YXRlIC0gYW5kIHRoZSByZXZlcnQgdGhhdCByZXZlcnRlZCB0aGUgbWVyZ2UgYnJvdWdodAorICAgIGluIHdpbGwgbm90IGFmZmVjdCB0aGF0IGF0IGFsbC4KKworICAgIFNvIGEgInJldmVydCIgdW5kb2VzIHRoZSBkYXRhIGNoYW5nZXMsIGJ1dCBpdCdzIHZlcnkgbXVjaCBfbm90XyBhbgorICAgICJ1bmRvIiBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBkb2Vzbid0IHVuZG8gdGhlIGVmZmVjdHMgb2YgYSBjb21taXQgb24KKyAgICB0aGUgcmVwb3NpdG9yeSBoaXN0b3J5LgorCisgICAgU28gaWYgeW91IHRoaW5rIG9mICJyZXZlcnQiIGFzICJ1bmRvIiwgdGhlbiB5b3UncmUgZ29pbmcgdG8gYWx3YXlzCisgICAgbWlzcyB0aGlzIHBhcnQgb2YgcmV2ZXJ0cy4gWWVzLCBpdCB1bmRvZXMgdGhlIGRhdGEsIGJ1dCBubywgaXQgZG9lc24ndAorICAgIHVuZG8gaGlzdG9yeS4KKworSW4gc3VjaCBhIHNpdHVhdGlvbiwgeW91IHdvdWxkIHdhbnQgdG8gZmlyc3QgcmV2ZXJ0IHRoZSBwcmV2aW91cyByZXZlcnQsCit3aGljaCB3b3VsZCBtYWtlIHRoZSBoaXN0b3J5IGxvb2sgbGlrZSB0aGlzOgorCisgLS0tby0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgtLS1ZCisgICAgICAgICAgICAgICAvCisgICAgICAgLS0tQS0tLUItLS0tLS0tLS0tLS0tLS0tLS0tQy0tLUQKKword2hlcmUgWSBpcyB0aGUgcmV2ZXJ0IG9mIFcuICBTdWNoIGEgInJldmVydCBvZiB0aGUgcmV2ZXJ0IiBjYW4gYmUgZG9uZQord2l0aDoKKworICAgICQgZ2l0IHJldmVydCBXCisKK1RoaXMgaGlzdG9yeSB3b3VsZCAoaWdub3JpbmcgcG9zc2libGUgY29uZmxpY3RzIGJldHdlZW4gd2hhdCBXIGFuZCBXLi5ZCitjaGFuZ2VkKSBiZSBlcXVpdmFsZW50IHRvIG5vdCBoYXZpbmcgVyBvciBZIGF0IGFsbCBpbiB0aGUgaGlzdG9yeToKKworIC0tLW8tLS1vLS0tby0tLU0tLS14LS0teC0tLS0tLS14LS0tLQorICAgICAgICAgICAgICAgLworICAgICAgIC0tLUEtLS1CLS0tLS0tLS0tLS0tLS0tLS0tLUMtLS1ECisKK2FuZCBtZXJnaW5nIHRoZSBzaWRlIGJyYW5jaCBhZ2FpbiB3aWxsIG5vdCBoYXZlIGNvbmZsaWN0IGFyaXNpbmcgZnJvbSBhbgorZWFybGllciByZXZlcnQgYW5kIHJldmVydCBvZiB0aGUgcmV2ZXJ0LgorCisgLS0tby0tLW8tLS1vLS0tTS0tLXgtLS14LS0tLS0tLXgtLS0tLS0tKgorICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgICAgLworICAgICAgIC0tLUEtLS1CLS0tLS0tLS0tLS0tLS0tLS0tLUMtLS1ECisKK09mIGNvdXJzZSB0aGUgY2hhbmdlcyBtYWRlIGluIEMgYW5kIEQgc3RpbGwgY2FuIGNvbmZsaWN0IHdpdGggd2hhdCB3YXMKK2RvbmUgYnkgYW55IG9mIHRoZSB4LCBidXQgdGhhdCBpcyBqdXN0IGEgbm9ybWFsIG1lcmdlIGNvbmZsaWN0LgorCitPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIGRldmVsb3BlcnMgb2YgdGhlIHNpZGUgYnJhbmNoIGRpc2NhcmRlZCB0aGVpcgorZmF1bHR5IEEgYW5kIEIsIGFuZCByZWRvbmUgdGhlIGNoYW5nZXMgb24gdG9wIG9mIHRoZSB1cGRhdGVkIG1haW5saW5lCithZnRlciB0aGUgcmV2ZXJ0LCB0aGUgaGlzdG9yeSB3b3VsZCBoYXZlIGxvb2tlZCBsaWtlIHRoaXM6CisKKyAtLS1vLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teC0tLXgKKyAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgIFwKKyAgICAgICAtLS1BLS0tQiAgICAgICAgICAgICAgICAgICBBJy0tQictLUMnCisKK0lmIHlvdSByZXZlcnRlZCB0aGUgcmV2ZXJ0IGluIHN1Y2ggYSBjYXNlIGFzIGluIHRoZSBwcmV2aW91cyBleGFtcGxlOgorCisgLS0tby0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgtLS14LS0tWS0tLSoKKyAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgIFwgICAgICAgICAvCisgICAgICAgLS0tQS0tLUIgICAgICAgICAgICAgICAgICAgQSctLUInLS1DJworCit3aGVyZSBZIGlzIHRoZSByZXZlcnQgb2YgVywgQScgYW5kIEInIGFyZSByZXJvbGxlZCBBIGFuZCBCLCBhbmQgdGhlcmUgbWF5CithbHNvIGJlIGEgZnVydGhlciBmaXgtdXAgQycgb24gdGhlIHNpZGUgYnJhbmNoLiAgYCJkaWZmIFleLi5ZImAgaXMgc2ltaWxhcgordG8gYCJkaWZmIC1SIFdeLi5XImAgKHdoaWNoIGluIHR1cm4gbWVhbnMgaXQgaXMgc2ltaWxhciB0byBgImRpZmYgTV4uLk0iYCksCithbmQgYCJkaWZmIEEnXi4uQyciYCBieSBkZWZpbml0aW9uIHdvdWxkIGJlIHNpbWlsYXIgYnV0IGRpZmZlcmVudCBmcm9tIHRoYXQsCitiZWNhdXNlIGl0IGlzIGEgcmVyb2xsZWQgc2VyaWVzIG9mIHRoZSBlYXJsaWVyIGNoYW5nZS4gIFRoZXJlIHdpbGwgYmUgYQorbG90IG9mIG92ZXJsYXBwaW5nIGNoYW5nZXMgdGhhdCByZXN1bHQgaW4gY29uZmxpY3RzLiAgU28gZG8gbm90IGRvICJyZXZlcnQKK29mIHJldmVydCIgYmxpbmRseSB3aXRob3V0IHRoaW5raW5nLi4KKworIC0tLW8tLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14LS0teAorICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgXAorICAgICAgIC0tLUEtLS1CICAgICAgICAgICAgICAgICAgIEEnLS1CJy0tQycKKworSW4gdGhlIGhpc3Rvcnkgd2l0aCByZWJhc2VkIHNpZGUgYnJhbmNoLCBXIChhbmQgTSkgYXJlIGJlaGluZCB0aGUgbWVyZ2UKK2Jhc2Ugb2YgdGhlIHVwZGF0ZWQgYnJhbmNoIGFuZCB0aGUgdGlwIG9mIHRoZSBtYWlubGluZSwgYW5kIHRoZXkgc2hvdWxkCittZXJnZSB3aXRob3V0IHRoZSBwYXN0IGZhdWx0eSBtZXJnZSBhbmQgaXRzIHJldmVydCBnZXR0aW5nIGluIHRoZSB3YXkuCisKK1RvIHJlY2FwLCB0aGVzZSBhcmUgdHdvIHZlcnkgZGlmZmVyZW50IHNjZW5hcmlvcywgYW5kIHRoZXkgd2FudCB0d28gdmVyeQorZGlmZmVyZW50IHJlc29sdXRpb24gc3RyYXRlZ2llczoKKworIC0gSWYgdGhlIGZhdWx0eSBzaWRlIGJyYW5jaCB3YXMgZml4ZWQgYnkgYWRkaW5nIGNvcnJlY3Rpb25zIG9uIHRvcCwgdGhlbgorICAgZG9pbmcgYSByZXZlcnQgb2YgdGhlIHByZXZpb3VzIHJldmVydCB3b3VsZCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisKKyAtIElmIHRoZSBmYXVsdHkgc2lkZSBicmFuY2ggd2hvc2UgZWZmZWN0cyB3ZXJlIGRpc2NhcmRlZCBieSBhbiBlYXJsaWVyCisgICByZXZlcnQgb2YgYSBtZXJnZSB3YXMgcmVidWlsdCBmcm9tIHNjcmF0Y2ggKGkuZS4gcmViYXNpbmcgYW5kIGZpeGluZywKKyAgIGFzIHlvdSBzZWVtIHRvIGhhdmUgaW50ZXJwcmV0ZWQpLCB0aGVuIHJlLW1lcmdpbmcgdGhlIHJlc3VsdCB3aXRob3V0CisgICBkb2luZyBhbnl0aGluZyBlbHNlIGZhbmN5IHdvdWxkIGJlIHRoZSByaWdodCB0aGluZyB0byBkby4KKyAgIChTZWUgdGhlIEFEREVORFVNIGJlbG93IGZvciBob3cgdG8gcmVidWlsZCBhIGJyYW5jaCBmcm9tIHNjcmF0Y2gKKyAgIHdpdGhvdXQgY2hhbmdpbmcgaXRzIG9yaWdpbmFsIGJyYW5jaGluZy1vZmYgcG9pbnQuKQorCitIb3dldmVyLCB0aGVyZSBhcmUgdGhpbmdzIHRvIGtlZXAgaW4gbWluZCB3aGVuIHJldmVydGluZyBhIG1lcmdlIChhbmQKK3JldmVydGluZyBzdWNoIGEgcmV2ZXJ0KS4KKworRm9yIGV4YW1wbGUsIHRoaW5rIGFib3V0IHdoYXQgcmV2ZXJ0aW5nIGEgbWVyZ2UgKGFuZCB0aGVuIHJldmVydGluZyB0aGUKK3JldmVydCkgZG9lcyB0byBiaXNlY3RhYmlsaXR5LiBJZ25vcmUgdGhlIGZhY3QgdGhhdCB0aGUgcmV2ZXJ0IG9mIGEgcmV2ZXJ0CitpcyB1bmRvaW5nIGl0IC0ganVzdCB0aGluayBvZiBpdCBhcyBhICJzaW5nbGUgY29tbWl0IHRoYXQgZG9lcyBhIGxvdCIuCitCZWNhdXNlIHRoYXQgaXMgd2hhdCBpdCBkb2VzLgorCitXaGVuIHlvdSBoYXZlIGEgcHJvYmxlbSB5b3UgYXJlIGNoYXNpbmcgZG93biwgYW5kIHlvdSBoaXQgYSAicmV2ZXJ0IHRoaXMKK21lcmdlIiwgd2hhdCB5b3UncmUgaGl0dGluZyBpcyBlc3NlbnRpYWxseSBhIHNpbmdsZSBjb21taXQgdGhhdCBjb250YWlucworYWxsIHRoZSBjaGFuZ2VzIChidXQgb2J2aW91c2x5IGluIHJldmVyc2UpIG9mIGFsbCB0aGUgY29tbWl0cyB0aGF0IGdvdAorbWVyZ2VkLiBTbyBpdCdzIGRlYnVnZ2luZyBoZWxsLCBiZWNhdXNlIG5vdyB5b3UgZG9uJ3QgaGF2ZSBsb3RzIG9mIHNtYWxsCitjaGFuZ2VzIHRoYXQgeW91IGNhbiB0cnkgdG8gcGlucG9pbnQgd2hpY2ggX3BhcnRfIG9mIGl0IGNoYW5nZXMuCisKK0J1dCBkb2VzIGl0IGFsbCB3b3JrPyBTdXJlIGl0IGRvZXMuIFlvdSBjYW4gcmV2ZXJ0IGEgbWVyZ2UsIGFuZCBmcm9tIGEKK3B1cmVseSB0ZWNobmljYWwgYW5nbGUsIEdpdCBkaWQgaXQgdmVyeSBuYXR1cmFsbHkgYW5kIGhhZCBubyByZWFsCit0cm91Ymxlcy4gSXQganVzdCBjb25zaWRlcmVkIGl0IGEgY2hhbmdlIGZyb20gInN0YXRlIGJlZm9yZSBtZXJnZSIgdG8KKyJzdGF0ZSBhZnRlciBtZXJnZSIsIGFuZCB0aGF0IHdhcyBpdC4gTm90aGluZyBjb21wbGljYXRlZCwgbm90aGluZyBvZGQsCitub3RoaW5nIHJlYWxseSBkYW5nZXJvdXMuIEdpdCB3aWxsIGRvIGl0IHdpdGhvdXQgZXZlbiB0aGlua2luZyBhYm91dCBpdC4KKworU28gZnJvbSBhIHRlY2huaWNhbCBhbmdsZSwgdGhlcmUncyBub3RoaW5nIHdyb25nIHdpdGggcmV2ZXJ0aW5nIGEgbWVyZ2UsCitidXQgZnJvbSBhIHdvcmtmbG93IGFuZ2xlIGl0J3Mgc29tZXRoaW5nIHRoYXQgeW91IGdlbmVyYWxseSBzaG91bGQgdHJ5IHRvCithdm9pZC4KKworSWYgYXQgYWxsIHBvc3NpYmxlLCBmb3IgZXhhbXBsZSwgaWYgeW91IGZpbmQgYSBwcm9ibGVtIHRoYXQgZ290IG1lcmdlZAoraW50byB0aGUgbWFpbiB0cmVlLCByYXRoZXIgdGhhbiByZXZlcnQgdGhlIG1lcmdlLCB0cnkgX3JlYWxseV8gaGFyZCB0bworYmlzZWN0IHRoZSBwcm9ibGVtIGRvd24gaW50byB0aGUgYnJhbmNoIHlvdSBtZXJnZWQsIGFuZCBqdXN0IGZpeCBpdCwgb3IKK3RyeSB0byByZXZlcnQgdGhlIGluZGl2aWR1YWwgY29tbWl0IHRoYXQgY2F1c2VkIGl0LgorCitZZXMsIGl0J3MgbW9yZSBjb21wbGV4LCBhbmQgbm8sIGl0J3Mgbm90IGFsd2F5cyBnb2luZyB0byB3b3JrIChzb21ldGltZXMKK3RoZSBhbnN3ZXIgaXM6ICJvb3BzLCBJIHJlYWxseSBzaG91bGRuJ3QgaGF2ZSBtZXJnZWQgaXQsIGJlY2F1c2UgaXQgd2Fzbid0CityZWFkeSB5ZXQsIGFuZCBJIHJlYWxseSBuZWVkIHRvIHVuZG8gX2FsbF8gb2YgdGhlIG1lcmdlIikuIFNvIHRoZW4geW91CityZWFsbHkgc2hvdWxkIHJldmVydCB0aGUgbWVyZ2UsIGJ1dCB3aGVuIHlvdSB3YW50IHRvIHJlLWRvIHRoZSBtZXJnZSwgeW91Citub3cgbmVlZCB0byBkbyBpdCBieSByZXZlcnRpbmcgdGhlIHJldmVydC4KKworQURERU5EVU0KKworU29tZXRpbWVzIHlvdSBoYXZlIHRvIHJld3JpdGUgb25lIG9mIGEgdG9waWMgYnJhbmNoJ3MgY29tbWl0cyAqYW5kKiB5b3UgY2FuJ3QKK2NoYW5nZSB0aGUgdG9waWMncyBicmFuY2hpbmctb2ZmIHBvaW50LiAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisKKyBQLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teAorICBcICAgICAgICAgLworICAgQS0tLUItLS1DCisKK3doZXJlIGNvbW1pdCBXIHJldmVydGVkIGNvbW1pdCBNIGJlY2F1c2UgaXQgdHVybmVkIG91dCB0aGF0IGNvbW1pdCBCIHdhcyB3cm9uZworYW5kIG5lZWRzIHRvIGJlIHJld3JpdHRlbiwgYnV0IHlvdSBuZWVkIHRoZSByZXdyaXR0ZW4gdG9waWMgdG8gc3RpbGwgYnJhbmNoCitmcm9tIGNvbW1pdCBQIChwZXJoYXBzIFAgaXMgYSBicmFuY2hpbmctb2ZmIHBvaW50IGZvciB5ZXQgYW5vdGhlciBicmFuY2gsIGFuZAoreW91IHdhbnQgYmUgYWJsZSB0byBtZXJnZSB0aGUgdG9waWMgaW50byBib3RoIGJyYW5jaGVzKS4KKworVGhlIG5hdHVyYWwgdGhpbmcgdG8gZG8gaW4gdGhpcyBjYXNlIGlzIHRvIGNoZWNrb3V0IHRoZSBBLUItQyBicmFuY2ggYW5kIHVzZQorInJlYmFzZSAtaSBQIiB0byBjaGFuZ2UgY29tbWl0IEIuICBIb3dldmVyIHRoaXMgZG9lcyBub3QgcmV3cml0ZSBjb21taXQgQSwKK2JlY2F1c2UgInJlYmFzZSAtaSIgYnkgZGVmYXVsdCBmYXN0LWZvcndhcmRzIG92ZXIgYW55IGluaXRpYWwgY29tbWl0cyBzZWxlY3RlZAord2l0aCB0aGUgInBpY2siIGNvbW1hbmQuICBTbyB5b3UgZW5kIHVwIHdpdGggdGhpczoKKworIFAtLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14CisgIFwgICAgICAgICAvCisgICBBLS0tQi0tLUMgICA8LS0gb2xkIGJyYW5jaAorICAgIFwKKyAgICAgQictLS1DJyAgIDwtLSBuYWl2ZWx5IHJld3JpdHRlbiBicmFuY2gKKworVG8gbWVyZ2UgQS1CJy1DJyBpbnRvIHRoZSBtYWlubGluZSBicmFuY2ggeW91IHdvdWxkIHN0aWxsIGhhdmUgdG8gZmlyc3QgcmV2ZXJ0Citjb21taXQgVyBpbiBvcmRlciB0byBwaWNrIHVwIHRoZSBjaGFuZ2VzIGluIEEsIGJ1dCB0aGVuIGl0J3MgbGlrZWx5IHRoYXQgdGhlCitjaGFuZ2VzIGluIEInIHdpbGwgY29uZmxpY3Qgd2l0aCB0aGUgb3JpZ2luYWwgQiBjaGFuZ2VzIHJlLWludHJvZHVjZWQgYnkgdGhlCityZXZlcnNpb24gb2YgVy4KKworSG93ZXZlciwgeW91IGNhbiBhdm9pZCB0aGVzZSBwcm9ibGVtcyBpZiB5b3UgcmVjcmVhdGUgdGhlIGVudGlyZSBicmFuY2gsCitpbmNsdWRpbmcgY29tbWl0IEE6CisKKyAgIEEnLS0tQictLS1DJyAgPC0tIGNvbXBsZXRlbHkgcmV3cml0dGVuIGJyYW5jaAorICAvCisgUC0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgKKyAgXCAgICAgICAgIC8KKyAgIEEtLS1CLS0tQworCitZb3UgY2FuIG1lcmdlIEEnLUInLUMnIGludG8gdGhlIG1haW5saW5lIGJyYW5jaCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IGZpcnN0CityZXZlcnRpbmcgVy4gIE1haW5saW5lJ3MgaGlzdG9yeSB3b3VsZCBsb29rIGxpa2UgdGhpczoKKworICAgQSctLS1CJy0tLUMnLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgUC0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgtLS1NMgorICBcICAgICAgICAgLworICAgQS0tLUItLS1DCisKK0J1dCBpZiB5b3UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBjaGFuZ2UgY29tbWl0IEEsIHRoZW4geW91IG5lZWQgc29tZSB3YXkgdG8KK3JlY3JlYXRlIGl0IGFzIGEgbmV3IGNvbW1pdCB3aXRoIHRoZSBzYW1lIGNoYW5nZXMgaW4gaXQuICBUaGUgcmViYXNlIGNvbW1hbmQncworLS1uby1mZiBvcHRpb24gcHJvdmlkZXMgYSB3YXkgdG8gZG8gdGhpczoKKworICAgICQgZ2l0IHJlYmFzZSBbLWldIC0tbm8tZmYgUAorCitUaGUgLS1uby1mZiBvcHRpb24gY3JlYXRlcyBhIG5ldyBicmFuY2ggQSctQictQycgd2l0aCBhbGwtbmV3IGNvbW1pdHMgKGFsbCB0aGUKK1NIQSBJRHMgd2lsbCBiZSBkaWZmZXJlbnQpIGV2ZW4gaWYgaW4gdGhlIGludGVyYWN0aXZlIGNhc2UgeW91IG9ubHkgYWN0dWFsbHkKK21vZGlmeSBjb21taXQgQi4gIFlvdSBjYW4gdGhlbiBtZXJnZSB0aGlzIG5ldyBicmFuY2ggZGlyZWN0bHkgaW50byB0aGUgbWFpbmxpbmUKK2JyYW5jaCBhbmQgYmUgc3VyZSB5b3UnbGwgZ2V0IGFsbCBvZiB0aGUgYnJhbmNoJ3MgY2hhbmdlcy4KKworWW91IGNhbiBhbHNvIHVzZSAtLW5vLWZmIGluIGNhc2VzIHdoZXJlIHlvdSBqdXN0IGFkZCBleHRyYSBjb21taXRzIHRvIHRoZSB0b3BpYwordG8gZml4IGl0IHVwLiAgTGV0J3MgcmV2aXNpdCB0aGUgc2l0dWF0aW9uIGRpc2N1c3NlZCBhdCB0aGUgc3RhcnQgb2YgdGhpcyBob3d0bzoKKworIFAtLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14CisgIFwgICAgICAgICAvCisgICBBLS0tQi0tLUMtLS0tLS0tLS0tLS0tLS0tRC0tLUUgICA8LS0gZml4ZWQtdXAgdG9waWMgYnJhbmNoCisKK0F0IHRoaXMgcG9pbnQsIHlvdSBjYW4gdXNlIC0tbm8tZmYgdG8gcmVjcmVhdGUgdGhlIHRvcGljIGJyYW5jaDoKKworICAgICQgZ2l0IGNoZWNrb3V0IEUKKyAgICAkIGdpdCByZWJhc2UgLS1uby1mZiBQCisKK3lpZWxkaW5nCisKKyAgIEEnLS0tQictLS1DJy0tLS0tLS0tLS0tLUQnLS0tRScgIDwtLSByZWNyZWF0ZWQgdG9waWMgYnJhbmNoCisgIC8KKyBQLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teAorICBcICAgICAgICAgLworICAgQS0tLUItLS1DLS0tLS0tLS0tLS0tLS0tLUQtLS1FCisKK1lvdSBjYW4gbWVyZ2UgdGhlIHJlY3JlYXRlZCBicmFuY2ggaW50byB0aGUgbWFpbmxpbmUgd2l0aG91dCByZXZlcnRpbmcgY29tbWl0IFcsCithbmQgbWFpbmxpbmUncyBoaXN0b3J5IHdpbGwgbG9vayBsaWtlIHRoaXM6CisKKyAgIEEnLS0tQictLS1DJy0tLS0tLS0tLS0tLUQnLS0tRScKKyAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyBQLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teC0tLU0yCisgIFwgICAgICAgICAvCisgICBBLS0tQi0tLUMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWJyYW5jaC1yZWJhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZXZlcnQtYnJhbmNoLXJlYmFzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ5NTA4ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWJyYW5jaC1yZWJhc2UudHh0CkBAIC0wLDAgKzEsMTg3IEBACitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitUbzogZ2l0QHZnZXIua2VybmVsLm9yZworU3ViamVjdDogW0hPV1RPXSBSZXZlcnRpbmcgYW4gZXhpc3RpbmcgY29tbWl0CitBYnN0cmFjdDogSW4gdGhpcyBhcnRpY2xlLCBKQyBnaXZlcyBhIHNtYWxsIHJlYWwtbGlmZSBleGFtcGxlIG9mIHVzaW5nCisgJ2dpdCByZXZlcnQnIGNvbW1hbmQsIGFuZCB1c2luZyBhIHRlbXBvcmFyeSBicmFuY2ggYW5kIHRhZyBmb3Igc2FmZXR5CisgYW5kIGVhc2llciBzYW5pdHkgY2hlY2tpbmcuCitEYXRlOiBNb24sIDI5IEF1ZyAyMDA1IDIxOjM5OjAyIC0wNzAwCitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKK01lc3NhZ2UtSUQ6IDw3dm9lN2czdW9wLmZzZkBhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQ+CisKK0hvdyB0byByZXZlcnQgYW4gZXhpc3RpbmcgY29tbWl0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPbmUgb2YgdGhlIGNoYW5nZXMgSSBwdWxsZWQgaW50byB0aGUgJ21hc3RlcicgYnJhbmNoIHR1cm5zIG91dCB0bworYnJlYWsgYnVpbGRpbmcgR2l0IHdpdGggR0NDIDIuOTUuICBXaGlsZSB0aGV5IHdlcmUgd2VsbC1pbnRlbnRpb25lZAorcG9ydGFiaWxpdHkgZml4ZXMsIGtlZXBpbmcgdGhpbmdzIHdvcmtpbmcgd2l0aCBnY2MtMi45NSB3YXMgYWxzbworaW1wb3J0YW50LiAgSGVyZSBpcyB3aGF0IEkgZGlkIHRvIHJldmVydCB0aGUgY2hhbmdlIGluIHRoZSAnbWFzdGVyJworYnJhbmNoIGFuZCB0byBhZGp1c3QgdGhlICdwdScgYnJhbmNoLCB1c2luZyBjb3JlIEdpdCB0b29scyBhbmQKK2JhcmVib25lIFBvcmNlbGFpbi4KKworRmlyc3QsIHByZXBhcmUgYSB0aHJvdy1hd2F5IGJyYW5jaCBpbiBjYXNlIEkgc2NyZXcgdGhpbmdzIHVwLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1iIHJldmVydC1jOTkgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm93IEkgYW0gb24gdGhlICdyZXZlcnQtYzk5JyBicmFuY2guICBMZXQncyBmaWd1cmUgb3V0IHdoaWNoIGNvbW1pdCB0bworcmV2ZXJ0LiAgSSBoYXBwZW4gdG8ga25vdyB0aGF0IHRoZSB0b3Agb2YgdGhlICdtYXN0ZXInIGJyYW5jaCBpcyBhCittZXJnZSwgYW5kIGl0cyBzZWNvbmQgcGFyZW50IChpLmUuIGZvcmVpZ24gY29tbWl0IEkgbWVyZ2VkIGZyb20pIGhhcwordGhlIGNoYW5nZSBJIHdvdWxkIHdhbnQgdG8gdW5kby4gIEZ1cnRoZXIgSSBoYXBwZW4gdG8ga25vdyB0aGF0IHRoYXQKK21lcmdlIGludHJvZHVjZWQgNSBjb21taXRzIG9yIHNvOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoIC0tbW9yZT00IG1hc3RlciBtYXN0ZXJeMiB8IGhlYWQKKyogW21hc3Rlcl0gTWVyZ2UgcmVmcy9oZWFkcy9wb3J0YWJsZSBmcm9tIGh0dHA6Ly93d3cuY3MuYmVya2VsZXkuLi4uCisgISBbbWFzdGVyXjJdIFJlcGxhY2UgQzk5IGFycmF5IGluaXRpYWxpemVycyB3aXRoIGNvZGUuCistLQorLSAgW21hc3Rlcl0gTWVyZ2UgcmVmcy9oZWFkcy9wb3J0YWJsZSBmcm9tIGh0dHA6Ly93d3cuY3MuYmVya2VsZXkuLi4uCisqKyBbbWFzdGVyXjJdIFJlcGxhY2UgQzk5IGFycmF5IGluaXRpYWxpemVycyB3aXRoIGNvZGUuCisqKyBbbWFzdGVyXjJ+MV0gUmVwbGFjZSB1bnNldGVudigpIGFuZCBzZXRlbnYoKSB3aXRoIG9sZGVyIHB1dGVudigpLgorKisgW21hc3Rlcl4yfjJdIEluY2x1ZGUgc3lzL3RpbWUuaCBpbiBkYWVtb24uYy4KKyorIFttYXN0ZXJeMn4zXSBGaXggPzogc3RhdGVtZW50cy4KKyorIFttYXN0ZXJeMn40XSBSZXBsYWNlIHplcm8tbGVuZ3RoIGFycmF5IGRlY2xzIHdpdGggW10uCisqICBbbWFzdGVyfjFdIHR1dG9yaWFsIG5vdGUgYWJvdXQgZ2l0IGJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAnLS1tb3JlPTQnIGFib3ZlIG1lYW5zICJhZnRlciB3ZSByZWFjaCB0aGUgbWVyZ2UgYmFzZSBvZiByZWZzLAorc2hvdyB1bnRpbCB3ZSBkaXNwbGF5IGZvdXIgbW9yZSBjb21tb24gY29tbWl0cyIuICBUaGF0IGxhc3QgY29tbWl0Cit3b3VsZCBoYXZlIGJlZW4gd2hlcmUgdGhlICJwb3J0YWJsZSIgYnJhbmNoIHdhcyBmb3JrZWQgZnJvbSB0aGUgbWFpbgorZ2l0LmdpdCByZXBvc2l0b3J5LCBzbyB0aGlzIHdvdWxkIHNob3cgZXZlcnl0aGluZyBvbiBib3RoIGJyYW5jaGVzCitzaW5jZSB0aGVuLiAgSSBqdXN0IGxpbWl0ZWQgdGhlIG91dHB1dCB0byB0aGUgZmlyc3QgaGFuZGZ1bCB1c2luZworJ2hlYWQnLgorCitOb3cgSSBrbm93ICdtYXN0ZXJeMn40JyAocHJvbm91bmNlIGl0IGFzICJmaW5kIHRoZSBzZWNvbmQgcGFyZW50IG9mCit0aGUgJ21hc3RlcicsIGFuZCB0aGVuIGdvIGZvdXIgZ2VuZXJhdGlvbnMgYmFjayBmb2xsb3dpbmcgdGhlIGZpcnN0CitwYXJlbnQiKSBpcyB0aGUgb25lIEkgd291bGQgd2FudCB0byByZXZlcnQuICBTaW5jZSBJIGFsc28gd2FudCB0byBzYXkKK3doeSBJIGFtIHJldmVydGluZyBpdCwgdGhlICctbicgZmxhZyBpcyBnaXZlbiB0byAnZ2l0IHJldmVydCcuICBUaGlzCitwcmV2ZW50cyBpdCBmcm9tIGFjdHVhbGx5IG1ha2luZyBhIGNvbW1pdCwgYW5kIGluc3RlYWQgJ2dpdCByZXZlcnQnCitsZWF2ZXMgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBpdCB3YW50ZWQgdG8gdXNlIGluICcubXNnJyBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJldmVydCAtbiBtYXN0ZXJeMn40CiskIGNhdCAubXNnCitSZXZlcnQgIlJlcGxhY2UgemVyby1sZW5ndGggYXJyYXkgZGVjbHMgd2l0aCBbXS4iCisKK1RoaXMgcmV2ZXJ0cyA2YzVmOWJhYTNiYzBkNjNlMTQxZTBhZmMyMzExMDIwNTM3OTkwNWE0IGNvbW1pdC4KKyQgZ2l0IGRpZmYgSEVBRCA7IyB0byBtYWtlIHN1cmUgd2hhdCB3ZSBhcmUgcmV2ZXJ0aW5nIG1ha2VzIHNlbnNlLgorJCBtYWtlIENDPWdjYy0yLjk1IGNsZWFuIHRlc3QgOyMgbWFrZSBzdXJlIGl0IGZpeGVkIHRoZSBicmVha2FnZS4KKyQgbWFrZSBjbGVhbiB0ZXN0IDsjIG1ha2Ugc3VyZSBpdCBkaWQgbm90IGNhdXNlIG90aGVyIGJyZWFrYWdlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZXZlcnRlZCBjaGFuZ2UgbWFrZXMgc2Vuc2UgKGZyb20gcmVhZGluZyB0aGUgJ2RpZmYnIG91dHB1dCksIGRvZXMKK2ZpeCB0aGUgcHJvYmxlbSAoZnJvbSAnbWFrZSBDQz1nY2MtMi45NScgdGVzdCksIGFuZCBkb2VzIG5vdCBjYXVzZSBuZXcKK2JyZWFrYWdlIChmcm9tIHRoZSBsYXN0ICdtYWtlIHRlc3QnKS4gIEknbSByZWFkeSB0byBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC1hIC1zIDsjIHJlYWQgLm1zZyBpbnRvIHRoZSBsb2csCisgICAgICAgICAgICAgICAgICAgICMgYW5kIGV4cGxhaW4gd2h5IEkgYW0gcmV2ZXJ0aW5nLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0kgY291bGQgaGF2ZSBzY3Jld2VkIHVwIGluIGFueSBvZiB0aGUgYWJvdmUgc3RlcHMsIGJ1dCBpbiB0aGUgd29yc3QKK2Nhc2UgSSBjb3VsZCBqdXN0IGhhdmUgZG9uZSAnZ2l0IGNoZWNrb3V0IG1hc3RlcicgdG8gc3RhcnQgb3Zlci4KK0ZvcnR1bmF0ZWx5IEkgZGlkIG5vdCBoYXZlIHRvOyB3aGF0IEkgaGF2ZSBpbiB0aGUgY3VycmVudCBicmFuY2gKKydyZXZlcnQtYzk5JyBpcyB3aGF0IEkgd2FudC4gIFNvIG1lcmdlIHRoYXQgYmFjayBpbnRvICdtYXN0ZXInOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorJCBnaXQgbWVyZ2UgcmV2ZXJ0LWM5OSA7IyB0aGlzIHNob3VsZCBiZSBhIGZhc3QtZm9yd2FyZAorVXBkYXRpbmcgZnJvbSAxMGQ3ODFiOWNhYTRmNzE0OTVjN2IzNDk2M2JlZjEzNzIxNmY4NmE4IHRvIGUzYTY5M2MuLi4KKyBjYWNoZS5oICAgICAgICB8ICAgIDggKysrKy0tLS0KKyBjb21taXQuYyAgICAgICB8ICAgIDIgKy0KKyBscy1maWxlcy5jICAgICB8ICAgIDIgKy0KKyByZWNlaXZlLXBhY2suYyB8ICAgIDIgKy0KKyBzZXJ2ZXItaW5mby5jICB8ICAgIDIgKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBpcyBubyBuZWVkIHRvIHJlZG8gdGhlIHRlc3QgYXQgdGhpcyBwb2ludC4gIFdlIGZhc3QtZm9yd2FyZGVkCithbmQgd2Uga25vdyAnbWFzdGVyJyBtYXRjaGVzICdyZXZlcnQtYzk5JyBleGFjdGx5LiAgSW4gZmFjdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIG1hc3Rlci4ucmV2ZXJ0LWM5OQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3NheXMgbm90aGluZy4KKworVGhlbiB3ZSByZWJhc2UgdGhlICdwdScgYnJhbmNoIGFzIHVzdWFsLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IHB1CiskIGdpdCB0YWcgcHUtYW5jaG9yIHB1CiskIGdpdCByZWJhc2UgbWFzdGVyCisqIEFwcGx5aW5nOiBSZWRvICJyZXZlcnQiIHVzaW5nIHRocmVlLXdheSBtZXJnZSBtYWNoaW5lcnkuCitGaXJzdCB0cnlpbmcgc2ltcGxlIG1lcmdlIHN0cmF0ZWd5IHRvIGNoZXJyeS1waWNrLgorKiBBcHBseWluZzogUmVtb3ZlIGdpdC1hcHBseS1wYXRjaC1zY3JpcHQuCitGaXJzdCB0cnlpbmcgc2ltcGxlIG1lcmdlIHN0cmF0ZWd5IHRvIGNoZXJyeS1waWNrLgorU2ltcGxlIGNoZXJyeS1waWNrIGZhaWxzOyB0cnlpbmcgQXV0b21hdGljIGNoZXJyeS1waWNrLgorUmVtb3ZpbmcgRG9jdW1lbnRhdGlvbi9naXQtYXBwbHktcGF0Y2gtc2NyaXB0LnR4dAorUmVtb3ZpbmcgZ2l0LWFwcGx5LXBhdGNoLXNjcmlwdAorKiBBcHBseWluZzogRG9jdW1lbnQgImdpdCBjaGVycnktcGljayIgYW5kICJnaXQgcmV2ZXJ0IgorRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byBjaGVycnktcGljay4KKyogQXBwbHlpbmc6IG1haWxpbmZvIGFuZCBhcHBseW1ib3ggdXBkYXRlcworRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byBjaGVycnktcGljay4KKyogQXBwbHlpbmc6IFNob3cgY29tbWl0cyBpbiB0b3BvIG9yZGVyIGFuZCBuYW1lIGFsbCBjb21taXRzLgorRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byBjaGVycnktcGljay4KKyogQXBwbHlpbmc6IE1vcmUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byBjaGVycnktcGljay4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdGVtcG9yYXJ5IHRhZyAncHUtYW5jaG9yJyBpcyBtZSBqdXN0IGJlaW5nIGNhcmVmdWwsIGluIGNhc2UgJ2dpdAorcmViYXNlJyBzY3Jld3MgdXAuICBBZnRlciB0aGlzLCBJIGNhbiBkbyB0aGVzZSBmb3Igc2FuaXR5IGNoZWNrOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgcHUtYW5jaG9yLi5wdSA7IyBtYWtlIHN1cmUgd2UgZ290IHRoZSBtYXN0ZXIgZml4LgorJCBtYWtlIENDPWdjYy0yLjk1IGNsZWFuIHRlc3QgOyMgbWFrZSBzdXJlIGl0IGZpeGVkIHRoZSBicmVha2FnZS4KKyQgbWFrZSBjbGVhbiB0ZXN0IDsjIG1ha2Ugc3VyZSBpdCBkaWQgbm90IGNhdXNlIG90aGVyIGJyZWFrYWdlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V2ZXJ5dGhpbmcgaXMgaW4gdGhlIGdvb2Qgb3JkZXIuICBJIGRvIG5vdCBuZWVkIHRoZSB0ZW1wb3JhcnkgYnJhbmNoCitvciB0YWcgYW55bW9yZSwgc28gcmVtb3ZlIHRoZW06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBybSAtZiAuZ2l0L3JlZnMvdGFncy9wdS1hbmNob3IKKyQgZ2l0IGJyYW5jaCAtZCByZXZlcnQtYzk5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgd2FzIGFuIGVtZXJnZW5jeSBmaXgsIHNvIHdlIG1pZ2h0IGFzIHdlbGwgbWVyZ2UgaXQgaW50byB0aGUKKydyZWxlYXNlIGNhbmRpZGF0ZScgYnJhbmNoLCBhbHRob3VnaCBJIGV4cGVjdCB0aGUgbmV4dCByZWxlYXNlIHdvdWxkCitiZSBzb21lIGRheXMgb2ZmOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IHJjCiskIGdpdCBwdWxsIC4gbWFzdGVyCitQYWNraW5nIDAgb2JqZWN0cworVW5wYWNraW5nIDAgb2JqZWN0cworCisqIGNvbW1pdC1pc2g6IGUzYTY5M2MuLi4JcmVmcy9oZWFkcy9tYXN0ZXIgZnJvbSAuCitUcnlpbmcgdG8gbWVyZ2UgZTNhNjkzYy4uLiBpbnRvIDhjMWY1ZjAuLi4gdXNpbmcgMTBkNzgxYi4uLgorQ29tbWl0dGVkIG1lcmdlIDdmYjliNzI2MmExZDFlMGE0N2JiZmRjYmJjZjUwY2UwNjM1ZDNmOGYKKyBjYWNoZS5oICAgICAgICB8ICAgIDggKysrKy0tLS0KKyBjb21taXQuYyAgICAgICB8ICAgIDIgKy0KKyBscy1maWxlcy5jICAgICB8ICAgIDIgKy0KKyByZWNlaXZlLXBhY2suYyB8ICAgIDIgKy0KKyBzZXJ2ZXItaW5mby5jICB8ICAgIDIgKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbmQgdGhlIGZpbmFsIHJlcG9zaXRvcnkgc3RhdHVzIGxvb2tzIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCAtLW1vcmU9MSBtYXN0ZXIgcHUgcmMKKyEgW21hc3Rlcl0gUmV2ZXJ0ICJSZXBsYWNlIHplcm8tbGVuZ3RoIGFycmF5IGRlY2xzIHdpdGggW10uIgorICEgW3B1XSBnaXQtcmVwYWNrOiBBZGQgb3B0aW9uIHRvIHJlcGFjayBhbGwgb2JqZWN0cy4KKyAgKiBbcmNdIE1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyIGZyb20gLgorLS0tCisgKyAgW3B1XSBnaXQtcmVwYWNrOiBBZGQgb3B0aW9uIHRvIHJlcGFjayBhbGwgb2JqZWN0cy4KKyArICBbcHV+MV0gTW9yZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisgKyAgW3B1fjJdIFNob3cgY29tbWl0cyBpbiB0b3BvIG9yZGVyIGFuZCBuYW1lIGFsbCBjb21taXRzLgorICsgIFtwdX4zXSBtYWlsaW5mbyBhbmQgYXBwbHltYm94IHVwZGF0ZXMKKyArICBbcHV+NF0gRG9jdW1lbnQgImdpdCBjaGVycnktcGljayIgYW5kICJnaXQgcmV2ZXJ0IgorICsgIFtwdX41XSBSZW1vdmUgZ2l0LWFwcGx5LXBhdGNoLXNjcmlwdC4KKyArICBbcHV+Nl0gUmVkbyAicmV2ZXJ0IiB1c2luZyB0aHJlZS13YXkgbWVyZ2UgbWFjaGluZXJ5LgorICAtIFtyY10gTWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIgZnJvbSAuCisrKyogW21hc3Rlcl0gUmV2ZXJ0ICJSZXBsYWNlIHplcm8tbGVuZ3RoIGFycmF5IGRlY2xzIHdpdGggW10uIgorICAtIFtyY34xXSBNZXJnZSByZWZzL2hlYWRzL21hc3RlciBmcm9tIC4KKy4uLiBbbWFzdGVyfjFdIE1lcmdlIHJlZnMvaGVhZHMvcG9ydGFibGUgZnJvbSBodHRwOi8vd3d3LmNzLmJlcmtlbGV5Li4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3NlcGFyYXRpbmctdG9waWMtYnJhbmNoZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXBhcmF0aW5nLXRvcGljLWJyYW5jaGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWJlMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXBhcmF0aW5nLXRvcGljLWJyYW5jaGVzLnR4dApAQCAtMCwwICsxLDk0IEBACitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitTdWJqZWN0OiBTZXBhcmF0aW5nIHRvcGljIGJyYW5jaGVzCitBYnN0cmFjdDogSW4gdGhpcyBhcnRpY2xlLCBKQyBkZXNjcmliZXMgaG93IHRvIHNlcGFyYXRlIHRvcGljIGJyYW5jaGVzLgorQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jCisKK0hvdyB0byBzZXBhcmF0ZSB0b3BpYyBicmFuY2hlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgdGV4dCB3YXMgb3JpZ2luYWxseSBhIGZvb3Rub3RlIHRvIGEgZGlzY3Vzc2lvbiBhYm91dCB0aGUKK2JlaGF2aW91ciBvZiB0aGUgZ2l0IGRpZmYgY29tbWFuZHMuCisKK09mdGVuIEkgZmluZCBteXNlbGYgZG9pbmcgdGhhdCBbcnVubmluZyBkaWZmIGFnYWluc3Qgc29tZXRoaW5nIG90aGVyCit0aGFuIEhFQURdIHdoaWxlIHJld3JpdGluZyBtZXNzeSBkZXZlbG9wbWVudCBoaXN0b3J5LiAgRm9yIGV4YW1wbGUsIEkKK3N0YXJ0IGRvaW5nIHNvbWUgd29yayB3aXRob3V0IGtub3dpbmcgZXhhY3RseSB3aGVyZSBpdCBsZWFkcywgYW5kIGVuZAordXAgd2l0aCBhIGhpc3RvcnkgbGlrZSB0aGlzOgorCisgICAgICAgICAgICAibWFzdGVyIgorICAgICAgICBvLS0tbworICAgICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgICJ0b3BpYyIKKyAgICAgICAgICAgICAgby0tLW8tLS1vLS0tby0tLW8tLS1vCisKK0F0IHRoaXMgcG9pbnQsICJ0b3BpYyIgY29udGFpbnMgc29tZXRoaW5nIEkga25vdyBJIHdhbnQsIGJ1dCBpdAorY29udGFpbnMgdHdvIGNvbmNlcHRzIHRoYXQgdHVybmVkIG91dCB0byBiZSBjb21wbGV0ZWx5IGluZGVwZW5kZW50LgorQW5kIG9mdGVuLCBvbmUgdG9waWMgY29tcG9uZW50IGlzIGxhcmdlciB0aGFuIHRoZSBvdGhlci4gIEl0IG1heQorY29udGFpbiBtb3JlIHRoYW4gdHdvIHRvcGljcy4KKworSW4gb3JkZXIgdG8gcmV3cml0ZSB0aGlzIG1lc3MgdG8gYmUgbW9yZSBtYW5hZ2VhYmxlLCBJIHdvdWxkIGZpcnN0IGRvCisiZGlmZiBtYXN0ZXIuLnRvcGljIiwgdG8gZXh0cmFjdCB0aGUgY2hhbmdlcyBpbnRvIGEgc2luZ2xlIHBhdGNoLCBzdGFydAorcGlja2luZyBwaWVjZXMgZnJvbSBpdCB0byBnZXQgbG9naWNhbGx5IHNlbGYtY29udGFpbmVkIHVuaXRzLCBhbmQKK3N0YXJ0IGJ1aWxkaW5nIG9uIHRvcCBvZiAibWFzdGVyIjoKKworICAgICAgICAkIGdpdCBkaWZmIG1hc3Rlci4udG9waWMgPlAuZGlmZgorICAgICAgICAkIGdpdCBjaGVja291dCAtYiB0b3BpY0EgbWFzdGVyCisgICAgICAgIC4uLiBwaWNrIGFuZCBhcHBseSBwaWVjZXMgZnJvbSBQLmRpZmYgdG8gYnVpbGQKKyAgICAgICAgLi4uIGNvbW1pdHMgb24gdG9waWNBIGJyYW5jaC4KKworICAgICAgICAgICAgICBvLS0tby0tLW8KKyAgICAgICAgICAgICAvICAgICAgICAidG9waWNBIgorICAgICAgICBvLS0tbyJtYXN0ZXIiCisgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgInRvcGljIgorICAgICAgICAgICAgICBvLS0tby0tLW8tLS1vLS0tby0tLW8KKworQmVmb3JlIGRvaW5nIGVhY2ggY29tbWl0IG9uICJ0b3BpY0EiIEhFQUQsIEkgcnVuICJkaWZmIEhFQUQiCitiZWZvcmUgdXBkYXRlLWluZGV4IHRoZSBhZmZlY3RlZCBwYXRocywgb3IgImRpZmYgLS1jYWNoZWQgSEVBRCIKK2FmdGVyLiAgQWxzbyBJIHdvdWxkIHJ1biAiZGlmZiAtLWNhY2hlZCBtYXN0ZXIiIHRvIG1ha2Ugc3VyZQordGhhdCB0aGUgY2hhbmdlcyBhcmUgb25seSB0aGUgb25lcyByZWxhdGVkIHRvICJ0b3BpY0EiLiAgVXN1YWxseQorSSBkbyB0aGlzIGZvciBzbWFsbGVyIHRvcGljcyBmaXJzdC4KKworQWZ0ZXIgdGhhdCwgSSdkIGRvIHRoZSByZW1haW5kZXIgb2YgdGhlIG9yaWdpbmFsICJ0b3BpYyIsIGJ1dAorZm9yIHRoYXQsIEkgZG8gbm90IHN0YXJ0IGZyb20gdGhlIHBhdGNoZmlsZSBJIGV4dHJhY3RlZCBieQorY29tcGFyaW5nICJtYXN0ZXIiIGFuZCAidG9waWMiIEkgdXNlZCBpbml0aWFsbHkuICBTdGlsbCBvbgorInRvcGljQSIsIEkgZXh0cmFjdCAiZGlmZiB0b3BpYyIsIGFuZCB1c2UgaXQgdG8gcmVidWlsZCB0aGUKK290aGVyIHRvcGljOgorCisgICAgICAgICQgZ2l0IGRpZmYgLVIgdG9waWMgPlAuZGlmZiA7IyAtLWNhY2hlZCBhbHNvIHdvdWxkIHdvcmsgZmluZQorICAgICAgICAkIGdpdCBjaGVja291dCAtYiB0b3BpY0IgbWFzdGVyCisgICAgICAgIC4uLiBwaWNrIGFuZCBhcHBseSBwaWVjZXMgZnJvbSBQLmRpZmYgdG8gYnVpbGQKKyAgICAgICAgLi4uIGNvbW1pdHMgb24gdG9waWNCIGJyYW5jaC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9waWNCIgorICAgICAgICAgICAgICAgby0tLW8tLS1vLS0tby0tLW8KKyAgICAgICAgICAgICAgLworICAgICAgICAgICAgIC9vLS0tby0tLW8KKyAgICAgICAgICAgIHwvICAgICAgICAidG9waWNBIgorICAgICAgICBvLS0tbyJtYXN0ZXIiCisgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgInRvcGljIgorICAgICAgICAgICAgICBvLS0tby0tLW8tLS1vLS0tby0tLW8KKworQWZ0ZXIgSSBhbSBkb25lLCBJJ2QgdHJ5IGEgcHJldGVuZC1tZXJnZSBiZXR3ZWVuICJ0b3BpY0EiIGFuZAorInRvcGljQiIgaW4gb3JkZXIgdG8gbWFrZSBzdXJlIEkgaGF2ZSBub3QgbWlzc2VkIGFueXRoaW5nOgorCisgICAgICAgICQgZ2l0IHB1bGwgLiB0b3BpY0EgOyMgbWVyZ2UgaXQgaW50byBjdXJyZW50ICJ0b3BpY0IiCisgICAgICAgICQgZ2l0IGRpZmYgdG9waWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvcGljQiIKKyAgICAgICAgICAgICAgIG8tLS1vLS0tby0tLW8tLS1vLS0tKiAocHJldGVuZCBtZXJnZSkKKyAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAvCisgICAgICAgICAgICAgL28tLS1vLS0tby0tLS0tLS0tLS0nCisgICAgICAgICAgICB8LyAgICAgICAgInRvcGljQSIKKyAgICAgICAgby0tLW8ibWFzdGVyIgorICAgICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgICJ0b3BpYyIKKyAgICAgICAgICAgICAgby0tLW8tLS1vLS0tby0tLW8tLS1vCisKK1RoZSBsYXN0IGRpZmYgYmV0dGVyIG5vdCB0byBzaG93IGFueXRoaW5nIG90aGVyIHRoYW4gY2xlYW51cHMKK2ZvciBjcnVmdC4gIFRoZW4gSSBjYW4gZmluYWxseSBjbGVhbiB0aGluZ3MgdXA6CisKKyAgICAgICAgJCBnaXQgYnJhbmNoIC1EIHRvcGljCisgICAgICAgICQgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiA7IyBudWtlIHByZXRlbmQgbWVyZ2UKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9waWNCIgorICAgICAgICAgICAgICAgby0tLW8tLS1vLS0tby0tLW8KKyAgICAgICAgICAgICAgLworICAgICAgICAgICAgIC9vLS0tby0tLW8KKyAgICAgICAgICAgIHwvICAgICAgICAidG9waWNBIgorICAgICAgICBvLS0tbyJtYXN0ZXIiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vc2V0dXAtZ2l0LXNlcnZlci1vdmVyLWh0dHAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZTZmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwLnR4dApAQCAtMCwwICsxLDI4NSBAQAorRnJvbTogUnV0Z2VyIE5pamx1bnNpbmcgPHJ1dGdlckBub3NwYW0uY29tPgorU3ViamVjdDogU2V0dGluZyB1cCBhIEdpdCByZXBvc2l0b3J5IHdoaWNoIGNhbiBiZSBwdXNoZWQgaW50byBhbmQgcHVsbGVkIGZyb20gb3ZlciBIVFRQKFMpLgorRGF0ZTogVGh1LCAxMCBBdWcgMjAwNiAyMjowMDoyNiArMDIwMAorQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jCisKK0hvdyB0byBzZXR1cCBHaXQgc2VydmVyIG92ZXIgaHR0cAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05PVEU6IFRoaXMgZG9jdW1lbnQgaXMgZnJvbSAyMDA2LiAgQSBsb3QgaGFzIGhhcHBlbmVkIHNpbmNlIHRoZW4sIGFuZCB0aGlzCitkb2N1bWVudCBpcyBub3cgcmVsZXZhbnQgbWFpbmx5IGlmIHlvdXIgd2ViIGhvc3QgaXMgbm90IENHSSBjYXBhYmxlLgorQWxtb3N0IGV2ZXJ5b25lIGVsc2Ugc2hvdWxkIGluc3RlYWQgbG9vayBhdCBsaW5rZ2l0OmdpdC1odHRwLWJhY2tlbmRbMV0uCisKK1NpbmNlIEFwYWNoZSBpcyBvbmUgb2YgdGhvc2UgcGFja2FnZXMgcGVvcGxlIGxpa2UgdG8gY29tcGlsZQordGhlbXNlbHZlcyB3aGlsZSBvdGhlcnMgcHJlZmVyIHRoZSBidXJlYXVjcmF0J3MgZHJlYW0gRGViaWFuLCBpdCBpcworaW1wb3NzaWJsZSB0byBnaXZlIGd1aWRlbGluZXMgd2hpY2ggd2lsbCB3b3JrIGZvciBldmVyeW9uZS4gSnVzdCBzZW5kCitzb21lIGZlZWRiYWNrIHRvIHRoZSBtYWlsaW5nIGxpc3QgYXQgZ2l0QHZnZXIua2VybmVsLm9yZyB0byBnZXQgdGhpcworZG9jdW1lbnQgdGFpbG9yZWQgdG8geW91ciBmYXZvcml0ZSBkaXN0cm8uCisKKworV2hhdCdzIG5lZWRlZDoKKworLSBIYXZlIGFuIEFwYWNoZSB3ZWItc2VydmVyCisKKyAgT24gRGViaWFuOgorICAgICQgYXB0LWdldCBpbnN0YWxsIGFwYWNoZTIKKyAgICBUbyBnZXQgYXBhY2hlMiBieSBkZWZhdWx0IHN0YXJ0ZWQsCisgICAgZWRpdCAvZXRjL2RlZmF1bHQvYXBhY2hlMiBhbmQgc2V0IE5PX1NUQVJUPTAKKworLSBjYW4gZWRpdCB0aGUgY29uZmlndXJhdGlvbiBvZiBpdC4KKworICBUaGlzIGNvdWxkIGJlIGZvdW5kIHVuZGVyIC9ldGMvaHR0cGQsIG9yIHJlZmVyIHRvIHlvdXIgQXBhY2hlIGRvY3VtZW50YXRpb24uCisKKyAgT24gRGViaWFuOiB0aGlzIG1lYW5zIGJlaW5nIGFibGUgdG8gZWRpdCBmaWxlcyB1bmRlciAvZXRjL2FwYWNoZTIKKworLSBjYW4gcmVzdGFydCBpdC4KKworICAnYXBhY2hlY3RsIC0tZ3JhY2VmdWwnIG1pZ2h0IGRvLiBJZiBpdCBkb2Vzbid0LCBqdXN0IHN0b3AgYW5kCisgIHJlc3RhcnQgYXBhY2hlLiBCZSB3YXJuaW5nIHRoYXQgYWN0aXZlIGNvbm5lY3Rpb25zIHRvIHlvdXIgc2VydmVyCisgIG1pZ2h0IGJlIGFib3J0ZWQgYnkgdGhpcy4KKworICBPbiBEZWJpYW46CisgICAgJCAvZXRjL2luaXQuZC9hcGFjaGUyIHJlc3RhcnQKKyAgb3IKKyAgICAkIC9ldGMvaW5pdC5kL2FwYWNoZTIgZm9yY2UtcmVsb2FkCisgICAgKHdoaWNoIHNlZW1zIHRvIGRvIHRoZSBzYW1lKQorICBUaGlzIGFkZHMgc3ltbGlua3MgZnJvbSB0aGUgL2V0Yy9hcGFjaGUyL21vZHMtZW5hYmxlZCB0bworICAvZXRjL2FwYWNoZTIvbW9kcy1hdmFpbGFibGUuCisKKy0gaGF2ZSBwZXJtaXNzaW9ucyB0byBjaG93biBhIGRpcmVjdG9yeQorCistIGhhdmUgR2l0IGluc3RhbGxlZCBvbiB0aGUgY2xpZW50LCBhbmQKKworLSBlaXRoZXIgaGF2ZSBHaXQgaW5zdGFsbGVkIG9uIHRoZSBzZXJ2ZXIgb3IgaGF2ZSBhIHdlYmRhdiBjbGllbnQgb24KKyAgdGhlIGNsaWVudC4KKworSW4gZWZmZWN0LCB0aGlzIG1lYW5zIHlvdSdyZSBnb2luZyB0byBiZSByb290LCBvciB0aGF0IHlvdSdyZSB1c2luZyBhCitwcmVjb25maWd1cmVkIFdlYkRBViBzZXJ2ZXIuCisKKworU3RlcCAxOiBzZXR1cCBhIGJhcmUgR2l0IHJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0F0IHRoZSB0aW1lIG9mIHdyaXRpbmcsIGdpdC1odHRwLXB1c2ggY2Fubm90IHJlbW90ZWx5IGNyZWF0ZSBhIEdpdAorcmVwb3NpdG9yeS4gU28gd2UgaGF2ZSB0byBkbyB0aGF0IGF0IHRoZSBzZXJ2ZXIgc2lkZSB3aXRoIEdpdC4gQW5vdGhlcgorb3B0aW9uIGlzIHRvIGdlbmVyYXRlIGFuIGVtcHR5IGJhcmUgcmVwb3NpdG9yeSBhdCB0aGUgY2xpZW50IGFuZCBjb3B5CitpdCB0byB0aGUgc2VydmVyIHdpdGggYSBXZWJEQVYgY2xpZW50ICh3aGljaCBpcyB0aGUgb25seSBvcHRpb24gaWYgR2l0CitpcyBub3QgaW5zdGFsbGVkIG9uIHRoZSBzZXJ2ZXIpLgorCitDcmVhdGUgdGhlIGRpcmVjdG9yeSB1bmRlciB0aGUgRG9jdW1lbnRSb290IG9mIHRoZSBkaXJlY3RvcmllcyBzZXJ2ZWQKK2J5IEFwYWNoZS4gQXMgYW4gZXhhbXBsZSB3ZSB0YWtlIC91c3IvbG9jYWwvYXBhY2hlMiwgYnV0IHRyeSAiZ3JlcAorRG9jdW1lbnRSb290IC93aGVyZS9ldmVyL2h0dHBkLmNvbmYiIHRvIGZpbmQgeW91ciByb290OgorCisgICAgJCBjZCAvdXNyL2xvY2FsL2FwYWNoZS9odGRvY3MKKyAgICAkIG1rZGlyIG15LW5ldy1yZXBvLmdpdAorCisgIE9uIERlYmlhbjoKKworICAgICQgY2QgL3Zhci93d3cKKyAgICAkIG1rZGlyIG15LW5ldy1yZXBvLmdpdAorCisKK0luaXRpYWxpemUgYSBiYXJlIHJlcG9zaXRvcnkKKworICAgICQgY2QgbXktbmV3LXJlcG8uZ2l0CisgICAgJCBnaXQgLS1iYXJlIGluaXQKKworCitDaGFuZ2UgdGhlIG93bmVyc2hpcCB0byB5b3VyIHdlYi1zZXJ2ZXIncyBjcmVkZW50aWFscy4gVXNlIGAiZ3JlcCBeVXNlcgoraHR0cGQuY29uZiJgIGFuZCBgImdyZXAgXkdyb3VwIGh0dHBkLmNvbmYiYCB0byBmaW5kIG91dDoKKworICAgICQgY2hvd24gLVIgd3d3Lnd3dyAuCisKKyAgT24gRGViaWFuOgorCisgICAgJCBjaG93biAtUiB3d3ctZGF0YS53d3ctZGF0YSAuCisKKworSWYgeW91IGRvIG5vdCBrbm93IHdoaWNoIHVzZXIgQXBhY2hlIHJ1bnMgYXMsIHlvdSBjYW4gYWx0ZXJuYXRpdmVseSBkbworYSAiY2htb2QgLVIgYSt3IC4iLCBpbnNwZWN0IHRoZSBmaWxlcyB3aGljaCBhcmUgY3JlYXRlZCBsYXRlciBvbiwgYW5kCitzZXQgdGhlIHBlcm1pc3Npb25zIGFwcHJvcHJpYXRlbHkuCisKK1Jlc3RhcnQgYXBhY2hlMiwgYW5kIGNoZWNrIHdoZXRoZXIgaHR0cDovL3NlcnZlci9teS1uZXctcmVwby5naXQgZ2l2ZXMKK2EgZGlyZWN0b3J5IGxpc3RpbmcuIElmIG5vdCwgY2hlY2sgd2hldGhlciBhcGFjaGUgc3RhcnRlZCB1cAorc3VjY2Vzc2Z1bGx5LgorCisKK1N0ZXAgMjogZW5hYmxlIERBViBvbiB0aGlzIHJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3QgbWFrZSBzdXJlIHRoZSBkYXZfbW9kdWxlIGlzIGxvYWRlZC4gRm9yIHRoaXMsIGluc2VydCBpbiBodHRwZC5jb25mOgorCisgICAgTG9hZE1vZHVsZSBkYXZfbW9kdWxlIGxpYmV4ZWMvaHR0cGQvbGliZGF2LnNvCisgICAgQWRkTW9kdWxlIG1vZF9kYXYuYworCitBbHNvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgbGluZSBleGlzdHMgd2hpY2ggaXMgdGhlIGZpbGUgdXNlZCBmb3IKK2xvY2tpbmcgREFWIG9wZXJhdGlvbnM6CisKKyAgREFWTG9ja0RCICIvdXNyL2xvY2FsL2FwYWNoZTIvdGVtcC9EQVYubG9jayIKKworICBPbiBEZWJpYW4gdGhlc2Ugc3RlcHMgY2FuIGJlIHBlcmZvcm1lZCB3aXRoOgorCisgICAgRW5hYmxlIHRoZSBkYXYgYW5kIGRhdl9mcyBtb2R1bGVzIG9mIGFwYWNoZToKKyAgICAkIGEyZW5tb2QgZGF2X2ZzCisgICAgKGp1c3QgdG8gYmUgc3VyZS4gZGF2X2ZzIG1pZ2h0IGJlIHVubmVlZGVkLCBJIGRvbid0IGtub3cpCisgICAgJCBhMmVubW9kIGRhdgorICAgIFRoZSBEQVYgbG9jayBpcyBsb2NhdGVkIGluIC9ldGMvYXBhY2hlMi9tb2RzLWF2YWlsYWJsZS9kYXZfZnMuY29uZjoKKyAgICAgIERBVkxvY2tEQiAvdmFyL2xvY2svYXBhY2hlMi9EQVZMb2NrCisKK09mIGNvdXJzZSwgaXQgY2FuIHBvaW50IHNvbWV3aGVyZSBlbHNlLCBidXQgdGhlIHN0cmluZyBpcyBhY3R1YWxseSBqdXN0IGEKK3ByZWZpeCBpbiBzb21lIEFwYWNoZSBjb25maWd1cmF0aW9ucywgYW5kIHRoZXJlZm9yZSB0aGUgX2RpcmVjdG9yeV8gaGFzIHRvCitiZSB3cml0YWJsZSBieSB0aGUgdXNlciBBcGFjaGUgcnVucyBhcy4KKworVGhlbiwgYWRkIHNvbWV0aGluZyBsaWtlIHRoaXMgdG8geW91ciBodHRwZC5jb25mCisKKyAgPExvY2F0aW9uIC9teS1uZXctcmVwby5naXQ+CisgICAgIERBViBvbgorICAgICBBdXRoVHlwZSBCYXNpYworICAgICBBdXRoTmFtZSAiR2l0IgorICAgICBBdXRoVXNlckZpbGUgL3Vzci9sb2NhbC9hcGFjaGUyL2NvbmYvcGFzc3dkLmdpdAorICAgICBSZXF1aXJlIHZhbGlkLXVzZXIKKyAgPC9Mb2NhdGlvbj4KKworICBPbiBEZWJpYW46CisgICAgQ3JlYXRlIChvciBhZGQgdG8pIC9ldGMvYXBhY2hlMi9jb25mLmQvZ2l0LmNvbmYgOgorCisgICAgPExvY2F0aW9uIC9teS1uZXctcmVwby5naXQ+CisgICAgICAgREFWIG9uCisgICAgICAgQXV0aFR5cGUgQmFzaWMKKyAgICAgICBBdXRoTmFtZSAiR2l0IgorICAgICAgIEF1dGhVc2VyRmlsZSAvZXRjL2FwYWNoZTIvcGFzc3dkLmdpdAorICAgICAgIFJlcXVpcmUgdmFsaWQtdXNlcgorICAgIDwvTG9jYXRpb24+CisKKyAgICBEZWJpYW4gYXV0b21hdGljYWxseSByZWFkcyBhbGwgZmlsZXMgdW5kZXIgL2V0Yy9hcGFjaGUyL2NvbmYuZC4KKworVGhlIHBhc3N3b3JkIGZpbGUgY2FuIGJlIHNvbWV3aGVyZSBlbHNlLCBidXQgaXQgaGFzIHRvIGJlIHJlYWRhYmxlIGJ5CitBcGFjaGUgYW5kIHByZWZlcmFibHkgbm90IHJlYWRhYmxlIGJ5IHRoZSB3b3JsZC4KKworQ3JlYXRlIHRoaXMgZmlsZSBieQorICAgICQgaHRwYXNzd2QgLWMgL3Vzci9sb2NhbC9hcGFjaGUyL2NvbmYvcGFzc3dkLmdpdCA8dXNlcj4KKworICAgIE9uIERlYmlhbjoKKyAgICAgICQgaHRwYXNzd2QgLWMgL2V0Yy9hcGFjaGUyL3Bhc3N3ZC5naXQgPHVzZXI+CisKK1lvdSB3aWxsIGJlIGFza2VkIGEgcGFzc3dvcmQsIGFuZCB0aGUgZmlsZSBpcyBjcmVhdGVkLiBTdWJzZXF1ZW50IGNhbGxzCit0byBodHBhc3N3ZCBzaG91bGQgb21pdCB0aGUgJy1jJyBvcHRpb24sIHNpbmNlIHlvdSB3YW50IHRvIGFwcGVuZCB0byB0aGUKK2V4aXN0aW5nIGZpbGUuCisKK1lvdSBuZWVkIHRvIHJlc3RhcnQgQXBhY2hlLgorCitOb3cgZ28gdG8gaHR0cDovLzx1c2VybmFtZT5APHNlcnZlcm5hbWU+L215LW5ldy1yZXBvLmdpdCBpbiB5b3VyCiticm93c2VyIHRvIGNoZWNrIHdoZXRoZXIgaXQgYXNrcyBmb3IgYSBwYXNzd29yZCBhbmQgYWNjZXB0cyB0aGUgcmlnaHQKK3Bhc3N3b3JkLgorCitPbiBEZWJpYW46CisKKyAgIFRvIHRlc3QgdGhlIFdlYkRBViBwYXJ0LCBkbzoKKworICAgJCBhcHQtZ2V0IGluc3RhbGwgbGl0bXVzCisgICAkIGxpdG11cyBodHRwOi8vPHNlcnZlcm5hbWU+L215LW5ldy1yZXBvLmdpdCA8dXNlcm5hbWU+IDxwYXNzd29yZD4KKworICAgTW9zdCB0ZXN0cyBzaG91bGQgcGFzcy4KKworQSBjb21tYW5kLWxpbmUgdG9vbCB0byB0ZXN0IFdlYkRBViBpcyBjYWRhdmVyLiBJZiB5b3UgcHJlZmVyIEdVSXMsIGZvcgorZXhhbXBsZSwga29ucXVlcm9yIGNhbiBvcGVuIFdlYkRBViBVUkxzIGFzICJ3ZWJkYXY6Ly8uLi4iIG9yCisid2ViZGF2czovLy4uLiIuCisKK0lmIHlvdSdyZSBpbnRvIFdpbmRvd3MsIGZyb20gWFAgb253YXJkcyBJbnRlcm5ldCBFeHBsb3JlciBzdXBwb3J0cworV2ViREFWLiBGb3IgdGhpcywgZG8gSW50ZXJuZXQgRXhwbG9yZXIgLT4gT3BlbiBMb2NhdGlvbiAtPgoraHR0cDovLzxzZXJ2ZXJuYW1lPi9teS1uZXctcmVwby5naXQgW3hdIE9wZW4gYXMgd2ViZm9sZGVyIC0+IGxvZ2luIC4KKworCitTdGVwIDM6IHNldHVwIHRoZSBjbGllbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBIVFRQIHN1cHBvcnQsIGkuZS4geW91ciBHaXQgd2FzIGJ1aWx0IHdpdGgKK2xpYmN1cmwgKHZlcnNpb24gbW9yZSByZWNlbnQgdGhhbiA3LjEwKS4gVGhlIGNvbW1hbmQgJ2dpdCBodHRwLXB1c2gnIHdpdGgKK25vIGFyZ3VtZW50IHNob3VsZCBkaXNwbGF5IGEgdXNhZ2UgbWVzc2FnZS4KKworVGhlbiwgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciAkSE9NRS8ubmV0cmMgKHlvdSBjYW4gZG8gd2l0aG91dCwgYnV0IHdpbGwgYmUKK2Fza2VkIHRvIGlucHV0IHlvdXIgcGFzc3dvcmQgYSBfbG90XyBvZiB0aW1lcyk6CisKKyAgICBtYWNoaW5lIDxzZXJ2ZXJuYW1lPgorICAgIGxvZ2luIDx1c2VybmFtZT4KKyAgICBwYXNzd29yZCA8cGFzc3dvcmQ+CisKKy4uLmFuZCBzZXQgcGVybWlzc2lvbnM6CisgICAgIGNobW9kIDYwMCB+Ly5uZXRyYworCitJZiB5b3Ugd2FudCB0byBhY2Nlc3MgdGhlIHdlYi1zZXJ2ZXIgYnkgaXRzIElQLCB5b3UgaGF2ZSB0byB0eXBlIHRoYXQgaW4sCitpbnN0ZWFkIG9mIHRoZSBzZXJ2ZXIgbmFtZS4KKworVG8gY2hlY2sgd2hldGhlciBhbGwgaXMgT0ssIGRvOgorCisgICBjdXJsIC0tbmV0cmMgLS1sb2NhdGlvbiAtdiBodHRwOi8vPHVzZXJuYW1lPkA8c2VydmVybmFtZT4vbXktbmV3LXJlcG8uZ2l0L0hFQUQKKworLi4udGhpcyBzaG91bGQgZ2l2ZSBzb21ldGhpbmcgbGlrZSAncmVmOiByZWZzL2hlYWRzL21hc3RlcicsIHdoaWNoIGlzCit0aGUgY29udGVudCBvZiB0aGUgZmlsZSBIRUFEIG9uIHRoZSBzZXJ2ZXIuCisKK05vdywgYWRkIHRoZSByZW1vdGUgaW4geW91ciBleGlzdGluZyByZXBvc2l0b3J5IHdoaWNoIGNvbnRhaW5zIHRoZSBwcm9qZWN0Cit5b3Ugd2FudCB0byBleHBvcnQ6CisKKyAgICQgZ2l0LWNvbmZpZyByZW1vdGUudXBsb2FkLnVybCBcCisgICAgICAgaHR0cDovLzx1c2VybmFtZT5APHNlcnZlcm5hbWU+L215LW5ldy1yZXBvLmdpdC8KKworSXQgaXMgaW1wb3J0YW50IHRvIHB1dCB0aGUgbGFzdCAnLyc7IFdpdGhvdXQgaXQsIHRoZSBzZXJ2ZXIgd2lsbCBzZW5kCithIHJlZGlyZWN0IHdoaWNoIGdpdC1odHRwLXB1c2ggZG9lcyBub3QgKHlldCkgdW5kZXJzdGFuZCwgYW5kIGdpdC1odHRwLXB1c2gKK3dpbGwgcmVwZWF0IHRoZSByZXF1ZXN0IGluZmluaXRlbHkuCisKKworU3RlcCA0OiBtYWtlIHRoZSBpbml0aWFsIHB1c2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Zyb20geW91ciBjbGllbnQgcmVwb3NpdG9yeSwgZG8KKworICAgJCBnaXQgcHVzaCB1cGxvYWQgbWFzdGVyCisKK1RoaXMgcHVzaGVzIGJyYW5jaCAnbWFzdGVyJyAod2hpY2ggaXMgYXNzdW1lZCB0byBiZSB0aGUgYnJhbmNoIHlvdQord2FudCB0byBleHBvcnQpIHRvIHJlcG9zaXRvcnkgY2FsbGVkICd1cGxvYWQnLCB3aGljaCB3ZSBwcmV2aW91c2x5CitkZWZpbmVkIHdpdGggZ2l0LWNvbmZpZy4KKworCitVc2luZyBhIHByb3h5OgorLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGhhdmUgdG8gYWNjZXNzIHRoZSBXZWJEQVYgc2VydmVyIGZyb20gYmVoaW5kIGFuIEhUVFAoUykgcHJveHksCitzZXQgdGhlIHZhcmlhYmxlICdhbGxfcHJveHknIHRvIGBodHRwOi8vcHJveHktaG9zdC5jb206cG9ydGAsIG9yCitgaHR0cDovL2xvZ2luLW9uLXByb3h5OnBhc3N3ZC1vbi1wcm94eUBwcm94eS1ob3N0LmNvbTpwb3J0YC4gU2VlICdtYW4KK2N1cmwnIGZvciBkZXRhaWxzLgorCisKK1Ryb3VibGVzaG9vdGluZzoKKy0tLS0tLS0tLS0tLS0tLS0KKworSWYgZ2l0LWh0dHAtcHVzaCBzYXlzCisKKyAgIEVycm9yOiBubyBEQVYgbG9ja2luZyBzdXBwb3J0IG9uIHJlbW90ZSByZXBvIGh0dHA6Ly8uLi4KKwordGhlbiBpdCBtZWFucyB0aGUgd2ViLXNlcnZlciBkaWQgbm90IGFjY2VwdCB5b3VyIGF1dGhlbnRpY2F0aW9uLiBNYWtlIHN1cmUKK3RoYXQgdGhlIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgbWF0Y2hlcyBpbiBodHRwZC5jb25mLCAubmV0cmMgYW5kIHRoZSBVUkwKK3lvdSBhcmUgdXBsb2FkaW5nIHRvLgorCitJZiBnaXQtaHR0cC1wdXNoIHNob3dzIHlvdSBhbiBlcnJvciAoMjIvNTAyKSB3aGVuIHRyeWluZyB0byBNT1ZFIGEgYmxvYiwKK2l0IG1lYW5zIHRoYXQgeW91ciB3ZWItc2VydmVyIHNvbWVob3cgZG9lcyBub3QgcmVjb2duaXplIGl0cyBuYW1lIGluIHRoZQorcmVxdWVzdDsgVGhpcyBjYW4gaGFwcGVuIHdoZW4geW91IHN0YXJ0IEFwYWNoZSwgYnV0IHRoZW4gZGlzYWJsZSB0aGUKK25ldHdvcmsgaW50ZXJmYWNlLiBBIHNpbXBsZSByZXN0YXJ0IG9mIEFwYWNoZSBoZWxwcy4KKworRXJyb3JzIGxpa2UgKDIyLzUwMikgYXJlIG9mIGZvcm1hdCAoY3VybCBlcnJvciBjb2RlL2h0dHAgZXJyb3IKK2NvZGUpLiBTbyAoMjIvNDA0KSBtZWFucyBzb21ldGhpbmcgbGlrZSAnbm90IGZvdW5kJyBhdCB0aGUgc2VydmVyLgorCitSZWFkaW5nIC91c3IvbG9jYWwvYXBhY2hlMi9sb2dzL2Vycm9yX2xvZyBpcyBvZnRlbiBoZWxwZnVsLgorCisgIE9uIERlYmlhbjogUmVhZCAvdmFyL2xvZy9hcGFjaGUyL2Vycm9yLmxvZyBpbnN0ZWFkLgorCitJZiB5b3UgYWNjZXNzIEhUVFBTIGxvY2F0aW9ucywgR2l0IG1heSBmYWlsIHZlcmlmeWluZyB0aGUgU1NMCitjZXJ0aWZpY2F0ZSAodGhpcyBpcyByZXR1cm4gY29kZSA2MCkuIFNldHRpbmcgaHR0cC5zc2xWZXJpZnk9ZmFsc2UgY2FuCitoZWxwIGRpYWdub3NpbmcgdGhlIHByb2JsZW0sIGJ1dCByZW1vdmVzIHNlY3VyaXR5IGNoZWNrcy4KKworCitEZWJpYW4gUmVmZXJlbmNlczogaHR0cDovL3d3dy5kZWJpYW4tYWRtaW5pc3RyYXRpb24ub3JnL2FydGljbGVzLzI4NQorCitBdXRob3JzCisgIEpvaGFubmVzIFNjaGluZGVsaW4gPEpvaGFubmVzLlNjaGluZGVsaW5AZ214LmRlPgorICBSdXRnZXIgTmlqbHVuc2luZyA8Z2l0QHdpbmdkaW5nLmRlbW9uLm5sPgorICBNYXR0aGlldSBNb3kgPE1hdHRoaWV1Lk1veUBpbWFnLmZyPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by91cGRhdGUtaG9vay1leGFtcGxlLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vdXBkYXRlLWhvb2stZXhhbXBsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4MjFlYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vdXBkYXRlLWhvb2stZXhhbXBsZS50eHQKQEAgLTAsMCArMSwxOTIgQEAKK0Zyb206IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gYW5kIENhcmwgQmFsZHdpbiA8Y25iQGZjLmhwLmNvbT4KK1N1YmplY3Q6IGNvbnRyb2wgYWNjZXNzIHRvIGJyYW5jaGVzLgorRGF0ZTogVGh1LCAxNyBOb3YgMjAwNSAyMzo1NTozMiAtMDgwMAorTWVzc2FnZS1JRDogPDd2ZnlwdW1sdTMuZnNmQGFzc2lnbmVkLWJ5LWRoY3AuY294Lm5ldD4KK0Fic3RyYWN0OiBBbiBleGFtcGxlIGhvb2tzL3VwZGF0ZSBzY3JpcHQgaXMgcHJlc2VudGVkIHRvCisgaW1wbGVtZW50IHJlcG9zaXRvcnkgbWFpbnRlbmFuY2UgcG9saWNpZXMsIHN1Y2ggYXMgd2hvIGNhbiBwdXNoCisgaW50byB3aGljaCBicmFuY2ggYW5kIHdobyBjYW4gbWFrZSBhIHRhZy4KK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gdXNlIHRoZSB1cGRhdGUgaG9vaworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiB5b3VyIGRldmVsb3BlciBydW5zIGdpdC1wdXNoIGludG8gdGhlIHJlcG9zaXRvcnksCitnaXQtcmVjZWl2ZS1wYWNrIGlzIHJ1biAoZWl0aGVyIGxvY2FsbHkgb3Igb3ZlciBzc2gpIGFzIHRoYXQKK2RldmVsb3Blciwgc28gaXMgaG9va3MvdXBkYXRlIHNjcmlwdC4gIFF1b3RpbmcgZnJvbSB0aGUgcmVsZXZhbnQKK3NlY3Rpb24gb2YgdGhlIGRvY3VtZW50YXRpb246CisKKyAgICBCZWZvcmUgZWFjaCByZWYgaXMgdXBkYXRlZCwgaWYgJEdJVF9ESVIvaG9va3MvdXBkYXRlIGZpbGUgZXhpc3RzCisgICAgYW5kIGV4ZWN1dGFibGUsIGl0IGlzIGNhbGxlZCB3aXRoIHRocmVlIHBhcmFtZXRlcnM6CisKKyAgICAgICAgICAgJEdJVF9ESVIvaG9va3MvdXBkYXRlIHJlZm5hbWUgc2hhMS1vbGQgc2hhMS1uZXcKKworICAgIFRoZSByZWZuYW1lIHBhcmFtZXRlciBpcyByZWxhdGl2ZSB0byAkR0lUX0RJUjsgZS5nLiBmb3IgdGhlCisgICAgbWFzdGVyIGhlYWQgdGhpcyBpcyAicmVmcy9oZWFkcy9tYXN0ZXIiLiAgVHdvIHNoYTEgYXJlIHRoZQorICAgIG9iamVjdCBuYW1lcyBmb3IgdGhlIHJlZm5hbWUgYmVmb3JlIGFuZCBhZnRlciB0aGUgdXBkYXRlLiAgTm90ZQorICAgIHRoYXQgdGhlIGhvb2sgaXMgY2FsbGVkIGJlZm9yZSB0aGUgcmVmbmFtZSBpcyB1cGRhdGVkLCBzbyBlaXRoZXIKKyAgICBzaGExLW9sZCBpcyAwezQwfSAobWVhbmluZyB0aGVyZSBpcyBubyBzdWNoIHJlZiB5ZXQpLCBvciBpdAorICAgIHNob3VsZCBtYXRjaCB3aGF0IGlzIHJlY29yZGVkIGluIHJlZm5hbWUuCisKK1NvIGlmIHlvdXIgcG9saWN5IGlzICgxKSBhbHdheXMgcmVxdWlyZSBmYXN0LWZvcndhcmQgcHVzaAorKGkuZS4gbmV2ZXIgYWxsb3cgImdpdC1wdXNoIHJlcG8gK2JyYW5jaDpicmFuY2giKSwgKDIpIHlvdQoraGF2ZSBhIGxpc3Qgb2YgdXNlcnMgYWxsb3dlZCB0byB1cGRhdGUgZWFjaCBicmFuY2gsIGFuZCAoMykgeW91CitkbyBub3QgbGV0IHRhZ3MgdG8gYmUgb3ZlcndyaXR0ZW4sIHRoZW4geW91IGNhbiB1c2Ugc29tZXRoaW5nCitsaWtlIHRoaXMgYXMgeW91ciBob29rcy91cGRhdGUgc2NyaXB0LgorCitbamM6IGVkaXRvcmlhbCBub3RlLiAgVGhpcyBpcyBhIG11Y2ggaW1wcm92ZWQgdmVyc2lvbiBieSBDYXJsCitzaW5jZSBJIHBvc3RlZCB0aGUgb3JpZ2luYWwgb3V0bGluZV0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyEvYmluL2Jhc2gKKwordW1hc2sgMDAyCisKKyMgSWYgeW91IGFyZSBoYXZpbmcgdHJvdWJsZSB3aXRoIHRoaXMgYWNjZXNzIGNvbnRyb2wgaG9vayBzY3JpcHQKKyMgeW91IGNhbiB0cnkgc2V0dGluZyB0aGlzIHRvIHRydWUuICBJdCB3aWxsIHRlbGwgeW91IGV4YWN0bHkKKyMgd2h5IGEgdXNlciBpcyBiZWluZyBhbGxvd2VkL2RlbmllZCBhY2Nlc3MuCisKK3ZlcmJvc2U9ZmFsc2UKKworIyBEZWZhdWx0IHNoZWxsIGdsb2JiaW5nIG1lc3NlcyB0aGluZ3MgdXAgZG93bnN0cmVhbQorR0xPQklHTk9SRT0qCisKK2Z1bmN0aW9uIGdyYW50IHsKKyAgJHZlcmJvc2UgJiYgZWNobyA+JjIgIi1HcmFudC0JCSQxIgorICBlY2hvIGdyYW50CisgIGV4aXQgMAorfQorCitmdW5jdGlvbiBkZW55IHsKKyAgJHZlcmJvc2UgJiYgZWNobyA+JjIgIi1EZW55LQkJJDEiCisgIGVjaG8gZGVueQorICBleGl0IDEKK30KKworZnVuY3Rpb24gaW5mbyB7CisgICR2ZXJib3NlICYmIGVjaG8gPiYyICItSW5mby0JCSQxIgorfQorCisjIEltcGxlbWVudCBnZW5lcmljIGJyYW5jaCBhbmQgdGFnIHBvbGljaWVzLgorIyAtIFRhZ3Mgc2hvdWxkIG5vdCBiZSB1cGRhdGVkIG9uY2UgY3JlYXRlZC4KKyMgLSBCcmFuY2hlcyBzaG91bGQgb25seSBiZSBmYXN0LWZvcndhcmRlZCB1bmxlc3MgdGhlaXIgcGF0dGVybiBzdGFydHMgd2l0aCAnKycKK2Nhc2UgIiQxIiBpbgorICByZWZzL3RhZ3MvKikKKyAgICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICIkMSIgJiYKKyAgICBkZW55ID4vZGV2L251bGwgIllvdSBjYW4ndCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdGFnIgorICAgIDs7CisgIHJlZnMvaGVhZHMvKikKKyAgICAjIE5vIHJlYmFzaW5nIG9yIHJld2luZGluZworICAgIGlmIGV4cHIgIiQyIiA6ICcwKiQnID4vZGV2L251bGw7IHRoZW4KKyAgICAgIGluZm8gIlRoZSBicmFuY2ggJyQxJyBpcyBuZXcuLi4iCisgICAgZWxzZQorICAgICAgIyB1cGRhdGluZyAtLSBtYWtlIHN1cmUgaXQgaXMgYSBmYXN0LWZvcndhcmQKKyAgICAgIG1iPSQoZ2l0IG1lcmdlLWJhc2UgIiQyIiAiJDMiKQorICAgICAgY2FzZSAiJG1iLCQyIiBpbgorICAgICAgICAiJDIsJG1iIikgaW5mbyAiVXBkYXRlIGlzIGZhc3QtZm9yd2FyZCIgOzsKKwkqKQkgIG5vZmY9eTsgaW5mbyAiVGhpcyBpcyBub3QgYSBmYXN0LWZvcndhcmQgdXBkYXRlLiI7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBkZW55ID4vZGV2L251bGwgXAorICAgICJCcmFuY2ggaXMgbm90IHVuZGVyIHJlZnMvaGVhZHMgb3IgcmVmcy90YWdzLiAgV2hhdCBhcmUgeW91IHRyeWluZyB0byBkbz8iCisgICAgOzsKK2VzYWMKKworIyBJbXBsZW1lbnQgcGVyLWJyYW5jaCBjb250cm9scyBiYXNlZCBvbiB1c2VybmFtZQorYWxsb3dlZF91c2Vyc19maWxlPSRHSVRfRElSL2luZm8vYWxsb3dlZC11c2VycwordXNlcm5hbWU9JChpZCAtdSAtbikKK2luZm8gIlRoZSB1c2VyIGlzOiAnJHVzZXJuYW1lJyIKKworaWYgdGVzdCAtZiAiJGFsbG93ZWRfdXNlcnNfZmlsZSIKK3RoZW4KKyAgcmM9JChjYXQgJGFsbG93ZWRfdXNlcnNfZmlsZSB8IGdyZXAgLXYgJ14jJyB8IGdyZXAgLXYgJ14kJyB8CisgICAgd2hpbGUgcmVhZCBoZWFkcyB1c2VyX3BhdHRlcm5zCisgICAgZG8KKyAgICAgICMgZG9lcyB0aGlzIHJ1bGUgYXBwbHkgdG8gdXM/CisgICAgICBoZWFkX3BhdHRlcm49JHtoZWFkcyMrfQorICAgICAgbWF0Y2hsZW49JChleHByICIkMSIgOiAiJHtoZWFkX3BhdHRlcm4jK30iKQorICAgICAgdGVzdCAiJG1hdGNobGVuIiA9ICR7IzF9IHx8IGNvbnRpbnVlCisKKyAgICAgICMgaWYgbm9uLWZmLCAkaGVhZHMgbXVzdCBiZSB3aXRoIHRoZSAnKycgcHJlZml4CisgICAgICB0ZXN0IC1uICIkbm9mZiIgJiYKKyAgICAgIHRlc3QgIiRoZWFkX3BhdHRlcm4iID0gIiRoZWFkcyIgJiYgY29udGludWUKKworICAgICAgaW5mbyAiRm91bmQgbWF0Y2hpbmcgaGVhZCBwYXR0ZXJuOiAnJGhlYWRfcGF0dGVybiciCisgICAgICBmb3IgdXNlcl9wYXR0ZXJuIGluICR1c2VyX3BhdHRlcm5zOyBkbworICAgICAgICBpbmZvICJDaGVja2luZyB1c2VyOiAnJHVzZXJuYW1lJyBhZ2FpbnN0IHBhdHRlcm46ICckdXNlcl9wYXR0ZXJuJyIKKyAgICAgICAgbWF0Y2hsZW49JChleHByICIkdXNlcm5hbWUiIDogIiR1c2VyX3BhdHRlcm4iKQorICAgICAgICBpZiB0ZXN0ICIkbWF0Y2hsZW4iID0gIiR7I3VzZXJuYW1lfSIKKyAgICAgICAgdGhlbgorICAgICAgICAgIGdyYW50ICJBbGxvd2luZyB1c2VyOiAnJHVzZXJuYW1lJyB3aXRoIHBhdHRlcm46ICckdXNlcl9wYXR0ZXJuJyIKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIGRlbnkgIlRoZSB1c2VyIGlzIG5vdCBpbiB0aGUgYWNjZXNzIGxpc3QgZm9yIHRoaXMgYnJhbmNoIgorICAgIGRvbmUKKyAgKQorICBjYXNlICIkcmMiIGluCisgICAgZ3JhbnQpIGdyYW50ID4vZGV2L251bGwgIkdyYW50aW5nIGFjY2VzcyBiYXNlZCBvbiAkYWxsb3dlZF91c2Vyc19maWxlIiA7OworICAgIGRlbnkpICBkZW55ICA+L2Rldi9udWxsICJEZW55aW5nICBhY2Nlc3MgYmFzZWQgb24gJGFsbG93ZWRfdXNlcnNfZmlsZSIgOzsKKyAgICAqKSA7OworICBlc2FjCitmaQorCithbGxvd2VkX2dyb3Vwc19maWxlPSRHSVRfRElSL2luZm8vYWxsb3dlZC1ncm91cHMKK2dyb3Vwcz0kKGlkIC1HIC1uKQoraW5mbyAiVGhlIHVzZXIgYmVsb25ncyB0byB0aGUgZm9sbG93aW5nIGdyb3VwczoiCitpbmZvICInJGdyb3VwcyciCisKK2lmIHRlc3QgLWYgIiRhbGxvd2VkX2dyb3Vwc19maWxlIgordGhlbgorICByYz0kKGNhdCAkYWxsb3dlZF9ncm91cHNfZmlsZSB8IGdyZXAgLXYgJ14jJyB8IGdyZXAgLXYgJ14kJyB8CisgICAgd2hpbGUgcmVhZCBoZWFkcyBncm91cF9wYXR0ZXJucworICAgIGRvCisgICAgICAjIGRvZXMgdGhpcyBydWxlIGFwcGx5IHRvIHVzPworICAgICAgaGVhZF9wYXR0ZXJuPSR7aGVhZHMjK30KKyAgICAgIG1hdGNobGVuPSQoZXhwciAiJDEiIDogIiR7aGVhZF9wYXR0ZXJuIyt9IikKKyAgICAgIHRlc3QgIiRtYXRjaGxlbiIgPSAkeyMxfSB8fCBjb250aW51ZQorCisgICAgICAjIGlmIG5vbi1mZiwgJGhlYWRzIG11c3QgYmUgd2l0aCB0aGUgJysnIHByZWZpeAorICAgICAgdGVzdCAtbiAiJG5vZmYiICYmCisgICAgICB0ZXN0ICIkaGVhZF9wYXR0ZXJuIiA9ICIkaGVhZHMiICYmIGNvbnRpbnVlCisKKyAgICAgIGluZm8gIkZvdW5kIG1hdGNoaW5nIGhlYWQgcGF0dGVybjogJyRoZWFkX3BhdHRlcm4nIgorICAgICAgZm9yIGdyb3VwX3BhdHRlcm4gaW4gJGdyb3VwX3BhdHRlcm5zOyBkbworICAgICAgICBmb3IgZ3JvdXBuYW1lIGluICRncm91cHM7IGRvCisgICAgICAgICAgaW5mbyAiQ2hlY2tpbmcgZ3JvdXA6ICckZ3JvdXBuYW1lJyBhZ2FpbnN0IHBhdHRlcm46ICckZ3JvdXBfcGF0dGVybiciCisgICAgICAgICAgbWF0Y2hsZW49JChleHByICIkZ3JvdXBuYW1lIiA6ICIkZ3JvdXBfcGF0dGVybiIpCisgICAgICAgICAgaWYgdGVzdCAiJG1hdGNobGVuIiA9ICIkeyNncm91cG5hbWV9IgorICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGdyYW50ICJBbGxvd2luZyBncm91cDogJyRncm91cG5hbWUnIHdpdGggcGF0dGVybjogJyRncm91cF9wYXR0ZXJuJyIKKyAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgICBkb25lCisgICAgICBkZW55ICJOb25lIG9mIHRoZSB1c2VyJ3MgZ3JvdXBzIGFyZSBpbiB0aGUgYWNjZXNzIGxpc3QgZm9yIHRoaXMgYnJhbmNoIgorICAgIGRvbmUKKyAgKQorICBjYXNlICIkcmMiIGluCisgICAgZ3JhbnQpIGdyYW50ID4vZGV2L251bGwgIkdyYW50aW5nIGFjY2VzcyBiYXNlZCBvbiAkYWxsb3dlZF9ncm91cHNfZmlsZSIgOzsKKyAgICBkZW55KSAgZGVueSAgPi9kZXYvbnVsbCAiRGVueWluZyAgYWNjZXNzIGJhc2VkIG9uICRhbGxvd2VkX2dyb3Vwc19maWxlIiA7OworICAgICopIDs7CisgIGVzYWMKK2ZpCisKK2RlbnkgPi9kZXYvbnVsbCAiVGhlcmUgYXJlIG5vIG1vcmUgcnVsZXMgdG8gY2hlY2suICBEZW55aW5nIGFjY2VzcyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB1c2VzIHR3byBmaWxlcywgJEdJVF9ESVIvaW5mby9hbGxvd2VkLXVzZXJzIGFuZAorYWxsb3dlZC1ncm91cHMsIHRvIGRlc2NyaWJlIHdoaWNoIGhlYWRzIGNhbiBiZSBwdXNoZWQgaW50byBieQord2hvbS4gIFRoZSBmb3JtYXQgb2YgZWFjaCBmaWxlIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgorCisgICAgcmVmcy9oZWFkcy9tYXN0ZXIgICBqdW5pbworICAgICtyZWZzL2hlYWRzL3B1ICAgICAganVuaW8KKyAgICByZWZzL2hlYWRzL2NvZ2l0byQgIHBhc2t5CisgICAgcmVmcy9oZWFkcy9idy8uKiAgICBsaW51cworICAgIHJlZnMvaGVhZHMvdG1wLy4qICAgLioKKyAgICByZWZzL3RhZ3MvdlswLTldLiogIGp1bmlvCisKK1dpdGggdGhpcywgTGludXMgY2FuIHB1c2ggb3IgY3JlYXRlICJidy9wZW5ndWluIiBvciAiYncvemVicmEiCitvciAiYncvcGFuZGEiIGJyYW5jaGVzLCBQYXNreSBjYW4gZG8gb25seSAiY29naXRvIiwgYW5kIEpDIGNhbgorZG8gbWFzdGVyIGFuZCBwdSBicmFuY2hlcyBhbmQgbWFrZSB2ZXJzaW9uZWQgdGFncy4gIEFuZCBhbnlib2R5CitjYW4gZG8gdG1wL2JsYWggYnJhbmNoZXMuIFRoZSAnKycgc2lnbiBhdCB0aGUgcHUgcmVjb3JkIG1lYW5zCit0aGF0IEpDIGNhbiBtYWtlIG5vbi1mYXN0LWZvcndhcmQgcHVzaGVzIG9uIGl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by91c2UtZ2l0LWRhZW1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3VzZS1naXQtZGFlbW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWYyZTUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by91c2UtZ2l0LWRhZW1vbi50eHQKQEAgLTAsMCArMSw1NCBAQAorQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jCisKK0hvdyB0byB1c2UgZ2l0LWRhZW1vbgorPT09PT09PT09PT09PT09PT09PT09CisKK0dpdCBjYW4gYmUgcnVuIGluIGluZXRkIG1vZGUgYW5kIGluIHN0YW5kIGFsb25lIG1vZGUuIEJ1dCBhbGwgeW91IHdhbnQgaXMKK2xldCBhIGNvd29ya2VyIHB1bGwgZnJvbSB5b3UsIGFuZCB0aGVyZWZvcmUgbmVlZCB0byBzZXQgdXAgYSBHaXQgc2VydmVyCityZWFsIHF1aWNrLCByaWdodD8KKworTm90ZSB0aGF0IGdpdC1kYWVtb24gaXMgbm90IHJlYWxseSBjaGF0dHkgYXQgdGhlIG1vbWVudCwgZXNwZWNpYWxseSB3aGVuCit0aGluZ3MgZG8gbm90IGdvIGFjY29yZGluZyB0byBwbGFuIChlLmcuIGEgc29ja2V0IGNvdWxkIG5vdCBiZSBib3VuZCkuCisKK0Fub3RoZXIgd29yZCBvZiB3YXJuaW5nOiBpZiB5b3UgcnVuCisKKwkkIGdpdCBscy1yZW1vdGUgZ2l0Oi8vMTI3LjAuMC4xL3J1bGUtdGhlLXdvcmxkLmdpdAorCithbmQgeW91IHNlZSBhIG1lc3NhZ2UgbGlrZQorCisJZmF0YWw6IFRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5CisKK2l0IG9ubHkgbWVhbnMgdGhhdCBfc29tZXRoaW5nXyB3ZW50IHdyb25nLiBUbyBmaW5kIG91dCBfd2hhdF8gd2VudCB3cm9uZywKK3lvdSBoYXZlIHRvIGFzayB0aGUgc2VydmVyLiAoR2l0IHJlZnVzZXMgdG8gYmUgbW9yZSBwcmVjaXNlIGZvciB5b3VyCitzZWN1cml0eSBvbmx5LiBUYWtlIG9mZiB5b3VyIHNob2VzIG5vdy4gWW91IGhhdmUgYW55IGNvaW5zIGluIHlvdXIgcG9ja2V0cz8KK1NvcnJ5LCBub3QgYWxsb3dlZCAtLSB3aG8ga25vd3Mgd2hhdCB5b3UgcGxhbm5lZCB0byBkbyB3aXRoIHRoZW0/KQorCitXaXRoIHRoZXNlIHR3byBjYXZlYXRzLCBsZXQncyBzZWUgYW4gZXhhbXBsZToKKworCSQgZ2l0IGRhZW1vbiAtLXJldXNlYWRkciAtLXZlcmJvc2UgLS1iYXNlLXBhdGg9L2hvbWUvZ2l0dGUvZ2l0IFwKKwkgIC0tZXhwb3J0LWFsbCAtLSAvaG9tZS9naXR0ZS9naXQvcnVsZS10aGUtd29ybGQuZ2l0CisKKyhPZiBjb3Vyc2UsIHVubGVzcyB5b3VyIHVzZXIgbmFtZSBpcyBgZ2l0dGVgIF9hbmRfIHlvdXIgcmVwb3NpdG9yeSBpcyBpbgorfi9ydWxlLXRoZS13b3JsZC5naXQsIHlvdSBoYXZlIHRvIGFkanVzdCB0aGUgcGF0aHMuIElmIHlvdXIgcmVwb3NpdG9yeSBpcworbm90IGJhcmUsIGJlIGF3YXJlIHRoYXQgeW91IGhhdmUgdG8gdHlwZSB0aGUgcGF0aCB0byB0aGUgLmdpdCBkaXJlY3RvcnkhKQorCitUaGlzIGludm9jYXRpb24gdHJpZXMgdG8gcmV1c2UgdGhlIGFkZHJlc3MgaWYgaXQgaXMgYWxyZWFkeSB0YWtlbgorKHRoaXMgY2FuIHNhdmUgeW91IHNvbWUgZGVidWdnaW5nLCBiZWNhdXNlIG90aGVyd2lzZSBraWxsaW5nIGFuZCByZXN0YXJ0aW5nCitnaXQtZGFlbW9uIGNvdWxkIGp1c3Qgc2lsZW50bHkgZmFpbCB0byBiaW5kIHRvIGEgc29ja2V0KS4KKworQWxzbywgaXQgaXMgKHJlbGF0aXZlbHkpIHZlcmJvc2Ugd2hlbiBzb21lYm9keSBhY3R1YWxseSBjb25uZWN0cyB0byBpdC4KK0l0IGFsc28gc2V0cyB0aGUgYmFzZSBwYXRoLCB3aGljaCBtZWFucyB0aGF0IGFsbCB0aGUgcHJvamVjdHMgd2hpY2ggY2FuIGJlCithY2Nlc3NlZCB1c2luZyB0aGlzIGRhZW1vbiBoYXZlIHRvIHJlc2lkZSBpbiBvciB1bmRlciB0aGF0IHBhdGguCisKK1RoZSBvcHRpb24gYC0tZXhwb3J0LWFsbGAganVzdCBtZWFucyB0aGF0IHlvdSBfZG9uJ3RfIGhhdmUgdG8gY3JlYXRlIGEKK2ZpbGUgbmFtZWQgYGdpdC1kYWVtb24tZXhwb3J0LW9rYCBpbiBlYWNoIGV4cG9ydGVkIHJlcG9zaXRvcnkuIChPdGhlcndpc2UsCitnaXQtZGFlbW9uIHdvdWxkIGNvbXBsYWluIGxvdWRseSwgYW5kIHJlZnVzZSB0byBjb29wZXJhdGUuKQorCitMYXN0IG9mIGFsbCwgdGhlIHJlcG9zaXRvcnkgd2hpY2ggc2hvdWxkIGJlIGV4cG9ydGVkIGlzIHNwZWNpZmllZC4gSXQgaXMKK2EgZ29vZCBwcmFjdGljZSB0byBwdXQgdGhlIHBhdGhzIGFmdGVyIGEgIi0tIiBzZXBhcmF0b3IuCisKK05vdywgdGVzdCB5b3VyIGRhZW1vbiB3aXRoCisKKwkkIGdpdCBscy1yZW1vdGUgZ2l0Oi8vMTI3LjAuMC4xL3J1bGUtdGhlLXdvcmxkLmdpdAorCitJZiB0aGlzIGRvZXMgbm90IHdvcmssIGZpbmQgb3V0IHdoeSwgYW5kIHN1Ym1pdCBhIHBhdGNoIHRvIHRoaXMgZG9jdW1lbnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3VzaW5nLW1lcmdlLXN1YnRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by91c2luZy1tZXJnZS1zdWJ0cmVlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDk5YTk0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by91c2luZy1tZXJnZS1zdWJ0cmVlLnR4dApAQCAtMCwwICsxLDc1IEBACitEYXRlOiBTYXQsIDUgSmFuIDIwMDggMjA6MTc6NDAgLTA1MDAKK0Zyb206IFNlYW4gPHNlYW5sa21sQHN5bXBhdGljby5jYT4KK1RvOiBNaWtsb3MgVmFqbmEgPHZtaWtsb3NAZnJ1Z2Fsd2FyZS5vcmc+CitDYzogZ2l0QHZnZXIua2VybmVsLm9yZworU3ViamVjdDogaG93IHRvIHVzZSBnaXQgbWVyZ2UgLXMgc3VidHJlZT8KK0Fic3RyYWN0OiBJbiB0aGlzIGFydGljbGUsIFNlYW4gZGVtb25zdHJhdGVzIGhvdyBvbmUgY2FuIHVzZSB0aGUgc3VidHJlZSBtZXJnZQorIHN0cmF0ZWd5LgorQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jCitNZXNzYWdlLUlEOiA8QkFZQzEtUEFTTVRQMTIzNzRCNTRCQTM3MEExRTFDNkU3OEFFNEUwQENFWi5JQ0U+CisKK0hvdyB0byB1c2UgdGhlIHN1YnRyZWUgbWVyZ2Ugc3RyYXRlZ3kKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgYXJlIHNpdHVhdGlvbnMgd2hlcmUgeW91IHdhbnQgdG8gaW5jbHVkZSBjb250ZW50cyBpbiB5b3VyIHByb2plY3QKK2Zyb20gYW4gaW5kZXBlbmRlbnRseSBkZXZlbG9wZWQgcHJvamVjdC4gWW91IGNhbiBqdXN0IHB1bGwgZnJvbSB0aGUKK290aGVyIHByb2plY3QgYXMgbG9uZyBhcyB0aGVyZSBhcmUgbm8gY29uZmxpY3RpbmcgcGF0aHMuCisKK1RoZSBwcm9ibGVtYXRpYyBjYXNlIGlzIHdoZW4gdGhlcmUgYXJlIGNvbmZsaWN0aW5nIGZpbGVzLiBQb3RlbnRpYWwKK2NhbmRpZGF0ZXMgYXJlIE1ha2VmaWxlcyBhbmQgb3RoZXIgc3RhbmRhcmQgZmlsZW5hbWVzLiBZb3UgY291bGQgbWVyZ2UKK3RoZXNlIGZpbGVzIGJ1dCBwcm9iYWJseSB5b3UgZG8gbm90IHdhbnQgdG8uICBBIGJldHRlciBzb2x1dGlvbiBmb3IgdGhpcworcHJvYmxlbSBjYW4gYmUgdG8gbWVyZ2UgdGhlIHByb2plY3QgYXMgaXRzIG93biBzdWJkaXJlY3RvcnkuIFRoaXMgaXMgbm90CitzdXBwb3J0ZWQgYnkgdGhlICdyZWN1cnNpdmUnIG1lcmdlIHN0cmF0ZWd5LCBzbyBqdXN0IHB1bGxpbmcgd29uJ3Qgd29yay4KKworV2hhdCB5b3Ugd2FudCBpcyB0aGUgJ3N1YnRyZWUnIG1lcmdlIHN0cmF0ZWd5LCB3aGljaCBoZWxwcyB5b3UgaW4gc3VjaCBhCitzaXR1YXRpb24uCisKK0luIHRoaXMgZXhhbXBsZSwgbGV0J3Mgc2F5IHlvdSBoYXZlIHRoZSByZXBvc2l0b3J5IGF0IGAvcGF0aC90by9CYCAoYnV0CitpdCBjYW4gYmUgYSBVUkwgYXMgd2VsbCwgaWYgeW91IHdhbnQpLiBZb3Ugd2FudCB0byBtZXJnZSB0aGUgJ21hc3RlcicKK2JyYW5jaCBvZiB0aGF0IHJlcG9zaXRvcnkgdG8gdGhlIGBkaXItQmAgc3ViZGlyZWN0b3J5IGluIHlvdXIgY3VycmVudAorYnJhbmNoLgorCitIZXJlIGlzIHRoZSBjb21tYW5kIHNlcXVlbmNlIHlvdSBuZWVkOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZW1vdGUgYWRkIC1mIEJwcm9qZWN0IC9wYXRoL3RvL0IgPDE+CiskIGdpdCBtZXJnZSAtcyBvdXJzIC0tbm8tY29tbWl0IC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyBCcHJvamVjdC9tYXN0ZXIgPDI+CiskIGdpdCByZWFkLXRyZWUgLS1wcmVmaXg9ZGlyLUIvIC11IEJwcm9qZWN0L21hc3RlciA8Mz4KKyQgZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgQiBwcm9qZWN0IGFzIG91ciBzdWJkaXJlY3RvcnkiIDw0PgorCiskIGdpdCBwdWxsIC1zIHN1YnRyZWUgQnByb2plY3QgbWFzdGVyIDw1PgorLS0tLS0tLS0tLS0tLS0tLQorPDE+IG5hbWUgdGhlIG90aGVyIHByb2plY3QgIkJwcm9qZWN0IiwgYW5kIGZldGNoLgorPDI+IHByZXBhcmUgZm9yIHRoZSBsYXRlciBzdGVwIHRvIHJlY29yZCB0aGUgcmVzdWx0IGFzIGEgbWVyZ2UuCis8Mz4gcmVhZCAibWFzdGVyIiBicmFuY2ggb2YgQnByb2plY3QgdG8gdGhlIHN1YmRpcmVjdG9yeSAiZGlyLUIiLgorPDQ+IHJlY29yZCB0aGUgbWVyZ2UgcmVzdWx0LgorPDU+IG1haW50YWluIHRoZSByZXN1bHQgd2l0aCBzdWJzZXF1ZW50IG1lcmdlcyB1c2luZyAic3VidHJlZSIKKworVGhlIGZpcnN0IGZvdXIgY29tbWFuZHMgYXJlIHVzZWQgZm9yIHRoZSBpbml0aWFsIG1lcmdlLCB3aGlsZSB0aGUgbGFzdAorb25lIGlzIHRvIG1lcmdlIHVwZGF0ZXMgZnJvbSAnQiBwcm9qZWN0Jy4KKworQ29tcGFyaW5nICdzdWJ0cmVlJyBtZXJnZSB3aXRoIHN1Ym1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0gVGhlIGJlbmVmaXQgb2YgdXNpbmcgc3VidHJlZSBtZXJnZSBpcyB0aGF0IGl0IHJlcXVpcmVzIGxlc3MKKyAgYWRtaW5pc3RyYXRpdmUgYnVyZGVuIGZyb20gdGhlIHVzZXJzIG9mIHlvdXIgcmVwb3NpdG9yeS4gSXQgd29ya3Mgd2l0aAorICBvbGRlciAoYmVmb3JlIEdpdCB2MS41LjIpIGNsaWVudHMgYW5kIHlvdSBoYXZlIHRoZSBjb2RlIHJpZ2h0IGFmdGVyCisgIGNsb25lLgorCistIEhvd2V2ZXIgaWYgeW91IHVzZSBzdWJtb2R1bGVzIHRoZW4geW91IGNhbiBjaG9vc2Ugbm90IHRvIHRyYW5zZmVyIHRoZQorICBzdWJtb2R1bGUgb2JqZWN0cy4gVGhpcyBtYXkgYmUgYSBwcm9ibGVtIHdpdGggdGhlIHN1YnRyZWUgbWVyZ2UuCisKKy0gQWxzbywgaW4gY2FzZSB5b3UgbWFrZSBjaGFuZ2VzIHRvIHRoZSBvdGhlciBwcm9qZWN0LCBpdCBpcyBlYXNpZXIgdG8KKyAgc3VibWl0IGNoYW5nZXMgaWYgeW91IGp1c3QgdXNlIHN1Ym1vZHVsZXMuCisKK0FkZGl0aW9uYWwgdGlwcworLS0tLS0tLS0tLS0tLS0tCisKKy0gSWYgeW91IG1hZGUgY2hhbmdlcyB0byB0aGUgb3RoZXIgcHJvamVjdCBpbiB5b3VyIHJlcG9zaXRvcnksIHRoZXkgbWF5CisgIHdhbnQgdG8gbWVyZ2UgZnJvbSB5b3VyIHByb2plY3QuIFRoaXMgaXMgcG9zc2libGUgdXNpbmcgc3VidHJlZSAtLSBpdAorICBjYW4gc2hpZnQgdXAgdGhlIHBhdGhzIGluIHlvdXIgdHJlZSBhbmQgdGhlbiB0aGV5IGNhbiBtZXJnZSBvbmx5IHRoZQorICByZWxldmFudCBwYXJ0cyBvZiB5b3VyIHRyZWUuCisKKy0gUGxlYXNlIG5vdGUgdGhhdCBpZiB0aGUgb3RoZXIgcHJvamVjdCBtZXJnZXMgZnJvbSB5b3UsIHRoZW4gaXQgd2lsbAorICBjb25uZWN0IGl0cyBoaXN0b3J5IHRvIHlvdXJzLCB3aGljaCBjYW4gYmUgc29tZXRoaW5nIHRoZXkgZG9uJ3Qgd2FudAorICB0by4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vdXNpbmctc2lnbmVkLXRhZy1pbi1wdWxsLXJlcXVlc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by91c2luZy1zaWduZWQtdGFnLWluLXB1bGwtcmVxdWVzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmMDQwZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vdXNpbmctc2lnbmVkLXRhZy1pbi1wdWxsLXJlcXVlc3QudHh0CkBAIC0wLDAgKzEsMjE3IEBACitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitEYXRlOiBUdWUsIDE3IEphbiAyMDExIDEzOjAwOjAwIC0wODAwCitTdWJqZWN0OiBVc2luZyBzaWduZWQgdGFnIGluIHB1bGwgcmVxdWVzdHMKK0Fic3RyYWN0OiBCZWdpbm5pbmcgdjEuNy45LCBhIGNvbnRyaWJ1dG9yIGNhbiBwdXNoIGEgc2lnbmVkIHRhZyB0byBoZXIKKyBwdWJsaXNoaW5nIHJlcG9zaXRvcnkgYW5kIGFzayBoZXIgaW50ZWdyYXRvciB0byBwdWxsIGl0LiBUaGlzIGFzc3VyZXMgdGhlCisgaW50ZWdyYXRvciB0aGF0IHRoZSBwdWxsZWQgaGlzdG9yeSBpcyBhdXRoZW50aWMgYW5kIGFsbG93cyBvdGhlcnMgdG8KKyBsYXRlciB2YWxpZGF0ZSBpdC4KK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gdXNlIGEgc2lnbmVkIHRhZyBpbiBwdWxsIHJlcXVlc3RzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0EgdHlwaWNhbCBkaXN0cmlidXRlZCB3b3JrZmxvdyB1c2luZyBHaXQgaXMgZm9yIGEgY29udHJpYnV0b3IgdG8gZm9yayBhCitwcm9qZWN0LCBidWlsZCBvbiBpdCwgcHVibGlzaCB0aGUgcmVzdWx0IHRvIGhlciBwdWJsaWMgcmVwb3NpdG9yeSwgYW5kIGFzawordGhlICJ1cHN0cmVhbSIgcGVyc29uIChvZnRlbiB0aGUgb3duZXIgb2YgdGhlIHByb2plY3Qgd2hlcmUgc2hlIGZvcmtlZAorZnJvbSkgdG8gcHVsbCBmcm9tIGhlciBwdWJsaWMgcmVwb3NpdG9yeS4gUmVxdWVzdGluZyBzdWNoIGEgInB1bGwiIGlzIG1hZGUKK2Vhc3kgYnkgdGhlIGBnaXQgcmVxdWVzdC1wdWxsYCBjb21tYW5kLgorCitFYXJsaWVyLCBhIHR5cGljYWwgcHVsbCByZXF1ZXN0IG1heSBoYXZlIHN0YXJ0ZWQgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyBUaGUgZm9sbG93aW5nIGNoYW5nZXMgc2luY2UgY29tbWl0IDQwNmRhNzgwMzIxNzkuLi46CisKKyAgIEZyb2JveiAzLjIgKDIwMTEtMDktMzAgMTQ6MjA6NTcgLTA3MDApCisKKyBhcmUgYXZhaWxhYmxlIGluIHRoZSBHaXQgcmVwb3NpdG9yeSBhdDoKKworICAgZXhhbXBsZS5jb206L2dpdC9mcm9ib3ouZ2l0IGZvci14eXp6eQorLS0tLS0tLS0tLS0tCisKK2ZvbGxvd2VkIGJ5IGEgc2hvcnRsb2cgb2YgdGhlIGNoYW5nZXMgYW5kIGEgZGlmZnN0YXQuCisKK1RoZSByZXF1ZXN0IHdhcyBmb3IgYSBicmFuY2ggbmFtZSAoZS5nLiBgZm9yLXh5enp5YCkgaW4gdGhlIHB1YmxpYworcmVwb3NpdG9yeSBvZiB0aGUgY29udHJpYnV0b3IsIGFuZCBldmVuIHRob3VnaCBpdCBzdGF0ZWQgd2hlcmUgdGhlCitjb250cmlidXRvciBmb3JrZWQgaGVyIHdvcmsgZnJvbSwgdGhlIG1lc3NhZ2UgZGlkIG5vdCBzYXkgYW55dGhpbmcgYWJvdXQKK3RoZSBjb21taXQgdG8gZXhwZWN0IGF0IHRoZSB0aXAgb2YgdGhlIGZvci14eXp6eSBicmFuY2guIElmIHRoZSBzaXRlIHRoYXQKK2hvc3RzIHRoZSBwdWJsaWMgcmVwb3NpdG9yeSBvZiB0aGUgY29udHJpYnV0b3IgY2Fubm90IGJlIGZ1bGx5IHRydXN0ZWQsIGl0Cit3YXMgdW5uZWNlc3NhcmlseSBoYXJkIHRvIG1ha2Ugc3VyZSB3aGF0IHdhcyBwdWxsZWQgYnkgdGhlIGludGVncmF0b3Igd2FzCitnZW51aW5lbHkgd2hhdCB0aGUgY29udHJpYnV0b3IgaGFkIHByb2R1Y2VkIGZvciB0aGUgcHJvamVjdC4gQWxzbyB0aGVyZQord2FzIG5vIGVhc3kgd2F5IGZvciB0aGlyZC1wYXJ0eSBhdWRpdG9ycyB0byBsYXRlciB2ZXJpZnkgdGhlIHJlc3VsdGluZworaGlzdG9yeS4KKworU3RhcnRpbmcgZnJvbSBHaXQgcmVsZWFzZSB2MS43LjksIGEgY29udHJpYnV0b3IgY2FuIGFkZCBhIHNpZ25lZCB0YWcgdG8KK3RoZSBjb21taXQgYXQgdGhlIHRpcCBvZiB0aGUgaGlzdG9yeSBhbmQgYXNrIHRoZSBpbnRlZ3JhdG9yIHRvIHB1bGwgdGhhdAorc2lnbmVkIHRhZy4gV2hlbiB0aGUgaW50ZWdyYXRvciBydW5zIGBnaXQgcHVsbGAsIHRoZSBzaWduZWQgdGFnIGlzCithdXRvbWF0aWNhbGx5IHZlcmlmaWVkIHRvIGFzc3VyZSB0aGF0IHRoZSBoaXN0b3J5IGlzIG5vdCB0YW1wZXJlZCB3aXRoLgorSW4gYWRkaXRpb24sIHRoZSByZXN1bHRpbmcgbWVyZ2UgY29tbWl0IHJlY29yZHMgdGhlIGNvbnRlbnQgb2YgdGhlIHNpZ25lZAordGFnLCBzbyB0aGF0IG90aGVyIHBlb3BsZSBjYW4gdmVyaWZ5IHRoYXQgdGhlIGJyYW5jaCBtZXJnZWQgYnkgdGhlCitpbnRlZ3JhdG9yIHdhcyBzaWduZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aXRob3V0IGZldGNoaW5nIHRoZSBzaWduZWQgdGFnCit1c2VkIHRvIHZhbGlkYXRlIHRoZSBwdWxsIHJlcXVlc3Qgc2VwYXJhdGVseSBhbmQga2VlcGluZyBpdCBpbiB0aGUgcmVmcworbmFtZXNwYWNlLgorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgd29ya2Zsb3cgYmV0d2VlbiB0aGUgY29udHJpYnV0b3IgYW5kIHRoZQoraW50ZWdyYXRvciwgdXNpbmcgR2l0IHYxLjcuOSBvciBsYXRlci4KKworCitBIGNvbnRyaWJ1dG9yIG9yIGEgbGlldXRlbmFudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgcHJlcGFyaW5nIGhlciB3b3JrIHRvIGJlIHB1bGxlZCwgdGhlIGNvbnRyaWJ1dG9yIHVzZXMgYGdpdCB0YWcgLXNgCit0byBjcmVhdGUgYSBzaWduZWQgdGFnOgorCistLS0tLS0tLS0tLS0KKyAkIGdpdCBjaGVja291dCB3b3JrCisgJCAuLi4gImdpdCBwdWxsIiBmcm9tIHN1YmxpZXV0ZW5hbnRzLCAiZ2l0IGNvbW1pdCIgeW91ciBvd24gd29yayAuLi4KKyAkIGdpdCB0YWcgLXMgLW0gIkNvbXBsZXRlZCBmcm90eiBmZWF0dXJlIiBmcm90ei1mb3IteHl6enkgd29yaworLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCB0aGlzIGV4YW1wbGUgdXNlcyB0aGUgYC1tYCBvcHRpb24gdG8gY3JlYXRlIGEgc2lnbmVkIHRhZyB3aXRoCitqdXN0IGEgb25lLWxpbmVyIG1lc3NhZ2UsIGJ1dCB0aGlzIGlzIGZvciBpbGx1c3RyYXRpb24gcHVycG9zZXMgb25seS4gSXQKK2lzIGFkdmlzYWJsZSB0byBjb21wb3NlIGEgd2VsbC13cml0dGVuIGV4cGxhbmF0aW9uIG9mIHdoYXQgdGhlIHRvcGljIGRvZXMKK3RvIGp1c3RpZnkgd2h5IGl0IGlzIHdvcnRod2hpbGUgZm9yIHRoZSBpbnRlZ3JhdG9yIHRvIHB1bGwgaXQsIGFzIHRoaXMKK21lc3NhZ2Ugd2lsbCBldmVudHVhbGx5IGJlY29tZSBwYXJ0IG9mIHRoZSBmaW5hbCBoaXN0b3J5IGFmdGVyIHRoZQoraW50ZWdyYXRvciByZXNwb25kcyB0byB0aGUgcHVsbCByZXF1ZXN0IChhcyB3ZSB3aWxsIHNlZSBsYXRlcikuCisKK1RoZW4gc2hlIHB1c2hlcyB0aGUgdGFnIG91dCB0byBoZXIgcHVibGljIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLQorICQgZ2l0IHB1c2ggZXhhbXBsZS5jb206L2dpdC9mcm9ib3ouZ2l0LyArZnJvdHotZm9yLXh5enp5CistLS0tLS0tLS0tLS0KKworVGhlcmUgaXMgbm8gbmVlZCB0byBwdXNoIHRoZSBgd29ya2AgYnJhbmNoIG9yIGFueXRoaW5nIGVsc2UuCisKK05vdGUgdGhhdCB0aGUgYWJvdmUgY29tbWFuZCBsaW5lIHVzZWQgYSBwbHVzIHNpZ24gYXQgdGhlIGJlZ2lubmluZyBvZgorYCtmcm90ei1mb3IteHl6enlgIHRvIGFsbG93IGZvcmNpbmcgdGhlIHVwZGF0ZSBvZiBhIHRhZywgYXMgdGhlIHNhbWUKK2NvbnRyaWJ1dG9yIG1heSB3YW50IHRvIHJldXNlIGEgc2lnbmVkIHRhZyB3aXRoIHRoZSBzYW1lIG5hbWUgYWZ0ZXIgdGhlCitwcmV2aW91cyBwdWxsIHJlcXVlc3QgaGFzIGFscmVhZHkgYmVlbiByZXNwb25kZWQgdG8uCisKK1RoZSBjb250cmlidXRvciB0aGVuIHByZXBhcmVzIGEgbWVzc2FnZSB0byByZXF1ZXN0IGEgInB1bGwiOgorCistLS0tLS0tLS0tLS0KKyAkIGdpdCByZXF1ZXN0LXB1bGwgdjMuMiBleGFtcGxlLmNvbTovZ2l0L2Zyb2Jvei5naXQvIGZyb3R6LWZvci14eXp6eSA+bXNnLnR4dAorLS0tLS0tLS0tLS0tCisKK1RoZSBhcmd1bWVudHMgYXJlOgorCisuIHRoZSB2ZXJzaW9uIG9mIHRoZSBpbnRlZ3JhdG9yJ3MgY29tbWl0IHRoZSBjb250cmlidXRvciBiYXNlZCBoZXIgd29yayBvbjsKKy4gdGhlIFVSTCBvZiB0aGUgcmVwb3NpdG9yeSwgdG8gd2hpY2ggdGhlIGNvbnRyaWJ1dG9yIGhhcyBwdXNoZWQgd2hhdCBzaGUKKyAgd2FudHMgdG8gZ2V0IHB1bGxlZDsgYW5kCisuIHRoZSBuYW1lIG9mIHRoZSB0YWcgdGhlIGNvbnRyaWJ1dG9yIHdhbnRzIHRvIGdldCBwdWxsZWQgKGVhcmxpZXIsIHNoZSBjb3VsZAorICB3cml0ZSBvbmx5IGEgYnJhbmNoIG5hbWUgaGVyZSkuCisKK1RoZSByZXN1bHRpbmcgbXNnLnR4dCBmaWxlIGJlZ2lucyBsaWtlIHNvOgorCistLS0tLS0tLS0tLS0KKyBUaGUgZm9sbG93aW5nIGNoYW5nZXMgc2luY2UgY29tbWl0IDQwNmRhNzgwMzIxNzkuLi46CisKKyAgIEZyb2JveiAzLjIgKDIwMTEtMDktMzAgMTQ6MjA6NTcgLTA3MDApCisKKyBhcmUgYXZhaWxhYmxlIGluIHRoZSBHaXQgcmVwb3NpdG9yeSBhdDoKKworICAgZXhhbXBsZS5jb206L2dpdC9mcm9ib3ouZ2l0IHRhZ3MvZnJvdHotZm9yLXh5enp5CisKKyBmb3IgeW91IHRvIGZldGNoIGNoYW5nZXMgdXAgdG8gNzAzZjA1YWQ1ODM1Yy4uLjoKKworICAgQWRkIHRlc3RzIGFuZCBkb2N1bWVudGF0aW9uIGZvciBmcm90eiAoMjAxMS0xMi0wMiAxMDowMjo1MiAtMDgwMCkKKworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ29tcGxldGVkIGZyb3R6IGZlYXR1cmUKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tCisKK2ZvbGxvd2VkIGJ5IGEgc2hvcnRsb2cgb2YgdGhlIGNoYW5nZXMgYW5kIGEgZGlmZnN0YXQuICBDb21wYXJpbmcgdGhpcyB3aXRoCit0aGUgZWFybGllciBpbGx1c3RyYXRpb24gb2YgdGhlIG91dHB1dCBmcm9tIHRoZSB0cmFkaXRpb25hbCBgZ2l0IHJlcXVlc3QtcHVsbGAKK2NvbW1hbmQsIHRoZSByZWFkZXIgc2hvdWxkIG5vdGljZSB0aGF0OgorCisuIFRoZSB0aXAgY29tbWl0IHRvIGV4cGVjdCBpcyBzaG93biB0byB0aGUgaW50ZWdyYXRvcjsgYW5kCisuIFRoZSBzaWduZWQgdGFnIG1lc3NhZ2UgaXMgc2hvd24gcHJvbWluZW50bHkgYmV0d2VlbiB0aGUgZGFzaGVkIGxpbmVzCisgIGJlZm9yZSB0aGUgc2hvcnRsb2cuCisKK1RoZSBsYXR0ZXIgaXMgd2h5IHRoZSBjb250cmlidXRvciB3b3VsZCB3YW50IHRvIGp1c3RpZnkgd2h5IHB1bGxpbmcgaGVyCit3b3JrIGlzIHdvcnRod2hpbGUgd2hlbiBjcmVhdGluZyB0aGUgc2lnbmVkIHRhZy4gIFRoZSBjb250cmlidXRvciB0aGVuCitvcGVucyBoZXIgZmF2b3JpdGUgTVVBLCByZWFkcyBtc2cudHh0LCBlZGl0cyBhbmQgc2VuZHMgaXQgdG8gaGVyIHVwc3RyZWFtCitpbnRlZ3JhdG9yLgorCisKK0ludGVncmF0b3IKKy0tLS0tLS0tLS0KKworQWZ0ZXIgcmVjZWl2aW5nIHN1Y2ggYSBwdWxsIHJlcXVlc3QgbWVzc2FnZSwgdGhlIGludGVncmF0b3IgZmV0Y2hlcyBhbmQKK2ludGVncmF0ZXMgdGhlIHRhZyBuYW1lZCBpbiB0aGUgcmVxdWVzdCwgd2l0aDoKKworLS0tLS0tLS0tLS0tCisgJCBnaXQgcHVsbCBleGFtcGxlLmNvbTovZ2l0L2Zyb2Jvei5naXQvIHRhZ3MvZnJvdHotZm9yLXh5enp5CistLS0tLS0tLS0tLS0KKworVGhpcyBvcGVyYXRpb24gd2lsbCBhbHdheXMgb3BlbiBhbiBlZGl0b3IgdG8gYWxsb3cgdGhlIGludGVncmF0b3IgdG8gZmluZQordHVuZSB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIHdoZW4gbWVyZ2luZyBhIHNpZ25lZCB0YWcuICBBbHNvLCBwdWxsaW5nIGEKK3NpZ25lZCB0YWcgd2lsbCBhbHdheXMgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IGV2ZW4gd2hlbiB0aGUgaW50ZWdyYXRvciBkb2VzCitub3QgaGF2ZSBhbnkgbmV3IGNvbW1pdCBzaW5jZSB0aGUgY29udHJpYnV0b3IncyB3b3JrIGZvcmtlZCAoaS5lLiAnZmFzdAorZm9yd2FyZCcpLCBzbyB0aGF0IHRoZSBpbnRlZ3JhdG9yIGNhbiBwcm9wZXJseSBleHBsYWluIHdoYXQgdGhlIG1lcmdlIGlzCithYm91dCBhbmQgd2h5IGl0IHdhcyBtYWRlLgorCitJbiB0aGUgZWRpdG9yLCB0aGUgaW50ZWdyYXRvciB3aWxsIHNlZSBzb21ldGhpbmcgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyBNZXJnZSB0YWcgJ2Zyb3R6LWZvci14eXp6eScgb2YgZXhhbXBsZS5jb206L2dpdC9mcm9ib3ouZ2l0LworCisgQ29tcGxldGVkIGZyb3R6IGZlYXR1cmUKKyAjIGdwZzogU2lnbmF0dXJlIG1hZGUgRnJpIDAyIERlYyAyMDExIDEwOjAzOjAxIEFNIFBTVCB1c2luZyBSU0Ega2V5IElEIDk2QUZFNkNCCisgIyBncGc6IEdvb2Qgc2lnbmF0dXJlIGZyb20gIkNvbiBUcmlidXRvciA8bml0Zm9sQGV4YW1wbGUuY29tPiIKKy0tLS0tLS0tLS0tLQorCitOb3RpY2UgdGhhdCB0aGUgbWVzc2FnZSByZWNvcmRlZCBpbiB0aGUgc2lnbmVkIHRhZyAiQ29tcGxldGVkIGZyb3R6CitmZWF0dXJlIiBhcHBlYXJzIGhlcmUsIGFuZCBhZ2FpbiB0aGF0IGlzIHdoeSBpdCBpcyBpbXBvcnRhbnQgZm9yIHRoZQorY29udHJpYnV0b3IgdG8gZXhwbGFpbiBoZXIgd29yayB3ZWxsIHdoZW4gY3JlYXRpbmcgdGhlIHNpZ25lZCB0YWcuCisKK0FzIHVzdWFsLCB0aGUgbGluZXMgY29tbWVudGVkIHdpdGggYCNgIGFyZSBzdHJpcHBlZCBvdXQuIFRoZSByZXN1bHRpbmcKK2NvbW1pdCByZWNvcmRzIHRoZSBzaWduZWQgdGFnIHVzZWQgZm9yIHRoaXMgdmFsaWRhdGlvbiBpbiBhIGhpZGRlbiBmaWVsZAorc28gdGhhdCBpdCBjYW4gbGF0ZXIgYmUgdXNlZCBieSBvdGhlcnMgdG8gYXVkaXQgdGhlIGhpc3RvcnkuIFRoZXJlIGlzIG5vCituZWVkIGZvciB0aGUgaW50ZWdyYXRvciB0byBrZWVwIGEgc2VwYXJhdGUgY29weSBvZiB0aGUgdGFnIGluIGhpcworcmVwb3NpdG9yeSAoaS5lLiBgZ2l0IHRhZyAtbGAgd29uJ3QgbGlzdCB0aGUgYGZyb3R6LWZvci14eXp6eWAgdGFnIGluIHRoZQorYWJvdmUgZXhhbXBsZSksIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIHB1Ymxpc2ggdGhlIHRhZyB0byBoaXMgcHVibGljCityZXBvc2l0b3J5LCBlaXRoZXIuCisKK0FmdGVyIHRoZSBpbnRlZ3JhdG9yIHJlc3BvbmRzIHRvIHRoZSBwdWxsIHJlcXVlc3QgYW5kIGhlciB3b3JrIGJlY29tZXMKK3BhcnQgb2YgdGhlIHBlcm1hbmVudCBoaXN0b3J5LCB0aGUgY29udHJpYnV0b3IgY2FuIHJlbW92ZSB0aGUgdGFnIGZyb20KK2hlciBwdWJsaWMgcmVwb3NpdG9yeSwgaWYgc2hlIGNob29zZXMsIGluIG9yZGVyIHRvIGtlZXAgdGhlIHRhZyBuYW1lc3BhY2UKK29mIGhlciBwdWJsaWMgcmVwb3NpdG9yeSBjbGVhbiwgd2l0aDoKKworLS0tLS0tLS0tLS0tCisgJCBnaXQgcHVzaCBleGFtcGxlLmNvbTovZ2l0L2Zyb2Jvei5naXQgOmZyb3R6LWZvci14eXp6eQorLS0tLS0tLS0tLS0tCisKKworQXVkaXRvcnMKKy0tLS0tLS0tCisKK1RoZSBgLS1zaG93LXNpZ25hdHVyZWAgb3B0aW9uIGNhbiBiZSBnaXZlbiB0byBgZ2l0IGxvZ2Agb3IgYGdpdCBzaG93YCBhbmQKK3Nob3dzIHRoZSB2ZXJpZmljYXRpb24gc3RhdHVzIG9mIHRoZSBlbWJlZGRlZCBzaWduZWQgdGFnIGluIG1lcmdlIGNvbW1pdHMKK2NyZWF0ZWQgd2hlbiB0aGUgaW50ZWdyYXRvciByZXNwb25kZWQgdG8gYSBwdWxsIHJlcXVlc3Qgb2YgYSBzaWduZWQgdGFnLgorCitBIHR5cGljYWwgb3V0cHV0IGZyb20gYGdpdCBzaG93IC0tc2hvdy1zaWduYXR1cmVgIG1heSBsb29rIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCisgJCBnaXQgc2hvdyAtLXNob3ctc2lnbmF0dXJlCisgY29tbWl0IDAyMzA2ZWY2YTM0OThhMzkxMThhZWY5ZGY3OTc1YmRiNTAwOTE1ODUKKyBtZXJnZWQgdGFnICdmcm90ei1mb3IteHl6enknCisgZ3BnOiBTaWduYXR1cmUgbWFkZSBGcmkgMDYgSmFuIDIwMTIgMTI6NDE6NDkgUE0gUFNUIHVzaW5nIFJTQSBrZXkgSUQgOTZBRkU2Q0IKKyBncGc6IEdvb2Qgc2lnbmF0dXJlIGZyb20gIkNvbiBUcmlidXRvciA8bml0Zm9sQGV4YW1wbGUuY29tPiIKKyBNZXJnZTogNDA2ZGE3OCA3MDNmMDVhCisgQXV0aG9yOiBJbnRlIEdyYXRvciA8eHl6enlAZXhhbXBsZS5jb20+CisgRGF0ZTogICBUdWUgSmFuIDE3IDEzOjQ5OjQxIDIwMTIgLTA4MDAKKworICAgICBNZXJnZSB0YWcgJ2Zyb3R6LWZvci14eXp6eScgb2YgZXhhbXBsZS5jb206L2dpdC9mcm9ib3ouZ2l0LworCisgICAgIENvbXBsZXRlZCBmcm90eiBmZWF0dXJlCisKKyAgICAgKiB0YWcgJ2Zyb3R6LWZvci14eXp6eScgKDEwMCBjb21taXRzKQorICAgICAgIEFkZCB0ZXN0cyBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgZnJvdHoKKyAgICAgICAuLi4KKy0tLS0tLS0tLS0tLQorCitUaGVyZSBpcyBubyBuZWVkIGZvciB0aGUgYXVkaXRvciB0byBleHBsaWNpdGx5IGZldGNoIHRoZSBjb250cmlidXRvcidzCitzaWduYXR1cmUsIG9yIHRvIGV2ZW4gYmUgYXdhcmUgb2Ygd2hhdCB0YWcocykgdGhlIGNvbnRyaWJ1dG9yIGFuZCBpbnRlZ3JhdG9yCit1c2VkIHRvIGNvbW11bmljYXRlIHRoZSBzaWduYXR1cmUuICBBbGwgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uIGlzIHJlY29yZGVkCithcyBwYXJ0IG9mIHRoZSBtZXJnZSBjb21taXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kxOG4udHh0IGIvRG9jdW1lbnRhdGlvbi9pMThuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTM2ZTViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMThuLnR4dApAQCAtMCwwICsxLDcwIEBACitHaXQgaXMgdG8gc29tZSBleHRlbnQgY2hhcmFjdGVyIGVuY29kaW5nIGFnbm9zdGljLgorCisgLSBUaGUgY29udGVudHMgb2YgdGhlIGJsb2Igb2JqZWN0cyBhcmUgdW5pbnRlcnByZXRlZCBzZXF1ZW5jZXMKKyAgIG9mIGJ5dGVzLiAgVGhlcmUgaXMgbm8gZW5jb2RpbmcgdHJhbnNsYXRpb24gYXQgdGhlIGNvcmUKKyAgIGxldmVsLgorCisgLSBQYXRoIG5hbWVzIGFyZSBlbmNvZGVkIGluIFVURi04IG5vcm1hbGl6YXRpb24gZm9ybSBDLiBUaGlzCisgICBhcHBsaWVzIHRvIHRyZWUgb2JqZWN0cywgdGhlIGluZGV4IGZpbGUsIHJlZiBuYW1lcywgYXMgd2VsbCBhcworICAgcGF0aCBuYW1lcyBpbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgIGFuZCBjb25maWcgZmlsZXMgKGAuZ2l0L2NvbmZpZ2AgKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLAorICAgbGlua2dpdDpnaXRpZ25vcmVbNV0sIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBhbmQKKyAgIGxpbmtnaXQ6Z2l0bW9kdWxlc1s1XSkuCisrCitOb3RlIHRoYXQgR2l0IGF0IHRoZSBjb3JlIGxldmVsIHRyZWF0cyBwYXRoIG5hbWVzIHNpbXBseSBhcworc2VxdWVuY2VzIG9mIG5vbi1OVUwgYnl0ZXMsIHRoZXJlIGFyZSBubyBwYXRoIG5hbWUgZW5jb2RpbmcKK2NvbnZlcnNpb25zIChleGNlcHQgb24gTWFjIGFuZCBXaW5kb3dzKS4gVGhlcmVmb3JlLCB1c2luZworbm9uLUFTQ0lJIHBhdGggbmFtZXMgd2lsbCBtb3N0bHkgd29yayBldmVuIG9uIHBsYXRmb3JtcyBhbmQgZmlsZQorc3lzdGVtcyB0aGF0IHVzZSBsZWdhY3kgZXh0ZW5kZWQgQVNDSUkgZW5jb2RpbmdzLiBIb3dldmVyLAorcmVwb3NpdG9yaWVzIGNyZWF0ZWQgb24gc3VjaCBzeXN0ZW1zIHdpbGwgbm90IHdvcmsgcHJvcGVybHkgb24KK1VURi04LWJhc2VkIHN5c3RlbXMgKGUuZy4gTGludXgsIE1hYywgV2luZG93cykgYW5kIHZpY2UgdmVyc2EuCitBZGRpdGlvbmFsbHksIG1hbnkgR2l0LWJhc2VkIHRvb2xzIHNpbXBseSBhc3N1bWUgcGF0aCBuYW1lcyB0bworYmUgVVRGLTggYW5kIHdpbGwgZmFpbCB0byBkaXNwbGF5IG90aGVyIGVuY29kaW5ncyBjb3JyZWN0bHkuCisKKyAtIENvbW1pdCBsb2cgbWVzc2FnZXMgYXJlIHR5cGljYWxseSBlbmNvZGVkIGluIFVURi04LCBidXQgb3RoZXIKKyAgIGV4dGVuZGVkIEFTQ0lJIGVuY29kaW5ncyBhcmUgYWxzbyBzdXBwb3J0ZWQuIFRoaXMgaW5jbHVkZXMKKyAgIElTTy04ODU5LXgsIENQMTI1eCBhbmQgbWFueSBvdGhlcnMsIGJ1dCBfbm90XyBVVEYtMTYvMzIsCisgICBFQkNESUMgYW5kIENKSyBtdWx0aS1ieXRlIGVuY29kaW5ncyAoR0JLLCBTaGlmdC1KSVMsIEJpZzUsCisgICBFVUMteCwgQ1A5eHggZXRjLikuCisKK0FsdGhvdWdoIHdlIGVuY291cmFnZSB0aGF0IHRoZSBjb21taXQgbG9nIG1lc3NhZ2VzIGFyZSBlbmNvZGVkCitpbiBVVEYtOCwgYm90aCB0aGUgY29yZSBhbmQgR2l0IFBvcmNlbGFpbiBhcmUgZGVzaWduZWQgbm90IHRvCitmb3JjZSBVVEYtOCBvbiBwcm9qZWN0cy4gIElmIGFsbCBwYXJ0aWNpcGFudHMgb2YgYSBwYXJ0aWN1bGFyCitwcm9qZWN0IGZpbmQgaXQgbW9yZSBjb252ZW5pZW50IHRvIHVzZSBsZWdhY3kgZW5jb2RpbmdzLCBHaXQKK2RvZXMgbm90IGZvcmJpZCBpdC4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIGZldyB0aGluZ3MgdG8ga2VlcCBpbgorbWluZC4KKworLiAnZ2l0IGNvbW1pdCcgYW5kICdnaXQgY29tbWl0LXRyZWUnIGlzc3VlcworICBhIHdhcm5pbmcgaWYgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBnaXZlbiB0byBpdCBkb2VzIG5vdCBsb29rCisgIGxpa2UgYSB2YWxpZCBVVEYtOCBzdHJpbmcsIHVubGVzcyB5b3UgZXhwbGljaXRseSBzYXkgeW91cgorICBwcm9qZWN0IHVzZXMgYSBsZWdhY3kgZW5jb2RpbmcuICBUaGUgd2F5IHRvIHNheSB0aGlzIGlzIHRvCisgIGhhdmUgaTE4bi5jb21taXRlbmNvZGluZyBpbiBgLmdpdC9jb25maWdgIGZpbGUsIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLQorW2kxOG5dCisJY29tbWl0RW5jb2RpbmcgPSBJU08tODg1OS0xCistLS0tLS0tLS0tLS0KKysKK0NvbW1pdCBvYmplY3RzIGNyZWF0ZWQgd2l0aCB0aGUgYWJvdmUgc2V0dGluZyByZWNvcmQgdGhlIHZhbHVlCitvZiBgaTE4bi5jb21taXRFbmNvZGluZ2AgaW4gaXRzIGBlbmNvZGluZ2AgaGVhZGVyLiAgVGhpcyBpcyB0bworaGVscCBvdGhlciBwZW9wbGUgd2hvIGxvb2sgYXQgdGhlbSBsYXRlci4gIExhY2sgb2YgdGhpcyBoZWFkZXIKK2ltcGxpZXMgdGhhdCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGlzIGVuY29kZWQgaW4gVVRGLTguCisKKy4gJ2dpdCBsb2cnLCAnZ2l0IHNob3cnLCAnZ2l0IGJsYW1lJyBhbmQgZnJpZW5kcyBsb29rIGF0IHRoZQorICBgZW5jb2RpbmdgIGhlYWRlciBvZiBhIGNvbW1pdCBvYmplY3QsIGFuZCB0cnkgdG8gcmUtY29kZSB0aGUKKyAgbG9nIG1lc3NhZ2UgaW50byBVVEYtOCB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZC4gIFlvdSBjYW4KKyAgc3BlY2lmeSB0aGUgZGVzaXJlZCBvdXRwdXQgZW5jb2Rpbmcgd2l0aAorICBgaTE4bi5sb2dPdXRwdXRFbmNvZGluZ2AgaW4gYC5naXQvY29uZmlnYCBmaWxlLCBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0KK1tpMThuXQorCWxvZ091dHB1dEVuY29kaW5nID0gSVNPLTg4NTktMQorLS0tLS0tLS0tLS0tCisrCitJZiB5b3UgZG8gbm90IGhhdmUgdGhpcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB0aGUgdmFsdWUgb2YKK2BpMThuLmNvbW1pdEVuY29kaW5nYCBpcyB1c2VkIGluc3RlYWQuCisKK05vdGUgdGhhdCB3ZSBkZWxpYmVyYXRlbHkgY2hvc2Ugbm90IHRvIHJlLWNvZGUgdGhlIGNvbW1pdCBsb2cKK21lc3NhZ2Ugd2hlbiBhIGNvbW1pdCBpcyBtYWRlIHRvIGZvcmNlIFVURi04IGF0IHRoZSBjb21taXQKK29iamVjdCBsZXZlbCwgYmVjYXVzZSByZS1jb2RpbmcgdG8gVVRGLTggaXMgbm90IG5lY2Vzc2FyaWx5IGEKK3JldmVyc2libGUgb3BlcmF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnN0YWxsLWRvYy1xdWljay5zaCBiL0RvY3VtZW50YXRpb24vaW5zdGFsbC1kb2MtcXVpY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTcyMzFkOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5zdGFsbC1kb2MtcXVpY2suc2gKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisjIFRoaXMgcmVxdWlyZXMgZ2l0LW1hbnBhZ2VzIGFuZC9vciBnaXQtaHRtbGRvY3MgcmVwb3NpdG9yaWVzCisKK3JlcG9zaXRvcnk9JHsxP3JlcG9zaXRvcnl9CitkZXN0ZGlyPSR7Mj9kZXN0aW5hdGlvbn0KK0dJVF9NQU5fUkVGPSR7Mz9tYXN0ZXJ9CisKK0dJVF9ESVI9Citmb3IgZCBpbiAiJHJlcG9zaXRvcnkvLmdpdCIgIiRyZXBvc2l0b3J5IgorZG8KKwlpZiBHSVRfRElSPSIkZCIgZ2l0IHJldi1wYXJzZSAiJEdJVF9NQU5fUkVGIiA+L2Rldi9udWxsIDI+JjEKKwl0aGVuCisJCUdJVF9ESVI9IiRkIgorCQlleHBvcnQgR0lUX0RJUgorCQlicmVhaworCWZpCitkb25lCisKK2lmIHRlc3QgLXogIiRHSVRfRElSIgordGhlbgorCWVjaG8gPiYyICJOZWl0aGVyICRyZXBvc2l0b3J5IG5vciAkcmVwb3NpdG9yeS8uZ2l0IGlzIGEgcmVwb3NpdG9yeSIKKwlleGl0IDEKK2ZpCisKK0dJVF9XT1JLX1RSRUU9JChwd2QpCitHSVRfSU5ERVhfRklMRT0kKHB3ZCkvLnF1aWNrLWRvYy4kJAorZXhwb3J0IEdJVF9JTkRFWF9GSUxFIEdJVF9XT1JLX1RSRUUKK3JtIC1mICIkR0lUX0lOREVYX0ZJTEUiCit0cmFwICdybSAtZiAiJEdJVF9JTkRFWF9GSUxFIicgMAorCitnaXQgcmVhZC10cmVlICIkR0lUX01BTl9SRUYiCitnaXQgY2hlY2tvdXQtaW5kZXggLWEgLWYgLS1wcmVmaXg9IiRkZXN0ZGlyIi8KKworaWYgdGVzdCAtbiAiJEdaIgordGhlbgorCWdpdCBscy10cmVlIC1yIC0tbmFtZS1vbmx5ICIkR0lUX01BTl9SRUYiIHwKKwl4YXJncyBwcmludGYgIiRkZXN0ZGlyLyVzXG4iIHwKKwl4YXJncyBnemlwIC1mCitmaQorcm0gLWYgIiRHSVRfSU5ERVhfRklMRSIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5zdGFsbC13ZWJkb2Muc2ggYi9Eb2N1bWVudGF0aW9uL2luc3RhbGwtd2ViZG9jLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVkOGI0ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2luc3RhbGwtd2ViZG9jLnNoCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorCitUPSIkMSIKKworZm9yIGggaW4gXAorCSoudHh0ICouaHRtbCBcCisJaG93dG8vKi50eHQgaG93dG8vKi5odG1sIFwKKwl0ZWNobmljYWwvKi50eHQgdGVjaG5pY2FsLyouaHRtbCBcCisJUmVsTm90ZXMvKi50eHQgKi5jc3MKK2RvCisJaWYgdGVzdCAhIC1mICIkaCIKKwl0aGVuCisJCTogZGlkIG5vdCBtYXRjaAorCWVsaWYgdGVzdCAtZiAiJFQvJGgiICYmCisJCSRESUZGIC11IC1JJ15MYXN0IHVwZGF0ZWQgJyAiJFQvJGgiICIkaCIKKwl0aGVuCisJCTo7ICMgdXAgdG8gZGF0ZQorCWVsc2UKKwkJZWNobyA+JjIgIiMgaW5zdGFsbCAkaCAkVC8kaCIKKwkJcm0gLWYgIiRULyRoIgorCQlta2RpciAtcCAkKGRpcm5hbWUgIiRULyRoIikKKwkJY3AgIiRoIiAiJFQvJGgiCisJZmkKK2RvbmUKK3N0cmlwX2xlYWRpbmc9JChlY2hvICIkVC8iIHwgc2VkIC1lICdzfC58LnxnJykKK2ZvciB0aCBpbiBcCisJIiRUIi8qLmh0bWwgIiRUIi8qLnR4dCBcCisJIiRUIi9ob3d0by8qLnR4dCAiJFQiL2hvd3RvLyouaHRtbCBcCisJIiRUIi90ZWNobmljYWwvKi50eHQgIiRUIi90ZWNobmljYWwvKi5odG1sCitkbworCWg9JChleHByICIkdGgiIDogIiRzdHJpcF9sZWFkaW5nIidcKC4qXCknKQorCWNhc2UgIiRoIiBpbgorCVJlbE5vdGVzLSoudHh0IHwgaW5kZXguaHRtbCkgY29udGludWUgOzsKKwllc2FjCisJdGVzdCAtZiAiJGgiICYmIGNvbnRpbnVlCisJZWNobyA+JjIgIiMgcm0gLWYgJHRoIgorCXJtIC1mICIkdGgiCitkb25lCitsbiAtc2YgZ2l0Lmh0bWwgIiRUL2luZGV4Lmh0bWwiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xpbmUtcmFuZ2UtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vbGluZS1yYW5nZS1mb3JtYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTY3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2xpbmUtcmFuZ2UtZm9ybWF0LnR4dApAQCAtMCwwICsxLDMwIEBACis8c3RhcnQ+IGFuZCA8ZW5kPiBjYW4gdGFrZSBvbmUgb2YgdGhlc2UgZm9ybXM6CisKKy0gbnVtYmVyCisrCitJZiA8c3RhcnQ+IG9yIDxlbmQ+IGlzIGEgbnVtYmVyLCBpdCBzcGVjaWZpZXMgYW4KK2Fic29sdXRlIGxpbmUgbnVtYmVyIChsaW5lcyBjb3VudCBmcm9tIDEpLgorKworCistIC9yZWdleC8KKysKK1RoaXMgZm9ybSB3aWxsIHVzZSB0aGUgZmlyc3QgbGluZSBtYXRjaGluZyB0aGUgZ2l2ZW4KK1BPU0lYIHJlZ2V4LiBJZiA8c3RhcnQ+IGlzIGEgcmVnZXgsIGl0IHdpbGwgc2VhcmNoIGZyb20gdGhlIGVuZCBvZgordGhlIHByZXZpb3VzIGAtTGAgcmFuZ2UsIGlmIGFueSwgb3RoZXJ3aXNlIGZyb20gdGhlIHN0YXJ0IG9mIGZpbGUuCitJZiA8c3RhcnQ+IGlzIGBgXi9yZWdleC8nJywgaXQgd2lsbCBzZWFyY2ggZnJvbSB0aGUgc3RhcnQgb2YgZmlsZS4KK0lmIDxlbmQ+IGlzIGEgcmVnZXgsIGl0IHdpbGwgc2VhcmNoCitzdGFydGluZyBhdCB0aGUgbGluZSBnaXZlbiBieSA8c3RhcnQ+LgorKworCistICtvZmZzZXQgb3IgLW9mZnNldAorKworVGhpcyBpcyBvbmx5IHZhbGlkIGZvciA8ZW5kPiBhbmQgd2lsbCBzcGVjaWZ5IGEgbnVtYmVyCitvZiBsaW5lcyBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGxpbmUgZ2l2ZW4gYnkgPHN0YXJ0Pi4KKworKworSWYgYGA6PGZ1bmNuYW1lPicnIGlzIGdpdmVuIGluIHBsYWNlIG9mIDxzdGFydD4gYW5kIDxlbmQ+LCBpdCBpcyBhCityZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBkZW5vdGVzIHRoZSByYW5nZSBmcm9tIHRoZSBmaXJzdCBmdW5jbmFtZSBsaW5lCit0aGF0IG1hdGNoZXMgPGZ1bmNuYW1lPiwgdXAgdG8gdGhlIG5leHQgZnVuY25hbWUgbGluZS4gYGA6PGZ1bmNuYW1lPicnCitzZWFyY2hlcyBmcm9tIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGAtTGAgcmFuZ2UsIGlmIGFueSwgb3RoZXJ3aXNlCitmcm9tIHRoZSBzdGFydCBvZiBmaWxlLiBgYF46PGZ1bmNuYW1lPicnIHNlYXJjaGVzIGZyb20gdGhlIHN0YXJ0IG9mCitmaWxlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9saW50LWdpdGxpbmsucGVybCBiL0RvY3VtZW50YXRpb24vbGludC1naXRsaW5rLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDc2Y2MzMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbGludC1naXRsaW5rLnBlcmwKQEAgLTAsMCArMSw3MSBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBGaWxlOjpGaW5kOwordXNlIEdldG9wdDo6TG9uZzsKKworbXkgJGJhc2VkaXIgPSAiLiI7CitHZXRPcHRpb25zKCJiYXNlZGlyPXMiID0+IFwkYmFzZWRpcikKKwlvciBkaWUoIkNhbm5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXG4iKTsKKworbXkgJGZvdW5kX2Vycm9ycyA9IDA7CisKK3N1YiByZXBvcnQgeworCW15ICgkd2hlcmUsICR3aGF0LCAkZXJyb3IpID0gQF87CisJcHJpbnQgIiR3aGVyZTogJGVycm9yOiAkd2hhdFxuIjsKKwkkZm91bmRfZXJyb3JzID0gMTsKK30KKworc3ViIGdyYWJfc2VjdGlvbiB7CisJbXkgKCRwYWdlKSA9IEBfOworCW9wZW4gbXkgJGZoLCAiPCIsICIkYmFzZWRpci8kcGFnZS50eHQiOworCW15ICRmaXJzdGxpbmUgPSA8JGZoPjsKKwljaG9tcCAkZmlyc3RsaW5lOworCWNsb3NlICRmaDsKKwlteSAoJHNlY3Rpb24pID0gKCRmaXJzdGxpbmUgPX4gLy4qXCgoXGQpXCkkLyk7CisJcmV0dXJuICRzZWN0aW9uOworfQorCitzdWIgbGludCB7CisJbXkgKCRmaWxlKSA9IEBfOworCW9wZW4gbXkgJGZoLCAiPCIsICRmaWxlCisJCW9yIHJldHVybjsKKwl3aGlsZSAoPCRmaD4pIHsKKwkJbXkgJHdoZXJlID0gIiRmaWxlOiQuIjsKKwkJd2hpbGUgKHMvbGlua2dpdDooKC4qPylcWyhcZClcXSkvLykgeworCQkJbXkgKCR0YXJnZXQsICRwYWdlLCAkc2VjdGlvbikgPSAoJDEsICQyLCAkMyk7CisKKwkJCSMgRGUtQXNjaWlEb2MKKwkJCSRwYWdlID1+IHMve2xpdGRkfS8tLS9nOworCisJCQlpZiAoJHBhZ2UgIX4gL15naXQvKSB7CisJCQkJcmVwb3J0KCR3aGVyZSwgJHRhcmdldCwgIm5vbmdpdCBsaW5rIik7CisJCQkJbmV4dDsKKwkJCX0KKwkJCWlmICghIC1mICIkYmFzZWRpci8kcGFnZS50eHQiKSB7CisJCQkJcmVwb3J0KCR3aGVyZSwgJHRhcmdldCwgIm5vIHN1Y2ggc291cmNlIik7CisJCQkJbmV4dDsKKwkJCX0KKwkJCSRyZWFsX3NlY3Rpb24gPSBncmFiX3NlY3Rpb24oJHBhZ2UpOworCQkJaWYgKCRyZWFsX3NlY3Rpb24gIT0gJHNlY3Rpb24pIHsKKwkJCQlyZXBvcnQoJHdoZXJlLCAkdGFyZ2V0LAorCQkJCQkid3Jvbmcgc2VjdGlvbiAoc2hvdWxkIGJlICRyZWFsX3NlY3Rpb24pIik7CisJCQkJbmV4dDsKKwkJCX0KKwkJfQorCX0KKwljbG9zZSAkZmg7Cit9CisKK3N1YiBsaW50X2l0IHsKKwlsaW50KCRGaWxlOjpGaW5kOjpuYW1lKSBpZiAtZiAmJiAvXC50eHQkLzsKK30KKworaWYgKCFAQVJHVikgeworCWZpbmQoeyB3YW50ZWQgPT4gXCZsaW50X2l0LCBub19jaGRpciA9PiAxIH0sICRiYXNlZGlyKTsKK30gZWxzZSB7CisJZm9yIChAQVJHVikgeworCQlsaW50KCRfKTsKKwl9Cit9CisKK2V4aXQgJGZvdW5kX2Vycm9yczsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWFpbG1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL21haWxtYXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOGMyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21haWxtYXAudHh0CkBAIC0wLDAgKzEsNzUgQEAKK0lmIHRoZSBmaWxlIGAubWFpbG1hcGAgZXhpc3RzIGF0IHRoZSB0b3BsZXZlbCBvZiB0aGUgcmVwb3NpdG9yeSwgb3IgYXQKK3RoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IHRoZSBtYWlsbWFwLmZpbGUgb3IgbWFpbG1hcC5ibG9iCitjb25maWd1cmF0aW9uIG9wdGlvbnMsIGl0CitpcyB1c2VkIHRvIG1hcCBhdXRob3IgYW5kIGNvbW1pdHRlciBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIHRvCitjYW5vbmljYWwgcmVhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzLgorCitJbiB0aGUgc2ltcGxlIGZvcm0sIGVhY2ggbGluZSBpbiB0aGUgZmlsZSBjb25zaXN0cyBvZiB0aGUgY2Fub25pY2FsCityZWFsIG5hbWUgb2YgYW4gYXV0aG9yLCB3aGl0ZXNwYWNlLCBhbmQgYW4gZW1haWwgYWRkcmVzcyB1c2VkIGluIHRoZQorY29tbWl0IChlbmNsb3NlZCBieSAnPCcgYW5kICc+JykgdG8gbWFwIHRvIHRoZSBuYW1lLiBGb3IgZXhhbXBsZToKKy0tCisJUHJvcGVyIE5hbWUgPGNvbW1pdEBlbWFpbC54eD4KKy0tCisKK1RoZSBtb3JlIGNvbXBsZXggZm9ybXMgYXJlOgorLS0KKwk8cHJvcGVyQGVtYWlsLnh4PiA8Y29tbWl0QGVtYWlsLnh4PgorLS0KK3doaWNoIGFsbG93cyBtYWlsbWFwIHRvIHJlcGxhY2Ugb25seSB0aGUgZW1haWwgcGFydCBvZiBhIGNvbW1pdCwgYW5kOgorLS0KKwlQcm9wZXIgTmFtZSA8cHJvcGVyQGVtYWlsLnh4PiA8Y29tbWl0QGVtYWlsLnh4PgorLS0KK3doaWNoIGFsbG93cyBtYWlsbWFwIHRvIHJlcGxhY2UgYm90aCB0aGUgbmFtZSBhbmQgdGhlIGVtYWlsIG9mIGEKK2NvbW1pdCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIGNvbW1pdCBlbWFpbCBhZGRyZXNzLCBhbmQ6CistLQorCVByb3BlciBOYW1lIDxwcm9wZXJAZW1haWwueHg+IENvbW1pdCBOYW1lIDxjb21taXRAZW1haWwueHg+CistLQord2hpY2ggYWxsb3dzIG1haWxtYXAgdG8gcmVwbGFjZSBib3RoIHRoZSBuYW1lIGFuZCB0aGUgZW1haWwgb2YgYQorY29tbWl0IG1hdGNoaW5nIGJvdGggdGhlIHNwZWNpZmllZCBjb21taXQgbmFtZSBhbmQgZW1haWwgYWRkcmVzcy4KKworRXhhbXBsZSAxOiBZb3VyIGhpc3RvcnkgY29udGFpbnMgY29tbWl0cyBieSB0d28gYXV0aG9ycywgSmFuZQorYW5kIEpvZSwgd2hvc2UgbmFtZXMgYXBwZWFyIGluIHRoZSByZXBvc2l0b3J5IHVuZGVyIHNldmVyYWwgZm9ybXM6CisKKy0tLS0tLS0tLS0tLQorSm9lIERldmVsb3BlciA8am9lQGV4YW1wbGUuY29tPgorSm9lIFIuIERldmVsb3BlciA8am9lQGV4YW1wbGUuY29tPgorSmFuZSBEb2UgPGphbmVAZXhhbXBsZS5jb20+CitKYW5lIERvZSA8amFuZUBsYXB0b3AuKG5vbmUpPgorSmFuZSBELiA8amFuZUBkZXNrdG9wLihub25lKT4KKy0tLS0tLS0tLS0tLQorCitOb3cgc3VwcG9zZSB0aGF0IEpvZSB3YW50cyBoaXMgbWlkZGxlIG5hbWUgaW5pdGlhbCB1c2VkLCBhbmQgSmFuZQorcHJlZmVycyBoZXIgZmFtaWx5IG5hbWUgZnVsbHkgc3BlbGxlZCBvdXQuIEEgcHJvcGVyIGAubWFpbG1hcGAgZmlsZQord291bGQgbG9vayBsaWtlOgorCistLS0tLS0tLS0tLS0KK0phbmUgRG9lICAgICAgICAgPGphbmVAZGVza3RvcC4obm9uZSk+CitKb2UgUi4gRGV2ZWxvcGVyIDxqb2VAZXhhbXBsZS5jb20+CistLS0tLS0tLS0tLS0KKworTm90ZSBob3cgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW4gZW50cnkgZm9yIGA8amFuZUBsYXB0b3AuKG5vbmUpPmAsIGJlY2F1c2UgdGhlCityZWFsIG5hbWUgb2YgdGhhdCBhdXRob3IgaXMgYWxyZWFkeSBjb3JyZWN0LgorCitFeGFtcGxlIDI6IFlvdXIgcmVwb3NpdG9yeSBjb250YWlucyBjb21taXRzIGZyb20gdGhlIGZvbGxvd2luZworYXV0aG9yczoKKworLS0tLS0tLS0tLS0tCituaWNrMSA8YnVnc0Bjb21wYW55Lnh4PgorbmljazIgPGJ1Z3NAY29tcGFueS54eD4KK25pY2syIDxuaWNrMkBjb21wYW55Lnh4Pgorc2FudGEgPG1lQGNvbXBhbnkueHg+CitjbGF1cyA8bWVAY29tcGFueS54eD4KK0NUTyA8Y3RvQGNvb21wYW55Lnh4PgorLS0tLS0tLS0tLS0tCisKK1RoZW4geW91IG1pZ2h0IHdhbnQgYSBgLm1haWxtYXBgIGZpbGUgdGhhdCBsb29rcyBsaWtlOgorLS0tLS0tLS0tLS0tCis8Y3RvQGNvbXBhbnkueHg+ICAgICAgICAgICAgICAgICAgICAgICA8Y3RvQGNvb21wYW55Lnh4PgorU29tZSBEdWRlIDxzb21lQGR1ZGUueHg+ICAgICAgICAgbmljazEgPGJ1Z3NAY29tcGFueS54eD4KK090aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PiAgIG5pY2syIDxidWdzQGNvbXBhbnkueHg+CitPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4gICAgICAgICA8bmljazJAY29tcGFueS54eD4KK1NhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+IDxtZUBjb21wYW55Lnh4PgorLS0tLS0tLS0tLS0tCisKK1VzZSBoYXNoICcjJyBmb3IgY29tbWVudHMgdGhhdCBhcmUgZWl0aGVyIG9uIHRoZWlyIG93biBsaW5lLCBvciBhZnRlcgordGhlIGVtYWlsIGFkZHJlc3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYmFzZS11cmwueHNsLmluIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLWJhc2UtdXJsLnhzbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODAwOTA0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLWJhc2UtdXJsLnhzbC5pbgpAQCAtMCwwICsxLDEwIEBACis8IS0tIG1hbnBhZ2UtYmFzZS11cmwueHNsOgorICAgICBzcGVjaWFsIHNldHRpbmdzIGZvciBtYW5wYWdlcyByZW5kZXJlZCBmcm9tIG5ld2VyIGRvY2Jvb2sgLS0+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CisKKzwhLS0gc2V0IGEgYmFzZSBVUkwgZm9yIHJlbGF0aXZlIGxpbmtzIC0tPgorPHhzbDpwYXJhbSBuYW1lPSJtYW4uYmFzZS51cmwuZm9yLnJlbGF0aXZlLmxpbmtzIgorCT5AQE1BTl9CQVNFX1VSTEBAPC94c2w6cGFyYW0+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYm9sZC1saXRlcmFsLnhzbCBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1ib2xkLWxpdGVyYWwueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxM2RiODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYm9sZC1saXRlcmFsLnhzbApAQCAtMCwwICsxLDE2IEBACis8IS0tIG1hbnBhZ2UtYm9sZC1saXRlcmFsLnhzbDoKKyAgICAgc3BlY2lhbCBmb3JtYXR0aW5nIGZvciBtYW5wYWdlcyByZW5kZXJlZCBmcm9tIGFzY2lpZG9jK2RvY2Jvb2sgLS0+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorCQl2ZXJzaW9uPSIxLjAiPgorCis8IS0tIHJlbmRlciBsaXRlcmFsIHRleHQgYXMgYm9sZCAoaW5zdGVhZCBvZiBwbGFpbiBvciBtb25vc3BhY2UpOworICAgICB0aGlzIG1ha2VzIGxpdGVyYWwgdGV4dCBlYXNpZXIgdG8gZGlzdGluZ3Vpc2ggaW4gbWFucGFnZXMKKyAgICAgdmlld2VkIG9uIGEgdHR5IC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGl0ZXJhbHxkOmxpdGVyYWwiPgorCTx4c2w6dGV4dD5cZkI8L3hzbDp0ZXh0PgorCTx4c2w6YXBwbHktdGVtcGxhdGVzLz4KKwk8eHNsOnRleHQ+XGZSPC94c2w6dGV4dD4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLW5vcm1hbC54c2wgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2Utbm9ybWFsLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWM3ZWM2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLW5vcm1hbC54c2wKQEAgLTAsMCArMSwyNiBAQAorPCEtLSBtYW5wYWdlLW5vcm1hbC54c2w6CisgICAgIHNwZWNpYWwgc2V0dGluZ3MgZm9yIG1hbnBhZ2VzIHJlbmRlcmVkIGZyb20gYXNjaWlkb2MrZG9jYm9vayAtLT4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwkJdmVyc2lvbj0iMS4wIj4KKworCis8IS0tIHRoZXNlIHBhcmFtcyBzaWxlbmNlIHNvbWUgb3V0cHV0IGZyb20geG1sdG8gLS0+Cis8eHNsOnBhcmFtIG5hbWU9Im1hbi5vdXRwdXQucXVpZXRseSIgc2VsZWN0PSIxIi8+Cis8eHNsOnBhcmFtIG5hbWU9InJlZmVudHJ5Lm1ldGEuZ2V0LnF1aWV0bHkiIHNlbGVjdD0iMSIvPgorCis8IS0tIGNvbnZlcnQgYXNjaWlkb2MgY2FsbG91dHMgdG8gbWFuIHBhZ2UgZm9ybWF0IC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY28iPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoJ1xmQignLHN1YnN0cmluZy1hZnRlcihAaWQsJy0nKSwnKVxmUicpIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNhbGxvdXRsaXN0Ij4KKwk8eHNsOnRleHQ+LnNwJiMxMDs8L3hzbDp0ZXh0PgorCTx4c2w6YXBwbHktdGVtcGxhdGVzLz4KKwk8eHNsOnRleHQ+JiMxMDs8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjYWxsb3V0Ij4KKwk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KCdcZkInLHN1YnN0cmluZy1hZnRlcihAYXJlYXJlZnMsJy0nKSwnLiBcZlInKSIvPgorCTx4c2w6YXBwbHktdGVtcGxhdGVzLz4KKwk8eHNsOnRleHQ+LmJyJiMxMDs8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtcXVvdGUtYXBvcy54c2wgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtcXVvdGUtYXBvcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViODgzOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1xdW90ZS1hcG9zLnhzbApAQCAtMCwwICsxLDE2IEBACis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CisKKzwhLS0gd29yayBhcm91bmQgbmV3ZXIgZ3JvZmYvbWFuIHNldHVwcyB1c2luZyBhIHByZXR0aWVyIGFwb3N0cm9waGUKKyAgICAgdGhhdCB1bmZvcnR1bmF0ZWx5IGRvZXMgbm90IHF1b3RlIGFueXRoaW5nIHdoZW4gY3V0JnBhc3RpbmcKKyAgICAgZXhhbXBsZXMgdG8gdGhlIHNoZWxsIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJlc2NhcGUuYXBvc3Ryb3BoZSI+CisgIDx4c2w6cGFyYW0gbmFtZT0iY29udGVudCIvPgorICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLnN1YnN0Ij4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic3RyaW5nIiBzZWxlY3Q9IiRjb250ZW50Ii8+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InRhcmdldCI+JzwveHNsOndpdGgtcGFyYW0+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2VtZW50Ij5cKGFxPC94c2w6d2l0aC1wYXJhbT4KKyAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLnhzbCBiL0RvY3VtZW50YXRpb24vbWFucGFnZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2NGJhYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWFucGFnZS54c2wKQEAgLTAsMCArMSwzIEBACis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHZlcnNpb249IjEuMCI+CisJPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLW5zL2N1cnJlbnQvbWFucGFnZXMvZG9jYm9vay54c2wiIC8+Cis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vbWVyZ2Utb3B0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkNDgzMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWVyZ2Utb3B0aW9ucy50eHQKQEAgLTAsMCArMSwxNzcgQEAKKy0tY29tbWl0OjoKKy0tbm8tY29tbWl0OjoKKwlQZXJmb3JtIHRoZSBtZXJnZSBhbmQgY29tbWl0IHRoZSByZXN1bHQuIFRoaXMgb3B0aW9uIGNhbgorCWJlIHVzZWQgdG8gb3ZlcnJpZGUgLS1uby1jb21taXQuCisrCitXaXRoIC0tbm8tY29tbWl0IHBlcmZvcm0gdGhlIG1lcmdlIGFuZCBzdG9wIGp1c3QgYmVmb3JlIGNyZWF0aW5nCithIG1lcmdlIGNvbW1pdCwgdG8gZ2l2ZSB0aGUgdXNlciBhIGNoYW5jZSB0byBpbnNwZWN0IGFuZCBmdXJ0aGVyCit0d2VhayB0aGUgbWVyZ2UgcmVzdWx0IGJlZm9yZSBjb21taXR0aW5nLgorKworTm90ZSB0aGF0IGZhc3QtZm9yd2FyZCB1cGRhdGVzIGRvIG5vdCBjcmVhdGUgYSBtZXJnZSBjb21taXQgYW5kCit0aGVyZWZvcmUgdGhlcmUgaXMgbm8gd2F5IHRvIHN0b3AgdGhvc2UgbWVyZ2VzIHdpdGggLS1uby1jb21taXQuCitUaHVzLCBpZiB5b3Ugd2FudCB0byBlbnN1cmUgeW91ciBicmFuY2ggaXMgbm90IGNoYW5nZWQgb3IgdXBkYXRlZAorYnkgdGhlIG1lcmdlIGNvbW1hbmQsIHVzZSAtLW5vLWZmIHdpdGggLS1uby1jb21taXQuCisKKy0tZWRpdDo6CistZTo6CistLW5vLWVkaXQ6OgorCUludm9rZSBhbiBlZGl0b3IgYmVmb3JlIGNvbW1pdHRpbmcgc3VjY2Vzc2Z1bCBtZWNoYW5pY2FsIG1lcmdlIHRvCisJZnVydGhlciBlZGl0IHRoZSBhdXRvLWdlbmVyYXRlZCBtZXJnZSBtZXNzYWdlLCBzbyB0aGF0IHRoZSB1c2VyCisJY2FuIGV4cGxhaW4gYW5kIGp1c3RpZnkgdGhlIG1lcmdlLiBUaGUgYC0tbm8tZWRpdGAgb3B0aW9uIGNhbiBiZQorCXVzZWQgdG8gYWNjZXB0IHRoZSBhdXRvLWdlbmVyYXRlZCBtZXNzYWdlICh0aGlzIGlzIGdlbmVyYWxseQorCWRpc2NvdXJhZ2VkKS4KK2lmbmRlZjo6Z2l0LXB1bGxbXQorVGhlIGAtLWVkaXRgIChvciBgLWVgKSBvcHRpb24gaXMgc3RpbGwgdXNlZnVsIGlmIHlvdSBhcmUKK2dpdmluZyBhIGRyYWZ0IG1lc3NhZ2Ugd2l0aCB0aGUgYC1tYCBvcHRpb24gZnJvbSB0aGUgY29tbWFuZCBsaW5lCithbmQgd2FudCB0byBlZGl0IGl0IGluIHRoZSBlZGl0b3IuCitlbmRpZjo6Z2l0LXB1bGxbXQorKworT2xkZXIgc2NyaXB0cyBtYXkgZGVwZW5kIG9uIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW91ciBvZiBub3QgYWxsb3dpbmcgdGhlCit1c2VyIHRvIGVkaXQgdGhlIG1lcmdlIGxvZyBtZXNzYWdlLiBUaGV5IHdpbGwgc2VlIGFuIGVkaXRvciBvcGVuZWQgd2hlbgordGhleSBydW4gYGdpdCBtZXJnZWAuIFRvIG1ha2UgaXQgZWFzaWVyIHRvIGFkanVzdCBzdWNoIHNjcmlwdHMgdG8gdGhlCit1cGRhdGVkIGJlaGF2aW91ciwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBHSVRfTUVSR0VfQVVUT0VESVRgIGNhbiBiZQorc2V0IHRvIGBub2AgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVtLgorCistLWNsZWFudXA9PG1vZGU+OjoKKwlUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIGhvdyB0aGUgbWVyZ2UgbWVzc2FnZSB3aWxsIGJlIGNsZWFuZWQgdXAgYmVmb3JlCisJY29tbWl0dGluZy4gU2VlIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBmb3IgbW9yZSBkZXRhaWxzLiBJbiBhZGRpdGlvbiwgaWYKKwl0aGUgJzxtb2RlPicgaXMgZ2l2ZW4gYSB2YWx1ZSBvZiBgc2Npc3NvcnNgLCBzY2lzc29ycyB3aWxsIGJlIGFwcGVuZGVkCisJdG8gYE1FUkdFX01TR2AgYmVmb3JlIGJlaW5nIHBhc3NlZCBvbiB0byB0aGUgY29tbWl0IG1hY2hpbmVyeSBpbiB0aGUKKwljYXNlIG9mIGEgbWVyZ2UgY29uZmxpY3QuCisKKy0tZmY6OgorLS1uby1mZjo6CistLWZmLW9ubHk6OgorCVNwZWNpZmllcyBob3cgYSBtZXJnZSBpcyBoYW5kbGVkIHdoZW4gdGhlIG1lcmdlZC1pbiBoaXN0b3J5IGlzCisJYWxyZWFkeSBhIGRlc2NlbmRhbnQgb2YgdGhlIGN1cnJlbnQgaGlzdG9yeS4gIGAtLWZmYCBpcyB0aGUKKwlkZWZhdWx0IHVubGVzcyBtZXJnaW5nIGFuIGFubm90YXRlZCAoYW5kIHBvc3NpYmx5IHNpZ25lZCkgdGFnCisJdGhhdCBpcyBub3Qgc3RvcmVkIGluIGl0cyBuYXR1cmFsIHBsYWNlIGluIHRoZSBgcmVmcy90YWdzL2AKKwloaWVyYXJjaHksIGluIHdoaWNoIGNhc2UgYC0tbm8tZmZgIGlzIGFzc3VtZWQuCisrCitXaXRoIGAtLWZmYCwgd2hlbiBwb3NzaWJsZSByZXNvbHZlIHRoZSBtZXJnZSBhcyBhIGZhc3QtZm9yd2FyZCAob25seQordXBkYXRlIHRoZSBicmFuY2ggcG9pbnRlciB0byBtYXRjaCB0aGUgbWVyZ2VkIGJyYW5jaDsgZG8gbm90IGNyZWF0ZSBhCittZXJnZSBjb21taXQpLiAgV2hlbiBub3QgcG9zc2libGUgKHdoZW4gdGhlIG1lcmdlZC1pbiBoaXN0b3J5IGlzIG5vdCBhCitkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IGhpc3RvcnkpLCBjcmVhdGUgYSBtZXJnZSBjb21taXQuCisrCitXaXRoIGAtLW5vLWZmYCwgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IGluIGFsbCBjYXNlcywgZXZlbiB3aGVuIHRoZSBtZXJnZQorY291bGQgaW5zdGVhZCBiZSByZXNvbHZlZCBhcyBhIGZhc3QtZm9yd2FyZC4KKysKK1dpdGggYC0tZmYtb25seWAsIHJlc29sdmUgdGhlIG1lcmdlIGFzIGEgZmFzdC1mb3J3YXJkIHdoZW4gcG9zc2libGUuCitXaGVuIG5vdCBwb3NzaWJsZSwgcmVmdXNlIHRvIG1lcmdlIGFuZCBleGl0IHdpdGggYSBub24temVybyBzdGF0dXMuCisKKy1TWzxrZXlpZD5dOjoKKy0tZ3BnLXNpZ25bPTxrZXlpZD5dOjoKKy0tbm8tZ3BnLXNpZ246OgorCUdQRy1zaWduIHRoZSByZXN1bHRpbmcgbWVyZ2UgY29tbWl0LiBUaGUgYGtleWlkYCBhcmd1bWVudCBpcworCW9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byB0aGUgY29tbWl0dGVyIGlkZW50aXR5OyBpZiBzcGVjaWZpZWQsCisJaXQgbXVzdCBiZSBzdHVjayB0byB0aGUgb3B0aW9uIHdpdGhvdXQgYSBzcGFjZS4gYC0tbm8tZ3BnLXNpZ25gCisJaXMgdXNlZnVsIHRvIGNvdW50ZXJtYW5kIGJvdGggYGNvbW1pdC5ncGdTaWduYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLAorCWFuZCBlYXJsaWVyIGAtLWdwZy1zaWduYC4KKworLS1sb2dbPTxuPl06OgorLS1uby1sb2c6OgorCUluIGFkZGl0aW9uIHRvIGJyYW5jaCBuYW1lcywgcG9wdWxhdGUgdGhlIGxvZyBtZXNzYWdlIHdpdGgKKwlvbmUtbGluZSBkZXNjcmlwdGlvbnMgZnJvbSBhdCBtb3N0IDxuPiBhY3R1YWwgY29tbWl0cyB0aGF0IGFyZSBiZWluZworCW1lcmdlZC4gU2VlIGFsc28gbGlua2dpdDpnaXQtZm10LW1lcmdlLW1zZ1sxXS4KKysKK1dpdGggLS1uby1sb2cgZG8gbm90IGxpc3Qgb25lLWxpbmUgZGVzY3JpcHRpb25zIGZyb20gdGhlCithY3R1YWwgY29tbWl0cyBiZWluZyBtZXJnZWQuCisKKy0tc2lnbm9mZjo6CistLW5vLXNpZ25vZmY6OgorCUFkZCBTaWduZWQtb2ZmLWJ5IGxpbmUgYnkgdGhlIGNvbW1pdHRlciBhdCB0aGUgZW5kIG9mIHRoZSBjb21taXQKKwlsb2cgbWVzc2FnZS4gIFRoZSBtZWFuaW5nIG9mIGEgc2lnbm9mZiBkZXBlbmRzIG9uIHRoZSBwcm9qZWN0LAorCWJ1dCBpdCB0eXBpY2FsbHkgY2VydGlmaWVzIHRoYXQgY29tbWl0dGVyIGhhcworCXRoZSByaWdodHMgdG8gc3VibWl0IHRoaXMgd29yayB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFuZAorCWFncmVlcyB0byBhIERldmVsb3BlciBDZXJ0aWZpY2F0ZSBvZiBPcmlnaW4KKwkoc2VlIGh0dHA6Ly9kZXZlbG9wZXJjZXJ0aWZpY2F0ZS5vcmcvIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKysKK1dpdGggLS1uby1zaWdub2ZmIGRvIG5vdCBhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUuCisKKy0tc3RhdDo6Cistbjo6CistLW5vLXN0YXQ6OgorCVNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZS4gVGhlIGRpZmZzdGF0IGlzIGFsc28KKwljb250cm9sbGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBtZXJnZS5zdGF0LgorKworV2l0aCAtbiBvciAtLW5vLXN0YXQgZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZQorbWVyZ2UuCisKKy0tc3F1YXNoOjoKKy0tbm8tc3F1YXNoOjoKKwlQcm9kdWNlIHRoZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHN0YXRlIGFzIGlmIGEgcmVhbCBtZXJnZQorCWhhcHBlbmVkIChleGNlcHQgZm9yIHRoZSBtZXJnZSBpbmZvcm1hdGlvbiksIGJ1dCBkbyBub3QgYWN0dWFsbHkKKwltYWtlIGEgY29tbWl0LCBtb3ZlIHRoZSBgSEVBRGAsIG9yIHJlY29yZCBgJEdJVF9ESVIvTUVSR0VfSEVBRGAKKwkodG8gY2F1c2UgdGhlIG5leHQgYGdpdCBjb21taXRgIGNvbW1hbmQgdG8gY3JlYXRlIGEgbWVyZ2UKKwljb21taXQpLiAgVGhpcyBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIHNpbmdsZSBjb21taXQgb24gdG9wIG9mCisJdGhlIGN1cnJlbnQgYnJhbmNoIHdob3NlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBtZXJnaW5nIGFub3RoZXIKKwlicmFuY2ggKG9yIG1vcmUgaW4gY2FzZSBvZiBhbiBvY3RvcHVzKS4KKysKK1dpdGggLS1uby1zcXVhc2ggcGVyZm9ybSB0aGUgbWVyZ2UgYW5kIGNvbW1pdCB0aGUgcmVzdWx0LiBUaGlzCitvcHRpb24gY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgLS1zcXVhc2guCisrCitXaXRoIC0tc3F1YXNoLCAtLWNvbW1pdCBpcyBub3QgYWxsb3dlZCwgYW5kIHdpbGwgZmFpbC4KKworLS1uby12ZXJpZnk6OgorCVRoaXMgb3B0aW9uIGJ5cGFzc2VzIHRoZSBwcmUtbWVyZ2UgYW5kIGNvbW1pdC1tc2cgaG9va3MuCisJU2VlIGFsc28gbGlua2dpdDpnaXRob29rc1s1XS4KKworLXMgPHN0cmF0ZWd5Pjo6CistLXN0cmF0ZWd5PTxzdHJhdGVneT46OgorCVVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3k7IGNhbiBiZSBzdXBwbGllZCBtb3JlIHRoYW4KKwlvbmNlIHRvIHNwZWNpZnkgdGhlbSBpbiB0aGUgb3JkZXIgdGhleSBzaG91bGQgYmUgdHJpZWQuCisJSWYgdGhlcmUgaXMgbm8gYC1zYCBvcHRpb24sIGEgYnVpbHQtaW4gbGlzdCBvZiBzdHJhdGVnaWVzCisJaXMgdXNlZCBpbnN0ZWFkICgnZ2l0IG1lcmdlLXJlY3Vyc2l2ZScgd2hlbiBtZXJnaW5nIGEgc2luZ2xlCisJaGVhZCwgJ2dpdCBtZXJnZS1vY3RvcHVzJyBvdGhlcndpc2UpLgorCistWCA8b3B0aW9uPjo6CistLXN0cmF0ZWd5LW9wdGlvbj08b3B0aW9uPjo6CisJUGFzcyBtZXJnZSBzdHJhdGVneSBzcGVjaWZpYyBvcHRpb24gdGhyb3VnaCB0byB0aGUgbWVyZ2UKKwlzdHJhdGVneS4KKworLS12ZXJpZnktc2lnbmF0dXJlczo6CistLW5vLXZlcmlmeS1zaWduYXR1cmVzOjoKKwlWZXJpZnkgdGhhdCB0aGUgdGlwIGNvbW1pdCBvZiB0aGUgc2lkZSBicmFuY2ggYmVpbmcgbWVyZ2VkIGlzCisJc2lnbmVkIHdpdGggYSB2YWxpZCBrZXksIGkuZS4gYSBrZXkgdGhhdCBoYXMgYSB2YWxpZCB1aWQ6IGluIHRoZQorCWRlZmF1bHQgdHJ1c3QgbW9kZWwsIHRoaXMgbWVhbnMgdGhlIHNpZ25pbmcga2V5IGhhcyBiZWVuIHNpZ25lZCBieQorCWEgdHJ1c3RlZCBrZXkuICBJZiB0aGUgdGlwIGNvbW1pdCBvZiB0aGUgc2lkZSBicmFuY2ggaXMgbm90IHNpZ25lZAorCXdpdGggYSB2YWxpZCBrZXksIHRoZSBtZXJnZSBpcyBhYm9ydGVkLgorCistLXN1bW1hcnk6OgorLS1uby1zdW1tYXJ5OjoKKwlTeW5vbnltcyB0byAtLXN0YXQgYW5kIC0tbm8tc3RhdDsgdGhlc2UgYXJlIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUKKwlyZW1vdmVkIGluIHRoZSBmdXR1cmUuCisKK2lmbmRlZjo6Z2l0LXB1bGxbXQorLXE6OgorLS1xdWlldDo6CisJT3BlcmF0ZSBxdWlldGx5LiBJbXBsaWVzIC0tbm8tcHJvZ3Jlc3MuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJQmUgdmVyYm9zZS4KKworLS1wcm9ncmVzczo6CistLW5vLXByb2dyZXNzOjoKKwlUdXJuIHByb2dyZXNzIG9uL29mZiBleHBsaWNpdGx5LiBJZiBuZWl0aGVyIGlzIHNwZWNpZmllZCwKKwlwcm9ncmVzcyBpcyBzaG93biBpZiBzdGFuZGFyZCBlcnJvciBpcyBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KKwlOb3RlIHRoYXQgbm90IGFsbCBtZXJnZSBzdHJhdGVnaWVzIG1heSBzdXBwb3J0IHByb2dyZXNzCisJcmVwb3J0aW5nLgorCitlbmRpZjo6Z2l0LXB1bGxbXQorCistLWF1dG9zdGFzaDo6CistLW5vLWF1dG9zdGFzaDo6CisJQXV0b21hdGljYWxseSBjcmVhdGUgYSB0ZW1wb3Jhcnkgc3Rhc2ggZW50cnkgYmVmb3JlIHRoZSBvcGVyYXRpb24KKwliZWdpbnMsIGFuZCBhcHBseSBpdCBhZnRlciB0aGUgb3BlcmF0aW9uIGVuZHMuICBUaGlzIG1lYW5zCisJdGhhdCB5b3UgY2FuIHJ1biB0aGUgb3BlcmF0aW9uIG9uIGEgZGlydHkgd29ya3RyZWUuICBIb3dldmVyLCB1c2UKKwl3aXRoIGNhcmU6IHRoZSBmaW5hbCBzdGFzaCBhcHBsaWNhdGlvbiBhZnRlciBhIHN1Y2Nlc3NmdWwKKwltZXJnZSBtaWdodCByZXN1bHQgaW4gbm9uLXRyaXZpYWwgY29uZmxpY3RzLgorCistLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXM6OgorCUJ5IGRlZmF1bHQsIGBnaXQgbWVyZ2VgIGNvbW1hbmQgcmVmdXNlcyB0byBtZXJnZSBoaXN0b3JpZXMKKwl0aGF0IGRvIG5vdCBzaGFyZSBhIGNvbW1vbiBhbmNlc3Rvci4gIFRoaXMgb3B0aW9uIGNhbiBiZQorCXVzZWQgdG8gb3ZlcnJpZGUgdGhpcyBzYWZldHkgd2hlbiBtZXJnaW5nIGhpc3RvcmllcyBvZiB0d28KKwlwcm9qZWN0cyB0aGF0IHN0YXJ0ZWQgdGhlaXIgbGl2ZXMgaW5kZXBlbmRlbnRseS4gQXMgdGhhdCBpcworCWEgdmVyeSByYXJlIG9jY2FzaW9uLCBubyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGVuYWJsZQorCXRoaXMgYnkgZGVmYXVsdCBleGlzdHMgYW5kIHdpbGwgbm90IGJlIGFkZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1zdHJhdGVnaWVzLnR4dCBiL0RvY3VtZW50YXRpb24vbWVyZ2Utc3RyYXRlZ2llcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxMmRlNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWVyZ2Utc3RyYXRlZ2llcy50eHQKQEAgLTAsMCArMSwxMzYgQEAKK01FUkdFIFNUUkFURUdJRVMKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lcmdlIG1lY2hhbmlzbSAoYGdpdCBtZXJnZWAgYW5kIGBnaXQgcHVsbGAgY29tbWFuZHMpIGFsbG93cyB0aGUKK2JhY2tlbmQgJ21lcmdlIHN0cmF0ZWdpZXMnIHRvIGJlIGNob3NlbiB3aXRoIGAtc2Agb3B0aW9uLiAgU29tZSBzdHJhdGVnaWVzCitjYW4gYWxzbyB0YWtlIHRoZWlyIG93biBvcHRpb25zLCB3aGljaCBjYW4gYmUgcGFzc2VkIGJ5IGdpdmluZyBgLVg8b3B0aW9uPmAKK2FyZ3VtZW50cyB0byBgZ2l0IG1lcmdlYCBhbmQvb3IgYGdpdCBwdWxsYC4KKworcmVzb2x2ZTo6CisJVGhpcyBjYW4gb25seSByZXNvbHZlIHR3byBoZWFkcyAoaS5lLiB0aGUgY3VycmVudCBicmFuY2gKKwlhbmQgYW5vdGhlciBicmFuY2ggeW91IHB1bGxlZCBmcm9tKSB1c2luZyBhIDMtd2F5IG1lcmdlCisJYWxnb3JpdGhtLiAgSXQgdHJpZXMgdG8gY2FyZWZ1bGx5IGRldGVjdCBjcmlzcy1jcm9zcworCW1lcmdlIGFtYmlndWl0aWVzIGFuZCBpcyBjb25zaWRlcmVkIGdlbmVyYWxseSBzYWZlIGFuZAorCWZhc3QuCisKK3JlY3Vyc2l2ZTo6CisJVGhpcyBjYW4gb25seSByZXNvbHZlIHR3byBoZWFkcyB1c2luZyBhIDMtd2F5IG1lcmdlCisJYWxnb3JpdGhtLiAgV2hlbiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGNvbW1vbgorCWFuY2VzdG9yIHRoYXQgY2FuIGJlIHVzZWQgZm9yIDMtd2F5IG1lcmdlLCBpdCBjcmVhdGVzIGEKKwltZXJnZWQgdHJlZSBvZiB0aGUgY29tbW9uIGFuY2VzdG9ycyBhbmQgdXNlcyB0aGF0IGFzCisJdGhlIHJlZmVyZW5jZSB0cmVlIGZvciB0aGUgMy13YXkgbWVyZ2UuICBUaGlzIGhhcyBiZWVuCisJcmVwb3J0ZWQgdG8gcmVzdWx0IGluIGZld2VyIG1lcmdlIGNvbmZsaWN0cyB3aXRob3V0CisJY2F1c2luZyBtaXNtZXJnZXMgYnkgdGVzdHMgZG9uZSBvbiBhY3R1YWwgbWVyZ2UgY29tbWl0cworCXRha2VuIGZyb20gTGludXggMi42IGtlcm5lbCBkZXZlbG9wbWVudCBoaXN0b3J5LgorCUFkZGl0aW9uYWxseSB0aGlzIGNhbiBkZXRlY3QgYW5kIGhhbmRsZSBtZXJnZXMgaW52b2x2aW5nCisJcmVuYW1lcywgYnV0IGN1cnJlbnRseSBjYW5ub3QgbWFrZSB1c2Ugb2YgZGV0ZWN0ZWQKKwljb3BpZXMuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG1lcmdlIHN0cmF0ZWd5IHdoZW4gcHVsbGluZworCW9yIG1lcmdpbmcgb25lIGJyYW5jaC4KKysKK1RoZSAncmVjdXJzaXZlJyBzdHJhdGVneSBjYW4gdGFrZSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKK291cnM7OworCVRoaXMgb3B0aW9uIGZvcmNlcyBjb25mbGljdGluZyBodW5rcyB0byBiZSBhdXRvLXJlc29sdmVkIGNsZWFubHkgYnkKKwlmYXZvcmluZyAnb3VyJyB2ZXJzaW9uLiAgQ2hhbmdlcyBmcm9tIHRoZSBvdGhlciB0cmVlIHRoYXQgZG8gbm90CisJY29uZmxpY3Qgd2l0aCBvdXIgc2lkZSBhcmUgcmVmbGVjdGVkIGluIHRoZSBtZXJnZSByZXN1bHQuCisJRm9yIGEgYmluYXJ5IGZpbGUsIHRoZSBlbnRpcmUgY29udGVudHMgYXJlIHRha2VuIGZyb20gb3VyIHNpZGUuCisrCitUaGlzIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aCB0aGUgJ291cnMnIG1lcmdlIHN0cmF0ZWd5LCB3aGljaCBkb2VzIG5vdAorZXZlbiBsb29rIGF0IHdoYXQgdGhlIG90aGVyIHRyZWUgY29udGFpbnMgYXQgYWxsLiAgSXQgZGlzY2FyZHMgZXZlcnl0aGluZwordGhlIG90aGVyIHRyZWUgZGlkLCBkZWNsYXJpbmcgJ291cicgaGlzdG9yeSBjb250YWlucyBhbGwgdGhhdCBoYXBwZW5lZCBpbiBpdC4KKwordGhlaXJzOzsKKwlUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiAnb3Vycyc7IG5vdGUgdGhhdCwgdW5saWtlICdvdXJzJywgdGhlcmUgaXMKKwlubyAndGhlaXJzJyBtZXJnZSBzdHJhdGVneSB0byBjb25mdXNlIHRoaXMgbWVyZ2Ugb3B0aW9uIHdpdGguCisKK3BhdGllbmNlOzsKKwlXaXRoIHRoaXMgb3B0aW9uLCAnbWVyZ2UtcmVjdXJzaXZlJyBzcGVuZHMgYSBsaXR0bGUgZXh0cmEgdGltZQorCXRvIGF2b2lkIG1pc21lcmdlcyB0aGF0IHNvbWV0aW1lcyBvY2N1ciBkdWUgdG8gdW5pbXBvcnRhbnQKKwltYXRjaGluZyBsaW5lcyAoZS5nLiwgYnJhY2VzIGZyb20gZGlzdGluY3QgZnVuY3Rpb25zKS4gIFVzZQorCXRoaXMgd2hlbiB0aGUgYnJhbmNoZXMgdG8gYmUgbWVyZ2VkIGhhdmUgZGl2ZXJnZWQgd2lsZGx5LgorCVNlZSBhbHNvIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gYC0tcGF0aWVuY2VgLgorCitkaWZmLWFsZ29yaXRobT1bcGF0aWVuY2V8bWluaW1hbHxoaXN0b2dyYW18bXllcnNdOzsKKwlUZWxscyAnbWVyZ2UtcmVjdXJzaXZlJyB0byB1c2UgYSBkaWZmZXJlbnQgZGlmZiBhbGdvcml0aG0sIHdoaWNoCisJY2FuIGhlbHAgYXZvaWQgbWlzbWVyZ2VzIHRoYXQgb2NjdXIgZHVlIHRvIHVuaW1wb3J0YW50IG1hdGNoaW5nCisJbGluZXMgKHN1Y2ggYXMgYnJhY2VzIGZyb20gZGlzdGluY3QgZnVuY3Rpb25zKS4gIFNlZSBhbHNvCisJbGlua2dpdDpnaXQtZGlmZlsxXSBgLS1kaWZmLWFsZ29yaXRobWAuCisKK2lnbm9yZS1zcGFjZS1jaGFuZ2U7OworaWdub3JlLWFsbC1zcGFjZTs7CitpZ25vcmUtc3BhY2UtYXQtZW9sOzsKK2lnbm9yZS1jci1hdC1lb2w7OworCVRyZWF0cyBsaW5lcyB3aXRoIHRoZSBpbmRpY2F0ZWQgdHlwZSBvZiB3aGl0ZXNwYWNlIGNoYW5nZSBhcworCXVuY2hhbmdlZCBmb3IgdGhlIHNha2Ugb2YgYSB0aHJlZS13YXkgbWVyZ2UuICBXaGl0ZXNwYWNlCisJY2hhbmdlcyBtaXhlZCB3aXRoIG90aGVyIGNoYW5nZXMgdG8gYSBsaW5lIGFyZSBub3QgaWdub3JlZC4KKwlTZWUgYWxzbyBsaW5rZ2l0OmdpdC1kaWZmWzFdIGAtYmAsIGAtd2AsCisJYC0taWdub3JlLXNwYWNlLWF0LWVvbGAsIGFuZCBgLS1pZ25vcmUtY3ItYXQtZW9sYC4KKysKKyogSWYgJ3RoZWlyJyB2ZXJzaW9uIG9ubHkgaW50cm9kdWNlcyB3aGl0ZXNwYWNlIGNoYW5nZXMgdG8gYSBsaW5lLAorICAnb3VyJyB2ZXJzaW9uIGlzIHVzZWQ7CisqIElmICdvdXInIHZlcnNpb24gaW50cm9kdWNlcyB3aGl0ZXNwYWNlIGNoYW5nZXMgYnV0ICd0aGVpcicKKyAgdmVyc2lvbiBpbmNsdWRlcyBhIHN1YnN0YW50aWFsIGNoYW5nZSwgJ3RoZWlyJyB2ZXJzaW9uIGlzIHVzZWQ7CisqIE90aGVyd2lzZSwgdGhlIG1lcmdlIHByb2NlZWRzIGluIHRoZSB1c3VhbCB3YXkuCisKK3Jlbm9ybWFsaXplOzsKKwlUaGlzIHJ1bnMgYSB2aXJ0dWFsIGNoZWNrLW91dCBhbmQgY2hlY2staW4gb2YgYWxsIHRocmVlIHN0YWdlcworCW9mIGEgZmlsZSB3aGVuIHJlc29sdmluZyBhIHRocmVlLXdheSBtZXJnZS4gIFRoaXMgb3B0aW9uIGlzCisJbWVhbnQgdG8gYmUgdXNlZCB3aGVuIG1lcmdpbmcgYnJhbmNoZXMgd2l0aCBkaWZmZXJlbnQgY2xlYW4KKwlmaWx0ZXJzIG9yIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24gcnVsZXMuICBTZWUgIk1lcmdpbmcKKwlicmFuY2hlcyB3aXRoIGRpZmZlcmluZyBjaGVja2luL2NoZWNrb3V0IGF0dHJpYnV0ZXMiIGluCisJbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCituby1yZW5vcm1hbGl6ZTs7CisJRGlzYWJsZXMgdGhlIGByZW5vcm1hbGl6ZWAgb3B0aW9uLiAgVGhpcyBvdmVycmlkZXMgdGhlCisJYG1lcmdlLnJlbm9ybWFsaXplYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCituby1yZW5hbWVzOzsKKwlUdXJuIG9mZiByZW5hbWUgZGV0ZWN0aW9uLiBUaGlzIG92ZXJyaWRlcyB0aGUgYG1lcmdlLnJlbmFtZXNgCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKwlTZWUgYWxzbyBsaW5rZ2l0OmdpdC1kaWZmWzFdIGAtLW5vLXJlbmFtZXNgLgorCitmaW5kLXJlbmFtZXNbPTxuPl07OworCVR1cm4gb24gcmVuYW1lIGRldGVjdGlvbiwgb3B0aW9uYWxseSBzZXR0aW5nIHRoZSBzaW1pbGFyaXR5CisJdGhyZXNob2xkLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4gVGhpcyBvdmVycmlkZXMgdGhlCisJJ21lcmdlLnJlbmFtZXMnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisJU2VlIGFsc28gbGlua2dpdDpnaXQtZGlmZlsxXSBgLS1maW5kLXJlbmFtZXNgLgorCityZW5hbWUtdGhyZXNob2xkPTxuPjs7CisJRGVwcmVjYXRlZCBzeW5vbnltIGZvciBgZmluZC1yZW5hbWVzPTxuPmAuCisKK3N1YnRyZWVbPTxwYXRoPl07OworCVRoaXMgb3B0aW9uIGlzIGEgbW9yZSBhZHZhbmNlZCBmb3JtIG9mICdzdWJ0cmVlJyBzdHJhdGVneSwgd2hlcmUKKwl0aGUgc3RyYXRlZ3kgbWFrZXMgYSBndWVzcyBvbiBob3cgdHdvIHRyZWVzIG11c3QgYmUgc2hpZnRlZCB0bworCW1hdGNoIHdpdGggZWFjaCBvdGhlciB3aGVuIG1lcmdpbmcuICBJbnN0ZWFkLCB0aGUgc3BlY2lmaWVkIHBhdGgKKwlpcyBwcmVmaXhlZCAob3Igc3RyaXBwZWQgZnJvbSB0aGUgYmVnaW5uaW5nKSB0byBtYWtlIHRoZSBzaGFwZSBvZgorCXR3byB0cmVlcyB0byBtYXRjaC4KKworb2N0b3B1czo6CisJVGhpcyByZXNvbHZlcyBjYXNlcyB3aXRoIG1vcmUgdGhhbiB0d28gaGVhZHMsIGJ1dCByZWZ1c2VzIHRvIGRvCisJYSBjb21wbGV4IG1lcmdlIHRoYXQgbmVlZHMgbWFudWFsIHJlc29sdXRpb24uICBJdCBpcworCXByaW1hcmlseSBtZWFudCB0byBiZSB1c2VkIGZvciBidW5kbGluZyB0b3BpYyBicmFuY2gKKwloZWFkcyB0b2dldGhlci4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgbWVyZ2Ugc3RyYXRlZ3kgd2hlbgorCXB1bGxpbmcgb3IgbWVyZ2luZyBtb3JlIHRoYW4gb25lIGJyYW5jaC4KKworb3Vyczo6CisJVGhpcyByZXNvbHZlcyBhbnkgbnVtYmVyIG9mIGhlYWRzLCBidXQgdGhlIHJlc3VsdGluZyB0cmVlIG9mIHRoZQorCW1lcmdlIGlzIGFsd2F5cyB0aGF0IG9mIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLCBlZmZlY3RpdmVseQorCWlnbm9yaW5nIGFsbCBjaGFuZ2VzIGZyb20gYWxsIG90aGVyIGJyYW5jaGVzLiAgSXQgaXMgbWVhbnQgdG8KKwliZSB1c2VkIHRvIHN1cGVyc2VkZSBvbGQgZGV2ZWxvcG1lbnQgaGlzdG9yeSBvZiBzaWRlCisJYnJhbmNoZXMuICBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgLVhvdXJzIG9wdGlvbiB0bworCXRoZSAncmVjdXJzaXZlJyBtZXJnZSBzdHJhdGVneS4KKworc3VidHJlZTo6CisJVGhpcyBpcyBhIG1vZGlmaWVkIHJlY3Vyc2l2ZSBzdHJhdGVneS4gV2hlbiBtZXJnaW5nIHRyZWVzIEEgYW5kCisJQiwgaWYgQiBjb3JyZXNwb25kcyB0byBhIHN1YnRyZWUgb2YgQSwgQiBpcyBmaXJzdCBhZGp1c3RlZCB0bworCW1hdGNoIHRoZSB0cmVlIHN0cnVjdHVyZSBvZiBBLCBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlIHRyZWVzIGF0CisJdGhlIHNhbWUgbGV2ZWwuIFRoaXMgYWRqdXN0bWVudCBpcyBhbHNvIGRvbmUgdG8gdGhlIGNvbW1vbgorCWFuY2VzdG9yIHRyZWUuCisKK1dpdGggdGhlIHN0cmF0ZWdpZXMgdGhhdCB1c2UgMy13YXkgbWVyZ2UgKGluY2x1ZGluZyB0aGUgZGVmYXVsdCwgJ3JlY3Vyc2l2ZScpLAoraWYgYSBjaGFuZ2UgaXMgbWFkZSBvbiBib3RoIGJyYW5jaGVzLCBidXQgbGF0ZXIgcmV2ZXJ0ZWQgb24gb25lIG9mIHRoZQorYnJhbmNoZXMsIHRoYXQgY2hhbmdlIHdpbGwgYmUgcHJlc2VudCBpbiB0aGUgbWVyZ2VkIHJlc3VsdDsgc29tZSBwZW9wbGUgZmluZAordGhpcyBiZWhhdmlvciBjb25mdXNpbmcuICBJdCBvY2N1cnMgYmVjYXVzZSBvbmx5IHRoZSBoZWFkcyBhbmQgdGhlIG1lcmdlIGJhc2UKK2FyZSBjb25zaWRlcmVkIHdoZW4gcGVyZm9ybWluZyBhIG1lcmdlLCBub3QgdGhlIGluZGl2aWR1YWwgY29tbWl0cy4gIFRoZSBtZXJnZQorYWxnb3JpdGhtIHRoZXJlZm9yZSBjb25zaWRlcnMgdGhlIHJldmVydGVkIGNoYW5nZSBhcyBubyBjaGFuZ2UgYXQgYWxsLCBhbmQKK3N1YnN0aXR1dGVzIHRoZSBjaGFuZ2VkIHZlcnNpb24gaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJldHR5LWZvcm1hdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ3YTU1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcHJldHR5LWZvcm1hdHMudHh0CkBAIC0wLDAgKzEsMzM0IEBACitQUkVUVFkgRk9STUFUUworLS0tLS0tLS0tLS0tLS0KKworSWYgdGhlIGNvbW1pdCBpcyBhIG1lcmdlLCBhbmQgaWYgdGhlIHByZXR0eS1mb3JtYXQKK2lzIG5vdCAnb25lbGluZScsICdlbWFpbCcgb3IgJ3JhdycsIGFuIGFkZGl0aW9uYWwgbGluZSBpcworaW5zZXJ0ZWQgYmVmb3JlIHRoZSAnQXV0aG9yOicgbGluZS4gIFRoaXMgbGluZSBiZWdpbnMgd2l0aAorIk1lcmdlOiAiIGFuZCB0aGUgaGFzaGVzIG9mIGFuY2VzdHJhbCBjb21taXRzIGFyZSBwcmludGVkLAorc2VwYXJhdGVkIGJ5IHNwYWNlcy4gIE5vdGUgdGhhdCB0aGUgbGlzdGVkIGNvbW1pdHMgbWF5IG5vdAorbmVjZXNzYXJpbHkgYmUgdGhlIGxpc3Qgb2YgdGhlICpkaXJlY3QqIHBhcmVudCBjb21taXRzIGlmIHlvdQoraGF2ZSBsaW1pdGVkIHlvdXIgdmlldyBvZiBoaXN0b3J5OiBmb3IgZXhhbXBsZSwgaWYgeW91IGFyZQorb25seSBpbnRlcmVzdGVkIGluIGNoYW5nZXMgcmVsYXRlZCB0byBhIGNlcnRhaW4gZGlyZWN0b3J5IG9yCitmaWxlLgorCitUaGVyZSBhcmUgc2V2ZXJhbCBidWlsdC1pbiBmb3JtYXRzLCBhbmQgeW91IGNhbiBkZWZpbmUKK2FkZGl0aW9uYWwgZm9ybWF0cyBieSBzZXR0aW5nIGEgcHJldHR5LjxuYW1lPgorY29uZmlnIG9wdGlvbiB0byBlaXRoZXIgYW5vdGhlciBmb3JtYXQgbmFtZSwgb3IgYQorJ2Zvcm1hdDonIHN0cmluZywgYXMgZGVzY3JpYmVkIGJlbG93IChzZWUKK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuIEhlcmUgYXJlIHRoZSBkZXRhaWxzIG9mIHRoZQorYnVpbHQtaW4gZm9ybWF0czoKKworKiAnb25lbGluZScKKworCSAgPGhhc2g+IDx0aXRsZSBsaW5lPgorKworVGhpcyBpcyBkZXNpZ25lZCB0byBiZSBhcyBjb21wYWN0IGFzIHBvc3NpYmxlLgorCisqICdzaG9ydCcKKworCSAgY29tbWl0IDxoYXNoPgorCSAgQXV0aG9yOiA8YXV0aG9yPgorCisJICAgICAgPHRpdGxlIGxpbmU+CisKKyogJ21lZGl1bScKKworCSAgY29tbWl0IDxoYXNoPgorCSAgQXV0aG9yOiA8YXV0aG9yPgorCSAgRGF0ZTogICA8YXV0aG9yIGRhdGU+CisKKwkgICAgICA8dGl0bGUgbGluZT4KKworCSAgICAgIDxmdWxsIGNvbW1pdCBtZXNzYWdlPgorCisqICdmdWxsJworCisJICBjb21taXQgPGhhc2g+CisJICBBdXRob3I6IDxhdXRob3I+CisJICBDb21taXQ6IDxjb21taXR0ZXI+CisKKwkgICAgICA8dGl0bGUgbGluZT4KKworCSAgICAgIDxmdWxsIGNvbW1pdCBtZXNzYWdlPgorCisqICdmdWxsZXInCisKKwkgIGNvbW1pdCA8aGFzaD4KKwkgIEF1dGhvcjogICAgIDxhdXRob3I+CisJICBBdXRob3JEYXRlOiA8YXV0aG9yIGRhdGU+CisJICBDb21taXQ6ICAgICA8Y29tbWl0dGVyPgorCSAgQ29tbWl0RGF0ZTogPGNvbW1pdHRlciBkYXRlPgorCisJICAgICAgIDx0aXRsZSBsaW5lPgorCisJICAgICAgIDxmdWxsIGNvbW1pdCBtZXNzYWdlPgorCisqICdyZWZlcmVuY2UnCisKKwkgIDxhYmJyZXYgaGFzaD4gKDx0aXRsZSBsaW5lPiwgPHNob3J0IGF1dGhvciBkYXRlPikKKysKK1RoaXMgZm9ybWF0IGlzIHVzZWQgdG8gcmVmZXIgdG8gYW5vdGhlciBjb21taXQgaW4gYSBjb21taXQgbWVzc2FnZSBhbmQKK2lzIHRoZSBzYW1lIGFzIGAtLXByZXR0eT0nZm9ybWF0OiVDKGF1dG8pJWggKCVzLCAlYWQpJ2AuICBCeSBkZWZhdWx0LAordGhlIGRhdGUgaXMgZm9ybWF0dGVkIHdpdGggYC0tZGF0ZT1zaG9ydGAgdW5sZXNzIGFub3RoZXIgYC0tZGF0ZWAgb3B0aW9uCitpcyBleHBsaWNpdGx5IHNwZWNpZmllZC4gIEFzIHdpdGggYW55IGBmb3JtYXQ6YCB3aXRoIGZvcm1hdAorcGxhY2Vob2xkZXJzLCBpdHMgb3V0cHV0IGlzIG5vdCBhZmZlY3RlZCBieSBvdGhlciBvcHRpb25zIGxpa2UKK2AtLWRlY29yYXRlYCBhbmQgYC0td2Fsay1yZWZsb2dzYC4KKworKiAnZW1haWwnCisKKwkgIEZyb20gPGhhc2g+IDxkYXRlPgorCSAgRnJvbTogPGF1dGhvcj4KKwkgIERhdGU6IDxhdXRob3IgZGF0ZT4KKwkgIFN1YmplY3Q6IFtQQVRDSF0gPHRpdGxlIGxpbmU+CisKKwkgIDxmdWxsIGNvbW1pdCBtZXNzYWdlPgorCisqICdtYm94cmQnCisrCitMaWtlICdlbWFpbCcsIGJ1dCBsaW5lcyBpbiB0aGUgY29tbWl0IG1lc3NhZ2Ugc3RhcnRpbmcgd2l0aCAiRnJvbSAiCisocHJlY2VkZWQgYnkgemVybyBvciBtb3JlICI+IikgYXJlIHF1b3RlZCB3aXRoICI+IiBzbyB0aGV5IGFyZW4ndAorY29uZnVzZWQgYXMgc3RhcnRpbmcgYSBuZXcgY29tbWl0LgorCisqICdyYXcnCisrCitUaGUgJ3JhdycgZm9ybWF0IHNob3dzIHRoZSBlbnRpcmUgY29tbWl0IGV4YWN0bHkgYXMKK3N0b3JlZCBpbiB0aGUgY29tbWl0IG9iamVjdC4gIE5vdGFibHksIHRoZSBoYXNoZXMgYXJlCitkaXNwbGF5ZWQgaW4gZnVsbCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIC0tYWJicmV2IG9yCistLW5vLWFiYnJldiBhcmUgdXNlZCwgYW5kICdwYXJlbnRzJyBpbmZvcm1hdGlvbiBzaG93IHRoZQordHJ1ZSBwYXJlbnQgY29tbWl0cywgd2l0aG91dCB0YWtpbmcgZ3JhZnRzIG9yIGhpc3RvcnkKK3NpbXBsaWZpY2F0aW9uIGludG8gYWNjb3VudC4gTm90ZSB0aGF0IHRoaXMgZm9ybWF0IGFmZmVjdHMgdGhlIHdheQorY29tbWl0cyBhcmUgZGlzcGxheWVkLCBidXQgbm90IHRoZSB3YXkgdGhlIGRpZmYgaXMgc2hvd24gZS5nLiB3aXRoCitgZ2l0IGxvZyAtLXJhd2AuIFRvIGdldCBmdWxsIG9iamVjdCBuYW1lcyBpbiBhIHJhdyBkaWZmIGZvcm1hdCwKK3VzZSBgLS1uby1hYmJyZXZgLgorCisqICdmb3JtYXQ6PHN0cmluZz4nCisrCitUaGUgJ2Zvcm1hdDo8c3RyaW5nPicgZm9ybWF0IGFsbG93cyB5b3UgdG8gc3BlY2lmeSB3aGljaCBpbmZvcm1hdGlvbgoreW91IHdhbnQgdG8gc2hvdy4gSXQgd29ya3MgYSBsaXR0bGUgYml0IGxpa2UgcHJpbnRmIGZvcm1hdCwKK3dpdGggdGhlIG5vdGFibGUgZXhjZXB0aW9uIHRoYXQgeW91IGdldCBhIG5ld2xpbmUgd2l0aCAnJW4nCitpbnN0ZWFkIG9mICdcbicuCisrCitFLmcsICdmb3JtYXQ6IlRoZSBhdXRob3Igb2YgJWggd2FzICVhbiwgJWFyJW5UaGUgdGl0bGUgd2FzID4+JXM8PCVuIicKK3dvdWxkIHNob3cgc29tZXRoaW5nIGxpa2UgdGhpczoKKysKKy0tLS0tLS0KK1RoZSBhdXRob3Igb2YgZmU2ZTBlZSB3YXMgSnVuaW8gQyBIYW1hbm8sIDIzIGhvdXJzIGFnbworVGhlIHRpdGxlIHdhcyA+PnQ0MTE5OiB0ZXN0IGF1dG9jb21wdXRpbmcgLXA8bj4gZm9yIHRyYWRpdGlvbmFsIGRpZmYgaW5wdXQuPDwKKworLS0tLS0tLQorKworVGhlIHBsYWNlaG9sZGVycyBhcmU6CisKKy0gUGxhY2Vob2xkZXJzIHRoYXQgZXhwYW5kIHRvIGEgc2luZ2xlIGxpdGVyYWwgY2hhcmFjdGVyOgorJyVuJzo6IG5ld2xpbmUKKyclJSc6OiBhIHJhdyAnJScKKycleDAwJzo6IHByaW50IGEgYnl0ZSBmcm9tIGEgaGV4IGNvZGUKKworLSBQbGFjZWhvbGRlcnMgdGhhdCBhZmZlY3QgZm9ybWF0dGluZyBvZiBsYXRlciBwbGFjZWhvbGRlcnM6CisnJUNyZWQnOjogc3dpdGNoIGNvbG9yIHRvIHJlZAorJyVDZ3JlZW4nOjogc3dpdGNoIGNvbG9yIHRvIGdyZWVuCisnJUNibHVlJzo6IHN3aXRjaCBjb2xvciB0byBibHVlCisnJUNyZXNldCc6OiByZXNldCBjb2xvcgorJyVDKC4uLiknOjogY29sb3Igc3BlY2lmaWNhdGlvbiwgYXMgZGVzY3JpYmVkIHVuZGVyIFZhbHVlcyBpbiB0aGUKKwkgICAgIkNPTkZJR1VSQVRJT04gRklMRSIgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1jb25maWdbMV0uICBCeQorCSAgICBkZWZhdWx0LCBjb2xvcnMgYXJlIHNob3duIG9ubHkgd2hlbiBlbmFibGVkIGZvciBsb2cgb3V0cHV0CisJICAgIChieSBgY29sb3IuZGlmZmAsIGBjb2xvci51aWAsIG9yIGAtLWNvbG9yYCwgYW5kIHJlc3BlY3RpbmcKKwkgICAgdGhlIGBhdXRvYCBzZXR0aW5ncyBvZiB0aGUgZm9ybWVyIGlmIHdlIGFyZSBnb2luZyB0byBhCisJICAgIHRlcm1pbmFsKS4gYCVDKGF1dG8sLi4uKWAgaXMgYWNjZXB0ZWQgYXMgYSBoaXN0b3JpY2FsCisJICAgIHN5bm9ueW0gZm9yIHRoZSBkZWZhdWx0IChlLmcuLCBgJUMoYXV0byxyZWQpYCkuIFNwZWNpZnlpbmcKKwkgICAgYCVDKGFsd2F5cywuLi4pYCB3aWxsIHNob3cgdGhlIGNvbG9ycyBldmVuIHdoZW4gY29sb3IgaXMKKwkgICAgbm90IG90aGVyd2lzZSBlbmFibGVkICh0aG91Z2ggY29uc2lkZXIganVzdCB1c2luZworCSAgICBgLS1jb2xvcj1hbHdheXNgIHRvIGVuYWJsZSBjb2xvciBmb3IgdGhlIHdob2xlIG91dHB1dCwKKwkgICAgaW5jbHVkaW5nIHRoaXMgZm9ybWF0IGFuZCBhbnl0aGluZyBlbHNlIGdpdCBtaWdodCBjb2xvcikuCisJICAgIGBhdXRvYCBhbG9uZSAoaS5lLiBgJUMoYXV0bylgKSB3aWxsIHR1cm4gb24gYXV0byBjb2xvcmluZworCSAgICBvbiB0aGUgbmV4dCBwbGFjZWhvbGRlcnMgdW50aWwgdGhlIGNvbG9yIGlzIHN3aXRjaGVkCisJICAgIGFnYWluLgorJyVtJzo6IGxlZnQgKGA8YCksIHJpZ2h0IChgPmApIG9yIGJvdW5kYXJ5IChgLWApIG1hcmsKKycldyhbPHc+Wyw8aTE+Wyw8aTI+XV1dKSc6OiBzd2l0Y2ggbGluZSB3cmFwcGluZywgbGlrZSB0aGUgLXcgb3B0aW9uIG9mCisJCQkgICAgbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0uCisnJTwoPE4+Wyx0cnVuY3xsdHJ1bmN8bXRydW5jXSknOjogbWFrZSB0aGUgbmV4dCBwbGFjZWhvbGRlciB0YWtlIGF0CisJCQkJICBsZWFzdCBOIGNvbHVtbnMsIHBhZGRpbmcgc3BhY2VzIG9uCisJCQkJICB0aGUgcmlnaHQgaWYgbmVjZXNzYXJ5LiAgT3B0aW9uYWxseQorCQkJCSAgdHJ1bmNhdGUgYXQgdGhlIGJlZ2lubmluZyAobHRydW5jKSwKKwkJCQkgIHRoZSBtaWRkbGUgKG10cnVuYykgb3IgdGhlIGVuZAorCQkJCSAgKHRydW5jKSBpZiB0aGUgb3V0cHV0IGlzIGxvbmdlciB0aGFuCisJCQkJICBOIGNvbHVtbnMuICBOb3RlIHRoYXQgdHJ1bmNhdGluZworCQkJCSAgb25seSB3b3JrcyBjb3JyZWN0bHkgd2l0aCBOID49IDIuCisnJTx8KDxOPiknOjogbWFrZSB0aGUgbmV4dCBwbGFjZWhvbGRlciB0YWtlIGF0IGxlYXN0IHVudGlsIE50aAorCSAgICAgY29sdW1ucywgcGFkZGluZyBzcGFjZXMgb24gdGhlIHJpZ2h0IGlmIG5lY2Vzc2FyeQorJyU+KDxOPiknLCAnJT58KDxOPiknOjogc2ltaWxhciB0byAnJTwoPE4+KScsICclPHwoPE4+KScgcmVzcGVjdGl2ZWx5LAorCQkJYnV0IHBhZGRpbmcgc3BhY2VzIG9uIHRoZSBsZWZ0CisnJT4+KDxOPiknLCAnJT4+fCg8Tj4pJzo6IHNpbWlsYXIgdG8gJyU+KDxOPiknLCAnJT58KDxOPiknCisJCQkgIHJlc3BlY3RpdmVseSwgZXhjZXB0IHRoYXQgaWYgdGhlIG5leHQKKwkJCSAgcGxhY2Vob2xkZXIgdGFrZXMgbW9yZSBzcGFjZXMgdGhhbiBnaXZlbiBhbmQKKwkJCSAgdGhlcmUgYXJlIHNwYWNlcyBvbiBpdHMgbGVmdCwgdXNlIHRob3NlCisJCQkgIHNwYWNlcworJyU+PCg8Tj4pJywgJyU+PHwoPE4+KSc6OiBzaW1pbGFyIHRvICclPCg8Tj4pJywgJyU8fCg8Tj4pJworCQkJICByZXNwZWN0aXZlbHksIGJ1dCBwYWRkaW5nIGJvdGggc2lkZXMKKwkJCSAgKGkuZS4gdGhlIHRleHQgaXMgY2VudGVyZWQpCisKKy0gUGxhY2Vob2xkZXJzIHRoYXQgZXhwYW5kIHRvIGluZm9ybWF0aW9uIGV4dHJhY3RlZCBmcm9tIHRoZSBjb21taXQ6CisnJUgnOjogY29tbWl0IGhhc2gKKyclaCc6OiBhYmJyZXZpYXRlZCBjb21taXQgaGFzaAorJyVUJzo6IHRyZWUgaGFzaAorJyV0Jzo6IGFiYnJldmlhdGVkIHRyZWUgaGFzaAorJyVQJzo6IHBhcmVudCBoYXNoZXMKKyclcCc6OiBhYmJyZXZpYXRlZCBwYXJlbnQgaGFzaGVzCisnJWFuJzo6IGF1dGhvciBuYW1lCisnJWFOJzo6IGF1dGhvciBuYW1lIChyZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUgbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0KKwlvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKKyclYWUnOjogYXV0aG9yIGVtYWlsCisnJWFFJzo6IGF1dGhvciBlbWFpbCAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdCisJb3IgbGlua2dpdDpnaXQtYmxhbWVbMV0pCisnJWFsJzo6IGF1dGhvciBlbWFpbCBsb2NhbC1wYXJ0ICh0aGUgcGFydCBiZWZvcmUgdGhlICdAJyBzaWduKQorJyVhTCc6OiBhdXRob3IgbG9jYWwtcGFydCAoc2VlICclYWwnKSByZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUKKwlsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKKyclYWQnOjogYXV0aG9yIGRhdGUgKGZvcm1hdCByZXNwZWN0cyAtLWRhdGU9IG9wdGlvbikKKyclYUQnOjogYXV0aG9yIGRhdGUsIFJGQzI4MjIgc3R5bGUKKyclYXInOjogYXV0aG9yIGRhdGUsIHJlbGF0aXZlCisnJWF0Jzo6IGF1dGhvciBkYXRlLCBVTklYIHRpbWVzdGFtcAorJyVhaSc6OiBhdXRob3IgZGF0ZSwgSVNPIDg2MDEtbGlrZSBmb3JtYXQKKyclYUknOjogYXV0aG9yIGRhdGUsIHN0cmljdCBJU08gODYwMSBmb3JtYXQKKyclYXMnOjogYXV0aG9yIGRhdGUsIHNob3J0IGZvcm1hdCAoYFlZWVktTU0tRERgKQorJyVjbic6OiBjb21taXR0ZXIgbmFtZQorJyVjTic6OiBjb21taXR0ZXIgbmFtZSAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlCisJbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0gb3IgbGlua2dpdDpnaXQtYmxhbWVbMV0pCisnJWNlJzo6IGNvbW1pdHRlciBlbWFpbAorJyVjRSc6OiBjb21taXR0ZXIgZW1haWwgKHJlc3BlY3RpbmcgLm1haWxtYXAsIHNlZQorCWxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIG9yIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdKQorJyVjbCc6OiBhdXRob3IgZW1haWwgbG9jYWwtcGFydCAodGhlIHBhcnQgYmVmb3JlIHRoZSAnQCcgc2lnbikKKyclY0wnOjogYXV0aG9yIGxvY2FsLXBhcnQgKHNlZSAnJWNsJykgcmVzcGVjdGluZyAubWFpbG1hcCwgc2VlCisJbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0gb3IgbGlua2dpdDpnaXQtYmxhbWVbMV0pCisnJWNkJzo6IGNvbW1pdHRlciBkYXRlIChmb3JtYXQgcmVzcGVjdHMgLS1kYXRlPSBvcHRpb24pCisnJWNEJzo6IGNvbW1pdHRlciBkYXRlLCBSRkMyODIyIHN0eWxlCisnJWNyJzo6IGNvbW1pdHRlciBkYXRlLCByZWxhdGl2ZQorJyVjdCc6OiBjb21taXR0ZXIgZGF0ZSwgVU5JWCB0aW1lc3RhbXAKKyclY2knOjogY29tbWl0dGVyIGRhdGUsIElTTyA4NjAxLWxpa2UgZm9ybWF0CisnJWNJJzo6IGNvbW1pdHRlciBkYXRlLCBzdHJpY3QgSVNPIDg2MDEgZm9ybWF0CisnJWNzJzo6IGNvbW1pdHRlciBkYXRlLCBzaG9ydCBmb3JtYXQgKGBZWVlZLU1NLUREYCkKKyclZCc6OiByZWYgbmFtZXMsIGxpa2UgdGhlIC0tZGVjb3JhdGUgb3B0aW9uIG9mIGxpbmtnaXQ6Z2l0LWxvZ1sxXQorJyVEJzo6IHJlZiBuYW1lcyB3aXRob3V0IHRoZSAiICgiLCAiKSIgd3JhcHBpbmcuCisnJVMnOjogcmVmIG5hbWUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSBieSB3aGljaCB0aGUgY29tbWl0IHdhcyByZWFjaGVkCisgICAgICAgKGxpa2UgYGdpdCBsb2cgLS1zb3VyY2VgKSwgb25seSB3b3JrcyB3aXRoIGBnaXQgbG9nYAorJyVlJzo6IGVuY29kaW5nCisnJXMnOjogc3ViamVjdAorJyVmJzo6IHNhbml0aXplZCBzdWJqZWN0IGxpbmUsIHN1aXRhYmxlIGZvciBhIGZpbGVuYW1lCisnJWInOjogYm9keQorJyVCJzo6IHJhdyBib2R5ICh1bndyYXBwZWQgc3ViamVjdCBhbmQgYm9keSkKK2lmbmRlZjo6Z2l0LXJldi1saXN0W10KKyclTic6OiBjb21taXQgbm90ZXMKK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorJyVHRyc6OiByYXcgdmVyaWZpY2F0aW9uIG1lc3NhZ2UgZnJvbSBHUEcgZm9yIGEgc2lnbmVkIGNvbW1pdAorJyVHPyc6OiBzaG93ICJHIiBmb3IgYSBnb29kICh2YWxpZCkgc2lnbmF0dXJlLAorCSJCIiBmb3IgYSBiYWQgc2lnbmF0dXJlLAorCSJVIiBmb3IgYSBnb29kIHNpZ25hdHVyZSB3aXRoIHVua25vd24gdmFsaWRpdHksCisJIlgiIGZvciBhIGdvb2Qgc2lnbmF0dXJlIHRoYXQgaGFzIGV4cGlyZWQsCisJIlkiIGZvciBhIGdvb2Qgc2lnbmF0dXJlIG1hZGUgYnkgYW4gZXhwaXJlZCBrZXksCisJIlIiIGZvciBhIGdvb2Qgc2lnbmF0dXJlIG1hZGUgYnkgYSByZXZva2VkIGtleSwKKwkiRSIgaWYgdGhlIHNpZ25hdHVyZSBjYW5ub3QgYmUgY2hlY2tlZCAoZS5nLiBtaXNzaW5nIGtleSkKKwlhbmQgIk4iIGZvciBubyBzaWduYXR1cmUKKyclR1MnOjogc2hvdyB0aGUgbmFtZSBvZiB0aGUgc2lnbmVyIGZvciBhIHNpZ25lZCBjb21taXQKKyclR0snOjogc2hvdyB0aGUga2V5IHVzZWQgdG8gc2lnbiBhIHNpZ25lZCBjb21taXQKKyclR0YnOjogc2hvdyB0aGUgZmluZ2VycHJpbnQgb2YgdGhlIGtleSB1c2VkIHRvIHNpZ24gYSBzaWduZWQgY29tbWl0CisnJUdQJzo6IHNob3cgdGhlIGZpbmdlcnByaW50IG9mIHRoZSBwcmltYXJ5IGtleSB3aG9zZSBzdWJrZXkgd2FzIHVzZWQKKwl0byBzaWduIGEgc2lnbmVkIGNvbW1pdAorJyVHVCc6OiBzaG93IHRoZSB0cnVzdCBsZXZlbCBmb3IgdGhlIGtleSB1c2VkIHRvIHNpZ24gYSBzaWduZWQgY29tbWl0CisnJWdEJzo6IHJlZmxvZyBzZWxlY3RvciwgZS5nLiwgYHJlZnMvc3Rhc2hAezF9YCBvciBgcmVmcy9zdGFzaEB7MgorCW1pbnV0ZXMgYWdvfWA7IHRoZSBmb3JtYXQgZm9sbG93cyB0aGUgcnVsZXMgZGVzY3JpYmVkIGZvciB0aGUKKwlgLWdgIG9wdGlvbi4gVGhlIHBvcnRpb24gYmVmb3JlIHRoZSBgQGAgaXMgdGhlIHJlZm5hbWUgYXMKKwlnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIChzbyBgZ2l0IGxvZyAtZyByZWZzL2hlYWRzL21hc3RlcmAKKwl3b3VsZCB5aWVsZCBgcmVmcy9oZWFkcy9tYXN0ZXJAezB9YCkuCisnJWdkJzo6IHNob3J0ZW5lZCByZWZsb2cgc2VsZWN0b3I7IHNhbWUgYXMgYCVnRGAsIGJ1dCB0aGUgcmVmbmFtZQorCXBvcnRpb24gaXMgc2hvcnRlbmVkIGZvciBodW1hbiByZWFkYWJpbGl0eSAoc28KKwlgcmVmcy9oZWFkcy9tYXN0ZXJgIGJlY29tZXMganVzdCBgbWFzdGVyYCkuCisnJWduJzo6IHJlZmxvZyBpZGVudGl0eSBuYW1lCisnJWdOJzo6IHJlZmxvZyBpZGVudGl0eSBuYW1lIChyZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUKKwlsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKKyclZ2UnOjogcmVmbG9nIGlkZW50aXR5IGVtYWlsCisnJWdFJzo6IHJlZmxvZyBpZGVudGl0eSBlbWFpbCAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlCisJbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0gb3IgbGlua2dpdDpnaXQtYmxhbWVbMV0pCisnJWdzJzo6IHJlZmxvZyBzdWJqZWN0CisnJSh0cmFpbGVyc1s6b3B0aW9uc10pJzo6IGRpc3BsYXkgdGhlIHRyYWlsZXJzIG9mIHRoZSBib2R5IGFzCisJCQkgIGludGVycHJldGVkIGJ5CisJCQkgIGxpbmtnaXQ6Z2l0LWludGVycHJldC10cmFpbGVyc1sxXS4gVGhlCisJCQkgIGB0cmFpbGVyc2Agc3RyaW5nIG1heSBiZSBmb2xsb3dlZCBieSBhIGNvbG9uCisJCQkgIGFuZCB6ZXJvIG9yIG1vcmUgY29tbWEtc2VwYXJhdGVkIG9wdGlvbnM6CisqKiAna2V5PTxLPic6IG9ubHkgc2hvdyB0cmFpbGVycyB3aXRoIHNwZWNpZmllZCBrZXkuIE1hdGNoaW5nIGlzIGRvbmUKKyAgIGNhc2UtaW5zZW5zaXRpdmVseSBhbmQgdHJhaWxpbmcgY29sb24gaXMgb3B0aW9uYWwuIElmIG9wdGlvbiBpcworICAgZ2l2ZW4gbXVsdGlwbGUgdGltZXMgdHJhaWxlciBsaW5lcyBtYXRjaGluZyBhbnkgb2YgdGhlIGtleXMgYXJlCisgICBzaG93bi4gVGhpcyBvcHRpb24gYXV0b21hdGljYWxseSBlbmFibGVzIHRoZSBgb25seWAgb3B0aW9uIHNvIHRoYXQKKyAgIG5vbi10cmFpbGVyIGxpbmVzIGluIHRoZSB0cmFpbGVyIGJsb2NrIGFyZSBoaWRkZW4uIElmIHRoYXQgaXMgbm90CisgICBkZXNpcmVkIGl0IGNhbiBiZSBkaXNhYmxlZCB3aXRoIGBvbmx5PWZhbHNlYC4gIEUuZy4sCisgICBgJSh0cmFpbGVyczprZXk9UmV2aWV3ZWQtYnkpYCBzaG93cyB0cmFpbGVyIGxpbmVzIHdpdGgga2V5CisgICBgUmV2aWV3ZWQtYnlgLgorKiogJ29ubHlbPXZhbF0nOiBzZWxlY3Qgd2hldGhlciBub24tdHJhaWxlciBsaW5lcyBmcm9tIHRoZSB0cmFpbGVyCisgICBibG9jayBzaG91bGQgYmUgaW5jbHVkZWQuIFRoZSBgb25seWAga2V5d29yZCBtYXkgb3B0aW9uYWxseSBiZQorICAgZm9sbG93ZWQgYnkgYW4gZXF1YWwgc2lnbiBhbmQgb25lIG9mIGB0cnVlYCwgYG9uYCwgYHllc2AgdG8gb21pdCBvcgorICAgYGZhbHNlYCwgYG9mZmAsIGBub2AgdG8gc2hvdyB0aGUgbm9uLXRyYWlsZXIgbGluZXMuIElmIG9wdGlvbiBpcworICAgZ2l2ZW4gd2l0aG91dCB2YWx1ZSBpdCBpcyBlbmFibGVkLiBJZiBnaXZlbiBtdWx0aXBsZSB0aW1lcyB0aGUgbGFzdAorICAgdmFsdWUgaXMgdXNlZC4KKyoqICdzZXBhcmF0b3I9PFNFUD4nOiBzcGVjaWZ5IGEgc2VwYXJhdG9yIGluc2VydGVkIGJldHdlZW4gdHJhaWxlcgorICAgbGluZXMuIFdoZW4gdGhpcyBvcHRpb24gaXMgbm90IGdpdmVuIGVhY2ggdHJhaWxlciBsaW5lIGlzCisgICB0ZXJtaW5hdGVkIHdpdGggYSBsaW5lIGZlZWQgY2hhcmFjdGVyLiBUaGUgc3RyaW5nIFNFUCBtYXkgY29udGFpbgorICAgdGhlIGxpdGVyYWwgZm9ybWF0dGluZyBjb2RlcyBkZXNjcmliZWQgYWJvdmUuIFRvIHVzZSBjb21tYSBhcworICAgc2VwYXJhdG9yIG9uZSBtdXN0IHVzZSBgJXgyQ2AgYXMgaXQgd291bGQgb3RoZXJ3aXNlIGJlIHBhcnNlZCBhcworICAgbmV4dCBvcHRpb24uIElmIHNlcGFyYXRvciBvcHRpb24gaXMgZ2l2ZW4gbXVsdGlwbGUgdGltZXMgb25seSB0aGUKKyAgIGxhc3Qgb25lIGlzIHVzZWQuIEUuZy4sIGAlKHRyYWlsZXJzOmtleT1UaWNrZXQsc2VwYXJhdG9yPSV4MkMgKWAKKyAgIHNob3dzIGFsbCB0cmFpbGVyIGxpbmVzIHdob3NlIGtleSBpcyAiVGlja2V0IiBzZXBhcmF0ZWQgYnkgYSBjb21tYQorICAgYW5kIGEgc3BhY2UuCisqKiAndW5mb2xkWz12YWxdJzogbWFrZSBpdCBiZWhhdmUgYXMgaWYgaW50ZXJwcmV0LXRyYWlsZXIncyBgLS11bmZvbGRgCisgICBvcHRpb24gd2FzIGdpdmVuLiBJbiBzYW1lIHdheSBhcyB0byBmb3IgYG9ubHlgIGl0IGNhbiBiZSBmb2xsb3dlZAorICAgYnkgYW4gZXF1YWwgc2lnbiBhbmQgZXhwbGljaXQgdmFsdWUuIEUuZy4sCisgICBgJSh0cmFpbGVyczpvbmx5LHVuZm9sZD10cnVlKWAgdW5mb2xkcyBhbmQgc2hvd3MgYWxsIHRyYWlsZXIgbGluZXMuCisqKiAndmFsdWVvbmx5Wz12YWxdJzogc2tpcCBvdmVyIHRoZSBrZXkgcGFydCBvZiB0aGUgdHJhaWxlciBsaW5lIGFuZCBvbmx5CisgICBzaG93IHRoZSB2YWx1ZSBwYXJ0LiBBbHNvIHRoaXMgb3B0aW9uYWxseSBhbGxvd3MgZXhwbGljaXQgdmFsdWUuCisKK05PVEU6IFNvbWUgcGxhY2Vob2xkZXJzIG1heSBkZXBlbmQgb24gb3RoZXIgb3B0aW9ucyBnaXZlbiB0byB0aGUKK3JldmlzaW9uIHRyYXZlcnNhbCBlbmdpbmUuIEZvciBleGFtcGxlLCB0aGUgYCVnKmAgcmVmbG9nIG9wdGlvbnMgd2lsbAoraW5zZXJ0IGFuIGVtcHR5IHN0cmluZyB1bmxlc3Mgd2UgYXJlIHRyYXZlcnNpbmcgcmVmbG9nIGVudHJpZXMgKGUuZy4sIGJ5CitgZ2l0IGxvZyAtZ2ApLiBUaGUgYCVkYCBhbmQgYCVEYCBwbGFjZWhvbGRlcnMgd2lsbCB1c2UgdGhlICJzaG9ydCIKK2RlY29yYXRpb24gZm9ybWF0IGlmIGAtLWRlY29yYXRlYCB3YXMgbm90IGFscmVhZHkgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQKK2xpbmUuCisKK0lmIHlvdSBhZGQgYSBgK2AgKHBsdXMgc2lnbikgYWZ0ZXIgJyUnIG9mIGEgcGxhY2Vob2xkZXIsIGEgbGluZS1mZWVkCitpcyBpbnNlcnRlZCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGV4cGFuc2lvbiBpZiBhbmQgb25seSBpZiB0aGUKK3BsYWNlaG9sZGVyIGV4cGFuZHMgdG8gYSBub24tZW1wdHkgc3RyaW5nLgorCitJZiB5b3UgYWRkIGEgYC1gIChtaW51cyBzaWduKSBhZnRlciAnJScgb2YgYSBwbGFjZWhvbGRlciwgYWxsIGNvbnNlY3V0aXZlCitsaW5lLWZlZWRzIGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGUgZXhwYW5zaW9uIGFyZSBkZWxldGVkIGlmIGFuZCBvbmx5IGlmIHRoZQorcGxhY2Vob2xkZXIgZXhwYW5kcyB0byBhbiBlbXB0eSBzdHJpbmcuCisKK0lmIHlvdSBhZGQgYSBgIGAgKHNwYWNlKSBhZnRlciAnJScgb2YgYSBwbGFjZWhvbGRlciwgYSBzcGFjZQoraXMgaW5zZXJ0ZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBleHBhbnNpb24gaWYgYW5kIG9ubHkgaWYgdGhlCitwbGFjZWhvbGRlciBleHBhbmRzIHRvIGEgbm9uLWVtcHR5IHN0cmluZy4KKworKiAndGZvcm1hdDonCisrCitUaGUgJ3Rmb3JtYXQ6JyBmb3JtYXQgd29ya3MgZXhhY3RseSBsaWtlICdmb3JtYXQ6JywgZXhjZXB0IHRoYXQgaXQKK3Byb3ZpZGVzICJ0ZXJtaW5hdG9yIiBzZW1hbnRpY3MgaW5zdGVhZCBvZiAic2VwYXJhdG9yIiBzZW1hbnRpY3MuIEluCitvdGhlciB3b3JkcywgZWFjaCBjb21taXQgaGFzIHRoZSBtZXNzYWdlIHRlcm1pbmF0b3IgY2hhcmFjdGVyICh1c3VhbGx5IGEKK25ld2xpbmUpIGFwcGVuZGVkLCByYXRoZXIgdGhhbiBhIHNlcGFyYXRvciBwbGFjZWQgYmV0d2VlbiBlbnRyaWVzLgorVGhpcyBtZWFucyB0aGF0IHRoZSBmaW5hbCBlbnRyeSBvZiBhIHNpbmdsZS1saW5lIGZvcm1hdCB3aWxsIGJlIHByb3Blcmx5Cit0ZXJtaW5hdGVkIHdpdGggYSBuZXcgbGluZSwganVzdCBhcyB0aGUgIm9uZWxpbmUiIGZvcm1hdCBkb2VzLgorRm9yIGV4YW1wbGU6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtMiAtLXByZXR0eT1mb3JtYXQ6JWggNGRhNDViZWYgXAorICB8IHBlcmwgLXBlICckXyAuPSAiIC0tIE5PIE5FV0xJTkVcbiIgdW5sZXNzIC9cbi8nCis0ZGE0NWJlCis3MTM0OTczIC0tIE5PIE5FV0xJTkUKKworJCBnaXQgbG9nIC0yIC0tcHJldHR5PXRmb3JtYXQ6JWggNGRhNDViZWYgXAorICB8IHBlcmwgLXBlICckXyAuPSAiIC0tIE5PIE5FV0xJTkVcbiIgdW5sZXNzIC9cbi8nCis0ZGE0NWJlCis3MTM0OTczCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK0luIGFkZGl0aW9uLCBhbnkgdW5yZWNvZ25pemVkIHN0cmluZyB0aGF0IGhhcyBhIGAlYCBpbiBpdCBpcyBpbnRlcnByZXRlZAorYXMgaWYgaXQgaGFzIGB0Zm9ybWF0OmAgaW4gZnJvbnQgb2YgaXQuICBGb3IgZXhhbXBsZSwgdGhlc2UgdHdvIGFyZQorZXF1aXZhbGVudDoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC0yIC0tcHJldHR5PXRmb3JtYXQ6JWggNGRhNDViZWYKKyQgZ2l0IGxvZyAtMiAtLXByZXR0eT0laCA0ZGE0NWJlZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ByZXR0eS1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vcHJldHR5LW9wdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNmRhNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ByZXR0eS1vcHRpb25zLnR4dApAQCAtMCwwICsxLDk2IEBACistLXByZXR0eVs9PGZvcm1hdD5dOjoKKy0tZm9ybWF0PTxmb3JtYXQ+OjoKKworCVByZXR0eS1wcmludCB0aGUgY29udGVudHMgb2YgdGhlIGNvbW1pdCBsb2dzIGluIGEgZ2l2ZW4gZm9ybWF0LAorCXdoZXJlICc8Zm9ybWF0PicgY2FuIGJlIG9uZSBvZiAnb25lbGluZScsICdzaG9ydCcsICdtZWRpdW0nLAorCSdmdWxsJywgJ2Z1bGxlcicsICdyZWZlcmVuY2UnLCAnZW1haWwnLCAncmF3JywgJ2Zvcm1hdDo8c3RyaW5nPicKKwlhbmQgJ3Rmb3JtYXQ6PHN0cmluZz4nLiAgV2hlbiAnPGZvcm1hdD4nIGlzIG5vbmUgb2YgdGhlIGFib3ZlLAorCWFuZCBoYXMgJyVwbGFjZWhvbGRlcicgaW4gaXQsIGl0IGFjdHMgYXMgaWYKKwknLS1wcmV0dHk9dGZvcm1hdDo8Zm9ybWF0Picgd2VyZSBnaXZlbi4KKysKK1NlZSB0aGUgIlBSRVRUWSBGT1JNQVRTIiBzZWN0aW9uIGZvciBzb21lIGFkZGl0aW9uYWwgZGV0YWlscyBmb3IgZWFjaAorZm9ybWF0LiAgV2hlbiAnPTxmb3JtYXQ+JyBwYXJ0IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICdtZWRpdW0nLgorKworTm90ZTogeW91IGNhbiBzcGVjaWZ5IHRoZSBkZWZhdWx0IHByZXR0eSBmb3JtYXQgaW4gdGhlIHJlcG9zaXRvcnkKK2NvbmZpZ3VyYXRpb24gKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCistLWFiYnJldi1jb21taXQ6OgorCUluc3RlYWQgb2Ygc2hvd2luZyB0aGUgZnVsbCA0MC1ieXRlIGhleGFkZWNpbWFsIGNvbW1pdCBvYmplY3QKKwluYW1lLCBzaG93IG9ubHkgYSBwYXJ0aWFsIHByZWZpeC4gIE5vbiBkZWZhdWx0IG51bWJlciBvZgorCWRpZ2l0cyBjYW4gYmUgc3BlY2lmaWVkIHdpdGggIi0tYWJicmV2PTxuPiIgKHdoaWNoIGFsc28gbW9kaWZpZXMKKwlkaWZmIG91dHB1dCwgaWYgaXQgaXMgZGlzcGxheWVkKS4KKysKK1RoaXMgc2hvdWxkIG1ha2UgIi0tcHJldHR5PW9uZWxpbmUiIGEgd2hvbGUgbG90IG1vcmUgcmVhZGFibGUgZm9yCitwZW9wbGUgdXNpbmcgODAtY29sdW1uIHRlcm1pbmFscy4KKworLS1uby1hYmJyZXYtY29tbWl0OjoKKwlTaG93IHRoZSBmdWxsIDQwLWJ5dGUgaGV4YWRlY2ltYWwgY29tbWl0IG9iamVjdCBuYW1lLiBUaGlzIG5lZ2F0ZXMKKwlgLS1hYmJyZXYtY29tbWl0YCBhbmQgdGhvc2Ugb3B0aW9ucyB3aGljaCBpbXBseSBpdCBzdWNoIGFzCisJIi0tb25lbGluZSIuIEl0IGFsc28gb3ZlcnJpZGVzIHRoZSBgbG9nLmFiYnJldkNvbW1pdGAgdmFyaWFibGUuCisKKy0tb25lbGluZTo6CisJVGhpcyBpcyBhIHNob3J0aGFuZCBmb3IgIi0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0IgorCXVzZWQgdG9nZXRoZXIuCisKKy0tZW5jb2Rpbmc9PGVuY29kaW5nPjo6CisJVGhlIGNvbW1pdCBvYmplY3RzIHJlY29yZCB0aGUgZW5jb2RpbmcgdXNlZCBmb3IgdGhlIGxvZyBtZXNzYWdlCisJaW4gdGhlaXIgZW5jb2RpbmcgaGVhZGVyOyB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byB0ZWxsIHRoZQorCWNvbW1hbmQgdG8gcmUtY29kZSB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGluIHRoZSBlbmNvZGluZworCXByZWZlcnJlZCBieSB0aGUgdXNlci4gIEZvciBub24gcGx1bWJpbmcgY29tbWFuZHMgdGhpcworCWRlZmF1bHRzIHRvIFVURi04LiBOb3RlIHRoYXQgaWYgYW4gb2JqZWN0IGNsYWltcyB0byBiZSBlbmNvZGVkCisJaW4gYFhgIGFuZCB3ZSBhcmUgb3V0cHV0dGluZyBpbiBgWGAsIHdlIHdpbGwgb3V0cHV0IHRoZSBvYmplY3QKKwl2ZXJiYXRpbTsgdGhpcyBtZWFucyB0aGF0IGludmFsaWQgc2VxdWVuY2VzIGluIHRoZSBvcmlnaW5hbAorCWNvbW1pdCBtYXkgYmUgY29waWVkIHRvIHRoZSBvdXRwdXQuCisKKy0tZXhwYW5kLXRhYnM9PG4+OjoKKy0tZXhwYW5kLXRhYnM6OgorLS1uby1leHBhbmQtdGFiczo6CisJUGVyZm9ybSBhIHRhYiBleHBhbnNpb24gKHJlcGxhY2UgZWFjaCB0YWIgd2l0aCBlbm91Z2ggc3BhY2VzCisJdG8gZmlsbCB0byB0aGUgbmV4dCBkaXNwbGF5IGNvbHVtbiB0aGF0IGlzIG11bHRpcGxlIG9mICc8bj4nKQorCWluIHRoZSBsb2cgbWVzc2FnZSBiZWZvcmUgc2hvd2luZyBpdCBpbiB0aGUgb3V0cHV0LgorCWAtLWV4cGFuZC10YWJzYCBpcyBhIHNob3J0LWhhbmQgZm9yIGAtLWV4cGFuZC10YWJzPThgLCBhbmQKKwlgLS1uby1leHBhbmQtdGFic2AgaXMgYSBzaG9ydC1oYW5kIGZvciBgLS1leHBhbmQtdGFicz0wYCwKKwl3aGljaCBkaXNhYmxlcyB0YWIgZXhwYW5zaW9uLgorKworQnkgZGVmYXVsdCwgdGFicyBhcmUgZXhwYW5kZWQgaW4gcHJldHR5IGZvcm1hdHMgdGhhdCBpbmRlbnQgdGhlIGxvZworbWVzc2FnZSBieSA0IHNwYWNlcyAoaS5lLiAgJ21lZGl1bScsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCAnZnVsbCcsCithbmQgJ2Z1bGxlcicpLgorCitpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCistLW5vdGVzWz08cmVmPl06OgorCVNob3cgdGhlIG5vdGVzIChzZWUgbGlua2dpdDpnaXQtbm90ZXNbMV0pIHRoYXQgYW5ub3RhdGUgdGhlCisJY29tbWl0LCB3aGVuIHNob3dpbmcgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKKwlmb3IgYGdpdCBsb2dgLCBgZ2l0IHNob3dgIGFuZCBgZ2l0IHdoYXRjaGFuZ2VkYCBjb21tYW5kcyB3aGVuCisJdGhlcmUgaXMgbm8gYC0tcHJldHR5YCwgYC0tZm9ybWF0YCwgb3IgYC0tb25lbGluZWAgb3B0aW9uIGdpdmVuCisJb24gdGhlIGNvbW1hbmQgbGluZS4KKysKK0J5IGRlZmF1bHQsIHRoZSBub3RlcyBzaG93biBhcmUgZnJvbSB0aGUgbm90ZXMgcmVmcyBsaXN0ZWQgaW4gdGhlCitgY29yZS5ub3Rlc1JlZmAgYW5kIGBub3Rlcy5kaXNwbGF5UmVmYCB2YXJpYWJsZXMgKG9yIGNvcnJlc3BvbmRpbmcKK2Vudmlyb25tZW50IG92ZXJyaWRlcykuIFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIG1vcmUgZGV0YWlscy4KKysKK1dpdGggYW4gb3B0aW9uYWwgJzxyZWY+JyBhcmd1bWVudCwgdXNlIHRoZSByZWYgdG8gZmluZCB0aGUgbm90ZXMKK3RvIGRpc3BsYXkuICBUaGUgcmVmIGNhbiBzcGVjaWZ5IHRoZSBmdWxsIHJlZm5hbWUgd2hlbiBpdCBiZWdpbnMKK3dpdGggYHJlZnMvbm90ZXMvYDsgd2hlbiBpdCBiZWdpbnMgd2l0aCBgbm90ZXMvYCwgYHJlZnMvYCBhbmQgb3RoZXJ3aXNlCitgcmVmcy9ub3Rlcy9gIGlzIHByZWZpeGVkIHRvIGZvcm0gYSBmdWxsIG5hbWUgb2YgdGhlIHJlZi4KKysKK011bHRpcGxlIC0tbm90ZXMgb3B0aW9ucyBjYW4gYmUgY29tYmluZWQgdG8gY29udHJvbCB3aGljaCBub3RlcyBhcmUKK2JlaW5nIGRpc3BsYXllZC4gRXhhbXBsZXM6ICItLW5vdGVzPWZvbyIgd2lsbCBzaG93IG9ubHkgbm90ZXMgZnJvbQorInJlZnMvbm90ZXMvZm9vIjsgIi0tbm90ZXM9Zm9vIC0tbm90ZXMiIHdpbGwgc2hvdyBib3RoIG5vdGVzIGZyb20KKyJyZWZzL25vdGVzL2ZvbyIgYW5kIGZyb20gdGhlIGRlZmF1bHQgbm90ZXMgcmVmKHMpLgorCistLW5vLW5vdGVzOjoKKwlEbyBub3Qgc2hvdyBub3Rlcy4gVGhpcyBuZWdhdGVzIHRoZSBhYm92ZSBgLS1ub3Rlc2Agb3B0aW9uLCBieQorCXJlc2V0dGluZyB0aGUgbGlzdCBvZiBub3RlcyByZWZzIGZyb20gd2hpY2ggbm90ZXMgYXJlIHNob3duLgorCU9wdGlvbnMgYXJlIHBhcnNlZCBpbiB0aGUgb3JkZXIgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgc28gZS5nLgorCSItLW5vdGVzIC0tbm90ZXM9Zm9vIC0tbm8tbm90ZXMgLS1ub3Rlcz1iYXIiIHdpbGwgb25seSBzaG93IG5vdGVzCisJZnJvbSAicmVmcy9ub3Rlcy9iYXIiLgorCistLXNob3ctbm90ZXNbPTxyZWY+XTo6CistLVtuby1dc3RhbmRhcmQtbm90ZXM6OgorCVRoZXNlIG9wdGlvbnMgYXJlIGRlcHJlY2F0ZWQuIFVzZSB0aGUgYWJvdmUgLS1ub3Rlcy8tLW5vLW5vdGVzCisJb3B0aW9ucyBpbnN0ZWFkLgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCisKKy0tc2hvdy1zaWduYXR1cmU6OgorCUNoZWNrIHRoZSB2YWxpZGl0eSBvZiBhIHNpZ25lZCBjb21taXQgb2JqZWN0IGJ5IHBhc3NpbmcgdGhlIHNpZ25hdHVyZQorCXRvIGBncGcgLS12ZXJpZnlgIGFuZCBzaG93IHRoZSBvdXRwdXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3B1bGwtZmV0Y2gtcGFyYW0udHh0IGIvRG9jdW1lbnRhdGlvbi9wdWxsLWZldGNoLXBhcmFtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWVhODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wdWxsLWZldGNoLXBhcmFtLnR4dApAQCAtMCwwICsxLDEwMyBAQAorPHJlcG9zaXRvcnk+OjoKKwlUaGUgInJlbW90ZSIgcmVwb3NpdG9yeSB0aGF0IGlzIHRoZSBzb3VyY2Ugb2YgYSBmZXRjaAorCW9yIHB1bGwgb3BlcmF0aW9uLiAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGVpdGhlciBhIFVSTAorCShzZWUgdGhlIHNlY3Rpb24gPDxVUkxTLEdJVCBVUkxTPj4gYmVsb3cpIG9yIHRoZSBuYW1lCisJb2YgYSByZW1vdGUgKHNlZSB0aGUgc2VjdGlvbiA8PFJFTU9URVMsUkVNT1RFUz4+IGJlbG93KS4KKworaWZuZGVmOjpnaXQtcHVsbFtdCis8Z3JvdXA+OjoKKwlBIG5hbWUgcmVmZXJyaW5nIHRvIGEgbGlzdCBvZiByZXBvc2l0b3JpZXMgYXMgdGhlIHZhbHVlCisJb2YgcmVtb3Rlcy48Z3JvdXA+IGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisJKFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorZW5kaWY6OmdpdC1wdWxsW10KKworPHJlZnNwZWM+OjoKKwlTcGVjaWZpZXMgd2hpY2ggcmVmcyB0byBmZXRjaCBhbmQgd2hpY2ggbG9jYWwgcmVmcyB0byB1cGRhdGUuCisJV2hlbiBubyA8cmVmc3BlYz5zIGFwcGVhciBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGUgcmVmcyB0byBmZXRjaAorCWFyZSByZWFkIGZyb20gYHJlbW90ZS48cmVwb3NpdG9yeT4uZmV0Y2hgIHZhcmlhYmxlcyBpbnN0ZWFkCitpZm5kZWY6OmdpdC1wdWxsW10KKwkoc2VlIDw8Q1JUQixDT05GSUdVUkVEIFJFTU9URS1UUkFDS0lORyBCUkFOQ0hFUz4+IGJlbG93KS4KK2VuZGlmOjpnaXQtcHVsbFtdCitpZmRlZjo6Z2l0LXB1bGxbXQorCShzZWUgdGhlIHNlY3Rpb24gIkNPTkZJR1VSRUQgUkVNT1RFLVRSQUNLSU5HIEJSQU5DSEVTIgorCWluIGxpbmtnaXQ6Z2l0LWZldGNoWzFdKS4KK2VuZGlmOjpnaXQtcHVsbFtdCisrCitUaGUgZm9ybWF0IG9mIGEgPHJlZnNwZWM+IHBhcmFtZXRlciBpcyBhbiBvcHRpb25hbCBwbHVzCitgK2AsIGZvbGxvd2VkIGJ5IHRoZSBzb3VyY2UgPHNyYz4sIGZvbGxvd2VkCitieSBhIGNvbG9uIGA6YCwgZm9sbG93ZWQgYnkgdGhlIGRlc3RpbmF0aW9uIHJlZiA8ZHN0Pi4KK1RoZSBjb2xvbiBjYW4gYmUgb21pdHRlZCB3aGVuIDxkc3Q+IGlzIGVtcHR5LiAgPHNyYz4gaXMKK3R5cGljYWxseSBhIHJlZiwgYnV0IGl0IGNhbiBhbHNvIGJlIGEgZnVsbHkgc3BlbGxlZCBoZXggb2JqZWN0CituYW1lLgorKworYHRhZyA8dGFnPmAgbWVhbnMgdGhlIHNhbWUgYXMgYHJlZnMvdGFncy88dGFnPjpyZWZzL3RhZ3MvPHRhZz5gOworaXQgcmVxdWVzdHMgZmV0Y2hpbmcgZXZlcnl0aGluZyB1cCB0byB0aGUgZ2l2ZW4gdGFnLgorKworVGhlIHJlbW90ZSByZWYgdGhhdCBtYXRjaGVzIDxzcmM+CitpcyBmZXRjaGVkLCBhbmQgaWYgPGRzdD4gaXMgbm90IGFuIGVtcHR5IHN0cmluZywgYW4gYXR0ZW1wdAoraXMgbWFkZSB0byB1cGRhdGUgdGhlIGxvY2FsIHJlZiB0aGF0IG1hdGNoZXMgaXQuCisrCitXaGV0aGVyIHRoYXQgdXBkYXRlIGlzIGFsbG93ZWQgd2l0aG91dCBgLS1mb3JjZWAgZGVwZW5kcyBvbiB0aGUgcmVmCituYW1lc3BhY2UgaXQncyBiZWluZyBmZXRjaGVkIHRvLCB0aGUgdHlwZSBvZiBvYmplY3QgYmVpbmcgZmV0Y2hlZCwgYW5kCit3aGV0aGVyIHRoZSB1cGRhdGUgaXMgY29uc2lkZXJlZCB0byBiZSBhIGZhc3QtZm9yd2FyZC4gR2VuZXJhbGx5LCB0aGUKK3NhbWUgcnVsZXMgYXBwbHkgZm9yIGZldGNoaW5nIGFzIHdoZW4gcHVzaGluZywgc2VlIHRoZSBgPHJlZnNwZWM+Li4uYAorc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1wdXNoWzFdIGZvciB3aGF0IHRob3NlIGFyZS4gRXhjZXB0aW9ucyB0byB0aG9zZQorcnVsZXMgcGFydGljdWxhciB0byAnZ2l0IGZldGNoJyBhcmUgbm90ZWQgYmVsb3cuCisrCitVbnRpbCBHaXQgdmVyc2lvbiAyLjIwLCBhbmQgdW5saWtlIHdoZW4gcHVzaGluZyB3aXRoCitsaW5rZ2l0OmdpdC1wdXNoWzFdLCBhbnkgdXBkYXRlcyB0byBgcmVmcy90YWdzLypgIHdvdWxkIGJlIGFjY2VwdGVkCit3aXRob3V0IGArYCBpbiB0aGUgcmVmc3BlYyAob3IgYC0tZm9yY2VgKS4gV2hlbiBmZXRjaGluZywgd2UgcHJvbWlzY3VvdXNseQorY29uc2lkZXJlZCBhbGwgdGFnIHVwZGF0ZXMgZnJvbSBhIHJlbW90ZSB0byBiZSBmb3JjZWQgZmV0Y2hlcy4gIFNpbmNlCitHaXQgdmVyc2lvbiAyLjIwLCBmZXRjaGluZyB0byB1cGRhdGUgYHJlZnMvdGFncy8qYCB3b3JrcyB0aGUgc2FtZSB3YXkKK2FzIHdoZW4gcHVzaGluZy4gSS5lLiBhbnkgdXBkYXRlcyB3aWxsIGJlIHJlamVjdGVkIHdpdGhvdXQgYCtgIGluIHRoZQorcmVmc3BlYyAob3IgYC0tZm9yY2VgKS4KKysKK1VubGlrZSB3aGVuIHB1c2hpbmcgd2l0aCBsaW5rZ2l0OmdpdC1wdXNoWzFdLCBhbnkgdXBkYXRlcyBvdXRzaWRlIG9mCitgcmVmcy97dGFncyxoZWFkc30vKmAgd2lsbCBiZSBhY2NlcHRlZCB3aXRob3V0IGArYCBpbiB0aGUgcmVmc3BlYyAob3IKK2AtLWZvcmNlYCksIHdoZXRoZXIgdGhhdCdzIHN3YXBwaW5nIGUuZy4gYSB0cmVlIG9iamVjdCBmb3IgYSBibG9iLCBvcgorYSBjb21taXQgZm9yIGFub3RoZXIgY29tbWl0IHRoYXQncyBkb2Vzbid0IGhhdmUgdGhlIHByZXZpb3VzIGNvbW1pdCBhcworYW4gYW5jZXN0b3IgZXRjLgorKworVW5saWtlIHdoZW4gcHVzaGluZyB3aXRoIGxpbmtnaXQ6Z2l0LXB1c2hbMV0sIHRoZXJlIGlzIG5vCitjb25maWd1cmF0aW9uIHdoaWNoJ2xsIGFtZW5kIHRoZXNlIHJ1bGVzLCBhbmQgbm90aGluZyBsaWtlIGEKK2BwcmUtZmV0Y2hgIGhvb2sgYW5hbG9nb3VzIHRvIHRoZSBgcHJlLXJlY2VpdmVgIGhvb2suCisrCitBcyB3aXRoIHB1c2hpbmcgd2l0aCBsaW5rZ2l0OmdpdC1wdXNoWzFdLCBhbGwgb2YgdGhlIHJ1bGVzIGRlc2NyaWJlZAorYWJvdmUgYWJvdXQgd2hhdCdzIG5vdCBhbGxvd2VkIGFzIGFuIHVwZGF0ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieQorYWRkaW5nIGFuIHRoZSBvcHRpb25hbCBsZWFkaW5nIGArYCB0byBhIHJlZnNwZWMgKG9yIHVzaW5nIGAtLWZvcmNlYAorY29tbWFuZCBsaW5lIG9wdGlvbikuIFRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGlzIHRoYXQgbm8gYW1vdW50IG9mCitmb3JjaW5nIHdpbGwgbWFrZSB0aGUgYHJlZnMvaGVhZHMvKmAgbmFtZXNwYWNlIGFjY2VwdCBhIG5vbi1jb21taXQKK29iamVjdC4KKysKK1tOT1RFXQorV2hlbiB0aGUgcmVtb3RlIGJyYW5jaCB5b3Ugd2FudCB0byBmZXRjaCBpcyBrbm93biB0bworYmUgcmV3b3VuZCBhbmQgcmViYXNlZCByZWd1bGFybHksIGl0IGlzIGV4cGVjdGVkIHRoYXQKK2l0cyBuZXcgdGlwIHdpbGwgbm90IGJlIGRlc2NlbmRhbnQgb2YgaXRzIHByZXZpb3VzIHRpcAorKGFzIHN0b3JlZCBpbiB5b3VyIHJlbW90ZS10cmFja2luZyBicmFuY2ggdGhlIGxhc3QgdGltZQoreW91IGZldGNoZWQpLiAgWW91IHdvdWxkIHdhbnQKK3RvIHVzZSB0aGUgYCtgIHNpZ24gdG8gaW5kaWNhdGUgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzCit3aWxsIGJlIG5lZWRlZCBmb3Igc3VjaCBicmFuY2hlcy4gIFRoZXJlIGlzIG5vIHdheSB0bworZGV0ZXJtaW5lIG9yIGRlY2xhcmUgdGhhdCBhIGJyYW5jaCB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlCitpbiBhIHJlcG9zaXRvcnkgd2l0aCB0aGlzIGJlaGF2aW9yOyB0aGUgcHVsbGluZyB1c2VyIHNpbXBseQorbXVzdCBrbm93IHRoaXMgaXMgdGhlIGV4cGVjdGVkIHVzYWdlIHBhdHRlcm4gZm9yIGEgYnJhbmNoLgoraWZkZWY6OmdpdC1wdWxsW10KKysKK1tOT1RFXQorVGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gbGlzdGluZyBtdWx0aXBsZSA8cmVmc3BlYz4KK2RpcmVjdGx5IG9uICdnaXQgcHVsbCcgY29tbWFuZCBsaW5lIGFuZCBoYXZpbmcgbXVsdGlwbGUKK2ByZW1vdGUuPHJlcG9zaXRvcnk+LmZldGNoYCBlbnRyaWVzIGluIHlvdXIgY29uZmlndXJhdGlvbgorZm9yIGEgPHJlcG9zaXRvcnk+IGFuZCBydW5uaW5nIGEKKydnaXQgcHVsbCcgY29tbWFuZCB3aXRob3V0IGFueSBleHBsaWNpdCA8cmVmc3BlYz4gcGFyYW1ldGVycy4KKzxyZWZzcGVjPnMgbGlzdGVkIGV4cGxpY2l0bHkgb24gdGhlIGNvbW1hbmQgbGluZSBhcmUgYWx3YXlzCittZXJnZWQgaW50byB0aGUgY3VycmVudCBicmFuY2ggYWZ0ZXIgZmV0Y2hpbmcuICBJbiBvdGhlciB3b3JkcywKK2lmIHlvdSBsaXN0IG1vcmUgdGhhbiBvbmUgcmVtb3RlIHJlZiwgJ2dpdCBwdWxsJyB3aWxsIGNyZWF0ZQorYW4gT2N0b3B1cyBtZXJnZS4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3UgZG8gbm90IGxpc3QgYW55CitleHBsaWNpdCA8cmVmc3BlYz4gcGFyYW1ldGVyIG9uIHRoZSBjb21tYW5kIGxpbmUsICdnaXQgcHVsbCcKK3dpbGwgZmV0Y2ggYWxsIHRoZSA8cmVmc3BlYz5zIGl0IGZpbmRzIGluIHRoZQorYHJlbW90ZS48cmVwb3NpdG9yeT4uZmV0Y2hgIGNvbmZpZ3VyYXRpb24gYW5kIG1lcmdlCitvbmx5IHRoZSBmaXJzdCA8cmVmc3BlYz4gZm91bmQgaW50byB0aGUgY3VycmVudCBicmFuY2guCitUaGlzIGlzIGJlY2F1c2UgbWFraW5nIGFuCitPY3RvcHVzIGZyb20gcmVtb3RlIHJlZnMgaXMgcmFyZWx5IGRvbmUsIHdoaWxlIGtlZXBpbmcgdHJhY2sKK29mIG11bHRpcGxlIHJlbW90ZSBoZWFkcyBpbiBvbmUtZ28gYnkgZmV0Y2hpbmcgbW9yZSB0aGFuIG9uZQoraXMgb2Z0ZW4gdXNlZnVsLgorZW5kaWY6OmdpdC1wdWxsW10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YWQ3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0CkBAIC0wLDAgKzEsMTE2MSBAQAorQ29tbWl0IExpbWl0aW5nCit+fn5+fn5+fn5+fn5+fn4KKworQmVzaWRlcyBzcGVjaWZ5aW5nIGEgcmFuZ2Ugb2YgY29tbWl0cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQgdXNpbmcgdGhlCitzcGVjaWFsIG5vdGF0aW9ucyBleHBsYWluZWQgaW4gdGhlIGRlc2NyaXB0aW9uLCBhZGRpdGlvbmFsIGNvbW1pdAorbGltaXRpbmcgbWF5IGJlIGFwcGxpZWQuCisKK1VzaW5nIG1vcmUgb3B0aW9ucyBnZW5lcmFsbHkgZnVydGhlciBsaW1pdHMgdGhlIG91dHB1dCAoZS5nLgorYC0tc2luY2U9PGRhdGUxPmAgbGltaXRzIHRvIGNvbW1pdHMgbmV3ZXIgdGhhbiBgPGRhdGUxPmAsIGFuZCB1c2luZyBpdAord2l0aCBgLS1ncmVwPTxwYXR0ZXJuPmAgZnVydGhlciBsaW1pdHMgdG8gY29tbWl0cyB3aG9zZSBsb2cgbWVzc2FnZQoraGFzIGEgbGluZSB0aGF0IG1hdGNoZXMgYDxwYXR0ZXJuPmApLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCitOb3RlIHRoYXQgdGhlc2UgYXJlIGFwcGxpZWQgYmVmb3JlIGNvbW1pdAorb3JkZXJpbmcgYW5kIGZvcm1hdHRpbmcgb3B0aW9ucywgc3VjaCBhcyBgLS1yZXZlcnNlYC4KKworLTxudW1iZXI+OjoKKy1uIDxudW1iZXI+OjoKKy0tbWF4LWNvdW50PTxudW1iZXI+OjoKKwlMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgdG8gb3V0cHV0LgorCistLXNraXA9PG51bWJlcj46OgorCVNraXAgJ251bWJlcicgY29tbWl0cyBiZWZvcmUgc3RhcnRpbmcgdG8gc2hvdyB0aGUgY29tbWl0IG91dHB1dC4KKworLS1zaW5jZT08ZGF0ZT46OgorLS1hZnRlcj08ZGF0ZT46OgorCVNob3cgY29tbWl0cyBtb3JlIHJlY2VudCB0aGFuIGEgc3BlY2lmaWMgZGF0ZS4KKworLS11bnRpbD08ZGF0ZT46OgorLS1iZWZvcmU9PGRhdGU+OjoKKwlTaG93IGNvbW1pdHMgb2xkZXIgdGhhbiBhIHNwZWNpZmljIGRhdGUuCisKK2lmZGVmOjpnaXQtcmV2LWxpc3RbXQorLS1tYXgtYWdlPTx0aW1lc3RhbXA+OjoKKy0tbWluLWFnZT08dGltZXN0YW1wPjo6CisJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIHNwZWNpZmllZCB0aW1lIHJhbmdlLgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCisKKy0tYXV0aG9yPTxwYXR0ZXJuPjo6CistLWNvbW1pdHRlcj08cGF0dGVybj46OgorCUxpbWl0IHRoZSBjb21taXRzIG91dHB1dCB0byBvbmVzIHdpdGggYXV0aG9yL2NvbW1pdHRlcgorCWhlYWRlciBsaW5lcyB0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgcGF0dGVybiAocmVndWxhcgorCWV4cHJlc3Npb24pLiAgV2l0aCBtb3JlIHRoYW4gb25lIGAtLWF1dGhvcj08cGF0dGVybj5gLAorCWNvbW1pdHMgd2hvc2UgYXV0aG9yIG1hdGNoZXMgYW55IG9mIHRoZSBnaXZlbiBwYXR0ZXJucyBhcmUKKwljaG9zZW4gKHNpbWlsYXJseSBmb3IgbXVsdGlwbGUgYC0tY29tbWl0dGVyPTxwYXR0ZXJuPmApLgorCistLWdyZXAtcmVmbG9nPTxwYXR0ZXJuPjo6CisJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIG9uZXMgd2l0aCByZWZsb2cgZW50cmllcyB0aGF0CisJbWF0Y2ggdGhlIHNwZWNpZmllZCBwYXR0ZXJuIChyZWd1bGFyIGV4cHJlc3Npb24pLiBXaXRoCisJbW9yZSB0aGFuIG9uZSBgLS1ncmVwLXJlZmxvZ2AsIGNvbW1pdHMgd2hvc2UgcmVmbG9nIG1lc3NhZ2UKKwltYXRjaGVzIGFueSBvZiB0aGUgZ2l2ZW4gcGF0dGVybnMgYXJlIGNob3Nlbi4gIEl0IGlzIGFuCisJZXJyb3IgdG8gdXNlIHRoaXMgb3B0aW9uIHVubGVzcyBgLS13YWxrLXJlZmxvZ3NgIGlzIGluIHVzZS4KKworLS1ncmVwPTxwYXR0ZXJuPjo6CisJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIG9uZXMgd2l0aCBsb2cgbWVzc2FnZSB0aGF0CisJbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHBhdHRlcm4gKHJlZ3VsYXIgZXhwcmVzc2lvbikuICBXaXRoCisJbW9yZSB0aGFuIG9uZSBgLS1ncmVwPTxwYXR0ZXJuPmAsIGNvbW1pdHMgd2hvc2UgbWVzc2FnZQorCW1hdGNoZXMgYW55IG9mIHRoZSBnaXZlbiBwYXR0ZXJucyBhcmUgY2hvc2VuIChidXQgc2VlCisJYC0tYWxsLW1hdGNoYCkuCitpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCisrCitXaGVuIGAtLW5vdGVzYCBpcyBpbiBlZmZlY3QsIHRoZSBtZXNzYWdlIGZyb20gdGhlIG5vdGVzIGlzCittYXRjaGVkIGFzIGlmIGl0IHdlcmUgcGFydCBvZiB0aGUgbG9nIG1lc3NhZ2UuCitlbmRpZjo6Z2l0LXJldi1saXN0W10KKworLS1hbGwtbWF0Y2g6OgorCUxpbWl0IHRoZSBjb21taXRzIG91dHB1dCB0byBvbmVzIHRoYXQgbWF0Y2ggYWxsIGdpdmVuIGAtLWdyZXBgLAorCWluc3RlYWQgb2Ygb25lcyB0aGF0IG1hdGNoIGF0IGxlYXN0IG9uZS4KKworLS1pbnZlcnQtZ3JlcDo6CisJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIG9uZXMgd2l0aCBsb2cgbWVzc2FnZSB0aGF0IGRvIG5vdAorCW1hdGNoIHRoZSBwYXR0ZXJuIHNwZWNpZmllZCB3aXRoIGAtLWdyZXA9PHBhdHRlcm4+YC4KKworLWk6OgorLS1yZWdleHAtaWdub3JlLWNhc2U6OgorCU1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gbGltaXRpbmcgcGF0dGVybnMgd2l0aG91dCByZWdhcmQgdG8gbGV0dGVyCisJY2FzZS4KKworLS1iYXNpYy1yZWdleHA6OgorCUNvbnNpZGVyIHRoZSBsaW1pdGluZyBwYXR0ZXJucyB0byBiZSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb25zOworCXRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKy1FOjoKKy0tZXh0ZW5kZWQtcmVnZXhwOjoKKwlDb25zaWRlciB0aGUgbGltaXRpbmcgcGF0dGVybnMgdG8gYmUgZXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9ucworCWluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYmFzaWMgcmVndWxhciBleHByZXNzaW9ucy4KKworLUY6OgorLS1maXhlZC1zdHJpbmdzOjoKKwlDb25zaWRlciB0aGUgbGltaXRpbmcgcGF0dGVybnMgdG8gYmUgZml4ZWQgc3RyaW5ncyAoZG9uJ3QgaW50ZXJwcmV0CisJcGF0dGVybiBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbikuCisKKy1QOjoKKy0tcGVybC1yZWdleHA6OgorCUNvbnNpZGVyIHRoZSBsaW1pdGluZyBwYXR0ZXJucyB0byBiZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhcgorCWV4cHJlc3Npb25zLgorKworU3VwcG9ydCBmb3IgdGhlc2UgdHlwZXMgb2YgcmVndWxhciBleHByZXNzaW9ucyBpcyBhbiBvcHRpb25hbAorY29tcGlsZS10aW1lIGRlcGVuZGVuY3kuIElmIEdpdCB3YXNuJ3QgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciB0aGVtCitwcm92aWRpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSBpdCB0byBkaWUuCisKKy0tcmVtb3ZlLWVtcHR5OjoKKwlTdG9wIHdoZW4gYSBnaXZlbiBwYXRoIGRpc2FwcGVhcnMgZnJvbSB0aGUgdHJlZS4KKworLS1tZXJnZXM6OgorCVByaW50IG9ubHkgbWVyZ2UgY29tbWl0cy4gVGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGAtLW1pbi1wYXJlbnRzPTJgLgorCistLW5vLW1lcmdlczo6CisJRG8gbm90IHByaW50IGNvbW1pdHMgd2l0aCBtb3JlIHRoYW4gb25lIHBhcmVudC4gVGhpcyBpcworCWV4YWN0bHkgdGhlIHNhbWUgYXMgYC0tbWF4LXBhcmVudHM9MWAuCisKKy0tbWluLXBhcmVudHM9PG51bWJlcj46OgorLS1tYXgtcGFyZW50cz08bnVtYmVyPjo6CistLW5vLW1pbi1wYXJlbnRzOjoKKy0tbm8tbWF4LXBhcmVudHM6OgorCVNob3cgb25seSBjb21taXRzIHdoaWNoIGhhdmUgYXQgbGVhc3QgKG9yIGF0IG1vc3QpIHRoYXQgbWFueSBwYXJlbnQKKwljb21taXRzLiBJbiBwYXJ0aWN1bGFyLCBgLS1tYXgtcGFyZW50cz0xYCBpcyB0aGUgc2FtZSBhcyBgLS1uby1tZXJnZXNgLAorCWAtLW1pbi1wYXJlbnRzPTJgIGlzIHRoZSBzYW1lIGFzIGAtLW1lcmdlc2AuICBgLS1tYXgtcGFyZW50cz0wYAorCWdpdmVzIGFsbCByb290IGNvbW1pdHMgYW5kIGAtLW1pbi1wYXJlbnRzPTNgIGFsbCBvY3RvcHVzIG1lcmdlcy4KKysKK2AtLW5vLW1pbi1wYXJlbnRzYCBhbmQgYC0tbm8tbWF4LXBhcmVudHNgIHJlc2V0IHRoZXNlIGxpbWl0cyAodG8gbm8gbGltaXQpCithZ2Fpbi4gIEVxdWl2YWxlbnQgZm9ybXMgYXJlIGAtLW1pbi1wYXJlbnRzPTBgIChhbnkgY29tbWl0IGhhcyAwIG9yIG1vcmUKK3BhcmVudHMpIGFuZCBgLS1tYXgtcGFyZW50cz0tMWAgKG5lZ2F0aXZlIG51bWJlcnMgZGVub3RlIG5vIHVwcGVyIGxpbWl0KS4KKworLS1maXJzdC1wYXJlbnQ6OgorCUZvbGxvdyBvbmx5IHRoZSBmaXJzdCBwYXJlbnQgY29tbWl0IHVwb24gc2VlaW5nIGEgbWVyZ2UKKwljb21taXQuICBUaGlzIG9wdGlvbiBjYW4gZ2l2ZSBhIGJldHRlciBvdmVydmlldyB3aGVuCisJdmlld2luZyB0aGUgZXZvbHV0aW9uIG9mIGEgcGFydGljdWxhciB0b3BpYyBicmFuY2gsCisJYmVjYXVzZSBtZXJnZXMgaW50byBhIHRvcGljIGJyYW5jaCB0ZW5kIHRvIGJlIG9ubHkgYWJvdXQKKwlhZGp1c3RpbmcgdG8gdXBkYXRlZCB1cHN0cmVhbSBmcm9tIHRpbWUgdG8gdGltZSwgYW5kCisJdGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBpZ25vcmUgdGhlIGluZGl2aWR1YWwgY29tbWl0cworCWJyb3VnaHQgaW4gdG8geW91ciBoaXN0b3J5IGJ5IHN1Y2ggYSBtZXJnZS4gQ2Fubm90IGJlCisJY29tYmluZWQgd2l0aCAtLWJpc2VjdC4KKworLS1ub3Q6OgorCVJldmVyc2VzIHRoZSBtZWFuaW5nIG9mIHRoZSAne2NhcmV0fScgcHJlZml4IChvciBsYWNrIHRoZXJlb2YpCisJZm9yIGFsbCBmb2xsb3dpbmcgcmV2aXNpb24gc3BlY2lmaWVycywgdXAgdG8gdGhlIG5leHQgYC0tbm90YC4KKworLS1hbGw6OgorCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIGluIGByZWZzL2AsIGFsb25nIHdpdGggYEhFQURgLCBhcmUKKwlsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhcyAnPGNvbW1pdD4nLgorCistLWJyYW5jaGVzWz08cGF0dGVybj5dOjoKKwlQcmV0ZW5kIGFzIGlmIGFsbCB0aGUgcmVmcyBpbiBgcmVmcy9oZWFkc2AgYXJlIGxpc3RlZAorCW9uIHRoZSBjb21tYW5kIGxpbmUgYXMgJzxjb21taXQ+Jy4gSWYgJzxwYXR0ZXJuPicgaXMgZ2l2ZW4sIGxpbWl0CisJYnJhbmNoZXMgdG8gb25lcyBtYXRjaGluZyBnaXZlbiBzaGVsbCBnbG9iLiBJZiBwYXR0ZXJuIGxhY2tzICc/JywKKwkne2FzdGVyaXNrfScsIG9yICdbJywgJy97YXN0ZXJpc2t9JyBhdCB0aGUgZW5kIGlzIGltcGxpZWQuCisKKy0tdGFnc1s9PHBhdHRlcm4+XTo6CisJUHJldGVuZCBhcyBpZiBhbGwgdGhlIHJlZnMgaW4gYHJlZnMvdGFnc2AgYXJlIGxpc3RlZAorCW9uIHRoZSBjb21tYW5kIGxpbmUgYXMgJzxjb21taXQ+Jy4gSWYgJzxwYXR0ZXJuPicgaXMgZ2l2ZW4sIGxpbWl0CisJdGFncyB0byBvbmVzIG1hdGNoaW5nIGdpdmVuIHNoZWxsIGdsb2IuIElmIHBhdHRlcm4gbGFja3MgJz8nLCAne2FzdGVyaXNrfScsCisJb3IgJ1snLCAnL3thc3Rlcmlza30nIGF0IHRoZSBlbmQgaXMgaW1wbGllZC4KKworLS1yZW1vdGVzWz08cGF0dGVybj5dOjoKKwlQcmV0ZW5kIGFzIGlmIGFsbCB0aGUgcmVmcyBpbiBgcmVmcy9yZW1vdGVzYCBhcmUgbGlzdGVkCisJb24gdGhlIGNvbW1hbmQgbGluZSBhcyAnPGNvbW1pdD4nLiBJZiAnPHBhdHRlcm4+JyBpcyBnaXZlbiwgbGltaXQKKwlyZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgdG8gb25lcyBtYXRjaGluZyBnaXZlbiBzaGVsbCBnbG9iLgorCUlmIHBhdHRlcm4gbGFja3MgJz8nLCAne2FzdGVyaXNrfScsIG9yICdbJywgJy97YXN0ZXJpc2t9JyBhdCB0aGUgZW5kIGlzIGltcGxpZWQuCisKKy0tZ2xvYj08Z2xvYi1wYXR0ZXJuPjo6CisJUHJldGVuZCBhcyBpZiBhbGwgdGhlIHJlZnMgbWF0Y2hpbmcgc2hlbGwgZ2xvYiAnPGdsb2ItcGF0dGVybj4nCisJYXJlIGxpc3RlZCBvbiB0aGUgY29tbWFuZCBsaW5lIGFzICc8Y29tbWl0PicuIExlYWRpbmcgJ3JlZnMvJywKKwlpcyBhdXRvbWF0aWNhbGx5IHByZXBlbmRlZCBpZiBtaXNzaW5nLiBJZiBwYXR0ZXJuIGxhY2tzICc/JywgJ3thc3Rlcmlza30nLAorCW9yICdbJywgJy97YXN0ZXJpc2t9JyBhdCB0aGUgZW5kIGlzIGltcGxpZWQuCisKKy0tZXhjbHVkZT08Z2xvYi1wYXR0ZXJuPjo6CisKKwlEbyBub3QgaW5jbHVkZSByZWZzIG1hdGNoaW5nICc8Z2xvYi1wYXR0ZXJuPicgdGhhdCB0aGUgbmV4dCBgLS1hbGxgLAorCWAtLWJyYW5jaGVzYCwgYC0tdGFnc2AsIGAtLXJlbW90ZXNgLCBvciBgLS1nbG9iYCB3b3VsZCBvdGhlcndpc2UKKwljb25zaWRlci4gUmVwZXRpdGlvbnMgb2YgdGhpcyBvcHRpb24gYWNjdW11bGF0ZSBleGNsdXNpb24gcGF0dGVybnMKKwl1cCB0byB0aGUgbmV4dCBgLS1hbGxgLCBgLS1icmFuY2hlc2AsIGAtLXRhZ3NgLCBgLS1yZW1vdGVzYCwgb3IKKwlgLS1nbG9iYCBvcHRpb24gKG90aGVyIG9wdGlvbnMgb3IgYXJndW1lbnRzIGRvIG5vdCBjbGVhcgorCWFjY3VtdWxhdGVkIHBhdHRlcm5zKS4KKysKK1RoZSBwYXR0ZXJucyBnaXZlbiBzaG91bGQgbm90IGJlZ2luIHdpdGggYHJlZnMvaGVhZHNgLCBgcmVmcy90YWdzYCwgb3IKK2ByZWZzL3JlbW90ZXNgIHdoZW4gYXBwbGllZCB0byBgLS1icmFuY2hlc2AsIGAtLXRhZ3NgLCBvciBgLS1yZW1vdGVzYCwKK3Jlc3BlY3RpdmVseSwgYW5kIHRoZXkgbXVzdCBiZWdpbiB3aXRoIGByZWZzL2Agd2hlbiBhcHBsaWVkIHRvIGAtLWdsb2JgCitvciBgLS1hbGxgLiBJZiBhIHRyYWlsaW5nICcve2FzdGVyaXNrfScgaXMgaW50ZW5kZWQsIGl0IG11c3QgYmUgZ2l2ZW4KK2V4cGxpY2l0bHkuCisKKy0tcmVmbG9nOjoKKwlQcmV0ZW5kIGFzIGlmIGFsbCBvYmplY3RzIG1lbnRpb25lZCBieSByZWZsb2dzIGFyZSBsaXN0ZWQgb24gdGhlCisJY29tbWFuZCBsaW5lIGFzIGA8Y29tbWl0PmAuCisKKy0tYWx0ZXJuYXRlLXJlZnM6OgorCVByZXRlbmQgYXMgaWYgYWxsIG9iamVjdHMgbWVudGlvbmVkIGFzIHJlZiB0aXBzIG9mIGFsdGVybmF0ZQorCXJlcG9zaXRvcmllcyB3ZXJlIGxpc3RlZCBvbiB0aGUgY29tbWFuZCBsaW5lLiBBbiBhbHRlcm5hdGUKKwlyZXBvc2l0b3J5IGlzIGFueSByZXBvc2l0b3J5IHdob3NlIG9iamVjdCBkaXJlY3RvcnkgaXMgc3BlY2lmaWVkCisJaW4gYG9iamVjdHMvaW5mby9hbHRlcm5hdGVzYC4gIFRoZSBzZXQgb2YgaW5jbHVkZWQgb2JqZWN0cyBtYXkKKwliZSBtb2RpZmllZCBieSBgY29yZS5hbHRlcm5hdGVSZWZzQ29tbWFuZGAsIGV0Yy4gU2VlCisJbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCistLXNpbmdsZS13b3JrdHJlZTo6CisJQnkgZGVmYXVsdCwgYWxsIHdvcmtpbmcgdHJlZXMgd2lsbCBiZSBleGFtaW5lZCBieSB0aGUKKwlmb2xsb3dpbmcgb3B0aW9ucyB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIChzZWUKKwlsaW5rZ2l0OmdpdC13b3JrdHJlZVsxXSk6IGAtLWFsbGAsIGAtLXJlZmxvZ2AgYW5kCisJYC0taW5kZXhlZC1vYmplY3RzYC4KKwlUaGlzIG9wdGlvbiBmb3JjZXMgdGhlbSB0byBleGFtaW5lIHRoZSBjdXJyZW50IHdvcmtpbmcgdHJlZQorCW9ubHkuCisKKy0taWdub3JlLW1pc3Npbmc6OgorCVVwb24gc2VlaW5nIGFuIGludmFsaWQgb2JqZWN0IG5hbWUgaW4gdGhlIGlucHV0LCBwcmV0ZW5kIGFzIGlmCisJdGhlIGJhZCBpbnB1dCB3YXMgbm90IGdpdmVuLgorCitpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCistLWJpc2VjdDo6CisJUHJldGVuZCBhcyBpZiB0aGUgYmFkIGJpc2VjdGlvbiByZWYgYHJlZnMvYmlzZWN0L2JhZGAKKwl3YXMgbGlzdGVkIGFuZCBhcyBpZiBpdCB3YXMgZm9sbG93ZWQgYnkgYC0tbm90YCBhbmQgdGhlIGdvb2QKKwliaXNlY3Rpb24gcmVmcyBgcmVmcy9iaXNlY3QvZ29vZC0qYCBvbiB0aGUgY29tbWFuZAorCWxpbmUuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC0tZmlyc3QtcGFyZW50LgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCisKKy0tc3RkaW46OgorCUluIGFkZGl0aW9uIHRvIHRoZSAnPGNvbW1pdD4nIGxpc3RlZCBvbiB0aGUgY29tbWFuZAorCWxpbmUsIHJlYWQgdGhlbSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4gSWYgYSBgLS1gIHNlcGFyYXRvciBpcworCXNlZW4sIHN0b3AgcmVhZGluZyBjb21taXRzIGFuZCBzdGFydCByZWFkaW5nIHBhdGhzIHRvIGxpbWl0IHRoZQorCXJlc3VsdC4KKworaWZkZWY6OmdpdC1yZXYtbGlzdFtdCistLXF1aWV0OjoKKwlEb24ndCBwcmludCBhbnl0aGluZyB0byBzdGFuZGFyZCBvdXRwdXQuICBUaGlzIGZvcm0KKwlpcyBwcmltYXJpbHkgbWVhbnQgdG8gYWxsb3cgdGhlIGNhbGxlciB0bworCXRlc3QgdGhlIGV4aXQgc3RhdHVzIHRvIHNlZSBpZiBhIHJhbmdlIG9mIG9iamVjdHMgaXMgZnVsbHkKKwljb25uZWN0ZWQgKG9yIG5vdCkuICBJdCBpcyBmYXN0ZXIgdGhhbiByZWRpcmVjdGluZyBzdGRvdXQKKwl0byBgL2Rldi9udWxsYCBhcyB0aGUgb3V0cHV0IGRvZXMgbm90IGhhdmUgdG8gYmUgZm9ybWF0dGVkLgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCisKKy0tY2hlcnJ5LW1hcms6OgorCUxpa2UgYC0tY2hlcnJ5LXBpY2tgIChzZWUgYmVsb3cpIGJ1dCBtYXJrIGVxdWl2YWxlbnQgY29tbWl0cworCXdpdGggYD1gIHJhdGhlciB0aGFuIG9taXR0aW5nIHRoZW0sIGFuZCBpbmVxdWl2YWxlbnQgb25lcyB3aXRoIGArYC4KKworLS1jaGVycnktcGljazo6CisJT21pdCBhbnkgY29tbWl0IHRoYXQgaW50cm9kdWNlcyB0aGUgc2FtZSBjaGFuZ2UgYXMKKwlhbm90aGVyIGNvbW1pdCBvbiB0aGUgYGBvdGhlciBzaWRlJycgd2hlbiB0aGUgc2V0IG9mCisJY29tbWl0cyBhcmUgbGltaXRlZCB3aXRoIHN5bW1ldHJpYyBkaWZmZXJlbmNlLgorKworRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBicmFuY2hlcywgYEFgIGFuZCBgQmAsIGEgdXN1YWwgd2F5Cit0byBsaXN0IGFsbCBjb21taXRzIG9uIG9ubHkgb25lIHNpZGUgb2YgdGhlbSBpcyB3aXRoCitgLS1sZWZ0LXJpZ2h0YCAoc2VlIHRoZSBleGFtcGxlIGJlbG93IGluIHRoZSBkZXNjcmlwdGlvbiBvZgordGhlIGAtLWxlZnQtcmlnaHRgIG9wdGlvbikuIEhvd2V2ZXIsIGl0IHNob3dzIHRoZSBjb21taXRzIHRoYXQgd2VyZQorY2hlcnJ5LXBpY2tlZCBmcm9tIHRoZSBvdGhlciBicmFuY2ggKGZvciBleGFtcGxlLCBgYDNyZCBvbiBiJycgbWF5IGJlCitjaGVycnktcGlja2VkIGZyb20gYnJhbmNoIEEpLiBXaXRoIHRoaXMgb3B0aW9uLCBzdWNoIHBhaXJzIG9mIGNvbW1pdHMgYXJlCitleGNsdWRlZCBmcm9tIHRoZSBvdXRwdXQuCisKKy0tbGVmdC1vbmx5OjoKKy0tcmlnaHQtb25seTo6CisJTGlzdCBvbmx5IGNvbW1pdHMgb24gdGhlIHJlc3BlY3RpdmUgc2lkZSBvZiBhIHN5bW1ldHJpYyBkaWZmZXJlbmNlLAorCWkuZS4gb25seSB0aG9zZSB3aGljaCB3b3VsZCBiZSBtYXJrZWQgYDxgIHJlc3AuIGA+YCBieQorCWAtLWxlZnQtcmlnaHRgLgorKworRm9yIGV4YW1wbGUsIGAtLWNoZXJyeS1waWNrIC0tcmlnaHQtb25seSBBLi4uQmAgb21pdHMgdGhvc2UKK2NvbW1pdHMgZnJvbSBgQmAgd2hpY2ggYXJlIGluIGBBYCBvciBhcmUgcGF0Y2gtZXF1aXZhbGVudCB0byBhIGNvbW1pdCBpbgorYEFgLiBJbiBvdGhlciB3b3JkcywgdGhpcyBsaXN0cyB0aGUgYCtgIGNvbW1pdHMgZnJvbSBgZ2l0IGNoZXJyeSBBIEJgLgorTW9yZSBwcmVjaXNlbHksIGAtLWNoZXJyeS1waWNrIC0tcmlnaHQtb25seSAtLW5vLW1lcmdlc2AgZ2l2ZXMgdGhlIGV4YWN0CitsaXN0LgorCistLWNoZXJyeTo6CisJQSBzeW5vbnltIGZvciBgLS1yaWdodC1vbmx5IC0tY2hlcnJ5LW1hcmsgLS1uby1tZXJnZXNgOyB1c2VmdWwgdG8KKwlsaW1pdCB0aGUgb3V0cHV0IHRvIHRoZSBjb21taXRzIG9uIG91ciBzaWRlIGFuZCBtYXJrIHRob3NlIHRoYXQKKwloYXZlIGJlZW4gYXBwbGllZCB0byB0aGUgb3RoZXIgc2lkZSBvZiBhIGZvcmtlZCBoaXN0b3J5IHdpdGgKKwlgZ2l0IGxvZyAtLWNoZXJyeSB1cHN0cmVhbS4uLm15YnJhbmNoYCwgc2ltaWxhciB0bworCWBnaXQgY2hlcnJ5IHVwc3RyZWFtIG15YnJhbmNoYC4KKworLWc6OgorLS13YWxrLXJlZmxvZ3M6OgorCUluc3RlYWQgb2Ygd2Fsa2luZyB0aGUgY29tbWl0IGFuY2VzdHJ5IGNoYWluLCB3YWxrCisJcmVmbG9nIGVudHJpZXMgZnJvbSB0aGUgbW9zdCByZWNlbnQgb25lIHRvIG9sZGVyIG9uZXMuCisJV2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkIHlvdSBjYW5ub3Qgc3BlY2lmeSBjb21taXRzIHRvCisJZXhjbHVkZSAodGhhdCBpcywgJ3tjYXJldH1jb21taXQnLCAnY29tbWl0MS4uY29tbWl0MicsCisJYW5kICdjb21taXQxXC4uLmNvbW1pdDInIG5vdGF0aW9ucyBjYW5ub3QgYmUgdXNlZCkuCisrCitXaXRoIGAtLXByZXR0eWAgZm9ybWF0IG90aGVyIHRoYW4gYG9uZWxpbmVgIGFuZCBgcmVmZXJlbmNlYCAoZm9yIG9idmlvdXMgcmVhc29ucyksCit0aGlzIGNhdXNlcyB0aGUgb3V0cHV0IHRvIGhhdmUgdHdvIGV4dHJhIGxpbmVzIG9mIGluZm9ybWF0aW9uCit0YWtlbiBmcm9tIHRoZSByZWZsb2cuICBUaGUgcmVmbG9nIGRlc2lnbmF0b3IgaW4gdGhlIG91dHB1dCBtYXkgYmUgc2hvd24KK2FzIGByZWZAe050aH1gICh3aGVyZSBgTnRoYCBpcyB0aGUgcmV2ZXJzZS1jaHJvbm9sb2dpY2FsIGluZGV4IGluIHRoZQorcmVmbG9nKSBvciBhcyBgcmVmQHt0aW1lc3RhbXB9YCAod2l0aCB0aGUgdGltZXN0YW1wIGZvciB0aGF0IGVudHJ5KSwKK2RlcGVuZGluZyBvbiBhIGZldyBydWxlczoKKysKKy0tCisxLiBJZiB0aGUgc3RhcnRpbmcgcG9pbnQgaXMgc3BlY2lmaWVkIGFzIGByZWZAe050aH1gLCBzaG93IHRoZSBpbmRleAorICAgZm9ybWF0LgorKworMi4gSWYgdGhlIHN0YXJ0aW5nIHBvaW50IHdhcyBzcGVjaWZpZWQgYXMgYHJlZkB7bm93fWAsIHNob3cgdGhlCisgICB0aW1lc3RhbXAgZm9ybWF0LgorKworMy4gSWYgbmVpdGhlciB3YXMgdXNlZCwgYnV0IGAtLWRhdGVgIHdhcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCBzaG93CisgICB0aGUgdGltZXN0YW1wIGluIHRoZSBmb3JtYXQgcmVxdWVzdGVkIGJ5IGAtLWRhdGVgLgorKworNC4gT3RoZXJ3aXNlLCBzaG93IHRoZSBpbmRleCBmb3JtYXQuCistLQorKworVW5kZXIgYC0tcHJldHR5PW9uZWxpbmVgLCB0aGUgY29tbWl0IG1lc3NhZ2UgaXMKK3ByZWZpeGVkIHdpdGggdGhpcyBpbmZvcm1hdGlvbiBvbiB0aGUgc2FtZSBsaW5lLgorVGhpcyBvcHRpb24gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tcmV2ZXJzZWAuCitTZWUgYWxzbyBsaW5rZ2l0OmdpdC1yZWZsb2dbMV0uCisrCitVbmRlciBgLS1wcmV0dHk9cmVmZXJlbmNlYCwgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIG5vdCBiZSBzaG93biBhdCBhbGwuCisKKy0tbWVyZ2U6OgorCUFmdGVyIGEgZmFpbGVkIG1lcmdlLCBzaG93IHJlZnMgdGhhdCB0b3VjaCBmaWxlcyBoYXZpbmcgYQorCWNvbmZsaWN0IGFuZCBkb24ndCBleGlzdCBvbiBhbGwgaGVhZHMgdG8gbWVyZ2UuCisKKy0tYm91bmRhcnk6OgorCU91dHB1dCBleGNsdWRlZCBib3VuZGFyeSBjb21taXRzLiBCb3VuZGFyeSBjb21taXRzIGFyZQorCXByZWZpeGVkIHdpdGggYC1gLgorCitpZmRlZjo6Z2l0LXJldi1saXN0W10KKy0tdXNlLWJpdG1hcC1pbmRleDo6CisKKwlUcnkgdG8gc3BlZWQgdXAgdGhlIHRyYXZlcnNhbCB1c2luZyB0aGUgcGFjayBiaXRtYXAgaW5kZXggKGlmCisJb25lIGlzIGF2YWlsYWJsZSkuIE5vdGUgdGhhdCB3aGVuIHRyYXZlcnNpbmcgd2l0aCBgLS1vYmplY3RzYCwKKwl0cmVlcyBhbmQgYmxvYnMgd2lsbCBub3QgaGF2ZSB0aGVpciBhc3NvY2lhdGVkIHBhdGggcHJpbnRlZC4KKworLS1wcm9ncmVzcz08aGVhZGVyPjo6CisJU2hvdyBwcm9ncmVzcyByZXBvcnRzIG9uIHN0ZGVyciBhcyBvYmplY3RzIGFyZSBjb25zaWRlcmVkLiBUaGUKKwlgPGhlYWRlcj5gIHRleHQgd2lsbCBiZSBwcmludGVkIHdpdGggZWFjaCBwcm9ncmVzcyB1cGRhdGUuCitlbmRpZjo6Z2l0LXJldi1saXN0W10KKworSGlzdG9yeSBTaW1wbGlmaWNhdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitTb21ldGltZXMgeW91IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gcGFydHMgb2YgdGhlIGhpc3RvcnksIGZvciBleGFtcGxlIHRoZQorY29tbWl0cyBtb2RpZnlpbmcgYSBwYXJ0aWN1bGFyIDxwYXRoPi4gQnV0IHRoZXJlIGFyZSB0d28gcGFydHMgb2YKKydIaXN0b3J5IFNpbXBsaWZpY2F0aW9uJywgb25lIHBhcnQgaXMgc2VsZWN0aW5nIHRoZSBjb21taXRzIGFuZCB0aGUgb3RoZXIKK2lzIGhvdyB0byBkbyBpdCwgYXMgdGhlcmUgYXJlIHZhcmlvdXMgc3RyYXRlZ2llcyB0byBzaW1wbGlmeSB0aGUgaGlzdG9yeS4KKworVGhlIGZvbGxvd2luZyBvcHRpb25zIHNlbGVjdCB0aGUgY29tbWl0cyB0byBiZSBzaG93bjoKKworPHBhdGhzPjo6CisJQ29tbWl0cyBtb2RpZnlpbmcgdGhlIGdpdmVuIDxwYXRocz4gYXJlIHNlbGVjdGVkLgorCistLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb246OgorCUNvbW1pdHMgdGhhdCBhcmUgcmVmZXJyZWQgYnkgc29tZSBicmFuY2ggb3IgdGFnIGFyZSBzZWxlY3RlZC4KKworTm90ZSB0aGF0IGV4dHJhIGNvbW1pdHMgY2FuIGJlIHNob3duIHRvIGdpdmUgYSBtZWFuaW5nZnVsIGhpc3RvcnkuCisKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhZmZlY3QgdGhlIHdheSB0aGUgc2ltcGxpZmljYXRpb24gaXMgcGVyZm9ybWVkOgorCitEZWZhdWx0IG1vZGU6OgorCVNpbXBsaWZpZXMgdGhlIGhpc3RvcnkgdG8gdGhlIHNpbXBsZXN0IGhpc3RvcnkgZXhwbGFpbmluZyB0aGUKKwlmaW5hbCBzdGF0ZSBvZiB0aGUgdHJlZS4gU2ltcGxlc3QgYmVjYXVzZSBpdCBwcnVuZXMgc29tZSBzaWRlCisJYnJhbmNoZXMgaWYgdGhlIGVuZCByZXN1bHQgaXMgdGhlIHNhbWUgKGkuZS4gbWVyZ2luZyBicmFuY2hlcworCXdpdGggdGhlIHNhbWUgY29udGVudCkKKworLS1zaG93LXB1bGxzOjoKKwlJbmNsdWRlIGFsbCBjb21taXRzIGZyb20gdGhlIGRlZmF1bHQgbW9kZSwgYnV0IGFsc28gYW55IG1lcmdlCisJY29tbWl0cyB0aGF0IGFyZSBub3QgVFJFRVNBTUUgdG8gdGhlIGZpcnN0IHBhcmVudCBidXQgYXJlCisJVFJFRVNBTUUgdG8gYSBsYXRlciBwYXJlbnQuIFRoaXMgbW9kZSBpcyBoZWxwZnVsIGZvciBzaG93aW5nCisJdGhlIG1lcmdlIGNvbW1pdHMgdGhhdCAiZmlyc3QgaW50cm9kdWNlZCIgYSBjaGFuZ2UgdG8gYSBicmFuY2guCisKKy0tZnVsbC1oaXN0b3J5OjoKKwlTYW1lIGFzIHRoZSBkZWZhdWx0IG1vZGUsIGJ1dCBkb2VzIG5vdCBwcnVuZSBzb21lIGhpc3RvcnkuCisKKy0tZGVuc2U6OgorCU9ubHkgdGhlIHNlbGVjdGVkIGNvbW1pdHMgYXJlIHNob3duLCBwbHVzIHNvbWUgdG8gaGF2ZSBhCisJbWVhbmluZ2Z1bCBoaXN0b3J5LgorCistLXNwYXJzZTo6CisJQWxsIGNvbW1pdHMgaW4gdGhlIHNpbXBsaWZpZWQgaGlzdG9yeSBhcmUgc2hvd24uCisKKy0tc2ltcGxpZnktbWVyZ2VzOjoKKwlBZGRpdGlvbmFsIG9wdGlvbiB0byBgLS1mdWxsLWhpc3RvcnlgIHRvIHJlbW92ZSBzb21lIG5lZWRsZXNzCisJbWVyZ2VzIGZyb20gdGhlIHJlc3VsdGluZyBoaXN0b3J5LCBhcyB0aGVyZSBhcmUgbm8gc2VsZWN0ZWQKKwljb21taXRzIGNvbnRyaWJ1dGluZyB0byB0aGlzIG1lcmdlLgorCistLWFuY2VzdHJ5LXBhdGg6OgorCVdoZW4gZ2l2ZW4gYSByYW5nZSBvZiBjb21taXRzIHRvIGRpc3BsYXkgKGUuZy4gJ2NvbW1pdDEuLmNvbW1pdDInCisJb3IgJ2NvbW1pdDIge2NhcmV0fWNvbW1pdDEnKSwgb25seSBkaXNwbGF5IGNvbW1pdHMgdGhhdCBleGlzdAorCWRpcmVjdGx5IG9uIHRoZSBhbmNlc3RyeSBjaGFpbiBiZXR3ZWVuIHRoZSAnY29tbWl0MScgYW5kCisJJ2NvbW1pdDInLCBpLmUuIGNvbW1pdHMgdGhhdCBhcmUgYm90aCBkZXNjZW5kYW50cyBvZiAnY29tbWl0MScsCisJYW5kIGFuY2VzdG9ycyBvZiAnY29tbWl0MicuCisKK0EgbW9yZSBkZXRhaWxlZCBleHBsYW5hdGlvbiBmb2xsb3dzLgorCitTdXBwb3NlIHlvdSBzcGVjaWZpZWQgYGZvb2AgYXMgdGhlIDxwYXRocz4uICBXZSBzaGFsbCBjYWxsIGNvbW1pdHMKK3RoYXQgbW9kaWZ5IGBmb29gICFUUkVFU0FNRSwgYW5kIHRoZSByZXN0IFRSRUVTQU1FLiAgKEluIGEgZGlmZgorZmlsdGVyZWQgZm9yIGBmb29gLCB0aGV5IGxvb2sgZGlmZmVyZW50IGFuZCBlcXVhbCwgcmVzcGVjdGl2ZWx5LikKKworSW4gdGhlIGZvbGxvd2luZywgd2Ugd2lsbCBhbHdheXMgcmVmZXIgdG8gdGhlIHNhbWUgZXhhbXBsZSBoaXN0b3J5IHRvCitpbGx1c3RyYXRlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHNpbXBsaWZpY2F0aW9uIHNldHRpbmdzLiAgV2UgYXNzdW1lCit0aGF0IHlvdSBhcmUgZmlsdGVyaW5nIGZvciBhIGZpbGUgYGZvb2AgaW4gdGhpcyBjb21taXQgZ3JhcGg6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgLi1BLS0tTS0tLU4tLS1PLS0tUC0tLVEKKwkgLyAgICAgLyAgIC8gICAvICAgLyAgIC8KKwlJICAgICBCICAgQyAgIEQgICBFICAgWQorCSBcICAgLyAgIC8gICAvICAgLyAgIC8KKwkgIGAtLS0tLS0tLS0tLS0tJyAgIFgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgaG9yaXpvbnRhbCBsaW5lIG9mIGhpc3RvcnkgQS0tLVEgaXMgdGFrZW4gdG8gYmUgdGhlIGZpcnN0IHBhcmVudCBvZgorZWFjaCBtZXJnZS4gIFRoZSBjb21taXRzIGFyZToKKworKiBgSWAgaXMgdGhlIGluaXRpYWwgY29tbWl0LCBpbiB3aGljaCBgZm9vYCBleGlzdHMgd2l0aCBjb250ZW50cworICBgYGFzZGYnJywgYW5kIGEgZmlsZSBgcXV1eGAgZXhpc3RzIHdpdGggY29udGVudHMgYGBxdXV4JycuIEluaXRpYWwKKyAgY29tbWl0cyBhcmUgY29tcGFyZWQgdG8gYW4gZW1wdHkgdHJlZSwgc28gYElgIGlzICFUUkVFU0FNRS4KKworKiBJbiBgQWAsIGBmb29gIGNvbnRhaW5zIGp1c3QgYGBmb28nJy4KKworKiBgQmAgY29udGFpbnMgdGhlIHNhbWUgY2hhbmdlIGFzIGBBYC4gIEl0cyBtZXJnZSBgTWAgaXMgdHJpdmlhbCBhbmQKKyAgaGVuY2UgVFJFRVNBTUUgdG8gYWxsIHBhcmVudHMuCisKKyogYENgIGRvZXMgbm90IGNoYW5nZSBgZm9vYCwgYnV0IGl0cyBtZXJnZSBgTmAgY2hhbmdlcyBpdCB0byBgYGZvb2JhcicnLAorICBzbyBpdCBpcyBub3QgVFJFRVNBTUUgdG8gYW55IHBhcmVudC4KKworKiBgRGAgc2V0cyBgZm9vYCB0byBgYGJheicnLiBJdHMgbWVyZ2UgYE9gIGNvbWJpbmVzIHRoZSBzdHJpbmdzIGZyb20KKyAgYE5gIGFuZCBgRGAgdG8gYGBmb29iYXJiYXonJzsgaS5lLiwgaXQgaXMgbm90IFRSRUVTQU1FIHRvIGFueSBwYXJlbnQuCisKKyogYEVgIGNoYW5nZXMgYHF1dXhgIHRvIGBgeHl6enknJywgYW5kIGl0cyBtZXJnZSBgUGAgY29tYmluZXMgdGhlCisgIHN0cmluZ3MgdG8gYGBxdXV4IHh5enp5JycuIGBQYCBpcyBUUkVFU0FNRSB0byBgT2AsIGJ1dCBub3QgdG8gYEVgLgorCisqIGBYYCBpcyBhbiBpbmRlcGVuZGVudCByb290IGNvbW1pdCB0aGF0IGFkZGVkIGEgbmV3IGZpbGUgYHNpZGVgLCBhbmQgYFlgCisgIG1vZGlmaWVkIGl0LiBgWWAgaXMgVFJFRVNBTUUgdG8gYFhgLiBJdHMgbWVyZ2UgYFFgIGFkZGVkIGBzaWRlYCB0byBgUGAsIGFuZAorICBgUWAgaXMgVFJFRVNBTUUgdG8gYFBgLCBidXQgbm90IHRvIGBZYC4KKworYHJldi1saXN0YCB3YWxrcyBiYWNrd2FyZHMgdGhyb3VnaCBoaXN0b3J5LCBpbmNsdWRpbmcgb3IgZXhjbHVkaW5nCitjb21taXRzIGJhc2VkIG9uIHdoZXRoZXIgYC0tZnVsbC1oaXN0b3J5YCBhbmQvb3IgcGFyZW50IHJld3JpdGluZworKHZpYSBgLS1wYXJlbnRzYCBvciBgLS1jaGlsZHJlbmApIGFyZSB1c2VkLiBUaGUgZm9sbG93aW5nIHNldHRpbmdzCithcmUgYXZhaWxhYmxlLgorCitEZWZhdWx0IG1vZGU6OgorCUNvbW1pdHMgYXJlIGluY2x1ZGVkIGlmIHRoZXkgYXJlIG5vdCBUUkVFU0FNRSB0byBhbnkgcGFyZW50CisJKHRob3VnaCB0aGlzIGNhbiBiZSBjaGFuZ2VkLCBzZWUgYC0tc3BhcnNlYCBiZWxvdykuICBJZiB0aGUKKwljb21taXQgd2FzIGEgbWVyZ2UsIGFuZCBpdCB3YXMgVFJFRVNBTUUgdG8gb25lIHBhcmVudCwgZm9sbG93CisJb25seSB0aGF0IHBhcmVudC4gIChFdmVuIGlmIHRoZXJlIGFyZSBzZXZlcmFsIFRSRUVTQU1FCisJcGFyZW50cywgZm9sbG93IG9ubHkgb25lIG9mIHRoZW0uKSAgT3RoZXJ3aXNlLCBmb2xsb3cgYWxsCisJcGFyZW50cy4KKysKK1RoaXMgcmVzdWx0cyBpbjoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAuLUEtLS1OLS0tTworCSAvICAgICAvICAgLworCUktLS0tLS0tLS1ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworTm90ZSBob3cgdGhlIHJ1bGUgdG8gb25seSBmb2xsb3cgdGhlIFRSRUVTQU1FIHBhcmVudCwgaWYgb25lIGlzCithdmFpbGFibGUsIHJlbW92ZWQgYEJgIGZyb20gY29uc2lkZXJhdGlvbiBlbnRpcmVseS4gIGBDYCB3YXMKK2NvbnNpZGVyZWQgdmlhIGBOYCwgYnV0IGlzIFRSRUVTQU1FLiAgUm9vdCBjb21taXRzIGFyZSBjb21wYXJlZCB0byBhbgorZW1wdHkgdHJlZSwgc28gYElgIGlzICFUUkVFU0FNRS4KKysKK1BhcmVudC9jaGlsZCByZWxhdGlvbnMgYXJlIG9ubHkgdmlzaWJsZSB3aXRoIGAtLXBhcmVudHNgLCBidXQgdGhhdCBkb2VzCitub3QgYWZmZWN0IHRoZSBjb21taXRzIHNlbGVjdGVkIGluIGRlZmF1bHQgbW9kZSwgc28gd2UgaGF2ZSBzaG93biB0aGUKK3BhcmVudCBsaW5lcy4KKworLS1mdWxsLWhpc3Rvcnkgd2l0aG91dCBwYXJlbnQgcmV3cml0aW5nOjoKKwlUaGlzIG1vZGUgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0IGluIG9uZSBwb2ludDogYWx3YXlzIGZvbGxvdworCWFsbCBwYXJlbnRzIG9mIGEgbWVyZ2UsIGV2ZW4gaWYgaXQgaXMgVFJFRVNBTUUgdG8gb25lIG9mIHRoZW0uCisJRXZlbiBpZiBtb3JlIHRoYW4gb25lIHNpZGUgb2YgdGhlIG1lcmdlIGhhcyBjb21taXRzIHRoYXQgYXJlCisJaW5jbHVkZWQsIHRoaXMgZG9lcyBub3QgaW1wbHkgdGhhdCB0aGUgbWVyZ2UgaXRzZWxmIGlzISAgSW4KKwl0aGUgZXhhbXBsZSwgd2UgZ2V0CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUkgIEEgIEIgIE4gIEQgIE8gIFAgIFEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitgTWAgd2FzIGV4Y2x1ZGVkIGJlY2F1c2UgaXQgaXMgVFJFRVNBTUUgdG8gYm90aCBwYXJlbnRzLiAgYEVgLAorYENgIGFuZCBgQmAgd2VyZSBhbGwgd2Fsa2VkLCBidXQgb25seSBgQmAgd2FzICFUUkVFU0FNRSwgc28gdGhlIG90aGVycworZG8gbm90IGFwcGVhci4KKysKK05vdGUgdGhhdCB3aXRob3V0IHBhcmVudCByZXdyaXRpbmcsIGl0IGlzIG5vdCByZWFsbHkgcG9zc2libGUgdG8gdGFsaworYWJvdXQgdGhlIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGNvbW1pdHMsIHNvIHdlIHNob3cKK3RoZW0gZGlzY29ubmVjdGVkLgorCistLWZ1bGwtaGlzdG9yeSB3aXRoIHBhcmVudCByZXdyaXRpbmc6OgorCU9yZGluYXJ5IGNvbW1pdHMgYXJlIG9ubHkgaW5jbHVkZWQgaWYgdGhleSBhcmUgIVRSRUVTQU1FCisJKHRob3VnaCB0aGlzIGNhbiBiZSBjaGFuZ2VkLCBzZWUgYC0tc3BhcnNlYCBiZWxvdykuCisrCitNZXJnZXMgYXJlIGFsd2F5cyBpbmNsdWRlZC4gIEhvd2V2ZXIsIHRoZWlyIHBhcmVudCBsaXN0IGlzIHJld3JpdHRlbjoKK0Fsb25nIGVhY2ggcGFyZW50LCBwcnVuZSBhd2F5IGNvbW1pdHMgdGhhdCBhcmUgbm90IGluY2x1ZGVkCit0aGVtc2VsdmVzLiAgVGhpcyByZXN1bHRzIGluCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgLi1BLS0tTS0tLU4tLS1PLS0tUC0tLVEKKwkgLyAgICAgLyAgIC8gICAvICAgLworCUkgICAgIEIgICAvICAgRCAgIC8KKwkgXCAgIC8gICAvICAgLyAgIC8KKwkgIGAtLS0tLS0tLS0tLS0tJworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK0NvbXBhcmUgdG8gYC0tZnVsbC1oaXN0b3J5YCB3aXRob3V0IHJld3JpdGluZyBhYm92ZS4gIE5vdGUgdGhhdCBgRWAKK3dhcyBwcnVuZWQgYXdheSBiZWNhdXNlIGl0IGlzIFRSRUVTQU1FLCBidXQgdGhlIHBhcmVudCBsaXN0IG9mIFAgd2FzCityZXdyaXR0ZW4gdG8gY29udGFpbiBgRWAncyBwYXJlbnQgYElgLiAgVGhlIHNhbWUgaGFwcGVuZWQgZm9yIGBDYCBhbmQKK2BOYCwgYW5kIGBYYCwgYFlgIGFuZCBgUWAuCisKK0luIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBzZXR0aW5ncywgeW91IGNhbiBjaGFuZ2Ugd2hldGhlciBUUkVFU0FNRQorYWZmZWN0cyBpbmNsdXNpb246CisKKy0tZGVuc2U6OgorCUNvbW1pdHMgdGhhdCBhcmUgd2Fsa2VkIGFyZSBpbmNsdWRlZCBpZiB0aGV5IGFyZSBub3QgVFJFRVNBTUUKKwl0byBhbnkgcGFyZW50LgorCistLXNwYXJzZTo6CisJQWxsIGNvbW1pdHMgdGhhdCBhcmUgd2Fsa2VkIGFyZSBpbmNsdWRlZC4KKysKK05vdGUgdGhhdCB3aXRob3V0IGAtLWZ1bGwtaGlzdG9yeWAsIHRoaXMgc3RpbGwgc2ltcGxpZmllcyBtZXJnZXM6IGlmCitvbmUgb2YgdGhlIHBhcmVudHMgaXMgVFJFRVNBTUUsIHdlIGZvbGxvdyBvbmx5IHRoYXQgb25lLCBzbyB0aGUgb3RoZXIKK3NpZGVzIG9mIHRoZSBtZXJnZSBhcmUgbmV2ZXIgd2Fsa2VkLgorCistLXNpbXBsaWZ5LW1lcmdlczo6CisJRmlyc3QsIGJ1aWxkIGEgaGlzdG9yeSBncmFwaCBpbiB0aGUgc2FtZSB3YXkgdGhhdAorCWAtLWZ1bGwtaGlzdG9yeWAgd2l0aCBwYXJlbnQgcmV3cml0aW5nIGRvZXMgKHNlZSBhYm92ZSkuCisrCitUaGVuIHNpbXBsaWZ5IGVhY2ggY29tbWl0IGBDYCB0byBpdHMgcmVwbGFjZW1lbnQgYEMnYCBpbiB0aGUgZmluYWwKK2hpc3RvcnkgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisrCistLQorKiBTZXQgYEMnYCB0byBgQ2AuCisrCisqIFJlcGxhY2UgZWFjaCBwYXJlbnQgYFBgIG9mIGBDJ2Agd2l0aCBpdHMgc2ltcGxpZmljYXRpb24gYFAnYC4gIEluCisgIHRoZSBwcm9jZXNzLCBkcm9wIHBhcmVudHMgdGhhdCBhcmUgYW5jZXN0b3JzIG9mIG90aGVyIHBhcmVudHMgb3IgdGhhdCBhcmUKKyAgcm9vdCBjb21taXRzIFRSRUVTQU1FIHRvIGFuIGVtcHR5IHRyZWUsIGFuZCByZW1vdmUgZHVwbGljYXRlcywgYnV0IHRha2UgY2FyZQorICB0byBuZXZlciBkcm9wIGFsbCBwYXJlbnRzIHRoYXQgd2UgYXJlIFRSRUVTQU1FIHRvLgorKworKiBJZiBhZnRlciB0aGlzIHBhcmVudCByZXdyaXRpbmcsIGBDJ2AgaXMgYSByb290IG9yIG1lcmdlIGNvbW1pdCAoaGFzCisgIHplcm8gb3IgPjEgcGFyZW50cyksIGEgYm91bmRhcnkgY29tbWl0LCBvciAhVFJFRVNBTUUsIGl0IHJlbWFpbnMuCisgIE90aGVyd2lzZSwgaXQgaXMgcmVwbGFjZWQgd2l0aCBpdHMgb25seSBwYXJlbnQuCistLQorKworVGhlIGVmZmVjdCBvZiB0aGlzIGlzIGJlc3Qgc2hvd24gYnkgd2F5IG9mIGNvbXBhcmluZyB0bworYC0tZnVsbC1oaXN0b3J5YCB3aXRoIHBhcmVudCByZXdyaXRpbmcuICBUaGUgZXhhbXBsZSB0dXJucyBpbnRvOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgIC4tQS0tLU0tLS1OLS0tTworCSAvICAgICAvICAgICAgIC8KKwlJICAgICBCICAgICAgIEQKKwkgXCAgIC8gICAgICAgLworCSAgYC0tLS0tLS0tLScKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitOb3RlIHRoZSBtYWpvciBkaWZmZXJlbmNlcyBpbiBgTmAsIGBQYCwgYW5kIGBRYCBvdmVyIGAtLWZ1bGwtaGlzdG9yeWA6CisrCistLQorKiBgTmAncyBwYXJlbnQgbGlzdCBoYWQgYElgIHJlbW92ZWQsIGJlY2F1c2UgaXQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlCisgIG90aGVyIHBhcmVudCBgTWAuICBTdGlsbCwgYE5gIHJlbWFpbmVkIGJlY2F1c2UgaXQgaXMgIVRSRUVTQU1FLgorKworKiBgUGAncyBwYXJlbnQgbGlzdCBzaW1pbGFybHkgaGFkIGBJYCByZW1vdmVkLiAgYFBgIHdhcyB0aGVuCisgIHJlbW92ZWQgY29tcGxldGVseSwgYmVjYXVzZSBpdCBoYWQgb25lIHBhcmVudCBhbmQgaXMgVFJFRVNBTUUuCisrCisqIGBRYCdzIHBhcmVudCBsaXN0IGhhZCBgWWAgc2ltcGxpZmllZCB0byBgWGAuIGBYYCB3YXMgdGhlbiByZW1vdmVkLCBiZWNhdXNlIGl0CisgIHdhcyBhIFRSRUVTQU1FIHJvb3QuIGBRYCB3YXMgdGhlbiByZW1vdmVkIGNvbXBsZXRlbHksIGJlY2F1c2UgaXQgaGFkIG9uZQorICBwYXJlbnQgYW5kIGlzIFRSRUVTQU1FLgorLS0KKworVGhlcmUgaXMgYW5vdGhlciBzaW1wbGlmaWNhdGlvbiBtb2RlIGF2YWlsYWJsZToKKworLS1hbmNlc3RyeS1wYXRoOjoKKwlMaW1pdCB0aGUgZGlzcGxheWVkIGNvbW1pdHMgdG8gdGhvc2UgZGlyZWN0bHkgb24gdGhlIGFuY2VzdHJ5CisJY2hhaW4gYmV0d2VlbiB0aGUgYGBmcm9tJycgYW5kIGBgdG8nJyBjb21taXRzIGluIHRoZSBnaXZlbiBjb21taXQKKwlyYW5nZS4gSS5lLiBvbmx5IGRpc3BsYXkgY29tbWl0cyB0aGF0IGFyZSBhbmNlc3RvciBvZiB0aGUgYGB0bycnCisJY29tbWl0IGFuZCBkZXNjZW5kYW50cyBvZiB0aGUgYGBmcm9tJycgY29tbWl0LgorKworQXMgYW4gZXhhbXBsZSB1c2UgY2FzZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBjb21taXQgaGlzdG9yeToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgIEQtLS1FLS0tLS0tLUYKKwkgICAvICAgICBcICAgICAgIFwKKwkgIEItLS1DLS0tRy0tLUgtLS1JLS0tSgorCSAvICAgICAgICAgICAgICAgICAgICAgXAorCUEtLS0tLS0tSy0tLS0tLS0tLS0tLS0tLUwtLU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitBIHJlZ3VsYXIgJ0QuLk0nIGNvbXB1dGVzIHRoZSBzZXQgb2YgY29tbWl0cyB0aGF0IGFyZSBhbmNlc3RvcnMgb2YgYE1gLAorYnV0IGV4Y2x1ZGVzIHRoZSBvbmVzIHRoYXQgYXJlIGFuY2VzdG9ycyBvZiBgRGAuIFRoaXMgaXMgdXNlZnVsIHRvIHNlZQord2hhdCBoYXBwZW5lZCB0byB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIGBNYCBzaW5jZSBgRGAsIGluIHRoZSBzZW5zZQordGhhdCBgYHdoYXQgZG9lcyBgTWAgaGF2ZSB0aGF0IGRpZCBub3QgZXhpc3QgaW4gYERgJycuIFRoZSByZXN1bHQgaW4gdGhpcworZXhhbXBsZSB3b3VsZCBiZSBhbGwgdGhlIGNvbW1pdHMsIGV4Y2VwdCBgQWAgYW5kIGBCYCAoYW5kIGBEYCBpdHNlbGYsCitvZiBjb3Vyc2UpLgorKworV2hlbiB3ZSB3YW50IHRvIGZpbmQgb3V0IHdoYXQgY29tbWl0cyBpbiBgTWAgYXJlIGNvbnRhbWluYXRlZCB3aXRoIHRoZQorYnVnIGludHJvZHVjZWQgYnkgYERgIGFuZCBuZWVkIGZpeGluZywgaG93ZXZlciwgd2UgbWlnaHQgd2FudCB0byB2aWV3Citvbmx5IHRoZSBzdWJzZXQgb2YgJ0QuLk0nIHRoYXQgYXJlIGFjdHVhbGx5IGRlc2NlbmRhbnRzIG9mIGBEYCwgaS5lLgorZXhjbHVkaW5nIGBDYCBhbmQgYEtgLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCB0aGUgYC0tYW5jZXN0cnktcGF0aGAKK29wdGlvbiBkb2VzLiBBcHBsaWVkIHRvIHRoZSAnRC4uTScgcmFuZ2UsIGl0IHJlc3VsdHMgaW46CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlFLS0tLS0tLUYKKwkJIFwgICAgICAgXAorCQkgIEctLS1ILS0tSS0tLUoKKwkJCSAgICAgICBcCisJCQkJTC0tTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmVmb3JlIGRpc2N1c3NpbmcgYW5vdGhlciBvcHRpb24sIGAtLXNob3ctcHVsbHNgLCB3ZSBuZWVkIHRvCitjcmVhdGUgYSBuZXcgZXhhbXBsZSBoaXN0b3J5LgorKworQSBjb21tb24gcHJvYmxlbSB1c2VycyBmYWNlIHdoZW4gbG9va2luZyBhdCBzaW1wbGlmaWVkIGhpc3RvcnkgaXMgdGhhdCBhCitjb21taXQgdGhleSBrbm93IGNoYW5nZWQgYSBmaWxlIHNvbWVob3cgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBmaWxlJ3MKK3NpbXBsaWZpZWQgaGlzdG9yeS4gTGV0J3MgZGVtb25zdHJhdGUgYSBuZXcgZXhhbXBsZSBhbmQgc2hvdyBob3cgb3B0aW9ucworc3VjaCBhcyBgLS1mdWxsLWhpc3RvcnlgIGFuZCBgLS1zaW1wbGlmeS1tZXJnZXNgIHdvcmtzIGluIHRoYXQgY2FzZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAuLUEtLS1NLS0tLS1DLS1OLS0tTy0tLVAKKwkgLyAgICAgLyBcICBcICBcLyAgIC8gICAvCisJSSAgICAgQiAgIFwgIFItJ2AtWicgICAvCisJIFwgICAvICAgICBcLyAgICAgICAgIC8KKwkgIFwgLyAgICAgIC9cICAgICAgICAvCisJICAgYC0tLVgtLScgIGAtLS1ZLS0nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworRm9yIHRoaXMgZXhhbXBsZSwgc3VwcG9zZSBgSWAgY3JlYXRlZCBgZmlsZS50eHRgIHdoaWNoIHdhcyBtb2RpZmllZCBieQorYEFgLCBgQmAsIGFuZCBgWGAgaW4gZGlmZmVyZW50IHdheXMuIFRoZSBzaW5nbGUtcGFyZW50IGNvbW1pdHMgYENgLCBgWmAsCithbmQgYFlgIGRvIG5vdCBjaGFuZ2UgYGZpbGUudHh0YC4gVGhlIG1lcmdlIGNvbW1pdCBgTWAgd2FzIGNyZWF0ZWQgYnkKK3Jlc29sdmluZyB0aGUgbWVyZ2UgY29uZmxpY3QgdG8gaW5jbHVkZSBib3RoIGNoYW5nZXMgZnJvbSBgQWAgYW5kIGBCYAorYW5kIGhlbmNlIGlzIG5vdCBUUkVFU0FNRSB0byBlaXRoZXIuIFRoZSBtZXJnZSBjb21taXQgYFJgLCBob3dldmVyLCB3YXMKK2NyZWF0ZWQgYnkgaWdub3JpbmcgdGhlIGNvbnRlbnRzIG9mIGBmaWxlLnR4dGAgYXQgYE1gIGFuZCB0YWtpbmcgb25seQordGhlIGNvbnRlbnRzIG9mIGBmaWxlLnR4dGAgYXQgYFhgLiBIZW5jZSwgYFJgIGlzIFRSRUVTQU1FIHRvIGBYYCBidXQgbm90CitgTWAuIEZpbmFsbHksIHRoZSBuYXR1cmFsIG1lcmdlIHJlc29sdXRpb24gdG8gY3JlYXRlIGBOYCBpcyB0byB0YWtlIHRoZQorY29udGVudHMgb2YgYGZpbGUudHh0YCBhdCBgUmAsIHNvIGBOYCBpcyBUUkVFU0FNRSB0byBgUmAgYnV0IG5vdCBgQ2AuCitUaGUgbWVyZ2UgY29tbWl0cyBgT2AgYW5kIGBQYCBhcmUgVFJFRVNBTUUgdG8gdGhlaXIgZmlyc3QgcGFyZW50cywgYnV0Citub3QgdG8gdGhlaXIgc2Vjb25kIHBhcmVudHMsIGBaYCBhbmQgYFlgIHJlc3BlY3RpdmVseS4KKysKK1doZW4gdXNpbmcgdGhlIGRlZmF1bHQgbW9kZSwgYE5gIGFuZCBgUmAgYm90aCBoYXZlIGEgVFJFRVNBTUUgcGFyZW50LCBzbwordGhvc2UgZWRnZXMgYXJlIHdhbGtlZCBhbmQgdGhlIG90aGVycyBhcmUgaWdub3JlZC4gVGhlIHJlc3VsdGluZyBoaXN0b3J5CitncmFwaCBpczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSS0tLVgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitXaGVuIHVzaW5nIGAtLWZ1bGwtaGlzdG9yeWAsIEdpdCB3YWxrcyBldmVyeSBlZGdlLiBUaGlzIHdpbGwgZGlzY292ZXIKK3RoZSBjb21taXRzIGBBYCBhbmQgYEJgIGFuZCB0aGUgbWVyZ2UgYE1gLCBidXQgYWxzbyB3aWxsIHJldmVhbCB0aGUKK21lcmdlIGNvbW1pdHMgYE9gIGFuZCBgUGAuIFdpdGggcGFyZW50IHJld3JpdGluZywgdGhlIHJlc3VsdGluZyBncmFwaCBpczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAuLUEtLS1NLS0tLS0tLS1OLS0tTy0tLVAKKwkgLyAgICAgLyBcICBcICBcLyAgIC8gICAvCisJSSAgICAgQiAgIFwgIFItJ2AtLScgICAvCisJIFwgICAvICAgICBcLyAgICAgICAgIC8KKwkgIFwgLyAgICAgIC9cICAgICAgICAvCisJICAgYC0tLVgtLScgIGAtLS0tLS0nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSGVyZSwgdGhlIG1lcmdlIGNvbW1pdHMgYE9gIGFuZCBgUGAgY29udHJpYnV0ZSBleHRyYSBub2lzZSwgYXMgdGhleSBkaWQKK25vdCBhY3R1YWxseSBjb250cmlidXRlIGEgY2hhbmdlIHRvIGBmaWxlLnR4dGAuIFRoZXkgb25seSBtZXJnZWQgYSB0b3BpYwordGhhdCB3YXMgYmFzZWQgb24gYW4gb2xkZXIgdmVyc2lvbiBvZiBgZmlsZS50eHRgLiBUaGlzIGlzIGEgY29tbW9uCitpc3N1ZSBpbiByZXBvc2l0b3JpZXMgdXNpbmcgYSB3b3JrZmxvdyB3aGVyZSBtYW55IGNvbnRyaWJ1dG9ycyB3b3JrIGluCitwYXJhbGxlbCBhbmQgbWVyZ2UgdGhlaXIgdG9waWMgYnJhbmNoZXMgYWxvbmcgYSBzaW5nbGUgdHJ1bms6IG1hbnUKK3VucmVsYXRlZCBtZXJnZXMgYXBwZWFyIGluIHRoZSBgLS1mdWxsLWhpc3RvcnlgIHJlc3VsdHMuCisrCitXaGVuIHVzaW5nIHRoZSBgLS1zaW1wbGlmeS1tZXJnZXNgIG9wdGlvbiwgdGhlIGNvbW1pdHMgYE9gIGFuZCBgUGAKK2Rpc2FwcGVhciBmcm9tIHRoZSByZXN1bHRzLiBUaGlzIGlzIGJlY2F1c2UgdGhlIHJld3JpdHRlbiBzZWNvbmQgcGFyZW50cworb2YgYE9gIGFuZCBgUGAgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZWlyIGZpcnN0IHBhcmVudHMuIFRob3NlIGVkZ2VzIGFyZQorcmVtb3ZlZCBhbmQgdGhlbiB0aGUgY29tbWl0cyBsb29rIGxpa2Ugc2luZ2xlLXBhcmVudCBjb21taXRzIHRoYXQgYXJlCitUUkVFU0FNRSB0byB0aGVpciBwYXJlbnQuIFRoaXMgYWxzbyBoYXBwZW5zIHRvIHRoZSBjb21taXQgYE5gLCByZXN1bHRpbmcKK2luIGEgaGlzdG9yeSB2aWV3IGFzIGZvbGxvd3M6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgLi1BLS0tTS0tLgorCSAvICAgICAvICAgIFwKKwlJICAgICBCICAgICAgUgorCSBcICAgLyAgICAgIC8KKwkgIFwgLyAgICAgIC8KKwkgICBgLS0tWC0tJworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK0luIHRoaXMgdmlldywgd2Ugc2VlIGFsbCBvZiB0aGUgaW1wb3J0YW50IHNpbmdsZS1wYXJlbnQgY2hhbmdlcyBmcm9tCitgQWAsIGBCYCwgYW5kIGBYYC4gV2UgYWxzbyBzZWUgdGhlIGNhcmVmdWxseS1yZXNvbHZlZCBtZXJnZSBgTWAgYW5kIHRoZQorbm90LXNvLWNhcmVmdWxseS1yZXNvbHZlZCBtZXJnZSBgUmAuIFRoaXMgaXMgdXN1YWxseSBlbm91Z2ggaW5mb3JtYXRpb24KK3RvIGRldGVybWluZSB3aHkgdGhlIGNvbW1pdHMgYEFgIGFuZCBgQmAgImRpc2FwcGVhcmVkIiBmcm9tIGhpc3RvcnkgaW4KK3RoZSBkZWZhdWx0IHZpZXcuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIGZldyBpc3N1ZXMgd2l0aCB0aGlzIGFwcHJvYWNoLgorKworVGhlIGZpcnN0IGlzc3VlIGlzIHBlcmZvcm1hbmNlLiBVbmxpa2UgYW55IHByZXZpb3VzIG9wdGlvbiwgdGhlCitgLS1zaW1wbGlmeS1tZXJnZXNgIG9wdGlvbiByZXF1aXJlcyB3YWxraW5nIHRoZSBlbnRpcmUgY29tbWl0IGhpc3RvcnkKK2JlZm9yZSByZXR1cm5pbmcgYSBzaW5nbGUgcmVzdWx0LiBUaGlzIGNhbiBtYWtlIHRoZSBvcHRpb24gZGlmZmljdWx0IHRvCit1c2UgZm9yIHZlcnkgbGFyZ2UgcmVwb3NpdG9yaWVzLgorKworVGhlIHNlY29uZCBpc3N1ZSBpcyBvbmUgb2YgYXVkaXRpbmcuIFdoZW4gbWFueSBjb250cmlidXRvcnMgYXJlIHdvcmtpbmcKK29uIHRoZSBzYW1lIHJlcG9zaXRvcnksIGl0IGlzIGltcG9ydGFudCB3aGljaCBtZXJnZSBjb21taXRzIGludHJvZHVjZWQKK2EgY2hhbmdlIGludG8gYW4gaW1wb3J0YW50IGJyYW5jaC4gVGhlIHByb2JsZW1hdGljIG1lcmdlIGBSYCBhYm92ZSBpcworbm90IGxpa2VseSB0byBiZSB0aGUgbWVyZ2UgY29tbWl0IHRoYXQgd2FzIHVzZWQgdG8gbWVyZ2UgaW50byBhbgoraW1wb3J0YW50IGJyYW5jaC4gSW5zdGVhZCwgdGhlIG1lcmdlIGBOYCB3YXMgdXNlZCB0byBtZXJnZSBgUmAgYW5kIGBYYAoraW50byB0aGUgaW1wb3J0YW50IGJyYW5jaC4gVGhpcyBjb21taXQgbWF5IGhhdmUgaW5mb3JtYXRpb24gYWJvdXQgd2h5Cit0aGUgY2hhbmdlIGBYYCBjYW1lIHRvIG92ZXJyaWRlIHRoZSBjaGFuZ2VzIGZyb20gYEFgIGFuZCBgQmAgaW4gaXRzCitjb21taXQgbWVzc2FnZS4KKysKK1RoZSBgLS1zaG93LXB1bGxzYCBvcHRpb24gaGVscHMgd2l0aCBib3RoIG9mIHRoZXNlIGlzc3VlcyBieSBhZGRpbmcgbW9yZQorbWVyZ2UgY29tbWl0cyB0byB0aGUgaGlzdG9yeSByZXN1bHRzLiBJZiBhIG1lcmdlIGlzIG5vdCBUUkVFU0FNRSB0byBpdHMKK2ZpcnN0IHBhcmVudCBidXQgaXMgVFJFRVNBTUUgdG8gYSBsYXRlciBwYXJlbnQsIHRoZW4gdGhhdCBtZXJnZSBpcwordHJlYXRlZCBhcyBpZiBpdCAicHVsbGVkIiB0aGUgY2hhbmdlIGZyb20gYW5vdGhlciBicmFuY2guIFdoZW4gdXNpbmcKK2AtLXNob3ctcHVsbHNgIG9uIHRoaXMgZXhhbXBsZSAoYW5kIG5vIG90aGVyIG9wdGlvbnMpIHRoZSByZXN1bHRpbmcKK2dyYXBoIGlzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlJLS0tWC0tLVItLS1OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSGVyZSwgdGhlIG1lcmdlIGNvbW1pdHMgYFJgIGFuZCBgTmAgYXJlIGluY2x1ZGVkIGJlY2F1c2UgdGhleSBwdWxsZWQKK3RoZSBjb21taXRzIGBYYCBhbmQgYFJgIGludG8gdGhlIGJhc2UgYnJhbmNoLCByZXNwZWN0aXZlbHkuIFRoZXNlCittZXJnZXMgYXJlIHRoZSByZWFzb24gdGhlIGNvbW1pdHMgYEFgIGFuZCBgQmAgZG8gbm90IGFwcGVhciBpbiB0aGUKK2RlZmF1bHQgaGlzdG9yeS4KKysKK1doZW4gYC0tc2hvdy1wdWxsc2AgaXMgcGFpcmVkIHdpdGggYC0tc2ltcGxpZnktbWVyZ2VzYCwgdGhlCitncmFwaCBpbmNsdWRlcyBhbGwgb2YgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbjoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAuLUEtLS1NLS0uICAgTgorCSAvICAgICAvICAgIFwgLworCUkgICAgIEIgICAgICBSCisJIFwgICAvICAgICAgLworCSAgXCAvICAgICAgLworCSAgIGAtLS1YLS0nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworTm90aWNlIHRoYXQgc2luY2UgYE1gIGlzIHJlYWNoYWJsZSBmcm9tIGBSYCwgdGhlIGVkZ2UgZnJvbSBgTmAgdG8gYE1gCit3YXMgc2ltcGxpZmllZCBhd2F5LiBIb3dldmVyLCBgTmAgc3RpbGwgYXBwZWFycyBpbiB0aGUgaGlzdG9yeSBhcyBhbgoraW1wb3J0YW50IGNvbW1pdCBiZWNhdXNlIGl0ICJwdWxsZWQiIHRoZSBjaGFuZ2UgYFJgIGludG8gdGhlIG1haW4KK2JyYW5jaC4KKworVGhlIGAtLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb25gIG9wdGlvbiBhbGxvd3MgeW91IHRvIHZpZXcgb25seSB0aGUKK2JpZyBwaWN0dXJlIG9mIHRoZSB0b3BvbG9neSBvZiB0aGUgaGlzdG9yeSwgYnkgb21pdHRpbmcgY29tbWl0cwordGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgYnkgdGFncy4gIENvbW1pdHMgYXJlIG1hcmtlZCBhcyAhVFJFRVNBTUUKKyhpbiBvdGhlciB3b3Jkcywga2VwdCBhZnRlciBoaXN0b3J5IHNpbXBsaWZpY2F0aW9uIHJ1bGVzIGRlc2NyaWJlZAorYWJvdmUpIGlmICgxKSB0aGV5IGFyZSByZWZlcmVuY2VkIGJ5IHRhZ3MsIG9yICgyKSB0aGV5IGNoYW5nZSB0aGUKK2NvbnRlbnRzIG9mIHRoZSBwYXRocyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLiAgQWxsIG90aGVyCitjb21taXRzIGFyZSBtYXJrZWQgYXMgVFJFRVNBTUUgKHN1YmplY3QgdG8gYmUgc2ltcGxpZmllZCBhd2F5KS4KKworaWZuZGVmOjpnaXQtc2hvcnRsb2dbXQoraWZkZWY6OmdpdC1yZXYtbGlzdFtdCitCaXNlY3Rpb24gSGVscGVycworfn5+fn5+fn5+fn5+fn5+fn4KKworLS1iaXNlY3Q6OgorCUxpbWl0IG91dHB1dCB0byB0aGUgb25lIGNvbW1pdCBvYmplY3Qgd2hpY2ggaXMgcm91Z2hseSBoYWxmd2F5IGJldHdlZW4KKwlpbmNsdWRlZCBhbmQgZXhjbHVkZWQgY29tbWl0cy4gTm90ZSB0aGF0IHRoZSBiYWQgYmlzZWN0aW9uIHJlZgorCWByZWZzL2Jpc2VjdC9iYWRgIGlzIGFkZGVkIHRvIHRoZSBpbmNsdWRlZCBjb21taXRzIChpZiBpdAorCWV4aXN0cykgYW5kIHRoZSBnb29kIGJpc2VjdGlvbiByZWZzIGByZWZzL2Jpc2VjdC9nb29kLSpgIGFyZQorCWFkZGVkIHRvIHRoZSBleGNsdWRlZCBjb21taXRzIChpZiB0aGV5IGV4aXN0KS4gVGh1cywgc3VwcG9zaW5nIHRoZXJlCisJYXJlIG5vIHJlZnMgaW4gYHJlZnMvYmlzZWN0L2AsIGlmCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSQgZ2l0IHJldi1saXN0IC0tYmlzZWN0IGZvbyBeYmFyIF5iYXoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitvdXRwdXRzICdtaWRwb2ludCcsIHRoZSBvdXRwdXQgb2YgdGhlIHR3byBjb21tYW5kcworKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkkIGdpdCByZXYtbGlzdCBmb28gXm1pZHBvaW50CisJJCBnaXQgcmV2LWxpc3QgbWlkcG9pbnQgXmJhciBeYmF6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKword291bGQgYmUgb2Ygcm91Z2hseSB0aGUgc2FtZSBsZW5ndGguICBGaW5kaW5nIHRoZSBjaGFuZ2Ugd2hpY2gKK2ludHJvZHVjZXMgYSByZWdyZXNzaW9uIGlzIHRodXMgcmVkdWNlZCB0byBhIGJpbmFyeSBzZWFyY2g6IHJlcGVhdGVkbHkKK2dlbmVyYXRlIGFuZCB0ZXN0IG5ldyAnbWlkcG9pbnQncyB1bnRpbCB0aGUgY29tbWl0IGNoYWluIGlzIG9mIGxlbmd0aAorb25lLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtLWZpcnN0LXBhcmVudC4KKworLS1iaXNlY3QtdmFyczo6CisJVGhpcyBjYWxjdWxhdGVzIHRoZSBzYW1lIGFzIGAtLWJpc2VjdGAsIGV4Y2VwdCB0aGF0IHJlZnMgaW4KKwlgcmVmcy9iaXNlY3QvYCBhcmUgbm90IHVzZWQsIGFuZCBleGNlcHQgdGhhdCB0aGlzIG91dHB1dHMKKwl0ZXh0IHJlYWR5IHRvIGJlIGV2YWwnZWQgYnkgdGhlIHNoZWxsLiBUaGVzZSBsaW5lcyB3aWxsIGFzc2lnbiB0aGUKKwluYW1lIG9mIHRoZSBtaWRwb2ludCByZXZpc2lvbiB0byB0aGUgdmFyaWFibGUgYGJpc2VjdF9yZXZgLCBhbmQgdGhlCisJZXhwZWN0ZWQgbnVtYmVyIG9mIGNvbW1pdHMgdG8gYmUgdGVzdGVkIGFmdGVyIGBiaXNlY3RfcmV2YCBpcyB0ZXN0ZWQKKwl0byBgYmlzZWN0X25yYCwgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBjb21taXRzIHRvIGJlIHRlc3RlZCBpZgorCWBiaXNlY3RfcmV2YCB0dXJucyBvdXQgdG8gYmUgZ29vZCB0byBgYmlzZWN0X2dvb2RgLCB0aGUgZXhwZWN0ZWQKKwludW1iZXIgb2YgY29tbWl0cyB0byBiZSB0ZXN0ZWQgaWYgYGJpc2VjdF9yZXZgIHR1cm5zIG91dCB0byBiZSBiYWQgdG8KKwlgYmlzZWN0X2JhZGAsIGFuZCB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgd2UgYXJlIGJpc2VjdGluZyByaWdodCBub3cgdG8KKwlgYmlzZWN0X2FsbGAuCisKKy0tYmlzZWN0LWFsbDo6CisJVGhpcyBvdXRwdXRzIGFsbCB0aGUgY29tbWl0IG9iamVjdHMgYmV0d2VlbiB0aGUgaW5jbHVkZWQgYW5kIGV4Y2x1ZGVkCisJY29tbWl0cywgb3JkZXJlZCBieSB0aGVpciBkaXN0YW5jZSB0byB0aGUgaW5jbHVkZWQgYW5kIGV4Y2x1ZGVkCisJY29tbWl0cy4gUmVmcyBpbiBgcmVmcy9iaXNlY3QvYCBhcmUgbm90IHVzZWQuIFRoZSBmYXJ0aGVzdAorCWZyb20gdGhlbSBpcyBkaXNwbGF5ZWQgZmlyc3QuIChUaGlzIGlzIHRoZSBvbmx5IG9uZSBkaXNwbGF5ZWQgYnkKKwlgLS1iaXNlY3RgLikKKysKK1RoaXMgaXMgdXNlZnVsIGJlY2F1c2UgaXQgbWFrZXMgaXQgZWFzeSB0byBjaG9vc2UgYSBnb29kIGNvbW1pdCB0bwordGVzdCB3aGVuIHlvdSB3YW50IHRvIGF2b2lkIHRvIHRlc3Qgc29tZSBvZiB0aGVtIGZvciBzb21lIHJlYXNvbiAodGhleQorbWF5IG5vdCBjb21waWxlIGZvciBleGFtcGxlKS4KKysKK1RoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIGFsb25nIHdpdGggYC0tYmlzZWN0LXZhcnNgLCBpbiB0aGlzIGNhc2UsCithZnRlciBhbGwgdGhlIHNvcnRlZCBjb21taXQgb2JqZWN0cywgdGhlcmUgd2lsbCBiZSB0aGUgc2FtZSB0ZXh0IGFzIGlmCitgLS1iaXNlY3QtdmFyc2AgaGFkIGJlZW4gdXNlZCBhbG9uZS4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorZW5kaWY6OmdpdC1zaG9ydGxvZ1tdCisKK2lmbmRlZjo6Z2l0LXNob3J0bG9nW10KK0NvbW1pdCBPcmRlcmluZworfn5+fn5+fn5+fn5+fn5+CisKK0J5IGRlZmF1bHQsIHRoZSBjb21taXRzIGFyZSBzaG93biBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKy0tZGF0ZS1vcmRlcjo6CisJU2hvdyBubyBwYXJlbnRzIGJlZm9yZSBhbGwgb2YgaXRzIGNoaWxkcmVuIGFyZSBzaG93biwgYnV0CisJb3RoZXJ3aXNlIHNob3cgY29tbWl0cyBpbiB0aGUgY29tbWl0IHRpbWVzdGFtcCBvcmRlci4KKworLS1hdXRob3ItZGF0ZS1vcmRlcjo6CisJU2hvdyBubyBwYXJlbnRzIGJlZm9yZSBhbGwgb2YgaXRzIGNoaWxkcmVuIGFyZSBzaG93biwgYnV0CisJb3RoZXJ3aXNlIHNob3cgY29tbWl0cyBpbiB0aGUgYXV0aG9yIHRpbWVzdGFtcCBvcmRlci4KKworLS10b3BvLW9yZGVyOjoKKwlTaG93IG5vIHBhcmVudHMgYmVmb3JlIGFsbCBvZiBpdHMgY2hpbGRyZW4gYXJlIHNob3duLCBhbmQKKwlhdm9pZCBzaG93aW5nIGNvbW1pdHMgb24gbXVsdGlwbGUgbGluZXMgb2YgaGlzdG9yeQorCWludGVybWl4ZWQuCisrCitGb3IgZXhhbXBsZSwgaW4gYSBjb21taXQgaGlzdG9yeSBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAtLS0xLS0tLTItLS0tNC0tLS03CisJXAkgICAgICAgXAorCSAzLS0tLTUtLS0tNi0tLS04LS0tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK3doZXJlIHRoZSBudW1iZXJzIGRlbm90ZSB0aGUgb3JkZXIgb2YgY29tbWl0IHRpbWVzdGFtcHMsIGBnaXQKK3Jldi1saXN0YCBhbmQgZnJpZW5kcyB3aXRoIGAtLWRhdGUtb3JkZXJgIHNob3cgdGhlIGNvbW1pdHMgaW4gdGhlCit0aW1lc3RhbXAgb3JkZXI6IDggNyA2IDUgNCAzIDIgMS4KKysKK1dpdGggYC0tdG9wby1vcmRlcmAsIHRoZXkgd291bGQgc2hvdyA4IDYgNSAzIDcgNCAyIDEgKG9yIDggNyA0IDIgNiA1CiszIDEpOyBzb21lIG9sZGVyIGNvbW1pdHMgYXJlIHNob3duIGJlZm9yZSBuZXdlciBvbmVzIGluIG9yZGVyIHRvCithdm9pZCBzaG93aW5nIHRoZSBjb21taXRzIGZyb20gdHdvIHBhcmFsbGVsIGRldmVsb3BtZW50IHRyYWNrIG1peGVkCit0b2dldGhlci4KKworLS1yZXZlcnNlOjoKKwlPdXRwdXQgdGhlIGNvbW1pdHMgY2hvc2VuIHRvIGJlIHNob3duIChzZWUgQ29tbWl0IExpbWl0aW5nCisJc2VjdGlvbiBhYm92ZSkgaW4gcmV2ZXJzZSBvcmRlci4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGgKKwlgLS13YWxrLXJlZmxvZ3NgLgorZW5kaWY6OmdpdC1zaG9ydGxvZ1tdCisKK2lmbmRlZjo6Z2l0LXNob3J0bG9nW10KK09iamVjdCBUcmF2ZXJzYWwKK35+fn5+fn5+fn5+fn5+fn4KKworVGhlc2Ugb3B0aW9ucyBhcmUgbW9zdGx5IHRhcmdldGVkIGZvciBwYWNraW5nIG9mIEdpdCByZXBvc2l0b3JpZXMuCisKK2lmZGVmOjpnaXQtcmV2LWxpc3RbXQorLS1vYmplY3RzOjoKKwlQcmludCB0aGUgb2JqZWN0IElEcyBvZiBhbnkgb2JqZWN0IHJlZmVyZW5jZWQgYnkgdGhlIGxpc3RlZAorCWNvbW1pdHMuICBgLS1vYmplY3RzIGZvbyBeYmFyYCB0aHVzIG1lYW5zIGBgc2VuZCBtZQorCWFsbCBvYmplY3QgSURzIHdoaWNoIEkgbmVlZCB0byBkb3dubG9hZCBpZiBJIGhhdmUgdGhlIGNvbW1pdAorCW9iamVjdCBfYmFyXyBidXQgbm90IF9mb29fJycuCisKKy0taW4tY29tbWl0LW9yZGVyOjoKKwlQcmludCB0cmVlIGFuZCBibG9iIGlkcyBpbiBvcmRlciBvZiB0aGUgY29tbWl0cy4gVGhlIHRyZWUKKwlhbmQgYmxvYiBpZHMgYXJlIHByaW50ZWQgYWZ0ZXIgdGhleSBhcmUgZmlyc3QgcmVmZXJlbmNlZAorCWJ5IGEgY29tbWl0LgorCistLW9iamVjdHMtZWRnZTo6CisJU2ltaWxhciB0byBgLS1vYmplY3RzYCwgYnV0IGFsc28gcHJpbnQgdGhlIElEcyBvZiBleGNsdWRlZAorCWNvbW1pdHMgcHJlZml4ZWQgd2l0aCBhIGBgLScnIGNoYXJhY3Rlci4gIFRoaXMgaXMgdXNlZCBieQorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXSB0byBidWlsZCBhIGBgdGhpbicnIHBhY2ssIHdoaWNoIHJlY29yZHMKKwlvYmplY3RzIGluIGRlbHRpZmllZCBmb3JtIGJhc2VkIG9uIG9iamVjdHMgY29udGFpbmVkIGluIHRoZXNlCisJZXhjbHVkZWQgY29tbWl0cyB0byByZWR1Y2UgbmV0d29yayB0cmFmZmljLgorCistLW9iamVjdHMtZWRnZS1hZ2dyZXNzaXZlOjoKKwlTaW1pbGFyIHRvIGAtLW9iamVjdHMtZWRnZWAsIGJ1dCBpdCB0cmllcyBoYXJkZXIgdG8gZmluZCBleGNsdWRlZAorCWNvbW1pdHMgYXQgdGhlIGNvc3Qgb2YgaW5jcmVhc2VkIHRpbWUuICBUaGlzIGlzIHVzZWQgaW5zdGVhZCBvZgorCWAtLW9iamVjdHMtZWRnZWAgdG8gYnVpbGQgYGB0aGluJycgcGFja3MgZm9yIHNoYWxsb3cgcmVwb3NpdG9yaWVzLgorCistLWluZGV4ZWQtb2JqZWN0czo6CisJUHJldGVuZCBhcyBpZiBhbGwgdHJlZXMgYW5kIGJsb2JzIHVzZWQgYnkgdGhlIGluZGV4IGFyZSBsaXN0ZWQKKwlvbiB0aGUgY29tbWFuZCBsaW5lLiAgTm90ZSB0aGF0IHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZQorCWAtLW9iamVjdHNgLCB0b28uCisKKy0tdW5wYWNrZWQ6OgorCU9ubHkgdXNlZnVsIHdpdGggYC0tb2JqZWN0c2A7IHByaW50IHRoZSBvYmplY3QgSURzIHRoYXQgYXJlIG5vdAorCWluIHBhY2tzLgorCistLW9iamVjdC1uYW1lczo6CisJT25seSB1c2VmdWwgd2l0aCBgLS1vYmplY3RzYDsgcHJpbnQgdGhlIG5hbWVzIG9mIHRoZSBvYmplY3QgSURzCisJdGhhdCBhcmUgZm91bmQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisKKy0tbm8tb2JqZWN0LW5hbWVzOjoKKwlPbmx5IHVzZWZ1bCB3aXRoIGAtLW9iamVjdHNgOyBkb2VzIG5vdCBwcmludCB0aGUgbmFtZXMgb2YgdGhlIG9iamVjdAorCUlEcyB0aGF0IGFyZSBmb3VuZC4gVGhpcyBpbnZlcnRzIGAtLW9iamVjdC1uYW1lc2AuIFRoaXMgZmxhZyBhbGxvd3MKKwl0aGUgb3V0cHV0IHRvIGJlIG1vcmUgZWFzaWx5IHBhcnNlZCBieSBjb21tYW5kcyBzdWNoIGFzCisJbGlua2dpdDpnaXQtY2F0LWZpbGVbMV0uCisKKy0tZmlsdGVyPTxmaWx0ZXItc3BlYz46OgorCU9ubHkgdXNlZnVsIHdpdGggb25lIG9mIHRoZSBgLS1vYmplY3RzKmA7IG9taXRzIG9iamVjdHMgKHVzdWFsbHkKKwlibG9icykgZnJvbSB0aGUgbGlzdCBvZiBwcmludGVkIG9iamVjdHMuICBUaGUgJzxmaWx0ZXItc3BlYz4nCisJbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworVGhlIGZvcm0gJy0tZmlsdGVyPWJsb2I6bm9uZScgb21pdHMgYWxsIGJsb2JzLgorKworVGhlIGZvcm0gJy0tZmlsdGVyPWJsb2I6bGltaXQ9PG4+W2ttZ10nIG9taXRzIGJsb2JzIGxhcmdlciB0aGFuIG4gYnl0ZXMKK29yIHVuaXRzLiAgbiBtYXkgYmUgemVyby4gIFRoZSBzdWZmaXhlcyBrLCBtLCBhbmQgZyBjYW4gYmUgdXNlZCB0byBuYW1lCit1bml0cyBpbiBLaUIsIE1pQiwgb3IgR2lCLiAgRm9yIGV4YW1wbGUsICdibG9iOmxpbWl0PTFrJyBpcyB0aGUgc2FtZQorYXMgJ2Jsb2I6bGltaXQ9MTAyNCcuCisrCitUaGUgZm9ybSAnLS1maWx0ZXI9c3BhcnNlOm9pZD08YmxvYi1pc2g+JyB1c2VzIGEgc3BhcnNlLWNoZWNrb3V0CitzcGVjaWZpY2F0aW9uIGNvbnRhaW5lZCBpbiB0aGUgYmxvYiAob3IgYmxvYi1leHByZXNzaW9uKSAnPGJsb2ItaXNoPicKK3RvIG9taXQgYmxvYnMgdGhhdCB3b3VsZCBub3QgYmUgbm90IHJlcXVpcmVkIGZvciBhIHNwYXJzZSBjaGVja291dCBvbgordGhlIHJlcXVlc3RlZCByZWZzLgorKworVGhlIGZvcm0gJy0tZmlsdGVyPXRyZWU6PGRlcHRoPicgb21pdHMgYWxsIGJsb2JzIGFuZCB0cmVlcyB3aG9zZSBkZXB0aAorZnJvbSB0aGUgcm9vdCB0cmVlIGlzID49IDxkZXB0aD4gKG1pbmltdW0gZGVwdGggaWYgYW4gb2JqZWN0IGlzIGxvY2F0ZWQKK2F0IG11bHRpcGxlIGRlcHRocyBpbiB0aGUgY29tbWl0cyB0cmF2ZXJzZWQpLiA8ZGVwdGg+PTAgd2lsbCBub3QgaW5jbHVkZQorYW55IHRyZWVzIG9yIGJsb2JzIHVubGVzcyBpbmNsdWRlZCBleHBsaWNpdGx5IGluIHRoZSBjb21tYW5kLWxpbmUgKG9yCitzdGFuZGFyZCBpbnB1dCB3aGVuIC0tc3RkaW4gaXMgdXNlZCkuIDxkZXB0aD49MSB3aWxsIGluY2x1ZGUgb25seSB0aGUKK3RyZWUgYW5kIGJsb2JzIHdoaWNoIGFyZSByZWZlcmVuY2VkIGRpcmVjdGx5IGJ5IGEgY29tbWl0IHJlYWNoYWJsZSBmcm9tCis8Y29tbWl0PiBvciBhbiBleHBsaWNpdGx5LWdpdmVuIG9iamVjdC4gPGRlcHRoPj0yIGlzIGxpa2UgPGRlcHRoPj0xCit3aGlsZSBhbHNvIGluY2x1ZGluZyB0cmVlcyBhbmQgYmxvYnMgb25lIG1vcmUgbGV2ZWwgcmVtb3ZlZCBmcm9tIGFuCitleHBsaWNpdGx5LWdpdmVuIGNvbW1pdCBvciB0cmVlLgorKworTm90ZSB0aGF0IHRoZSBmb3JtICctLWZpbHRlcj1zcGFyc2U6cGF0aD08cGF0aD4nIHRoYXQgd2FudHMgdG8gcmVhZAorZnJvbSBhbiBhcmJpdHJhcnkgcGF0aCBvbiB0aGUgZmlsZXN5c3RlbSBoYXMgYmVlbiBkcm9wcGVkIGZvciBzZWN1cml0eQorcmVhc29ucy4KKysKK011bHRpcGxlICctLWZpbHRlcj0nIGZsYWdzIGNhbiBiZSBzcGVjaWZpZWQgdG8gY29tYmluZSBmaWx0ZXJzLiBPbmx5CitvYmplY3RzIHdoaWNoIGFyZSBhY2NlcHRlZCBieSBldmVyeSBmaWx0ZXIgYXJlIGluY2x1ZGVkLgorKworVGhlIGZvcm0gJy0tZmlsdGVyPWNvbWJpbmU6PGZpbHRlcjE+KzxmaWx0ZXIyPisuLi48ZmlsdGVyTj4nIGNhbiBhbHNvIGJlCit1c2VkIHRvIGNvbWJpbmVkIHNldmVyYWwgZmlsdGVycywgYnV0IHRoaXMgaXMgaGFyZGVyIHRoYW4ganVzdCByZXBlYXRpbmcKK3RoZSAnLS1maWx0ZXInIGZsYWcgYW5kIGlzIHVzdWFsbHkgbm90IG5lY2Vzc2FyeS4gRmlsdGVycyBhcmUgam9pbmVkIGJ5Cisne3BsdXN9JyBhbmQgaW5kaXZpZHVhbCBmaWx0ZXJzIGFyZSAlLWVuY29kZWQgKGkuZS4gVVJMLWVuY29kZWQpLgorQmVzaWRlcyB0aGUgJ3twbHVzfScgYW5kICclJyBjaGFyYWN0ZXJzLCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlCityZXNlcnZlZCBhbmQgYWxzbyBtdXN0IGJlIGVuY29kZWQ6IGB+IUAjJF4mKigpW117fVw7Iiw8Pj9gKyYjMzk7JiM5NjsrCithcyB3ZWxsIGFzIGFsbCBjaGFyYWN0ZXJzIHdpdGggQVNDSUkgY29kZSAmbHQ7PSBgMHgyMGAsIHdoaWNoIGluY2x1ZGVzCitzcGFjZSBhbmQgbmV3bGluZS4KKysKK090aGVyIGFyYml0cmFyeSBjaGFyYWN0ZXJzIGNhbiBhbHNvIGJlIGVuY29kZWQuIEZvciBpbnN0YW5jZSwKKydjb21iaW5lOnRyZWU6MytibG9iOm5vbmUnIGFuZCAnY29tYmluZTp0cmVlJTNBMytibG9iJTNBbm9uZScgYXJlCitlcXVpdmFsZW50LgorCistLW5vLWZpbHRlcjo6CisJVHVybiBvZmYgYW55IHByZXZpb3VzIGAtLWZpbHRlcj1gIGFyZ3VtZW50LgorCistLWZpbHRlci1wcmludC1vbWl0dGVkOjoKKwlPbmx5IHVzZWZ1bCB3aXRoIGAtLWZpbHRlcj1gOyBwcmludHMgYSBsaXN0IG9mIHRoZSBvYmplY3RzIG9taXR0ZWQKKwlieSB0aGUgZmlsdGVyLiAgT2JqZWN0IElEcyBhcmUgcHJlZml4ZWQgd2l0aCBhIGBgficnIGNoYXJhY3Rlci4KKworLS1taXNzaW5nPTxtaXNzaW5nLWFjdGlvbj46OgorCUEgZGVidWcgb3B0aW9uIHRvIGhlbHAgd2l0aCBmdXR1cmUgInBhcnRpYWwgY2xvbmUiIGRldmVsb3BtZW50LgorCVRoaXMgb3B0aW9uIHNwZWNpZmllcyBob3cgbWlzc2luZyBvYmplY3RzIGFyZSBoYW5kbGVkLgorKworVGhlIGZvcm0gJy0tbWlzc2luZz1lcnJvcicgcmVxdWVzdHMgdGhhdCByZXYtbGlzdCBzdG9wIHdpdGggYW4gZXJyb3IgaWYKK2EgbWlzc2luZyBvYmplY3QgaXMgZW5jb3VudGVyZWQuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGFjdGlvbi4KKysKK1RoZSBmb3JtICctLW1pc3Npbmc9YWxsb3ctYW55JyB3aWxsIGFsbG93IG9iamVjdCB0cmF2ZXJzYWwgdG8gY29udGludWUKK2lmIGEgbWlzc2luZyBvYmplY3QgaXMgZW5jb3VudGVyZWQuICBNaXNzaW5nIG9iamVjdHMgd2lsbCBzaWxlbnRseSBiZQorb21pdHRlZCBmcm9tIHRoZSByZXN1bHRzLgorKworVGhlIGZvcm0gJy0tbWlzc2luZz1hbGxvdy1wcm9taXNvcicgaXMgbGlrZSAnYWxsb3ctYW55JywgYnV0IHdpbGwgb25seQorYWxsb3cgb2JqZWN0IHRyYXZlcnNhbCB0byBjb250aW51ZSBmb3IgRVhQRUNURUQgcHJvbWlzb3IgbWlzc2luZyBvYmplY3RzLgorVW5leHBlY3RlZCBtaXNzaW5nIG9iamVjdHMgd2lsbCByYWlzZSBhbiBlcnJvci4KKysKK1RoZSBmb3JtICctLW1pc3Npbmc9cHJpbnQnIGlzIGxpa2UgJ2FsbG93LWFueScsIGJ1dCB3aWxsIGFsc28gcHJpbnQgYQorbGlzdCBvZiB0aGUgbWlzc2luZyBvYmplY3RzLiAgT2JqZWN0IElEcyBhcmUgcHJlZml4ZWQgd2l0aCBhIGBgPycnIGNoYXJhY3Rlci4KKworLS1leGNsdWRlLXByb21pc29yLW9iamVjdHM6OgorCShGb3IgaW50ZXJuYWwgdXNlIG9ubHkuKSAgUHJlZmlsdGVyIG9iamVjdCB0cmF2ZXJzYWwgYXQKKwlwcm9taXNvciBib3VuZGFyeS4gIFRoaXMgaXMgdXNlZCB3aXRoIHBhcnRpYWwgY2xvbmUuICBUaGlzIGlzCisJc3Ryb25nZXIgdGhhbiBgLS1taXNzaW5nPWFsbG93LXByb21pc29yYCBiZWNhdXNlIGl0IGxpbWl0cyB0aGUKKwl0cmF2ZXJzYWwsIHJhdGhlciB0aGFuIGp1c3Qgc2lsZW5jaW5nIGVycm9ycyBhYm91dCBtaXNzaW5nCisJb2JqZWN0cy4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCistLW5vLXdhbGtbPShzb3J0ZWR8dW5zb3J0ZWQpXTo6CisJT25seSBzaG93IHRoZSBnaXZlbiBjb21taXRzLCBidXQgZG8gbm90IHRyYXZlcnNlIHRoZWlyIGFuY2VzdG9ycy4KKwlUaGlzIGhhcyBubyBlZmZlY3QgaWYgYSByYW5nZSBpcyBzcGVjaWZpZWQuIElmIHRoZSBhcmd1bWVudAorCWB1bnNvcnRlZGAgaXMgZ2l2ZW4sIHRoZSBjb21taXRzIGFyZSBzaG93biBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlCisJZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gT3RoZXJ3aXNlIChpZiBgc29ydGVkYCBvciBubyBhcmd1bWVudAorCXdhcyBnaXZlbiksIHRoZSBjb21taXRzIGFyZSBzaG93biBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIKKwlieSBjb21taXQgdGltZS4KKwlDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1ncmFwaGAuCisKKy0tZG8td2Fsazo6CisJT3ZlcnJpZGVzIGEgcHJldmlvdXMgYC0tbm8td2Fsa2AuCitlbmRpZjo6Z2l0LXNob3J0bG9nW10KKworaWZuZGVmOjpnaXQtc2hvcnRsb2dbXQorQ29tbWl0IEZvcm1hdHRpbmcKK35+fn5+fn5+fn5+fn5+fn5+CisKK2lmZGVmOjpnaXQtcmV2LWxpc3RbXQorVXNpbmcgdGhlc2Ugb3B0aW9ucywgbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0gd2lsbCBhY3Qgc2ltaWxhciB0byB0aGUKK21vcmUgc3BlY2lhbGl6ZWQgZmFtaWx5IG9mIGNvbW1pdCBsb2cgdG9vbHM6IGxpbmtnaXQ6Z2l0LWxvZ1sxXSwKK2xpbmtnaXQ6Z2l0LXNob3dbMV0sIGFuZCBsaW5rZ2l0OmdpdC13aGF0Y2hhbmdlZFsxXQorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCisKK2luY2x1ZGU6OnByZXR0eS1vcHRpb25zLnR4dFtdCisKKy0tcmVsYXRpdmUtZGF0ZTo6CisJU3lub255bSBmb3IgYC0tZGF0ZT1yZWxhdGl2ZWAuCisKKy0tZGF0ZT08Zm9ybWF0Pjo6CisJT25seSB0YWtlcyBlZmZlY3QgZm9yIGRhdGVzIHNob3duIGluIGh1bWFuLXJlYWRhYmxlIGZvcm1hdCwgc3VjaAorCWFzIHdoZW4gdXNpbmcgYC0tcHJldHR5YC4gYGxvZy5kYXRlYCBjb25maWcgdmFyaWFibGUgc2V0cyBhIGRlZmF1bHQKKwl2YWx1ZSBmb3IgdGhlIGxvZyBjb21tYW5kJ3MgYC0tZGF0ZWAgb3B0aW9uLiBCeSBkZWZhdWx0LCBkYXRlcworCWFyZSBzaG93biBpbiB0aGUgb3JpZ2luYWwgdGltZSB6b25lIChlaXRoZXIgY29tbWl0dGVyJ3Mgb3IKKwlhdXRob3IncykuIElmIGAtbG9jYWxgIGlzIGFwcGVuZGVkIHRvIHRoZSBmb3JtYXQgKGUuZy4sCisJYGlzby1sb2NhbGApLCB0aGUgdXNlcidzIGxvY2FsIHRpbWUgem9uZSBpcyB1c2VkIGluc3RlYWQuCisrCistLQorYC0tZGF0ZT1yZWxhdGl2ZWAgc2hvd3MgZGF0ZXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZSwKK2UuZy4gYGAyIGhvdXJzIGFnbycnLiBUaGUgYC1sb2NhbGAgb3B0aW9uIGhhcyBubyBlZmZlY3QgZm9yCitgLS1kYXRlPXJlbGF0aXZlYC4KKworYC0tZGF0ZT1sb2NhbGAgaXMgYW4gYWxpYXMgZm9yIGAtLWRhdGU9ZGVmYXVsdC1sb2NhbGAuCisKK2AtLWRhdGU9aXNvYCAob3IgYC0tZGF0ZT1pc284NjAxYCkgc2hvd3MgdGltZXN0YW1wcyBpbiBhIElTTyA4NjAxLWxpa2UgZm9ybWF0LgorVGhlIGRpZmZlcmVuY2VzIHRvIHRoZSBzdHJpY3QgSVNPIDg2MDEgZm9ybWF0IGFyZToKKworCS0gYSBzcGFjZSBpbnN0ZWFkIG9mIHRoZSBgVGAgZGF0ZS90aW1lIGRlbGltaXRlcgorCS0gYSBzcGFjZSBiZXR3ZWVuIHRpbWUgYW5kIHRpbWUgem9uZQorCS0gbm8gY29sb24gYmV0d2VlbiBob3VycyBhbmQgbWludXRlcyBvZiB0aGUgdGltZSB6b25lCisKK2AtLWRhdGU9aXNvLXN0cmljdGAgKG9yIGAtLWRhdGU9aXNvODYwMS1zdHJpY3RgKSBzaG93cyB0aW1lc3RhbXBzIGluIHN0cmljdAorSVNPIDg2MDEgZm9ybWF0LgorCitgLS1kYXRlPXJmY2AgKG9yIGAtLWRhdGU9cmZjMjgyMmApIHNob3dzIHRpbWVzdGFtcHMgaW4gUkZDIDI4MjIKK2Zvcm1hdCwgb2Z0ZW4gZm91bmQgaW4gZW1haWwgbWVzc2FnZXMuCisKK2AtLWRhdGU9c2hvcnRgIHNob3dzIG9ubHkgdGhlIGRhdGUsIGJ1dCBub3QgdGhlIHRpbWUsIGluIGBZWVlZLU1NLUREYCBmb3JtYXQuCisKK2AtLWRhdGU9cmF3YCBzaG93cyB0aGUgZGF0ZSBhcyBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAoMTk3MC0wMS0wMQorMDA6MDA6MDAgVVRDKSwgZm9sbG93ZWQgYnkgYSBzcGFjZSwgYW5kIHRoZW4gdGhlIHRpbWV6b25lIGFzIGFuIG9mZnNldAorZnJvbSBVVEMgKGEgYCtgIG9yIGAtYCB3aXRoIGZvdXIgZGlnaXRzOyB0aGUgZmlyc3QgdHdvIGFyZSBob3VycywgYW5kCit0aGUgc2Vjb25kIHR3byBhcmUgbWludXRlcykuIEkuZS4sIGFzIGlmIHRoZSB0aW1lc3RhbXAgd2VyZSBmb3JtYXR0ZWQKK3dpdGggYHN0cmZ0aW1lKCIlcyAleiIpYCkuCitOb3RlIHRoYXQgdGhlIGAtbG9jYWxgIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIHNlY29uZHMtc2luY2UtZXBvY2gKK3ZhbHVlICh3aGljaCBpcyBhbHdheXMgbWVhc3VyZWQgaW4gVVRDKSwgYnV0IGRvZXMgc3dpdGNoIHRoZSBhY2NvbXBhbnlpbmcKK3RpbWV6b25lIHZhbHVlLgorCitgLS1kYXRlPWh1bWFuYCBzaG93cyB0aGUgdGltZXpvbmUgaWYgdGhlIHRpbWV6b25lIGRvZXMgbm90IG1hdGNoIHRoZQorY3VycmVudCB0aW1lLXpvbmUsIGFuZCBkb2Vzbid0IHByaW50IHRoZSB3aG9sZSBkYXRlIGlmIHRoYXQgbWF0Y2hlcworKGllIHNraXAgcHJpbnRpbmcgeWVhciBmb3IgZGF0ZXMgdGhhdCBhcmUgInRoaXMgeWVhciIsIGJ1dCBhbHNvIHNraXAKK3RoZSB3aG9sZSBkYXRlIGl0c2VsZiBpZiBpdCdzIGluIHRoZSBsYXN0IGZldyBkYXlzIGFuZCB3ZSBjYW4ganVzdCBzYXkKK3doYXQgd2Vla2RheSBpdCB3YXMpLiAgRm9yIG9sZGVyIGRhdGVzIHRoZSBob3VyIGFuZCBtaW51dGUgaXMgYWxzbworb21pdHRlZC4KKworYC0tZGF0ZT11bml4YCBzaG93cyB0aGUgZGF0ZSBhcyBhIFVuaXggZXBvY2ggdGltZXN0YW1wIChzZWNvbmRzIHNpbmNlCisxOTcwKS4gIEFzIHdpdGggYC0tcmF3YCwgdGhpcyBpcyBhbHdheXMgaW4gVVRDIGFuZCB0aGVyZWZvcmUgYC1sb2NhbGAKK2hhcyBubyBlZmZlY3QuCisKK2AtLWRhdGU9Zm9ybWF0Oi4uLmAgZmVlZHMgdGhlIGZvcm1hdCBgLi4uYCB0byB5b3VyIHN5c3RlbSBgc3RyZnRpbWVgLAorZXhjZXB0IGZvciAleiBhbmQgJVosIHdoaWNoIGFyZSBoYW5kbGVkIGludGVybmFsbHkuCitVc2UgYC0tZGF0ZT1mb3JtYXQ6JWNgIHRvIHNob3cgdGhlIGRhdGUgaW4geW91ciBzeXN0ZW0gbG9jYWxlJ3MKK3ByZWZlcnJlZCBmb3JtYXQuICBTZWUgdGhlIGBzdHJmdGltZWAgbWFudWFsIGZvciBhIGNvbXBsZXRlIGxpc3Qgb2YKK2Zvcm1hdCBwbGFjZWhvbGRlcnMuIFdoZW4gdXNpbmcgYC1sb2NhbGAsIHRoZSBjb3JyZWN0IHN5bnRheCBpcworYC0tZGF0ZT1mb3JtYXQtbG9jYWw6Li4uYC4KKworYC0tZGF0ZT1kZWZhdWx0YCBpcyB0aGUgZGVmYXVsdCBmb3JtYXQsIGFuZCBpcyBzaW1pbGFyIHRvCitgLS1kYXRlPXJmYzI4MjJgLCB3aXRoIGEgZmV3IGV4Y2VwdGlvbnM6CistLQorCS0gdGhlcmUgaXMgbm8gY29tbWEgYWZ0ZXIgdGhlIGRheS1vZi13ZWVrCisKKwktIHRoZSB0aW1lIHpvbmUgaXMgb21pdHRlZCB3aGVuIHRoZSBsb2NhbCB0aW1lIHpvbmUgaXMgdXNlZAorCitpZmRlZjo6Z2l0LXJldi1saXN0W10KKy0taGVhZGVyOjoKKwlQcmludCB0aGUgY29udGVudHMgb2YgdGhlIGNvbW1pdCBpbiByYXctZm9ybWF0OyBlYWNoIHJlY29yZCBpcworCXNlcGFyYXRlZCB3aXRoIGEgTlVMIGNoYXJhY3Rlci4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCistLXBhcmVudHM6OgorCVByaW50IGFsc28gdGhlIHBhcmVudHMgb2YgdGhlIGNvbW1pdCAoaW4gdGhlIGZvcm0gImNvbW1pdCBwYXJlbnQuLi4iKS4KKwlBbHNvIGVuYWJsZXMgcGFyZW50IHJld3JpdGluZywgc2VlICdIaXN0b3J5IFNpbXBsaWZpY2F0aW9uJyBhYm92ZS4KKworLS1jaGlsZHJlbjo6CisJUHJpbnQgYWxzbyB0aGUgY2hpbGRyZW4gb2YgdGhlIGNvbW1pdCAoaW4gdGhlIGZvcm0gImNvbW1pdCBjaGlsZC4uLiIpLgorCUFsc28gZW5hYmxlcyBwYXJlbnQgcmV3cml0aW5nLCBzZWUgJ0hpc3RvcnkgU2ltcGxpZmljYXRpb24nIGFib3ZlLgorCitpZmRlZjo6Z2l0LXJldi1saXN0W10KKy0tdGltZXN0YW1wOjoKKwlQcmludCB0aGUgcmF3IGNvbW1pdCB0aW1lc3RhbXAuCitlbmRpZjo6Z2l0LXJldi1saXN0W10KKworLS1sZWZ0LXJpZ2h0OjoKKwlNYXJrIHdoaWNoIHNpZGUgb2YgYSBzeW1tZXRyaWMgZGlmZmVyZW5jZSBhIGNvbW1pdCBpcyByZWFjaGFibGUgZnJvbS4KKwlDb21taXRzIGZyb20gdGhlIGxlZnQgc2lkZSBhcmUgcHJlZml4ZWQgd2l0aCBgPGAgYW5kIHRob3NlIGZyb20KKwl0aGUgcmlnaHQgd2l0aCBgPmAuICBJZiBjb21iaW5lZCB3aXRoIGAtLWJvdW5kYXJ5YCwgdGhvc2UKKwljb21taXRzIGFyZSBwcmVmaXhlZCB3aXRoIGAtYC4KKysKK0ZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0aGlzIHRvcG9sb2d5OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgIHktLS1iLS0tYiAgYnJhbmNoIEIKKwkgICAgLyBcIC8KKwkgICAvICAgLgorCSAgLyAgIC8gXAorCSBvLS0teC0tLWEtLS1hICBicmFuY2ggQQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK3lvdSB3b3VsZCBnZXQgYW4gb3V0cHV0IGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJJCBnaXQgcmV2LWxpc3QgLS1sZWZ0LXJpZ2h0IC0tYm91bmRhcnkgLS1wcmV0dHk9b25lbGluZSBBLi4uQgorCisJPmJiYmJiYmIuLi4gM3JkIG9uIGIKKwk+YmJiYmJiYi4uLiAybmQgb24gYgorCTxhYWFhYWFhLi4uIDNyZCBvbiBhCisJPGFhYWFhYWEuLi4gMm5kIG9uIGEKKwkteXl5eXl5eS4uLiAxc3Qgb24gYgorCS14eHh4eHh4Li4uIDFzdCBvbiBhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLWdyYXBoOjoKKwlEcmF3IGEgdGV4dC1iYXNlZCBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1pdCBoaXN0b3J5CisJb24gdGhlIGxlZnQgaGFuZCBzaWRlIG9mIHRoZSBvdXRwdXQuICBUaGlzIG1heSBjYXVzZSBleHRyYSBsaW5lcworCXRvIGJlIHByaW50ZWQgaW4gYmV0d2VlbiBjb21taXRzLCBpbiBvcmRlciBmb3IgdGhlIGdyYXBoIGhpc3RvcnkKKwl0byBiZSBkcmF3biBwcm9wZXJseS4KKwlDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1uby13YWxrYC4KKysKK1RoaXMgZW5hYmxlcyBwYXJlbnQgcmV3cml0aW5nLCBzZWUgJ0hpc3RvcnkgU2ltcGxpZmljYXRpb24nIGFib3ZlLgorKworVGhpcyBpbXBsaWVzIHRoZSBgLS10b3BvLW9yZGVyYCBvcHRpb24gYnkgZGVmYXVsdCwgYnV0IHRoZQorYC0tZGF0ZS1vcmRlcmAgb3B0aW9uIG1heSBhbHNvIGJlIHNwZWNpZmllZC4KKworLS1zaG93LWxpbmVhci1icmVha1s9PGJhcnJpZXI+XTo6CisJV2hlbiAtLWdyYXBoIGlzIG5vdCB1c2VkLCBhbGwgaGlzdG9yeSBicmFuY2hlcyBhcmUgZmxhdHRlbmVkCisJd2hpY2ggY2FuIG1ha2UgaXQgaGFyZCB0byBzZWUgdGhhdCB0aGUgdHdvIGNvbnNlY3V0aXZlIGNvbW1pdHMKKwlkbyBub3QgYmVsb25nIHRvIGEgbGluZWFyIGJyYW5jaC4gVGhpcyBvcHRpb24gcHV0cyBhIGJhcnJpZXIKKwlpbiBiZXR3ZWVuIHRoZW0gaW4gdGhhdCBjYXNlLiBJZiBgPGJhcnJpZXI+YCBpcyBzcGVjaWZpZWQsIGl0CisJaXMgdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgc2hvd24gaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBvbmUuCisKK2lmZGVmOjpnaXQtcmV2LWxpc3RbXQorLS1jb3VudDo6CisJUHJpbnQgYSBudW1iZXIgc3RhdGluZyBob3cgbWFueSBjb21taXRzIHdvdWxkIGhhdmUgYmVlbgorCWxpc3RlZCwgYW5kIHN1cHByZXNzIGFsbCBvdGhlciBvdXRwdXQuICBXaGVuIHVzZWQgdG9nZXRoZXIKKwl3aXRoIGAtLWxlZnQtcmlnaHRgLCBpbnN0ZWFkIHByaW50IHRoZSBjb3VudHMgZm9yIGxlZnQgYW5kCisJcmlnaHQgY29tbWl0cywgc2VwYXJhdGVkIGJ5IGEgdGFiLiBXaGVuIHVzZWQgdG9nZXRoZXIgd2l0aAorCWAtLWNoZXJyeS1tYXJrYCwgb21pdCBwYXRjaCBlcXVpdmFsZW50IGNvbW1pdHMgZnJvbSB0aGVzZQorCWNvdW50cyBhbmQgcHJpbnQgdGhlIGNvdW50IGZvciBlcXVpdmFsZW50IGNvbW1pdHMgc2VwYXJhdGVkCisJYnkgYSB0YWIuCitlbmRpZjo6Z2l0LXJldi1saXN0W10KK2VuZGlmOjpnaXQtc2hvcnRsb2dbXQorCitpZm5kZWY6OmdpdC1zaG9ydGxvZ1tdCitpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCitEaWZmIEZvcm1hdHRpbmcKK35+fn5+fn5+fn5+fn5+fgorCitMaXN0ZWQgYmVsb3cgYXJlIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBmb3JtYXR0aW5nIG9mIGRpZmYgb3V0cHV0LgorU29tZSBvZiB0aGVtIGFyZSBzcGVjaWZpYyB0byBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSwgaG93ZXZlciBvdGhlciBkaWZmCitvcHRpb25zIG1heSBiZSBnaXZlbi4gU2VlIGxpbmtnaXQ6Z2l0LWRpZmYtZmlsZXNbMV0gZm9yIG1vcmUgb3B0aW9ucy4KKworLWM6OgorCVdpdGggdGhpcyBvcHRpb24sIGRpZmYgb3V0cHV0IGZvciBhIG1lcmdlIGNvbW1pdAorCXNob3dzIHRoZSBkaWZmZXJlbmNlcyBmcm9tIGVhY2ggb2YgdGhlIHBhcmVudHMgdG8gdGhlIG1lcmdlIHJlc3VsdAorCXNpbXVsdGFuZW91c2x5IGluc3RlYWQgb2Ygc2hvd2luZyBwYWlyd2lzZSBkaWZmIGJldHdlZW4gYSBwYXJlbnQKKwlhbmQgdGhlIHJlc3VsdCBvbmUgYXQgYSB0aW1lLiBGdXJ0aGVybW9yZSwgaXQgbGlzdHMgb25seSBmaWxlcworCXdoaWNoIHdlcmUgbW9kaWZpZWQgZnJvbSBhbGwgcGFyZW50cy4KKworLS1jYzo6CisJVGhpcyBmbGFnIGltcGxpZXMgdGhlIGAtY2Agb3B0aW9uIGFuZCBmdXJ0aGVyIGNvbXByZXNzZXMgdGhlCisJcGF0Y2ggb3V0cHV0IGJ5IG9taXR0aW5nIHVuaW50ZXJlc3RpbmcgaHVua3Mgd2hvc2UgY29udGVudHMgaW4KKwl0aGUgcGFyZW50cyBoYXZlIG9ubHkgdHdvIHZhcmlhbnRzIGFuZCB0aGUgbWVyZ2UgcmVzdWx0IHBpY2tzCisJb25lIG9mIHRoZW0gd2l0aG91dCBtb2RpZmljYXRpb24uCisKKy0tY29tYmluZWQtYWxsLXBhdGhzOjoKKwlUaGlzIGZsYWcgY2F1c2VzIGNvbWJpbmVkIGRpZmZzICh1c2VkIGZvciBtZXJnZSBjb21taXRzKSB0bworCWxpc3QgdGhlIG5hbWUgb2YgdGhlIGZpbGUgZnJvbSBhbGwgcGFyZW50cy4gIEl0IHRodXMgb25seSBoYXMKKwllZmZlY3Qgd2hlbiAtYyBvciAtLWNjIGFyZSBzcGVjaWZpZWQsIGFuZCBpcyBsaWtlbHkgb25seQorCXVzZWZ1bCBpZiBmaWxlbmFtZSBjaGFuZ2VzIGFyZSBkZXRlY3RlZCAoaS5lLiB3aGVuIGVpdGhlcgorCXJlbmFtZSBvciBjb3B5IGRldGVjdGlvbiBoYXZlIGJlZW4gcmVxdWVzdGVkKS4KKworLW06OgorCVRoaXMgZmxhZyBtYWtlcyB0aGUgbWVyZ2UgY29tbWl0cyBzaG93IHRoZSBmdWxsIGRpZmYgbGlrZQorCXJlZ3VsYXIgY29tbWl0czsgZm9yIGVhY2ggbWVyZ2UgcGFyZW50LCBhIHNlcGFyYXRlIGxvZyBlbnRyeQorCWFuZCBkaWZmIGlzIGdlbmVyYXRlZC4gQW4gZXhjZXB0aW9uIGlzIHRoYXQgb25seSBkaWZmIGFnYWluc3QKKwl0aGUgZmlyc3QgcGFyZW50IGlzIHNob3duIHdoZW4gYC0tZmlyc3QtcGFyZW50YCBvcHRpb24gaXMgZ2l2ZW47CisJaW4gdGhhdCBjYXNlLCB0aGUgb3V0cHV0IHJlcHJlc2VudHMgdGhlIGNoYW5nZXMgdGhlIG1lcmdlCisJYnJvdWdodCBfaW50b18gdGhlIHRoZW4tY3VycmVudCBicmFuY2guCisKKy1yOjoKKwlTaG93IHJlY3Vyc2l2ZSBkaWZmcy4KKworLXQ6OgorCVNob3cgdGhlIHRyZWUgb2JqZWN0cyBpbiB0aGUgZGlmZiBvdXRwdXQuIFRoaXMgaW1wbGllcyBgLXJgLgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCitlbmRpZjo6Z2l0LXNob3J0bG9nW10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcmV2aXNpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vcmV2aXNpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWQ5NTA2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0CkBAIC0wLDAgKzEsMzc3IEBACitTUEVDSUZZSU5HIFJFVklTSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSByZXZpc2lvbiBwYXJhbWV0ZXIgJzxyZXY+JyB0eXBpY2FsbHksIGJ1dCBub3QgbmVjZXNzYXJpbHksIG5hbWVzIGEKK2NvbW1pdCBvYmplY3QuICBJdCB1c2VzIHdoYXQgaXMgY2FsbGVkIGFuICdleHRlbmRlZCBTSEEtMScKK3N5bnRheC4gIEhlcmUgYXJlIHZhcmlvdXMgd2F5cyB0byBzcGVsbCBvYmplY3QgbmFtZXMuICBUaGUKK29uZXMgbGlzdGVkIG5lYXIgdGhlIGVuZCBvZiB0aGlzIGxpc3QgbmFtZSB0cmVlcyBhbmQKK2Jsb2JzIGNvbnRhaW5lZCBpbiBhIGNvbW1pdC4KKworTk9URTogVGhpcyBkb2N1bWVudCBzaG93cyB0aGUgInJhdyIgc3ludGF4IGFzIHNlZW4gYnkgZ2l0LiBUaGUgc2hlbGwKK2FuZCBvdGhlciBVSXMgbWlnaHQgcmVxdWlyZSBhZGRpdGlvbmFsIHF1b3RpbmcgdG8gcHJvdGVjdCBzcGVjaWFsCitjaGFyYWN0ZXJzIGFuZCB0byBhdm9pZCB3b3JkIHNwbGl0dGluZy4KKworJzxzaGExPicsIGUuZy4gJ2RhZTg2ZTE5NTBiMTI3N2U1NDVjZWUxODA1NTE3NTAwMjljZmU3MzUnLCAnZGFlODZlJzo6CisgIFRoZSBmdWxsIFNIQS0xIG9iamVjdCBuYW1lICg0MC1ieXRlIGhleGFkZWNpbWFsIHN0cmluZyksIG9yCisgIGEgbGVhZGluZyBzdWJzdHJpbmcgdGhhdCBpcyB1bmlxdWUgd2l0aGluIHRoZSByZXBvc2l0b3J5LgorICBFLmcuIGRhZTg2ZTE5NTBiMTI3N2U1NDVjZWUxODA1NTE3NTAwMjljZmU3MzUgYW5kIGRhZTg2ZSBib3RoCisgIG5hbWUgdGhlIHNhbWUgY29tbWl0IG9iamVjdCBpZiB0aGVyZSBpcyBubyBvdGhlciBvYmplY3QgaW4KKyAgeW91ciByZXBvc2l0b3J5IHdob3NlIG9iamVjdCBuYW1lIHN0YXJ0cyB3aXRoIGRhZTg2ZS4KKworJzxkZXNjcmliZU91dHB1dD4nLCBlLmcuICd2MS43LjQuMi02NzktZzNiZWU3ZmInOjoKKyAgT3V0cHV0IGZyb20gYGdpdCBkZXNjcmliZWA7IGkuZS4gYSBjbG9zZXN0IHRhZywgb3B0aW9uYWxseQorICBmb2xsb3dlZCBieSBhIGRhc2ggYW5kIGEgbnVtYmVyIG9mIGNvbW1pdHMsIGZvbGxvd2VkIGJ5IGEgZGFzaCwgYQorICAnZycsIGFuZCBhbiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZS4KKworJzxyZWZuYW1lPicsIGUuZy4gJ21hc3RlcicsICdoZWFkcy9tYXN0ZXInLCAncmVmcy9oZWFkcy9tYXN0ZXInOjoKKyAgQSBzeW1ib2xpYyByZWYgbmFtZS4gIEUuZy4gJ21hc3RlcicgdHlwaWNhbGx5IG1lYW5zIHRoZSBjb21taXQKKyAgb2JqZWN0IHJlZmVyZW5jZWQgYnkgJ3JlZnMvaGVhZHMvbWFzdGVyJy4gIElmIHlvdQorICBoYXBwZW4gdG8gaGF2ZSBib3RoICdoZWFkcy9tYXN0ZXInIGFuZCAndGFncy9tYXN0ZXInLCB5b3UgY2FuCisgIGV4cGxpY2l0bHkgc2F5ICdoZWFkcy9tYXN0ZXInIHRvIHRlbGwgR2l0IHdoaWNoIG9uZSB5b3UgbWVhbi4KKyAgV2hlbiBhbWJpZ3VvdXMsIGEgJzxyZWZuYW1lPicgaXMgZGlzYW1iaWd1YXRlZCBieSB0YWtpbmcgdGhlCisgIGZpcnN0IG1hdGNoIGluIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisKKyAgLiBJZiAnJEdJVF9ESVIvPHJlZm5hbWU+JyBleGlzdHMsIHRoYXQgaXMgd2hhdCB5b3UgbWVhbiAodGhpcyBpcyB1c3VhbGx5CisgICAgdXNlZnVsIG9ubHkgZm9yIGBIRUFEYCwgYEZFVENIX0hFQURgLCBgT1JJR19IRUFEYCwgYE1FUkdFX0hFQURgCisgICAgYW5kIGBDSEVSUllfUElDS19IRUFEYCk7CisKKyAgLiBvdGhlcndpc2UsICdyZWZzLzxyZWZuYW1lPicgaWYgaXQgZXhpc3RzOworCisgIC4gb3RoZXJ3aXNlLCAncmVmcy90YWdzLzxyZWZuYW1lPicgaWYgaXQgZXhpc3RzOworCisgIC4gb3RoZXJ3aXNlLCAncmVmcy9oZWFkcy88cmVmbmFtZT4nIGlmIGl0IGV4aXN0czsKKworICAuIG90aGVyd2lzZSwgJ3JlZnMvcmVtb3Rlcy88cmVmbmFtZT4nIGlmIGl0IGV4aXN0czsKKworICAuIG90aGVyd2lzZSwgJ3JlZnMvcmVtb3Rlcy88cmVmbmFtZT4vSEVBRCcgaWYgaXQgZXhpc3RzLgorKworYEhFQURgIG5hbWVzIHRoZSBjb21taXQgb24gd2hpY2ggeW91IGJhc2VkIHRoZSBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUuCitgRkVUQ0hfSEVBRGAgcmVjb3JkcyB0aGUgYnJhbmNoIHdoaWNoIHlvdSBmZXRjaGVkIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeQord2l0aCB5b3VyIGxhc3QgYGdpdCBmZXRjaGAgaW52b2NhdGlvbi4KK2BPUklHX0hFQURgIGlzIGNyZWF0ZWQgYnkgY29tbWFuZHMgdGhhdCBtb3ZlIHlvdXIgYEhFQURgIGluIGEgZHJhc3RpYword2F5LCB0byByZWNvcmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBgSEVBRGAgYmVmb3JlIHRoZWlyIG9wZXJhdGlvbiwgc28gdGhhdAoreW91IGNhbiBlYXNpbHkgY2hhbmdlIHRoZSB0aXAgb2YgdGhlIGJyYW5jaCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgeW91IHJhbgordGhlbS4KK2BNRVJHRV9IRUFEYCByZWNvcmRzIHRoZSBjb21taXQocykgd2hpY2ggeW91IGFyZSBtZXJnaW5nIGludG8geW91ciBicmFuY2gKK3doZW4geW91IHJ1biBgZ2l0IG1lcmdlYC4KK2BDSEVSUllfUElDS19IRUFEYCByZWNvcmRzIHRoZSBjb21taXQgd2hpY2ggeW91IGFyZSBjaGVycnktcGlja2luZword2hlbiB5b3UgcnVuIGBnaXQgY2hlcnJ5LXBpY2tgLgorKworTm90ZSB0aGF0IGFueSBvZiB0aGUgJ3JlZnMvKicgY2FzZXMgYWJvdmUgbWF5IGNvbWUgZWl0aGVyIGZyb20KK3RoZSBgJEdJVF9ESVIvcmVmc2AgZGlyZWN0b3J5IG9yIGZyb20gdGhlIGAkR0lUX0RJUi9wYWNrZWQtcmVmc2AgZmlsZS4KK1doaWxlIHRoZSByZWYgbmFtZSBlbmNvZGluZyBpcyB1bnNwZWNpZmllZCwgVVRGLTggaXMgcHJlZmVycmVkIGFzCitzb21lIG91dHB1dCBwcm9jZXNzaW5nIG1heSBhc3N1bWUgcmVmIG5hbWVzIGluIFVURi04LgorCisnQCc6OgorICAnQCcgYWxvbmUgaXMgYSBzaG9ydGN1dCBmb3IgYEhFQURgLgorCisnWzxyZWZuYW1lPl1AezxkYXRlPn0nLCBlLmcuICdtYXN0ZXJAXHt5ZXN0ZXJkYXlcfScsICdIRUFEQHs1IG1pbnV0ZXMgYWdvfSc6OgorICBBIHJlZiBmb2xsb3dlZCBieSB0aGUgc3VmZml4ICdAJyB3aXRoIGEgZGF0ZSBzcGVjaWZpY2F0aW9uCisgIGVuY2xvc2VkIGluIGEgYnJhY2UKKyAgcGFpciAoZS5nLiAnXHt5ZXN0ZXJkYXlcfScsICd7MSBtb250aCAyIHdlZWtzIDMgZGF5cyAxIGhvdXIgMQorICBzZWNvbmQgYWdvfScgb3IgJ3sxOTc5LTAyLTI2IDE4OjMwOjAwfScpIHNwZWNpZmllcyB0aGUgdmFsdWUKKyAgb2YgdGhlIHJlZiBhdCBhIHByaW9yIHBvaW50IGluIHRpbWUuICBUaGlzIHN1ZmZpeCBtYXkgb25seSBiZQorICB1c2VkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhIHJlZiBuYW1lIGFuZCB0aGUgcmVmIG11c3QgaGF2ZSBhbgorICBleGlzdGluZyBsb2cgKCckR0lUX0RJUi9sb2dzLzxyZWY+JykuIE5vdGUgdGhhdCB0aGlzIGxvb2tzIHVwIHRoZSBzdGF0ZQorICBvZiB5b3VyICpsb2NhbCogcmVmIGF0IGEgZ2l2ZW4gdGltZTsgZS5nLiwgd2hhdCB3YXMgaW4geW91ciBsb2NhbAorICAnbWFzdGVyJyBicmFuY2ggbGFzdCB3ZWVrLiBJZiB5b3Ugd2FudCB0byBsb29rIGF0IGNvbW1pdHMgbWFkZSBkdXJpbmcKKyAgY2VydGFpbiB0aW1lcywgc2VlIGAtLXNpbmNlYCBhbmQgYC0tdW50aWxgLgorCisnPHJlZm5hbWU+QHs8bj59JywgZS5nLiAnbWFzdGVyQFx7MVx9Jzo6CisgIEEgcmVmIGZvbGxvd2VkIGJ5IHRoZSBzdWZmaXggJ0AnIHdpdGggYW4gb3JkaW5hbCBzcGVjaWZpY2F0aW9uCisgIGVuY2xvc2VkIGluIGEgYnJhY2UgcGFpciAoZS5nLiAnXHsxXH0nLCAnXHsxNVx9Jykgc3BlY2lmaWVzCisgIHRoZSBuLXRoIHByaW9yIHZhbHVlIG9mIHRoYXQgcmVmLiAgRm9yIGV4YW1wbGUgJ21hc3RlckBcezFcfScKKyAgaXMgdGhlIGltbWVkaWF0ZSBwcmlvciB2YWx1ZSBvZiAnbWFzdGVyJyB3aGlsZSAnbWFzdGVyQFx7NVx9JworICBpcyB0aGUgNXRoIHByaW9yIHZhbHVlIG9mICdtYXN0ZXInLiBUaGlzIHN1ZmZpeCBtYXkgb25seSBiZSB1c2VkCisgIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhIHJlZiBuYW1lIGFuZCB0aGUgcmVmIG11c3QgaGF2ZSBhbiBleGlzdGluZworICBsb2cgKCckR0lUX0RJUi9sb2dzLzxyZWZuYW1lPicpLgorCisnQHs8bj59JywgZS5nLiAnQFx7MVx9Jzo6CisgIFlvdSBjYW4gdXNlIHRoZSAnQCcgY29uc3RydWN0IHdpdGggYW4gZW1wdHkgcmVmIHBhcnQgdG8gZ2V0IGF0IGEKKyAgcmVmbG9nIGVudHJ5IG9mIHRoZSBjdXJyZW50IGJyYW5jaC4gRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgb24KKyAgYnJhbmNoICdibGFibGEnIHRoZW4gJ0BcezFcfScgbWVhbnMgdGhlIHNhbWUgYXMgJ2JsYWJsYUBcezFcfScuCisKKydAey08bj59JywgZS5nLiAnQHstMX0nOjoKKyAgVGhlIGNvbnN0cnVjdCAnQHstPG4+fScgbWVhbnMgdGhlIDxuPnRoIGJyYW5jaC9jb21taXQgY2hlY2tlZCBvdXQKKyAgYmVmb3JlIHRoZSBjdXJyZW50IG9uZS4KKworJ1s8YnJhbmNobmFtZT5dQFx7dXBzdHJlYW1cfScsIGUuZy4gJ21hc3RlckBce3Vwc3RyZWFtXH0nLCAnQFx7dVx9Jzo6CisgIFRoZSBzdWZmaXggJ0Bce3Vwc3RyZWFtXH0nIHRvIGEgYnJhbmNobmFtZSAoc2hvcnQgZm9ybSAnPGJyYW5jaG5hbWU+QFx7dVx9JykKKyAgcmVmZXJzIHRvIHRoZSBicmFuY2ggdGhhdCB0aGUgYnJhbmNoIHNwZWNpZmllZCBieSBicmFuY2huYW1lIGlzIHNldCB0byBidWlsZCBvbgorICB0b3Agb2YgKGNvbmZpZ3VyZWQgd2l0aCBgYnJhbmNoLjxuYW1lPi5yZW1vdGVgIGFuZAorICBgYnJhbmNoLjxuYW1lPi5tZXJnZWApLiAgQSBtaXNzaW5nIGJyYW5jaG5hbWUgZGVmYXVsdHMgdG8gdGhlCisgIGN1cnJlbnQgb25lLiBUaGVzZSBzdWZmaXhlcyBhcmUgYWxzbyBhY2NlcHRlZCB3aGVuIHNwZWxsZWQgaW4gdXBwZXJjYXNlLCBhbmQKKyAgdGhleSBtZWFuIHRoZSBzYW1lIHRoaW5nIG5vIG1hdHRlciB0aGUgY2FzZS4KKworJ1s8YnJhbmNobmFtZT5dQFx7cHVzaFx9JywgZS5nLiAnbWFzdGVyQFx7cHVzaFx9JywgJ0Bce3B1c2hcfSc6OgorICBUaGUgc3VmZml4ICdAXHtwdXNofScgcmVwb3J0cyB0aGUgYnJhbmNoICJ3aGVyZSB3ZSB3b3VsZCBwdXNoIHRvIiBpZgorICBgZ2l0IHB1c2hgIHdlcmUgcnVuIHdoaWxlIGBicmFuY2huYW1lYCB3YXMgY2hlY2tlZCBvdXQgKG9yIHRoZSBjdXJyZW50CisgIGBIRUFEYCBpZiBubyBicmFuY2huYW1lIGlzIHNwZWNpZmllZCkuIFNpbmNlIG91ciBwdXNoIGRlc3RpbmF0aW9uIGlzCisgIGluIGEgcmVtb3RlIHJlcG9zaXRvcnksIG9mIGNvdXJzZSwgd2UgcmVwb3J0IHRoZSBsb2NhbCB0cmFja2luZyBicmFuY2gKKyAgdGhhdCBjb3JyZXNwb25kcyB0byB0aGF0IGJyYW5jaCAoaS5lLiwgc29tZXRoaW5nIGluIGByZWZzL3JlbW90ZXMvYCkuCisrCitIZXJlJ3MgYW4gZXhhbXBsZSB0byBtYWtlIGl0IG1vcmUgY2xlYXI6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyBwdXNoLmRlZmF1bHQgY3VycmVudAorJCBnaXQgY29uZmlnIHJlbW90ZS5wdXNoZGVmYXVsdCBteWZvcmsKKyQgZ2l0IHN3aXRjaCAtYyBteWJyYW5jaCBvcmlnaW4vbWFzdGVyCisKKyQgZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBAe3Vwc3RyZWFtfQorcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKworJCBnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIEB7cHVzaH0KK3JlZnMvcmVtb3Rlcy9teWZvcmsvbXlicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworTm90ZSBpbiB0aGUgZXhhbXBsZSB0aGF0IHdlIHNldCB1cCBhIHRyaWFuZ3VsYXIgd29ya2Zsb3csIHdoZXJlIHdlIHB1bGwKK2Zyb20gb25lIGxvY2F0aW9uIGFuZCBwdXNoIHRvIGFub3RoZXIuIEluIGEgbm9uLXRyaWFuZ3VsYXIgd29ya2Zsb3csCisnQFx7cHVzaH0nIGlzIHRoZSBzYW1lIGFzICdAXHt1cHN0cmVhbX0nLCBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgaXQuCisrCitUaGlzIHN1ZmZpeCBpcyBhbHNvIGFjY2VwdGVkIHdoZW4gc3BlbGxlZCBpbiB1cHBlcmNhc2UsIGFuZCBtZWFucyB0aGUgc2FtZQordGhpbmcgbm8gbWF0dGVyIHRoZSBjYXNlLgorCisnPHJldj57Y2FyZXR9WzxuPl0nLCBlLmcuICdIRUFEe2NhcmV0fSwgdjEuNS4xe2NhcmV0fTAnOjoKKyAgQSBzdWZmaXggJ3tjYXJldH0nIHRvIGEgcmV2aXNpb24gcGFyYW1ldGVyIG1lYW5zIHRoZSBmaXJzdCBwYXJlbnQgb2YKKyAgdGhhdCBjb21taXQgb2JqZWN0LiAgJ3tjYXJldH08bj4nIG1lYW5zIHRoZSA8bj50aCBwYXJlbnQgKGkuZS4KKyAgJzxyZXY+e2NhcmV0fScKKyAgaXMgZXF1aXZhbGVudCB0byAnPHJldj57Y2FyZXR9MScpLiAgQXMgYSBzcGVjaWFsIHJ1bGUsCisgICc8cmV2PntjYXJldH0wJyBtZWFucyB0aGUgY29tbWl0IGl0c2VsZiBhbmQgaXMgdXNlZCB3aGVuICc8cmV2PicgaXMgdGhlCisgIG9iamVjdCBuYW1lIG9mIGEgdGFnIG9iamVjdCB0aGF0IHJlZmVycyB0byBhIGNvbW1pdCBvYmplY3QuCisKKyc8cmV2Pnt0aWxkZX1bPG4+XScsIGUuZy4gJ0hFQUR7dGlsZGV9LCBtYXN0ZXJ7dGlsZGV9Myc6OgorICBBIHN1ZmZpeCAne3RpbGRlfScgdG8gYSByZXZpc2lvbiBwYXJhbWV0ZXIgbWVhbnMgdGhlIGZpcnN0IHBhcmVudCBvZgorICB0aGF0IGNvbW1pdCBvYmplY3QuCisgIEEgc3VmZml4ICd7dGlsZGV9PG4+JyB0byBhIHJldmlzaW9uIHBhcmFtZXRlciBtZWFucyB0aGUgY29tbWl0CisgIG9iamVjdCB0aGF0IGlzIHRoZSA8bj50aCBnZW5lcmF0aW9uIGFuY2VzdG9yIG9mIHRoZSBuYW1lZAorICBjb21taXQgb2JqZWN0LCBmb2xsb3dpbmcgb25seSB0aGUgZmlyc3QgcGFyZW50cy4gIEkuZS4gJzxyZXY+e3RpbGRlfTMnIGlzCisgIGVxdWl2YWxlbnQgdG8gJzxyZXY+e2NhcmV0fXtjYXJldH17Y2FyZXR9JyB3aGljaCBpcyBlcXVpdmFsZW50IHRvCisgICc8cmV2PntjYXJldH0xe2NhcmV0fTF7Y2FyZXR9MScuICBTZWUgYmVsb3cgZm9yIGFuIGlsbHVzdHJhdGlvbiBvZgorICB0aGUgdXNhZ2Ugb2YgdGhpcyBmb3JtLgorCisnPHJldj57Y2FyZXR9ezx0eXBlPn0nLCBlLmcuICd2MC45OS44e2NhcmV0fVx7Y29tbWl0XH0nOjoKKyAgQSBzdWZmaXggJ3tjYXJldH0nIGZvbGxvd2VkIGJ5IGFuIG9iamVjdCB0eXBlIG5hbWUgZW5jbG9zZWQgaW4KKyAgYnJhY2UgcGFpciBtZWFucyBkZXJlZmVyZW5jZSB0aGUgb2JqZWN0IGF0ICc8cmV2PicgcmVjdXJzaXZlbHkgdW50aWwKKyAgYW4gb2JqZWN0IG9mIHR5cGUgJzx0eXBlPicgaXMgZm91bmQgb3IgdGhlIG9iamVjdCBjYW5ub3QgYmUKKyAgZGVyZWZlcmVuY2VkIGFueW1vcmUgKGluIHdoaWNoIGNhc2UsIGJhcmYpLgorICBGb3IgZXhhbXBsZSwgaWYgJzxyZXY+JyBpcyBhIGNvbW1pdC1pc2gsICc8cmV2PntjYXJldH1ce2NvbW1pdFx9JworICBkZXNjcmliZXMgdGhlIGNvcnJlc3BvbmRpbmcgY29tbWl0IG9iamVjdC4KKyAgU2ltaWxhcmx5LCBpZiAnPHJldj4nIGlzIGEgdHJlZS1pc2gsICc8cmV2PntjYXJldH1ce3RyZWVcfScKKyAgZGVzY3JpYmVzIHRoZSBjb3JyZXNwb25kaW5nIHRyZWUgb2JqZWN0LgorICAnPHJldj57Y2FyZXR9MCcKKyAgaXMgYSBzaG9ydC1oYW5kIGZvciAnPHJldj57Y2FyZXR9XHtjb21taXRcfScuCisrCisnPHJldj57Y2FyZXR9XHtvYmplY3RcfScgY2FuIGJlIHVzZWQgdG8gbWFrZSBzdXJlICc8cmV2PicgbmFtZXMgYW4KK29iamVjdCB0aGF0IGV4aXN0cywgd2l0aG91dCByZXF1aXJpbmcgJzxyZXY+JyB0byBiZSBhIHRhZywgYW5kCit3aXRob3V0IGRlcmVmZXJlbmNpbmcgJzxyZXY+JzsgYmVjYXVzZSBhIHRhZyBpcyBhbHJlYWR5IGFuIG9iamVjdCwKK2l0IGRvZXMgbm90IGhhdmUgdG8gYmUgZGVyZWZlcmVuY2VkIGV2ZW4gb25jZSB0byBnZXQgdG8gYW4gb2JqZWN0LgorKworJzxyZXY+e2NhcmV0fVx7dGFnXH0nIGNhbiBiZSB1c2VkIHRvIGVuc3VyZSB0aGF0ICc8cmV2PicgaWRlbnRpZmllcyBhbgorZXhpc3RpbmcgdGFnIG9iamVjdC4KKworJzxyZXY+e2NhcmV0fXt9JywgZS5nLiAndjAuOTkuOHtjYXJldH17fSc6OgorICBBIHN1ZmZpeCAne2NhcmV0fScgZm9sbG93ZWQgYnkgYW4gZW1wdHkgYnJhY2UgcGFpcgorICBtZWFucyB0aGUgb2JqZWN0IGNvdWxkIGJlIGEgdGFnLAorICBhbmQgZGVyZWZlcmVuY2UgdGhlIHRhZyByZWN1cnNpdmVseSB1bnRpbCBhIG5vbi10YWcgb2JqZWN0IGlzCisgIGZvdW5kLgorCisnPHJldj57Y2FyZXR9ey88dGV4dD59JywgZS5nLiAnSEVBRF57L2ZpeCBuYXN0eSBidWd9Jzo6CisgIEEgc3VmZml4ICd7Y2FyZXR9JyB0byBhIHJldmlzaW9uIHBhcmFtZXRlciwgZm9sbG93ZWQgYnkgYSBicmFjZQorICBwYWlyIHRoYXQgY29udGFpbnMgYSB0ZXh0IGxlZCBieSBhIHNsYXNoLAorICBpcyB0aGUgc2FtZSBhcyB0aGUgJzovZml4IG5hc3R5IGJ1Zycgc3ludGF4IGJlbG93IGV4Y2VwdCB0aGF0CisgIGl0IHJldHVybnMgdGhlIHlvdW5nZXN0IG1hdGNoaW5nIGNvbW1pdCB3aGljaCBpcyByZWFjaGFibGUgZnJvbQorICB0aGUgJzxyZXY+JyBiZWZvcmUgJ3tjYXJldH0nLgorCisnOi88dGV4dD4nLCBlLmcuICc6L2ZpeCBuYXN0eSBidWcnOjoKKyAgQSBjb2xvbiwgZm9sbG93ZWQgYnkgYSBzbGFzaCwgZm9sbG93ZWQgYnkgYSB0ZXh0LCBuYW1lcworICBhIGNvbW1pdCB3aG9zZSBjb21taXQgbWVzc2FnZSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcmVndWxhciBleHByZXNzaW9uLgorICBUaGlzIG5hbWUgcmV0dXJucyB0aGUgeW91bmdlc3QgbWF0Y2hpbmcgY29tbWl0IHdoaWNoIGlzCisgIHJlYWNoYWJsZSBmcm9tIGFueSByZWYsIGluY2x1ZGluZyBIRUFELgorICBUaGUgcmVndWxhciBleHByZXNzaW9uIGNhbiBtYXRjaCBhbnkgcGFydCBvZiB0aGUKKyAgY29tbWl0IG1lc3NhZ2UuIFRvIG1hdGNoIG1lc3NhZ2VzIHN0YXJ0aW5nIHdpdGggYSBzdHJpbmcsIG9uZSBjYW4gdXNlCisgIGUuZy4gJzovXmZvbycuIFRoZSBzcGVjaWFsIHNlcXVlbmNlICc6LyEnIGlzIHJlc2VydmVkIGZvciBtb2RpZmllcnMgdG8gd2hhdAorICBpcyBtYXRjaGVkLiAnOi8hLWZvbycgcGVyZm9ybXMgYSBuZWdhdGl2ZSBtYXRjaCwgd2hpbGUgJzovISFmb28nIG1hdGNoZXMgYQorICBsaXRlcmFsICchJyBjaGFyYWN0ZXIsIGZvbGxvd2VkIGJ5ICdmb28nLiBBbnkgb3RoZXIgc2VxdWVuY2UgYmVnaW5uaW5nIHdpdGgKKyAgJzovIScgaXMgcmVzZXJ2ZWQgZm9yIG5vdy4KKyAgRGVwZW5kaW5nIG9uIHRoZSBnaXZlbiB0ZXh0LCB0aGUgc2hlbGwncyB3b3JkIHNwbGl0dGluZyBydWxlcyBtaWdodAorICByZXF1aXJlIGFkZGl0aW9uYWwgcXVvdGluZy4KKworJzxyZXY+OjxwYXRoPicsIGUuZy4gJ0hFQUQ6UkVBRE1FJywgJ21hc3RlcjouL1JFQURNRSc6OgorICBBIHN1ZmZpeCAnOicgZm9sbG93ZWQgYnkgYSBwYXRoIG5hbWVzIHRoZSBibG9iIG9yIHRyZWUKKyAgYXQgdGhlIGdpdmVuIHBhdGggaW4gdGhlIHRyZWUtaXNoIG9iamVjdCBuYW1lZCBieSB0aGUgcGFydAorICBiZWZvcmUgdGhlIGNvbG9uLgorICBBIHBhdGggc3RhcnRpbmcgd2l0aCAnLi8nIG9yICcuLi8nIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICBUaGUgZ2l2ZW4gcGF0aCB3aWxsIGJlIGNvbnZlcnRlZCB0byBiZSByZWxhdGl2ZSB0byB0aGUgd29ya2luZyB0cmVlJ3Mgcm9vdCBkaXJlY3RvcnkuCisgIFRoaXMgaXMgbW9zdCB1c2VmdWwgdG8gYWRkcmVzcyBhIGJsb2Igb3IgdHJlZSBmcm9tIGEgY29tbWl0IG9yIHRyZWUgdGhhdCBoYXMKKyAgdGhlIHNhbWUgdHJlZSBzdHJ1Y3R1cmUgYXMgdGhlIHdvcmtpbmcgdHJlZS4KKworJzpbPG4+Ol08cGF0aD4nLCBlLmcuICc6MDpSRUFETUUnLCAnOlJFQURNRSc6OgorICBBIGNvbG9uLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgc3RhZ2UgbnVtYmVyICgwIHRvIDMpIGFuZCBhCisgIGNvbG9uLCBmb2xsb3dlZCBieSBhIHBhdGgsIG5hbWVzIGEgYmxvYiBvYmplY3QgaW4gdGhlCisgIGluZGV4IGF0IHRoZSBnaXZlbiBwYXRoLiBBIG1pc3Npbmcgc3RhZ2UgbnVtYmVyIChhbmQgdGhlIGNvbG9uCisgIHRoYXQgZm9sbG93cyBpdCkgbmFtZXMgYSBzdGFnZSAwIGVudHJ5LiBEdXJpbmcgYSBtZXJnZSwgc3RhZ2UKKyAgMSBpcyB0aGUgY29tbW9uIGFuY2VzdG9yLCBzdGFnZSAyIGlzIHRoZSB0YXJnZXQgYnJhbmNoJ3MgdmVyc2lvbgorICAodHlwaWNhbGx5IHRoZSBjdXJyZW50IGJyYW5jaCksIGFuZCBzdGFnZSAzIGlzIHRoZSB2ZXJzaW9uIGZyb20KKyAgdGhlIGJyYW5jaCB3aGljaCBpcyBiZWluZyBtZXJnZWQuCisKK0hlcmUgaXMgYW4gaWxsdXN0cmF0aW9uLCBieSBKb24gTG9lbGlnZXIuICBCb3RoIGNvbW1pdCBub2RlcyBCCithbmQgQyBhcmUgcGFyZW50cyBvZiBjb21taXQgbm9kZSBBLiAgUGFyZW50IGNvbW1pdHMgYXJlIG9yZGVyZWQKK2xlZnQtdG8tcmlnaHQuCisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KK0cgICBIICAgSSAgIEoKKyBcIC8gICAgIFwgLworICBEICAgRSAgIEYKKyAgIFwgIHwgIC8gXAorICAgIFwgfCAvICAgfAorICAgICBcfC8gICAgfAorICAgICAgQiAgICAgQworICAgICAgIFwgICAvCisgICAgICAgIFwgLworICAgICAgICAgQQorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCisgICAgQSA9ICAgICAgPSBBXjAKKyAgICBCID0gQV4gICA9IEFeMSAgICAgPSBBfjEKKyAgICBDID0gICAgICA9IEFeMgorICAgIEQgPSBBXl4gID0gQV4xXjEgICA9IEF+MgorICAgIEUgPSBCXjIgID0gQV5eMgorICAgIEYgPSBCXjMgID0gQV5eMworICAgIEcgPSBBXl5eID0gQV4xXjFeMSA9IEF+MworICAgIEggPSBEXjIgID0gQl5eMiAgICA9IEFeXl4yICA9IEF+Ml4yCisgICAgSSA9IEZeICAgPSBCXjNeICAgID0gQV5eM14KKyAgICBKID0gRl4yICA9IEJeM14yICAgPSBBXl4zXjIKKworCitTUEVDSUZZSU5HIFJBTkdFUworLS0tLS0tLS0tLS0tLS0tLS0KKworSGlzdG9yeSB0cmF2ZXJzaW5nIGNvbW1hbmRzIHN1Y2ggYXMgYGdpdCBsb2dgIG9wZXJhdGUgb24gYSBzZXQKK29mIGNvbW1pdHMsIG5vdCBqdXN0IGEgc2luZ2xlIGNvbW1pdC4KKworRm9yIHRoZXNlIGNvbW1hbmRzLAorc3BlY2lmeWluZyBhIHNpbmdsZSByZXZpc2lvbiwgdXNpbmcgdGhlIG5vdGF0aW9uIGRlc2NyaWJlZCBpbiB0aGUKK3ByZXZpb3VzIHNlY3Rpb24sIG1lYW5zIHRoZSBzZXQgb2YgY29tbWl0cyBgcmVhY2hhYmxlYCBmcm9tIHRoZSBnaXZlbgorY29tbWl0LgorCitBIGNvbW1pdCdzIHJlYWNoYWJsZSBzZXQgaXMgdGhlIGNvbW1pdCBpdHNlbGYgYW5kIHRoZSBjb21taXRzIGluCitpdHMgYW5jZXN0cnkgY2hhaW4uCisKKworQ29tbWl0IEV4Y2x1c2lvbnMKK35+fn5+fn5+fn5+fn5+fn5+CisKKyd7Y2FyZXR9PHJldj4nIChjYXJldCkgTm90YXRpb246OgorIFRvIGV4Y2x1ZGUgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhIGNvbW1pdCwgYSBwcmVmaXggJ3tjYXJldH0nCisgbm90YXRpb24gaXMgdXNlZC4gIEUuZy4gJ3tjYXJldH1yMSByMicgbWVhbnMgY29tbWl0cyByZWFjaGFibGUKKyBmcm9tICdyMicgYnV0IGV4Y2x1ZGUgdGhlIG9uZXMgcmVhY2hhYmxlIGZyb20gJ3IxJyAoaS5lLiAncjEnIGFuZAorIGl0cyBhbmNlc3RvcnMpLgorCitEb3R0ZWQgUmFuZ2UgTm90YXRpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSAnLi4nICh0d28tZG90KSBSYW5nZSBOb3RhdGlvbjo6CisgVGhlICd7Y2FyZXR9cjEgcjInIHNldCBvcGVyYXRpb24gYXBwZWFycyBzbyBvZnRlbiB0aGF0IHRoZXJlIGlzIGEgc2hvcnRoYW5kCisgZm9yIGl0LiAgV2hlbiB5b3UgaGF2ZSB0d28gY29tbWl0cyAncjEnIGFuZCAncjInIChuYW1lZCBhY2NvcmRpbmcKKyB0byB0aGUgc3ludGF4IGV4cGxhaW5lZCBpbiBTUEVDSUZZSU5HIFJFVklTSU9OUyBhYm92ZSksIHlvdSBjYW4gYXNrCisgZm9yIGNvbW1pdHMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gcjIgZXhjbHVkaW5nIHRob3NlIHRoYXQgYXJlIHJlYWNoYWJsZQorIGZyb20gcjEgYnkgJ3tjYXJldH1yMSByMicgYW5kIGl0IGNhbiBiZSB3cml0dGVuIGFzICdyMS4ucjInLgorCitUaGUgJy4uLicgKHRocmVlLWRvdCkgU3ltbWV0cmljIERpZmZlcmVuY2UgTm90YXRpb246OgorIEEgc2ltaWxhciBub3RhdGlvbiAncjFcLi4ucjInIGlzIGNhbGxlZCBzeW1tZXRyaWMgZGlmZmVyZW5jZQorIG9mICdyMScgYW5kICdyMicgYW5kIGlzIGRlZmluZWQgYXMKKyAncjEgcjIgLS1ub3QgJChnaXQgbWVyZ2UtYmFzZSAtLWFsbCByMSByMiknLgorIEl0IGlzIHRoZSBzZXQgb2YgY29tbWl0cyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBlaXRoZXIgb25lIG9mCisgJ3IxJyAobGVmdCBzaWRlKSBvciAncjInIChyaWdodCBzaWRlKSBidXQgbm90IGZyb20gYm90aC4KKworSW4gdGhlc2UgdHdvIHNob3J0aGFuZCBub3RhdGlvbnMsIHlvdSBjYW4gb21pdCBvbmUgZW5kIGFuZCBsZXQgaXQgZGVmYXVsdCB0byBIRUFELgorRm9yIGV4YW1wbGUsICdvcmlnaW4uLicgaXMgYSBzaG9ydGhhbmQgZm9yICdvcmlnaW4uLkhFQUQnIGFuZCBhc2tzICJXaGF0CitkaWQgSSBkbyBzaW5jZSBJIGZvcmtlZCBmcm9tIHRoZSBvcmlnaW4gYnJhbmNoPyIgIFNpbWlsYXJseSwgJy4ub3JpZ2luJworaXMgYSBzaG9ydGhhbmQgZm9yICdIRUFELi5vcmlnaW4nIGFuZCBhc2tzICJXaGF0IGRpZCB0aGUgb3JpZ2luIGRvIHNpbmNlCitJIGZvcmtlZCBmcm9tIHRoZW0/IiAgTm90ZSB0aGF0ICcuLicgd291bGQgbWVhbiAnSEVBRC4uSEVBRCcgd2hpY2ggaXMgYW4KK2VtcHR5IHJhbmdlIHRoYXQgaXMgYm90aCByZWFjaGFibGUgYW5kIHVucmVhY2hhYmxlIGZyb20gSEVBRC4KKworT3RoZXIgPHJldj57Y2FyZXR9IFBhcmVudCBTaG9ydGhhbmQgTm90YXRpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RocmVlIG90aGVyIHNob3J0aGFuZHMgZXhpc3QsIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIG1lcmdlIGNvbW1pdHMsCitmb3IgbmFtaW5nIGEgc2V0IHRoYXQgaXMgZm9ybWVkIGJ5IGEgY29tbWl0IGFuZCBpdHMgcGFyZW50IGNvbW1pdHMuCisKK1RoZSAncjF7Y2FyZXR9QCcgbm90YXRpb24gbWVhbnMgYWxsIHBhcmVudHMgb2YgJ3IxJy4KKworVGhlICdyMXtjYXJldH0hJyBub3RhdGlvbiBpbmNsdWRlcyBjb21taXQgJ3IxJyBidXQgZXhjbHVkZXMgYWxsIG9mIGl0cyBwYXJlbnRzLgorQnkgaXRzZWxmLCB0aGlzIG5vdGF0aW9uIGRlbm90ZXMgdGhlIHNpbmdsZSBjb21taXQgJ3IxJy4KKworVGhlICc8cmV2PntjYXJldH0tWzxuPl0nIG5vdGF0aW9uIGluY2x1ZGVzICc8cmV2PicgYnV0IGV4Y2x1ZGVzIHRoZSA8bj50aAorcGFyZW50IChpLmUuIGEgc2hvcnRoYW5kIGZvciAnPHJldj57Y2FyZXR9PG4+Li48cmV2PicpLCB3aXRoICc8bj4nID0gMSBpZgorbm90IGdpdmVuLiBUaGlzIGlzIHR5cGljYWxseSB1c2VmdWwgZm9yIG1lcmdlIGNvbW1pdHMgd2hlcmUgeW91CitjYW4ganVzdCBwYXNzICc8Y29tbWl0PntjYXJldH0tJyB0byBnZXQgYWxsIHRoZSBjb21taXRzIGluIHRoZSBicmFuY2gKK3RoYXQgd2FzIG1lcmdlZCBpbiBtZXJnZSBjb21taXQgJzxjb21taXQ+JyAoaW5jbHVkaW5nICc8Y29tbWl0PicKK2l0c2VsZikuCisKK1doaWxlICc8cmV2PntjYXJldH08bj4nIHdhcyBhYm91dCBzcGVjaWZ5aW5nIGEgc2luZ2xlIGNvbW1pdCBwYXJlbnQsIHRoZXNlCit0aHJlZSBub3RhdGlvbnMgYWxzbyBjb25zaWRlciBpdHMgcGFyZW50cy4gRm9yIGV4YW1wbGUgeW91IGNhbiBzYXkKKydIRUFEe2NhcmV0fTJ7Y2FyZXR9QCcsIGhvd2V2ZXIgeW91IGNhbm5vdCBzYXkgJ0hFQUR7Y2FyZXR9QHtjYXJldH0yJy4KKworUmV2aXNpb24gUmFuZ2UgU3VtbWFyeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisnPHJldj4nOjoKKwlJbmNsdWRlIGNvbW1pdHMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gPHJldj4gKGkuZS4gPHJldj4gYW5kIGl0cworCWFuY2VzdG9ycykuCisKKyd7Y2FyZXR9PHJldj4nOjoKKwlFeGNsdWRlIGNvbW1pdHMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gPHJldj4gKGkuZS4gPHJldj4gYW5kIGl0cworCWFuY2VzdG9ycykuCisKKyc8cmV2MT4uLjxyZXYyPic6OgorCUluY2x1ZGUgY29tbWl0cyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSA8cmV2Mj4gYnV0IGV4Y2x1ZGUKKwl0aG9zZSB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSA8cmV2MT4uICBXaGVuIGVpdGhlciA8cmV2MT4gb3IKKwk8cmV2Mj4gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYEhFQURgLgorCisnPHJldjE+XC4uLjxyZXYyPic6OgorCUluY2x1ZGUgY29tbWl0cyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBlaXRoZXIgPHJldjE+IG9yCisJPHJldjI+IGJ1dCBleGNsdWRlIHRob3NlIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIGJvdGguICBXaGVuCisJZWl0aGVyIDxyZXYxPiBvciA8cmV2Mj4gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYEhFQURgLgorCisnPHJldj57Y2FyZXR9QCcsIGUuZy4gJ0hFQUR7Y2FyZXR9QCc6OgorICBBIHN1ZmZpeCAne2NhcmV0fScgZm9sbG93ZWQgYnkgYW4gYXQgc2lnbiBpcyB0aGUgc2FtZSBhcyBsaXN0aW5nCisgIGFsbCBwYXJlbnRzIG9mICc8cmV2PicgKG1lYW5pbmcsIGluY2x1ZGUgYW55dGhpbmcgcmVhY2hhYmxlIGZyb20KKyAgaXRzIHBhcmVudHMsIGJ1dCBub3QgdGhlIGNvbW1pdCBpdHNlbGYpLgorCisnPHJldj57Y2FyZXR9IScsIGUuZy4gJ0hFQUR7Y2FyZXR9ISc6OgorICBBIHN1ZmZpeCAne2NhcmV0fScgZm9sbG93ZWQgYnkgYW4gZXhjbGFtYXRpb24gbWFyayBpcyB0aGUgc2FtZQorICBhcyBnaXZpbmcgY29tbWl0ICc8cmV2PicgYW5kIHRoZW4gYWxsIGl0cyBwYXJlbnRzIHByZWZpeGVkIHdpdGgKKyAgJ3tjYXJldH0nIHRvIGV4Y2x1ZGUgdGhlbSAoYW5kIHRoZWlyIGFuY2VzdG9ycykuCisKKyc8cmV2PntjYXJldH0tPG4+JywgZS5nLiAnSEVBRHtjYXJldH0tLCBIRUFEe2NhcmV0fS0yJzo6CisJRXF1aXZhbGVudCB0byAnPHJldj57Y2FyZXR9PG4+Li48cmV2PicsIHdpdGggJzxuPicgPSAxIGlmIG5vdAorCWdpdmVuLgorCitIZXJlIGFyZSBhIGhhbmRmdWwgb2YgZXhhbXBsZXMgdXNpbmcgdGhlIExvZWxpZ2VyIGlsbHVzdHJhdGlvbiBhYm92ZSwKK3dpdGggZWFjaCBzdGVwIGluIHRoZSBub3RhdGlvbidzIGV4cGFuc2lvbiBhbmQgc2VsZWN0aW9uIGNhcmVmdWxseQorc3BlbHQgb3V0OgorCisuLi4uCisgICBBcmdzICAgRXhwYW5kZWQgYXJndW1lbnRzICAgIFNlbGVjdGVkIGNvbW1pdHMKKyAgIEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyBIIEQKKyAgIEQgRiAgICAgICAgICAgICAgICAgICAgICAgICAgRyBIIEkgSiBEIEYKKyAgIF5HIEQgICAgICAgICAgICAgICAgICAgICAgICAgSCBECisgICBeRCBCICAgICAgICAgICAgICAgICAgICAgICAgIEUgSSBKIEYgQgorICAgXkQgQiBDICAgICAgICAgICAgICAgICAgICAgICBFIEkgSiBGIEIgQworICAgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJIEogRiBDCisgICBCLi5DICAgPSBeQiBDICAgICAgICAgICAgICAgIEMKKyAgIEIuLi5DICA9IEIgXkYgQyAgICAgICAgICAgICAgRyBIIEQgRSBCIEMKKyAgIEJeLSAgICA9IEJeLi5CCisJICA9IF5CXjEgQiAgICAgICAgICAgICAgRSBJIEogRiBCCisgICBDXkAgICAgPSBDXjEKKwkgID0gRiAgICAgICAgICAgICAgICAgICBJIEogRgorICAgQl5AICAgID0gQl4xIEJeMiBCXjMKKwkgID0gRCBFIEYgICAgICAgICAgICAgICBEIEcgSCBFIEYgSSBKCisgICBDXiEgICAgPSBDIF5DXkAKKwkgID0gQyBeQ14xCisJICA9IEMgXkYgICAgICAgICAgICAgICAgQworICAgQl4hICAgID0gQiBeQl5ACisJICA9IEIgXkJeMSBeQl4yIF5CXjMKKwkgID0gQiBeRCBeRSBeRiAgICAgICAgICBCCisgICBGXiEgRCAgPSBGIF5JIF5KIEQgICAgICAgICAgIEcgSCBEIEYKKy4uLi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VxdWVuY2VyLnR4dCBiL0RvY3VtZW50YXRpb24vc2VxdWVuY2VyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmNlYjU2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zZXF1ZW5jZXIudHh0CkBAIC0wLDAgKzEsMTYgQEAKKy0tY29udGludWU6OgorCUNvbnRpbnVlIHRoZSBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MgdXNpbmcgdGhlIGluZm9ybWF0aW9uIGluCisJYC5naXQvc2VxdWVuY2VyYC4gIENhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFmdGVyIHJlc29sdmluZworCWNvbmZsaWN0cyBpbiBhIGZhaWxlZCBjaGVycnktcGljayBvciByZXZlcnQuCisKKy0tc2tpcDo6CisJU2tpcCB0aGUgY3VycmVudCBjb21taXQgYW5kIGNvbnRpbnVlIHdpdGggdGhlIHJlc3Qgb2YgdGhlCisJc2VxdWVuY2UuCisKKy0tcXVpdDo6CisJRm9yZ2V0IGFib3V0IHRoZSBjdXJyZW50IG9wZXJhdGlvbiBpbiBwcm9ncmVzcy4gIENhbiBiZSB1c2VkCisJdG8gY2xlYXIgdGhlIHNlcXVlbmNlciBzdGF0ZSBhZnRlciBhIGZhaWxlZCBjaGVycnktcGljayBvcgorCXJldmVydC4KKworLS1hYm9ydDo6CisJQ2FuY2VsIHRoZSBvcGVyYXRpb24gYW5kIHJldHVybiB0byB0aGUgcHJlLXNlcXVlbmNlIHN0YXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvLmdpdGlnbm9yZSBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhODkxZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorYXBpLWluZGV4LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWVycm9yLWhhbmRsaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1lcnJvci1oYW5kbGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VlZWRkNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1lcnJvci1oYW5kbGluZy50eHQKQEAgLTAsMCArMSw3NSBAQAorRXJyb3IgcmVwb3J0aW5nIGluIGdpdAorPT09PT09PT09PT09PT09PT09PT09PQorCitgZGllYCwgYHVzYWdlYCwgYGVycm9yYCwgYW5kIGB3YXJuaW5nYCByZXBvcnQgZXJyb3JzIG9mIHZhcmlvdXMKK2tpbmRzLgorCistIGBkaWVgIGlzIGZvciBmYXRhbCBhcHBsaWNhdGlvbiBlcnJvcnMuICBJdCBwcmludHMgYSBtZXNzYWdlIHRvCisgIHRoZSB1c2VyIGFuZCBleGl0cyB3aXRoIHN0YXR1cyAxMjguCisKKy0gYHVzYWdlYCBpcyBmb3IgZXJyb3JzIGluIGNvbW1hbmQgbGluZSB1c2FnZS4gIEFmdGVyIHByaW50aW5nIGl0cworICBtZXNzYWdlLCBpdCBleGl0cyB3aXRoIHN0YXR1cyAxMjkuICAoU2VlIGFsc28gYHVzYWdlX3dpdGhfb3B0aW9uc2AKKyAgaW4gdGhlIGxpbms6YXBpLXBhcnNlLW9wdGlvbnMuaHRtbFtwYXJzZS1vcHRpb25zIEFQSV0uKQorCistIGBlcnJvcmAgaXMgZm9yIG5vbi1mYXRhbCBsaWJyYXJ5IGVycm9ycy4gIEl0IHByaW50cyBhIG1lc3NhZ2UKKyAgdG8gdGhlIHVzZXIgYW5kIHJldHVybnMgLTEgZm9yIGNvbnZlbmllbmNlIGluIHNpZ25hbGluZyB0aGUgZXJyb3IKKyAgdG8gdGhlIGNhbGxlci4KKworLSBgd2FybmluZ2AgaXMgZm9yIHJlcG9ydGluZyBzaXR1YXRpb25zIHRoYXQgcHJvYmFibHkgc2hvdWxkIG5vdAorICBvY2N1ciBidXQgd2hpY2ggdGhlIHVzZXIgKGFuZCBHaXQpIGNhbiBjb250aW51ZSB0byB3b3JrIGFyb3VuZAorICB3aXRob3V0IHJ1bm5pbmcgaW50byB0b28gbWFueSBwcm9ibGVtcy4gIExpa2UgYGVycm9yYCwgaXQKKyAgcmV0dXJucyAtMSBhZnRlciByZXBvcnRpbmcgdGhlIHNpdHVhdGlvbiB0byB0aGUgY2FsbGVyLgorCitDdXN0b21pemFibGUgZXJyb3IgaGFuZGxlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiBgZGllYCBhbmQgYGVycm9yYCBpcyB0byB3cml0ZSBhIG1lc3NhZ2UgdG8KK3N0ZGVyciBhbmQgdGhlbiBleGl0IG9yIHJldHVybiBhcyBhcHByb3ByaWF0ZS4gIFRoaXMgYmVoYXZpb3IgY2FuIGJlCitvdmVycmlkZGVuIHVzaW5nIGBzZXRfZGllX3JvdXRpbmVgIGFuZCBgc2V0X2Vycm9yX3JvdXRpbmVgLiAgRm9yCitleGFtcGxlLCAiZ2l0IGRhZW1vbiIgdXNlcyBzZXRfZGllX3JvdXRpbmUgdG8gd3JpdGUgdGhlIHJlYXNvbiBgZGllYAord2FzIGNhbGxlZCB0byBzeXNsb2cgYmVmb3JlIGV4aXRpbmcuCisKK0xpYnJhcnkgZXJyb3JzCistLS0tLS0tLS0tLS0tLQorCitGdW5jdGlvbnMgcmV0dXJuIGEgbmVnYXRpdmUgaW50ZWdlciBvbiBlcnJvci4gIERldGFpbHMgYmV5b25kIHRoYXQKK3ZhcnkgZnJvbSBmdW5jdGlvbiB0byBmdW5jdGlvbjoKKworLSBTb21lIGZ1bmN0aW9ucyByZXR1cm4gLTEgZm9yIGFsbCBlcnJvcnMuICBPdGhlcnMgcmV0dXJuIGEgbW9yZQorICBzcGVjaWZpYyB2YWx1ZSBkZXBlbmRpbmcgb24gaG93IHRoZSBjYWxsZXIgbWlnaHQgd2FudCB0byByZWFjdAorICB0byB0aGUgZXJyb3IuCisKKy0gU29tZSBmdW5jdGlvbnMgcmVwb3J0IHRoZSBlcnJvciB0byBzdGRlcnIgd2l0aCBgZXJyb3JgLAorICB3aGlsZSBvdGhlcnMgbGVhdmUgdGhhdCBmb3IgdGhlIGNhbGxlciB0byBkby4KKworLSBlcnJubyBpcyBub3QgbWVhbmluZ2Z1bCBvbiByZXR1cm4gZnJvbSBtb3N0IGZ1bmN0aW9ucyAoZXhjZXB0CisgIGZvciB0aGluIHdyYXBwZXJzIGZvciBzeXN0ZW0gY2FsbHMpLgorCitDaGVjayB0aGUgZnVuY3Rpb24ncyBBUEkgZG9jdW1lbnRhdGlvbiB0byBiZSBzdXJlLgorCitDYWxsZXItaGFuZGxlZCBlcnJvcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBpbmNyZWFzaW5nIG51bWJlciBvZiBmdW5jdGlvbnMgdGFrZSBhIHBhcmFtZXRlciAnc3RydWN0IHN0cmJ1ZiAqZXJyJy4KK09uIGVycm9yLCBzdWNoIGZ1bmN0aW9ucyBhcHBlbmQgYSBtZXNzYWdlIGFib3V0IHdoYXQgd2VudCB3cm9uZyB0byB0aGUKKydlcnInIHN0cmJ1Zi4gIFRoZSBtZXNzYWdlIGlzIG1lYW50IHRvIGJlIGNvbXBsZXRlIGVub3VnaCB0byBiZSBwYXNzZWQKK3RvIGBkaWVgIG9yIGBlcnJvcmAgYXMtaXMuICBGb3IgZXhhbXBsZToKKworCWlmIChyZWZfdHJhbnNhY3Rpb25fY29tbWl0KHRyYW5zYWN0aW9uLCAmZXJyKSkKKwkJZGllKCIlcyIsIGVyci5idWYpOworCitUaGUgJ2VycicgcGFyYW1ldGVyIHdpbGwgYmUgdW50b3VjaGVkIGlmIG5vIGVycm9yIG9jY3VycmVkLCBzbyBtdWx0aXBsZQorZnVuY3Rpb24gY2FsbHMgY2FuIGJlIGNoYWluZWQ6CisKKwl0ID0gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCZlcnIpOworCWlmICghdCB8fAorCSAgICByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHQsICJIRUFEIiwgLi4uLCAmZXJyKSB8fAorCSAgICByZXRfdHJhbnNhY3Rpb25fY29tbWl0KHQsICZlcnIpKQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisKK1RoZSAnZXJyJyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHBvaW50ZXIgdG8gYSB2YWxpZCBzdHJidWYuICBUbyBzaWxlbmNlCithIG1lc3NhZ2UsIHBhc3MgYSBzdHJidWYgdGhhdCBpcyBleHBsaWNpdGx5IGlnbm9yZWQ6CisKKwlpZiAodGhpbmdfdGhhdF9jYW5fZmFpbF9pbl9hbl9pZ25vcmFibGVfd2F5KC4uLiwgJmVycikpCisJCS8qIFRoaXMgZmFpbHVyZSBpcyBva2F5LiAqLworCQlzdHJidWZfcmVzZXQoJmVycik7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaW5kZXgtc2tlbC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaW5kZXgtc2tlbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRhOGMxOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1pbmRleC1za2VsLnR4dApAQCAtMCwwICsxLDEzIEBACitHaXQgQVBJIERvY3VtZW50cworPT09PT09PT09PT09PT09PT0KKworR2l0IGhhcyBncm93biBhIHNldCBvZiBpbnRlcm5hbCBBUEkgb3ZlciB0aW1lLiAgVGhpcyBjb2xsZWN0aW9uCitkb2N1bWVudHMgdGhlbS4KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gdGFibGUgb2YgY29udGVudHMgYmVnaW4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gdGFibGUgb2YgY29udGVudHMgZW5kCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaW5kZXguc2ggYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaW5kZXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWMzZjQxMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1pbmRleC5zaApAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vc2gKKworKAorCWM9Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCXNrZWw9YXBpLWluZGV4LXNrZWwudHh0CisJc2VkIC1lICcvXlwvXC8gdGFibGUgb2YgY29udGVudHMgYmVnaW4vcScgIiRza2VsIgorCWVjaG8gIiRjIgorCisJbHMgYXBpLSoudHh0IHwKKwl3aGlsZSByZWFkIGZpbGVuYW1lCisJZG8KKwkJY2FzZSAiJGZpbGVuYW1lIiBpbgorCQlhcGktaW5kZXgtc2tlbC50eHQgfCBhcGktaW5kZXgudHh0KSBjb250aW51ZSA7OworCQllc2FjCisJCXRpdGxlPSQoc2VkIC1lIDFxICIkZmlsZW5hbWUiKQorCQlodG1sPSR7ZmlsZW5hbWUlLnR4dH0uaHRtbAorCQllY2hvICIqIGxpbms6JGh0bWxbJHRpdGxlXSIKKwlkb25lCisJZWNobyAiJGMiCisJc2VkIC1uIC1lICcvXlwvXC8gdGFibGUgb2YgY29udGVudHMgZW5kLywkcCcgIiRza2VsIgorKSA+YXBpLWluZGV4LnR4dCsKKworaWYgdGVzdCAtZiBhcGktaW5kZXgudHh0ICYmIGNtcCBhcGktaW5kZXgudHh0IGFwaS1pbmRleC50eHQrID4vZGV2L251bGwKK3RoZW4KKwlybSAtZiBhcGktaW5kZXgudHh0KworZWxzZQorCW12IGFwaS1pbmRleC50eHQrIGFwaS1pbmRleC50eHQKK2ZpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktbWVyZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW1lcmdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODdkNGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW1lcmdlLnR4dApAQCAtMCwwICsxLDM2IEBACittZXJnZSBBUEkKKz09PT09PT09PQorCitUaGUgbWVyZ2UgQVBJIGhlbHBzIGEgcHJvZ3JhbSB0byByZWNvbmNpbGUgdHdvIGNvbXBldGluZyBzZXRzIG9mCitpbXByb3ZlbWVudHMgdG8gc29tZSBmaWxlcyAoZS5nLiwgdW5yZWdpc3RlcmVkIGNoYW5nZXMgZnJvbSB0aGUgd29yawordHJlZSB2ZXJzdXMgY2hhbmdlcyBpbnZvbHZlZCBpbiBzd2l0Y2hpbmcgdG8gYSBuZXcgYnJhbmNoKSwgcmVwb3J0aW5nCitjb25mbGljdHMgaWYgZm91bmQuICBUaGUgbGlicmFyeSBjYWxsZWQgdGhyb3VnaCB0aGlzIEFQSSBpcworcmVzcG9uc2libGUgZm9yIGEgZmV3IHRoaW5ncy4KKworICogZGV0ZXJtaW5pbmcgd2hpY2ggdHJlZXMgdG8gbWVyZ2UgKHJlY3Vyc2l2ZSBhbmNlc3RvciBjb25zb2xpZGF0aW9uKTsKKworICogbGluaW5nIHVwIGNvcnJlc3BvbmRpbmcgZmlsZXMgaW4gdGhlIHRyZWVzIHRvIGJlIG1lcmdlZCAocmVuYW1lCisgICBkZXRlY3Rpb24sIHN1YnRyZWUgc2hpZnRpbmcpLCByZXBvcnRpbmcgZWRnZSBjYXNlcyBsaWtlIGFkZC9hZGQKKyAgIGFuZCByZW5hbWUvcmVuYW1lIGNvbmZsaWN0cyB0byB0aGUgdXNlcjsKKworICogcGVyZm9ybWluZyBhIHRocmVlLXdheSBtZXJnZSBvZiBjb3JyZXNwb25kaW5nIGZpbGVzLCB0YWtpbmcKKyAgIHBhdGgtc3BlY2lmaWMgbWVyZ2UgZHJpdmVycyAoc3BlY2lmaWVkIGluIGAuZ2l0YXR0cmlidXRlc2ApCisgICBpbnRvIGFjY291bnQuCisKK0RhdGEgc3RydWN0dXJlcworLS0tLS0tLS0tLS0tLS0tCisKKyogYG1tYnVmZmVyX3RgLCBgbW1maWxlX3RgCisKK1RoZXNlIHN0b3JlIGRhdGEgdXNhYmxlIGZvciB1c2UgYnkgdGhlIHhkaWZmIGJhY2tlbmQsIGZvciB3cml0aW5nIGFuZAorZm9yIHJlYWRpbmcsIHJlc3BlY3RpdmVseS4gIFNlZSBgeGRpZmYveGRpZmYuaGAgZm9yIHRoZSBkZWZpbml0aW9ucworYW5kIGBkaWZmLmNgIGZvciBleGFtcGxlcy4KKworKiBgc3RydWN0IGxsX21lcmdlX29wdGlvbnNgCisKK0NoZWNrIGxsLW1lcmdlLmggZm9yIGRldGFpbHMuCisKK0xvdy1sZXZlbCAoc2luZ2xlIGZpbGUpIG1lcmdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGVjayBsbC1tZXJnZS5oIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMmU3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGFyc2Utb3B0aW9ucy50eHQKQEAgLTAsMCArMSwzMTMgQEAKK3BhcnNlLW9wdGlvbnMgQVBJCis9PT09PT09PT09PT09PT09PQorCitUaGUgcGFyc2Utb3B0aW9ucyBBUEkgaXMgdXNlZCB0byBwYXJzZSBhbmQgbWFzc2FnZSBvcHRpb25zIGluIEdpdAorYW5kIHRvIHByb3ZpZGUgYSB1c2FnZSBoZWxwIHdpdGggY29uc2lzdGVudCBsb29rLgorCitCYXNpY3MKKy0tLS0tLQorCitUaGUgYXJndW1lbnQgdmVjdG9yIGBhcmd2W11gIG1heSB1c3VhbGx5IGNvbnRhaW4gbWFuZGF0b3J5IG9yIG9wdGlvbmFsCisnbm9uLW9wdGlvbiBhcmd1bWVudHMnLCBlLmcuIGEgZmlsZW5hbWUgb3IgYSBicmFuY2gsIGFuZCAnb3B0aW9ucycuCitPcHRpb25zIGFyZSBvcHRpb25hbCBhcmd1bWVudHMgdGhhdCBzdGFydCB3aXRoIGEgZGFzaCBhbmQKK3RoYXQgYWxsb3cgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBhIGNvbW1hbmQuCisKKyogVGhlcmUgYXJlIGJhc2ljYWxseSB0aHJlZSB0eXBlcyBvZiBvcHRpb25zOgorICAnYm9vbGVhbicgb3B0aW9ucywKKyAgb3B0aW9ucyB3aXRoIChtYW5kYXRvcnkpICdhcmd1bWVudHMnIGFuZAorICBvcHRpb25zIHdpdGggJ29wdGlvbmFsIGFyZ3VtZW50cycKKyAgKGkuZS4gYSBib29sZWFuIG9wdGlvbiB0aGF0IGNhbiBiZSBhZGp1c3RlZCkuCisKKyogVGhlcmUgYXJlIGJhc2ljYWxseSB0d28gZm9ybXMgb2Ygb3B0aW9uczoKKyAgJ1Nob3J0IG9wdGlvbnMnIGNvbnNpc3Qgb2Ygb25lIGRhc2ggKGAtYCkgYW5kIG9uZSBhbHBoYW51bWVyaWMKKyAgY2hhcmFjdGVyLgorICAnTG9uZyBvcHRpb25zJyBiZWdpbiB3aXRoIHR3byBkYXNoZXMgKGAtLWApIGFuZCBzb21lCisgIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLgorCisqIE9wdGlvbnMgYXJlIGNhc2Utc2Vuc2l0aXZlLgorICBQbGVhc2UgZGVmaW5lICdsb3dlci1jYXNlIGxvbmcgb3B0aW9ucycgb25seS4KKworVGhlIHBhcnNlLW9wdGlvbnMgQVBJIGFsbG93czoKKworKiAnc3R1Y2snIGFuZCAnc2VwYXJhdGUgZm9ybScgb2Ygb3B0aW9ucyB3aXRoIGFyZ3VtZW50cy4KKyAgYC1vQXJnYCBpcyBzdHVjaywgYC1vIEFyZ2AgaXMgc2VwYXJhdGUgZm9ybS4KKyAgYC0tb3B0aW9uPUFyZ2AgaXMgc3R1Y2ssIGAtLW9wdGlvbiBBcmdgIGlzIHNlcGFyYXRlIGZvcm0uCisKKyogTG9uZyBvcHRpb25zIG1heSBiZSAnYWJicmV2aWF0ZWQnLCBhcyBsb25nIGFzIHRoZSBhYmJyZXZpYXRpb24KKyAgaXMgdW5hbWJpZ3VvdXMuCisKKyogU2hvcnQgb3B0aW9ucyBtYXkgYmUgYnVuZGxlZCwgZS5nLiBgLWEgLWJgIGNhbiBiZSBzcGVjaWZpZWQgYXMgYC1hYmAuCisKKyogQm9vbGVhbiBsb25nIG9wdGlvbnMgY2FuIGJlICduZWdhdGVkJyAob3IgJ3Vuc2V0JykgYnkgcHJlcGVuZGluZworICBgbm8tYCwgZS5nLiBgLS1uby1hYmJyZXZgIGluc3RlYWQgb2YgYC0tYWJicmV2YC4gQ29udmVyc2VseSwKKyAgb3B0aW9ucyB0aGF0IGJlZ2luIHdpdGggYG5vLWAgY2FuIGJlICduZWdhdGVkJyBieSByZW1vdmluZyBpdC4KKyAgT3RoZXIgbG9uZyBvcHRpb25zIGNhbiBiZSB1bnNldCAoZS5nLiwgc2V0IHN0cmluZyB0byBOVUxMLCBzZXQKKyAgaW50ZWdlciB0byAwKSBieSBwcmVwZW5kaW5nIGBuby1gLgorCisqIE9wdGlvbnMgYW5kIG5vbi1vcHRpb24gYXJndW1lbnRzIGNhbiBjbGVhcmx5IGJlIHNlcGFyYXRlZCB1c2luZyB0aGUgYC0tYAorICBvcHRpb24sIGUuZy4gYC1hIC1iIC0tb3B0aW9uIC0tIC0tdGhpcy1pcy1hLWZpbGVgIGluZGljYXRlcyB0aGF0CisgIGAtLXRoaXMtaXMtYS1maWxlYCBtdXN0IG5vdCBiZSBwcm9jZXNzZWQgYXMgYW4gb3B0aW9uLgorCitTdGVwcyB0byBwYXJzZSBvcHRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4gYCNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiYAorCisuIGRlZmluZSBhIE5VTEwtdGVybWluYXRlZAorICBgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2Zvb191c2FnZVtdYCBhcnJheQorICBjb250YWluaW5nIGFsdGVybmF0aXZlIHVzYWdlIHN0cmluZ3MKKworLiBkZWZpbmUgYGJ1aWx0aW5fZm9vX29wdGlvbnNgIGFycmF5IGFzIGRlc2NyaWJlZCBiZWxvdworICBpbiBzZWN0aW9uICdEYXRhIFN0cnVjdHVyZScuCisKKy4gaW4gYGNtZF9mb28oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpYAorICBjYWxsCisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fZm9vX29wdGlvbnMsIGJ1aWx0aW5fZm9vX3VzYWdlLCBmbGFncyk7CisrCitgcGFyc2Vfb3B0aW9ucygpYCB3aWxsIGZpbHRlciBvdXQgdGhlIHByb2Nlc3NlZCBvcHRpb25zIG9mIGBhcmd2W11gIGFuZCBsZWF2ZSB0aGUKK25vbi1vcHRpb24gYXJndW1lbnRzIGluIGBhcmd2W11gLgorYGFyZ2NgIGlzIHVwZGF0ZWQgYXBwcm9wcmlhdGVseSBiZWNhdXNlIG9mIHRoZSBhc3NpZ25tZW50LgorKworWW91IGNhbiBhbHNvIHBhc3MgTlVMTCBpbnN0ZWFkIG9mIGEgdXNhZ2UgYXJyYXkgYXMgdGhlIGZpZnRoIHBhcmFtZXRlciBvZgorcGFyc2Vfb3B0aW9ucygpLCB0byBhdm9pZCBkaXNwbGF5aW5nIGEgaGVscCBzY3JlZW4gd2l0aCB1c2FnZSBpbmZvIGFuZAorb3B0aW9uIGxpc3QuICBUaGlzIHNob3VsZCBvbmx5IGJlIGRvbmUgaWYgbmVjZXNzYXJ5LCBlLmcuIHRvIGltcGxlbWVudAorYSBsaW1pdGVkIHBhcnNlciBmb3Igb25seSBhIHN1YnNldCBvZiB0aGUgb3B0aW9ucyB0aGF0IG5lZWRzIHRvIGJlIHJ1bgorYmVmb3JlIHRoZSBmdWxsIHBhcnNlciwgd2hpY2ggaW4gdHVybiBzaG93cyB0aGUgZnVsbCBoZWxwIG1lc3NhZ2UuCisrCitGbGFncyBhcmUgdGhlIGJpdHdpc2Utb3Igb2Y6CisKK2BQQVJTRV9PUFRfS0VFUF9EQVNIREFTSGA6OgorCUtlZXAgdGhlIGAtLWAgdGhhdCB1c3VhbGx5IHNlcGFyYXRlcyBvcHRpb25zIGZyb20KKwlub24tb3B0aW9uIGFyZ3VtZW50cy4KKworYFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT05gOjoKKwlVc3VhbGx5IHRoZSB3aG9sZSBhcmd1bWVudCB2ZWN0b3IgaXMgbWFzc2FnZWQgYW5kIHJlb3JkZXJlZC4KKwlVc2luZyB0aGlzIGZsYWcsIHByb2Nlc3NpbmcgaXMgc3RvcHBlZCBhdCB0aGUgZmlyc3Qgbm9uLW9wdGlvbgorCWFyZ3VtZW50LgorCitgUEFSU0VfT1BUX0tFRVBfQVJHVjBgOjoKKwlLZWVwIHRoZSBmaXJzdCBhcmd1bWVudCwgd2hpY2ggY29udGFpbnMgdGhlIHByb2dyYW0gbmFtZS4gIEl0J3MKKwlyZW1vdmVkIGZyb20gYXJndltdIGJ5IGRlZmF1bHQuCisKK2BQQVJTRV9PUFRfS0VFUF9VTktOT1dOYDo6CisJS2VlcCB1bmtub3duIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIGVycm9yaW5nIG91dC4gIFRoaXMgZG9lc24ndAorCXdvcmsgZm9yIGFsbCBjb21iaW5hdGlvbnMgb2YgYXJndW1lbnRzIGFzIHVzZXJzIG1pZ2h0IGV4cGVjdAorCWl0IHRvIGRvLiAgRS5nLiBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaW4gYC0tdW5rbm93biAtLWtub3duYAorCXRha2VzIGEgdmFsdWUgKHdoaWNoIHdlIGNhbid0IGtub3cpLCB0aGUgc2Vjb25kIG9uZSBpcworCW1pc3Rha2VubHkgaW50ZXJwcmV0ZWQgYXMgYSBrbm93biBvcHRpb24uICBTaW1pbGFybHksIGlmCisJYFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT05gIGlzIHNldCwgdGhlIHNlY29uZCBhcmd1bWVudCBpbgorCWAtLXVua25vd24gdmFsdWVgIHdpbGwgYmUgbWlzdGFrZW5seSBpbnRlcnByZXRlZCBhcyBhCisJbm9uLW9wdGlvbiwgbm90IGFzIGEgdmFsdWUgYmVsb25naW5nIHRvIHRoZSB1bmtub3duIG9wdGlvbiwKKwl0aGUgcGFyc2VyIGVhcmx5LiAgVGhhdCdzIHdoeSBwYXJzZV9vcHRpb25zKCkgZXJyb3JzIG91dCBpZgorCWJvdGggb3B0aW9ucyBhcmUgc2V0LgorCitgUEFSU0VfT1BUX05PX0lOVEVSTkFMX0hFTFBgOjoKKwlCeSBkZWZhdWx0LCBwYXJzZV9vcHRpb25zKCkgaGFuZGxlcyBgLWhgLCBgLS1oZWxwYCBhbmQKKwlgLS1oZWxwLWFsbGAgaW50ZXJuYWxseSwgYnkgc2hvd2luZyBhIGhlbHAgc2NyZWVuLiAgVGhpcyBvcHRpb24KKwl0dXJucyBpdCBvZmYgYW5kIGFsbG93cyBvbmUgdG8gYWRkIGN1c3RvbSBoYW5kbGVycyBmb3IgdGhlc2UKKwlvcHRpb25zLCBvciB0byBqdXN0IGxlYXZlIHRoZW0gdW5rbm93bi4KKworRGF0YSBTdHJ1Y3R1cmUKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSBtYWluIGRhdGEgc3RydWN0dXJlIGlzIGFuIGFycmF5IG9mIHRoZSBgb3B0aW9uYCBzdHJ1Y3QsCitzYXkgYHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fYWRkX29wdGlvbnNbXWAuCitUaGVyZSBhcmUgc29tZSBtYWNyb3MgdG8gZWFzaWx5IGRlZmluZSBvcHRpb25zOgorCitgT1BUX19BQkJSRVYoJmludF92YXIpYDo6CisJQWRkIGAtLWFiYnJldls9PG4+XWAuCisKK2BPUFRfX0NPTE9SKCZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlBZGQgYC0tY29sb3JbPTx3aGVuPl1gIGFuZCBgLS1uby1jb2xvcmAuCisKK2BPUFRfX0RSWV9SVU4oJmludF92YXIsIGRlc2NyaXB0aW9uKWA6OgorCUFkZCBgLW4sIC0tZHJ5LXJ1bmAuCisKK2BPUFRfX0ZPUkNFKCZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlBZGQgYC1mLCAtLWZvcmNlYC4KKworYE9QVF9fUVVJRVQoJmludF92YXIsIGRlc2NyaXB0aW9uKWA6OgorCUFkZCBgLXEsIC0tcXVpZXRgLgorCitgT1BUX19WRVJCT1NFKCZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlBZGQgYC12LCAtLXZlcmJvc2VgLgorCitgT1BUX0dST1VQKGRlc2NyaXB0aW9uKWA6OgorCVN0YXJ0IGFuIG9wdGlvbiBncm91cC4gYGRlc2NyaXB0aW9uYCBpcyBhIHNob3J0IHN0cmluZyB0aGF0CisJZGVzY3JpYmVzIHRoZSBncm91cCBvciBhbiBlbXB0eSBzdHJpbmcuCisJU3RhcnQgdGhlIGRlc2NyaXB0aW9uIHdpdGggYW4gdXBwZXItY2FzZSBsZXR0ZXIuCisKK2BPUFRfQk9PTChzaG9ydCwgbG9uZywgJmludF92YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhIGJvb2xlYW4gb3B0aW9uLiBgaW50X3ZhcmAgaXMgc2V0IHRvIG9uZSB3aXRoCisJYC0tb3B0aW9uYCBhbmQgc2V0IHRvIHplcm8gd2l0aCBgLS1uby1vcHRpb25gLgorCitgT1BUX0NPVU5UVVAoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYSBjb3VudC11cCBvcHRpb24uCisJRWFjaCB1c2Ugb2YgYC0tb3B0aW9uYCBpbmNyZW1lbnRzIGBpbnRfdmFyYCwgc3RhcnRpbmcgZnJvbSB6ZXJvCisJKGV2ZW4gaWYgaW5pdGlhbGx5IG5lZ2F0aXZlKSwgYW5kIGAtLW5vLW9wdGlvbmAgcmVzZXRzIGl0IHRvCisJemVyby4gVG8gZGV0ZXJtaW5lIGlmIGAtLW9wdGlvbmAgb3IgYC0tbm8tb3B0aW9uYCB3YXMgZW5jb3VudGVyZWQgYXQKKwlhbGwsIGluaXRpYWxpemUgYGludF92YXJgIHRvIGEgbmVnYXRpdmUgdmFsdWUsIGFuZCBpZiBpdCBpcyBzdGlsbAorCW5lZ2F0aXZlIGFmdGVyIHBhcnNlX29wdGlvbnMoKSwgdGhlbiBuZWl0aGVyIGAtLW9wdGlvbmAgbm9yCisJYC0tbm8tb3B0aW9uYCB3YXMgc2Vlbi4KKworYE9QVF9CSVQoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbiwgbWFzaylgOjoKKwlJbnRyb2R1Y2UgYSBib29sZWFuIG9wdGlvbi4KKwlJZiB1c2VkLCBgaW50X3ZhcmAgaXMgYml0d2lzZS1vcmVkIHdpdGggYG1hc2tgLgorCitgT1BUX05FR0JJVChzaG9ydCwgbG9uZywgJmludF92YXIsIGRlc2NyaXB0aW9uLCBtYXNrKWA6OgorCUludHJvZHVjZSBhIGJvb2xlYW4gb3B0aW9uLgorCUlmIHVzZWQsIGBpbnRfdmFyYCBpcyBiaXR3aXNlLWFuZGVkIHdpdGggdGhlIGludmVydGVkIGBtYXNrYC4KKworYE9QVF9TRVRfSU5UKHNob3J0LCBsb25nLCAmaW50X3ZhciwgZGVzY3JpcHRpb24sIGludGVnZXIpYDo6CisJSW50cm9kdWNlIGFuIGludGVnZXIgb3B0aW9uLgorCWBpbnRfdmFyYCBpcyBzZXQgdG8gYGludGVnZXJgIHdpdGggYC0tb3B0aW9uYCwgYW5kCisJcmVzZXQgdG8gemVybyB3aXRoIGAtLW5vLW9wdGlvbmAuCisKK2BPUFRfU1RSSU5HKHNob3J0LCBsb25nLCAmc3RyX3ZhciwgYXJnX3N0ciwgZGVzY3JpcHRpb24pYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB3aXRoIHN0cmluZyBhcmd1bWVudC4KKwlUaGUgc3RyaW5nIGFyZ3VtZW50IGlzIHB1dCBpbnRvIGBzdHJfdmFyYC4KKworYE9QVF9TVFJJTkdfTElTVChzaG9ydCwgbG9uZywgJnN0cnVjdCBzdHJpbmdfbGlzdCwgYXJnX3N0ciwgZGVzY3JpcHRpb24pYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB3aXRoIHN0cmluZyBhcmd1bWVudC4KKwlUaGUgc3RyaW5nIGFyZ3VtZW50IGlzIHN0b3JlZCBhcyBhbiBlbGVtZW50IGluIGBzdHJpbmdfbGlzdGAuCisJVXNlIG9mIGAtLW5vLW9wdGlvbmAgd2lsbCBjbGVhciB0aGUgbGlzdCBvZiBwcmVjZWRpbmcgdmFsdWVzLgorCitgT1BUX0lOVEVHRVIoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggaW50ZWdlciBhcmd1bWVudC4KKwlUaGUgaW50ZWdlciBpcyBwdXQgaW50byBgaW50X3ZhcmAuCisKK2BPUFRfTUFHTklUVURFKHNob3J0LCBsb25nLCAmdW5zaWduZWRfbG9uZ192YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhbiBvcHRpb24gd2l0aCBhIHNpemUgYXJndW1lbnQuIFRoZSBhcmd1bWVudCBtdXN0IGJlIGEKKwlub24tbmVnYXRpdmUgaW50ZWdlciBhbmQgbWF5IGluY2x1ZGUgYSBzdWZmaXggb2YgJ2snLCAnbScgb3IgJ2cnIHRvCisJc2NhbGUgdGhlIHByb3ZpZGVkIHZhbHVlIGJ5IDEwMjQsIDEwMjReMiBvciAxMDI0XjMgcmVzcGVjdGl2ZWx5LgorCVRoZSBzY2FsZWQgdmFsdWUgaXMgcHV0IGludG8gYHVuc2lnbmVkX2xvbmdfdmFyYC4KKworYE9QVF9FWFBJUllfREFURShzaG9ydCwgbG9uZywgJnRpbWVzdGFtcF90X3ZhciwgZGVzY3JpcHRpb24pYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB3aXRoIGV4cGlyeSBkYXRlIGFyZ3VtZW50LCBzZWUgYHBhcnNlX2V4cGlyeV9kYXRlKClgLgorCVRoZSB0aW1lc3RhbXAgaXMgcHV0IGludG8gYHRpbWVzdGFtcF90X3ZhcmAuCisKK2BPUFRfQ0FMTEJBQ0soc2hvcnQsIGxvbmcsICZ2YXIsIGFyZ19zdHIsIGRlc2NyaXB0aW9uLCBmdW5jX3B0cilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggYXJndW1lbnQuCisJVGhlIGFyZ3VtZW50IHdpbGwgYmUgZmVkIGludG8gdGhlIGZ1bmN0aW9uIGdpdmVuIGJ5IGBmdW5jX3B0cmAKKwlhbmQgdGhlIHJlc3VsdCB3aWxsIGJlIHB1dCBpbnRvIGB2YXJgLgorCVNlZSAnT3B0aW9uIENhbGxiYWNrcycgYmVsb3cgZm9yIGEgbW9yZSBlbGFib3JhdGUgZGVzY3JpcHRpb24uCisKK2BPUFRfRklMRU5BTUUoc2hvcnQsIGxvbmcsICZ2YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhbiBvcHRpb24gd2l0aCBhIGZpbGVuYW1lIGFyZ3VtZW50LgorCVRoZSBmaWxlbmFtZSB3aWxsIGJlIHByZWZpeGVkIGJ5IHBhc3NpbmcgdGhlIGZpbGVuYW1lIGFsb25nIHdpdGgKKwl0aGUgcHJlZml4IGFyZ3VtZW50IG9mIGBwYXJzZV9vcHRpb25zKClgIHRvIGBwcmVmaXhfZmlsZW5hbWUoKWAuCisKK2BPUFRfQVJHVU1FTlQobG9uZywgJmludF92YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhIGxvbmctb3B0aW9uIGFyZ3VtZW50IHRoYXQgd2lsbCBiZSBrZXB0IGluIGBhcmd2W11gLgorCUlmIHRoaXMgb3B0aW9uIHdhcyBzZWVuLCBgaW50X3ZhcmAgd2lsbCBiZSBzZXQgdG8gb25lIChleGNlcHQKKwlpZiBhIGBOVUxMYCBwb2ludGVyIHdhcyBwYXNzZWQpLgorCitgT1BUX05VTUJFUl9DQUxMQkFDSygmdmFyLCBkZXNjcmlwdGlvbiwgZnVuY19wdHIpYDo6CisJUmVjb2duaXplIG51bWVyaWNhbCBvcHRpb25zIGxpa2UgLTEyMyBhbmQgZmVlZCB0aGUgaW50ZWdlciBhcworCWlmIGl0IHdhcyBhbiBhcmd1bWVudCB0byB0aGUgZnVuY3Rpb24gZ2l2ZW4gYnkgYGZ1bmNfcHRyYC4KKwlUaGUgcmVzdWx0IHdpbGwgYmUgcHV0IGludG8gYHZhcmAuICBUaGVyZSBjYW4gYmUgb25seSBvbmUgc3VjaAorCW9wdGlvbiBkZWZpbml0aW9uLiAgSXQgY2Fubm90IGJlIG5lZ2F0ZWQgYW5kIGl0IHRha2VzIG5vCisJYXJndW1lbnRzLiAgU2hvcnQgb3B0aW9ucyB0aGF0IGhhcHBlbiB0byBiZSBkaWdpdHMgdGFrZQorCXByZWNlZGVuY2Ugb3ZlciBpdC4KKworYE9QVF9DT0xPUl9GTEFHKHNob3J0LCBsb25nLCAmaW50X3ZhciwgZGVzY3JpcHRpb24pYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB0aGF0IHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgY2FuCisJaGF2ZSBvbmUgb2YgdGhyZWUgdmFsdWVzOiAiYWx3YXlzIiwgIm5ldmVyIiwgb3IgImF1dG8iLiAgSWYgdGhlCisJYXJndW1lbnQgaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0byAiYWx3YXlzIi4gIFRoZSBgLS1uby1gIGZvcm0KKwl3b3JrcyBsaWtlIGAtLWxvbmc9bmV2ZXJgOyBpdCBjYW5ub3QgdGFrZSBhbiBhcmd1bWVudC4gIElmCisJImFsd2F5cyIsIHNldCBgaW50X3ZhcmAgdG8gMTsgaWYgIm5ldmVyIiwgc2V0IGBpbnRfdmFyYCB0byAwOyBpZgorCSJhdXRvIiwgc2V0IGBpbnRfdmFyYCB0byAxIGlmIHN0ZG91dCBpcyBhIHR0eSBvciBhIHBhZ2VyLAorCTAgb3RoZXJ3aXNlLgorCitgT1BUX05PT1BfTk9BUkcoc2hvcnQsIGxvbmcpYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB0aGF0IGhhcyBubyBlZmZlY3QgYW5kIHRha2VzIG5vIGFyZ3VtZW50cy4KKwlVc2UgaXQgdG8gaGlkZSBkZXByZWNhdGVkIG9wdGlvbnMgdGhhdCBhcmUgc3RpbGwgdG8gYmUgcmVjb2duaXplZAorCWFuZCBpZ25vcmVkIHNpbGVudGx5LgorCitgT1BUX1BBU1NUSFJVKHNob3J0LCBsb25nLCAmY2hhcl92YXIsIGFyZ19zdHIsIGRlc2NyaXB0aW9uLCBmbGFncylgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHRoYXQgd2lsbCBiZSByZWNvbnN0cnVjdGVkIGludG8gYSBjaGFyKiBzdHJpbmcsCisJd2hpY2ggbXVzdCBiZSBpbml0aWFsaXplZCB0byBOVUxMLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBuZWVkIHRvCisJcGFzcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiB0byBhbm90aGVyIGNvbW1hbmQuIEFueSBwcmV2aW91cyB2YWx1ZQorCXdpbGwgYmUgb3ZlcndyaXR0ZW4sIHNvIHRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igb3B0aW9ucyB3aGVyZQorCXRoZSBsYXN0IG9uZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSB3aW5zLgorCitgT1BUX1BBU1NUSFJVX0FSR1Yoc2hvcnQsIGxvbmcsICZhcmd2X2FycmF5X3ZhciwgYXJnX3N0ciwgZGVzY3JpcHRpb24sIGZsYWdzKWA6OgorCUludHJvZHVjZSBhbiBvcHRpb24gd2hlcmUgYWxsIGluc3RhbmNlcyBvZiBpdCBvbiB0aGUgY29tbWFuZC1saW5lIHdpbGwKKwliZSByZWNvbnN0cnVjdGVkIGludG8gYW4gYXJndl9hcnJheS4gVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3UgbmVlZCB0bworCXBhc3MgdGhlIGNvbW1hbmQtbGluZSBvcHRpb24sIHdoaWNoIGNhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMsCisJdG8gYW5vdGhlciBjb21tYW5kLgorCitgT1BUX0NNRE1PREUoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbiwgZW51bV92YWwpYDo6CisJRGVmaW5lIGFuICJvcGVyYXRpb24gbW9kZSIgb3B0aW9uLCBvbmx5IG9uZSBvZiB3aGljaCBpbiB0aGUgc2FtZQorCWdyb3VwIG9mICJvcGVyYXRpbmcgbW9kZSIgb3B0aW9ucyB0aGF0IHNoYXJlIHRoZSBzYW1lIGBpbnRfdmFyYAorCWNhbiBiZSBnaXZlbiBieSB0aGUgdXNlci4gYGVudW1fdmFsYCBpcyBzZXQgdG8gYGludF92YXJgIHdoZW4gdGhlCisJb3B0aW9uIGlzIHVzZWQsIGJ1dCBhbiBlcnJvciBpcyByZXBvcnRlZCBpZiBvdGhlciAib3BlcmF0aW5nIG1vZGUiCisJb3B0aW9uIGhhcyBhbHJlYWR5IHNldCBpdHMgdmFsdWUgdG8gdGhlIHNhbWUgYGludF92YXJgLgorCisKK1RoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGFycmF5IG11c3QgYmUgYE9QVF9FTkQoKWAuCisKK0lmIG5vdCBzdGF0ZWQgb3RoZXJ3aXNlLCBpbnRlcnByZXQgdGhlIGFyZ3VtZW50cyBhcyBmb2xsb3dzOgorCisqIGBzaG9ydGAgaXMgYSBjaGFyYWN0ZXIgZm9yIHRoZSBzaG9ydCBvcHRpb24KKyAgKGUuZy4gYCdlJ2AgZm9yIGAtZWAsIHVzZSBgMGAgdG8gb21pdCksCisKKyogYGxvbmdgIGlzIGEgc3RyaW5nIGZvciB0aGUgbG9uZyBvcHRpb24KKyAgKGUuZy4gYCJleGFtcGxlImAgZm9yIGAtLWV4YW1wbGVgLCB1c2UgYE5VTExgIHRvIG9taXQpLAorCisqIGBpbnRfdmFyYCBpcyBhbiBpbnRlZ2VyIHZhcmlhYmxlLAorCisqIGBzdHJfdmFyYCBpcyBhIHN0cmluZyB2YXJpYWJsZSAoYGNoYXIgKmApLAorCisqIGBhcmdfc3RyYCBpcyB0aGUgc3RyaW5nIHRoYXQgaXMgc2hvd24gYXMgYXJndW1lbnQKKyAgKGUuZy4gYCJicmFuY2giYCB3aWxsIHJlc3VsdCBpbiBgPGJyYW5jaD5gKS4KKyAgSWYgc2V0IHRvIGBOVUxMYCwgdGhyZWUgZG90cyAoYC4uLmApIHdpbGwgYmUgZGlzcGxheWVkLgorCisqIGBkZXNjcmlwdGlvbmAgaXMgYSBzaG9ydCBzdHJpbmcgdG8gZGVzY3JpYmUgdGhlIGVmZmVjdCBvZiB0aGUgb3B0aW9uLgorICBJdCBzaGFsbCBiZWdpbiB3aXRoIGEgbG93ZXItY2FzZSBsZXR0ZXIgYW5kIGEgZnVsbCBzdG9wIChgLmApIHNoYWxsIGJlCisgIG9taXR0ZWQgYXQgdGhlIGVuZC4KKworT3B0aW9uIENhbGxiYWNrcworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZnVuY3Rpb24gbXVzdCBiZSBkZWZpbmVkIGluIHRoaXMgZm9ybToKKworCWludCBmdW5jKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCisKK1RoZSBjYWxsYmFjayBtZWNoYW5pc20gaXMgYXMgZm9sbG93czoKKworKiBJbnNpZGUgYGZ1bmNgLCB0aGUgb25seSBpbnRlcmVzdGluZyBtZW1iZXIgb2YgdGhlIHN0cnVjdHVyZQorICBnaXZlbiBieSBgb3B0YCBpcyB0aGUgdm9pZCBwb2ludGVyIGBvcHQtPnZhbHVlYC4KKyAgYCpvcHQtPnZhbHVlYCB3aWxsIGJlIHRoZSB2YWx1ZSB0aGF0IGlzIHNhdmVkIGludG8gYHZhcmAsIGlmIHlvdQorICB1c2UgYE9QVF9DQUxMQkFDSygpYC4KKyAgRm9yIGV4YW1wbGUsIGRvIGAqKHVuc2lnbmVkIGxvbmcgKilvcHQtPnZhbHVlID0gNDI7YCB0byBnZXQgNDIKKyAgaW50byBhbiBgdW5zaWduZWQgbG9uZ2AgdmFyaWFibGUuCisKKyogUmV0dXJuIHZhbHVlIGAwYCBpbmRpY2F0ZXMgc3VjY2VzcyBhbmQgbm9uLXplcm8gcmV0dXJuCisgIHZhbHVlIHdpbGwgaW52b2tlIGB1c2FnZV93aXRoX29wdGlvbnMoKWAgYW5kLCB0aHVzLCBkaWUuCisKKyogSWYgdGhlIHVzZXIgbmVnYXRlcyB0aGUgb3B0aW9uLCBgYXJnYCBpcyBgTlVMTGAgYW5kIGB1bnNldGAgaXMgMS4KKworU29waGlzdGljYXRlZCBvcHRpb24gcGFyc2luZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgbmVlZCwgZm9yIGV4YW1wbGUsIG9wdGlvbiBjYWxsYmFja3Mgd2l0aCBvcHRpb25hbCBhcmd1bWVudHMKK29yIHdpdGhvdXQgYXJndW1lbnRzIGF0IGFsbCwgb3IgaWYgeW91IG5lZWQgb3RoZXIgc3BlY2lhbCBjYXNlcywKK3RoYXQgYXJlIG5vdCBoYW5kbGVkIGJ5IHRoZSBtYWNyb3MgYWJvdmUsIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlCittZW1iZXJzIG9mIHRoZSBgb3B0aW9uYCBzdHJ1Y3R1cmUgbWFudWFsbHkuCisKK1RoaXMgaXMgbm90IGNvdmVyZWQgaW4gdGhpcyBkb2N1bWVudCwgYnV0IHdlbGwgZG9jdW1lbnRlZAoraW4gYHBhcnNlLW9wdGlvbnMuaGAgaXRzZWxmLgorCitFeGFtcGxlcworLS0tLS0tLS0KKworU2VlIGB0ZXN0LXBhcnNlLW9wdGlvbnMuY2AgYW5kCitgYnVpbHRpbi9hZGQuY2AsCitgYnVpbHRpbi9jbG9uZS5jYCwKK2BidWlsdGluL2NvbW1pdC5jYCwKK2BidWlsdGluL2ZldGNoLmNgLAorYGJ1aWx0aW4vZnNjay5jYCwKK2BidWlsdGluL3JtLmNgCitmb3IgcmVhbC13b3JsZCBleGFtcGxlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZTIudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyYWNlMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2MDg1NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZTIudHh0CkBAIC0wLDAgKzEsMTE3MSBAQAorPSBUcmFjZTIgQVBJCisKK1RoZSBUcmFjZTIgQVBJIGNhbiBiZSB1c2VkIHRvIHByaW50IGRlYnVnLCBwZXJmb3JtYW5jZSwgYW5kIHRlbGVtZXRyeQoraW5mb3JtYXRpb24gdG8gc3RkZXJyIG9yIGEgZmlsZS4gIFRoZSBUcmFjZTIgZmVhdHVyZSBpcyBpbmFjdGl2ZSB1bmxlc3MKK2V4cGxpY2l0bHkgZW5hYmxlZCBieSBlbmFibGluZyBvbmUgb3IgbW9yZSBUcmFjZTIgVGFyZ2V0cy4KKworVGhlIFRyYWNlMiBBUEkgaXMgaW50ZW5kZWQgdG8gcmVwbGFjZSB0aGUgZXhpc3RpbmcgKFRyYWNlMSkKK3ByaW50Zi1zdHlsZSB0cmFjaW5nIHByb3ZpZGVkIGJ5IHRoZSBleGlzdGluZyBgR0lUX1RSQUNFYCBhbmQKK2BHSVRfVFJBQ0VfUEVSRk9STUFOQ0VgIGZhY2lsaXRpZXMuICBEdXJpbmcgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiwKK1RyYWNlMiBhbmQgVHJhY2UxIG1heSBvcGVyYXRlIGluIHBhcmFsbGVsLgorCitUaGUgVHJhY2UyIEFQSSBkZWZpbmVzIGEgc2V0IG9mIGhpZ2gtbGV2ZWwgbWVzc2FnZXMgd2l0aCBrbm93biBmaWVsZHMsCitzdWNoIGFzIChgc3RhcnRgOiBgYXJndmApIGFuZCAoYGV4aXRgOiB7YGV4aXQtY29kZWAsIGBlbGFwc2VkLXRpbWVgfSkuCisKK1RyYWNlMiBpbnN0cnVtZW50YXRpb24gdGhyb3VnaG91dCB0aGUgR2l0IGNvZGUgYmFzZSBzZW5kcyBUcmFjZTIKK21lc3NhZ2VzIHRvIHRoZSBlbmFibGVkIFRyYWNlMiBUYXJnZXRzLiAgVGFyZ2V0cyB0cmFuc2Zvcm0gdGhlc2UKK21lc3NhZ2VzIGNvbnRlbnQgaW50byBwdXJwb3NlLXNwZWNpZmljIGZvcm1hdHMgYW5kIHdyaXRlIGV2ZW50cyB0bwordGhlaXIgZGF0YSBzdHJlYW1zLiAgSW4gdGhpcyBtYW5uZXIsIHRoZSBUcmFjZTIgQVBJIGNhbiBkcml2ZQorbWFueSBkaWZmZXJlbnQgdHlwZXMgb2YgYW5hbHlzaXMuCisKK1RhcmdldHMgYXJlIGRlZmluZWQgdXNpbmcgYSBWVGFibGUgYWxsb3dpbmcgZWFzeSBleHRlbnNpb24gdG8gb3RoZXIKK2Zvcm1hdHMgaW4gdGhlIGZ1dHVyZS4gIFRoaXMgbWlnaHQgYmUgdXNlZCB0byBkZWZpbmUgYSBiaW5hcnkgZm9ybWF0LAorZm9yIGV4YW1wbGUuCisKK1RyYWNlMiBpcyBjb250cm9sbGVkIHVzaW5nIGB0cmFjZTIuKmAgY29uZmlnIHZhbHVlcyBpbiB0aGUgc3lzdGVtIGFuZAorZ2xvYmFsIGNvbmZpZyBmaWxlcyBhbmQgYEdJVF9UUkFDRTIqYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBUcmFjZTIgZG9lcworbm90IHJlYWQgZnJvbSByZXBvIGxvY2FsIG9yIHdvcmt0cmVlIGNvbmZpZyBmaWxlcyBvciByZXNwZWN0IGAtY2AKK2NvbW1hbmQgbGluZSBjb25maWcgc2V0dGluZ3MuCisKKz09IFRyYWNlMiBUYXJnZXRzCisKK1RyYWNlMiBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgc2V0IG9mIFRyYWNlMiBUYXJnZXRzLgorRm9ybWF0IGRldGFpbHMgYXJlIGdpdmVuIGluIGEgbGF0ZXIgc2VjdGlvbi4KKworPT09IFRoZSBOb3JtYWwgRm9ybWF0IFRhcmdldAorCitUaGUgbm9ybWFsIGZvcm1hdCB0YXJnZXQgaXMgYSB0cmFkaXRpb24gcHJpbnRmIGZvcm1hdCBhbmQgc2ltaWxhcgordG8gR0lUX1RSQUNFIGZvcm1hdC4gIFRoaXMgZm9ybWF0IGlzIGVuYWJsZWQgd2l0aCB0aGUgYEdJVF9UUkFDRTJgCitlbnZpcm9ubWVudCB2YXJpYWJsZSBvciB0aGUgYHRyYWNlMi5ub3JtYWxUYXJnZXRgIHN5c3RlbSBvciBnbG9iYWwKK2NvbmZpZyBzZXR0aW5nLgorCitGb3IgZXhhbXBsZQorCistLS0tLS0tLS0tLS0KKyQgZXhwb3J0IEdJVF9UUkFDRTI9fi9sb2cubm9ybWFsCiskIGdpdCB2ZXJzaW9uCitnaXQgdmVyc2lvbiAyLjIwLjEuMTU1Lmc0MjZjOTZmY2RiCistLS0tLS0tLS0tLS0KKworb3IKKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgLS1nbG9iYWwgdHJhY2UyLm5vcm1hbFRhcmdldCB+L2xvZy5ub3JtYWwKKyQgZ2l0IHZlcnNpb24KK2dpdCB2ZXJzaW9uIDIuMjAuMS4xNTUuZzQyNmM5NmZjZGIKKy0tLS0tLS0tLS0tLQorCit5aWVsZHMKKworLS0tLS0tLS0tLS0tCiskIGNhdCB+L2xvZy5ub3JtYWwKKzEyOjI4OjQyLjYyMDAwOSBjb21tb24tbWFpbi5jOjM4ICAgICAgICAgICAgICAgICAgdmVyc2lvbiAyLjIwLjEuMTU1Lmc0MjZjOTZmY2RiCisxMjoyODo0Mi42MjA5ODkgY29tbW9uLW1haW4uYzozOSAgICAgICAgICAgICAgICAgIHN0YXJ0IGdpdCB2ZXJzaW9uCisxMjoyODo0Mi42MjExMDEgZ2l0LmM6NDMyICAgICAgICAgICAgICAgICAgICAgICAgIGNtZF9uYW1lIHZlcnNpb24gKHZlcnNpb24pCisxMjoyODo0Mi42MjEyMTUgZ2l0LmM6NjYyICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgZWxhcHNlZDowLjAwMTIyNyBjb2RlOjAKKzEyOjI4OjQyLjYyMTI1MCB0cmFjZTIvdHIyX3RndF9ub3JtYWwuYzoxMjQgICAgICAgYXRleGl0IGVsYXBzZWQ6MC4wMDEyNjUgY29kZTowCistLS0tLS0tLS0tLS0KKworPT09IFRoZSBQZXJmb3JtYW5jZSBGb3JtYXQgVGFyZ2V0CisKK1RoZSBwZXJmb3JtYW5jZSBmb3JtYXQgdGFyZ2V0IChQRVJGKSBpcyBhIGNvbHVtbi1iYXNlZCBmb3JtYXQgdG8KK3JlcGxhY2UgR0lUX1RSQUNFX1BFUkZPUk1BTkNFIGFuZCBpcyBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQgYW5kCit0ZXN0aW5nLCBwb3NzaWJseSB0byBjb21wbGVtZW50IHRvb2xzIGxpa2UgZ3Byb2YuICBUaGlzIGZvcm1hdCBpcworZW5hYmxlZCB3aXRoIHRoZSBgR0lUX1RSQUNFMl9QRVJGYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciB0aGUKK2B0cmFjZTIucGVyZlRhcmdldGAgc3lzdGVtIG9yIGdsb2JhbCBjb25maWcgc2V0dGluZy4KKworRm9yIGV4YW1wbGUKKworLS0tLS0tLS0tLS0tCiskIGV4cG9ydCBHSVRfVFJBQ0UyX1BFUkY9fi9sb2cucGVyZgorJCBnaXQgdmVyc2lvbgorZ2l0IHZlcnNpb24gMi4yMC4xLjE1NS5nNDI2Yzk2ZmNkYgorLS0tLS0tLS0tLS0tCisKK29yCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIHRyYWNlMi5wZXJmVGFyZ2V0IH4vbG9nLnBlcmYKKyQgZ2l0IHZlcnNpb24KK2dpdCB2ZXJzaW9uIDIuMjAuMS4xNTUuZzQyNmM5NmZjZGIKKy0tLS0tLS0tLS0tLQorCit5aWVsZHMKKworLS0tLS0tLS0tLS0tCiskIGNhdCB+L2xvZy5wZXJmCisxMjoyODo0Mi42MjA2NzUgY29tbW9uLW1haW4uYzozOCAgICAgICAgICAgICAgICAgIHwgZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCB2ZXJzaW9uICAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgMi4yMC4xLjE1NS5nNDI2Yzk2ZmNkYgorMTI6Mjg6NDIuNjIxMDAxIGNvbW1vbi1tYWluLmM6MzkgICAgICAgICAgICAgICAgICB8IGQwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgc3RhcnQgICAgICAgIHwgICAgIHwgIDAuMDAxMTczIHwgICAgICAgICAgIHwgICAgICAgICAgICB8IGdpdCB2ZXJzaW9uCisxMjoyODo0Mi42MjExMTEgZ2l0LmM6NDMyICAgICAgICAgICAgICAgICAgICAgICAgIHwgZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCBjbWRfbmFtZSAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgdmVyc2lvbiAodmVyc2lvbikKKzEyOjI4OjQyLjYyMTIyNSBnaXQuYzo2NjIgICAgICAgICAgICAgICAgICAgICAgICAgfCBkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IGV4aXQgICAgICAgICB8ICAgICB8ICAwLjAwMTIyNyB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCBjb2RlOjAKKzEyOjI4OjQyLjYyMTI1OSB0cmFjZTIvdHIyX3RndF9wZXJmLmM6MjExICAgICAgICAgfCBkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IGF0ZXhpdCAgICAgICB8ICAgICB8ICAwLjAwMTI2NSB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCBjb2RlOjAKKy0tLS0tLS0tLS0tLQorCis9PT0gVGhlIEV2ZW50IEZvcm1hdCBUYXJnZXQKKworVGhlIGV2ZW50IGZvcm1hdCB0YXJnZXQgaXMgYSBKU09OLWJhc2VkIGZvcm1hdCBvZiBldmVudCBkYXRhIHN1aXRhYmxlCitmb3IgdGVsZW1ldHJ5IGFuYWx5c2lzLiAgVGhpcyBmb3JtYXQgaXMgZW5hYmxlZCB3aXRoIHRoZSBgR0lUX1RSQUNFMl9FVkVOVGAKK2Vudmlyb25tZW50IHZhcmlhYmxlIG9yIHRoZSBgdHJhY2UyLmV2ZW50VGFyZ2V0YCBzeXN0ZW0gb3IgZ2xvYmFsIGNvbmZpZworc2V0dGluZy4KKworRm9yIGV4YW1wbGUKKworLS0tLS0tLS0tLS0tCiskIGV4cG9ydCBHSVRfVFJBQ0UyX0VWRU5UPX4vbG9nLmV2ZW50CiskIGdpdCB2ZXJzaW9uCitnaXQgdmVyc2lvbiAyLjIwLjEuMTU1Lmc0MjZjOTZmY2RiCistLS0tLS0tLS0tLS0KKworb3IKKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgLS1nbG9iYWwgdHJhY2UyLmV2ZW50VGFyZ2V0IH4vbG9nLmV2ZW50CiskIGdpdCB2ZXJzaW9uCitnaXQgdmVyc2lvbiAyLjIwLjEuMTU1Lmc0MjZjOTZmY2RiCistLS0tLS0tLS0tLS0KKworeWllbGRzCisKKy0tLS0tLS0tLS0tLQorJCBjYXQgfi9sb2cuZXZlbnQKK3siZXZlbnQiOiJ2ZXJzaW9uIiwic2lkIjoic2lkIjoiMjAxOTA0MDhUMTkxNjEwLjUwNzAxOFotSDliNjhjMzVmLVAwMDAwNTlhOCIsInRocmVhZCI6Im1haW4iLCJ0aW1lIjoiMjAxOS0wMS0xNlQxNzoyODo0Mi42MjA3MTNaIiwiZmlsZSI6ImNvbW1vbi1tYWluLmMiLCJsaW5lIjozOCwiZXZ0IjoiMiIsImV4ZSI6IjIuMjAuMS4xNTUuZzQyNmM5NmZjZGIifQoreyJldmVudCI6InN0YXJ0Iiwic2lkIjoiMjAxOTA0MDhUMTkxNjEwLjUwNzAxOFotSDliNjhjMzVmLVAwMDAwNTlhOCIsInRocmVhZCI6Im1haW4iLCJ0aW1lIjoiMjAxOS0wMS0xNlQxNzoyODo0Mi42MjEwMjdaIiwiZmlsZSI6ImNvbW1vbi1tYWluLmMiLCJsaW5lIjozOSwidF9hYnMiOjAuMDAxMTczLCJhcmd2IjpbImdpdCIsInZlcnNpb24iXX0KK3siZXZlbnQiOiJjbWRfbmFtZSIsInNpZCI6IjIwMTkwNDA4VDE5MTYxMC41MDcwMThaLUg5YjY4YzM1Zi1QMDAwMDU5YTgiLCJ0aHJlYWQiOiJtYWluIiwidGltZSI6IjIwMTktMDEtMTZUMTc6Mjg6NDIuNjIxMTIyWiIsImZpbGUiOiJnaXQuYyIsImxpbmUiOjQzMiwibmFtZSI6InZlcnNpb24iLCJoaWVyYXJjaHkiOiJ2ZXJzaW9uIn0KK3siZXZlbnQiOiJleGl0Iiwic2lkIjoiMjAxOTA0MDhUMTkxNjEwLjUwNzAxOFotSDliNjhjMzVmLVAwMDAwNTlhOCIsInRocmVhZCI6Im1haW4iLCJ0aW1lIjoiMjAxOS0wMS0xNlQxNzoyODo0Mi42MjEyMzZaIiwiZmlsZSI6ImdpdC5jIiwibGluZSI6NjYyLCJ0X2FicyI6MC4wMDEyMjcsImNvZGUiOjB9Cit7ImV2ZW50IjoiYXRleGl0Iiwic2lkIjoiMjAxOTA0MDhUMTkxNjEwLjUwNzAxOFotSDliNjhjMzVmLVAwMDAwNTlhOCIsInRocmVhZCI6Im1haW4iLCJ0aW1lIjoiMjAxOS0wMS0xNlQxNzoyODo0Mi42MjEyNjhaIiwiZmlsZSI6InRyYWNlMi90cjJfdGd0X2V2ZW50LmMiLCJsaW5lIjoxNjMsInRfYWJzIjowLjAwMTI2NSwiY29kZSI6MH0KKy0tLS0tLS0tLS0tLQorCis9PT0gRW5hYmxpbmcgYSBUYXJnZXQKKworVG8gZW5hYmxlIGEgdGFyZ2V0LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IKK3N5c3RlbSBvciBnbG9iYWwgY29uZmlnIHZhbHVlIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCitpbmNsdWRlOjouLi90cmFjZTItdGFyZ2V0LXZhbHVlcy50eHRbXQorCitXaGVuIHRyYWNlIGZpbGVzIGFyZSB3cml0dGVuIHRvIGEgdGFyZ2V0IGRpcmVjdG9yeSwgdGhleSB3aWxsIGJlIG5hbWVkIGFjY29yZGluZwordG8gdGhlIGxhc3QgY29tcG9uZW50IG9mIHRoZSBTSUQgKG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSBjb3VudGVyIHRvIGF2b2lkCitmaWxlbmFtZSBjb2xsaXNpb25zKS4KKworPT0gVHJhY2UyIEFQSQorCitBbGwgcHVibGljIFRyYWNlMiBmdW5jdGlvbnMgYW5kIG1hY3JvcyBhcmUgZGVmaW5lZCBpbiBgdHJhY2UyLmhgIGFuZAorYHRyYWNlMi5jYC4gIEFsbCBwdWJsaWMgc3ltYm9scyBhcmUgcHJlZml4ZWQgd2l0aCBgdHJhY2UyX2AuCisKK1RoZXJlIGFyZSBubyBwdWJsaWMgVHJhY2UyIGRhdGEgc3RydWN0dXJlcy4KKworVGhlIFRyYWNlMiBjb2RlIGFsc28gZGVmaW5lcyBhIHNldCBvZiBwcml2YXRlIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcworaW4gdGhlIGB0cmFjZTIvYCBkaXJlY3RvcnkuICBUaGVzZSBzeW1ib2xzIGFyZSBwcmVmaXhlZCB3aXRoIGB0cjJfYAorYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgZnVuY3Rpb25zIGluIGB0cmFjZTIuY2AuCisKKz09IENvbnZlbnRpb25zIGZvciBQdWJsaWMgRnVuY3Rpb25zIGFuZCBNYWNyb3MKKworVGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGJ5IHRoZSBUcmFjZTIgQVBJIGFyZSBkZWNsYXJlZCBhbmQgZG9jdW1lbnRlZAoraW4gYHRyYWNlMi5oYC4gIEl0IGRlZmluZXMgdGhlIEFQSSBmdW5jdGlvbnMgYW5kIHdyYXBwZXIgbWFjcm9zIGZvcgorVHJhY2UyLgorCitTb21lIGZ1bmN0aW9ucyBoYXZlIGEgYF9mbCgpYCBzdWZmaXggdG8gaW5kaWNhdGUgdGhhdCB0aGV5IHRha2UgYGZpbGVgCithbmQgYGxpbmUtbnVtYmVyYCBhcmd1bWVudHMuCisKK1NvbWUgZnVuY3Rpb25zIGhhdmUgYSBgX3ZhX2ZsKClgIHN1ZmZpeCB0byBpbmRpY2F0ZSB0aGF0IHRoZXkgYWxzbwordGFrZSBhIGB2YV9saXN0YCBhcmd1bWVudC4KKworU29tZSBmdW5jdGlvbnMgaGF2ZSBhIGBfcHJpbnRmX2ZsKClgIHN1ZmZpeCB0byBpbmRpY2F0ZSB0aGF0IHRoZXkgYWxzbwordGFrZSBhIHZhcmFyZ3MgYXJndW1lbnQuCisKK1RoZXJlIGFyZSBDUFAgd3JhcHBlciBtYWNyb3MgYW5kIGlmZGVmcyB0byBoaWRlIG1vc3Qgb2YgdGhlc2UgZGV0YWlscy4KK1NlZSBgdHJhY2UyLmhgIGZvciBtb3JlIGRldGFpbHMuICBUaGUgZm9sbG93aW5nIGRpc2N1c3Npb24gd2lsbCBvbmx5CitkZXNjcmliZSB0aGUgc2ltcGxpZmllZCBmb3Jtcy4KKworPT0gUHVibGljIEFQSQorCitBbGwgVHJhY2UyIEFQSSBmdW5jdGlvbnMgc2VuZCBhIG1lc3NhZ2UgdG8gYWxsIG9mIHRoZSBhY3RpdmUKK1RyYWNlMiBUYXJnZXRzLiAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgc2V0IG9mIGF2YWlsYWJsZQorbWVzc2FnZXMuCisKK0l0IGhlbHBzIHRvIGRpdmlkZSB0aGVzZSBmdW5jdGlvbnMgaW50byBncm91cHMgZm9yIGRpc2N1c3Npb24KK3B1cnBvc2VzLgorCis9PT0gQmFzaWMgQ29tbWFuZCBNZXNzYWdlcworCitUaGVzZSBhcmUgY29uY2VybmVkIHdpdGggdGhlIGxpZmV0aW1lIG9mIHRoZSBvdmVyYWxsIGdpdCBwcm9jZXNzLgorZS5nOiBgdm9pZCB0cmFjZTJfaW5pdGlhbGl6ZV9jbG9jaygpYCwgYHZvaWQgdHJhY2UyX2luaXRpYWxpemUoKWAsCitgaW50IHRyYWNlMl9pc19lbmFibGVkKClgLCBgdm9pZCB0cmFjZTJfY21kX3N0YXJ0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilgLgorCis9PT0gQ29tbWFuZCBEZXRhaWwgTWVzc2FnZXMKKworVGhlc2UgYXJlIGNvbmNlcm5lZCB3aXRoIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljIEdpdCBjb21tYW5kCithZnRlciB0aGUgY29tbWFuZCBsaW5lLCBjb25maWcsIGFuZCBlbnZpcm9ubWVudCBhcmUgaW5zcGVjdGVkLgorZS5nOiBgdm9pZCB0cmFjZTJfY21kX25hbWUoY29uc3QgY2hhciAqbmFtZSlgLAorYHZvaWQgdHJhY2UyX2NtZF9tb2RlKGNvbnN0IGNoYXIgKm1vZGUpYC4KKworPT09IENoaWxkIFByb2Nlc3MgTWVzc2FnZXMKKworVGhlc2UgYXJlIGNvbmNlcm5lZCB3aXRoIHRoZSB2YXJpb3VzIHNwYXduZWQgY2hpbGQgcHJvY2Vzc2VzLAoraW5jbHVkaW5nIHNoZWxsIHNjcmlwdHMsIGdpdCBjb21tYW5kcywgZWRpdG9ycywgcGFnZXJzLCBhbmQgaG9va3MuCisKK2UuZzogYHZvaWQgdHJhY2UyX2NoaWxkX3N0YXJ0KHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQpYC4KKworPT09IEdpdCBUaHJlYWQgTWVzc2FnZXMKKworVGhlc2UgbWVzc2FnZXMgYXJlIGNvbmNlcm5lZCB3aXRoIEdpdCB0aHJlYWQgdXNhZ2UuCisKK2UuZzogYHZvaWQgdHJhY2UyX3RocmVhZF9zdGFydChjb25zdCBjaGFyICp0aHJlYWRfbmFtZSlgLgorCis9PT0gUmVnaW9uIGFuZCBEYXRhIE1lc3NhZ2VzCisKK1RoZXNlIGFyZSBjb25jZXJuZWQgd2l0aCByZWNvcmRpbmcgcGVyZm9ybWFuY2UgZGF0YQorb3ZlciByZWdpb25zIG9yIHNwYW5zIG9mIGNvZGUuIGUuZzoKK2B2b2lkIHRyYWNlMl9yZWdpb25fZW50ZXIoY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbylgLgorCitSZWZlciB0byB0cmFjZTIuaCBmb3IgZGV0YWlscyBhYm91dCBhbGwgdHJhY2UyIGZ1bmN0aW9ucy4KKworPT0gVHJhY2UyIFRhcmdldCBGb3JtYXRzCisKKz09PSBOT1JNQUwgRm9ybWF0CisKK0V2ZW50cyBhcmUgd3JpdHRlbiBhcyBsaW5lcyBvZiB0aGUgZm9ybToKKworLS0tLS0tLS0tLS0tCitbPHRpbWU+IFNQIDxmaWxlbmFtZT46PGxpbmU+IFNQK10gPGV2ZW50LW5hbWU+IFtbU1BdIDxldmVudC1tZXNzYWdlPl0gTEYKKy0tLS0tLS0tLS0tLQorCitgPGV2ZW50LW5hbWU+YDo6CisKKwlpcyB0aGUgZXZlbnQgbmFtZS4KKworYDxldmVudC1tZXNzYWdlPmA6OgorCWlzIGEgZnJlZS1mb3JtIHByaW50ZiBtZXNzYWdlIGludGVuZGVkIGZvciBodW1hbiBjb25zdW1wdGlvbi4KKysKK05vdGUgdGhhdCB0aGlzIG1heSBjb250YWluIGVtYmVkZGVkIExGIG9yIENSTEYgY2hhcmFjdGVycyB0aGF0IGFyZQorbm90IGVzY2FwZWQsIHNvIHRoZSBldmVudCBtYXkgc3BpbGwgYWNyb3NzIG11bHRpcGxlIGxpbmVzLgorCitJZiBgR0lUX1RSQUNFMl9CUklFRmAgb3IgYHRyYWNlMi5ub3JtYWxCcmllZmAgaXMgdHJ1ZSwgdGhlIGB0aW1lYCwgYGZpbGVuYW1lYCwKK2FuZCBgbGluZWAgZmllbGRzIGFyZSBvbWl0dGVkLgorCitUaGlzIHRhcmdldCBpcyBpbnRlbmRlZCB0byBiZSBtb3JlIG9mIGEgc3VtbWFyeSAobGlrZSBHSVRfVFJBQ0UpIGFuZAorbGVzcyBkZXRhaWxlZCB0aGFuIHRoZSBvdGhlciB0YXJnZXRzLiAgSXQgaWdub3JlcyB0aHJlYWQsIHJlZ2lvbiwgYW5kCitkYXRhIG1lc3NhZ2VzLCBmb3IgZXhhbXBsZS4KKworPT09IFBFUkYgRm9ybWF0CisKK0V2ZW50cyBhcmUgd3JpdHRlbiBhcyBsaW5lcyBvZiB0aGUgZm9ybToKKworLS0tLS0tLS0tLS0tCitbPHRpbWU+IFNQIDxmaWxlbmFtZT46PGxpbmU+IFNQKworICAgIEJBUiBTUF0gZDxkZXB0aD4gU1AKKyAgICBCQVIgU1AgPHRocmVhZC1uYW1lPiBTUCsKKyAgICBCQVIgU1AgPGV2ZW50LW5hbWU+IFNQKworICAgIEJBUiBTUCBbcjxyZXBvLWlkPl0gU1ArCisgICAgQkFSIFNQIFs8dF9hYnM+XSBTUCsKKyAgICBCQVIgU1AgWzx0X3JlbD5dIFNQKworICAgIEJBUiBTUCBbPGNhdGVnb3J5Pl0gU1ArCisgICAgQkFSIFNQIERPVFMqIDxwZXJmLWV2ZW50LW1lc3NhZ2U+CisgICAgTEYKKy0tLS0tLS0tLS0tLQorCitgPGRlcHRoPmA6OgorCWlzIHRoZSBnaXQgcHJvY2VzcyBkZXB0aC4gIFRoaXMgaXMgdGhlIG51bWJlciBvZiBwYXJlbnQKKwlnaXQgcHJvY2Vzc2VzLiAgQSB0b3AtbGV2ZWwgZ2l0IGNvbW1hbmQgaGFzIGRlcHRoIHZhbHVlICJkMCIuCisJQSBjaGlsZCBvZiBpdCBoYXMgZGVwdGggdmFsdWUgImQxIi4gIEEgc2Vjb25kIGxldmVsIGNoaWxkCisJaGFzIGRlcHRoIHZhbHVlICJkMiIgYW5kIHNvIG9uLgorCitgPHRocmVhZC1uYW1lPmA6OgorCWlzIGEgdW5pcXVlIG5hbWUgZm9yIHRoZSB0aHJlYWQuICBUaGUgcHJpbWFyeSB0aHJlYWQKKwlpcyBjYWxsZWQgIm1haW4iLiAgT3RoZXIgdGhyZWFkIG5hbWVzIGFyZSBvZiB0aGUgZm9ybSAidGglZDolcyIKKwlhbmQgaW5jbHVkZSBhIHVuaXF1ZSBudW1iZXIgYW5kIHRoZSBuYW1lIG9mIHRoZSB0aHJlYWQtcHJvYy4KKworYDxldmVudC1uYW1lPmA6OgorCWlzIHRoZSBldmVudCBuYW1lLgorCitgPHJlcG8taWQ+YDo6CisJd2hlbiBwcmVzZW50LCBpcyBhIG51bWJlciBpbmRpY2F0aW5nIHRoZSByZXBvc2l0b3J5CisJaW4gdXNlLiAgQSBgZGVmX3JlcG9gIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBhIHJlcG9zaXRvcnkgaXMKKwlvcGVuZWQuICBUaGlzIGRlZmluZXMgdGhlIHJlcG8taWQgYW5kIGFzc29jaWF0ZWQgd29ya3RyZWUuCisJU3Vic2VxdWVudCByZXBvLXNwZWNpZmljIGV2ZW50cyB3aWxsIHJlZmVyZW5jZSB0aGlzIHJlcG8taWQuCisrCitDdXJyZW50bHksIHRoaXMgaXMgYWx3YXlzICJyMSIgZm9yIHRoZSBtYWluIHJlcG9zaXRvcnkuCitUaGlzIGZpZWxkIGlzIGluIGFudGljaXBhdGlvbiBvZiBpbi1wcm9jIHN1Ym1vZHVsZXMgaW4gdGhlIGZ1dHVyZS4KKworYDx0X2Ficz5gOjoKKwl3aGVuIHByZXNlbnQsIGlzIHRoZSBhYnNvbHV0ZSB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlCisJcHJvZ3JhbSBzdGFydGVkLgorCitgPHRfcmVsPmA6OgorCXdoZW4gcHJlc2VudCwgaXMgdGltZSBpbiBzZWNvbmRzIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZgorCXRoZSBjdXJyZW50IHJlZ2lvbi4gIEZvciBhIHRocmVhZC1leGl0IGV2ZW50LCBpdCBpcyB0aGUgZWxhcHNlZAorCXRpbWUgb2YgdGhlIHRocmVhZC4KKworYDxjYXRlZ29yeT5gOjoKKwlpcyBwcmVzZW50IG9uIHJlZ2lvbiBhbmQgZGF0YSBldmVudHMgYW5kIGlzIHVzZWQgdG8KKwlpbmRpY2F0ZSBhIGJyb2FkIGNhdGVnb3J5LCBzdWNoIGFzICJpbmRleCIgb3IgInN0YXR1cyIuCisKK2A8cGVyZi1ldmVudC1tZXNzYWdlPmA6OgorCWlzIGEgZnJlZS1mb3JtIHByaW50ZiBtZXNzYWdlIGludGVuZGVkIGZvciBodW1hbiBjb25zdW1wdGlvbi4KKworLS0tLS0tLS0tLS0tCisxNTozMzozMy41MzI3MTIgd3Qtc3RhdHVzLmM6MjMxMCAgICAgICAgICAgICAgICAgIHwgZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCByZWdpb25fZW50ZXIgfCByMSAgfCAgMC4xMjYwNjQgfCAgICAgICAgICAgfCBzdGF0dXMgICAgIHwgbGFiZWw6cHJpbnQKKzE1OjMzOjMzLjUzMjcxMiB3dC1zdGF0dXMuYzoyMzMxICAgICAgICAgICAgICAgICAgfCBkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHJlZ2lvbl9sZWF2ZSB8IHIxICB8ICAwLjEyNzU2OCB8ICAwLjAwMTUwNCB8IHN0YXR1cyAgICAgfCBsYWJlbDpwcmludAorLS0tLS0tLS0tLS0tCisKK0lmIGBHSVRfVFJBQ0UyX1BFUkZfQlJJRUZgIG9yIGB0cmFjZTIucGVyZkJyaWVmYCBpcyB0cnVlLCB0aGUgYHRpbWVgLCBgZmlsZWAsCithbmQgYGxpbmVgIGZpZWxkcyBhcmUgb21pdHRlZC4KKworLS0tLS0tLS0tLS0tCitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHJlZ2lvbl9sZWF2ZSB8IHIxICB8ICAwLjAxMTcxNyB8ICAwLjAwOTEyMiB8IGluZGV4ICAgICAgfCBsYWJlbDpwcmVsb2FkCistLS0tLS0tLS0tLS0KKworVGhlIFBFUkYgdGFyZ2V0IGlzIGludGVuZGVkIGZvciBpbnRlcmFjdGl2ZSBwZXJmb3JtYW5jZSBhbmFseXNpcworZHVyaW5nIGRldmVsb3BtZW50IGFuZCBpcyBxdWl0ZSBub2lzeS4KKworPT09IEVWRU5UIEZvcm1hdAorCitFYWNoIGV2ZW50IGlzIGEgSlNPTi1vYmplY3QgY29udGFpbmluZyBtdWx0aXBsZSBrZXkvdmFsdWUgcGFpcnMKK3dyaXR0ZW4gYXMgYSBzaW5nbGUgbGluZSBhbmQgZm9sbG93ZWQgYnkgYSBMRi4KKworLS0tLS0tLS0tLS0tCisneycgPGtleT4gJzonIDx2YWx1ZT4gWycsJyA8a2V5PiAnOicgPHZhbHVlPl0qICd9JyBMRgorLS0tLS0tLS0tLS0tCisKK1NvbWUga2V5L3ZhbHVlIHBhaXJzIGFyZSBjb21tb24gdG8gYWxsIGV2ZW50cyBhbmQgc29tZSBhcmUKK2V2ZW50LXNwZWNpZmljLgorCis9PT09IENvbW1vbiBLZXkvVmFsdWUgUGFpcnMKKworVGhlIGZvbGxvd2luZyBrZXkvdmFsdWUgcGFpcnMgYXJlIGNvbW1vbiB0byBhbGwgZXZlbnRzOgorCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJ2ZXJzaW9uIiwKKwkic2lkIjoiMjAxOTA0MDhUMTkxODI3LjI3Mjc1OVotSDliNjhjMzVmLVAwMDAwMzUxMCIsCisJInRocmVhZCI6Im1haW4iLAorCSJ0aW1lIjoiMjAxOS0wNC0wOFQxOToxODoyNy4yODI3NjFaIiwKKwkiZmlsZSI6ImNvbW1vbi1tYWluLmMiLAorCSJsaW5lIjo0MiwKKwkuLi4KK30KKy0tLS0tLS0tLS0tLQorCitgImV2ZW50Ijo8ZXZlbnQ+YDo6CisJaXMgdGhlIGV2ZW50IG5hbWUuCisKK2Aic2lkIjo8c2lkPmA6OgorCWlzIHRoZSBzZXNzaW9uLWlkLiAgVGhpcyBpcyBhIHVuaXF1ZSBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlCisJcHJvY2VzcyBpbnN0YW5jZSB0byBhbGxvdyBhbGwgZXZlbnRzIGVtaXR0ZWQgYnkgYSBwcm9jZXNzIHRvCisJYmUgaWRlbnRpZmllZC4gIEEgc2Vzc2lvbi1pZCBpcyB1c2VkIGluc3RlYWQgb2YgYSBQSUQgYmVjYXVzZQorCVBJRHMgYXJlIHJlY3ljbGVkIGJ5IHRoZSBPUy4gIEZvciBjaGlsZCBnaXQgcHJvY2Vzc2VzLCB0aGUKKwlzZXNzaW9uLWlkIGlzIHByZXBlbmRlZCB3aXRoIHRoZSBzZXNzaW9uLWlkIG9mIHRoZSBwYXJlbnQgZ2l0CisJcHJvY2VzcyB0byBhbGxvdyBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwcyB0byBiZSBpZGVudGlmaWVkCisJZHVyaW5nIHBvc3QtcHJvY2Vzc2luZy4KKworYCJ0aHJlYWQiOjx0aHJlYWQ+YDo6CisJaXMgdGhlIHRocmVhZCBuYW1lLgorCitgInRpbWUiOjx0aW1lPmA6OgorCWlzIHRoZSBVVEMgdGltZSBvZiB0aGUgZXZlbnQuCisKK2AiZmlsZSI6PGZpbGVuYW1lPmA6OgorCWlzIHNvdXJjZSBmaWxlIGdlbmVyYXRpbmcgdGhlIGV2ZW50LgorCitgImxpbmUiOjxsaW5lLW51bWJlcj5gOjoKKwlpcyB0aGUgaW50ZWdlciBzb3VyY2UgbGluZSBudW1iZXIgZ2VuZXJhdGluZyB0aGUgZXZlbnQuCisKK2AicmVwbyI6PHJlcG8taWQ+YDo6CisJd2hlbiBwcmVzZW50LCBpcyB0aGUgaW50ZWdlciByZXBvLWlkIGFzIGRlc2NyaWJlZCBwcmV2aW91c2x5LgorCitJZiBgR0lUX1RSQUNFMl9FVkVOVF9CUklFRmAgb3IgYHRyYWNlMi5ldmVudEJyaWVmYCBpcyB0cnVlLCB0aGUgYGZpbGVgCithbmQgYGxpbmVgIGZpZWxkcyBhcmUgb21pdHRlZCBmcm9tIGFsbCBldmVudHMgYW5kIHRoZSBgdGltZWAgZmllbGQgaXMKK29ubHkgcHJlc2VudCBvbiB0aGUgInN0YXJ0IiBhbmQgImF0ZXhpdCIgZXZlbnRzLgorCis9PT09IEV2ZW50LVNwZWNpZmljIEtleS9WYWx1ZSBQYWlycworCitgInZlcnNpb24iYDo6CisJVGhpcyBldmVudCBnaXZlcyB0aGUgdmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZSBhbmQgdGhlIEVWRU5UIGZvcm1hdC4gSXQKKwlzaG91bGQgYWx3YXlzIGJlIHRoZSBmaXJzdCBldmVudCBpbiBhIHRyYWNlIHNlc3Npb24uIFRoZSBFVkVOVCBmb3JtYXQKKwl2ZXJzaW9uIHdpbGwgYmUgaW5jcmVtZW50ZWQgaWYgbmV3IGV2ZW50IHR5cGVzIGFyZSBhZGRlZCwgaWYgZXhpc3RpbmcKKwlmaWVsZHMgYXJlIHJlbW92ZWQsIG9yIGlmIHRoZXJlIGFyZSBzaWduaWZpY2FudCBjaGFuZ2VzIGluCisJaW50ZXJwcmV0YXRpb24gb2YgZXhpc3RpbmcgZXZlbnRzIG9yIGZpZWxkcy4gU21hbGxlciBjaGFuZ2VzLCBzdWNoIGFzCisJYWRkaW5nIGEgbmV3IGZpZWxkIHRvIGFuIGV4aXN0aW5nIGV2ZW50LCB3aWxsIG5vdCByZXF1aXJlIGFuIGluY3JlbWVudAorCXRvIHRoZSBFVkVOVCBmb3JtYXQgdmVyc2lvbi4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6InZlcnNpb24iLAorCS4uLgorCSJldnQiOiIyIiwJCSAgICAgICAjIEVWRU5UIGZvcm1hdCB2ZXJzaW9uCisJImV4ZSI6IjIuMjAuMS4xNTUuZzQyNmM5NmZjZGIiICMgZ2l0IHZlcnNpb24KK30KKy0tLS0tLS0tLS0tLQorCitgImRpc2NhcmQiYDo6CisJVGhpcyBldmVudCBpcyB3cml0dGVuIHRvIHRoZSBnaXQtdHJhY2UyLWRpc2NhcmQgc2VudGluZWwgZmlsZSBpZiB0aGVyZQorCWFyZSB0b28gbWFueSBmaWxlcyBpbiB0aGUgdGFyZ2V0IHRyYWNlIGRpcmVjdG9yeSAoc2VlIHRoZQorCXRyYWNlMi5tYXhGaWxlcyBjb25maWcgb3B0aW9uKS4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6ImRpc2NhcmQiLAorCS4uLgorfQorLS0tLS0tLS0tLS0tCisKK2Aic3RhcnQiYDo6CisJVGhpcyBldmVudCBjb250YWlucyB0aGUgY29tcGxldGUgYXJndiByZWNlaXZlZCBieSBtYWluKCkuCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJzdGFydCIsCisJLi4uCisJInRfYWJzIjowLjAwMTIyNywgIyBlbGFwc2VkIHRpbWUgaW4gc2Vjb25kcworCSJhcmd2IjpbImdpdCIsInZlcnNpb24iXQorfQorLS0tLS0tLS0tLS0tCisKK2AiZXhpdCJgOjoKKwlUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBnaXQgY2FsbHMgYGV4aXQoKWAuCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJleGl0IiwKKwkuLi4KKwkidF9hYnMiOjAuMDAxMjI3LCAjIGVsYXBzZWQgdGltZSBpbiBzZWNvbmRzCisJImNvZGUiOjAJICAjIGV4aXQgY29kZQorfQorLS0tLS0tLS0tLS0tCisKK2AiYXRleGl0ImA6OgorCVRoaXMgZXZlbnQgaXMgZW1pdHRlZCBieSB0aGUgVHJhY2UyIGBhdGV4aXRgIHJvdXRpbmUgZHVyaW5nCisJZmluYWwgc2h1dGRvd24uICBJdCBzaG91bGQgYmUgdGhlIGxhc3QgZXZlbnQgZW1pdHRlZCBieSB0aGUKKwlwcm9jZXNzLgorKworKFRoZSBlbGFwc2VkIHRpbWUgcmVwb3J0ZWQgaGVyZSBpcyBncmVhdGVyIHRoYW4gdGhlIHRpbWUgcmVwb3J0ZWQgaW4KK3RoZSAiZXhpdCIgZXZlbnQgYmVjYXVzZSBpdCBydW5zIGFmdGVyIGFsbCBvdGhlciBhdGV4aXQgdGFza3MgaGF2ZQorY29tcGxldGVkLikKKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6ImF0ZXhpdCIsCisJLi4uCisJInRfYWJzIjowLjAwMTIyNywgIyBlbGFwc2VkIHRpbWUgaW4gc2Vjb25kcworCSJjb2RlIjowICAgICAgICAgICMgZXhpdCBjb2RlCit9CistLS0tLS0tLS0tLS0KKworYCJzaWduYWwiYDo6CisJVGhpcyBldmVudCBpcyBlbWl0dGVkIHdoZW4gdGhlIHByb2dyYW0gaXMgdGVybWluYXRlZCBieSBhIHVzZXIKKwlzaWduYWwuICBEZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLCB0aGUgc2lnbmFsIGV2ZW50IG1heQorCXByZXZlbnQgdGhlICJhdGV4aXQiIGV2ZW50IGZyb20gYmVpbmcgZ2VuZXJhdGVkLgorKworLS0tLS0tLS0tLS0tCit7CisJImV2ZW50Ijoic2lnbmFsIiwKKwkuLi4KKwkidF9hYnMiOjAuMDAxMjI3LCAgIyBlbGFwc2VkIHRpbWUgaW4gc2Vjb25kcworCSJzaWdubyI6MTMgICAgICAgICAjIFNJR1RFUk0sIFNJR0lOVCwgZXRjLgorfQorLS0tLS0tLS0tLS0tCisKK2AiZXJyb3IiYDo6CisJVGhpcyBldmVudCBpcyBlbWl0dGVkIHdoZW4gb25lIG9mIHRoZSBgZXJyb3IoKWAsIGBkaWUoKWAsCisJb3IgYHVzYWdlKClgIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLgorKworLS0tLS0tLS0tLS0tCit7CisJImV2ZW50IjoiZXJyb3IiLAorCS4uLgorCSJtc2ciOiJpbnZhbGlkIG9wdGlvbjogLS1jYWhjZWQiLCAjIGZvcm1hdHRlZCBlcnJvciBtZXNzYWdlCisJImZtdCI6ImludmFsaWQgb3B0aW9uOiAlcyIJICAjIGVycm9yIGZvcm1hdCBzdHJpbmcKK30KKy0tLS0tLS0tLS0tLQorKworVGhlIGVycm9yIGV2ZW50IG1heSBiZSBlbWl0dGVkIG1vcmUgdGhhbiBvbmNlLiAgVGhlIGZvcm1hdCBzdHJpbmcKK2FsbG93cyBwb3N0LXByb2Nlc3NvcnMgdG8gZ3JvdXAgZXJyb3JzIGJ5IHR5cGUgd2l0aG91dCB3b3JyeWluZworYWJvdXQgc3BlY2lmaWMgZXJyb3IgYXJndW1lbnRzLgorCitgImNtZF9wYXRoImA6OgorCVRoaXMgZXZlbnQgY29udGFpbnMgdGhlIGRpc2NvdmVyZWQgZnVsbCBwYXRoIG9mIHRoZSBnaXQKKwlleGVjdXRhYmxlIChvbiBwbGF0Zm9ybXMgdGhhdCBhcmUgY29uZmlndXJlZCB0byByZXNvbHZlIGl0KS4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6ImNtZF9wYXRoIiwKKwkuLi4KKwkicGF0aCI6IkM6L3dvcmsvZ2Z3L2dpdC5leGUiCit9CistLS0tLS0tLS0tLS0KKworYCJjbWRfbmFtZSJgOjoKKwlUaGlzIGV2ZW50IGNvbnRhaW5zIHRoZSBjb21tYW5kIG5hbWUgZm9yIHRoaXMgZ2l0IHByb2Nlc3MKKwlhbmQgdGhlIGhpZXJhcmNoeSBvZiBjb21tYW5kcyBmcm9tIHBhcmVudCBnaXQgcHJvY2Vzc2VzLgorKworLS0tLS0tLS0tLS0tCit7CisJImV2ZW50IjoiY21kX25hbWUiLAorCS4uLgorCSJuYW1lIjoicGFjay1vYmplY3RzIiwKKwkiaGllcmFyY2h5IjoicHVzaC9wYWNrLW9iamVjdHMiCit9CistLS0tLS0tLS0tLS0KKysKK05vcm1hbGx5LCB0aGUgIm5hbWUiIGZpZWxkIGNvbnRhaW5zIHRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUKK2NvbW1hbmQuICBXaGVuIGEgY2Fub25pY2FsIG5hbWUgaXMgbm90IGF2YWlsYWJsZSwgb25lIG9mCit0aGVzZSBzcGVjaWFsIHZhbHVlcyBhcmUgdXNlZDoKKysKKy0tLS0tLS0tLS0tLQorIl9xdWVyeV8iICAgICAgICAgICAgIyAiZ2l0IC0taHRtbC1wYXRoIgorIl9ydW5fZGFzaGVkXyIgICAgICAgIyB3aGVuICJnaXQgZm9vIiB0cmllcyB0byBydW4gImdpdC1mb28iCisiX3J1bl9zaGVsbF9hbGlhc18iICAjIGFsaWFzIGV4cGFuc2lvbiB0byBhIHNoZWxsIGNvbW1hbmQKKyJfcnVuX2dpdF9hbGlhc18iICAgICMgYWxpYXMgZXhwYW5zaW9uIHRvIGEgZ2l0IGNvbW1hbmQKKyJfdXNhZ2VfIiAgICAgICAgICAgICMgdXNhZ2UgZXJyb3IKKy0tLS0tLS0tLS0tLQorCitgImNtZF9tb2RlImA6OgorCVRoaXMgZXZlbnQsIHdoZW4gcHJlc2VudCwgZGVzY3JpYmVzIHRoZSBjb21tYW5kIHZhcmlhbnQgVGhpcworCWV2ZW50IG1heSBiZSBlbWl0dGVkIG1vcmUgdGhhbiBvbmNlLgorKworLS0tLS0tLS0tLS0tCit7CisJImV2ZW50IjoiY21kX21vZGUiLAorCS4uLgorCSJuYW1lIjoiYnJhbmNoIgorfQorLS0tLS0tLS0tLS0tCisrCitUaGUgIm5hbWUiIGZpZWxkIGlzIGFuIGFyYml0cmFyeSBzdHJpbmcgdG8gZGVzY3JpYmUgdGhlIGNvbW1hbmQgbW9kZS4KK0ZvciBleGFtcGxlLCBjaGVja291dCBjYW4gY2hlY2tvdXQgYSBicmFuY2ggb3IgYW4gaW5kaXZpZHVhbCBmaWxlLgorQW5kIHRoZXNlIHZhcmlhdGlvbnMgdHlwaWNhbGx5IGhhdmUgZGlmZmVyZW50IHBlcmZvcm1hbmNlCitjaGFyYWN0ZXJpc3RpY3MgdGhhdCBhcmUgbm90IGNvbXBhcmFibGUuCisKK2AiYWxpYXMiYDo6CisJVGhpcyBldmVudCBpcyBwcmVzZW50IHdoZW4gYW4gYWxpYXMgaXMgZXhwYW5kZWQuCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJhbGlhcyIsCisJLi4uCisJImFsaWFzIjoibCIsCQkgIyByZWdpc3RlcmVkIGFsaWFzCisJImFyZ3YiOlsibG9nIiwiLS1ncmFwaCJdICMgYWxpYXMgZXhwYW5zaW9uCit9CistLS0tLS0tLS0tLS0KKworYCJjaGlsZF9zdGFydCJgOjoKKwlUaGlzIGV2ZW50IGRlc2NyaWJlcyBhIGNoaWxkIHByb2Nlc3MgdGhhdCBpcyBhYm91dCB0byBiZQorCXNwYXduZWQuCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJjaGlsZF9zdGFydCIsCisJLi4uCisJImNoaWxkX2lkIjoyLAorCSJjaGlsZF9jbGFzcyI6Ij8iLAorCSJ1c2Vfc2hlbGwiOmZhbHNlLAorCSJhcmd2IjpbImdpdCIsInJldi1saXN0IiwiLS1vYmplY3RzIiwiLS1zdGRpbiIsIi0tbm90IiwiLS1hbGwiLCItLXF1aWV0Il0KKworCSJob29rX25hbWUiOiI8aG9va19uYW1lPiIgICMgcHJlc2VudCB3aGVuIGNoaWxkX2NsYXNzIGlzICJob29rIgorCSJjZCI6IjxwYXRoPiIJCSAgICMgcHJlc2VudCB3aGVuIGNkIGlzIHJlcXVpcmVkCit9CistLS0tLS0tLS0tLS0KKysKK1RoZSAiY2hpbGRfaWQiIGZpZWxkIGNhbiBiZSB1c2VkIHRvIG1hdGNoIHRoaXMgY2hpbGRfc3RhcnQgd2l0aCB0aGUKK2NvcnJlc3BvbmRpbmcgY2hpbGRfZXhpdCBldmVudC4KKysKK1RoZSAiY2hpbGRfY2xhc3MiIGZpZWxkIGlzIGEgcm91Z2ggY2xhc3NpZmljYXRpb24sIHN1Y2ggYXMgImVkaXRvciIsCisicGFnZXIiLCAidHJhbnNwb3J0LyoiLCBhbmQgImhvb2siLiAgVW5jbGFzc2lmaWVkIGNoaWxkcmVuIGFyZSBjbGFzc2lmaWVkCit3aXRoICI/Ii4KKworYCJjaGlsZF9leGl0ImA6OgorCVRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIGFmdGVyIHRoZSBjdXJyZW50IHByb2Nlc3MgaGFzIHJldHVybmVkCisJZnJvbSB0aGUgd2FpdHBpZCgpIGFuZCBjb2xsZWN0ZWQgdGhlIGV4aXQgaW5mb3JtYXRpb24gZnJvbSB0aGUKKwljaGlsZC4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6ImNoaWxkX2V4aXQiLAorCS4uLgorCSJjaGlsZF9pZCI6MiwKKwkicGlkIjoxNDcwOCwJICMgY2hpbGQgUElECisJImNvZGUiOjAsCSAjIGNoaWxkIGV4aXQtY29kZQorCSJ0X3JlbCI6MC4xMTA2MDUgIyBvYnNlcnZlZCBydW4tdGltZSBvZiBjaGlsZCBwcm9jZXNzCit9CistLS0tLS0tLS0tLS0KKysKK05vdGUgdGhhdCB0aGUgc2Vzc2lvbi1pZCBvZiB0aGUgY2hpbGQgcHJvY2VzcyBpcyBub3QgYXZhaWxhYmxlIHRvCit0aGUgY3VycmVudC9zcGF3bmluZyBwcm9jZXNzLCBzbyB0aGUgY2hpbGQncyBQSUQgaXMgcmVwb3J0ZWQgaGVyZSBhcworYSBoaW50IGZvciBwb3N0LXByb2Nlc3NpbmcuICAoQnV0IGl0IGlzIG9ubHkgYSBoaW50IGJlY2F1c2UgdGhlIGNoaWxkCitwcm9jZXNzIG1heSBiZSBhIHNoZWxsIHNjcmlwdCB3aGljaCBkb2Vzbid0IGhhdmUgYSBzZXNzaW9uLWlkLikKKysKK05vdGUgdGhhdCB0aGUgYHRfcmVsYCBmaWVsZCBjb250YWlucyB0aGUgb2JzZXJ2ZWQgcnVuIHRpbWUgaW4gc2Vjb25kcworZm9yIHRoZSBjaGlsZCBwcm9jZXNzIChzdGFydGluZyBiZWZvcmUgdGhlIGZvcmsvZXhlYy9zcGF3biBhbmQKK3N0b3BwaW5nIGFmdGVyIHRoZSB3YWl0cGlkKCkgYW5kIGluY2x1ZGVzIE9TIHByb2Nlc3MgY3JlYXRpb24gb3ZlcmhlYWQpLgorU28gdGhpcyB0aW1lIHdpbGwgYmUgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIGF0ZXhpdCB0aW1lIHJlcG9ydGVkIGJ5Cit0aGUgY2hpbGQgcHJvY2VzcyBpdHNlbGYuCisKK2AiZXhlYyJgOjoKKwlUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCBiZWZvcmUgZ2l0IGF0dGVtcHRzIHRvIGBleGVjKClgCisJYW5vdGhlciBjb21tYW5kIHJhdGhlciB0aGFuIHN0YXJ0aW5nIGEgY2hpbGQgcHJvY2Vzcy4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6ImV4ZWMiLAorCS4uLgorCSJleGVjX2lkIjowLAorCSJleGUiOiJnaXQiLAorCSJhcmd2IjpbImZvbyIsICJiYXIiXQorfQorLS0tLS0tLS0tLS0tCisrCitUaGUgImV4ZWNfaWQiIGZpZWxkIGlzIGEgY29tbWFuZC11bmlxdWUgaWQgYW5kIGlzIG9ubHkgdXNlZnVsIGlmIHRoZQorYGV4ZWMoKWAgZmFpbHMgYW5kIGEgY29ycmVzcG9uZGluZyBleGVjX3Jlc3VsdCBldmVudCBpcyBnZW5lcmF0ZWQuCisKK2AiZXhlY19yZXN1bHQiYDo6CisJVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgaWYgdGhlIGBleGVjKClgIGZhaWxzIGFuZCBjb250cm9sCisJcmV0dXJucyB0byB0aGUgY3VycmVudCBnaXQgY29tbWFuZC4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6ImV4ZWNfcmVzdWx0IiwKKwkuLi4KKwkiZXhlY19pZCI6MCwKKwkiY29kZSI6MSAgICAgICMgZXJyb3IgY29kZSAoZXJybm8pIGZyb20gZXhlYygpCit9CistLS0tLS0tLS0tLS0KKworYCJ0aHJlYWRfc3RhcnQiYDo6CisJVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiBhIHRocmVhZCBpcyBzdGFydGVkLiAgSXQgaXMKKwlnZW5lcmF0ZWQgZnJvbSAqd2l0aGluKiB0aGUgbmV3IHRocmVhZCdzIHRocmVhZC1wcm9jIChmb3IgVExTCisJcmVhc29ucykuCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJ0aHJlYWRfc3RhcnQiLAorCS4uLgorCSJ0aHJlYWQiOiJ0aDAyOnByZWxvYWRfdGhyZWFkIiAjIHRocmVhZCBuYW1lCit9CistLS0tLS0tLS0tLS0KKworYCJ0aHJlYWRfZXhpdCJgOjoKKwlUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIGEgdGhyZWFkIGV4aXRzLiAgSXQgaXMgZ2VuZXJhdGVkCisJZnJvbSAqd2l0aGluKiB0aGUgdGhyZWFkJ3MgdGhyZWFkLXByb2MgKGZvciBUTFMgcmVhc29ucykuCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJ0aHJlYWRfZXhpdCIsCisJLi4uCisJInRocmVhZCI6InRoMDI6cHJlbG9hZF90aHJlYWQiLCAjIHRocmVhZCBuYW1lCisJInRfcmVsIjowLjAwNzMyOCAgICAgICAgICAgICAgICAjIHRocmVhZCBlbGFwc2VkIHRpbWUKK30KKy0tLS0tLS0tLS0tLQorCitgImRlZl9wYXJhbSJgOjoKKwlUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB0byBsb2cgYSBnbG9iYWwgcGFyYW1ldGVyLCBzdWNoIGFzIGEgY29uZmlnCisJc2V0dGluZywgY29tbWFuZC1saW5lIGZsYWcsIG9yIGVudmlyb25tZW50IHZhcmlhYmxlLgorKworLS0tLS0tLS0tLS0tCit7CisJImV2ZW50IjoiZGVmX3BhcmFtIiwKKwkuLi4KKwkicGFyYW0iOiJjb3JlLmFiYnJldiIsCisJInZhbHVlIjoiNyIKK30KKy0tLS0tLS0tLS0tLQorCitgImRlZl9yZXBvImA6OgorCVRoaXMgZXZlbnQgZGVmaW5lcyBhIHJlcG8taWQgYW5kIGFzc29jaWF0ZXMgaXQgd2l0aCB0aGUgcm9vdAorCW9mIHRoZSB3b3JrdHJlZS4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6ImRlZl9yZXBvIiwKKwkuLi4KKwkicmVwbyI6MSwKKwkid29ya3RyZWUiOiIvVXNlcnMvamVmZmhvc3Qvd29yay9nZnciCit9CistLS0tLS0tLS0tLS0KKysKK0FzIHN0YXRlZCBlYXJsaWVyLCB0aGUgcmVwby1pZCBpcyBjdXJyZW50bHkgYWx3YXlzIDEsIHNvIHRoZXJlIHdpbGwKK29ubHkgYmUgb25lIGRlZl9yZXBvIGV2ZW50LiAgTGF0ZXIsIGlmIGluLXByb2Mgc3VibW9kdWxlcyBhcmUKK3N1cHBvcnRlZCwgYSBkZWZfcmVwbyBldmVudCBzaG91bGQgYmUgZW1pdHRlZCBmb3IgZWFjaCBzdWJtb2R1bGUKK3Zpc2l0ZWQuCisKK2AicmVnaW9uX2VudGVyImA6OgorCVRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gZW50ZXJpbmcgYSByZWdpb24uCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJyZWdpb25fZW50ZXIiLAorCS4uLgorCSJyZXBvIjoxLCAgICAgICAgICAgICAgICAjIG9wdGlvbmFsCisJIm5lc3RpbmciOjEsICAgICAgICAgICAgICMgY3VycmVudCByZWdpb24gc3RhY2sgZGVwdGgKKwkiY2F0ZWdvcnkiOiJpbmRleCIsICAgICAgIyBvcHRpb25hbAorCSJsYWJlbCI6ImRvX3JlYWRfaW5kZXgiLCAjIG9wdGlvbmFsCisJIm1zZyI6Ii5naXQvaW5kZXgiICAgICAgICMgb3B0aW9uYWwKK30KKy0tLS0tLS0tLS0tLQorKworVGhlIGBjYXRlZ29yeWAgZmllbGQgbWF5IGJlIHVzZWQgaW4gYSBmdXR1cmUgZW5oYW5jZW1lbnQgdG8KK2RvIGNhdGVnb3J5LWJhc2VkIGZpbHRlcmluZy4KKysKK2BHSVRfVFJBQ0UyX0VWRU5UX05FU1RJTkdgIG9yIGB0cmFjZTIuZXZlbnROZXN0aW5nYCBjYW4gYmUgdXNlZCB0bworZmlsdGVyIGRlZXBseSBuZXN0ZWQgcmVnaW9ucyBhbmQgZGF0YSBldmVudHMuICBJdCBkZWZhdWx0cyB0byAiMiIuCisKK2AicmVnaW9uX2xlYXZlImA6OgorCVRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gbGVhdmluZyBhIHJlZ2lvbi4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6InJlZ2lvbl9sZWF2ZSIsCisJLi4uCisJInJlcG8iOjEsICAgICAgICAgICAgICAgICMgb3B0aW9uYWwKKwkidF9yZWwiOjAuMDAyODc2LCAgICAgICAgIyB0aW1lIHNwZW50IGluIHJlZ2lvbiBpbiBzZWNvbmRzCisJIm5lc3RpbmciOjEsICAgICAgICAgICAgICMgcmVnaW9uIHN0YWNrIGRlcHRoCisJImNhdGVnb3J5IjoiaW5kZXgiLCAgICAgICMgb3B0aW9uYWwKKwkibGFiZWwiOiJkb19yZWFkX2luZGV4IiwgIyBvcHRpb25hbAorCSJtc2ciOiIuZ2l0L2luZGV4IiAgICAgICAjIG9wdGlvbmFsCit9CistLS0tLS0tLS0tLS0KKworYCJkYXRhImA6OgorCVRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHRvIGxvZyBhIHRocmVhZC0gYW5kIHJlZ2lvbi1sb2NhbAorCWtleS92YWx1ZSBwYWlyLgorKworLS0tLS0tLS0tLS0tCit7CisJImV2ZW50IjoiZGF0YSIsCisJLi4uCisJInJlcG8iOjEsICAgICAgICAgICAgICAjIG9wdGlvbmFsCisJInRfYWJzIjowLjAyNDEwNywgICAgICAjIGFic29sdXRlIGVsYXBzZWQgdGltZQorCSJ0X3JlbCI6MC4wMDEwMzEsICAgICAgIyBlbGFwc2VkIHRpbWUgaW4gcmVnaW9uL3RocmVhZAorCSJuZXN0aW5nIjoyLCAgICAgICAgICAgIyByZWdpb24gc3RhY2sgZGVwdGgKKwkiY2F0ZWdvcnkiOiJpbmRleCIsCisJImtleSI6InJlYWQvY2FjaGVfbnIiLAorCSJ2YWx1ZSI6IjM1NTIiCit9CistLS0tLS0tLS0tLS0KKysKK1RoZSAidmFsdWUiIGZpZWxkIG1heSBiZSBhbiBpbnRlZ2VyIG9yIGEgc3RyaW5nLgorCitgImRhdGEtanNvbiJgOjoKKwlUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB0byBsb2cgYSBwcmUtZm9ybWF0dGVkIEpTT04gc3RyaW5nCisJY29udGFpbmluZyBzdHJ1Y3R1cmVkIGRhdGEuCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJkYXRhX2pzb24iLAorCS4uLgorCSJyZXBvIjoxLCAgICAgICAgICAgICAgIyBvcHRpb25hbAorCSJ0X2FicyI6MC4wMTU5MDUsCisJInRfcmVsIjowLjAxNTkwNSwKKwkibmVzdGluZyI6MSwKKwkiY2F0ZWdvcnkiOiJwcm9jZXNzIiwKKwkia2V5Ijoid2luZG93cy9hbmNlc3RyeSIsCisJInZhbHVlIjpbImJhc2guZXhlIiwiYmFzaC5leGUiXQorfQorLS0tLS0tLS0tLS0tCisKKz09IEV4YW1wbGUgVHJhY2UyIEFQSSBVc2FnZQorCitIZXJlIGlzIGEgaHlwb3RoZXRpY2FsIHVzYWdlIG9mIHRoZSBUcmFjZTIgQVBJIHNob3dpbmcgdGhlIGludGVuZGVkCit1c2FnZSAod2l0aG91dCB3b3JyeWluZyBhYm91dCB0aGUgYWN0dWFsIEdpdCBkZXRhaWxzKS4KKworSW5pdGlhbGl6YXRpb246OgorCisJSW5pdGlhbGl6YXRpb24gaGFwcGVucyBpbiBgbWFpbigpYC4gIEJlaGluZCB0aGUgc2NlbmVzLCBhbgorCWBhdGV4aXRgIGFuZCBgc2lnbmFsYCBoYW5kbGVyIGFyZSByZWdpc3RlcmVkLgorKworLS0tLS0tLS0tLS0tLS0tLQoraW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBleGl0X2NvZGU7CisKKwl0cmFjZTJfaW5pdGlhbGl6ZSgpOworCXRyYWNlMl9jbWRfc3RhcnQoYXJndik7CisKKwlleGl0X2NvZGUgPSBjbWRfbWFpbihhcmdjLCBhcmd2KTsKKworCXRyYWNlMl9jbWRfZXhpdChleGl0X2NvZGUpOworCisJcmV0dXJuIGV4aXRfY29kZTsKK30KKy0tLS0tLS0tLS0tLS0tLS0KKworQ29tbWFuZCBEZXRhaWxzOjoKKworCUFmdGVyIHRoZSBiYXNpY3MgYXJlIGVzdGFibGlzaGVkLCBhZGRpdGlvbmFsIGNvbW1hbmQKKwlpbmZvcm1hdGlvbiBjYW4gYmUgc2VudCB0byBUcmFjZTIgYXMgaXQgaXMgZGlzY292ZXJlZC4KKysKKy0tLS0tLS0tLS0tLS0tLS0KK2ludCBjbWRfY2hlY2tvdXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXRyYWNlMl9jbWRfbmFtZSgiY2hlY2tvdXQiKTsKKwl0cmFjZTJfY21kX21vZGUoImJyYW5jaCIpOworCXRyYWNlMl9kZWZfcmVwbyh0aGVfcmVwb3NpdG9yeSk7CisKKwkvLyBlbWl0ICJkZWZfcGFyYW0iIG1lc3NhZ2VzIGZvciAiaW50ZXJlc3RpbmciIGNvbmZpZyBzZXR0aW5ncy4KKwl0cmFjZTJfY21kX2xpc3RfY29uZmlnKCk7CisKKwlpZiAoZG9fc29tZXRoaW5nKCkpCisJICAgIHRyYWNlMl9jbWRfZXJyb3IoIlBhdGggJyVzJzogY2Fubm90IGRvIHNvbWV0aGluZyIsIHBhdGgpOworCisJcmV0dXJuIDA7Cit9CistLS0tLS0tLS0tLS0tLS0tCisKK0NoaWxkIFByb2Nlc3Nlczo6CisKKwlXcmFwIGNvZGUgc3Bhd25pbmcgY2hpbGQgcHJvY2Vzc2VzLgorKworLS0tLS0tLS0tLS0tLS0tLQordm9pZCBydW5fY2hpbGQoLi4uKQoreworCWludCBjaGlsZF9leGl0X2NvZGU7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kID0gQ0hJTERfUFJPQ0VTU19JTklUOworCS4uLgorCWNtZC50cmFjZTJfY2hpbGRfY2xhc3MgPSAiZWRpdG9yIjsKKworCXRyYWNlMl9jaGlsZF9zdGFydCgmY21kKTsKKwljaGlsZF9leGl0X2NvZGUgPSBzcGF3bl9jaGlsZF9hbmRfd2FpdF9mb3JfaXQoKTsKKwl0cmFjZTJfY2hpbGRfZXhpdCgmY21kLCBjaGlsZF9leGl0X2NvZGUpOworfQorLS0tLS0tLS0tLS0tLS0tLQorKworRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZmV0Y2ggY29tbWFuZCBzcGF3bmVkIHNzaCwgaW5kZXgtcGFjaywKK3Jldi1saXN0LCBhbmQgZ2MuICBUaGlzIGV4YW1wbGUgYWxzbyBzaG93cyB0aGF0IGZldGNoIHRvb2sKKzUuMTk5IHNlY29uZHMgYW5kIG9mIHRoYXQgNC45MzIgd2FzIGluIHNzaC4KKysKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZXhwb3J0IEdJVF9UUkFDRTJfQlJJRUY9MQorJCBleHBvcnQgR0lUX1RSQUNFMj1+L2xvZy5ub3JtYWwKKyQgZ2l0IGZldGNoIG9yaWdpbgorLi4uCistLS0tLS0tLS0tLS0tLS0tCisrCistLS0tLS0tLS0tLS0tLS0tCiskIGNhdCB+L2xvZy5ub3JtYWwKK3ZlcnNpb24gMi4yMC4xLnZmcy4xLjEuNDcuZzUzNGRiZTFhZDEKK3N0YXJ0IGdpdCBmZXRjaCBvcmlnaW4KK3dvcmt0cmVlIC9Vc2Vycy9qZWZmaG9zdC93b3JrL2dmdworY21kX25hbWUgZmV0Y2ggKGZldGNoKQorY2hpbGRfc3RhcnRbMF0gc3NoIGdpdEBnaXRodWIuY29tIC4uLgorY2hpbGRfc3RhcnRbMV0gZ2l0IGluZGV4LXBhY2sgLi4uCisuLi4gKFRyYWNlMiBldmVudHMgZnJvbSBjaGlsZCBwcm9jZXNzZXMgb21pdHRlZCkKK2NoaWxkX2V4aXRbMV0gcGlkOjE0NzA3IGNvZGU6MCBlbGFwc2VkOjAuMDc2MzUzCitjaGlsZF9leGl0WzBdIHBpZDoxNDcwNiBjb2RlOjAgZWxhcHNlZDo0LjkzMTg2OQorY2hpbGRfc3RhcnRbMl0gZ2l0IHJldi1saXN0IC4uLgorLi4uIChUcmFjZTIgZXZlbnRzIGZyb20gY2hpbGQgcHJvY2VzcyBvbWl0dGVkKQorY2hpbGRfZXhpdFsyXSBwaWQ6MTQ3MDggY29kZTowIGVsYXBzZWQ6MC4xMTA2MDUKK2NoaWxkX3N0YXJ0WzNdIGdpdCBnYyAtLWF1dG8KKy4uLiAoVHJhY2UyIGV2ZW50cyBmcm9tIGNoaWxkIHByb2Nlc3Mgb21pdHRlZCkKK2NoaWxkX2V4aXRbM10gcGlkOjE0NzA5IGNvZGU6MCBlbGFwc2VkOjAuMDA2MjQwCitleGl0IGVsYXBzZWQ6NS4xOTg1MDMgY29kZTowCithdGV4aXQgZWxhcHNlZDo1LjE5ODU0MSBjb2RlOjAKKy0tLS0tLS0tLS0tLS0tLS0KKysKK1doZW4gYSBnaXQgcHJvY2VzcyBpcyBhIChkaXJlY3Qgb3IgaW5kaXJlY3QpIGNoaWxkIG9mIGFub3RoZXIKK2dpdCBwcm9jZXNzLCBpdCBpbmhlcml0cyBUcmFjZTIgY29udGV4dCBpbmZvcm1hdGlvbi4gIFRoaXMKK2FsbG93cyB0aGUgY2hpbGQgdG8gcHJpbnQgdGhlIGNvbW1hbmQgaGllcmFyY2h5LiAgVGhpcyBleGFtcGxlCitzaG93cyBnYyBhcyBjaGlsZFszXSBvZiBmZXRjaC4gIFdoZW4gdGhlIGdjIHByb2Nlc3MgcmVwb3J0cworaXRzIG5hbWUgYXMgImdjIiwgaXQgYWxzbyByZXBvcnRzIHRoZSBoaWVyYXJjaHkgYXMgImZldGNoL2djIi4KKyhJbiB0aGlzIGV4YW1wbGUsIHRyYWNlMiBtZXNzYWdlcyBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzIGlzCitpbmRlbnRlZCBmb3IgY2xhcml0eS4pCisrCistLS0tLS0tLS0tLS0tLS0tCiskIGV4cG9ydCBHSVRfVFJBQ0UyX0JSSUVGPTEKKyQgZXhwb3J0IEdJVF9UUkFDRTI9fi9sb2cubm9ybWFsCiskIGdpdCBmZXRjaCBvcmlnaW4KKy4uLgorLS0tLS0tLS0tLS0tLS0tLQorKworLS0tLS0tLS0tLS0tLS0tLQorJCBjYXQgfi9sb2cubm9ybWFsCit2ZXJzaW9uIDIuMjAuMS4xNjAuZzU2NzYxMDdlY2QuZGlydHkKK3N0YXJ0IGdpdCBmZXRjaCBvZmZpY2lhbAord29ya3RyZWUgL1VzZXJzL2plZmZob3N0L3dvcmsvZ2Z3CitjbWRfbmFtZSBmZXRjaCAoZmV0Y2gpCisuLi4KK2NoaWxkX3N0YXJ0WzNdIGdpdCBnYyAtLWF1dG8KKyAgICB2ZXJzaW9uIDIuMjAuMS4xNjAuZzU2NzYxMDdlY2QuZGlydHkKKyAgICBzdGFydCAvVXNlcnMvamVmZmhvc3Qvd29yay9nZncvZ2l0IGdjIC0tYXV0bworICAgIHdvcmt0cmVlIC9Vc2Vycy9qZWZmaG9zdC93b3JrL2dmdworICAgIGNtZF9uYW1lIGdjIChmZXRjaC9nYykKKyAgICBleGl0IGVsYXBzZWQ6MC4wMDE5NTkgY29kZTowCisgICAgYXRleGl0IGVsYXBzZWQ6MC4wMDE5OTcgY29kZTowCitjaGlsZF9leGl0WzNdIHBpZDoyMDMwMyBjb2RlOjAgZWxhcHNlZDowLjAwNzU2NAorZXhpdCBlbGFwc2VkOjMuODY4OTM4IGNvZGU6MAorYXRleGl0IGVsYXBzZWQ6My44Njg5NzAgY29kZTowCistLS0tLS0tLS0tLS0tLS0tCisKK1JlZ2lvbnM6OgorCisJUmVnaW9ucyBjYW4gYmUgdXNlIHRvIHRpbWUgYW4gaW50ZXJlc3Rpbmcgc2VjdGlvbiBvZiBjb2RlLgorKworLS0tLS0tLS0tLS0tLS0tLQordm9pZCB3dF9zdGF0dXNfY29sbGVjdChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXRyYWNlMl9yZWdpb25fZW50ZXIoInN0YXR1cyIsICJ3b3JrdHJlZXMiLCBzLT5yZXBvKTsKKwl3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VzX3dvcmt0cmVlKHMpOworCXRyYWNlMl9yZWdpb25fbGVhdmUoInN0YXR1cyIsICJ3b3JrdHJlZXMiLCBzLT5yZXBvKTsKKworCXRyYWNlMl9yZWdpb25fZW50ZXIoInN0YXR1cyIsICJpbmRleCIsIHMtPnJlcG8pOworCXd0X3N0YXR1c19jb2xsZWN0X2NoYW5nZXNfaW5kZXgocyk7CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgic3RhdHVzIiwgImluZGV4Iiwgcy0+cmVwbyk7CisKKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJzdGF0dXMiLCAidW50cmFja2VkIiwgcy0+cmVwbyk7CisJd3Rfc3RhdHVzX2NvbGxlY3RfdW50cmFja2VkKHMpOworCXRyYWNlMl9yZWdpb25fbGVhdmUoInN0YXR1cyIsICJ1bnRyYWNrZWQiLCBzLT5yZXBvKTsKK30KKwordm9pZCB3dF9zdGF0dXNfcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJzdGF0dXMiLCAicHJpbnQiLCBzLT5yZXBvKTsKKwlzd2l0Y2ggKHMtPnN0YXR1c19mb3JtYXQpIHsKKwkgICAgLi4uCisJfQorCXRyYWNlMl9yZWdpb25fbGVhdmUoInN0YXR1cyIsICJwcmludCIsIHMtPnJlcG8pOworfQorLS0tLS0tLS0tLS0tLS0tLQorKworSW4gdGhpcyBleGFtcGxlLCBzY2FubmluZyBmb3IgdW50cmFja2VkIGZpbGVzIHJhbiBmcm9tICswLjAxMjU2OCB0bworKzAuMDI3MTQ5IChzaW5jZSB0aGUgcHJvY2VzcyBzdGFydGVkKSBhbmQgdG9vayAwLjAxNDU4MSBzZWNvbmRzLgorKworLS0tLS0tLS0tLS0tLS0tLQorJCBleHBvcnQgR0lUX1RSQUNFMl9QRVJGX0JSSUVGPTEKKyQgZXhwb3J0IEdJVF9UUkFDRTJfUEVSRj1+L2xvZy5wZXJmCiskIGdpdCBzdGF0dXMKKy4uLgorCiskIGNhdCB+L2xvZy5wZXJmCitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHZlcnNpb24gICAgICB8ICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCAyLjIwLjEuMTYwLmc1Njc2MTA3ZWNkLmRpcnR5CitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHN0YXJ0ICAgICAgICB8ICAgICB8ICAwLjAwMTE3MyB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCBnaXQgc3RhdHVzCitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IGRlZl9yZXBvICAgICB8IHIxICB8ICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCB3b3JrdHJlZTovVXNlcnMvamVmZmhvc3Qvd29yay9nZncKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgY21kX25hbWUgICAgIHwgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICB8IHN0YXR1cyAoc3RhdHVzKQorLi4uCitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHJlZ2lvbl9lbnRlciB8IHIxICB8ICAwLjAxMDk4OCB8ICAgICAgICAgICB8IHN0YXR1cyAgICAgfCBsYWJlbDp3b3JrdHJlZXMKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgcjEgIHwgIDAuMDExMjM2IHwgIDAuMDAwMjQ4IHwgc3RhdHVzICAgICB8IGxhYmVsOndvcmt0cmVlcworZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCByZWdpb25fZW50ZXIgfCByMSAgfCAgMC4wMTEyNjAgfCAgICAgICAgICAgfCBzdGF0dXMgICAgIHwgbGFiZWw6aW5kZXgKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgcjEgIHwgIDAuMDEyNTQyIHwgIDAuMDAxMjgyIHwgc3RhdHVzICAgICB8IGxhYmVsOmluZGV4CitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHJlZ2lvbl9lbnRlciB8IHIxICB8ICAwLjAxMjU2OCB8ICAgICAgICAgICB8IHN0YXR1cyAgICAgfCBsYWJlbDp1bnRyYWNrZWQKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgcjEgIHwgIDAuMDI3MTQ5IHwgIDAuMDE0NTgxIHwgc3RhdHVzICAgICB8IGxhYmVsOnVudHJhY2tlZAorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCByZWdpb25fZW50ZXIgfCByMSAgfCAgMC4wMjc0MTEgfCAgICAgICAgICAgfCBzdGF0dXMgICAgIHwgbGFiZWw6cHJpbnQKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgcjEgIHwgIDAuMDI4NzQxIHwgIDAuMDAxMzMwIHwgc3RhdHVzICAgICB8IGxhYmVsOnByaW50CitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IGV4aXQgICAgICAgICB8ICAgICB8ICAwLjAyODc3OCB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCBjb2RlOjAKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgYXRleGl0ICAgICAgIHwgICAgIHwgIDAuMDI4ODA5IHwgICAgICAgICAgIHwgICAgICAgICAgICB8IGNvZGU6MAorLS0tLS0tLS0tLS0tLS0tLQorKworUmVnaW9ucyBtYXkgYmUgbmVzdGVkLiAgVGhpcyBjYXVzZXMgbWVzc2FnZXMgdG8gYmUgaW5kZW50ZWQgaW4gdGhlCitQRVJGIHRhcmdldCwgZm9yIGV4YW1wbGUuCitFbGFwc2VkIHRpbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgbmVzdGluZworbGV2ZWwgYXMgZXhwZWN0ZWQuICBGb3IgZXhhbXBsZSwgaWYgd2UgYWRkIHJlZ2lvbiBtZXNzYWdlIHRvOgorKworLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIGVudW0gcGF0aF90cmVhdG1lbnQgcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQsIGludCBjaGVja19vbmx5LAorCWludCBzdG9wX2F0X2ZpcnN0X2ZpbGUsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJZW51bSBwYXRoX3RyZWF0bWVudCBzdGF0ZSwgc3ViZGlyX3N0YXRlLCBkaXJfc3RhdGUgPSBwYXRoX25vbmU7CisKKwl0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50ZigiZGlyIiwgInJlYWRfcmVjdXJzaXZlIiwgTlVMTCwgIiUuKnMiLCBiYXNlbGVuLCBiYXNlKTsKKwkuLi4KKwl0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50ZigiZGlyIiwgInJlYWRfcmVjdXJzaXZlIiwgTlVMTCwgIiUuKnMiLCBiYXNlbGVuLCBiYXNlKTsKKwlyZXR1cm4gZGlyX3N0YXRlOworfQorLS0tLS0tLS0tLS0tLS0tLQorKworV2UgY2FuIGZ1cnRoZXIgaW52ZXN0aWdhdGUgdGhlIHRpbWUgc3BlbnQgc2Nhbm5pbmcgZm9yIHVudHJhY2tlZCBmaWxlcy4KKysKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZXhwb3J0IEdJVF9UUkFDRTJfUEVSRl9CUklFRj0xCiskIGV4cG9ydCBHSVRfVFJBQ0UyX1BFUkY9fi9sb2cucGVyZgorJCBnaXQgc3RhdHVzCisuLi4KKyQgY2F0IH4vbG9nLnBlcmYKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgdmVyc2lvbiAgICAgIHwgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICB8IDIuMjAuMS4xNjIuZ2I0Y2NlYTQ0ZGIuZGlydHkKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgc3RhcnQgICAgICAgIHwgICAgIHwgIDAuMDAxMTczIHwgICAgICAgICAgIHwgICAgICAgICAgICB8IGdpdCBzdGF0dXMKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgZGVmX3JlcG8gICAgIHwgcjEgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICB8IHdvcmt0cmVlOi9Vc2Vycy9qZWZmaG9zdC93b3JrL2dmdworZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCBjbWRfbmFtZSAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgc3RhdHVzIChzdGF0dXMpCisuLi4KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2VudGVyIHwgcjEgIHwgIDAuMDE1MDQ3IHwgICAgICAgICAgIHwgc3RhdHVzICAgICB8IGxhYmVsOnVudHJhY2tlZAorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCByZWdpb25fZW50ZXIgfCAgICAgfCAgMC4wMTUxMzIgfCAgICAgICAgICAgfCBkaXIgICAgICAgIHwgLi5sYWJlbDpyZWFkX3JlY3Vyc2l2ZQorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCByZWdpb25fZW50ZXIgfCAgICAgfCAgMC4wMTYzNDEgfCAgICAgICAgICAgfCBkaXIgICAgICAgIHwgLi4uLmxhYmVsOnJlYWRfcmVjdXJzaXZlIHZjcy1zdm4vCitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHJlZ2lvbl9sZWF2ZSB8ICAgICB8ICAwLjAxNjQyMiB8ICAwLjAwMDA4MSB8IGRpciAgICAgICAgfCAuLi4ubGFiZWw6cmVhZF9yZWN1cnNpdmUgdmNzLXN2bi8KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2VudGVyIHwgICAgIHwgIDAuMDE2NDQ2IHwgICAgICAgICAgIHwgZGlyICAgICAgICB8IC4uLi5sYWJlbDpyZWFkX3JlY3Vyc2l2ZSB4ZGlmZi8KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgICAgIHwgIDAuMDE2NTIyIHwgIDAuMDAwMDc2IHwgZGlyICAgICAgICB8IC4uLi5sYWJlbDpyZWFkX3JlY3Vyc2l2ZSB4ZGlmZi8KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2VudGVyIHwgICAgIHwgIDAuMDE2NjEyIHwgICAgICAgICAgIHwgZGlyICAgICAgICB8IC4uLi5sYWJlbDpyZWFkX3JlY3Vyc2l2ZSBnaXQtZ3VpLworZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCByZWdpb25fZW50ZXIgfCAgICAgfCAgMC4wMTY2OTggfCAgICAgICAgICAgfCBkaXIgICAgICAgIHwgLi4uLi4ubGFiZWw6cmVhZF9yZWN1cnNpdmUgZ2l0LWd1aS9wby8KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2VudGVyIHwgICAgIHwgIDAuMDE2ODEwIHwgICAgICAgICAgIHwgZGlyICAgICAgICB8IC4uLi4uLi4ubGFiZWw6cmVhZF9yZWN1cnNpdmUgZ2l0LWd1aS9wby9nbG9zc2FyeS8KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgICAgIHwgIDAuMDE2ODYzIHwgIDAuMDAwMDUzIHwgZGlyICAgICAgICB8IC4uLi4uLi4ubGFiZWw6cmVhZF9yZWN1cnNpdmUgZ2l0LWd1aS9wby9nbG9zc2FyeS8KKy4uLgorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCByZWdpb25fZW50ZXIgfCAgICAgfCAgMC4wMzE4NzYgfCAgICAgICAgICAgfCBkaXIgICAgICAgIHwgLi4uLmxhYmVsOnJlYWRfcmVjdXJzaXZlIGJ1aWx0aW4vCitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHJlZ2lvbl9sZWF2ZSB8ICAgICB8ICAwLjAzMjI3MCB8ICAwLjAwMDM5NCB8IGRpciAgICAgICAgfCAuLi4ubGFiZWw6cmVhZF9yZWN1cnNpdmUgYnVpbHRpbi8KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgICAgIHwgIDAuMDMyNDE0IHwgIDAuMDE3MjgyIHwgZGlyICAgICAgICB8IC4ubGFiZWw6cmVhZF9yZWN1cnNpdmUKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgcjEgIHwgIDAuMDMyNDU0IHwgIDAuMDE3NDA3IHwgc3RhdHVzICAgICB8IGxhYmVsOnVudHJhY2tlZAorLi4uCitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IGV4aXQgICAgICAgICB8ICAgICB8ICAwLjAzNDI3OSB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCBjb2RlOjAKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgYXRleGl0ICAgICAgIHwgICAgIHwgIDAuMDM0MzIyIHwgICAgICAgICAgIHwgICAgICAgICAgICB8IGNvZGU6MAorLS0tLS0tLS0tLS0tLS0tLQorKworVHJhY2UyIHJlZ2lvbnMgYXJlIHNpbWlsYXIgdG8gdGhlIGV4aXN0aW5nIHRyYWNlX3BlcmZvcm1hbmNlX2VudGVyKCkKK2FuZCB0cmFjZV9wZXJmb3JtYW5jZV9sZWF2ZSgpIHJvdXRpbmVzLCBidXQgYXJlIHRocmVhZCBzYWZlIGFuZAorbWFpbnRhaW4gcGVyLXRocmVhZCBzdGFja3Mgb2YgdGltZXJzLgorCitEYXRhIE1lc3NhZ2VzOjoKKworCURhdGEgbWVzc2FnZXMgYWRkZWQgdG8gYSByZWdpb24uCisrCistLS0tLS0tLS0tLS0tLS0tCitpbnQgcmVhZF9pbmRleF9mcm9tKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoLAorCWNvbnN0IGNoYXIgKmdpdGRpcikKK3sKKwl0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50ZigiaW5kZXgiLCAiZG9fcmVhZF9pbmRleCIsIHRoZV9yZXBvc2l0b3J5LCAiJXMiLCBwYXRoKTsKKworCS4uLgorCisJdHJhY2UyX2RhdGFfaW50bWF4KCJpbmRleCIsIHRoZV9yZXBvc2l0b3J5LCAicmVhZC92ZXJzaW9uIiwgaXN0YXRlLT52ZXJzaW9uKTsKKwl0cmFjZTJfZGF0YV9pbnRtYXgoImluZGV4IiwgdGhlX3JlcG9zaXRvcnksICJyZWFkL2NhY2hlX25yIiwgaXN0YXRlLT5jYWNoZV9ucik7CisKKwl0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50ZigiaW5kZXgiLCAiZG9fcmVhZF9pbmRleCIsIHRoZV9yZXBvc2l0b3J5LCAiJXMiLCBwYXRoKTsKK30KKy0tLS0tLS0tLS0tLS0tLS0KKysKK1RoaXMgZXhhbXBsZSBzaG93cyB0aGF0IHRoZSBpbmRleCBjb250YWluZWQgMzU1MiBlbnRyaWVzLgorKworLS0tLS0tLS0tLS0tLS0tLQorJCBleHBvcnQgR0lUX1RSQUNFMl9QRVJGX0JSSUVGPTEKKyQgZXhwb3J0IEdJVF9UUkFDRTJfUEVSRj1+L2xvZy5wZXJmCiskIGdpdCBzdGF0dXMKKy4uLgorJCBjYXQgfi9sb2cucGVyZgorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCB2ZXJzaW9uICAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgMi4yMC4xLjE1Ni5nZjk5MTZhZTA5NC5kaXJ0eQorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCBzdGFydCAgICAgICAgfCAgICAgfCAgMC4wMDExNzMgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgZ2l0IHN0YXR1cworZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCBkZWZfcmVwbyAgICAgfCByMSAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgd29ya3RyZWU6L1VzZXJzL2plZmZob3N0L3dvcmsvZ2Z3CitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IGNtZF9uYW1lICAgICB8ICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCBzdGF0dXMgKHN0YXR1cykKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2VudGVyIHwgcjEgIHwgIDAuMDAxNzkxIHwgICAgICAgICAgIHwgaW5kZXggICAgICB8IGxhYmVsOmRvX3JlYWRfaW5kZXggLmdpdC9pbmRleAorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCBkYXRhICAgICAgICAgfCByMSAgfCAgMC4wMDI0OTQgfCAgMC4wMDA3MDMgfCBpbmRleCAgICAgIHwgLi5yZWFkL3ZlcnNpb246MgorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCBkYXRhICAgICAgICAgfCByMSAgfCAgMC4wMDI1MjAgfCAgMC4wMDA3MjkgfCBpbmRleCAgICAgIHwgLi5yZWFkL2NhY2hlX25yOjM1NTIKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgcjEgIHwgIDAuMDAyNTM5IHwgIDAuMDAwNzQ4IHwgaW5kZXggICAgICB8IGxhYmVsOmRvX3JlYWRfaW5kZXggLmdpdC9pbmRleAorLi4uCistLS0tLS0tLS0tLS0tLS0tCisKK1RocmVhZCBFdmVudHM6OgorCisJVGhyZWFkIG1lc3NhZ2VzIGFkZGVkIHRvIGEgdGhyZWFkLXByb2MuCisrCitGb3IgZXhhbXBsZSwgdGhlIG11bHRpdGhyZWFkZWQgcHJlbG9hZC1pbmRleCBjb2RlIGNhbiBiZQoraW5zdHJ1bWVudGVkIHdpdGggYSByZWdpb24gYXJvdW5kIHRoZSB0aHJlYWQgcG9vbCBhbmQgdGhlbgorcGVyLXRocmVhZCBzdGFydCBhbmQgZXhpdCBldmVudHMgd2l0aGluIHRoZSB0aHJlYWRwcm9jLgorKworLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIHZvaWQgKnByZWxvYWRfdGhyZWFkKHZvaWQgKl9kYXRhKQoreworCS8vIHN0YXJ0IHRoZSBwZXItdGhyZWFkIGNsb2NrIGFuZCBlbWl0IGEgbWVzc2FnZS4KKwl0cmFjZTJfdGhyZWFkX3N0YXJ0KCJwcmVsb2FkX3RocmVhZCIpOworCisJLy8gcmVwb3J0IHdoaWNoIGNodW5rIG9mIHRoZSBhcnJheSB0aGlzIHRocmVhZCB3YXMgYXNzaWduZWQuCisJdHJhY2UyX2RhdGFfaW50bWF4KCJpbmRleCIsIHRoZV9yZXBvc2l0b3J5LCAib2Zmc2V0IiwgcC0+b2Zmc2V0KTsKKwl0cmFjZTJfZGF0YV9pbnRtYXgoImluZGV4IiwgdGhlX3JlcG9zaXRvcnksICJjb3VudCIsIG5yKTsKKworCWRvIHsKKwkgICAgLi4uCisJfSB3aGlsZSAoLS1uciA+IDApOworCS4uLgorCisJLy8gcmVwb3J0IGVsYXBzZWQgdGltZSB0YWtlbiBieSB0aGlzIHRocmVhZC4KKwl0cmFjZTJfdGhyZWFkX2V4aXQoKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBwcmVsb2FkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXgsCisJY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwl1bnNpZ25lZCBpbnQgcmVmcmVzaF9mbGFncykKK3sKKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJpbmRleCIsICJwcmVsb2FkIiwgdGhlX3JlcG9zaXRvcnkpOworCisJZm9yIChpID0gMDsgaSA8IHRocmVhZHM7IGkrKykgeworCSAgICAuLi4gLyogY3JlYXRlIHRocmVhZCAqLworCX0KKworCWZvciAoaSA9IDA7IGkgPCB0aHJlYWRzOyBpKyspIHsKKwkgICAgLi4uIC8qIGpvaW4gdGhyZWFkICovCisJfQorCisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgiaW5kZXgiLCAicHJlbG9hZCIsIHRoZV9yZXBvc2l0b3J5KTsKK30KKy0tLS0tLS0tLS0tLS0tLS0KKysKK0luIHRoaXMgZXhhbXBsZSBwcmVsb2FkX2luZGV4KCkgd2FzIGV4ZWN1dGVkIGJ5IHRoZSBgbWFpbmAgdGhyZWFkCithbmQgc3RhcnRlZCB0aGUgYHByZWxvYWRgIHJlZ2lvbi4gIFNldmVuIHRocmVhZHMsIG5hbWVkCitgdGgwMTpwcmVsb2FkX3RocmVhZGAgdGhyb3VnaCBgdGgwNzpwcmVsb2FkX3RocmVhZGAsIHdlcmUgc3RhcnRlZC4KK0V2ZW50cyBmcm9tIGVhY2ggdGhyZWFkIGFyZSBhdG9taWNhbGx5IGFwcGVuZGVkIHRvIHRoZSBzaGFyZWQgdGFyZ2V0CitzdHJlYW0gYXMgdGhleSBvY2N1ciBzbyB0aGV5IG1heSBhcHBlYXIgaW4gcmFuZG9tIG9yZGVyIHdpdGggcmVzcGVjdAorb3RoZXIgdGhyZWFkcy4gRmluYWxseSwgdGhlIG1haW4gdGhyZWFkIHdhaXRzIGZvciB0aGUgdGhyZWFkcyB0bworZmluaXNoIGFuZCBsZWF2ZXMgdGhlIHJlZ2lvbi4KKysKK0RhdGEgZXZlbnRzIGFyZSB0YWdnZWQgd2l0aCB0aGUgYWN0aXZlIHRocmVhZCBuYW1lLiAgVGhleSBhcmUgdXNlZAordG8gcmVwb3J0IHRoZSBwZXItdGhyZWFkIHBhcmFtZXRlcnMuCisrCistLS0tLS0tLS0tLS0tLS0tCiskIGV4cG9ydCBHSVRfVFJBQ0UyX1BFUkZfQlJJRUY9MQorJCBleHBvcnQgR0lUX1RSQUNFMl9QRVJGPX4vbG9nLnBlcmYKKyQgZ2l0IHN0YXR1cworLi4uCiskIGNhdCB+L2xvZy5wZXJmCisuLi4KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2VudGVyIHwgcjEgIHwgIDAuMDAyNTk1IHwgICAgICAgICAgIHwgaW5kZXggICAgICB8IGxhYmVsOnByZWxvYWQKK2QwIHwgdGgwMTpwcmVsb2FkX3RocmVhZCAgICAgIHwgdGhyZWFkX3N0YXJ0IHwgICAgIHwgIDAuMDAyNjk5IHwgICAgICAgICAgIHwgICAgICAgICAgICB8CitkMCB8IHRoMDI6cHJlbG9hZF90aHJlYWQgICAgICB8IHRocmVhZF9zdGFydCB8ICAgICB8ICAwLjAwMjcyMSB8ICAgICAgICAgICB8ICAgICAgICAgICAgfAorZDAgfCB0aDAxOnByZWxvYWRfdGhyZWFkICAgICAgfCBkYXRhICAgICAgICAgfCByMSAgfCAgMC4wMDI3MzYgfCAgMC4wMDAwMzcgfCBpbmRleCAgICAgIHwgb2Zmc2V0OjAKK2QwIHwgdGgwMjpwcmVsb2FkX3RocmVhZCAgICAgIHwgZGF0YSAgICAgICAgIHwgcjEgIHwgIDAuMDAyNzUxIHwgIDAuMDAwMDMwIHwgaW5kZXggICAgICB8IG9mZnNldDoyMDMyCitkMCB8IHRoMDM6cHJlbG9hZF90aHJlYWQgICAgICB8IHRocmVhZF9zdGFydCB8ICAgICB8ICAwLjAwMjcxMSB8ICAgICAgICAgICB8ICAgICAgICAgICAgfAorZDAgfCB0aDA2OnByZWxvYWRfdGhyZWFkICAgICAgfCB0aHJlYWRfc3RhcnQgfCAgICAgfCAgMC4wMDI3MzkgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwKK2QwIHwgdGgwMTpwcmVsb2FkX3RocmVhZCAgICAgIHwgZGF0YSAgICAgICAgIHwgcjEgIHwgIDAuMDAyNzY2IHwgIDAuMDAwMDY3IHwgaW5kZXggICAgICB8IGNvdW50OjUwOAorZDAgfCB0aDA2OnByZWxvYWRfdGhyZWFkICAgICAgfCBkYXRhICAgICAgICAgfCByMSAgfCAgMC4wMDI4NTYgfCAgMC4wMDAxMTcgfCBpbmRleCAgICAgIHwgb2Zmc2V0OjI1NDAKK2QwIHwgdGgwMzpwcmVsb2FkX3RocmVhZCAgICAgIHwgZGF0YSAgICAgICAgIHwgcjEgIHwgIDAuMDAyODI0IHwgIDAuMDAwMTEzIHwgaW5kZXggICAgICB8IG9mZnNldDoxMDE2CitkMCB8IHRoMDQ6cHJlbG9hZF90aHJlYWQgICAgICB8IHRocmVhZF9zdGFydCB8ICAgICB8ICAwLjAwMjcxMCB8ICAgICAgICAgICB8ICAgICAgICAgICAgfAorZDAgfCB0aDAyOnByZWxvYWRfdGhyZWFkICAgICAgfCBkYXRhICAgICAgICAgfCByMSAgfCAgMC4wMDI3NzkgfCAgMC4wMDAwNTggfCBpbmRleCAgICAgIHwgY291bnQ6NTA4CitkMCB8IHRoMDY6cHJlbG9hZF90aHJlYWQgICAgICB8IGRhdGEgICAgICAgICB8IHIxICB8ICAwLjAwMjk2NiB8ICAwLjAwMDIyNyB8IGluZGV4ICAgICAgfCBjb3VudDo1MDgKK2QwIHwgdGgwNzpwcmVsb2FkX3RocmVhZCAgICAgIHwgdGhyZWFkX3N0YXJ0IHwgICAgIHwgIDAuMDAyNzQxIHwgICAgICAgICAgIHwgICAgICAgICAgICB8CitkMCB8IHRoMDc6cHJlbG9hZF90aHJlYWQgICAgICB8IGRhdGEgICAgICAgICB8IHIxICB8ICAwLjAwMzAxNyB8ICAwLjAwMDI3NiB8IGluZGV4ICAgICAgfCBvZmZzZXQ6MzA0OAorZDAgfCB0aDA1OnByZWxvYWRfdGhyZWFkICAgICAgfCB0aHJlYWRfc3RhcnQgfCAgICAgfCAgMC4wMDI3MTIgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwKK2QwIHwgdGgwNTpwcmVsb2FkX3RocmVhZCAgICAgIHwgZGF0YSAgICAgICAgIHwgcjEgIHwgIDAuMDAzMDY3IHwgIDAuMDAwMzU1IHwgaW5kZXggICAgICB8IG9mZnNldDoxNTI0CitkMCB8IHRoMDU6cHJlbG9hZF90aHJlYWQgICAgICB8IGRhdGEgICAgICAgICB8IHIxICB8ICAwLjAwMzA5MCB8ICAwLjAwMDM3OCB8IGluZGV4ICAgICAgfCBjb3VudDo1MDgKK2QwIHwgdGgwNzpwcmVsb2FkX3RocmVhZCAgICAgIHwgZGF0YSAgICAgICAgIHwgcjEgIHwgIDAuMDAzMDM3IHwgIDAuMDAwMjk2IHwgaW5kZXggICAgICB8IGNvdW50OjUwNAorZDAgfCB0aDAzOnByZWxvYWRfdGhyZWFkICAgICAgfCBkYXRhICAgICAgICAgfCByMSAgfCAgMC4wMDI5NzEgfCAgMC4wMDAyNjAgfCBpbmRleCAgICAgIHwgY291bnQ6NTA4CitkMCB8IHRoMDQ6cHJlbG9hZF90aHJlYWQgICAgICB8IGRhdGEgICAgICAgICB8IHIxICB8ICAwLjAwMjk4MyB8ICAwLjAwMDI3MyB8IGluZGV4ICAgICAgfCBvZmZzZXQ6NTA4CitkMCB8IHRoMDQ6cHJlbG9hZF90aHJlYWQgICAgICB8IGRhdGEgICAgICAgICB8IHIxICB8ICAwLjAwNzMxMSB8ICAwLjAwNDYwMSB8IGluZGV4ICAgICAgfCBjb3VudDo1MDgKK2QwIHwgdGgwNTpwcmVsb2FkX3RocmVhZCAgICAgIHwgdGhyZWFkX2V4aXQgIHwgICAgIHwgIDAuMDA4NzgxIHwgIDAuMDA2MDY5IHwgICAgICAgICAgICB8CitkMCB8IHRoMDE6cHJlbG9hZF90aHJlYWQgICAgICB8IHRocmVhZF9leGl0ICB8ICAgICB8ICAwLjAwOTU2MSB8ICAwLjAwNjg2MiB8ICAgICAgICAgICAgfAorZDAgfCB0aDAzOnByZWxvYWRfdGhyZWFkICAgICAgfCB0aHJlYWRfZXhpdCAgfCAgICAgfCAgMC4wMDk3NDIgfCAgMC4wMDcwMzEgfCAgICAgICAgICAgIHwKK2QwIHwgdGgwNjpwcmVsb2FkX3RocmVhZCAgICAgIHwgdGhyZWFkX2V4aXQgIHwgICAgIHwgIDAuMDA5ODIwIHwgIDAuMDA3MDgxIHwgICAgICAgICAgICB8CitkMCB8IHRoMDI6cHJlbG9hZF90aHJlYWQgICAgICB8IHRocmVhZF9leGl0ICB8ICAgICB8ICAwLjAxMDI3NCB8ICAwLjAwNzU1MyB8ICAgICAgICAgICAgfAorZDAgfCB0aDA3OnByZWxvYWRfdGhyZWFkICAgICAgfCB0aHJlYWRfZXhpdCAgfCAgICAgfCAgMC4wMTA0NzcgfCAgMC4wMDc3MzYgfCAgICAgICAgICAgIHwKK2QwIHwgdGgwNDpwcmVsb2FkX3RocmVhZCAgICAgIHwgdGhyZWFkX2V4aXQgIHwgICAgIHwgIDAuMDExNjU3IHwgIDAuMDA4OTQ3IHwgICAgICAgICAgICB8CitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHJlZ2lvbl9sZWF2ZSB8IHIxICB8ICAwLjAxMTcxNyB8ICAwLjAwOTEyMiB8IGluZGV4ICAgICAgfCBsYWJlbDpwcmVsb2FkCisuLi4KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgZXhpdCAgICAgICAgIHwgICAgIHwgIDAuMDI5OTk2IHwgICAgICAgICAgIHwgICAgICAgICAgICB8IGNvZGU6MAorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCBhdGV4aXQgICAgICAgfCAgICAgfCAgMC4wMzAwMjcgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgY29kZTowCistLS0tLS0tLS0tLS0tLS0tCisrCitJbiB0aGlzIGV4YW1wbGUsIHRoZSBwcmVsb2FkIHJlZ2lvbiB0b29rIDAuMDA5MTIyIHNlY29uZHMuICBUaGUgNyB0aHJlYWRzCit0b29rIGJldHdlZW4gMC4wMDYwNjkgYW5kIDAuMDA4OTQ3IHNlY29uZHMgdG8gd29yayBvbiB0aGVpciBwb3J0aW9uIG9mCit0aGUgaW5kZXguICBUaHJlYWQgInRoMDEiIHdvcmtlZCBvbiA1MDggaXRlbXMgYXQgb2Zmc2V0IDAuICBUaHJlYWQgInRoMDIiCit3b3JrZWQgb24gNTA4IGl0ZW1zIGF0IG9mZnNldCAyMDMyLiAgVGhyZWFkICJ0aDA0IiB3b3JrZWQgb24gNTA4IGl0ZW1zCithdCBvZmZzZXQgNTA4LgorKworVGhpcyBleGFtcGxlIGFsc28gc2hvd3MgdGhhdCB0aHJlYWQgbmFtZXMgYXJlIGFzc2lnbmVkIGluIGEgcmFjeSBtYW5uZXIKK2FzIGVhY2ggdGhyZWFkIHN0YXJ0cyBhbmQgYWxsb2NhdGVzIFRMUyBzdG9yYWdlLgorCis9PSBGdXR1cmUgV29yaworCis9PT0gUmVsYXRpb25zaGlwIHRvIHRoZSBFeGlzdGluZyBUcmFjZSBBcGkgKGFwaS10cmFjZS50eHQpCisKK1RoZXJlIGFyZSBhIGZldyBpc3N1ZXMgdG8gcmVzb2x2ZSBiZWZvcmUgd2UgY2FuIGNvbXBsZXRlbHkKK3N3aXRjaCB0byBUcmFjZTIuCisKKyogVXBkYXRpbmcgZXhpc3RpbmcgdGVzdHMgdGhhdCBhc3N1bWUgR0lUX1RSQUNFIGZvcm1hdCBtZXNzYWdlcy4KKworKiBIb3cgdG8gYmVzdCBoYW5kbGUgY3VzdG9tIEdJVF9UUkFDRV88a2V5PiBtZXNzYWdlcz8KKworKiogVGhlIEdJVF9UUkFDRV88a2V5PiBtZWNoYW5pc20gYWxsb3dzIGVhY2ggPGtleT4gdG8gd3JpdGUgdG8gYQorZGlmZmVyZW50IGZpbGUgKGluIGFkZGl0aW9uIHRvIGp1c3Qgc3RkZXJyKS4KKworKiogRG8gd2Ugd2FudCB0byBtYWludGFpbiB0aGF0IGFiaWxpdHkgb3Igc2ltcGx5IHdyaXRlIHRvIHRoZSBleGlzdGluZworVHJhY2UyIHRhcmdldHMgKGFuZCBjb252ZXJ0IDxrZXk+IHRvIGEgImNhdGVnb3J5IikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9iaXRtYXAtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2JpdG1hcC1mb3JtYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YzE4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9iaXRtYXAtZm9ybWF0LnR4dApAQCAtMCwwICsxLDE2NCBAQAorR0lUIGJpdG1hcCB2MSBmb3JtYXQKKz09PT09PT09PT09PT09PT09PT09CisKKwktIEEgaGVhZGVyIGFwcGVhcnMgYXQgdGhlIGJlZ2lubmluZzoKKworCQk0LWJ5dGUgc2lnbmF0dXJlOiB7J0InLCAnSScsICdUJywgJ00nfQorCisJCTItYnl0ZSB2ZXJzaW9uIG51bWJlciAobmV0d29yayBieXRlIG9yZGVyKQorCQkJVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyB2ZXJzaW9uIDEKKwkJCW9mIHRoZSBiaXRtYXAgaW5kZXggKHRoZSBzYW1lIG9uZSBhcyBKR2l0KS4KKworCQkyLWJ5dGUgZmxhZ3MgKG5ldHdvcmsgYnl0ZSBvcmRlcikKKworCQkJVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgc3VwcG9ydGVkOgorCisJCQktIEJJVE1BUF9PUFRfRlVMTF9EQUcgKDB4MSkgUkVRVUlSRUQKKwkJCVRoaXMgZmxhZyBtdXN0IGFsd2F5cyBiZSBwcmVzZW50LiBJdCBpbXBsaWVzIHRoYXQgdGhlIGJpdG1hcAorCQkJaW5kZXggaGFzIGJlZW4gZ2VuZXJhdGVkIGZvciBhIHBhY2tmaWxlIHdpdGggZnVsbCBjbG9zdXJlCisJCQkoaS5lLiB3aGVyZSBldmVyeSBzaW5nbGUgb2JqZWN0IGluIHRoZSBwYWNrZmlsZSBjYW4gZmluZAorCQkJIGl0cyBwYXJlbnQgbGlua3MgaW5zaWRlIHRoZSBzYW1lIHBhY2tmaWxlKS4gVGhpcyBpcyBhCisJCQlyZXF1aXJlbWVudCBmb3IgdGhlIGJpdG1hcCBpbmRleCBmb3JtYXQsIGFsc28gcHJlc2VudCBpbiBKR2l0LAorCQkJdGhhdCBncmVhdGx5IHJlZHVjZXMgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGltcGxlbWVudGF0aW9uLgorCisJCQktIEJJVE1BUF9PUFRfSEFTSF9DQUNIRSAoMHg0KQorCQkJSWYgcHJlc2VudCwgdGhlIGVuZCBvZiB0aGUgYml0bWFwIGZpbGUgY29udGFpbnMKKwkJCWBOYCAzMi1iaXQgbmFtZS1oYXNoIHZhbHVlcywgb25lIHBlciBvYmplY3QgaW4gdGhlCisJCQlwYWNrLiBUaGUgZm9ybWF0IGFuZCBtZWFuaW5nIG9mIHRoZSBuYW1lLWhhc2ggaXMKKwkJCWRlc2NyaWJlZCBiZWxvdy4KKworCQk0LWJ5dGUgZW50cnkgY291bnQgKG5ldHdvcmsgYnl0ZSBvcmRlcikKKworCQkJVGhlIHRvdGFsIGNvdW50IG9mIGVudHJpZXMgKGJpdG1hcHBlZCBjb21taXRzKSBpbiB0aGlzIGJpdG1hcCBpbmRleC4KKworCQkyMC1ieXRlIGNoZWNrc3VtCisKKwkJCVRoZSBTSEExIGNoZWNrc3VtIG9mIHRoZSBwYWNrIHRoaXMgYml0bWFwIGluZGV4IGJlbG9uZ3MgdG8uCisKKwktIDQgRVdBSCBiaXRtYXBzIHRoYXQgYWN0IGFzIHR5cGUgaW5kZXhlcworCisJCVR5cGUgaW5kZXhlcyBhcmUgc2VyaWFsaXplZCBhZnRlciB0aGUgaGFzaCBjYWNoZSBpbiB0aGUgc2hhcGUKKwkJb2YgZm91ciBFV0FIIGJpdG1hcHMgc3RvcmVkIGNvbnNlY3V0aXZlbHkgKHNlZSBBcHBlbmRpeCBBIGZvcgorCQl0aGUgc2VyaWFsaXphdGlvbiBmb3JtYXQgb2YgYW4gRVdBSCBiaXRtYXApLgorCisJCVRoZXJlIGlzIGEgYml0bWFwIGZvciBlYWNoIEdpdCBvYmplY3QgdHlwZSwgc3RvcmVkIGluIHRoZSBmb2xsb3dpbmcKKwkJb3JkZXI6CisKKwkJCS0gQ29tbWl0cworCQkJLSBUcmVlcworCQkJLSBCbG9icworCQkJLSBUYWdzCisKKwkJSW4gZWFjaCBiaXRtYXAsIHRoZSBgbmB0aCBiaXQgaXMgc2V0IHRvIHRydWUgaWYgdGhlIGBuYHRoIG9iamVjdAorCQlpbiB0aGUgcGFja2ZpbGUgaXMgb2YgdGhhdCB0eXBlLgorCisJCVRoZSBvYnZpb3VzIGNvbnNlcXVlbmNlIGlzIHRoYXQgdGhlIE9SIG9mIGFsbCA0IGJpdG1hcHMgd2lsbCByZXN1bHQKKwkJaW4gYSBmdWxsIHNldCAoYWxsIGJpdHMgc2V0KSwgYW5kIHRoZSBBTkQgb2YgYWxsIDQgYml0bWFwcyB3aWxsCisJCXJlc3VsdCBpbiBhbiBlbXB0eSBiaXRtYXAgKG5vIGJpdHMgc2V0KS4KKworCS0gTiBlbnRyaWVzIHdpdGggY29tcHJlc3NlZCBiaXRtYXBzLCBvbmUgZm9yIGVhY2ggaW5kZXhlZCBjb21taXQKKworCQlXaGVyZSBgTmAgaXMgdGhlIHRvdGFsIGFtb3VudCBvZiBlbnRyaWVzIGluIHRoaXMgYml0bWFwIGluZGV4LgorCQlFYWNoIGVudHJ5IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmc6CisKKwkJLSA0LWJ5dGUgb2JqZWN0IHBvc2l0aW9uIChuZXR3b3JrIGJ5dGUgb3JkZXIpCisJCQlUaGUgcG9zaXRpb24gKippbiB0aGUgaW5kZXggZm9yIHRoZSBwYWNrZmlsZSoqIHdoZXJlIHRoZQorCQkJYml0bWFwIGZvciB0aGlzIGNvbW1pdCBpcyBmb3VuZC4KKworCQktIDEtYnl0ZSBYT1Itb2Zmc2V0CisJCQlUaGUgeG9yIG9mZnNldCB1c2VkIHRvIGNvbXByZXNzIHRoaXMgYml0bWFwLiBGb3IgYW4gZW50cnkKKwkJCWluIHBvc2l0aW9uIGB4YCwgYSBYT1Igb2Zmc2V0IG9mIGB5YCBtZWFucyB0aGF0IHRoZSBhY3R1YWwKKwkJCWJpdG1hcCByZXByZXNlbnRpbmcgdGhpcyBjb21taXQgaXMgY29tcG9zZWQgYnkgWE9SaW5nIHRoZQorCQkJYml0bWFwIGZvciB0aGlzIGVudHJ5IHdpdGggdGhlIGJpdG1hcCBpbiBlbnRyeSBgeC15YCAoaS5lLgorCQkJdGhlIGJpdG1hcCBgeWAgZW50cmllcyBiZWZvcmUgdGhpcyBvbmUpLgorCisJCQlOb3RlIHRoYXQgdGhpcyBjb21wcmVzc2lvbiBjYW4gYmUgcmVjdXJzaXZlLiBJbiBvcmRlciB0bworCQkJWE9SIHRoaXMgZW50cnkgd2l0aCBhIHByZXZpb3VzIG9uZSwgdGhlIHByZXZpb3VzIGVudHJ5IG5lZWRzCisJCQl0byBiZSBkZWNvbXByZXNzZWQgZmlyc3QsIGFuZCBzbyBvbi4KKworCQkJVGhlIGhhcmQtbGltaXQgZm9yIHRoaXMgb2Zmc2V0IGlzIDE2MCAoYW4gZW50cnkgY2FuIG9ubHkgYmUKKwkJCXhvcidlZCBhZ2FpbnN0IG9uZSBvZiB0aGUgMTYwIGVudHJpZXMgcHJlY2VkaW5nIGl0KS4gVGhpcworCQkJbnVtYmVyIGlzIGFsd2F5cyBwb3NpdGl2ZSwgYW5kIGhlbmNlIGVudHJpZXMgYXJlIGFsd2F5cyB4b3InZWQKKwkJCXdpdGggKipwcmV2aW91cyoqIGJpdG1hcHMsIG5vdCBiaXRtYXBzIHRoYXQgd2lsbCBjb21lIGFmdGVyd2FyZHMKKwkJCWluIHRoZSBpbmRleC4KKworCQktIDEtYnl0ZSBmbGFncyBmb3IgdGhpcyBiaXRtYXAKKwkJCUF0IHRoZSBtb21lbnQgdGhlIG9ubHkgYXZhaWxhYmxlIGZsYWcgaXMgYDB4MWAsIHdoaWNoIGhpbnRzCisJCQl0aGF0IHRoaXMgYml0bWFwIGNhbiBiZSByZS11c2VkIHdoZW4gcmVidWlsZGluZyBiaXRtYXAgaW5kZXhlcworCQkJZm9yIHRoZSByZXBvc2l0b3J5LgorCisJCS0gVGhlIGNvbXByZXNzZWQgYml0bWFwIGl0c2VsZiwgc2VlIEFwcGVuZGl4IEEuCisKKz09IEFwcGVuZGl4IEE6IFNlcmlhbGl6YXRpb24gZm9ybWF0IGZvciBhbiBFV0FIIGJpdG1hcAorCitFd2FoIGJpdG1hcHMgYXJlIHNlcmlhbGl6ZWQgaW4gdGhlIHNhbWUgcHJvdG9jb2wgYXMgdGhlIEpBVkFFV0FICitsaWJyYXJ5LCBtYWtpbmcgdGhlbSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIHRoZSBKR2l0CitpbXBsZW1lbnRhdGlvbjoKKworCS0gNC1ieXRlIG51bWJlciBvZiBiaXRzIG9mIHRoZSByZXN1bHRpbmcgVU5DT01QUkVTU0VEIGJpdG1hcAorCisJLSA0LWJ5dGUgbnVtYmVyIG9mIHdvcmRzIG9mIHRoZSBDT01QUkVTU0VEIGJpdG1hcCwgd2hlbiBzdG9yZWQKKworCS0gTiB4IDgtYnl0ZSB3b3JkcywgYXMgc3BlY2lmaWVkIGJ5IHRoZSBwcmV2aW91cyBmaWVsZAorCisJCVRoaXMgaXMgdGhlIGFjdHVhbCBjb250ZW50IG9mIHRoZSBjb21wcmVzc2VkIGJpdG1hcC4KKworCS0gNC1ieXRlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IFJMVyBmb3IgdGhlIGNvbXByZXNzZWQKKwkJYml0bWFwCisKK0FsbCB3b3JkcyBhcmUgc3RvcmVkIGluIG5ldHdvcmsgYnl0ZSBvcmRlciBmb3IgdGhlaXIgY29ycmVzcG9uZGluZworc2l6ZXMuCisKK1RoZSBjb21wcmVzc2VkIGJpdG1hcCBpcyBzdG9yZWQgaW4gYSBmb3JtIG9mIHJ1bi1sZW5ndGggZW5jb2RpbmcsIGFzCitmb2xsb3dzLiAgSXQgY29uc2lzdHMgb2YgYSBjb25jYXRlbmF0aW9uIG9mIGFuIGFyYml0cmFyeSBudW1iZXIgb2YKK2NodW5rcy4gIEVhY2ggY2h1bmsgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgNjQtYml0IHdvcmRzCisKKyAgICAgSCAgTF8xICBMXzIgIExfMyAuLi4uIExfTQorCitIIGlzIGNhbGxlZCBSTFcgKHJ1biBsZW5ndGggd29yZCkuICBJdCBjb25zaXN0cyBvZiAoZnJvbSBsb3dlciB0byBoaWdoZXIKK29yZGVyIGJpdHMpOgorCisgICAgIC0gMSBiaXQ6IHRoZSByZXBlYXRlZCBiaXQgQgorCisgICAgIC0gMzIgYml0czogcmVwZXRpdGlvbiBjb3VudCBLICh1bnNpZ25lZCkKKworICAgICAtIDMxIGJpdHM6IGxpdGVyYWwgd29yZCBjb3VudCBNICh1bnNpZ25lZCkKKworVGhlIGJpdHN0cmVhbSByZXByZXNlbnRlZCBieSB0aGUgYWJvdmUgY2h1bmsgaXMgdGhlbjoKKworICAgICAtIEsgcmVwZXRpdGlvbnMgb2YgQgorCisgICAgIC0gVGhlIGJpdHMgc3RvcmVkIGluIGBMXzFgIHRocm91Z2ggYExfTWAuICBXaXRoaW4gYSB3b3JkLCBiaXRzIGF0CisgICAgICAgbG93ZXIgb3JkZXIgY29tZSBlYXJsaWVyIGluIHRoZSBzdHJlYW0gdGhhbiB0aG9zZSBhdCBoaWdoZXIKKyAgICAgICBvcmRlci4KKworVGhlIG5leHQgd29yZCBhZnRlciBgTF9NYCAoaWYgYW55KSBtdXN0IGFnYWluIGJlIGEgUkxXLCBmb3IgdGhlIG5leHQKK2NodW5rLiAgRm9yIGVmZmljaWVudCBhcHBlbmRpbmcgdG8gdGhlIGJpdHN0cmVhbSwgdGhlIEVXQUggc3RvcmVzIGEKK3BvaW50ZXIgdG8gdGhlIGxhc3QgUkxXIGluIHRoZSBzdHJlYW0uCisKKworPT0gQXBwZW5kaXggQjogT3B0aW9uYWwgQml0bWFwIFNlY3Rpb25zCisKK1RoZXNlIHNlY3Rpb25zIG1heSBvciBtYXkgbm90IGJlIHByZXNlbnQgaW4gdGhlIGAuYml0bWFwYCBmaWxlOyB0aGVpcgorcHJlc2VuY2UgaXMgaW5kaWNhdGVkIGJ5IHRoZSBoZWFkZXIgZmxhZ3Mgc2VjdGlvbiBkZXNjcmliZWQgYWJvdmUuCisKK05hbWUtaGFzaCBjYWNoZQorLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBCSVRNQVBfT1BUX0hBU0hfQ0FDSEUgZmxhZyBpcyBzZXQsIHRoZSBlbmQgb2YgdGhlIGJpdG1hcCBjb250YWlucworYSBjYWNoZSBvZiAzMi1iaXQgdmFsdWVzLCBvbmUgcGVyIG9iamVjdCBpbiB0aGUgcGFjay4gVGhlIHZhbHVlIGF0Citwb3NpdGlvbiBgaWAgaXMgdGhlIGhhc2ggb2YgdGhlIHBhdGhuYW1lIGF0IHdoaWNoIHRoZSBgaWB0aCBvYmplY3QKKyhjb3VudGluZyBpbiBpbmRleCBvcmRlcikgaW4gdGhlIHBhY2sgY2FuIGJlIGZvdW5kLiAgVGhpcyBjYW4gYmUgZmVkCitpbnRvIHRoZSBkZWx0YSBoZXVyaXN0aWNzIHRvIGNvbXBhcmUgb2JqZWN0cyB3aXRoIHNpbWlsYXIgcGF0aG5hbWVzLgorCitUaGUgaGFzaCBhbGdvcml0aG0gdXNlZCBpczoKKworICAgIGhhc2ggPSAwOworICAgIHdoaWxlICgoYyA9ICpuYW1lKyspKQorCSAgICBpZiAoIWlzc3BhY2UoYykpCisJCSAgICBoYXNoID0gKGhhc2ggPj4gMikgKyAoYyA8PCAyNCk7CisKK05vdGUgdGhhdCB0aGlzIGhhc2hpbmcgc2NoZW1lIGlzIHRpZWQgdG8gdGhlIEJJVE1BUF9PUFRfSEFTSF9DQUNIRSBmbGFnLgorSWYgaW1wbGVtZW50YXRpb25zIHdhbnQgdG8gY2hvb3NlIGEgZGlmZmVyZW50IGhhc2hpbmcgc2NoZW1lLCB0aGV5IGFyZQorZnJlZSB0byBkbyBzbywgYnV0IE1VU1QgYWxsb2NhdGUgYSBuZXcgaGVhZGVyIGZsYWcgKGJlY2F1c2UgY29tcGFyaW5nCitoYXNoZXMgbWFkZSB1bmRlciB0d28gZGlmZmVyZW50IHNjaGVtZXMgd291bGQgYmUgcG9pbnRsZXNzKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2J1bmRsZS1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYnVuZGxlLWZvcm1hdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4MjgxNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2J1bmRsZS1mb3JtYXQudHh0CkBAIC0wLDAgKzEsNDggQEAKKz0gR2l0IGJ1bmRsZSB2MiBmb3JtYXQKKworVGhlIEdpdCBidW5kbGUgZm9ybWF0IGlzIGEgZm9ybWF0IHRoYXQgcmVwcmVzZW50cyBib3RoIHJlZnMgYW5kIEdpdCBvYmplY3RzLgorCis9PSBGb3JtYXQKKworV2Ugd2lsbCB1c2UgQUJORiBub3RhdGlvbiB0byBkZWZpbmUgdGhlIEdpdCBidW5kbGUgZm9ybWF0LiBTZWUKK3Byb3RvY29sLWNvbW1vbi50eHQgZm9yIHRoZSBkZXRhaWxzLgorCistLS0tCitidW5kbGUgICAgPSBzaWduYXR1cmUgKnByZXJlcXVpc2l0ZSAqcmVmZXJlbmNlIExGIHBhY2sKK3NpZ25hdHVyZSA9ICIjIHYyIGdpdCBidW5kbGUiIExGCisKK3ByZXJlcXVpc2l0ZSA9ICItIiBvYmotaWQgU1AgY29tbWVudCBMRgorY29tbWVudCAgICAgID0gKkNIQVIKK3JlZmVyZW5jZSAgICA9IG9iai1pZCBTUCByZWZuYW1lIExGCisKK3BhY2sgICAgICAgICA9IC4uLiA7IHBhY2tmaWxlCistLS0tCisKKz09IFNlbWFudGljcworCitBIEdpdCBidW5kbGUgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMuCisKKyogIlByZXJlcXVpc2l0ZXMiIGxpc3RzIHRoZSBvYmplY3RzIHRoYXQgYXJlIE5PVCBpbmNsdWRlZCBpbiB0aGUgYnVuZGxlIGFuZCB0aGUKKyAgcmVhZGVyIG9mIHRoZSBidW5kbGUgTVVTVCBhbHJlYWR5IGhhdmUsIGluIG9yZGVyIHRvIHVzZSB0aGUgZGF0YSBpbiB0aGUKKyAgYnVuZGxlLiBUaGUgb2JqZWN0cyBzdG9yZWQgaW4gdGhlIGJ1bmRsZSBtYXkgcmVmZXIgdG8gcHJlcmVxdWlzaXRlIG9iamVjdHMgYW5kCisgIGFueXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRoZW0gKGUuZy4gYSB0cmVlIG9iamVjdCBpbiB0aGUgYnVuZGxlIGNhbiByZWZlcmVuY2UKKyAgYSBibG9iIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYSBwcmVyZXF1aXNpdGUpIGFuZC9vciBleHByZXNzZWQgYXMgYSBkZWx0YQorICBhZ2FpbnN0IHByZXJlcXVpc2l0ZSBvYmplY3RzLgorCisqICJSZWZlcmVuY2VzIiByZWNvcmQgdGhlIHRpcHMgb2YgdGhlIGhpc3RvcnkgZ3JhcGgsIGlvdywgd2hhdCB0aGUgcmVhZGVyIG9mIHRoZQorICBidW5kbGUgQ0FOICJnaXQgZmV0Y2giIGZyb20gaXQuCisKKyogIlBhY2siIGlzIHRoZSBwYWNrIGRhdGEgc3RyZWFtICJnaXQgZmV0Y2giIHdvdWxkIHNlbmQsIGlmIHlvdSBmZXRjaCBmcm9tIGEKKyAgcmVwb3NpdG9yeSB0aGF0IGhhcyB0aGUgcmVmZXJlbmNlcyByZWNvcmRlZCBpbiB0aGUgIlJlZmVyZW5jZXMiIGFib3ZlIGludG8gYQorICByZXBvc2l0b3J5IHRoYXQgaGFzIHJlZmVyZW5jZXMgcG9pbnRpbmcgYXQgdGhlIG9iamVjdHMgbGlzdGVkIGluCisgICJQcmVyZXF1aXNpdGVzIiBhYm92ZS4KKworSW4gdGhlIGJ1bmRsZSBmb3JtYXQsIHRoZXJlIGNhbiBiZSBhIGNvbW1lbnQgZm9sbG93aW5nIGEgcHJlcmVxdWlzaXRlIG9iai1pZC4KK1RoaXMgaXMgYSBjb21tZW50IGFuZCBpdCBoYXMgbm8gc3BlY2lmaWMgbWVhbmluZy4gVGhlIHdyaXRlciBvZiB0aGUgYnVuZGxlIE1BWQorcHV0IGFueSBzdHJpbmcgaGVyZS4gVGhlIHJlYWRlciBvZiB0aGUgYnVuZGxlIE1VU1QgaWdub3JlIHRoZSBjb21tZW50LgorCis9PT0gTm90ZSBvbiB0aGUgc2hhbGxvdyBjbG9uZSBhbmQgYSBHaXQgYnVuZGxlCisKK05vdGUgdGhhdCB0aGUgcHJlcmVxdWlzaXRlcyBkb2VzIG5vdCByZXByZXNlbnQgYSBzaGFsbG93LWNsb25lIGJvdW5kYXJ5LiBUaGUKK3NlbWFudGljcyBvZiB0aGUgcHJlcmVxdWlzaXRlcyBhbmQgdGhlIHNoYWxsb3ctY2xvbmUgYm91bmRhcmllcyBhcmUgZGlmZmVyZW50LAorYW5kIHRoZSBHaXQgYnVuZGxlIHYyIGZvcm1hdCBjYW5ub3QgcmVwcmVzZW50IGEgc2hhbGxvdyBjbG9uZSByZXBvc2l0b3J5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvY29tbWl0LWdyYXBoLWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9jb21taXQtZ3JhcGgtZm9ybWF0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmVlZjE3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvY29tbWl0LWdyYXBoLWZvcm1hdC50eHQKQEAgLTAsMCArMSwxMzQgQEAKK0dpdCBjb21taXQgZ3JhcGggZm9ybWF0Cis9PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgR2l0IGNvbW1pdCBncmFwaCBzdG9yZXMgYSBsaXN0IG9mIGNvbW1pdCBPSURzIGFuZCBzb21lIGFzc29jaWF0ZWQKK21ldGFkYXRhLCBpbmNsdWRpbmc6CisKKy0gVGhlIGdlbmVyYXRpb24gbnVtYmVyIG9mIHRoZSBjb21taXQuIENvbW1pdHMgd2l0aCBubyBwYXJlbnRzIGhhdmUKKyAgZ2VuZXJhdGlvbiBudW1iZXIgMTsgY29tbWl0cyB3aXRoIHBhcmVudHMgaGF2ZSBnZW5lcmF0aW9uIG51bWJlcgorICBvbmUgbW9yZSB0aGFuIHRoZSBtYXhpbXVtIGdlbmVyYXRpb24gbnVtYmVyIG9mIGl0cyBwYXJlbnRzLiBXZQorICByZXNlcnZlIHplcm8gYXMgc3BlY2lhbCwgYW5kIGNhbiBiZSB1c2VkIHRvIG1hcmsgYSBnZW5lcmF0aW9uCisgIG51bWJlciBpbnZhbGlkIG9yIGFzICJub3QgY29tcHV0ZWQiLgorCistIFRoZSByb290IHRyZWUgT0lELgorCistIFRoZSBjb21taXQgZGF0ZS4KKworLSBUaGUgcGFyZW50cyBvZiB0aGUgY29tbWl0LCBzdG9yZWQgdXNpbmcgcG9zaXRpb25hbCByZWZlcmVuY2VzIHdpdGhpbgorICB0aGUgZ3JhcGggZmlsZS4KKworLSBUaGUgQmxvb20gZmlsdGVyIG9mIHRoZSBjb21taXQgY2FycnlpbmcgdGhlIHBhdGhzIHRoYXQgd2VyZSBjaGFuZ2VkIGJldHdlZW4KKyAgdGhlIGNvbW1pdCBhbmQgaXRzIGZpcnN0IHBhcmVudCwgaWYgcmVxdWVzdGVkLgorCitUaGVzZSBwb3NpdGlvbmFsIHJlZmVyZW5jZXMgYXJlIHN0b3JlZCBhcyB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlcnMKK2NvcnJlc3BvbmRpbmcgdG8gdGhlIGFycmF5IHBvc2l0aW9uIHdpdGhpbiB0aGUgbGlzdCBvZiBjb21taXQgT0lEcy4gRHVlCit0byBzb21lIHNwZWNpYWwgY29uc3RhbnRzIHdlIHVzZSB0byB0cmFjayBwYXJlbnRzLCB3ZSBjYW4gc3RvcmUgYXQgbW9zdAorKDEgPDwgMzApICsgKDEgPDwgMjkpICsgKDEgPDwgMjgpIC0gMSAoYXJvdW5kIDEuOCBiaWxsaW9uKSBjb21taXRzLgorCis9PSBDb21taXQgZ3JhcGggZmlsZXMgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworSW4gb3JkZXIgdG8gYWxsb3cgZXh0ZW5zaW9ucyB0aGF0IGFkZCBleHRyYSBkYXRhIHRvIHRoZSBncmFwaCwgd2Ugb3JnYW5pemUKK3RoZSBib2R5IGludG8gImNodW5rcyIgYW5kIHByb3ZpZGUgYSBiaW5hcnkgbG9va3VwIHRhYmxlIGF0IHRoZSBiZWdpbm5pbmcKK29mIHRoZSBib2R5LiBUaGUgaGVhZGVyIGluY2x1ZGVzIGNlcnRhaW4gdmFsdWVzLCBzdWNoIGFzIG51bWJlciBvZiBjaHVua3MKK2FuZCBoYXNoIHR5cGUuCisKK0FsbCA0LWJ5dGUgbnVtYmVycyBhcmUgaW4gbmV0d29yayBvcmRlci4KKworSEVBREVSOgorCisgIDQtYnl0ZSBzaWduYXR1cmU6CisgICAgICBUaGUgc2lnbmF0dXJlIGlzOiB7J0MnLCAnRycsICdQJywgJ0gnfQorCisgIDEtYnl0ZSB2ZXJzaW9uIG51bWJlcjoKKyAgICAgIEN1cnJlbnRseSwgdGhlIG9ubHkgdmFsaWQgdmVyc2lvbiBpcyAxLgorCisgIDEtYnl0ZSBIYXNoIFZlcnNpb24gKDEgPSBTSEEtMSkKKyAgICAgIFdlIGluZmVyIHRoZSBoYXNoIGxlbmd0aCAoSCkgZnJvbSB0aGlzIHZhbHVlLgorCisgIDEtYnl0ZSBudW1iZXIgKEMpIG9mICJjaHVua3MiCisKKyAgMS1ieXRlIG51bWJlciAoQikgb2YgYmFzZSBjb21taXQtZ3JhcGhzCisgICAgICBXZSBpbmZlciB0aGUgbGVuZ3RoIChIKkIpIG9mIHRoZSBCYXNlIEdyYXBocyBjaHVuaworICAgICAgZnJvbSB0aGlzIHZhbHVlLgorCitDSFVOSyBMT09LVVA6CisKKyAgKEMgKyAxKSAqIDEyIGJ5dGVzIGxpc3RpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIGZvciB0aGUgY2h1bmtzOgorICAgICAgRmlyc3QgNCBieXRlcyBkZXNjcmliZSB0aGUgY2h1bmsgaWQuIFZhbHVlIDAgaXMgYSB0ZXJtaW5hdGluZyBsYWJlbC4KKyAgICAgIE90aGVyIDggYnl0ZXMgcHJvdmlkZSB0aGUgYnl0ZS1vZmZzZXQgaW4gY3VycmVudCBmaWxlIGZvciBjaHVuayB0bworICAgICAgc3RhcnQuIChDaHVua3MgYXJlIG9yZGVyZWQgY29udGlndW91c2x5IGluIHRoZSBmaWxlLCBzbyB5b3UgY2FuIGluZmVyCisgICAgICB0aGUgbGVuZ3RoIHVzaW5nIHRoZSBuZXh0IGNodW5rIHBvc2l0aW9uIGlmIG5lY2Vzc2FyeS4pIEVhY2ggY2h1bmsKKyAgICAgIElEIGFwcGVhcnMgYXQgbW9zdCBvbmNlLgorCisgIFRoZSByZW1haW5pbmcgZGF0YSBpbiB0aGUgYm9keSBpcyBkZXNjcmliZWQgb25lIGNodW5rIGF0IGEgdGltZSwgYW5kCisgIHRoZXNlIGNodW5rcyBtYXkgYmUgZ2l2ZW4gaW4gYW55IG9yZGVyLiBDaHVua3MgYXJlIHJlcXVpcmVkIHVubGVzcworICBvdGhlcndpc2Ugc3BlY2lmaWVkLgorCitDSFVOSyBEQVRBOgorCisgIE9JRCBGYW5vdXQgKElEOiB7J08nLCAnSScsICdEJywgJ0YnfSkgKDI1NiAqIDQgYnl0ZXMpCisgICAgICBUaGUgaXRoIGVudHJ5LCBGW2ldLCBzdG9yZXMgdGhlIG51bWJlciBvZiBPSURzIHdpdGggZmlyc3QKKyAgICAgIGJ5dGUgYXQgbW9zdCBpLiBUaHVzIEZbMjU1XSBzdG9yZXMgdGhlIHRvdGFsCisgICAgICBudW1iZXIgb2YgY29tbWl0cyAoTikuCisKKyAgT0lEIExvb2t1cCAoSUQ6IHsnTycsICdJJywgJ0QnLCAnTCd9KSAoTiAqIEggYnl0ZXMpCisgICAgICBUaGUgT0lEcyBmb3IgYWxsIGNvbW1pdHMgaW4gdGhlIGdyYXBoLCBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLgorCisgIENvbW1pdCBEYXRhIChJRDogeydDJywgJ0QnLCAnQScsICdUJyB9KSAoTiAqIChIICsgMTYpIGJ5dGVzKQorICAgICogVGhlIGZpcnN0IEggYnl0ZXMgYXJlIGZvciB0aGUgT0lEIG9mIHRoZSByb290IHRyZWUuCisgICAgKiBUaGUgbmV4dCA4IGJ5dGVzIGFyZSBmb3IgdGhlIHBvc2l0aW9ucyBvZiB0aGUgZmlyc3QgdHdvIHBhcmVudHMKKyAgICAgIG9mIHRoZSBpdGggY29tbWl0LiBTdG9yZXMgdmFsdWUgMHg3MDAwMDAwIGlmIG5vIHBhcmVudCBpbiB0aGF0CisgICAgICBwb3NpdGlvbi4gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB0d28gcGFyZW50cywgdGhlIHNlY29uZCB2YWx1ZQorICAgICAgaGFzIGl0cyBtb3N0LXNpZ25pZmljYW50IGJpdCBvbiBhbmQgdGhlIG90aGVyIGJpdHMgc3RvcmUgYW4gYXJyYXkKKyAgICAgIHBvc2l0aW9uIGludG8gdGhlIEV4dHJhIEVkZ2UgTGlzdCBjaHVuay4KKyAgICAqIFRoZSBuZXh0IDggYnl0ZXMgc3RvcmUgdGhlIGdlbmVyYXRpb24gbnVtYmVyIG9mIHRoZSBjb21taXQgYW5kCisgICAgICB0aGUgY29tbWl0IHRpbWUgaW4gc2Vjb25kcyBzaW5jZSBFUE9DSC4gVGhlIGdlbmVyYXRpb24gbnVtYmVyCisgICAgICB1c2VzIHRoZSBoaWdoZXIgMzAgYml0cyBvZiB0aGUgZmlyc3QgNCBieXRlcywgd2hpbGUgdGhlIGNvbW1pdAorICAgICAgdGltZSB1c2VzIHRoZSAzMiBiaXRzIG9mIHRoZSBzZWNvbmQgNCBieXRlcywgYWxvbmcgd2l0aCB0aGUgbG93ZXN0CisgICAgICAyIGJpdHMgb2YgdGhlIGxvd2VzdCBieXRlLCBzdG9yaW5nIHRoZSAzM3JkIGFuZCAzNHRoIGJpdCBvZiB0aGUKKyAgICAgIGNvbW1pdCB0aW1lLgorCisgIEV4dHJhIEVkZ2UgTGlzdCAoSUQ6IHsnRScsICdEJywgJ0cnLCAnRSd9KSBbT3B0aW9uYWxdCisgICAgICBUaGlzIGxpc3Qgb2YgNC1ieXRlIHZhbHVlcyBzdG9yZSB0aGUgc2Vjb25kIHRocm91Z2ggbnRoIHBhcmVudHMgZm9yCisgICAgICBhbGwgb2N0b3B1cyBtZXJnZXMuIFRoZSBzZWNvbmQgcGFyZW50IHZhbHVlIGluIHRoZSBjb21taXQgZGF0YSBzdG9yZXMKKyAgICAgIGFuIGFycmF5IHBvc2l0aW9uIHdpdGhpbiB0aGlzIGxpc3QgYWxvbmcgd2l0aCB0aGUgbW9zdC1zaWduaWZpY2FudCBiaXQKKyAgICAgIG9uLiBTdGFydGluZyBhdCB0aGF0IGFycmF5IHBvc2l0aW9uLCBpdGVyYXRlIHRocm91Z2ggdGhpcyBsaXN0IG9mIGNvbW1pdAorICAgICAgcG9zaXRpb25zIGZvciB0aGUgcGFyZW50cyB1bnRpbCByZWFjaGluZyBhIHZhbHVlIHdpdGggdGhlIG1vc3Qtc2lnbmlmaWNhbnQKKyAgICAgIGJpdCBvbi4gVGhlIG90aGVyIGJpdHMgY29ycmVzcG9uZCB0byB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgcGFyZW50LgorCisgIEJsb29tIEZpbHRlciBJbmRleCAoSUQ6IHsnQicsICdJJywgJ0QnLCAnWCd9KSAoTiAqIDQgYnl0ZXMpIFtPcHRpb25hbF0KKyAgICAqIFRoZSBpdGggZW50cnksIEJJRFhbaV0sIHN0b3JlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIGFsbCBCbG9vbSBmaWx0ZXJzCisgICAgICBmcm9tIGNvbW1pdCAwIHRvIGNvbW1pdCBpIChpbmNsdXNpdmUpIGluIGxleGljb2dyYXBoaWMgb3JkZXIuIFRoZSBCbG9vbQorICAgICAgZmlsdGVyIGZvciB0aGUgaS10aCBjb21taXQgc3BhbnMgZnJvbSBCSURYW2ktMV0gdG8gQklEWFtpXSAocGx1cyBoZWFkZXIKKyAgICAgIGxlbmd0aCksIHdoZXJlIEJJRFhbLTFdIGlzIDAuCisgICAgKiBUaGUgQklEWCBjaHVuayBpcyBpZ25vcmVkIGlmIHRoZSBCREFUIGNodW5rIGlzIG5vdCBwcmVzZW50LgorCisgIEJsb29tIEZpbHRlciBEYXRhIChJRDogeydCJywgJ0QnLCAnQScsICdUJ30pIFtPcHRpb25hbF0KKyAgICAqIEl0IHN0YXJ0cyB3aXRoIGhlYWRlciBjb25zaXN0aW5nIG9mIHRocmVlIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyczoKKyAgICAgIC0gVmVyc2lvbiBvZiB0aGUgaGFzaCBhbGdvcml0aG0gYmVpbmcgdXNlZC4gV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydAorCXZhbHVlIDEgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIDMyLWJpdCB2ZXJzaW9uIG9mIHRoZSBtdXJtdXIzIGhhc2gKKwlpbXBsZW1lbnRlZCBleGFjdGx5IGFzIGRlc2NyaWJlZCBpbgorCWh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL011cm11ckhhc2gjQWxnb3JpdGhtIGFuZCB0aGUgZG91YmxlCisJaGFzaGluZyB0ZWNobmlxdWUgdXNpbmcgc2VlZCB2YWx1ZXMgMHgyOTNhZTc2ZiBhbmQgMHg3ZTY0NmUyIGFzCisJZGVzY3JpYmVkIGluIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDA3Lzk3OC0zLTU0MC0zMDQ5NC00XzI2ICJCbG9vbSBGaWx0ZXJzCisJaW4gUHJvYmFiaWxpc3RpYyBWZXJpZmljYXRpb24iCisgICAgICAtIFRoZSBudW1iZXIgb2YgdGltZXMgYSBwYXRoIGlzIGhhc2hlZCBhbmQgaGVuY2UgdGhlIG51bWJlciBvZiBiaXQgcG9zaXRpb25zCisJICAgICAgdGhhdCBjdW11bGF0aXZlbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYSBmaWxlIGlzIHByZXNlbnQgaW4gdGhlIGNvbW1pdC4KKyAgICAgIC0gVGhlIG1pbmltdW0gbnVtYmVyIG9mIGJpdHMgJ2InIHBlciBlbnRyeSBpbiB0aGUgQmxvb20gZmlsdGVyLiBJZiB0aGUgZmlsdGVyCisJICAgICAgY29udGFpbnMgJ24nIGVudHJpZXMsIHRoZW4gdGhlIGZpbHRlciBzaXplIGlzIHRoZSBtaW5pbXVtIG51bWJlciBvZiA2NC1iaXQKKwkgICAgICB3b3JkcyB0aGF0IGNvbnRhaW4gbipiIGJpdHMuCisgICAgKiBUaGUgcmVzdCBvZiB0aGUgY2h1bmsgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIHRoZSBjb21wdXRlZCBCbG9vbQorICAgICAgZmlsdGVycyBmb3IgdGhlIGNvbW1pdHMgaW4gbGV4aWNvZ3JhcGhpYyBvcmRlci4KKyAgICAqIE5vdGU6IENvbW1pdHMgd2l0aCBubyBjaGFuZ2VzIG9yIG1vcmUgdGhhbiA1MTIgY2hhbmdlcyBoYXZlIEJsb29tIGZpbHRlcnMKKyAgICAgIG9mIGxlbmd0aCB6ZXJvLgorICAgICogVGhlIEJEQVQgY2h1bmsgaXMgcHJlc2VudCBpZiBhbmQgb25seSBpZiBCSURYIGlzIHByZXNlbnQuCisKKyAgQmFzZSBHcmFwaHMgTGlzdCAoSUQ6IHsnQicsICdBJywgJ1MnLCAnRSd9KSBbT3B0aW9uYWxdCisgICAgICBUaGlzIGxpc3Qgb2YgSC1ieXRlIGhhc2hlcyBkZXNjcmliZSBhIHNldCBvZiBCIGNvbW1pdC1ncmFwaCBmaWxlcyB0aGF0CisgICAgICBmb3JtIGEgY29tbWl0LWdyYXBoIGNoYWluLiBUaGUgZ3JhcGggcG9zaXRpb24gZm9yIHRoZSBpdGggY29tbWl0IGluIHRoaXMKKyAgICAgIGZpbGUncyBPSUQgTG9va3VwIGNodW5rIGlzIGVxdWFsIHRvIGkgcGx1cyB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgaW4gYWxsCisgICAgICBiYXNlIGdyYXBocy4gIElmIEIgaXMgbm9uLXplcm8sIHRoaXMgY2h1bmsgbXVzdCBleGlzdC4KKworVFJBSUxFUjoKKworCUgtYnl0ZSBIQVNILWNoZWNrc3VtIG9mIGFsbCBvZiB0aGUgYWJvdmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9jb21taXQtZ3JhcGgudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvY29tbWl0LWdyYXBoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDhmYTMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvY29tbWl0LWdyYXBoLnR4dApAQCAtMCwwICsxLDM1MCBAQAorR2l0IENvbW1pdCBHcmFwaCBEZXNpZ24gTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0dpdCB3YWxrcyB0aGUgY29tbWl0IGdyYXBoIGZvciBtYW55IHJlYXNvbnMsIGluY2x1ZGluZzoKKworMS4gTGlzdGluZyBhbmQgZmlsdGVyaW5nIGNvbW1pdCBoaXN0b3J5LgorMi4gQ29tcHV0aW5nIG1lcmdlIGJhc2VzLgorCitUaGVzZSBvcGVyYXRpb25zIGNhbiBiZWNvbWUgc2xvdyBhcyB0aGUgY29tbWl0IGNvdW50IGdyb3dzLiBUaGUgbWVyZ2UKK2Jhc2UgY2FsY3VsYXRpb24gc2hvd3MgdXAgaW4gbWFueSB1c2VyLWZhY2luZyBjb21tYW5kcywgc3VjaCBhcyAnbWVyZ2UtYmFzZScKK29yICdzdGF0dXMnIGFuZCBjYW4gdGFrZSBtaW51dGVzIHRvIGNvbXB1dGUgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2hhcGUuCisKK1RoZXJlIGFyZSB0d28gbWFpbiBjb3N0cyBoZXJlOgorCisxLiBEZWNvbXByZXNzaW5nIGFuZCBwYXJzaW5nIGNvbW1pdHMuCisyLiBXYWxraW5nIHRoZSBlbnRpcmUgZ3JhcGggdG8gc2F0aXNmeSB0b3BvbG9naWNhbCBvcmRlciBjb25zdHJhaW50cy4KKworVGhlIGNvbW1pdC1ncmFwaCBmaWxlIGlzIGEgc3VwcGxlbWVudGFsIGRhdGEgc3RydWN0dXJlIHRoYXQgYWNjZWxlcmF0ZXMKK2NvbW1pdCBncmFwaCB3YWxrcy4gSWYgYSB1c2VyIGRvd25ncmFkZXMgb3IgZGlzYWJsZXMgdGhlICdjb3JlLmNvbW1pdEdyYXBoJworY29uZmlnIHNldHRpbmcsIHRoZW4gdGhlIGV4aXN0aW5nIE9EQiBpcyBzdWZmaWNpZW50LiBUaGUgZmlsZSBpcyBzdG9yZWQKK2FzICJjb21taXQtZ3JhcGgiIGVpdGhlciBpbiB0aGUgLmdpdC9vYmplY3RzL2luZm8gZGlyZWN0b3J5IG9yIGluIHRoZSBpbmZvCitkaXJlY3Rvcnkgb2YgYW4gYWx0ZXJuYXRlLgorCitUaGUgY29tbWl0LWdyYXBoIGZpbGUgc3RvcmVzIHRoZSBjb21taXQgZ3JhcGggc3RydWN0dXJlIGFsb25nIHdpdGggc29tZQorZXh0cmEgbWV0YWRhdGEgdG8gc3BlZWQgdXAgZ3JhcGggd2Fsa3MuIEJ5IGxpc3RpbmcgY29tbWl0IE9JRHMgaW4KK2xleGljb2dyYXBoaWMgb3JkZXIsIHdlIGNhbiBpZGVudGlmeSBhbiBpbnRlZ2VyIHBvc2l0aW9uIGZvciBlYWNoIGNvbW1pdAorYW5kIHJlZmVyIHRvIHRoZSBwYXJlbnRzIG9mIGEgY29tbWl0IHVzaW5nIHRob3NlIGludGVnZXIgcG9zaXRpb25zLiBXZQordXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCBpbml0aWFsIGNvbW1pdHMgYW5kIHRoZW4gdXNlIHRoZSBpbnRlZ2VyCitwb3NpdGlvbnMgZm9yIGZhc3QgbG9va3VwcyBkdXJpbmcgdGhlIHdhbGsuCisKK0EgY29uc3VtZXIgbWF5IGxvYWQgdGhlIGZvbGxvd2luZyBpbmZvIGZvciBhIGNvbW1pdCBmcm9tIHRoZSBncmFwaDoKKworMS4gVGhlIGNvbW1pdCBPSUQuCisyLiBUaGUgbGlzdCBvZiBwYXJlbnRzLCBhbG9uZyB3aXRoIHRoZWlyIGludGVnZXIgcG9zaXRpb24uCiszLiBUaGUgY29tbWl0IGRhdGUuCis0LiBUaGUgcm9vdCB0cmVlIE9JRC4KKzUuIFRoZSBnZW5lcmF0aW9uIG51bWJlciAoc2VlIGRlZmluaXRpb24gYmVsb3cpLgorCitWYWx1ZXMgMS00IHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBvZiBwYXJzZV9jb21taXRfZ2VudGx5KCkuCisKK0RlZmluZSB0aGUgImdlbmVyYXRpb24gbnVtYmVyIiBvZiBhIGNvbW1pdCByZWN1cnNpdmVseSBhcyBmb2xsb3dzOgorCisgKiBBIGNvbW1pdCB3aXRoIG5vIHBhcmVudHMgKGEgcm9vdCBjb21taXQpIGhhcyBnZW5lcmF0aW9uIG51bWJlciBvbmUuCisKKyAqIEEgY29tbWl0IHdpdGggYXQgbGVhc3Qgb25lIHBhcmVudCBoYXMgZ2VuZXJhdGlvbiBudW1iZXIgb25lIG1vcmUgdGhhbgorICAgdGhlIGxhcmdlc3QgZ2VuZXJhdGlvbiBudW1iZXIgYW1vbmcgaXRzIHBhcmVudHMuCisKK0VxdWl2YWxlbnRseSwgdGhlIGdlbmVyYXRpb24gbnVtYmVyIG9mIGEgY29tbWl0IEEgaXMgb25lIG1vcmUgdGhhbiB0aGUKK2xlbmd0aCBvZiBhIGxvbmdlc3QgcGF0aCBmcm9tIEEgdG8gYSByb290IGNvbW1pdC4gVGhlIHJlY3Vyc2l2ZSBkZWZpbml0aW9uCitpcyBlYXNpZXIgdG8gdXNlIGZvciBjb21wdXRhdGlvbiBhbmQgb2JzZXJ2aW5nIHRoZSBmb2xsb3dpbmcgcHJvcGVydHk6CisKKyAgICBJZiBBIGFuZCBCIGFyZSBjb21taXRzIHdpdGggZ2VuZXJhdGlvbiBudW1iZXJzIE4gYW5kIE0sIHJlc3BlY3RpdmVseSwKKyAgICBhbmQgTiA8PSBNLCB0aGVuIEEgY2Fubm90IHJlYWNoIEIuIFRoYXQgaXMsIHdlIGtub3cgd2l0aG91dCBzZWFyY2hpbmcKKyAgICB0aGF0IEIgaXMgbm90IGFuIGFuY2VzdG9yIG9mIEEgYmVjYXVzZSBpdCBpcyBmdXJ0aGVyIGZyb20gYSByb290IGNvbW1pdAorICAgIHRoYW4gQS4KKworICAgIENvbnZlcnNlbHksIHdoZW4gY2hlY2tpbmcgaWYgQSBpcyBhbiBhbmNlc3RvciBvZiBCLCB0aGVuIHdlIG9ubHkgbmVlZAorICAgIHRvIHdhbGsgY29tbWl0cyB1bnRpbCBhbGwgY29tbWl0cyBvbiB0aGUgd2FsayBib3VuZGFyeSBoYXZlIGdlbmVyYXRpb24KKyAgICBudW1iZXIgYXQgbW9zdCBOLiBJZiB3ZSB3YWxrIGNvbW1pdHMgdXNpbmcgYSBwcmlvcml0eSBxdWV1ZSBzZWVkZWQgYnkKKyAgICBnZW5lcmF0aW9uIG51bWJlcnMsIHRoZW4gd2UgYWx3YXlzIGV4cGFuZCB0aGUgYm91bmRhcnkgY29tbWl0IHdpdGggaGlnaGVzdAorICAgIGdlbmVyYXRpb24gbnVtYmVyIGFuZCBjYW4gZWFzaWx5IGRldGVjdCB0aGUgc3RvcHBpbmcgY29uZGl0aW9uLgorCitUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIHNpZ25pZmljYW50bHkgcmVkdWNlIHRoZSB0aW1lIGl0IHRha2VzIHRvCit3YWxrIGNvbW1pdHMgYW5kIGRldGVybWluZSB0b3BvbG9naWNhbCByZWxhdGlvbnNoaXBzLiBXaXRob3V0IGdlbmVyYXRpb24KK251bWJlcnMsIHRoZSBnZW5lcmFsIGhldXJpc3RpYyBpcyB0aGUgZm9sbG93aW5nOgorCisgICAgSWYgQSBhbmQgQiBhcmUgY29tbWl0cyB3aXRoIGNvbW1pdCB0aW1lIFggYW5kIFksIHJlc3BlY3RpdmVseSwgYW5kCisgICAgWCA8IFksIHRoZW4gQSBfcHJvYmFibHlfIGNhbm5vdCByZWFjaCBCLgorCitUaGlzIGhldXJpc3RpYyBpcyBjdXJyZW50bHkgdXNlZCB3aGVuZXZlciB0aGUgY29tcHV0YXRpb24gaXMgYWxsb3dlZCB0bwordmlvbGF0ZSB0b3BvbG9naWNhbCByZWxhdGlvbnNoaXBzIGR1ZSB0byBjbG9jayBza2V3IChzdWNoIGFzICJnaXQgbG9nIgord2l0aCBkZWZhdWx0IG9yZGVyKSwgYnV0IGlzIG5vdCB1c2VkIHdoZW4gdGhlIHRvcG9sb2dpY2FsIG9yZGVyIGlzCityZXF1aXJlZCAoc3VjaCBhcyBtZXJnZSBiYXNlIGNhbGN1bGF0aW9ucywgImdpdCBsb2cgLS1ncmFwaCIpLgorCitJbiBwcmFjdGljZSwgd2UgZXhwZWN0IHNvbWUgY29tbWl0cyB0byBiZSBjcmVhdGVkIHJlY2VudGx5IGFuZCBub3Qgc3RvcmVkCitpbiB0aGUgY29tbWl0IGdyYXBoLiBXZSBjYW4gdHJlYXQgdGhlc2UgY29tbWl0cyBhcyBoYXZpbmcgImluZmluaXRlIgorZ2VuZXJhdGlvbiBudW1iZXIgYW5kIHdhbGsgdW50aWwgcmVhY2hpbmcgY29tbWl0cyB3aXRoIGtub3duIGdlbmVyYXRpb24KK251bWJlci4KKworV2UgdXNlIHRoZSBtYWNybyBHRU5FUkFUSU9OX05VTUJFUl9JTkZJTklUWSA9IDB4RkZGRkZGRkYgdG8gbWFyayBjb21taXRzIG5vdAoraW4gdGhlIGNvbW1pdC1ncmFwaCBmaWxlLiBJZiBhIGNvbW1pdC1ncmFwaCBmaWxlIHdhcyB3cml0dGVuIGJ5IGEgdmVyc2lvbgorb2YgR2l0IHRoYXQgZGlkIG5vdCBjb21wdXRlIGdlbmVyYXRpb24gbnVtYmVycywgdGhlbiB0aG9zZSBjb21taXRzIHdpbGwKK2hhdmUgZ2VuZXJhdGlvbiBudW1iZXIgcmVwcmVzZW50ZWQgYnkgdGhlIG1hY3JvIEdFTkVSQVRJT05fTlVNQkVSX1pFUk8gPSAwLgorCitTaW5jZSB0aGUgY29tbWl0LWdyYXBoIGZpbGUgaXMgY2xvc2VkIHVuZGVyIHJlYWNoYWJpbGl0eSwgd2UgY2FuIGd1YXJhbnRlZQordGhlIGZvbGxvd2luZyB3ZWFrZXIgY29uZGl0aW9uIG9uIGFsbCBjb21taXRzOgorCisgICAgSWYgQSBhbmQgQiBhcmUgY29tbWl0cyB3aXRoIGdlbmVyYXRpb24gbnVtYmVycyBOIGFuZCBNLCByZXNwZWN0aXZlbHksCisgICAgYW5kIE4gPCBNLCB0aGVuIEEgY2Fubm90IHJlYWNoIEIuCisKK05vdGUgaG93IHRoZSBzdHJpY3QgaW5lcXVhbGl0eSBkaWZmZXJzIGZyb20gdGhlIGluZXF1YWxpdHkgd2hlbiB3ZSBoYXZlCitmdWxseS1jb21wdXRlZCBnZW5lcmF0aW9uIG51bWJlcnMuIFVzaW5nIHN0cmljdCBpbmVxdWFsaXR5IG1heSByZXN1bHQgaW4KK3dhbGtpbmcgYSBmZXcgZXh0cmEgY29tbWl0cywgYnV0IHRoZSBzaW1wbGljaXR5IGluIGRlYWxpbmcgd2l0aCBjb21taXRzCit3aXRoIGdlbmVyYXRpb24gbnVtYmVyICpfSU5GSU5JVFkgb3IgKl9aRVJPIGlzIHZhbHVhYmxlLgorCitXZSB1c2UgdGhlIG1hY3JvIEdFTkVSQVRJT05fTlVNQkVSX01BWCA9IDB4M0ZGRkZGRkYgdG8gZm9yIGNvbW1pdHMgd2hvc2UKK2dlbmVyYXRpb24gbnVtYmVycyBhcmUgY29tcHV0ZWQgdG8gYmUgYXQgbGVhc3QgdGhpcyB2YWx1ZS4gV2UgbGltaXQgYXQKK3RoaXMgdmFsdWUgc2luY2UgaXQgaXMgdGhlIGxhcmdlc3QgdmFsdWUgdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZQorY29tbWl0LWdyYXBoIGZpbGUgdXNpbmcgdGhlIDMwIGJpdHMgYXZhaWxhYmxlIHRvIGdlbmVyYXRpb24gbnVtYmVycy4gVGhpcworcHJlc2VudHMgYW5vdGhlciBjYXNlIHdoZXJlIGEgY29tbWl0IGNhbiBoYXZlIGdlbmVyYXRpb24gbnVtYmVyIGVxdWFsIHRvCit0aGF0IG9mIGEgcGFyZW50LgorCitEZXNpZ24gRGV0YWlscworLS0tLS0tLS0tLS0tLS0KKworLSBUaGUgY29tbWl0LWdyYXBoIGZpbGUgaXMgc3RvcmVkIGluIGEgZmlsZSBuYW1lZCAnY29tbWl0LWdyYXBoJyBpbiB0aGUKKyAgLmdpdC9vYmplY3RzL2luZm8gZGlyZWN0b3J5LiBUaGlzIGNvdWxkIGJlIHN0b3JlZCBpbiB0aGUgaW5mbyBkaXJlY3RvcnkKKyAgb2YgYW4gYWx0ZXJuYXRlLgorCistIFRoZSBjb3JlLmNvbW1pdEdyYXBoIGNvbmZpZyBzZXR0aW5nIG11c3QgYmUgb24gdG8gY29uc3VtZSBncmFwaCBmaWxlcy4KKworLSBUaGUgZmlsZSBmb3JtYXQgaW5jbHVkZXMgcGFyYW1ldGVycyBmb3IgdGhlIG9iamVjdCBJRCBoYXNoIGZ1bmN0aW9uLAorICBzbyBhIGZ1dHVyZSBjaGFuZ2Ugb2YgaGFzaCBhbGdvcml0aG0gZG9lcyBub3QgcmVxdWlyZSBhIGNoYW5nZSBpbiBmb3JtYXQuCisKKy0gQ29tbWl0IGdyYWZ0cyBhbmQgcmVwbGFjZSBvYmplY3RzIGNhbiBjaGFuZ2UgdGhlIHNoYXBlIG9mIHRoZSBjb21taXQKKyAgaGlzdG9yeS4gVGhlIGxhdHRlciBjYW4gYWxzbyBiZSBlbmFibGVkL2Rpc2FibGVkIG9uIHRoZSBmbHkgdXNpbmcKKyAgYC0tbm8tcmVwbGFjZS1vYmplY3RzYC4gVGhpcyBsZWFkcyB0byBkaWZmaWN1bHRseSBzdG9yaW5nIGJvdGggcG9zc2libGUKKyAgaW50ZXJwcmV0YXRpb25zIG9mIGEgY29tbWl0IGlkLCBlc3BlY2lhbGx5IHdoZW4gY29tcHV0aW5nIGdlbmVyYXRpb24KKyAgbnVtYmVycy4gVGhlIGNvbW1pdC1ncmFwaCB3aWxsIG5vdCBiZSByZWFkIG9yIHdyaXR0ZW4gd2hlbgorICByZXBsYWNlLW9iamVjdHMgb3IgZ3JhZnRzIGFyZSBwcmVzZW50LgorCistIFNoYWxsb3cgY2xvbmVzIGNyZWF0ZSBncmFmdHMgb2YgY29tbWl0cyBieSBkcm9wcGluZyB0aGVpciBwYXJlbnRzLiBUaGlzCisgIGxlYWRzIHRoZSBjb21taXQtZ3JhcGggdG8gdGhpbmsgdGhvc2UgY29tbWl0cyBoYXZlIGdlbmVyYXRpb24gbnVtYmVyIDEuCisgIElmIGFuZCB3aGVuIHRob3NlIGNvbW1pdHMgYXJlIG1hZGUgdW5zaGFsbG93LCB0aG9zZSBnZW5lcmF0aW9uIG51bWJlcnMKKyAgYmVjb21lIGludmFsaWQuIFNpbmNlIHNoYWxsb3cgY2xvbmVzIGFyZSBpbnRlbmRlZCB0byByZXN0cmljdCB0aGUgY29tbWl0CisgIGhpc3RvcnkgdG8gYSB2ZXJ5IHNtYWxsIHNldCBvZiBjb21taXRzLCB0aGUgY29tbWl0LWdyYXBoIGZlYXR1cmUgaXMgbGVzcworICBoZWxwZnVsIGZvciB0aGVzZSBjbG9uZXMsIGFueXdheS4gVGhlIGNvbW1pdC1ncmFwaCB3aWxsIG5vdCBiZSByZWFkIG9yCisgIHdyaXR0ZW4gd2hlbiBzaGFsbG93IGNvbW1pdHMgYXJlIHByZXNlbnQuCisKK0NvbW1pdCBHcmFwaHMgQ2hhaW5zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUeXBpY2FsbHksIHJlcG9zIGdyb3cgd2l0aCBuZWFyLWNvbnN0YW50IHZlbG9jaXR5IChjb21taXRzIHBlciBkYXkpLiBPdmVyIHRpbWUsCit0aGUgbnVtYmVyIG9mIGNvbW1pdHMgYWRkZWQgYnkgYSBmZXRjaCBvcGVyYXRpb24gaXMgbXVjaCBzbWFsbGVyIHRoYW4gdGhlCitudW1iZXIgb2YgY29tbWl0cyBpbiB0aGUgZnVsbCBoaXN0b3J5LiBCeSBjcmVhdGluZyBhICJjaGFpbiIgb2YgY29tbWl0LWdyYXBocywKK3dlIGVuYWJsZSBmYXN0IHdyaXRlcyBvZiBuZXcgY29tbWl0IGRhdGEgd2l0aG91dCByZXdyaXRpbmcgdGhlIGVudGlyZSBjb21taXQKK2hpc3RvcnkgLS0gYXQgbGVhc3QsIG1vc3Qgb2YgdGhlIHRpbWUuCisKKyMjIEZpbGUgTGF5b3V0CisKK0EgY29tbWl0LWdyYXBoIGNoYWluIHVzZXMgbXVsdGlwbGUgZmlsZXMsIGFuZCB3ZSB1c2UgYSBmaXhlZCBuYW1pbmcgY29udmVudGlvbgordG8gb3JnYW5pemUgdGhlc2UgZmlsZXMuIEVhY2ggY29tbWl0LWdyYXBoIGZpbGUgaGFzIGEgbmFtZQorYCRPQkpESVIvaW5mby9jb21taXQtZ3JhcGhzL2dyYXBoLXtoYXNofS5ncmFwaGAgd2hlcmUgYHtoYXNofWAgaXMgdGhlIGhleC0KK3ZhbHVlZCBoYXNoIHN0b3JlZCBpbiB0aGUgZm9vdGVyIG9mIHRoYXQgZmlsZSAod2hpY2ggaXMgYSBoYXNoIG9mIHRoZSBmaWxlJ3MKK2NvbnRlbnRzIGJlZm9yZSB0aGF0IGhhc2gpLiBGb3IgYSBjaGFpbiBvZiBjb21taXQtZ3JhcGggZmlsZXMsIGEgcGxhaW4tdGV4dAorZmlsZSBhdCBgJE9CSkRJUi9pbmZvL2NvbW1pdC1ncmFwaHMvY29tbWl0LWdyYXBoLWNoYWluYCBjb250YWlucyB0aGUKK2hhc2hlcyBmb3IgdGhlIGZpbGVzIGluIG9yZGVyIGZyb20gImxvd2VzdCIgdG8gImhpZ2hlc3QiLgorCitGb3IgZXhhbXBsZSwgaWYgdGhlIGBjb21taXQtZ3JhcGgtY2hhaW5gIGZpbGUgY29udGFpbnMgdGhlIGxpbmVzCisKK2BgYAorCXtoYXNoMH0KKwl7aGFzaDF9CisJe2hhc2gyfQorYGBgCisKK3RoZW4gdGhlIGNvbW1pdC1ncmFwaCBjaGFpbiBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgZGlhZ3JhbToKKworICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8ICBncmFwaC17aGFzaDJ9LmdyYXBoICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgfCAgZ3JhcGgte2hhc2gxfS5ncmFwaCAgfAorIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgIGdyYXBoLXtoYXNoMH0uZ3JhcGggIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK0xldCBYMCBiZSB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgaW4gYGdyYXBoLXtoYXNoMH0uZ3JhcGhgLCBYMSBiZSB0aGUgbnVtYmVyIG9mCitjb21taXRzIGluIGBncmFwaC17aGFzaDF9LmdyYXBoYCwgYW5kIFgyIGJlIHRoZSBudW1iZXIgb2YgY29tbWl0cyBpbgorYGdyYXBoLXtoYXNoMn0uZ3JhcGhgLiBJZiBhIGNvbW1pdCBhcHBlYXJzIGluIHBvc2l0aW9uIGkgaW4gYGdyYXBoLXtoYXNoMn0uZ3JhcGhgLAordGhlbiB3ZSBpbnRlcnByZXQgdGhpcyBhcyBiZWluZyB0aGUgY29tbWl0IGluIHBvc2l0aW9uIChYMCArIFgxICsgaSksIGFuZCB0aGF0Cit3aWxsIGJlIHVzZWQgYXMgaXRzICJncmFwaCBwb3NpdGlvbiIuIFRoZSBjb21taXRzIGluIGBncmFwaC17aGFzaDJ9LmdyYXBoYCB1c2UgdGhlc2UKK3Bvc2l0aW9ucyB0byByZWZlciB0byB0aGVpciBwYXJlbnRzLCB3aGljaCBtYXkgYmUgaW4gYGdyYXBoLXtoYXNoMX0uZ3JhcGhgIG9yCitgZ3JhcGgte2hhc2gwfS5ncmFwaGAuIFdlIGNhbiBuYXZpZ2F0ZSB0byBhbiBhcmJpdHJhcnkgY29tbWl0IGluIHBvc2l0aW9uIGogYnkgY2hlY2tpbmcKK2l0cyBjb250YWlubWVudCBpbiB0aGUgaW50ZXJ2YWxzIFswLCBYMCksIFtYMCwgWDAgKyBYMSksIFtYMCArIFgxLCBYMCArIFgxICsKK1gyKS4KKworRWFjaCBjb21taXQtZ3JhcGggZmlsZSAoZXhjZXB0IHRoZSBiYXNlLCBgZ3JhcGgte2hhc2gwfS5ncmFwaGApIGNvbnRhaW5zIGRhdGEKK3NwZWNpZnlpbmcgdGhlIGhhc2hlcyBvZiBhbGwgZmlsZXMgaW4gdGhlIGxvd2VyIGxheWVycy4gSW4gdGhlIGFib3ZlIGV4YW1wbGUsCitgZ3JhcGgte2hhc2gxfS5ncmFwaGAgY29udGFpbnMgYHtoYXNoMH1gIHdoaWxlIGBncmFwaC17aGFzaDJ9LmdyYXBoYCBjb250YWlucworYHtoYXNoMH1gIGFuZCBge2hhc2gxfWAuCisKKyMjIE1lcmdpbmcgY29tbWl0LWdyYXBoIGZpbGVzCisKK0lmIHdlIG9ubHkgYWRkZWQgYSBuZXcgY29tbWl0LWdyYXBoIGZpbGUgb24gZXZlcnkgd3JpdGUsIHdlIHdvdWxkIHJ1biBpbnRvIGEKK2xpbmVhciBzZWFyY2ggcHJvYmxlbSB0aHJvdWdoIG1hbnkgY29tbWl0LWdyYXBoIGZpbGVzLiAgSW5zdGVhZCwgd2UgdXNlIGEgbWVyZ2UKK3N0cmF0ZWd5IHRvIGRlY2lkZSB3aGVuIHRoZSBzdGFjayBzaG91bGQgY29sbGFwc2Ugc29tZSBudW1iZXIgb2YgbGV2ZWxzLgorCitUaGUgZGlhZ3JhbSBiZWxvdyBzaG93cyBzdWNoIGEgY29sbGFwc2UuIEFzIGEgc2V0IG9mIG5ldyBjb21taXRzIGFyZSBhZGRlZCwgaXQKK2lzIGRldGVybWluZWQgYnkgdGhlIG1lcmdlIHN0cmF0ZWd5IHRoYXQgdGhlIGZpbGVzIHNob3VsZCBjb2xsYXBzZSB0bworYGdyYXBoLXtoYXNoMX1gLiBUaHVzLCB0aGUgbmV3IGNvbW1pdHMsIHRoZSBjb21taXRzIGluIGBncmFwaC17aGFzaDJ9YCBhbmQKK3RoZSBjb21taXRzIGluIGBncmFwaC17aGFzaDF9YCBzaG91bGQgYmUgY29tYmluZWQgaW50byBhIG5ldyBgZ3JhcGgte2hhc2gzfWAKK2ZpbGUuCisKKwkJCSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQkJICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisJCQkgICAgfCAgICAobmV3IGNvbW1pdHMpICAgIHwKKwkJCSAgICB8ICAgICAgICAgICAgICAgICAgICAgfAorCQkJICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCQkgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIHwgIGdyYXBoLXtoYXNoMn0gfC0+fCAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIHwgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICB8CisgfCAgZ3JhcGgte2hhc2gxfSB8LT58ICAgICAgICAgICAgICAgICAgICAgfAorIHwgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgIHwgICAgICAgICAgICAgICAgICB0bXBfZ3JhcGhYWFgKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgfCAgZ3JhcGgte2hhc2gwfSB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitEdXJpbmcgdGhpcyBwcm9jZXNzLCB0aGUgY29tbWl0cyB0byB3cml0ZSBhcmUgY29tYmluZWQsIHNvcnRlZCBhbmQgd2Ugd3JpdGUgdGhlCitjb250ZW50cyB0byBhIHRlbXBvcmFyeSBmaWxlLCBhbGwgd2hpbGUgaG9sZGluZyBhIGBjb21taXQtZ3JhcGgtY2hhaW4ubG9ja2AKK2xvY2stZmlsZS4gIFdoZW4gdGhlIGZpbGUgaXMgZmx1c2hlZCwgd2UgcmVuYW1lIGl0IHRvIGBncmFwaC17aGFzaDN9YAorYWNjb3JkaW5nIHRvIHRoZSBjb21wdXRlZCBge2hhc2gzfWAuIEZpbmFsbHksIHdlIHdyaXRlIHRoZSBuZXcgY2hhaW4gZGF0YSB0bworYGNvbW1pdC1ncmFwaC1jaGFpbi5sb2NrYDoKKworYGBgCisJe2hhc2gzfQorCXtoYXNoMH0KK2BgYAorCitXZSB0aGVuIGNsb3NlIHRoZSBsb2NrLWZpbGUuCisKKyMjIE1lcmdlIFN0cmF0ZWd5CisKK1doZW4gd3JpdGluZyBhIHNldCBvZiBjb21taXRzIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSBjb21taXQtZ3JhcGggc3RhY2sgb2YKK2hlaWdodCBOLCB3ZSBkZWZhdWx0IHRvIGNyZWF0aW5nIGEgbmV3IGZpbGUgYXQgbGV2ZWwgTiArIDEuIFdlIHRoZW4gZGVjaWRlIHRvCittZXJnZSB3aXRoIHRoZSBOdGggbGV2ZWwgaWYgb25lIG9mIHR3byBjb25kaXRpb25zIGhvbGQ6CisKKyAgMS4gYC0tc2l6ZS1tdWx0aXBsZT08WD5gIGlzIHNwZWNpZmllZCBvciBYID0gMiwgYW5kIHRoZSBudW1iZXIgb2YgY29tbWl0cyBpbgorICAgICBsZXZlbCBOIGlzIGxlc3MgdGhhbiBYIHRpbWVzIHRoZSBudW1iZXIgb2YgY29tbWl0cyBpbiBsZXZlbCBOICsgMS4KKworICAyLiBgLS1tYXgtY29tbWl0cz08Qz5gIGlzIHNwZWNpZmllZCB3aXRoIG5vbi16ZXJvIEMgYW5kIHRoZSBudW1iZXIgb2YgY29tbWl0cworICAgICBpbiBsZXZlbCBOICsgMSBpcyBtb3JlIHRoYW4gQyBjb21taXRzLgorCitUaGlzIGRlY2lzaW9uIGNhc2NhZGVzIGRvd24gdGhlIGxldmVsczogd2hlbiB3ZSBtZXJnZSBhIGxldmVsIHdlIGNyZWF0ZSBhIG5ldworc2V0IG9mIGNvbW1pdHMgdGhhdCB0aGVuIGNvbXBhcmVzIHRvIHRoZSBuZXh0IGxldmVsLgorCitUaGUgZmlyc3QgY29uZGl0aW9uIGJvdW5kcyB0aGUgbnVtYmVyIG9mIGxldmVscyB0byBiZSBsb2dhcml0aG1pYyBpbiB0aGUgdG90YWwKK251bWJlciBvZiBjb21taXRzLiAgVGhlIHNlY29uZCBjb25kaXRpb24gYm91bmRzIHRoZSB0b3RhbCBudW1iZXIgb2YgY29tbWl0cyBpbgorYSBgZ3JhcGgte2hhc2hOfWAgZmlsZSBhbmQgbm90IGluIHRoZSBgY29tbWl0LWdyYXBoYCBmaWxlLCBwcmV2ZW50aW5nCitzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpc3N1ZXMgd2hlbiB0aGUgc3RhY2sgbWVyZ2VzIGFuZCBhbm90aGVyIHByb2Nlc3Mgb25seQorcGFydGlhbGx5IHJlYWRzIHRoZSBwcmV2aW91cyBzdGFjay4KKworVGhlIG1lcmdlIHN0cmF0ZWd5IHZhbHVlcyAoMiBmb3IgdGhlIHNpemUgbXVsdGlwbGUsIDY0LDAwMCBmb3IgdGhlIG1heGltdW0KK251bWJlciBvZiBjb21taXRzKSBjb3VsZCBiZSBleHRyYWN0ZWQgaW50byBjb25maWcgc2V0dGluZ3MgZm9yIGZ1bGwKK2ZsZXhpYmlsaXR5LgorCisjIyBEZWxldGluZyBncmFwaC17aGFzaH0gZmlsZXMKKworQWZ0ZXIgYSBuZXcgdGlwIGZpbGUgaXMgd3JpdHRlbiwgc29tZSBgZ3JhcGgte2hhc2h9YCBmaWxlcyBtYXkgbm8gbG9uZ2VyCitiZSBwYXJ0IG9mIGEgY2hhaW4uIEl0IGlzIGltcG9ydGFudCB0byByZW1vdmUgdGhlc2UgZmlsZXMgZnJvbSBkaXNrLCBldmVudHVhbGx5LgorVGhlIG1haW4gcmVhc29uIHRvIGRlbGF5IHJlbW92YWwgaXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgY291bGQgcmVhZCB0aGUKK2Bjb21taXQtZ3JhcGgtY2hhaW5gIGZpbGUgYmVmb3JlIGl0IGlzIHJld3JpdHRlbiwgYnV0IHRoZW4gbG9vayBmb3IgdGhlCitgZ3JhcGgte2hhc2h9YCBmaWxlcyBhZnRlciB0aGV5IGFyZSBkZWxldGVkLgorCitUbyBhbGxvdyBob2xkaW5nIG9sZCBzcGxpdCBjb21taXQtZ3JhcGhzIGZvciBhIHdoaWxlIGFmdGVyIHRoZXkgYXJlIHVucmVmZXJlbmNlZCwKK3dlIHVwZGF0ZSB0aGUgbW9kaWZpZWQgdGltZXMgb2YgdGhlIGZpbGVzIHdoZW4gdGhleSBiZWNvbWUgdW5yZWZlcmVuY2VkLiBUaGVuLAord2Ugc2NhbiB0aGUgYCRPQkpESVIvaW5mby9jb21taXQtZ3JhcGhzL2AgZGlyZWN0b3J5IGZvciBgZ3JhcGgte2hhc2h9YAorZmlsZXMgd2hvc2UgbW9kaWZpZWQgdGltZXMgYXJlIG9sZGVyIHRoYW4gYSBnaXZlbiBleHBpcnkgd2luZG93LiBUaGlzIHdpbmRvdworZGVmYXVsdHMgdG8gemVybywgYnV0IGNhbiBiZSBjaGFuZ2VkIHVzaW5nIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgb3IgYSBjb25maWcKK3NldHRpbmcuCisKKyMjIENoYWlucyBhY3Jvc3MgbXVsdGlwbGUgb2JqZWN0IGRpcmVjdG9yaWVzCisKK0luIGEgcmVwbyB3aXRoIGFsdGVybmF0ZXMsIHdlIGxvb2sgZm9yIHRoZSBgY29tbWl0LWdyYXBoLWNoYWluYCBmaWxlIHN0YXJ0aW5nCitpbiB0aGUgbG9jYWwgb2JqZWN0IGRpcmVjdG9yeSBhbmQgdGhlbiBpbiBlYWNoIGFsdGVybmF0ZS4gVGhlIGZpcnN0IGZpbGUgdGhhdAorZXhpc3RzIGRlZmluZXMgb3VyIGNoYWluLiBBcyB3ZSBsb29rIGZvciB0aGUgYGdyYXBoLXtoYXNofWAgZmlsZXMgZm9yCitlYWNoIGB7aGFzaH1gIGluIHRoZSBjaGFpbiBmaWxlLCB3ZSBmb2xsb3cgdGhlIHNhbWUgcGF0dGVybiBmb3IgdGhlIGhvc3QKK2RpcmVjdG9yaWVzLgorCitUaGlzIGFsbG93cyBjb21taXQtZ3JhcGhzIHRvIGJlIHNwbGl0IGFjcm9zcyBtdWx0aXBsZSBmb3JrcyBpbiBhIGZvcmsgbmV0d29yay4KK1RoZSB0eXBpY2FsIGNhc2UgaXMgYSBsYXJnZSAiYmFzZSIgcmVwbyB3aXRoIG1hbnkgc21hbGxlciBmb3Jrcy4KKworQXMgdGhlIGJhc2UgcmVwbyBhZHZhbmNlcywgaXQgd2lsbCBsaWtlbHkgdXBkYXRlIGFuZCBtZXJnZSBpdHMgY29tbWl0LWdyYXBoCitjaGFpbiBtb3JlIGZyZXF1ZW50bHkgdGhhbiB0aGUgZm9ya3MuIElmIGEgZm9yayB1cGRhdGVzIHRoZWlyIGNvbW1pdC1ncmFwaCBhZnRlcgordGhlIGJhc2UgcmVwbywgdGhlbiBpdCBzaG91bGQgInJlcGFyZW50IiB0aGUgY29tbWl0LWdyYXBoIGNoYWluIG9udG8gdGhlIG5ldworY2hhaW4gaW4gdGhlIGJhc2UgcmVwby4gV2hlbiByZWFkaW5nIGVhY2ggYGdyYXBoLXtoYXNofWAgZmlsZSwgd2UgdHJhY2sKK3RoZSBvYmplY3QgZGlyZWN0b3J5IGNvbnRhaW5pbmcgaXQuIER1cmluZyBhIHdyaXRlIG9mIGEgbmV3IGNvbW1pdC1ncmFwaCBmaWxlLAord2UgY2hlY2sgZm9yIGFueSBjaGFuZ2VzIGluIHRoZSBzb3VyY2Ugb2JqZWN0IGRpcmVjdG9yeSBhbmQgcmVhZCB0aGUKK2Bjb21taXQtZ3JhcGgtY2hhaW5gIGZpbGUgZm9yIHRoYXQgc291cmNlIGFuZCBjcmVhdGUgYSBuZXcgZmlsZSBiYXNlZCBvbiB0aG9zZQorZmlsZXMuIER1cmluZyB0aGlzICJyZXBhcmVudCIgb3BlcmF0aW9uLCB3ZSBuZWNlc3NhcmlseSBuZWVkIHRvIGNvbGxhcHNlIGFsbAorbGV2ZWxzIGluIHRoZSBmb3JrLCBhcyBhbGwgb2YgdGhlIGZpbGVzIGFyZSBpbnZhbGlkIGFnYWluc3QgdGhlIG5ldyBiYXNlIGZpbGUuCisKK0l0IGlzIGNydWNpYWwgdG8gYmUgY2FyZWZ1bCB3aGVuIGNsZWFuaW5nIHVwICJ1bnJlZmVyZW5jZWQiIGBncmFwaC17aGFzaH0uZ3JhcGhgCitmaWxlcyBpbiB0aGlzIHNjZW5hcmlvLiBJdCBmYWxscyB0byB0aGUgdXNlciB0byBkZWZpbmUgdGhlIHByb3BlciBzZXR0aW5ncyBmb3IKK3RoZWlyIGN1c3RvbSBlbnZpcm9ubWVudDoKKworIDEuIFdoZW4gbWVyZ2luZyBsZXZlbHMgaW4gdGhlIGJhc2UgcmVwbywgdGhlIHVucmVmZXJlbmNlZCBmaWxlcyBtYXkgc3RpbGwgYmUKKyAgICByZWZlcmVuY2VkIGJ5IGNoYWlucyBmcm9tIGZvcmsgcmVwb3MuCisKKyAyLiBUaGUgZXhwaXJ5IHRpbWUgc2hvdWxkIGJlIHNldCB0byBhIGxlbmd0aCBvZiB0aW1lIHN1Y2ggdGhhdCBldmVyeSBmb3JrIGhhcworICAgIHRpbWUgdG8gcmVjb21wdXRlIHRoZWlyIGNvbW1pdC1ncmFwaCBjaGFpbiB0byAicmVwYXJlbnQiIG9udG8gdGhlIG5ldyBiYXNlCisgICAgZmlsZShzKS4KKworIDMuIElmIHRoZSBjb21taXQtZ3JhcGggY2hhaW4gaXMgdXBkYXRlZCBpbiB0aGUgYmFzZSwgdGhlIGZvcmsgd2lsbCBub3QgaGF2ZQorICAgIGFjY2VzcyB0byB0aGUgbmV3IGNoYWluIHVudGlsIGl0cyBjaGFpbiBpcyB1cGRhdGVkIHRvIHJlZmVyZW5jZSB0aG9zZSBmaWxlcy4KKyAgICAoVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUgWzVdLikKKworUmVsYXRlZCBMaW5rcworLS0tLS0tLS0tLS0tLQorWzBdIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9naXQvaXNzdWVzL2RldGFpbD9pZD04CisgICAgQ2hyb21pdW0gd29yayBpdGVtIGZvcjogU2VyaWFsaXplZCBDb21taXQgR3JhcGgKKworWzFdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDExMDcxMzA3MDUxNy5HQzE4NTY2QHNpZ2lsbC5pbnRyYS5wZWZmLm5ldC8KKyAgICBBbiBhYmFuZG9uZWQgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VkIGdlbmVyYXRpb24gbnVtYmVycy4KKworWzJdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDE3MDkwODAzMzQwMy5xN2U2ZGo3YmVuYXNyamVzQHNpZ2lsbC5pbnRyYS5wZWZmLm5ldC8KKyAgICBEaXNjdXNzaW9uIGFib3V0IGdlbmVyYXRpb24gbnVtYmVycyBvbiBjb21taXRzIGFuZCBob3cgdGhleSBpbnRlcmFjdAorICAgIHdpdGggZnNjay4KKworWzNdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDE3MDkwODAzNDczOS40b3AzdzRmMm1hNXM2NWt1QHNpZ2lsbC5pbnRyYS5wZWZmLm5ldC8KKyAgICBNb3JlIGRpc2N1c3Npb24gYWJvdXQgZ2VuZXJhdGlvbiBudW1iZXJzIGFuZCBub3Qgc3RvcmluZyB0aGVtIGluc2lkZQorICAgIGNvbW1pdCBvYmplY3RzLiBBIHZhbHVhYmxlIHF1b3RlOgorCisgICAgIkkgdGhpbmsgd2Ugc2hvdWxkIGJlIG1vdmluZyBtb3JlIGluIHRoZSBkaXJlY3Rpb24gb2Yga2VlcGluZworICAgICByZXBvLWxvY2FsIGNhY2hlcyBmb3Igb3B0aW1pemF0aW9ucy4gUmVhY2hhYmlsaXR5IGJpdG1hcHMgaGF2ZSBiZWVuCisgICAgIGEgYmlnIHBlcmZvcm1hbmNlIHdpbi4gSSB0aGluayB3ZSBzaG91bGQgYmUgZG9pbmcgdGhlIHNhbWUgd2l0aCBvdXIKKyAgICAgcHJvcGVydGllcyBvZiBjb21taXRzLiBOb3QganVzdCBnZW5lcmF0aW9uIG51bWJlcnMsIGJ1dCBtYWtpbmcgaXQKKyAgICAgY2hlYXAgdG8gYWNjZXNzIHRoZSBncmFwaCBzdHJ1Y3R1cmUgd2l0aG91dCB6bGliLWluZmxhdGluZyB3aG9sZQorICAgICBjb21taXQgb2JqZWN0cyAoaS5lLiwgcGFja3Y0IG9yIHNvbWV0aGluZyBsaWtlIHRoZSAibWV0YXBhY2tzIiBJCisgICAgIHByb3Bvc2VkIGEgZmV3IHllYXJzIGFnbykuIgorCitbNF0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTgwMTA4MTU0ODIyLjU0ODI5LTEtZ2l0QGplZmZob3N0ZXRsZXIuY29tL1QvI3UKKyAgICBBIHBhdGNoIHRvIHJlbW92ZSB0aGUgYWhlYWQtYmVoaW5kIGNhbGN1bGF0aW9uIGZyb20gJ3N0YXR1cycuCisKK1s1XSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvZjI3ZGIyODEtYWJhZC01MDQzLTZkNzEtY2JiMDgzYjFjODc3QGdtYWlsLmNvbS8KKyAgICBBIGRpc2N1c3Npb24gb2YgYSAidHdvLWRpbWVuc2lvbmFsIGdyYXBoIHBvc2l0aW9uIiB0aGF0IGNhbiBhbGxvdyByZWFkaW5nCisgICAgbXVsdGlwbGUgY29tbWl0LWdyYXBoIGNoYWlucyBhdCB0aGUgc2FtZSB0aW1lLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvZGlyZWN0b3J5LXJlbmFtZS1kZXRlY3Rpb24udHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvZGlyZWN0b3J5LXJlbmFtZS1kZXRlY3Rpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NDYyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9kaXJlY3RvcnktcmVuYW1lLWRldGVjdGlvbi50eHQKQEAgLTAsMCArMSwxMTUgQEAKK0RpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZW5hbWUgZGV0ZWN0aW9uIGxvZ2ljIGluIGRpZmZjb3JlLXJlbmFtZSB0aGF0IGNoZWNrcyBmb3IgcmVuYW1lcyBvZgoraW5kaXZpZHVhbCBmaWxlcyBpcyBhZ2dyZWdhdGVkIGFuZCBhbmFseXplZCBpbiBtZXJnZS1yZWN1cnNpdmUgZm9yIGNhc2VzCit3aGVyZSBjb21iaW5hdGlvbnMgb2YgcmVuYW1lcyBpbmRpY2F0ZSB0aGF0IGEgZnVsbCBkaXJlY3RvcnkgaGFzIGJlZW4KK3JlbmFtZWQuCisKK1Njb3BlIG9mIGFiaWxpdGllcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IGlzIHBlcmhhcHMgZWFzaWVzdCB0byBzdGFydCB3aXRoIGFuIGV4YW1wbGU6CisKKyAgKiBXaGVuIGFsbCBvZiB4L2EsIHgvYiBhbmQgeC9jIGhhdmUgbW92ZWQgdG8gei9hLCB6L2IgYW5kIHovYywgaXQgaXMKKyAgICBsaWtlbHkgdGhhdCB4L2QgYWRkZWQgaW4gdGhlIG1lYW50aW1lIHdvdWxkIGFsc28gd2FudCB0byBtb3ZlIHRvIHovZCBieQorICAgIHRha2luZyB0aGUgaGludCB0aGF0IHRoZSBlbnRpcmUgZGlyZWN0b3J5ICd4JyBtb3ZlZCB0byAneicuCisKK01vcmUgaW50ZXJlc3RpbmcgcG9zc2liaWxpdGllcyBleGlzdCwgdGhvdWdoLCBzdWNoIGFzOgorCisgICogb25lIHNpZGUgb2YgaGlzdG9yeSByZW5hbWVzIHggLT4geiwgYW5kIHRoZSBvdGhlciByZW5hbWVzIHNvbWUgZmlsZSB0bworICAgIHgvZSwgY2F1c2luZyB0aGUgbmVlZCBmb3IgdGhlIG1lcmdlIHRvIGRvIGEgdHJhbnNpdGl2ZSByZW5hbWUuCisKKyAgKiBvbmUgc2lkZSBvZiBoaXN0b3J5IHJlbmFtZXMgeCAtPiB6LCBidXQgYWxzbyByZW5hbWVzIGFsbCBmaWxlcyB3aXRoaW4geC4KKyAgICBGb3IgZXhhbXBsZSwgeC9hIC0+IHovYWxwaGEsIHgvYiAtPiB6L2JyYXZvLCBldGMuCisKKyAgKiBib3RoICd4JyBhbmQgJ3knIGJlaW5nIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGRpcmVjdG9yeSAneicsIHdpdGggYQorICAgIGRpcmVjdG9yeSByZW5hbWUgYmVpbmcgZGV0ZWN0ZWQgZm9yIGJvdGggeC0+eiBhbmQgeS0+ei4KKworICAqIG5vdCBhbGwgZmlsZXMgaW4gYSBkaXJlY3RvcnkgYmVpbmcgcmVuYW1lZCB0byB0aGUgc2FtZSBsb2NhdGlvbjsKKyAgICBpLmUuIHBlcmhhcHMgbW9zdCB0aGUgZmlsZXMgaW4gJ3gnIGFyZSBub3cgZm91bmQgdW5kZXIgJ3onLCBidXQgYSBmZXcKKyAgICBhcmUgZm91bmQgdW5kZXIgJ3cnLgorCisgICogYSBkaXJlY3RvcnkgYmVpbmcgcmVuYW1lZCwgd2hpY2ggYWxzbyBjb250YWluZWQgYSBzdWJkaXJlY3RvcnkgdGhhdCB3YXMKKyAgICByZW5hbWVkIHRvIHNvbWUgZW50aXJlbHkgZGlmZmVyZW50IGxvY2F0aW9uLiAgKEFuZCBwZXJoYXBzIHRoZSBpbm5lcgorICAgIGRpcmVjdG9yeSBpdHNlbGYgY29udGFpbmVkIGlubmVyIGRpcmVjdG9yaWVzIHRoYXQgd2VyZSByZW5hbWVkIHRvIHlldAorICAgIG90aGVyIGxvY2F0aW9ucykuCisKKyAgKiBjb21iaW5hdGlvbnMgb2YgdGhlIGFib3ZlOyBzZWUgdC90NjA0My1tZXJnZS1yZW5hbWUtZGlyZWN0b3JpZXMuc2ggZm9yCisgICAgdmFyaW91cyBpbnRlcmVzdGluZyBjYXNlcy4KKworTGltaXRhdGlvbnMgLS0gYXBwbGljYWJpbGl0eSBvZiBkaXJlY3RvcnkgcmVuYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBvcmRlciB0byBwcmV2ZW50IGVkZ2UgYW5kIGNvcm5lciBjYXNlcyByZXN1bHRpbmcgaW4gZWl0aGVyIGNvbmZsaWN0cwordGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gdGhlIGluZGV4IG9yIHdoaWNoIG1pZ2h0IGJlIHRvbyBjb21wbGV4IGZvcgordXNlcnMgdG8gdHJ5IHRvIHVuZGVyc3RhbmQgYW5kIHJlc29sdmUsIGEgY291cGxlIGJhc2ljIHJ1bGVzIGxpbWl0IHdoZW4KK2RpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGFwcGxpZXM6CisKKyAgMSkgSWYgYSBnaXZlbiBkaXJlY3Rvcnkgc3RpbGwgZXhpc3RzIG9uIGJvdGggc2lkZXMgb2YgYSBtZXJnZSwgd2UgZG8KKyAgICAgbm90IGNvbnNpZGVyIGl0IHRvIGhhdmUgYmVlbiByZW5hbWVkLgorCisgIDIpIElmIGEgc3Vic2V0IG9mIHRvLWJlLXJlbmFtZWQgZmlsZXMgaGF2ZSBhIGZpbGUgb3IgZGlyZWN0b3J5IGluIHRoZQorICAgICB3YXkgKG9yIHdvdWxkIGJlIGluIHRoZSB3YXkgb2YgZWFjaCBvdGhlciksICJ0dXJuIG9mZiIgdGhlIGRpcmVjdG9yeQorICAgICByZW5hbWUgZm9yIHRob3NlIHNwZWNpZmljIHN1Yi1wYXRocyBhbmQgcmVwb3J0IHRoZSBjb25mbGljdCB0byB0aGUKKyAgICAgdXNlci4KKworICAzKSBJZiB0aGUgb3RoZXIgc2lkZSBvZiBoaXN0b3J5IGRpZCBhIGRpcmVjdG9yeSByZW5hbWUgdG8gYSBwYXRoIHRoYXQKKyAgICAgeW91ciBzaWRlIG9mIGhpc3RvcnkgcmVuYW1lZCBhd2F5LCB0aGVuIGlnbm9yZSB0aGF0IHBhcnRpY3VsYXIKKyAgICAgcmVuYW1lIGZyb20gdGhlIG90aGVyIHNpZGUgb2YgaGlzdG9yeSBmb3IgYW55IGltcGxpY2l0IGRpcmVjdG9yeQorICAgICByZW5hbWVzIChidXQgd2FybiB0aGUgdXNlcikuCisKK0xpbWl0YXRpb25zIC0tIGRldGFpbGVkIHJ1bGVzIGFuZCB0ZXN0Y2FzZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordC90NjA0My1tZXJnZS1yZW5hbWUtZGlyZWN0b3JpZXMuc2ggY29udGFpbnMgZXh0ZW5zaXZlIHRlc3RzIGFuZCBjb21tZW50YXJ5Cit3aGljaCBnZW5lcmF0ZSBhbmQgZXhwbG9yZSB0aGUgcnVsZXMgbGlzdGVkIGFib3ZlLiAgSXQgYWxzbyBsaXN0cyBhIGZldworYWRkaXRpb25hbCBydWxlczoKKworICBhKSBJZiByZW5hbWVzIHNwbGl0IGEgZGlyZWN0b3J5IGludG8gdHdvIG9yIG1vcmUgb3RoZXJzLCB0aGUgZGlyZWN0b3J5CisgICAgIHdpdGggdGhlIG1vc3QgcmVuYW1lcywgIndpbnMiLgorCisgIGIpIEF2b2lkIGRpcmVjdG9yeS1yZW5hbWUtZGV0ZWN0aW9uIGZvciBhIHBhdGgsIGlmIHRoYXQgcGF0aCBpcyB0aGUKKyAgICAgc291cmNlIG9mIGEgcmVuYW1lIG9uIGVpdGhlciBzaWRlIG9mIGEgbWVyZ2UuCisKKyAgYykgT25seSBhcHBseSBpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lcyB0byBkaXJlY3RvcmllcyBpZiB0aGUgb3RoZXIgc2lkZQorICAgICBvZiBoaXN0b3J5IGlzIHRoZSBvbmUgZG9pbmcgdGhlIHJlbmFtaW5nLgorCitMaW1pdGF0aW9ucyAtLSBzdXBwb3J0IGluIGRpZmZlcmVudCBjb21tYW5kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gaXMgc3VwcG9ydGVkIGJ5ICdtZXJnZScgYW5kICdjaGVycnktcGljaycuCitPdGhlciBnaXQgY29tbWFuZHMgd2hpY2ggdXNlcnMgbWlnaHQgYmUgc3VycHJpc2VkIHRvIHNlZSBsaW1pdGVkIG9yIG5vCitkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBzdXBwb3J0IGluOgorCisgICogZGlmZgorCisgICAgRm9sa3MgaGF2ZSByZXF1ZXN0ZWQgaW4gdGhlIHBhc3QgdGhhdCBgZ2l0IGRpZmZgIGRldGVjdCBkaXJlY3RvcnkKKyAgICByZW5hbWVzIGFuZCBzb21laG93IHNpbXBsaWZ5IGl0cyBvdXRwdXQuICBJdCBpcyBub3QgY2xlYXIgd2hldGhlciB0aGlzCisgICAgd291bGQgYmUgZGVzaXJhYmxlIG9yIGhvdyB0aGUgb3V0cHV0IHNob3VsZCBiZSBzaW1wbGlmaWVkLCBzbyB0aGlzIHdhcworICAgIHNpbXBseSBub3QgaW1wbGVtZW50ZWQuICBGdXJ0aGVyLCB0byBpbXBsZW1lbnQgdGhpcywgZGlyZWN0b3J5IHJlbmFtZQorICAgIGRldGVjdGlvbiBsb2dpYyB3b3VsZCBuZWVkIHRvIG1vdmUgZnJvbSBtZXJnZS1yZWN1cnNpdmUgdG8KKyAgICBkaWZmY29yZS1yZW5hbWUuCisKKyAgKiBhbQorCisgICAgZ2l0LWFtIHRyaWVzIHRvIGF2b2lkIGEgZnVsbCB0aHJlZSB3YXkgbWVyZ2UsIGluc3RlYWQgY2FsbGluZworICAgIGdpdC1hcHBseS4gIFRoYXQgcHJldmVudHMgdXMgZnJvbSBkZXRlY3RpbmcgcmVuYW1lcyBhdCBhbGwsIHdoaWNoIG1heQorICAgIGRlZmVhdCB0aGUgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24uICBUaGVyZSBpcyBhIGZhbGxiYWNrLCB0aG91Z2g7IGlmCisgICAgdGhlIGluaXRpYWwgZ2l0LWFwcGx5IGZhaWxzIGFuZCB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIHRoZSAtMyBvcHRpb24sCisgICAgZ2l0LWFtIHdpbGwgZmFsbCBiYWNrIHRvIGEgdGhyZWUgd2F5IG1lcmdlLiAgSG93ZXZlciwgZ2l0LWFtIGxhY2tzIHRoZQorICAgIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBkbyBhICJyZWFsIiB0aHJlZSB3YXkgbWVyZ2UuICBJbnN0ZWFkLCBpdCBoYXMKKyAgICB0byB1c2UgYnVpbGRfZmFrZV9hbmNlc3RvcigpIHRvIGdldCBhIG1lcmdlIGJhc2UgdGhhdCBpcyBtaXNzaW5nIGZpbGVzCisgICAgd2hvc2UgcmVuYW1lIG1heSBoYXZlIGJlZW4gaW1wb3J0YW50IHRvIGRldGVjdCBmb3IgZGlyZWN0b3J5IHJlbmFtZQorICAgIGRldGVjdGlvbiB0byBmdW5jdGlvbi4KKworICAqIHJlYmFzZQorCisgICAgU2luY2UgYW0tYmFzZWQgcmViYXNlcyB3b3JrIGJ5IGZpcnN0IGdlbmVyYXRpbmcgYSBidW5jaCBvZiBwYXRjaGVzCisgICAgKHdoaWNoIG5vIGxvbmdlciByZWNvcmQgd2hhdCB0aGUgb3JpZ2luYWwgY29tbWl0cyB3ZXJlIGFuZCB0aHVzIGRvbid0CisgICAgaGF2ZSB0aGUgbmVjZXNzYXJ5IGluZm8gZnJvbSB3aGljaCB3ZSBjYW4gZmluZCBhIHJlYWwgbWVyZ2UtYmFzZSksIGFuZAorICAgIHRoZW4gY2FsbGluZyBnaXQtYW0sIHRoaXMgaW1wbGllcyB0aGF0IGFtLWJhc2VkIHJlYmFzZXMgd2lsbCBub3QgYWx3YXlzCisgICAgc3VjY2Vzc2Z1bGx5IGRldGVjdCBkaXJlY3RvcnkgcmVuYW1lcyBlaXRoZXIgKHNlZSB0aGUgJ2FtJyBzZWN0aW9uCisgICAgYWJvdmUpLiAgbWVyZ2VkLWJhc2VkIHJlYmFzZXMgKHJlYmFzZSAtbSkgYW5kIGNoZXJyeS1waWNrLWJhc2VkIHJlYmFzZXMKKyAgICAocmViYXNlIC1pKSBhcmUgbm90IGFmZmVjdGVkIGJ5IHRoaXMgc2hvcnRjb21pbmcsIGFuZCBmdWxseSBzdXBwb3J0CisgICAgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9oYXNoLWZ1bmN0aW9uLXRyYW5zaXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaGFzaC1mdW5jdGlvbi10cmFuc2l0aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjJkYjNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaGFzaC1mdW5jdGlvbi10cmFuc2l0aW9uLnR4dApAQCAtMCwwICsxLDgyNyBAQAorR2l0IGhhc2ggZnVuY3Rpb24gdHJhbnNpdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPYmplY3RpdmUKKy0tLS0tLS0tLQorTWlncmF0ZSBHaXQgZnJvbSBTSEEtMSB0byBhIHN0cm9uZ2VyIGhhc2ggZnVuY3Rpb24uCisKK0JhY2tncm91bmQKKy0tLS0tLS0tLS0KK0F0IGl0cyBjb3JlLCB0aGUgR2l0IHZlcnNpb24gY29udHJvbCBzeXN0ZW0gaXMgYSBjb250ZW50IGFkZHJlc3NhYmxlCitmaWxlc3lzdGVtLiBJdCB1c2VzIHRoZSBTSEEtMSBoYXNoIGZ1bmN0aW9uIHRvIG5hbWUgY29udGVudC4gRm9yCitleGFtcGxlLCBmaWxlcywgZGlyZWN0b3JpZXMsIGFuZCByZXZpc2lvbnMgYXJlIHJlZmVycmVkIHRvIGJ5IGhhc2gKK3ZhbHVlcyB1bmxpa2UgaW4gb3RoZXIgdHJhZGl0aW9uYWwgdmVyc2lvbiBjb250cm9sIHN5c3RlbXMgd2hlcmUgZmlsZXMKK29yIHZlcnNpb25zIGFyZSByZWZlcnJlZCB0byB2aWEgc2VxdWVudGlhbCBudW1iZXJzLiBUaGUgdXNlIG9mIGEgaGFzaAorZnVuY3Rpb24gdG8gYWRkcmVzcyBpdHMgY29udGVudCBkZWxpdmVycyBhIGZldyBhZHZhbnRhZ2VzOgorCisqIEludGVncml0eSBjaGVja2luZyBpcyBlYXN5LiBCaXQgZmxpcHMsIGZvciBleGFtcGxlLCBhcmUgZWFzaWx5CisgIGRldGVjdGVkLCBhcyB0aGUgaGFzaCBvZiBjb3JydXB0ZWQgY29udGVudCBkb2VzIG5vdCBtYXRjaCBpdHMgbmFtZS4KKyogTG9va3VwIG9mIG9iamVjdHMgaXMgZmFzdC4KKworVXNpbmcgYSBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgaGFzaCBmdW5jdGlvbiBicmluZ3MgYWRkaXRpb25hbAorYWR2YW50YWdlczoKKworKiBPYmplY3QgbmFtZXMgY2FuIGJlIHNpZ25lZCBhbmQgdGhpcmQgcGFydGllcyBjYW4gdHJ1c3QgdGhlIGhhc2ggdG8KKyAgYWRkcmVzcyB0aGUgc2lnbmVkIG9iamVjdCBhbmQgYWxsIG9iamVjdHMgaXQgcmVmZXJlbmNlcy4KKyogQ29tbXVuaWNhdGlvbiB1c2luZyBHaXQgcHJvdG9jb2wgYW5kIG91dCBvZiBiYW5kIGNvbW11bmljYXRpb24KKyAgbWV0aG9kcyBoYXZlIGEgc2hvcnQgcmVsaWFibGUgc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVsaWFibHkKKyAgYWRkcmVzcyBzdG9yZWQgY29udGVudC4KKworT3ZlciB0aW1lIHNvbWUgZmxhd3MgaW4gU0hBLTEgaGF2ZSBiZWVuIGRpc2NvdmVyZWQgYnkgc2VjdXJpdHkKK3Jlc2VhcmNoZXJzLiBPbiAyMyBGZWJydWFyeSAyMDE3IHRoZSBTSEF0dGVyZWQgYXR0YWNrCisoaHR0cHM6Ly9zaGF0dGVyZWQuaW8pIGRlbW9uc3RyYXRlZCBhIHByYWN0aWNhbCBTSEEtMSBoYXNoIGNvbGxpc2lvbi4KKworR2l0IHYyLjEzLjAgYW5kIGxhdGVyIHN1YnNlcXVlbnRseSBtb3ZlZCB0byBhIGhhcmRlbmVkIFNIQS0xCitpbXBsZW1lbnRhdGlvbiBieSBkZWZhdWx0LCB3aGljaCBpc24ndCB2dWxuZXJhYmxlIHRvIHRoZSBTSEF0dGVyZWQKK2F0dGFjay4KKworVGh1cyBHaXQgaGFzIGluIGVmZmVjdCBhbHJlYWR5IG1pZ3JhdGVkIHRvIGEgbmV3IGhhc2ggdGhhdCBpc24ndCBTSEEtMQorYW5kIGRvZXNuJ3Qgc2hhcmUgaXRzIHZ1bG5lcmFiaWxpdGllcywgaXRzIG5ldyBoYXNoIGZ1bmN0aW9uIGp1c3QKK2hhcHBlbnMgdG8gcHJvZHVjZSBleGFjdGx5IHRoZSBzYW1lIG91dHB1dCBmb3IgYWxsIGtub3duIGlucHV0cywKK2V4Y2VwdCB0d28gUERGcyBwdWJsaXNoZWQgYnkgdGhlIFNIQXR0ZXJlZCByZXNlYXJjaGVycywgYW5kIHRoZSBuZXcKK2ltcGxlbWVudGF0aW9uICh3cml0dGVuIGJ5IHRob3NlIHJlc2VhcmNoZXJzKSBjbGFpbXMgdG8gZGV0ZWN0IGZ1dHVyZQorY3J5cHRhbmFseXRpYyBjb2xsaXNpb24gYXR0YWNrcy4KKworUmVnYXJkbGVzcywgaXQncyBjb25zaWRlcmVkIHBydWRlbnQgdG8gbW92ZSBwYXN0IGFueSB2YXJpYW50IG9mIFNIQS0xCit0byBhIG5ldyBoYXNoLiBUaGVyZSdzIG5vIGd1YXJhbnRlZSB0aGF0IGZ1dHVyZSBhdHRhY2tzIG9uIFNIQS0xIHdvbid0CitiZSBwdWJsaXNoZWQgaW4gdGhlIGZ1dHVyZSwgYW5kIHRob3NlIGF0dGFja3MgbWF5IG5vdCBoYXZlIHZpYWJsZQorbWl0aWdhdGlvbnMuCisKK0lmIFNIQS0xIGFuZCBpdHMgdmFyaWFudHMgd2VyZSB0byBiZSB0cnVseSBicm9rZW4sIEdpdCdzIGhhc2ggZnVuY3Rpb24KK2NvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZSBhbnkgbW9yZS4gVGhpcyB3b3VsZAoraW1wYWN0IHRoZSBjb21tdW5pY2F0aW9uIG9mIGhhc2ggdmFsdWVzIGJlY2F1c2Ugd2UgY291bGQgbm90IHRydXN0Cit0aGF0IGEgZ2l2ZW4gaGFzaCB2YWx1ZSByZXByZXNlbnRlZCB0aGUga25vd24gZ29vZCB2ZXJzaW9uIG9mIGNvbnRlbnQKK3RoYXQgdGhlIHNwZWFrZXIgaW50ZW5kZWQuCisKK1NIQS0xIHN0aWxsIHBvc3Nlc3NlcyB0aGUgb3RoZXIgcHJvcGVydGllcyBzdWNoIGFzIGZhc3Qgb2JqZWN0IGxvb2t1cAorYW5kIHNhZmUgZXJyb3IgY2hlY2tpbmcsIGJ1dCBvdGhlciBoYXNoIGZ1bmN0aW9ucyBhcmUgZXF1YWxseSBzdWl0YWJsZQordGhhdCBhcmUgYmVsaWV2ZWQgdG8gYmUgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlLgorCitHb2FscworLS0tLS0KKzEuIFRoZSB0cmFuc2l0aW9uIHRvIFNIQS0yNTYgY2FuIGJlIGRvbmUgb25lIGxvY2FsIHJlcG9zaXRvcnkgYXQgYSB0aW1lLgorICAgYS4gUmVxdWlyaW5nIG5vIGFjdGlvbiBieSBhbnkgb3RoZXIgcGFydHkuCisgICBiLiBBIFNIQS0yNTYgcmVwb3NpdG9yeSBjYW4gY29tbXVuaWNhdGUgd2l0aCBTSEEtMSBHaXQgc2VydmVycworICAgICAgKHB1c2gvZmV0Y2gpLgorICAgYy4gVXNlcnMgY2FuIHVzZSBTSEEtMSBhbmQgU0hBLTI1NiBpZGVudGlmaWVycyBmb3Igb2JqZWN0cworICAgICAgaW50ZXJjaGFuZ2VhYmx5IChzZWUgIk9iamVjdCBuYW1lcyBvbiB0aGUgY29tbWFuZCBsaW5lIiwgYmVsb3cpLgorICAgZC4gTmV3IHNpZ25lZCBvYmplY3RzIG1ha2UgdXNlIG9mIGEgc3Ryb25nZXIgaGFzaCBmdW5jdGlvbiB0aGFuCisgICAgICBTSEEtMSBmb3IgdGhlaXIgc2VjdXJpdHkgZ3VhcmFudGVlcy4KKzIuIEFsbG93IGEgY29tcGxldGUgdHJhbnNpdGlvbiBhd2F5IGZyb20gU0hBLTEuCisgICBhLiBMb2NhbCBtZXRhZGF0YSBmb3IgU0hBLTEgY29tcGF0aWJpbGl0eSBjYW4gYmUgcmVtb3ZlZCBmcm9tIGEKKyAgICAgIHJlcG9zaXRvcnkgaWYgY29tcGF0aWJpbGl0eSB3aXRoIFNIQS0xIGlzIG5vIGxvbmdlciBuZWVkZWQuCiszLiBNYWludGFpbmFiaWxpdHkgdGhyb3VnaG91dCB0aGUgcHJvY2Vzcy4KKyAgIGEuIFRoZSBvYmplY3QgZm9ybWF0IGlzIGtlcHQgc2ltcGxlIGFuZCBjb25zaXN0ZW50LgorICAgYi4gQ3JlYXRpb24gb2YgYSBnZW5lcmFsaXplZCByZXBvc2l0b3J5IGNvbnZlcnNpb24gdG9vbC4KKworTm9uLUdvYWxzCistLS0tLS0tLS0KKzEuIEFkZCBTSEEtMjU2IHN1cHBvcnQgdG8gR2l0IHByb3RvY29sLiBUaGlzIGlzIHZhbHVhYmxlIGFuZCB0aGUKKyAgIGxvZ2ljYWwgbmV4dCBzdGVwIGJ1dCBpdCBpcyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMgaW5pdGlhbCBkZXNpZ24uCisyLiBUcmFuc3BhcmVudGx5IGltcHJvdmluZyB0aGUgc2VjdXJpdHkgb2YgZXhpc3RpbmcgU0hBLTEgc2lnbmVkCisgICBvYmplY3RzLgorMy4gSW50ZXJtaXhpbmcgb2JqZWN0cyB1c2luZyBtdWx0aXBsZSBoYXNoIGZ1bmN0aW9ucyBpbiBhIHNpbmdsZQorICAgcmVwb3NpdG9yeS4KKzQuIFRha2luZyB0aGUgb3Bwb3J0dW5pdHkgdG8gZml4IG90aGVyIGJ1Z3MgaW4gR2l0J3MgZm9ybWF0cyBhbmQKKyAgIHByb3RvY29scy4KKzUuIFNoYWxsb3cgY2xvbmVzIGFuZCBmZXRjaGVzIGludG8gYSBTSEEtMjU2IHJlcG9zaXRvcnkuIChUaGlzIHdpbGwKKyAgIGNoYW5nZSB3aGVuIHdlIGFkZCBTSEEtMjU2IHN1cHBvcnQgdG8gR2l0IHByb3RvY29sLikKKzYuIFNraXAgZmV0Y2hpbmcgc29tZSBzdWJtb2R1bGVzIG9mIGEgcHJvamVjdCBpbnRvIGEgU0hBLTI1NgorICAgcmVwb3NpdG9yeS4gKFRoaXMgYWxzbyBkZXBlbmRzIG9uIFNIQS0yNTYgc3VwcG9ydCBpbiBHaXQKKyAgIHByb3RvY29sLikKKworT3ZlcnZpZXcKKy0tLS0tLS0tCitXZSBpbnRyb2R1Y2UgYSBuZXcgcmVwb3NpdG9yeSBmb3JtYXQgZXh0ZW5zaW9uLiBSZXBvc2l0b3JpZXMgd2l0aCB0aGlzCitleHRlbnNpb24gZW5hYmxlZCB1c2UgU0hBLTI1NiBpbnN0ZWFkIG9mIFNIQS0xIHRvIG5hbWUgdGhlaXIgb2JqZWN0cy4KK1RoaXMgYWZmZWN0cyBib3RoIG9iamVjdCBuYW1lcyBhbmQgb2JqZWN0IGNvbnRlbnQgLS0tIGJvdGggdGhlIG5hbWVzCitvZiBvYmplY3RzIGFuZCBhbGwgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzIHdpdGhpbiBhbiBvYmplY3QgYXJlCitzd2l0Y2hlZCB0byB0aGUgbmV3IGhhc2ggZnVuY3Rpb24uCisKK1NIQS0yNTYgcmVwb3NpdG9yaWVzIGNhbm5vdCBiZSByZWFkIGJ5IG9sZGVyIHZlcnNpb25zIG9mIEdpdC4KKworQWxvbmdzaWRlIHRoZSBwYWNrZmlsZSwgYSBTSEEtMjU2IHJlcG9zaXRvcnkgc3RvcmVzIGEgYmlkaXJlY3Rpb25hbAorbWFwcGluZyBiZXR3ZWVuIFNIQS0yNTYgYW5kIFNIQS0xIG9iamVjdCBuYW1lcy4gVGhlIG1hcHBpbmcgaXMgZ2VuZXJhdGVkCitsb2NhbGx5IGFuZCBjYW4gYmUgdmVyaWZpZWQgdXNpbmcgImdpdCBmc2NrIi4gT2JqZWN0IGxvb2t1cHMgdXNlIHRoaXMKK21hcHBpbmcgdG8gYWxsb3cgbmFtaW5nIG9iamVjdHMgdXNpbmcgZWl0aGVyIHRoZWlyIFNIQS0xIGFuZCBTSEEtMjU2IG5hbWVzCitpbnRlcmNoYW5nZWFibHkuCisKKyJnaXQgY2F0LWZpbGUiIGFuZCAiZ2l0IGhhc2gtb2JqZWN0IiBnYWluIG9wdGlvbnMgdG8gZGlzcGxheSBhbiBvYmplY3QKK2luIGl0cyBzaGExIGZvcm0gYW5kIHdyaXRlIGFuIG9iamVjdCBnaXZlbiBpdHMgc2hhMSBmb3JtLiBUaGlzCityZXF1aXJlcyBhbGwgb2JqZWN0cyByZWZlcmVuY2VkIGJ5IHRoYXQgb2JqZWN0IHRvIGJlIHByZXNlbnQgaW4gdGhlCitvYmplY3QgZGF0YWJhc2Ugc28gdGhhdCB0aGV5IGNhbiBiZSBuYW1lZCB1c2luZyB0aGUgYXBwcm9wcmlhdGUgbmFtZQorKHVzaW5nIHRoZSBiaWRpcmVjdGlvbmFsIGhhc2ggbWFwcGluZykuCisKK0ZldGNoZXMgZnJvbSBhIFNIQS0xIGJhc2VkIHNlcnZlciBjb252ZXJ0IHRoZSBmZXRjaGVkIG9iamVjdHMgaW50bworU0hBLTI1NiBmb3JtIGFuZCByZWNvcmQgdGhlIG1hcHBpbmcgaW4gdGhlIGJpZGlyZWN0aW9uYWwgbWFwcGluZyB0YWJsZQorKHNlZSBiZWxvdyBmb3IgZGV0YWlscykuIFB1c2hlcyB0byBhIFNIQS0xIGJhc2VkIHNlcnZlciBjb252ZXJ0IHRoZQorb2JqZWN0cyBiZWluZyBwdXNoZWQgaW50byBzaGExIGZvcm0gc28gdGhlIHNlcnZlciBkb2VzIG5vdCBoYXZlIHRvIGJlCithd2FyZSBvZiB0aGUgaGFzaCBmdW5jdGlvbiB0aGUgY2xpZW50IGlzIHVzaW5nLgorCitEZXRhaWxlZCBEZXNpZ24KKy0tLS0tLS0tLS0tLS0tLQorUmVwb3NpdG9yeSBmb3JtYXQgZXh0ZW5zaW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0EgU0hBLTI1NiByZXBvc2l0b3J5IHVzZXMgcmVwb3NpdG9yeSBmb3JtYXQgdmVyc2lvbiBgMWAgKHNlZQorRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmVwb3NpdG9yeS12ZXJzaW9uLnR4dCkgd2l0aCBleHRlbnNpb25zCitgb2JqZWN0Rm9ybWF0YCBhbmQgYGNvbXBhdE9iamVjdEZvcm1hdGA6CisKKwlbY29yZV0KKwkJcmVwb3NpdG9yeUZvcm1hdFZlcnNpb24gPSAxCisJW2V4dGVuc2lvbnNdCisJCW9iamVjdEZvcm1hdCA9IHNoYTI1NgorCQljb21wYXRPYmplY3RGb3JtYXQgPSBzaGExCisKK1RoZSBjb21iaW5hdGlvbiBvZiBzZXR0aW5nIGBjb3JlLnJlcG9zaXRvcnlGb3JtYXRWZXJzaW9uPTFgIGFuZAorcG9wdWxhdGluZyBgZXh0ZW5zaW9ucy4qYCBlbnN1cmVzIHRoYXQgYWxsIHZlcnNpb25zIG9mIEdpdCBsYXRlciB0aGFuCitgdjAuOTkuOWxgIHdpbGwgZGllIGluc3RlYWQgb2YgdHJ5aW5nIHRvIG9wZXJhdGUgb24gdGhlIFNIQS0yNTYKK3JlcG9zaXRvcnksIGluc3RlYWQgcHJvZHVjaW5nIGFuIGVycm9yIG1lc3NhZ2UuCisKKwkjIEJldHdlZW4gdjAuOTkuOWwgYW5kIHYyLjcuMAorCSQgZ2l0IHN0YXR1cworCWZhdGFsOiBFeHBlY3RlZCBnaXQgcmVwbyB2ZXJzaW9uIDw9IDAsIGZvdW5kIDEKKwkjIEFmdGVyIHYyLjcuMAorCSQgZ2l0IHN0YXR1cworCWZhdGFsOiB1bmtub3duIHJlcG9zaXRvcnkgZXh0ZW5zaW9ucyBmb3VuZDoKKwkJb2JqZWN0Zm9ybWF0CisJCWNvbXBhdG9iamVjdGZvcm1hdAorCitTZWUgdGhlICJUcmFuc2l0aW9uIHBsYW4iIHNlY3Rpb24gYmVsb3cgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGVzZQorcmVwb3NpdG9yeSBleHRlbnNpb25zLgorCitPYmplY3QgbmFtZXMKK35+fn5+fn5+fn5+fgorT2JqZWN0cyBjYW4gYmUgbmFtZWQgYnkgdGhlaXIgNDAgaGV4YWRlY2ltYWwgZGlnaXQgc2hhMS1uYW1lIG9yIDY0CitoZXhhZGVjaW1hbCBkaWdpdCBzaGEyNTYtbmFtZSwgcGx1cyBuYW1lcyBkZXJpdmVkIGZyb20gdGhvc2UgKHNlZQorZ2l0cmV2aXNpb25zKDcpKS4KKworVGhlIHNoYTEtbmFtZSBvZiBhbiBvYmplY3QgaXMgdGhlIFNIQS0xIG9mIHRoZSBjb25jYXRlbmF0aW9uIG9mIGl0cwordHlwZSwgbGVuZ3RoLCBhIG51bCBieXRlLCBhbmQgdGhlIG9iamVjdCdzIHNoYTEtY29udGVudC4gVGhpcyBpcyB0aGUKK3RyYWRpdGlvbmFsIDxzaGExPiB1c2VkIGluIEdpdCB0byBuYW1lIG9iamVjdHMuCisKK1RoZSBzaGEyNTYtbmFtZSBvZiBhbiBvYmplY3QgaXMgdGhlIFNIQS0yNTYgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgaXRzCit0eXBlLCBsZW5ndGgsIGEgbnVsIGJ5dGUsIGFuZCB0aGUgb2JqZWN0J3Mgc2hhMjU2LWNvbnRlbnQuCisKK09iamVjdCBmb3JtYXQKK35+fn5+fn5+fn5+fn4KK1RoZSBjb250ZW50IGFzIGEgYnl0ZSBzZXF1ZW5jZSBvZiBhIHRhZywgY29tbWl0LCBvciB0cmVlIG9iamVjdCBuYW1lZAorYnkgc2hhMSBhbmQgc2hhMjU2IGRpZmZlciBiZWNhdXNlIGFuIG9iamVjdCBuYW1lZCBieSBzaGEyNTYtbmFtZSByZWZlcnMgdG8KK290aGVyIG9iamVjdHMgYnkgdGhlaXIgc2hhMjU2LW5hbWVzIGFuZCBhbiBvYmplY3QgbmFtZWQgYnkgc2hhMS1uYW1lCityZWZlcnMgdG8gb3RoZXIgb2JqZWN0cyBieSB0aGVpciBzaGExLW5hbWVzLgorCitUaGUgc2hhMjU2LWNvbnRlbnQgb2YgYW4gb2JqZWN0IGlzIHRoZSBzYW1lIGFzIGl0cyBzaGExLWNvbnRlbnQsIGV4Y2VwdAordGhhdCBvYmplY3RzIHJlZmVyZW5jZWQgYnkgdGhlIG9iamVjdCBhcmUgbmFtZWQgdXNpbmcgdGhlaXIgc2hhMjU2LW5hbWVzCitpbnN0ZWFkIG9mIHNoYTEtbmFtZXMuIEJlY2F1c2UgYSBibG9iIG9iamVjdCBkb2VzIG5vdCByZWZlciB0byBhbnkKK290aGVyIG9iamVjdCwgaXRzIHNoYTEtY29udGVudCBhbmQgc2hhMjU2LWNvbnRlbnQgYXJlIHRoZSBzYW1lLgorCitUaGUgZm9ybWF0IGFsbG93cyByb3VuZC10cmlwIGNvbnZlcnNpb24gYmV0d2VlbiBzaGEyNTYtY29udGVudCBhbmQKK3NoYTEtY29udGVudC4KKworT2JqZWN0IHN0b3JhZ2UKK35+fn5+fn5+fn5+fn5+CitMb29zZSBvYmplY3RzIHVzZSB6bGliIGNvbXByZXNzaW9uIGFuZCBwYWNrZWQgb2JqZWN0cyB1c2UgdGhlIHBhY2tlZAorZm9ybWF0IGRlc2NyaWJlZCBpbiBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLWZvcm1hdC50eHQsIGp1c3QgbGlrZQordG9kYXkuIFRoZSBjb250ZW50IHRoYXQgaXMgY29tcHJlc3NlZCBhbmQgc3RvcmVkIHVzZXMgc2hhMjU2LWNvbnRlbnQKK2luc3RlYWQgb2Ygc2hhMS1jb250ZW50LgorCitQYWNrIGluZGV4Cit+fn5+fn5+fn5+CitQYWNrIGluZGV4ICguaWR4KSBmaWxlcyB1c2UgYSBuZXcgdjMgZm9ybWF0IHRoYXQgc3VwcG9ydHMgbXVsdGlwbGUKK2hhc2ggZnVuY3Rpb25zLiBUaGV5IGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQgKGFsbCBpbnRlZ2VycyBhcmUgaW4KK25ldHdvcmsgYnl0ZSBvcmRlcik6CisKKy0gQSBoZWFkZXIgYXBwZWFycyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nOgorICAtIFRoZSA0LWJ5dGUgcGFjayBpbmRleCBzaWduYXR1cmU6ICdcMzc3dDBjJworICAtIDQtYnl0ZSB2ZXJzaW9uIG51bWJlcjogMworICAtIDQtYnl0ZSBsZW5ndGggb2YgdGhlIGhlYWRlciBzZWN0aW9uLCBpbmNsdWRpbmcgdGhlIHNpZ25hdHVyZSBhbmQKKyAgICB2ZXJzaW9uIG51bWJlcgorICAtIDQtYnl0ZSBudW1iZXIgb2Ygb2JqZWN0cyBjb250YWluZWQgaW4gdGhlIHBhY2sKKyAgLSA0LWJ5dGUgbnVtYmVyIG9mIG9iamVjdCBmb3JtYXRzIGluIHRoaXMgcGFjayBpbmRleDogMgorICAtIEZvciBlYWNoIG9iamVjdCBmb3JtYXQ6CisgICAgLSA0LWJ5dGUgZm9ybWF0IGlkZW50aWZpZXIgKGUuZy4sICdzaGExJyBmb3IgU0hBLTEpCisgICAgLSA0LWJ5dGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHNob3J0ZW5lZCBvYmplY3QgbmFtZXMuIFRoaXMgaXMgdGhlCisgICAgICBzaG9ydGVzdCBwb3NzaWJsZSBsZW5ndGggbmVlZGVkIHRvIG1ha2UgbmFtZXMgaW4gdGhlIHNob3J0ZW5lZAorICAgICAgb2JqZWN0IG5hbWUgdGFibGUgdW5hbWJpZ3VvdXMuCisgICAgLSA0LWJ5dGUgaW50ZWdlciwgcmVjb3JkaW5nIHdoZXJlIHRhYmxlcyByZWxhdGluZyB0byB0aGlzIGZvcm1hdAorICAgICAgYXJlIHN0b3JlZCBpbiB0aGlzIGluZGV4IGZpbGUsIGFzIGFuIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcuCisgIC0gNC1ieXRlIG9mZnNldCB0byB0aGUgdHJhaWxlciBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmaWxlLgorICAtIFplcm8gb3IgbW9yZSBhZGRpdGlvbmFsIGtleS92YWx1ZSBwYWlycyAoNC1ieXRlIGtleSwgNC1ieXRlCisgICAgdmFsdWUpLiBPbmx5IG9uZSBrZXkgaXMgc3VwcG9ydGVkOiAnUFNSQycuIFNlZSB0aGUgIkxvb3NlIG9iamVjdHMKKyAgICBhbmQgdW5yZWFjaGFibGUgb2JqZWN0cyIgc2VjdGlvbiBmb3Igc3VwcG9ydGVkIHZhbHVlcyBhbmQgaG93IHRoaXMKKyAgICBpcyB1c2VkLiAgQWxsIG90aGVyIGtleXMgYXJlIHJlc2VydmVkLiBSZWFkZXJzIG11c3QgaWdub3JlCisgICAgdW5yZWNvZ25pemVkIGtleXMuCistIFplcm8gb3IgbW9yZSBOVUwgYnl0ZXMuIFRoaXMgY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCB0byBpbXByb3ZlIHRoZQorICBhbGlnbm1lbnQgb2YgdGhlIGZ1bGwgb2JqZWN0IG5hbWUgdGFibGUgYmVsb3cuCistIFRhYmxlcyBmb3IgdGhlIGZpcnN0IG9iamVjdCBmb3JtYXQ6CisgIC0gQSBzb3J0ZWQgdGFibGUgb2Ygc2hvcnRlbmVkIG9iamVjdCBuYW1lcy4gIFRoZXNlIGFyZSBwcmVmaXhlcyBvZgorICAgIHRoZSBuYW1lcyBvZiBhbGwgb2JqZWN0cyBpbiB0aGlzIHBhY2sgZmlsZSwgcGFja2VkIHRvZ2V0aGVyCisgICAgd2l0aG91dCBvZmZzZXQgdmFsdWVzIHRvIHJlZHVjZSB0aGUgY2FjaGUgZm9vdHByaW50IG9mIHRoZSBiaW5hcnkKKyAgICBzZWFyY2ggZm9yIGEgc3BlY2lmaWMgb2JqZWN0IG5hbWUuCisKKyAgLSBBIHRhYmxlIG9mIGZ1bGwgb2JqZWN0IG5hbWVzIGluIHBhY2sgb3JkZXIuIFRoaXMgYWxsb3dzIHJlc29sdmluZworICAgIGEgcmVmZXJlbmNlIHRvICJ0aGUgbnRoIG9iamVjdCBpbiB0aGUgcGFjayBmaWxlIiAoZnJvbSBhCisgICAgcmVhY2hhYmlsaXR5IGJpdG1hcCBvciBmcm9tIHRoZSBuZXh0IHRhYmxlIG9mIGFub3RoZXIgb2JqZWN0CisgICAgZm9ybWF0KSB0byBpdHMgb2JqZWN0IG5hbWUuCisKKyAgLSBBIHRhYmxlIG9mIDQtYnl0ZSB2YWx1ZXMgbWFwcGluZyBvYmplY3QgbmFtZSBvcmRlciB0byBwYWNrIG9yZGVyLgorICAgIEZvciBhbiBvYmplY3QgaW4gdGhlIHRhYmxlIG9mIHNvcnRlZCBzaG9ydGVuZWQgb2JqZWN0IG5hbWVzLCB0aGUKKyAgICB2YWx1ZSBhdCB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBpbiB0aGlzIHRhYmxlIGlzIHRoZSBpbmRleCBpbiB0aGUKKyAgICBwcmV2aW91cyB0YWJsZSBmb3IgdGhhdCBzYW1lIG9iamVjdC4KKworICAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9vayB1cCB0aGUgb2JqZWN0IGluIHJlYWNoYWJpbGl0eSBiaXRtYXBzIG9yCisgICAgdG8gbG9vayB1cCBpdHMgbmFtZSBpbiBhbm90aGVyIG9iamVjdCBmb3JtYXQuCisKKyAgLSBBIHRhYmxlIG9mIDQtYnl0ZSBDUkMzMiB2YWx1ZXMgb2YgdGhlIHBhY2tlZCBvYmplY3QgZGF0YSwgaW4gdGhlCisgICAgb3JkZXIgdGhhdCB0aGUgb2JqZWN0cyBhcHBlYXIgaW4gdGhlIHBhY2sgZmlsZS4gVGhpcyBpcyB0byBhbGxvdworICAgIGNvbXByZXNzZWQgZGF0YSB0byBiZSBjb3BpZWQgZGlyZWN0bHkgZnJvbSBwYWNrIHRvIHBhY2sgZHVyaW5nCisgICAgcmVwYWNraW5nIHdpdGhvdXQgdW5kZXRlY3RlZCBkYXRhIGNvcnJ1cHRpb24uCisKKyAgLSBBIHRhYmxlIG9mIDQtYnl0ZSBvZmZzZXQgdmFsdWVzLiBGb3IgYW4gb2JqZWN0IGluIHRoZSB0YWJsZSBvZgorICAgIHNvcnRlZCBzaG9ydGVuZWQgb2JqZWN0IG5hbWVzLCB0aGUgdmFsdWUgYXQgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICBpbmRleCBpbiB0aGlzIHRhYmxlIGluZGljYXRlcyB3aGVyZSB0aGF0IG9iamVjdCBjYW4gYmUgZm91bmQgaW4KKyAgICB0aGUgcGFjayBmaWxlLiBUaGVzZSBhcmUgdXN1YWxseSAzMS1iaXQgcGFjayBmaWxlIG9mZnNldHMsIGJ1dAorICAgIGxhcmdlIG9mZnNldHMgYXJlIGVuY29kZWQgYXMgYW4gaW5kZXggaW50byB0aGUgbmV4dCB0YWJsZSB3aXRoIHRoZQorICAgIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldC4KKworICAtIEEgdGFibGUgb2YgOC1ieXRlIG9mZnNldCBlbnRyaWVzIChlbXB0eSBmb3IgcGFjayBmaWxlcyBsZXNzIHRoYW4KKyAgICAyIEdpQikuIFBhY2sgZmlsZXMgYXJlIG9yZ2FuaXplZCB3aXRoIGhlYXZpbHkgdXNlZCBvYmplY3RzIHRvd2FyZAorICAgIHRoZSBmcm9udCwgc28gbW9zdCBvYmplY3QgcmVmZXJlbmNlcyBzaG91bGQgbm90IG5lZWQgdG8gcmVmZXIgdG8KKyAgICB0aGlzIHRhYmxlLgorLSBaZXJvIG9yIG1vcmUgTlVMIGJ5dGVzLgorLSBUYWJsZXMgZm9yIHRoZSBzZWNvbmQgb2JqZWN0IGZvcm1hdCwgd2l0aCB0aGUgc2FtZSBsYXlvdXQgYXMgYWJvdmUsCisgIHVwIHRvIGFuZCBub3QgaW5jbHVkaW5nIHRoZSB0YWJsZSBvZiBDUkMzMiB2YWx1ZXMuCistIFplcm8gb3IgbW9yZSBOVUwgYnl0ZXMuCistIFRoZSB0cmFpbGVyIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmc6CisgIC0gQSBjb3B5IG9mIHRoZSAyMC1ieXRlIFNIQS0yNTYgY2hlY2tzdW0gYXQgdGhlIGVuZCBvZiB0aGUKKyAgICBjb3JyZXNwb25kaW5nIHBhY2tmaWxlLgorCisgIC0gMjAtYnl0ZSBTSEEtMjU2IGNoZWNrc3VtIG9mIGFsbCBvZiB0aGUgYWJvdmUuCisKK0xvb3NlIG9iamVjdCBpbmRleAorfn5+fn5+fn5+fn5+fn5+fn5+CitBIG5ldyBmaWxlICRHSVRfT0JKRUNUX0RJUi9sb29zZS1vYmplY3QtaWR4IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0CithbGwgbG9vc2Ugb2JqZWN0cy4gSXRzIGZvcm1hdCBpcworCisgICMgbG9vc2Utb2JqZWN0LWlkeAorICAoc2hhMjU2LW5hbWUgU1Agc2hhMS1uYW1lIExGKSoKKword2hlcmUgdGhlIG9iamVjdCBuYW1lcyBhcmUgaW4gaGV4YWRlY2ltYWwgZm9ybWF0LiBUaGUgZmlsZSBpcyBub3QKK3NvcnRlZC4KKworVGhlIGxvb3NlIG9iamVjdCBpbmRleCBpcyBwcm90ZWN0ZWQgYWdhaW5zdCBjb25jdXJyZW50IHdyaXRlcyBieSBhCitsb2NrIGZpbGUgJEdJVF9PQkpFQ1RfRElSL2xvb3NlLW9iamVjdC1pZHgubG9jay4gVG8gYWRkIGEgbmV3IGxvb3NlCitvYmplY3Q6CisKKzEuIFdyaXRlIHRoZSBsb29zZSBvYmplY3QgdG8gYSB0ZW1wb3JhcnkgZmlsZSwgbGlrZSB0b2RheS4KKzIuIE9wZW4gbG9vc2Utb2JqZWN0LWlkeC5sb2NrIHdpdGggT19DUkVBVCB8IE9fRVhDTCB0byBhY3F1aXJlIHRoZSBsb2NrLgorMy4gUmVuYW1lIHRoZSBsb29zZSBvYmplY3QgaW50byBwbGFjZS4KKzQuIE9wZW4gbG9vc2Utb2JqZWN0LWlkeCB3aXRoIE9fQVBQRU5EIGFuZCB3cml0ZSB0aGUgbmV3IG9iamVjdAorNS4gVW5saW5rIGxvb3NlLW9iamVjdC1pZHgubG9jayB0byByZWxlYXNlIHRoZSBsb2NrLgorCitUbyByZW1vdmUgZW50cmllcyAoZS5nLiBpbiAiZ2l0IHBhY2stcmVmcyIgb3IgImdpdC1wcnVuZSIpOgorCisxLiBPcGVuIGxvb3NlLW9iamVjdC1pZHgubG9jayB3aXRoIE9fQ1JFQVQgfCBPX0VYQ0wgdG8gYWNxdWlyZSB0aGUKKyAgIGxvY2suCisyLiBXcml0ZSB0aGUgbmV3IGNvbnRlbnQgdG8gbG9vc2Utb2JqZWN0LWlkeC5sb2NrLgorMy4gVW5saW5rIGFueSBsb29zZSBvYmplY3RzIGJlaW5nIHJlbW92ZWQuCis0LiBSZW5hbWUgdG8gcmVwbGFjZSBsb29zZS1vYmplY3QtaWR4LCByZWxlYXNpbmcgdGhlIGxvY2suCisKK1RyYW5zbGF0aW9uIHRhYmxlCit+fn5+fn5+fn5+fn5+fn5+fgorVGhlIGluZGV4IGZpbGVzIHN1cHBvcnQgYSBiaWRpcmVjdGlvbmFsIG1hcHBpbmcgYmV0d2VlbiBzaGExLW5hbWVzCithbmQgc2hhMjU2LW5hbWVzLiBUaGUgbG9va3VwIHByb2NlZWRzIHNpbWlsYXJseSB0byBvcmRpbmFyeSBvYmplY3QKK2xvb2t1cHMuIEZvciBleGFtcGxlLCB0byBjb252ZXJ0IGEgc2hhMS1uYW1lIHRvIGEgc2hhMjU2LW5hbWU6CisKKyAxLiBMb29rIGZvciB0aGUgb2JqZWN0IGluIGlkeCBmaWxlcy4gSWYgYSBtYXRjaCBpcyBwcmVzZW50IGluIHRoZQorICAgIGlkeCdzIHNvcnRlZCBsaXN0IG9mIHRydW5jYXRlZCBzaGExLW5hbWVzLCB0aGVuOgorICAgIGEuIFJlYWQgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIHNoYTEtbmFtZSBvcmRlciB0byBwYWNrCisgICAgICAgbmFtZSBvcmRlciBtYXBwaW5nLgorICAgIGIuIFJlYWQgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIGZ1bGwgc2hhMS1uYW1lIHRhYmxlIHRvCisgICAgICAgdmVyaWZ5IHdlIGZvdW5kIHRoZSByaWdodCBvYmplY3QuIElmIGl0IGlzLCB0aGVuCisgICAgYy4gUmVhZCB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUgZnVsbCBzaGEyNTYtbmFtZSB0YWJsZS4KKyAgICAgICBUaGF0IGlzIHRoZSBvYmplY3QncyBzaGEyNTYtbmFtZS4KKyAyLiBDaGVjayBmb3IgYSBsb29zZSBvYmplY3QuIFJlYWQgbGluZXMgZnJvbSBsb29zZS1vYmplY3QtaWR4IHVudGlsCisgICAgd2UgZmluZCBhIG1hdGNoLgorCitTdGVwICgxKSB0YWtlcyB0aGUgc2FtZSBhbW91bnQgb2YgdGltZSBhcyBhbiBvcmRpbmFyeSBvYmplY3QgbG9va3VwOgorTyhudW1iZXIgb2YgcGFja3MgKiBsb2cob2JqZWN0cyBwZXIgcGFjaykpLiBTdGVwICgyKSB0YWtlcyBPKG51bWJlciBvZgorbG9vc2Ugb2JqZWN0cykgdGltZS4gVG8gbWFpbnRhaW4gZ29vZCBwZXJmb3JtYW5jZSBpdCB3aWxsIGJlIG5lY2Vzc2FyeQordG8ga2VlcCB0aGUgbnVtYmVyIG9mIGxvb3NlIG9iamVjdHMgbG93LiBTZWUgdGhlICJMb29zZSBvYmplY3RzIGFuZAordW5yZWFjaGFibGUgb2JqZWN0cyIgc2VjdGlvbiBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLgorCitTaW5jZSBhbGwgb3BlcmF0aW9ucyB0aGF0IG1ha2UgbmV3IG9iamVjdHMgKGUuZy4sICJnaXQgY29tbWl0IikgYWRkCit0aGUgbmV3IG9iamVjdHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXgsIHRoaXMgbWFwcGluZyBpcyBwb3NzaWJsZQorZm9yIGFsbCBvYmplY3RzIGluIHRoZSBvYmplY3Qgc3RvcmUuCisKK1JlYWRpbmcgYW4gb2JqZWN0J3Mgc2hhMS1jb250ZW50Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIHNoYTEtY29udGVudCBvZiBhbiBvYmplY3QgY2FuIGJlIHJlYWQgYnkgY29udmVydGluZyBhbGwgc2hhMjU2LW5hbWVzCitpdHMgc2hhMjU2LWNvbnRlbnQgcmVmZXJlbmNlcyB0byBzaGExLW5hbWVzIHVzaW5nIHRoZSB0cmFuc2xhdGlvbiB0YWJsZS4KKworRmV0Y2gKK35+fn5+CitGZXRjaGluZyBmcm9tIGEgU0hBLTEgYmFzZWQgc2VydmVyIHJlcXVpcmVzIHRyYW5zbGF0aW5nIGJldHdlZW4gU0hBLTEKK2FuZCBTSEEtMjU2IGJhc2VkIHJlcHJlc2VudGF0aW9ucyBvbiB0aGUgZmx5LgorCitTSEEtMXMgbmFtZWQgaW4gdGhlIHJlZiBhZHZlcnRpc2VtZW50IHRoYXQgYXJlIHByZXNlbnQgb24gdGhlIGNsaWVudAorY2FuIGJlIHRyYW5zbGF0ZWQgdG8gU0hBLTI1NiBhbmQgbG9va2VkIHVwIGFzIGxvY2FsIG9iamVjdHMgdXNpbmcgdGhlCit0cmFuc2xhdGlvbiB0YWJsZS4KKworTmVnb3RpYXRpb24gcHJvY2VlZHMgYXMgdG9kYXkuIEFueSAiaGF2ZSJzIGdlbmVyYXRlZCBsb2NhbGx5IGFyZQorY29udmVydGVkIHRvIFNIQS0xIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBzZXJ2ZXIsIGFuZCBTSEEtMXMKK21lbnRpb25lZCBieSB0aGUgc2VydmVyIGFyZSBjb252ZXJ0ZWQgdG8gU0hBLTI1NiB3aGVuIGxvb2tpbmcgdGhlbSB1cAorbG9jYWxseS4KKworQWZ0ZXIgbmVnb3RpYXRpb24sIHRoZSBzZXJ2ZXIgc2VuZHMgYSBwYWNrZmlsZSBjb250YWluaW5nIHRoZQorcmVxdWVzdGVkIG9iamVjdHMuIFdlIGNvbnZlcnQgdGhlIHBhY2tmaWxlIHRvIFNIQS0yNTYgZm9ybWF0IHVzaW5nCit0aGUgZm9sbG93aW5nIHN0ZXBzOgorCisxLiBpbmRleC1wYWNrOiBpbmZsYXRlIGVhY2ggb2JqZWN0IGluIHRoZSBwYWNrZmlsZSBhbmQgY29tcHV0ZSBpdHMKKyAgIFNIQS0xLiBPYmplY3RzIGNhbiBjb250YWluIGRlbHRhcyBpbiBPQkpfUkVGX0RFTFRBIGZvcm1hdCBhZ2FpbnN0CisgICBvYmplY3RzIHRoZSBjbGllbnQgaGFzIGxvY2FsbHkuIFRoZXNlIG9iamVjdHMgY2FuIGJlIGxvb2tlZCB1cAorICAgdXNpbmcgdGhlIHRyYW5zbGF0aW9uIHRhYmxlIGFuZCB0aGVpciBzaGExLWNvbnRlbnQgcmVhZCBhcworICAgZGVzY3JpYmVkIGFib3ZlIHRvIHJlc29sdmUgdGhlIGRlbHRhcy4KKzIuIHRvcG9sb2dpY2FsIHNvcnQ6IHN0YXJ0aW5nIGF0IHRoZSAid2FudCJzIGZyb20gdGhlIG5lZ290aWF0aW9uCisgICBwaGFzZSwgd2FsayB0aHJvdWdoIG9iamVjdHMgaW4gdGhlIHBhY2sgYW5kIGVtaXQgYSBsaXN0IG9mIHRoZW0sCisgICBleGNsdWRpbmcgYmxvYnMsIGluIHJldmVyc2UgdG9wb2xvZ2ljYWxseSBzb3J0ZWQgb3JkZXIsIHdpdGggZWFjaAorICAgb2JqZWN0IGNvbWluZyBsYXRlciBpbiB0aGUgbGlzdCB0aGFuIGFsbCBvYmplY3RzIGl0IHJlZmVyZW5jZXMuCisgICAoVGhpcyBsaXN0IG9ubHkgY29udGFpbnMgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0aGUgIndhbnRzIi4gSWYgdGhlCisgICBwYWNrIGZyb20gdGhlIHNlcnZlciBjb250YWluZWQgYWRkaXRpb25hbCBleHRyYW5lb3VzIG9iamVjdHMsIHRoZW4KKyAgIHRoZXkgd2lsbCBiZSBkaXNjYXJkZWQuKQorMy4gY29udmVydCB0byBzaGEyNTY6IG9wZW4gYSBuZXcgKHNoYTI1NikgcGFja2ZpbGUuIFJlYWQgdGhlIHRvcG9sb2dpY2FsbHkKKyAgIHNvcnRlZCBsaXN0IGp1c3QgZ2VuZXJhdGVkLiBGb3IgZWFjaCBvYmplY3QsIGluZmxhdGUgaXRzCisgICBzaGExLWNvbnRlbnQsIGNvbnZlcnQgdG8gc2hhMjU2LWNvbnRlbnQsIGFuZCB3cml0ZSBpdCB0byB0aGUgc2hhMjU2CisgICBwYWNrLiBSZWNvcmQgdGhlIG5ldyBzaGExPC0+c2hhMjU2IG1hcHBpbmcgZW50cnkgZm9yIHVzZSBpbiB0aGUgaWR4LgorNC4gc29ydDogcmVvcmRlciBlbnRyaWVzIGluIHRoZSBuZXcgcGFjayB0byBtYXRjaCB0aGUgb3JkZXIgb2Ygb2JqZWN0cworICAgaW4gdGhlIHBhY2sgdGhlIHNlcnZlciBnZW5lcmF0ZWQgYW5kIGluY2x1ZGUgYmxvYnMuIFdyaXRlIGEgc2hhMjU2IGlkeAorICAgZmlsZQorNS4gY2xlYW4gdXA6IHJlbW92ZSB0aGUgU0hBLTEgYmFzZWQgcGFjayBmaWxlLCBpbmRleCwgYW5kCisgICB0b3BvbG9naWNhbGx5IHNvcnRlZCBsaXN0IG9idGFpbmVkIGZyb20gdGhlIHNlcnZlciBpbiBzdGVwcyAxCisgICBhbmQgMi4KKworU3RlcCAzIHJlcXVpcmVzIGV2ZXJ5IG9iamVjdCByZWZlcmVuY2VkIGJ5IHRoZSBuZXcgb2JqZWN0IHRvIGJlIGluIHRoZQordHJhbnNsYXRpb24gdGFibGUuIFRoaXMgaXMgd2h5IHRoZSB0b3BvbG9naWNhbCBzb3J0IHN0ZXAgaXMgbmVjZXNzYXJ5LgorCitBcyBhbiBvcHRpbWl6YXRpb24sIHN0ZXAgMSBjb3VsZCB3cml0ZSBhIGZpbGUgZGVzY3JpYmluZyB3aGF0IG5vbi1ibG9iCitvYmplY3RzIGVhY2ggb2JqZWN0IGl0IGhhcyBpbmZsYXRlZCBmcm9tIHRoZSBwYWNrZmlsZSByZWZlcmVuY2VzLiBUaGlzCittYWtlcyB0aGUgdG9wb2xvZ2ljYWwgc29ydCBpbiBzdGVwIDIgcG9zc2libGUgd2l0aG91dCBpbmZsYXRpbmcgdGhlCitvYmplY3RzIGluIHRoZSBwYWNrZmlsZSBmb3IgYSBzZWNvbmQgdGltZS4gVGhlIG9iamVjdHMgbmVlZCB0byBiZQoraW5mbGF0ZWQgYWdhaW4gaW4gc3RlcCAzLCBmb3IgYSB0b3RhbCBvZiB0d28gaW5mbGF0aW9ucy4KKworU3RlcCA0IGlzIHByb2JhYmx5IG5lY2Vzc2FyeSBmb3IgZ29vZCByZWFkLXRpbWUgcGVyZm9ybWFuY2UuICJnaXQKK3BhY2stb2JqZWN0cyIgb24gdGhlIHNlcnZlciBvcHRpbWl6ZXMgdGhlIHBhY2sgZmlsZSBmb3IgZ29vZCBkYXRhCitsb2NhbGl0eSAoc2VlIERvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2staGV1cmlzdGljcy50eHQpLgorCitEZXRhaWxzIG9mIHRoaXMgcHJvY2VzcyBhcmUgbGlrZWx5IHRvIGNoYW5nZS4gSXQgd2lsbCB0YWtlIHNvbWUKK2V4cGVyaW1lbnRpbmcgdG8gZ2V0IHRoaXMgdG8gcGVyZm9ybSB3ZWxsLgorCitQdXNoCit+fn5+CitQdXNoIGlzIHNpbXBsZXIgdGhhbiBmZXRjaCBiZWNhdXNlIHRoZSBvYmplY3RzIHJlZmVyZW5jZWQgYnkgdGhlCitwdXNoZWQgb2JqZWN0cyBhcmUgYWxyZWFkeSBpbiB0aGUgdHJhbnNsYXRpb24gdGFibGUuIFRoZSBzaGExLWNvbnRlbnQKK29mIGVhY2ggb2JqZWN0IGJlaW5nIHB1c2hlZCBjYW4gYmUgcmVhZCBhcyBkZXNjcmliZWQgaW4gdGhlICJSZWFkaW5nCithbiBvYmplY3QncyBzaGExLWNvbnRlbnQiIHNlY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIHBhY2sgd3JpdHRlbiBieSBnaXQKK3NlbmQtcGFjay4KKworU2lnbmVkIENvbW1pdHMKK35+fn5+fn5+fn5+fn5+CitXZSBhZGQgYSBuZXcgZmllbGQgImdwZ3NpZy1zaGEyNTYiIHRvIHRoZSBjb21taXQgb2JqZWN0IGZvcm1hdCB0byBhbGxvdworc2lnbmluZyBjb21taXRzIHdpdGhvdXQgcmVseWluZyBvbiBTSEEtMS4gSXQgaXMgc2ltaWxhciB0byB0aGUKK2V4aXN0aW5nICJncGdzaWciIGZpZWxkLiBJdHMgc2lnbmVkIHBheWxvYWQgaXMgdGhlIHNoYTI1Ni1jb250ZW50IG9mIHRoZQorY29tbWl0IG9iamVjdCB3aXRoIGFueSAiZ3Bnc2lnIiBhbmQgImdwZ3NpZy1zaGEyNTYiIGZpZWxkcyByZW1vdmVkLgorCitUaGlzIG1lYW5zIGNvbW1pdHMgY2FuIGJlIHNpZ25lZAorMS4gdXNpbmcgU0hBLTEgb25seSwgYXMgaW4gZXhpc3Rpbmcgc2lnbmVkIGNvbW1pdCBvYmplY3RzCisyLiB1c2luZyBib3RoIFNIQS0xIGFuZCBTSEEtMjU2LCBieSB1c2luZyBib3RoIGdwZ3NpZy1zaGEyNTYgYW5kIGdwZ3NpZworICAgZmllbGRzLgorMy4gdXNpbmcgb25seSBTSEEtMjU2LCBieSBvbmx5IHVzaW5nIHRoZSBncGdzaWctc2hhMjU2IGZpZWxkLgorCitPbGQgdmVyc2lvbnMgb2YgImdpdCB2ZXJpZnktY29tbWl0IiBjYW4gdmVyaWZ5IHRoZSBncGdzaWcgc2lnbmF0dXJlIGluCitjYXNlcyAoMSkgYW5kICgyKSB3aXRob3V0IG1vZGlmaWNhdGlvbnMgYW5kIHZpZXcgY2FzZSAoMykgYXMgYW4KK29yZGluYXJ5IHVuc2lnbmVkIGNvbW1pdC4KKworU2lnbmVkIFRhZ3MKK35+fn5+fn5+fn5+CitXZSBhZGQgYSBuZXcgZmllbGQgImdwZ3NpZy1zaGEyNTYiIHRvIHRoZSB0YWcgb2JqZWN0IGZvcm1hdCB0byBhbGxvdworc2lnbmluZyB0YWdzIHdpdGhvdXQgcmVseWluZyBvbiBTSEEtMS4gSXRzIHNpZ25lZCBwYXlsb2FkIGlzIHRoZQorc2hhMjU2LWNvbnRlbnQgb2YgdGhlIHRhZyB3aXRoIGl0cyBncGdzaWctc2hhMjU2IGZpZWxkIGFuZCAiLS0tLS1CRUdJTiBQR1AKK1NJR05BVFVSRS0tLS0tIiBkZWxpbWl0ZWQgaW4tYm9keSBzaWduYXR1cmUgcmVtb3ZlZC4KKworVGhpcyBtZWFucyB0YWdzIGNhbiBiZSBzaWduZWQKKzEuIHVzaW5nIFNIQS0xIG9ubHksIGFzIGluIGV4aXN0aW5nIHNpZ25lZCB0YWcgb2JqZWN0cworMi4gdXNpbmcgYm90aCBTSEEtMSBhbmQgU0hBLTI1NiwgYnkgdXNpbmcgZ3Bnc2lnLXNoYTI1NiBhbmQgYW4gaW4tYm9keQorICAgc2lnbmF0dXJlLgorMy4gdXNpbmcgb25seSBTSEEtMjU2LCBieSBvbmx5IHVzaW5nIHRoZSBncGdzaWctc2hhMjU2IGZpZWxkLgorCitNZXJnZXRhZyBlbWJlZGRpbmcKK35+fn5+fn5+fn5+fn5+fn5+fgorVGhlIG1lcmdldGFnIGZpZWxkIGluIHRoZSBzaGExLWNvbnRlbnQgb2YgYSBjb21taXQgY29udGFpbnMgdGhlCitzaGExLWNvbnRlbnQgb2YgYSB0YWcgdGhhdCB3YXMgbWVyZ2VkIGJ5IHRoYXQgY29tbWl0LgorCitUaGUgbWVyZ2V0YWcgZmllbGQgaW4gdGhlIHNoYTI1Ni1jb250ZW50IG9mIHRoZSBzYW1lIGNvbW1pdCBjb250YWlucyB0aGUKK3NoYTI1Ni1jb250ZW50IG9mIHRoZSBzYW1lIHRhZy4KKworU3VibW9kdWxlcworfn5+fn5+fn5+fgorVG8gY29udmVydCByZWNvcmRlZCBzdWJtb2R1bGUgcG9pbnRlcnMsIHlvdSBuZWVkIHRvIGhhdmUgdGhlIGNvbnZlcnRlZAorc3VibW9kdWxlIHJlcG9zaXRvcnkgaW4gcGxhY2UuIFRoZSB0cmFuc2xhdGlvbiB0YWJsZSBvZiB0aGUgc3VibW9kdWxlCitjYW4gYmUgdXNlZCB0byBsb29rIHVwIHRoZSBuZXcgaGFzaC4KKworTG9vc2Ugb2JqZWN0cyBhbmQgdW5yZWFjaGFibGUgb2JqZWN0cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorRmFzdCBsb29rdXBzIGluIHRoZSBsb29zZS1vYmplY3QtaWR4IHJlcXVpcmUgdGhhdCB0aGUgbnVtYmVyIG9mIGxvb3NlCitvYmplY3RzIG5vdCBncm93IHRvbyBoaWdoLgorCisiZ2l0IGdjIC0tYXV0byIgY3VycmVudGx5IHdhaXRzIGZvciB0aGVyZSB0byBiZSA2NzAwIGxvb3NlIG9iamVjdHMKK3ByZXNlbnQgYmVmb3JlIGNvbnNvbGlkYXRpbmcgdGhlbSBpbnRvIGEgcGFja2ZpbGUuIFdlIHdpbGwgbmVlZCB0bworbWVhc3VyZSB0byBmaW5kIGEgbW9yZSBhcHByb3ByaWF0ZSB0aHJlc2hvbGQgZm9yIGl0IHRvIHVzZS4KKworImdpdCBnYyAtLWF1dG8iIGN1cnJlbnRseSB3YWl0cyBmb3IgdGhlcmUgdG8gYmUgNTAgcGFja3MgcHJlc2VudAorYmVmb3JlIGNvbWJpbmluZyBwYWNrZmlsZXMuIFBhY2tpbmcgbG9vc2Ugb2JqZWN0cyBtb3JlIGFnZ3Jlc3NpdmVseQorbWF5IGNhdXNlIHRoZSBudW1iZXIgb2YgcGFjayBmaWxlcyB0byBncm93IHRvbyBxdWlja2x5LiBUaGlzIGNhbiBiZQorbWl0aWdhdGVkIGJ5IHVzaW5nIGEgc3RyYXRlZ3kgc2ltaWxhciB0byBNYXJ0aW4gRmljaydzIGV4cG9uZW50aWFsCityb2xsaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiBzY3JpcHQ6CitodHRwczovL2dlcnJpdC1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbS9jL2dlcnJpdC8rLzM1MjE1CisKKyJnaXQgZ2MiIGN1cnJlbnRseSBleHBlbHMgYW55IHVucmVhY2hhYmxlIG9iamVjdHMgaXQgZW5jb3VudGVycyBpbgorcGFjayBmaWxlcyB0byBsb29zZSBvYmplY3RzIGluIGFuIGF0dGVtcHQgdG8gcHJldmVudCBhIHJhY2Ugd2hlbgorcHJ1bmluZyB0aGVtIChpbiBjYXNlIGFub3RoZXIgcHJvY2VzcyBpcyBzaW11bHRhbmVvdXNseSB3cml0aW5nIGEgbmV3CitvYmplY3QgdGhhdCByZWZlcnMgdG8gdGhlIGFib3V0LXRvLWJlLWRlbGV0ZWQgb2JqZWN0KS4gVGhpcyBsZWFkcyB0bworYW4gZXhwbG9zaW9uIGluIHRoZSBudW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyBwcmVzZW50IGFuZCBkaXNrIHNwYWNlCit1c2FnZSBkdWUgdG8gdGhlIG9iamVjdHMgaW4gZGVsdGEgZm9ybSBiZWluZyByZXBsYWNlZCB3aXRoIGluZGVwZW5kZW50Citsb29zZSBvYmplY3RzLiAgV29yc2UsIHRoZSByYWNlIGlzIHN0aWxsIHByZXNlbnQgZm9yIGxvb3NlIG9iamVjdHMuCisKK0luc3RlYWQsICJnaXQgZ2MiIHdpbGwgbmVlZCB0byBtb3ZlIHVucmVhY2hhYmxlIG9iamVjdHMgdG8gYSBuZXcKK3BhY2tmaWxlIG1hcmtlZCBhcyBVTlJFQUNIQUJMRV9HQVJCQUdFICh1c2luZyB0aGUgUFNSQyBmaWVsZDsgc2VlCitiZWxvdykuIFRvIGF2b2lkIHRoZSByYWNlIHdoZW4gd3JpdGluZyBuZXcgb2JqZWN0cyByZWZlcnJpbmcgdG8gYW4KK2Fib3V0LXRvLWJlLWRlbGV0ZWQgb2JqZWN0LCBjb2RlIHBhdGhzIHRoYXQgd3JpdGUgbmV3IG9iamVjdHMgd2lsbAorbmVlZCB0byBjb3B5IGFueSBvYmplY3RzIGZyb20gVU5SRUFDSEFCTEVfR0FSQkFHRSBwYWNrcyB0aGF0IHRoZXkKK3JlZmVyIHRvIG5ldywgbm9uLVVOUkVBQ0hBQkxFX0dBUkJBR0UgcGFja3MgKG9yIGxvb3NlIG9iamVjdHMpLgorVU5SRUFDSEFCTEVfR0FSQkFHRSBhcmUgdGhlbiBzYWZlIHRvIGRlbGV0ZSBpZiB0aGVpciBjcmVhdGlvbiB0aW1lIChhcworaW5kaWNhdGVkIGJ5IHRoZSBmaWxlJ3MgbXRpbWUpIGlzIGxvbmcgZW5vdWdoIGFnby4KKworVG8gYXZvaWQgYSBwcm9saWZlcmF0aW9uIG9mIFVOUkVBQ0hBQkxFX0dBUkJBR0UgcGFja3MsIHRoZXkgY2FuIGJlCitjb21iaW5lZCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuIElmICJnYy5nYXJiYWdlVHRsIiBpcyBzZXQgdG8KK2dyZWF0ZXIgdGhhbiBvbmUgZGF5LCB0aGVuIHBhY2tzIGNyZWF0ZWQgd2l0aGluIGEgc2luZ2xlIGNhbGVuZGFyIGRheSwKK1VUQywgY2FuIGJlIGNvYWxlc2NlZCB0b2dldGhlci4gVGhlIHJlc3VsdGluZyBwYWNrZmlsZSB3b3VsZCBoYXZlIGFuCittdGltZSBiZWZvcmUgbWlkbmlnaHQgb24gdGhhdCBkYXksIHNvIHRoaXMgbWFrZXMgdGhlIGVmZmVjdGl2ZSBtYXhpbXVtCit0dGwgdGhlIGdhcmJhZ2VUdGwgKyAxIGRheS4gSWYgImdjLmdhcmJhZ2VUdGwiIGlzIGxlc3MgdGhhbiBvbmUgZGF5LAordGhlbiB3ZSBkaXZpZGUgdGhlIGNhbGVuZGFyIGRheSBpbnRvIGludGVydmFscyBvbmUtdGhpcmQgb2YgdGhhdCB0dGwKK2luIGR1cmF0aW9uLiBQYWNrcyBjcmVhdGVkIHdpdGhpbiB0aGUgc2FtZSBpbnRlcnZhbCBjYW4gYmUgY29hbGVzY2VkCit0b2dldGhlci4gVGhlIHJlc3VsdGluZyBwYWNrZmlsZSB3b3VsZCBoYXZlIGFuIG10aW1lIGJlZm9yZSB0aGUgZW5kIG9mCit0aGUgaW50ZXJ2YWwsIHNvIHRoaXMgbWFrZXMgdGhlIGVmZmVjdGl2ZSBtYXhpbXVtIHR0bCBlcXVhbCB0byB0aGUKK2dhcmJhZ2VUdGwgKiA0LzMuCisKK1RoaXMgcnVsZSBjb21lcyBmcm9tIFRoaXJ1bWFsYSBSZWRkeSBNdXRjaHVrb3RhJ3MgSkdpdCBjaGFuZ2UKK2h0dHBzOi8vZ2l0LmVjbGlwc2Uub3JnL3IvOTA0NjUuCisKK1RoZSBVTlJFQUNIQUJMRV9HQVJCQUdFIHNldHRpbmcgZ29lcyBpbiB0aGUgUFNSQyBmaWVsZCBvZiB0aGUgcGFjaworaW5kZXguIE1vcmUgZ2VuZXJhbGx5LCB0aGF0IGZpZWxkIGluZGljYXRlcyB3aGVyZSBhIHBhY2sgY2FtZSBmcm9tOgorCisgLSAxIChQQUNLX1NPVVJDRV9SRUNFSVZFKSBmb3IgYSBwYWNrIHJlY2VpdmVkIG92ZXIgdGhlIG5ldHdvcmsKKyAtIDIgKFBBQ0tfU09VUkNFX0FVVE8pIGZvciBhIHBhY2sgY3JlYXRlZCBieSBhIGxpZ2h0d2VpZ2h0CisgICAiZ2MgLS1hdXRvIiBvcGVyYXRpb24KKyAtIDMgKFBBQ0tfU09VUkNFX0dDKSBmb3IgYSBwYWNrIGNyZWF0ZWQgYnkgYSBmdWxsIGdjCisgLSA0IChQQUNLX1NPVVJDRV9VTlJFQUNIQUJMRV9HQVJCQUdFKSBmb3IgcG90ZW50aWFsIGdhcmJhZ2UKKyAgIGRpc2NvdmVyZWQgYnkgZ2MKKyAtIDUgKFBBQ0tfU09VUkNFX0lOU0VSVCkgZm9yIGxvY2FsbHkgY3JlYXRlZCBvYmplY3RzIHRoYXQgd2VyZQorICAgd3JpdHRlbiBkaXJlY3RseSB0byBhIHBhY2sgZmlsZSwgZS5nLiBmcm9tICJnaXQgYWRkIC4iCisKK1RoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGFuZCBmb3IgImdjIC0tYXV0byIgdG8KK21ha2UgYXBwcm9wcmlhdGUgY2hvaWNlcyBhYm91dCB3aGljaCBwYWNrcyB0byBjb2FsZXNjZS4KKworQ2F2ZWF0cworLS0tLS0tLQorSW52YWxpZCBvYmplY3RzCit+fn5+fn5+fn5+fn5+fn4KK1RoZSBjb252ZXJzaW9uIGZyb20gc2hhMS1jb250ZW50IHRvIHNoYTI1Ni1jb250ZW50IHJldGFpbnMgYW55Citicm9rZW5uZXNzIGluIHRoZSBvcmlnaW5hbCBvYmplY3QgKGUuZy4sIHRyZWUgZW50cnkgbW9kZXMgZW5jb2RlZCB3aXRoCitsZWFkaW5nIDAsIHRyZWUgb2JqZWN0cyB3aG9zZSBwYXRocyBhcmUgbm90IHNvcnRlZCBjb3JyZWN0bHksIGFuZAorY29tbWl0IG9iamVjdHMgd2l0aG91dCBhbiBhdXRob3Igb3IgY29tbWl0dGVyKS4gVGhpcyBpcyBhIGRlbGliZXJhdGUKK2ZlYXR1cmUgb2YgdGhlIGRlc2lnbiB0byBhbGxvdyB0aGUgY29udmVyc2lvbiB0byByb3VuZC10cmlwLgorCitNb3JlIHByb2ZvdW5kbHkgYnJva2VuIG9iamVjdHMgKGUuZy4sIGEgY29tbWl0IHdpdGggYSB0cnVuY2F0ZWQgInRyZWUiCitoZWFkZXIgbGluZSkgY2Fubm90IGJlIGNvbnZlcnRlZCBidXQgd2VyZSBub3QgdXNhYmxlIGJ5IGN1cnJlbnQgR2l0Cithbnl3YXkuCisKK1NoYWxsb3cgY2xvbmUgYW5kIHN1Ym1vZHVsZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0JlY2F1c2UgaXQgcmVxdWlyZXMgYWxsIHJlZmVyZW5jZWQgb2JqZWN0cyB0byBiZSBhdmFpbGFibGUgaW4gdGhlCitsb2NhbGx5IGdlbmVyYXRlZCB0cmFuc2xhdGlvbiB0YWJsZSwgdGhpcyBkZXNpZ24gZG9lcyBub3Qgc3VwcG9ydAorc2hhbGxvdyBjbG9uZSBvciB1bmZldGNoZWQgc3VibW9kdWxlcy4gUHJvdG9jb2wgaW1wcm92ZW1lbnRzIG1pZ2h0CithbGxvdyBsaWZ0aW5nIHRoaXMgcmVzdHJpY3Rpb24uCisKK0FsdGVybmF0ZXMKK35+fn5+fn5+fn4KK0ZvciB0aGUgc2FtZSByZWFzb24sIGEgc2hhMjU2IHJlcG9zaXRvcnkgY2Fubm90IGJvcnJvdyBvYmplY3RzIGZyb20gYQorc2hhMSByZXBvc2l0b3J5IHVzaW5nIG9iamVjdHMvaW5mby9hbHRlcm5hdGVzIG9yCiskR0lUX0FMVEVSTkFURV9PQkpFQ1RfUkVQT1NJVE9SSUVTLgorCitnaXQgbm90ZXMKK35+fn5+fn5+fgorVGhlICJnaXQgbm90ZXMiIHRvb2wgYW5ub3RhdGVzIG9iamVjdHMgdXNpbmcgdGhlaXIgc2hhMS1uYW1lIGFzIGtleS4KK1RoaXMgZGVzaWduIGRvZXMgbm90IGRlc2NyaWJlIGEgd2F5IHRvIG1pZ3JhdGUgbm90ZXMgdHJlZXMgdG8gdXNlCitzaGEyNTYtbmFtZXMuIFRoYXQgbWlncmF0aW9uIGlzIGV4cGVjdGVkIHRvIGhhcHBlbiBzZXBhcmF0ZWx5IChmb3IKK2V4YW1wbGUgdXNpbmcgYSBmaWxlIGF0IHRoZSByb290IG9mIHRoZSBub3RlcyB0cmVlIHRvIGRlc2NyaWJlIHdoaWNoCitoYXNoIGl0IHVzZXMpLgorCitTZXJ2ZXItc2lkZSBjb3N0Cit+fn5+fn5+fn5+fn5+fn5+CitVbnRpbCBHaXQgcHJvdG9jb2wgZ2FpbnMgU0hBLTI1NiBzdXBwb3J0LCB1c2luZyBTSEEtMjU2IGJhc2VkIHN0b3JhZ2UKK29uIHB1YmxpYy1mYWNpbmcgR2l0IHNlcnZlcnMgaXMgc3Ryb25nbHkgZGlzY291cmFnZWQuIE9uY2UgR2l0Citwcm90b2NvbCBnYWlucyBTSEEtMjU2IHN1cHBvcnQsIFNIQS0yNTYgYmFzZWQgc2VydmVycyBhcmUgbGlrZWx5IG5vdAordG8gc3VwcG9ydCBTSEEtMSBjb21wYXRpYmlsaXR5LCB0byBhdm9pZCB3aGF0IG1heSBiZSBhIHZlcnkgZXhwZW5zaXZlCitoYXNoIHJlLWVuY29kZSBkdXJpbmcgY2xvbmUgYW5kIHRvIGVuY291cmFnZSBwZWVycyB0byBtb2Rlcm5pemUuCisKK1RoZSBkZXNpZ24gZGVzY3JpYmVkIGhlcmUgYWxsb3dzIGZldGNoZXMgYnkgU0hBLTEgY2xpZW50cyBvZiBhCitwZXJzb25hbCBTSEEtMjU2IHJlcG9zaXRvcnkgYmVjYXVzZSBpdCdzIG5vdCBtdWNoIG1vcmUgZGlmZmljdWx0IHRoYW4KK2FsbG93aW5nIHB1c2hlcyBmcm9tIHRoYXQgcmVwb3NpdG9yeS4gVGhpcyBzdXBwb3J0IG5lZWRzIHRvIGJlIGd1YXJkZWQKK2J5IGEgY29uZmlndXJhdGlvbiBvcHRpb24gLS0tIHNlcnZlcnMgbGlrZSBnaXQua2VybmVsLm9yZyB0aGF0IHNlcnZlIGEKK2xhcmdlIG51bWJlciBvZiBjbGllbnRzIHdvdWxkIG5vdCBiZSBleHBlY3RlZCB0byBiZWFyIHRoYXQgY29zdC4KKworTWVhbmluZyBvZiBzaWduYXR1cmVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RoZSBzaWduZWQgcGF5bG9hZCBmb3Igc2lnbmVkIGNvbW1pdHMgYW5kIHRhZ3MgZG9lcyBub3QgZXhwbGljaXRseQorbmFtZSB0aGUgaGFzaCB1c2VkIHRvIGlkZW50aWZ5IG9iamVjdHMuIElmIHNvbWUgZGF5IEdpdCBhZG9wdHMgYSBuZXcKK2hhc2ggZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIGN1cnJlbnQgU0hBLTEgKDQwCitoZXhhZGVjaW1hbCBkaWdpdCkgb3IgU0hBLTI1NiAoNjQgaGV4YWRlY2ltYWwgZGlnaXQpIG9iamVjdHMgdGhlbiB0aGUKK2ludGVudCBiZWhpbmQgdGhlIFBHUCBzaWduZWQgcGF5bG9hZCBpbiBhbiBvYmplY3Qgc2lnbmF0dXJlIGlzCit1bmNsZWFyOgorCisJb2JqZWN0IGU3ZTA3ZDVhNGZjYzJhMjAzZDk4NzM5NjhhZDNlNmJkNGQ3NDE5ZDcKKwl0eXBlIGNvbW1pdAorCXRhZyB2Mi4xMi4wCisJdGFnZ2VyIEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gMTQ4Nzk2MjIwNSAtMDgwMAorCisJR2l0IDIuMTIKKworRG9lcyB0aGlzIG1lYW4gR2l0IHYyLjEyLjAgaXMgdGhlIGNvbW1pdCB3aXRoIHNoYTEtbmFtZQorZTdlMDdkNWE0ZmNjMmEyMDNkOTg3Mzk2OGFkM2U2YmQ0ZDc0MTlkNyBvciB0aGUgY29tbWl0IHdpdGgKK25ldy00MC1kaWdpdC1oYXNoLW5hbWUgZTdlMDdkNWE0ZmNjMmEyMDNkOTg3Mzk2OGFkM2U2YmQ0ZDc0MTlkNz8KKworRm9ydHVuYXRlbHkgU0hBLTI1NiBhbmQgU0hBLTEgaGF2ZSBkaWZmZXJlbnQgbGVuZ3Rocy4gSWYgR2l0IHN0YXJ0cwordXNpbmcgYW5vdGhlciBoYXNoIHdpdGggdGhlIHNhbWUgbGVuZ3RoIHRvIG5hbWUgb2JqZWN0cywgdGhlbiBpdCB3aWxsCituZWVkIHRvIGNoYW5nZSB0aGUgZm9ybWF0IG9mIHNpZ25lZCBwYXlsb2FkcyB1c2luZyB0aGF0IGhhc2ggdG8KK2FkZHJlc3MgdGhpcyBpc3N1ZS4KKworT2JqZWN0IG5hbWVzIG9uIHRoZSBjb21tYW5kIGxpbmUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUbyBzdXBwb3J0IHRoZSB0cmFuc2l0aW9uIChzZWUgVHJhbnNpdGlvbiBwbGFuIGJlbG93KSwgdGhpcyBkZXNpZ24KK3N1cHBvcnRzIGZvdXIgZGlmZmVyZW50IG1vZGVzIG9mIG9wZXJhdGlvbjoKKworIDEuICgiZGFyayBsYXVuY2giKSBUcmVhdCBvYmplY3QgbmFtZXMgaW5wdXQgYnkgdGhlIHVzZXIgYXMgU0hBLTEgYW5kCisgICAgY29udmVydCBhbnkgb2JqZWN0IG5hbWVzIHdyaXR0ZW4gdG8gb3V0cHV0IHRvIFNIQS0xLCBidXQgc3RvcmUKKyAgICBvYmplY3RzIHVzaW5nIFNIQS0yNTYuICBUaGlzIGFsbG93cyB1c2VycyB0byB0ZXN0IHRoZSBjb2RlIHdpdGggbm8KKyAgICB2aXNpYmxlIGJlaGF2aW9yIGNoYW5nZSBleGNlcHQgZm9yIHBlcmZvcm1hbmNlLiAgVGhpcyBhbGxvd3MKKyAgICBhbGxvd3MgcnVubmluZyBldmVuIHRlc3RzIHRoYXQgYXNzdW1lIHRoZSBTSEEtMSBoYXNoIGZ1bmN0aW9uLCB0bworICAgIHNhbml0eS1jaGVjayB0aGUgYmVoYXZpb3Igb2YgdGhlIG5ldyBtb2RlLgorCisgMi4gKCJlYXJseSB0cmFuc2l0aW9uIikgQWxsb3cgYm90aCBTSEEtMSBhbmQgU0hBLTI1NiBvYmplY3QgbmFtZXMgaW4KKyAgICBpbnB1dC4gQW55IG9iamVjdCBuYW1lcyB3cml0dGVuIHRvIG91dHB1dCB1c2UgU0hBLTEuIFRoaXMgYWxsb3dzCisgICAgdXNlcnMgdG8gY29udGludWUgdG8gbWFrZSB1c2Ugb2YgU0hBLTEgdG8gY29tbXVuaWNhdGUgd2l0aCBwZWVycworICAgIChlLmcuIGJ5IGVtYWlsKSB0aGF0IGhhdmUgbm90IG1pZ3JhdGVkIHlldCBhbmQgcHJlcGFyZXMgZm9yIG1vZGUgMy4KKworIDMuICgibGF0ZSB0cmFuc2l0aW9uIikgQWxsb3cgYm90aCBTSEEtMSBhbmQgU0hBLTI1NiBvYmplY3QgbmFtZXMgaW4KKyAgICBpbnB1dC4gQW55IG9iamVjdCBuYW1lcyB3cml0dGVuIHRvIG91dHB1dCB1c2UgU0hBLTI1Ni4gSW4gdGhpcworICAgIG1vZGUsIHVzZXJzIGFyZSB1c2luZyBhIG1vcmUgc2VjdXJlIG9iamVjdCBuYW1pbmcgbWV0aG9kIGJ5CisgICAgZGVmYXVsdC4gIFRoZSBkaXNydXB0aW9uIGlzIG1pbmltYWwgYXMgbG9uZyBhcyBtb3N0IG9mIHRoZWlyIHBlZXJzCisgICAgYXJlIGluIG1vZGUgMiBvciBtb2RlIDMuCisKKyA0LiAoInBvc3QtdHJhbnNpdGlvbiIpIFRyZWF0IG9iamVjdCBuYW1lcyBpbnB1dCBieSB0aGUgdXNlciBhcworICAgIFNIQS0yNTYgYW5kIHdyaXRlIG91dHB1dCB1c2luZyBTSEEtMjU2LiBUaGlzIGlzIHNhZmVyIHRoYW4gbW9kZSAzCisgICAgYmVjYXVzZSB0aGVyZSBpcyBsZXNzIHJpc2sgdGhhdCBpbnB1dCBpcyBpbmNvcnJlY3RseSBpbnRlcnByZXRlZAorICAgIHVzaW5nIHRoZSB3cm9uZyBoYXNoIGZ1bmN0aW9uLgorCitUaGUgbW9kZSBpcyBzcGVjaWZpZWQgaW4gY29uZmlndXJhdGlvbi4KKworVGhlIHVzZXIgY2FuIGFsc28gZXhwbGljaXRseSBzcGVjaWZ5IHdoaWNoIGZvcm1hdCB0byB1c2UgZm9yIGEKK3BhcnRpY3VsYXIgcmV2aXNpb24gc3BlY2lmaWVyIGFuZCBmb3Igb3V0cHV0LCBvdmVycmlkaW5nIHRoZSBtb2RlLiBGb3IKK2V4YW1wbGU6CisKK2dpdCAtLW91dHB1dC1mb3JtYXQ9c2hhMSBsb2cgYWJhYzg3YV57c2hhMX0uLmY3ODdjYWNee3NoYTI1Nn0KKworQ2hvaWNlIG9mIEhhc2gKKy0tLS0tLS0tLS0tLS0tCitJbiBlYXJseSAyMDA1LCBhcm91bmQgdGhlIHRpbWUgdGhhdCBHaXQgd2FzIHdyaXR0ZW4sIFhpYW95dW4gV2FuZywKK1lpcXVuIExpc2EgWWluLCBhbmQgSG9uZ2JvIFl1IGFubm91bmNlZCBhbiBhdHRhY2sgZmluZGluZyBTSEEtMQorY29sbGlzaW9ucyBpbiAyXjY5IG9wZXJhdGlvbnMuIEluIEF1Z3VzdCB0aGV5IHB1Ymxpc2hlZCBkZXRhaWxzLgorTHVja2lseSwgbm8gcHJhY3RpY2FsIGRlbW9uc3RyYXRpb25zIG9mIGEgY29sbGlzaW9uIGluIGZ1bGwgU0hBLTEgd2VyZQorcHVibGlzaGVkIHVudGlsIDEwIHllYXJzIGxhdGVyLCBpbiAyMDE3LgorCitHaXQgdjIuMTMuMCBhbmQgbGF0ZXIgc3Vic2VxdWVudGx5IG1vdmVkIHRvIGEgaGFyZGVuZWQgU0hBLTEKK2ltcGxlbWVudGF0aW9uIGJ5IGRlZmF1bHQgdGhhdCBtaXRpZ2F0ZXMgdGhlIFNIQXR0ZXJlZCBhdHRhY2ssIGJ1dAorU0hBLTEgaXMgc3RpbGwgYmVsaWV2ZWQgdG8gYmUgd2Vhay4KKworVGhlIGhhc2ggdG8gcmVwbGFjZSB0aGlzIGhhcmRlbmVkIFNIQS0xIHNob3VsZCBiZSBzdHJvbmdlciB0aGFuIFNIQS0xCit3YXM6IHdlIHdvdWxkIGxpa2UgaXQgdG8gYmUgdHJ1c3R3b3J0aHkgYW5kIHVzZWZ1bCBpbiBwcmFjdGljZSBmb3IgYXQKK2xlYXN0IDEwIHllYXJzLgorCitTb21lIG90aGVyIHJlbGV2YW50IHByb3BlcnRpZXM6CisKKzEuIEEgMjU2LWJpdCBoYXNoIChsb25nIGVub3VnaCB0byBtYXRjaCBjb21tb24gc2VjdXJpdHkgcHJhY3RpY2U7IG5vdAorICAgZXhjZXNzaXZlbHkgbG9uZyB0byBodXJ0IHBlcmZvcm1hbmNlIGFuZCBkaXNrIHVzYWdlKS4KKworMi4gSGlnaCBxdWFsaXR5IGltcGxlbWVudGF0aW9ucyBzaG91bGQgYmUgd2lkZWx5IGF2YWlsYWJsZSAoZS5nLiwgaW4KKyAgIE9wZW5TU0wgYW5kIEFwcGxlIENvbW1vbkNyeXB0bykuCisKKzMuIFRoZSBoYXNoIGZ1bmN0aW9uJ3MgcHJvcGVydGllcyBzaG91bGQgbWF0Y2ggR2l0J3MgbmVlZHMgKGUuZy4gR2l0CisgICByZXF1aXJlcyBjb2xsaXNpb24gYW5kIDJuZCBwcmVpbWFnZSByZXNpc3RhbmNlIGFuZCBkb2VzIG5vdCByZXF1aXJlCisgICBsZW5ndGggZXh0ZW5zaW9uIHJlc2lzdGFuY2UpLgorCis0LiBBcyBhIHRpZWJyZWFrZXIsIHRoZSBoYXNoIHNob3VsZCBiZSBmYXN0IHRvIGNvbXB1dGUgKGZvcnR1bmF0ZWx5CisgICBtYW55IGNvbnRlbmRlcnMgYXJlIGZhc3RlciB0aGFuIFNIQS0xKS4KKworV2UgY2hvb3NlIFNIQS0yNTYuCisKK1RyYW5zaXRpb24gcGxhbgorLS0tLS0tLS0tLS0tLS0tCitTb21lIGluaXRpYWwgc3RlcHMgY2FuIGJlIGltcGxlbWVudGVkIGluZGVwZW5kZW50bHkgb2Ygb25lIGFub3RoZXI6CistIGFkZGluZyBhIGhhc2ggZnVuY3Rpb24gQVBJICh2dGFibGUpCistIHRlYWNoaW5nIGZzY2sgdG8gdG9sZXJhdGUgdGhlIGdwZ3NpZy1zaGEyNTYgZmllbGQKKy0gZXhjbHVkaW5nIGdwZ3NpZy0qIGZyb20gdGhlIGZpZWxkcyBjb3BpZWQgYnkgImdpdCBjb21taXQgLS1hbWVuZCIKKy0gYW5ub3RhdGluZyB0ZXN0cyB0aGF0IGRlcGVuZCBvbiBTSEEtMSB2YWx1ZXMgd2l0aCBhIFNIQTEgdGVzdAorICBwcmVyZXF1aXNpdGUKKy0gdXNpbmcgInN0cnVjdCBvYmplY3RfaWQiLCBHSVRfTUFYX1JBV1NaLCBhbmQgR0lUX01BWF9IRVhTWgorICBjb25zaXN0ZW50bHkgaW5zdGVhZCBvZiAidW5zaWduZWQgY2hhciAqIiBhbmQgdGhlIGhhcmRjb2RlZAorICBjb25zdGFudHMgMjAgYW5kIDQwLgorLSBpbnRyb2R1Y2luZyBpbmRleCB2MworLSBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFBTUkMgZmllbGQgYW5kIHNhZmVyIG9iamVjdCBwcnVuaW5nCisKKworVGhlIGZpcnN0IHVzZXItdmlzaWJsZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgb2JqZWN0Rm9ybWF0CitleHRlbnNpb24gKHdpdGhvdXQgY29tcGF0T2JqZWN0Rm9ybWF0KS4gVGhpcyByZXF1aXJlczoKKy0gaW1wbGVtZW50aW5nIHRoZSBsb29zZS1vYmplY3QtaWR4CistIHRlYWNoaW5nIGZzY2sgYWJvdXQgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbgorLSB1c2luZyB0aGUgaGFzaCBmdW5jdGlvbiBBUEkgKHZ0YWJsZSkgd2hlbiBjb21wdXRpbmcgb2JqZWN0IG5hbWVzCistIHNpZ25pbmcgb2JqZWN0cyBhbmQgdmVyaWZ5aW5nIHNpZ25hdHVyZXMKKy0gcmVqZWN0aW5nIGF0dGVtcHRzIHRvIGZldGNoIGZyb20gb3IgcHVzaCB0byBhbiBpbmNvbXBhdGlibGUKKyAgcmVwb3NpdG9yeQorCitOZXh0IGNvbWVzIGludHJvZHVjdGlvbiBvZiBjb21wYXRPYmplY3RGb3JtYXQ6CistIHRyYW5zbGF0aW5nIG9iamVjdCBuYW1lcyBiZXR3ZWVuIG9iamVjdCBmb3JtYXRzCistIHRyYW5zbGF0aW5nIG9iamVjdCBjb250ZW50IGJldHdlZW4gb2JqZWN0IGZvcm1hdHMKKy0gZ2VuZXJhdGluZyBhbmQgdmVyaWZ5aW5nIHNpZ25hdHVyZXMgaW4gdGhlIGNvbXBhdCBmb3JtYXQKKy0gYWRkaW5nIGFwcHJvcHJpYXRlIGluZGV4IGVudHJpZXMgd2hlbiBhZGRpbmcgYSBuZXcgb2JqZWN0IHRvIHRoZQorICBvYmplY3Qgc3RvcmUKKy0gLS1vdXRwdXQtZm9ybWF0IG9wdGlvbgorLSBee3NoYTF9IGFuZCBee3NoYTI1Nn0gcmV2aXNpb24gbm90YXRpb24KKy0gY29uZmlndXJhdGlvbiB0byBzcGVjaWZ5IGRlZmF1bHQgaW5wdXQgYW5kIG91dHB1dCBmb3JtYXQgKHNlZQorICAiT2JqZWN0IG5hbWVzIG9uIHRoZSBjb21tYW5kIGxpbmUiIGFib3ZlKQorCitUaGUgbmV4dCBzdGVwIGlzIHN1cHBvcnRpbmcgZmV0Y2hlcyBhbmQgcHVzaGVzIHRvIFNIQS0xIHJlcG9zaXRvcmllczoKKy0gYWxsb3cgcHVzaGVzIHRvIGEgcmVwb3NpdG9yeSB1c2luZyB0aGUgY29tcGF0IGZvcm1hdAorLSBnZW5lcmF0ZSBhIHRvcG9sb2dpY2FsbHkgc29ydGVkIGxpc3Qgb2YgdGhlIFNIQS0xIG5hbWVzIG9mIGZldGNoZWQKKyAgb2JqZWN0cworLSBjb252ZXJ0IHRoZSBmZXRjaGVkIHBhY2tmaWxlIHRvIHNoYTI1NiBmb3JtYXQgYW5kIGdlbmVyYXRlIGFuIGlkeAorICBmaWxlCistIHJlLXNvcnQgdG8gbWF0Y2ggdGhlIG9yZGVyIG9mIG9iamVjdHMgaW4gdGhlIGZldGNoZWQgcGFja2ZpbGUKKworVGhlIGluZnJhc3RydWN0dXJlIHN1cHBvcnRpbmcgZmV0Y2ggYWxzbyBhbGxvd3MgY29udmVydGluZyBhbiBleGlzdGluZworcmVwb3NpdG9yeS4gSW4gY29udmVydGVkIHJlcG9zaXRvcmllcyBhbmQgbmV3IGNsb25lcywgZW5kIHVzZXJzIGNhbgorZ2FpbiBzdXBwb3J0IGZvciB0aGUgbmV3IGhhc2ggZnVuY3Rpb24gd2l0aG91dCBhbnkgdmlzaWJsZSBjaGFuZ2UgaW4KK2JlaGF2aW9yIChzZWUgImRhcmsgbGF1bmNoIiBpbiB0aGUgIk9iamVjdCBuYW1lcyBvbiB0aGUgY29tbWFuZCBsaW5lIgorc2VjdGlvbikuIEluIHBhcnRpY3VsYXIgdGhpcyBhbGxvd3MgdXNlcnMgdG8gdmVyaWZ5IFNIQS0yNTYgc2lnbmF0dXJlcworb24gb2JqZWN0cyBpbiB0aGUgcmVwb3NpdG9yeSwgYW5kIGl0IHNob3VsZCBlbnN1cmUgdGhlIHRyYW5zaXRpb24gY29kZQoraXMgc3RhYmxlIGluIHByb2R1Y3Rpb24gaW4gcHJlcGFyYXRpb24gZm9yIHVzaW5nIGl0IG1vcmUgd2lkZWx5LgorCitPdmVyIHRpbWUgcHJvamVjdHMgd291bGQgZW5jb3VyYWdlIHRoZWlyIHVzZXJzIHRvIGFkb3B0IHRoZSAiZWFybHkKK3RyYW5zaXRpb24iIGFuZCB0aGVuICJsYXRlIHRyYW5zaXRpb24iIG1vZGVzIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZQorbmV3LCBtb3JlIGZ1dHVyZXByb29mIFNIQS0yNTYgb2JqZWN0IG5hbWVzLgorCitXaGVuIG9iamVjdEZvcm1hdCBhbmQgY29tcGF0T2JqZWN0Rm9ybWF0IGFyZSBib3RoIHNldCwgY29tbWFuZHMKK2dlbmVyYXRpbmcgc2lnbmF0dXJlcyB3b3VsZCBnZW5lcmF0ZSBib3RoIFNIQS0xIGFuZCBTSEEtMjU2IHNpZ25hdHVyZXMKK2J5IGRlZmF1bHQgdG8gc3VwcG9ydCBib3RoIG5ldyBhbmQgb2xkIHVzZXJzLgorCitJbiBwcm9qZWN0cyB1c2luZyBTSEEtMjU2IGhlYXZpbHksIHVzZXJzIGNvdWxkIGJlIGVuY291cmFnZWQgdG8gYWRvcHQKK3RoZSAicG9zdC10cmFuc2l0aW9uIiBtb2RlIHRvIGF2b2lkIGFjY2lkZW50YWxseSBtYWtpbmcgaW1wbGljaXQgdXNlCitvZiBTSEEtMSBvYmplY3QgbmFtZXMuCisKK09uY2UgYSBjcml0aWNhbCBtYXNzIG9mIHVzZXJzIGhhdmUgdXBncmFkZWQgdG8gYSB2ZXJzaW9uIG9mIEdpdCB0aGF0CitjYW4gdmVyaWZ5IFNIQS0yNTYgc2lnbmF0dXJlcyBhbmQgaGF2ZSBjb252ZXJ0ZWQgdGhlaXIgZXhpc3RpbmcKK3JlcG9zaXRvcmllcyB0byBzdXBwb3J0IHZlcmlmeWluZyB0aGVtLCB3ZSBjYW4gYWRkIHN1cHBvcnQgZm9yIGEKK3NldHRpbmcgdG8gZ2VuZXJhdGUgb25seSBTSEEtMjU2IHNpZ25hdHVyZXMuIFRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYXQKK2xlYXN0IGEgeWVhciBsYXRlci4KKworVGhhdCBpcyBhbHNvIGEgZ29vZCBtb21lbnQgdG8gYWR2ZXJ0aXNlIHRoZSBhYmlsaXR5IHRvIGNvbnZlcnQKK3JlcG9zaXRvcmllcyB0byB1c2UgU0hBLTI1NiBvbmx5LCBzdHJpcHBpbmcgb3V0IGFsbCBTSEEtMSByZWxhdGVkCittZXRhZGF0YS4gVGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBieSBlbGltaW5hdGluZyB0cmFuc2xhdGlvbgorb3ZlcmhlYWQgYW5kIHNlY3VyaXR5IGJ5IGF2b2lkaW5nIHRoZSBwb3NzaWJpbGl0eSBvZiBhY2NpZGVudGFsbHkKK3JlbHlpbmcgb24gdGhlIHNhZmV0eSBvZiBTSEEtMS4KKworVXBkYXRpbmcgR2l0J3MgcHJvdG9jb2xzIHRvIGFsbG93IGEgc2VydmVyIHRvIHNwZWNpZnkgd2hpY2ggaGFzaAorZnVuY3Rpb25zIGl0IHN1cHBvcnRzIGlzIGFsc28gYW4gaW1wb3J0YW50IHBhcnQgb2YgdGhpcyB0cmFuc2l0aW9uLiBJdAoraXMgbm90IGRpc2N1c3NlZCBpbiBkZXRhaWwgaW4gdGhpcyBkb2N1bWVudCBidXQgdGhpcyB0cmFuc2l0aW9uIHBsYW4KK2Fzc3VtZXMgaXQgaGFwcGVucy4gOikKKworQWx0ZXJuYXRpdmVzIGNvbnNpZGVyZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitVcGdyYWRpbmcgZXZlcnlvbmUgd29ya2luZyBvbiBhIHBhcnRpY3VsYXIgcHJvamVjdCBvbiBhIGZsYWcgZGF5Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitQcm9qZWN0cyBsaWtlIHRoZSBMaW51eCBrZXJuZWwgYXJlIGxhcmdlIGFuZCBjb21wbGV4IGVub3VnaCB0aGF0CitmbGlwcGluZyB0aGUgc3dpdGNoIGZvciBhbGwgcHJvamVjdHMgYmFzZWQgb24gdGhlIHJlcG9zaXRvcnkgYXQgb25jZQoraXMgaW5mZWFzaWJsZS4KKworTm90IG9ubHkgd291bGQgYWxsIGRldmVsb3BlcnMgYW5kIHNlcnZlciBvcGVyYXRvcnMgc3VwcG9ydGluZworZGV2ZWxvcGVycyBoYXZlIHRvIHN3aXRjaCBvbiB0aGUgc2FtZSBmbGFnIGRheSwgYnV0IHN1cHBvcnRpbmcgdG9vbGluZworKGNvbnRpbnVvdXMgaW50ZWdyYXRpb24sIGNvZGUgcmV2aWV3LCBidWcgdHJhY2tlcnMsIGV0Yykgd291bGQgaGF2ZSB0bworYmUgYWRhcHRlZCBhcyB3ZWxsLiBUaGlzIGFsc28gbWFrZXMgaXQgZGlmZmljdWx0IHRvIGdldCBlYXJseSBmZWVkYmFjaworZnJvbSBzb21lIHByb2plY3QgcGFydGljaXBhbnRzIHRlc3RpbmcgYmVmb3JlIGl0IGlzIHRpbWUgZm9yIG1hc3MKK2Fkb3B0aW9uLgorCitVc2luZyBoYXNoIGZ1bmN0aW9ucyBpbiBwYXJhbGxlbAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyhlLmcuIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMjcwOC44OTEzLjg2NDA0OS40NTIyNTJAY2hpYXJrLmdyZWVuZW5kLm9yZy51ay8gKQorT2JqZWN0cyBuZXdseSBjcmVhdGVkIHdvdWxkIGJlIGFkZHJlc3NlZCBieSB0aGUgbmV3IGhhc2gsIGJ1dCBpbnNpZGUKK3N1Y2ggYW4gb2JqZWN0IChlLmcuIGNvbW1pdCkgaXQgaXMgc3RpbGwgcG9zc2libGUgdG8gYWRkcmVzcyBvYmplY3RzCit1c2luZyB0aGUgb2xkIGhhc2ggZnVuY3Rpb24uCisqIFlvdSBjYW5ub3QgdHJ1c3QgaXRzIGhpc3RvcnkgKG5lZWRlZCBmb3IgYmlzZWN0YWJpbGl0eSkgaW4gdGhlCisgIGZ1dHVyZSB3aXRob3V0IGZ1cnRoZXIgd29yaworKiBNYWludGVuYW5jZSBidXJkZW4gYXMgdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgaGFzaCBmdW5jdGlvbnMgZ3Jvd3MKKyAgKHRoZXkgd2lsbCBuZXZlciBnbyBhd2F5LCBzbyB0aGV5IGFjY3VtdWxhdGUpLiBJbiB0aGlzIHByb3Bvc2FsLCBieQorICBjb21wYXJpc29uLCBjb252ZXJ0ZWQgb2JqZWN0cyBsb3NlIGFsbCByZWZlcmVuY2VzIHRvIFNIQS0xLgorCitTaWduZWQgb2JqZWN0cyB3aXRoIG11bHRpcGxlIGhhc2hlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0luc3RlYWQgb2YgaW50cm9kdWNpbmcgdGhlIGdwZ3NpZy1zaGEyNTYgZmllbGQgaW4gY29tbWl0IGFuZCB0YWcgb2JqZWN0cworZm9yIHNoYTI1Ni1jb250ZW50IGJhc2VkIHNpZ25hdHVyZXMsIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGRlc2lnbgorYWRkZWQgImhhc2ggc2hhMjU2IDxzaGEyNTYtbmFtZT4iIGZpZWxkcyB0byBzdHJlbmd0aGVuIHRoZSBleGlzdGluZworc2hhMS1jb250ZW50IGJhc2VkIHNpZ25hdHVyZXMuCisKK0luIG90aGVyIHdvcmRzLCBhIHNpbmdsZSBzaWduYXR1cmUgd2FzIHVzZWQgdG8gYXR0ZXN0IHRvIHRoZSBvYmplY3QKK2NvbnRlbnQgdXNpbmcgYm90aCBoYXNoIGZ1bmN0aW9ucy4gVGhpcyBoYWQgc29tZSBhZHZhbnRhZ2VzOgorKiBVc2luZyBvbmUgc2lnbmF0dXJlIGluc3RlYWQgb2YgdHdvIHNwZWVkcyB1cCB0aGUgc2lnbmluZyBwcm9jZXNzLgorKiBIYXZpbmcgb25lIHNpZ25lZCBwYXlsb2FkIHdpdGggYm90aCBoYXNoZXMgYWxsb3dzIHRoZSBzaWduZXIgdG8KKyAgYXR0ZXN0IHRvIHRoZSBzaGExLW5hbWUgYW5kIHNoYTI1Ni1uYW1lIHJlZmVycmluZyB0byB0aGUgc2FtZSBvYmplY3QuCisqIEFsbCB1c2VycyBjb25zdW1lIHRoZSBzYW1lIHNpZ25hdHVyZS4gQnJva2VuIHNpZ25hdHVyZXMgYXJlIGxpa2VseQorICB0byBiZSBkZXRlY3RlZCBxdWlja2x5IHVzaW5nIGN1cnJlbnQgdmVyc2lvbnMgb2YgZ2l0LgorCitIb3dldmVyLCBpdCBhbHNvIGNhbWUgd2l0aCBkaXNhZHZhbnRhZ2VzOgorKiBWZXJpZnlpbmcgYSBzaWduZWQgb2JqZWN0IHJlcXVpcmVzIGFjY2VzcyB0byB0aGUgc2hhMS1uYW1lcyBvZiBhbGwKKyAgb2JqZWN0cyBpdCByZWZlcmVuY2VzLCBldmVuIGFmdGVyIHRoZSB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlIGFuZAorICB0cmFuc2xhdGlvbiB0YWJsZSBpcyBubyBsb25nZXIgbmVlZGVkIGZvciBhbnl0aGluZyBlbHNlLiBUbyBzdXBwb3J0CisgIHRoaXMsIHRoZSBkZXNpZ24gYWRkZWQgZmllbGRzIHN1Y2ggYXMgImhhc2ggc2hhMSB0cmVlIDxzaGExLW5hbWU+IgorICBhbmQgImhhc2ggc2hhMSBwYXJlbnQgPHNoYTEtbmFtZT4iIHRvIHRoZSBzaGEyNTYtY29udGVudCBvZiBhIHNpZ25lZAorICBjb21taXQsIGNvbXBsaWNhdGluZyB0aGUgY29udmVyc2lvbiBwcm9jZXNzLgorKiBBbGxvd2luZyBzaWduZWQgb2JqZWN0cyB3aXRob3V0IGEgc2hhMSAoZm9yIGFmdGVyIHRoZSB0cmFuc2l0aW9uIGlzCisgIGNvbXBsZXRlKSBjb21wbGljYXRlZCB0aGUgZGVzaWduIGZ1cnRoZXIsIHJlcXVpcmluZyBhICJub2hhc2ggc2hhMSIKKyAgZmllbGQgdG8gc3VwcHJlc3MgaW5jbHVkaW5nICJoYXNoIHNoYTEiIGZpZWxkcyBpbiB0aGUgc2hhMjU2LWNvbnRlbnQKKyAgYW5kIHNpZ25lZCBwYXlsb2FkLgorCitMYXppbHkgcG9wdWxhdGVkIHRyYW5zbGF0aW9uIHRhYmxlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitTb21lIG9mIHRoZSB3b3JrIG9mIGJ1aWxkaW5nIHRoZSB0cmFuc2xhdGlvbiB0YWJsZSBjb3VsZCBiZSBkZWZlcnJlZCB0bworcHVzaCB0aW1lLCBidXQgdGhhdCB3b3VsZCBzaWduaWZpY2FudGx5IGNvbXBsaWNhdGUgYW5kIHNsb3cgZG93biBwdXNoZXMuCitDYWxjdWxhdGluZyB0aGUgc2hhMS1uYW1lIGF0IG9iamVjdCBjcmVhdGlvbiB0aW1lIGF0IHRoZSBzYW1lIHRpbWUgaXQgaXMKK2JlaW5nIHN0cmVhbWVkIHRvIGRpc2sgYW5kIGhhdmluZyBpdHMgc2hhMjU2LW5hbWUgY2FsY3VsYXRlZCBzaG91bGQgYmUKK2FuIGFjY2VwdGFibGUgY29zdC4KKworRG9jdW1lbnQgSGlzdG9yeQorLS0tLS0tLS0tLS0tLS0tLQorCisyMDE3LTAzLTAzCitibXdpbGxAZ29vZ2xlLmNvbSwgam9uYXRoYW50YW5teUBnb29nbGUuY29tLCBqcm5pZWRlckBnbWFpbC5jb20sCitzYmVsbGVyQGdvb2dsZS5jb20KKworSW5pdGlhbCB2ZXJzaW9uIHNlbnQgdG8KK2h0dHA6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwMzA0MDExMjUxLkdBMjY3ODlAYWllZGUubXR2LmNvcnAuZ29vZ2xlLmNvbQorCisyMDE3LTAzLTAzIGpybmllZGVyQGdtYWlsLmNvbQorSW5jb3Jwb3JhdGVkIHN1Z2dlc3Rpb25zIGZyb20gam9uYXRoYW50YW5teSBhbmQgc2JlbGxlcjoKKyogZGVzY3JpYmUgcHVycG9zZSBvZiBzaWduZWQgb2JqZWN0cyB3aXRoIGVhY2ggaGFzaCB0eXBlCisqIHJlZGVmaW5lIHNpZ25lZCBvYmplY3QgdmVyaWZpY2F0aW9uIHVzaW5nIG9iamVjdCBjb250ZW50IHVuZGVyIHRoZQorICBmaXJzdCBoYXNoIGZ1bmN0aW9uCisKKzIwMTctMDMtMDYganJuaWVkZXJAZ21haWwuY29tCisqIFVzZSBTSEEzLTI1NiBpbnN0ZWFkIG9mIFNIQTIgKHRoYW5rcywgTGludXMgYW5kIGJyaWFuIG0uIGNhcmxzb24pLlsxXVsyXQorKiBNYWtlIHNoYTMtYmFzZWQgc2lnbmF0dXJlcyBhIHNlcGFyYXRlIGZpZWxkLCBhdm9pZGluZyB0aGUgbmVlZCBmb3IKKyAgImhhc2giIGFuZCAibm9oYXNoIiBmaWVsZHMgKHRoYW5rcyB0byBwZWZmWzNdKS4KKyogQWRkIGEgc29ydGluZyBwaGFzZSB0byBmZXRjaCAodGhhbmtzIHRvIEp1bmlvIGZvciBub3RpY2luZyB0aGUgbmVlZAorICBmb3IgdGhpcykuCisqIE9taXQgYmxvYnMgZnJvbSB0aGUgdG9wb2xvZ2ljYWwgc29ydCBkdXJpbmcgZmV0Y2ggKHRoYW5rcyB0byBwZWZmKS4KKyogRGlzY3VzcyBhbHRlcm5hdGVzLCBnaXQgbm90ZXMsIGFuZCBnaXQgc2VydmVycyBpbiB0aGUgY2F2ZWF0cworICBzZWN0aW9uICh0aGFua3MgdG8gSnVuaW8gSGFtYW5vLCBicmlhbiBtLiBjYXJsc29uWzRdLCBhbmQgU2hhd24KKyAgUGVhcmNlKS4KKyogQ2xhcmlmeSBsYW5ndWFnZSB0aHJvdWdob3V0ICh0aGFua3MgdG8gdmFyaW91cyBjb21tZW50ZXJzLAorICBlc3BlY2lhbGx5IEp1bmlvKS4KKworMjAxNy0wOS0yNyBqcm5pZWRlckBnbWFpbC5jb20sIHNiZWxsZXJAZ29vZ2xlLmNvbQorKiB1c2UgcGxhY2Vob2xkZXIgTmV3SGFzaCBpbnN0ZWFkIG9mIFNIQTMtMjU2CisqIGRlc2NyaWJlIGNyaXRlcmlhIGZvciBwaWNraW5nIGEgaGFzaCBmdW5jdGlvbi4KKyogaW5jbHVkZSBhIHRyYW5zaXRpb24gcGxhbiAodGhhbmtzIGVzcGVjaWFsbHkgdG8gQnJhbmRvbiBXaWxsaWFtcworICBmb3IgZmxlc2hpbmcgdGhlc2UgaWRlYXMgb3V0KQorKiBkZWZpbmUgdGhlIHRyYW5zbGF0aW9uIHRhYmxlICh0aGFua3MsIFNoYXduIFBlYXJjZVs1XSwgSm9uYXRoYW4KKyAgVGFuLCBhbmQgTWFzYXlhIFN1enVraSkKKyogYXZvaWQgbG9vc2Ugb2JqZWN0IG92ZXJoZWFkIGJ5IHBhY2tpbmcgbW9yZSBhZ2dyZXNzaXZlbHkgaW4KKyAgImdpdCBnYyAtLWF1dG8iCisKK0xhdGVyIGhpc3Rvcnk6CisKKyBTZWUgdGhlIGhpc3Rvcnkgb2YgdGhpcyBmaWxlIGluIGdpdC5naXQgZm9yIHRoZSBoaXN0b3J5IG9mIHN1YnNlcXVlbnQKKyBlZGl0cy4gVGhpcyBkb2N1bWVudCBoaXN0b3J5IGlzIG5vIGxvbmdlciBiZWluZyBtYWludGFpbmVkIGFzIGl0Cisgd291bGQgbm93IGJlIHN1cGVyZmx1b3VzIHRvIHRoZSBjb21taXQgbG9nCisKK1sxXSBodHRwOi8vbG9yZS5rZXJuZWwub3JnL2dpdC9DQSs1NWFGekp0ZWppQ2pWMGU0Mys5b1IzUXVKSzJQaUZpTFFlbXl0b0xweUpXZTZQOXdAbWFpbC5nbWFpbC5jb20vCitbMl0gaHR0cDovL2xvcmUua2VybmVsLm9yZy9naXQvQ0ErNTVhRnorZ2tBc0RaMjR6bWVQUXVFczFYUFM5QlBfczhPN1E0d1E3TFY3WDUtb0RBQG1haWwuZ21haWwuY29tLworWzNdIGh0dHA6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwMzA2MDg0MzUzLm5ybnM0NTVkdmtkc2ZnbzVAc2lnaWxsLmludHJhLnBlZmYubmV0LworWzRdIGh0dHA6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwMzA0MjI0OTM2LnJxcXRrZHZmamd5ZXpzaHRAZ2VucmUuY3J1c3R5dG9vdGhwYXN0ZS5uZXQKK1s1XSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvQ0FKbz1oSnRvWDk9QXlMSEhwVUpTN2Z1ZVY5Y2laX01OcG5FUEhVejhXaHVpNmc5RjBBQG1haWwuZ21haWwuY29tLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaHR0cC1wcm90b2NvbC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9odHRwLXByb3RvY29sLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzViNmYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaHR0cC1wcm90b2NvbC50eHQKQEAgLTAsMCArMSw1MTggQEAKK0hUVFAgdHJhbnNmZXIgcHJvdG9jb2xzCis9PT09PT09PT09PT09PT09PT09PT09PQorCitHaXQgc3VwcG9ydHMgdHdvIEhUVFAgYmFzZWQgdHJhbnNmZXIgcHJvdG9jb2xzLiAgQSAiZHVtYiIgcHJvdG9jb2wKK3doaWNoIHJlcXVpcmVzIG9ubHkgYSBzdGFuZGFyZCBIVFRQIHNlcnZlciBvbiB0aGUgc2VydmVyIGVuZCBvZiB0aGUKK2Nvbm5lY3Rpb24sIGFuZCBhICJzbWFydCIgcHJvdG9jb2wgd2hpY2ggcmVxdWlyZXMgYSBHaXQgYXdhcmUgQ0dJCisob3Igc2VydmVyIG1vZHVsZSkuICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBib3RoIHByb3RvY29scy4KKworQXMgYSBkZXNpZ24gZmVhdHVyZSBzbWFydCBjbGllbnRzIGNhbiBhdXRvbWF0aWNhbGx5IHVwZ3JhZGUgImR1bWIiCitwcm90b2NvbCBVUkxzIHRvIHNtYXJ0IFVSTHMuICBUaGlzIHBlcm1pdHMgYWxsIHVzZXJzIHRvIGhhdmUgdGhlCitzYW1lIHB1Ymxpc2hlZCBVUkwsIGFuZCB0aGUgcGVlcnMgYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIG1vc3QKK2VmZmljaWVudCB0cmFuc3BvcnQgYXZhaWxhYmxlIHRvIHRoZW0uCisKKworVVJMIEZvcm1hdAorLS0tLS0tLS0tLQorCitVUkxzIGZvciBHaXQgcmVwb3NpdG9yaWVzIGFjY2Vzc2VkIGJ5IEhUVFAgdXNlIHRoZSBzdGFuZGFyZCBIVFRQCitVUkwgc3ludGF4IGRvY3VtZW50ZWQgYnkgUkZDIDE3MzgsIHNvIHRoZXkgYXJlIG9mIHRoZSBmb3JtOgorCisgIGh0dHA6Ly88aG9zdD46PHBvcnQ+LzxwYXRoPj88c2VhcmNocGFydD4KKworV2l0aGluIHRoaXMgZG9jdW1lbnRhdGlvbiB0aGUgcGxhY2Vob2xkZXIgYCRHSVRfVVJMYCB3aWxsIHN0YW5kIGZvcgordGhlIGh0dHA6Ly8gcmVwb3NpdG9yeSBVUkwgZW50ZXJlZCBieSB0aGUgZW5kLXVzZXIuCisKK1NlcnZlcnMgU0hPVUxEIGhhbmRsZSBhbGwgcmVxdWVzdHMgdG8gbG9jYXRpb25zIG1hdGNoaW5nIGAkR0lUX1VSTGAsIGFzCitib3RoIHRoZSAic21hcnQiIGFuZCAiZHVtYiIgSFRUUCBwcm90b2NvbHMgdXNlZCBieSBHaXQgb3BlcmF0ZQorYnkgYXBwZW5kaW5nIGFkZGl0aW9uYWwgcGF0aCBjb21wb25lbnRzIG9udG8gdGhlIGVuZCBvZiB0aGUgdXNlcgorc3VwcGxpZWQgYCRHSVRfVVJMYCBzdHJpbmcuCisKK0FuIGV4YW1wbGUgb2YgYSBkdW1iIGNsaWVudCByZXF1ZXN0aW5nIGZvciBhIGxvb3NlIG9iamVjdDoKKworICAkR0lUX1VSTDogICAgIGh0dHA6Ly9leGFtcGxlLmNvbTo4MDgwL2dpdC9yZXBvLmdpdAorICBVUkwgcmVxdWVzdDogIGh0dHA6Ly9leGFtcGxlLmNvbTo4MDgwL2dpdC9yZXBvLmdpdC9vYmplY3RzL2QwLzQ5ZjZjMjdhMjI0NGUxMjA0MTk1NWUyNjJhNDA0YzdmYWJhMzU1CisKK0FuIGV4YW1wbGUgb2YgYSBzbWFydCByZXF1ZXN0IHRvIGEgY2F0Y2gtYWxsIGdhdGV3YXk6CisKKyAgJEdJVF9VUkw6ICAgICBodHRwOi8vZXhhbXBsZS5jb20vZGFlbW9uLmNnaT9zdmM9Z2l0JnE9CisgIFVSTCByZXF1ZXN0OiAgaHR0cDovL2V4YW1wbGUuY29tL2RhZW1vbi5jZ2k/c3ZjPWdpdCZxPS9pbmZvL3JlZnMmc2VydmljZT1naXQtcmVjZWl2ZS1wYWNrCisKK0FuIGV4YW1wbGUgb2YgYSByZXF1ZXN0IHRvIGEgc3VibW9kdWxlOgorCisgICRHSVRfVVJMOiAgICAgaHR0cDovL2V4YW1wbGUuY29tL2dpdC9yZXBvLmdpdC9wYXRoL3N1Ym1vZHVsZS5naXQKKyAgVVJMIHJlcXVlc3Q6ICBodHRwOi8vZXhhbXBsZS5jb20vZ2l0L3JlcG8uZ2l0L3BhdGgvc3VibW9kdWxlLmdpdC9pbmZvL3JlZnMKKworQ2xpZW50cyBNVVNUIHN0cmlwIGEgdHJhaWxpbmcgYC9gLCBpZiBwcmVzZW50LCBmcm9tIHRoZSB1c2VyIHN1cHBsaWVkCitgJEdJVF9VUkxgIHN0cmluZyB0byBwcmV2ZW50IGVtcHR5IHBhdGggdG9rZW5zIChgLy9gKSBmcm9tIGFwcGVhcmluZworaW4gYW55IFVSTCBzZW50IHRvIGEgc2VydmVyLiAgQ29tcGF0aWJsZSBjbGllbnRzIE1VU1QgZXhwYW5kCitgJEdJVF9VUkwvaW5mby9yZWZzYCBhcyBgZm9vL2luZm8vcmVmc2AgYW5kIG5vdCBgZm9vLy9pbmZvL3JlZnNgLgorCisKK0F1dGhlbnRpY2F0aW9uCistLS0tLS0tLS0tLS0tLQorCitTdGFuZGFyZCBIVFRQIGF1dGhlbnRpY2F0aW9uIGlzIHVzZWQgaWYgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQKK3RvIGFjY2VzcyBhIHJlcG9zaXRvcnksIGFuZCBNQVkgYmUgY29uZmlndXJlZCBhbmQgZW5mb3JjZWQgYnkgdGhlCitIVFRQIHNlcnZlciBzb2Z0d2FyZS4KKworQmVjYXVzZSBHaXQgcmVwb3NpdG9yaWVzIGFyZSBhY2Nlc3NlZCBieSBzdGFuZGFyZCBwYXRoIGNvbXBvbmVudHMKK3NlcnZlciBhZG1pbmlzdHJhdG9ycyBNQVkgdXNlIGRpcmVjdG9yeSBiYXNlZCBwZXJtaXNzaW9ucyB3aXRoaW4KK3RoZWlyIEhUVFAgc2VydmVyIHRvIGNvbnRyb2wgcmVwb3NpdG9yeSBhY2Nlc3MuCisKK0NsaWVudHMgU0hPVUxEIHN1cHBvcnQgQmFzaWMgYXV0aGVudGljYXRpb24gYXMgZGVzY3JpYmVkIGJ5IFJGQyAyNjE3LgorU2VydmVycyBTSE9VTEQgc3VwcG9ydCBCYXNpYyBhdXRoZW50aWNhdGlvbiBieSByZWx5aW5nIHVwb24gdGhlCitIVFRQIHNlcnZlciBwbGFjZWQgaW4gZnJvbnQgb2YgdGhlIEdpdCBzZXJ2ZXIgc29mdHdhcmUuCisKK1NlcnZlcnMgU0hPVUxEIE5PVCByZXF1aXJlIEhUVFAgY29va2llcyBmb3IgdGhlIHB1cnBvc2VzIG9mCithdXRoZW50aWNhdGlvbiBvciBhY2Nlc3MgY29udHJvbC4KKworQ2xpZW50cyBhbmQgc2VydmVycyBNQVkgc3VwcG9ydCBvdGhlciBjb21tb24gZm9ybXMgb2YgSFRUUCBiYXNlZAorYXV0aGVudGljYXRpb24sIHN1Y2ggYXMgRGlnZXN0IGF1dGhlbnRpY2F0aW9uLgorCisKK1NTTAorLS0tCisKK0NsaWVudHMgYW5kIHNlcnZlcnMgU0hPVUxEIHN1cHBvcnQgU1NMLCBwYXJ0aWN1bGFybHkgdG8gcHJvdGVjdAorcGFzc3dvcmRzIHdoZW4gcmVseWluZyBvbiBCYXNpYyBIVFRQIGF1dGhlbnRpY2F0aW9uLgorCisKK1Nlc3Npb24gU3RhdGUKKy0tLS0tLS0tLS0tLS0KKworVGhlIEdpdCBvdmVyIEhUVFAgcHJvdG9jb2wgKG11Y2ggbGlrZSBIVFRQIGl0c2VsZikgaXMgc3RhdGVsZXNzCitmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGUgSFRUUCBzZXJ2ZXIgc2lkZS4gIEFsbCBzdGF0ZSBNVVNUIGJlCityZXRhaW5lZCBhbmQgbWFuYWdlZCBieSB0aGUgY2xpZW50IHByb2Nlc3MuICBUaGlzIHBlcm1pdHMgc2ltcGxlCityb3VuZC1yb2JpbiBsb2FkLWJhbGFuY2luZyBvbiB0aGUgc2VydmVyIHNpZGUsIHdpdGhvdXQgbmVlZGluZyB0bword29ycnkgYWJvdXQgc3RhdGUgbWFuYWdlbWVudC4KKworQ2xpZW50cyBNVVNUIE5PVCByZXF1aXJlIHN0YXRlIG1hbmFnZW1lbnQgb24gdGhlIHNlcnZlciBzaWRlIGluCitvcmRlciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuCisKK1NlcnZlcnMgTVVTVCBOT1QgcmVxdWlyZSBIVFRQIGNvb2tpZXMgaW4gb3JkZXIgdG8gZnVuY3Rpb24gY29ycmVjdGx5LgorQ2xpZW50cyBNQVkgc3RvcmUgYW5kIGZvcndhcmQgSFRUUCBjb29raWVzIGR1cmluZyByZXF1ZXN0IHByb2Nlc3NpbmcKK2FzIGRlc2NyaWJlZCBieSBSRkMgMjYxNiAoSFRUUC8xLjEpLiAgU2VydmVycyBTSE9VTEQgaWdub3JlIGFueQorY29va2llcyBzZW50IGJ5IGEgY2xpZW50LgorCisKK0dlbmVyYWwgUmVxdWVzdCBQcm9jZXNzaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFeGNlcHQgd2hlcmUgbm90ZWQsIGFsbCBzdGFuZGFyZCBIVFRQIGJlaGF2aW9yIFNIT1VMRCBiZSBhc3N1bWVkCitieSBib3RoIGNsaWVudCBhbmQgc2VydmVyLiAgVGhpcyBpbmNsdWRlcyAoYnV0IGlzIG5vdCBuZWNlc3NhcmlseQorbGltaXRlZCB0byk6CisKK0lmIHRoZXJlIGlzIG5vIHJlcG9zaXRvcnkgYXQgYCRHSVRfVVJMYCwgb3IgdGhlIHJlc291cmNlIHBvaW50ZWQgdG8gYnkgYQorbG9jYXRpb24gbWF0Y2hpbmcgYCRHSVRfVVJMYCBkb2VzIG5vdCBleGlzdCwgdGhlIHNlcnZlciBNVVNUIE5PVCByZXNwb25kCit3aXRoIGAyMDAgT0tgIHJlc3BvbnNlLiAgQSBzZXJ2ZXIgU0hPVUxEIHJlc3BvbmQgd2l0aAorYDQwNCBOb3QgRm91bmRgLCBgNDEwIEdvbmVgLCBvciBhbnkgb3RoZXIgc3VpdGFibGUgSFRUUCBzdGF0dXMgY29kZQord2hpY2ggZG9lcyBub3QgaW1wbHkgdGhlIHJlc291cmNlIGV4aXN0cyBhcyByZXF1ZXN0ZWQuCisKK0lmIHRoZXJlIGlzIGEgcmVwb3NpdG9yeSBhdCBgJEdJVF9VUkxgLCBidXQgYWNjZXNzIGlzIG5vdCBjdXJyZW50bHkKK3Blcm1pdHRlZCwgdGhlIHNlcnZlciBNVVNUIHJlc3BvbmQgd2l0aCB0aGUgYDQwMyBGb3JiaWRkZW5gIEhUVFAKK3N0YXR1cyBjb2RlLgorCitTZXJ2ZXJzIFNIT1VMRCBzdXBwb3J0IGJvdGggSFRUUCAxLjAgYW5kIEhUVFAgMS4xLgorU2VydmVycyBTSE9VTEQgc3VwcG9ydCBjaHVua2VkIGVuY29kaW5nIGZvciBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlCitib2RpZXMuCisKK0NsaWVudHMgU0hPVUxEIHN1cHBvcnQgYm90aCBIVFRQIDEuMCBhbmQgSFRUUCAxLjEuCitDbGllbnRzIFNIT1VMRCBzdXBwb3J0IGNodW5rZWQgZW5jb2RpbmcgZm9yIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UKK2JvZGllcy4KKworU2VydmVycyBNQVkgcmV0dXJuIEVUYWcgYW5kL29yIExhc3QtTW9kaWZpZWQgaGVhZGVycy4KKworQ2xpZW50cyBNQVkgcmV2YWxpZGF0ZSBjYWNoZWQgZW50aXRpZXMgYnkgaW5jbHVkaW5nIElmLU1vZGlmaWVkLVNpbmNlCithbmQvb3IgSWYtTm9uZS1NYXRjaCByZXF1ZXN0IGhlYWRlcnMuCisKK1NlcnZlcnMgTUFZIHJldHVybiBgMzA0IE5vdCBNb2RpZmllZGAgaWYgdGhlIHJlbGV2YW50IGhlYWRlcnMgYXBwZWFyCitpbiB0aGUgcmVxdWVzdCBhbmQgdGhlIGVudGl0eSBoYXMgbm90IGNoYW5nZWQuICBDbGllbnRzIE1VU1QgdHJlYXQKK2AzMDQgTm90IE1vZGlmaWVkYCBpZGVudGljYWwgdG8gYDIwMCBPS2AgYnkgcmV1c2luZyB0aGUgY2FjaGVkIGVudGl0eS4KKworQ2xpZW50cyBNQVkgcmV1c2UgYSBjYWNoZWQgZW50aXR5IHdpdGhvdXQgcmV2YWxpZGF0aW9uIGlmIHRoZQorQ2FjaGUtQ29udHJvbCBhbmQvb3IgRXhwaXJlcyBoZWFkZXIgcGVybWl0cyBjYWNoaW5nLiAgQ2xpZW50cyBhbmQKK3NlcnZlcnMgTVVTVCBmb2xsb3cgUkZDIDI2MTYgZm9yIGNhY2hlIGNvbnRyb2xzLgorCisKK0Rpc2NvdmVyaW5nIFJlZmVyZW5jZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIEhUVFAgY2xpZW50cyBNVVNUIGJlZ2luIGVpdGhlciBhIGZldGNoIG9yIGEgcHVzaCBleGNoYW5nZSBieQorZGlzY292ZXJpbmcgdGhlIHJlZmVyZW5jZXMgYXZhaWxhYmxlIG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4KKworRHVtYiBDbGllbnRzCit+fn5+fn5+fn5+fn4KKworSFRUUCBjbGllbnRzIHRoYXQgb25seSBzdXBwb3J0IHRoZSAiZHVtYiIgcHJvdG9jb2wgTVVTVCBkaXNjb3ZlcgorcmVmZXJlbmNlcyBieSBtYWtpbmcgYSByZXF1ZXN0IGZvciB0aGUgc3BlY2lhbCBpbmZvL3JlZnMgZmlsZSBvZgordGhlIHJlcG9zaXRvcnkuCisKK0R1bWIgSFRUUCBjbGllbnRzIE1VU1QgbWFrZSBhIGBHRVRgIHJlcXVlc3QgdG8gYCRHSVRfVVJML2luZm8vcmVmc2AsCit3aXRob3V0IGFueSBzZWFyY2gvcXVlcnkgcGFyYW1ldGVycy4KKworICAgQzogR0VUICRHSVRfVVJML2luZm8vcmVmcyBIVFRQLzEuMAorCisgICBTOiAyMDAgT0sKKyAgIFM6CisgICBTOiA5NWRjZmEzNjMzMDA0ZGEwMDQ5ZDNkMGZhMDNmODA1ODljYmNhZjMxCXJlZnMvaGVhZHMvbWFpbnQKKyAgIFM6IGQwNDlmNmMyN2EyMjQ0ZTEyMDQxOTU1ZTI2MmE0MDRjN2ZhYmEzNTUJcmVmcy9oZWFkcy9tYXN0ZXIKKyAgIFM6IDJjYjU4Yjc5NDg4YTk4ZDI3MjFjZWE2NDQ4NzVhOGRkMDAyNmIxMTUJcmVmcy90YWdzL3YxLjAKKyAgIFM6IGEzYzJlMjQwMmI5OTE2M2QxZDU5NzU2ZTVmMjA3YWUyMWNjY2JhNGMJcmVmcy90YWdzL3YxLjBee30KKworVGhlIENvbnRlbnQtVHlwZSBvZiB0aGUgcmV0dXJuZWQgaW5mby9yZWZzIGVudGl0eSBTSE9VTEQgYmUKK2B0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04YCwgYnV0IE1BWSBiZSBhbnkgY29udGVudCB0eXBlLgorQ2xpZW50cyBNVVNUIE5PVCBhdHRlbXB0IHRvIHZhbGlkYXRlIHRoZSByZXR1cm5lZCBDb250ZW50LVR5cGUuCitEdW1iIHNlcnZlcnMgTVVTVCBOT1QgcmV0dXJuIGEgcmV0dXJuIHR5cGUgc3RhcnRpbmcgd2l0aAorYGFwcGxpY2F0aW9uL3gtZ2l0LWAuCisKK0NhY2hlLUNvbnRyb2wgaGVhZGVycyBNQVkgYmUgcmV0dXJuZWQgdG8gZGlzYWJsZSBjYWNoaW5nIG9mIHRoZQorcmV0dXJuZWQgZW50aXR5LgorCitXaGVuIGV4YW1pbmluZyB0aGUgcmVzcG9uc2UgY2xpZW50cyBTSE9VTEQgb25seSBleGFtaW5lIHRoZSBIVFRQCitzdGF0dXMgY29kZS4gIFZhbGlkIHJlc3BvbnNlcyBhcmUgYDIwMCBPS2AsIG9yIGAzMDQgTm90IE1vZGlmaWVkYC4KKworVGhlIHJldHVybmVkIGNvbnRlbnQgaXMgYSBVTklYIGZvcm1hdHRlZCB0ZXh0IGZpbGUgZGVzY3JpYmluZworZWFjaCByZWYgYW5kIGl0cyBrbm93biB2YWx1ZS4gIFRoZSBmaWxlIFNIT1VMRCBiZSBzb3J0ZWQgYnkgbmFtZQorYWNjb3JkaW5nIHRvIHRoZSBDIGxvY2FsZSBvcmRlcmluZy4gIFRoZSBmaWxlIFNIT1VMRCBOT1QgaW5jbHVkZQordGhlIGRlZmF1bHQgcmVmIG5hbWVkIGBIRUFEYC4KKworICBpbmZvX3JlZnMgICA9ICAqKCByZWZfcmVjb3JkICkKKyAgcmVmX3JlY29yZCAgPSAgYW55X3JlZiAvIHBlZWxlZF9yZWYKKworICBhbnlfcmVmICAgICA9ICBvYmotaWQgSFRBQiByZWZuYW1lIExGCisgIHBlZWxlZF9yZWYgID0gIG9iai1pZCBIVEFCIHJlZm5hbWUgTEYKKwkJIG9iai1pZCBIVEFCIHJlZm5hbWUgIl57fSIgTEYKKworU21hcnQgQ2xpZW50cworfn5+fn5+fn5+fn5+fgorCitIVFRQIGNsaWVudHMgdGhhdCBzdXBwb3J0IHRoZSAic21hcnQiIHByb3RvY29sIChvciBib3RoIHRoZQorInNtYXJ0IiBhbmQgImR1bWIiIHByb3RvY29scykgTVVTVCBkaXNjb3ZlciByZWZlcmVuY2VzIGJ5IG1ha2luZworYSBwYXJhbWV0ZXJpemVkIHJlcXVlc3QgZm9yIHRoZSBpbmZvL3JlZnMgZmlsZSBvZiB0aGUgcmVwb3NpdG9yeS4KKworVGhlIHJlcXVlc3QgTVVTVCBjb250YWluIGV4YWN0bHkgb25lIHF1ZXJ5IHBhcmFtZXRlciwKK2BzZXJ2aWNlPSRzZXJ2aWNlbmFtZWAsIHdoZXJlIGAkc2VydmljZW5hbWVgIE1VU1QgYmUgdGhlIHNlcnZpY2UKK25hbWUgdGhlIGNsaWVudCB3aXNoZXMgdG8gY29udGFjdCB0byBjb21wbGV0ZSB0aGUgb3BlcmF0aW9uLgorVGhlIHJlcXVlc3QgTVVTVCBOT1QgY29udGFpbiBhZGRpdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMuCisKKyAgIEM6IEdFVCAkR0lUX1VSTC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjAKKworZHVtYiBzZXJ2ZXIgcmVwbHk6CisKKyAgIFM6IDIwMCBPSworICAgUzoKKyAgIFM6IDk1ZGNmYTM2MzMwMDRkYTAwNDlkM2QwZmEwM2Y4MDU4OWNiY2FmMzEJcmVmcy9oZWFkcy9tYWludAorICAgUzogZDA0OWY2YzI3YTIyNDRlMTIwNDE5NTVlMjYyYTQwNGM3ZmFiYTM1NQlyZWZzL2hlYWRzL21hc3RlcgorICAgUzogMmNiNThiNzk0ODhhOThkMjcyMWNlYTY0NDg3NWE4ZGQwMDI2YjExNQlyZWZzL3RhZ3MvdjEuMAorICAgUzogYTNjMmUyNDAyYjk5MTYzZDFkNTk3NTZlNWYyMDdhZTIxY2NjYmE0YwlyZWZzL3RhZ3MvdjEuMF57fQorCitzbWFydCBzZXJ2ZXIgcmVwbHk6CisKKyAgIFM6IDIwMCBPSworICAgUzogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWdpdC11cGxvYWQtcGFjay1hZHZlcnRpc2VtZW50CisgICBTOiBDYWNoZS1Db250cm9sOiBuby1jYWNoZQorICAgUzoKKyAgIFM6IDAwMWUjIHNlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrXG4KKyAgIFM6IDAwMDAKKyAgIFM6IDAwNDg5NWRjZmEzNjMzMDA0ZGEwMDQ5ZDNkMGZhMDNmODA1ODljYmNhZjMxIHJlZnMvaGVhZHMvbWFpbnRcMG11bHRpX2Fja1xuCisgICBTOiAwMDQyZDA0OWY2YzI3YTIyNDRlMTIwNDE5NTVlMjYyYTQwNGM3ZmFiYTM1NSByZWZzL2hlYWRzL21hc3RlclxuCisgICBTOiAwMDNjMmNiNThiNzk0ODhhOThkMjcyMWNlYTY0NDg3NWE4ZGQwMDI2YjExNSByZWZzL3RhZ3MvdjEuMFxuCisgICBTOiAwMDNmYTNjMmUyNDAyYjk5MTYzZDFkNTk3NTZlNWYyMDdhZTIxY2NjYmE0YyByZWZzL3RhZ3MvdjEuMF57fVxuCisgICBTOiAwMDAwCisKK1RoZSBjbGllbnQgbWF5IHNlbmQgRXh0cmEgUGFyYW1ldGVycyAoc2VlCitEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLXByb3RvY29sLnR4dCkgYXMgYSBjb2xvbi1zZXBhcmF0ZWQgc3RyaW5nCitpbiB0aGUgR2l0LVByb3RvY29sIEhUVFAgaGVhZGVyLgorCitEdW1iIFNlcnZlciBSZXNwb25zZQorXl5eXl5eXl5eXl5eXl5eXl5eXl4KK0R1bWIgc2VydmVycyBNVVNUIHJlc3BvbmQgd2l0aCB0aGUgZHVtYiBzZXJ2ZXIgcmVwbHkgZm9ybWF0LgorCitTZWUgdGhlIHByaW9yIHNlY3Rpb24gdW5kZXIgZHVtYiBjbGllbnRzIGZvciBhIG1vcmUgZGV0YWlsZWQKK2Rlc2NyaXB0aW9uIG9mIHRoZSBkdW1iIHNlcnZlciByZXNwb25zZS4KKworU21hcnQgU2VydmVyIFJlc3BvbnNlCiteXl5eXl5eXl5eXl5eXl5eXl5eXl4KK0lmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgcmVjb2duaXplIHRoZSByZXF1ZXN0ZWQgc2VydmljZSBuYW1lLCBvciB0aGUKK3JlcXVlc3RlZCBzZXJ2aWNlIG5hbWUgaGFzIGJlZW4gZGlzYWJsZWQgYnkgdGhlIHNlcnZlciBhZG1pbmlzdHJhdG9yLAordGhlIHNlcnZlciBNVVNUIHJlc3BvbmQgd2l0aCB0aGUgYDQwMyBGb3JiaWRkZW5gIEhUVFAgc3RhdHVzIGNvZGUuCisKK090aGVyd2lzZSwgc21hcnQgc2VydmVycyBNVVNUIHJlc3BvbmQgd2l0aCB0aGUgc21hcnQgc2VydmVyIHJlcGx5Citmb3JtYXQgZm9yIHRoZSByZXF1ZXN0ZWQgc2VydmljZSBuYW1lLgorCitDYWNoZS1Db250cm9sIGhlYWRlcnMgU0hPVUxEIGJlIHVzZWQgdG8gZGlzYWJsZSBjYWNoaW5nIG9mIHRoZQorcmV0dXJuZWQgZW50aXR5LgorCitUaGUgQ29udGVudC1UeXBlIE1VU1QgYmUgYGFwcGxpY2F0aW9uL3gtJHNlcnZpY2VuYW1lLWFkdmVydGlzZW1lbnRgLgorQ2xpZW50cyBTSE9VTEQgZmFsbCBiYWNrIHRvIHRoZSBkdW1iIHByb3RvY29sIGlmIGFub3RoZXIgY29udGVudAordHlwZSBpcyByZXR1cm5lZC4gIFdoZW4gZmFsbGluZyBiYWNrIHRvIHRoZSBkdW1iIHByb3RvY29sIGNsaWVudHMKK1NIT1VMRCBOT1QgbWFrZSBhbiBhZGRpdGlvbmFsIHJlcXVlc3QgdG8gYCRHSVRfVVJML2luZm8vcmVmc2AsIGJ1dAoraW5zdGVhZCBTSE9VTEQgdXNlIHRoZSByZXNwb25zZSBhbHJlYWR5IGluIGhhbmQuICBDbGllbnRzIE1VU1QgTk9UCitjb250aW51ZSBpZiB0aGV5IGRvIG5vdCBzdXBwb3J0IHRoZSBkdW1iIHByb3RvY29sLgorCitDbGllbnRzIE1VU1QgdmFsaWRhdGUgdGhlIHN0YXR1cyBjb2RlIGlzIGVpdGhlciBgMjAwIE9LYCBvcgorYDMwNCBOb3QgTW9kaWZpZWRgLgorCitDbGllbnRzIE1VU1QgdmFsaWRhdGUgdGhlIGZpcnN0IGZpdmUgYnl0ZXMgb2YgdGhlIHJlc3BvbnNlIGVudGl0eQorbWF0Y2hlcyB0aGUgcmVnZXggYF5bMC05YS1mXXs0fSNgLiAgSWYgdGhpcyB0ZXN0IGZhaWxzLCBjbGllbnRzCitNVVNUIE5PVCBjb250aW51ZS4KKworQ2xpZW50cyBNVVNUIHBhcnNlIHRoZSBlbnRpcmUgcmVzcG9uc2UgYXMgYSBzZXF1ZW5jZSBvZiBwa3QtbGluZQorcmVjb3Jkcy4KKworQ2xpZW50cyBNVVNUIHZlcmlmeSB0aGUgZmlyc3QgcGt0LWxpbmUgaXMgYCMgc2VydmljZT0kc2VydmljZW5hbWVgLgorU2VydmVycyBNVVNUIHNldCAkc2VydmljZW5hbWUgdG8gYmUgdGhlIHJlcXVlc3QgcGFyYW1ldGVyIHZhbHVlLgorU2VydmVycyBTSE9VTEQgaW5jbHVkZSBhbiBMRiBhdCB0aGUgZW5kIG9mIHRoaXMgbGluZS4KK0NsaWVudHMgTVVTVCBpZ25vcmUgYW4gTEYgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KKworU2VydmVycyBNVVNUIHRlcm1pbmF0ZSB0aGUgcmVzcG9uc2Ugd2l0aCB0aGUgbWFnaWMgYDAwMDBgIGVuZAorcGt0LWxpbmUgbWFya2VyLgorCitUaGUgcmV0dXJuZWQgcmVzcG9uc2UgaXMgYSBwa3QtbGluZSBzdHJlYW0gZGVzY3JpYmluZyBlYWNoIHJlZiBhbmQKK2l0cyBrbm93biB2YWx1ZS4gIFRoZSBzdHJlYW0gU0hPVUxEIGJlIHNvcnRlZCBieSBuYW1lIGFjY29yZGluZyB0bwordGhlIEMgbG9jYWxlIG9yZGVyaW5nLiAgVGhlIHN0cmVhbSBTSE9VTEQgaW5jbHVkZSB0aGUgZGVmYXVsdCByZWYKK25hbWVkIGBIRUFEYCBhcyB0aGUgZmlyc3QgcmVmLiAgVGhlIHN0cmVhbSBNVVNUIGluY2x1ZGUgY2FwYWJpbGl0eQorZGVjbGFyYXRpb25zIGJlaGluZCBhIE5VTCBvbiB0aGUgZmlyc3QgcmVmLgorCitUaGUgcmV0dXJuZWQgcmVzcG9uc2UgY29udGFpbnMgInZlcnNpb24gMSIgaWYgInZlcnNpb249MSIgd2FzIHNlbnQgYXMgYW4KK0V4dHJhIFBhcmFtZXRlci4KKworICBzbWFydF9yZXBseSAgICAgPSAgUEtULUxJTkUoIiMgc2VydmljZT0kc2VydmljZW5hbWUiIExGKQorCQkgICAgICIwMDAwIgorCQkgICAgICoxKCJ2ZXJzaW9uIDEiKQorCQkgICAgIHJlZl9saXN0CisJCSAgICAgIjAwMDAiCisgIHJlZl9saXN0ICAgICAgICA9ICBlbXB0eV9saXN0IC8gbm9uX2VtcHR5X2xpc3QKKworICBlbXB0eV9saXN0ICAgICAgPSAgUEtULUxJTkUoemVyby1pZCBTUCAiY2FwYWJpbGl0aWVzXnt9IiBOVUwgY2FwLWxpc3QgTEYpCisKKyAgbm9uX2VtcHR5X2xpc3QgID0gIFBLVC1MSU5FKG9iai1pZCBTUCBuYW1lIE5VTCBjYXBfbGlzdCBMRikKKwkJICAgICAqcmVmX3JlY29yZAorCisgIGNhcC1saXN0ICAgICAgICA9ICBjYXBhYmlsaXR5ICooU1AgY2FwYWJpbGl0eSkKKyAgY2FwYWJpbGl0eSAgICAgID0gIDEqKExDX0FMUEhBIC8gRElHSVQgLyAiLSIgLyAiXyIpCisgIExDX0FMUEhBICAgICAgICA9ICAleDYxLTdBCisKKyAgcmVmX3JlY29yZCAgICAgID0gIGFueV9yZWYgLyBwZWVsZWRfcmVmCisgIGFueV9yZWYgICAgICAgICA9ICBQS1QtTElORShvYmotaWQgU1AgbmFtZSBMRikKKyAgcGVlbGVkX3JlZiAgICAgID0gIFBLVC1MSU5FKG9iai1pZCBTUCBuYW1lIExGKQorCQkgICAgIFBLVC1MSU5FKG9iai1pZCBTUCBuYW1lICJee30iIExGCisKKworU21hcnQgU2VydmljZSBnaXQtdXBsb2FkLXBhY2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBzZXJ2aWNlIHJlYWRzIGZyb20gdGhlIHJlcG9zaXRvcnkgcG9pbnRlZCB0byBieSBgJEdJVF9VUkxgLgorCitDbGllbnRzIE1VU1QgZmlyc3QgcGVyZm9ybSByZWYgZGlzY292ZXJ5IHdpdGgKK2AkR0lUX1VSTC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2tgLgorCisgICBDOiBQT1NUICRHSVRfVVJML2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMAorICAgQzogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWdpdC11cGxvYWQtcGFjay1yZXF1ZXN0CisgICBDOgorICAgQzogMDAzMndhbnQgMGE1M2U5ZGRlYWRkYWQ2M2FkMTA2ODYwMjM3YmJmNTM0MTFkMTFhN1xuCisgICBDOiAwMDMyaGF2ZSA0NDFiNDBkODMzZmRmYTkzZWIyOTA4ZTUyNzQyMjQ4ZmFmMGVlOTkzXG4KKyAgIEM6IDAwMDAKKworICAgUzogMjAwIE9LCisgICBTOiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ2l0LXVwbG9hZC1wYWNrLXJlc3VsdAorICAgUzogQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUKKyAgIFM6CisgICBTOiAuLi4uQUNLICVzLCBjb250aW51ZQorICAgUzogLi4uLk5BSworCitDbGllbnRzIE1VU1QgTk9UIHJldXNlIG9yIHJldmFsaWRhdGUgYSBjYWNoZWQgcmVzcG9uc2UuCitTZXJ2ZXJzIE1VU1QgaW5jbHVkZSBzdWZmaWNpZW50IENhY2hlLUNvbnRyb2wgaGVhZGVycwordG8gcHJldmVudCBjYWNoaW5nIG9mIHRoZSByZXNwb25zZS4KKworU2VydmVycyBTSE9VTEQgc3VwcG9ydCBhbGwgY2FwYWJpbGl0aWVzIGRlZmluZWQgaGVyZS4KKworQ2xpZW50cyBNVVNUIHNlbmQgYXQgbGVhc3Qgb25lICJ3YW50IiBjb21tYW5kIGluIHRoZSByZXF1ZXN0IGJvZHkuCitDbGllbnRzIE1VU1QgTk9UIHJlZmVyZW5jZSBhbiBpZCBpbiBhICJ3YW50IiBjb21tYW5kIHdoaWNoIGRpZCBub3QKK2FwcGVhciBpbiB0aGUgcmVzcG9uc2Ugb2J0YWluZWQgdGhyb3VnaCByZWYgZGlzY292ZXJ5IHVubGVzcyB0aGUKK3NlcnZlciBhZHZlcnRpc2VzIGNhcGFiaWxpdHkgYGFsbG93LXRpcC1zaGExLWluLXdhbnRgIG9yCitgYWxsb3ctcmVhY2hhYmxlLXNoYTEtaW4td2FudGAuCisKKyAgY29tcHV0ZV9yZXF1ZXN0ICAgPSAgd2FudF9saXN0CisJCSAgICAgICBoYXZlX2xpc3QKKwkJICAgICAgIHJlcXVlc3RfZW5kCisgIHJlcXVlc3RfZW5kICAgICAgID0gICIwMDAwIiAvICJkb25lIgorCisgIHdhbnRfbGlzdCAgICAgICAgID0gIFBLVC1MSU5FKHdhbnQgU1AgY2FwX2xpc3QgTEYpCisJCSAgICAgICAqKHdhbnRfcGt0KQorICB3YW50X3BrdCAgICAgICAgICA9ICBQS1QtTElORSh3YW50IExGKQorICB3YW50ICAgICAgICAgICAgICA9ICAid2FudCIgU1AgaWQKKyAgY2FwX2xpc3QgICAgICAgICAgPSAgY2FwYWJpbGl0eSAqKFNQIGNhcGFiaWxpdHkpCisKKyAgaGF2ZV9saXN0ICAgICAgICAgPSAgKlBLVC1MSU5FKCJoYXZlIiBTUCBpZCBMRikKKworVE9ETzogRG9jdW1lbnQgdGhpcyBmdXJ0aGVyLgorCitUaGUgTmVnb3RpYXRpb24gQWxnb3JpdGhtCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGUgY29tcHV0YXRpb24gdG8gc2VsZWN0IHRoZSBtaW5pbWFsIHBhY2sgcHJvY2VlZHMgYXMgZm9sbG93cworKEMgPSBjbGllbnQsIFMgPSBzZXJ2ZXIpOgorCisnaW5pdCBzdGVwOicKKworQzogVXNlIHJlZiBkaXNjb3ZlcnkgdG8gb2J0YWluIHRoZSBhZHZlcnRpc2VkIHJlZnMuCisKK0M6IFBsYWNlIGFueSBvYmplY3Qgc2VlbiBpbnRvIHNldCBgYWR2ZXJ0aXNlZGAuCisKK0M6IEJ1aWxkIGFuIGVtcHR5IHNldCwgYGNvbW1vbmAsIHRvIGhvbGQgdGhlIG9iamVjdHMgdGhhdCBhcmUgbGF0ZXIKKyAgIGRldGVybWluZWQgdG8gYmUgb24gYm90aCBlbmRzLgorCitDOiBCdWlsZCBhIHNldCwgYHdhbnRgLCBvZiB0aGUgb2JqZWN0cyBmcm9tIGBhZHZlcnRpc2VkYCB0aGUgY2xpZW50CisgICB3YW50cyB0byBmZXRjaCwgYmFzZWQgb24gd2hhdCBpdCBzYXcgZHVyaW5nIHJlZiBkaXNjb3ZlcnkuCisKK0M6IFN0YXJ0IGEgcXVldWUsIGBjX3BlbmRpbmdgLCBvcmRlcmVkIGJ5IGNvbW1pdCB0aW1lIChwb3BwaW5nIG5ld2VzdAorICAgZmlyc3QpLiAgQWRkIGFsbCBjbGllbnQgcmVmcy4gIFdoZW4gYSBjb21taXQgaXMgcG9wcGVkIGZyb20KKyAgIHRoZSBxdWV1ZSBpdHMgcGFyZW50cyBTSE9VTEQgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBiYWNrLgorICAgQ29tbWl0cyBNVVNUIG9ubHkgZW50ZXIgdGhlIHF1ZXVlIG9uY2UuCisKKydvbmUgY29tcHV0ZSBzdGVwOicKKworQzogU2VuZCBvbmUgYCRHSVRfVVJML2dpdC11cGxvYWQtcGFja2AgcmVxdWVzdDoKKworICAgQzogMDAzMndhbnQgPHdhbnQgIzE+Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAgQzogMDAzMndhbnQgPHdhbnQgIzI+Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAgLi4uLgorICAgQzogMDAzMmhhdmUgPGNvbW1vbiAjMT4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAgQzogMDAzMmhhdmUgPGNvbW1vbiAjMj4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAgLi4uLgorICAgQzogMDAzMmhhdmUgPGhhdmUgIzE+Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAgQzogMDAzMmhhdmUgPGhhdmUgIzI+Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAgLi4uLgorICAgQzogMDAwMAorCitUaGUgc3RyZWFtIGlzIG9yZ2FuaXplZCBpbnRvICJjb21tYW5kcyIsIHdpdGggZWFjaCBjb21tYW5kCithcHBlYXJpbmcgYnkgaXRzZWxmIGluIGEgcGt0LWxpbmUuICBXaXRoaW4gYSBjb21tYW5kIGxpbmUsCit0aGUgdGV4dCBsZWFkaW5nIHVwIHRvIHRoZSBmaXJzdCBzcGFjZSBpcyB0aGUgY29tbWFuZCBuYW1lLAorYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIGxpbmUgdG8gdGhlIGZpcnN0IExGIGlzIHRoZSB2YWx1ZS4KK0NvbW1hbmQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgd2l0aCBhbiBMRiBhcyB0aGUgbGFzdCBieXRlIG9mCit0aGUgcGt0LWxpbmUgdmFsdWUuCisKK0NvbW1hbmRzIE1VU1QgYXBwZWFyIGluIHRoZSBmb2xsb3dpbmcgb3JkZXIsIGlmIHRoZXkgYXBwZWFyCithdCBhbGwgaW4gdGhlIHJlcXVlc3Qgc3RyZWFtOgorCisqICJ3YW50IgorKiAiaGF2ZSIKKworVGhlIHN0cmVhbSBpcyB0ZXJtaW5hdGVkIGJ5IGEgcGt0LWxpbmUgZmx1c2ggKGAwMDAwYCkuCisKK0Egc2luZ2xlICJ3YW50IiBvciAiaGF2ZSIgY29tbWFuZCBNVVNUIGhhdmUgb25lIGhleCBmb3JtYXR0ZWQKK1NIQS0xIGFzIGl0cyB2YWx1ZS4gIE11bHRpcGxlIFNIQS0xcyBNVVNUIGJlIHNlbnQgYnkgc2VuZGluZworbXVsdGlwbGUgY29tbWFuZHMuCisKK1RoZSBgaGF2ZWAgbGlzdCBpcyBjcmVhdGVkIGJ5IHBvcHBpbmcgdGhlIGZpcnN0IDMyIGNvbW1pdHMKK2Zyb20gYGNfcGVuZGluZ2AuICBMZXNzIGNhbiBiZSBzdXBwbGllZCBpZiBgY19wZW5kaW5nYCBlbXB0aWVzLgorCitJZiB0aGUgY2xpZW50IGhhcyBzZW50IDI1NiAiaGF2ZSIgY29tbWl0cyBhbmQgaGFzIG5vdCB5ZXQKK3JlY2VpdmVkIG9uZSBvZiB0aG9zZSBiYWNrIGZyb20gYHNfY29tbW9uYCwgb3IgdGhlIGNsaWVudCBoYXMKK2VtcHRpZWQgYGNfcGVuZGluZ2AgaXQgU0hPVUxEIGluY2x1ZGUgYSAiZG9uZSIgY29tbWFuZCB0byBsZXQKK3RoZSBzZXJ2ZXIga25vdyBpdCB3b24ndCBwcm9jZWVkOgorCisgICBDOiAwMDA5ZG9uZQorCitTOiBQYXJzZSB0aGUgZ2l0LXVwbG9hZC1wYWNrIHJlcXVlc3Q6CisKK1ZlcmlmeSBhbGwgb2JqZWN0cyBpbiBgd2FudGAgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHJlZnMuCisKK1RoZSBzZXJ2ZXIgTUFZIHdhbGsgYmFja3dhcmRzIHRocm91Z2ggaGlzdG9yeSBvciB0aHJvdWdoCit0aGUgcmVmbG9nIHRvIHBlcm1pdCBzbGlnaHRseSBzdGFsZSByZXF1ZXN0cy4KKworSWYgbm8gIndhbnQiIG9iamVjdHMgYXJlIHJlY2VpdmVkLCBzZW5kIGFuIGVycm9yOgorVE9ETzogRGVmaW5lIGVycm9yIGlmIG5vICJ3YW50IiBsaW5lcyBhcmUgcmVxdWVzdGVkLgorCitJZiBhbnkgIndhbnQiIG9iamVjdCBpcyBub3QgcmVhY2hhYmxlLCBzZW5kIGFuIGVycm9yOgorVE9ETzogRGVmaW5lIGVycm9yIGlmIGFuIGludmFsaWQgIndhbnQiIGlzIHJlcXVlc3RlZC4KKworQ3JlYXRlIGFuIGVtcHR5IGxpc3QsIGBzX2NvbW1vbmAuCisKK0lmICJoYXZlIiB3YXMgc2VudDoKKworTG9vcCB0aHJvdWdoIHRoZSBvYmplY3RzIGluIHRoZSBvcmRlciBzdXBwbGllZCBieSB0aGUgY2xpZW50LgorCitGb3IgZWFjaCBvYmplY3QsIGlmIHRoZSBzZXJ2ZXIgaGFzIHRoZSBvYmplY3QgcmVhY2hhYmxlIGZyb20KK2EgcmVmLCBhZGQgaXQgdG8gYHNfY29tbW9uYC4gIElmIGEgY29tbWl0IGlzIGFkZGVkIHRvIGBzX2NvbW1vbmAsCitkbyBub3QgYWRkIGFueSBhbmNlc3RvcnMsIGV2ZW4gaWYgdGhleSBhbHNvIGFwcGVhciBpbiBgaGF2ZWAuCisKK1M6IFNlbmQgdGhlIGdpdC11cGxvYWQtcGFjayByZXNwb25zZToKKworSWYgdGhlIHNlcnZlciBoYXMgZm91bmQgYSBjbG9zZWQgc2V0IG9mIG9iamVjdHMgdG8gcGFjayBvciB0aGUKK3JlcXVlc3QgZW5kcyB3aXRoICJkb25lIiwgaXQgcmVwbGllcyB3aXRoIHRoZSBwYWNrLgorVE9ETzogRG9jdW1lbnQgdGhlIHBhY2sgYmFzZWQgcmVzcG9uc2UKKworICAgUzogUEFDSy4uLgorCitUaGUgcmV0dXJuZWQgc3RyZWFtIGlzIHRoZSBzaWRlLWJhbmQtNjRrIHByb3RvY29sIHN1cHBvcnRlZAorYnkgdGhlIGdpdC11cGxvYWQtcGFjayBzZXJ2aWNlLCBhbmQgdGhlIHBhY2sgaXMgZW1iZWRkZWQgaW50bworc3RyZWFtIDEuICBQcm9ncmVzcyBtZXNzYWdlcyBmcm9tIHRoZSBzZXJ2ZXIgc2lkZSBNQVkgYXBwZWFyCitpbiBzdHJlYW0gMi4KKworSGVyZSBhICJjbG9zZWQgc2V0IG9mIG9iamVjdHMiIGlzIGRlZmluZWQgdG8gaGF2ZSBhdCBsZWFzdAorb25lIHBhdGggZnJvbSBldmVyeSAid2FudCIgdG8gYXQgbGVhc3Qgb25lICJjb21tb24iIG9iamVjdC4KKworSWYgdGhlIHNlcnZlciBuZWVkcyBtb3JlIGluZm9ybWF0aW9uLCBpdCByZXBsaWVzIHdpdGggYQorc3RhdHVzIGNvbnRpbnVlIHJlc3BvbnNlOgorVE9ETzogRG9jdW1lbnQgdGhlIG5vbi1wYWNrIHJlc3BvbnNlCisKK0M6IFBhcnNlIHRoZSB1cGxvYWQtcGFjayByZXNwb25zZToKKyAgIFRPRE86IERvY3VtZW50IHBhcnNpbmcgcmVzcG9uc2UKKworJ0RvIGFub3RoZXIgY29tcHV0ZSBzdGVwLicKKworCitTbWFydCBTZXJ2aWNlIGdpdC1yZWNlaXZlLXBhY2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBzZXJ2aWNlIHJlYWRzIGZyb20gdGhlIHJlcG9zaXRvcnkgcG9pbnRlZCB0byBieSBgJEdJVF9VUkxgLgorCitDbGllbnRzIE1VU1QgZmlyc3QgcGVyZm9ybSByZWYgZGlzY292ZXJ5IHdpdGgKK2AkR0lUX1VSTC9pbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrYC4KKworICAgQzogUE9TVCAkR0lUX1VSTC9naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4wCisgICBDOiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ2l0LXJlY2VpdmUtcGFjay1yZXF1ZXN0CisgICBDOgorICAgQzogLi4uLjBhNTNlOWRkZWFkZGFkNjNhZDEwNjg2MDIzN2JiZjUzNDExZDExYTcgNDQxYjQwZDgzM2ZkZmE5M2ViMjkwOGU1Mjc0MjI0OGZhZjBlZTk5MyByZWZzL2hlYWRzL21haW50XDAgcmVwb3J0LXN0YXR1cworICAgQzogMDAwMAorICAgQzogUEFDSy4uLi4KKworICAgUzogMjAwIE9LCisgICBTOiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ2l0LXJlY2VpdmUtcGFjay1yZXN1bHQKKyAgIFM6IENhY2hlLUNvbnRyb2w6IG5vLWNhY2hlCisgICBTOgorICAgUzogLi4uLgorCitDbGllbnRzIE1VU1QgTk9UIHJldXNlIG9yIHJldmFsaWRhdGUgYSBjYWNoZWQgcmVzcG9uc2UuCitTZXJ2ZXJzIE1VU1QgaW5jbHVkZSBzdWZmaWNpZW50IENhY2hlLUNvbnRyb2wgaGVhZGVycwordG8gcHJldmVudCBjYWNoaW5nIG9mIHRoZSByZXNwb25zZS4KKworU2VydmVycyBTSE9VTEQgc3VwcG9ydCBhbGwgY2FwYWJpbGl0aWVzIGRlZmluZWQgaGVyZS4KKworQ2xpZW50cyBNVVNUIHNlbmQgYXQgbGVhc3Qgb25lIGNvbW1hbmQgaW4gdGhlIHJlcXVlc3QgYm9keS4KK1dpdGhpbiB0aGUgY29tbWFuZCBwb3J0aW9uIG9mIHRoZSByZXF1ZXN0IGJvZHkgY2xpZW50cyBTSE9VTEQgc2VuZAordGhlIGlkIG9idGFpbmVkIHRocm91Z2ggcmVmIGRpc2NvdmVyeSBhcyBvbGRfaWQuCisKKyAgdXBkYXRlX3JlcXVlc3QgID0gIGNvbW1hbmRfbGlzdAorCQkgICAgICJQQUNLIiA8YmluYXJ5IGRhdGE+CisKKyAgY29tbWFuZF9saXN0ICAgID0gIFBLVC1MSU5FKGNvbW1hbmQgTlVMIGNhcF9saXN0IExGKQorCQkgICAgICooY29tbWFuZF9wa3QpCisgIGNvbW1hbmRfcGt0ICAgICA9ICBQS1QtTElORShjb21tYW5kIExGKQorICBjYXBfbGlzdCAgICAgICAgPSAgKihTUCBjYXBhYmlsaXR5KSBTUAorCisgIGNvbW1hbmQgICAgICAgICA9ICBjcmVhdGUgLyBkZWxldGUgLyB1cGRhdGUKKyAgY3JlYXRlICAgICAgICAgID0gIHplcm8taWQgU1AgbmV3X2lkIFNQIG5hbWUKKyAgZGVsZXRlICAgICAgICAgID0gIG9sZF9pZCBTUCB6ZXJvLWlkIFNQIG5hbWUKKyAgdXBkYXRlICAgICAgICAgID0gIG9sZF9pZCBTUCBuZXdfaWQgU1AgbmFtZQorCitUT0RPOiBEb2N1bWVudCB0aGlzIGZ1cnRoZXIuCisKKworUmVmZXJlbmNlcworLS0tLS0tLS0tLQorCitodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxNzM4LnR4dFtSRkMgMTczODogVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9ycyAoVVJMKV0KK2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI2MTYudHh0W1JGQyAyNjE2OiBIeXBlcnRleHQgVHJhbnNmZXIgUHJvdG9jb2wgLS0gSFRUUC8xLjFdCitsaW5rOnRlY2huaWNhbC9wYWNrLXByb3RvY29sLmh0bWwKK2xpbms6dGVjaG5pY2FsL3Byb3RvY29sLWNhcGFiaWxpdGllcy5odG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9pbmRleC1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaW5kZXgtZm9ybWF0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWEyNWM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaW5kZXgtZm9ybWF0LnR4dApAQCAtMCwwICsxLDM1NyBAQAorR2l0IGluZGV4IGZvcm1hdAorPT09PT09PT09PT09PT09PQorCis9PSBUaGUgR2l0IGluZGV4IGZpbGUgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0CisKKyAgQWxsIGJpbmFyeSBudW1iZXJzIGFyZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuIFZlcnNpb24gMiBpcyBkZXNjcmliZWQKKyAgaGVyZSB1bmxlc3Mgc3RhdGVkIG90aGVyd2lzZS4KKworICAgLSBBIDEyLWJ5dGUgaGVhZGVyIGNvbnNpc3Rpbmcgb2YKKworICAgICA0LWJ5dGUgc2lnbmF0dXJlOgorICAgICAgIFRoZSBzaWduYXR1cmUgaXMgeyAnRCcsICdJJywgJ1InLCAnQycgfSAoc3RhbmRzIGZvciAiZGlyY2FjaGUiKQorCisgICAgIDQtYnl0ZSB2ZXJzaW9uIG51bWJlcjoKKyAgICAgICBUaGUgY3VycmVudCBzdXBwb3J0ZWQgdmVyc2lvbnMgYXJlIDIsIDMgYW5kIDQuCisKKyAgICAgMzItYml0IG51bWJlciBvZiBpbmRleCBlbnRyaWVzLgorCisgICAtIEEgbnVtYmVyIG9mIHNvcnRlZCBpbmRleCBlbnRyaWVzIChzZWUgYmVsb3cpLgorCisgICAtIEV4dGVuc2lvbnMKKworICAgICBFeHRlbnNpb25zIGFyZSBpZGVudGlmaWVkIGJ5IHNpZ25hdHVyZS4gT3B0aW9uYWwgZXh0ZW5zaW9ucyBjYW4KKyAgICAgYmUgaWdub3JlZCBpZiBHaXQgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGVtLgorCisgICAgIEdpdCBjdXJyZW50bHkgc3VwcG9ydHMgY2FjaGVkIHRyZWUgYW5kIHJlc29sdmUgdW5kbyBleHRlbnNpb25zLgorCisgICAgIDQtYnl0ZSBleHRlbnNpb24gc2lnbmF0dXJlLiBJZiB0aGUgZmlyc3QgYnl0ZSBpcyAnQScuLidaJyB0aGUKKyAgICAgZXh0ZW5zaW9uIGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgaWdub3JlZC4KKworICAgICAzMi1iaXQgc2l6ZSBvZiB0aGUgZXh0ZW5zaW9uCisKKyAgICAgRXh0ZW5zaW9uIGRhdGEKKworICAgLSAxNjAtYml0IFNIQS0xIG92ZXIgdGhlIGNvbnRlbnQgb2YgdGhlIGluZGV4IGZpbGUgYmVmb3JlIHRoaXMKKyAgICAgY2hlY2tzdW0uCisKKz09IEluZGV4IGVudHJ5CisKKyAgSW5kZXggZW50cmllcyBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBvbiB0aGUgbmFtZSBmaWVsZCwKKyAgaW50ZXJwcmV0ZWQgYXMgYSBzdHJpbmcgb2YgdW5zaWduZWQgYnl0ZXMgKGkuZS4gbWVtY21wKCkgb3JkZXIsIG5vCisgIGxvY2FsaXphdGlvbiwgbm8gc3BlY2lhbCBjYXNpbmcgb2YgZGlyZWN0b3J5IHNlcGFyYXRvciAnLycpLiBFbnRyaWVzCisgIHdpdGggdGhlIHNhbWUgbmFtZSBhcmUgc29ydGVkIGJ5IHRoZWlyIHN0YWdlIGZpZWxkLgorCisgIDMyLWJpdCBjdGltZSBzZWNvbmRzLCB0aGUgbGFzdCB0aW1lIGEgZmlsZSdzIG1ldGFkYXRhIGNoYW5nZWQKKyAgICB0aGlzIGlzIHN0YXQoMikgZGF0YQorCisgIDMyLWJpdCBjdGltZSBuYW5vc2Vjb25kIGZyYWN0aW9ucworICAgIHRoaXMgaXMgc3RhdCgyKSBkYXRhCisKKyAgMzItYml0IG10aW1lIHNlY29uZHMsIHRoZSBsYXN0IHRpbWUgYSBmaWxlJ3MgZGF0YSBjaGFuZ2VkCisgICAgdGhpcyBpcyBzdGF0KDIpIGRhdGEKKworICAzMi1iaXQgbXRpbWUgbmFub3NlY29uZCBmcmFjdGlvbnMKKyAgICB0aGlzIGlzIHN0YXQoMikgZGF0YQorCisgIDMyLWJpdCBkZXYKKyAgICB0aGlzIGlzIHN0YXQoMikgZGF0YQorCisgIDMyLWJpdCBpbm8KKyAgICB0aGlzIGlzIHN0YXQoMikgZGF0YQorCisgIDMyLWJpdCBtb2RlLCBzcGxpdCBpbnRvIChoaWdoIHRvIGxvdyBiaXRzKQorCisgICAgNC1iaXQgb2JqZWN0IHR5cGUKKyAgICAgIHZhbGlkIHZhbHVlcyBpbiBiaW5hcnkgYXJlIDEwMDAgKHJlZ3VsYXIgZmlsZSksIDEwMTAgKHN5bWJvbGljIGxpbmspCisgICAgICBhbmQgMTExMCAoZ2l0bGluaykKKworICAgIDMtYml0IHVudXNlZAorCisgICAgOS1iaXQgdW5peCBwZXJtaXNzaW9uLiBPbmx5IDA3NTUgYW5kIDA2NDQgYXJlIHZhbGlkIGZvciByZWd1bGFyIGZpbGVzLgorICAgIFN5bWJvbGljIGxpbmtzIGFuZCBnaXRsaW5rcyBoYXZlIHZhbHVlIDAgaW4gdGhpcyBmaWVsZC4KKworICAzMi1iaXQgdWlkCisgICAgdGhpcyBpcyBzdGF0KDIpIGRhdGEKKworICAzMi1iaXQgZ2lkCisgICAgdGhpcyBpcyBzdGF0KDIpIGRhdGEKKworICAzMi1iaXQgZmlsZSBzaXplCisgICAgVGhpcyBpcyB0aGUgb24tZGlzayBzaXplIGZyb20gc3RhdCgyKSwgdHJ1bmNhdGVkIHRvIDMyLWJpdC4KKworICAxNjAtYml0IFNIQS0xIGZvciB0aGUgcmVwcmVzZW50ZWQgb2JqZWN0CisKKyAgQSAxNi1iaXQgJ2ZsYWdzJyBmaWVsZCBzcGxpdCBpbnRvIChoaWdoIHRvIGxvdyBiaXRzKQorCisgICAgMS1iaXQgYXNzdW1lLXZhbGlkIGZsYWcKKworICAgIDEtYml0IGV4dGVuZGVkIGZsYWcgKG11c3QgYmUgemVybyBpbiB2ZXJzaW9uIDIpCisKKyAgICAyLWJpdCBzdGFnZSAoZHVyaW5nIG1lcmdlKQorCisgICAgMTItYml0IG5hbWUgbGVuZ3RoIGlmIHRoZSBsZW5ndGggaXMgbGVzcyB0aGFuIDB4RkZGOyBvdGhlcndpc2UgMHhGRkYKKyAgICBpcyBzdG9yZWQgaW4gdGhpcyBmaWVsZC4KKworICAoVmVyc2lvbiAzIG9yIGxhdGVyKSBBIDE2LWJpdCBmaWVsZCwgb25seSBhcHBsaWNhYmxlIGlmIHRoZQorICAiZXh0ZW5kZWQgZmxhZyIgYWJvdmUgaXMgMSwgc3BsaXQgaW50byAoaGlnaCB0byBsb3cgYml0cykuCisKKyAgICAxLWJpdCByZXNlcnZlZCBmb3IgZnV0dXJlCisKKyAgICAxLWJpdCBza2lwLXdvcmt0cmVlIGZsYWcgKHVzZWQgYnkgc3BhcnNlIGNoZWNrb3V0KQorCisgICAgMS1iaXQgaW50ZW50LXRvLWFkZCBmbGFnICh1c2VkIGJ5ICJnaXQgYWRkIC1OIikKKworICAgIDEzLWJpdCB1bnVzZWQsIG11c3QgYmUgemVybworCisgIEVudHJ5IHBhdGggbmFtZSAodmFyaWFibGUgbGVuZ3RoKSByZWxhdGl2ZSB0byB0b3AgbGV2ZWwgZGlyZWN0b3J5CisgICAgKHdpdGhvdXQgbGVhZGluZyBzbGFzaCkuICcvJyBpcyB1c2VkIGFzIHBhdGggc2VwYXJhdG9yLiBUaGUgc3BlY2lhbAorICAgIHBhdGggY29tcG9uZW50cyAiLiIsICIuLiIgYW5kICIuZ2l0IiAod2l0aG91dCBxdW90ZXMpIGFyZSBkaXNhbGxvd2VkLgorICAgIFRyYWlsaW5nIHNsYXNoIGlzIGFsc28gZGlzYWxsb3dlZC4KKworICAgIFRoZSBleGFjdCBlbmNvZGluZyBpcyB1bmRlZmluZWQsIGJ1dCB0aGUgJy4nIGFuZCAnLycgY2hhcmFjdGVycworICAgIGFyZSBlbmNvZGVkIGluIDctYml0IEFTQ0lJIGFuZCB0aGUgZW5jb2RpbmcgY2Fubm90IGNvbnRhaW4gYSBOVUwKKyAgICBieXRlIChpb3csIHRoaXMgaXMgYSBVTklYIHBhdGhuYW1lKS4KKworICAoVmVyc2lvbiA0KSBJbiB2ZXJzaW9uIDQsIHRoZSBlbnRyeSBwYXRoIG5hbWUgaXMgcHJlZml4LWNvbXByZXNzZWQKKyAgICByZWxhdGl2ZSB0byB0aGUgcGF0aCBuYW1lIGZvciB0aGUgcHJldmlvdXMgZW50cnkgKHRoZSB2ZXJ5IGZpcnN0CisgICAgZW50cnkgaXMgZW5jb2RlZCBhcyBpZiB0aGUgcGF0aCBuYW1lIGZvciB0aGUgcHJldmlvdXMgZW50cnkgaXMgYW4KKyAgICBlbXB0eSBzdHJpbmcpLiAgQXQgdGhlIGJlZ2lubmluZyBvZiBhbiBlbnRyeSwgYW4gaW50ZWdlciBOIGluIHRoZQorICAgIHZhcmlhYmxlIHdpZHRoIGVuY29kaW5nICh0aGUgc2FtZSBlbmNvZGluZyBhcyB0aGUgb2Zmc2V0IGlzIGVuY29kZWQKKyAgICBmb3IgT0ZTX0RFTFRBIHBhY2sgZW50cmllczsgc2VlIHBhY2stZm9ybWF0LnR4dCkgaXMgc3RvcmVkLCBmb2xsb3dlZAorICAgIGJ5IGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIFMuICBSZW1vdmluZyBOIGJ5dGVzIGZyb20gdGhlIGVuZCBvZiB0aGUKKyAgICBwYXRoIG5hbWUgZm9yIHRoZSBwcmV2aW91cyBlbnRyeSwgYW5kIHJlcGxhY2luZyBpdCB3aXRoIHRoZSBzdHJpbmcgUworICAgIHlpZWxkcyB0aGUgcGF0aCBuYW1lIGZvciB0aGlzIGVudHJ5LgorCisgIDEtOCBudWwgYnl0ZXMgYXMgbmVjZXNzYXJ5IHRvIHBhZCB0aGUgZW50cnkgdG8gYSBtdWx0aXBsZSBvZiBlaWdodCBieXRlcworICB3aGlsZSBrZWVwaW5nIHRoZSBuYW1lIE5VTC10ZXJtaW5hdGVkLgorCisgIChWZXJzaW9uIDQpIEluIHZlcnNpb24gNCwgdGhlIHBhZGRpbmcgYWZ0ZXIgdGhlIHBhdGhuYW1lIGRvZXMgbm90CisgIGV4aXN0LgorCisgIEludGVycHJldGF0aW9uIG9mIGluZGV4IGVudHJpZXMgaW4gc3BsaXQgaW5kZXggbW9kZSBpcyBjb21wbGV0ZWx5CisgIGRpZmZlcmVudC4gU2VlIGJlbG93IGZvciBkZXRhaWxzLgorCis9PSBFeHRlbnNpb25zCisKKz09PSBDYWNoZWQgdHJlZQorCisgIENhY2hlZCB0cmVlIGV4dGVuc2lvbiBjb250YWlucyBwcmUtY29tcHV0ZWQgaGFzaGVzIGZvciB0cmVlcyB0aGF0IGNhbgorICBiZSBkZXJpdmVkIGZyb20gdGhlIGluZGV4LiBJdCBoZWxwcyBzcGVlZCB1cCB0cmVlIG9iamVjdCBnZW5lcmF0aW9uCisgIGZyb20gaW5kZXggZm9yIGEgbmV3IGNvbW1pdC4KKworICBXaGVuIGEgcGF0aCBpcyB1cGRhdGVkIGluIGluZGV4LCB0aGUgcGF0aCBtdXN0IGJlIGludmFsaWRhdGVkIGFuZAorICByZW1vdmVkIGZyb20gdHJlZSBjYWNoZS4KKworICBUaGUgc2lnbmF0dXJlIGZvciB0aGlzIGV4dGVuc2lvbiBpcyB7ICdUJywgJ1InLCAnRScsICdFJyB9LgorCisgIEEgc2VyaWVzIG9mIGVudHJpZXMgZmlsbCB0aGUgZW50aXJlIGV4dGVuc2lvbjsgZWFjaCBvZiB3aGljaAorICBjb25zaXN0cyBvZjoKKworICAtIE5VTC10ZXJtaW5hdGVkIHBhdGggY29tcG9uZW50IChyZWxhdGl2ZSB0byBpdHMgcGFyZW50IGRpcmVjdG9yeSk7CisKKyAgLSBBU0NJSSBkZWNpbWFsIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBpbmRleCB0aGF0IGlzIGNvdmVyZWQgYnkgdGhlCisgICAgdHJlZSB0aGlzIGVudHJ5IHJlcHJlc2VudHMgKGVudHJ5X2NvdW50KTsKKworICAtIEEgc3BhY2UgKEFTQ0lJIDMyKTsKKworICAtIEFTQ0lJIGRlY2ltYWwgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIHN1YnRyZWVzIHRoaXMKKyAgICB0cmVlIGhhczsKKworICAtIEEgbmV3bGluZSAoQVNDSUkgMTApOyBhbmQKKworICAtIDE2MC1iaXQgb2JqZWN0IG5hbWUgZm9yIHRoZSBvYmplY3QgdGhhdCB3b3VsZCByZXN1bHQgZnJvbSB3cml0aW5nCisgICAgdGhpcyBzcGFuIG9mIGluZGV4IGFzIGEgdHJlZS4KKworICBBbiBlbnRyeSBjYW4gYmUgaW4gYW4gaW52YWxpZGF0ZWQgc3RhdGUgYW5kIGlzIHJlcHJlc2VudGVkIGJ5IGhhdmluZworICBhIG5lZ2F0aXZlIG51bWJlciBpbiB0aGUgZW50cnlfY291bnQgZmllbGQuIEluIHRoaXMgY2FzZSwgdGhlcmUgaXMgbm8KKyAgb2JqZWN0IG5hbWUgYW5kIHRoZSBuZXh0IGVudHJ5IHN0YXJ0cyBpbW1lZGlhdGVseSBhZnRlciB0aGUgbmV3bGluZS4KKyAgV2hlbiB3cml0aW5nIGFuIGludmFsaWQgZW50cnksIC0xIHNob3VsZCBhbHdheXMgYmUgdXNlZCBhcyBlbnRyeV9jb3VudC4KKworICBUaGUgZW50cmllcyBhcmUgd3JpdHRlbiBvdXQgaW4gdGhlIHRvcC1kb3duLCBkZXB0aC1maXJzdCBvcmRlci4gIFRoZQorICBmaXJzdCBlbnRyeSByZXByZXNlbnRzIHRoZSByb290IGxldmVsIG9mIHRoZSByZXBvc2l0b3J5LCBmb2xsb3dlZCBieSB0aGUKKyAgZmlyc3Qgc3VidHJlZS0tbGV0J3MgY2FsbCB0aGlzIEEtLW9mIHRoZSByb290IGxldmVsICh3aXRoIGl0cyBuYW1lCisgIHJlbGF0aXZlIHRvIHRoZSByb290IGxldmVsKSwgZm9sbG93ZWQgYnkgdGhlIGZpcnN0IHN1YnRyZWUgb2YgQSAod2l0aAorICBpdHMgbmFtZSByZWxhdGl2ZSB0byBBKSwgLi4uCisKKz09PSBSZXNvbHZlIHVuZG8KKworICBBIGNvbmZsaWN0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBpbmRleCBhcyBhIHNldCBvZiBoaWdoZXIgc3RhZ2UgZW50cmllcy4KKyAgV2hlbiBhIGNvbmZsaWN0IGlzIHJlc29sdmVkIChlLmcuIHdpdGggImdpdCBhZGQgcGF0aCIpLCB0aGVzZSBoaWdoZXIKKyAgc3RhZ2UgZW50cmllcyB3aWxsIGJlIHJlbW92ZWQgYW5kIGEgc3RhZ2UtMCBlbnRyeSB3aXRoIHByb3BlciByZXNvbHV0aW9uCisgIGlzIGFkZGVkLgorCisgIFdoZW4gdGhlc2UgaGlnaGVyIHN0YWdlIGVudHJpZXMgYXJlIHJlbW92ZWQsIHRoZXkgYXJlIHNhdmVkIGluIHRoZQorICByZXNvbHZlIHVuZG8gZXh0ZW5zaW9uLCBzbyB0aGF0IGNvbmZsaWN0cyBjYW4gYmUgcmVjcmVhdGVkIChlLmcuIHdpdGgKKyAgImdpdCBjaGVja291dCAtbSIpLCBpbiBjYXNlIHVzZXJzIHdhbnQgdG8gcmVkbyBhIGNvbmZsaWN0IHJlc29sdXRpb24KKyAgZnJvbSBzY3JhdGNoLgorCisgIFRoZSBzaWduYXR1cmUgZm9yIHRoaXMgZXh0ZW5zaW9uIGlzIHsgJ1InLCAnRScsICdVJywgJ0MnIH0uCisKKyAgQSBzZXJpZXMgb2YgZW50cmllcyBmaWxsIHRoZSBlbnRpcmUgZXh0ZW5zaW9uOyBlYWNoIG9mIHdoaWNoCisgIGNvbnNpc3RzIG9mOgorCisgIC0gTlVMLXRlcm1pbmF0ZWQgcGF0aG5hbWUgdGhlIGVudHJ5IGRlc2NyaWJlcyAocmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YKKyAgICB0aGUgcmVwb3NpdG9yeSwgaS5lLiBmdWxsIHBhdGhuYW1lKTsKKworICAtIFRocmVlIE5VTC10ZXJtaW5hdGVkIEFTQ0lJIG9jdGFsIG51bWJlcnMsIGVudHJ5IG1vZGUgb2YgZW50cmllcyBpbgorICAgIHN0YWdlIDEgdG8gMyAoYSBtaXNzaW5nIHN0YWdlIGlzIHJlcHJlc2VudGVkIGJ5ICIwIiBpbiB0aGlzIGZpZWxkKTsKKyAgICBhbmQKKworICAtIEF0IG1vc3QgdGhyZWUgMTYwLWJpdCBvYmplY3QgbmFtZXMgb2YgdGhlIGVudHJ5IGluIHN0YWdlcyBmcm9tIDEgdG8gMworICAgIChub3RoaW5nIGlzIHdyaXR0ZW4gZm9yIGEgbWlzc2luZyBzdGFnZSkuCisKKz09PSBTcGxpdCBpbmRleAorCisgIEluIHNwbGl0IGluZGV4IG1vZGUsIHRoZSBtYWpvcml0eSBvZiBpbmRleCBlbnRyaWVzIGNvdWxkIGJlIHN0b3JlZAorICBpbiBhIHNlcGFyYXRlIGZpbGUuIFRoaXMgZXh0ZW5zaW9uIHJlY29yZHMgdGhlIGNoYW5nZXMgdG8gYmUgbWFkZSBvbgorICB0b3Agb2YgdGhhdCB0byBwcm9kdWNlIHRoZSBmaW5hbCBpbmRleC4KKworICBUaGUgc2lnbmF0dXJlIGZvciB0aGlzIGV4dGVuc2lvbiBpcyB7ICdsJywgJ2knLCAnbicsICdrJyB9LgorCisgIFRoZSBleHRlbnNpb24gY29uc2lzdHMgb2Y6CisKKyAgLSAxNjAtYml0IFNIQS0xIG9mIHRoZSBzaGFyZWQgaW5kZXggZmlsZS4gVGhlIHNoYXJlZCBpbmRleCBmaWxlIHBhdGgKKyAgICBpcyAkR0lUX0RJUi9zaGFyZWRpbmRleC48U0hBLTE+LiBJZiBhbGwgMTYwIGJpdHMgYXJlIHplcm8sIHRoZQorICAgIGluZGV4IGRvZXMgbm90IHJlcXVpcmUgYSBzaGFyZWQgaW5kZXggZmlsZS4KKworICAtIEFuIGV3YWgtZW5jb2RlZCBkZWxldGUgYml0bWFwLCBlYWNoIGJpdCByZXByZXNlbnRzIGFuIGVudHJ5IGluIHRoZQorICAgIHNoYXJlZCBpbmRleC4gSWYgYSBiaXQgaXMgc2V0LCBpdHMgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUKKyAgICBzaGFyZWQgaW5kZXggd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGZpbmFsIGluZGV4LiAgTm90ZSwgYmVjYXVzZQorICAgIGEgZGVsZXRlIG9wZXJhdGlvbiBjaGFuZ2VzIGluZGV4IGVudHJ5IHBvc2l0aW9ucywgYnV0IHdlIGRvIG5lZWQKKyAgICBvcmlnaW5hbCBwb3NpdGlvbnMgaW4gcmVwbGFjZSBwaGFzZSwgaXQncyBiZXN0IHRvIGp1c3QgbWFyaworICAgIGVudHJpZXMgZm9yIHJlbW92YWwsIHRoZW4gZG8gYSBtYXNzIGRlbGV0aW9uIGFmdGVyIHJlcGxhY2VtZW50LgorCisgIC0gQW4gZXdhaC1lbmNvZGVkIHJlcGxhY2UgYml0bWFwLCBlYWNoIGJpdCByZXByZXNlbnRzIGFuIGVudHJ5IGluCisgICAgdGhlIHNoYXJlZCBpbmRleC4gSWYgYSBiaXQgaXMgc2V0LCBpdHMgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUKKyAgICBzaGFyZWQgaW5kZXggd2lsbCBiZSByZXBsYWNlZCB3aXRoIGFuIGVudHJ5IGluIHRoaXMgaW5kZXgKKyAgICBmaWxlLiBBbGwgcmVwbGFjZWQgZW50cmllcyBhcmUgc3RvcmVkIGluIHNvcnRlZCBvcmRlciBpbiB0aGlzCisgICAgaW5kZXguIFRoZSBmaXJzdCAiMSIgYml0IGluIHRoZSByZXBsYWNlIGJpdG1hcCBjb3JyZXNwb25kcyB0byB0aGUKKyAgICBmaXJzdCBpbmRleCBlbnRyeSwgdGhlIHNlY29uZCAiMSIgYml0IHRvIHRoZSBzZWNvbmQgZW50cnkgYW5kIHNvCisgICAgb24uIFJlcGxhY2VkIGVudHJpZXMgbWF5IGhhdmUgZW1wdHkgcGF0aCBuYW1lcyB0byBzYXZlIHNwYWNlLgorCisgIFRoZSByZW1haW5pbmcgaW5kZXggZW50cmllcyBhZnRlciByZXBsYWNlZCBvbmVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlCisgIGZpbmFsIGluZGV4LiBUaGVzZSBhZGRlZCBlbnRyaWVzIGFyZSBhbHNvIHNvcnRlZCBieSBlbnRyeSBuYW1lIHRoZW4KKyAgc3RhZ2UuCisKKz09IFVudHJhY2tlZCBjYWNoZQorCisgIFVudHJhY2tlZCBjYWNoZSBzYXZlcyB0aGUgdW50cmFja2VkIGZpbGUgbGlzdCBhbmQgbmVjZXNzYXJ5IGRhdGEgdG8KKyAgdmVyaWZ5IHRoZSBjYWNoZS4gVGhlIHNpZ25hdHVyZSBmb3IgdGhpcyBleHRlbnNpb24gaXMgeyAnVScsICdOJywKKyAgJ1QnLCAnUicgfS4KKworICBUaGUgZXh0ZW5zaW9uIHN0YXJ0cyB3aXRoCisKKyAgLSBBIHNlcXVlbmNlIG9mIE5VTC10ZXJtaW5hdGVkIHN0cmluZ3MsIHByZWNlZGVkIGJ5IHRoZSBzaXplIG9mIHRoZQorICAgIHNlcXVlbmNlIGluIHZhcmlhYmxlIHdpZHRoIGVuY29kaW5nLiBFYWNoIHN0cmluZyBkZXNjcmliZXMgdGhlCisgICAgZW52aXJvbm1lbnQgd2hlcmUgdGhlIGNhY2hlIGNhbiBiZSB1c2VkLgorCisgIC0gU3RhdCBkYXRhIG9mICRHSVRfRElSL2luZm8vZXhjbHVkZS4gU2VlICJJbmRleCBlbnRyeSIgc2VjdGlvbiBmcm9tCisgICAgY3RpbWUgZmllbGQgdW50aWwgImZpbGUgc2l6ZSIuCisKKyAgLSBTdGF0IGRhdGEgb2YgY29yZS5leGNsdWRlc2ZpbGUKKworICAtIDMyLWJpdCBkaXJfZmxhZ3MgKHNlZSBzdHJ1Y3QgZGlyX3N0cnVjdCkKKworICAtIDE2MC1iaXQgU0hBLTEgb2YgJEdJVF9ESVIvaW5mby9leGNsdWRlLiBOdWxsIFNIQS0xIG1lYW5zIHRoZSBmaWxlCisgICAgZG9lcyBub3QgZXhpc3QuCisKKyAgLSAxNjAtYml0IFNIQS0xIG9mIGNvcmUuZXhjbHVkZXNmaWxlLiBOdWxsIFNIQS0xIG1lYW5zIHRoZSBmaWxlIGRvZXMKKyAgICBub3QgZXhpc3QuCisKKyAgLSBOVUwtdGVybWluYXRlZCBzdHJpbmcgb2YgcGVyLWRpciBleGNsdWRlIGZpbGUgbmFtZS4gVGhpcyB1c3VhbGx5CisgICAgaXMgIi5naXRpZ25vcmUiLgorCisgIC0gVGhlIG51bWJlciBvZiBmb2xsb3dpbmcgZGlyZWN0b3J5IGJsb2NrcywgdmFyaWFibGUgd2lkdGgKKyAgICBlbmNvZGluZy4gSWYgdGhpcyBudW1iZXIgaXMgemVybywgdGhlIGV4dGVuc2lvbiBlbmRzIGhlcmUgd2l0aCBhCisgICAgZm9sbG93aW5nIE5VTC4KKworICAtIEEgbnVtYmVyIG9mIGRpcmVjdG9yeSBibG9ja3MgaW4gZGVwdGgtZmlyc3Qtc2VhcmNoIG9yZGVyLCBlYWNoCisgICAgY29uc2lzdHMgb2YKKworICAgIC0gVGhlIG51bWJlciBvZiB1bnRyYWNrZWQgZW50cmllcywgdmFyaWFibGUgd2lkdGggZW5jb2RpbmcuCisKKyAgICAtIFRoZSBudW1iZXIgb2Ygc3ViLWRpcmVjdG9yeSBibG9ja3MsIHZhcmlhYmxlIHdpZHRoIGVuY29kaW5nLgorCisgICAgLSBUaGUgZGlyZWN0b3J5IG5hbWUgdGVybWluYXRlZCBieSBOVUwuCisKKyAgICAtIEEgbnVtYmVyIG9mIHVudHJhY2tlZCBmaWxlL2RpciBuYW1lcyB0ZXJtaW5hdGVkIGJ5IE5VTC4KKworVGhlIHJlbWFpbmluZyBkYXRhIG9mIGVhY2ggZGlyZWN0b3J5IGJsb2NrIGlzIGdyb3VwZWQgYnkgdHlwZToKKworICAtIEFuIGV3YWggYml0bWFwLCB0aGUgbi10aCBiaXQgbWFya3Mgd2hldGhlciB0aGUgbi10aCBkaXJlY3RvcnkgaGFzCisgICAgdmFsaWQgdW50cmFja2VkIGNhY2hlIGVudHJpZXMuCisKKyAgLSBBbiBld2FoIGJpdG1hcCwgdGhlIG4tdGggYml0IHJlY29yZHMgImNoZWNrLW9ubHkiIGJpdCBvZgorICAgIHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZSgpIGZvciB0aGUgbi10aCBkaXJlY3RvcnkuCisKKyAgLSBBbiBld2FoIGJpdG1hcCwgdGhlIG4tdGggYml0IGluZGljYXRlcyB3aGV0aGVyIFNIQS0xIGFuZCBzdGF0IGRhdGEKKyAgICBpcyB2YWxpZCBmb3IgdGhlIG4tdGggZGlyZWN0b3J5IGFuZCBleGlzdHMgaW4gdGhlIG5leHQgZGF0YS4KKworICAtIEFuIGFycmF5IG9mIHN0YXQgZGF0YS4gVGhlIG4tdGggZGF0YSBjb3JyZXNwb25kcyB3aXRoIHRoZSBuLXRoCisgICAgIm9uZSIgYml0IGluIHRoZSBwcmV2aW91cyBld2FoIGJpdG1hcC4KKworICAtIEFuIGFycmF5IG9mIFNIQS0xLiBUaGUgbi10aCBTSEEtMSBjb3JyZXNwb25kcyB3aXRoIHRoZSBuLXRoICJvbmUiIGJpdAorICAgIGluIHRoZSBwcmV2aW91cyBld2FoIGJpdG1hcC4KKworICAtIE9uZSBOVUwuCisKKz09IEZpbGUgU3lzdGVtIE1vbml0b3IgY2FjaGUKKworICBUaGUgZmlsZSBzeXN0ZW0gbW9uaXRvciBjYWNoZSB0cmFja3MgZmlsZXMgZm9yIHdoaWNoIHRoZSBjb3JlLmZzbW9uaXRvcgorICBob29rIGhhcyB0b2xkIHVzIGFib3V0IGNoYW5nZXMuICBUaGUgc2lnbmF0dXJlIGZvciB0aGlzIGV4dGVuc2lvbiBpcworICB7ICdGJywgJ1MnLCAnTScsICdOJyB9LgorCisgIFRoZSBleHRlbnNpb24gc3RhcnRzIHdpdGgKKworICAtIDMyLWJpdCB2ZXJzaW9uIG51bWJlcjogdGhlIGN1cnJlbnQgc3VwcG9ydGVkIHZlcnNpb24gaXMgMS4KKworICAtIDY0LWJpdCB0aW1lOiB0aGUgZXh0ZW5zaW9uIGRhdGEgcmVmbGVjdHMgYWxsIGNoYW5nZXMgdGhyb3VnaCB0aGUgZ2l2ZW4KKwl0aW1lIHdoaWNoIGlzIHN0b3JlZCBhcyB0aGUgbmFub3NlY29uZHMgZWxhcHNlZCBzaW5jZSBtaWRuaWdodCwKKwlKYW51YXJ5IDEsIDE5NzAuCisKKyAgLSAzMi1iaXQgYml0bWFwIHNpemU6IHRoZSBzaXplIG9mIHRoZSBDRV9GU01PTklUT1JfVkFMSUQgYml0bWFwLgorCisgIC0gQW4gZXdhaCBiaXRtYXAsIHRoZSBuLXRoIGJpdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgbi10aCBpbmRleCBlbnRyeQorICAgIGlzIG5vdCBDRV9GU01PTklUT1JfVkFMSUQuCisKKz09IEVuZCBvZiBJbmRleCBFbnRyeQorCisgIFRoZSBFbmQgb2YgSW5kZXggRW50cnkgKEVPSUUpIGlzIHVzZWQgdG8gbG9jYXRlIHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlCisgIGxlbmd0aCBpbmRleCBlbnRyaWVzIGFuZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBleHRlbnNpb25zLiBDb2RlIGNhbiB0YWtlCisgIGFkdmFudGFnZSBvZiB0aGlzIHRvIHF1aWNrbHkgbG9jYXRlIHRoZSBpbmRleCBleHRlbnNpb25zIHdpdGhvdXQgaGF2aW5nCisgIHRvIHBhcnNlIHRocm91Z2ggYWxsIG9mIHRoZSBpbmRleCBlbnRyaWVzLgorCisgIEJlY2F1c2UgaXQgbXVzdCBiZSBhYmxlIHRvIGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZhcmlhYmxlIGxlbmd0aCBjYWNoZQorICBlbnRyaWVzIGFuZCBvdGhlciBpbmRleCBleHRlbnNpb25zLCB0aGlzIGV4dGVuc2lvbiBtdXN0IGJlIHdyaXR0ZW4gbGFzdC4KKyAgVGhlIHNpZ25hdHVyZSBmb3IgdGhpcyBleHRlbnNpb24gaXMgeyAnRScsICdPJywgJ0knLCAnRScgfS4KKworICBUaGUgZXh0ZW5zaW9uIGNvbnNpc3RzIG9mOgorCisgIC0gMzItYml0IG9mZnNldCB0byB0aGUgZW5kIG9mIHRoZSBpbmRleCBlbnRyaWVzCisKKyAgLSAxNjAtYml0IFNIQS0xIG92ZXIgdGhlIGV4dGVuc2lvbiB0eXBlcyBhbmQgdGhlaXIgc2l6ZXMgKGJ1dCBub3QKKwl0aGVpciBjb250ZW50cykuICBFLmcuIGlmIHdlIGhhdmUgIlRSRUUiIGV4dGVuc2lvbiB0aGF0IGlzIE4tYnl0ZXMKKwlsb25nLCAiUkVVQyIgZXh0ZW5zaW9uIHRoYXQgaXMgTS1ieXRlcyBsb25nLCBmb2xsb3dlZCBieSAiRU9JRSIsCisJdGhlbiB0aGUgaGFzaCB3b3VsZCBiZToKKworCVNIQS0xKCJUUkVFIiArIDxiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgTj4gKworCQkiUkVVQyIgKyA8YmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIE0+KQorCis9PSBJbmRleCBFbnRyeSBPZmZzZXQgVGFibGUKKworICBUaGUgSW5kZXggRW50cnkgT2Zmc2V0IFRhYmxlIChJRU9UKSBpcyB1c2VkIHRvIGhlbHAgYWRkcmVzcyB0aGUgQ1BVCisgIGNvc3Qgb2YgbG9hZGluZyB0aGUgaW5kZXggYnkgZW5hYmxpbmcgbXVsdGktdGhyZWFkaW5nIHRoZSBwcm9jZXNzIG9mCisgIGNvbnZlcnRpbmcgY2FjaGUgZW50cmllcyBmcm9tIHRoZSBvbi1kaXNrIGZvcm1hdCB0byB0aGUgaW4tbWVtb3J5IGZvcm1hdC4KKyAgVGhlIHNpZ25hdHVyZSBmb3IgdGhpcyBleHRlbnNpb24gaXMgeyAnSScsICdFJywgJ08nLCAnVCcgfS4KKworICBUaGUgZXh0ZW5zaW9uIGNvbnNpc3RzIG9mOgorCisgIC0gMzItYml0IHZlcnNpb24gKGN1cnJlbnRseSAxKQorCisgIC0gQSBudW1iZXIgb2YgaW5kZXggb2Zmc2V0IGVudHJpZXMgZWFjaCBjb25zaXN0aW5nIG9mOgorCisgICAgLSAzMi1iaXQgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSB0byB0aGUgZmlyc3QgY2FjaGUgZW50cnkKKwlpbiB0aGlzIGJsb2NrIG9mIGVudHJpZXMuCisKKyAgICAtIDMyLWJpdCBjb3VudCBvZiBjYWNoZSBlbnRyaWVzIGluIHRoaXMgYmxvY2sKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2xvbmctcnVubmluZy1wcm9jZXNzLXByb3RvY29sLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2xvbmctcnVubmluZy1wcm9jZXNzLXByb3RvY29sLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTBhYTlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvbG9uZy1ydW5uaW5nLXByb2Nlc3MtcHJvdG9jb2wudHh0CkBAIC0wLDAgKzEsNTAgQEAKK0xvbmctcnVubmluZyBwcm9jZXNzIHByb3RvY29sCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHByb3RvY29sIGlzIHVzZWQgd2hlbiBHaXQgbmVlZHMgdG8gY29tbXVuaWNhdGUgd2l0aCBhbiBleHRlcm5hbAorcHJvY2VzcyB0aHJvdWdob3V0IHRoZSBlbnRpcmUgbGlmZSBvZiBhIHNpbmdsZSBHaXQgY29tbWFuZC4gQWxsCitjb21tdW5pY2F0aW9uIGlzIGluIHBrdC1saW5lIGZvcm1hdCAoc2VlIHRlY2huaWNhbC9wcm90b2NvbC1jb21tb24udHh0KQorb3ZlciBzdGFuZGFyZCBpbnB1dCBhbmQgc3RhbmRhcmQgb3V0cHV0LgorCitIYW5kc2hha2UKKy0tLS0tLS0tLQorCitHaXQgc3RhcnRzIGJ5IHNlbmRpbmcgYSB3ZWxjb21lIG1lc3NhZ2UgKGZvciBleGFtcGxlLAorImdpdC1maWx0ZXItY2xpZW50IiksIGEgbGlzdCBvZiBzdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbiBudW1iZXJzLCBhbmQKK2EgZmx1c2ggcGFja2V0LiBHaXQgZXhwZWN0cyB0byByZWFkIHRoZSB3ZWxjb21lIG1lc3NhZ2Ugd2l0aCAic2VydmVyIgoraW5zdGVhZCBvZiAiY2xpZW50IiAoZm9yIGV4YW1wbGUsICJnaXQtZmlsdGVyLXNlcnZlciIpLCBleGFjdGx5IG9uZQorcHJvdG9jb2wgdmVyc2lvbiBudW1iZXIgZnJvbSB0aGUgcHJldmlvdXNseSBzZW50IGxpc3QsIGFuZCBhIGZsdXNoCitwYWNrZXQuIEFsbCBmdXJ0aGVyIGNvbW11bmljYXRpb24gd2lsbCBiZSBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgdmVyc2lvbi4KK1RoZSByZW1haW5pbmcgcHJvdG9jb2wgZGVzY3JpcHRpb24gYmVsb3cgZG9jdW1lbnRzICJ2ZXJzaW9uPTIiLiBQbGVhc2UKK25vdGUgdGhhdCAidmVyc2lvbj00MiIgaW4gdGhlIGV4YW1wbGUgYmVsb3cgZG9lcyBub3QgZXhpc3QgYW5kIGlzIG9ubHkKK3RoZXJlIHRvIGlsbHVzdHJhdGUgaG93IHRoZSBwcm90b2NvbCB3b3VsZCBsb29rIGxpa2Ugd2l0aCBtb3JlIHRoYW4gb25lCit2ZXJzaW9uLgorCitBZnRlciB0aGUgdmVyc2lvbiBuZWdvdGlhdGlvbiBHaXQgc2VuZHMgYSBsaXN0IG9mIGFsbCBjYXBhYmlsaXRpZXMgdGhhdAoraXQgc3VwcG9ydHMgYW5kIGEgZmx1c2ggcGFja2V0LiBHaXQgZXhwZWN0cyB0byByZWFkIGEgbGlzdCBvZiBkZXNpcmVkCitjYXBhYmlsaXRpZXMsIHdoaWNoIG11c3QgYmUgYSBzdWJzZXQgb2YgdGhlIHN1cHBvcnRlZCBjYXBhYmlsaXRpZXMgbGlzdCwKK2FuZCBhIGZsdXNoIHBhY2tldCBhcyByZXNwb25zZToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2V0OiAgICAgICAgICBnaXQ+IGdpdC1maWx0ZXItY2xpZW50CitwYWNrZXQ6ICAgICAgICAgIGdpdD4gdmVyc2lvbj0yCitwYWNrZXQ6ICAgICAgICAgIGdpdD4gdmVyc2lvbj00MgorcGFja2V0OiAgICAgICAgICBnaXQ+IDAwMDAKK3BhY2tldDogICAgICAgICAgZ2l0PCBnaXQtZmlsdGVyLXNlcnZlcgorcGFja2V0OiAgICAgICAgICBnaXQ8IHZlcnNpb249MgorcGFja2V0OiAgICAgICAgICBnaXQ8IDAwMDAKK3BhY2tldDogICAgICAgICAgZ2l0PiBjYXBhYmlsaXR5PWNsZWFuCitwYWNrZXQ6ICAgICAgICAgIGdpdD4gY2FwYWJpbGl0eT1zbXVkZ2UKK3BhY2tldDogICAgICAgICAgZ2l0PiBjYXBhYmlsaXR5PW5vdC15ZXQtaW52ZW50ZWQKK3BhY2tldDogICAgICAgICAgZ2l0PiAwMDAwCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgY2FwYWJpbGl0eT1jbGVhbgorcGFja2V0OiAgICAgICAgICBnaXQ8IGNhcGFiaWxpdHk9c211ZGdlCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgMDAwMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NodXRkb3duCistLS0tLS0tLQorCitHaXQgd2lsbCBjbG9zZQordGhlIGNvbW1hbmQgcGlwZSBvbiBleGl0LiBUaGUgZmlsdGVyIGlzIGV4cGVjdGVkIHRvIGRldGVjdCBFT0YKK2FuZCBleGl0IGdyYWNlZnVsbHkgb24gaXRzIG93bi4gR2l0IHdpbGwgd2FpdCB1bnRpbCB0aGUgZmlsdGVyCitwcm9jZXNzIGhhcyBzdG9wcGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvbXVsdGktcGFjay1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9tdWx0aS1wYWNrLWluZGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTc2MzE0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvbXVsdGktcGFjay1pbmRleC50eHQKQEAgLTAsMCArMSwxMDkgQEAKK011bHRpLVBhY2stSW5kZXggKE1JRFgpIERlc2lnbiBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBHaXQgb2JqZWN0IGRpcmVjdG9yeSBjb250YWlucyBhICdwYWNrJyBkaXJlY3RvcnkgY29udGFpbmluZworcGFja2ZpbGVzICh3aXRoIHN1ZmZpeCAiLnBhY2siKSBhbmQgcGFjay1pbmRleGVzICh3aXRoIHN1ZmZpeAorIi5pZHgiKS4gVGhlIHBhY2staW5kZXhlcyBwcm92aWRlIGEgd2F5IHRvIGxvb2t1cCBvYmplY3RzIGFuZAorbmF2aWdhdGUgdG8gdGhlaXIgb2Zmc2V0IHdpdGhpbiB0aGUgcGFjaywgYnV0IHRoZXNlIG11c3QgY29tZQoraW4gcGFpcnMgd2l0aCB0aGUgcGFja2ZpbGVzLiBUaGlzIHBhaXJpbmcgZGVwZW5kcyBvbiB0aGUgZmlsZQorbmFtZXMsIGFzIHRoZSBwYWNrLWluZGV4IGRpZmZlcnMgb25seSBpbiBzdWZmaXggd2l0aCBpdHMgcGFjay0KK2ZpbGUuIFdoaWxlIHRoZSBwYWNrLWluZGV4ZXMgcHJvdmlkZSBmYXN0IGxvb2t1cCBwZXIgcGFja2ZpbGUsCit0aGlzIHBlcmZvcm1hbmNlIGRlZ3JhZGVzIGFzIHRoZSBudW1iZXIgb2YgcGFja2ZpbGVzIGluY3JlYXNlcywKK2JlY2F1c2UgYWJicmV2aWF0aW9ucyBuZWVkIHRvIGluc3BlY3QgZXZlcnkgcGFja2ZpbGUgYW5kIHdlIGFyZQorbW9yZSBsaWtlbHkgdG8gaGF2ZSBhIG1pc3Mgb24gb3VyIG1vc3QtcmVjZW50bHktdXNlZCBwYWNrZmlsZS4KK0ZvciBzb21lIGxhcmdlIHJlcG9zaXRvcmllcywgcmVwYWNraW5nIGludG8gYSBzaW5nbGUgcGFja2ZpbGUKK2lzIG5vdCBmZWFzaWJsZSBkdWUgdG8gc3RvcmFnZSBzcGFjZSBvciBleGNlc3NpdmUgcmVwYWNrIHRpbWVzLgorCitUaGUgbXVsdGktcGFjay1pbmRleCAoTUlEWCBmb3Igc2hvcnQpIHN0b3JlcyBhIGxpc3Qgb2Ygb2JqZWN0cworYW5kIHRoZWlyIG9mZnNldHMgaW50byBtdWx0aXBsZSBwYWNrZmlsZXMuIEl0IGNvbnRhaW5zOgorCistIEEgbGlzdCBvZiBwYWNrZmlsZSBuYW1lcy4KKy0gQSBzb3J0ZWQgbGlzdCBvZiBvYmplY3QgSURzLgorLSBBIGxpc3Qgb2YgbWV0YWRhdGEgZm9yIHRoZSBpdGggb2JqZWN0IElEIGluY2x1ZGluZzoKKyAgLSBBIHZhbHVlIGogcmVmZXJyaW5nIHRvIHRoZSBqdGggcGFja2ZpbGUuCisgIC0gQW4gb2Zmc2V0IHdpdGhpbiB0aGUganRoIHBhY2tmaWxlIGZvciB0aGUgb2JqZWN0LgorLSBJZiBsYXJnZSBvZmZzZXRzIGFyZSByZXF1aXJlZCwgd2UgdXNlIGFub3RoZXIgbGlzdCBvZiBsYXJnZQorICBvZmZzZXRzIHNpbWlsYXIgdG8gdmVyc2lvbiAyIHBhY2staW5kZXhlcy4KKworVGh1cywgd2UgY2FuIHByb3ZpZGUgTyhsb2cgTikgbG9va3VwIHRpbWUgZm9yIGFueSBudW1iZXIKK29mIHBhY2tmaWxlcy4KKworRGVzaWduIERldGFpbHMKKy0tLS0tLS0tLS0tLS0tCisKKy0gVGhlIE1JRFggaXMgc3RvcmVkIGluIGEgZmlsZSBuYW1lZCAnbXVsdGktcGFjay1pbmRleCcgaW4gdGhlCisgIC5naXQvb2JqZWN0cy9wYWNrIGRpcmVjdG9yeS4gVGhpcyBjb3VsZCBiZSBzdG9yZWQgaW4gdGhlIHBhY2sKKyAgZGlyZWN0b3J5IG9mIGFuIGFsdGVybmF0ZS4gSXQgcmVmZXJzIG9ubHkgdG8gcGFja2ZpbGVzIGluIHRoYXQKKyAgc2FtZSBkaXJlY3RvcnkuCisKKy0gVGhlIGNvcmUubXVsdGlQYWNrSW5kZXggY29uZmlnIHNldHRpbmcgbXVzdCBiZSBvbiB0byBjb25zdW1lIE1JRFggZmlsZXMuCisKKy0gVGhlIGZpbGUgZm9ybWF0IGluY2x1ZGVzIHBhcmFtZXRlcnMgZm9yIHRoZSBvYmplY3QgSUQgaGFzaAorICBmdW5jdGlvbiwgc28gYSBmdXR1cmUgY2hhbmdlIG9mIGhhc2ggYWxnb3JpdGhtIGRvZXMgbm90IHJlcXVpcmUKKyAgYSBjaGFuZ2UgaW4gZm9ybWF0LgorCistIFRoZSBNSURYIGtlZXBzIG9ubHkgb25lIHJlY29yZCBwZXIgb2JqZWN0IElELiBJZiBhbiBvYmplY3QgYXBwZWFycworICBpbiBtdWx0aXBsZSBwYWNrZmlsZXMsIHRoZW4gdGhlIE1JRFggc2VsZWN0cyB0aGUgY29weSBpbiB0aGUgbW9zdC0KKyAgcmVjZW50bHkgbW9kaWZpZWQgcGFja2ZpbGUuCisKKy0gSWYgdGhlcmUgZXhpc3QgcGFja2ZpbGVzIGluIHRoZSBwYWNrIGRpcmVjdG9yeSBub3QgcmVnaXN0ZXJlZCBpbgorICB0aGUgTUlEWCwgdGhlbiB0aG9zZSBwYWNrZmlsZXMgYXJlIGxvYWRlZCBpbnRvIHRoZSBgcGFja2VkX2dpdGAKKyAgbGlzdCBhbmQgYHBhY2tlZF9naXRfbXJ1YCBjYWNoZS4KKworLSBUaGUgcGFjay1pbmRleGVzICguaWR4IGZpbGVzKSByZW1haW4gaW4gdGhlIHBhY2sgZGlyZWN0b3J5IHNvIHdlCisgIGNhbiBkZWxldGUgdGhlIE1JRFggZmlsZSwgc2V0IGNvcmUubWlkeCB0byBmYWxzZSwgb3IgZG93bmdyYWRlCisgIHdpdGhvdXQgYW55IGxvc3Mgb2YgaW5mb3JtYXRpb24uCisKKy0gVGhlIE1JRFggZmlsZSBmb3JtYXQgdXNlcyBhIGNodW5rLWJhc2VkIGFwcHJvYWNoIChzaW1pbGFyIHRvIHRoZQorICBjb21taXQtZ3JhcGggZmlsZSkgdGhhdCBhbGxvd3Mgb3B0aW9uYWwgZGF0YSB0byBiZSBhZGRlZC4KKworRnV0dXJlIFdvcmsKKy0tLS0tLS0tLS0tCisKKy0gQWRkIGEgJ3ZlcmlmeScgc3ViY29tbWFuZCB0byB0aGUgJ2dpdCBtaWR4JyBidWlsdGluIHRvIHZlcmlmeSB0aGUKKyAgY29udGVudHMgb2YgdGhlIG11bHRpLXBhY2staW5kZXggZmlsZSBtYXRjaCB0aGUgb2Zmc2V0cyBsaXN0ZWQgaW4KKyAgdGhlIGNvcnJlc3BvbmRpbmcgcGFjay1pbmRleGVzLgorCistIFRoZSBtdWx0aS1wYWNrLWluZGV4IGFsbG93cyBtYW55IHBhY2tmaWxlcywgZXNwZWNpYWxseSBpbiBhIGNvbnRleHQKKyAgd2hlcmUgcmVwYWNraW5nIGlzIGV4cGVuc2l2ZSAoc3VjaCBhcyBhIHZlcnkgbGFyZ2UgcmVwbyksIG9yCisgIHVuZXhwZWN0ZWQgbWFpbnRlbmFuY2UgdGltZSBpcyB1bmFjY2VwdGFibGUgKHN1Y2ggYXMgYSBoaWdoLWRlbWFuZAorICBidWlsZCBtYWNoaW5lKS4gSG93ZXZlciwgdGhlIG11bHRpLXBhY2staW5kZXggbmVlZHMgdG8gYmUgcmV3cml0dGVuCisgIGluIGZ1bGwgZXZlcnkgdGltZS4gV2UgY2FuIGV4dGVuZCB0aGUgZm9ybWF0IHRvIGJlIGluY3JlbWVudGFsLCBzbworICB3cml0ZXMgYXJlIGZhc3QuIEJ5IHN0b3JpbmcgYSBzbWFsbCAidGlwIiBtdWx0aS1wYWNrLWluZGV4IHRoYXQKKyAgcG9pbnRzIHRvIGxhcmdlICJiYXNlIiBNSURYIGZpbGVzLCB3ZSBjYW4ga2VlcCB3cml0ZXMgZmFzdCB3aGlsZQorICBzdGlsbCByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIGJpbmFyeSBzZWFyY2hlcyByZXF1aXJlZCBmb3Igb2JqZWN0CisgIGxvb2t1cHMuCisKKy0gVGhlIHJlYWNoYWJpbGl0eSBiaXRtYXAgaXMgY3VycmVudGx5IHBhaXJlZCBkaXJlY3RseSB3aXRoIGEgc2luZ2xlCisgIHBhY2tmaWxlLCB1c2luZyB0aGUgcGFjay1vcmRlciBhcyB0aGUgb2JqZWN0IG9yZGVyIHRvIGhvcGVmdWxseQorICBjb21wcmVzcyB0aGUgYml0bWFwcyB3ZWxsIHVzaW5nIHJ1bi1sZW5ndGggZW5jb2RpbmcuIFRoaXMgY291bGQgYmUKKyAgZXh0ZW5kZWQgdG8gcGFpciBhIHJlYWNoYWJpbGl0eSBiaXRtYXAgd2l0aCBhIG11bHRpLXBhY2staW5kZXguIElmCisgIHRoZSBtdWx0aS1wYWNrLWluZGV4IGlzIGV4dGVuZGVkIHRvIHN0b3JlIGEgInN0YWJsZSBvYmplY3Qgb3JkZXIiCisgIChhIGZ1bmN0aW9uIE9yZGVyKGhhc2gpID0gaW50ZWdlciB0aGF0IGlzIGNvbnN0YW50IGZvciBhIGdpdmVuIGhhc2gsCisgIGV2ZW4gYXMgdGhlIG11bHRpLXBhY2staW5kZXggaXMgdXBkYXRlZCkgdGhlbiBhIHJlYWNoYWJpbGl0eSBiaXRtYXAKKyAgY291bGQgcG9pbnQgdG8gYSBtdWx0aS1wYWNrLWluZGV4IGFuZCBiZSB1cGRhdGVkIGluZGVwZW5kZW50bHkuCisKKy0gUGFja2ZpbGVzIGNhbiBiZSBtYXJrZWQgYXMgInNwZWNpYWwiIHVzaW5nIGVtcHR5IGZpbGVzIHRoYXQgc2hhcmUKKyAgdGhlIGluaXRpYWwgbmFtZSBidXQgcmVwbGFjZSAiLnBhY2siIHdpdGggIi5rZWVwIiBvciAiLnByb21pc29yIi4KKyAgV2UgY2FuIGFkZCBhbiBvcHRpb25hbCBjaHVuayBvZiBkYXRhIHRvIHRoZSBtdWx0aS1wYWNrLWluZGV4IHRoYXQKKyAgcmVjb3JkcyBmbGFncyBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFja2ZpbGVzLiBUaGlzIGFsbG93cyBuZXcKKyAgc3RhdGVzLCBzdWNoIGFzICdyZXBhY2tlZCcgb3IgJ3JlZGVsdGlmaWVkJywgdGhhdCBjYW4gaGVscCB3aXRoCisgIHBhY2sgbWFpbnRlbmFuY2UgaW4gYSBtdWx0aS1wYWNrIGVudmlyb25tZW50LiBJdCBtYXkgYWxzbyBiZQorICBoZWxwZnVsIHRvIG9yZ2FuaXplIHBhY2tmaWxlcyBieSBvYmplY3QgdHlwZSAoY29tbWl0LCB0cmVlLCBibG9iLAorICBldGMuKSBhbmQgdXNlIHRoaXMgbWV0YWRhdGEgdG8gaGVscCB0aGF0IG1haW50ZW5hbmNlLgorCistIFRoZSBwYXJ0aWFsIGNsb25lIGZlYXR1cmUgcmVjb3JkcyBzcGVjaWFsICJwcm9taXNvciIgcGFja3MgdGhhdAorICBtYXkgcG9pbnQgdG8gb2JqZWN0cyB0aGF0IGFyZSBub3Qgc3RvcmVkIGxvY2FsbHksIGJ1dCBhdmFpbGFibGUKKyAgb24gcmVxdWVzdCB0byBhIHNlcnZlci4gVGhlIG11bHRpLXBhY2staW5kZXggZG9lcyBub3QgY3VycmVudGx5CisgIHRyYWNrIHRoZXNlIHByb21pc29yIHBhY2tzLgorCitSZWxhdGVkIExpbmtzCistLS0tLS0tLS0tLS0tCitbMF0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2dpdC9pc3N1ZXMvZGV0YWlsP2lkPTYKKyAgICBDaHJvbWl1bSB3b3JrIGl0ZW0gZm9yOiBNdWx0aS1QYWNrIEluZGV4IChNSURYKQorCitbMV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTgwMTA3MTgxNDU5LjIyMjkwOS0xLWRzdG9sZWVAbWljcm9zb2Z0LmNvbS8KKyAgICBBbiBlYXJsaWVyIFJGQyBmb3IgdGhlIG11bHRpLXBhY2staW5kZXggZmVhdHVyZQorCitbMl0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0L2FscGluZS5ERUIuMi4yMC4xODAzMDkxNTU3NTEwLjIzMTA5QGFsZXhtdi1saW51eC8KKyAgICBHaXQgTWVyZ2UgMjAxOCBDb250cmlidXRvcidzIHN1bW1pdCBub3RlcyAoaW5jbHVkZXMgZGlzY3Vzc2lvbiBvZiBNSURYKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1mb3JtYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYTE0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLWZvcm1hdC50eHQKQEAgLTAsMCArMSwzMzIgQEAKK0dpdCBwYWNrIGZvcm1hdAorPT09PT09PT09PT09PT09CisKKz09IHBhY2stKi5wYWNrIGZpbGVzIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisKKyAgIC0gQSBoZWFkZXIgYXBwZWFycyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgIDQtYnl0ZSBzaWduYXR1cmU6CisgICAgICAgICBUaGUgc2lnbmF0dXJlIGlzOiB7J1AnLCAnQScsICdDJywgJ0snfQorCisgICAgIDQtYnl0ZSB2ZXJzaW9uIG51bWJlciAobmV0d29yayBieXRlIG9yZGVyKToKKwkgR2l0IGN1cnJlbnRseSBhY2NlcHRzIHZlcnNpb24gbnVtYmVyIDIgb3IgMyBidXQKKyAgICAgICAgIGdlbmVyYXRlcyB2ZXJzaW9uIDIgb25seS4KKworICAgICA0LWJ5dGUgbnVtYmVyIG9mIG9iamVjdHMgY29udGFpbmVkIGluIHRoZSBwYWNrIChuZXR3b3JrIGJ5dGUgb3JkZXIpCisKKyAgICAgT2JzZXJ2YXRpb246IHdlIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiA0RyB2ZXJzaW9ucyA7LSkgYW5kCisgICAgIG1vcmUgdGhhbiA0RyBvYmplY3RzIGluIGEgcGFjay4KKworICAgLSBUaGUgaGVhZGVyIGlzIGZvbGxvd2VkIGJ5IG51bWJlciBvZiBvYmplY3QgZW50cmllcywgZWFjaCBvZgorICAgICB3aGljaCBsb29rcyBsaWtlIHRoaXM6CisKKyAgICAgKHVuZGVsdGlmaWVkIHJlcHJlc2VudGF0aW9uKQorICAgICBuLWJ5dGUgdHlwZSBhbmQgbGVuZ3RoICgzLWJpdCB0eXBlLCAobi0xKSo3KzQtYml0IGxlbmd0aCkKKyAgICAgY29tcHJlc3NlZCBkYXRhCisKKyAgICAgKGRlbHRpZmllZCByZXByZXNlbnRhdGlvbikKKyAgICAgbi1ieXRlIHR5cGUgYW5kIGxlbmd0aCAoMy1iaXQgdHlwZSwgKG4tMSkqNys0LWJpdCBsZW5ndGgpCisgICAgIDIwLWJ5dGUgYmFzZSBvYmplY3QgbmFtZSBpZiBPQkpfUkVGX0RFTFRBIG9yIGEgbmVnYXRpdmUgcmVsYXRpdmUKKwkgb2Zmc2V0IGZyb20gdGhlIGRlbHRhIG9iamVjdCdzIHBvc2l0aW9uIGluIHRoZSBwYWNrIGlmIHRoaXMKKwkgaXMgYW4gT0JKX09GU19ERUxUQSBvYmplY3QKKyAgICAgY29tcHJlc3NlZCBkZWx0YSBkYXRhCisKKyAgICAgT2JzZXJ2YXRpb246IGxlbmd0aCBvZiBlYWNoIG9iamVjdCBpcyBlbmNvZGVkIGluIGEgdmFyaWFibGUKKyAgICAgbGVuZ3RoIGZvcm1hdCBhbmQgaXMgbm90IGNvbnN0cmFpbmVkIHRvIDMyLWJpdCBvciBhbnl0aGluZy4KKworICAtIFRoZSB0cmFpbGVyIHJlY29yZHMgMjAtYnl0ZSBTSEEtMSBjaGVja3N1bSBvZiBhbGwgb2YgdGhlIGFib3ZlLgorCis9PT0gT2JqZWN0IHR5cGVzCisKK1ZhbGlkIG9iamVjdCB0eXBlcyBhcmU6CisKKy0gT0JKX0NPTU1JVCAoMSkKKy0gT0JKX1RSRUUgKDIpCistIE9CSl9CTE9CICgzKQorLSBPQkpfVEFHICg0KQorLSBPQkpfT0ZTX0RFTFRBICg2KQorLSBPQkpfUkVGX0RFTFRBICg3KQorCitUeXBlIDUgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHBhbnNpb24uIFR5cGUgMCBpcyBpbnZhbGlkLgorCis9PT0gRGVsdGlmaWVkIHJlcHJlc2VudGF0aW9uCisKK0NvbmNlcHR1YWxseSB0aGVyZSBhcmUgb25seSBmb3VyIG9iamVjdCB0eXBlczogY29tbWl0LCB0cmVlLCB0YWcgYW5kCitibG9iLiBIb3dldmVyIHRvIHNhdmUgc3BhY2UsIGFuIG9iamVjdCBjb3VsZCBiZSBzdG9yZWQgYXMgYSAiZGVsdGEiIG9mCithbm90aGVyICJiYXNlIiBvYmplY3QuIFRoZXNlIHJlcHJlc2VudGF0aW9ucyBhcmUgYXNzaWduZWQgbmV3IHR5cGVzCitvZnMtZGVsdGEgYW5kIHJlZi1kZWx0YSwgd2hpY2ggaXMgb25seSB2YWxpZCBpbiBhIHBhY2sgZmlsZS4KKworQm90aCBvZnMtZGVsdGEgYW5kIHJlZi1kZWx0YSBzdG9yZSB0aGUgImRlbHRhIiB0byBiZSBhcHBsaWVkIHRvCithbm90aGVyIG9iamVjdCAoY2FsbGVkICdiYXNlIG9iamVjdCcpIHRvIHJlY29uc3RydWN0IHRoZSBvYmplY3QuIFRoZQorZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gaXMsIHJlZi1kZWx0YSBkaXJlY3RseSBlbmNvZGVzIDIwLWJ5dGUgYmFzZQorb2JqZWN0IG5hbWUuIElmIHRoZSBiYXNlIG9iamVjdCBpcyBpbiB0aGUgc2FtZSBwYWNrLCBvZnMtZGVsdGEgZW5jb2RlcwordGhlIG9mZnNldCBvZiB0aGUgYmFzZSBvYmplY3QgaW4gdGhlIHBhY2sgaW5zdGVhZC4KKworVGhlIGJhc2Ugb2JqZWN0IGNvdWxkIGFsc28gYmUgZGVsdGlmaWVkIGlmIGl0J3MgaW4gdGhlIHNhbWUgcGFjay4KK1JlZi1kZWx0YSBjYW4gYWxzbyByZWZlciB0byBhbiBvYmplY3Qgb3V0c2lkZSB0aGUgcGFjayAoaS5lLiB0aGUKK3NvLWNhbGxlZCAidGhpbiBwYWNrIikuIFdoZW4gc3RvcmVkIG9uIGRpc2sgaG93ZXZlciwgdGhlIHBhY2sgc2hvdWxkCitiZSBzZWxmIGNvbnRhaW5lZCB0byBhdm9pZCBjeWNsaWMgZGVwZW5kZW5jeS4KKworVGhlIGRlbHRhIGRhdGEgaXMgYSBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnMgdG8gcmVjb25zdHJ1Y3QgYW4gb2JqZWN0Citmcm9tIHRoZSBiYXNlIG9iamVjdC4gSWYgdGhlIGJhc2Ugb2JqZWN0IGlzIGRlbHRpZmllZCwgaXQgbXVzdCBiZQorY29udmVydGVkIHRvIGNhbm9uaWNhbCBmb3JtIGZpcnN0LiBFYWNoIGluc3RydWN0aW9uIGFwcGVuZHMgbW9yZSBhbmQKK21vcmUgZGF0YSB0byB0aGUgdGFyZ2V0IG9iamVjdCB1bnRpbCBpdCdzIGNvbXBsZXRlLiBUaGVyZSBhcmUgdHdvCitzdXBwb3J0ZWQgaW5zdHJ1Y3Rpb25zIHNvIGZhcjogb25lIGZvciBjb3B5IGEgYnl0ZSByYW5nZSBmcm9tIHRoZQorc291cmNlIG9iamVjdCBhbmQgb25lIGZvciBpbnNlcnRpbmcgbmV3IGRhdGEgZW1iZWRkZWQgaW4gdGhlCitpbnN0cnVjdGlvbiBpdHNlbGYuCisKK0VhY2ggaW5zdHJ1Y3Rpb24gaGFzIHZhcmlhYmxlIGxlbmd0aC4gSW5zdHJ1Y3Rpb24gdHlwZSBpcyBkZXRlcm1pbmVkCitieSB0aGUgc2V2ZW50aCBiaXQgb2YgdGhlIGZpcnN0IG9jdGV0LiBUaGUgZm9sbG93aW5nIGRpYWdyYW1zIGZvbGxvdwordGhlIGNvbnZlbnRpb24gaW4gUkZDIDE5NTEgKERlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCkuCisKKz09PT0gSW5zdHJ1Y3Rpb24gdG8gY29weSBmcm9tIGJhc2Ugb2JqZWN0CisKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworICB8IDF4eHh4eHh4IHwgb2Zmc2V0MSB8IG9mZnNldDIgfCBvZmZzZXQzIHwgb2Zmc2V0NCB8IHNpemUxIHwgc2l6ZTIgfCBzaXplMyB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKKworVGhpcyBpcyB0aGUgaW5zdHJ1Y3Rpb24gZm9ybWF0IHRvIGNvcHkgYSBieXRlIHJhbmdlIGZyb20gdGhlIHNvdXJjZQorb2JqZWN0LiBJdCBlbmNvZGVzIHRoZSBvZmZzZXQgdG8gY29weSBmcm9tIGFuZCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvCitjb3B5LiBPZmZzZXQgYW5kIHNpemUgYXJlIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIuCisKK0FsbCBvZmZzZXQgYW5kIHNpemUgYnl0ZXMgYXJlIG9wdGlvbmFsLiBUaGlzIGlzIHRvIHJlZHVjZSB0aGUKK2luc3RydWN0aW9uIHNpemUgd2hlbiBlbmNvZGluZyBzbWFsbCBvZmZzZXRzIG9yIHNpemVzLiBUaGUgZmlyc3Qgc2V2ZW4KK2JpdHMgaW4gdGhlIGZpcnN0IG9jdGV0IGRldGVybWluZXMgd2hpY2ggb2YgdGhlIG5leHQgc2V2ZW4gb2N0ZXRzIGlzCitwcmVzZW50LiBJZiBiaXQgemVybyBpcyBzZXQsIG9mZnNldDEgaXMgcHJlc2VudC4gSWYgYml0IG9uZSBpcyBzZXQKK29mZnNldDIgaXMgcHJlc2VudCBhbmQgc28gb24uCisKK05vdGUgdGhhdCBhIG1vcmUgY29tcGFjdCBpbnN0cnVjdGlvbiBkb2VzIG5vdCBjaGFuZ2Ugb2Zmc2V0IGFuZCBzaXplCitlbmNvZGluZy4gRm9yIGV4YW1wbGUsIGlmIG9ubHkgb2Zmc2V0MiBpcyBvbWl0dGVkIGxpa2UgYmVsb3csIG9mZnNldDMKK3N0aWxsIGNvbnRhaW5zIGJpdHMgMTYtMjMuIEl0IGRvZXMgbm90IGJlY29tZSBvZmZzZXQyIGFuZCBjb250YWlucworYml0cyA4LTE1IGV2ZW4gaWYgaXQncyByaWdodCBuZXh0IHRvIG9mZnNldDEuCisKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSsKKyAgfCAxMDAwMDEwMSB8IG9mZnNldDEgfCBvZmZzZXQzIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSsKKworSW4gaXRzIG1vc3QgY29tcGFjdCBmb3JtLCB0aGlzIGluc3RydWN0aW9uIG9ubHkgdGFrZXMgdXAgb25lIGJ5dGUKKygweDgwKSB3aXRoIGJvdGggb2Zmc2V0IGFuZCBzaXplIG9taXR0ZWQsIHdoaWNoIHdpbGwgaGF2ZSBkZWZhdWx0Cit2YWx1ZXMgemVyby4gVGhlcmUgaXMgYW5vdGhlciBleGNlcHRpb246IHNpemUgemVybyBpcyBhdXRvbWF0aWNhbGx5Citjb252ZXJ0ZWQgdG8gMHgxMDAwMC4KKworPT09PSBJbnN0cnVjdGlvbiB0byBhZGQgbmV3IGRhdGEKKworICArLS0tLS0tLS0tLSs9PT09PT09PT09PT0rCisgIHwgMHh4eHh4eHggfCAgICBkYXRhICAgIHwKKyAgKy0tLS0tLS0tLS0rPT09PT09PT09PT09KworCitUaGlzIGlzIHRoZSBpbnN0cnVjdGlvbiB0byBjb25zdHJ1Y3QgdGFyZ2V0IG9iamVjdCB3aXRob3V0IHRoZSBiYXNlCitvYmplY3QuIFRoZSBmb2xsb3dpbmcgZGF0YSBpcyBhcHBlbmRlZCB0byB0aGUgdGFyZ2V0IG9iamVjdC4gVGhlIGZpcnN0CitzZXZlbiBiaXRzIG9mIHRoZSBmaXJzdCBvY3RldCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIGRhdGEgaW4KK2J5dGVzLiBUaGUgc2l6ZSBtdXN0IGJlIG5vbi16ZXJvLgorCis9PT09IFJlc2VydmVkIGluc3RydWN0aW9uCisKKyAgKy0tLS0tLS0tLS0rPT09PT09PT09PT09CisgIHwgMDAwMDAwMDAgfAorICArLS0tLS0tLS0tLSs9PT09PT09PT09PT0KKworVGhpcyBpcyB0aGUgaW5zdHJ1Y3Rpb24gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHBhbnNpb24uCisKKz09IE9yaWdpbmFsICh2ZXJzaW9uIDEpIHBhY2stKi5pZHggZmlsZXMgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworICAtIFRoZSBoZWFkZXIgY29uc2lzdHMgb2YgMjU2IDQtYnl0ZSBuZXR3b3JrIGJ5dGUgb3JkZXIKKyAgICBpbnRlZ2Vycy4gIE4tdGggZW50cnkgb2YgdGhpcyB0YWJsZSByZWNvcmRzIHRoZSBudW1iZXIgb2YKKyAgICBvYmplY3RzIGluIHRoZSBjb3JyZXNwb25kaW5nIHBhY2ssIHRoZSBmaXJzdCBieXRlIG9mIHdob3NlCisgICAgb2JqZWN0IG5hbWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIE4uICBUaGlzIGlzIGNhbGxlZCB0aGUKKyAgICAnZmlyc3QtbGV2ZWwgZmFuLW91dCcgdGFibGUuCisKKyAgLSBUaGUgaGVhZGVyIGlzIGZvbGxvd2VkIGJ5IHNvcnRlZCAyNC1ieXRlIGVudHJpZXMsIG9uZSBlbnRyeQorICAgIHBlciBvYmplY3QgaW4gdGhlIHBhY2suICBFYWNoIGVudHJ5IGlzOgorCisgICAgNC1ieXRlIG5ldHdvcmsgYnl0ZSBvcmRlciBpbnRlZ2VyLCByZWNvcmRpbmcgd2hlcmUgdGhlCisgICAgb2JqZWN0IGlzIHN0b3JlZCBpbiB0aGUgcGFja2ZpbGUgYXMgdGhlIG9mZnNldCBmcm9tIHRoZQorICAgIGJlZ2lubmluZy4KKworICAgIDIwLWJ5dGUgb2JqZWN0IG5hbWUuCisKKyAgLSBUaGUgZmlsZSBpcyBjb25jbHVkZWQgd2l0aCBhIHRyYWlsZXI6CisKKyAgICBBIGNvcHkgb2YgdGhlIDIwLWJ5dGUgU0hBLTEgY2hlY2tzdW0gYXQgdGhlIGVuZCBvZgorICAgIGNvcnJlc3BvbmRpbmcgcGFja2ZpbGUuCisKKyAgICAyMC1ieXRlIFNIQS0xLWNoZWNrc3VtIG9mIGFsbCBvZiB0aGUgYWJvdmUuCisKK1BhY2sgSWR4IGZpbGU6CisKKwktLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworZmFub3V0CSAgICB8IGZhbm91dFswXSA9IDIgKGZvciBleGFtcGxlKSAgICB8LS4KK3RhYmxlCSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwKKwkgICAgfCBmYW5vdXRbMV0gICAgICAgICAgICAgICAgICAgICAgfCB8CisJICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAorCSAgICB8IGZhbm91dFsyXSAgICAgICAgICAgICAgICAgICAgICB8IHwKKwkgICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fiB8CisJICAgIHwgZmFub3V0WzI1NV0gPSB0b3RhbCBvYmplY3RzICAgIHwtLS0uCisJLS0gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfCB8CittYWluCSAgICB8IG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfAoraW5kZXgJICAgIHwgb2JqZWN0IG5hbWUgMDBYWFhYWFhYWFhYWFhYWFhYIHwgfCB8Cit0YWJsZQkgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8IHwKKwkgICAgfCBvZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IHwKKwkgICAgfCBvYmplY3QgbmFtZSAwMFhYWFhYWFhYWFhYWFhYWFggfCB8IHwKKwkgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKzwrIHwKKwkgIC4tfCBvZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwKKwkgIHwgfCBvYmplY3QgbmFtZSAwMVhYWFhYWFhYWFhYWFhYWFggfCAgIHwKKwkgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIHwKKwkgIHwgfCBvZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwKKwkgIHwgfCBvYmplY3QgbmFtZSAwMVhYWFhYWFhYWFhYWFhYWFggfCAgIHwKKwkgIHwgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fiAgIHwKKwkgIHwgfCBvZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwKKwkgIHwgfCBvYmplY3QgbmFtZSBGRlhYWFhYWFhYWFhYWFhYWFggfCAgIHwKKwktLXwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKzwtLSsKK3RyYWlsZXIJICB8IHwgcGFja2ZpbGUgY2hlY2tzdW0gICAgICAgICAgICAgIHwKKwkgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgfCB8IGlkeGZpbGUgY2hlY2tzdW0gICAgICAgICAgICAgICB8CisJICB8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAuLS0tLS0tLS4KKyAgICAgICAgICAgICAgICAgIHwKK1BhY2sgZmlsZSBlbnRyeTogPCsKKworICAgICBwYWNrZWQgb2JqZWN0IGhlYWRlcjoKKwkxLWJ5dGUgc2l6ZSBleHRlbnNpb24gYml0IChNU0IpCisJICAgICAgIHR5cGUgKG5leHQgMyBiaXQpCisJICAgICAgIHNpemUwIChsb3dlciA0LWJpdCkKKyAgICAgICAgbi1ieXRlIHNpemVOIChhcyBsb25nIGFzIE1TQiBpcyBzZXQsIGVhY2ggNy1iaXQpCisJCXNpemUwLi5zaXplTiBmb3JtIDQrNys3Ky4uKzcgYml0IGludGVnZXIsIHNpemUwCisJCWlzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBwYXJ0LCBhbmQgc2l6ZU4gaXMgdGhlCisJCW1vc3Qgc2lnbmlmaWNhbnQgcGFydC4KKyAgICAgcGFja2VkIG9iamVjdCBkYXRhOgorICAgICAgICBJZiBpdCBpcyBub3QgREVMVEEsIHRoZW4gZGVmbGF0ZWQgYnl0ZXMgKHRoZSBzaXplIGFib3ZlCisJCWlzIHRoZSBzaXplIGJlZm9yZSBjb21wcmVzc2lvbikuCisJSWYgaXQgaXMgUkVGX0RFTFRBLCB0aGVuCisJICAyMC1ieXRlIGJhc2Ugb2JqZWN0IG5hbWUgU0hBLTEgKHRoZSBzaXplIGFib3ZlIGlzIHRoZQorCQlzaXplIG9mIHRoZSBkZWx0YSBkYXRhIHRoYXQgZm9sbG93cykuCisgICAgICAgICAgZGVsdGEgZGF0YSwgZGVmbGF0ZWQuCisJSWYgaXQgaXMgT0ZTX0RFTFRBLCB0aGVuCisJICBuLWJ5dGUgb2Zmc2V0IChzZWUgYmVsb3cpIGludGVycHJldGVkIGFzIGEgbmVnYXRpdmUKKwkJb2Zmc2V0IGZyb20gdGhlIHR5cGUtYnl0ZSBvZiB0aGUgaGVhZGVyIG9mIHRoZQorCQlvZnMtZGVsdGEgZW50cnkgKHRoZSBzaXplIGFib3ZlIGlzIHRoZSBzaXplIG9mCisJCXRoZSBkZWx0YSBkYXRhIHRoYXQgZm9sbG93cykuCisJICBkZWx0YSBkYXRhLCBkZWZsYXRlZC4KKworICAgICBvZmZzZXQgZW5jb2Rpbmc6CisJICBuIGJ5dGVzIHdpdGggTVNCIHNldCBpbiBhbGwgYnV0IHRoZSBsYXN0IG9uZS4KKwkgIFRoZSBvZmZzZXQgaXMgdGhlbiB0aGUgbnVtYmVyIGNvbnN0cnVjdGVkIGJ5CisJICBjb25jYXRlbmF0aW5nIHRoZSBsb3dlciA3IGJpdCBvZiBlYWNoIGJ5dGUsIGFuZAorCSAgZm9yIG4gPj0gMiBhZGRpbmcgMl43ICsgMl4xNCArIC4uLiArIDJeKDcqKG4tMSkpCisJICB0byB0aGUgcmVzdWx0LgorCisKKworPT0gVmVyc2lvbiAyIHBhY2stKi5pZHggZmlsZXMgc3VwcG9ydCBwYWNrcyBsYXJnZXIgdGhhbiA0IEdpQiwgYW5kCisgICBoYXZlIHNvbWUgb3RoZXIgcmVvcmdhbml6YXRpb25zLiAgVGhleSBoYXZlIHRoZSBmb3JtYXQ6CisKKyAgLSBBIDQtYnl0ZSBtYWdpYyBudW1iZXIgJ1wzNzd0T2MnIHdoaWNoIGlzIGFuIHVucmVhc29uYWJsZQorICAgIGZhbm91dFswXSB2YWx1ZS4KKworICAtIEEgNC1ieXRlIHZlcnNpb24gbnVtYmVyICg9IDIpCisKKyAgLSBBIDI1Ni1lbnRyeSBmYW4tb3V0IHRhYmxlIGp1c3QgbGlrZSB2MS4KKworICAtIEEgdGFibGUgb2Ygc29ydGVkIDIwLWJ5dGUgU0hBLTEgb2JqZWN0IG5hbWVzLiAgVGhlc2UgYXJlCisgICAgcGFja2VkIHRvZ2V0aGVyIHdpdGhvdXQgb2Zmc2V0IHZhbHVlcyB0byByZWR1Y2UgdGhlIGNhY2hlCisgICAgZm9vdHByaW50IG9mIHRoZSBiaW5hcnkgc2VhcmNoIGZvciBhIHNwZWNpZmljIG9iamVjdCBuYW1lLgorCisgIC0gQSB0YWJsZSBvZiA0LWJ5dGUgQ1JDMzIgdmFsdWVzIG9mIHRoZSBwYWNrZWQgb2JqZWN0IGRhdGEuCisgICAgVGhpcyBpcyBuZXcgaW4gdjIgc28gY29tcHJlc3NlZCBkYXRhIGNhbiBiZSBjb3BpZWQgZGlyZWN0bHkKKyAgICBmcm9tIHBhY2sgdG8gcGFjayBkdXJpbmcgcmVwYWNraW5nIHdpdGhvdXQgdW5kZXRlY3RlZAorICAgIGRhdGEgY29ycnVwdGlvbi4KKworICAtIEEgdGFibGUgb2YgNC1ieXRlIG9mZnNldCB2YWx1ZXMgKGluIG5ldHdvcmsgYnl0ZSBvcmRlcikuCisgICAgVGhlc2UgYXJlIHVzdWFsbHkgMzEtYml0IHBhY2sgZmlsZSBvZmZzZXRzLCBidXQgbGFyZ2UKKyAgICBvZmZzZXRzIGFyZSBlbmNvZGVkIGFzIGFuIGluZGV4IGludG8gdGhlIG5leHQgdGFibGUgd2l0aAorICAgIHRoZSBtc2JpdCBzZXQuCisKKyAgLSBBIHRhYmxlIG9mIDgtYnl0ZSBvZmZzZXQgZW50cmllcyAoZW1wdHkgZm9yIHBhY2sgZmlsZXMgbGVzcworICAgIHRoYW4gMiBHaUIpLiAgUGFjayBmaWxlcyBhcmUgb3JnYW5pemVkIHdpdGggaGVhdmlseSB1c2VkCisgICAgb2JqZWN0cyB0b3dhcmQgdGhlIGZyb250LCBzbyBtb3N0IG9iamVjdCByZWZlcmVuY2VzIHNob3VsZAorICAgIG5vdCBuZWVkIHRvIHJlZmVyIHRvIHRoaXMgdGFibGUuCisKKyAgLSBUaGUgc2FtZSB0cmFpbGVyIGFzIGEgdjEgcGFjayBmaWxlOgorCisgICAgQSBjb3B5IG9mIHRoZSAyMC1ieXRlIFNIQS0xIGNoZWNrc3VtIGF0IHRoZSBlbmQgb2YKKyAgICBjb3JyZXNwb25kaW5nIHBhY2tmaWxlLgorCisgICAgMjAtYnl0ZSBTSEEtMS1jaGVja3N1bSBvZiBhbGwgb2YgdGhlIGFib3ZlLgorCis9PSBtdWx0aS1wYWNrLWluZGV4IChNSURYKSBmaWxlcyBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCitUaGUgbXVsdGktcGFjay1pbmRleCBmaWxlcyByZWZlciB0byBtdWx0aXBsZSBwYWNrLWZpbGVzIGFuZCBsb29zZSBvYmplY3RzLgorCitJbiBvcmRlciB0byBhbGxvdyBleHRlbnNpb25zIHRoYXQgYWRkIGV4dHJhIGRhdGEgdG8gdGhlIE1JRFgsIHdlIG9yZ2FuaXplCit0aGUgYm9keSBpbnRvICJjaHVua3MiIGFuZCBwcm92aWRlIGEgbG9va3VwIHRhYmxlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCitib2R5LiBUaGUgaGVhZGVyIGluY2x1ZGVzIGNlcnRhaW4gbGVuZ3RoIHZhbHVlcywgc3VjaCBhcyB0aGUgbnVtYmVyIG9mIHBhY2tzLAordGhlIG51bWJlciBvZiBiYXNlIE1JRFggZmlsZXMsIGhhc2ggbGVuZ3RocyBhbmQgdHlwZXMuCisKK0FsbCA0LWJ5dGUgbnVtYmVycyBhcmUgaW4gbmV0d29yayBvcmRlci4KKworSEVBREVSOgorCisJNC1ieXRlIHNpZ25hdHVyZToKKwkgICAgVGhlIHNpZ25hdHVyZSBpczogeydNJywgJ0knLCAnRCcsICdYJ30KKworCTEtYnl0ZSB2ZXJzaW9uIG51bWJlcjoKKwkgICAgR2l0IG9ubHkgd3JpdGVzIG9yIHJlY29nbml6ZXMgdmVyc2lvbiAxLgorCisJMS1ieXRlIE9iamVjdCBJZCBWZXJzaW9uCisJICAgIEdpdCBvbmx5IHdyaXRlcyBvciByZWNvZ25pemVzIHZlcnNpb24gMSAoU0hBMSkuCisKKwkxLWJ5dGUgbnVtYmVyIG9mICJjaHVua3MiCisKKwkxLWJ5dGUgbnVtYmVyIG9mIGJhc2UgbXVsdGktcGFjay1pbmRleCBmaWxlczoKKwkgICAgVGhpcyB2YWx1ZSBpcyBjdXJyZW50bHkgYWx3YXlzIHplcm8uCisKKwk0LWJ5dGUgbnVtYmVyIG9mIHBhY2sgZmlsZXMKKworQ0hVTksgTE9PS1VQOgorCisJKEMgKyAxKSAqIDEyIGJ5dGVzIHByb3ZpZGluZyB0aGUgY2h1bmsgb2Zmc2V0czoKKwkgICAgRmlyc3QgNCBieXRlcyBkZXNjcmliZSBjaHVuayBpZC4gVmFsdWUgMCBpcyBhIHRlcm1pbmF0aW5nIGxhYmVsLgorCSAgICBPdGhlciA4IGJ5dGVzIHByb3ZpZGUgb2Zmc2V0IGluIGN1cnJlbnQgZmlsZSBmb3IgY2h1bmsgdG8gc3RhcnQuCisJICAgIChDaHVua3MgYXJlIHByb3ZpZGVkIGluIGZpbGUtb3JkZXIsIHNvIHlvdSBjYW4gaW5mZXIgdGhlIGxlbmd0aAorCSAgICB1c2luZyB0aGUgbmV4dCBjaHVuayBwb3NpdGlvbiBpZiBuZWNlc3NhcnkuKQorCisJVGhlIHJlbWFpbmluZyBkYXRhIGluIHRoZSBib2R5IGlzIGRlc2NyaWJlZCBvbmUgY2h1bmsgYXQgYSB0aW1lLCBhbmQKKwl0aGVzZSBjaHVua3MgbWF5IGJlIGdpdmVuIGluIGFueSBvcmRlci4gQ2h1bmtzIGFyZSByZXF1aXJlZCB1bmxlc3MKKwlvdGhlcndpc2Ugc3BlY2lmaWVkLgorCitDSFVOSyBEQVRBOgorCisJUGFja2ZpbGUgTmFtZXMgKElEOiB7J1AnLCAnTicsICdBJywgJ00nfSkKKwkgICAgU3RvcmVzIHRoZSBwYWNrZmlsZSBuYW1lcyBhcyBjb25jYXRlbmF0ZWQsIG51bGwtdGVybWluYXRlZCBzdHJpbmdzLgorCSAgICBQYWNrZmlsZXMgbXVzdCBiZSBsaXN0ZWQgaW4gbGV4aWNvZ3JhcGhpYyBvcmRlciBmb3IgZmFzdCBsb29rdXBzIGJ5CisJICAgIG5hbWUuIFRoaXMgaXMgdGhlIG9ubHkgY2h1bmsgbm90IGd1YXJhbnRlZWQgdG8gYmUgYSBtdWx0aXBsZSBvZiBmb3VyCisJICAgIGJ5dGVzIGluIGxlbmd0aCwgc28gc2hvdWxkIGJlIHRoZSBsYXN0IGNodW5rIGZvciBhbGlnbm1lbnQgcmVhc29ucy4KKworCU9JRCBGYW5vdXQgKElEOiB7J08nLCAnSScsICdEJywgJ0YnfSkKKwkgICAgVGhlIGl0aCBlbnRyeSwgRltpXSwgc3RvcmVzIHRoZSBudW1iZXIgb2YgT0lEcyB3aXRoIGZpcnN0CisJICAgIGJ5dGUgYXQgbW9zdCBpLiBUaHVzIEZbMjU1XSBzdG9yZXMgdGhlIHRvdGFsCisJICAgIG51bWJlciBvZiBvYmplY3RzLgorCisJT0lEIExvb2t1cCAoSUQ6IHsnTycsICdJJywgJ0QnLCAnTCd9KQorCSAgICBUaGUgT0lEcyBmb3IgYWxsIG9iamVjdHMgaW4gdGhlIE1JRFggYXJlIHN0b3JlZCBpbiBsZXhpY29ncmFwaGljCisJICAgIG9yZGVyIGluIHRoaXMgY2h1bmsuCisKKwlPYmplY3QgT2Zmc2V0cyAoSUQ6IHsnTycsICdPJywgJ0YnLCAnRid9KQorCSAgICBTdG9yZXMgdHdvIDQtYnl0ZSB2YWx1ZXMgZm9yIGV2ZXJ5IG9iamVjdC4KKwkgICAgMTogVGhlIHBhY2staW50LWlkIGZvciB0aGUgcGFjayBzdG9yaW5nIHRoaXMgb2JqZWN0LgorCSAgICAyOiBUaGUgb2Zmc2V0IHdpdGhpbiB0aGUgcGFjay4KKwkJSWYgYWxsIG9mZnNldHMgYXJlIGxlc3MgdGhhbiAyXjMyLCB0aGVuIHRoZSBsYXJnZSBvZmZzZXQgY2h1bmsKKwkJd2lsbCBub3QgZXhpc3QgYW5kIG9mZnNldHMgYXJlIHN0b3JlZCBhcyBpbiBJRFggdjEuCisJCUlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBvZmZzZXQgdmFsdWUgbGFyZ2VyIHRoYW4gMl4zMi0xLCB0aGVuCisJCXRoZSBsYXJnZSBvZmZzZXQgY2h1bmsgbXVzdCBleGlzdCwgYW5kIG9mZnNldHMgbGFyZ2VyIHRoYW4KKwkJMl4zMS0xIG11c3QgYmUgc3RvcmVkIGluIGl0IGluc3RlYWQuIElmIHRoZSBsYXJnZSBvZmZzZXQgY2h1bmsKKwkJZXhpc3RzIGFuZCB0aGUgMzFzdCBiaXQgaXMgb24sIHRoZW4gcmVtb3ZpbmcgdGhhdCBiaXQgcmV2ZWFscworCQl0aGUgcm93IGluIHRoZSBsYXJnZSBvZmZzZXRzIGNvbnRhaW5pbmcgdGhlIDgtYnl0ZSBvZmZzZXQgb2YKKwkJdGhpcyBvYmplY3QuCisKKwlbT3B0aW9uYWxdIE9iamVjdCBMYXJnZSBPZmZzZXRzIChJRDogeydMJywgJ08nLCAnRicsICdGJ30pCisJICAgIDgtYnl0ZSBvZmZzZXRzIGludG8gbGFyZ2UgcGFja2ZpbGVzLgorCitUUkFJTEVSOgorCisJMjAtYnl0ZSBTSEExLWNoZWNrc3VtIG9mIHRoZSBhYm92ZSBjb250ZW50cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2staGV1cmlzdGljcy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLWhldXJpc3RpY3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YTA3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLWhldXJpc3RpY3MudHh0CkBAIC0wLDAgKzEsNDYwIEBACitDb25jZXJuaW5nIEdpdCdzIFBhY2tpbmcgSGV1cmlzdGljcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICBPaCwgaGVyZSdzIGEgcmVhbGx5IHN0dXBpZCBxdWVzdGlvbjoKKworICAgICAgICAgICAgICAgICAgV2hlcmUgZG8gSSBnbworICAgICAgICAgICAgICAgdG8gbGVhcm4gdGhlIGRldGFpbHMKKwkgICAgb2YgR2l0J3MgcGFja2luZyBoZXVyaXN0aWNzPworCitCZSBjYXJlZnVsIHdoYXQgeW91IGFzayEKKworRm9sbG93ZXJzIG9mIHRoZSBHaXQsIHBsZWFzZSBvcGVuIHRoZSBHaXQgSVJDIExvZyBhbmQgdHVybiB0bworRmVicnVhcnkgMTAsIDIwMDYuCisKK0l0J3MgYSByYXJlIG9jY2FzaW9uLCBhbmQgd2UgYXJlIGpvaW5lZCBieSB0aGUgS2luZyBHaXQgSGltc2VsZiwKK0xpbnVzIFRvcnZhbGRzIChsaW51cykuICBOYXRoYW5pZWwgU21pdGgsIChuanNgKSwgaGFzIHRoZSBmbG9vcgorYW5kIHNlZWtzIGVubGlnaHRlbm1lbnQuICBPdGhlcnMgYXJlIHByZXNlbnQsIGJ1dCBzaWxlbnQuCisKK0xldCdzIGxpc3RlbiBpbiEKKworICAgIDxuanNgPiBPaCwgaGVyZSdzIGEgcmVhbGx5IHN0dXBpZCBxdWVzdGlvbiAtLSB3aGVyZSBkbyBJIGdvIHRvCisJbGVhcm4gdGhlIGRldGFpbHMgb2YgR2l0J3MgcGFja2luZyBoZXVyaXN0aWNzPyAgZ29vZ2xlIGF2YWlscworICAgICAgICBtZSBub3QsIHJlYWRpbmcgdGhlIHNvdXJjZSBkaWRuJ3QgaGVscCBhIGxvdCwgYW5kIHdhZGluZworICAgICAgICB0aHJvdWdoIHRoZSB3aG9sZSBtYWlsaW5nIGxpc3Qgc2VlbXMgbGVzcyBlZmZpY2llbnQgdGhhbiBhbnkKKyAgICAgICAgb2YgdGhhdC4KKworSXQgaXMgYSBib2xkIHN0YXJ0ISAgQSBwbGVhIGZvciBoZWxwIGNvbWJpbmVkIHdpdGggYSBzaW11bHRhbmVvdXMKK3RyaS1wYXJ0IGF0dGFjayBvbiBzb21lIG9mIHRoZSB0cmllZCBhbmQgdHJ1ZSBtYWluc3RheXMgaW4gdGhlIHF1ZXN0Citmb3IgZW5saWdodGVubWVudC4gIEJyYXNoIGFjY3VzYXRpb25zIG9mIGdvb2dsZSBiZWluZyB1c2VsZXNzLiBIdWJyaXMhCitNYWxpZ25pbmcgdGhlIHNvdXJjZS4gIEhlcmVzeSEgIERpc2RhaW4gZm9yIHRoZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMuCitXb2UuCisKKyAgICA8cGFza3k+IHllcywgdGhlIHBhY2tpbmctcmVsYXRlZCBkZWx0YSBzdHVmZiBpcyBzb21ld2hhdAorICAgICAgICBteXN0ZXJpb3VzIGV2ZW4gZm9yIG1lIDspCisKK0FoISAgTW9kZXN0eSBhZnRlciBhbGwuCisKKyAgICA8bGludXM+IG5qcywgSSBkb24ndCB0aGluayB0aGUgZG9jcyBleGlzdC4gVGhhdCdzIHNvbWV0aGluZyB3aGVyZQorCSBJIGRvbid0IHRoaW5rIGFueWJvZHkgZWxzZSB0aGFuIG1lIGV2ZW4gcmVhbGx5IGdvdCBpbnZvbHZlZC4KKwkgTW9zdCBvZiB0aGUgcmVzdCBvZiBHaXQgb3RoZXJzIGhhdmUgYmVlbiBidXN5IHdpdGggKGVzcGVjaWFsbHkKKwkgSnVuaW8pLCBidXQgcGFja2luZyBub2JvZHkgdG91Y2hlZCBhZnRlciBJIGRpZCBpdC4KKworSXQncyBjcnlwdGljLCB5ZXQgdmFndWUuICBMaW51cyBpbiBzdHlsZSBmb3Igc3VyZS4gIFdpc2UgbWVuCitpbnRlcnByZXQgdGhpcyBhcyBhbiBhcG9sb2d5LiAgQSBmZXcgYXJndWUgaXQgaXMgbWVyZWx5IGEKK3N0YXRlbWVudCBvZiBmYWN0LgorCisgICAgPG5qc2A+IEkgZ3Vlc3MgdGhlIG5leHQgc3RlcCBpcyAicmVhZCB0aGUgc291cmNlIGFnYWluIiwgYnV0IEkKKyAgICAgICAgaGF2ZSB0byBidWlsZCB1cCBhIGNlcnRhaW4gbGV2ZWwgb2YgZ3VtcHRpb24gZmlyc3QgOi0pCisKK0luZGVlZCEgIE9uIGJvdGggcG9pbnRzLgorCisgICAgPGxpbnVzPiBUaGUgcGFja2luZyBoZXVyaXN0aWMgaXMgYWN0dWFsbHkgcmVhbGx5IHJlYWxseSBzaW1wbGUuCisKK0JhaXQuLi4KKworICAgIDxsaW51cz4gQnV0IHN0cmFuZ2UuCisKK0FuZCBzd2l0Y2guICBUaGF0IG91Z2h0IHRvIGRvIGl0IQorCisgICAgPGxpbnVzPiBSZW1lbWJlcjogR2l0IHJlYWxseSBkb2Vzbid0IGZvbGxvdyBmaWxlcy4gU28gd2hhdCBpdCBkb2VzIGlzCisgICAgICAgIC0gZ2VuZXJhdGUgYSBsaXN0IG9mIGFsbCBvYmplY3RzCisgICAgICAgIC0gc29ydCB0aGUgbGlzdCBhY2NvcmRpbmcgdG8gbWFnaWMgaGV1cmlzdGljcworICAgICAgICAtIHdhbGsgdGhlIGxpc3QsIHVzaW5nIGEgc2xpZGluZyB3aW5kb3csIHNlZWluZyBpZiBhbiBvYmplY3QKKyAgICAgICAgICBjYW4gYmUgZGlmZmVkIGFnYWluc3QgYW5vdGhlciBvYmplY3QgaW4gdGhlIHdpbmRvdworICAgICAgICAtIHdyaXRlIG91dCB0aGUgbGlzdCBpbiByZWNlbmN5IG9yZGVyCisKK1RoZSB0cmFkaXRpb25hbCB1bmRlcnN0YXRlbWVudDoKKworICAgIDxuanNgPiBJIHN1c3BlY3QgdGhhdCB3aGF0IEknbSBtaXNzaW5nIGlzIHRoZSBwcmVjaXNlIGRlZmluaXRpb24gb2YKKyAgICAgICAgdGhlIHdvcmQgIm1hZ2ljIgorCitUaGUgdHJhZGl0aW9uYWwgaW5zaWdodDoKKworICAgIDxwYXNreT4geWVzCisKK0FuZCBCYWJlbC1saWtlIGNvbmZ1c2lvbiBmbG93ZWQuCisKKyAgICA8bmpzYD4gb2gsIGhtbSwgYW5kIEknbSBub3Qgc3VyZSB3aGF0IHRoaXMgc2xpZGluZyB3aW5kb3cgbWVhbnMgZWl0aGVyCisKKyAgICA8cGFza3k+IGlpcmMsIGl0IGFwcGVhcmVkIHRvIG1lIHRvIGJlIGp1c3QgdGhlIHNoYTEgb2YgdGhlIG9iamVjdAorICAgICAgICB3aGVuIHJlYWRpbmcgdGhlIGNvZGUgY2FzdWFsbHkgLi4uCisKKyAgICAgICAgLi4uIHdoaWNoIHNpbXBseSBkb2Vzbid0IHNvdW5kIGFzIGEgdmVyeSBnb29kIGhldXJpc3RpY3MsIHRob3VnaCA7KQorCisgICAgPG5qc2A+IC4uLi4uYW5kIHJlY2VuY3kgb3JkZXIuICBva2F5LCBJIHRoaW5rIGl0J3MgY2xlYXIgSSBkaWRuJ3QKKyAgICAgICBldmVuIHJlYWxpemUgaG93IG11Y2ggSSB3YXNuJ3QgcmVhbGl6aW5nIDotKQorCitBaCwgZ3Jhc3Nob3BwZXIhICBBbmQgdGh1cyB0aGUgZW5saWdodGVubWVudCBiZWdpbnMgYW5ldy4KKworICAgIDxsaW51cz4gVGhlICJtYWdpYyIgaXMgYWN0dWFsbHkgaW4gdGhlb3J5IHRvdGFsbHkgYXJiaXRyYXJ5LgorICAgICAgICBBTlkgb3JkZXIgd2lsbCBnaXZlIHlvdSBhIHdvcmtpbmcgcGFjaywgYnV0IG5vLCBpdCdzIG5vdAorCW9yZGVyZWQgYnkgU0hBLTEuCisKKyAgICAgICAgQmVmb3JlIHRhbGtpbmcgYWJvdXQgdGhlIG9yZGVyaW5nIGZvciB0aGUgc2xpZGluZyBkZWx0YQorICAgICAgICB3aW5kb3csIGxldCdzIHRhbGsgYWJvdXQgdGhlIHJlY2VuY3kgb3JkZXIuIFRoYXQncyBtb3JlCisgICAgICAgIGltcG9ydGFudCBpbiBvbmUgd2F5LgorCisgICAgPG5qc2A+IFJpZ2h0LCBidXQgaWYgYWxsIHlvdSB3YW50IGlzIGEgd29ya2luZyB3YXkgdG8gcGFjayB0aGluZ3MKKyAgICAgICAgdG9nZXRoZXIsIHlvdSBjb3VsZCBqdXN0IHVzZSBjYXQgYW5kIHNhdmUgeW91cnNlbGYgc29tZQorICAgICAgICB0cm91YmxlLi4uCisKK1dhYWFpdCBmb3IgaXQuLi4uCisKKyAgICA8bGludXM+IFRoZSByZWNlbmN5IG9yZGVyaW5nICh3aGljaCBpcyBiYXNpY2FsbHk6IHB1dCBvYmplY3RzCisgICAgICAgIF9waHlzaWNhbGx5XyBpbnRvIHRoZSBwYWNrIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgYXJlCisgICAgICAgICJyZWFjaGFibGUiIGZyb20gdGhlIGhlYWQpIGlzIGltcG9ydGFudC4KKworICAgIDxuanNgPiBva2F5CisKKyAgICA8bGludXM+IEl0J3MgaW1wb3J0YW50IGJlY2F1c2UgdGhhdCdzIHRoZSB0aGluZyB0aGF0IGdpdmVzIHBhY2tzCisgICAgICAgIGdvb2QgbG9jYWxpdHkuIEl0IGtlZXBzIHRoZSBvYmplY3RzIGNsb3NlIHRvIHRoZSBoZWFkICh3aGV0aGVyCisgICAgICAgIHRoZXkgYXJlIG9sZCBvciBuZXcsIGJ1dCB0aGV5IGFyZSBfcmVhY2hhYmxlXyBmcm9tIHRoZSBoZWFkKQorICAgICAgICBhdCB0aGUgaGVhZCBvZiB0aGUgcGFjay4gU28gcGFja3MgYWN0dWFsbHkgaGF2ZSBhYnNvbHV0ZWx5CisgICAgICAgIF93b25kZXJmdWxfIElPIHBhdHRlcm5zLgorCitSZWFkIHRoYXQgYWdhaW4sIGJlY2F1c2UgaXQgaXMgaW1wb3J0YW50LgorCisgICAgPGxpbnVzPiBCdXQgcmVjZW5jeSBvcmRlcmluZyBpcyB0b3RhbGx5IHVzZWxlc3MgZm9yIGRlY2lkaW5nIGhvdworICAgICAgICB0byBhY3R1YWxseSBnZW5lcmF0ZSB0aGUgZGVsdGFzLCBzbyB0aGUgZGVsdGEgb3JkZXJpbmcgaXMKKyAgICAgICAgc29tZXRoaW5nIGVsc2UuCisKKyAgICAgICAgVGhlIGRlbHRhIG9yZGVyaW5nIGlzICh3YWl0IGZvciBpdCk6CisgICAgICAgIC0gZmlyc3Qgc29ydCBieSB0aGUgImJhc2VuYW1lIiBvZiB0aGUgb2JqZWN0LCBhcyBkZWZpbmVkIGJ5CisgICAgICAgICAgdGhlIG5hbWUgdGhlIG9iamVjdCB3YXMgX2ZpcnN0XyByZWFjaGVkIHRocm91Z2ggd2hlbgorICAgICAgICAgIGdlbmVyYXRpbmcgdGhlIG9iamVjdCBsaXN0CisgICAgICAgIC0gd2l0aGluIHRoZSBzYW1lIGJhc2VuYW1lLCBzb3J0IGJ5IHNpemUgb2YgdGhlIG9iamVjdAorICAgICAgICAtIGJ1dCBhbHdheXMgc29ydCBkaWZmZXJlbnQgdHlwZXMgc2VwYXJhdGVseSAoY29tbWl0cyBmaXJzdCkuCisKKyAgICAgICAgVGhhdCdzIG5vdCBleGFjdGx5IGl0LCBidXQgaXQncyB2ZXJ5IGNsb3NlLgorCisgICAgPG5qc2A+IFRoZSAiX2ZpcnN0XyByZWFjaGVkIiB0aGluZyBpcyBub3QgdG9vIGltcG9ydGFudCwganVzdCB5b3UKKyAgICAgICAgbmVlZCBzb21lIHdheSB0byBicmVhayB0aWVzIHNpbmNlIHRoZSBzYW1lIG9iamVjdHMgbWF5IGJlCisgICAgICAgIHJlYWNoYWJsZSBtYW55IHdheXMsIHllcz8KKworQW5kIGFzIGlmIHRvIGNsYXJpZnk6CisKKyAgICA8bGludXM+IFRoZSBwb2ludCBpcyB0aGF0IGl0J3MgYWxsIHJlYWxseSBqdXN0IGFueSByYW5kb20KKyAgICAgICAgaGV1cmlzdGljLCBhbmQgdGhlIG9yZGVyaW5nIGlzIHRvdGFsbHkgdW5pbXBvcnRhbnQgZm9yCisgICAgICAgIGNvcnJlY3RuZXNzLCBidXQgaXQgaGVscHMgYSBsb3QgaWYgdGhlIGhldXJpc3RpYyBnaXZlcworICAgICAgICAiY2x1bXBpbmciIGZvciB0aGluZ3MgdGhhdCBhcmUgbGlrZWx5IHRvIGRlbHRhIHdlbGwgYWdhaW5zdAorICAgICAgICBlYWNoIG90aGVyLgorCitJdCBpcyBhbiBpbXBvcnRhbnQgcG9pbnQsIHNvIHNlY3JldGx5LCBJIGRpZCBteSBvd24gcmVzZWFyY2ggYW5kIGhhdmUKK2luY2x1ZGVkIG15IHJlc3VsdHMgYmVsb3cuICBUbyBiZSBmYWlyLCBpdCBoYXMgY2hhbmdlZCBzb21lIG92ZXIgdGltZS4KK0FuZCB0aHJvdWdoIHRoZSBtYWdpYyBvZiBSZXZpc2lvbmlzdGljIEhpc3RvcnksIEkgZHJhdyB1cG9uIHRoaXMgZW50cnkKK2Zyb20gVGhlIEdpdCBJUkMgTG9ncyBvbiBteSBmYXRoZXIncyBiaXJ0aGRheSwgTWFyY2ggMToKKworICAgIDxnaXRzdGVyPiBUaGUgcXVvdGUgZnJvbSB0aGUgYWJvdmUgbGludXMgc2hvdWxkIGJlIHJld3JpdHRlbiBhCisgICAgICAgIGJpdCAod2FpdCBmb3IgaXQpOgorICAgICAgICAtIGZpcnN0IHNvcnQgYnkgdHlwZS4gIERpZmZlcmVudCBvYmplY3RzIG5ldmVyIGRlbHRhIHdpdGgKKwkgIGVhY2ggb3RoZXIuCisgICAgICAgIC0gdGhlbiBzb3J0IGJ5IGZpbGVuYW1lL2Rpcm5hbWUuICBoYXNoIG9mIHRoZSBiYXNlbmFtZQorICAgICAgICAgIG9jY3VwaWVzIHRoZSB0b3AgQklUU19QRVJfSU5ULURJUl9CSVRTIGJpdHMsIGFuZCBib3R0b20KKyAgICAgICAgICBESVJfQklUUyBhcmUgZm9yIHRoZSBoYXNoIG9mIGxlYWRpbmcgcGF0aCBlbGVtZW50cy4KKyAgICAgICAgLSB0aGVuIGlmIHdlIGFyZSBkb2luZyAidGhpbiIgcGFjaywgdGhlIG9iamVjdHMgd2UgYXJlIF9ub3RfCisgICAgICAgICAgZ29pbmcgdG8gcGFjayBidXQgd2Uga25vdyBhYm91dCBhcmUgc29ydGVkIGVhcmxpZXIgdGhhbgorICAgICAgICAgIG90aGVyIG9iamVjdHMuCisgICAgICAgIC0gYW5kIGZpbmFsbHkgc29ydCBieSBzaXplLCBsYXJnZXIgdG8gc21hbGxlci4KKworSW4gb25lIHN3ZWxsLWZvb3AsIGNsYXJpZmljYXRpb24gYW5kIG9ic2N1cmlmaWNhdGlvbiEgIE5vbmV0aGVsZXNzLAorYXV0aG9yaXRhdGl2ZS4gIENyeXB0aWMsIHlldCBjb25jaXNlLiAgSXQgZXZlbiBzb2xpY2l0cyBub3Rpb25zIG9mCitxdW90ZXMgZnJvbSBUaGUgU291cmNlIENvZGUuICBDbGVhcmx5LCBtb3JlIHN0dWR5IGlzIG5lZWRlZC4KKworICAgIDxnaXRzdGVyPiBUaGF0J3MgdGhlIHNvcnQgb3JkZXIuICBXaGF0IHRoaXMgbWVhbnMgaXM6CisgICAgICAgIC0gd2UgZG8gbm90IGRlbHRhIGRpZmZlcmVudCBvYmplY3QgdHlwZXMuCisJLSB3ZSBwcmVmZXIgdG8gZGVsdGEgdGhlIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBmdWxsIHBhdGgsIGJ1dAorICAgICAgICAgIGFsbG93IGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSBmcm9tIGRpZmZlcmVudCBkaXJlY3Rvcmllcy4KKwktIHdlIGFsd2F5cyBwcmVmZXIgdG8gZGVsdGEgYWdhaW5zdCBvYmplY3RzIHdlIGFyZSBub3QgZ29pbmcKKyAgICAgICAgICB0byBzZW5kLCBpZiB0aGVyZSBhcmUgc29tZS4KKwktIHdlIHByZWZlciB0byBkZWx0YSBhZ2FpbnN0IGxhcmdlciBvYmplY3RzLCBzbyB0aGF0IHdlIGhhdmUKKyAgICAgICAgICBsb3RzIG9mIHJlbW92YWxzLgorCisgICAgICAgIFRoZSBwZW51bHRpbWF0ZSBydWxlIGlzIGZvciAidGhpbiIgcGFja3MuICBJdCBpcyB1c2VkIHdoZW4KKyAgICAgICAgdGhlIG90aGVyIHNpZGUgaXMga25vd24gdG8gaGF2ZSBzdWNoIG9iamVjdHMuCisKK1RoZXJlIGl0IGlzIGFnYWluLiAiVGhpbiIgcGFja3MuICBJJ20gdGhpbmtpbmcgdG8gbXlzZWxmLCAiV2hhdAoraXMgYSAndGhpbicgcGFjaz8iICBTbyBJIGFzazoKKworICAgIDxqZGw+IFdoYXQgaXMgYSAidGhpbiIgcGFjaz8KKworICAgIDxnaXRzdGVyPiBVc2Ugb2YgLS1vYmplY3RzLWVkZ2UgdG8gcmV2LWxpc3QgYXMgdGhlIHVwc3RyZWFtIG9mCisgICAgICAgIHBhY2stb2JqZWN0cy4gIFRoZSBwYWNrIHRyYW5zZmVyIHByb3RvY29sIG5lZ290aWF0ZXMgdGhhdC4KKworV29vIGhvbyEgIENsZWFyZWQgdGhhdCBfcmlnaHRfIHVwIQorCisgICAgPGdpdHN0ZXI+IFRoZXJlIGFyZSB0d28gZGlyZWN0aW9ucyAtIHB1c2ggYW5kIGZldGNoLgorCitUaGVyZSEgIERpZCB5b3Ugc2VlIGl0PyAgSXQgaXMgbm90ICcicHVzaCIgYW5kICJwdWxsIichICBIb3cgb2Z0ZW4gdGhlCitjb25mdXNpb24gaGFzIHN0YXJ0ZWQgaGVyZS4gIFNvIGNhc3VhbGx5IG1lbnRpb25lZCwgdG9vIQorCisgICAgPGdpdHN0ZXI+IEZvciBwdXNoLCBnaXQtc2VuZC1wYWNrIGludm9rZXMgZ2l0LXJlY2VpdmUtcGFjayBvbiB0aGUKKyAgICAgICAgb3RoZXIgZW5kLiAgVGhlIHJlY2VpdmUtcGFjayBzYXlzICJJIGhhdmUgdXAgdG8gdGhlc2UgY29tbWl0cyIuCisgICAgICAgIHNlbmQtcGFjayBsb29rcyBhdCB0aGVtLCBhbmQgY29tcHV0ZXMgd2hhdCBhcmUgbWlzc2luZyBmcm9tCisgICAgICAgIHRoZSBvdGhlciBlbmQuICBTbyAidGhpbiIgY291bGQgYmUgdGhlIGRlZmF1bHQgdGhlcmUuCisKKyAgICAgICAgSW4gdGhlIG90aGVyIGRpcmVjdGlvbiwgZmV0Y2gsIGdpdC1mZXRjaC1wYWNrIGFuZAorICAgICAgICBnaXQtY2xvbmUtcGFjayBpbnZva2VzIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgb3RoZXIgZW5kCisJKHZpYSBzc2ggb3IgYnkgdGFsa2luZyB0byB0aGUgZGFlbW9uKS4KKworCVRoZXJlIGFyZSB0d28gY2FzZXM6IGZldGNoLXBhY2sgd2l0aCAtayBhbmQgY2xvbmUtcGFjayBpcyBvbmUsCisgICAgICAgIGZldGNoLXBhY2sgd2l0aG91dCAtayBpcyB0aGUgb3RoZXIuICBjbG9uZS1wYWNrIGFuZCBmZXRjaC1wYWNrCisgICAgICAgIHdpdGggLWsgd2lsbCBrZWVwIHRoZSBkb3dubG9hZGVkIHBhY2tmaWxlIHdpdGhvdXQgZXhwYW5kZWQsIHNvCisgICAgICAgIHdlIGRvIG5vdCB1c2UgdGhpbiBwYWNrIHRyYW5zZmVyLiAgT3RoZXJ3aXNlLCB0aGUgZ2VuZXJhdGVkCisgICAgICAgIHBhY2sgd2lsbCBoYXZlIGRlbHRhIHdpdGhvdXQgYmFzZSBvYmplY3QgaW4gdGhlIHNhbWUgcGFjay4KKworICAgICAgICBCdXQgZmV0Y2gtcGFjayB3aXRob3V0IC1rIHdpbGwgZXhwbG9kZSB0aGUgcmVjZWl2ZWQgcGFjayBpbnRvCisgICAgICAgIGluZGl2aWR1YWwgb2JqZWN0cywgc28gd2UgYXV0b21hdGljYWxseSBhc2sgdXBsb2FkLXBhY2sgdG8KKyAgICAgICAgZ2l2ZSB1cyBhIHRoaW4gcGFjayBpZiB1cGxvYWQtcGFjayBzdXBwb3J0cyBpdC4KKworT0sgdGhlbi4KKworVWguCisKK0xldCdzIHJldHVybiB0byB0aGUgcHJldmlvdXMgY29udmVyc2F0aW9uIHN0aWxsIGluIHByb2dyZXNzLgorCisgICAgPG5qc2A+IGFuZCAiYmFzZW5hbWUiIG1lYW5zIHNvbWV0aGluZyBsaWtlICJ0aGUgdGFpbCBvZiBlbmQgb2YKKyAgICAgICAgcGF0aCBvZiBmaWxlIG9iamVjdHMgYW5kIGRpciBvYmplY3RzLCBhcyBwZXIgYmFzZW5hbWUoMyksIGFuZAorICAgICAgICB3ZSBqdXN0IGRlY2xhcmUgYWxsIGNvbW1pdCBhbmQgdGFnIG9iamVjdHMgdG8gaGF2ZSB0aGUgc2FtZQorICAgICAgICBiYXNlbmFtZSIgb3Igc29tZXRoaW5nPworCitMdWNraWx5LCB0aGF0IHRvbyBpcyBhIHBvaW50IHRoYXQgZ2l0c3RlciBjbGFyaWZpZWQgZm9yIHVzIQorCitJZiBJIG1pZ2h0IGFkZCwgdGhlIHRyaWNrIGlzIHRvIG1ha2UgZmlsZXMgdGhhdCBfbWlnaHRfIGJlIHNpbWlsYXIgYmUKK2xvY2F0ZWQgY2xvc2UgdG8gZWFjaCBvdGhlciBpbiB0aGUgaGFzaCBidWNrZXRzIGJhc2VkIG9uIHRoZWlyIGZpbGUKK25hbWVzLiAgSXQgdXNlZCB0byBiZSB0aGF0ICJmb28vTWFrZWZpbGUiLCAiYmFyL2Jhei9xdXV4L01ha2VmaWxlIiBhbmQKKyJNYWtlZmlsZSIgYWxsIGxhbmRlZCBpbiB0aGUgc2FtZSBidWNrZXQgZHVlIHRvIHRoZWlyIGNvbW1vbiBiYXNlbmFtZSwKKyJNYWtlZmlsZSIuIEhvd2V2ZXIsIG5vdyB0aGV5IGxhbmQgaW4gImNsb3NlIiBidWNrZXRzLgorCitUaGUgYWxnb3JpdGhtIGFsbG93cyBub3QganVzdCBmb3IgdGhlIF9zYW1lXyBidWNrZXQsIGJ1dCBmb3IgX2Nsb3NlXworYnVja2V0cyB0byBiZSBjb25zaWRlcmVkIGRlbHRhIGNhbmRpZGF0ZXMuICBUaGUgcmF0aW9uYWxlIGlzCitlc3NlbnRpYWxseSB0aGF0IGZpbGVzLCBsaWtlIE1ha2VmaWxlcywgb2Z0ZW4gaGF2ZSB2ZXJ5IHNpbWlsYXIKK2NvbnRlbnQgbm8gbWF0dGVyIHdoYXQgZGlyZWN0b3J5IHRoZXkgbGl2ZSBpbi4KKworICAgIDxsaW51cz4gSSBwbGF5ZWQgYXJvdW5kIHdpdGggZGlmZmVyZW50IGRlbHRhIGFsZ29yaXRobXMsIGFuZCB3aXRoCisgICAgICAgIG1ha2luZyB0aGUgImRlbHRhIHdpbmRvdyIgYmlnZ2VyLCBidXQgaGF2aW5nIHRvbyBiaWcgb2YgYQorICAgICAgICBzbGlkaW5nIHdpbmRvdyBtYWtlcyBpdCB2ZXJ5IGV4cGVuc2l2ZSB0byBnZW5lcmF0ZSB0aGUgcGFjazoKKyAgICAgICAgeW91IG5lZWQgdG8gY29tcGFyZSBldmVyeSBvYmplY3Qgd2l0aCBhIF90b25fIG9mIG90aGVyIG9iamVjdHMuCisKKyAgICAgICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG90aGVyIHRyaXZpYWwgaGV1cmlzdGljcyB0b28sIHdoaWNoCisgICAgICAgIGJhc2ljYWxseSBib2lsIGRvd24gdG8gImRvbid0IGJvdGhlciBldmVuIHRyeWluZyB0byBkZWx0YSB0aGlzCisgICAgICAgIHBhaXIiIGlmIHdlIGNhbiB0ZWxsIGJlZm9yZS1oYW5kIHRoYXQgdGhlIGRlbHRhIGlzbid0IHdvcnRoIGl0CisgICAgICAgIChkdWUgdG8gc2l6ZSBkaWZmZXJlbmNlcywgd2hlcmUgd2UgY2FuIHRha2UgYSBwcmV2aW91cyBkZWx0YQorICAgICAgICByZXN1bHQgaW50byBhY2NvdW50IHRvIGRlY2lkZSB0aGF0ICJvaywgbm8gcG9pbnQgaW4gdHJ5aW5nCisgICAgICAgIHRoYXQgb25lLCBpdCB3aWxsIGJlIHdvcnNlIikuCisKKyAgICAgICAgRW5kIHJlc3VsdDogcGFja2luZyBpcyBhY3R1YWxseSB2ZXJ5IHNpemUgZWZmaWNpZW50LiBJdCdzCisgICAgICAgIHNvbWV3aGF0IENQVS13YXN0ZWZ1bCwgYnV0IG9uIHRoZSBvdGhlciBoYW5kLCBzaW5jZSB5b3UncmUKKyAgICAgICAgcmVhbGx5IG9ubHkgc3VwcG9zZWQgdG8gZG8gaXQgbWF5YmUgb25jZSBhIG1vbnRoIChhbmQgeW91IGNhbgorICAgICAgICBkbyBpdCBkdXJpbmcgdGhlIG5pZ2h0KSwgbm9ib2R5IHJlYWxseSBzZWVtcyB0byBjYXJlLgorCitOaWNlIEVuZ2luZWVyaW5nIFRvdWNoLCB0aGVyZS4gIEZpbmQgd2hlbiBpdCBkb2Vzbid0IG1hdHRlciwgYW5kCitwcm9jbGFpbSBpdCBhIG5vbi1pc3N1ZS4gIEdvb2Qgc3R5bGUgdG9vIQorCisgICAgPG5qc2A+IFNvLCBqdXN0IHRvIHJlcGVhdCB0byBzZWUgaWYgSSdtIGZvbGxvd2luZywgd2Ugc3RhcnQgYnkKKyAgICAgICAgZ2V0dGluZyBhIGxpc3Qgb2YgdGhlIG9iamVjdHMgd2Ugd2FudCB0byBwYWNrLCB3ZSBzb3J0IGl0IGJ5CisgICAgICAgIHRoaXMgaGV1cmlzdGljIChiYXNpY2FsbHkgbGV4aWNvZ3JhcGhpY2FsbHkgb24gdGhlIHR1cGxlCisgICAgICAgICh0eXBlLCBiYXNlbmFtZSwgc2l6ZSkpLgorCisgICAgICAgIFRoZW4gd2Ugd2FsayB0aHJvdWdoIHRoaXMgbGlzdCwgYW5kIGNhbGN1bGF0ZSBhIGRlbHRhIG9mCisgICAgICAgIGVhY2ggb2JqZWN0IGFnYWluc3QgdGhlIGxhc3QgbiAodHVuYWJsZSBwYXJhbWV0ZXIpIG9iamVjdHMsCisgICAgICAgIGFuZCBwaWNrIHRoZSBzbWFsbGVzdCBvZiB0aGVzZSBkZWx0YXMuCisKK1Zhc3RseSBzaW1wbGlmaWVkLCBidXQgdGhlIGVzc2VuY2UgaXMgdGhlcmUhCisKKyAgICA8bGludXM+IENvcnJlY3QuCisKKyAgICA8bmpzYD4gQW5kIHRoZW4gb25jZSB3ZSBoYXZlIHBpY2tlZCBhIGRlbHRhIG9yIGZ1bGx0ZXh0IHRvCisgICAgICAgIHJlcHJlc2VudCBlYWNoIG9iamVjdCwgd2UgcmUtc29ydCBieSByZWNlbmN5LCBhbmQgd3JpdGUgdGhlbQorICAgICAgICBvdXQgaW4gdGhhdCBvcmRlci4KKworICAgIDxsaW51cz4gWXVwLiBTb21lIG90aGVyIHNtYWxsIGRldGFpbHM6CisKK0FuZCBvZiBjb3Vyc2UgdGhlcmUgaXMgdGhlICJPdGhlciBTaG9lIiBGYWN0b3IgdG9vLgorCisgICAgPGxpbnVzPiAtIFdlIGxpbWl0IHRoZSBkZWx0YSBkZXB0aCB0byBhbm90aGVyIG1hZ2ljIHZhbHVlIChyaWdodAorICAgICAgICBub3cgYm90aCB0aGUgd2luZG93IGFuZCBkZWx0YSBkZXB0aCBtYWdpYyB2YWx1ZXMgYXJlIGp1c3QgIjEwIikKKworICAgIDxuanNgPiBIcm0sIG15IGludHVpdGlvbiBpcyB0aGF0IHlvdSdkIGVuZCB1cCB3aXRoIHJlYWxseSBfYmFkXyBJTworICAgICAgICBwYXR0ZXJucywgYmVjYXVzZSB0aGUgdGhpbmdzIHlvdSB3YW50IGFyZSBuZWFyIGJ5LCBidXQgdG8KKyAgICAgICAgYWN0dWFsbHkgcmVjb25zdHJ1Y3QgdGhlbSB5b3UgbWF5IGhhdmUgdG8ganVtcCBhbGwgb3ZlciBpbgorICAgICAgICByYW5kb20gd2F5cy4KKworICAgIDxsaW51cz4gLSBXaGVuIHdlIHdyaXRlIG91dCBhIGRlbHRhLCBhbmQgd2UgaGF2ZW4ndCB5ZXQgd3JpdHRlbgorICAgICAgICBvdXQgdGhlIG9iamVjdCBpdCBpcyBhIGRlbHRhIGFnYWluc3QsIHdlIHdyaXRlIG91dCB0aGUgYmFzZQorICAgICAgICBvYmplY3QgZmlyc3QuICBBbmQgbm8sIHdoZW4gd2UgcmVjb25zdHJ1Y3QgdGhlbSwgd2UgYWN0dWFsbHkKKyAgICAgICAgZ2V0IG5pY2UgSU8gcGF0dGVybnMsIGJlY2F1c2U6CisgICAgICAgIC0gbGFyZ2VyIG9iamVjdHMgdGVuZCB0byBiZSAibW9yZSByZWNlbnQiIChMaW51cycgbGF3OiBmaWxlcyBncm93KQorICAgICAgICAtIHdlIGFjdGl2ZWx5IHRyeSB0byBnZW5lcmF0ZSBkZWx0YXMgZnJvbSBhIGxhcmdlciBvYmplY3QgdG8gYQorICAgICAgICAgIHNtYWxsZXIgb25lCisgICAgICAgIC0gdGhpcyBtZWFucyB0aGF0IHRoZSB0b3Atb2YtdHJlZSB2ZXJ5IHNlbGRvbSBoYXMgZGVsdGFzCisgICAgICAgICAgKGkuZS4gZGVsdGFzIGluIF9wcmFjdGljZV8gYXJlICJiYWNrd2FyZHMgZGVsdGFzIikKKworQWdhaW4sIHdlIHNob3VsZCByZXJlYWQgdGhhdCB3aG9sZSBwYXJhZ3JhcGguICBOb3QganVzdCBiZWNhdXNlCitMaW51cyBoYXMgc2xpcHBlZCBMaW51cydzIExhdyBpbiB0aGVyZSBvbiB1cywgYnV0IGJlY2F1c2UgaXQgaXMKK2ltcG9ydGFudC4gIExldCdzIG1ha2Ugc3VyZSB3ZSBjbGFyaWZ5IHNvbWUgb2YgdGhlIHBvaW50cyBoZXJlOgorCisgICAgPG5qc2A+IFNvIHRoZSBwb2ludCBpcyBqdXN0IHRoYXQgaW4gcHJhY3RpY2UsIGRlbHRhIG9yZGVyIGFuZAorICAgICAgICByZWNlbmN5IG9yZGVyIG1hdGNoIGVhY2ggb3RoZXIgcXVpdGUgd2VsbC4KKworICAgIDxsaW51cz4gWWVzLiBUaGVyZSdzIGFub3RoZXIgbmljZSBzaWRlIHRvIHRoaXMgKGFuZCB5ZXMsIGl0IHdhcworCWRlc2lnbmVkIHRoYXQgd2F5IDspOgorICAgICAgICAtIHRoZSByZWFzb24gd2UgZ2VuZXJhdGUgZGVsdGFzIGFnYWluc3QgdGhlIGxhcmdlciBvYmplY3QgaXMKKwkgIGFjdHVhbGx5IGEgYmlnIHNwYWNlIHNhdmVyIHRvbyEKKworICAgIDxuanNgPiBIbW0sIGJ1dCB5b3VyIGxhc3QgY29tbWVudCAoaWYgIndlIGhhdmVuJ3QgeWV0IHdyaXR0ZW4gb3V0CisgICAgICAgIHRoZSBvYmplY3QgaXQgaXMgYSBkZWx0YSBhZ2FpbnN0LCB3ZSB3cml0ZSBvdXQgdGhlIGJhc2Ugb2JqZWN0CisgICAgICAgIGZpcnN0IiksIHNlZW1zIGxpa2UgaXQgd291bGQgbWFrZSB0aGVzZSBmYWN0cyBtb3N0bHkKKyAgICAgICAgaXJyZWxldmFudCBiZWNhdXNlIGV2ZW4gaWYgaW4gcHJhY3RpY2UgeW91IHdvdWxkIG5vdCBoYXZlIHRvCisgICAgICAgIHdhbmRlciBhcm91bmQgbXVjaCwgaW4gZmFjdCB5b3UganVzdCBicnV0ZS1mb3JjZSBzYXkgdGhhdCBpbgorICAgICAgICB0aGUgY2FzZXMgd2hlcmUgeW91IG1pZ2h0IGhhdmUgdG8gd2FuZGVyLCBkb24ndCBkbyB0aGF0IDotKQorCisgICAgPGxpbnVzPiBZZXMgYW5kIG5vLiBOb3RpY2UgdGhlIHJ1bGU6IHdlIG9ubHkgd3JpdGUgb3V0IHRoZSBiYXNlCisgICAgICAgIG9iamVjdCBmaXJzdCBpZiB0aGUgZGVsdGEgYWdhaW5zdCBpdCB3YXMgbW9yZSByZWNlbnQuICBUaGF0CisgICAgICAgIG1lYW5zIHRoYXQgeW91IGNhbiBhY3R1YWxseSBoYXZlIGRlbHRhcyB0aGF0IHJlZmVyIHRvIGEgYmFzZQorICAgICAgICBvYmplY3QgdGhhdCBpcyBfbm90XyBjbG9zZSB0byB0aGUgZGVsdGEgb2JqZWN0LCBidXQgdGhhdCBvbmx5CisgICAgICAgIGhhcHBlbnMgd2hlbiB0aGUgZGVsdGEgaXMgbmVlZGVkIHRvIGdlbmVyYXRlIGFuIF9vbGRfIG9iamVjdC4KKworICAgIDxsaW51cz4gU2VlPworCitZZWFoLCBuby4gIEkgbWlzc2VkIHRoYXQgb24gdGhlIGZpcnN0IHR3byBvciB0aHJlZSByZWFkaW5ncyBteXNlbGYuCisKKyAgICA8bGludXM+IFRoaXMga2VlcHMgdGhlIGZyb250IG9mIHRoZSBwYWNrIGRlbnNlLiBUaGUgZnJvbnQgb2YgdGhlCisgICAgICAgIHBhY2sgbmV2ZXIgY29udGFpbnMgZGF0YSB0aGF0IGlzbid0IHJlbGV2YW50IHRvIGEgInJlY2VudCIKKyAgICAgICAgb2JqZWN0LiAgVGhlIHNpemUgb3B0aW1pemF0aW9uIGNvbWVzIGZyb20gb3VyIHVzZSBvZiB4ZGVsdGEKKyAgICAgICAgKGJ1dCBpcyB0cnVlIGZvciBtYW55IG90aGVyIGRlbHRhIGFsZ29yaXRobXMpOiByZW1vdmluZyBkYXRhCisgICAgICAgIGlzIGNoZWFwZXIgKGluIHNpemUpIHRoYW4gYWRkaW5nIGRhdGEuCisKKyAgICAgICAgV2hlbiB5b3UgcmVtb3ZlIGRhdGEsIHlvdSBvbmx5IG5lZWQgdG8gc2F5ICJjb3B5IGJ5dGVzIG4tLW0iLgorCUluIGNvbnRyYXN0LCBpbiBhIGRlbHRhIHRoYXQgX2FkZHNfIGRhdGEsIHlvdSBoYXZlIHRvIHNheSAiYWRkCisgICAgICAgIHRoZXNlIGJ5dGVzOiAnYWN0dWFsIGRhdGEgZ29lcyBoZXJlJyIKKworICAgICoqKiBuanNgIGhhcyBxdWl0OiBSZWFkIGVycm9yOiAxMDQgKENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcikKKworICAgIDxsaW51cz4gVWhodWguIEkgaG9wZSBJIGRpZG4ndCBibG93IG5qc2AgbWluZC4KKworICAgICoqKiBuanNgIGhhcyBqb2luZWQgY2hhbm5lbCAjZ2l0CisKKyAgICA8cGFza3k+IDopCisKK1RoZSBzaWxlbnQgb2JzZXJ2ZXJzIGFyZSBhbXVzZWQuICBPZiBjb3Vyc2UuCisKK0FuZCBhcyBpZiBuanNgIHdhcyBleHBlY3RlZCB0byBiZSBvbW5pc2NpZW50OgorCisgICAgPGxpbnVzPiBuanMgLSBkaWQgeW91IG1pc3MgYW55dGhpbmc/CisKK09LLCBJJ2xsIHNwZWxsIGl0IG91dC4gIFRoYXQncyBHZWVrIEh1bW9yLiAgSWYgbmpzYCB3YXMgbm90IGFjdHVhbGx5Citjb25uZWN0ZWQgZm9yIGEgbGl0dGxlIGJpdCB0aGVyZSwgaG93IHdvdWxkIGhlIGtub3cgaWYgbWlzc2VkIGFueXRoaW5nCit3aGlsZSBoZSB3YXMgZGlzY29ubmVjdGVkPyAgSGUncyBhIGJlbmV2b2xlbnQgZGljdGF0b3Igd2l0aCBhIHNlbnNlIG9mCitodW1vciEgIFdlbGwgbm90ZWQhCisKKyAgICA8bmpzYD4gU3R1cGlkIHJvdXRlci4gIE9yIGdyZW1saW5zLCBvciB3aGF0ZXZlci4KKworSXQncyBhIGNoZWFwIHNob3QgYXQgQ2lzY28uICBUYWtlICdlbSB3aGVuIHlvdSBjYW4uCisKKyAgICA8bmpzYD4gWWVzIGFuZCBuby4gTm90aWNlIHRoZSBydWxlOiB3ZSBvbmx5IHdyaXRlIG91dCB0aGUgYmFzZQorICAgICAgICBvYmplY3QgZmlyc3QgaWYgdGhlIGRlbHRhIGFnYWluc3QgaXQgd2FzIG1vcmUgcmVjZW50LgorCisgICAgICAgIEknbSBnZXR0aW5nIGxvc3QgaW4gYWxsIHRoZXNlIG9yZGVycywgbGV0IG1lIHJlLXJlYWQgOi0pCisJU28gdGhlIHdyaXRlLW91dCBvcmRlciBpcyBmcm9tIG1vc3QgcmVjZW50IHRvIGxlYXN0IHJlY2VudD8KKyAgICAgICAgKENvbmNlaXZhYmx5IGl0IGNvdWxkIGJlIHRoZSBvcHBvc2l0ZSB3YXkgdG9vLCBJJ20gbm90IHN1cmUgaWYKKyAgICAgICAgd2UndmUgc2FpZCkgdGhvdWdoIG15IGNvbm5lY3Rpb24gYmFjayBhdCBob21lIGlzIGxvZ2dpbmcsIHNvIEkKKyAgICAgICAgY2FuIGp1c3QgcmVhZCB3aGF0IHlvdSBzYWlkIHRoZXJlIDotKQorCitBbmQgZm9yIHRob3NlIG9mIHlvdSBwYXlpbmcgYXR0ZW50aW9uLCB0aGUgT21uaXNjaWVudCBUcmljayBoYXMganVzdAorYmVlbiBkZXRhaWxlZCEKKworICAgIDxsaW51cz4gWWVzLCB3ZSBhbHdheXMgd3JpdGUgb3V0IG1vc3QgcmVjZW50IGZpcnN0CisKKyAgICA8bmpzYD4gQW5kLCB5ZWFoLCBJIGdvdCB0aGUgcGFydCBhYm91dCBkZWVwZXItaW4taGlzdG9yeSBzdHVmZgorICAgICAgICBoYXZpbmcgd29yc2UgSU8gY2hhcmFjdGVyaXN0aWNzLCBvbmUgc29ydCBvZiBkb2Vzbid0IGNhcmUuCisKKyAgICA8bGludXM+IFdpdGggdGhlIGNhdmVhdCB0aGF0IGlmIHRoZSAibW9zdCByZWNlbnQiIG5lZWRzIGFuIG9sZGVyCisgICAgICAgIG9iamVjdCB0byBkZWx0YSBhZ2FpbnN0IChoZXksIHNocmlua2luZyBzb21ldGltZXMgZG9lcworICAgICAgICBoYXBwZW4pLCB3ZSB3cml0ZSBvdXQgdGhlIG9sZCBvYmplY3Qgd2l0aCB0aGUgZGVsdGEuCisKKyAgICA8bmpzYD4gKGlmIG9ubHkgaXQgaGFwcGVuZWQgbW9yZS4uLikKKworICAgIDxsaW51cz4gQW55d2F5LCB0aGUgcGFjay1maWxlIGNvdWxkIGVhc2lseSBiZSBkZW5zZXIgc3RpbGwsIGJ1dAorCWJlY2F1c2UgaXQncyB1c2VkIGJvdGggZm9yIHN0cmVhbWluZyAodGhlIEdpdCBwcm90b2NvbCkgYW5kCisgICAgICAgIGZvciBvbi1kaXNrLCBpdCBoYXMgYSBmZXcgcGVzc2ltaXphdGlvbnMuCisKK0FjdHVhbGx5LCBpdCBpcyBhIG1hZGUtdXAgd29yZC4gQnV0IGl0IGlzIGEgbWFkZS11cCB3b3JkIGJlaW5nCit1c2VkIGFzIHNldHVwIGZvciBhIGxhdGVyIG9wdGltaXphdGlvbiwgd2hpY2ggaXMgYSByZWFsIHdvcmQ6CisKKyAgICA8bGludXM+IEluIHBhcnRpY3VsYXIsIHdoaWxlIHRoZSBwYWNrLWZpbGUgaXMgdGhlbiBjb21wcmVzc2VkLAorICAgICAgICBpdCdzIGNvbXByZXNzZWQganVzdCBvbmUgb2JqZWN0IGF0IGEgdGltZSwgc28gdGhlIGFjdHVhbAorICAgICAgICBjb21wcmVzc2lvbiBmYWN0b3IgaXMgbGVzcyB0aGFuIGl0IGNvdWxkIGJlIGluIHRoZW9yeS4gQnV0IGl0CisgICAgICAgIG1lYW5zIHRoYXQgaXQncyBhbGwgbmljZSByYW5kb20tYWNjZXNzIHdpdGggYSBzaW1wbGUgaW5kZXggdG8KKyAgICAgICAgZG8gIm9iamVjdCBuYW1lLT5sb2NhdGlvbiBpbiBwYWNrZmlsZSIgdHJhbnNsYXRpb24uCisKKyAgICA8bmpzYD4gSSdtIGFzc3VtaW5nIHRoZSByZWFsIHdpbiBmb3IgZGVsdGEtaW5nIGxhcmdlLT5zbWFsbCBpcworICAgICAgICBtb3JlIGhvbW9nZW5lb3VzIHN0YXRpc3RpY3MgZm9yIGd6aXAgdG8gcnVuIG92ZXI/CisKKyAgICAgICAgKFlvdSBoYXZlIHRvIHB1dCB0aGUgYnl0ZXMgaW4gb25lIHBsYWNlIG9yIGFub3RoZXIsIGJ1dAorICAgICAgICBwdXR0aW5nIHRoZW0gaW4gYSBsYXJnZXIgYmxvYiB3aW5zIG9uIGNvbXByZXNzaW9uKQorCisgICAgICAgIEFjdHVhbGx5LCB3aGF0IGlzIHRoZSBjb21wcmVzc2lvbiBzdHJhdGVneSAtLSBlYWNoIGRlbHRhCisgICAgICAgIGluZGl2aWR1YWxseSBnemlwcGVkLCB0aGUgd2hvbGUgZmlsZSBnemlwcGVkLCBzb21ld2hlcmUgaW4KKyAgICAgICAgYmV0d2Vlbiwgbm8gY29tcHJlc3Npb24gYXQgYWxsLCAuLi4uPworCisgICAgICAgIFJpZ2h0LgorCitSZWFsaXR5IElSQyBzZXRzIGluLiAgRm9yIGV4YW1wbGU6CisKKyAgICA8cGFza3k+IEknbGwgcmVhZCB0aGUgcmVzdCBpbiB0aGUgbW9ybmluZywgSSByZWFsbHkgaGF2ZSB0byBnbworICAgICAgICBzbGVlcCBvciB0aGVyZSdzIG5vIGhvcGUgd2hhdHNvZXZlciBmb3IgbWUgYXQgdGhlIHRvZGF5J3MKKyAgICAgICAgZXhhbS4uLiBnJ25pdGUgYWxsLgorCitIZWguCisKKyAgICA8bGludXM+IHBhc2t5OiBnJ25pdGUKKworICAgIDxuanNgPiBwYXNreTogJ2x1Y2sKKworICAgIDxsaW51cz4gUmlnaHQ6IGxhcmdlLT5zbWFsbCBtYXR0ZXJzIGV4YWN0bHkgYmVjYXVzZSBvZiBjb21wcmVzc2lvbgorICAgICAgICBiZWhhdmlvdXIuIElmIGl0IHdhcyBub24tY29tcHJlc3NlZCwgaXQgcHJvYmFibHkgd291bGRuJ3QgbWFrZQorICAgICAgICBhbnkgZGlmZmVyZW5jZS4KKworICAgIDxuanNgPiB5ZWFoCisKKyAgICA8bGludXM+IEFueXdheTogSSdtIG5vdCBldmVuIHRyeWluZyB0byBjbGFpbSB0aGF0IHRoZSBwYWNrLWZpbGVzCisgICAgICAgIGFyZSBwZXJmZWN0LCBidXQgdGhleSBkbyB0ZW5kIHRvIGhhdmUgYSBuaWNlIGJhbGFuY2Ugb2YKKyAgICAgICAgZGVuc2l0eSB2cyBlYXNlLW9mIHVzZS4KKworR2FzcCEgIE9LLCBzYXZlZC4gIFRoYXQncyBhIGZhaXIgRW5naW5lZXJpbmcgdHJhZGUgb2ZmLiAgQ2xvc2UgY2FsbCEKK0luIGZhY3QsIExpbnVzIHJlZmxlY3RzIG9uIHNvbWUgQmFzaWMgRW5naW5lZXJpbmcgRnVuZGFtZW50YWxzLAorZGVzaWduIG9wdGlvbnMsIGV0Yy4KKworICAgIDxsaW51cz4gTW9yZSBpbXBvcnRhbnRseSwgdGhleSBhbGxvdyBHaXQgdG8gc3RpbGwgX2NvbmNlcHR1YWxseV8KKyAgICAgICAgbmV2ZXIgZGVhbCB3aXRoIGRlbHRhcyBhdCBhbGwsIGFuZCBiZSBhICJ3aG9sZSBvYmplY3QiIHN0b3JlLgorCisgICAgICAgIFdoaWNoIGhhcyBzb21lIHByb2JsZW1zICh3ZSBkaXNjdXNzZWQgYmFkIGh1Z2UtZmlsZQorCWJlaGF2aW91ciBvbiB0aGUgR2l0IGxpc3RzIHRoZSBvdGhlciBkYXkpLCBidXQgaXQgZG9lcyBtZWFuCisJdGhhdCB0aGUgYmFzaWMgR2l0IGNvbmNlcHRzIGFyZSByZWFsbHkgcmVhbGx5IHNpbXBsZSBhbmQKKyAgICAgICAgc3RyYWlnaHRmb3J3YXJkLgorCisgICAgICAgIEl0J3MgYWxsIGJlZW4gcXVpdGUgc3RhYmxlLgorCisgICAgICAgIFdoaWNoIEkgdGhpbmsgaXMgdmVyeSBtdWNoIGEgcmVzdWx0IG9mIGhhdmluZyB2ZXJ5IHNpbXBsZQorICAgICAgICBiYXNpYyBpZGVhcywgc28gdGhhdCB0aGVyZSdzIG5ldmVyIGFueSBjb25mdXNpb24gYWJvdXQgd2hhdCdzCisgICAgICAgIGdvaW5nIG9uLgorCisgICAgICAgIEJ1Z3MgaGFwcGVuLCBidXQgdGhleSBhcmUgInNpbXBsZSIgYnVncy4gQW5kIGJ1Z3MgdGhhdAorICAgICAgICBhY3R1YWxseSBnZXQgc29tZSBvYmplY3Qgc3RvcmUgZGV0YWlsIHdyb25nIGFyZSBhbG1vc3QgYWx3YXlzCisgICAgICAgIHNvIG9idmlvdXMgdGhhdCB0aGV5IG5ldmVyIGdvIGFueXdoZXJlLgorCisgICAgPG5qc2A+IFllYWguCisKK051ZmYgc2FpZC4KKworICAgIDxsaW51cz4gQW55d2F5LiAgSSdtIG9mZiBmb3IgYmVkLiBJdCdzIG5vdCA2QU0gaGVyZSwgYnV0IEkndmUgZ290CisJIHRocmVlIGtpZHMsIGFuZCBoYXZlIHRvIGdldCB1cCBlYXJseSBpbiB0aGUgbW9ybmluZyB0byBzZW5kCisJIHRoZW0gb2ZmLiBJIG5lZWQgbXkgYmVhdXR5IHNsZWVwLgorCisgICAgPG5qc2A+IDotKQorCisgICAgPG5qc2A+IGFwcHJlY2lhdGUgdGhlIGluZm9kdW1wLCBJIHJlYWxseSB3YXMgZmFpbGluZyB0byBmaW5kIHRoZQorCWRldGFpbHMgb24gR2l0IHBhY2tzIDotKQorCitBbmQgbm93IHlvdSBrbm93IHRoZSByZXN0IG9mIHRoZSBzdG9yeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1wcm90b2NvbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjZTRlZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0CkBAIC0wLDAgKzEsNjc0IEBACitQYWNrZmlsZSB0cmFuc2ZlciBwcm90b2NvbHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitHaXQgc3VwcG9ydHMgdHJhbnNmZXJyaW5nIGRhdGEgaW4gcGFja2ZpbGVzIG92ZXIgdGhlIHNzaDovLywgZ2l0Oi8vLCBodHRwOi8vIGFuZAorZmlsZTovLyB0cmFuc3BvcnRzLiAgVGhlcmUgZXhpc3QgdHdvIHNldHMgb2YgcHJvdG9jb2xzLCBvbmUgZm9yIHB1c2hpbmcKK2RhdGEgZnJvbSBhIGNsaWVudCB0byBhIHNlcnZlciBhbmQgYW5vdGhlciBmb3IgZmV0Y2hpbmcgZGF0YSBmcm9tIGEKK3NlcnZlciB0byBhIGNsaWVudC4gIFRoZSB0aHJlZSB0cmFuc3BvcnRzIChzc2gsIGdpdCwgZmlsZSkgdXNlIHRoZSBzYW1lCitwcm90b2NvbCB0byB0cmFuc2ZlciBkYXRhLiBodHRwIGlzIGRvY3VtZW50ZWQgaW4gaHR0cC1wcm90b2NvbC50eHQuCisKK1RoZSBwcm9jZXNzZXMgaW52b2tlZCBpbiB0aGUgY2Fub25pY2FsIEdpdCBpbXBsZW1lbnRhdGlvbiBhcmUgJ3VwbG9hZC1wYWNrJworb24gdGhlIHNlcnZlciBzaWRlIGFuZCAnZmV0Y2gtcGFjaycgb24gdGhlIGNsaWVudCBzaWRlIGZvciBmZXRjaGluZyBkYXRhOwordGhlbiAncmVjZWl2ZS1wYWNrJyBvbiB0aGUgc2VydmVyIGFuZCAnc2VuZC1wYWNrJyBvbiB0aGUgY2xpZW50IGZvciBwdXNoaW5nCitkYXRhLiAgVGhlIHByb3RvY29sIGZ1bmN0aW9ucyB0byBoYXZlIGEgc2VydmVyIHRlbGwgYSBjbGllbnQgd2hhdCBpcworY3VycmVudGx5IG9uIHRoZSBzZXJ2ZXIsIHRoZW4gZm9yIHRoZSB0d28gdG8gbmVnb3RpYXRlIHRoZSBzbWFsbGVzdCBhbW91bnQKK29mIGRhdGEgdG8gc2VuZCBpbiBvcmRlciB0byBmdWxseSB1cGRhdGUgb25lIG9yIHRoZSBvdGhlci4KKworcGt0LWxpbmUgRm9ybWF0CistLS0tLS0tLS0tLS0tLS0KKworVGhlIGRlc2NyaXB0aW9ucyBiZWxvdyBidWlsZCBvbiB0aGUgcGt0LWxpbmUgZm9ybWF0IGRlc2NyaWJlZCBpbgorcHJvdG9jb2wtY29tbW9uLnR4dC4gV2hlbiB0aGUgZ3JhbW1hciBpbmRpY2F0ZSBgUEtULUxJTkUoLi4uKWAsIHVubGVzcworb3RoZXJ3aXNlIG5vdGVkIHRoZSB1c3VhbCBwa3QtbGluZSBMRiBydWxlcyBhcHBseTogdGhlIHNlbmRlciBTSE9VTEQKK2luY2x1ZGUgYSBMRiwgYnV0IHRoZSByZWNlaXZlciBNVVNUIE5PVCBjb21wbGFpbiBpZiBpdCBpcyBub3QgcHJlc2VudC4KKworQW4gZXJyb3IgcGFja2V0IGlzIGEgc3BlY2lhbCBwa3QtbGluZSB0aGF0IGNvbnRhaW5zIGFuIGVycm9yIHN0cmluZy4KKworLS0tLQorICBlcnJvci1saW5lICAgICA9ICBQS1QtTElORSgiRVJSIiBTUCBleHBsYW5hdGlvbi10ZXh0KQorLS0tLQorCitUaHJvdWdob3V0IHRoZSBwcm90b2NvbCwgd2hlcmUgYFBLVC1MSU5FKC4uLilgIGlzIGV4cGVjdGVkLCBhbiBlcnJvciBwYWNrZXQgTUFZCitiZSBzZW50LiBPbmNlIHRoaXMgcGFja2V0IGlzIHNlbnQgYnkgYSBjbGllbnQgb3IgYSBzZXJ2ZXIsIHRoZSBkYXRhIHRyYW5zZmVyCitwcm9jZXNzIGRlZmluZWQgaW4gdGhpcyBwcm90b2NvbCBpcyB0ZXJtaW5hdGVkLgorCitUcmFuc3BvcnRzCistLS0tLS0tLS0tCitUaGVyZSBhcmUgdGhyZWUgdHJhbnNwb3J0cyBvdmVyIHdoaWNoIHRoZSBwYWNrZmlsZSBwcm90b2NvbCBpcworaW5pdGlhdGVkLiAgVGhlIEdpdCB0cmFuc3BvcnQgaXMgYSBzaW1wbGUsIHVuYXV0aGVudGljYXRlZCBzZXJ2ZXIgdGhhdAordGFrZXMgdGhlIGNvbW1hbmQgKGFsbW9zdCBhbHdheXMgJ3VwbG9hZC1wYWNrJywgdGhvdWdoIEdpdAorc2VydmVycyBjYW4gYmUgY29uZmlndXJlZCB0byBiZSBnbG9iYWxseSB3cml0YWJsZSwgaW4gd2hpY2ggJ3JlY2VpdmUtCitwYWNrJyBpbml0aWF0aW9uIGlzIGFsc28gYWxsb3dlZCkgd2l0aCB3aGljaCB0aGUgY2xpZW50IHdpc2hlcyB0bworY29tbXVuaWNhdGUgYW5kIGV4ZWN1dGVzIGl0IGFuZCBjb25uZWN0cyBpdCB0byB0aGUgcmVxdWVzdGluZworcHJvY2Vzcy4KKworSW4gdGhlIFNTSCB0cmFuc3BvcnQsIHRoZSBjbGllbnQganVzdCBydW5zIHRoZSAndXBsb2FkLXBhY2snCitvciAncmVjZWl2ZS1wYWNrJyBwcm9jZXNzIG9uIHRoZSBzZXJ2ZXIgb3ZlciB0aGUgU1NIIHByb3RvY29sIGFuZCB0aGVuCitjb21tdW5pY2F0ZXMgd2l0aCB0aGF0IGludm9rZWQgcHJvY2VzcyBvdmVyIHRoZSBTU0ggY29ubmVjdGlvbi4KKworVGhlIGZpbGU6Ly8gdHJhbnNwb3J0IHJ1bnMgdGhlICd1cGxvYWQtcGFjaycgb3IgJ3JlY2VpdmUtcGFjaycKK3Byb2Nlc3MgbG9jYWxseSBhbmQgY29tbXVuaWNhdGVzIHdpdGggaXQgb3ZlciBhIHBpcGUuCisKK0V4dHJhIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHByb3RvY29sIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGluIHdoaWNoIGNsaWVudHMgY2FuIHNlbmQgYWRkaXRpb25hbAoraW5mb3JtYXRpb24gaW4gaXRzIGZpcnN0IG1lc3NhZ2UgdG8gdGhlIHNlcnZlci4gVGhlc2UgYXJlIGNhbGxlZCAiRXh0cmEKK1BhcmFtZXRlcnMiLCBhbmQgYXJlIHN1cHBvcnRlZCBieSB0aGUgR2l0LCBTU0gsIGFuZCBIVFRQIHByb3RvY29scy4KKworRWFjaCBFeHRyYSBQYXJhbWV0ZXIgdGFrZXMgdGhlIGZvcm0gb2YgYDxrZXk+PTx2YWx1ZT5gIG9yIGA8a2V5PmAuCisKK1NlcnZlcnMgdGhhdCByZWNlaXZlIGFueSBzdWNoIEV4dHJhIFBhcmFtZXRlcnMgTVVTVCBpZ25vcmUgYWxsCit1bnJlY29nbml6ZWQga2V5cy4gQ3VycmVudGx5LCB0aGUgb25seSBFeHRyYSBQYXJhbWV0ZXIgcmVjb2duaXplZCBpcworInZlcnNpb24iIHdpdGggYSB2YWx1ZSBvZiAnMScgb3IgJzInLiAgU2VlIHByb3RvY29sLXYyLnR4dCBmb3IgbW9yZQoraW5mb3JtYXRpb24gb24gcHJvdG9jb2wgdmVyc2lvbiAyLgorCitHaXQgVHJhbnNwb3J0CistLS0tLS0tLS0tLS0tCisKK1RoZSBHaXQgdHJhbnNwb3J0IHN0YXJ0cyBvZmYgYnkgc2VuZGluZyB0aGUgY29tbWFuZCBhbmQgcmVwb3NpdG9yeQorb24gdGhlIHdpcmUgdXNpbmcgdGhlIHBrdC1saW5lIGZvcm1hdCwgZm9sbG93ZWQgYnkgYSBOVUwgYnl0ZSBhbmQgYQoraG9zdG5hbWUgcGFyYW1ldGVyLCB0ZXJtaW5hdGVkIGJ5IGEgTlVMIGJ5dGUuCisKKyAgIDAwMzNnaXQtdXBsb2FkLXBhY2sgL3Byb2plY3QuZ2l0XDBob3N0PW15c2VydmVyLmNvbVwwCisKK1RoZSB0cmFuc3BvcnQgbWF5IHNlbmQgRXh0cmEgUGFyYW1ldGVycyBieSBhZGRpbmcgYW4gYWRkaXRpb25hbCBOVUwKK2J5dGUsIGFuZCB0aGVuIGFkZGluZyBvbmUgb3IgbW9yZSBOVUwtdGVybWluYXRlZCBzdHJpbmdzOgorCisgICAwMDNlZ2l0LXVwbG9hZC1wYWNrIC9wcm9qZWN0LmdpdFwwaG9zdD1teXNlcnZlci5jb21cMFwwdmVyc2lvbj0xXDAKKworLS0KKyAgIGdpdC1wcm90by1yZXF1ZXN0ID0gcmVxdWVzdC1jb21tYW5kIFNQIHBhdGhuYW1lIE5VTAorCQkgICAgICAgWyBob3N0LXBhcmFtZXRlciBOVUwgXSBbIE5VTCBleHRyYS1wYXJhbWV0ZXJzIF0KKyAgIHJlcXVlc3QtY29tbWFuZCAgID0gImdpdC11cGxvYWQtcGFjayIgLyAiZ2l0LXJlY2VpdmUtcGFjayIgLworCQkgICAgICAgImdpdC11cGxvYWQtYXJjaGl2ZSIgICA7IGNhc2Ugc2Vuc2l0aXZlCisgICBwYXRobmFtZSAgICAgICAgICA9ICooICV4MDEtZmYgKSA7IGV4Y2x1ZGUgTlVMCisgICBob3N0LXBhcmFtZXRlciAgICA9ICJob3N0PSIgaG9zdG5hbWUgWyAiOiIgcG9ydCBdCisgICBleHRyYS1wYXJhbWV0ZXJzICA9IDEqZXh0cmEtcGFyYW1ldGVyCisgICBleHRyYS1wYXJhbWV0ZXIgICA9IDEqKCAleDAxLWZmICkgTlVMCistLQorCitob3N0LXBhcmFtZXRlciBpcyB1c2VkIGZvciB0aGUKK2dpdC1kYWVtb24gbmFtZSBiYXNlZCB2aXJ0dWFsIGhvc3RpbmcuICBTZWUgLS1pbnRlcnBvbGF0ZWQtcGF0aAorb3B0aW9uIHRvIGdpdCBkYWVtb24sIHdpdGggdGhlICVILyVDSCBmb3JtYXQgY2hhcmFjdGVycy4KKworQmFzaWNhbGx5IHdoYXQgdGhlIEdpdCBjbGllbnQgaXMgZG9pbmcgdG8gY29ubmVjdCB0byBhbiAndXBsb2FkLXBhY2snCitwcm9jZXNzIG9uIHRoZSBzZXJ2ZXIgc2lkZSBvdmVyIHRoZSBHaXQgcHJvdG9jb2wgaXMgdGhpczoKKworICAgJCBlY2hvIC1lIC1uIFwKKyAgICAgIjAwMzlnaXQtdXBsb2FkLXBhY2sgL3NjaGFjb24vZ2l0Ym9vay5naXRcMGhvc3Q9ZXhhbXBsZS5jb21cMCIgfAorICAgICBuYyAtdiBleGFtcGxlLmNvbSA5NDE4CisKKworU1NIIFRyYW5zcG9ydAorLS0tLS0tLS0tLS0tLQorCitJbml0aWF0aW5nIHRoZSB1cGxvYWQtcGFjayBvciByZWNlaXZlLXBhY2sgcHJvY2Vzc2VzIG92ZXIgU1NIIGlzCitleGVjdXRpbmcgdGhlIGJpbmFyeSBvbiB0aGUgc2VydmVyIHZpYSBTU0ggcmVtb3RlIGV4ZWN1dGlvbi4KK0l0IGlzIGJhc2ljYWxseSBlcXVpdmFsZW50IHRvIHJ1bm5pbmcgdGhpczoKKworICAgJCBzc2ggZ2l0LmV4YW1wbGUuY29tICJnaXQtdXBsb2FkLXBhY2sgJy9wcm9qZWN0LmdpdCciCisKK0ZvciBhIHNlcnZlciB0byBzdXBwb3J0IEdpdCBwdXNoaW5nIGFuZCBwdWxsaW5nIGZvciBhIGdpdmVuIHVzZXIgb3ZlcgorU1NILCB0aGF0IHVzZXIgbmVlZHMgdG8gYmUgYWJsZSB0byBleGVjdXRlIG9uZSBvciBib3RoIG9mIHRob3NlCitjb21tYW5kcyB2aWEgdGhlIFNTSCBzaGVsbCB0aGF0IHRoZXkgYXJlIHByb3ZpZGVkIG9uIGxvZ2luLiAgT24gc29tZQorc3lzdGVtcywgdGhhdCBzaGVsbCBhY2Nlc3MgaXMgbGltaXRlZCB0byBvbmx5IGJlaW5nIGFibGUgdG8gcnVuIHRob3NlCit0d28gY29tbWFuZHMsIG9yIGV2ZW4ganVzdCBvbmUgb2YgdGhlbS4KKworSW4gYW4gc3NoOi8vIGZvcm1hdCBVUkksIGl0J3MgYWJzb2x1dGUgaW4gdGhlIFVSSSwgc28gdGhlICcvJyBhZnRlcgordGhlIGhvc3QgbmFtZSAob3IgcG9ydCBudW1iZXIpIGlzIHNlbnQgYXMgYW4gYXJndW1lbnQsIHdoaWNoIGlzIHRoZW4KK3JlYWQgYnkgdGhlIHJlbW90ZSBnaXQtdXBsb2FkLXBhY2sgZXhhY3RseSBhcyBpcywgc28gaXQncyBlZmZlY3RpdmVseQorYW4gYWJzb2x1dGUgcGF0aCBpbiB0aGUgcmVtb3RlIGZpbGVzeXN0ZW0uCisKKyAgICAgICBnaXQgY2xvbmUgc3NoOi8vdXNlckBleGFtcGxlLmNvbS9wcm9qZWN0LmdpdAorCQkgICAgfAorCQkgICAgdgorICAgIHNzaCB1c2VyQGV4YW1wbGUuY29tICJnaXQtdXBsb2FkLXBhY2sgJy9wcm9qZWN0LmdpdCciCisKK0luIGEgInVzZXJAaG9zdDpwYXRoIiBmb3JtYXQgVVJJLCBpdHMgcmVsYXRpdmUgdG8gdGhlIHVzZXIncyBob21lCitkaXJlY3RvcnksIGJlY2F1c2UgdGhlIEdpdCBjbGllbnQgd2lsbCBydW46CisKKyAgICAgZ2l0IGNsb25lIHVzZXJAZXhhbXBsZS5jb206cHJvamVjdC5naXQKKwkJICAgIHwKKwkJICAgIHYKKyAgc3NoIHVzZXJAZXhhbXBsZS5jb20gImdpdC11cGxvYWQtcGFjayAncHJvamVjdC5naXQnIgorCitUaGUgZXhjZXB0aW9uIGlzIGlmIGEgJ34nIGlzIHVzZWQsIGluIHdoaWNoIGNhc2UKK3dlIGV4ZWN1dGUgaXQgd2l0aG91dCB0aGUgbGVhZGluZyAnLycuCisKKyAgICAgIHNzaDovL3VzZXJAZXhhbXBsZS5jb20vfmFsaWNlL3Byb2plY3QuZ2l0LAorCQkgICAgIHwKKwkJICAgICB2CisgICBzc2ggdXNlckBleGFtcGxlLmNvbSAiZ2l0LXVwbG9hZC1wYWNrICd+YWxpY2UvcHJvamVjdC5naXQnIgorCitEZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoZSBgcHJvdG9jb2wudmVyc2lvbmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwKK0dpdCBtYXkgYXR0ZW1wdCB0byBzZW5kIEV4dHJhIFBhcmFtZXRlcnMgYXMgYSBjb2xvbi1zZXBhcmF0ZWQgc3RyaW5nIGluCit0aGUgR0lUX1BST1RPQ09MIGVudmlyb25tZW50IHZhcmlhYmxlLiBUaGlzIGlzIGRvbmUgb25seSBpZgordGhlIGBzc2gudmFyaWFudGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpbmRpY2F0ZXMgdGhhdCB0aGUgc3NoIGNvbW1hbmQKK3N1cHBvcnRzIHBhc3NpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFzIGFuIGFyZ3VtZW50LgorCitBIGZldyB0aGluZ3MgdG8gcmVtZW1iZXIgaGVyZToKKworLSBUaGUgImNvbW1hbmQgbmFtZSIgaXMgc3BlbGxlZCB3aXRoIGRhc2ggKGUuZy4gZ2l0LXVwbG9hZC1wYWNrKSwgYnV0CisgIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGNsaWVudDsKKworLSBUaGUgcmVwb3NpdG9yeSBwYXRoIGlzIGFsd2F5cyBxdW90ZWQgd2l0aCBzaW5nbGUgcXVvdGVzLgorCitGZXRjaGluZyBEYXRhIEZyb20gYSBTZXJ2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIG9uZSBHaXQgcmVwb3NpdG9yeSB3YW50cyB0byBnZXQgZGF0YSB0aGF0IGEgc2Vjb25kIHJlcG9zaXRvcnkKK2hhcywgdGhlIGZpcnN0IGNhbiAnZmV0Y2gnIGZyb20gdGhlIHNlY29uZC4gIFRoaXMgb3BlcmF0aW9uIGRldGVybWluZXMKK3doYXQgZGF0YSB0aGUgc2VydmVyIGhhcyB0aGF0IHRoZSBjbGllbnQgZG9lcyBub3QgdGhlbiBzdHJlYW1zIHRoYXQKK2RhdGEgZG93biB0byB0aGUgY2xpZW50IGluIHBhY2tmaWxlIGZvcm1hdC4KKworCitSZWZlcmVuY2UgRGlzY292ZXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdGhlIGNsaWVudCBpbml0aWFsbHkgY29ubmVjdHMgdGhlIHNlcnZlciB3aWxsIGltbWVkaWF0ZWx5IHJlc3BvbmQKK3dpdGggYSB2ZXJzaW9uIG51bWJlciAoaWYgInZlcnNpb249MSIgaXMgc2VudCBhcyBhbiBFeHRyYSBQYXJhbWV0ZXIpLAorYW5kIGEgbGlzdGluZyBvZiBlYWNoIHJlZmVyZW5jZSBpdCBoYXMgKGFsbCBicmFuY2hlcyBhbmQgdGFncykgYWxvbmcKK3dpdGggdGhlIG9iamVjdCBuYW1lIHRoYXQgZWFjaCByZWZlcmVuY2UgY3VycmVudGx5IHBvaW50cyB0by4KKworICAgJCBlY2hvIC1lIC1uICIwMDQ0Z2l0LXVwbG9hZC1wYWNrIC9zY2hhY29uL2dpdGJvb2suZ2l0XDBob3N0PWV4YW1wbGUuY29tXDBcMHZlcnNpb249MVwwIiB8CisgICAgICBuYyAtdiBleGFtcGxlLmNvbSA5NDE4CisgICAwMDBhdmVyc2lvbiAxCisgICAwMDg4NzIxN2E3YzdlNTgyYzQ2Y2VjMjJhMTMwYWRmNGI5ZDdkOTUwZmJhMCBIRUFEXDBtdWx0aV9hY2sgdGhpbi1wYWNrCisJCXNpZGUtYmFuZCBzaWRlLWJhbmQtNjRrIG9mcy1kZWx0YSBzaGFsbG93IG5vLXByb2dyZXNzIGluY2x1ZGUtdGFnCisgICAwMDQ0MWQzZmNkNWNlZDQ0NWQxYWJjNDAyMjI1YzBiOGExMjk5NjQxZjQ5NyByZWZzL2hlYWRzL2ludGVncmF0aW9uCisgICAwMDNmNzIxN2E3YzdlNTgyYzQ2Y2VjMjJhMTMwYWRmNGI5ZDdkOTUwZmJhMCByZWZzL2hlYWRzL21hc3RlcgorICAgMDAzY2I4OGQyNDQxY2FjMDk3N2ZhZjk4ZWZjODAzMDUwMTIxMTIyMzhkOWQgcmVmcy90YWdzL3YwLjkKKyAgIDAwM2M1MjUxMjg0ODBiOTZjODllNjQxOGIxZTQwOTA5YmY2YzViMmQ1ODBmIHJlZnMvdGFncy92MS4wCisgICAwMDNmZTkyZGY0ODc0M2I3YmM3ZDI2YmNhYWJmZGRkZTBhMWUyMGNhZTQ3YyByZWZzL3RhZ3MvdjEuMF57fQorICAgMDAwMAorCitUaGUgcmV0dXJuZWQgcmVzcG9uc2UgaXMgYSBwa3QtbGluZSBzdHJlYW0gZGVzY3JpYmluZyBlYWNoIHJlZiBhbmQKK2l0cyBjdXJyZW50IHZhbHVlLiAgVGhlIHN0cmVhbSBNVVNUIGJlIHNvcnRlZCBieSBuYW1lIGFjY29yZGluZyB0bwordGhlIEMgbG9jYWxlIG9yZGVyaW5nLgorCitJZiBIRUFEIGlzIGEgdmFsaWQgcmVmLCBIRUFEIE1VU1QgYXBwZWFyIGFzIHRoZSBmaXJzdCBhZHZlcnRpc2VkCityZWYuICBJZiBIRUFEIGlzIG5vdCBhIHZhbGlkIHJlZiwgSEVBRCBNVVNUIE5PVCBhcHBlYXIgaW4gdGhlCithZHZlcnRpc2VtZW50IGxpc3QgYXQgYWxsLCBidXQgb3RoZXIgcmVmcyBtYXkgc3RpbGwgYXBwZWFyLgorCitUaGUgc3RyZWFtIE1VU1QgaW5jbHVkZSBjYXBhYmlsaXR5IGRlY2xhcmF0aW9ucyBiZWhpbmQgYSBOVUwgb24gdGhlCitmaXJzdCByZWYuIFRoZSBwZWVsZWQgdmFsdWUgb2YgYSByZWYgKHRoYXQgaXMgInJlZl57fSIpIE1VU1QgYmUKK2ltbWVkaWF0ZWx5IGFmdGVyIHRoZSByZWYgaXRzZWxmLCBpZiBwcmVzZW50ZWQuIEEgY29uZm9ybWluZyBzZXJ2ZXIKK01VU1QgcGVlbCB0aGUgcmVmIGlmIGl0J3MgYW4gYW5ub3RhdGVkIHRhZy4KKworLS0tLQorICBhZHZlcnRpc2VkLXJlZnMgID0gICoxKCJ2ZXJzaW9uIDEiKQorCQkgICAgICAobm8tcmVmcyAvIGxpc3Qtb2YtcmVmcykKKwkJICAgICAgKnNoYWxsb3cKKwkJICAgICAgZmx1c2gtcGt0CisKKyAgbm8tcmVmcyAgICAgICAgICA9ICBQS1QtTElORSh6ZXJvLWlkIFNQICJjYXBhYmlsaXRpZXNee30iCisJCSAgICAgIE5VTCBjYXBhYmlsaXR5LWxpc3QpCisKKyAgbGlzdC1vZi1yZWZzICAgICA9ICBmaXJzdC1yZWYgKm90aGVyLXJlZgorICBmaXJzdC1yZWYgICAgICAgID0gIFBLVC1MSU5FKG9iai1pZCBTUCByZWZuYW1lCisJCSAgICAgIE5VTCBjYXBhYmlsaXR5LWxpc3QpCisKKyAgb3RoZXItcmVmICAgICAgICA9ICBQS1QtTElORShvdGhlci10aXAgLyBvdGhlci1wZWVsZWQpCisgIG90aGVyLXRpcCAgICAgICAgPSAgb2JqLWlkIFNQIHJlZm5hbWUKKyAgb3RoZXItcGVlbGVkICAgICA9ICBvYmotaWQgU1AgcmVmbmFtZSAiXnt9IgorCisgIHNoYWxsb3cgICAgICAgICAgPSAgUEtULUxJTkUoInNoYWxsb3ciIFNQIG9iai1pZCkKKworICBjYXBhYmlsaXR5LWxpc3QgID0gIGNhcGFiaWxpdHkgKihTUCBjYXBhYmlsaXR5KQorICBjYXBhYmlsaXR5ICAgICAgID0gIDEqKExDX0FMUEhBIC8gRElHSVQgLyAiLSIgLyAiXyIpCisgIExDX0FMUEhBICAgICAgICAgPSAgJXg2MS03QQorLS0tLQorCitTZXJ2ZXIgYW5kIGNsaWVudCBNVVNUIHVzZSBsb3dlcmNhc2UgZm9yIG9iai1pZCwgYm90aCBNVVNUIHRyZWF0IG9iai1pZAorYXMgY2FzZS1pbnNlbnNpdGl2ZS4KKworU2VlIHByb3RvY29sLWNhcGFiaWxpdGllcy50eHQgZm9yIGEgbGlzdCBvZiBhbGxvd2VkIHNlcnZlciBjYXBhYmlsaXRpZXMKK2FuZCBkZXNjcmlwdGlvbnMuCisKK1BhY2tmaWxlIE5lZ290aWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLQorQWZ0ZXIgcmVmZXJlbmNlIGFuZCBjYXBhYmlsaXRpZXMgZGlzY292ZXJ5LCB0aGUgY2xpZW50IGNhbiBkZWNpZGUgdG8KK3Rlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbiBieSBzZW5kaW5nIGEgZmx1c2gtcGt0LCB0ZWxsaW5nIHRoZSBzZXJ2ZXIgaXQgY2FuCitub3cgZ3JhY2VmdWxseSB0ZXJtaW5hdGUsIGFuZCBkaXNjb25uZWN0LCB3aGVuIGl0IGRvZXMgbm90IG5lZWQgYW55IHBhY2sKK2RhdGEuIFRoaXMgY2FuIGhhcHBlbiB3aXRoIHRoZSBscy1yZW1vdGUgY29tbWFuZCwgYW5kIGFsc28gY2FuIGhhcHBlbiB3aGVuCit0aGUgY2xpZW50IGFscmVhZHkgaXMgdXAgdG8gZGF0ZS4KKworT3RoZXJ3aXNlLCBpdCBlbnRlcnMgdGhlIG5lZ290aWF0aW9uIHBoYXNlLCB3aGVyZSB0aGUgY2xpZW50IGFuZAorc2VydmVyIGRldGVybWluZSB3aGF0IHRoZSBtaW5pbWFsIHBhY2tmaWxlIG5lY2Vzc2FyeSBmb3IgdHJhbnNwb3J0IGlzLAorYnkgdGVsbGluZyB0aGUgc2VydmVyIHdoYXQgb2JqZWN0cyBpdCB3YW50cywgaXRzIHNoYWxsb3cgb2JqZWN0cworKGlmIGFueSksIGFuZCB0aGUgbWF4aW11bSBjb21taXQgZGVwdGggaXQgd2FudHMgKGlmIGFueSkuICBUaGUgY2xpZW50Cit3aWxsIGFsc28gc2VuZCBhIGxpc3Qgb2YgdGhlIGNhcGFiaWxpdGllcyBpdCB3YW50cyB0byBiZSBpbiBlZmZlY3QsCitvdXQgb2Ygd2hhdCB0aGUgc2VydmVyIHNhaWQgaXQgY291bGQgZG8gd2l0aCB0aGUgZmlyc3QgJ3dhbnQnIGxpbmUuCisKKy0tLS0KKyAgdXBsb2FkLXJlcXVlc3QgICAgPSAgd2FudC1saXN0CisJCSAgICAgICAqc2hhbGxvdy1saW5lCisJCSAgICAgICAqMWRlcHRoLXJlcXVlc3QKKwkJICAgICAgIFtmaWx0ZXItcmVxdWVzdF0KKwkJICAgICAgIGZsdXNoLXBrdAorCisgIHdhbnQtbGlzdCAgICAgICAgID0gIGZpcnN0LXdhbnQKKwkJICAgICAgICphZGRpdGlvbmFsLXdhbnQKKworICBzaGFsbG93LWxpbmUgICAgICA9ICBQS1QtTElORSgic2hhbGxvdyIgU1Agb2JqLWlkKQorCisgIGRlcHRoLXJlcXVlc3QgICAgID0gIFBLVC1MSU5FKCJkZWVwZW4iIFNQIGRlcHRoKSAvCisJCSAgICAgICBQS1QtTElORSgiZGVlcGVuLXNpbmNlIiBTUCB0aW1lc3RhbXApIC8KKwkJICAgICAgIFBLVC1MSU5FKCJkZWVwZW4tbm90IiBTUCByZWYpCisKKyAgZmlyc3Qtd2FudCAgICAgICAgPSAgUEtULUxJTkUoIndhbnQiIFNQIG9iai1pZCBTUCBjYXBhYmlsaXR5LWxpc3QpCisgIGFkZGl0aW9uYWwtd2FudCAgID0gIFBLVC1MSU5FKCJ3YW50IiBTUCBvYmotaWQpCisKKyAgZGVwdGggICAgICAgICAgICAgPSAgMSpESUdJVAorCisgIGZpbHRlci1yZXF1ZXN0ICAgID0gIFBLVC1MSU5FKCJmaWx0ZXIiIFNQIGZpbHRlci1zcGVjKQorLS0tLQorCitDbGllbnRzIE1VU1Qgc2VuZCBhbGwgdGhlIG9iai1pZHMgaXQgd2FudHMgZnJvbSB0aGUgcmVmZXJlbmNlCitkaXNjb3ZlcnkgcGhhc2UgYXMgJ3dhbnQnIGxpbmVzLiBDbGllbnRzIE1VU1Qgc2VuZCBhdCBsZWFzdCBvbmUKKyd3YW50JyBjb21tYW5kIGluIHRoZSByZXF1ZXN0IGJvZHkuIENsaWVudHMgTVVTVCBOT1QgbWVudGlvbiBhbgorb2JqLWlkIGluIGEgJ3dhbnQnIGNvbW1hbmQgd2hpY2ggZGlkIG5vdCBhcHBlYXIgaW4gdGhlIHJlc3BvbnNlCitvYnRhaW5lZCB0aHJvdWdoIHJlZiBkaXNjb3ZlcnkuCisKK1RoZSBjbGllbnQgTVVTVCB3cml0ZSBhbGwgb2JqLWlkcyB3aGljaCBpdCBvbmx5IGhhcyBzaGFsbG93IGNvcGllcworb2YgKG1lYW5pbmcgdGhhdCBpdCBkb2VzIG5vdCBoYXZlIHRoZSBwYXJlbnRzIG9mIGEgY29tbWl0KSBhcworJ3NoYWxsb3cnIGxpbmVzIHNvIHRoYXQgdGhlIHNlcnZlciBpcyBhd2FyZSBvZiB0aGUgbGltaXRhdGlvbnMgb2YKK3RoZSBjbGllbnQncyBoaXN0b3J5LgorCitUaGUgY2xpZW50IG5vdyBzZW5kcyB0aGUgbWF4aW11bSBjb21taXQgaGlzdG9yeSBkZXB0aCBpdCB3YW50cyBmb3IKK3RoaXMgdHJhbnNhY3Rpb24sIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgY29tbWl0cyBpdCB3YW50cyBmcm9tIHRoZQordGlwIG9mIHRoZSBoaXN0b3J5LCBpZiBhbnksIGFzIGEgJ2RlZXBlbicgbGluZS4gIEEgZGVwdGggb2YgMCBpcyB0aGUKK3NhbWUgYXMgbm90IG1ha2luZyBhIGRlcHRoIHJlcXVlc3QuIFRoZSBjbGllbnQgZG9lcyBub3Qgd2FudCB0byByZWNlaXZlCithbnkgY29tbWl0cyBiZXlvbmQgdGhpcyBkZXB0aCwgbm9yIGRvZXMgaXQgd2FudCBvYmplY3RzIG5lZWRlZCBvbmx5IHRvCitjb21wbGV0ZSB0aG9zZSBjb21taXRzLiBDb21taXRzIHdob3NlIHBhcmVudHMgYXJlIG5vdCByZWNlaXZlZCBhcyBhCityZXN1bHQgYXJlIGRlZmluZWQgYXMgc2hhbGxvdyBhbmQgbWFya2VkIGFzIHN1Y2ggaW4gdGhlIHNlcnZlci4gVGhpcworaW5mb3JtYXRpb24gaXMgc2VudCBiYWNrIHRvIHRoZSBjbGllbnQgaW4gdGhlIG5leHQgc3RlcC4KKworVGhlIGNsaWVudCBjYW4gb3B0aW9uYWxseSByZXF1ZXN0IHRoYXQgcGFjay1vYmplY3RzIG9taXQgdmFyaW91cworb2JqZWN0cyBmcm9tIHRoZSBwYWNrZmlsZSB1c2luZyBvbmUgb2Ygc2V2ZXJhbCBmaWx0ZXJpbmcgdGVjaG5pcXVlcy4KK1RoZXNlIGFyZSBpbnRlbmRlZCBmb3IgdXNlIHdpdGggcGFydGlhbCBjbG9uZSBhbmQgcGFydGlhbCBmZXRjaAorb3BlcmF0aW9ucy4gQW4gb2JqZWN0IHRoYXQgZG9lcyBub3QgbWVldCBhIGZpbHRlci1zcGVjIHZhbHVlIGlzCitvbWl0dGVkIHVubGVzcyBleHBsaWNpdGx5IHJlcXVlc3RlZCBpbiBhICd3YW50JyBsaW5lLiBTZWUgYHJldi1saXN0YAorZm9yIHBvc3NpYmxlIGZpbHRlci1zcGVjIHZhbHVlcy4KKworT25jZSBhbGwgdGhlICd3YW50J3MgYW5kICdzaGFsbG93J3MgKGFuZCBvcHRpb25hbCAnZGVlcGVuJykgYXJlCit0cmFuc2ZlcnJlZCwgY2xpZW50cyBNVVNUIHNlbmQgYSBmbHVzaC1wa3QsIHRvIHRlbGwgdGhlIHNlcnZlciBzaWRlCit0aGF0IGl0IGlzIGRvbmUgc2VuZGluZyB0aGUgbGlzdC4KKworT3RoZXJ3aXNlLCBpZiB0aGUgY2xpZW50IHNlbnQgYSBwb3NpdGl2ZSBkZXB0aCByZXF1ZXN0LCB0aGUgc2VydmVyCit3aWxsIGRldGVybWluZSB3aGljaCBjb21taXRzIHdpbGwgYW5kIHdpbGwgbm90IGJlIHNoYWxsb3cgYW5kCitzZW5kIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGNsaWVudC4gSWYgdGhlIGNsaWVudCBkaWQgbm90IHJlcXVlc3QKK2EgcG9zaXRpdmUgZGVwdGgsIHRoaXMgc3RlcCBpcyBza2lwcGVkLgorCistLS0tCisgIHNoYWxsb3ctdXBkYXRlICAgPSAgKnNoYWxsb3ctbGluZQorCQkgICAgICAqdW5zaGFsbG93LWxpbmUKKwkJICAgICAgZmx1c2gtcGt0CisKKyAgc2hhbGxvdy1saW5lICAgICA9ICBQS1QtTElORSgic2hhbGxvdyIgU1Agb2JqLWlkKQorCisgIHVuc2hhbGxvdy1saW5lICAgPSAgUEtULUxJTkUoInVuc2hhbGxvdyIgU1Agb2JqLWlkKQorLS0tLQorCitJZiB0aGUgY2xpZW50IGhhcyByZXF1ZXN0ZWQgYSBwb3NpdGl2ZSBkZXB0aCwgdGhlIHNlcnZlciB3aWxsIGNvbXB1dGUKK3RoZSBzZXQgb2YgY29tbWl0cyB3aGljaCBhcmUgbm8gZGVlcGVyIHRoYW4gdGhlIGRlc2lyZWQgZGVwdGguIFRoZSBzZXQKK29mIGNvbW1pdHMgc3RhcnQgYXQgdGhlIGNsaWVudCdzIHdhbnRzLgorCitUaGUgc2VydmVyIHdyaXRlcyAnc2hhbGxvdycgbGluZXMgZm9yIGVhY2gKK2NvbW1pdCB3aG9zZSBwYXJlbnRzIHdpbGwgbm90IGJlIHNlbnQgYXMgYSByZXN1bHQuIFRoZSBzZXJ2ZXIgd3JpdGVzCithbiAndW5zaGFsbG93JyBsaW5lIGZvciBlYWNoIGNvbW1pdCB3aGljaCB0aGUgY2xpZW50IGhhcyBpbmRpY2F0ZWQgaXMKK3NoYWxsb3csIGJ1dCBpcyBubyBsb25nZXIgc2hhbGxvdyBhdCB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBkZXB0aAorKHRoYXQgaXMsIGl0cyBwYXJlbnRzIHdpbGwgbm93IGJlIHNlbnQpLiBUaGUgc2VydmVyIE1VU1QgTk9UIG1hcmsKK2FzIHVuc2hhbGxvdyBhbnl0aGluZyB3aGljaCB0aGUgY2xpZW50IGhhcyBub3QgaW5kaWNhdGVkIHdhcyBzaGFsbG93LgorCitOb3cgdGhlIGNsaWVudCB3aWxsIHNlbmQgYSBsaXN0IG9mIHRoZSBvYmotaWRzIGl0IGhhcyB1c2luZyAnaGF2ZScKK2xpbmVzLCBzbyB0aGUgc2VydmVyIGNhbiBtYWtlIGEgcGFja2ZpbGUgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBvYmplY3RzCit0aGF0IHRoZSBjbGllbnQgbmVlZHMuIEluIG11bHRpX2FjayBtb2RlLCB0aGUgY2Fub25pY2FsIGltcGxlbWVudGF0aW9uCit3aWxsIHNlbmQgdXAgdG8gMzIgb2YgdGhlc2UgYXQgYSB0aW1lLCB0aGVuIHdpbGwgc2VuZCBhIGZsdXNoLXBrdC4gVGhlCitjYW5vbmljYWwgaW1wbGVtZW50YXRpb24gd2lsbCBza2lwIGFoZWFkIGFuZCBzZW5kIHRoZSBuZXh0IDMyIGltbWVkaWF0ZWx5LAorc28gdGhhdCB0aGVyZSBpcyBhbHdheXMgYSBibG9jayBvZiAzMiAiaW4tZmxpZ2h0IG9uIHRoZSB3aXJlIiBhdCBhIHRpbWUuCisKKy0tLS0KKyAgdXBsb2FkLWhhdmVzICAgICAgPSAgaGF2ZS1saXN0CisJCSAgICAgICBjb21wdXRlLWVuZAorCisgIGhhdmUtbGlzdCAgICAgICAgID0gICpoYXZlLWxpbmUKKyAgaGF2ZS1saW5lICAgICAgICAgPSAgUEtULUxJTkUoImhhdmUiIFNQIG9iai1pZCkKKyAgY29tcHV0ZS1lbmQgICAgICAgPSAgZmx1c2gtcGt0IC8gUEtULUxJTkUoImRvbmUiKQorLS0tLQorCitJZiB0aGUgc2VydmVyIHJlYWRzICdoYXZlJyBsaW5lcywgaXQgdGhlbiB3aWxsIHJlc3BvbmQgYnkgQUNLaW5nIGFueQorb2YgdGhlIG9iai1pZHMgdGhlIGNsaWVudCBzYWlkIGl0IGhhZCB0aGF0IHRoZSBzZXJ2ZXIgYWxzbyBoYXMuIFRoZQorc2VydmVyIHdpbGwgQUNLIG9iai1pZHMgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoaWNoIGFjayBtb2RlIGlzCitjaG9zZW4gYnkgdGhlIGNsaWVudC4KKworSW4gbXVsdGlfYWNrIG1vZGU6CisKKyAgKiB0aGUgc2VydmVyIHdpbGwgcmVzcG9uZCB3aXRoICdBQ0sgb2JqLWlkIGNvbnRpbnVlJyBmb3IgYW55IGNvbW1vbgorICAgIGNvbW1pdHMuCisKKyAgKiBvbmNlIHRoZSBzZXJ2ZXIgaGFzIGZvdW5kIGFuIGFjY2VwdGFibGUgY29tbW9uIGJhc2UgY29tbWl0IGFuZCBpcworICAgIHJlYWR5IHRvIG1ha2UgYSBwYWNrZmlsZSwgaXQgd2lsbCBibGluZGx5IEFDSyBhbGwgJ2hhdmUnIG9iai1pZHMKKyAgICBiYWNrIHRvIHRoZSBjbGllbnQuCisKKyAgKiB0aGUgc2VydmVyIHdpbGwgdGhlbiBzZW5kIGEgJ05BSycgYW5kIHRoZW4gd2FpdCBmb3IgYW5vdGhlciByZXNwb25zZQorICAgIGZyb20gdGhlIGNsaWVudCAtIGVpdGhlciBhICdkb25lJyBvciBhbm90aGVyIGxpc3Qgb2YgJ2hhdmUnIGxpbmVzLgorCitJbiBtdWx0aV9hY2tfZGV0YWlsZWQgbW9kZToKKworICAqIHRoZSBzZXJ2ZXIgd2lsbCBkaWZmZXJlbnRpYXRlIHRoZSBBQ0tzIHdoZXJlIGl0IGlzIHNpZ25hbGluZworICAgIHRoYXQgaXQgaXMgcmVhZHkgdG8gc2VuZCBkYXRhIHdpdGggJ0FDSyBvYmotaWQgcmVhZHknIGxpbmVzLCBhbmQKKyAgICBzaWduYWxzIHRoZSBpZGVudGlmaWVkIGNvbW1vbiBjb21taXRzIHdpdGggJ0FDSyBvYmotaWQgY29tbW9uJyBsaW5lcy4KKworV2l0aG91dCBlaXRoZXIgbXVsdGlfYWNrIG9yIG11bHRpX2Fja19kZXRhaWxlZDoKKworICogdXBsb2FkLXBhY2sgc2VuZHMgIkFDSyBvYmotaWQiIG9uIHRoZSBmaXJzdCBjb21tb24gb2JqZWN0IGl0IGZpbmRzLgorICAgQWZ0ZXIgdGhhdCBpdCBzYXlzIG5vdGhpbmcgdW50aWwgdGhlIGNsaWVudCBnaXZlcyBpdCBhICJkb25lIi4KKworICogdXBsb2FkLXBhY2sgc2VuZHMgIk5BSyIgb24gYSBmbHVzaC1wa3QgaWYgbm8gY29tbW9uIG9iamVjdAorICAgaGFzIGJlZW4gZm91bmQgeWV0LiAgSWYgb25lIGhhcyBiZWVuIGZvdW5kLCBhbmQgdGh1cyBhbiBBQ0sKKyAgIHdhcyBhbHJlYWR5IHNlbnQsIGl0J3Mgc2lsZW50IG9uIHRoZSBmbHVzaC1wa3QuCisKK0FmdGVyIHRoZSBjbGllbnQgaGFzIGdvdHRlbiBlbm91Z2ggQUNLIHJlc3BvbnNlcyB0aGF0IGl0IGNhbiBkZXRlcm1pbmUKK3RoYXQgdGhlIHNlcnZlciBoYXMgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHNlbmQgYW4gZWZmaWNpZW50IHBhY2tmaWxlCisoaW4gdGhlIGNhbm9uaWNhbCBpbXBsZW1lbnRhdGlvbiwgdGhpcyBpcyBkZXRlcm1pbmVkIHdoZW4gaXQgaGFzIHJlY2VpdmVkCitlbm91Z2ggQUNLcyB0aGF0IGl0IGNhbiBjb2xvciBldmVyeXRoaW5nIGxlZnQgaW4gdGhlIC0tZGF0ZS1vcmRlciBxdWV1ZQorYXMgY29tbW9uIHdpdGggdGhlIHNlcnZlciwgb3IgdGhlIC0tZGF0ZS1vcmRlciBxdWV1ZSBpcyBlbXB0eSksIG9yIHRoZQorY2xpZW50IGRldGVybWluZXMgdGhhdCBpdCB3YW50cyB0byBnaXZlIHVwIChpbiB0aGUgY2Fub25pY2FsIGltcGxlbWVudGF0aW9uLAordGhpcyBpcyBkZXRlcm1pbmVkIHdoZW4gdGhlIGNsaWVudCBzZW5kcyAyNTYgJ2hhdmUnIGxpbmVzIHdpdGhvdXQgZ2V0dGluZworYW55IG9mIHRoZW0gQUNLZWQgYnkgdGhlIHNlcnZlciAtIG1lYW5pbmcgdGhlcmUgaXMgbm90aGluZyBpbiBjb21tb24gYW5kCit0aGUgc2VydmVyIHNob3VsZCBqdXN0IHNlbmQgYWxsIG9mIGl0cyBvYmplY3RzKSwgdGhlbiB0aGUgY2xpZW50IHdpbGwgc2VuZAorYSAnZG9uZScgY29tbWFuZC4gIFRoZSAnZG9uZScgY29tbWFuZCBzaWduYWxzIHRvIHRoZSBzZXJ2ZXIgdGhhdCB0aGUgY2xpZW50CitpcyByZWFkeSB0byByZWNlaXZlIGl0cyBwYWNrZmlsZSBkYXRhLgorCitIb3dldmVyLCB0aGUgMjU2IGxpbWl0ICpvbmx5KiB0dXJucyBvbiBpbiB0aGUgY2Fub25pY2FsIGNsaWVudAoraW1wbGVtZW50YXRpb24gaWYgd2UgaGF2ZSByZWNlaXZlZCBhdCBsZWFzdCBvbmUgIkFDSyAlcyBjb250aW51ZSIKK2R1cmluZyBhIHByaW9yIHJvdW5kLiAgVGhpcyBoZWxwcyB0byBlbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgY29tbW9uCithbmNlc3RvciBpcyBmb3VuZCBiZWZvcmUgd2UgZ2l2ZSB1cCBlbnRpcmVseS4KKworT25jZSB0aGUgJ2RvbmUnIGxpbmUgaXMgcmVhZCBmcm9tIHRoZSBjbGllbnQsIHRoZSBzZXJ2ZXIgd2lsbCBlaXRoZXIKK3NlbmQgYSBmaW5hbCAnQUNLIG9iai1pZCcgb3IgaXQgd2lsbCBzZW5kIGEgJ05BSycuICdvYmotaWQnIGlzIHRoZSBvYmplY3QKK25hbWUgb2YgdGhlIGxhc3QgY29tbWl0IGRldGVybWluZWQgdG8gYmUgY29tbW9uLiBUaGUgc2VydmVyIG9ubHkgc2VuZHMKK0FDSyBhZnRlciAnZG9uZScgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNvbW1vbiBiYXNlIGFuZCBtdWx0aV9hY2sgb3IKK211bHRpX2Fja19kZXRhaWxlZCBpcyBlbmFibGVkLiBUaGUgc2VydmVyIGFsd2F5cyBzZW5kcyBOQUsgYWZ0ZXIgJ2RvbmUnCitpZiB0aGVyZSBpcyBubyBjb21tb24gYmFzZSBmb3VuZC4KKworSW5zdGVhZCBvZiAnQUNLJyBvciAnTkFLJywgdGhlIHNlcnZlciBtYXkgc2VuZCBhbiBlcnJvciBtZXNzYWdlIChmb3IKK2V4YW1wbGUsIGlmIGl0IGRvZXMgbm90IHJlY29nbml6ZSBhbiBvYmplY3QgaW4gYSAnd2FudCcgbGluZSByZWNlaXZlZAorZnJvbSB0aGUgY2xpZW50KS4KKworVGhlbiB0aGUgc2VydmVyIHdpbGwgc3RhcnQgc2VuZGluZyBpdHMgcGFja2ZpbGUgZGF0YS4KKworLS0tLQorICBzZXJ2ZXItcmVzcG9uc2UgPSAqYWNrX211bHRpIGFjayAvIG5haworICBhY2tfbXVsdGkgICAgICAgPSBQS1QtTElORSgiQUNLIiBTUCBvYmotaWQgYWNrX3N0YXR1cykKKyAgYWNrX3N0YXR1cyAgICAgID0gImNvbnRpbnVlIiAvICJjb21tb24iIC8gInJlYWR5IgorICBhY2sgICAgICAgICAgICAgPSBQS1QtTElORSgiQUNLIiBTUCBvYmotaWQpCisgIG5hayAgICAgICAgICAgICA9IFBLVC1MSU5FKCJOQUsiKQorLS0tLQorCitBIHNpbXBsZSBjbG9uZSBtYXkgbG9vayBsaWtlIHRoaXMgKHdpdGggbm8gJ2hhdmUnIGxpbmVzKToKKworLS0tLQorICAgQzogMDA1NHdhbnQgNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZCBtdWx0aV9hY2sgXAorICAgICBzaWRlLWJhbmQtNjRrIG9mcy1kZWx0YVxuCisgICBDOiAwMDMyd2FudCA3ZDE2NjUxNDRhM2E5NzVjMDVmMWY0MzkwMmRkYWYwODRlNzg0ZGJlXG4KKyAgIEM6IDAwMzJ3YW50IDVhM2Y2YmU3NTViYmI3ZGVhZTUwMDY1OTg4Y2JmYTFmZmE5YWI2OGFcbgorICAgQzogMDAzMndhbnQgN2U0N2ZlMmJkOGQwMWQ0ODFmNDRkN2FmMDUzMWJkOTNkM2IyMWMwMVxuCisgICBDOiAwMDMyd2FudCA3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkXG4KKyAgIEM6IDAwMDAKKyAgIEM6IDAwMDlkb25lXG4KKworICAgUzogMDAwOE5BS1xuCisgICBTOiBbUEFDS0ZJTEVdCistLS0tCisKK0FuIGluY3JlbWVudGFsIHVwZGF0ZSAoZmV0Y2gpIHJlc3BvbnNlIG1pZ2h0IGxvb2sgbGlrZSB0aGlzOgorCistLS0tCisgICBDOiAwMDU0d2FudCA3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkIG11bHRpX2FjayBcCisgICAgIHNpZGUtYmFuZC02NGsgb2ZzLWRlbHRhXG4KKyAgIEM6IDAwMzJ3YW50IDdkMTY2NTE0NGEzYTk3NWMwNWYxZjQzOTAyZGRhZjA4NGU3ODRkYmVcbgorICAgQzogMDAzMndhbnQgNWEzZjZiZTc1NWJiYjdkZWFlNTAwNjU5ODhjYmZhMWZmYTlhYjY4YVxuCisgICBDOiAwMDAwCisgICBDOiAwMDMyaGF2ZSA3ZTQ3ZmUyYmQ4ZDAxZDQ4MWY0NGQ3YWYwNTMxYmQ5M2QzYjIxYzAxXG4KKyAgIEM6IFszMCBtb3JlIGhhdmUgbGluZXNdCisgICBDOiAwMDMyaGF2ZSA3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkXG4KKyAgIEM6IDAwMDAKKworICAgUzogMDAzYUFDSyA3ZTQ3ZmUyYmQ4ZDAxZDQ4MWY0NGQ3YWYwNTMxYmQ5M2QzYjIxYzAxIGNvbnRpbnVlXG4KKyAgIFM6IDAwM2FBQ0sgNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZCBjb250aW51ZVxuCisgICBTOiAwMDA4TkFLXG4KKworICAgQzogMDAwOWRvbmVcbgorCisgICBTOiAwMDMxQUNLIDc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmRcbgorICAgUzogW1BBQ0tGSUxFXQorLS0tLQorCisKK1BhY2tmaWxlIERhdGEKKy0tLS0tLS0tLS0tLS0KKworTm93IHRoYXQgdGhlIGNsaWVudCBhbmQgc2VydmVyIGhhdmUgZmluaXNoZWQgbmVnb3RpYXRpb24gYWJvdXQgd2hhdAordGhlIG1pbmltYWwgYW1vdW50IG9mIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBzZW50IHRvIHRoZSBjbGllbnQgaXMsIHRoZSBzZXJ2ZXIKK3dpbGwgY29uc3RydWN0IGFuZCBzZW5kIHRoZSByZXF1aXJlZCBkYXRhIGluIHBhY2tmaWxlIGZvcm1hdC4KKworU2VlIHBhY2stZm9ybWF0LnR4dCBmb3Igd2hhdCB0aGUgcGFja2ZpbGUgaXRzZWxmIGFjdHVhbGx5IGxvb2tzIGxpa2UuCisKK0lmICdzaWRlLWJhbmQnIG9yICdzaWRlLWJhbmQtNjRrJyBjYXBhYmlsaXRpZXMgaGF2ZSBiZWVuIHNwZWNpZmllZCBieQordGhlIGNsaWVudCwgdGhlIHNlcnZlciB3aWxsIHNlbmQgdGhlIHBhY2tmaWxlIGRhdGEgbXVsdGlwbGV4ZWQuCisKK0VhY2ggcGFja2V0IHN0YXJ0aW5nIHdpdGggdGhlIHBhY2tldC1saW5lIGxlbmd0aCBvZiB0aGUgYW1vdW50IG9mIGRhdGEKK3RoYXQgZm9sbG93cywgZm9sbG93ZWQgYnkgYSBzaW5nbGUgYnl0ZSBzcGVjaWZ5aW5nIHRoZSBzaWRlYmFuZCB0aGUKK2ZvbGxvd2luZyBkYXRhIGlzIGNvbWluZyBpbiBvbi4KKworSW4gJ3NpZGUtYmFuZCcgbW9kZSwgaXQgd2lsbCBzZW5kIHVwIHRvIDk5OSBkYXRhIGJ5dGVzIHBsdXMgMSBjb250cm9sCitjb2RlLCBmb3IgYSB0b3RhbCBvZiB1cCB0byAxMDAwIGJ5dGVzIGluIGEgcGt0LWxpbmUuICBJbiAnc2lkZS1iYW5kLTY0aycKK21vZGUgaXQgd2lsbCBzZW5kIHVwIHRvIDY1NTE5IGRhdGEgYnl0ZXMgcGx1cyAxIGNvbnRyb2wgY29kZSwgZm9yIGEKK3RvdGFsIG9mIHVwIHRvIDY1NTIwIGJ5dGVzIGluIGEgcGt0LWxpbmUuCisKK1RoZSBzaWRlYmFuZCBieXRlIHdpbGwgYmUgYSAnMScsICcyJyBvciBhICczJy4gU2lkZWJhbmQgJzEnIHdpbGwgY29udGFpbgorcGFja2ZpbGUgZGF0YSwgc2lkZWJhbmQgJzInIHdpbGwgYmUgdXNlZCBmb3IgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gdGhhdCB0aGUKK2NsaWVudCB3aWxsIGdlbmVyYWxseSBwcmludCB0byBzdGRlcnIgYW5kIHNpZGViYW5kICczJyBpcyB1c2VkIGZvciBlcnJvcgoraW5mb3JtYXRpb24uCisKK0lmIG5vICdzaWRlLWJhbmQnIGNhcGFiaWxpdHkgd2FzIHNwZWNpZmllZCwgdGhlIHNlcnZlciB3aWxsIHN0cmVhbSB0aGUKK2VudGlyZSBwYWNrZmlsZSB3aXRob3V0IG11bHRpcGxleGluZy4KKworCitQdXNoaW5nIERhdGEgVG8gYSBTZXJ2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQdXNoaW5nIGRhdGEgdG8gYSBzZXJ2ZXIgd2lsbCBpbnZva2UgdGhlICdyZWNlaXZlLXBhY2snIHByb2Nlc3Mgb24gdGhlCitzZXJ2ZXIsIHdoaWNoIHdpbGwgYWxsb3cgdGhlIGNsaWVudCB0byB0ZWxsIGl0IHdoaWNoIHJlZmVyZW5jZXMgaXQgc2hvdWxkCit1cGRhdGUgYW5kIHRoZW4gc2VuZCBhbGwgdGhlIGRhdGEgdGhlIHNlcnZlciB3aWxsIG5lZWQgZm9yIHRob3NlIG5ldworcmVmZXJlbmNlcyB0byBiZSBjb21wbGV0ZS4gIE9uY2UgYWxsIHRoZSBkYXRhIGlzIHJlY2VpdmVkIGFuZCB2YWxpZGF0ZWQsCit0aGUgc2VydmVyIHdpbGwgdGhlbiB1cGRhdGUgaXRzIHJlZmVyZW5jZXMgdG8gd2hhdCB0aGUgY2xpZW50IHNwZWNpZmllZC4KKworQXV0aGVudGljYXRpb24KKy0tLS0tLS0tLS0tLS0tCisKK1RoZSBwcm90b2NvbCBpdHNlbGYgY29udGFpbnMgbm8gYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcy4gIFRoYXQgaXMgdG8gYmUKK2hhbmRsZWQgYnkgdGhlIHRyYW5zcG9ydCwgc3VjaCBhcyBTU0gsIGJlZm9yZSB0aGUgJ3JlY2VpdmUtcGFjaycgcHJvY2VzcyBpcworaW52b2tlZC4gIElmICdyZWNlaXZlLXBhY2snIGlzIGNvbmZpZ3VyZWQgb3ZlciB0aGUgR2l0IHRyYW5zcG9ydCwgdGhvc2UKK3JlcG9zaXRvcmllcyB3aWxsIGJlIHdyaXRhYmxlIGJ5IGFueW9uZSB3aG8gY2FuIGFjY2VzcyB0aGF0IHBvcnQgKDk0MTgpIGFzCit0aGF0IHRyYW5zcG9ydCBpcyB1bmF1dGhlbnRpY2F0ZWQuCisKK1JlZmVyZW5jZSBEaXNjb3ZlcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHJlZmVyZW5jZSBkaXNjb3ZlcnkgcGhhc2UgaXMgZG9uZSBuZWFybHkgdGhlIHNhbWUgd2F5IGFzIGl0IGlzIGluIHRoZQorZmV0Y2hpbmcgcHJvdG9jb2wuIEVhY2ggcmVmZXJlbmNlIG9iai1pZCBhbmQgbmFtZSBvbiB0aGUgc2VydmVyIGlzIHNlbnQKK2luIHBhY2tldC1saW5lIGZvcm1hdCB0byB0aGUgY2xpZW50LCBmb2xsb3dlZCBieSBhIGZsdXNoLXBrdC4gIFRoZSBvbmx5CityZWFsIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgY2FwYWJpbGl0eSBsaXN0aW5nIGlzIGRpZmZlcmVudCAtIHRoZSBvbmx5Citwb3NzaWJsZSB2YWx1ZXMgYXJlICdyZXBvcnQtc3RhdHVzJywgJ2RlbGV0ZS1yZWZzJywgJ29mcy1kZWx0YScgYW5kCisncHVzaC1vcHRpb25zJy4KKworUmVmZXJlbmNlIFVwZGF0ZSBSZXF1ZXN0IGFuZCBQYWNrZmlsZSBUcmFuc2ZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPbmNlIHRoZSBjbGllbnQga25vd3Mgd2hhdCByZWZlcmVuY2VzIHRoZSBzZXJ2ZXIgaXMgYXQsIGl0IGNhbiBzZW5kIGEKK2xpc3Qgb2YgcmVmZXJlbmNlIHVwZGF0ZSByZXF1ZXN0cy4gIEZvciBlYWNoIHJlZmVyZW5jZSBvbiB0aGUgc2VydmVyCit0aGF0IGl0IHdhbnRzIHRvIHVwZGF0ZSwgaXQgc2VuZHMgYSBsaW5lIGxpc3RpbmcgdGhlIG9iai1pZCBjdXJyZW50bHkgb24KK3RoZSBzZXJ2ZXIsIHRoZSBvYmotaWQgdGhlIGNsaWVudCB3b3VsZCBsaWtlIHRvIHVwZGF0ZSBpdCB0byBhbmQgdGhlIG5hbWUKK29mIHRoZSByZWZlcmVuY2UuCisKK1RoaXMgbGlzdCBpcyBmb2xsb3dlZCBieSBhIGZsdXNoLXBrdC4KKworLS0tLQorICB1cGRhdGUtcmVxdWVzdHMgICA9ICAqc2hhbGxvdyAoIGNvbW1hbmQtbGlzdCB8IHB1c2gtY2VydCApCisKKyAgc2hhbGxvdyAgICAgICAgICAgPSAgUEtULUxJTkUoInNoYWxsb3ciIFNQIG9iai1pZCkKKworICBjb21tYW5kLWxpc3QgICAgICA9ICBQS1QtTElORShjb21tYW5kIE5VTCBjYXBhYmlsaXR5LWxpc3QpCisJCSAgICAgICAqUEtULUxJTkUoY29tbWFuZCkKKwkJICAgICAgIGZsdXNoLXBrdAorCisgIGNvbW1hbmQgICAgICAgICAgID0gIGNyZWF0ZSAvIGRlbGV0ZSAvIHVwZGF0ZQorICBjcmVhdGUgICAgICAgICAgICA9ICB6ZXJvLWlkIFNQIG5ldy1pZCAgU1AgbmFtZQorICBkZWxldGUgICAgICAgICAgICA9ICBvbGQtaWQgIFNQIHplcm8taWQgU1AgbmFtZQorICB1cGRhdGUgICAgICAgICAgICA9ICBvbGQtaWQgIFNQIG5ldy1pZCAgU1AgbmFtZQorCisgIG9sZC1pZCAgICAgICAgICAgID0gIG9iai1pZAorICBuZXctaWQgICAgICAgICAgICA9ICBvYmotaWQKKworICBwdXNoLWNlcnQgICAgICAgICA9IFBLVC1MSU5FKCJwdXNoLWNlcnQiIE5VTCBjYXBhYmlsaXR5LWxpc3QgTEYpCisJCSAgICAgIFBLVC1MSU5FKCJjZXJ0aWZpY2F0ZSB2ZXJzaW9uIDAuMSIgTEYpCisJCSAgICAgIFBLVC1MSU5FKCJwdXNoZXIiIFNQIGlkZW50IExGKQorCQkgICAgICBQS1QtTElORSgicHVzaGVlIiBTUCB1cmwgTEYpCisJCSAgICAgIFBLVC1MSU5FKCJub25jZSIgU1Agbm9uY2UgTEYpCisJCSAgICAgICpQS1QtTElORSgicHVzaC1vcHRpb24iIFNQIHB1c2gtb3B0aW9uIExGKQorCQkgICAgICBQS1QtTElORShMRikKKwkJICAgICAgKlBLVC1MSU5FKGNvbW1hbmQgTEYpCisJCSAgICAgICpQS1QtTElORShncGctc2lnbmF0dXJlLWxpbmVzIExGKQorCQkgICAgICBQS1QtTElORSgicHVzaC1jZXJ0LWVuZCIgTEYpCisKKyAgcHVzaC1vcHRpb24gICAgICAgPSAgMSooIFZDSEFSIHwgU1AgKQorLS0tLQorCitJZiB0aGUgc2VydmVyIGhhcyBhZHZlcnRpc2VkIHRoZSAncHVzaC1vcHRpb25zJyBjYXBhYmlsaXR5IGFuZCB0aGUgY2xpZW50IGhhcworc3BlY2lmaWVkICdwdXNoLW9wdGlvbnMnIGFzIHBhcnQgb2YgdGhlIGNhcGFiaWxpdHkgbGlzdCBhYm92ZSwgdGhlIGNsaWVudCB0aGVuCitzZW5kcyBpdHMgcHVzaCBvcHRpb25zIGZvbGxvd2VkIGJ5IGEgZmx1c2gtcGt0LgorCistLS0tCisgIHB1c2gtb3B0aW9ucyAgICAgID0gICpQS1QtTElORShwdXNoLW9wdGlvbikgZmx1c2gtcGt0CistLS0tCisKK0ZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIEdpdCBzZXJ2ZXJzLCBpZiB0aGUgY2xpZW50IHNlbmRzIGEgcHVzaAorY2VydCBhbmQgcHVzaCBvcHRpb25zLCBpdCBNVVNUIHNlbmQgaXRzIHB1c2ggb3B0aW9ucyBib3RoIGVtYmVkZGVkIHdpdGhpbiB0aGUKK3B1c2ggY2VydCBhbmQgYWZ0ZXIgdGhlIHB1c2ggY2VydC4gKE5vdGUgdGhhdCB0aGUgcHVzaCBvcHRpb25zIHdpdGhpbiB0aGUgY2VydAorYXJlIHByZWZpeGVkLCBidXQgdGhlIHB1c2ggb3B0aW9ucyBhZnRlciB0aGUgY2VydCBhcmUgbm90LikgQm90aCB0aGVzZSBsaXN0cworTVVTVCBiZSB0aGUgc2FtZSwgbW9kdWxvIHRoZSBwcmVmaXguCisKK0FmdGVyIHRoYXQgdGhlIHBhY2tmaWxlIHRoYXQKK3Nob3VsZCBjb250YWluIGFsbCB0aGUgb2JqZWN0cyB0aGF0IHRoZSBzZXJ2ZXIgd2lsbCBuZWVkIHRvIGNvbXBsZXRlIHRoZSBuZXcKK3JlZmVyZW5jZXMgd2lsbCBiZSBzZW50LgorCistLS0tCisgIHBhY2tmaWxlICAgICAgICAgID0gICJQQUNLIiAyOCooT0NURVQpCistLS0tCisKK0lmIHRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgZGVsZXRlLXJlZnMsIHRoZSBzZW5kaW5nIGVuZCBNVVNUCitOT1QgYXNrIGZvciBkZWxldGUgY29tbWFuZC4KKworSWYgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBwdXNoLWNlcnQsIHRoZSBzZW5kaW5nIGVuZAorTVVTVCBOT1Qgc2VuZCBhIHB1c2gtY2VydCBjb21tYW5kLiAgV2hlbiBhIHB1c2gtY2VydCBjb21tYW5kIGlzCitzZW50LCBjb21tYW5kLWxpc3QgTVVTVCBOT1QgYmUgc2VudDsgdGhlIGNvbW1hbmRzIHJlY29yZGVkIGluIHRoZQorcHVzaCBjZXJ0aWZpY2F0ZSBpcyB1c2VkIGluc3RlYWQuCisKK1RoZSBwYWNrZmlsZSBNVVNUIE5PVCBiZSBzZW50IGlmIHRoZSBvbmx5IGNvbW1hbmQgdXNlZCBpcyAnZGVsZXRlJy4KKworQSBwYWNrZmlsZSBNVVNUIGJlIHNlbnQgaWYgZWl0aGVyIGNyZWF0ZSBvciB1cGRhdGUgY29tbWFuZCBpcyB1c2VkLAorZXZlbiBpZiB0aGUgc2VydmVyIGFscmVhZHkgaGFzIGFsbCB0aGUgbmVjZXNzYXJ5IG9iamVjdHMuICBJbiB0aGlzCitjYXNlIHRoZSBjbGllbnQgTVVTVCBzZW5kIGFuIGVtcHR5IHBhY2tmaWxlLiAgIFRoZSBvbmx5IHRpbWUgdGhpcworaXMgbGlrZWx5IHRvIGhhcHBlbiBpcyBpZiB0aGUgY2xpZW50IGlzIGNyZWF0aW5nCithIG5ldyBicmFuY2ggb3IgYSB0YWcgdGhhdCBwb2ludHMgdG8gYW4gZXhpc3Rpbmcgb2JqLWlkLgorCitUaGUgc2VydmVyIHdpbGwgcmVjZWl2ZSB0aGUgcGFja2ZpbGUsIHVucGFjayBpdCwgdGhlbiB2YWxpZGF0ZSBlYWNoCityZWZlcmVuY2UgdGhhdCBpcyBiZWluZyB1cGRhdGVkIHRoYXQgaXQgaGFzbid0IGNoYW5nZWQgd2hpbGUgdGhlIHJlcXVlc3QKK3dhcyBiZWluZyBwcm9jZXNzZWQgKHRoZSBvYmotaWQgaXMgc3RpbGwgdGhlIHNhbWUgYXMgdGhlIG9sZC1pZCksIGFuZAoraXQgd2lsbCBydW4gYW55IHVwZGF0ZSBob29rcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdXBkYXRlIGlzIGFjY2VwdGFibGUuCitJZiBhbGwgb2YgdGhhdCBpcyBmaW5lLCB0aGUgc2VydmVyIHdpbGwgdGhlbiB1cGRhdGUgdGhlIHJlZmVyZW5jZXMuCisKK1B1c2ggQ2VydGlmaWNhdGUKKy0tLS0tLS0tLS0tLS0tLS0KKworQSBwdXNoIGNlcnRpZmljYXRlIGJlZ2lucyB3aXRoIGEgc2V0IG9mIGhlYWRlciBsaW5lcy4gIEFmdGVyIHRoZQoraGVhZGVyIGFuZCBhbiBlbXB0eSBsaW5lLCB0aGUgcHJvdG9jb2wgY29tbWFuZHMgZm9sbG93LCBvbmUgcGVyCitsaW5lLiBOb3RlIHRoYXQgdGhlIHRyYWlsaW5nIExGIGluIHB1c2gtY2VydCBQS1QtTElORXMgaXMgX25vdF8KK29wdGlvbmFsOyBpdCBtdXN0IGJlIHByZXNlbnQuCisKK0N1cnJlbnRseSwgdGhlIGZvbGxvd2luZyBoZWFkZXIgZmllbGRzIGFyZSBkZWZpbmVkOgorCitgcHVzaGVyYCBpZGVudDo6CisJSWRlbnRpZnkgdGhlIEdQRyBrZXkgaW4gIkh1bWFuIFJlYWRhYmxlIE5hbWUgPGVtYWlsQGFkZHJlc3M+IgorCWZvcm1hdC4KKworYHB1c2hlZWAgdXJsOjoKKwlUaGUgcmVwb3NpdG9yeSBVUkwgKGFub255bWl6ZWQsIGlmIHRoZSBVUkwgY29udGFpbnMKKwlhdXRoZW50aWNhdGlvbiBtYXRlcmlhbCkgdGhlIHVzZXIgd2hvIHJhbiBgZ2l0IHB1c2hgCisJaW50ZW5kZWQgdG8gcHVzaCBpbnRvLgorCitgbm9uY2VgIG5vbmNlOjoKKwlUaGUgJ25vbmNlJyBzdHJpbmcgdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5IGFza2VkIHRoZQorCXB1c2hpbmcgdXNlciB0byBpbmNsdWRlIGluIHRoZSBjZXJ0aWZpY2F0ZSwgdG8gcHJldmVudAorCXJlcGxheSBhdHRhY2tzLgorCitUaGUgR1BHIHNpZ25hdHVyZSBsaW5lcyBhcmUgYSBkZXRhY2hlZCBzaWduYXR1cmUgZm9yIHRoZSBjb250ZW50cworcmVjb3JkZWQgaW4gdGhlIHB1c2ggY2VydGlmaWNhdGUgYmVmb3JlIHRoZSBzaWduYXR1cmUgYmxvY2sgYmVnaW5zLgorVGhlIGRldGFjaGVkIHNpZ25hdHVyZSBpcyB1c2VkIHRvIGNlcnRpZnkgdGhhdCB0aGUgY29tbWFuZHMgd2VyZQorZ2l2ZW4gYnkgdGhlIHB1c2hlciwgd2hvIG11c3QgYmUgdGhlIHNpZ25lci4KKworUmVwb3J0IFN0YXR1cworLS0tLS0tLS0tLS0tLQorCitBZnRlciByZWNlaXZpbmcgdGhlIHBhY2sgZGF0YSBmcm9tIHRoZSBzZW5kZXIsIHRoZSByZWNlaXZlciBzZW5kcyBhCityZXBvcnQgaWYgJ3JlcG9ydC1zdGF0dXMnIGNhcGFiaWxpdHkgaXMgaW4gZWZmZWN0LgorSXQgaXMgYSBzaG9ydCBsaXN0aW5nIG9mIHdoYXQgaGFwcGVuZWQgaW4gdGhhdCB1cGRhdGUuICBJdCB3aWxsIGZpcnN0CitsaXN0IHRoZSBzdGF0dXMgb2YgdGhlIHBhY2tmaWxlIHVucGFja2luZyBhcyBlaXRoZXIgJ3VucGFjayBvaycgb3IKKyd1bnBhY2sgW2Vycm9yXScuICBUaGVuIGl0IHdpbGwgbGlzdCB0aGUgc3RhdHVzIGZvciBlYWNoIG9mIHRoZSByZWZlcmVuY2VzCit0aGF0IGl0IHRyaWVkIHRvIHVwZGF0ZS4gIEVhY2ggbGluZSBpcyBlaXRoZXIgJ29rIFtyZWZuYW1lXScgaWYgdGhlCit1cGRhdGUgd2FzIHN1Y2Nlc3NmdWwsIG9yICduZyBbcmVmbmFtZV0gW2Vycm9yXScgaWYgdGhlIHVwZGF0ZSB3YXMgbm90LgorCistLS0tCisgIHJlcG9ydC1zdGF0dXMgICAgID0gdW5wYWNrLXN0YXR1cworCQkgICAgICAxKihjb21tYW5kLXN0YXR1cykKKwkJICAgICAgZmx1c2gtcGt0CisKKyAgdW5wYWNrLXN0YXR1cyAgICAgPSBQS1QtTElORSgidW5wYWNrIiBTUCB1bnBhY2stcmVzdWx0KQorICB1bnBhY2stcmVzdWx0ICAgICA9ICJvayIgLyBlcnJvci1tc2cKKworICBjb21tYW5kLXN0YXR1cyAgICA9IGNvbW1hbmQtb2sgLyBjb21tYW5kLWZhaWwKKyAgY29tbWFuZC1vayAgICAgICAgPSBQS1QtTElORSgib2siIFNQIHJlZm5hbWUpCisgIGNvbW1hbmQtZmFpbCAgICAgID0gUEtULUxJTkUoIm5nIiBTUCByZWZuYW1lIFNQIGVycm9yLW1zZykKKworICBlcnJvci1tc2cgICAgICAgICA9IDEqKE9DVEVUKSA7IHdoZXJlIG5vdCAib2siCistLS0tCisKK1VwZGF0ZXMgY2FuIGJlIHVuc3VjY2Vzc2Z1bCBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIFRoZSByZWZlcmVuY2UgY2FuIGhhdmUKK2NoYW5nZWQgc2luY2UgdGhlIHJlZmVyZW5jZSBkaXNjb3ZlcnkgcGhhc2Ugd2FzIG9yaWdpbmFsbHkgc2VudCwgbWVhbmluZworc29tZW9uZSBwdXNoZWQgaW4gdGhlIG1lYW50aW1lLiAgVGhlIHJlZmVyZW5jZSBiZWluZyBwdXNoZWQgY291bGQgYmUgYQorbm9uLWZhc3QtZm9yd2FyZCByZWZlcmVuY2UgYW5kIHRoZSB1cGRhdGUgaG9va3Mgb3IgY29uZmlndXJhdGlvbiBjb3VsZCBiZQorc2V0IHRvIG5vdCBhbGxvdyB0aGF0LCBldGMuICBBbHNvLCBzb21lIHJlZmVyZW5jZXMgY2FuIGJlIHVwZGF0ZWQgd2hpbGUgb3RoZXJzCitjYW4gYmUgcmVqZWN0ZWQuCisKK0FuIGV4YW1wbGUgY2xpZW50L3NlcnZlciBjb21tdW5pY2F0aW9uIG1pZ2h0IGxvb2sgbGlrZSB0aGlzOgorCistLS0tCisgICBTOiAwMDYyNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZCByZWZzL2hlYWRzL2xvY2FsXDByZXBvcnQtc3RhdHVzIGRlbGV0ZS1yZWZzIG9mcy1kZWx0YVxuCisgICBTOiAwMDNlN2QxNjY1MTQ0YTNhOTc1YzA1ZjFmNDM5MDJkZGFmMDg0ZTc4NGRiZSByZWZzL2hlYWRzL2RlYnVnXG4KKyAgIFM6IDAwM2Y3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkIHJlZnMvaGVhZHMvbWFzdGVyXG4KKyAgIFM6IDAwM2Q3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkIHJlZnMvaGVhZHMvdGVhbVxuCisgICBTOiAwMDAwCisKKyAgIEM6IDAwNjc3ZDE2NjUxNDRhM2E5NzVjMDVmMWY0MzkwMmRkYWYwODRlNzg0ZGJlIDc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmQgcmVmcy9oZWFkcy9kZWJ1Z1xuCisgICBDOiAwMDY4NzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZCA1YTNmNmJlNzU1YmJiN2RlYWU1MDA2NTk4OGNiZmExZmZhOWFiNjhhIHJlZnMvaGVhZHMvbWFzdGVyXG4KKyAgIEM6IDAwMDAKKyAgIEM6IFtQQUNLREFUQV0KKworICAgUzogMDAwZXVucGFjayBva1xuCisgICBTOiAwMDE4b2sgcmVmcy9oZWFkcy9kZWJ1Z1xuCisgICBTOiAwMDJhbmcgcmVmcy9oZWFkcy9tYXN0ZXIgbm9uLWZhc3QtZm9yd2FyZFxuCistLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYXJ0aWFsLWNsb25lLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhcnRpYWwtY2xvbmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZTE3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYXJ0aWFsLWNsb25lLnR4dApAQCAtMCwwICsxLDM3NSBAQAorUGFydGlhbCBDbG9uZSBEZXNpZ24gTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSAiUGFydGlhbCBDbG9uZSIgZmVhdHVyZSBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBmb3IgR2l0IHRoYXQKK2FsbG93cyBHaXQgdG8gZnVuY3Rpb24gd2l0aG91dCBoYXZpbmcgYSBjb21wbGV0ZSBjb3B5IG9mIHRoZSByZXBvc2l0b3J5LgorVGhlIGdvYWwgb2YgdGhpcyB3b3JrIGlzIHRvIGFsbG93IEdpdCBiZXR0ZXIgaGFuZGxlIGV4dHJlbWVseSBsYXJnZQorcmVwb3NpdG9yaWVzLgorCitEdXJpbmcgY2xvbmUgYW5kIGZldGNoIG9wZXJhdGlvbnMsIEdpdCBkb3dubG9hZHMgdGhlIGNvbXBsZXRlIGNvbnRlbnRzCithbmQgaGlzdG9yeSBvZiB0aGUgcmVwb3NpdG9yeS4gIFRoaXMgaW5jbHVkZXMgYWxsIGNvbW1pdHMsIHRyZWVzLCBhbmQKK2Jsb2JzIGZvciB0aGUgY29tcGxldGUgbGlmZSBvZiB0aGUgcmVwb3NpdG9yeS4gIEZvciBleHRyZW1lbHkgbGFyZ2UKK3JlcG9zaXRvcmllcywgY2xvbmVzIGNhbiB0YWtlIGhvdXJzIChvciBkYXlzKSBhbmQgY29uc3VtZSAxMDArR2lCIG9mIGRpc2sKK3NwYWNlLgorCitPZnRlbiBpbiB0aGVzZSByZXBvc2l0b3JpZXMgdGhlcmUgYXJlIG1hbnkgYmxvYnMgYW5kIHRyZWVzIHRoYXQgdGhlIHVzZXIKK2RvZXMgbm90IG5lZWQgc3VjaCBhczoKKworICAxLiBmaWxlcyBvdXRzaWRlIG9mIHRoZSB1c2VyJ3Mgd29yayBhcmVhIGluIHRoZSB0cmVlLiAgRm9yIGV4YW1wbGUsIGluCisgICAgIGEgcmVwb3NpdG9yeSB3aXRoIDUwMEsgZGlyZWN0b3JpZXMgYW5kIDMuNU0gZmlsZXMgaW4gZXZlcnkgY29tbWl0LAorICAgICB3ZSBjYW4gYXZvaWQgZG93bmxvYWRpbmcgbWFueSBvYmplY3RzIGlmIHRoZSB1c2VyIG9ubHkgbmVlZHMgYQorICAgICBuYXJyb3cgImNvbmUiIG9mIHRoZSBzb3VyY2UgdHJlZS4KKworICAyLiBsYXJnZSBiaW5hcnkgYXNzZXRzLiAgRm9yIGV4YW1wbGUsIGluIGEgcmVwb3NpdG9yeSB3aGVyZSBsYXJnZSBidWlsZAorICAgICBhcnRpZmFjdHMgYXJlIGNoZWNrZWQgaW50byB0aGUgdHJlZSwgd2UgY2FuIGF2b2lkIGRvd25sb2FkaW5nIGFsbAorICAgICBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGVzZSBub24tbWVyZ2VhYmxlIGJpbmFyeSBhc3NldHMgYW5kIG9ubHkKKyAgICAgZG93bmxvYWQgdmVyc2lvbnMgdGhhdCBhcmUgYWN0dWFsbHkgcmVmZXJlbmNlZC4KKworUGFydGlhbCBjbG9uZSBhbGxvd3MgdXMgdG8gYXZvaWQgZG93bmxvYWRpbmcgc3VjaCB1bm5lZWRlZCBvYmplY3RzICppbgorYWR2YW5jZSogZHVyaW5nIGNsb25lIGFuZCBmZXRjaCBvcGVyYXRpb25zIGFuZCB0aGVyZWJ5IHJlZHVjZSBkb3dubG9hZAordGltZXMgYW5kIGRpc2sgdXNhZ2UuICBNaXNzaW5nIG9iamVjdHMgY2FuIGxhdGVyIGJlICJkZW1hbmQgZmV0Y2hlZCIKK2lmL3doZW4gbmVlZGVkLgorCitBIHJlbW90ZSB0aGF0IGNhbiBsYXRlciBwcm92aWRlIHRoZSBtaXNzaW5nIG9iamVjdHMgaXMgY2FsbGVkIGEKK3Byb21pc29yIHJlbW90ZSwgYXMgaXQgcHJvbWlzZXMgdG8gc2VuZCB0aGUgb2JqZWN0cyB3aGVuCityZXF1ZXN0ZWQuIEluaXRpYWxseSBHaXQgc3VwcG9ydGVkIG9ubHkgb25lIHByb21pc29yIHJlbW90ZSwgdGhlIG9yaWdpbgorcmVtb3RlIGZyb20gd2hpY2ggdGhlIHVzZXIgY2xvbmVkIGFuZCB0aGF0IHdhcyBjb25maWd1cmVkIGluIHRoZQorImV4dGVuc2lvbnMucGFydGlhbENsb25lIiBjb25maWcgb3B0aW9uLiBMYXRlciBzdXBwb3J0IGZvciBtb3JlIHRoYW4KK29uZSBwcm9taXNvciByZW1vdGUgaGFzIGJlZW4gaW1wbGVtZW50ZWQuCisKK1VzZSBvZiBwYXJ0aWFsIGNsb25lIHJlcXVpcmVzIHRoYXQgdGhlIHVzZXIgYmUgb25saW5lIGFuZCB0aGUgb3JpZ2luCityZW1vdGUgb3Igb3RoZXIgcHJvbWlzb3IgcmVtb3RlcyBiZSBhdmFpbGFibGUgZm9yIG9uLWRlbWFuZCBmZXRjaGluZworb2YgbWlzc2luZyBvYmplY3RzLiAgVGhpcyBtYXkgb3IgbWF5IG5vdCBiZSBwcm9ibGVtYXRpYyBmb3IgdGhlIHVzZXIuCitGb3IgZXhhbXBsZSwgaWYgdGhlIHVzZXIgY2FuIHN0YXkgd2l0aGluIHRoZSBwcmUtc2VsZWN0ZWQgc3Vic2V0IG9mCit0aGUgc291cmNlIHRyZWUsIHRoZXkgbWF5IG5vdCBlbmNvdW50ZXIgYW55IG1pc3Npbmcgb2JqZWN0cy4KK0FsdGVybmF0aXZlbHksIHRoZSB1c2VyIGNvdWxkIHRyeSB0byBwcmUtZmV0Y2ggdmFyaW91cyBvYmplY3RzIGlmIHRoZXkKK2tub3cgdGhhdCB0aGV5IGFyZSBnb2luZyBvZmZsaW5lLgorCisKK05vbi1Hb2FscworLS0tLS0tLS0tCisKK1BhcnRpYWwgY2xvbmUgaXMgYSBtZWNoYW5pc20gdG8gbGltaXQgdGhlIG51bWJlciBvZiBibG9icyBhbmQgdHJlZXMgZG93bmxvYWRlZAorKndpdGhpbiogYSBnaXZlbiByYW5nZSBvZiBjb21taXRzIC0tIGFuZCBpcyB0aGVyZWZvcmUgaW5kZXBlbmRlbnQgb2YgYW5kIG5vdAoraW50ZW5kZWQgdG8gY29uZmxpY3Qgd2l0aCBleGlzdGluZyBEQUctbGV2ZWwgbWVjaGFuaXNtcyB0byBsaW1pdCB0aGUgc2V0IG9mCityZXF1ZXN0ZWQgY29tbWl0cyAoaS5lLiBzaGFsbG93IGNsb25lLCBzaW5nbGUgYnJhbmNoLCBvciBmZXRjaCAnPHJlZnNwZWM+JykuCisKKworRGVzaWduIE92ZXJ2aWV3CistLS0tLS0tLS0tLS0tLS0KKworUGFydGlhbCBjbG9uZSBsb2dpY2FsbHkgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBwYXJ0czoKKworLSBBIG1lY2hhbmlzbSBmb3IgdGhlIGNsaWVudCB0byBkZXNjcmliZSB1bm5lZWRlZCBvciB1bndhbnRlZCBvYmplY3RzIHRvCisgIHRoZSBzZXJ2ZXIuCisKKy0gQSBtZWNoYW5pc20gZm9yIHRoZSBzZXJ2ZXIgdG8gb21pdCBzdWNoIHVud2FudGVkIG9iamVjdHMgZnJvbSBwYWNrZmlsZXMKKyAgc2VudCB0byB0aGUgY2xpZW50LgorCistIEEgbWVjaGFuaXNtIGZvciB0aGUgY2xpZW50IHRvIGdyYWNlZnVsbHkgaGFuZGxlIG1pc3Npbmcgb2JqZWN0cyAodGhhdAorICB3ZXJlIHByZXZpb3VzbHkgb21pdHRlZCBieSB0aGUgc2VydmVyKS4KKworLSBBIG1lY2hhbmlzbSBmb3IgdGhlIGNsaWVudCB0byBiYWNrZmlsbCBtaXNzaW5nIG9iamVjdHMgYXMgbmVlZGVkLgorCisKK0Rlc2lnbiBEZXRhaWxzCistLS0tLS0tLS0tLS0tLQorCistIEEgbmV3IHBhY2stcHJvdG9jb2wgY2FwYWJpbGl0eSAiZmlsdGVyIiBpcyBhZGRlZCB0byB0aGUgZmV0Y2gtcGFjayBhbmQKKyAgdXBsb2FkLXBhY2sgbmVnb3RpYXRpb24uCisrCitUaGlzIHVzZXMgdGhlIGV4aXN0aW5nIGNhcGFiaWxpdHkgZGlzY292ZXJ5IG1lY2hhbmlzbS4KK1NlZSAiZmlsdGVyIiBpbiBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLXByb3RvY29sLnR4dC4KKworLSBDbGllbnRzIHBhc3MgYSAiZmlsdGVyLXNwZWMiIHRvIGNsb25lIGFuZCBmZXRjaCB3aGljaCBpcyBwYXNzZWQgdG8gdGhlCisgIHNlcnZlciB0byByZXF1ZXN0IGZpbHRlcmluZyBkdXJpbmcgcGFja2ZpbGUgY29uc3RydWN0aW9uLgorKworVGhlcmUgYXJlIHZhcmlvdXMgZmlsdGVycyBhdmFpbGFibGUgdG8gYWNjb21tb2RhdGUgZGlmZmVyZW50IHNpdHVhdGlvbnMuCitTZWUgIi0tZmlsdGVyPTxmaWx0ZXItc3BlYz4iIGluIERvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQuCisKKy0gT24gdGhlIHNlcnZlciBwYWNrLW9iamVjdHMgYXBwbGllcyB0aGUgcmVxdWVzdGVkIGZpbHRlci1zcGVjIGFzIGl0CisgIGNyZWF0ZXMgImZpbHRlcmVkIiBwYWNrZmlsZXMgZm9yIHRoZSBjbGllbnQuCisrCitUaGVzZSBmaWx0ZXJlZCBwYWNrZmlsZXMgYXJlICppbmNvbXBsZXRlKiBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UgYmVjYXVzZQordGhleSBtYXkgY29udGFpbiBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIG9iamVjdHMgbm90IGNvbnRhaW5lZCBpbiB0aGUKK3BhY2tmaWxlIGFuZCB0aGF0IHRoZSBjbGllbnQgZG9lc24ndCBhbHJlYWR5IGhhdmUuICBGb3IgZXhhbXBsZSwgdGhlCitmaWx0ZXJlZCBwYWNrZmlsZSBtYXkgY29udGFpbiB0cmVlcyBvciB0YWdzIHRoYXQgcmVmZXJlbmNlIG1pc3NpbmcgYmxvYnMKK29yIGNvbW1pdHMgdGhhdCByZWZlcmVuY2UgbWlzc2luZyB0cmVlcy4KKworLSBPbiB0aGUgY2xpZW50IHRoZXNlIGluY29tcGxldGUgcGFja2ZpbGVzIGFyZSBtYXJrZWQgYXMgInByb21pc29yIHBhY2tmaWxlcyIKKyAgYW5kIHRyZWF0ZWQgZGlmZmVyZW50bHkgYnkgdmFyaW91cyBjb21tYW5kcy4KKworLSBPbiB0aGUgY2xpZW50IGEgcmVwb3NpdG9yeSBleHRlbnNpb24gaXMgYWRkZWQgdG8gdGhlIGxvY2FsIGNvbmZpZyB0bworICBwcmV2ZW50IG9sZGVyIHZlcnNpb25zIG9mIGdpdCBmcm9tIGZhaWxpbmcgbWlkLW9wZXJhdGlvbiBiZWNhdXNlIG9mCisgIG1pc3Npbmcgb2JqZWN0cyB0aGF0IHRoZXkgY2Fubm90IGhhbmRsZS4KKyAgU2VlICJleHRlbnNpb25zLnBhcnRpYWxDbG9uZSIgaW4gRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmVwb3NpdG9yeS12ZXJzaW9uLnR4dCIKKworCitIYW5kbGluZyBNaXNzaW5nIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIEFuIG9iamVjdCBtYXkgYmUgbWlzc2luZyBkdWUgdG8gYSBwYXJ0aWFsIGNsb25lIG9yIGZldGNoLCBvciBtaXNzaW5nCisgIGR1ZSB0byByZXBvc2l0b3J5IGNvcnJ1cHRpb24uICBUbyBkaWZmZXJlbnRpYXRlIHRoZXNlIGNhc2VzLCB0aGUKKyAgbG9jYWwgcmVwb3NpdG9yeSBzcGVjaWFsbHkgaW5kaWNhdGVzIHN1Y2ggZmlsdGVyZWQgcGFja2ZpbGVzCisgIG9idGFpbmVkIGZyb20gcHJvbWlzb3IgcmVtb3RlcyBhcyAicHJvbWlzb3IgcGFja2ZpbGVzIi4KKysKK1RoZXNlIHByb21pc29yIHBhY2tmaWxlcyBjb25zaXN0IG9mIGEgIjxuYW1lPi5wcm9taXNvciIgZmlsZSB3aXRoCithcmJpdHJhcnkgY29udGVudHMgKGxpa2UgdGhlICI8bmFtZT4ua2VlcCIgZmlsZXMpLCBpbiBhZGRpdGlvbiB0bwordGhlaXIgIjxuYW1lPi5wYWNrIiBhbmQgIjxuYW1lPi5pZHgiIGZpbGVzLgorCistIFRoZSBsb2NhbCByZXBvc2l0b3J5IGNvbnNpZGVycyBhICJwcm9taXNvciBvYmplY3QiIHRvIGJlIGFuIG9iamVjdCB0aGF0CisgIGl0IGtub3dzICh0byB0aGUgYmVzdCBvZiBpdHMgYWJpbGl0eSkgdGhhdCBwcm9taXNvciByZW1vdGVzIGhhdmUgcHJvbWlzZWQKKyAgdGhhdCB0aGV5IGhhdmUsIGVpdGhlciBiZWNhdXNlIHRoZSBsb2NhbCByZXBvc2l0b3J5IGhhcyB0aGF0IG9iamVjdCBpbiBvbmUgb2YKKyAgaXRzIHByb21pc29yIHBhY2tmaWxlcywgb3IgYmVjYXVzZSBhbm90aGVyIHByb21pc29yIG9iamVjdCByZWZlcnMgdG8gaXQuCisrCitXaGVuIEdpdCBlbmNvdW50ZXJzIGEgbWlzc2luZyBvYmplY3QsIEdpdCBjYW4gc2VlIGlmIGl0IGlzIGEgcHJvbWlzb3Igb2JqZWN0CithbmQgaGFuZGxlIGl0IGFwcHJvcHJpYXRlbHkuICBJZiBub3QsIEdpdCBjYW4gcmVwb3J0IGEgY29ycnVwdGlvbi4KKysKK1RoaXMgbWVhbnMgdGhhdCB0aGVyZSBpcyBubyBuZWVkIGZvciB0aGUgY2xpZW50IHRvIGV4cGxpY2l0bHkgbWFpbnRhaW4gYW4KK2V4cGVuc2l2ZS10by1tb2RpZnkgbGlzdCBvZiBtaXNzaW5nIG9iamVjdHMuW2FdCisKKy0gU2luY2UgYWxtb3N0IGFsbCBHaXQgY29kZSBjdXJyZW50bHkgZXhwZWN0cyBhbnkgcmVmZXJlbmNlZCBvYmplY3QgdG8gYmUKKyAgcHJlc2VudCBsb2NhbGx5IGFuZCBiZWNhdXNlIHdlIGRvIG5vdCB3YW50IHRvIGZvcmNlIGV2ZXJ5IGNvbW1hbmQgdG8gZG8KKyAgYSBkcnktcnVuIGZpcnN0LCBhIGZhbGxiYWNrIG1lY2hhbmlzbSBpcyBhZGRlZCB0byBhbGxvdyBHaXQgdG8gYXR0ZW1wdAorICB0byBkeW5hbWljYWxseSBmZXRjaCBtaXNzaW5nIG9iamVjdHMgZnJvbSBwcm9taXNvciByZW1vdGVzLgorKworV2hlbiB0aGUgbm9ybWFsIG9iamVjdCBsb29rdXAgZmFpbHMgdG8gZmluZCBhbiBvYmplY3QsIEdpdCBpbnZva2VzCitwcm9taXNvcl9yZW1vdGVfZ2V0X2RpcmVjdCgpIHRvIHRyeSB0byBnZXQgdGhlIG9iamVjdCBmcm9tIGEgcHJvbWlzb3IKK3JlbW90ZSBhbmQgdGhlbiByZXRyeSB0aGUgb2JqZWN0IGxvb2t1cC4gIFRoaXMgYWxsb3dzIG9iamVjdHMgdG8gYmUKKyJmYXVsdGVkIGluIiB3aXRob3V0IGNvbXBsaWNhdGVkIHByZWRpY3Rpb24gYWxnb3JpdGhtcy4KKysKK0ZvciBlZmZpY2llbmN5IHJlYXNvbnMsIG5vIGNoZWNrIGFzIHRvIHdoZXRoZXIgdGhlIG1pc3Npbmcgb2JqZWN0IGlzCithY3R1YWxseSBhIHByb21pc29yIG9iamVjdCBpcyBwZXJmb3JtZWQuCisrCitEeW5hbWljIG9iamVjdCBmZXRjaGluZyB0ZW5kcyB0byBiZSBzbG93IGFzIG9iamVjdHMgYXJlIGZldGNoZWQgb25lIGF0CithIHRpbWUuCisKKy0gYGNoZWNrb3V0YCAoYW5kIGFueSBvdGhlciBjb21tYW5kIHVzaW5nIGB1bnBhY2stdHJlZXNgKSBoYXMgYmVlbiB0YXVnaHQKKyAgdG8gYnVsayBwcmUtZmV0Y2ggYWxsIHJlcXVpcmVkIG1pc3NpbmcgYmxvYnMgaW4gYSBzaW5nbGUgYmF0Y2guCisKKy0gYHJldi1saXN0YCBoYXMgYmVlbiB0YXVnaHQgdG8gcHJpbnQgbWlzc2luZyBvYmplY3RzLgorKworVGhpcyBjYW4gYmUgdXNlZCBieSBvdGhlciBjb21tYW5kcyB0byBidWxrIHByZWZldGNoIG9iamVjdHMuCitGb3IgZXhhbXBsZSwgYSAiZ2l0IGxvZyAtcCBBLi5CIiBtYXkgaW50ZXJuYWxseSB3YW50IHRvIGZpcnN0IGRvCitzb21ldGhpbmcgbGlrZSAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLXF1aWV0IC0tbWlzc2luZz1wcmludCBBLi5CIgorYW5kIHByZWZldGNoIHRob3NlIG9iamVjdHMgaW4gYnVsay4KKworLSBgZnNja2AgaGFzIGJlZW4gdXBkYXRlZCB0byBiZSBmdWxseSBhd2FyZSBvZiBwcm9taXNvciBvYmplY3RzLgorCistIGByZXBhY2tgIGluIEdDIGhhcyBiZWVuIHVwZGF0ZWQgdG8gbm90IHRvdWNoIHByb21pc29yIHBhY2tmaWxlcyBhdCBhbGwsCisgIGFuZCB0byBvbmx5IHJlcGFjayBvdGhlciBvYmplY3RzLgorCistIFRoZSBnbG9iYWwgdmFyaWFibGUgImZldGNoX2lmX21pc3NpbmciIGlzIHVzZWQgdG8gY29udHJvbCB3aGV0aGVyIGFuCisgIG9iamVjdCBsb29rdXAgd2lsbCBhdHRlbXB0IHRvIGR5bmFtaWNhbGx5IGZldGNoIGEgbWlzc2luZyBvYmplY3Qgb3IKKyAgcmVwb3J0IGFuIGVycm9yLgorKworV2UgYXJlIG5vdCBoYXBweSB3aXRoIHRoaXMgZ2xvYmFsIHZhcmlhYmxlIGFuZCB3b3VsZCBsaWtlIHRvIHJlbW92ZSBpdCwKK2J1dCB0aGF0IHJlcXVpcmVzIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIHRoZSBvYmplY3QgY29kZSB0byBwYXNzIGFuCithZGRpdGlvbmFsIGZsYWcuCisKKworRmV0Y2hpbmcgTWlzc2luZyBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLSBGZXRjaGluZyBvZiBvYmplY3RzIGlzIGRvbmUgdXNpbmcgdGhlIGV4aXN0aW5nIHRyYW5zcG9ydCBtZWNoYW5pc20gdXNpbmcKKyAgdHJhbnNwb3J0X2ZldGNoX3JlZnMoKSwgc2V0dGluZyBhIG5ldyB0cmFuc3BvcnQgb3B0aW9uCisgIFRSQU5TX09QVF9OT19ERVBFTkRFTlRTIHRvIGluZGljYXRlIHRoYXQgb25seSB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzIGFyZQorICBkZXNpcmVkLCBub3QgYW55IG9iamVjdCB0aGF0IHRoZXkgcmVmZXIgdG8uCisrCitCZWNhdXNlIHNvbWUgdHJhbnNwb3J0cyBpbnZva2UgZmV0Y2hfcGFjaygpIGluIHRoZSBzYW1lIHByb2Nlc3MsIGZldGNoX3BhY2soKQoraGFzIGJlZW4gdXBkYXRlZCB0byBub3QgdXNlIGFueSBvYmplY3QgZmxhZ3Mgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudAorKG5vX2RlcGVuZGVudHMpIGlzIHNldC4KKworLSBUaGUgbG9jYWwgcmVwb3NpdG9yeSBzZW5kcyBhIHJlcXVlc3Qgd2l0aCB0aGUgaGFzaGVzIG9mIGFsbCByZXF1ZXN0ZWQKKyAgb2JqZWN0cyBhcyAid2FudCIgbGluZXMsIGFuZCBkb2VzIG5vdCBwZXJmb3JtIGFueSBwYWNrZmlsZSBuZWdvdGlhdGlvbi4KKyAgSXQgdGhlbiByZWNlaXZlcyBhIHBhY2tmaWxlLgorCistIEJlY2F1c2Ugd2UgYXJlIHJldXNpbmcgdGhlIGV4aXN0aW5nIGZldGNoLXBhY2sgbWVjaGFuaXNtLCBmZXRjaGluZworICBjdXJyZW50bHkgZmV0Y2hlcyBhbGwgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgcmVxdWVzdGVkIG9iamVjdHMsIGV2ZW4KKyAgdGhvdWdoIHRoZXkgYXJlIG5vdCBuZWNlc3NhcnkuCisKKworVXNpbmcgbWFueSBwcm9taXNvciByZW1vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFueSBwcm9taXNvciByZW1vdGVzIGNhbiBiZSBjb25maWd1cmVkIGFuZCB1c2VkLgorCitUaGlzIGFsbG93cyBmb3IgZXhhbXBsZSBhIHVzZXIgdG8gaGF2ZSBtdWx0aXBsZSBnZW9ncmFwaGljYWxseS1jbG9zZQorY2FjaGUgc2VydmVycyBmb3IgZmV0Y2hpbmcgbWlzc2luZyBibG9icyB3aGlsZSBjb250aW51aW5nIHRvIGRvCitmaWx0ZXJlZCBgZ2l0LWZldGNoYCBjb21tYW5kcyBmcm9tIHRoZSBjZW50cmFsIHNlcnZlci4KKworV2hlbiBmZXRjaGluZyBvYmplY3RzLCBwcm9taXNvciByZW1vdGVzIGFyZSB0cmllZCBvbmUgYWZ0ZXIgdGhlIG90aGVyCit1bnRpbCBhbGwgdGhlIG9iamVjdHMgaGF2ZSBiZWVuIGZldGNoZWQuCisKK1JlbW90ZXMgdGhhdCBhcmUgY29uc2lkZXJlZCAicHJvbWlzb3IiIHJlbW90ZXMgYXJlIHRob3NlIHNwZWNpZmllZCBieQordGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIHZhcmlhYmxlczoKKworLSBgZXh0ZW5zaW9ucy5wYXJ0aWFsQ2xvbmUgPSA8bmFtZT5gCisKKy0gYHJlbW90ZS48bmFtZT4ucHJvbWlzb3IgPSB0cnVlYAorCistIGByZW1vdGUuPG5hbWU+LnBhcnRpYWxDbG9uZUZpbHRlciA9IC4uLmAKKworT25seSBvbmUgcHJvbWlzb3IgcmVtb3RlIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHRoZQorYGV4dGVuc2lvbnMucGFydGlhbENsb25lYCBjb25maWcgdmFyaWFibGUuIFRoaXMgcHJvbWlzb3IgcmVtb3RlIHdpbGwKK2JlIHRoZSBsYXN0IG9uZSB0cmllZCB3aGVuIGZldGNoaW5nIG9iamVjdHMuCisKK1dlIGRlY2lkZWQgdG8gbWFrZSBpdCB0aGUgbGFzdCBvbmUgd2UgdHJ5LCBiZWNhdXNlIGl0IGlzIGxpa2VseSB0aGF0Citzb21lb25lIHVzaW5nIG1hbnkgcHJvbWlzb3IgcmVtb3RlcyBpcyBkb2luZyBzbyBiZWNhdXNlIHRoZSBvdGhlcgorcHJvbWlzb3IgcmVtb3RlcyBhcmUgYmV0dGVyIGZvciBzb21lIHJlYXNvbiAobWF5YmUgdGhleSBhcmUgY2xvc2VyIG9yCitmYXN0ZXIgZm9yIHNvbWUga2luZCBvZiBvYmplY3RzKSB0aGFuIHRoZSBvcmlnaW4sIGFuZCB0aGUgb3JpZ2luIGlzCitsaWtlbHkgdG8gYmUgdGhlIHJlbW90ZSBzcGVjaWZpZWQgYnkgZXh0ZW5zaW9ucy5wYXJ0aWFsQ2xvbmUuCisKK1RoaXMganVzdGlmaWNhdGlvbiBpcyBub3QgdmVyeSBzdHJvbmcsIGJ1dCBvbmUgY2hvaWNlIGhhZCB0byBiZSBtYWRlLAorYW5kIGFueXdheSB0aGUgbG9uZyB0ZXJtIHBsYW4gc2hvdWxkIGJlIHRvIG1ha2UgdGhlIG9yZGVyIHNvbWVob3cKK2Z1bGx5IGNvbmZpZ3VyYWJsZS4KKworRm9yIG5vdyB0aG91Z2ggdGhlIG90aGVyIHByb21pc29yIHJlbW90ZXMgd2lsbCBiZSB0cmllZCBpbiB0aGUgb3JkZXIKK3RoZXkgYXBwZWFyIGluIHRoZSBjb25maWcgZmlsZS4KKworQ3VycmVudCBMaW1pdGF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBzcGVjaWZ5IHRoZSBvcmRlciBpbiB3aGljaCB0aGUgcHJvbWlzb3IKKyAgcmVtb3RlcyBhcmUgdHJpZWQgaW4gb3RoZXIgd2F5cyB0aGFuIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFwcGVhcgorICBpbiB0aGUgY29uZmlnIGZpbGUuCisrCitJdCBpcyBhbHNvIG5vdCBwb3NzaWJsZSB0byBzcGVjaWZ5IGFuIG9yZGVyIHRvIGJlIHVzZWQgd2hlbiBmZXRjaGluZworZnJvbSBvbmUgcmVtb3RlIGFuZCBhIGRpZmZlcmVudCBvcmRlciB3aGVuIGZldGNoaW5nIGZyb20gYW5vdGhlcgorcmVtb3RlLgorCistIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXNoIG9ubHkgc3BlY2lmaWMgb2JqZWN0cyB0byBhIHByb21pc29yCisgIHJlbW90ZS4KKysKK0l0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXNoIGF0IHRoZSBzYW1lIHRpbWUgdG8gbXVsdGlwbGUgcHJvbWlzb3IKK3JlbW90ZSBpbiBhIHNwZWNpZmljIG9yZGVyLgorCistIER5bmFtaWMgb2JqZWN0IGZldGNoaW5nIHdpbGwgb25seSBhc2sgcHJvbWlzb3IgcmVtb3RlcyBmb3IgbWlzc2luZworICBvYmplY3RzLiAgV2UgYXNzdW1lIHRoYXQgcHJvbWlzb3IgcmVtb3RlcyBoYXZlIGEgY29tcGxldGUgdmlldyBvZiB0aGUKKyAgcmVwb3NpdG9yeSBhbmQgY2FuIHNhdGlzZnkgYWxsIHN1Y2ggcmVxdWVzdHMuCisKKy0gUmVwYWNrIGVzc2VudGlhbGx5IHRyZWF0cyBwcm9taXNvciBhbmQgbm9uLXByb21pc29yIHBhY2tmaWxlcyBhcyAyCisgIGRpc3RpbmN0IHBhcnRpdGlvbnMgYW5kIGRvZXMgbm90IG1peCB0aGVtLiAgUmVwYWNrIGN1cnJlbnRseSBvbmx5IHdvcmtzCisgIG9uIG5vbi1wcm9taXNvciBwYWNrZmlsZXMgYW5kIGxvb3NlIG9iamVjdHMuCisKKy0gRHluYW1pYyBvYmplY3QgZmV0Y2hpbmcgaW52b2tlcyBmZXRjaC1wYWNrIG9uY2UgKmZvciBlYWNoIGl0ZW0qCisgIGJlY2F1c2UgbW9zdCBhbGdvcml0aG1zIHN0dW1ibGUgdXBvbiBhIG1pc3Npbmcgb2JqZWN0IGFuZCBuZWVkIHRvIGhhdmUKKyAgaXQgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlaXIgd29yay4gIFRoaXMgbWF5IGluY3VyIHNpZ25pZmljYW50CisgIG92ZXJoZWFkIC0tIGFuZCBtdWx0aXBsZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0cyAtLSBpZiBtYW55IG9iamVjdHMgYXJlCisgIG5lZWRlZC4KKworLSBEeW5hbWljIG9iamVjdCBmZXRjaGluZyBjdXJyZW50bHkgdXNlcyB0aGUgZXhpc3RpbmcgcGFjayBwcm90b2NvbCBWMAorICB3aGljaCBtZWFucyB0aGF0IGVhY2ggb2JqZWN0IGlzIHJlcXVlc3RlZCB2aWEgZmV0Y2gtcGFjay4gIFRoZSBzZXJ2ZXIKKyAgd2lsbCBzZW5kIGEgZnVsbCBzZXQgb2YgaW5mby9yZWZzIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuCisgIElmIHRoZXJlIGFyZSBsYXJnZSBudW1iZXIgb2YgcmVmcywgdGhpcyBtYXkgaW5jdXIgc2lnbmlmaWNhbnQgb3ZlcmhlYWQuCisKKworRnV0dXJlIFdvcmsKKy0tLS0tLS0tLS0tCisKKy0gSW1wcm92ZSB0aGUgd2F5IHRvIHNwZWNpZnkgdGhlIG9yZGVyIGluIHdoaWNoIHByb21pc29yIHJlbW90ZXMgYXJlCisgIHRyaWVkLgorKworRm9yIGV4YW1wbGUgdGhpcyBjb3VsZCBhbGxvdyB0byBzcGVjaWZ5IGV4cGxpY2l0bHkgc29tZXRoaW5nIGxpa2U6CisiV2hlbiBmZXRjaGluZyBmcm9tIHRoaXMgcmVtb3RlLCBJIHdhbnQgdG8gdXNlIHRoZXNlIHByb21pc29yIHJlbW90ZXMKK2luIHRoaXMgb3JkZXIsIHRob3VnaCwgd2hlbiBwdXNoaW5nIG9yIGZldGNoaW5nIHRvIHRoYXQgcmVtb3RlLCBJIHdhbnQKK3RvIHVzZSB0aG9zZSBwcm9taXNvciByZW1vdGVzIGluIHRoYXQgb3JkZXIuIgorCistIEFsbG93IHB1c2hpbmcgdG8gcHJvbWlzb3IgcmVtb3Rlcy4KKysKK1RoZSB1c2VyIG1pZ2h0IHdhbnQgdG8gd29yayBpbiBhIHRyaWFuZ3VsYXIgd29yayBmbG93IHdpdGggbXVsdGlwbGUKK3Byb21pc29yIHJlbW90ZXMgdGhhdCBlYWNoIGhhdmUgYW4gaW5jb21wbGV0ZSB2aWV3IG9mIHRoZSByZXBvc2l0b3J5LgorCistIEFsbG93IHJlcGFjayB0byB3b3JrIG9uIHByb21pc29yIHBhY2tmaWxlcyAod2hpbGUga2VlcGluZyB0aGVtIGRpc3RpbmN0CisgIGZyb20gbm9uLXByb21pc29yIHBhY2tmaWxlcykuCisKKy0gQWxsb3cgbm9uLXBhdGhuYW1lLWJhc2VkIGZpbHRlcnMgdG8gbWFrZSB1c2Ugb2YgcGFja2ZpbGUgYml0bWFwcyAod2hlbgorICBwcmVzZW50KS4gIFRoaXMgd2FzIGp1c3QgYW4gb21pc3Npb24gZHVyaW5nIHRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uLgorCistIEludmVzdGlnYXRlIHVzZSBvZiBhIGxvbmctcnVubmluZyBwcm9jZXNzIHRvIGR5bmFtaWNhbGx5IGZldGNoIGEgc2VyaWVzCisgIG9mIG9iamVjdHMsIHN1Y2ggYXMgcHJvcG9zZWQgaW4gWzUsNl0gdG8gcmVkdWNlIHByb2Nlc3Mgc3RhcnR1cCBhbmQKKyAgb3ZlcmhlYWQgY29zdHMuCisrCitJdCB3b3VsZCBiZSBuaWNlIGlmIHBhY2sgcHJvdG9jb2wgVjIgY291bGQgYWxsb3cgdGhhdCBsb25nLXJ1bm5pbmcKK3Byb2Nlc3MgdG8gbWFrZSBhIHNlcmllcyBvZiByZXF1ZXN0cyBvdmVyIGEgc2luZ2xlIGxvbmctcnVubmluZworY29ubmVjdGlvbi4KKworLSBJbnZlc3RpZ2F0ZSBwYWNrIHByb3RvY29sIFYyIHRvIGF2b2lkIHRoZSBpbmZvL3JlZnMgYnJvYWRjYXN0IG9uCisgIGVhY2ggY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgdG8gZHluYW1pY2FsbHkgZmV0Y2ggbWlzc2luZyBvYmplY3RzLgorCistIEludmVzdGlnYXRlIHRoZSBuZWVkIHRvIGhhbmRsZSBsb29zZSBwcm9taXNvciBvYmplY3RzLgorKworT2JqZWN0cyBpbiBwcm9taXNvciBwYWNrZmlsZXMgYXJlIGFsbG93ZWQgdG8gcmVmZXJlbmNlIG1pc3Npbmcgb2JqZWN0cwordGhhdCBjYW4gYmUgZHluYW1pY2FsbHkgZmV0Y2hlZCBmcm9tIHRoZSBzZXJ2ZXIuICBBbiBhc3N1bXB0aW9uIHdhcworbWFkZSB0aGF0IGxvb3NlIG9iamVjdHMgYXJlIG9ubHkgY3JlYXRlZCBsb2NhbGx5IGFuZCB0aGVyZWZvcmUgc2hvdWxkCitub3QgcmVmZXJlbmNlIGEgbWlzc2luZyBvYmplY3QuICBXZSBtYXkgbmVlZCB0byByZXZpc2l0IHRoYXQgYXNzdW1wdGlvbgoraWYsIGZvciBleGFtcGxlLCB3ZSBkeW5hbWljYWxseSBmZXRjaCBhIG1pc3NpbmcgdHJlZSBhbmQgc3RvcmUgaXQgYXMgYQorbG9vc2Ugb2JqZWN0IHJhdGhlciB0aGFuIGEgc2luZ2xlIG9iamVjdCBwYWNrZmlsZS4KKysKK1RoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB3ZSBuZWVkIHRvIG1hcmsgbG9vc2Ugb2JqZWN0cyBhcyBwcm9taXNvcjsKK2l0IG1heSBiZSBzdWZmaWNpZW50IHRvIHJlbGF4IHRoZSBvYmplY3QgbG9va3VwIG9yIGlzLXByb21pc29yIGZ1bmN0aW9ucy4KKworCitOb24tVGFza3MKKy0tLS0tLS0tLQorCistIEV2ZXJ5IHRpbWUgdGhlIHN1YmplY3Qgb2YgImRlbWFuZCBsb2FkaW5nIGJsb2JzIiBjb21lcyB1cCBpdCBzZWVtcworICB0aGF0IHNvbWVvbmUgc3VnZ2VzdHMgdGhhdCB0aGUgc2VydmVyIGJlIGFsbG93ZWQgdG8gImd1ZXNzIiBhbmQgc2VuZAorICBhZGRpdGlvbmFsIG9iamVjdHMgdGhhdCBtYXkgYmUgcmVsYXRlZCB0byB0aGUgcmVxdWVzdGVkIG9iamVjdHMuCisrCitObyB3b3JrIGhhcyBnb25lIGludG8gYWN0dWFsbHkgZG9pbmcgdGhhdDsgd2UncmUganVzdCBkb2N1bWVudGluZyB0aGF0CitpdCBpcyBhIGNvbW1vbiBzdWdnZXN0aW9uLiAgV2UncmUgbm90IHN1cmUgaG93IGl0IHdvdWxkIHdvcmsgYW5kIGhhdmUKK25vIHBsYW5zIHRvIHdvcmsgb24gaXQuCisrCitJdCBpcyB2YWxpZCBmb3IgdGhlIHNlcnZlciB0byBzZW5kIG1vcmUgb2JqZWN0cyB0aGFuIHJlcXVlc3RlZCAoZXZlbgorZm9yIGEgZHluYW1pYyBvYmplY3QgZmV0Y2gpLCBidXQgd2UgYXJlIG5vdCBidWlsZGluZyBvbiB0aGF0LgorCisKK0Zvb3Rub3RlcworLS0tLS0tLS0tCisKK1thXSBleHBlbnNpdmUtdG8tbW9kaWZ5IGxpc3Qgb2YgbWlzc2luZyBvYmplY3RzOiAgRWFybGllciBpbiB0aGUgZGVzaWduIG9mCisgICAgcGFydGlhbCBjbG9uZSB3ZSBkaXNjdXNzZWQgdGhlIG5lZWQgZm9yIGEgc2luZ2xlIGxpc3Qgb2YgbWlzc2luZyBvYmplY3RzLgorICAgIFRoaXMgd291bGQgZXNzZW50aWFsbHkgYmUgYSBzb3J0ZWQgbGluZWFyIGxpc3Qgb2YgT0lEcyB0aGF0IHRoZSB3ZXJlCisgICAgb21pdHRlZCBieSB0aGUgc2VydmVyIGR1cmluZyBhIGNsb25lIG9yIHN1YnNlcXVlbnQgZmV0Y2hlcy4KKworVGhpcyBmaWxlIHdvdWxkIG5lZWQgdG8gYmUgbG9hZGVkIGludG8gbWVtb3J5IG9uIGV2ZXJ5IG9iamVjdCBsb29rdXAuCitJdCB3b3VsZCBuZWVkIHRvIGJlIHJlYWQsIHVwZGF0ZWQsIGFuZCByZS13cml0dGVuIChsaWtlIHRoZSAuZ2l0L2luZGV4KQorb24gZXZlcnkgZXhwbGljaXQgImdpdCBmZXRjaCIgY29tbWFuZCAqYW5kKiBvbiBhbnkgZHluYW1pYyBvYmplY3QgZmV0Y2guCisKK1RoZSBjb3N0IHRvIHJlYWQsIHVwZGF0ZSwgYW5kIHdyaXRlIHRoaXMgZmlsZSBjb3VsZCBhZGQgc2lnbmlmaWNhbnQKK292ZXJoZWFkIHRvIGV2ZXJ5IGNvbW1hbmQgaWYgdGhlcmUgYXJlIG1hbnkgbWlzc2luZyBvYmplY3RzLiAgRm9yIGV4YW1wbGUsCitpZiB0aGVyZSBhcmUgMTAwTSBtaXNzaW5nIGJsb2JzLCB0aGlzIGZpbGUgd291bGQgYmUgYXQgbGVhc3QgMkdpQiBvbiBkaXNrLgorCitXaXRoIHRoZSAicHJvbWlzb3IiIGNvbmNlcHQsIHdlICppbmZlciogYSBtaXNzaW5nIG9iamVjdCBiYXNlZCB1cG9uIHRoZQordHlwZSBvZiBwYWNrZmlsZSB0aGF0IHJlZmVyZW5jZXMgaXQuCisKKworUmVsYXRlZCBMaW5rcworLS0tLS0tLS0tLS0tLQorWzBdIGh0dHBzOi8vY3JidWcuY29tL2dpdC8yCisgICAgQnVnIzI6IFBhcnRpYWwgQ2xvbmUKKworWzFdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDE3MDExMzE1NTI1My4xNjQ0LTEtYmVucGVhcnRAbWljcm9zb2Z0LmNvbS8gKworICAgIFN1YmplY3Q6IFtSRkNdIEFkZCBzdXBwb3J0IGZvciBkb3dubG9hZGluZyBibG9icyBvbiBkZW1hbmQgKworICAgIERhdGU6IEZyaSwgMTMgSmFuIDIwMTcgMTA6NTI6NTMgLTA1MDAKKworWzJdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC9jb3Zlci4xNTA2NzE0OTk5LmdpdC5qb25hdGhhbnRhbm15QGdvb2dsZS5jb20vICsKKyAgICBTdWJqZWN0OiBbUEFUQ0ggMDAvMThdIFBhcnRpYWwgY2xvbmUgKGZyb20gY2xvbmUgdG8gbGF6eSBmZXRjaCBpbiAxOCBwYXRjaGVzKSArCisgICAgRGF0ZTogRnJpLCAyOSBTZXAgMjAxNyAxMzoxMTozNiAtMDcwMAorCitbM10gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwNDI2MjIxMzQ2LjI1MzM3LTEtam9uYXRoYW50YW5teUBnb29nbGUuY29tLyArCisgICAgU3ViamVjdDogUHJvcG9zYWwgZm9yIG1pc3NpbmcgYmxvYiBzdXBwb3J0IGluIEdpdCByZXBvcyArCisgICAgRGF0ZTogV2VkLCAyNiBBcHIgMjAxNyAxNToxMzo0NiAtMDcwMAorCitbNF0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzE0ODg5OTkwMzktMzc2MzEtMS1naXQtc2VuZC1lbWFpbC1naXRAamVmZmhvc3RldGxlci5jb20vICsKKyAgICBTdWJqZWN0OiBbUEFUQ0ggMDAvMTBdIFJGQyBQYXJ0aWFsIENsb25lIGFuZCBGZXRjaCArCisgICAgRGF0ZTogV2VkLCAgOCBNYXIgMjAxNyAxODo1MDoyOSArMDAwMAorCitbNV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwNTA1MTUyODAyLjY3MjQtMS1iZW5wZWFydEBtaWNyb3NvZnQuY29tLyArCisgICAgU3ViamVjdDogW1BBVENIIHY3IDAwLzEwXSByZWZhY3RvciB0aGUgZmlsdGVyIHByb2Nlc3MgY29kZSBpbnRvIGEgcmV1c2FibGUgbW9kdWxlICsKKyAgICBEYXRlOiBGcmksICA1IE1heSAyMDE3IDExOjI3OjUyIC0wNDAwCisKK1s2XSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxNzA3MTQxMzI2NTEuMTcwNzA4LTEtYmVucGVhcnRAbWljcm9zb2Z0LmNvbS8gKworICAgIFN1YmplY3Q6IFtSRkMvUEFUQ0ggdjIgMC8xXSBBZGQgc3VwcG9ydCBmb3IgZG93bmxvYWRpbmcgYmxvYnMgb24gZGVtYW5kICsKKyAgICBEYXRlOiBGcmksIDE0IEp1bCAyMDE3IDA5OjI2OjUwIC0wNDAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC1jYXBhYmlsaXRpZXMudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtY2FwYWJpbGl0aWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjI2N2MwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtY2FwYWJpbGl0aWVzLnR4dApAQCAtMCwwICsxLDMzNyBAQAorR2l0IFByb3RvY29sIENhcGFiaWxpdGllcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitOT1RFOiB0aGlzIGRvY3VtZW50IGRlc2NyaWJlcyBjYXBhYmlsaXRpZXMgZm9yIHZlcnNpb25zIDAgYW5kIDEgb2YgdGhlIHBhY2sKK3Byb3RvY29sLiBGb3IgdmVyc2lvbiAyLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGxpbms6cHJvdG9jb2wtdjIuaHRtbFtwcm90b2NvbC12Ml0KK2RvYy4KKworU2VydmVycyBTSE9VTEQgc3VwcG9ydCBhbGwgY2FwYWJpbGl0aWVzIGRlZmluZWQgaW4gdGhpcyBkb2N1bWVudC4KKworT24gdGhlIHZlcnkgZmlyc3QgbGluZSBvZiB0aGUgaW5pdGlhbCBzZXJ2ZXIgcmVzcG9uc2Ugb2YgZWl0aGVyCityZWNlaXZlLXBhY2sgYW5kIHVwbG9hZC1wYWNrIHRoZSBmaXJzdCByZWZlcmVuY2UgaXMgZm9sbG93ZWQgYnkKK2EgTlVMIGJ5dGUgYW5kIHRoZW4gYSBsaXN0IG9mIHNwYWNlIGRlbGltaXRlZCBzZXJ2ZXIgY2FwYWJpbGl0aWVzLgorVGhlc2UgYWxsb3cgdGhlIHNlcnZlciB0byBkZWNsYXJlIHdoYXQgaXQgY2FuIGFuZCBjYW5ub3Qgc3VwcG9ydAordG8gdGhlIGNsaWVudC4KKworQ2xpZW50IHdpbGwgdGhlbiBzZW5kIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2FwYWJpbGl0aWVzIGl0IHdhbnRzCit0byBiZSBpbiBlZmZlY3QuIFRoZSBjbGllbnQgTVVTVCBOT1QgYXNrIGZvciBjYXBhYmlsaXRpZXMgdGhlIHNlcnZlcgorZGlkIG5vdCBzYXkgaXQgc3VwcG9ydHMuCisKK1NlcnZlciBNVVNUIGRpYWdub3NlIGFuZCBhYm9ydCBpZiBjYXBhYmlsaXRpZXMgaXQgZG9lcyBub3QgdW5kZXJzdGFuZAord2FzIHNlbnQuICBTZXJ2ZXIgTVVTVCBOT1QgaWdub3JlIGNhcGFiaWxpdGllcyB0aGF0IGNsaWVudCByZXF1ZXN0ZWQKK2FuZCBzZXJ2ZXIgYWR2ZXJ0aXNlZC4gIEFzIGEgY29uc2VxdWVuY2Ugb2YgdGhlc2UgcnVsZXMsIHNlcnZlciBNVVNUCitOT1QgYWR2ZXJ0aXNlIGNhcGFiaWxpdGllcyBpdCBkb2VzIG5vdCB1bmRlcnN0YW5kLgorCitUaGUgJ2F0b21pYycsICdyZXBvcnQtc3RhdHVzJywgJ2RlbGV0ZS1yZWZzJywgJ3F1aWV0JywgYW5kICdwdXNoLWNlcnQnCitjYXBhYmlsaXRpZXMgYXJlIHNlbnQgYW5kIHJlY29nbml6ZWQgYnkgdGhlIHJlY2VpdmUtcGFjayAocHVzaCB0byBzZXJ2ZXIpCitwcm9jZXNzLgorCitUaGUgJ29mcy1kZWx0YScgYW5kICdzaWRlLWJhbmQtNjRrJyBjYXBhYmlsaXRpZXMgYXJlIHNlbnQgYW5kIHJlY29nbml6ZWQKK2J5IGJvdGggdXBsb2FkLXBhY2sgYW5kIHJlY2VpdmUtcGFjayBwcm90b2NvbHMuICBUaGUgJ2FnZW50JyBjYXBhYmlsaXR5CittYXkgb3B0aW9uYWxseSBiZSBzZW50IGluIGJvdGggcHJvdG9jb2xzLgorCitBbGwgb3RoZXIgY2FwYWJpbGl0aWVzIGFyZSBvbmx5IHJlY29nbml6ZWQgYnkgdGhlIHVwbG9hZC1wYWNrIChmZXRjaAorZnJvbSBzZXJ2ZXIpIHByb2Nlc3MuCisKK211bHRpX2FjaworLS0tLS0tLS0tCisKK1RoZSAnbXVsdGlfYWNrJyBjYXBhYmlsaXR5IGFsbG93cyB0aGUgc2VydmVyIHRvIHJldHVybiAiQUNLIG9iai1pZAorY29udGludWUiIGFzIHNvb24gYXMgaXQgZmluZHMgYSBjb21taXQgdGhhdCBpdCBjYW4gdXNlIGFzIGEgY29tbW9uCitiYXNlLCBiZXR3ZWVuIHRoZSBjbGllbnQncyB3YW50cyBhbmQgdGhlIGNsaWVudCdzIGhhdmUgc2V0LgorCitCeSBzZW5kaW5nIHRoaXMgZWFybHksIHRoZSBzZXJ2ZXIgY2FuIHBvdGVudGlhbGx5IGhlYWQgb2ZmIHRoZSBjbGllbnQKK2Zyb20gd2Fsa2luZyBhbnkgZnVydGhlciBkb3duIHRoYXQgcGFydGljdWxhciBicmFuY2ggb2YgdGhlIGNsaWVudCdzCityZXBvc2l0b3J5IGhpc3RvcnkuICBUaGUgY2xpZW50IG1heSBzdGlsbCBuZWVkIHRvIHdhbGsgZG93biBvdGhlcgorYnJhbmNoZXMsIHNlbmRpbmcgaGF2ZSBsaW5lcyBmb3IgdGhvc2UsIHVudGlsIHRoZSBzZXJ2ZXIgaGFzIGEKK2NvbXBsZXRlIGN1dCBhY3Jvc3MgdGhlIERBRywgb3IgdGhlIGNsaWVudCBoYXMgc2FpZCAiZG9uZSIuCisKK1dpdGhvdXQgbXVsdGlfYWNrLCBhIGNsaWVudCBzZW5kcyBoYXZlIGxpbmVzIGluIC0tZGF0ZS1vcmRlciB1bnRpbAordGhlIHNlcnZlciBoYXMgZm91bmQgYSBjb21tb24gYmFzZS4gIFRoYXQgbWVhbnMgdGhlIGNsaWVudCB3aWxsIHNlbmQKK2hhdmUgbGluZXMgdGhhdCBhcmUgYWxyZWFkeSBrbm93biBieSB0aGUgc2VydmVyIHRvIGJlIGNvbW1vbiwgYmVjYXVzZQordGhleSBvdmVybGFwIGluIHRpbWUgd2l0aCBhbm90aGVyIGJyYW5jaCB0aGF0IHRoZSBzZXJ2ZXIgaGFzbid0IGZvdW5kCithIGNvbW1vbiBiYXNlIG9uIHlldC4KKworRm9yIGV4YW1wbGUgc3VwcG9zZSB0aGUgY2xpZW50IGhhcyBjb21taXRzIGluIGNhcHMgdGhhdCB0aGUgc2VydmVyCitkb2Vzbid0IGFuZCB0aGUgc2VydmVyIGhhcyBjb21taXRzIGluIGxvd2VyIGNhc2UgdGhhdCB0aGUgY2xpZW50Citkb2Vzbid0LCBhcyBpbiB0aGUgZm9sbG93aW5nIGRpYWdyYW06CisKKyAgICAgICArLS0tLSB1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0geAorICAgICAgLyAgICAgICAgICAgICAgKy0tLS0tIHkKKyAgICAgLyAgICAgICAgICAgICAgLworICAgIGEgLS0gYiAtLSBjIC0tIGQgLS0gRSAtLSBGCisgICAgICAgXAorCSstLS0gUSAtLSBSIC0tIFMKKworSWYgdGhlIGNsaWVudCB3YW50cyB4LHkgYW5kIHN0YXJ0cyBvdXQgYnkgc2F5aW5nIGhhdmUgRixTLCB0aGUgc2VydmVyCitkb2Vzbid0IGtub3cgd2hhdCBGLFMgaXMuICBFdmVudHVhbGx5IHRoZSBjbGllbnQgc2F5cyAiaGF2ZSBkIiBhbmQKK3RoZSBzZXJ2ZXIgc2VuZHMgIkFDSyBkIGNvbnRpbnVlIiB0byBsZXQgdGhlIGNsaWVudCBrbm93IHRvIHN0b3AKK3dhbGtpbmcgZG93biB0aGF0IGxpbmUgKHNvIGRvbid0IHNlbmQgYy1iLWEpLCBidXQgaXQncyBub3QgZG9uZSB5ZXQsCitpdCBuZWVkcyBhIGJhc2UgZm9yIHguIFRoZSBjbGllbnQga2VlcHMgZ29pbmcgd2l0aCBTLVItUSwgdW50aWwgYQorZ2V0cyByZWFjaGVkLCBhdCB3aGljaCBwb2ludCB0aGUgc2VydmVyIGhhcyBhIGNsZWFyIGJhc2UgYW5kIGl0IGFsbAorZW5kcy4KKworV2l0aG91dCBtdWx0aV9hY2sgdGhlIGNsaWVudCB3b3VsZCBoYXZlIHNlbnQgdGhhdCBjLWItYSBjaGFpbiBhbnl3YXksCitpbnRlcmxlYXZlZCB3aXRoIFMtUi1RLgorCittdWx0aV9hY2tfZGV0YWlsZWQKKy0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBpcyBhbiBleHRlbnNpb24gb2YgbXVsdGlfYWNrIHRoYXQgcGVybWl0cyBjbGllbnQgdG8gYmV0dGVyCit1bmRlcnN0YW5kIHRoZSBzZXJ2ZXIncyBpbi1tZW1vcnkgc3RhdGUuIFNlZSBwYWNrLXByb3RvY29sLnR4dCwKK3NlY3Rpb24gIlBhY2tmaWxlIE5lZ290aWF0aW9uIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworbm8tZG9uZQorLS0tLS0tLQorVGhpcyBjYXBhYmlsaXR5IHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgc21hcnQgSFRUUCBwcm90b2NvbC4gSWYKK211bHRpX2Fja19kZXRhaWxlZCBhbmQgbm8tZG9uZSBhcmUgYm90aCBwcmVzZW50LCB0aGVuIHRoZSBzZW5kZXIgaXMKK2ZyZWUgdG8gaW1tZWRpYXRlbHkgc2VuZCBhIHBhY2sgZm9sbG93aW5nIGl0cyBmaXJzdCAiQUNLIG9iai1pZCByZWFkeSIKK21lc3NhZ2UuCisKK1dpdGhvdXQgbm8tZG9uZSBpbiB0aGUgc21hcnQgSFRUUCBwcm90b2NvbCwgdGhlIHNlcnZlciBzZXNzaW9uIHdvdWxkCitlbmQgYW5kIHRoZSBjbGllbnQgaGFzIHRvIG1ha2UgYW5vdGhlciB0cmlwIHRvIHNlbmQgImRvbmUiIGJlZm9yZQordGhlIHNlcnZlciBjYW4gc2VuZCB0aGUgcGFjay4gbm8tZG9uZSByZW1vdmVzIHRoZSBsYXN0IHJvdW5kIGFuZAordGh1cyBzbGlnaHRseSByZWR1Y2VzIGxhdGVuY3kuCisKK3RoaW4tcGFjaworLS0tLS0tLS0tCisKK0EgdGhpbiBwYWNrIGlzIG9uZSB3aXRoIGRlbHRhcyB3aGljaCByZWZlcmVuY2UgYmFzZSBvYmplY3RzIG5vdAorY29udGFpbmVkIHdpdGhpbiB0aGUgcGFjayAoYnV0IGFyZSBrbm93biB0byBleGlzdCBhdCB0aGUgcmVjZWl2aW5nCitlbmQpLiBUaGlzIGNhbiByZWR1Y2UgdGhlIG5ldHdvcmsgdHJhZmZpYyBzaWduaWZpY2FudGx5LCBidXQgaXQKK3JlcXVpcmVzIHRoZSByZWNlaXZpbmcgZW5kIHRvIGtub3cgaG93IHRvICJ0aGlja2VuIiB0aGVzZSBwYWNrcyBieQorYWRkaW5nIHRoZSBtaXNzaW5nIGJhc2VzIHRvIHRoZSBwYWNrLgorCitUaGUgdXBsb2FkLXBhY2sgc2VydmVyIGFkdmVydGlzZXMgJ3RoaW4tcGFjaycgd2hlbiBpdCBjYW4gZ2VuZXJhdGUKK2FuZCBzZW5kIGEgdGhpbiBwYWNrLiBBIGNsaWVudCByZXF1ZXN0cyB0aGUgJ3RoaW4tcGFjaycgY2FwYWJpbGl0eQord2hlbiBpdCB1bmRlcnN0YW5kcyBob3cgdG8gInRoaWNrZW4iIGl0LCBub3RpZnlpbmcgdGhlIHNlcnZlciB0aGF0CitpdCBjYW4gcmVjZWl2ZSBzdWNoIGEgcGFjay4gQSBjbGllbnQgTVVTVCBOT1QgcmVxdWVzdCB0aGUKKyd0aGluLXBhY2snIGNhcGFiaWxpdHkgaWYgaXQgY2Fubm90IHR1cm4gYSB0aGluIHBhY2sgaW50byBhCitzZWxmLWNvbnRhaW5lZCBwYWNrLgorCitSZWNlaXZlLXBhY2ssIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBhc3N1bWVkIGJ5IGRlZmF1bHQgdG8gYmUgYWJsZSB0bworaGFuZGxlIHRoaW4gcGFja3MsIGJ1dCBjYW4gYXNrIHRoZSBjbGllbnQgbm90IHRvIHVzZSB0aGUgZmVhdHVyZSBieQorYWR2ZXJ0aXNpbmcgdGhlICduby10aGluJyBjYXBhYmlsaXR5LiBBIGNsaWVudCBNVVNUIE5PVCBzZW5kIGEgdGhpbgorcGFjayBpZiB0aGUgc2VydmVyIGFkdmVydGlzZXMgdGhlICduby10aGluJyBjYXBhYmlsaXR5LgorCitUaGUgcmVhc29ucyBmb3IgdGhpcyBhc3ltbWV0cnkgYXJlIGhpc3RvcmljYWwuIFRoZSByZWNlaXZlLXBhY2sKK3Byb2dyYW0gZGlkIG5vdCBleGlzdCB1bnRpbCBhZnRlciB0aGUgaW52ZW50aW9uIG9mIHRoaW4gcGFja3MsIHNvCitoaXN0b3JpY2FsbHkgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiByZWNlaXZlLXBhY2sgYWx3YXlzCit1bmRlcnN0b29kIHRoaW4gcGFja3MuIEFkZGluZyAnbm8tdGhpbicgbGF0ZXIgYWxsb3dlZCByZWNlaXZlLXBhY2sKK3RvIGRpc2FibGUgdGhlIGZlYXR1cmUgaW4gYSBiYWNrd2FyZHMtY29tcGF0aWJsZSBtYW5uZXIuCisKKworc2lkZS1iYW5kLCBzaWRlLWJhbmQtNjRrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBjYXBhYmlsaXR5IG1lYW5zIHRoYXQgc2VydmVyIGNhbiBzZW5kLCBhbmQgY2xpZW50IHVuZGVyc3RhbmQgbXVsdGlwbGV4ZWQKK3Byb2dyZXNzIHJlcG9ydHMgYW5kIGVycm9yIGluZm8gaW50ZXJsZWF2ZWQgd2l0aCB0aGUgcGFja2ZpbGUgaXRzZWxmLgorCitUaGVzZSB0d28gb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBBIG1vZGVybiBjbGllbnQgYWx3YXlzCitmYXZvcnMgJ3NpZGUtYmFuZC02NGsnLgorCitFaXRoZXIgbW9kZSBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFja2ZpbGUgZGF0YSB3aWxsIGJlIHN0cmVhbWVkIGJyb2tlbgordXAgaW50byBwYWNrZXRzIG9mIHVwIHRvIGVpdGhlciAxMDAwIGJ5dGVzIGluIHRoZSBjYXNlIG9mICdzaWRlX2JhbmQnLAorb3IgNjU1MjAgYnl0ZXMgaW4gdGhlIGNhc2Ugb2YgJ3NpZGVfYmFuZF82NGsnLiBFYWNoIHBhY2tldCBpcyBtYWRlIHVwCitvZiBhIGxlYWRpbmcgNC1ieXRlIHBrdC1saW5lIGxlbmd0aCBvZiBob3cgbXVjaCBkYXRhIGlzIGluIHRoZSBwYWNrZXQsCitmb2xsb3dlZCBieSBhIDEtYnl0ZSBzdHJlYW0gY29kZSwgZm9sbG93ZWQgYnkgdGhlIGFjdHVhbCBkYXRhLgorCitUaGUgc3RyZWFtIGNvZGUgY2FuIGJlIG9uZSBvZjoKKworIDEgLSBwYWNrIGRhdGEKKyAyIC0gcHJvZ3Jlc3MgbWVzc2FnZXMKKyAzIC0gZmF0YWwgZXJyb3IgbWVzc2FnZSBqdXN0IGJlZm9yZSBzdHJlYW0gYWJvcnRzCisKK1RoZSAic2lkZS1iYW5kLTY0ayIgY2FwYWJpbGl0eSBjYW1lIGFib3V0IGFzIGEgd2F5IGZvciBuZXdlciBjbGllbnRzCit0aGF0IGNhbiBoYW5kbGUgbXVjaCBsYXJnZXIgcGFja2V0cyB0byByZXF1ZXN0IHBhY2tldHMgdGhhdCBhcmUKK2FjdHVhbGx5IGNyYW1tZWQgbmVhcmx5IGZ1bGwsIHdoaWxlIG1haW50YWluaW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKK2ZvciB0aGUgb2xkZXIgY2xpZW50cy4KKworRnVydGhlciwgd2l0aCBzaWRlLWJhbmQgYW5kIGl0cyB1cCB0byAxMDAwLWJ5dGUgbWVzc2FnZXMsIGl0J3MgYWN0dWFsbHkKKzk5OSBieXRlcyBvZiBwYXlsb2FkIGFuZCAxIGJ5dGUgZm9yIHRoZSBzdHJlYW0gY29kZS4gV2l0aCBzaWRlLWJhbmQtNjRrLAorc2FtZSBkZWFsLCB5b3UgaGF2ZSB1cCB0byA2NTUxOSBieXRlcyBvZiBkYXRhIGFuZCAxIGJ5dGUgZm9yIHRoZSBzdHJlYW0KK2NvZGUuCisKK1RoZSBjbGllbnQgTVVTVCBzZW5kIG9ubHkgbWF4aW11bSBvZiBvbmUgb2YgInNpZGUtYmFuZCIgYW5kICJzaWRlLQorYmFuZC02NGsiLiAgU2VydmVyIE1VU1QgZGlhZ25vc2UgaXQgYXMgYW4gZXJyb3IgaWYgY2xpZW50IHJlcXVlc3RzCitib3RoLgorCitvZnMtZGVsdGEKKy0tLS0tLS0tLQorCitTZXJ2ZXIgY2FuIHNlbmQsIGFuZCBjbGllbnQgdW5kZXJzdGFuZCBQQUNLdjIgd2l0aCBkZWx0YSByZWZlcnJpbmcgdG8KK2l0cyBiYXNlIGJ5IHBvc2l0aW9uIGluIHBhY2sgcmF0aGVyIHRoYW4gYnkgYW4gb2JqLWlkLiAgVGhhdCBpcywgdGhleSBjYW4KK3NlbmQvcmVhZCBPQkpfT0ZTX0RFTFRBIChha2EgdHlwZSA2KSBpbiBhIHBhY2tmaWxlLgorCithZ2VudAorLS0tLS0KKworVGhlIHNlcnZlciBtYXkgb3B0aW9uYWxseSBzZW5kIGEgY2FwYWJpbGl0eSBvZiB0aGUgZm9ybSBgYWdlbnQ9WGAgdG8KK25vdGlmeSB0aGUgY2xpZW50IHRoYXQgdGhlIHNlcnZlciBpcyBydW5uaW5nIHZlcnNpb24gYFhgLiBUaGUgY2xpZW50IG1heQorb3B0aW9uYWxseSByZXR1cm4gaXRzIG93biBhZ2VudCBzdHJpbmcgYnkgcmVzcG9uZGluZyB3aXRoIGFuIGBhZ2VudD1ZYAorY2FwYWJpbGl0eSAoYnV0IGl0IE1VU1QgTk9UIGRvIHNvIGlmIHRoZSBzZXJ2ZXIgZGlkIG5vdCBtZW50aW9uIHRoZQorYWdlbnQgY2FwYWJpbGl0eSkuIFRoZSBgWGAgYW5kIGBZYCBzdHJpbmdzIG1heSBjb250YWluIGFueSBwcmludGFibGUKK0FTQ0lJIGNoYXJhY3RlcnMgZXhjZXB0IHNwYWNlIChpLmUuLCB0aGUgYnl0ZSByYW5nZSAzMiA8IHggPCAxMjcpLCBhbmQKK2FyZSB0eXBpY2FsbHkgb2YgdGhlIGZvcm0gInBhY2thZ2UvdmVyc2lvbiIgKGUuZy4sICJnaXQvMS44LjMuMSIpLiBUaGUKK2FnZW50IHN0cmluZ3MgYXJlIHB1cmVseSBpbmZvcm1hdGl2ZSBmb3Igc3RhdGlzdGljcyBhbmQgZGVidWdnaW5nCitwdXJwb3NlcywgYW5kIE1VU1QgTk9UIGJlIHVzZWQgdG8gcHJvZ3JhbW1hdGljYWxseSBhc3N1bWUgdGhlIHByZXNlbmNlCitvciBhYnNlbmNlIG9mIHBhcnRpY3VsYXIgZmVhdHVyZXMuCisKK3N5bXJlZgorLS0tLS0tCisKK1RoaXMgcGFyYW1ldGVyaXplZCBjYXBhYmlsaXR5IGlzIHVzZWQgdG8gaW5mb3JtIHRoZSByZWNlaXZlciB3aGljaCBzeW1ib2xpYyByZWYKK3BvaW50cyB0byB3aGljaCByZWY7IGZvciBleGFtcGxlLCAic3ltcmVmPUhFQUQ6cmVmcy9oZWFkcy9tYXN0ZXIiIHRlbGxzIHRoZQorcmVjZWl2ZXIgdGhhdCBIRUFEIHBvaW50cyB0byBtYXN0ZXIuIFRoaXMgY2FwYWJpbGl0eSBjYW4gYmUgcmVwZWF0ZWQgdG8KK3JlcHJlc2VudCBtdWx0aXBsZSBzeW1yZWZzLgorCitTZXJ2ZXJzIFNIT1VMRCBpbmNsdWRlIHRoaXMgY2FwYWJpbGl0eSBmb3IgdGhlIEhFQUQgc3ltcmVmIGlmIGl0IGlzIG9uZSBvZiB0aGUKK3JlZnMgYmVpbmcgc2VudC4KKworQ2xpZW50cyBNQVkgdXNlIHRoZSBwYXJhbWV0ZXJzIGZyb20gdGhpcyBjYXBhYmlsaXR5IHRvIHNlbGVjdCB0aGUgcHJvcGVyIGluaXRpYWwKK2JyYW5jaCB3aGVuIGNsb25pbmcgYSByZXBvc2l0b3J5LgorCitzaGFsbG93CistLS0tLS0tCisKK1RoaXMgY2FwYWJpbGl0eSBhZGRzICJkZWVwZW4iLCAic2hhbGxvdyIgYW5kICJ1bnNoYWxsb3ciIGNvbW1hbmRzIHRvCit0aGUgIGZldGNoLXBhY2svdXBsb2FkLXBhY2sgcHJvdG9jb2wgc28gY2xpZW50cyBjYW4gcmVxdWVzdCBzaGFsbG93CitjbG9uZXMuCisKK2RlZXBlbi1zaW5jZQorLS0tLS0tLS0tLS0tCisKK1RoaXMgY2FwYWJpbGl0eSBhZGRzICJkZWVwZW4tc2luY2UiIGNvbW1hbmQgdG8gZmV0Y2gtcGFjay91cGxvYWQtcGFjaworcHJvdG9jb2wgc28gdGhlIGNsaWVudCBjYW4gcmVxdWVzdCBzaGFsbG93IGNsb25lcyB0aGF0IGFyZSBjdXQgYXQgYQorc3BlY2lmaWMgdGltZSwgaW5zdGVhZCBvZiBkZXB0aC4gSW50ZXJuYWxseSBpdCdzIGVxdWl2YWxlbnQgb2YgZG9pbmcKKyJyZXYtbGlzdCAtLW1heC1hZ2U9PHRpbWVzdGFtcD4iIG9uIHRoZSBzZXJ2ZXIgc2lkZS4gImRlZXBlbi1zaW5jZSIKK2Nhbm5vdCBiZSB1c2VkIHdpdGggImRlZXBlbiIuCisKK2RlZXBlbi1ub3QKKy0tLS0tLS0tLS0KKworVGhpcyBjYXBhYmlsaXR5IGFkZHMgImRlZXBlbi1ub3QiIGNvbW1hbmQgdG8gZmV0Y2gtcGFjay91cGxvYWQtcGFjaworcHJvdG9jb2wgc28gdGhlIGNsaWVudCBjYW4gcmVxdWVzdCBzaGFsbG93IGNsb25lcyB0aGF0IGFyZSBjdXQgYXQgYQorc3BlY2lmaWMgcmV2aXNpb24sIGluc3RlYWQgb2YgZGVwdGguIEludGVybmFsbHkgaXQncyBlcXVpdmFsZW50IG9mCitkb2luZyAicmV2LWxpc3QgLS1ub3QgPHJldj4iIG9uIHRoZSBzZXJ2ZXIgc2lkZS4gImRlZXBlbi1ub3QiCitjYW5ub3QgYmUgdXNlZCB3aXRoICJkZWVwZW4iLCBidXQgY2FuIGJlIHVzZWQgd2l0aCAiZGVlcGVuLXNpbmNlIi4KKworZGVlcGVuLXJlbGF0aXZlCistLS0tLS0tLS0tLS0tLS0KKworSWYgdGhpcyBjYXBhYmlsaXR5IGlzIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50LCB0aGUgc2VtYW50aWNzIG9mCisiZGVlcGVuIiBjb21tYW5kIGlzIGNoYW5nZWQuIFRoZSAiZGVwdGgiIGFyZ3VtZW50IGlzIHRoZSBkZXB0aCBmcm9tCit0aGUgY3VycmVudCBzaGFsbG93IGJvdW5kYXJ5LCBpbnN0ZWFkIG9mIHRoZSBkZXB0aCBmcm9tIHJlbW90ZSByZWZzLgorCituby1wcm9ncmVzcworLS0tLS0tLS0tLS0KKworVGhlIGNsaWVudCB3YXMgc3RhcnRlZCB3aXRoICJnaXQgY2xvbmUgLXEiIG9yIHNvbWV0aGluZywgYW5kIGRvZXNuJ3QKK3dhbnQgdGhhdCBzaWRlIGJhbmQgMi4gIEJhc2ljYWxseSB0aGUgY2xpZW50IGp1c3Qgc2F5cyAiSSBkbyBub3QKK3dpc2ggdG8gcmVjZWl2ZSBzdHJlYW0gMiBvbiBzaWRlYmFuZCwgc28gZG8gbm90IHNlbmQgaXQgdG8gbWUsIGFuZCBpZgoreW91IGRpZCwgSSB3aWxsIGRyb3AgaXQgb24gdGhlIGZsb29yIGFueXdheSIuICBIb3dldmVyLCB0aGUgc2lkZWJhbmQKK2NoYW5uZWwgMyBpcyBzdGlsbCB1c2VkIGZvciBlcnJvciByZXNwb25zZXMuCisKK2luY2x1ZGUtdGFnCistLS0tLS0tLS0tLQorCitUaGUgJ2luY2x1ZGUtdGFnJyBjYXBhYmlsaXR5IGlzIGFib3V0IHNlbmRpbmcgYW5ub3RhdGVkIHRhZ3MgaWYgd2UgYXJlCitzZW5kaW5nIG9iamVjdHMgdGhleSBwb2ludCB0by4gIElmIHdlIHBhY2sgYW4gb2JqZWN0IHRvIHRoZSBjbGllbnQsIGFuZAorYSB0YWcgb2JqZWN0IHBvaW50cyBleGFjdGx5IGF0IHRoYXQgb2JqZWN0LCB3ZSBwYWNrIHRoZSB0YWcgb2JqZWN0IHRvby4KK0luIGdlbmVyYWwgdGhpcyBhbGxvd3MgYSBjbGllbnQgdG8gZ2V0IGFsbCBuZXcgYW5ub3RhdGVkIHRhZ3Mgd2hlbiBpdAorZmV0Y2hlcyBhIGJyYW5jaCwgaW4gYSBzaW5nbGUgbmV0d29yayBjb25uZWN0aW9uLgorCitDbGllbnRzIE1BWSBhbHdheXMgc2VuZCBpbmNsdWRlLXRhZywgaGFyZGNvZGluZyBpdCBpbnRvIGEgcmVxdWVzdCB3aGVuCit0aGUgc2VydmVyIGFkdmVydGlzZXMgdGhpcyBjYXBhYmlsaXR5LiBUaGUgZGVjaXNpb24gZm9yIGEgY2xpZW50IHRvCityZXF1ZXN0IGluY2x1ZGUtdGFnIG9ubHkgaGFzIHRvIGRvIHdpdGggdGhlIGNsaWVudCdzIGRlc2lyZXMgZm9yIHRhZworZGF0YSwgd2hldGhlciBvciBub3QgYSBzZXJ2ZXIgaGFkIGFkdmVydGlzZWQgb2JqZWN0cyBpbiB0aGUKK3JlZnMvdGFncy8qIG5hbWVzcGFjZS4KKworU2VydmVycyBNVVNUIHBhY2sgdGhlIHRhZ3MgaWYgdGhlaXIgcmVmZXJyYW50IGlzIHBhY2tlZCBhbmQgdGhlIGNsaWVudAoraGFzIHJlcXVlc3RlZCBpbmNsdWRlLXRhZ3MuCisKK0NsaWVudHMgTVVTVCBiZSBwcmVwYXJlZCBmb3IgdGhlIGNhc2Ugd2hlcmUgYSBzZXJ2ZXIgaGFzIGlnbm9yZWQKK2luY2x1ZGUtdGFnIGFuZCBoYXMgbm90IGFjdHVhbGx5IHNlbnQgdGFncyBpbiB0aGUgcGFjay4gIEluIHN1Y2gKK2Nhc2VzIHRoZSBjbGllbnQgU0hPVUxEIGlzc3VlIGEgc3Vic2VxdWVudCBmZXRjaCB0byBhY3F1aXJlIHRoZSB0YWdzCit0aGF0IGluY2x1ZGUtdGFnIHdvdWxkIGhhdmUgb3RoZXJ3aXNlIGdpdmVuIHRoZSBjbGllbnQuCisKK1RoZSBzZXJ2ZXIgU0hPVUxEIHNlbmQgaW5jbHVkZS10YWcsIGlmIGl0IHN1cHBvcnRzIGl0LCByZWdhcmRsZXNzCitvZiB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgdGFncyBhdmFpbGFibGUuCisKK3JlcG9ydC1zdGF0dXMKKy0tLS0tLS0tLS0tLS0KKworVGhlIHJlY2VpdmUtcGFjayBwcm9jZXNzIGNhbiByZWNlaXZlIGEgJ3JlcG9ydC1zdGF0dXMnIGNhcGFiaWxpdHksCit3aGljaCB0ZWxscyBpdCB0aGF0IHRoZSBjbGllbnQgd2FudHMgYSByZXBvcnQgb2Ygd2hhdCBoYXBwZW5lZCBhZnRlcgorYSBwYWNrZmlsZSB1cGxvYWQgYW5kIHJlZmVyZW5jZSB1cGRhdGUuICBJZiB0aGUgcHVzaGluZyBjbGllbnQgcmVxdWVzdHMKK3RoaXMgY2FwYWJpbGl0eSwgYWZ0ZXIgdW5wYWNraW5nIGFuZCB1cGRhdGluZyByZWZlcmVuY2VzIHRoZSBzZXJ2ZXIKK3dpbGwgcmVzcG9uZCB3aXRoIHdoZXRoZXIgdGhlIHBhY2tmaWxlIHVucGFja2VkIHN1Y2Nlc3NmdWxseSBhbmQgaWYKK2VhY2ggcmVmZXJlbmNlIHdhcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4gIElmIGFueSBvZiB0aG9zZSB3ZXJlIG5vdAorc3VjY2Vzc2Z1bCwgaXQgd2lsbCBzZW5kIGJhY2sgYW4gZXJyb3IgbWVzc2FnZS4gIFNlZSBwYWNrLXByb3RvY29sLnR4dAorZm9yIGV4YW1wbGUgbWVzc2FnZXMuCisKK2RlbGV0ZS1yZWZzCistLS0tLS0tLS0tLQorCitJZiB0aGUgc2VydmVyIHNlbmRzIGJhY2sgdGhlICdkZWxldGUtcmVmcycgY2FwYWJpbGl0eSwgaXQgbWVhbnMgdGhhdAoraXQgaXMgY2FwYWJsZSBvZiBhY2NlcHRpbmcgYSB6ZXJvLWlkIHZhbHVlIGFzIHRoZSB0YXJnZXQKK3ZhbHVlIG9mIGEgcmVmZXJlbmNlIHVwZGF0ZS4gIEl0IGlzIG5vdCBzZW50IGJhY2sgYnkgdGhlIGNsaWVudCwgaXQKK3NpbXBseSBpbmZvcm1zIHRoZSBjbGllbnQgdGhhdCBpdCBjYW4gYmUgc2VudCB6ZXJvLWlkIHZhbHVlcwordG8gZGVsZXRlIHJlZmVyZW5jZXMuCisKK3F1aWV0CistLS0tLQorCitJZiB0aGUgcmVjZWl2ZS1wYWNrIHNlcnZlciBhZHZlcnRpc2VzIHRoZSAncXVpZXQnIGNhcGFiaWxpdHksIGl0IGlzCitjYXBhYmxlIG9mIHNpbGVuY2luZyBodW1hbi1yZWFkYWJsZSBwcm9ncmVzcyBvdXRwdXQgd2hpY2ggb3RoZXJ3aXNlIG1heQorYmUgc2hvd24gd2hlbiBwcm9jZXNzaW5nIHRoZSByZWNlaXZlZCBwYWNrLiBBIHNlbmQtcGFjayBjbGllbnQgc2hvdWxkCityZXNwb25kIHdpdGggdGhlICdxdWlldCcgY2FwYWJpbGl0eSB0byBzdXBwcmVzcyBzZXJ2ZXItc2lkZSBwcm9ncmVzcworcmVwb3J0aW5nIGlmIHRoZSBsb2NhbCBwcm9ncmVzcyByZXBvcnRpbmcgaXMgYWxzbyBiZWluZyBzdXBwcmVzc2VkCisoZS5nLiwgdmlhIGBwdXNoIC1xYCwgb3IgaWYgc3RkZXJyIGRvZXMgbm90IGdvIHRvIGEgdHR5KS4KKworYXRvbWljCistLS0tLS0KKworSWYgdGhlIHNlcnZlciBzZW5kcyB0aGUgJ2F0b21pYycgY2FwYWJpbGl0eSBpdCBpcyBjYXBhYmxlIG9mIGFjY2VwdGluZworYXRvbWljIHB1c2hlcy4gSWYgdGhlIHB1c2hpbmcgY2xpZW50IHJlcXVlc3RzIHRoaXMgY2FwYWJpbGl0eSwgdGhlIHNlcnZlcgord2lsbCB1cGRhdGUgdGhlIHJlZnMgaW4gb25lIGF0b21pYyB0cmFuc2FjdGlvbi4gRWl0aGVyIGFsbCByZWZzIGFyZQordXBkYXRlZCBvciBub25lLgorCitwdXNoLW9wdGlvbnMKKy0tLS0tLS0tLS0tLQorCitJZiB0aGUgc2VydmVyIHNlbmRzIHRoZSAncHVzaC1vcHRpb25zJyBjYXBhYmlsaXR5IGl0IGlzIGFibGUgdG8gYWNjZXB0CitwdXNoIG9wdGlvbnMgYWZ0ZXIgdGhlIHVwZGF0ZSBjb21tYW5kcyBoYXZlIGJlZW4gc2VudCwgYnV0IGJlZm9yZSB0aGUKK3BhY2tmaWxlIGlzIHN0cmVhbWVkLiBJZiB0aGUgcHVzaGluZyBjbGllbnQgcmVxdWVzdHMgdGhpcyBjYXBhYmlsaXR5LAordGhlIHNlcnZlciB3aWxsIHBhc3MgdGhlIG9wdGlvbnMgdG8gdGhlIHByZS0gYW5kIHBvc3QtIHJlY2VpdmUgaG9va3MKK3RoYXQgcHJvY2VzcyB0aGlzIHB1c2ggcmVxdWVzdC4KKworYWxsb3ctdGlwLXNoYTEtaW4td2FudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB0aGUgdXBsb2FkLXBhY2sgc2VydmVyIGFkdmVydGlzZXMgdGhpcyBjYXBhYmlsaXR5LCBmZXRjaC1wYWNrIG1heQorc2VuZCAid2FudCIgbGluZXMgd2l0aCBTSEEtMXMgdGhhdCBleGlzdCBhdCB0aGUgc2VydmVyIGJ1dCBhcmUgbm90CithZHZlcnRpc2VkIGJ5IHVwbG9hZC1wYWNrLgorCithbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSB1cGxvYWQtcGFjayBzZXJ2ZXIgYWR2ZXJ0aXNlcyB0aGlzIGNhcGFiaWxpdHksIGZldGNoLXBhY2sgbWF5CitzZW5kICJ3YW50IiBsaW5lcyB3aXRoIFNIQS0xcyB0aGF0IGV4aXN0IGF0IHRoZSBzZXJ2ZXIgYnV0IGFyZSBub3QKK2FkdmVydGlzZWQgYnkgdXBsb2FkLXBhY2suCisKK3B1c2gtY2VydD08bm9uY2U+CistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcmVjZWl2ZS1wYWNrIHNlcnZlciB0aGF0IGFkdmVydGlzZXMgdGhpcyBjYXBhYmlsaXR5IGlzIHdpbGxpbmcKK3RvIGFjY2VwdCBhIHNpZ25lZCBwdXNoIGNlcnRpZmljYXRlLCBhbmQgYXNrcyB0aGUgPG5vbmNlPiB0byBiZQoraW5jbHVkZWQgaW4gdGhlIHB1c2ggY2VydGlmaWNhdGUuICBBIHNlbmQtcGFjayBjbGllbnQgTVVTVCBOT1QKK3NlbmQgYSBwdXNoLWNlcnQgcGFja2V0IHVubGVzcyB0aGUgcmVjZWl2ZS1wYWNrIHNlcnZlciBhZHZlcnRpc2VzCit0aGlzIGNhcGFiaWxpdHkuCisKK2ZpbHRlcgorLS0tLS0tCisKK0lmIHRoZSB1cGxvYWQtcGFjayBzZXJ2ZXIgYWR2ZXJ0aXNlcyB0aGUgJ2ZpbHRlcicgY2FwYWJpbGl0eSwKK2ZldGNoLXBhY2sgbWF5IHNlbmQgImZpbHRlciIgY29tbWFuZHMgdG8gcmVxdWVzdCBhIHBhcnRpYWwgY2xvbmUKK29yIHBhcnRpYWwgZmV0Y2ggYW5kIHJlcXVlc3QgdGhhdCB0aGUgc2VydmVyIG9taXQgdmFyaW91cyBvYmplY3RzCitmcm9tIHRoZSBwYWNrZmlsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLWNvbW1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC1jb21tb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZWRiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC1jb21tb24udHh0CkBAIC0wLDAgKzEsOTkgQEAKK0RvY3VtZW50YXRpb24gQ29tbW9uIHRvIFBhY2sgYW5kIEh0dHAgUHJvdG9jb2xzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBQk5GIE5vdGF0aW9uCistLS0tLS0tLS0tLS0tCisKK0FCTkYgbm90YXRpb24gYXMgZGVzY3JpYmVkIGJ5IFJGQyA1MjM0IGlzIHVzZWQgd2l0aGluIHRoZSBwcm90b2NvbCBkb2N1bWVudHMsCitleGNlcHQgdGhlIGZvbGxvd2luZyByZXBsYWNlbWVudCBjb3JlIHJ1bGVzIGFyZSB1c2VkOgorLS0tLQorICBIRVhESUcgICAgPSAgRElHSVQgLyAiYSIgLyAiYiIgLyAiYyIgLyAiZCIgLyAiZSIgLyAiZiIKKy0tLS0KKworV2UgYWxzbyBkZWZpbmUgdGhlIGZvbGxvd2luZyBjb21tb24gcnVsZXM6CistLS0tCisgIE5VTCAgICAgICA9ICAleDAwCisgIHplcm8taWQgICA9ICA0MCoiMCIKKyAgb2JqLWlkICAgID0gIDQwKihIRVhESUdJVCkKKworICByZWZuYW1lICA9ICAiSEVBRCIKKyAgcmVmbmFtZSAvPSAgInJlZnMvIiA8c2VlIGRpc2N1c3Npb24gYmVsb3c+CistLS0tCisKK0EgcmVmbmFtZSBpcyBhIGhpZXJhcmNoaWNhbCBvY3RldCBzdHJpbmcgYmVnaW5uaW5nIHdpdGggInJlZnMvIiBhbmQKK25vdCB2aW9sYXRpbmcgdGhlICdnaXQtY2hlY2stcmVmLWZvcm1hdCcgY29tbWFuZCdzIHZhbGlkYXRpb24gcnVsZXMuCitNb3JlIHNwZWNpZmljYWxseSwgdGhleToKKworLiBUaGV5IGNhbiBpbmNsdWRlIHNsYXNoIGAvYCBmb3IgaGllcmFyY2hpY2FsIChkaXJlY3RvcnkpCisgIGdyb3VwaW5nLCBidXQgbm8gc2xhc2gtc2VwYXJhdGVkIGNvbXBvbmVudCBjYW4gYmVnaW4gd2l0aCBhCisgIGRvdCBgLmAuCisKKy4gVGhleSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGAvYC4gVGhpcyBlbmZvcmNlcyB0aGUgcHJlc2VuY2Ugb2YgYQorICBjYXRlZ29yeSBsaWtlIGBoZWFkcy9gLCBgdGFncy9gIGV0Yy4gYnV0IHRoZSBhY3R1YWwgbmFtZXMgYXJlIG5vdAorICByZXN0cmljdGVkLgorCisuIFRoZXkgY2Fubm90IGhhdmUgdHdvIGNvbnNlY3V0aXZlIGRvdHMgYC4uYCBhbnl3aGVyZS4KKworLiBUaGV5IGNhbm5vdCBoYXZlIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycyAoaS5lLiBieXRlcyB3aG9zZQorICB2YWx1ZXMgYXJlIGxvd2VyIHRoYW4gXDA0MCwgb3IgXDE3NyBgREVMYCksIHNwYWNlLCB0aWxkZSBgfmAsCisgIGNhcmV0IGBeYCwgY29sb24gYDpgLCBxdWVzdGlvbi1tYXJrIGA/YCwgYXN0ZXJpc2sgYCpgLAorICBvciBvcGVuIGJyYWNrZXQgYFtgIGFueXdoZXJlLgorCisuIFRoZXkgY2Fubm90IGVuZCB3aXRoIGEgc2xhc2ggYC9gIG9yIGEgZG90IGAuYC4KKworLiBUaGV5IGNhbm5vdCBlbmQgd2l0aCB0aGUgc2VxdWVuY2UgYC5sb2NrYC4KKworLiBUaGV5IGNhbm5vdCBjb250YWluIGEgc2VxdWVuY2UgYEB7YC4KKworLiBUaGV5IGNhbm5vdCBjb250YWluIGEgYFxcYC4KKworCitwa3QtbGluZSBGb3JtYXQKKy0tLS0tLS0tLS0tLS0tLQorCitNdWNoIChidXQgbm90IGFsbCkgb2YgdGhlIHBheWxvYWQgaXMgZGVzY3JpYmVkIGFyb3VuZCBwa3QtbGluZXMuCisKK0EgcGt0LWxpbmUgaXMgYSB2YXJpYWJsZSBsZW5ndGggYmluYXJ5IHN0cmluZy4gIFRoZSBmaXJzdCBmb3VyIGJ5dGVzCitvZiB0aGUgbGluZSwgdGhlIHBrdC1sZW4sIGluZGljYXRlcyB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBsaW5lLAoraW4gaGV4YWRlY2ltYWwuICBUaGUgcGt0LWxlbiBpbmNsdWRlcyB0aGUgNCBieXRlcyB1c2VkIHRvIGNvbnRhaW4KK3RoZSBsZW5ndGgncyBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi4KKworQSBwa3QtbGluZSBNQVkgY29udGFpbiBiaW5hcnkgZGF0YSwgc28gaW1wbGVtZW50b3JzIE1VU1QgZW5zdXJlCitwa3QtbGluZSBwYXJzaW5nL2Zvcm1hdHRpbmcgcm91dGluZXMgYXJlIDgtYml0IGNsZWFuLgorCitBIG5vbi1iaW5hcnkgbGluZSBTSE9VTEQgQkUgdGVybWluYXRlZCBieSBhbiBMRiwgd2hpY2ggaWYgcHJlc2VudAorTVVTVCBiZSBpbmNsdWRlZCBpbiB0aGUgdG90YWwgbGVuZ3RoLiBSZWNlaXZlcnMgTVVTVCB0cmVhdCBwa3QtbGluZXMKK3dpdGggbm9uLWJpbmFyeSBkYXRhIHRoZSBzYW1lIHdoZXRoZXIgb3Igbm90IHRoZXkgY29udGFpbiB0aGUgdHJhaWxpbmcKK0xGIChzdHJpcHBpbmcgdGhlIExGIGlmIHByZXNlbnQsIGFuZCBub3QgY29tcGxhaW5pbmcgd2hlbiBpdCBpcworbWlzc2luZykuCisKK1RoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIHBrdC1saW5lJ3MgZGF0YSBjb21wb25lbnQgaXMgNjU1MTYgYnl0ZXMuCitJbXBsZW1lbnRhdGlvbnMgTVVTVCBOT1Qgc2VuZCBwa3QtbGluZSB3aG9zZSBsZW5ndGggZXhjZWVkcyA2NTUyMAorKDY1NTE2IGJ5dGVzIG9mIHBheWxvYWQgKyA0IGJ5dGVzIG9mIGxlbmd0aCBkYXRhKS4KKworSW1wbGVtZW50YXRpb25zIFNIT1VMRCBOT1Qgc2VuZCBhbiBlbXB0eSBwa3QtbGluZSAoIjAwMDQiKS4KKworQSBwa3QtbGluZSB3aXRoIGEgbGVuZ3RoIGZpZWxkIG9mIDAgKCIwMDAwIiksIGNhbGxlZCBhIGZsdXNoLXBrdCwKK2lzIGEgc3BlY2lhbCBjYXNlIGFuZCBNVVNUIGJlIGhhbmRsZWQgZGlmZmVyZW50bHkgdGhhbiBhbiBlbXB0eQorcGt0LWxpbmUgKCIwMDA0IikuCisKKy0tLS0KKyAgcGt0LWxpbmUgICAgID0gIGRhdGEtcGt0IC8gZmx1c2gtcGt0CisKKyAgZGF0YS1wa3QgICAgID0gIHBrdC1sZW4gcGt0LXBheWxvYWQKKyAgcGt0LWxlbiAgICAgID0gIDQqKEhFWERJRykKKyAgcGt0LXBheWxvYWQgID0gIChwa3QtbGVuIC0gNCkqKE9DVEVUKQorCisgIGZsdXNoLXBrdCAgICA9ICIwMDAwIgorLS0tLQorCitFeGFtcGxlcyAoYXMgQy1zdHlsZSBzdHJpbmdzKToKKworLS0tLQorICBwa3QtbGluZSAgICAgICAgICBhY3R1YWwgdmFsdWUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICIwMDA2YVxuIiAgICAgICAgICJhXG4iCisgICIwMDA1YSIgICAgICAgICAgICJhIgorICAiMDAwYmZvb2JhclxuIiAgICAiZm9vYmFyXG4iCisgICIwMDA0IiAgICAgICAgICAgICIiCistLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC12Mi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC12Mi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UzNzY2YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLXYyLnR4dApAQCAtMCwwICsxLDQ1NSBAQAorR2l0IFdpcmUgUHJvdG9jb2wsIFZlcnNpb24gMgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRvY3VtZW50IHByZXNlbnRzIGEgc3BlY2lmaWNhdGlvbiBmb3IgYSB2ZXJzaW9uIDIgb2YgR2l0J3Mgd2lyZQorcHJvdG9jb2wuICBQcm90b2NvbCB2MiB3aWxsIGltcHJvdmUgdXBvbiB2MSBpbiB0aGUgZm9sbG93aW5nIHdheXM6CisKKyAgKiBJbnN0ZWFkIG9mIG11bHRpcGxlIHNlcnZpY2UgbmFtZXMsIG11bHRpcGxlIGNvbW1hbmRzIHdpbGwgYmUKKyAgICBzdXBwb3J0ZWQgYnkgYSBzaW5nbGUgc2VydmljZQorICAqIEVhc2lseSBleHRlbmRhYmxlIGFzIGNhcGFiaWxpdGllcyBhcmUgbW92ZWQgaW50byB0aGVpciBvd24gc2VjdGlvbgorICAgIG9mIHRoZSBwcm90b2NvbCwgbm8gbG9uZ2VyIGJlaW5nIGhpZGRlbiBiZWhpbmQgYSBOVUwgYnl0ZSBhbmQKKyAgICBsaW1pdGVkIGJ5IHRoZSBzaXplIG9mIGEgcGt0LWxpbmUKKyAgKiBTZXBhcmF0ZSBvdXQgb3RoZXIgaW5mb3JtYXRpb24gaGlkZGVuIGJlaGluZCBOVUwgYnl0ZXMgKGUuZy4gYWdlbnQKKyAgICBzdHJpbmcgYXMgYSBjYXBhYmlsaXR5IGFuZCBzeW1yZWZzIGNhbiBiZSByZXF1ZXN0ZWQgdXNpbmcgJ2xzLXJlZnMnKQorICAqIFJlZmVyZW5jZSBhZHZlcnRpc2VtZW50IHdpbGwgYmUgb21pdHRlZCB1bmxlc3MgZXhwbGljaXRseSByZXF1ZXN0ZWQKKyAgKiBscy1yZWZzIGNvbW1hbmQgdG8gZXhwbGljaXRseSByZXF1ZXN0IHNvbWUgcmVmcworICAqIERlc2lnbmVkIHdpdGggaHR0cCBhbmQgc3RhdGVsZXNzLXJwYyBpbiBtaW5kLiAgV2l0aCBjbGVhciBmbHVzaAorICAgIHNlbWFudGljcyB0aGUgaHR0cCByZW1vdGUgaGVscGVyIGNhbiBzaW1wbHkgYWN0IGFzIGEgcHJveHkKKworSW4gcHJvdG9jb2wgdjIgY29tbXVuaWNhdGlvbiBpcyBjb21tYW5kIG9yaWVudGVkLiAgV2hlbiBmaXJzdCBjb250YWN0aW5nIGEKK3NlcnZlciBhIGxpc3Qgb2YgY2FwYWJpbGl0aWVzIHdpbGwgYWR2ZXJ0aXNlZC4gIFNvbWUgb2YgdGhlc2UgY2FwYWJpbGl0aWVzCit3aWxsIGJlIGNvbW1hbmRzIHdoaWNoIGEgY2xpZW50IGNhbiByZXF1ZXN0IGJlIGV4ZWN1dGVkLiAgT25jZSBhIGNvbW1hbmQKK2hhcyBjb21wbGV0ZWQsIGEgY2xpZW50IGNhbiByZXVzZSB0aGUgY29ubmVjdGlvbiBhbmQgcmVxdWVzdCB0aGF0IG90aGVyCitjb21tYW5kcyBiZSBleGVjdXRlZC4KKworUGFja2V0LUxpbmUgRnJhbWluZworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgY29tbXVuaWNhdGlvbiBpcyBkb25lIHVzaW5nIHBhY2tldC1saW5lIGZyYW1pbmcsIGp1c3QgYXMgaW4gdjEuICBTZWUKK2BEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLXByb3RvY29sLnR4dGAgYW5kCitgRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtY29tbW9uLnR4dGAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK0luIHByb3RvY29sIHYyIHRoZXNlIHNwZWNpYWwgcGFja2V0cyB3aWxsIGhhdmUgdGhlIGZvbGxvd2luZyBzZW1hbnRpY3M6CisKKyAgKiAnMDAwMCcgRmx1c2ggUGFja2V0IChmbHVzaC1wa3QpIC0gaW5kaWNhdGVzIHRoZSBlbmQgb2YgYSBtZXNzYWdlCisgICogJzAwMDEnIERlbGltaXRlciBQYWNrZXQgKGRlbGltLXBrdCkgLSBzZXBhcmF0ZXMgc2VjdGlvbnMgb2YgYSBtZXNzYWdlCisKK0luaXRpYWwgQ2xpZW50IFJlcXVlc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gZ2VuZXJhbCBhIGNsaWVudCBjYW4gcmVxdWVzdCB0byBzcGVhayBwcm90b2NvbCB2MiBieSBzZW5kaW5nCitgdmVyc2lvbj0yYCB0aHJvdWdoIHRoZSByZXNwZWN0aXZlIHNpZGUtY2hhbm5lbCBmb3IgdGhlIHRyYW5zcG9ydCBiZWluZwordXNlZCB3aGljaCBpbmV2aXRhYmx5IHNldHMgYEdJVF9QUk9UT0NPTGAuICBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZQorZm91bmQgaW4gYHBhY2stcHJvdG9jb2wudHh0YCBhbmQgYGh0dHAtcHJvdG9jb2wudHh0YC4gIEluIGFsbCBjYXNlcyB0aGUKK3Jlc3BvbnNlIGZyb20gdGhlIHNlcnZlciBpcyB0aGUgY2FwYWJpbGl0eSBhZHZlcnRpc2VtZW50LgorCitHaXQgVHJhbnNwb3J0Cit+fn5+fn5+fn5+fn5+CisKK1doZW4gdXNpbmcgdGhlIGdpdDovLyB0cmFuc3BvcnQsIHlvdSBjYW4gcmVxdWVzdCB0byB1c2UgcHJvdG9jb2wgdjIgYnkKK3NlbmRpbmcgInZlcnNpb249MiIgYXMgYW4gZXh0cmEgcGFyYW1ldGVyOgorCisgICAwMDNlZ2l0LXVwbG9hZC1wYWNrIC9wcm9qZWN0LmdpdFwwaG9zdD1teXNlcnZlci5jb21cMFwwdmVyc2lvbj0yXDAKKworU1NIIGFuZCBGaWxlIFRyYW5zcG9ydAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitXaGVuIHVzaW5nIGVpdGhlciB0aGUgc3NoOi8vIG9yIGZpbGU6Ly8gdHJhbnNwb3J0LCB0aGUgR0lUX1BST1RPQ09MCitlbnZpcm9ubWVudCB2YXJpYWJsZSBtdXN0IGJlIHNldCBleHBsaWNpdGx5IHRvIGluY2x1ZGUgInZlcnNpb249MiIuCisKK0hUVFAgVHJhbnNwb3J0Cit+fn5+fn5+fn5+fn5+fgorCitXaGVuIHVzaW5nIHRoZSBodHRwOi8vIG9yIGh0dHBzOi8vIHRyYW5zcG9ydCBhIGNsaWVudCBtYWtlcyBhICJzbWFydCIKK2luZm8vcmVmcyByZXF1ZXN0IGFzIGRlc2NyaWJlZCBpbiBgaHR0cC1wcm90b2NvbC50eHRgIGFuZCByZXF1ZXN0cyB0aGF0Cit2MiBiZSB1c2VkIGJ5IHN1cHBseWluZyAidmVyc2lvbj0yIiBpbiB0aGUgYEdpdC1Qcm90b2NvbGAgaGVhZGVyLgorCisgICBDOiBHRVQgJEdJVF9VUkwvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4wCisgICBDOiBHaXQtUHJvdG9jb2w6IHZlcnNpb249MgorCitBIHYyIHNlcnZlciB3b3VsZCByZXBseToKKworICAgUzogMjAwIE9LCisgICBTOiA8U29tZSBoZWFkZXJzPgorICAgUzogLi4uCisgICBTOgorICAgUzogMDAwZXZlcnNpb24gMlxuCisgICBTOiA8Y2FwYWJpbGl0eS1hZHZlcnRpc2VtZW50PgorCitTdWJzZXF1ZW50IHJlcXVlc3RzIGFyZSB0aGVuIG1hZGUgZGlyZWN0bHkgdG8gdGhlIHNlcnZpY2UKK2AkR0lUX1VSTC9naXQtdXBsb2FkLXBhY2tgLiAoVGhpcyB3b3JrcyB0aGUgc2FtZSBmb3IgZ2l0LXJlY2VpdmUtcGFjaykuCisKK0NhcGFiaWxpdHkgQWR2ZXJ0aXNlbWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Egc2VydmVyIHdoaWNoIGRlY2lkZXMgdG8gY29tbXVuaWNhdGUgKGJhc2VkIG9uIGEgcmVxdWVzdCBmcm9tIGEgY2xpZW50KQordXNpbmcgcHJvdG9jb2wgdmVyc2lvbiAyLCBub3RpZmllcyB0aGUgY2xpZW50IGJ5IHNlbmRpbmcgYSB2ZXJzaW9uIHN0cmluZworaW4gaXRzIGluaXRpYWwgcmVzcG9uc2UgZm9sbG93ZWQgYnkgYW4gYWR2ZXJ0aXNlbWVudCBvZiBpdHMgY2FwYWJpbGl0aWVzLgorRWFjaCBjYXBhYmlsaXR5IGlzIGEga2V5IHdpdGggYW4gb3B0aW9uYWwgdmFsdWUuICBDbGllbnRzIG11c3QgaWdub3JlIGFsbAordW5rbm93biBrZXlzLiAgU2VtYW50aWNzIG9mIHVua25vd24gdmFsdWVzIGFyZSBsZWZ0IHRvIHRoZSBkZWZpbml0aW9uIG9mCitlYWNoIGtleS4gIFNvbWUgY2FwYWJpbGl0aWVzIHdpbGwgZGVzY3JpYmUgY29tbWFuZHMgd2hpY2ggY2FuIGJlIHJlcXVlc3RlZAordG8gYmUgZXhlY3V0ZWQgYnkgdGhlIGNsaWVudC4KKworICAgIGNhcGFiaWxpdHktYWR2ZXJ0aXNlbWVudCA9IHByb3RvY29sLXZlcnNpb24KKwkJCSAgICAgICBjYXBhYmlsaXR5LWxpc3QKKwkJCSAgICAgICBmbHVzaC1wa3QKKworICAgIHByb3RvY29sLXZlcnNpb24gPSBQS1QtTElORSgidmVyc2lvbiAyIiBMRikKKyAgICBjYXBhYmlsaXR5LWxpc3QgPSAqY2FwYWJpbGl0eQorICAgIGNhcGFiaWxpdHkgPSBQS1QtTElORShrZXlbPXZhbHVlXSBMRikKKworICAgIGtleSA9IDEqKEFMUEhBIHwgRElHSVQgfCAiLV8iKQorICAgIHZhbHVlID0gMSooQUxQSEEgfCBESUdJVCB8ICIgLV8uLD9cL3t9W10oKTw+IUAjJCVeJiorPTo7IikKKworQ29tbWFuZCBSZXF1ZXN0CistLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgcmVjZWl2aW5nIHRoZSBjYXBhYmlsaXR5IGFkdmVydGlzZW1lbnQsIGEgY2xpZW50IGNhbiB0aGVuIGlzc3VlIGEKK3JlcXVlc3QgdG8gc2VsZWN0IHRoZSBjb21tYW5kIGl0IHdhbnRzIHdpdGggYW55IHBhcnRpY3VsYXIgY2FwYWJpbGl0aWVzCitvciBhcmd1bWVudHMuICBUaGVyZSBpcyB0aGVuIGFuIG9wdGlvbmFsIHNlY3Rpb24gd2hlcmUgdGhlIGNsaWVudCBjYW4KK3Byb3ZpZGUgYW55IGNvbW1hbmQgc3BlY2lmaWMgcGFyYW1ldGVycyBvciBxdWVyaWVzLiAgT25seSBhIHNpbmdsZQorY29tbWFuZCBjYW4gYmUgcmVxdWVzdGVkIGF0IGEgdGltZS4KKworICAgIHJlcXVlc3QgPSBlbXB0eS1yZXF1ZXN0IHwgY29tbWFuZC1yZXF1ZXN0CisgICAgZW1wdHktcmVxdWVzdCA9IGZsdXNoLXBrdAorICAgIGNvbW1hbmQtcmVxdWVzdCA9IGNvbW1hbmQKKwkJICAgICAgY2FwYWJpbGl0eS1saXN0CisJCSAgICAgIFtjb21tYW5kLWFyZ3NdCisJCSAgICAgIGZsdXNoLXBrdAorICAgIGNvbW1hbmQgPSBQS1QtTElORSgiY29tbWFuZD0iIGtleSBMRikKKyAgICBjb21tYW5kLWFyZ3MgPSBkZWxpbS1wa3QKKwkJICAgKmNvbW1hbmQtc3BlY2lmaWMtYXJnCisKKyAgICBjb21tYW5kLXNwZWNpZmljLWFyZ3MgYXJlIHBhY2tldCBsaW5lIGZyYW1lZCBhcmd1bWVudHMgZGVmaW5lZCBieQorICAgIGVhY2ggaW5kaXZpZHVhbCBjb21tYW5kLgorCitUaGUgc2VydmVyIHdpbGwgdGhlbiBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGUgY2xpZW50J3MgcmVxdWVzdCBpcworY29tcHJpc2VkIG9mIGEgdmFsaWQgY29tbWFuZCBhcyB3ZWxsIGFzIHZhbGlkIGNhcGFiaWxpdGllcyB3aGljaCB3ZXJlCithZHZlcnRpc2VkLiAgSWYgdGhlIHJlcXVlc3QgaXMgdmFsaWQgdGhlIHNlcnZlciB3aWxsIHRoZW4gZXhlY3V0ZSB0aGUKK2NvbW1hbmQuICBBIHNlcnZlciBNVVNUIHdhaXQgdGlsbCBpdCBoYXMgcmVjZWl2ZWQgdGhlIGNsaWVudCdzIGVudGlyZQorcmVxdWVzdCBiZWZvcmUgaXNzdWluZyBhIHJlc3BvbnNlLiAgVGhlIGZvcm1hdCBvZiB0aGUgcmVzcG9uc2UgaXMKK2RldGVybWluZWQgYnkgdGhlIGNvbW1hbmQgYmVpbmcgZXhlY3V0ZWQsIGJ1dCBpbiBhbGwgY2FzZXMgYSBmbHVzaC1wa3QKK2luZGljYXRlcyB0aGUgZW5kIG9mIHRoZSByZXNwb25zZS4KKworV2hlbiBhIGNvbW1hbmQgaGFzIGZpbmlzaGVkLCBhbmQgdGhlIGNsaWVudCBoYXMgcmVjZWl2ZWQgdGhlIGVudGlyZQorcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLCBhIGNsaWVudCBjYW4gZWl0aGVyIHJlcXVlc3QgdGhhdCBhbm90aGVyCitjb21tYW5kIGJlIGV4ZWN1dGVkIG9yIGNhbiB0ZXJtaW5hdGUgdGhlIGNvbm5lY3Rpb24uICBBIGNsaWVudCBtYXkKK29wdGlvbmFsbHkgc2VuZCBhbiBlbXB0eSByZXF1ZXN0IGNvbnNpc3Rpbmcgb2YganVzdCBhIGZsdXNoLXBrdCB0bworaW5kaWNhdGUgdGhhdCBubyBtb3JlIHJlcXVlc3RzIHdpbGwgYmUgbWFkZS4KKworQ2FwYWJpbGl0aWVzCistLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgdHlwZXMgb2YgY2FwYWJpbGl0aWVzOiBub3JtYWwgY2FwYWJpbGl0aWVzLAord2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udmV5IGluZm9ybWF0aW9uIG9yIGFsdGVyIHRoZSBiZWhhdmlvciBvZiBhCityZXF1ZXN0LCBhbmQgY29tbWFuZHMsIHdoaWNoIGFyZSB0aGUgY29yZSBhY3Rpb25zIHRoYXQgYSBjbGllbnQgd2FudHMgdG8KK3BlcmZvcm0gKGZldGNoLCBwdXNoLCBldGMpLgorCitQcm90b2NvbCB2ZXJzaW9uIDIgaXMgc3RhdGVsZXNzIGJ5IGRlZmF1bHQuICBUaGlzIG1lYW5zIHRoYXQgYWxsIGNvbW1hbmRzCittdXN0IG9ubHkgbGFzdCBhIHNpbmdsZSByb3VuZCBhbmQgYmUgc3RhdGVsZXNzIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZQorc2VydmVyIHNpZGUsIHVubGVzcyB0aGUgY2xpZW50IGhhcyByZXF1ZXN0ZWQgYSBjYXBhYmlsaXR5IGluZGljYXRpbmcgdGhhdAorc3RhdGUgc2hvdWxkIGJlIG1haW50YWluZWQgYnkgdGhlIHNlcnZlci4gIENsaWVudHMgTVVTVCBOT1QgcmVxdWlyZSBzdGF0ZQorbWFuYWdlbWVudCBvbiB0aGUgc2VydmVyIHNpZGUgaW4gb3JkZXIgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiAgVGhpcworcGVybWl0cyBzaW1wbGUgcm91bmQtcm9iaW4gbG9hZC1iYWxhbmNpbmcgb24gdGhlIHNlcnZlciBzaWRlLCB3aXRob3V0CituZWVkaW5nIHRvIHdvcnJ5IGFib3V0IHN0YXRlIG1hbmFnZW1lbnQuCisKK2FnZW50Cit+fn5+fgorCitUaGUgc2VydmVyIGNhbiBhZHZlcnRpc2UgdGhlIGBhZ2VudGAgY2FwYWJpbGl0eSB3aXRoIGEgdmFsdWUgYFhgIChpbiB0aGUKK2Zvcm0gYGFnZW50PVhgKSB0byBub3RpZnkgdGhlIGNsaWVudCB0aGF0IHRoZSBzZXJ2ZXIgaXMgcnVubmluZyB2ZXJzaW9uCitgWGAuICBUaGUgY2xpZW50IG1heSBvcHRpb25hbGx5IHNlbmQgaXRzIG93biBhZ2VudCBzdHJpbmcgYnkgaW5jbHVkaW5nCit0aGUgYGFnZW50YCBjYXBhYmlsaXR5IHdpdGggYSB2YWx1ZSBgWWAgKGluIHRoZSBmb3JtIGBhZ2VudD1ZYCkgaW4gaXRzCityZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgKGJ1dCBpdCBNVVNUIE5PVCBkbyBzbyBpZiB0aGUgc2VydmVyIGRpZCBub3QKK2FkdmVydGlzZSB0aGUgYWdlbnQgY2FwYWJpbGl0eSkuIFRoZSBgWGAgYW5kIGBZYCBzdHJpbmdzIG1heSBjb250YWluIGFueQorcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMgZXhjZXB0IHNwYWNlIChpLmUuLCB0aGUgYnl0ZSByYW5nZSAzMiA8IHggPAorMTI3KSwgYW5kIGFyZSB0eXBpY2FsbHkgb2YgdGhlIGZvcm0gInBhY2thZ2UvdmVyc2lvbiIgKGUuZy4sCisiZ2l0LzEuOC4zLjEiKS4gVGhlIGFnZW50IHN0cmluZ3MgYXJlIHB1cmVseSBpbmZvcm1hdGl2ZSBmb3Igc3RhdGlzdGljcworYW5kIGRlYnVnZ2luZyBwdXJwb3NlcywgYW5kIE1VU1QgTk9UIGJlIHVzZWQgdG8gcHJvZ3JhbW1hdGljYWxseSBhc3N1bWUKK3RoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHBhcnRpY3VsYXIgZmVhdHVyZXMuCisKK2xzLXJlZnMKK35+fn5+fn4KKworYGxzLXJlZnNgIGlzIHRoZSBjb21tYW5kIHVzZWQgdG8gcmVxdWVzdCBhIHJlZmVyZW5jZSBhZHZlcnRpc2VtZW50IGluIHYyLgorVW5saWtlIHRoZSBjdXJyZW50IHJlZmVyZW5jZSBhZHZlcnRpc2VtZW50LCBscy1yZWZzIHRha2VzIGluIGFyZ3VtZW50cword2hpY2ggY2FuIGJlIHVzZWQgdG8gbGltaXQgdGhlIHJlZnMgc2VudCBmcm9tIHRoZSBzZXJ2ZXIuCisKK0FkZGl0aW9uYWwgZmVhdHVyZXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgYmFzZSBjb21tYW5kIHdpbGwgYmUgYWR2ZXJ0aXNlZAorYXMgdGhlIHZhbHVlIG9mIHRoZSBjb21tYW5kIGluIHRoZSBjYXBhYmlsaXR5IGFkdmVydGlzZW1lbnQgaW4gdGhlIGZvcm0KK29mIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZmVhdHVyZXM6ICI8Y29tbWFuZD49PGZlYXR1cmUgMT4gPGZlYXR1cmUgMj4iCisKK2xzLXJlZnMgdGFrZXMgaW4gdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CisKKyAgICBzeW1yZWZzCisJSW4gYWRkaXRpb24gdG8gdGhlIG9iamVjdCBwb2ludGVkIGJ5IGl0LCBzaG93IHRoZSB1bmRlcmx5aW5nIHJlZgorCXBvaW50ZWQgYnkgaXQgd2hlbiBzaG93aW5nIGEgc3ltYm9saWMgcmVmLgorICAgIHBlZWwKKwlTaG93IHBlZWxlZCB0YWdzLgorICAgIHJlZi1wcmVmaXggPHByZWZpeD4KKwlXaGVuIHNwZWNpZmllZCwgb25seSByZWZlcmVuY2VzIGhhdmluZyBhIHByZWZpeCBtYXRjaGluZyBvbmUgb2YKKwl0aGUgcHJvdmlkZWQgcHJlZml4ZXMgYXJlIGRpc3BsYXllZC4KKworVGhlIG91dHB1dCBvZiBscy1yZWZzIGlzIGFzIGZvbGxvd3M6CisKKyAgICBvdXRwdXQgPSAqcmVmCisJICAgICBmbHVzaC1wa3QKKyAgICByZWYgPSBQS1QtTElORShvYmotaWQgU1AgcmVmbmFtZSAqKFNQIHJlZi1hdHRyaWJ1dGUpIExGKQorICAgIHJlZi1hdHRyaWJ1dGUgPSAoc3ltcmVmIHwgcGVlbGVkKQorICAgIHN5bXJlZiA9ICJzeW1yZWYtdGFyZ2V0OiIgc3ltcmVmLXRhcmdldAorICAgIHBlZWxlZCA9ICJwZWVsZWQ6IiBvYmotaWQKKworZmV0Y2gKK35+fn5+CisKK2BmZXRjaGAgaXMgdGhlIGNvbW1hbmQgdXNlZCB0byBmZXRjaCBhIHBhY2tmaWxlIGluIHYyLiAgSXQgY2FuIGJlIGxvb2tlZAorYXQgYXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSB2MSBmZXRjaCB3aGVyZSB0aGUgcmVmLWFkdmVydGlzZW1lbnQgaXMKK3N0cmlwcGVkIG91dCAoc2luY2UgdGhlIGBscy1yZWZzYCBjb21tYW5kIGZpbGxzIHRoYXQgcm9sZSkgYW5kIHRoZQorbWVzc2FnZSBmb3JtYXQgaXMgdHdlYWtlZCB0byBlbGltaW5hdGUgcmVkdW5kYW5jaWVzIGFuZCBwZXJtaXQgZWFzeQorYWRkaXRpb24gb2YgZnV0dXJlIGV4dGVuc2lvbnMuCisKK0FkZGl0aW9uYWwgZmVhdHVyZXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgYmFzZSBjb21tYW5kIHdpbGwgYmUgYWR2ZXJ0aXNlZAorYXMgdGhlIHZhbHVlIG9mIHRoZSBjb21tYW5kIGluIHRoZSBjYXBhYmlsaXR5IGFkdmVydGlzZW1lbnQgaW4gdGhlIGZvcm0KK29mIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZmVhdHVyZXM6ICI8Y29tbWFuZD49PGZlYXR1cmUgMT4gPGZlYXR1cmUgMj4iCisKK0EgYGZldGNoYCByZXF1ZXN0IGNhbiB0YWtlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOgorCisgICAgd2FudCA8b2lkPgorCUluZGljYXRlcyB0byB0aGUgc2VydmVyIGFuIG9iamVjdCB3aGljaCB0aGUgY2xpZW50IHdhbnRzIHRvCisJcmV0cmlldmUuICBXYW50cyBjYW4gYmUgYW55dGhpbmcgYW5kIGFyZSBub3QgbGltaXRlZCB0bworCWFkdmVydGlzZWQgb2JqZWN0cy4KKworICAgIGhhdmUgPG9pZD4KKwlJbmRpY2F0ZXMgdG8gdGhlIHNlcnZlciBhbiBvYmplY3Qgd2hpY2ggdGhlIGNsaWVudCBoYXMgbG9jYWxseS4KKwlUaGlzIGFsbG93cyB0aGUgc2VydmVyIHRvIG1ha2UgYSBwYWNrZmlsZSB3aGljaCBvbmx5IGNvbnRhaW5zCisJdGhlIG9iamVjdHMgdGhhdCB0aGUgY2xpZW50IG5lZWRzLiBNdWx0aXBsZSAnaGF2ZScgbGluZXMgY2FuIGJlCisJc3VwcGxpZWQuCisKKyAgICBkb25lCisJSW5kaWNhdGVzIHRvIHRoZSBzZXJ2ZXIgdGhhdCBuZWdvdGlhdGlvbiBzaG91bGQgdGVybWluYXRlIChvcgorCW5vdCBldmVuIGJlZ2luIGlmIHBlcmZvcm1pbmcgYSBjbG9uZSkgYW5kIHRoYXQgdGhlIHNlcnZlciBzaG91bGQKKwl1c2UgdGhlIGluZm9ybWF0aW9uIHN1cHBsaWVkIGluIHRoZSByZXF1ZXN0IHRvIGNvbnN0cnVjdCB0aGUKKwlwYWNrZmlsZS4KKworICAgIHRoaW4tcGFjaworCVJlcXVlc3QgdGhhdCBhIHRoaW4gcGFjayBiZSBzZW50LCB3aGljaCBpcyBhIHBhY2sgd2l0aCBkZWx0YXMKKwl3aGljaCByZWZlcmVuY2UgYmFzZSBvYmplY3RzIG5vdCBjb250YWluZWQgd2l0aGluIHRoZSBwYWNrIChidXQKKwlhcmUga25vd24gdG8gZXhpc3QgYXQgdGhlIHJlY2VpdmluZyBlbmQpLiBUaGlzIGNhbiByZWR1Y2UgdGhlCisJbmV0d29yayB0cmFmZmljIHNpZ25pZmljYW50bHksIGJ1dCBpdCByZXF1aXJlcyB0aGUgcmVjZWl2aW5nIGVuZAorCXRvIGtub3cgaG93IHRvICJ0aGlja2VuIiB0aGVzZSBwYWNrcyBieSBhZGRpbmcgdGhlIG1pc3NpbmcgYmFzZXMKKwl0byB0aGUgcGFjay4KKworICAgIG5vLXByb2dyZXNzCisJUmVxdWVzdCB0aGF0IHByb2dyZXNzIGluZm9ybWF0aW9uIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgc2VudCBvbgorCXNpZGUtYmFuZCBjaGFubmVsIDIsIGR1cmluZyB0aGUgcGFja2ZpbGUgdHJhbnNmZXIsIHNob3VsZCBub3QgYmUKKwlzZW50LiAgSG93ZXZlciwgdGhlIHNpZGUtYmFuZCBjaGFubmVsIDMgaXMgc3RpbGwgdXNlZCBmb3IgZXJyb3IKKwlyZXNwb25zZXMuCisKKyAgICBpbmNsdWRlLXRhZworCVJlcXVlc3QgdGhhdCBhbm5vdGF0ZWQgdGFncyBzaG91bGQgYmUgc2VudCBpZiB0aGUgb2JqZWN0cyB0aGV5CisJcG9pbnQgdG8gYXJlIGJlaW5nIHNlbnQuCisKKyAgICBvZnMtZGVsdGEKKwlJbmRpY2F0ZSB0aGF0IHRoZSBjbGllbnQgdW5kZXJzdGFuZHMgUEFDS3YyIHdpdGggZGVsdGEgcmVmZXJyaW5nCisJdG8gaXRzIGJhc2UgYnkgcG9zaXRpb24gaW4gcGFjayByYXRoZXIgdGhhbiBieSBhbiBvaWQuICBUaGF0IGlzLAorCXRoZXkgY2FuIHJlYWQgT0JKX09GU19ERUxUQSAoYWthIHR5cGUgNikgaW4gYSBwYWNrZmlsZS4KKworSWYgdGhlICdzaGFsbG93JyBmZWF0dXJlIGlzIGFkdmVydGlzZWQgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgY2FuIGJlCitpbmNsdWRlZCBpbiB0aGUgY2xpZW50cyByZXF1ZXN0IGFzIHdlbGwgYXMgdGhlIHBvdGVudGlhbCBhZGRpdGlvbiBvZiB0aGUKKydzaGFsbG93LWluZm8nIHNlY3Rpb24gaW4gdGhlIHNlcnZlcidzIHJlc3BvbnNlIGFzIGV4cGxhaW5lZCBiZWxvdy4KKworICAgIHNoYWxsb3cgPG9pZD4KKwlBIGNsaWVudCBtdXN0IG5vdGlmeSB0aGUgc2VydmVyIG9mIGFsbCBjb21taXRzIGZvciB3aGljaCBpdCBvbmx5CisJaGFzIHNoYWxsb3cgY29waWVzIChtZWFuaW5nIHRoYXQgaXQgZG9lc24ndCBoYXZlIHRoZSBwYXJlbnRzIG9mCisJYSBjb21taXQpIGJ5IHN1cHBseWluZyBhICdzaGFsbG93IDxvaWQ+JyBsaW5lIGZvciBlYWNoIHN1Y2gKKwlvYmplY3Qgc28gdGhhdCB0aGUgc2VydmVyIGlzIGF3YXJlIG9mIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUKKwljbGllbnQncyBoaXN0b3J5LiAgVGhpcyBpcyBzbyB0aGF0IHRoZSBzZXJ2ZXIgaXMgYXdhcmUgdGhhdCB0aGUKKwljbGllbnQgbWF5IG5vdCBoYXZlIGFsbCBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHN1Y2ggY29tbWl0cy4KKworICAgIGRlZXBlbiA8ZGVwdGg+CisJUmVxdWVzdHMgdGhhdCB0aGUgZmV0Y2gvY2xvbmUgc2hvdWxkIGJlIHNoYWxsb3cgaGF2aW5nIGEgY29tbWl0CisJZGVwdGggb2YgPGRlcHRoPiByZWxhdGl2ZSB0byB0aGUgcmVtb3RlIHNpZGUuCisKKyAgICBkZWVwZW4tcmVsYXRpdmUKKwlSZXF1ZXN0cyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgdGhlICJkZWVwZW4iIGNvbW1hbmQgYmUgY2hhbmdlZAorCXRvIGluZGljYXRlIHRoYXQgdGhlIGRlcHRoIHJlcXVlc3RlZCBpcyByZWxhdGl2ZSB0byB0aGUgY2xpZW50J3MKKwljdXJyZW50IHNoYWxsb3cgYm91bmRhcnksIGluc3RlYWQgb2YgcmVsYXRpdmUgdG8gdGhlIHJlcXVlc3RlZAorCWNvbW1pdHMuCisKKyAgICBkZWVwZW4tc2luY2UgPHRpbWVzdGFtcD4KKwlSZXF1ZXN0cyB0aGF0IHRoZSBzaGFsbG93IGNsb25lL2ZldGNoIHNob3VsZCBiZSBjdXQgYXQgYQorCXNwZWNpZmljIHRpbWUsIGluc3RlYWQgb2YgZGVwdGguICBJbnRlcm5hbGx5IGl0J3MgZXF1aXZhbGVudCB0bworCWRvaW5nICJnaXQgcmV2LWxpc3QgLS1tYXgtYWdlPTx0aW1lc3RhbXA+Ii4gQ2Fubm90IGJlIHVzZWQgd2l0aAorCSJkZWVwZW4iLgorCisgICAgZGVlcGVuLW5vdCA8cmV2PgorCVJlcXVlc3RzIHRoYXQgdGhlIHNoYWxsb3cgY2xvbmUvZmV0Y2ggc2hvdWxkIGJlIGN1dCBhdCBhCisJc3BlY2lmaWMgcmV2aXNpb24gc3BlY2lmaWVkIGJ5ICc8cmV2PicsIGluc3RlYWQgb2YgYSBkZXB0aC4KKwlJbnRlcm5hbGx5IGl0J3MgZXF1aXZhbGVudCBvZiBkb2luZyAiZ2l0IHJldi1saXN0IC0tbm90IDxyZXY+Ii4KKwlDYW5ub3QgYmUgdXNlZCB3aXRoICJkZWVwZW4iLCBidXQgY2FuIGJlIHVzZWQgd2l0aAorCSJkZWVwZW4tc2luY2UiLgorCitJZiB0aGUgJ2ZpbHRlcicgZmVhdHVyZSBpcyBhZHZlcnRpc2VkLCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50IGNhbiBiZQoraW5jbHVkZWQgaW4gdGhlIGNsaWVudCdzIHJlcXVlc3Q6CisKKyAgICBmaWx0ZXIgPGZpbHRlci1zcGVjPgorCVJlcXVlc3QgdGhhdCB2YXJpb3VzIG9iamVjdHMgZnJvbSB0aGUgcGFja2ZpbGUgYmUgb21pdHRlZAorCXVzaW5nIG9uZSBvZiBzZXZlcmFsIGZpbHRlcmluZyB0ZWNobmlxdWVzLiBUaGVzZSBhcmUgaW50ZW5kZWQKKwlmb3IgdXNlIHdpdGggcGFydGlhbCBjbG9uZSBhbmQgcGFydGlhbCBmZXRjaCBvcGVyYXRpb25zLiBTZWUKKwlgcmV2LWxpc3RgIGZvciBwb3NzaWJsZSAiZmlsdGVyLXNwZWMiIHZhbHVlcy4gV2hlbiBjb21tdW5pY2F0aW5nCisJd2l0aCBvdGhlciBwcm9jZXNzZXMsIHNlbmRlcnMgU0hPVUxEIHRyYW5zbGF0ZSBzY2FsZWQgaW50ZWdlcnMKKwkoZS5nLiAiMWsiKSBpbnRvIGEgZnVsbHktZXhwYW5kZWQgZm9ybSAoZS5nLiAiMTAyNCIpIHRvIGFpZAorCWludGVyb3BlcmFiaWxpdHkgd2l0aCBvbGRlciByZWNlaXZlcnMgdGhhdCBtYXkgbm90IHVuZGVyc3RhbmQKKwluZXdseS1pbnZlbnRlZCBzY2FsaW5nIHN1ZmZpeGVzLiBIb3dldmVyLCByZWNlaXZlcnMgU0hPVUxECisJYWNjZXB0IHRoZSBmb2xsb3dpbmcgc3VmZml4ZXM6ICdrJywgJ20nLCBhbmQgJ2cnIGZvciAxMDI0LAorCTEwNDg1NzYsIGFuZCAxMDczNzQxODI0LCByZXNwZWN0aXZlbHkuCisKK0lmIHRoZSAncmVmLWluLXdhbnQnIGZlYXR1cmUgaXMgYWR2ZXJ0aXNlZCwgdGhlIGZvbGxvd2luZyBhcmd1bWVudCBjYW4KK2JlIGluY2x1ZGVkIGluIHRoZSBjbGllbnQncyByZXF1ZXN0IGFzIHdlbGwgYXMgdGhlIHBvdGVudGlhbCBhZGRpdGlvbiBvZgordGhlICd3YW50ZWQtcmVmcycgc2VjdGlvbiBpbiB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgYXMgZXhwbGFpbmVkIGJlbG93LgorCisgICAgd2FudC1yZWYgPHJlZj4KKwlJbmRpY2F0ZXMgdG8gdGhlIHNlcnZlciB0aGF0IHRoZSBjbGllbnQgd2FudHMgdG8gcmV0cmlldmUgYQorCXBhcnRpY3VsYXIgcmVmLCB3aGVyZSA8cmVmPiBpcyB0aGUgZnVsbCBuYW1lIG9mIGEgcmVmIG9uIHRoZQorCXNlcnZlci4KKworSWYgdGhlICdzaWRlYmFuZC1hbGwnIGZlYXR1cmUgaXMgYWR2ZXJ0aXNlZCwgdGhlIGZvbGxvd2luZyBhcmd1bWVudCBjYW4gYmUKK2luY2x1ZGVkIGluIHRoZSBjbGllbnQncyByZXF1ZXN0OgorCisgICAgc2lkZWJhbmQtYWxsCisJSW5zdHJ1Y3QgdGhlIHNlcnZlciB0byBzZW5kIHRoZSB3aG9sZSByZXNwb25zZSBtdWx0aXBsZXhlZCwgbm90IGp1c3QKKwl0aGUgcGFja2ZpbGUgc2VjdGlvbi4gQWxsIG5vbi1mbHVzaCBhbmQgbm9uLWRlbGltIFBLVC1MSU5FIGluIHRoZQorCXJlc3BvbnNlIChub3Qgb25seSBpbiB0aGUgcGFja2ZpbGUgc2VjdGlvbikgd2lsbCB0aGVuIHN0YXJ0IHdpdGggYSBieXRlCisJaW5kaWNhdGluZyBpdHMgc2lkZWJhbmQgKDEsIDIsIG9yIDMpLCBhbmQgdGhlIHNlcnZlciBtYXkgc2VuZCAiMDAwNVwyIgorCShhIFBLVC1MSU5FIG9mIHNpZGViYW5kIDIgd2l0aCBubyBwYXlsb2FkKSBhcyBhIGtlZXBhbGl2ZSBwYWNrZXQuCisKK1RoZSByZXNwb25zZSBvZiBgZmV0Y2hgIGlzIGJyb2tlbiBpbnRvIGEgbnVtYmVyIG9mIHNlY3Rpb25zIHNlcGFyYXRlZCBieQorZGVsaW1pdGVyIHBhY2tldHMgKDAwMDEpLCB3aXRoIGVhY2ggc2VjdGlvbiBiZWdpbm5pbmcgd2l0aCBpdHMgc2VjdGlvbgoraGVhZGVyLgorCisgICAgb3V0cHV0ID0gKnNlY3Rpb24KKyAgICBzZWN0aW9uID0gKGFja25vd2xlZGdtZW50cyB8IHNoYWxsb3ctaW5mbyB8IHdhbnRlZC1yZWZzIHwgcGFja2ZpbGUpCisJICAgICAgKGZsdXNoLXBrdCB8IGRlbGltLXBrdCkKKworICAgIGFja25vd2xlZGdtZW50cyA9IFBLVC1MSU5FKCJhY2tub3dsZWRnbWVudHMiIExGKQorCQkgICAgICAobmFrIHwgKmFjaykKKwkJICAgICAgKHJlYWR5KQorICAgIHJlYWR5ID0gUEtULUxJTkUoInJlYWR5IiBMRikKKyAgICBuYWsgPSBQS1QtTElORSgiTkFLIiBMRikKKyAgICBhY2sgPSBQS1QtTElORSgiQUNLIiBTUCBvYmotaWQgTEYpCisKKyAgICBzaGFsbG93LWluZm8gPSBQS1QtTElORSgic2hhbGxvdy1pbmZvIiBMRikKKwkJICAgKlBLVC1MSU5FKChzaGFsbG93IHwgdW5zaGFsbG93KSBMRikKKyAgICBzaGFsbG93ID0gInNoYWxsb3ciIFNQIG9iai1pZAorICAgIHVuc2hhbGxvdyA9ICJ1bnNoYWxsb3ciIFNQIG9iai1pZAorCisgICAgd2FudGVkLXJlZnMgPSBQS1QtTElORSgid2FudGVkLXJlZnMiIExGKQorCQkgICpQS1QtTElORSh3YW50ZWQtcmVmIExGKQorICAgIHdhbnRlZC1yZWYgPSBvYmotaWQgU1AgcmVmbmFtZQorCisgICAgcGFja2ZpbGUgPSBQS1QtTElORSgicGFja2ZpbGUiIExGKQorCSAgICAgICAqUEtULUxJTkUoJXgwMS0wMyAqJXgwMC1mZikKKworICAgIGFja25vd2xlZGdtZW50cyBzZWN0aW9uCisJKiBJZiB0aGUgY2xpZW50IGRldGVybWluZXMgdGhhdCBpdCBpcyBmaW5pc2hlZCB3aXRoIG5lZ290aWF0aW9ucworCSAgYnkgc2VuZGluZyBhICJkb25lIiBsaW5lLCB0aGUgYWNrbm93bGVkZ21lbnRzIHNlY3Rpb25zIE1VU1QgYmUKKwkgIG9taXR0ZWQgZnJvbSB0aGUgc2VydmVyJ3MgcmVzcG9uc2UuCisKKwkqIEFsd2F5cyBiZWdpbnMgd2l0aCB0aGUgc2VjdGlvbiBoZWFkZXIgImFja25vd2xlZGdtZW50cyIKKworCSogVGhlIHNlcnZlciB3aWxsIHJlc3BvbmQgd2l0aCAiTkFLIiBpZiBub25lIG9mIHRoZSBvYmplY3QgaWRzIHNlbnQKKwkgIGFzIGhhdmUgbGluZXMgd2VyZSBjb21tb24uCisKKwkqIFRoZSBzZXJ2ZXIgd2lsbCByZXNwb25kIHdpdGggIkFDSyBvYmotaWQiIGZvciBhbGwgb2YgdGhlCisJICBvYmplY3QgaWRzIHNlbnQgYXMgaGF2ZSBsaW5lcyB3aGljaCBhcmUgY29tbW9uLgorCisJKiBBIHJlc3BvbnNlIGNhbm5vdCBoYXZlIGJvdGggIkFDSyIgbGluZXMgYXMgd2VsbCBhcyBhICJOQUsiCisJICBsaW5lLgorCisJKiBUaGUgc2VydmVyIHdpbGwgcmVzcG9uZCB3aXRoIGEgInJlYWR5IiBsaW5lIGluZGljYXRpbmcgdGhhdAorCSAgdGhlIHNlcnZlciBoYXMgZm91bmQgYW4gYWNjZXB0YWJsZSBjb21tb24gYmFzZSBhbmQgaXMgcmVhZHkgdG8KKwkgIG1ha2UgYW5kIHNlbmQgYSBwYWNrZmlsZSAod2hpY2ggd2lsbCBiZSBmb3VuZCBpbiB0aGUgcGFja2ZpbGUKKwkgIHNlY3Rpb24gb2YgdGhlIHNhbWUgcmVzcG9uc2UpCisKKwkqIElmIHRoZSBzZXJ2ZXIgaGFzIGZvdW5kIGEgc3VpdGFibGUgY3V0IHBvaW50IGFuZCBoYXMgZGVjaWRlZAorCSAgdG8gc2VuZCBhICJyZWFkeSIgbGluZSwgdGhlbiB0aGUgc2VydmVyIGNhbiBkZWNpZGUgdG8gKGFzIGFuCisJICBvcHRpbWl6YXRpb24pIG9taXQgYW55ICJBQ0siIGxpbmVzIGl0IHdvdWxkIGhhdmUgc2VudCBkdXJpbmcKKwkgIGl0cyByZXNwb25zZS4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgc2VydmVyIHdpbGwgaGF2ZSBhbHJlYWR5CisJICBkZXRlcm1pbmVkIHRoZSBvYmplY3RzIGl0IHBsYW5zIHRvIHNlbmQgdG8gdGhlIGNsaWVudCBhbmQgbm8KKwkgIGZ1cnRoZXIgbmVnb3RpYXRpb24gaXMgbmVlZGVkLgorCisgICAgc2hhbGxvdy1pbmZvIHNlY3Rpb24KKwkqIElmIHRoZSBjbGllbnQgaGFzIHJlcXVlc3RlZCBhIHNoYWxsb3cgZmV0Y2gvY2xvbmUsIGEgc2hhbGxvdworCSAgY2xpZW50IHJlcXVlc3RzIGEgZmV0Y2ggb3IgdGhlIHNlcnZlciBpcyBzaGFsbG93IHRoZW4gdGhlCisJICBzZXJ2ZXIncyByZXNwb25zZSBtYXkgaW5jbHVkZSBhIHNoYWxsb3ctaW5mbyBzZWN0aW9uLiAgVGhlCisJICBzaGFsbG93LWluZm8gc2VjdGlvbiB3aWxsIGJlIGluY2x1ZGVkIGlmIChkdWUgdG8gb25lIG9mIHRoZQorCSAgYWJvdmUgY29uZGl0aW9ucykgdGhlIHNlcnZlciBuZWVkcyB0byBpbmZvcm0gdGhlIGNsaWVudCBvZiBhbnkKKwkgIHNoYWxsb3cgYm91bmRhcmllcyBvciBhZGp1c3RtZW50cyB0byB0aGUgY2xpZW50cyBhbHJlYWR5CisJICBleGlzdGluZyBzaGFsbG93IGJvdW5kYXJpZXMuCisKKwkqIEFsd2F5cyBiZWdpbnMgd2l0aCB0aGUgc2VjdGlvbiBoZWFkZXIgInNoYWxsb3ctaW5mbyIKKworCSogSWYgYSBwb3NpdGl2ZSBkZXB0aCBpcyByZXF1ZXN0ZWQsIHRoZSBzZXJ2ZXIgd2lsbCBjb21wdXRlIHRoZQorCSAgc2V0IG9mIGNvbW1pdHMgd2hpY2ggYXJlIG5vIGRlZXBlciB0aGFuIHRoZSBkZXNpcmVkIGRlcHRoLgorCisJKiBUaGUgc2VydmVyIHNlbmRzIGEgInNoYWxsb3cgb2JqLWlkIiBsaW5lIGZvciBlYWNoIGNvbW1pdCB3aG9zZQorCSAgcGFyZW50cyB3aWxsIG5vdCBiZSBzZW50IGluIHRoZSBmb2xsb3dpbmcgcGFja2ZpbGUuCisKKwkqIFRoZSBzZXJ2ZXIgc2VuZHMgYW4gInVuc2hhbGxvdyBvYmotaWQiIGxpbmUgZm9yIGVhY2ggY29tbWl0CisJICB3aGljaCB0aGUgY2xpZW50IGhhcyBpbmRpY2F0ZWQgaXMgc2hhbGxvdywgYnV0IGlzIG5vIGxvbmdlcgorCSAgc2hhbGxvdyBhcyBhIHJlc3VsdCBvZiB0aGUgZmV0Y2ggKGR1ZSB0byBpdHMgcGFyZW50cyBiZWluZworCSAgc2VudCBpbiB0aGUgZm9sbG93aW5nIHBhY2tmaWxlKS4KKworCSogVGhlIHNlcnZlciBNVVNUIE5PVCBzZW5kIGFueSAidW5zaGFsbG93IiBsaW5lcyBmb3IgYW55dGhpbmcKKwkgIHdoaWNoIHRoZSBjbGllbnQgaGFzIG5vdCBpbmRpY2F0ZWQgd2FzIHNoYWxsb3cgYXMgYSBwYXJ0IG9mCisJICBpdHMgcmVxdWVzdC4KKworCSogVGhpcyBzZWN0aW9uIGlzIG9ubHkgaW5jbHVkZWQgaWYgYSBwYWNrZmlsZSBzZWN0aW9uIGlzIGFsc28KKwkgIGluY2x1ZGVkIGluIHRoZSByZXNwb25zZS4KKworICAgIHdhbnRlZC1yZWZzIHNlY3Rpb24KKwkqIFRoaXMgc2VjdGlvbiBpcyBvbmx5IGluY2x1ZGVkIGlmIHRoZSBjbGllbnQgaGFzIHJlcXVlc3RlZCBhCisJICByZWYgdXNpbmcgYSAnd2FudC1yZWYnIGxpbmUgYW5kIGlmIGEgcGFja2ZpbGUgc2VjdGlvbiBpcyBhbHNvCisJICBpbmNsdWRlZCBpbiB0aGUgcmVzcG9uc2UuCisKKwkqIEFsd2F5cyBiZWdpbnMgd2l0aCB0aGUgc2VjdGlvbiBoZWFkZXIgIndhbnRlZC1yZWZzIi4KKworCSogVGhlIHNlcnZlciB3aWxsIHNlbmQgYSByZWYgbGlzdGluZyAoIjxvaWQ+IDxyZWZuYW1lPiIpIGZvcgorCSAgZWFjaCByZWZlcmVuY2UgcmVxdWVzdGVkIHVzaW5nICd3YW50LXJlZicgbGluZXMuCisKKwkqIFRoZSBzZXJ2ZXIgTVVTVCBOT1Qgc2VuZCBhbnkgcmVmcyB3aGljaCB3ZXJlIG5vdCByZXF1ZXN0ZWQKKwkgIHVzaW5nICd3YW50LXJlZicgbGluZXMuCisKKyAgICBwYWNrZmlsZSBzZWN0aW9uCisJKiBUaGlzIHNlY3Rpb24gaXMgb25seSBpbmNsdWRlZCBpZiB0aGUgY2xpZW50IGhhcyBzZW50ICd3YW50JworCSAgbGluZXMgaW4gaXRzIHJlcXVlc3QgYW5kIGVpdGhlciByZXF1ZXN0ZWQgdGhhdCBubyBtb3JlCisJICBuZWdvdGlhdGlvbiBiZSBkb25lIGJ5IHNlbmRpbmcgJ2RvbmUnIG9yIGlmIHRoZSBzZXJ2ZXIgaGFzCisJICBkZWNpZGVkIGl0IGhhcyBmb3VuZCBhIHN1ZmZpY2llbnQgY3V0IHBvaW50IHRvIHByb2R1Y2UgYQorCSAgcGFja2ZpbGUuCisKKwkqIEFsd2F5cyBiZWdpbnMgd2l0aCB0aGUgc2VjdGlvbiBoZWFkZXIgInBhY2tmaWxlIgorCisJKiBUaGUgdHJhbnNtaXNzaW9uIG9mIHRoZSBwYWNrZmlsZSBiZWdpbnMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlCisJICBzZWN0aW9uIGhlYWRlcgorCisJKiBUaGUgZGF0YSB0cmFuc2ZlciBvZiB0aGUgcGFja2ZpbGUgaXMgYWx3YXlzIG11bHRpcGxleGVkLCB1c2luZworCSAgdGhlIHNhbWUgc2VtYW50aWNzIG9mIHRoZSAnc2lkZS1iYW5kLTY0aycgY2FwYWJpbGl0eSBmcm9tCisJICBwcm90b2NvbCB2ZXJzaW9uIDEuICBUaGlzIG1lYW5zIHRoYXQgZWFjaCBwYWNrZXQsIGR1cmluZyB0aGUKKwkgIHBhY2tmaWxlIGRhdGEgc3RyZWFtLCBpcyBtYWRlIHVwIG9mIGEgbGVhZGluZyA0LWJ5dGUgcGt0LWxpbmUKKwkgIGxlbmd0aCAodHlwaWNhbCBvZiB0aGUgcGt0LWxpbmUgZm9ybWF0KSwgZm9sbG93ZWQgYnkgYSAxLWJ5dGUKKwkgIHN0cmVhbSBjb2RlLCBmb2xsb3dlZCBieSB0aGUgYWN0dWFsIGRhdGEuCisKKwkgIFRoZSBzdHJlYW0gY29kZSBjYW4gYmUgb25lIG9mOgorCQkxIC0gcGFjayBkYXRhCisJCTIgLSBwcm9ncmVzcyBtZXNzYWdlcworCQkzIC0gZmF0YWwgZXJyb3IgbWVzc2FnZSBqdXN0IGJlZm9yZSBzdHJlYW0gYWJvcnRzCisKK3NlcnZlci1vcHRpb24KK35+fn5+fn5+fn5+fn4KKworSWYgYWR2ZXJ0aXNlZCwgaW5kaWNhdGVzIHRoYXQgYW55IG51bWJlciBvZiBzZXJ2ZXIgc3BlY2lmaWMgb3B0aW9ucyBjYW4gYmUKK2luY2x1ZGVkIGluIGEgcmVxdWVzdC4gIFRoaXMgaXMgZG9uZSBieSBzZW5kaW5nIGVhY2ggb3B0aW9uIGFzIGEKKyJzZXJ2ZXItb3B0aW9uPTxvcHRpb24+IiBjYXBhYmlsaXR5IGxpbmUgaW4gdGhlIGNhcGFiaWxpdHktbGlzdCBzZWN0aW9uIG9mCithIHJlcXVlc3QuCisKK1RoZSBwcm92aWRlZCBvcHRpb25zIG11c3Qgbm90IGNvbnRhaW4gYSBOVUwgb3IgTEYgY2hhcmFjdGVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmFjeS1naXQudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmFjeS1naXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZGE0YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yYWN5LWdpdC50eHQKQEAgLTAsMCArMSwyMDEgQEAKK1VzZSBvZiBpbmRleCBhbmQgUmFjeSBHaXQgcHJvYmxlbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2tncm91bmQKKy0tLS0tLS0tLS0KKworVGhlIGluZGV4IGlzIG9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgZGF0YSBzdHJ1Y3R1cmVzIGluIEdpdC4KK0l0IHJlcHJlc2VudHMgYSB2aXJ0dWFsIHdvcmtpbmcgdHJlZSBzdGF0ZSBieSByZWNvcmRpbmcgbGlzdCBvZgorcGF0aHMgYW5kIHRoZWlyIG9iamVjdCBuYW1lcyBhbmQgc2VydmVzIGFzIGEgc3RhZ2luZyBhcmVhIHRvCit3cml0ZSBvdXQgdGhlIG5leHQgdHJlZSBvYmplY3QgdG8gYmUgY29tbWl0dGVkLiAgVGhlIHN0YXRlIGlzCisidmlydHVhbCIgaW4gdGhlIHNlbnNlIHRoYXQgaXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0bywgYW5kCitvZnRlbiBkb2VzIG5vdCwgbWF0Y2ggdGhlIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUuCisKK1RoZXJlIGFyZSBjYXNlcyBHaXQgbmVlZHMgdG8gZXhhbWluZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUKK3ZpcnR1YWwgd29ya2luZyB0cmVlIHN0YXRlIGluIHRoZSBpbmRleCBhbmQgdGhlIGZpbGVzIGluIHRoZQord29ya2luZyB0cmVlLiAgVGhlIG1vc3Qgb2J2aW91cyBjYXNlIGlzIHdoZW4gdGhlIHVzZXIgYXNrcyBgZ2l0CitkaWZmYCAob3IgaXRzIGxvdyBsZXZlbCBpbXBsZW1lbnRhdGlvbiwgYGdpdCBkaWZmLWZpbGVzYCkgb3IKK2BnaXQtbHMtZmlsZXMgLS1tb2RpZmllZGAuICBJbiBhZGRpdGlvbiwgR2l0IGludGVybmFsbHkgY2hlY2tzCitpZiB0aGUgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhcmUgZGlmZmVyZW50IGZyb20gd2hhdCBhcmUKK3JlY29yZGVkIGluIHRoZSBpbmRleCB0byBhdm9pZCBzdG9tcGluZyBvbiBsb2NhbCBjaGFuZ2VzIGluIHRoZW0KK2R1cmluZyBwYXRjaCBhcHBsaWNhdGlvbiwgc3dpdGNoaW5nIGJyYW5jaGVzLCBhbmQgbWVyZ2luZy4KKworSW4gb3JkZXIgdG8gc3BlZWQgdXAgdGhpcyBjb21wYXJpc29uIGJldHdlZW4gdGhlIGZpbGVzIGluIHRoZQord29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXggZW50cmllcywgdGhlIGluZGV4IGVudHJpZXMgcmVjb3JkIHRoZQoraW5mb3JtYXRpb24gb2J0YWluZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSB2aWEgYGxzdGF0KDIpYCBzeXN0ZW0KK2NhbGwgd2hlbiB0aGV5IHdlcmUgbGFzdCB1cGRhdGVkLiAgV2hlbiBjaGVja2luZyBpZiB0aGV5IGRpZmZlciwKK0dpdCBmaXJzdCBydW5zIGBsc3RhdCgyKWAgb24gdGhlIGZpbGVzIGFuZCBjb21wYXJlcyB0aGUgcmVzdWx0Cit3aXRoIHRoaXMgaW5mb3JtYXRpb24gKHRoaXMgaXMgd2hhdCB3YXMgb3JpZ2luYWxseSBkb25lIGJ5IHRoZQorYGNlX21hdGNoX3N0YXQoKWAgZnVuY3Rpb24sIGJ1dCB0aGUgY3VycmVudCBjb2RlIGRvZXMgaXQgaW4KK2BjZV9tYXRjaF9zdGF0X2Jhc2ljKClgIGZ1bmN0aW9uKS4gIElmIHNvbWUgb2YgdGhlc2UgImNhY2hlZAorc3RhdCBpbmZvcm1hdGlvbiIgZmllbGRzIGRvIG5vdCBtYXRjaCwgR2l0IGNhbiB0ZWxsIHRoYXQgdGhlCitmaWxlcyBhcmUgbW9kaWZpZWQgd2l0aG91dCBldmVuIGxvb2tpbmcgYXQgdGhlaXIgY29udGVudHMuCisKK05vdGU6IG5vdCBhbGwgbWVtYmVycyBpbiBgc3RydWN0IHN0YXRgIG9idGFpbmVkIHZpYSBgbHN0YXQoMilgCithcmUgdXNlZCBmb3IgdGhpcyBjb21wYXJpc29uLiAgRm9yIGV4YW1wbGUsIGBzdF9hdGltZWAgb2J2aW91c2x5CitpcyBub3QgdXNlZnVsLiAgQ3VycmVudGx5LCBHaXQgY29tcGFyZXMgdGhlIGZpbGUgdHlwZSAocmVndWxhcgorZmlsZXMgdnMgc3ltYm9saWMgbGlua3MpIGFuZCBleGVjdXRhYmxlIGJpdHMgKG9ubHkgZm9yIHJlZ3VsYXIKK2ZpbGVzKSBmcm9tIGBzdF9tb2RlYCBtZW1iZXIsIGBzdF9tdGltZWAgYW5kIGBzdF9jdGltZWAKK3RpbWVzdGFtcHMsIGBzdF91aWRgLCBgc3RfZ2lkYCwgYHN0X2lub2AsIGFuZCBgc3Rfc2l6ZWAgbWVtYmVycy4KK1dpdGggYSBgVVNFX1NUREVWYCBjb21waWxlLXRpbWUgb3B0aW9uLCBgc3RfZGV2YCBpcyBhbHNvCitjb21wYXJlZCwgYnV0IHRoaXMgaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIHRoaXMgbWVtYmVyCitpcyBub3Qgc3RhYmxlIG9uIG5ldHdvcmsgZmlsZXN5c3RlbXMuICBXaXRoIGBVU0VfTlNFQ2AKK2NvbXBpbGUtdGltZSBvcHRpb24sIGBzdF9tdGltLnR2X25zZWNgIGFuZCBgc3RfY3RpbS50dl9uc2VjYAorbWVtYmVycyBhcmUgYWxzbyBjb21wYXJlZC4gT24gTGludXgsIHRoaXMgaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdAorYmVjYXVzZSBpbi1jb3JlIHRpbWVzdGFtcHMgY2FuIGhhdmUgZmluZXIgZ3JhbnVsYXJpdHkgdGhhbgorb24tZGlzayB0aW1lc3RhbXBzLCByZXN1bHRpbmcgaW4gbWVhbmluZ2xlc3MgY2hhbmdlcyB3aGVuIGFuCitpbm9kZSBpcyBldmljdGVkIGZyb20gdGhlIGlub2RlIGNhY2hlLiAgU2VlIGNvbW1pdCA4Y2UxM2IwCitvZiBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGdseC9oaXN0b3J5LmdpdAorKFtQQVRDSF0gU3luYyBpbiBjb3JlIHRpbWUgZ3JhbnVsYXJpdHkgd2l0aCBmaWxlc3lzdGVtcywKKzIwMDUtMDEtMDQpLiBUaGlzIHBhdGNoIGlzIGluY2x1ZGVkIGluIGtlcm5lbCAyLjYuMTEgYW5kIG5ld2VyLCBidXQKK29ubHkgZml4ZXMgdGhlIGlzc3VlIGZvciBmaWxlIHN5c3RlbXMgd2l0aCBleGFjdGx5IDEgbnMgb3IgMSBzCityZXNvbHV0aW9uLiBPdGhlciBmaWxlIHN5c3RlbXMgYXJlIHN0aWxsIGJyb2tlbiBpbiBjdXJyZW50IExpbnV4CitrZXJuZWxzIChlLmcuIENFUEgsIENJRlMsIE5URlMsIFVERiksIHNlZQoraHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGttbC81NTc3MjQwRC43MDIwMzA5QGdtYWlsLmNvbS8KKworUmFjeSBHaXQKKy0tLS0tLS0tCisKK1RoZXJlIGlzIG9uZSBzbGlnaHQgcHJvYmxlbSB3aXRoIHRoZSBvcHRpbWl6YXRpb24gYmFzZWQgb24gdGhlCitjYWNoZWQgc3RhdCBpbmZvcm1hdGlvbi4gIENvbnNpZGVyIHRoaXMgc2VxdWVuY2U6CisKKyAgOiBtb2RpZnkgJ2ZvbycKKyAgJCBnaXQgdXBkYXRlLWluZGV4ICdmb28nCisgIDogbW9kaWZ5ICdmb28nIGFnYWluLCBpbi1wbGFjZSwgd2l0aG91dCBjaGFuZ2luZyBpdHMgc2l6ZQorCitUaGUgZmlyc3QgYHVwZGF0ZS1pbmRleGAgY29tcHV0ZXMgdGhlIG9iamVjdCBuYW1lIG9mIHRoZQorY29udGVudHMgb2YgZmlsZSBgZm9vYCBhbmQgdXBkYXRlcyB0aGUgaW5kZXggZW50cnkgZm9yIGBmb29gCithbG9uZyB3aXRoIHRoZSBgc3RydWN0IHN0YXRgIGluZm9ybWF0aW9uLiAgSWYgdGhlIG1vZGlmaWNhdGlvbgordGhhdCBmb2xsb3dzIGl0IGhhcHBlbnMgdmVyeSBmYXN0IHNvIHRoYXQgdGhlIGZpbGUncyBgc3RfbXRpbWVgCit0aW1lc3RhbXAgZG9lcyBub3QgY2hhbmdlLCBhZnRlciB0aGlzIHNlcXVlbmNlLCB0aGUgY2FjaGVkIHN0YXQKK2luZm9ybWF0aW9uIHRoZSBpbmRleCBlbnRyeSByZWNvcmRzIHN0aWxsIGV4YWN0bHkgbWF0Y2ggd2hhdCB5b3UKK3dvdWxkIHNlZSBpbiB0aGUgZmlsZXN5c3RlbSwgZXZlbiB0aG91Z2ggdGhlIGZpbGUgYGZvb2AgaXMgbm93CitkaWZmZXJlbnQuCitUaGlzIHdheSwgR2l0IGNhbiBpbmNvcnJlY3RseSB0aGluayBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlCithcmUgdW5tb2RpZmllZCBldmVuIHRob3VnaCB0aGV5IGFjdHVhbGx5IGFyZS4gIFRoaXMgaXMgY2FsbGVkCit0aGUgInJhY3kgR2l0IiBwcm9ibGVtIChkaXNjb3ZlcmVkIGJ5IFBhc2t5KSwgYW5kIHRoZSBlbnRyaWVzCit0aGF0IGFwcGVhciBjbGVhbiB3aGVuIHRoZXkgbWF5IG5vdCBiZSBiZWNhdXNlIG9mIHRoaXMgcHJvYmxlbQorYXJlIGNhbGxlZCAicmFjaWx5IGNsZWFuIi4KKworVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCBHaXQgZG9lcyB0d28gdGhpbmdzOgorCisuIFdoZW4gdGhlIGNhY2hlZCBzdGF0IGluZm9ybWF0aW9uIHNheXMgdGhlIGZpbGUgaGFzIG5vdCBiZWVuCisgIG1vZGlmaWVkLCBhbmQgdGhlIGBzdF9tdGltZWAgaXMgdGhlIHNhbWUgYXMgKG9yIG5ld2VyIHRoYW4pCisgIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGluZGV4IGZpbGUgaXRzZWxmICh3aGljaCBpcyB0aGUgdGltZSBgZ2l0CisgIHVwZGF0ZS1pbmRleCBmb29gIGZpbmlzaGVkIHJ1bm5pbmcgaW4gdGhlIGFib3ZlIGV4YW1wbGUpLCBpdAorICBhbHNvIGNvbXBhcmVzIHRoZSBjb250ZW50cyB3aXRoIHRoZSBvYmplY3QgcmVnaXN0ZXJlZCBpbiB0aGUKKyAgaW5kZXggZW50cnkgdG8gbWFrZSBzdXJlIHRoZXkgbWF0Y2guCisKKy4gV2hlbiB0aGUgaW5kZXggZmlsZSBpcyB1cGRhdGVkIHRoYXQgY29udGFpbnMgcmFjaWx5IGNsZWFuCisgIGVudHJpZXMsIGNhY2hlZCBgc3Rfc2l6ZWAgaW5mb3JtYXRpb24gaXMgdHJ1bmNhdGVkIHRvIHplcm8KKyAgYmVmb3JlIHdyaXRpbmcgYSBuZXcgdmVyc2lvbiBvZiB0aGUgaW5kZXggZmlsZS4KKworQmVjYXVzZSB0aGUgaW5kZXggZmlsZSBpdHNlbGYgaXMgd3JpdHRlbiBhZnRlciBjb2xsZWN0aW5nIGFsbAordGhlIHN0YXQgaW5mb3JtYXRpb24gZnJvbSB1cGRhdGVkIHBhdGhzLCBgc3RfbXRpbWVgIHRpbWVzdGFtcCBvZgoraXQgaXMgdXN1YWxseSB0aGUgc2FtZSBhcyBvciBuZXdlciB0aGFuIGFueSBvZiB0aGUgcGF0aHMgdGhlCitpbmRleCBjb250YWlucy4gIEFuZCBubyBtYXR0ZXIgaG93IHF1aWNrIHRoZSBtb2RpZmljYXRpb24gdGhhdAorZm9sbG93cyBgZ2l0IHVwZGF0ZS1pbmRleCBmb29gIGZpbmlzaGVzLCB0aGUgcmVzdWx0aW5nCitgc3RfbXRpbWVgIHRpbWVzdGFtcCBvbiBgZm9vYCBjYW5ub3QgZ2V0IGEgdmFsdWUgZWFybGllcgordGhhbiB0aGUgaW5kZXggZmlsZS4gIFRoZXJlZm9yZSwgaW5kZXggZW50cmllcyB0aGF0IGNhbiBiZQorcmFjaWx5IGNsZWFuIGFyZSBsaW1pdGVkIHRvIHRoZSBvbmVzIHRoYXQgaGF2ZSB0aGUgc2FtZQordGltZXN0YW1wIGFzIHRoZSBpbmRleCBmaWxlIGl0c2VsZi4KKworVGhlIGNhbGxlcnMgdGhhdCB3YW50IHRvIGNoZWNrIGlmIGFuIGluZGV4IGVudHJ5IG1hdGNoZXMgdGhlCitjb3JyZXNwb25kaW5nIGZpbGUgaW4gdGhlIHdvcmtpbmcgdHJlZSBjb250aW51ZSB0byBjYWxsCitgY2VfbWF0Y2hfc3RhdCgpYCwgYnV0IHdpdGggdGhpcyBjaGFuZ2UsIGBjZV9tYXRjaF9zdGF0KClgIHVzZXMKK2BjZV9tb2RpZmllZF9jaGVja19mcygpYCB0byBzZWUgaWYgcmFjaWx5IGNsZWFuIG9uZXMgYXJlCithY3R1YWxseSBjbGVhbiBhZnRlciBjb21wYXJpbmcgdGhlIGNhY2hlZCBzdGF0IGluZm9ybWF0aW9uIHVzaW5nCitgY2VfbWF0Y2hfc3RhdF9iYXNpYygpYC4KKworVGhlIHByb2JsZW0gdGhlIGxhdHRlciBzb2x2ZXMgaXMgdGhpcyBzZXF1ZW5jZToKKworICAkIGdpdCB1cGRhdGUtaW5kZXggJ2ZvbycKKyAgOiBtb2RpZnkgJ2ZvbycgaW4tcGxhY2Ugd2l0aG91dCBjaGFuZ2luZyBpdHMgc2l6ZQorICA6IHdhaXQgZm9yIGVub3VnaCB0aW1lCisgICQgZ2l0IHVwZGF0ZS1pbmRleCAnYmFyJworCitXaXRob3V0IHRoZSBsYXR0ZXIsIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGluZGV4IGZpbGUgZ2V0cyBhIG5ld2VyCit2YWx1ZSwgYW5kIGZhbHNlbHkgY2xlYW4gZW50cnkgYGZvb2Agd291bGQgbm90IGJlIGNhdWdodCBieSB0aGUKK3RpbWVzdGFtcCBjb21wYXJpc29uIGNoZWNrIGRvbmUgd2l0aCB0aGUgZm9ybWVyIGxvZ2ljIGFueW1vcmUuCitUaGUgbGF0dGVyIG1ha2VzIHN1cmUgdGhhdCB0aGUgY2FjaGVkIHN0YXQgaW5mb3JtYXRpb24gZm9yIGBmb29gCit3b3VsZCBuZXZlciBtYXRjaCB3aXRoIHRoZSBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUsIHNvIGxhdGVyCitjaGVja3MgYnkgYGNlX21hdGNoX3N0YXRfYmFzaWMoKWAgd291bGQgcmVwb3J0IHRoYXQgdGhlIGluZGV4IGVudHJ5Citkb2VzIG5vdCBtYXRjaCB0aGUgZmlsZSBhbmQgR2l0IGRvZXMgbm90IGhhdmUgdG8gZmFsbCBiYWNrIG9uIG1vcmUKK2V4cGVuc2l2ZSBgY2VfbW9kaWZpZWRfY2hlY2tfZnMoKWAuCisKKworUnVudGltZSBwZW5hbHR5CistLS0tLS0tLS0tLS0tLS0KKworVGhlIHJ1bnRpbWUgcGVuYWx0eSBvZiBmYWxsaW5nIGJhY2sgdG8gYGNlX21vZGlmaWVkX2NoZWNrX2ZzKClgCitmcm9tIGBjZV9tYXRjaF9zdGF0KClgIGNhbiBiZSB2ZXJ5IGV4cGVuc2l2ZSB3aGVuIHRoZXJlIGFyZSBtYW55CityYWNpbHkgY2xlYW4gZW50cmllcy4gIEFuIG9idmlvdXMgd2F5IHRvIGFydGlmaWNpYWxseSBjcmVhdGUKK3RoaXMgc2l0dWF0aW9uIGlzIHRvIGdpdmUgdGhlIHNhbWUgdGltZXN0YW1wIHRvIGFsbCB0aGUgZmlsZXMgaW4KK3RoZSB3b3JraW5nIHRyZWUgaW4gYSBsYXJnZSBwcm9qZWN0LCBydW4gYGdpdCB1cGRhdGUtaW5kZXhgIG9uCit0aGVtLCBhbmQgZ2l2ZSB0aGUgc2FtZSB0aW1lc3RhbXAgdG8gdGhlIGluZGV4IGZpbGU6CisKKyAgJCBkYXRlID4uZGF0ZXN0YW1wCisgICQgZ2l0IGxzLWZpbGVzIHwgeGFyZ3MgdG91Y2ggLXIgLmRhdGVzdGFtcAorICAkIGdpdCBscy1maWxlcyB8IGdpdCB1cGRhdGUtaW5kZXggLS1zdGRpbgorICAkIHRvdWNoIC1yIC5kYXRlc3RhbXAgLmdpdC9pbmRleAorCitUaGlzIHdpbGwgbWFrZSBhbGwgaW5kZXggZW50cmllcyByYWNpbHkgY2xlYW4uICBUaGUgbGludXggcHJvamVjdCwgZm9yCitleGFtcGxlLCB0aGVyZSBhcmUgb3ZlciAyMCwwMDAgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZS4gIE9uIG15CitBdGhsb24gNjQgWDIgMzgwMCssIGFmdGVyIHRoZSBhYm92ZToKKworICAkIC91c3IvYmluL3RpbWUgZ2l0IGRpZmYtZmlsZXMKKyAgMS42OHVzZXIgMC41NHN5c3RlbSAwOjAyLjIyZWxhcHNlZCAxMDAlQ1BVICgwYXZndGV4dCswYXZnZGF0YSAwbWF4cmVzaWRlbnQpaworICAwaW5wdXRzKzBvdXRwdXRzICgwbWFqb3IrNjcxMTFtaW5vcilwYWdlZmF1bHRzIDBzd2FwcworICAkIGdpdCB1cGRhdGUtaW5kZXggTUFJTlRBSU5FUlMKKyAgJCAvdXNyL2Jpbi90aW1lIGdpdCBkaWZmLWZpbGVzCisgIDAuMDJ1c2VyIDAuMTJzeXN0ZW0gMDowMC4xNGVsYXBzZWQgMTAwJUNQVSAoMGF2Z3RleHQrMGF2Z2RhdGEgMG1heHJlc2lkZW50KWsKKyAgMGlucHV0cyswb3V0cHV0cyAoMG1ham9yKzkzNW1pbm9yKXBhZ2VmYXVsdHMgMHN3YXBzCisKK1J1bm5pbmcgYGdpdCB1cGRhdGUtaW5kZXhgIGluIHRoZSBtaWRkbGUgY2hlY2tlZCB0aGUgcmFjaWx5CitjbGVhbiBlbnRyaWVzLCBhbmQgbGVmdCB0aGUgY2FjaGVkIGBzdF9tdGltZWAgZm9yIGFsbCB0aGUgcGF0aHMKK2ludGFjdCBiZWNhdXNlIHRoZXkgd2VyZSBhY3R1YWxseSBjbGVhbiAoc28gdGhpcyBzdGVwIHRvb2sgYWJvdXQKK3RoZSBzYW1lIGFtb3VudCBvZiB0aW1lIGFzIHRoZSBmaXJzdCBgZ2l0IGRpZmYtZmlsZXNgKS4gIEFmdGVyCit0aGF0LCB0aGV5IGFyZSBub3QgcmFjaWx5IGNsZWFuIGFueW1vcmUgYnV0IGFyZSB0cnVseSBjbGVhbiwgc28KK3RoZSBzZWNvbmQgaW52b2NhdGlvbiBvZiBgZ2l0IGRpZmYtZmlsZXNgIGZ1bGx5IHRvb2sgYWR2YW50YWdlCitvZiB0aGUgY2FjaGVkIHN0YXQgaW5mb3JtYXRpb24uCisKKworQXZvaWRpbmcgcnVudGltZSBwZW5hbHR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gb3JkZXIgdG8gYXZvaWQgdGhlIGFib3ZlIHJ1bnRpbWUgcGVuYWx0eSwgcG9zdCAxLjQuMiBHaXQgdXNlZAordG8gaGF2ZSBhIGNvZGUgdGhhdCBtYWRlIHN1cmUgdGhlIGluZGV4IGZpbGUKK2dvdCB0aW1lc3RhbXAgbmV3ZXIgdGhhbiB0aGUgeW91bmdlc3QgZmlsZXMgaW4gdGhlIGluZGV4IHdoZW4KK3RoZXJlIGFyZSBtYW55IHlvdW5nIGZpbGVzIHdpdGggdGhlIHNhbWUgdGltZXN0YW1wIGFzIHRoZQorcmVzdWx0aW5nIGluZGV4IGZpbGUgd291bGQgb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYnkgd2FpdGluZworYmVmb3JlIGZpbmlzaGluZyB3cml0aW5nIHRoZSBpbmRleCBmaWxlIG91dC4KKworSSBzdXNwZWN0ZWQgdGhhdCBpbiBwcmFjdGljZSB0aGUgc2l0dWF0aW9uIHdoZXJlIG1hbnkgcGF0aHMgaW4gdGhlCitpbmRleCBhcmUgYWxsIHJhY2lseSBjbGVhbiB3YXMgcXVpdGUgcmFyZS4gIFRoZSBvbmx5IGNvZGUgcGF0aHMKK3RoYXQgY2FuIHJlY29yZCByZWNlbnQgdGltZXN0YW1wIGZvciBsYXJnZSBudW1iZXIgb2YgcGF0aHMgYXJlOgorCisuIEluaXRpYWwgYGdpdCBhZGQgLmAgb2YgYSBsYXJnZSBwcm9qZWN0LgorCisuIGBnaXQgY2hlY2tvdXRgIG9mIGEgbGFyZ2UgcHJvamVjdCBmcm9tIGFuIGVtcHR5IGluZGV4IGludG8gYW4KKyAgdW5wb3B1bGF0ZWQgd29ya2luZyB0cmVlLgorCitOb3RlOiBzd2l0Y2hpbmcgYnJhbmNoZXMgd2l0aCBgZ2l0IGNoZWNrb3V0YCBrZWVwcyB0aGUgY2FjaGVkCitzdGF0IGluZm9ybWF0aW9uIG9mIGV4aXN0aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB0aGF0IGFyZSB0aGUKK3NhbWUgYmV0d2VlbiB0aGUgY3VycmVudCBicmFuY2ggYW5kIHRoZSBuZXcgYnJhbmNoLCB3aGljaCBhcmUKK2FsbCBvbGRlciB0aGFuIHRoZSByZXN1bHRpbmcgaW5kZXggZmlsZSwgYW5kIHRoZXkgd2lsbCBub3QKK2JlY29tZSByYWNpbHkgY2xlYW4uICBPbmx5IHRoZSBmaWxlcyB0aGF0IGFyZSBhY3R1YWxseSBjaGVja2VkCitvdXQgY2FuIGJlY29tZSByYWNpbHkgY2xlYW4uCisKK0luIGEgbGFyZ2UgcHJvamVjdCB3aGVyZSByYWNpbmVzcyBhdm9pZGFuY2UgY29zdCByZWFsbHkgbWF0dGVycywKK2hvd2V2ZXIsIHRoZSBpbml0aWFsIGNvbXB1dGF0aW9uIG9mIGFsbCBvYmplY3QgbmFtZXMgaW4gdGhlCitpbmRleCB0YWtlcyBtb3JlIHRoYW4gb25lIHNlY29uZCwgYW5kIHRoZSBpbmRleCBmaWxlIGlzIHdyaXR0ZW4KK291dCBhZnRlciBhbGwgdGhhdCBoYXBwZW5zLiAgVGhlcmVmb3JlIHRoZSB0aW1lc3RhbXAgb2YgdGhlCitpbmRleCBmaWxlIHdpbGwgYmUgbW9yZSB0aGFuIG9uZSBzZWNvbmRzIGxhdGVyIHRoYW4gdGhlCit5b3VuZ2VzdCBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUuICBUaGlzIG1lYW5zIHRoYXQgaW4gdGhlc2UKK2Nhc2VzIHRoZXJlIGFjdHVhbGx5IHdpbGwgbm90IGJlIGFueSByYWNpbHkgY2xlYW4gZW50cnkgaW4KK3RoZSByZXN1bHRpbmcgaW5kZXguCisKK0Jhc2VkIG9uIHRoaXMgZGlzY3Vzc2lvbiwgdGhlIGN1cnJlbnQgY29kZSBkb2VzIG5vdCB1c2UgdGhlCisid29ya2Fyb3VuZCIgdG8gYXZvaWQgdGhlIHJ1bnRpbWUgcGVuYWx0eSB0aGF0IGRvZXMgbm90IGV4aXN0IGluCitwcmFjdGljZSBhbnltb3JlLiAgVGhpcyB3YXMgZG9uZSB3aXRoIGNvbW1pdCAwZmM4MmNmZiBvbiBBdWcgMTUsCisyMDA2LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmVwb3NpdG9yeS12ZXJzaW9uLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JlcG9zaXRvcnktdmVyc2lvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg0NGVmMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JlcG9zaXRvcnktdmVyc2lvbi50eHQKQEAgLTAsMCArMSwxMDIgQEAKKz09IEdpdCBSZXBvc2l0b3J5IEZvcm1hdCBWZXJzaW9ucworCitFdmVyeSBnaXQgcmVwb3NpdG9yeSBpcyBtYXJrZWQgd2l0aCBhIG51bWVyaWMgdmVyc2lvbiBpbiB0aGUKK2Bjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uYCBrZXkgb2YgaXRzIGBjb25maWdgIGZpbGUuIFRoaXMgdmVyc2lvbgorc3BlY2lmaWVzIHRoZSBydWxlcyBmb3Igb3BlcmF0aW5nIG9uIHRoZSBvbi1kaXNrIHJlcG9zaXRvcnkgZGF0YS4gQW4KK2ltcGxlbWVudGF0aW9uIG9mIGdpdCB3aGljaCBkb2VzIG5vdCB1bmRlcnN0YW5kIGEgcGFydGljdWxhciB2ZXJzaW9uCithZHZlcnRpc2VkIGJ5IGFuIG9uLWRpc2sgcmVwb3NpdG9yeSBNVVNUIE5PVCBvcGVyYXRlIG9uIHRoYXQgcmVwb3NpdG9yeTsKK2RvaW5nIHNvIHJpc2tzIG5vdCBvbmx5IHByb2R1Y2luZyB3cm9uZyByZXN1bHRzLCBidXQgYWN0dWFsbHkgbG9zaW5nCitkYXRhLgorCitCZWNhdXNlIG9mIHRoaXMgcnVsZSwgdmVyc2lvbiBidW1wcyBzaG91bGQgYmUga2VwdCB0byBhbiBhYnNvbHV0ZQorbWluaW11bS4gSW5zdGVhZCwgd2UgZ2VuZXJhbGx5IHByZWZlciB0aGVzZSBzdHJhdGVnaWVzOgorCisgIC0gYnVtcGluZyBmb3JtYXQgdmVyc2lvbiBudW1iZXJzIG9mIGluZGl2aWR1YWwgZGF0YSBmaWxlcyAoZS5nLiwKKyAgICBpbmRleCwgcGFja2ZpbGVzLCBldGMpLiBUaGlzIHJlc3RyaWN0cyB0aGUgaW5jb21wYXRpYmlsaXRpZXMgb25seSB0bworICAgIHRob3NlIGZpbGVzLgorCisgIC0gaW50cm9kdWNpbmcgbmV3IGRhdGEgdGhhdCBncmFjZWZ1bGx5IGRlZ3JhZGVzIHdoZW4gdXNlZCBieSBvbGRlcgorICAgIGNsaWVudHMgKGUuZy4sIHBhY2sgYml0bWFwIGZpbGVzIGFyZSBpZ25vcmVkIGJ5IG9sZGVyIGNsaWVudHMsIHdoaWNoCisgICAgc2ltcGx5IGRvIG5vdCB0YWtlIGFkdmFudGFnZSBvZiB0aGUgb3B0aW1pemF0aW9uIHRoZXkgcHJvdmlkZSkuCisKK0Egd2hvbGUtcmVwb3NpdG9yeSBmb3JtYXQgdmVyc2lvbiBidW1wIHNob3VsZCBvbmx5IGJlIHBhcnQgb2YgYSBjaGFuZ2UKK3RoYXQgY2Fubm90IGJlIGluZGVwZW5kZW50bHkgdmVyc2lvbmVkLiBGb3IgaW5zdGFuY2UsIGlmIG9uZSB3ZXJlIHRvCitjaGFuZ2UgdGhlIHJlYWNoYWJpbGl0eSBydWxlcyBmb3Igb2JqZWN0cywgb3IgdGhlIHJ1bGVzIGZvciBsb2NraW5nCityZWZzLCB0aGF0IHdvdWxkIHJlcXVpcmUgYSBidW1wIG9mIHRoZSByZXBvc2l0b3J5IGZvcm1hdCB2ZXJzaW9uLgorCitOb3RlIHRoYXQgdGhpcyBhcHBsaWVzIG9ubHkgdG8gYWNjZXNzaW5nIHRoZSByZXBvc2l0b3J5J3MgZGlzayBjb250ZW50cworZGlyZWN0bHkuIEFuIG9sZGVyIGNsaWVudCB3aGljaCB1bmRlcnN0YW5kcyBvbmx5IGZvcm1hdCBgMGAgbWF5IHN0aWxsCitjb25uZWN0IHZpYSBgZ2l0Oi8vYCB0byBhIHJlcG9zaXRvcnkgdXNpbmcgZm9ybWF0IGAxYCwgYXMgbG9uZyBhcyB0aGUKK3NlcnZlciBwcm9jZXNzIHVuZGVyc3RhbmRzIGZvcm1hdCBgMWAuCisKK1RoZSBwcmVmZXJyZWQgc3RyYXRlZ3kgZm9yIHJvbGxpbmcgb3V0IGEgdmVyc2lvbiBidW1wICh3aGV0aGVyIHdob2xlCityZXBvc2l0b3J5IG9yIGZvciBhIHNpbmdsZSBmaWxlKSBpcyB0byB0ZWFjaCBnaXQgdG8gcmVhZCB0aGUgbmV3IGZvcm1hdCwKK2FuZCBhbGxvdyB3cml0aW5nIHRoZSBuZXcgZm9ybWF0IHdpdGggYSBjb25maWcgc3dpdGNoIG9yIGNvbW1hbmQgbGluZQorb3B0aW9uIChmb3IgZXhwZXJpbWVudGF0aW9uIG9yIGZvciB0aG9zZSB3aG8gZG8gbm90IGNhcmUgYWJvdXQgYmFja3dhcmRzCitjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgZ2l0cykuIFRoZW4gYWZ0ZXIgYSBsb25nIHBlcmlvZCB0byBhbGxvdyB0aGUKK3JlYWRpbmcgY2FwYWJpbGl0eSB0byBiZWNvbWUgY29tbW9uLCB3ZSBtYXkgc3dpdGNoIHRvIHdyaXRpbmcgdGhlIG5ldworZm9ybWF0IGJ5IGRlZmF1bHQuCisKK1RoZSBjdXJyZW50bHkgZGVmaW5lZCBmb3JtYXQgdmVyc2lvbnMgYXJlOgorCis9PT0gVmVyc2lvbiBgMGAKKworVGhpcyBpcyB0aGUgZm9ybWF0IGRlZmluZWQgYnkgdGhlIGluaXRpYWwgdmVyc2lvbiBvZiBnaXQsIGluY2x1ZGluZyBidXQKK25vdCBsaW1pdGVkIHRvIHRoZSBmb3JtYXQgb2YgdGhlIHJlcG9zaXRvcnkgZGlyZWN0b3J5LCB0aGUgcmVwb3NpdG9yeQorY29uZmlndXJhdGlvbiBmaWxlLCBhbmQgdGhlIG9iamVjdCBhbmQgcmVmIHN0b3JhZ2UuIFNwZWNpZnlpbmcgdGhlCitjb21wbGV0ZSBiZWhhdmlvciBvZiBnaXQgaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIGRvY3VtZW50LgorCis9PT0gVmVyc2lvbiBgMWAKKworVGhpcyBmb3JtYXQgaXMgaWRlbnRpY2FsIHRvIHZlcnNpb24gYDBgLCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uczoKKworICAxLiBXaGVuIHJlYWRpbmcgdGhlIGBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uYCB2YXJpYWJsZSwgYSBnaXQKKyAgICAgaW1wbGVtZW50YXRpb24gd2hpY2ggc3VwcG9ydHMgdmVyc2lvbiAxIE1VU1QgYWxzbyByZWFkIGFueQorICAgICBjb25maWd1cmF0aW9uIGtleXMgZm91bmQgaW4gdGhlIGBleHRlbnNpb25zYCBzZWN0aW9uIG9mIHRoZQorICAgICBjb25maWd1cmF0aW9uIGZpbGUuCisKKyAgMi4gSWYgYSB2ZXJzaW9uLTEgcmVwb3NpdG9yeSBzcGVjaWZpZXMgYW55IGBleHRlbnNpb25zLipgIGtleXMgdGhhdAorICAgICB0aGUgcnVubmluZyBnaXQgaGFzIG5vdCBpbXBsZW1lbnRlZCwgdGhlIG9wZXJhdGlvbiBNVVNUIE5PVAorICAgICBwcm9jZWVkLiBTaW1pbGFybHksIGlmIHRoZSB2YWx1ZSBvZiBhbnkga25vd24ga2V5IGlzIG5vdCB1bmRlcnN0b29kCisgICAgIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiwgdGhlIG9wZXJhdGlvbiBNVVNUIE5PVCBwcm9jZWVkLgorCitOb3RlIHRoYXQgaWYgbm8gZXh0ZW5zaW9ucyBhcmUgc3BlY2lmaWVkIGluIHRoZSBjb25maWcgZmlsZSwgdGhlbgorYGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb25gIFNIT1VMRCBiZSBzZXQgdG8gYDBgIChzZXR0aW5nIGl0IHRvIGAxYAorcHJvdmlkZXMgbm8gYmVuZWZpdCwgYW5kIG1ha2VzIHRoZSByZXBvc2l0b3J5IGluY29tcGF0aWJsZSB3aXRoIG9sZGVyCitpbXBsZW1lbnRhdGlvbnMgb2YgZ2l0KS4KKworVGhpcyBkb2N1bWVudCB3aWxsIHNlcnZlIGFzIHRoZSBtYXN0ZXIgbGlzdCBmb3IgZXh0ZW5zaW9ucy4gQW55CitpbXBsZW1lbnRhdGlvbiB3aXNoaW5nIHRvIGRlZmluZSBhIG5ldyBleHRlbnNpb24gc2hvdWxkIG1ha2UgYSBub3RlIG9mCitpdCBoZXJlLCBpbiBvcmRlciB0byBjbGFpbSB0aGUgbmFtZS4KKworVGhlIGRlZmluZWQgZXh0ZW5zaW9ucyBhcmU6CisKKz09PT0gYG5vb3BgCisKK1RoaXMgZXh0ZW5zaW9uIGRvZXMgbm90IGNoYW5nZSBnaXQncyBiZWhhdmlvciBhdCBhbGwuIEl0IGlzIHVzZWZ1bCBvbmx5Citmb3IgdGVzdGluZyBmb3JtYXQtMSBjb21wYXRpYmlsaXR5LgorCis9PT09IGBwcmVjaW91c09iamVjdHNgCisKK1doZW4gdGhlIGNvbmZpZyBrZXkgYGV4dGVuc2lvbnMucHJlY2lvdXNPYmplY3RzYCBpcyBzZXQgdG8gYHRydWVgLAorb2JqZWN0cyBpbiB0aGUgcmVwb3NpdG9yeSBNVVNUIE5PVCBiZSBkZWxldGVkIChlLmcuLCBieSBgZ2l0LXBydW5lYCBvcgorYGdpdCByZXBhY2sgLWRgKS4KKworPT09PSBgcGFydGlhbGNsb25lYAorCitXaGVuIHRoZSBjb25maWcga2V5IGBleHRlbnNpb25zLnBhcnRpYWxjbG9uZWAgaXMgc2V0LCBpdCBpbmRpY2F0ZXMKK3RoYXQgdGhlIHJlcG8gd2FzIGNyZWF0ZWQgd2l0aCBhIHBhcnRpYWwgY2xvbmUgKG9yIGxhdGVyIHBlcmZvcm1lZAorYSBwYXJ0aWFsIGZldGNoKSBhbmQgdGhhdCB0aGUgcmVtb3RlIG1heSBoYXZlIG9taXR0ZWQgc2VuZGluZworY2VydGFpbiB1bndhbnRlZCBvYmplY3RzLiAgU3VjaCBhIHJlbW90ZSBpcyBjYWxsZWQgYSAicHJvbWlzb3IgcmVtb3RlIgorYW5kIGl0IHByb21pc2VzIHRoYXQgYWxsIHN1Y2ggb21pdHRlZCBvYmplY3RzIGNhbiBiZSBmZXRjaGVkIGZyb20gaXQKK2luIHRoZSBmdXR1cmUuCisKK1RoZSB2YWx1ZSBvZiB0aGlzIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvbWlzb3IgcmVtb3RlLgorCis9PT09IGB3b3JrdHJlZUNvbmZpZ2AKKworSWYgc2V0LCBieSBkZWZhdWx0ICJnaXQgY29uZmlnIiByZWFkcyBmcm9tIGJvdGggImNvbmZpZyIgYW5kCisiY29uZmlnLndvcmt0cmVlIiBmaWxlIGZyb20gR0lUX0RJUiBpbiB0aGF0IG9yZGVyLiBJbgorbXVsdGlwbGUgd29ya2luZyBkaXJlY3RvcnkgbW9kZSwgImNvbmZpZyIgZmlsZSBpcyBzaGFyZWQgd2hpbGUKKyJjb25maWcud29ya3RyZWUiIGlzIHBlci13b3JraW5nIGRpcmVjdG9yeSAoaS5lLiwgaXQncyBpbgorR0lUX0NPTU1PTl9ESVIvd29ya3RyZWVzLzxpZD4vY29uZmlnLndvcmt0cmVlKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmVyZXJlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JlcmVyZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1ZjlmYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JlcmVyZS50eHQKQEAgLTAsMCArMSwxODYgQEAKK1JlcmVyZQorPT09PT09CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSByZXJlcmUgbG9naWMuCisKK0NvbmZsaWN0IG5vcm1hbGl6YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gZW5zdXJlIHJlY29yZGVkIGNvbmZsaWN0IHJlc29sdXRpb25zIGNhbiBiZSBsb29rZWQgdXAgaW4gdGhlIHJlcmVyZQorZGF0YWJhc2UsIGV2ZW4gd2hlbiBicmFuY2hlcyBhcmUgbWVyZ2VkIGluIGEgZGlmZmVyZW50IG9yZGVyLAorZGlmZmVyZW50IGJyYW5jaGVzIGFyZSBtZXJnZWQgdGhhdCByZXN1bHQgaW4gdGhlIHNhbWUgY29uZmxpY3QsIG9yCit3aGVuIGRpZmZlcmVudCBjb25mbGljdCBzdHlsZSBzZXR0aW5ncyBhcmUgdXNlZCwgcmVyZXJlIG5vcm1hbGl6ZXMgdGhlCitjb25mbGljdHMgYmVmb3JlIHdyaXRpbmcgdGhlbSB0byB0aGUgcmVyZXJlIGRhdGFiYXNlLgorCitEaWZmZXJlbnQgY29uZmxpY3Qgc3R5bGVzIGFuZCBicmFuY2ggbmFtZXMgYXJlIG5vcm1hbGl6ZWQgYnkgc3RyaXBwaW5nCit0aGUgbGFiZWxzIGZyb20gdGhlIGNvbmZsaWN0IG1hcmtlcnMsIGFuZCByZW1vdmluZyB0aGUgY29tbW9uIGFuY2VzdG9yCit2ZXJzaW9uIGZyb20gdGhlIGBkaWZmM2AgY29uZmxpY3Qgc3R5bGUuIEJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZAoraW4gZGlmZmVyZW50IG9yZGVyIGFyZSBub3JtYWxpemVkIGJ5IHNvcnRpbmcgdGhlIGNvbmZsaWN0IGh1bmtzLiAgTW9yZQorb24gZWFjaCBvZiB0aG9zZSBzdGVwcyBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorCitPbmNlIHRoZXNlIHR3byBub3JtYWxpemF0aW9uIG9wZXJhdGlvbnMgYXJlIGFwcGxpZWQsIGEgY29uZmxpY3QgSUQgaXMKK2NhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIG5vcm1hbGl6ZWQgY29uZmxpY3QsIHdoaWNoIGlzIGxhdGVyIHVzZWQgYnkKK3JlcmVyZSB0byBsb29rIHVwIHRoZSBjb25mbGljdCBpbiB0aGUgcmVyZXJlIGRhdGFiYXNlLgorCitSZW1vdmluZyB0aGUgY29tbW9uIGFuY2VzdG9yIHZlcnNpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitTYXkgd2UgaGF2ZSB0aHJlZSBicmFuY2hlcyBBQiwgQUMgYW5kIEFDMi4gIFRoZSBjb21tb24gYW5jZXN0b3Igb2YKK3RoZXNlIGJyYW5jaGVzIGhhcyBhIGZpbGUgd2l0aCBhIGxpbmUgY29udGFpbmluZyB0aGUgc3RyaW5nICJBIiAoZm9yCiticmV2aXR5IHRoaXMgaXMgY2FsbGVkICJsaW5lIEEiIGluIHRoZSByZXN0IG9mIHRoZSBkb2N1bWVudCkuICBJbgorYnJhbmNoIEFCIHRoaXMgbGluZSBpcyBjaGFuZ2VkIHRvICJCIiwgaW4gQUMsIHRoaXMgbGluZSBpcyBjaGFuZ2VkIHRvCisiQyIsIGFuZCBicmFuY2ggQUMyIGlzIGZvcmtlZCBvZmYgb2YgQUMsIGFmdGVyIHRoZSBsaW5lIHdhcyBjaGFuZ2VkIHRvCisiQyIuCisKK0ZvcmtpbmcgYSBicmFuY2ggQUJBQyBvZmYgb2YgYnJhbmNoIEFCIGFuZCB0aGVuIG1lcmdpbmcgQUMgaW50byBpdCwgd2UKK2dldCBhIGNvbmZsaWN0IGxpa2UgdGhlIGZvbGxvd2luZzoKKworICAgIDw8PDw8PDwgSEVBRAorICAgIEIKKyAgICA9PT09PT09CisgICAgQworICAgID4+Pj4+Pj4gQUMKKworRG9pbmcgdGhlIGFuYWxvZ291cyB3aXRoIEFDMiAoZm9ya2luZyBhIGJyYW5jaCBBQkFDMiBvZmYgb2YgYnJhbmNoIEFCCithbmQgdGhlbiBtZXJnaW5nIGJyYW5jaCBBQzIgaW50byBpdCksIHVzaW5nIHRoZSBkaWZmMyBjb25mbGljdCBzdHlsZSwKK3dlIGdldCBhIGNvbmZsaWN0IGxpa2UgdGhlIGZvbGxvd2luZzoKKworICAgIDw8PDw8PDwgSEVBRAorICAgIEIKKyAgICB8fHx8fHx8IG1lcmdlZCBjb21tb24gYW5jZXN0b3JzCisgICAgQQorICAgID09PT09PT0KKyAgICBDCisgICAgPj4+Pj4+PiBBQzIKKworQnkgcmVzb2x2aW5nIHRoaXMgY29uZmxpY3QsIHRvIGxlYXZlIGxpbmUgRCwgdGhlIHVzZXIgZGVjbGFyZXM6CisKKyAgICBBZnRlciBleGFtaW5pbmcgd2hhdCBicmFuY2hlcyBBQiBhbmQgQUMgZGlkLCBJIGJlbGlldmUgdGhhdCBtYWtpbmcKKyAgICBsaW5lIEEgaW50byBsaW5lIEQgaXMgdGhlIGJlc3QgdGhpbmcgdG8gZG8gdGhhdCBpcyBjb21wYXRpYmxlIHdpdGgKKyAgICB3aGF0IEFCIGFuZCBBQyB3YW50ZWQgdG8gZG8uCisKK0FzIGJyYW5jaCBBQzIgcmVmZXJzIHRvIHRoZSBzYW1lIGNvbW1pdCBhcyBBQywgdGhlIGFib3ZlIGltcGxpZXMgdGhhdAordGhpcyBpcyBhbHNvIGNvbXBhdGlibGUgd2hhdCBBQiBhbmQgQUMyIHdhbnRlZCB0byBkby4KKworQnkgZXh0ZW5zaW9uLCB0aGlzIG1lYW5zIHRoYXQgcmVyZXJlIHNob3VsZCByZWNvZ25pemUgdGhhdCB0aGUgYWJvdmUKK2NvbmZsaWN0cyBhcmUgdGhlIHNhbWUuICBUbyBkbyB0aGlzLCB0aGUgbGFiZWxzIG9uIHRoZSBjb25mbGljdAorbWFya2VycyBhcmUgc3RyaXBwZWQsIGFuZCB0aGUgY29tbW9uIGFuY2VzdG9yIHZlcnNpb24gaXMgcmVtb3ZlZC4gIFRoZSBhYm92ZQorZXhhbXBsZXMgd291bGQgYm90aCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBub3JtYWxpemVkIGNvbmZsaWN0OgorCisgICAgPDw8PDw8PAorICAgIEIKKyAgICA9PT09PT09CisgICAgQworICAgID4+Pj4+Pj4KKworU29ydGluZyBodW5rcworfn5+fn5+fn5+fn5+fgorCitBcyBiZWZvcmUsIGxldHMgaW1hZ2luZSB0aGF0IGEgY29tbW9uIGFuY2VzdG9yIGhhZCBhIGZpbGUgd2l0aCBsaW5lIEEKK2l0cyBlYXJseSBwYXJ0LCBhbmQgbGluZSBYIGluIGl0cyBsYXRlIHBhcnQuICBBbmQgdGhlbiBmb3VyIGJyYW5jaGVzCithcmUgZm9ya2VkIHRoYXQgZG8gdGhlc2UgdGhpbmdzOgorCisgICAgLSBBQjogY2hhbmdlcyBBIHRvIEIKKyAgICAtIEFDOiBjaGFuZ2VzIEEgdG8gQworICAgIC0gWFk6IGNoYW5nZXMgWCB0byBZCisgICAgLSBYWjogY2hhbmdlcyBYIHRvIFoKKworTm93LCBmb3JraW5nIGEgYnJhbmNoIEFCQUMgb2ZmIG9mIGJyYW5jaCBBQiBhbmQgdGhlbiBtZXJnaW5nIEFDIGludG8KK2l0LCBhbmQgZm9ya2luZyBhIGJyYW5jaCBBQ0FCIG9mZiBvZiBicmFuY2ggQUMgYW5kIHRoZW4gbWVyZ2luZyBBQgoraW50byBpdCwgd291bGQgeWllbGQgdGhlIGNvbmZsaWN0IGluIGEgZGlmZmVyZW50IG9yZGVyLiAgVGhlIGZvcm1lcgord291bGQgc2F5ICJBIGJlY2FtZSBCIG9yIEMsIHdoYXQgbm93PyIgd2hpbGUgdGhlIGxhdHRlciB3b3VsZCBzYXkgIkEKK2JlY2FtZSBDIG9yIEIsIHdoYXQgbm93PyIKKworQXMgYSByZW1pbmRlciwgdGhlIGFjdCBvZiBtZXJnaW5nIEFDIGludG8gQUJBQyBhbmQgcmVzb2x2aW5nIHRoZQorY29uZmxpY3QgdG8gbGVhdmUgbGluZSBEIG1lYW5zIHRoYXQgdGhlIHVzZXIgZGVjbGFyZXM6CisKKyAgICBBZnRlciBleGFtaW5pbmcgd2hhdCBicmFuY2hlcyBBQiBhbmQgQUMgZGlkLCBJIGJlbGlldmUgdGhhdAorICAgIG1ha2luZyBsaW5lIEEgaW50byBsaW5lIEQgaXMgdGhlIGJlc3QgdGhpbmcgdG8gZG8gdGhhdCBpcworICAgIGNvbXBhdGlibGUgd2l0aCB3aGF0IEFCIGFuZCBBQyB3YW50ZWQgdG8gZG8uCisKK1NvIHRoZSBjb25mbGljdCB3ZSB3b3VsZCBzZWUgd2hlbiBtZXJnaW5nIEFCIGludG8gQUNBQiBzaG91bGQgYmUKK3Jlc29sdmVkIHRoZSBzYW1lIHdheS0tLWl0IGlzIHRoZSByZXNvbHV0aW9uIHRoYXQgaXMgaW4gbGluZSB3aXRoIHRoYXQKK2RlY2xhcmF0aW9uLgorCitJbWFnaW5lIHRoYXQgc2ltaWxhcmx5IHByZXZpb3VzbHkgYSBicmFuY2ggWFlYWiB3YXMgZm9ya2VkIGZyb20gWFksCithbmQgWFogd2FzIG1lcmdlZCBpbnRvIGl0LCBhbmQgcmVzb2x2ZWQgIlggYmVjYW1lIFkgb3IgWiIgaW50byAiWAorYmVjYW1lIFciLgorCitOb3csIGlmIGEgYnJhbmNoIEFCWFkgd2FzIGZvcmtlZCBmcm9tIEFCIGFuZCB0aGVuIG1lcmdlZCBYWSwgdGhlbiBBQlhZCit3b3VsZCBoYXZlIGxpbmUgQiBpbiBpdHMgZWFybHkgcGFydCBhbmQgbGluZSBZIGluIGl0cyBsYXRlciBwYXJ0LgorU3VjaCBhIG1lcmdlIHdvdWxkIGJlIHF1aXRlIGNsZWFuLiAgV2UgY2FuIGNvbnN0cnVjdCA0IGNvbWJpbmF0aW9ucwordXNpbmcgdGhlc2UgZm91ciBicmFuY2hlcyAoKEFCLCBBQykgeCAoWFksIFhaKSkuCisKK01lcmdpbmcgQUJYWSBhbmQgQUNYWiB3b3VsZCBtYWtlICJhbiBlYXJseSBBIGJlY2FtZSBCIG9yIEMsIGEgbGF0ZSBYCitiZWNhbWUgWSBvciBaIiBjb25mbGljdCwgd2hpbGUgbWVyZ2luZyBBQ1hZIGFuZCBBQlhaIHdvdWxkIG1ha2UgImFuCitlYXJseSBBIGJlY2FtZSBDIG9yIEIsIGEgbGF0ZSBYIGJlY2FtZSBZIG9yIFoiLiAgV2UgY2FuIHNlZSB0aGVyZSBhcmUKKzQgY29tYmluYXRpb25zIG9mICgiQiBvciBDIiwgIkMgb3IgQiIpIHggKCJYIG9yIFkiLCAiWSBvciBYIikuCisKK0J5IHNvcnRpbmcsIHRoZSBjb25mbGljdCBpcyBnaXZlbiBpdHMgY2Fub25pY2FsIG5hbWUsIG5hbWVseSwgImFuCitlYXJseSBwYXJ0IGJlY2FtZSBCIG9yIEMsIGEgbGF0ZSBwYXJ0IGJlY2FtZSBYIG9yIFkiLCBhbmQgd2hlbmV2ZXIKK2FueSBvZiB0aGVzZSBmb3VyIHBhdHRlcm5zIGFwcGVhciwgYW5kIHdlIGNhbiBnZXQgdG8gdGhlIHNhbWUgY29uZmxpY3QKK2FuZCByZXNvbHV0aW9uIHRoYXQgd2Ugc2F3IGVhcmxpZXIuCisKK1dpdGhvdXQgdGhlIHNvcnRpbmcsIHdlJ2QgaGF2ZSB0byBzb21laG93IGZpbmQgYSBwcmV2aW91cyByZXNvbHV0aW9uCitmcm9tIGNvbWJpbmF0b3JpYWwgZXhwbG9zaW9uLgorCitDb25mbGljdCBJRCBjYWxjdWxhdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworT25jZSB0aGUgY29uZmxpY3Qgbm9ybWFsaXphdGlvbiBpcyBkb25lLCB0aGUgY29uZmxpY3QgSUQgaXMgY2FsY3VsYXRlZAorYXMgdGhlIHNoYTEgaGFzaCBvZiB0aGUgY29uZmxpY3QgaHVua3MgYXBwZW5kZWQgdG8gZWFjaCBvdGhlciwKK3NlcGFyYXRlZCBieSA8TlVMPiBjaGFyYWN0ZXJzLiAgVGhlIGNvbmZsaWN0IG1hcmtlcnMgYXJlIHN0cmlwcGVkIG91dAorYmVmb3JlIHRoZSBzaGExIGlzIGNhbGN1bGF0ZWQuICBTbyBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgd2hlcmUgd2UKK21lcmdlIGJyYW5jaCBBQyB3aGljaCBjaGFuZ2VzIGxpbmUgQSB0byBsaW5lIEMsIGludG8gYnJhbmNoIEFCLCB3aGljaAorY2hhbmdlcyBsaW5lIEEgdG8gbGluZSBDLCB0aGUgY29uZmxpY3QgSUQgd291bGQgYmUKK1NIQTEoJ0I8TlVMPkM8TlVMPicpLgorCitJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29uZmxpY3RzIGluIG9uZSBmaWxlLCB0aGUgc2hhMSBpcyBjYWxjdWxhdGVkCit0aGUgc2FtZSB3YXkgd2l0aCBhbGwgaHVua3MgYXBwZW5kZWQgdG8gZWFjaCBvdGhlciwgaW4gdGhlIG9yZGVyIGluCit3aGljaCB0aGV5IGFwcGVhciBpbiB0aGUgZmlsZSwgc2VwYXJhdGVkIGJ5IGEgPE5VTD4gY2hhcmFjdGVyLgorCitOZXN0ZWQgY29uZmxpY3RzCit+fn5+fn5+fn5+fn5+fn5+CisKK05lc3RlZCBjb25mbGljdHMgYXJlIGhhbmRsZWQgdmVyeSBzaW1pbGFybHkgdG8gInNpbXBsZSIgY29uZmxpY3RzLgorU2ltaWxhciB0byBzaW1wbGUgY29uZmxpY3RzLCB0aGUgY29uZmxpY3QgaXMgZmlyc3Qgbm9ybWFsaXplZCBieQorc3RyaXBwaW5nIHRoZSBsYWJlbHMgZnJvbSBjb25mbGljdCBtYXJrZXJzLCBzdHJpcHBpbmcgdGhlIGNvbW1vbiBhbmNlc3RvcgordmVyc2lvbiwgYW5kIHRoZSBzb3J0aW5nIHRoZSBjb25mbGljdCBodW5rcywgYm90aCBmb3IgdGhlIG91dGVyIGFuZCB0aGUKK2lubmVyIGNvbmZsaWN0LiAgVGhpcyBpcyBkb25lIHJlY3Vyc2l2ZWx5LCBzbyBhbnkgbnVtYmVyIG9mIG5lc3RlZAorY29uZmxpY3RzIGNhbiBiZSBoYW5kbGVkLgorCitOb3RlIHRoYXQgdGhpcyBvbmx5IHdvcmtzIGZvciBjb25mbGljdCBtYXJrZXJzIHRoYXQgImNsZWFubHkgbmVzdCIuICBJZgordGhlcmUgYXJlIGFueSB1bm1hdGNoZWQgY29uZmxpY3QgbWFya2VycywgcmVyZXJlIHdpbGwgZmFpbCB0byBoYW5kbGUKK3RoZSBjb25mbGljdCBhbmQgcmVjb3JkIGEgY29uZmxpY3QgcmVzb2x1dGlvbi4KKworVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyBpbiBob3cgdGhlIGNvbmZsaWN0IElEIGlzIGNhbGN1bGF0ZWQuICBGb3IgdGhlCitpbm5lciBjb25mbGljdCwgdGhlIGNvbmZsaWN0IG1hcmtlcnMgdGhlbXNlbHZlcyBhcmUgbm90IHN0cmlwcGVkIG91dAorYmVmb3JlIGNhbGN1bGF0aW5nIHRoZSBzaGExLgorCitTYXkgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGNvbmZsaWN0IGZvciBleGFtcGxlOgorCisgICAgPDw8PDw8PCBIRUFECisgICAgMQorICAgID09PT09PT0KKyAgICA8PDw8PDw8IEhFQUQKKyAgICAzCisgICAgPT09PT09PQorICAgIDIKKyAgICA+Pj4+Pj4+IGJyYW5jaC0yCisgICAgPj4+Pj4+PiBicmFuY2gtM34KKworQWZ0ZXIgc3RyaXBwaW5nIG91dCB0aGUgbGFiZWxzIG9mIHRoZSBjb25mbGljdCBtYXJrZXJzLCBhbmQgc29ydGluZwordGhlIGh1bmtzLCB0aGUgY29uZmxpY3Qgd291bGQgbG9vayBhcyBmb2xsb3dzOgorCisgICAgPDw8PDw8PAorICAgIDEKKyAgICA9PT09PT09CisgICAgPDw8PDw8PAorICAgIDIKKyAgICA9PT09PT09CisgICAgMworICAgID4+Pj4+Pj4KKyAgICA+Pj4+Pj4+CisKK2FuZCBmaW5hbGx5IHRoZSBjb25mbGljdCBJRCB3b3VsZCBiZSBjYWxjdWxhdGVkIGFzOgorYHNoYTEoJzE8TlVMPjw8PDw8PDxcbjNcbj09PT09PT1cbjJcbj4+Pj4+Pj48TlVMPicpYApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2VuZC1wYWNrLXBpcGVsaW5lLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3NlbmQtcGFjay1waXBlbGluZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1YTBiYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3NlbmQtcGFjay1waXBlbGluZS50eHQKQEAgLTAsMCArMSw2MyBAQAorR2l0LXNlbmQtcGFjayBpbnRlcm5hbHMKKz09PT09PT09PT09PT09PT09PT09PT09CisKK092ZXJhbGwgb3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLQorCisuIENvbm5lY3RzIHRvIHRoZSByZW1vdGUgc2lkZSBhbmQgaW52b2tlcyBnaXQtcmVjZWl2ZS1wYWNrLgorCisuIExlYXJucyB3aGF0IHJlZnMgdGhlIHJlbW90ZSBoYXMgYW5kIHdoYXQgY29tbWl0IHRoZXkgcG9pbnQgYXQuCisgIE1hdGNoZXMgdGhlbSB0byB0aGUgcmVmc3BlY3Mgd2UgYXJlIHB1c2hpbmcuCisKKy4gQ2hlY2tzIGlmIHRoZXJlIGFyZSBub24tZmFzdC1mb3J3YXJkcy4gIFVubGlrZSBmZXRjaC1wYWNrLAorICB0aGUgcmVwb3NpdG9yeSBzZW5kLXBhY2sgcnVucyBpbiBpcyBzdXBwb3NlZCB0byBiZSBhIHN1cGVyc2V0CisgIG9mIHRoZSByZWNpcGllbnQgaW4gZmFzdC1mb3J3YXJkIGNhc2VzLCBzbyB0aGVyZSBpcyBubyBuZWVkCisgIGZvciB3YW50L2hhdmUgZXhjaGFuZ2VzLCBhbmQgZmFzdC1mb3J3YXJkIGNoZWNrIGNhbiBiZSBkb25lCisgIGxvY2FsbHkuICBUZWxsIHRoZSByZXN1bHQgdG8gdGhlIG90aGVyIGVuZC4KKworLiBDYWxscyBwYWNrX29iamVjdHMoKSB3aGljaCBnZW5lcmF0ZXMgYSBwYWNrZmlsZSBhbmQgc2VuZHMgaXQKKyAgb3ZlciB0byB0aGUgb3RoZXIgZW5kLgorCisuIElmIHRoZSByZW1vdGUgc2lkZSBpcyBuZXcgZW5vdWdoICh2MS4xLjAgb3IgbGF0ZXIpLCB3YWl0IGZvcgorICB0aGUgdW5wYWNrIGFuZCBob29rIHN0YXR1cyBmcm9tIHRoZSBvdGhlciBlbmQuCisKKy4gRXhpdCB3aXRoIGFwcHJvcHJpYXRlIGVycm9yIGNvZGVzLgorCisKK1BhY2tfb2JqZWN0cyBwaXBlbGluZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZnVuY3Rpb24gZ2V0cyBvbmUgZmlsZSBkZXNjcmlwdG9yIChgZmRgKSB3aGljaCBpcyBlaXRoZXIgYQorc29ja2V0IChvdmVyIHRoZSBuZXR3b3JrKSBvciBhIHBpcGUgKGxvY2FsKS4gIFdoYXQncyB3cml0dGVuIHRvCit0aGlzIGZkIGdvZXMgdG8gZ2l0LXJlY2VpdmUtcGFjayB0byBiZSB1bnBhY2tlZC4KKworICAgIHNlbmQtcGFjayAtLS0+IGZkIC0tLT4gcmVjZWl2ZS1wYWNrCisKK1RoZSBmdW5jdGlvbiBwYWNrX29iamVjdHMgY3JlYXRlcyBhIHBpcGUgYW5kIHRoZW4gZm9ya3MuICBUaGUKK2ZvcmtlZCBjaGlsZCBleGVjcyBwYWNrLW9iamVjdHMgd2l0aCAtLXJldnMgdG8gcmVjZWl2ZSByZXZpc2lvbgorcGFyYW1ldGVycyBmcm9tIGl0cyBzdGFuZGFyZCBpbnB1dC4gVGhpcyBwcm9jZXNzIHdpbGwgd3JpdGUgdGhlCitwYWNrZmlsZSB0byB0aGUgb3RoZXIgZW5kLgorCisgICAgc2VuZC1wYWNrCisgICAgICAgfAorICAgICAgIHBhY2tfb2JqZWN0cygpIC0tLT4gZmQgLS0tPiByZWNlaXZlLXBhY2sKKyAgICAgICAgICB8IF4gKHBpcGUpCisJICB2IHwKKyAgICAgICAgIChjaGlsZCkKKworVGhlIGNoaWxkIGR1cDIncyB0byBhcnJhbmdlIGl0cyBzdGFuZGFyZCBvdXRwdXQgdG8gZ28gYmFjayB0bwordGhlIG90aGVyIGVuZCwgYW5kIHJlYWQgaXRzIHN0YW5kYXJkIGlucHV0IHRvIGNvbWUgZnJvbSB0aGUKK3BpcGUuICBBZnRlciB0aGF0IGl0IGV4ZWMncyBwYWNrLW9iamVjdHMuICBPbiB0aGUgb3RoZXIgaGFuZCwKK3RoZSBwYXJlbnQgcHJvY2VzcywgYmVmb3JlIHN0YXJ0aW5nIHRvIGZlZWQgdGhlIGNoaWxkIHBpcGVsaW5lLAorY2xvc2VzIHRoZSByZWFkaW5nIHNpZGUgb2YgdGhlIHBpcGUgYW5kIGZkIHRvIHJlY2VpdmUtcGFjay4KKworICAgIHNlbmQtcGFjaworICAgICAgIHwKKyAgICAgICBwYWNrX29iamVjdHMocGFyZW50KQorICAgICAgICAgIHwKKwkgIHYgWzBdCisgICAgICAgICBwYWNrLW9iamVjdHMgWzBdIC0tLT4gcmVjZWl2ZS1wYWNrCisKKworW2pjOiB0aGUgcGlwZWxpbmUgd2FzIG11Y2ggbW9yZSBjb21wbGV4IGFuZCBuZWVkZWQgZG9jdW1lbnRhdGlvbiBiZWZvcmUKKyBJIHVuZGVyc3Rvb2QgYW4gZWFybGllciBidWcsIGJ1dCBub3cgaXQgaXMgdHJpdmlhbCBhbmQgc3RyYWlnaHRmb3J3YXJkLl0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3NoYWxsb3cudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2hhbGxvdy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFkZWRmZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3NoYWxsb3cudHh0CkBAIC0wLDAgKzEsNjAgQEAKK1NoYWxsb3cgY29tbWl0cworPT09PT09PT09PT09PT09CisKKy5EZWZpbml0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1NoYWxsb3cgY29tbWl0cyBkbyBoYXZlIHBhcmVudHMsIGJ1dCBub3QgaW4gdGhlIHNoYWxsb3cKK3JlcG8sIGFuZCB0aGVyZWZvcmUgZ3JhZnRzIGFyZSBpbnRyb2R1Y2VkIHByZXRlbmRpbmcgdGhhdAordGhlc2UgY29tbWl0cyBoYXZlIG5vIHBhcmVudHMuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworJEdJVF9ESVIvc2hhbGxvdyBsaXN0cyBjb21taXQgb2JqZWN0IG5hbWVzIGFuZCB0ZWxscyBHaXQgdG8KK3ByZXRlbmQgYXMgaWYgdGhleSBhcmUgcm9vdCBjb21taXRzIChlLmcuICJnaXQgbG9nIiB0cmF2ZXJzYWwKK3N0b3BzIGFmdGVyIHNob3dpbmcgdGhlbTsgImdpdCBmc2NrIiBkb2VzIG5vdCBjb21wbGFpbiBzYXlpbmcKK3RoZSBjb21taXRzIGxpc3RlZCBvbiB0aGVpciAicGFyZW50IiBsaW5lcyBkbyBub3QgZXhpc3QpLgorCitFYWNoIGxpbmUgY29udGFpbnMgZXhhY3RseSBvbmUgU0hBLTEuIFdoZW4gcmVhZCwgYSBjb21taXRfZ3JhZnQKK3dpbGwgYmUgY29uc3RydWN0ZWQsIHdoaWNoIGhhcyBucl9wYXJlbnQgPCAwIHRvIG1ha2UgaXQgZWFzaWVyCit0byBkaXNjZXJuIGZyb20gdXNlciBwcm92aWRlZCBncmFmdHMuCisKK05vdGUgdGhhdCB0aGUgc2hhbGxvdyBmZWF0dXJlIGNvdWxkIG5vdCBiZSBjaGFuZ2VkIGVhc2lseSB0bwordXNlIHJlcGxhY2UgcmVmczogYSBjb21taXQgY29udGFpbmluZyBhIGBtZXJnZXRhZ2AgaXMgbm90IGFsbG93ZWQKK3RvIGJlIHJlcGxhY2VkLCBub3QgZXZlbiBieSBhIHJvb3QgY29tbWl0LiBTdWNoIGEgY29tbWl0IGNhbiBiZQorbWFkZSBzaGFsbG93LCB0aG91Z2guIEFsc28sIGhhdmluZyBhIGBzaGFsbG93YCBmaWxlIGV4cGxpY2l0bHkKK2xpc3RpbmcgYWxsIHRoZSBjb21taXRzIG1hZGUgc2hhbGxvdyBtYWtlcyBpdCBhICpsb3QqIGVhc2llciB0bworZG8gc2hhbGxvdy1zcGVjaWZpYyB0aGluZ3Mgc3VjaCBhcyB0byBkZWVwZW4gdGhlIGhpc3RvcnkuCisKK1NpbmNlIGZzY2stb2JqZWN0cyByZWxpZXMgb24gdGhlIGxpYnJhcnkgdG8gcmVhZCB0aGUgb2JqZWN0cywKK2l0IGhvbm91cnMgc2hhbGxvdyBjb21taXRzIGF1dG9tYXRpY2FsbHkuCisKK1RoZXJlIGFyZSBzb21lIHVuZmluaXNoZWQgZW5kcyBvZiB0aGUgd2hvbGUgc2hhbGxvdyBidXNpbmVzczoKKworLSBtYXliZSB3ZSBoYXZlIHRvIGZvcmNlIG5vbi10aGluIHBhY2tzIHdoZW4gZmV0Y2hpbmcgaW50byBhCisgIHNoYWxsb3cgcmVwbyAoQVRNIHRoZXkgYXJlIGZvcmNlZCBub24tdGhpbikuCisKKy0gQSBzcGVjaWFsIGhhbmRsaW5nIG9mIGEgc2hhbGxvdyB1cHN0cmVhbSBpcyBuZWVkZWQuIEF0IHNvbWUKKyAgc3RhZ2UsIHVwbG9hZC1wYWNrIGhhcyB0byBjaGVjayBpZiBpdCBzZW5kcyBhIHNoYWxsb3cgY29tbWl0LAorICBhbmQgaXQgc2hvdWxkIHNlbmQgdGhhdCBpbmZvcm1hdGlvbiBlYXJseSAob3IgZmFpbCwgaWYgdGhlCisgIGNsaWVudCBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgcmVwb3NpdG9yaWVzKS4gVGhlcmUgaXMgbm8KKyAgc3VwcG9ydCBhdCBhbGwgZm9yIHRoaXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMuCisKKy0gSW5zdGVhZCBvZiBsb2NraW5nICRHSVRfRElSL3NoYWxsb3cgYXQgdGhlIHN0YXJ0LCBqdXN0CisgIHRoZSB0aW1lc3RhbXAgb2YgaXQgaXMgbm90ZWQsIGFuZCB3aGVuIGl0IGNvbWVzIHRvIHdyaXRpbmcgaXQsCisgIGEgY2hlY2sgaXMgcGVyZm9ybWVkIGlmIHRoZSBtdGltZSBpcyBzdGlsbCB0aGUgc2FtZSwgZHlpbmcgaWYKKyAgaXQgaXMgbm90LgorCistIEl0IGlzIHVuY2xlYXIgaG93ICJwdXNoIGludG8vZnJvbSBhIHNoYWxsb3cgcmVwbyIgc2hvdWxkIGJlaGF2ZS4KKworLSBJZiB5b3UgZGVlcGVuIGEgaGlzdG9yeSwgeW91J2Qgd2FudCB0byBnZXQgdGhlIHRhZ3Mgb2YgdGhlCisgIG5ld2x5IHN0b3JlZCAoYnV0IG9sZGVyISkgY29tbWl0cy4gVGhpcyBkb2VzIG5vdCB3b3JrIHJpZ2h0IG5vdy4KKworVG8gbWFrZSBhIHNoYWxsb3cgY2xvbmUsIHlvdSBjYW4gY2FsbCAiZ2l0LWNsb25lIC0tZGVwdGggMjAgcmVwbyIuCitUaGUgcmVzdWx0IGNvbnRhaW5zIG9ubHkgY29tbWl0IGNoYWlucyB3aXRoIGEgbGVuZ3RoIG9mIGF0IG1vc3QgMjAuCitJdCBhbHNvIHdyaXRlcyBhbiBhcHByb3ByaWF0ZSAkR0lUX0RJUi9zaGFsbG93LgorCitZb3UgY2FuIGRlZXBlbiBhIHNoYWxsb3cgcmVwb3NpdG9yeSB3aXRoICJnaXQtZmV0Y2ggLS1kZXB0aCAyMAorcmVwbyBicmFuY2giLCB3aGljaCB3aWxsIGZldGNoIGJyYW5jaCBmcm9tIHJlcG8sIGJ1dCBzdG9wIGF0IGRlcHRoCisyMCwgdXBkYXRpbmcgJEdJVF9ESVIvc2hhbGxvdy4KKworVGhlIHNwZWNpYWwgZGVwdGggMjE0NzQ4MzY0NyAob3IgMHg3ZmZmZmZmZiwgdGhlIGxhcmdlc3QgcG9zaXRpdmUKK251bWJlciBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciBjYW4gY29udGFpbikgbWVhbnMgaW5maW5pdGUgZGVwdGguCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9zaWduYXR1cmUtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3NpZ25hdHVyZS1mb3JtYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOTQwNmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9zaWduYXR1cmUtZm9ybWF0LnR4dApAQCAtMCwwICsxLDE4NiBAQAorR2l0IHNpZ25hdHVyZSBmb3JtYXQKKz09PT09PT09PT09PT09PT09PT09CisKKz09IE92ZXJ2aWV3CisKK0dpdCB1c2VzIGNyeXB0b2dyYXBoaWMgc2lnbmF0dXJlcyBpbiB2YXJpb3VzIHBsYWNlcywgY3VycmVudGx5IG9iamVjdHMgKHRhZ3MsCitjb21taXRzLCBtZXJnZXRhZ3MpIGFuZCB0cmFuc2FjdGlvbnMgKHB1c2hlcykuIEluIGV2ZXJ5IGNhc2UsIHRoZSBjb21tYW5kIHdoaWNoCitpcyBhYm91dCB0byBjcmVhdGUgYW4gb2JqZWN0IG9yIHRyYW5zYWN0aW9uIGRldGVybWluZXMgYSBwYXlsb2FkIGZyb20gdGhhdCwKK2NhbGxzIGdwZyB0byBvYnRhaW4gYSBkZXRhY2hlZCBzaWduYXR1cmUgZm9yIHRoZSBwYXlsb2FkIChgZ3BnIC1ic2FgKSBhbmQKK2VtYmVkcyB0aGUgc2lnbmF0dXJlIGludG8gdGhlIG9iamVjdCBvciB0cmFuc2FjdGlvbi4KKworU2lnbmF0dXJlcyBhbHdheXMgYmVnaW4gd2l0aCBgLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS1gCithbmQgZW5kIHdpdGggYC0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLWAsIHVubGVzcyBncGcgaXMgdG9sZCB0bworcHJvZHVjZSBSRkMxOTkxIHNpZ25hdHVyZXMgd2hpY2ggdXNlIGBNRVNTQUdFYCBpbnN0ZWFkIG9mIGBTSUdOQVRVUkVgLgorCitUaGUgc2lnbmVkIHBheWxvYWQgYW5kIHRoZSB3YXkgdGhlIHNpZ25hdHVyZSBpcyBlbWJlZGRlZCBkZXBlbmRzCitvbiB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IHJlc3AuIHRyYW5zYWN0aW9uLgorCis9PSBUYWcgc2lnbmF0dXJlcworCistIGNyZWF0ZWQgYnk6IGBnaXQgdGFnIC1zYAorLSBwYXlsb2FkOiBhbm5vdGF0ZWQgdGFnIG9iamVjdAorLSBlbWJlZGRpbmc6IGFwcGVuZCB0aGUgc2lnbmF0dXJlIHRvIHRoZSB1bnNpZ25lZCB0YWcgb2JqZWN0CistIGV4YW1wbGU6IHRhZyBgc2lnbmVkdGFnYCB3aXRoIHN1YmplY3QgYHNpZ25lZCB0YWdgCisKKy0tLS0KK29iamVjdCAwNGI4NzE3OTZkYzA0MjBmOGU3NTYxYTg5NWI1MjQ4NGI3MDFkNTFhCit0eXBlIGNvbW1pdAordGFnIHNpZ25lZHRhZwordGFnZ2VyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTQ2NTk4MTAwNiArMDAwMAorCitzaWduZWQgdGFnCisKK3NpZ25lZCB0YWcgbWVzc2FnZSBib2R5CistLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLQorVmVyc2lvbjogR251UEcgdjEKKworaVFFY0JBQUJBZ0FHQlFKWFlSaE9BQW9KRUdFSkxvVzNJbkdKa2xrSUFJY25oTDdSd0ViLytRZVg5ZW5rWGh4bgorcnhmZHFydldkMUs4MHNsMlRPdDhCZy9OWXdyVUJ3L1JXSitzZy9oaEhwNFd0dkUxSERHSGxrRXozeTExTGt1aAorOHRTeFMzcUtUeFhVR296eVBHdUU5MHNKZkV4aFpsVzRrbklRMXd0L3lXcU0rMzNFOXBONGh6UHFMd3lyZG9kcworcThGV0VxUFBVYlNKWG9NYlJQdzA0UzVqckx0WlNzVVdiUllqbUpDSHpsaFNmRldXNGVGZDM3dXF1SWFMVUJTMAorcmtDM0pyeDc0MjBqa0lwZ0ZjVEkyczYwdWhTUUx6Z2NDd2RBMnVrU1lJUm5qZy96RGtqOCszaC9HYVJPSjcyeAorbFp5STZIV2l4S0prV3c4bEU5YUFPRDlUbVRXOXNGSndjVkF6bUF1Rlgya1VyZURVS01aZHVHY29SWUdwRDdFPQorPWpwWGEKKy0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQorLS0tLQorCistIHZlcmlmeSB3aXRoOiBgZ2l0IHZlcmlmeS10YWcgWy12XWAgb3IgYGdpdCB0YWcgLXZgCisKKy0tLS0KK2dwZzogU2lnbmF0dXJlIG1hZGUgV2VkIEp1biAxNSAxMDo1Njo0NiAyMDE2IENFU1QgdXNpbmcgUlNBIGtleSBJRCBCNzIyNzE4OQorZ3BnOiBHb29kIHNpZ25hdHVyZSBmcm9tICJFcmlzIERpc2NvcmRpYSA8ZGlzY29yZEBleGFtcGxlLm5ldD4iCitncGc6IFdBUk5JTkc6IFRoaXMga2V5IGlzIG5vdCBjZXJ0aWZpZWQgd2l0aCBhIHRydXN0ZWQgc2lnbmF0dXJlIQorZ3BnOiAgICAgICAgICBUaGVyZSBpcyBubyBpbmRpY2F0aW9uIHRoYXQgdGhlIHNpZ25hdHVyZSBiZWxvbmdzIHRvIHRoZSBvd25lci4KK1ByaW1hcnkga2V5IGZpbmdlcnByaW50OiBENEJFIDIyMzEgMUFEMyAxMzFFIDVFREEgIDI5QTQgNjEwOSAyRTg1IEI3MjIgNzE4OQorb2JqZWN0IDA0Yjg3MTc5NmRjMDQyMGY4ZTc1NjFhODk1YjUyNDg0YjcwMWQ1MWEKK3R5cGUgY29tbWl0Cit0YWcgc2lnbmVkdGFnCit0YWdnZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxNDY1OTgxMDA2ICswMDAwCisKK3NpZ25lZCB0YWcKKworc2lnbmVkIHRhZyBtZXNzYWdlIGJvZHkKKy0tLS0KKworPT0gQ29tbWl0IHNpZ25hdHVyZXMKKworLSBjcmVhdGVkIGJ5OiBgZ2l0IGNvbW1pdCAtU2AKKy0gcGF5bG9hZDogY29tbWl0IG9iamVjdAorLSBlbWJlZGRpbmc6IGhlYWRlciBlbnRyeSBgZ3Bnc2lnYAorICAoY29udGVudCBpcyBwcmVjZWRlZCBieSBhIHNwYWNlKQorLSBleGFtcGxlOiBjb21taXQgd2l0aCBzdWJqZWN0IGBzaWduZWQgY29tbWl0YAorCistLS0tCit0cmVlIGVlYmZlZDk0ZTc1ZTc3NjA1NDBkMTQ4NWM3NDA5MDI1OTBhMDAzMzIKK3BhcmVudCAwNGI4NzE3OTZkYzA0MjBmOGU3NTYxYTg5NWI1MjQ4NGI3MDFkNTFhCithdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTQ2NTk4MTEzNyArMDAwMAorY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTQ2NTk4MTEzNyArMDAwMAorZ3Bnc2lnIC0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tCisgVmVyc2lvbjogR251UEcgdjEKKworIGlRRWNCQUFCQWdBR0JRSlhZUmpSQUFvSkVHRUpMb1czSW5HSjNJd0lBSVk0U0E2R3hZM0JqTDYwWXl2c0pQaC8KKyBIUkNKd0grdzd3dDNZYy85L2JXMkYrZ0Y3MmtkSE9PczJqZnYrT1pocTBxNE9BTjZmdlZTY3pJU1kvODJMcFM3CisgRFZkTVFqMi9ZY0hEVDR4ckROQm5YbnZpRE85RzdhbS85T0U3N2tFYlhycDdRUHh2aGpraWNITnd5MnJFZmxBQQorIHpuMDc1cnRFRVJESHI4blJZaURoOGVWcmVmU083RCtiZFE3Z3YrN0dzWU1zZDJhdUpXaTFkSE9TZlRyOUhJRjQKKyBISmhXWFQ5ZDJmOFcrZGlSWVhHaDRYMHdZaUdnNm5hL3NvWGMrdmR0RFlCekl4YW5ScWpnOGpDQWVvMWVPVGsxCisgRWRUd2hjVFpsSTB4NXB2SjNIMCs0aEEyanRsZFZ0bVBNNE9UQjBjVHJFV0JhZDdYVjZZZ2l5dUlJNzNWZTNJPQorID1qS0hNCisgLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tCisKK3NpZ25lZCBjb21taXQKKworc2lnbmVkIGNvbW1pdCBtZXNzYWdlIGJvZHkKKy0tLS0KKworLSB2ZXJpZnkgd2l0aDogYGdpdCB2ZXJpZnktY29tbWl0IFstdl1gIChvciBgZ2l0IHNob3cgLS1zaG93LXNpZ25hdHVyZWApCisKKy0tLS0KK2dwZzogU2lnbmF0dXJlIG1hZGUgV2VkIEp1biAxNSAxMDo1ODo1NyAyMDE2IENFU1QgdXNpbmcgUlNBIGtleSBJRCBCNzIyNzE4OQorZ3BnOiBHb29kIHNpZ25hdHVyZSBmcm9tICJFcmlzIERpc2NvcmRpYSA8ZGlzY29yZEBleGFtcGxlLm5ldD4iCitncGc6IFdBUk5JTkc6IFRoaXMga2V5IGlzIG5vdCBjZXJ0aWZpZWQgd2l0aCBhIHRydXN0ZWQgc2lnbmF0dXJlIQorZ3BnOiAgICAgICAgICBUaGVyZSBpcyBubyBpbmRpY2F0aW9uIHRoYXQgdGhlIHNpZ25hdHVyZSBiZWxvbmdzIHRvIHRoZSBvd25lci4KK1ByaW1hcnkga2V5IGZpbmdlcnByaW50OiBENEJFIDIyMzEgMUFEMyAxMzFFIDVFREEgIDI5QTQgNjEwOSAyRTg1IEI3MjIgNzE4OQordHJlZSBlZWJmZWQ5NGU3NWU3NzYwNTQwZDE0ODVjNzQwOTAyNTkwYTAwMzMyCitwYXJlbnQgMDRiODcxNzk2ZGMwNDIwZjhlNzU2MWE4OTViNTI0ODRiNzAxZDUxYQorYXV0aG9yIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IDE0NjU5ODExMzcgKzAwMDAKK2NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDE0NjU5ODExMzcgKzAwMDAKKworc2lnbmVkIGNvbW1pdAorCitzaWduZWQgY29tbWl0IG1lc3NhZ2UgYm9keQorLS0tLQorCis9PSBNZXJnZXRhZyBzaWduYXR1cmVzCisKKy0gY3JlYXRlZCBieTogYGdpdCBtZXJnZWAgb24gc2lnbmVkIHRhZworLSBwYXlsb2FkL2VtYmVkZGluZzogdGhlIHdob2xlIHNpZ25lZCB0YWcgb2JqZWN0IGlzIGVtYmVkZGVkIGludG8KKyAgdGhlIChtZXJnZSkgY29tbWl0IG9iamVjdCBhcyBoZWFkZXIgZW50cnkgYG1lcmdldGFnYAorLSBleGFtcGxlOiBtZXJnZSBvZiB0aGUgc2lnbmVkIHRhZyBgc2lnbmVkdGFnYCBhcyBhYm92ZQorCistLS0tCit0cmVlIGM3YjFjZmYwMzlhOTNmMzYwMGExZDE4YjgyZDI2Njg4NjY4YzdkZWEKK3BhcmVudCBjMzM0MjliZTk0YjVmMmQzZWU5YjBhZGFkMjIzZjg3N2YxNzRiMDVkCitwYXJlbnQgMDRiODcxNzk2ZGMwNDIwZjhlNzU2MWE4OTViNTI0ODRiNzAxZDUxYQorYXV0aG9yIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IDE0NjU5ODIwMDkgKzAwMDAKK2NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDE0NjU5ODIwMDkgKzAwMDAKK21lcmdldGFnIG9iamVjdCAwNGI4NzE3OTZkYzA0MjBmOGU3NTYxYTg5NWI1MjQ4NGI3MDFkNTFhCisgdHlwZSBjb21taXQKKyB0YWcgc2lnbmVkdGFnCisgdGFnZ2VyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTQ2NTk4MTAwNiArMDAwMAorCisgc2lnbmVkIHRhZworCisgc2lnbmVkIHRhZyBtZXNzYWdlIGJvZHkKKyAtLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLQorIFZlcnNpb246IEdudVBHIHYxCisKKyBpUUVjQkFBQkFnQUdCUUpYWVJoT0FBb0pFR0VKTG9XM0luR0prbGtJQUljbmhMN1J3RWIvK1FlWDllbmtYaHhuCisgcnhmZHFydldkMUs4MHNsMlRPdDhCZy9OWXdyVUJ3L1JXSitzZy9oaEhwNFd0dkUxSERHSGxrRXozeTExTGt1aAorIDh0U3hTM3FLVHhYVUdvenlQR3VFOTBzSmZFeGhabFc0a25JUTF3dC95V3FNKzMzRTlwTjRoelBxTHd5cmRvZHMKKyBxOEZXRXFQUFViU0pYb01iUlB3MDRTNWpyTHRaU3NVV2JSWWptSkNIemxoU2ZGV1c0ZUZkMzd1cXVJYUxVQlMwCisgcmtDM0pyeDc0MjBqa0lwZ0ZjVEkyczYwdWhTUUx6Z2NDd2RBMnVrU1lJUm5qZy96RGtqOCszaC9HYVJPSjcyeAorIGxaeUk2SFdpeEtKa1d3OGxFOWFBT0Q5VG1UVzlzRkp3Y1ZBem1BdUZYMmtVcmVEVUtNWmR1R2NvUllHcEQ3RT0KKyA9anBYYQorIC0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQorCitNZXJnZSB0YWcgJ3NpZ25lZHRhZycgaW50byBkb3duc3RyZWFtCisKK3NpZ25lZCB0YWcKKworc2lnbmVkIHRhZyBtZXNzYWdlIGJvZHkKKworIyBncGc6IFNpZ25hdHVyZSBtYWRlIFdlZCBKdW4gMTUgMDg6NTY6NDYgMjAxNiBVVEMgdXNpbmcgUlNBIGtleSBJRCBCNzIyNzE4OQorIyBncGc6IEdvb2Qgc2lnbmF0dXJlIGZyb20gIkVyaXMgRGlzY29yZGlhIDxkaXNjb3JkQGV4YW1wbGUubmV0PiIKKyMgZ3BnOiBXQVJOSU5HOiBUaGlzIGtleSBpcyBub3QgY2VydGlmaWVkIHdpdGggYSB0cnVzdGVkIHNpZ25hdHVyZSEKKyMgZ3BnOiAgICAgICAgICBUaGVyZSBpcyBubyBpbmRpY2F0aW9uIHRoYXQgdGhlIHNpZ25hdHVyZSBiZWxvbmdzIHRvIHRoZSBvd25lci4KKyMgUHJpbWFyeSBrZXkgZmluZ2VycHJpbnQ6IEQ0QkUgMjIzMSAxQUQzIDEzMUUgNUVEQSAgMjlBNCA2MTA5IDJFODUgQjcyMiA3MTg5CistLS0tCisKKy0gdmVyaWZ5IHdpdGg6IHZlcmlmaWNhdGlvbiBpcyBlbWJlZGRlZCBpbiBtZXJnZSBjb21taXQgbWVzc2FnZSBieSBkZWZhdWx0LAorICBhbHRlcm5hdGl2ZWx5IHdpdGggYGdpdCBzaG93IC0tc2hvdy1zaWduYXR1cmVgOgorCistLS0tCitjb21taXQgOTg2M2YwYzc2ZmY3ODcxMmI2ODAwZTE5OWE0NmFhNTZhZmJjYmQ0OQorbWVyZ2VkIHRhZyAnc2lnbmVkdGFnJworZ3BnOiBTaWduYXR1cmUgbWFkZSBXZWQgSnVuIDE1IDEwOjU2OjQ2IDIwMTYgQ0VTVCB1c2luZyBSU0Ega2V5IElEIEI3MjI3MTg5CitncGc6IEdvb2Qgc2lnbmF0dXJlIGZyb20gIkVyaXMgRGlzY29yZGlhIDxkaXNjb3JkQGV4YW1wbGUubmV0PiIKK2dwZzogV0FSTklORzogVGhpcyBrZXkgaXMgbm90IGNlcnRpZmllZCB3aXRoIGEgdHJ1c3RlZCBzaWduYXR1cmUhCitncGc6ICAgICAgICAgIFRoZXJlIGlzIG5vIGluZGljYXRpb24gdGhhdCB0aGUgc2lnbmF0dXJlIGJlbG9uZ3MgdG8gdGhlIG93bmVyLgorUHJpbWFyeSBrZXkgZmluZ2VycHJpbnQ6IEQ0QkUgMjIzMSAxQUQzIDEzMUUgNUVEQSAgMjlBNCA2MTA5IDJFODUgQjcyMiA3MTg5CitNZXJnZTogYzMzNDI5YiAwNGI4NzE3CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFdlZCBKdW4gMTUgMDk6MTM6MjkgMjAxNiArMDAwMAorCisgICAgTWVyZ2UgdGFnICdzaWduZWR0YWcnIGludG8gZG93bnN0cmVhbQorCisgICAgc2lnbmVkIHRhZworCisgICAgc2lnbmVkIHRhZyBtZXNzYWdlIGJvZHkKKworICAgICMgZ3BnOiBTaWduYXR1cmUgbWFkZSBXZWQgSnVuIDE1IDA4OjU2OjQ2IDIwMTYgVVRDIHVzaW5nIFJTQSBrZXkgSUQgQjcyMjcxODkKKyAgICAjIGdwZzogR29vZCBzaWduYXR1cmUgZnJvbSAiRXJpcyBEaXNjb3JkaWEgPGRpc2NvcmRAZXhhbXBsZS5uZXQ+IgorICAgICMgZ3BnOiBXQVJOSU5HOiBUaGlzIGtleSBpcyBub3QgY2VydGlmaWVkIHdpdGggYSB0cnVzdGVkIHNpZ25hdHVyZSEKKyAgICAjIGdwZzogICAgICAgICAgVGhlcmUgaXMgbm8gaW5kaWNhdGlvbiB0aGF0IHRoZSBzaWduYXR1cmUgYmVsb25ncyB0byB0aGUgb3duZXIuCisgICAgIyBQcmltYXJ5IGtleSBmaW5nZXJwcmludDogRDRCRSAyMjMxIDFBRDMgMTMxRSA1RURBICAyOUE0IDYxMDkgMkU4NSBCNzIyIDcxODkKKy0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3RyaXZpYWwtbWVyZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvdHJpdmlhbC1tZXJnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYxYzMzZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3RyaXZpYWwtbWVyZ2UudHh0CkBAIC0wLDAgKzEsMTIxIEBACitUcml2aWFsIG1lcmdlIHJ1bGVzCis9PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBvdXRjb21lcyBvZiB0aGUgdHJpdmlhbCBtZXJnZSBsb2dpYyBpbiByZWFkLXRyZWUuCisKK09uZS13YXkgbWVyZ2UKKy0tLS0tLS0tLS0tLS0KKworVGhpcyByZXBsYWNlcyB0aGUgaW5kZXggd2l0aCBhIGRpZmZlcmVudCB0cmVlLCBrZWVwaW5nIHRoZSBzdGF0IGluZm8KK2ZvciBlbnRyaWVzIHRoYXQgZG9uJ3QgY2hhbmdlLCBhbmQgYWxsb3dpbmcgLXUgdG8gbWFrZSB0aGUgbWluaW11bQorcmVxdWlyZWQgY2hhbmdlcyB0byB0aGUgd29ya2luZyB0cmVlIHRvIGhhdmUgaXQgbWF0Y2guCisKK0VudHJpZXMgbWFya2VkICcrJyBoYXZlIHN0YXQgaW5mb3JtYXRpb24uIFNwYWNlcyBtYXJrZWQgJyonIGRvbid0CithZmZlY3QgdGhlIHJlc3VsdC4KKworICAgaW5kZXggICB0cmVlICAgIHJlc3VsdAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICogICAgICAgKGVtcHR5KSAoZW1wdHkpCisgICAoZW1wdHkpIHRyZWUgICAgdHJlZQorICAgaW5kZXgrICB0cmVlICAgIHRyZWUKKyAgIGluZGV4KyAgaW5kZXggICBpbmRleCsKKworVHdvLXdheSBtZXJnZQorLS0tLS0tLS0tLS0tLQorCitJdCBpcyBwZXJtaXR0ZWQgZm9yIHRoZSBpbmRleCB0byBsYWNrIGFuIGVudHJ5OyB0aGlzIGRvZXMgbm90IHByZXZlbnQKK2FueSBjYXNlIGZyb20gYXBwbHlpbmcuCisKK0lmIHRoZSBpbmRleCBleGlzdHMsIGl0IGlzIGFuIGVycm9yIGZvciBpdCBub3QgdG8gbWF0Y2ggZWl0aGVyIHRoZSBvbGQKK29yIHRoZSByZXN1bHQuCisKK0lmIG11bHRpcGxlIGNhc2VzIGFwcGx5LCB0aGUgb25lIHVzZWQgaXMgbGlzdGVkIGZpcnN0LgorCitBIHJlc3VsdCB3aGljaCBjaGFuZ2VzIHRoZSBpbmRleCBpcyBhbiBlcnJvciBpZiB0aGUgaW5kZXggaXMgbm90IGVtcHR5CithbmQgbm90IHVwIHRvIGRhdGUuCisKK0VudHJpZXMgbWFya2VkICcrJyBoYXZlIHN0YXQgaW5mb3JtYXRpb24uIFNwYWNlcyBtYXJrZWQgJyonIGRvbid0CithZmZlY3QgdGhlIHJlc3VsdC4KKworIGNhc2UgIGluZGV4ICAgb2xkICAgICBuZXcgICAgIHJlc3VsdAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAwLzIgICAoZW1wdHkpICogICAgICAgKGVtcHR5KSAoZW1wdHkpCisgMS8zICAgKGVtcHR5KSAqICAgICAgIG5ldyAgICAgbmV3CisgNC81ICAgaW5kZXgrICAoZW1wdHkpIChlbXB0eSkgaW5kZXgrCisgNi83ICAgaW5kZXgrICAoZW1wdHkpIGluZGV4ICAgaW5kZXgrCisgMTAgICAgaW5kZXgrICBpbmRleCAgIChlbXB0eSkgKGVtcHR5KQorIDE0LzE1IGluZGV4KyAgb2xkICAgICBvbGQgICAgIGluZGV4KworIDE4LzE5IGluZGV4KyAgb2xkICAgICBpbmRleCAgIGluZGV4KworIDIwICAgIGluZGV4KyAgaW5kZXggICBuZXcgICAgIG5ldworCitUaHJlZS13YXkgbWVyZ2UKKy0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyBwZXJtaXR0ZWQgZm9yIHRoZSBpbmRleCB0byBsYWNrIGFuIGVudHJ5OyB0aGlzIGRvZXMgbm90IHByZXZlbnQKK2FueSBjYXNlIGZyb20gYXBwbHlpbmcuCisKK0lmIHRoZSBpbmRleCBleGlzdHMsIGl0IGlzIGFuIGVycm9yIGZvciBpdCBub3QgdG8gbWF0Y2ggZWl0aGVyIHRoZQoraGVhZCBvciAoaWYgdGhlIG1lcmdlIGlzIHRyaXZpYWwpIHRoZSByZXN1bHQuCisKK0lmIG11bHRpcGxlIGNhc2VzIGFwcGx5LCB0aGUgb25lIHVzZWQgaXMgbGlzdGVkIGZpcnN0LgorCitBIHJlc3VsdCBvZiAibm8gbWVyZ2UiIG1lYW5zIHRoYXQgaW5kZXggaXMgbGVmdCBpbiBzdGFnZSAwLCBhbmNlc3QgaW4KK3N0YWdlIDEsIGhlYWQgaW4gc3RhZ2UgMiwgYW5kIHJlbW90ZSBpbiBzdGFnZSAzIChpZiBhbnkgb2YgdGhlc2UgYXJlCitlbXB0eSwgbm8gZW50cnkgaXMgbGVmdCBmb3IgdGhhdCBzdGFnZSkuIE90aGVyd2lzZSwgdGhlIGdpdmVuIGVudHJ5IGlzCitsZWZ0IGluIHN0YWdlIDAsIGFuZCB0aGVyZSBhcmUgbm8gb3RoZXIgZW50cmllcy4KKworQSByZXN1bHQgb2YgIm5vIG1lcmdlIiBpcyBhbiBlcnJvciBpZiB0aGUgaW5kZXggaXMgbm90IGVtcHR5IGFuZCBub3QKK3VwIHRvIGRhdGUuCisKKyplbXB0eSogbWVhbnMgdGhhdCB0aGUgdHJlZSBtdXN0IG5vdCBoYXZlIGEgZGlyZWN0b3J5LWZpbGUgY29uZmxpY3QKKyB3aXRoIHRoZSBlbnRyeS4KKworRm9yIG11bHRpcGxlIGFuY2VzdG9ycywgYSAnKycgbWVhbnMgdGhhdCB0aGlzIGNhc2UgYXBwbGllcyBldmVuIGlmCitvbmx5IG9uZSBhbmNlc3RvciBvciByZW1vdGUgZml0czsgYSAnXicgbWVhbnMgYWxsIG9mIHRoZSBhbmNlc3RvcnMKK211c3QgYmUgdGhlIHNhbWUuCisKKyBjYXNlICBhbmNlc3QgICAgaGVhZCAgICByZW1vdGUgICAgcmVzdWx0CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgICAgIChlbXB0eSkrICAoZW1wdHkpIChlbXB0eSkgICAoZW1wdHkpCisgMkFMVCAgKGVtcHR5KSsgICplbXB0eSogcmVtb3RlICAgIHJlbW90ZQorIDIgICAgIChlbXB0eSleICAoZW1wdHkpIHJlbW90ZSAgICBubyBtZXJnZQorIDNBTFQgIChlbXB0eSkrICBoZWFkICAgICplbXB0eSogICBoZWFkCisgMyAgICAgKGVtcHR5KV4gIGhlYWQgICAgKGVtcHR5KSAgIG5vIG1lcmdlCisgNCAgICAgKGVtcHR5KV4gIGhlYWQgICAgcmVtb3RlICAgIG5vIG1lcmdlCisgNUFMVCAgKiAgICAgICAgIGhlYWQgICAgaGVhZCAgICAgIGhlYWQKKyA2ICAgICBhbmNlc3QrICAgKGVtcHR5KSAoZW1wdHkpICAgbm8gbWVyZ2UKKyA4ICAgICBhbmNlc3ReICAgKGVtcHR5KSBhbmNlc3QgICAgbm8gbWVyZ2UKKyA3ICAgICBhbmNlc3QrICAgKGVtcHR5KSByZW1vdGUgICAgbm8gbWVyZ2UKKyAxMCAgICBhbmNlc3ReICAgYW5jZXN0ICAoZW1wdHkpICAgbm8gbWVyZ2UKKyA5ICAgICBhbmNlc3QrICAgaGVhZCAgICAoZW1wdHkpICAgbm8gbWVyZ2UKKyAxNiAgICBhbmMxL2FuYzIgYW5jMSAgICBhbmMyICAgICAgbm8gbWVyZ2UKKyAxMyAgICBhbmNlc3QrICAgaGVhZCAgICBhbmNlc3QgICAgaGVhZAorIDE0ICAgIGFuY2VzdCsgICBhbmNlc3QgIHJlbW90ZSAgICByZW1vdGUKKyAxMSAgICBhbmNlc3QrICAgaGVhZCAgICByZW1vdGUgICAgbm8gbWVyZ2UKKworT25seSAjMkFMVCBhbmQgIzNBTFQgdXNlICplbXB0eSosIGJlY2F1c2UgdGhlc2UgYXJlIHRoZSBvbmx5IGNhc2VzCit3aGVyZSB0aGVyZSBjYW4gYmUgY29uZmxpY3RzIHRoYXQgZGlkbid0IGV4aXN0IGJlZm9yZS4gTm90ZSB0aGF0IHdlCithbGxvdyBkaXJlY3RvcnktZmlsZSBjb25mbGljdHMgYmV0d2VlbiB0aGluZ3MgaW4gZGlmZmVyZW50IHN0YWdlcworYWZ0ZXIgdGhlIHRyaXZpYWwgbWVyZ2UuCisKK0EgcG9zc2libGUgYWx0ZXJuYXRpdmUgZm9yICM2IGlzIChlbXB0eSksIHdoaWNoIHdvdWxkIG1ha2UgaXQgbGlrZQorIzEuIFRoaXMgaXMgbm90IHVzZWQsIGR1ZSB0byB0aGUgbGlrZWxpaG9vZCB0aGF0IGl0IGFyaXNlcyBkdWUgdG8KK21vdmluZyB0aGUgZmlsZSB0byBtdWx0aXBsZSBkaWZmZXJlbnQgbG9jYXRpb25zIG9yIG1vdmluZyBhbmQgZGVsZXRpbmcKK2l0IGluIGRpZmZlcmVudCBicmFuY2hlcy4KKworQ2FzZSAjMSBpcyBpbmNsdWRlZCBmb3IgY29tcGxldGVuZXNzLCBhbmQgYWxzbyBpbiBjYXNlIHdlIGRlY2lkZSB0bworcHV0IG9uICcrJyBtYXJraW5nczsgYW55IHBhdGggdGhhdCBpcyBuZXZlciBtZW50aW9uZWQgYXQgYWxsIGlzbid0CitoYW5kbGVkLgorCitOb3RlIHRoYXQgIzE2IGlzIHdoZW4gYm90aCAjMTMgYW5kICMxNCBhcHBseTsgaW4gdGhpcyBjYXNlLCB3ZSByZWZ1c2UKK3RoZSB0cml2aWFsIG1lcmdlLCBiZWNhdXNlIHdlIGNhbid0IHRlbGwgZnJvbSB0aGlzIGRhdGEgd2hpY2ggaXMKK3JpZ2h0LiBUaGlzIGlzIGEgY2FzZSBvZiBhIHJldmVydGVkIHBhdGNoIChpbiBzb21lIGRpcmVjdGlvbiwgbWF5YmUKK211bHRpcGxlIHRpbWVzKSwgYW5kIHRoZSByaWdodCBhbnN3ZXIgZGVwZW5kcyBvbiBsb29raW5nIGF0IGNyb3NzaW5ncworb2YgaGlzdG9yeSBvciBjb21tb24gYW5jZXN0b3JzIG9mIHRoZSBhbmNlc3RvcnMuCisKK05vdGUgdGhhdCwgYmV0d2VlbiAjNiwgIzcsICM5LCBhbmQgIzExLCBhbGwgY2FzZXMgbm90IG90aGVyd2lzZQorY292ZXJlZCBhcmUgaGFuZGxlZCBpbiB0aGlzIHRhYmxlLgorCitGb3IgIzggYW5kICMxMCwgdGhlcmUgaXMgYWx0ZXJuYXRpdmUgYmVoYXZpb3IsIG5vdCBjdXJyZW50bHkKK2ltcGxlbWVudGVkLCB3aGVyZSB0aGUgcmVzdWx0IGlzIChlbXB0eSkuIEFzIGN1cnJlbnRseSBpbXBsZW1lbnRlZCwKK3RoZSBhdXRvbWF0aWMgbWVyZ2Ugd2lsbCBnZW5lcmFsbHkgZ2l2ZSB0aGlzIGVmZmVjdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGV4aS54c2wgYi9Eb2N1bWVudGF0aW9uL3RleGkueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOGZmMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RleGkueHNsCkBAIC0wLDAgKzEsMjYgQEAKKzwhLS0gdGV4aS54c2w6CisgICAgIGNvbnZlcnQgcmVmc2VjdGlvbiBlbGVtZW50cyBpbnRvIHJlZnNlY3QgZWxlbWVudHMgdGhhdCBkb2Nib29rMnRleGkgY2FuCisgICAgIHVuZGVyc3RhbmQgLS0+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CisKKzx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIgorCSAgICBlbmNvZGluZz0iVVRGLTgiCisJICAgIGRvY3R5cGUtcHVibGljPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjUvL0VOIgorCSAgICBkb2N0eXBlLXN5c3RlbT0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjUvZG9jYm9va3guZHRkIiAvPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIvL3JlZnNlY3Rpb24iPgorCTx4c2w6dmFyaWFibGUgbmFtZT0iZWxlbWVudCI+cmVmc2VjdDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChhbmNlc3Rvci1vci1zZWxmOjpyZWZzZWN0aW9uKSIgLz48L3hzbDp2YXJpYWJsZT4KKwk8eHNsOmVsZW1lbnQgbmFtZT0ieyRlbGVtZW50fSI+CisJCTx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iQCp8bm9kZSgpIiAvPgorCTwveHNsOmVsZW1lbnQ+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSBDb3B5IGFsbCBvdGhlciBub2RlcyB0aHJvdWdoLiAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im5vZGUoKXxAKiI+CisJPHhzbDpjb3B5PgorCQk8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkAqfG5vZGUoKSIgLz4KKwk8L3hzbDpjb3B5PgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlMi10YXJnZXQtdmFsdWVzLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UyLXRhcmdldC12YWx1ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ODViNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlMi10YXJnZXQtdmFsdWVzLnR4dApAQCAtMCwwICsxLDEyIEBACistLQorKiBgMGAgb3IgYGZhbHNlYCAtIERpc2FibGVzIHRoZSB0YXJnZXQuCisqIGAxYCBvciBgdHJ1ZWAgLSBXcml0ZXMgdG8gYFNUREVSUmAuCisqIGBbMi05XWAgLSBXcml0ZXMgdG8gdGhlIGFscmVhZHkgb3BlbmVkIGZpbGUgZGVzY3JpcHRvci4KKyogYDxhYnNvbHV0ZS1wYXRobmFtZT5gIC0gV3JpdGVzIHRvIHRoZSBmaWxlIGluIGFwcGVuZCBtb2RlLiBJZiB0aGUgdGFyZ2V0CithbHJlYWR5IGV4aXN0cyBhbmQgaXMgYSBkaXJlY3RvcnksIHRoZSB0cmFjZXMgd2lsbCBiZSB3cml0dGVuIHRvIGZpbGVzIChvbmUKK3BlciBwcm9jZXNzKSB1bmRlcm5lYXRoIHRoZSBnaXZlbiBkaXJlY3RvcnkuCisqIGBhZl91bml4Ols8c29ja2V0X3R5cGU+Ol08YWJzb2x1dGUtcGF0aG5hbWU+YCAtIFdyaXRlIHRvIGEKK1VuaXggRG9tYWluU29ja2V0IChvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHRoZW0pLiAgU29ja2V0Cit0eXBlIGNhbiBiZSBlaXRoZXIgYHN0cmVhbWAgb3IgYGRncmFtYDsgaWYgb21pdHRlZCBHaXQgd2lsbAordHJ5IGJvdGguCistLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFuc2Zlci1kYXRhLWxlYWtzLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhbnNmZXItZGF0YS1sZWFrcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0YmFjYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdHJhbnNmZXItZGF0YS1sZWFrcy50eHQKQEAgLTAsMCArMSwzMCBAQAorU0VDVVJJVFkKKy0tLS0tLS0tCitUaGUgZmV0Y2ggYW5kIHB1c2ggcHJvdG9jb2xzIGFyZSBub3QgZGVzaWduZWQgdG8gcHJldmVudCBvbmUgc2lkZSBmcm9tCitzdGVhbGluZyBkYXRhIGZyb20gdGhlIG90aGVyIHJlcG9zaXRvcnkgdGhhdCB3YXMgbm90IGludGVuZGVkIHRvIGJlCitzaGFyZWQuIElmIHlvdSBoYXZlIHByaXZhdGUgZGF0YSB0aGF0IHlvdSBuZWVkIHRvIHByb3RlY3QgZnJvbSBhIG1hbGljaW91cworcGVlciwgeW91ciBiZXN0IG9wdGlvbiBpcyB0byBzdG9yZSBpdCBpbiBhbm90aGVyIHJlcG9zaXRvcnkuIFRoaXMgYXBwbGllcwordG8gYm90aCBjbGllbnRzIGFuZCBzZXJ2ZXJzLiBJbiBwYXJ0aWN1bGFyLCBuYW1lc3BhY2VzIG9uIGEgc2VydmVyIGFyZSBub3QKK2VmZmVjdGl2ZSBmb3IgcmVhZCBhY2Nlc3MgY29udHJvbDsgeW91IHNob3VsZCBvbmx5IGdyYW50IHJlYWQgYWNjZXNzIHRvIGEKK25hbWVzcGFjZSB0byBjbGllbnRzIHRoYXQgeW91IHdvdWxkIHRydXN0IHdpdGggcmVhZCBhY2Nlc3MgdG8gdGhlIGVudGlyZQorcmVwb3NpdG9yeS4KKworVGhlIGtub3duIGF0dGFjayB2ZWN0b3JzIGFyZSBhcyBmb2xsb3dzOgorCisuIFRoZSB2aWN0aW0gc2VuZHMgImhhdmUiIGxpbmVzIGFkdmVydGlzaW5nIHRoZSBJRHMgb2Ygb2JqZWN0cyBpdCBoYXMgdGhhdAorICBhcmUgbm90IGV4cGxpY2l0bHkgaW50ZW5kZWQgdG8gYmUgc2hhcmVkIGJ1dCBjYW4gYmUgdXNlZCB0byBvcHRpbWl6ZSB0aGUKKyAgdHJhbnNmZXIgaWYgdGhlIHBlZXIgYWxzbyBoYXMgdGhlbS4gVGhlIGF0dGFja2VyIGNob29zZXMgYW4gb2JqZWN0IElEIFgKKyAgdG8gc3RlYWwgYW5kIHNlbmRzIGEgcmVmIHRvIFgsIGJ1dCBpc24ndCByZXF1aXJlZCB0byBzZW5kIHRoZSBjb250ZW50IG9mCisgIFggYmVjYXVzZSB0aGUgdmljdGltIGFscmVhZHkgaGFzIGl0LiBOb3cgdGhlIHZpY3RpbSBiZWxpZXZlcyB0aGF0IHRoZQorICBhdHRhY2tlciBoYXMgWCwgYW5kIGl0IHNlbmRzIHRoZSBjb250ZW50IG9mIFggYmFjayB0byB0aGUgYXR0YWNrZXIKKyAgbGF0ZXIuIChUaGlzIGF0dGFjayBpcyBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBmb3IgYSBjbGllbnQgdG8gcGVyZm9ybSBvbiBhCisgIHNlcnZlciwgYnkgY3JlYXRpbmcgYSByZWYgdG8gWCBpbiB0aGUgbmFtZXNwYWNlIHRoZSBjbGllbnQgaGFzIGFjY2VzcworICB0byBhbmQgdGhlbiBmZXRjaGluZyBpdC4gVGhlIG1vc3QgbGlrZWx5IHdheSBmb3IgYSBzZXJ2ZXIgdG8gcGVyZm9ybSBpdAorICBvbiBhIGNsaWVudCBpcyB0byAibWVyZ2UiIFggaW50byBhIHB1YmxpYyBicmFuY2ggYW5kIGhvcGUgdGhhdCB0aGUgdXNlcgorICBkb2VzIGFkZGl0aW9uYWwgd29yayBvbiB0aGlzIGJyYW5jaCBhbmQgcHVzaGVzIGl0IGJhY2sgdG8gdGhlIHNlcnZlcgorICB3aXRob3V0IG5vdGljaW5nIHRoZSBtZXJnZS4pCisKKy4gQXMgaW4gIzEsIHRoZSBhdHRhY2tlciBjaG9vc2VzIGFuIG9iamVjdCBJRCBYIHRvIHN0ZWFsLiBUaGUgdmljdGltIHNlbmRzCisgIGFuIG9iamVjdCBZIHRoYXQgdGhlIGF0dGFja2VyIGFscmVhZHkgaGFzLCBhbmQgdGhlIGF0dGFja2VyIGZhbHNlbHkKKyAgY2xhaW1zIHRvIGhhdmUgWCBhbmQgbm90IFksIHNvIHRoZSB2aWN0aW0gc2VuZHMgWSBhcyBhIGRlbHRhIGFnYWluc3QgWC4KKyAgVGhlIGRlbHRhIHJldmVhbHMgcmVnaW9ucyBvZiBYIHRoYXQgYXJlIHNpbWlsYXIgdG8gWSB0byB0aGUgYXR0YWNrZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VybHMtcmVtb3Rlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3VybHMtcmVtb3Rlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxODRjZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXJscy1yZW1vdGVzLnR4dApAQCAtMCwwICsxLDk0IEBACitpbmNsdWRlOjp1cmxzLnR4dFtdCisKK1JFTU9URVNbW1JFTU9URVNdXQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBuYW1lIG9mIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNhbiBiZSB1c2VkIGluc3RlYWQKK29mIGEgVVJMIGFzIGA8cmVwb3NpdG9yeT5gIGFyZ3VtZW50OgorCisqIGEgcmVtb3RlIGluIHRoZSBHaXQgY29uZmlndXJhdGlvbiBmaWxlOiBgJEdJVF9ESVIvY29uZmlnYCwKKyogYSBmaWxlIGluIHRoZSBgJEdJVF9ESVIvcmVtb3Rlc2AgZGlyZWN0b3J5LCBvcgorKiBhIGZpbGUgaW4gdGhlIGAkR0lUX0RJUi9icmFuY2hlc2AgZGlyZWN0b3J5LgorCitBbGwgb2YgdGhlc2UgYWxzbyBhbGxvdyB5b3UgdG8gb21pdCB0aGUgcmVmc3BlYyBmcm9tIHRoZSBjb21tYW5kIGxpbmUKK2JlY2F1c2UgdGhleSBlYWNoIGNvbnRhaW4gYSByZWZzcGVjIHdoaWNoIGdpdCB3aWxsIHVzZSBieSBkZWZhdWx0LgorCitOYW1lZCByZW1vdGUgaW4gY29uZmlndXJhdGlvbiBmaWxlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1lvdSBjYW4gY2hvb3NlIHRvIHByb3ZpZGUgdGhlIG5hbWUgb2YgYSByZW1vdGUgd2hpY2ggeW91IGhhZCBwcmV2aW91c2x5Citjb25maWd1cmVkIHVzaW5nIGxpbmtnaXQ6Z2l0LXJlbW90ZVsxXSwgbGlua2dpdDpnaXQtY29uZmlnWzFdCitvciBldmVuIGJ5IGEgbWFudWFsIGVkaXQgdG8gdGhlIGAkR0lUX0RJUi9jb25maWdgIGZpbGUuICBUaGUgVVJMIG9mCit0aGlzIHJlbW90ZSB3aWxsIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSByZXBvc2l0b3J5LiAgVGhlIHJlZnNwZWMKK29mIHRoaXMgcmVtb3RlIHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0IHdoZW4geW91IGRvCitub3QgcHJvdmlkZSBhIHJlZnNwZWMgb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoZSBlbnRyeSBpbiB0aGUKK2NvbmZpZyBmaWxlIHdvdWxkIGFwcGVhciBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorCVtyZW1vdGUgIjxuYW1lPiJdCisJCXVybCA9IDx1cmw+CisJCXB1c2h1cmwgPSA8cHVzaHVybD4KKwkJcHVzaCA9IDxyZWZzcGVjPgorCQlmZXRjaCA9IDxyZWZzcGVjPgorLS0tLS0tLS0tLS0tCisKK1RoZSBgPHB1c2h1cmw+YCBpcyB1c2VkIGZvciBwdXNoZXMgb25seS4gSXQgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzCit0byBgPHVybD5gLgorCitOYW1lZCBmaWxlIGluIGAkR0lUX0RJUi9yZW1vdGVzYAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IGNhbiBjaG9vc2UgdG8gcHJvdmlkZSB0aGUgbmFtZSBvZiBhCitmaWxlIGluIGAkR0lUX0RJUi9yZW1vdGVzYC4gIFRoZSBVUkwKK2luIHRoaXMgZmlsZSB3aWxsIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSByZXBvc2l0b3J5LiAgVGhlIHJlZnNwZWMKK2luIHRoaXMgZmlsZSB3aWxsIGJlIHVzZWQgYXMgZGVmYXVsdCB3aGVuIHlvdSBkbyBub3QKK3Byb3ZpZGUgYSByZWZzcGVjIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzIGZpbGUgc2hvdWxkIGhhdmUgdGhlCitmb2xsb3dpbmcgZm9ybWF0OgorCistLS0tLS0tLS0tLS0KKwlVUkw6IG9uZSBvZiB0aGUgYWJvdmUgVVJMIGZvcm1hdAorCVB1c2g6IDxyZWZzcGVjPgorCVB1bGw6IDxyZWZzcGVjPgorCistLS0tLS0tLS0tLS0KKworYFB1c2g6YCBsaW5lcyBhcmUgdXNlZCBieSAnZ2l0IHB1c2gnIGFuZAorYFB1bGw6YCBsaW5lcyBhcmUgdXNlZCBieSAnZ2l0IHB1bGwnIGFuZCAnZ2l0IGZldGNoJy4KK011bHRpcGxlIGBQdXNoOmAgYW5kIGBQdWxsOmAgbGluZXMgbWF5CitiZSBzcGVjaWZpZWQgZm9yIGFkZGl0aW9uYWwgYnJhbmNoIG1hcHBpbmdzLgorCitOYW1lZCBmaWxlIGluIGAkR0lUX0RJUi9icmFuY2hlc2AKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3UgY2FuIGNob29zZSB0byBwcm92aWRlIHRoZSBuYW1lIG9mIGEKK2ZpbGUgaW4gYCRHSVRfRElSL2JyYW5jaGVzYC4KK1RoZSBVUkwgaW4gdGhpcyBmaWxlIHdpbGwgYmUgdXNlZCB0byBhY2Nlc3MgdGhlIHJlcG9zaXRvcnkuCitUaGlzIGZpbGUgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisKKworLS0tLS0tLS0tLS0tCisJPHVybD4jPGhlYWQ+CistLS0tLS0tLS0tLS0KKworYDx1cmw+YCBpcyByZXF1aXJlZDsgYCM8aGVhZD5gIGlzIG9wdGlvbmFsLgorCitEZXBlbmRpbmcgb24gdGhlIG9wZXJhdGlvbiwgZ2l0IHdpbGwgdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nCityZWZzcGVjcywgaWYgeW91IGRvbid0IHByb3ZpZGUgb25lIG9uIHRoZSBjb21tYW5kIGxpbmUuCitgPGJyYW5jaD5gIGlzIHRoZSBuYW1lIG9mIHRoaXMgZmlsZSBpbiBgJEdJVF9ESVIvYnJhbmNoZXNgIGFuZAorYDxoZWFkPmAgZGVmYXVsdHMgdG8gYG1hc3RlcmAuCisKK2dpdCBmZXRjaCB1c2VzOgorCistLS0tLS0tLS0tLS0KKwlyZWZzL2hlYWRzLzxoZWFkPjpyZWZzL2hlYWRzLzxicmFuY2g+CistLS0tLS0tLS0tLS0KKworZ2l0IHB1c2ggdXNlczoKKworLS0tLS0tLS0tLS0tCisJSEVBRDpyZWZzL2hlYWRzLzxoZWFkPgorLS0tLS0tLS0tLS0tCisKKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXJscy50eHQgYi9Eb2N1bWVudGF0aW9uL3VybHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMjI5ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VybHMudHh0CkBAIC0wLDAgKzEsMTA4IEBACitHSVQgVVJMU1tbVVJMU11dCistLS0tLS0tLS0tLS0tLS0tCisKK0luIGdlbmVyYWwsIFVSTHMgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHJhbnNwb3J0IHByb3RvY29sLCB0aGUKK2FkZHJlc3Mgb2YgdGhlIHJlbW90ZSBzZXJ2ZXIsIGFuZCB0aGUgcGF0aCB0byB0aGUgcmVwb3NpdG9yeS4KK0RlcGVuZGluZyBvbiB0aGUgdHJhbnNwb3J0IHByb3RvY29sLCBzb21lIG9mIHRoaXMgaW5mb3JtYXRpb24gbWF5IGJlCithYnNlbnQuCisKK0dpdCBzdXBwb3J0cyBzc2gsIGdpdCwgaHR0cCwgYW5kIGh0dHBzIHByb3RvY29scyAoaW4gYWRkaXRpb24sIGZ0cCwKK2FuZCBmdHBzIGNhbiBiZSB1c2VkIGZvciBmZXRjaGluZywgYnV0IHRoaXMgaXMgaW5lZmZpY2llbnQgYW5kCitkZXByZWNhdGVkOyBkbyBub3QgdXNlIGl0KS4KKworVGhlIG5hdGl2ZSB0cmFuc3BvcnQgKGkuZS4gZ2l0Oi8vIFVSTCkgZG9lcyBubyBhdXRoZW50aWNhdGlvbiBhbmQKK3Nob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbiBvbiB1bnNlY3VyZWQgbmV0d29ya3MuCisKK1RoZSBmb2xsb3dpbmcgc3ludGF4ZXMgbWF5IGJlIHVzZWQgd2l0aCB0aGVtOgorCistIHNzaDovL3tzdGFydHNifXVzZXJAe2VuZHNifWhvc3QueHp7c3RhcnRzYn06cG9ydHtlbmRzYn0vcGF0aC90by9yZXBvLmdpdC8KKy0gZ2l0Oi8vaG9zdC54entzdGFydHNifTpwb3J0e2VuZHNifS9wYXRoL3RvL3JlcG8uZ2l0LworLSBodHRwe3N0YXJ0c2J9c3tlbmRzYn06Ly9ob3N0Lnh6e3N0YXJ0c2J9OnBvcnR7ZW5kc2J9L3BhdGgvdG8vcmVwby5naXQvCistIGZ0cHtzdGFydHNifXN7ZW5kc2J9Oi8vaG9zdC54entzdGFydHNifTpwb3J0e2VuZHNifS9wYXRoL3RvL3JlcG8uZ2l0LworCitBbiBhbHRlcm5hdGl2ZSBzY3AtbGlrZSBzeW50YXggbWF5IGFsc28gYmUgdXNlZCB3aXRoIHRoZSBzc2ggcHJvdG9jb2w6CisKKy0ge3N0YXJ0c2J9dXNlckB7ZW5kc2J9aG9zdC54ejpwYXRoL3RvL3JlcG8uZ2l0LworCitUaGlzIHN5bnRheCBpcyBvbmx5IHJlY29nbml6ZWQgaWYgdGhlcmUgYXJlIG5vIHNsYXNoZXMgYmVmb3JlIHRoZQorZmlyc3QgY29sb24uIFRoaXMgaGVscHMgZGlmZmVyZW50aWF0ZSBhIGxvY2FsIHBhdGggdGhhdCBjb250YWlucyBhCitjb2xvbi4gRm9yIGV4YW1wbGUgdGhlIGxvY2FsIHBhdGggYGZvbzpiYXJgIGNvdWxkIGJlIHNwZWNpZmllZCBhcyBhbgorYWJzb2x1dGUgcGF0aCBvciBgLi9mb286YmFyYCB0byBhdm9pZCBiZWluZyBtaXNpbnRlcnByZXRlZCBhcyBhbiBzc2gKK3VybC4KKworVGhlIHNzaCBhbmQgZ2l0IHByb3RvY29scyBhZGRpdGlvbmFsbHkgc3VwcG9ydCB+dXNlcm5hbWUgZXhwYW5zaW9uOgorCistIHNzaDovL3tzdGFydHNifXVzZXJAe2VuZHNifWhvc3QueHp7c3RhcnRzYn06cG9ydHtlbmRzYn0vfntzdGFydHNifXVzZXJ7ZW5kc2J9L3BhdGgvdG8vcmVwby5naXQvCistIGdpdDovL2hvc3QueHp7c3RhcnRzYn06cG9ydHtlbmRzYn0vfntzdGFydHNifXVzZXJ7ZW5kc2J9L3BhdGgvdG8vcmVwby5naXQvCistIHtzdGFydHNifXVzZXJAe2VuZHNifWhvc3QueHo6L357c3RhcnRzYn11c2Vye2VuZHNifS9wYXRoL3RvL3JlcG8uZ2l0LworCitGb3IgbG9jYWwgcmVwb3NpdG9yaWVzLCBhbHNvIHN1cHBvcnRlZCBieSBHaXQgbmF0aXZlbHksIHRoZSBmb2xsb3dpbmcKK3N5bnRheGVzIG1heSBiZSB1c2VkOgorCistIC9wYXRoL3RvL3JlcG8uZ2l0LworLSBcZmlsZTovLy9wYXRoL3RvL3JlcG8uZ2l0LworCitpZm5kZWY6OmdpdC1jbG9uZVtdCitUaGVzZSB0d28gc3ludGF4ZXMgYXJlIG1vc3RseSBlcXVpdmFsZW50LCBleGNlcHQgd2hlbiBjbG9uaW5nLCB3aGVuCit0aGUgZm9ybWVyIGltcGxpZXMgLS1sb2NhbCBvcHRpb24uIFNlZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXSBmb3IKK2RldGFpbHMuCitlbmRpZjo6Z2l0LWNsb25lW10KKworaWZkZWY6OmdpdC1jbG9uZVtdCitUaGVzZSB0d28gc3ludGF4ZXMgYXJlIG1vc3RseSBlcXVpdmFsZW50LCBleGNlcHQgdGhlIGZvcm1lciBpbXBsaWVzCistLWxvY2FsIG9wdGlvbi4KK2VuZGlmOjpnaXQtY2xvbmVbXQorCisnZ2l0IGNsb25lJywgJ2dpdCBmZXRjaCcgYW5kICdnaXQgcHVsbCcsIGJ1dCBub3QgJ2dpdCBwdXNoJywgd2lsbCBhbHNvCithY2NlcHQgYSBzdWl0YWJsZSBidW5kbGUgZmlsZS4gU2VlIGxpbmtnaXQ6Z2l0LWJ1bmRsZVsxXS4KKworV2hlbiBHaXQgZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUgYSBjZXJ0YWluIHRyYW5zcG9ydCBwcm90b2NvbCwgaXQKK2F0dGVtcHRzIHRvIHVzZSB0aGUgJ3JlbW90ZS08dHJhbnNwb3J0PicgcmVtb3RlIGhlbHBlciwgaWYgb25lCitleGlzdHMuIFRvIGV4cGxpY2l0bHkgcmVxdWVzdCBhIHJlbW90ZSBoZWxwZXIsIHRoZSBmb2xsb3dpbmcgc3ludGF4CittYXkgYmUgdXNlZDoKKworLSA8dHJhbnNwb3J0Pjo6PGFkZHJlc3M+CisKK3doZXJlIDxhZGRyZXNzPiBtYXkgYmUgYSBwYXRoLCBhIHNlcnZlciBhbmQgcGF0aCwgb3IgYW4gYXJiaXRyYXJ5CitVUkwtbGlrZSBzdHJpbmcgcmVjb2duaXplZCBieSB0aGUgc3BlY2lmaWMgcmVtb3RlIGhlbHBlciBiZWluZworaW52b2tlZC4gU2VlIGxpbmtnaXQ6Z2l0cmVtb3RlLWhlbHBlcnNbN10gZm9yIGRldGFpbHMuCisKK0lmIHRoZXJlIGFyZSBhIGxhcmdlIG51bWJlciBvZiBzaW1pbGFybHktbmFtZWQgcmVtb3RlIHJlcG9zaXRvcmllcyBhbmQKK3lvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBmb3JtYXQgZm9yIHRoZW0gKHN1Y2ggdGhhdCB0aGUgVVJMcyB5b3UKK3VzZSB3aWxsIGJlIHJld3JpdHRlbiBpbnRvIFVSTHMgdGhhdCB3b3JrKSwgeW91IGNhbiBjcmVhdGUgYQorY29uZmlndXJhdGlvbiBzZWN0aW9uIG9mIHRoZSBmb3JtOgorCistLS0tLS0tLS0tLS0KKwlbdXJsICI8YWN0dWFsIHVybCBiYXNlPiJdCisJCWluc3RlYWRPZiA9IDxvdGhlciB1cmwgYmFzZT4KKy0tLS0tLS0tLS0tLQorCitGb3IgZXhhbXBsZSwgd2l0aCB0aGlzOgorCistLS0tLS0tLS0tLS0KKwlbdXJsICJnaXQ6Ly9naXQuaG9zdC54ei8iXQorCQlpbnN0ZWFkT2YgPSBob3N0Lnh6Oi9wYXRoL3RvLworCQlpbnN0ZWFkT2YgPSB3b3JrOgorLS0tLS0tLS0tLS0tCisKK2EgVVJMIGxpa2UgIndvcms6cmVwby5naXQiIG9yIGxpa2UgImhvc3QueHo6L3BhdGgvdG8vcmVwby5naXQiIHdpbGwgYmUKK3Jld3JpdHRlbiBpbiBhbnkgY29udGV4dCB0aGF0IHRha2VzIGEgVVJMIHRvIGJlICJnaXQ6Ly9naXQuaG9zdC54ei9yZXBvLmdpdCIuCisKK0lmIHlvdSB3YW50IHRvIHJld3JpdGUgVVJMcyBmb3IgcHVzaCBvbmx5LCB5b3UgY2FuIGNyZWF0ZSBhCitjb25maWd1cmF0aW9uIHNlY3Rpb24gb2YgdGhlIGZvcm06CisKKy0tLS0tLS0tLS0tLQorCVt1cmwgIjxhY3R1YWwgdXJsIGJhc2U+Il0KKwkJcHVzaEluc3RlYWRPZiA9IDxvdGhlciB1cmwgYmFzZT4KKy0tLS0tLS0tLS0tLQorCitGb3IgZXhhbXBsZSwgd2l0aCB0aGlzOgorCistLS0tLS0tLS0tLS0KKwlbdXJsICJzc2g6Ly9leGFtcGxlLm9yZy8iXQorCQlwdXNoSW5zdGVhZE9mID0gZ2l0Oi8vZXhhbXBsZS5vcmcvCistLS0tLS0tLS0tLS0KKworYSBVUkwgbGlrZSAiZ2l0Oi8vZXhhbXBsZS5vcmcvcGF0aC90by9yZXBvLmdpdCIgd2lsbCBiZSByZXdyaXR0ZW4gdG8KKyJzc2g6Ly9leGFtcGxlLm9yZy9wYXRoL3RvL3JlcG8uZ2l0IiBmb3IgcHVzaGVzLCBidXQgcHVsbHMgd2lsbCBzdGlsbAordXNlIHRoZSBvcmlnaW5hbCBVUkwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLmNvbmYgYi9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0OGYxMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwuY29uZgpAQCAtMCwwICsxLDExIEBACitbdGl0bGVzXQorCXVuZGVybGluZXM9Il9fIiwiPT0iLCItLSIsIn5+IiwiXl4iCisKK1thdHRyaWJ1dGVzXQorY2FyZXQ9Xgorc3RhcnRzYj0mIzkxOworZW5kc2I9JiM5MzsKK3RpbGRlPSYjMTI2OworCitbbGlua2dpdC1pbmxpbmVtYWNyb10KKzx1bGluayB1cmw9Int0YXJnZXR9Lmh0bWwiPnt0YXJnZXR9ezA/KHswfSl9PC91bGluaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0IGIvRG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzNjUyOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CkBAIC0wLDAgKzEsNDU3OCBAQAorPSBHaXQgVXNlciBNYW51YWwKKworR2l0IGlzIGEgZmFzdCBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbS4KKworVGhpcyBtYW51YWwgaXMgZGVzaWduZWQgdG8gYmUgcmVhZGFibGUgYnkgc29tZW9uZSB3aXRoIGJhc2ljIFVOSVgKK2NvbW1hbmQtbGluZSBza2lsbHMsIGJ1dCBubyBwcmV2aW91cyBrbm93bGVkZ2Ugb2YgR2l0LgorCis8PHJlcG9zaXRvcmllcy1hbmQtYnJhbmNoZXM+PiBhbmQgPDxleHBsb3JpbmctZ2l0LWhpc3Rvcnk+PiBleHBsYWluIGhvdwordG8gZmV0Y2ggYW5kIHN0dWR5IGEgcHJvamVjdCB1c2luZyBnaXQtLXJlYWQgdGhlc2UgY2hhcHRlcnMgdG8gbGVhcm4gaG93Cit0byBidWlsZCBhbmQgdGVzdCBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiBhIHNvZnR3YXJlIHByb2plY3QsIHNlYXJjaCBmb3IKK3JlZ3Jlc3Npb25zLCBhbmQgc28gb24uCisKK1Blb3BsZSBuZWVkaW5nIHRvIGRvIGFjdHVhbCBkZXZlbG9wbWVudCB3aWxsIGFsc28gd2FudCB0byByZWFkCis8PERldmVsb3BpbmctV2l0aC1naXQ+PiBhbmQgPDxzaGFyaW5nLWRldmVsb3BtZW50Pj4uCisKK0Z1cnRoZXIgY2hhcHRlcnMgY292ZXIgbW9yZSBzcGVjaWFsaXplZCB0b3BpY3MuCisKK0NvbXByZWhlbnNpdmUgcmVmZXJlbmNlIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIG1hbgorcGFnZXMsIG9yIGxpbmtnaXQ6Z2l0LWhlbHBbMV0gY29tbWFuZC4gIEZvciBleGFtcGxlLCBmb3IgdGhlIGNvbW1hbmQKK2BnaXQgY2xvbmUgPHJlcG8+YCwgeW91IGNhbiBlaXRoZXIgdXNlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgbWFuIGdpdC1jbG9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK29yOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGhlbHAgY2xvbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRoIHRoZSBsYXR0ZXIsIHlvdSBjYW4gdXNlIHRoZSBtYW51YWwgdmlld2VyIG9mIHlvdXIgY2hvaWNlOyBzZWUKK2xpbmtnaXQ6Z2l0LWhlbHBbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1NlZSBhbHNvIDw8Z2l0LXF1aWNrLXN0YXJ0Pj4gZm9yIGEgYnJpZWYgb3ZlcnZpZXcgb2YgR2l0IGNvbW1hbmRzLAord2l0aG91dCBhbnkgZXhwbGFuYXRpb24uCisKK0ZpbmFsbHksIHNlZSA8PHRvZG8+PiBmb3Igd2F5cyB0aGF0IHlvdSBjYW4gaGVscCBtYWtlIHRoaXMgbWFudWFsIG1vcmUKK2NvbXBsZXRlLgorCisKK1tbcmVwb3NpdG9yaWVzLWFuZC1icmFuY2hlc11dCis9PSBSZXBvc2l0b3JpZXMgYW5kIEJyYW5jaGVzCisKK1tbaG93LXRvLWdldC1hLWdpdC1yZXBvc2l0b3J5XV0KKz09PSBIb3cgdG8gZ2V0IGEgR2l0IHJlcG9zaXRvcnkKKworSXQgd2lsbCBiZSB1c2VmdWwgdG8gaGF2ZSBhIEdpdCByZXBvc2l0b3J5IHRvIGV4cGVyaW1lbnQgd2l0aCBhcyB5b3UKK3JlYWQgdGhpcyBtYW51YWwuCisKK1RoZSBiZXN0IHdheSB0byBnZXQgb25lIGlzIGJ5IHVzaW5nIHRoZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXSBjb21tYW5kIHRvCitkb3dubG9hZCBhIGNvcHkgb2YgYW4gZXhpc3RpbmcgcmVwb3NpdG9yeS4gIElmIHlvdSBkb24ndCBhbHJlYWR5IGhhdmUgYQorcHJvamVjdCBpbiBtaW5kLCBoZXJlIGFyZSBzb21lIGludGVyZXN0aW5nIGV4YW1wbGVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkjIEdpdCBpdHNlbGYgKGFwcHJveC4gNDBNQiBkb3dubG9hZCk6CiskIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0CisJIyB0aGUgTGludXgga2VybmVsIChhcHByb3guIDY0ME1CIGRvd25sb2FkKToKKyQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW5pdGlhbCBjbG9uZSBtYXkgYmUgdGltZS1jb25zdW1pbmcgZm9yIGEgbGFyZ2UgcHJvamVjdCwgYnV0IHlvdQord2lsbCBvbmx5IG5lZWQgdG8gY2xvbmUgb25jZS4KKworVGhlIGNsb25lIGNvbW1hbmQgY3JlYXRlcyBhIG5ldyBkaXJlY3RvcnkgbmFtZWQgYWZ0ZXIgdGhlIHByb2plY3QKKyhgZ2l0YCBvciBgbGludXhgIGluIHRoZSBleGFtcGxlcyBhYm92ZSkuICBBZnRlciB5b3UgY2QgaW50byB0aGlzCitkaXJlY3RvcnksIHlvdSB3aWxsIHNlZSB0aGF0IGl0IGNvbnRhaW5zIGEgY29weSBvZiB0aGUgcHJvamVjdCBmaWxlcywKK2NhbGxlZCB0aGUgPDxkZWZfd29ya2luZ190cmVlLHdvcmtpbmcgdHJlZT4+LCB0b2dldGhlciB3aXRoIGEgc3BlY2lhbAordG9wLWxldmVsIGRpcmVjdG9yeSBuYW1lZCBgLmdpdGAsIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSBoaXN0b3J5IG9mIHRoZSBwcm9qZWN0LgorCitbW2hvdy10by1jaGVjay1vdXRdXQorPT09IEhvdyB0byBjaGVjayBvdXQgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiBhIHByb2plY3QKKworR2l0IGlzIGJlc3QgdGhvdWdodCBvZiBhcyBhIHRvb2wgZm9yIHN0b3JpbmcgdGhlIGhpc3Rvcnkgb2YgYSBjb2xsZWN0aW9uCitvZiBmaWxlcy4gIEl0IHN0b3JlcyB0aGUgaGlzdG9yeSBhcyBhIGNvbXByZXNzZWQgY29sbGVjdGlvbiBvZgoraW50ZXJyZWxhdGVkIHNuYXBzaG90cyBvZiB0aGUgcHJvamVjdCdzIGNvbnRlbnRzLiAgSW4gR2l0IGVhY2ggc3VjaAordmVyc2lvbiBpcyBjYWxsZWQgYSA8PGRlZl9jb21taXQsY29tbWl0Pj4uCisKK1Rob3NlIHNuYXBzaG90cyBhcmVuJ3QgbmVjZXNzYXJpbHkgYWxsIGFycmFuZ2VkIGluIGEgc2luZ2xlIGxpbmUgZnJvbQorb2xkZXN0IHRvIG5ld2VzdDsgaW5zdGVhZCwgd29yayBtYXkgc2ltdWx0YW5lb3VzbHkgcHJvY2VlZCBhbG9uZworcGFyYWxsZWwgbGluZXMgb2YgZGV2ZWxvcG1lbnQsIGNhbGxlZCA8PGRlZl9icmFuY2gsYnJhbmNoZXM+Piwgd2hpY2ggbWF5CittZXJnZSBhbmQgZGl2ZXJnZS4KKworQSBzaW5nbGUgR2l0IHJlcG9zaXRvcnkgY2FuIHRyYWNrIGRldmVsb3BtZW50IG9uIG11bHRpcGxlIGJyYW5jaGVzLiAgSXQKK2RvZXMgdGhpcyBieSBrZWVwaW5nIGEgbGlzdCBvZiA8PGRlZl9oZWFkLGhlYWRzPj4gd2hpY2ggcmVmZXJlbmNlIHRoZQorbGF0ZXN0IGNvbW1pdCBvbiBlYWNoIGJyYW5jaDsgdGhlIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBjb21tYW5kIHNob3dzCit5b3UgdGhlIGxpc3Qgb2YgYnJhbmNoIGhlYWRzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaAorKiBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGZyZXNobHkgY2xvbmVkIHJlcG9zaXRvcnkgY29udGFpbnMgYSBzaW5nbGUgYnJhbmNoIGhlYWQsIGJ5IGRlZmF1bHQKK25hbWVkICJtYXN0ZXIiLCB3aXRoIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpbml0aWFsaXplZCB0byB0aGUgc3RhdGUgb2YKK3RoZSBwcm9qZWN0IHJlZmVycmVkIHRvIGJ5IHRoYXQgYnJhbmNoIGhlYWQuCisKK01vc3QgcHJvamVjdHMgYWxzbyB1c2UgPDxkZWZfdGFnLHRhZ3M+Pi4gIFRhZ3MsIGxpa2UgaGVhZHMsIGFyZQorcmVmZXJlbmNlcyBpbnRvIHRoZSBwcm9qZWN0J3MgaGlzdG9yeSwgYW5kIGNhbiBiZSBsaXN0ZWQgdXNpbmcgdGhlCitsaW5rZ2l0OmdpdC10YWdbMV0gY29tbWFuZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB0YWcgLWwKK3YyLjYuMTEKK3YyLjYuMTEtdHJlZQordjIuNi4xMgordjIuNi4xMi1yYzIKK3YyLjYuMTItcmMzCit2Mi42LjEyLXJjNAordjIuNi4xMi1yYzUKK3YyLjYuMTItcmM2Cit2Mi42LjEzCisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUYWdzIGFyZSBleHBlY3RlZCB0byBhbHdheXMgcG9pbnQgYXQgdGhlIHNhbWUgdmVyc2lvbiBvZiBhIHByb2plY3QsCit3aGlsZSBoZWFkcyBhcmUgZXhwZWN0ZWQgdG8gYWR2YW5jZSBhcyBkZXZlbG9wbWVudCBwcm9ncmVzc2VzLgorCitDcmVhdGUgYSBuZXcgYnJhbmNoIGhlYWQgcG9pbnRpbmcgdG8gb25lIG9mIHRoZXNlIHZlcnNpb25zIGFuZCBjaGVjayBpdAorb3V0IHVzaW5nIGxpbmtnaXQ6Z2l0LXN3aXRjaFsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggLWMgbmV3IHYyLjYuMTMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgd29ya2luZyBkaXJlY3RvcnkgdGhlbiByZWZsZWN0cyB0aGUgY29udGVudHMgdGhhdCB0aGUgcHJvamVjdCBoYWQKK3doZW4gaXQgd2FzIHRhZ2dlZCB2Mi42LjEzLCBhbmQgbGlua2dpdDpnaXQtYnJhbmNoWzFdIHNob3dzIHR3bworYnJhbmNoZXMsIHdpdGggYW4gYXN0ZXJpc2sgbWFya2luZyB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2gKKyAgbWFzdGVyCisqIG5ldworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBkZWNpZGUgdGhhdCB5b3UnZCByYXRoZXIgc2VlIHZlcnNpb24gMi42LjE3LCB5b3UgY2FuIG1vZGlmeQordGhlIGN1cnJlbnQgYnJhbmNoIHRvIHBvaW50IGF0IHYyLjYuMTcgaW5zdGVhZCwgd2l0aAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc2V0IC0taGFyZCB2Mi42LjE3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IGlmIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkIHdhcyB5b3VyIG9ubHkgcmVmZXJlbmNlIHRvIGEKK3BhcnRpY3VsYXIgcG9pbnQgaW4gaGlzdG9yeSwgdGhlbiByZXNldHRpbmcgdGhhdCBicmFuY2ggbWF5IGxlYXZlIHlvdQord2l0aCBubyB3YXkgdG8gZmluZCB0aGUgaGlzdG9yeSBpdCB1c2VkIHRvIHBvaW50IHRvOyBzbyB1c2UgdGhpcyBjb21tYW5kCitjYXJlZnVsbHkuCisKK1tbdW5kZXJzdGFuZGluZy1jb21taXRzXV0KKz09PSBVbmRlcnN0YW5kaW5nIEhpc3Rvcnk6IENvbW1pdHMKKworRXZlcnkgY2hhbmdlIGluIHRoZSBoaXN0b3J5IG9mIGEgcHJvamVjdCBpcyByZXByZXNlbnRlZCBieSBhIGNvbW1pdC4KK1RoZSBsaW5rZ2l0OmdpdC1zaG93WzFdIGNvbW1hbmQgc2hvd3MgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBvbiB0aGUKK2N1cnJlbnQgYnJhbmNoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cKK2NvbW1pdCAxN2NmNzgxNjYxZTZkMzhmNzM3ZjE1ZjUzYWI1NTJmMWU5NTk2MGQ3CitBdXRob3I6IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BwcGM5NzAub3NkbC5vcmcuKG5vbmUpPgorRGF0ZTogICBUdWUgQXByIDE5IDE0OjExOjA2IDIwMDUgLTA3MDAKKworICAgIFJlbW92ZSBkdXBsaWNhdGUgZ2V0ZW52KERCX0VOVklST05NRU5UKSBjYWxsCisKKyAgICBOb3RlZCBieSBUb255IEx1Y2suCisKK2RpZmYgLS1naXQgYS9pbml0LWRiLmMgYi9pbml0LWRiLmMKK2luZGV4IDY1ODk4ZmEuLmIwMDJkYzYgMTAwNjQ0CistLS0gYS9pbml0LWRiLmMKKysrKyBiL2luaXQtZGIuYworQEAgLTcsNyArNyw3IEBACisgCisgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIHsKKy0JY2hhciAqc2hhMV9kaXIgPSBnZXRlbnYoREJfRU5WSVJPTk1FTlQpLCAqcGF0aDsKKysJY2hhciAqc2hhMV9kaXIsICpwYXRoOworIAlpbnQgbGVuLCBpOworIAorIAlpZiAobWtkaXIoIi5naXQiLCAwNzU1KSA8IDApIHsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyB5b3UgY2FuIHNlZSwgYSBjb21taXQgc2hvd3Mgd2hvIG1hZGUgdGhlIGxhdGVzdCBjaGFuZ2UsIHdoYXQgdGhleQorZGlkLCBhbmQgd2h5LgorCitFdmVyeSBjb21taXQgaGFzIGEgNDAtaGV4ZGlnaXQgaWQsIHNvbWV0aW1lcyBjYWxsZWQgdGhlICJvYmplY3QgbmFtZSIgb3IgdGhlCisiU0hBLTEgaWQiLCBzaG93biBvbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgYGdpdCBzaG93YCBvdXRwdXQuICBZb3UgY2FuIHVzdWFsbHkKK3JlZmVyIHRvIGEgY29tbWl0IGJ5IGEgc2hvcnRlciBuYW1lLCBzdWNoIGFzIGEgdGFnIG9yIGEgYnJhbmNoIG5hbWUsIGJ1dCB0aGlzCitsb25nZXIgbmFtZSBjYW4gYWxzbyBiZSB1c2VmdWwuICBNb3N0IGltcG9ydGFudGx5LCBpdCBpcyBhIGdsb2JhbGx5IHVuaXF1ZQorbmFtZSBmb3IgdGhpcyBjb21taXQ6IHNvIGlmIHlvdSB0ZWxsIHNvbWVib2R5IGVsc2UgdGhlIG9iamVjdCBuYW1lIChmb3IKK2V4YW1wbGUgaW4gZW1haWwpLCB0aGVuIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IG5hbWUgd2lsbCByZWZlciB0byB0aGUgc2FtZQorY29tbWl0IGluIHRoZWlyIHJlcG9zaXRvcnkgdGhhdCBpdCBkb2VzIGluIHlvdXJzIChhc3N1bWluZyB0aGVpciByZXBvc2l0b3J5CitoYXMgdGhhdCBjb21taXQgYXQgYWxsKS4gIFNpbmNlIHRoZSBvYmplY3QgbmFtZSBpcyBjb21wdXRlZCBhcyBhIGhhc2ggb3ZlciB0aGUKK2NvbnRlbnRzIG9mIHRoZSBjb21taXQsIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBjb21taXQgY2FuIG5ldmVyIGNoYW5nZQord2l0aG91dCBpdHMgbmFtZSBhbHNvIGNoYW5naW5nLgorCitJbiBmYWN0LCBpbiA8PGdpdC1jb25jZXB0cz4+IHdlIHNoYWxsIHNlZSB0aGF0IGV2ZXJ5dGhpbmcgc3RvcmVkIGluIEdpdAoraGlzdG9yeSwgaW5jbHVkaW5nIGZpbGUgZGF0YSBhbmQgZGlyZWN0b3J5IGNvbnRlbnRzLCBpcyBzdG9yZWQgaW4gYW4gb2JqZWN0Cit3aXRoIGEgbmFtZSB0aGF0IGlzIGEgaGFzaCBvZiBpdHMgY29udGVudHMuCisKK1tbdW5kZXJzdGFuZGluZy1yZWFjaGFiaWxpdHldXQorPT09PSBVbmRlcnN0YW5kaW5nIGhpc3Rvcnk6IGNvbW1pdHMsIHBhcmVudHMsIGFuZCByZWFjaGFiaWxpdHkKKworRXZlcnkgY29tbWl0IChleGNlcHQgdGhlIHZlcnkgZmlyc3QgY29tbWl0IGluIGEgcHJvamVjdCkgYWxzbyBoYXMgYQorcGFyZW50IGNvbW1pdCB3aGljaCBzaG93cyB3aGF0IGhhcHBlbmVkIGJlZm9yZSB0aGlzIGNvbW1pdC4KK0ZvbGxvd2luZyB0aGUgY2hhaW4gb2YgcGFyZW50cyB3aWxsIGV2ZW50dWFsbHkgdGFrZSB5b3UgYmFjayB0byB0aGUKK2JlZ2lubmluZyBvZiB0aGUgcHJvamVjdC4KKworSG93ZXZlciwgdGhlIGNvbW1pdHMgZG8gbm90IGZvcm0gYSBzaW1wbGUgbGlzdDsgR2l0IGFsbG93cyBsaW5lcyBvZgorZGV2ZWxvcG1lbnQgdG8gZGl2ZXJnZSBhbmQgdGhlbiByZWNvbnZlcmdlLCBhbmQgdGhlIHBvaW50IHdoZXJlIHR3bworbGluZXMgb2YgZGV2ZWxvcG1lbnQgcmVjb252ZXJnZSBpcyBjYWxsZWQgYSAibWVyZ2UiLiAgVGhlIGNvbW1pdAorcmVwcmVzZW50aW5nIGEgbWVyZ2UgY2FuIHRoZXJlZm9yZSBoYXZlIG1vcmUgdGhhbiBvbmUgcGFyZW50LCB3aXRoCitlYWNoIHBhcmVudCByZXByZXNlbnRpbmcgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBvbiBvbmUgb2YgdGhlIGxpbmVzCitvZiBkZXZlbG9wbWVudCBsZWFkaW5nIHRvIHRoYXQgcG9pbnQuCisKK1RoZSBiZXN0IHdheSB0byBzZWUgaG93IHRoaXMgd29ya3MgaXMgdXNpbmcgdGhlIGxpbmtnaXQ6Z2l0a1sxXQorY29tbWFuZDsgcnVubmluZyBnaXRrIG5vdyBvbiBhIEdpdCByZXBvc2l0b3J5IGFuZCBsb29raW5nIGZvciBtZXJnZQorY29tbWl0cyB3aWxsIGhlbHAgdW5kZXJzdGFuZCBob3cgR2l0IG9yZ2FuaXplcyBoaXN0b3J5LgorCitJbiB0aGUgZm9sbG93aW5nLCB3ZSBzYXkgdGhhdCBjb21taXQgWCBpcyAicmVhY2hhYmxlIiBmcm9tIGNvbW1pdCBZCitpZiBjb21taXQgWCBpcyBhbiBhbmNlc3RvciBvZiBjb21taXQgWS4gIEVxdWl2YWxlbnRseSwgeW91IGNvdWxkIHNheQordGhhdCBZIGlzIGEgZGVzY2VuZGFudCBvZiBYLCBvciB0aGF0IHRoZXJlIGlzIGEgY2hhaW4gb2YgcGFyZW50cworbGVhZGluZyBmcm9tIGNvbW1pdCBZIHRvIGNvbW1pdCBYLgorCitbW2hpc3RvcnktZGlhZ3JhbXNdXQorPT09PSBVbmRlcnN0YW5kaW5nIGhpc3Rvcnk6IEhpc3RvcnkgZGlhZ3JhbXMKKworV2Ugd2lsbCBzb21ldGltZXMgcmVwcmVzZW50IEdpdCBoaXN0b3J5IHVzaW5nIGRpYWdyYW1zIGxpa2UgdGhlIG9uZQorYmVsb3cuICBDb21taXRzIGFyZSBzaG93biBhcyAibyIsIGFuZCB0aGUgbGlua3MgYmV0d2VlbiB0aGVtIHdpdGgKK2xpbmVzIGRyYXduIHdpdGggLSAvIGFuZCBcLiAgVGltZSBnb2VzIGxlZnQgdG8gcmlnaHQ6CisKKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICAgICAgICBvLS1vLS1vIDwtLSBCcmFuY2ggQQorICAgICAgICAvCisgby0tby0tbyA8LS0gbWFzdGVyCisgICAgICAgIFwKKyAgICAgICAgIG8tLW8tLW8gPC0tIEJyYW5jaCBCCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworSWYgd2UgbmVlZCB0byB0YWxrIGFib3V0IGEgcGFydGljdWxhciBjb21taXQsIHRoZSBjaGFyYWN0ZXIgIm8iIG1heQorYmUgcmVwbGFjZWQgd2l0aCBhbm90aGVyIGxldHRlciBvciBudW1iZXIuCisKK1tbd2hhdC1pcy1hLWJyYW5jaF1dCis9PT09IFVuZGVyc3RhbmRpbmcgaGlzdG9yeTogV2hhdCBpcyBhIGJyYW5jaD8KKworV2hlbiB3ZSBuZWVkIHRvIGJlIHByZWNpc2UsIHdlIHdpbGwgdXNlIHRoZSB3b3JkICJicmFuY2giIHRvIG1lYW4gYSBsaW5lCitvZiBkZXZlbG9wbWVudCwgYW5kICJicmFuY2ggaGVhZCIgKG9yIGp1c3QgImhlYWQiKSB0byBtZWFuIGEgcmVmZXJlbmNlCit0byB0aGUgbW9zdCByZWNlbnQgY29tbWl0IG9uIGEgYnJhbmNoLiAgSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHRoZSBicmFuY2gKK2hlYWQgbmFtZWQgIkEiIGlzIGEgcG9pbnRlciB0byBvbmUgcGFydGljdWxhciBjb21taXQsIGJ1dCB3ZSByZWZlciB0bwordGhlIGxpbmUgb2YgdGhyZWUgY29tbWl0cyBsZWFkaW5nIHVwIHRvIHRoYXQgcG9pbnQgYXMgYWxsIGJlaW5nIHBhcnQgb2YKKyJicmFuY2ggQSIuCisKK0hvd2V2ZXIsIHdoZW4gbm8gY29uZnVzaW9uIHdpbGwgcmVzdWx0LCB3ZSBvZnRlbiBqdXN0IHVzZSB0aGUgdGVybQorImJyYW5jaCIgYm90aCBmb3IgYnJhbmNoZXMgYW5kIGZvciBicmFuY2ggaGVhZHMuCisKK1tbbWFuaXB1bGF0aW5nLWJyYW5jaGVzXV0KKz09PSBNYW5pcHVsYXRpbmcgYnJhbmNoZXMKKworQ3JlYXRpbmcsIGRlbGV0aW5nLCBhbmQgbW9kaWZ5aW5nIGJyYW5jaGVzIGlzIHF1aWNrIGFuZCBlYXN5OyBoZXJlJ3MKK2Egc3VtbWFyeSBvZiB0aGUgY29tbWFuZHM6CisKK2BnaXQgYnJhbmNoYDo6CisJbGlzdCBhbGwgYnJhbmNoZXMuCitgZ2l0IGJyYW5jaCA8YnJhbmNoPmA6OgorCWNyZWF0ZSBhIG5ldyBicmFuY2ggbmFtZWQgYDxicmFuY2g+YCwgcmVmZXJlbmNpbmcgdGhlIHNhbWUKKwlwb2ludCBpbiBoaXN0b3J5IGFzIHRoZSBjdXJyZW50IGJyYW5jaC4KK2BnaXQgYnJhbmNoIDxicmFuY2g+IDxzdGFydC1wb2ludD5gOjoKKwljcmVhdGUgYSBuZXcgYnJhbmNoIG5hbWVkIGA8YnJhbmNoPmAsIHJlZmVyZW5jaW5nCisJYDxzdGFydC1wb2ludD5gLCB3aGljaCBtYXkgYmUgc3BlY2lmaWVkIGFueSB3YXkgeW91IGxpa2UsCisJaW5jbHVkaW5nIHVzaW5nIGEgYnJhbmNoIG5hbWUgb3IgYSB0YWcgbmFtZS4KK2BnaXQgYnJhbmNoIC1kIDxicmFuY2g+YDo6CisJZGVsZXRlIHRoZSBicmFuY2ggYDxicmFuY2g+YDsgaWYgdGhlIGJyYW5jaCBpcyBub3QgZnVsbHkKKwltZXJnZWQgaW4gaXRzIHVwc3RyZWFtIGJyYW5jaCBvciBjb250YWluZWQgaW4gdGhlIGN1cnJlbnQgYnJhbmNoLAorCXRoaXMgY29tbWFuZCB3aWxsIGZhaWwgd2l0aCBhIHdhcm5pbmcuCitgZ2l0IGJyYW5jaCAtRCA8YnJhbmNoPmA6OgorCWRlbGV0ZSB0aGUgYnJhbmNoIGA8YnJhbmNoPmAgaXJyZXNwZWN0aXZlIG9mIGl0cyBtZXJnZWQgc3RhdHVzLgorYGdpdCBzd2l0Y2ggPGJyYW5jaD5gOjoKKwltYWtlIHRoZSBjdXJyZW50IGJyYW5jaCBgPGJyYW5jaD5gLCB1cGRhdGluZyB0aGUgd29ya2luZworCWRpcmVjdG9yeSB0byByZWZsZWN0IHRoZSB2ZXJzaW9uIHJlZmVyZW5jZWQgYnkgYDxicmFuY2g+YC4KK2BnaXQgc3dpdGNoIC1jIDxuZXc+IDxzdGFydC1wb2ludD5gOjoKKwljcmVhdGUgYSBuZXcgYnJhbmNoIGA8bmV3PmAgcmVmZXJlbmNpbmcgYDxzdGFydC1wb2ludD5gLCBhbmQKKwljaGVjayBpdCBvdXQuCisKK1RoZSBzcGVjaWFsIHN5bWJvbCAiSEVBRCIgY2FuIGFsd2F5cyBiZSB1c2VkIHRvIHJlZmVyIHRvIHRoZSBjdXJyZW50CiticmFuY2guICBJbiBmYWN0LCBHaXQgdXNlcyBhIGZpbGUgbmFtZWQgYEhFQURgIGluIHRoZSBgLmdpdGAgZGlyZWN0b3J5Cit0byByZW1lbWJlciB3aGljaCBicmFuY2ggaXMgY3VycmVudDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNhdCAuZ2l0L0hFQUQKK3JlZjogcmVmcy9oZWFkcy9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW2RldGFjaGVkLWhlYWRdXQorPT09IEV4YW1pbmluZyBhbiBvbGQgdmVyc2lvbiB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IGJyYW5jaAorCitUaGUgYGdpdCBzd2l0Y2hgIGNvbW1hbmQgbm9ybWFsbHkgZXhwZWN0cyBhIGJyYW5jaCBoZWFkLCBidXQgd2lsbCBhbHNvCithY2NlcHQgYW4gYXJiaXRyYXJ5IGNvbW1pdCB3aGVuIGludm9rZWQgd2l0aCAtLWRldGFjaDsgZm9yIGV4YW1wbGUsCit5b3UgY2FuIGNoZWNrIG91dCB0aGUgY29tbWl0IHJlZmVyZW5jZWQgYnkgYSB0YWc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIC0tZGV0YWNoIHYyLjYuMTcKK05vdGU6IGNoZWNraW5nIG91dCAndjIuNi4xNycuCisKK1lvdSBhcmUgaW4gJ2RldGFjaGVkIEhFQUQnIHN0YXRlLiBZb3UgY2FuIGxvb2sgYXJvdW5kLCBtYWtlIGV4cGVyaW1lbnRhbAorY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpcworc3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHBlcmZvcm1pbmcgYW5vdGhlciBzd2l0Y2guCisKK0lmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gcmV0YWluIGNvbW1pdHMgeW91IGNyZWF0ZSwgeW91IG1heQorZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWMgd2l0aCB0aGUgc3dpdGNoIGNvbW1hbmQgYWdhaW4uIEV4YW1wbGU6CisKKyAgZ2l0IHN3aXRjaCAtYyBuZXdfYnJhbmNoX25hbWUKKworSEVBRCBpcyBub3cgYXQgNDI3YWJmYSBMaW51eCB2Mi42LjE3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIEhFQUQgdGhlbiByZWZlcnMgdG8gdGhlIFNIQS0xIG9mIHRoZSBjb21taXQgaW5zdGVhZCBvZiB0byBhIGJyYW5jaCwKK2FuZCBnaXQgYnJhbmNoIHNob3dzIHRoYXQgeW91IGFyZSBubyBsb25nZXIgb24gYSBicmFuY2g6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBjYXQgLmdpdC9IRUFECis0MjdhYmZhMjhhZmVkZmZhZGZjYTlkZDhiMDY3ZWI2ZDM2YmFjNTNmCiskIGdpdCBicmFuY2gKKyogKGRldGFjaGVkIGZyb20gdjIuNi4xNykKKyAgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhpcyBjYXNlIHdlIHNheSB0aGF0IHRoZSBIRUFEIGlzICJkZXRhY2hlZCIuCisKK1RoaXMgaXMgYW4gZWFzeSB3YXkgdG8gY2hlY2sgb3V0IGEgcGFydGljdWxhciB2ZXJzaW9uIHdpdGhvdXQgaGF2aW5nIHRvCittYWtlIHVwIGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2guICAgWW91IGNhbiBzdGlsbCBjcmVhdGUgYSBuZXcgYnJhbmNoCisob3IgdGFnKSBmb3IgdGhpcyB2ZXJzaW9uIGxhdGVyIGlmIHlvdSBkZWNpZGUgdG8uCisKK1tbZXhhbWluaW5nLXJlbW90ZS1icmFuY2hlc11dCis9PT0gRXhhbWluaW5nIGJyYW5jaGVzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeQorCitUaGUgIm1hc3RlciIgYnJhbmNoIHRoYXQgd2FzIGNyZWF0ZWQgYXQgdGhlIHRpbWUgeW91IGNsb25lZCBpcyBhIGNvcHkKK29mIHRoZSBIRUFEIGluIHRoZSByZXBvc2l0b3J5IHRoYXQgeW91IGNsb25lZCBmcm9tLiAgVGhhdCByZXBvc2l0b3J5CittYXkgYWxzbyBoYXZlIGhhZCBvdGhlciBicmFuY2hlcywgdGhvdWdoLCBhbmQgeW91ciBsb2NhbCByZXBvc2l0b3J5CitrZWVwcyBicmFuY2hlcyB3aGljaCB0cmFjayBlYWNoIG9mIHRob3NlIHJlbW90ZSBicmFuY2hlcywgY2FsbGVkCityZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMsIHdoaWNoIHlvdQorY2FuIHZpZXcgdXNpbmcgdGhlIGAtcmAgb3B0aW9uIHRvIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggLXIKKyAgb3JpZ2luL0hFQUQKKyAgb3JpZ2luL2h0bWwKKyAgb3JpZ2luL21haW50CisgIG9yaWdpbi9tYW4KKyAgb3JpZ2luL21hc3RlcgorICBvcmlnaW4vbmV4dAorICBvcmlnaW4vcHUKKyAgb3JpZ2luL3RvZG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiB0aGlzIGV4YW1wbGUsICJvcmlnaW4iIGlzIGNhbGxlZCBhIHJlbW90ZSByZXBvc2l0b3J5LCBvciAicmVtb3RlIgorZm9yIHNob3J0LiBUaGUgYnJhbmNoZXMgb2YgdGhpcyByZXBvc2l0b3J5IGFyZSBjYWxsZWQgInJlbW90ZQorYnJhbmNoZXMiIGZyb20gb3VyIHBvaW50IG9mIHZpZXcuIFRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbGlzdGVkCithYm92ZSB3ZXJlIGNyZWF0ZWQgYmFzZWQgb24gdGhlIHJlbW90ZSBicmFuY2hlcyBhdCBjbG9uZSB0aW1lIGFuZCB3aWxsCitiZSB1cGRhdGVkIGJ5IGBnaXQgZmV0Y2hgIChoZW5jZSBgZ2l0IHB1bGxgKSBhbmQgYGdpdCBwdXNoYC4gU2VlCis8PFVwZGF0aW5nLWEtcmVwb3NpdG9yeS1XaXRoLWdpdC1mZXRjaD4+IGZvciBkZXRhaWxzLgorCitZb3UgbWlnaHQgd2FudCB0byBidWlsZCBvbiBvbmUgb2YgdGhlc2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzCitvbiBhIGJyYW5jaCBvZiB5b3VyIG93biwganVzdCBhcyB5b3Ugd291bGQgZm9yIGEgdGFnOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCAtYyBteS10b2RvLWNvcHkgb3JpZ2luL3RvZG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGFsc28gY2hlY2sgb3V0IGBvcmlnaW4vdG9kb2AgZGlyZWN0bHkgdG8gZXhhbWluZSBpdCBvcgord3JpdGUgYSBvbmUtb2ZmIHBhdGNoLiAgU2VlIDw8ZGV0YWNoZWQtaGVhZCxkZXRhY2hlZCBoZWFkPj4uCisKK05vdGUgdGhhdCB0aGUgbmFtZSAib3JpZ2luIiBpcyBqdXN0IHRoZSBuYW1lIHRoYXQgR2l0IHVzZXMgYnkgZGVmYXVsdAordG8gcmVmZXIgdG8gdGhlIHJlcG9zaXRvcnkgdGhhdCB5b3UgY2xvbmVkIGZyb20uCisKK1tbaG93LWdpdC1zdG9yZXMtcmVmZXJlbmNlc11dCis9PT0gTmFtaW5nIGJyYW5jaGVzLCB0YWdzLCBhbmQgb3RoZXIgcmVmZXJlbmNlcworCitCcmFuY2hlcywgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLCBhbmQgdGFncyBhcmUgYWxsIHJlZmVyZW5jZXMgdG8KK2NvbW1pdHMuICBBbGwgcmVmZXJlbmNlcyBhcmUgbmFtZWQgd2l0aCBhIHNsYXNoLXNlcGFyYXRlZCBwYXRoIG5hbWUKK3N0YXJ0aW5nIHdpdGggYHJlZnNgOyB0aGUgbmFtZXMgd2UndmUgYmVlbiB1c2luZyBzbyBmYXIgYXJlIGFjdHVhbGx5CitzaG9ydGhhbmQ6CisKKwktIFRoZSBicmFuY2ggYHRlc3RgIGlzIHNob3J0IGZvciBgcmVmcy9oZWFkcy90ZXN0YC4KKwktIFRoZSB0YWcgYHYyLjYuMThgIGlzIHNob3J0IGZvciBgcmVmcy90YWdzL3YyLjYuMThgLgorCS0gYG9yaWdpbi9tYXN0ZXJgIGlzIHNob3J0IGZvciBgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXJgLgorCitUaGUgZnVsbCBuYW1lIGlzIG9jY2FzaW9uYWxseSB1c2VmdWwgaWYsIGZvciBleGFtcGxlLCB0aGVyZSBldmVyCitleGlzdHMgYSB0YWcgYW5kIGEgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZS4KKworKE5ld2x5IGNyZWF0ZWQgcmVmcyBhcmUgYWN0dWFsbHkgc3RvcmVkIGluIHRoZSBgLmdpdC9yZWZzYCBkaXJlY3RvcnksCit1bmRlciB0aGUgcGF0aCBnaXZlbiBieSB0aGVpciBuYW1lLiAgSG93ZXZlciwgZm9yIGVmZmljaWVuY3kgcmVhc29ucwordGhleSBtYXkgYWxzbyBiZSBwYWNrZWQgdG9nZXRoZXIgaW4gYSBzaW5nbGUgZmlsZTsgc2VlCitsaW5rZ2l0OmdpdC1wYWNrLXJlZnNbMV0pLgorCitBcyBhbm90aGVyIHVzZWZ1bCBzaG9ydGN1dCwgdGhlICJIRUFEIiBvZiBhIHJlcG9zaXRvcnkgY2FuIGJlIHJlZmVycmVkCit0byBqdXN0IHVzaW5nIHRoZSBuYW1lIG9mIHRoYXQgcmVwb3NpdG9yeS4gIFNvLCBmb3IgZXhhbXBsZSwgIm9yaWdpbiIKK2lzIHVzdWFsbHkgYSBzaG9ydGN1dCBmb3IgdGhlIEhFQUQgYnJhbmNoIGluIHRoZSByZXBvc2l0b3J5ICJvcmlnaW4iLgorCitGb3IgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgcGF0aHMgd2hpY2ggR2l0IGNoZWNrcyBmb3IgcmVmZXJlbmNlcywgYW5kCit0aGUgb3JkZXIgaXQgdXNlcyB0byBkZWNpZGUgd2hpY2ggdG8gY2hvb3NlIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlCityZWZlcmVuY2VzIHdpdGggdGhlIHNhbWUgc2hvcnRoYW5kIG5hbWUsIHNlZSB0aGUgIlNQRUNJRllJTkcKK1JFVklTSU9OUyIgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XS4KKworW1tVcGRhdGluZy1hLXJlcG9zaXRvcnktV2l0aC1naXQtZmV0Y2hdXQorPT09IFVwZGF0aW5nIGEgcmVwb3NpdG9yeSB3aXRoIGdpdCBmZXRjaAorCitBZnRlciB5b3UgY2xvbmUgYSByZXBvc2l0b3J5IGFuZCBjb21taXQgYSBmZXcgY2hhbmdlcyBvZiB5b3VyIG93biwgeW91CittYXkgd2lzaCB0byBjaGVjayB0aGUgb3JpZ2luYWwgcmVwb3NpdG9yeSBmb3IgdXBkYXRlcy4KKworVGhlIGBnaXQtZmV0Y2hgIGNvbW1hbmQsIHdpdGggbm8gYXJndW1lbnRzLCB3aWxsIHVwZGF0ZSBhbGwgb2YgdGhlCityZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIGZvdW5kIGluIHRoZSBvcmlnaW5hbAorcmVwb3NpdG9yeS4gIEl0IHdpbGwgbm90IHRvdWNoIGFueSBvZiB5b3VyIG93biBicmFuY2hlcy0tbm90IGV2ZW4gdGhlCisibWFzdGVyIiBicmFuY2ggdGhhdCB3YXMgY3JlYXRlZCBmb3IgeW91IG9uIGNsb25lLgorCitbW2ZldGNoaW5nLWJyYW5jaGVzXV0KKz09PSBGZXRjaGluZyBicmFuY2hlcyBmcm9tIG90aGVyIHJlcG9zaXRvcmllcworCitZb3UgY2FuIGFsc28gdHJhY2sgYnJhbmNoZXMgZnJvbSByZXBvc2l0b3JpZXMgb3RoZXIgdGhhbiB0aGUgb25lIHlvdQorY2xvbmVkIGZyb20sIHVzaW5nIGxpbmtnaXQ6Z2l0LXJlbW90ZVsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVtb3RlIGFkZCBzdGFnaW5nIGdpdDovL2dpdC5rZXJuZWwub3JnLy4uLi9ncmVna2gvc3RhZ2luZy5naXQKKyQgZ2l0IGZldGNoIHN0YWdpbmcKKy4uLgorRnJvbSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ3JlZ2toL3N0YWdpbmcKKyAqIFtuZXcgYnJhbmNoXSAgICAgIG1hc3RlciAgICAgLT4gc3RhZ2luZy9tYXN0ZXIKKyAqIFtuZXcgYnJhbmNoXSAgICAgIHN0YWdpbmctbGludXMgLT4gc3RhZ2luZy9zdGFnaW5nLWxpbnVzCisgKiBbbmV3IGJyYW5jaF0gICAgICBzdGFnaW5nLW5leHQgLT4gc3RhZ2luZy9zdGFnaW5nLW5leHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTmV3IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyB3aWxsIGJlIHN0b3JlZCB1bmRlciB0aGUgc2hvcnRoYW5kIG5hbWUKK3RoYXQgeW91IGdhdmUgYGdpdCByZW1vdGUgYWRkYCwgaW4gdGhpcyBjYXNlIGBzdGFnaW5nYDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC1yCisgIG9yaWdpbi9IRUFEIC0+IG9yaWdpbi9tYXN0ZXIKKyAgb3JpZ2luL21hc3RlcgorICBzdGFnaW5nL21hc3RlcgorICBzdGFnaW5nL3N0YWdpbmctbGludXMKKyAgc3RhZ2luZy9zdGFnaW5nLW5leHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IHJ1biBgZ2l0IGZldGNoIDxyZW1vdGU+YCBsYXRlciwgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcworZm9yIHRoZSBuYW1lZCBgPHJlbW90ZT5gIHdpbGwgYmUgdXBkYXRlZC4KKworSWYgeW91IGV4YW1pbmUgdGhlIGZpbGUgYC5naXQvY29uZmlnYCwgeW91IHdpbGwgc2VlIHRoYXQgR2l0IGhhcyBhZGRlZAorYSBuZXcgc3RhbnphOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNhdCAuZ2l0L2NvbmZpZworLi4uCitbcmVtb3RlICJzdGFnaW5nIl0KKwl1cmwgPSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ3JlZ2toL3N0YWdpbmcuZ2l0CisJZmV0Y2ggPSArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9zdGFnaW5nLyoKKy4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIHdoYXQgY2F1c2VzIEdpdCB0byB0cmFjayB0aGUgcmVtb3RlJ3MgYnJhbmNoZXM7IHlvdSBtYXkgbW9kaWZ5CitvciBkZWxldGUgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGJ5IGVkaXRpbmcgYC5naXQvY29uZmlnYCB3aXRoIGEKK3RleHQgZWRpdG9yLiAgKFNlZSB0aGUgIkNPTkZJR1VSQVRJT04gRklMRSIgc2VjdGlvbiBvZgorbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBkZXRhaWxzLikKKworW1tleHBsb3JpbmctZ2l0LWhpc3RvcnldXQorPT0gRXhwbG9yaW5nIEdpdCBoaXN0b3J5CisKK0dpdCBpcyBiZXN0IHRob3VnaHQgb2YgYXMgYSB0b29sIGZvciBzdG9yaW5nIHRoZSBoaXN0b3J5IG9mIGEKK2NvbGxlY3Rpb24gb2YgZmlsZXMuICBJdCBkb2VzIHRoaXMgYnkgc3RvcmluZyBjb21wcmVzc2VkIHNuYXBzaG90cyBvZgordGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBoaWVyYXJjaHksIHRvZ2V0aGVyIHdpdGggImNvbW1pdHMiIHdoaWNoIHNob3cKK3RoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2Ugc25hcHNob3RzLgorCitHaXQgcHJvdmlkZXMgZXh0cmVtZWx5IGZsZXhpYmxlIGFuZCBmYXN0IHRvb2xzIGZvciBleHBsb3JpbmcgdGhlCitoaXN0b3J5IG9mIGEgcHJvamVjdC4KKworV2Ugc3RhcnQgd2l0aCBvbmUgc3BlY2lhbGl6ZWQgdG9vbCB0aGF0IGlzIHVzZWZ1bCBmb3IgZmluZGluZyB0aGUKK2NvbW1pdCB0aGF0IGludHJvZHVjZWQgYSBidWcgaW50byBhIHByb2plY3QuCisKK1tbdXNpbmctYmlzZWN0XV0KKz09PSBIb3cgdG8gdXNlIGJpc2VjdCB0byBmaW5kIGEgcmVncmVzc2lvbgorCitTdXBwb3NlIHZlcnNpb24gMi42LjE4IG9mIHlvdXIgcHJvamVjdCB3b3JrZWQsIGJ1dCB0aGUgdmVyc2lvbiBhdAorIm1hc3RlciIgY3Jhc2hlcy4gIFNvbWV0aW1lcyB0aGUgYmVzdCB3YXkgdG8gZmluZCB0aGUgY2F1c2Ugb2Ygc3VjaCBhCityZWdyZXNzaW9uIGlzIHRvIHBlcmZvcm0gYSBicnV0ZS1mb3JjZSBzZWFyY2ggdGhyb3VnaCB0aGUgcHJvamVjdCdzCitoaXN0b3J5IHRvIGZpbmQgdGhlIHBhcnRpY3VsYXIgY29tbWl0IHRoYXQgY2F1c2VkIHRoZSBwcm9ibGVtLiAgVGhlCitsaW5rZ2l0OmdpdC1iaXNlY3RbMV0gY29tbWFuZCBjYW4gaGVscCB5b3UgZG8gdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0CiskIGdpdCBiaXNlY3QgZ29vZCB2Mi42LjE4CiskIGdpdCBiaXNlY3QgYmFkIG1hc3RlcgorQmlzZWN0aW5nOiAzNTM3IHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcworWzY1OTM0YTlhMDI4Yjg4ZTgzZTJiMGY4YjM2NjE4ZmU1MDMzNDlmOGVdIEJMT0NLOiBNYWtlIFVTQiBzdG9yYWdlIGRlcGVuZCBvbiBTQ1NJIHJhdGhlciB0aGFuIHNlbGVjdGluZyBpdCBbdHJ5ICM2XQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgcnVuIGBnaXQgYnJhbmNoYCBhdCB0aGlzIHBvaW50LCB5b3UnbGwgc2VlIHRoYXQgR2l0IGhhcwordGVtcG9yYXJpbHkgbW92ZWQgeW91IGluICIobm8gYnJhbmNoKSIuIEhFQUQgaXMgbm93IGRldGFjaGVkIGZyb20gYW55CiticmFuY2ggYW5kIHBvaW50cyBkaXJlY3RseSB0byBhIGNvbW1pdCAod2l0aCBjb21taXQgaWQgNjU5MzQpIHRoYXQKK2lzIHJlYWNoYWJsZSBmcm9tICJtYXN0ZXIiIGJ1dCBub3QgZnJvbSB2Mi42LjE4LiBDb21waWxlIGFuZCB0ZXN0IGl0LAorYW5kIHNlZSB3aGV0aGVyIGl0IGNyYXNoZXMuIEFzc3VtZSBpdCBkb2VzIGNyYXNoLiBUaGVuOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgYmFkCitCaXNlY3Rpbmc6IDE3NjkgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzCitbN2VmZjgyYzhiMTUxMTAxN2FlNjA1ZjBjOTlhYzI3NWE3ZTIxYjg2N10gaTJjLWNvcmU6IERyb3AgdXNlbGVzcyBiaXRtYXNraW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjaGVja3Mgb3V0IGFuIG9sZGVyIHZlcnNpb24uICBDb250aW51ZSBsaWtlIHRoaXMsIHRlbGxpbmcgR2l0IGF0IGVhY2gKK3N0YWdlIHdoZXRoZXIgdGhlIHZlcnNpb24gaXQgZ2l2ZXMgeW91IGlzIGdvb2Qgb3IgYmFkLCBhbmQgbm90aWNlCit0aGF0IHRoZSBudW1iZXIgb2YgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBpcyBjdXQgYXBwcm94aW1hdGVseSBpbgoraGFsZiBlYWNoIHRpbWUuCisKK0FmdGVyIGFib3V0IDEzIHRlc3RzIChpbiB0aGlzIGNhc2UpLCBpdCB3aWxsIG91dHB1dCB0aGUgY29tbWl0IGlkIG9mCit0aGUgZ3VpbHR5IGNvbW1pdC4gIFlvdSBjYW4gdGhlbiBleGFtaW5lIHRoZSBjb21taXQgd2l0aAorbGlua2dpdDpnaXQtc2hvd1sxXSwgZmluZCBvdXQgd2hvIHdyb3RlIGl0LCBhbmQgbWFpbCB0aGVtIHlvdXIgYnVnCityZXBvcnQgd2l0aCB0aGUgY29tbWl0IGlkLiAgRmluYWxseSwgcnVuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCByZXNldAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0byByZXR1cm4geW91IHRvIHRoZSBicmFuY2ggeW91IHdlcmUgb24gYmVmb3JlLgorCitOb3RlIHRoYXQgdGhlIHZlcnNpb24gd2hpY2ggYGdpdCBiaXNlY3RgIGNoZWNrcyBvdXQgZm9yIHlvdSBhdCBlYWNoCitwb2ludCBpcyBqdXN0IGEgc3VnZ2VzdGlvbiwgYW5kIHlvdSdyZSBmcmVlIHRvIHRyeSBhIGRpZmZlcmVudAordmVyc2lvbiBpZiB5b3UgdGhpbmsgaXQgd291bGQgYmUgYSBnb29kIGlkZWEuICBGb3IgZXhhbXBsZSwKK29jY2FzaW9uYWxseSB5b3UgbWF5IGxhbmQgb24gYSBjb21taXQgdGhhdCBicm9rZSBzb21ldGhpbmcgdW5yZWxhdGVkOworcnVuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCB2aXN1YWxpemUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCBydW4gZ2l0ayBhbmQgbGFiZWwgdGhlIGNvbW1pdCBpdCBjaG9zZSB3aXRoIGEgbWFya2VyIHRoYXQKK3NheXMgImJpc2VjdCIuICBDaG9vc2UgYSBzYWZlLWxvb2tpbmcgY29tbWl0IG5lYXJieSwgbm90ZSBpdHMgY29tbWl0CitpZCwgYW5kIGNoZWNrIGl0IG91dCB3aXRoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZXNldCAtLWhhcmQgZmI0N2RkYjJkYgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0aGVuIHRlc3QsIHJ1biBgYmlzZWN0IGdvb2RgIG9yIGBiaXNlY3QgYmFkYCBhcyBhcHByb3ByaWF0ZSwgYW5kCitjb250aW51ZS4KKworSW5zdGVhZCBvZiBgZ2l0IGJpc2VjdCB2aXN1YWxpemVgIGFuZCB0aGVuIGBnaXQgcmVzZXQgLS1oYXJkCitmYjQ3ZGRiMmRiYCwgeW91IG1pZ2h0IGp1c3Qgd2FudCB0byB0ZWxsIEdpdCB0aGF0IHlvdSB3YW50IHRvIHNraXAKK3RoZSBjdXJyZW50IGNvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHNraXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhpcyBjYXNlLCB0aG91Z2gsIEdpdCBtYXkgbm90IGV2ZW50dWFsbHkgYmUgYWJsZSB0byB0ZWxsIHRoZSBmaXJzdAorYmFkIG9uZSBiZXR3ZWVuIHNvbWUgZmlyc3Qgc2tpcHBlZCBjb21taXRzIGFuZCBhIGxhdGVyIGJhZCBjb21taXQuCisKK1RoZXJlIGFyZSBhbHNvIHdheXMgdG8gYXV0b21hdGUgdGhlIGJpc2VjdGluZyBwcm9jZXNzIGlmIHlvdSBoYXZlIGEKK3Rlc3Qgc2NyaXB0IHRoYXQgY2FuIHRlbGwgYSBnb29kIGZyb20gYSBiYWQgY29tbWl0LiBTZWUKK2xpbmtnaXQ6Z2l0LWJpc2VjdFsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGFuZCBvdGhlciBgZ2l0CitiaXNlY3RgIGZlYXR1cmVzLgorCitbW25hbWluZy1jb21taXRzXV0KKz09PSBOYW1pbmcgY29tbWl0cworCitXZSBoYXZlIHNlZW4gc2V2ZXJhbCB3YXlzIG9mIG5hbWluZyBjb21taXRzIGFscmVhZHk6CisKKwktIDQwLWhleGRpZ2l0IG9iamVjdCBuYW1lCisJLSBicmFuY2ggbmFtZTogcmVmZXJzIHRvIHRoZSBjb21taXQgYXQgdGhlIGhlYWQgb2YgdGhlIGdpdmVuCisJICBicmFuY2gKKwktIHRhZyBuYW1lOiByZWZlcnMgdG8gdGhlIGNvbW1pdCBwb2ludGVkIHRvIGJ5IHRoZSBnaXZlbiB0YWcKKwkgICh3ZSd2ZSBzZWVuIGJyYW5jaGVzIGFuZCB0YWdzIGFyZSBzcGVjaWFsIGNhc2VzIG9mCisJICA8PGhvdy1naXQtc3RvcmVzLXJlZmVyZW5jZXMscmVmZXJlbmNlcz4+KS4KKwktIEhFQUQ6IHJlZmVycyB0byB0aGUgaGVhZCBvZiB0aGUgY3VycmVudCBicmFuY2gKKworVGhlcmUgYXJlIG1hbnkgbW9yZTsgc2VlIHRoZSAiU1BFQ0lGWUlORyBSRVZJU0lPTlMiIHNlY3Rpb24gb2YgdGhlCitsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XSBtYW4gcGFnZSBmb3IgdGhlIGNvbXBsZXRlIGxpc3Qgb2Ygd2F5cyB0bworbmFtZSByZXZpc2lvbnMuICBTb21lIGV4YW1wbGVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IGZiNDdkZGIyICMgdGhlIGZpcnN0IGZldyBjaGFyYWN0ZXJzIG9mIHRoZSBvYmplY3QgbmFtZQorCQkgICAgIyBhcmUgdXN1YWxseSBlbm91Z2ggdG8gc3BlY2lmeSBpdCB1bmlxdWVseQorJCBnaXQgc2hvdyBIRUFEXiAgICAjIHRoZSBwYXJlbnQgb2YgdGhlIEhFQUQgY29tbWl0CiskIGdpdCBzaG93IEhFQUReXiAgICMgdGhlIGdyYW5kcGFyZW50CiskIGdpdCBzaG93IEhFQUR+NCAgICMgdGhlIGdyZWF0LWdyZWF0LWdyYW5kcGFyZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlY2FsbCB0aGF0IG1lcmdlIGNvbW1pdHMgbWF5IGhhdmUgbW9yZSB0aGFuIG9uZSBwYXJlbnQ7IGJ5IGRlZmF1bHQsCitgXmAgYW5kIGB+YCBmb2xsb3cgdGhlIGZpcnN0IHBhcmVudCBsaXN0ZWQgaW4gdGhlIGNvbW1pdCwgYnV0IHlvdSBjYW4KK2Fsc28gY2hvb3NlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IEhFQUReMSAgICMgc2hvdyB0aGUgZmlyc3QgcGFyZW50IG9mIEhFQUQKKyQgZ2l0IHNob3cgSEVBRF4yICAgIyBzaG93IHRoZSBzZWNvbmQgcGFyZW50IG9mIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gYWRkaXRpb24gdG8gSEVBRCwgdGhlcmUgYXJlIHNldmVyYWwgb3RoZXIgc3BlY2lhbCBuYW1lcyBmb3IKK2NvbW1pdHM6CisKK01lcmdlcyAodG8gYmUgZGlzY3Vzc2VkIGxhdGVyKSwgYXMgd2VsbCBhcyBvcGVyYXRpb25zIHN1Y2ggYXMKK2BnaXQgcmVzZXRgLCB3aGljaCBjaGFuZ2UgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBjb21taXQsIGdlbmVyYWxseQorc2V0IE9SSUdfSEVBRCB0byB0aGUgdmFsdWUgSEVBRCBoYWQgYmVmb3JlIHRoZSBjdXJyZW50IG9wZXJhdGlvbi4KKworVGhlIGBnaXQgZmV0Y2hgIG9wZXJhdGlvbiBhbHdheXMgc3RvcmVzIHRoZSBoZWFkIG9mIHRoZSBsYXN0IGZldGNoZWQKK2JyYW5jaCBpbiBGRVRDSF9IRUFELiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBydW4gYGdpdCBmZXRjaGAgd2l0aG91dAorc3BlY2lmeWluZyBhIGxvY2FsIGJyYW5jaCBhcyB0aGUgdGFyZ2V0IG9mIHRoZSBvcGVyYXRpb24KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggZ2l0Oi8vZXhhbXBsZS5jb20vcHJvai5naXQgdGhlaXJicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGhlIGZldGNoZWQgY29tbWl0cyB3aWxsIHN0aWxsIGJlIGF2YWlsYWJsZSBmcm9tIEZFVENIX0hFQUQuCisKK1doZW4gd2UgZGlzY3VzcyBtZXJnZXMgd2UnbGwgYWxzbyBzZWUgdGhlIHNwZWNpYWwgbmFtZSBNRVJHRV9IRUFELAord2hpY2ggcmVmZXJzIHRvIHRoZSBvdGhlciBicmFuY2ggdGhhdCB3ZSdyZSBtZXJnaW5nIGluIHRvIHRoZSBjdXJyZW50CiticmFuY2guCisKK1RoZSBsaW5rZ2l0OmdpdC1yZXYtcGFyc2VbMV0gY29tbWFuZCBpcyBhIGxvdy1sZXZlbCBjb21tYW5kIHRoYXQgaXMKK29jY2FzaW9uYWxseSB1c2VmdWwgZm9yIHRyYW5zbGF0aW5nIHNvbWUgbmFtZSBmb3IgYSBjb21taXQgdG8gdGhlIG9iamVjdAorbmFtZSBmb3IgdGhhdCBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJldi1wYXJzZSBvcmlnaW4KK2UwNWRiMGZkNGYzMWRkZTcwMDVmMDc1YTg0Zjk2YjM2MGQwNTk4NGIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworW1tjcmVhdGluZy10YWdzXV0KKz09PSBDcmVhdGluZyB0YWdzCisKK1dlIGNhbiBhbHNvIGNyZWF0ZSBhIHRhZyB0byByZWZlciB0byBhIHBhcnRpY3VsYXIgY29tbWl0OyBhZnRlcgorcnVubmluZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB0YWcgc3RhYmxlLTEgMWIyZTFkNjNmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHVzZSBgc3RhYmxlLTFgIHRvIHJlZmVyIHRvIHRoZSBjb21taXQgMWIyZTFkNjNmZi4KKworVGhpcyBjcmVhdGVzIGEgImxpZ2h0d2VpZ2h0IiB0YWcuICBJZiB5b3Ugd291bGQgYWxzbyBsaWtlIHRvIGluY2x1ZGUgYQorY29tbWVudCB3aXRoIHRoZSB0YWcsIGFuZCBwb3NzaWJseSBzaWduIGl0IGNyeXB0b2dyYXBoaWNhbGx5LCB0aGVuIHlvdQorc2hvdWxkIGNyZWF0ZSBhIHRhZyBvYmplY3QgaW5zdGVhZDsgc2VlIHRoZSBsaW5rZ2l0OmdpdC10YWdbMV0gbWFuIHBhZ2UKK2ZvciBkZXRhaWxzLgorCitbW2Jyb3dzaW5nLXJldmlzaW9uc11dCis9PT0gQnJvd3NpbmcgcmV2aXNpb25zCisKK1RoZSBsaW5rZ2l0OmdpdC1sb2dbMV0gY29tbWFuZCBjYW4gc2hvdyBsaXN0cyBvZiBjb21taXRzLiAgT24gaXRzCitvd24sIGl0IHNob3dzIGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIHRoZSBwYXJlbnQgY29tbWl0OyBidXQgeW91CitjYW4gYWxzbyBtYWtlIG1vcmUgc3BlY2lmaWMgcmVxdWVzdHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyB2Mi41Li4JIyBjb21taXRzIHNpbmNlIChub3QgcmVhY2hhYmxlIGZyb20pIHYyLjUKKyQgZ2l0IGxvZyB0ZXN0Li5tYXN0ZXIJIyBjb21taXRzIHJlYWNoYWJsZSBmcm9tIG1hc3RlciBidXQgbm90IHRlc3QKKyQgZ2l0IGxvZyBtYXN0ZXIuLnRlc3QJIyAuLi5yZWFjaGFibGUgZnJvbSB0ZXN0IGJ1dCBub3QgbWFzdGVyCiskIGdpdCBsb2cgbWFzdGVyLi4udGVzdAkjIC4uLnJlYWNoYWJsZSBmcm9tIGVpdGhlciB0ZXN0IG9yIG1hc3RlciwKKwkJCSMgICAgYnV0IG5vdCBib3RoCiskIGdpdCBsb2cgLS1zaW5jZT0iMiB3ZWVrcyBhZ28iICMgY29tbWl0cyBmcm9tIHRoZSBsYXN0IDIgd2Vla3MKKyQgZ2l0IGxvZyBNYWtlZmlsZSAgICAgICMgY29tbWl0cyB3aGljaCBtb2RpZnkgTWFrZWZpbGUKKyQgZ2l0IGxvZyBmcy8JCSMgLi4uIHdoaWNoIG1vZGlmeSBhbnkgZmlsZSB1bmRlciBmcy8KKyQgZ2l0IGxvZyAtUydmb28oKScJIyBjb21taXRzIHdoaWNoIGFkZCBvciByZW1vdmUgYW55IGZpbGUgZGF0YQorCQkJIyBtYXRjaGluZyB0aGUgc3RyaW5nICdmb28oKScKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW5kIG9mIGNvdXJzZSB5b3UgY2FuIGNvbWJpbmUgYWxsIG9mIHRoZXNlOyB0aGUgZm9sbG93aW5nIGZpbmRzCitjb21taXRzIHNpbmNlIHYyLjUgd2hpY2ggdG91Y2ggdGhlIGBNYWtlZmlsZWAgb3IgYW55IGZpbGUgdW5kZXIgYGZzYDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIHYyLjUuLiBNYWtlZmlsZSBmcy8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhbHNvIGFzayBnaXQgbG9nIHRvIHNob3cgcGF0Y2hlczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC1wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlZSB0aGUgYC0tcHJldHR5YCBvcHRpb24gaW4gdGhlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSBtYW4gcGFnZSBmb3IgbW9yZQorZGlzcGxheSBvcHRpb25zLgorCitOb3RlIHRoYXQgZ2l0IGxvZyBzdGFydHMgd2l0aCB0aGUgbW9zdCByZWNlbnQgY29tbWl0IGFuZCB3b3JrcworYmFja3dhcmRzIHRocm91Z2ggdGhlIHBhcmVudHM7IGhvd2V2ZXIsIHNpbmNlIEdpdCBoaXN0b3J5IGNhbiBjb250YWluCittdWx0aXBsZSBpbmRlcGVuZGVudCBsaW5lcyBvZiBkZXZlbG9wbWVudCwgdGhlIHBhcnRpY3VsYXIgb3JkZXIgdGhhdAorY29tbWl0cyBhcmUgbGlzdGVkIGluIG1heSBiZSBzb21ld2hhdCBhcmJpdHJhcnkuCisKK1tbZ2VuZXJhdGluZy1kaWZmc11dCis9PT0gR2VuZXJhdGluZyBkaWZmcworCitZb3UgY2FuIGdlbmVyYXRlIGRpZmZzIGJldHdlZW4gYW55IHR3byB2ZXJzaW9ucyB1c2luZworbGlua2dpdDpnaXQtZGlmZlsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiBtYXN0ZXIuLnRlc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhhdCB3aWxsIHByb2R1Y2UgdGhlIGRpZmYgYmV0d2VlbiB0aGUgdGlwcyBvZiB0aGUgdHdvIGJyYW5jaGVzLiAgSWYKK3lvdSdkIHByZWZlciB0byBmaW5kIHRoZSBkaWZmIGZyb20gdGhlaXIgY29tbW9uIGFuY2VzdG9yIHRvIHRlc3QsIHlvdQorY2FuIHVzZSB0aHJlZSBkb3RzIGluc3RlYWQgb2YgdHdvOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIG1hc3Rlci4uLnRlc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU29tZXRpbWVzIHdoYXQgeW91IHdhbnQgaW5zdGVhZCBpcyBhIHNldCBvZiBwYXRjaGVzOyBmb3IgdGhpcyB5b3UgY2FuCit1c2UgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmb3JtYXQtcGF0Y2ggbWFzdGVyLi50ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgZ2VuZXJhdGUgYSBmaWxlIHdpdGggYSBwYXRjaCBmb3IgZWFjaCBjb21taXQgcmVhY2hhYmxlIGZyb20gdGVzdAorYnV0IG5vdCBmcm9tIG1hc3Rlci4KKworW1t2aWV3aW5nLW9sZC1maWxlLXZlcnNpb25zXV0KKz09PSBWaWV3aW5nIG9sZCBmaWxlIHZlcnNpb25zCisKK1lvdSBjYW4gYWx3YXlzIHZpZXcgYW4gb2xkIHZlcnNpb24gb2YgYSBmaWxlIGJ5IGp1c3QgY2hlY2tpbmcgb3V0IHRoZQorY29ycmVjdCByZXZpc2lvbiBmaXJzdC4gIEJ1dCBzb21ldGltZXMgaXQgaXMgbW9yZSBjb252ZW5pZW50IHRvIGJlCithYmxlIHRvIHZpZXcgYW4gb2xkIHZlcnNpb24gb2YgYSBzaW5nbGUgZmlsZSB3aXRob3V0IGNoZWNraW5nCithbnl0aGluZyBvdXQ7IHRoaXMgY29tbWFuZCBkb2VzIHRoYXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgdjIuNTpmcy9sb2Nrcy5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JlZm9yZSB0aGUgY29sb24gbWF5IGJlIGFueXRoaW5nIHRoYXQgbmFtZXMgYSBjb21taXQsIGFuZCBhZnRlciBpdAorbWF5IGJlIGFueSBwYXRoIHRvIGEgZmlsZSB0cmFja2VkIGJ5IEdpdC4KKworW1toaXN0b3J5LWV4YW1wbGVzXV0KKz09PSBFeGFtcGxlcworCitbW2NvdW50aW5nLWNvbW1pdHMtb24tYS1icmFuY2hdXQorPT09PSBDb3VudGluZyB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgb24gYSBicmFuY2gKKworU3VwcG9zZSB5b3Ugd2FudCB0byBrbm93IGhvdyBtYW55IGNvbW1pdHMgeW91J3ZlIG1hZGUgb24gYG15YnJhbmNoYAorc2luY2UgaXQgZGl2ZXJnZWQgZnJvbSBgb3JpZ2luYDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgb3JpZ2luLi5teWJyYW5jaCB8IHdjIC1sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgb2Z0ZW4gc2VlIHRoaXMgc29ydCBvZiB0aGluZyBkb25lIHdpdGggdGhlCitsb3dlci1sZXZlbCBjb21tYW5kIGxpbmtnaXQ6Z2l0LXJldi1saXN0WzFdLCB3aGljaCBqdXN0IGxpc3RzIHRoZSBTSEEtMSdzCitvZiBhbGwgdGhlIGdpdmVuIGNvbW1pdHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJldi1saXN0IG9yaWdpbi4ubXlicmFuY2ggfCB3YyAtbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW2NoZWNraW5nLWZvci1lcXVhbC1icmFuY2hlc11dCis9PT09IENoZWNrIHdoZXRoZXIgdHdvIGJyYW5jaGVzIHBvaW50IGF0IHRoZSBzYW1lIGhpc3RvcnkKKworU3VwcG9zZSB5b3Ugd2FudCB0byBjaGVjayB3aGV0aGVyIHR3byBicmFuY2hlcyBwb2ludCBhdCB0aGUgc2FtZSBwb2ludAoraW4gaGlzdG9yeS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiBvcmlnaW4uLm1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHRlbGwgeW91IHdoZXRoZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBwcm9qZWN0IGFyZSB0aGUgc2FtZSBhdCB0aGUKK3R3byBicmFuY2hlczsgaW4gdGhlb3J5LCBob3dldmVyLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHNhbWUgcHJvamVjdAorY29udGVudHMgY291bGQgaGF2ZSBiZWVuIGFycml2ZWQgYXQgYnkgdHdvIGRpZmZlcmVudCBoaXN0b3JpY2FsCityb3V0ZXMuICBZb3UgY291bGQgY29tcGFyZSB0aGUgb2JqZWN0IG5hbWVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZXYtbGlzdCBvcmlnaW4KK2UwNWRiMGZkNGYzMWRkZTcwMDVmMDc1YTg0Zjk2YjM2MGQwNTk4NGIKKyQgZ2l0IHJldi1saXN0IG1hc3RlcgorZTA1ZGIwZmQ0ZjMxZGRlNzAwNWYwNzVhODRmOTZiMzYwZDA1OTg0YgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPciB5b3UgY291bGQgcmVjYWxsIHRoYXQgdGhlIGAuLi5gIG9wZXJhdG9yIHNlbGVjdHMgYWxsIGNvbW1pdHMKK3JlYWNoYWJsZSBmcm9tIGVpdGhlciBvbmUgcmVmZXJlbmNlIG9yIHRoZSBvdGhlciBidXQgbm90Citib3RoOyBzbworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgb3JpZ2luLi4ubWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgcmV0dXJuIG5vIGNvbW1pdHMgd2hlbiB0aGUgdHdvIGJyYW5jaGVzIGFyZSBlcXVhbC4KKworW1tmaW5kaW5nLXRhZ2dlZC1kZXNjZW5kYW50c11dCis9PT09IEZpbmQgZmlyc3QgdGFnZ2VkIHZlcnNpb24gaW5jbHVkaW5nIGEgZ2l2ZW4gZml4CisKK1N1cHBvc2UgeW91IGtub3cgdGhhdCB0aGUgY29tbWl0IGUwNWRiMGZkIGZpeGVkIGEgY2VydGFpbiBwcm9ibGVtLgorWW91J2QgbGlrZSB0byBmaW5kIHRoZSBlYXJsaWVzdCB0YWdnZWQgcmVsZWFzZSB0aGF0IGNvbnRhaW5zIHRoYXQKK2ZpeC4KKworT2YgY291cnNlLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBhbnN3ZXItLWlmIHRoZSBoaXN0b3J5IGJyYW5jaGVkCithZnRlciBjb21taXQgZTA1ZGIwZmQsIHRoZW4gdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgImVhcmxpZXN0IiB0YWdnZWQKK3JlbGVhc2VzLgorCitZb3UgY291bGQganVzdCB2aXN1YWxseSBpbnNwZWN0IHRoZSBjb21taXRzIHNpbmNlIGUwNWRiMGZkOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdGsgZTA1ZGIwZmQuLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvciB5b3UgY2FuIHVzZSBsaW5rZ2l0OmdpdC1uYW1lLXJldlsxXSwgd2hpY2ggd2lsbCBnaXZlIHRoZSBjb21taXQgYQorbmFtZSBiYXNlZCBvbiBhbnkgdGFnIGl0IGZpbmRzIHBvaW50aW5nIHRvIG9uZSBvZiB0aGUgY29tbWl0J3MKK2Rlc2NlbmRhbnRzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBuYW1lLXJldiAtLXRhZ3MgZTA1ZGIwZmQKK2UwNWRiMGZkIHRhZ3MvdjEuNS4wLXJjMV4wfjIzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsaW5rZ2l0OmdpdC1kZXNjcmliZVsxXSBjb21tYW5kIGRvZXMgdGhlIG9wcG9zaXRlLCBuYW1pbmcgdGhlCityZXZpc2lvbiB1c2luZyBhIHRhZyBvbiB3aGljaCB0aGUgZ2l2ZW4gY29tbWl0IGlzIGJhc2VkOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkZXNjcmliZSBlMDVkYjBmZAordjEuNS4wLXJjMC0yNjAtZ2UwNWRiMGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYnV0IHRoYXQgbWF5IHNvbWV0aW1lcyBoZWxwIHlvdSBndWVzcyB3aGljaCB0YWdzIG1pZ2h0IGNvbWUgYWZ0ZXIgdGhlCitnaXZlbiBjb21taXQuCisKK0lmIHlvdSBqdXN0IHdhbnQgdG8gdmVyaWZ5IHdoZXRoZXIgYSBnaXZlbiB0YWdnZWQgdmVyc2lvbiBjb250YWlucyBhCitnaXZlbiBjb21taXQsIHlvdSBjb3VsZCB1c2UgbGlua2dpdDpnaXQtbWVyZ2UtYmFzZVsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UtYmFzZSBlMDVkYjBmZCB2MS41LjAtcmMxCitlMDVkYjBmZDRmMzFkZGU3MDA1ZjA3NWE4NGY5NmIzNjBkMDU5ODRiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZXJnZS1iYXNlIGNvbW1hbmQgZmluZHMgYSBjb21tb24gYW5jZXN0b3Igb2YgdGhlIGdpdmVuIGNvbW1pdHMsCithbmQgYWx3YXlzIHJldHVybnMgb25lIG9yIHRoZSBvdGhlciBpbiB0aGUgY2FzZSB3aGVyZSBvbmUgaXMgYQorZGVzY2VuZGFudCBvZiB0aGUgb3RoZXI7IHNvIHRoZSBhYm92ZSBvdXRwdXQgc2hvd3MgdGhhdCBlMDVkYjBmZAorYWN0dWFsbHkgaXMgYW4gYW5jZXN0b3Igb2YgdjEuNS4wLXJjMS4KKworQWx0ZXJuYXRpdmVseSwgbm90ZSB0aGF0CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyB2MS41LjAtcmMxLi5lMDVkYjBmZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHByb2R1Y2UgZW1wdHkgb3V0cHV0IGlmIGFuZCBvbmx5IGlmIHYxLjUuMC1yYzEgaW5jbHVkZXMgZTA1ZGIwZmQsCitiZWNhdXNlIGl0IG91dHB1dHMgb25seSBjb21taXRzIHRoYXQgYXJlIG5vdCByZWFjaGFibGUgZnJvbSB2MS41LjAtcmMxLgorCitBcyB5ZXQgYW5vdGhlciBhbHRlcm5hdGl2ZSwgdGhlIGxpbmtnaXQ6Z2l0LXNob3ctYnJhbmNoWzFdIGNvbW1hbmQgbGlzdHMKK3RoZSBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGl0cyBhcmd1bWVudHMgd2l0aCBhIGRpc3BsYXkgb24gdGhlIGxlZnQtaGFuZAorc2lkZSB0aGF0IGluZGljYXRlcyB3aGljaCBhcmd1bWVudHMgdGhhdCBjb21taXQgaXMgcmVhY2hhYmxlIGZyb20uCitTbywgaWYgeW91IHJ1biBzb21ldGhpbmcgbGlrZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCBlMDVkYjBmZCB2MS41LjAtcmMwIHYxLjUuMC1yYzEgdjEuNS4wLXJjMgorISBbZTA1ZGIwZmRdIEZpeCB3YXJuaW5ncyBpbiBzaGExX2ZpbGUuYyAtIHVzZSBDOTkgcHJpbnRmIGZvcm1hdCBpZgorYXZhaWxhYmxlCisgISBbdjEuNS4wLXJjMF0gR0lUIHYxLjUuMCBwcmV2aWV3CisgICEgW3YxLjUuMC1yYzFdIEdJVCB2MS41LjAtcmMxCisgICAhIFt2MS41LjAtcmMyXSBHSVQgdjEuNS4wLXJjMgorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RoZW4gYSBsaW5lIGxpa2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyArKyBbZTA1ZGIwZmRdIEZpeCB3YXJuaW5ncyBpbiBzaGExX2ZpbGUuYyAtIHVzZSBDOTkgcHJpbnRmIGZvcm1hdCBpZgorYXZhaWxhYmxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Nob3dzIHRoYXQgZTA1ZGIwZmQgaXMgcmVhY2hhYmxlIGZyb20gaXRzZWxmLCBmcm9tIHYxLjUuMC1yYzEsCithbmQgZnJvbSB2MS41LjAtcmMyLCBhbmQgbm90IGZyb20gdjEuNS4wLXJjMC4KKworW1tzaG93aW5nLWNvbW1pdHMtdW5pcXVlLXRvLWEtYnJhbmNoXV0KKz09PT0gU2hvd2luZyBjb21taXRzIHVuaXF1ZSB0byBhIGdpdmVuIGJyYW5jaAorCitTdXBwb3NlIHlvdSB3b3VsZCBsaWtlIHRvIHNlZSBhbGwgdGhlIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gdGhlIGJyYW5jaAoraGVhZCBuYW1lZCBgbWFzdGVyYCBidXQgbm90IGZyb20gYW55IG90aGVyIGhlYWQgaW4geW91ciByZXBvc2l0b3J5LgorCitXZSBjYW4gbGlzdCBhbGwgdGhlIGhlYWRzIGluIHRoaXMgcmVwb3NpdG9yeSB3aXRoCitsaW5rZ2l0OmdpdC1zaG93LXJlZlsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1yZWYgLS1oZWFkcworYmY2MjE5NmI1ZTM2M2Q3MzM1M2E5ZGNmMDk0YzU5NTk1ZjMxNTNiNyByZWZzL2hlYWRzL2NvcmUtdHV0b3JpYWwKK2RiNzY4ZDU1MDRjMWJiNDZmNjNlZTlkNmUxNzcyYmQwNDdlMDViZjkgcmVmcy9oZWFkcy9tYWludAorYTA3MTU3YWM2MjRiMjUyNGEwNTlhMzQxNGU5OWY2ZjQ0YmViYzFlNyByZWZzL2hlYWRzL21hc3RlcgorMjRkYmMxODBlYTE0ZGMxYWViZTA5ZjE0YzhlY2YzMjAxMDY5MDYyNyByZWZzL2hlYWRzL3R1dG9yaWFsLTIKKzFlODc0ODZhZTA2NjI2YzJmMzFlYWE2M2QyNmZjMGZkNjQ2YzhhZjIgcmVmcy9oZWFkcy90dXRvcmlhbC1maXhlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZSBjYW4gZ2V0IGp1c3QgdGhlIGJyYW5jaC1oZWFkIG5hbWVzLCBhbmQgcmVtb3ZlIGBtYXN0ZXJgLCB3aXRoCit0aGUgaGVscCBvZiB0aGUgc3RhbmRhcmQgdXRpbGl0aWVzIGN1dCBhbmQgZ3JlcDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1yZWYgLS1oZWFkcyB8IGN1dCAtZCcgJyAtZjIgfCBncmVwIC12ICdecmVmcy9oZWFkcy9tYXN0ZXInCityZWZzL2hlYWRzL2NvcmUtdHV0b3JpYWwKK3JlZnMvaGVhZHMvbWFpbnQKK3JlZnMvaGVhZHMvdHV0b3JpYWwtMgorcmVmcy9oZWFkcy90dXRvcmlhbC1maXhlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbmQgdGhlbiB3ZSBjYW4gYXNrIHRvIHNlZSBhbGwgdGhlIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gbWFzdGVyCitidXQgbm90IGZyb20gdGhlc2Ugb3RoZXIgaGVhZHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0ayBtYXN0ZXIgLS1ub3QgJCggZ2l0IHNob3ctcmVmIC0taGVhZHMgfCBjdXQgLWQnICcgLWYyIHwKKwkJCQlncmVwIC12ICdecmVmcy9oZWFkcy9tYXN0ZXInICkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT2J2aW91c2x5LCBlbmRsZXNzIHZhcmlhdGlvbnMgYXJlIHBvc3NpYmxlOyBmb3IgZXhhbXBsZSwgdG8gc2VlIGFsbAorY29tbWl0cyByZWFjaGFibGUgZnJvbSBzb21lIGhlYWQgYnV0IG5vdCBmcm9tIGFueSB0YWcgaW4gdGhlIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0ayAkKCBnaXQgc2hvdy1yZWYgLS1oZWFkcyApIC0tbm90ICAkKCBnaXQgc2hvdy1yZWYgLS10YWdzICkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKFNlZSBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XSBmb3IgZXhwbGFuYXRpb25zIG9mIGNvbW1pdC1zZWxlY3RpbmcKK3N5bnRheCBzdWNoIGFzIGAtLW5vdGAuKQorCitbW21ha2luZy1hLXJlbGVhc2VdXQorPT09PSBDcmVhdGluZyBhIGNoYW5nZWxvZyBhbmQgdGFyYmFsbCBmb3IgYSBzb2Z0d2FyZSByZWxlYXNlCisKK1RoZSBsaW5rZ2l0OmdpdC1hcmNoaXZlWzFdIGNvbW1hbmQgY2FuIGNyZWF0ZSBhIHRhciBvciB6aXAgYXJjaGl2ZSBmcm9tCithbnkgdmVyc2lvbiBvZiBhIHByb2plY3Q7IGZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBhcmNoaXZlIC1vIGxhdGVzdC50YXIuZ3ogLS1wcmVmaXg9cHJvamVjdC8gSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHVzZSBIRUFEIHRvIHByb2R1Y2UgYSBnemlwcGVkIHRhciBhcmNoaXZlIGluIHdoaWNoIGVhY2ggZmlsZW5hbWUKK2lzIHByZWNlZGVkIGJ5IGBwcm9qZWN0L2AuICBUaGUgb3V0cHV0IGZpbGUgZm9ybWF0IGlzIGluZmVycmVkIGZyb20KK3RoZSBvdXRwdXQgZmlsZSBleHRlbnNpb24gaWYgcG9zc2libGUsIHNlZSBsaW5rZ2l0OmdpdC1hcmNoaXZlWzFdIGZvcgorZGV0YWlscy4KKworVmVyc2lvbnMgb2YgR2l0IG9sZGVyIHRoYW4gMS43LjcgZG9uJ3Qga25vdyBhYm91dCB0aGUgYHRhci5nemAgZm9ybWF0LAoreW91J2xsIG5lZWQgdG8gdXNlIGd6aXAgZXhwbGljaXRseToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1wcmVmaXg9cHJvamVjdC8gSEVBRCB8IGd6aXAgPmxhdGVzdC50YXIuZ3oKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91J3JlIHJlbGVhc2luZyBhIG5ldyB2ZXJzaW9uIG9mIGEgc29mdHdhcmUgcHJvamVjdCwgeW91IG1heSB3YW50Cit0byBzaW11bHRhbmVvdXNseSBtYWtlIGEgY2hhbmdlbG9nIHRvIGluY2x1ZGUgaW4gdGhlIHJlbGVhc2UKK2Fubm91bmNlbWVudC4KKworTGludXMgVG9ydmFsZHMsIGZvciBleGFtcGxlLCBtYWtlcyBuZXcga2VybmVsIHJlbGVhc2VzIGJ5IHRhZ2dpbmcgdGhlbSwKK3RoZW4gcnVubmluZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCByZWxlYXNlLXNjcmlwdCAyLjYuMTIgMi42LjEzLXJjNiAyLjYuMTMtcmM3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3doZXJlIHJlbGVhc2Utc2NyaXB0IGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgbG9va3MgbGlrZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyEvYmluL3NoCitzdGFibGU9IiQxIgorbGFzdD0iJDIiCituZXc9IiQzIgorZWNobyAiIyBnaXQgdGFnIHYkbmV3IgorZWNobyAiZ2l0IGFyY2hpdmUgLS1wcmVmaXg9bGludXgtJG5ldy8gdiRuZXcgfCBnemlwIC05ID4gLi4vbGludXgtJG5ldy50YXIuZ3oiCitlY2hvICJnaXQgZGlmZiB2JHN0YWJsZSB2JG5ldyB8IGd6aXAgLTkgPiAuLi9wYXRjaC0kbmV3Lmd6IgorZWNobyAiZ2l0IGxvZyAtLW5vLW1lcmdlcyB2JG5ldyBediRsYXN0ID4gLi4vQ2hhbmdlTG9nLSRuZXciCitlY2hvICJnaXQgc2hvcnRsb2cgLS1uby1tZXJnZXMgdiRuZXcgXnYkbGFzdCA+IC4uL1Nob3J0TG9nIgorZWNobyAiZ2l0IGRpZmYgLS1zdGF0IC0tc3VtbWFyeSAtTSB2JGxhc3QgdiRuZXcgPiAuLi9kaWZmc3RhdC0kbmV3IgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhlbiBoZSBqdXN0IGN1dC1hbmQtcGFzdGVzIHRoZSBvdXRwdXQgY29tbWFuZHMgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQKK3RoZXkgbG9vayBPSy4KKworW1tGaW5kaW5nLWNvbW1pdHMtV2l0aC1naXZlbi1Db250ZW50XV0KKz09PT0gRmluZGluZyBjb21taXRzIHJlZmVyZW5jaW5nIGEgZmlsZSB3aXRoIGdpdmVuIGNvbnRlbnQKKworU29tZWJvZHkgaGFuZHMgeW91IGEgY29weSBvZiBhIGZpbGUsIGFuZCBhc2tzIHdoaWNoIGNvbW1pdHMgbW9kaWZpZWQgYQorZmlsZSBzdWNoIHRoYXQgaXQgY29udGFpbmVkIHRoZSBnaXZlbiBjb250ZW50IGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlCitjb21taXQuICBZb3UgY2FuIGZpbmQgb3V0IHdpdGggdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCAgZ2l0IGxvZyAtLXJhdyAtLWFiYnJldj00MCAtLXByZXR0eT1vbmVsaW5lIHwKKwlncmVwIC1CIDEgYGdpdCBoYXNoLW9iamVjdCBmaWxlbmFtZWAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlndXJpbmcgb3V0IHdoeSB0aGlzIHdvcmtzIGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgdG8gdGhlIChhZHZhbmNlZCkKK3N0dWRlbnQuICBUaGUgbGlua2dpdDpnaXQtbG9nWzFdLCBsaW5rZ2l0OmdpdC1kaWZmLXRyZWVbMV0sIGFuZAorbGlua2dpdDpnaXQtaGFzaC1vYmplY3RbMV0gbWFuIHBhZ2VzIG1heSBwcm92ZSBoZWxwZnVsLgorCitbW0RldmVsb3BpbmctV2l0aC1naXRdXQorPT0gRGV2ZWxvcGluZyB3aXRoIEdpdAorCitbW3RlbGxpbmctZ2l0LXlvdXItbmFtZV1dCis9PT0gVGVsbGluZyBHaXQgeW91ciBuYW1lCisKK0JlZm9yZSBjcmVhdGluZyBhbnkgY29tbWl0cywgeW91IHNob3VsZCBpbnRyb2R1Y2UgeW91cnNlbGYgdG8gR2l0LgorVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHNvIGlzIHRvIHVzZSBsaW5rZ2l0OmdpdC1jb25maWdbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAnWW91ciBOYW1lIENvbWVzIEhlcmUnCiskIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCAneW91QHlvdXJkb21haW4uZXhhbXBsZS5jb20nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hpY2ggd2lsbCBhZGQgdGhlIGZvbGxvd2luZyB0byBhIGZpbGUgbmFtZWQgYC5naXRjb25maWdgIGluIHlvdXIKK2hvbWUgZGlyZWN0b3J5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1t1c2VyXQorCW5hbWUgPSBZb3VyIE5hbWUgQ29tZXMgSGVyZQorCWVtYWlsID0geW91QHlvdXJkb21haW4uZXhhbXBsZS5jb20KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgdGhlICJDT05GSUdVUkFUSU9OIEZJTEUiIHNlY3Rpb24gb2YgbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvcgorZGV0YWlscyBvbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiAgVGhlIGZpbGUgaXMgcGxhaW4gdGV4dCwgc28geW91IGNhbgorYWxzbyBlZGl0IGl0IHdpdGggeW91ciBmYXZvcml0ZSBlZGl0b3IuCisKKworW1tjcmVhdGluZy1hLW5ldy1yZXBvc2l0b3J5XV0KKz09PSBDcmVhdGluZyBhIG5ldyByZXBvc2l0b3J5CisKK0NyZWF0aW5nIGEgbmV3IHJlcG9zaXRvcnkgZnJvbSBzY3JhdGNoIGlzIHZlcnkgZWFzeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBta2RpciBwcm9qZWN0CiskIGNkIHByb2plY3QKKyQgZ2l0IGluaXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGhhdmUgc29tZSBpbml0aWFsIGNvbnRlbnQgKHNheSwgYSB0YXJiYWxsKToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCB0YXIgeHp2ZiBwcm9qZWN0LnRhci5negorJCBjZCBwcm9qZWN0CiskIGdpdCBpbml0CiskIGdpdCBhZGQgLiAjIGluY2x1ZGUgZXZlcnl0aGluZyBiZWxvdyAuLyBpbiB0aGUgZmlyc3QgY29tbWl0OgorJCBnaXQgY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tbaG93LXRvLW1ha2UtYS1jb21taXRdXQorPT09IEhvdyB0byBtYWtlIGEgY29tbWl0CisKK0NyZWF0aW5nIGEgbmV3IGNvbW1pdCB0YWtlcyB0aHJlZSBzdGVwczoKKworCTEuIE1ha2luZyBzb21lIGNoYW5nZXMgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHVzaW5nIHlvdXIKKwkgICBmYXZvcml0ZSBlZGl0b3IuCisJMi4gVGVsbGluZyBHaXQgYWJvdXQgeW91ciBjaGFuZ2VzLgorCTMuIENyZWF0aW5nIHRoZSBjb21taXQgdXNpbmcgdGhlIGNvbnRlbnQgeW91IHRvbGQgR2l0IGFib3V0CisJICAgaW4gc3RlcCAyLgorCitJbiBwcmFjdGljZSwgeW91IGNhbiBpbnRlcmxlYXZlIGFuZCByZXBlYXQgc3RlcHMgMSBhbmQgMiBhcyBtYW55Cit0aW1lcyBhcyB5b3Ugd2FudDogaW4gb3JkZXIgdG8ga2VlcCB0cmFjayBvZiB3aGF0IHlvdSB3YW50IGNvbW1pdHRlZAorYXQgc3RlcCAzLCBHaXQgbWFpbnRhaW5zIGEgc25hcHNob3Qgb2YgdGhlIHRyZWUncyBjb250ZW50cyBpbiBhCitzcGVjaWFsIHN0YWdpbmcgYXJlYSBjYWxsZWQgInRoZSBpbmRleC4iCisKK0F0IHRoZSBiZWdpbm5pbmcsIHRoZSBjb250ZW50IG9mIHRoZSBpbmRleCB3aWxsIGJlIGlkZW50aWNhbCB0bwordGhhdCBvZiB0aGUgSEVBRC4gIFRoZSBjb21tYW5kIGBnaXQgZGlmZiAtLWNhY2hlZGAsIHdoaWNoIHNob3dzCit0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBIRUFEIGFuZCB0aGUgaW5kZXgsIHNob3VsZCB0aGVyZWZvcmUKK3Byb2R1Y2Ugbm8gb3V0cHV0IGF0IHRoYXQgcG9pbnQuCisKK01vZGlmeWluZyB0aGUgaW5kZXggaXMgZWFzeToKKworVG8gdXBkYXRlIHRoZSBpbmRleCB3aXRoIHRoZSBjb250ZW50cyBvZiBhIG5ldyBvciBtb2RpZmllZCBmaWxlLCB1c2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIHBhdGgvdG8vZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyByZW1vdmUgYSBmaWxlIGZyb20gdGhlIGluZGV4IGFuZCBmcm9tIHRoZSB3b3JraW5nIHRyZWUsIHVzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBybSBwYXRoL3RvL2ZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgZWFjaCBzdGVwIHlvdSBjYW4gdmVyaWZ5IHRoYXQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiAtLWNhY2hlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXMgc2hvd3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgSEVBRCBhbmQgdGhlIGluZGV4IGZpbGUtLXRoaXMKK2lzIHdoYXQgeW91J2QgY29tbWl0IGlmIHlvdSBjcmVhdGVkIHRoZSBjb21taXQgbm93LS1hbmQgdGhhdAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Nob3dzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IGZpbGUuCisKK05vdGUgdGhhdCBgZ2l0IGFkZGAgYWx3YXlzIGFkZHMganVzdCB0aGUgY3VycmVudCBjb250ZW50cyBvZiBhIGZpbGUKK3RvIHRoZSBpbmRleDsgZnVydGhlciBjaGFuZ2VzIHRvIHRoZSBzYW1lIGZpbGUgd2lsbCBiZSBpZ25vcmVkIHVubGVzcworeW91IHJ1biBgZ2l0IGFkZGAgb24gdGhlIGZpbGUgYWdhaW4uCisKK1doZW4geW91J3JlIHJlYWR5LCBqdXN0IHJ1bgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIEdpdCB3aWxsIHByb21wdCB5b3UgZm9yIGEgY29tbWl0IG1lc3NhZ2UgYW5kIHRoZW4gY3JlYXRlIHRoZSBuZXcKK2NvbW1pdC4gIENoZWNrIHRvIG1ha2Ugc3VyZSBpdCBsb29rcyBsaWtlIHdoYXQgeW91IGV4cGVjdGVkIHdpdGgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyBhIHNwZWNpYWwgc2hvcnRjdXQsCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCAtYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCBhbnkgZmlsZXMgdGhhdCB5b3UndmUgbW9kaWZpZWQgb3IgcmVtb3ZlZAorYW5kIGNyZWF0ZSBhIGNvbW1pdCwgYWxsIGluIG9uZSBzdGVwLgorCitBIG51bWJlciBvZiBjb21tYW5kcyBhcmUgdXNlZnVsIGZvciBrZWVwaW5nIHRyYWNrIG9mIHdoYXQgeW91J3JlCithYm91dCB0byBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgLS1jYWNoZWQgIyBkaWZmZXJlbmNlIGJldHdlZW4gSEVBRCBhbmQgdGhlIGluZGV4OyB3aGF0CisJCSAgICAjIHdvdWxkIGJlIGNvbW1pdHRlZCBpZiB5b3UgcmFuICJjb21taXQiIG5vdy4KKyQgZ2l0IGRpZmYJICAgICMgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbmRleCBmaWxlIGFuZCB5b3VyCisJCSAgICAjIHdvcmtpbmcgZGlyZWN0b3J5OyBjaGFuZ2VzIHRoYXQgd291bGQgbm90CisJCSAgICAjIGJlIGluY2x1ZGVkIGlmIHlvdSByYW4gImNvbW1pdCIgbm93LgorJCBnaXQgZGlmZiBIRUFECSAgICAjIGRpZmZlcmVuY2UgYmV0d2VlbiBIRUFEIGFuZCB3b3JraW5nIHRyZWU7IHdoYXQKKwkJICAgICMgd291bGQgYmUgY29tbWl0dGVkIGlmIHlvdSByYW4gImNvbW1pdCAtYSIgbm93LgorJCBnaXQgc3RhdHVzCSAgICAjIGEgYnJpZWYgcGVyLWZpbGUgc3VtbWFyeSBvZiB0aGUgYWJvdmUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYWxzbyB1c2UgbGlua2dpdDpnaXQtZ3VpWzFdIHRvIGNyZWF0ZSBjb21taXRzLCB2aWV3IGNoYW5nZXMgaW4KK3RoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZSBmaWxlcywgYW5kIGluZGl2aWR1YWxseSBzZWxlY3QgZGlmZiBodW5rcworZm9yIGluY2x1c2lvbiBpbiB0aGUgaW5kZXggKGJ5IHJpZ2h0LWNsaWNraW5nIG9uIHRoZSBkaWZmIGh1bmsgYW5kCitjaG9vc2luZyAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IikuCisKK1tbY3JlYXRpbmctZ29vZC1jb21taXQtbWVzc2FnZXNdXQorPT09IENyZWF0aW5nIGdvb2QgY29tbWl0IG1lc3NhZ2VzCisKK1Rob3VnaCBub3QgcmVxdWlyZWQsIGl0J3MgYSBnb29kIGlkZWEgdG8gYmVnaW4gdGhlIGNvbW1pdCBtZXNzYWdlCit3aXRoIGEgc2luZ2xlIHNob3J0IChsZXNzIHRoYW4gNTAgY2hhcmFjdGVyKSBsaW5lIHN1bW1hcml6aW5nIHRoZQorY2hhbmdlLCBmb2xsb3dlZCBieSBhIGJsYW5rIGxpbmUgYW5kIHRoZW4gYSBtb3JlIHRob3JvdWdoCitkZXNjcmlwdGlvbi4gIFRoZSB0ZXh0IHVwIHRvIHRoZSBmaXJzdCBibGFuayBsaW5lIGluIGEgY29tbWl0CittZXNzYWdlIGlzIHRyZWF0ZWQgYXMgdGhlIGNvbW1pdCB0aXRsZSwgYW5kIHRoYXQgdGl0bGUgaXMgdXNlZAordGhyb3VnaG91dCBHaXQuICBGb3IgZXhhbXBsZSwgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIHR1cm5zIGEKK2NvbW1pdCBpbnRvIGVtYWlsLCBhbmQgaXQgdXNlcyB0aGUgdGl0bGUgb24gdGhlIFN1YmplY3QgbGluZSBhbmQgdGhlCityZXN0IG9mIHRoZSBjb21taXQgaW4gdGhlIGJvZHkuCisKKworW1tpZ25vcmluZy1maWxlc11dCis9PT0gSWdub3JpbmcgZmlsZXMKKworQSBwcm9qZWN0IHdpbGwgb2Z0ZW4gZ2VuZXJhdGUgZmlsZXMgdGhhdCB5b3UgZG8gJ25vdCcgd2FudCB0byB0cmFjayB3aXRoIEdpdC4KK1RoaXMgdHlwaWNhbGx5IGluY2x1ZGVzIGZpbGVzIGdlbmVyYXRlZCBieSBhIGJ1aWxkIHByb2Nlc3Mgb3IgdGVtcG9yYXJ5CitiYWNrdXAgZmlsZXMgbWFkZSBieSB5b3VyIGVkaXRvci4gT2YgY291cnNlLCAnbm90JyB0cmFja2luZyBmaWxlcyB3aXRoIEdpdAoraXMganVzdCBhIG1hdHRlciBvZiAnbm90JyBjYWxsaW5nIGBnaXQgYWRkYCBvbiB0aGVtLiBCdXQgaXQgcXVpY2tseSBiZWNvbWVzCithbm5veWluZyB0byBoYXZlIHRoZXNlIHVudHJhY2tlZCBmaWxlcyBseWluZyBhcm91bmQ7IGUuZy4gdGhleSBtYWtlCitgZ2l0IGFkZCAuYCBwcmFjdGljYWxseSB1c2VsZXNzLCBhbmQgdGhleSBrZWVwIHNob3dpbmcgdXAgaW4gdGhlIG91dHB1dCBvZgorYGdpdCBzdGF0dXNgLgorCitZb3UgY2FuIHRlbGwgR2l0IHRvIGlnbm9yZSBjZXJ0YWluIGZpbGVzIGJ5IGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQKK2AuZ2l0aWdub3JlYCBpbiB0aGUgdG9wIGxldmVsIG9mIHlvdXIgd29ya2luZyBkaXJlY3RvcnksIHdpdGggY29udGVudHMKK3N1Y2ggYXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGluZXMgc3RhcnRpbmcgd2l0aCAnIycgYXJlIGNvbnNpZGVyZWQgY29tbWVudHMuCisjIElnbm9yZSBhbnkgZmlsZSBuYW1lZCBmb28udHh0LgorZm9vLnR4dAorIyBJZ25vcmUgKGdlbmVyYXRlZCkgaHRtbCBmaWxlcywKKyouaHRtbAorIyBleGNlcHQgZm9vLmh0bWwgd2hpY2ggaXMgbWFpbnRhaW5lZCBieSBoYW5kLgorIWZvby5odG1sCisjIElnbm9yZSBvYmplY3RzIGFuZCBhcmNoaXZlcy4KKyouW29hXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgbGlua2dpdDpnaXRpZ25vcmVbNV0gZm9yIGEgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgdGhlIHN5bnRheC4gIFlvdSBjYW4KK2Fsc28gcGxhY2UgLmdpdGlnbm9yZSBmaWxlcyBpbiBvdGhlciBkaXJlY3RvcmllcyBpbiB5b3VyIHdvcmtpbmcgdHJlZSwgYW5kIHRoZXkKK3dpbGwgYXBwbHkgdG8gdGhvc2UgZGlyZWN0b3JpZXMgYW5kIHRoZWlyIHN1YmRpcmVjdG9yaWVzLiAgVGhlIGAuZ2l0aWdub3JlYAorZmlsZXMgY2FuIGJlIGFkZGVkIHRvIHlvdXIgcmVwb3NpdG9yeSBsaWtlIGFueSBvdGhlciBmaWxlcyAoanVzdCBydW4gYGdpdCBhZGQKKy5naXRpZ25vcmVgIGFuZCBgZ2l0IGNvbW1pdGAsIGFzIHVzdWFsKSwgd2hpY2ggaXMgY29udmVuaWVudCB3aGVuIHRoZSBleGNsdWRlCitwYXR0ZXJucyAoc3VjaCBhcyBwYXR0ZXJucyBtYXRjaGluZyBidWlsZCBvdXRwdXQgZmlsZXMpIHdvdWxkIGFsc28gbWFrZSBzZW5zZQorZm9yIG90aGVyIHVzZXJzIHdobyBjbG9uZSB5b3VyIHJlcG9zaXRvcnkuCisKK0lmIHlvdSB3aXNoIHRoZSBleGNsdWRlIHBhdHRlcm5zIHRvIGFmZmVjdCBvbmx5IGNlcnRhaW4gcmVwb3NpdG9yaWVzCisoaW5zdGVhZCBvZiBldmVyeSByZXBvc2l0b3J5IGZvciBhIGdpdmVuIHByb2plY3QpLCB5b3UgbWF5IGluc3RlYWQgcHV0Cit0aGVtIGluIGEgZmlsZSBpbiB5b3VyIHJlcG9zaXRvcnkgbmFtZWQgYC5naXQvaW5mby9leGNsdWRlYCwgb3IgaW4gYW55CitmaWxlIHNwZWNpZmllZCBieSB0aGUgYGNvcmUuZXhjbHVkZXNGaWxlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorU29tZSBHaXQgY29tbWFuZHMgY2FuIGFsc28gdGFrZSBleGNsdWRlIHBhdHRlcm5zIGRpcmVjdGx5IG9uIHRoZQorY29tbWFuZCBsaW5lLiAgU2VlIGxpbmtnaXQ6Z2l0aWdub3JlWzVdIGZvciB0aGUgZGV0YWlscy4KKworW1tob3ctdG8tbWVyZ2VdXQorPT09IEhvdyB0byBtZXJnZQorCitZb3UgY2FuIHJlam9pbiB0d28gZGl2ZXJnaW5nIGJyYW5jaGVzIG9mIGRldmVsb3BtZW50IHVzaW5nCitsaW5rZ2l0OmdpdC1tZXJnZVsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UgYnJhbmNobmFtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittZXJnZXMgdGhlIGRldmVsb3BtZW50IGluIHRoZSBicmFuY2ggYGJyYW5jaG5hbWVgIGludG8gdGhlIGN1cnJlbnQKK2JyYW5jaC4KKworQSBtZXJnZSBpcyBtYWRlIGJ5IGNvbWJpbmluZyB0aGUgY2hhbmdlcyBtYWRlIGluIGBicmFuY2huYW1lYCBhbmQgdGhlCitjaGFuZ2VzIG1hZGUgdXAgdG8gdGhlIGxhdGVzdCBjb21taXQgaW4geW91ciBjdXJyZW50IGJyYW5jaCBzaW5jZQordGhlaXIgaGlzdG9yaWVzIGZvcmtlZC4gVGhlIHdvcmsgdHJlZSBpcyBvdmVyd3JpdHRlbiBieSB0aGUgcmVzdWx0IG9mCit0aGUgbWVyZ2Ugd2hlbiB0aGlzIGNvbWJpbmluZyBpcyBkb25lIGNsZWFubHksIG9yIG92ZXJ3cml0dGVuIGJ5IGEKK2hhbGYtbWVyZ2VkIHJlc3VsdHMgd2hlbiB0aGlzIGNvbWJpbmluZyByZXN1bHRzIGluIGNvbmZsaWN0cy4KK1RoZXJlZm9yZSwgaWYgeW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyB0b3VjaGluZyB0aGUgc2FtZSBmaWxlcyBhcwordGhlIG9uZXMgaW1wYWN0ZWQgYnkgdGhlIG1lcmdlLCBHaXQgd2lsbCByZWZ1c2UgdG8gcHJvY2VlZC4gTW9zdCBvZgordGhlIHRpbWUsIHlvdSB3aWxsIHdhbnQgdG8gY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZSwKK2FuZCBpZiB5b3UgZG9uJ3QsIHRoZW4gbGlua2dpdDpnaXQtc3Rhc2hbMV0gY2FuIHRha2UgdGhlc2UgY2hhbmdlcworYXdheSB3aGlsZSB5b3UncmUgZG9pbmcgdGhlIG1lcmdlLCBhbmQgcmVhcHBseSB0aGVtIGFmdGVyd2FyZHMuCisKK0lmIHRoZSBjaGFuZ2VzIGFyZSBpbmRlcGVuZGVudCBlbm91Z2gsIEdpdCB3aWxsIGF1dG9tYXRpY2FsbHkgY29tcGxldGUKK3RoZSBtZXJnZSBhbmQgY29tbWl0IHRoZSByZXN1bHQgKG9yIHJldXNlIGFuIGV4aXN0aW5nIGNvbW1pdCBpbiBjYXNlCitvZiA8PGZhc3QtZm9yd2FyZHMsZmFzdC1mb3J3YXJkPj4sIHNlZSBiZWxvdykuIE9uIHRoZSBvdGhlciBoYW5kLAoraWYgdGhlcmUgYXJlIGNvbmZsaWN0cy0tZm9yIGV4YW1wbGUsIGlmIHRoZSBzYW1lIGZpbGUgaXMKK21vZGlmaWVkIGluIHR3byBkaWZmZXJlbnQgd2F5cyBpbiB0aGUgcmVtb3RlIGJyYW5jaCBhbmQgdGhlIGxvY2FsCiticmFuY2gtLXRoZW4geW91IGFyZSB3YXJuZWQ7IHRoZSBvdXRwdXQgbWF5IGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UgbmV4dAorIDEwMCUgKDQvNCkgZG9uZQorQXV0by1tZXJnZWQgZmlsZS50eHQKK0NPTkZMSUNUIChjb250ZW50KTogTWVyZ2UgY29uZmxpY3QgaW4gZmlsZS50eHQKK0F1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbmZsaWN0IG1hcmtlcnMgYXJlIGxlZnQgaW4gdGhlIHByb2JsZW1hdGljIGZpbGVzLCBhbmQgYWZ0ZXIKK3lvdSByZXNvbHZlIHRoZSBjb25mbGljdHMgbWFudWFsbHksIHlvdSBjYW4gdXBkYXRlIHRoZSBpbmRleAord2l0aCB0aGUgY29udGVudHMgYW5kIHJ1biBHaXQgY29tbWl0LCBhcyB5b3Ugbm9ybWFsbHkgd291bGQgd2hlbgorY3JlYXRpbmcgYSBuZXcgZmlsZS4KKworSWYgeW91IGV4YW1pbmUgdGhlIHJlc3VsdGluZyBjb21taXQgdXNpbmcgZ2l0aywgeW91IHdpbGwgc2VlIHRoYXQgaXQKK2hhcyB0d28gcGFyZW50cywgb25lIHBvaW50aW5nIHRvIHRoZSB0b3Agb2YgdGhlIGN1cnJlbnQgYnJhbmNoLCBhbmQKK29uZSB0byB0aGUgdG9wIG9mIHRoZSBvdGhlciBicmFuY2guCisKK1tbcmVzb2x2aW5nLWEtbWVyZ2VdXQorPT09IFJlc29sdmluZyBhIG1lcmdlCisKK1doZW4gYSBtZXJnZSBpc24ndCByZXNvbHZlZCBhdXRvbWF0aWNhbGx5LCBHaXQgbGVhdmVzIHRoZSBpbmRleCBhbmQKK3RoZSB3b3JraW5nIHRyZWUgaW4gYSBzcGVjaWFsIHN0YXRlIHRoYXQgZ2l2ZXMgeW91IGFsbCB0aGUKK2luZm9ybWF0aW9uIHlvdSBuZWVkIHRvIGhlbHAgcmVzb2x2ZSB0aGUgbWVyZ2UuCisKK0ZpbGVzIHdpdGggY29uZmxpY3RzIGFyZSBtYXJrZWQgc3BlY2lhbGx5IGluIHRoZSBpbmRleCwgc28gdW50aWwgeW91CityZXNvbHZlIHRoZSBwcm9ibGVtIGFuZCB1cGRhdGUgdGhlIGluZGV4LCBsaW5rZ2l0OmdpdC1jb21taXRbMV0gd2lsbAorZmFpbDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0CitmaWxlLnR4dDogbmVlZHMgbWVyZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxzbywgbGlua2dpdDpnaXQtc3RhdHVzWzFdIHdpbGwgbGlzdCB0aG9zZSBmaWxlcyBhcyAidW5tZXJnZWQiLCBhbmQgdGhlCitmaWxlcyB3aXRoIGNvbmZsaWN0cyB3aWxsIGhhdmUgY29uZmxpY3QgbWFya2VycyBhZGRlZCwgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8PDw8PDw8IEhFQUQ6ZmlsZS50eHQKK0hlbGxvIHdvcmxkCis9PT09PT09CitHb29kYnllCis+Pj4+Pj4+IDc3OTc2ZGEzNWExMWRiNDU4MGI4MGFlMjdlOGQ2NWNhZjUyMDgwODY6ZmlsZS50eHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIHlvdSBuZWVkIHRvIGRvIGlzIGVkaXQgdGhlIGZpbGVzIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0cywgYW5kIHRoZW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIGZpbGUudHh0CiskIGdpdCBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IHRoZSBjb21taXQgbWVzc2FnZSB3aWxsIGFscmVhZHkgYmUgZmlsbGVkIGluIGZvciB5b3Ugd2l0aAorc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVyZ2UuICBOb3JtYWxseSB5b3UgY2FuIGp1c3QgdXNlIHRoaXMKK2RlZmF1bHQgbWVzc2FnZSB1bmNoYW5nZWQsIGJ1dCB5b3UgbWF5IGFkZCBhZGRpdGlvbmFsIGNvbW1lbnRhcnkgb2YKK3lvdXIgb3duIGlmIGRlc2lyZWQuCisKK1RoZSBhYm92ZSBpcyBhbGwgeW91IG5lZWQgdG8ga25vdyB0byByZXNvbHZlIGEgc2ltcGxlIG1lcmdlLiAgQnV0IEdpdAorYWxzbyBwcm92aWRlcyBtb3JlIGluZm9ybWF0aW9uIHRvIGhlbHAgcmVzb2x2ZSBjb25mbGljdHM6CisKK1tbY29uZmxpY3QtcmVzb2x1dGlvbl1dCis9PT09IEdldHRpbmcgY29uZmxpY3QtcmVzb2x1dGlvbiBoZWxwIGR1cmluZyBhIG1lcmdlCisKK0FsbCBvZiB0aGUgY2hhbmdlcyB0aGF0IEdpdCB3YXMgYWJsZSB0byBtZXJnZSBhdXRvbWF0aWNhbGx5IGFyZQorYWxyZWFkeSBhZGRlZCB0byB0aGUgaW5kZXggZmlsZSwgc28gbGlua2dpdDpnaXQtZGlmZlsxXSBzaG93cyBvbmx5Cit0aGUgY29uZmxpY3RzLiAgSXQgdXNlcyBhbiB1bnVzdWFsIHN5bnRheDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZgorZGlmZiAtLWNjIGZpbGUudHh0CitpbmRleCA4MDI5OTJjLDJiNjAyMDcuLjAwMDAwMDAKKy0tLSBhL2ZpbGUudHh0CisrKysgYi9maWxlLnR4dAorQEBAIC0xLDEgLTEsMSArMSw1IEBAQAorKys8PDw8PDw8IEhFQUQ6ZmlsZS50eHQKKyArSGVsbG8gd29ybGQKKysrPT09PT09PQorKyBHb29kYnllCisrKz4+Pj4+Pj4gNzc5NzZkYTM1YTExZGI0NTgwYjgwYWUyN2U4ZDY1Y2FmNTIwODA4NjpmaWxlLnR4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWNhbGwgdGhhdCB0aGUgY29tbWl0IHdoaWNoIHdpbGwgYmUgY29tbWl0dGVkIGFmdGVyIHdlIHJlc29sdmUgdGhpcworY29uZmxpY3Qgd2lsbCBoYXZlIHR3byBwYXJlbnRzIGluc3RlYWQgb2YgdGhlIHVzdWFsIG9uZTogb25lIHBhcmVudAord2lsbCBiZSBIRUFELCB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaDsgdGhlIG90aGVyIHdpbGwgYmUgdGhlCit0aXAgb2YgdGhlIG90aGVyIGJyYW5jaCwgd2hpY2ggaXMgc3RvcmVkIHRlbXBvcmFyaWx5IGluIE1FUkdFX0hFQUQuCisKK0R1cmluZyB0aGUgbWVyZ2UsIHRoZSBpbmRleCBob2xkcyB0aHJlZSB2ZXJzaW9ucyBvZiBlYWNoIGZpbGUuICBFYWNoIG9mCit0aGVzZSB0aHJlZSAiZmlsZSBzdGFnZXMiIHJlcHJlc2VudHMgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiB0aGUgZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyA6MTpmaWxlLnR4dAkjIHRoZSBmaWxlIGluIGEgY29tbW9uIGFuY2VzdG9yIG9mIGJvdGggYnJhbmNoZXMKKyQgZ2l0IHNob3cgOjI6ZmlsZS50eHQJIyB0aGUgdmVyc2lvbiBmcm9tIEhFQUQuCiskIGdpdCBzaG93IDozOmZpbGUudHh0CSMgdGhlIHZlcnNpb24gZnJvbSBNRVJHRV9IRUFELgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHlvdSBhc2sgbGlua2dpdDpnaXQtZGlmZlsxXSB0byBzaG93IHRoZSBjb25mbGljdHMsIGl0IHJ1bnMgYQordGhyZWUtd2F5IGRpZmYgYmV0d2VlbiB0aGUgY29uZmxpY3RlZCBtZXJnZSByZXN1bHRzIGluIHRoZSB3b3JrIHRyZWUgd2l0aAorc3RhZ2VzIDIgYW5kIDMgdG8gc2hvdyBvbmx5IGh1bmtzIHdob3NlIGNvbnRlbnRzIGNvbWUgZnJvbSBib3RoIHNpZGVzLAorbWl4ZWQgKGluIG90aGVyIHdvcmRzLCB3aGVuIGEgaHVuaydzIG1lcmdlIHJlc3VsdHMgY29tZSBvbmx5IGZyb20gc3RhZ2UgMiwKK3RoYXQgcGFydCBpcyBub3QgY29uZmxpY3RpbmcgYW5kIGlzIG5vdCBzaG93bi4gIFNhbWUgZm9yIHN0YWdlIDMpLgorCitUaGUgZGlmZiBhYm92ZSBzaG93cyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgd29ya2luZy10cmVlIHZlcnNpb24gb2YKK2ZpbGUudHh0IGFuZCB0aGUgc3RhZ2UgMiBhbmQgc3RhZ2UgMyB2ZXJzaW9ucy4gIFNvIGluc3RlYWQgb2YgcHJlY2VkaW5nCitlYWNoIGxpbmUgYnkgYSBzaW5nbGUgYCtgIG9yIGAtYCwgaXQgbm93IHVzZXMgdHdvIGNvbHVtbnM6IHRoZSBmaXJzdAorY29sdW1uIGlzIHVzZWQgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGZpcnN0IHBhcmVudCBhbmQgdGhlIHdvcmtpbmcKK2RpcmVjdG9yeSBjb3B5LCBhbmQgdGhlIHNlY29uZCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc2Vjb25kIHBhcmVudAorYW5kIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBjb3B5LiAgKFNlZSB0aGUgIkNPTUJJTkVEIERJRkYgRk9STUFUIiBzZWN0aW9uCitvZiBsaW5rZ2l0OmdpdC1kaWZmLWZpbGVzWzFdIGZvciBhIGRldGFpbHMgb2YgdGhlIGZvcm1hdC4pCisKK0FmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3QgaW4gdGhlIG9idmlvdXMgd2F5IChidXQgYmVmb3JlIHVwZGF0aW5nIHRoZQoraW5kZXgpLCB0aGUgZGlmZiB3aWxsIGxvb2sgbGlrZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZgorZGlmZiAtLWNjIGZpbGUudHh0CitpbmRleCA4MDI5OTJjLDJiNjAyMDcuLjAwMDAwMDAKKy0tLSBhL2ZpbGUudHh0CisrKysgYi9maWxlLnR4dAorQEBAIC0xLDEgLTEsMSArMSwxIEBAQAorLSBIZWxsbyB3b3JsZAorIC1Hb29kYnllCisrK0dvb2RieWUgd29ybGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzaG93cyB0aGF0IG91ciByZXNvbHZlZCB2ZXJzaW9uIGRlbGV0ZWQgIkhlbGxvIHdvcmxkIiBmcm9tIHRoZQorZmlyc3QgcGFyZW50LCBkZWxldGVkICJHb29kYnllIiBmcm9tIHRoZSBzZWNvbmQgcGFyZW50LCBhbmQgYWRkZWQKKyJHb29kYnllIHdvcmxkIiwgd2hpY2ggd2FzIHByZXZpb3VzbHkgYWJzZW50IGZyb20gYm90aC4KKworU29tZSBzcGVjaWFsIGRpZmYgb3B0aW9ucyBhbGxvdyBkaWZmaW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhZ2FpbnN0Cithbnkgb2YgdGhlc2Ugc3RhZ2VzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIC0xIGZpbGUudHh0CQkjIGRpZmYgYWdhaW5zdCBzdGFnZSAxCiskIGdpdCBkaWZmIC0tYmFzZSBmaWxlLnR4dAkjIHNhbWUgYXMgdGhlIGFib3ZlCiskIGdpdCBkaWZmIC0yIGZpbGUudHh0CQkjIGRpZmYgYWdhaW5zdCBzdGFnZSAyCiskIGdpdCBkaWZmIC0tb3VycyBmaWxlLnR4dAkjIHNhbWUgYXMgdGhlIGFib3ZlCiskIGdpdCBkaWZmIC0zIGZpbGUudHh0CQkjIGRpZmYgYWdhaW5zdCBzdGFnZSAzCiskIGdpdCBkaWZmIC0tdGhlaXJzIGZpbGUudHh0CSMgc2FtZSBhcyB0aGUgYWJvdmUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsaW5rZ2l0OmdpdC1sb2dbMV0gYW5kIGxpbmtnaXQ6Z2l0a1sxXSBjb21tYW5kcyBhbHNvIHByb3ZpZGUgc3BlY2lhbCBoZWxwCitmb3IgbWVyZ2VzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLS1tZXJnZQorJCBnaXRrIC0tbWVyZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2Ugd2lsbCBkaXNwbGF5IGFsbCBjb21taXRzIHdoaWNoIGV4aXN0IG9ubHkgb24gSEVBRCBvciBvbgorTUVSR0VfSEVBRCwgYW5kIHdoaWNoIHRvdWNoIGFuIHVubWVyZ2VkIGZpbGUuCisKK1lvdSBtYXkgYWxzbyB1c2UgbGlua2dpdDpnaXQtbWVyZ2V0b29sWzFdLCB3aGljaCBsZXRzIHlvdSBtZXJnZSB0aGUKK3VubWVyZ2VkIGZpbGVzIHVzaW5nIGV4dGVybmFsIHRvb2xzIHN1Y2ggYXMgRW1hY3Mgb3Iga2RpZmYzLgorCitFYWNoIHRpbWUgeW91IHJlc29sdmUgdGhlIGNvbmZsaWN0cyBpbiBhIGZpbGUgYW5kIHVwZGF0ZSB0aGUgaW5kZXg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGFkZCBmaWxlLnR4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0aGUgZGlmZmVyZW50IHN0YWdlcyBvZiB0aGF0IGZpbGUgd2lsbCBiZSAiY29sbGFwc2VkIiwgYWZ0ZXIgd2hpY2gKK2BnaXQgZGlmZmAgd2lsbCAoYnkgZGVmYXVsdCkgbm8gbG9uZ2VyIHNob3cgZGlmZnMgZm9yIHRoYXQgZmlsZS4KKworW1t1bmRvaW5nLWEtbWVyZ2VdXQorPT09IFVuZG9pbmcgYSBtZXJnZQorCitJZiB5b3UgZ2V0IHN0dWNrIGFuZCBkZWNpZGUgdG8ganVzdCBnaXZlIHVwIGFuZCB0aHJvdyB0aGUgd2hvbGUgbWVzcworYXdheSwgeW91IGNhbiBhbHdheXMgcmV0dXJuIHRvIHRoZSBwcmUtbWVyZ2Ugc3RhdGUgd2l0aAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSAtLWFib3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09yLCBpZiB5b3UndmUgYWxyZWFkeSBjb21taXR0ZWQgdGhlIG1lcmdlIHRoYXQgeW91IHdhbnQgdG8gdGhyb3cgYXdheSwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVzZXQgLS1oYXJkIE9SSUdfSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIb3dldmVyLCB0aGlzIGxhc3QgY29tbWFuZCBjYW4gYmUgZGFuZ2Vyb3VzIGluIHNvbWUgY2FzZXMtLW5ldmVyCit0aHJvdyBhd2F5IGEgY29tbWl0IHlvdSBoYXZlIGFscmVhZHkgY29tbWl0dGVkIGlmIHRoYXQgY29tbWl0IG1heQoraXRzZWxmIGhhdmUgYmVlbiBtZXJnZWQgaW50byBhbm90aGVyIGJyYW5jaCwgYXMgZG9pbmcgc28gbWF5IGNvbmZ1c2UKK2Z1cnRoZXIgbWVyZ2VzLgorCitbW2Zhc3QtZm9yd2FyZHNdXQorPT09IEZhc3QtZm9yd2FyZCBtZXJnZXMKKworVGhlcmUgaXMgb25lIHNwZWNpYWwgY2FzZSBub3QgbWVudGlvbmVkIGFib3ZlLCB3aGljaCBpcyB0cmVhdGVkCitkaWZmZXJlbnRseS4gIE5vcm1hbGx5LCBhIG1lcmdlIHJlc3VsdHMgaW4gYSBtZXJnZSBjb21taXQsIHdpdGggdHdvCitwYXJlbnRzLCBvbmUgcG9pbnRpbmcgYXQgZWFjaCBvZiB0aGUgdHdvIGxpbmVzIG9mIGRldmVsb3BtZW50IHRoYXQKK3dlcmUgbWVyZ2VkLgorCitIb3dldmVyLCBpZiB0aGUgY3VycmVudCBicmFuY2ggaXMgYW4gYW5jZXN0b3Igb2YgdGhlIG90aGVyLS1zbyBldmVyeSBjb21taXQKK3ByZXNlbnQgaW4gdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZSBvdGhlciBicmFuY2gtLXRoZW4gR2l0CitqdXN0IHBlcmZvcm1zIGEgImZhc3QtZm9yd2FyZCI7IHRoZSBoZWFkIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBtb3ZlZCBmb3J3YXJkCit0byBwb2ludCBhdCB0aGUgaGVhZCBvZiB0aGUgbWVyZ2VkLWluIGJyYW5jaCwgd2l0aG91dCBhbnkgbmV3IGNvbW1pdHMgYmVpbmcKK2NyZWF0ZWQuCisKK1tbZml4aW5nLW1pc3Rha2VzXV0KKz09PSBGaXhpbmcgbWlzdGFrZXMKKworSWYgeW91J3ZlIG1lc3NlZCB1cCB0aGUgd29ya2luZyB0cmVlLCBidXQgaGF2ZW4ndCB5ZXQgY29tbWl0dGVkIHlvdXIKK21pc3Rha2UsIHlvdSBjYW4gcmV0dXJuIHRoZSBlbnRpcmUgd29ya2luZyB0cmVlIHRvIHRoZSBsYXN0IGNvbW1pdHRlZAorc3RhdGUgd2l0aAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZXN0b3JlIC0tc3RhZ2VkIC0td29ya3RyZWUgOi8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IG1ha2UgYSBjb21taXQgdGhhdCB5b3UgbGF0ZXIgd2lzaCB5b3UgaGFkbid0LCB0aGVyZSBhcmUgdHdvCitmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCB3YXlzIHRvIGZpeCB0aGUgcHJvYmxlbToKKworCTEuIFlvdSBjYW4gY3JlYXRlIGEgbmV3IGNvbW1pdCB0aGF0IHVuZG9lcyB3aGF0ZXZlciB3YXMgZG9uZQorCWJ5IHRoZSBvbGQgY29tbWl0LiAgVGhpcyBpcyB0aGUgY29ycmVjdCB0aGluZyBpZiB5b3VyCisJbWlzdGFrZSBoYXMgYWxyZWFkeSBiZWVuIG1hZGUgcHVibGljLgorCisJMi4gWW91IGNhbiBnbyBiYWNrIGFuZCBtb2RpZnkgdGhlIG9sZCBjb21taXQuICBZb3Ugc2hvdWxkCisJbmV2ZXIgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhbHJlYWR5IG1hZGUgdGhlIGhpc3RvcnkgcHVibGljOworCUdpdCBkb2VzIG5vdCBub3JtYWxseSBleHBlY3QgdGhlICJoaXN0b3J5IiBvZiBhIHByb2plY3QgdG8KKwljaGFuZ2UsIGFuZCBjYW5ub3QgY29ycmVjdGx5IHBlcmZvcm0gcmVwZWF0ZWQgbWVyZ2VzIGZyb20KKwlhIGJyYW5jaCB0aGF0IGhhcyBoYWQgaXRzIGhpc3RvcnkgY2hhbmdlZC4KKworW1tyZXZlcnRpbmctYS1jb21taXRdXQorPT09PSBGaXhpbmcgYSBtaXN0YWtlIHdpdGggYSBuZXcgY29tbWl0CisKK0NyZWF0aW5nIGEgbmV3IGNvbW1pdCB0aGF0IHJldmVydHMgYW4gZWFybGllciBjaGFuZ2UgaXMgdmVyeSBlYXN5OworanVzdCBwYXNzIHRoZSBsaW5rZ2l0OmdpdC1yZXZlcnRbMV0gY29tbWFuZCBhIHJlZmVyZW5jZSB0byB0aGUgYmFkCitjb21taXQ7IGZvciBleGFtcGxlLCB0byByZXZlcnQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmV2ZXJ0IEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjb21taXQgd2hpY2ggdW5kb2VzIHRoZSBjaGFuZ2UgaW4gSEVBRC4gIFlvdQord2lsbCBiZSBnaXZlbiBhIGNoYW5jZSB0byBlZGl0IHRoZSBjb21taXQgbWVzc2FnZSBmb3IgdGhlIG5ldyBjb21taXQuCisKK1lvdSBjYW4gYWxzbyByZXZlcnQgYW4gZWFybGllciBjaGFuZ2UsIGZvciBleGFtcGxlLCB0aGUgbmV4dC10by1sYXN0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZXZlcnQgSEVBRF4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhpcyBjYXNlIEdpdCB3aWxsIGF0dGVtcHQgdG8gdW5kbyB0aGUgb2xkIGNoYW5nZSB3aGlsZSBsZWF2aW5nCitpbnRhY3QgYW55IGNoYW5nZXMgbWFkZSBzaW5jZSB0aGVuLiAgSWYgbW9yZSByZWNlbnQgY2hhbmdlcyBvdmVybGFwCit3aXRoIHRoZSBjaGFuZ2VzIHRvIGJlIHJldmVydGVkLCB0aGVuIHlvdSB3aWxsIGJlIGFza2VkIHRvIGZpeAorY29uZmxpY3RzIG1hbnVhbGx5LCBqdXN0IGFzIGluIHRoZSBjYXNlIG9mIDw8cmVzb2x2aW5nLWEtbWVyZ2UsCityZXNvbHZpbmcgYSBtZXJnZT4+LgorCitbW2ZpeGluZy1hLW1pc3Rha2UtYnktcmV3cml0aW5nLWhpc3RvcnldXQorPT09PSBGaXhpbmcgYSBtaXN0YWtlIGJ5IHJld3JpdGluZyBoaXN0b3J5CisKK0lmIHRoZSBwcm9ibGVtYXRpYyBjb21taXQgaXMgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYW5kIHlvdSBoYXZlIG5vdAoreWV0IG1hZGUgdGhhdCBjb21taXQgcHVibGljLCB0aGVuIHlvdSBtYXkganVzdAorPDx1bmRvaW5nLWEtbWVyZ2UsZGVzdHJveSBpdCB1c2luZyBgZ2l0IHJlc2V0YD4+LgorCitBbHRlcm5hdGl2ZWx5LCB5b3UKK2NhbiBlZGl0IHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgdXBkYXRlIHRoZSBpbmRleCB0byBmaXggeW91cgorbWlzdGFrZSwganVzdCBhcyBpZiB5b3Ugd2VyZSBnb2luZyB0byA8PGhvdy10by1tYWtlLWEtY29tbWl0LGNyZWF0ZSBhCituZXcgY29tbWl0Pj4sIHRoZW4gcnVuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCAtLWFtZW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgcmVwbGFjZSB0aGUgb2xkIGNvbW1pdCBieSBhIG5ldyBjb21taXQgaW5jb3Jwb3JhdGluZyB5b3VyCitjaGFuZ2VzLCBnaXZpbmcgeW91IGEgY2hhbmNlIHRvIGVkaXQgdGhlIG9sZCBjb21taXQgbWVzc2FnZSBmaXJzdC4KKworQWdhaW4sIHlvdSBzaG91bGQgbmV2ZXIgZG8gdGhpcyB0byBhIGNvbW1pdCB0aGF0IG1heSBhbHJlYWR5IGhhdmUKK2JlZW4gbWVyZ2VkIGludG8gYW5vdGhlciBicmFuY2g7IHVzZSBsaW5rZ2l0OmdpdC1yZXZlcnRbMV0gaW5zdGVhZCBpbgordGhhdCBjYXNlLgorCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHJlcGxhY2UgY29tbWl0cyBmdXJ0aGVyIGJhY2sgaW4gdGhlIGhpc3RvcnksIGJ1dAordGhpcyBpcyBhbiBhZHZhbmNlZCB0b3BpYyB0byBiZSBsZWZ0IGZvcgorPDxjbGVhbmluZy11cC1oaXN0b3J5LGFub3RoZXIgY2hhcHRlcj4+LgorCitbW2NoZWNrb3V0LW9mLXBhdGhdXQorPT09PSBDaGVja2luZyBvdXQgYW4gb2xkIHZlcnNpb24gb2YgYSBmaWxlCisKK0luIHRoZSBwcm9jZXNzIG9mIHVuZG9pbmcgYSBwcmV2aW91cyBiYWQgY2hhbmdlLCB5b3UgbWF5IGZpbmQgaXQKK3VzZWZ1bCB0byBjaGVjayBvdXQgYW4gb2xkZXIgdmVyc2lvbiBvZiBhIHBhcnRpY3VsYXIgZmlsZSB1c2luZworbGlua2dpdDpnaXQtcmVzdG9yZVsxXS4gVGhlIGNvbW1hbmQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEXiBwYXRoL3RvL2ZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcmVwbGFjZXMgcGF0aC90by9maWxlIGJ5IHRoZSBjb250ZW50cyBpdCBoYWQgaW4gdGhlIGNvbW1pdCBIRUFEXiwgYW5kCithbHNvIHVwZGF0ZXMgdGhlIGluZGV4IHRvIG1hdGNoLiAgSXQgZG9lcyBub3QgY2hhbmdlIGJyYW5jaGVzLgorCitJZiB5b3UganVzdCB3YW50IHRvIGxvb2sgYXQgYW4gb2xkIHZlcnNpb24gb2YgdGhlIGZpbGUsIHdpdGhvdXQKK21vZGlmeWluZyB0aGUgd29ya2luZyBkaXJlY3RvcnksIHlvdSBjYW4gZG8gdGhhdCB3aXRoCitsaW5rZ2l0OmdpdC1zaG93WzFdOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IEhFQUReOnBhdGgvdG8vZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIGRpc3BsYXkgdGhlIGdpdmVuIHZlcnNpb24gb2YgdGhlIGZpbGUuCisKK1tbaW50ZXJydXB0ZWQtd29ya11dCis9PT09IFRlbXBvcmFyaWx5IHNldHRpbmcgYXNpZGUgd29yayBpbiBwcm9ncmVzcworCitXaGlsZSB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2Ygd29ya2luZyBvbiBzb21ldGhpbmcgY29tcGxpY2F0ZWQsIHlvdQorZmluZCBhbiB1bnJlbGF0ZWQgYnV0IG9idmlvdXMgYW5kIHRyaXZpYWwgYnVnLiAgWW91IHdvdWxkIGxpa2UgdG8gZml4IGl0CitiZWZvcmUgY29udGludWluZy4gIFlvdSBjYW4gdXNlIGxpbmtnaXQ6Z2l0LXN0YXNoWzFdIHRvIHNhdmUgdGhlIGN1cnJlbnQKK3N0YXRlIG9mIHlvdXIgd29yaywgYW5kIGFmdGVyIGZpeGluZyB0aGUgYnVnIChvciwgb3B0aW9uYWxseSBhZnRlciBkb2luZworc28gb24gYSBkaWZmZXJlbnQgYnJhbmNoIGFuZCB0aGVuIGNvbWluZyBiYWNrKSwgdW5zdGFzaCB0aGUKK3dvcmstaW4tcHJvZ3Jlc3MgY2hhbmdlcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzdGFzaCBwdXNoIC1tICJ3b3JrIGluIHByb2dyZXNzIGZvciBmb28gZmVhdHVyZSIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGNvbW1hbmQgd2lsbCBzYXZlIHlvdXIgY2hhbmdlcyBhd2F5IHRvIHRoZSBgc3Rhc2hgLCBhbmQKK3Jlc2V0IHlvdXIgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXggdG8gbWF0Y2ggdGhlIHRpcCBvZiB5b3VyCitjdXJyZW50IGJyYW5jaC4gIFRoZW4geW91IGNhbiBtYWtlIHlvdXIgZml4IGFzIHVzdWFsLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy4uLiBlZGl0IGFuZCB0ZXN0IC4uLgorJCBnaXQgY29tbWl0IC1hIC1tICJibG9ycGw6IHR5cG9maXgiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgdGhhdCwgeW91IGNhbiBnbyBiYWNrIHRvIHdoYXQgeW91IHdlcmUgd29ya2luZyBvbiB3aXRoCitgZ2l0IHN0YXNoIHBvcGA6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3Rhc2ggcG9wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitbW2Vuc3VyaW5nLWdvb2QtcGVyZm9ybWFuY2VdXQorPT09IEVuc3VyaW5nIGdvb2QgcGVyZm9ybWFuY2UKKworT24gbGFyZ2UgcmVwb3NpdG9yaWVzLCBHaXQgZGVwZW5kcyBvbiBjb21wcmVzc2lvbiB0byBrZWVwIHRoZSBoaXN0b3J5CitpbmZvcm1hdGlvbiBmcm9tIHRha2luZyB1cCB0b28gbXVjaCBzcGFjZSBvbiBkaXNrIG9yIGluIG1lbW9yeS4gIFNvbWUKK0dpdCBjb21tYW5kcyBtYXkgYXV0b21hdGljYWxseSBydW4gbGlua2dpdDpnaXQtZ2NbMV0sIHNvIHlvdSBkb24ndAoraGF2ZSB0byB3b3JyeSBhYm91dCBydW5uaW5nIGl0IG1hbnVhbGx5LiAgSG93ZXZlciwgY29tcHJlc3NpbmcgYSBsYXJnZQorcmVwb3NpdG9yeSBtYXkgdGFrZSBhIHdoaWxlLCBzbyB5b3UgbWF5IHdhbnQgdG8gY2FsbCBgZ2NgIGV4cGxpY2l0bHkKK3RvIGF2b2lkIGF1dG9tYXRpYyBjb21wcmVzc2lvbiBraWNraW5nIGluIHdoZW4gaXQgaXMgbm90IGNvbnZlbmllbnQuCisKKworW1tlbnN1cmluZy1yZWxpYWJpbGl0eV1dCis9PT0gRW5zdXJpbmcgcmVsaWFiaWxpdHkKKworW1tjaGVja2luZy1mb3ItY29ycnVwdGlvbl1dCis9PT09IENoZWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBjb3JydXB0aW9uCisKK1RoZSBsaW5rZ2l0OmdpdC1mc2NrWzFdIGNvbW1hbmQgcnVucyBhIG51bWJlciBvZiBzZWxmLWNvbnNpc3RlbmN5IGNoZWNrcworb24gdGhlIHJlcG9zaXRvcnksIGFuZCByZXBvcnRzIG9uIGFueSBwcm9ibGVtcy4gIFRoaXMgbWF5IHRha2Ugc29tZQordGltZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZnNjaworZGFuZ2xpbmcgY29tbWl0IDcyODEyNTFkZGQyYTYxZTM4NjU3YzgyNzczOWM1NzAxNTY3MWE2YjMKK2RhbmdsaW5nIGNvbW1pdCAyNzA2YTA1OWYyNThjNmIyNDVmMjk4ZGM0ZmYyY2NkMzBlYzIxYTYzCitkYW5nbGluZyBjb21taXQgMTM0NzJiN2M0YjgwODUxYTFiYzU1MTc3OTE3MWRjYjAzNjU1ZTliNQorZGFuZ2xpbmcgYmxvYiAyMTg3NjFmOWQ5MDcxMmQzN2E5YzVlMzZmNDA2ZjkyMjAyZGIwN2ViCitkYW5nbGluZyBjb21taXQgYmYwOTM1MzVhMzRhNGQzNTczMWFhMmJkOTBmZTZiMTc2MzAyZjE0ZgorZGFuZ2xpbmcgY29tbWl0IDhlNGJlYzdmMmRkYWEyNjhiZWY5OTk4NTNjMjU3NTU0NTIxMDBmOGUKK2RhbmdsaW5nIHRyZWUgZDUwYmI4NjE4NmJmMjdiNjgxZDI1YWY4OWQzYjViNjgzODJlNDA4NQorZGFuZ2xpbmcgdHJlZSBiMjRjMjQ3M2YxZmQzZDkxMzUyYTYyNDc5NWJlMDI2ZDY0Yzg4NDFmCisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IHdpbGwgc2VlIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgb24gZGFuZ2xpbmcgb2JqZWN0cy4gVGhleSBhcmUgb2JqZWN0cwordGhhdCBzdGlsbCBleGlzdCBpbiB0aGUgcmVwb3NpdG9yeSBidXQgYXJlIG5vIGxvbmdlciByZWZlcmVuY2VkIGJ5IGFueSBvZgoreW91ciBicmFuY2hlcywgYW5kIGNhbiAoYW5kIHdpbGwpIGJlIHJlbW92ZWQgYWZ0ZXIgYSB3aGlsZSB3aXRoIGBnY2AuCitZb3UgY2FuIHJ1biBgZ2l0IGZzY2sgLS1uby1kYW5nbGluZ2AgdG8gc3VwcHJlc3MgdGhlc2UgbWVzc2FnZXMsIGFuZCBzdGlsbAordmlldyByZWFsIGVycm9ycy4KKworW1tyZWNvdmVyaW5nLWxvc3QtY2hhbmdlc11dCis9PT09IFJlY292ZXJpbmcgbG9zdCBjaGFuZ2VzCisKK1tbcmVmbG9nc11dCis9PT09PSBSZWZsb2dzCisKK1NheSB5b3UgbW9kaWZ5IGEgYnJhbmNoIHdpdGggPDxmaXhpbmctbWlzdGFrZXMsYGdpdCByZXNldCAtLWhhcmRgPj4sCithbmQgdGhlbiByZWFsaXplIHRoYXQgdGhlIGJyYW5jaCB3YXMgdGhlIG9ubHkgcmVmZXJlbmNlIHlvdSBoYWQgdG8KK3RoYXQgcG9pbnQgaW4gaGlzdG9yeS4KKworRm9ydHVuYXRlbHksIEdpdCBhbHNvIGtlZXBzIGEgbG9nLCBjYWxsZWQgYSAicmVmbG9nIiwgb2YgYWxsIHRoZQorcHJldmlvdXMgdmFsdWVzIG9mIGVhY2ggYnJhbmNoLiAgU28gaW4gdGhpcyBjYXNlIHlvdSBjYW4gc3RpbGwgZmluZCB0aGUKK29sZCBoaXN0b3J5IHVzaW5nLCBmb3IgZXhhbXBsZSwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIG1hc3RlckB7MX0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBsaXN0cyB0aGUgY29tbWl0cyByZWFjaGFibGUgZnJvbSB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUKK2BtYXN0ZXJgIGJyYW5jaCBoZWFkLiAgVGhpcyBzeW50YXggY2FuIGJlIHVzZWQgd2l0aCBhbnkgR2l0IGNvbW1hbmQKK3RoYXQgYWNjZXB0cyBhIGNvbW1pdCwgbm90IGp1c3Qgd2l0aCBgZ2l0IGxvZ2AuICBTb21lIG90aGVyIGV4YW1wbGVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IG1hc3RlckB7Mn0JCSMgU2VlIHdoZXJlIHRoZSBicmFuY2ggcG9pbnRlZCAyLAorJCBnaXQgc2hvdyBtYXN0ZXJAezN9CQkjIDMsIC4uLiBjaGFuZ2VzIGFnby4KKyQgZ2l0ayBtYXN0ZXJAe3llc3RlcmRheX0JIyBTZWUgd2hlcmUgaXQgcG9pbnRlZCB5ZXN0ZXJkYXksCiskIGdpdGsgbWFzdGVyQHsiMSB3ZWVrIGFnbyJ9CSMgLi4uIG9yIGxhc3Qgd2VlaworJCBnaXQgbG9nIC0td2Fsay1yZWZsb2dzIG1hc3RlcgkjIHNob3cgcmVmbG9nIGVudHJpZXMgZm9yIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIHNlcGFyYXRlIHJlZmxvZyBpcyBrZXB0IGZvciB0aGUgSEVBRCwgc28KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyBIRUFEQHsiMSB3ZWVrIGFnbyJ9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgc2hvdyB3aGF0IEhFQUQgcG9pbnRlZCB0byBvbmUgd2VlayBhZ28sIG5vdCB3aGF0IHRoZSBjdXJyZW50IGJyYW5jaAorcG9pbnRlZCB0byBvbmUgd2VlayBhZ28uICBUaGlzIGFsbG93cyB5b3UgdG8gc2VlIHRoZSBoaXN0b3J5IG9mIHdoYXQKK3lvdSd2ZSBjaGVja2VkIG91dC4KKworVGhlIHJlZmxvZ3MgYXJlIGtlcHQgYnkgZGVmYXVsdCBmb3IgMzAgZGF5cywgYWZ0ZXIgd2hpY2ggdGhleSBtYXkgYmUKK3BydW5lZC4gIFNlZSBsaW5rZ2l0OmdpdC1yZWZsb2dbMV0gYW5kIGxpbmtnaXQ6Z2l0LWdjWzFdIHRvIGxlYXJuCitob3cgdG8gY29udHJvbCB0aGlzIHBydW5pbmcsIGFuZCBzZWUgdGhlICJTUEVDSUZZSU5HIFJFVklTSU9OUyIKK3NlY3Rpb24gb2YgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10gZm9yIGRldGFpbHMuCisKK05vdGUgdGhhdCB0aGUgcmVmbG9nIGhpc3RvcnkgaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSBub3JtYWwgR2l0IGhpc3RvcnkuCitXaGlsZSBub3JtYWwgaGlzdG9yeSBpcyBzaGFyZWQgYnkgZXZlcnkgcmVwb3NpdG9yeSB0aGF0IHdvcmtzIG9uIHRoZQorc2FtZSBwcm9qZWN0LCB0aGUgcmVmbG9nIGhpc3RvcnkgaXMgbm90IHNoYXJlZDogaXQgdGVsbHMgeW91IG9ubHkgYWJvdXQKK2hvdyB0aGUgYnJhbmNoZXMgaW4geW91ciBsb2NhbCByZXBvc2l0b3J5IGhhdmUgY2hhbmdlZCBvdmVyIHRpbWUuCisKK1tbZGFuZ2xpbmctb2JqZWN0LXJlY292ZXJ5XV0KKz09PT09IEV4YW1pbmluZyBkYW5nbGluZyBvYmplY3RzCisKK0luIHNvbWUgc2l0dWF0aW9ucyB0aGUgcmVmbG9nIG1heSBub3QgYmUgYWJsZSB0byBzYXZlIHlvdS4gIEZvciBleGFtcGxlLAorc3VwcG9zZSB5b3UgZGVsZXRlIGEgYnJhbmNoLCB0aGVuIHJlYWxpemUgeW91IG5lZWQgdGhlIGhpc3RvcnkgaXQKK2NvbnRhaW5lZC4gIFRoZSByZWZsb2cgaXMgYWxzbyBkZWxldGVkOyBob3dldmVyLCBpZiB5b3UgaGF2ZSBub3QgeWV0CitwcnVuZWQgdGhlIHJlcG9zaXRvcnksIHRoZW4geW91IG1heSBzdGlsbCBiZSBhYmxlIHRvIGZpbmQgdGhlIGxvc3QKK2NvbW1pdHMgaW4gdGhlIGRhbmdsaW5nIG9iamVjdHMgdGhhdCBgZ2l0IGZzY2tgIHJlcG9ydHMuICBTZWUKKzw8ZGFuZ2xpbmctb2JqZWN0cz4+IGZvciB0aGUgZGV0YWlscy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZnNjaworZGFuZ2xpbmcgY29tbWl0IDcyODEyNTFkZGQyYTYxZTM4NjU3YzgyNzczOWM1NzAxNTY3MWE2YjMKK2RhbmdsaW5nIGNvbW1pdCAyNzA2YTA1OWYyNThjNmIyNDVmMjk4ZGM0ZmYyY2NkMzBlYzIxYTYzCitkYW5nbGluZyBjb21taXQgMTM0NzJiN2M0YjgwODUxYTFiYzU1MTc3OTE3MWRjYjAzNjU1ZTliNQorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gZXhhbWluZQorb25lIG9mIHRob3NlIGRhbmdsaW5nIGNvbW1pdHMgd2l0aCwgZm9yIGV4YW1wbGUsCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrIDcyODEyNTFkZGQgLS1ub3QgLS1hbGwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCBkb2VzIHdoYXQgaXQgc291bmRzIGxpa2U6IGl0IHNheXMgdGhhdCB5b3Ugd2FudCB0byBzZWUgdGhlIGNvbW1pdAoraGlzdG9yeSB0aGF0IGlzIGRlc2NyaWJlZCBieSB0aGUgZGFuZ2xpbmcgY29tbWl0KHMpLCBidXQgbm90IHRoZQoraGlzdG9yeSB0aGF0IGlzIGRlc2NyaWJlZCBieSBhbGwgeW91ciBleGlzdGluZyBicmFuY2hlcyBhbmQgdGFncy4gIFRodXMKK3lvdSBnZXQgZXhhY3RseSB0aGUgaGlzdG9yeSByZWFjaGFibGUgZnJvbSB0aGF0IGNvbW1pdCB0aGF0IGlzIGxvc3QuCisoQW5kIG5vdGljZSB0aGF0IGl0IG1pZ2h0IG5vdCBiZSBqdXN0IG9uZSBjb21taXQ6IHdlIG9ubHkgcmVwb3J0IHRoZQorInRpcCBvZiB0aGUgbGluZSIgYXMgYmVpbmcgZGFuZ2xpbmcsIGJ1dCB0aGVyZSBtaWdodCBiZSBhIHdob2xlIGRlZXAKK2FuZCBjb21wbGV4IGNvbW1pdCBoaXN0b3J5IHRoYXQgd2FzIGRyb3BwZWQuKQorCitJZiB5b3UgZGVjaWRlIHlvdSB3YW50IHRoZSBoaXN0b3J5IGJhY2ssIHlvdSBjYW4gYWx3YXlzIGNyZWF0ZSBhIG5ldworcmVmZXJlbmNlIHBvaW50aW5nIHRvIGl0LCBmb3IgZXhhbXBsZSwgYSBuZXcgYnJhbmNoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCByZWNvdmVyZWQtYnJhbmNoIDcyODEyNTFkZGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPdGhlciB0eXBlcyBvZiBkYW5nbGluZyBvYmplY3RzIChibG9icyBhbmQgdHJlZXMpIGFyZSBhbHNvIHBvc3NpYmxlLCBhbmQKK2RhbmdsaW5nIG9iamVjdHMgY2FuIGFyaXNlIGluIG90aGVyIHNpdHVhdGlvbnMuCisKKworW1tzaGFyaW5nLWRldmVsb3BtZW50XV0KKz09IFNoYXJpbmcgZGV2ZWxvcG1lbnQgd2l0aCBvdGhlcnMKKworW1tnZXR0aW5nLXVwZGF0ZXMtV2l0aC1naXQtcHVsbF1dCis9PT0gR2V0dGluZyB1cGRhdGVzIHdpdGggZ2l0IHB1bGwKKworQWZ0ZXIgeW91IGNsb25lIGEgcmVwb3NpdG9yeSBhbmQgY29tbWl0IGEgZmV3IGNoYW5nZXMgb2YgeW91ciBvd24sIHlvdQorbWF5IHdpc2ggdG8gY2hlY2sgdGhlIG9yaWdpbmFsIHJlcG9zaXRvcnkgZm9yIHVwZGF0ZXMgYW5kIG1lcmdlIHRoZW0KK2ludG8geW91ciBvd24gd29yay4KKworV2UgaGF2ZSBhbHJlYWR5IHNlZW4gPDxVcGRhdGluZy1hLXJlcG9zaXRvcnktV2l0aC1naXQtZmV0Y2gsaG93IHRvCitrZWVwIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyB1cCB0byBkYXRlPj4gd2l0aCBsaW5rZ2l0OmdpdC1mZXRjaFsxXSwKK2FuZCBob3cgdG8gbWVyZ2UgdHdvIGJyYW5jaGVzLiAgU28geW91IGNhbiBtZXJnZSBpbiBjaGFuZ2VzIGZyb20gdGhlCitvcmlnaW5hbCByZXBvc2l0b3J5J3MgbWFzdGVyIGJyYW5jaCB3aXRoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaAorJCBnaXQgbWVyZ2Ugb3JpZ2luL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIb3dldmVyLCB0aGUgbGlua2dpdDpnaXQtcHVsbFsxXSBjb21tYW5kIHByb3ZpZGVzIGEgd2F5IHRvIGRvIHRoaXMgaW4KK29uZSBzdGVwOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsIG9yaWdpbiBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gZmFjdCwgaWYgeW91IGhhdmUgYG1hc3RlcmAgY2hlY2tlZCBvdXQsIHRoZW4gdGhpcyBicmFuY2ggaGFzIGJlZW4KK2NvbmZpZ3VyZWQgYnkgYGdpdCBjbG9uZWAgdG8gZ2V0IGNoYW5nZXMgZnJvbSB0aGUgSEVBRCBicmFuY2ggb2YgdGhlCitvcmlnaW4gcmVwb3NpdG9yeS4gIFNvIG9mdGVuIHlvdSBjYW4KK2FjY29tcGxpc2ggdGhlIGFib3ZlIHdpdGgganVzdCBhIHNpbXBsZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgY29tbWFuZCB3aWxsIGZldGNoIGNoYW5nZXMgZnJvbSB0aGUgcmVtb3RlIGJyYW5jaGVzIHRvIHlvdXIKK3JlbW90ZS10cmFja2luZyBicmFuY2hlcyBgb3JpZ2luLypgLCBhbmQgbWVyZ2UgdGhlIGRlZmF1bHQgYnJhbmNoIGludG8KK3RoZSBjdXJyZW50IGJyYW5jaC4KKworTW9yZSBnZW5lcmFsbHksIGEgYnJhbmNoIHRoYXQgaXMgY3JlYXRlZCBmcm9tIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaAord2lsbCBwdWxsCitieSBkZWZhdWx0IGZyb20gdGhhdCBicmFuY2guICBTZWUgdGhlIGRlc2NyaXB0aW9ucyBvZiB0aGUKK2BicmFuY2guPG5hbWU+LnJlbW90ZWAgYW5kIGBicmFuY2guPG5hbWU+Lm1lcmdlYCBvcHRpb25zIGluCitsaW5rZ2l0OmdpdC1jb25maWdbMV0sIGFuZCB0aGUgZGlzY3Vzc2lvbiBvZiB0aGUgYC0tdHJhY2tgIG9wdGlvbiBpbgorbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0sIHRvIGxlYXJuIGhvdyB0byBjb250cm9sIHRoZXNlIGRlZmF1bHRzLgorCitJbiBhZGRpdGlvbiB0byBzYXZpbmcgeW91IGtleXN0cm9rZXMsIGBnaXQgcHVsbGAgYWxzbyBoZWxwcyB5b3UgYnkKK3Byb2R1Y2luZyBhIGRlZmF1bHQgY29tbWl0IG1lc3NhZ2UgZG9jdW1lbnRpbmcgdGhlIGJyYW5jaCBhbmQKK3JlcG9zaXRvcnkgdGhhdCB5b3UgcHVsbGVkIGZyb20uCisKKyhCdXQgbm90ZSB0aGF0IG5vIHN1Y2ggY29tbWl0IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgY2FzZSBvZiBhCis8PGZhc3QtZm9yd2FyZHMsZmFzdC1mb3J3YXJkPj47IGluc3RlYWQsIHlvdXIgYnJhbmNoIHdpbGwganVzdCBiZQordXBkYXRlZCB0byBwb2ludCB0byB0aGUgbGF0ZXN0IGNvbW1pdCBmcm9tIHRoZSB1cHN0cmVhbSBicmFuY2guKQorCitUaGUgYGdpdCBwdWxsYCBjb21tYW5kIGNhbiBhbHNvIGJlIGdpdmVuIGAuYCBhcyB0aGUgInJlbW90ZSIgcmVwb3NpdG9yeSwKK2luIHdoaWNoIGNhc2UgaXQganVzdCBtZXJnZXMgaW4gYSBicmFuY2ggZnJvbSB0aGUgY3VycmVudCByZXBvc2l0b3J5OyBzbwordGhlIGNvbW1hbmRzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgLiBicmFuY2gKKyQgZ2l0IG1lcmdlIGJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithcmUgcm91Z2hseSBlcXVpdmFsZW50LgorCitbW3N1Ym1pdHRpbmctcGF0Y2hlc11dCis9PT0gU3VibWl0dGluZyBwYXRjaGVzIHRvIGEgcHJvamVjdAorCitJZiB5b3UganVzdCBoYXZlIGEgZmV3IGNoYW5nZXMsIHRoZSBzaW1wbGVzdCB3YXkgdG8gc3VibWl0IHRoZW0gbWF5CitqdXN0IGJlIHRvIHNlbmQgdGhlbSBhcyBwYXRjaGVzIGluIGVtYWlsOgorCitGaXJzdCwgdXNlIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXTsgZm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZvcm1hdC1wYXRjaCBvcmlnaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCBwcm9kdWNlIGEgbnVtYmVyZWQgc2VyaWVzIG9mIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgb25lCitmb3IgZWFjaCBwYXRjaCBpbiB0aGUgY3VycmVudCBicmFuY2ggYnV0IG5vdCBpbiBgb3JpZ2luL0hFQURgLgorCitgZ2l0IGZvcm1hdC1wYXRjaGAgY2FuIGluY2x1ZGUgYW4gaW5pdGlhbCAiY292ZXIgbGV0dGVyIi4gWW91IGNhbiBpbnNlcnQKK2NvbW1lbnRhcnkgb24gaW5kaXZpZHVhbCBwYXRjaGVzIGFmdGVyIHRoZSB0aHJlZSBkYXNoIGxpbmUgd2hpY2gKK2Bmb3JtYXQtcGF0Y2hgIHBsYWNlcyBhZnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgYnV0IGJlZm9yZSB0aGUgcGF0Y2gKK2l0c2VsZi4gIElmIHlvdSB1c2UgYGdpdCBub3Rlc2AgdG8gdHJhY2sgeW91ciBjb3ZlciBsZXR0ZXIgbWF0ZXJpYWwsCitgZ2l0IGZvcm1hdC1wYXRjaCAtLW5vdGVzYCB3aWxsIGluY2x1ZGUgdGhlIGNvbW1pdCdzIG5vdGVzIGluIGEgc2ltaWxhcgorbWFubmVyLgorCitZb3UgY2FuIHRoZW4gaW1wb3J0IHRoZXNlIGludG8geW91ciBtYWlsIGNsaWVudCBhbmQgc2VuZCB0aGVtIGJ5CitoYW5kLiAgSG93ZXZlciwgaWYgeW91IGhhdmUgYSBsb3QgdG8gc2VuZCBhdCBvbmNlLCB5b3UgbWF5IHByZWZlciB0bwordXNlIHRoZSBsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdIHNjcmlwdCB0byBhdXRvbWF0ZSB0aGUgcHJvY2Vzcy4KK0NvbnN1bHQgdGhlIG1haWxpbmcgbGlzdCBmb3IgeW91ciBwcm9qZWN0IGZpcnN0IHRvIGRldGVybWluZQordGhlaXIgcmVxdWlyZW1lbnRzIGZvciBzdWJtaXR0aW5nIHBhdGNoZXMuCisKK1tbaW1wb3J0aW5nLXBhdGNoZXNdXQorPT09IEltcG9ydGluZyBwYXRjaGVzIHRvIGEgcHJvamVjdAorCitHaXQgYWxzbyBwcm92aWRlcyBhIHRvb2wgY2FsbGVkIGxpbmtnaXQ6Z2l0LWFtWzFdIChhbSBzdGFuZHMgZm9yCisiYXBwbHkgbWFpbGJveCIpLCBmb3IgaW1wb3J0aW5nIHN1Y2ggYW4gZW1haWxlZCBzZXJpZXMgb2YgcGF0Y2hlcy4KK0p1c3Qgc2F2ZSBhbGwgb2YgdGhlIHBhdGNoLWNvbnRhaW5pbmcgbWVzc2FnZXMsIGluIG9yZGVyLCBpbnRvIGEKK3NpbmdsZSBtYWlsYm94IGZpbGUsIHNheSBgcGF0Y2hlcy5tYm94YCwgdGhlbiBydW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYW0gLTMgcGF0Y2hlcy5tYm94CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dpdCB3aWxsIGFwcGx5IGVhY2ggcGF0Y2ggaW4gb3JkZXI7IGlmIGFueSBjb25mbGljdHMgYXJlIGZvdW5kLCBpdAord2lsbCBzdG9wLCBhbmQgeW91IGNhbiBmaXggdGhlIGNvbmZsaWN0cyBhcyBkZXNjcmliZWQgaW4KKyI8PHJlc29sdmluZy1hLW1lcmdlLFJlc29sdmluZyBhIG1lcmdlPj4iLiAgKFRoZSBgLTNgIG9wdGlvbiB0ZWxscworR2l0IHRvIHBlcmZvcm0gYSBtZXJnZTsgaWYgeW91IHdvdWxkIHByZWZlciBpdCBqdXN0IHRvIGFib3J0IGFuZAorbGVhdmUgeW91ciB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQsIHlvdSBtYXkgb21pdCB0aGF0IG9wdGlvbi4pCisKK09uY2UgdGhlIGluZGV4IGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgY29uZmxpY3QKK3Jlc29sdXRpb24sIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgY29tbWl0LCBqdXN0IHJ1bgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBhbSAtLWNvbnRpbnVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCBHaXQgd2lsbCBjcmVhdGUgdGhlIGNvbW1pdCBmb3IgeW91IGFuZCBjb250aW51ZSBhcHBseWluZyB0aGUKK3JlbWFpbmluZyBwYXRjaGVzIGZyb20gdGhlIG1haWxib3guCisKK1RoZSBmaW5hbCByZXN1bHQgd2lsbCBiZSBhIHNlcmllcyBvZiBjb21taXRzLCBvbmUgZm9yIGVhY2ggcGF0Y2ggaW4KK3RoZSBvcmlnaW5hbCBtYWlsYm94LCB3aXRoIGF1dGhvcnNoaXAgYW5kIGNvbW1pdCBsb2cgbWVzc2FnZSBlYWNoCit0YWtlbiBmcm9tIHRoZSBtZXNzYWdlIGNvbnRhaW5pbmcgZWFjaCBwYXRjaC4KKworW1twdWJsaWMtcmVwb3NpdG9yaWVzXV0KKz09PSBQdWJsaWMgR2l0IHJlcG9zaXRvcmllcworCitBbm90aGVyIHdheSB0byBzdWJtaXQgY2hhbmdlcyB0byBhIHByb2plY3QgaXMgdG8gdGVsbCB0aGUgbWFpbnRhaW5lcgorb2YgdGhhdCBwcm9qZWN0IHRvIHB1bGwgdGhlIGNoYW5nZXMgZnJvbSB5b3VyIHJlcG9zaXRvcnkgdXNpbmcKK2xpbmtnaXQ6Z2l0LXB1bGxbMV0uICBJbiB0aGUgc2VjdGlvbiAiPDxnZXR0aW5nLXVwZGF0ZXMtV2l0aC1naXQtcHVsbCwKK0dldHRpbmcgdXBkYXRlcyB3aXRoIGBnaXQgcHVsbGA+PiIgd2UgZGVzY3JpYmVkIHRoaXMgYXMgYSB3YXkgdG8gZ2V0Cit1cGRhdGVzIGZyb20gdGhlICJtYWluIiByZXBvc2l0b3J5LCBidXQgaXQgd29ya3MganVzdCBhcyB3ZWxsIGluIHRoZQorb3RoZXIgZGlyZWN0aW9uLgorCitJZiB5b3UgYW5kIHRoZSBtYWludGFpbmVyIGJvdGggaGF2ZSBhY2NvdW50cyBvbiB0aGUgc2FtZSBtYWNoaW5lLCB0aGVuCit5b3UgY2FuIGp1c3QgcHVsbCBjaGFuZ2VzIGZyb20gZWFjaCBvdGhlcidzIHJlcG9zaXRvcmllcyBkaXJlY3RseTsKK2NvbW1hbmRzIHRoYXQgYWNjZXB0IHJlcG9zaXRvcnkgVVJMcyBhcyBhcmd1bWVudHMgd2lsbCBhbHNvIGFjY2VwdCBhCitsb2NhbCBkaXJlY3RvcnkgbmFtZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgL3BhdGgvdG8vcmVwb3NpdG9yeQorJCBnaXQgcHVsbCAvcGF0aC90by9vdGhlci9yZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK29yIGFuIHNzaCBVUkw6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIHNzaDovL3lvdXJob3N0L355b3UvcmVwb3NpdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgcHJvamVjdHMgd2l0aCBmZXcgZGV2ZWxvcGVycywgb3IgZm9yIHN5bmNocm9uaXppbmcgYSBmZXcgcHJpdmF0ZQorcmVwb3NpdG9yaWVzLCB0aGlzIG1heSBiZSBhbGwgeW91IG5lZWQuCisKK0hvd2V2ZXIsIHRoZSBtb3JlIGNvbW1vbiB3YXkgdG8gZG8gdGhpcyBpcyB0byBtYWludGFpbiBhIHNlcGFyYXRlIHB1YmxpYworcmVwb3NpdG9yeSAodXN1YWxseSBvbiBhIGRpZmZlcmVudCBob3N0KSBmb3Igb3RoZXJzIHRvIHB1bGwgY2hhbmdlcworZnJvbS4gIFRoaXMgaXMgdXN1YWxseSBtb3JlIGNvbnZlbmllbnQsIGFuZCBhbGxvd3MgeW91IHRvIGNsZWFubHkKK3NlcGFyYXRlIHByaXZhdGUgd29yayBpbiBwcm9ncmVzcyBmcm9tIHB1YmxpY2x5IHZpc2libGUgd29yay4KKworWW91IHdpbGwgY29udGludWUgdG8gZG8geW91ciBkYXktdG8tZGF5IHdvcmsgaW4geW91ciBwZXJzb25hbAorcmVwb3NpdG9yeSwgYnV0IHBlcmlvZGljYWxseSAicHVzaCIgY2hhbmdlcyBmcm9tIHlvdXIgcGVyc29uYWwKK3JlcG9zaXRvcnkgaW50byB5b3VyIHB1YmxpYyByZXBvc2l0b3J5LCBhbGxvd2luZyBvdGhlciBkZXZlbG9wZXJzIHRvCitwdWxsIGZyb20gdGhhdCByZXBvc2l0b3J5LiAgU28gdGhlIGZsb3cgb2YgY2hhbmdlcywgaW4gYSBzaXR1YXRpb24KK3doZXJlIHRoZXJlIGlzIG9uZSBvdGhlciBkZXZlbG9wZXIgd2l0aCBhIHB1YmxpYyByZXBvc2l0b3J5LCBsb29rcworbGlrZSB0aGlzOgorCisuLi4uCisJCSAgICAgIHlvdSBwdXNoCit5b3VyIHBlcnNvbmFsIHJlcG8gLS0tLS0tLS0tLS0tLS0tLS0tPiB5b3VyIHB1YmxpYyByZXBvCisgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgfCB5b3UgcHVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZXkgcHVsbAorICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICB0aGV5IHB1c2ggICAgICAgICAgICAgVgordGhlaXIgcHVibGljIHJlcG8gPC0tLS0tLS0tLS0tLS0tLS0tLS0gdGhlaXIgcmVwbworLi4uLgorCitXZSBleHBsYWluIGhvdyB0byBkbyB0aGlzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisKK1tbc2V0dGluZy11cC1hLXB1YmxpYy1yZXBvc2l0b3J5XV0KKz09PT0gU2V0dGluZyB1cCBhIHB1YmxpYyByZXBvc2l0b3J5CisKK0Fzc3VtZSB5b3VyIHBlcnNvbmFsIHJlcG9zaXRvcnkgaXMgaW4gdGhlIGRpcmVjdG9yeSBgfi9wcm9qYC4gIFdlCitmaXJzdCBjcmVhdGUgYSBuZXcgY2xvbmUgb2YgdGhlIHJlcG9zaXRvcnkgYW5kIHRlbGwgYGdpdCBkYWVtb25gIHRoYXQgaXQKK2lzIG1lYW50IHRvIGJlIHB1YmxpYzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgLS1iYXJlIH4vcHJvaiBwcm9qLmdpdAorJCB0b3VjaCBwcm9qLmdpdC9naXQtZGFlbW9uLWV4cG9ydC1vaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcmVzdWx0aW5nIGRpcmVjdG9yeSBwcm9qLmdpdCBjb250YWlucyBhICJiYXJlIiBnaXQgcmVwb3NpdG9yeS0taXQgaXMKK2p1c3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBgLmdpdGAgZGlyZWN0b3J5LCB3aXRob3V0IGFueSBmaWxlcyBjaGVja2VkIG91dAorYXJvdW5kIGl0LgorCitOZXh0LCBjb3B5IGBwcm9qLmdpdGAgdG8gdGhlIHNlcnZlciB3aGVyZSB5b3UgcGxhbiB0byBob3N0IHRoZQorcHVibGljIHJlcG9zaXRvcnkuICBZb3UgY2FuIHVzZSBzY3AsIHJzeW5jLCBvciB3aGF0ZXZlciBpcyBtb3N0Citjb252ZW5pZW50LgorCitbW2V4cG9ydGluZy12aWEtZ2l0XV0KKz09PT0gRXhwb3J0aW5nIGEgR2l0IHJlcG9zaXRvcnkgdmlhIHRoZSBHaXQgcHJvdG9jb2wKKworVGhpcyBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZC4KKworSWYgc29tZW9uZSBlbHNlIGFkbWluaXN0ZXJzIHRoZSBzZXJ2ZXIsIHRoZXkgc2hvdWxkIHRlbGwgeW91IHdoYXQKK2RpcmVjdG9yeSB0byBwdXQgdGhlIHJlcG9zaXRvcnkgaW4sIGFuZCB3aGF0IGBnaXQ6Ly9gIFVSTCBpdCB3aWxsCithcHBlYXIgYXQuICBZb3UgY2FuIHRoZW4gc2tpcCB0byB0aGUgc2VjdGlvbgorIjw8cHVzaGluZy1jaGFuZ2VzLXRvLWEtcHVibGljLXJlcG9zaXRvcnksUHVzaGluZyBjaGFuZ2VzIHRvIGEgcHVibGljCityZXBvc2l0b3J5Pj4iLCBiZWxvdy4KKworT3RoZXJ3aXNlLCBhbGwgeW91IG5lZWQgdG8gZG8gaXMgc3RhcnQgbGlua2dpdDpnaXQtZGFlbW9uWzFdOyBpdCB3aWxsCitsaXN0ZW4gb24gcG9ydCA5NDE4LiAgQnkgZGVmYXVsdCwgaXQgd2lsbCBhbGxvdyBhY2Nlc3MgdG8gYW55IGRpcmVjdG9yeQordGhhdCBsb29rcyBsaWtlIGEgR2l0IGRpcmVjdG9yeSBhbmQgY29udGFpbnMgdGhlIG1hZ2ljIGZpbGUKK2dpdC1kYWVtb24tZXhwb3J0LW9rLiAgUGFzc2luZyBzb21lIGRpcmVjdG9yeSBwYXRocyBhcyBgZ2l0IGRhZW1vbmAKK2FyZ3VtZW50cyB3aWxsIGZ1cnRoZXIgcmVzdHJpY3QgdGhlIGV4cG9ydHMgdG8gdGhvc2UgcGF0aHMuCisKK1lvdSBjYW4gYWxzbyBydW4gYGdpdCBkYWVtb25gIGFzIGFuIGluZXRkIHNlcnZpY2U7IHNlZSB0aGUKK2xpbmtnaXQ6Z2l0LWRhZW1vblsxXSBtYW4gcGFnZSBmb3IgZGV0YWlscy4gIChTZWUgZXNwZWNpYWxseSB0aGUKK2V4YW1wbGVzIHNlY3Rpb24uKQorCitbW2V4cG9ydGluZy12aWEtaHR0cF1dCis9PT09IEV4cG9ydGluZyBhIGdpdCByZXBvc2l0b3J5IHZpYSBIVFRQCisKK1RoZSBHaXQgcHJvdG9jb2wgZ2l2ZXMgYmV0dGVyIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eSwgYnV0IG9uIGEKK2hvc3Qgd2l0aCBhIHdlYiBzZXJ2ZXIgc2V0IHVwLCBIVFRQIGV4cG9ydHMgbWF5IGJlIHNpbXBsZXIgdG8gc2V0IHVwLgorCitBbGwgeW91IG5lZWQgdG8gZG8gaXMgcGxhY2UgdGhlIG5ld2x5IGNyZWF0ZWQgYmFyZSBHaXQgcmVwb3NpdG9yeSBpbgorYSBkaXJlY3RvcnkgdGhhdCBpcyBleHBvcnRlZCBieSB0aGUgd2ViIHNlcnZlciwgYW5kIG1ha2Ugc29tZQorYWRqdXN0bWVudHMgdG8gZ2l2ZSB3ZWIgY2xpZW50cyBzb21lIGV4dHJhIGluZm9ybWF0aW9uIHRoZXkgbmVlZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBtdiBwcm9qLmdpdCAvaG9tZS95b3UvcHVibGljX2h0bWwvcHJvai5naXQKKyQgY2QgcHJvai5naXQKKyQgZ2l0IC0tYmFyZSB1cGRhdGUtc2VydmVyLWluZm8KKyQgbXYgaG9va3MvcG9zdC11cGRhdGUuc2FtcGxlIGhvb2tzL3Bvc3QtdXBkYXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhGb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGxhc3QgdHdvIGxpbmVzLCBzZWUKK2xpbmtnaXQ6Z2l0LXVwZGF0ZS1zZXJ2ZXItaW5mb1sxXSBhbmQgbGlua2dpdDpnaXRob29rc1s1XS4pCisKK0FkdmVydGlzZSB0aGUgVVJMIG9mIGBwcm9qLmdpdGAuICBBbnlib2R5IGVsc2Ugc2hvdWxkIHRoZW4gYmUgYWJsZSB0bworY2xvbmUgb3IgcHVsbCBmcm9tIHRoYXQgVVJMLCBmb3IgZXhhbXBsZSB3aXRoIGEgY29tbWFuZCBsaW5lIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIGh0dHA6Ly95b3Vyc2VydmVyLmNvbS9+eW91L3Byb2ouZ2l0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhTZWUgYWxzbworbGluazpob3d0by9zZXR1cC1naXQtc2VydmVyLW92ZXItaHR0cC5odG1sW3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwXQorZm9yIGEgc2xpZ2h0bHkgbW9yZSBzb3BoaXN0aWNhdGVkIHNldHVwIHVzaW5nIFdlYkRBViB3aGljaCBhbHNvCithbGxvd3MgcHVzaGluZyBvdmVyIEhUVFAuKQorCitbW3B1c2hpbmctY2hhbmdlcy10by1hLXB1YmxpYy1yZXBvc2l0b3J5XV0KKz09PT0gUHVzaGluZyBjaGFuZ2VzIHRvIGEgcHVibGljIHJlcG9zaXRvcnkKKworTm90ZSB0aGF0IHRoZSB0d28gdGVjaG5pcXVlcyBvdXRsaW5lZCBhYm92ZSAoZXhwb3J0aW5nIHZpYQorPDxleHBvcnRpbmctdmlhLWh0dHAsaHR0cD4+IG9yIDw8ZXhwb3J0aW5nLXZpYS1naXQsZ2l0Pj4pIGFsbG93IG90aGVyCittYWludGFpbmVycyB0byBmZXRjaCB5b3VyIGxhdGVzdCBjaGFuZ2VzLCBidXQgdGhleSBkbyBub3QgYWxsb3cgd3JpdGUKK2FjY2Vzcywgd2hpY2ggeW91IHdpbGwgbmVlZCB0byB1cGRhdGUgdGhlIHB1YmxpYyByZXBvc2l0b3J5IHdpdGggdGhlCitsYXRlc3QgY2hhbmdlcyBjcmVhdGVkIGluIHlvdXIgcHJpdmF0ZSByZXBvc2l0b3J5LgorCitUaGUgc2ltcGxlc3Qgd2F5IHRvIGRvIHRoaXMgaXMgdXNpbmcgbGlua2dpdDpnaXQtcHVzaFsxXSBhbmQgc3NoOyB0bwordXBkYXRlIHRoZSByZW1vdGUgYnJhbmNoIG5hbWVkIGBtYXN0ZXJgIHdpdGggdGhlIGxhdGVzdCBzdGF0ZSBvZiB5b3VyCiticmFuY2ggbmFtZWQgYG1hc3RlcmAsIHJ1bgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIHNzaDovL3lvdXJzZXJ2ZXIuY29tL355b3UvcHJvai5naXQgbWFzdGVyOm1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvciBqdXN0CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggc3NoOi8veW91cnNlcnZlci5jb20vfnlvdS9wcm9qLmdpdCBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgd2l0aCBgZ2l0IGZldGNoYCwgYGdpdCBwdXNoYCB3aWxsIGNvbXBsYWluIGlmIHRoaXMgZG9lcyBub3QgcmVzdWx0IGluIGEKKzw8ZmFzdC1mb3J3YXJkcyxmYXN0LWZvcndhcmQ+Pjsgc2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBmb3IgZGV0YWlscyBvbgoraGFuZGxpbmcgdGhpcyBjYXNlLgorCitOb3RlIHRoYXQgdGhlIHRhcmdldCBvZiBhIGBwdXNoYCBpcyBub3JtYWxseSBhCis8PGRlZl9iYXJlX3JlcG9zaXRvcnksYmFyZT4+IHJlcG9zaXRvcnkuICBZb3UgY2FuIGFsc28gcHVzaCB0byBhCityZXBvc2l0b3J5IHRoYXQgaGFzIGEgY2hlY2tlZC1vdXQgd29ya2luZyB0cmVlLCBidXQgYSBwdXNoIHRvIHVwZGF0ZSB0aGUKK2N1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2ggaXMgZGVuaWVkIGJ5IGRlZmF1bHQgdG8gcHJldmVudCBjb25mdXNpb24uCitTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIG9wdGlvbgoraW4gbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBkZXRhaWxzLgorCitBcyB3aXRoIGBnaXQgZmV0Y2hgLCB5b3UgbWF5IGFsc28gc2V0IHVwIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0bworc2F2ZSB0eXBpbmc7IHNvLCBmb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVtb3RlIGFkZCBwdWJsaWMtcmVwbyBzc2g6Ly95b3Vyc2VydmVyLmNvbS9+eW91L3Byb2ouZ2l0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FkZHMgdGhlIGZvbGxvd2luZyB0byBgLmdpdC9jb25maWdgOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbcmVtb3RlICJwdWJsaWMtcmVwbyJdCisJdXJsID0geW91cnNlcnZlci5jb206cHJvai5naXQKKwlmZXRjaCA9ICtyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2V4YW1wbGUvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCBsZXRzIHlvdSBkbyB0aGUgc2FtZSBwdXNoIHdpdGgganVzdAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIHB1YmxpYy1yZXBvIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgdGhlIGV4cGxhbmF0aW9ucyBvZiB0aGUgYHJlbW90ZS48bmFtZT4udXJsYCwKK2BicmFuY2guPG5hbWU+LnJlbW90ZWAsIGFuZCBgcmVtb3RlLjxuYW1lPi5wdXNoYCBvcHRpb25zIGluCitsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIGRldGFpbHMuCisKK1tbZm9yY2luZy1wdXNoXV0KKz09PT0gV2hhdCB0byBkbyB3aGVuIGEgcHVzaCBmYWlscworCitJZiBhIHB1c2ggd291bGQgbm90IHJlc3VsdCBpbiBhIDw8ZmFzdC1mb3J3YXJkcyxmYXN0LWZvcndhcmQ+PiBvZiB0aGUKK3JlbW90ZSBicmFuY2gsIHRoZW4gaXQgd2lsbCBmYWlsIHdpdGggYW4gZXJyb3IgbGlrZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICEgW3JlamVjdGVkXSAgICAgICAgbWFzdGVyIC0+IG1hc3RlciAobm9uLWZhc3QtZm9yd2FyZCkKK2Vycm9yOiBmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJy4uLicKK2hpbnQ6IFVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmQKK2hpbnQ6IGl0cyByZW1vdGUgY291bnRlcnBhcnQuIEludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy4KK2hpbnQ6ICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi4KK2hpbnQ6IFNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgY2FuIGhhcHBlbiwgZm9yIGV4YW1wbGUsIGlmIHlvdToKKworCS0gdXNlIGBnaXQgcmVzZXQgLS1oYXJkYCB0byByZW1vdmUgYWxyZWFkeS1wdWJsaXNoZWQgY29tbWl0cywgb3IKKwktIHVzZSBgZ2l0IGNvbW1pdCAtLWFtZW5kYCB0byByZXBsYWNlIGFscmVhZHktcHVibGlzaGVkIGNvbW1pdHMKKwkgIChhcyBpbiA8PGZpeGluZy1hLW1pc3Rha2UtYnktcmV3cml0aW5nLWhpc3Rvcnk+PiksIG9yCisJLSB1c2UgYGdpdCByZWJhc2VgIHRvIHJlYmFzZSBhbnkgYWxyZWFkeS1wdWJsaXNoZWQgY29tbWl0cyAoYXMKKwkgIGluIDw8dXNpbmctZ2l0LXJlYmFzZT4+KS4KKworWW91IG1heSBmb3JjZSBgZ2l0IHB1c2hgIHRvIHBlcmZvcm0gdGhlIHVwZGF0ZSBhbnl3YXkgYnkgcHJlY2VkaW5nIHRoZQorYnJhbmNoIG5hbWUgd2l0aCBhIHBsdXMgc2lnbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVzaCBzc2g6Ly95b3Vyc2VydmVyLmNvbS9+eW91L3Byb2ouZ2l0ICttYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGUgYWRkaXRpb24gb2YgdGhlIGArYCBzaWduLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlCitgLWZgIGZsYWcgdG8gZm9yY2UgdGhlIHJlbW90ZSB1cGRhdGUsIGFzIGluOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIC1mIHNzaDovL3lvdXJzZXJ2ZXIuY29tL355b3UvcHJvai5naXQgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vcm1hbGx5IHdoZW5ldmVyIGEgYnJhbmNoIGhlYWQgaW4gYSBwdWJsaWMgcmVwb3NpdG9yeSBpcyBtb2RpZmllZCwgaXQKK2lzIG1vZGlmaWVkIHRvIHBvaW50IHRvIGEgZGVzY2VuZGFudCBvZiB0aGUgY29tbWl0IHRoYXQgaXQgcG9pbnRlZCB0bworYmVmb3JlLiAgQnkgZm9yY2luZyBhIHB1c2ggaW4gdGhpcyBzaXR1YXRpb24sIHlvdSBicmVhayB0aGF0IGNvbnZlbnRpb24uCisoU2VlIDw8cHJvYmxlbXMtV2l0aC1yZXdyaXRpbmctaGlzdG9yeT4+LikKKworTmV2ZXJ0aGVsZXNzLCB0aGlzIGlzIGEgY29tbW9uIHByYWN0aWNlIGZvciBwZW9wbGUgdGhhdCBuZWVkIGEgc2ltcGxlCit3YXkgdG8gcHVibGlzaCBhIHdvcmstaW4tcHJvZ3Jlc3MgcGF0Y2ggc2VyaWVzLCBhbmQgaXQgaXMgYW4gYWNjZXB0YWJsZQorY29tcHJvbWlzZSBhcyBsb25nIGFzIHlvdSB3YXJuIG90aGVyIGRldmVsb3BlcnMgdGhhdCB0aGlzIGlzIGhvdyB5b3UKK2ludGVuZCB0byBtYW5hZ2UgdGhlIGJyYW5jaC4KKworSXQncyBhbHNvIHBvc3NpYmxlIGZvciBhIHB1c2ggdG8gZmFpbCBpbiB0aGlzIHdheSB3aGVuIG90aGVyIHBlb3BsZSBoYXZlCit0aGUgcmlnaHQgdG8gcHVzaCB0byB0aGUgc2FtZSByZXBvc2l0b3J5LiAgSW4gdGhhdCBjYXNlLCB0aGUgY29ycmVjdAorc29sdXRpb24gaXMgdG8gcmV0cnkgdGhlIHB1c2ggYWZ0ZXIgZmlyc3QgdXBkYXRpbmcgeW91ciB3b3JrOiBlaXRoZXIgYnkgYQorcHVsbCwgb3IgYnkgYSBmZXRjaCBmb2xsb3dlZCBieSBhIHJlYmFzZTsgc2VlIHRoZQorPDxzZXR0aW5nLXVwLWEtc2hhcmVkLXJlcG9zaXRvcnksbmV4dCBzZWN0aW9uPj4gYW5kCitsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10gZm9yIG1vcmUuCisKK1tbc2V0dGluZy11cC1hLXNoYXJlZC1yZXBvc2l0b3J5XV0KKz09PT0gU2V0dGluZyB1cCBhIHNoYXJlZCByZXBvc2l0b3J5CisKK0Fub3RoZXIgd2F5IHRvIGNvbGxhYm9yYXRlIGlzIGJ5IHVzaW5nIGEgbW9kZWwgc2ltaWxhciB0byB0aGF0Citjb21tb25seSB1c2VkIGluIENWUywgd2hlcmUgc2V2ZXJhbCBkZXZlbG9wZXJzIHdpdGggc3BlY2lhbCByaWdodHMKK2FsbCBwdXNoIHRvIGFuZCBwdWxsIGZyb20gYSBzaW5nbGUgc2hhcmVkIHJlcG9zaXRvcnkuICBTZWUKK2xpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bworc2V0IHRoaXMgdXAuCisKK0hvd2V2ZXIsIHdoaWxlIHRoZXJlIGlzIG5vdGhpbmcgd3Jvbmcgd2l0aCBHaXQncyBzdXBwb3J0IGZvciBzaGFyZWQKK3JlcG9zaXRvcmllcywgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbiBpcyBub3QgZ2VuZXJhbGx5IHJlY29tbWVuZGVkLAorc2ltcGx5IGJlY2F1c2UgdGhlIG1vZGUgb2YgY29sbGFib3JhdGlvbiB0aGF0IEdpdCBzdXBwb3J0cy0tYnkKK2V4Y2hhbmdpbmcgcGF0Y2hlcyBhbmQgcHVsbGluZyBmcm9tIHB1YmxpYyByZXBvc2l0b3JpZXMtLWhhcyBzbyBtYW55CithZHZhbnRhZ2VzIG92ZXIgdGhlIGNlbnRyYWwgc2hhcmVkIHJlcG9zaXRvcnk6CisKKwktIEdpdCdzIGFiaWxpdHkgdG8gcXVpY2tseSBpbXBvcnQgYW5kIG1lcmdlIHBhdGNoZXMgYWxsb3dzIGEKKwkgIHNpbmdsZSBtYWludGFpbmVyIHRvIHByb2Nlc3MgaW5jb21pbmcgY2hhbmdlcyBldmVuIGF0IHZlcnkKKwkgIGhpZ2ggcmF0ZXMuICBBbmQgd2hlbiB0aGF0IGJlY29tZXMgdG9vIG11Y2gsIGBnaXQgcHVsbGAgcHJvdmlkZXMKKwkgIGFuIGVhc3kgd2F5IGZvciB0aGF0IG1haW50YWluZXIgdG8gZGVsZWdhdGUgdGhpcyBqb2IgdG8gb3RoZXIKKwkgIG1haW50YWluZXJzIHdoaWxlIHN0aWxsIGFsbG93aW5nIG9wdGlvbmFsIHJldmlldyBvZiBpbmNvbWluZworCSAgY2hhbmdlcy4KKwktIFNpbmNlIGV2ZXJ5IGRldmVsb3BlcidzIHJlcG9zaXRvcnkgaGFzIHRoZSBzYW1lIGNvbXBsZXRlIGNvcHkKKwkgIG9mIHRoZSBwcm9qZWN0IGhpc3RvcnksIG5vIHJlcG9zaXRvcnkgaXMgc3BlY2lhbCwgYW5kIGl0IGlzCisJICB0cml2aWFsIGZvciBhbm90aGVyIGRldmVsb3BlciB0byB0YWtlIG92ZXIgbWFpbnRlbmFuY2Ugb2YgYQorCSAgcHJvamVjdCwgZWl0aGVyIGJ5IG11dHVhbCBhZ3JlZW1lbnQsIG9yIGJlY2F1c2UgYSBtYWludGFpbmVyCisJICBiZWNvbWVzIHVucmVzcG9uc2l2ZSBvciBkaWZmaWN1bHQgdG8gd29yayB3aXRoLgorCS0gVGhlIGxhY2sgb2YgYSBjZW50cmFsIGdyb3VwIG9mICJjb21taXR0ZXJzIiBtZWFucyB0aGVyZSBpcworCSAgbGVzcyBuZWVkIGZvciBmb3JtYWwgZGVjaXNpb25zIGFib3V0IHdobyBpcyAiaW4iIGFuZCB3aG8gaXMKKwkgICJvdXQiLgorCitbW3NldHRpbmctdXAtZ2l0d2ViXV0KKz09PT0gQWxsb3dpbmcgd2ViIGJyb3dzaW5nIG9mIGEgcmVwb3NpdG9yeQorCitUaGUgZ2l0d2ViIGNnaSBzY3JpcHQgcHJvdmlkZXMgdXNlcnMgYW4gZWFzeSB3YXkgdG8gYnJvd3NlIHlvdXIKK3Byb2plY3QncyByZXZpc2lvbnMsIGZpbGUgY29udGVudHMgYW5kIGxvZ3Mgd2l0aG91dCBoYXZpbmcgdG8gaW5zdGFsbAorR2l0LiBGZWF0dXJlcyBsaWtlIFJTUy9BdG9tIGZlZWRzIGFuZCBibGFtZS9hbm5vdGF0aW9uIGRldGFpbHMgbWF5CitvcHRpb25hbGx5IGJlIGVuYWJsZWQuCisKK1RoZSBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXSBjb21tYW5kIHByb3ZpZGVzIGEgc2ltcGxlIHdheSB0byBzdGFydAorYnJvd3NpbmcgdGhlIHJlcG9zaXRvcnkgdXNpbmcgZ2l0d2ViLiBUaGUgZGVmYXVsdCBzZXJ2ZXIgd2hlbiB1c2luZworaW5zdGF3ZWIgaXMgbGlnaHR0cGQuCisKK1NlZSB0aGUgZmlsZSBnaXR3ZWIvSU5TVEFMTCBpbiB0aGUgR2l0IHNvdXJjZSB0cmVlIGFuZAorbGlua2dpdDpnaXR3ZWJbMV0gZm9yIGluc3RydWN0aW9ucyBvbiBkZXRhaWxzIHNldHRpbmcgdXAgYSBwZXJtYW5lbnQKK2luc3RhbGxhdGlvbiB3aXRoIGEgQ0dJIG9yIFBlcmwgY2FwYWJsZSBzZXJ2ZXIuCisKK1tbaG93LXRvLWdldC1hLWdpdC1yZXBvc2l0b3J5LXdpdGgtbWluaW1hbC1oaXN0b3J5XV0KKz09PSBIb3cgdG8gZ2V0IGEgR2l0IHJlcG9zaXRvcnkgd2l0aCBtaW5pbWFsIGhpc3RvcnkKKworQSA8PGRlZl9zaGFsbG93X2Nsb25lLHNoYWxsb3cgY2xvbmU+Piwgd2l0aCBpdHMgdHJ1bmNhdGVkCitoaXN0b3J5LCBpcyB1c2VmdWwgd2hlbiBvbmUgaXMgaW50ZXJlc3RlZCBvbmx5IGluIHJlY2VudCBoaXN0b3J5CitvZiBhIHByb2plY3QgYW5kIGdldHRpbmcgZnVsbCBoaXN0b3J5IGZyb20gdGhlIHVwc3RyZWFtIGlzCitleHBlbnNpdmUuCisKK0EgPDxkZWZfc2hhbGxvd19jbG9uZSxzaGFsbG93IGNsb25lPj4gaXMgY3JlYXRlZCBieSBzcGVjaWZ5aW5nCit0aGUgbGlua2dpdDpnaXQtY2xvbmVbMV0gYC0tZGVwdGhgIHN3aXRjaC4gVGhlIGRlcHRoIGNhbiBsYXRlciBiZQorY2hhbmdlZCB3aXRoIHRoZSBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBgLS1kZXB0aGAgc3dpdGNoLCBvciBmdWxsCitoaXN0b3J5IHJlc3RvcmVkIHdpdGggYC0tdW5zaGFsbG93YC4KKworTWVyZ2luZyBpbnNpZGUgYSA8PGRlZl9zaGFsbG93X2Nsb25lLHNoYWxsb3cgY2xvbmU+PiB3aWxsIHdvcmsgYXMgbG9uZworYXMgYSBtZXJnZSBiYXNlIGlzIGluIHRoZSByZWNlbnQgaGlzdG9yeS4KK090aGVyd2lzZSwgaXQgd2lsbCBiZSBsaWtlIG1lcmdpbmcgdW5yZWxhdGVkIGhpc3RvcmllcyBhbmQgbWF5CitoYXZlIHRvIHJlc3VsdCBpbiBodWdlIGNvbmZsaWN0cy4gIFRoaXMgbGltaXRhdGlvbiBtYXkgbWFrZSBzdWNoCithIHJlcG9zaXRvcnkgdW5zdWl0YWJsZSB0byBiZSB1c2VkIGluIG1lcmdlIGJhc2VkIHdvcmtmbG93cy4KKworW1tzaGFyaW5nLWRldmVsb3BtZW50LWV4YW1wbGVzXV0KKz09PSBFeGFtcGxlcworCitbW21haW50YWluaW5nLXRvcGljLWJyYW5jaGVzXV0KKz09PT0gTWFpbnRhaW5pbmcgdG9waWMgYnJhbmNoZXMgZm9yIGEgTGludXggc3Vic3lzdGVtIG1haW50YWluZXIKKworVGhpcyBkZXNjcmliZXMgaG93IFRvbnkgTHVjayB1c2VzIEdpdCBpbiBoaXMgcm9sZSBhcyBtYWludGFpbmVyIG9mIHRoZQorSUE2NCBhcmNoaXRlY3R1cmUgZm9yIHRoZSBMaW51eCBrZXJuZWwuCisKK0hlIHVzZXMgdHdvIHB1YmxpYyBicmFuY2hlczoKKworIC0gQSAidGVzdCIgdHJlZSBpbnRvIHdoaWNoIHBhdGNoZXMgYXJlIGluaXRpYWxseSBwbGFjZWQgc28gdGhhdCB0aGV5CisgICBjYW4gZ2V0IHNvbWUgZXhwb3N1cmUgd2hlbiBpbnRlZ3JhdGVkIHdpdGggb3RoZXIgb25nb2luZyBkZXZlbG9wbWVudC4KKyAgIFRoaXMgdHJlZSBpcyBhdmFpbGFibGUgdG8gQW5kcmV3IGZvciBwdWxsaW5nIGludG8gLW1tIHdoZW5ldmVyIGhlCisgICB3YW50cy4KKworIC0gQSAicmVsZWFzZSIgdHJlZSBpbnRvIHdoaWNoIHRlc3RlZCBwYXRjaGVzIGFyZSBtb3ZlZCBmb3IgZmluYWwgc2FuaXR5CisgICBjaGVja2luZywgYW5kIGFzIGEgdmVoaWNsZSB0byBzZW5kIHRoZW0gdXBzdHJlYW0gdG8gTGludXMgKGJ5IHNlbmRpbmcKKyAgIGhpbSBhICJwbGVhc2UgcHVsbCIgcmVxdWVzdC4pCisKK0hlIGFsc28gdXNlcyBhIHNldCBvZiB0ZW1wb3JhcnkgYnJhbmNoZXMgKCJ0b3BpYyBicmFuY2hlcyIpLCBlYWNoCitjb250YWluaW5nIGEgbG9naWNhbCBncm91cGluZyBvZiBwYXRjaGVzLgorCitUbyBzZXQgdGhpcyB1cCwgZmlyc3QgY3JlYXRlIHlvdXIgd29yayB0cmVlIGJ5IGNsb25pbmcgTGludXMncyBwdWJsaWMKK3RyZWU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQgd29yaworJCBjZCB3b3JrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xpbnVzJ3MgdHJlZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBuYW1lZCBvcmlnaW4vbWFzdGVyLAorYW5kIGNhbiBiZSB1cGRhdGVkIHVzaW5nIGxpbmtnaXQ6Z2l0LWZldGNoWzFdOyB5b3UgY2FuIHRyYWNrIG90aGVyCitwdWJsaWMgdHJlZXMgdXNpbmcgbGlua2dpdDpnaXQtcmVtb3RlWzFdIHRvIHNldCB1cCBhICJyZW1vdGUiIGFuZAorbGlua2dpdDpnaXQtZmV0Y2hbMV0gdG8ga2VlcCB0aGVtIHVwIHRvIGRhdGU7IHNlZQorPDxyZXBvc2l0b3JpZXMtYW5kLWJyYW5jaGVzPj4uCisKK05vdyBjcmVhdGUgdGhlIGJyYW5jaGVzIGluIHdoaWNoIHlvdSBhcmUgZ29pbmcgdG8gd29yazsgdGhlc2Ugc3RhcnQgb3V0CithdCB0aGUgY3VycmVudCB0aXAgb2Ygb3JpZ2luL21hc3RlciBicmFuY2gsIGFuZCBzaG91bGQgYmUgc2V0IHVwICh1c2luZwordGhlIGAtLXRyYWNrYCBvcHRpb24gdG8gbGlua2dpdDpnaXQtYnJhbmNoWzFdKSB0byBtZXJnZSBjaGFuZ2VzIGluIGZyb20KK0xpbnVzIGJ5IGRlZmF1bHQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCAtLXRyYWNrIHRlc3Qgb3JpZ2luL21hc3RlcgorJCBnaXQgYnJhbmNoIC0tdHJhY2sgcmVsZWFzZSBvcmlnaW4vbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGNhbiBiZSBlYXNpbHkga2VwdCB1cCB0byBkYXRlIHVzaW5nIGxpbmtnaXQ6Z2l0LXB1bGxbMV0uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCB0ZXN0ICYmIGdpdCBwdWxsCiskIGdpdCBzd2l0Y2ggcmVsZWFzZSAmJiBnaXQgcHVsbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbXBvcnRhbnQgbm90ZSEgIElmIHlvdSBoYXZlIGFueSBsb2NhbCBjaGFuZ2VzIGluIHRoZXNlIGJyYW5jaGVzLCB0aGVuCit0aGlzIG1lcmdlIHdpbGwgY3JlYXRlIGEgY29tbWl0IG9iamVjdCBpbiB0aGUgaGlzdG9yeSAod2l0aCBubyBsb2NhbAorY2hhbmdlcyBHaXQgd2lsbCBzaW1wbHkgZG8gYSAiZmFzdC1mb3J3YXJkIiBtZXJnZSkuICBNYW55IHBlb3BsZSBkaXNsaWtlCit0aGUgIm5vaXNlIiB0aGF0IHRoaXMgY3JlYXRlcyBpbiB0aGUgTGludXggaGlzdG9yeSwgc28geW91IHNob3VsZCBhdm9pZAorZG9pbmcgdGhpcyBjYXByaWNpb3VzbHkgaW4gdGhlIGByZWxlYXNlYCBicmFuY2gsIGFzIHRoZXNlIG5vaXN5IGNvbW1pdHMKK3dpbGwgYmVjb21lIHBhcnQgb2YgdGhlIHBlcm1hbmVudCBoaXN0b3J5IHdoZW4geW91IGFzayBMaW51cyB0byBwdWxsCitmcm9tIHRoZSByZWxlYXNlIGJyYW5jaC4KKworQSBmZXcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pIGNhbgorbWFrZSBpdCBlYXN5IHRvIHB1c2ggYm90aCBicmFuY2hlcyB0byB5b3VyIHB1YmxpYyB0cmVlLiAgKFNlZQorPDxzZXR0aW5nLXVwLWEtcHVibGljLXJlcG9zaXRvcnk+Pi4pCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgY2F0ID4+IC5naXQvY29uZmlnIDw8RU9GCitbcmVtb3RlICJteXRyZWUiXQorCXVybCA9ICBtYXN0ZXIua2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FlZ2wvbGludXguZ2l0CisJcHVzaCA9IHJlbGVhc2UKKwlwdXNoID0gdGVzdAorRU9GCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZW4geW91IGNhbiBwdXNoIGJvdGggdGhlIHRlc3QgYW5kIHJlbGVhc2UgdHJlZXMgdXNpbmcKK2xpbmtnaXQ6Z2l0LXB1c2hbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggbXl0cmVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK29yIHB1c2gganVzdCBvbmUgb2YgdGhlIHRlc3QgYW5kIHJlbGVhc2UgYnJhbmNoZXMgdXNpbmc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggbXl0cmVlIHRlc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworb3IKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVzaCBteXRyZWUgcmVsZWFzZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3cgdG8gYXBwbHkgc29tZSBwYXRjaGVzIGZyb20gdGhlIGNvbW11bml0eS4gIFRoaW5rIG9mIGEgc2hvcnQKK3NuYXBweSBuYW1lIGZvciBhIGJyYW5jaCB0byBob2xkIHRoaXMgcGF0Y2ggKG9yIHJlbGF0ZWQgZ3JvdXAgb2YKK3BhdGNoZXMpLCBhbmQgY3JlYXRlIGEgbmV3IGJyYW5jaCBmcm9tIGEgcmVjZW50IHN0YWJsZSB0YWcgb2YKK0xpbnVzJ3MgYnJhbmNoLiBQaWNraW5nIGEgc3RhYmxlIGJhc2UgZm9yIHlvdXIgYnJhbmNoIHdpbGw6CisxKSBoZWxwIHlvdTogYnkgYXZvaWRpbmcgaW5jbHVzaW9uIG9mIHVucmVsYXRlZCBhbmQgcGVyaGFwcyBsaWdodGx5Cit0ZXN0ZWQgY2hhbmdlcworMikgaGVscCBmdXR1cmUgYnVnIGh1bnRlcnMgdGhhdCB1c2UgYGdpdCBiaXNlY3RgIHRvIGZpbmQgcHJvYmxlbXMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIC1jIHNwZWVkLXVwLXNwaW5sb2NrcyB2Mi42LjM1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdyB5b3UgYXBwbHkgdGhlIHBhdGNoKGVzKSwgcnVuIHNvbWUgdGVzdHMsIGFuZCBjb21taXQgdGhlIGNoYW5nZShzKS4gIElmCit0aGUgcGF0Y2ggaXMgYSBtdWx0aS1wYXJ0IHNlcmllcywgdGhlbiB5b3Ugc2hvdWxkIGFwcGx5IGVhY2ggYXMgYSBzZXBhcmF0ZQorY29tbWl0IHRvIHRoaXMgYnJhbmNoLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIC4uLiBwYXRjaCAuLi4gdGVzdCAgLi4uIGNvbW1pdCBbIC4uLiBwYXRjaCAuLi4gdGVzdCAuLi4gY29tbWl0IF0qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4geW91IGFyZSBoYXBweSB3aXRoIHRoZSBzdGF0ZSBvZiB0aGlzIGNoYW5nZSwgeW91IGNhbiBtZXJnZSBpdCBpbnRvIHRoZQorInRlc3QiIGJyYW5jaCBpbiBwcmVwYXJhdGlvbiB0byBtYWtlIGl0IHB1YmxpYzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIHRlc3QgJiYgZ2l0IG1lcmdlIHNwZWVkLXVwLXNwaW5sb2NrcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyB1bmxpa2VseSB0aGF0IHlvdSB3b3VsZCBoYXZlIGFueSBjb25mbGljdHMgaGVyZSAuLi4gYnV0IHlvdSBtaWdodCBpZiB5b3UKK3NwZW50IGEgd2hpbGUgb24gdGhpcyBzdGVwIGFuZCBoYWQgYWxzbyBwdWxsZWQgbmV3IHZlcnNpb25zIGZyb20gdXBzdHJlYW0uCisKK1NvbWV0aW1lIGxhdGVyIHdoZW4gZW5vdWdoIHRpbWUgaGFzIHBhc3NlZCBhbmQgdGVzdGluZyBkb25lLCB5b3UgY2FuIHB1bGwgdGhlCitzYW1lIGJyYW5jaCBpbnRvIHRoZSBgcmVsZWFzZWAgdHJlZSByZWFkeSB0byBnbyB1cHN0cmVhbS4gIFRoaXMgaXMgd2hlcmUgeW91CitzZWUgdGhlIHZhbHVlIG9mIGtlZXBpbmcgZWFjaCBwYXRjaCAob3IgcGF0Y2ggc2VyaWVzKSBpbiBpdHMgb3duIGJyYW5jaC4gIEl0CittZWFucyB0aGF0IHRoZSBwYXRjaGVzIGNhbiBiZSBtb3ZlZCBpbnRvIHRoZSBgcmVsZWFzZWAgdHJlZSBpbiBhbnkgb3JkZXIuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCByZWxlYXNlICYmIGdpdCBtZXJnZSBzcGVlZC11cC1zcGlubG9ja3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgYSB3aGlsZSwgeW91IHdpbGwgaGF2ZSBhIG51bWJlciBvZiBicmFuY2hlcywgYW5kIGRlc3BpdGUgdGhlCit3ZWxsIGNob3NlbiBuYW1lcyB5b3UgcGlja2VkIGZvciBlYWNoIG9mIHRoZW0sIHlvdSBtYXkgZm9yZ2V0IHdoYXQKK3RoZXkgYXJlIGZvciwgb3Igd2hhdCBzdGF0dXMgdGhleSBhcmUgaW4uICBUbyBnZXQgYSByZW1pbmRlciBvZiB3aGF0CitjaGFuZ2VzIGFyZSBpbiBhIHNwZWNpZmljIGJyYW5jaCwgdXNlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgbGludXguLmJyYW5jaG5hbWUgfCBnaXQgc2hvcnRsb2cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gc2VlIHdoZXRoZXIgaXQgaGFzIGFscmVhZHkgYmVlbiBtZXJnZWQgaW50byB0aGUgdGVzdCBvciByZWxlYXNlIGJyYW5jaGVzLAordXNlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgdGVzdC4uYnJhbmNobmFtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvcgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgcmVsZWFzZS4uYnJhbmNobmFtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoSWYgdGhpcyBicmFuY2ggaGFzIG5vdCB5ZXQgYmVlbiBtZXJnZWQsIHlvdSB3aWxsIHNlZSBzb21lIGxvZyBlbnRyaWVzLgorSWYgaXQgaGFzIGJlZW4gbWVyZ2VkLCB0aGVuIHRoZXJlIHdpbGwgYmUgbm8gb3V0cHV0LikKKworT25jZSBhIHBhdGNoIGNvbXBsZXRlcyB0aGUgZ3JlYXQgY3ljbGUgKG1vdmluZyBmcm9tIHRlc3QgdG8gcmVsZWFzZSwKK3RoZW4gcHVsbGVkIGJ5IExpbnVzLCBhbmQgZmluYWxseSBjb21pbmcgYmFjayBpbnRvIHlvdXIgbG9jYWwKK2BvcmlnaW4vbWFzdGVyYCBicmFuY2gpLCB0aGUgYnJhbmNoIGZvciB0aGlzIGNoYW5nZSBpcyBubyBsb25nZXIgbmVlZGVkLgorWW91IGRldGVjdCB0aGlzIHdoZW4gdGhlIG91dHB1dCBmcm9tOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgb3JpZ2luLi5icmFuY2huYW1lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lzIGVtcHR5LiAgQXQgdGhpcyBwb2ludCB0aGUgYnJhbmNoIGNhbiBiZSBkZWxldGVkOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggLWQgYnJhbmNobmFtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21lIGNoYW5nZXMgYXJlIHNvIHRyaXZpYWwgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIHNlcGFyYXRlCiticmFuY2ggYW5kIHRoZW4gbWVyZ2UgaW50byBlYWNoIG9mIHRoZSB0ZXN0IGFuZCByZWxlYXNlIGJyYW5jaGVzLiAgRm9yCit0aGVzZSBjaGFuZ2VzLCBqdXN0IGFwcGx5IGRpcmVjdGx5IHRvIHRoZSBgcmVsZWFzZWAgYnJhbmNoLCBhbmQgdGhlbgorbWVyZ2UgdGhhdCBpbnRvIHRoZSBgdGVzdGAgYnJhbmNoLgorCitBZnRlciBwdXNoaW5nIHlvdXIgd29yayB0byBgbXl0cmVlYCwgeW91IGNhbiB1c2UKK2xpbmtnaXQ6Z2l0LXJlcXVlc3QtcHVsbFsxXSB0byBwcmVwYXJlIGEgInBsZWFzZSBwdWxsIiByZXF1ZXN0IG1lc3NhZ2UKK3RvIHNlbmQgdG8gTGludXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggbXl0cmVlCiskIGdpdCByZXF1ZXN0LXB1bGwgb3JpZ2luIG15dHJlZSByZWxlYXNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hlcmUgYXJlIHNvbWUgb2YgdGhlIHNjcmlwdHMgdGhhdCBzaW1wbGlmeSBhbGwgdGhpcyBldmVuIGZ1cnRoZXIuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKz09PT0gdXBkYXRlIHNjcmlwdCA9PT09CisjIFVwZGF0ZSBhIGJyYW5jaCBpbiBteSBHaXQgdHJlZS4gIElmIHRoZSBicmFuY2ggdG8gYmUgdXBkYXRlZAorIyBpcyBvcmlnaW4sIHRoZW4gcHVsbCBmcm9tIGtlcm5lbC5vcmcuICBPdGhlcndpc2UgbWVyZ2UKKyMgb3JpZ2luL21hc3RlciBicmFuY2ggaW50byB0ZXN0fHJlbGVhc2UgYnJhbmNoCisKK2Nhc2UgIiQxIiBpbgordGVzdHxyZWxlYXNlKQorCWdpdCBjaGVja291dCAkMSAmJiBnaXQgcHVsbCAuIG9yaWdpbgorCTs7CitvcmlnaW4pCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikKKwlnaXQgZmV0Y2ggb3JpZ2luCisJYWZ0ZXI9JChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKQorCWlmIFsgJGJlZm9yZSAhPSAkYWZ0ZXIgXQorCXRoZW4KKwkJZ2l0IGxvZyAkYmVmb3JlLi4kYWZ0ZXIgfCBnaXQgc2hvcnRsb2cKKwlmaQorCTs7CisqKQorCWVjaG8gInVzYWdlOiAkMCBvcmlnaW58dGVzdHxyZWxlYXNlIiAxPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPT09PSBtZXJnZSBzY3JpcHQgPT09PQorIyBNZXJnZSBhIGJyYW5jaCBpbnRvIGVpdGhlciB0aGUgdGVzdCBvciByZWxlYXNlIGJyYW5jaAorCitwbmFtZT0kMAorCit1c2FnZSgpCit7CisJZWNobyAidXNhZ2U6ICRwbmFtZSBicmFuY2ggdGVzdHxyZWxlYXNlIiAxPiYyCisJZXhpdCAxCit9CisKK2dpdCBzaG93LXJlZiAtcSAtLXZlcmlmeSAtLSByZWZzL2hlYWRzLyIkMSIgfHwgeworCWVjaG8gIkNhbid0IHNlZSBicmFuY2ggPCQxPiIgMT4mMgorCXVzYWdlCit9CisKK2Nhc2UgIiQyIiBpbgordGVzdHxyZWxlYXNlKQorCWlmIFsgJChnaXQgbG9nICQyLi4kMSB8IHdjIC1jKSAtZXEgMCBdCisJdGhlbgorCQllY2hvICQxIGFscmVhZHkgbWVyZ2VkIGludG8gJDIgMT4mMgorCQlleGl0IDEKKwlmaQorCWdpdCBjaGVja291dCAkMiAmJiBnaXQgcHVsbCAuICQxCisJOzsKKyopCisJdXNhZ2UKKwk7OworZXNhYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09IHN0YXR1cyBzY3JpcHQgPT09PQorIyByZXBvcnQgb24gc3RhdHVzIG9mIG15IGlhNjQgR2l0IHRyZWUKKworZ2I9JCh0cHV0IHNldGFiIDIpCityYj0kKHRwdXQgc2V0YWIgMSkKK3Jlc3RvcmU9JCh0cHV0IHNldGFiIDkpCisKK2lmIFsgYGdpdCByZXYtbGlzdCB0ZXN0Li5yZWxlYXNlIHwgd2MgLWNgIC1ndCAwIF0KK3RoZW4KKwllY2hvICRyYiBXYXJuaW5nOiBjb21taXRzIGluIHJlbGVhc2UgdGhhdCBhcmUgbm90IGluIHRlc3QgJHJlc3RvcmUKKwlnaXQgbG9nIHRlc3QuLnJlbGVhc2UKK2ZpCisKK2ZvciBicmFuY2ggaW4gYGdpdCBzaG93LXJlZiAtLWhlYWRzIHwgc2VkICdzfF4uKi98fCdgCitkbworCWlmIFsgJGJyYW5jaCA9IHRlc3QgLW8gJGJyYW5jaCA9IHJlbGVhc2UgXQorCXRoZW4KKwkJY29udGludWUKKwlmaQorCisJZWNobyAtbiAkZ2IgPT09PT09PSAkYnJhbmNoID09PT09PSAkcmVzdG9yZSAiICIKKwlzdGF0dXM9CisJZm9yIHJlZiBpbiB0ZXN0IHJlbGVhc2Ugb3JpZ2luL21hc3RlcgorCWRvCisJCWlmIFsgYGdpdCByZXYtbGlzdCAkcmVmLi4kYnJhbmNoIHwgd2MgLWNgIC1ndCAwIF0KKwkJdGhlbgorCQkJc3RhdHVzPSRzdGF0dXMke3JlZjowOjF9CisJCWZpCisJZG9uZQorCWNhc2UgJHN0YXR1cyBpbgorCXRybCkKKwkJZWNobyAkcmIgTmVlZCB0byBwdWxsIGludG8gdGVzdCAkcmVzdG9yZQorCQk7OworCXJsKQorCQllY2hvICJJbiB0ZXN0IgorCQk7OworCWwpCisJCWVjaG8gIldhaXRpbmcgZm9yIGxpbnVzIgorCQk7OworCSIiKQorCQllY2hvICRyYiBBbGwgZG9uZSAkcmVzdG9yZQorCQk7OworCSopCisJCWVjaG8gJHJiICI8JHN0YXR1cz4iICRyZXN0b3JlCisJCTs7CisJZXNhYworCWdpdCBsb2cgb3JpZ2luL21hc3Rlci4uJGJyYW5jaCB8IGdpdCBzaG9ydGxvZworZG9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1tbY2xlYW5pbmctdXAtaGlzdG9yeV1dCis9PSBSZXdyaXRpbmcgaGlzdG9yeSBhbmQgbWFpbnRhaW5pbmcgcGF0Y2ggc2VyaWVzCisKK05vcm1hbGx5IGNvbW1pdHMgYXJlIG9ubHkgYWRkZWQgdG8gYSBwcm9qZWN0LCBuZXZlciB0YWtlbiBhd2F5IG9yCityZXBsYWNlZC4gIEdpdCBpcyBkZXNpZ25lZCB3aXRoIHRoaXMgYXNzdW1wdGlvbiwgYW5kIHZpb2xhdGluZyBpdCB3aWxsCitjYXVzZSBHaXQncyBtZXJnZSBtYWNoaW5lcnkgKGZvciBleGFtcGxlKSB0byBkbyB0aGUgd3JvbmcgdGhpbmcuCisKK0hvd2V2ZXIsIHRoZXJlIGlzIGEgc2l0dWF0aW9uIGluIHdoaWNoIGl0IGNhbiBiZSB1c2VmdWwgdG8gdmlvbGF0ZSB0aGlzCithc3N1bXB0aW9uLgorCitbW3BhdGNoLXNlcmllc11dCis9PT0gQ3JlYXRpbmcgdGhlIHBlcmZlY3QgcGF0Y2ggc2VyaWVzCisKK1N1cHBvc2UgeW91IGFyZSBhIGNvbnRyaWJ1dG9yIHRvIGEgbGFyZ2UgcHJvamVjdCwgYW5kIHlvdSB3YW50IHRvIGFkZCBhCitjb21wbGljYXRlZCBmZWF0dXJlLCBhbmQgdG8gcHJlc2VudCBpdCB0byB0aGUgb3RoZXIgZGV2ZWxvcGVycyBpbiBhIHdheQordGhhdCBtYWtlcyBpdCBlYXN5IGZvciB0aGVtIHRvIHJlYWQgeW91ciBjaGFuZ2VzLCB2ZXJpZnkgdGhhdCB0aGV5IGFyZQorY29ycmVjdCwgYW5kIHVuZGVyc3RhbmQgd2h5IHlvdSBtYWRlIGVhY2ggY2hhbmdlLgorCitJZiB5b3UgcHJlc2VudCBhbGwgb2YgeW91ciBjaGFuZ2VzIGFzIGEgc2luZ2xlIHBhdGNoIChvciBjb21taXQpLCB0aGV5CittYXkgZmluZCB0aGF0IGl0IGlzIHRvbyBtdWNoIHRvIGRpZ2VzdCBhbGwgYXQgb25jZS4KKworSWYgeW91IHByZXNlbnQgdGhlbSB3aXRoIHRoZSBlbnRpcmUgaGlzdG9yeSBvZiB5b3VyIHdvcmssIGNvbXBsZXRlIHdpdGgKK21pc3Rha2VzLCBjb3JyZWN0aW9ucywgYW5kIGRlYWQgZW5kcywgdGhleSBtYXkgYmUgb3ZlcndoZWxtZWQuCisKK1NvIHRoZSBpZGVhbCBpcyB1c3VhbGx5IHRvIHByb2R1Y2UgYSBzZXJpZXMgb2YgcGF0Y2hlcyBzdWNoIHRoYXQ6CisKKwkxLiBFYWNoIHBhdGNoIGNhbiBiZSBhcHBsaWVkIGluIG9yZGVyLgorCisJMi4gRWFjaCBwYXRjaCBpbmNsdWRlcyBhIHNpbmdsZSBsb2dpY2FsIGNoYW5nZSwgdG9nZXRoZXIgd2l0aCBhCisJICAgbWVzc2FnZSBleHBsYWluaW5nIHRoZSBjaGFuZ2UuCisKKwkzLiBObyBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVncmVzc2lvbjogYWZ0ZXIgYXBwbHlpbmcgYW55IGluaXRpYWwKKwkgICBwYXJ0IG9mIHRoZSBzZXJpZXMsIHRoZSByZXN1bHRpbmcgcHJvamVjdCBzdGlsbCBjb21waWxlcyBhbmQKKwkgICB3b3JrcywgYW5kIGhhcyBubyBidWdzIHRoYXQgaXQgZGlkbid0IGhhdmUgYmVmb3JlLgorCisJNC4gVGhlIGNvbXBsZXRlIHNlcmllcyBwcm9kdWNlcyB0aGUgc2FtZSBlbmQgcmVzdWx0IGFzIHlvdXIgb3duCisJICAgKHByb2JhYmx5IG11Y2ggbWVzc2llciEpIGRldmVsb3BtZW50IHByb2Nlc3MgZGlkLgorCitXZSB3aWxsIGludHJvZHVjZSBzb21lIHRvb2xzIHRoYXQgY2FuIGhlbHAgeW91IGRvIHRoaXMsIGV4cGxhaW4gaG93IHRvCit1c2UgdGhlbSwgYW5kIHRoZW4gZXhwbGFpbiBzb21lIG9mIHRoZSBwcm9ibGVtcyB0aGF0IGNhbiBhcmlzZSBiZWNhdXNlCit5b3UgYXJlIHJld3JpdGluZyBoaXN0b3J5LgorCitbW3VzaW5nLWdpdC1yZWJhc2VdXQorPT09IEtlZXBpbmcgYSBwYXRjaCBzZXJpZXMgdXAgdG8gZGF0ZSB1c2luZyBnaXQgcmViYXNlCisKK1N1cHBvc2UgdGhhdCB5b3UgY3JlYXRlIGEgYnJhbmNoIGBteXdvcmtgIG9uIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaAorYG9yaWdpbmAsIGFuZCBjcmVhdGUgc29tZSBjb21taXRzIG9uIHRvcCBvZiBpdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIC1jIG15d29yayBvcmlnaW4KKyQgdmkgZmlsZS50eHQKKyQgZ2l0IGNvbW1pdAorJCB2aSBvdGhlcmZpbGUudHh0CiskIGdpdCBjb21taXQKKy4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgaGF2ZSBwZXJmb3JtZWQgbm8gbWVyZ2VzIGludG8gbXl3b3JrLCBzbyBpdCBpcyBqdXN0IGEgc2ltcGxlIGxpbmVhcgorc2VxdWVuY2Ugb2YgcGF0Y2hlcyBvbiB0b3Agb2YgYG9yaWdpbmA6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIG8tLW8tLU8gPC0tIG9yaWdpbgorICAgICAgICBcCisJIGEtLWItLWMgPC0tIG15d29yaworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1NvbWUgbW9yZSBpbnRlcmVzdGluZyB3b3JrIGhhcyBiZWVuIGRvbmUgaW4gdGhlIHVwc3RyZWFtIHByb2plY3QsIGFuZAorYG9yaWdpbmAgaGFzIGFkdmFuY2VkOgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBvLS1vLS1PLS1vLS1vLS1vIDwtLSBvcmlnaW4KKyAgICAgICAgXAorICAgICAgICAgYS0tYi0tYyA8LS0gbXl3b3JrCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQXQgdGhpcyBwb2ludCwgeW91IGNvdWxkIHVzZSBgcHVsbGAgdG8gbWVyZ2UgeW91ciBjaGFuZ2VzIGJhY2sgaW47Cit0aGUgcmVzdWx0IHdvdWxkIGNyZWF0ZSBhIG5ldyBtZXJnZSBjb21taXQsIGxpa2UgdGhpczoKKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgby0tby0tTy0tby0tby0tbyA8LS0gb3JpZ2luCisgICAgICAgIFwgICAgICAgIFwKKyAgICAgICAgIGEtLWItLWMtLW0gPC0tIG15d29yaworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0hvd2V2ZXIsIGlmIHlvdSBwcmVmZXIgdG8ga2VlcCB0aGUgaGlzdG9yeSBpbiBteXdvcmsgYSBzaW1wbGUgc2VyaWVzIG9mCitjb21taXRzIHdpdGhvdXQgYW55IG1lcmdlcywgeW91IG1heSBpbnN0ZWFkIGNob29zZSB0byB1c2UKK2xpbmtnaXQ6Z2l0LXJlYmFzZVsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIG15d29yaworJCBnaXQgcmViYXNlIG9yaWdpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdpbGwgcmVtb3ZlIGVhY2ggb2YgeW91ciBjb21taXRzIGZyb20gbXl3b3JrLCB0ZW1wb3JhcmlseSBzYXZpbmcKK3RoZW0gYXMgcGF0Y2hlcyAoaW4gYSBkaXJlY3RvcnkgbmFtZWQgYC5naXQvcmViYXNlLWFwcGx5YCksIHVwZGF0ZSBteXdvcmsgdG8KK3BvaW50IGF0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBvcmlnaW4sIHRoZW4gYXBwbHkgZWFjaCBvZiB0aGUgc2F2ZWQKK3BhdGNoZXMgdG8gdGhlIG5ldyBteXdvcmsuICBUaGUgcmVzdWx0IHdpbGwgbG9vayBsaWtlOgorCisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIG8tLW8tLU8tLW8tLW8tLW8gPC0tIG9yaWdpbgorCQkgXAorCQkgIGEnLS1iJy0tYycgPC0tIG15d29yaworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0luIHRoZSBwcm9jZXNzLCBpdCBtYXkgZGlzY292ZXIgY29uZmxpY3RzLiAgSW4gdGhhdCBjYXNlIGl0IHdpbGwgc3RvcAorYW5kIGFsbG93IHlvdSB0byBmaXggdGhlIGNvbmZsaWN0czsgYWZ0ZXIgZml4aW5nIGNvbmZsaWN0cywgdXNlIGBnaXQgYWRkYAordG8gdXBkYXRlIHRoZSBpbmRleCB3aXRoIHRob3NlIGNvbnRlbnRzLCBhbmQgdGhlbiwgaW5zdGVhZCBvZgorcnVubmluZyBgZ2l0IGNvbW1pdGAsIGp1c3QgcnVuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCBHaXQgd2lsbCBjb250aW51ZSBhcHBseWluZyB0aGUgcmVzdCBvZiB0aGUgcGF0Y2hlcy4KKworQXQgYW55IHBvaW50IHlvdSBtYXkgdXNlIHRoZSBgLS1hYm9ydGAgb3B0aW9uIHRvIGFib3J0IHRoaXMgcHJvY2VzcyBhbmQKK3JldHVybiBteXdvcmsgdG8gdGhlIHN0YXRlIGl0IGhhZCBiZWZvcmUgeW91IHN0YXJ0ZWQgdGhlIHJlYmFzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmViYXNlIC0tYWJvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IG5lZWQgdG8gcmVvcmRlciBvciBlZGl0IGEgbnVtYmVyIG9mIGNvbW1pdHMgaW4gYSBicmFuY2gsIGl0IG1heQorYmUgZWFzaWVyIHRvIHVzZSBgZ2l0IHJlYmFzZSAtaWAsIHdoaWNoIGFsbG93cyB5b3UgdG8gcmVvcmRlciBhbmQKK3NxdWFzaCBjb21taXRzLCBhcyB3ZWxsIGFzIG1hcmtpbmcgdGhlbSBmb3IgaW5kaXZpZHVhbCBlZGl0aW5nIGR1cmluZwordGhlIHJlYmFzZS4gIFNlZSA8PGludGVyYWN0aXZlLXJlYmFzZT4+IGZvciBkZXRhaWxzLCBhbmQKKzw8cmVvcmRlcmluZy1wYXRjaC1zZXJpZXM+PiBmb3IgYWx0ZXJuYXRpdmVzLgorCitbW3Jld3JpdGluZy1vbmUtY29tbWl0XV0KKz09PSBSZXdyaXRpbmcgYSBzaW5nbGUgY29tbWl0CisKK1dlIHNhdyBpbiA8PGZpeGluZy1hLW1pc3Rha2UtYnktcmV3cml0aW5nLWhpc3Rvcnk+PiB0aGF0IHlvdSBjYW4gcmVwbGFjZSB0aGUKK21vc3QgcmVjZW50IGNvbW1pdCB1c2luZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQgLS1hbWVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIHJlcGxhY2UgdGhlIG9sZCBjb21taXQgYnkgYSBuZXcgY29tbWl0IGluY29ycG9yYXRpbmcgeW91cgorY2hhbmdlcywgZ2l2aW5nIHlvdSBhIGNoYW5jZSB0byBlZGl0IHRoZSBvbGQgY29tbWl0IG1lc3NhZ2UgZmlyc3QuCitUaGlzIGlzIHVzZWZ1bCBmb3IgZml4aW5nIHR5cG9zIGluIHlvdXIgbGFzdCBjb21taXQsIG9yIGZvciBhZGp1c3RpbmcKK3RoZSBwYXRjaCBjb250ZW50cyBvZiBhIHBvb3JseSBzdGFnZWQgY29tbWl0LgorCitJZiB5b3UgbmVlZCB0byBhbWVuZCBjb21taXRzIGZyb20gZGVlcGVyIGluIHlvdXIgaGlzdG9yeSwgeW91IGNhbgordXNlIDw8aW50ZXJhY3RpdmUtcmViYXNlLGludGVyYWN0aXZlIHJlYmFzZSdzIGBlZGl0YCBpbnN0cnVjdGlvbj4+LgorCitbW3Jlb3JkZXJpbmctcGF0Y2gtc2VyaWVzXV0KKz09PSBSZW9yZGVyaW5nIG9yIHNlbGVjdGluZyBmcm9tIGEgcGF0Y2ggc2VyaWVzCisKK1NvbWV0aW1lcyB5b3Ugd2FudCB0byBlZGl0IGEgY29tbWl0IGRlZXBlciBpbiB5b3VyIGhpc3RvcnkuICBPbmUKK2FwcHJvYWNoIGlzIHRvIHVzZSBgZ2l0IGZvcm1hdC1wYXRjaGAgdG8gY3JlYXRlIGEgc2VyaWVzIG9mIHBhdGNoZXMKK2FuZCB0aGVuIHJlc2V0IHRoZSBzdGF0ZSB0byBiZWZvcmUgdGhlIHBhdGNoZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZvcm1hdC1wYXRjaCBvcmlnaW4KKyQgZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlbiBtb2RpZnksIHJlb3JkZXIsIG9yIGVsaW1pbmF0ZSBwYXRjaGVzIGFzIG5lZWRlZCBiZWZvcmUgYXBwbHlpbmcKK3RoZW0gYWdhaW4gd2l0aCBsaW5rZ2l0OmdpdC1hbVsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYW0gKi5wYXRjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW2ludGVyYWN0aXZlLXJlYmFzZV1dCis9PT0gVXNpbmcgaW50ZXJhY3RpdmUgcmViYXNlcworCitZb3UgY2FuIGFsc28gZWRpdCBhIHBhdGNoIHNlcmllcyB3aXRoIGFuIGludGVyYWN0aXZlIHJlYmFzZS4gIFRoaXMgaXMKK3RoZSBzYW1lIGFzIDw8cmVvcmRlcmluZy1wYXRjaC1zZXJpZXMscmVvcmRlcmluZyBhIHBhdGNoIHNlcmllcyB1c2luZworYGZvcm1hdC1wYXRjaGA+Piwgc28gdXNlIHdoaWNoZXZlciBpbnRlcmZhY2UgeW91IGxpa2UgYmVzdC4KKworUmViYXNlIHlvdXIgY3VycmVudCBIRUFEIG9uIHRoZSBsYXN0IGNvbW1pdCB5b3Ugd2FudCB0byByZXRhaW4gYXMtaXMuCitGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gcmVvcmRlciB0aGUgbGFzdCA1IGNvbW1pdHMsIHVzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmViYXNlIC1pIEhFQUR+NQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdpbGwgb3BlbiB5b3VyIGVkaXRvciB3aXRoIGEgbGlzdCBvZiBzdGVwcyB0byBiZSB0YWtlbiB0byBwZXJmb3JtCit5b3VyIHJlYmFzZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGljayBkZWFkYmVlIFRoZSBvbmVsaW5lIG9mIHRoaXMgY29tbWl0CitwaWNrIGZhMWFmZTEgVGhlIG9uZWxpbmUgb2YgdGhlIG5leHQgY29tbWl0CisuLi4KKworIyBSZWJhc2UgYzBmZmVlZS4uZGVhZGJlZSBvbnRvIGMwZmZlZWUKKyMKKyMgQ29tbWFuZHM6CisjICBwLCBwaWNrID0gdXNlIGNvbW1pdAorIyAgciwgcmV3b3JkID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlCisjICBlLCBlZGl0ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nCisjICBzLCBzcXVhc2ggPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdAorIyAgZiwgZml4dXAgPSBsaWtlICJzcXVhc2giLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlCisjICB4LCBleGVjID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbAorIworIyBUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLgorIworIyBJZiB5b3UgcmVtb3ZlIGEgbGluZSBoZXJlIFRIQVQgQ09NTUlUIFdJTEwgQkUgTE9TVC4KKyMKKyMgSG93ZXZlciwgaWYgeW91IHJlbW92ZSBldmVyeXRoaW5nLCB0aGUgcmViYXNlIHdpbGwgYmUgYWJvcnRlZC4KKyMKKyMgTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgZXhwbGFpbmVkIGluIHRoZSBjb21tZW50cywgeW91IGNhbiByZW9yZGVyIGNvbW1pdHMsIHNxdWFzaCB0aGVtCit0b2dldGhlciwgZWRpdCBjb21taXQgbWVzc2FnZXMsIGV0Yy4gYnkgZWRpdGluZyB0aGUgbGlzdC4gIE9uY2UgeW91CithcmUgc2F0aXNmaWVkLCBzYXZlIHRoZSBsaXN0IGFuZCBjbG9zZSB5b3VyIGVkaXRvciwgYW5kIHRoZSByZWJhc2UKK3dpbGwgYmVnaW4uCisKK1RoZSByZWJhc2Ugd2lsbCBzdG9wIHdoZXJlIGBwaWNrYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBlZGl0YCBvcgord2hlbiBhIHN0ZXAgaW4gdGhlIGxpc3QgZmFpbHMgdG8gbWVjaGFuaWNhbGx5IHJlc29sdmUgY29uZmxpY3RzIGFuZAorbmVlZHMgeW91ciBoZWxwLiAgV2hlbiB5b3UgYXJlIGRvbmUgZWRpdGluZyBhbmQvb3IgcmVzb2x2aW5nIGNvbmZsaWN0cworeW91IGNhbiBjb250aW51ZSB3aXRoIGBnaXQgcmViYXNlIC0tY29udGludWVgLiAgSWYgeW91IGRlY2lkZSB0aGF0Cit0aGluZ3MgYXJlIGdldHRpbmcgdG9vIGhhaXJ5LCB5b3UgY2FuIGFsd2F5cyBiYWlsIG91dCB3aXRoIGBnaXQgcmViYXNlCistLWFib3J0YC4gIEV2ZW4gYWZ0ZXIgdGhlIHJlYmFzZSBpcyBjb21wbGV0ZSwgeW91IGNhbiBzdGlsbCByZWNvdmVyCit0aGUgb3JpZ2luYWwgYnJhbmNoIGJ5IHVzaW5nIHRoZSA8PHJlZmxvZ3MscmVmbG9nPj4uCisKK0ZvciBhIG1vcmUgZGV0YWlsZWQgZGlzY3Vzc2lvbiBvZiB0aGUgcHJvY2VkdXJlIGFuZCBhZGRpdGlvbmFsIHRpcHMsCitzZWUgdGhlICJJTlRFUkFDVElWRSBNT0RFIiBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXS4KKworW1twYXRjaC1zZXJpZXMtdG9vbHNdXQorPT09IE90aGVyIHRvb2xzCisKK1RoZXJlIGFyZSBudW1lcm91cyBvdGhlciB0b29scywgc3VjaCBhcyBTdEdpdCwgd2hpY2ggZXhpc3QgZm9yIHRoZQorcHVycG9zZSBvZiBtYWludGFpbmluZyBhIHBhdGNoIHNlcmllcy4gIFRoZXNlIGFyZSBvdXRzaWRlIG9mIHRoZSBzY29wZSBvZgordGhpcyBtYW51YWwuCisKK1tbcHJvYmxlbXMtV2l0aC1yZXdyaXRpbmctaGlzdG9yeV1dCis9PT0gUHJvYmxlbXMgd2l0aCByZXdyaXRpbmcgaGlzdG9yeQorCitUaGUgcHJpbWFyeSBwcm9ibGVtIHdpdGggcmV3cml0aW5nIHRoZSBoaXN0b3J5IG9mIGEgYnJhbmNoIGhhcyB0byBkbword2l0aCBtZXJnaW5nLiAgU3VwcG9zZSBzb21lYm9keSBmZXRjaGVzIHlvdXIgYnJhbmNoIGFuZCBtZXJnZXMgaXQgaW50bwordGhlaXIgYnJhbmNoLCB3aXRoIGEgcmVzdWx0IHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIG8tLW8tLU8tLW8tLW8tLW8gPC0tIG9yaWdpbgorICAgICAgICBcICAgICAgICBcCisgICAgICAgICB0LS10LS10LS1tIDwtLSB0aGVpciBicmFuY2g6CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworVGhlbiBzdXBwb3NlIHlvdSBtb2RpZnkgdGhlIGxhc3QgdGhyZWUgY29tbWl0czoKKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisJIG8tLW8tLW8gPC0tIG5ldyBoZWFkIG9mIG9yaWdpbgorCS8KKyBvLS1vLS1PLS1vLS1vLS1vIDwtLSBvbGQgaGVhZCBvZiBvcmlnaW4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitJZiB3ZSBleGFtaW5lZCBhbGwgdGhpcyBoaXN0b3J5IHRvZ2V0aGVyIGluIG9uZSByZXBvc2l0b3J5LCBpdCB3aWxsCitsb29rIGxpa2U6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCSBvLS1vLS1vIDwtLSBuZXcgaGVhZCBvZiBvcmlnaW4KKwkvCisgby0tby0tTy0tby0tby0tbyA8LS0gb2xkIGhlYWQgb2Ygb3JpZ2luCisgICAgICAgIFwgICAgICAgIFwKKyAgICAgICAgIHQtLXQtLXQtLW0gPC0tIHRoZWlyIGJyYW5jaDoKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHaXQgaGFzIG5vIHdheSBvZiBrbm93aW5nIHRoYXQgdGhlIG5ldyBoZWFkIGlzIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZgordGhlIG9sZCBoZWFkOyBpdCB0cmVhdHMgdGhpcyBzaXR1YXRpb24gZXhhY3RseSB0aGUgc2FtZSBhcyBpdCB3b3VsZCBpZgordHdvIGRldmVsb3BlcnMgaGFkIGluZGVwZW5kZW50bHkgZG9uZSB0aGUgd29yayBvbiB0aGUgb2xkIGFuZCBuZXcgaGVhZHMKK2luIHBhcmFsbGVsLiAgQXQgdGhpcyBwb2ludCwgaWYgc29tZW9uZSBhdHRlbXB0cyB0byBtZXJnZSB0aGUgbmV3IGhlYWQKK2luIHRvIHRoZWlyIGJyYW5jaCwgR2l0IHdpbGwgYXR0ZW1wdCB0byBtZXJnZSB0b2dldGhlciB0aGUgdHdvIChvbGQgYW5kCituZXcpIGxpbmVzIG9mIGRldmVsb3BtZW50LCBpbnN0ZWFkIG9mIHRyeWluZyB0byByZXBsYWNlIHRoZSBvbGQgYnkgdGhlCituZXcuICBUaGUgcmVzdWx0cyBhcmUgbGlrZWx5IHRvIGJlIHVuZXhwZWN0ZWQuCisKK1lvdSBtYXkgc3RpbGwgY2hvb3NlIHRvIHB1Ymxpc2ggYnJhbmNoZXMgd2hvc2UgaGlzdG9yeSBpcyByZXdyaXR0ZW4sCithbmQgaXQgbWF5IGJlIHVzZWZ1bCBmb3Igb3RoZXJzIHRvIGJlIGFibGUgdG8gZmV0Y2ggdGhvc2UgYnJhbmNoZXMgaW4KK29yZGVyIHRvIGV4YW1pbmUgb3IgdGVzdCB0aGVtLCBidXQgdGhleSBzaG91bGQgbm90IGF0dGVtcHQgdG8gcHVsbCBzdWNoCiticmFuY2hlcyBpbnRvIHRoZWlyIG93biB3b3JrLgorCitGb3IgdHJ1ZSBkaXN0cmlidXRlZCBkZXZlbG9wbWVudCB0aGF0IHN1cHBvcnRzIHByb3BlciBtZXJnaW5nLAorcHVibGlzaGVkIGJyYW5jaGVzIHNob3VsZCBuZXZlciBiZSByZXdyaXR0ZW4uCisKK1tbYmlzZWN0LW1lcmdlc11dCis9PT0gV2h5IGJpc2VjdGluZyBtZXJnZSBjb21taXRzIGNhbiBiZSBoYXJkZXIgdGhhbiBiaXNlY3RpbmcgbGluZWFyIGhpc3RvcnkKKworVGhlIGxpbmtnaXQ6Z2l0LWJpc2VjdFsxXSBjb21tYW5kIGNvcnJlY3RseSBoYW5kbGVzIGhpc3RvcnkgdGhhdAoraW5jbHVkZXMgbWVyZ2UgY29tbWl0cy4gIEhvd2V2ZXIsIHdoZW4gdGhlIGNvbW1pdCB0aGF0IGl0IGZpbmRzIGlzIGEKK21lcmdlIGNvbW1pdCwgdGhlIHVzZXIgbWF5IG5lZWQgdG8gd29yayBoYXJkZXIgdGhhbiB1c3VhbCB0byBmaWd1cmUgb3V0Cit3aHkgdGhhdCBjb21taXQgaW50cm9kdWNlZCBhIHByb2JsZW0uCisKK0ltYWdpbmUgdGhpcyBoaXN0b3J5OgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgICAgIC0tLVotLS1vLS0tWC0tLS4uLi0tLW8tLS1BLS0tQy0tLUQKKyAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAgICAvCisgICAgICAgICAgIG8tLS1vLS0tWS0tLS4uLi0tLW8tLS1CCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworU3VwcG9zZSB0aGF0IG9uIHRoZSB1cHBlciBsaW5lIG9mIGRldmVsb3BtZW50LCB0aGUgbWVhbmluZyBvZiBvbmUKK29mIHRoZSBmdW5jdGlvbnMgdGhhdCBleGlzdHMgYXQgWiBpcyBjaGFuZ2VkIGF0IGNvbW1pdCBYLiAgVGhlCitjb21taXRzIGZyb20gWiBsZWFkaW5nIHRvIEEgY2hhbmdlIGJvdGggdGhlIGZ1bmN0aW9uJ3MKK2ltcGxlbWVudGF0aW9uIGFuZCBhbGwgY2FsbGluZyBzaXRlcyB0aGF0IGV4aXN0IGF0IFosIGFzIHdlbGwKK2FzIG5ldyBjYWxsaW5nIHNpdGVzIHRoZXkgYWRkLCB0byBiZSBjb25zaXN0ZW50LiAgVGhlcmUgaXMgbm8KK2J1ZyBhdCBBLgorCitTdXBwb3NlIHRoYXQgaW4gdGhlIG1lYW50aW1lIG9uIHRoZSBsb3dlciBsaW5lIG9mIGRldmVsb3BtZW50IHNvbWVib2R5CithZGRzIGEgbmV3IGNhbGxpbmcgc2l0ZSBmb3IgdGhhdCBmdW5jdGlvbiBhdCBjb21taXQgWS4gIFRoZQorY29tbWl0cyBmcm9tIFogbGVhZGluZyB0byBCIGFsbCBhc3N1bWUgdGhlIG9sZCBzZW1hbnRpY3Mgb2YgdGhhdAorZnVuY3Rpb24gYW5kIHRoZSBjYWxsZXJzIGFuZCB0aGUgY2FsbGVlIGFyZSBjb25zaXN0ZW50IHdpdGggZWFjaAorb3RoZXIuICBUaGVyZSBpcyBubyBidWcgYXQgQiwgZWl0aGVyLgorCitTdXBwb3NlIGZ1cnRoZXIgdGhhdCB0aGUgdHdvIGRldmVsb3BtZW50IGxpbmVzIG1lcmdlIGNsZWFubHkgYXQgQywKK3NvIG5vIGNvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuCisKK05ldmVydGhlbGVzcywgdGhlIGNvZGUgYXQgQyBpcyBicm9rZW4sIGJlY2F1c2UgdGhlIGNhbGxlcnMgYWRkZWQKK29uIHRoZSBsb3dlciBsaW5lIG9mIGRldmVsb3BtZW50IGhhdmUgbm90IGJlZW4gY29udmVydGVkIHRvIHRoZSBuZXcKK3NlbWFudGljcyBpbnRyb2R1Y2VkIG9uIHRoZSB1cHBlciBsaW5lIG9mIGRldmVsb3BtZW50LiAgU28gaWYgYWxsCit5b3Uga25vdyBpcyB0aGF0IEQgaXMgYmFkLCB0aGF0IFogaXMgZ29vZCwgYW5kIHRoYXQKK2xpbmtnaXQ6Z2l0LWJpc2VjdFsxXSBpZGVudGlmaWVzIEMgYXMgdGhlIGN1bHByaXQsIGhvdyB3aWxsIHlvdQorZmlndXJlIG91dCB0aGF0IHRoZSBwcm9ibGVtIGlzIGR1ZSB0byB0aGlzIGNoYW5nZSBpbiBzZW1hbnRpY3M/CisKK1doZW4gdGhlIHJlc3VsdCBvZiBhIGBnaXQgYmlzZWN0YCBpcyBhIG5vbi1tZXJnZSBjb21taXQsIHlvdSBzaG91bGQKK25vcm1hbGx5IGJlIGFibGUgdG8gZGlzY292ZXIgdGhlIHByb2JsZW0gYnkgZXhhbWluaW5nIGp1c3QgdGhhdCBjb21taXQuCitEZXZlbG9wZXJzIGNhbiBtYWtlIHRoaXMgZWFzeSBieSBicmVha2luZyB0aGVpciBjaGFuZ2VzIGludG8gc21hbGwKK3NlbGYtY29udGFpbmVkIGNvbW1pdHMuICBUaGF0IHdvbid0IGhlbHAgaW4gdGhlIGNhc2UgYWJvdmUsIGhvd2V2ZXIsCitiZWNhdXNlIHRoZSBwcm9ibGVtIGlzbid0IG9idmlvdXMgZnJvbSBleGFtaW5hdGlvbiBvZiBhbnkgc2luZ2xlCitjb21taXQ7IGluc3RlYWQsIGEgZ2xvYmFsIHZpZXcgb2YgdGhlIGRldmVsb3BtZW50IGlzIHJlcXVpcmVkLiAgVG8KK21ha2UgbWF0dGVycyB3b3JzZSwgdGhlIGNoYW5nZSBpbiBzZW1hbnRpY3MgaW4gdGhlIHByb2JsZW1hdGljCitmdW5jdGlvbiBtYXkgYmUganVzdCBvbmUgc21hbGwgcGFydCBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgdXBwZXIKK2xpbmUgb2YgZGV2ZWxvcG1lbnQuCisKK09uIHRoZSBvdGhlciBoYW5kLCBpZiBpbnN0ZWFkIG9mIG1lcmdpbmcgYXQgQyB5b3UgaGFkIHJlYmFzZWQgdGhlCitoaXN0b3J5IGJldHdlZW4gWiB0byBCIG9uIHRvcCBvZiBBLCB5b3Ugd291bGQgaGF2ZSBnb3R0ZW4gdGhpcworbGluZWFyIGhpc3Rvcnk6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyAgICAtLS1aLS0tby0tLVgtLS4uLi0tLW8tLS1BLS0tby0tLW8tLS1ZKi0tLi4uLS0tby0tLUIqLS1EKgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitCaXNlY3RpbmcgYmV0d2VlbiBaIGFuZCBEKiB3b3VsZCBoaXQgYSBzaW5nbGUgY3VscHJpdCBjb21taXQgWSosCithbmQgdW5kZXJzdGFuZGluZyB3aHkgWSogd2FzIGJyb2tlbiB3b3VsZCBwcm9iYWJseSBiZSBlYXNpZXIuCisKK1BhcnRseSBmb3IgdGhpcyByZWFzb24sIG1hbnkgZXhwZXJpZW5jZWQgR2l0IHVzZXJzLCBldmVuIHdoZW4KK3dvcmtpbmcgb24gYW4gb3RoZXJ3aXNlIG1lcmdlLWhlYXZ5IHByb2plY3QsIGtlZXAgdGhlIGhpc3RvcnkKK2xpbmVhciBieSByZWJhc2luZyBhZ2FpbnN0IHRoZSBsYXRlc3QgdXBzdHJlYW0gdmVyc2lvbiBiZWZvcmUKK3B1Ymxpc2hpbmcuCisKK1tbYWR2YW5jZWQtYnJhbmNoLW1hbmFnZW1lbnRdXQorPT0gQWR2YW5jZWQgYnJhbmNoIG1hbmFnZW1lbnQKKworW1tmZXRjaGluZy1pbmRpdmlkdWFsLWJyYW5jaGVzXV0KKz09PSBGZXRjaGluZyBpbmRpdmlkdWFsIGJyYW5jaGVzCisKK0luc3RlYWQgb2YgdXNpbmcgbGlua2dpdDpnaXQtcmVtb3RlWzFdLCB5b3UgY2FuIGFsc28gY2hvb3NlIGp1c3QKK3RvIHVwZGF0ZSBvbmUgYnJhbmNoIGF0IGEgdGltZSwgYW5kIHRvIHN0b3JlIGl0IGxvY2FsbHkgdW5kZXIgYW4KK2FyYml0cmFyeSBuYW1lOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCBvcmlnaW4gdG9kbzpteS10b2RvLXdvcmsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpcnN0IGFyZ3VtZW50LCBgb3JpZ2luYCwganVzdCB0ZWxscyBHaXQgdG8gZmV0Y2ggZnJvbSB0aGUKK3JlcG9zaXRvcnkgeW91IG9yaWdpbmFsbHkgY2xvbmVkIGZyb20uICBUaGUgc2Vjb25kIGFyZ3VtZW50IHRlbGxzIEdpdAordG8gZmV0Y2ggdGhlIGJyYW5jaCBuYW1lZCBgdG9kb2AgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnksIGFuZCB0bworc3RvcmUgaXQgbG9jYWxseSB1bmRlciB0aGUgbmFtZSBgcmVmcy9oZWFkcy9teS10b2RvLXdvcmtgLgorCitZb3UgY2FuIGFsc28gZmV0Y2ggYnJhbmNoZXMgZnJvbSBvdGhlciByZXBvc2l0b3JpZXM7IHNvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoIGdpdDovL2V4YW1wbGUuY29tL3Byb2ouZ2l0IG1hc3RlcjpleGFtcGxlLW1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIGNyZWF0ZSBhIG5ldyBicmFuY2ggbmFtZWQgYGV4YW1wbGUtbWFzdGVyYCBhbmQgc3RvcmUgaW4gaXQgdGhlCiticmFuY2ggbmFtZWQgYG1hc3RlcmAgZnJvbSB0aGUgcmVwb3NpdG9yeSBhdCB0aGUgZ2l2ZW4gVVJMLiAgSWYgeW91CithbHJlYWR5IGhhdmUgYSBicmFuY2ggbmFtZWQgZXhhbXBsZS1tYXN0ZXIsIGl0IHdpbGwgYXR0ZW1wdCB0bworPDxmYXN0LWZvcndhcmRzLGZhc3QtZm9yd2FyZD4+IHRvIHRoZSBjb21taXQgZ2l2ZW4gYnkgZXhhbXBsZS5jb20ncworbWFzdGVyIGJyYW5jaC4gIEluIG1vcmUgZGV0YWlsOgorCitbW2ZldGNoLWZhc3QtZm9yd2FyZHNdXQorPT09IGdpdCBmZXRjaCBhbmQgZmFzdC1mb3J3YXJkcworCitJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgd2hlbiB1cGRhdGluZyBhbiBleGlzdGluZyBicmFuY2gsIGBnaXQgZmV0Y2hgCitjaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBvbiB0aGUgcmVtb3RlCiticmFuY2ggaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBtb3N0IHJlY2VudCBjb21taXQgb24geW91ciBjb3B5IG9mIHRoZQorYnJhbmNoIGJlZm9yZSB1cGRhdGluZyB5b3VyIGNvcHkgb2YgdGhlIGJyYW5jaCB0byBwb2ludCBhdCB0aGUgbmV3Citjb21taXQuICBHaXQgY2FsbHMgdGhpcyBwcm9jZXNzIGEgPDxmYXN0LWZvcndhcmRzLGZhc3QtZm9yd2FyZD4+LgorCitBIGZhc3QtZm9yd2FyZCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBvLS1vLS1vLS1vIDwtLSBvbGQgaGVhZCBvZiB0aGUgYnJhbmNoCisgICAgICAgICAgIFwKKyAgICAgICAgICAgIG8tLW8tLW8gPC0tIG5ldyBoZWFkIG9mIHRoZSBicmFuY2gKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCisKK0luIHNvbWUgY2FzZXMgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgbmV3IGhlYWQgd2lsbCAqbm90KiBhY3R1YWxseSBiZQorYSBkZXNjZW5kYW50IG9mIHRoZSBvbGQgaGVhZC4gIEZvciBleGFtcGxlLCB0aGUgZGV2ZWxvcGVyIG1heSBoYXZlCityZWFsaXplZCBzaGUgbWFkZSBhIHNlcmlvdXMgbWlzdGFrZSwgYW5kIGRlY2lkZWQgdG8gYmFja3RyYWNrLAorcmVzdWx0aW5nIGluIGEgc2l0dWF0aW9uIGxpa2U6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIG8tLW8tLW8tLW8tLWEtLWIgPC0tIG9sZCBoZWFkIG9mIHRoZSBicmFuY2gKKyAgICAgICAgICAgXAorICAgICAgICAgICAgby0tby0tbyA8LS0gbmV3IGhlYWQgb2YgdGhlIGJyYW5jaAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0luIHRoaXMgY2FzZSwgYGdpdCBmZXRjaGAgd2lsbCBmYWlsLCBhbmQgcHJpbnQgb3V0IGEgd2FybmluZy4KKworSW4gdGhhdCBjYXNlLCB5b3UgY2FuIHN0aWxsIGZvcmNlIEdpdCB0byB1cGRhdGUgdG8gdGhlIG5ldyBoZWFkLCBhcworZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi4gIEhvd2V2ZXIsIG5vdGUgdGhhdCBpbiB0aGUKK3NpdHVhdGlvbiBhYm92ZSB0aGlzIG1heSBtZWFuIGxvc2luZyB0aGUgY29tbWl0cyBsYWJlbGVkIGBhYCBhbmQgYGJgLAordW5sZXNzIHlvdSd2ZSBhbHJlYWR5IGNyZWF0ZWQgYSByZWZlcmVuY2Ugb2YgeW91ciBvd24gcG9pbnRpbmcgdG8KK3RoZW0uCisKK1tbZm9yY2luZy1mZXRjaF1dCis9PT0gRm9yY2luZyBnaXQgZmV0Y2ggdG8gZG8gbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzCisKK0lmIGdpdCBmZXRjaCBmYWlscyBiZWNhdXNlIHRoZSBuZXcgaGVhZCBvZiBhIGJyYW5jaCBpcyBub3QgYQorZGVzY2VuZGFudCBvZiB0aGUgb2xkIGhlYWQsIHlvdSBtYXkgZm9yY2UgdGhlIHVwZGF0ZSB3aXRoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCBnaXQ6Ly9leGFtcGxlLmNvbS9wcm9qLmdpdCArbWFzdGVyOnJlZnMvcmVtb3Rlcy9leGFtcGxlL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIHRoZSBhZGRpdGlvbiBvZiB0aGUgYCtgIHNpZ24uICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSB0aGUgYC1mYAorZmxhZyB0byBmb3JjZSB1cGRhdGVzIG9mIGFsbCB0aGUgZmV0Y2hlZCBicmFuY2hlcywgYXMgaW46CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoIC1mIG9yaWdpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZSBhd2FyZSB0aGF0IGNvbW1pdHMgdGhhdCB0aGUgb2xkIHZlcnNpb24gb2YgZXhhbXBsZS9tYXN0ZXIgcG9pbnRlZCBhdAorbWF5IGJlIGxvc3QsIGFzIHdlIHNhdyBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KKworW1tyZW1vdGUtYnJhbmNoLWNvbmZpZ3VyYXRpb25dXQorPT09IENvbmZpZ3VyaW5nIHJlbW90ZS10cmFja2luZyBicmFuY2hlcworCitXZSBzYXcgYWJvdmUgdGhhdCBgb3JpZ2luYCBpcyBqdXN0IGEgc2hvcnRjdXQgdG8gcmVmZXIgdG8gdGhlCityZXBvc2l0b3J5IHRoYXQgeW91IG9yaWdpbmFsbHkgY2xvbmVkIGZyb20uICBUaGlzIGluZm9ybWF0aW9uIGlzCitzdG9yZWQgaW4gR2l0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLCB3aGljaCB5b3UgY2FuIHNlZSB1c2luZworbGlua2dpdDpnaXQtY29uZmlnWzFdOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgLWwKK2NvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb249MAorY29yZS5maWxlbW9kZT10cnVlCitjb3JlLmxvZ2FsbHJlZnVwZGF0ZXM9dHJ1ZQorcmVtb3RlLm9yaWdpbi51cmw9Z2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9naXQvZ2l0LmdpdAorcmVtb3RlLm9yaWdpbi5mZXRjaD0rcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKgorYnJhbmNoLm1hc3Rlci5yZW1vdGU9b3JpZ2luCiticmFuY2gubWFzdGVyLm1lcmdlPXJlZnMvaGVhZHMvbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZXJlIGFyZSBvdGhlciByZXBvc2l0b3JpZXMgdGhhdCB5b3UgYWxzbyB1c2UgZnJlcXVlbnRseSwgeW91IGNhbgorY3JlYXRlIHNpbWlsYXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNhdmUgdHlwaW5nOyBmb3IgZXhhbXBsZSwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVtb3RlIGFkZCBleGFtcGxlIGdpdDovL2V4YW1wbGUuY29tL3Byb2ouZ2l0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FkZHMgdGhlIGZvbGxvd2luZyB0byBgLmdpdC9jb25maWdgOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbcmVtb3RlICJleGFtcGxlIl0KKwl1cmwgPSBnaXQ6Ly9leGFtcGxlLmNvbS9wcm9qLmdpdAorCWZldGNoID0gK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvZXhhbXBsZS8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Fsc28gbm90ZSB0aGF0IHRoZSBhYm92ZSBjb25maWd1cmF0aW9uIGNhbiBiZSBwZXJmb3JtZWQgYnkgZGlyZWN0bHkKK2VkaXRpbmcgdGhlIGZpbGUgYC5naXQvY29uZmlnYCBpbnN0ZWFkIG9mIHVzaW5nIGxpbmtnaXQ6Z2l0LXJlbW90ZVsxXS4KKworQWZ0ZXIgY29uZmlndXJpbmcgdGhlIHJlbW90ZSwgdGhlIGZvbGxvd2luZyB0aHJlZSBjb21tYW5kcyB3aWxsIGRvIHRoZQorc2FtZSB0aGluZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggZ2l0Oi8vZXhhbXBsZS5jb20vcHJvai5naXQgK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvZXhhbXBsZS8qCiskIGdpdCBmZXRjaCBleGFtcGxlICtyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2V4YW1wbGUvKgorJCBnaXQgZmV0Y2ggZXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGNvbmZpZ3VyYXRpb24KK29wdGlvbnMgbWVudGlvbmVkIGFib3ZlIGFuZCBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBmb3IgbW9yZSBkZXRhaWxzIG9uCit0aGUgcmVmc3BlYyBzeW50YXguCisKKworW1tnaXQtY29uY2VwdHNdXQorPT0gR2l0IGNvbmNlcHRzCisKK0dpdCBpcyBidWlsdCBvbiBhIHNtYWxsIG51bWJlciBvZiBzaW1wbGUgYnV0IHBvd2VyZnVsIGlkZWFzLiAgV2hpbGUgaXQKK2lzIHBvc3NpYmxlIHRvIGdldCB0aGluZ3MgZG9uZSB3aXRob3V0IHVuZGVyc3RhbmRpbmcgdGhlbSwgeW91IHdpbGwgZmluZAorR2l0IG11Y2ggbW9yZSBpbnR1aXRpdmUgaWYgeW91IGRvLgorCitXZSBzdGFydCB3aXRoIHRoZSBtb3N0IGltcG9ydGFudCwgdGhlICA8PGRlZl9vYmplY3RfZGF0YWJhc2Usb2JqZWN0CitkYXRhYmFzZT4+IGFuZCB0aGUgPDxkZWZfaW5kZXgsaW5kZXg+Pi4KKworW1t0aGUtb2JqZWN0LWRhdGFiYXNlXV0KKz09PSBUaGUgT2JqZWN0IERhdGFiYXNlCisKKworV2UgYWxyZWFkeSBzYXcgaW4gPDx1bmRlcnN0YW5kaW5nLWNvbW1pdHM+PiB0aGF0IGFsbCBjb21taXRzIGFyZSBzdG9yZWQKK3VuZGVyIGEgNDAtZGlnaXQgIm9iamVjdCBuYW1lIi4gIEluIGZhY3QsIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvCityZXByZXNlbnQgdGhlIGhpc3Rvcnkgb2YgYSBwcm9qZWN0IGlzIHN0b3JlZCBpbiBvYmplY3RzIHdpdGggc3VjaCBuYW1lcy4KK0luIGVhY2ggY2FzZSB0aGUgbmFtZSBpcyBjYWxjdWxhdGVkIGJ5IHRha2luZyB0aGUgU0hBLTEgaGFzaCBvZiB0aGUKK2NvbnRlbnRzIG9mIHRoZSBvYmplY3QuICBUaGUgU0hBLTEgaGFzaCBpcyBhIGNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbi4KK1doYXQgdGhhdCBtZWFucyB0byB1cyBpcyB0aGF0IGl0IGlzIGltcG9zc2libGUgdG8gZmluZCB0d28gZGlmZmVyZW50CitvYmplY3RzIHdpdGggdGhlIHNhbWUgbmFtZS4gIFRoaXMgaGFzIGEgbnVtYmVyIG9mIGFkdmFudGFnZXM7IGFtb25nCitvdGhlcnM6CisKKy0gR2l0IGNhbiBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHR3byBvYmplY3RzIGFyZSBpZGVudGljYWwgb3Igbm90LAorICBqdXN0IGJ5IGNvbXBhcmluZyBuYW1lcy4KKy0gU2luY2Ugb2JqZWN0IG5hbWVzIGFyZSBjb21wdXRlZCB0aGUgc2FtZSB3YXkgaW4gZXZlcnkgcmVwb3NpdG9yeSwgdGhlCisgIHNhbWUgY29udGVudCBzdG9yZWQgaW4gdHdvIHJlcG9zaXRvcmllcyB3aWxsIGFsd2F5cyBiZSBzdG9yZWQgdW5kZXIKKyAgdGhlIHNhbWUgbmFtZS4KKy0gR2l0IGNhbiBkZXRlY3QgZXJyb3JzIHdoZW4gaXQgcmVhZHMgYW4gb2JqZWN0LCBieSBjaGVja2luZyB0aGF0IHRoZQorICBvYmplY3QncyBuYW1lIGlzIHN0aWxsIHRoZSBTSEEtMSBoYXNoIG9mIGl0cyBjb250ZW50cy4KKworKFNlZSA8PG9iamVjdC1kZXRhaWxzPj4gZm9yIHRoZSBkZXRhaWxzIG9mIHRoZSBvYmplY3QgZm9ybWF0dGluZyBhbmQKK1NIQS0xIGNhbGN1bGF0aW9uLikKKworVGhlcmUgYXJlIGZvdXIgZGlmZmVyZW50IHR5cGVzIG9mIG9iamVjdHM6ICJibG9iIiwgInRyZWUiLCAiY29tbWl0IiwgYW5kCisidGFnIi4KKworLSBBIDw8ZGVmX2Jsb2Jfb2JqZWN0LCJibG9iIiBvYmplY3Q+PiBpcyB1c2VkIHRvIHN0b3JlIGZpbGUgZGF0YS4KKy0gQSA8PGRlZl90cmVlX29iamVjdCwidHJlZSIgb2JqZWN0Pj4gdGllcyBvbmUgb3IgbW9yZQorICAiYmxvYiIgb2JqZWN0cyBpbnRvIGEgZGlyZWN0b3J5IHN0cnVjdHVyZS4gSW4gYWRkaXRpb24sIGEgdHJlZSBvYmplY3QKKyAgY2FuIHJlZmVyIHRvIG90aGVyIHRyZWUgb2JqZWN0cywgdGh1cyBjcmVhdGluZyBhIGRpcmVjdG9yeSBoaWVyYXJjaHkuCistIEEgPDxkZWZfY29tbWl0X29iamVjdCwiY29tbWl0IiBvYmplY3Q+PiB0aWVzIHN1Y2ggZGlyZWN0b3J5IGhpZXJhcmNoaWVzCisgIHRvZ2V0aGVyIGludG8gYSA8PGRlZl9EQUcsZGlyZWN0ZWQgYWN5Y2xpYyBncmFwaD4+IG9mIHJldmlzaW9ucy0tZWFjaAorICBjb21taXQgY29udGFpbnMgdGhlIG9iamVjdCBuYW1lIG9mIGV4YWN0bHkgb25lIHRyZWUgZGVzaWduYXRpbmcgdGhlCisgIGRpcmVjdG9yeSBoaWVyYXJjaHkgYXQgdGhlIHRpbWUgb2YgdGhlIGNvbW1pdC4gSW4gYWRkaXRpb24sIGEgY29tbWl0CisgIHJlZmVycyB0byAicGFyZW50IiBjb21taXQgb2JqZWN0cyB0aGF0IGRlc2NyaWJlIHRoZSBoaXN0b3J5IG9mIGhvdyB3ZQorICBhcnJpdmVkIGF0IHRoYXQgZGlyZWN0b3J5IGhpZXJhcmNoeS4KKy0gQSA8PGRlZl90YWdfb2JqZWN0LCJ0YWciIG9iamVjdD4+IHN5bWJvbGljYWxseSBpZGVudGlmaWVzIGFuZCBjYW4gYmUKKyAgdXNlZCB0byBzaWduIG90aGVyIG9iamVjdHMuIEl0IGNvbnRhaW5zIHRoZSBvYmplY3QgbmFtZSBhbmQgdHlwZSBvZgorICBhbm90aGVyIG9iamVjdCwgYSBzeW1ib2xpYyBuYW1lIChvZiBjb3Vyc2UhKSBhbmQsIG9wdGlvbmFsbHksIGEKKyAgc2lnbmF0dXJlLgorCitUaGUgb2JqZWN0IHR5cGVzIGluIHNvbWUgbW9yZSBkZXRhaWw6CisKK1tbY29tbWl0LW9iamVjdF1dCis9PT09IENvbW1pdCBPYmplY3QKKworVGhlICJjb21taXQiIG9iamVjdCBsaW5rcyBhIHBoeXNpY2FsIHN0YXRlIG9mIGEgdHJlZSB3aXRoIGEgZGVzY3JpcHRpb24KK29mIGhvdyB3ZSBnb3QgdGhlcmUgYW5kIHdoeS4gIFVzZSB0aGUgYC0tcHJldHR5PXJhd2Agb3B0aW9uIHRvCitsaW5rZ2l0OmdpdC1zaG93WzFdIG9yIGxpbmtnaXQ6Z2l0LWxvZ1sxXSB0byBleGFtaW5lIHlvdXIgZmF2b3JpdGUKK2NvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IC1zIC0tcHJldHR5PXJhdyAyYmU3ZmNiNDc2Citjb21taXQgMmJlN2ZjYjQ3NjRmMmRiY2VlNTI2MzViOTFmZWRiMWIzZGNmN2FiNAordHJlZSBmYjNhOGJkZDBjZWRkZDAxOTYxNWFmNGQ1N2E1M2Y0M2Q4Y2VlMmJmCitwYXJlbnQgMjU3YTg0ZDlkMDJlOTA0NDdiMTQ5YWY1OGIyNzFjMTk0MDVlZGI2YQorYXV0aG9yIERhdmUgV2F0c29uIDxkd2F0c29uQG1pbXZpc3RhLmNvbT4gMTE4NzU3Njg3MiAtMDQwMAorY29tbWl0dGVyIEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gMTE4NzU5MTE2MyAtMDcwMAorCisgICAgRml4IG1pc3NwZWxsaW5nIG9mICdzdXBwcmVzcycgaW4gZG9jcworCisgICAgU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FzIHlvdSBjYW4gc2VlLCBhIGNvbW1pdCBpcyBkZWZpbmVkIGJ5OgorCistIGEgdHJlZTogVGhlIFNIQS0xIG5hbWUgb2YgYSB0cmVlIG9iamVjdCAoYXMgZGVmaW5lZCBiZWxvdyksIHJlcHJlc2VudGluZworICB0aGUgY29udGVudHMgb2YgYSBkaXJlY3RvcnkgYXQgYSBjZXJ0YWluIHBvaW50IGluIHRpbWUuCistIHBhcmVudChzKTogVGhlIFNIQS0xIG5hbWUocykgb2Ygc29tZSBudW1iZXIgb2YgY29tbWl0cyB3aGljaCByZXByZXNlbnQgdGhlCisgIGltbWVkaWF0ZWx5IHByZXZpb3VzIHN0ZXAocykgaW4gdGhlIGhpc3Rvcnkgb2YgdGhlIHByb2plY3QuICBUaGUKKyAgZXhhbXBsZSBhYm92ZSBoYXMgb25lIHBhcmVudDsgbWVyZ2UgY29tbWl0cyBtYXkgaGF2ZSBtb3JlIHRoYW4KKyAgb25lLiAgQSBjb21taXQgd2l0aCBubyBwYXJlbnRzIGlzIGNhbGxlZCBhICJyb290IiBjb21taXQsIGFuZAorICByZXByZXNlbnRzIHRoZSBpbml0aWFsIHJldmlzaW9uIG9mIGEgcHJvamVjdC4gIEVhY2ggcHJvamVjdCBtdXN0IGhhdmUKKyAgYXQgbGVhc3Qgb25lIHJvb3QuICBBIHByb2plY3QgY2FuIGFsc28gaGF2ZSBtdWx0aXBsZSByb290cywgdGhvdWdoCisgIHRoYXQgaXNuJ3QgY29tbW9uIChvciBuZWNlc3NhcmlseSBhIGdvb2QgaWRlYSkuCistIGFuIGF1dGhvcjogVGhlIG5hbWUgb2YgdGhlIHBlcnNvbiByZXNwb25zaWJsZSBmb3IgdGhpcyBjaGFuZ2UsIHRvZ2V0aGVyCisgIHdpdGggaXRzIGRhdGUuCistIGEgY29tbWl0dGVyOiBUaGUgbmFtZSBvZiB0aGUgcGVyc29uIHdobyBhY3R1YWxseSBjcmVhdGVkIHRoZSBjb21taXQsCisgIHdpdGggdGhlIGRhdGUgaXQgd2FzIGRvbmUuICBUaGlzIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgYXV0aG9yLCBmb3IKKyAgZXhhbXBsZSwgaWYgdGhlIGF1dGhvciB3YXMgc29tZW9uZSB3aG8gd3JvdGUgYSBwYXRjaCBhbmQgZW1haWxlZCBpdAorICB0byB0aGUgcGVyc29uIHdobyB1c2VkIGl0IHRvIGNyZWF0ZSB0aGUgY29tbWl0LgorLSBhIGNvbW1lbnQgZGVzY3JpYmluZyB0aGlzIGNvbW1pdC4KKworTm90ZSB0aGF0IGEgY29tbWl0IGRvZXMgbm90IGl0c2VsZiBjb250YWluIGFueSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0CithY3R1YWxseSBjaGFuZ2VkOyBhbGwgY2hhbmdlcyBhcmUgY2FsY3VsYXRlZCBieSBjb21wYXJpbmcgdGhlIGNvbnRlbnRzCitvZiB0aGUgdHJlZSByZWZlcnJlZCB0byBieSB0aGlzIGNvbW1pdCB3aXRoIHRoZSB0cmVlcyBhc3NvY2lhdGVkIHdpdGgKK2l0cyBwYXJlbnRzLiAgSW4gcGFydGljdWxhciwgR2l0IGRvZXMgbm90IGF0dGVtcHQgdG8gcmVjb3JkIGZpbGUgcmVuYW1lcworZXhwbGljaXRseSwgdGhvdWdoIGl0IGNhbiBpZGVudGlmeSBjYXNlcyB3aGVyZSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBzYW1lCitmaWxlIGRhdGEgYXQgY2hhbmdpbmcgcGF0aHMgc3VnZ2VzdHMgYSByZW5hbWUuICAoU2VlLCBmb3IgZXhhbXBsZSwgdGhlCitgLU1gIG9wdGlvbiB0byBsaW5rZ2l0OmdpdC1kaWZmWzFdKS4KKworQSBjb21taXQgaXMgdXN1YWxseSBjcmVhdGVkIGJ5IGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSwgd2hpY2ggY3JlYXRlcyBhCitjb21taXQgd2hvc2UgcGFyZW50IGlzIG5vcm1hbGx5IHRoZSBjdXJyZW50IEhFQUQsIGFuZCB3aG9zZSB0cmVlIGlzCit0YWtlbiBmcm9tIHRoZSBjb250ZW50IGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlIGluZGV4LgorCitbW3RyZWUtb2JqZWN0XV0KKz09PT0gVHJlZSBPYmplY3QKKworVGhlIGV2ZXItdmVyc2F0aWxlIGxpbmtnaXQ6Z2l0LXNob3dbMV0gY29tbWFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvCitleGFtaW5lIHRyZWUgb2JqZWN0cywgYnV0IGxpbmtnaXQ6Z2l0LWxzLXRyZWVbMV0gd2lsbCBnaXZlIHlvdSBtb3JlCitkZXRhaWxzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLXRyZWUgZmIzYThiZGQwY2UKKzEwMDY0NCBibG9iIDYzYzkxOGM2NjdmYTAwNWZmMTJhZDg5NDM3ZjJmZGM4MDkyNmUyMWMgICAgLmdpdGlnbm9yZQorMTAwNjQ0IGJsb2IgNTUyOWIxOThlOGQxNGRlY2JlNGFkOTlkYjNmN2ZiNjMyZGUwNDM5ZCAgICAubWFpbG1hcAorMTAwNjQ0IGJsb2IgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyAgICBDT1BZSU5HCiswNDAwMDAgdHJlZSAyZmI3ODNlNDc3MTAwY2UwNzZmNmJmNTdlNGE2ZjAyNjAxM2RjNzQ1ICAgIERvY3VtZW50YXRpb24KKzEwMDc1NSBibG9iIDNjMDAzMmNlYzU5MmE3NjU2OTIyMzRmMWNiYTQ3ZGZkY2MzYTkyMDAgICAgR0lULVZFUlNJT04tR0VOCisxMDA2NDQgYmxvYiAyODliMDQ2YTQ0M2MwNjQ3NjI0NjA3ZDQ3MTI4OWIyYzdkY2Q0NzBiICAgIElOU1RBTEwKKzEwMDY0NCBibG9iIDRlYjQ2Mzc5N2FkYzY5M2RjMTY4YjkyNmI2OTMyZmY1M2YxN2QwYjEgICAgTWFrZWZpbGUKKzEwMDY0NCBibG9iIDU0ODE0MmMzMjdhNjc5MGZmODgyMWQ2N2MyZWUxZWZmN2E2NTZiNTIgICAgUkVBRE1FCisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyB5b3UgY2FuIHNlZSwgYSB0cmVlIG9iamVjdCBjb250YWlucyBhIGxpc3Qgb2YgZW50cmllcywgZWFjaCB3aXRoIGEKK21vZGUsIG9iamVjdCB0eXBlLCBTSEEtMSBuYW1lLCBhbmQgbmFtZSwgc29ydGVkIGJ5IG5hbWUuICBJdCByZXByZXNlbnRzCit0aGUgY29udGVudHMgb2YgYSBzaW5nbGUgZGlyZWN0b3J5IHRyZWUuCisKK1RoZSBvYmplY3QgdHlwZSBtYXkgYmUgYSBibG9iLCByZXByZXNlbnRpbmcgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSwgb3IKK2Fub3RoZXIgdHJlZSwgcmVwcmVzZW50aW5nIHRoZSBjb250ZW50cyBvZiBhIHN1YmRpcmVjdG9yeS4gIFNpbmNlIHRyZWVzCithbmQgYmxvYnMsIGxpa2UgYWxsIG90aGVyIG9iamVjdHMsIGFyZSBuYW1lZCBieSB0aGUgU0hBLTEgaGFzaCBvZiB0aGVpcgorY29udGVudHMsIHR3byB0cmVlcyBoYXZlIHRoZSBzYW1lIFNIQS0xIG5hbWUgaWYgYW5kIG9ubHkgaWYgdGhlaXIKK2NvbnRlbnRzIChpbmNsdWRpbmcsIHJlY3Vyc2l2ZWx5LCB0aGUgY29udGVudHMgb2YgYWxsIHN1YmRpcmVjdG9yaWVzKQorYXJlIGlkZW50aWNhbC4gIFRoaXMgYWxsb3dzIEdpdCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgZGlmZmVyZW5jZXMKK2JldHdlZW4gdHdvIHJlbGF0ZWQgdHJlZSBvYmplY3RzLCBzaW5jZSBpdCBjYW4gaWdub3JlIGFueSBlbnRyaWVzIHdpdGgKK2lkZW50aWNhbCBvYmplY3QgbmFtZXMuCisKKyhOb3RlOiBpbiB0aGUgcHJlc2VuY2Ugb2Ygc3VibW9kdWxlcywgdHJlZXMgbWF5IGFsc28gaGF2ZSBjb21taXRzIGFzCitlbnRyaWVzLiAgU2VlIDw8c3VibW9kdWxlcz4+IGZvciBkb2N1bWVudGF0aW9uLikKKworTm90ZSB0aGF0IHRoZSBmaWxlcyBhbGwgaGF2ZSBtb2RlIDY0NCBvciA3NTU6IEdpdCBhY3R1YWxseSBvbmx5IHBheXMKK2F0dGVudGlvbiB0byB0aGUgZXhlY3V0YWJsZSBiaXQuCisKK1tbYmxvYi1vYmplY3RdXQorPT09PSBCbG9iIE9iamVjdAorCitZb3UgY2FuIHVzZSBsaW5rZ2l0OmdpdC1zaG93WzFdIHRvIGV4YW1pbmUgdGhlIGNvbnRlbnRzIG9mIGEgYmxvYjsgdGFrZSwKK2ZvciBleGFtcGxlLCB0aGUgYmxvYiBpbiB0aGUgZW50cnkgZm9yIGBDT1BZSU5HYCBmcm9tIHRoZSB0cmVlIGFib3ZlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgNmZmODdjNDY2NAorCisgTm90ZSB0aGF0IHRoZSBvbmx5IHZhbGlkIHZlcnNpb24gb2YgdGhlIEdQTCBhcyBmYXIgYXMgdGhpcyBwcm9qZWN0CisgaXMgY29uY2VybmVkIGlzIF90aGlzXyBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgKGllIHYyLCBub3QKKyB2Mi4yIG9yIHYzLnggb3Igd2hhdGV2ZXIpLCB1bmxlc3MgZXhwbGljaXRseSBvdGhlcndpc2Ugc3RhdGVkLgorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSAiYmxvYiIgb2JqZWN0IGlzIG5vdGhpbmcgYnV0IGEgYmluYXJ5IGJsb2Igb2YgZGF0YS4gIEl0IGRvZXNuJ3QgcmVmZXIKK3RvIGFueXRoaW5nIGVsc2Ugb3IgaGF2ZSBhdHRyaWJ1dGVzIG9mIGFueSBraW5kLgorCitTaW5jZSB0aGUgYmxvYiBpcyBlbnRpcmVseSBkZWZpbmVkIGJ5IGl0cyBkYXRhLCBpZiB0d28gZmlsZXMgaW4gYQorZGlyZWN0b3J5IHRyZWUgKG9yIGluIG11bHRpcGxlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgcmVwb3NpdG9yeSkKK2hhdmUgdGhlIHNhbWUgY29udGVudHMsIHRoZXkgd2lsbCBzaGFyZSB0aGUgc2FtZSBibG9iIG9iamVjdC4gVGhlIG9iamVjdAoraXMgdG90YWxseSBpbmRlcGVuZGVudCBvZiBpdHMgbG9jYXRpb24gaW4gdGhlIGRpcmVjdG9yeSB0cmVlLCBhbmQKK3JlbmFtaW5nIGEgZmlsZSBkb2VzIG5vdCBjaGFuZ2UgdGhlIG9iamVjdCB0aGF0IGZpbGUgaXMgYXNzb2NpYXRlZCB3aXRoLgorCitOb3RlIHRoYXQgYW55IHRyZWUgb3IgYmxvYiBvYmplY3QgY2FuIGJlIGV4YW1pbmVkIHVzaW5nCitsaW5rZ2l0OmdpdC1zaG93WzFdIHdpdGggdGhlIDxyZXZpc2lvbj46PHBhdGg+IHN5bnRheC4gIFRoaXMgY2FuCitzb21ldGltZXMgYmUgdXNlZnVsIGZvciBicm93c2luZyB0aGUgY29udGVudHMgb2YgYSB0cmVlIHRoYXQgaXMgbm90CitjdXJyZW50bHkgY2hlY2tlZCBvdXQuCisKK1tbdHJ1c3RdXQorPT09PSBUcnVzdAorCitJZiB5b3UgcmVjZWl2ZSB0aGUgU0hBLTEgbmFtZSBvZiBhIGJsb2IgZnJvbSBvbmUgc291cmNlLCBhbmQgaXRzIGNvbnRlbnRzCitmcm9tIGFub3RoZXIgKHBvc3NpYmx5IHVudHJ1c3RlZCkgc291cmNlLCB5b3UgY2FuIHN0aWxsIHRydXN0IHRoYXQgdGhvc2UKK2NvbnRlbnRzIGFyZSBjb3JyZWN0IGFzIGxvbmcgYXMgdGhlIFNIQS0xIG5hbWUgYWdyZWVzLiAgVGhpcyBpcyBiZWNhdXNlCit0aGUgU0hBLTEgaXMgZGVzaWduZWQgc28gdGhhdCBpdCBpcyBpbmZlYXNpYmxlIHRvIGZpbmQgZGlmZmVyZW50IGNvbnRlbnRzCit0aGF0IHByb2R1Y2UgdGhlIHNhbWUgaGFzaC4KKworU2ltaWxhcmx5LCB5b3UgbmVlZCBvbmx5IHRydXN0IHRoZSBTSEEtMSBuYW1lIG9mIGEgdG9wLWxldmVsIHRyZWUgb2JqZWN0Cit0byB0cnVzdCB0aGUgY29udGVudHMgb2YgdGhlIGVudGlyZSBkaXJlY3RvcnkgdGhhdCBpdCByZWZlcnMgdG8sIGFuZCBpZgoreW91IHJlY2VpdmUgdGhlIFNIQS0xIG5hbWUgb2YgYSBjb21taXQgZnJvbSBhIHRydXN0ZWQgc291cmNlLCB0aGVuIHlvdQorY2FuIGVhc2lseSB2ZXJpZnkgdGhlIGVudGlyZSBoaXN0b3J5IG9mIGNvbW1pdHMgcmVhY2hhYmxlIHRocm91Z2gKK3BhcmVudHMgb2YgdGhhdCBjb21taXQsIGFuZCBhbGwgb2YgdGhvc2UgY29udGVudHMgb2YgdGhlIHRyZWVzIHJlZmVycmVkCit0byBieSB0aG9zZSBjb21taXRzLgorCitTbyB0byBpbnRyb2R1Y2Ugc29tZSByZWFsIHRydXN0IGluIHRoZSBzeXN0ZW0sIHRoZSBvbmx5IHRoaW5nIHlvdSBuZWVkCit0byBkbyBpcyB0byBkaWdpdGFsbHkgc2lnbiBqdXN0ICdvbmUnIHNwZWNpYWwgbm90ZSwgd2hpY2ggaW5jbHVkZXMgdGhlCituYW1lIG9mIGEgdG9wLWxldmVsIGNvbW1pdC4gIFlvdXIgZGlnaXRhbCBzaWduYXR1cmUgc2hvd3Mgb3RoZXJzCit0aGF0IHlvdSB0cnVzdCB0aGF0IGNvbW1pdCwgYW5kIHRoZSBpbW11dGFiaWxpdHkgb2YgdGhlIGhpc3Rvcnkgb2YKK2NvbW1pdHMgdGVsbHMgb3RoZXJzIHRoYXQgdGhleSBjYW4gdHJ1c3QgdGhlIHdob2xlIGhpc3RvcnkuCisKK0luIG90aGVyIHdvcmRzLCB5b3UgY2FuIGVhc2lseSB2YWxpZGF0ZSBhIHdob2xlIGFyY2hpdmUgYnkganVzdAorc2VuZGluZyBvdXQgYSBzaW5nbGUgZW1haWwgdGhhdCB0ZWxscyB0aGUgcGVvcGxlIHRoZSBuYW1lIChTSEEtMSBoYXNoKQorb2YgdGhlIHRvcCBjb21taXQsIGFuZCBkaWdpdGFsbHkgc2lnbiB0aGF0IGVtYWlsIHVzaW5nIHNvbWV0aGluZworbGlrZSBHUEcvUEdQLgorCitUbyBhc3Npc3QgaW4gdGhpcywgR2l0IGFsc28gcHJvdmlkZXMgdGhlIHRhZyBvYmplY3QuLi4KKworW1t0YWctb2JqZWN0XV0KKz09PT0gVGFnIE9iamVjdAorCitBIHRhZyBvYmplY3QgY29udGFpbnMgYW4gb2JqZWN0LCBvYmplY3QgdHlwZSwgdGFnIG5hbWUsIHRoZSBuYW1lIG9mIHRoZQorcGVyc29uICgidGFnZ2VyIikgd2hvIGNyZWF0ZWQgdGhlIHRhZywgYW5kIGEgbWVzc2FnZSwgd2hpY2ggbWF5IGNvbnRhaW4KK2Egc2lnbmF0dXJlLCBhcyBjYW4gYmUgc2VlbiB1c2luZyBsaW5rZ2l0OmdpdC1jYXQtZmlsZVsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSB0YWcgdjEuNS4wCitvYmplY3QgNDM3YjFiMjBkZjRiMzU2YzkzNDJkYWM4ZDM4ODQ5ZjI0ZWY0NGYyNwordHlwZSBjb21taXQKK3RhZyB2MS41LjAKK3RhZ2dlciBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+IDExNzE0MTEyMDAgKzAwMDAKKworR0lUIDEuNS4wCistLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLQorVmVyc2lvbjogR251UEcgdjEuNC42IChHTlUvTGludXgpCisKK2lEOERCUUJGMGxHcXdNYlpwUE1SbTVvUkF1UmlBSjlvaEJMZDdzMmtxamtLbHExcXFDNTdTYm5telFDZEc0dWkKK25MRS9MOWFVWGRXZVRGUHJvbjk2RExBPQorPTJFKzAKKy0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlZSB0aGUgbGlua2dpdDpnaXQtdGFnWzFdIGNvbW1hbmQgdG8gbGVhcm4gaG93IHRvIGNyZWF0ZSBhbmQgdmVyaWZ5IHRhZworb2JqZWN0cy4gIChOb3RlIHRoYXQgbGlua2dpdDpnaXQtdGFnWzFdIGNhbiBhbHNvIGJlIHVzZWQgdG8gY3JlYXRlCisibGlnaHR3ZWlnaHQgdGFncyIsIHdoaWNoIGFyZSBub3QgdGFnIG9iamVjdHMgYXQgYWxsLCBidXQganVzdCBzaW1wbGUKK3JlZmVyZW5jZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBgcmVmcy90YWdzL2ApLgorCitbW3BhY2stZmlsZXNdXQorPT09PSBIb3cgR2l0IHN0b3JlcyBvYmplY3RzIGVmZmljaWVudGx5OiBwYWNrIGZpbGVzCisKK05ld2x5IGNyZWF0ZWQgb2JqZWN0cyBhcmUgaW5pdGlhbGx5IGNyZWF0ZWQgaW4gYSBmaWxlIG5hbWVkIGFmdGVyIHRoZQorb2JqZWN0J3MgU0hBLTEgaGFzaCAoc3RvcmVkIGluIGAuZ2l0L29iamVjdHNgKS4KKworVW5mb3J0dW5hdGVseSB0aGlzIHN5c3RlbSBiZWNvbWVzIGluZWZmaWNpZW50IG9uY2UgYSBwcm9qZWN0IGhhcyBhCitsb3Qgb2Ygb2JqZWN0cy4gIFRyeSB0aGlzIG9uIGFuIG9sZCBwcm9qZWN0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvdW50LW9iamVjdHMKKzY5MzAgb2JqZWN0cywgNDc2MjAga2lsb2J5dGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpcnN0IG51bWJlciBpcyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgd2hpY2ggYXJlIGtlcHQgaW4KK2luZGl2aWR1YWwgZmlsZXMuICBUaGUgc2Vjb25kIGlzIHRoZSBhbW91bnQgb2Ygc3BhY2UgdGFrZW4gdXAgYnkKK3Rob3NlICJsb29zZSIgb2JqZWN0cy4KKworWW91IGNhbiBzYXZlIHNwYWNlIGFuZCBtYWtlIEdpdCBmYXN0ZXIgYnkgbW92aW5nIHRoZXNlIGxvb3NlIG9iamVjdHMgaW4KK3RvIGEgInBhY2sgZmlsZSIsIHdoaWNoIHN0b3JlcyBhIGdyb3VwIG9mIG9iamVjdHMgaW4gYW4gZWZmaWNpZW50Citjb21wcmVzc2VkIGZvcm1hdDsgdGhlIGRldGFpbHMgb2YgaG93IHBhY2sgZmlsZXMgYXJlIGZvcm1hdHRlZCBjYW4gYmUKK2ZvdW5kIGluIGxpbms6dGVjaG5pY2FsL3BhY2stZm9ybWF0Lmh0bWxbcGFjayBmb3JtYXRdLgorCitUbyBwdXQgdGhlIGxvb3NlIG9iamVjdHMgaW50byBhIHBhY2ssIGp1c3QgcnVuIGdpdCByZXBhY2s6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVwYWNrCitDb3VudGluZyBvYmplY3RzOiA2MDIwLCBkb25lLgorRGVsdGEgY29tcHJlc3Npb24gdXNpbmcgdXAgdG8gNCB0aHJlYWRzLgorQ29tcHJlc3Npbmcgb2JqZWN0czogMTAwJSAoNjAyMC82MDIwKSwgZG9uZS4KK1dyaXRpbmcgb2JqZWN0czogMTAwJSAoNjAyMC82MDIwKSwgZG9uZS4KK1RvdGFsIDYwMjAgKGRlbHRhIDQwNzApLCByZXVzZWQgMCAoZGVsdGEgMCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGNyZWF0ZXMgYSBzaW5nbGUgInBhY2sgZmlsZSIgaW4gLmdpdC9vYmplY3RzL3BhY2svCitjb250YWluaW5nIGFsbCBjdXJyZW50bHkgdW5wYWNrZWQgb2JqZWN0cy4gIFlvdSBjYW4gdGhlbiBydW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwcnVuZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIHJlbW92ZSBhbnkgb2YgdGhlICJsb29zZSIgb2JqZWN0cyB0aGF0IGFyZSBub3cgY29udGFpbmVkIGluIHRoZQorcGFjay4gIFRoaXMgd2lsbCBhbHNvIHJlbW92ZSBhbnkgdW5yZWZlcmVuY2VkIG9iamVjdHMgKHdoaWNoIG1heSBiZQorY3JlYXRlZCB3aGVuLCBmb3IgZXhhbXBsZSwgeW91IHVzZSBgZ2l0IHJlc2V0YCB0byByZW1vdmUgYSBjb21taXQpLgorWW91IGNhbiB2ZXJpZnkgdGhhdCB0aGUgbG9vc2Ugb2JqZWN0cyBhcmUgZ29uZSBieSBsb29raW5nIGF0IHRoZQorYC5naXQvb2JqZWN0c2AgZGlyZWN0b3J5IG9yIGJ5IHJ1bm5pbmcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb3VudC1vYmplY3RzCiswIG9iamVjdHMsIDAga2lsb2J5dGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWx0aG91Z2ggdGhlIG9iamVjdCBmaWxlcyBhcmUgZ29uZSwgYW55IGNvbW1hbmRzIHRoYXQgcmVmZXIgdG8gdGhvc2UKK29iamVjdHMgd2lsbCB3b3JrIGV4YWN0bHkgYXMgdGhleSBkaWQgYmVmb3JlLgorCitUaGUgbGlua2dpdDpnaXQtZ2NbMV0gY29tbWFuZCBwZXJmb3JtcyBwYWNraW5nLCBwcnVuaW5nLCBhbmQgbW9yZSBmb3IKK3lvdSwgc28gaXMgbm9ybWFsbHkgdGhlIG9ubHkgaGlnaC1sZXZlbCBjb21tYW5kIHlvdSBuZWVkLgorCitbW2RhbmdsaW5nLW9iamVjdHNdXQorPT09PSBEYW5nbGluZyBvYmplY3RzCisKK1RoZSBsaW5rZ2l0OmdpdC1mc2NrWzFdIGNvbW1hbmQgd2lsbCBzb21ldGltZXMgY29tcGxhaW4gYWJvdXQgZGFuZ2xpbmcKK29iamVjdHMuICBUaGV5IGFyZSBub3QgYSBwcm9ibGVtLgorCitUaGUgbW9zdCBjb21tb24gY2F1c2Ugb2YgZGFuZ2xpbmcgb2JqZWN0cyBpcyB0aGF0IHlvdSd2ZSByZWJhc2VkIGEKK2JyYW5jaCwgb3IgeW91IGhhdmUgcHVsbGVkIGZyb20gc29tZWJvZHkgZWxzZSB3aG8gcmViYXNlZCBhIGJyYW5jaC0tc2VlCis8PGNsZWFuaW5nLXVwLWhpc3Rvcnk+Pi4gIEluIHRoYXQgY2FzZSwgdGhlIG9sZCBoZWFkIG9mIHRoZSBvcmlnaW5hbAorYnJhbmNoIHN0aWxsIGV4aXN0cywgYXMgZG9lcyBldmVyeXRoaW5nIGl0IHBvaW50ZWQgdG8uIFRoZSBicmFuY2gKK3BvaW50ZXIgaXRzZWxmIGp1c3QgZG9lc24ndCwgc2luY2UgeW91IHJlcGxhY2VkIGl0IHdpdGggYW5vdGhlciBvbmUuCisKK1RoZXJlIGFyZSBhbHNvIG90aGVyIHNpdHVhdGlvbnMgdGhhdCBjYXVzZSBkYW5nbGluZyBvYmplY3RzLiBGb3IKK2V4YW1wbGUsIGEgImRhbmdsaW5nIGJsb2IiIG1heSBhcmlzZSBiZWNhdXNlIHlvdSBkaWQgYSBgZ2l0IGFkZGAgb2YgYQorZmlsZSwgYnV0IHRoZW4sIGJlZm9yZSB5b3UgYWN0dWFsbHkgY29tbWl0dGVkIGl0IGFuZCBtYWRlIGl0IHBhcnQgb2YgdGhlCitiaWdnZXIgcGljdHVyZSwgeW91IGNoYW5nZWQgc29tZXRoaW5nIGVsc2UgaW4gdGhhdCBmaWxlIGFuZCBjb21taXR0ZWQKK3RoYXQgKnVwZGF0ZWQqIHRoaW5nLS10aGUgb2xkIHN0YXRlIHRoYXQgeW91IGFkZGVkIG9yaWdpbmFsbHkgZW5kcyB1cAorbm90IGJlaW5nIHBvaW50ZWQgdG8gYnkgYW55IGNvbW1pdCBvciB0cmVlLCBzbyBpdCdzIG5vdyBhIGRhbmdsaW5nIGJsb2IKK29iamVjdC4KKworU2ltaWxhcmx5LCB3aGVuIHRoZSAicmVjdXJzaXZlIiBtZXJnZSBzdHJhdGVneSBydW5zLCBhbmQgZmluZHMgdGhhdAordGhlcmUgYXJlIGNyaXNzLWNyb3NzIG1lcmdlcyBhbmQgdGh1cyBtb3JlIHRoYW4gb25lIG1lcmdlIGJhc2UgKHdoaWNoIGlzCitmYWlybHkgdW51c3VhbCwgYnV0IGl0IGRvZXMgaGFwcGVuKSwgaXQgd2lsbCBnZW5lcmF0ZSBvbmUgdGVtcG9yYXJ5CittaWR3YXkgdHJlZSAob3IgcG9zc2libHkgZXZlbiBtb3JlLCBpZiB5b3UgaGFkIGxvdHMgb2YgY3Jpc3MtY3Jvc3NpbmcKK21lcmdlcyBhbmQgbW9yZSB0aGFuIHR3byBtZXJnZSBiYXNlcykgYXMgYSB0ZW1wb3JhcnkgaW50ZXJuYWwgbWVyZ2UKK2Jhc2UsIGFuZCBhZ2FpbiwgdGhvc2UgYXJlIHJlYWwgb2JqZWN0cywgYnV0IHRoZSBlbmQgcmVzdWx0IHdpbGwgbm90IGVuZAordXAgcG9pbnRpbmcgdG8gdGhlbSwgc28gdGhleSBlbmQgdXAgImRhbmdsaW5nIiBpbiB5b3VyIHJlcG9zaXRvcnkuCisKK0dlbmVyYWxseSwgZGFuZ2xpbmcgb2JqZWN0cyBhcmVuJ3QgYW55dGhpbmcgdG8gd29ycnkgYWJvdXQuIFRoZXkgY2FuCitldmVuIGJlIHZlcnkgdXNlZnVsOiBpZiB5b3Ugc2NyZXcgc29tZXRoaW5nIHVwLCB0aGUgZGFuZ2xpbmcgb2JqZWN0cyBjYW4KK2JlIGhvdyB5b3UgcmVjb3ZlciB5b3VyIG9sZCB0cmVlIChzYXksIHlvdSBkaWQgYSByZWJhc2UsIGFuZCByZWFsaXplZAordGhhdCB5b3UgcmVhbGx5IGRpZG4ndCB3YW50IHRvLS15b3UgY2FuIGxvb2sgYXQgd2hhdCBkYW5nbGluZyBvYmplY3RzCit5b3UgaGF2ZSwgYW5kIGRlY2lkZSB0byByZXNldCB5b3VyIGhlYWQgdG8gc29tZSBvbGQgZGFuZ2xpbmcgc3RhdGUpLgorCitGb3IgY29tbWl0cywgeW91IGNhbiBqdXN0IHVzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdGsgPGRhbmdsaW5nLWNvbW1pdC1zaGEtZ29lcy1oZXJlPiAtLW5vdCAtLWFsbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgYXNrcyBmb3IgYWxsIHRoZSBoaXN0b3J5IHJlYWNoYWJsZSBmcm9tIHRoZSBnaXZlbiBjb21taXQgYnV0IG5vdAorZnJvbSBhbnkgYnJhbmNoLCB0YWcsIG9yIG90aGVyIHJlZmVyZW5jZS4gIElmIHlvdSBkZWNpZGUgaXQncyBzb21ldGhpbmcKK3lvdSB3YW50LCB5b3UgY2FuIGFsd2F5cyBjcmVhdGUgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LCBlLmcuLAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCByZWNvdmVyZWQtYnJhbmNoIDxkYW5nbGluZy1jb21taXQtc2hhLWdvZXMtaGVyZT4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgYmxvYnMgYW5kIHRyZWVzLCB5b3UgY2FuJ3QgZG8gdGhlIHNhbWUsIGJ1dCB5b3UgY2FuIHN0aWxsIGV4YW1pbmUKK3RoZW0uICBZb3UgY2FuIGp1c3QgZG8KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IDxkYW5nbGluZy1ibG9iL3RyZWUtc2hhLWdvZXMtaGVyZT4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0byBzaG93IHdoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBibG9iIHdlcmUgKG9yLCBmb3IgYSB0cmVlLCBiYXNpY2FsbHkKK3doYXQgdGhlIGBsc2AgZm9yIHRoYXQgZGlyZWN0b3J5IHdhcyksIGFuZCB0aGF0IG1heSBnaXZlIHlvdSBzb21lIGlkZWEKK29mIHdoYXQgdGhlIG9wZXJhdGlvbiB3YXMgdGhhdCBsZWZ0IHRoYXQgZGFuZ2xpbmcgb2JqZWN0LgorCitVc3VhbGx5LCBkYW5nbGluZyBibG9icyBhbmQgdHJlZXMgYXJlbid0IHZlcnkgaW50ZXJlc3RpbmcuIFRoZXkncmUKK2FsbW9zdCBhbHdheXMgdGhlIHJlc3VsdCBvZiBlaXRoZXIgYmVpbmcgYSBoYWxmLXdheSBtZXJnZWJhc2UgKHRoZSBibG9iCit3aWxsIG9mdGVuIGV2ZW4gaGF2ZSB0aGUgY29uZmxpY3QgbWFya2VycyBmcm9tIGEgbWVyZ2UgaW4gaXQsIGlmIHlvdQoraGF2ZSBoYWQgY29uZmxpY3RpbmcgbWVyZ2VzIHRoYXQgeW91IGZpeGVkIHVwIGJ5IGhhbmQpLCBvciBzaW1wbHkKK2JlY2F1c2UgeW91IGludGVycnVwdGVkIGEgYGdpdCBmZXRjaGAgd2l0aCBeQyBvciBzb21ldGhpbmcgbGlrZSB0aGF0LAorbGVhdmluZyBfc29tZV8gb2YgdGhlIG5ldyBvYmplY3RzIGluIHRoZSBvYmplY3QgZGF0YWJhc2UsIGJ1dCBqdXN0CitkYW5nbGluZyBhbmQgdXNlbGVzcy4KKworQW55d2F5LCBvbmNlIHlvdSBhcmUgc3VyZSB0aGF0IHlvdSdyZSBub3QgaW50ZXJlc3RlZCBpbiBhbnkgZGFuZ2xpbmcKK3N0YXRlLCB5b3UgY2FuIGp1c3QgcHJ1bmUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHJ1bmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhleSdsbCBiZSBnb25lLiAoWW91IHNob3VsZCBvbmx5IHJ1biBgZ2l0IHBydW5lYCBvbiBhIHF1aWVzY2VudAorcmVwb3NpdG9yeS0taXQncyBraW5kIG9mIGxpa2UgZG9pbmcgYSBmaWxlc3lzdGVtIGZzY2sgcmVjb3Zlcnk6IHlvdQorZG9uJ3Qgd2FudCB0byBkbyB0aGF0IHdoaWxlIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuCitgZ2l0IHBydW5lYCBpcyBkZXNpZ25lZCBub3QgdG8gY2F1c2UgYW55IGhhcm0gaW4gc3VjaCBjYXNlcyBvZiBjb25jdXJyZW50CithY2Nlc3NlcyB0byBhIHJlcG9zaXRvcnkgYnV0IHlvdSBtaWdodCByZWNlaXZlIGNvbmZ1c2luZyBvciBzY2FyeSBtZXNzYWdlcy4pCisKK1tbcmVjb3ZlcmluZy1mcm9tLXJlcG9zaXRvcnktY29ycnVwdGlvbl1dCis9PT09IFJlY292ZXJpbmcgZnJvbSByZXBvc2l0b3J5IGNvcnJ1cHRpb24KKworQnkgZGVzaWduLCBHaXQgdHJlYXRzIGRhdGEgdHJ1c3RlZCB0byBpdCB3aXRoIGNhdXRpb24uICBIb3dldmVyLCBldmVuIGluCit0aGUgYWJzZW5jZSBvZiBidWdzIGluIEdpdCBpdHNlbGYsIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRoYXQgaGFyZHdhcmUgb3IKK29wZXJhdGluZyBzeXN0ZW0gZXJyb3JzIGNvdWxkIGNvcnJ1cHQgZGF0YS4KKworVGhlIGZpcnN0IGRlZmVuc2UgYWdhaW5zdCBzdWNoIHByb2JsZW1zIGlzIGJhY2t1cHMuICBZb3UgY2FuIGJhY2sgdXAgYQorR2l0IGRpcmVjdG9yeSB1c2luZyBjbG9uZSwgb3IganVzdCB1c2luZyBjcCwgdGFyLCBvciBhbnkgb3RoZXIgYmFja3VwCittZWNoYW5pc20uCisKK0FzIGEgbGFzdCByZXNvcnQsIHlvdSBjYW4gc2VhcmNoIGZvciB0aGUgY29ycnVwdGVkIG9iamVjdHMgYW5kIGF0dGVtcHQKK3RvIHJlcGxhY2UgdGhlbSBieSBoYW5kLiAgQmFjayB1cCB5b3VyIHJlcG9zaXRvcnkgYmVmb3JlIGF0dGVtcHRpbmcgdGhpcworaW4gY2FzZSB5b3UgY29ycnVwdCB0aGluZ3MgZXZlbiBtb3JlIGluIHRoZSBwcm9jZXNzLgorCitXZSdsbCBhc3N1bWUgdGhhdCB0aGUgcHJvYmxlbSBpcyBhIHNpbmdsZSBtaXNzaW5nIG9yIGNvcnJ1cHRlZCBibG9iLAord2hpY2ggaXMgc29tZXRpbWVzIGEgc29sdmFibGUgcHJvYmxlbS4gIChSZWNvdmVyaW5nIG1pc3NpbmcgdHJlZXMgYW5kCitlc3BlY2lhbGx5IGNvbW1pdHMgaXMgKm11Y2gqIGhhcmRlcikuCisKK0JlZm9yZSBzdGFydGluZywgdmVyaWZ5IHRoYXQgdGhlcmUgaXMgY29ycnVwdGlvbiwgYW5kIGZpZ3VyZSBvdXQgd2hlcmUKK2l0IGlzIHdpdGggbGlua2dpdDpnaXQtZnNja1sxXTsgdGhpcyBtYXkgYmUgdGltZS1jb25zdW1pbmcuCisKK0Fzc3VtZSB0aGUgb3V0cHV0IGxvb2tzIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmc2NrIC0tZnVsbCAtLW5vLWRhbmdsaW5nCiticm9rZW4gbGluayBmcm9tICAgIHRyZWUgMmQ5MjYzYzZkMjM1OTVlN2NiMmEyMWU1ZWJiYjUzNjU1Mjc4ZGZmOAorICAgICAgICAgICAgICB0byAgICBibG9iIDRiOTQ1OGIzNzg2MjI4MzY5YzYzOTM2ZGI2NTgyN2RlM2NjMDYyMDAKK21pc3NpbmcgYmxvYiA0Yjk0NThiMzc4NjIyODM2OWM2MzkzNmRiNjU4MjdkZTNjYzA2MjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm93IHlvdSBrbm93IHRoYXQgYmxvYiA0Yjk0NThiMyBpcyBtaXNzaW5nLCBhbmQgdGhhdCB0aGUgdHJlZSAyZDkyNjNjNgorcG9pbnRzIHRvIGl0LiAgSWYgeW91IGNvdWxkIGZpbmQganVzdCBvbmUgY29weSBvZiB0aGF0IG1pc3NpbmcgYmxvYgorb2JqZWN0LCBwb3NzaWJseSBpbiBzb21lIG90aGVyIHJlcG9zaXRvcnksIHlvdSBjb3VsZCBtb3ZlIGl0IGludG8KK2AuZ2l0L29iamVjdHMvNGIvOTQ1OGIzLi4uYCBhbmQgYmUgZG9uZS4gIFN1cHBvc2UgeW91IGNhbid0LiAgWW91IGNhbgorc3RpbGwgZXhhbWluZSB0aGUgdHJlZSB0aGF0IHBvaW50ZWQgdG8gaXQgd2l0aCBsaW5rZ2l0OmdpdC1scy10cmVlWzFdLAord2hpY2ggbWlnaHQgb3V0cHV0IHNvbWV0aGluZyBsaWtlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLXRyZWUgMmQ5MjYzYzZkMjM1OTVlN2NiMmEyMWU1ZWJiYjUzNjU1Mjc4ZGZmOAorMTAwNjQ0IGJsb2IgOGQxNDUzMTg0NmI5NWJmYTM1NjRiNThjY2ZiNzkxM2EwMzQzMjNiOAkuZ2l0aWdub3JlCisxMDA2NDQgYmxvYiBlYmY5YmY4NGRhMGFhYjVlZDk0NDI2NGE1ZGIyYTY1ZmUzYTNlODgzCS5tYWlsbWFwCisxMDA2NDQgYmxvYiBjYTQ0MmQzMTNkODZkYzY3ZTBhMmU1ZDU4NGI0NjViZDM4MmNiZjVjCUNPUFlJTkcKKy4uLgorMTAwNjQ0IGJsb2IgNGI5NDU4YjM3ODYyMjgzNjljNjM5MzZkYjY1ODI3ZGUzY2MwNjIwMAlteWZpbGUKKy4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvIG5vdyB5b3Uga25vdyB0aGF0IHRoZSBtaXNzaW5nIGJsb2Igd2FzIHRoZSBkYXRhIGZvciBhIGZpbGUgbmFtZWQKK2BteWZpbGVgLiAgQW5kIGNoYW5jZXMgYXJlIHlvdSBjYW4gYWxzbyBpZGVudGlmeSB0aGUgZGlyZWN0b3J5LS1sZXQncworc2F5IGl0J3MgaW4gYHNvbWVkaXJlY3RvcnlgLiAgSWYgeW91J3JlIGx1Y2t5IHRoZSBtaXNzaW5nIGNvcHkgbWlnaHQgYmUKK3RoZSBzYW1lIGFzIHRoZSBjb3B5IHlvdSBoYXZlIGNoZWNrZWQgb3V0IGluIHlvdXIgd29ya2luZyB0cmVlIGF0Citgc29tZWRpcmVjdG9yeS9teWZpbGVgOyB5b3UgY2FuIHRlc3Qgd2hldGhlciB0aGF0J3MgcmlnaHQgd2l0aAorbGlua2dpdDpnaXQtaGFzaC1vYmplY3RbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgaGFzaC1vYmplY3QgLXcgc29tZWRpcmVjdG9yeS9teWZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIGNyZWF0ZSBhbmQgc3RvcmUgYSBibG9iIG9iamVjdCB3aXRoIHRoZSBjb250ZW50cyBvZgorc29tZWRpcmVjdG9yeS9teWZpbGUsIGFuZCBvdXRwdXQgdGhlIFNIQS0xIG9mIHRoYXQgb2JqZWN0LiAgaWYgeW91J3JlCitleHRyZW1lbHkgbHVja3kgaXQgbWlnaHQgYmUgNGI5NDU4YjM3ODYyMjgzNjljNjM5MzZkYjY1ODI3ZGUzY2MwNjIwMCwgaW4KK3doaWNoIGNhc2UgeW91J3ZlIGd1ZXNzZWQgcmlnaHQsIGFuZCB0aGUgY29ycnVwdGlvbiBpcyBmaXhlZCEKKworT3RoZXJ3aXNlLCB5b3UgbmVlZCBtb3JlIGluZm9ybWF0aW9uLiAgSG93IGRvIHlvdSB0ZWxsIHdoaWNoIHZlcnNpb24gb2YKK3RoZSBmaWxlIGhhcyBiZWVuIGxvc3Q/CisKK1RoZSBlYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzIHdpdGg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC0tcmF3IC0tYWxsIC0tZnVsbC1oaXN0b3J5IC0tIHNvbWVkaXJlY3RvcnkvbXlmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmVjYXVzZSB5b3UncmUgYXNraW5nIGZvciByYXcgb3V0cHV0LCB5b3UnbGwgbm93IGdldCBzb21ldGhpbmcgbGlrZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NvbW1pdCBhYmMKK0F1dGhvcjoKK0RhdGU6CisuLi4KKzoxMDA2NDQgMTAwNjQ0IDRiOTQ1OGIgbmV3c2hhIE0gc29tZWRpcmVjdG9yeS9teWZpbGUKKworCitjb21taXQgeHl6CitBdXRob3I6CitEYXRlOgorCisuLi4KKzoxMDA2NDQgMTAwNjQ0IG9sZHNoYSA0Yjk0NThiIE0gc29tZWRpcmVjdG9yeS9teWZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHRlbGxzIHlvdSB0aGF0IHRoZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdmVyc2lvbiBvZiB0aGUgZmlsZSB3YXMKKyJuZXdzaGEiLCBhbmQgdGhhdCB0aGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHZlcnNpb24gd2FzICJvbGRzaGEiLgorWW91IGFsc28ga25vdyB0aGUgY29tbWl0IG1lc3NhZ2VzIHRoYXQgd2VudCB3aXRoIHRoZSBjaGFuZ2UgZnJvbSBvbGRzaGEKK3RvIDRiOTQ1OGIgYW5kIHdpdGggdGhlIGNoYW5nZSBmcm9tIDRiOTQ1OGIgdG8gbmV3c2hhLgorCitJZiB5b3UndmUgYmVlbiBjb21taXR0aW5nIHNtYWxsIGVub3VnaCBjaGFuZ2VzLCB5b3UgbWF5IG5vdyBoYXZlIGEgZ29vZAorc2hvdCBhdCByZWNvbnN0cnVjdGluZyB0aGUgY29udGVudHMgb2YgdGhlIGluLWJldHdlZW4gc3RhdGUgNGI5NDU4Yi4KKworSWYgeW91IGNhbiBkbyB0aGF0LCB5b3UgY2FuIG5vdyByZWNyZWF0ZSB0aGUgbWlzc2luZyBvYmplY3Qgd2l0aAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGhhc2gtb2JqZWN0IC13IDxyZWNyZWF0ZWQtZmlsZT4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgeW91ciByZXBvc2l0b3J5IGlzIGdvb2QgYWdhaW4hCisKKyhCdHcsIHlvdSBjb3VsZCBoYXZlIGlnbm9yZWQgdGhlIGBmc2NrYCwgYW5kIHN0YXJ0ZWQgd2l0aCBkb2luZyBhCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC0tcmF3IC0tYWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIGp1c3QgbG9va2VkIGZvciB0aGUgc2hhIG9mIHRoZSBtaXNzaW5nIG9iamVjdCAoNGI5NDU4YikgaW4gdGhhdAord2hvbGUgdGhpbmcuIEl0J3MgdXAgdG8geW91LS1HaXQgZG9lcyAqaGF2ZSogYSBsb3Qgb2YgaW5mb3JtYXRpb24sIGl0IGlzCitqdXN0IG1pc3Npbmcgb25lIHBhcnRpY3VsYXIgYmxvYiB2ZXJzaW9uLgorCitbW3RoZS1pbmRleF1dCis9PT0gVGhlIGluZGV4CisKK1RoZSBpbmRleCBpcyBhIGJpbmFyeSBmaWxlIChnZW5lcmFsbHkga2VwdCBpbiBgLmdpdC9pbmRleGApIGNvbnRhaW5pbmcgYQorc29ydGVkIGxpc3Qgb2YgcGF0aCBuYW1lcywgZWFjaCB3aXRoIHBlcm1pc3Npb25zIGFuZCB0aGUgU0hBLTEgb2YgYSBibG9iCitvYmplY3Q7IGxpbmtnaXQ6Z2l0LWxzLWZpbGVzWzFdIGNhbiBzaG93IHlvdSB0aGUgY29udGVudHMgb2YgdGhlIGluZGV4OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBscy1maWxlcyAtLXN0YWdlCisxMDA2NDQgNjNjOTE4YzY2N2ZhMDA1ZmYxMmFkODk0MzdmMmZkYzgwOTI2ZTIxYyAwCS5naXRpZ25vcmUKKzEwMDY0NCA1NTI5YjE5OGU4ZDE0ZGVjYmU0YWQ5OWRiM2Y3ZmI2MzJkZTA0MzlkIDAJLm1haWxtYXAKKzEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDAJQ09QWUlORworMTAwNjQ0IGEzN2IyMTUyYmQyNmJlMmMyMjg5ZTFmNTdhMjkyNTM0YTUxYTkzYzcgMAlEb2N1bWVudGF0aW9uLy5naXRpZ25vcmUKKzEwMDY0NCBmYmVmZTlhNDViMDBhNTRiNThkOTRkMDZlY2E0OGIwM2Q0MGE1MGUwIDAJRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQorLi4uCisxMDA2NDQgMjUxMWFlZjhkODlhYjUyYmU1ZWM2YTVlNDYyMzZiNGI2YmNkMDdlYSAwCXhkaWZmL3h0eXBlcy5oCisxMDA2NDQgMmFkZTk3YjI1NzRhOWY3N2U3YWU0MDAyYTRlMDdhNmEzOGU0NmQwNyAwCXhkaWZmL3h1dGlscy5jCisxMDA2NDQgZDVkZTgyOTJlMDVlN2MzNmM0YjY4ODU3YzFjZjk4NTVlM2QyZjcwYSAwCXhkaWZmL3h1dGlscy5oCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCBpbiBvbGRlciBkb2N1bWVudGF0aW9uIHlvdSBtYXkgc2VlIHRoZSBpbmRleCBjYWxsZWQgdGhlCisiY3VycmVudCBkaXJlY3RvcnkgY2FjaGUiIG9yIGp1c3QgdGhlICJjYWNoZSIuICBJdCBoYXMgdGhyZWUgaW1wb3J0YW50Citwcm9wZXJ0aWVzOgorCisxLiBUaGUgaW5kZXggY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gZ2VuZXJhdGUgYSBzaW5nbGUKKyh1bmlxdWVseSBkZXRlcm1pbmVkKSB0cmVlIG9iamVjdC4KKysKK0ZvciBleGFtcGxlLCBydW5uaW5nIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBnZW5lcmF0ZXMgdGhpcyB0cmVlIG9iamVjdAorZnJvbSB0aGUgaW5kZXgsIHN0b3JlcyBpdCBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLCBhbmQgdXNlcyBpdCBhcyB0aGUKK3RyZWUgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV3IGNvbW1pdC4KKworMi4gVGhlIGluZGV4IGVuYWJsZXMgZmFzdCBjb21wYXJpc29ucyBiZXR3ZWVuIHRoZSB0cmVlIG9iamVjdCBpdCBkZWZpbmVzCithbmQgdGhlIHdvcmtpbmcgdHJlZS4KKysKK0l0IGRvZXMgdGhpcyBieSBzdG9yaW5nIHNvbWUgYWRkaXRpb25hbCBkYXRhIGZvciBlYWNoIGVudHJ5IChzdWNoIGFzCit0aGUgbGFzdCBtb2RpZmllZCB0aW1lKS4gIFRoaXMgZGF0YSBpcyBub3QgZGlzcGxheWVkIGFib3ZlLCBhbmQgaXMgbm90CitzdG9yZWQgaW4gdGhlIGNyZWF0ZWQgdHJlZSBvYmplY3QsIGJ1dCBpdCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUKK3F1aWNrbHkgd2hpY2ggZmlsZXMgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGRpZmZlciBmcm9tIHdoYXQgd2FzCitzdG9yZWQgaW4gdGhlIGluZGV4LCBhbmQgdGh1cyBzYXZlIEdpdCBmcm9tIGhhdmluZyB0byByZWFkIGFsbCBvZiB0aGUKK2RhdGEgZnJvbSBzdWNoIGZpbGVzIHRvIGxvb2sgZm9yIGNoYW5nZXMuCisKKzMuIEl0IGNhbiBlZmZpY2llbnRseSByZXByZXNlbnQgaW5mb3JtYXRpb24gYWJvdXQgbWVyZ2UgY29uZmxpY3RzCitiZXR3ZWVuIGRpZmZlcmVudCB0cmVlIG9iamVjdHMsIGFsbG93aW5nIGVhY2ggcGF0aG5hbWUgdG8gYmUKK2Fzc29jaWF0ZWQgd2l0aCBzdWZmaWNpZW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSB0cmVlcyBpbnZvbHZlZCB0aGF0Cit5b3UgY2FuIGNyZWF0ZSBhIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIHRoZW0uCisrCitXZSBzYXcgaW4gPDxjb25mbGljdC1yZXNvbHV0aW9uPj4gdGhhdCBkdXJpbmcgYSBtZXJnZSB0aGUgaW5kZXggY2FuCitzdG9yZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhIHNpbmdsZSBmaWxlIChjYWxsZWQgInN0YWdlcyIpLiAgVGhlIHRoaXJkCitjb2x1bW4gaW4gdGhlIGxpbmtnaXQ6Z2l0LWxzLWZpbGVzWzFdIG91dHB1dCBhYm92ZSBpcyB0aGUgc3RhZ2UKK251bWJlciwgYW5kIHdpbGwgdGFrZSBvbiB2YWx1ZXMgb3RoZXIgdGhhbiAwIGZvciBmaWxlcyB3aXRoIG1lcmdlCitjb25mbGljdHMuCisKK1RoZSBpbmRleCBpcyB0aHVzIGEgc29ydCBvZiB0ZW1wb3Jhcnkgc3RhZ2luZyBhcmVhLCB3aGljaCBpcyBmaWxsZWQgd2l0aAorYSB0cmVlIHdoaWNoIHlvdSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2Ygd29ya2luZyBvbi4KKworSWYgeW91IGJsb3cgdGhlIGluZGV4IGF3YXkgZW50aXJlbHksIHlvdSBnZW5lcmFsbHkgaGF2ZW4ndCBsb3N0IGFueQoraW5mb3JtYXRpb24gYXMgbG9uZyBhcyB5b3UgaGF2ZSB0aGUgbmFtZSBvZiB0aGUgdHJlZSB0aGF0IGl0IGRlc2NyaWJlZC4KKworW1tzdWJtb2R1bGVzXV0KKz09IFN1Ym1vZHVsZXMKKworTGFyZ2UgcHJvamVjdHMgYXJlIG9mdGVuIGNvbXBvc2VkIG9mIHNtYWxsZXIsIHNlbGYtY29udGFpbmVkIG1vZHVsZXMuICBGb3IKK2V4YW1wbGUsIGFuIGVtYmVkZGVkIExpbnV4IGRpc3RyaWJ1dGlvbidzIHNvdXJjZSB0cmVlIHdvdWxkIGluY2x1ZGUgZXZlcnkKK3BpZWNlIG9mIHNvZnR3YXJlIGluIHRoZSBkaXN0cmlidXRpb24gd2l0aCBzb21lIGxvY2FsIG1vZGlmaWNhdGlvbnM7IGEgbW92aWUKK3BsYXllciBtaWdodCBuZWVkIHRvIGJ1aWxkIGFnYWluc3QgYSBzcGVjaWZpYywga25vd24td29ya2luZyB2ZXJzaW9uIG9mIGEKK2RlY29tcHJlc3Npb24gbGlicmFyeTsgc2V2ZXJhbCBpbmRlcGVuZGVudCBwcm9ncmFtcyBtaWdodCBhbGwgc2hhcmUgdGhlIHNhbWUKK2J1aWxkIHNjcmlwdHMuCisKK1dpdGggY2VudHJhbGl6ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW1zIHRoaXMgaXMgb2Z0ZW4gYWNjb21wbGlzaGVkIGJ5CitpbmNsdWRpbmcgZXZlcnkgbW9kdWxlIGluIG9uZSBzaW5nbGUgcmVwb3NpdG9yeS4gIERldmVsb3BlcnMgY2FuIGNoZWNrIG91dAorYWxsIG1vZHVsZXMgb3Igb25seSB0aGUgbW9kdWxlcyB0aGV5IG5lZWQgdG8gd29yayB3aXRoLiAgVGhleSBjYW4gZXZlbiBtb2RpZnkKK2ZpbGVzIGFjcm9zcyBzZXZlcmFsIG1vZHVsZXMgaW4gYSBzaW5nbGUgY29tbWl0IHdoaWxlIG1vdmluZyB0aGluZ3MgYXJvdW5kCitvciB1cGRhdGluZyBBUElzIGFuZCB0cmFuc2xhdGlvbnMuCisKK0dpdCBkb2VzIG5vdCBhbGxvdyBwYXJ0aWFsIGNoZWNrb3V0cywgc28gZHVwbGljYXRpbmcgdGhpcyBhcHByb2FjaCBpbiBHaXQKK3dvdWxkIGZvcmNlIGRldmVsb3BlcnMgdG8ga2VlcCBhIGxvY2FsIGNvcHkgb2YgbW9kdWxlcyB0aGV5IGFyZSBub3QKK2ludGVyZXN0ZWQgaW4gdG91Y2hpbmcuICBDb21taXRzIGluIGFuIGVub3Jtb3VzIGNoZWNrb3V0IHdvdWxkIGJlIHNsb3dlcgordGhhbiB5b3UnZCBleHBlY3QgYXMgR2l0IHdvdWxkIGhhdmUgdG8gc2NhbiBldmVyeSBkaXJlY3RvcnkgZm9yIGNoYW5nZXMuCitJZiBtb2R1bGVzIGhhdmUgYSBsb3Qgb2YgbG9jYWwgaGlzdG9yeSwgY2xvbmVzIHdvdWxkIHRha2UgZm9yZXZlci4KKworT24gdGhlIHBsdXMgc2lkZSwgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW1zIGNhbiBtdWNoIGJldHRlcgoraW50ZWdyYXRlIHdpdGggZXh0ZXJuYWwgc291cmNlcy4gIEluIGEgY2VudHJhbGl6ZWQgbW9kZWwsIGEgc2luZ2xlIGFyYml0cmFyeQorc25hcHNob3Qgb2YgdGhlIGV4dGVybmFsIHByb2plY3QgaXMgZXhwb3J0ZWQgZnJvbSBpdHMgb3duIHJldmlzaW9uIGNvbnRyb2wKK2FuZCB0aGVuIGltcG9ydGVkIGludG8gdGhlIGxvY2FsIHJldmlzaW9uIGNvbnRyb2wgb24gYSB2ZW5kb3IgYnJhbmNoLiAgQWxsCit0aGUgaGlzdG9yeSBpcyBoaWRkZW4uICBXaXRoIGRpc3RyaWJ1dGVkIHJldmlzaW9uIGNvbnRyb2wgeW91IGNhbiBjbG9uZSB0aGUKK2VudGlyZSBleHRlcm5hbCBoaXN0b3J5IGFuZCBtdWNoIG1vcmUgZWFzaWx5IGZvbGxvdyBkZXZlbG9wbWVudCBhbmQgcmUtbWVyZ2UKK2xvY2FsIGNoYW5nZXMuCisKK0dpdCdzIHN1Ym1vZHVsZSBzdXBwb3J0IGFsbG93cyBhIHJlcG9zaXRvcnkgdG8gY29udGFpbiwgYXMgYSBzdWJkaXJlY3RvcnksIGEKK2NoZWNrb3V0IG9mIGFuIGV4dGVybmFsIHByb2plY3QuICBTdWJtb2R1bGVzIG1haW50YWluIHRoZWlyIG93biBpZGVudGl0eTsKK3RoZSBzdWJtb2R1bGUgc3VwcG9ydCBqdXN0IHN0b3JlcyB0aGUgc3VibW9kdWxlIHJlcG9zaXRvcnkgbG9jYXRpb24gYW5kCitjb21taXQgSUQsIHNvIG90aGVyIGRldmVsb3BlcnMgd2hvIGNsb25lIHRoZSBjb250YWluaW5nIHByb2plY3QKKygic3VwZXJwcm9qZWN0IikgY2FuIGVhc2lseSBjbG9uZSBhbGwgdGhlIHN1Ym1vZHVsZXMgYXQgdGhlIHNhbWUgcmV2aXNpb24uCitQYXJ0aWFsIGNoZWNrb3V0cyBvZiB0aGUgc3VwZXJwcm9qZWN0IGFyZSBwb3NzaWJsZTogeW91IGNhbiB0ZWxsIEdpdCB0bworY2xvbmUgbm9uZSwgc29tZSBvciBhbGwgb2YgdGhlIHN1Ym1vZHVsZXMuCisKK1RoZSBsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0gY29tbWFuZCBpcyBhdmFpbGFibGUgc2luY2UgR2l0IDEuNS4zLiAgVXNlcnMKK3dpdGggR2l0IDEuNS4yIGNhbiBsb29rIHVwIHRoZSBzdWJtb2R1bGUgY29tbWl0cyBpbiB0aGUgcmVwb3NpdG9yeSBhbmQKK21hbnVhbGx5IGNoZWNrIHRoZW0gb3V0OyBlYXJsaWVyIHZlcnNpb25zIHdvbid0IHJlY29nbml6ZSB0aGUgc3VibW9kdWxlcyBhdAorYWxsLgorCitUbyBzZWUgaG93IHN1Ym1vZHVsZSBzdXBwb3J0IHdvcmtzLCBjcmVhdGUgZm91ciBleGFtcGxlCityZXBvc2l0b3JpZXMgdGhhdCBjYW4gYmUgdXNlZCBsYXRlciBhcyBhIHN1Ym1vZHVsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBta2RpciB+L2dpdAorJCBjZCB+L2dpdAorJCBmb3IgaSBpbiBhIGIgYyBkCitkbworCW1rZGlyICRpCisJY2QgJGkKKwlnaXQgaW5pdAorCWVjaG8gIm1vZHVsZSAkaSIgPiAkaS50eHQKKwlnaXQgYWRkICRpLnR4dAorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0LCBzdWJtb2R1bGUgJGkiCisJY2QgLi4KK2RvbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm93IGNyZWF0ZSB0aGUgc3VwZXJwcm9qZWN0IGFuZCBhZGQgYWxsIHRoZSBzdWJtb2R1bGVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIG1rZGlyIHN1cGVyCiskIGNkIHN1cGVyCiskIGdpdCBpbml0CiskIGZvciBpIGluIGEgYiBjIGQKK2RvCisJZ2l0IHN1Ym1vZHVsZSBhZGQgfi9naXQvJGkgJGkKK2RvbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTk9URTogRG8gbm90IHVzZSBsb2NhbCBVUkxzIGhlcmUgaWYgeW91IHBsYW4gdG8gcHVibGlzaCB5b3VyIHN1cGVycHJvamVjdCEKKworU2VlIHdoYXQgZmlsZXMgYGdpdCBzdWJtb2R1bGVgIGNyZWF0ZWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgbHMgLWEKKy4gIC4uICAuZ2l0ICAuZ2l0bW9kdWxlcyAgYSAgYiAgYyAgZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYGdpdCBzdWJtb2R1bGUgYWRkIDxyZXBvPiA8cGF0aD5gIGNvbW1hbmQgZG9lcyBhIGNvdXBsZSBvZiB0aGluZ3M6CisKKy0gSXQgY2xvbmVzIHRoZSBzdWJtb2R1bGUgZnJvbSBgPHJlcG8+YCB0byB0aGUgZ2l2ZW4gYDxwYXRoPmAgdW5kZXIgdGhlCisgIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBieSBkZWZhdWx0IGNoZWNrcyBvdXQgdGhlIG1hc3RlciBicmFuY2guCistIEl0IGFkZHMgdGhlIHN1Ym1vZHVsZSdzIGNsb25lIHBhdGggdG8gdGhlIGxpbmtnaXQ6Z2l0bW9kdWxlc1s1XSBmaWxlIGFuZAorICBhZGRzIHRoaXMgZmlsZSB0byB0aGUgaW5kZXgsIHJlYWR5IHRvIGJlIGNvbW1pdHRlZC4KKy0gSXQgYWRkcyB0aGUgc3VibW9kdWxlJ3MgY3VycmVudCBjb21taXQgSUQgdG8gdGhlIGluZGV4LCByZWFkeSB0byBiZQorICBjb21taXR0ZWQuCisKK0NvbW1pdCB0aGUgc3VwZXJwcm9qZWN0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQgLW0gIkFkZCBzdWJtb2R1bGVzIGEsIGIsIGMgYW5kIGQuIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3cgY2xvbmUgdGhlIHN1cGVycHJvamVjdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBjZCAuLgorJCBnaXQgY2xvbmUgc3VwZXIgY2xvbmVkCiskIGNkIGNsb25lZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc3VibW9kdWxlIGRpcmVjdG9yaWVzIGFyZSB0aGVyZSwgYnV0IHRoZXkncmUgZW1wdHk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgbHMgLWEgYQorLiAgLi4KKyQgZ2l0IHN1Ym1vZHVsZSBzdGF0dXMKKy1kMjY2Yjk4NzNhZDUwNDg4MTYzNDU3ZjAyNWRiN2NkZDk2ODNkODhiIGEKKy1lODFkNDU3ZGExNTMwOWI0ZmVmNDI0OWFiYTliNTAxODc5OTk2NzBkIGIKKy1jMTUzNmE5NzJiOWFmZmVhMGYxNmUwNjgwYmE4NzMzMmRjMDU5MTQ2IGMKKy1kOTYyNDlmZjVkNTdkZTVkZTA5M2U2YmFmZjllMGFhZmE1Mjc2YTc0IGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTk9URTogVGhlIGNvbW1pdCBvYmplY3QgbmFtZXMgc2hvd24gYWJvdmUgd291bGQgYmUgZGlmZmVyZW50IGZvciB5b3UsIGJ1dCB0aGV5CitzaG91bGQgbWF0Y2ggdGhlIEhFQUQgY29tbWl0IG9iamVjdCBuYW1lcyBvZiB5b3VyIHJlcG9zaXRvcmllcy4gIFlvdSBjYW4gY2hlY2sKK2l0IGJ5IHJ1bm5pbmcgYGdpdCBscy1yZW1vdGUgLi4vYWAuCisKK1B1bGxpbmcgZG93biB0aGUgc3VibW9kdWxlcyBpcyBhIHR3by1zdGVwIHByb2Nlc3MuIEZpcnN0IHJ1biBgZ2l0IHN1Ym1vZHVsZQoraW5pdGAgdG8gYWRkIHRoZSBzdWJtb2R1bGUgcmVwb3NpdG9yeSBVUkxzIHRvIGAuZ2l0L2NvbmZpZ2A6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHN1Ym1vZHVsZSBpbml0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdyB1c2UgYGdpdCBzdWJtb2R1bGUgdXBkYXRlYCB0byBjbG9uZSB0aGUgcmVwb3NpdG9yaWVzIGFuZCBjaGVjayBvdXQgdGhlCitjb21taXRzIHNwZWNpZmllZCBpbiB0aGUgc3VwZXJwcm9qZWN0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzdWJtb2R1bGUgdXBkYXRlCiskIGNkIGEKKyQgbHMgLWEKKy4gIC4uICAuZ2l0ICBhLnR4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPbmUgbWFqb3IgZGlmZmVyZW5jZSBiZXR3ZWVuIGBnaXQgc3VibW9kdWxlIHVwZGF0ZWAgYW5kIGBnaXQgc3VibW9kdWxlIGFkZGAgaXMKK3RoYXQgYGdpdCBzdWJtb2R1bGUgdXBkYXRlYCBjaGVja3Mgb3V0IGEgc3BlY2lmaWMgY29tbWl0LCByYXRoZXIgdGhhbiB0aGUgdGlwCitvZiBhIGJyYW5jaC4gSXQncyBsaWtlIGNoZWNraW5nIG91dCBhIHRhZzogdGhlIGhlYWQgaXMgZGV0YWNoZWQsIHNvIHlvdSdyZSBub3QKK3dvcmtpbmcgb24gYSBicmFuY2guCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaAorKiAoZGV0YWNoZWQgZnJvbSBkMjY2Yjk4KQorICBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IHdhbnQgdG8gbWFrZSBhIGNoYW5nZSB3aXRoaW4gYSBzdWJtb2R1bGUgYW5kIHlvdSBoYXZlIGEgZGV0YWNoZWQgaGVhZCwKK3RoZW4geW91IHNob3VsZCBjcmVhdGUgb3IgY2hlY2tvdXQgYSBicmFuY2gsIG1ha2UgeW91ciBjaGFuZ2VzLCBwdWJsaXNoIHRoZQorY2hhbmdlIHdpdGhpbiB0aGUgc3VibW9kdWxlLCBhbmQgdGhlbiB1cGRhdGUgdGhlIHN1cGVycHJvamVjdCB0byByZWZlcmVuY2UgdGhlCituZXcgY29tbWl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK29yCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCAtYyBmaXgtdXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGhlbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGVjaG8gImFkZGluZyBhIGxpbmUgYWdhaW4iID4+IGEudHh0CiskIGdpdCBjb21taXQgLWEgLW0gIlVwZGF0ZWQgdGhlIHN1Ym1vZHVsZSBmcm9tIHdpdGhpbiB0aGUgc3VwZXJwcm9qZWN0LiIKKyQgZ2l0IHB1c2gKKyQgY2QgLi4KKyQgZ2l0IGRpZmYKK2RpZmYgLS1naXQgYS9hIGIvYQoraW5kZXggZDI2NmI5OC4uMjYxZGZhYyAxNjAwMDAKKy0tLSBhL2EKKysrKyBiL2EKK0BAIC0xICsxIEBACistU3VicHJvamVjdCBjb21taXQgZDI2NmI5ODczYWQ1MDQ4ODE2MzQ1N2YwMjVkYjdjZGQ5NjgzZDg4YgorK1N1YnByb2plY3QgY29tbWl0IDI2MWRmYWMzNWNiOTlkMzgwZWI5NjZlMTAyYzExOTcxMzlmN2ZhMjQKKyQgZ2l0IGFkZCBhCiskIGdpdCBjb21taXQgLW0gIlVwZGF0ZWQgc3VibW9kdWxlIGEuIgorJCBnaXQgcHVzaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgaGF2ZSB0byBydW4gYGdpdCBzdWJtb2R1bGUgdXBkYXRlYCBhZnRlciBgZ2l0IHB1bGxgIGlmIHlvdSB3YW50IHRvIHVwZGF0ZQorc3VibW9kdWxlcywgdG9vLgorCitbW3BpdGZhbGxzLXdpdGgtc3VibW9kdWxlc11dCis9PT0gUGl0ZmFsbHMgd2l0aCBzdWJtb2R1bGVzCisKK0Fsd2F5cyBwdWJsaXNoIHRoZSBzdWJtb2R1bGUgY2hhbmdlIGJlZm9yZSBwdWJsaXNoaW5nIHRoZSBjaGFuZ2UgdG8gdGhlCitzdXBlcnByb2plY3QgdGhhdCByZWZlcmVuY2VzIGl0LiBJZiB5b3UgZm9yZ2V0IHRvIHB1Ymxpc2ggdGhlIHN1Ym1vZHVsZSBjaGFuZ2UsCitvdGhlcnMgd29uJ3QgYmUgYWJsZSB0byBjbG9uZSB0aGUgcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBjZCB+L2dpdC9zdXBlci9hCiskIGVjaG8gaSBhZGRlZCBhbm90aGVyIGxpbmUgdG8gdGhpcyBmaWxlID4+IGEudHh0CiskIGdpdCBjb21taXQgLWEgLW0gImRvaW5nIGl0IHdyb25nIHRoaXMgdGltZSIKKyQgY2QgLi4KKyQgZ2l0IGFkZCBhCiskIGdpdCBjb21taXQgLW0gIlVwZGF0ZWQgc3VibW9kdWxlIGEgYWdhaW4uIgorJCBnaXQgcHVzaAorJCBjZCB+L2dpdC9jbG9uZWQKKyQgZ2l0IHB1bGwKKyQgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUKK2Vycm9yOiBwYXRoc3BlYyAnMjYxZGZhYzM1Y2I5OWQzODBlYjk2NmUxMDJjMTE5NzEzOWY3ZmEyNCcgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQuCitEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/CitVbmFibGUgdG8gY2hlY2tvdXQgJzI2MWRmYWMzNWNiOTlkMzgwZWI5NjZlMTAyYzExOTcxMzlmN2ZhMjQnIGluIHN1Ym1vZHVsZSBwYXRoICdhJworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBvbGRlciBHaXQgdmVyc2lvbnMgaXQgY291bGQgYmUgZWFzaWx5IGZvcmdvdHRlbiB0byBjb21taXQgbmV3IG9yIG1vZGlmaWVkCitmaWxlcyBpbiBhIHN1Ym1vZHVsZSwgd2hpY2ggc2lsZW50bHkgbGVhZHMgdG8gc2ltaWxhciBwcm9ibGVtcyBhcyBub3QgcHVzaGluZwordGhlIHN1Ym1vZHVsZSBjaGFuZ2VzLiBTdGFydGluZyB3aXRoIEdpdCAxLjcuMCBib3RoIGBnaXQgc3RhdHVzYCBhbmQgYGdpdCBkaWZmYAoraW4gdGhlIHN1cGVycHJvamVjdCBzaG93IHN1Ym1vZHVsZXMgYXMgbW9kaWZpZWQgd2hlbiB0aGV5IGNvbnRhaW4gbmV3IG9yCittb2RpZmllZCBmaWxlcyB0byBwcm90ZWN0IGFnYWluc3QgYWNjaWRlbnRhbGx5IGNvbW1pdHRpbmcgc3VjaCBhIHN0YXRlLiBgZ2l0CitkaWZmYCB3aWxsIGFsc28gYWRkIGEgYC1kaXJ0eWAgdG8gdGhlIHdvcmsgdHJlZSBzaWRlIHdoZW4gZ2VuZXJhdGluZyBwYXRjaAorb3V0cHV0IG9yIHVzZWQgd2l0aCB0aGUgYC0tc3VibW9kdWxlYCBvcHRpb246CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYKK2RpZmYgLS1naXQgYS9zdWIgYi9zdWIKKy0tLSBhL3N1YgorKysrIGIvc3ViCitAQCAtMSArMSBAQAorLVN1YnByb2plY3QgY29tbWl0IDNmMzU2NzA1NjQ5YjVkNTY2ZDk3ZmY4NDNjZjE5MzM1OTIyOWE0NTMKKytTdWJwcm9qZWN0IGNvbW1pdCAzZjM1NjcwNTY0OWI1ZDU2NmQ5N2ZmODQzY2YxOTMzNTkyMjlhNDUzLWRpcnR5CiskIGdpdCBkaWZmIC0tc3VibW9kdWxlCitTdWJtb2R1bGUgc3ViIDNmMzU2NzAuLjNmMzU2NzAtZGlydHk6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBhbHNvIHNob3VsZCBub3QgcmV3aW5kIGJyYW5jaGVzIGluIGEgc3VibW9kdWxlIGJleW9uZCBjb21taXRzIHRoYXQgd2VyZQorZXZlciByZWNvcmRlZCBpbiBhbnkgc3VwZXJwcm9qZWN0LgorCitJdCdzIG5vdCBzYWZlIHRvIHJ1biBgZ2l0IHN1Ym1vZHVsZSB1cGRhdGVgIGlmIHlvdSd2ZSBtYWRlIGFuZCBjb21taXR0ZWQKK2NoYW5nZXMgd2l0aGluIGEgc3VibW9kdWxlIHdpdGhvdXQgY2hlY2tpbmcgb3V0IGEgYnJhbmNoIGZpcnN0LiBUaGV5IHdpbGwgYmUKK3NpbGVudGx5IG92ZXJ3cml0dGVuOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNhdCBhLnR4dAorbW9kdWxlIGEKKyQgZWNobyBsaW5lIGFkZGVkIGZyb20gcHJpdmF0ZTIgPj4gYS50eHQKKyQgZ2l0IGNvbW1pdCAtYSAtbSAibGluZSBhZGRlZCBpbnNpZGUgcHJpdmF0ZTIiCiskIGNkIC4uCiskIGdpdCBzdWJtb2R1bGUgdXBkYXRlCitTdWJtb2R1bGUgcGF0aCAnYSc6IGNoZWNrZWQgb3V0ICdkMjY2Yjk4NzNhZDUwNDg4MTYzNDU3ZjAyNWRiN2NkZDk2ODNkODhiJworJCBjZCBhCiskIGNhdCBhLnR4dAorbW9kdWxlIGEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTk9URTogVGhlIGNoYW5nZXMgYXJlIHN0aWxsIHZpc2libGUgaW4gdGhlIHN1Ym1vZHVsZSdzIHJlZmxvZy4KKworSWYgeW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWUsIGBnaXQKK3N1Ym1vZHVsZSB1cGRhdGVgIHdpbGwgbm90IG92ZXJ3cml0ZSB0aGVtLiAgSW5zdGVhZCwgeW91IGdldCB0aGUgdXN1YWwKK3dhcm5pbmcgYWJvdXQgbm90IGJlaW5nIGFibGUgc3dpdGNoIGZyb20gYSBkaXJ0eSBicmFuY2guCisKK1tbbG93LWxldmVsLW9wZXJhdGlvbnNdXQorPT0gTG93LWxldmVsIEdpdCBvcGVyYXRpb25zCisKK01hbnkgb2YgdGhlIGhpZ2hlci1sZXZlbCBjb21tYW5kcyB3ZXJlIG9yaWdpbmFsbHkgaW1wbGVtZW50ZWQgYXMgc2hlbGwKK3NjcmlwdHMgdXNpbmcgYSBzbWFsbGVyIGNvcmUgb2YgbG93LWxldmVsIEdpdCBjb21tYW5kcy4gIFRoZXNlIGNhbiBzdGlsbAorYmUgdXNlZnVsIHdoZW4gZG9pbmcgdW51c3VhbCB0aGluZ3Mgd2l0aCBHaXQsIG9yIGp1c3QgYXMgYSB3YXkgdG8KK3VuZGVyc3RhbmQgaXRzIGlubmVyIHdvcmtpbmdzLgorCitbW29iamVjdC1tYW5pcHVsYXRpb25dXQorPT09IE9iamVjdCBhY2Nlc3MgYW5kIG1hbmlwdWxhdGlvbgorCitUaGUgbGlua2dpdDpnaXQtY2F0LWZpbGVbMV0gY29tbWFuZCBjYW4gc2hvdyB0aGUgY29udGVudHMgb2YgYW55IG9iamVjdCwKK3Rob3VnaCB0aGUgaGlnaGVyLWxldmVsIGxpbmtnaXQ6Z2l0LXNob3dbMV0gaXMgdXN1YWxseSBtb3JlIHVzZWZ1bC4KKworVGhlIGxpbmtnaXQ6Z2l0LWNvbW1pdC10cmVlWzFdIGNvbW1hbmQgYWxsb3dzIGNvbnN0cnVjdGluZyBjb21taXRzIHdpdGgKK2FyYml0cmFyeSBwYXJlbnRzIGFuZCB0cmVlcy4KKworQSB0cmVlIGNhbiBiZSBjcmVhdGVkIHdpdGggbGlua2dpdDpnaXQtd3JpdGUtdHJlZVsxXSBhbmQgaXRzIGRhdGEgY2FuIGJlCithY2Nlc3NlZCBieSBsaW5rZ2l0OmdpdC1scy10cmVlWzFdLiAgVHdvIHRyZWVzIGNhbiBiZSBjb21wYXJlZCB3aXRoCitsaW5rZ2l0OmdpdC1kaWZmLXRyZWVbMV0uCisKK0EgdGFnIGlzIGNyZWF0ZWQgd2l0aCBsaW5rZ2l0OmdpdC1ta3RhZ1sxXSwgYW5kIHRoZSBzaWduYXR1cmUgY2FuIGJlCit2ZXJpZmllZCBieSBsaW5rZ2l0OmdpdC12ZXJpZnktdGFnWzFdLCB0aG91Z2ggaXQgaXMgbm9ybWFsbHkgc2ltcGxlciB0bwordXNlIGxpbmtnaXQ6Z2l0LXRhZ1sxXSBmb3IgYm90aC4KKworW1t0aGUtd29ya2Zsb3ddXQorPT09IFRoZSBXb3JrZmxvdworCitIaWdoLWxldmVsIG9wZXJhdGlvbnMgc3VjaCBhcyBsaW5rZ2l0OmdpdC1jb21taXRbMV0gYW5kCitsaW5rZ2l0OmdpdC1yZXN0b3JlWzFdIHdvcmsgYnkgbW92aW5nIGRhdGEKK2JldHdlZW4gdGhlIHdvcmtpbmcgdHJlZSwgdGhlIGluZGV4LCBhbmQgdGhlIG9iamVjdCBkYXRhYmFzZS4gIEdpdAorcHJvdmlkZXMgbG93LWxldmVsIG9wZXJhdGlvbnMgd2hpY2ggcGVyZm9ybSBlYWNoIG9mIHRoZXNlIHN0ZXBzCitpbmRpdmlkdWFsbHkuCisKK0dlbmVyYWxseSwgYWxsIEdpdCBvcGVyYXRpb25zIHdvcmsgb24gdGhlIGluZGV4IGZpbGUuIFNvbWUgb3BlcmF0aW9ucword29yayAqcHVyZWx5KiBvbiB0aGUgaW5kZXggZmlsZSAoc2hvd2luZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUKK2luZGV4KSwgYnV0IG1vc3Qgb3BlcmF0aW9ucyBtb3ZlIGRhdGEgYmV0d2VlbiB0aGUgaW5kZXggZmlsZSBhbmQgZWl0aGVyCit0aGUgZGF0YWJhc2Ugb3IgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiBUaHVzIHRoZXJlIGFyZSBmb3VyIG1haW4KK2NvbWJpbmF0aW9uczoKKworW1t3b3JraW5nLWRpcmVjdG9yeS10by1pbmRleF1dCis9PT09IHdvcmtpbmcgZGlyZWN0b3J5IC0+IGluZGV4CisKK1RoZSBsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0gY29tbWFuZCB1cGRhdGVzIHRoZSBpbmRleCB3aXRoCitpbmZvcm1hdGlvbiBmcm9tIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gIFlvdSBnZW5lcmFsbHkgdXBkYXRlIHRoZQoraW5kZXggaW5mb3JtYXRpb24gYnkganVzdCBzcGVjaWZ5aW5nIHRoZSBmaWxlbmFtZSB5b3Ugd2FudCB0byB1cGRhdGUsCitsaWtlIHNvOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB1cGRhdGUtaW5kZXggZmlsZW5hbWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYnV0IHRvIGF2b2lkIGNvbW1vbiBtaXN0YWtlcyB3aXRoIGZpbGVuYW1lIGdsb2JiaW5nIGV0Yy4sIHRoZSBjb21tYW5kCit3aWxsIG5vdCBub3JtYWxseSBhZGQgdG90YWxseSBuZXcgZW50cmllcyBvciByZW1vdmUgb2xkIGVudHJpZXMsCitpLmUuIGl0IHdpbGwgbm9ybWFsbHkganVzdCB1cGRhdGUgZXhpc3RpbmcgY2FjaGUgZW50cmllcy4KKworVG8gdGVsbCBHaXQgdGhhdCB5ZXMsIHlvdSByZWFsbHkgZG8gcmVhbGl6ZSB0aGF0IGNlcnRhaW4gZmlsZXMgbm8KK2xvbmdlciBleGlzdCwgb3IgdGhhdCBuZXcgZmlsZXMgc2hvdWxkIGJlIGFkZGVkLCB5b3UKK3Nob3VsZCB1c2UgdGhlIGAtLXJlbW92ZWAgYW5kIGAtLWFkZGAgZmxhZ3MgcmVzcGVjdGl2ZWx5LgorCitOT1RFISBBIGAtLXJlbW92ZWAgZmxhZyBkb2VzICdub3QnIG1lYW4gdGhhdCBzdWJzZXF1ZW50IGZpbGVuYW1lcyB3aWxsCituZWNlc3NhcmlseSBiZSByZW1vdmVkOiBpZiB0aGUgZmlsZXMgc3RpbGwgZXhpc3QgaW4geW91ciBkaXJlY3RvcnkKK3N0cnVjdHVyZSwgdGhlIGluZGV4IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZWlyIG5ldyBzdGF0dXMsIG5vdAorcmVtb3ZlZC4gVGhlIG9ubHkgdGhpbmcgYC0tcmVtb3ZlYCBtZWFucyBpcyB0aGF0IHVwZGF0ZS1pbmRleCB3aWxsIGJlCitjb25zaWRlcmluZyBhIHJlbW92ZWQgZmlsZSB0byBiZSBhIHZhbGlkIHRoaW5nLCBhbmQgaWYgdGhlIGZpbGUgcmVhbGx5Citkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgaXQgd2lsbCB1cGRhdGUgdGhlIGluZGV4IGFjY29yZGluZ2x5LgorCitBcyBhIHNwZWNpYWwgY2FzZSwgeW91IGNhbiBhbHNvIGRvIGBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaGAsIHdoaWNoCit3aWxsIHJlZnJlc2ggdGhlICJzdGF0IiBpbmZvcm1hdGlvbiBvZiBlYWNoIGluZGV4IHRvIG1hdGNoIHRoZSBjdXJyZW50CitzdGF0IGluZm9ybWF0aW9uLiBJdCB3aWxsICdub3QnIHVwZGF0ZSB0aGUgb2JqZWN0IHN0YXR1cyBpdHNlbGYsIGFuZAoraXQgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgZmllbGRzIHRoYXQgYXJlIHVzZWQgdG8gcXVpY2tseSB0ZXN0IHdoZXRoZXIKK2FuIG9iamVjdCBzdGlsbCBtYXRjaGVzIGl0cyBvbGQgYmFja2luZyBzdG9yZSBvYmplY3QuCisKK1RoZSBwcmV2aW91c2x5IGludHJvZHVjZWQgbGlua2dpdDpnaXQtYWRkWzFdIGlzIGp1c3QgYSB3cmFwcGVyIGZvcgorbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdLgorCitbW2luZGV4LXRvLW9iamVjdC1kYXRhYmFzZV1dCis9PT09IGluZGV4IC0+IG9iamVjdCBkYXRhYmFzZQorCitZb3Ugd3JpdGUgeW91ciBjdXJyZW50IGluZGV4IGZpbGUgdG8gYSAidHJlZSIgb2JqZWN0IHdpdGggdGhlIHByb2dyYW0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgd3JpdGUtdHJlZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0aGF0IGRvZXNuJ3QgY29tZSB3aXRoIGFueSBvcHRpb25zLS1pdCB3aWxsIGp1c3Qgd3JpdGUgb3V0IHRoZQorY3VycmVudCBpbmRleCBpbnRvIHRoZSBzZXQgb2YgdHJlZSBvYmplY3RzIHRoYXQgZGVzY3JpYmUgdGhhdCBzdGF0ZSwKK2FuZCBpdCB3aWxsIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgcmVzdWx0aW5nIHRvcC1sZXZlbCB0cmVlLiBZb3UgY2FuCit1c2UgdGhhdCB0cmVlIHRvIHJlLWdlbmVyYXRlIHRoZSBpbmRleCBhdCBhbnkgdGltZSBieSBnb2luZyBpbiB0aGUKK290aGVyIGRpcmVjdGlvbjoKKworW1tvYmplY3QtZGF0YWJhc2UtdG8taW5kZXhdXQorPT09PSBvYmplY3QgZGF0YWJhc2UgLT4gaW5kZXgKKworWW91IHJlYWQgYSAidHJlZSIgZmlsZSBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UsIGFuZCB1c2UgdGhhdCB0bworcG9wdWxhdGUgKGFuZCBvdmVyd3JpdGUtLWRvbid0IGRvIHRoaXMgaWYgeW91ciBpbmRleCBjb250YWlucyBhbnkKK3Vuc2F2ZWQgc3RhdGUgdGhhdCB5b3UgbWlnaHQgd2FudCB0byByZXN0b3JlIGxhdGVyISkgeW91ciBjdXJyZW50CitpbmRleC4gIE5vcm1hbCBvcGVyYXRpb24gaXMganVzdAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZWFkLXRyZWUgPFNIQS0xIG9mIHRyZWU+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB5b3VyIGluZGV4IGZpbGUgd2lsbCBub3cgYmUgZXF1aXZhbGVudCB0byB0aGUgdHJlZSB0aGF0IHlvdSBzYXZlZAorZWFybGllci4gSG93ZXZlciwgdGhhdCBpcyBvbmx5IHlvdXIgJ2luZGV4JyBmaWxlOiB5b3VyIHdvcmtpbmcKK2RpcmVjdG9yeSBjb250ZW50cyBoYXZlIG5vdCBiZWVuIG1vZGlmaWVkLgorCitbW2luZGV4LXRvLXdvcmtpbmctZGlyZWN0b3J5XV0KKz09PT0gaW5kZXggLT4gd29ya2luZyBkaXJlY3RvcnkKKworWW91IHVwZGF0ZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGZyb20gdGhlIGluZGV4IGJ5ICJjaGVja2luZyBvdXQiCitmaWxlcy4gVGhpcyBpcyBub3QgYSB2ZXJ5IGNvbW1vbiBvcGVyYXRpb24sIHNpbmNlIG5vcm1hbGx5IHlvdSdkIGp1c3QKK2tlZXAgeW91ciBmaWxlcyB1cGRhdGVkLCBhbmQgcmF0aGVyIHRoYW4gd3JpdGUgdG8geW91ciB3b3JraW5nCitkaXJlY3RvcnksIHlvdSdkIHRlbGwgdGhlIGluZGV4IGZpbGVzIGFib3V0IHRoZSBjaGFuZ2VzIGluIHlvdXIKK3dvcmtpbmcgZGlyZWN0b3J5IChpLmUuIGBnaXQgdXBkYXRlLWluZGV4YCkuCisKK0hvd2V2ZXIsIGlmIHlvdSBkZWNpZGUgdG8ganVtcCB0byBhIG5ldyB2ZXJzaW9uLCBvciBjaGVjayBvdXQgc29tZWJvZHkKK2Vsc2UncyB2ZXJzaW9uLCBvciBqdXN0IHJlc3RvcmUgYSBwcmV2aW91cyB0cmVlLCB5b3UnZCBwb3B1bGF0ZSB5b3VyCitpbmRleCBmaWxlIHdpdGggcmVhZC10cmVlLCBhbmQgdGhlbiB5b3UgbmVlZCB0byBjaGVjayBvdXQgdGhlIHJlc3VsdAord2l0aAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dC1pbmRleCBmaWxlbmFtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvciwgaWYgeW91IHdhbnQgdG8gY2hlY2sgb3V0IGFsbCBvZiB0aGUgaW5kZXgsIHVzZSBgLWFgLgorCitOT1RFISBgZ2l0IGNoZWNrb3V0LWluZGV4YCBub3JtYWxseSByZWZ1c2VzIHRvIG92ZXJ3cml0ZSBvbGQgZmlsZXMsIHNvCitpZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBvZiB0aGUgdHJlZSBhbHJlYWR5IGNoZWNrZWQgb3V0LCB5b3Ugd2lsbAorbmVlZCB0byB1c2UgdGhlIGAtZmAgZmxhZyAoJ2JlZm9yZScgdGhlIGAtYWAgZmxhZyBvciB0aGUgZmlsZW5hbWUpIHRvCisnZm9yY2UnIHRoZSBjaGVja291dC4KKworCitGaW5hbGx5LCB0aGVyZSBhcmUgYSBmZXcgb2RkcyBhbmQgZW5kcyB3aGljaCBhcmUgbm90IHB1cmVseSBtb3ZpbmcKK2Zyb20gb25lIHJlcHJlc2VudGF0aW9uIHRvIHRoZSBvdGhlcjoKKworW1t0eWluZy1pdC1hbGwtdG9nZXRoZXJdXQorPT09PSBUeWluZyBpdCBhbGwgdG9nZXRoZXIKKworVG8gY29tbWl0IGEgdHJlZSB5b3UgaGF2ZSBpbnN0YW50aWF0ZWQgd2l0aCBgZ2l0IHdyaXRlLXRyZWVgLCB5b3UnZAorY3JlYXRlIGEgImNvbW1pdCIgb2JqZWN0IHRoYXQgcmVmZXJzIHRvIHRoYXQgdHJlZSBhbmQgdGhlIGhpc3RvcnkKK2JlaGluZCBpdC0tbW9zdCBub3RhYmx5IHRoZSAicGFyZW50IiBjb21taXRzIHRoYXQgcHJlY2VkZWQgaXQgaW4KK2hpc3RvcnkuCisKK05vcm1hbGx5IGEgImNvbW1pdCIgaGFzIG9uZSBwYXJlbnQ6IHRoZSBwcmV2aW91cyBzdGF0ZSBvZiB0aGUgdHJlZQorYmVmb3JlIGEgY2VydGFpbiBjaGFuZ2Ugd2FzIG1hZGUuIEhvd2V2ZXIsIHNvbWV0aW1lcyBpdCBjYW4gaGF2ZSB0d28KK29yIG1vcmUgcGFyZW50IGNvbW1pdHMsIGluIHdoaWNoIGNhc2Ugd2UgY2FsbCBpdCBhICJtZXJnZSIsIGR1ZSB0byB0aGUKK2ZhY3QgdGhhdCBzdWNoIGEgY29tbWl0IGJyaW5ncyB0b2dldGhlciAoIm1lcmdlcyIpIHR3byBvciBtb3JlCitwcmV2aW91cyBzdGF0ZXMgcmVwcmVzZW50ZWQgYnkgb3RoZXIgY29tbWl0cy4KKworSW4gb3RoZXIgd29yZHMsIHdoaWxlIGEgInRyZWUiIHJlcHJlc2VudHMgYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeSBzdGF0ZQorb2YgYSB3b3JraW5nIGRpcmVjdG9yeSwgYSAiY29tbWl0IiByZXByZXNlbnRzIHRoYXQgc3RhdGUgaW4gdGltZSwKK2FuZCBleHBsYWlucyBob3cgd2UgZ290IHRoZXJlLgorCitZb3UgY3JlYXRlIGEgY29tbWl0IG9iamVjdCBieSBnaXZpbmcgaXQgdGhlIHRyZWUgdGhhdCBkZXNjcmliZXMgdGhlCitzdGF0ZSBhdCB0aGUgdGltZSBvZiB0aGUgY29tbWl0LCBhbmQgYSBsaXN0IG9mIHBhcmVudHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdC10cmVlIDx0cmVlPiAtcCA8cGFyZW50PiBbKC1wIDxwYXJlbnQyPikuLi5dCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB0aGVuIGdpdmluZyB0aGUgcmVhc29uIGZvciB0aGUgY29tbWl0IG9uIHN0ZGluIChlaXRoZXIgdGhyb3VnaAorcmVkaXJlY3Rpb24gZnJvbSBhIHBpcGUgb3IgZmlsZSwgb3IgYnkganVzdCB0eXBpbmcgaXQgYXQgdGhlIHR0eSkuCisKK2BnaXQgY29tbWl0LXRyZWVgIHdpbGwgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QgdGhhdCByZXByZXNlbnRzCit0aGF0IGNvbW1pdCwgYW5kIHlvdSBzaG91bGQgc2F2ZSBpdCBhd2F5IGZvciBsYXRlciB1c2UuIE5vcm1hbGx5LAoreW91J2QgY29tbWl0IGEgbmV3IGBIRUFEYCBzdGF0ZSwgYW5kIHdoaWxlIEdpdCBkb2Vzbid0IGNhcmUgd2hlcmUgeW91CitzYXZlIHRoZSBub3RlIGFib3V0IHRoYXQgc3RhdGUsIGluIHByYWN0aWNlIHdlIHRlbmQgdG8ganVzdCB3cml0ZSB0aGUKK3Jlc3VsdCB0byB0aGUgZmlsZSBwb2ludGVkIGF0IGJ5IGAuZ2l0L0hFQURgLCBzbyB0aGF0IHdlIGNhbiBhbHdheXMgc2VlCit3aGF0IHRoZSBsYXN0IGNvbW1pdHRlZCBzdGF0ZSB3YXMuCisKK0hlcmUgaXMgYSBwaWN0dXJlIHRoYXQgaWxsdXN0cmF0ZXMgaG93IHZhcmlvdXMgcGllY2VzIGZpdCB0b2dldGhlcjoKKworLS0tLS0tLS0tLS0tCisKKyAgICAgICAgICAgICAgICAgICAgIGNvbW1pdC10cmVlCisgICAgICAgICAgICAgICAgICAgICAgY29tbWl0IG9iagorICAgICAgICAgICAgICAgICAgICAgICArLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICAgICBWICAgIFYKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICB8IE9iamVjdCBEQiB8CisgICAgICAgICAgICAgICAgICAgIHwgIEJhY2tpbmcgIHwKKyAgICAgICAgICAgICAgICAgICAgfCAgIFN0b3JlICAgfAorICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgIF4KKyAgICAgICAgICAgd3JpdGUtdHJlZSAgfCAgICAgfAorICAgICAgICAgICAgIHRyZWUgb2JqICB8ICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgIHJlYWQtdHJlZQorICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICB0cmVlIG9iagorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWCisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgfCAgIEluZGV4ICAgfAorICAgICAgICAgICAgICAgICAgICB8ICAiY2FjaGUiICB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgIHVwZGF0ZS1pbmRleCAgXgorICAgICAgICAgICAgIGJsb2Igb2JqICB8ICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwKKyAgICBjaGVja291dC1pbmRleCAtdSAgfCAgICAgfCAgY2hlY2tvdXQtaW5kZXgKKyAgICAgICAgICAgICBzdGF0ICAgICAgfCAgICAgfCAgYmxvYiBvYmoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVgorICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIHwgIFdvcmtpbmcgIHwKKyAgICAgICAgICAgICAgICAgICAgfCBEaXJlY3RvcnkgfAorICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisKKy0tLS0tLS0tLS0tLQorCisKK1tbZXhhbWluaW5nLXRoZS1kYXRhXV0KKz09PSBFeGFtaW5pbmcgdGhlIGRhdGEKKworWW91IGNhbiBleGFtaW5lIHRoZSBkYXRhIHJlcHJlc2VudGVkIGluIHRoZSBvYmplY3QgZGF0YWJhc2UgYW5kIHRoZQoraW5kZXggd2l0aCB2YXJpb3VzIGhlbHBlciB0b29scy4gRm9yIGV2ZXJ5IG9iamVjdCwgeW91IGNhbiB1c2UKK2xpbmtnaXQ6Z2l0LWNhdC1maWxlWzFdIHRvIGV4YW1pbmUgZGV0YWlscyBhYm91dCB0aGUKK29iamVjdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgLXQgPG9iamVjdG5hbWU+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Nob3dzIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIGFuZCBvbmNlIHlvdSBoYXZlIHRoZSB0eXBlICh3aGljaCBpcwordXN1YWxseSBpbXBsaWNpdCBpbiB3aGVyZSB5b3UgZmluZCB0aGUgb2JqZWN0KSwgeW91IGNhbiB1c2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgYmxvYnx0cmVlfGNvbW1pdHx0YWcgPG9iamVjdG5hbWU+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIHNob3cgaXRzIGNvbnRlbnRzLiBOT1RFISBUcmVlcyBoYXZlIGJpbmFyeSBjb250ZW50LCBhbmQgYXMgYSByZXN1bHQKK3RoZXJlIGlzIGEgc3BlY2lhbCBoZWxwZXIgZm9yIHNob3dpbmcgdGhhdCBjb250ZW50LCBjYWxsZWQKK2BnaXQgbHMtdHJlZWAsIHdoaWNoIHR1cm5zIHRoZSBiaW5hcnkgY29udGVudCBpbnRvIGEgbW9yZSBlYXNpbHkKK3JlYWRhYmxlIGZvcm0uCisKK0l0J3MgZXNwZWNpYWxseSBpbnN0cnVjdGl2ZSB0byBsb29rIGF0ICJjb21taXQiIG9iamVjdHMsIHNpbmNlIHRob3NlCit0ZW5kIHRvIGJlIHNtYWxsIGFuZCBmYWlybHkgc2VsZi1leHBsYW5hdG9yeS4gSW4gcGFydGljdWxhciwgaWYgeW91Citmb2xsb3cgdGhlIGNvbnZlbnRpb24gb2YgaGF2aW5nIHRoZSB0b3AgY29tbWl0IG5hbWUgaW4gYC5naXQvSEVBRGAsCit5b3UgY2FuIGRvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIHNlZSB3aGF0IHRoZSB0b3AgY29tbWl0IHdhcy4KKworW1ttZXJnaW5nLW11bHRpcGxlLXRyZWVzXV0KKz09PSBNZXJnaW5nIG11bHRpcGxlIHRyZWVzCisKK0dpdCBjYW4gaGVscCB5b3UgcGVyZm9ybSBhIHRocmVlLXdheSBtZXJnZSwgd2hpY2ggY2FuIGluIHR1cm4gYmUKK3VzZWQgZm9yIGEgbWFueS13YXkgbWVyZ2UgYnkgcmVwZWF0aW5nIHRoZSBtZXJnZSBwcm9jZWR1cmUgc2V2ZXJhbAordGltZXMuICBUaGUgdXN1YWwgc2l0dWF0aW9uIGlzIHRoYXQgeW91IG9ubHkgZG8gb25lIHRocmVlLXdheSBtZXJnZQorKHJlY29uY2lsaW5nIHR3byBsaW5lcyBvZiBoaXN0b3J5KSBhbmQgY29tbWl0IHRoZSByZXN1bHQsIGJ1dCBpZgoreW91IGxpa2UgdG8sIHlvdSBjYW4gbWVyZ2Ugc2V2ZXJhbCBicmFuY2hlcyBpbiBvbmUgZ28uCisKK1RvIHBlcmZvcm0gYSB0aHJlZS13YXkgbWVyZ2UsIHlvdSBzdGFydCB3aXRoIHRoZSB0d28gY29tbWl0cyB5b3UKK3dhbnQgdG8gbWVyZ2UsIGZpbmQgdGhlaXIgY2xvc2VzdCBjb21tb24gcGFyZW50IChhIHRoaXJkIGNvbW1pdCksCithbmQgY29tcGFyZSB0aGUgdHJlZXMgY29ycmVzcG9uZGluZyB0byB0aGVzZSB0aHJlZSBjb21taXRzLgorCitUbyBnZXQgdGhlICJiYXNlIiBmb3IgdGhlIG1lcmdlLCBsb29rIHVwIHRoZSBjb21tb24gcGFyZW50IG9mIHR3bworY29tbWl0czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UtYmFzZSA8Y29tbWl0MT4gPGNvbW1pdDI+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgcHJpbnRzIHRoZSBuYW1lIG9mIGEgY29tbWl0IHRoZXkgYXJlIGJvdGggYmFzZWQgb24uIFlvdSBzaG91bGQKK25vdyBsb29rIHVwIHRoZSB0cmVlIG9iamVjdHMgb2YgdGhvc2UgY29tbWl0cywgd2hpY2ggeW91IGNhbiBlYXNpbHkKK2RvIHdpdGgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgY29tbWl0IDxjb21taXRuYW1lPiB8IGhlYWQgLTEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc2luY2UgdGhlIHRyZWUgb2JqZWN0IGluZm9ybWF0aW9uIGlzIGFsd2F5cyB0aGUgZmlyc3QgbGluZSBpbiBhIGNvbW1pdAorb2JqZWN0LgorCitPbmNlIHlvdSBrbm93IHRoZSB0aHJlZSB0cmVlcyB5b3UgYXJlIGdvaW5nIHRvIG1lcmdlICh0aGUgb25lICJvcmlnaW5hbCIKK3RyZWUsIGFrYSB0aGUgY29tbW9uIHRyZWUsIGFuZCB0aGUgdHdvICJyZXN1bHQiIHRyZWVzLCBha2EgdGhlIGJyYW5jaGVzCit5b3Ugd2FudCB0byBtZXJnZSksIHlvdSBkbyBhICJtZXJnZSIgcmVhZCBpbnRvIHRoZSBpbmRleC4gVGhpcyB3aWxsCitjb21wbGFpbiBpZiBpdCBoYXMgdG8gdGhyb3cgYXdheSB5b3VyIG9sZCBpbmRleCBjb250ZW50cywgc28geW91IHNob3VsZAorbWFrZSBzdXJlIHRoYXQgeW91J3ZlIGNvbW1pdHRlZCB0aG9zZS0taW4gZmFjdCB5b3Ugd291bGQgbm9ybWFsbHkKK2Fsd2F5cyBkbyBhIG1lcmdlIGFnYWluc3QgeW91ciBsYXN0IGNvbW1pdCAod2hpY2ggc2hvdWxkIHRodXMgbWF0Y2ggd2hhdAoreW91IGhhdmUgaW4geW91ciBjdXJyZW50IGluZGV4IGFueXdheSkuCisKK1RvIGRvIHRoZSBtZXJnZSwgZG8KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVhZC10cmVlIC1tIC11IDxvcmlndHJlZT4gPHlvdXJ0cmVlPiA8dGFyZ2V0dHJlZT4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCBkbyBhbGwgdHJpdmlhbCBtZXJnZSBvcGVyYXRpb25zIGZvciB5b3UgZGlyZWN0bHkgaW4gdGhlCitpbmRleCBmaWxlLCBhbmQgeW91IGNhbiBqdXN0IHdyaXRlIHRoZSByZXN1bHQgb3V0IHdpdGgKK2BnaXQgd3JpdGUtdHJlZWAuCisKKworW1ttZXJnaW5nLW11bHRpcGxlLXRyZWVzLTJdXQorPT09IE1lcmdpbmcgbXVsdGlwbGUgdHJlZXMsIGNvbnRpbnVlZAorCitTYWRseSwgbWFueSBtZXJnZXMgYXJlbid0IHRyaXZpYWwuIElmIHRoZXJlIGFyZSBmaWxlcyB0aGF0IGhhdmUKK2JlZW4gYWRkZWQsIG1vdmVkIG9yIHJlbW92ZWQsIG9yIGlmIGJvdGggYnJhbmNoZXMgaGF2ZSBtb2RpZmllZCB0aGUKK3NhbWUgZmlsZSwgeW91IHdpbGwgYmUgbGVmdCB3aXRoIGFuIGluZGV4IHRyZWUgdGhhdCBjb250YWlucyAibWVyZ2UKK2VudHJpZXMiIGluIGl0LiBTdWNoIGFuIGluZGV4IHRyZWUgY2FuICdOT1QnIGJlIHdyaXR0ZW4gb3V0IHRvIGEgdHJlZQorb2JqZWN0LCBhbmQgeW91IHdpbGwgaGF2ZSB0byByZXNvbHZlIGFueSBzdWNoIG1lcmdlIGNsYXNoZXMgdXNpbmcKK290aGVyIHRvb2xzIGJlZm9yZSB5b3UgY2FuIHdyaXRlIG91dCB0aGUgcmVzdWx0LgorCitZb3UgY2FuIGV4YW1pbmUgc3VjaCBpbmRleCBzdGF0ZSB3aXRoIGBnaXQgbHMtZmlsZXMgLS11bm1lcmdlZGAKK2NvbW1hbmQuICBBbiBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlYWQtdHJlZSAtbSAkb3JpZyBIRUFEICR0YXJnZXQKKyQgZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQKKzEwMDY0NCAyNjM0MTRmNDIzZDBlNGQ3MGRhZThmZTUzZmEzNDYxNGZmM2UyODYwIDEJaGVsbG8uYworMTAwNjQ0IDA2ZmE2YTI0MjU2ZGM3ZTU2MGVmYTU2ODdmYTg0YjUxZjAyNjNjM2EgMgloZWxsby5jCisxMDA2NDQgY2M0NGM3M2ViNzgzNTY1ZGE1ODMxYjRkODIwYzk2Mjk1NDAxOWI2OSAzCWhlbGxvLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFYWNoIGxpbmUgb2YgdGhlIGBnaXQgbHMtZmlsZXMgLS11bm1lcmdlZGAgb3V0cHV0IGJlZ2lucyB3aXRoCit0aGUgYmxvYiBtb2RlIGJpdHMsIGJsb2IgU0hBLTEsICdzdGFnZSBudW1iZXInLCBhbmQgdGhlCitmaWxlbmFtZS4gIFRoZSAnc3RhZ2UgbnVtYmVyJyBpcyBHaXQncyB3YXkgdG8gc2F5IHdoaWNoIHRyZWUgaXQKK2NhbWUgZnJvbTogc3RhZ2UgMSBjb3JyZXNwb25kcyB0byB0aGUgYCRvcmlnYCB0cmVlLCBzdGFnZSAyIHRvCit0aGUgYEhFQURgIHRyZWUsIGFuZCBzdGFnZSAzIHRvIHRoZSBgJHRhcmdldGAgdHJlZS4KKworRWFybGllciB3ZSBzYWlkIHRoYXQgdHJpdmlhbCBtZXJnZXMgYXJlIGRvbmUgaW5zaWRlCitgZ2l0IHJlYWQtdHJlZSAtbWAuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGZpbGUgZGlkIG5vdCBjaGFuZ2UKK2Zyb20gYCRvcmlnYCB0byBgSEVBRGAgb3IgYCR0YXJnZXRgLCBvciBpZiB0aGUgZmlsZSBjaGFuZ2VkCitmcm9tIGAkb3JpZ2AgdG8gYEhFQURgIGFuZCBgJG9yaWdgIHRvIGAkdGFyZ2V0YCB0aGUgc2FtZSB3YXksCitvYnZpb3VzbHkgdGhlIGZpbmFsIG91dGNvbWUgaXMgd2hhdCBpcyBpbiBgSEVBRGAuICBXaGF0IHRoZQorYWJvdmUgZXhhbXBsZSBzaG93cyBpcyB0aGF0IGZpbGUgYGhlbGxvLmNgIHdhcyBjaGFuZ2VkIGZyb20KK2Akb3JpZ2AgdG8gYEhFQURgIGFuZCBgJG9yaWdgIHRvIGAkdGFyZ2V0YCBpbiBhIGRpZmZlcmVudCB3YXkuCitZb3UgY291bGQgcmVzb2x2ZSB0aGlzIGJ5IHJ1bm5pbmcgeW91ciBmYXZvcml0ZSAzLXdheSBtZXJnZQorcHJvZ3JhbSwgZS5nLiAgYGRpZmYzYCwgYG1lcmdlYCwgb3IgR2l0J3Mgb3duIG1lcmdlLWZpbGUsIG9uCit0aGUgYmxvYiBvYmplY3RzIGZyb20gdGhlc2UgdGhyZWUgc3RhZ2VzIHlvdXJzZWxmLCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgYmxvYiAyNjM0MTRmID5oZWxsby5jfjEKKyQgZ2l0IGNhdC1maWxlIGJsb2IgMDZmYTZhMiA+aGVsbG8uY34yCiskIGdpdCBjYXQtZmlsZSBibG9iIGNjNDRjNzMgPmhlbGxvLmN+MworJCBnaXQgbWVyZ2UtZmlsZSBoZWxsby5jfjIgaGVsbG8uY34xIGhlbGxvLmN+MworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd291bGQgbGVhdmUgdGhlIG1lcmdlIHJlc3VsdCBpbiBgaGVsbG8uY34yYCBmaWxlLCBhbG9uZword2l0aCBjb25mbGljdCBtYXJrZXJzIGlmIHRoZXJlIGFyZSBjb25mbGljdHMuICBBZnRlciB2ZXJpZnlpbmcKK3RoZSBtZXJnZSByZXN1bHQgbWFrZXMgc2Vuc2UsIHlvdSBjYW4gdGVsbCBHaXQgd2hhdCB0aGUgZmluYWwKK21lcmdlIHJlc3VsdCBmb3IgdGhpcyBmaWxlIGlzIGJ5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIG12IC1mIGhlbGxvLmN+MiBoZWxsby5jCiskIGdpdCB1cGRhdGUtaW5kZXggaGVsbG8uYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGEgcGF0aCBpcyBpbiB0aGUgInVubWVyZ2VkIiBzdGF0ZSwgcnVubmluZyBgZ2l0IHVwZGF0ZS1pbmRleGAgZm9yCit0aGF0IHBhdGggdGVsbHMgR2l0IHRvIG1hcmsgdGhlIHBhdGggcmVzb2x2ZWQuCisKK1RoZSBhYm92ZSBpcyB0aGUgZGVzY3JpcHRpb24gb2YgYSBHaXQgbWVyZ2UgYXQgdGhlIGxvd2VzdCBsZXZlbCwKK3RvIGhlbHAgeW91IHVuZGVyc3RhbmQgd2hhdCBjb25jZXB0dWFsbHkgaGFwcGVucyB1bmRlciB0aGUgaG9vZC4KK0luIHByYWN0aWNlLCBub2JvZHksIG5vdCBldmVuIEdpdCBpdHNlbGYsIHJ1bnMgYGdpdCBjYXQtZmlsZWAgdGhyZWUgdGltZXMKK2ZvciB0aGlzLiAgVGhlcmUgaXMgYSBgZ2l0IG1lcmdlLWluZGV4YCBwcm9ncmFtIHRoYXQgZXh0cmFjdHMgdGhlCitzdGFnZXMgdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCBjYWxscyBhICJtZXJnZSIgc2NyaXB0IG9uIGl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZS1pbmRleCBnaXQtbWVyZ2Utb25lLWZpbGUgaGVsbG8uYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhhdCBpcyB3aGF0IGhpZ2hlciBsZXZlbCBgZ2l0IG1lcmdlIC1zIHJlc29sdmVgIGlzIGltcGxlbWVudGVkIHdpdGguCisKK1tbaGFja2luZy1naXRdXQorPT0gSGFja2luZyBHaXQKKworVGhpcyBjaGFwdGVyIGNvdmVycyBpbnRlcm5hbCBkZXRhaWxzIG9mIHRoZSBHaXQgaW1wbGVtZW50YXRpb24gd2hpY2gKK3Byb2JhYmx5IG9ubHkgR2l0IGRldmVsb3BlcnMgbmVlZCB0byB1bmRlcnN0YW5kLgorCitbW29iamVjdC1kZXRhaWxzXV0KKz09PSBPYmplY3Qgc3RvcmFnZSBmb3JtYXQKKworQWxsIG9iamVjdHMgaGF2ZSBhIHN0YXRpY2FsbHkgZGV0ZXJtaW5lZCAidHlwZSIgd2hpY2ggaWRlbnRpZmllcyB0aGUKK2Zvcm1hdCBvZiB0aGUgb2JqZWN0IChpLmUuIGhvdyBpdCBpcyB1c2VkLCBhbmQgaG93IGl0IGNhbiByZWZlciB0byBvdGhlcgorb2JqZWN0cykuICBUaGVyZSBhcmUgY3VycmVudGx5IGZvdXIgZGlmZmVyZW50IG9iamVjdCB0eXBlczogImJsb2IiLAorInRyZWUiLCAiY29tbWl0IiwgYW5kICJ0YWciLgorCitSZWdhcmRsZXNzIG9mIG9iamVjdCB0eXBlLCBhbGwgb2JqZWN0cyBzaGFyZSB0aGUgZm9sbG93aW5nCitjaGFyYWN0ZXJpc3RpY3M6IHRoZXkgYXJlIGFsbCBkZWZsYXRlZCB3aXRoIHpsaWIsIGFuZCBoYXZlIGEgaGVhZGVyCit0aGF0IG5vdCBvbmx5IHNwZWNpZmllcyB0aGVpciB0eXBlLCBidXQgYWxzbyBwcm92aWRlcyBzaXplIGluZm9ybWF0aW9uCithYm91dCB0aGUgZGF0YSBpbiB0aGUgb2JqZWN0LiAgSXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgU0hBLTEgaGFzaAordGhhdCBpcyB1c2VkIHRvIG5hbWUgdGhlIG9iamVjdCBpcyB0aGUgaGFzaCBvZiB0aGUgb3JpZ2luYWwgZGF0YQorcGx1cyB0aGlzIGhlYWRlciwgc28gYHNoYTFzdW1gICdmaWxlJyBkb2VzIG5vdCBtYXRjaCB0aGUgb2JqZWN0IG5hbWUKK2ZvciAnZmlsZScuCisKK0FzIGEgcmVzdWx0LCB0aGUgZ2VuZXJhbCBjb25zaXN0ZW5jeSBvZiBhbiBvYmplY3QgY2FuIGFsd2F5cyBiZSB0ZXN0ZWQKK2luZGVwZW5kZW50bHkgb2YgdGhlIGNvbnRlbnRzIG9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3Q6IGFsbCBvYmplY3RzIGNhbgorYmUgdmFsaWRhdGVkIGJ5IHZlcmlmeWluZyB0aGF0IChhKSB0aGVpciBoYXNoZXMgbWF0Y2ggdGhlIGNvbnRlbnQgb2YgdGhlCitmaWxlIGFuZCAoYikgdGhlIG9iamVjdCBzdWNjZXNzZnVsbHkgaW5mbGF0ZXMgdG8gYSBzdHJlYW0gb2YgYnl0ZXMgdGhhdAorZm9ybXMgYSBzZXF1ZW5jZSBvZgorYDxhc2NpaSB0eXBlIHdpdGhvdXQgc3BhY2U+ICsgPHNwYWNlPiArIDxhc2NpaSBkZWNpbWFsIHNpemU+ICsKKzxieXRlXDA+ICsgPGJpbmFyeSBvYmplY3QgZGF0YT5gLgorCitUaGUgc3RydWN0dXJlZCBvYmplY3RzIGNhbiBmdXJ0aGVyIGhhdmUgdGhlaXIgc3RydWN0dXJlIGFuZAorY29ubmVjdGl2aXR5IHRvIG90aGVyIG9iamVjdHMgdmVyaWZpZWQuIFRoaXMgaXMgZ2VuZXJhbGx5IGRvbmUgd2l0aAordGhlIGBnaXQgZnNja2AgcHJvZ3JhbSwgd2hpY2ggZ2VuZXJhdGVzIGEgZnVsbCBkZXBlbmRlbmN5IGdyYXBoCitvZiBhbGwgb2JqZWN0cywgYW5kIHZlcmlmaWVzIHRoZWlyIGludGVybmFsIGNvbnNpc3RlbmN5IChpbiBhZGRpdGlvbgordG8ganVzdCB2ZXJpZnlpbmcgdGhlaXIgc3VwZXJmaWNpYWwgY29uc2lzdGVuY3kgdGhyb3VnaCB0aGUgaGFzaCkuCisKK1tbYmlyZHZpZXctb24tdGhlLXNvdXJjZS1jb2RlXV0KKz09PSBBIGJpcmRzLWV5ZSB2aWV3IG9mIEdpdCdzIHNvdXJjZSBjb2RlCisKK0l0IGlzIG5vdCBhbHdheXMgZWFzeSBmb3IgbmV3IGRldmVsb3BlcnMgdG8gZmluZCB0aGVpciB3YXkgdGhyb3VnaCBHaXQncworc291cmNlIGNvZGUuICBUaGlzIHNlY3Rpb24gZ2l2ZXMgeW91IGEgbGl0dGxlIGd1aWRhbmNlIHRvIHNob3cgd2hlcmUgdG8KK3N0YXJ0LgorCitBIGdvb2QgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIGluaXRpYWwgY29tbWl0LCB3aXRoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggLS1kZXRhY2ggZTgzYzUxNjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGluaXRpYWwgcmV2aXNpb24gbGF5cyB0aGUgZm91bmRhdGlvbiBmb3IgYWxtb3N0IGV2ZXJ5dGhpbmcgR2l0IGhhcwordG9kYXksIGJ1dCBpcyBzbWFsbCBlbm91Z2ggdG8gcmVhZCBpbiBvbmUgc2l0dGluZy4KKworTm90ZSB0aGF0IHRlcm1pbm9sb2d5IGhhcyBjaGFuZ2VkIHNpbmNlIHRoYXQgcmV2aXNpb24uICBGb3IgZXhhbXBsZSwgdGhlCitSRUFETUUgaW4gdGhhdCByZXZpc2lvbiB1c2VzIHRoZSB3b3JkICJjaGFuZ2VzZXQiIHRvIGRlc2NyaWJlIHdoYXQgd2UKK25vdyBjYWxsIGEgPDxkZWZfY29tbWl0X29iamVjdCxjb21taXQ+Pi4KKworQWxzbywgd2UgZG8gbm90IGNhbGwgaXQgImNhY2hlIiBhbnkgbW9yZSwgYnV0IHJhdGhlciAiaW5kZXgiOyBob3dldmVyLCB0aGUKK2ZpbGUgaXMgc3RpbGwgY2FsbGVkIGBjYWNoZS5oYC4gIFJlbWFyazogTm90IG11Y2ggcmVhc29uIHRvIGNoYW5nZSBpdCBub3csCitlc3BlY2lhbGx5IHNpbmNlIHRoZXJlIGlzIG5vIGdvb2Qgc2luZ2xlIG5hbWUgZm9yIGl0IGFueXdheSwgYmVjYXVzZSBpdCBpcworYmFzaWNhbGx5IF90aGVfIGhlYWRlciBmaWxlIHdoaWNoIGlzIGluY2x1ZGVkIGJ5IF9hbGxfIG9mIEdpdCdzIEMgc291cmNlcy4KKworSWYgeW91IGdyYXNwIHRoZSBpZGVhcyBpbiB0aGF0IGluaXRpYWwgY29tbWl0LCB5b3Ugc2hvdWxkIGNoZWNrIG91dCBhCittb3JlIHJlY2VudCB2ZXJzaW9uIGFuZCBza2ltIGBjYWNoZS5oYCwgYG9iamVjdC5oYCBhbmQgYGNvbW1pdC5oYC4KKworSW4gdGhlIGVhcmx5IGRheXMsIEdpdCAoaW4gdGhlIHRyYWRpdGlvbiBvZiBVTklYKSB3YXMgYSBidW5jaCBvZiBwcm9ncmFtcword2hpY2ggd2VyZSBleHRyZW1lbHkgc2ltcGxlLCBhbmQgd2hpY2ggeW91IHVzZWQgaW4gc2NyaXB0cywgcGlwaW5nIHRoZQorb3V0cHV0IG9mIG9uZSBpbnRvIGFub3RoZXIuIFRoaXMgdHVybmVkIG91dCB0byBiZSBnb29kIGZvciBpbml0aWFsCitkZXZlbG9wbWVudCwgc2luY2UgaXQgd2FzIGVhc2llciB0byB0ZXN0IG5ldyB0aGluZ3MuICBIb3dldmVyLCByZWNlbnRseQorbWFueSBvZiB0aGVzZSBwYXJ0cyBoYXZlIGJlY29tZSBidWlsdGlucywgYW5kIHNvbWUgb2YgdGhlIGNvcmUgaGFzIGJlZW4KKyJsaWJpZmllZCIsIGkuZS4gcHV0IGludG8gbGliZ2l0LmEgZm9yIHBlcmZvcm1hbmNlLCBwb3J0YWJpbGl0eSByZWFzb25zLAorYW5kIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24uCisKK0J5IG5vdywgeW91IGtub3cgd2hhdCB0aGUgaW5kZXggaXMgKGFuZCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEKK3N0cnVjdHVyZXMgaW4gYGNhY2hlLmhgKSwgYW5kIHRoYXQgdGhlcmUgYXJlIGp1c3QgYSBjb3VwbGUgb2Ygb2JqZWN0IHR5cGVzCisoYmxvYnMsIHRyZWVzLCBjb21taXRzIGFuZCB0YWdzKSB3aGljaCBpbmhlcml0IHRoZWlyIGNvbW1vbiBzdHJ1Y3R1cmUgZnJvbQorYHN0cnVjdCBvYmplY3RgLCB3aGljaCBpcyB0aGVpciBmaXJzdCBtZW1iZXIgKGFuZCB0aHVzLCB5b3UgY2FuIGNhc3QgZS5nLgorYChzdHJ1Y3Qgb2JqZWN0ICopY29tbWl0YCB0byBhY2hpZXZlIHRoZSBfc2FtZV8gYXMgYCZjb21taXQtPm9iamVjdGAsIGkuZS4KK2dldCBhdCB0aGUgb2JqZWN0IG5hbWUgYW5kIGZsYWdzKS4KKworTm93IGlzIGEgZ29vZCBwb2ludCB0byB0YWtlIGEgYnJlYWsgdG8gbGV0IHRoaXMgaW5mb3JtYXRpb24gc2luayBpbi4KKworTmV4dCBzdGVwOiBnZXQgZmFtaWxpYXIgd2l0aCB0aGUgb2JqZWN0IG5hbWluZy4gIFJlYWQgPDxuYW1pbmctY29tbWl0cz4+LgorVGhlcmUgYXJlIHF1aXRlIGEgZmV3IHdheXMgdG8gbmFtZSBhbiBvYmplY3QgKGFuZCBub3Qgb25seSByZXZpc2lvbnMhKS4KK0FsbCBvZiB0aGVzZSBhcmUgaGFuZGxlZCBpbiBgc2hhMV9uYW1lLmNgLiBKdXN0IGhhdmUgYSBxdWljayBsb29rIGF0Cit0aGUgZnVuY3Rpb24gYGdldF9zaGExKClgLiBBIGxvdCBvZiB0aGUgc3BlY2lhbCBoYW5kbGluZyBpcyBkb25lIGJ5CitmdW5jdGlvbnMgbGlrZSBgZ2V0X3NoYTFfYmFzaWMoKWAgb3IgdGhlIGxpa2VzLgorCitUaGlzIGlzIGp1c3QgdG8gZ2V0IHlvdSBpbnRvIHRoZSBncm9vdmUgZm9yIHRoZSBtb3N0IGxpYmlmaWVkIHBhcnQgb2YgR2l0OgordGhlIHJldmlzaW9uIHdhbGtlci4KKworQmFzaWNhbGx5LCB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mIGBnaXQgbG9nYCB3YXMgYSBzaGVsbCBzY3JpcHQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0LXJldi1saXN0IC0tcHJldHR5ICQoZ2l0LXJldi1wYXJzZSAtLWRlZmF1bHQgSEVBRCAiJEAiKSB8IFwKKwlMRVNTPS1TICR7UEFHRVI6LWxlc3N9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQgZG9lcyB0aGlzIG1lYW4/CisKK2BnaXQgcmV2LWxpc3RgIGlzIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSByZXZpc2lvbiB3YWxrZXIsIHdoaWNoCitfYWx3YXlzXyBwcmludGVkIGEgbGlzdCBvZiByZXZpc2lvbnMgdG8gc3Rkb3V0LiAgSXQgaXMgc3RpbGwgZnVuY3Rpb25hbCwKK2FuZCBuZWVkcyB0bywgc2luY2UgbW9zdCBuZXcgR2l0IGNvbW1hbmRzIHN0YXJ0IG91dCBhcyBzY3JpcHRzIHVzaW5nCitgZ2l0IHJldi1saXN0YC4KKworYGdpdCByZXYtcGFyc2VgIGlzIG5vdCBhcyBpbXBvcnRhbnQgYW55IG1vcmU7IGl0IHdhcyBvbmx5IHVzZWQgdG8gZmlsdGVyIG91dAorb3B0aW9ucyB0aGF0IHdlcmUgcmVsZXZhbnQgZm9yIHRoZSBkaWZmZXJlbnQgcGx1bWJpbmcgY29tbWFuZHMgdGhhdCB3ZXJlCitjYWxsZWQgYnkgdGhlIHNjcmlwdC4KKworTW9zdCBvZiB3aGF0IGBnaXQgcmV2LWxpc3RgIGRpZCBpcyBjb250YWluZWQgaW4gYHJldmlzaW9uLmNgIGFuZAorYHJldmlzaW9uLmhgLiAgSXQgd3JhcHMgdGhlIG9wdGlvbnMgaW4gYSBzdHJ1Y3QgbmFtZWQgYHJldl9pbmZvYCwgd2hpY2gKK2NvbnRyb2xzIGhvdyBhbmQgd2hhdCByZXZpc2lvbnMgYXJlIHdhbGtlZCwgYW5kIG1vcmUuCisKK1RoZSBvcmlnaW5hbCBqb2Igb2YgYGdpdCByZXYtcGFyc2VgIGlzIG5vdyB0YWtlbiBieSB0aGUgZnVuY3Rpb24KK2BzZXR1cF9yZXZpc2lvbnMoKWAsIHdoaWNoIHBhcnNlcyB0aGUgcmV2aXNpb25zIGFuZCB0aGUgY29tbW9uIGNvbW1hbmQtbGluZQorb3B0aW9ucyBmb3IgdGhlIHJldmlzaW9uIHdhbGtlci4gVGhpcyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gdGhlIHN0cnVjdAorYHJldl9pbmZvYCBmb3IgbGF0ZXIgY29uc3VtcHRpb24uIFlvdSBjYW4gZG8geW91ciBvd24gY29tbWFuZC1saW5lIG9wdGlvbgorcGFyc2luZyBhZnRlciBjYWxsaW5nIGBzZXR1cF9yZXZpc2lvbnMoKWAuIEFmdGVyIHRoYXQsIHlvdSBoYXZlIHRvIGNhbGwKK2BwcmVwYXJlX3JldmlzaW9uX3dhbGsoKWAgZm9yIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlbiB5b3UgY2FuIGdldCB0aGUKK2NvbW1pdHMgb25lIGJ5IG9uZSB3aXRoIHRoZSBmdW5jdGlvbiBgZ2V0X3JldmlzaW9uKClgLgorCitJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gbW9yZSBkZXRhaWxzIG9mIHRoZSByZXZpc2lvbiB3YWxraW5nIHByb2Nlc3MsCitqdXN0IGhhdmUgYSBsb29rIGF0IHRoZSBmaXJzdCBpbXBsZW1lbnRhdGlvbiBvZiBgY21kX2xvZygpYDsgY2FsbAorYGdpdCBzaG93IHYxLjMuMH4xNTVeMn40YCBhbmQgc2Nyb2xsIGRvd24gdG8gdGhhdCBmdW5jdGlvbiAobm90ZSB0aGF0IHlvdQorbm8gbG9uZ2VyIG5lZWQgdG8gY2FsbCBgc2V0dXBfcGFnZXIoKWAgZGlyZWN0bHkpLgorCitOb3dhZGF5cywgYGdpdCBsb2dgIGlzIGEgYnVpbHRpbiwgd2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBfY29udGFpbmVkXyBpbiB0aGUKK2NvbW1hbmQgYGdpdGAuICBUaGUgc291cmNlIHNpZGUgb2YgYSBidWlsdGluIGlzCisKKy0gYSBmdW5jdGlvbiBjYWxsZWQgYGNtZF88YmxhPmAsIHR5cGljYWxseSBkZWZpbmVkIGluIGBidWlsdGluLzxibGEuYz5gCisgIChub3RlIHRoYXQgb2xkZXIgdmVyc2lvbnMgb2YgR2l0IHVzZWQgdG8gaGF2ZSBpdCBpbiBgYnVpbHRpbi08YmxhPi5jYAorICBpbnN0ZWFkKSwgYW5kIGRlY2xhcmVkIGluIGBidWlsdGluLmhgLgorCistIGFuIGVudHJ5IGluIHRoZSBgY29tbWFuZHNbXWAgYXJyYXkgaW4gYGdpdC5jYCwgYW5kCisKKy0gYW4gZW50cnkgaW4gYEJVSUxUSU5fT0JKRUNUU2AgaW4gdGhlIGBNYWtlZmlsZWAuCisKK1NvbWV0aW1lcywgbW9yZSB0aGFuIG9uZSBidWlsdGluIGlzIGNvbnRhaW5lZCBpbiBvbmUgc291cmNlIGZpbGUuICBGb3IKK2V4YW1wbGUsIGBjbWRfd2hhdGNoYW5nZWQoKWAgYW5kIGBjbWRfbG9nKClgIGJvdGggcmVzaWRlIGluIGBidWlsdGluL2xvZy5jYCwKK3NpbmNlIHRoZXkgc2hhcmUgcXVpdGUgYSBiaXQgb2YgY29kZS4gIEluIHRoYXQgY2FzZSwgdGhlIGNvbW1hbmRzIHdoaWNoIGFyZQorX25vdF8gbmFtZWQgbGlrZSB0aGUgYC5jYCBmaWxlIGluIHdoaWNoIHRoZXkgbGl2ZSBoYXZlIHRvIGJlIGxpc3RlZCBpbgorYEJVSUxUX0lOU2AgaW4gdGhlIGBNYWtlZmlsZWAuCisKK2BnaXQgbG9nYCBsb29rcyBtb3JlIGNvbXBsaWNhdGVkIGluIEMgdGhhbiBpdCBkb2VzIGluIHRoZSBvcmlnaW5hbCBzY3JpcHQsCitidXQgdGhhdCBhbGxvd3MgZm9yIGEgbXVjaCBncmVhdGVyIGZsZXhpYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS4KKworSGVyZSBhZ2FpbiBpdCBpcyBhIGdvb2QgcG9pbnQgdG8gdGFrZSBhIHBhdXNlLgorCitMZXNzb24gdGhyZWUgaXM6IHN0dWR5IHRoZSBjb2RlLiAgUmVhbGx5LCBpdCBpcyB0aGUgYmVzdCB3YXkgdG8gbGVhcm4gYWJvdXQKK3RoZSBvcmdhbml6YXRpb24gb2YgR2l0IChhZnRlciB5b3Uga25vdyB0aGUgYmFzaWMgY29uY2VwdHMpLgorCitTbywgdGhpbmsgYWJvdXQgc29tZXRoaW5nIHdoaWNoIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiwgc2F5LCAiaG93IGNhbiBJCithY2Nlc3MgYSBibG9iIGp1c3Qga25vd2luZyB0aGUgb2JqZWN0IG5hbWUgb2YgaXQ/Ii4gIFRoZSBmaXJzdCBzdGVwIGlzIHRvCitmaW5kIGEgR2l0IGNvbW1hbmQgd2l0aCB3aGljaCB5b3UgY2FuIGRvIGl0LiAgSW4gdGhpcyBleGFtcGxlLCBpdCBpcyBlaXRoZXIKK2BnaXQgc2hvd2Agb3IgYGdpdCBjYXQtZmlsZWAuCisKK0ZvciB0aGUgc2FrZSBvZiBjbGFyaXR5LCBsZXQncyBzdGF5IHdpdGggYGdpdCBjYXQtZmlsZWAsIGJlY2F1c2UgaXQKKworLSBpcyBwbHVtYmluZywgYW5kCisKKy0gd2FzIGFyb3VuZCBldmVuIGluIHRoZSBpbml0aWFsIGNvbW1pdCAoaXQgbGl0ZXJhbGx5IHdlbnQgb25seSB0aHJvdWdoCisgIHNvbWUgMjAgcmV2aXNpb25zIGFzIGBjYXQtZmlsZS5jYCwgd2FzIHJlbmFtZWQgdG8gYGJ1aWx0aW4vY2F0LWZpbGUuY2AKKyAgd2hlbiBtYWRlIGEgYnVpbHRpbiwgYW5kIHRoZW4gc2F3IGxlc3MgdGhhbiAxMCB2ZXJzaW9ucykuCisKK1NvLCBsb29rIGludG8gYGJ1aWx0aW4vY2F0LWZpbGUuY2AsIHNlYXJjaCBmb3IgYGNtZF9jYXRfZmlsZSgpYCBhbmQgbG9vayB3aGF0CitpdCBkb2VzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworICAgICAgICBpZiAoYXJnYyAhPSAzKQorCQl1c2FnZSgiZ2l0IGNhdC1maWxlIFstdHwtc3wtZXwtcHw8dHlwZT5dIDxzaGExPiIpOworICAgICAgICBpZiAoZ2V0X3NoYTEoYXJndlsyXSwgc2hhMSkpCisgICAgICAgICAgICAgICAgZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIGFyZ3ZbMl0pOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xldCdzIHNraXAgb3ZlciB0aGUgb2J2aW91cyBkZXRhaWxzOyB0aGUgb25seSByZWFsbHkgaW50ZXJlc3RpbmcgcGFydAoraGVyZSBpcyB0aGUgY2FsbCB0byBgZ2V0X3NoYTEoKWAuICBJdCB0cmllcyB0byBpbnRlcnByZXQgYGFyZ3ZbMl1gIGFzIGFuCitvYmplY3QgbmFtZSwgYW5kIGlmIGl0IHJlZmVycyB0byBhbiBvYmplY3Qgd2hpY2ggaXMgcHJlc2VudCBpbiB0aGUgY3VycmVudAorcmVwb3NpdG9yeSwgaXQgd3JpdGVzIHRoZSByZXN1bHRpbmcgU0hBLTEgaW50byB0aGUgdmFyaWFibGUgYHNoYTFgLgorCitUd28gdGhpbmdzIGFyZSBpbnRlcmVzdGluZyBoZXJlOgorCistIGBnZXRfc2hhMSgpYCByZXR1cm5zIDAgb24gX3N1Y2Nlc3NfLiAgVGhpcyBtaWdodCBzdXJwcmlzZSBzb21lIG5ldworICBHaXQgaGFja2VycywgYnV0IHRoZXJlIGlzIGEgbG9uZyB0cmFkaXRpb24gaW4gVU5JWCB0byByZXR1cm4gZGlmZmVyZW50CisgIG5lZ2F0aXZlIG51bWJlcnMgaW4gY2FzZSBvZiBkaWZmZXJlbnQgZXJyb3JzLS1hbmQgMCBvbiBzdWNjZXNzLgorCistIHRoZSB2YXJpYWJsZSBgc2hhMWAgaW4gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBgZ2V0X3NoYTEoKWAgaXMgYHVuc2lnbmVkCisgIGNoYXIgKmAsIGJ1dCBpcyBhY3R1YWxseSBleHBlY3RlZCB0byBiZSBhIHBvaW50ZXIgdG8gYHVuc2lnbmVkCisgIGNoYXJbMjBdYC4gIFRoaXMgdmFyaWFibGUgd2lsbCBjb250YWluIHRoZSAxNjAtYml0IFNIQS0xIG9mIHRoZSBnaXZlbgorICBjb21taXQuICBOb3RlIHRoYXQgd2hlbmV2ZXIgYSBTSEEtMSBpcyBwYXNzZWQgYXMgYHVuc2lnbmVkIGNoYXIgKmAsIGl0CisgIGlzIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24sIGFzIG9wcG9zZWQgdG8gdGhlIEFTQ0lJIHJlcHJlc2VudGF0aW9uIGluCisgIGhleCBjaGFyYWN0ZXJzLCB3aGljaCBpcyBwYXNzZWQgYXMgYGNoYXIgKmAuCisKK1lvdSB3aWxsIHNlZSBib3RoIG9mIHRoZXNlIHRoaW5ncyB0aHJvdWdob3V0IHRoZSBjb2RlLgorCitOb3csIGZvciB0aGUgbWVhdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIGJ1ZiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHNoYTEsIGFyZ3ZbMV0sICZzaXplLCBOVUxMKTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgaG93IHlvdSByZWFkIGEgYmxvYiAoYWN0dWFsbHksIG5vdCBvbmx5IGEgYmxvYiwgYnV0IGFueSB0eXBlIG9mCitvYmplY3QpLiAgVG8ga25vdyBob3cgdGhlIGZ1bmN0aW9uIGByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZSgpYCBhY3R1YWxseQord29ya3MsIGZpbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBpdCAoc29tZXRoaW5nIGxpa2UgYGdpdCBncmVwCityZWFkX29iamVjdF93aXRoIHwgZ3JlcCAiOlthLXpdImAgaW4gdGhlIEdpdCByZXBvc2l0b3J5KSwgYW5kIHJlYWQKK3RoZSBzb3VyY2UuCisKK1RvIGZpbmQgb3V0IGhvdyB0aGUgcmVzdWx0IGNhbiBiZSB1c2VkLCBqdXN0IHJlYWQgb24gaW4gYGNtZF9jYXRfZmlsZSgpYDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgd3JpdGVfb3JfZGllKDEsIGJ1Ziwgc2l6ZSk7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21ldGltZXMsIHlvdSBkbyBub3Qga25vdyB3aGVyZSB0byBsb29rIGZvciBhIGZlYXR1cmUuICBJbiBtYW55IHN1Y2ggY2FzZXMsCitpdCBoZWxwcyB0byBzZWFyY2ggdGhyb3VnaCB0aGUgb3V0cHV0IG9mIGBnaXQgbG9nYCwgYW5kIHRoZW4gYGdpdCBzaG93YCB0aGUKK2NvcnJlc3BvbmRpbmcgY29tbWl0LgorCitFeGFtcGxlOiBJZiB5b3Uga25vdyB0aGF0IHRoZXJlIHdhcyBzb21lIHRlc3QgY2FzZSBmb3IgYGdpdCBidW5kbGVgLCBidXQKK2RvIG5vdCByZW1lbWJlciB3aGVyZSBpdCB3YXMgKHllcywgeW91IF9jb3VsZF8gYGdpdCBncmVwIGJ1bmRsZSB0L2AsIGJ1dCB0aGF0Citkb2VzIG5vdCBpbGx1c3RyYXRlIHRoZSBwb2ludCEpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtLW5vLW1lcmdlcyB0LworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoZSBwYWdlciAoYGxlc3NgKSwganVzdCBzZWFyY2ggZm9yICJidW5kbGUiLCBnbyBhIGZldyBsaW5lcyBiYWNrLAorYW5kIHNlZSB0aGF0IGl0IGlzIGluIGNvbW1pdCAxODQ0OWFiMC4gIE5vdyBqdXN0IGNvcHkgdGhpcyBvYmplY3QgbmFtZSwKK2FuZCBwYXN0ZSBpdCBpbnRvIHRoZSBjb21tYW5kIGxpbmUKKworLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyAxODQ0OWFiMAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWb2lsYS4KKworQW5vdGhlciBleGFtcGxlOiBGaW5kIG91dCB3aGF0IHRvIGRvIGluIG9yZGVyIHRvIG1ha2Ugc29tZSBzY3JpcHQgYQorYnVpbHRpbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC0tbm8tbWVyZ2VzIC0tZGlmZi1maWx0ZXI9QSBidWlsdGluLyouYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3Ugc2VlLCBHaXQgaXMgYWN0dWFsbHkgdGhlIGJlc3QgdG9vbCB0byBmaW5kIG91dCBhYm91dCB0aGUgc291cmNlIG9mIEdpdAoraXRzZWxmIQorCitbW2dsb3NzYXJ5XV0KKz09IEdpdCBHbG9zc2FyeQorCitbW2dpdC1leHBsYWluZWRdXQorPT09IEdpdCBleHBsYWluZWQKKworaW5jbHVkZTo6Z2xvc3NhcnktY29udGVudC50eHRbXQorCitbW2dpdC1xdWljay1zdGFydF1dCitbYXBwZW5kaXhdCis9PSBHaXQgUXVpY2sgUmVmZXJlbmNlCisKK1RoaXMgaXMgYSBxdWljayBzdW1tYXJ5IG9mIHRoZSBtYWpvciBjb21tYW5kczsgdGhlIHByZXZpb3VzIGNoYXB0ZXJzCitleHBsYWluIGhvdyB0aGVzZSB3b3JrIGluIG1vcmUgZGV0YWlsLgorCitbW3F1aWNrLWNyZWF0aW5nLWEtbmV3LXJlcG9zaXRvcnldXQorPT09IENyZWF0aW5nIGEgbmV3IHJlcG9zaXRvcnkKKworRnJvbSBhIHRhcmJhbGw6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIHRhciB4emYgcHJvamVjdC50YXIuZ3oKKyQgY2QgcHJvamVjdAorJCBnaXQgaW5pdAorSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gLmdpdC8KKyQgZ2l0IGFkZCAuCiskIGdpdCBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Zyb20gYSByZW1vdGUgcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIGdpdDovL2V4YW1wbGUuY29tL3B1Yi9wcm9qZWN0LmdpdAorJCBjZCBwcm9qZWN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW21hbmFnaW5nLWJyYW5jaGVzXV0KKz09PSBNYW5hZ2luZyBicmFuY2hlcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoCQkJIyBsaXN0IGFsbCBsb2NhbCBicmFuY2hlcyBpbiB0aGlzIHJlcG8KKyQgZ2l0IHN3aXRjaCB0ZXN0CSAgICAgICAgIyBzd2l0Y2ggd29ya2luZyBkaXJlY3RvcnkgdG8gYnJhbmNoICJ0ZXN0IgorJCBnaXQgYnJhbmNoIG5ldwkJIyBjcmVhdGUgYnJhbmNoICJuZXciIHN0YXJ0aW5nIGF0IGN1cnJlbnQgSEVBRAorJCBnaXQgYnJhbmNoIC1kIG5ldwkJIyBkZWxldGUgYnJhbmNoICJuZXciCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnN0ZWFkIG9mIGJhc2luZyBhIG5ldyBicmFuY2ggb24gY3VycmVudCBIRUFEICh0aGUgZGVmYXVsdCksIHVzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCBuZXcgdGVzdCAgICAjIGJyYW5jaCBuYW1lZCAidGVzdCIKKyQgZ2l0IGJyYW5jaCBuZXcgdjIuNi4xNSAjIHRhZyBuYW1lZCB2Mi42LjE1CiskIGdpdCBicmFuY2ggbmV3IEhFQUReICAgIyBjb21taXQgYmVmb3JlIHRoZSBtb3N0IHJlY2VudAorJCBnaXQgYnJhbmNoIG5ldyBIRUFEXl4gICMgY29tbWl0IGJlZm9yZSB0aGF0CiskIGdpdCBicmFuY2ggbmV3IHRlc3R+MTAgIyB0ZW4gY29tbWl0cyBiZWZvcmUgdGlwIG9mIGJyYW5jaCAidGVzdCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NyZWF0ZSBhbmQgc3dpdGNoIHRvIGEgbmV3IGJyYW5jaCBhdCB0aGUgc2FtZSB0aW1lOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIC1jIG5ldyB2Mi42LjE1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVcGRhdGUgYW5kIGV4YW1pbmUgYnJhbmNoZXMgZnJvbSB0aGUgcmVwb3NpdG9yeSB5b3UgY2xvbmVkIGZyb206CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaAkJIyB1cGRhdGUKKyQgZ2l0IGJyYW5jaCAtcgkJIyBsaXN0CisgIG9yaWdpbi9tYXN0ZXIKKyAgb3JpZ2luL25leHQKKyAgLi4uCiskIGdpdCBzd2l0Y2ggLWMgbWFzdGVyd29yayBvcmlnaW4vbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGZXRjaCBhIGJyYW5jaCBmcm9tIGEgZGlmZmVyZW50IHJlcG9zaXRvcnksIGFuZCBnaXZlIGl0IGEgbmV3CituYW1lIGluIHlvdXIgcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoIGdpdDovL2V4YW1wbGUuY29tL3Byb2plY3QuZ2l0IHRoZWlyYnJhbmNoOm15YnJhbmNoCiskIGdpdCBmZXRjaCBnaXQ6Ly9leGFtcGxlLmNvbS9wcm9qZWN0LmdpdCB2Mi42LjE1Om15YnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitLZWVwIGEgbGlzdCBvZiByZXBvc2l0b3JpZXMgeW91IHdvcmsgd2l0aCByZWd1bGFybHk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZW1vdGUgYWRkIGV4YW1wbGUgZ2l0Oi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQKKyQgZ2l0IHJlbW90ZQkJCSMgbGlzdCByZW1vdGUgcmVwb3NpdG9yaWVzCitleGFtcGxlCitvcmlnaW4KKyQgZ2l0IHJlbW90ZSBzaG93IGV4YW1wbGUJIyBnZXQgZGV0YWlscworKiByZW1vdGUgZXhhbXBsZQorICBVUkw6IGdpdDovL2V4YW1wbGUuY29tL3Byb2plY3QuZ2l0CisgIFRyYWNrZWQgcmVtb3RlIGJyYW5jaGVzCisgICAgbWFzdGVyCisgICAgbmV4dAorICAgIC4uLgorJCBnaXQgZmV0Y2ggZXhhbXBsZQkJIyB1cGRhdGUgYnJhbmNoZXMgZnJvbSBleGFtcGxlCiskIGdpdCBicmFuY2ggLXIJCQkjIGxpc3QgYWxsIHJlbW90ZSBicmFuY2hlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitbW2V4cGxvcmluZy1oaXN0b3J5XV0KKz09PSBFeHBsb3JpbmcgaGlzdG9yeQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrCQkJICAgICMgdmlzdWFsaXplIGFuZCBicm93c2UgaGlzdG9yeQorJCBnaXQgbG9nCQkgICAgIyBsaXN0IGFsbCBjb21taXRzCiskIGdpdCBsb2cgc3JjLwkJICAgICMgLi4ubW9kaWZ5aW5nIHNyYy8KKyQgZ2l0IGxvZyB2Mi42LjE1Li52Mi42LjE2ICAjIC4uLmluIHYyLjYuMTYsIG5vdCBpbiB2Mi42LjE1CiskIGdpdCBsb2cgbWFzdGVyLi50ZXN0CSAgICAjIC4uLmluIGJyYW5jaCB0ZXN0LCBub3QgaW4gYnJhbmNoIG1hc3RlcgorJCBnaXQgbG9nIHRlc3QuLm1hc3RlcgkgICAgIyAuLi5pbiBicmFuY2ggbWFzdGVyLCBidXQgbm90IGluIHRlc3QKKyQgZ2l0IGxvZyB0ZXN0Li4ubWFzdGVyCSAgICAjIC4uLmluIG9uZSBicmFuY2gsIG5vdCBpbiBib3RoCiskIGdpdCBsb2cgLVMnZm9vKCknCSAgICAjIC4uLndoZXJlIGRpZmZlcmVuY2UgY29udGFpbiAiZm9vKCkiCiskIGdpdCBsb2cgLS1zaW5jZT0iMiB3ZWVrcyBhZ28iCiskIGdpdCBsb2cgLXAJCSAgICAjIHNob3cgcGF0Y2hlcyBhcyB3ZWxsCiskIGdpdCBzaG93CQkgICAgIyBtb3N0IHJlY2VudCBjb21taXQKKyQgZ2l0IGRpZmYgdjIuNi4xNS4udjIuNi4xNiAjIGRpZmYgYmV0d2VlbiB0d28gdGFnZ2VkIHZlcnNpb25zCiskIGdpdCBkaWZmIHYyLjYuMTUuLkhFQUQgICAgIyBkaWZmIHdpdGggY3VycmVudCBoZWFkCiskIGdpdCBncmVwICJmb28oKSIJICAgICMgc2VhcmNoIHdvcmtpbmcgZGlyZWN0b3J5IGZvciAiZm9vKCkiCiskIGdpdCBncmVwIHYyLjYuMTUgImZvbygpIiAgIyBzZWFyY2ggb2xkIHRyZWUgZm9yICJmb28oKSIKKyQgZ2l0IHNob3cgdjIuNi4xNTphLnR4dCAgICAjIGxvb2sgYXQgb2xkIHZlcnNpb24gb2YgYS50eHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlYXJjaCBmb3IgcmVncmVzc2lvbnM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQKKyQgZ2l0IGJpc2VjdCBiYWQJCSMgY3VycmVudCB2ZXJzaW9uIGlzIGJhZAorJCBnaXQgYmlzZWN0IGdvb2QgdjIuNi4xMy1yYzIJIyBsYXN0IGtub3duIGdvb2QgcmV2aXNpb24KK0Jpc2VjdGluZzogNjc1IHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcworCQkJCSMgdGVzdCBoZXJlLCB0aGVuOgorJCBnaXQgYmlzZWN0IGdvb2QJCSMgaWYgdGhpcyByZXZpc2lvbiBpcyBnb29kLCBvcgorJCBnaXQgYmlzZWN0IGJhZAkJIyBpZiB0aGlzIHJldmlzaW9uIGlzIGJhZC4KKwkJCQkjIHJlcGVhdCB1bnRpbCBkb25lLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworW1ttYWtpbmctY2hhbmdlc11dCis9PT0gTWFraW5nIGNoYW5nZXMKKworTWFrZSBzdXJlIEdpdCBrbm93cyB3aG8gdG8gYmxhbWU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBjYXQgPj5+Ly5naXRjb25maWcgPDxcRU9GCitbdXNlcl0KKwluYW1lID0gWW91ciBOYW1lIENvbWVzIEhlcmUKKwllbWFpbCA9IHlvdUB5b3VyZG9tYWluLmV4YW1wbGUuY29tCitFT0YKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWxlY3QgZmlsZSBjb250ZW50cyB0byBpbmNsdWRlIGluIHRoZSBuZXh0IGNvbW1pdCwgdGhlbiBtYWtlIHRoZQorY29tbWl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIGEudHh0ICAgICMgdXBkYXRlZCBmaWxlCiskIGdpdCBhZGQgYi50eHQgICAgIyBuZXcgZmlsZQorJCBnaXQgcm0gYy50eHQgICAgICMgb2xkIGZpbGUKKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3IsIHByZXBhcmUgYW5kIGNyZWF0ZSB0aGUgY29tbWl0IGluIG9uZSBzdGVwOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IGQudHh0ICMgdXNlIGxhdGVzdCBjb250ZW50IG9ubHkgb2YgZC50eHQKKyQgZ2l0IGNvbW1pdCAtYQkgICAjIHVzZSBsYXRlc3QgY29udGVudCBvZiBhbGwgdHJhY2tlZCBmaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworW1ttZXJnaW5nXV0KKz09PSBNZXJnaW5nCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSB0ZXN0ICAgIyBtZXJnZSBicmFuY2ggInRlc3QiIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoCiskIGdpdCBwdWxsIGdpdDovL2V4YW1wbGUuY29tL3Byb2plY3QuZ2l0IG1hc3RlcgorCQkgICAjIGZldGNoIGFuZCBtZXJnZSBpbiByZW1vdGUgYnJhbmNoCiskIGdpdCBwdWxsIC4gdGVzdCAgIyBlcXVpdmFsZW50IHRvIGdpdCBtZXJnZSB0ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW3NoYXJpbmcteW91ci1jaGFuZ2VzXV0KKz09PSBTaGFyaW5nIHlvdXIgY2hhbmdlcworCitJbXBvcnRpbmcgb3IgZXhwb3J0aW5nIHBhdGNoZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmb3JtYXQtcGF0Y2ggb3JpZ2luLi5IRUFEICMgZm9ybWF0IGEgcGF0Y2ggZm9yIGVhY2ggY29tbWl0CisJCQkJIyBpbiBIRUFEIGJ1dCBub3QgaW4gb3JpZ2luCiskIGdpdCBhbSBtYm94ICMgaW1wb3J0IHBhdGNoZXMgZnJvbSB0aGUgbWFpbGJveCAibWJveCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZldGNoIGEgYnJhbmNoIGluIGEgZGlmZmVyZW50IEdpdCByZXBvc2l0b3J5LCB0aGVuIG1lcmdlIGludG8gdGhlCitjdXJyZW50IGJyYW5jaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgZ2l0Oi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQgdGhlaXJicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N0b3JlIHRoZSBmZXRjaGVkIGJyYW5jaCBpbnRvIGEgbG9jYWwgYnJhbmNoIGJlZm9yZSBtZXJnaW5nIGludG8gdGhlCitjdXJyZW50IGJyYW5jaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgZ2l0Oi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQgdGhlaXJicmFuY2g6bXlicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FmdGVyIGNyZWF0aW5nIGNvbW1pdHMgb24gYSBsb2NhbCBicmFuY2gsIHVwZGF0ZSB0aGUgcmVtb3RlCiticmFuY2ggd2l0aCB5b3VyIGNvbW1pdHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIHNzaDovL2V4YW1wbGUuY29tL3Byb2plY3QuZ2l0IG15YnJhbmNoOnRoZWlyYnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHJlbW90ZSBhbmQgbG9jYWwgYnJhbmNoIGFyZSBib3RoIG5hbWVkICJ0ZXN0IjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggc3NoOi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQgdGVzdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2hvcnRjdXQgdmVyc2lvbiBmb3IgYSBmcmVxdWVudGx5IHVzZWQgcmVtb3RlIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZW1vdGUgYWRkIGV4YW1wbGUgc3NoOi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQKKyQgZ2l0IHB1c2ggZXhhbXBsZSB0ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW3JlcG9zaXRvcnktbWFpbnRlbmFuY2VdXQorPT09IFJlcG9zaXRvcnkgbWFpbnRlbmFuY2UKKworQ2hlY2sgZm9yIGNvcnJ1cHRpb246CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmc2NrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWNvbXByZXNzLCByZW1vdmUgdW51c2VkIGNydWZ0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZ2MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworW1t0b2RvXV0KK1thcHBlbmRpeF0KKz09IE5vdGVzIGFuZCB0b2RvIGxpc3QgZm9yIHRoaXMgbWFudWFsCisKK1tbdG9kby1saXN0XV0KKz09PSBUb2RvIGxpc3QKKworVGhpcyBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MuCisKK1RoZSBiYXNpYyByZXF1aXJlbWVudHM6CisKKy0gSXQgbXVzdCBiZSByZWFkYWJsZSBpbiBvcmRlciwgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCBieSBzb21lb25lCisgIGludGVsbGlnZW50IHdpdGggYSBiYXNpYyBncmFzcCBvZiB0aGUgVU5JWCBjb21tYW5kIGxpbmUsIGJ1dCB3aXRob3V0CisgIGFueSBzcGVjaWFsIGtub3dsZWRnZSBvZiBHaXQuICBJZiBuZWNlc3NhcnksIGFueSBvdGhlciBwcmVyZXF1aXNpdGVzCisgIHNob3VsZCBiZSBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGFzIHRoZXkgYXJpc2UuCistIFdoZW5ldmVyIHBvc3NpYmxlLCBzZWN0aW9uIGhlYWRpbmdzIHNob3VsZCBjbGVhcmx5IGRlc2NyaWJlIHRoZSB0YXNrCisgIHRoZXkgZXhwbGFpbiBob3cgdG8gZG8sIGluIGxhbmd1YWdlIHRoYXQgcmVxdWlyZXMgbm8gbW9yZSBrbm93bGVkZ2UKKyAgdGhhbiBuZWNlc3Nhcnk6IGZvciBleGFtcGxlLCAiaW1wb3J0aW5nIHBhdGNoZXMgaW50byBhIHByb2plY3QiIHJhdGhlcgorICB0aGFuICJ0aGUgYGdpdCBhbWAgY29tbWFuZCIKKworVGhpbmsgYWJvdXQgaG93IHRvIGNyZWF0ZSBhIGNsZWFyIGNoYXB0ZXIgZGVwZW5kZW5jeSBncmFwaCB0aGF0IHdpbGwKK2FsbG93IHBlb3BsZSB0byBnZXQgdG8gaW1wb3J0YW50IHRvcGljcyB3aXRob3V0IG5lY2Vzc2FyaWx5IHJlYWRpbmcKK2V2ZXJ5dGhpbmcgaW4gYmV0d2Vlbi4KKworU2NhbiBgRG9jdW1lbnRhdGlvbi9gIGZvciBvdGhlciBzdHVmZiBsZWZ0IG91dDsgaW4gcGFydGljdWxhcjoKKworLSBob3d0bydzCistIHNvbWUgb2YgYHRlY2huaWNhbC9gPworLSBob29rcworLSBsaXN0IG9mIGNvbW1hbmRzIGluIGxpbmtnaXQ6Z2l0WzFdCisKK1NjYW4gZW1haWwgYXJjaGl2ZXMgZm9yIG90aGVyIHN0dWZmIGxlZnQgb3V0CisKK1NjYW4gbWFuIHBhZ2VzIHRvIHNlZSBpZiBhbnkgYXNzdW1lIG1vcmUgYmFja2dyb3VuZCB0aGFuIHRoaXMgbWFudWFsCitwcm92aWRlcy4KKworQWRkIG1vcmUgZ29vZCBleGFtcGxlcy4gIEVudGlyZSBzZWN0aW9ucyBvZiBqdXN0IGNvb2tib29rIGV4YW1wbGVzCittaWdodCBiZSBhIGdvb2QgaWRlYTsgbWF5YmUgbWFrZSBhbiAiYWR2YW5jZWQgZXhhbXBsZXMiIHNlY3Rpb24gYQorc3RhbmRhcmQgZW5kLW9mLWNoYXB0ZXIgc2VjdGlvbj8KKworSW5jbHVkZSBjcm9zcy1yZWZlcmVuY2VzIHRvIHRoZSBnbG9zc2FyeSwgd2hlcmUgYXBwcm9wcmlhdGUuCisKK0FkZCBhIHNlY3Rpb24gb24gd29ya2luZyB3aXRoIG90aGVyIHZlcnNpb24gY29udHJvbCBzeXN0ZW1zLCBpbmNsdWRpbmcKK0NWUywgU3VidmVyc2lvbiwgYW5kIGp1c3QgaW1wb3J0cyBvZiBzZXJpZXMgb2YgcmVsZWFzZSB0YXJiYWxscy4KKworV3JpdGUgYSBjaGFwdGVyIG9uIHVzaW5nIHBsdW1iaW5nIGFuZCB3cml0aW5nIHNjcmlwdHMuCisKK0FsdGVybmF0ZXMsIGNsb25lIC1yZWZlcmVuY2UsIGV0Yy4KKworTW9yZSBvbiByZWNvdmVyeSBmcm9tIHJlcG9zaXRvcnkgY29ycnVwdGlvbi4gIFNlZToKKwlodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvUGluZS5MTlguNC42NC4wNzAyMjcyMDM5NTQwLjEyNDg1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnLworCWh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC9QaW5lLkxOWC40LjY0LjA3MDIxNDEwMzM0MDAuMzYwNEB3b29keS5saW51eC1mb3VuZGF0aW9uLm9yZy8KZGlmZiAtLWdpdCBhL0dJVC1WRVJTSU9OLUdFTiBiL0dJVC1WRVJTSU9OLUdFTgppbmRleCA5MjM3M2QyLi4xNjVjZTdhIDEwMDc1NQotLS0gYS9HSVQtVkVSU0lPTi1HRU4KKysrIGIvR0lULVZFUlNJT04tR0VOCkBAIC0xLDgwICsxLDQwIEBACiAjIS9iaW4vc2gKIAogR1ZGPUdJVC1WRVJTSU9OLUZJTEUKLURFRl9WRVI9MC4yMS5HSVRHVUkKK0RFRl9WRVI9djIuMjcuMC1yYzEKIAogTEY9JwogJwogCi10cmVlX3NlYXJjaCAoKQotewotCWhlYWQ9JDEKLQl0cmVlPSQyCi0JZm9yIHAgaW4gJChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0tbWF4LWNvdW50PTEgJGhlYWQgMj4vZGV2L251bGwpCi0JZG8KLQkJdGVzdCAkdHJlZSA9ICQoZ2l0IHJldi1wYXJzZSAkcF57dHJlZX0gMj4vZGV2L251bGwpICYmCi0JCXZuPSQoZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgJHAgMj4vZGV2L251bGwpICYmCi0JCWNhc2UgIiR2biIgaW4KLQkJZ2l0Z3VpLVswLTldKikgZWNobyAkdm47IGJyZWFrOzsKLQkJZXNhYwotCWRvbmUKLX0KLQotIyBBbHdheXMgdXNlIHRoZSB0YXJiYWxsIHZlcnNpb24gZmlsZSBpZiBmb3VuZCwganVzdAotIyBpbiBjYXNlIHdlIGFyZSBzb21laG93IGNvbnRhaW5lZCBpbiBhIGxhcmdlciBnaXQKLSMgcmVwb3NpdG9yeSB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgdHJhY2sgb3VyIHN0YXRlLgotIyAoQXQgbGVhc3Qgb25lIHBhY2thZ2UgbWFuYWdlciBpcyBkb2luZyB0aGlzLikKLSMKLSMgV2UgbWF5IGJlIGEgc3VicHJvamVjdCwgc28gdHJ5IGxvb2tpbmcgZm9yIHRoZSBtZXJnZQotIyBjb21taXQgdGhhdCBzdXBwbGllZCB0aGlzIGRpcmVjdG9yeSBjb250ZW50IGlmIHdlIGFyZQotIyBub3QgYXQgdGhlIHRvcGxldmVsLiAgV2UgcHJvYmFibHkgd2lsbCBhbHdheXMgYmUgdGhlCi0jIHNlY29uZCBwYXJlbnQgaW4gdGhlIGNvbW1pdCwgYnV0IHdlIHNob3VsZG4ndCByZWx5IG9uCi0jIHRoYXQgZmFjdC4KLSMKLSMgSWYgd2UgYXJlIGF0IHRoZSB0b3BsZXZlbCBvciB0aGUgbWVyZ2UgYXNzdW1wdGlvbiBmYWlscwotIyB0cnkgbG9va2luZyBmb3IgYSBnaXRndWktKiB0YWcuCi0KLWlmIHRlc3QgLWYgdmVyc2lvbiAmJgotICAgVk49JChjYXQgdmVyc2lvbikKKyMgRmlyc3Qgc2VlIGlmIHRoZXJlIGlzIGEgdmVyc2lvbiBmaWxlIChpbmNsdWRlZCBpbiByZWxlYXNlIHRhcmJhbGxzKSwKKyMgdGhlbiB0cnkgZ2l0LWRlc2NyaWJlLCB0aGVuIGRlZmF1bHQuCitpZiB0ZXN0IC1mIHZlcnNpb24KIHRoZW4KLQk6IGhhcHB5Ci1lbGlmIHByZWZpeD0iJChnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXggMj4vZGV2L251bGwpIgotICAgdGVzdCAtbiAiJHByZWZpeCIgJiYKLSAgIGhlYWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEIC0tIC4gMj4vZGV2L251bGwpICYmCi0gICB0cmVlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiSEVBRDokcHJlZml4IiAyPi9kZXYvbnVsbCkgJiYKLSAgIFZOPSQodHJlZV9zZWFyY2ggJGhlYWQgJHRyZWUpCi0gICBjYXNlICIkVk4iIGluCi0gICBnaXRndWktWzAtOV0qKSA6IGhhcHB5IDs7Ci0gICAqKSAoZXhpdCAxKSA7OwotICAgZXNhYworCVZOPSQoY2F0IHZlcnNpb24pIHx8IFZOPSIkREVGX1ZFUiIKK2VsaWYgdGVzdCAtZCAke0dJVF9ESVI6LS5naXR9IC1vIC1mIC5naXQgJiYKKwlWTj0kKGdpdCBkZXNjcmliZSAtLW1hdGNoICJ2WzAtOV0qIiBIRUFEIDI+L2Rldi9udWxsKSAmJgorCWNhc2UgIiRWTiIgaW4KKwkqJExGKikgKGV4aXQgMSkgOzsKKwl2WzAtOV0qKQorCQlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaAorCQl0ZXN0IC16ICIkKGdpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQgLS0pIiB8fAorCQlWTj0iJFZOLWRpcnR5IiA7OworCWVzYWMKIHRoZW4KLQlWTj0kKGVjaG8gIiRWTiIgfCBzZWQgLWUgJ3MvXmdpdGd1aS0vLztzLy0vLi9nJyk7Ci1lbGlmIFZOPSQoZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgSEVBRCAyPi9kZXYvbnVsbCkgJiYKLSAgIGNhc2UgIiRWTiIgaW4KLSAgIGdpdGd1aS1bMC05XSopIDogaGFwcHkgOzsKLSAgICopIChleGl0IDEpIDs7Ci0gICBlc2FjCi10aGVuCi0JVk49JChlY2hvICIkVk4iIHwgc2VkIC1lICdzL15naXRndWktLy87cy8tLy4vZycpOworCVZOPSQoZWNobyAiJFZOIiB8IHNlZCAtZSAncy8tLy4vZycpOwogZWxzZQogCVZOPSIkREVGX1ZFUiIKIGZpCiAKLWRpcnR5PSQoc2ggLWMgJ2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQnIDI+L2Rldi9udWxsKSB8fCBkaXJ0eT0KLWNhc2UgIiRkaXJ0eSIgaW4KLScnKQotCTs7Ci0qKQotCVZOPSIkVk4tZGlydHkiIDs7Ci1lc2FjCitWTj0kKGV4cHIgIiRWTiIgOiB2KidcKC4qXCknKQogCiBpZiB0ZXN0IC1yICRHVkYKIHRoZW4KLQlWQz0kKHNlZCAtZSAncy9eR0lUR1VJX1ZFUlNJT04gPSAvLycgPCRHVkYpCisJVkM9JChzZWQgLWUgJ3MvXkdJVF9WRVJTSU9OID0gLy8nIDwkR1ZGKQogZWxzZQogCVZDPXVuc2V0CiBmaQogdGVzdCAiJFZOIiA9ICIkVkMiIHx8IHsKLQllY2hvID4mMiAiR0lUR1VJX1ZFUlNJT04gPSAkVk4iCi0JZWNobyAiR0lUR1VJX1ZFUlNJT04gPSAkVk4iID4kR1ZGCisJZWNobyA+JjIgIkdJVF9WRVJTSU9OID0gJFZOIgorCWVjaG8gIkdJVF9WRVJTSU9OID0gJFZOIiA+JEdWRgogfQpkaWZmIC0tZ2l0IGEvSU5TVEFMTCBiL0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJhMzNlNgotLS0gL2Rldi9udWxsCisrKyBiL0lOU1RBTEwKQEAgLTAsMCArMSwyNDIgQEAKKworCQlHaXQgaW5zdGFsbGF0aW9uCisKK05vcm1hbGx5IHlvdSBjYW4ganVzdCBkbyAibWFrZSIgZm9sbG93ZWQgYnkgIm1ha2UgaW5zdGFsbCIsIGFuZCB0aGF0Cit3aWxsIGluc3RhbGwgdGhlIGdpdCBwcm9ncmFtcyBpbiB5b3VyIG93biB+L2Jpbi8gZGlyZWN0b3J5LiAgSWYgeW91IHdhbnQKK3RvIGRvIGEgZ2xvYmFsIGluc3RhbGwsIHlvdSBjYW4gZG8KKworCSQgbWFrZSBwcmVmaXg9L3VzciBhbGwgZG9jIGluZm8gOyMgYXMgeW91cnNlbGYKKwkjIG1ha2UgcHJlZml4PS91c3IgaW5zdGFsbCBpbnN0YWxsLWRvYyBpbnN0YWxsLWh0bWwgaW5zdGFsbC1pbmZvIDsjIGFzIHJvb3QKKworKG9yIHByZWZpeD0vdXNyL2xvY2FsLCBvZiBjb3Vyc2UpLiAgSnVzdCBsaWtlIGFueSBwcm9ncmFtIHN1aXRlCit0aGF0IHVzZXMgJHByZWZpeCwgdGhlIGJ1aWx0IHJlc3VsdHMgaGF2ZSBzb21lIHBhdGhzIGVuY29kZWQsCit3aGljaCBhcmUgZGVyaXZlZCBmcm9tICRwcmVmaXgsIHNvICJtYWtlIGFsbDsgbWFrZSBwcmVmaXg9L3VzcgoraW5zdGFsbCIgd291bGQgbm90IHdvcmsuCisKK1RoZSBiZWdpbm5pbmcgb2YgdGhlIE1ha2VmaWxlIGRvY3VtZW50cyBtYW55IHZhcmlhYmxlcyB0aGF0IGFmZmVjdCB0aGUgd2F5CitnaXQgaXMgYnVpbHQuICBZb3UgY2FuIG92ZXJyaWRlIHRoZW0gZWl0aGVyIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgb3IgaW4gYQorY29uZmlnLm1hayBmaWxlLgorCitBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gdXNlIGF1dG9jb25mIGdlbmVyYXRlZCAuL2NvbmZpZ3VyZSBzY3JpcHQgdG8KK3NldCB1cCBpbnN0YWxsIHBhdGhzICh2aWEgY29uZmlnLm1hay5hdXRvZ2VuKSwgc28geW91IGNhbiB3cml0ZSBpbnN0ZWFkCisKKwkkIG1ha2UgY29uZmlndXJlIDsjIGFzIHlvdXJzZWxmCisJJCAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vdXNyIDsjIGFzIHlvdXJzZWxmCisJJCBtYWtlIGFsbCBkb2MgOyMgYXMgeW91cnNlbGYKKwkjIG1ha2UgaW5zdGFsbCBpbnN0YWxsLWRvYyBpbnN0YWxsLWh0bWw7IyBhcyByb290CisKK0lmIHlvdSdyZSB3aWxsaW5nIHRvIHRyYWRlIG9mZiAobXVjaCkgbG9uZ2VyIGJ1aWxkIHRpbWUgZm9yIGEgbGF0ZXIKK2Zhc3RlciBnaXQgeW91IGNhbiBhbHNvIGRvIGEgcHJvZmlsZSBmZWVkYmFjayBidWlsZCB3aXRoCisKKwkkIG1ha2UgcHJlZml4PS91c3IgcHJvZmlsZQorCSMgbWFrZSBwcmVmaXg9L3VzciBQUk9GSUxFPUJVSUxEIGluc3RhbGwKKworVGhpcyB3aWxsIHJ1biB0aGUgY29tcGxldGUgdGVzdCBzdWl0ZSBhcyB0cmFpbmluZyB3b3JrbG9hZCBhbmQgdGhlbgorcmVidWlsZCBnaXQgd2l0aCB0aGUgZ2VuZXJhdGVkIHByb2ZpbGUgZmVlZGJhY2suIFRoaXMgcmVzdWx0cyBpbiBhIGdpdAord2hpY2ggaXMgYSBmZXcgcGVyY2VudCBmYXN0ZXIgb24gQ1BVIGludGVuc2l2ZSB3b3JrbG9hZHMuICBUaGlzCittYXkgYmUgYSBnb29kIHRyYWRlb2ZmIGZvciBkaXN0cmlidXRpb24gcGFja2FnZXJzLgorCitBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gcnVuIHByb2ZpbGUgZmVlZGJhY2sgb25seSB3aXRoIHRoZSBnaXQgYmVuY2htYXJrCitzdWl0ZS4gVGhpcyBydW5zIHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4gdGhlIGZ1bGwgdGVzdCBzdWl0ZSwgYnV0CitoYXMgbGVzcyBjb3ZlcmFnZToKKworCSQgbWFrZSBwcmVmaXg9L3VzciBwcm9maWxlLWZhc3QKKwkjIG1ha2UgcHJlZml4PS91c3IgUFJPRklMRT1CVUlMRCBpbnN0YWxsCisKK09yIGlmIHlvdSBqdXN0IHdhbnQgdG8gaW5zdGFsbCBhIHByb2ZpbGUtb3B0aW1pemVkIHZlcnNpb24gb2YgZ2l0IGludG8KK3lvdXIgaG9tZSBkaXJlY3RvcnksIHlvdSBjb3VsZCBydW46CisKKwkkIG1ha2UgcHJvZmlsZS1pbnN0YWxsCisKK29yCisJJCBtYWtlIHByb2ZpbGUtZmFzdC1pbnN0YWxsCisKK0FzIGEgY2F2ZWF0OiBhIHByb2ZpbGUtb3B0aW1pemVkIGJ1aWxkIHRha2VzIGEgKmxvdCogbG9uZ2VyIHNpbmNlIHRoZQorZ2l0IHRyZWUgbXVzdCBiZSBidWlsdCB0d2ljZSwgYW5kIGluIG9yZGVyIGZvciB0aGUgcHJvZmlsaW5nCittZWFzdXJlbWVudHMgdG8gd29yayBwcm9wZXJseSwgY2NhY2hlIG11c3QgYmUgZGlzYWJsZWQgYW5kIHRoZSB0ZXN0CitzdWl0ZSBoYXMgdG8gYmUgcnVuIHVzaW5nIG9ubHkgYSBzaW5nbGUgQ1BVLiAgSW4gYWRkaXRpb24sIHRoZSBwcm9maWxlCitmZWVkYmFjayBidWlsZCBzdGFnZSBjdXJyZW50bHkgZ2VuZXJhdGVzIGEgbG90IG9mIGFkZGl0aW9uYWwgY29tcGlsZXIKK3dhcm5pbmdzLgorCitJc3N1ZXMgb2Ygbm90ZToKKworIC0gQW5jaWVudCB2ZXJzaW9ucyBvZiBHTlUgSW50ZXJhY3RpdmUgVG9vbHMgKHByZS00LjkuMikgaW5zdGFsbGVkIGEKKyAgIHByb2dyYW0gImdpdCIsIHdob3NlIG5hbWUgY29uZmxpY3RzIHdpdGggdGhpcyBwcm9ncmFtLiAgQnV0IHdpdGgKKyAgIHZlcnNpb24gNC45LjIsIGFmdGVyIGxvbmcgaGlhdHVzIHdpdGhvdXQgYWN0aXZlIG1haW50ZW5hbmNlIChzaW5jZQorICAgYXJvdW5kIDE5OTcpLCBpdCBjaGFuZ2VkIGl0cyBuYW1lIHRvIGdudWl0IGFuZCB0aGUgbmFtZSBjb25mbGljdCBpcyBubworICAgbG9uZ2VyIGEgcHJvYmxlbS4KKworICAgTk9URTogV2hlbiBjb21waWxlZCB3aXRoIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb3B0aW9uLCB0aGUgR05VCisgICBJbnRlcmFjdGl2ZSBUb29scyBwYWNrYWdlIHN0aWxsIGNhbiBpbnN0YWxsICJnaXQiLCBidXQgeW91IGNhbiBidWlsZCBpdAorICAgd2l0aCAtLWRpc2FibGUtdHJhbnNpdGlvbiBvcHRpb24gdG8gYXZvaWQgdGhpcy4KKworIC0gWW91IGNhbiB1c2UgZ2l0IGFmdGVyIGJ1aWxkaW5nIGJ1dCB3aXRob3V0IGluc3RhbGxpbmcgaWYgeW91IHdhbnQKKyAgIHRvIHRlc3QgZHJpdmUgaXQuICBTaW1wbHkgcnVuIGdpdCBmb3VuZCBpbiBiaW4td3JhcHBlcnMgZGlyZWN0b3J5CisgICBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LCBvciBwcmVwZW5kIHRoYXQgZGlyZWN0b3J5IHRvIHlvdXIgJFBBVEguCisgICBUaGlzIGhvd2V2ZXIgaXMgbGVzcyBlZmZpY2llbnQgdGhhbiBydW5uaW5nIGFuIGluc3RhbGxlZCBnaXQsIGFzCisgICB5b3UgYWx3YXlzIG5lZWQgYW4gZXh0cmEgZm9yaytleGVjIHRvIHJ1biBhbnkgZ2l0IHN1YmNvbW1hbmQuCisKKyAgIEl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIHVzZSBnaXQgd2l0aG91dCBpbnN0YWxsaW5nIGJ5IHNldHRpbmcgYSBmZXcKKyAgIGVudmlyb25tZW50IHZhcmlhYmxlcywgd2hpY2ggd2FzIHRoZSB3YXkgdGhpcyB3YXMgZG9uZQorICAgdHJhZGl0aW9uYWxseS4gIEJ1dCB1c2luZyBnaXQgZm91bmQgaW4gYmluLXdyYXBwZXJzIGRpcmVjdG9yeSBpbgorICAgdGhlIGJ1aWxkIGRpcmVjdG9yeSBpcyBmYXIgc2ltcGxlci4gIEFzIGEgaGlzdG9yaWNhbCByZWZlcmVuY2UsIHRoZQorICAgb2xkIHdheSB3ZW50IGxpa2UgdGhpczoKKworCUdJVF9FWEVDX1BBVEg9YHB3ZGAKKwlQQVRIPWBwd2RgOiRQQVRICisJR0lUUEVSTExJQj1gcHdkYC9wZXJsL2J1aWxkL2xpYgorCWV4cG9ydCBHSVRfRVhFQ19QQVRIIFBBVEggR0lUUEVSTExJQgorCisgLSBCeSBkZWZhdWx0ICh1bmxlc3MgTk9fUEVSTCBpcyBwcm92aWRlZCkgR2l0IHdpbGwgc2hpcCB2YXJpb3VzIHBlcmwKKyAgIHNjcmlwdHMuIEhvd2V2ZXIsIGZvciBzaW1wbGljaXR5IGl0IGRvZXNuJ3QgdXNlIHRoZQorICAgRXh0VXRpbHM6Ok1ha2VNYWtlciB0b29sY2hhaW4gdG8gZGVjaWRlIHdoZXJlIHRvIHBsYWNlIHRoZSBwZXJsCisgICBsaWJyYXJpZXMuIERlcGVuZGluZyBvbiB0aGUgc3lzdGVtIHRoaXMgY2FuIHJlc3VsdCBpbiB0aGUgcGVybAorICAgbGlicmFyaWVzIG5vdCBiZWluZyB3aGVyZSB5b3UnZCBsaWtlIHRoZW0gaWYgdGhleSdyZSBleHBlY3RlZCB0byBiZQorICAgdXNlZCBieSB0aGluZ3Mgb3RoZXIgdGhhbiBHaXQgaXRzZWxmLgorCisgICBNYW51YWxseSBzdXBwbHlpbmcgYSBwZXJsbGliZGlyIHByZWZpeCBzaG91bGQgZml4IHRoaXMsIGlmIHRoaXMgaXMKKyAgIGEgcHJvYmxlbSB5b3UgY2FyZSBhYm91dCwgZS5nLjoKKworICAgICAgIHByZWZpeD0vdXNyIHBlcmxsaWJkaXI9L3Vzci8kKC91c3IvYmluL3BlcmwgLU1Db25maWcgLXdsZSAncHJpbnQgc3Vic3RyICRDb25maWd7aW5zdGFsbHNpdGVsaWJ9LCAxICsgbGVuZ3RoICRDb25maWd7c2l0ZXByZWZpeGV4cH0nKQorCisgICBXaWxsIHJlc3VsdCBpbiBlLmcuIHBlcmxsaWJkaXI9L3Vzci9zaGFyZS9wZXJsLzUuMjYuMSBvbiBEZWJpYW4sCisgICBwZXJsbGliZGlyPS91c3Ivc2hhcmUvcGVybDUgKHdoaWNoIHdlJ2QgdXNlIGJ5IGRlZmF1bHQpIG9uIENlbnRPUy4KKworIC0gVW5sZXNzIE5PX1BFUkwgaXMgcHJvdmlkZWQgR2l0IHdpbGwgc2hpcCB2YXJpb3VzIHBlcmwgbGlicmFyaWVzIGl0CisgICBuZWVkcy4gRGlzdHJpYnV0b3JzIG9mIEdpdCB3aWxsIHVzdWFsbHkgd2FudCB0byBzZXQKKyAgIE5PX1BFUkxfQ1BBTl9GQUxMQkFDS1MgaWYgTk9fUEVSTCBpcyBub3QgcHJvdmlkZWQgdG8gdXNlIHRoZWlyIG93bgorICAgY29waWVzIG9mIHRoZSBDUEFOIG1vZHVsZXMgR2l0IG5lZWRzLgorCisgLSBHaXQgaXMgcmVhc29uYWJseSBzZWxmLXN1ZmZpY2llbnQsIGJ1dCBkb2VzIGRlcGVuZCBvbiBhIGZldyBleHRlcm5hbAorICAgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcy4gIEdpdCBjYW4gYmUgdXNlZCB3aXRob3V0IG1vc3Qgb2YgdGhlbSBieSBhZGRpbmcKKyAgIHRoZSBhcHByb3ByaWF0ZSAiTk9fPExJQlJBUlk+PVllc1BsZWFzZSIgdG8gdGhlIG1ha2UgY29tbWFuZCBsaW5lIG9yCisgICBjb25maWcubWFrIGZpbGUuCisKKwktICJ6bGliIiwgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkuIEdpdCB3b24ndCBidWlsZCB3aXRob3V0IGl0LgorCisJLSAic3NoIiBpcyB1c2VkIHRvIHB1c2ggYW5kIHB1bGwgb3ZlciB0aGUgbmV0LgorCisJLSBBIFBPU0lYLWNvbXBsaWFudCBzaGVsbCBpcyByZXF1aXJlZCB0byBydW4gc29tZSBzY3JpcHRzIG5lZWRlZAorCSAgZm9yIGV2ZXJ5ZGF5IHVzZSAoZS5nLiAiYmlzZWN0IiwgInJlcXVlc3QtcHVsbCIpLgorCisJLSAiUGVybCIgdmVyc2lvbiA1Ljggb3IgbGF0ZXIgaXMgbmVlZGVkIHRvIHVzZSBzb21lIG9mIHRoZQorCSAgZmVhdHVyZXMgKGUuZy4gcHJlcGFyaW5nIGEgcGFydGlhbCBjb21taXQgdXNpbmcgImdpdCBhZGQgLWkvLXAiLAorCSAgaW50ZXJhY3Rpbmcgd2l0aCBzdm4gcmVwb3NpdG9yaWVzIHdpdGggImdpdCBzdm4iKS4gIElmIHlvdSBjYW4KKwkgIGxpdmUgd2l0aG91dCB0aGVzZSwgdXNlIE5PX1BFUkwuICBOb3RlIHRoYXQgcmVjZW50IHJlbGVhc2VzIG9mCisJICBSZWRoYXQvRmVkb3JhIGFyZSByZXBvcnRlZCB0byBzaGlwIFBlcmwgYmluYXJ5IHBhY2thZ2Ugd2l0aCBzb21lCisJICBjb3JlIG1vZHVsZXMgc3RyaXBwZWQgYXdheSAoc2VlIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzQ3NzIzNC8pLAorCSAgc28geW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhZGRpdGlvbmFsIHBhY2thZ2VzIG90aGVyIHRoYW4gUGVybAorCSAgaXRzZWxmLCBlLmcuIERpZ2VzdDo6TUQ1LCBGaWxlOjpTcGVjLCBGaWxlOjpUZW1wLCBOZXQ6OkRvbWFpbiwKKwkgIE5ldDo6U01UUCwgYW5kIFRpbWU6OkhpUmVzLgorCisJLSBnaXQtaW1hcC1zZW5kIG5lZWRzIHRoZSBPcGVuU1NMIGxpYnJhcnkgdG8gdGFsayBJTUFQIG92ZXIgU1NMIGlmCisJICB5b3UgYXJlIHVzaW5nIGxpYmN1cmwgb2xkZXIgdGhhbiA3LjM0LjAuICBPdGhlcndpc2UgeW91IGNhbiB1c2UKKwkgIE5PX09QRU5TU0wgd2l0aG91dCBsb3NpbmcgZ2l0LWltYXAtc2VuZC4KKworCSAgQnkgZGVmYXVsdCwgZ2l0IHVzZXMgT3BlblNTTCBmb3IgU0hBMSBidXQgaXQgd2lsbCB1c2UgaXRzIG93bgorCSAgbGlicmFyeSAoaW5zcGlyZWQgYnkgTW96aWxsYSdzKSB3aXRoIGVpdGhlciBOT19PUEVOU1NMIG9yCisJICBCTEtfU0hBMS4gIEFsc28gaW5jbHVkZWQgaXMgYSB2ZXJzaW9uIG9wdGltaXplZCBmb3IgUG93ZXJQQworCSAgKFBQQ19TSEExKS4KKworCS0gImxpYmN1cmwiIGxpYnJhcnkgaXMgdXNlZCBieSBnaXQtaHR0cC1mZXRjaCwgZ2l0LWZldGNoLCBhbmQsIGlmCisJICB0aGUgY3VybCB2ZXJzaW9uID49IDcuMzQuMCwgZm9yIGdpdC1pbWFwLXNlbmQuICBZb3UgbWlnaHQgYWxzbworCSAgd2FudCB0aGUgImN1cmwiIGV4ZWN1dGFibGUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gSWYgeW91IGRvIG5vdAorCSAgdXNlIGh0dHA6Ly8gb3IgaHR0cHM6Ly8gcmVwb3NpdG9yaWVzLCBhbmQgZG8gbm90IHdhbnQgdG8gcHV0CisJICBwYXRjaGVzIGludG8gYW4gSU1BUCBtYWlsYm94LCB5b3UgZG8gbm90IGhhdmUgdG8gaGF2ZSB0aGVtCisJICAodXNlIE5PX0NVUkwpLgorCisJLSAiZXhwYXQiIGxpYnJhcnk7IGdpdC1odHRwLXB1c2ggdXNlcyBpdCBmb3IgcmVtb3RlIGxvY2sKKwkgIG1hbmFnZW1lbnQgb3ZlciBEQVYuICBTaW1pbGFyIHRvICJjdXJsIiBhYm92ZSwgdGhpcyBpcyBvcHRpb25hbAorCSAgKHdpdGggTk9fRVhQQVQpLgorCisJLSAid2lzaCIsIHRoZSBUY2wvVGsgd2luZG93aW5nIHNoZWxsIGlzIHVzZWQgaW4gZ2l0ayB0byBzaG93IHRoZQorCSAgaGlzdG9yeSBncmFwaGljYWxseSwgYW5kIGluIGdpdC1ndWkuICBJZiB5b3UgZG9uJ3Qgd2FudCBnaXRrIG9yCisJICBnaXQtZ3VpLCB5b3UgY2FuIHVzZSBOT19UQ0xUSy4KKworCS0gQSBnZXR0ZXh0IGxpYnJhcnkgaXMgdXNlZCBieSBkZWZhdWx0IGZvciBsb2NhbGl6aW5nIEdpdC4gVGhlCisJICBwcmltYXJ5IHRhcmdldCBpcyBHTlUgbGliaW50bCwgYnV0IHRoZSBTb2xhcmlzIGdldHRleHQKKwkgIGltcGxlbWVudGF0aW9uIGFsc28gd29ya3MuCisKKwkgIFdlIG5lZWQgYSBnZXR0ZXh0Lmggb24gdGhlIHN5c3RlbSBmb3IgQyBjb2RlLCBnZXR0ZXh0LnNoIChvcgorCSAgU29sYXJpcyBnZXR0ZXh0KDEpKSBmb3Igc2hlbGwgc2NyaXB0cywgYW5kIGxpYmludGwtcGVybCBmb3IgUGVybAorCSAgcHJvZ3JhbXMuCisKKwkgIFNldCBOT19HRVRURVhUIHRvIGRpc2FibGUgbG9jYWxpemF0aW9uIHN1cHBvcnQgYW5kIG1ha2UgR2l0IG9ubHkKKwkgIHVzZSBFbmdsaXNoLiBVbmRlciBhdXRvY29uZiB0aGUgY29uZmlndXJlIHNjcmlwdCB3aWxsIGRvIHRoaXMKKwkgIGF1dG9tYXRpY2FsbHkgaWYgaXQgY2FuJ3QgZmluZCBsaWJpbnRsIG9uIHRoZSBzeXN0ZW0uCisKKwktIFB5dGhvbiB2ZXJzaW9uIDIuNCBvciBsYXRlciAoYnV0IG5vdCAzLngsIHdoaWNoIGlzIG5vdAorCSAgc3VwcG9ydGVkIGJ5IFBlcmZvcmNlKSBpcyBuZWVkZWQgdG8gdXNlIHRoZSBnaXQtcDQgaW50ZXJmYWNlCisJICB0byBQZXJmb3JjZS4KKworIC0gU29tZSBwbGF0Zm9ybSBzcGVjaWZpYyBpc3N1ZXMgYXJlIGRlYWx0IHdpdGggTWFrZWZpbGUgcnVsZXMsCisgICBidXQgZGVwZW5kaW5nIG9uIHlvdXIgc3BlY2lmaWMgaW5zdGFsbGF0aW9uLCB5b3UgbWF5IG5vdAorICAgaGF2ZSBhbGwgdGhlIGxpYnJhcmllcy90b29scyBuZWVkZWQsIG9yIHlvdSBtYXkgaGF2ZQorICAgbmVjZXNzYXJ5IGxpYnJhcmllcyBhdCB1bnVzdWFsIGxvY2F0aW9ucy4gIFBsZWFzZSBsb29rIGF0IHRoZQorICAgdG9wIG9mIHRoZSBNYWtlZmlsZSB0byBzZWUgd2hhdCBjYW4gYmUgYWRqdXN0ZWQgZm9yIHlvdXIgbmVlZHMuCisgICBZb3UgY2FuIHBsYWNlIGxvY2FsIHNldHRpbmdzIGluIGNvbmZpZy5tYWsgYW5kIHRoZSBNYWtlZmlsZQorICAgd2lsbCBpbmNsdWRlIHRoZW0uICBOb3RlIHRoYXQgY29uZmlnLm1hayBpcyBub3QgZGlzdHJpYnV0ZWQ7CisgICB0aGUgbmFtZSBpcyByZXNlcnZlZCBmb3IgbG9jYWwgc2V0dGluZ3MuCisKKyAtIFRvIGJ1aWxkIGFuZCBpbnN0YWxsIGRvY3VtZW50YXRpb24gc3VpdGUsIHlvdSBuZWVkIHRvIGhhdmUKKyAgIHRoZSBhc2NpaWRvYy94bWx0byB0b29sY2hhaW4uICBCZWNhdXNlIG5vdCBtYW55IHBlb3BsZSBhcmUKKyAgIGluY2xpbmVkIHRvIGluc3RhbGwgdGhlIHRvb2xzLCB0aGUgZGVmYXVsdCBidWlsZCB0YXJnZXQKKyAgICgibWFrZSBhbGwiKSBkb2VzIF9ub3RfIGJ1aWxkIHRoZW0uCisKKyAgICJtYWtlIGRvYyIgYnVpbGRzIGRvY3VtZW50YXRpb24gaW4gbWFuIGFuZCBodG1sIGZvcm1hdHM7IHRoZXJlIGFyZQorICAgYWxzbyAibWFrZSBtYW4iLCAibWFrZSBodG1sIiBhbmQgIm1ha2UgaW5mbyIuIE5vdGUgdGhhdCAibWFrZSBodG1sIgorICAgcmVxdWlyZXMgYXNjaWlkb2MsIGJ1dCBub3QgeG1sdG8uICJtYWtlIG1hbiIgKGFuZCB0aHVzIG1ha2UgZG9jKQorICAgcmVxdWlyZXMgYm90aC4KKworICAgIm1ha2UgaW5zdGFsbC1kb2MiIGluc3RhbGxzIGRvY3VtZW50YXRpb24gaW4gbWFuIGZvcm1hdCBvbmx5OyB0aGVyZQorICAgYXJlIGFsc28gIm1ha2UgaW5zdGFsbC1tYW4iLCAibWFrZSBpbnN0YWxsLWh0bWwiIGFuZCAibWFrZQorICAgaW5zdGFsbC1pbmZvIi4KKworICAgQnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgdGhlIGluZm8gZmlsZSBhZGRpdGlvbmFsbHkgcmVxdWlyZXMKKyAgIG1ha2VpbmZvIGFuZCBkb2Nib29rMlguICBWZXJzaW9uIDAuOC4zIGlzIGtub3duIHRvIHdvcmsuCisKKyAgIEJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIHRoZSBwZGYgZmlsZSBhZGRpdGlvbmFsbHkgcmVxdWlyZXMKKyAgIGRibGF0ZXguICBWZXJzaW9uID49IDAuMi43IGlzIGtub3duIHRvIHdvcmsuCisKKyAgIEFsbCBmb3JtYXRzIHJlcXVpcmUgYXQgbGVhc3QgYXNjaWlkb2MgOC40LjEuCisKKyAgIFRoZXJlIGFyZSBhbHNvICJtYWtlIHF1aWNrLWluc3RhbGwtZG9jIiwgIm1ha2UgcXVpY2staW5zdGFsbC1tYW4iCisgICBhbmQgIm1ha2UgcXVpY2staW5zdGFsbC1odG1sIiB3aGljaCBpbnN0YWxsIHByZWZvcm1hdHRlZCBtYW4gcGFnZXMKKyAgIGFuZCBodG1sIGRvY3VtZW50YXRpb24uIFRvIHVzZSB0aGVzZSBidWlsZCB0YXJnZXRzLCB5b3UgbmVlZCB0bworICAgY2xvbmUgdHdvIHNlcGFyYXRlIGdpdC1odG1sZG9jcyBhbmQgZ2l0LW1hbnBhZ2VzIHJlcG9zaXRvcmllcyBuZXh0CisgICB0byB0aGUgY2xvbmUgb2YgZ2l0IGl0c2VsZi4KKworICAgVGhlIG1pbmltdW0gc3VwcG9ydGVkIHZlcnNpb24gb2YgZG9jYm9vay14c2wgaXMgMS43NC4KKworICAgVXNlcnMgYXR0ZW1wdGluZyB0byBidWlsZCB0aGUgZG9jdW1lbnRhdGlvbiBvbiBDeWd3aW4gbWF5IG5lZWQgdG8gZW5zdXJlCisgICB0aGF0IHRoZSAvZXRjL3htbC9jYXRhbG9nIGZpbGUgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczoKKworICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+CisgICA8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMKKyAgICAgICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgorICAgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiCisgICA+CisgICA8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+CisgICAgIDxyZXdyaXRlVVJJCisgICAgICAgdXJpU3RhcnRTdHJpbmcgPSAiaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQiCisgICAgICAgcmV3cml0ZVByZWZpeCA9ICIvdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMiCisgICAgIC8+CisgICAgIDxyZXdyaXRlVVJJCisgICAgICAgdXJpU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC41IgorICAgICAgIHJld3JpdGVQcmVmaXg9Ii91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbC1kdGQtNC41IgorICAgICAvPgorICA8L2NhdGFsb2c+CisKKyAgVGhpcyBjYW4gYmUgYWNoaWV2ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHR3byB4bWxjYXRhbG9nIGNvbW1hbmRzOgorCisgIHhtbGNhdGFsb2cgLS1ub291dCBcCisgICAgIC0tYWRkIHJld3JpdGVVUkkgXAorICAgICAgICBodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudCBcCisgICAgICAgIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cyBcCisgICAgIC9ldGMveG1sL2NhdGFsb2cKKworICB4bWxjYXRhbG9nIC0tbm9vdXQgXAorICAgICAtLWFkZCByZXdyaXRlVVJJIFwKKyAgICAgICAgIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC41L3hzbC9jdXJyZW50IFwKKyAgICAgICAgIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbC1kdGQtNC41IFwKKyAgICAgL2V0Yy94bWwvY2F0YWxvZwpkaWZmIC0tZ2l0IGEvTEdQTC0yLjEgYi9MR1BMLTIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzhiMWI5Ci0tLSAvZGV2L251bGwKKysrIGIvTEdQTC0yLjEKQEAgLTAsMCArMSw1MTEgQEAKKworIFdoaWxlIG1vc3Qgb2YgdGhpcyBwcm9qZWN0IGlzIHVuZGVyIHRoZSBHUEwgKHNlZSBDT1BZSU5HKSwgdGhlIHhkaWZmLworIGxpYnJhcnkgYW5kIHNvbWUgbGliYyBjb2RlIGZyb20gY29tcGF0LyBhcmUgbGljZW5zZWQgdW5kZXIgdGhlCisgR05VIExHUEwsIHZlcnNpb24gMi4xIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24gYW5kIHNvbWUKKyBvdGhlciBmaWxlcyBhcmUgdW5kZXIgb3RoZXIgbGljZW5zZXMuICBDaGVjayB0aGUgaW5kaXZpZHVhbCBmaWxlcyB0bworIGJlIHN1cmUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4xLCBGZWJydWFyeSAxOTk5CisKKyBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBMZXNzZXIgR1BMLiAgSXQgYWxzbyBjb3VudHMKKyBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQorIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQorZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLgorCisgIFRoaXMgbGljZW5zZSwgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKK3NwZWNpYWxseSBkZXNpZ25hdGVkIHNvZnR3YXJlIHBhY2thZ2VzLS10eXBpY2FsbHkgbGlicmFyaWVzLS1vZiB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQorY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlcgordGhpcyBsaWNlbnNlIG9yIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIHRoZSBiZXR0ZXIKK3N0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tIG9mIHVzZSwKK25vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKK3lvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKK2ZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpOyB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQKK2l0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgoraXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvCit0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorZGlzdHJpYnV0b3JzIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGVzZQorcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCit5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKK29yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKK3lvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKK2NvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQord2l0aCB0aGUgbGlicmFyeSBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCBhIHR3by1zdGVwIG1ldGhvZDogKDEpIHdlIGNvcHlyaWdodCB0aGUKK2xpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCitwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKK3RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKK21vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB0aGUgcmVjaXBpZW50cyBzaG91bGQga25vdwordGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCithdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKK2ludHJvZHVjZWQgYnkgb3RoZXJzLgorDAorICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgorYW55IGZyZWUgcHJvZ3JhbS4gIFdlIHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgYSBjb21wYW55IGNhbm5vdAorZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCityZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiAgVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdAorYW55IHBhdGVudCBsaWNlbnNlIG9idGFpbmVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbXVzdCBiZQorY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCisKKyAgTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQKK2lzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgV2UgdXNlCit0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCitsaWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KKworICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZworYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhCitjb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnkuICBUaGUgb3JkaW5hcnkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCitlbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gIFRoZSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgcGVybWl0cyBtb3JlIGxheCBjcml0ZXJpYSBmb3IgbGlua2luZyBvdGhlciBjb2RlIHdpdGgKK3RoZSBsaWJyYXJ5LgorCisgIFdlIGNhbGwgdGhpcyBsaWNlbnNlIHRoZSAiTGVzc2VyIiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJlY2F1c2UgaXQKK2RvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3MKK29mIGFuIGFkdmFudGFnZSBvdmVyIGNvbXBldGluZyBub24tZnJlZSBwcm9ncmFtcy4gIFRoZXNlIGRpc2FkdmFudGFnZXMKK2FyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQorbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgorc3BlY2lhbCBjaXJjdW1zdGFuY2VzLgorCisgIEZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvCitlbmNvdXJhZ2UgdGhlIHdpZGVzdCBwb3NzaWJsZSB1c2Ugb2YgYSBjZXJ0YWluIGxpYnJhcnksIHNvIHRoYXQgaXQgYmVjb21lcworYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQorYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZQorbGlicmFyeSBkb2VzIHRoZSBzYW1lIGpvYiBhcyB3aWRlbHkgdXNlZCBub24tZnJlZSBsaWJyYXJpZXMuICBJbiB0aGlzCitjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKK3NvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCitwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YKK2ZyZWUgc29mdHdhcmUuICBGb3IgZXhhbXBsZSwgcGVybWlzc2lvbiB0byB1c2UgdGhlIEdOVSBDIExpYnJhcnkgaW4KK25vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQorb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcKK3N5c3RlbS4KKworICBBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZQordXNlcnMnIGZyZWVkb20sIGl0IGRvZXMgZW5zdXJlIHRoYXQgdGhlIHVzZXIgb2YgYSBwcm9ncmFtIHRoYXQgaXMKK2xpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgordGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4gIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCisid29yayBiYXNlZCBvbiB0aGUgbGlicmFyeSIgYW5kIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gIFRoZQorZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdAorYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCisMCisgICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgorcHJvZ3JhbSB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3IKK290aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KK0VhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaword2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKK2NvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCitwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCitzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCitpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCitzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yCit3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCithbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5J3MKK2NvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0Cit5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbgorYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QKK2FsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55Cit3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZQorTGlicmFyeS4KKworICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAorYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYQorZmVlLgorDAorICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBMaWJyYXJ5IG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCisgICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKKyAgICB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzCisgICAgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eQorICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAorICAgIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvcgorICAgIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mCisgICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgorCisgICAgKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMKKyAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCisgICAgYXBwbGljYXRpb24uICBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkKKyAgICBhcHBsaWNhdGlvbi1zdXBwbGllZCBmdW5jdGlvbiBvciB0YWJsZSB1c2VkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdAorICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCisgICAgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZQoraXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIExpYnJhcnkuCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKK3dpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8KK3RoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28KK3RoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKK2luc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAgKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGhhcyBhcHBlYXJlZCwgdGhlbiB5b3UgY2FuIHNwZWNpZnkKK3RoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KK3RoZXNlIG5vdGljZXMuCisMCisgIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKK3RoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCitzdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgorCisgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZgordGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorCisgIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCitkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybQordW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55CitpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCittdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICBJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKK3NvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bworZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZQorTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgorbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuICBTdWNoIGEKK3dvcmssIGluIGlzb2xhdGlvbiwgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5LCBhbmQKK3RoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeQorY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0Citjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZQorbGlicmFyeSIuICBUaGUgZXhlY3V0YWJsZSBpcyB0aGVyZWZvcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCitTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KKworICBXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZQordGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCitkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4KK1doZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlCitsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQordGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KKworICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQorc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lCitmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0CitmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCit3b3JrLiAgKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQorTGlicmFyeSB3aWxsIHN0aWxsIGZhbGwgdW5kZXIgU2VjdGlvbiA2LikKKworICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heQorZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuCitBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKK3doZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KKwwKKyAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKK2xpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCit3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawordW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCitlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKK0xpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieQordGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yaworZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKK2NvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UKK2RpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKK29mIHRoZXNlIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCisgICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCisgICAgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIKKyAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAorICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAorICAgIHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlCisgICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKKyAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAorICAgIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZQorICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCisgICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCisKKyAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKKyAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYQorICAgIGNvcHkgb2YgdGhlIGxpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLAorICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQorICAgIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYKKyAgICB0aGUgdXNlciBpbnN0YWxscyBvbmUsIGFzIGxvbmcgYXMgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMKKyAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KKworICAgIGMpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZSkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgbWF0ZXJpYWxzIHRvIGJlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcworbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCitjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCit3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzCit0aGUgZXhlY3V0YWJsZS4KKworICBJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZQorcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQorYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAordXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdQorZGlzdHJpYnV0ZS4KKwwKKyAgNy4gWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKK2ZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQKK2xpYnJhcnksIHByb3ZpZGVkIHRoYXQgdGhlIHNlcGFyYXRlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBiYXNlZCBvbgordGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCitwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKKyAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5CisgICAgZmFjaWxpdGllcy4gIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgICAgU2VjdGlvbnMgYWJvdmUuCisKKyAgICBiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdAorICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCisgICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCisgIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCit0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueQorYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywKK29yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMKK3Rlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA5LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeQorc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aAordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK1N1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKK2J1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCisiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCitsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKwwKKyAgMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAord3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKK2NvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCitkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCitvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZworYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PIFdBUlJBTlRZCisKKyAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCitXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLgorRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKK09USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCitLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCitMSUJSQVJZIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRQorVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOCitXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQorQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKK0ZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HCitSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQorRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgorU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUy4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKK2V2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZworcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCitvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworICBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gIEl0IGlzCitzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlCisiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnkncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCisgIGxpYnJhcnkgYEZyb2InIChhIGxpYnJhcnkgZm9yIHR3ZWFraW5nIGtub2JzKSB3cml0dGVuIGJ5IEphbWVzIFJhbmRvbSBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGYxMGNhZWQuLjkwYWEzMjkgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDM0NyArMSwzMjg3IEBACisjIFRoZSBkZWZhdWx0IHRhcmdldCBvZiB0aGlzIE1ha2VmaWxlIGlzLi4uCiBhbGw6OgogCiAjIERlZmluZSBWPTEgdG8gaGF2ZSBhIG1vcmUgdmVyYm9zZSBjb21waWxlLgogIwotIyBEZWZpbmUgTk9fTVNHRk1UIGlmIHlvdSBkbyBub3QgaGF2ZSBtc2dmbXQgZnJvbSB0aGUgR05VIGdldHRleHQKLSMgcGFja2FnZSBhbmQgd2FudCB0byB1c2Ugb3VyIHJvdWdoIHB1cmUgVGNsIHBvLT5tc2cgdHJhbnNsYXRvci4KLSMgVENMX1BBVEggbXVzdCBiZSB2YWxpZCBmb3IgdGhpcyB0byB3b3JrLgorIyBEZWZpbmUgU0hFTExfUEFUSCB0byBhIFBPU0lYIHNoZWxsIGlmIHlvdXIgL2Jpbi9zaCBpcyBicm9rZW4uCiAjCisjIERlZmluZSBTQU5FX1RPT0xfUEFUSCB0byBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBhdGhzIHRvIHByZXBlbmQKKyMgdG8gUEFUSCBpZiB5b3VyIHRvb2xzIGluIC91c3IvYmluIGFyZSBicm9rZW4uCisjCisjIERlZmluZSBTT0NLTEVOX1QgdG8gYSBzdWl0YWJsZSB0eXBlIChzdWNoIGFzICdzaXplX3QnKSBpZiB5b3VyCisjIHN5c3RlbSBoZWFkZXJzIGRvIG5vdCBkZWZpbmUgYSBzb2NrbGVuX3QgdHlwZS4KKyMKKyMgRGVmaW5lIElOTElORSB0byBhIHN1aXRhYmxlIHN1YnN0aXR1dGUgKHN1Y2ggYXMgJ19faW5saW5lJyBvciAnJykgaWYgZ2l0CisjIGZhaWxzIHRvIGNvbXBpbGUgd2l0aCBlcnJvcnMgYWJvdXQgdW5kZWZpbmVkIGlubGluZSBmdW5jdGlvbnMgb3Igc2ltaWxhci4KKyMKKyMgRGVmaW5lIFNOUFJJTlRGX1JFVFVSTlNfQk9HVVMgaWYgeW91IGFyZSBvbiBhIHN5c3RlbSB3aGljaCBzbnByaW50ZigpCisjIG9yIHZzbnByaW50ZigpIHJldHVybiAtMSBpbnN0ZWFkIG9mIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdvdWxkCisjIGhhdmUgYmVlbiB3cml0dGVuIHRvIHRoZSBmaW5hbCBzdHJpbmcgaWYgZW5vdWdoIHNwYWNlIGhhZCBiZWVuIGF2YWlsYWJsZS4KKyMKKyMgRGVmaW5lIEZSRUFEX1JFQURTX0RJUkVDVE9SSUVTIGlmIHlvdSBhcmUgb24gYSBzeXN0ZW0gd2hpY2ggc3VjY2VlZHMKKyMgd2hlbiBhdHRlbXB0aW5nIHRvIHJlYWQgZnJvbSBhbiBmb3BlbidlZCBkaXJlY3RvcnkgKG9yIGV2ZW4gdG8gZm9wZW4KKyMgaXQgYXQgYWxsKS4KKyMKKyMgRGVmaW5lIE5PX09QRU5TU0wgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91IGRvIG5vdCBoYXZlIE9wZW5TU0wuCisjCisjIERlZmluZSBVU0VfTElCUENSRSBpZiB5b3UgaGF2ZSBhbmQgd2FudCB0byB1c2UgbGlicGNyZS4gVmFyaW91cworIyBjb21tYW5kcyBzdWNoIGFzIGxvZyBhbmQgZ3JlcCBvZmZlciBydW50aW1lIG9wdGlvbnMgdG8gdXNlCisjIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIGluc3RlYWQgb2Ygc3RhbmRhcmQgb3IgZXh0ZW5kZWQKKyMgUE9TSVggcmVndWxhciBleHByZXNzaW9ucy4KKyMKKyMgVVNFX0xJQlBDUkUgaXMgYSBzeW5vbnltIGZvciBVU0VfTElCUENSRTIsIGRlZmluZSBVU0VfTElCUENSRTEKKyMgaW5zdGVhZCBpZiB5b3UnZCBsaWtlIHRvIHVzZSB0aGUgbGVnYWN5IHZlcnNpb24gMSBvZiB0aGUgUENSRQorIyBsaWJyYXJ5LiBTdXBwb3J0IGZvciB2ZXJzaW9uIDEgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZCBpbiBzb21lIGZ1dHVyZQorIyByZWxlYXNlIG9mIEdpdCwgYXMgdXBzdHJlYW0gaGFzIGFsbCBidXQgYWJhbmRvbmVkIGl0LgorIworIyBXaGVuIHVzaW5nIFVTRV9MSUJQQ1JFMSwgZGVmaW5lIE5PX0xJQlBDUkUxX0pJVCBpZiB5b3Ugd2FudCB0bworIyBkaXNhYmxlIEpJVCBldmVuIGlmIHN1cHBvcnRlZCBieSB5b3VyIGxpYnJhcnkuCisjCisjIERlZmluZSBMSUJQQ1JFRElSPS9mb28vYmFyIGlmIHlvdXIgUENSRSBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlCisjIGluIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4gV2hpY2ggdmVyc2lvbiBvZgorIyBQQ1JFIHRoaXMgcG9pbnRzIHRvIGRldGVybWluZWQgYnkgdGhlIFVTRV9MSUJQQ1JFMSBhbmQgVVNFX0xJQlBDUkUyCisjIHZhcmlhYmxlcy4KKyMKKyMgRGVmaW5lIEhBVkVfQUxMT0NBX0ggaWYgeW91IGhhdmUgd29ya2luZyBhbGxvY2EoMykgZGVmaW5lZCBpbiB0aGF0IGhlYWRlci4KKyMKKyMgRGVmaW5lIE5PX0NVUkwgaWYgeW91IGRvIG5vdCBoYXZlIGxpYmN1cmwgaW5zdGFsbGVkLiAgZ2l0LWh0dHAtZmV0Y2ggYW5kCisjIGdpdC1odHRwLXB1c2ggYXJlIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgdXNlIGh0dHA6Ly8gYW5kIGh0dHBzOi8vCisjIHRyYW5zcG9ydHMgKG5laXRoZXIgc21hcnQgbm9yIGR1bWIpLgorIworIyBEZWZpbmUgQ1VSTERJUj0vZm9vL2JhciBpZiB5b3VyIGN1cmwgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGFyZSBpbgorIyAvZm9vL2Jhci9pbmNsdWRlIGFuZCAvZm9vL2Jhci9saWIgZGlyZWN0b3JpZXMuCisjCisjIERlZmluZSBDVVJMX0NPTkZJRyB0byBjdXJsJ3MgY29uZmlndXJhdGlvbiBwcm9ncmFtIHRoYXQgcHJpbnRzIGluZm9ybWF0aW9uCisjIGFib3V0IHRoZSBsaWJyYXJ5IChlLmcuLCBpdHMgdmVyc2lvbiBudW1iZXIpLiAgVGhlIGRlZmF1bHQgaXMgJ2N1cmwtY29uZmlnJy4KKyMKKyMgRGVmaW5lIENVUkxfTERGTEFHUyB0byBzcGVjaWZ5IGZsYWdzIHRoYXQgeW91IG5lZWQgdG8gbGluayB3aGVuIHVzaW5nIGxpYmN1cmwsCisjIGlmIHlvdSBkbyBub3Qgd2FudCB0byByZWx5IG9uIHRoZSBsaWJyYXJpZXMgcHJvdmlkZWQgYnkgQ1VSTF9DT05GSUcuICBUaGUKKyMgZGVmYXVsdCB2YWx1ZSBpcyBhIHJlc3VsdCBvZiBgY3VybC1jb25maWcgLS1saWJzYC4gIEFuIGV4YW1wbGUgdmFsdWUgZm9yCisjIENVUkxfTERGTEFHUyBpcyBhcyBmb2xsb3dzOgorIworIyAgICAgQ1VSTF9MREZMQUdTPS1sY3VybAorIworIyBEZWZpbmUgTk9fRVhQQVQgaWYgeW91IGRvIG5vdCBoYXZlIGV4cGF0IGluc3RhbGxlZC4gIGdpdC1odHRwLXB1c2ggaXMKKyMgbm90IGJ1aWx0LCBhbmQgeW91IGNhbm5vdCBwdXNoIHVzaW5nIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIHRyYW5zcG9ydHMgKGR1bWIpLgorIworIyBEZWZpbmUgRVhQQVRESVI9L2Zvby9iYXIgaWYgeW91ciBleHBhdCBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlIGluCisjIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4KKyMKKyMgRGVmaW5lIEVYUEFUX05FRURTX1hNTFBBUlNFX0ggaWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gb2YgZXhwYXQgKGUuZy4sCisjIDEuMSBvciAxLjIpIHRoYXQgcHJvdmlkZXMgeG1scGFyc2UuaCBpbnN0ZWFkIG9mIGV4cGF0LmguCisjCisjIERlZmluZSBOT19HRVRURVhUIGlmIHlvdSBkb24ndCB3YW50IEdpdCBvdXRwdXQgdG8gYmUgdHJhbnNsYXRlZC4KKyMgQSB0cmFuc2xhdGVkIEdpdCByZXF1aXJlcyBHTlUgbGliaW50bCBvciBhbm90aGVyIGdldHRleHQgaW1wbGVtZW50YXRpb24sCisjIHBsdXMgbGliaW50bC1wZXJsIGF0IHJ1bnRpbWUuCisjCisjIERlZmluZSBVU0VfR0VUVEVYVF9TQ0hFTUUgYW5kIHNldCBpdCB0byAnZmFsbHRocm91Z2gnLCBpZiB5b3UgZG9uJ3QgdHJ1c3QKKyMgdGhlIGluc3RhbGxlZCBnZXR0ZXh0IHRyYW5zbGF0aW9uIG9mIHRoZSBzaGVsbCBzY3JpcHRzIG91dHB1dC4KKyMKKyMgRGVmaW5lIEhBVkVfTElCQ0hBUlNFVF9IIGlmIHlvdSBoYXZlbid0IHNldCBOT19HRVRURVhUIGFuZCB5b3UgY2FuJ3QKKyMgdHJ1c3QgdGhlIGxhbmdpbmZvLmgncyBubF9sYW5naW5mbyhDT0RFU0VUKSBmdW5jdGlvbiB0byByZXR1cm4gdGhlCisjIGN1cnJlbnQgY2hhcmFjdGVyIHNldC4gR05VIGFuZCBTb2xhcmlzIGhhdmUgYSBubF9sYW5naW5mbyhDT0RFU0VUKSwKKyMgRnJlZUJTRCBjYW4gdXNlIGVpdGhlciwgYnV0IE1pbkdXIGFuZCBzb21lIG90aGVycyBuZWVkIHRvIHVzZQorIyBsaWJjaGFyc2V0LmgncyBsb2NhbGVfY2hhcnNldCgpIGluc3RlYWQuCisjCisjIERlZmluZSBDSEFSU0VUX0xJQiB0byB0aGUgbGlicmFyeSB5b3UgbmVlZCB0byBsaW5rIHdpdGggaW4gb3JkZXIgdG8KKyMgdXNlIGxvY2FsZV9jaGFyc2V0KCkgZnVuY3Rpb24uICBPbiBzb21lIHBsYXRmb3JtcyB0aGlzIG5lZWRzIHRvIHNldCB0bworIyAtbGNoYXJzZXQsIG9uIG90aGVycyB0byAtbGljb252IC4KKyMKKyMgRGVmaW5lIExJQkNfQ09OVEFJTlNfTElCSU5UTCBpZiB5b3VyIGdldHRleHQgaW1wbGVtZW50YXRpb24gZG9lc24ndAorIyBuZWVkIC1saW50bCB3aGVuIGxpbmtpbmcuCisjCisjIERlZmluZSBOT19NU0dGTVRfRVhURU5ERURfT1BUSU9OUyBpZiB5b3VyIGltcGxlbWVudGF0aW9uIG9mIG1zZ2ZtdAorIyBkb2Vzbid0IHN1cHBvcnQgR05VIGV4dGVuc2lvbnMgbGlrZSAtLWNoZWNrIGFuZCAtLXN0YXRpc3RpY3MKKyMKKyMgRGVmaW5lIEhBVkVfUEFUSFNfSCBpZiB5b3UgaGF2ZSBwYXRocy5oIGFuZCB3YW50IHRvIHVzZSB0aGUgZGVmYXVsdCBQQVRICisjIGl0IHNwZWNpZmllcy4KKyMKKyMgRGVmaW5lIE5PX0RfVFlQRV9JTl9ESVJFTlQgaWYgeW91ciBwbGF0Zm9ybSBkZWZpbmVzIERUX1VOS05PV04gYnV0IGxhY2tzCisjIGRfdHlwZSBpbiBzdHJ1Y3QgZGlyZW50IChDeWd3aW4gMS41LCBmaXhlZCBpbiBDeWd3aW4gMS43KS4KKyMKKyMgRGVmaW5lIEhBVkVfU1RSSU5HU19IIGlmIHlvdSBoYXZlIHN0cmluZ3MuaCBhbmQgbmVlZCBpdCBmb3Igc3RyY2FzZWNtcC4KKyMKKyMgRGVmaW5lIE5PX1NUUkNBU0VTVFIgaWYgeW91IGRvbid0IGhhdmUgc3RyY2FzZXN0ci4KKyMKKyMgRGVmaW5lIE5PX01FTU1FTSBpZiB5b3UgZG9uJ3QgaGF2ZSBtZW1tZW0uCisjCisjIERlZmluZSBOT19HRVRQQUdFU0laRSBpZiB5b3UgZG9uJ3QgaGF2ZSBnZXRwYWdlc2l6ZS4KKyMKKyMgRGVmaW5lIE5PX1NUUkxDUFkgaWYgeW91IGRvbid0IGhhdmUgc3RybGNweS4KKyMKKyMgRGVmaW5lIE5PX1NUUlRPVU1BWCBpZiB5b3UgZG9uJ3QgaGF2ZSBib3RoIHN0cnRvaW1heCBhbmQgc3RydG91bWF4IGluIHRoZQorIyBDIGxpYnJhcnkuIElmIHlvdXIgY29tcGlsZXIgYWxzbyBkb2VzIG5vdCBzdXBwb3J0IGxvbmcgbG9uZyBvciBkb2VzIG5vdCBoYXZlCisjIHN0cnRvdWxsLCBkZWZpbmUgTk9fU1RSVE9VTEwuCisjCisjIERlZmluZSBOT19TRVRFTlYgaWYgeW91IGRvbid0IGhhdmUgc2V0ZW52IGluIHRoZSBDIGxpYnJhcnkuCisjCisjIERlZmluZSBOT19VTlNFVEVOViBpZiB5b3UgZG9uJ3QgaGF2ZSB1bnNldGVudiBpbiB0aGUgQyBsaWJyYXJ5LgorIworIyBEZWZpbmUgTk9fTUtEVEVNUCBpZiB5b3UgZG9uJ3QgaGF2ZSBta2R0ZW1wIGluIHRoZSBDIGxpYnJhcnkuCisjCisjIERlZmluZSBNS0RJUl9XT19UUkFJTElOR19TTEFTSCBpZiB5b3VyIG1rZGlyKCkgY2FuJ3QgZGVhbCB3aXRoIHRyYWlsaW5nIHNsYXNoLgorIworIyBEZWZpbmUgTk9fR0VDT1NfSU5fUFdFTlQgaWYgeW91IGRvbid0IGhhdmUgcHdfZ2Vjb3MgaW4gc3RydWN0IHBhc3N3ZAorIyBpbiB0aGUgQyBsaWJyYXJ5LgorIworIyBEZWZpbmUgTk9fTElCR0VOX0ggaWYgeW91IGRvbid0IGhhdmUgbGliZ2VuLmguCisjCisjIERlZmluZSBORUVEU19MSUJHRU4gaWYgeW91ciBsaWJnZW4gbmVlZHMgLWxnZW4gd2hlbiBsaW5raW5nCisjCisjIERlZmluZSBOT19TWVNfU0VMRUNUX0ggaWYgeW91IGRvbid0IGhhdmUgc3lzL3NlbGVjdC5oLgorIworIyBEZWZpbmUgTk9fU1lNTElOS19IRUFEIGlmIHlvdSBuZXZlciB3YW50IC5naXQvSEVBRCB0byBiZSBhIHN5bWJvbGljIGxpbmsuCisjIEVuYWJsZSBpdCBvbiBXaW5kb3dzLiAgQnkgZGVmYXVsdCwgc3ltcmVmcyBhcmUgc3RpbGwgdXNlZC4KKyMKKyMgRGVmaW5lIE5PX1NWTl9URVNUUyBpZiB5b3Ugd2FudCB0byBza2lwIHRpbWUtY29uc3VtaW5nIFNWTiBpbnRlcm9wZXJhYmlsaXR5CisjIHRlc3RzLiAgVGhlc2UgdGVzdHMgdGFrZSB1cCBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB0aGUgdG90YWwgdGVzdCB0aW1lCisjIGJ1dCBhcmUgbm90IG5lZWRlZCB1bmxlc3MgeW91IHBsYW4gdG8gdGFsayB0byBTVk4gcmVwb3MuCisjCisjIERlZmluZSBOT19GSU5LIGlmIHlvdSBhcmUgYnVpbGRpbmcgb24gRGFyd2luL01hYyBPUyBYLCBoYXZlIEZpbmsKKyMgaW5zdGFsbGVkIGluIC9zdywgYnV0IGRvbid0IHdhbnQgR0lUIHRvIGxpbmsgYWdhaW5zdCBhbnkgbGlicmFyaWVzCisjIGluc3RhbGxlZCB0aGVyZS4gIElmIGRlZmluZWQgeW91IG1heSBzcGVjaWZ5IHlvdXIgb3duIChvciBGaW5rJ3MpCisjIGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kIGxpYnJhcnkgZGlyZWN0b3JpZXMgYnkgZGVmaW5pbmcgQ0ZMQUdTCisjIGFuZCBMREZMQUdTIGFwcHJvcHJpYXRlbHkuCisjCisjIERlZmluZSBOT19EQVJXSU5fUE9SVFMgaWYgeW91IGFyZSBidWlsZGluZyBvbiBEYXJ3aW4vTWFjIE9TIFgsCisjIGhhdmUgRGFyd2luUG9ydHMgaW5zdGFsbGVkIGluIC9vcHQvbG9jYWwsIGJ1dCBkb24ndCB3YW50IEdJVCB0bworIyBsaW5rIGFnYWluc3QgYW55IGxpYnJhcmllcyBpbnN0YWxsZWQgdGhlcmUuICBJZiBkZWZpbmVkIHlvdSBtYXkKKyMgc3BlY2lmeSB5b3VyIG93biAob3IgRGFyd2luUG9ydCdzKSBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZAorIyBsaWJyYXJ5IGRpcmVjdG9yaWVzIGJ5IGRlZmluaW5nIENGTEFHUyBhbmQgTERGTEFHUyBhcHByb3ByaWF0ZWx5LgorIworIyBEZWZpbmUgTk9fQVBQTEVfQ09NTU9OX0NSWVBUTyBpZiB5b3UgYXJlIGJ1aWxkaW5nIG9uIERhcndpbi9NYWMgT1MgWAorIyBhbmQgZG8gbm90IHdhbnQgdG8gdXNlIEFwcGxlJ3MgQ29tbW9uQ3J5cHRvIGxpYnJhcnkuICBUaGlzIGFsbG93cyB5b3UKKyMgdG8gcHJvdmlkZSB5b3VyIG93biBPcGVuU1NMIGxpYnJhcnksIGZvciBleGFtcGxlIGZyb20gTWFjUG9ydHMuCisjCisjIERlZmluZSBCTEtfU0hBMSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBtYWtlIHVzZSBvZiB0aGUgYnVuZGxlZAorIyBvcHRpbWl6ZWQgQyBTSEExIHJvdXRpbmUuCisjCisjIERlZmluZSBQUENfU0hBMSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIHJ1bm5pbmcgbWFrZSB0byBtYWtlIHVzZSBvZgorIyBhIGJ1bmRsZWQgU0hBMSByb3V0aW5lIG9wdGltaXplZCBmb3IgUG93ZXJQQy4KKyMKKyMgRGVmaW5lIERDX1NIQTEgdG8gdW5jb25kaXRpb25hbGx5IGVuYWJsZSB0aGUgY29sbGlzaW9uLWRldGVjdGluZyBzaGExCisjIGFsZ29yaXRobS4gVGhpcyBpcyBzbG93ZXIsIGJ1dCBtYXkgZGV0ZWN0IGF0dGVtcHRlZCBjb2xsaXNpb24gYXR0YWNrcy4KKyMgVGFrZXMgcHJpb3JpdHkgb3ZlciBvdGhlciAqX1NIQTEga25vYnMuCisjCisjIERlZmluZSBEQ19TSEExX0VYVEVSTkFMIGluIGFkZGl0aW9uIHRvIERDX1NIQTEgaWYgeW91IHdhbnQgdG8gYnVpbGQgLyBsaW5rCisjIGdpdCB3aXRoIHRoZSBleHRlcm5hbCBTSEExIGNvbGxpc2lvbi1kZXRlY3QgbGlicmFyeS4KKyMgV2l0aG91dCB0aGlzIG9wdGlvbiwgaS5lLiB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBidWlsZCBnaXQgd2l0aCBpdHMKKyMgb3duIGJ1aWx0LWluIGNvZGUgKG9yIHN1Ym1vZHVsZSkuCisjCisjIERlZmluZSBEQ19TSEExX1NVQk1PRFVMRSBpbiBhZGRpdGlvbiB0byBEQ19TSEExIHRvIHVzZSB0aGUKKyMgc2hhMWNvbGxpc2lvbmRldGVjdGlvbiBzaGlwcGVkIGFzIGEgc3VibW9kdWxlIGluc3RlYWQgb2YgdGhlCisjIG5vbi1zdWJtb2R1bGUgY29weSBpbiBzaGExZGMvLiBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBvcHRpb24gdXNlZAorIyBieSB0aGUgZ2l0IHByb2plY3QgdG8gbWlncmF0ZSB0byB1c2luZyBzaGExY29sbGlzaW9uZGV0ZWN0aW9uIGFzIGEKKyMgc3VibW9kdWxlLgorIworIyBEZWZpbmUgT1BFTlNTTF9TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gcnVubmluZyBtYWtlIHRvIGxpbmsKKyMgd2l0aCB0aGUgU0hBMSByb3V0aW5lIGZyb20gb3BlbnNzbCBsaWJyYXJ5LgorIworIyBEZWZpbmUgU0hBMV9NQVhfQkxPQ0tfU0laRSB0byBsaW1pdCB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCB3aWxsIGJlIGhhc2hlZAorIyBpbiBvbmUgY2FsbCB0byB0aGUgcGxhdGZvcm0ncyBTSEExX1VwZGF0ZSgpLiBlLmcuIEFQUExFX0NPTU1PTl9DUllQVE8KKyMgd2FudHMgJ1NIQTFfTUFYX0JMT0NLX1NJWkU9MTAyNEwqMTAyNEwqMTAyNEwnIGRlZmluZWQuCisjCisjIERlZmluZSBCTEtfU0hBMjU2IHRvIHVzZSB0aGUgYnVpbHQtaW4gU0hBLTI1NiByb3V0aW5lcy4KKyMKKyMgRGVmaW5lIEdDUllQVF9TSEEyNTYgdG8gdXNlIHRoZSBTSEEtMjU2IHJvdXRpbmVzIGluIGxpYmdjcnlwdC4KKyMKKyMgRGVmaW5lIE9QRU5TU0xfU0hBMjU2IHRvIHVzZSB0aGUgU0hBLTI1NiByb3V0aW5lcyBpbiBPcGVuU1NMLgorIworIyBEZWZpbmUgTkVFRFNfQ1JZUFRPX1dJVEhfU1NMIGlmIHlvdSBuZWVkIC1sY3J5cHRvIHdoZW4gdXNpbmcgLWxzc2wgKERhcndpbikuCisjCisjIERlZmluZSBORUVEU19TU0xfV0lUSF9DUllQVE8gaWYgeW91IG5lZWQgLWxzc2wgd2hlbiB1c2luZyAtbGNyeXB0byAoRGFyd2luKS4KKyMKKyMgRGVmaW5lIE5FRURTX0xJQklDT05WIGlmIGxpbmtpbmcgd2l0aCBsaWJjIGlzIG5vdCBlbm91Z2ggKERhcndpbikuCisjCisjIERlZmluZSBORUVEU19MSUJJTlRMX0JFRk9SRV9MSUJJQ09OViBpZiB5b3UgbmVlZCBsaWJpbnRsIGJlZm9yZSBsaWJpY29udi4KKyMKKyMgRGVmaW5lIE5PX0lOVFBUUl9UIGlmIHlvdSBkb24ndCBoYXZlIGludHB0cl90IG9yIHVpbnRwdHJfdC4KKyMKKyMgRGVmaW5lIE5PX1VJTlRNQVhfVCBpZiB5b3UgZG9uJ3QgaGF2ZSB1aW50bWF4X3QuCisjCisjIERlZmluZSBORUVEU19TT0NLRVQgaWYgbGlua2luZyB3aXRoIGxpYmMgaXMgbm90IGVub3VnaCAoU3VuT1MsCisjIFBhdHJpY2sgTWF1cml0eikuCisjCisjIERlZmluZSBORUVEU19SRVNPTFYgaWYgbGlua2luZyB3aXRoIC1sbnNsIGFuZC9vciAtbHNvY2tldCBpcyBub3QgZW5vdWdoLgorIyBOb3RhYmx5IG9uIFNvbGFyaXMgaHN0cmVycm9yIHJlc2lkZXMgaW4gbGlicmVzb2x2IGFuZCBvbiBTb2xhcmlzIDcKKyMgaW5ldF9udG9wIGFuZCBpbmV0X3B0b24gYWRkaXRpb25hbGx5IHJlc2lkZSB0aGVyZS4KKyMKKyMgRGVmaW5lIE5PX01NQVAgaWYgeW91IHdhbnQgdG8gYXZvaWQgbW1hcC4KKyMKKyMgRGVmaW5lIE1NQVBfUFJFVkVOVFNfREVMRVRFIGlmIGEgZmlsZSB0aGF0IGlzIGN1cnJlbnRseSBtbWFwcGVkIGNhbm5vdCBiZQorIyBkZWxldGVkIG9yIGNhbm5vdCBiZSByZXBsYWNlZCB1c2luZyByZW5hbWUoKS4KKyMKKyMgRGVmaW5lIE5PX1BPTExfSCBpZiB5b3UgZG9uJ3QgaGF2ZSBwb2xsLmguCisjCisjIERlZmluZSBOT19TWVNfUE9MTF9IIGlmIHlvdSBkb24ndCBoYXZlIHN5cy9wb2xsLmguCisjCisjIERlZmluZSBOT19QT0xMIGlmIHlvdSBkbyBub3QgaGF2ZSBvciBkb24ndCB3YW50IHRvIHVzZSBwb2xsKCkuCisjIFRoaXMgYWxzbyBpbXBsaWVzIE5PX1BPTExfSCBhbmQgTk9fU1lTX1BPTExfSC4KKyMKKyMgRGVmaW5lIE5FRURTX1NZU19QQVJBTV9IIGlmIHlvdSBuZWVkIHRvIGluY2x1ZGUgc3lzL3BhcmFtLmggdG8gY29tcGlsZSwKKyMgKlBMRUFTRSogUkVQT1JUIHRvIGdpdEB2Z2VyLmtlcm5lbC5vcmcgaWYgeW91ciBwbGF0Zm9ybSBuZWVkcyB0aGlzOworIyB3ZSB3YW50IHRvIGtub3cgbW9yZSBhYm91dCB0aGUgaXNzdWUuCisjCisjIERlZmluZSBOT19QVEhSRUFEUyBpZiB5b3UgZG8gbm90IGhhdmUgb3IgZG8gbm90IHdhbnQgdG8gdXNlIFB0aHJlYWRzLgorIworIyBEZWZpbmUgTk9fUFJFQUQgaWYgeW91IGhhdmUgYSBwcm9ibGVtIHdpdGggcHJlYWQoKSBzeXN0ZW0gY2FsbCAoZS5nLgorIyBjeWd3aW4xLmRsbCBiZWZvcmUgdjEuNS4yMikuCisjCisjIERlZmluZSBOT19TRVRJVElNRVIgaWYgeW91IGRvbid0IGhhdmUgc2V0aXRpbWVyKCkKKyMKKyMgRGVmaW5lIE5PX1NUUlVDVF9JVElNRVJWQUwgaWYgeW91IGRvbid0IGhhdmUgc3RydWN0IGl0aW1lcnZhbAorIyBUaGlzIGFsc28gaW1wbGllcyBOT19TRVRJVElNRVIKKyMKKyMgRGVmaW5lIE5PX0ZBU1RfV09SS0lOR19ESVJFQ1RPUlkgaWYgYWNjZXNzaW5nIG9iamVjdHMgaW4gcGFjayBmaWxlcyBpcworIyBnZW5lcmFsbHkgZmFzdGVyIG9uIHlvdXIgcGxhdGZvcm0gdGhhbiBhY2Nlc3NpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorIworIyBEZWZpbmUgTk9fVFJVU1RBQkxFX0ZJTEVNT0RFIGlmIHlvdXIgZmlsZXN5c3RlbSBtYXkgY2xhaW0gdG8gc3VwcG9ydAorIyB0aGUgZXhlY3V0YWJsZSBtb2RlIGJpdCwgYnV0IGRvZXNuJ3QgcmVhbGx5IGRvIHNvLgorIworIyBEZWZpbmUgTkVFRFNfTU9ERV9UUkFOU0xBVElPTiBpZiB5b3VyIE9TIHN0cmF5cyBmcm9tIHRoZSB0eXBpY2FsIGZpbGUgdHlwZQorIyBiaXRzIGluIG1vZGUgdmFsdWVzIChlLmcuIHovT1MgZGVmaW5lcyBJX1NGTVQgdG8gMHhGRjAwMDAwMCBhcyBvcHBvc2VkIHRvIHRoZQorIyB1c3VhbCAweEYwMDApLgorIworIyBEZWZpbmUgTk9fSVBWNiBpZiB5b3UgbGFjayBJUHY2IHN1cHBvcnQgYW5kIGdldGFkZHJpbmZvKCkuCisjCisjIERlZmluZSBOT19VTklYX1NPQ0tFVFMgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3Qgb2ZmZXIgdW5peCBzb2NrZXRzLgorIworIyBEZWZpbmUgTk9fU09DS0FERFJfU1RPUkFHRSBpZiB5b3VyIHBsYXRmb3JtIGRvZXMgbm90IGhhdmUgc3RydWN0CisjIHNvY2thZGRyX3N0b3JhZ2UuCisjCisjIERlZmluZSBOT19JQ09OViBpZiB5b3VyIGxpYmMgZG9lcyBub3QgcHJvcGVybHkgc3VwcG9ydCBpY29udi4KKyMKKyMgRGVmaW5lIE9MRF9JQ09OViBpZiB5b3VyIGxpYnJhcnkgaGFzIGFuIG9sZCBpY29udigpLCB3aGVyZSB0aGUgc2Vjb25kCisjIChpbnB1dCBidWZmZXIgcG9pbnRlcikgcGFyYW1ldGVyIGlzIGRlY2xhcmVkIHdpdGggdHlwZSAoY29uc3QgY2hhciAqKikuCisjCisjIERlZmluZSBJQ09OVl9PTUlUU19CT00gaWYgeW91ciBpY29udiBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB3cml0ZSBhCisjIGJ5dGUtb3JkZXIgbWFyayAoQk9NKSB3aGVuIHdyaXRpbmcgVVRGLTE2IG9yIFVURi0zMiBhbmQgYWx3YXlzIHdyaXRlcyBpbgorIyBiaWctZW5kaWFuIGZvcm1hdC4KKyMKKyMgRGVmaW5lIE5PX0RFRkxBVEVfQk9VTkQgaWYgeW91ciB6bGliIGRvZXMgbm90IGhhdmUgZGVmbGF0ZUJvdW5kLgorIworIyBEZWZpbmUgTk9fTk9SRVRVUk4gaWYgdXNpbmcgYnVnZ3kgdmVyc2lvbnMgb2YgZ2NjIDQuNisgYW5kIHByb2ZpbGUgZmVlZGJhY2ssCisjIGFzIHRoZSBjb21waWxlciBjYW4gY3Jhc2ggKGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDkyOTkpCisjCisjIERlZmluZSBVU0VfTlNFQyBiZWxvdyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzCisjIGFuZCBjdGltZXMuIE5vdGUgdGhhdCB5b3UgbmVlZCByZWNlbnQgZ2xpYmMgKGF0IGxlYXN0IDIuMi40KSBmb3IgdGhpcy4gT24KKyMgTGludXgsIGtlcm5lbCAyLjYuMTEgb3IgbmV3ZXIgaXMgcmVxdWlyZWQgZm9yIHJlbGlhYmxlIHN1Yi1zZWNvbmQgZmlsZSB0aW1lcworIyBvbiBmaWxlIHN5c3RlbXMgd2l0aCBleGFjdGx5IDEgbnMgb3IgMSBzIHJlc29sdXRpb24uIElmIHlvdSBpbnRlbmQgdG8gdXNlIEdpdAorIyBvbiBvdGhlciBmaWxlIHN5c3RlbXMgKGUuZy4gQ0VQSCwgQ0lGUywgTlRGUywgVURGKSwgZG9uJ3QgZW5hYmxlIFVTRV9OU0VDLiBTZWUKKyMgRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmFjeS1naXQudHh0IGZvciBkZXRhaWxzLgorIworIyBEZWZpbmUgVVNFX1NUX1RJTUVTUEVDIGlmIHlvdXIgInN0cnVjdCBzdGF0IiB1c2VzICJzdF9jdGltZXNwZWMiIGluc3RlYWQgb2YKKyMgInN0X2N0aW0iCisjCisjIERlZmluZSBOT19OU0VDIGlmIHlvdXIgInN0cnVjdCBzdGF0IiBkb2VzIG5vdCBoYXZlICJzdF9jdGltLnR2X25zZWMiCisjIGF2YWlsYWJsZS4gIFRoaXMgYXV0b21hdGljYWxseSB0dXJucyBVU0VfTlNFQyBvZmYuCisjCisjIERlZmluZSBVU0VfU1RERVYgYmVsb3cgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGV2aWNlCisjIGNoYW5nZSBiZWluZyBjb25zaWRlcmVkIGFuIGlub2RlIGNoYW5nZSBmcm9tIHRoZSB1cGRhdGUtaW5kZXggcGVyc3BlY3RpdmUuCisjCisjIERlZmluZSBOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQgaWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBoYXZlIHN0X2Jsb2NrcworIyBmaWVsZCB0aGF0IGNvdW50cyB0aGUgb24tZGlzayBmb290cHJpbnQgaW4gNTEyLWJ5dGUgYmxvY2tzLgorIworIyBEZWZpbmUgR05VX1JPRkYgaWYgeW91ciB0YXJnZXQgc3lzdGVtIHVzZXMgR05VIGdyb2ZmLiAgVGhpcyBmb3JjZXMKKyMgYXBvc3Ryb3BoZXMgdG8gYmUgQVNDSUkgc28gdGhhdCBjdXQmcGFzdGluZyBleGFtcGxlcyB0byB0aGUgc2hlbGwKKyMgd2lsbCB3b3JrLgorIworIyBEZWZpbmUgVVNFX0FTQ0lJRE9DVE9SIHRvIHVzZSBBc2NpaWRvY3RvciBpbnN0ZWFkIG9mIEFzY2lpRG9jIHRvIGJ1aWxkIHRoZQorIyBkb2N1bWVudGF0aW9uLgorIworIyBEZWZpbmUgQVNDSUlET0NUT1JfRVhURU5TSU9OU19MQUIgdG8gcG9pbnQgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBBc2NpaWRvY3RvcgorIyBFeHRlbnNpb25zIExhYiBpZiB5b3UgaGF2ZSBpdCBhdmFpbGFibGUuCisjCisjIERlZmluZSBQRVJMX1BBVEggdG8gdGhlIHBhdGggb2YgeW91ciBQZXJsIGJpbmFyeSAodXN1YWxseSAvdXNyL2Jpbi9wZXJsKS4KKyMKKyMgRGVmaW5lIE5PX1BFUkwgaWYgeW91IGRvIG5vdCB3YW50IFBlcmwgc2NyaXB0cyBvciBsaWJyYXJpZXMgYXQgYWxsLgorIworIyBEZWZpbmUgTk9fUEVSTF9DUEFOX0ZBTExCQUNLUyBpZiB5b3UgZG8gbm90IHdhbnQgdG8gaW5zdGFsbCBidW5kbGVkCisjIGNvcGllcyBvZiBDUEFOIG1vZHVsZXMgdGhhdCBzZXJ2ZSBhcyBhIGZhbGxiYWNrIGluIGNhc2UgdGhlIG1vZHVsZXMKKyMgYXJlIG5vdCBhdmFpbGFibGUgb24gdGhlIHN5c3RlbS4gVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgZm9yCisjIGRpc3RyaWJ1dGlvbnMgdGhhdCB3YW50IHRvIHVzZSB0aGVpciBwYWNrYWdlZCB2ZXJzaW9ucyBvZiBQZXJsCisjIG1vZHVsZXMsIGluc3RlYWQgb2YgdGhlIGZhbGxiYWNrcyBzaGlwcGVkIHdpdGggR2l0LgorIworIyBEZWZpbmUgUFlUSE9OX1BBVEggdG8gdGhlIHBhdGggb2YgeW91ciBQeXRob24gYmluYXJ5IChvZnRlbiAvdXNyL2Jpbi9weXRob24KKyMgYnV0IC91c3IvYmluL3B5dGhvbjIuNyBvbiBzb21lIHBsYXRmb3JtcykuCisjCisjIERlZmluZSBOT19QWVRIT04gaWYgeW91IGRvIG5vdCB3YW50IFB5dGhvbiBzY3JpcHRzIG9yIGxpYnJhcmllcyBhdCBhbGwuCisjCisjIERlZmluZSBOT19UQ0xUSyBpZiB5b3UgZG8gbm90IHdhbnQgVGNsL1RrIEdVSS4KKyMKKyMgRGVmaW5lIFNBTkVfVEVYVF9HUkVQIHRvICItYSIgaWYgeW91IHVzZSByZWNlbnQgdmVyc2lvbnMgb2YgR05VIGdyZXAKKyMgYW5kIGVncmVwIHRoYXQgYXJlIHBpY2tpZXIgd2hlbiB0aGVpciBpbnB1dCBjb250YWlucyBub24tQVNDSUkgZGF0YS4KKyMKKyMgVGhlIFRDTF9QQVRIIHZhcmlhYmxlIGdvdmVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBUY2wgaW50ZXJwcmV0ZXIKKyMgdXNlZCB0byBvcHRpbWl6ZSBnaXQtZ3VpIGZvciB5b3VyIHN5c3RlbS4gIE9ubHkgdXNlZCBpZiBOT19UQ0xUSworIyBpcyBub3Qgc2V0LiAgRGVmYXVsdHMgdG8gdGhlIGJhcmUgJ3RjbHNoJy4KKyMKKyMgVGhlIFRDTFRLX1BBVEggdmFyaWFibGUgZ292ZXJucyB0aGUgbG9jYXRpb24gb2YgdGhlIFRjbC9UayBpbnRlcnByZXRlci4KKyMgSWYgbm90IHNldCBpdCBkZWZhdWx0cyB0byB0aGUgYmFyZSAnd2lzaCcuIElmIGl0IGlzIHNldCB0byB0aGUgZW1wdHkKKyMgc3RyaW5nIHRoZW4gTk9fVENMVEsgd2lsbCBiZSBmb3JjZWQgKHRoaXMgaXMgdXNlZCBieSBjb25maWd1cmUgc2NyaXB0KS4KKyMKKyMgRGVmaW5lIElOVEVSTkFMX1FTT1JUIHRvIHVzZSBHaXQncyBpbXBsZW1lbnRhdGlvbiBvZiBxc29ydCgpLCB3aGljaAorIyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgbWVyZ2Ugc29ydCB1c2VkIGluIGdsaWJjLiBUaGlzIGlzCisjIHJlY29tbWVuZGVkIGlmIEdpdCB0cmlnZ2VycyBPKG5eMikgYmVoYXZpb3IgaW4geW91ciBwbGF0Zm9ybSdzIHFzb3J0KCkuCisjCisjIERlZmluZSBIQVZFX0lTT19RU09SVF9TIGlmIHlvdXIgcGxhdGZvcm0gcHJvdmlkZXMgYSBxc29ydF9zKCkgdGhhdCdzCisjIGNvbXBhdGlibGUgd2l0aCB0aGUgb25lIGRlc2NyaWJlZCBpbiBDMTEgQW5uZXggSy4KKyMKKyMgRGVmaW5lIFVOUkVMSUFCTEVfRlNUQVQgaWYgeW91ciBzeXN0ZW0ncyBmc3RhdCBkb2VzIG5vdCByZXR1cm4gdGhlIHNhbWUKKyMgaW5mb3JtYXRpb24gb24gYSBub3QgeWV0IGNsb3NlZCBmaWxlIHRoYXQgbHN0YXQgd291bGQgcmV0dXJuIGZvciB0aGUgc2FtZQorIyBmaWxlIGFmdGVyIGl0IHdhcyBjbG9zZWQuCisjCisjIERlZmluZSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19SRU5BTUVTIGlmIHlvdXIgb3BlcmF0aW5nIHN5c3RlbXMgaGFzIHByb2JsZW1zCisjIHdoZW4gaGFyZGxpbmtpbmcgYSBmaWxlIHRvIGFub3RoZXIgbmFtZSBhbmQgdW5saW5raW5nIHRoZSBvcmlnaW5hbCBmaWxlIHJpZ2h0CisjIGF3YXkgKHNvbWUgTlRGUyBkcml2ZXJzIHNlZW0gdG8gemVybyB0aGUgY29udGVudHMgaW4gdGhhdCBzY2VuYXJpbykuCisjCisjIERlZmluZSBJTlNUQUxMX1NZTUxJTktTIGlmIHlvdSBwcmVmZXIgdG8gaGF2ZSBldmVyeXRoaW5nIHRoYXQgY2FuIGJlCisjIHN5bWxpbmtlZCBiZXR3ZWVuIGJpbi8gYW5kIGxpYmV4ZWMvIHRvIHVzZSByZWxhdGl2ZSBzeW1saW5rcyBiZXR3ZWVuCisjIHRoZSB0d28uIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyBOT19DUk9TU19ESVJFQ1RPUllfSEFSRExJTktTIGFuZAorIyBOT19JTlNUQUxMX0hBUkRMSU5LUyB3aGljaCB3aWxsIGFsc28gdXNlIHN5bWxpbmtpbmcgYnkgaW5kaXJlY3Rpb24KKyMgd2l0aGluIHRoZSBzYW1lIGRpcmVjdG9yeSBpbiBzb21lIGNhc2VzLCBJTlNUQUxMX1NZTUxJTktTIHdpbGwKKyMgYWx3YXlzIHN5bWxpbmsgdG8gdGhlIGZpbmFsIHRhcmdldCBkaXJlY3RseS4KKyMKKyMgRGVmaW5lIE5PX0NST1NTX0RJUkVDVE9SWV9IQVJETElOS1MgaWYgeW91IHBsYW4gdG8gZGlzdHJpYnV0ZSB0aGUgaW5zdGFsbGVkCisjIHByb2dyYW1zIGFzIGEgdGFyLCB3aGVyZSBiaW4vIGFuZCBsaWJleGVjLyBtaWdodCBiZSBvbiBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zLgorIworIyBEZWZpbmUgTk9fSU5TVEFMTF9IQVJETElOS1MgaWYgeW91IHByZWZlciB0byB1c2UgZWl0aGVyIHN5bWJvbGljIGxpbmtzIG9yCisjIGNvcGllcyB0byBpbnN0YWxsIGJ1aWx0LWluIGdpdCBjb21tYW5kcyBlLmcuIGdpdC1jYXQtZmlsZS4KKyMKKyMgRGVmaW5lIFVTRV9ORURfQUxMT0NBVE9SIGlmIHlvdSB3YW50IHRvIHJlcGxhY2UgdGhlIHBsYXRmb3JtcyBkZWZhdWx0CisjIG1lbW9yeSBhbGxvY2F0b3JzIHdpdGggdGhlIG5lZG1hbGxvYyBhbGxvY2F0b3Igd3JpdHRlbiBieSBOaWFsbCBEb3VnbGFzLgorIworIyBEZWZpbmUgT1ZFUlJJREVfU1RSRFVQIHRvIG92ZXJyaWRlIHRoZSBsaWJjIHZlcnNpb24gb2Ygc3RyZHVwKDMpLgorIyBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIHVzaW5nIGEgY3VzdG9tIGFsbG9jYXRvciBpbiBvcmRlciB0byBhdm9pZAorIyBjcmFzaGVzIGR1ZSB0byBhbGxvY2F0aW9uIGFuZCBmcmVlIHdvcmtpbmcgb24gZGlmZmVyZW50ICdoZWFwcycuCisjIEl0J3MgZGVmaW5lZCBhdXRvbWF0aWNhbGx5IGlmIFVTRV9ORURfQUxMT0NBVE9SIGlzIHNldC4KKyMKKyMgRGVmaW5lIE5PX1JFR0VYIGlmIHlvdXIgQyBsaWJyYXJ5IGxhY2tzIHJlZ2V4IHN1cHBvcnQgd2l0aCBSRUdfU1RBUlRFTkQKKyMgZmVhdHVyZS4KKyMKKyMgRGVmaW5lIEhBVkVfREVWX1RUWSBpZiB5b3VyIHN5c3RlbSBjYW4gb3BlbiAvZGV2L3R0eSB0byBpbnRlcmFjdCB3aXRoIHRoZQorIyB1c2VyLgorIworIyBEZWZpbmUgSlNNSU4gdG8gcG9pbnQgdG8gSmF2YVNjcmlwdCBtaW5pZmllciB0aGF0IGZ1bmN0aW9ucyBhcworIyBhIGZpbHRlciB0byBoYXZlIGdpdHdlYi5qcyBtaW5pZmllZC4KKyMKKyMgRGVmaW5lIENTU01JTiB0byBwb2ludCB0byBhIENTUyBtaW5pZmllciBpbiBvcmRlciB0byBnZW5lcmF0ZSBhIG1pbmlmaWVkCisjIHZlcnNpb24gb2YgZ2l0d2ViLmNzcworIworIyBEZWZpbmUgREVGQVVMVF9QQUdFUiB0byBhIHNlbnNpYmxlIHBhZ2VyIGNvbW1hbmQgKGRlZmF1bHRzIHRvICJsZXNzIikgaWYKKyMgeW91IHdhbnQgdG8gdXNlIHNvbWV0aGluZyBkaWZmZXJlbnQuICBUaGUgdmFsdWUgd2lsbCBiZSBpbnRlcnByZXRlZCBieSB0aGUKKyMgc2hlbGwgYXQgcnVudGltZSB3aGVuIGl0IGlzIHVzZWQuCisjCisjIERlZmluZSBERUZBVUxUX0VESVRPUiB0byBhIHNlbnNpYmxlIGVkaXRvciBjb21tYW5kIChkZWZhdWx0cyB0byAidmkiKSBpZiB5b3UKKyMgd2FudCB0byB1c2Ugc29tZXRoaW5nIGRpZmZlcmVudC4gIFRoZSB2YWx1ZSB3aWxsIGJlIGludGVycHJldGVkIGJ5IHRoZSBzaGVsbAorIyBpZiBuZWNlc3Nhcnkgd2hlbiBpdCBpcyB1c2VkLiAgRXhhbXBsZXM6CisjCisjICAgREVGQVVMVF9FRElUT1I9J34vYmluL3ZpJywKKyMgICBERUZBVUxUX0VESVRPUj0nJEdJVF9GQUxMQkFDS19FRElUT1InLAorIyAgIERFRkFVTFRfRURJVE9SPSciQzpcUHJvZ3JhbSBGaWxlc1xWaW1cZ3ZpbS5leGUiIC0tbm9mb3JrJworIworIyBEZWZpbmUgQ09NUFVURV9IRUFERVJfREVQRU5ERU5DSUVTIHRvICJ5ZXMiIGlmIHlvdSB3YW50IGRlcGVuZGVuY2llcyBvbgorIyBoZWFkZXIgZmlsZXMgdG8gYmUgYXV0b21hdGljYWxseSBjb21wdXRlZCwgdG8gYXZvaWQgcmVidWlsZGluZyBvYmplY3RzIHdoZW4KKyMgYW4gdW5yZWxhdGVkIGhlYWRlciBmaWxlIGNoYW5nZXMuICBEZWZpbmUgaXQgdG8gIm5vIiB0byB1c2UgdGhlIGhhcmQtY29kZWQKKyMgZGVwZW5kZW5jeSBydWxlcy4gIFRoZSBkZWZhdWx0IGlzICJhdXRvIiwgd2hpY2ggbWVhbnMgdG8gdXNlIGNvbXB1dGVkIGhlYWRlcgorIyBkZXBlbmRlbmNpZXMgaWYgeW91ciBjb21waWxlciBpcyBkZXRlY3RlZCB0byBzdXBwb3J0IGl0LgorIworIyBEZWZpbmUgTkFUSVZFX0NSTEYgaWYgeW91ciBwbGF0Zm9ybSB1c2VzIENSTEYgZm9yIGxpbmUgZW5kaW5ncy4KKyMKKyMgRGVmaW5lIEdJVF9VU0VSX0FHRU5UIGlmIHlvdSB3YW50IHRvIGNoYW5nZSBob3cgZ2l0IGlkZW50aWZpZXMgaXRzZWxmIGR1cmluZworIyBuZXR3b3JrIGludGVyYWN0aW9ucy4gIFRoZSBkZWZhdWx0IGlzICJnaXQvJChHSVRfVkVSU0lPTikiLgorIworIyBEZWZpbmUgREVGQVVMVF9IRUxQX0ZPUk1BVCB0byAibWFuIiwgImluZm8iIG9yICJodG1sIgorIyAoZGVmYXVsdHMgdG8gIm1hbiIpIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBkaWZmZXJlbnQgZGVmYXVsdCB3aGVuCisjICJnaXQgaGVscCIgaXMgY2FsbGVkIHdpdGhvdXQgYSBwYXJhbWV0ZXIgc3BlY2lmeWluZyB0aGUgZm9ybWF0LgorIworIyBEZWZpbmUgR0lUX1RFU1RfSU5ERVhfVkVSU0lPTiB0byAyLCAzIG9yIDQgdG8gcnVuIHRoZSB0ZXN0IHN1aXRlCisjIHdpdGggYSBkaWZmZXJlbnQgaW5kZXhmaWxlIGZvcm1hdCB2ZXJzaW9uLiAgSWYgaXQgaXNuJ3Qgc2V0IHRoZSBpbmRleAorIyBmaWxlIGZvcm1hdCB1c2VkIGlzIGluZGV4LXZbMjNdLgorIworIyBEZWZpbmUgSEFWRV9DTE9DS19HRVRUSU1FIGlmIHlvdXIgcGxhdGZvcm0gaGFzIGNsb2NrX2dldHRpbWUuCisjCisjIERlZmluZSBIQVZFX0NMT0NLX01PTk9UT05JQyBpZiB5b3VyIHBsYXRmb3JtIGhhcyBDTE9DS19NT05PVE9OSUMuCisjCisjIERlZmluZSBORUVEU19MSUJSVCBpZiB5b3VyIHBsYXRmb3JtIHJlcXVpcmVzIGxpbmtpbmcgd2l0aCBsaWJydCAoZ2xpYmMgdmVyc2lvbgorIyBiZWZvcmUgMi4xNykgZm9yIGNsb2NrX2dldHRpbWUgYW5kIENMT0NLX01PTk9UT05JQy4KKyMKKyMgRGVmaW5lIFVTRV9QQVJFTlNfQVJPVU5EX0dFVFRFWFRfTiB0byAieWVzIiBpZiB5b3VyIGNvbXBpbGVyIGhhcHBpbHkKKyMgY29tcGlsZXMgdGhlIGZvbGxvd2luZyBpbml0aWFsaXphdGlvbjoKKyMKKyMgICBzdGF0aWMgY29uc3QgY2hhciBzW10gPSAoIkZPTyIpOworIworIyBhbmQgZGVmaW5lIGl0IHRvICJubyIgaWYgeW91IG5lZWQgdG8gcmVtb3ZlIHRoZSBwYXJlbnRoZXNlcyAoKSBhcm91bmQgdGhlCisjIGNvbnN0YW50LiAgVGhlIGRlZmF1bHQgaXMgImF1dG8iLCB3aGljaCBtZWFucyB0byB1c2UgcGFyZW50aGVzZXMgaWYgeW91cgorIyBjb21waWxlciBpcyBkZXRlY3RlZCB0byBzdXBwb3J0IGl0LgorIworIyBEZWZpbmUgSEFWRV9CU0RfU1lTQ1RMIGlmIHlvdXIgcGxhdGZvcm0gaGFzIGEgQlNELWNvbXBhdGlibGUgc3lzY3RsIGZ1bmN0aW9uLgorIworIyBEZWZpbmUgSEFWRV9HRVRERUxJTSBpZiB5b3VyIHN5c3RlbSBoYXMgdGhlIGdldGRlbGltKCkgZnVuY3Rpb24uCisjCisjIERlZmluZSBGSUxFTk9fSVNfQV9NQUNSTyBpZiBmaWxlbm8oKSBpcyBhIG1hY3JvLCBub3QgYSByZWFsIGZ1bmN0aW9uLgorIworIyBEZWZpbmUgTkVFRF9BQ0NFU1NfUk9PVF9IQU5ETEVSIGlmIGFjY2VzcygpIHVuZGVyIHJvb3QgbWF5IHN1Y2Nlc3MgZm9yIFhfT0sKKyMgZXZlbiBpZiBleGVjdXRpb24gcGVybWlzc2lvbiBpc24ndCBncmFudGVkIGZvciBhbnkgdXNlci4KKyMKKyMgRGVmaW5lIFBBR0VSX0VOViB0byBhIFNQIHNlcGFyYXRlZCBWQVI9VkFMIHBhaXJzIHRvIGRlZmluZQorIyBkZWZhdWx0IGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBiZSBwYXNzZWQgd2hlbiBhIHBhZ2VyIGlzIHNwYXduZWQsIGUuZy4KKyMKKyMgICAgUEFHRVJfRU5WID0gTEVTUz1GUlggTFY9LWMKKyMKKyMgdG8gc2F5ICJleHBvcnQgTEVTUz1GUlggKGFuZCBMVj0tYykgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisjIExFU1MgKGFuZCBMVikgaXMgbm90IHNldCwgcmVzcGVjdGl2ZWx5Ii4KKyMKKyMgRGVmaW5lIFRFU1RfU0hFTExfUEFUSCBpZiB5b3Ugd2FudCB0byB1c2UgYSBzaGVsbCBiZXNpZGVzIFNIRUxMX1BBVEggZm9yCisjIHJ1bm5pbmcgdGhlIHRlc3Qgc2NyaXB0cyAoZS5nLiwgYmFzaCBoYXMgYmV0dGVyIHN1cHBvcnQgZm9yICJzZXQgLXgiCisjIHRyYWNpbmcpLgorIworIyBXaGVuIGNyb3NzLWNvbXBpbGluZywgZGVmaW5lIEhPU1RfQ1BVIGFzIHRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUgQ1BVIG9uCisjIHdoaWNoIHRoZSBidWlsdCBHaXQgd2lsbCBydW4gKGZvciBpbnN0YW5jZSAieDg2XzY0IikuCisjCisjIERlZmluZSBSVU5USU1FX1BSRUZJWCB0byBjb25maWd1cmUgR2l0IHRvIHJlc29sdmUgaXRzIGFuY2lsbGFyeSB0b29saW5nIGFuZAorIyBzdXBwb3J0IGZpbGVzIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgcnVudGltZSBiaW5hcnksIHJhdGhlciB0aGFuCisjIGhhcmQtY29kaW5nIHRoZW0gaW50byB0aGUgYmluYXJ5LiBHaXQgaW5zdGFsbGF0aW9ucyBidWlsdCB3aXRoIFJVTlRJTUVfUFJFRklYCisjIGNhbiBiZSBtb3ZlZCB0byBhcmJpdHJhcnkgZmlsZXN5c3RlbSBsb2NhdGlvbnMuIFJVTlRJTUVfUFJFRklYIGFsc28gY2F1c2VzCisjIFBlcmwgc2NyaXB0cyB0byB1c2UgYSBtb2RpZmllZCBlbnRyeSBwb2ludCBoZWFkZXIgYWxsb3dpbmcgdGhlbSB0byByZXNvbHZlCisjIHN1cHBvcnQgZmlsZXMgYXQgcnVudGltZS4KKyMKKyMgV2hlbiB1c2luZyBSVU5USU1FX1BSRUZJWCwgZGVmaW5lIEhBVkVfQlNEX0tFUk5fUFJPQ19TWVNDVEwgaWYgeW91ciBwbGF0Zm9ybQorIyBzdXBwb3J0cyB0aGUgS0VSTl9QUk9DIEJTRCBzeXNjdGwgZnVuY3Rpb24uCisjCisjIFdoZW4gdXNpbmcgUlVOVElNRV9QUkVGSVgsIGRlZmluZSBQUk9DRlNfRVhFQ1VUQUJMRV9QQVRIIGlmIHlvdXIgcGxhdGZvcm0KKyMgbW91bnRzIGEgInByb2NmcyIgZmlsZXN5c3RlbSBjYXBhYmxlIG9mIHJlc29sdmluZyB0aGUgcGF0aCBvZiB0aGUgY3VycmVudAorIyBleGVjdXRhYmxlLiBJZiBkZWZpbmVkLCB0aGlzIG11c3QgYmUgdGhlIGNhbm9uaWNhbCBwYXRoIGZvciB0aGUgInByb2NmcyIKKyMgY3VycmVudCBleGVjdXRhYmxlIHBhdGguCisjCisjIFdoZW4gdXNpbmcgUlVOVElNRV9QUkVGSVgsIGRlZmluZSBIQVZFX05TX0dFVF9FWEVDVVRBQkxFX1BBVEggaWYgeW91ciBwbGF0Zm9ybQorIyBzdXBwb3J0cyBjYWxsaW5nIF9OU0dldEV4ZWN1dGFibGVQYXRoIHRvIHJldHJpZXZlIHRoZSBwYXRoIG9mIHRoZSBydW5uaW5nCisjIGV4ZWN1dGFibGUuCisjCisjIFdoZW4gdXNpbmcgUlVOVElNRV9QUkVGSVgsIGRlZmluZSBIQVZFX1dQR01QVFIgaWYgeW91ciBwbGF0Zm9ybSBvZmZlcnMKKyMgdGhlIGdsb2JhbCB2YXJpYWJsZSBfd3BnbXB0ciBjb250YWluaW5nIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBjdXJyZW50CisjIGV4ZWN1dGFibGUgKHRoaXMgaXMgdGhlIGNhc2Ugb24gV2luZG93cykuCisjCisjIERlZmluZSBERVZFTE9QRVIgdG8gZW5hYmxlIG1vcmUgY29tcGlsZXIgd2FybmluZ3MuIENvbXBpbGVyIHZlcnNpb24KKyMgYW5kIGZhbWlseSBhcmUgYXV0byBkZXRlY3RlZCwgYnV0IGNvdWxkIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcKKyMgQ09NUElMRVJfRkVBVFVSRVMgKHNlZSBjb25maWcubWFrLmRldikuIFlvdSBjYW4gc3RpbGwgc2V0CisjIENGTEFHUz0iLi4uIiBpbiBjb21iaW5hdGlvbiB3aXRoIERFVkVMT1BFUiBlbmFibGVzLCB3aGV0aGVyIHRoYXQncworIyBmb3IgdHdlYWtpbmcgc29tZXRoaW5nIHVucmVsYXRlZCAoZS5nLiBvcHRpbWl6YXRpb24gbGV2ZWwpLCBvciBmb3IKKyMgc2VsZWN0aXZlbHkgb3ZlcnJpZGluZyBzb21ldGhpbmcgREVWRUxPUEVSIG9yIG9uZSBvZiB0aGUgREVWT1BUUworIyAoc2VlIGp1c3QgYmVsb3cpIGJyaW5ncyBpbi4KKyMKKyMgV2hlbiBERVZFTE9QRVIgaXMgc2V0LCBERVZPUFRTIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgY29tcGlsZXIKKyMgb3B0aW9ucy4gIFRoaXMgdmFyaWFibGUgY29udGFpbnMga2V5d29yZHMgc2VwYXJhdGVkIGJ5CisjIHdoaXRlc3BhY2UuIFRoZSBmb2xsb3dpbmcga2V5d29yZHMgYXJlIHJlY29nbml6ZWQ6CisjCisjICAgIG5vLWVycm9yOgorIworIyAgICAgICAgc3VwcHJlc3NlcyB0aGUgLVdlcnJvciB0aGF0IGltcGxpY2l0bHkgY29tZXMgd2l0aAorIyAgICAgICAgREVWRUxPUEVSPTEuIFVzZWZ1bCBmb3IgZ2V0dGluZyB0aGUgZnVsbCBzZXQgb2YgZXJyb3JzCisjICAgICAgICB3aXRob3V0IGltbWVkaWF0ZWx5IGR5aW5nLCBvciBmb3IgbG9nZ2luZyB0aGVtLgorIworIyAgICBleHRyYS1hbGw6CisjCisjICAgICAgICBUaGUgREVWRUxPUEVSIG1vZGUgZW5hYmxlcyAtV2V4dHJhIHdpdGggYSBmZXcgZXhjZXB0aW9ucy4gQnkKKyMgICAgICAgIHNldHRpbmcgdGhpcyBmbGFnIHRoZSBleGNlcHRpb25zIGFyZSByZW1vdmVkLCBhbmQgYWxsIG9mCisjICAgICAgICAtV2V4dHJhIGlzIHVzZWQuCisjCisjICAgIHBlZGFudGljOgorIworIyAgICAgICAgRW5hYmxlIC1wZWRhbnRpYyBjb21waWxhdGlvbi4gVGhpcyBhbHNvIGRpc2FibGVzCisjICAgICAgICBVU0VfUEFSRU5TX0FST1VORF9HRVRURVhUX04gdG8gcHJvZHVjZSBvbmx5IHJlbGV2YW50IHdhcm5pbmdzLgogCiBHSVQtVkVSU0lPTi1GSUxFOiBGT1JDRQogCUAkKFNIRUxMX1BBVEgpIC4vR0lULVZFUlNJT04tR0VOCiAtaW5jbHVkZSBHSVQtVkVSU0lPTi1GSUxFCiAKLXVuYW1lX1MgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXMgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQotdW5hbWVfTyA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtbyAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCi11bmFtZV9SIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1yIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKKyMgU2V0IG91ciBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisjCisjIEFtb25nIHRoZSB2YXJpYWJsZXMgYmVsb3csIHRoZXNlOgorIyAgIGdpdGV4ZWNkaXIKKyMgICB0ZW1wbGF0ZV9kaXIKKyMgICBzeXNjb25mZGlyCisjIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSByZWxhdGl2ZSBwYXRoIHNvbWUvd2hlcmUvZWxzZTsKKyMgdGhpcyBpcyBpbnRlcnByZXRlZCBhcyByZWxhdGl2ZSB0byAkKHByZWZpeCkgYW5kICJnaXQiIGF0CisjIHJ1bnRpbWUgZmlndXJlcyBvdXQgd2hlcmUgdGhleSBhcmUgYmFzZWQgb24gdGhlIHBhdGggdG8gdGhlIGV4ZWN1dGFibGUuCisjIEFkZGl0aW9uYWxseSwgdGhlIGZvbGxvd2luZyB3aWxsIGJlIHRyZWF0ZWQgYXMgcmVsYXRpdmUgYnkgImdpdCIgaWYgdGhleQorIyBiZWdpbiB3aXRoICIkKHByZWZpeCkvIjoKKyMgICBtYW5kaXIKKyMgICBpbmZvZGlyCisjICAgaHRtbGRpcgorIyAgIGxvY2FsZWRpcgorIyAgIHBlcmxsaWJkaXIKKyMgVGhpcyBjYW4gaGVscCBpbnN0YWxsaW5nIHRoZSBzdWl0ZSBpbiBhIHJlbG9jYXRhYmxlIHdheS4KIAotU0NSSVBUX1NIID0gZ2l0LWd1aS5zaAotR0lUR1VJX01BSU4gOj0gZ2l0LWd1aQotR0lUR1VJX0JVSUxUX0lOUyA9IGdpdC1jaXRvb2wKLUFMTF9MSUJGSUxFUyA9ICQod2lsZGNhcmQgbGliLyoudGNsKQotUFJFTE9BRF9GSUxFUyA9IGxpYi9jbGFzcy50Y2wKLU5PTlRDTF9MSUJGSUxFUyA9IFwKLQlsaWIvZ2l0LWd1aS5pY28gXAotCSQod2lsZGNhcmQgbGliL3dpbjMyXyouanMpIFwKLSNlbmQgTk9OVENMX0xJQkZJTEVTCitwcmVmaXggPSAkKEhPTUUpCitiaW5kaXIgPSAkKHByZWZpeCkvYmluCittYW5kaXIgPSAkKHByZWZpeCkvc2hhcmUvbWFuCitpbmZvZGlyID0gJChwcmVmaXgpL3NoYXJlL2luZm8KK2dpdGV4ZWNkaXIgPSBsaWJleGVjL2dpdC1jb3JlCittZXJnZXRvb2xzZGlyID0gJChnaXRleGVjZGlyKS9tZXJnZXRvb2xzCitzaGFyZWRpciA9ICQocHJlZml4KS9zaGFyZQorZ2l0d2ViZGlyID0gJChzaGFyZWRpcikvZ2l0d2ViCitwZXJsbGliZGlyID0gJChzaGFyZWRpcikvcGVybDUKK2xvY2FsZWRpciA9ICQoc2hhcmVkaXIpL2xvY2FsZQordGVtcGxhdGVfZGlyID0gc2hhcmUvZ2l0LWNvcmUvdGVtcGxhdGVzCitodG1sZGlyID0gJChwcmVmaXgpL3NoYXJlL2RvYy9naXQtZG9jCitFVENfR0lUQ09ORklHID0gJChzeXNjb25mZGlyKS9naXRjb25maWcKK0VUQ19HSVRBVFRSSUJVVEVTID0gJChzeXNjb25mZGlyKS9naXRhdHRyaWJ1dGVzCitsaWIgPSBsaWIKKyMgREVTVERJUiA9CitwYXRoc2VwID0gOgogCitiaW5kaXJfcmVsYXRpdmUgPSAkKHBhdHN1YnN0ICQocHJlZml4KS8lLCUsJChiaW5kaXIpKQorbWFuZGlyX3JlbGF0aXZlID0gJChwYXRzdWJzdCAkKHByZWZpeCkvJSwlLCQobWFuZGlyKSkKK2luZm9kaXJfcmVsYXRpdmUgPSAkKHBhdHN1YnN0ICQocHJlZml4KS8lLCUsJChpbmZvZGlyKSkKK2dpdGV4ZWNkaXJfcmVsYXRpdmUgPSAkKHBhdHN1YnN0ICQocHJlZml4KS8lLCUsJChnaXRleGVjZGlyKSkKK2xvY2FsZWRpcl9yZWxhdGl2ZSA9ICQocGF0c3Vic3QgJChwcmVmaXgpLyUsJSwkKGxvY2FsZWRpcikpCitodG1sZGlyX3JlbGF0aXZlID0gJChwYXRzdWJzdCAkKHByZWZpeCkvJSwlLCQoaHRtbGRpcikpCitwZXJsbGliZGlyX3JlbGF0aXZlID0gJChwYXRzdWJzdCAkKHByZWZpeCkvJSwlLCQocGVybGxpYmRpcikpCisKK2V4cG9ydCBwcmVmaXggYmluZGlyIHNoYXJlZGlyIHN5c2NvbmZkaXIgZ2l0d2ViZGlyIHBlcmxsaWJkaXIgbG9jYWxlZGlyCisKKyMgU2V0IG91ciBkZWZhdWx0IHByb2dyYW1zCitDQyA9IGNjCitBUiA9IGFyCitSTSA9IHJtIC1mCitESUZGID0gZGlmZgorVEFSID0gdGFyCitGSU5EID0gZmluZAorSU5TVEFMTCA9IGluc3RhbGwKK1RDTF9QQVRIID0gdGNsc2gKK1RDTFRLX1BBVEggPSB3aXNoCitYR0VUVEVYVCA9IHhnZXR0ZXh0CitNU0dGTVQgPSBtc2dmbXQKK0NVUkxfQ09ORklHID0gY3VybC1jb25maWcKK0dDT1YgPSBnY292CitTVFJJUCA9IHN0cmlwCitTUEFUQ0ggPSBzcGF0Y2gKKworZXhwb3J0IFRDTF9QQVRIIFRDTFRLX1BBVEgKKworIyBTZXQgb3VyIGRlZmF1bHQgTElCUyB2YXJpYWJsZXMKK1BUSFJFQURfTElCUyA9IC1scHRocmVhZAorCisjIEd1YXJkIGFnYWluc3QgZW52aXJvbm1lbnQgdmFyaWFibGVzCitCVUlMVElOX09CSlMgPQorQlVJTFRfSU5TID0KK0NPTVBBVF9DRkxBR1MgPQorQ09NUEFUX09CSlMgPQorWERJRkZfT0JKUyA9CitWQ1NTVk5fT0JKUyA9CitHRU5FUkFURURfSCA9CitFWFRSQV9DUFBGTEFHUyA9CitGVVpaX09CSlMgPQorRlVaWl9QUk9HUkFNUyA9CitMSUJfT0JKUyA9CitQUk9HUkFNX09CSlMgPQorUFJPR1JBTVMgPQorRVhDTFVERURfUFJPR1JBTVMgPQorU0NSSVBUX1BFUkwgPQorU0NSSVBUX1BZVEhPTiA9CitTQ1JJUFRfU0ggPQorU0NSSVBUX0xJQiA9CitURVNUX0JVSUxUSU5TX09CSlMgPQorVEVTVF9QUk9HUkFNU19ORUVEX1ggPQorVEhJUkRfUEFSVFlfU09VUkNFUyA9CisKKyMgSGF2aW5nIHRoaXMgdmFyaWFibGUgaW4geW91ciBlbnZpcm9ubWVudCB3b3VsZCBicmVhayBwaXBlbGluZXMgYmVjYXVzZQorIyB5b3UgY2F1c2UgImNkIiB0byBlY2hvIGl0cyBkZXN0aW5hdGlvbiB0byBzdGRvdXQuICBJdCBjYW4gYWxzbyB0YWtlCisjIHNjcmlwdHMgdG8gdW5leHBlY3RlZCBwbGFjZXMuICBJZiB5b3UgbGlrZSBDRFBBVEgsIGRlZmluZSBpdCBmb3IgeW91cgorIyBpbnRlcmFjdGl2ZSBzaGVsbCBzZXNzaW9ucyB3aXRob3V0IGV4cG9ydGluZyBpdC4KK3VuZXhwb3J0IENEUEFUSAorCitTQ1JJUFRfU0ggKz0gZ2l0LWJpc2VjdC5zaAorU0NSSVBUX1NIICs9IGdpdC1kaWZmdG9vbC0taGVscGVyLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LWZpbHRlci1icmFuY2guc2gKK1NDUklQVF9TSCArPSBnaXQtbWVyZ2Utb2N0b3B1cy5zaAorU0NSSVBUX1NIICs9IGdpdC1tZXJnZS1vbmUtZmlsZS5zaAorU0NSSVBUX1NIICs9IGdpdC1tZXJnZS1yZXNvbHZlLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LW1lcmdldG9vbC5zaAorU0NSSVBUX1NIICs9IGdpdC1xdWlsdGltcG9ydC5zaAorU0NSSVBUX1NIICs9IGdpdC1yZXF1ZXN0LXB1bGwuc2gKK1NDUklQVF9TSCArPSBnaXQtc3VibW9kdWxlLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LXdlYi0tYnJvd3NlLnNoCisKK1NDUklQVF9MSUIgKz0gZ2l0LW1lcmdldG9vbC0tbGliCitTQ1JJUFRfTElCICs9IGdpdC1wYXJzZS1yZW1vdGUKK1NDUklQVF9MSUIgKz0gZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzCitTQ1JJUFRfTElCICs9IGdpdC1zaC1pMThuCitTQ1JJUFRfTElCICs9IGdpdC1zaC1zZXR1cAorCitTQ1JJUFRfUEVSTCArPSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsCitTQ1JJUFRfUEVSTCArPSBnaXQtYXJjaGltcG9ydC5wZXJsCitTQ1JJUFRfUEVSTCArPSBnaXQtY3ZzZXhwb3J0Y29tbWl0LnBlcmwKK1NDUklQVF9QRVJMICs9IGdpdC1jdnNpbXBvcnQucGVybAorU0NSSVBUX1BFUkwgKz0gZ2l0LWN2c3NlcnZlci5wZXJsCitTQ1JJUFRfUEVSTCArPSBnaXQtc2VuZC1lbWFpbC5wZXJsCitTQ1JJUFRfUEVSTCArPSBnaXQtc3ZuLnBlcmwKKworU0NSSVBUX1BZVEhPTiArPSBnaXQtcDQucHkKKworIyBHZW5lcmF0ZWQgZmlsZXMgZm9yIHNjcmlwdHMKK1NDUklQVF9TSF9HRU4gPSAkKHBhdHN1YnN0ICUuc2gsJSwkKFNDUklQVF9TSCkpCitTQ1JJUFRfUEVSTF9HRU4gPSAkKHBhdHN1YnN0ICUucGVybCwlLCQoU0NSSVBUX1BFUkwpKQorU0NSSVBUX1BZVEhPTl9HRU4gPSAkKHBhdHN1YnN0ICUucHksJSwkKFNDUklQVF9QWVRIT04pKQorCisjIEluZGl2aWR1YWwgcnVsZXMgdG8gYWxsb3cgZS5nLgorIyAibWFrZSAtQyAuLi8uLiBTQ1JJUFRfUEVSTD1jb250cmliL2Zvby9iYXIucGVybCBidWlsZC1wZXJsLXNjcmlwdCIKKyMgZnJvbSBzdWJkaXJlY3RvcmllcyBsaWtlIGNvbnRyaWIvKi8KKy5QSE9OWTogYnVpbGQtcGVybC1zY3JpcHQgYnVpbGQtc2gtc2NyaXB0IGJ1aWxkLXB5dGhvbi1zY3JpcHQKK2J1aWxkLXBlcmwtc2NyaXB0OiAkKFNDUklQVF9QRVJMX0dFTikKK2J1aWxkLXNoLXNjcmlwdDogJChTQ1JJUFRfU0hfR0VOKQorYnVpbGQtcHl0aG9uLXNjcmlwdDogJChTQ1JJUFRfUFlUSE9OX0dFTikKKworLlBIT05ZOiBpbnN0YWxsLXBlcmwtc2NyaXB0IGluc3RhbGwtc2gtc2NyaXB0IGluc3RhbGwtcHl0aG9uLXNjcmlwdAoraW5zdGFsbC1zaC1zY3JpcHQ6ICQoU0NSSVBUX1NIX0dFTikKKwkkKElOU1RBTEwpICReICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworaW5zdGFsbC1wZXJsLXNjcmlwdDogJChTQ1JJUFRfUEVSTF9HRU4pCisJJChJTlNUQUxMKSAkXiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKK2luc3RhbGwtcHl0aG9uLXNjcmlwdDogJChTQ1JJUFRfUFlUSE9OX0dFTikKKwkkKElOU1RBTEwpICReICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworCisuUEhPTlk6IGNsZWFuLXBlcmwtc2NyaXB0IGNsZWFuLXNoLXNjcmlwdCBjbGVhbi1weXRob24tc2NyaXB0CitjbGVhbi1zaC1zY3JpcHQ6CisJJChSTSkgJChTQ1JJUFRfU0hfR0VOKQorY2xlYW4tcGVybC1zY3JpcHQ6CisJJChSTSkgJChTQ1JJUFRfUEVSTF9HRU4pCitjbGVhbi1weXRob24tc2NyaXB0OgorCSQoUk0pICQoU0NSSVBUX1BZVEhPTl9HRU4pCisKK1NDUklQVFMgPSAkKFNDUklQVF9TSF9HRU4pIFwKKwkgICQoU0NSSVBUX1BFUkxfR0VOKSBcCisJICAkKFNDUklQVF9QWVRIT05fR0VOKSBcCisJICBnaXQtaW5zdGF3ZWIKKworRVRBR1NfVEFSR0VUID0gVEFHUworCitGVVpaX09CSlMgKz0gZnV6ei1jb21taXQtZ3JhcGgubworRlVaWl9PQkpTICs9IGZ1enotcGFjay1oZWFkZXJzLm8KK0ZVWlpfT0JKUyArPSBmdXp6LXBhY2staWR4Lm8KKworIyBBbHdheXMgYnVpbGQgZnV6eiBvYmplY3RzIGV2ZW4gaWYgbm90IHRlc3RpbmcsIHRvIHByZXZlbnQgYml0LXJvdC4KK2FsbDo6ICQoRlVaWl9PQkpTKQorCitGVVpaX1BST0dSQU1TICs9ICQocGF0c3Vic3QgJS5vLCUsJChGVVpaX09CSlMpKQorCisjIEVtcHR5Li4uCitFWFRSQV9QUk9HUkFNUyA9CisKKyMgLi4uIGFuZCBhbGwgdGhlIHJlc3QgdGhhdCBjb3VsZCBiZSBtb3ZlZCBvdXQgb2YgYmluZGlyIHRvIGdpdGV4ZWNkaXIKK1BST0dSQU1TICs9ICQoRVhUUkFfUFJPR1JBTVMpCisKK1BST0dSQU1fT0JKUyArPSBidWdyZXBvcnQubworUFJPR1JBTV9PQkpTICs9IGNyZWRlbnRpYWwtc3RvcmUubworUFJPR1JBTV9PQkpTICs9IGRhZW1vbi5vCitQUk9HUkFNX09CSlMgKz0gZmFzdC1pbXBvcnQubworUFJPR1JBTV9PQkpTICs9IGh0dHAtYmFja2VuZC5vCitQUk9HUkFNX09CSlMgKz0gaW1hcC1zZW5kLm8KK1BST0dSQU1fT0JKUyArPSByZW1vdGUtdGVzdHN2bi5vCitQUk9HUkFNX09CSlMgKz0gc2gtaTE4bi0tZW52c3Vic3QubworUFJPR1JBTV9PQkpTICs9IHNoZWxsLm8KKworIyBCaW5hcnkgc3VmZml4LCBzZXQgdG8gLmV4ZSBmb3IgV2luZG93cyBidWlsZHMKK1ggPQorCitQUk9HUkFNUyArPSAkKHBhdHN1YnN0ICUubyxnaXQtJSRYLCQoUFJPR1JBTV9PQkpTKSkKKworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtYWR2aXNlLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWJsb29tLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWNobXRpbWUubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtY29uZmlnLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWN0eXBlLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWRhdGUubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtZGVsdGEubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtZGlyLWl0ZXJhdG9yLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWRyb3AtY2FjaGVzLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWR1bXAtY2FjaGUtdHJlZS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1kdW1wLWZzbW9uaXRvci5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1kdW1wLXNwbGl0LWluZGV4Lm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWR1bXAtdW50cmFja2VkLWNhY2hlLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWV4YW1wbGUtZGVjb3JhdGUubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtZ2VucmFuZG9tLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWdlbnplcm9zLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWhhc2gtc3BlZWQubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtaGFzaC5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1oYXNobWFwLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWluZGV4LXZlcnNpb24ubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtanNvbi13cml0ZXIubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtbGF6eS1pbml0LW5hbWUtaGFzaC5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1tYXRjaC10cmVlcy5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1tZXJnZXNvcnQubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtbWt0ZW1wLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LW9pZC1hcnJheS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1vaWRtYXAubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3Qtb25saW5lLWNwdXMubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcGFyc2Utb3B0aW9ucy5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1wYXJzZS1wYXRoc3BlYy1maWxlLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXBhdGgtdXRpbHMubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcGt0LWxpbmUubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcHJpby1xdWV1ZS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1wcm9ncmVzcy5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1yZWFjaC5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1yZWFkLWNhY2hlLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXJlYWQtZ3JhcGgubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcmVhZC1taWR4Lm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXJlZi1zdG9yZS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1yZWdleC5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1yZXBvc2l0b3J5Lm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXJldmlzaW9uLXdhbGtpbmcubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcnVuLWNvbW1hbmQubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3Qtc2NyYXAtY2FjaGUtdHJlZS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1zZXJ2ZS12Mi5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1zaGExLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXNoYTI1Ni5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1zaWdjaGFpbi5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1zdHJjbXAtb2Zmc2V0Lm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXN0cmluZy1saXN0Lm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXN1Ym1vZHVsZS1jb25maWcubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3Qtc3VibW9kdWxlLW5lc3RlZC1yZXBvLWNvbmZpZy5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1zdWJwcm9jZXNzLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXRyYWNlMi5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXdpbGRtYXRjaC5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC13aW5kb3dzLW5hbWVkLXBpcGUubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3Qtd3JpdGUtY2FjaGUubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QteG1sLWVuY29kZS5vCisKKyMgRG8gbm90IGFkZCBtb3JlIHRlc3RzIGhlcmUgdW5sZXNzIHRoZXkgaGF2ZSBleHRyYSBkZXBlbmRlbmNpZXMuIEFkZAorIyB0aGVtIGluIFRFU1RfQlVJTFRJTlNfT0JKUyBhYm92ZS4KK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtZmFrZS1zc2gKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtbGluZS1idWZmZXIKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3Qtc3ZuLWZlCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LXRvb2wKKworVEVTVF9QUk9HUkFNUyA9ICQocGF0c3Vic3QgJSx0L2hlbHBlci8lJFgsJChURVNUX1BST0dSQU1TX05FRURfWCkpCisKKyMgTGlzdCBidWlsdC1pbiBjb21tYW5kICRDIHdob3NlIGltcGxlbWVudGF0aW9uIGNtZF8kQygpIGlzIG5vdCBpbgorIyBidWlsdGluLyRDLm8gYnV0IGlzIGxpbmtlZCBpbiBhcyBwYXJ0IG9mIHNvbWUgb3RoZXIgY29tbWFuZC4KK0JVSUxUX0lOUyArPSAkKHBhdHN1YnN0IGJ1aWx0aW4vJS5vLGdpdC0lJFgsJChCVUlMVElOX09CSlMpKQorCitCVUlMVF9JTlMgKz0gZ2l0LWNoZXJyeSRYCitCVUlMVF9JTlMgKz0gZ2l0LWNoZXJyeS1waWNrJFgKK0JVSUxUX0lOUyArPSBnaXQtZm9ybWF0LXBhdGNoJFgKK0JVSUxUX0lOUyArPSBnaXQtZnNjay1vYmplY3RzJFgKK0JVSUxUX0lOUyArPSBnaXQtaW5pdCRYCitCVUlMVF9JTlMgKz0gZ2l0LW1lcmdlLXN1YnRyZWUkWAorQlVJTFRfSU5TICs9IGdpdC1yZXN0b3JlJFgKK0JVSUxUX0lOUyArPSBnaXQtc2hvdyRYCitCVUlMVF9JTlMgKz0gZ2l0LXN0YWdlJFgKK0JVSUxUX0lOUyArPSBnaXQtc3RhdHVzJFgKK0JVSUxUX0lOUyArPSBnaXQtc3dpdGNoJFgKK0JVSUxUX0lOUyArPSBnaXQtd2hhdGNoYW5nZWQkWAorCisjIHdoYXQgJ2FsbCcgd2lsbCBidWlsZCBhbmQgJ2luc3RhbGwnIHdpbGwgaW5zdGFsbCBpbiBnaXRleGVjZGlyLAorIyBleGNsdWRpbmcgcHJvZ3JhbXMgZm9yIGJ1aWx0LWluIGNvbW1hbmRzCitBTExfUFJPR1JBTVMgPSAkKFBST0dSQU1TKSAkKFNDUklQVFMpCisKKyMgd2hhdCAnYWxsJyB3aWxsIGJ1aWxkIGJ1dCBub3QgaW5zdGFsbCBpbiBnaXRleGVjZGlyCitPVEhFUl9QUk9HUkFNUyA9IGdpdCRYCisKKyMgd2hhdCB0ZXN0IHdyYXBwZXJzIGFyZSBuZWVkZWQgYW5kICdpbnN0YWxsJyB3aWxsIGluc3RhbGwsIGluIGJpbmRpcgorQklORElSX1BST0dSQU1TX05FRURfWCArPSBnaXQKK0JJTkRJUl9QUk9HUkFNU19ORUVEX1ggKz0gZ2l0LXJlY2VpdmUtcGFjaworQklORElSX1BST0dSQU1TX05FRURfWCArPSBnaXQtc2hlbGwKK0JJTkRJUl9QUk9HUkFNU19ORUVEX1ggKz0gZ2l0LXVwbG9hZC1hcmNoaXZlCitCSU5ESVJfUFJPR1JBTVNfTkVFRF9YICs9IGdpdC11cGxvYWQtcGFjaworCitCSU5ESVJfUFJPR1JBTVNfTk9fWCArPSBnaXQtY3Zzc2VydmVyCisKKyMgU2V0IHBhdGhzIHRvIHRvb2xzIGVhcmx5IHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBmb3IgdmVyc2lvbiB0ZXN0cy4KIGlmbmRlZiBTSEVMTF9QQVRICiAJU0hFTExfUEFUSCA9IC9iaW4vc2gKIGVuZGlmCi0KLWlmbmRlZiBnaXRleGVjZGlyCi0JZ2l0ZXhlY2RpciA6PSAkKHNoZWxsIGdpdCAtLWV4ZWMtcGF0aCkKK2lmbmRlZiBQRVJMX1BBVEgKKwlQRVJMX1BBVEggPSAvdXNyL2Jpbi9wZXJsCitlbmRpZgoraWZuZGVmIFBZVEhPTl9QQVRICisJUFlUSE9OX1BBVEggPSAvdXNyL2Jpbi9weXRob24KIGVuZGlmCiAKLWlmbmRlZiBzaGFyZWRpcgotaWZlcSAoZ2l0LWNvcmUsJChub3RkaXIgJChnaXRleGVjZGlyKSkpCi0Jc2hhcmVkaXIgOj0gJChkaXIgJChwYXRzdWJzdCAlLywlLCQoZGlyICQoZ2l0ZXhlY2RpcikpKSlzaGFyZQotZWxzZQotCXNoYXJlZGlyIDo9ICQoZGlyICQoZ2l0ZXhlY2Rpcikpc2hhcmUKLWVuZGlmCitleHBvcnQgUEVSTF9QQVRICitleHBvcnQgUFlUSE9OX1BBVEgKKworVEVTVF9TSEVMTF9QQVRIID0gJChTSEVMTF9QQVRIKQorCitMSUJfRklMRSA9IGxpYmdpdC5hCitYRElGRl9MSUIgPSB4ZGlmZi9saWIuYQorVkNTU1ZOX0xJQiA9IHZjcy1zdm4vbGliLmEKKworR0VORVJBVEVEX0ggKz0gY29uZmlnLWxpc3QuaAorR0VORVJBVEVEX0ggKz0gY29tbWFuZC1saXN0LmgKKworTElCX0ggOj0gJChzb3J0ICQocGF0c3Vic3QgLi8lLCUsJChzaGVsbCBnaXQgbHMtZmlsZXMgJyouaCcgJzohdC8nICc6IURvY3VtZW50YXRpb24vJyAyPi9kZXYvbnVsbCB8fCBcCisJJChGSU5EKSAuIFwKKwktbmFtZSAuZ2l0IC1wcnVuZSAtbyBcCisJLW5hbWUgdCAtcHJ1bmUgLW8gXAorCS1uYW1lIERvY3VtZW50YXRpb24gLXBydW5lIC1vIFwKKwktbmFtZSAnKi5oJyAtcHJpbnQpKSkKKworTElCX09CSlMgKz0gYWJzcGF0aC5vCitMSUJfT0JKUyArPSBhZGQtaW50ZXJhY3RpdmUubworTElCX09CSlMgKz0gYWRkLXBhdGNoLm8KK0xJQl9PQkpTICs9IGFkdmljZS5vCitMSUJfT0JKUyArPSBhbGlhcy5vCitMSUJfT0JKUyArPSBhbGxvYy5vCitMSUJfT0JKUyArPSBhcHBseS5vCitMSUJfT0JKUyArPSBhcmNoaXZlLXRhci5vCitMSUJfT0JKUyArPSBhcmNoaXZlLXppcC5vCitMSUJfT0JKUyArPSBhcmNoaXZlLm8KK0xJQl9PQkpTICs9IGFyZ3YtYXJyYXkubworTElCX09CSlMgKz0gYXR0ci5vCitMSUJfT0JKUyArPSBiYXNlODUubworTElCX09CSlMgKz0gYmlzZWN0Lm8KK0xJQl9PQkpTICs9IGJsYW1lLm8KK0xJQl9PQkpTICs9IGJsb2IubworTElCX09CSlMgKz0gYmxvb20ubworTElCX09CSlMgKz0gYnJhbmNoLm8KK0xJQl9PQkpTICs9IGJ1bGstY2hlY2tpbi5vCitMSUJfT0JKUyArPSBidW5kbGUubworTElCX09CSlMgKz0gY2FjaGUtdHJlZS5vCitMSUJfT0JKUyArPSBjaGRpci1ub3RpZnkubworTElCX09CSlMgKz0gY2hlY2tvdXQubworTElCX09CSlMgKz0gY29sb3IubworTElCX09CSlMgKz0gY29sdW1uLm8KK0xJQl9PQkpTICs9IGNvbWJpbmUtZGlmZi5vCitMSUJfT0JKUyArPSBjb21taXQtZ3JhcGgubworTElCX09CSlMgKz0gY29tbWl0LXJlYWNoLm8KK0xJQl9PQkpTICs9IGNvbW1pdC5vCitMSUJfT0JKUyArPSBjb21wYXQvb2JzdGFjay5vCitMSUJfT0JKUyArPSBjb21wYXQvdGVybWluYWwubworTElCX09CSlMgKz0gY29uZmlnLm8KK0xJQl9PQkpTICs9IGNvbm5lY3QubworTElCX09CSlMgKz0gY29ubmVjdGVkLm8KK0xJQl9PQkpTICs9IGNvbnZlcnQubworTElCX09CSlMgKz0gY29weS5vCitMSUJfT0JKUyArPSBjcmVkZW50aWFsLm8KK0xJQl9PQkpTICs9IGNzdW0tZmlsZS5vCitMSUJfT0JKUyArPSBjdHlwZS5vCitMSUJfT0JKUyArPSBkYXRlLm8KK0xJQl9PQkpTICs9IGRlY29yYXRlLm8KK0xJQl9PQkpTICs9IGRlbHRhLWlzbGFuZHMubworTElCX09CSlMgKz0gZGlmZi1kZWx0YS5vCitMSUJfT0JKUyArPSBkaWZmLWxpYi5vCitMSUJfT0JKUyArPSBkaWZmLW5vLWluZGV4Lm8KK0xJQl9PQkpTICs9IGRpZmYubworTElCX09CSlMgKz0gZGlmZmNvcmUtYnJlYWsubworTElCX09CSlMgKz0gZGlmZmNvcmUtZGVsdGEubworTElCX09CSlMgKz0gZGlmZmNvcmUtb3JkZXIubworTElCX09CSlMgKz0gZGlmZmNvcmUtcGlja2F4ZS5vCitMSUJfT0JKUyArPSBkaWZmY29yZS1yZW5hbWUubworTElCX09CSlMgKz0gZGlyLWl0ZXJhdG9yLm8KK0xJQl9PQkpTICs9IGRpci5vCitMSUJfT0JKUyArPSBlZGl0b3IubworTElCX09CSlMgKz0gZW50cnkubworTElCX09CSlMgKz0gZW52aXJvbm1lbnQubworTElCX09CSlMgKz0gZXdhaC9iaXRtYXAubworTElCX09CSlMgKz0gZXdhaC9ld2FoX2JpdG1hcC5vCitMSUJfT0JKUyArPSBld2FoL2V3YWhfaW8ubworTElCX09CSlMgKz0gZXdhaC9ld2FoX3Jsdy5vCitMSUJfT0JKUyArPSBleGVjLWNtZC5vCitMSUJfT0JKUyArPSBmZXRjaC1uZWdvdGlhdG9yLm8KK0xJQl9PQkpTICs9IGZldGNoLXBhY2subworTElCX09CSlMgKz0gZm10LW1lcmdlLW1zZy5vCitMSUJfT0JKUyArPSBmc2NrLm8KK0xJQl9PQkpTICs9IGZzbW9uaXRvci5vCitMSUJfT0JKUyArPSBnZXR0ZXh0Lm8KK0xJQl9PQkpTICs9IGdwZy1pbnRlcmZhY2UubworTElCX09CSlMgKz0gZ3JhcGgubworTElCX09CSlMgKz0gZ3JlcC5vCitMSUJfT0JKUyArPSBoYXNobWFwLm8KK0xJQl9PQkpTICs9IGhlbHAubworTElCX09CSlMgKz0gaGV4Lm8KK0xJQl9PQkpTICs9IGlkZW50Lm8KK0xJQl9PQkpTICs9IGludGVyZGlmZi5vCitMSUJfT0JKUyArPSBqc29uLXdyaXRlci5vCitMSUJfT0JKUyArPSBrd3NldC5vCitMSUJfT0JKUyArPSBsZXZlbnNodGVpbi5vCitMSUJfT0JKUyArPSBsaW5lLWxvZy5vCitMSUJfT0JKUyArPSBsaW5lLXJhbmdlLm8KK0xJQl9PQkpTICs9IGxpbmVhci1hc3NpZ25tZW50Lm8KK0xJQl9PQkpTICs9IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5vCitMSUJfT0JKUyArPSBsaXN0LW9iamVjdHMtZmlsdGVyLm8KK0xJQl9PQkpTICs9IGxpc3Qtb2JqZWN0cy5vCitMSUJfT0JKUyArPSBsbC1tZXJnZS5vCitMSUJfT0JKUyArPSBsb2NrZmlsZS5vCitMSUJfT0JKUyArPSBsb2ctdHJlZS5vCitMSUJfT0JKUyArPSBscy1yZWZzLm8KK0xJQl9PQkpTICs9IG1haWxpbmZvLm8KK0xJQl9PQkpTICs9IG1haWxtYXAubworTElCX09CSlMgKz0gbWF0Y2gtdHJlZXMubworTElCX09CSlMgKz0gbWVtLXBvb2wubworTElCX09CSlMgKz0gbWVyZ2UtYmxvYnMubworTElCX09CSlMgKz0gbWVyZ2UtcmVjdXJzaXZlLm8KK0xJQl9PQkpTICs9IG1lcmdlLm8KK0xJQl9PQkpTICs9IG1lcmdlc29ydC5vCitMSUJfT0JKUyArPSBtaWR4Lm8KK0xJQl9PQkpTICs9IG5hbWUtaGFzaC5vCitMSUJfT0JKUyArPSBuZWdvdGlhdG9yL2RlZmF1bHQubworTElCX09CSlMgKz0gbmVnb3RpYXRvci9za2lwcGluZy5vCitMSUJfT0JKUyArPSBub3Rlcy1jYWNoZS5vCitMSUJfT0JKUyArPSBub3Rlcy1tZXJnZS5vCitMSUJfT0JKUyArPSBub3Rlcy11dGlscy5vCitMSUJfT0JKUyArPSBub3Rlcy5vCitMSUJfT0JKUyArPSBvYmplY3QubworTElCX09CSlMgKz0gb2lkLWFycmF5Lm8KK0xJQl9PQkpTICs9IG9pZG1hcC5vCitMSUJfT0JKUyArPSBvaWRzZXQubworTElCX09CSlMgKz0gcGFjay1iaXRtYXAtd3JpdGUubworTElCX09CSlMgKz0gcGFjay1iaXRtYXAubworTElCX09CSlMgKz0gcGFjay1jaGVjay5vCitMSUJfT0JKUyArPSBwYWNrLW9iamVjdHMubworTElCX09CSlMgKz0gcGFjay1yZXZpbmRleC5vCitMSUJfT0JKUyArPSBwYWNrLXdyaXRlLm8KK0xJQl9PQkpTICs9IHBhY2tmaWxlLm8KK0xJQl9PQkpTICs9IHBhZ2VyLm8KK0xJQl9PQkpTICs9IHBhcnNlLW9wdGlvbnMtY2IubworTElCX09CSlMgKz0gcGFyc2Utb3B0aW9ucy5vCitMSUJfT0JKUyArPSBwYXRjaC1kZWx0YS5vCitMSUJfT0JKUyArPSBwYXRjaC1pZHMubworTElCX09CSlMgKz0gcGF0aC5vCitMSUJfT0JKUyArPSBwYXRoc3BlYy5vCitMSUJfT0JKUyArPSBwa3QtbGluZS5vCitMSUJfT0JKUyArPSBwcmVsb2FkLWluZGV4Lm8KK0xJQl9PQkpTICs9IHByZXR0eS5vCitMSUJfT0JKUyArPSBwcmlvLXF1ZXVlLm8KK0xJQl9PQkpTICs9IHByb2dyZXNzLm8KK0xJQl9PQkpTICs9IHByb21pc29yLXJlbW90ZS5vCitMSUJfT0JKUyArPSBwcm9tcHQubworTElCX09CSlMgKz0gcHJvdG9jb2wubworTElCX09CSlMgKz0gcHJ1bmUtcGFja2VkLm8KK0xJQl9PQkpTICs9IHF1b3RlLm8KK0xJQl9PQkpTICs9IHJhbmdlLWRpZmYubworTElCX09CSlMgKz0gcmVhY2hhYmxlLm8KK0xJQl9PQkpTICs9IHJlYWQtY2FjaGUubworTElCX09CSlMgKz0gcmViYXNlLWludGVyYWN0aXZlLm8KK0xJQl9PQkpTICs9IHJlYmFzZS5vCitMSUJfT0JKUyArPSByZWYtZmlsdGVyLm8KK0xJQl9PQkpTICs9IHJlZmxvZy13YWxrLm8KK0xJQl9PQkpTICs9IHJlZnMubworTElCX09CSlMgKz0gcmVmcy9maWxlcy1iYWNrZW5kLm8KK0xJQl9PQkpTICs9IHJlZnMvaXRlcmF0b3IubworTElCX09CSlMgKz0gcmVmcy9wYWNrZWQtYmFja2VuZC5vCitMSUJfT0JKUyArPSByZWZzL3JlZi1jYWNoZS5vCitMSUJfT0JKUyArPSByZWZzcGVjLm8KK0xJQl9PQkpTICs9IHJlbW90ZS5vCitMSUJfT0JKUyArPSByZXBsYWNlLW9iamVjdC5vCitMSUJfT0JKUyArPSByZXBvLXNldHRpbmdzLm8KK0xJQl9PQkpTICs9IHJlcG9zaXRvcnkubworTElCX09CSlMgKz0gcmVyZXJlLm8KK0xJQl9PQkpTICs9IHJlc2V0Lm8KK0xJQl9PQkpTICs9IHJlc29sdmUtdW5kby5vCitMSUJfT0JKUyArPSByZXZpc2lvbi5vCitMSUJfT0JKUyArPSBydW4tY29tbWFuZC5vCitMSUJfT0JKUyArPSBzZW5kLXBhY2subworTElCX09CSlMgKz0gc2VxdWVuY2VyLm8KK0xJQl9PQkpTICs9IHNlcnZlLm8KK0xJQl9PQkpTICs9IHNlcnZlci1pbmZvLm8KK0xJQl9PQkpTICs9IHNldHVwLm8KK0xJQl9PQkpTICs9IHNoYTEtZmlsZS5vCitMSUJfT0JKUyArPSBzaGExLWxvb2t1cC5vCitMSUJfT0JKUyArPSBzaGExLW5hbWUubworTElCX09CSlMgKz0gc2hhbGxvdy5vCitMSUJfT0JKUyArPSBzaWRlYmFuZC5vCitMSUJfT0JKUyArPSBzaWdjaGFpbi5vCitMSUJfT0JKUyArPSBzcGxpdC1pbmRleC5vCitMSUJfT0JKUyArPSBzdGFibGUtcXNvcnQubworTElCX09CSlMgKz0gc3RyYnVmLm8KK0xJQl9PQkpTICs9IHN0cmVhbWluZy5vCitMSUJfT0JKUyArPSBzdHJpbmctbGlzdC5vCitMSUJfT0JKUyArPSBzdWItcHJvY2Vzcy5vCitMSUJfT0JKUyArPSBzdWJtb2R1bGUtY29uZmlnLm8KK0xJQl9PQkpTICs9IHN1Ym1vZHVsZS5vCitMSUJfT0JKUyArPSBzeW1saW5rcy5vCitMSUJfT0JKUyArPSB0YWcubworTElCX09CSlMgKz0gdGVtcGZpbGUubworTElCX09CSlMgKz0gdGhyZWFkLXV0aWxzLm8KK0xJQl9PQkpTICs9IHRtcC1vYmpkaXIubworTElCX09CSlMgKz0gdHJhY2UubworTElCX09CSlMgKz0gdHJhY2UyLm8KK0xJQl9PQkpTICs9IHRyYWNlMi90cjJfY2ZnLm8KK0xJQl9PQkpTICs9IHRyYWNlMi90cjJfY21kX25hbWUubworTElCX09CSlMgKz0gdHJhY2UyL3RyMl9kc3QubworTElCX09CSlMgKz0gdHJhY2UyL3RyMl9zaWQubworTElCX09CSlMgKz0gdHJhY2UyL3RyMl9zeXNlbnYubworTElCX09CSlMgKz0gdHJhY2UyL3RyMl90YnVmLm8KK0xJQl9PQkpTICs9IHRyYWNlMi90cjJfdGd0X2V2ZW50Lm8KK0xJQl9PQkpTICs9IHRyYWNlMi90cjJfdGd0X25vcm1hbC5vCitMSUJfT0JKUyArPSB0cmFjZTIvdHIyX3RndF9wZXJmLm8KK0xJQl9PQkpTICs9IHRyYWNlMi90cjJfdGxzLm8KK0xJQl9PQkpTICs9IHRyYWlsZXIubworTElCX09CSlMgKz0gdHJhbnNwb3J0LWhlbHBlci5vCitMSUJfT0JKUyArPSB0cmFuc3BvcnQubworTElCX09CSlMgKz0gdHJlZS1kaWZmLm8KK0xJQl9PQkpTICs9IHRyZWUtd2Fsay5vCitMSUJfT0JKUyArPSB0cmVlLm8KK0xJQl9PQkpTICs9IHVucGFjay10cmVlcy5vCitMSUJfT0JKUyArPSB1cGxvYWQtcGFjay5vCitMSUJfT0JKUyArPSB1cmwubworTElCX09CSlMgKz0gdXJsbWF0Y2gubworTElCX09CSlMgKz0gdXNhZ2UubworTElCX09CSlMgKz0gdXNlcmRpZmYubworTElCX09CSlMgKz0gdXRmOC5vCitMSUJfT0JKUyArPSB2YXJpbnQubworTElCX09CSlMgKz0gdmVyc2lvbi5vCitMSUJfT0JKUyArPSB2ZXJzaW9uY21wLm8KK0xJQl9PQkpTICs9IHdhbGtlci5vCitMSUJfT0JKUyArPSB3aWxkbWF0Y2gubworTElCX09CSlMgKz0gd29ya3RyZWUubworTElCX09CSlMgKz0gd3JhcHBlci5vCitMSUJfT0JKUyArPSB3cml0ZS1vci1kaWUubworTElCX09CSlMgKz0gd3MubworTElCX09CSlMgKz0gd3Qtc3RhdHVzLm8KK0xJQl9PQkpTICs9IHhkaWZmLWludGVyZmFjZS5vCitMSUJfT0JKUyArPSB6bGliLm8KKworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vYWRkLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2FtLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2Fubm90YXRlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2FwcGx5Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2FyY2hpdmUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vYmxhbWUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vYnJhbmNoLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2J1bmRsZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jYXQtZmlsZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jaGVjay1hdHRyLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NoZWNrLWlnbm9yZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jaGVjay1tYWlsbWFwLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NoZWNrLXJlZi1mb3JtYXQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXgubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY2hlY2tvdXQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY2xlYW4ubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY2xvbmUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY29sdW1uLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NvbW1pdC1ncmFwaC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jb21taXQtdHJlZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jb21taXQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY29uZmlnLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NvdW50LW9iamVjdHMubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY3JlZGVudGlhbC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9kZXNjcmliZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9kaWZmLWZpbGVzLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2RpZmYtaW5kZXgubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZGlmZi10cmVlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2RpZmYubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZGlmZnRvb2wubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZW52LS1oZWxwZXIubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZmFzdC1leHBvcnQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZmV0Y2gtcGFjay5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9mZXRjaC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2Zvci1lYWNoLXJlZi5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9mc2NrLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2djLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2dldC10YXItY29tbWl0LWlkLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2dyZXAubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vaGFzaC1vYmplY3QubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vaGVscC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9pbmRleC1wYWNrLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2luaXQtZGIubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2xvZy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9scy1maWxlcy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9scy1yZW1vdGUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbHMtdHJlZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9tYWlsaW5mby5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9tYWlsc3BsaXQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWVyZ2UtYmFzZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9tZXJnZS1maWxlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21lcmdlLWluZGV4Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21lcmdlLW91cnMubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21lcmdlLXRyZWUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWVyZ2UubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWt0YWcubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWt0cmVlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL211bHRpLXBhY2staW5kZXgubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbXYubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbmFtZS1yZXYubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbm90ZXMubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcGFjay1vYmplY3RzLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3BhY2stcmVkdW5kYW50Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3BhY2stcmVmcy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9wYXRjaC1pZC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9wcnVuZS1wYWNrZWQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcHJ1bmUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcHVsbC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9wdXNoLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JhbmdlLWRpZmYubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVhZC10cmVlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JlYmFzZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yZWNlaXZlLXBhY2subworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVmbG9nLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JlbW90ZS1leHQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVtb3RlLWZkLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JlbW90ZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yZXBhY2subworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVwbGFjZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yZXJlcmUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVzZXQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmV2LWxpc3QubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmV2LXBhcnNlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JldmVydC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9ybS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9zZW5kLXBhY2subworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc2hvcnRsb2cubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc2hvdy1icmFuY2gubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc2hvdy1pbmRleC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9zaG93LXJlZi5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc3Rhc2gubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc3RyaXBzcGFjZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9zeW1ib2xpYy1yZWYubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdGFnLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3VucGFjay1maWxlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3VucGFjay1vYmplY3RzLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3VwZGF0ZS1pbmRleC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi91cGRhdGUtcmVmLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi91cGxvYWQtYXJjaGl2ZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi91cGxvYWQtcGFjay5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi92YXIubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi92ZXJpZnktcGFjay5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi92ZXJpZnktdGFnLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3dvcmt0cmVlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3dyaXRlLXRyZWUubworCisjIFRISVJEX1BBUlRZX1NPVVJDRVMgaXMgYSBsaXN0IG9mIHBhdHRlcm5zIGNvbXBhdGlibGUgd2l0aCB0aGUKKyMgJChmaWx0ZXIpIGFuZCAkKGZpbHRlci1vdXQpIGZhbWlseSBvZiBmdW5jdGlvbnMuIFRoZXkgc3BlY2lmeSBzb3VyY2UKKyMgZmlsZXMgd2hpY2ggYXJlIHRha2VuIGZyb20gc29tZSB0aGlyZC1wYXJ0eSBzb3VyY2Ugd2hlcmUgd2Ugd2FudCB0byBiZQorIyBsZXNzIHN0cmljdCBhYm91dCBpc3N1ZXMgc3VjaCBhcyBjb2Rpbmcgc3R5bGUgc28gd2UgZG9uJ3QgZGl2ZXJnZSBmcm9tCisjIHVwc3RyZWFtIHVubmVjZXNzYXJpbHkgKG1ha2luZyBtZXJnaW5nIGluIGZ1dHVyZSBjaGFuZ2VzIGVhc2llcikuCitUSElSRF9QQVJUWV9TT1VSQ0VTICs9IGNvbXBhdC9pbmV0X250b3AuYworVEhJUkRfUEFSVFlfU09VUkNFUyArPSBjb21wYXQvaW5ldF9wdG9uLmMKK1RISVJEX1BBUlRZX1NPVVJDRVMgKz0gY29tcGF0L25lZG1hbGxvYy8lCitUSElSRF9QQVJUWV9TT1VSQ0VTICs9IGNvbXBhdC9vYnN0YWNrLiUKK1RISVJEX1BBUlRZX1NPVVJDRVMgKz0gY29tcGF0L3BvbGwvJQorVEhJUkRfUEFSVFlfU09VUkNFUyArPSBjb21wYXQvcmVnZXgvJQorVEhJUkRfUEFSVFlfU09VUkNFUyArPSBzaGExY29sbGlzaW9uZGV0ZWN0aW9uLyUKK1RISVJEX1BBUlRZX1NPVVJDRVMgKz0gc2hhMWRjLyUKKworR0lUTElCUyA9IGNvbW1vbi1tYWluLm8gJChMSUJfRklMRSkgJChYRElGRl9MSUIpCitFWFRMSUJTID0KKworR0lUX1VTRVJfQUdFTlQgPSBnaXQvJChHSVRfVkVSU0lPTikKKworaWZlcSAoJCh3aWxkY2FyZCBzaGExY29sbGlzaW9uZGV0ZWN0aW9uL2xpYi9zaGExLmgpLHNoYTFjb2xsaXNpb25kZXRlY3Rpb24vbGliL3NoYTEuaCkKK0RDX1NIQTFfU1VCTU9EVUxFID0gYXV0bwogZW5kaWYKIAotaWZuZGVmIElOU1RBTEwKLQlJTlNUQUxMID0gaW5zdGFsbAotZW5kaWYKKyMgU2V0IENGTEFHUywgTERGTEFHUyBhbmQgb3RoZXIgKkZMQUdTIHZhcmlhYmxlcy4gVGhlc2UgbWlnaHQgYmUKKyMgdHdlYWtlZCBieSBjb25maWcuKiBiZWxvdyBhcyB3ZWxsIGFzIHRoZSBjb21tYW5kLWxpbmUsIGJvdGggb2YKKyMgd2hpY2gnbGwgb3ZlcnJpZGUgdGhlc2UgZGVmYXVsdHMuCitDRkxBR1MgPSAtZyAtTzIgLVdhbGwKK0xERkxBR1MgPQorQ0NfTERfRFlOUEFUSCA9IC1XbCwtcnBhdGgsCitCQVNJQ19DRkxBR1MgPSAtSS4KK0JBU0lDX0xERkxBR1MgPQogCi1STV9SRiAgICAgPz0gcm0gLXJmCi1STURJUiAgICAgPz0gcm1kaXIKKyMgbGlicmFyeSBmbGFncworQVJGTEFHUyA9IHJjcworUFRIUkVBRF9DRkxBR1MgPQogCi1JTlNUQUxMX0QwID0gJChJTlNUQUxMKSAtZCAtbSA3NTUgIyBzcGFjZSBpcyByZXF1aXJlZCBoZXJlCi1JTlNUQUxMX0QxID0KLUlOU1RBTExfUjAgPSAkKElOU1RBTEwpIC1tIDY0NCAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKLUlOU1RBTExfUjEgPQotSU5TVEFMTF9YMCA9ICQoSU5TVEFMTCkgLW0gNzU1ICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQotSU5TVEFMTF9YMSA9Ci1JTlNUQUxMX0EwID0gZmluZCAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKLUlOU1RBTExfQTEgPSB8IGNwaW8gLXB1ZAotSU5TVEFMTF9MMCA9IHJtIC1mICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQotSU5TVEFMTF9MMSA9ICYmIGxuICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQotSU5TVEFMTF9MMiA9Ci1JTlNUQUxMX0wzID0KKyMgRm9yIHRoZSAnc3BhcnNlJyB0YXJnZXQKK1NQQVJTRV9GTEFHUyA/PQorU1BfRVhUUkFfRkxBR1MgPQogCi1SRU1PVkVfRDAgID0gJChSTURJUikgIyBzcGFjZSBpcyByZXF1aXJlZCBoZXJlCi1SRU1PVkVfRDEgID0gfHwgdHJ1ZQotUkVNT1ZFX0YwICA9ICQoUk1fUkYpICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQotUkVNT1ZFX0YxICA9Ci1DTEVBTl9EU1QgID0gdHJ1ZQorIyBGb3IgdGhlICdjb2NjaWNoZWNrJyB0YXJnZXQ7IHNldHRpbmcgU1BBVENIX0JBVENIX1NJWkUgaGlnaGVyIHdpbGwKKyMgdXN1YWxseSByZXN1bHQgaW4gbGVzcyBDUFUgdXNhZ2UgYXQgdGhlIGNvc3Qgb2YgaGlnaGVyIHBlYWsgbWVtb3J5LgorIyBTZXR0aW5nIGl0IHRvIDAgd2lsbCBmZWVkIGFsbCBmaWxlcyBpbiBhIHNpbmdsZSBzcGF0Y2ggaW52b2NhdGlvbi4KK1NQQVRDSF9GTEFHUyA9IC0tYWxsLWluY2x1ZGVzIC0tcGF0Y2ggLgorU1BBVENIX0JBVENIX1NJWkUgPSAxCiAKLWlmbmRlZiBWCi0JUVVJRVQgICAgICAgICAgPSBACi0JUVVJRVRfR0VOICAgICAgPSAkKFFVSUVUKWVjaG8gJyAgICcgR0VOICckQCcgJiYKLQlRVUlFVF9JTkRFWCAgICA9ICQoUVVJRVQpZWNobyAnICAgJyBJTkRFWCAkKGRpciAkQCkgJiYKLQlRVUlFVF9NU0dGTVQwICA9ICQoUVVJRVQpcHJpbnRmICcgICAgTVNHRk1UICUxMnMgJyAkQCAmJiB2PWAKLQlRVUlFVF9NU0dGTVQxICA9IDI+JjFgICYmIGVjaG8gIiQkdiIgfCBzZWQgLWUgJ3MvZnV6enkgdHJhbnNsYXRpb25zL2Z1enp5LycgfCBzZWQgLWUgJ3MvIG1lc3NhZ2VzKi8vZycKLQlRVUlFVF8yREVWTlVMTCA9IDI+L2Rldi9udWxsCi0KLQlJTlNUQUxMX0QwID0gZGlyPQotCUlOU1RBTExfRDEgPSAmJiBlY2hvICcgJyBERVNUICQkZGlyICYmICQoSU5TVEFMTCkgLWQgLW0gNzU1ICIkJGRpciIKLQlJTlNUQUxMX1IwID0gc3JjPQotCUlOU1RBTExfUjEgPSAmJiBlY2hvICcgICAnIElOU1RBTEwgNjQ0IGBiYXNlbmFtZSAkJHNyY2AgJiYgJChJTlNUQUxMKSAtbSA2NDQgJCRzcmMKLQlJTlNUQUxMX1gwID0gc3JjPQotCUlOU1RBTExfWDEgPSAmJiBlY2hvICcgICAnIElOU1RBTEwgNzU1IGBiYXNlbmFtZSAkJHNyY2AgJiYgJChJTlNUQUxMKSAtbSA3NTUgJCRzcmMKLQlJTlNUQUxMX0EwID0gc3JjPQotCUlOU1RBTExfQTEgPSAmJiBlY2hvICcgICAnIElOU1RBTEwgJyAgICcgYGJhc2VuYW1lICIkJHNyYyJgICYmIGZpbmQgIiQkc3JjIiB8IGNwaW8gLXB1ZAotCi0JSU5TVEFMTF9MMCA9IGRzdD0KLQlJTlNUQUxMX0wxID0gJiYgc3JjPQotCUlOU1RBTExfTDIgPSAmJiBkc3Q9Ci0JSU5TVEFMTF9MMyA9ICYmIGVjaG8gJyAgICcgJ0xJTksgICAgICAgJyBgYmFzZW5hbWUgIiQkZHN0ImAgJy0+JyBgYmFzZW5hbWUgIiQkc3JjImAgJiYgcm0gLWYgIiQkZHN0IiAmJiBsbiAiJCRzcmMiICIkJGRzdCIKLQotCUNMRUFOX0RTVCA9IGVjaG8gJyAnIFVOSU5TVEFMTAotCVJFTU9WRV9EMCA9IGRpcj0KLQlSRU1PVkVfRDEgPSAmJiBlY2hvICcgJyBSRU1PVkUgJCRkaXIgJiYgdGVzdCAtZCAiJCRkaXIiICYmICQoUk1ESVIpICIkJGRpciIgfHwgdHJ1ZQotCVJFTU9WRV9GMCA9IGRzdD0KLQlSRU1PVkVfRjEgPSAmJiBlY2hvICcgICAnIFJFTU9WRSBgYmFzZW5hbWUgIiQkZHN0ImAgJiYgJChSTV9SRikgIiQkZHN0IgotZW5kaWYKLQotVENMVEtfUEFUSCA/PSB3aXNoCi1pZmVxICguLywkKGRpciAkKFRDTFRLX1BBVEgpKSkKLQlUQ0xfUEFUSCA/PSAkKHN1YnN0IHdpc2gsdGNsc2gsJChUQ0xUS19QQVRIKSkKLWVsc2UKLQlUQ0xfUEFUSCA/PSAkKGRpciAkKFRDTFRLX1BBVEgpKSQobm90ZGlyICQoc3Vic3Qgd2lzaCx0Y2xzaCwkKFRDTFRLX1BBVEgpKSkKLWVuZGlmCi0KLWlmZXEgKCQodW5hbWVfUyksRGFyd2luKQotCVRLRlJBTUVXT1JLID0gL0xpYnJhcnkvRnJhbWV3b3Jrcy9Uay5mcmFtZXdvcmsvUmVzb3VyY2VzL1dpc2guYXBwCi0JaWZlcSAoJChzaGVsbCBlY2hvICIkKHVuYW1lX1IpIiB8IGF3ayAtRi4gJ3tpZiAoJCQxID49IDkpIHByaW50ICJ5In0nKV8kKHNoZWxsIHRlc3QgLWQgJChUS0ZSQU1FV09SSykgfHwgZWNobyBuKSx5X24pCi0JCVRLRlJBTUVXT1JLID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvVGsuZnJhbWV3b3JrL1Jlc291cmNlcy9XaXNoLmFwcAotCQlpZmVxICgkKHNoZWxsIHRlc3QgLWQgJChUS0ZSQU1FV09SSykgfHwgZWNobyBuKSxuKQotCQkJVEtGUkFNRVdPUksgPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Uay5mcmFtZXdvcmsvUmVzb3VyY2VzL1dpc2hcIFNoZWxsLmFwcAotCQllbmRpZgotCWVuZGlmCi0JVEtFWEVDVVRBQkxFID0gJChzaGVsbCBiYXNlbmFtZSAiJChUS0ZSQU1FV09SSykiIC5hcHApCi1lbmRpZgotCi1pZmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHMpLHMpCi1RVUlFVF9HRU4gPQotZW5kaWYKLQoraW5jbHVkZSBjb25maWcubWFrLnVuYW1lCistaW5jbHVkZSBjb25maWcubWFrLmF1dG9nZW4KIC1pbmNsdWRlIGNvbmZpZy5tYWsKIAotREVTVERJUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVTVERJUikpCi1naXRleGVjZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChnaXRleGVjZGlyKSkKLVNIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEgpKQotVENMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFRDTF9QQVRIKSkKLVRDTFRLX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFRDTFRLX1BBVEgpKQotVENMVEtfUEFUSF9TRUQgPSAkKHN1YnN0ICcsJ1wnJywkKHN1YnN0IFwsXFwsJChUQ0xUS19QQVRIKSkpCi0KLWdnX2xpYmRpciA/PSAkKHNoYXJlZGlyKS9naXQtZ3VpL2xpYgotbGliZGlyX1NRICA9ICQoc3Vic3QgJywnXCcnLCQoZ2dfbGliZGlyKSkKLWxpYmRpcl9TRUQgPSAkKHN1YnN0ICcsJ1wnJywkKHN1YnN0IFwsXFwsJChnZ19saWJkaXJfc2VkX2luKSkpCi1leGVkaXIgICAgID0gJChkaXIgJChnaXRleGVjZGlyKSlzaGFyZS9naXQtZ3VpL2xpYgotCi1HSVRHVUlfU0NSSVBUICAgOj0gJCQwCi1HSVRHVUlfUkVMQVRJVkUgOj0KLUdJVEdVSV9NQUNPU1hBUFAgOj0KLQotaWZlcSAoJCh1bmFtZV9PKSxDeWd3aW4pCi0JR0lUR1VJX1NDUklQVCA6PSBgY3lncGF0aCAtLXdpbmRvd3MgLS1hYnNvbHV0ZSAiJChHSVRHVUlfU0NSSVBUKSJgCi0KLQkjIElzIHRoaXMgYSBDeWd3aW4gVGNsL1RrIGJpbmFyeT8gIElmIHNvIGl0IGtub3dzIGhvdyB0byBkbwotCSMgUE9TSVggcGF0aCB0cmFuc2xhdGlvbiBqdXN0IGxpa2UgY3lncGF0aCBkb2VzIGFuZCB3ZSBtdXN0Ci0JIyBrZWVwIGxpYmRpciBpbiBQT1NJWCBmb3JtYXQgc28gQ3lnd2luIHBhY2thZ2VzIG9mIGdpdC1ndWkKLQkjIHdvcmsgbm8gbWF0dGVyIHdoZXJlIHRoZSB1c2VyIGluc3RhbGxzIHRoZW0uCi0JIwotCWlmZXEgKCQoc2hlbGwgZWNobyAncHV0cyBbZmlsZSBub3JtYWxpemUgL10nIHwgJyQoVENMX1BBVEhfU1EpJyksJChzaGVsbCBjeWdwYXRoIC0tbWl4ZWQgLS1hYnNvbHV0ZSAvKSkKLQkJZ2dfbGliZGlyX3NlZF9pbiA6PSAkKGdnX2xpYmRpcikKLQllbHNlCi0JCWdnX2xpYmRpcl9zZWRfaW4gOj0gJChzaGVsbCBjeWdwYXRoIC0td2luZG93cyAtLWFic29sdXRlICIkKGdnX2xpYmRpcikiKQotCWVuZGlmCi1lbHNlCi0JaWZlcSAoJChleGVkaXIpLCQoZ2dfbGliZGlyKSkKLQkJR0lUR1VJX1JFTEFUSVZFIDo9IDEKLQllbmRpZgotCWdnX2xpYmRpcl9zZWRfaW4gOj0gJChnZ19saWJkaXIpCitpZmRlZiBERVZFTE9QRVIKK2luY2x1ZGUgY29uZmlnLm1hay5kZXYKIGVuZGlmCisKK0FMTF9DRkxBR1MgPSAkKERFVkVMT1BFUl9DRkxBR1MpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKQorQUxMX0xERkxBR1MgPSAkKExERkxBR1MpCisKK2NvbW1hIDo9ICwKK2VtcHR5IDo9CitzcGFjZSA6PSAkKGVtcHR5KSAkKGVtcHR5KQorCitpZmRlZiBTQU5JVElaRQorU0FOSVRJWkVSUyA6PSAkKGZvcmVhY2ggZmxhZywkKHN1YnN0ICQoY29tbWEpLCQoc3BhY2UpLCQoU0FOSVRJWkUpKSwkKGZsYWcpKQorQkFTSUNfQ0ZMQUdTICs9IC1mc2FuaXRpemU9JChTQU5JVElaRSkgLWZuby1zYW5pdGl6ZS1yZWNvdmVyPSQoU0FOSVRJWkUpCitCQVNJQ19DRkxBR1MgKz0gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIKK2lmbmVxICgkKGZpbHRlciB1bmRlZmluZWQsJChTQU5JVElaRVJTKSksKQorQkFTSUNfQ0ZMQUdTICs9IC1ETk9fVU5BTElHTkVEX0xPQURTCitCQVNJQ19DRkxBR1MgKz0gLURTSEExRENfRk9SQ0VfQUxJR05FRF9BQ0NFU1MKK2VuZGlmCitpZm5lcSAoJChmaWx0ZXIgbGVhaywkKFNBTklUSVpFUlMpKSwpCitCQVNJQ19DRkxBR1MgKz0gLURTVVBQUkVTU19BTk5PVEFURURfTEVBS1MKK2VuZGlmCitpZm5lcSAoJChmaWx0ZXIgYWRkcmVzcywkKFNBTklUSVpFUlMpKSwpCitOT19SRUdFWCA9IE5lZWRlZEZvckFTQU4KK2VuZGlmCitlbmRpZgorCitpZm5kZWYgc3lzY29uZmRpcgoraWZlcSAoJChwcmVmaXgpLC91c3IpCitzeXNjb25mZGlyID0gL2V0YworZWxzZQorc3lzY29uZmRpciA9IGV0YworZW5kaWYKK2VuZGlmCisKK2lmbmRlZiBDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMKK0NPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUyA9IGF1dG8KK2VuZGlmCisKK2lmZXEgKCQoQ09NUFVURV9IRUFERVJfREVQRU5ERU5DSUVTKSxhdXRvKQorZGVwX2NoZWNrID0gJChzaGVsbCAkKENDKSAkKEFMTF9DRkxBR1MpIFwKKwktYyAtTUYgL2Rldi9udWxsIC1NUSAvZGV2L251bGwgLU1NRCAtTVAgXAorCS14IGMgL2Rldi9udWxsIC1vIC9kZXYvbnVsbCAyPiYxOyBcCisJZWNobyAkJD8pCitpZmVxICgkKGRlcF9jaGVjayksMCkKK292ZXJyaWRlIENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUyA9IHllcworZWxzZQorb3ZlcnJpZGUgQ09NUFVURV9IRUFERVJfREVQRU5ERU5DSUVTID0gbm8KK2VuZGlmCitlbmRpZgorCitpZmVxICgkKENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUykseWVzKQorVVNFX0NPTVBVVEVEX0hFQURFUl9ERVBFTkRFTkNJRVMgPSBZZXNQbGVhc2UKK2Vsc2UKK2lmbmVxICgkKENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUyksbm8pCiskKGVycm9yIHBsZWFzZSBzZXQgQ09NUFVURV9IRUFERVJfREVQRU5ERU5DSUVTIHRvIHllcywgbm8sIG9yIGF1dG8gXAorKG5vdCAiJChDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMpIikpCitlbmRpZgorZW5kaWYKKworaWZkZWYgU0FORV9UT09MX1BBVEgKK1NBTkVfVE9PTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTQU5FX1RPT0xfUEFUSCkpCitCUk9LRU5fUEFUSF9GSVggPSAnc3xeXCMgQEBCUk9LRU5fUEFUSF9GSVhAQCQkfGdpdF9icm9rZW5fcGF0aF9maXggIiQoU0FORV9UT09MX1BBVEhfU1EpInwnCitQQVRIIDo9ICQoU0FORV9UT09MX1BBVEgpOiR7UEFUSH0KK2Vsc2UKK0JST0tFTl9QQVRIX0ZJWCA9ICcvXlwjIEBAQlJPS0VOX1BBVEhfRklYQEAkJC9kJworZW5kaWYKKworaWZlcSAoLCQoSE9TVF9DUFUpKQorCUJBU0lDX0NGTEFHUyArPSAtREdJVF9IT1NUX0NQVT0iXCIkKGZpcnN0d29yZCAkKHN1YnN0IC0sICwkKHVuYW1lX00pKSlcIiIKK2Vsc2UKKwlCQVNJQ19DRkxBR1MgKz0gLURHSVRfSE9TVF9DUFU9IlwiJChIT1NUX0NQVSlcIiIKK2VuZGlmCisKK2lmbmVxICgsJChJTkxJTkUpKQorCUJBU0lDX0NGTEFHUyArPSAtRGlubGluZT0kKElOTElORSkKK2VuZGlmCisKK2lmbmVxICgsJChTT0NLTEVOX1QpKQorCUJBU0lDX0NGTEFHUyArPSAtRHNvY2tsZW5fdD0kKFNPQ0tMRU5fVCkKK2VuZGlmCisKK2lmZXEgKHllcywkKFVTRV9QQVJFTlNfQVJPVU5EX0dFVFRFWFRfTikpCisJQkFTSUNfQ0ZMQUdTICs9IC1EVVNFX1BBUkVOU19BUk9VTkRfR0VUVEVYVF9OPTEKK2Vsc2UKK2lmZXEgKG5vLCQoVVNFX1BBUkVOU19BUk9VTkRfR0VUVEVYVF9OKSkKKwlCQVNJQ19DRkxBR1MgKz0gLURVU0VfUEFSRU5TX0FST1VORF9HRVRURVhUX049MAorZW5kaWYKK2VuZGlmCisKIGlmZXEgKCQodW5hbWVfUyksRGFyd2luKQotCWlmZXEgKCQoc2hlbGwgdGVzdCAtZCAkKFRLRlJBTUVXT1JLKSAmJiBlY2hvIHkpLHkpCi0JCUdJVEdVSV9NQUNPU1hBUFAgOj0gWWVzUGxlYXNlCisJaWZuZGVmIE5PX0ZJTksKKwkJaWZlcSAoJChzaGVsbCB0ZXN0IC1kIC9zdy9saWIgJiYgZWNobyB5KSx5KQorCQkJQkFTSUNfQ0ZMQUdTICs9IC1JL3N3L2luY2x1ZGUKKwkJCUJBU0lDX0xERkxBR1MgKz0gLUwvc3cvbGliCisJCWVuZGlmCiAJZW5kaWYKLWVuZGlmCi1pZm5lcSAoLCQoZmluZHN0cmluZyBNSU5HVywkKHVuYW1lX1MpKSkKLWlmZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9SKSIgOiAnMVwuJyksMikKLQlOT19NU0dGTVQ9MQotZW5kaWYKLQlHSVRHVUlfV0lORE9XU19XUkFQUEVSIDo9IFllc1BsZWFzZQotCUdJVEdVSV9SRUxBVElWRSA6PSAxCisJaWZuZGVmIE5PX0RBUldJTl9QT1JUUworCQlpZmVxICgkKHNoZWxsIHRlc3QgLWQgL29wdC9sb2NhbC9saWIgJiYgZWNobyB5KSx5KQorCQkJQkFTSUNfQ0ZMQUdTICs9IC1JL29wdC9sb2NhbC9pbmNsdWRlCisJCQlCQVNJQ19MREZMQUdTICs9IC1ML29wdC9sb2NhbC9saWIKKwkJZW5kaWYKKwllbmRpZgorCWlmbmRlZiBOT19BUFBMRV9DT01NT05fQ1JZUFRPCisJCU5PX09QRU5TU0wgPSBZZXNQbGVhc2UKKwkJQVBQTEVfQ09NTU9OX0NSWVBUTyA9IFllc1BsZWFzZQorCQlDT01QQVRfQ0ZMQUdTICs9IC1EQVBQTEVfQ09NTU9OX0NSWVBUTworCWVuZGlmCisJTk9fUkVHRVggPSBZZXNQbGVhc2UKKwlQVEhSRUFEX0xJQlMgPQogZW5kaWYKIAotaWZkZWYgR0lUR1VJX01BQ09TWEFQUAotR0lUR1VJX01BSU4gOj0gZ2l0LWd1aS50Y2wKLQotZ2l0LWd1aTogR0lULVZFUlNJT04tRklMRSBHSVQtR1VJLVZBUlMKLQkkKFFVSUVUX0dFTilybSAtZiAkQCAkQCsgJiYgXAotCWVjaG8gJyMhJChTSEVMTF9QQVRIX1NRKScgPiRAKyAmJiBcCi0JZWNobyAnaWYgdGVzdCAieiQkKiIgPSB6dmVyc2lvbiB8fCcgPj4kQCsgJiYgXAotCWVjaG8gJyAgIHRlc3QgInokJCoiID0gei0tdmVyc2lvbicgPj4kQCsgJiYgXAotCWVjaG8gdGhlbiA+PiRAKyAmJiBcCi0JZWNobyAnCSdlY2hvIFwnZ2l0LWd1aSB2ZXJzaW9uICckKEdJVEdVSV9WRVJTSU9OKSdcJyA+PiRAKyAmJiBcCi0JZWNobyBlbHNlID4+JEArICYmIFwKLQllY2hvICcJbGliZGlyPSIkJHtHSVRfR1VJX0xJQl9ESVI6LSQobGliZGlyX1NRKX0iJyA+PiRAKyAmJiBcCi0JZWNobyAnCSdleGVjIFwiJyQkbGliZGlyL0dpdCBHdWkuYXBwL0NvbnRlbnRzL01hY09TLyQoc3Vic3QgXCwsJChUS0VYRUNVVEFCTEUpKSdcIiBcCi0JCSciJCQwIiAiJCRAIicgPj4kQCsgJiYgXAotCWVjaG8gZmkgPj4kQCsgJiYgXAotCWNobW9kICt4ICRAKyAmJiBcCi0JbXYgJEArICRACi0KLUdpdFwgR3VpLmFwcDogR0lULVZFUlNJT04tRklMRSBHSVQtR1VJLVZBUlMgXAotCQltYWNvc3gvSW5mby5wbGlzdCBcCi0JCW1hY29zeC9naXQtZ3VpLmljbnMgXAotCQltYWNvc3gvQXBwTWFpbi50Y2wgXAotCQkkKFRLRlJBTUVXT1JLKS9Db250ZW50cy9NYWNPUy8kKFRLRVhFQ1VUQUJMRSkKLQkkKFFVSUVUX0dFTilybSAtcmYgJyRAJyAnJEAnKyAmJiBcCi0JbWtkaXIgLXAgJyRAJysvQ29udGVudHMvTWFjT1MgJiYgXAotCW1rZGlyIC1wICckQCcrL0NvbnRlbnRzL1Jlc291cmNlcy9TY3JpcHRzICYmIFwKLQljcCAnJChzdWJzdCAnLCdcJycsJChzdWJzdCBcLCwkKFRLRlJBTUVXT1JLKS9Db250ZW50cy9NYWNPUy8kKFRLRVhFQ1VUQUJMRSkpKScgXAotCQknJEAnKy9Db250ZW50cy9NYWNPUyAmJiBcCi0JY3AgbWFjb3N4L2dpdC1ndWkuaWNucyAnJEAnKy9Db250ZW50cy9SZXNvdXJjZXMgJiYgXAotCXNlZCAtZSAncy9AQEdJVEdVSV9WRVJTSU9OQEAvJChHSVRHVUlfVkVSU0lPTikvZycgXAotCQktZSAncy9AQEdJVEdVSV9US0VYRUNVVEFCTEVAQC8kKFRLRVhFQ1VUQUJMRSkvZycgXAotCQltYWNvc3gvSW5mby5wbGlzdCBcCi0JCT4nJEAnKy9Db250ZW50cy9JbmZvLnBsaXN0ICYmIFwKLQlzZWQgLWUgJ3N8QEBnaXRleGVjZGlyQEB8JChnaXRleGVjZGlyX1NRKXwnIFwKLQkJLWUgJ3N8QEBHSVRHVUlfTElCRElSQEB8JChsaWJkaXJfU0VEKXwnIFwKLQkJbWFjb3N4L0FwcE1haW4udGNsIFwKLQkJPickQCcrL0NvbnRlbnRzL1Jlc291cmNlcy9TY3JpcHRzL0FwcE1haW4udGNsICYmIFwKLQltdiAnJEAnKyAnJEAnCitpZmRlZiBOT19MSUJHRU5fSAorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19MSUJHRU5fSAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9iYXNlbmFtZS5vCiBlbmRpZgogCi1pZmRlZiBHSVRHVUlfV0lORE9XU19XUkFQUEVSCi1HSVRHVUlfTUFJTiA6PSBnaXQtZ3VpLnRjbAorVVNFX0xJQlBDUkUyID89ICQoVVNFX0xJQlBDUkUpCiAKLWdpdC1ndWk6IHdpbmRvd3MvZ2l0LWd1aS5zaAotCWNwICQ8ICRACitpZm5lcSAoLCQoVVNFX0xJQlBDUkUyKSkKKwlpZmRlZiBVU0VfTElCUENSRTEKKyQoZXJyb3IgT25seSBzZXQgVVNFX0xJQlBDUkUyIChvciBpdHMgYWxpYXMgVVNFX0xJQlBDUkUpIG9yIFVTRV9MSUJQQ1JFMSwgbm90IGJvdGghKQorCWVuZGlmCisKKwlCQVNJQ19DRkxBR1MgKz0gLURVU0VfTElCUENSRTIKKwlFWFRMSUJTICs9IC1scGNyZTItOAogZW5kaWYKIAotJChHSVRHVUlfTUFJTik6IGdpdC1ndWkuc2ggR0lULVZFUlNJT04tRklMRSBHSVQtR1VJLVZBUlMKLQkkKFFVSUVUX0dFTilybSAtZiAkQCAkQCsgJiYgXAotCXNlZCAtZSAnMXN8IyEuKi9zaHwjISQoU0hFTExfUEFUSF9TUSl8JyBcCi0JCS1lICdzfEBAU0hFTExfUEFUSEBAfCQoU0hFTExfUEFUSF9TUSl8JyBcCi0JCS1lICcxLDMwc3xeIGFyZ3YwPSQkMHwgYXJndjA9JChHSVRHVUlfU0NSSVBUKXwnIFwKLQkJLWUgJzEsMzBzfF4gZXhlYyB3aXNoIHwgZXhlYyAnXCcnJChUQ0xUS19QQVRIX1NFRCknXCcnIHwnIFwKLQkJLWUgJ3MvQEBHSVRHVUlfVkVSU0lPTkBALyQoR0lUR1VJX1ZFUlNJT04pL2cnIFwKLQkJLWUgJ3N8QEBHSVRHVUlfUkVMQVRJVkVAQHwkKEdJVEdVSV9SRUxBVElWRSl8JyBcCi0JCS1lICckKEdJVEdVSV9SRUxBVElWRSlzfEBAR0lUR1VJX0xJQkRJUkBAfCQobGliZGlyX1NFRCl8JyBcCi0JCWdpdC1ndWkuc2ggPiRAKyAmJiBcCi0JY2htb2QgK3ggJEArICYmIFwKLQltdiAkQCsgJEAKK2lmZGVmIFVTRV9MSUJQQ1JFMQorCUJBU0lDX0NGTEFHUyArPSAtRFVTRV9MSUJQQ1JFMQorCUVYVExJQlMgKz0gLWxwY3JlCiAKLVhHRVRURVhUICAgPz0geGdldHRleHQKLWlmZGVmIE5PX01TR0ZNVAotCU1TR0ZNVCA/PSAkKFRDTF9QQVRIKSBwby9wbzJtc2cuc2gKK2lmZGVmIE5PX0xJQlBDUkUxX0pJVAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0xJQlBDUkUxX0pJVAorZW5kaWYKK2VuZGlmCisKK2lmZGVmIExJQlBDUkVESVIKKwlCQVNJQ19DRkxBR1MgKz0gLUkkKExJQlBDUkVESVIpL2luY2x1ZGUKKwlFWFRMSUJTICs9IC1MJChMSUJQQ1JFRElSKS8kKGxpYikgJChDQ19MRF9EWU5QQVRIKSQoTElCUENSRURJUikvJChsaWIpCitlbmRpZgorCitpZmRlZiBIQVZFX0FMTE9DQV9ICisJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9BTExPQ0FfSAorZW5kaWYKKworSU1BUF9TRU5EX0JVSUxEREVQUyA9CitJTUFQX1NFTkRfTERGTEFHUyA9CisKK2lmZGVmIE5PX0NVUkwKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19DVVJMCisJUkVNT1RFX0NVUkxfUFJJTUFSWSA9CisJUkVNT1RFX0NVUkxfQUxJQVNFUyA9CisJUkVNT1RFX0NVUkxfTkFNRVMgPQorCUVYQ0xVREVEX1BST0dSQU1TICs9IGdpdC1odHRwLWZldGNoIGdpdC1odHRwLXB1c2gKIGVsc2UKLQlNU0dGTVQgPz0gbXNnZm10Ci0JaWZuZXEgKCQoc2hlbGwgJChNU0dGTVQpIC0tdGNsIC1sIEMgLWQgLiAvZGV2L251bGwgMj4vZGV2L251bGw7IGVjaG8gJCQ/KSwwKQotCQlNU0dGTVQgOj0gJChUQ0xfUEFUSCkgcG8vcG8ybXNnLnNoCisJaWZkZWYgQ1VSTERJUgorCQkjIFRyeSAiLVdsLC1ycGF0aD0kKENVUkxESVIpLyQobGliKSIgaW4gc3VjaCBhIGNhc2UuCisJCUNVUkxfQ0ZMQUdTID0gLUkkKENVUkxESVIpL2luY2x1ZGUKKwkJQ1VSTF9MSUJDVVJMID0gLUwkKENVUkxESVIpLyQobGliKSAkKENDX0xEX0RZTlBBVEgpJChDVVJMRElSKS8kKGxpYikKKwllbHNlCisJCUNVUkxfQ0ZMQUdTID0KKwkJQ1VSTF9MSUJDVVJMID0KKwllbmRpZgorCisJaWZuZGVmIENVUkxfTERGTEFHUworCQlDVVJMX0xERkxBR1MgPSAkKGV2YWwgQ1VSTF9MREZMQUdTIDo9ICQkKHNoZWxsICQkKENVUkxfQ09ORklHKSAtLWxpYnMpKSQoQ1VSTF9MREZMQUdTKQorCWVuZGlmCisJQ1VSTF9MSUJDVVJMICs9ICQoQ1VSTF9MREZMQUdTKQorCisJaWZuZGVmIENVUkxfQ0ZMQUdTCisJCUNVUkxfQ0ZMQUdTID0gJChldmFsIENVUkxfQ0ZMQUdTIDo9ICQkKHNoZWxsICQkKENVUkxfQ09ORklHKSAtLWNmbGFncykpJChDVVJMX0NGTEFHUykKKwllbmRpZgorCUJBU0lDX0NGTEFHUyArPSAkKENVUkxfQ0ZMQUdTKQorCisJUkVNT1RFX0NVUkxfUFJJTUFSWSA9IGdpdC1yZW1vdGUtaHR0cCRYCisJUkVNT1RFX0NVUkxfQUxJQVNFUyA9IGdpdC1yZW1vdGUtaHR0cHMkWCBnaXQtcmVtb3RlLWZ0cCRYIGdpdC1yZW1vdGUtZnRwcyRYCisJUkVNT1RFX0NVUkxfTkFNRVMgPSAkKFJFTU9URV9DVVJMX1BSSU1BUlkpICQoUkVNT1RFX0NVUkxfQUxJQVNFUykKKwlQUk9HUkFNX09CSlMgKz0gaHR0cC1mZXRjaC5vCisJUFJPR1JBTVMgKz0gJChSRU1PVEVfQ1VSTF9OQU1FUykKKwljdXJsX2NoZWNrIDo9ICQoc2hlbGwgKGVjaG8gMDcwOTA4OyAkKENVUkxfQ09ORklHKSAtLXZlcm51bSB8IHNlZCAtZSAnL143MFtCQ10vcy9eLzAvJykgMj4vZGV2L251bGwgfCBzb3J0IC1yIHwgc2VkIC1uZSAycCkKKwlpZmVxICIkKGN1cmxfY2hlY2spIiAiMDcwOTA4IgorCQlpZm5kZWYgTk9fRVhQQVQKKwkJCVBST0dSQU1fT0JKUyArPSBodHRwLXB1c2gubworCQllbHNlCisJCQlFWENMVURFRF9QUk9HUkFNUyArPSBnaXQtaHR0cC1wdXNoCisJCWVuZGlmCisJZWxzZQorCQlFWENMVURFRF9QUk9HUkFNUyArPSBnaXQtaHR0cC1wdXNoCisJZW5kaWYKKwljdXJsX2NoZWNrIDo9ICQoc2hlbGwgKGVjaG8gMDcyMjAwOyAkKENVUkxfQ09ORklHKSAtLXZlcm51bSB8IHNlZCAtZSAnL143MFtCQ10vcy9eLzAvJykgMj4vZGV2L251bGwgfCBzb3J0IC1yIHwgc2VkIC1uZSAycCkKKwlpZmVxICIkKGN1cmxfY2hlY2spIiAiMDcyMjAwIgorCQlVU0VfQ1VSTF9GT1JfSU1BUF9TRU5EID0gWWVzUGxlYXNlCisJZW5kaWYKKwlpZmRlZiBVU0VfQ1VSTF9GT1JfSU1BUF9TRU5ECisJCUJBU0lDX0NGTEFHUyArPSAtRFVTRV9DVVJMX0ZPUl9JTUFQX1NFTkQKKwkJSU1BUF9TRU5EX0JVSUxEREVQUyA9IGh0dHAubworCQlJTUFQX1NFTkRfTERGTEFHUyArPSAkKENVUkxfTElCQ1VSTCkKKwllbmRpZgorCWlmbmRlZiBOT19FWFBBVAorCQlpZmRlZiBFWFBBVERJUgorCQkJQkFTSUNfQ0ZMQUdTICs9IC1JJChFWFBBVERJUikvaW5jbHVkZQorCQkJRVhQQVRfTElCRVhQQVQgPSAtTCQoRVhQQVRESVIpLyQobGliKSAkKENDX0xEX0RZTlBBVEgpJChFWFBBVERJUikvJChsaWIpIC1sZXhwYXQKKwkJZWxzZQorCQkJRVhQQVRfTElCRVhQQVQgPSAtbGV4cGF0CisJCWVuZGlmCisJCWlmZGVmIEVYUEFUX05FRURTX1hNTFBBUlNFX0gKKwkJCUJBU0lDX0NGTEFHUyArPSAtREVYUEFUX05FRURTX1hNTFBBUlNFX0gKKwkJZW5kaWYKIAllbmRpZgogZW5kaWYKK0lNQVBfU0VORF9MREZMQUdTICs9ICQoT1BFTlNTTF9MSU5LKSAkKE9QRU5TU0xfTElCU1NMKSAkKExJQl80X0NSWVBUTykKIAotbXNnc2RpciAgICAgPSAkKGdnX2xpYmRpcikvbXNncwotbXNnc2Rpcl9TUSAgPSAkKHN1YnN0ICcsJ1wnJywkKG1zZ3NkaXIpKQotUE9fVEVNUExBVEUgPSBwby9naXQtZ3VpLnBvdAotQUxMX1BPRklMRVMgPSAkKHdpbGRjYXJkIHBvLyoucG8pCi1BTExfTVNHRklMRVMgPSAkKHN1YnN0IC5wbywubXNnLCQoQUxMX1BPRklMRVMpKQoraWZkZWYgWkxJQl9QQVRICisJQkFTSUNfQ0ZMQUdTICs9IC1JJChaTElCX1BBVEgpL2luY2x1ZGUKKwlFWFRMSUJTICs9IC1MJChaTElCX1BBVEgpLyQobGliKSAkKENDX0xEX0RZTlBBVEgpJChaTElCX1BBVEgpLyQobGliKQorZW5kaWYKK0VYVExJQlMgKz0gLWx6CiAKLSQoUE9fVEVNUExBVEUpOiAkKFNDUklQVF9TSCkgJChBTExfTElCRklMRVMpCi0JJChYR0VUVEVYVCkgLWttYyAtTFRjbCAtbyAkQCAkKFNDUklQVF9TSCkgJChBTExfTElCRklMRVMpCi11cGRhdGUtcG86OiAkKFBPX1RFTVBMQVRFKQotCSQoZm9yZWFjaCBwLCAkKEFMTF9QT0ZJTEVTKSwgZWNobyBVcGRhdGluZyAkcCA7IG1zZ21lcmdlIC1VICRwICQoUE9fVEVNUExBVEUpIDsgKQotJChBTExfTVNHRklMRVMpOiAlLm1zZyA6ICUucG8KLQkkKFFVSUVUX01TR0ZNVDApJChNU0dGTVQpIC0tc3RhdGlzdGljcyAtLXRjbCAtbCAkKGJhc2VuYW1lICQobm90ZGlyICQ8KSkgLWQgJChkaXIgJEApICQ8ICQoUVVJRVRfTVNHRk1UMSkKK2lmbmRlZiBOT19PUEVOU1NMCisJT1BFTlNTTF9MSUJTU0wgPSAtbHNzbAorCWlmZGVmIE9QRU5TU0xESVIKKwkJQkFTSUNfQ0ZMQUdTICs9IC1JJChPUEVOU1NMRElSKS9pbmNsdWRlCisJCU9QRU5TU0xfTElOSyA9IC1MJChPUEVOU1NMRElSKS8kKGxpYikgJChDQ19MRF9EWU5QQVRIKSQoT1BFTlNTTERJUikvJChsaWIpCisJZWxzZQorCQlPUEVOU1NMX0xJTksgPQorCWVuZGlmCisJaWZkZWYgTkVFRFNfQ1JZUFRPX1dJVEhfU1NMCisJCU9QRU5TU0xfTElCU1NMICs9IC1sY3J5cHRvCisJZW5kaWYKK2Vsc2UKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19PUEVOU1NMCisJT1BFTlNTTF9MSUJTU0wgPQorZW5kaWYKK2lmZGVmIE5PX09QRU5TU0wKKwlMSUJfNF9DUllQVE8gPQorZWxzZQoraWZkZWYgTkVFRFNfU1NMX1dJVEhfQ1JZUFRPCisJTElCXzRfQ1JZUFRPID0gJChPUEVOU1NMX0xJTkspIC1sY3J5cHRvIC1sc3NsCitlbHNlCisJTElCXzRfQ1JZUFRPID0gJChPUEVOU1NMX0xJTkspIC1sY3J5cHRvCitlbmRpZgoraWZkZWYgQVBQTEVfQ09NTU9OX0NSWVBUTworCUxJQl80X0NSWVBUTyArPSAtZnJhbWV3b3JrIFNlY3VyaXR5IC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24KK2VuZGlmCitlbmRpZgoraWZuZGVmIE5PX0lDT05WCisJaWZkZWYgTkVFRFNfTElCSUNPTlYKKwkJaWZkZWYgSUNPTlZESVIKKwkJCUJBU0lDX0NGTEFHUyArPSAtSSQoSUNPTlZESVIpL2luY2x1ZGUKKwkJCUlDT05WX0xJTksgPSAtTCQoSUNPTlZESVIpLyQobGliKSAkKENDX0xEX0RZTlBBVEgpJChJQ09OVkRJUikvJChsaWIpCisJCWVsc2UKKwkJCUlDT05WX0xJTksgPQorCQllbmRpZgorCQlpZmRlZiBORUVEU19MSUJJTlRMX0JFRk9SRV9MSUJJQ09OVgorCQkJSUNPTlZfTElOSyArPSAtbGludGwKKwkJZW5kaWYKKwkJRVhUTElCUyArPSAkKElDT05WX0xJTkspIC1saWNvbnYKKwllbmRpZgorZW5kaWYKK2lmZGVmIElDT05WX09NSVRTX0JPTQorCUJBU0lDX0NGTEFHUyArPSAtRElDT05WX09NSVRTX0JPTQorZW5kaWYKK2lmZGVmIE5FRURTX0xJQkdFTgorCUVYVExJQlMgKz0gLWxnZW4KK2VuZGlmCitpZm5kZWYgTk9fR0VUVEVYVAoraWZuZGVmIExJQkNfQ09OVEFJTlNfTElCSU5UTAorCUVYVExJQlMgKz0gLWxpbnRsCitlbmRpZgorZW5kaWYKK2lmZGVmIE5FRURTX1NPQ0tFVAorCUVYVExJQlMgKz0gLWxzb2NrZXQKK2VuZGlmCitpZmRlZiBORUVEU19OU0wKKwlFWFRMSUJTICs9IC1sbnNsCitlbmRpZgoraWZkZWYgTkVFRFNfUkVTT0xWCisJRVhUTElCUyArPSAtbHJlc29sdgorZW5kaWYKK2lmZGVmIE5PX0RfVFlQRV9JTl9ESVJFTlQKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19EX1RZUEVfSU5fRElSRU5UCitlbmRpZgoraWZkZWYgTk9fR0VDT1NfSU5fUFdFTlQKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19HRUNPU19JTl9QV0VOVAorZW5kaWYKK2lmZGVmIE5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVAorZW5kaWYKK2lmZGVmIFVTRV9OU0VDCisJQkFTSUNfQ0ZMQUdTICs9IC1EVVNFX05TRUMKK2VuZGlmCitpZmRlZiBVU0VfU1RfVElNRVNQRUMKKwlCQVNJQ19DRkxBR1MgKz0gLURVU0VfU1RfVElNRVNQRUMKK2VuZGlmCitpZmRlZiBOT19OT1JFVFVSTgorCUJBU0lDX0NGTEFHUyArPSAtRE5PX05PUkVUVVJOCitlbmRpZgoraWZkZWYgTk9fTlNFQworCUJBU0lDX0NGTEFHUyArPSAtRE5PX05TRUMKK2VuZGlmCitpZmRlZiBTTlBSSU5URl9SRVRVUk5TX0JPR1VTCisJQ09NUEFUX0NGTEFHUyArPSAtRFNOUFJJTlRGX1JFVFVSTlNfQk9HVVMKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvc25wcmludGYubworZW5kaWYKK2lmZGVmIEZSRUFEX1JFQURTX0RJUkVDVE9SSUVTCisJQ09NUEFUX0NGTEFHUyArPSAtREZSRUFEX1JFQURTX0RJUkVDVE9SSUVTCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L2ZvcGVuLm8KK2VuZGlmCitpZmRlZiBOT19TWU1MSU5LX0hFQUQKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19TWU1MSU5LX0hFQUQKK2VuZGlmCitpZmRlZiBHRVRURVhUX1BPSVNPTgorJCh3YXJuaW5nIFRoZSBHRVRURVhUX1BPSVNPTiBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZCBpbiBmYXZvciBvZiBydW50aW1lIEdJVF9URVNUX0dFVFRFWFRfUE9JU09OLiBTZWUgdC9SRUFETUUhKQorZW5kaWYKK2lmZGVmIE5PX0dFVFRFWFQKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19HRVRURVhUCisJVVNFX0dFVFRFWFRfU0NIRU1FID89IGZhbGx0aHJvdWdoCitlbmRpZgoraWZkZWYgTk9fUE9MTAorCU5PX1BPTExfSCA9IFllc1BsZWFzZQorCU5PX1NZU19QT0xMX0ggPSBZZXNQbGVhc2UKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fUE9MTCAtSWNvbXBhdC9wb2xsCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3BvbGwvcG9sbC5vCitlbmRpZgoraWZkZWYgTk9fU1RSQ0FTRVNUUgorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19TVFJDQVNFU1RSCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3N0cmNhc2VzdHIubworZW5kaWYKK2lmZGVmIE5PX1NUUkxDUFkKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fU1RSTENQWQorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9zdHJsY3B5Lm8KK2VuZGlmCitpZmRlZiBOT19TVFJUT1VNQVgKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fU1RSVE9VTUFYCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3N0cnRvdW1heC5vIGNvbXBhdC9zdHJ0b2ltYXgubworZW5kaWYKK2lmZGVmIE5PX1NUUlRPVUxMCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX1NUUlRPVUxMCitlbmRpZgoraWZkZWYgTk9fU0VURU5WCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX1NFVEVOVgorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9zZXRlbnYubworZW5kaWYKK2lmZGVmIE5PX01LRFRFTVAKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fTUtEVEVNUAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9ta2R0ZW1wLm8KK2VuZGlmCitpZmRlZiBNS0RJUl9XT19UUkFJTElOR19TTEFTSAorCUNPTVBBVF9DRkxBR1MgKz0gLURNS0RJUl9XT19UUkFJTElOR19TTEFTSAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9ta2Rpci5vCitlbmRpZgoraWZkZWYgTk9fVU5TRVRFTlYKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fVU5TRVRFTlYKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvdW5zZXRlbnYubworZW5kaWYKK2lmZGVmIE5PX1NZU19TRUxFQ1RfSAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX1NZU19TRUxFQ1RfSAorZW5kaWYKK2lmZGVmIE5PX1BPTExfSAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX1BPTExfSAorZW5kaWYKK2lmZGVmIE5PX1NZU19QT0xMX0gKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19TWVNfUE9MTF9ICitlbmRpZgoraWZkZWYgTkVFRFNfU1lTX1BBUkFNX0gKKwlCQVNJQ19DRkxBR1MgKz0gLURORUVEU19TWVNfUEFSQU1fSAorZW5kaWYKK2lmZGVmIE5PX0lOVFRZUEVTX0gKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19JTlRUWVBFU19ICitlbmRpZgoraWZkZWYgTk9fSU5JVEdST1VQUworCUJBU0lDX0NGTEFHUyArPSAtRE5PX0lOSVRHUk9VUFMKK2VuZGlmCitpZmRlZiBOT19NTUFQCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX01NQVAKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvbW1hcC5vCitlbHNlCisJaWZkZWYgVVNFX1dJTjMyX01NQVAKKwkJQ09NUEFUX0NGTEFHUyArPSAtRFVTRV9XSU4zMl9NTUFQCisJCUNPTVBBVF9PQkpTICs9IGNvbXBhdC93aW4zMm1tYXAubworCWVuZGlmCitlbmRpZgoraWZkZWYgTU1BUF9QUkVWRU5UU19ERUxFVEUKKwlCQVNJQ19DRkxBR1MgKz0gLURNTUFQX1BSRVZFTlRTX0RFTEVURQorZW5kaWYKK2lmZGVmIE9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMKKwlDT01QQVRfQ0ZMQUdTICs9IC1ET0JKRUNUX0NSRUFUSU9OX01PREU9MQorZW5kaWYKK2lmZGVmIE5PX1NUUlVDVF9JVElNRVJWQUwKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fU1RSVUNUX0lUSU1FUlZBTAorCU5PX1NFVElUSU1FUiA9IFllc1BsZWFzZQorZW5kaWYKK2lmZGVmIE5PX1NFVElUSU1FUgorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19TRVRJVElNRVIKK2VuZGlmCitpZmRlZiBOT19QUkVBRAorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19QUkVBRAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9wcmVhZC5vCitlbmRpZgoraWZkZWYgTk9fRkFTVF9XT1JLSU5HX0RJUkVDVE9SWQorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0ZBU1RfV09SS0lOR19ESVJFQ1RPUlkKK2VuZGlmCitpZmRlZiBOT19UUlVTVEFCTEVfRklMRU1PREUKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19UUlVTVEFCTEVfRklMRU1PREUKK2VuZGlmCitpZmRlZiBORUVEU19NT0RFX1RSQU5TTEFUSU9OCisJQ09NUEFUX0NGTEFHUyArPSAtRE5FRURTX01PREVfVFJBTlNMQVRJT04KKwlDT01QQVRfT0JKUyArPSBjb21wYXQvc3RhdC5vCitlbmRpZgoraWZkZWYgTk9fSVBWNgorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0lQVjYKK2VuZGlmCitpZmRlZiBOT19JTlRQVFJfVAorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19JTlRQVFJfVAorZW5kaWYKK2lmZGVmIE5PX1VJTlRNQVhfVAorCUJBU0lDX0NGTEFHUyArPSAtRHVpbnRtYXhfdD11aW50MzJfdAorZW5kaWYKK2lmZGVmIE5PX1NPQ0tBRERSX1NUT1JBR0UKK2lmZGVmIE5PX0lQVjYKKwlCQVNJQ19DRkxBR1MgKz0gLURzb2NrYWRkcl9zdG9yYWdlPXNvY2thZGRyX2luCitlbHNlCisJQkFTSUNfQ0ZMQUdTICs9IC1Ec29ja2FkZHJfc3RvcmFnZT1zb2NrYWRkcl9pbjYKK2VuZGlmCitlbmRpZgoraWZkZWYgTk9fSU5FVF9OVE9QCisJTElCX09CSlMgKz0gY29tcGF0L2luZXRfbnRvcC5vCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fSU5FVF9OVE9QCitlbmRpZgoraWZkZWYgTk9fSU5FVF9QVE9OCisJTElCX09CSlMgKz0gY29tcGF0L2luZXRfcHRvbi5vCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fSU5FVF9QVE9OCitlbmRpZgoraWZkZWYgTk9fVU5JWF9TT0NLRVRTCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fVU5JWF9TT0NLRVRTCisJRVhDTFVERURfUFJPR1JBTVMgKz0gZ2l0LWNyZWRlbnRpYWwtY2FjaGUgZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbgorZWxzZQorCUxJQl9PQkpTICs9IHVuaXgtc29ja2V0Lm8KKwlQUk9HUkFNX09CSlMgKz0gY3JlZGVudGlhbC1jYWNoZS5vCisJUFJPR1JBTV9PQkpTICs9IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5vCitlbmRpZgogCi1saWIvdGNsSW5kZXg6ICQoQUxMX0xJQkZJTEVTKSBHSVQtR1VJLVZBUlMKLQkkKFFVSUVUX0lOREVYKWlmIGVjaG8gXAotCSAgJChmb3JlYWNoIHAsJChQUkVMT0FEX0ZJTEVTKSxzb3VyY2UgJHBcOykgXAotCSAgYXV0b19ta2luZGV4IGxpYiAkKHBhdHN1YnN0IGxpYi8lLCUsJChzb3J0ICQoQUxMX0xJQkZJTEVTKSkpIFwKLQl8ICQoVENMX1BBVEgpICQoUVVJRVRfMkRFVk5VTEwpOyB0aGVuIDogb2s7IFwKK2lmZGVmIE5PX0lDT05WCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fSUNPTlYKK2VuZGlmCisKK2lmZGVmIE9MRF9JQ09OVgorCUJBU0lDX0NGTEFHUyArPSAtRE9MRF9JQ09OVgorZW5kaWYKKworaWZkZWYgTk9fREVGTEFURV9CT1VORAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0RFRkxBVEVfQk9VTkQKK2VuZGlmCisKK2lmZGVmIE5PX1BPU0lYX0dPT0RJRVMKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19QT1NJWF9HT09ESUVTCitlbmRpZgorCitpZmRlZiBBUFBMRV9DT01NT05fQ1JZUFRPCisJIyBBcHBsZSBDb21tb25DcnlwdG8gcmVxdWlyZXMgY2h1bmtpbmcKKwlTSEExX01BWF9CTE9DS19TSVpFID0gMTAyNEwqMTAyNEwqMTAyNEwKK2VuZGlmCisKK2lmZGVmIE9QRU5TU0xfU0hBMQorCUVYVExJQlMgKz0gJChMSUJfNF9DUllQVE8pCisJQkFTSUNfQ0ZMQUdTICs9IC1EU0hBMV9PUEVOU1NMCitlbHNlCitpZmRlZiBCTEtfU0hBMQorCUxJQl9PQkpTICs9IGJsb2NrLXNoYTEvc2hhMS5vCisJQkFTSUNfQ0ZMQUdTICs9IC1EU0hBMV9CTEsKK2Vsc2UKK2lmZGVmIFBQQ19TSEExCisJTElCX09CSlMgKz0gcHBjL3NoYTEubyBwcGMvc2hhMXBwYy5vCisJQkFTSUNfQ0ZMQUdTICs9IC1EU0hBMV9QUEMKK2Vsc2UKK2lmZGVmIEFQUExFX0NPTU1PTl9DUllQVE8KKwlDT01QQVRfQ0ZMQUdTICs9IC1EQ09NTU9OX0RJR0VTVF9GT1JfT1BFTlNTTAorCUJBU0lDX0NGTEFHUyArPSAtRFNIQTFfQVBQTEUKK2Vsc2UKKwlEQ19TSEExIDo9IFllc1BsZWFzZQorCUJBU0lDX0NGTEFHUyArPSAtRFNIQTFfREMKKwlMSUJfT0JKUyArPSBzaGExZGNfZ2l0Lm8KK2lmZGVmIERDX1NIQTFfRVhURVJOQUwKKwlpZmRlZiBEQ19TSEExX1NVQk1PRFVMRQorCQlpZm5lcSAoJChEQ19TSEExX1NVQk1PRFVMRSksYXV0bykKKyQoZXJyb3IgT25seSBzZXQgRENfU0hBMV9FWFRFUk5BTCBvciBEQ19TSEExX1NVQk1PRFVMRSwgbm90IGJvdGgpCisJCWVuZGlmCisJZW5kaWYKKwlCQVNJQ19DRkxBR1MgKz0gLUREQ19TSEExX0VYVEVSTkFMCisJRVhUTElCUyArPSAtbHNoYTFkZXRlY3Rjb2xsCitlbHNlCitpZmRlZiBEQ19TSEExX1NVQk1PRFVMRQorCUxJQl9PQkpTICs9IHNoYTFjb2xsaXNpb25kZXRlY3Rpb24vbGliL3NoYTEubworCUxJQl9PQkpTICs9IHNoYTFjb2xsaXNpb25kZXRlY3Rpb24vbGliL3ViY19jaGVjay5vCisJQkFTSUNfQ0ZMQUdTICs9IC1ERENfU0hBMV9TVUJNT0RVTEUKK2Vsc2UKKwlMSUJfT0JKUyArPSBzaGExZGMvc2hhMS5vCisJTElCX09CSlMgKz0gc2hhMWRjL3ViY19jaGVjay5vCitlbmRpZgorCUJBU0lDX0NGTEFHUyArPSBcCisJCS1EU0hBMURDX05PX1NUQU5EQVJEX0lOQ0xVREVTIFwKKwkJLURTSEExRENfSU5JVF9TQUZFX0hBU0hfREVGQVVMVD0wIFwKKwkJLURTSEExRENfQ1VTVE9NX0lOQ0xVREVfU0hBMV9DPSJcImNhY2hlLmhcIiIgXAorCQktRFNIQTFEQ19DVVNUT01fSU5DTFVERV9VQkNfQ0hFQ0tfQz0iXCJnaXQtY29tcGF0LXV0aWwuaFwiIgorZW5kaWYKK2VuZGlmCitlbmRpZgorZW5kaWYKK2VuZGlmCisKK2lmZGVmIE9QRU5TU0xfU0hBMjU2CisJRVhUTElCUyArPSAkKExJQl80X0NSWVBUTykKKwlCQVNJQ19DRkxBR1MgKz0gLURTSEEyNTZfT1BFTlNTTAorZWxzZQoraWZkZWYgR0NSWVBUX1NIQTI1NgorCUJBU0lDX0NGTEFHUyArPSAtRFNIQTI1Nl9HQ1JZUFQKKwlFWFRMSUJTICs9IC1sZ2NyeXB0CitlbHNlCisJTElCX09CSlMgKz0gc2hhMjU2L2Jsb2NrL3NoYTI1Ni5vCisJQkFTSUNfQ0ZMQUdTICs9IC1EU0hBMjU2X0JMSworZW5kaWYKK2VuZGlmCisKK2lmZGVmIFNIQTFfTUFYX0JMT0NLX1NJWkUKKwlMSUJfT0JKUyArPSBjb21wYXQvc2hhMS1jaHVua2VkLm8KKwlCQVNJQ19DRkxBR1MgKz0gLURTSEExX01BWF9CTE9DS19TSVpFPSIkKFNIQTFfTUFYX0JMT0NLX1NJWkUpIgorZW5kaWYKK2lmZGVmIE5PX0hTVFJFUlJPUgorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19IU1RSRVJST1IKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvaHN0cmVycm9yLm8KK2VuZGlmCitpZmRlZiBOT19NRU1NRU0KKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fTUVNTUVNCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L21lbW1lbS5vCitlbmRpZgoraWZkZWYgTk9fR0VUUEFHRVNJWkUKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fR0VUUEFHRVNJWkUKK2VuZGlmCitpZmRlZiBJTlRFUk5BTF9RU09SVAorCUNPTVBBVF9DRkxBR1MgKz0gLURJTlRFUk5BTF9RU09SVAorZW5kaWYKK2lmZGVmIEhBVkVfSVNPX1FTT1JUX1MKKwlDT01QQVRfQ0ZMQUdTICs9IC1ESEFWRV9JU09fUVNPUlRfUworZWxzZQorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9xc29ydF9zLm8KK2VuZGlmCitpZmRlZiBSVU5USU1FX1BSRUZJWAorCUNPTVBBVF9DRkxBR1MgKz0gLURSVU5USU1FX1BSRUZJWAorZW5kaWYKKworaWZkZWYgTk9fUFRIUkVBRFMKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19QVEhSRUFEUworZWxzZQorCUJBU0lDX0NGTEFHUyArPSAkKFBUSFJFQURfQ0ZMQUdTKQorCUVYVExJQlMgKz0gJChQVEhSRUFEX0xJQlMpCitlbmRpZgorCitpZmRlZiBIQVZFX1BBVEhTX0gKKwlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX1BBVEhTX0gKK2VuZGlmCisKK2lmZGVmIEhBVkVfTElCQ0hBUlNFVF9ICisJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9MSUJDSEFSU0VUX0gKKwlFWFRMSUJTICs9ICQoQ0hBUlNFVF9MSUIpCitlbmRpZgorCitpZmRlZiBIQVZFX1NUUklOR1NfSAorCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfU1RSSU5HU19ICitlbmRpZgorCitpZmRlZiBIQVZFX0RFVl9UVFkKKwlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX0RFVl9UVFkKK2VuZGlmCisKK2lmZGVmIERJUl9IQVNfQlNEX0dST1VQX1NFTUFOVElDUworCUNPTVBBVF9DRkxBR1MgKz0gLURESVJfSEFTX0JTRF9HUk9VUF9TRU1BTlRJQ1MKK2VuZGlmCitpZmRlZiBVTlJFTElBQkxFX0ZTVEFUCisJQkFTSUNfQ0ZMQUdTICs9IC1EVU5SRUxJQUJMRV9GU1RBVAorZW5kaWYKK2lmZGVmIE5PX1JFR0VYCisJQ09NUEFUX0NGTEFHUyArPSAtSWNvbXBhdC9yZWdleAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9yZWdleC9yZWdleC5vCitlbmRpZgoraWZkZWYgTkFUSVZFX0NSTEYKKwlCQVNJQ19DRkxBR1MgKz0gLUROQVRJVkVfQ1JMRgorZW5kaWYKKworaWZkZWYgVVNFX05FRF9BTExPQ0FUT1IKKwlDT01QQVRfQ0ZMQUdTICs9IC1JY29tcGF0L25lZG1hbGxvYworCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLm8KKwlPVkVSUklERV9TVFJEVVAgPSBZZXNQbGVhc2UKK2VuZGlmCisKK2lmZGVmIE9WRVJSSURFX1NUUkRVUAorCUNPTVBBVF9DRkxBR1MgKz0gLURPVkVSUklERV9TVFJEVVAKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvc3RyZHVwLm8KK2VuZGlmCisKK2lmZGVmIEdJVF9URVNUX0NNUF9VU0VfQ09QSUVEX0NPTlRFWFQKKwlleHBvcnQgR0lUX1RFU1RfQ01QX1VTRV9DT1BJRURfQ09OVEVYVAorZW5kaWYKKworaWZuZGVmIE5PX01TR0ZNVF9FWFRFTkRFRF9PUFRJT05TCisJTVNHRk1UICs9IC0tY2hlY2sgLS1zdGF0aXN0aWNzCitlbmRpZgorCitpZmRlZiBIQVZFX0NMT0NLX0dFVFRJTUUKKwlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX0NMT0NLX0dFVFRJTUUKK2VuZGlmCisKK2lmZGVmIEhBVkVfQ0xPQ0tfTU9OT1RPTklDCisJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9DTE9DS19NT05PVE9OSUMKK2VuZGlmCisKK2lmZGVmIE5FRURTX0xJQlJUCisJRVhUTElCUyArPSAtbHJ0CitlbmRpZgorCitpZmRlZiBIQVZFX0JTRF9TWVNDVEwKKwlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX0JTRF9TWVNDVEwKK2VuZGlmCisKK2lmZGVmIEhBVkVfQlNEX0tFUk5fUFJPQ19TWVNDVEwKKwlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX0JTRF9LRVJOX1BST0NfU1lTQ1RMCitlbmRpZgorCitpZmRlZiBIQVZFX0dFVERFTElNCisJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9HRVRERUxJTQorZW5kaWYKKworaWZuZXEgKCQoUFJPQ0ZTX0VYRUNVVEFCTEVfUEFUSCksKQorCXByb2Nmc19leGVjdXRhYmxlX3BhdGhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFBST0NGU19FWEVDVVRBQkxFX1BBVEgpKQorCUJBU0lDX0NGTEFHUyArPSAnLURQUk9DRlNfRVhFQ1VUQUJMRV9QQVRIPSIkKHByb2Nmc19leGVjdXRhYmxlX3BhdGhfU1EpIicKK2VuZGlmCisKK2lmZGVmIEhBVkVfTlNfR0VUX0VYRUNVVEFCTEVfUEFUSAorCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfTlNfR0VUX0VYRUNVVEFCTEVfUEFUSAorZW5kaWYKKworaWZkZWYgSEFWRV9XUEdNUFRSCisJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9XUEdNUFRSCitlbmRpZgorCitpZmRlZiBGSUxFTk9fSVNfQV9NQUNSTworCUNPTVBBVF9DRkxBR1MgKz0gLURGSUxFTk9fSVNfQV9NQUNSTworCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9maWxlbm8ubworZW5kaWYKKworaWZkZWYgTkVFRF9BQ0NFU1NfUk9PVF9IQU5ETEVSCisJQ09NUEFUX0NGTEFHUyArPSAtRE5FRURfQUNDRVNTX1JPT1RfSEFORExFUgorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9hY2Nlc3MubworZW5kaWYKKworaWZlcSAoJChUQ0xUS19QQVRIKSwpCitOT19UQ0xUSyA9IE5vVGhhbmtzCitlbmRpZgorCitpZmVxICgkKFBFUkxfUEFUSCksKQorTk9fUEVSTCA9IE5vVGhhbmtzCitlbmRpZgorCitpZmVxICgkKFBZVEhPTl9QQVRIKSwpCitOT19QWVRIT04gPSBOb1RoYW5rcworZW5kaWYKKworaWZuZGVmIFBBR0VSX0VOVgorUEFHRVJfRU5WID0gTEVTUz1GUlggTFY9LWMKK2VuZGlmCisKK1FVSUVUX1NVQkRJUjAgID0gKyQoTUFLRSkgLUMgIyBzcGFjZSB0byBzZXBhcmF0ZSAtQyBhbmQgc3ViZGlyCitRVUlFVF9TVUJESVIxICA9CisKK2lmbmVxICgkKGZpbmRzdHJpbmcgdywkKE1BS0VGTEFHUykpLHcpCitQUklOVF9ESVIgPSAtLW5vLXByaW50LWRpcmVjdG9yeQorZWxzZSAjICJtYWtlIC13IgorTk9fU1VCRElSID0gOgorZW5kaWYKKworaWZuZXEgKCQoZmluZHN0cmluZyBzLCQoTUFLRUZMQUdTKSkscykKK2lmbmRlZiBWCisJUVVJRVRfQ0MgICAgICAgPSBAZWNobyAnICAgJyBDQyAkQDsKKwlRVUlFVF9BUiAgICAgICA9IEBlY2hvICcgICAnIEFSICRAOworCVFVSUVUX0xJTksgICAgID0gQGVjaG8gJyAgICcgTElOSyAkQDsKKwlRVUlFVF9CVUlMVF9JTiA9IEBlY2hvICcgICAnIEJVSUxUSU4gJEA7CisJUVVJRVRfR0VOICAgICAgPSBAZWNobyAnICAgJyBHRU4gJEA7CisJUVVJRVRfTE5DUCAgICAgPSBAZWNobyAnICAgJyBMTi9DUCAkQDsKKwlRVUlFVF9YR0VUVEVYVCA9IEBlY2hvICcgICAnIFhHRVRURVhUICRAOworCVFVSUVUX01TR0ZNVCAgID0gQGVjaG8gJyAgICcgTVNHRk1UICRAOworCVFVSUVUX0dDT1YgICAgID0gQGVjaG8gJyAgICcgR0NPViAkQDsKKwlRVUlFVF9TUCAgICAgICA9IEBlY2hvICcgICAnIFNQICQ8OworCVFVSUVUX0hEUiAgICAgID0gQGVjaG8gJyAgICcgSERSICQoPDpoY2M9aCk7CisJUVVJRVRfUkMgICAgICAgPSBAZWNobyAnICAgJyBSQyAkQDsKKwlRVUlFVF9TUEFUQ0ggICA9IEBlY2hvICcgICAnIFNQQVRDSCAkPDsKKwlRVUlFVF9TVUJESVIwICA9ICtAc3ViZGlyPQorCVFVSUVUX1NVQkRJUjEgID0gOyQoTk9fU1VCRElSKSBlY2hvICcgICAnIFNVQkRJUiAkJHN1YmRpcjsgXAorCQkJICQoTUFLRSkgJChQUklOVF9ESVIpIC1DICQkc3ViZGlyCisJZXhwb3J0IFYKKwlleHBvcnQgUVVJRVRfR0VOCisJZXhwb3J0IFFVSUVUX0JVSUxUX0lOCitlbmRpZgorZW5kaWYKKworaWZkZWYgTk9fSU5TVEFMTF9IQVJETElOS1MKKwlleHBvcnQgTk9fSU5TVEFMTF9IQVJETElOS1MKK2VuZGlmCisKKyMjIyBwcm9maWxlIGZlZWRiYWNrIGJ1aWxkCisjCisKKyMgQ2FuIGFkanVzdCB0aGlzIHRvIGJlIGEgZ2xvYmFsIGRpcmVjdG9yeSBpZiB5b3Ugd2FudCB0byBkbyBleHRlbmRlZAorIyBkYXRhIGdhdGhlcmluZworUFJPRklMRV9ESVIgOj0gJChDVVJESVIpCisKK2lmZXEgKCIkKFBST0ZJTEUpIiwiR0VOIikKKwlCQVNJQ19DRkxBR1MgKz0gLWZwcm9maWxlLWdlbmVyYXRlPSQoUFJPRklMRV9ESVIpIC1ETk9fTk9SRVRVUk49MQorCUVYVExJQlMgKz0gLWxnY292CisJZXhwb3J0IENDQUNIRV9ESVNBQkxFID0gdAorCVYgPSAxCitlbHNlCitpZm5lcSAoIiQoUFJPRklMRSkiLCIiKQorCUJBU0lDX0NGTEFHUyArPSAtZnByb2ZpbGUtdXNlPSQoUFJPRklMRV9ESVIpIC1mcHJvZmlsZS1jb3JyZWN0aW9uIC1ETk9fTk9SRVRVUk49MQorCWV4cG9ydCBDQ0FDSEVfRElTQUJMRSA9IHQKKwlWID0gMQorZW5kaWYKK2VuZGlmCisKKyMgU2hlbGwgcXVvdGUgKGRvIG5vdCB1c2UgJChjYWxsKSB0byBhY2NvbW1vZGF0ZSBhbmNpZW50IHNldHVwcyk7CisKK0VUQ19HSVRDT05GSUdfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKEVUQ19HSVRDT05GSUcpKQorRVRDX0dJVEFUVFJJQlVURVNfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKEVUQ19HSVRBVFRSSUJVVEVTKSkKKworREVTVERJUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVTVERJUikpCitiaW5kaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGJpbmRpcikpCitiaW5kaXJfcmVsYXRpdmVfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGJpbmRpcl9yZWxhdGl2ZSkpCittYW5kaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKG1hbmRpcikpCittYW5kaXJfcmVsYXRpdmVfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKG1hbmRpcl9yZWxhdGl2ZSkpCitpbmZvZGlyX3JlbGF0aXZlX1NRID0gJChzdWJzdCAnLCdcJycsJChpbmZvZGlyX3JlbGF0aXZlKSkKK3BlcmxsaWJkaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKHBlcmxsaWJkaXIpKQorbG9jYWxlZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChsb2NhbGVkaXIpKQorbG9jYWxlZGlyX3JlbGF0aXZlX1NRID0gJChzdWJzdCAnLCdcJycsJChsb2NhbGVkaXJfcmVsYXRpdmUpKQorZ2l0ZXhlY2Rpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoZ2l0ZXhlY2RpcikpCitnaXRleGVjZGlyX3JlbGF0aXZlX1NRID0gJChzdWJzdCAnLCdcJycsJChnaXRleGVjZGlyX3JlbGF0aXZlKSkKK3RlbXBsYXRlX2Rpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQodGVtcGxhdGVfZGlyKSkKK2h0bWxkaXJfcmVsYXRpdmVfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGh0bWxkaXJfcmVsYXRpdmUpKQorcHJlZml4X1NRID0gJChzdWJzdCAnLCdcJycsJChwcmVmaXgpKQorcGVybGxpYmRpcl9yZWxhdGl2ZV9TUSA9ICQoc3Vic3QgJywnXCcnLCQocGVybGxpYmRpcl9yZWxhdGl2ZSkpCitnaXR3ZWJkaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGdpdHdlYmRpcikpCisKK1NIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEgpKQorVEVTVF9TSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChURVNUX1NIRUxMX1BBVEgpKQorUEVSTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChQRVJMX1BBVEgpKQorUFlUSE9OX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFBZVEhPTl9QQVRIKSkKK1RDTFRLX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFRDTFRLX1BBVEgpKQorRElGRl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoRElGRikpCitQRVJMTElCX0VYVFJBX1NRID0gJChzdWJzdCAnLCdcJycsJChQRVJMTElCX0VYVFJBKSkKKworIyBSVU5USU1FX1BSRUZJWCdzIHJlc29sdXRpb24gbG9naWMgcmVxdWlyZXMgcmVzb3VyY2UgcGF0aHMgdG8gYmUgZXhwcmVzc2VkCisjIHJlbGF0aXZlIHRvIGVhY2ggb3RoZXIgYW5kIHNoYXJlIGFuIGluc3RhbGxhdGlvbiBwYXRoLgorIworIyBUaGlzIGlzIGEgZGVwZW5kZW5jeSBpbjoKKyMgLSBHaXQncyBiaW5hcnkgUlVOVElNRV9QUkVGSVggbG9naWMgaW4gKHNlZSAiZXhlY19jbWQuYyIpLgorIyAtIFRoZSBydW50aW1lIHByZWZpeCBQZXJsIGhlYWRlciAoc2VlCisjICAgInBlcmwvaGVhZGVyX3RlbXBsYXRlcy9ydW50aW1lX3ByZWZpeC50ZW1wbGF0ZS5wbCIpLgoraWZkZWYgUlVOVElNRV9QUkVGSVgKKworaWZuZXEgKCQoZmlsdGVyIC8lLCQoZmlyc3R3b3JkICQoZ2l0ZXhlY2Rpcl9yZWxhdGl2ZSkpKSwpCiskKGVycm9yIFJVTlRJTUVfUFJFRklYIHJlcXVpcmVzIGEgcmVsYXRpdmUgZ2l0ZXhlY2Rpciwgbm90OiAkKGdpdGV4ZWNkaXIpKQorZW5kaWYKKworaWZuZXEgKCQoZmlsdGVyIC8lLCQoZmlyc3R3b3JkICQobG9jYWxlZGlyX3JlbGF0aXZlKSkpLCkKKyQoZXJyb3IgUlVOVElNRV9QUkVGSVggcmVxdWlyZXMgYSByZWxhdGl2ZSBsb2NhbGVkaXIsIG5vdDogJChsb2NhbGVkaXIpKQorZW5kaWYKKworaWZuZGVmIE5PX1BFUkwKK2lmbmVxICgkKGZpbHRlciAvJSwkKGZpcnN0d29yZCAkKHBlcmxsaWJkaXJfcmVsYXRpdmUpKSksKQorJChlcnJvciBSVU5USU1FX1BSRUZJWCByZXF1aXJlcyBhIHJlbGF0aXZlIHBlcmxsaWJkaXIsIG5vdDogJChwZXJsbGliZGlyKSkKK2VuZGlmCitlbmRpZgorCitlbmRpZgorCisjIFdlIG11c3QgZmlsdGVyIG91dCBhbnkgb2JqZWN0IGZpbGVzIGZyb20gJChHSVRMSUJTKSwKKyMgYXMgaXQgaXMgdHlwaWNhbGx5IHVzZWQgbGlrZToKKyMKKyMgICBmb286IGZvby5vICQoR0lUTElCUykKKyMJJChDQykgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpCisjCisjIHdoZXJlIHdlIHVzZSBpdCBhcyBhIGRlcGVuZGVuY3kuIFNpbmNlIHdlIGFsc28gcHVsbCBvYmplY3QgZmlsZXMKKyMgZnJvbSB0aGUgZGVwZW5kZW5jeSBsaXN0LCB0aGF0IHdvdWxkIG1ha2UgZWFjaCBlbnRyeSBhcHBlYXIgdHdpY2UuCitMSUJTID0gJChmaWx0ZXItb3V0ICUubywgJChHSVRMSUJTKSkgJChFWFRMSUJTKQorCitCQVNJQ19DRkxBR1MgKz0gJChDT01QQVRfQ0ZMQUdTKQorTElCX09CSlMgKz0gJChDT01QQVRfT0JKUykKKworIyBRdW90ZSBmb3IgQworCitpZmRlZiBERUZBVUxUX0VESVRPUgorREVGQVVMVF9FRElUT1JfQ1EgPSAiJChzdWJzdCAiLFwiLCQoc3Vic3QgXCxcXCwkKERFRkFVTFRfRURJVE9SKSkpIgorREVGQVVMVF9FRElUT1JfQ1FfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERFRkFVTFRfRURJVE9SX0NRKSkKKworQkFTSUNfQ0ZMQUdTICs9IC1EREVGQVVMVF9FRElUT1I9JyQoREVGQVVMVF9FRElUT1JfQ1FfU1EpJworZW5kaWYKKworaWZkZWYgREVGQVVMVF9QQUdFUgorREVGQVVMVF9QQUdFUl9DUSA9ICIkKHN1YnN0ICIsXCIsJChzdWJzdCBcLFxcLCQoREVGQVVMVF9QQUdFUikpKSIKK0RFRkFVTFRfUEFHRVJfQ1FfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERFRkFVTFRfUEFHRVJfQ1EpKQorCitCQVNJQ19DRkxBR1MgKz0gLURERUZBVUxUX1BBR0VSPSckKERFRkFVTFRfUEFHRVJfQ1FfU1EpJworZW5kaWYKKworaWZkZWYgU0hFTExfUEFUSAorU0hFTExfUEFUSF9DUSA9ICIkKHN1YnN0ICIsXCIsJChzdWJzdCBcLFxcLCQoU0hFTExfUEFUSCkpKSIKK1NIRUxMX1BBVEhfQ1FfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEhfQ1EpKQorCitCQVNJQ19DRkxBR1MgKz0gLURTSEVMTF9QQVRIPSckKFNIRUxMX1BBVEhfQ1FfU1EpJworZW5kaWYKKworR0lUX1VTRVJfQUdFTlRfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKEdJVF9VU0VSX0FHRU5UKSkKK0dJVF9VU0VSX0FHRU5UX0NRID0gIiQoc3Vic3QgIixcIiwkKHN1YnN0IFwsXFwsJChHSVRfVVNFUl9BR0VOVCkpKSIKK0dJVF9VU0VSX0FHRU5UX0NRX1NRID0gJChzdWJzdCAnLCdcJycsJChHSVRfVVNFUl9BR0VOVF9DUSkpCitHSVQtVVNFUi1BR0VOVDogRk9SQ0UKKwlAaWYgdGVzdCB4JyQoR0lUX1VTRVJfQUdFTlRfU1EpJyAhPSB4ImBjYXQgR0lULVVTRVItQUdFTlQgMj4vZGV2L251bGxgIjsgdGhlbiBcCisJCWVjaG8gJyQoR0lUX1VTRVJfQUdFTlRfU1EpJyA+R0lULVVTRVItQUdFTlQ7IFwKKwlmaQorCitpZmRlZiBERUZBVUxUX0hFTFBfRk9STUFUCitCQVNJQ19DRkxBR1MgKz0gLURERUZBVUxUX0hFTFBfRk9STUFUPSciJChERUZBVUxUX0hFTFBfRk9STUFUKSInCitlbmRpZgorCitQQUdFUl9FTlZfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFBBR0VSX0VOVikpCitQQUdFUl9FTlZfQ1EgPSAiJChzdWJzdCAiLFwiLCQoc3Vic3QgXCxcXCwkKFBBR0VSX0VOVikpKSIKK1BBR0VSX0VOVl9DUV9TUSA9ICQoc3Vic3QgJywnXCcnLCQoUEFHRVJfRU5WX0NRKSkKK0JBU0lDX0NGTEFHUyArPSAtRFBBR0VSX0VOVj0nJChQQUdFUl9FTlZfQ1FfU1EpJworCitBTExfQ0ZMQUdTICs9ICQoQkFTSUNfQ0ZMQUdTKQorQUxMX0xERkxBR1MgKz0gJChCQVNJQ19MREZMQUdTKQorCitleHBvcnQgRElGRiBUQVIgSU5TVEFMTCBERVNURElSIFNIRUxMX1BBVEgKKworCisjIyMgQnVpbGQgcnVsZXMKKworU0hFTEwgPSAkKFNIRUxMX1BBVEgpCisKK2FsbDo6IHNoZWxsX2NvbXBhdGliaWxpdHlfdGVzdAorCitpZmVxICIkKFBST0ZJTEUpIiAiQlVJTEQiCithbGw6OiBwcm9maWxlCitlbmRpZgorCitwcm9maWxlOjogcHJvZmlsZS1jbGVhbgorCSQoTUFLRSkgUFJPRklMRT1HRU4gYWxsCisJJChNQUtFKSBQUk9GSUxFPUdFTiAtajEgdGVzdAorCUBpZiB0ZXN0IC1uICIkJEdJVF9QRVJGX1JFUE8iIHx8IHRlc3QgLWQgLmdpdDsgdGhlbiBcCisJCSQoTUFLRSkgUFJPRklMRT1HRU4gLWoxIHBlcmY7IFwKIAllbHNlIFwKLQkgZWNobyA+JjIgIiAgICAqICQoVENMX1BBVEgpIGZhaWxlZDsgdXNpbmcgdW5vcHRpbWl6ZWQgbG9hZGluZyI7IFwKLQkgcm0gLWYgJEAgOyBcCi0JIGVjaG8gJyMgQXV0b2dlbmVyYXRlZCBieSBnaXQtZ3VpIE1ha2VmaWxlJyA+JEAgJiYgXAotCSBlY2hvID4+JEAgJiYgXAotCSAkKGZvcmVhY2ggcCwkKFBSRUxPQURfRklMRVMpICQoc29ydCAkKEFMTF9MSUJGSUxFUykpLGVjaG8gJyQoc3Vic3QgbGliLywsJHApJyA+PiRAICYmKSBcCi0JIGVjaG8gPj4kQCA7IFwKKwkJZWNobyAiU2tpcHBpbmcgcHJvZmlsZSBvZiBwZXJmIHRlc3RzLi4uIjsgXAorCWZpCisJJChNQUtFKSBQUk9GSUxFPVVTRSBhbGwKKworcHJvZmlsZS1mYXN0OiBwcm9maWxlLWNsZWFuCisJJChNQUtFKSBQUk9GSUxFPUdFTiBhbGwKKwkkKE1BS0UpIFBST0ZJTEU9R0VOIC1qMSBwZXJmCisJJChNQUtFKSBQUk9GSUxFPVVTRSBhbGwKKworCithbGw6OiAkKEFMTF9QUk9HUkFNUykgJChTQ1JJUFRfTElCKSAkKEJVSUxUX0lOUykgJChPVEhFUl9QUk9HUkFNUykgR0lULUJVSUxELU9QVElPTlMKK2lmbmVxICgsJFgpCisJJChRVUlFVF9CVUlMVF9JTikkKGZvcmVhY2ggcCwkKHBhdHN1YnN0ICUkWCwlLCQoZmlsdGVyICUkWCwkKEFMTF9QUk9HUkFNUykgJChCVUlMVF9JTlMpIGdpdCRYKSksIHRlc3QgLWQgJyRwJyAtbyAnJHAnIC1lZiAnJHAkWCcgfHwgJChSTSkgJyRwJzspCitlbmRpZgorCithbGw6OgoraWZuZGVmIE5PX1RDTFRLCisJJChRVUlFVF9TVUJESVIwKWdpdC1ndWkgJChRVUlFVF9TVUJESVIxKSBnaXRleGVjZGlyPSckKGdpdGV4ZWNfaW5zdGRpcl9TUSknIGFsbAorCSQoUVVJRVRfU1VCRElSMClnaXRrLWdpdCAkKFFVSUVUX1NVQkRJUjEpIGFsbAorZW5kaWYKKwkkKFFVSUVUX1NVQkRJUjApdGVtcGxhdGVzICQoUVVJRVRfU1VCRElSMSkgU0hFTExfUEFUSD0nJChTSEVMTF9QQVRIX1NRKScgUEVSTF9QQVRIPSckKFBFUkxfUEFUSF9TUSknCisKK3BsZWFzZV9zZXRfU0hFTExfUEFUSF90b19hX21vcmVfbW9kZXJuX3NoZWxsOgorCUAkJCg6KQorCitzaGVsbF9jb21wYXRpYmlsaXR5X3Rlc3Q6IHBsZWFzZV9zZXRfU0hFTExfUEFUSF90b19hX21vcmVfbW9kZXJuX3NoZWxsCisKK3N0cmlwOiAkKFBST0dSQU1TKSBnaXQkWAorCSQoU1RSSVApICQoU1RSSVBfT1BUUykgJF4KKworIyMjIFRhcmdldC1zcGVjaWZpYyBmbGFncyBhbmQgZGVwZW5kZW5jaWVzCisKKyMgVGhlIGdlbmVyaWMgY29tcGlsYXRpb24gcGF0dGVybiBydWxlIGFuZCBhdXRvbWF0aWNhbGx5CisjIGNvbXB1dGVkIGhlYWRlciBkZXBlbmRlbmNpZXMgKGZhbGxpbmcgYmFjayB0byBhIGRlcGVuZGVuY3kgb24KKyMgTElCX0gpIGFyZSBlbm91Z2ggdG8gZGVzY3JpYmUgaG93IG1vc3QgdGFyZ2V0cyBzaG91bGQgYmUgYnVpbHQsCisjIGJ1dCBzb21lIHRhcmdldHMgYXJlIHNwZWNpYWwgZW5vdWdoIHRvIG5lZWQgc29tZXRoaW5nIGEgbGl0dGxlCisjIGRpZmZlcmVudC4KKyMKKyMgLSBXaGVuIGEgc291cmNlIGZpbGUgImZvby5jIiAjaW5jbHVkZXMgYSBnZW5lcmF0ZWQgaGVhZGVyIGZpbGUsCisjICAgd2UgbmVlZCB0byBsaXN0IHRoYXQgZGVwZW5kZW5jeSBmb3IgdGhlICJmb28ubyIgdGFyZ2V0LgorIworIyAgIFdlIGFsc28gbGlzdCBpdCBmcm9tIG90aGVyIHRhcmdldHMgdGhhdCBhcmUgYnVpbHQgZnJvbSBmb28uYworIyAgIGxpa2UgImZvby5zcCIgYW5kICJmb28ucyIsIGV2ZW4gdGhvdWdoIHRoYXQgaXMgZWFzeSB0byBmb3JnZXQKKyMgICB0byBkbyBiZWNhdXNlIHRoZSBnZW5lcmF0ZWQgaGVhZGVyIGlzIGFscmVhZHkgcHJlc2VudCBhcm91bmQKKyMgICBhZnRlciBhIHJlZ3VsYXIgYnVpbGQgYXR0ZW1wdC4KKyMKKyMgLSBTb21lIGNvZGUgZGVwZW5kcyBvbiBjb25maWd1cmF0aW9uIGtlcHQgaW4gbWFrZWZpbGUKKyMgICB2YXJpYWJsZXMuIFRoZSB0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGUgRVhUUkFfQ1BQRkxBR1MgY2FuCisjICAgYmUgdXNlZCB0byBjb252ZXkgdGhhdCBpbmZvcm1hdGlvbiB0byB0aGUgQyBwcmVwcm9jZXNzb3IKKyMgICB1c2luZyAtRCBvcHRpb25zLgorIworIyAgIFRoZSAiZm9vLm8iIHRhcmdldCBzaG91bGQgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZGVwZW5kZW5jeSBvbgorIyAgIGEgZmlsZSB0aGF0IGNoYW5nZXMgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIG1ha2VmaWxlIHZhcmlhYmxlCisjICAgY2hhbmdlcy4gIEZvciBleGFtcGxlLCB0YXJnZXRzIG1ha2luZyB1c2Ugb2YgdGhlCisjICAgJChHSVRfVkVSU0lPTikgdmFyaWFibGUgZGVwZW5kIG9uIEdJVC1WRVJTSU9OLUZJTEUuCisjCisjICAgVGVjaG5pY2FsbHkgdGhlICIuc3AiIGFuZCAiLnMiIHRhcmdldHMgZG8gbm90IG5lZWQgdGhpcworIyAgIGRlcGVuZGVuY3kgYmVjYXVzZSB0aGV5IGFyZSBmb3JjZS1idWlsdCwgYnV0IHRoZXkgZ2V0IHRoZQorIyAgIHNhbWUgZGVwZW5kZW5jeSBmb3IgY29uc2lzdGVuY3kuIFRoaXMgd2F5LCB5b3UgZG8gbm90IGhhdmUgdG8KKyMgICBrbm93IGhvdyBlYWNoIHRhcmdldCBpcyBpbXBsZW1lbnRlZC4gQW5kIGl0IG1lYW5zIHRoZQorIyAgIGRlcGVuZGVuY2llcyBoZXJlIHdpbGwgbm90IG5lZWQgdG8gY2hhbmdlIGlmIHRoZSBmb3JjZS1idWlsZAorIyAgIGRldGFpbHMgY2hhbmdlIHNvbWUgZGF5LgorCitnaXQuc3AgZ2l0LnMgZ2l0Lm86IEdJVC1QUkVGSVgKK2dpdC5zcCBnaXQucyBnaXQubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJJy1ER0lUX0hUTUxfUEFUSD0iJChodG1sZGlyX3JlbGF0aXZlX1NRKSInIFwKKwknLURHSVRfTUFOX1BBVEg9IiQobWFuZGlyX3JlbGF0aXZlX1NRKSInIFwKKwknLURHSVRfSU5GT19QQVRIPSIkKGluZm9kaXJfcmVsYXRpdmVfU1EpIicKKworZ2l0JFg6IGdpdC5vIEdJVC1MREZMQUdTICQoQlVJTFRJTl9PQkpTKSAkKEdJVExJQlMpCisJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChBTExfTERGTEFHUykgXAorCQkkKGZpbHRlciAlLm8sJF4pICQoTElCUykKKworaGVscC5zcCBoZWxwLnMgaGVscC5vOiBjb21tYW5kLWxpc3QuaAorCitidWlsdGluL2hlbHAuc3AgYnVpbHRpbi9oZWxwLnMgYnVpbHRpbi9oZWxwLm86IGNvbmZpZy1saXN0LmggR0lULVBSRUZJWAorYnVpbHRpbi9oZWxwLnNwIGJ1aWx0aW4vaGVscC5zIGJ1aWx0aW4vaGVscC5vOiBFWFRSQV9DUFBGTEFHUyA9IFwKKwknLURHSVRfSFRNTF9QQVRIPSIkKGh0bWxkaXJfcmVsYXRpdmVfU1EpIicgXAorCSctREdJVF9NQU5fUEFUSD0iJChtYW5kaXJfcmVsYXRpdmVfU1EpIicgXAorCSctREdJVF9JTkZPX1BBVEg9IiQoaW5mb2Rpcl9yZWxhdGl2ZV9TUSkiJworCit2ZXJzaW9uLnNwIHZlcnNpb24ucyB2ZXJzaW9uLm86IEdJVC1WRVJTSU9OLUZJTEUgR0lULVVTRVItQUdFTlQKK3ZlcnNpb24uc3AgdmVyc2lvbi5zIHZlcnNpb24ubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJJy1ER0lUX1ZFUlNJT049IiQoR0lUX1ZFUlNJT04pIicgXAorCSctREdJVF9VU0VSX0FHRU5UPSQoR0lUX1VTRVJfQUdFTlRfQ1FfU1EpJyBcCisJJy1ER0lUX0JVSUxUX0ZST01fQ09NTUlUPSIkKHNoZWxsIFwKKwkJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiQoQ1VSRElSKS8uLiIgXAorCQlnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IEhFQUQgMj4vZGV2L251bGwpIicKKworJChCVUlMVF9JTlMpOiBnaXQkWAorCSQoUVVJRVRfQlVJTFRfSU4pJChSTSkgJEAgJiYgXAorCWxuICQ8ICRAIDI+L2Rldi9udWxsIHx8IFwKKwlsbiAtcyAkPCAkQCAyPi9kZXYvbnVsbCB8fCBcCisJY3AgJDwgJEAKKworY29uZmlnLWxpc3QuaDogZ2VuZXJhdGUtY29uZmlnbGlzdC5zaAorCitjb25maWctbGlzdC5oOgorCSQoUVVJRVRfR0VOKSQoU0hFTExfUEFUSCkgLi9nZW5lcmF0ZS1jb25maWdsaXN0LnNoIFwKKwkJPiRAKyAmJiBtdiAkQCsgJEAKKworY29tbWFuZC1saXN0Lmg6IGdlbmVyYXRlLWNtZGxpc3Quc2ggY29tbWFuZC1saXN0LnR4dAorCitjb21tYW5kLWxpc3QuaDogJCh3aWxkY2FyZCBEb2N1bWVudGF0aW9uL2dpdCoudHh0KSBEb2N1bWVudGF0aW9uLypjb25maWcudHh0IERvY3VtZW50YXRpb24vY29uZmlnLyoudHh0CisJJChRVUlFVF9HRU4pJChTSEVMTF9QQVRIKSAuL2dlbmVyYXRlLWNtZGxpc3Quc2ggXAorCQkkKHBhdHN1YnN0ICUsLS1leGNsdWRlLXByb2dyYW0gJSwkKEVYQ0xVREVEX1BST0dSQU1TKSkgXAorCQljb21tYW5kLWxpc3QudHh0ID4kQCsgJiYgbXYgJEArICRACisKK1NDUklQVF9ERUZJTkVTID0gJChTSEVMTF9QQVRIX1NRKTokKERJRkZfU1EpOiQoR0lUX1ZFUlNJT04pOlwKKwkkKGxvY2FsZWRpcl9TUSk6JChOT19DVVJMKTokKFVTRV9HRVRURVhUX1NDSEVNRSk6JChTQU5FX1RPT0xfUEFUSF9TUSk6XAorCSQoZ2l0d2ViZGlyX1NRKTokKFBFUkxfUEFUSF9TUSk6JChTQU5FX1RFWFRfR1JFUCk6JChQQUdFUl9FTlYpOlwKKwkkKHBlcmxsaWJkaXJfU1EpCitkZWZpbmUgY21kX211bmdlX3NjcmlwdAorJChSTSkgJEAgJEArICYmIFwKK3NlZCAtZSAnMXN8IyEuKi9zaHwjISQoU0hFTExfUEFUSF9TUSl8JyBcCisgICAgLWUgJ3N8QFNIRUxMX1BBVEhAfCQoU0hFTExfUEFUSF9TUSl8JyBcCisgICAgLWUgJ3N8QEBESUZGQEB8JChESUZGX1NRKXwnIFwKKyAgICAtZSAnc3xAQExPQ0FMRURJUkBAfCQobG9jYWxlZGlyX1NRKXxnJyBcCisgICAgLWUgJ3MvQEBOT19DVVJMQEAvJChOT19DVVJMKS9nJyBcCisgICAgLWUgJ3MvQEBVU0VfR0VUVEVYVF9TQ0hFTUVAQC8kKFVTRV9HRVRURVhUX1NDSEVNRSkvZycgXAorICAgIC1lICQoQlJPS0VOX1BBVEhfRklYKSBcCisgICAgLWUgJ3N8QEBHSVRXRUJESVJAQHwkKGdpdHdlYmRpcl9TUSl8ZycgXAorICAgIC1lICdzfEBAUEVSTEBAfCQoUEVSTF9QQVRIX1NRKXxnJyBcCisgICAgLWUgJ3N8QEBTQU5FX1RFWFRfR1JFUEBAfCQoU0FORV9URVhUX0dSRVApfGcnIFwKKyAgICAtZSAnc3xAQFBBR0VSX0VOVkBAfCQoUEFHRVJfRU5WX1NRKXxnJyBcCisgICAgJEAuc2ggPiRAKworZW5kZWYKKworR0lULVNDUklQVC1ERUZJTkVTOiBGT1JDRQorCUBGTEFHUz0nJChTQ1JJUFRfREVGSU5FUyknOyBcCisJICAgIGlmIHRlc3QgeCIkJEZMQUdTIiAhPSB4ImBjYXQgJEAgMj4vZGV2L251bGxgIiA7IHRoZW4gXAorCQllY2hvID4mMiAiICAgICogbmV3IHNjcmlwdCBwYXJhbWV0ZXJzIjsgXAorCQllY2hvICIkJEZMQUdTIiA+JEA7IFwKKyAgICAgICAgICAgIGZpCisKKworJChTQ1JJUFRfU0hfR0VOKSA6ICUgOiAlLnNoIEdJVC1TQ1JJUFQtREVGSU5FUworCSQoUVVJRVRfR0VOKSQoY21kX211bmdlX3NjcmlwdCkgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgJEArICRACisKKyQoU0NSSVBUX0xJQikgOiAlIDogJS5zaCBHSVQtU0NSSVBULURFRklORVMKKwkkKFFVSUVUX0dFTikkKGNtZF9tdW5nZV9zY3JpcHQpICYmIFwKKwltdiAkQCsgJEAKKworZ2l0LnJlczogZ2l0LnJjIEdJVC1WRVJTSU9OLUZJTEUgR0lULVBSRUZJWAorCSQoUVVJRVRfUkMpJChSQykgXAorCSAgJChqb2luIC1ETUFKT1I9IC1ETUlOT1I9IC1ETUlDUk89IC1EUEFUQ0hMRVZFTD0sICQod29yZGxpc3QgMSwgNCwgXAorCSAgICAkKHNoZWxsIGVjaG8gJChHSVRfVkVSU0lPTikgMCAwIDAgMCB8IHRyICcuYS16QS1aLScgJyAnKSkpIFwKKwkgIC1ER0lUX1ZFUlNJT049IlxcXCIkKEdJVF9WRVJTSU9OKVxcXCIiIC1pICQ8IC1vICRACisKKyMgVGhpcyBtYWtlcyBzdXJlIHdlIGRlcGVuZCBvbiB0aGUgTk9fUEVSTCBzZXR0aW5nIGl0c2VsZi4KKyQoU0NSSVBUX1BFUkxfR0VOKTogR0lULUJVSUxELU9QVElPTlMKKworIyBVc2VkIGZvciBzdWJzdGl0dXRpb24gaW4gUGVybCBtb2R1bGVzLiBEaXNhYmxlZCB3aGVuIHVzaW5nIFJVTlRJTUVfUFJFRklYCisjIHNpbmNlIHRoZSBsb2NhbGUgZGlyZWN0b3J5IGlzIGluamVjdGVkLgorcGVybF9sb2NhbGVkaXJfU1EgPSAkKGxvY2FsZWRpcl9TUSkKKworaWZuZGVmIE5PX1BFUkwKK1BFUkxfSEVBREVSX1RFTVBMQVRFID0gcGVybC9oZWFkZXJfdGVtcGxhdGVzL2ZpeGVkX3ByZWZpeC50ZW1wbGF0ZS5wbAorUEVSTF9ERUZJTkVTID0gJChQRVJMX1BBVEhfU1EpOiQoUEVSTExJQl9FWFRSQV9TUSk6JChwZXJsbGliZGlyX1NRKQorCitQRVJMX0RFRklORVMgOj0gJChQRVJMX1BBVEhfU1EpICQoUEVSTExJQl9FWFRSQV9TUSkgJChwZXJsbGliZGlyX1NRKQorUEVSTF9ERUZJTkVTICs9ICQoUlVOVElNRV9QUkVGSVgpCisKKyMgU3VwcG9ydCBQZXJsIHJ1bnRpbWUgcHJlZml4LiBJbiB0aGlzIG1vZGUsIGEgZGlmZmVyZW50IGhlYWRlciBpcyBpbnN0YWxsZWQKKyMgaW50byBQZXJsIHNjcmlwdHMuCitpZmRlZiBSVU5USU1FX1BSRUZJWAorCitQRVJMX0hFQURFUl9URU1QTEFURSA9IHBlcmwvaGVhZGVyX3RlbXBsYXRlcy9ydW50aW1lX3ByZWZpeC50ZW1wbGF0ZS5wbAorCisjIERvbid0IGV4cG9ydCBhIGZpeGVkICQobG9jYWxlZGlyKSBwYXRoOyBpdCB3aWxsIGJlIHJlc29sdmVkIGJ5IHRoZSBQZXJsIGhlYWRlcgorIyBhdCBydW50aW1lLgorcGVybF9sb2NhbGVkaXJfU1EgPQorCitlbmRpZgorCitQRVJMX0RFRklORVMgKz0gJChnaXRleGVjZGlyKSAkKHBlcmxsaWJkaXIpICQobG9jYWxlZGlyKQorCiskKFNDUklQVF9QRVJMX0dFTik6ICUgOiAlLnBlcmwgR0lULVBFUkwtREVGSU5FUyBHSVQtUEVSTC1IRUFERVIgR0lULVZFUlNJT04tRklMRQorCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJc2VkIC1lICcxeycgXAorCSAgICAtZSAnCXN8IyEuKnBlcmx8IyEkKFBFUkxfUEFUSF9TUSl8JyBcCisJICAgIC1lICcJciBHSVQtUEVSTC1IRUFERVInIFwKKwkgICAgLWUgJwlHJyBcCisJICAgIC1lICd9JyBcCisJICAgIC1lICdzL0BAR0lUX1ZFUlNJT05AQC8kKEdJVF9WRVJTSU9OKS9nJyBcCisJICAgICQ8ID4kQCsgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgJEArICRACisKK1BFUkxfREVGSU5FUyA6PSAkKHN1YnN0ICQoc3BhY2UpLDosJChQRVJMX0RFRklORVMpKQorR0lULVBFUkwtREVGSU5FUzogRk9SQ0UKKwlARkxBR1M9JyQoUEVSTF9ERUZJTkVTKSc7IFwKKwkgICAgaWYgdGVzdCB4IiQkRkxBR1MiICE9IHgiYGNhdCAkQCAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gPiYyICIgICAgKiBuZXcgcGVybC1zcGVjaWZpYyBwYXJhbWV0ZXJzIjsgXAorCQllY2hvICIkJEZMQUdTIiA+JEA7IFwKKwkgICAgZmkKKworR0lULVBFUkwtSEVBREVSOiAkKFBFUkxfSEVBREVSX1RFTVBMQVRFKSBHSVQtUEVSTC1ERUZJTkVTIE1ha2VmaWxlCisJJChRVUlFVF9HRU4pJChSTSkgJEAgJiYgXAorCUlOU1RMSUJESVI9JyQocGVybGxpYmRpcl9TUSknICYmIFwKKwlJTlNUTElCRElSX0VYVFJBPSckKFBFUkxMSUJfRVhUUkFfU1EpJyAmJiBcCisJSU5TVExJQkRJUj0iJCRJTlNUTElCRElSJCR7SU5TVExJQkRJUl9FWFRSQTorOiQkSU5TVExJQkRJUl9FWFRSQX0iICYmIFwKKwlzZWQgLWUgJ3M9QEBQQVRIU0VQQEA9JChwYXRoc2VwKT1nJyBcCisJICAgIC1lICJzPUBASU5TVExJQkRJUkBAPSQkSU5TVExJQkRJUj1nIiBcCisJICAgIC1lICdzPUBAUEVSTExJQkRJUl9SRUxAQD0kKHBlcmxsaWJkaXJfcmVsYXRpdmVfU1EpPWcnIFwKKwkgICAgLWUgJ3M9QEBHSVRFWEVDRElSX1JFTEBAPSQoZ2l0ZXhlY2Rpcl9yZWxhdGl2ZV9TUSk9ZycgXAorCSAgICAtZSAncz1AQExPQ0FMRURJUl9SRUxAQD0kKGxvY2FsZWRpcl9yZWxhdGl2ZV9TUSk9ZycgXAorCSAgICAkPCA+JEArICYmIFwKKwltdiAkQCsgJEAKKworLlBIT05ZOiBwZXJsbGliZGlyCitwZXJsbGliZGlyOgorCUBlY2hvICckKHBlcmxsaWJkaXJfU1EpJworCisuUEhPTlk6IGdpdHdlYgorZ2l0d2ViOgorCSQoUVVJRVRfU1VCRElSMClnaXR3ZWIgJChRVUlFVF9TVUJESVIxKSBhbGwKKworZ2l0LWluc3Rhd2ViOiBnaXQtaW5zdGF3ZWIuc2ggR0lULVNDUklQVC1ERUZJTkVTCisJJChRVUlFVF9HRU4pJChjbWRfbXVuZ2Vfc2NyaXB0KSAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKK2Vsc2UgIyBOT19QRVJMCiskKFNDUklQVF9QRVJMX0dFTikgZ2l0LWluc3Rhd2ViOiAlIDogdW5pbXBsZW1lbnRlZC5zaAorCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIX1NRKXwnIFwKKwkgICAgLWUgJ3N8QEBSRUFTT05AQHxOT19QRVJMPSQoTk9fUEVSTCl8ZycgXAorCSAgICB1bmltcGxlbWVudGVkLnNoID4kQCsgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgJEArICRACitlbmRpZiAjIE5PX1BFUkwKKworIyBUaGlzIG1ha2VzIHN1cmUgd2UgZGVwZW5kIG9uIHRoZSBOT19QWVRIT04gc2V0dGluZyBpdHNlbGYuCiskKFNDUklQVF9QWVRIT05fR0VOKTogR0lULUJVSUxELU9QVElPTlMKKworaWZuZGVmIE5PX1BZVEhPTgorJChTQ1JJUFRfUFlUSE9OX0dFTik6IEdJVC1DRkxBR1MgR0lULVBSRUZJWCBHSVQtUFlUSE9OLVZBUlMKKyQoU0NSSVBUX1BZVEhPTl9HRU4pOiAlIDogJS5weQorCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJc2VkIC1lICcxc3wjIS4qcHl0aG9ufCMhJChQWVRIT05fUEFUSF9TUSl8JyBcCisJICAgICQ8ID4kQCsgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgJEArICRACitlbHNlICMgTk9fUFlUSE9OCiskKFNDUklQVF9QWVRIT05fR0VOKTogJSA6IHVuaW1wbGVtZW50ZWQuc2gKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCAkQCsgJiYgXAorCXNlZCAtZSAnMXN8IyEuKi9zaHwjISQoU0hFTExfUEFUSF9TUSl8JyBcCisJICAgIC1lICdzfEBAUkVBU09OQEB8Tk9fUFlUSE9OPSQoTk9fUFlUSE9OKXxnJyBcCisJICAgIHVuaW1wbGVtZW50ZWQuc2ggPiRAKyAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKK2VuZGlmICMgTk9fUFlUSE9OCisKK0NPTkZJR1VSRV9SRUNJUEUgPSAkKFJNKSBjb25maWd1cmUgY29uZmlndXJlLmFjKyAmJiBcCisJCSAgIHNlZCAtZSAncy9AQEdJVF9WRVJTSU9OQEAvJChHSVRfVkVSU0lPTikvZycgXAorCQkJY29uZmlndXJlLmFjID5jb25maWd1cmUuYWMrICYmIFwKKwkJICAgYXV0b2NvbmYgLW8gY29uZmlndXJlIGNvbmZpZ3VyZS5hYysgJiYgXAorCQkgICAkKFJNKSBjb25maWd1cmUuYWMrCisKK2NvbmZpZ3VyZTogY29uZmlndXJlLmFjIEdJVC1WRVJTSU9OLUZJTEUKKwkkKFFVSUVUX0dFTikkKENPTkZJR1VSRV9SRUNJUEUpCisKK2lmZGVmIEFVVE9DT05GSUdVUkVECisjIFdlIGF2b2lkIGRlcGVuZGluZyBvbiAnY29uZmlndXJlJyBoZXJlLCBiZWNhdXNlIGl0IGdldHMgcmVidWlsdAorIyBldmVyeSB0aW1lIEdJVC1WRVJTSU9OLUZJTEUgaXMgbW9kaWZpZWQsIG9ubHkgdG8gdXBkYXRlIHRoZSBlbWJlZGRlZAorIyB2ZXJzaW9uIG51bWJlciBzdHJpbmcsIHdoaWNoIGNvbmZpZy5zdGF0dXMgZG9lcyBub3QgY2FyZSBhYm91dC4gIFdlCisjIGRvIHdhbnQgdG8gcmVjaGVjayB3aGVuIHRoZSBwbGF0Zm9ybS9lbnZpcm9ubWVudCBkZXRlY3Rpb24gbG9naWMKKyMgY2hhbmdlcywgaGVuY2UgdGhpcyBkZXBlbmRzIG9uIGNvbmZpZ3VyZS5hYy4KK2NvbmZpZy5zdGF0dXM6IGNvbmZpZ3VyZS5hYworCSQoUVVJRVRfR0VOKSQoQ09ORklHVVJFX1JFQ0lQRSkgJiYgXAorCWlmIHRlc3QgLWYgY29uZmlnLnN0YXR1czsgdGhlbiBcCisJICAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrOyBcCisJZWxzZSBcCisJICAuL2NvbmZpZ3VyZTsgXAorCWZpCityZWNvbmZpZ3VyZSBjb25maWcubWFrLmF1dG9nZW46IGNvbmZpZy5zdGF0dXMKKwkkKFFVSUVUX0dFTikuL2NvbmZpZy5zdGF0dXMKKy5QSE9OWTogcmVjb25maWd1cmUgIyBUaGlzIGlzIGEgY29udmVuaWVuY2UgdGFyZ2V0LgorZW5kaWYKKworWERJRkZfT0JKUyArPSB4ZGlmZi94ZGlmZmkubworWERJRkZfT0JKUyArPSB4ZGlmZi94ZW1pdC5vCitYRElGRl9PQkpTICs9IHhkaWZmL3hoaXN0b2dyYW0ubworWERJRkZfT0JKUyArPSB4ZGlmZi94bWVyZ2UubworWERJRkZfT0JKUyArPSB4ZGlmZi94cGF0aWVuY2UubworWERJRkZfT0JKUyArPSB4ZGlmZi94cHJlcGFyZS5vCitYRElGRl9PQkpTICs9IHhkaWZmL3h1dGlscy5vCisKK1ZDU1NWTl9PQkpTICs9IHZjcy1zdm4vZmFzdF9leHBvcnQubworVkNTU1ZOX09CSlMgKz0gdmNzLXN2bi9saW5lX2J1ZmZlci5vCitWQ1NTVk5fT0JKUyArPSB2Y3Mtc3ZuL3NsaWRpbmdfd2luZG93Lm8KK1ZDU1NWTl9PQkpTICs9IHZjcy1zdm4vc3ZuZGlmZi5vCitWQ1NTVk5fT0JKUyArPSB2Y3Mtc3ZuL3N2bmR1bXAubworCitURVNUX09CSlMgOj0gJChwYXRzdWJzdCAlJFgsJS5vLCQoVEVTVF9QUk9HUkFNUykpICQocGF0c3Vic3QgJSx0L2hlbHBlci8lLCQoVEVTVF9CVUlMVElOU19PQkpTKSkKK09CSkVDVFMgOj0gJChMSUJfT0JKUykgJChCVUlMVElOX09CSlMpICQoUFJPR1JBTV9PQkpTKSAkKFRFU1RfT0JKUykgXAorCSQoWERJRkZfT0JKUykgXAorCSQoVkNTU1ZOX09CSlMpIFwKKwkkKEZVWlpfT0JKUykgXAorCWNvbW1vbi1tYWluLm8gXAorCWdpdC5vCitpZm5kZWYgTk9fQ1VSTAorCU9CSkVDVFMgKz0gaHR0cC5vIGh0dHAtd2Fsa2VyLm8gcmVtb3RlLWN1cmwubworZW5kaWYKKworZGVwX2ZpbGVzIDo9ICQoZm9yZWFjaCBmLCQoT0JKRUNUUyksJChkaXIgJGYpLmRlcGVuZC8kKG5vdGRpciAkZikuZCkKK2RlcF9kaXJzIDo9ICQoYWRkc3VmZml4IC5kZXBlbmQsJChzb3J0ICQoZGlyICQoT0JKRUNUUykpKSkKKworaWZlcSAoJChDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMpLHllcykKKyQoZGVwX2RpcnMpOgorCUBta2RpciAtcCAkQAorCittaXNzaW5nX2RlcF9kaXJzIDo9ICQoZmlsdGVyLW91dCAkKHdpbGRjYXJkICQoZGVwX2RpcnMpKSwkKGRlcF9kaXJzKSkKK2RlcF9maWxlID0gJChkaXIgJEApLmRlcGVuZC8kKG5vdGRpciAkQCkuZAorZGVwX2FyZ3MgPSAtTUYgJChkZXBfZmlsZSkgLU1RICRAIC1NTUQgLU1QCitlbmRpZgorCitpZm5lcSAoJChDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMpLHllcykKK2RlcF9kaXJzID0KK21pc3NpbmdfZGVwX2RpcnMgPQorZGVwX2FyZ3MgPQorZW5kaWYKKworQVNNX1NSQyA6PSAkKHdpbGRjYXJkICQoT0JKRUNUUzpvPVMpKQorQVNNX09CSiA6PSAkKEFTTV9TUkM6Uz1vKQorQ19PQkogOj0gJChmaWx0ZXItb3V0ICQoQVNNX09CSiksJChPQkpFQ1RTKSkKKworLlNVRkZJWEVTOgorCiskKENfT0JKKTogJS5vOiAlLmMgR0lULUNGTEFHUyAkKG1pc3NpbmdfZGVwX2RpcnMpCisJJChRVUlFVF9DQykkKENDKSAtbyAkKi5vIC1jICQoZGVwX2FyZ3MpICQoQUxMX0NGTEFHUykgJChFWFRSQV9DUFBGTEFHUykgJDwKKyQoQVNNX09CSik6ICUubzogJS5TIEdJVC1DRkxBR1MgJChtaXNzaW5nX2RlcF9kaXJzKQorCSQoUVVJRVRfQ0MpJChDQykgLW8gJCoubyAtYyAkKGRlcF9hcmdzKSAkKEFMTF9DRkxBR1MpICQoRVhUUkFfQ1BQRkxBR1MpICQ8CisKKyUuczogJS5jIEdJVC1DRkxBR1MgRk9SQ0UKKwkkKFFVSUVUX0NDKSQoQ0MpIC1vICRAIC1TICQoQUxMX0NGTEFHUykgJChFWFRSQV9DUFBGTEFHUykgJDwKKworaWZkZWYgVVNFX0NPTVBVVEVEX0hFQURFUl9ERVBFTkRFTkNJRVMKKyMgVGFrZSBhZHZhbnRhZ2Ugb2YgZ2NjJ3Mgb24tdGhlLWZseSBkZXBlbmRlbmN5IGdlbmVyYXRpb24KKyMgU2VlIDxodHRwOi8vZ2NjLmdudS5vcmcvZ2NjLTMuMC9mZWF0dXJlcy5odG1sPi4KK2RlcF9maWxlc19wcmVzZW50IDo9ICQod2lsZGNhcmQgJChkZXBfZmlsZXMpKQoraWZuZXEgKCQoZGVwX2ZpbGVzX3ByZXNlbnQpLCkKK2luY2x1ZGUgJChkZXBfZmlsZXNfcHJlc2VudCkKK2VuZGlmCitlbHNlCisjIERlcGVuZGVuY2llcyBvbiBoZWFkZXIgZmlsZXMsIGZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydAorIyB0aGUgZ2NjIC1NTUQgb3B0aW9uLgorIworIyBEZXBlbmRlbmNpZXMgb24gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgaGVhZGVycyBzdWNoIGFzIGNvbW1hbmQtbGlzdC5oCisjIHNob3VsZCBfbm90XyBiZSBpbmNsdWRlZCBoZXJlLCBzaW5jZSB0aGV5IGFyZSBuZWNlc3NhcnkgZXZlbiB3aGVuCisjIGJ1aWxkaW5nIGFuIG9iamVjdCBmb3IgdGhlIGZpcnN0IHRpbWUuCisKKyQoT0JKRUNUUyk6ICQoTElCX0gpICQoR0VORVJBVEVEX0gpCitlbmRpZgorCitleGVjLWNtZC5zcCBleGVjLWNtZC5zIGV4ZWMtY21kLm86IEdJVC1QUkVGSVgKK2V4ZWMtY21kLnNwIGV4ZWMtY21kLnMgZXhlYy1jbWQubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJJy1ER0lUX0VYRUNfUEFUSD0iJChnaXRleGVjZGlyX1NRKSInIFwKKwknLURHSVRfTE9DQUxFX1BBVEg9IiQobG9jYWxlZGlyX3JlbGF0aXZlX1NRKSInIFwKKwknLURCSU5ESVI9IiQoYmluZGlyX3JlbGF0aXZlX1NRKSInIFwKKwknLURGQUxMQkFDS19SVU5USU1FX1BSRUZJWD0iJChwcmVmaXhfU1EpIicKKworYnVpbHRpbi9pbml0LWRiLnNwIGJ1aWx0aW4vaW5pdC1kYi5zIGJ1aWx0aW4vaW5pdC1kYi5vOiBHSVQtUFJFRklYCitidWlsdGluL2luaXQtZGIuc3AgYnVpbHRpbi9pbml0LWRiLnMgYnVpbHRpbi9pbml0LWRiLm86IEVYVFJBX0NQUEZMQUdTID0gXAorCS1EREVGQVVMVF9HSVRfVEVNUExBVEVfRElSPSciJCh0ZW1wbGF0ZV9kaXJfU1EpIicKKworY29uZmlnLnNwIGNvbmZpZy5zIGNvbmZpZy5vOiBHSVQtUFJFRklYCitjb25maWcuc3AgY29uZmlnLnMgY29uZmlnLm86IEVYVFJBX0NQUEZMQUdTID0gXAorCS1ERVRDX0dJVENPTkZJRz0nIiQoRVRDX0dJVENPTkZJR19TUSkiJworCithdHRyLnNwIGF0dHIucyBhdHRyLm86IEdJVC1QUkVGSVgKK2F0dHIuc3AgYXR0ci5zIGF0dHIubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJLURFVENfR0lUQVRUUklCVVRFUz0nIiQoRVRDX0dJVEFUVFJJQlVURVNfU1EpIicKKworZ2V0dGV4dC5zcCBnZXR0ZXh0LnMgZ2V0dGV4dC5vOiBHSVQtUFJFRklYCitnZXR0ZXh0LnNwIGdldHRleHQucyBnZXR0ZXh0Lm86IEVYVFJBX0NQUEZMQUdTID0gXAorCS1ER0lUX0xPQ0FMRV9QQVRIPSciJChsb2NhbGVkaXJfcmVsYXRpdmVfU1EpIicKKworaHR0cC1wdXNoLnNwIGh0dHAuc3AgaHR0cC13YWxrZXIuc3AgcmVtb3RlLWN1cmwuc3AgaW1hcC1zZW5kLnNwOiBTUF9FWFRSQV9GTEFHUyArPSBcCisJLURDVVJMX0RJU0FCTEVfVFlQRUNIRUNLCisKK3BhY2stcmV2aW5kZXguc3A6IFNQX0VYVFJBX0ZMQUdTICs9IC1Xbm8tbWVtY3B5LW1heC1jb3VudAorCitpZmRlZiBOT19FWFBBVAoraHR0cC13YWxrZXIuc3AgaHR0cC13YWxrZXIucyBodHRwLXdhbGtlci5vOiBFWFRSQV9DUFBGTEFHUyA9IC1ETk9fRVhQQVQKK2VuZGlmCisKK2lmZGVmIE5PX1JFR0VYCitjb21wYXQvcmVnZXgvcmVnZXguc3AgY29tcGF0L3JlZ2V4L3JlZ2V4Lm86IEVYVFJBX0NQUEZMQUdTID0gXAorCS1ER0FXSyAtRE5PX01CU1VQUE9SVAorZW5kaWYKKworaWZkZWYgVVNFX05FRF9BTExPQ0FUT1IKK2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLnNwIGNvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLm86IEVYVFJBX0NQUEZMQUdTID0gXAorCS1ETkRFQlVHIC1EUkVQTEFDRV9TWVNURU1fQUxMT0NBVE9SCitjb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5zcDogU1BfRVhUUkFfRkxBR1MgKz0gLVduby1ub24tcG9pbnRlci1udWxsCitlbmRpZgorCitnaXQtJSRYOiAlLm8gR0lULUxERkxBR1MgJChHSVRMSUJTKQorCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgJChMSUJTKQorCitnaXQtYnVncmVwb3J0JFg6IGJ1Z3JlcG9ydC5vIEdJVC1MREZMQUdTICQoR0lUTElCUykKKwkkKFFVSUVUX0xJTkspJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSAkKGZpbHRlciAlLm8sJF4pIFwKKwkJJChMSUJTKQorCitnaXQtaW1hcC1zZW5kJFg6IGltYXAtc2VuZC5vICQoSU1BUF9TRU5EX0JVSUxEREVQUykgR0lULUxERkxBR1MgJChHSVRMSUJTKQorCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgXAorCQkkKElNQVBfU0VORF9MREZMQUdTKSAkKExJQlMpCisKK2dpdC1odHRwLWZldGNoJFg6IGh0dHAubyBodHRwLXdhbGtlci5vIGh0dHAtZmV0Y2gubyBHSVQtTERGTEFHUyAkKEdJVExJQlMpCisJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChBTExfTERGTEFHUykgJChmaWx0ZXIgJS5vLCReKSBcCisJCSQoQ1VSTF9MSUJDVVJMKSAkKExJQlMpCitnaXQtaHR0cC1wdXNoJFg6IGh0dHAubyBodHRwLXB1c2gubyBHSVQtTERGTEFHUyAkKEdJVExJQlMpCisJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChBTExfTERGTEFHUykgJChmaWx0ZXIgJS5vLCReKSBcCisJCSQoQ1VSTF9MSUJDVVJMKSAkKEVYUEFUX0xJQkVYUEFUKSAkKExJQlMpCisKK2dpdC1yZW1vdGUtdGVzdHN2biRYOiByZW1vdGUtdGVzdHN2bi5vIEdJVC1MREZMQUdTICQoR0lUTElCUykgJChWQ1NTVk5fTElCKQorCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgJChMSUJTKSBcCisJJChWQ1NTVk5fTElCKQorCiskKFJFTU9URV9DVVJMX0FMSUFTRVMpOiAkKFJFTU9URV9DVVJMX1BSSU1BUlkpCisJJChRVUlFVF9MTkNQKSQoUk0pICRAICYmIFwKKwlsbiAkPCAkQCAyPi9kZXYvbnVsbCB8fCBcCisJbG4gLXMgJDwgJEAgMj4vZGV2L251bGwgfHwgXAorCWNwICQ8ICRACisKKyQoUkVNT1RFX0NVUkxfUFJJTUFSWSk6IHJlbW90ZS1jdXJsLm8gaHR0cC5vIGh0dHAtd2Fsa2VyLm8gR0lULUxERkxBR1MgJChHSVRMSUJTKQorCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgXAorCQkkKENVUkxfTElCQ1VSTCkgJChFWFBBVF9MSUJFWFBBVCkgJChMSUJTKQorCiskKExJQl9GSUxFKTogJChMSUJfT0JKUykKKwkkKFFVSUVUX0FSKSQoUk0pICRAICYmICQoQVIpICQoQVJGTEFHUykgJEAgJF4KKworJChYRElGRl9MSUIpOiAkKFhESUZGX09CSlMpCisJJChRVUlFVF9BUikkKFJNKSAkQCAmJiAkKEFSKSAkKEFSRkxBR1MpICRAICReCisKKyQoVkNTU1ZOX0xJQik6ICQoVkNTU1ZOX09CSlMpCisJJChRVUlFVF9BUikkKFJNKSAkQCAmJiAkKEFSKSAkKEFSRkxBR1MpICRAICReCisKK2V4cG9ydCBERUZBVUxUX0VESVRPUiBERUZBVUxUX1BBR0VSCisKK0RvY3VtZW50YXRpb24vR0lULUVYQ0xVREVELVBST0dSQU1TOiBGT1JDRQorCUBFWENMVURFRD0nRVhDTFVERURfUFJPR1JBTVMgOj0gJChFWENMVURFRF9QUk9HUkFNUyknOyBcCisJICAgIGlmIHRlc3QgeCIkJEVYQ0xVREVEIiAhPSBcCisJCXgiYGNhdCBEb2N1bWVudGF0aW9uL0dJVC1FWENMVURFRC1QUk9HUkFNUyAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gPiYyICIgICAgKiBuZXcgZG9jdW1lbnRhdGlvbiBmbGFncyI7IFwKKwkJZWNobyAiJCRFWENMVURFRCIgPkRvY3VtZW50YXRpb24vR0lULUVYQ0xVREVELVBST0dSQU1TOyBcCisgICAgICAgICAgICBmaQorCisuUEhPTlk6IGRvYyBtYW4gbWFuLXBlcmwgaHRtbCBpbmZvIHBkZgorZG9jOiBtYW4tcGVybAorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBhbGwKKworbWFuOiBtYW4tcGVybAorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBtYW4KKworbWFuLXBlcmw6IHBlcmwvYnVpbGQvbWFuL21hbjMvR2l0LjNwbQorCitodG1sOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBodG1sCisKK2luZm86CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGluZm8KKworcGRmOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBwZGYKKworWEdFVFRFWFRfRkxBR1MgPSBcCisJLS1mb3JjZS1wbyBcCisJLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6IFwKKwktLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0iR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4iIFwKKwktLWZyb20tY29kZT1VVEYtOAorWEdFVFRFWFRfRkxBR1NfQyA9ICQoWEdFVFRFWFRfRkxBR1MpIC0tbGFuZ3VhZ2U9QyBcCisJLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fIC0ta2V5d29yZD0iUV86MSwyIgorWEdFVFRFWFRfRkxBR1NfU0ggPSAkKFhHRVRURVhUX0ZMQUdTKSAtLWxhbmd1YWdlPVNoZWxsIFwKKwktLWtleXdvcmQ9Z2V0dGV4dGxuIC0ta2V5d29yZD1ldmFsX2dldHRleHRsbgorWEdFVFRFWFRfRkxBR1NfUEVSTCA9ICQoWEdFVFRFWFRfRkxBR1MpIC0tbGFuZ3VhZ2U9UGVybCBcCisJLS1rZXl3b3JkPV9fIC0ta2V5d29yZD1OX18gLS1rZXl3b3JkPSJfX246MSwyIgorTE9DQUxJWkVEX0MgPSAkKENfT0JKOm89YykgJChMSUJfSCkgJChHRU5FUkFURURfSCkKK0xPQ0FMSVpFRF9TSCA9ICQoU0NSSVBUX1NIKQorTE9DQUxJWkVEX1NIICs9IGdpdC1wYXJzZS1yZW1vdGUuc2gKK0xPQ0FMSVpFRF9TSCArPSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2gKK0xPQ0FMSVpFRF9TSCArPSBnaXQtc2gtc2V0dXAuc2gKK0xPQ0FMSVpFRF9QRVJMID0gJChTQ1JJUFRfUEVSTCkKKworaWZkZWYgWEdFVFRFWFRfSU5DTFVERV9URVNUUworTE9DQUxJWkVEX0MgKz0gdC90MDIwMC90ZXN0LmMKK0xPQ0FMSVpFRF9TSCArPSB0L3QwMjAwL3Rlc3Quc2gKK0xPQ0FMSVpFRF9QRVJMICs9IHQvdDAyMDAvdGVzdC5wZXJsCitlbmRpZgorCisjIyBOb3RlIHRoYXQgdGhpcyBpcyBtZWFudCB0byBiZSBydW4gb25seSBieSB0aGUgbG9jYWxpemF0aW9uIGNvb3JkaW5hdG9yCisjIyB1bmRlciBhIHZlcnkgY29udHJvbGxlZCBjb25kaXRpb24sIGkuZS4gKDEpIGl0IGlzIHRvIGJlIHJ1biBpbiBhCisjIyBHaXQgcmVwb3NpdG9yeSAobm90IGEgdGFyYmFsbCBleHRyYWN0KSwgKDIpIGFueSBsb2NhbCBtb2RpZmljYXRpb25zCisjIyB3aWxsIGJlIGxvc3QuCisjIyBHZXR0ZXh0IHRvb2xzIGNhbm5vdCB3b3JrIHdpdGggb3VyIG93biBjdXN0b20gUFJJdGltZSB0eXBlLCBzbworIyMgd2UgcmVwbGFjZSBQUkl0aW1lIHdpdGggUFJJdU1BWC4gIFdlIG5lZWQgdG8gdXBkYXRlIHRoaXMgdG8KKyMjIFBSSWRNQVggaWYgd2Ugc3dpdGNoIHRvIGEgc2lnbmVkIHR5cGUgbGF0ZXIuCisKK3BvL2dpdC5wb3Q6ICQoR0VORVJBVEVEX0gpIEZPUkNFCisJIyBBbGwgbW9kaWZpY2F0aW9ucyB3aWxsIGJlIHJldmVydGVkIGF0IHRoZSBlbmQsIHNvIHdlIGRvIG5vdAorCSMgd2FudCB0byBoYXZlIGFueSBsb2NhbCBjaGFuZ2UuCisJZ2l0IGRpZmYgLS1xdWlldCBIRUFEICYmIGdpdCBkaWZmIC0tcXVpZXQgLS1jYWNoZWQKKworCUBmb3IgcyBpbiAkKExPQ0FMSVpFRF9DKSAkKExPQ0FMSVpFRF9TSCkgJChMT0NBTElaRURfUEVSTCk7IFwKKwlkbyBcCisJCXNlZCAtZSAnc3xQUkl0aW1lfFBSSXVNQVh8ZycgPCIkJHMiID4iJCRzKyIgJiYgXAorCQljYXQgIiQkcysiID4iJCRzIiAmJiBybSAiJCRzKyI7IFwKKwlkb25lCisKKwkkKFFVSUVUX1hHRVRURVhUKSQoWEdFVFRFWFQpIC1vJEArICQoWEdFVFRFWFRfRkxBR1NfQykgJChMT0NBTElaRURfQykKKwkkKFFVSUVUX1hHRVRURVhUKSQoWEdFVFRFWFQpIC1vJEArIC0tam9pbi1leGlzdGluZyAkKFhHRVRURVhUX0ZMQUdTX1NIKSBcCisJCSQoTE9DQUxJWkVEX1NIKQorCSQoUVVJRVRfWEdFVFRFWFQpJChYR0VUVEVYVCkgLW8kQCsgLS1qb2luLWV4aXN0aW5nICQoWEdFVFRFWFRfRkxBR1NfUEVSTCkgXAorCQkkKExPQ0FMSVpFRF9QRVJMKQorCisJIyBSZXZlcnRpbmcgdGhlIG11bmdlZCBzb3VyY2UsIGxlYXZpbmcgb25seSB0aGUgdXBkYXRlZCAkQAorCWdpdCByZXNldCAtLWhhcmQKKwltdiAkQCsgJEAKKworLlBIT05ZOiBwb3QKK3BvdDogcG8vZ2l0LnBvdAorCitQT0ZJTEVTIDo9ICQod2lsZGNhcmQgcG8vKi5wbykKK01PRklMRVMgOj0gJChwYXRzdWJzdCBwby8lLnBvLHBvL2J1aWxkL2xvY2FsZS8lL0xDX01FU1NBR0VTL2dpdC5tbywkKFBPRklMRVMpKQorCitpZm5kZWYgTk9fR0VUVEVYVAorYWxsOjogJChNT0ZJTEVTKQorZW5kaWYKKworcG8vYnVpbGQvbG9jYWxlLyUvTENfTUVTU0FHRVMvZ2l0Lm1vOiBwby8lLnBvCisJJChRVUlFVF9NU0dGTVQpbWtkaXIgLXAgJChkaXIgJEApICYmICQoTVNHRk1UKSAtbyAkQCAkPAorCitMSUJfUEVSTCA6PSAkKHdpbGRjYXJkIHBlcmwvR2l0LnBtIHBlcmwvR2l0LyoucG0gcGVybC9HaXQvKi8qLnBtIHBlcmwvR2l0LyovKi8qLnBtKQorTElCX1BFUkxfR0VOIDo9ICQocGF0c3Vic3QgcGVybC8lLnBtLHBlcmwvYnVpbGQvbGliLyUucG0sJChMSUJfUEVSTCkpCitMSUJfQ1BBTiA6PSAkKHdpbGRjYXJkIHBlcmwvRnJvbUNQQU4vKi5wbSBwZXJsL0Zyb21DUEFOLyovKi5wbSkKK0xJQl9DUEFOX0dFTiA6PSAkKHBhdHN1YnN0IHBlcmwvJS5wbSxwZXJsL2J1aWxkL2xpYi8lLnBtLCQoTElCX0NQQU4pKQorCitpZm5kZWYgTk9fUEVSTAorYWxsOjogJChMSUJfUEVSTF9HRU4pCitpZm5kZWYgTk9fUEVSTF9DUEFOX0ZBTExCQUNLUworYWxsOjogJChMSUJfQ1BBTl9HRU4pCitlbmRpZgorTk9fUEVSTF9DUEFOX0ZBTExCQUNLU19TUSA9ICQoc3Vic3QgJywnXCcnLCQoTk9fUEVSTF9DUEFOX0ZBTExCQUNLUykpCitlbmRpZgorCitwZXJsL2J1aWxkL2xpYi8lLnBtOiBwZXJsLyUucG0KKwkkKFFVSUVUX0dFTilta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCXNlZCAtZSAnc3xAQExPQ0FMRURJUkBAfCQocGVybF9sb2NhbGVkaXJfU1EpfGcnIFwKKwkgICAgLWUgJ3N8QEBOT19QRVJMX0NQQU5fRkFMTEJBQ0tTQEB8JChOT19QRVJMX0NQQU5fRkFMTEJBQ0tTX1NRKXxnJyBcCisJPCAkPCA+ICRACisKK3BlcmwvYnVpbGQvbWFuL21hbjMvR2l0LjNwbTogcGVybC9HaXQucG0KKwkkKFFVSUVUX0dFTilta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCXBvZDJtYW4gJDwgJEAKKworRklORF9TT1VSQ0VfRklMRVMgPSAoIFwKKwlnaXQgbHMtZmlsZXMgXAorCQknKi5baGNTXScgXAorCQknKi5zaCcgXAorCQknOiEqW3RwXVswLTldWzAtOV1bMC05XVswLTldKicgXAorCQknOiFjb250cmliJyBcCisJCTI+L2Rldi9udWxsIHx8IFwKKwkkKEZJTkQpIC4gXAorCQlcKCAtbmFtZSAuZ2l0IC10eXBlIGQgLXBydW5lIFwpIFwKKwkJLW8gXCggLW5hbWUgJ1t0cF1bMC05XVswLTldWzAtOV1bMC05XSonIC1wcnVuZSBcKSBcCisJCS1vIFwoIC1uYW1lIGNvbnRyaWIgLXR5cGUgZCAtcHJ1bmUgXCkgXAorCQktbyBcKCAtbmFtZSBidWlsZCAtdHlwZSBkIC1wcnVuZSBcKSBcCisJCS1vIFwoIC1uYW1lICd0cmFzaConIC10eXBlIGQgLXBydW5lIFwpIFwKKwkJLW8gXCggLW5hbWUgJyouW2hjU10nIC10eXBlIGYgLXByaW50IFwpIFwKKwkJLW8gXCggLW5hbWUgJyouc2gnIC10eXBlIGYgLXByaW50IFwpIFwKKwkJfCBzZWQgLWUgJ3N8XlwuL3x8JyBcCisJKQorCiskKEVUQUdTX1RBUkdFVCk6IEZPUkNFCisJJChSTSkgJChFVEFHU19UQVJHRVQpCisJJChGSU5EX1NPVVJDRV9GSUxFUykgfCB4YXJncyBldGFncyAtYSAtbyAkKEVUQUdTX1RBUkdFVCkKKwordGFnczogRk9SQ0UKKwkkKFJNKSB0YWdzCisJJChGSU5EX1NPVVJDRV9GSUxFUykgfCB4YXJncyBjdGFncyAtYQorCitjc2NvcGU6CisJJChSTSkgY3Njb3BlKgorCSQoRklORF9TT1VSQ0VfRklMRVMpIHwgeGFyZ3MgY3Njb3BlIC1iCisKKyMjIyBEZXRlY3QgcHJlZml4IGNoYW5nZXMKK1RSQUNLX1BSRUZJWCA9ICQoYmluZGlyX1NRKTokKGdpdGV4ZWNkaXJfU1EpOiQodGVtcGxhdGVfZGlyX1NRKTokKHByZWZpeF9TUSk6XAorCQkkKGxvY2FsZWRpcl9TUSkKKworR0lULVBSRUZJWDogRk9SQ0UKKwlARkxBR1M9JyQoVFJBQ0tfUFJFRklYKSc7IFwKKwlpZiB0ZXN0IHgiJCRGTEFHUyIgIT0geCJgY2F0IEdJVC1QUkVGSVggMj4vZGV2L251bGxgIiA7IHRoZW4gXAorCQllY2hvID4mMiAiICAgICogbmV3IHByZWZpeCBmbGFncyI7IFwKKwkJZWNobyAiJCRGTEFHUyIgPkdJVC1QUkVGSVg7IFwKIAlmaQogCi1UUkFDS19WQVJTID0gXAotCSQoc3Vic3QgJywnXCcnLFNIRUxMX1BBVEg9JyQoU0hFTExfUEFUSF9TUSknKSBcCi0JJChzdWJzdCAnLCdcJycsVENMX1BBVEg9JyQoVENMX1BBVEhfU1EpJykgXAotCSQoc3Vic3QgJywnXCcnLFRDTFRLX1BBVEg9JyQoVENMVEtfUEFUSF9TUSknKSBcCi0JJChzdWJzdCAnLCdcJycsZ2l0ZXhlY2Rpcj0nJChnaXRleGVjZGlyX1NRKScpIFwKLQkkKHN1YnN0ICcsJ1wnJyxnZ19saWJkaXI9JyQobGliZGlyX1NRKScpIFwKLQlHSVRHVUlfTUFDT1NYQVBQPSQoR0lUR1VJX01BQ09TWEFQUCkgXAotI2VuZCBUUkFDS19WQVJTCitUUkFDS19DRkxBR1MgPSAkKENDKTokKHN1YnN0ICcsJ1wnJywkKEFMTF9DRkxBR1MpKTokKFVTRV9HRVRURVhUX1NDSEVNRSkKIAotR0lULUdVSS1WQVJTOiBGT1JDRQotCUBWQVJTPSckKFRSQUNLX1ZBUlMpJzsgXAotCWlmIHRlc3QgeCIkJFZBUlMiICE9IHgiYGNhdCAkQCAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCi0JCWVjaG8gPiYyICIgICAgKiBuZXcgbG9jYXRpb25zIG9yIFRjbC9UayBpbnRlcnByZXRlciI7IFwKLQkJZWNobyA+JEAgIiQkVkFSUyI7IFwKK0dJVC1DRkxBR1M6IEZPUkNFCisJQEZMQUdTPSckKFRSQUNLX0NGTEFHUyknOyBcCisJICAgIGlmIHRlc3QgeCIkJEZMQUdTIiAhPSB4ImBjYXQgR0lULUNGTEFHUyAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gPiYyICIgICAgKiBuZXcgYnVpbGQgZmxhZ3MiOyBcCisJCWVjaG8gIiQkRkxBR1MiID5HSVQtQ0ZMQUdTOyBcCisgICAgICAgICAgICBmaQorCitUUkFDS19MREZMQUdTID0gJChzdWJzdCAnLCdcJycsJChBTExfTERGTEFHUykpCisKK0dJVC1MREZMQUdTOiBGT1JDRQorCUBGTEFHUz0nJChUUkFDS19MREZMQUdTKSc7IFwKKwkgICAgaWYgdGVzdCB4IiQkRkxBR1MiICE9IHgiYGNhdCBHSVQtTERGTEFHUyAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gPiYyICIgICAgKiBuZXcgbGluayBmbGFncyI7IFwKKwkJZWNobyAiJCRGTEFHUyIgPkdJVC1MREZMQUdTOyBcCisgICAgICAgICAgICBmaQorCisjIFdlIG5lZWQgdG8gYXBwbHkgc3EgdHdpY2UsIG9uY2UgdG8gcHJvdGVjdCBmcm9tIHRoZSBzaGVsbAorIyB0aGF0IHJ1bnMgR0lULUJVSUxELU9QVElPTlMsIGFuZCB0aGVuIGFnYWluIHRvIHByb3RlY3QgaXQKKyMgYW5kIHRoZSBmaXJzdCBsZXZlbCBxdW90aW5nIGZyb20gdGhlIHNoZWxsIHRoYXQgcnVucyAiZWNobyIuCitHSVQtQlVJTEQtT1BUSU9OUzogRk9SQ0UKKwlAZWNobyBTSEVMTF9QQVRIPVwnJyQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSF9TUSkpJ1wnID4kQCsKKwlAZWNobyBURVNUX1NIRUxMX1BBVEg9XCcnJChzdWJzdCAnLCdcJycsJChURVNUX1NIRUxMX1BBVEhfU1EpKSdcJyA+PiRAKworCUBlY2hvIFBFUkxfUEFUSD1cJyckKHN1YnN0ICcsJ1wnJywkKFBFUkxfUEFUSF9TUSkpJ1wnID4+JEArCisJQGVjaG8gRElGRj1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKERJRkYpKSknXCcgPj4kQCsKKwlAZWNobyBQWVRIT05fUEFUSD1cJyckKHN1YnN0ICcsJ1wnJywkKFBZVEhPTl9QQVRIX1NRKSknXCcgPj4kQCsKKwlAZWNobyBUQVI9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChUQVIpKSknXCcgPj4kQCsKKwlAZWNobyBOT19DVVJMPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoTk9fQ1VSTCkpKSdcJyA+PiRAKworCUBlY2hvIE5PX0VYUEFUPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoTk9fRVhQQVQpKSknXCcgPj4kQCsKKwlAZWNobyBVU0VfTElCUENSRTE9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChVU0VfTElCUENSRTEpKSknXCcgPj4kQCsKKwlAZWNobyBVU0VfTElCUENSRTI9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChVU0VfTElCUENSRTIpKSknXCcgPj4kQCsKKwlAZWNobyBOT19MSUJQQ1JFMV9KSVQ9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19MSUJQQ1JFMV9KSVQpKSknXCcgPj4kQCsKKwlAZWNobyBOT19QRVJMPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoTk9fUEVSTCkpKSdcJyA+PiRAKworCUBlY2hvIE5PX1BUSFJFQURTPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoTk9fUFRIUkVBRFMpKSknXCcgPj4kQCsKKwlAZWNobyBOT19QWVRIT049XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19QWVRIT04pKSknXCcgPj4kQCsKKwlAZWNobyBOT19VTklYX1NPQ0tFVFM9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19VTklYX1NPQ0tFVFMpKSknXCcgPj4kQCsKKwlAZWNobyBQQUdFUl9FTlY9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChQQUdFUl9FTlYpKSknXCcgPj4kQCsKKwlAZWNobyBEQ19TSEExPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoRENfU0hBMSkpKSdcJyA+PiRAKworCUBlY2hvIFg9XCckKFgpXCcgPj4kQCsKK2lmZGVmIFRFU1RfT1VUUFVUX0RJUkVDVE9SWQorCUBlY2hvIFRFU1RfT1VUUFVUX0RJUkVDVE9SWT1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKFRFU1RfT1VUUFVUX0RJUkVDVE9SWSkpKSdcJyA+PiRAKworZW5kaWYKK2lmZGVmIEdJVF9URVNUX09QVFMKKwlAZWNobyBHSVRfVEVTVF9PUFRTPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoR0lUX1RFU1RfT1BUUykpKSdcJyA+PiRAKworZW5kaWYKK2lmZGVmIEdJVF9URVNUX0NNUAorCUBlY2hvIEdJVF9URVNUX0NNUD1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKEdJVF9URVNUX0NNUCkpKSdcJyA+PiRAKworZW5kaWYKK2lmZGVmIEdJVF9URVNUX0NNUF9VU0VfQ09QSUVEX0NPTlRFWFQKKwlAZWNobyBHSVRfVEVTVF9DTVBfVVNFX0NPUElFRF9DT05URVhUPVllc1BsZWFzZSA+PiRAKworZW5kaWYKKwlAZWNobyBOT19HRVRURVhUPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoTk9fR0VUVEVYVCkpKSdcJyA+PiRAKworaWZkZWYgR0lUX1BFUkZfUkVQRUFUX0NPVU5UCisJQGVjaG8gR0lUX1BFUkZfUkVQRUFUX0NPVU5UPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoR0lUX1BFUkZfUkVQRUFUX0NPVU5UKSkpJ1wnID4+JEArCitlbmRpZgoraWZkZWYgR0lUX1BFUkZfUkVQTworCUBlY2hvIEdJVF9QRVJGX1JFUE89XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChHSVRfUEVSRl9SRVBPKSkpJ1wnID4+JEArCitlbmRpZgoraWZkZWYgR0lUX1BFUkZfTEFSR0VfUkVQTworCUBlY2hvIEdJVF9QRVJGX0xBUkdFX1JFUE89XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChHSVRfUEVSRl9MQVJHRV9SRVBPKSkpJ1wnID4+JEArCitlbmRpZgoraWZkZWYgR0lUX1BFUkZfTUFLRV9PUFRTCisJQGVjaG8gR0lUX1BFUkZfTUFLRV9PUFRTPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoR0lUX1BFUkZfTUFLRV9PUFRTKSkpJ1wnID4+JEArCitlbmRpZgoraWZkZWYgR0lUX1BFUkZfTUFLRV9DT01NQU5ECisJQGVjaG8gR0lUX1BFUkZfTUFLRV9DT01NQU5EPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoR0lUX1BFUkZfTUFLRV9DT01NQU5EKSkpJ1wnID4+JEArCitlbmRpZgoraWZkZWYgR0lUX0lOVEVST1BfTUFLRV9PUFRTCisJQGVjaG8gR0lUX0lOVEVST1BfTUFLRV9PUFRTPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoR0lUX0lOVEVST1BfTUFLRV9PUFRTKSkpJ1wnID4+JEArCitlbmRpZgoraWZkZWYgR0lUX1RFU1RfSU5ERVhfVkVSU0lPTgorCUBlY2hvIEdJVF9URVNUX0lOREVYX1ZFUlNJT049XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChHSVRfVEVTVF9JTkRFWF9WRVJTSU9OKSkpJ1wnID4+JEArCitlbmRpZgorCUBpZiBjbXAgJEArICRAID4vZGV2L251bGwgMj4mMTsgdGhlbiAkKFJNKSAkQCs7IGVsc2UgbXYgJEArICRAOyBmaQorCisjIyMgRGV0ZWN0IFB5dGhvbiBpbnRlcnByZXRlciBwYXRoIGNoYW5nZXMKK2lmbmRlZiBOT19QWVRIT04KK1RSQUNLX1BZVEhPTiA9ICQoc3Vic3QgJywnXCcnLC1EUFlUSE9OX1BBVEg9JyQoUFlUSE9OX1BBVEhfU1EpJykKKworR0lULVBZVEhPTi1WQVJTOiBGT1JDRQorCUBWQVJTPSckKFRSQUNLX1BZVEhPTiknOyBcCisJICAgIGlmIHRlc3QgeCIkJFZBUlMiICE9IHgiYGNhdCAkQCAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gPiYyICIgICAgKiBuZXcgUHl0aG9uIGludGVycHJldGVyIGxvY2F0aW9uIjsgXAorCQllY2hvICIkJFZBUlMiID4kQDsgXAorICAgICAgICAgICAgZmkKK2VuZGlmCisKK3Rlc3RfYmluZGlyX3Byb2dyYW1zIDo9ICQocGF0c3Vic3QgJSxiaW4td3JhcHBlcnMvJSwkKEJJTkRJUl9QUk9HUkFNU19ORUVEX1gpICQoQklORElSX1BST0dSQU1TX05PX1gpICQoVEVTVF9QUk9HUkFNU19ORUVEX1gpKQorCithbGw6OiAkKFRFU1RfUFJPR1JBTVMpICQodGVzdF9iaW5kaXJfcHJvZ3JhbXMpCisKK2Jpbi13cmFwcGVycy8lOiB3cmFwLWZvci1iaW4uc2gKKwlAbWtkaXIgLXAgYmluLXdyYXBwZXJzCisJJChRVUlFVF9HRU4pc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIX1NRKXwnIFwKKwkgICAgIC1lICdzfEBAQlVJTERfRElSQEB8JChzaGVsbCBwd2QpfCcgXAorCSAgICAgLWUgJ3N8QEBQUk9HQEB8JChwYXRzdWJzdCB0ZXN0LSUsdC9oZWxwZXIvdGVzdC0lJChYKSwkKEBGKSkkKHBhdHN1YnN0IGdpdCUsJChYKSwkKGZpbHRlciAkKEBGKSwkKEJJTkRJUl9QUk9HUkFNU19ORUVEX1gpKSl8JyA8ICQ8ID4gJEAgJiYgXAorCWNobW9kICt4ICRACisKKyMgR05VIG1ha2Ugc3VwcG9ydHMgZXhwb3J0aW5nIGFsbCB2YXJpYWJsZXMgYnkgImV4cG9ydCIgd2l0aG91dCBwYXJhbWV0ZXJzLgorIyBIb3dldmVyLCB0aGUgZW52aXJvbm1lbnQgZ2V0cyBxdWl0ZSBiaWcsIGFuZCBzb21lIHByb2dyYW1zIGhhdmUgcHJvYmxlbXMKKyMgd2l0aCB0aGF0LgorCitleHBvcnQgTk9fU1ZOX1RFU1RTCitleHBvcnQgVEVTVF9OT19NQUxMT0NfQ0hFQ0sKKworIyMjIFRlc3RpbmcgcnVsZXMKKwordGVzdDogYWxsCisJJChNQUtFKSAtQyB0LyBhbGwKKworcGVyZjogYWxsCisJJChNQUtFKSAtQyB0L3BlcmYvIGFsbAorCisuUEhPTlk6IHRlc3QgcGVyZgorCit0L2hlbHBlci90ZXN0LWxpbmUtYnVmZmVyJFg6ICQoVkNTU1ZOX0xJQikKKwordC9oZWxwZXIvdGVzdC1zdm4tZmUkWDogJChWQ1NTVk5fTElCKQorCisuUFJFQ0lPVVM6ICQoVEVTVF9PQkpTKQorCit0L2hlbHBlci90ZXN0LXRvb2wkWDogJChwYXRzdWJzdCAlLHQvaGVscGVyLyUsJChURVNUX0JVSUxUSU5TX09CSlMpKQorCit0L2hlbHBlci90ZXN0LSUkWDogdC9oZWxwZXIvdGVzdC0lLm8gR0lULUxERkxBR1MgJChHSVRMSUJTKQorCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgJChmaWx0ZXIgJS5hLCReKSAkKExJQlMpCisKK2NoZWNrLXNoYTE6OiB0L2hlbHBlci90ZXN0LXRvb2wkWAorCXQvaGVscGVyL3Rlc3Qtc2hhMS5zaAorCitTUF9PQkogPSAkKHBhdHN1YnN0ICUubywlLnNwLCQoQ19PQkopKQorCiskKFNQX09CSik6ICUuc3A6ICUuYyBHSVQtQ0ZMQUdTIEZPUkNFCisJJChRVUlFVF9TUCljZ2NjIC1uby1jb21waWxlICQoQUxMX0NGTEFHUykgJChFWFRSQV9DUFBGTEFHUykgXAorCQkkKFNQQVJTRV9GTEFHUykgJChTUF9FWFRSQV9GTEFHUykgJDwKKworLlBIT05ZOiBzcGFyc2UgJChTUF9PQkopCitzcGFyc2U6ICQoU1BfT0JKKQorCitFWENFUFRfSERSUyA6PSBjb21tYW5kLWxpc3QuaCBjb25maWctbGlzdC5oIHVuaWNvZGUtd2lkdGguaCBjb21wYXQvJSB4ZGlmZi8lCitpZm5kZWYgR0NSWVBUX1NIQTI1NgorCUVYQ0VQVF9IRFJTICs9IHNoYTI1Ni9nY3J5cHQuaAorZW5kaWYKK0NIS19IRFJTID0gJChmaWx0ZXItb3V0ICQoRVhDRVBUX0hEUlMpLCQoTElCX0gpKQorSENPID0gJChwYXRzdWJzdCAlLmgsJS5oY28sJChDSEtfSERSUykpCitIQ0MgPSAkKEhDTzpoY289aGNjKQorCislLmhjYzogJS5oCisJQGVjaG8gJyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCInID4kQAorCUBlY2hvICcjaW5jbHVkZSAiJDwiJyA+PiRACisKKyQoSENPKTogJS5oY286ICUuaGNjIEZPUkNFCisJJChRVUlFVF9IRFIpJChDQykgJChBTExfQ0ZMQUdTKSAtbyAvZGV2L251bGwgLWMgLXhjICQ8CisKKy5QSE9OWTogaGRyLWNoZWNrICQoSENPKQoraGRyLWNoZWNrOiAkKEhDTykKKworLlBIT05ZOiBzdHlsZQorc3R5bGU6CisJZ2l0IGNsYW5nLWZvcm1hdCAtLXN0eWxlIGZpbGUgLS1kaWZmIC0tZXh0ZW5zaW9ucyBjLGgKKworY2hlY2s6IGNvbmZpZy1saXN0LmggY29tbWFuZC1saXN0LmgKKwlAaWYgc3BhcnNlOyBcCisJdGhlbiBcCisJCWVjaG8gPiYyICJVc2UgJ21ha2Ugc3BhcnNlJyBpbnN0ZWFkIjsgXAorCQkkKE1BS0UpIC0tbm8tcHJpbnQtZGlyZWN0b3J5IHNwYXJzZTsgXAorCWVsc2UgXAorCQllY2hvID4mMiAiRGlkIHlvdSBtZWFuICdtYWtlIHRlc3QnPyI7IFwKKwkJZXhpdCAxOyBcCiAJZmkKIAotaWZkZWYgR0lUR1VJX01BQ09TWEFQUAotYWxsOjogZ2l0LWd1aSBHaXRcIEd1aS5hcHAKK0ZPVU5EX0NfU09VUkNFUyA9ICQoZmlsdGVyICUuYywkKHNoZWxsICQoRklORF9TT1VSQ0VfRklMRVMpKSkKK0NPQ0NJX1NPVVJDRVMgPSAkKGZpbHRlci1vdXQgJChUSElSRF9QQVJUWV9TT1VSQ0VTKSwkKEZPVU5EX0NfU09VUkNFUykpCisKKyUuY29jY2kucGF0Y2g6ICUuY29jY2kgJChDT0NDSV9TT1VSQ0VTKQorCSQoUVVJRVRfU1BBVENIKSBcCisJaWYgdGVzdCAkKFNQQVRDSF9CQVRDSF9TSVpFKSA9IDA7IHRoZW4gXAorCQlsaW1pdD07IFwKKwllbHNlIFwKKwkJbGltaXQ9Jy1uICQoU1BBVENIX0JBVENIX1NJWkUpJzsgXAorCWZpOyBcCisJaWYgISBlY2hvICQoQ09DQ0lfU09VUkNFUykgfCB4YXJncyAkJGxpbWl0IFwKKwkJJChTUEFUQ0gpIC0tc3AtZmlsZSAkPCAkKFNQQVRDSF9GTEFHUykgXAorCQk+JEArIDI+JEAubG9nOyBcCisJdGhlbiBcCisJCWNhdCAkQC5sb2c7IFwKKwkJZXhpdCAxOyBcCisJZmk7IFwKKwltdiAkQCsgJEA7IFwKKwlpZiB0ZXN0IC1zICRAOyBcCisJdGhlbiBcCisJCWVjaG8gJyAgICAnIFNQQVRDSCByZXN1bHQ6ICRAOyBcCisJZmkKK2NvY2NpY2hlY2s6ICQoYWRkc3VmZml4IC5wYXRjaCwkKGZpbHRlci1vdXQgJS5wZW5kaW5nLmNvY2NpLCQod2lsZGNhcmQgY29udHJpYi9jb2NjaW5lbGxlLyouY29jY2kpKSkKKworIyBTZWUgY29udHJpYi9jb2NjaW5lbGxlL1JFQURNRQorY29jY2ljaGVjay1wZW5kaW5nOiAkKGFkZHN1ZmZpeCAucGF0Y2gsJCh3aWxkY2FyZCBjb250cmliL2NvY2NpbmVsbGUvKi5wZW5kaW5nLmNvY2NpKSkKKworLlBIT05ZOiBjb2NjaWNoZWNrIGNvY2NpY2hlY2stcGVuZGluZworCisjIyMgSW5zdGFsbGF0aW9uIHJ1bGVzCisKK2lmbmVxICgkKGZpbHRlciAvJSwkKGZpcnN0d29yZCAkKHRlbXBsYXRlX2RpcikpKSwpCit0ZW1wbGF0ZV9pbnN0ZGlyID0gJCh0ZW1wbGF0ZV9kaXIpCitlbHNlCit0ZW1wbGF0ZV9pbnN0ZGlyID0gJChwcmVmaXgpLyQodGVtcGxhdGVfZGlyKQogZW5kaWYKLWlmZGVmIEdJVEdVSV9XSU5ET1dTX1dSQVBQRVIKLWFsbDo6IGdpdC1ndWkKK2V4cG9ydCB0ZW1wbGF0ZV9pbnN0ZGlyCisKK2lmbmVxICgkKGZpbHRlciAvJSwkKGZpcnN0d29yZCAkKGdpdGV4ZWNkaXIpKSksKQorZ2l0ZXhlY19pbnN0ZGlyID0gJChnaXRleGVjZGlyKQorZWxzZQorZ2l0ZXhlY19pbnN0ZGlyID0gJChwcmVmaXgpLyQoZ2l0ZXhlY2RpcikKIGVuZGlmCi1hbGw6OiAkKEdJVEdVSV9NQUlOKSBsaWIvdGNsSW5kZXggJChBTExfTVNHRklMRVMpCitnaXRleGVjX2luc3RkaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGdpdGV4ZWNfaW5zdGRpcikpCitleHBvcnQgZ2l0ZXhlY19pbnN0ZGlyCisKK2lmbmVxICgkKGZpbHRlciAvJSwkKGZpcnN0d29yZCAkKG1lcmdldG9vbHNkaXIpKSksKQorbWVyZ2V0b29sc19pbnN0ZGlyID0gJChtZXJnZXRvb2xzZGlyKQorZWxzZQorbWVyZ2V0b29sc19pbnN0ZGlyID0gJChwcmVmaXgpLyQobWVyZ2V0b29sc2RpcikKK2VuZGlmCittZXJnZXRvb2xzX2luc3RkaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKG1lcmdldG9vbHNfaW5zdGRpcikpCisKK2luc3RhbGxfYmluZGlyX3Byb2dyYW1zIDo9ICQocGF0c3Vic3QgJSwlJFgsJChCSU5ESVJfUFJPR1JBTVNfTkVFRF9YKSkgJChCSU5ESVJfUFJPR1JBTVNfTk9fWCkKKworLlBIT05ZOiBwcm9maWxlLWluc3RhbGwgcHJvZmlsZS1mYXN0LWluc3RhbGwKK3Byb2ZpbGUtaW5zdGFsbDogcHJvZmlsZQorCSQoTUFLRSkgaW5zdGFsbAorCitwcm9maWxlLWZhc3QtaW5zdGFsbDogcHJvZmlsZS1mYXN0CisJJChNQUtFKSBpbnN0YWxsCiAKIGluc3RhbGw6IGFsbAotCSQoUVVJRVQpJChJTlNUQUxMX0QwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScgJChJTlNUQUxMX0QxKQotCSQoUVVJRVQpJChJTlNUQUxMX1gwKWdpdC1ndWkgJChJTlNUQUxMX1gxKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknCi0JJChRVUlFVCkkKElOU1RBTExfWDApZ2l0LWd1aS0tYXNrcGFzcyAkKElOU1RBTExfWDEpICckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScKLQkkKFFVSUVUKSQoZm9yZWFjaCBwLCQoR0lUR1VJX0JVSUxUX0lOUyksICQoSU5TVEFMTF9MMCknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSkvJHAnICQoSU5TVEFMTF9MMSknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSkvZ2l0LWd1aScgJChJTlNUQUxMX0wyKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKS8kcCcgJChJTlNUQUxMX0wzKSAmJikgdHJ1ZQotaWZkZWYgR0lUR1VJX1dJTkRPV1NfV1JBUFBFUgotCSQoUVVJRVQpJChJTlNUQUxMX1IwKWdpdC1ndWkudGNsICQoSU5TVEFMTF9SMSkgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJworCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJworCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworCSQoSU5TVEFMTCkgJChBTExfUFJPR1JBTVMpICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworCSQoSU5TVEFMTCkgLW0gNjQ0ICQoU0NSSVBUX0xJQikgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSAkKGluc3RhbGxfYmluZGlyX3Byb2dyYW1zKSAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKK2lmZGVmIE1TVkMKKwkjIFdlIERPIE5PVCBpbnN0YWxsIHRoZSBpbmRpdmlkdWFsIGZvby5vLnBkYiBmaWxlcyBiZWNhdXNlIHRoZXkKKwkjIGhhdmUgYWxyZWFkeSBiZWVuIHJvbGxlZCB1cCBpbnRvIHRoZSBleGUncyBwZGIgZmlsZS4KKwkjIFdlIERPIE5PVCBoYXZlIHBkYiBmaWxlcyBmb3IgdGhlIGJ1aWx0aW4gY29tbWFuZHMgKGxpa2UgZ2l0LXN0YXR1cy5leGUpCisJIyBiZWNhdXNlIGl0IGlzIGp1c3QgYSBjb3B5L2hhcmRsaW5rIG9mIGdpdC5leGUsIHJhdGhlciB0aGFuIGEgdW5pcXVlIGJpbmFyeS4KKwkkKElOU1RBTEwpIGdpdC5wZGIgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCisJJChJTlNUQUxMKSBnaXQtc2hlbGwucGRiICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJworCSQoSU5TVEFMTCkgZ2l0LXVwbG9hZC1wYWNrLnBkYiAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC1jcmVkZW50aWFsLXN0b3JlLnBkYiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC1kYWVtb24ucGRiICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworCSQoSU5TVEFMTCkgZ2l0LWZhc3QtaW1wb3J0LnBkYiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC1odHRwLWJhY2tlbmQucGRiICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworCSQoSU5TVEFMTCkgZ2l0LWh0dHAtZmV0Y2gucGRiICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworCSQoSU5TVEFMTCkgZ2l0LWh0dHAtcHVzaC5wZGIgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSBnaXQtaW1hcC1zZW5kLnBkYiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC1yZW1vdGUtaHR0cC5wZGIgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSBnaXQtcmVtb3RlLXRlc3Rzdm4ucGRiICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworCSQoSU5TVEFMTCkgZ2l0LXNoLWkxOG4tLWVudnN1YnN0LnBkYiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC1zaG93LWluZGV4LnBkYiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKK2lmbmRlZiBERUJVRworCSQoSU5TVEFMTCkgJCh2Y3BrZ19yZWxfYmluKS8qLmRsbCAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKKwkkKElOU1RBTEwpICQodmNwa2dfcmVsX2JpbikvKi5wZGIgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCitlbHNlCisJJChJTlNUQUxMKSAkKHZjcGtnX2RiZ19iaW4pLyouZGxsICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJworCSQoSU5TVEFMTCkgJCh2Y3BrZ19kYmdfYmluKS8qLnBkYiAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKIGVuZGlmCi0JJChRVUlFVCkkKElOU1RBTExfRDApJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknICQoSU5TVEFMTF9EMSkKLQkkKFFVSUVUKSQoSU5TVEFMTF9SMClsaWIvdGNsSW5kZXggJChJTlNUQUxMX1IxKSAnJChERVNURElSX1NRKSQobGliZGlyX1NRKScKLWlmZGVmIEdJVEdVSV9NQUNPU1hBUFAKLQkkKFFVSUVUKSQoSU5TVEFMTF9BMCknR2l0IEd1aS5hcHAnICQoSU5TVEFMTF9BMSkgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknCi0JJChRVUlFVCkkKElOU1RBTExfWDApZ2l0LWd1aS50Y2wgJChJTlNUQUxMX1gxKSAnJChERVNURElSX1NRKSQobGliZGlyX1NRKScKIGVuZGlmCi0JJChRVUlFVCkkKGZvcmVhY2ggcCwkKEFMTF9MSUJGSUxFUykgJChOT05UQ0xfTElCRklMRVMpLCAkKElOU1RBTExfUjApJHAgJChJTlNUQUxMX1IxKSAnJChERVNURElSX1NRKSQobGliZGlyX1NRKScgJiYpIHRydWUKLQkkKFFVSUVUKSQoSU5TVEFMTF9EMCknJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknICQoSU5TVEFMTF9EMSkKLQkkKFFVSUVUKSQoZm9yZWFjaCBwLCQoQUxMX01TR0ZJTEVTKSwgJChJTlNUQUxMX1IwKSRwICQoSU5TVEFMTF9SMSkgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJyAmJikgdHJ1ZQotCi11bmluc3RhbGw6Ci0JJChRVUlFVCkkKENMRUFOX0RTVCkgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJwotCSQoUVVJRVQpJChSRU1PVkVfRjApJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJy9naXQtZ3VpICQoUkVNT1ZFX0YxKQotCSQoUVVJRVQpJChSRU1PVkVfRjApJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJy9naXQtZ3VpLS1hc2twYXNzICQoUkVNT1ZFX0YxKQotCSQoUVVJRVQpJChmb3JlYWNoIHAsJChHSVRHVUlfQlVJTFRfSU5TKSwgJChSRU1PVkVfRjApJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJy8kcCAkKFJFTU9WRV9GMSkgJiYpIHRydWUKLWlmZGVmIEdJVEdVSV9XSU5ET1dTX1dSQVBQRVIKLQkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScvZ2l0LWd1aS50Y2wgJChSRU1PVkVfRjEpCisJJChNQUtFKSAtQyB0ZW1wbGF0ZXMgREVTVERJUj0nJChERVNURElSX1NRKScgaW5zdGFsbAorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChtZXJnZXRvb2xzX2luc3RkaXJfU1EpJworCSQoSU5TVEFMTCkgLW0gNjQ0IG1lcmdldG9vbHMvKiAnJChERVNURElSX1NRKSQobWVyZ2V0b29sc19pbnN0ZGlyX1NRKScKK2lmbmRlZiBOT19HRVRURVhUCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKGxvY2FsZWRpcl9TUSknCisJKGNkIHBvL2J1aWxkL2xvY2FsZSAmJiAkKFRBUikgY2YgLSAuKSB8IFwKKwkoY2QgJyQoREVTVERJUl9TUSkkKGxvY2FsZWRpcl9TUSknICYmIHVtYXNrIDAyMiAmJiAkKFRBUikgeG9mIC0pCiBlbmRpZgotCSQoUVVJRVQpJChDTEVBTl9EU1QpICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJwotCSQoUVVJRVQpJChSRU1PVkVfRjApJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknL3RjbEluZGV4ICQoUkVNT1ZFX0YxKQotaWZkZWYgR0lUR1VJX01BQ09TWEFQUAotCSQoUVVJRVQpJChSRU1PVkVfRjApJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSkvR2l0IEd1aS5hcHAnICQoUkVNT1ZFX0YxKQotCSQoUVVJRVQpJChSRU1PVkVfRjApJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknL2dpdC1ndWkudGNsICQoUkVNT1ZFX0YxKQoraWZuZGVmIE5PX1BFUkwKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQocGVybGxpYmRpcl9TUSknCisJKGNkIHBlcmwvYnVpbGQvbGliICYmICQoVEFSKSBjZiAtIC4pIHwgXAorCShjZCAnJChERVNURElSX1NRKSQocGVybGxpYmRpcl9TUSknICYmIHVtYXNrIDAyMiAmJiAkKFRBUikgeG9mIC0pCisJJChNQUtFKSAtQyBnaXR3ZWIgaW5zdGFsbAogZW5kaWYKLQkkKFFVSUVUKSQoZm9yZWFjaCBwLCQoQUxMX0xJQkZJTEVTKSAkKE5PTlRDTF9MSUJGSUxFUyksICQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJy8kKG5vdGRpciAkcCkgJChSRU1PVkVfRjEpICYmKSB0cnVlCi0JJChRVUlFVCkkKENMRUFOX0RTVCkgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJwotCSQoUVVJRVQpJChmb3JlYWNoIHAsJChBTExfTVNHRklMRVMpLCAkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknLyQobm90ZGlyICRwKSAkKFJFTU9WRV9GMSkgJiYpIHRydWUKLQkkKFFVSUVUKSQoUkVNT1ZFX0QwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScgJChSRU1PVkVfRDEpCi0JJChRVUlFVCkkKFJFTU9WRV9EMCknJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknICQoUkVNT1ZFX0QxKQotCSQoUVVJRVQpJChSRU1PVkVfRDApJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknICQoUkVNT1ZFX0QxKQotCSQoUVVJRVQpJChSRU1PVkVfRDApYGRpcm5hbWUgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknYCAkKFJFTU9WRV9EMSkKLQotZGlzdC12ZXJzaW9uOgotCUBta2RpciAtcCAkKFRBUkRJUikKLQlAZWNobyAkKEdJVEdVSV9WRVJTSU9OKSA+ICQoVEFSRElSKS92ZXJzaW9uCi0KLWNsZWFuOjoKLQkkKFJNX1JGKSAkKEdJVEdVSV9NQUlOKSBsaWIvdGNsSW5kZXggcG8vKi5tc2cKLQkkKFJNX1JGKSBHSVQtVkVSU0lPTi1GSUxFIEdJVC1HVUktVkFSUwotaWZkZWYgR0lUR1VJX01BQ09TWEFQUAotCSQoUk1fUkYpICdHaXQgR3VpLmFwcCcqIGdpdC1ndWkKK2lmbmRlZiBOT19UQ0xUSworCSQoTUFLRSkgLUMgZ2l0ay1naXQgaW5zdGFsbAorCSQoTUFLRSkgLUMgZ2l0LWd1aSBnaXRleGVjZGlyPSckKGdpdGV4ZWNfaW5zdGRpcl9TUSknIGluc3RhbGwKIGVuZGlmCi1pZmRlZiBHSVRHVUlfV0lORE9XU19XUkFQUEVSCi0JJChSTV9SRikgZ2l0LWd1aQoraWZuZXEgKCwkWCkKKwkkKGZvcmVhY2ggcCwkKHBhdHN1YnN0ICUkWCwlLCQoZmlsdGVyICUkWCwkKEFMTF9QUk9HUkFNUykgJChCVUlMVF9JTlMpIGdpdCRYKSksIHRlc3QgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSkvJHAnIC1lZiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKS8kcCRYJyB8fCAkKFJNKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKS8kcCc7KQogZW5kaWYKIAotLlBIT05ZOiBhbGwgaW5zdGFsbCB1bmluc3RhbGwgZGlzdC12ZXJzaW9uIGNsZWFuCi0uUEhPTlk6IEZPUkNFCisJYmluZGlyPSQkKGNkICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJyAmJiBwd2QpICYmIFwKKwlleGVjZGlyPSQkKGNkICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJyAmJiBwd2QpICYmIFwKKwlkZXN0ZGlyX2Zyb21fZXhlY2Rpcl9TUT0kJChlY2hvICckKGdpdGV4ZWNkaXJfcmVsYXRpdmVfU1EpJyB8IHNlZCAtZSAnc3xbXi9dW14vXSp8Li58ZycpICYmIFwKKwl7IHRlc3QgIiQkYmluZGlyLyIgPSAiJCRleGVjZGlyLyIgfHwgXAorCSAgZm9yIHAgaW4gZ2l0JFggJChmaWx0ZXIgJChpbnN0YWxsX2JpbmRpcl9wcm9ncmFtcyksJChBTExfUFJPR1JBTVMpKTsgZG8gXAorCQkkKFJNKSAiJCRleGVjZGlyLyQkcCIgJiYgXAorCQl0ZXN0IC1uICIkKElOU1RBTExfU1lNTElOS1MpIiAmJiBcCisJCWxuIC1zICIkJGRlc3RkaXJfZnJvbV9leGVjZGlyX1NRLyQoYmluZGlyX3JlbGF0aXZlX1NRKS8kJHAiICIkJGV4ZWNkaXIvJCRwIiB8fCBcCisJCXsgdGVzdCAteiAiJChOT19JTlNUQUxMX0hBUkRMSU5LUykkKE5PX0NST1NTX0RJUkVDVE9SWV9IQVJETElOS1MpIiAmJiBcCisJCSAgbG4gIiQkYmluZGlyLyQkcCIgIiQkZXhlY2Rpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJICBjcCAiJCRiaW5kaXIvJCRwIiAiJCRleGVjZGlyLyQkcCIgfHwgZXhpdDsgfSBcCisJICBkb25lOyBcCisJfSAmJiBcCisJZm9yIHAgaW4gJChmaWx0ZXIgJChpbnN0YWxsX2JpbmRpcl9wcm9ncmFtcyksJChCVUlMVF9JTlMpKTsgZG8gXAorCQkkKFJNKSAiJCRiaW5kaXIvJCRwIiAmJiBcCisJCXRlc3QgLW4gIiQoSU5TVEFMTF9TWU1MSU5LUykiICYmIFwKKwkJbG4gLXMgImdpdCRYIiAiJCRiaW5kaXIvJCRwIiB8fCBcCisJCXsgdGVzdCAteiAiJChOT19JTlNUQUxMX0hBUkRMSU5LUykiICYmIFwKKwkJICBsbiAiJCRiaW5kaXIvZ2l0JFgiICIkJGJpbmRpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJICBsbiAtcyAiZ2l0JFgiICIkJGJpbmRpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJICBjcCAiJCRiaW5kaXIvZ2l0JFgiICIkJGJpbmRpci8kJHAiIHx8IGV4aXQ7IH0gXAorCWRvbmUgJiYgXAorCWZvciBwIGluICQoQlVJTFRfSU5TKTsgZG8gXAorCQkkKFJNKSAiJCRleGVjZGlyLyQkcCIgJiYgXAorCQl0ZXN0IC1uICIkKElOU1RBTExfU1lNTElOS1MpIiAmJiBcCisJCWxuIC1zICIkJGRlc3RkaXJfZnJvbV9leGVjZGlyX1NRLyQoYmluZGlyX3JlbGF0aXZlX1NRKS9naXQkWCIgIiQkZXhlY2Rpci8kJHAiIHx8IFwKKwkJeyB0ZXN0IC16ICIkKE5PX0lOU1RBTExfSEFSRExJTktTKSIgJiYgXAorCQkgIGxuICIkJGV4ZWNkaXIvZ2l0JFgiICIkJGV4ZWNkaXIvJCRwIiAyPi9kZXYvbnVsbCB8fCBcCisJCSAgbG4gLXMgImdpdCRYIiAiJCRleGVjZGlyLyQkcCIgMj4vZGV2L251bGwgfHwgXAorCQkgIGNwICIkJGV4ZWNkaXIvZ2l0JFgiICIkJGV4ZWNkaXIvJCRwIiB8fCBleGl0OyB9IFwKKwlkb25lICYmIFwKKwlyZW1vdGVfY3VybF9hbGlhc2VzPSIkKFJFTU9URV9DVVJMX0FMSUFTRVMpIiAmJiBcCisJZm9yIHAgaW4gJCRyZW1vdGVfY3VybF9hbGlhc2VzOyBkbyBcCisJCSQoUk0pICIkJGV4ZWNkaXIvJCRwIiAmJiBcCisJCXRlc3QgLW4gIiQoSU5TVEFMTF9TWU1MSU5LUykiICYmIFwKKwkJbG4gLXMgImdpdC1yZW1vdGUtaHR0cCRYIiAiJCRleGVjZGlyLyQkcCIgfHwgXAorCQl7IHRlc3QgLXogIiQoTk9fSU5TVEFMTF9IQVJETElOS1MpIiAmJiBcCisJCSAgbG4gIiQkZXhlY2Rpci9naXQtcmVtb3RlLWh0dHAkWCIgIiQkZXhlY2Rpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJICBsbiAtcyAiZ2l0LXJlbW90ZS1odHRwJFgiICIkJGV4ZWNkaXIvJCRwIiAyPi9kZXYvbnVsbCB8fCBcCisJCSAgY3AgIiQkZXhlY2Rpci9naXQtcmVtb3RlLWh0dHAkWCIgIiQkZXhlY2Rpci8kJHAiIHx8IGV4aXQ7IH0gXAorCWRvbmUgJiYgXAorCS4vY2hlY2tfYmluZGlyICJ6JCRiaW5kaXIiICJ6JCRleGVjZGlyIiAiJCRiaW5kaXIvZ2l0LWFkZCRYIgorCisuUEhPTlk6IGluc3RhbGwtZ2l0d2ViIGluc3RhbGwtZG9jIGluc3RhbGwtbWFuIGluc3RhbGwtbWFuLXBlcmwgaW5zdGFsbC1odG1sIGluc3RhbGwtaW5mbyBpbnN0YWxsLXBkZgorLlBIT05ZOiBxdWljay1pbnN0YWxsLWRvYyBxdWljay1pbnN0YWxsLW1hbiBxdWljay1pbnN0YWxsLWh0bWwKK2luc3RhbGwtZ2l0d2ViOgorCSQoTUFLRSkgLUMgZ2l0d2ViIGluc3RhbGwKKworaW5zdGFsbC1kb2M6IGluc3RhbGwtbWFuLXBlcmwKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gaW5zdGFsbAorCitpbnN0YWxsLW1hbjogaW5zdGFsbC1tYW4tcGVybAorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBpbnN0YWxsLW1hbgorCitpbnN0YWxsLW1hbi1wZXJsOiBtYW4tcGVybAorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChtYW5kaXJfU1EpL21hbjMnCisJKGNkIHBlcmwvYnVpbGQvbWFuL21hbjMgJiYgJChUQVIpIGNmIC0gLikgfCBcCisJKGNkICckKERFU1RESVJfU1EpJChtYW5kaXJfU1EpL21hbjMnICYmIHVtYXNrIDAyMiAmJiAkKFRBUikgeG9mIC0pCisKK2luc3RhbGwtaHRtbDoKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gaW5zdGFsbC1odG1sCisKK2luc3RhbGwtaW5mbzoKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gaW5zdGFsbC1pbmZvCisKK2luc3RhbGwtcGRmOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBpbnN0YWxsLXBkZgorCitxdWljay1pbnN0YWxsLWRvYzoKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gcXVpY2staW5zdGFsbAorCitxdWljay1pbnN0YWxsLW1hbjoKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gcXVpY2staW5zdGFsbC1tYW4KKworcXVpY2staW5zdGFsbC1odG1sOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBxdWljay1pbnN0YWxsLWh0bWwKKworCisKKyMjIyBNYWludGFpbmVyJ3MgZGlzdCBydWxlcworCitHSVRfVEFSTkFNRSA9IGdpdC0kKEdJVF9WRVJTSU9OKQorZGlzdDogZ2l0LWFyY2hpdmUkKFgpIGNvbmZpZ3VyZQorCS4vZ2l0LWFyY2hpdmUgLS1mb3JtYXQ9dGFyIFwKKwkJLS1wcmVmaXg9JChHSVRfVEFSTkFNRSkvIEhFQURee3RyZWV9ID4gJChHSVRfVEFSTkFNRSkudGFyCisJQG1rZGlyIC1wICQoR0lUX1RBUk5BTUUpCisJQGNwIGNvbmZpZ3VyZSAkKEdJVF9UQVJOQU1FKQorCUBlY2hvICQoR0lUX1ZFUlNJT04pID4gJChHSVRfVEFSTkFNRSkvdmVyc2lvbgorCUAkKE1BS0UpIC1DIGdpdC1ndWkgVEFSRElSPS4uLyQoR0lUX1RBUk5BTUUpL2dpdC1ndWkgZGlzdC12ZXJzaW9uCisJJChUQVIpIHJmICQoR0lUX1RBUk5BTUUpLnRhciBcCisJCSQoR0lUX1RBUk5BTUUpL2NvbmZpZ3VyZSBcCisJCSQoR0lUX1RBUk5BTUUpL3ZlcnNpb24gXAorCQkkKEdJVF9UQVJOQU1FKS9naXQtZ3VpL3ZlcnNpb24KK2lmZGVmIERDX1NIQTFfU1VCTU9EVUxFCisJQG1rZGlyIC1wICQoR0lUX1RBUk5BTUUpL3NoYTFjb2xsaXNpb25kZXRlY3Rpb24vbGliCisJQGNwIHNoYTFjb2xsaXNpb25kZXRlY3Rpb24vTElDRU5TRS50eHQgXAorCQkkKEdJVF9UQVJOQU1FKS9zaGExY29sbGlzaW9uZGV0ZWN0aW9uLworCUBjcCBzaGExY29sbGlzaW9uZGV0ZWN0aW9uL0xJQ0VOU0UudHh0IFwKKwkJJChHSVRfVEFSTkFNRSkvc2hhMWNvbGxpc2lvbmRldGVjdGlvbi8KKwlAY3Agc2hhMWNvbGxpc2lvbmRldGVjdGlvbi9saWIvc2hhMS5bY2hdIFwKKwkJJChHSVRfVEFSTkFNRSkvc2hhMWNvbGxpc2lvbmRldGVjdGlvbi9saWIvCisJQGNwIHNoYTFjb2xsaXNpb25kZXRlY3Rpb24vbGliL3ViY19jaGVjay5bY2hdIFwKKwkJJChHSVRfVEFSTkFNRSkvc2hhMWNvbGxpc2lvbmRldGVjdGlvbi9saWIvCisJJChUQVIpIHJmICQoR0lUX1RBUk5BTUUpLnRhciBcCisJCSQoR0lUX1RBUk5BTUUpL3NoYTFjb2xsaXNpb25kZXRlY3Rpb24vTElDRU5TRS50eHQgXAorCQkkKEdJVF9UQVJOQU1FKS9zaGExY29sbGlzaW9uZGV0ZWN0aW9uL2xpYi9zaGExLltjaF0gXAorCQkkKEdJVF9UQVJOQU1FKS9zaGExY29sbGlzaW9uZGV0ZWN0aW9uL2xpYi91YmNfY2hlY2suW2NoXQorZW5kaWYKKwlAJChSTSkgLXIgJChHSVRfVEFSTkFNRSkKKwlnemlwIC1mIC05ICQoR0lUX1RBUk5BTUUpLnRhcgorCitycG06OgorCUBlY2hvID4mMiAiVXNlIGRpc3RybyBwYWNrYWdlZCBzb3VyY2VzIHRvIHJ1biBycG1idWlsZCIKKwlAZmFsc2UKKy5QSE9OWTogcnBtCisKK2lmbmVxICgkKElOQ0xVREVfRExMU19JTl9BUlRJRkFDVFMpLCkKK09USEVSX1BST0dSQU1TICs9ICQoc2hlbGwgZWNobyAqLmRsbCB0L2hlbHBlci8qLmRsbCkKK2VuZGlmCisKK2FydGlmYWN0cy10YXI6OiAkKEFMTF9QUk9HUkFNUykgJChTQ1JJUFRfTElCKSAkKEJVSUxUX0lOUykgJChPVEhFUl9QUk9HUkFNUykgXAorCQlHSVQtQlVJTEQtT1BUSU9OUyAkKFRFU1RfUFJPR1JBTVMpICQodGVzdF9iaW5kaXJfcHJvZ3JhbXMpIFwKKwkJJChNT0ZJTEVTKQorCSQoUVVJRVRfU1VCRElSMCl0ZW1wbGF0ZXMgJChRVUlFVF9TVUJESVIxKSBcCisJCVNIRUxMX1BBVEg9JyQoU0hFTExfUEFUSF9TUSknIFBFUkxfUEFUSD0nJChQRVJMX1BBVEhfU1EpJworCXRlc3QgLW4gIiQoQVJUSUZBQ1RTX0RJUkVDVE9SWSkiCisJbWtkaXIgLXAgIiQoQVJUSUZBQ1RTX0RJUkVDVE9SWSkiCisJJChUQVIpIGN6ZiAiJChBUlRJRkFDVFNfRElSRUNUT1JZKS9hcnRpZmFjdHMudGFyLmd6IiAkXiB0ZW1wbGF0ZXMvYmx0LworLlBIT05ZOiBhcnRpZmFjdHMtdGFyCisKK2h0bWxkb2NzID0gZ2l0LWh0bWxkb2NzLSQoR0lUX1ZFUlNJT04pCittYW5wYWdlcyA9IGdpdC1tYW5wYWdlcy0kKEdJVF9WRVJTSU9OKQorLlBIT05ZOiBkaXN0LWRvYyBkaXN0Y2xlYW4KK2Rpc3QtZG9jOgorCSQoUk0pIC1yIC5kb2MtdG1wLWRpcgorCW1rZGlyIC5kb2MtdG1wLWRpcgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBXRUJET0NfREVTVD0uLi8uZG9jLXRtcC1kaXIgaW5zdGFsbC13ZWJkb2MKKwljZCAuZG9jLXRtcC1kaXIgJiYgJChUQVIpIGNmIC4uLyQoaHRtbGRvY3MpLnRhciAuCisJZ3ppcCAtbiAtOSAtZiAkKGh0bWxkb2NzKS50YXIKKwk6CisJJChSTSkgLXIgLmRvYy10bXAtZGlyCisJbWtkaXIgLXAgLmRvYy10bXAtZGlyL21hbjEgLmRvYy10bXAtZGlyL21hbjUgLmRvYy10bXAtZGlyL21hbjcKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gREVTVERJUj0uLyBcCisJCW1hbjFkaXI9Li4vLmRvYy10bXAtZGlyL21hbjEgXAorCQltYW41ZGlyPS4uLy5kb2MtdG1wLWRpci9tYW41IFwKKwkJbWFuN2Rpcj0uLi8uZG9jLXRtcC1kaXIvbWFuNyBcCisJCWluc3RhbGwKKwljZCAuZG9jLXRtcC1kaXIgJiYgJChUQVIpIGNmIC4uLyQobWFucGFnZXMpLnRhciAuCisJZ3ppcCAtbiAtOSAtZiAkKG1hbnBhZ2VzKS50YXIKKwkkKFJNKSAtciAuZG9jLXRtcC1kaXIKKworIyMjIENsZWFuaW5nIHJ1bGVzCisKK2Rpc3RjbGVhbjogY2xlYW4KKwkkKFJNKSBjb25maWd1cmUKKwkkKFJNKSBjb25maWcubG9nIGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlCisJJChSTSkgY29uZmlnLm1hay5hdXRvZ2VuIGNvbmZpZy5tYWsuYXBwZW5kCisJJChSTSkgLXIgYXV0b200dGUuY2FjaGUKKworcHJvZmlsZS1jbGVhbjoKKwkkKFJNKSAkKGFkZHN1ZmZpeCAqLmdjZGEsJChhZGRwcmVmaXggJChQUk9GSUxFX0RJUikvLCAkKG9iamVjdF9kaXJzKSkpCisJJChSTSkgJChhZGRzdWZmaXggKi5nY25vLCQoYWRkcHJlZml4ICQoUFJPRklMRV9ESVIpLywgJChvYmplY3RfZGlycykpKQorCitjb2NjaWNsZWFuOgorCSQoUk0pIGNvbnRyaWIvY29jY2luZWxsZS8qLmNvY2NpLnBhdGNoKgorCitjbGVhbjogcHJvZmlsZS1jbGVhbiBjb3ZlcmFnZS1jbGVhbiBjb2NjaWNsZWFuCisJJChSTSkgKi5yZXMKKwkkKFJNKSAkKE9CSkVDVFMpCisJJChSTSkgJChMSUJfRklMRSkgJChYRElGRl9MSUIpICQoVkNTU1ZOX0xJQikKKwkkKFJNKSAkKEFMTF9QUk9HUkFNUykgJChTQ1JJUFRfTElCKSAkKEJVSUxUX0lOUykgZ2l0JFgKKwkkKFJNKSAkKFRFU1RfUFJPR1JBTVMpCisJJChSTSkgJChGVVpaX1BST0dSQU1TKQorCSQoUk0pICQoSENDKQorCSQoUk0pIC1yIGJpbi13cmFwcGVycyAkKGRlcF9kaXJzKQorCSQoUk0pIC1yIHBvL2J1aWxkLworCSQoUk0pICoucHljICoucHlvICovKi5weWMgKi8qLnB5byAkKEdFTkVSQVRFRF9IKSAkKEVUQUdTX1RBUkdFVCkgdGFncyBjc2NvcGUqCisJJChSTSkgLXIgJChHSVRfVEFSTkFNRSkgLmRvYy10bXAtZGlyCisJJChSTSkgJChHSVRfVEFSTkFNRSkudGFyLmd6IGdpdC1jb3JlXyQoR0lUX1ZFUlNJT04pLSoudGFyLmd6CisJJChSTSkgJChodG1sZG9jcykudGFyLmd6ICQobWFucGFnZXMpLnRhci5negorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbi8gY2xlYW4KKwkkKFJNKSBEb2N1bWVudGF0aW9uL0dJVC1FWENMVURFRC1QUk9HUkFNUworaWZuZGVmIE5PX1BFUkwKKwkkKE1BS0UpIC1DIGdpdHdlYiBjbGVhbgorCSQoUk0pIC1yIHBlcmwvYnVpbGQvCitlbmRpZgorCSQoTUFLRSkgLUMgdGVtcGxhdGVzLyBjbGVhbgorCSQoTUFLRSkgLUMgdC8gY2xlYW4KK2lmbmRlZiBOT19UQ0xUSworCSQoTUFLRSkgLUMgZ2l0ay1naXQgY2xlYW4KKwkkKE1BS0UpIC1DIGdpdC1ndWkgY2xlYW4KK2VuZGlmCisJJChSTSkgR0lULVZFUlNJT04tRklMRSBHSVQtQ0ZMQUdTIEdJVC1MREZMQUdTIEdJVC1CVUlMRC1PUFRJT05TCisJJChSTSkgR0lULVVTRVItQUdFTlQgR0lULVBSRUZJWAorCSQoUk0pIEdJVC1TQ1JJUFQtREVGSU5FUyBHSVQtUEVSTC1ERUZJTkVTIEdJVC1QRVJMLUhFQURFUiBHSVQtUFlUSE9OLVZBUlMKK2lmZGVmIE1TVkMKKwkkKFJNKSAkKHBhdHN1YnN0ICUubywlLm8ucGRiLCQoT0JKRUNUUykpCisJJChSTSkgJChwYXRzdWJzdCAlLmV4ZSwlLnBkYiwkKE9USEVSX1BST0dSQU1TKSkKKwkkKFJNKSAkKHBhdHN1YnN0ICUuZXhlLCUuaW9iaiwkKE9USEVSX1BST0dSQU1TKSkKKwkkKFJNKSAkKHBhdHN1YnN0ICUuZXhlLCUuaXBkYiwkKE9USEVSX1BST0dSQU1TKSkKKwkkKFJNKSAkKHBhdHN1YnN0ICUuZXhlLCUucGRiLCQoUFJPR1JBTVMpKQorCSQoUk0pICQocGF0c3Vic3QgJS5leGUsJS5pb2JqLCQoUFJPR1JBTVMpKQorCSQoUk0pICQocGF0c3Vic3QgJS5leGUsJS5pcGRiLCQoUFJPR1JBTVMpKQorCSQoUk0pICQocGF0c3Vic3QgJS5leGUsJS5wZGIsJChURVNUX1BST0dSQU1TKSkKKwkkKFJNKSAkKHBhdHN1YnN0ICUuZXhlLCUuaW9iaiwkKFRFU1RfUFJPR1JBTVMpKQorCSQoUk0pICQocGF0c3Vic3QgJS5leGUsJS5pcGRiLCQoVEVTVF9QUk9HUkFNUykpCisJJChSTSkgY29tcGF0L3ZjYnVpbGQvTVNWQy1ERUZTLUdFTgorZW5kaWYKKworLlBIT05ZOiBhbGwgaW5zdGFsbCBwcm9maWxlLWNsZWFuIGNvY2NpY2xlYW4gY2xlYW4gc3RyaXAKKy5QSE9OWTogc2hlbGxfY29tcGF0aWJpbGl0eV90ZXN0IHBsZWFzZV9zZXRfU0hFTExfUEFUSF90b19hX21vcmVfbW9kZXJuX3NoZWxsCisuUEhPTlk6IEZPUkNFIGNzY29wZQorCisjIyMgQ2hlY2sgZG9jdW1lbnRhdGlvbgorIworQUxMX0NPTU1BTkRTID0gJChBTExfUFJPR1JBTVMpICQoU0NSSVBUX0xJQikgJChCVUlMVF9JTlMpCitBTExfQ09NTUFORFMgKz0gZ2l0CitBTExfQ09NTUFORFMgKz0gZ2l0LWNpdG9vbAorQUxMX0NPTU1BTkRTICs9IGdpdC1ndWkKK0FMTF9DT01NQU5EUyArPSBnaXRrCitBTExfQ09NTUFORFMgKz0gZ2l0d2ViCisKKy5QSE9OWTogY2hlY2stZG9jcworY2hlY2stZG9jczo6CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGxpbnQtZG9jcworCUAoZm9yIHYgaW4gJChwYXRzdWJzdCAlJFgsJSwkKEFMTF9DT01NQU5EUykpOyBcCisJZG8gXAorCQljYXNlICIkJHYiIGluIFwKKwkJZ2l0LW1lcmdlLW9jdG9wdXMgfCBnaXQtbWVyZ2Utb3VycyB8IGdpdC1tZXJnZS1yZWN1cnNpdmUgfCBcCisJCWdpdC1tZXJnZS1yZXNvbHZlIHwgZ2l0LW1lcmdlLXN1YnRyZWUgfCBcCisJCWdpdC1mc2NrLW9iamVjdHMgfCBnaXQtaW5pdC1kYiB8IFwKKwkJZ2l0LXJlbW90ZS0qIHwgZ2l0LXN0YWdlIHwgZ2l0LWxlZ2FjeS0qIHwgXAorCQlnaXQtPyotLT8qICkgY29udGludWUgOzsgXAorCQllc2FjIDsgXAorCQl0ZXN0IC1mICJEb2N1bWVudGF0aW9uLyQkdi50eHQiIHx8IFwKKwkJZWNobyAibm8gZG9jOiAkJHYiOyBcCisJCXNlZCAtZSAnMSwvXiMjIyBjb21tYW5kIGxpc3QvZCcgLWUgJy9eIy9kJyBjb21tYW5kLWxpc3QudHh0IHwgXAorCQlncmVwIC1xICJeJCR2WyAJXSIgfHwgXAorCQljYXNlICIkJHYiIGluIFwKKwkJZ2l0KSA7OyBcCisJCSopIGVjaG8gIm5vIGxpbms6ICQkdiI7OyBcCisJCWVzYWMgOyBcCisJZG9uZTsgXAorCSggXAorCQlzZWQgLWUgJzEsL14jIyMgY29tbWFuZCBsaXN0L2QnIFwKKwkJICAgIC1lICcvXiMvZCcgXAorCQkgICAgLWUgJy9ndWlkZSQkL2QnIFwKKwkJICAgIC1lICdzL1sgCV0uKi8vJyBcCisJCSAgICAtZSAncy9eL2xpc3RlZCAvJyBjb21tYW5kLWxpc3QudHh0OyBcCisJCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBwcmludC1tYW4xIHwgXAorCQlncmVwICdcLnR4dCQkJyB8IFwKKwkJc2VkIC1lICdzfF58ZG9jdW1lbnRlZCB8JyBcCisJCSAgICAtZSAncy9cLnR4dC8vJzsgXAorCSkgfCB3aGlsZSByZWFkIGhvdyBjbWQ7IFwKKwlkbyBcCisJCWNhc2UgIiAkKHBhdHN1YnN0ICUkWCwlLCQoQUxMX0NPTU1BTkRTKSAkKEVYQ0xVREVEX1BST0dSQU1TKSkgIiBpbiBcCisJCSoiICQkY21kICIqKQk7OyBcCisJCSopIGVjaG8gInJlbW92ZWQgYnV0ICQkaG93OiAkJGNtZCIgOzsgXAorCQllc2FjOyBcCisJZG9uZSApIHwgc29ydAorCisjIyMgTWFrZSBzdXJlIGJ1aWx0LWlucyBkbyBub3QgaGF2ZSBkdXBzIGFuZCBsaXN0ZWQgaW4gZ2l0LmMKKyMKK2NoZWNrLWJ1aWx0aW5zOjoKKwkuL2NoZWNrLWJ1aWx0aW5zLnNoCisKKyMjIyBUZXN0IHN1aXRlIGNvdmVyYWdlIHRlc3RpbmcKKyMKKy5QSE9OWTogY292ZXJhZ2UgY292ZXJhZ2UtY2xlYW4gY292ZXJhZ2UtY29tcGlsZSBjb3ZlcmFnZS10ZXN0IGNvdmVyYWdlLXJlcG9ydAorLlBIT05ZOiBjb3ZlcmFnZS11bnRlc3RlZC1mdW5jdGlvbnMgY292ZXJfZGIgY292ZXJfZGJfaHRtbAorLlBIT05ZOiBjb3ZlcmFnZS1jbGVhbi1yZXN1bHRzCisKK2NvdmVyYWdlOgorCSQoTUFLRSkgY292ZXJhZ2UtdGVzdAorCSQoTUFLRSkgY292ZXJhZ2UtdW50ZXN0ZWQtZnVuY3Rpb25zCisKK29iamVjdF9kaXJzIDo9ICQoc29ydCAkKGRpciAkKE9CSkVDVFMpKSkKK2NvdmVyYWdlLWNsZWFuLXJlc3VsdHM6CisJJChSTSkgJChhZGRzdWZmaXggKi5nY292LCQob2JqZWN0X2RpcnMpKQorCSQoUk0pICQoYWRkc3VmZml4ICouZ2NkYSwkKG9iamVjdF9kaXJzKSkKKwkkKFJNKSBjb3ZlcmFnZS11bnRlc3RlZC1mdW5jdGlvbnMKKwkkKFJNKSAtciBjb3Zlcl9kYi8KKwkkKFJNKSAtciBjb3Zlcl9kYl9odG1sLworCitjb3ZlcmFnZS1jbGVhbjogY292ZXJhZ2UtY2xlYW4tcmVzdWx0cworCSQoUk0pICQoYWRkc3VmZml4ICouZ2NubywkKG9iamVjdF9kaXJzKSkKKworQ09WRVJBR0VfQ0ZMQUdTID0gJChDRkxBR1MpIC1PMCAtZnRlc3QtY292ZXJhZ2UgLWZwcm9maWxlLWFyY3MKK0NPVkVSQUdFX0xERkxBR1MgPSAkKENGTEFHUykgIC1PMCAtbGdjb3YKK0dDT1ZGTEFHUyA9IC0tcHJlc2VydmUtcGF0aHMgLS1icmFuY2gtcHJvYmFiaWxpdGllcyAtLWFsbC1ibG9ja3MKKworY292ZXJhZ2UtY29tcGlsZToKKwkkKE1BS0UpIENGTEFHUz0iJChDT1ZFUkFHRV9DRkxBR1MpIiBMREZMQUdTPSIkKENPVkVSQUdFX0xERkxBR1MpIiBhbGwKKworY292ZXJhZ2UtdGVzdDogY292ZXJhZ2UtY2xlYW4tcmVzdWx0cyBjb3ZlcmFnZS1jb21waWxlCisJJChNQUtFKSBDRkxBR1M9IiQoQ09WRVJBR0VfQ0ZMQUdTKSIgTERGTEFHUz0iJChDT1ZFUkFHRV9MREZMQUdTKSIgXAorCQlERUZBVUxUX1RFU1RfVEFSR0VUPXRlc3QgLWoxIHRlc3QKKworY292ZXJhZ2UtcHJvdmU6IGNvdmVyYWdlLWNsZWFuLXJlc3VsdHMgY292ZXJhZ2UtY29tcGlsZQorCSQoTUFLRSkgQ0ZMQUdTPSIkKENPVkVSQUdFX0NGTEFHUykiIExERkxBR1M9IiQoQ09WRVJBR0VfTERGTEFHUykiIFwKKwkJREVGQVVMVF9URVNUX1RBUkdFVD1wcm92ZSBHSVRfUFJPVkVfT1BUUz0iJChHSVRfUFJPVkVfT1BUUykgLWoxIiBcCisJCS1qMSB0ZXN0CisKK2NvdmVyYWdlLXJlcG9ydDoKKwkkKFFVSUVUX0dDT1YpZm9yIGRpciBpbiAkKG9iamVjdF9kaXJzKTsgZG8gXAorCQkkKEdDT1YpICQoR0NPVkZMQUdTKSAtLW9iamVjdC1kaXJlY3Rvcnk9JCRkaXIgJCRkaXIqLmMgfHwgZXhpdDsgXAorCWRvbmUKKworY292ZXJhZ2UtdW50ZXN0ZWQtZnVuY3Rpb25zOiBjb3ZlcmFnZS1yZXBvcnQKKwlncmVwICdeZnVuY3Rpb24uKmNhbGxlZCAwICcgKi5jLmdjb3YgXAorCQl8IHNlZCAtZSAncy9cKFteOl0qXClcLmdjb3Y6ICpmdW5jdGlvbiBcKFteIF0qXCkgY2FsbGVkLiovXDE6IFwyLycgXAorCQk+IGNvdmVyYWdlLXVudGVzdGVkLWZ1bmN0aW9ucworCitjb3Zlcl9kYjogY292ZXJhZ2UtcmVwb3J0CisJZ2NvdjJwZXJsIC1kYiBjb3Zlcl9kYiAqLmdjb3YKKworY292ZXJfZGJfaHRtbDogY292ZXJfZGIKKwljb3ZlciAtcmVwb3J0IGh0bWwgLW91dHB1dGRpciBjb3Zlcl9kYl9odG1sIGNvdmVyX2RiCisKKworIyMjIEZ1enogdGVzdGluZworIworIyBCdWlsZGluZyBmdXp6IHRhcmdldHMgZ2VuZXJhbGx5IHJlcXVpcmVzIGEgc3BlY2lhbCBzZXQgb2YgY29tcGlsZXIgZmxhZ3MgdGhhdAorIyBhcmUgbm90IG5lY2Vzc2FyaWx5IGFwcHJvcHJpYXRlIGZvciBnZW5lcmFsIGJ1aWxkcywgYW5kIHRoYXQgdmFyeSBncmVhdGx5CisjIGRlcGVuZGluZyBvbiB0aGUgY29tcGlsZXIgdmVyc2lvbiB1c2VkLgorIworIyBBbiBleGFtcGxlIGNvbW1hbmQgdG8gYnVpbGQgYWdhaW5zdCBsaWJGdXp6ZXIgZnJvbSBMTFZNIDQuMC4wOgorIworIyBtYWtlIENDPWNsYW5nIENYWD1jbGFuZysrIFwKKyMgICAgICBDRkxBR1M9Ii1mc2FuaXRpemUtY292ZXJhZ2U9dHJhY2UtcGMtZ3VhcmQgLWZzYW5pdGl6ZT1hZGRyZXNzIiBcCisjICAgICAgTElCX0ZVWlpJTkdfRU5HSU5FPS91c3IvbGliL2xsdm0tNC4wL2xpYi9saWJGdXp6ZXIuYSBcCisjICAgICAgZnV6ei1hbGwKKyMKK0ZVWlpfQ1hYRkxBR1MgPz0gJChDRkxBR1MpCisKKy5QSE9OWTogZnV6ei1hbGwKKworJChGVVpaX1BST0dSQU1TKTogYWxsCisJJChRVUlFVF9MSU5LKSQoQ1hYKSAkKEZVWlpfQ1hYRkxBR1MpICQoTElCX09CSlMpICQoQlVJTFRJTl9PQkpTKSBcCisJCSQoWERJRkZfT0JKUykgJChFWFRMSUJTKSBnaXQubyAkQC5vICQoTElCX0ZVWlpJTkdfRU5HSU5FKSAtbyAkQAorCitmdXp6LWFsbDogJChGVVpaX1BST0dSQU1TKQpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCmluZGV4IDVjZTIxMjIuLmViODExNWUgMTAwNjQ0Ci0tLSBhL1JFQURNRS5tZAorKysgYi9SRUFETUUubWQKQEAgLTEsMTc0ICsxLDY2IEBACi0jIEdpdCBHVUkgLSBBIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0CitbIVtCdWlsZCBzdGF0dXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9naXQvZ2l0L3dvcmtmbG93cy9DSS9QUi9iYWRnZS5zdmcpXShodHRwczovL2dpdGh1Yi5jb20vZ2l0L2dpdC9hY3Rpb25zP3F1ZXJ5PWJyYW5jaCUzQW1hc3RlcitldmVudCUzQXB1c2gpCiAKLUdpdCBHVUkgYWxsb3dzIHlvdSB0byB1c2UgdGhlIFtHaXQgc291cmNlIGNvbnRyb2wgbWFuYWdlbWVudAotdG9vbHNdKGh0dHBzOi8vZ2l0LXNjbS5jb20vKSB2aWEgYSBHVUkuIFRoaXMgaW5jbHVkZXMgc3RhZ2luZywgY29tbWl0dGluZywKLWFkZGluZywgcHVzaGluZywgZXRjLiBJdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgYmxhbWUgdmlld2VyLCBhIHRyZWUgYnJvd3NlciwKLWFuZCBhIGNpdG9vbCAobWFrZSBleGFjdGx5IG9uZSBjb21taXQgYmVmb3JlIGV4aXRpbmcgYW5kIHJldHVybmluZyB0byBzaGVsbCkuCi1Nb3JlIGRldGFpbHMgYWJvdXQgR2l0IEdVSSBjYW4gYmUgZm91bmQgaW4gaXRzIG1hbnVhbCBwYWdlIGJ5IGVpdGhlciBydW5uaW5nCi1gbWFuIGdpdC1ndWlgLCBvciBieSB2aXNpdGluZyB0aGUgW29ubGluZSBtYW51YWwKLXBhZ2VdKGh0dHBzOi8vZ2l0LXNjbS5jb20vZG9jcy9naXQtZ3VpKS4KK0dpdCAtIGZhc3QsIHNjYWxhYmxlLCBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLUdpdCBHVUkgd2FzIGluaXRpYWxseSB3cml0dGVuIGJ5IFNoYXduIE8uIFBlYXJjZSwgYW5kIGlzIGRpc3RyaWJ1dGVkIHdpdGggdGhlCi1zdGFuZGFyZCBHaXQgaW5zdGFsbGF0aW9uLgorR2l0IGlzIGEgZmFzdCwgc2NhbGFibGUsIGRpc3RyaWJ1dGVkIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtIHdpdGggYW4KK3VudXN1YWxseSByaWNoIGNvbW1hbmQgc2V0IHRoYXQgcHJvdmlkZXMgYm90aCBoaWdoLWxldmVsIG9wZXJhdGlvbnMKK2FuZCBmdWxsIGFjY2VzcyB0byBpbnRlcm5hbHMuCiAKLSMgQnVpbGRpbmcgYW5kIGluc3RhbGxpbmcKK0dpdCBpcyBhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSB2ZXJzaW9uIDIgKHNvbWUgcGFydHMgb2YgaXQgYXJlIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlcywKK2NvbXBhdGlibGUgd2l0aCB0aGUgR1BMdjIpLiBJdCB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IExpbnVzCitUb3J2YWxkcyB3aXRoIGhlbHAgb2YgYSBncm91cCBvZiBoYWNrZXJzIGFyb3VuZCB0aGUgbmV0LgogCi1Zb3UgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgZGVwZW5kZW5jaWVzIGluc3RhbGxlZCBiZWZvcmUgeW91IGJlZ2luOgorUGxlYXNlIHJlYWQgdGhlIGZpbGUgW0lOU1RBTExdW10gZm9yIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuCiAKLS0gR2l0Ci0tIFRjbAotLSBUawotLSB3aXNoCi0tIEdpdGsgKG5lZWRlZCBmb3IgYnJvd3NpbmcgaGlzdG9yeSkKLS0gbXNnZm10CitNYW55IEdpdCBvbmxpbmUgcmVzb3VyY2VzIGFyZSBhY2Nlc3NpYmxlIGZyb20gPGh0dHBzOi8vZ2l0LXNjbS5jb20vPgoraW5jbHVkaW5nIGZ1bGwgZG9jdW1lbnRhdGlvbiBhbmQgR2l0IHJlbGF0ZWQgdG9vbHMuCiAKLU1vc3Qgb2YgR2l0IEdVSSBpcyB3cml0dGVuIGluIFRjbCwgc28gdGhlcmUgaXMgbm8gY29tcGlsYXRpb24gaW52b2x2ZWQuIFN0aWxsLAotc29tZSB0aGluZ3MgZG8gbmVlZCB0byBiZSBkb25lIChtb3N0bHkgc29tZSBzdWJzdGl0dXRpb25zKSwgc28geW91IGRvIG5lZWQgdG8KLSJidWlsZCIgaXQuCitTZWUgW0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwudHh0XVtdIHRvIGdldCBzdGFydGVkLCB0aGVuIHNlZQorW0RvY3VtZW50YXRpb24vZ2l0ZXZlcnlkYXkudHh0XVtdIGZvciBhIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcywgYW5kCitgRG9jdW1lbnRhdGlvbi9naXQtPGNvbW1hbmRuYW1lPi50eHRgIGZvciBkb2N1bWVudGF0aW9uIG9mIGVhY2ggY29tbWFuZC4KK0lmIGdpdCBoYXMgYmVlbiBjb3JyZWN0bHkgaW5zdGFsbGVkLCB0aGVuIHRoZSB0dXRvcmlhbCBjYW4gYWxzbyBiZQorcmVhZCB3aXRoIGBtYW4gZ2l0dHV0b3JpYWxgIG9yIGBnaXQgaGVscCB0dXRvcmlhbGAsIGFuZCB0aGUKK2RvY3VtZW50YXRpb24gb2YgZWFjaCBjb21tYW5kIHdpdGggYG1hbiBnaXQtPGNvbW1hbmRuYW1lPmAgb3IgYGdpdCBoZWxwCis8Y29tbWFuZG5hbWU+YC4KIAotWW91IGNhbiBidWlsZCBHaXQgR1VJIHVzaW5nOgorQ1ZTIHVzZXJzIG1heSBhbHNvIHdhbnQgdG8gcmVhZCBbRG9jdW1lbnRhdGlvbi9naXRjdnMtbWlncmF0aW9uLnR4dF1bXQorKGBtYW4gZ2l0Y3ZzLW1pZ3JhdGlvbmAgb3IgYGdpdCBoZWxwIGN2cy1taWdyYXRpb25gIGlmIGdpdCBpcworaW5zdGFsbGVkKS4KIAotYGBgCi1tYWtlCi1gYGAKK1RoZSB1c2VyIGRpc2N1c3Npb24gYW5kIGRldmVsb3BtZW50IG9mIEdpdCB0YWtlIHBsYWNlIG9uIHRoZSBHaXQKK21haWxpbmcgbGlzdCAtLSBldmVyeW9uZSBpcyB3ZWxjb21lIHRvIHBvc3QgYnVnIHJlcG9ydHMsIGZlYXR1cmUKK3JlcXVlc3RzLCBjb21tZW50cyBhbmQgcGF0Y2hlcyB0byBnaXRAdmdlci5rZXJuZWwub3JnIChyZWFkCitbRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlc11bXSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIHBhdGNoIHN1Ym1pc3Npb24pLgorVG8gc3Vic2NyaWJlIHRvIHRoZSBsaXN0LCBzZW5kIGFuIGVtYWlsIHdpdGgganVzdCAic3Vic2NyaWJlIGdpdCIgaW4KK3RoZSBib2R5IHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcuIFRoZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMgYXJlCithdmFpbGFibGUgYXQgPGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8+LAorPGh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0PiBhbmQgb3RoZXIgYXJjaGl2YWwgc2l0ZXMuCiAKLUFuZCB0aGVuIGluc3RhbGwgaXQgdXNpbmc6CitJc3N1ZXMgd2hpY2ggYXJlIHNlY3VyaXR5IHJlbGV2YW50IHNob3VsZCBiZSBkaXNjbG9zZWQgcHJpdmF0ZWx5IHRvCit0aGUgR2l0IFNlY3VyaXR5IG1haWxpbmcgbGlzdCA8Z2l0LXNlY3VyaXR5QGdvb2dsZWdyb3Vwcy5jb20+LgogCi1gYGAKLW1ha2UgaW5zdGFsbAotYGBgCitUaGUgbWFpbnRhaW5lciBmcmVxdWVudGx5IHNlbmRzIHRoZSAiV2hhdCdzIGNvb2tpbmciIHJlcG9ydHMgdGhhdAorbGlzdCB0aGUgY3VycmVudCBzdGF0dXMgb2YgdmFyaW91cyBkZXZlbG9wbWVudCB0b3BpY3MgdG8gdGhlIG1haWxpbmcKK2xpc3QuICBUaGUgZGlzY3Vzc2lvbiBmb2xsb3dpbmcgdGhlbSBnaXZlIGEgZ29vZCByZWZlcmVuY2UgZm9yCitwcm9qZWN0IHN0YXR1cywgZGV2ZWxvcG1lbnQgZGlyZWN0aW9uIGFuZCByZW1haW5pbmcgdGFza3MuCiAKLVlvdSBwcm9iYWJseSBuZWVkIHRvIGhhdmUgcm9vdC9hZG1pbiBwZXJtaXNzaW9ucyB0byBpbnN0YWxsLgorVGhlIG5hbWUgImdpdCIgd2FzIGdpdmVuIGJ5IExpbnVzIFRvcnZhbGRzIHdoZW4gaGUgd3JvdGUgdGhlIHZlcnkKK2ZpcnN0IHZlcnNpb24uIEhlIGRlc2NyaWJlZCB0aGUgdG9vbCBhcyAidGhlIHN0dXBpZCBjb250ZW50IHRyYWNrZXIiCithbmQgdGhlIG5hbWUgYXMgKGRlcGVuZGluZyBvbiB5b3VyIG1vb2QpOgogCi0jIENvbnRyaWJ1dGluZworIC0gcmFuZG9tIHRocmVlLWxldHRlciBjb21iaW5hdGlvbiB0aGF0IGlzIHByb25vdW5jZWFibGUsIGFuZCBub3QKKyAgIGFjdHVhbGx5IHVzZWQgYnkgYW55IGNvbW1vbiBVTklYIGNvbW1hbmQuICBUaGUgZmFjdCB0aGF0IGl0IGlzIGEKKyAgIG1pc3Byb251bmNpYXRpb24gb2YgImdldCIgbWF5IG9yIG1heSBub3QgYmUgcmVsZXZhbnQuCisgLSBzdHVwaWQuIGNvbnRlbXB0aWJsZSBhbmQgZGVzcGljYWJsZS4gc2ltcGxlLiBUYWtlIHlvdXIgcGljayBmcm9tIHRoZQorICAgZGljdGlvbmFyeSBvZiBzbGFuZy4KKyAtICJnbG9iYWwgaW5mb3JtYXRpb24gdHJhY2tlciI6IHlvdSdyZSBpbiBhIGdvb2QgbW9vZCwgYW5kIGl0IGFjdHVhbGx5CisgICB3b3JrcyBmb3IgeW91LiBBbmdlbHMgc2luZywgYW5kIGEgbGlnaHQgc3VkZGVubHkgZmlsbHMgdGhlIHJvb20uCisgLSAiZ29kZGFtbiBpZGlvdGljIHRydWNrbG9hZCBvZiBzaCp0Ijogd2hlbiBpdCBicmVha3MKIAotVGhlIHByb2plY3QgaXMgY3VycmVudGx5IG1haW50YWluZWQgYnkgUHJhdHl1c2ggWWFkYXYgb3ZlciBhdAotaHR0cHM6Ly9naXRodWIuY29tL3ByYXRpMDEwMC9naXQtZ3VpLiBFdmVuIHRob3VnaCB0aGUgcHJvamVjdCBpcyBob3N0ZWQgYXQKLUdpdEh1YiwgdGhlIGRldmVsb3BtZW50IGRvZXMgbm90IGhhcHBlbiBvdmVyIEdpdEh1YiBJc3N1ZXMgYW5kIFB1bGwgUmVxdWVzdHMuCi1JbnN0ZWFkLCBhbiBlbWFpbCBiYXNlZCB3b3JrZmxvdyBpcyB1c2VkLiBUaGUgR2l0IG1haWxpbmcgbGlzdAotW2dpdEB2Z2VyLmtlcm5lbC5vcmddKG1haWx0bzpnaXRAdmdlci5rZXJuZWwub3JnKSBpcyB3aGVyZSB0aGUgcGF0Y2hlcyBhcmUKLWRpc2N1c3NlZCBhbmQgcmV2aWV3ZWQuCi0KLU1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEdpdCBtYWlsaW5nIGxpc3QgYW5kIGluc3RydWN0aW9ucyB0byBzdWJzY3JpYmUgY2FuCi1iZSBmb3VuZCBbaGVyZV0oaHR0cHM6Ly9naXQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9HaXRDb21tdW5pdHkpLgotCi0jIyBTZW5kaW5nIHlvdXIgY2hhbmdlcwotCi1TaW5jZSB0aGUgZGV2ZWxvcG1lbnQgaGFwcGVucyBvdmVyIGVtYWlsLCB5b3UgbmVlZCB0byBzZW5kIGluIHlvdXIgY29tbWl0cyBpbgotdGV4dCBmb3JtYXQuIENvbW1pdHMgY2FuIGJlIGNvbnZlcnRlZCB0byBlbWFpbHMgdmlhIHRoZSB0d28gdG9vbHMgcHJvdmlkZWQgYnkKLUdpdDogYGdpdC1zZW5kLWVtYWlsYCBhbmQgYGdpdC1mb3JtYXQtcGF0Y2hgLgotCi1Zb3UgY2FuIHVzZSBgZ2l0LWZvcm1hdC1wYXRjaGAgdG8gZ2VuZXJhdGUgcGF0Y2hlcyBpbiBtYm94IGZvcm1hdCBmcm9tIHlvdXIKLWNvbW1pdHMgdGhhdCBjYW4gdGhlbiBiZSBzZW50IHZpYSBlbWFpbC4gTGV0J3Mgc2F5IHlvdSBhcmUgd29ya2luZyBvbiBhIGJyYW5jaAotY2FsbGVkICdmb28nIHRoYXQgd2FzIGNyZWF0ZWQgb24gdG9wIG9mICdtYXN0ZXInLiBZb3UgY2FuIHJ1bjoKLQotYGBgCi1naXQgZm9ybWF0LXBhdGNoIC1vIG91dHB1dF9kaXIgbWFzdGVyLi5mb28KLWBgYAotCi10byBjb252ZXJ0IGFsbCB0aGUgZXh0cmEgY29tbWl0cyBpbiAnZm9vJyBpbnRvIGEgc2V0IG9mIHBhdGNoZXMgc2F2ZWQgaW4gdGhlCi1mb2xkZXIgYG91dHB1dF9kaXJgLgotCi1JZiB5b3UgYXJlIHNlbmRpbmcgbXVsdGlwbGUgcGF0Y2hlcywgaXQgaXMgcmVjb21tZW5kZWQgdG8gaW5jbHVkZSBhIGNvdmVyCi1sZXR0ZXIuIEEgY292ZXIgbGV0dGVyIGlzIGFuIGVtYWlsIGV4cGxhaW5pbmcgaW4gYnJpZWYgd2hhdCB0aGUgc2VyaWVzIGlzCi1zdXBwb3NlZCB0byBkby4gQSBjb3ZlciBsZXR0ZXIgdGVtcGxhdGUgY2FuIGJlIGdlbmVyYXRlZCBieSBwYXNzaW5nCi1gLS1jb3Zlci1sZXR0ZXJgIHRvIGBnaXQtZm9ybWF0LXBhdGNoYC4KLQotQWZ0ZXIgeW91IHNlbmQgeW91ciBwYXRjaGVzLCB5b3UgbWlnaHQgZ2V0IGEgcmV2aWV3IHN1Z2dlc3Rpbmcgc29tZSBjaGFuZ2VzLgotTWFrZSB0aG9zZSBjaGFuZ2VzLCBhbmQgcmUtc2VuZCB5b3VyIHBhdGNoKGVzKSBpbiByZXBseSB0byB0aGUgZmlyc3QgcGF0Y2ggb2YKLXlvdXIgaW5pdGlhbCB2ZXJzaW9uLiBBbHNvIHBsZWFzZSBtZW50aW9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBwYXRjaC4gVGhpcyBjYW4gYmUKLWRvbmUgYnkgcGFzc2luZyBgLXYgWGAgdG8gYGdpdC1mb3JtYXQtcGF0Y2hgLCB3aGVyZSAnWCcgaXMgdGhlIHZlcnNpb24gbnVtYmVyCi1vZiB0aGUgcGF0Y2goZXMpLgotCi0jIyMgVXNpbmcgZ2l0LXNlbmQtZW1haWwKLQotWW91IGNhbiB1c2UgYGdpdC1zZW5kLWVtYWlsYCB0byBzZW5kIHBhdGNoZXMgZ2VuZXJhdGVkIHZpYSBgZ2l0LWZvcm1hdC1wYXRjaGAuCi1XaGlsZSB5b3UgY2FuIGRpcmVjdGx5IHNlbmQgcGF0Y2hlcyB2aWEgYGdpdC1zZW5kLWVtYWlsYCwgaXQgaXMgcmVjb21tZW5kZWQKLXRoYXQgeW91IGZpcnN0IHVzZSBgZ2l0LWZvcm1hdC1wYXRjaGAgdG8gZ2VuZXJhdGUgdGhlIGVtYWlscywgYXVkaXQgdGhlbSwgYW5kCi10aGVuIHNlbmQgdGhlbSB2aWEgYGdpdC1zZW5kLWVtYWlsYC4KLQotQSBwcmV0dHkgZ29vZCBndWlkZSB0byBjb25maWd1cmluZyBhbmQgdXNpbmcgYGdpdC1zZW5kLWVtYWlsYCBjYW4gYmUgZm91bmQKLVtoZXJlXShodHRwczovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9QdWxzZUF1ZGlvL0hvd1RvVXNlR2l0U2VuZEVtYWlsLykKLQotIyMjIFVzaW5nIHlvdXIgZW1haWwgY2xpZW50Ci0KLUlmIHlvdXIgZW1haWwgY2xpZW50IHN1cHBvcnRzIHNlbmRpbmcgbWJveCBmb3JtYXQgZW1haWxzLCB5b3UgY2FuIHVzZQotYGdpdC1mb3JtYXQtcGF0Y2hgIHRvIGdldCBhbiBtYm94IGZpbGUgZm9yIGVhY2ggY29tbWl0LCBhbmQgdGhlbiBzZW5kIHRoZW0uIElmCi10aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhdGNoIGluIHRoZSBzZXJpZXMsIHRoZW4gYWxsIHBhdGNoZXMgYWZ0ZXIgdGhlIGZpcnN0Ci1wYXRjaCAob3IgdGhlIGNvdmVyIGxldHRlcikgbmVlZCB0byBiZSBzZW50IGFzIHJlcGxpZXMgdG8gdGhlIGZpcnN0LgotYGdpdC1zZW5kLWVtYWlsYCBkb2VzIHRoaXMgYnkgZGVmYXVsdC4KLQotIyMjIFVzaW5nIEdpdEdpdEdhZGdldAotCi1TaW5jZSBzb21lIHBlb3BsZSBwcmVmZXIgYSBHaXRIdWIgcHVsbCByZXF1ZXN0IGJhc2VkIHdvcmtmbG93LCB0aGV5IGNhbiB1c2UKLVtHaXRHaXRHYWRnZXRdKGh0dHBzOi8vZ2l0Z2l0Z2FkZ2V0LmdpdGh1Yi5pby8pIHRvIHNlbmQgaW4gcGF0Y2hlcy4gVGhlIHRvb2wKLXdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHNlbmRpbmcgcGF0Y2hlcyB0byB0aGUgR2l0IHByb2plY3QsIGJ1dCBpdCBub3cgYWxzbwotc3VwcG9ydHMgc2VuZGluZyBwYXRjaGVzIGZvciBnaXQtZ3VpLgotCi1JbnN0cnVjdGlvbnMgZm9yIHVzaW5nIEdpdEdpdEdhZGdldCB0byBzZW5kIGdpdC1ndWkgcGF0Y2hlcywgY291cnRlc3kgb2YKLUpvaGFubmVzIFNjaGluZGVsaW46Ci0KLUlmIHlvdSBkb24ndCBhbHJlYWR5IGhhdmUgYSBmb3JrIG9mIHRoZSBbZ2l0L2dpdF0oaHR0cHM6Ly9naXRodWIuY29tL2dpdC9naXQpCi1yZXBvLCB5b3UgbmVlZCB0byBtYWtlIG9uZS4gVGhlbiBjbG9uZSB5b3VyIGZvcms6Ci0KLWBgYAotZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS88eW91ci11c2VybmFtZT4vZ2l0Ci1gYGAKLQotVGhlbiBhZGQgR2l0R2l0R2FkZ2V0IGFzIGEgcmVtb3RlOgotCi1gYGAKLWdpdCByZW1vdGUgYWRkIGdpdGdpdGdhZGdldCBodHRwczovL2dpdGh1Yi5jb20vZ2l0Z2l0Z2FkZ2V0L2dpdAotYGBgCi0KLVRoZW4gZmV0Y2ggdGhlIGdpdC1ndWkgYnJhbmNoOgotCi1gYGAKLWdpdCBmZXRjaCBnaXRnaXRnYWRnZXQgZ2l0LWd1aS9tYXN0ZXIKLWBgYAotCi1UaGVuIGNyZWF0ZSBhIG5ldyBicmFuY2ggYmFzZWQgb24gZ2l0LWd1aS9tYXN0ZXI6Ci0KLWBgYAotZ2l0IGNoZWNrb3V0IC1iIDx5b3VyLWJyYW5jaC1uYW1lPiBnaXQtZ3VpL21hc3RlcgotYGBgCi0KLU1ha2Ugd2hhdGV2ZXIgY29tbWl0cyB5b3UgbmVlZCB0bywgcHVzaCB0aGVtIHRvIHlvdXIgZm9yaywgYW5kIHRoZW4gaGVhZCBvdmVyCi10byBodHRwczovL2dpdGh1Yi5jb20vZ2l0Z2l0Z2FkZ2V0L2dpdC9wdWxscyBhbmQgb3BlbiBhIFB1bGwgUmVxdWVzdCB0YXJnZXRpbmcKLWdpdC1ndWkvbWFzdGVyLgotCi1HaXRHaXRHYWRnZXQgd2lsbCB3ZWxjb21lIHlvdSB3aXRoIGEgKGhvcGVmdWxseSkgaGVscGZ1bCBtZXNzYWdlLgotCi0jIyBTaWduaW5nIG9mZgotCi1Zb3UgbmVlZCB0byBzaWduIG9mZiB5b3VyIGNvbW1pdHMgYmVmb3JlIHNlbmRpbmcgdGhlbSB0byB0aGUgbGlzdC4gWW91IGNhbiBkbwotdGhhdCBieSBwYXNzaW5nIHRoZSBgLXNgIG9wdGlvbiB0byBgZ2l0LWNvbW1pdGAuIFlvdSBjYW4gYWxzbyB1c2UgdGhlICJTaWduCi1PZmYiIG9wdGlvbiBpbiBHaXQgR1VJLgotCi1BIHNpZ24tb2ZmIGlzIGEgc2ltcGxlICdTaWduZWQtb2ZmLWJ5OiBBIFUgVGhvciBcPGF1dGhvckBleGFtcGxlLmNvbVw+JyBsaW5lIGF0Ci10aGUgZW5kIG9mIHRoZSBjb21taXQgbWVzc2FnZSwgYWZ0ZXIgeW91ciBleHBsYW5hdGlvbiBvZiB0aGUgY29tbWl0LgotCi1BIHNpZ24tb2ZmIG1lYW5zIHRoYXQgeW91IGFyZSBsZWdhbGx5IGFsbG93ZWQgdG8gc2VuZCB0aGUgY29kZSwgYW5kIGl0IHNlcnZlcwotYXMgYSBjZXJ0aWZpY2F0ZSBvZiBvcmlnaW4uIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGF0Ci1bZGV2ZWxvcGVyY2VydGlmaWNhdGUub3JnXShodHRwczovL2RldmVsb3BlcmNlcnRpZmljYXRlLm9yZy8pLgotCi0jIyBSZXNwb25kaW5nIHRvIHJldmlldyBjb21tZW50cwotCi1JdCBpcyBxdWl0ZSBsaWtlbHkgeW91ciBwYXRjaGVzIHdpbGwgZ2V0IHJldmlldyBjb21tZW50cy4gVGhvc2UgY29tbWVudHMgYXJlCi1zZW50IG9uIHRoZSBHaXQgbWFpbGluZyBsaXN0IGFzIHJlcGxpZXMgdG8geW91ciBwYXRjaCwgYW5kIHlvdSB3aWxsIHVzdWFsbHkgYmUKLUNjJ2VkIGluIHRob3NlIHJlcGxpZXMuCi0KLVlvdSBhcmUgZXhwZWN0ZWQgdG8gcmVzcG9uZCBieSBlaXRoZXIgZXhwbGFpbmluZyB5b3VyIGNvZGUgZnVydGhlciB0byBjb252aW5jZQotdGhlIHJldmlld2VyIHdoYXQgeW91IGFyZSBkb2luZyBpcyBjb3JyZWN0LCBvciBhY2tub3dsZWRnZSB0aGUgY29tbWVudHMgYW5kCi1yZS1zZW5kIHRoZSBwYXRjaGVzIHdpdGggdGhvc2UgY29tbWVudHMgYWRkcmVzc2VkLgotCi1Tb21lIHRpcHMgZm9yIHRob3NlIG5vdCBmYW1pbGlhciB3aXRoIGNvbW11bmljYXRpb24gb24gYSBtYWlsaW5nIGxpc3Q6Ci0KLS0gVXNlIG9ubHkgcGxhaW4gdGV4dCBlbWFpbHMuIE5vIEhUTUwgYXQgYWxsLgotLSBXcmFwIGxpbmVzIGF0IGFyb3VuZCA3NSBjaGFyYWN0ZXJzLgotLSBEbyBub3Qgc2VuZCBhdHRhY2htZW50cy4gSWYgeW91IGRvIG5lZWQgdG8gc2VuZCBzb21lIGZpbGVzLCBjb25zaWRlciB1c2luZyBhCi0gIGhvc3Rpbmcgc2VydmljZSwgYW5kIHBhc3RlIHRoZSBsaW5rIGluIHlvdXIgZW1haWwuCi0tIERvIG5vdCBbdG9wIHBvc3RdKGh0dHA6Ly93d3cuaWRhbGxlbi5jb20vdG9wcG9zdGluZy5odG1sKS4KLS0gQWx3YXlzICJyZXBseSBhbGwiLiBLZWVwIGFsbCBjb3JyZXNwb25kZW50cyBhbmQgdGhlIGxpc3QgaW4gQ2MuIElmIHlvdSByZXBseQotICBkaXJlY3RseSB0byBhIHJldmlld2VyLCBhbmQgbm90IENjIHRoZSBsaXN0LCBvdGhlciBwZW9wbGUgd291bGQgbm90IGJlIGFibGUKLSAgdG8gY2hpbWUgaW4uCitbSU5TVEFMTF06IElOU1RBTEwKK1tEb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLnR4dF06IERvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwudHh0CitbRG9jdW1lbnRhdGlvbi9naXRldmVyeWRheS50eHRdOiBEb2N1bWVudGF0aW9uL2dpdGV2ZXJ5ZGF5LnR4dAorW0RvY3VtZW50YXRpb24vZ2l0Y3ZzLW1pZ3JhdGlvbi50eHRdOiBEb2N1bWVudGF0aW9uL2dpdGN2cy1taWdyYXRpb24udHh0CitbRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlc106IERvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKZGlmZiAtLWdpdCBhL1JlbE5vdGVzIGIvUmVsTm90ZXMKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uZjNkODUyNwotLS0gL2Rldi9udWxsCisrKyBiL1JlbE5vdGVzCkBAIC0wLDAgKzEgQEAKK0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNy4wLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Fic3BhdGguYyBiL2Fic3BhdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjE1YTQxCi0tLSAvZGV2L251bGwKKysrIGIvYWJzcGF0aC5jCkBAIC0wLDAgKzEsMjU0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKworLyoKKyAqIERvIG5vdCB1c2UgdGhpcyBmb3IgaW5zcGVjdGluZyAqdHJhY2tlZCogY29udGVudC4gIFdoZW4gcGF0aCBpcyBhCisgKiBzeW1saW5rIHRvIGEgZGlyZWN0b3J5LCB3ZSBkbyBub3Qgd2FudCB0byBzYXkgaXQgaXMgYSBkaXJlY3Rvcnkgd2hlbgorICogZGVhbGluZyB3aXRoIHRyYWNrZWQgY29udGVudCBpbiB0aGUgd29ya2luZyB0cmVlLgorICovCitpbnQgaXNfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJcmV0dXJuICghc3RhdChwYXRoLCAmc3QpICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpOworfQorCisvKiByZW1vdmVzIHRoZSBsYXN0IHBhdGggY29tcG9uZW50IGZyb20gJ3BhdGgnIGV4Y2VwdCBpZiAncGF0aCcgaXMgcm9vdCAqLworc3RhdGljIHZvaWQgc3RyaXBfbGFzdF9jb21wb25lbnQoc3RydWN0IHN0cmJ1ZiAqcGF0aCkKK3sKKwlzaXplX3Qgb2Zmc2V0ID0gb2Zmc2V0XzFzdF9jb21wb25lbnQocGF0aC0+YnVmKTsKKwlzaXplX3QgbGVuID0gcGF0aC0+bGVuOworCisJLyogRmluZCBzdGFydCBvZiB0aGUgbGFzdCBjb21wb25lbnQgKi8KKwl3aGlsZSAob2Zmc2V0IDwgbGVuICYmICFpc19kaXJfc2VwKHBhdGgtPmJ1ZltsZW4gLSAxXSkpCisJCWxlbi0tOworCS8qIFNraXAgc2VxdWVuY2VzIG9mIG11bHRpcGxlIHBhdGgtc2VwYXJhdG9ycyAqLworCXdoaWxlIChvZmZzZXQgPCBsZW4gJiYgaXNfZGlyX3NlcChwYXRoLT5idWZbbGVuIC0gMV0pKQorCQlsZW4tLTsKKworCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgbGVuKTsKK30KKworLyogZ2V0IChhbmQgcmVtb3ZlKSB0aGUgbmV4dCBjb21wb25lbnQgaW4gJ3JlbWFpbmluZycgYW5kIHBsYWNlIGl0IGluICduZXh0JyAqLworc3RhdGljIHZvaWQgZ2V0X25leHRfY29tcG9uZW50KHN0cnVjdCBzdHJidWYgKm5leHQsIHN0cnVjdCBzdHJidWYgKnJlbWFpbmluZykKK3sKKwljaGFyICpzdGFydCA9IE5VTEw7CisJY2hhciAqZW5kID0gTlVMTDsKKworCXN0cmJ1Zl9yZXNldChuZXh0KTsKKworCS8qIGxvb2sgZm9yIHRoZSBuZXh0IGNvbXBvbmVudCAqLworCS8qIFNraXAgc2VxdWVuY2VzIG9mIG11bHRpcGxlIHBhdGgtc2VwYXJhdG9ycyAqLworCWZvciAoc3RhcnQgPSByZW1haW5pbmctPmJ1ZjsgaXNfZGlyX3NlcCgqc3RhcnQpOyBzdGFydCsrKQorCQk7IC8qIG5vdGhpbmcgKi8KKwkvKiBGaW5kIGVuZCBvZiB0aGUgcGF0aCBjb21wb25lbnQgKi8KKwlmb3IgKGVuZCA9IHN0YXJ0OyAqZW5kICYmICFpc19kaXJfc2VwKCplbmQpOyBlbmQrKykKKwkJOyAvKiBub3RoaW5nICovCisKKwlzdHJidWZfYWRkKG5leHQsIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisJLyogcmVtb3ZlIHRoZSBjb21wb25lbnQgZnJvbSAncmVtYWluaW5nJyAqLworCXN0cmJ1Zl9yZW1vdmUocmVtYWluaW5nLCAwLCBlbmQgLSByZW1haW5pbmctPmJ1Zik7Cit9CisKKy8qIGNvcGllcyByb290IHBhcnQgZnJvbSByZW1haW5pbmcgdG8gcmVzb2x2ZWQsIGNhbm9uaWNhbGl6aW5nIGl0IG9uIHRoZSB3YXkgKi8KK3N0YXRpYyB2b2lkIGdldF9yb290X3BhcnQoc3RydWN0IHN0cmJ1ZiAqcmVzb2x2ZWQsIHN0cnVjdCBzdHJidWYgKnJlbWFpbmluZykKK3sKKwlpbnQgb2Zmc2V0ID0gb2Zmc2V0XzFzdF9jb21wb25lbnQocmVtYWluaW5nLT5idWYpOworCisJc3RyYnVmX3Jlc2V0KHJlc29sdmVkKTsKKwlzdHJidWZfYWRkKHJlc29sdmVkLCByZW1haW5pbmctPmJ1Ziwgb2Zmc2V0KTsKKyNpZmRlZiBHSVRfV0lORE9XU19OQVRJVkUKKwljb252ZXJ0X3NsYXNoZXMocmVzb2x2ZWQtPmJ1Zik7CisjZW5kaWYKKwlzdHJidWZfcmVtb3ZlKHJlbWFpbmluZywgMCwgb2Zmc2V0KTsKK30KKworLyogV2UgYWxsb3cgInJlY3Vyc2l2ZSIgc3ltYm9saWMgbGlua3MuIE9ubHkgd2l0aGluIHJlYXNvbiwgdGhvdWdoLiAqLworI2lmbmRlZiBNQVhTWU1MSU5LUworI2RlZmluZSBNQVhTWU1MSU5LUyAzMgorI2VuZGlmCisKKy8qCisgKiBSZXR1cm4gdGhlIHJlYWwgcGF0aCAoaS5lLiwgYWJzb2x1dGUgcGF0aCwgd2l0aCBzeW1saW5rcyByZXNvbHZlZAorICogYW5kIGV4dHJhIHNsYXNoZXMgcmVtb3ZlZCkgZXF1aXZhbGVudCB0byB0aGUgc3BlY2lmaWVkIHBhdGguICAoSWYKKyAqIHlvdSB3YW50IGFuIGFic29sdXRlIHBhdGggYnV0IGRvbid0IG1pbmQgbGlua3MsIHVzZQorICogYWJzb2x1dGVfcGF0aCgpLikgIFBsYWNlcyB0aGUgcmVzb2x2ZWQgcmVhbHBhdGggaW4gdGhlIHByb3ZpZGVkIHN0cmJ1Zi4KKyAqCisgKiBUaGUgZGlyZWN0b3J5IHBhcnQgb2YgcGF0aCAoaS5lLiwgZXZlcnl0aGluZyB1cCB0byB0aGUgbGFzdAorICogZGlyX3NlcCkgbXVzdCBkZW5vdGUgYSB2YWxpZCwgZXhpc3RpbmcgZGlyZWN0b3J5LCBidXQgdGhlIGxhc3QKKyAqIGNvbXBvbmVudCBuZWVkIG5vdCBleGlzdC4gIElmIGRpZV9vbl9lcnJvciBpcyBzZXQsIHRoZW4gZGllIHdpdGggYW4KKyAqIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2UgaWYgdGhlcmUgaXMgYSBwcm9ibGVtLiAgT3RoZXJ3aXNlLCByZXR1cm4KKyAqIE5VTEwgb24gZXJyb3JzICh3aXRob3V0IGdlbmVyYXRpbmcgYW55IG91dHB1dCkuCisgKi8KK2NoYXIgKnN0cmJ1Zl9yZWFscGF0aChzdHJ1Y3Qgc3RyYnVmICpyZXNvbHZlZCwgY29uc3QgY2hhciAqcGF0aCwKKwkJICAgICAgaW50IGRpZV9vbl9lcnJvcikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlbWFpbmluZyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgbmV4dCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgc3ltbGluayA9IFNUUkJVRl9JTklUOworCWNoYXIgKnJldHZhbCA9IE5VTEw7CisJaW50IG51bV9zeW1saW5rcyA9IDA7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoISpwYXRoKSB7CisJCWlmIChkaWVfb25fZXJyb3IpCisJCQlkaWUoIlRoZSBlbXB0eSBzdHJpbmcgaXMgbm90IGEgdmFsaWQgcGF0aCIpOworCQllbHNlCisJCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwlzdHJidWZfYWRkc3RyKCZyZW1haW5pbmcsIHBhdGgpOworCWdldF9yb290X3BhcnQocmVzb2x2ZWQsICZyZW1haW5pbmcpOworCisJaWYgKCFyZXNvbHZlZC0+bGVuKSB7CisJCS8qIHJlbGF0aXZlIHBhdGg7IGNhbiB1c2UgQ1dEIGFzIHRoZSBpbml0aWFsIHJlc29sdmVkIHBhdGggKi8KKwkJaWYgKHN0cmJ1Zl9nZXRjd2QocmVzb2x2ZWQpKSB7CisJCQlpZiAoZGllX29uX2Vycm9yKQorCQkJCWRpZV9lcnJubygidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CisJCQllbHNlCisJCQkJZ290byBlcnJvcl9vdXQ7CisJCX0KKwl9CisKKwkvKiBJdGVyYXRlIG92ZXIgdGhlIHJlbWFpbmluZyBwYXRoIGNvbXBvbmVudHMgKi8KKwl3aGlsZSAocmVtYWluaW5nLmxlbiA+IDApIHsKKwkJZ2V0X25leHRfY29tcG9uZW50KCZuZXh0LCAmcmVtYWluaW5nKTsKKworCQlpZiAobmV4dC5sZW4gPT0gMCkgeworCQkJY29udGludWU7IC8qIGVtcHR5IGNvbXBvbmVudCAqLworCQl9IGVsc2UgaWYgKG5leHQubGVuID09IDEgJiYgIXN0cmNtcChuZXh0LmJ1ZiwgIi4iKSkgeworCQkJY29udGludWU7IC8qICcuJyBjb21wb25lbnQgKi8KKwkJfSBlbHNlIGlmIChuZXh0LmxlbiA9PSAyICYmICFzdHJjbXAobmV4dC5idWYsICIuLiIpKSB7CisJCQkvKiAnLi4nIGNvbXBvbmVudDsgc3RyaXAgdGhlIGxhc3QgcGF0aCBjb21wb25lbnQgKi8KKwkJCXN0cmlwX2xhc3RfY29tcG9uZW50KHJlc29sdmVkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogYXBwZW5kIHRoZSBuZXh0IGNvbXBvbmVudCBhbmQgcmVzb2x2ZSByZXN1bHRhbnQgcGF0aCAqLworCQlpZiAoIWlzX2Rpcl9zZXAocmVzb2x2ZWQtPmJ1ZltyZXNvbHZlZC0+bGVuIC0gMV0pKQorCQkJc3RyYnVmX2FkZGNoKHJlc29sdmVkLCAnLycpOworCQlzdHJidWZfYWRkYnVmKHJlc29sdmVkLCAmbmV4dCk7CisKKwkJaWYgKGxzdGF0KHJlc29sdmVkLT5idWYsICZzdCkpIHsKKwkJCS8qIGVycm9yIG91dCB1bmxlc3MgdGhpcyB3YXMgdGhlIGxhc3QgY29tcG9uZW50ICovCisJCQlpZiAoZXJybm8gIT0gRU5PRU5UIHx8IHJlbWFpbmluZy5sZW4pIHsKKwkJCQlpZiAoZGllX29uX2Vycm9yKQorCQkJCQlkaWVfZXJybm8oIkludmFsaWQgcGF0aCAnJXMnIiwKKwkJCQkJCSAgcmVzb2x2ZWQtPmJ1Zik7CisJCQkJZWxzZQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCX0KKwkJfSBlbHNlIGlmIChTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisJCQlzc2l6ZV90IGxlbjsKKwkJCXN0cmJ1Zl9yZXNldCgmc3ltbGluayk7CisKKwkJCWlmIChudW1fc3ltbGlua3MrKyA+IE1BWFNZTUxJTktTKSB7CisJCQkJZXJybm8gPSBFTE9PUDsKKworCQkJCWlmIChkaWVfb25fZXJyb3IpCisJCQkJCWRpZSgiTW9yZSB0aGFuICVkIG5lc3RlZCBzeW1saW5rcyAiCisJCQkJCSAgICAib24gcGF0aCAnJXMnIiwgTUFYU1lNTElOS1MsIHBhdGgpOworCQkJCWVsc2UKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQl9CisKKwkJCWxlbiA9IHN0cmJ1Zl9yZWFkbGluaygmc3ltbGluaywgcmVzb2x2ZWQtPmJ1ZiwKKwkJCQkJICAgICAgc3Quc3Rfc2l6ZSk7CisJCQlpZiAobGVuIDwgMCkgeworCQkJCWlmIChkaWVfb25fZXJyb3IpCisJCQkJCWRpZV9lcnJubygiSW52YWxpZCBzeW1saW5rICclcyciLAorCQkJCQkJICByZXNvbHZlZC0+YnVmKTsKKwkJCQllbHNlCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJfQorCisJCQlpZiAoaXNfYWJzb2x1dGVfcGF0aChzeW1saW5rLmJ1ZikpIHsKKwkJCQkvKiBhYnNvbHV0ZSBzeW1saW5rOyBzZXQgcmVzb2x2ZWQgdG8gcm9vdCAqLworCQkJCWdldF9yb290X3BhcnQocmVzb2x2ZWQsICZzeW1saW5rKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiByZWxhdGl2ZSBzeW1saW5rCisJCQkJICogc3RyaXAgb2ZmIHRoZSBsYXN0IGNvbXBvbmVudCBzaW5jZSBpdCB3aWxsCisJCQkJICogYmUgcmVwbGFjZWQgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIHN5bWxpbmsKKwkJCQkgKi8KKwkJCQlzdHJpcF9sYXN0X2NvbXBvbmVudChyZXNvbHZlZCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBpZiB0aGVyZSBhcmUgc3RpbGwgcmVtYWluaW5nIGNvbXBvbmVudHMgdG8gcmVzb2x2ZQorCQkJICogdGhlbiBhcHBlbmQgdGhlbSB0byBzeW1saW5rCisJCQkgKi8KKwkJCWlmIChyZW1haW5pbmcubGVuKSB7CisJCQkJc3RyYnVmX2FkZGNoKCZzeW1saW5rLCAnLycpOworCQkJCXN0cmJ1Zl9hZGRidWYoJnN5bWxpbmssICZyZW1haW5pbmcpOworCQkJfQorCisJCQkvKgorCQkJICogdXNlIHRoZSBzeW1saW5rIGFzIHRoZSByZW1haW5pbmcgY29tcG9uZW50cyB0aGF0CisJCQkgKiBuZWVkIHRvIGJlIHJlc29sdmVkCisJCQkgKi8KKwkJCXN0cmJ1Zl9zd2FwKCZzeW1saW5rLCAmcmVtYWluaW5nKTsKKwkJfQorCX0KKworCXJldHZhbCA9IHJlc29sdmVkLT5idWY7CisKK2Vycm9yX291dDoKKwlzdHJidWZfcmVsZWFzZSgmcmVtYWluaW5nKTsKKwlzdHJidWZfcmVsZWFzZSgmbmV4dCk7CisJc3RyYnVmX3JlbGVhc2UoJnN5bWxpbmspOworCisJaWYgKCFyZXR2YWwpCisJCXN0cmJ1Zl9yZXNldChyZXNvbHZlZCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitjaGFyICpyZWFsX3BhdGhkdXAoY29uc3QgY2hhciAqcGF0aCwgaW50IGRpZV9vbl9lcnJvcikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlYWxwYXRoID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcmV0dmFsID0gTlVMTDsKKworCWlmIChzdHJidWZfcmVhbHBhdGgoJnJlYWxwYXRoLCBwYXRoLCBkaWVfb25fZXJyb3IpKQorCQlyZXR2YWwgPSBzdHJidWZfZGV0YWNoKCZyZWFscGF0aCwgTlVMTCk7CisKKwlzdHJidWZfcmVsZWFzZSgmcmVhbHBhdGgpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFVzZSB0aGlzIHRvIGdldCBhbiBhYnNvbHV0ZSBwYXRoIGZyb20gYSByZWxhdGl2ZSBvbmUuIElmIHlvdSB3YW50CisgKiB0byByZXNvbHZlIGxpbmtzLCB5b3Ugc2hvdWxkIHVzZSBzdHJidWZfcmVhbHBhdGguCisgKi8KK2NvbnN0IGNoYXIgKmFic29sdXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9yZXNldCgmc2IpOworCXN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aCgmc2IsIHBhdGgpOworCXJldHVybiBzYi5idWY7Cit9CisKK2NoYXIgKmFic29sdXRlX3BhdGhkdXAoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZF9hYnNvbHV0ZV9wYXRoKCZzYiwgcGF0aCk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKK30KKworY2hhciAqcHJlZml4X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnBmeCwgY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCXNpemVfdCBwZnhfbGVuID0gcGZ4ID8gc3RybGVuKHBmeCkgOiAwOworCisJaWYgKCFwZnhfbGVuKQorCQk7IC8qIG5vdGhpbmcgdG8gcHJlZml4ICovCisJZWxzZSBpZiAoaXNfYWJzb2x1dGVfcGF0aChhcmcpKQorCQlwZnhfbGVuID0gMDsKKwllbHNlCisJCXN0cmJ1Zl9hZGQoJnBhdGgsIHBmeCwgcGZ4X2xlbik7CisKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBhcmcpOworI2lmZGVmIEdJVF9XSU5ET1dTX05BVElWRQorCWNvbnZlcnRfc2xhc2hlcyhwYXRoLmJ1ZiArIHBmeF9sZW4pOworI2VuZGlmCisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnBhdGgsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvYWNsb2NhbC5tNCBiL2FjbG9jYWwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExYmM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FjbG9jYWwubTQKQEAgLTAsMCArMSw0MCBAQAorZG5sIENoZWNrIGZvciBzb2NrbGVuX3Q6IGhpc3RvcmljYWxseSBvbiBCU0QgaXQgaXMgYW4gaW50LCBhbmQgaW4KK2RubCBQT1NJWCAxZyBpdCBpcyBhIHR5cGUgb2YgaXRzIG93biwgYnV0IHNvbWUgcGxhdGZvcm1zIHVzZSBkaWZmZXJlbnQKK2RubCB0eXBlcyBmb3IgdGhlIGFyZ3VtZW50IHRvIGdldHNvY2tvcHQsIGdldHBlZXJuYW1lLCBldGMuICBTbyB3ZQorZG5sIGhhdmUgdG8gdGVzdCB0byBmaW5kIHNvbWV0aGluZyB0aGF0IHdpbGwgd29yay4KK0FDX0RFRlVOKFtUWVBFX1NPQ0tMRU5fVF0sCitbCisgICBBQ19DSEVDS19UWVBFKFtzb2NrbGVuX3RdLCAsWworICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc29ja2xlbl90IGVxdWl2YWxlbnRdKQorICAgICAgQUNfQ0FDSEVfVkFMKFtnaXRfY3Zfc29ja2xlbl90X2VxdWl2XSwKKyAgICAgIFsKKyAgICAgICAgICMgU3lzdGVtcyBoYXZlIGVpdGhlciAic3RydWN0IHNvY2thZGRyICoiIG9yCisgICAgICAgICAjICJ2b2lkICoiIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gZ2V0cGVlcm5hbWUKKyAgICAgICAgIGdpdF9jdl9zb2NrbGVuX3RfZXF1aXY9CisgICAgICAgICBmb3IgYXJnMiBpbiAic3RydWN0IHNvY2thZGRyIiB2b2lkOyBkbworICAgICAgICAgICAgZm9yIHQgaW4gaW50IHNpemVfdCB1bnNpZ25lZCBsb25nICJ1bnNpZ25lZCBsb25nIjsgZG8KKyAgICAgICAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWworICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworICAgICAgICAgICAgICAgICAgaW50IGdldHBlZXJuYW1lIChpbnQsICRhcmcyICosICR0ICopOworICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgICAkdCBsZW47CisgICAgICAgICAgICAgICAgICBnZXRwZWVybmFtZSgwLDAsJmxlbik7CisgICAgICAgICAgICAgICBdKV0sWworICAgICAgICAgICAgICAgICAgZ2l0X2N2X3NvY2tsZW5fdF9lcXVpdj0iJHQiCisgICAgICAgICAgICAgICAgICBicmVhayAyCisgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgZG9uZQorCisgICAgICAgICBpZiB0ZXN0ICJ4JGdpdF9jdl9zb2NrbGVuX3RfZXF1aXYiID0geDsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtDYW5ub3QgZmluZCBhIHR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIHNvY2tsZW5fdF0pCisgICAgICAgICBmaQorICAgICAgXSkKKyAgICAgIEFDX01TR19SRVNVTFQoJGdpdF9jdl9zb2NrbGVuX3RfZXF1aXYpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoc29ja2xlbl90LCAkZ2l0X2N2X3NvY2tsZW5fdF9lcXVpdiwKKwkJCVt0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3QgaWYgbm90IGRlZmluZWRdKV0sCisgICAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dKQorXSkKZGlmZiAtLWdpdCBhL2FkZC1pbnRlcmFjdGl2ZS5jIGIvYWRkLWludGVyYWN0aXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljZDJmZQotLS0gL2Rldi9udWxsCisrKyBiL2FkZC1pbnRlcmFjdGl2ZS5jCkBAIC0wLDAgKzEsMTE3NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYWRkLWludGVyYWN0aXZlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInByb21wdC5oIgorCitzdGF0aWMgdm9pZCBpbml0X2NvbG9yKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsCisJCSAgICAgICBjb25zdCBjaGFyICpzbG90X25hbWUsIGNoYXIgKmRzdCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfY29sb3IpCit7CisJY2hhciAqa2V5ID0geHN0cmZtdCgiY29sb3IuaW50ZXJhY3RpdmUuJXMiLCBzbG90X25hbWUpOworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJaWYgKCFzLT51c2VfY29sb3IpCisJCWRzdFswXSA9ICdcMCc7CisJZWxzZSBpZiAocmVwb19jb25maWdfZ2V0X3ZhbHVlKHIsIGtleSwgJnZhbHVlKSB8fAorCQkgY29sb3JfcGFyc2UodmFsdWUsIGRzdCkpCisJCXN0cmxjcHkoZHN0LCBkZWZhdWx0X2NvbG9yLCBDT0xPUl9NQVhMRU4pOworCisJZnJlZShrZXkpOworfQorCit2b2lkIGluaXRfYWRkX2lfc3RhdGUoc3RydWN0IGFkZF9pX3N0YXRlICpzLCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwljb25zdCBjaGFyICp2YWx1ZTsKKworCXMtPnIgPSByOworCisJaWYgKHJlcG9fY29uZmlnX2dldF92YWx1ZShyLCAiY29sb3IuaW50ZXJhY3RpdmUiLCAmdmFsdWUpKQorCQlzLT51c2VfY29sb3IgPSAtMTsKKwllbHNlCisJCXMtPnVzZV9jb2xvciA9CisJCQlnaXRfY29uZmlnX2NvbG9yYm9vbCgiY29sb3IuaW50ZXJhY3RpdmUiLCB2YWx1ZSk7CisJcy0+dXNlX2NvbG9yID0gd2FudF9jb2xvcihzLT51c2VfY29sb3IpOworCisJaW5pdF9jb2xvcihyLCBzLCAiaGVhZGVyIiwgcy0+aGVhZGVyX2NvbG9yLCBHSVRfQ09MT1JfQk9MRCk7CisJaW5pdF9jb2xvcihyLCBzLCAiaGVscCIsIHMtPmhlbHBfY29sb3IsIEdJVF9DT0xPUl9CT0xEX1JFRCk7CisJaW5pdF9jb2xvcihyLCBzLCAicHJvbXB0Iiwgcy0+cHJvbXB0X2NvbG9yLCBHSVRfQ09MT1JfQk9MRF9CTFVFKTsKKwlpbml0X2NvbG9yKHIsIHMsICJlcnJvciIsIHMtPmVycm9yX2NvbG9yLCBHSVRfQ09MT1JfQk9MRF9SRUQpOworCWluaXRfY29sb3IociwgcywgInJlc2V0Iiwgcy0+cmVzZXRfY29sb3IsIEdJVF9DT0xPUl9SRVNFVCk7CisJaW5pdF9jb2xvcihyLCBzLCAiZnJhZ2luZm8iLCBzLT5mcmFnaW5mb19jb2xvciwKKwkJICAgZGlmZl9nZXRfY29sb3Iocy0+dXNlX2NvbG9yLCBESUZGX0ZSQUdJTkZPKSk7CisJaW5pdF9jb2xvcihyLCBzLCAiY29udGV4dCIsIHMtPmNvbnRleHRfY29sb3IsCisJCWRpZmZfZ2V0X2NvbG9yKHMtPnVzZV9jb2xvciwgRElGRl9DT05URVhUKSk7CisJaW5pdF9jb2xvcihyLCBzLCAib2xkIiwgcy0+ZmlsZV9vbGRfY29sb3IsCisJCWRpZmZfZ2V0X2NvbG9yKHMtPnVzZV9jb2xvciwgRElGRl9GSUxFX09MRCkpOworCWluaXRfY29sb3IociwgcywgIm5ldyIsIHMtPmZpbGVfbmV3X2NvbG9yLAorCQlkaWZmX2dldF9jb2xvcihzLT51c2VfY29sb3IsIERJRkZfRklMRV9ORVcpKTsKKworCUZSRUVfQU5EX05VTEwocy0+aW50ZXJhY3RpdmVfZGlmZl9maWx0ZXIpOworCWdpdF9jb25maWdfZ2V0X3N0cmluZygiaW50ZXJhY3RpdmUuZGlmZmZpbHRlciIsCisJCQkgICAgICAmcy0+aW50ZXJhY3RpdmVfZGlmZl9maWx0ZXIpOworCisJRlJFRV9BTkRfTlVMTChzLT5pbnRlcmFjdGl2ZV9kaWZmX2FsZ29yaXRobSk7CisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJkaWZmLmFsZ29yaXRobSIsCisJCQkgICAgICAmcy0+aW50ZXJhY3RpdmVfZGlmZl9hbGdvcml0aG0pOworCisJZ2l0X2NvbmZpZ19nZXRfYm9vbCgiaW50ZXJhY3RpdmUuc2luZ2xla2V5IiwgJnMtPnVzZV9zaW5nbGVfa2V5KTsKK30KKwordm9pZCBjbGVhcl9hZGRfaV9zdGF0ZShzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMpCit7CisJRlJFRV9BTkRfTlVMTChzLT5pbnRlcmFjdGl2ZV9kaWZmX2ZpbHRlcik7CisJRlJFRV9BTkRfTlVMTChzLT5pbnRlcmFjdGl2ZV9kaWZmX2FsZ29yaXRobSk7CisJbWVtc2V0KHMsIDAsIHNpemVvZigqcykpOworCXMtPnVzZV9jb2xvciA9IC0xOworfQorCisvKgorICogQSAicHJlZml4IGl0ZW0gbGlzdCIgaXMgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgYXJlIGlkZW50aWZpZWQgYnkgYSBzdHJpbmcsIGFuZAorICogYSB1bmlxdWUgcHJlZml4IChpZiBhbnkpIGlzIGRldGVybWluZWQgZm9yIGVhY2ggaXRlbS4KKyAqCisgKiBJdCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZm9ybSBvZiBhIHBhaXIgb2YgYHN0cmluZ19saXN0YHMsIHRoZSBmaXJzdCBvbmUKKyAqIGR1cGxpY2F0aW5nIHRoZSBzdHJpbmdzLCB3aXRoIHRoZSBgdXRpbGAgZmllbGQgcG9pbnRpbmcgYXQgYSBzdHJ1Y3R1cmUgd2hvc2UKKyAqIGZpcnN0IGZpZWxkIG11c3QgYmUgYHNpemVfdCBwcmVmaXhfbGVuZ3RoYC4KKyAqCisgKiBUaGF0IGBwcmVmaXhfbGVuZ3RoYCBmaWVsZCB3aWxsIGJlIGNvbXB1dGVkIGJ5IGBmaW5kX3VuaXF1ZV9wcmVmaXhlcygpYDsgSXQKKyAqIHdpbGwgYmUgc2V0IHRvIHplcm8gaWYgbm8gdmFsaWQsIHVuaXF1ZSBwcmVmaXggY291bGQgYmUgZm91bmQuCisgKgorICogVGhlIHNlY29uZCBgc3RyaW5nX2xpc3RgIGlzIGNhbGxlZCBgc29ydGVkYCBhbmQgZG9lcyBfbm90XyBkdXBsaWNhdGUgdGhlCisgKiBzdHJpbmdzIGJ1dCBzaW1wbHkgcmV1c2VzIHRoZSBmaXJzdCBvbmUncywgd2l0aCB0aGUgYHV0aWxgIGZpZWxkIHBvaW50aW5nIGF0CisgKiB0aGUgYHN0cmluZ19pdGVtX2xpc3RgIG9mIHRoZSBmaXJzdCBgc3RyaW5nX2xpc3RgLiBJdCAgd2lsbCBiZSBwb3B1bGF0ZWQgYW5kCisgKiBzb3J0ZWQgYnkgYGZpbmRfdW5pcXVlX3ByZWZpeGVzKClgLgorICovCitzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCB7CisJc3RydWN0IHN0cmluZ19saXN0IGl0ZW1zOworCXN0cnVjdCBzdHJpbmdfbGlzdCBzb3J0ZWQ7CisJaW50ICpzZWxlY3RlZDsgLyogZm9yIG11bHRpLXNlbGVjdGlvbnMgKi8KKwlzaXplX3QgbWluX2xlbmd0aCwgbWF4X2xlbmd0aDsKK307CisjZGVmaW5lIFBSRUZJWF9JVEVNX0xJU1RfSU5JVCBcCisJeyBTVFJJTkdfTElTVF9JTklUX0RVUCwgU1RSSU5HX0xJU1RfSU5JVF9OT0RVUCwgTlVMTCwgMSwgNCB9CisKK3N0YXRpYyB2b2lkIHByZWZpeF9pdGVtX2xpc3RfY2xlYXIoc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmxpc3QpCit7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QtPml0ZW1zLCAxKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdC0+c29ydGVkLCAwKTsKKwlGUkVFX0FORF9OVUxMKGxpc3QtPnNlbGVjdGVkKTsKK30KKworc3RhdGljIHZvaWQgZXh0ZW5kX3ByZWZpeF9sZW5ndGgoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnAsCisJCQkJIGNvbnN0IGNoYXIgKm90aGVyX3N0cmluZywgc2l6ZV90IG1heF9sZW5ndGgpCit7CisJc2l6ZV90ICpsZW4gPSBwLT51dGlsOworCisJaWYgKCEqbGVuIHx8IG1lbWNtcChwLT5zdHJpbmcsIG90aGVyX3N0cmluZywgKmxlbikpCisJCXJldHVybjsKKworCWZvciAoOzspIHsKKwkJY2hhciBjID0gcC0+c3RyaW5nWypsZW5dOworCisJCS8qCisJCSAqIElzIGBwYCBhIHN0cmljdCBwcmVmaXggb2YgYG90aGVyYD8gT3IgaGF2ZSB3ZSBleGhhdXN0ZWQgdGhlCisJCSAqIG1heGltYWwgbGVuZ3RoIG9mIHRoZSBwcmVmaXg/IE9yIGlzIHRoZSBjdXJyZW50IGNoYXJhY3RlciBhCisJCSAqIG11bHRpLWJ5dGUgVVRGLTggb25lPyBJZiBzbywgdGhlcmUgaXMgbm8gdmFsaWQsIHVuaXF1ZQorCQkgKiBwcmVmaXguCisJCSAqLworCQlpZiAoIWMgfHwgKysqbGVuID4gbWF4X2xlbmd0aCB8fCAhaXNhc2NpaShjKSkgeworCQkJKmxlbiA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChjICE9IG90aGVyX3N0cmluZ1sqbGVuIC0gMV0pCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfdW5pcXVlX3ByZWZpeGVzKHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpsaXN0KQoreworCXNpemVfdCBpOworCisJaWYgKGxpc3QtPnNvcnRlZC5uciA9PSBsaXN0LT5pdGVtcy5ucikKKwkJcmV0dXJuOworCisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QtPnNvcnRlZCwgMCk7CisJLyogQXZvaWQgcmVhbGxvY2F0aW5nIGluY3JlbWVudGFsbHkgKi8KKwlsaXN0LT5zb3J0ZWQuaXRlbXMgPSB4bWFsbG9jKHN0X211bHQoc2l6ZW9mKCpsaXN0LT5zb3J0ZWQuaXRlbXMpLAorCQkJCQkgICAgIGxpc3QtPml0ZW1zLm5yKSk7CisJbGlzdC0+c29ydGVkLm5yID0gbGlzdC0+c29ydGVkLmFsbG9jID0gbGlzdC0+aXRlbXMubnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+aXRlbXMubnI7IGkrKykgeworCQlsaXN0LT5zb3J0ZWQuaXRlbXNbaV0uc3RyaW5nID0gbGlzdC0+aXRlbXMuaXRlbXNbaV0uc3RyaW5nOworCQlsaXN0LT5zb3J0ZWQuaXRlbXNbaV0udXRpbCA9IGxpc3QtPml0ZW1zLml0ZW1zICsgaTsKKwl9CisKKwlzdHJpbmdfbGlzdF9zb3J0KCZsaXN0LT5zb3J0ZWQpOworCisJZm9yIChpID0gMDsgaSA8IGxpc3QtPnNvcnRlZC5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzb3J0ZWRfaXRlbSA9IGxpc3QtPnNvcnRlZC5pdGVtcyArIGk7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gc29ydGVkX2l0ZW0tPnV0aWw7CisJCXNpemVfdCAqbGVuID0gaXRlbS0+dXRpbDsKKworCQkqbGVuID0gMDsKKwkJd2hpbGUgKCpsZW4gPCBsaXN0LT5taW5fbGVuZ3RoKSB7CisJCQljaGFyIGMgPSBpdGVtLT5zdHJpbmdbKCpsZW4pKytdOworCisJCQlpZiAoIWMgfHwgIWlzYXNjaWkoYykpIHsKKwkJCQkqbGVuID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChpID4gMCkKKwkJCWV4dGVuZF9wcmVmaXhfbGVuZ3RoKGl0ZW0sIHNvcnRlZF9pdGVtWy0xXS5zdHJpbmcsCisJCQkJCSAgICAgbGlzdC0+bWF4X2xlbmd0aCk7CisJCWlmIChpICsgMSA8IGxpc3QtPnNvcnRlZC5ucikKKwkJCWV4dGVuZF9wcmVmaXhfbGVuZ3RoKGl0ZW0sIHNvcnRlZF9pdGVtWzFdLnN0cmluZywKKwkJCQkJICAgICBsaXN0LT5tYXhfbGVuZ3RoKTsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZpbmRfdW5pcXVlKGNvbnN0IGNoYXIgKnN0cmluZywgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmxpc3QpCit7CisJaW50IGluZGV4ID0gc3RyaW5nX2xpc3RfZmluZF9pbnNlcnRfaW5kZXgoJmxpc3QtPnNvcnRlZCwgc3RyaW5nLCAxKTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCWlmIChsaXN0LT5pdGVtcy5uciAhPSBsaXN0LT5zb3J0ZWQubnIpCisJCUJVRygicHJlZml4X2l0ZW1fbGlzdCBpbiBpbmNvbnNpc3RlbnQgc3RhdGUgKCUiUFJJdU1BWAorCQkgICAgIiB2cyAlIlBSSXVNQVgiKSIsCisJCSAgICAodWludG1heF90KWxpc3QtPml0ZW1zLm5yLCAodWludG1heF90KWxpc3QtPnNvcnRlZC5ucik7CisKKwlpZiAoaW5kZXggPCAwKQorCQlpdGVtID0gbGlzdC0+c29ydGVkLml0ZW1zWy0xIC0gaW5kZXhdLnV0aWw7CisJZWxzZSBpZiAoaW5kZXggPiAwICYmCisJCSBzdGFydHNfd2l0aChsaXN0LT5zb3J0ZWQuaXRlbXNbaW5kZXggLSAxXS5zdHJpbmcsIHN0cmluZykpCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChpbmRleCArIDEgPCBsaXN0LT5zb3J0ZWQubnIgJiYKKwkJIHN0YXJ0c193aXRoKGxpc3QtPnNvcnRlZC5pdGVtc1tpbmRleCArIDFdLnN0cmluZywgc3RyaW5nKSkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKGluZGV4IDwgbGlzdC0+c29ydGVkLm5yKQorCQlpdGVtID0gbGlzdC0+c29ydGVkLml0ZW1zW2luZGV4XS51dGlsOworCWVsc2UKKwkJcmV0dXJuIC0xOworCXJldHVybiBpdGVtIC0gbGlzdC0+aXRlbXMuaXRlbXM7Cit9CisKK3N0cnVjdCBsaXN0X29wdGlvbnMgeworCWludCBjb2x1bW5zOworCWNvbnN0IGNoYXIgKmhlYWRlcjsKKwl2b2lkICgqcHJpbnRfaXRlbSkoaW50IGksIGludCBzZWxlY3RlZCwgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sCisJCQkgICB2b2lkICpwcmludF9pdGVtX2RhdGEpOworCXZvaWQgKnByaW50X2l0ZW1fZGF0YTsKK307CisKK3N0YXRpYyB2b2lkIGxpc3Qoc3RydWN0IGFkZF9pX3N0YXRlICpzLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGludCAqc2VsZWN0ZWQsCisJCSBzdHJ1Y3QgbGlzdF9vcHRpb25zICpvcHRzKQoreworCWludCBpLCBsYXN0X2xmID0gMDsKKworCWlmICghbGlzdC0+bnIpCisJCXJldHVybjsKKworCWlmIChvcHRzLT5oZWFkZXIpCisJCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWFkZXJfY29sb3IsCisJCQkJICIlcyIsIG9wdHMtPmhlYWRlcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykgeworCQlvcHRzLT5wcmludF9pdGVtKGksIHNlbGVjdGVkID8gc2VsZWN0ZWRbaV0gOiAwLCBsaXN0LT5pdGVtcyArIGksCisJCQkJIG9wdHMtPnByaW50X2l0ZW1fZGF0YSk7CisKKwkJaWYgKChvcHRzLT5jb2x1bW5zKSAmJiAoKGkgKyAxKSAlIChvcHRzLT5jb2x1bW5zKSkpIHsKKwkJCXB1dGNoYXIoJ1x0Jyk7CisJCQlsYXN0X2xmID0gMDsKKwkJfQorCQllbHNlIHsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQlsYXN0X2xmID0gMTsKKwkJfQorCX0KKworCWlmICghbGFzdF9sZikKKwkJcHV0Y2hhcignXG4nKTsKK30KK3N0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyB7CisJc3RydWN0IGxpc3Rfb3B0aW9ucyBsaXN0X29wdHM7CisKKwljb25zdCBjaGFyICpwcm9tcHQ7CisJZW51bSB7CisJCVNJTkdMRVRPTiA9ICgxPDwwKSwKKwkJSU1NRURJQVRFID0gKDE8PDEpLAorCX0gZmxhZ3M7CisJdm9pZCAoKnByaW50X2hlbHApKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcyk7Cit9OworCisjZGVmaW5lIExJU1RfQU5EX0NIT09TRV9FUlJPUiAoLTEpCisjZGVmaW5lIExJU1RfQU5EX0NIT09TRV9RVUlUICAoLTIpCisKKy8qCisgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCBpbmRleCBpbiBzaW5nbGV0b24gbW9kZSwgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBpdGVtcworICogb3RoZXJ3aXNlLgorICoKKyAqIElmIGFuIGVycm9yIG9jY3VycmVkLCByZXR1cm5zIGBMSVNUX0FORF9DSE9PU0VfRVJST1JgLiBVcG9uIEVPRiwKKyAqIGBMSVNUX0FORF9DSE9PU0VfUVVJVGAgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGxpc3RfYW5kX2Nob29zZShzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsCisJCQkgICAgICAgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKml0ZW1zLAorCQkJICAgICAgIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlpbnQgc2luZ2xldG9uID0gb3B0cy0+ZmxhZ3MgJiBTSU5HTEVUT047CisJaW50IGltbWVkaWF0ZSA9IG9wdHMtPmZsYWdzICYgSU1NRURJQVRFOworCisJc3RydWN0IHN0cmJ1ZiBpbnB1dCA9IFNUUkJVRl9JTklUOworCXNzaXplX3QgcmVzID0gc2luZ2xldG9uID8gTElTVF9BTkRfQ0hPT1NFX0VSUk9SIDogMDsKKworCWlmICghc2luZ2xldG9uKSB7CisJCWZyZWUoaXRlbXMtPnNlbGVjdGVkKTsKKwkJQ0FMTE9DX0FSUkFZKGl0ZW1zLT5zZWxlY3RlZCwgaXRlbXMtPml0ZW1zLm5yKTsKKwl9CisKKwlpZiAoc2luZ2xldG9uICYmICFpbW1lZGlhdGUpCisJCUJVRygic2luZ2xldG9uIHJlcXVpcmVzIGltbWVkaWF0ZSIpOworCisJZmluZF91bmlxdWVfcHJlZml4ZXMoaXRlbXMpOworCisJZm9yICg7OykgeworCQljaGFyICpwOworCisJCXN0cmJ1Zl9yZXNldCgmaW5wdXQpOworCisJCWxpc3QocywgJml0ZW1zLT5pdGVtcywgaXRlbXMtPnNlbGVjdGVkLCAmb3B0cy0+bGlzdF9vcHRzKTsKKworCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgcy0+cHJvbXB0X2NvbG9yLCAiJXMiLCBvcHRzLT5wcm9tcHQpOworCQlmcHV0cyhzaW5nbGV0b24gPyAiPiAiIDogIj4+ICIsIHN0ZG91dCk7CisJCWZmbHVzaChzdGRvdXQpOworCisJCWlmIChnaXRfcmVhZF9saW5lX2ludGVyYWN0aXZlbHkoJmlucHV0KSA9PSBFT0YpIHsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQlpZiAoaW1tZWRpYXRlKQorCQkJCXJlcyA9IExJU1RfQU5EX0NIT09TRV9RVUlUOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIWlucHV0LmxlbikKKwkJCWJyZWFrOworCisJCWlmICghc3RyY21wKGlucHV0LmJ1ZiwgIj8iKSkgeworCQkJb3B0cy0+cHJpbnRfaGVscChzKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcCA9IGlucHV0LmJ1ZjsKKwkJZm9yICg7OykgeworCQkJc2l6ZV90IHNlcCA9IHN0cmNzcG4ocCwgIiBcdFxyXG4sIik7CisJCQlpbnQgY2hvb3NlID0gMTsKKwkJCS8qIGBmcm9tYCBpcyBpbmNsdXNpdmUsIGB0b2AgaXMgZXhjbHVzaXZlICovCisJCQlzc2l6ZV90IGZyb20gPSAtMSwgdG8gPSAtMTsKKworCQkJaWYgKCFzZXApIHsKKwkJCQlpZiAoISpwKQorCQkJCQlicmVhazsKKwkJCQlwKys7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIElucHV0IHRoYXQgYmVnaW5zIHdpdGggJy0nOyBkZS1zZWxlY3QgKi8KKwkJCWlmICgqcCA9PSAnLScpIHsKKwkJCQljaG9vc2UgPSAwOworCQkJCXArKzsKKwkJCQlzZXAtLTsKKwkJCX0KKworCQkJaWYgKHNlcCA9PSAxICYmICpwID09ICcqJykgeworCQkJCWZyb20gPSAwOworCQkJCXRvID0gaXRlbXMtPml0ZW1zLm5yOworCQkJfSBlbHNlIGlmIChpc2RpZ2l0KCpwKSkgeworCQkJCWNoYXIgKmVuZHA7CisJCQkJLyoKKwkJCQkgKiBBIHJhbmdlIGNhbiBiZSBzcGVjaWZpZWQgbGlrZSA1LTcgb3IgNS0uCisJCQkJICoKKwkJCQkgKiBOb3RlOiBgZnJvbWAgaXMgMC1iYXNlZCB3aGlsZSB0aGUgdXNlciBpbnB1dAorCQkJCSAqIGlzIDEtYmFzZWQsIGhlbmNlIHdlIGhhdmUgdG8gZGVjcmVtZW50IGJ5CisJCQkJICogb25lLiBXZSBkbyBub3QgaGF2ZSB0byBkZWNyZW1lbnQgYHRvYCBldmVuCisJCQkJICogaWYgaXQgaXMgMC1iYXNlZCBiZWNhdXNlIGl0IGlzIGFuIGV4Y2x1c2l2ZQorCQkJCSAqIGJvdW5kYXJ5LgorCQkJCSAqLworCQkJCWZyb20gPSBzdHJ0b3VsKHAsICZlbmRwLCAxMCkgLSAxOworCQkJCWlmIChlbmRwID09IHAgKyBzZXApCisJCQkJCXRvID0gZnJvbSArIDE7CisJCQkJZWxzZSBpZiAoKmVuZHAgPT0gJy0nKSB7CisJCQkJCWlmIChpc2RpZ2l0KCooKytlbmRwKSkpCisJCQkJCQl0byA9IHN0cnRvdWwoZW5kcCwgJmVuZHAsIDEwKTsKKwkJCQkJZWxzZQorCQkJCQkJdG8gPSBpdGVtcy0+aXRlbXMubnI7CisJCQkJCS8qIGV4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIHJhbmdlPyAqLworCQkJCQlpZiAoZW5kcCAhPSBwICsgc2VwKQorCQkJCQkJZnJvbSA9IC0xOworCQkJCX0KKwkJCX0KKworCQkJaWYgKHBbc2VwXSkKKwkJCQlwW3NlcCsrXSA9ICdcMCc7CisJCQlpZiAoZnJvbSA8IDApIHsKKwkJCQlmcm9tID0gZmluZF91bmlxdWUocCwgaXRlbXMpOworCQkJCWlmIChmcm9tID49IDApCisJCQkJCXRvID0gZnJvbSArIDE7CisJCQl9CisKKwkJCWlmIChmcm9tIDwgMCB8fCBmcm9tID49IGl0ZW1zLT5pdGVtcy5uciB8fAorCQkJICAgIChzaW5nbGV0b24gJiYgZnJvbSArIDEgIT0gdG8pKSB7CisJCQkJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmVycm9yX2NvbG9yLAorCQkJCQkJIF8oIkh1aCAoJXMpPyIpLCBwKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoc2luZ2xldG9uKSB7CisJCQkJcmVzID0gZnJvbTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHRvID4gaXRlbXMtPml0ZW1zLm5yKQorCQkJCXRvID0gaXRlbXMtPml0ZW1zLm5yOworCisJCQlmb3IgKDsgZnJvbSA8IHRvOyBmcm9tKyspCisJCQkJaWYgKGl0ZW1zLT5zZWxlY3RlZFtmcm9tXSAhPSBjaG9vc2UpIHsKKwkJCQkJaXRlbXMtPnNlbGVjdGVkW2Zyb21dID0gY2hvb3NlOworCQkJCQlyZXMgKz0gY2hvb3NlID8gKzEgOiAtMTsKKwkJCQl9CisKKwkJCXAgKz0gc2VwOworCQl9CisKKwkJaWYgKChpbW1lZGlhdGUgJiYgcmVzICE9IExJU1RfQU5EX0NIT09TRV9FUlJPUikgfHwKKwkJICAgICFzdHJjbXAoaW5wdXQuYnVmLCAiKiIpKQorCQkJYnJlYWs7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmlucHV0KTsKKwlyZXR1cm4gcmVzOworfQorCitzdHJ1Y3QgYWRkZGVsIHsKKwl1aW50bWF4X3QgYWRkLCBkZWw7CisJdW5zaWduZWQgc2VlbjoxLCB1bm1lcmdlZDoxLCBiaW5hcnk6MTsKK307CisKK3N0cnVjdCBmaWxlX2l0ZW0geworCXNpemVfdCBwcmVmaXhfbGVuZ3RoOworCXN0cnVjdCBhZGRkZWwgaW5kZXgsIHdvcmt0cmVlOworfTsKKworc3RhdGljIHZvaWQgYWRkX2ZpbGVfaXRlbShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmZpbGVzLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBmaWxlX2l0ZW0gKml0ZW0gPSB4Y2FsbG9jKHNpemVvZigqaXRlbSksIDEpOworCisJc3RyaW5nX2xpc3RfYXBwZW5kKGZpbGVzLCBuYW1lKS0+dXRpbCA9IGl0ZW07Cit9CisKK3N0cnVjdCBwYXRobmFtZV9lbnRyeSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50OworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IGZpbGVfaXRlbSAqaXRlbTsKK307CisKK3N0YXRpYyBpbnQgcGF0aG5hbWVfZW50cnlfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICpoZTEsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqaGUyLAorCQkJICAgICAgY29uc3Qgdm9pZCAqbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgcGF0aG5hbWVfZW50cnkgKmUxID0KKwkJY29udGFpbmVyX29mKGhlMSwgY29uc3Qgc3RydWN0IHBhdGhuYW1lX2VudHJ5LCBlbnQpOworCWNvbnN0IHN0cnVjdCBwYXRobmFtZV9lbnRyeSAqZTIgPQorCQljb250YWluZXJfb2YoaGUyLCBjb25zdCBzdHJ1Y3QgcGF0aG5hbWVfZW50cnksIGVudCk7CisKKwlyZXR1cm4gc3RyY21wKGUxLT5uYW1lLCBuYW1lID8gKGNvbnN0IGNoYXIgKiluYW1lIDogZTItPm5hbWUpOworfQorCitzdHJ1Y3QgY29sbGVjdGlvbl9zdGF0dXMgeworCWVudW0geyBGUk9NX1dPUktUUkVFID0gMCwgRlJPTV9JTkRFWCA9IDEgfSBtb2RlOworCisJY29uc3QgY2hhciAqcmVmZXJlbmNlOworCisJdW5zaWduZWQgc2tpcF91bnNlZW46MTsKKwlzaXplX3QgdW5tZXJnZWRfY291bnQsIGJpbmFyeV9jb3VudDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmZpbGVzOworCXN0cnVjdCBoYXNobWFwIGZpbGVfbWFwOworfTsKKworc3RhdGljIHZvaWQgY29sbGVjdF9jaGFuZ2VzX2NiKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKKwkJCSAgICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNvbGxlY3Rpb25fc3RhdHVzICpzID0gZGF0YTsKKwlzdHJ1Y3QgZGlmZnN0YXRfdCBzdGF0ID0geyAwIH07CisJaW50IGk7CisKKwlpZiAoIXEtPm5yKQorCQlyZXR1cm47CisKKwljb21wdXRlX2RpZmZzdGF0KG9wdGlvbnMsICZzdGF0LCBxKTsKKworCWZvciAoaSA9IDA7IGkgPCBzdGF0Lm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHN0YXQuZmlsZXNbaV0tPm5hbWU7CisJCWludCBoYXNoID0gc3RyaGFzaChuYW1lKTsKKwkJc3RydWN0IHBhdGhuYW1lX2VudHJ5ICplbnRyeTsKKwkJc3RydWN0IGZpbGVfaXRlbSAqZmlsZV9pdGVtOworCQlzdHJ1Y3QgYWRkZGVsICphZGRkZWwsICpvdGhlcl9hZGRkZWw7CisKKwkJZW50cnkgPSBoYXNobWFwX2dldF9lbnRyeV9mcm9tX2hhc2goJnMtPmZpbGVfbWFwLCBoYXNoLCBuYW1lLAorCQkJCQkJICAgIHN0cnVjdCBwYXRobmFtZV9lbnRyeSwgZW50KTsKKwkJaWYgKCFlbnRyeSkgeworCQkJaWYgKHMtPnNraXBfdW5zZWVuKQorCQkJCWNvbnRpbnVlOworCisJCQlhZGRfZmlsZV9pdGVtKHMtPmZpbGVzLCBuYW1lKTsKKworCQkJZW50cnkgPSB4Y2FsbG9jKHNpemVvZigqZW50cnkpLCAxKTsKKwkJCWhhc2htYXBfZW50cnlfaW5pdCgmZW50cnktPmVudCwgaGFzaCk7CisJCQllbnRyeS0+bmFtZSA9IHMtPmZpbGVzLT5pdGVtc1tzLT5maWxlcy0+bnIgLSAxXS5zdHJpbmc7CisJCQllbnRyeS0+aXRlbSA9IHMtPmZpbGVzLT5pdGVtc1tzLT5maWxlcy0+bnIgLSAxXS51dGlsOworCQkJaGFzaG1hcF9hZGQoJnMtPmZpbGVfbWFwLCAmZW50cnktPmVudCk7CisJCX0KKworCQlmaWxlX2l0ZW0gPSBlbnRyeS0+aXRlbTsKKwkJYWRkZGVsID0gcy0+bW9kZSA9PSBGUk9NX0lOREVYID8KKwkJCSZmaWxlX2l0ZW0tPmluZGV4IDogJmZpbGVfaXRlbS0+d29ya3RyZWU7CisJCW90aGVyX2FkZGRlbCA9IHMtPm1vZGUgPT0gRlJPTV9JTkRFWCA/CisJCQkmZmlsZV9pdGVtLT53b3JrdHJlZSA6ICZmaWxlX2l0ZW0tPmluZGV4OworCQlhZGRkZWwtPnNlZW4gPSAxOworCQlhZGRkZWwtPmFkZCA9IHN0YXQuZmlsZXNbaV0tPmFkZGVkOworCQlhZGRkZWwtPmRlbCA9IHN0YXQuZmlsZXNbaV0tPmRlbGV0ZWQ7CisJCWlmIChzdGF0LmZpbGVzW2ldLT5pc19iaW5hcnkpIHsKKwkJCWlmICghb3RoZXJfYWRkZGVsLT5iaW5hcnkpCisJCQkJcy0+YmluYXJ5X2NvdW50Kys7CisJCQlhZGRkZWwtPmJpbmFyeSA9IDE7CisJCX0KKwkJaWYgKHN0YXQuZmlsZXNbaV0tPmlzX3VubWVyZ2VkKSB7CisJCQlpZiAoIW90aGVyX2FkZGRlbC0+dW5tZXJnZWQpCisJCQkJcy0+dW5tZXJnZWRfY291bnQrKzsKKwkJCWFkZGRlbC0+dW5tZXJnZWQgPSAxOworCQl9CisJfQorCWZyZWVfZGlmZnN0YXRfaW5mbygmc3RhdCk7Cit9CisKK2VudW0gbW9kaWZpZWRfZmlsZXNfZmlsdGVyIHsKKwlOT19GSUxURVIgPSAwLAorCVdPUktUUkVFX09OTFkgPSAxLAorCUlOREVYX09OTFkgPSAyLAorfTsKKworc3RhdGljIGludCBnZXRfbW9kaWZpZWRfZmlsZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICBlbnVtIG1vZGlmaWVkX2ZpbGVzX2ZpbHRlciBmaWx0ZXIsCisJCQkgICAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqZmlsZXMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLAorCQkJICAgICAgc2l6ZV90ICp1bm1lcmdlZF9jb3VudCwKKwkJCSAgICAgIHNpemVfdCAqYmluYXJ5X2NvdW50KQoreworCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisJaW50IGlzX2luaXRpYWwgPSAhcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgUkVTT0xWRV9SRUZfUkVBRElORywKKwkJCQkJICAgICAmaGVhZF9vaWQsIE5VTEwpOworCXN0cnVjdCBjb2xsZWN0aW9uX3N0YXR1cyBzID0geyAwIH07CisJaW50IGk7CisKKwlpZiAoZGlzY2FyZF9pbmRleChyLT5pbmRleCkgPCAwIHx8CisJICAgIHJlcG9fcmVhZF9pbmRleF9wcmVsb2FkKHIsIHBzLCAwKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCBpbmRleCIpKTsKKworCXByZWZpeF9pdGVtX2xpc3RfY2xlYXIoZmlsZXMpOworCXMuZmlsZXMgPSAmZmlsZXMtPml0ZW1zOworCWhhc2htYXBfaW5pdCgmcy5maWxlX21hcCwgcGF0aG5hbWVfZW50cnlfY21wLCBOVUxMLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJc3RydWN0IHJldl9pbmZvIHJldjsKKwkJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBvcHQgPSB7IDAgfTsKKworCQlpZiAoZmlsdGVyID09IElOREVYX09OTFkpCisJCQlzLm1vZGUgPSAoaSA9PSAwKSA/IEZST01fSU5ERVggOiBGUk9NX1dPUktUUkVFOworCQllbHNlCisJCQlzLm1vZGUgPSAoaSA9PSAwKSA/IEZST01fV09SS1RSRUUgOiBGUk9NX0lOREVYOworCQlzLnNraXBfdW5zZWVuID0gZmlsdGVyICYmIGk7CisKKwkJb3B0LmRlZiA9IGlzX2luaXRpYWwgPworCQkJZW1wdHlfdHJlZV9vaWRfaGV4KCkgOiBvaWRfdG9faGV4KCZoZWFkX29pZCk7CisKKwkJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CisJCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCAmb3B0KTsKKworCQlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFjayA9IGNvbGxlY3RfY2hhbmdlc19jYjsKKwkJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSAmczsKKworCQlpZiAocHMpCisJCQljb3B5X3BhdGhzcGVjKCZyZXYucHJ1bmVfZGF0YSwgcHMpOworCisJCWlmIChzLm1vZGUgPT0gRlJPTV9JTkRFWCkKKwkJCXJ1bl9kaWZmX2luZGV4KCZyZXYsIDEpOworCQllbHNlIHsKKwkJCXJldi5kaWZmb3B0LmZsYWdzLmlnbm9yZV9kaXJ0eV9zdWJtb2R1bGVzID0gMTsKKwkJCXJ1bl9kaWZmX2ZpbGVzKCZyZXYsIDApOworCQl9CisKKwkJaWYgKHBzKQorCQkJY2xlYXJfcGF0aHNwZWMoJnJldi5wcnVuZV9kYXRhKTsKKwl9CisJaGFzaG1hcF9mcmVlX2VudHJpZXMoJnMuZmlsZV9tYXAsIHN0cnVjdCBwYXRobmFtZV9lbnRyeSwgZW50KTsKKwlpZiAodW5tZXJnZWRfY291bnQpCisJCSp1bm1lcmdlZF9jb3VudCA9IHMudW5tZXJnZWRfY291bnQ7CisJaWYgKGJpbmFyeV9jb3VudCkKKwkJKmJpbmFyeV9jb3VudCA9IHMuYmluYXJ5X2NvdW50OworCisJLyogV2hpbGUgdGhlIGRpZmZzIGFyZSBvcmRlcmVkIGFscmVhZHksIHdlIHJhbiAqdHdvKiBkaWZmcy4uLiAqLworCXN0cmluZ19saXN0X3NvcnQoJmZpbGVzLT5pdGVtcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVuZGVyX2FkZGRlbChzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkJc3RydWN0IGFkZGRlbCAqYWQsIGNvbnN0IGNoYXIgKm5vX2NoYW5nZXMpCit7CisJaWYgKGFkLT5iaW5hcnkpCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBfKCJiaW5hcnkiKSk7CisJZWxzZSBpZiAoYWQtPnNlZW4pCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIislIlBSSXVNQVgiLy0lIlBSSXVNQVgsCisJCQkgICAgKHVpbnRtYXhfdClhZC0+YWRkLCAodWludG1heF90KWFkLT5kZWwpOworCWVsc2UKKwkJc3RyYnVmX2FkZHN0cihidWYsIG5vX2NoYW5nZXMpOworfQorCisvKiBmaWx0ZXJzIG91dCBwcmVmaXhlcyB3aGljaCBoYXZlIHNwZWNpYWwgbWVhbmluZyB0byBsaXN0X2FuZF9jaG9vc2UoKSAqLworc3RhdGljIGludCBpc192YWxpZF9wcmVmaXgoY29uc3QgY2hhciAqcHJlZml4LCBzaXplX3QgcHJlZml4X2xlbikKK3sKKwlyZXR1cm4gcHJlZml4X2xlbiAmJiBwcmVmaXggJiYKKwkJLyoKKwkJICogV2UgZXhwZWN0IGBwcmVmaXhgIHRvIGJlIE5VTCB0ZXJtaW5hdGVkLCB0aGVyZWZvcmUgdGhpcworCQkgKiBgc3RyY3NwbigpYCBjYWxsIGlzIG9rYXksIGV2ZW4gaWYgaXQgbWlnaHQgZG8gbXVjaCBtb3JlCisJCSAqIHdvcmsgdGhhbiBzdHJpY3RseSBuZWNlc3NhcnkuCisJCSAqLworCQlzdHJjc3BuKHByZWZpeCwgIiBcdFxyXG4sIikgPj0gcHJlZml4X2xlbiAmJgkvKiBzZXBhcmF0b3JzICovCisJCSpwcmVmaXggIT0gJy0nICYmCQkJCS8qIGRlc2VsZWN0aW9uICovCisJCSFpc2RpZ2l0KCpwcmVmaXgpICYmCQkJCS8qIHNlbGVjdGlvbiAqLworCQkocHJlZml4X2xlbiAhPSAxIHx8CisJCSAoKnByZWZpeCAhPSAnKicgJiYJCQkJLyogImFsbCIgd2lsZGNhcmQgKi8KKwkJICAqcHJlZml4ICE9ICc/JykpOwkJCQkvKiBwcm9tcHQgaGVscCAqLworfQorCitzdHJ1Y3QgcHJpbnRfZmlsZV9pdGVtX2RhdGEgeworCWNvbnN0IGNoYXIgKm1vZGlmaWVkX2ZtdCwgKmNvbG9yLCAqcmVzZXQ7CisJc3RydWN0IHN0cmJ1ZiBidWYsIG5hbWUsIGluZGV4LCB3b3JrdHJlZTsKKwl1bnNpZ25lZCBvbmx5X25hbWVzOjE7Cit9OworCitzdGF0aWMgdm9pZCBwcmludF9maWxlX2l0ZW0oaW50IGksIGludCBzZWxlY3RlZCwgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sCisJCQkgICAgdm9pZCAqcHJpbnRfZmlsZV9pdGVtX2RhdGEpCit7CisJc3RydWN0IGZpbGVfaXRlbSAqYyA9IGl0ZW0tPnV0aWw7CisJc3RydWN0IHByaW50X2ZpbGVfaXRlbV9kYXRhICpkID0gcHJpbnRfZmlsZV9pdGVtX2RhdGE7CisJY29uc3QgY2hhciAqaGlnaGxpZ2h0ZWQgPSBOVUxMOworCisJc3RyYnVmX3Jlc2V0KCZkLT5pbmRleCk7CisJc3RyYnVmX3Jlc2V0KCZkLT53b3JrdHJlZSk7CisJc3RyYnVmX3Jlc2V0KCZkLT5idWYpOworCisJLyogRm9ybWF0IHRoZSBpdGVtIHdpdGggdGhlIHByZWZpeCBoaWdobGlnaHRlZC4gKi8KKwlpZiAoYy0+cHJlZml4X2xlbmd0aCA+IDAgJiYKKwkgICAgaXNfdmFsaWRfcHJlZml4KGl0ZW0tPnN0cmluZywgYy0+cHJlZml4X2xlbmd0aCkpIHsKKwkJc3RyYnVmX3Jlc2V0KCZkLT5uYW1lKTsKKwkJc3RyYnVmX2FkZGYoJmQtPm5hbWUsICIlcyUuKnMlcyVzIiwgZC0+Y29sb3IsCisJCQkgICAgKGludCljLT5wcmVmaXhfbGVuZ3RoLCBpdGVtLT5zdHJpbmcsIGQtPnJlc2V0LAorCQkJICAgIGl0ZW0tPnN0cmluZyArIGMtPnByZWZpeF9sZW5ndGgpOworCQloaWdobGlnaHRlZCA9IGQtPm5hbWUuYnVmOworCX0KKworCWlmIChkLT5vbmx5X25hbWVzKSB7CisJCXByaW50ZigiJWMlMmQ6ICVzIiwgc2VsZWN0ZWQgPyAnKicgOiAnICcsIGkgKyAxLAorCQkgICAgICAgaGlnaGxpZ2h0ZWQgPyBoaWdobGlnaHRlZCA6IGl0ZW0tPnN0cmluZyk7CisJCXJldHVybjsKKwl9CisKKwlyZW5kZXJfYWRkZGVsKCZkLT53b3JrdHJlZSwgJmMtPndvcmt0cmVlLCBfKCJub3RoaW5nIikpOworCXJlbmRlcl9hZGRkZWwoJmQtPmluZGV4LCAmYy0+aW5kZXgsIF8oInVuY2hhbmdlZCIpKTsKKworCXN0cmJ1Zl9hZGRmKCZkLT5idWYsIGQtPm1vZGlmaWVkX2ZtdCwgZC0+aW5kZXguYnVmLCBkLT53b3JrdHJlZS5idWYsCisJCSAgICBoaWdobGlnaHRlZCA/IGhpZ2hsaWdodGVkIDogaXRlbS0+c3RyaW5nKTsKKworCXByaW50ZigiJWMlMmQ6ICVzIiwgc2VsZWN0ZWQgPyAnKicgOiAnICcsIGkgKyAxLCBkLT5idWYuYnVmKTsKK30KKworc3RhdGljIGludCBydW5fc3RhdHVzKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJICAgICAgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmZpbGVzLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgKm9wdHMpCit7CisJaWYgKGdldF9tb2RpZmllZF9maWxlcyhzLT5yLCBOT19GSUxURVIsIGZpbGVzLCBwcywgTlVMTCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlsaXN0KHMsICZmaWxlcy0+aXRlbXMsIE5VTEwsICZvcHRzLT5saXN0X29wdHMpOworCXB1dGNoYXIoJ1xuJyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydW5fdXBkYXRlKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJICAgICAgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmZpbGVzLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgKm9wdHMpCit7CisJaW50IHJlcyA9IDAsIGZkOworCXNpemVfdCBjb3VudCwgaTsKKwlzdHJ1Y3QgbG9ja19maWxlIGluZGV4X2xvY2s7CisKKwlpZiAoZ2V0X21vZGlmaWVkX2ZpbGVzKHMtPnIsIFdPUktUUkVFX09OTFksIGZpbGVzLCBwcywgTlVMTCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWZpbGVzLT5pdGVtcy5ucikgeworCQlwdXRjaGFyKCdcbicpOworCQlyZXR1cm4gMDsKKwl9CisKKwlvcHRzLT5wcm9tcHQgPSBOXygiVXBkYXRlIik7CisJY291bnQgPSBsaXN0X2FuZF9jaG9vc2UocywgZmlsZXMsIG9wdHMpOworCWlmIChjb3VudCA8PSAwKSB7CisJCXB1dGNoYXIoJ1xuJyk7CisJCXJldHVybiAwOworCX0KKworCWZkID0gcmVwb19ob2xkX2xvY2tlZF9pbmRleChzLT5yLCAmaW5kZXhfbG9jaywgTE9DS19SRVBPUlRfT05fRVJST1IpOworCWlmIChmZCA8IDApIHsKKwkJcHV0Y2hhcignXG4nKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBmaWxlcy0+aXRlbXMubnI7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnN0cmluZzsKKwkJaWYgKGZpbGVzLT5zZWxlY3RlZFtpXSAmJgorCQkgICAgYWRkX2ZpbGVfdG9faW5kZXgocy0+ci0+aW5kZXgsIG5hbWUsIDApIDwgMCkgeworCQkJcmVzID0gZXJyb3IoXygiY291bGQgbm90IHN0YWdlICclcyciKSwgbmFtZSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcmVzICYmIHdyaXRlX2xvY2tlZF9pbmRleChzLT5yLT5pbmRleCwgJmluZGV4X2xvY2ssIENPTU1JVF9MT0NLKSA8IDApCisJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCB3cml0ZSBpbmRleCIpKTsKKworCWlmICghcmVzKQorCQlwcmludGYoUV8oInVwZGF0ZWQgJWQgcGF0aFxuIiwKKwkJCSAgInVwZGF0ZWQgJWQgcGF0aHNcbiIsIGNvdW50KSwgKGludCljb3VudCk7CisKKwlwdXRjaGFyKCdcbicpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIHJldmVydF9mcm9tX2RpZmYoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQkJICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHZvaWQgKmRhdGEpCit7CisJaW50IGksIGFkZF9mbGFncyA9IEFERF9DQUNIRV9PS19UT19BREQgfCBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUgPSBxLT5xdWV1ZVtpXS0+b25lOworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJCWlmICghKG9uZS0+bW9kZSAmJiAhaXNfbnVsbF9vaWQoJm9uZS0+b2lkKSkpIHsKKwkJCXJlbW92ZV9maWxlX2Zyb21faW5kZXgob3B0LT5yZXBvLT5pbmRleCwgb25lLT5wYXRoKTsKKwkJCXByaW50ZihfKCJub3RlOiAlcyBpcyB1bnRyYWNrZWQgbm93LlxuIiksIG9uZS0+cGF0aCk7CisJCX0gZWxzZSB7CisJCQljZSA9IG1ha2VfY2FjaGVfZW50cnkob3B0LT5yZXBvLT5pbmRleCwgb25lLT5tb2RlLAorCQkJCQkgICAgICAmb25lLT5vaWQsIG9uZS0+cGF0aCwgMCwgMCk7CisJCQlpZiAoIWNlKQorCQkJCWRpZShfKCJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIiksCisJCQkJICAgIG9uZS0+cGF0aCk7CisJCQlhZGRfaW5kZXhfZW50cnkob3B0LT5yZXBvLT5pbmRleCwgY2UsIGFkZF9mbGFncyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgcnVuX3JldmVydChzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCSAgICAgIHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpmaWxlcywKKwkJICAgICAgc3RydWN0IGxpc3RfYW5kX2Nob29zZV9vcHRpb25zICpvcHRzKQoreworCWludCByZXMgPSAwLCBmZDsKKwlzaXplX3QgY291bnQsIGksIGo7CisKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgaXNfaW5pdGlhbCA9ICFyZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLCAmb2lkLAorCQkJCQkgICAgIE5VTEwpOworCXN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jazsKKwljb25zdCBjaGFyICoqcGF0aHM7CisJc3RydWN0IHRyZWUgKnRyZWU7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBkaWZmb3B0ID0geyBOVUxMIH07CisKKwlpZiAoZ2V0X21vZGlmaWVkX2ZpbGVzKHMtPnIsIElOREVYX09OTFksIGZpbGVzLCBwcywgTlVMTCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWZpbGVzLT5pdGVtcy5ucikgeworCQlwdXRjaGFyKCdcbicpOworCQlyZXR1cm4gMDsKKwl9CisKKwlvcHRzLT5wcm9tcHQgPSBOXygiUmV2ZXJ0Iik7CisJY291bnQgPSBsaXN0X2FuZF9jaG9vc2UocywgZmlsZXMsIG9wdHMpOworCWlmIChjb3VudCA8PSAwKQorCQlnb3RvIGZpbmlzaF9yZXZlcnQ7CisKKwlmZCA9IHJlcG9faG9sZF9sb2NrZWRfaW5kZXgocy0+ciwgJmluZGV4X2xvY2ssIExPQ0tfUkVQT1JUX09OX0VSUk9SKTsKKwlpZiAoZmQgPCAwKSB7CisJCXJlcyA9IC0xOworCQlnb3RvIGZpbmlzaF9yZXZlcnQ7CisJfQorCisJaWYgKGlzX2luaXRpYWwpCisJCW9pZGNweSgmb2lkLCBzLT5yLT5oYXNoX2FsZ28tPmVtcHR5X3RyZWUpOworCWVsc2UgeworCQl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdCgmb2lkKTsKKwkJaWYgKCF0cmVlKSB7CisJCQlyZXMgPSBlcnJvcihfKCJDb3VsZCBub3QgcGFyc2UgSEVBRF57dHJlZX0iKSk7CisJCQlnb3RvIGZpbmlzaF9yZXZlcnQ7CisJCX0KKwkJb2lkY3B5KCZvaWQsICZ0cmVlLT5vYmplY3Qub2lkKTsKKwl9CisKKwlBTExPQ19BUlJBWShwYXRocywgY291bnQgKyAxKTsKKwlmb3IgKGkgPSBqID0gMDsgaSA8IGZpbGVzLT5pdGVtcy5ucjsgaSsrKQorCQlpZiAoZmlsZXMtPnNlbGVjdGVkW2ldKQorCQkJcGF0aHNbaisrXSA9IGZpbGVzLT5pdGVtcy5pdGVtc1tpXS5zdHJpbmc7CisJcGF0aHNbal0gPSBOVUxMOworCisJcGFyc2VfcGF0aHNwZWMoJmRpZmZvcHQucGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCB8IFBBVEhTUEVDX0xJVEVSQUxfUEFUSCwKKwkJICAgICAgIE5VTEwsIHBhdGhzKTsKKworCWRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX0NBTExCQUNLOworCWRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gcmV2ZXJ0X2Zyb21fZGlmZjsKKwlkaWZmb3B0LmZsYWdzLm92ZXJyaWRlX3N1Ym1vZHVsZV9jb25maWcgPSAxOworCWRpZmZvcHQucmVwbyA9IHMtPnI7CisKKwlpZiAoZG9fZGlmZl9jYWNoZSgmb2lkLCAmZGlmZm9wdCkpCisJCXJlcyA9IC0xOworCWVsc2UgeworCQlkaWZmY29yZV9zdGQoJmRpZmZvcHQpOworCQlkaWZmX2ZsdXNoKCZkaWZmb3B0KTsKKwl9CisJZnJlZShwYXRocyk7CisJY2xlYXJfcGF0aHNwZWMoJmRpZmZvcHQucGF0aHNwZWMpOworCisJaWYgKCFyZXMgJiYgd3JpdGVfbG9ja2VkX2luZGV4KHMtPnItPmluZGV4LCAmaW5kZXhfbG9jaywKKwkJCQkgICAgICAgQ09NTUlUX0xPQ0spIDwgMCkKKwkJcmVzID0gLTE7CisJZWxzZQorCQlyZXMgPSByZXBvX3JlZnJlc2hfYW5kX3dyaXRlX2luZGV4KHMtPnIsIFJFRlJFU0hfUVVJRVQsIDAsIDEsCisJCQkJCQkgICBOVUxMLCBOVUxMLCBOVUxMKTsKKworCWlmICghcmVzKQorCQlwcmludGYoUV8oInJldmVydGVkICVkIHBhdGhcbiIsCisJCQkgICJyZXZlcnRlZCAlZCBwYXRoc1xuIiwgY291bnQpLCAoaW50KWNvdW50KTsKKworZmluaXNoX3JldmVydDoKKwlwdXRjaGFyKCdcbicpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3VudHJhY2tlZF9maWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqZmlsZXMsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcykKK3sKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXIgPSB7IDAgfTsKKwlzaXplX3QgaTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKHJlcG9fcmVhZF9pbmRleChyKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCBpbmRleCIpKTsKKworCXByZWZpeF9pdGVtX2xpc3RfY2xlYXIoZmlsZXMpOworCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKCZkaXIpOworCWFkZF9wYXR0ZXJuX2xpc3QoJmRpciwgRVhDX0NNREwsICItLWV4Y2x1ZGUgb3B0aW9uIik7CisJZmlsbF9kaXJlY3RvcnkoJmRpciwgci0+aW5kZXgsIHBzKTsKKworCWZvciAoaSA9IDA7IGkgPCBkaXIubnI7IGkrKykgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXIuZW50cmllc1tpXTsKKworCQlpZiAoaW5kZXhfbmFtZV9pc19vdGhlcihyLT5pbmRleCwgZW50LT5uYW1lLCBlbnQtPmxlbikpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCXN0cmJ1Zl9hZGQoJmJ1ZiwgZW50LT5uYW1lLCBlbnQtPmxlbik7CisJCQlhZGRfZmlsZV9pdGVtKCZmaWxlcy0+aXRlbXMsIGJ1Zi5idWYpOworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnVuX2FkZF91bnRyYWNrZWQoc3RydWN0IGFkZF9pX3N0YXRlICpzLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLAorCQkgICAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqZmlsZXMsCisJCSAgICAgIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgcHJpbnRfZmlsZV9pdGVtX2RhdGEgKmQgPSBvcHRzLT5saXN0X29wdHMucHJpbnRfaXRlbV9kYXRhOworCWludCByZXMgPSAwLCBmZDsKKwlzaXplX3QgY291bnQsIGk7CisJc3RydWN0IGxvY2tfZmlsZSBpbmRleF9sb2NrOworCisJaWYgKGdldF91bnRyYWNrZWRfZmlsZXMocy0+ciwgZmlsZXMsIHBzKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmICghZmlsZXMtPml0ZW1zLm5yKSB7CisJCXByaW50ZihfKCJObyB1bnRyYWNrZWQgZmlsZXMuXG4iKSk7CisJCWdvdG8gZmluaXNoX2FkZF91bnRyYWNrZWQ7CisJfQorCisJb3B0cy0+cHJvbXB0ID0gTl8oIkFkZCB1bnRyYWNrZWQiKTsKKwlkLT5vbmx5X25hbWVzID0gMTsKKwljb3VudCA9IGxpc3RfYW5kX2Nob29zZShzLCBmaWxlcywgb3B0cyk7CisJZC0+b25seV9uYW1lcyA9IDA7CisJaWYgKGNvdW50IDw9IDApCisJCWdvdG8gZmluaXNoX2FkZF91bnRyYWNrZWQ7CisKKwlmZCA9IHJlcG9faG9sZF9sb2NrZWRfaW5kZXgocy0+ciwgJmluZGV4X2xvY2ssIExPQ0tfUkVQT1JUX09OX0VSUk9SKTsKKwlpZiAoZmQgPCAwKSB7CisJCXJlcyA9IC0xOworCQlnb3RvIGZpbmlzaF9hZGRfdW50cmFja2VkOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBmaWxlcy0+aXRlbXMubnI7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnN0cmluZzsKKwkJaWYgKGZpbGVzLT5zZWxlY3RlZFtpXSAmJgorCQkgICAgYWRkX2ZpbGVfdG9faW5kZXgocy0+ci0+aW5kZXgsIG5hbWUsIDApIDwgMCkgeworCQkJcmVzID0gZXJyb3IoXygiY291bGQgbm90IHN0YWdlICclcyciKSwgbmFtZSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcmVzICYmCisJICAgIHdyaXRlX2xvY2tlZF9pbmRleChzLT5yLT5pbmRleCwgJmluZGV4X2xvY2ssIENPTU1JVF9MT0NLKSA8IDApCisJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCB3cml0ZSBpbmRleCIpKTsKKworCWlmICghcmVzKQorCQlwcmludGYoUV8oImFkZGVkICVkIHBhdGhcbiIsCisJCQkgICJhZGRlZCAlZCBwYXRoc1xuIiwgY291bnQpLCAoaW50KWNvdW50KTsKKworZmluaXNoX2FkZF91bnRyYWNrZWQ6CisJcHV0Y2hhcignXG4nKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHJ1bl9wYXRjaChzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCSAgICAgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmZpbGVzLAorCQkgICAgIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlpbnQgcmVzID0gMDsKKwlzc2l6ZV90IGNvdW50LCBpLCBqOworCXNpemVfdCB1bm1lcmdlZF9jb3VudCA9IDAsIGJpbmFyeV9jb3VudCA9IDA7CisKKwlpZiAoZ2V0X21vZGlmaWVkX2ZpbGVzKHMtPnIsIFdPUktUUkVFX09OTFksIGZpbGVzLCBwcywKKwkJCSAgICAgICAmdW5tZXJnZWRfY291bnQsICZiaW5hcnlfY291bnQpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHVubWVyZ2VkX2NvdW50IHx8IGJpbmFyeV9jb3VudCkgeworCQlmb3IgKGkgPSBqID0gMDsgaSA8IGZpbGVzLT5pdGVtcy5ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgZmlsZV9pdGVtICppdGVtID0gZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnV0aWw7CisKKwkJCWlmIChpdGVtLT5pbmRleC5iaW5hcnkgfHwgaXRlbS0+d29ya3RyZWUuYmluYXJ5KSB7CisJCQkJZnJlZShpdGVtKTsKKwkJCQlmcmVlKGZpbGVzLT5pdGVtcy5pdGVtc1tpXS5zdHJpbmcpOworCQkJfSBlbHNlIGlmIChpdGVtLT5pbmRleC51bm1lcmdlZCB8fAorCQkJCSBpdGVtLT53b3JrdHJlZS51bm1lcmdlZCkgeworCQkJCWNvbG9yX2ZwcmludGZfbG4oc3RkZXJyLCBzLT5lcnJvcl9jb2xvciwKKwkJCQkJCSBfKCJpZ25vcmluZyB1bm1lcmdlZDogJXMiKSwKKwkJCQkJCSBmaWxlcy0+aXRlbXMuaXRlbXNbaV0uc3RyaW5nKTsKKwkJCQlmcmVlKGl0ZW0pOworCQkJCWZyZWUoZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnN0cmluZyk7CisJCQl9IGVsc2UKKwkJCQlmaWxlcy0+aXRlbXMuaXRlbXNbaisrXSA9IGZpbGVzLT5pdGVtcy5pdGVtc1tpXTsKKwkJfQorCQlmaWxlcy0+aXRlbXMubnIgPSBqOworCX0KKworCWlmICghZmlsZXMtPml0ZW1zLm5yKSB7CisJCWlmIChiaW5hcnlfY291bnQpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIpKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsIF8oIk5vIGNoYW5nZXMuXG4iKSk7CisJCXJldHVybiAwOworCX0KKworCW9wdHMtPnByb21wdCA9IE5fKCJQYXRjaCB1cGRhdGUiKTsKKwljb3VudCA9IGxpc3RfYW5kX2Nob29zZShzLCBmaWxlcywgb3B0cyk7CisJaWYgKGNvdW50ID4gMCkgeworCQlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCQlzdHJ1Y3QgcGF0aHNwZWMgcHNfc2VsZWN0ZWQgPSB7IDAgfTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZmlsZXMtPml0ZW1zLm5yOyBpKyspCisJCQlpZiAoZmlsZXMtPnNlbGVjdGVkW2ldKQorCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywKKwkJCQkJCWZpbGVzLT5pdGVtcy5pdGVtc1tpXS5zdHJpbmcpOworCQlwYXJzZV9wYXRoc3BlYygmcHNfc2VsZWN0ZWQsCisJCQkgICAgICAgUEFUSFNQRUNfQUxMX01BR0lDICYgflBBVEhTUEVDX0xJVEVSQUwsCisJCQkgICAgICAgUEFUSFNQRUNfTElURVJBTF9QQVRILCAiIiwgYXJncy5hcmd2KTsKKwkJcmVzID0gcnVuX2FkZF9wKHMtPnIsIEFERF9QX0FERCwgTlVMTCwgJnBzX3NlbGVjdGVkKTsKKwkJYXJndl9hcnJheV9jbGVhcigmYXJncyk7CisJCWNsZWFyX3BhdGhzcGVjKCZwc19zZWxlY3RlZCk7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBydW5fZGlmZihzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCSAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqZmlsZXMsCisJCSAgICBzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgKm9wdHMpCit7CisJaW50IHJlcyA9IDA7CisJc3NpemVfdCBjb3VudCwgaTsKKworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBpc19pbml0aWFsID0gIXJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsICZvaWQsCisJCQkJCSAgICAgTlVMTCk7CisJaWYgKGdldF9tb2RpZmllZF9maWxlcyhzLT5yLCBJTkRFWF9PTkxZLCBmaWxlcywgcHMsIE5VTEwsIE5VTEwpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFmaWxlcy0+aXRlbXMubnIpIHsKKwkJcHV0Y2hhcignXG4nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJb3B0cy0+cHJvbXB0ID0gTl8oIlJldmlldyBkaWZmIik7CisJb3B0cy0+ZmxhZ3MgPSBJTU1FRElBVEU7CisJY291bnQgPSBsaXN0X2FuZF9jaG9vc2UocywgZmlsZXMsIG9wdHMpOworCW9wdHMtPmZsYWdzID0gMDsKKwlpZiAoY291bnQgPiAwKSB7CisJCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwkJYXJndl9hcnJheV9wdXNobCgmYXJncywgImdpdCIsICJkaWZmIiwgIi1wIiwgIi0tY2FjaGVkIiwKKwkJCQkgb2lkX3RvX2hleCghaXNfaW5pdGlhbCA/ICZvaWQgOgorCQkJCQkgICAgcy0+ci0+aGFzaF9hbGdvLT5lbXB0eV90cmVlKSwKKwkJCQkgIi0tIiwgTlVMTCk7CisJCWZvciAoaSA9IDA7IGkgPCBmaWxlcy0+aXRlbXMubnI7IGkrKykKKwkJCWlmIChmaWxlcy0+c2VsZWN0ZWRbaV0pCisJCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLAorCQkJCQkJZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnN0cmluZyk7CisJCXJlcyA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MuYXJndiwgMCk7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCX0KKworCXB1dGNoYXIoJ1xuJyk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBydW5faGVscChzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqdW51c2VkX3BzLAorCQkgICAgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKnVudXNlZF9maWxlcywKKwkJICAgIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqdW51c2VkX29wdHMpCit7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICJzdGF0dXMgICAgICAgIC0gJXMiLAorCQkJIF8oInNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAidXBkYXRlICAgICAgICAtICVzIiwKKwkJCSBfKCJhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICJyZXZlcnQgICAgICAgIC0gJXMiLAorCQkJIF8oInJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAicGF0Y2ggICAgICAgICAtICVzIiwKKwkJCSBfKCJwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHkiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICJkaWZmICAgICAgICAgIC0gJXMiLAorCQkJIF8oInZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4IikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiYWRkIHVudHJhY2tlZCAtICVzIiwKKwkJCSBfKCJhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2hvb3NlX3Byb21wdF9oZWxwKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcykKK3sKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgIiVzIiwKKwkJCSBfKCJQcm9tcHQgaGVscDoiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICIxICAgICAgICAgIC0gJXMiLAorCQkJIF8oInNlbGVjdCBhIHNpbmdsZSBpdGVtIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiMy01ICAgICAgICAtICVzIiwKKwkJCSBfKCJzZWxlY3QgYSByYW5nZSBvZiBpdGVtcyIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgIjItMyw2LTkgICAgLSAlcyIsCisJCQkgXygic2VsZWN0IG11bHRpcGxlIHJhbmdlcyIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgImZvbyAgICAgICAgLSAlcyIsCisJCQkgXygic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgIi0uLi4gICAgICAgLSAlcyIsCisJCQkgXygidW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiKiAgICAgICAgICAtICVzIiwKKwkJCSBfKCJjaG9vc2UgYWxsIGl0ZW1zIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiICAgICAgICAgICAtICVzIiwKKwkJCSBfKCIoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciKSk7Cit9CisKK3R5cGVkZWYgaW50ICgqY29tbWFuZF90KShzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCQkgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmZpbGVzLAorCQkJIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqb3B0cyk7CisKK3N0cnVjdCBjb21tYW5kX2l0ZW0geworCXNpemVfdCBwcmVmaXhfbGVuZ3RoOworCWNvbW1hbmRfdCBjb21tYW5kOworfTsKKworc3RydWN0IHByaW50X2NvbW1hbmRfaXRlbV9kYXRhIHsKKwljb25zdCBjaGFyICpjb2xvciwgKnJlc2V0OworfTsKKworc3RhdGljIHZvaWQgcHJpbnRfY29tbWFuZF9pdGVtKGludCBpLCBpbnQgc2VsZWN0ZWQsCisJCQkgICAgICAgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sCisJCQkgICAgICAgdm9pZCAqcHJpbnRfY29tbWFuZF9pdGVtX2RhdGEpCit7CisJc3RydWN0IHByaW50X2NvbW1hbmRfaXRlbV9kYXRhICpkID0gcHJpbnRfY29tbWFuZF9pdGVtX2RhdGE7CisJc3RydWN0IGNvbW1hbmRfaXRlbSAqdXRpbCA9IGl0ZW0tPnV0aWw7CisKKwlpZiAoIXV0aWwtPnByZWZpeF9sZW5ndGggfHwKKwkgICAgIWlzX3ZhbGlkX3ByZWZpeChpdGVtLT5zdHJpbmcsIHV0aWwtPnByZWZpeF9sZW5ndGgpKQorCQlwcmludGYoIiAlMmQ6ICVzIiwgaSArIDEsIGl0ZW0tPnN0cmluZyk7CisJZWxzZQorCQlwcmludGYoIiAlMmQ6ICVzJS4qcyVzJXMiLCBpICsgMSwKKwkJICAgICAgIGQtPmNvbG9yLCAoaW50KXV0aWwtPnByZWZpeF9sZW5ndGgsIGl0ZW0tPnN0cmluZywKKwkJICAgICAgIGQtPnJlc2V0LCBpdGVtLT5zdHJpbmcgKyB1dGlsLT5wcmVmaXhfbGVuZ3RoKTsKK30KKworc3RhdGljIHZvaWQgY29tbWFuZF9wcm9tcHRfaGVscChzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMpCit7CisJY29uc3QgY2hhciAqaGVscF9jb2xvciA9IHMtPmhlbHBfY29sb3I7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIGhlbHBfY29sb3IsICIlcyIsIF8oIlByb21wdCBoZWxwOiIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgaGVscF9jb2xvciwgIjEgICAgICAgICAgLSAlcyIsCisJCQkgXygic2VsZWN0IGEgbnVtYmVyZWQgaXRlbSIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgaGVscF9jb2xvciwgImZvbyAgICAgICAgLSAlcyIsCisJCQkgXygic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgaGVscF9jb2xvciwgIiAgICAgICAgICAgLSAlcyIsCisJCQkgXygiKGVtcHR5KSBzZWxlY3Qgbm90aGluZyIpKTsKK30KKworaW50IHJ1bl9hZGRfaShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcykKK3sKKwlzdHJ1Y3QgYWRkX2lfc3RhdGUgcyA9IHsgTlVMTCB9OworCXN0cnVjdCBwcmludF9jb21tYW5kX2l0ZW1fZGF0YSBkYXRhID0geyAiWyIsICJdIiB9OworCXN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyBtYWluX2xvb3Bfb3B0cyA9IHsKKwkJeyA0LCBOXygiKioqIENvbW1hbmRzICoqKiIpLCBwcmludF9jb21tYW5kX2l0ZW0sICZkYXRhIH0sCisJCU5fKCJXaGF0IG5vdyIpLCBTSU5HTEVUT04gfCBJTU1FRElBVEUsIGNvbW1hbmRfcHJvbXB0X2hlbHAKKwl9OworCXN0cnVjdCB7CisJCWNvbnN0IGNoYXIgKnN0cmluZzsKKwkJY29tbWFuZF90IGNvbW1hbmQ7CisJfSBjb21tYW5kX2xpc3RbXSA9IHsKKwkJeyAic3RhdHVzIiwgcnVuX3N0YXR1cyB9LAorCQl7ICJ1cGRhdGUiLCBydW5fdXBkYXRlIH0sCisJCXsgInJldmVydCIsIHJ1bl9yZXZlcnQgfSwKKwkJeyAiYWRkIHVudHJhY2tlZCIsIHJ1bl9hZGRfdW50cmFja2VkIH0sCisJCXsgInBhdGNoIiwgcnVuX3BhdGNoIH0sCisJCXsgImRpZmYiLCBydW5fZGlmZiB9LAorCQl7ICJxdWl0IiwgTlVMTCB9LAorCQl7ICJoZWxwIiwgcnVuX2hlbHAgfSwKKwl9OworCXN0cnVjdCBwcmVmaXhfaXRlbV9saXN0IGNvbW1hbmRzID0gUFJFRklYX0lURU1fTElTVF9JTklUOworCisJc3RydWN0IHByaW50X2ZpbGVfaXRlbV9kYXRhIHByaW50X2ZpbGVfaXRlbV9kYXRhID0geworCQkiJTEycyAlMTJzICVzIiwgTlVMTCwgTlVMTCwKKwkJU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQKKwl9OworCXN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyBvcHRzID0geworCQl7IDAsIE5VTEwsIHByaW50X2ZpbGVfaXRlbSwgJnByaW50X2ZpbGVfaXRlbV9kYXRhIH0sCisJCU5VTEwsIDAsIGNob29zZV9wcm9tcHRfaGVscAorCX07CisJc3RydWN0IHN0cmJ1ZiBoZWFkZXIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCBmaWxlcyA9IFBSRUZJWF9JVEVNX0xJU1RfSU5JVDsKKwlzc2l6ZV90IGk7CisJaW50IHJlcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tYW5kX2xpc3QpOyBpKyspIHsKKwkJc3RydWN0IGNvbW1hbmRfaXRlbSAqdXRpbCA9IHhjYWxsb2Moc2l6ZW9mKCp1dGlsKSwgMSk7CisJCXV0aWwtPmNvbW1hbmQgPSBjb21tYW5kX2xpc3RbaV0uY29tbWFuZDsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZjb21tYW5kcy5pdGVtcywgY29tbWFuZF9saXN0W2ldLnN0cmluZykKKwkJCS0+dXRpbCA9IHV0aWw7CisJfQorCisJaW5pdF9hZGRfaV9zdGF0ZSgmcywgcik7CisKKwkvKgorCSAqIFdoZW4gY29sb3Igd2FzIGFza2VkIGZvciwgdXNlIHRoZSBwcm9tcHQgY29sb3IgZm9yCisJICogaGlnaGxpZ2h0aW5nLCBvdGhlcndpc2UgdXNlIHNxdWFyZSBicmFja2V0cy4KKwkgKi8KKwlpZiAocy51c2VfY29sb3IpIHsKKwkJZGF0YS5jb2xvciA9IHMucHJvbXB0X2NvbG9yOworCQlkYXRhLnJlc2V0ID0gcy5yZXNldF9jb2xvcjsKKwl9CisJcHJpbnRfZmlsZV9pdGVtX2RhdGEuY29sb3IgPSBkYXRhLmNvbG9yOworCXByaW50X2ZpbGVfaXRlbV9kYXRhLnJlc2V0ID0gZGF0YS5yZXNldDsKKworCXN0cmJ1Zl9hZGRzdHIoJmhlYWRlciwgIiAgICAgICIpOworCXN0cmJ1Zl9hZGRmKCZoZWFkZXIsIHByaW50X2ZpbGVfaXRlbV9kYXRhLm1vZGlmaWVkX2ZtdCwKKwkJICAgIF8oInN0YWdlZCIpLCBfKCJ1bnN0YWdlZCIpLCBfKCJwYXRoIikpOworCW9wdHMubGlzdF9vcHRzLmhlYWRlciA9IGhlYWRlci5idWY7CisKKwlpZiAoZGlzY2FyZF9pbmRleChyLT5pbmRleCkgPCAwIHx8CisJICAgIHJlcG9fcmVhZF9pbmRleChyKSA8IDAgfHwKKwkgICAgcmVwb19yZWZyZXNoX2FuZF93cml0ZV9pbmRleChyLCBSRUZSRVNIX1FVSUVULCAwLCAxLAorCQkJCQkgTlVMTCwgTlVMTCwgTlVMTCkgPCAwKQorCQl3YXJuaW5nKF8oImNvdWxkIG5vdCByZWZyZXNoIGluZGV4IikpOworCisJcmVzID0gcnVuX3N0YXR1cygmcywgcHMsICZmaWxlcywgJm9wdHMpOworCisJZm9yICg7OykgeworCQlzdHJ1Y3QgY29tbWFuZF9pdGVtICp1dGlsOworCisJCWkgPSBsaXN0X2FuZF9jaG9vc2UoJnMsICZjb21tYW5kcywgJm1haW5fbG9vcF9vcHRzKTsKKwkJaWYgKGkgPCAwIHx8IGkgPj0gY29tbWFuZHMuaXRlbXMubnIpCisJCQl1dGlsID0gTlVMTDsKKwkJZWxzZQorCQkJdXRpbCA9IGNvbW1hbmRzLml0ZW1zLml0ZW1zW2ldLnV0aWw7CisKKwkJaWYgKGkgPT0gTElTVF9BTkRfQ0hPT1NFX1FVSVQgfHwgKHV0aWwgJiYgIXV0aWwtPmNvbW1hbmQpKSB7CisJCQlwcmludGYoXygiQnllLlxuIikpOworCQkJcmVzID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHV0aWwpCisJCQlyZXMgPSB1dGlsLT5jb21tYW5kKCZzLCBwcywgJmZpbGVzLCAmb3B0cyk7CisJfQorCisJcHJlZml4X2l0ZW1fbGlzdF9jbGVhcigmZmlsZXMpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmludF9maWxlX2l0ZW1fZGF0YS5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmludF9maWxlX2l0ZW1fZGF0YS5uYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJpbnRfZmlsZV9pdGVtX2RhdGEuaW5kZXgpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmludF9maWxlX2l0ZW1fZGF0YS53b3JrdHJlZSk7CisJc3RyYnVmX3JlbGVhc2UoJmhlYWRlcik7CisJcHJlZml4X2l0ZW1fbGlzdF9jbGVhcigmY29tbWFuZHMpOworCWNsZWFyX2FkZF9pX3N0YXRlKCZzKTsKKworCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9hZGQtaW50ZXJhY3RpdmUuaCBiL2FkZC1pbnRlcmFjdGl2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5M2YxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hZGQtaW50ZXJhY3RpdmUuaApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmIEFERF9JTlRFUkFDVElWRV9ICisjZGVmaW5lIEFERF9JTlRFUkFDVElWRV9ICisKKyNpbmNsdWRlICJjb2xvci5oIgorCitzdHJ1Y3QgYWRkX2lfc3RhdGUgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyOworCWludCB1c2VfY29sb3I7CisJY2hhciBoZWFkZXJfY29sb3JbQ09MT1JfTUFYTEVOXTsKKwljaGFyIGhlbHBfY29sb3JbQ09MT1JfTUFYTEVOXTsKKwljaGFyIHByb21wdF9jb2xvcltDT0xPUl9NQVhMRU5dOworCWNoYXIgZXJyb3JfY29sb3JbQ09MT1JfTUFYTEVOXTsKKwljaGFyIHJlc2V0X2NvbG9yW0NPTE9SX01BWExFTl07CisJY2hhciBmcmFnaW5mb19jb2xvcltDT0xPUl9NQVhMRU5dOworCWNoYXIgY29udGV4dF9jb2xvcltDT0xPUl9NQVhMRU5dOworCWNoYXIgZmlsZV9vbGRfY29sb3JbQ09MT1JfTUFYTEVOXTsKKwljaGFyIGZpbGVfbmV3X2NvbG9yW0NPTE9SX01BWExFTl07CisKKwlpbnQgdXNlX3NpbmdsZV9rZXk7CisJY2hhciAqaW50ZXJhY3RpdmVfZGlmZl9maWx0ZXIsICppbnRlcmFjdGl2ZV9kaWZmX2FsZ29yaXRobTsKK307CisKK3ZvaWQgaW5pdF9hZGRfaV9zdGF0ZShzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKK3ZvaWQgY2xlYXJfYWRkX2lfc3RhdGUoc3RydWN0IGFkZF9pX3N0YXRlICpzKTsKKworc3RydWN0IHJlcG9zaXRvcnk7CitzdHJ1Y3QgcGF0aHNwZWM7CitpbnQgcnVuX2FkZF9pKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzKTsKKworZW51bSBhZGRfcF9tb2RlIHsKKwlBRERfUF9BREQsCisJQUREX1BfU1RBU0gsCisJQUREX1BfUkVTRVQsCisJQUREX1BfQ0hFQ0tPVVQsCisJQUREX1BfV09SS1RSRUUsCit9OworCitpbnQgcnVuX2FkZF9wKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBlbnVtIGFkZF9wX21vZGUgbW9kZSwKKwkgICAgICBjb25zdCBjaGFyICpyZXZpc2lvbiwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWRkLXBhdGNoLmMgYi9hZGQtcGF0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGJmZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvYWRkLXBhdGNoLmMKQEAgLTAsMCArMSwxNjgzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJhZGQtaW50ZXJhY3RpdmUuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImNvbXBhdC90ZXJtaW5hbC5oIgorI2luY2x1ZGUgInByb21wdC5oIgorCitlbnVtIHByb21wdF9tb2RlX3R5cGUgeworCVBST01QVF9NT0RFX0NIQU5HRSA9IDAsIFBST01QVF9ERUxFVElPTiwgUFJPTVBUX0hVTkssCisJUFJPTVBUX01PREVfTUFYLCAvKiBtdXN0IGJlIGxhc3QgKi8KK307CisKK3N0cnVjdCBwYXRjaF9tb2RlIHsKKwkvKgorCSAqIFRoZSBtYWdpYyBjb25zdGFudCA0IGlzIGNob3NlbiBzdWNoIHRoYXQgYWxsIHBhdGNoIG1vZGVzCisJICogcHJvdmlkZSBlbm91Z2ggc3BhY2UgZm9yIHRocmVlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgZm9sbG93ZWQgYnkgYQorCSAqIHRyYWlsaW5nIGBOVUxMYC4KKwkgKi8KKwljb25zdCBjaGFyICpkaWZmX2NtZFs0XSwgKmFwcGx5X2FyZ3NbNF0sICphcHBseV9jaGVja19hcmdzWzRdOworCXVuc2lnbmVkIGlzX3JldmVyc2U6MSwgaW5kZXhfb25seToxLCBhcHBseV9mb3JfY2hlY2tvdXQ6MTsKKwljb25zdCBjaGFyICpwcm9tcHRfbW9kZVtQUk9NUFRfTU9ERV9NQVhdOworCWNvbnN0IGNoYXIgKmVkaXRfaHVua19oaW50LCAqaGVscF9wYXRjaF90ZXh0OworfTsKKworc3RhdGljIHN0cnVjdCBwYXRjaF9tb2RlIHBhdGNoX21vZGVfYWRkID0geworCS5kaWZmX2NtZCA9IHsgImRpZmYtZmlsZXMiLCBOVUxMIH0sCisJLmFwcGx5X2FyZ3MgPSB7ICItLWNhY2hlZCIsIE5VTEwgfSwKKwkuYXBwbHlfY2hlY2tfYXJncyA9IHsgIi0tY2FjaGVkIiwgTlVMTCB9LAorCS5wcm9tcHRfbW9kZSA9IHsKKwkJTl8oIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJTdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlOXygiU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIikKKwl9LAorCS5lZGl0X2h1bmtfaGludCA9IE5fKCJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgIgorCQkJICAgICAid2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yIHN0YWdpbmcuIiksCisJLmhlbHBfcGF0Y2hfdGV4dCA9CisJCU5fKCJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisJCSAgICJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorCQkgICAicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgIgorCQkJIm9uZXNcbiIKKwkJICAgImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorCQkgICAiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiAiCisJCQkidGhlIGZpbGVcbiIpCit9OworCitzdGF0aWMgc3RydWN0IHBhdGNoX21vZGUgcGF0Y2hfbW9kZV9zdGFzaCA9IHsKKwkuZGlmZl9jbWQgPSB7ICJkaWZmLWluZGV4IiwgIkhFQUQiLCBOVUxMIH0sCisJLmFwcGx5X2FyZ3MgPSB7ICItLWNhY2hlZCIsIE5VTEwgfSwKKwkuYXBwbHlfY2hlY2tfYXJncyA9IHsgIi0tY2FjaGVkIiwgTlVMTCB9LAorCS5wcm9tcHRfbW9kZSA9IHsKKwkJTl8oIlN0YXNoIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJTdGFzaCBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlOXygiU3Rhc2ggdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIiksCisJfSwKKwkuZWRpdF9odW5rX2hpbnQgPSBOXygiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rICIKKwkJCSAgICAgIndpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciBzdGFzaGluZy4iKSwKKwkuaGVscF9wYXRjaF90ZXh0ID0KKwkJTl8oInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKwkJICAgIm4gLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rXG4iCisJCSAgICJxIC0gcXVpdDsgZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyAiCisJCQkib25lc1xuIgorCQkgICAiYSAtIHN0YXNoIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisJCSAgICJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluICIKKwkJCSJ0aGUgZmlsZVxuIiksCit9OworCitzdGF0aWMgc3RydWN0IHBhdGNoX21vZGUgcGF0Y2hfbW9kZV9yZXNldF9oZWFkID0geworCS5kaWZmX2NtZCA9IHsgImRpZmYtaW5kZXgiLCAiLS1jYWNoZWQiLCBOVUxMIH0sCisJLmFwcGx5X2FyZ3MgPSB7ICItUiIsICItLWNhY2hlZCIsIE5VTEwgfSwKKwkuYXBwbHlfY2hlY2tfYXJncyA9IHsgIi1SIiwgIi0tY2FjaGVkIiwgTlVMTCB9LAorCS5pc19yZXZlcnNlID0gMSwKKwkuaW5kZXhfb25seSA9IDEsCisJLnByb21wdF9tb2RlID0geworCQlOXygiVW5zdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlOXygiVW5zdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlOXygiVW5zdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwl9LAorCS5lZGl0X2h1bmtfaGludCA9IE5fKCJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgIgorCQkJICAgICAid2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yIHVuc3RhZ2luZy4iKSwKKwkuaGVscF9wYXRjaF90ZXh0ID0KKwkJTl8oInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorCQkgICAibiAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVua1xuIgorCQkgICAicSAtIHF1aXQ7IGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyAiCisJCQkib25lc1xuIgorCQkgICAiYSAtIHVuc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKwkJICAgImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiAiCisJCQkidGhlIGZpbGVcbiIpLAorfTsKKworc3RhdGljIHN0cnVjdCBwYXRjaF9tb2RlIHBhdGNoX21vZGVfcmVzZXRfbm90aGVhZCA9IHsKKwkuZGlmZl9jbWQgPSB7ICJkaWZmLWluZGV4IiwgIi1SIiwgIi0tY2FjaGVkIiwgTlVMTCB9LAorCS5hcHBseV9hcmdzID0geyAiLS1jYWNoZWQiLCBOVUxMIH0sCisJLmFwcGx5X2NoZWNrX2FyZ3MgPSB7ICItLWNhY2hlZCIsIE5VTEwgfSwKKwkuaW5kZXhfb25seSA9IDEsCisJLnByb21wdF9tb2RlID0geworCQlOXygiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJTl8oIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiKSwKKwl9LAorCS5lZGl0X2h1bmtfaGludCA9IE5fKCJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgIgorCQkJICAgICAid2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yIGFwcGx5aW5nLiIpLAorCS5oZWxwX3BhdGNoX3RleHQgPQorCQlOXygieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorCQkgICAibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKwkJICAgInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nICIKKwkJCSJvbmVzXG4iCisJCSAgICJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKwkJICAgImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gIgorCQkJInRoZSBmaWxlXG4iKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGF0Y2hfbW9kZSBwYXRjaF9tb2RlX2NoZWNrb3V0X2luZGV4ID0geworCS5kaWZmX2NtZCA9IHsgImRpZmYtZmlsZXMiLCBOVUxMIH0sCisJLmFwcGx5X2FyZ3MgPSB7ICItUiIsIE5VTEwgfSwKKwkuYXBwbHlfY2hlY2tfYXJncyA9IHsgIi1SIiwgTlVMTCB9LAorCS5pc19yZXZlcnNlID0gMSwKKwkucHJvbXB0X21vZGUgPSB7CisJCU5fKCJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJTl8oIkRpc2NhcmQgZGVsZXRpb24gZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlOXygiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCX0sCisJLmVkaXRfaHVua19oaW50ID0gTl8oIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayAiCisJCQkgICAgICJ3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgZGlzY2FyZGluZy4iKSwKKwkuaGVscF9wYXRjaF90ZXh0ID0KKwkJTl8oInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisJCSAgICJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKwkJICAgInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgIgorCQkJIm9uZXNcbiIKKwkJICAgImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisJCSAgICJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gIgorCQkJInRoZSBmaWxlXG4iKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGF0Y2hfbW9kZSBwYXRjaF9tb2RlX2NoZWNrb3V0X2hlYWQgPSB7CisJLmRpZmZfY21kID0geyAiZGlmZi1pbmRleCIsIE5VTEwgfSwKKwkuYXBwbHlfZm9yX2NoZWNrb3V0ID0gMSwKKwkuYXBwbHlfY2hlY2tfYXJncyA9IHsgIi1SIiwgTlVMTCB9LAorCS5pc19yZXZlcnNlID0gMSwKKwkucHJvbXB0X21vZGUgPSB7CisJCU5fKCJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJEaXNjYXJkIGRlbGV0aW9uIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCX0sCisJLmVkaXRfaHVua19oaW50ID0gTl8oIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayAiCisJCQkgICAgICJ3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgZGlzY2FyZGluZy4iKSwKKwkuaGVscF9wYXRjaF90ZXh0ID0KKwkJTl8oInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorCQkgICAibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorCQkgICAicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyAiCisJCQkib25lc1xuIgorCQkgICAiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKwkJICAgImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiAiCisJCQkidGhlIGZpbGVcbiIpLAorfTsKKworc3RhdGljIHN0cnVjdCBwYXRjaF9tb2RlIHBhdGNoX21vZGVfY2hlY2tvdXRfbm90aGVhZCA9IHsKKwkuZGlmZl9jbWQgPSB7ICJkaWZmLWluZGV4IiwgIi1SIiwgTlVMTCB9LAorCS5hcHBseV9mb3JfY2hlY2tvdXQgPSAxLAorCS5hcHBseV9jaGVja19hcmdzID0geyBOVUxMIH0sCisJLnByb21wdF9tb2RlID0geworCQlOXygiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJTl8oIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwl9LAorCS5lZGl0X2h1bmtfaGludCA9IE5fKCJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgIgorCQkJICAgICAid2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yIGFwcGx5aW5nLiIpLAorCS5oZWxwX3BhdGNoX3RleHQgPQorCQlOXygieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKwkJICAgIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorCQkgICAicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgIgorCQkJIm9uZXNcbiIKKwkJICAgImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorCQkgICAiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiAiCisJCQkidGhlIGZpbGVcbiIpLAorfTsKKworc3RhdGljIHN0cnVjdCBwYXRjaF9tb2RlIHBhdGNoX21vZGVfd29ya3RyZWVfaGVhZCA9IHsKKwkuZGlmZl9jbWQgPSB7ICJkaWZmLWluZGV4IiwgTlVMTCB9LAorCS5hcHBseV9hcmdzID0geyAiLVIiLCBOVUxMIH0sCisJLmFwcGx5X2NoZWNrX2FyZ3MgPSB7ICItUiIsIE5VTEwgfSwKKwkuaXNfcmV2ZXJzZSA9IDEsCisJLnByb21wdF9tb2RlID0geworCQlOXygiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlOXygiRGlzY2FyZCBkZWxldGlvbiBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlOXygiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwl9LAorCS5lZGl0X2h1bmtfaGludCA9IE5fKCJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgIgorCQkJICAgICAid2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yIGRpc2NhcmRpbmcuIiksCisJLmhlbHBfcGF0Y2hfdGV4dCA9CisJCU5fKCJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorCQkgICAibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisJCSAgICJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nICIKKwkJCSJvbmVzXG4iCisJCSAgICJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorCQkgICAiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluICIKKwkJCSJ0aGUgZmlsZVxuIiksCit9OworCitzdGF0aWMgc3RydWN0IHBhdGNoX21vZGUgcGF0Y2hfbW9kZV93b3JrdHJlZV9ub3RoZWFkID0geworCS5kaWZmX2NtZCA9IHsgImRpZmYtaW5kZXgiLCAiLVIiLCBOVUxMIH0sCisJLmFwcGx5X2FyZ3MgPSB7IE5VTEwgfSwKKwkuYXBwbHlfY2hlY2tfYXJncyA9IHsgTlVMTCB9LAorCS5wcm9tcHRfbW9kZSA9IHsKKwkJTl8oIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlOXygiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJfSwKKwkuZWRpdF9odW5rX2hpbnQgPSBOXygiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rICIKKwkJCSAgICAgIndpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciBhcHBseWluZy4iKSwKKwkuaGVscF9wYXRjaF90ZXh0ID0KKwkJTl8oInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKwkJICAgIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisJCSAgICJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyAiCisJCQkib25lc1xuIgorCQkgICAiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisJCSAgICJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluICIKKwkJCSJ0aGUgZmlsZVxuIiksCit9OworCitzdHJ1Y3QgaHVua19oZWFkZXIgeworCXVuc2lnbmVkIGxvbmcgb2xkX29mZnNldCwgb2xkX2NvdW50LCBuZXdfb2Zmc2V0LCBuZXdfY291bnQ7CisJLyoKKwkgKiBTdGFydC9lbmQgb2Zmc2V0cyB0byB0aGUgZXh0cmEgdGV4dCBhZnRlciB0aGUgc2Vjb25kIGBAQGAgaW4gdGhlCisJICogaHVuayBoZWFkZXIsIGUuZy4gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS4gVGhpcyBpcyBleHBlY3RlZCB0bworCSAqIGluY2x1ZGUgdGhlIG5ld2xpbmUuCisJICovCisJc2l6ZV90IGV4dHJhX3N0YXJ0LCBleHRyYV9lbmQsIGNvbG9yZWRfZXh0cmFfc3RhcnQsIGNvbG9yZWRfZXh0cmFfZW5kOworfTsKKworc3RydWN0IGh1bmsgeworCXNpemVfdCBzdGFydCwgZW5kLCBjb2xvcmVkX3N0YXJ0LCBjb2xvcmVkX2VuZCwgc3BsaXR0YWJsZV9pbnRvOworCXNzaXplX3QgZGVsdGE7CisJZW51bSB7IFVOREVDSURFRF9IVU5LID0gMCwgU0tJUF9IVU5LLCBVU0VfSFVOSyB9IHVzZTsKKwlzdHJ1Y3QgaHVua19oZWFkZXIgaGVhZGVyOworfTsKKworc3RydWN0IGFkZF9wX3N0YXRlIHsKKwlzdHJ1Y3QgYWRkX2lfc3RhdGUgczsKKwlzdHJ1Y3Qgc3RyYnVmIGFuc3dlciwgYnVmOworCisJLyogcGFyc2VkIGRpZmYgKi8KKwlzdHJ1Y3Qgc3RyYnVmIHBsYWluLCBjb2xvcmVkOworCXN0cnVjdCBmaWxlX2RpZmYgeworCQlzdHJ1Y3QgaHVuayBoZWFkOworCQlzdHJ1Y3QgaHVuayAqaHVuazsKKwkJc2l6ZV90IGh1bmtfbnIsIGh1bmtfYWxsb2M7CisJCXVuc2lnbmVkIGRlbGV0ZWQ6MSwgbW9kZV9jaGFuZ2U6MSxiaW5hcnk6MTsKKwl9ICpmaWxlX2RpZmY7CisJc2l6ZV90IGZpbGVfZGlmZl9ucjsKKworCS8qIHBhdGNoIG1vZGUgKi8KKwlzdHJ1Y3QgcGF0Y2hfbW9kZSAqbW9kZTsKKwljb25zdCBjaGFyICpyZXZpc2lvbjsKK307CisKK3N0YXRpYyB2b2lkIGVycihzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZnB1dHMocy0+cy5lcnJvcl9jb2xvciwgc3RkZXJyKTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXJncyk7CisJZnB1dHMocy0+cy5yZXNldF9jb2xvciwgc3RkZXJyKTsKKwlmcHV0YygnXG4nLCBzdGRlcnIpOworCXZhX2VuZChhcmdzKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfY2hpbGRfcHJvY2VzcyhzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsCisJCQkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNwLCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwljb25zdCBjaGFyICphcmc7CisKKwl2YV9zdGFydChhcCwgY3ApOworCXdoaWxlICgoYXJnID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyICopKSkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC0+YXJncywgYXJnKTsKKwl2YV9lbmQoYXApOworCisJY3AtPmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLT5lbnZfYXJyYXksCisJCQkgSU5ERVhfRU5WSVJPTk1FTlQgIj0lcyIsIHMtPnMuci0+aW5kZXhfZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfcmFuZ2UoY29uc3QgY2hhciAqKnAsCisJCSAgICAgICB1bnNpZ25lZCBsb25nICpvZmZzZXQsIHVuc2lnbmVkIGxvbmcgKmNvdW50KQoreworCWNoYXIgKnBlbmQ7CisKKwkqb2Zmc2V0ID0gc3RydG91bCgqcCwgJnBlbmQsIDEwKTsKKwlpZiAocGVuZCA9PSAqcCkKKwkJcmV0dXJuIC0xOworCWlmICgqcGVuZCAhPSAnLCcpIHsKKwkJKmNvdW50ID0gMTsKKwkJKnAgPSBwZW5kOworCQlyZXR1cm4gMDsKKwl9CisJKmNvdW50ID0gc3RydG91bChwZW5kICsgMSwgKGNoYXIgKiopcCwgMTApOworCXJldHVybiAqcCA9PSBwZW5kICsgMSA/IC0xIDogMDsKK30KKworc3RhdGljIGludCBwYXJzZV9odW5rX2hlYWRlcihzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIHN0cnVjdCBodW5rICpodW5rKQoreworCXN0cnVjdCBodW5rX2hlYWRlciAqaGVhZGVyID0gJmh1bmstPmhlYWRlcjsKKwljb25zdCBjaGFyICpsaW5lID0gcy0+cGxhaW4uYnVmICsgaHVuay0+c3RhcnQsICpwID0gbGluZTsKKwljaGFyICplb2wgPSBtZW1jaHIocCwgJ1xuJywgcy0+cGxhaW4ubGVuIC0gaHVuay0+c3RhcnQpOworCisJaWYgKCFlb2wpCisJCWVvbCA9IHMtPnBsYWluLmJ1ZiArIHMtPnBsYWluLmxlbjsKKworCWlmICghc2tpcF9wcmVmaXgocCwgIkBAIC0iLCAmcCkgfHwKKwkgICAgcGFyc2VfcmFuZ2UoJnAsICZoZWFkZXItPm9sZF9vZmZzZXQsICZoZWFkZXItPm9sZF9jb3VudCkgPCAwIHx8CisJICAgICFza2lwX3ByZWZpeChwLCAiICsiLCAmcCkgfHwKKwkgICAgcGFyc2VfcmFuZ2UoJnAsICZoZWFkZXItPm5ld19vZmZzZXQsICZoZWFkZXItPm5ld19jb3VudCkgPCAwIHx8CisJICAgICFza2lwX3ByZWZpeChwLCAiIEBAIiwgJnApKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyICclLipzJyIpLAorCQkJICAgICAoaW50KShlb2wgLSBsaW5lKSwgbGluZSk7CisKKwlodW5rLT5zdGFydCA9IGVvbCAtIHMtPnBsYWluLmJ1ZiArICgqZW9sID09ICdcbicpOworCWhlYWRlci0+ZXh0cmFfc3RhcnQgPSBwIC0gcy0+cGxhaW4uYnVmOworCWhlYWRlci0+ZXh0cmFfZW5kID0gaHVuay0+c3RhcnQ7CisKKwlpZiAoIXMtPmNvbG9yZWQubGVuKSB7CisJCWhlYWRlci0+Y29sb3JlZF9leHRyYV9zdGFydCA9IGhlYWRlci0+Y29sb3JlZF9leHRyYV9lbmQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBOb3cgZmluZCB0aGUgZXh0cmEgdGV4dCBpbiB0aGUgY29sb3JlZCBkaWZmICovCisJbGluZSA9IHMtPmNvbG9yZWQuYnVmICsgaHVuay0+Y29sb3JlZF9zdGFydDsKKwllb2wgPSBtZW1jaHIobGluZSwgJ1xuJywgcy0+Y29sb3JlZC5sZW4gLSBodW5rLT5jb2xvcmVkX3N0YXJ0KTsKKwlpZiAoIWVvbCkKKwkJZW9sID0gcy0+Y29sb3JlZC5idWYgKyBzLT5jb2xvcmVkLmxlbjsKKwlwID0gbWVtbWVtKGxpbmUsIGVvbCAtIGxpbmUsICJAQCAtIiwgNCk7CisJaWYgKCFwKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgaHVuayBoZWFkZXIgJyUuKnMnIiksCisJCQkgICAgIChpbnQpKGVvbCAtIGxpbmUpLCBsaW5lKTsKKwlwID0gbWVtbWVtKHAgKyA0LCBlb2wgLSBwIC0gNCwgIiBAQCIsIDMpOworCWlmICghcCkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGh1bmsgaGVhZGVyICclLipzJyIpLAorCQkJICAgICAoaW50KShlb2wgLSBsaW5lKSwgbGluZSk7CisJaHVuay0+Y29sb3JlZF9zdGFydCA9IGVvbCAtIHMtPmNvbG9yZWQuYnVmICsgKCplb2wgPT0gJ1xuJyk7CisJaGVhZGVyLT5jb2xvcmVkX2V4dHJhX3N0YXJ0ID0gcCArIDMgLSBzLT5jb2xvcmVkLmJ1ZjsKKwloZWFkZXItPmNvbG9yZWRfZXh0cmFfZW5kID0gaHVuay0+Y29sb3JlZF9zdGFydDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzX29jdGFsKGNvbnN0IGNoYXIgKnAsIHNpemVfdCBsZW4pCit7CisJaWYgKCFsZW4pCisJCXJldHVybiAwOworCisJd2hpbGUgKGxlbi0tKQorCQlpZiAoKnAgPCAnMCcgfHwgKihwKyspID4gJzcnKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZGlmZihzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwljb25zdCBjaGFyICpkaWZmX2FsZ29yaXRobSA9IHMtPnMuaW50ZXJhY3RpdmVfZGlmZl9hbGdvcml0aG07CisJc3RydWN0IHN0cmJ1ZiAqcGxhaW4gPSAmcy0+cGxhaW4sICpjb2xvcmVkID0gTlVMTDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljaGFyICpwLCAqcGVuZCwgKmNvbG9yZWRfcCA9IE5VTEwsICpjb2xvcmVkX3BlbmQgPSBOVUxMLCBtYXJrZXIgPSAnXDAnOworCXNpemVfdCBmaWxlX2RpZmZfYWxsb2MgPSAwLCBpLCBjb2xvcl9hcmdfaW5kZXg7CisJc3RydWN0IGZpbGVfZGlmZiAqZmlsZV9kaWZmID0gTlVMTDsKKwlzdHJ1Y3QgaHVuayAqaHVuayA9IE5VTEw7CisJaW50IHJlczsKKworCWFyZ3ZfYXJyYXlfcHVzaHYoJmFyZ3MsIHMtPm1vZGUtPmRpZmZfY21kKTsKKwlpZiAoZGlmZl9hbGdvcml0aG0pCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmFyZ3MsICItLWRpZmYtYWxnb3JpdGhtPSVzIiwgZGlmZl9hbGdvcml0aG0pOworCWlmIChzLT5yZXZpc2lvbikgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLAorCQkJCS8qIGNvdWxkIGJlIG9uIGFuIHVuYm9ybiBicmFuY2ggKi8KKwkJCQkhc3RyY21wKCJIRUFEIiwgcy0+cmV2aXNpb24pICYmCisJCQkJZ2V0X29pZCgiSEVBRCIsICZvaWQpID8KKwkJCQllbXB0eV90cmVlX29pZF9oZXgoKSA6IHMtPnJldmlzaW9uKTsKKwl9CisJY29sb3JfYXJnX2luZGV4ID0gYXJncy5hcmdjOworCS8qIFVzZSBgLS1uby1jb2xvcmAgZXhwbGljaXRseSwganVzdCBpbiBjYXNlIGBkaWZmLmNvbG9yID0gYWx3YXlzYC4gKi8KKwlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAiLS1uby1jb2xvciIsICItcCIsICItLSIsIE5VTEwpOworCWZvciAoaSA9IDA7IGkgPCBwcy0+bnI7IGkrKykKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBwcy0+aXRlbXNbaV0ub3JpZ2luYWwpOworCisJc2V0dXBfY2hpbGRfcHJvY2VzcyhzLCAmY3AsIE5VTEwpOworCWNwLmFyZ3YgPSBhcmdzLmFyZ3Y7CisJcmVzID0gY2FwdHVyZV9jb21tYW5kKCZjcCwgcGxhaW4sIDApOworCWlmIChyZXMpIHsKKwkJYXJndl9hcnJheV9jbGVhcigmYXJncyk7CisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgZGlmZiIpKTsKKwl9CisJaWYgKCFwbGFpbi0+bGVuKSB7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJc3RyYnVmX2NvbXBsZXRlX2xpbmUocGxhaW4pOworCisJaWYgKHdhbnRfY29sb3JfZmQoMSwgLTEpKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNvbG9yZWRfY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCWNvbnN0IGNoYXIgKmRpZmZfZmlsdGVyID0gcy0+cy5pbnRlcmFjdGl2ZV9kaWZmX2ZpbHRlcjsKKworCQlzZXR1cF9jaGlsZF9wcm9jZXNzKHMsICZjb2xvcmVkX2NwLCBOVUxMKTsKKwkJeHNucHJpbnRmKChjaGFyICopYXJncy5hcmd2W2NvbG9yX2FyZ19pbmRleF0sIDgsICItLWNvbG9yIik7CisJCWNvbG9yZWRfY3AuYXJndiA9IGFyZ3MuYXJndjsKKwkJY29sb3JlZCA9ICZzLT5jb2xvcmVkOworCQlyZXMgPSBjYXB0dXJlX2NvbW1hbmQoJmNvbG9yZWRfY3AsIGNvbG9yZWQsIDApOworCQlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKwkJaWYgKHJlcykKKwkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBkaWZmIikpOworCisJCWlmIChkaWZmX2ZpbHRlcikgeworCQkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgZmlsdGVyX2NwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJCQlzZXR1cF9jaGlsZF9wcm9jZXNzKHMsICZmaWx0ZXJfY3AsCisJCQkJCSAgICBkaWZmX2ZpbHRlciwgTlVMTCk7CisJCQlmaWx0ZXJfY3AuZ2l0X2NtZCA9IDA7CisJCQlmaWx0ZXJfY3AudXNlX3NoZWxsID0gMTsKKwkJCXN0cmJ1Zl9yZXNldCgmcy0+YnVmKTsKKwkJCWlmIChwaXBlX2NvbW1hbmQoJmZpbHRlcl9jcCwKKwkJCQkJIGNvbG9yZWQtPmJ1ZiwgY29sb3JlZC0+bGVuLAorCQkJCQkgJnMtPmJ1ZiwgY29sb3JlZC0+bGVuLAorCQkJCQkgTlVMTCwgMCkgPCAwKQorCQkJCXJldHVybiBlcnJvcihfKCJmYWlsZWQgdG8gcnVuICclcyciKSwKKwkJCQkJICAgICBkaWZmX2ZpbHRlcik7CisJCQlzdHJidWZfc3dhcChjb2xvcmVkLCAmcy0+YnVmKTsKKwkJfQorCisJCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKGNvbG9yZWQpOworCQljb2xvcmVkX3AgPSBjb2xvcmVkLT5idWY7CisJCWNvbG9yZWRfcGVuZCA9IGNvbG9yZWRfcCArIGNvbG9yZWQtPmxlbjsKKwl9CisJYXJndl9hcnJheV9jbGVhcigmYXJncyk7CisKKwkvKiBwYXJzZSBmaWxlcyBhbmQgaHVua3MgKi8KKwlwID0gcGxhaW4tPmJ1ZjsKKwlwZW5kID0gcCArIHBsYWluLT5sZW47CisJd2hpbGUgKHAgIT0gcGVuZCkgeworCQljaGFyICplb2wgPSBtZW1jaHIocCwgJ1xuJywgcGVuZCAtIHApOworCQljb25zdCBjaGFyICpkZWxldGVkID0gTlVMTCwgKm1vZGVfY2hhbmdlID0gTlVMTDsKKworCQlpZiAoIWVvbCkKKwkJCWVvbCA9IHBlbmQ7CisKKwkJaWYgKHN0YXJ0c193aXRoKHAsICJkaWZmICIpKSB7CisJCQlzLT5maWxlX2RpZmZfbnIrKzsKKwkJCUFMTE9DX0dST1cocy0+ZmlsZV9kaWZmLCBzLT5maWxlX2RpZmZfbnIsCisJCQkJICAgZmlsZV9kaWZmX2FsbG9jKTsKKwkJCWZpbGVfZGlmZiA9IHMtPmZpbGVfZGlmZiArIHMtPmZpbGVfZGlmZl9uciAtIDE7CisJCQltZW1zZXQoZmlsZV9kaWZmLCAwLCBzaXplb2YoKmZpbGVfZGlmZikpOworCQkJaHVuayA9ICZmaWxlX2RpZmYtPmhlYWQ7CisJCQlodW5rLT5zdGFydCA9IHAgLSBwbGFpbi0+YnVmOworCQkJaWYgKGNvbG9yZWRfcCkKKwkJCQlodW5rLT5jb2xvcmVkX3N0YXJ0ID0gY29sb3JlZF9wIC0gY29sb3JlZC0+YnVmOworCQkJbWFya2VyID0gJ1wwJzsKKwkJfSBlbHNlIGlmIChwID09IHBsYWluLT5idWYpCisJCQlCVUcoImRpZmYgc3RhcnRzIHdpdGggdW5leHBlY3RlZCBsaW5lOlxuIgorCQkJICAgICIlLipzXG4iLCAoaW50KShlb2wgLSBwKSwgcCk7CisJCWVsc2UgaWYgKGZpbGVfZGlmZi0+ZGVsZXRlZCkKKwkJCTsgLyoga2VlcCB0aGUgcmVzdCBvZiB0aGUgZmlsZSBpbiBhIHNpbmdsZSAiaHVuayIgKi8KKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgocCwgIkBAICIpIHx8CisJCQkgKGh1bmsgPT0gJmZpbGVfZGlmZi0+aGVhZCAmJgorCQkJICBza2lwX3ByZWZpeChwLCAiZGVsZXRlZCBmaWxlIiwgJmRlbGV0ZWQpKSkgeworCQkJaWYgKG1hcmtlciA9PSAnLScgfHwgbWFya2VyID09ICcrJykKKwkJCQkvKgorCQkJCSAqIFNob3VsZCBub3QgaGFwcGVuOyBwcmV2aW91cyBodW5rIGRpZCBub3QgZW5kCisJCQkJICogaW4gYSBjb250ZXh0IGxpbmU/IEhhbmRsZSBpdCBhbnl3YXkuCisJCQkJICovCisJCQkJaHVuay0+c3BsaXR0YWJsZV9pbnRvKys7CisKKwkJCWZpbGVfZGlmZi0+aHVua19ucisrOworCQkJQUxMT0NfR1JPVyhmaWxlX2RpZmYtPmh1bmssIGZpbGVfZGlmZi0+aHVua19uciwKKwkJCQkgICBmaWxlX2RpZmYtPmh1bmtfYWxsb2MpOworCQkJaHVuayA9IGZpbGVfZGlmZi0+aHVuayArIGZpbGVfZGlmZi0+aHVua19uciAtIDE7CisJCQltZW1zZXQoaHVuaywgMCwgc2l6ZW9mKCpodW5rKSk7CisKKwkJCWh1bmstPnN0YXJ0ID0gcCAtIHBsYWluLT5idWY7CisJCQlpZiAoY29sb3JlZCkKKwkJCQlodW5rLT5jb2xvcmVkX3N0YXJ0ID0gY29sb3JlZF9wIC0gY29sb3JlZC0+YnVmOworCisJCQlpZiAoZGVsZXRlZCkKKwkJCQlmaWxlX2RpZmYtPmRlbGV0ZWQgPSAxOworCQkJZWxzZSBpZiAocGFyc2VfaHVua19oZWFkZXIocywgaHVuaykgPCAwKQorCQkJCXJldHVybiAtMTsKKworCQkJLyoKKwkJCSAqIFN0YXJ0IGNvdW50aW5nIGludG8gaG93IG1hbnkgaHVua3MgdGhpcyBvbmUgY2FuIGJlCisJCQkgKiBzcGxpdAorCQkJICovCisJCQltYXJrZXIgPSAqcDsKKwkJfSBlbHNlIGlmIChodW5rID09ICZmaWxlX2RpZmYtPmhlYWQgJiYKKwkJCSAgIHNraXBfcHJlZml4KHAsICJvbGQgbW9kZSAiLCAmbW9kZV9jaGFuZ2UpICYmCisJCQkgICBpc19vY3RhbChtb2RlX2NoYW5nZSwgZW9sIC0gbW9kZV9jaGFuZ2UpKSB7CisJCQlpZiAoZmlsZV9kaWZmLT5tb2RlX2NoYW5nZSkKKwkJCQlCVUcoImRvdWJsZSBtb2RlIGNoYW5nZT9cblxuJS4qcyIsCisJCQkJICAgIChpbnQpKGVvbCAtIHBsYWluLT5idWYpLCBwbGFpbi0+YnVmKTsKKwkJCWlmIChmaWxlX2RpZmYtPmh1bmtfbnIrKykKKwkJCQlCVUcoIm1vZGUgY2hhbmdlIGluIHRoZSBtaWRkbGU/XG5cbiUuKnMiLAorCQkJCSAgICAoaW50KShlb2wgLSBwbGFpbi0+YnVmKSwgcGxhaW4tPmJ1Zik7CisKKwkJCS8qCisJCQkgKiBEbyAqbm90KiBjaGFuZ2UgYGh1bmtgOiB0aGUgbW9kZSBjaGFuZ2UgcHNldWRvLWh1bmsKKwkJCSAqIGlzIF9wYXJ0IG9mXyB0aGUgaGVhZGVyICJodW5rIi4KKwkJCSAqLworCQkJZmlsZV9kaWZmLT5tb2RlX2NoYW5nZSA9IDE7CisJCQlBTExPQ19HUk9XKGZpbGVfZGlmZi0+aHVuaywgZmlsZV9kaWZmLT5odW5rX25yLAorCQkJCSAgIGZpbGVfZGlmZi0+aHVua19hbGxvYyk7CisJCQltZW1zZXQoZmlsZV9kaWZmLT5odW5rLCAwLCBzaXplb2Yoc3RydWN0IGh1bmspKTsKKwkJCWZpbGVfZGlmZi0+aHVuay0+c3RhcnQgPSBwIC0gcGxhaW4tPmJ1ZjsKKwkJCWlmIChjb2xvcmVkX3ApCisJCQkJZmlsZV9kaWZmLT5odW5rLT5jb2xvcmVkX3N0YXJ0ID0KKwkJCQkJY29sb3JlZF9wIC0gY29sb3JlZC0+YnVmOworCQl9IGVsc2UgaWYgKGh1bmsgPT0gJmZpbGVfZGlmZi0+aGVhZCAmJgorCQkJICAgc2tpcF9wcmVmaXgocCwgIm5ldyBtb2RlICIsICZtb2RlX2NoYW5nZSkgJiYKKwkJCSAgIGlzX29jdGFsKG1vZGVfY2hhbmdlLCBlb2wgLSBtb2RlX2NoYW5nZSkpIHsKKworCQkJLyoKKwkJCSAqIEV4dGVuZCB0aGUgIm1vZGUgY2hhbmdlIiBwc2V1ZG8taHVuayB0byBpbmNsdWRlIGFsc28KKwkJCSAqIHRoZSAibmV3IG1vZGUiIGxpbmUuCisJCQkgKi8KKwkJCWlmICghZmlsZV9kaWZmLT5tb2RlX2NoYW5nZSkKKwkJCQlCVUcoIiduZXcgbW9kZScgd2l0aG91dCAnb2xkIG1vZGUnP1xuXG4lLipzIiwKKwkJCQkgICAgKGludCkoZW9sIC0gcGxhaW4tPmJ1ZiksIHBsYWluLT5idWYpOworCQkJaWYgKGZpbGVfZGlmZi0+aHVua19uciAhPSAxKQorCQkJCUJVRygibW9kZSBjaGFuZ2UgaW4gdGhlIG1pZGRsZT9cblxuJS4qcyIsCisJCQkJICAgIChpbnQpKGVvbCAtIHBsYWluLT5idWYpLCBwbGFpbi0+YnVmKTsKKwkJCWlmIChwIC0gcGxhaW4tPmJ1ZiAhPSBmaWxlX2RpZmYtPmh1bmstPmVuZCkKKwkJCQlCVUcoIiduZXcgbW9kZScgZG9lcyBub3QgaW1tZWRpYXRlbHkgZm9sbG93ICIKKwkJCQkgICAgIidvbGQgbW9kZSc/XG5cbiUuKnMiLAorCQkJCSAgICAoaW50KShlb2wgLSBwbGFpbi0+YnVmKSwgcGxhaW4tPmJ1Zik7CisJCX0gZWxzZSBpZiAoaHVuayA9PSAmZmlsZV9kaWZmLT5oZWFkICYmCisJCQkgICBzdGFydHNfd2l0aChwLCAiQmluYXJ5IGZpbGVzICIpKQorCQkJZmlsZV9kaWZmLT5iaW5hcnkgPSAxOworCisJCWlmIChmaWxlX2RpZmYtPmRlbGV0ZWQgJiYgZmlsZV9kaWZmLT5tb2RlX2NoYW5nZSkKKwkJCUJVRygiZGlmZiBjb250YWlucyBkZWxldGUgKmFuZCogYSBtb2RlIGNoYW5nZT8hP1xuJS4qcyIsCisJCQkgICAgKGludCkoZW9sIC0gKHBsYWluLT5idWYgKyBmaWxlX2RpZmYtPmhlYWQuc3RhcnQpKSwKKwkJCSAgICBwbGFpbi0+YnVmICsgZmlsZV9kaWZmLT5oZWFkLnN0YXJ0KTsKKworCQlpZiAoKG1hcmtlciA9PSAnLScgfHwgbWFya2VyID09ICcrJykgJiYgKnAgPT0gJyAnKQorCQkJaHVuay0+c3BsaXR0YWJsZV9pbnRvKys7CisJCWlmIChtYXJrZXIgJiYgKnAgIT0gJ1xcJykKKwkJCW1hcmtlciA9ICpwOworCisJCXAgPSBlb2wgPT0gcGVuZCA/IHBlbmQgOiBlb2wgKyAxOworCQlodW5rLT5lbmQgPSBwIC0gcGxhaW4tPmJ1ZjsKKworCQlpZiAoY29sb3JlZCkgeworCQkJY2hhciAqY29sb3JlZF9lb2wgPSBtZW1jaHIoY29sb3JlZF9wLCAnXG4nLAorCQkJCQkJICAgY29sb3JlZF9wZW5kIC0gY29sb3JlZF9wKTsKKwkJCWlmIChjb2xvcmVkX2VvbCkKKwkJCQljb2xvcmVkX3AgPSBjb2xvcmVkX2VvbCArIDE7CisJCQllbHNlIGlmIChwICE9IHBlbmQpCisJCQkJLyogY29sb3JlZCBzaG9ydGVyIHRoYW4gbm9uLWNvbG9yZWQ/ICovCisJCQkJZ290byBtaXNtYXRjaGVkX291dHB1dDsKKwkJCWVsc2UKKwkJCQljb2xvcmVkX3AgPSBjb2xvcmVkX3BlbmQ7CisKKwkJCWh1bmstPmNvbG9yZWRfZW5kID0gY29sb3JlZF9wIC0gY29sb3JlZC0+YnVmOworCQl9CisKKwkJaWYgKG1vZGVfY2hhbmdlKSB7CisJCQlpZiAoZmlsZV9kaWZmLT5odW5rX25yICE9IDEpCisJCQkJQlVHKCJtb2RlIGNoYW5nZSBpbiBodW5rICMlZD8/PyIsCisJCQkJICAgIChpbnQpZmlsZV9kaWZmLT5odW5rX25yKTsKKwkJCS8qIEFkanVzdCB0aGUgZW5kIG9mIHRoZSAibW9kZSBjaGFuZ2UiIHBzZXVkby1odW5rICovCisJCQlmaWxlX2RpZmYtPmh1bmstPmVuZCA9IGh1bmstPmVuZDsKKwkJCWlmIChjb2xvcmVkKQorCQkJCWZpbGVfZGlmZi0+aHVuay0+Y29sb3JlZF9lbmQgPSBodW5rLT5jb2xvcmVkX2VuZDsKKwkJfQorCX0KKworCWlmIChtYXJrZXIgPT0gJy0nIHx8IG1hcmtlciA9PSAnKycpCisJCS8qCisJCSAqIExhc3QgaHVuayBlbmRlZCBpbiBub24tY29udGV4dCBsaW5lIChpLmUuIGl0IGFwcGVuZGVkIGxpbmVzCisJCSAqIHRvIHRoZSBmaWxlLCBzbyB0aGVyZSBhcmUgbm8gdHJhaWxpbmcgY29udGV4dCBsaW5lcykuCisJCSAqLworCQlodW5rLT5zcGxpdHRhYmxlX2ludG8rKzsKKworCS8qIG5vbi1jb2xvcmVkIHNob3J0ZXIgdGhhbiBjb2xvcmVkPyAqLworCWlmIChjb2xvcmVkX3AgIT0gY29sb3JlZF9wZW5kKSB7CittaXNtYXRjaGVkX291dHB1dDoKKwkJZXJyb3IoXygibWlzbWF0Y2hlZCBvdXRwdXQgZnJvbSBpbnRlcmFjdGl2ZS5kaWZmRmlsdGVyIikpOworCQlhZHZpc2UoXygiWW91ciBmaWx0ZXIgbXVzdCBtYWludGFpbiBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2VcbiIKKwkJCSAiYmV0d2VlbiBpdHMgaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4iKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNpemVfdCBmaW5kX25leHRfbGluZShzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IG9mZnNldCkKK3sKKwljaGFyICplb2w7CisKKwlpZiAob2Zmc2V0ID49IHNiLT5sZW4pCisJCUJVRygibG9va2luZyBmb3IgbmV4dCBsaW5lIGJleW9uZCBidWZmZXIgKCVkID49ICVkKVxuJXMiLAorCQkgICAgKGludClvZmZzZXQsIChpbnQpc2ItPmxlbiwgc2ItPmJ1Zik7CisKKwllb2wgPSBtZW1jaHIoc2ItPmJ1ZiArIG9mZnNldCwgJ1xuJywgc2ItPmxlbiAtIG9mZnNldCk7CisJaWYgKCFlb2wpCisJCXJldHVybiBzYi0+bGVuOworCXJldHVybiBlb2wgLSBzYi0+YnVmICsgMTsKK30KKworc3RhdGljIHZvaWQgcmVuZGVyX2h1bmsoc3RydWN0IGFkZF9wX3N0YXRlICpzLCBzdHJ1Y3QgaHVuayAqaHVuaywKKwkJCXNzaXplX3QgZGVsdGEsIGludCBjb2xvcmVkLCBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJc3RydWN0IGh1bmtfaGVhZGVyICpoZWFkZXIgPSAmaHVuay0+aGVhZGVyOworCisJaWYgKGh1bmstPmhlYWRlci5vbGRfb2Zmc2V0ICE9IDAgfHwgaHVuay0+aGVhZGVyLm5ld19vZmZzZXQgIT0gMCkgeworCQkvKgorCQkgKiBHZW5lcmF0ZSB0aGUgaHVuayBoZWFkZXIgZHluYW1pY2FsbHksIGV4Y2VwdCBmb3Igc3BlY2lhbAorCQkgKiBodW5rcyAoc3VjaCBhcyB0aGUgZGlmZiBoZWFkZXIpLgorCQkgKi8KKwkJY29uc3QgY2hhciAqcDsKKwkJc2l6ZV90IGxlbjsKKwkJdW5zaWduZWQgbG9uZyBvbGRfb2Zmc2V0ID0gaGVhZGVyLT5vbGRfb2Zmc2V0OworCQl1bnNpZ25lZCBsb25nIG5ld19vZmZzZXQgPSBoZWFkZXItPm5ld19vZmZzZXQ7CisKKwkJaWYgKCFjb2xvcmVkKSB7CisJCQlwID0gcy0+cGxhaW4uYnVmICsgaGVhZGVyLT5leHRyYV9zdGFydDsKKwkJCWxlbiA9IGhlYWRlci0+ZXh0cmFfZW5kIC0gaGVhZGVyLT5leHRyYV9zdGFydDsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCBzLT5zLmZyYWdpbmZvX2NvbG9yKTsKKwkJCXAgPSBzLT5jb2xvcmVkLmJ1ZiArIGhlYWRlci0+Y29sb3JlZF9leHRyYV9zdGFydDsKKwkJCWxlbiA9IGhlYWRlci0+Y29sb3JlZF9leHRyYV9lbmQKKwkJCQktIGhlYWRlci0+Y29sb3JlZF9leHRyYV9zdGFydDsKKwkJfQorCisJCWlmIChzLT5tb2RlLT5pc19yZXZlcnNlKQorCQkJb2xkX29mZnNldCAtPSBkZWx0YTsKKwkJZWxzZQorCQkJbmV3X29mZnNldCArPSBkZWx0YTsKKworCQlzdHJidWZfYWRkZihvdXQsICJAQCAtJWx1LCVsdSArJWx1LCVsdSBAQCIsCisJCQkgICAgb2xkX29mZnNldCwgaGVhZGVyLT5vbGRfY291bnQsCisJCQkgICAgbmV3X29mZnNldCwgaGVhZGVyLT5uZXdfY291bnQpOworCQlpZiAobGVuKQorCQkJc3RyYnVmX2FkZChvdXQsIHAsIGxlbik7CisJCWVsc2UgaWYgKGNvbG9yZWQpCisJCQlzdHJidWZfYWRkZihvdXQsICIlc1xuIiwgR0lUX0NPTE9SX1JFU0VUKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKG91dCwgJ1xuJyk7CisJfQorCisJaWYgKGNvbG9yZWQpCisJCXN0cmJ1Zl9hZGQob3V0LCBzLT5jb2xvcmVkLmJ1ZiArIGh1bmstPmNvbG9yZWRfc3RhcnQsCisJCQkgICBodW5rLT5jb2xvcmVkX2VuZCAtIGh1bmstPmNvbG9yZWRfc3RhcnQpOworCWVsc2UKKwkJc3RyYnVmX2FkZChvdXQsIHMtPnBsYWluLmJ1ZiArIGh1bmstPnN0YXJ0LAorCQkJICAgaHVuay0+ZW5kIC0gaHVuay0+c3RhcnQpOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJfZGlmZl9oZWFkZXIoc3RydWN0IGFkZF9wX3N0YXRlICpzLAorCQkJICAgICAgIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZiwgaW50IGNvbG9yZWQsCisJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCS8qCisJICogSWYgdGhlcmUgd2FzIGEgbW9kZSBjaGFuZ2UsIHRoZSBmaXJzdCBodW5rIGlzIGEgcHNldWRvIGh1bmsgdGhhdAorCSAqIGNvcnJlc3BvbmRzIHRvIHRoZSBtb2RlIGxpbmUgaW4gdGhlIGhlYWRlci4gSWYgdGhlIHVzZXIgZGlkIG5vdCB3YW50CisJICogdG8gc3RhZ2UgdGhhdCAiaHVuayIsIHdlIGFjdHVhbGx5IGhhdmUgdG8gY3V0IGl0IG91dCBmcm9tIHRoZSBoZWFkZXIuCisJICovCisJaW50IHNraXBfbW9kZV9jaGFuZ2UgPQorCQlmaWxlX2RpZmYtPm1vZGVfY2hhbmdlICYmIGZpbGVfZGlmZi0+aHVuay0+dXNlICE9IFVTRV9IVU5LOworCXN0cnVjdCBodW5rICpoZWFkID0gJmZpbGVfZGlmZi0+aGVhZCwgKmZpcnN0ID0gZmlsZV9kaWZmLT5odW5rOworCisJaWYgKCFza2lwX21vZGVfY2hhbmdlKSB7CisJCXJlbmRlcl9odW5rKHMsIGhlYWQsIDAsIGNvbG9yZWQsIG91dCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY29sb3JlZCkgeworCQljb25zdCBjaGFyICpwID0gcy0+Y29sb3JlZC5idWY7CisKKwkJc3RyYnVmX2FkZChvdXQsIHAgKyBoZWFkLT5jb2xvcmVkX3N0YXJ0LAorCQkJICAgIGZpcnN0LT5jb2xvcmVkX3N0YXJ0IC0gaGVhZC0+Y29sb3JlZF9zdGFydCk7CisJCXN0cmJ1Zl9hZGQob3V0LCBwICsgZmlyc3QtPmNvbG9yZWRfZW5kLAorCQkJICAgIGhlYWQtPmNvbG9yZWRfZW5kIC0gZmlyc3QtPmNvbG9yZWRfZW5kKTsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyICpwID0gcy0+cGxhaW4uYnVmOworCisJCXN0cmJ1Zl9hZGQob3V0LCBwICsgaGVhZC0+c3RhcnQsIGZpcnN0LT5zdGFydCAtIGhlYWQtPnN0YXJ0KTsKKwkJc3RyYnVmX2FkZChvdXQsIHAgKyBmaXJzdC0+ZW5kLCBoZWFkLT5lbmQgLSBmaXJzdC0+ZW5kKTsKKwl9Cit9CisKKy8qIENvYWxlc2NlIGh1bmtzIGFnYWluIHRoYXQgd2VyZSBzcGxpdCAqLworc3RhdGljIGludCBtZXJnZV9odW5rcyhzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZiwKKwkJICAgICAgIHNpemVfdCAqaHVua19pbmRleCwgaW50IHVzZV9hbGwsIHN0cnVjdCBodW5rICptZXJnZWQpCit7CisJc2l6ZV90IGkgPSAqaHVua19pbmRleCwgZGVsdGE7CisJc3RydWN0IGh1bmsgKmh1bmsgPSBmaWxlX2RpZmYtPmh1bmsgKyBpOworCS8qIGBoZWFkZXJgIGNvcnJlc3BvbmRzIHRvIHRoZSBtZXJnZWQgaHVuayAqLworCXN0cnVjdCBodW5rX2hlYWRlciAqaGVhZGVyID0gJm1lcmdlZC0+aGVhZGVyLCAqbmV4dDsKKworCWlmICghdXNlX2FsbCAmJiBodW5rLT51c2UgIT0gVVNFX0hVTkspCisJCXJldHVybiAwOworCisJKm1lcmdlZCA9ICpodW5rOworCS8qIFdlIHNpbXBseSBza2lwIHRoZSBjb2xvcmVkIHBhcnQgKGlmIGFueSkgd2hlbiBtZXJnaW5nIGh1bmtzICovCisJbWVyZ2VkLT5jb2xvcmVkX3N0YXJ0ID0gbWVyZ2VkLT5jb2xvcmVkX2VuZCA9IDA7CisKKwlmb3IgKDsgaSArIDEgPCBmaWxlX2RpZmYtPmh1bmtfbnI7IGkrKykgeworCQlodW5rKys7CisJCW5leHQgPSAmaHVuay0+aGVhZGVyOworCisJCS8qCisJCSAqIFN0b3AgbWVyZ2luZyBodW5rcyB3aGVuOgorCQkgKgorCQkgKiAtIHRoZSBodW5rIGlzIG5vdCBzZWxlY3RlZCBmb3IgdXNlLCBvcgorCQkgKiAtIHRoZSBodW5rIGRvZXMgbm90IG92ZXJsYXAgd2l0aCB0aGUgYWxyZWFkeS1tZXJnZWQgaHVuayhzKQorCQkgKi8KKwkJaWYgKCghdXNlX2FsbCAmJiBodW5rLT51c2UgIT0gVVNFX0hVTkspIHx8CisJCSAgICBoZWFkZXItPm5ld19vZmZzZXQgPj0gbmV4dC0+bmV3X29mZnNldCArIG1lcmdlZC0+ZGVsdGEgfHwKKwkJICAgIGhlYWRlci0+bmV3X29mZnNldCArIGhlYWRlci0+bmV3X2NvdW50CisJCSAgICA8IG5leHQtPm5ld19vZmZzZXQgKyBtZXJnZWQtPmRlbHRhKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogSWYgdGhlIGh1bmtzIHdlcmUgbm90IGVkaXRlZCwgYW5kIG92ZXJsYXAsIHdlIGNhbiBzaW1wbHkKKwkJICogZXh0ZW5kIHRoZSBsaW5lIHJhbmdlLgorCQkgKi8KKwkJaWYgKG1lcmdlZC0+c3RhcnQgPCBodW5rLT5zdGFydCAmJiBtZXJnZWQtPmVuZCA+IGh1bmstPnN0YXJ0KSB7CisJCQltZXJnZWQtPmVuZCA9IGh1bmstPmVuZDsKKwkJCW1lcmdlZC0+Y29sb3JlZF9lbmQgPSBodW5rLT5jb2xvcmVkX2VuZDsKKwkJCWRlbHRhID0gMDsKKwkJfSBlbHNlIHsKKwkJCWNvbnN0IGNoYXIgKnBsYWluID0gcy0+cGxhaW4uYnVmOworCQkJc2l6ZV90ICBvdmVybGFwcGluZ19saW5lX2NvdW50ID0gaGVhZGVyLT5uZXdfb2Zmc2V0CisJCQkJKyBoZWFkZXItPm5ld19jb3VudCAtIG1lcmdlZC0+ZGVsdGEKKwkJCQktIG5leHQtPm5ld19vZmZzZXQ7CisJCQlzaXplX3Qgb3ZlcmxhcF9lbmQgPSBodW5rLT5zdGFydDsKKwkJCXNpemVfdCBvdmVybGFwX3N0YXJ0ID0gb3ZlcmxhcF9lbmQ7CisJCQlzaXplX3Qgb3ZlcmxhcF9uZXh0LCBsZW4sIGo7CisKKwkJCS8qCisJCQkgKiBPbmUgb2YgdGhlIGh1bmtzIHdhcyBlZGl0ZWQ6IHRoZSBtb2RpZmllZCBodW5rIHdhcworCQkJICogYXBwZW5kZWQgdG8gdGhlIHN0cmJ1ZiBgcy0+cGxhaW5gLgorCQkJICoKKwkJCSAqIExldCdzIGVuc3VyZSB0aGF0IGF0IGxlYXN0IHRoZSBsYXN0IGNvbnRleHQgbGluZSBvZgorCQkJICogdGhlIGZpcnN0IGh1bmsgb3ZlcmxhcHMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBsaW5lCisJCQkgKiBvZiB0aGUgc2Vjb25kIGh1bmssIGFuZCB0aGVuIG1lcmdlLgorCQkJICovCisJCQlmb3IgKGogPSAwOyBqIDwgb3ZlcmxhcHBpbmdfbGluZV9jb3VudDsgaisrKSB7CisJCQkJb3ZlcmxhcF9uZXh0ID0gZmluZF9uZXh0X2xpbmUoJnMtPnBsYWluLAorCQkJCQkJCSAgICAgIG92ZXJsYXBfZW5kKTsKKworCQkJCWlmIChvdmVybGFwX25leHQgPiBodW5rLT5lbmQpCisJCQkJCUJVRygiZmFpbGVkIHRvIGZpbmQgJWQgY29udGV4dCBsaW5lcyAiCisJCQkJCSAgICAiaW46XG4lLipzIiwKKwkJCQkJICAgIChpbnQpb3ZlcmxhcHBpbmdfbGluZV9jb3VudCwKKwkJCQkJICAgIChpbnQpKGh1bmstPmVuZCAtIGh1bmstPnN0YXJ0KSwKKwkJCQkJICAgIHBsYWluICsgaHVuay0+c3RhcnQpOworCisJCQkJaWYgKHBsYWluW292ZXJsYXBfZW5kXSAhPSAnICcpCisJCQkJCXJldHVybiBlcnJvcihfKCJleHBlY3RlZCBjb250ZXh0IGxpbmUgIgorCQkJCQkJICAgICAgICIjJWQgaW5cbiUuKnMiKSwKKwkJCQkJCSAgICAgKGludCkoaiArIDEpLAorCQkJCQkJICAgICAoaW50KShodW5rLT5lbmQKKwkJCQkJCQkgICAtIGh1bmstPnN0YXJ0KSwKKwkJCQkJCSAgICAgcGxhaW4gKyBodW5rLT5zdGFydCk7CisKKwkJCQlvdmVybGFwX3N0YXJ0ID0gb3ZlcmxhcF9lbmQ7CisJCQkJb3ZlcmxhcF9lbmQgPSBvdmVybGFwX25leHQ7CisJCQl9CisJCQlsZW4gPSBvdmVybGFwX2VuZCAtIG92ZXJsYXBfc3RhcnQ7CisKKwkJCWlmIChsZW4gPiBtZXJnZWQtPmVuZCAtIG1lcmdlZC0+c3RhcnQgfHwKKwkJCSAgICBtZW1jbXAocGxhaW4gKyBtZXJnZWQtPmVuZCAtIGxlbiwKKwkJCQkgICBwbGFpbiArIG92ZXJsYXBfc3RhcnQsIGxlbikpCisJCQkJcmV0dXJuIGVycm9yKF8oImh1bmtzIGRvIG5vdCBvdmVybGFwOlxuJS4qc1xuIgorCQkJCQkgICAgICAgIlx0ZG9lcyBub3QgZW5kIHdpdGg6XG4lLipzIiksCisJCQkJCSAgICAgKGludCkobWVyZ2VkLT5lbmQgLSBtZXJnZWQtPnN0YXJ0KSwKKwkJCQkJICAgICBwbGFpbiArIG1lcmdlZC0+c3RhcnQsCisJCQkJCSAgICAgKGludClsZW4sIHBsYWluICsgb3ZlcmxhcF9zdGFydCk7CisKKwkJCS8qCisJCQkgKiBTaW5jZSB0aGUgc3RhcnQtZW5kIHJhbmdlcyBhcmUgbm90IGFkamFjZW50LCB3ZQorCQkJICogY2Fubm90IHNpbXBseSB0YWtlIHRoZSB1bmlvbiBvZiB0aGUgcmFuZ2VzLiBUbworCQkJICogYWRkcmVzcyB0aGF0LCB3ZSB0ZW1wb3JhcmlseSBhcHBlbmQgdGhlIHVuaW9uIG9mIHRoZQorCQkJICogbGluZXMgdG8gdGhlIGBwbGFpbmAgc3RyYnVmLgorCQkJICovCisJCQlpZiAobWVyZ2VkLT5lbmQgIT0gcy0+cGxhaW4ubGVuKSB7CisJCQkJc2l6ZV90IHN0YXJ0ID0gcy0+cGxhaW4ubGVuOworCisJCQkJc3RyYnVmX2FkZCgmcy0+cGxhaW4sIHBsYWluICsgbWVyZ2VkLT5zdGFydCwKKwkJCQkJICAgbWVyZ2VkLT5lbmQgLSBtZXJnZWQtPnN0YXJ0KTsKKwkJCQlwbGFpbiA9IHMtPnBsYWluLmJ1ZjsKKwkJCQltZXJnZWQtPnN0YXJ0ID0gc3RhcnQ7CisJCQkJbWVyZ2VkLT5lbmQgPSBzLT5wbGFpbi5sZW47CisJCQl9CisKKwkJCXN0cmJ1Zl9hZGQoJnMtPnBsYWluLAorCQkJCSAgIHBsYWluICsgb3ZlcmxhcF9lbmQsCisJCQkJICAgaHVuay0+ZW5kIC0gb3ZlcmxhcF9lbmQpOworCQkJbWVyZ2VkLT5lbmQgPSBzLT5wbGFpbi5sZW47CisJCQltZXJnZWQtPnNwbGl0dGFibGVfaW50byArPSBodW5rLT5zcGxpdHRhYmxlX2ludG87CisJCQlkZWx0YSA9IG1lcmdlZC0+ZGVsdGE7CisJCQltZXJnZWQtPmRlbHRhICs9IGh1bmstPmRlbHRhOworCQl9CisKKwkJaGVhZGVyLT5vbGRfY291bnQgPSBuZXh0LT5vbGRfb2Zmc2V0ICsgbmV4dC0+b2xkX2NvdW50CisJCQktIGhlYWRlci0+b2xkX29mZnNldDsKKwkJaGVhZGVyLT5uZXdfY291bnQgPSBuZXh0LT5uZXdfb2Zmc2V0ICsgZGVsdGEKKwkJCSsgbmV4dC0+bmV3X2NvdW50IC0gaGVhZGVyLT5uZXdfb2Zmc2V0OworCX0KKworCWlmIChpID09ICpodW5rX2luZGV4KQorCQlyZXR1cm4gMDsKKworCSpodW5rX2luZGV4ID0gaTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcmVhc3NlbWJsZV9wYXRjaChzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsCisJCQkgICAgIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZiwgaW50IHVzZV9hbGwsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlzdHJ1Y3QgaHVuayAqaHVuazsKKwlzaXplX3Qgc2F2ZV9sZW4gPSBzLT5wbGFpbi5sZW4sIGk7CisJc3NpemVfdCBkZWx0YSA9IDA7CisKKwlyZW5kZXJfZGlmZl9oZWFkZXIocywgZmlsZV9kaWZmLCAwLCBvdXQpOworCisJZm9yIChpID0gZmlsZV9kaWZmLT5tb2RlX2NoYW5nZTsgaSA8IGZpbGVfZGlmZi0+aHVua19ucjsgaSsrKSB7CisJCXN0cnVjdCBodW5rIG1lcmdlZCA9IHsgMCB9OworCisJCWh1bmsgPSBmaWxlX2RpZmYtPmh1bmsgKyBpOworCQlpZiAoIXVzZV9hbGwgJiYgaHVuay0+dXNlICE9IFVTRV9IVU5LKQorCQkJZGVsdGEgKz0gaHVuay0+aGVhZGVyLm9sZF9jb3VudAorCQkJCS0gaHVuay0+aGVhZGVyLm5ld19jb3VudDsKKwkJZWxzZSB7CisJCQkvKiBtZXJnZSBvdmVybGFwcGluZyBodW5rcyBpbnRvIGEgdGVtcG9yYXJ5IGh1bmsgKi8KKwkJCWlmIChtZXJnZV9odW5rcyhzLCBmaWxlX2RpZmYsICZpLCB1c2VfYWxsLCAmbWVyZ2VkKSkKKwkJCQlodW5rID0gJm1lcmdlZDsKKworCQkJcmVuZGVyX2h1bmsocywgaHVuaywgZGVsdGEsIDAsIG91dCk7CisKKwkJCS8qCisJCQkgKiBJbiBjYXNlIGBtZXJnZV9odW5rcygpYCB1c2VkIGBwbGFpbmAgYXMgYSBzY3JhdGNoCisJCQkgKiBwYWQgKHRoaXMgaGFwcGVucyB3aGVuIGFuIGVkaXRlZCBodW5rIGhhZCB0byBiZQorCQkJICogY29hbGVzY2VkIHdpdGggYW5vdGhlciBodW5rKS4KKwkJCSAqLworCQkJc3RyYnVmX3NldGxlbigmcy0+cGxhaW4sIHNhdmVfbGVuKTsKKworCQkJZGVsdGEgKz0gaHVuay0+ZGVsdGE7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgc3BsaXRfaHVuayhzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZiwKKwkJICAgICAgIHNpemVfdCBodW5rX2luZGV4KQoreworCWludCBjb2xvcmVkID0gISFzLT5jb2xvcmVkLmxlbiwgZmlyc3QgPSAxOworCXN0cnVjdCBodW5rICpodW5rID0gZmlsZV9kaWZmLT5odW5rICsgaHVua19pbmRleDsKKwlzaXplX3Qgc3BsaXR0YWJsZV9pbnRvOworCXNpemVfdCBlbmQsIGNvbG9yZWRfZW5kLCBjdXJyZW50LCBjb2xvcmVkX2N1cnJlbnQgPSAwLCBjb250ZXh0X2xpbmVfY291bnQ7CisJc3RydWN0IGh1bmtfaGVhZGVyIHJlbWFpbmluZywgKmhlYWRlcjsKKwljaGFyIG1hcmtlciwgY2g7CisKKwlpZiAoaHVua19pbmRleCA+PSBmaWxlX2RpZmYtPmh1bmtfbnIpCisJCUJVRygiaW52YWxpZCBodW5rIGluZGV4OiAlZCAobXVzdCBiZSA+PSAwIGFuZCA8ICVkKSIsCisJCSAgICAoaW50KWh1bmtfaW5kZXgsIChpbnQpZmlsZV9kaWZmLT5odW5rX25yKTsKKworCWlmIChodW5rLT5zcGxpdHRhYmxlX2ludG8gPCAyKQorCQlyZXR1cm4gMDsKKwlzcGxpdHRhYmxlX2ludG8gPSBodW5rLT5zcGxpdHRhYmxlX2ludG87CisKKwllbmQgPSBodW5rLT5lbmQ7CisJY29sb3JlZF9lbmQgPSBodW5rLT5jb2xvcmVkX2VuZDsKKworCXJlbWFpbmluZyA9IGh1bmstPmhlYWRlcjsKKworCWZpbGVfZGlmZi0+aHVua19uciArPSBzcGxpdHRhYmxlX2ludG8gLSAxOworCUFMTE9DX0dST1coZmlsZV9kaWZmLT5odW5rLCBmaWxlX2RpZmYtPmh1bmtfbnIsIGZpbGVfZGlmZi0+aHVua19hbGxvYyk7CisJaWYgKGh1bmtfaW5kZXggKyBzcGxpdHRhYmxlX2ludG8gPCBmaWxlX2RpZmYtPmh1bmtfbnIpCisJCW1lbW1vdmUoZmlsZV9kaWZmLT5odW5rICsgaHVua19pbmRleCArIHNwbGl0dGFibGVfaW50bywKKwkJCWZpbGVfZGlmZi0+aHVuayArIGh1bmtfaW5kZXggKyAxLAorCQkJKGZpbGVfZGlmZi0+aHVua19uciAtIGh1bmtfaW5kZXggLSBzcGxpdHRhYmxlX2ludG8pCisJCQkqIHNpemVvZigqaHVuaykpOworCWh1bmsgPSBmaWxlX2RpZmYtPmh1bmsgKyBodW5rX2luZGV4OworCWh1bmstPnNwbGl0dGFibGVfaW50byA9IDE7CisJbWVtc2V0KGh1bmsgKyAxLCAwLCAoc3BsaXR0YWJsZV9pbnRvIC0gMSkgKiBzaXplb2YoKmh1bmspKTsKKworCWhlYWRlciA9ICZodW5rLT5oZWFkZXI7CisJaGVhZGVyLT5vbGRfY291bnQgPSBoZWFkZXItPm5ld19jb3VudCA9IDA7CisKKwljdXJyZW50ID0gaHVuay0+c3RhcnQ7CisJaWYgKGNvbG9yZWQpCisJCWNvbG9yZWRfY3VycmVudCA9IGh1bmstPmNvbG9yZWRfc3RhcnQ7CisJbWFya2VyID0gJ1wwJzsKKwljb250ZXh0X2xpbmVfY291bnQgPSAwOworCisJd2hpbGUgKHNwbGl0dGFibGVfaW50byA+IDEpIHsKKwkJY2ggPSBzLT5wbGFpbi5idWZbY3VycmVudF07CisKKwkJaWYgKCFjaCkKKwkJCUJVRygiYnVmZmVyIG92ZXJydW4gd2hpbGUgc3BsaXR0aW5nIGh1bmtzIik7CisKKwkJLyoKKwkJICogSXMgdGhpcyB0aGUgZmlyc3QgY29udGV4dCBsaW5lIGFmdGVyIGEgY2hhaW4gb2YgKy8tIGxpbmVzPworCQkgKiBUaGVuIHJlY29yZCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgc3BsaXQgaHVuay4KKwkJICovCisJCWlmICgobWFya2VyID09ICctJyB8fCBtYXJrZXIgPT0gJysnKSAmJiBjaCA9PSAnICcpIHsKKwkJCWZpcnN0ID0gMDsKKwkJCWh1bmtbMV0uc3RhcnQgPSBjdXJyZW50OworCQkJaWYgKGNvbG9yZWQpCisJCQkJaHVua1sxXS5jb2xvcmVkX3N0YXJ0ID0gY29sb3JlZF9jdXJyZW50OworCQkJY29udGV4dF9saW5lX2NvdW50ID0gMDsKKwkJfQorCisJCS8qCisJCSAqIFdhcyB0aGUgcHJldmlvdXMgbGluZSBhICsvLSBvbmU/IEFsdGVybmF0aXZlbHksIGlzIHRoaXMgdGhlCisJCSAqIGZpcnN0IGxpbmUgKGFuZCBub3QgYSArLy0gb25lKT8KKwkJICoKKwkJICogVGhlbiBqdXN0IGluY3JlbWVudCB0aGUgYXBwcm9wcmlhdGUgY291bnRlciBhbmQgY29udGludWUKKwkJICogd2l0aCB0aGUgbmV4dCBsaW5lLgorCQkgKi8KKwkJaWYgKG1hcmtlciAhPSAnICcgfHwgKGNoICE9ICctJyAmJiBjaCAhPSAnKycpKSB7CituZXh0X2h1bmtfbGluZToKKwkJCS8qIENvbW1lbnQgbGluZXMgYXJlIGF0dGFjaGVkIHRvIHRoZSBwcmV2aW91cyBsaW5lICovCisJCQlpZiAoY2ggPT0gJ1xcJykKKwkJCQljaCA9IG1hcmtlciA/IG1hcmtlciA6ICcgJzsKKworCQkJLyogY3VycmVudCBodW5rIG5vdCBkb25lIHlldCAqLworCQkJaWYgKGNoID09ICcgJykKKwkJCQljb250ZXh0X2xpbmVfY291bnQrKzsKKwkJCWVsc2UgaWYgKGNoID09ICctJykKKwkJCQloZWFkZXItPm9sZF9jb3VudCsrOworCQkJZWxzZSBpZiAoY2ggPT0gJysnKQorCQkJCWhlYWRlci0+bmV3X2NvdW50Kys7CisJCQllbHNlCisJCQkJQlVHKCJ1bmhhbmRsZWQgZGlmZiBtYXJrZXI6ICclYyciLCBjaCk7CisJCQltYXJrZXIgPSBjaDsKKwkJCWN1cnJlbnQgPSBmaW5kX25leHRfbGluZSgmcy0+cGxhaW4sIGN1cnJlbnQpOworCQkJaWYgKGNvbG9yZWQpCisJCQkJY29sb3JlZF9jdXJyZW50ID0KKwkJCQkJZmluZF9uZXh0X2xpbmUoJnMtPmNvbG9yZWQsCisJCQkJCQkgICAgICAgY29sb3JlZF9jdXJyZW50KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogV2UgZ290IHVzIHRoZSBzdGFydCBvZiBhIG5ldyBodW5rIQorCQkgKgorCQkgKiBUaGlzIGlzIGEgY29udGV4dCBsaW5lLCBzbyBpdCBpcyBzaGFyZWQgd2l0aCB0aGUgcHJldmlvdXMKKwkJICogaHVuaywgaWYgYW55LgorCQkgKi8KKworCQlpZiAoZmlyc3QpIHsKKwkJCWlmIChoZWFkZXItPm9sZF9jb3VudCB8fCBoZWFkZXItPm5ld19jb3VudCkKKwkJCQlCVUcoImNvdW50cyBhcmUgb2ZmOiAlZC8lZCIsCisJCQkJICAgIChpbnQpaGVhZGVyLT5vbGRfY291bnQsCisJCQkJICAgIChpbnQpaGVhZGVyLT5uZXdfY291bnQpOworCisJCQloZWFkZXItPm9sZF9jb3VudCA9IGNvbnRleHRfbGluZV9jb3VudDsKKwkJCWhlYWRlci0+bmV3X2NvdW50ID0gY29udGV4dF9saW5lX2NvdW50OworCQkJY29udGV4dF9saW5lX2NvdW50ID0gMDsKKwkJCWZpcnN0ID0gMDsKKwkJCWdvdG8gbmV4dF9odW5rX2xpbmU7CisJCX0KKworCQlyZW1haW5pbmcub2xkX29mZnNldCArPSBoZWFkZXItPm9sZF9jb3VudDsKKwkJcmVtYWluaW5nLm9sZF9jb3VudCAtPSBoZWFkZXItPm9sZF9jb3VudDsKKwkJcmVtYWluaW5nLm5ld19vZmZzZXQgKz0gaGVhZGVyLT5uZXdfY291bnQ7CisJCXJlbWFpbmluZy5uZXdfY291bnQgLT0gaGVhZGVyLT5uZXdfY291bnQ7CisKKwkJLyogaW5pdGlhbGl6ZSBuZXh0IGh1bmsgaGVhZGVyJ3Mgb2Zmc2V0cyAqLworCQlodW5rWzFdLmhlYWRlci5vbGRfb2Zmc2V0ID0KKwkJCWhlYWRlci0+b2xkX29mZnNldCArIGhlYWRlci0+b2xkX2NvdW50OworCQlodW5rWzFdLmhlYWRlci5uZXdfb2Zmc2V0ID0KKwkJCWhlYWRlci0+bmV3X29mZnNldCArIGhlYWRlci0+bmV3X2NvdW50OworCisJCS8qIGFkZCBvbmUgc3BsaXQgaHVuayAqLworCQloZWFkZXItPm9sZF9jb3VudCArPSBjb250ZXh0X2xpbmVfY291bnQ7CisJCWhlYWRlci0+bmV3X2NvdW50ICs9IGNvbnRleHRfbGluZV9jb3VudDsKKworCQlodW5rLT5lbmQgPSBjdXJyZW50OworCQlpZiAoY29sb3JlZCkKKwkJCWh1bmstPmNvbG9yZWRfZW5kID0gY29sb3JlZF9jdXJyZW50OworCisJCWh1bmsrKzsKKwkJaHVuay0+c3BsaXR0YWJsZV9pbnRvID0gMTsKKwkJaHVuay0+dXNlID0gaHVua1stMV0udXNlOworCQloZWFkZXIgPSAmaHVuay0+aGVhZGVyOworCisJCWhlYWRlci0+b2xkX2NvdW50ID0gaGVhZGVyLT5uZXdfY291bnQgPSBjb250ZXh0X2xpbmVfY291bnQ7CisJCWNvbnRleHRfbGluZV9jb3VudCA9IDA7CisKKwkJc3BsaXR0YWJsZV9pbnRvLS07CisJCW1hcmtlciA9IGNoOworCX0KKworCS8qIGxhc3QgaHVuayBzaW1wbHkgZ2V0cyB0aGUgcmVzdCAqLworCWlmIChoZWFkZXItPm9sZF9vZmZzZXQgIT0gcmVtYWluaW5nLm9sZF9vZmZzZXQpCisJCUJVRygibWlzY291bnRlZCBvbGRfb2Zmc2V0OiAlbHUgIT0gJWx1IiwKKwkJICAgIGhlYWRlci0+b2xkX29mZnNldCwgcmVtYWluaW5nLm9sZF9vZmZzZXQpOworCWlmIChoZWFkZXItPm5ld19vZmZzZXQgIT0gcmVtYWluaW5nLm5ld19vZmZzZXQpCisJCUJVRygibWlzY291bnRlZCBuZXdfb2Zmc2V0OiAlbHUgIT0gJWx1IiwKKwkJICAgIGhlYWRlci0+bmV3X29mZnNldCwgcmVtYWluaW5nLm5ld19vZmZzZXQpOworCWhlYWRlci0+b2xkX2NvdW50ID0gcmVtYWluaW5nLm9sZF9jb3VudDsKKwloZWFkZXItPm5ld19jb3VudCA9IHJlbWFpbmluZy5uZXdfY291bnQ7CisJaHVuay0+ZW5kID0gZW5kOworCWlmIChjb2xvcmVkKQorCQlodW5rLT5jb2xvcmVkX2VuZCA9IGNvbG9yZWRfZW5kOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlY29sb3JfaHVuayhzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIHN0cnVjdCBodW5rICpodW5rKQoreworCWNvbnN0IGNoYXIgKnBsYWluID0gcy0+cGxhaW4uYnVmOworCXNpemVfdCBjdXJyZW50LCBlb2wsIG5leHQ7CisKKwlpZiAoIXMtPmNvbG9yZWQubGVuKQorCQlyZXR1cm47CisKKwlodW5rLT5jb2xvcmVkX3N0YXJ0ID0gcy0+Y29sb3JlZC5sZW47CisJZm9yIChjdXJyZW50ID0gaHVuay0+c3RhcnQ7IGN1cnJlbnQgPCBodW5rLT5lbmQ7ICkgeworCQlmb3IgKGVvbCA9IGN1cnJlbnQ7IGVvbCA8IGh1bmstPmVuZDsgZW9sKyspCisJCQlpZiAocGxhaW5bZW9sXSA9PSAnXG4nKQorCQkJCWJyZWFrOworCQluZXh0ID0gZW9sICsgKGVvbCA8IGh1bmstPmVuZCk7CisJCWlmIChlb2wgPiBjdXJyZW50ICYmIHBsYWluW2VvbCAtIDFdID09ICdccicpCisJCQllb2wtLTsKKworCQlzdHJidWZfYWRkc3RyKCZzLT5jb2xvcmVkLAorCQkJICAgICAgcGxhaW5bY3VycmVudF0gPT0gJy0nID8KKwkJCSAgICAgIHMtPnMuZmlsZV9vbGRfY29sb3IgOgorCQkJICAgICAgcGxhaW5bY3VycmVudF0gPT0gJysnID8KKwkJCSAgICAgIHMtPnMuZmlsZV9uZXdfY29sb3IgOgorCQkJICAgICAgcy0+cy5jb250ZXh0X2NvbG9yKTsKKwkJc3RyYnVmX2FkZCgmcy0+Y29sb3JlZCwgcGxhaW4gKyBjdXJyZW50LCBlb2wgLSBjdXJyZW50KTsKKwkJc3RyYnVmX2FkZHN0cigmcy0+Y29sb3JlZCwgR0lUX0NPTE9SX1JFU0VUKTsKKwkJaWYgKG5leHQgPiBlb2wpCisJCQlzdHJidWZfYWRkKCZzLT5jb2xvcmVkLCBwbGFpbiArIGVvbCwgbmV4dCAtIGVvbCk7CisJCWN1cnJlbnQgPSBuZXh0OworCX0KKwlodW5rLT5jb2xvcmVkX2VuZCA9IHMtPmNvbG9yZWQubGVuOworfQorCitzdGF0aWMgaW50IGVkaXRfaHVua19tYW51YWxseShzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIHN0cnVjdCBodW5rICpodW5rKQoreworCXNpemVfdCBpOworCisJc3RyYnVmX3Jlc2V0KCZzLT5idWYpOworCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZigmcy0+YnVmLCBfKCJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgIgorCQkJCSAgICAgICJhIHF1aWNrIGd1aWRlLlxuIikpOworCXJlbmRlcl9odW5rKHMsIGh1bmssIDAsIDAsICZzLT5idWYpOworCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZigmcy0+YnVmLAorCQkJICAgICAgXygiLS0tXG4iCisJCQkJIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzICIKKwkJCQkiKGNvbnRleHQpLlxuIgorCQkJCSJUbyByZW1vdmUgJyVjJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisJCQkJIkxpbmVzIHN0YXJ0aW5nIHdpdGggJWMgd2lsbCBiZSByZW1vdmVkLlxuIiksCisJCQkgICAgICBzLT5tb2RlLT5pc19yZXZlcnNlID8gJysnIDogJy0nLAorCQkJICAgICAgcy0+bW9kZS0+aXNfcmV2ZXJzZSA/ICctJyA6ICcrJywKKwkJCSAgICAgIGNvbW1lbnRfbGluZV9jaGFyKTsKKwlzdHJidWZfY29tbWVudGVkX2FkZGYoJnMtPmJ1ZiwgIiVzIiwgXyhzLT5tb2RlLT5lZGl0X2h1bmtfaGludCkpOworCS8qCisJICogVFJBTlNMQVRPUlM6ICdpdCcgcmVmZXJzIHRvIHRoZSBwYXRjaCBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzCisJICogbWVzc2FnZXMuCisJICovCisJc3RyYnVmX2NvbW1lbnRlZF9hZGRmKCZzLT5idWYsCisJCQkgICAgICBfKCJJZiBpdCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCB5b3Ugd2lsbCBiZSAiCisJCQkJImdpdmVuIGFuIG9wcG9ydHVuaXR5IHRvXG4iCisJCQkJImVkaXQgYWdhaW4uICBJZiBhbGwgbGluZXMgb2YgdGhlIGh1bmsgYXJlICIKKwkJCQkicmVtb3ZlZCwgdGhlbiB0aGUgZWRpdCBpc1xuIgorCQkJCSJhYm9ydGVkIGFuZCB0aGUgaHVuayBpcyBsZWZ0IHVuY2hhbmdlZC5cbiIpKTsKKworCWlmIChzdHJidWZfZWRpdF9pbnRlcmFjdGl2ZWx5KCZzLT5idWYsICJhZGRwLWh1bmstZWRpdC5kaWZmIiwgTlVMTCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBzdHJpcCBvdXQgY29tbWVudGVkIGxpbmVzICovCisJaHVuay0+c3RhcnQgPSBzLT5wbGFpbi5sZW47CisJZm9yIChpID0gMDsgaSA8IHMtPmJ1Zi5sZW47ICkgeworCQlzaXplX3QgbmV4dCA9IGZpbmRfbmV4dF9saW5lKCZzLT5idWYsIGkpOworCisJCWlmIChzLT5idWYuYnVmW2ldICE9IGNvbW1lbnRfbGluZV9jaGFyKQorCQkJc3RyYnVmX2FkZCgmcy0+cGxhaW4sIHMtPmJ1Zi5idWYgKyBpLCBuZXh0IC0gaSk7CisJCWkgPSBuZXh0OworCX0KKworCWh1bmstPmVuZCA9IHMtPnBsYWluLmxlbjsKKwlpZiAoaHVuay0+ZW5kID09IGh1bmstPnN0YXJ0KQorCQkvKiBUaGUgdXNlciBhYm9ydGVkIGVkaXRpbmcgYnkgZGVsZXRpbmcgZXZlcnl0aGluZyAqLworCQlyZXR1cm4gMDsKKworCXJlY29sb3JfaHVuayhzLCBodW5rKTsKKworCS8qCisJICogSWYgdGhlIGh1bmsgaGVhZGVyIGlzIGludGFjdCwgcGFyc2UgaXQsIG90aGVyd2lzZSBzaW1wbHkgdXNlIHRoZQorCSAqIGh1bmsgaGVhZGVyIHByaW9yIHRvIGVkaXRpbmcgKHdoaWNoIHdpbGwgYWRqdXN0IGBodW5rLT5zdGFydGAgdG8KKwkgKiBza2lwIHRoZSBodW5rIGhlYWRlcikuCisJICovCisJaWYgKHMtPnBsYWluLmJ1ZltodW5rLT5zdGFydF0gPT0gJ0AnICYmCisJICAgIHBhcnNlX2h1bmtfaGVhZGVyKHMsIGh1bmspIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciIpKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgc3NpemVfdCByZWNvdW50X2VkaXRlZF9odW5rKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywgc3RydWN0IGh1bmsgKmh1bmssCisJCQkJICAgc2l6ZV90IG9yaWdfb2xkX2NvdW50LCBzaXplX3Qgb3JpZ19uZXdfY291bnQpCit7CisJc3RydWN0IGh1bmtfaGVhZGVyICpoZWFkZXIgPSAmaHVuay0+aGVhZGVyOworCXNpemVfdCBpOworCisJaGVhZGVyLT5vbGRfY291bnQgPSBoZWFkZXItPm5ld19jb3VudCA9IDA7CisJZm9yIChpID0gaHVuay0+c3RhcnQ7IGkgPCBodW5rLT5lbmQ7ICkgeworCQlzd2l0Y2ggKHMtPnBsYWluLmJ1ZltpXSkgeworCQljYXNlICctJzoKKwkJCWhlYWRlci0+b2xkX2NvdW50Kys7CisJCQlicmVhazsKKwkJY2FzZSAnKyc6CisJCQloZWFkZXItPm5ld19jb3VudCsrOworCQkJYnJlYWs7CisJCWNhc2UgJyAnOiBjYXNlICdccic6IGNhc2UgJ1xuJzoKKwkJCWhlYWRlci0+b2xkX2NvdW50Kys7CisJCQloZWFkZXItPm5ld19jb3VudCsrOworCQkJYnJlYWs7CisJCX0KKworCQlpID0gZmluZF9uZXh0X2xpbmUoJnMtPnBsYWluLCBpKTsKKwl9CisKKwlyZXR1cm4gb3JpZ19vbGRfY291bnQgLSBvcmlnX25ld19jb3VudAorCQktIGhlYWRlci0+b2xkX2NvdW50ICsgaGVhZGVyLT5uZXdfY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgcnVuX2FwcGx5X2NoZWNrKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywKKwkJCSAgIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZikKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCXN0cmJ1Zl9yZXNldCgmcy0+YnVmKTsKKwlyZWFzc2VtYmxlX3BhdGNoKHMsIGZpbGVfZGlmZiwgMSwgJnMtPmJ1Zik7CisKKwlzZXR1cF9jaGlsZF9wcm9jZXNzKHMsICZjcCwKKwkJCSAgICAiYXBwbHkiLCAiLS1jaGVjayIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaHYoJmNwLmFyZ3MsIHMtPm1vZGUtPmFwcGx5X2NoZWNrX2FyZ3MpOworCWlmIChwaXBlX2NvbW1hbmQoJmNwLCBzLT5idWYuYnVmLCBzLT5idWYubGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKKwkJcmV0dXJuIGVycm9yKF8oIidnaXQgYXBwbHkgLS1jYWNoZWQnIGZhaWxlZCIpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfc2luZ2xlX2NoYXJhY3RlcihzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMpCit7CisJaWYgKHMtPnMudXNlX3NpbmdsZV9rZXkpIHsKKwkJaW50IHJlcyA9IHJlYWRfa2V5X3dpdGhvdXRfZWNobygmcy0+YW5zd2VyKTsKKwkJcHJpbnRmKCIlc1xuIiwgcmVzID09IEVPRiA/ICIiIDogcy0+YW5zd2VyLmJ1Zik7CisJCXJldHVybiByZXM7CisJfQorCisJaWYgKGdpdF9yZWFkX2xpbmVfaW50ZXJhY3RpdmVseSgmcy0+YW5zd2VyKSA9PSBFT0YpCisJCXJldHVybiBFT0Y7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvbXB0X3llc25vKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywgY29uc3QgY2hhciAqcHJvbXB0KQoreworCWZvciAoOzspIHsKKwkJY29sb3JfZnByaW50ZihzdGRvdXQsIHMtPnMucHJvbXB0X2NvbG9yLCAiJXMiLCBfKHByb21wdCkpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJaWYgKHJlYWRfc2luZ2xlX2NoYXJhY3RlcihzKSA9PSBFT0YpCisJCQlyZXR1cm4gLTE7CisJCXN3aXRjaCAodG9sb3dlcihzLT5hbnN3ZXIuYnVmWzBdKSkgeworCQljYXNlICduJzogcmV0dXJuIDA7CisJCWNhc2UgJ3knOiByZXR1cm4gMTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBlZGl0X2h1bmtfbG9vcChzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsCisJCQkgIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZiwgc3RydWN0IGh1bmsgKmh1bmspCit7CisJc2l6ZV90IHBsYWluX2xlbiA9IHMtPnBsYWluLmxlbiwgY29sb3JlZF9sZW4gPSBzLT5jb2xvcmVkLmxlbjsKKwlzdHJ1Y3QgaHVuayBiYWNrdXA7CisKKwliYWNrdXAgPSAqaHVuazsKKworCWZvciAoOzspIHsKKwkJaW50IHJlcyA9IGVkaXRfaHVua19tYW51YWxseShzLCBodW5rKTsKKwkJaWYgKHJlcyA9PSAwKSB7CisJCQkvKiBhYmFuZG9uZGVkICovCisJCQkqaHVuayA9IGJhY2t1cDsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChyZXMgPiAwKSB7CisJCQlodW5rLT5kZWx0YSArPQorCQkJCXJlY291bnRfZWRpdGVkX2h1bmsocywgaHVuaywKKwkJCQkJCSAgICBiYWNrdXAuaGVhZGVyLm9sZF9jb3VudCwKKwkJCQkJCSAgICBiYWNrdXAuaGVhZGVyLm5ld19jb3VudCk7CisJCQlpZiAoIXJ1bl9hcHBseV9jaGVjayhzLCBmaWxlX2RpZmYpKQorCQkJCXJldHVybiAwOworCQl9CisKKwkJLyogRHJvcCBlZGl0cyAodGhleSB3ZXJlIGFwcGVuZGVkIHRvIHMtPnBsYWluKSAqLworCQlzdHJidWZfc2V0bGVuKCZzLT5wbGFpbiwgcGxhaW5fbGVuKTsKKwkJc3RyYnVmX3NldGxlbigmcy0+Y29sb3JlZCwgY29sb3JlZF9sZW4pOworCQkqaHVuayA9IGJhY2t1cDsKKworCQkvKgorCQkgKiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorCQkgKiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQgYXQgdGhpcyBwb2ludC4KKwkJICogQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKwkJICogKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKwkJICogb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisJCSAqLworCQlyZXMgPSBwcm9tcHRfeWVzbm8ocywgXygiWW91ciBlZGl0ZWQgaHVuayBkb2VzIG5vdCBhcHBseS4gIgorCQkJCQkiRWRpdCBhZ2FpbiAoc2F5aW5nIFwibm9cIiBkaXNjYXJkcyEpICIKKwkJCQkJIlt5L25dPyAiKSk7CisJCWlmIChyZXMgPCAxKQorCQkJcmV0dXJuIC0xOworCX0KK30KKworc3RhdGljIGludCBhcHBseV9mb3JfY2hlY2tvdXQoc3RydWN0IGFkZF9wX3N0YXRlICpzLCBzdHJ1Y3Qgc3RyYnVmICpkaWZmLAorCQkJICAgICAgaW50IGlzX3JldmVyc2UpCit7CisJY29uc3QgY2hhciAqcmV2ZXJzZSA9IGlzX3JldmVyc2UgPyAiLVIiIDogTlVMTDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGVja19pbmRleCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGVja193b3JrdHJlZSA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBhcHBseV9pbmRleCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBhcHBseV93b3JrdHJlZSA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlpbnQgYXBwbGllc19pbmRleCwgYXBwbGllc193b3JrdHJlZTsKKworCXNldHVwX2NoaWxkX3Byb2Nlc3MocywgJmNoZWNrX2luZGV4LAorCQkJICAgICJhcHBseSIsICItLWNhY2hlZCIsICItLWNoZWNrIiwgcmV2ZXJzZSwgTlVMTCk7CisJYXBwbGllc19pbmRleCA9ICFwaXBlX2NvbW1hbmQoJmNoZWNrX2luZGV4LCBkaWZmLT5idWYsIGRpZmYtPmxlbiwKKwkJCQkgICAgICBOVUxMLCAwLCBOVUxMLCAwKTsKKworCXNldHVwX2NoaWxkX3Byb2Nlc3MocywgJmNoZWNrX3dvcmt0cmVlLAorCQkJICAgICJhcHBseSIsICItLWNoZWNrIiwgcmV2ZXJzZSwgTlVMTCk7CisJYXBwbGllc193b3JrdHJlZSA9ICFwaXBlX2NvbW1hbmQoJmNoZWNrX3dvcmt0cmVlLCBkaWZmLT5idWYsIGRpZmYtPmxlbiwKKwkJCQkJIE5VTEwsIDAsIE5VTEwsIDApOworCisJaWYgKGFwcGxpZXNfd29ya3RyZWUgJiYgYXBwbGllc19pbmRleCkgeworCQlzZXR1cF9jaGlsZF9wcm9jZXNzKHMsICZhcHBseV9pbmRleCwKKwkJCQkgICAgImFwcGx5IiwgIi0tY2FjaGVkIiwgcmV2ZXJzZSwgTlVMTCk7CisJCXBpcGVfY29tbWFuZCgmYXBwbHlfaW5kZXgsIGRpZmYtPmJ1ZiwgZGlmZi0+bGVuLAorCQkJICAgICBOVUxMLCAwLCBOVUxMLCAwKTsKKworCQlzZXR1cF9jaGlsZF9wcm9jZXNzKHMsICZhcHBseV93b3JrdHJlZSwKKwkJCQkgICAgImFwcGx5IiwgcmV2ZXJzZSwgTlVMTCk7CisJCXBpcGVfY29tbWFuZCgmYXBwbHlfd29ya3RyZWUsIGRpZmYtPmJ1ZiwgZGlmZi0+bGVuLAorCQkJICAgICBOVUxMLCAwLCBOVUxMLCAwKTsKKworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoIWFwcGxpZXNfaW5kZXgpIHsKKwkJZXJyKHMsIF8oIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4ISIpKTsKKwkJaWYgKHByb21wdF95ZXNubyhzLCBfKCJBcHBseSB0aGVtIHRvIHRoZSB3b3JrdHJlZSAiCisJCQkJCSAgImFueXdheT8gIikpID4gMCkgeworCQkJc2V0dXBfY2hpbGRfcHJvY2VzcyhzLCAmYXBwbHlfd29ya3RyZWUsCisJCQkJCSAgICAiYXBwbHkiLCByZXZlcnNlLCBOVUxMKTsKKwkJCXJldHVybiBwaXBlX2NvbW1hbmQoJmFwcGx5X3dvcmt0cmVlLCBkaWZmLT5idWYsCisJCQkJCSAgICBkaWZmLT5sZW4sIE5VTEwsIDAsIE5VTEwsIDApOworCQl9CisJCWVycihzLCBfKCJOb3RoaW5nIHdhcyBhcHBsaWVkLlxuIikpOworCX0gZWxzZQorCQkvKiBBcyBhIGxhc3QgcmVzb3J0LCBzaG93IHRoZSBkaWZmIHRvIHRoZSB1c2VyICovCisJCWZ3cml0ZShkaWZmLT5idWYsIGRpZmYtPmxlbiwgMSwgc3RkZXJyKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFNVTU1BUllfSEVBREVSX1dJRFRIIDIwCisjZGVmaW5lIFNVTU1BUllfTElORV9XSURUSCA4MAorc3RhdGljIHZvaWQgc3VtbWFyaXplX2h1bmsoc3RydWN0IGFkZF9wX3N0YXRlICpzLCBzdHJ1Y3QgaHVuayAqaHVuaywKKwkJCSAgIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlzdHJ1Y3QgaHVua19oZWFkZXIgKmhlYWRlciA9ICZodW5rLT5oZWFkZXI7CisJc3RydWN0IHN0cmJ1ZiAqcGxhaW4gPSAmcy0+cGxhaW47CisJc2l6ZV90IGxlbiA9IG91dC0+bGVuLCBpOworCisJc3RyYnVmX2FkZGYob3V0LCAiIC0lbHUsJWx1ICslbHUsJWx1ICIsCisJCSAgICBoZWFkZXItPm9sZF9vZmZzZXQsIGhlYWRlci0+b2xkX2NvdW50LAorCQkgICAgaGVhZGVyLT5uZXdfb2Zmc2V0LCBoZWFkZXItPm5ld19jb3VudCk7CisJaWYgKG91dC0+bGVuIC0gbGVuIDwgU1VNTUFSWV9IRUFERVJfV0lEVEgpCisJCXN0cmJ1Zl9hZGRjaGFycyhvdXQsICcgJywKKwkJCQlTVU1NQVJZX0hFQURFUl9XSURUSCArIGxlbiAtIG91dC0+bGVuKTsKKwlmb3IgKGkgPSBodW5rLT5zdGFydDsgaSA8IGh1bmstPmVuZDsgaSA9IGZpbmRfbmV4dF9saW5lKHBsYWluLCBpKSkKKwkJaWYgKHBsYWluLT5idWZbaV0gIT0gJyAnKQorCQkJYnJlYWs7CisJaWYgKGkgPCBodW5rLT5lbmQpCisJCXN0cmJ1Zl9hZGQob3V0LCBwbGFpbi0+YnVmICsgaSwgZmluZF9uZXh0X2xpbmUocGxhaW4sIGkpIC0gaSk7CisJaWYgKG91dC0+bGVuIC0gbGVuID4gU1VNTUFSWV9MSU5FX1dJRFRIKQorCQlzdHJidWZfc2V0bGVuKG91dCwgbGVuICsgU1VNTUFSWV9MSU5FX1dJRFRIKTsKKwlzdHJidWZfY29tcGxldGVfbGluZShvdXQpOworfQorCisjZGVmaW5lIERJU1BMQVlfSFVOS1NfTElORVMgMjAKK3N0YXRpYyBzaXplX3QgZGlzcGxheV9odW5rcyhzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsCisJCQkgICAgc3RydWN0IGZpbGVfZGlmZiAqZmlsZV9kaWZmLCBzaXplX3Qgc3RhcnRfaW5kZXgpCit7CisJc2l6ZV90IGVuZF9pbmRleCA9IHN0YXJ0X2luZGV4ICsgRElTUExBWV9IVU5LU19MSU5FUzsKKworCWlmIChlbmRfaW5kZXggPiBmaWxlX2RpZmYtPmh1bmtfbnIpCisJCWVuZF9pbmRleCA9IGZpbGVfZGlmZi0+aHVua19ucjsKKworCXdoaWxlIChzdGFydF9pbmRleCA8IGVuZF9pbmRleCkgeworCQlzdHJ1Y3QgaHVuayAqaHVuayA9IGZpbGVfZGlmZi0+aHVuayArIHN0YXJ0X2luZGV4Kys7CisKKwkJc3RyYnVmX3Jlc2V0KCZzLT5idWYpOworCQlzdHJidWZfYWRkZigmcy0+YnVmLCAiJWMlMmQ6ICIsIGh1bmstPnVzZSA9PSBVU0VfSFVOSyA/ICcrJworCQkJICAgIDogaHVuay0+dXNlID09IFNLSVBfSFVOSyA/ICctJyA6ICcgJywKKwkJCSAgICAoaW50KXN0YXJ0X2luZGV4KTsKKwkJc3VtbWFyaXplX2h1bmsocywgaHVuaywgJnMtPmJ1Zik7CisJCWZwdXRzKHMtPmJ1Zi5idWYsIHN0ZG91dCk7CisJfQorCisJcmV0dXJuIGVuZF9pbmRleDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgaGVscF9wYXRjaF9yZW1haW5kZXJbXSA9CitOXygiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisgICAiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyAgICJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisgICAiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisgICAiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyAgICIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisgICAicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisgICAiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorICAgIj8gLSBwcmludCBoZWxwXG4iKTsKKworc3RhdGljIGludCBwYXRjaF91cGRhdGVfZmlsZShzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsCisJCQkgICAgIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZikKK3sKKwlzaXplX3QgaHVua19pbmRleCA9IDA7CisJc3NpemVfdCBpLCB1bmRlY2lkZWRfcHJldmlvdXMsIHVuZGVjaWRlZF9uZXh0OworCXN0cnVjdCBodW5rICpodW5rOworCWNoYXIgY2g7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJaW50IGNvbG9yZWQgPSAhIXMtPmNvbG9yZWQubGVuLCBxdWl0ID0gMDsKKwllbnVtIHByb21wdF9tb2RlX3R5cGUgcHJvbXB0X21vZGVfdHlwZTsKKworCWlmICghZmlsZV9kaWZmLT5odW5rX25yKQorCQlyZXR1cm4gMDsKKworCXN0cmJ1Zl9yZXNldCgmcy0+YnVmKTsKKwlyZW5kZXJfZGlmZl9oZWFkZXIocywgZmlsZV9kaWZmLCBjb2xvcmVkLCAmcy0+YnVmKTsKKwlmcHV0cyhzLT5idWYuYnVmLCBzdGRvdXQpOworCWZvciAoOzspIHsKKwkJaWYgKGh1bmtfaW5kZXggPj0gZmlsZV9kaWZmLT5odW5rX25yKQorCQkJaHVua19pbmRleCA9IDA7CisJCWh1bmsgPSBmaWxlX2RpZmYtPmh1bmsgKyBodW5rX2luZGV4OworCisJCXVuZGVjaWRlZF9wcmV2aW91cyA9IC0xOworCQlmb3IgKGkgPSBodW5rX2luZGV4IC0gMTsgaSA+PSAwOyBpLS0pCisJCQlpZiAoZmlsZV9kaWZmLT5odW5rW2ldLnVzZSA9PSBVTkRFQ0lERURfSFVOSykgeworCQkJCXVuZGVjaWRlZF9wcmV2aW91cyA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJdW5kZWNpZGVkX25leHQgPSAtMTsKKwkJZm9yIChpID0gaHVua19pbmRleCArIDE7IGkgPCBmaWxlX2RpZmYtPmh1bmtfbnI7IGkrKykKKwkJCWlmIChmaWxlX2RpZmYtPmh1bmtbaV0udXNlID09IFVOREVDSURFRF9IVU5LKSB7CisJCQkJdW5kZWNpZGVkX25leHQgPSBpOworCQkJCWJyZWFrOworCQkJfQorCisJCS8qIEV2ZXJ5dGhpbmcgZGVjaWRlZD8gKi8KKwkJaWYgKHVuZGVjaWRlZF9wcmV2aW91cyA8IDAgJiYgdW5kZWNpZGVkX25leHQgPCAwICYmCisJCSAgICBodW5rLT51c2UgIT0gVU5ERUNJREVEX0hVTkspCisJCQlicmVhazsKKworCQlzdHJidWZfcmVzZXQoJnMtPmJ1Zik7CisJCXJlbmRlcl9odW5rKHMsIGh1bmssIDAsIGNvbG9yZWQsICZzLT5idWYpOworCQlmcHV0cyhzLT5idWYuYnVmLCBzdGRvdXQpOworCisJCXN0cmJ1Zl9yZXNldCgmcy0+YnVmKTsKKwkJaWYgKHVuZGVjaWRlZF9wcmV2aW91cyA+PSAwKQorCQkJc3RyYnVmX2FkZHN0cigmcy0+YnVmLCAiLGsiKTsKKwkJaWYgKGh1bmtfaW5kZXgpCisJCQlzdHJidWZfYWRkc3RyKCZzLT5idWYsICIsSyIpOworCQlpZiAodW5kZWNpZGVkX25leHQgPj0gMCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnMtPmJ1ZiwgIixqIik7CisJCWlmIChodW5rX2luZGV4ICsgMSA8IGZpbGVfZGlmZi0+aHVua19ucikKKwkJCXN0cmJ1Zl9hZGRzdHIoJnMtPmJ1ZiwgIixKIik7CisJCWlmIChmaWxlX2RpZmYtPmh1bmtfbnIgPiAxKQorCQkJc3RyYnVmX2FkZHN0cigmcy0+YnVmLCAiLGcsLyIpOworCQlpZiAoaHVuay0+c3BsaXR0YWJsZV9pbnRvID4gMSkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnMtPmJ1ZiwgIixzIik7CisJCWlmIChodW5rX2luZGV4ICsgMSA+IGZpbGVfZGlmZi0+bW9kZV9jaGFuZ2UgJiYKKwkJICAgICFmaWxlX2RpZmYtPmRlbGV0ZWQpCisJCQlzdHJidWZfYWRkc3RyKCZzLT5idWYsICIsZSIpOworCisJCWlmIChmaWxlX2RpZmYtPmRlbGV0ZWQpCisJCQlwcm9tcHRfbW9kZV90eXBlID0gUFJPTVBUX0RFTEVUSU9OOworCQllbHNlIGlmIChmaWxlX2RpZmYtPm1vZGVfY2hhbmdlICYmICFodW5rX2luZGV4KQorCQkJcHJvbXB0X21vZGVfdHlwZSA9IFBST01QVF9NT0RFX0NIQU5HRTsKKwkJZWxzZQorCQkJcHJvbXB0X21vZGVfdHlwZSA9IFBST01QVF9IVU5LOworCisJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBzLT5zLnByb21wdF9jb2xvciwKKwkJCSAgICAgICIoJSJQUkl1TUFYIi8lIlBSSXVNQVgiKSAiLAorCQkJICAgICAgKHVpbnRtYXhfdClodW5rX2luZGV4ICsgMSwKKwkJCSAgICAgICh1aW50bWF4X3QpZmlsZV9kaWZmLT5odW5rX25yKTsKKwkJY29sb3JfZnByaW50ZihzdGRvdXQsIHMtPnMucHJvbXB0X2NvbG9yLAorCQkJICAgICAgXyhzLT5tb2RlLT5wcm9tcHRfbW9kZVtwcm9tcHRfbW9kZV90eXBlXSksCisJCQkgICAgICBzLT5idWYuYnVmKTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJCWlmIChyZWFkX3NpbmdsZV9jaGFyYWN0ZXIocykgPT0gRU9GKQorCQkJYnJlYWs7CisKKwkJaWYgKCFzLT5hbnN3ZXIubGVuKQorCQkJY29udGludWU7CisJCWNoID0gdG9sb3dlcihzLT5hbnN3ZXIuYnVmWzBdKTsKKwkJaWYgKGNoID09ICd5JykgeworCQkJaHVuay0+dXNlID0gVVNFX0hVTks7Citzb2Z0X2luY3JlbWVudDoKKwkJCWh1bmtfaW5kZXggPSB1bmRlY2lkZWRfbmV4dCA8IDAgPworCQkJCWZpbGVfZGlmZi0+aHVua19uciA6IHVuZGVjaWRlZF9uZXh0OworCQl9IGVsc2UgaWYgKGNoID09ICduJykgeworCQkJaHVuay0+dXNlID0gU0tJUF9IVU5LOworCQkJZ290byBzb2Z0X2luY3JlbWVudDsKKwkJfSBlbHNlIGlmIChjaCA9PSAnYScpIHsKKwkJCWZvciAoOyBodW5rX2luZGV4IDwgZmlsZV9kaWZmLT5odW5rX25yOyBodW5rX2luZGV4KyspIHsKKwkJCQlodW5rID0gZmlsZV9kaWZmLT5odW5rICsgaHVua19pbmRleDsKKwkJCQlpZiAoaHVuay0+dXNlID09IFVOREVDSURFRF9IVU5LKQorCQkJCQlodW5rLT51c2UgPSBVU0VfSFVOSzsKKwkJCX0KKwkJfSBlbHNlIGlmIChjaCA9PSAnZCcgfHwgY2ggPT0gJ3EnKSB7CisJCQlmb3IgKDsgaHVua19pbmRleCA8IGZpbGVfZGlmZi0+aHVua19ucjsgaHVua19pbmRleCsrKSB7CisJCQkJaHVuayA9IGZpbGVfZGlmZi0+aHVuayArIGh1bmtfaW5kZXg7CisJCQkJaWYgKGh1bmstPnVzZSA9PSBVTkRFQ0lERURfSFVOSykKKwkJCQkJaHVuay0+dXNlID0gU0tJUF9IVU5LOworCQkJfQorCQkJaWYgKGNoID09ICdxJykgeworCQkJCXF1aXQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgaWYgKHMtPmFuc3dlci5idWZbMF0gPT0gJ0snKSB7CisJCQlpZiAoaHVua19pbmRleCkKKwkJCQlodW5rX2luZGV4LS07CisJCQllbHNlCisJCQkJZXJyKHMsIF8oIk5vIHByZXZpb3VzIGh1bmsiKSk7CisJCX0gZWxzZSBpZiAocy0+YW5zd2VyLmJ1ZlswXSA9PSAnSicpIHsKKwkJCWlmIChodW5rX2luZGV4ICsgMSA8IGZpbGVfZGlmZi0+aHVua19ucikKKwkJCQlodW5rX2luZGV4Kys7CisJCQllbHNlCisJCQkJZXJyKHMsIF8oIk5vIG5leHQgaHVuayIpKTsKKwkJfSBlbHNlIGlmIChzLT5hbnN3ZXIuYnVmWzBdID09ICdrJykgeworCQkJaWYgKHVuZGVjaWRlZF9wcmV2aW91cyA+PSAwKQorCQkJCWh1bmtfaW5kZXggPSB1bmRlY2lkZWRfcHJldmlvdXM7CisJCQllbHNlCisJCQkJZXJyKHMsIF8oIk5vIHByZXZpb3VzIGh1bmsiKSk7CisJCX0gZWxzZSBpZiAocy0+YW5zd2VyLmJ1ZlswXSA9PSAnaicpIHsKKwkJCWlmICh1bmRlY2lkZWRfbmV4dCA+PSAwKQorCQkJCWh1bmtfaW5kZXggPSB1bmRlY2lkZWRfbmV4dDsKKwkJCWVsc2UKKwkJCQllcnIocywgXygiTm8gbmV4dCBodW5rIikpOworCQl9IGVsc2UgaWYgKHMtPmFuc3dlci5idWZbMF0gPT0gJ2cnKSB7CisJCQljaGFyICpwZW5kOworCQkJdW5zaWduZWQgbG9uZyByZXNwb25zZTsKKworCQkJaWYgKGZpbGVfZGlmZi0+aHVua19uciA8IDIpIHsKKwkJCQllcnIocywgXygiTm8gb3RoZXIgaHVua3MgdG8gZ290byIpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN0cmJ1Zl9yZW1vdmUoJnMtPmFuc3dlciwgMCwgMSk7CisJCQlzdHJidWZfdHJpbSgmcy0+YW5zd2VyKTsKKwkJCWkgPSBodW5rX2luZGV4IC0gRElTUExBWV9IVU5LU19MSU5FUyAvIDI7CisJCQlpZiAoaSA8IGZpbGVfZGlmZi0+bW9kZV9jaGFuZ2UpCisJCQkJaSA9IGZpbGVfZGlmZi0+bW9kZV9jaGFuZ2U7CisJCQl3aGlsZSAocy0+YW5zd2VyLmxlbiA9PSAwKSB7CisJCQkJaSA9IGRpc3BsYXlfaHVua3MocywgZmlsZV9kaWZmLCBpKTsKKwkJCQlwcmludGYoIiVzIiwgaSA8IGZpbGVfZGlmZi0+aHVua19uciA/CisJCQkJICAgICAgIF8oImdvIHRvIHdoaWNoIGh1bmsgKDxyZXQ+IHRvIHNlZSAiCisJCQkJCSAibW9yZSk/ICIpIDogXygiZ28gdG8gd2hpY2ggaHVuaz8gIikpOworCQkJCWZmbHVzaChzdGRvdXQpOworCQkJCWlmIChzdHJidWZfZ2V0bGluZSgmcy0+YW5zd2VyLAorCQkJCQkJICAgc3RkaW4pID09IEVPRikKKwkJCQkJYnJlYWs7CisJCQkJc3RyYnVmX3RyaW1fdHJhaWxpbmdfbmV3bGluZSgmcy0+YW5zd2VyKTsKKwkJCX0KKworCQkJc3RyYnVmX3RyaW0oJnMtPmFuc3dlcik7CisJCQlyZXNwb25zZSA9IHN0cnRvdWwocy0+YW5zd2VyLmJ1ZiwgJnBlbmQsIDEwKTsKKwkJCWlmICgqcGVuZCB8fCBwZW5kID09IHMtPmFuc3dlci5idWYpCisJCQkJZXJyKHMsIF8oIkludmFsaWQgbnVtYmVyOiAnJXMnIiksCisJCQkJICAgIHMtPmFuc3dlci5idWYpOworCQkJZWxzZSBpZiAoMCA8IHJlc3BvbnNlICYmIHJlc3BvbnNlIDw9IGZpbGVfZGlmZi0+aHVua19ucikKKwkJCQlodW5rX2luZGV4ID0gcmVzcG9uc2UgLSAxOworCQkJZWxzZQorCQkJCWVycihzLCBRXygiU29ycnksIG9ubHkgJWQgaHVuayBhdmFpbGFibGUuIiwKKwkJCQkJICAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLiIsCisJCQkJCSAgZmlsZV9kaWZmLT5odW5rX25yKSwKKwkJCQkgICAgKGludClmaWxlX2RpZmYtPmh1bmtfbnIpOworCQl9IGVsc2UgaWYgKHMtPmFuc3dlci5idWZbMF0gPT0gJy8nKSB7CisJCQlyZWdleF90IHJlZ2V4OworCQkJaW50IHJldDsKKworCQkJaWYgKGZpbGVfZGlmZi0+aHVua19uciA8IDIpIHsKKwkJCQllcnIocywgXygiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoIikpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3RyYnVmX3JlbW92ZSgmcy0+YW5zd2VyLCAwLCAxKTsKKwkJCXN0cmJ1Zl90cmltX3RyYWlsaW5nX25ld2xpbmUoJnMtPmFuc3dlcik7CisJCQlpZiAocy0+YW5zd2VyLmxlbiA9PSAwKSB7CisJCQkJcHJpbnRmKCIlcyIsIF8oInNlYXJjaCBmb3IgcmVnZXg/ICIpKTsKKwkJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCQlpZiAoc3RyYnVmX2dldGxpbmUoJnMtPmFuc3dlciwKKwkJCQkJCSAgIHN0ZGluKSA9PSBFT0YpCisJCQkJCWJyZWFrOworCQkJCXN0cmJ1Zl90cmltX3RyYWlsaW5nX25ld2xpbmUoJnMtPmFuc3dlcik7CisJCQkJaWYgKHMtPmFuc3dlci5sZW4gPT0gMCkKKwkJCQkJY29udGludWU7CisJCQl9CisJCQlyZXQgPSByZWdjb21wKCZyZWdleCwgcy0+YW5zd2VyLmJ1ZiwKKwkJCQkgICAgICBSRUdfRVhURU5ERUQgfCBSRUdfTk9TVUIgfCBSRUdfTkVXTElORSk7CisJCQlpZiAocmV0KSB7CisJCQkJY2hhciBlcnJidWZbMTAyNF07CisKKwkJCQlyZWdlcnJvcihyZXQsICZyZWdleCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CisJCQkJZXJyKHMsIF8oIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlcyIpLAorCQkJCSAgICBzLT5hbnN3ZXIuYnVmLCBlcnJidWYpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaSA9IGh1bmtfaW5kZXg7CisJCQlmb3IgKDs7KSB7CisJCQkJLyogcmVuZGVyIHRoZSBodW5rIGludG8gYSBzY3JhdGNoIGJ1ZmZlciAqLworCQkJCXJlbmRlcl9odW5rKHMsIGZpbGVfZGlmZi0+aHVuayArIGksIDAsIDAsCisJCQkJCSAgICAmcy0+YnVmKTsKKwkJCQlpZiAocmVnZXhlYygmcmVnZXgsIHMtPmJ1Zi5idWYsIDAsIE5VTEwsIDApCisJCQkJICAgICE9IFJFR19OT01BVENIKQorCQkJCQlicmVhazsKKwkJCQlpKys7CisJCQkJaWYgKGkgPT0gZmlsZV9kaWZmLT5odW5rX25yKQorCQkJCQlpID0gMDsKKwkJCQlpZiAoaSAhPSBodW5rX2luZGV4KQorCQkJCQljb250aW51ZTsKKwkJCQllcnIocywgXygiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuIikpOworCQkJCWJyZWFrOworCQkJfQorCQkJaHVua19pbmRleCA9IGk7CisJCX0gZWxzZSBpZiAocy0+YW5zd2VyLmJ1ZlswXSA9PSAncycpIHsKKwkJCXNpemVfdCBzcGxpdHRhYmxlX2ludG8gPSBodW5rLT5zcGxpdHRhYmxlX2ludG87CisJCQlpZiAoc3BsaXR0YWJsZV9pbnRvIDwgMikKKwkJCQllcnIocywgXygiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmsiKSk7CisJCQllbHNlIGlmICghc3BsaXRfaHVuayhzLCBmaWxlX2RpZmYsCisJCQkJCSAgICAgaHVuayAtIGZpbGVfZGlmZi0+aHVuaykpCisJCQkJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPnMuaGVhZGVyX2NvbG9yLAorCQkJCQkJIF8oIlNwbGl0IGludG8gJWQgaHVua3MuIiksCisJCQkJCQkgKGludClzcGxpdHRhYmxlX2ludG8pOworCQl9IGVsc2UgaWYgKHMtPmFuc3dlci5idWZbMF0gPT0gJ2UnKSB7CisJCQlpZiAoaHVua19pbmRleCArIDEgPT0gZmlsZV9kaWZmLT5tb2RlX2NoYW5nZSkKKwkJCQllcnIocywgXygiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVuayIpKTsKKwkJCWVsc2UgaWYgKGVkaXRfaHVua19sb29wKHMsIGZpbGVfZGlmZiwgaHVuaykgPj0gMCkgeworCQkJCWh1bmstPnVzZSA9IFVTRV9IVU5LOworCQkJCWdvdG8gc29mdF9pbmNyZW1lbnQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQljb25zdCBjaGFyICpwID0gXyhoZWxwX3BhdGNoX3JlbWFpbmRlciksICplb2wgPSBwOworCisJCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgcy0+cy5oZWxwX2NvbG9yLCAiJXMiLAorCQkJCSAgICAgIF8ocy0+bW9kZS0+aGVscF9wYXRjaF90ZXh0KSk7CisKKwkJCS8qCisJCQkgKiBTaG93IG9ubHkgdGhvc2UgbGluZXMgb2YgdGhlIHJlbWFpbmRlciB0aGF0IGFyZQorCQkJICogYWN0dWFsbHkgYXBwbGljYWJsZSB3aXRoIHRoZSBjdXJyZW50IGh1bmsuCisJCQkgKi8KKwkJCWZvciAoOyAqcDsgcCA9IGVvbCArICgqZW9sID09ICdcbicpKSB7CisJCQkJZW9sID0gc3RyY2hybnVsKHAsICdcbicpOworCisJCQkJLyoKKwkJCQkgKiBgcy0+YnVmYCBzdGlsbCBjb250YWlucyB0aGUgcGFydCBvZiB0aGUKKwkJCQkgKiBjb21tYW5kcyBzaG93biBpbiB0aGUgcHJvbXB0IHRoYXQgYXJlIG5vdAorCQkJCSAqIGFsd2F5cyBhdmFpbGFibGUuCisJCQkJICovCisJCQkJaWYgKCpwICE9ICc/JyAmJiAhc3RyY2hyKHMtPmJ1Zi5idWYsICpwKSkKKwkJCQkJY29udGludWU7CisKKwkJCQljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+cy5oZWxwX2NvbG9yLAorCQkJCQkJICIlLipzIiwgKGludCkoZW9sIC0gcCksIHApOworCQkJfQorCQl9CisJfQorCisJLyogQW55IGh1bmsgdG8gYmUgdXNlZD8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgZmlsZV9kaWZmLT5odW5rX25yOyBpKyspCisJCWlmIChmaWxlX2RpZmYtPmh1bmtbaV0udXNlID09IFVTRV9IVU5LKQorCQkJYnJlYWs7CisKKwlpZiAoaSA8IGZpbGVfZGlmZi0+aHVua19ucikgeworCQkvKiBBdCBsZWFzdCBvbmUgaHVuayBzZWxlY3RlZDogYXBwbHkgKi8KKwkJc3RyYnVmX3Jlc2V0KCZzLT5idWYpOworCQlyZWFzc2VtYmxlX3BhdGNoKHMsIGZpbGVfZGlmZiwgMCwgJnMtPmJ1Zik7CisKKwkJZGlzY2FyZF9pbmRleChzLT5zLnItPmluZGV4KTsKKwkJaWYgKHMtPm1vZGUtPmFwcGx5X2Zvcl9jaGVja291dCkKKwkJCWFwcGx5X2Zvcl9jaGVja291dChzLCAmcy0+YnVmLAorCQkJCQkgICBzLT5tb2RlLT5pc19yZXZlcnNlKTsKKwkJZWxzZSB7CisJCQlzZXR1cF9jaGlsZF9wcm9jZXNzKHMsICZjcCwgImFwcGx5IiwgTlVMTCk7CisJCQlhcmd2X2FycmF5X3B1c2h2KCZjcC5hcmdzLCBzLT5tb2RlLT5hcHBseV9hcmdzKTsKKwkJCWlmIChwaXBlX2NvbW1hbmQoJmNwLCBzLT5idWYuYnVmLCBzLT5idWYubGVuLAorCQkJCQkgTlVMTCwgMCwgTlVMTCwgMCkpCisJCQkJZXJyb3IoXygiJ2dpdCBhcHBseScgZmFpbGVkIikpOworCQl9CisJCWlmICghcmVwb19yZWFkX2luZGV4KHMtPnMucikpCisJCQlyZXBvX3JlZnJlc2hfYW5kX3dyaXRlX2luZGV4KHMtPnMuciwgUkVGUkVTSF9RVUlFVCwgMCwKKwkJCQkJCSAgICAgMSwgTlVMTCwgTlVMTCwgTlVMTCk7CisJfQorCisJcHV0Y2hhcignXG4nKTsKKwlyZXR1cm4gcXVpdDsKK30KKworaW50IHJ1bl9hZGRfcChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgZW51bSBhZGRfcF9tb2RlIG1vZGUsCisJICAgICAgY29uc3QgY2hhciAqcmV2aXNpb24sIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpCit7CisJc3RydWN0IGFkZF9wX3N0YXRlIHMgPSB7CisJCXsgciB9LCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVAorCX07CisJc2l6ZV90IGksIGJpbmFyeV9jb3VudCA9IDA7CisKKwlpbml0X2FkZF9pX3N0YXRlKCZzLnMsIHIpOworCisJaWYgKG1vZGUgPT0gQUREX1BfU1RBU0gpCisJCXMubW9kZSA9ICZwYXRjaF9tb2RlX3N0YXNoOworCWVsc2UgaWYgKG1vZGUgPT0gQUREX1BfUkVTRVQpIHsKKwkJaWYgKCFyZXZpc2lvbiB8fCAhc3RyY21wKHJldmlzaW9uLCAiSEVBRCIpKQorCQkJcy5tb2RlID0gJnBhdGNoX21vZGVfcmVzZXRfaGVhZDsKKwkJZWxzZQorCQkJcy5tb2RlID0gJnBhdGNoX21vZGVfcmVzZXRfbm90aGVhZDsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gQUREX1BfQ0hFQ0tPVVQpIHsKKwkJaWYgKCFyZXZpc2lvbikKKwkJCXMubW9kZSA9ICZwYXRjaF9tb2RlX2NoZWNrb3V0X2luZGV4OworCQllbHNlIGlmICghc3RyY21wKHJldmlzaW9uLCAiSEVBRCIpKQorCQkJcy5tb2RlID0gJnBhdGNoX21vZGVfY2hlY2tvdXRfaGVhZDsKKwkJZWxzZQorCQkJcy5tb2RlID0gJnBhdGNoX21vZGVfY2hlY2tvdXRfbm90aGVhZDsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gQUREX1BfV09SS1RSRUUpIHsKKwkJaWYgKCFyZXZpc2lvbikKKwkJCXMubW9kZSA9ICZwYXRjaF9tb2RlX2NoZWNrb3V0X2luZGV4OworCQllbHNlIGlmICghc3RyY21wKHJldmlzaW9uLCAiSEVBRCIpKQorCQkJcy5tb2RlID0gJnBhdGNoX21vZGVfd29ya3RyZWVfaGVhZDsKKwkJZWxzZQorCQkJcy5tb2RlID0gJnBhdGNoX21vZGVfd29ya3RyZWVfbm90aGVhZDsKKwl9IGVsc2UKKwkJcy5tb2RlID0gJnBhdGNoX21vZGVfYWRkOworCXMucmV2aXNpb24gPSByZXZpc2lvbjsKKworCWlmIChkaXNjYXJkX2luZGV4KHItPmluZGV4KSA8IDAgfHwgcmVwb19yZWFkX2luZGV4KHIpIDwgMCB8fAorCSAgICAoIXMubW9kZS0+aW5kZXhfb25seSAmJgorCSAgICAgcmVwb19yZWZyZXNoX2FuZF93cml0ZV9pbmRleChyLCBSRUZSRVNIX1FVSUVULCAwLCAxLAorCQkJCQkgIE5VTEwsIE5VTEwsIE5VTEwpIDwgMCkgfHwKKwkgICAgcGFyc2VfZGlmZigmcywgcHMpIDwgMCkgeworCQlzdHJidWZfcmVsZWFzZSgmcy5wbGFpbik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzLmNvbG9yZWQpOworCQljbGVhcl9hZGRfaV9zdGF0ZSgmcy5zKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzLmZpbGVfZGlmZl9ucjsgaSsrKQorCQlpZiAocy5maWxlX2RpZmZbaV0uYmluYXJ5ICYmICFzLmZpbGVfZGlmZltpXS5odW5rX25yKQorCQkJYmluYXJ5X2NvdW50Kys7CisJCWVsc2UgaWYgKHBhdGNoX3VwZGF0ZV9maWxlKCZzLCBzLmZpbGVfZGlmZiArIGkpKQorCQkJYnJlYWs7CisKKwlpZiAocy5maWxlX2RpZmZfbnIgPT0gMCkKKwkJZnByaW50ZihzdGRlcnIsIF8oIk5vIGNoYW5nZXMuXG4iKSk7CisJZWxzZSBpZiAoYmluYXJ5X2NvdW50ID09IHMuZmlsZV9kaWZmX25yKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIpKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzLmFuc3dlcik7CisJc3RyYnVmX3JlbGVhc2UoJnMuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmcy5wbGFpbik7CisJc3RyYnVmX3JlbGVhc2UoJnMuY29sb3JlZCk7CisJY2xlYXJfYWRkX2lfc3RhdGUoJnMucyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZHZpY2UuYyBiL2FkdmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYTNkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9hZHZpY2UuYwpAQCAtMCwwICsxLDMwNSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJoZWxwLmgiCisKK2ludCBhZHZpY2VfZmV0Y2hfc2hvd19mb3JjZWRfdXBkYXRlcyA9IDE7CitpbnQgYWR2aWNlX3B1c2hfdXBkYXRlX3JlamVjdGVkID0gMTsKK2ludCBhZHZpY2VfcHVzaF9ub25fZmZfY3VycmVudCA9IDE7CitpbnQgYWR2aWNlX3B1c2hfbm9uX2ZmX21hdGNoaW5nID0gMTsKK2ludCBhZHZpY2VfcHVzaF9hbHJlYWR5X2V4aXN0cyA9IDE7CitpbnQgYWR2aWNlX3B1c2hfZmV0Y2hfZmlyc3QgPSAxOworaW50IGFkdmljZV9wdXNoX25lZWRzX2ZvcmNlID0gMTsKK2ludCBhZHZpY2VfcHVzaF91bnF1YWxpZmllZF9yZWZfbmFtZSA9IDE7CitpbnQgYWR2aWNlX3N0YXR1c19oaW50cyA9IDE7CitpbnQgYWR2aWNlX3N0YXR1c191X29wdGlvbiA9IDE7CitpbnQgYWR2aWNlX3N0YXR1c19haGVhZF9iZWhpbmRfd2FybmluZyA9IDE7CitpbnQgYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UgPSAxOworaW50IGFkdmljZV9yZXNldF9xdWlldF93YXJuaW5nID0gMTsKK2ludCBhZHZpY2VfcmVzb2x2ZV9jb25mbGljdCA9IDE7CitpbnQgYWR2aWNlX3NlcXVlbmNlcl9pbl91c2UgPSAxOworaW50IGFkdmljZV9pbXBsaWNpdF9pZGVudGl0eSA9IDE7CitpbnQgYWR2aWNlX2RldGFjaGVkX2hlYWQgPSAxOworaW50IGFkdmljZV9zZXRfdXBzdHJlYW1fZmFpbHVyZSA9IDE7CitpbnQgYWR2aWNlX29iamVjdF9uYW1lX3dhcm5pbmcgPSAxOworaW50IGFkdmljZV9hbXdvcmtkaXIgPSAxOworaW50IGFkdmljZV9ybV9oaW50cyA9IDE7CitpbnQgYWR2aWNlX2FkZF9lbWJlZGRlZF9yZXBvID0gMTsKK2ludCBhZHZpY2VfaWdub3JlZF9ob29rID0gMTsKK2ludCBhZHZpY2Vfd2FpdGluZ19mb3JfZWRpdG9yID0gMTsKK2ludCBhZHZpY2VfZ3JhZnRfZmlsZV9kZXByZWNhdGVkID0gMTsKK2ludCBhZHZpY2VfY2hlY2tvdXRfYW1iaWd1b3VzX3JlbW90ZV9icmFuY2hfbmFtZSA9IDE7CitpbnQgYWR2aWNlX3N1Ym1vZHVsZV9hbHRlcm5hdGVfZXJyb3Jfc3RyYXRlZ3lfZGllID0gMTsKK2ludCBhZHZpY2VfYWRkX2lnbm9yZWRfZmlsZSA9IDE7CitpbnQgYWR2aWNlX2FkZF9lbXB0eV9wYXRoc3BlYyA9IDE7CisKK3N0YXRpYyBpbnQgYWR2aWNlX3VzZV9jb2xvciA9IC0xOworc3RhdGljIGNoYXIgYWR2aWNlX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CisJR0lUX0NPTE9SX1JFU0VULAorCUdJVF9DT0xPUl9ZRUxMT1csCS8qIEhJTlQgKi8KK307CisKK2VudW0gY29sb3JfYWR2aWNlIHsKKwlBRFZJQ0VfQ09MT1JfUkVTRVQgPSAwLAorCUFEVklDRV9DT0xPUl9ISU5UID0gMSwKK307CisKK3N0YXRpYyBpbnQgcGFyc2VfYWR2aXNlX2NvbG9yX3Nsb3QoY29uc3QgY2hhciAqc2xvdCkKK3sKKwlpZiAoIXN0cmNhc2VjbXAoc2xvdCwgInJlc2V0IikpCisJCXJldHVybiBBRFZJQ0VfQ09MT1JfUkVTRVQ7CisJaWYgKCFzdHJjYXNlY21wKHNsb3QsICJoaW50IikpCisJCXJldHVybiBBRFZJQ0VfQ09MT1JfSElOVDsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICphZHZpc2VfZ2V0X2NvbG9yKGVudW0gY29sb3JfYWR2aWNlIGl4KQoreworCWlmICh3YW50X2NvbG9yX3N0ZGVycihhZHZpY2VfdXNlX2NvbG9yKSkKKwkJcmV0dXJuIGFkdmljZV9jb2xvcnNbaXhdOworCXJldHVybiAiIjsKK30KKworc3RhdGljIHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKnByZWZlcmVuY2U7Cit9IGFkdmljZV9jb25maWdbXSA9IHsKKwl7ICJmZXRjaFNob3dGb3JjZWRVcGRhdGVzIiwgJmFkdmljZV9mZXRjaF9zaG93X2ZvcmNlZF91cGRhdGVzIH0sCisJeyAicHVzaFVwZGF0ZVJlamVjdGVkIiwgJmFkdmljZV9wdXNoX3VwZGF0ZV9yZWplY3RlZCB9LAorCXsgInB1c2hOb25GRkN1cnJlbnQiLCAmYWR2aWNlX3B1c2hfbm9uX2ZmX2N1cnJlbnQgfSwKKwl7ICJwdXNoTm9uRkZNYXRjaGluZyIsICZhZHZpY2VfcHVzaF9ub25fZmZfbWF0Y2hpbmcgfSwKKwl7ICJwdXNoQWxyZWFkeUV4aXN0cyIsICZhZHZpY2VfcHVzaF9hbHJlYWR5X2V4aXN0cyB9LAorCXsgInB1c2hGZXRjaEZpcnN0IiwgJmFkdmljZV9wdXNoX2ZldGNoX2ZpcnN0IH0sCisJeyAicHVzaE5lZWRzRm9yY2UiLCAmYWR2aWNlX3B1c2hfbmVlZHNfZm9yY2UgfSwKKwl7ICJwdXNoVW5xdWFsaWZpZWRSZWZOYW1lIiwgJmFkdmljZV9wdXNoX3VucXVhbGlmaWVkX3JlZl9uYW1lIH0sCisJeyAic3RhdHVzSGludHMiLCAmYWR2aWNlX3N0YXR1c19oaW50cyB9LAorCXsgInN0YXR1c1VvcHRpb24iLCAmYWR2aWNlX3N0YXR1c191X29wdGlvbiB9LAorCXsgInN0YXR1c0FoZWFkQmVoaW5kV2FybmluZyIsICZhZHZpY2Vfc3RhdHVzX2FoZWFkX2JlaGluZF93YXJuaW5nIH0sCisJeyAiY29tbWl0QmVmb3JlTWVyZ2UiLCAmYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UgfSwKKwl7ICJyZXNldFF1aWV0IiwgJmFkdmljZV9yZXNldF9xdWlldF93YXJuaW5nIH0sCisJeyAicmVzb2x2ZUNvbmZsaWN0IiwgJmFkdmljZV9yZXNvbHZlX2NvbmZsaWN0IH0sCisJeyAic2VxdWVuY2VySW5Vc2UiLCAmYWR2aWNlX3NlcXVlbmNlcl9pbl91c2UgfSwKKwl7ICJpbXBsaWNpdElkZW50aXR5IiwgJmFkdmljZV9pbXBsaWNpdF9pZGVudGl0eSB9LAorCXsgImRldGFjaGVkSGVhZCIsICZhZHZpY2VfZGV0YWNoZWRfaGVhZCB9LAorCXsgInNldFVwc3RyZWFtRmFpbHVyZSIsICZhZHZpY2Vfc2V0X3Vwc3RyZWFtX2ZhaWx1cmUgfSwKKwl7ICJvYmplY3ROYW1lV2FybmluZyIsICZhZHZpY2Vfb2JqZWN0X25hbWVfd2FybmluZyB9LAorCXsgImFtV29ya0RpciIsICZhZHZpY2VfYW13b3JrZGlyIH0sCisJeyAicm1IaW50cyIsICZhZHZpY2Vfcm1faGludHMgfSwKKwl7ICJhZGRFbWJlZGRlZFJlcG8iLCAmYWR2aWNlX2FkZF9lbWJlZGRlZF9yZXBvIH0sCisJeyAiaWdub3JlZEhvb2siLCAmYWR2aWNlX2lnbm9yZWRfaG9vayB9LAorCXsgIndhaXRpbmdGb3JFZGl0b3IiLCAmYWR2aWNlX3dhaXRpbmdfZm9yX2VkaXRvciB9LAorCXsgImdyYWZ0RmlsZURlcHJlY2F0ZWQiLCAmYWR2aWNlX2dyYWZ0X2ZpbGVfZGVwcmVjYXRlZCB9LAorCXsgImNoZWNrb3V0QW1iaWd1b3VzUmVtb3RlQnJhbmNoTmFtZSIsICZhZHZpY2VfY2hlY2tvdXRfYW1iaWd1b3VzX3JlbW90ZV9icmFuY2hfbmFtZSB9LAorCXsgInN1Ym1vZHVsZUFsdGVybmF0ZUVycm9yU3RyYXRlZ3lEaWUiLCAmYWR2aWNlX3N1Ym1vZHVsZV9hbHRlcm5hdGVfZXJyb3Jfc3RyYXRlZ3lfZGllIH0sCisJeyAiYWRkSWdub3JlZEZpbGUiLCAmYWR2aWNlX2FkZF9pZ25vcmVkX2ZpbGUgfSwKKwl7ICJhZGRFbXB0eVBhdGhzcGVjIiwgJmFkdmljZV9hZGRfZW1wdHlfcGF0aHNwZWMgfSwKKworCS8qIG1ha2UgdGhpcyBhbiBhbGlhcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworCXsgInB1c2hOb25GYXN0Rm9yd2FyZCIsICZhZHZpY2VfcHVzaF91cGRhdGVfcmVqZWN0ZWQgfQorfTsKKworc3RhdGljIHN0cnVjdCB7CisJY29uc3QgY2hhciAqa2V5OworCWludCBlbmFibGVkOworfSBhZHZpY2Vfc2V0dGluZ1tdID0geworCVtBRFZJQ0VfQUREX0VNQkVEREVEX1JFUE9dCQkJPSB7ICJhZGRFbWJlZGRlZFJlcG8iLCAxIH0sCisJW0FEVklDRV9BTV9XT1JLX0RJUl0gCQkJCT0geyAiYW1Xb3JrRGlyIiwgMSB9LAorCVtBRFZJQ0VfQ0hFQ0tPVVRfQU1CSUdVT1VTX1JFTU9URV9CUkFOQ0hfTkFNRV0gCT0geyAiY2hlY2tvdXRBbWJpZ3VvdXNSZW1vdGVCcmFuY2hOYW1lIiwgMSB9LAorCVtBRFZJQ0VfQ09NTUlUX0JFRk9SRV9NRVJHRV0JCQk9IHsgImNvbW1pdEJlZm9yZU1lcmdlIiwgMSB9LAorCVtBRFZJQ0VfREVUQUNIRURfSEVBRF0JCQkJPSB7ICJkZXRhY2hlZEhlYWQiLCAxIH0sCisJW0FEVklDRV9GRVRDSF9TSE9XX0ZPUkNFRF9VUERBVEVTXQkJPSB7ICJmZXRjaFNob3dGb3JjZWRVcGRhdGVzIiwgMSB9LAorCVtBRFZJQ0VfR1JBRlRfRklMRV9ERVBSRUNBVEVEXQkJCT0geyAiZ3JhZnRGaWxlRGVwcmVjYXRlZCIsIDEgfSwKKwlbQURWSUNFX0lHTk9SRURfSE9PS10JCQkJPSB7ICJpZ25vcmVkSG9vayIsIDEgfSwKKwlbQURWSUNFX0lNUExJQ0lUX0lERU5USVRZXQkJCT0geyAiaW1wbGljaXRJZGVudGl0eSIsIDEgfSwKKwlbQURWSUNFX05FU1RFRF9UQUddCQkJCT0geyAibmVzdGVkVGFnIiwgMSB9LAorCVtBRFZJQ0VfT0JKRUNUX05BTUVfV0FSTklOR10JCQk9IHsgIm9iamVjdE5hbWVXYXJuaW5nIiwgMSB9LAorCVtBRFZJQ0VfUFVTSF9BTFJFQURZX0VYSVNUU10JCQk9IHsgInB1c2hBbHJlYWR5RXhpc3RzIiwgMSB9LAorCVtBRFZJQ0VfUFVTSF9GRVRDSF9GSVJTVF0JCQk9IHsgInB1c2hGZXRjaEZpcnN0IiwgMSB9LAorCVtBRFZJQ0VfUFVTSF9ORUVEU19GT1JDRV0JCQk9IHsgInB1c2hOZWVkc0ZvcmNlIiwgMSB9LAorCisJLyogbWFrZSB0aGlzIGFuIGFsaWFzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisJW0FEVklDRV9QVVNIX1VQREFURV9SRUpFQ1RFRF9BTElBU10JCT0geyAicHVzaE5vbkZhc3RGb3J3YXJkIiwgMSB9LAorCisJW0FEVklDRV9QVVNIX05PTl9GRl9DVVJSRU5UXQkJCT0geyAicHVzaE5vbkZGQ3VycmVudCIsIDEgfSwKKwlbQURWSUNFX1BVU0hfTk9OX0ZGX01BVENISU5HXQkJCT0geyAicHVzaE5vbkZGTWF0Y2hpbmciLCAxIH0sCisJW0FEVklDRV9QVVNIX1VOUVVBTElGSUVEX1JFRl9OQU1FXQkJPSB7ICJwdXNoVW5xdWFsaWZpZWRSZWZOYW1lIiwgMSB9LAorCVtBRFZJQ0VfUFVTSF9VUERBVEVfUkVKRUNURURdCQkJPSB7ICJwdXNoVXBkYXRlUmVqZWN0ZWQiLCAxIH0sCisJW0FEVklDRV9SRVNFVF9RVUlFVF9XQVJOSU5HXQkJCT0geyAicmVzZXRRdWlldCIsIDEgfSwKKwlbQURWSUNFX1JFU09MVkVfQ09ORkxJQ1RdCQkJPSB7ICJyZXNvbHZlQ29uZmxpY3QiLCAxIH0sCisJW0FEVklDRV9STV9ISU5UU10JCQkJPSB7ICJybUhpbnRzIiwgMSB9LAorCVtBRFZJQ0VfU0VRVUVOQ0VSX0lOX1VTRV0JCQk9IHsgInNlcXVlbmNlckluVXNlIiwgMSB9LAorCVtBRFZJQ0VfU0VUX1VQU1RSRUFNX0ZBSUxVUkVdCQkJPSB7ICJzZXRVcHN0cmVhbUZhaWx1cmUiLCAxIH0sCisJW0FEVklDRV9TVEFUVVNfQUhFQURfQkVISU5EX1dBUk5JTkddCQk9IHsgInN0YXR1c0FoZWFkQmVoaW5kV2FybmluZyIsIDEgfSwKKwlbQURWSUNFX1NUQVRVU19ISU5UU10JCQkJPSB7ICJzdGF0dXNIaW50cyIsIDEgfSwKKwlbQURWSUNFX1NUQVRVU19VX09QVElPTl0JCQk9IHsgInN0YXR1c1VvcHRpb24iLCAxIH0sCisJW0FEVklDRV9TVUJNT0RVTEVfQUxURVJOQVRFX0VSUk9SX1NUUkFURUdZX0RJRV0gPSB7ICJzdWJtb2R1bGVBbHRlcm5hdGVFcnJvclN0cmF0ZWd5RGllIiwgMSB9LAorCVtBRFZJQ0VfV0FJVElOR19GT1JfRURJVE9SXQkJCT0geyAid2FpdGluZ0ZvckVkaXRvciIsIDEgfSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIHR1cm5fb2ZmX2luc3RydWN0aW9uc1tdID0KK05fKCJcbiIKKyAgICJEaXNhYmxlIHRoaXMgbWVzc2FnZSB3aXRoIFwiZ2l0IGNvbmZpZyBhZHZpY2UuJXMgZmFsc2VcIiIpOworCitzdGF0aWMgdm9pZCB2YWR2aXNlKGNvbnN0IGNoYXIgKmFkdmljZSwgaW50IGRpc3BsYXlfaW5zdHJ1Y3Rpb25zLAorCQkgICAgY29uc3QgY2hhciAqa2V5LCB2YV9saXN0IHBhcmFtcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmNwLCAqbnA7CisKKwlzdHJidWZfdmFkZGYoJmJ1ZiwgYWR2aWNlLCBwYXJhbXMpOworCisJaWYgKGRpc3BsYXlfaW5zdHJ1Y3Rpb25zKQorCQlzdHJidWZfYWRkZigmYnVmLCB0dXJuX29mZl9pbnN0cnVjdGlvbnMsIGtleSk7CisKKwlmb3IgKGNwID0gYnVmLmJ1ZjsgKmNwOyBjcCA9IG5wKSB7CisJCW5wID0gc3RyY2hybnVsKGNwLCAnXG4nKTsKKwkJZnByaW50ZihzdGRlcnIsCV8oIiVzaGludDogJS4qcyVzXG4iKSwKKwkJCWFkdmlzZV9nZXRfY29sb3IoQURWSUNFX0NPTE9SX0hJTlQpLAorCQkJKGludCkobnAgLSBjcCksIGNwLAorCQkJYWR2aXNlX2dldF9jb2xvcihBRFZJQ0VfQ09MT1JfUkVTRVQpKTsKKwkJaWYgKCpucCkKKwkJCW5wKys7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCit2b2lkIGFkdmlzZShjb25zdCBjaGFyICphZHZpY2UsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKwl2YV9zdGFydChwYXJhbXMsIGFkdmljZSk7CisJdmFkdmlzZShhZHZpY2UsIDAsICIiLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCitpbnQgYWR2aWNlX2VuYWJsZWQoZW51bSBhZHZpY2VfdHlwZSB0eXBlKQoreworCXN3aXRjaCh0eXBlKSB7CisJY2FzZSBBRFZJQ0VfUFVTSF9VUERBVEVfUkVKRUNURUQ6CisJCXJldHVybiBhZHZpY2Vfc2V0dGluZ1tBRFZJQ0VfUFVTSF9VUERBVEVfUkVKRUNURURdLmVuYWJsZWQgJiYKKwkJICAgICAgIGFkdmljZV9zZXR0aW5nW0FEVklDRV9QVVNIX1VQREFURV9SRUpFQ1RFRF9BTElBU10uZW5hYmxlZDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gYWR2aWNlX3NldHRpbmdbdHlwZV0uZW5hYmxlZDsKKwl9Cit9CisKK3ZvaWQgYWR2aXNlX2lmX2VuYWJsZWQoZW51bSBhZHZpY2VfdHlwZSB0eXBlLCBjb25zdCBjaGFyICphZHZpY2UsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKworCWlmICghYWR2aWNlX2VuYWJsZWQodHlwZSkpCisJCXJldHVybjsKKworCXZhX3N0YXJ0KHBhcmFtcywgYWR2aWNlKTsKKwl2YWR2aXNlKGFkdmljZSwgMSwgYWR2aWNlX3NldHRpbmdbdHlwZV0ua2V5LCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCitpbnQgZ2l0X2RlZmF1bHRfYWR2aWNlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWNvbnN0IGNoYXIgKmssICpzbG90X25hbWU7CisJaW50IGk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5hZHZpY2UiKSkgeworCQlhZHZpY2VfdXNlX2NvbG9yID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChza2lwX3ByZWZpeCh2YXIsICJjb2xvci5hZHZpY2UuIiwgJnNsb3RfbmFtZSkpIHsKKwkJaW50IHNsb3QgPSBwYXJzZV9hZHZpc2VfY29sb3Jfc2xvdChzbG90X25hbWUpOworCQlpZiAoc2xvdCA8IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlyZXR1cm4gY29sb3JfcGFyc2UodmFsdWUsIGFkdmljZV9jb2xvcnNbc2xvdF0pOworCX0KKworCWlmICghc2tpcF9wcmVmaXgodmFyLCAiYWR2aWNlLiIsICZrKSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhZHZpY2VfY29uZmlnKTsgaSsrKSB7CisJCWlmIChzdHJjYXNlY21wKGssIGFkdmljZV9jb25maWdbaV0ubmFtZSkpCisJCQljb250aW51ZTsKKwkJKmFkdmljZV9jb25maWdbaV0ucHJlZmVyZW5jZSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJYnJlYWs7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWR2aWNlX3NldHRpbmcpOyBpKyspIHsKKwkJaWYgKHN0cmNhc2VjbXAoaywgYWR2aWNlX3NldHRpbmdbaV0ua2V5KSkKKwkJCWNvbnRpbnVlOworCQlhZHZpY2Vfc2V0dGluZ1tpXS5lbmFibGVkID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsaXN0X2NvbmZpZ19hZHZpY2VzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWR2aWNlX3NldHRpbmcpOyBpKyspCisJCWxpc3RfY29uZmlnX2l0ZW0obGlzdCwgcHJlZml4LCBhZHZpY2Vfc2V0dGluZ1tpXS5rZXkpOworfQorCitpbnQgZXJyb3JfcmVzb2x2ZV9jb25mbGljdChjb25zdCBjaGFyICptZSkKK3sKKwlpZiAoIXN0cmNtcChtZSwgImNoZXJyeS1waWNrIikpCisJCWVycm9yKF8oIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIpKTsKKwllbHNlIGlmICghc3RyY21wKG1lLCAiY29tbWl0IikpCisJCWVycm9yKF8oIkNvbW1pdHRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIikpOworCWVsc2UgaWYgKCFzdHJjbXAobWUsICJtZXJnZSIpKQorCQllcnJvcihfKCJNZXJnaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIpKTsKKwllbHNlIGlmICghc3RyY21wKG1lLCAicHVsbCIpKQorCQllcnJvcihfKCJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIpKTsKKwllbHNlIGlmICghc3RyY21wKG1lLCAicmV2ZXJ0IikpCisJCWVycm9yKF8oIlJldmVydGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iKSk7CisJZWxzZQorCQllcnJvcihfKCJJdCBpcyBub3QgcG9zc2libGUgdG8gJXMgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iKSwKKwkJCW1lKTsKKworCWlmIChhZHZpY2VfcmVzb2x2ZV9jb25mbGljdCkKKwkJLyoKKwkJICogTWVzc2FnZSB1c2VkIGJvdGggd2hlbiAnZ2l0IGNvbW1pdCcgZmFpbHMgYW5kIHdoZW4KKwkJICogb3RoZXIgY29tbWFuZHMgZG9pbmcgYSBtZXJnZSBkby4KKwkJICovCisJCWFkdmlzZShfKCJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorCQkJICJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIikpOworCXJldHVybiAtMTsKK30KKwordm9pZCBOT1JFVFVSTiBkaWVfcmVzb2x2ZV9jb25mbGljdChjb25zdCBjaGFyICptZSkKK3sKKwllcnJvcl9yZXNvbHZlX2NvbmZsaWN0KG1lKTsKKwlkaWUoXygiRXhpdGluZyBiZWNhdXNlIG9mIGFuIHVucmVzb2x2ZWQgY29uZmxpY3QuIikpOworfQorCit2b2lkIE5PUkVUVVJOIGRpZV9jb25jbHVkZV9tZXJnZSh2b2lkKQoreworCWVycm9yKF8oIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIpKTsKKwlpZiAoYWR2aWNlX3Jlc29sdmVfY29uZmxpY3QpCisJCWFkdmlzZShfKCJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIG1lcmdpbmcuIikpOworCWRpZShfKCJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iKSk7Cit9CisKK3ZvaWQgZGV0YWNoX2FkdmljZShjb25zdCBjaGFyICpuZXdfbmFtZSkKK3sKKwljb25zdCBjaGFyICpmbXQgPQorCV8oIk5vdGU6IHN3aXRjaGluZyB0byAnJXMnLlxuIgorCSJcbiIKKwkiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisJImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKKwkic3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHN3aXRjaGluZyBiYWNrIHRvIGEgYnJhbmNoLlxuIgorCSJcbiIKKwkiSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCB0byByZXRhaW4gY29tbWl0cyB5b3UgY3JlYXRlLCB5b3UgbWF5XG4iCisJImRvIHNvIChub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1jIHdpdGggdGhlIHN3aXRjaCBjb21tYW5kLiBFeGFtcGxlOlxuIgorCSJcbiIKKwkiICBnaXQgc3dpdGNoIC1jIDxuZXctYnJhbmNoLW5hbWU+XG4iCisJIlxuIgorCSJPciB1bmRvIHRoaXMgb3BlcmF0aW9uIHdpdGg6XG4iCisJIlxuIgorCSIgIGdpdCBzd2l0Y2ggLVxuIgorCSJcbiIKKwkiVHVybiBvZmYgdGhpcyBhZHZpY2UgYnkgc2V0dGluZyBjb25maWcgdmFyaWFibGUgYWR2aWNlLmRldGFjaGVkSGVhZCB0byBmYWxzZVxuXG4iKTsKKworCWZwcmludGYoc3RkZXJyLCBmbXQsIG5ld19uYW1lKTsKK30KZGlmZiAtLWdpdCBhL2FkdmljZS5oIGIvYWR2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmMmMxMQotLS0gL2Rldi9udWxsCisrKyBiL2FkdmljZS5oCkBAIC0wLDAgKzEsOTUgQEAKKyNpZm5kZWYgQURWSUNFX0gKKyNkZWZpbmUgQURWSUNFX0gKKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorCitleHRlcm4gaW50IGFkdmljZV9mZXRjaF9zaG93X2ZvcmNlZF91cGRhdGVzOworZXh0ZXJuIGludCBhZHZpY2VfcHVzaF91cGRhdGVfcmVqZWN0ZWQ7CitleHRlcm4gaW50IGFkdmljZV9wdXNoX25vbl9mZl9jdXJyZW50OworZXh0ZXJuIGludCBhZHZpY2VfcHVzaF9ub25fZmZfbWF0Y2hpbmc7CitleHRlcm4gaW50IGFkdmljZV9wdXNoX2FscmVhZHlfZXhpc3RzOworZXh0ZXJuIGludCBhZHZpY2VfcHVzaF9mZXRjaF9maXJzdDsKK2V4dGVybiBpbnQgYWR2aWNlX3B1c2hfbmVlZHNfZm9yY2U7CitleHRlcm4gaW50IGFkdmljZV9wdXNoX3VucXVhbGlmaWVkX3JlZl9uYW1lOworZXh0ZXJuIGludCBhZHZpY2Vfc3RhdHVzX2hpbnRzOworZXh0ZXJuIGludCBhZHZpY2Vfc3RhdHVzX3Vfb3B0aW9uOworZXh0ZXJuIGludCBhZHZpY2Vfc3RhdHVzX2FoZWFkX2JlaGluZF93YXJuaW5nOworZXh0ZXJuIGludCBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZTsKK2V4dGVybiBpbnQgYWR2aWNlX3Jlc2V0X3F1aWV0X3dhcm5pbmc7CitleHRlcm4gaW50IGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0OworZXh0ZXJuIGludCBhZHZpY2Vfc2VxdWVuY2VyX2luX3VzZTsKK2V4dGVybiBpbnQgYWR2aWNlX2ltcGxpY2l0X2lkZW50aXR5OworZXh0ZXJuIGludCBhZHZpY2VfZGV0YWNoZWRfaGVhZDsKK2V4dGVybiBpbnQgYWR2aWNlX3NldF91cHN0cmVhbV9mYWlsdXJlOworZXh0ZXJuIGludCBhZHZpY2Vfb2JqZWN0X25hbWVfd2FybmluZzsKK2V4dGVybiBpbnQgYWR2aWNlX2Ftd29ya2RpcjsKK2V4dGVybiBpbnQgYWR2aWNlX3JtX2hpbnRzOworZXh0ZXJuIGludCBhZHZpY2VfYWRkX2VtYmVkZGVkX3JlcG87CitleHRlcm4gaW50IGFkdmljZV9pZ25vcmVkX2hvb2s7CitleHRlcm4gaW50IGFkdmljZV93YWl0aW5nX2Zvcl9lZGl0b3I7CitleHRlcm4gaW50IGFkdmljZV9ncmFmdF9maWxlX2RlcHJlY2F0ZWQ7CitleHRlcm4gaW50IGFkdmljZV9jaGVja291dF9hbWJpZ3VvdXNfcmVtb3RlX2JyYW5jaF9uYW1lOworZXh0ZXJuIGludCBhZHZpY2Vfc3VibW9kdWxlX2FsdGVybmF0ZV9lcnJvcl9zdHJhdGVneV9kaWU7CitleHRlcm4gaW50IGFkdmljZV9hZGRfaWdub3JlZF9maWxlOworZXh0ZXJuIGludCBhZHZpY2VfYWRkX2VtcHR5X3BhdGhzcGVjOworCisvKgorICogVG8gYWRkIGEgbmV3IGFkdmljZSwgeW91IG5lZWQgdG86CisgKiBEZWZpbmUgYSBuZXcgYWR2aWNlX3R5cGUuCisgKiBBZGQgYSBuZXcgZW50cnkgdG8gYWR2aWNlX3NldHRpbmcgYXJyYXkuCisgKiBBZGQgdGhlIG5ldyBjb25maWcgdmFyaWFibGUgdG8gRG9jdW1lbnRhdGlvbi9jb25maWcvYWR2aWNlLnR4dC4KKyAqIENhbGwgYWR2aXNlX2lmX2VuYWJsZWQgdG8gcHJpbnQgeW91ciBhZHZpY2UuCisgKi8KKyBlbnVtIGFkdmljZV90eXBlIHsKKwlBRFZJQ0VfQUREX0VNQkVEREVEX1JFUE8sCisJQURWSUNFX0FNX1dPUktfRElSLAorCUFEVklDRV9DSEVDS09VVF9BTUJJR1VPVVNfUkVNT1RFX0JSQU5DSF9OQU1FLAorCUFEVklDRV9DT01NSVRfQkVGT1JFX01FUkdFLAorCUFEVklDRV9ERVRBQ0hFRF9IRUFELAorCUFEVklDRV9GRVRDSF9TSE9XX0ZPUkNFRF9VUERBVEVTLAorCUFEVklDRV9HUkFGVF9GSUxFX0RFUFJFQ0FURUQsCisJQURWSUNFX0lHTk9SRURfSE9PSywKKwlBRFZJQ0VfSU1QTElDSVRfSURFTlRJVFksCisJQURWSUNFX05FU1RFRF9UQUcsCisJQURWSUNFX09CSkVDVF9OQU1FX1dBUk5JTkcsCisJQURWSUNFX1BVU0hfQUxSRUFEWV9FWElTVFMsCisJQURWSUNFX1BVU0hfRkVUQ0hfRklSU1QsCisJQURWSUNFX1BVU0hfTkVFRFNfRk9SQ0UsCisJQURWSUNFX1BVU0hfTk9OX0ZGX0NVUlJFTlQsCisJQURWSUNFX1BVU0hfTk9OX0ZGX01BVENISU5HLAorCUFEVklDRV9QVVNIX1VOUVVBTElGSUVEX1JFRl9OQU1FLAorCUFEVklDRV9QVVNIX1VQREFURV9SRUpFQ1RFRF9BTElBUywKKwlBRFZJQ0VfUFVTSF9VUERBVEVfUkVKRUNURUQsCisJQURWSUNFX1JFU0VUX1FVSUVUX1dBUk5JTkcsCisJQURWSUNFX1JFU09MVkVfQ09ORkxJQ1QsCisJQURWSUNFX1JNX0hJTlRTLAorCUFEVklDRV9TRVFVRU5DRVJfSU5fVVNFLAorCUFEVklDRV9TRVRfVVBTVFJFQU1fRkFJTFVSRSwKKwlBRFZJQ0VfU1RBVFVTX0FIRUFEX0JFSElORF9XQVJOSU5HLAorCUFEVklDRV9TVEFUVVNfSElOVFMsCisJQURWSUNFX1NUQVRVU19VX09QVElPTiwKKwlBRFZJQ0VfU1VCTU9EVUxFX0FMVEVSTkFURV9FUlJPUl9TVFJBVEVHWV9ESUUsCisJQURWSUNFX1dBSVRJTkdfRk9SX0VESVRPUiwKK307CisKK2ludCBnaXRfZGVmYXVsdF9hZHZpY2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK3ZvaWQgYWR2aXNlKGNvbnN0IGNoYXIgKmFkdmljZSwgLi4uKTsKKworLyoqCisgKiBDaGVja3MgaWYgYWR2aWNlIHR5cGUgaXMgZW5hYmxlZCAoY2FuIGJlIHByaW50ZWQgdG8gdGhlIHVzZXIpLgorICogU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYWR2aXNlKCkuCisgKi8KK2ludCBhZHZpY2VfZW5hYmxlZChlbnVtIGFkdmljZV90eXBlIHR5cGUpOworCisvKioKKyAqIENoZWNrcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgYWR2aWNlIGJlZm9yZSBwcmludGluZy4KKyAqLwordm9pZCBhZHZpc2VfaWZfZW5hYmxlZChlbnVtIGFkdmljZV90eXBlIHR5cGUsIGNvbnN0IGNoYXIgKmFkdmljZSwgLi4uKTsKKworaW50IGVycm9yX3Jlc29sdmVfY29uZmxpY3QoY29uc3QgY2hhciAqbWUpOwordm9pZCBOT1JFVFVSTiBkaWVfcmVzb2x2ZV9jb25mbGljdChjb25zdCBjaGFyICptZSk7Cit2b2lkIE5PUkVUVVJOIGRpZV9jb25jbHVkZV9tZXJnZSh2b2lkKTsKK3ZvaWQgZGV0YWNoX2FkdmljZShjb25zdCBjaGFyICpuZXdfbmFtZSk7CisKKyNlbmRpZiAvKiBBRFZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYWxpYXMuYyBiL2FsaWFzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3MTUzOAotLS0gL2Rldi9udWxsCisrKyBiL2FsaWFzLmMKQEAgLTAsMCArMSwxMDggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImFsaWFzLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworc3RydWN0IGNvbmZpZ19hbGlhc19kYXRhIHsKKwljb25zdCBjaGFyICphbGlhczsKKwljaGFyICp2OworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdDsKK307CisKK3N0YXRpYyBpbnQgY29uZmlnX2FsaWFzX2NiKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmQpCit7CisJc3RydWN0IGNvbmZpZ19hbGlhc19kYXRhICpkYXRhID0gZDsKKwljb25zdCBjaGFyICpwOworCisJaWYgKCFza2lwX3ByZWZpeChrZXksICJhbGlhcy4iLCAmcCkpCisJCXJldHVybiAwOworCisJaWYgKGRhdGEtPmFsaWFzKSB7CisJCWlmICghc3RyY2FzZWNtcChwLCBkYXRhLT5hbGlhcykpCisJCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoKGNvbnN0IGNoYXIgKiopJmRhdGEtPnYsCisJCQkJCQkga2V5LCB2YWx1ZSk7CisJfSBlbHNlIGlmIChkYXRhLT5saXN0KSB7CisJCXN0cmluZ19saXN0X2FwcGVuZChkYXRhLT5saXN0LCBwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworY2hhciAqYWxpYXNfbG9va3VwKGNvbnN0IGNoYXIgKmFsaWFzKQoreworCXN0cnVjdCBjb25maWdfYWxpYXNfZGF0YSBkYXRhID0geyBhbGlhcywgTlVMTCB9OworCisJcmVhZF9lYXJseV9jb25maWcoY29uZmlnX2FsaWFzX2NiLCAmZGF0YSk7CisKKwlyZXR1cm4gZGF0YS52OworfQorCit2b2lkIGxpc3RfYWxpYXNlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCit7CisJc3RydWN0IGNvbmZpZ19hbGlhc19kYXRhIGRhdGEgPSB7IE5VTEwsIE5VTEwsIGxpc3QgfTsKKworCXJlYWRfZWFybHlfY29uZmlnKGNvbmZpZ19hbGlhc19jYiwgJmRhdGEpOworfQorCisjZGVmaW5lIFNQTElUX0NNRExJTkVfQkFEX0VORElORyAxCisjZGVmaW5lIFNQTElUX0NNRExJTkVfVU5DTE9TRURfUVVPVEUgMgorc3RhdGljIGNvbnN0IGNoYXIgKnNwbGl0X2NtZGxpbmVfZXJyb3JzW10gPSB7CisJTl8oImNtZGxpbmUgZW5kcyB3aXRoIFxcIiksCisJTl8oInVuY2xvc2VkIHF1b3RlIikKK307CisKK2ludCBzcGxpdF9jbWRsaW5lKGNoYXIgKmNtZGxpbmUsIGNvbnN0IGNoYXIgKioqYXJndikKK3sKKwlpbnQgc3JjLCBkc3QsIGNvdW50ID0gMCwgc2l6ZSA9IDE2OworCWNoYXIgcXVvdGVkID0gMDsKKworCUFMTE9DX0FSUkFZKCphcmd2LCBzaXplKTsKKworCS8qIHNwbGl0IGFsaWFzX3N0cmluZyAqLworCSgqYXJndilbY291bnQrK10gPSBjbWRsaW5lOworCWZvciAoc3JjID0gZHN0ID0gMDsgY21kbGluZVtzcmNdOykgeworCQljaGFyIGMgPSBjbWRsaW5lW3NyY107CisJCWlmICghcXVvdGVkICYmIGlzc3BhY2UoYykpIHsKKwkJCWNtZGxpbmVbZHN0KytdID0gMDsKKwkJCXdoaWxlIChjbWRsaW5lWysrc3JjXQorCQkJCQkmJiBpc3NwYWNlKGNtZGxpbmVbc3JjXSkpCisJCQkJOyAvKiBza2lwICovCisJCQlBTExPQ19HUk9XKCphcmd2LCBjb3VudCArIDEsIHNpemUpOworCQkJKCphcmd2KVtjb3VudCsrXSA9IGNtZGxpbmUgKyBkc3Q7CisJCX0gZWxzZSBpZiAoIXF1b3RlZCAmJiAoYyA9PSAnXCcnIHx8IGMgPT0gJyInKSkgeworCQkJcXVvdGVkID0gYzsKKwkJCXNyYysrOworCQl9IGVsc2UgaWYgKGMgPT0gcXVvdGVkKSB7CisJCQlxdW90ZWQgPSAwOworCQkJc3JjKys7CisJCX0gZWxzZSB7CisJCQlpZiAoYyA9PSAnXFwnICYmIHF1b3RlZCAhPSAnXCcnKSB7CisJCQkJc3JjKys7CisJCQkJYyA9IGNtZGxpbmVbc3JjXTsKKwkJCQlpZiAoIWMpIHsKKwkJCQkJRlJFRV9BTkRfTlVMTCgqYXJndik7CisJCQkJCXJldHVybiAtU1BMSVRfQ01ETElORV9CQURfRU5ESU5HOworCQkJCX0KKwkJCX0KKwkJCWNtZGxpbmVbZHN0KytdID0gYzsKKwkJCXNyYysrOworCQl9CisJfQorCisJY21kbGluZVtkc3RdID0gMDsKKworCWlmIChxdW90ZWQpIHsKKwkJRlJFRV9BTkRfTlVMTCgqYXJndik7CisJCXJldHVybiAtU1BMSVRfQ01ETElORV9VTkNMT1NFRF9RVU9URTsKKwl9CisKKwlBTExPQ19HUk9XKCphcmd2LCBjb3VudCArIDEsIHNpemUpOworCSgqYXJndilbY291bnRdID0gTlVMTDsKKworCXJldHVybiBjb3VudDsKK30KKworY29uc3QgY2hhciAqc3BsaXRfY21kbGluZV9zdHJlcnJvcihpbnQgc3BsaXRfY21kbGluZV9lcnJubykKK3sKKwlyZXR1cm4gc3BsaXRfY21kbGluZV9lcnJvcnNbLXNwbGl0X2NtZGxpbmVfZXJybm8gLSAxXTsKK30KZGlmZiAtLWdpdCBhL2FsaWFzLmggYi9hbGlhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZjQ4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9hbGlhcy5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgQUxJQVNfSAorI2RlZmluZSBBTElBU19ICisKK3N0cnVjdCBzdHJpbmdfbGlzdDsKKworY2hhciAqYWxpYXNfbG9va3VwKGNvbnN0IGNoYXIgKmFsaWFzKTsKK2ludCBzcGxpdF9jbWRsaW5lKGNoYXIgKmNtZGxpbmUsIGNvbnN0IGNoYXIgKioqYXJndik7CisvKiBUYWtlcyBhIG5lZ2F0aXZlIHZhbHVlIHJldHVybmVkIGJ5IHNwbGl0X2NtZGxpbmUgKi8KK2NvbnN0IGNoYXIgKnNwbGl0X2NtZGxpbmVfc3RyZXJyb3IoaW50IGNtZGxpbmVfZXJybm8pOwordm9pZCBsaXN0X2FsaWFzZXMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hbGxvYy5jIGIvYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzY0YzRkCi0tLSAvZGV2L251bGwKKysrIGIvYWxsb2MuYwpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIGFsbG9jLmMgIC0gc3BlY2lhbGl6ZWQgYWxsb2NhdG9yIGZvciBpbnRlcm5hbCBvYmplY3RzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExpbnVzIFRvcnZhbGRzCisgKgorICogVGhlIHN0YW5kYXJkIG1hbGxvYy9mcmVlIHdhc3RlcyB0b28gbXVjaCBzcGFjZSBmb3Igb2JqZWN0cywgcGFydGx5IGJlY2F1c2UKKyAqIGl0IG1haW50YWlucyBhbGwgdGhlIGFsbG9jYXRpb24gaW5mcmFzdHJ1Y3R1cmUsIGJ1dCBldmVuIG1vcmUgYmVjYXVzZSBpdCBlbmRzCisgKiB1cCB3aXRoIG1heGltYWwgYWxpZ25tZW50IGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IHdoYXQgdGhlIG9iamVjdCBhbGlnbm1lbnQKKyAqIGZvciB0aGUgbmV3IGFsbG9jYXRpb24gaXMuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiYWxsb2MuaCIKKworI2RlZmluZSBCTE9DS0lORyAxMDI0CisKK3VuaW9uIGFueV9vYmplY3QgeworCXN0cnVjdCBvYmplY3Qgb2JqZWN0OworCXN0cnVjdCBibG9iIGJsb2I7CisJc3RydWN0IHRyZWUgdHJlZTsKKwlzdHJ1Y3QgY29tbWl0IGNvbW1pdDsKKwlzdHJ1Y3QgdGFnIHRhZzsKK307CisKK3N0cnVjdCBhbGxvY19zdGF0ZSB7CisJaW50IGNvdW50OyAvKiB0b3RhbCBudW1iZXIgb2Ygbm9kZXMgYWxsb2NhdGVkICovCisJaW50IG5yOyAgICAvKiBudW1iZXIgb2Ygbm9kZXMgbGVmdCBpbiBjdXJyZW50IGFsbG9jYXRpb24gKi8KKwl2b2lkICpwOyAgIC8qIGZpcnN0IGZyZWUgbm9kZSBpbiBjdXJyZW50IGFsbG9jYXRpb24gKi8KKworCS8qIGJvb2trZWVwaW5nIG9mIGFsbG9jYXRpb25zICovCisJdm9pZCAqKnNsYWJzOworCWludCBzbGFiX25yLCBzbGFiX2FsbG9jOworfTsKKworc3RydWN0IGFsbG9jX3N0YXRlICphbGxvY2F0ZV9hbGxvY19zdGF0ZSh2b2lkKQoreworCXJldHVybiB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgYWxsb2Nfc3RhdGUpKTsKK30KKwordm9pZCBjbGVhcl9hbGxvY19zdGF0ZShzdHJ1Y3QgYWxsb2Nfc3RhdGUgKnMpCit7CisJd2hpbGUgKHMtPnNsYWJfbnIgPiAwKSB7CisJCXMtPnNsYWJfbnItLTsKKwkJZnJlZShzLT5zbGFic1tzLT5zbGFiX25yXSk7CisJfQorCisJRlJFRV9BTkRfTlVMTChzLT5zbGFicyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqYWxsb2Nfbm9kZShzdHJ1Y3QgYWxsb2Nfc3RhdGUgKnMsIHNpemVfdCBub2RlX3NpemUpCit7CisJdm9pZCAqcmV0OworCisJaWYgKCFzLT5ucikgeworCQlzLT5uciA9IEJMT0NLSU5HOworCQlzLT5wID0geG1hbGxvYyhCTE9DS0lORyAqIG5vZGVfc2l6ZSk7CisKKwkJQUxMT0NfR1JPVyhzLT5zbGFicywgcy0+c2xhYl9uciArIDEsIHMtPnNsYWJfYWxsb2MpOworCQlzLT5zbGFic1tzLT5zbGFiX25yKytdID0gcy0+cDsKKwl9CisJcy0+bnItLTsKKwlzLT5jb3VudCsrOworCXJldCA9IHMtPnA7CisJcy0+cCA9IChjaGFyICopcy0+cCArIG5vZGVfc2l6ZTsKKwltZW1zZXQocmV0LCAwLCBub2RlX3NpemUpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCAqYWxsb2NfYmxvYl9ub2RlKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXN0cnVjdCBibG9iICpiID0gYWxsb2Nfbm9kZShyLT5wYXJzZWRfb2JqZWN0cy0+YmxvYl9zdGF0ZSwgc2l6ZW9mKHN0cnVjdCBibG9iKSk7CisJYi0+b2JqZWN0LnR5cGUgPSBPQkpfQkxPQjsKKwlyZXR1cm4gYjsKK30KKwordm9pZCAqYWxsb2NfdHJlZV9ub2RlKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXN0cnVjdCB0cmVlICp0ID0gYWxsb2Nfbm9kZShyLT5wYXJzZWRfb2JqZWN0cy0+dHJlZV9zdGF0ZSwgc2l6ZW9mKHN0cnVjdCB0cmVlKSk7CisJdC0+b2JqZWN0LnR5cGUgPSBPQkpfVFJFRTsKKwlyZXR1cm4gdDsKK30KKwordm9pZCAqYWxsb2NfdGFnX25vZGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJc3RydWN0IHRhZyAqdCA9IGFsbG9jX25vZGUoci0+cGFyc2VkX29iamVjdHMtPnRhZ19zdGF0ZSwgc2l6ZW9mKHN0cnVjdCB0YWcpKTsKKwl0LT5vYmplY3QudHlwZSA9IE9CSl9UQUc7CisJcmV0dXJuIHQ7Cit9CisKK3ZvaWQgKmFsbG9jX29iamVjdF9ub2RlKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGFsbG9jX25vZGUoci0+cGFyc2VkX29iamVjdHMtPm9iamVjdF9zdGF0ZSwgc2l6ZW9mKHVuaW9uIGFueV9vYmplY3QpKTsKKwlvYmotPnR5cGUgPSBPQkpfTk9ORTsKKwlyZXR1cm4gb2JqOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGFsbG9jX2NvbW1pdF9pbmRleChzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlyZXR1cm4gci0+cGFyc2VkX29iamVjdHMtPmNvbW1pdF9jb3VudCsrOworfQorCit2b2lkIGluaXRfY29tbWl0X25vZGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXQgKmMpCit7CisJYy0+b2JqZWN0LnR5cGUgPSBPQkpfQ09NTUlUOworCWMtPmluZGV4ID0gYWxsb2NfY29tbWl0X2luZGV4KHIpOworCWMtPmdyYXBoX3BvcyA9IENPTU1JVF9OT1RfRlJPTV9HUkFQSDsKKwljLT5nZW5lcmF0aW9uID0gR0VORVJBVElPTl9OVU1CRVJfSU5GSU5JVFk7Cit9CisKK3ZvaWQgKmFsbG9jX2NvbW1pdF9ub2RlKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXN0cnVjdCBjb21taXQgKmMgPSBhbGxvY19ub2RlKHItPnBhcnNlZF9vYmplY3RzLT5jb21taXRfc3RhdGUsIHNpemVvZihzdHJ1Y3QgY29tbWl0KSk7CisJaW5pdF9jb21taXRfbm9kZShyLCBjKTsKKwlyZXR1cm4gYzsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0KGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBjb3VudCwgc2l6ZV90IHNpemUpCit7CisJZnByaW50ZihzdGRlcnIsICIlMTBzOiAlOHUgKCUiUFJJdU1BWCIga0IpXG4iLAorCQkJbmFtZSwgY291bnQsICh1aW50bWF4X3QpIHNpemUpOworfQorCisjZGVmaW5lIFJFUE9SVChuYW1lLCB0eXBlKQlcCisgICAgcmVwb3J0KCNuYW1lLCByLT5wYXJzZWRfb2JqZWN0cy0+bmFtZSMjX3N0YXRlLT5jb3VudCwgXAorCQkgIHItPnBhcnNlZF9vYmplY3RzLT5uYW1lIyNfc3RhdGUtPmNvdW50ICogc2l6ZW9mKHR5cGUpID4+IDEwKQorCit2b2lkIGFsbG9jX3JlcG9ydChzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlSRVBPUlQoYmxvYiwgc3RydWN0IGJsb2IpOworCVJFUE9SVCh0cmVlLCBzdHJ1Y3QgdHJlZSk7CisJUkVQT1JUKGNvbW1pdCwgc3RydWN0IGNvbW1pdCk7CisJUkVQT1JUKHRhZywgc3RydWN0IHRhZyk7CisJUkVQT1JUKG9iamVjdCwgdW5pb24gYW55X29iamVjdCk7Cit9CmRpZmYgLS1naXQgYS9hbGxvYy5oIGIvYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDEwNzFjCi0tLSAvZGV2L251bGwKKysrIGIvYWxsb2MuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIEFMTE9DX0gKKyNkZWZpbmUgQUxMT0NfSAorCitzdHJ1Y3QgYWxsb2Nfc3RhdGU7CitzdHJ1Y3QgdHJlZTsKK3N0cnVjdCBjb21taXQ7CitzdHJ1Y3QgdGFnOworc3RydWN0IHJlcG9zaXRvcnk7CisKK3ZvaWQgKmFsbG9jX2Jsb2Jfbm9kZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7Cit2b2lkICphbGxvY190cmVlX25vZGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpOwordm9pZCBpbml0X2NvbW1pdF9ub2RlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgY29tbWl0ICpjKTsKK3ZvaWQgKmFsbG9jX2NvbW1pdF9ub2RlKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKK3ZvaWQgKmFsbG9jX3RhZ19ub2RlKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKK3ZvaWQgKmFsbG9jX29iamVjdF9ub2RlKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKK3ZvaWQgYWxsb2NfcmVwb3J0KHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKKworc3RydWN0IGFsbG9jX3N0YXRlICphbGxvY2F0ZV9hbGxvY19zdGF0ZSh2b2lkKTsKK3ZvaWQgY2xlYXJfYWxsb2Nfc3RhdGUoc3RydWN0IGFsbG9jX3N0YXRlICpzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcHBseS5jIGIvYXBwbHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmZmNjA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwbHkuYwpAQCAtMCwwICsxLDUwMzkgQEAKKy8qCisgKiBhcHBseS5jCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICoKKyAqIFRoaXMgYXBwbGllcyBwYXRjaGVzIG9uIHRvcCBvZiBzb21lIChhcmJpdHJhcnkpIHZlcnNpb24gb2YgdGhlIFNDTS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImxsLW1lcmdlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJyZXJlcmUuaCIKKyNpbmNsdWRlICJhcHBseS5oIgorCitzdHJ1Y3QgZ2l0ZGlmZl9kYXRhIHsKKwlzdHJ1Y3Qgc3RyYnVmICpyb290OworCWludCBsaW5lbnI7CisJaW50IHBfdmFsdWU7Cit9OworCitzdGF0aWMgdm9pZCBnaXRfYXBwbHlfY29uZmlnKHZvaWQpCit7CisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KCJhcHBseS53aGl0ZXNwYWNlIiwgJmFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSk7CisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KCJhcHBseS5pZ25vcmV3aGl0ZXNwYWNlIiwgJmFwcGx5X2RlZmF1bHRfaWdub3Jld2hpdGVzcGFjZSk7CisJZ2l0X2NvbmZpZyhnaXRfeG1lcmdlX2NvbmZpZywgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfd2hpdGVzcGFjZV9vcHRpb24oc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqb3B0aW9uKQoreworCWlmICghb3B0aW9uKSB7CisJCXN0YXRlLT53c19lcnJvcl9hY3Rpb24gPSB3YXJuX29uX3dzX2Vycm9yOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAob3B0aW9uLCAid2FybiIpKSB7CisJCXN0YXRlLT53c19lcnJvcl9hY3Rpb24gPSB3YXJuX29uX3dzX2Vycm9yOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAob3B0aW9uLCAibm93YXJuIikpIHsKKwkJc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9IG5vd2Fybl93c19lcnJvcjsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKG9wdGlvbiwgImVycm9yIikpIHsKKwkJc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9IGRpZV9vbl93c19lcnJvcjsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKG9wdGlvbiwgImVycm9yLWFsbCIpKSB7CisJCXN0YXRlLT53c19lcnJvcl9hY3Rpb24gPSBkaWVfb25fd3NfZXJyb3I7CisJCXN0YXRlLT5zcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKG9wdGlvbiwgInN0cmlwIikgfHwgIXN0cmNtcChvcHRpb24sICJmaXgiKSkgeworCQlzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uID0gY29ycmVjdF93c19lcnJvcjsKKwkJcmV0dXJuIDA7CisJfQorCS8qCisJICogUGxlYXNlIHVwZGF0ZSAkX19naXRfd2hpdGVzcGFjZWxpc3QgaW4gZ2l0LWNvbXBsZXRpb24uYmFzaAorCSAqIHdoZW4geW91IGFkZCBuZXcgb3B0aW9ucy4KKwkgKi8KKwlyZXR1cm4gZXJyb3IoXygidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciKSwgb3B0aW9uKTsKK30KKworc3RhdGljIGludCBwYXJzZV9pZ25vcmV3aGl0ZXNwYWNlX29wdGlvbihzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJCQkJIGNvbnN0IGNoYXIgKm9wdGlvbikKK3sKKwlpZiAoIW9wdGlvbiB8fCAhc3RyY21wKG9wdGlvbiwgIm5vIikgfHwKKwkgICAgIXN0cmNtcChvcHRpb24sICJmYWxzZSIpIHx8ICFzdHJjbXAob3B0aW9uLCAibmV2ZXIiKSB8fAorCSAgICAhc3RyY21wKG9wdGlvbiwgIm5vbmUiKSkgeworCQlzdGF0ZS0+d3NfaWdub3JlX2FjdGlvbiA9IGlnbm9yZV93c19ub25lOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAob3B0aW9uLCAiY2hhbmdlIikpIHsKKwkJc3RhdGUtPndzX2lnbm9yZV9hY3Rpb24gPSBpZ25vcmVfd3NfY2hhbmdlOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGVycm9yKF8oInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIpLCBvcHRpb24pOworfQorCitpbnQgaW5pdF9hcHBseV9zdGF0ZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkgICAgIHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKwlzdGF0ZS0+cHJlZml4ID0gcHJlZml4OworCXN0YXRlLT5yZXBvID0gcmVwbzsKKwlzdGF0ZS0+YXBwbHkgPSAxOworCXN0YXRlLT5saW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKwlzdGF0ZS0+cF92YWx1ZSA9IDE7CisJc3RhdGUtPnBfY29udGV4dCA9IFVJTlRfTUFYOworCXN0YXRlLT5zcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzID0gNTsKKwlzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uID0gd2Fybl9vbl93c19lcnJvcjsKKwlzdGF0ZS0+d3NfaWdub3JlX2FjdGlvbiA9IGlnbm9yZV93c19ub25lOworCXN0YXRlLT5saW5lbnIgPSAxOworCXN0cmluZ19saXN0X2luaXQoJnN0YXRlLT5mbl90YWJsZSwgMCk7CisJc3RyaW5nX2xpc3RfaW5pdCgmc3RhdGUtPmxpbWl0X2J5X25hbWUsIDApOworCXN0cmluZ19saXN0X2luaXQoJnN0YXRlLT5zeW1saW5rX2NoYW5nZXMsIDApOworCXN0cmJ1Zl9pbml0KCZzdGF0ZS0+cm9vdCwgMCk7CisKKwlnaXRfYXBwbHlfY29uZmlnKCk7CisJaWYgKGFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSAmJiBwYXJzZV93aGl0ZXNwYWNlX29wdGlvbihzdGF0ZSwgYXBwbHlfZGVmYXVsdF93aGl0ZXNwYWNlKSkKKwkJcmV0dXJuIC0xOworCWlmIChhcHBseV9kZWZhdWx0X2lnbm9yZXdoaXRlc3BhY2UgJiYgcGFyc2VfaWdub3Jld2hpdGVzcGFjZV9vcHRpb24oc3RhdGUsIGFwcGx5X2RlZmF1bHRfaWdub3Jld2hpdGVzcGFjZSkpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjbGVhcl9hcHBseV9zdGF0ZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlKQoreworCXN0cmluZ19saXN0X2NsZWFyKCZzdGF0ZS0+bGltaXRfYnlfbmFtZSwgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlLT5zeW1saW5rX2NoYW5nZXMsIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZzdGF0ZS0+cm9vdCk7CisKKwkvKiAmc3RhdGUtPmZuX3RhYmxlIGlzIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiBhcHBseV9wYXRjaCgpICovCit9CisKK3N0YXRpYyB2b2lkIG11dGVfcm91dGluZShjb25zdCBjaGFyICptc2csIHZhX2xpc3QgcGFyYW1zKQoreworCS8qIGRvIG5vdGhpbmcgKi8KK30KKworaW50IGNoZWNrX2FwcGx5X3N0YXRlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIGludCBmb3JjZV9hcHBseSkKK3sKKwlpbnQgaXNfbm90X2dpdGRpciA9ICFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeTsKKworCWlmIChzdGF0ZS0+YXBwbHlfd2l0aF9yZWplY3QgJiYgc3RhdGUtPnRocmVld2F5KQorCQlyZXR1cm4gZXJyb3IoXygiLS1yZWplY3QgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iKSk7CisJaWYgKHN0YXRlLT5jYWNoZWQgJiYgc3RhdGUtPnRocmVld2F5KQorCQlyZXR1cm4gZXJyb3IoXygiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iKSk7CisJaWYgKHN0YXRlLT50aHJlZXdheSkgeworCQlpZiAoaXNfbm90X2dpdGRpcikKKwkJCXJldHVybiBlcnJvcihfKCItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiKSk7CisJCXN0YXRlLT5jaGVja19pbmRleCA9IDE7CisJfQorCWlmIChzdGF0ZS0+YXBwbHlfd2l0aF9yZWplY3QpIHsKKwkJc3RhdGUtPmFwcGx5ID0gMTsKKwkJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPT0gdmVyYm9zaXR5X25vcm1hbCkKKwkJCXN0YXRlLT5hcHBseV92ZXJib3NpdHkgPSB2ZXJib3NpdHlfdmVyYm9zZTsKKwl9CisJaWYgKCFmb3JjZV9hcHBseSAmJiAoc3RhdGUtPmRpZmZzdGF0IHx8IHN0YXRlLT5udW1zdGF0IHx8IHN0YXRlLT5zdW1tYXJ5IHx8IHN0YXRlLT5jaGVjayB8fCBzdGF0ZS0+ZmFrZV9hbmNlc3RvcikpCisJCXN0YXRlLT5hcHBseSA9IDA7CisJaWYgKHN0YXRlLT5jaGVja19pbmRleCAmJiBpc19ub3RfZ2l0ZGlyKQorCQlyZXR1cm4gZXJyb3IoXygiLS1pbmRleCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIpKTsKKwlpZiAoc3RhdGUtPmNhY2hlZCkgeworCQlpZiAoaXNfbm90X2dpdGRpcikKKwkJCXJldHVybiBlcnJvcihfKCItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIpKTsKKwkJc3RhdGUtPmNoZWNrX2luZGV4ID0gMTsKKwl9CisJaWYgKHN0YXRlLT5pdGFfb25seSAmJiAoc3RhdGUtPmNoZWNrX2luZGV4IHx8IGlzX25vdF9naXRkaXIpKQorCQlzdGF0ZS0+aXRhX29ubHkgPSAwOworCWlmIChzdGF0ZS0+Y2hlY2tfaW5kZXgpCisJCXN0YXRlLT51bnNhZmVfcGF0aHMgPSAwOworCisJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPD0gdmVyYm9zaXR5X3NpbGVudCkgeworCQlzdGF0ZS0+c2F2ZWRfZXJyb3Jfcm91dGluZSA9IGdldF9lcnJvcl9yb3V0aW5lKCk7CisJCXN0YXRlLT5zYXZlZF93YXJuX3JvdXRpbmUgPSBnZXRfd2Fybl9yb3V0aW5lKCk7CisJCXNldF9lcnJvcl9yb3V0aW5lKG11dGVfcm91dGluZSk7CisJCXNldF93YXJuX3JvdXRpbmUobXV0ZV9yb3V0aW5lKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X2RlZmF1bHRfd2hpdGVzcGFjZV9tb2RlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKCFzdGF0ZS0+d2hpdGVzcGFjZV9vcHRpb24gJiYgIWFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSkKKwkJc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9IChzdGF0ZS0+YXBwbHkgPyB3YXJuX29uX3dzX2Vycm9yIDogbm93YXJuX3dzX2Vycm9yKTsKK30KKworLyoKKyAqIFRoaXMgcmVwcmVzZW50cyBvbmUgImh1bmsiIGZyb20gYSBwYXRjaCwgc3RhcnRpbmcgd2l0aAorICogIkBAIC1vbGRwb3Msb2xkbGluZXMgK25ld3BvcyxuZXdsaW5lcyBAQCIgbWFya2VyLiAgVGhlCisgKiBwYXRjaCB0ZXh0IGlzIHBvaW50ZWQgYXQgYnkgcGF0Y2gsIGFuZCBpdHMgYnl0ZSBsZW5ndGgKKyAqIGlzIHN0b3JlZCBpbiBzaXplLiAgbGVhZGluZyBhbmQgdHJhaWxpbmcgYXJlIHRoZSBudW1iZXIKKyAqIG9mIGNvbnRleHQgbGluZXMuCisgKi8KK3N0cnVjdCBmcmFnbWVudCB7CisJdW5zaWduZWQgbG9uZyBsZWFkaW5nLCB0cmFpbGluZzsKKwl1bnNpZ25lZCBsb25nIG9sZHBvcywgb2xkbGluZXM7CisJdW5zaWduZWQgbG9uZyBuZXdwb3MsIG5ld2xpbmVzOworCS8qCisJICogJ3BhdGNoJyBpcyB1c3VhbGx5IGJvcnJvd2VkIGZyb20gYnVmIGluIGFwcGx5X3BhdGNoKCksCisJICogYnV0IHNvbWUgY29kZXBhdGhzIHN0b3JlIGFuIGFsbG9jYXRlZCBidWZmZXIuCisJICovCisJY29uc3QgY2hhciAqcGF0Y2g7CisJdW5zaWduZWQgZnJlZV9wYXRjaDoxLAorCQlyZWplY3RlZDoxOworCWludCBzaXplOworCWludCBsaW5lbnI7CisJc3RydWN0IGZyYWdtZW50ICpuZXh0OworfTsKKworLyoKKyAqIFdoZW4gZGVhbGluZyB3aXRoIGEgYmluYXJ5IHBhdGNoLCB3ZSByZXVzZSAibGVhZGluZyIgZmllbGQKKyAqIHRvIHN0b3JlIHRoZSB0eXBlIG9mIHRoZSBiaW5hcnkgaHVuaywgZWl0aGVyIGRlZmxhdGVkICJkZWx0YSIKKyAqIG9yIGRlZmxhdGVkICJsaXRlcmFsIi4KKyAqLworI2RlZmluZSBiaW5hcnlfcGF0Y2hfbWV0aG9kIGxlYWRpbmcKKyNkZWZpbmUgQklOQVJZX0RFTFRBX0RFRkxBVEVECTEKKyNkZWZpbmUgQklOQVJZX0xJVEVSQUxfREVGTEFURUQgMgorCitzdGF0aWMgdm9pZCBmcmVlX2ZyYWdtZW50X2xpc3Qoc3RydWN0IGZyYWdtZW50ICpsaXN0KQoreworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBmcmFnbWVudCAqbmV4dCA9IGxpc3QtPm5leHQ7CisJCWlmIChsaXN0LT5mcmVlX3BhdGNoKQorCQkJZnJlZSgoY2hhciAqKWxpc3QtPnBhdGNoKTsKKwkJZnJlZShsaXN0KTsKKwkJbGlzdCA9IG5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX3BhdGNoKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJZnJlZV9mcmFnbWVudF9saXN0KHBhdGNoLT5mcmFnbWVudHMpOworCWZyZWUocGF0Y2gtPmRlZl9uYW1lKTsKKwlmcmVlKHBhdGNoLT5vbGRfbmFtZSk7CisJZnJlZShwYXRjaC0+bmV3X25hbWUpOworCWZyZWUocGF0Y2gtPnJlc3VsdCk7CisJZnJlZShwYXRjaCk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcGF0Y2hfbGlzdChzdHJ1Y3QgcGF0Y2ggKmxpc3QpCit7CisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IHBhdGNoICpuZXh0ID0gbGlzdC0+bmV4dDsKKwkJZnJlZV9wYXRjaChsaXN0KTsKKwkJbGlzdCA9IG5leHQ7CisJfQorfQorCisvKgorICogQSBsaW5lIGluIGEgZmlsZSwgbGVuLWJ5dGVzIGxvbmcgKGluY2x1ZGVzIHRoZSB0ZXJtaW5hdGluZyBMRiwKKyAqIGV4Y2VwdCBmb3IgYW4gaW5jb21wbGV0ZSBsaW5lIGF0IHRoZSBlbmQgaWYgdGhlIGZpbGUgZW5kcyB3aXRoCisgKiBvbmUpLCBhbmQgaXRzIGNvbnRlbnRzIGhhc2hlcyB0byAnaGFzaCcuCisgKi8KK3N0cnVjdCBsaW5lIHsKKwlzaXplX3QgbGVuOworCXVuc2lnbmVkIGhhc2ggOiAyNDsKKwl1bnNpZ25lZCBmbGFnIDogODsKKyNkZWZpbmUgTElORV9DT01NT04gICAgIDEKKyNkZWZpbmUgTElORV9QQVRDSEVECTIKK307CisKKy8qCisgKiBUaGlzIHJlcHJlc2VudHMgYSAiZmlsZSIsIHdoaWNoIGlzIGFuIGFycmF5IG9mICJsaW5lcyIuCisgKi8KK3N0cnVjdCBpbWFnZSB7CisJY2hhciAqYnVmOworCXNpemVfdCBsZW47CisJc2l6ZV90IG5yOworCXNpemVfdCBhbGxvYzsKKwlzdHJ1Y3QgbGluZSAqbGluZV9hbGxvY2F0ZWQ7CisJc3RydWN0IGxpbmUgKmxpbmU7Cit9OworCitzdGF0aWMgdWludDMyX3QgaGFzaF9saW5lKGNvbnN0IGNoYXIgKmNwLCBzaXplX3QgbGVuKQoreworCXNpemVfdCBpOworCXVpbnQzMl90IGg7CisJZm9yIChpID0gMCwgaCA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAoIWlzc3BhY2UoY3BbaV0pKSB7CisJCQloID0gaCAqIDMgKyAoY3BbaV0gJiAweGZmKTsKKwkJfQorCX0KKwlyZXR1cm4gaDsKK30KKworLyoKKyAqIENvbXBhcmUgbGluZXMgczEgb2YgbGVuZ3RoIG4xIGFuZCBzMiBvZiBsZW5ndGggbjIsIGlnbm9yaW5nCisgKiB3aGl0ZXNwYWNlIGRpZmZlcmVuY2UuIFJldHVybnMgMSBpZiB0aGV5IG1hdGNoLCAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGZ1enp5X21hdGNobGluZXMoY29uc3QgY2hhciAqczEsIHNpemVfdCBuMSwKKwkJCSAgICBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4yKQoreworCWNvbnN0IGNoYXIgKmVuZDEgPSBzMSArIG4xOworCWNvbnN0IGNoYXIgKmVuZDIgPSBzMiArIG4yOworCisJLyogaWdub3JlIGxpbmUgZW5kaW5ncyAqLworCXdoaWxlIChzMSA8IGVuZDEgJiYgKGVuZDFbLTFdID09ICdccicgfHwgZW5kMVstMV0gPT0gJ1xuJykpCisJCWVuZDEtLTsKKwl3aGlsZSAoczIgPCBlbmQyICYmIChlbmQyWy0xXSA9PSAnXHInIHx8IGVuZDJbLTFdID09ICdcbicpKQorCQllbmQyLS07CisKKwl3aGlsZSAoczEgPCBlbmQxICYmIHMyIDwgZW5kMikgeworCQlpZiAoaXNzcGFjZSgqczEpKSB7CisJCQkvKgorCQkJICogU2tpcCB3aGl0ZXNwYWNlLiBXZSBjaGVjayBvbiBib3RoIGJ1ZmZlcnMKKwkJCSAqIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCAiYSBiIiB0byBtYXRjaCAiYWIiLgorCQkJICovCisJCQlpZiAoIWlzc3BhY2UoKnMyKSkKKwkJCQlyZXR1cm4gMDsKKwkJCXdoaWxlIChzMSA8IGVuZDEgJiYgaXNzcGFjZSgqczEpKQorCQkJCXMxKys7CisJCQl3aGlsZSAoczIgPCBlbmQyICYmIGlzc3BhY2UoKnMyKSkKKwkJCQlzMisrOworCQl9IGVsc2UgaWYgKCpzMSsrICE9ICpzMisrKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogSWYgd2UgcmVhY2hlZCB0aGUgZW5kIG9uIG9uZSBzaWRlIG9ubHksIGxpbmVzIGRvbid0IG1hdGNoLiAqLworCXJldHVybiBzMSA9PSBlbmQxICYmIHMyID09IGVuZDI7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9saW5lX2luZm8oc3RydWN0IGltYWdlICppbWcsIGNvbnN0IGNoYXIgKmJvbCwgc2l6ZV90IGxlbiwgdW5zaWduZWQgZmxhZykKK3sKKwlBTExPQ19HUk9XKGltZy0+bGluZV9hbGxvY2F0ZWQsIGltZy0+bnIgKyAxLCBpbWctPmFsbG9jKTsKKwlpbWctPmxpbmVfYWxsb2NhdGVkW2ltZy0+bnJdLmxlbiA9IGxlbjsKKwlpbWctPmxpbmVfYWxsb2NhdGVkW2ltZy0+bnJdLmhhc2ggPSBoYXNoX2xpbmUoYm9sLCBsZW4pOworCWltZy0+bGluZV9hbGxvY2F0ZWRbaW1nLT5ucl0uZmxhZyA9IGZsYWc7CisJaW1nLT5ucisrOworfQorCisvKgorICogImJ1ZiIgaGFzIHRoZSBmaWxlIGNvbnRlbnRzIHRvIGJlIHBhdGNoZWQgKHJlYWQgZnJvbSB2YXJpb3VzIHNvdXJjZXMpLgorICogYXR0YWNoIGl0IHRvICJpbWFnZSIgYW5kIGFkZCBsaW5lLWJhc2VkIGluZGV4IHRvIGl0LgorICogImltYWdlIiBub3cgb3ducyB0aGUgImJ1ZiIuCisgKi8KK3N0YXRpYyB2b2lkIHByZXBhcmVfaW1hZ2Uoc3RydWN0IGltYWdlICppbWFnZSwgY2hhciAqYnVmLCBzaXplX3QgbGVuLAorCQkJICBpbnQgcHJlcGFyZV9saW5ldGFibGUpCit7CisJY29uc3QgY2hhciAqY3AsICplcDsKKworCW1lbXNldChpbWFnZSwgMCwgc2l6ZW9mKCppbWFnZSkpOworCWltYWdlLT5idWYgPSBidWY7CisJaW1hZ2UtPmxlbiA9IGxlbjsKKworCWlmICghcHJlcGFyZV9saW5ldGFibGUpCisJCXJldHVybjsKKworCWVwID0gaW1hZ2UtPmJ1ZiArIGltYWdlLT5sZW47CisJY3AgPSBpbWFnZS0+YnVmOworCXdoaWxlIChjcCA8IGVwKSB7CisJCWNvbnN0IGNoYXIgKm5leHQ7CisJCWZvciAobmV4dCA9IGNwOyBuZXh0IDwgZXAgJiYgKm5leHQgIT0gJ1xuJzsgbmV4dCsrKQorCQkJOworCQlpZiAobmV4dCA8IGVwKQorCQkJbmV4dCsrOworCQlhZGRfbGluZV9pbmZvKGltYWdlLCBjcCwgbmV4dCAtIGNwLCAwKTsKKwkJY3AgPSBuZXh0OworCX0KKwlpbWFnZS0+bGluZSA9IGltYWdlLT5saW5lX2FsbG9jYXRlZDsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfaW1hZ2Uoc3RydWN0IGltYWdlICppbWFnZSkKK3sKKwlmcmVlKGltYWdlLT5idWYpOworCWZyZWUoaW1hZ2UtPmxpbmVfYWxsb2NhdGVkKTsKKwltZW1zZXQoaW1hZ2UsIDAsIHNpemVvZigqaW1hZ2UpKTsKK30KKworLyogZm10IG11c3QgY29udGFpbiBfb25lXyAlcyBhbmQgbm8gb3RoZXIgc3Vic3RpdHV0aW9uICovCitzdGF0aWMgdm9pZCBzYXlfcGF0Y2hfbmFtZShGSUxFICpvdXRwdXQsIGNvbnN0IGNoYXIgKmZtdCwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAocGF0Y2gtPm9sZF9uYW1lICYmIHBhdGNoLT5uZXdfbmFtZSAmJgorCSAgICBzdHJjbXAocGF0Y2gtPm9sZF9uYW1lLCBwYXRjaC0+bmV3X25hbWUpKSB7CisJCXF1b3RlX2Nfc3R5bGUocGF0Y2gtPm9sZF9uYW1lLCAmc2IsIE5VTEwsIDApOworCQlzdHJidWZfYWRkc3RyKCZzYiwgIiA9PiAiKTsKKwkJcXVvdGVfY19zdHlsZShwYXRjaC0+bmV3X25hbWUsICZzYiwgTlVMTCwgMCk7CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqbiA9IHBhdGNoLT5uZXdfbmFtZTsKKwkJaWYgKCFuKQorCQkJbiA9IHBhdGNoLT5vbGRfbmFtZTsKKwkJcXVvdGVfY19zdHlsZShuLCAmc2IsIE5VTEwsIDApOworCX0KKwlmcHJpbnRmKG91dHB1dCwgZm10LCBzYi5idWYpOworCWZwdXRjKCdcbicsIG91dHB1dCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworI2RlZmluZSBTTE9QICgxNikKKworc3RhdGljIGludCByZWFkX3BhdGNoX2ZpbGUoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBmZCkKK3sKKwlpZiAoc3RyYnVmX3JlYWQoc2IsIGZkLCAwKSA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubygiZ2l0IGFwcGx5OiBmYWlsZWQgdG8gcmVhZCIpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIHNvbWUgc2xvcCBpbiB0aGUgYnVmZmVyCisJICogc28gdGhhdCB3ZSBjYW4gZG8gc3BlY3VsYXRpdmUgIm1lbWNtcCIgZXRjLCBhbmQKKwkgKiBzZWUgdG8gaXQgdGhhdCBpdCBpcyBOVUwtZmlsbGVkLgorCSAqLworCXN0cmJ1Zl9ncm93KHNiLCBTTE9QKTsKKwltZW1zZXQoc2ItPmJ1ZiArIHNiLT5sZW4sIDAsIFNMT1ApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsaW5lbGVuKGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgbGVuID0gMDsKKwl3aGlsZSAoc2l6ZS0tKSB7CisJCWxlbisrOworCQlpZiAoKmJ1ZmZlcisrID09ICdcbicpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBpc19kZXZfbnVsbChjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuIHNraXBfcHJlZml4KHN0ciwgIi9kZXYvbnVsbCIsICZzdHIpICYmIGlzc3BhY2UoKnN0cik7Cit9CisKKyNkZWZpbmUgVEVSTV9TUEFDRQkxCisjZGVmaW5lIFRFUk1fVEFCCTIKKworc3RhdGljIGludCBuYW1lX3Rlcm1pbmF0ZShpbnQgYywgaW50IHRlcm1pbmF0ZSkKK3sKKwlpZiAoYyA9PSAnICcgJiYgISh0ZXJtaW5hdGUgJiBURVJNX1NQQUNFKSkKKwkJcmV0dXJuIDA7CisJaWYgKGMgPT0gJ1x0JyAmJiAhKHRlcm1pbmF0ZSAmIFRFUk1fVEFCKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworLyogcmVtb3ZlIGRvdWJsZSBzbGFzaGVzIHRvIG1ha2UgLS1pbmRleCB3b3JrIHdpdGggc3VjaCBmaWxlbmFtZXMgKi8KK3N0YXRpYyBjaGFyICpzcXVhc2hfc2xhc2goY2hhciAqbmFtZSkKK3sKKwlpbnQgaSA9IDAsIGogPSAwOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKworCXdoaWxlIChuYW1lW2ldKSB7CisJCWlmICgobmFtZVtqKytdID0gbmFtZVtpKytdKSA9PSAnLycpCisJCQl3aGlsZSAobmFtZVtpXSA9PSAnLycpCisJCQkJaSsrOworCX0KKwluYW1lW2pdID0gJ1wwJzsKKwlyZXR1cm4gbmFtZTsKK30KKworc3RhdGljIGNoYXIgKmZpbmRfbmFtZV9nbnUoc3RydWN0IHN0cmJ1ZiAqcm9vdCwKKwkJCSAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICBpbnQgcF92YWx1ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWUgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpjcDsKKworCS8qCisJICogUHJvcG9zZWQgIm5ldy1zdHlsZSIgR05VIHBhdGNoL2RpZmYgZm9ybWF0OyBzZWUKKwkgKiBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvN3ZsbDB3dmIyYS5mc2ZAYXNzaWduZWQtYnktZGhjcC5jb3gubmV0LworCSAqLworCWlmICh1bnF1b3RlX2Nfc3R5bGUoJm5hbWUsIGxpbmUsIE5VTEwpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZm9yIChjcCA9IG5hbWUuYnVmOyBwX3ZhbHVlOyBwX3ZhbHVlLS0pIHsKKwkJY3AgPSBzdHJjaHIoY3AsICcvJyk7CisJCWlmICghY3ApIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWNwKys7CisJfQorCisJc3RyYnVmX3JlbW92ZSgmbmFtZSwgMCwgY3AgLSBuYW1lLmJ1Zik7CisJaWYgKHJvb3QtPmxlbikKKwkJc3RyYnVmX2luc2VydCgmbmFtZSwgMCwgcm9vdC0+YnVmLCByb290LT5sZW4pOworCXJldHVybiBzcXVhc2hfc2xhc2goc3RyYnVmX2RldGFjaCgmbmFtZSwgTlVMTCkpOworfQorCitzdGF0aWMgc2l6ZV90IHNhbmVfdHpfbGVuKGNvbnN0IGNoYXIgKmxpbmUsIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqdHosICpwOworCisJaWYgKGxlbiA8IHN0cmxlbigiICswNTAwIikgfHwgbGluZVtsZW4tc3RybGVuKCIgKzA1MDAiKV0gIT0gJyAnKQorCQlyZXR1cm4gMDsKKwl0eiA9IGxpbmUgKyBsZW4gLSBzdHJsZW4oIiArMDUwMCIpOworCisJaWYgKHR6WzFdICE9ICcrJyAmJiB0elsxXSAhPSAnLScpCisJCXJldHVybiAwOworCisJZm9yIChwID0gdHogKyAyOyBwICE9IGxpbmUgKyBsZW47IHArKykKKwkJaWYgKCFpc2RpZ2l0KCpwKSkKKwkJCXJldHVybiAwOworCisJcmV0dXJuIGxpbmUgKyBsZW4gLSB0ejsKK30KKworc3RhdGljIHNpemVfdCB0el93aXRoX2NvbG9uX2xlbihjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKnR6LCAqcDsKKworCWlmIChsZW4gPCBzdHJsZW4oIiArMDg6MDAiKSB8fCBsaW5lW2xlbiAtIHN0cmxlbigiOjAwIildICE9ICc6JykKKwkJcmV0dXJuIDA7CisJdHogPSBsaW5lICsgbGVuIC0gc3RybGVuKCIgKzA4OjAwIik7CisKKwlpZiAodHpbMF0gIT0gJyAnIHx8ICh0elsxXSAhPSAnKycgJiYgdHpbMV0gIT0gJy0nKSkKKwkJcmV0dXJuIDA7CisJcCA9IHR6ICsgMjsKKwlpZiAoIWlzZGlnaXQoKnArKykgfHwgIWlzZGlnaXQoKnArKykgfHwgKnArKyAhPSAnOicgfHwKKwkgICAgIWlzZGlnaXQoKnArKykgfHwgIWlzZGlnaXQoKnArKykpCisJCXJldHVybiAwOworCisJcmV0dXJuIGxpbmUgKyBsZW4gLSB0ejsKK30KKworc3RhdGljIHNpemVfdCBkYXRlX2xlbihjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKmRhdGUsICpwOworCisJaWYgKGxlbiA8IHN0cmxlbigiNzItMDItMDUiKSB8fCBsaW5lW2xlbi1zdHJsZW4oIi0wNSIpXSAhPSAnLScpCisJCXJldHVybiAwOworCXAgPSBkYXRlID0gbGluZSArIGxlbiAtIHN0cmxlbigiNzItMDItMDUiKTsKKworCWlmICghaXNkaWdpdCgqcCsrKSB8fCAhaXNkaWdpdCgqcCsrKSB8fCAqcCsrICE9ICctJyB8fAorCSAgICAhaXNkaWdpdCgqcCsrKSB8fCAhaXNkaWdpdCgqcCsrKSB8fCAqcCsrICE9ICctJyB8fAorCSAgICAhaXNkaWdpdCgqcCsrKSB8fCAhaXNkaWdpdCgqcCsrKSkJLyogTm90IGEgZGF0ZS4gKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAoZGF0ZSAtIGxpbmUgPj0gc3RybGVuKCIxOSIpICYmCisJICAgIGlzZGlnaXQoZGF0ZVstMV0pICYmIGlzZGlnaXQoZGF0ZVstMl0pKQkvKiA0LWRpZ2l0IHllYXIgKi8KKwkJZGF0ZSAtPSBzdHJsZW4oIjE5Iik7CisKKwlyZXR1cm4gbGluZSArIGxlbiAtIGRhdGU7Cit9CisKK3N0YXRpYyBzaXplX3Qgc2hvcnRfdGltZV9sZW4oY29uc3QgY2hhciAqbGluZSwgc2l6ZV90IGxlbikKK3sKKwljb25zdCBjaGFyICp0aW1lLCAqcDsKKworCWlmIChsZW4gPCBzdHJsZW4oIiAwNzowMTozMiIpIHx8IGxpbmVbbGVuLXN0cmxlbigiOjMyIildICE9ICc6JykKKwkJcmV0dXJuIDA7CisJcCA9IHRpbWUgPSBsaW5lICsgbGVuIC0gc3RybGVuKCIgMDc6MDE6MzIiKTsKKworCS8qIFBlcm1pdCAxLWRpZ2l0IGhvdXJzPyAqLworCWlmICgqcCsrICE9ICcgJyB8fAorCSAgICAhaXNkaWdpdCgqcCsrKSB8fCAhaXNkaWdpdCgqcCsrKSB8fCAqcCsrICE9ICc6JyB8fAorCSAgICAhaXNkaWdpdCgqcCsrKSB8fCAhaXNkaWdpdCgqcCsrKSB8fCAqcCsrICE9ICc6JyB8fAorCSAgICAhaXNkaWdpdCgqcCsrKSB8fCAhaXNkaWdpdCgqcCsrKSkJLyogTm90IGEgdGltZS4gKi8KKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbGluZSArIGxlbiAtIHRpbWU7Cit9CisKK3N0YXRpYyBzaXplX3QgZnJhY3Rpb25hbF90aW1lX2xlbihjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKnA7CisJc2l6ZV90IG47CisKKwkvKiBFeHBlY3RlZCBmb3JtYXQ6IDE5OjQxOjE3LjYyMDAwMDAyMyAqLworCWlmICghbGVuIHx8ICFpc2RpZ2l0KGxpbmVbbGVuIC0gMV0pKQorCQlyZXR1cm4gMDsKKwlwID0gbGluZSArIGxlbiAtIDE7CisKKwkvKiBGcmFjdGlvbmFsIHNlY29uZHMuICovCisJd2hpbGUgKHAgPiBsaW5lICYmIGlzZGlnaXQoKnApKQorCQlwLS07CisJaWYgKCpwICE9ICcuJykKKwkJcmV0dXJuIDA7CisKKwkvKiBIb3VycywgbWludXRlcywgYW5kIHdob2xlIHNlY29uZHMuICovCisJbiA9IHNob3J0X3RpbWVfbGVuKGxpbmUsIHAgLSBsaW5lKTsKKwlpZiAoIW4pCisJCXJldHVybiAwOworCisJcmV0dXJuIGxpbmUgKyBsZW4gLSBwICsgbjsKK30KKworc3RhdGljIHNpemVfdCB0cmFpbGluZ19zcGFjZXNfbGVuKGNvbnN0IGNoYXIgKmxpbmUsIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqcDsKKworCS8qIEV4cGVjdGVkIGZvcm1hdDogJyAnIHggKDEgb3IgbW9yZSkgICovCisJaWYgKCFsZW4gfHwgbGluZVtsZW4gLSAxXSAhPSAnICcpCisJCXJldHVybiAwOworCisJcCA9IGxpbmUgKyBsZW47CisJd2hpbGUgKHAgIT0gbGluZSkgeworCQlwLS07CisJCWlmICgqcCAhPSAnICcpCisJCQlyZXR1cm4gbGluZSArIGxlbiAtIChwICsgMSk7CisJfQorCisJLyogQWxsIHNwYWNlcyEgKi8KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc2l6ZV90IGRpZmZfdGltZXN0YW1wX2xlbihjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKmVuZCA9IGxpbmUgKyBsZW47CisJc2l6ZV90IG47CisKKwkvKgorCSAqIFBvc2l4OiAyMDEwLTA3LTA1IDE5OjQxOjE3CisJICogR05VOiAyMDEwLTA3LTA1IDE5OjQxOjE3LjYyMDAwMDAyMyAtMDUwMAorCSAqLworCisJaWYgKCFpc2RpZ2l0KGVuZFstMV0pKQorCQlyZXR1cm4gMDsKKworCW4gPSBzYW5lX3R6X2xlbihsaW5lLCBlbmQgLSBsaW5lKTsKKwlpZiAoIW4pCisJCW4gPSB0el93aXRoX2NvbG9uX2xlbihsaW5lLCBlbmQgLSBsaW5lKTsKKwllbmQgLT0gbjsKKworCW4gPSBzaG9ydF90aW1lX2xlbihsaW5lLCBlbmQgLSBsaW5lKTsKKwlpZiAoIW4pCisJCW4gPSBmcmFjdGlvbmFsX3RpbWVfbGVuKGxpbmUsIGVuZCAtIGxpbmUpOworCWVuZCAtPSBuOworCisJbiA9IGRhdGVfbGVuKGxpbmUsIGVuZCAtIGxpbmUpOworCWlmICghbikJLyogTm8gZGF0ZS4gIFRvbyBiYWQuICovCisJCXJldHVybiAwOworCWVuZCAtPSBuOworCisJaWYgKGVuZCA9PSBsaW5lKQkvKiBObyBzcGFjZSBiZWZvcmUgZGF0ZS4gKi8KKwkJcmV0dXJuIDA7CisJaWYgKGVuZFstMV0gPT0gJ1x0JykgewkvKiBTdWNjZXNzISAqLworCQllbmQtLTsKKwkJcmV0dXJuIGxpbmUgKyBsZW4gLSBlbmQ7CisJfQorCWlmIChlbmRbLTFdICE9ICcgJykJLyogTm8gc3BhY2UgYmVmb3JlIGRhdGUuICovCisJCXJldHVybiAwOworCisJLyogV2hpdGVzcGFjZSBkYW1hZ2UuICovCisJZW5kIC09IHRyYWlsaW5nX3NwYWNlc19sZW4obGluZSwgZW5kIC0gbGluZSk7CisJcmV0dXJuIGxpbmUgKyBsZW4gLSBlbmQ7Cit9CisKK3N0YXRpYyBjaGFyICpmaW5kX25hbWVfY29tbW9uKHN0cnVjdCBzdHJidWYgKnJvb3QsCisJCQkgICAgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgICAgY29uc3QgY2hhciAqZGVmLAorCQkJICAgICAgaW50IHBfdmFsdWUsCisJCQkgICAgICBjb25zdCBjaGFyICplbmQsCisJCQkgICAgICBpbnQgdGVybWluYXRlKQoreworCWludCBsZW47CisJY29uc3QgY2hhciAqc3RhcnQgPSBOVUxMOworCisJaWYgKHBfdmFsdWUgPT0gMCkKKwkJc3RhcnQgPSBsaW5lOworCXdoaWxlIChsaW5lICE9IGVuZCkgeworCQljaGFyIGMgPSAqbGluZTsKKworCQlpZiAoIWVuZCAmJiBpc3NwYWNlKGMpKSB7CisJCQlpZiAoYyA9PSAnXG4nKQorCQkJCWJyZWFrOworCQkJaWYgKG5hbWVfdGVybWluYXRlKGMsIHRlcm1pbmF0ZSkpCisJCQkJYnJlYWs7CisJCX0KKwkJbGluZSsrOworCQlpZiAoYyA9PSAnLycgJiYgIS0tcF92YWx1ZSkKKwkJCXN0YXJ0ID0gbGluZTsKKwl9CisJaWYgKCFzdGFydCkKKwkJcmV0dXJuIHNxdWFzaF9zbGFzaCh4c3RyZHVwX29yX251bGwoZGVmKSk7CisJbGVuID0gbGluZSAtIHN0YXJ0OworCWlmICghbGVuKQorCQlyZXR1cm4gc3F1YXNoX3NsYXNoKHhzdHJkdXBfb3JfbnVsbChkZWYpKTsKKworCS8qCisJICogR2VuZXJhbGx5IHdlIHByZWZlciB0aGUgc2hvcnRlciBuYW1lLCBlc3BlY2lhbGx5CisJICogaWYgdGhlIG90aGVyIG9uZSBpcyBqdXN0IGEgdmFyaWF0aW9uIG9mIHRoYXQgd2l0aAorCSAqIHNvbWV0aGluZyBlbHNlIHRhY2tlZCBvbiB0byB0aGUgZW5kIChpZSAiZmlsZS5vcmlnIgorCSAqIG9yICJmaWxlfiIpLgorCSAqLworCWlmIChkZWYpIHsKKwkJaW50IGRlZmxlbiA9IHN0cmxlbihkZWYpOworCQlpZiAoZGVmbGVuIDwgbGVuICYmICFzdHJuY21wKHN0YXJ0LCBkZWYsIGRlZmxlbikpCisJCQlyZXR1cm4gc3F1YXNoX3NsYXNoKHhzdHJkdXAoZGVmKSk7CisJfQorCisJaWYgKHJvb3QtPmxlbikgeworCQljaGFyICpyZXQgPSB4c3RyZm10KCIlcyUuKnMiLCByb290LT5idWYsIGxlbiwgc3RhcnQpOworCQlyZXR1cm4gc3F1YXNoX3NsYXNoKHJldCk7CisJfQorCisJcmV0dXJuIHNxdWFzaF9zbGFzaCh4bWVtZHVweihzdGFydCwgbGVuKSk7Cit9CisKK3N0YXRpYyBjaGFyICpmaW5kX25hbWUoc3RydWN0IHN0cmJ1ZiAqcm9vdCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCSAgICAgICBjaGFyICpkZWYsCisJCSAgICAgICBpbnQgcF92YWx1ZSwKKwkJICAgICAgIGludCB0ZXJtaW5hdGUpCit7CisJaWYgKCpsaW5lID09ICciJykgeworCQljaGFyICpuYW1lID0gZmluZF9uYW1lX2dudShyb290LCBsaW5lLCBwX3ZhbHVlKTsKKwkJaWYgKG5hbWUpCisJCQlyZXR1cm4gbmFtZTsKKwl9CisKKwlyZXR1cm4gZmluZF9uYW1lX2NvbW1vbihyb290LCBsaW5lLCBkZWYsIHBfdmFsdWUsIE5VTEwsIHRlcm1pbmF0ZSk7Cit9CisKK3N0YXRpYyBjaGFyICpmaW5kX25hbWVfdHJhZGl0aW9uYWwoc3RydWN0IHN0cmJ1ZiAqcm9vdCwKKwkJCQkgICBjb25zdCBjaGFyICpsaW5lLAorCQkJCSAgIGNoYXIgKmRlZiwKKwkJCQkgICBpbnQgcF92YWx1ZSkKK3sKKwlzaXplX3QgbGVuOworCXNpemVfdCBkYXRlX2xlbjsKKworCWlmICgqbGluZSA9PSAnIicpIHsKKwkJY2hhciAqbmFtZSA9IGZpbmRfbmFtZV9nbnUocm9vdCwgbGluZSwgcF92YWx1ZSk7CisJCWlmIChuYW1lKQorCQkJcmV0dXJuIG5hbWU7CisJfQorCisJbGVuID0gc3RyY2hybnVsKGxpbmUsICdcbicpIC0gbGluZTsKKwlkYXRlX2xlbiA9IGRpZmZfdGltZXN0YW1wX2xlbihsaW5lLCBsZW4pOworCWlmICghZGF0ZV9sZW4pCisJCXJldHVybiBmaW5kX25hbWVfY29tbW9uKHJvb3QsIGxpbmUsIGRlZiwgcF92YWx1ZSwgTlVMTCwgVEVSTV9UQUIpOworCWxlbiAtPSBkYXRlX2xlbjsKKworCXJldHVybiBmaW5kX25hbWVfY29tbW9uKHJvb3QsIGxpbmUsIGRlZiwgcF92YWx1ZSwgbGluZSArIGxlbiwgMCk7Cit9CisKKy8qCisgKiBHaXZlbiB0aGUgc3RyaW5nIGFmdGVyICItLS0gIiBvciAiKysrICIsIGd1ZXNzIHRoZSBhcHByb3ByaWF0ZQorICogcF92YWx1ZSBmb3IgdGhlIGdpdmVuIHBhdGNoLgorICovCitzdGF0aWMgaW50IGd1ZXNzX3BfdmFsdWUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqbmFtZWxpbmUpCit7CisJY2hhciAqbmFtZSwgKmNwOworCWludCB2YWwgPSAtMTsKKworCWlmIChpc19kZXZfbnVsbChuYW1lbGluZSkpCisJCXJldHVybiAtMTsKKwluYW1lID0gZmluZF9uYW1lX3RyYWRpdGlvbmFsKCZzdGF0ZS0+cm9vdCwgbmFtZWxpbmUsIE5VTEwsIDApOworCWlmICghbmFtZSkKKwkJcmV0dXJuIC0xOworCWNwID0gc3RyY2hyKG5hbWUsICcvJyk7CisJaWYgKCFjcCkKKwkJdmFsID0gMDsKKwllbHNlIGlmIChzdGF0ZS0+cHJlZml4KSB7CisJCS8qCisJCSAqIERvZXMgaXQgYmVnaW4gd2l0aCAiYS8kb3VyLXByZWZpeCIgYW5kIHN1Y2g/ICBUaGVuIHRoaXMgaXMKKwkJICogdmVyeSBsaWtlbHkgdG8gYXBwbHkgdG8gb3VyIGRpcmVjdG9yeS4KKwkJICovCisJCWlmIChzdGFydHNfd2l0aChuYW1lLCBzdGF0ZS0+cHJlZml4KSkKKwkJCXZhbCA9IGNvdW50X3NsYXNoZXMoc3RhdGUtPnByZWZpeCk7CisJCWVsc2UgeworCQkJY3ArKzsKKwkJCWlmIChzdGFydHNfd2l0aChjcCwgc3RhdGUtPnByZWZpeCkpCisJCQkJdmFsID0gY291bnRfc2xhc2hlcyhzdGF0ZS0+cHJlZml4KSArIDE7CisJCX0KKwl9CisJZnJlZShuYW1lKTsKKwlyZXR1cm4gdmFsOworfQorCisvKgorICogRG9lcyB0aGUgLS0tLysrKyBsaW5lIGhhdmUgdGhlIFBPU0lYIHRpbWVzdGFtcCBhZnRlciB0aGUgbGFzdCBIVD8KKyAqIEdOVSBkaWZmIHB1dHMgZXBvY2ggdGhlcmUgdG8gc2lnbmFsIGEgY3JlYXRpb24vZGVsZXRpb24gZXZlbnQuICBJcworICogdGhpcyBzdWNoIGEgdGltZXN0YW1wPworICovCitzdGF0aWMgaW50IGhhc19lcG9jaF90aW1lc3RhbXAoY29uc3QgY2hhciAqbmFtZWxpbmUpCit7CisJLyoKKwkgKiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGVwb2NoIHRpbWVzdGFtcDsgYW55IG5vbi16ZXJvCisJICogZnJhY3Rpb24gY2Fubm90IGJlIG9uZSwgaGVuY2UgIihcLjArKT8iIGluIHRoZSByZWdleHAgYmVsb3cuCisJICogRm9yIHRoZSBzYW1lIHJlYXNvbiwgdGhlIGRhdGUgbXVzdCBiZSBlaXRoZXIgMTk2OS0xMi0zMSBvcgorCSAqIDE5NzAtMDEtMDEsIGFuZCB0aGUgc2Vjb25kcyBwYXJ0IG11c3QgYmUgIjAwIi4KKwkgKi8KKwljb25zdCBjaGFyIHN0YW1wX3JlZ2V4cFtdID0KKwkJIl5bMC0yXVswLTldOihbMC01XVswLTldKTowMChcXC4wKyk/IgorCQkiICIKKwkJIihbLStdWzAtMl1bMC05XTo/WzAtNV1bMC05XSlcbiI7CisJY29uc3QgY2hhciAqdGltZXN0YW1wID0gTlVMTCwgKmNwLCAqY29sb247CisJc3RhdGljIHJlZ2V4X3QgKnN0YW1wOworCXJlZ21hdGNoX3QgbVsxMF07CisJaW50IHpvbmVvZmZzZXQsIGVwb2NoX2hvdXIsIGhvdXIsIG1pbnV0ZTsKKwlpbnQgc3RhdHVzOworCisJZm9yIChjcCA9IG5hbWVsaW5lOyAqY3AgIT0gJ1xuJzsgY3ArKykgeworCQlpZiAoKmNwID09ICdcdCcpCisJCQl0aW1lc3RhbXAgPSBjcCArIDE7CisJfQorCWlmICghdGltZXN0YW1wKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogWVlZWS1NTS1ERCBoaDptbTpzcyBtdXN0IGJlIGZyb20gZWl0aGVyIDE5NjktMTItMzEKKwkgKiAod2VzdCBvZiBHTVQpIG9yIDE5NzAtMDEtMDEgKGVhc3Qgb2YgR01UKQorCSAqLworCWlmIChza2lwX3ByZWZpeCh0aW1lc3RhbXAsICIxOTY5LTEyLTMxICIsICZ0aW1lc3RhbXApKQorCQllcG9jaF9ob3VyID0gMjQ7CisJZWxzZSBpZiAoc2tpcF9wcmVmaXgodGltZXN0YW1wLCAiMTk3MC0wMS0wMSAiLCAmdGltZXN0YW1wKSkKKwkJZXBvY2hfaG91ciA9IDA7CisJZWxzZQorCQlyZXR1cm4gMDsKKworCWlmICghc3RhbXApIHsKKwkJc3RhbXAgPSB4bWFsbG9jKHNpemVvZigqc3RhbXApKTsKKwkJaWYgKHJlZ2NvbXAoc3RhbXAsIHN0YW1wX3JlZ2V4cCwgUkVHX0VYVEVOREVEKSkgeworCQkJd2FybmluZyhfKCJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIiksCisJCQkJc3RhbXBfcmVnZXhwKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJc3RhdHVzID0gcmVnZXhlYyhzdGFtcCwgdGltZXN0YW1wLCBBUlJBWV9TSVpFKG0pLCBtLCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWlmIChzdGF0dXMgIT0gUkVHX05PTUFUQ0gpCisJCQl3YXJuaW5nKF8oInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIpLAorCQkJCXN0YXR1cywgdGltZXN0YW1wKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaG91ciA9IHN0cnRvbCh0aW1lc3RhbXAsIE5VTEwsIDEwKTsKKwltaW51dGUgPSBzdHJ0b2wodGltZXN0YW1wICsgbVsxXS5ybV9zbywgTlVMTCwgMTApOworCisJem9uZW9mZnNldCA9IHN0cnRvbCh0aW1lc3RhbXAgKyBtWzNdLnJtX3NvICsgMSwgKGNoYXIgKiopICZjb2xvbiwgMTApOworCWlmICgqY29sb24gPT0gJzonKQorCQl6b25lb2Zmc2V0ID0gem9uZW9mZnNldCAqIDYwICsgc3RydG9sKGNvbG9uICsgMSwgTlVMTCwgMTApOworCWVsc2UKKwkJem9uZW9mZnNldCA9ICh6b25lb2Zmc2V0IC8gMTAwKSAqIDYwICsgKHpvbmVvZmZzZXQgJSAxMDApOworCWlmICh0aW1lc3RhbXBbbVszXS5ybV9zb10gPT0gJy0nKQorCQl6b25lb2Zmc2V0ID0gLXpvbmVvZmZzZXQ7CisKKwlyZXR1cm4gaG91ciAqIDYwICsgbWludXRlIC0gem9uZW9mZnNldCA9PSBlcG9jaF9ob3VyICogNjA7Cit9CisKKy8qCisgKiBHZXQgdGhlIG5hbWUgZXRjIGluZm8gZnJvbSB0aGUgLS0tLysrKyBsaW5lcyBvZiBhIHRyYWRpdGlvbmFsIHBhdGNoIGhlYWRlcgorICoKKyAqIEZJWE1FISBUaGUgZW5kLW9mLWZpbGVuYW1lIGhldXJpc3RpY3MgYXJlIGtpbmQgb2Ygc2NyZXd5LiBGb3IgZXhpc3RpbmcKKyAqIGZpbGVzLCB3ZSBjYW4gaGFwcGlseSBjaGVjayB0aGUgaW5kZXggZm9yIGEgbWF0Y2gsIGJ1dCBmb3IgY3JlYXRpbmcgYQorICogbmV3IGZpbGUgd2Ugc2hvdWxkIHRyeSB0byBtYXRjaCB3aGF0ZXZlciAicGF0Y2giIGRvZXMuIEkgaGF2ZSBubyBpZGVhLgorICovCitzdGF0aWMgaW50IHBhcnNlX3RyYWRpdGlvbmFsX3BhdGNoKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkJICAgY29uc3QgY2hhciAqZmlyc3QsCisJCQkJICAgY29uc3QgY2hhciAqc2Vjb25kLAorCQkJCSAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJY2hhciAqbmFtZTsKKworCWZpcnN0ICs9IDQ7CS8qIHNraXAgIi0tLSAiICovCisJc2Vjb25kICs9IDQ7CS8qIHNraXAgIisrKyAiICovCisJaWYgKCFzdGF0ZS0+cF92YWx1ZV9rbm93bikgeworCQlpbnQgcCwgcTsKKwkJcCA9IGd1ZXNzX3BfdmFsdWUoc3RhdGUsIGZpcnN0KTsKKwkJcSA9IGd1ZXNzX3BfdmFsdWUoc3RhdGUsIHNlY29uZCk7CisJCWlmIChwIDwgMCkgcCA9IHE7CisJCWlmICgwIDw9IHAgJiYgcCA9PSBxKSB7CisJCQlzdGF0ZS0+cF92YWx1ZSA9IHA7CisJCQlzdGF0ZS0+cF92YWx1ZV9rbm93biA9IDE7CisJCX0KKwl9CisJaWYgKGlzX2Rldl9udWxsKGZpcnN0KSkgeworCQlwYXRjaC0+aXNfbmV3ID0gMTsKKwkJcGF0Y2gtPmlzX2RlbGV0ZSA9IDA7CisJCW5hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoJnN0YXRlLT5yb290LCBzZWNvbmQsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlKTsKKwkJcGF0Y2gtPm5ld19uYW1lID0gbmFtZTsKKwl9IGVsc2UgaWYgKGlzX2Rldl9udWxsKHNlY29uZCkpIHsKKwkJcGF0Y2gtPmlzX25ldyA9IDA7CisJCXBhdGNoLT5pc19kZWxldGUgPSAxOworCQluYW1lID0gZmluZF9uYW1lX3RyYWRpdGlvbmFsKCZzdGF0ZS0+cm9vdCwgZmlyc3QsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlKTsKKwkJcGF0Y2gtPm9sZF9uYW1lID0gbmFtZTsKKwl9IGVsc2UgeworCQljaGFyICpmaXJzdF9uYW1lOworCQlmaXJzdF9uYW1lID0gZmluZF9uYW1lX3RyYWRpdGlvbmFsKCZzdGF0ZS0+cm9vdCwgZmlyc3QsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlKTsKKwkJbmFtZSA9IGZpbmRfbmFtZV90cmFkaXRpb25hbCgmc3RhdGUtPnJvb3QsIHNlY29uZCwgZmlyc3RfbmFtZSwgc3RhdGUtPnBfdmFsdWUpOworCQlmcmVlKGZpcnN0X25hbWUpOworCQlpZiAoaGFzX2Vwb2NoX3RpbWVzdGFtcChmaXJzdCkpIHsKKwkJCXBhdGNoLT5pc19uZXcgPSAxOworCQkJcGF0Y2gtPmlzX2RlbGV0ZSA9IDA7CisJCQlwYXRjaC0+bmV3X25hbWUgPSBuYW1lOworCQl9IGVsc2UgaWYgKGhhc19lcG9jaF90aW1lc3RhbXAoc2Vjb25kKSkgeworCQkJcGF0Y2gtPmlzX25ldyA9IDA7CisJCQlwYXRjaC0+aXNfZGVsZXRlID0gMTsKKwkJCXBhdGNoLT5vbGRfbmFtZSA9IG5hbWU7CisJCX0gZWxzZSB7CisJCQlwYXRjaC0+b2xkX25hbWUgPSBuYW1lOworCQkJcGF0Y2gtPm5ld19uYW1lID0geHN0cmR1cF9vcl9udWxsKG5hbWUpOworCQl9CisJfQorCWlmICghbmFtZSkKKwkJcmV0dXJuIGVycm9yKF8oInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiKSwgc3RhdGUtPmxpbmVucik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRkaWZmX2hkcmVuZChzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKKwkJCSAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFdlJ3JlIGFuYWwgYWJvdXQgZGlmZiBoZWFkZXIgY29uc2lzdGVuY3ksIHRvIG1ha2UKKyAqIHN1cmUgdGhhdCB3ZSBkb24ndCBlbmQgdXAgaGF2aW5nIHN0cmFuZ2UgYW1iaWd1b3VzCisgKiBwYXRjaGVzIGZsb2F0aW5nIGFyb3VuZC4KKyAqCisgKiBBcyBhIHJlc3VsdCwgZ2l0ZGlmZl97b2xkfG5ld31uYW1lKCkgd2lsbCBjaGVjaworICogdGhlaXIgbmFtZXMgYWdhaW5zdCBhbnkgcHJldmlvdXMgaW5mb3JtYXRpb24sIGp1c3QKKyAqIHRvIG1ha2Ugc3VyZS4uCisgKi8KKyNkZWZpbmUgRElGRl9PTERfTkFNRSAwCisjZGVmaW5lIERJRkZfTkVXX05BTUUgMQorCitzdGF0aWMgaW50IGdpdGRpZmZfdmVyaWZ5X25hbWUoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCisJCQkgICAgICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgICAgICBpbnQgaXNudWxsLAorCQkJICAgICAgIGNoYXIgKipuYW1lLAorCQkJICAgICAgIGludCBzaWRlKQoreworCWlmICghKm5hbWUgJiYgIWlzbnVsbCkgeworCQkqbmFtZSA9IGZpbmRfbmFtZShzdGF0ZS0+cm9vdCwgbGluZSwgTlVMTCwgc3RhdGUtPnBfdmFsdWUsIFRFUk1fVEFCKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCpuYW1lKSB7CisJCWNoYXIgKmFub3RoZXI7CisJCWlmIChpc251bGwpCisJCQlyZXR1cm4gZXJyb3IoXygiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwsIGdvdCAlcyBvbiBsaW5lICVkIiksCisJCQkJICAgICAqbmFtZSwgc3RhdGUtPmxpbmVucik7CisJCWFub3RoZXIgPSBmaW5kX25hbWUoc3RhdGUtPnJvb3QsIGxpbmUsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlLCBURVJNX1RBQik7CisJCWlmICghYW5vdGhlciB8fCBzdHJjbXAoYW5vdGhlciwgKm5hbWUpKSB7CisJCQlmcmVlKGFub3RoZXIpOworCQkJcmV0dXJuIGVycm9yKChzaWRlID09IERJRkZfTkVXX05BTUUpID8KKwkJCSAgICBfKCJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUgb24gbGluZSAlZCIpIDoKKwkJCSAgICBfKCJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIpLCBzdGF0ZS0+bGluZW5yKTsKKwkJfQorCQlmcmVlKGFub3RoZXIpOworCX0gZWxzZSB7CisJCWlmICghaXNfZGV2X251bGwobGluZSkpCisJCQlyZXR1cm4gZXJyb3IoXygiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIpLCBzdGF0ZS0+bGluZW5yKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRkaWZmX29sZG5hbWUoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCisJCQkgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlyZXR1cm4gZ2l0ZGlmZl92ZXJpZnlfbmFtZShzdGF0ZSwgbGluZSwKKwkJCQkgICBwYXRjaC0+aXNfbmV3LCAmcGF0Y2gtPm9sZF9uYW1lLAorCQkJCSAgIERJRkZfT0xEX05BTUUpOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfbmV3bmFtZShzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXJldHVybiBnaXRkaWZmX3ZlcmlmeV9uYW1lKHN0YXRlLCBsaW5lLAorCQkJCSAgIHBhdGNoLT5pc19kZWxldGUsICZwYXRjaC0+bmV3X25hbWUsCisJCQkJICAgRElGRl9ORVdfTkFNRSk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfbW9kZV9saW5lKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsaW5lbnIsIHVuc2lnbmVkIGludCAqbW9kZSkKK3sKKwljaGFyICplbmQ7CisJKm1vZGUgPSBzdHJ0b3VsKGxpbmUsICZlbmQsIDgpOworCWlmIChlbmQgPT0gbGluZSB8fCAhaXNzcGFjZSgqZW5kKSkKKwkJcmV0dXJuIGVycm9yKF8oImludmFsaWQgbW9kZSBvbiBsaW5lICVkOiAlcyIpLCBsaW5lbnIsIGxpbmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfb2xkbW9kZShzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXJldHVybiBwYXJzZV9tb2RlX2xpbmUobGluZSwgc3RhdGUtPmxpbmVuciwgJnBhdGNoLT5vbGRfbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9uZXdtb2RlKHN0cnVjdCBnaXRkaWZmX2RhdGEgKnN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcmV0dXJuIHBhcnNlX21vZGVfbGluZShsaW5lLCBzdGF0ZS0+bGluZW5yLCAmcGF0Y2gtPm5ld19tb2RlKTsKK30KKworc3RhdGljIGludCBnaXRkaWZmX2RlbGV0ZShzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKKwkJCSAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlwYXRjaC0+aXNfZGVsZXRlID0gMTsKKwlmcmVlKHBhdGNoLT5vbGRfbmFtZSk7CisJcGF0Y2gtPm9sZF9uYW1lID0geHN0cmR1cF9vcl9udWxsKHBhdGNoLT5kZWZfbmFtZSk7CisJcmV0dXJuIGdpdGRpZmZfb2xkbW9kZShzdGF0ZSwgbGluZSwgcGF0Y2gpOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfbmV3ZmlsZShzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXBhdGNoLT5pc19uZXcgPSAxOworCWZyZWUocGF0Y2gtPm5ld19uYW1lKTsKKwlwYXRjaC0+bmV3X25hbWUgPSB4c3RyZHVwX29yX251bGwocGF0Y2gtPmRlZl9uYW1lKTsKKwlyZXR1cm4gZ2l0ZGlmZl9uZXdtb2RlKHN0YXRlLCBsaW5lLCBwYXRjaCk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9jb3B5c3JjKHN0cnVjdCBnaXRkaWZmX2RhdGEgKnN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcGF0Y2gtPmlzX2NvcHkgPSAxOworCWZyZWUocGF0Y2gtPm9sZF9uYW1lKTsKKwlwYXRjaC0+b2xkX25hbWUgPSBmaW5kX25hbWUoc3RhdGUtPnJvb3QsIGxpbmUsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlID8gc3RhdGUtPnBfdmFsdWUgLSAxIDogMCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9jb3B5ZHN0KHN0cnVjdCBnaXRkaWZmX2RhdGEgKnN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcGF0Y2gtPmlzX2NvcHkgPSAxOworCWZyZWUocGF0Y2gtPm5ld19uYW1lKTsKKwlwYXRjaC0+bmV3X25hbWUgPSBmaW5kX25hbWUoc3RhdGUtPnJvb3QsIGxpbmUsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlID8gc3RhdGUtPnBfdmFsdWUgLSAxIDogMCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9yZW5hbWVzcmMoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCisJCQkgICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcGF0Y2gtPmlzX3JlbmFtZSA9IDE7CisJZnJlZShwYXRjaC0+b2xkX25hbWUpOworCXBhdGNoLT5vbGRfbmFtZSA9IGZpbmRfbmFtZShzdGF0ZS0+cm9vdCwgbGluZSwgTlVMTCwgc3RhdGUtPnBfdmFsdWUgPyBzdGF0ZS0+cF92YWx1ZSAtIDEgOiAwLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRkaWZmX3JlbmFtZWRzdChzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKKwkJCSAgICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgICAgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlwYXRjaC0+aXNfcmVuYW1lID0gMTsKKwlmcmVlKHBhdGNoLT5uZXdfbmFtZSk7CisJcGF0Y2gtPm5ld19uYW1lID0gZmluZF9uYW1lKHN0YXRlLT5yb290LCBsaW5lLCBOVUxMLCBzdGF0ZS0+cF92YWx1ZSA/IHN0YXRlLT5wX3ZhbHVlIC0gMSA6IDAsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfc2ltaWxhcml0eShzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICAgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXVuc2lnbmVkIGxvbmcgdmFsID0gc3RydG91bChsaW5lLCBOVUxMLCAxMCk7CisJaWYgKHZhbCA8PSAxMDApCisJCXBhdGNoLT5zY29yZSA9IHZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRkaWZmX2Rpc3NpbWlsYXJpdHkoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCisJCQkJIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkJIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJdW5zaWduZWQgbG9uZyB2YWwgPSBzdHJ0b3VsKGxpbmUsIE5VTEwsIDEwKTsKKwlpZiAodmFsIDw9IDEwMCkKKwkJcGF0Y2gtPnNjb3JlID0gdmFsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfaW5kZXgoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCisJCQkgY29uc3QgY2hhciAqbGluZSwKKwkJCSBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCS8qCisJICogaW5kZXggbGluZSBpcyBOIGhleGFkZWNpbWFsLCAiLi4iLCBOIGhleGFkZWNpbWFsLAorCSAqIGFuZCBvcHRpb25hbCBzcGFjZSB3aXRoIG9jdGFsIG1vZGUuCisJICovCisJY29uc3QgY2hhciAqcHRyLCAqZW9sOworCWludCBsZW47CisJY29uc3QgdW5zaWduZWQgaGV4c3ogPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKworCXB0ciA9IHN0cmNocihsaW5lLCAnLicpOworCWlmICghcHRyIHx8IHB0clsxXSAhPSAnLicgfHwgaGV4c3ogPCBwdHIgLSBsaW5lKQorCQlyZXR1cm4gMDsKKwlsZW4gPSBwdHIgLSBsaW5lOworCW1lbWNweShwYXRjaC0+b2xkX29pZF9wcmVmaXgsIGxpbmUsIGxlbik7CisJcGF0Y2gtPm9sZF9vaWRfcHJlZml4W2xlbl0gPSAwOworCisJbGluZSA9IHB0ciArIDI7CisJcHRyID0gc3RyY2hyKGxpbmUsICcgJyk7CisJZW9sID0gc3RyY2hybnVsKGxpbmUsICdcbicpOworCisJaWYgKCFwdHIgfHwgZW9sIDwgcHRyKQorCQlwdHIgPSBlb2w7CisJbGVuID0gcHRyIC0gbGluZTsKKworCWlmIChoZXhzeiA8IGxlbikKKwkJcmV0dXJuIDA7CisJbWVtY3B5KHBhdGNoLT5uZXdfb2lkX3ByZWZpeCwgbGluZSwgbGVuKTsKKwlwYXRjaC0+bmV3X29pZF9wcmVmaXhbbGVuXSA9IDA7CisJaWYgKCpwdHIgPT0gJyAnKQorCQlyZXR1cm4gZ2l0ZGlmZl9vbGRtb2RlKHN0YXRlLCBwdHIgKyAxLCBwYXRjaCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGlzIG5vcm1hbCBmb3IgYSBkaWZmIHRoYXQgZG9lc24ndCBjaGFuZ2UgYW55dGhpbmc6IHdlJ2xsIGZhbGwgdGhyb3VnaAorICogaW50byB0aGUgbmV4dCBkaWZmLiBUZWxsIHRoZSBwYXJzZXIgdG8gYnJlYWsgb3V0LgorICovCitzdGF0aWMgaW50IGdpdGRpZmZfdW5yZWNvZ25pemVkKHN0cnVjdCBnaXRkaWZmX2RhdGEgKnN0YXRlLAorCQkJCWNvbnN0IGNoYXIgKmxpbmUsCisJCQkJc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFNraXAgcF92YWx1ZSBsZWFkaW5nIGNvbXBvbmVudHMgZnJvbSAibGluZSI7IGFzIHdlIGRvIG5vdCBhY2NlcHQKKyAqIGFic29sdXRlIHBhdGhzLCByZXR1cm4gTlVMTCBpbiB0aGF0IGNhc2UuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpza2lwX3RyZWVfcHJlZml4KGludCBwX3ZhbHVlLAorCQkJCSAgICBjb25zdCBjaGFyICpsaW5lLAorCQkJCSAgICBpbnQgbGxlbikKK3sKKwlpbnQgbnNsYXNoOworCWludCBpOworCisJaWYgKCFwX3ZhbHVlKQorCQlyZXR1cm4gKGxsZW4gJiYgbGluZVswXSA9PSAnLycpID8gTlVMTCA6IGxpbmU7CisKKwluc2xhc2ggPSBwX3ZhbHVlOworCWZvciAoaSA9IDA7IGkgPCBsbGVuOyBpKyspIHsKKwkJaW50IGNoID0gbGluZVtpXTsKKwkJaWYgKGNoID09ICcvJyAmJiAtLW5zbGFzaCA8PSAwKQorCQkJcmV0dXJuIChpID09IDApID8gTlVMTCA6ICZsaW5lW2kgKyAxXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBUaGlzIGlzIHRvIGV4dHJhY3QgdGhlIHNhbWUgbmFtZSB0aGF0IGFwcGVhcnMgb24gImRpZmYgLS1naXQiCisgKiBsaW5lLiAgV2UgZG8gbm90IGZpbmQgYW5kIHJldHVybiBhbnl0aGluZyBpZiBpdCBpcyBhIHJlbmFtZQorICogcGF0Y2gsIGFuZCBpdCBpcyBPSyBiZWNhdXNlIHdlIHdpbGwgZmluZCB0aGUgbmFtZSBlbHNld2hlcmUuCisgKiBXZSBuZWVkIHRvIHJlbGlhYmx5IGZpbmQgbmFtZSBvbmx5IHdoZW4gaXQgaXMgbW9kZS1jaGFuZ2Ugb25seSwKKyAqIGNyZWF0aW9uIG9yIGRlbGV0aW9uIG9mIGFuIGVtcHR5IGZpbGUuICBJbiBhbnkgb2YgdGhlc2UgY2FzZXMsCisgKiBib3RoIHNpZGVzIGFyZSB0aGUgc2FtZSBuYW1lIHVuZGVyIGEvIGFuZCBiLyByZXNwZWN0aXZlbHkuCisgKi8KK3N0YXRpYyBjaGFyICpnaXRfaGVhZGVyX25hbWUoaW50IHBfdmFsdWUsCisJCQkgICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICAgIGludCBsbGVuKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqc2Vjb25kID0gTlVMTDsKKwlzaXplX3QgbGVuLCBsaW5lX2xlbjsKKworCWxpbmUgKz0gc3RybGVuKCJkaWZmIC0tZ2l0ICIpOworCWxsZW4gLT0gc3RybGVuKCJkaWZmIC0tZ2l0ICIpOworCisJaWYgKCpsaW5lID09ICciJykgeworCQljb25zdCBjaGFyICpjcDsKKwkJc3RydWN0IHN0cmJ1ZiBmaXJzdCA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIHNwID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKHVucXVvdGVfY19zdHlsZSgmZmlyc3QsIGxpbmUsICZzZWNvbmQpKQorCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKKworCQkvKiBzdHJpcCB0aGUgYS9iIHByZWZpeCBpbmNsdWRpbmcgdHJhaWxpbmcgc2xhc2ggKi8KKwkJY3AgPSBza2lwX3RyZWVfcHJlZml4KHBfdmFsdWUsIGZpcnN0LmJ1ZiwgZmlyc3QubGVuKTsKKwkJaWYgKCFjcCkKKwkJCWdvdG8gZnJlZV9hbmRfZmFpbDE7CisJCXN0cmJ1Zl9yZW1vdmUoJmZpcnN0LCAwLCBjcCAtIGZpcnN0LmJ1Zik7CisKKwkJLyoKKwkJICogc2Vjb25kIHBvaW50cyBhdCBvbmUgcGFzdCBjbG9zaW5nIGRxIG9mIG5hbWUuCisJCSAqIGZpbmQgdGhlIHNlY29uZCBuYW1lLgorCQkgKi8KKwkJd2hpbGUgKChzZWNvbmQgPCBsaW5lICsgbGxlbikgJiYgaXNzcGFjZSgqc2Vjb25kKSkKKwkJCXNlY29uZCsrOworCisJCWlmIChsaW5lICsgbGxlbiA8PSBzZWNvbmQpCisJCQlnb3RvIGZyZWVfYW5kX2ZhaWwxOworCQlpZiAoKnNlY29uZCA9PSAnIicpIHsKKwkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnNwLCBzZWNvbmQsIE5VTEwpKQorCQkJCWdvdG8gZnJlZV9hbmRfZmFpbDE7CisJCQljcCA9IHNraXBfdHJlZV9wcmVmaXgocF92YWx1ZSwgc3AuYnVmLCBzcC5sZW4pOworCQkJaWYgKCFjcCkKKwkJCQlnb3RvIGZyZWVfYW5kX2ZhaWwxOworCQkJLyogVGhleSBtdXN0IG1hdGNoLCBvdGhlcndpc2UgaWdub3JlICovCisJCQlpZiAoc3RyY21wKGNwLCBmaXJzdC5idWYpKQorCQkJCWdvdG8gZnJlZV9hbmRfZmFpbDE7CisJCQlzdHJidWZfcmVsZWFzZSgmc3ApOworCQkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmZpcnN0LCBOVUxMKTsKKwkJfQorCisJCS8qIHVucXVvdGVkIHNlY29uZCAqLworCQljcCA9IHNraXBfdHJlZV9wcmVmaXgocF92YWx1ZSwgc2Vjb25kLCBsaW5lICsgbGxlbiAtIHNlY29uZCk7CisJCWlmICghY3ApCisJCQlnb3RvIGZyZWVfYW5kX2ZhaWwxOworCQlpZiAobGluZSArIGxsZW4gLSBjcCAhPSBmaXJzdC5sZW4gfHwKKwkJICAgIG1lbWNtcChmaXJzdC5idWYsIGNwLCBmaXJzdC5sZW4pKQorCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKKwkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmZpcnN0LCBOVUxMKTsKKworCWZyZWVfYW5kX2ZhaWwxOgorCQlzdHJidWZfcmVsZWFzZSgmZmlyc3QpOworCQlzdHJidWZfcmVsZWFzZSgmc3ApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiB1bnF1b3RlZCBmaXJzdCBuYW1lICovCisJbmFtZSA9IHNraXBfdHJlZV9wcmVmaXgocF92YWx1ZSwgbGluZSwgbGxlbik7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogc2luY2UgdGhlIGZpcnN0IG5hbWUgaXMgdW5xdW90ZWQsIGEgZHEgaWYgZXhpc3RzIG11c3QgYmUKKwkgKiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWNvbmQgbmFtZS4KKwkgKi8KKwlmb3IgKHNlY29uZCA9IG5hbWU7IHNlY29uZCA8IGxpbmUgKyBsbGVuOyBzZWNvbmQrKykgeworCQlpZiAoKnNlY29uZCA9PSAnIicpIHsKKwkJCXN0cnVjdCBzdHJidWYgc3AgPSBTVFJCVUZfSU5JVDsKKwkJCWNvbnN0IGNoYXIgKm5wOworCisJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZzcCwgc2Vjb25kLCBOVUxMKSkKKwkJCQlnb3RvIGZyZWVfYW5kX2ZhaWwyOworCisJCQlucCA9IHNraXBfdHJlZV9wcmVmaXgocF92YWx1ZSwgc3AuYnVmLCBzcC5sZW4pOworCQkJaWYgKCFucCkKKwkJCQlnb3RvIGZyZWVfYW5kX2ZhaWwyOworCisJCQlsZW4gPSBzcC5idWYgKyBzcC5sZW4gLSBucDsKKwkJCWlmIChsZW4gPCBzZWNvbmQgLSBuYW1lICYmCisJCQkgICAgIXN0cm5jbXAobnAsIG5hbWUsIGxlbikgJiYKKwkJCSAgICBpc3NwYWNlKG5hbWVbbGVuXSkpIHsKKwkJCQkvKiBHb29kICovCisJCQkJc3RyYnVmX3JlbW92ZSgmc3AsIDAsIG5wIC0gc3AuYnVmKTsKKwkJCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmc3AsIE5VTEwpOworCQkJfQorCisJCWZyZWVfYW5kX2ZhaWwyOgorCQkJc3RyYnVmX3JlbGVhc2UoJnNwKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJLyoKKwkgKiBBY2NlcHQgYSBuYW1lIG9ubHkgaWYgaXQgc2hvd3MgdXAgdHdpY2UsIGV4YWN0bHkgdGhlIHNhbWUKKwkgKiBmb3JtLgorCSAqLworCXNlY29uZCA9IHN0cmNocihuYW1lLCAnXG4nKTsKKwlpZiAoIXNlY29uZCkKKwkJcmV0dXJuIE5VTEw7CisJbGluZV9sZW4gPSBzZWNvbmQgLSBuYW1lOworCWZvciAobGVuID0gMCA7IDsgbGVuKyspIHsKKwkJc3dpdGNoIChuYW1lW2xlbl0pIHsKKwkJZGVmYXVsdDoKKwkJCWNvbnRpbnVlOworCQljYXNlICdcbic6CisJCQlyZXR1cm4gTlVMTDsKKwkJY2FzZSAnXHQnOiBjYXNlICcgJzoKKwkJCS8qCisJCQkgKiBJcyB0aGlzIHRoZSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgcHJlaW1hZ2UKKwkJCSAqIGFuZCB0aGUgcG9zdGltYWdlIHBhdGhuYW1lPyAgQWdhaW4sIHdlIGFyZQorCQkJICogb25seSBpbnRlcmVzdGVkIGluIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzCisJCQkgKiBubyByZW5hbWUsIGFzIHRoaXMgaXMgb25seSB0byBzZXQgZGVmX25hbWUKKwkJCSAqIGFuZCBhIHJlbmFtZSBwYXRjaCBoYXMgdGhlIG5hbWVzIGVsc2V3aGVyZQorCQkJICogaW4gYW4gdW5hbWJpZ3VvdXMgZm9ybS4KKwkJCSAqLworCQkJaWYgKCFuYW1lW2xlbiArIDFdKQorCQkJCXJldHVybiBOVUxMOyAvKiBubyBwb3N0aW1hZ2UgbmFtZSAqLworCQkJc2Vjb25kID0gc2tpcF90cmVlX3ByZWZpeChwX3ZhbHVlLCBuYW1lICsgbGVuICsgMSwKKwkJCQkJCSAgbGluZV9sZW4gLSAobGVuICsgMSkpOworCQkJaWYgKCFzZWNvbmQpCisJCQkJcmV0dXJuIE5VTEw7CisJCQkvKgorCQkJICogRG9lcyBsZW4gYnl0ZXMgc3RhcnRpbmcgYXQgIm5hbWUiIGFuZCAic2Vjb25kIgorCQkJICogKHRoYXQgYXJlIHNlcGFyYXRlZCBieSBvbmUgSFQgb3IgU1Agd2UganVzdAorCQkJICogZm91bmQpIGV4YWN0bHkgbWF0Y2g/CisJCQkgKi8KKwkJCWlmIChzZWNvbmRbbGVuXSA9PSAnXG4nICYmICFzdHJuY21wKG5hbWUsIHNlY29uZCwgbGVuKSkKKwkJCQlyZXR1cm4geG1lbWR1cHoobmFtZSwgbGVuKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBjaGVja19oZWFkZXJfbGluZShpbnQgbGluZW5yLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCWludCBleHRlbnNpb25zID0gKHBhdGNoLT5pc19kZWxldGUgPT0gMSkgKyAocGF0Y2gtPmlzX25ldyA9PSAxKSArCisJCQkgKHBhdGNoLT5pc19yZW5hbWUgPT0gMSkgKyAocGF0Y2gtPmlzX2NvcHkgPT0gMSk7CisJaWYgKGV4dGVuc2lvbnMgPiAxKQorCQlyZXR1cm4gZXJyb3IoXygiaW5jb25zaXN0ZW50IGhlYWRlciBsaW5lcyAlZCBhbmQgJWQiKSwKKwkJCSAgICAgcGF0Y2gtPmV4dGVuc2lvbl9saW5lbnIsIGxpbmVucik7CisJaWYgKGV4dGVuc2lvbnMgJiYgIXBhdGNoLT5leHRlbnNpb25fbGluZW5yKQorCQlwYXRjaC0+ZXh0ZW5zaW9uX2xpbmVuciA9IGxpbmVucjsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX2dpdF9kaWZmX2hlYWRlcihzdHJ1Y3Qgc3RyYnVmICpyb290LAorCQkJICBpbnQgKmxpbmVuciwKKwkJCSAgaW50IHBfdmFsdWUsCisJCQkgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgIGludCBsZW4sCisJCQkgIHVuc2lnbmVkIGludCBzaXplLAorCQkJICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXN0cnVjdCBnaXRkaWZmX2RhdGEgcGFyc2VfaGRyX3N0YXRlOworCisJLyogQSBnaXQgZGlmZiBoYXMgZXhwbGljaXQgbmV3L2RlbGV0ZSBpbmZvcm1hdGlvbiwgc28gd2UgZG9uJ3QgZ3Vlc3MgKi8KKwlwYXRjaC0+aXNfbmV3ID0gMDsKKwlwYXRjaC0+aXNfZGVsZXRlID0gMDsKKworCS8qCisJICogU29tZSB0aGluZ3MgbWF5IG5vdCBoYXZlIHRoZSBvbGQgbmFtZSBpbiB0aGUKKwkgKiByZXN0IG9mIHRoZSBoZWFkZXJzIGFueXdoZXJlIChwdXJlIG1vZGUgY2hhbmdlcywKKwkgKiBvciByZW1vdmluZyBvciBhZGRpbmcgZW1wdHkgZmlsZXMpLCBzbyB3ZSBnZXQKKwkgKiB0aGUgZGVmYXVsdCBuYW1lIGZyb20gdGhlIGhlYWRlci4KKwkgKi8KKwlwYXRjaC0+ZGVmX25hbWUgPSBnaXRfaGVhZGVyX25hbWUocF92YWx1ZSwgbGluZSwgbGVuKTsKKwlpZiAocGF0Y2gtPmRlZl9uYW1lICYmIHJvb3QtPmxlbikgeworCQljaGFyICpzID0geHN0cmZtdCgiJXMlcyIsIHJvb3QtPmJ1ZiwgcGF0Y2gtPmRlZl9uYW1lKTsKKwkJZnJlZShwYXRjaC0+ZGVmX25hbWUpOworCQlwYXRjaC0+ZGVmX25hbWUgPSBzOworCX0KKworCWxpbmUgKz0gbGVuOworCXNpemUgLT0gbGVuOworCSgqbGluZW5yKSsrOworCXBhcnNlX2hkcl9zdGF0ZS5yb290ID0gcm9vdDsKKwlwYXJzZV9oZHJfc3RhdGUubGluZW5yID0gKmxpbmVucjsKKwlwYXJzZV9oZHJfc3RhdGUucF92YWx1ZSA9IHBfdmFsdWU7CisKKwlmb3IgKG9mZnNldCA9IGxlbiA7IHNpemUgPiAwIDsgb2Zmc2V0ICs9IGxlbiwgc2l6ZSAtPSBsZW4sIGxpbmUgKz0gbGVuLCAoKmxpbmVucikrKykgeworCQlzdGF0aWMgY29uc3Qgc3RydWN0IG9wZW50cnkgeworCQkJY29uc3QgY2hhciAqc3RyOworCQkJaW50ICgqZm4pKHN0cnVjdCBnaXRkaWZmX2RhdGEgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgcGF0Y2ggKik7CisJCX0gb3B0YWJsZVtdID0geworCQkJeyAiQEAgLSIsIGdpdGRpZmZfaGRyZW5kIH0sCisJCQl7ICItLS0gIiwgZ2l0ZGlmZl9vbGRuYW1lIH0sCisJCQl7ICIrKysgIiwgZ2l0ZGlmZl9uZXduYW1lIH0sCisJCQl7ICJvbGQgbW9kZSAiLCBnaXRkaWZmX29sZG1vZGUgfSwKKwkJCXsgIm5ldyBtb2RlICIsIGdpdGRpZmZfbmV3bW9kZSB9LAorCQkJeyAiZGVsZXRlZCBmaWxlIG1vZGUgIiwgZ2l0ZGlmZl9kZWxldGUgfSwKKwkJCXsgIm5ldyBmaWxlIG1vZGUgIiwgZ2l0ZGlmZl9uZXdmaWxlIH0sCisJCQl7ICJjb3B5IGZyb20gIiwgZ2l0ZGlmZl9jb3B5c3JjIH0sCisJCQl7ICJjb3B5IHRvICIsIGdpdGRpZmZfY29weWRzdCB9LAorCQkJeyAicmVuYW1lIG9sZCAiLCBnaXRkaWZmX3JlbmFtZXNyYyB9LAorCQkJeyAicmVuYW1lIG5ldyAiLCBnaXRkaWZmX3JlbmFtZWRzdCB9LAorCQkJeyAicmVuYW1lIGZyb20gIiwgZ2l0ZGlmZl9yZW5hbWVzcmMgfSwKKwkJCXsgInJlbmFtZSB0byAiLCBnaXRkaWZmX3JlbmFtZWRzdCB9LAorCQkJeyAic2ltaWxhcml0eSBpbmRleCAiLCBnaXRkaWZmX3NpbWlsYXJpdHkgfSwKKwkJCXsgImRpc3NpbWlsYXJpdHkgaW5kZXggIiwgZ2l0ZGlmZl9kaXNzaW1pbGFyaXR5IH0sCisJCQl7ICJpbmRleCAiLCBnaXRkaWZmX2luZGV4IH0sCisJCQl7ICIiLCBnaXRkaWZmX3VucmVjb2duaXplZCB9LAorCQl9OworCQlpbnQgaTsKKworCQlsZW4gPSBsaW5lbGVuKGxpbmUsIHNpemUpOworCQlpZiAoIWxlbiB8fCBsaW5lW2xlbi0xXSAhPSAnXG4nKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9wdGFibGUpOyBpKyspIHsKKwkJCWNvbnN0IHN0cnVjdCBvcGVudHJ5ICpwID0gb3B0YWJsZSArIGk7CisJCQlpbnQgb3BsZW4gPSBzdHJsZW4ocC0+c3RyKTsKKwkJCWludCByZXM7CisJCQlpZiAobGVuIDwgb3BsZW4gfHwgbWVtY21wKHAtPnN0ciwgbGluZSwgb3BsZW4pKQorCQkJCWNvbnRpbnVlOworCQkJcmVzID0gcC0+Zm4oJnBhcnNlX2hkcl9zdGF0ZSwgbGluZSArIG9wbGVuLCBwYXRjaCk7CisJCQlpZiAocmVzIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAoY2hlY2tfaGVhZGVyX2xpbmUoKmxpbmVuciwgcGF0Y2gpKQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChyZXMgPiAwKQorCQkJCWdvdG8gZG9uZTsKKwkJCWJyZWFrOworCQl9CisJfQorCitkb25lOgorCWlmICghcGF0Y2gtPm9sZF9uYW1lICYmICFwYXRjaC0+bmV3X25hbWUpIHsKKwkJaWYgKCFwYXRjaC0+ZGVmX25hbWUpIHsKKwkJCWVycm9yKFFfKCJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAiCisJCQkJICIlZCBsZWFkaW5nIHBhdGhuYW1lIGNvbXBvbmVudCAobGluZSAlZCkiLAorCQkJCSAiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgIgorCQkJCSAiJWQgbGVhZGluZyBwYXRobmFtZSBjb21wb25lbnRzIChsaW5lICVkKSIsCisJCQkJIHBhcnNlX2hkcl9zdGF0ZS5wX3ZhbHVlKSwKKwkJCSAgICAgIHBhcnNlX2hkcl9zdGF0ZS5wX3ZhbHVlLCAqbGluZW5yKTsKKwkJCXJldHVybiAtMTI4OworCQl9CisJCXBhdGNoLT5vbGRfbmFtZSA9IHhzdHJkdXAocGF0Y2gtPmRlZl9uYW1lKTsKKwkJcGF0Y2gtPm5ld19uYW1lID0geHN0cmR1cChwYXRjaC0+ZGVmX25hbWUpOworCX0KKwlpZiAoKCFwYXRjaC0+bmV3X25hbWUgJiYgIXBhdGNoLT5pc19kZWxldGUpIHx8CisJICAgICghcGF0Y2gtPm9sZF9uYW1lICYmICFwYXRjaC0+aXNfbmV3KSkgeworCQllcnJvcihfKCJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gIgorCQkJIihsaW5lICVkKSIpLCAqbGluZW5yKTsKKwkJcmV0dXJuIC0xMjg7CisJfQorCXBhdGNoLT5pc190b3BsZXZlbF9yZWxhdGl2ZSA9IDE7CisJcmV0dXJuIG9mZnNldDsKK30KKworc3RhdGljIGludCBwYXJzZV9udW0oY29uc3QgY2hhciAqbGluZSwgdW5zaWduZWQgbG9uZyAqcCkKK3sKKwljaGFyICpwdHI7CisKKwlpZiAoIWlzZGlnaXQoKmxpbmUpKQorCQlyZXR1cm4gMDsKKwkqcCA9IHN0cnRvdWwobGluZSwgJnB0ciwgMTApOworCXJldHVybiBwdHIgLSBsaW5lOworfQorCitzdGF0aWMgaW50IHBhcnNlX3JhbmdlKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIGludCBvZmZzZXQsIGNvbnN0IGNoYXIgKmV4cGVjdCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMikKK3sKKwlpbnQgZGlnaXRzLCBleDsKKworCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+PSBsZW4pCisJCXJldHVybiAtMTsKKwlsaW5lICs9IG9mZnNldDsKKwlsZW4gLT0gb2Zmc2V0OworCisJZGlnaXRzID0gcGFyc2VfbnVtKGxpbmUsIHAxKTsKKwlpZiAoIWRpZ2l0cykKKwkJcmV0dXJuIC0xOworCisJb2Zmc2V0ICs9IGRpZ2l0czsKKwlsaW5lICs9IGRpZ2l0czsKKwlsZW4gLT0gZGlnaXRzOworCisJKnAyID0gMTsKKwlpZiAoKmxpbmUgPT0gJywnKSB7CisJCWRpZ2l0cyA9IHBhcnNlX251bShsaW5lKzEsIHAyKTsKKwkJaWYgKCFkaWdpdHMpCisJCQlyZXR1cm4gLTE7CisKKwkJb2Zmc2V0ICs9IGRpZ2l0cysxOworCQlsaW5lICs9IGRpZ2l0cysxOworCQlsZW4gLT0gZGlnaXRzKzE7CisJfQorCisJZXggPSBzdHJsZW4oZXhwZWN0KTsKKwlpZiAoZXggPiBsZW4pCisJCXJldHVybiAtMTsKKwlpZiAobWVtY21wKGxpbmUsIGV4cGVjdCwgZXgpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gb2Zmc2V0ICsgZXg7Cit9CisKK3N0YXRpYyB2b2lkIHJlY291bnRfZGlmZihjb25zdCBjaGFyICpsaW5lLCBpbnQgc2l6ZSwgc3RydWN0IGZyYWdtZW50ICpmcmFnbWVudCkKK3sKKwlpbnQgb2xkbGluZXMgPSAwLCBuZXdsaW5lcyA9IDAsIHJldCA9IDA7CisKKwlpZiAoc2l6ZSA8IDEpIHsKKwkJd2FybmluZygicmVjb3VudDogaWdub3JlIGVtcHR5IGh1bmsiKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoOzspIHsKKwkJaW50IGxlbiA9IGxpbmVsZW4obGluZSwgc2l6ZSk7CisJCXNpemUgLT0gbGVuOworCQlsaW5lICs9IGxlbjsKKworCQlpZiAoc2l6ZSA8IDEpCisJCQlicmVhazsKKworCQlzd2l0Y2ggKCpsaW5lKSB7CisJCWNhc2UgJyAnOiBjYXNlICdcbic6CisJCQluZXdsaW5lcysrOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgJy0nOgorCQkJb2xkbGluZXMrKzsKKwkJCWNvbnRpbnVlOworCQljYXNlICcrJzoKKwkJCW5ld2xpbmVzKys7CisJCQljb250aW51ZTsKKwkJY2FzZSAnXFwnOgorCQkJY29udGludWU7CisJCWNhc2UgJ0AnOgorCQkJcmV0ID0gc2l6ZSA8IDMgfHwgIXN0YXJ0c193aXRoKGxpbmUsICJAQCAiKTsKKwkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCXJldCA9IHNpemUgPCA1IHx8ICFzdGFydHNfd2l0aChsaW5lLCAiZGlmZiAiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQorCQlpZiAocmV0KSB7CisJCQl3YXJuaW5nKF8oInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIpLAorCQkJCShpbnQpbGluZWxlbihsaW5lLCBzaXplKSwgbGluZSk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJfQorCWZyYWdtZW50LT5vbGRsaW5lcyA9IG9sZGxpbmVzOworCWZyYWdtZW50LT5uZXdsaW5lcyA9IG5ld2xpbmVzOworfQorCisvKgorICogUGFyc2UgYSB1bmlmaWVkIGRpZmYgZnJhZ21lbnQgaGVhZGVyIG9mIHRoZQorICogZm9ybSAiQEAgLWEsYiArYyxkIEBAIgorICovCitzdGF0aWMgaW50IHBhcnNlX2ZyYWdtZW50X2hlYWRlcihjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCBzdHJ1Y3QgZnJhZ21lbnQgKmZyYWdtZW50KQoreworCWludCBvZmZzZXQ7CisKKwlpZiAoIWxlbiB8fCBsaW5lW2xlbi0xXSAhPSAnXG4nKQorCQlyZXR1cm4gLTE7CisKKwkvKiBGaWd1cmUgb3V0IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gYSBmcmFnbWVudCAqLworCW9mZnNldCA9IHBhcnNlX3JhbmdlKGxpbmUsIGxlbiwgNCwgIiArIiwgJmZyYWdtZW50LT5vbGRwb3MsICZmcmFnbWVudC0+b2xkbGluZXMpOworCW9mZnNldCA9IHBhcnNlX3JhbmdlKGxpbmUsIGxlbiwgb2Zmc2V0LCAiIEBAIiwgJmZyYWdtZW50LT5uZXdwb3MsICZmcmFnbWVudC0+bmV3bGluZXMpOworCisJcmV0dXJuIG9mZnNldDsKK30KKworLyoKKyAqIEZpbmQgZmlsZSBkaWZmIGhlYWRlcgorICoKKyAqIFJldHVybnM6CisgKiAgLTEgaWYgbm8gaGVhZGVyIHdhcyBmb3VuZAorICogIC0xMjggaW4gY2FzZSBvZiBlcnJvcgorICogICB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyIGluIGJ5dGVzIChjYWxsZWQgIm9mZnNldCIpIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGZpbmRfaGVhZGVyKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCSAgICAgICBjb25zdCBjaGFyICpsaW5lLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICAgICAgaW50ICpoZHJzaXplLAorCQkgICAgICAgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgbGVuOworCisJcGF0Y2gtPmlzX3RvcGxldmVsX3JlbGF0aXZlID0gMDsKKwlwYXRjaC0+aXNfcmVuYW1lID0gcGF0Y2gtPmlzX2NvcHkgPSAwOworCXBhdGNoLT5pc19uZXcgPSBwYXRjaC0+aXNfZGVsZXRlID0gLTE7CisJcGF0Y2gtPm9sZF9tb2RlID0gcGF0Y2gtPm5ld19tb2RlID0gMDsKKwlwYXRjaC0+b2xkX25hbWUgPSBwYXRjaC0+bmV3X25hbWUgPSBOVUxMOworCWZvciAob2Zmc2V0ID0gMDsgc2l6ZSA+IDA7IG9mZnNldCArPSBsZW4sIHNpemUgLT0gbGVuLCBsaW5lICs9IGxlbiwgc3RhdGUtPmxpbmVucisrKSB7CisJCXVuc2lnbmVkIGxvbmcgbmV4dGxlbjsKKworCQlsZW4gPSBsaW5lbGVuKGxpbmUsIHNpemUpOworCQlpZiAoIWxlbikKKwkJCWJyZWFrOworCisJCS8qIFRlc3RpbmcgdGhpcyBlYXJseSBhbGxvd3MgdXMgdG8gdGFrZSBhIGZldyBzaG9ydGN1dHMuLiAqLworCQlpZiAobGVuIDwgNikKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIE1ha2Ugc3VyZSB3ZSBkb24ndCBmaW5kIGFueSB1bmNvbm5lY3RlZCBwYXRjaCBmcmFnbWVudHMuCisJCSAqIFRoYXQncyBhIHNpZ24gdGhhdCB3ZSBkaWRuJ3QgZmluZCBhIGhlYWRlciwgYW5kIHRoYXQgYQorCQkgKiBwYXRjaCBoYXMgYmVjb21lIGNvcnJ1cHRlZC9icm9rZW4gdXAuCisJCSAqLworCQlpZiAoIW1lbWNtcCgiQEAgLSIsIGxpbmUsIDQpKSB7CisJCQlzdHJ1Y3QgZnJhZ21lbnQgZHVtbXk7CisJCQlpZiAocGFyc2VfZnJhZ21lbnRfaGVhZGVyKGxpbmUsIGxlbiwgJmR1bW15KSA8IDApCisJCQkJY29udGludWU7CisJCQllcnJvcihfKCJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIiksCisJCQkJICAgICBzdGF0ZS0+bGluZW5yLCAoaW50KWxlbi0xLCBsaW5lKTsKKwkJCXJldHVybiAtMTI4OworCQl9CisKKwkJaWYgKHNpemUgPCBsZW4gKyA2KQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogR2l0IHBhdGNoPyBJdCBtaWdodCBub3QgaGF2ZSBhIHJlYWwgcGF0Y2gsIGp1c3QgYSByZW5hbWUKKwkJICogb3IgbW9kZSBjaGFuZ2UsIHNvIHdlIGhhbmRsZSB0aGF0IHNwZWNpYWxseQorCQkgKi8KKwkJaWYgKCFtZW1jbXAoImRpZmYgLS1naXQgIiwgbGluZSwgMTEpKSB7CisJCQlpbnQgZ2l0X2hkcl9sZW4gPSBwYXJzZV9naXRfZGlmZl9oZWFkZXIoJnN0YXRlLT5yb290LCAmc3RhdGUtPmxpbmVuciwKKwkJCQkJCQkJc3RhdGUtPnBfdmFsdWUsIGxpbmUsIGxlbiwKKwkJCQkJCQkJc2l6ZSwgcGF0Y2gpOworCQkJaWYgKGdpdF9oZHJfbGVuIDwgMCkKKwkJCQlyZXR1cm4gLTEyODsKKwkJCWlmIChnaXRfaGRyX2xlbiA8PSBsZW4pCisJCQkJY29udGludWU7CisJCQkqaGRyc2l6ZSA9IGdpdF9oZHJfbGVuOworCQkJcmV0dXJuIG9mZnNldDsKKwkJfQorCisJCS8qIC0tLSBmb2xsb3dlZCBieSArKysgPyAqLworCQlpZiAobWVtY21wKCItLS0gIiwgbGluZSwgIDQpIHx8IG1lbWNtcCgiKysrICIsIGxpbmUgKyBsZW4sIDQpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogV2Ugb25seSBhY2NlcHQgdW5pZmllZCBwYXRjaGVzLCBzbyB3ZSB3YW50IGl0IHRvCisJCSAqIGF0IGxlYXN0IGhhdmUgIkBAIC1hLGIgK2MsZCBAQFxuIiwgd2hpY2ggaXMgMTQgY2hhcnMKKwkJICogbWluaW11bSAoIkBAIC0wLDAgKzEgQEBcbiIgaXMgdGhlIHNob3J0ZXN0KS4KKwkJICovCisJCW5leHRsZW4gPSBsaW5lbGVuKGxpbmUgKyBsZW4sIHNpemUgLSBsZW4pOworCQlpZiAoc2l6ZSA8IG5leHRsZW4gKyAxNCB8fCBtZW1jbXAoIkBAIC0iLCBsaW5lICsgbGVuICsgbmV4dGxlbiwgNCkpCisJCQljb250aW51ZTsKKworCQkvKiBPaywgd2UnbGwgY29uc2lkZXIgaXQgYSBwYXRjaCAqLworCQlpZiAocGFyc2VfdHJhZGl0aW9uYWxfcGF0Y2goc3RhdGUsIGxpbmUsIGxpbmUrbGVuLCBwYXRjaCkpCisJCQlyZXR1cm4gLTEyODsKKwkJKmhkcnNpemUgPSBsZW4gKyBuZXh0bGVuOworCQlzdGF0ZS0+bGluZW5yICs9IDI7CisJCXJldHVybiBvZmZzZXQ7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgcmVjb3JkX3dzX2Vycm9yKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgdW5zaWduZWQgcmVzdWx0LAorCQkJICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICAgaW50IGxlbiwKKwkJCSAgICBpbnQgbGluZW5yKQoreworCWNoYXIgKmVycjsKKworCWlmICghcmVzdWx0KQorCQlyZXR1cm47CisKKwlzdGF0ZS0+d2hpdGVzcGFjZV9lcnJvcisrOworCWlmIChzdGF0ZS0+c3F1ZWxjaF93aGl0ZXNwYWNlX2Vycm9ycyAmJgorCSAgICBzdGF0ZS0+c3F1ZWxjaF93aGl0ZXNwYWNlX2Vycm9ycyA8IHN0YXRlLT53aGl0ZXNwYWNlX2Vycm9yKQorCQlyZXR1cm47CisKKwllcnIgPSB3aGl0ZXNwYWNlX2Vycm9yX3N0cmluZyhyZXN1bHQpOworCWlmIChzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X3NpbGVudCkKKwkJZnByaW50ZihzdGRlcnIsICIlczolZDogJXMuXG4lLipzXG4iLAorCQkJc3RhdGUtPnBhdGNoX2lucHV0X2ZpbGUsIGxpbmVuciwgZXJyLCBsZW4sIGxpbmUpOworCWZyZWUoZXJyKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfd2hpdGVzcGFjZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICAgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgICBpbnQgbGVuLAorCQkJICAgICB1bnNpZ25lZCB3c19ydWxlKQoreworCXVuc2lnbmVkIHJlc3VsdCA9IHdzX2NoZWNrKGxpbmUgKyAxLCBsZW4gLSAxLCB3c19ydWxlKTsKKworCXJlY29yZF93c19lcnJvcihzdGF0ZSwgcmVzdWx0LCBsaW5lICsgMSwgbGVuIC0gMiwgc3RhdGUtPmxpbmVucik7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgcGF0Y2ggaGFzIGNvbnRleHQgbGluZXMgd2l0aCBDUkxGIG9yCisgKiB0aGUgcGF0Y2ggd2FudHMgdG8gcmVtb3ZlIGxpbmVzIHdpdGggQ1JMRi4KKyAqLworc3RhdGljIHZvaWQgY2hlY2tfb2xkX2Zvcl9jcmxmKHN0cnVjdCBwYXRjaCAqcGF0Y2gsIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJaWYgKGxlbiA+PSAyICYmIGxpbmVbbGVuLTFdID09ICdcbicgJiYgbGluZVtsZW4tMl0gPT0gJ1xyJykgeworCQlwYXRjaC0+d3NfcnVsZSB8PSBXU19DUl9BVF9FT0w7CisJCXBhdGNoLT5jcmxmX2luX29sZCA9IDE7CisJfQorfQorCisKKy8qCisgKiBQYXJzZSBhIHVuaWZpZWQgZGlmZi4gTm90ZSB0aGF0IHRoaXMgcmVhbGx5IG5lZWRzIHRvIHBhcnNlIGVhY2gKKyAqIGZyYWdtZW50IHNlcGFyYXRlbHksIHNpbmNlIHRoZSBvbmx5IHdheSB0byBrbm93IHRoZSBkaWZmZXJlbmNlCisgKiBiZXR3ZWVuIGEgIi0tLSIgdGhhdCBpcyBwYXJ0IG9mIGEgcGF0Y2gsIGFuZCBhICItLS0iIHRoYXQgc3RhcnRzCisgKiB0aGUgbmV4dCBwYXRjaCBpcyB0byBsb29rIGF0IHRoZSBsaW5lIGNvdW50cy4uCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfZnJhZ21lbnQoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoLAorCQkJICBzdHJ1Y3QgZnJhZ21lbnQgKmZyYWdtZW50KQoreworCWludCBhZGRlZCwgZGVsZXRlZDsKKwlpbnQgbGVuID0gbGluZWxlbihsaW5lLCBzaXplKSwgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgb2xkbGluZXMsIG5ld2xpbmVzOworCXVuc2lnbmVkIGxvbmcgbGVhZGluZywgdHJhaWxpbmc7CisKKwlvZmZzZXQgPSBwYXJzZV9mcmFnbWVudF9oZWFkZXIobGluZSwgbGVuLCBmcmFnbWVudCk7CisJaWYgKG9mZnNldCA8IDApCisJCXJldHVybiAtMTsKKwlpZiAob2Zmc2V0ID4gMCAmJiBwYXRjaC0+cmVjb3VudCkKKwkJcmVjb3VudF9kaWZmKGxpbmUgKyBvZmZzZXQsIHNpemUgLSBvZmZzZXQsIGZyYWdtZW50KTsKKwlvbGRsaW5lcyA9IGZyYWdtZW50LT5vbGRsaW5lczsKKwluZXdsaW5lcyA9IGZyYWdtZW50LT5uZXdsaW5lczsKKwlsZWFkaW5nID0gMDsKKwl0cmFpbGluZyA9IDA7CisKKwkvKiBQYXJzZSB0aGUgdGhpbmcuLiAqLworCWxpbmUgKz0gbGVuOworCXNpemUgLT0gbGVuOworCXN0YXRlLT5saW5lbnIrKzsKKwlhZGRlZCA9IGRlbGV0ZWQgPSAwOworCWZvciAob2Zmc2V0ID0gbGVuOworCSAgICAgMCA8IHNpemU7CisJICAgICBvZmZzZXQgKz0gbGVuLCBzaXplIC09IGxlbiwgbGluZSArPSBsZW4sIHN0YXRlLT5saW5lbnIrKykgeworCQlpZiAoIW9sZGxpbmVzICYmICFuZXdsaW5lcykKKwkJCWJyZWFrOworCQlsZW4gPSBsaW5lbGVuKGxpbmUsIHNpemUpOworCQlpZiAoIWxlbiB8fCBsaW5lW2xlbi0xXSAhPSAnXG4nKQorCQkJcmV0dXJuIC0xOworCQlzd2l0Y2ggKCpsaW5lKSB7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLTE7CisJCWNhc2UgJ1xuJzogLyogbmV3ZXIgR05VIGRpZmYsIGFuIGVtcHR5IGNvbnRleHQgbGluZSAqLworCQljYXNlICcgJzoKKwkJCW9sZGxpbmVzLS07CisJCQluZXdsaW5lcy0tOworCQkJaWYgKCFkZWxldGVkICYmICFhZGRlZCkKKwkJCQlsZWFkaW5nKys7CisJCQl0cmFpbGluZysrOworCQkJY2hlY2tfb2xkX2Zvcl9jcmxmKHBhdGNoLCBsaW5lLCBsZW4pOworCQkJaWYgKCFzdGF0ZS0+YXBwbHlfaW5fcmV2ZXJzZSAmJgorCQkJICAgIHN0YXRlLT53c19lcnJvcl9hY3Rpb24gPT0gY29ycmVjdF93c19lcnJvcikKKwkJCQljaGVja193aGl0ZXNwYWNlKHN0YXRlLCBsaW5lLCBsZW4sIHBhdGNoLT53c19ydWxlKTsKKwkJCWJyZWFrOworCQljYXNlICctJzoKKwkJCWlmICghc3RhdGUtPmFwcGx5X2luX3JldmVyc2UpCisJCQkJY2hlY2tfb2xkX2Zvcl9jcmxmKHBhdGNoLCBsaW5lLCBsZW4pOworCQkJaWYgKHN0YXRlLT5hcHBseV9pbl9yZXZlcnNlICYmCisJCQkgICAgc3RhdGUtPndzX2Vycm9yX2FjdGlvbiAhPSBub3dhcm5fd3NfZXJyb3IpCisJCQkJY2hlY2tfd2hpdGVzcGFjZShzdGF0ZSwgbGluZSwgbGVuLCBwYXRjaC0+d3NfcnVsZSk7CisJCQlkZWxldGVkKys7CisJCQlvbGRsaW5lcy0tOworCQkJdHJhaWxpbmcgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJysnOgorCQkJaWYgKHN0YXRlLT5hcHBseV9pbl9yZXZlcnNlKQorCQkJCWNoZWNrX29sZF9mb3JfY3JsZihwYXRjaCwgbGluZSwgbGVuKTsKKwkJCWlmICghc3RhdGUtPmFwcGx5X2luX3JldmVyc2UgJiYKKwkJCSAgICBzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uICE9IG5vd2Fybl93c19lcnJvcikKKwkJCQljaGVja193aGl0ZXNwYWNlKHN0YXRlLCBsaW5lLCBsZW4sIHBhdGNoLT53c19ydWxlKTsKKwkJCWFkZGVkKys7CisJCQluZXdsaW5lcy0tOworCQkJdHJhaWxpbmcgPSAwOworCQkJYnJlYWs7CisKKwkJLyoKKwkJICogV2UgYWxsb3cgIlwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZSIuIERlcGVuZGluZworCQkgKiBvbiBsb2NhbGUgc2V0dGluZ3Mgd2hlbiB0aGUgcGF0Y2ggd2FzIHByb2R1Y2VkIHdlCisJCSAqIGRvbid0IGtub3cgd2hhdCB0aGlzIGxpbmUgbG9va3MgbGlrZS4gVGhlIG9ubHkKKwkJICogdGhpbmcgd2UgZG8ga25vdyBpcyB0aGF0IGl0IGJlZ2lucyB3aXRoICJcICIuCisJCSAqIENoZWNraW5nIGZvciAxMiBpcyBqdXN0IGZvciBzYW5pdHkgY2hlY2sgLS0gYW55CisJCSAqIGwxMG4gb2YgIlwgTm8gbmV3bGluZS4uLiIgaXMgYXQgbGVhc3QgdGhhdCBsb25nLgorCQkgKi8KKwkJY2FzZSAnXFwnOgorCQkJaWYgKGxlbiA8IDEyIHx8IG1lbWNtcChsaW5lLCAiXFwgIiwgMikpCisJCQkJcmV0dXJuIC0xOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKG9sZGxpbmVzIHx8IG5ld2xpbmVzKQorCQlyZXR1cm4gLTE7CisJaWYgKCFwYXRjaC0+cmVjb3VudCAmJiAhZGVsZXRlZCAmJiAhYWRkZWQpCisJCXJldHVybiAtMTsKKworCWZyYWdtZW50LT5sZWFkaW5nID0gbGVhZGluZzsKKwlmcmFnbWVudC0+dHJhaWxpbmcgPSB0cmFpbGluZzsKKworCS8qCisJICogSWYgYSBmcmFnbWVudCBlbmRzIHdpdGggYW4gaW5jb21wbGV0ZSBsaW5lLCB3ZSBmYWlsZWQgdG8gaW5jbHVkZQorCSAqIGl0IGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGl0IG9sZGxpbmVzID09IG5ld2xpbmVzID09IDAKKwkgKiBiZWZvcmUgc2VlaW5nIGl0LgorCSAqLworCWlmICgxMiA8IHNpemUgJiYgIW1lbWNtcChsaW5lLCAiXFwgIiwgMikpCisJCW9mZnNldCArPSBsaW5lbGVuKGxpbmUsIHNpemUpOworCisJcGF0Y2gtPmxpbmVzX2FkZGVkICs9IGFkZGVkOworCXBhdGNoLT5saW5lc19kZWxldGVkICs9IGRlbGV0ZWQ7CisKKwlpZiAoMCA8IHBhdGNoLT5pc19uZXcgJiYgb2xkbGluZXMpCisJCXJldHVybiBlcnJvcihfKCJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIpKTsKKwlpZiAoMCA8IHBhdGNoLT5pc19kZWxldGUgJiYgbmV3bGluZXMpCisJCXJldHVybiBlcnJvcihfKCJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIikpOworCXJldHVybiBvZmZzZXQ7Cit9CisKKy8qCisgKiBXZSBoYXZlIHNlZW4gImRpZmYgLS1naXQgYS8uLi4gYi8uLi4iIGhlYWRlciAob3IgYSB0cmFkaXRpb25hbCBwYXRjaAorICogaGVhZGVyKS4gIFJlYWQgaHVua3MgdGhhdCBiZWxvbmcgdG8gdGhpcyBwYXRjaCBpbnRvIGZyYWdtZW50cyBhbmQgaGFuZworICogdGhlbSB0byB0aGUgZ2l2ZW4gcGF0Y2ggc3RydWN0dXJlLgorICoKKyAqIFRoZSAoZnJhZ21lbnQtPnBhdGNoLCBmcmFnbWVudC0+c2l6ZSkgcGFpciBwb2ludHMgaW50byB0aGUgbWVtb3J5IGdpdmVuCisgKiBieSB0aGUgY2FsbGVyLCBub3QgYSBjb3B5LCB3aGVuIHdlIHJldHVybi4KKyAqCisgKiBSZXR1cm5zOgorICogICAtMSBpbiBjYXNlIG9mIGVycm9yLAorICogICB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBwYXRjaCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2Vfc2luZ2xlX3BhdGNoKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgICAgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CisJdW5zaWduZWQgbG9uZyBvbGRsaW5lcyA9IDAsIG5ld2xpbmVzID0gMCwgY29udGV4dCA9IDA7CisJc3RydWN0IGZyYWdtZW50ICoqZnJhZ3AgPSAmcGF0Y2gtPmZyYWdtZW50czsKKworCXdoaWxlIChzaXplID4gNCAmJiAhbWVtY21wKGxpbmUsICJAQCAtIiwgNCkpIHsKKwkJc3RydWN0IGZyYWdtZW50ICpmcmFnbWVudDsKKwkJaW50IGxlbjsKKworCQlmcmFnbWVudCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpmcmFnbWVudCkpOworCQlmcmFnbWVudC0+bGluZW5yID0gc3RhdGUtPmxpbmVucjsKKwkJbGVuID0gcGFyc2VfZnJhZ21lbnQoc3RhdGUsIGxpbmUsIHNpemUsIHBhdGNoLCBmcmFnbWVudCk7CisJCWlmIChsZW4gPD0gMCkgeworCQkJZnJlZShmcmFnbWVudCk7CisJCQlyZXR1cm4gZXJyb3IoXygiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIiksIHN0YXRlLT5saW5lbnIpOworCQl9CisJCWZyYWdtZW50LT5wYXRjaCA9IGxpbmU7CisJCWZyYWdtZW50LT5zaXplID0gbGVuOworCQlvbGRsaW5lcyArPSBmcmFnbWVudC0+b2xkbGluZXM7CisJCW5ld2xpbmVzICs9IGZyYWdtZW50LT5uZXdsaW5lczsKKwkJY29udGV4dCArPSBmcmFnbWVudC0+bGVhZGluZyArIGZyYWdtZW50LT50cmFpbGluZzsKKworCQkqZnJhZ3AgPSBmcmFnbWVudDsKKwkJZnJhZ3AgPSAmZnJhZ21lbnQtPm5leHQ7CisKKwkJb2Zmc2V0ICs9IGxlbjsKKwkJbGluZSArPSBsZW47CisJCXNpemUgLT0gbGVuOworCX0KKworCS8qCisJICogSWYgc29tZXRoaW5nIHdhcyByZW1vdmVkIChpLmUuIHdlIGhhdmUgb2xkLWxpbmVzKSBpdCBjYW5ub3QKKwkgKiBiZSBjcmVhdGlvbiwgYW5kIGlmIHNvbWV0aGluZyB3YXMgYWRkZWQgaXQgY2Fubm90IGJlCisJICogZGVsZXRpb24uICBIb3dldmVyLCB0aGUgcmV2ZXJzZSBpcyBub3QgdHJ1ZTsgLS11bmlmaWVkPTAKKwkgKiBwYXRjaGVzIHRoYXQgb25seSBhZGQgYXJlIG5vdCBuZWNlc3NhcmlseSBjcmVhdGlvbiBldmVuCisJICogdGhvdWdoIHRoZXkgZG8gbm90IGhhdmUgYW55IG9sZCBsaW5lcywgYW5kIG9uZXMgdGhhdCBvbmx5CisJICogZGVsZXRlIGFyZSBub3QgbmVjZXNzYXJpbHkgZGVsZXRpb24uCisJICoKKwkgKiBVbmZvcnR1bmF0ZWx5LCBhIHJlYWwgY3JlYXRpb24vZGVsZXRpb24gcGF0Y2ggZG8gX25vdF8gaGF2ZQorCSAqIGFueSBjb250ZXh0IGxpbmUgYnkgZGVmaW5pdGlvbiwgc28gd2UgY2Fubm90IHNhZmVseSB0ZWxsIGl0CisJICogYXBhcnQgd2l0aCAtLXVuaWZpZWQ9MCBpbnNhbml0eS4gIEF0IGxlYXN0IGlmIHRoZSBwYXRjaCBoYXMKKwkgKiBtb3JlIHRoYW4gb25lIGh1bmsgaXQgaXMgbm90IGNyZWF0aW9uIG9yIGRlbGV0aW9uLgorCSAqLworCWlmIChwYXRjaC0+aXNfbmV3IDwgMCAmJgorCSAgICAob2xkbGluZXMgfHwgKHBhdGNoLT5mcmFnbWVudHMgJiYgcGF0Y2gtPmZyYWdtZW50cy0+bmV4dCkpKQorCQlwYXRjaC0+aXNfbmV3ID0gMDsKKwlpZiAocGF0Y2gtPmlzX2RlbGV0ZSA8IDAgJiYKKwkgICAgKG5ld2xpbmVzIHx8IChwYXRjaC0+ZnJhZ21lbnRzICYmIHBhdGNoLT5mcmFnbWVudHMtPm5leHQpKSkKKwkJcGF0Y2gtPmlzX2RlbGV0ZSA9IDA7CisKKwlpZiAoMCA8IHBhdGNoLT5pc19uZXcgJiYgb2xkbGluZXMpCisJCXJldHVybiBlcnJvcihfKCJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIpLCBwYXRjaC0+bmV3X25hbWUpOworCWlmICgwIDwgcGF0Y2gtPmlzX2RlbGV0ZSAmJiBuZXdsaW5lcykKKwkJcmV0dXJuIGVycm9yKF8oImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiKSwgcGF0Y2gtPm9sZF9uYW1lKTsKKwlpZiAoIXBhdGNoLT5pc19kZWxldGUgJiYgIW5ld2xpbmVzICYmIGNvbnRleHQgJiYgc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA+IHZlcmJvc2l0eV9zaWxlbnQpCisJCWZwcmludGZfbG4oc3RkZXJyLAorCQkJICAgXygiKiogd2FybmluZzogIgorCQkJICAgICAiZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIpLAorCQkJICAgcGF0Y2gtPm5ld19uYW1lKTsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1ldGFkYXRhX2NoYW5nZXMoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlyZXR1cm4JcGF0Y2gtPmlzX3JlbmFtZSA+IDAgfHwKKwkJcGF0Y2gtPmlzX2NvcHkgPiAwIHx8CisJCXBhdGNoLT5pc19uZXcgPiAwIHx8CisJCXBhdGNoLT5pc19kZWxldGUgfHwKKwkJKHBhdGNoLT5vbGRfbW9kZSAmJiBwYXRjaC0+bmV3X21vZGUgJiYKKwkJIHBhdGNoLT5vbGRfbW9kZSAhPSBwYXRjaC0+bmV3X21vZGUpOworfQorCitzdGF0aWMgY2hhciAqaW5mbGF0ZV9pdChjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQl1bnNpZ25lZCBsb25nIGluZmxhdGVkX3NpemUpCit7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCXZvaWQgKm91dDsKKwlpbnQgc3Q7CisKKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCisJc3RyZWFtLm5leHRfaW4gPSAodW5zaWduZWQgY2hhciAqKWRhdGE7CisJc3RyZWFtLmF2YWlsX2luID0gc2l6ZTsKKwlzdHJlYW0ubmV4dF9vdXQgPSBvdXQgPSB4bWFsbG9jKGluZmxhdGVkX3NpemUpOworCXN0cmVhbS5hdmFpbF9vdXQgPSBpbmZsYXRlZF9zaXplOworCWdpdF9pbmZsYXRlX2luaXQoJnN0cmVhbSk7CisJc3QgPSBnaXRfaW5mbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7CisJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCWlmICgoc3QgIT0gWl9TVFJFQU1fRU5EKSB8fCBzdHJlYW0udG90YWxfb3V0ICE9IGluZmxhdGVkX3NpemUpIHsKKwkJZnJlZShvdXQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIG91dDsKK30KKworLyoKKyAqIFJlYWQgYSBiaW5hcnkgaHVuayBhbmQgcmV0dXJuIGEgbmV3IGZyYWdtZW50OyBmcmFnbWVudC0+cGF0Y2gKKyAqIHBvaW50cyBhdCBhbiBhbGxvY2F0ZWQgbWVtb3J5IHRoYXQgdGhlIGNhbGxlciBtdXN0IGZyZWUsIHNvCisgKiBpdCBpcyBtYXJrZWQgYXMgIi0+ZnJlZV9wYXRjaCA9IDEiLgorICovCitzdGF0aWMgc3RydWN0IGZyYWdtZW50ICpwYXJzZV9iaW5hcnlfaHVuayhzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJCQkgIGNoYXIgKipidWZfcCwKKwkJCQkJICB1bnNpZ25lZCBsb25nICpzel9wLAorCQkJCQkgIGludCAqc3RhdHVzX3AsCisJCQkJCSAgaW50ICp1c2VkX3ApCit7CisJLyoKKwkgKiBFeHBlY3QgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGggYmluYXJ5IHBhdGNoIG1ldGhvZCAoImxpdGVyYWwiCisJICogb3IgImRlbHRhIiksIGZvbGxvd2VkIGJ5IHRoZSBsZW5ndGggb2YgZGF0YSBiZWZvcmUgZGVmbGF0aW5nLgorCSAqIGEgc2VxdWVuY2Ugb2YgJ2xlbmd0aC1ieXRlJyBmb2xsb3dlZCBieSBiYXNlLTg1IGVuY29kZWQgZGF0YQorCSAqIHNob3VsZCBmb2xsb3csIHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5lLgorCSAqCisJICogRWFjaCA1LWJ5dGUgc2VxdWVuY2Ugb2YgYmFzZS04NSBlbmNvZGVzIHVwIHRvIDQgYnl0ZXMsCisJICogYW5kIHdlIHdvdWxkIGxpbWl0IHRoZSBwYXRjaCBsaW5lIHRvIDY2IGNoYXJhY3RlcnMsCisJICogc28gb25lIGxpbmUgY2FuIGZpdCB1cCB0byAxMyBncm91cHMgdGhhdCB3b3VsZCBkZWNvZGUKKwkgKiB0byA1MiBieXRlcyBtYXguICBUaGUgbGVuZ3RoIGJ5dGUgJ0EnLSdaJyBjb3JyZXNwb25kcworCSAqIHRvIDEtMjYgYnl0ZXMsIGFuZCAnYSctJ3onIGNvcnJlc3BvbmRzIHRvIDI3LTUyIGJ5dGVzLgorCSAqLworCWludCBsbGVuLCB1c2VkOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9ICpzel9wOworCWNoYXIgKmJ1ZmZlciA9ICpidWZfcDsKKwlpbnQgcGF0Y2hfbWV0aG9kOworCXVuc2lnbmVkIGxvbmcgb3JpZ2xlbjsKKwljaGFyICpkYXRhID0gTlVMTDsKKwlpbnQgaHVua19zaXplID0gMDsKKwlzdHJ1Y3QgZnJhZ21lbnQgKmZyYWc7CisKKwlsbGVuID0gbGluZWxlbihidWZmZXIsIHNpemUpOworCXVzZWQgPSBsbGVuOworCisJKnN0YXR1c19wID0gMDsKKworCWlmIChzdGFydHNfd2l0aChidWZmZXIsICJkZWx0YSAiKSkgeworCQlwYXRjaF9tZXRob2QgPSBCSU5BUllfREVMVEFfREVGTEFURUQ7CisJCW9yaWdsZW4gPSBzdHJ0b3VsKGJ1ZmZlciArIDYsIE5VTEwsIDEwKTsKKwl9CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgoYnVmZmVyLCAibGl0ZXJhbCAiKSkgeworCQlwYXRjaF9tZXRob2QgPSBCSU5BUllfTElURVJBTF9ERUZMQVRFRDsKKwkJb3JpZ2xlbiA9IHN0cnRvdWwoYnVmZmVyICsgOCwgTlVMTCwgMTApOworCX0KKwllbHNlCisJCXJldHVybiBOVUxMOworCisJc3RhdGUtPmxpbmVucisrOworCWJ1ZmZlciArPSBsbGVuOworCXdoaWxlICgxKSB7CisJCWludCBieXRlX2xlbmd0aCwgbWF4X2J5dGVfbGVuZ3RoLCBuZXdzaXplOworCQlsbGVuID0gbGluZWxlbihidWZmZXIsIHNpemUpOworCQl1c2VkICs9IGxsZW47CisJCXN0YXRlLT5saW5lbnIrKzsKKwkJaWYgKGxsZW4gPT0gMSkgeworCQkJLyogY29uc3VtZSB0aGUgYmxhbmsgbGluZSAqLworCQkJYnVmZmVyKys7CisJCQlzaXplLS07CisJCQlicmVhazsKKwkJfQorCQkvKgorCQkgKiBNaW5pbXVtIGxpbmUgaXMgIkEwMDAwMFxuIiB3aGljaCBpcyA3LWJ5dGUgbG9uZywKKwkJICogYW5kIHRoZSBsaW5lIGxlbmd0aCBtdXN0IGJlIG11bHRpcGxlIG9mIDUgcGx1cyAyLgorCQkgKi8KKwkJaWYgKChsbGVuIDwgNykgfHwgKGxsZW4tMikgJSA1KQorCQkJZ290byBjb3JydXB0OworCQltYXhfYnl0ZV9sZW5ndGggPSAobGxlbiAtIDIpIC8gNSAqIDQ7CisJCWJ5dGVfbGVuZ3RoID0gKmJ1ZmZlcjsKKwkJaWYgKCdBJyA8PSBieXRlX2xlbmd0aCAmJiBieXRlX2xlbmd0aCA8PSAnWicpCisJCQlieXRlX2xlbmd0aCA9IGJ5dGVfbGVuZ3RoIC0gJ0EnICsgMTsKKwkJZWxzZSBpZiAoJ2EnIDw9IGJ5dGVfbGVuZ3RoICYmIGJ5dGVfbGVuZ3RoIDw9ICd6JykKKwkJCWJ5dGVfbGVuZ3RoID0gYnl0ZV9sZW5ndGggLSAnYScgKyAyNzsKKwkJZWxzZQorCQkJZ290byBjb3JydXB0OworCQkvKiBpZiB0aGUgaW5wdXQgbGVuZ3RoIHdhcyBub3QgbXVsdGlwbGUgb2YgNCwgd2Ugd291bGQKKwkJICogaGF2ZSBmaWxsZXIgYXQgdGhlIGVuZCBidXQgdGhlIGZpbGxlciBzaG91bGQgbmV2ZXIKKwkJICogZXhjZWVkIDMgYnl0ZXMKKwkJICovCisJCWlmIChtYXhfYnl0ZV9sZW5ndGggPCBieXRlX2xlbmd0aCB8fAorCQkgICAgYnl0ZV9sZW5ndGggPD0gbWF4X2J5dGVfbGVuZ3RoIC0gNCkKKwkJCWdvdG8gY29ycnVwdDsKKwkJbmV3c2l6ZSA9IGh1bmtfc2l6ZSArIGJ5dGVfbGVuZ3RoOworCQlkYXRhID0geHJlYWxsb2MoZGF0YSwgbmV3c2l6ZSk7CisJCWlmIChkZWNvZGVfODUoZGF0YSArIGh1bmtfc2l6ZSwgYnVmZmVyICsgMSwgYnl0ZV9sZW5ndGgpKQorCQkJZ290byBjb3JydXB0OworCQlodW5rX3NpemUgPSBuZXdzaXplOworCQlidWZmZXIgKz0gbGxlbjsKKwkJc2l6ZSAtPSBsbGVuOworCX0KKworCWZyYWcgPSB4Y2FsbG9jKDEsIHNpemVvZigqZnJhZykpOworCWZyYWctPnBhdGNoID0gaW5mbGF0ZV9pdChkYXRhLCBodW5rX3NpemUsIG9yaWdsZW4pOworCWZyYWctPmZyZWVfcGF0Y2ggPSAxOworCWlmICghZnJhZy0+cGF0Y2gpCisJCWdvdG8gY29ycnVwdDsKKwlmcmVlKGRhdGEpOworCWZyYWctPnNpemUgPSBvcmlnbGVuOworCSpidWZfcCA9IGJ1ZmZlcjsKKwkqc3pfcCA9IHNpemU7CisJKnVzZWRfcCA9IHVzZWQ7CisJZnJhZy0+YmluYXJ5X3BhdGNoX21ldGhvZCA9IHBhdGNoX21ldGhvZDsKKwlyZXR1cm4gZnJhZzsKKworIGNvcnJ1cHQ6CisJZnJlZShkYXRhKTsKKwkqc3RhdHVzX3AgPSAtMTsKKwllcnJvcihfKCJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIiksCisJICAgICAgc3RhdGUtPmxpbmVuci0xLCBsbGVuLTEsIGJ1ZmZlcik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBSZXR1cm5zOgorICogICAtMSBpbiBjYXNlIG9mIGVycm9yLAorICogICB0aGUgbGVuZ3RoIG9mIHRoZSBwYXJzZWQgYmluYXJ5IHBhdGNoIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IHBhcnNlX2JpbmFyeShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJY2hhciAqYnVmZmVyLAorCQkJdW5zaWduZWQgbG9uZyBzaXplLAorCQkJc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwkvKgorCSAqIFdlIGhhdmUgcmVhZCAiR0lUIGJpbmFyeSBwYXRjaFxuIjsgd2hhdCBmb2xsb3dzIGlzIGEgbGluZQorCSAqIHRoYXQgc2F5cyB0aGUgcGF0Y2ggbWV0aG9kIChjdXJyZW50bHksIGVpdGhlciAibGl0ZXJhbCIgb3IKKwkgKiAiZGVsdGEiKSBhbmQgdGhlIGxlbmd0aCBvZiBkYXRhIGJlZm9yZSBkZWZsYXRpbmc7IGEKKwkgKiBzZXF1ZW5jZSBvZiAnbGVuZ3RoLWJ5dGUnIGZvbGxvd2VkIGJ5IGJhc2UtODUgZW5jb2RlZCBkYXRhCisJICogZm9sbG93cy4KKwkgKgorCSAqIFdoZW4gYSBiaW5hcnkgcGF0Y2ggaXMgcmV2ZXJzaWJsZSwgdGhlcmUgaXMgYW5vdGhlciBiaW5hcnkKKwkgKiBodW5rIGluIHRoZSBzYW1lIGZvcm1hdCwgc3RhcnRpbmcgd2l0aCBwYXRjaCBtZXRob2QgKGVpdGhlcgorCSAqICJsaXRlcmFsIiBvciAiZGVsdGEiKSB3aXRoIHRoZSBsZW5ndGggb2YgZGF0YSwgYW5kIGEgc2VxdWVuY2UKKwkgKiBvZiBsZW5ndGgtYnl0ZSArIGJhc2UtODUgZW5jb2RlZCBkYXRhLCB0ZXJtaW5hdGVkIHdpdGggYW5vdGhlcgorCSAqIGVtcHR5IGxpbmUuICBUaGlzIGRhdGEsIHdoZW4gYXBwbGllZCB0byB0aGUgcG9zdGltYWdlLCBwcm9kdWNlcworCSAqIHRoZSBwcmVpbWFnZS4KKwkgKi8KKwlzdHJ1Y3QgZnJhZ21lbnQgKmZvcndhcmQ7CisJc3RydWN0IGZyYWdtZW50ICpyZXZlcnNlOworCWludCBzdGF0dXM7CisJaW50IHVzZWQsIHVzZWRfMTsKKworCWZvcndhcmQgPSBwYXJzZV9iaW5hcnlfaHVuayhzdGF0ZSwgJmJ1ZmZlciwgJnNpemUsICZzdGF0dXMsICZ1c2VkKTsKKwlpZiAoIWZvcndhcmQgJiYgIXN0YXR1cykKKwkJLyogdGhlcmUgaGFzIHRvIGJlIG9uZSBodW5rIChmb3J3YXJkIGh1bmspICovCisJCXJldHVybiBlcnJvcihfKCJ1bnJlY29nbml6ZWQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQiKSwgc3RhdGUtPmxpbmVuci0xKTsKKwlpZiAoc3RhdHVzKQorCQkvKiBvdGhlcndpc2Ugd2UgYWxyZWFkeSBnYXZlIGFuIGVycm9yIG1lc3NhZ2UgKi8KKwkJcmV0dXJuIHN0YXR1czsKKworCXJldmVyc2UgPSBwYXJzZV9iaW5hcnlfaHVuayhzdGF0ZSwgJmJ1ZmZlciwgJnNpemUsICZzdGF0dXMsICZ1c2VkXzEpOworCWlmIChyZXZlcnNlKQorCQl1c2VkICs9IHVzZWRfMTsKKwllbHNlIGlmIChzdGF0dXMpIHsKKwkJLyoKKwkJICogTm90IGhhdmluZyByZXZlcnNlIGh1bmsgaXMgbm90IGFuIGVycm9yLCBidXQgaGF2aW5nCisJCSAqIGEgY29ycnVwdCByZXZlcnNlIGh1bmsgaXMuCisJCSAqLworCQlmcmVlKCh2b2lkKikgZm9yd2FyZC0+cGF0Y2gpOworCQlmcmVlKGZvcndhcmQpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwlmb3J3YXJkLT5uZXh0ID0gcmV2ZXJzZTsKKwlwYXRjaC0+ZnJhZ21lbnRzID0gZm9yd2FyZDsKKwlwYXRjaC0+aXNfYmluYXJ5ID0gMTsKKwlyZXR1cm4gdXNlZDsKK30KKworc3RhdGljIHZvaWQgcHJlZml4X29uZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBjaGFyICoqbmFtZSkKK3sKKwljaGFyICpvbGRfbmFtZSA9ICpuYW1lOworCWlmICghb2xkX25hbWUpCisJCXJldHVybjsKKwkqbmFtZSA9IHByZWZpeF9maWxlbmFtZShzdGF0ZS0+cHJlZml4LCAqbmFtZSk7CisJZnJlZShvbGRfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByZWZpeF9wYXRjaChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKnApCit7CisJaWYgKCFzdGF0ZS0+cHJlZml4IHx8IHAtPmlzX3RvcGxldmVsX3JlbGF0aXZlKQorCQlyZXR1cm47CisJcHJlZml4X29uZShzdGF0ZSwgJnAtPm5ld19uYW1lKTsKKwlwcmVmaXhfb25lKHN0YXRlLCAmcC0+b2xkX25hbWUpOworfQorCisvKgorICogaW5jbHVkZS9leGNsdWRlCisgKi8KKworc3RhdGljIHZvaWQgYWRkX25hbWVfbGltaXQoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICBpbnQgZXhjbHVkZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisKKwlpdCA9IHN0cmluZ19saXN0X2FwcGVuZCgmc3RhdGUtPmxpbWl0X2J5X25hbWUsIG5hbWUpOworCWl0LT51dGlsID0gZXhjbHVkZSA/IE5VTEwgOiAodm9pZCAqKSAxOworfQorCitzdGF0aWMgaW50IHVzZV9wYXRjaChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKnApCit7CisJY29uc3QgY2hhciAqcGF0aG5hbWUgPSBwLT5uZXdfbmFtZSA/IHAtPm5ld19uYW1lIDogcC0+b2xkX25hbWU7CisJaW50IGk7CisKKwkvKiBQYXRocyBvdXRzaWRlIGFyZSBub3QgdG91Y2hlZCByZWdhcmRsZXNzIG9mICItLWluY2x1ZGUiICovCisJaWYgKHN0YXRlLT5wcmVmaXggJiYgKnN0YXRlLT5wcmVmaXgpIHsKKwkJY29uc3QgY2hhciAqcmVzdDsKKwkJaWYgKCFza2lwX3ByZWZpeChwYXRobmFtZSwgc3RhdGUtPnByZWZpeCwgJnJlc3QpIHx8ICEqcmVzdCkKKwkJCXJldHVybiAwOworCX0KKworCS8qIFNlZSBpZiBpdCBtYXRjaGVzIGFueSBvZiBleGNsdWRlL2luY2x1ZGUgcnVsZSAqLworCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bGltaXRfYnlfbmFtZS5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCA9ICZzdGF0ZS0+bGltaXRfYnlfbmFtZS5pdGVtc1tpXTsKKwkJaWYgKCF3aWxkbWF0Y2goaXQtPnN0cmluZywgcGF0aG5hbWUsIDApKQorCQkJcmV0dXJuIChpdC0+dXRpbCAhPSBOVUxMKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGhhZCBhbnkgaW5jbHVkZSwgYSBwYXRoIHRoYXQgZG9lcyBub3QgbWF0Y2ggYW55IHJ1bGUgaXMKKwkgKiBub3QgdXNlZC4gIE90aGVyd2lzZSwgd2Ugc2F3IGJ1bmNoIG9mIGV4Y2x1ZGUgcnVsZXMgKG9yIG5vbmUpCisJICogYW5kIHN1Y2ggYSBwYXRoIGlzIHVzZWQuCisJICovCisJcmV0dXJuICFzdGF0ZS0+aGFzX2luY2x1ZGU7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBwYXRjaCB0ZXh0IGluICJidWZmZXIiIHRoYXQgZXh0ZW5kcyBmb3IgInNpemUiIGJ5dGVzOyBzdG9wCisgKiByZWFkaW5nIGFmdGVyIHNlZWluZyBhIHNpbmdsZSBwYXRjaCAoaS5lLiBjaGFuZ2VzIHRvIGEgc2luZ2xlIGZpbGUpLgorICogQ3JlYXRlIGZyYWdtZW50cyAoaS5lLiBwYXRjaCBodW5rcykgYW5kIGhhbmcgdGhlbSB0byB0aGUgZ2l2ZW4gcGF0Y2guCisgKgorICogUmV0dXJuczoKKyAqICAgLTEgaWYgbm8gaGVhZGVyIHdhcyBmb3VuZCBvciBwYXJzZV9iaW5hcnkoKSBmYWlsZWQsCisgKiAgIC0xMjggb24gYW5vdGhlciBlcnJvciwKKyAqICAgdGhlIG51bWJlciBvZiBieXRlcyBjb25zdW1lZCBvdGhlcndpc2UsCisgKiAgICAgc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBjYWxsIHVzIGFnYWluIGZvciB0aGUgbmV4dCBwYXRjaC4KKyAqLworc3RhdGljIGludCBwYXJzZV9jaHVuayhzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlpbnQgaGRyc2l6ZSwgcGF0Y2hzaXplOworCWludCBvZmZzZXQgPSBmaW5kX2hlYWRlcihzdGF0ZSwgYnVmZmVyLCBzaXplLCAmaGRyc2l6ZSwgcGF0Y2gpOworCisJaWYgKG9mZnNldCA8IDApCisJCXJldHVybiBvZmZzZXQ7CisKKwlwcmVmaXhfcGF0Y2goc3RhdGUsIHBhdGNoKTsKKworCWlmICghdXNlX3BhdGNoKHN0YXRlLCBwYXRjaCkpCisJCXBhdGNoLT53c19ydWxlID0gMDsKKwllbHNlIGlmIChwYXRjaC0+bmV3X25hbWUpCisJCXBhdGNoLT53c19ydWxlID0gd2hpdGVzcGFjZV9ydWxlKHN0YXRlLT5yZXBvLT5pbmRleCwKKwkJCQkJCSBwYXRjaC0+bmV3X25hbWUpOworCWVsc2UKKwkJcGF0Y2gtPndzX3J1bGUgPSB3aGl0ZXNwYWNlX3J1bGUoc3RhdGUtPnJlcG8tPmluZGV4LAorCQkJCQkJIHBhdGNoLT5vbGRfbmFtZSk7CisKKwlwYXRjaHNpemUgPSBwYXJzZV9zaW5nbGVfcGF0Y2goc3RhdGUsCisJCQkJICAgICAgIGJ1ZmZlciArIG9mZnNldCArIGhkcnNpemUsCisJCQkJICAgICAgIHNpemUgLSBvZmZzZXQgLSBoZHJzaXplLAorCQkJCSAgICAgICBwYXRjaCk7CisKKwlpZiAocGF0Y2hzaXplIDwgMCkKKwkJcmV0dXJuIC0xMjg7CisKKwlpZiAoIXBhdGNoc2l6ZSkgeworCQlzdGF0aWMgY29uc3QgY2hhciBnaXRfYmluYXJ5W10gPSAiR0lUIGJpbmFyeSBwYXRjaFxuIjsKKwkJaW50IGhkID0gaGRyc2l6ZSArIG9mZnNldDsKKwkJdW5zaWduZWQgbG9uZyBsbGVuID0gbGluZWxlbihidWZmZXIgKyBoZCwgc2l6ZSAtIGhkKTsKKworCQlpZiAobGxlbiA9PSBzaXplb2YoZ2l0X2JpbmFyeSkgLSAxICYmCisJCSAgICAhbWVtY21wKGdpdF9iaW5hcnksIGJ1ZmZlciArIGhkLCBsbGVuKSkgeworCQkJaW50IHVzZWQ7CisJCQlzdGF0ZS0+bGluZW5yKys7CisJCQl1c2VkID0gcGFyc2VfYmluYXJ5KHN0YXRlLCBidWZmZXIgKyBoZCArIGxsZW4sCisJCQkJCSAgICBzaXplIC0gaGQgLSBsbGVuLCBwYXRjaCk7CisJCQlpZiAodXNlZCA8IDApCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKHVzZWQpCisJCQkJcGF0Y2hzaXplID0gdXNlZCArIGxsZW47CisJCQllbHNlCisJCQkJcGF0Y2hzaXplID0gMDsKKwkJfQorCQllbHNlIGlmICghbWVtY21wKCIgZGlmZmVyXG4iLCBidWZmZXIgKyBoZCArIGxsZW4gLSA4LCA4KSkgeworCQkJc3RhdGljIGNvbnN0IGNoYXIgKmJpbmhkcltdID0geworCQkJCSJCaW5hcnkgZmlsZXMgIiwKKwkJCQkiRmlsZXMgIiwKKwkJCQlOVUxMLAorCQkJfTsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgYmluaGRyW2ldOyBpKyspIHsKKwkJCQlpbnQgbGVuID0gc3RybGVuKGJpbmhkcltpXSk7CisJCQkJaWYgKGxlbiA8IHNpemUgLSBoZCAmJgorCQkJCSAgICAhbWVtY21wKGJpbmhkcltpXSwgYnVmZmVyICsgaGQsIGxlbikpIHsKKwkJCQkJc3RhdGUtPmxpbmVucisrOworCQkJCQlwYXRjaC0+aXNfYmluYXJ5ID0gMTsKKwkJCQkJcGF0Y2hzaXplID0gbGxlbjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogRW1wdHkgcGF0Y2ggY2Fubm90IGJlIGFwcGxpZWQgaWYgaXQgaXMgYSB0ZXh0IHBhdGNoCisJCSAqIHdpdGhvdXQgbWV0YWRhdGEgY2hhbmdlLiAgQSBiaW5hcnkgcGF0Y2ggYXBwZWFycworCQkgKiBlbXB0eSB0byB1cyBoZXJlLgorCQkgKi8KKwkJaWYgKChzdGF0ZS0+YXBwbHkgfHwgc3RhdGUtPmNoZWNrKSAmJgorCQkgICAgKCFwYXRjaC0+aXNfYmluYXJ5ICYmICFtZXRhZGF0YV9jaGFuZ2VzKHBhdGNoKSkpIHsKKwkJCWVycm9yKF8oInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiKSwgc3RhdGUtPmxpbmVucik7CisJCQlyZXR1cm4gLTEyODsKKwkJfQorCX0KKworCXJldHVybiBvZmZzZXQgKyBoZHJzaXplICsgcGF0Y2hzaXplOworfQorCitzdGF0aWMgdm9pZCByZXZlcnNlX3BhdGNoZXMoc3RydWN0IHBhdGNoICpwKQoreworCWZvciAoOyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgZnJhZ21lbnQgKmZyYWcgPSBwLT5mcmFnbWVudHM7CisKKwkJU1dBUChwLT5uZXdfbmFtZSwgcC0+b2xkX25hbWUpOworCQlTV0FQKHAtPm5ld19tb2RlLCBwLT5vbGRfbW9kZSk7CisJCVNXQVAocC0+aXNfbmV3LCBwLT5pc19kZWxldGUpOworCQlTV0FQKHAtPmxpbmVzX2FkZGVkLCBwLT5saW5lc19kZWxldGVkKTsKKwkJU1dBUChwLT5vbGRfb2lkX3ByZWZpeCwgcC0+bmV3X29pZF9wcmVmaXgpOworCisJCWZvciAoOyBmcmFnOyBmcmFnID0gZnJhZy0+bmV4dCkgeworCQkJU1dBUChmcmFnLT5uZXdwb3MsIGZyYWctPm9sZHBvcyk7CisJCQlTV0FQKGZyYWctPm5ld2xpbmVzLCBmcmFnLT5vbGRsaW5lcyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHBsdXNlc1tdID0KKyIrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIjsKK3N0YXRpYyBjb25zdCBjaGFyIG1pbnVzZXNbXT0KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIjsKKworc3RhdGljIHZvaWQgc2hvd19zdGF0cyhzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBzdHJidWYgcW5hbWUgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpjcCA9IHBhdGNoLT5uZXdfbmFtZSA/IHBhdGNoLT5uZXdfbmFtZSA6IHBhdGNoLT5vbGRfbmFtZTsKKwlpbnQgbWF4LCBhZGQsIGRlbDsKKworCXF1b3RlX2Nfc3R5bGUoY3AsICZxbmFtZSwgTlVMTCwgMCk7CisKKwkvKgorCSAqICJzY2FsZSIgdGhlIGZpbGVuYW1lCisJICovCisJbWF4ID0gc3RhdGUtPm1heF9sZW47CisJaWYgKG1heCA+IDUwKQorCQltYXggPSA1MDsKKworCWlmIChxbmFtZS5sZW4gPiBtYXgpIHsKKwkJY3AgPSBzdHJjaHIocW5hbWUuYnVmICsgcW5hbWUubGVuICsgMyAtIG1heCwgJy8nKTsKKwkJaWYgKCFjcCkKKwkJCWNwID0gcW5hbWUuYnVmICsgcW5hbWUubGVuICsgMyAtIG1heDsKKwkJc3RyYnVmX3NwbGljZSgmcW5hbWUsIDAsIGNwIC0gcW5hbWUuYnVmLCAiLi4uIiwgMyk7CisJfQorCisJaWYgKHBhdGNoLT5pc19iaW5hcnkpIHsKKwkJcHJpbnRmKCIgJS0qcyB8ICBCaW5cbiIsIG1heCwgcW5hbWUuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnFuYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50ZigiICUtKnMgfCIsIG1heCwgcW5hbWUuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmcW5hbWUpOworCisJLyoKKwkgKiBzY2FsZSB0aGUgYWRkL2RlbGV0ZQorCSAqLworCW1heCA9IG1heCArIHN0YXRlLT5tYXhfY2hhbmdlID4gNzAgPyA3MCAtIG1heCA6IHN0YXRlLT5tYXhfY2hhbmdlOworCWFkZCA9IHBhdGNoLT5saW5lc19hZGRlZDsKKwlkZWwgPSBwYXRjaC0+bGluZXNfZGVsZXRlZDsKKworCWlmIChzdGF0ZS0+bWF4X2NoYW5nZSA+IDApIHsKKwkJaW50IHRvdGFsID0gKChhZGQgKyBkZWwpICogbWF4ICsgc3RhdGUtPm1heF9jaGFuZ2UgLyAyKSAvIHN0YXRlLT5tYXhfY2hhbmdlOworCQlhZGQgPSAoYWRkICogbWF4ICsgc3RhdGUtPm1heF9jaGFuZ2UgLyAyKSAvIHN0YXRlLT5tYXhfY2hhbmdlOworCQlkZWwgPSB0b3RhbCAtIGFkZDsKKwl9CisJcHJpbnRmKCIlNWQgJS4qcyUuKnNcbiIsIHBhdGNoLT5saW5lc19hZGRlZCArIHBhdGNoLT5saW5lc19kZWxldGVkLAorCQlhZGQsIHBsdXNlcywgZGVsLCBtaW51c2VzKTsKK30KKworc3RhdGljIGludCByZWFkX29sZF9kYXRhKHN0cnVjdCBzdGF0ICpzdCwgc3RydWN0IHBhdGNoICpwYXRjaCwKKwkJCSBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJaW50IGNvbnZfZmxhZ3MgPSBwYXRjaC0+Y3JsZl9pbl9vbGQgPworCQlDT05WX0VPTF9LRUVQX0NSTEYgOiBDT05WX0VPTF9SRU5PUk1BTElaRTsKKwlzd2l0Y2ggKHN0LT5zdF9tb2RlICYgU19JRk1UKSB7CisJY2FzZSBTX0lGTE5LOgorCQlpZiAoc3RyYnVmX3JlYWRsaW5rKGJ1ZiwgcGF0aCwgc3QtPnN0X3NpemUpIDwgMCkKKwkJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gcmVhZCBzeW1saW5rICVzIiksIHBhdGgpOworCQlyZXR1cm4gMDsKKwljYXNlIFNfSUZSRUc6CisJCWlmIChzdHJidWZfcmVhZF9maWxlKGJ1ZiwgcGF0aCwgc3QtPnN0X3NpemUpICE9IHN0LT5zdF9zaXplKQorCQkJcmV0dXJuIGVycm9yKF8oInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiKSwgcGF0aCk7CisJCS8qCisJCSAqICJnaXQgYXBwbHkiIHdpdGhvdXQgIi0taW5kZXgvLS1jYWNoZWQiIHNob3VsZCBuZXZlciBsb29rCisJCSAqIGF0IHRoZSBpbmRleDsgdGhlIHRhcmdldCBmaWxlIG1heSBub3QgaGF2ZSBiZWVuIGFkZGVkIHRvCisJCSAqIHRoZSBpbmRleCB5ZXQsIGFuZCB3ZSBtYXkgbm90IGV2ZW4gYmUgaW4gYW55IEdpdCByZXBvc2l0b3J5LgorCQkgKiBQYXNzIE5VTEwgdG8gY29udmVydF90b19naXQoKSB0byBzdHJlc3MgdGhpczsgdGhlIGZ1bmN0aW9uCisJCSAqIHNob3VsZCBuZXZlciBsb29rIGF0IHRoZSBpbmRleCB3aGVuIGV4cGxpY2l0IGNybGYgb3B0aW9uCisJCSAqIGlzIGdpdmVuLgorCQkgKi8KKwkJY29udmVydF90b19naXQoTlVMTCwgcGF0aCwgYnVmLT5idWYsIGJ1Zi0+bGVuLCBidWYsIGNvbnZfZmxhZ3MpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorfQorCisvKgorICogVXBkYXRlIHRoZSBwcmVpbWFnZSwgYW5kIHRoZSBjb21tb24gbGluZXMgaW4gcG9zdGltYWdlLAorICogZnJvbSBidWZmZXIgYnVmIG9mIGxlbmd0aCBsZW4uIElmIHBvc3RsZW4gaXMgMCB0aGUgcG9zdGltYWdlCisgKiBpcyB1cGRhdGVkIGluIHBsYWNlLCBvdGhlcndpc2UgaXQncyB1cGRhdGVkIG9uIGEgbmV3IGJ1ZmZlcgorICogb2YgbGVuZ3RoIHBvc3RsZW4KKyAqLworCitzdGF0aWMgdm9pZCB1cGRhdGVfcHJlX3Bvc3RfaW1hZ2VzKHN0cnVjdCBpbWFnZSAqcHJlaW1hZ2UsCisJCQkJICAgc3RydWN0IGltYWdlICpwb3N0aW1hZ2UsCisJCQkJICAgY2hhciAqYnVmLAorCQkJCSAgIHNpemVfdCBsZW4sIHNpemVfdCBwb3N0bGVuKQoreworCWludCBpLCBjdHgsIHJlZHVjZWQ7CisJY2hhciAqbmV3X2J1ZiwgKm9sZF9idWYsICpmaXhlZDsKKwlzdHJ1Y3QgaW1hZ2UgZml4ZWRfcHJlaW1hZ2U7CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgcHJlaW1hZ2Ugd2l0aCB3aGl0ZXNwYWNlIGZpeGVzLiAgTm90ZSB0aGF0IHdlCisJICogYXJlIG5vdCBsb3NpbmcgcHJlaW1hZ2UtPmJ1ZiAtLSBhcHBseV9vbmVfZnJhZ21lbnQoKSB3aWxsCisJICogZnJlZSAib2xkbGluZXMiLgorCSAqLworCXByZXBhcmVfaW1hZ2UoJmZpeGVkX3ByZWltYWdlLCBidWYsIGxlbiwgMSk7CisJYXNzZXJ0KHBvc3RsZW4KKwkgICAgICAgPyBmaXhlZF9wcmVpbWFnZS5uciA9PSBwcmVpbWFnZS0+bnIKKwkgICAgICAgOiBmaXhlZF9wcmVpbWFnZS5uciA8PSBwcmVpbWFnZS0+bnIpOworCWZvciAoaSA9IDA7IGkgPCBmaXhlZF9wcmVpbWFnZS5ucjsgaSsrKQorCQlmaXhlZF9wcmVpbWFnZS5saW5lW2ldLmZsYWcgPSBwcmVpbWFnZS0+bGluZVtpXS5mbGFnOworCWZyZWUocHJlaW1hZ2UtPmxpbmVfYWxsb2NhdGVkKTsKKwkqcHJlaW1hZ2UgPSBmaXhlZF9wcmVpbWFnZTsKKworCS8qCisJICogQWRqdXN0IHRoZSBjb21tb24gY29udGV4dCBsaW5lcyBpbiBwb3N0aW1hZ2UuIFRoaXMgY2FuIGJlCisJICogZG9uZSBpbi1wbGFjZSB3aGVuIHdlIGFyZSBzaHJpbmtpbmcgaXQgd2l0aCB3aGl0ZXNwYWNlCisJICogZml4aW5nLCBidXQgbmVlZHMgYSBuZXcgYnVmZmVyIHdoZW4gaWdub3Jpbmcgd2hpdGVzcGFjZSBvcgorCSAqIGV4cGFuZGluZyBsZWFkaW5nIHRhYnMgdG8gc3BhY2VzLgorCSAqCisJICogV2UgdHJ1c3QgdGhlIGNhbGxlciB0byB0ZWxsIHVzIGlmIHRoZSB1cGRhdGUgY2FuIGJlIGRvbmUKKwkgKiBpbiBwbGFjZSAocG9zdGxlbj09MCkgb3Igbm90LgorCSAqLworCW9sZF9idWYgPSBwb3N0aW1hZ2UtPmJ1ZjsKKwlpZiAocG9zdGxlbikKKwkJbmV3X2J1ZiA9IHBvc3RpbWFnZS0+YnVmID0geG1hbGxvYyhwb3N0bGVuKTsKKwllbHNlCisJCW5ld19idWYgPSBvbGRfYnVmOworCWZpeGVkID0gcHJlaW1hZ2UtPmJ1ZjsKKworCWZvciAoaSA9IHJlZHVjZWQgPSBjdHggPSAwOyBpIDwgcG9zdGltYWdlLT5ucjsgaSsrKSB7CisJCXNpemVfdCBsX2xlbiA9IHBvc3RpbWFnZS0+bGluZVtpXS5sZW47CisJCWlmICghKHBvc3RpbWFnZS0+bGluZVtpXS5mbGFnICYgTElORV9DT01NT04pKSB7CisJCQkvKiBhbiBhZGRlZCBsaW5lIC0tIG5vIGNvdW50ZXJwYXJ0cyBpbiBwcmVpbWFnZSAqLworCQkJbWVtbW92ZShuZXdfYnVmLCBvbGRfYnVmLCBsX2xlbik7CisJCQlvbGRfYnVmICs9IGxfbGVuOworCQkJbmV3X2J1ZiArPSBsX2xlbjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogYSBjb21tb24gY29udGV4dCAtLSBza2lwIGl0IGluIHRoZSBvcmlnaW5hbCBwb3N0aW1hZ2UgKi8KKwkJb2xkX2J1ZiArPSBsX2xlbjsKKworCQkvKiBhbmQgZmluZCB0aGUgY29ycmVzcG9uZGluZyBvbmUgaW4gdGhlIGZpeGVkIHByZWltYWdlICovCisJCXdoaWxlIChjdHggPCBwcmVpbWFnZS0+bnIgJiYKKwkJICAgICAgICEocHJlaW1hZ2UtPmxpbmVbY3R4XS5mbGFnICYgTElORV9DT01NT04pKSB7CisJCQlmaXhlZCArPSBwcmVpbWFnZS0+bGluZVtjdHhdLmxlbjsKKwkJCWN0eCsrOworCQl9CisKKwkJLyoKKwkJICogcHJlaW1hZ2UgaXMgZXhwZWN0ZWQgdG8gcnVuIG91dCwgaWYgdGhlIGNhbGxlcgorCQkgKiBmaXhlZCBhZGRpdGlvbiBvZiB0cmFpbGluZyBibGFuayBsaW5lcy4KKwkJICovCisJCWlmIChwcmVpbWFnZS0+bnIgPD0gY3R4KSB7CisJCQlyZWR1Y2VkKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGFuZCBjb3B5IGl0IGluLCB3aGlsZSBmaXhpbmcgdGhlIGxpbmUgbGVuZ3RoICovCisJCWxfbGVuID0gcHJlaW1hZ2UtPmxpbmVbY3R4XS5sZW47CisJCW1lbWNweShuZXdfYnVmLCBmaXhlZCwgbF9sZW4pOworCQluZXdfYnVmICs9IGxfbGVuOworCQlmaXhlZCArPSBsX2xlbjsKKwkJcG9zdGltYWdlLT5saW5lW2ldLmxlbiA9IGxfbGVuOworCQljdHgrKzsKKwl9CisKKwlpZiAocG9zdGxlbgorCSAgICA/IHBvc3RsZW4gPCBuZXdfYnVmIC0gcG9zdGltYWdlLT5idWYKKwkgICAgOiBwb3N0aW1hZ2UtPmxlbiA8IG5ld19idWYgLSBwb3N0aW1hZ2UtPmJ1ZikKKwkJQlVHKCJjYWxsZXIgbWlzY291bnRlZCBwb3N0bGVuOiBhc2tlZCAlZCwgb3JpZyA9ICVkLCB1c2VkID0gJWQiLAorCQkgICAgKGludClwb3N0bGVuLCAoaW50KSBwb3N0aW1hZ2UtPmxlbiwgKGludCkobmV3X2J1ZiAtIHBvc3RpbWFnZS0+YnVmKSk7CisKKwkvKiBGaXggdGhlIGxlbmd0aCBvZiB0aGUgd2hvbGUgdGhpbmcgKi8KKwlwb3N0aW1hZ2UtPmxlbiA9IG5ld19idWYgLSBwb3N0aW1hZ2UtPmJ1ZjsKKwlwb3N0aW1hZ2UtPm5yIC09IHJlZHVjZWQ7Cit9CisKK3N0YXRpYyBpbnQgbGluZV9ieV9saW5lX2Z1enp5X21hdGNoKHN0cnVjdCBpbWFnZSAqaW1nLAorCQkJCSAgICBzdHJ1Y3QgaW1hZ2UgKnByZWltYWdlLAorCQkJCSAgICBzdHJ1Y3QgaW1hZ2UgKnBvc3RpbWFnZSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBjdXJyZW50LAorCQkJCSAgICBpbnQgY3VycmVudF9sbm8sCisJCQkJICAgIGludCBwcmVpbWFnZV9saW1pdCkKK3sKKwlpbnQgaTsKKwlzaXplX3QgaW1nb2ZmID0gMDsKKwlzaXplX3QgcHJlb2ZmID0gMDsKKwlzaXplX3QgcG9zdGxlbiA9IHBvc3RpbWFnZS0+bGVuOworCXNpemVfdCBleHRyYV9jaGFyczsKKwljaGFyICpidWY7CisJY2hhciAqcHJlaW1hZ2VfZW9mOworCWNoYXIgKnByZWltYWdlX2VuZDsKKwlzdHJ1Y3Qgc3RyYnVmIGZpeGVkOworCWNoYXIgKmZpeGVkX2J1ZjsKKwlzaXplX3QgZml4ZWRfbGVuOworCisJZm9yIChpID0gMDsgaSA8IHByZWltYWdlX2xpbWl0OyBpKyspIHsKKwkJc2l6ZV90IHByZWxlbiA9IHByZWltYWdlLT5saW5lW2ldLmxlbjsKKwkJc2l6ZV90IGltZ2xlbiA9IGltZy0+bGluZVtjdXJyZW50X2xubytpXS5sZW47CisKKwkJaWYgKCFmdXp6eV9tYXRjaGxpbmVzKGltZy0+YnVmICsgY3VycmVudCArIGltZ29mZiwgaW1nbGVuLAorCQkJCSAgICAgIHByZWltYWdlLT5idWYgKyBwcmVvZmYsIHByZWxlbikpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHByZWltYWdlLT5saW5lW2ldLmZsYWcgJiBMSU5FX0NPTU1PTikKKwkJCXBvc3RsZW4gKz0gaW1nbGVuIC0gcHJlbGVuOworCQlpbWdvZmYgKz0gaW1nbGVuOworCQlwcmVvZmYgKz0gcHJlbGVuOworCX0KKworCS8qCisJICogT2ssIHRoZSBwcmVpbWFnZSBtYXRjaGVzIHdpdGggd2hpdGVzcGFjZSBmdXp6LgorCSAqCisJICogaW1nb2ZmIG5vdyBob2xkcyB0aGUgdHJ1ZSBsZW5ndGggb2YgdGhlIHRhcmdldCB0aGF0CisJICogbWF0Y2hlcyB0aGUgcHJlaW1hZ2UgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGZpbGUuCisJICoKKwkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIHByZWltYWdlIHRoYXQgZmFsbAorCSAqIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBtYWtlIHN1cmUgdGhhdCBhbGwgb2YgdGhlbQorCSAqIGFyZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuIChUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZgorCSAqIHdlIGFyZSByZW1vdmluZyBibGFuayBsaW5lcyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLikKKwkgKi8KKwlidWYgPSBwcmVpbWFnZV9lb2YgPSBwcmVpbWFnZS0+YnVmICsgcHJlb2ZmOworCWZvciAoIDsgaSA8IHByZWltYWdlLT5ucjsgaSsrKQorCQlwcmVvZmYgKz0gcHJlaW1hZ2UtPmxpbmVbaV0ubGVuOworCXByZWltYWdlX2VuZCA9IHByZWltYWdlLT5idWYgKyBwcmVvZmY7CisJZm9yICggOyBidWYgPCBwcmVpbWFnZV9lbmQ7IGJ1ZisrKQorCQlpZiAoIWlzc3BhY2UoKmJ1ZikpCisJCQlyZXR1cm4gMDsKKworCS8qCisJICogVXBkYXRlIHRoZSBwcmVpbWFnZSBhbmQgdGhlIGNvbW1vbiBwb3N0aW1hZ2UgY29udGV4dAorCSAqIGxpbmVzIHRvIHVzZSB0aGUgc2FtZSB3aGl0ZXNwYWNlIGFzIHRoZSB0YXJnZXQuCisJICogSWYgd2hpdGVzcGFjZSBpcyBtaXNzaW5nIGluIHRoZSB0YXJnZXQgKGkuZS4KKwkgKiBpZiB0aGUgcHJlaW1hZ2UgZXh0ZW5kcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgZmlsZSksCisJICogdXNlIHRoZSB3aGl0ZXNwYWNlIGZyb20gdGhlIHByZWltYWdlLgorCSAqLworCWV4dHJhX2NoYXJzID0gcHJlaW1hZ2VfZW5kIC0gcHJlaW1hZ2VfZW9mOworCXN0cmJ1Zl9pbml0KCZmaXhlZCwgaW1nb2ZmICsgZXh0cmFfY2hhcnMpOworCXN0cmJ1Zl9hZGQoJmZpeGVkLCBpbWctPmJ1ZiArIGN1cnJlbnQsIGltZ29mZik7CisJc3RyYnVmX2FkZCgmZml4ZWQsIHByZWltYWdlX2VvZiwgZXh0cmFfY2hhcnMpOworCWZpeGVkX2J1ZiA9IHN0cmJ1Zl9kZXRhY2goJmZpeGVkLCAmZml4ZWRfbGVuKTsKKwl1cGRhdGVfcHJlX3Bvc3RfaW1hZ2VzKHByZWltYWdlLCBwb3N0aW1hZ2UsCisJCQkgICAgICAgZml4ZWRfYnVmLCBmaXhlZF9sZW4sIHBvc3RsZW4pOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1hdGNoX2ZyYWdtZW50KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgIHN0cnVjdCBpbWFnZSAqaW1nLAorCQkJICBzdHJ1Y3QgaW1hZ2UgKnByZWltYWdlLAorCQkJICBzdHJ1Y3QgaW1hZ2UgKnBvc3RpbWFnZSwKKwkJCSAgdW5zaWduZWQgbG9uZyBjdXJyZW50LAorCQkJICBpbnQgY3VycmVudF9sbm8sCisJCQkgIHVuc2lnbmVkIHdzX3J1bGUsCisJCQkgIGludCBtYXRjaF9iZWdpbm5pbmcsIGludCBtYXRjaF9lbmQpCit7CisJaW50IGk7CisJY2hhciAqZml4ZWRfYnVmLCAqYnVmLCAqb3JpZywgKnRhcmdldDsKKwlzdHJ1Y3Qgc3RyYnVmIGZpeGVkOworCXNpemVfdCBmaXhlZF9sZW4sIHBvc3RsZW47CisJaW50IHByZWltYWdlX2xpbWl0OworCisJaWYgKHByZWltYWdlLT5uciArIGN1cnJlbnRfbG5vIDw9IGltZy0+bnIpIHsKKwkJLyoKKwkJICogVGhlIGh1bmsgZmFsbHMgd2l0aGluIHRoZSBib3VuZGFyaWVzIG9mIGltZy4KKwkJICovCisJCXByZWltYWdlX2xpbWl0ID0gcHJlaW1hZ2UtPm5yOworCQlpZiAobWF0Y2hfZW5kICYmIChwcmVpbWFnZS0+bnIgKyBjdXJyZW50X2xubyAhPSBpbWctPm5yKSkKKwkJCXJldHVybiAwOworCX0gZWxzZSBpZiAoc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9PSBjb3JyZWN0X3dzX2Vycm9yICYmCisJCSAgICh3c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKSkgeworCQkvKgorCQkgKiBUaGlzIGh1bmsgZXh0ZW5kcyBiZXlvbmQgdGhlIGVuZCBvZiBpbWcsIGFuZCB3ZSBhcmUKKwkJICogcmVtb3ZpbmcgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gIFRoaXMKKwkJICogbWFueSBsaW5lcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHByZWltYWdlIG11c3QKKwkJICogbWF0Y2ggd2l0aCBpbWcsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoZSBwcmVpbWFnZQorCQkgKiBtdXN0IGJlIGJsYW5rLgorCQkgKi8KKwkJcHJlaW1hZ2VfbGltaXQgPSBpbWctPm5yIC0gY3VycmVudF9sbm87CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIGh1bmsgZXh0ZW5kcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgaW1nIGFuZAorCQkgKiB3ZSBhcmUgbm90IHJlbW92aW5nIGJsYW5rcyBhdCB0aGUgZW5kLCBzbyB3ZQorCQkgKiBzaG91bGQgcmVqZWN0IHRoZSBodW5rIGF0IHRoaXMgcG9zaXRpb24uCisJCSAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobWF0Y2hfYmVnaW5uaW5nICYmIGN1cnJlbnRfbG5vKQorCQlyZXR1cm4gMDsKKworCS8qIFF1aWNrIGhhc2ggY2hlY2sgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcHJlaW1hZ2VfbGltaXQ7IGkrKykKKwkJaWYgKChpbWctPmxpbmVbY3VycmVudF9sbm8gKyBpXS5mbGFnICYgTElORV9QQVRDSEVEKSB8fAorCQkgICAgKHByZWltYWdlLT5saW5lW2ldLmhhc2ggIT0gaW1nLT5saW5lW2N1cnJlbnRfbG5vICsgaV0uaGFzaCkpCisJCQlyZXR1cm4gMDsKKworCWlmIChwcmVpbWFnZV9saW1pdCA9PSBwcmVpbWFnZS0+bnIpIHsKKwkJLyoKKwkJICogRG8gd2UgaGF2ZSBhbiBleGFjdCBtYXRjaD8gIElmIHdlIHdlcmUgdG9sZCB0byBtYXRjaAorCQkgKiBhdCB0aGUgZW5kLCBzaXplIG11c3QgYmUgZXhhY3RseSBhdCBjdXJyZW50K2ZyYWdzaXplLAorCQkgKiBvdGhlcndpc2UgY3VycmVudCtmcmFnc2l6ZSBtdXN0IGJlIHN0aWxsIHdpdGhpbiB0aGUgcHJlaW1hZ2UsCisJCSAqIGFuZCBlaXRoZXIgY2FzZSwgdGhlIG9sZCBwaWVjZSBzaG91bGQgbWF0Y2ggdGhlIHByZWltYWdlCisJCSAqIGV4YWN0bHkuCisJCSAqLworCQlpZiAoKG1hdGNoX2VuZAorCQkgICAgID8gKGN1cnJlbnQgKyBwcmVpbWFnZS0+bGVuID09IGltZy0+bGVuKQorCQkgICAgIDogKGN1cnJlbnQgKyBwcmVpbWFnZS0+bGVuIDw9IGltZy0+bGVuKSkgJiYKKwkJICAgICFtZW1jbXAoaW1nLT5idWYgKyBjdXJyZW50LCBwcmVpbWFnZS0+YnVmLCBwcmVpbWFnZS0+bGVuKSkKKwkJCXJldHVybiAxOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBwcmVpbWFnZSBleHRlbmRzIGJleW9uZCB0aGUgZW5kIG9mIGltZywgc28KKwkJICogdGhlcmUgY2Fubm90IGJlIGFuIGV4YWN0IG1hdGNoLgorCQkgKgorCQkgKiBUaGVyZSBtdXN0IGJlIG9uZSBub24tYmxhbmsgY29udGV4dCBsaW5lIHRoYXQgbWF0Y2gKKwkJICogYSBsaW5lIGJlZm9yZSB0aGUgZW5kIG9mIGltZy4KKwkJICovCisJCWNoYXIgKmJ1Zl9lbmQ7CisKKwkJYnVmID0gcHJlaW1hZ2UtPmJ1ZjsKKwkJYnVmX2VuZCA9IGJ1ZjsKKwkJZm9yIChpID0gMDsgaSA8IHByZWltYWdlX2xpbWl0OyBpKyspCisJCQlidWZfZW5kICs9IHByZWltYWdlLT5saW5lW2ldLmxlbjsKKworCQlmb3IgKCA7IGJ1ZiA8IGJ1Zl9lbmQ7IGJ1ZisrKQorCQkJaWYgKCFpc3NwYWNlKCpidWYpKQorCQkJCWJyZWFrOworCQlpZiAoYnVmID09IGJ1Zl9lbmQpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE5vIGV4YWN0IG1hdGNoLiBJZiB3ZSBhcmUgaWdub3Jpbmcgd2hpdGVzcGFjZSwgcnVuIGEgbGluZS1ieS1saW5lCisJICogZnV6enkgbWF0Y2hpbmcuIFdlIGNvbGxlY3QgYWxsIHRoZSBsaW5lIGxlbmd0aCBpbmZvcm1hdGlvbiBiZWNhdXNlCisJICogd2UgbmVlZCBpdCB0byBhZGp1c3Qgd2hpdGVzcGFjZSBpZiB3ZSBtYXRjaC4KKwkgKi8KKwlpZiAoc3RhdGUtPndzX2lnbm9yZV9hY3Rpb24gPT0gaWdub3JlX3dzX2NoYW5nZSkKKwkJcmV0dXJuIGxpbmVfYnlfbGluZV9mdXp6eV9tYXRjaChpbWcsIHByZWltYWdlLCBwb3N0aW1hZ2UsCisJCQkJCQljdXJyZW50LCBjdXJyZW50X2xubywgcHJlaW1hZ2VfbGltaXQpOworCisJaWYgKHN0YXRlLT53c19lcnJvcl9hY3Rpb24gIT0gY29ycmVjdF93c19lcnJvcikKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFRoZSBodW5rIGRvZXMgbm90IGFwcGx5IGJ5dGUtYnktYnl0ZSwgYnV0IHRoZSBoYXNoIHNheXMKKwkgKiBpdCBtaWdodCB3aXRoIHdoaXRlc3BhY2UgZnV6ei4gV2Ugd2VyZW4ndCBhc2tlZCB0bworCSAqIGlnbm9yZSB3aGl0ZXNwYWNlLCB3ZSB3ZXJlIGFza2VkIHRvIGNvcnJlY3Qgd2hpdGVzcGFjZQorCSAqIGVycm9ycywgc28gbGV0J3MgdHJ5IG1hdGNoaW5nIGFmdGVyIHdoaXRlc3BhY2UgY29ycmVjdGlvbi4KKwkgKgorCSAqIFdoaWxlIGNoZWNraW5nIHRoZSBwcmVpbWFnZSBhZ2FpbnN0IHRoZSB0YXJnZXQsIHdoaXRlc3BhY2UKKwkgKiBlcnJvcnMgaW4gYm90aCBmaXhlZCwgd2UgY291bnQgaG93IGxhcmdlIHRoZSBjb3JyZXNwb25kaW5nCisJICogcG9zdGltYWdlIG5lZWRzIHRvIGJlLiAgVGhlIHBvc3RpbWFnZSBwcmVwYXJlZCBieQorCSAqIGFwcGx5X29uZV9mcmFnbWVudCgpIGhhcyB3aGl0ZXNwYWNlIGVycm9ycyBmaXhlZCBvbiBhZGRlZAorCSAqIGxpbmVzIGFscmVhZHksIGJ1dCB0aGUgY29tbW9uIGxpbmVzIHdlcmUgcHJvcGFnYXRlZCBhcy1pcywKKwkgKiB3aGljaCBtYXkgYmVjb21lIGxvbmdlciB3aGVuIHRoZWlyIHdoaXRlc3BhY2UgZXJyb3JzIGFyZQorCSAqIGZpeGVkLgorCSAqLworCisJLyogRmlyc3QgY291bnQgYWRkZWQgbGluZXMgaW4gcG9zdGltYWdlICovCisJcG9zdGxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IHBvc3RpbWFnZS0+bnI7IGkrKykgeworCQlpZiAoIShwb3N0aW1hZ2UtPmxpbmVbaV0uZmxhZyAmIExJTkVfQ09NTU9OKSkKKwkJCXBvc3RsZW4gKz0gcG9zdGltYWdlLT5saW5lW2ldLmxlbjsKKwl9CisKKwkvKgorCSAqIFRoZSBwcmVpbWFnZSBtYXkgZXh0ZW5kIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlLAorCSAqIGJ1dCBpbiB0aGlzIGxvb3Agd2Ugd2lsbCBvbmx5IGhhbmRsZSB0aGUgcGFydCBvZiB0aGUKKwkgKiBwcmVpbWFnZSB0aGF0IGZhbGxzIHdpdGhpbiB0aGUgZmlsZS4KKwkgKi8KKwlzdHJidWZfaW5pdCgmZml4ZWQsIHByZWltYWdlLT5sZW4gKyAxKTsKKwlvcmlnID0gcHJlaW1hZ2UtPmJ1ZjsKKwl0YXJnZXQgPSBpbWctPmJ1ZiArIGN1cnJlbnQ7CisJZm9yIChpID0gMDsgaSA8IHByZWltYWdlX2xpbWl0OyBpKyspIHsKKwkJc2l6ZV90IG9sZGxlbiA9IHByZWltYWdlLT5saW5lW2ldLmxlbjsKKwkJc2l6ZV90IHRndGxlbiA9IGltZy0+bGluZVtjdXJyZW50X2xubyArIGldLmxlbjsKKwkJc2l6ZV90IGZpeHN0YXJ0ID0gZml4ZWQubGVuOworCQlzdHJ1Y3Qgc3RyYnVmIHRndGZpeDsKKwkJaW50IG1hdGNoOworCisJCS8qIFRyeSBmaXhpbmcgdGhlIGxpbmUgaW4gdGhlIHByZWltYWdlICovCisJCXdzX2ZpeF9jb3B5KCZmaXhlZCwgb3JpZywgb2xkbGVuLCB3c19ydWxlLCBOVUxMKTsKKworCQkvKiBUcnkgZml4aW5nIHRoZSBsaW5lIGluIHRoZSB0YXJnZXQgKi8KKwkJc3RyYnVmX2luaXQoJnRndGZpeCwgdGd0bGVuKTsKKwkJd3NfZml4X2NvcHkoJnRndGZpeCwgdGFyZ2V0LCB0Z3RsZW4sIHdzX3J1bGUsIE5VTEwpOworCisJCS8qCisJCSAqIElmIHRoZXkgbWF0Y2gsIGVpdGhlciB0aGUgcHJlaW1hZ2Ugd2FzIGJhc2VkIG9uCisJCSAqIGEgdmVyc2lvbiBiZWZvcmUgb3VyIHRyZWUgZml4ZWQgd2hpdGVzcGFjZSBicmVha2FnZSwKKwkJICogb3Igd2UgYXJlIGxhY2tpbmcgYSB3aGl0ZXNwYWNlLWZpeCBwYXRjaCB0aGUgdHJlZQorCQkgKiB0aGUgcHJlaW1hZ2Ugd2FzIGJhc2VkIG9uIGFscmVhZHkgaGFkIChpLmUuIHRhcmdldAorCQkgKiBoYXMgd2hpdGVzcGFjZSBicmVha2FnZSwgdGhlIHByZWltYWdlIGRvZXNuJ3QpLgorCQkgKiBJbiBlaXRoZXIgY2FzZSwgd2UgYXJlIGZpeGluZyB0aGUgd2hpdGVzcGFjZSBicmVha2FnZXMKKwkJICogc28gd2UgbWlnaHQgYXMgd2VsbCB0YWtlIHRoZSBmaXggdG9nZXRoZXIgd2l0aCB0aGVpcgorCQkgKiByZWFsIGNoYW5nZS4KKwkJICovCisJCW1hdGNoID0gKHRndGZpeC5sZW4gPT0gZml4ZWQubGVuIC0gZml4c3RhcnQgJiYKKwkJCSAhbWVtY21wKHRndGZpeC5idWYsIGZpeGVkLmJ1ZiArIGZpeHN0YXJ0LAorCQkJCQkgICAgIGZpeGVkLmxlbiAtIGZpeHN0YXJ0KSk7CisKKwkJLyogQWRkIHRoZSBsZW5ndGggaWYgdGhpcyBpcyBjb21tb24gd2l0aCB0aGUgcG9zdGltYWdlICovCisJCWlmIChwcmVpbWFnZS0+bGluZVtpXS5mbGFnICYgTElORV9DT01NT04pCisJCQlwb3N0bGVuICs9IHRndGZpeC5sZW47CisKKwkJc3RyYnVmX3JlbGVhc2UoJnRndGZpeCk7CisJCWlmICghbWF0Y2gpCisJCQlnb3RvIHVubWF0Y2hfZXhpdDsKKworCQlvcmlnICs9IG9sZGxlbjsKKwkJdGFyZ2V0ICs9IHRndGxlbjsKKwl9CisKKworCS8qCisJICogTm93IGhhbmRsZSB0aGUgbGluZXMgaW4gdGhlIHByZWltYWdlIHRoYXQgZmFsbHMgYmV5b25kIHRoZQorCSAqIGVuZCBvZiB0aGUgZmlsZSAoaWYgYW55KS4gVGhleSB3aWxsIG9ubHkgbWF0Y2ggaWYgdGhleSBhcmUKKwkgKiBlbXB0eSBvciBvbmx5IGNvbnRhaW4gd2hpdGVzcGFjZSAoaWYgV1NfQkxBTktfQVRfRU9MIGlzCisJICogZmFsc2UpLgorCSAqLworCWZvciAoIDsgaSA8IHByZWltYWdlLT5ucjsgaSsrKSB7CisJCXNpemVfdCBmaXhzdGFydCA9IGZpeGVkLmxlbjsgLyogc3RhcnQgb2YgdGhlIGZpeGVkIHByZWltYWdlICovCisJCXNpemVfdCBvbGRsZW4gPSBwcmVpbWFnZS0+bGluZVtpXS5sZW47CisJCWludCBqOworCisJCS8qIFRyeSBmaXhpbmcgdGhlIGxpbmUgaW4gdGhlIHByZWltYWdlICovCisJCXdzX2ZpeF9jb3B5KCZmaXhlZCwgb3JpZywgb2xkbGVuLCB3c19ydWxlLCBOVUxMKTsKKworCQlmb3IgKGogPSBmaXhzdGFydDsgaiA8IGZpeGVkLmxlbjsgaisrKQorCQkJaWYgKCFpc3NwYWNlKGZpeGVkLmJ1ZltqXSkpCisJCQkJZ290byB1bm1hdGNoX2V4aXQ7CisKKwkJb3JpZyArPSBvbGRsZW47CisJfQorCisJLyoKKwkgKiBZZXMsIHRoZSBwcmVpbWFnZSBpcyBiYXNlZCBvbiBhbiBvbGRlciB2ZXJzaW9uIHRoYXQgc3RpbGwKKwkgKiBoYXMgd2hpdGVzcGFjZSBicmVha2FnZXMgdW5maXhlZCwgYW5kIGZpeGluZyB0aGVtIG1ha2VzIHRoZQorCSAqIGh1bmsgbWF0Y2guICBVcGRhdGUgdGhlIGNvbnRleHQgbGluZXMgaW4gdGhlIHBvc3RpbWFnZS4KKwkgKi8KKwlmaXhlZF9idWYgPSBzdHJidWZfZGV0YWNoKCZmaXhlZCwgJmZpeGVkX2xlbik7CisJaWYgKHBvc3RsZW4gPCBwb3N0aW1hZ2UtPmxlbikKKwkJcG9zdGxlbiA9IDA7CisJdXBkYXRlX3ByZV9wb3N0X2ltYWdlcyhwcmVpbWFnZSwgcG9zdGltYWdlLAorCQkJICAgICAgIGZpeGVkX2J1ZiwgZml4ZWRfbGVuLCBwb3N0bGVuKTsKKwlyZXR1cm4gMTsKKworIHVubWF0Y2hfZXhpdDoKKwlzdHJidWZfcmVsZWFzZSgmZml4ZWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbmRfcG9zKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCSAgICBzdHJ1Y3QgaW1hZ2UgKmltZywKKwkJICAgIHN0cnVjdCBpbWFnZSAqcHJlaW1hZ2UsCisJCSAgICBzdHJ1Y3QgaW1hZ2UgKnBvc3RpbWFnZSwKKwkJICAgIGludCBsaW5lLAorCQkgICAgdW5zaWduZWQgd3NfcnVsZSwKKwkJICAgIGludCBtYXRjaF9iZWdpbm5pbmcsIGludCBtYXRjaF9lbmQpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBiYWNrd2FyZHMsIGZvcndhcmRzLCBjdXJyZW50OworCWludCBiYWNrd2FyZHNfbG5vLCBmb3J3YXJkc19sbm8sIGN1cnJlbnRfbG5vOworCisJLyoKKwkgKiBXaGVuIHJ1bm5pbmcgd2l0aCAtLWFsbG93LW92ZXJsYXAsIGl0IGlzIHBvc3NpYmxlIHRoYXQgYSBodW5rIGlzCisJICogc2VlbiB0aGF0IHByZXRlbmRzIHRvIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgKGJ1dCBubyBsb25nZXIgZG9lcyksCisJICogYW5kIHRoYXQgKnN0aWxsKiBuZWVkcyB0byBtYXRjaCB0aGUgZW5kLiBTbyB0cnVzdCBgbWF0Y2hfZW5kYCBtb3JlCisJICogdGhhbiBgbWF0Y2hfYmVnaW5uaW5nYC4KKwkgKi8KKwlpZiAoc3RhdGUtPmFsbG93X292ZXJsYXAgJiYgbWF0Y2hfYmVnaW5uaW5nICYmIG1hdGNoX2VuZCAmJgorCSAgICBpbWctPm5yIC0gcHJlaW1hZ2UtPm5yICE9IDApCisJCW1hdGNoX2JlZ2lubmluZyA9IDA7CisKKwkvKgorCSAqIElmIG1hdGNoX2JlZ2lubmluZyBvciBtYXRjaF9lbmQgaXMgc3BlY2lmaWVkLCB0aGVyZSBpcyBubworCSAqIHBvaW50IHN0YXJ0aW5nIGZyb20gYSB3cm9uZyBsaW5lIHRoYXQgd2lsbCBuZXZlciBtYXRjaCBhbmQKKwkgKiB3YW5kZXIgYXJvdW5kIGFuZCB3YWl0IGZvciBhIG1hdGNoIGF0IHRoZSBzcGVjaWZpZWQgZW5kLgorCSAqLworCWlmIChtYXRjaF9iZWdpbm5pbmcpCisJCWxpbmUgPSAwOworCWVsc2UgaWYgKG1hdGNoX2VuZCkKKwkJbGluZSA9IGltZy0+bnIgLSBwcmVpbWFnZS0+bnI7CisKKwkvKgorCSAqIEJlY2F1c2UgdGhlIGNvbXBhcmlzb24gaXMgdW5zaWduZWQsIHRoZSBmb2xsb3dpbmcgdGVzdAorCSAqIHdpbGwgYWxzbyB0YWtlIGNhcmUgb2YgYSBuZWdhdGl2ZSBsaW5lIG51bWJlciB0aGF0IGNhbgorCSAqIHJlc3VsdCB3aGVuIG1hdGNoX2VuZCBhbmQgcHJlaW1hZ2UgaXMgbGFyZ2VyIHRoYW4gdGhlIHRhcmdldC4KKwkgKi8KKwlpZiAoKHNpemVfdCkgbGluZSA+IGltZy0+bnIpCisJCWxpbmUgPSBpbWctPm5yOworCisJY3VycmVudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGxpbmU7IGkrKykKKwkJY3VycmVudCArPSBpbWctPmxpbmVbaV0ubGVuOworCisJLyoKKwkgKiBUaGVyZSdzIHByb2JhYmx5IHNvbWUgc21hcnQgd2F5IHRvIGRvIHRoaXMsIGJ1dCBJJ2xsIGxlYXZlCisJICogdGhhdCB0byB0aGUgc21hcnQgYW5kIGJlYXV0aWZ1bCBwZW9wbGUuIEknbSBzaW1wbGUgYW5kIHN0dXBpZC4KKwkgKi8KKwliYWNrd2FyZHMgPSBjdXJyZW50OworCWJhY2t3YXJkc19sbm8gPSBsaW5lOworCWZvcndhcmRzID0gY3VycmVudDsKKwlmb3J3YXJkc19sbm8gPSBsaW5lOworCWN1cnJlbnRfbG5vID0gbGluZTsKKworCWZvciAoaSA9IDA7IDsgaSsrKSB7CisJCWlmIChtYXRjaF9mcmFnbWVudChzdGF0ZSwgaW1nLCBwcmVpbWFnZSwgcG9zdGltYWdlLAorCQkJCSAgIGN1cnJlbnQsIGN1cnJlbnRfbG5vLCB3c19ydWxlLAorCQkJCSAgIG1hdGNoX2JlZ2lubmluZywgbWF0Y2hfZW5kKSkKKwkJCXJldHVybiBjdXJyZW50X2xubzsKKworCWFnYWluOgorCQlpZiAoYmFja3dhcmRzX2xubyA9PSAwICYmIGZvcndhcmRzX2xubyA9PSBpbWctPm5yKQorCQkJYnJlYWs7CisKKwkJaWYgKGkgJiAxKSB7CisJCQlpZiAoYmFja3dhcmRzX2xubyA9PSAwKSB7CisJCQkJaSsrOworCQkJCWdvdG8gYWdhaW47CisJCQl9CisJCQliYWNrd2FyZHNfbG5vLS07CisJCQliYWNrd2FyZHMgLT0gaW1nLT5saW5lW2JhY2t3YXJkc19sbm9dLmxlbjsKKwkJCWN1cnJlbnQgPSBiYWNrd2FyZHM7CisJCQljdXJyZW50X2xubyA9IGJhY2t3YXJkc19sbm87CisJCX0gZWxzZSB7CisJCQlpZiAoZm9yd2FyZHNfbG5vID09IGltZy0+bnIpIHsKKwkJCQlpKys7CisJCQkJZ290byBhZ2FpbjsKKwkJCX0KKwkJCWZvcndhcmRzICs9IGltZy0+bGluZVtmb3J3YXJkc19sbm9dLmxlbjsKKwkJCWZvcndhcmRzX2xubysrOworCQkJY3VycmVudCA9IGZvcndhcmRzOworCQkJY3VycmVudF9sbm8gPSBmb3J3YXJkc19sbm87CisJCX0KKworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9maXJzdF9saW5lKHN0cnVjdCBpbWFnZSAqaW1nKQoreworCWltZy0+YnVmICs9IGltZy0+bGluZVswXS5sZW47CisJaW1nLT5sZW4gLT0gaW1nLT5saW5lWzBdLmxlbjsKKwlpbWctPmxpbmUrKzsKKwlpbWctPm5yLS07Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9sYXN0X2xpbmUoc3RydWN0IGltYWdlICppbWcpCit7CisJaW1nLT5sZW4gLT0gaW1nLT5saW5lWy0taW1nLT5ucl0ubGVuOworfQorCisvKgorICogVGhlIGNoYW5nZSBmcm9tICJwcmVpbWFnZSIgYW5kICJwb3N0aW1hZ2UiIGhhcyBiZWVuIGZvdW5kIHRvCisgKiBhcHBseSBhdCBhcHBsaWVkX3BvcyAoY291bnRzIGluIGxpbmUgbnVtYmVycykgaW4gImltZyIuCisgKiBVcGRhdGUgImltZyIgdG8gcmVtb3ZlICJwcmVpbWFnZSIgYW5kIHJlcGxhY2UgaXQgd2l0aCAicG9zdGltYWdlIi4KKyAqLworc3RhdGljIHZvaWQgdXBkYXRlX2ltYWdlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgc3RydWN0IGltYWdlICppbWcsCisJCQkgaW50IGFwcGxpZWRfcG9zLAorCQkJIHN0cnVjdCBpbWFnZSAqcHJlaW1hZ2UsCisJCQkgc3RydWN0IGltYWdlICpwb3N0aW1hZ2UpCit7CisJLyoKKwkgKiByZW1vdmUgdGhlIGNvcHkgb2YgcHJlaW1hZ2UgYXQgb2Zmc2V0IGluIGltZworCSAqIGFuZCByZXBsYWNlIGl0IHdpdGggcG9zdGltYWdlCisJICovCisJaW50IGksIG5yOworCXNpemVfdCByZW1vdmVfY291bnQsIGluc2VydF9jb3VudCwgYXBwbGllZF9hdCA9IDA7CisJY2hhciAqcmVzdWx0OworCWludCBwcmVpbWFnZV9saW1pdDsKKworCS8qCisJICogSWYgd2UgYXJlIHJlbW92aW5nIGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQgb2YgaW1nLAorCSAqIHRoZSBwcmVpbWFnZSBtYXkgZXh0ZW5kIGJleW9uZCB0aGUgZW5kLgorCSAqIElmIHRoYXQgaXMgdGhlIGNhc2UsIHdlIG11c3QgYmUgY2FyZWZ1bCBvbmx5IHRvCisJICogcmVtb3ZlIHRoZSBwYXJ0IG9mIHRoZSBwcmVpbWFnZSB0aGF0IGZhbGxzIHdpdGhpbgorCSAqIHRoZSBib3VuZGFyaWVzIG9mIGltZy4gSW5pdGlhbGl6ZSBwcmVpbWFnZV9saW1pdAorCSAqIHRvIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHByZWltYWdlIHRoYXQgZmFsbHMKKwkgKiB3aXRoaW4gdGhlIGJvdW5kYXJpZXMuCisJICovCisJcHJlaW1hZ2VfbGltaXQgPSBwcmVpbWFnZS0+bnI7CisJaWYgKHByZWltYWdlX2xpbWl0ID4gaW1nLT5uciAtIGFwcGxpZWRfcG9zKQorCQlwcmVpbWFnZV9saW1pdCA9IGltZy0+bnIgLSBhcHBsaWVkX3BvczsKKworCWZvciAoaSA9IDA7IGkgPCBhcHBsaWVkX3BvczsgaSsrKQorCQlhcHBsaWVkX2F0ICs9IGltZy0+bGluZVtpXS5sZW47CisKKwlyZW1vdmVfY291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBwcmVpbWFnZV9saW1pdDsgaSsrKQorCQlyZW1vdmVfY291bnQgKz0gaW1nLT5saW5lW2FwcGxpZWRfcG9zICsgaV0ubGVuOworCWluc2VydF9jb3VudCA9IHBvc3RpbWFnZS0+bGVuOworCisJLyogQWRqdXN0IHRoZSBjb250ZW50cyAqLworCXJlc3VsdCA9IHhtYWxsb2Moc3RfYWRkMyhzdF9zdWIoaW1nLT5sZW4sIHJlbW92ZV9jb3VudCksIGluc2VydF9jb3VudCwgMSkpOworCW1lbWNweShyZXN1bHQsIGltZy0+YnVmLCBhcHBsaWVkX2F0KTsKKwltZW1jcHkocmVzdWx0ICsgYXBwbGllZF9hdCwgcG9zdGltYWdlLT5idWYsIHBvc3RpbWFnZS0+bGVuKTsKKwltZW1jcHkocmVzdWx0ICsgYXBwbGllZF9hdCArIHBvc3RpbWFnZS0+bGVuLAorCSAgICAgICBpbWctPmJ1ZiArIChhcHBsaWVkX2F0ICsgcmVtb3ZlX2NvdW50KSwKKwkgICAgICAgaW1nLT5sZW4gLSAoYXBwbGllZF9hdCArIHJlbW92ZV9jb3VudCkpOworCWZyZWUoaW1nLT5idWYpOworCWltZy0+YnVmID0gcmVzdWx0OworCWltZy0+bGVuICs9IGluc2VydF9jb3VudCAtIHJlbW92ZV9jb3VudDsKKwlyZXN1bHRbaW1nLT5sZW5dID0gJ1wwJzsKKworCS8qIEFkanVzdCB0aGUgbGluZSB0YWJsZSAqLworCW5yID0gaW1nLT5uciArIHBvc3RpbWFnZS0+bnIgLSBwcmVpbWFnZV9saW1pdDsKKwlpZiAocHJlaW1hZ2VfbGltaXQgPCBwb3N0aW1hZ2UtPm5yKSB7CisJCS8qCisJCSAqIE5PVEU6IHRoaXMga25vd3MgdGhhdCB3ZSBuZXZlciBjYWxsIHJlbW92ZV9maXJzdF9saW5lKCkKKwkJICogb24gYW55dGhpbmcgb3RoZXIgdGhhbiBwcmUvcG9zdCBpbWFnZS4KKwkJICovCisJCVJFQUxMT0NfQVJSQVkoaW1nLT5saW5lLCBucik7CisJCWltZy0+bGluZV9hbGxvY2F0ZWQgPSBpbWctPmxpbmU7CisJfQorCWlmIChwcmVpbWFnZV9saW1pdCAhPSBwb3N0aW1hZ2UtPm5yKQorCQlNT1ZFX0FSUkFZKGltZy0+bGluZSArIGFwcGxpZWRfcG9zICsgcG9zdGltYWdlLT5uciwKKwkJCSAgIGltZy0+bGluZSArIGFwcGxpZWRfcG9zICsgcHJlaW1hZ2VfbGltaXQsCisJCQkgICBpbWctPm5yIC0gKGFwcGxpZWRfcG9zICsgcHJlaW1hZ2VfbGltaXQpKTsKKwlDT1BZX0FSUkFZKGltZy0+bGluZSArIGFwcGxpZWRfcG9zLCBwb3N0aW1hZ2UtPmxpbmUsIHBvc3RpbWFnZS0+bnIpOworCWlmICghc3RhdGUtPmFsbG93X292ZXJsYXApCisJCWZvciAoaSA9IDA7IGkgPCBwb3N0aW1hZ2UtPm5yOyBpKyspCisJCQlpbWctPmxpbmVbYXBwbGllZF9wb3MgKyBpXS5mbGFnIHw9IExJTkVfUEFUQ0hFRDsKKwlpbWctPm5yID0gbnI7Cit9CisKKy8qCisgKiBVc2UgdGhlIHBhdGNoLWh1bmsgdGV4dCBpbiAiZnJhZyIgdG8gcHJlcGFyZSB0d28gaW1hZ2VzIChwcmVpbWFnZSBhbmQKKyAqIHBvc3RpbWFnZSkgZm9yIHRoZSBodW5rLiAgRmluZCBsaW5lcyB0aGF0IG1hdGNoICJwcmVpbWFnZSIgaW4gImltZyIgYW5kCisgKiByZXBsYWNlIHRoZSBwYXJ0IG9mICJpbWciIHdpdGggInBvc3RpbWFnZSIgdGV4dC4KKyAqLworc3RhdGljIGludCBhcHBseV9vbmVfZnJhZ21lbnQoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgIHN0cnVjdCBpbWFnZSAqaW1nLCBzdHJ1Y3QgZnJhZ21lbnQgKmZyYWcsCisJCQkgICAgICBpbnQgaW5hY2N1cmF0ZV9lb2YsIHVuc2lnbmVkIHdzX3J1bGUsCisJCQkgICAgICBpbnQgbnRoX2ZyYWdtZW50KQoreworCWludCBtYXRjaF9iZWdpbm5pbmcsIG1hdGNoX2VuZDsKKwljb25zdCBjaGFyICpwYXRjaCA9IGZyYWctPnBhdGNoOworCWludCBzaXplID0gZnJhZy0+c2l6ZTsKKwljaGFyICpvbGQsICpvbGRsaW5lczsKKwlzdHJ1Y3Qgc3RyYnVmIG5ld2xpbmVzOworCWludCBuZXdfYmxhbmtfbGluZXNfYXRfZW5kID0gMDsKKwlpbnQgZm91bmRfbmV3X2JsYW5rX2xpbmVzX2F0X2VuZCA9IDA7CisJaW50IGh1bmtfbGluZW5yID0gZnJhZy0+bGluZW5yOworCXVuc2lnbmVkIGxvbmcgbGVhZGluZywgdHJhaWxpbmc7CisJaW50IHBvcywgYXBwbGllZF9wb3M7CisJc3RydWN0IGltYWdlIHByZWltYWdlOworCXN0cnVjdCBpbWFnZSBwb3N0aW1hZ2U7CisKKwltZW1zZXQoJnByZWltYWdlLCAwLCBzaXplb2YocHJlaW1hZ2UpKTsKKwltZW1zZXQoJnBvc3RpbWFnZSwgMCwgc2l6ZW9mKHBvc3RpbWFnZSkpOworCW9sZGxpbmVzID0geG1hbGxvYyhzaXplKTsKKwlzdHJidWZfaW5pdCgmbmV3bGluZXMsIHNpemUpOworCisJb2xkID0gb2xkbGluZXM7CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCWNoYXIgZmlyc3Q7CisJCWludCBsZW4gPSBsaW5lbGVuKHBhdGNoLCBzaXplKTsKKwkJaW50IHBsZW47CisJCWludCBhZGRlZF9ibGFua19saW5lID0gMDsKKwkJaW50IGlzX2JsYW5rX2NvbnRleHQgPSAwOworCQlzaXplX3Qgc3RhcnQ7CisKKwkJaWYgKCFsZW4pCisJCQlicmVhazsKKworCQkvKgorCQkgKiAicGxlbiIgaXMgaG93IG11Y2ggb2YgdGhlIGxpbmUgd2Ugc2hvdWxkIHVzZSBmb3IKKwkJICogdGhlIGFjdHVhbCBwYXRjaCBkYXRhLiBOb3JtYWxseSB3ZSBqdXN0IHJlbW92ZSB0aGUKKwkJICogZmlyc3QgY2hhcmFjdGVyIG9uIHRoZSBsaW5lLCBidXQgaWYgdGhlIGxpbmUgaXMKKwkJICogZm9sbG93ZWQgYnkgIlwgTm8gbmV3bGluZSIsIHRoZW4gd2UgYWxzbyByZW1vdmUgdGhlCisJCSAqIGxhc3Qgb25lICh3aGljaCBpcyB0aGUgbmV3bGluZSwgb2YgY291cnNlKS4KKwkJICovCisJCXBsZW4gPSBsZW4gLSAxOworCQlpZiAobGVuIDwgc2l6ZSAmJiBwYXRjaFtsZW5dID09ICdcXCcpCisJCQlwbGVuLS07CisJCWZpcnN0ID0gKnBhdGNoOworCQlpZiAoc3RhdGUtPmFwcGx5X2luX3JldmVyc2UpIHsKKwkJCWlmIChmaXJzdCA9PSAnLScpCisJCQkJZmlyc3QgPSAnKyc7CisJCQllbHNlIGlmIChmaXJzdCA9PSAnKycpCisJCQkJZmlyc3QgPSAnLSc7CisJCX0KKworCQlzd2l0Y2ggKGZpcnN0KSB7CisJCWNhc2UgJ1xuJzoKKwkJCS8qIE5ld2VyIEdOVSBkaWZmLCBlbXB0eSBjb250ZXh0IGxpbmUgKi8KKwkJCWlmIChwbGVuIDwgMCkKKwkJCQkvKiAuLi4gZm9sbG93ZWQgYnkgJ1xObyBuZXdsaW5lJzsgbm90aGluZyAqLworCQkJCWJyZWFrOworCQkJKm9sZCsrID0gJ1xuJzsKKwkJCXN0cmJ1Zl9hZGRjaCgmbmV3bGluZXMsICdcbicpOworCQkJYWRkX2xpbmVfaW5mbygmcHJlaW1hZ2UsICJcbiIsIDEsIExJTkVfQ09NTU9OKTsKKwkJCWFkZF9saW5lX2luZm8oJnBvc3RpbWFnZSwgIlxuIiwgMSwgTElORV9DT01NT04pOworCQkJaXNfYmxhbmtfY29udGV4dCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnICc6CisJCQlpZiAocGxlbiAmJiAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikgJiYKKwkJCSAgICB3c19ibGFua19saW5lKHBhdGNoICsgMSwgcGxlbiwgd3NfcnVsZSkpCisJCQkJaXNfYmxhbmtfY29udGV4dCA9IDE7CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlICctJzoKKwkJCW1lbWNweShvbGQsIHBhdGNoICsgMSwgcGxlbik7CisJCQlhZGRfbGluZV9pbmZvKCZwcmVpbWFnZSwgb2xkLCBwbGVuLAorCQkJCSAgICAgIChmaXJzdCA9PSAnICcgPyBMSU5FX0NPTU1PTiA6IDApKTsKKwkJCW9sZCArPSBwbGVuOworCQkJaWYgKGZpcnN0ID09ICctJykKKwkJCQlicmVhazsKKwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWNhc2UgJysnOgorCQkJLyogLS1uby1hZGQgZG9lcyBub3QgYWRkIG5ldyBsaW5lcyAqLworCQkJaWYgKGZpcnN0ID09ICcrJyAmJiBzdGF0ZS0+bm9fYWRkKQorCQkJCWJyZWFrOworCisJCQlzdGFydCA9IG5ld2xpbmVzLmxlbjsKKwkJCWlmIChmaXJzdCAhPSAnKycgfHwKKwkJCSAgICAhc3RhdGUtPndoaXRlc3BhY2VfZXJyb3IgfHwKKwkJCSAgICBzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uICE9IGNvcnJlY3Rfd3NfZXJyb3IpIHsKKwkJCQlzdHJidWZfYWRkKCZuZXdsaW5lcywgcGF0Y2ggKyAxLCBwbGVuKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXdzX2ZpeF9jb3B5KCZuZXdsaW5lcywgcGF0Y2ggKyAxLCBwbGVuLCB3c19ydWxlLCAmc3RhdGUtPmFwcGxpZWRfYWZ0ZXJfZml4aW5nX3dzKTsKKwkJCX0KKwkJCWFkZF9saW5lX2luZm8oJnBvc3RpbWFnZSwgbmV3bGluZXMuYnVmICsgc3RhcnQsIG5ld2xpbmVzLmxlbiAtIHN0YXJ0LAorCQkJCSAgICAgIChmaXJzdCA9PSAnKycgPyAwIDogTElORV9DT01NT04pKTsKKwkJCWlmIChmaXJzdCA9PSAnKycgJiYKKwkJCSAgICAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikgJiYKKwkJCSAgICB3c19ibGFua19saW5lKHBhdGNoICsgMSwgcGxlbiwgd3NfcnVsZSkpCisJCQkJYWRkZWRfYmxhbmtfbGluZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnQCc6IGNhc2UgJ1xcJzoKKwkJCS8qIElnbm9yZSBpdCwgd2UgYWxyZWFkeSBoYW5kbGVkIGl0ICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmIChzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X25vcm1hbCkKKwkJCQllcnJvcihfKCJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciKSwgZmlyc3QpOworCQkJYXBwbGllZF9wb3MgPSAtMTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChhZGRlZF9ibGFua19saW5lKSB7CisJCQlpZiAoIW5ld19ibGFua19saW5lc19hdF9lbmQpCisJCQkJZm91bmRfbmV3X2JsYW5rX2xpbmVzX2F0X2VuZCA9IGh1bmtfbGluZW5yOworCQkJbmV3X2JsYW5rX2xpbmVzX2F0X2VuZCsrOworCQl9CisJCWVsc2UgaWYgKGlzX2JsYW5rX2NvbnRleHQpCisJCQk7CisJCWVsc2UKKwkJCW5ld19ibGFua19saW5lc19hdF9lbmQgPSAwOworCQlwYXRjaCArPSBsZW47CisJCXNpemUgLT0gbGVuOworCQlodW5rX2xpbmVucisrOworCX0KKwlpZiAoaW5hY2N1cmF0ZV9lb2YgJiYKKwkgICAgb2xkID4gb2xkbGluZXMgJiYgb2xkWy0xXSA9PSAnXG4nICYmCisJICAgIG5ld2xpbmVzLmxlbiA+IDAgJiYgbmV3bGluZXMuYnVmW25ld2xpbmVzLmxlbiAtIDFdID09ICdcbicpIHsKKwkJb2xkLS07CisJCXN0cmJ1Zl9zZXRsZW4oJm5ld2xpbmVzLCBuZXdsaW5lcy5sZW4gLSAxKTsKKwkJcHJlaW1hZ2UubGluZV9hbGxvY2F0ZWRbcHJlaW1hZ2UubnIgLSAxXS5sZW4tLTsKKwkJcG9zdGltYWdlLmxpbmVfYWxsb2NhdGVkW3Bvc3RpbWFnZS5uciAtIDFdLmxlbi0tOworCX0KKworCWxlYWRpbmcgPSBmcmFnLT5sZWFkaW5nOworCXRyYWlsaW5nID0gZnJhZy0+dHJhaWxpbmc7CisKKwkvKgorCSAqIEEgaHVuayB0byBjaGFuZ2UgbGluZXMgYXQgdGhlIGJlZ2lubmluZyB3b3VsZCBiZWdpbiB3aXRoCisJICogQEAgLTEsTCArTixNIEBACisJICogYnV0IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bC4gIC1VMCB0aGF0IGluc2VydHMgYmVmb3JlIHRoZSBzZWNvbmQKKwkgKiBsaW5lIGFsc28gaGFzIHRoaXMgcGF0dGVybi4KKwkgKgorCSAqIEFuZCBhIGh1bmsgdG8gYWRkIHRvIGFuIGVtcHR5IGZpbGUgd291bGQgYmVnaW4gd2l0aAorCSAqIEBAIC0wLDAgK04sTSBAQAorCSAqCisJICogSW4gb3RoZXIgd29yZHMsIGEgaHVuayB0aGF0IGlzIChmcmFnLT5vbGRwb3MgPD0gMSkgd2l0aCBvcgorCSAqIHdpdGhvdXQgbGVhZGluZyBjb250ZXh0IG11c3QgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZy4KKwkgKi8KKwltYXRjaF9iZWdpbm5pbmcgPSAoIWZyYWctPm9sZHBvcyB8fAorCQkJICAgKGZyYWctPm9sZHBvcyA9PSAxICYmICFzdGF0ZS0+dW5pZGlmZl96ZXJvKSk7CisKKwkvKgorCSAqIEEgaHVuayB3aXRob3V0IHRyYWlsaW5nIGxpbmVzIG11c3QgbWF0Y2ggYXQgdGhlIGVuZC4KKwkgKiBIb3dldmVyLCB3ZSBzaW1wbHkgY2Fubm90IHRlbGwgaWYgYSBodW5rIG11c3QgbWF0Y2ggZW5kCisJICogZnJvbSB0aGUgbGFjayBvZiB0cmFpbGluZyBsaW5lcyBpZiB0aGUgcGF0Y2ggd2FzIGdlbmVyYXRlZAorCSAqIHdpdGggdW5pZGlmZiB3aXRob3V0IGFueSBjb250ZXh0LgorCSAqLworCW1hdGNoX2VuZCA9ICFzdGF0ZS0+dW5pZGlmZl96ZXJvICYmICF0cmFpbGluZzsKKworCXBvcyA9IGZyYWctPm5ld3BvcyA/IChmcmFnLT5uZXdwb3MgLSAxKSA6IDA7CisJcHJlaW1hZ2UuYnVmID0gb2xkbGluZXM7CisJcHJlaW1hZ2UubGVuID0gb2xkIC0gb2xkbGluZXM7CisJcG9zdGltYWdlLmJ1ZiA9IG5ld2xpbmVzLmJ1ZjsKKwlwb3N0aW1hZ2UubGVuID0gbmV3bGluZXMubGVuOworCXByZWltYWdlLmxpbmUgPSBwcmVpbWFnZS5saW5lX2FsbG9jYXRlZDsKKwlwb3N0aW1hZ2UubGluZSA9IHBvc3RpbWFnZS5saW5lX2FsbG9jYXRlZDsKKworCWZvciAoOzspIHsKKworCQlhcHBsaWVkX3BvcyA9IGZpbmRfcG9zKHN0YXRlLCBpbWcsICZwcmVpbWFnZSwgJnBvc3RpbWFnZSwgcG9zLAorCQkJCSAgICAgICB3c19ydWxlLCBtYXRjaF9iZWdpbm5pbmcsIG1hdGNoX2VuZCk7CisKKwkJaWYgKGFwcGxpZWRfcG9zID49IDApCisJCQlicmVhazsKKworCQkvKiBBbSBJIGF0IG15IGNvbnRleHQgbGltaXRzPyAqLworCQlpZiAoKGxlYWRpbmcgPD0gc3RhdGUtPnBfY29udGV4dCkgJiYgKHRyYWlsaW5nIDw9IHN0YXRlLT5wX2NvbnRleHQpKQorCQkJYnJlYWs7CisJCWlmIChtYXRjaF9iZWdpbm5pbmcgfHwgbWF0Y2hfZW5kKSB7CisJCQltYXRjaF9iZWdpbm5pbmcgPSBtYXRjaF9lbmQgPSAwOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBSZWR1Y2UgdGhlIG51bWJlciBvZiBjb250ZXh0IGxpbmVzOyByZWR1Y2UgYm90aAorCQkgKiBsZWFkaW5nIGFuZCB0cmFpbGluZyBpZiB0aGV5IGFyZSBlcXVhbCBvdGhlcndpc2UKKwkJICoganVzdCByZWR1Y2UgdGhlIGxhcmdlciBjb250ZXh0LgorCQkgKi8KKwkJaWYgKGxlYWRpbmcgPj0gdHJhaWxpbmcpIHsKKwkJCXJlbW92ZV9maXJzdF9saW5lKCZwcmVpbWFnZSk7CisJCQlyZW1vdmVfZmlyc3RfbGluZSgmcG9zdGltYWdlKTsKKwkJCXBvcy0tOworCQkJbGVhZGluZy0tOworCQl9CisJCWlmICh0cmFpbGluZyA+IGxlYWRpbmcpIHsKKwkJCXJlbW92ZV9sYXN0X2xpbmUoJnByZWltYWdlKTsKKwkJCXJlbW92ZV9sYXN0X2xpbmUoJnBvc3RpbWFnZSk7CisJCQl0cmFpbGluZy0tOworCQl9CisJfQorCisJaWYgKGFwcGxpZWRfcG9zID49IDApIHsKKwkJaWYgKG5ld19ibGFua19saW5lc19hdF9lbmQgJiYKKwkJICAgIHByZWltYWdlLm5yICsgYXBwbGllZF9wb3MgPj0gaW1nLT5uciAmJgorCQkgICAgKHdzX3J1bGUgJiBXU19CTEFOS19BVF9FT0YpICYmCisJCSAgICBzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uICE9IG5vd2Fybl93c19lcnJvcikgeworCQkJcmVjb3JkX3dzX2Vycm9yKHN0YXRlLCBXU19CTEFOS19BVF9FT0YsICIrIiwgMSwKKwkJCQkJZm91bmRfbmV3X2JsYW5rX2xpbmVzX2F0X2VuZCk7CisJCQlpZiAoc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9PSBjb3JyZWN0X3dzX2Vycm9yKSB7CisJCQkJd2hpbGUgKG5ld19ibGFua19saW5lc19hdF9lbmQtLSkKKwkJCQkJcmVtb3ZlX2xhc3RfbGluZSgmcG9zdGltYWdlKTsKKwkJCX0KKwkJCS8qCisJCQkgKiBXZSB3b3VsZCB3YW50IHRvIHByZXZlbnQgd3JpdGVfb3V0X3Jlc3VsdHMoKQorCQkJICogZnJvbSB0YWtpbmcgcGxhY2UgaW4gYXBwbHlfcGF0Y2goKSB0aGF0IGZvbGxvd3MKKwkJCSAqIHRoZSBjYWxsY2hhaW4gbGVkIHVzIGhlcmUsIHdoaWNoIGlzOgorCQkJICogYXBwbHlfcGF0Y2gtPmNoZWNrX3BhdGNoX2xpc3QtPmNoZWNrX3BhdGNoLT4KKwkJCSAqIGFwcGx5X2RhdGEtPmFwcGx5X2ZyYWdtZW50cy0+YXBwbHlfb25lX2ZyYWdtZW50CisJCQkgKi8KKwkJCWlmIChzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uID09IGRpZV9vbl93c19lcnJvcikKKwkJCQlzdGF0ZS0+YXBwbHkgPSAwOworCQl9CisKKwkJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPiB2ZXJib3NpdHlfbm9ybWFsICYmIGFwcGxpZWRfcG9zICE9IHBvcykgeworCQkJaW50IG9mZnNldCA9IGFwcGxpZWRfcG9zIC0gcG9zOworCQkJaWYgKHN0YXRlLT5hcHBseV9pbl9yZXZlcnNlKQorCQkJCW9mZnNldCA9IDAgLSBvZmZzZXQ7CisJCQlmcHJpbnRmX2xuKHN0ZGVyciwKKwkJCQkgICBRXygiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIiwKKwkJCQkgICAgICAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIsCisJCQkJICAgICAgb2Zmc2V0KSwKKwkJCQkgICBudGhfZnJhZ21lbnQsIGFwcGxpZWRfcG9zICsgMSwgb2Zmc2V0KTsKKwkJfQorCisJCS8qCisJCSAqIFdhcm4gaWYgaXQgd2FzIG5lY2Vzc2FyeSB0byByZWR1Y2UgdGhlIG51bWJlcgorCQkgKiBvZiBjb250ZXh0IGxpbmVzLgorCQkgKi8KKwkJaWYgKChsZWFkaW5nICE9IGZyYWctPmxlYWRpbmcgfHwKKwkJICAgICB0cmFpbGluZyAhPSBmcmFnLT50cmFpbGluZykgJiYgc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA+IHZlcmJvc2l0eV9zaWxlbnQpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ29udGV4dCByZWR1Y2VkIHRvICglbGQvJWxkKSIKKwkJCQkJICAgICAiIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIiksCisJCQkJICAgbGVhZGluZywgdHJhaWxpbmcsIGFwcGxpZWRfcG9zKzEpOworCQl1cGRhdGVfaW1hZ2Uoc3RhdGUsIGltZywgYXBwbGllZF9wb3MsICZwcmVpbWFnZSwgJnBvc3RpbWFnZSk7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPiB2ZXJib3NpdHlfbm9ybWFsKQorCQkJZXJyb3IoXygid2hpbGUgc2VhcmNoaW5nIGZvcjpcbiUuKnMiKSwKKwkJCSAgICAgIChpbnQpKG9sZCAtIG9sZGxpbmVzKSwgb2xkbGluZXMpOworCX0KKworb3V0OgorCWZyZWUob2xkbGluZXMpOworCXN0cmJ1Zl9yZWxlYXNlKCZuZXdsaW5lcyk7CisJZnJlZShwcmVpbWFnZS5saW5lX2FsbG9jYXRlZCk7CisJZnJlZShwb3N0aW1hZ2UubGluZV9hbGxvY2F0ZWQpOworCisJcmV0dXJuIChhcHBsaWVkX3BvcyA8IDApOworfQorCitzdGF0aWMgaW50IGFwcGx5X2JpbmFyeV9mcmFnbWVudChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJCSBzdHJ1Y3QgaW1hZ2UgKmltZywKKwkJCQkgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlzdHJ1Y3QgZnJhZ21lbnQgKmZyYWdtZW50ID0gcGF0Y2gtPmZyYWdtZW50czsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwl2b2lkICpkc3Q7CisKKwlpZiAoIWZyYWdtZW50KQorCQlyZXR1cm4gZXJyb3IoXygibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIpLAorCQkJICAgICBwYXRjaC0+bmV3X25hbWUgPworCQkJICAgICBwYXRjaC0+bmV3X25hbWUgOgorCQkJICAgICBwYXRjaC0+b2xkX25hbWUpOworCisJLyogQmluYXJ5IHBhdGNoIGlzIGlycmV2ZXJzaWJsZSB3aXRob3V0IHRoZSBvcHRpb25hbCBzZWNvbmQgaHVuayAqLworCWlmIChzdGF0ZS0+YXBwbHlfaW5fcmV2ZXJzZSkgeworCQlpZiAoIWZyYWdtZW50LT5uZXh0KQorCQkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCByZXZlcnNlLWFwcGx5IGEgYmluYXJ5IHBhdGNoICIKKwkJCQkgICAgICAgIndpdGhvdXQgdGhlIHJldmVyc2UgaHVuayB0byAnJXMnIiksCisJCQkJICAgICBwYXRjaC0+bmV3X25hbWUKKwkJCQkgICAgID8gcGF0Y2gtPm5ld19uYW1lIDogcGF0Y2gtPm9sZF9uYW1lKTsKKwkJZnJhZ21lbnQgPSBmcmFnbWVudC0+bmV4dDsKKwl9CisJc3dpdGNoIChmcmFnbWVudC0+YmluYXJ5X3BhdGNoX21ldGhvZCkgeworCWNhc2UgQklOQVJZX0RFTFRBX0RFRkxBVEVEOgorCQlkc3QgPSBwYXRjaF9kZWx0YShpbWctPmJ1ZiwgaW1nLT5sZW4sIGZyYWdtZW50LT5wYXRjaCwKKwkJCQkgIGZyYWdtZW50LT5zaXplLCAmbGVuKTsKKwkJaWYgKCFkc3QpCisJCQlyZXR1cm4gLTE7CisJCWNsZWFyX2ltYWdlKGltZyk7CisJCWltZy0+YnVmID0gZHN0OworCQlpbWctPmxlbiA9IGxlbjsKKwkJcmV0dXJuIDA7CisJY2FzZSBCSU5BUllfTElURVJBTF9ERUZMQVRFRDoKKwkJY2xlYXJfaW1hZ2UoaW1nKTsKKwkJaW1nLT5sZW4gPSBmcmFnbWVudC0+c2l6ZTsKKwkJaW1nLT5idWYgPSB4bWVtZHVweihmcmFnbWVudC0+cGF0Y2gsIGltZy0+bGVuKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKworLyoKKyAqIFJlcGxhY2UgImltZyIgd2l0aCB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBiaW5hcnkgcGF0Y2guCisgKiBUaGUgYmluYXJ5IHBhdGNoIGRhdGEgaXRzZWxmIGluIHBhdGNoLT5mcmFnbWVudCBpcyBzdGlsbCBrZXB0CisgKiBidXQgdGhlIHByZWltYWdlIHByZXBhcmVkIGJ5IHRoZSBjYWxsZXIgaW4gImltZyIgaXMgZnJlZWQgaGVyZQorICogb3IgaW4gdGhlIGhlbHBlciBmdW5jdGlvbiBhcHBseV9iaW5hcnlfZnJhZ21lbnQoKSB0aGlzIGNhbGxzLgorICovCitzdGF0aWMgaW50IGFwcGx5X2JpbmFyeShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJc3RydWN0IGltYWdlICppbWcsCisJCQlzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCWNvbnN0IGNoYXIgKm5hbWUgPSBwYXRjaC0+b2xkX25hbWUgPyBwYXRjaC0+b2xkX25hbWUgOiBwYXRjaC0+bmV3X25hbWU7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY29uc3QgdW5zaWduZWQgaGV4c3ogPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKworCS8qCisJICogRm9yIHNhZmV0eSwgd2UgcmVxdWlyZSBwYXRjaCBpbmRleCBsaW5lIHRvIGNvbnRhaW4KKwkgKiBmdWxsIGhleCB0ZXh0dWFsIG9iamVjdCBJRCBmb3Igb2xkIGFuZCBuZXcsIGF0IGxlYXN0IGZvciBub3cuCisJICovCisJaWYgKHN0cmxlbihwYXRjaC0+b2xkX29pZF9wcmVmaXgpICE9IGhleHN6IHx8CisJICAgIHN0cmxlbihwYXRjaC0+bmV3X29pZF9wcmVmaXgpICE9IGhleHN6IHx8CisJICAgIGdldF9vaWRfaGV4KHBhdGNoLT5vbGRfb2lkX3ByZWZpeCwgJm9pZCkgfHwKKwkgICAgZ2V0X29pZF9oZXgocGF0Y2gtPm5ld19vaWRfcHJlZml4LCAmb2lkKSkKKwkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCBhcHBseSBiaW5hcnkgcGF0Y2ggdG8gJyVzJyAiCisJCQkgICAgICAgIndpdGhvdXQgZnVsbCBpbmRleCBsaW5lIiksIG5hbWUpOworCisJaWYgKHBhdGNoLT5vbGRfbmFtZSkgeworCQkvKgorCQkgKiBTZWUgaWYgdGhlIG9sZCBvbmUgbWF0Y2hlcyB3aGF0IHRoZSBwYXRjaAorCQkgKiBhcHBsaWVzIHRvLgorCQkgKi8KKwkJaGFzaF9vYmplY3RfZmlsZSh0aGVfaGFzaF9hbGdvLCBpbWctPmJ1ZiwgaW1nLT5sZW4sIGJsb2JfdHlwZSwKKwkJCQkgJm9pZCk7CisJCWlmIChzdHJjbXAob2lkX3RvX2hleCgmb2lkKSwgcGF0Y2gtPm9sZF9vaWRfcHJlZml4KSkKKwkJCXJldHVybiBlcnJvcihfKCJ0aGUgcGF0Y2ggYXBwbGllcyB0byAnJXMnICglcyksICIKKwkJCQkgICAgICAgIndoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSAiCisJCQkJICAgICAgICJjdXJyZW50IGNvbnRlbnRzLiIpLAorCQkJCSAgICAgbmFtZSwgb2lkX3RvX2hleCgmb2lkKSk7CisJfQorCWVsc2UgeworCQkvKiBPdGhlcndpc2UsIHRoZSBvbGQgb25lIG11c3QgYmUgZW1wdHkuICovCisJCWlmIChpbWctPmxlbikKKwkJCXJldHVybiBlcnJvcihfKCJ0aGUgcGF0Y2ggYXBwbGllcyB0byBhbiBlbXB0eSAiCisJCQkJICAgICAgICInJXMnIGJ1dCBpdCBpcyBub3QgZW1wdHkiKSwgbmFtZSk7CisJfQorCisJZ2V0X29pZF9oZXgocGF0Y2gtPm5ld19vaWRfcHJlZml4LCAmb2lkKTsKKwlpZiAoaXNfbnVsbF9vaWQoJm9pZCkpIHsKKwkJY2xlYXJfaW1hZ2UoaW1nKTsKKwkJcmV0dXJuIDA7IC8qIGRlbGV0aW9uIHBhdGNoICovCisJfQorCisJaWYgKGhhc19vYmplY3RfZmlsZSgmb2lkKSkgeworCQkvKiBXZSBhbHJlYWR5IGhhdmUgdGhlIHBvc3RpbWFnZSAqLworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJY2hhciAqcmVzdWx0OworCisJCXJlc3VsdCA9IHJlYWRfb2JqZWN0X2ZpbGUoJm9pZCwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFyZXN1bHQpCisJCQlyZXR1cm4gZXJyb3IoXygidGhlIG5lY2Vzc2FyeSBwb3N0aW1hZ2UgJXMgZm9yICIKKwkJCQkgICAgICAgIiclcycgY2Fubm90IGJlIHJlYWQiKSwKKwkJCQkgICAgIHBhdGNoLT5uZXdfb2lkX3ByZWZpeCwgbmFtZSk7CisJCWNsZWFyX2ltYWdlKGltZyk7CisJCWltZy0+YnVmID0gcmVzdWx0OworCQlpbWctPmxlbiA9IHNpemU7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogV2UgaGF2ZSB2ZXJpZmllZCBidWYgbWF0Y2hlcyB0aGUgcHJlaW1hZ2U7CisJCSAqIGFwcGx5IHRoZSBwYXRjaCBkYXRhIHRvIGl0LCB3aGljaCBpcyBzdG9yZWQKKwkJICogaW4gdGhlIHBhdGNoLT5mcmFnbWVudHMtPntwYXRjaCxzaXplfS4KKwkJICovCisJCWlmIChhcHBseV9iaW5hcnlfZnJhZ21lbnQoc3RhdGUsIGltZywgcGF0Y2gpKQorCQkJcmV0dXJuIGVycm9yKF8oImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIiksCisJCQkJICAgICBuYW1lKTsKKworCQkvKiB2ZXJpZnkgdGhhdCB0aGUgcmVzdWx0IG1hdGNoZXMgKi8KKwkJaGFzaF9vYmplY3RfZmlsZSh0aGVfaGFzaF9hbGdvLCBpbWctPmJ1ZiwgaW1nLT5sZW4sIGJsb2JfdHlwZSwKKwkJCQkgJm9pZCk7CisJCWlmIChzdHJjbXAob2lkX3RvX2hleCgmb2lkKSwgcGF0Y2gtPm5ld19vaWRfcHJlZml4KSkKKwkJCXJldHVybiBlcnJvcihfKCJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIpLAorCQkJCW5hbWUsIHBhdGNoLT5uZXdfb2lkX3ByZWZpeCwgb2lkX3RvX2hleCgmb2lkKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfZnJhZ21lbnRzKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBpbWFnZSAqaW1nLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBmcmFnbWVudCAqZnJhZyA9IHBhdGNoLT5mcmFnbWVudHM7CisJY29uc3QgY2hhciAqbmFtZSA9IHBhdGNoLT5vbGRfbmFtZSA/IHBhdGNoLT5vbGRfbmFtZSA6IHBhdGNoLT5uZXdfbmFtZTsKKwl1bnNpZ25lZCB3c19ydWxlID0gcGF0Y2gtPndzX3J1bGU7CisJdW5zaWduZWQgaW5hY2N1cmF0ZV9lb2YgPSBwYXRjaC0+aW5hY2N1cmF0ZV9lb2Y7CisJaW50IG50aCA9IDA7CisKKwlpZiAocGF0Y2gtPmlzX2JpbmFyeSkKKwkJcmV0dXJuIGFwcGx5X2JpbmFyeShzdGF0ZSwgaW1nLCBwYXRjaCk7CisKKwl3aGlsZSAoZnJhZykgeworCQludGgrKzsKKwkJaWYgKGFwcGx5X29uZV9mcmFnbWVudChzdGF0ZSwgaW1nLCBmcmFnLCBpbmFjY3VyYXRlX2VvZiwgd3NfcnVsZSwgbnRoKSkgeworCQkJZXJyb3IoXygicGF0Y2ggZmFpbGVkOiAlczolbGQiKSwgbmFtZSwgZnJhZy0+b2xkcG9zKTsKKwkJCWlmICghc3RhdGUtPmFwcGx5X3dpdGhfcmVqZWN0KQorCQkJCXJldHVybiAtMTsKKwkJCWZyYWctPnJlamVjdGVkID0gMTsKKwkJfQorCQlmcmFnID0gZnJhZy0+bmV4dDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9ibG9iX29iamVjdChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdW5zaWduZWQgbW9kZSkKK3sKKwlpZiAoU19JU0dJVExJTksobW9kZSkpIHsKKwkJc3RyYnVmX2dyb3coYnVmLCAxMDApOworCQlzdHJidWZfYWRkZihidWYsICJTdWJwcm9qZWN0IGNvbW1pdCAlc1xuIiwgb2lkX3RvX2hleChvaWQpKTsKKwl9IGVsc2UgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgc3o7CisJCWNoYXIgKnJlc3VsdDsKKworCQlyZXN1bHQgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnR5cGUsICZzeik7CisJCWlmICghcmVzdWx0KQorCQkJcmV0dXJuIC0xOworCQkvKiBYWFggcmVhZF9zaGExX2ZpbGUgTlVMLXRlcm1pbmF0ZXMgKi8KKwkJc3RyYnVmX2F0dGFjaChidWYsIHJlc3VsdCwgc3osIHN6ICsgMSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfZmlsZV9vcl9naXRsaW5rKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlpZiAoIWNlKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVhZF9ibG9iX29iamVjdChidWYsICZjZS0+b2lkLCBjZS0+Y2VfbW9kZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGF0Y2ggKmluX2ZuX3RhYmxlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwlpZiAobmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoJnN0YXRlLT5mbl90YWJsZSwgbmFtZSk7CisJaWYgKGl0ZW0gIT0gTlVMTCkKKwkJcmV0dXJuIChzdHJ1Y3QgcGF0Y2ggKilpdGVtLT51dGlsOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBpdGVtLT51dGlsIGluIHRoZSBmaWxlbmFtZSB0YWJsZSByZWNvcmRzIHRoZSBzdGF0dXMgb2YgdGhlIHBhdGguCisgKiBVc3VhbGx5IGl0IHBvaW50cyBhdCBhIHBhdGNoICh3aG9zZSByZXN1bHQgcmVjb3JkcyB0aGUgY29udGVudHMKKyAqIG9mIGl0IGFmdGVyIGFwcGx5aW5nIGl0KSwgYnV0IGl0IGNvdWxkIGJlIFBBVEhfV0FTX0RFTEVURUQgZm9yIGEKKyAqIHBhdGggdGhhdCBhIHByZXZpb3VzbHkgYXBwbGllZCBwYXRjaCBoYXMgYWxyZWFkeSByZW1vdmVkLCBvcgorICogUEFUSF9UT19CRV9ERUxFVEVEIGZvciBhIHBhdGggdGhhdCBhIGxhdGVyIHBhdGNoIHdvdWxkIHJlbW92ZS4KKyAqCisgKiBUaGUgbGF0dGVyIGlzIG5lZWRlZCB0byBkZWFsIHdpdGggYSBjYXNlIHdoZXJlIHR3byBwYXRocyBBIGFuZCBCCisgKiBhcmUgc3dhcHBlZCBieSBmaXJzdCByZW5hbWluZyBBIHRvIEIgYW5kIHRoZW4gcmVuYW1pbmcgQiB0byBBOworICogbW92aW5nIEEgdG8gQiBzaG91bGQgbm90IGJlIHByZXZlbnRlZCBkdWUgdG8gcHJlc2VuY2Ugb2YgQiBhcyB3ZQorICogd2lsbCByZW1vdmUgaXQgaW4gYSBsYXRlciBwYXRjaC4KKyAqLworI2RlZmluZSBQQVRIX1RPX0JFX0RFTEVURUQgKChzdHJ1Y3QgcGF0Y2ggKikgLTIpCisjZGVmaW5lIFBBVEhfV0FTX0RFTEVURUQgKChzdHJ1Y3QgcGF0Y2ggKikgLTEpCisKK3N0YXRpYyBpbnQgdG9fYmVfZGVsZXRlZChzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXJldHVybiBwYXRjaCA9PSBQQVRIX1RPX0JFX0RFTEVURUQ7Cit9CisKK3N0YXRpYyBpbnQgd2FzX2RlbGV0ZWQoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlyZXR1cm4gcGF0Y2ggPT0gUEFUSF9XQVNfREVMRVRFRDsKK30KKworc3RhdGljIHZvaWQgYWRkX3RvX2ZuX3RhYmxlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwkvKgorCSAqIEFsd2F5cyBhZGQgbmV3X25hbWUgdW5sZXNzIHBhdGNoIGlzIGEgZGVsZXRpb24KKwkgKiBUaGlzIHNob3VsZCBjb3ZlciB0aGUgY2FzZXMgZm9yIG5vcm1hbCBkaWZmcywKKwkgKiBmaWxlIGNyZWF0aW9ucyBhbmQgY29waWVzCisJICovCisJaWYgKHBhdGNoLT5uZXdfbmFtZSAhPSBOVUxMKSB7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoJnN0YXRlLT5mbl90YWJsZSwgcGF0Y2gtPm5ld19uYW1lKTsKKwkJaXRlbS0+dXRpbCA9IHBhdGNoOworCX0KKworCS8qCisJICogc3RvcmUgYSBmYWlsdXJlIG9uIHJlbmFtZS9kZWxldGlvbiBjYXNlcyBiZWNhdXNlCisJICogbGF0ZXIgY2h1bmtzIHNob3VsZG4ndCBwYXRjaCBvbGQgbmFtZXMKKwkgKi8KKwlpZiAoKHBhdGNoLT5uZXdfbmFtZSA9PSBOVUxMKSB8fCAocGF0Y2gtPmlzX3JlbmFtZSkpIHsKKwkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCgmc3RhdGUtPmZuX3RhYmxlLCBwYXRjaC0+b2xkX25hbWUpOworCQlpdGVtLT51dGlsID0gUEFUSF9XQVNfREVMRVRFRDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfZm5fdGFibGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwkvKgorCSAqIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IGluY29taW5nIGZpbGUgZGVsZXRpb24KKwkgKi8KKwl3aGlsZSAocGF0Y2gpIHsKKwkJaWYgKChwYXRjaC0+bmV3X25hbWUgPT0gTlVMTCkgfHwgKHBhdGNoLT5pc19yZW5hbWUpKSB7CisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoJnN0YXRlLT5mbl90YWJsZSwgcGF0Y2gtPm9sZF9uYW1lKTsKKwkJCWl0ZW0tPnV0aWwgPSBQQVRIX1RPX0JFX0RFTEVURUQ7CisJCX0KKwkJcGF0Y2ggPSBwYXRjaC0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfdGFyZ2V0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KQoreworCXN0cnVjdCBjaGVja291dCBjb3N0YXRlID0gQ0hFQ0tPVVRfSU5JVDsKKworCWNvc3RhdGUucmVmcmVzaF9jYWNoZSA9IDE7CisJY29zdGF0ZS5pc3RhdGUgPSBpc3RhdGU7CisJaWYgKGNoZWNrb3V0X2VudHJ5KGNlLCAmY29zdGF0ZSwgTlVMTCwgTlVMTCkgfHwKKwkgICAgbHN0YXQoY2UtPm5hbWUsIHN0KSkKKwkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCBjaGVja291dCAlcyIpLCBjZS0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGF0Y2ggKnByZXZpb3VzX3BhdGNoKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkJICAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gsCisJCQkJICAgIGludCAqZ29uZSkKK3sKKwlzdHJ1Y3QgcGF0Y2ggKnByZXZpb3VzOworCisJKmdvbmUgPSAwOworCWlmIChwYXRjaC0+aXNfY29weSB8fCBwYXRjaC0+aXNfcmVuYW1lKQorCQlyZXR1cm4gTlVMTDsgLyogImdpdCIgcGF0Y2hlcyBkbyBub3QgZGVwZW5kIG9uIHRoZSBvcmRlciAqLworCisJcHJldmlvdXMgPSBpbl9mbl90YWJsZShzdGF0ZSwgcGF0Y2gtPm9sZF9uYW1lKTsKKwlpZiAoIXByZXZpb3VzKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICh0b19iZV9kZWxldGVkKHByZXZpb3VzKSkKKwkJcmV0dXJuIE5VTEw7IC8qIHRoZSBkZWxldGlvbiBoYXNuJ3QgaGFwcGVuZWQgeWV0ICovCisKKwlpZiAod2FzX2RlbGV0ZWQocHJldmlvdXMpKQorCQkqZ29uZSA9IDE7CisKKwlyZXR1cm4gcHJldmlvdXM7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X2luZGV4X21hdGNoKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJICAgICAgc3RydWN0IHN0YXQgKnN0KQoreworCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpIHsKKwkJaWYgKCFTX0lTRElSKHN0LT5zdF9tb2RlKSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBpZV9tYXRjaF9zdGF0KHN0YXRlLT5yZXBvLT5pbmRleCwgY2UsIHN0LAorCQkJICAgICBDRV9NQVRDSF9JR05PUkVfVkFMSUQgfCBDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRSk7Cit9CisKKyNkZWZpbmUgU1VCTU9EVUxFX1BBVENIX1dJVEhPVVRfSU5ERVggMQorCitzdGF0aWMgaW50IGxvYWRfcGF0Y2hfdGFyZ2V0KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCSAgICAgc3RydWN0IHN0YXQgKnN0LAorCQkJICAgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoLAorCQkJICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICB1bnNpZ25lZCBleHBlY3RlZF9tb2RlKQoreworCWlmIChzdGF0ZS0+Y2FjaGVkIHx8IHN0YXRlLT5jaGVja19pbmRleCkgeworCQlpZiAocmVhZF9maWxlX29yX2dpdGxpbmsoY2UsIGJ1ZikpCisJCQlyZXR1cm4gZXJyb3IoXygiZmFpbGVkIHRvIHJlYWQgJXMiKSwgbmFtZSk7CisJfSBlbHNlIGlmIChuYW1lKSB7CisJCWlmIChTX0lTR0lUTElOSyhleHBlY3RlZF9tb2RlKSkgeworCQkJaWYgKGNlKQorCQkJCXJldHVybiByZWFkX2ZpbGVfb3JfZ2l0bGluayhjZSwgYnVmKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gU1VCTU9EVUxFX1BBVENIX1dJVEhPVVRfSU5ERVg7CisJCX0gZWxzZSBpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKG5hbWUsIHN0cmxlbihuYW1lKSkpIHsKKwkJCXJldHVybiBlcnJvcihfKCJyZWFkaW5nIGZyb20gJyVzJyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIiksIG5hbWUpOworCQl9IGVsc2UgeworCQkJaWYgKHJlYWRfb2xkX2RhdGEoc3QsIHBhdGNoLCBuYW1lLCBidWYpKQorCQkJCXJldHVybiBlcnJvcihfKCJmYWlsZWQgdG8gcmVhZCAlcyIpLCBuYW1lKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdlIGFyZSBhYm91dCB0byBhcHBseSAicGF0Y2giOyBwb3B1bGF0ZSB0aGUgImltYWdlIiB3aXRoIHRoZQorICogY3VycmVudCB2ZXJzaW9uIHdlIGhhdmUsIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBvciBmcm9tIHRoZSBpbmRleCwKKyAqIGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uIGUuZy4gLS1jYWNoZWQvLS1pbmRleC4gIElmIHdlIGFyZQorICogYXBwbHlpbmcgYSBub24tZ2l0IHBhdGNoIHRoYXQgaW5jcmVtZW50YWxseSB1cGRhdGVzIHRoZSB0cmVlLAorICogd2UgcmVhZCBmcm9tIHRoZSByZXN1bHQgb2YgYSBwcmV2aW91cyBkaWZmLgorICovCitzdGF0aWMgaW50IGxvYWRfcHJlaW1hZ2Uoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSBzdHJ1Y3QgaW1hZ2UgKmltYWdlLAorCQkJIHN0cnVjdCBwYXRjaCAqcGF0Y2gsIHN0cnVjdCBzdGF0ICpzdCwKKwkJCSBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IGxlbjsKKwljaGFyICppbWc7CisJc3RydWN0IHBhdGNoICpwcmV2aW91czsKKwlpbnQgc3RhdHVzOworCisJcHJldmlvdXMgPSBwcmV2aW91c19wYXRjaChzdGF0ZSwgcGF0Y2gsICZzdGF0dXMpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBlcnJvcihfKCJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIpLAorCQkJICAgICBwYXRjaC0+b2xkX25hbWUpOworCWlmIChwcmV2aW91cykgeworCQkvKiBXZSBoYXZlIGEgcGF0Y2hlZCBjb3B5IGluIG1lbW9yeTsgdXNlIHRoYXQuICovCisJCXN0cmJ1Zl9hZGQoJmJ1ZiwgcHJldmlvdXMtPnJlc3VsdCwgcHJldmlvdXMtPnJlc3VsdHNpemUpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IGxvYWRfcGF0Y2hfdGFyZ2V0KHN0YXRlLCAmYnVmLCBjZSwgc3QsIHBhdGNoLAorCQkJCQkgICBwYXRjaC0+b2xkX25hbWUsIHBhdGNoLT5vbGRfbW9kZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIHN0YXR1czsKKwkJZWxzZSBpZiAoc3RhdHVzID09IFNVQk1PRFVMRV9QQVRDSF9XSVRIT1VUX0lOREVYKSB7CisJCQkvKgorCQkJICogVGhlcmUgaXMgbm8gd2F5IHRvIGFwcGx5IHN1YnByb2plY3QKKwkJCSAqIHBhdGNoIHdpdGhvdXQgbG9va2luZyBhdCB0aGUgaW5kZXguCisJCQkgKiBORUVEU1dPUks6IHNob3VsZG4ndCB0aGlzIGJlIGZsYWdnZWQKKwkJCSAqIGFzIGFuIGVycm9yPz8/CisJCQkgKi8KKwkJCWZyZWVfZnJhZ21lbnRfbGlzdChwYXRjaC0+ZnJhZ21lbnRzKTsKKwkJCXBhdGNoLT5mcmFnbWVudHMgPSBOVUxMOworCQl9IGVsc2UgaWYgKHN0YXR1cykgeworCQkJcmV0dXJuIGVycm9yKF8oImZhaWxlZCB0byByZWFkICVzIiksIHBhdGNoLT5vbGRfbmFtZSk7CisJCX0KKwl9CisKKwlpbWcgPSBzdHJidWZfZGV0YWNoKCZidWYsICZsZW4pOworCXByZXBhcmVfaW1hZ2UoaW1hZ2UsIGltZywgbGVuLCAhcGF0Y2gtPmlzX2JpbmFyeSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGhyZWVfd2F5X21lcmdlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICBzdHJ1Y3QgaW1hZ2UgKmltYWdlLAorCQkJICAgY2hhciAqcGF0aCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmJhc2UsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvdXJzLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdGhlaXJzKQoreworCW1tZmlsZV90IGJhc2VfZmlsZSwgb3VyX2ZpbGUsIHRoZWlyX2ZpbGU7CisJbW1idWZmZXJfdCByZXN1bHQgPSB7IE5VTEwgfTsKKwlpbnQgc3RhdHVzOworCisJcmVhZF9tbWJsb2IoJmJhc2VfZmlsZSwgYmFzZSk7CisJcmVhZF9tbWJsb2IoJm91cl9maWxlLCBvdXJzKTsKKwlyZWFkX21tYmxvYigmdGhlaXJfZmlsZSwgdGhlaXJzKTsKKwlzdGF0dXMgPSBsbF9tZXJnZSgmcmVzdWx0LCBwYXRoLAorCQkJICAmYmFzZV9maWxlLCAiYmFzZSIsCisJCQkgICZvdXJfZmlsZSwgIm91cnMiLAorCQkJICAmdGhlaXJfZmlsZSwgInRoZWlycyIsCisJCQkgIHN0YXRlLT5yZXBvLT5pbmRleCwKKwkJCSAgTlVMTCk7CisJZnJlZShiYXNlX2ZpbGUucHRyKTsKKwlmcmVlKG91cl9maWxlLnB0cik7CisJZnJlZSh0aGVpcl9maWxlLnB0cik7CisJaWYgKHN0YXR1cyA8IDAgfHwgIXJlc3VsdC5wdHIpIHsKKwkJZnJlZShyZXN1bHQucHRyKTsKKwkJcmV0dXJuIC0xOworCX0KKwljbGVhcl9pbWFnZShpbWFnZSk7CisJaW1hZ2UtPmJ1ZiA9IHJlc3VsdC5wdHI7CisJaW1hZ2UtPmxlbiA9IHJlc3VsdC5zaXplOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIFdoZW4gZGlyZWN0bHkgZmFsbGluZyBiYWNrIHRvIGFkZC9hZGQgdGhyZWUtd2F5IG1lcmdlLCB3ZSByZWFkIGZyb20KKyAqIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBuZXdfbmFtZS4gIEluIG5vIGNhc2VzIG90aGVyIHRoYW4gdGhhdAorICogdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZC4KKyAqLworc3RhdGljIGludCBsb2FkX2N1cnJlbnQoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCXN0cnVjdCBpbWFnZSAqaW1hZ2UsCisJCQlzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHN0YXR1cywgcG9zOworCXNpemVfdCBsZW47CisJY2hhciAqaW1nOworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJY2hhciAqbmFtZSA9IHBhdGNoLT5uZXdfbmFtZTsKKwl1bnNpZ25lZCBtb2RlID0gcGF0Y2gtPm5ld19tb2RlOworCisJaWYgKCFwYXRjaC0+aXNfbmV3KQorCQlCVUcoInBhdGNoIHRvICVzIGlzIG5vdCBhIGNyZWF0aW9uIiwgcGF0Y2gtPm9sZF9uYW1lKTsKKworCXBvcyA9IGluZGV4X25hbWVfcG9zKHN0YXRlLT5yZXBvLT5pbmRleCwgbmFtZSwgc3RybGVuKG5hbWUpKTsKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIpLCBuYW1lKTsKKwljZSA9IHN0YXRlLT5yZXBvLT5pbmRleC0+Y2FjaGVbcG9zXTsKKwlpZiAobHN0YXQobmFtZSwgJnN0KSkgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJcmV0dXJuIGVycm9yX2Vycm5vKCIlcyIsIG5hbWUpOworCQlpZiAoY2hlY2tvdXRfdGFyZ2V0KHN0YXRlLT5yZXBvLT5pbmRleCwgY2UsICZzdCkpCisJCQlyZXR1cm4gLTE7CisJfQorCWlmICh2ZXJpZnlfaW5kZXhfbWF0Y2goc3RhdGUsIGNlLCAmc3QpKQorCQlyZXR1cm4gZXJyb3IoXygiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IiksIG5hbWUpOworCisJc3RhdHVzID0gbG9hZF9wYXRjaF90YXJnZXQoc3RhdGUsICZidWYsIGNlLCAmc3QsIHBhdGNoLCBuYW1lLCBtb2RlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKwllbHNlIGlmIChzdGF0dXMpCisJCXJldHVybiAtMTsKKwlpbWcgPSBzdHJidWZfZGV0YWNoKCZidWYsICZsZW4pOworCXByZXBhcmVfaW1hZ2UoaW1hZ2UsIGltZywgbGVuLCAhcGF0Y2gtPmlzX2JpbmFyeSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X3RocmVld2F5KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQlzdHJ1Y3QgaW1hZ2UgKmltYWdlLAorCQkJc3RydWN0IHBhdGNoICpwYXRjaCwKKwkJCXN0cnVjdCBzdGF0ICpzdCwKKwkJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJc3RydWN0IG9iamVjdF9pZCBwcmVfb2lkLCBwb3N0X29pZCwgb3VyX29pZDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXNpemVfdCBsZW47CisJaW50IHN0YXR1czsKKwljaGFyICppbWc7CisJc3RydWN0IGltYWdlIHRtcF9pbWFnZTsKKworCS8qIE5vIHBvaW50IGZhbGxpbmcgYmFjayB0byAzLXdheSBtZXJnZSBpbiB0aGVzZSBjYXNlcyAqLworCWlmIChwYXRjaC0+aXNfZGVsZXRlIHx8CisJICAgIFNfSVNHSVRMSU5LKHBhdGNoLT5vbGRfbW9kZSkgfHwgU19JU0dJVExJTksocGF0Y2gtPm5ld19tb2RlKSkKKwkJcmV0dXJuIC0xOworCisJLyogUHJlaW1hZ2UgdGhlIHBhdGNoIHdhcyBwcmVwYXJlZCBmb3IgKi8KKwlpZiAocGF0Y2gtPmlzX25ldykKKwkJd3JpdGVfb2JqZWN0X2ZpbGUoIiIsIDAsIGJsb2JfdHlwZSwgJnByZV9vaWQpOworCWVsc2UgaWYgKGdldF9vaWQocGF0Y2gtPm9sZF9vaWRfcHJlZml4LCAmcHJlX29pZCkgfHwKKwkJIHJlYWRfYmxvYl9vYmplY3QoJmJ1ZiwgJnByZV9vaWQsIHBhdGNoLT5vbGRfbW9kZSkpCisJCXJldHVybiBlcnJvcihfKCJyZXBvc2l0b3J5IGxhY2tzIHRoZSBuZWNlc3NhcnkgYmxvYiB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIikpOworCisJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPiB2ZXJib3NpdHlfc2lsZW50KQorCQlmcHJpbnRmKHN0ZGVyciwgXygiRmFsbGluZyBiYWNrIHRvIHRocmVlLXdheSBtZXJnZS4uLlxuIikpOworCisJaW1nID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmbGVuKTsKKwlwcmVwYXJlX2ltYWdlKCZ0bXBfaW1hZ2UsIGltZywgbGVuLCAxKTsKKwkvKiBBcHBseSB0aGUgcGF0Y2ggdG8gZ2V0IHRoZSBwb3N0IGltYWdlICovCisJaWYgKGFwcGx5X2ZyYWdtZW50cyhzdGF0ZSwgJnRtcF9pbWFnZSwgcGF0Y2gpIDwgMCkgeworCQljbGVhcl9pbWFnZSgmdG1wX2ltYWdlKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBwb3N0X29pZCBpcyB0aGVpcnMgKi8KKwl3cml0ZV9vYmplY3RfZmlsZSh0bXBfaW1hZ2UuYnVmLCB0bXBfaW1hZ2UubGVuLCBibG9iX3R5cGUsICZwb3N0X29pZCk7CisJY2xlYXJfaW1hZ2UoJnRtcF9pbWFnZSk7CisKKwkvKiBvdXJfb2lkIGlzIG91cnMgKi8KKwlpZiAocGF0Y2gtPmlzX25ldykgeworCQlpZiAobG9hZF9jdXJyZW50KHN0YXRlLCAmdG1wX2ltYWdlLCBwYXRjaCkpCisJCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IHJlYWQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgJyVzJyIpLAorCQkJCSAgICAgcGF0Y2gtPm5ld19uYW1lKTsKKwl9IGVsc2UgeworCQlpZiAobG9hZF9wcmVpbWFnZShzdGF0ZSwgJnRtcF9pbWFnZSwgcGF0Y2gsIHN0LCBjZSkpCisJCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IHJlYWQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgJyVzJyIpLAorCQkJCSAgICAgcGF0Y2gtPm9sZF9uYW1lKTsKKwl9CisJd3JpdGVfb2JqZWN0X2ZpbGUodG1wX2ltYWdlLmJ1ZiwgdG1wX2ltYWdlLmxlbiwgYmxvYl90eXBlLCAmb3VyX29pZCk7CisJY2xlYXJfaW1hZ2UoJnRtcF9pbWFnZSk7CisKKwkvKiBpbi1jb3JlIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIHBvc3QgYW5kIG91ciB1c2luZyBwcmUgYXMgYmFzZSAqLworCXN0YXR1cyA9IHRocmVlX3dheV9tZXJnZShzdGF0ZSwgaW1hZ2UsIHBhdGNoLT5uZXdfbmFtZSwKKwkJCQkgJnByZV9vaWQsICZvdXJfb2lkLCAmcG9zdF9vaWQpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWlmIChzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X3NpbGVudCkKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCV8oIkZhaWxlZCB0byBmYWxsIGJhY2sgb24gdGhyZWUtd2F5IG1lcmdlLi4uXG4iKSk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJaWYgKHN0YXR1cykgeworCQlwYXRjaC0+Y29uZmxpY3RlZF90aHJlZXdheSA9IDE7CisJCWlmIChwYXRjaC0+aXNfbmV3KQorCQkJb2lkY2xyKCZwYXRjaC0+dGhyZWV3YXlfc3RhZ2VbMF0pOworCQllbHNlCisJCQlvaWRjcHkoJnBhdGNoLT50aHJlZXdheV9zdGFnZVswXSwgJnByZV9vaWQpOworCQlvaWRjcHkoJnBhdGNoLT50aHJlZXdheV9zdGFnZVsxXSwgJm91cl9vaWQpOworCQlvaWRjcHkoJnBhdGNoLT50aHJlZXdheV9zdGFnZVsyXSwgJnBvc3Rfb2lkKTsKKwkJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPiB2ZXJib3NpdHlfc2lsZW50KQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJXygiQXBwbGllZCBwYXRjaCB0byAnJXMnIHdpdGggY29uZmxpY3RzLlxuIiksCisJCQkJcGF0Y2gtPm5ld19uYW1lKTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA+IHZlcmJvc2l0eV9zaWxlbnQpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJBcHBsaWVkIHBhdGNoIHRvICclcycgY2xlYW5seS5cbiIpLAorCQkJCXBhdGNoLT5uZXdfbmFtZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwcGx5X2RhdGEoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwYXRjaCwKKwkJICAgICAgc3RydWN0IHN0YXQgKnN0LCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCXN0cnVjdCBpbWFnZSBpbWFnZTsKKworCWlmIChsb2FkX3ByZWltYWdlKHN0YXRlLCAmaW1hZ2UsIHBhdGNoLCBzdCwgY2UpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHBhdGNoLT5kaXJlY3RfdG9fdGhyZWV3YXkgfHwKKwkgICAgYXBwbHlfZnJhZ21lbnRzKHN0YXRlLCAmaW1hZ2UsIHBhdGNoKSA8IDApIHsKKwkJLyogTm90ZTogd2l0aCAtLXJlamVjdCwgYXBwbHlfZnJhZ21lbnRzKCkgcmV0dXJucyAwICovCisJCWlmICghc3RhdGUtPnRocmVld2F5IHx8IHRyeV90aHJlZXdheShzdGF0ZSwgJmltYWdlLCBwYXRjaCwgc3QsIGNlKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCXBhdGNoLT5yZXN1bHQgPSBpbWFnZS5idWY7CisJcGF0Y2gtPnJlc3VsdHNpemUgPSBpbWFnZS5sZW47CisJYWRkX3RvX2ZuX3RhYmxlKHN0YXRlLCBwYXRjaCk7CisJZnJlZShpbWFnZS5saW5lX2FsbG9jYXRlZCk7CisKKwlpZiAoMCA8IHBhdGNoLT5pc19kZWxldGUgJiYgcGF0Y2gtPnJlc3VsdHNpemUpCisJCXJldHVybiBlcnJvcihfKCJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIikpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJZiAicGF0Y2giIHRoYXQgd2UgYXJlIGxvb2tpbmcgYXQgbW9kaWZpZXMgb3IgZGVsZXRlcyB3aGF0IHdlIGhhdmUsCisgKiB3ZSB3b3VsZCB3YW50IGl0IG5vdCB0byBsb3NlIGFueSBsb2NhbCBtb2RpZmljYXRpb24gd2UgaGF2ZSwgZWl0aGVyCisgKiBpbiB0aGUgd29ya2luZyB0cmVlIG9yIGluIHRoZSBpbmRleC4KKyAqCisgKiBUaGlzIGFsc28gZGVjaWRlcyBpZiBhIG5vbi1naXQgcGF0Y2ggaXMgYSBjcmVhdGlvbiBwYXRjaCBvciBhCisgKiBtb2RpZmljYXRpb24gdG8gYW4gZXhpc3RpbmcgZW1wdHkgZmlsZS4gIFdlIGRvIG5vdCBjaGVjayB0aGUgc3RhdGUKKyAqIG9mIHRoZSBjdXJyZW50IHRyZWUgZm9yIGEgY3JlYXRpb24gcGF0Y2ggaW4gdGhpcyBmdW5jdGlvbjsgdGhlIGNhbGxlcgorICogY2hlY2tfcGF0Y2goKSBzZXBhcmF0ZWx5IG1ha2VzIHN1cmUgKGFuZCBlcnJvcnMgb3V0IG90aGVyd2lzZSkgdGhhdAorICogdGhlIHBhdGggdGhlIHBhdGNoIGNyZWF0ZXMgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgdHJlZS4KKyAqLworc3RhdGljIGludCBjaGVja19wcmVpbWFnZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoLAorCQkJICBzdHJ1Y3QgY2FjaGVfZW50cnkgKipjZSwKKwkJCSAgc3RydWN0IHN0YXQgKnN0KQoreworCWNvbnN0IGNoYXIgKm9sZF9uYW1lID0gcGF0Y2gtPm9sZF9uYW1lOworCXN0cnVjdCBwYXRjaCAqcHJldmlvdXMgPSBOVUxMOworCWludCBzdGF0X3JldCA9IDAsIHN0YXR1czsKKwl1bnNpZ25lZCBzdF9tb2RlID0gMDsKKworCWlmICghb2xkX25hbWUpCisJCXJldHVybiAwOworCisJYXNzZXJ0KHBhdGNoLT5pc19uZXcgPD0gMCk7CisJcHJldmlvdXMgPSBwcmV2aW91c19wYXRjaChzdGF0ZSwgcGF0Y2gsICZzdGF0dXMpOworCisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIiksIG9sZF9uYW1lKTsKKwlpZiAocHJldmlvdXMpIHsKKwkJc3RfbW9kZSA9IHByZXZpb3VzLT5uZXdfbW9kZTsKKwl9IGVsc2UgaWYgKCFzdGF0ZS0+Y2FjaGVkKSB7CisJCXN0YXRfcmV0ID0gbHN0YXQob2xkX25hbWUsIHN0KTsKKwkJaWYgKHN0YXRfcmV0ICYmIGVycm5vICE9IEVOT0VOVCkKKwkJCXJldHVybiBlcnJvcl9lcnJubygiJXMiLCBvbGRfbmFtZSk7CisJfQorCisJaWYgKHN0YXRlLT5jaGVja19pbmRleCAmJiAhcHJldmlvdXMpIHsKKwkJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKHN0YXRlLT5yZXBvLT5pbmRleCwgb2xkX25hbWUsCisJCQkJCSBzdHJsZW4ob2xkX25hbWUpKTsKKwkJaWYgKHBvcyA8IDApIHsKKwkJCWlmIChwYXRjaC0+aXNfbmV3IDwgMCkKKwkJCQlnb3RvIGlzX25ldzsKKwkJCXJldHVybiBlcnJvcihfKCIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiKSwgb2xkX25hbWUpOworCQl9CisJCSpjZSA9IHN0YXRlLT5yZXBvLT5pbmRleC0+Y2FjaGVbcG9zXTsKKwkJaWYgKHN0YXRfcmV0IDwgMCkgeworCQkJaWYgKGNoZWNrb3V0X3RhcmdldChzdGF0ZS0+cmVwby0+aW5kZXgsICpjZSwgc3QpKQorCQkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoIXN0YXRlLT5jYWNoZWQgJiYgdmVyaWZ5X2luZGV4X21hdGNoKHN0YXRlLCAqY2UsIHN0KSkKKwkJCXJldHVybiBlcnJvcihfKCIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiKSwgb2xkX25hbWUpOworCQlpZiAoc3RhdGUtPmNhY2hlZCkKKwkJCXN0X21vZGUgPSAoKmNlKS0+Y2VfbW9kZTsKKwl9IGVsc2UgaWYgKHN0YXRfcmV0IDwgMCkgeworCQlpZiAocGF0Y2gtPmlzX25ldyA8IDApCisJCQlnb3RvIGlzX25ldzsKKwkJcmV0dXJuIGVycm9yX2Vycm5vKCIlcyIsIG9sZF9uYW1lKTsKKwl9CisKKwlpZiAoIXN0YXRlLT5jYWNoZWQgJiYgIXByZXZpb3VzKQorCQlzdF9tb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoKmNlLCBzdC0+c3RfbW9kZSk7CisKKwlpZiAocGF0Y2gtPmlzX25ldyA8IDApCisJCXBhdGNoLT5pc19uZXcgPSAwOworCWlmICghcGF0Y2gtPm9sZF9tb2RlKQorCQlwYXRjaC0+b2xkX21vZGUgPSBzdF9tb2RlOworCWlmICgoc3RfbW9kZSBeIHBhdGNoLT5vbGRfbW9kZSkgJiBTX0lGTVQpCisJCXJldHVybiBlcnJvcihfKCIlczogd3JvbmcgdHlwZSIpLCBvbGRfbmFtZSk7CisJaWYgKHN0X21vZGUgIT0gcGF0Y2gtPm9sZF9tb2RlKQorCQl3YXJuaW5nKF8oIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIpLAorCQkJb2xkX25hbWUsIHN0X21vZGUsIHBhdGNoLT5vbGRfbW9kZSk7CisJaWYgKCFwYXRjaC0+bmV3X21vZGUgJiYgIXBhdGNoLT5pc19kZWxldGUpCisJCXBhdGNoLT5uZXdfbW9kZSA9IHN0X21vZGU7CisJcmV0dXJuIDA7CisKKyBpc19uZXc6CisJcGF0Y2gtPmlzX25ldyA9IDE7CisJcGF0Y2gtPmlzX2RlbGV0ZSA9IDA7CisJRlJFRV9BTkRfTlVMTChwYXRjaC0+b2xkX25hbWUpOworCXJldHVybiAwOworfQorCisKKyNkZWZpbmUgRVhJU1RTX0lOX0lOREVYIDEKKyNkZWZpbmUgRVhJU1RTX0lOX1dPUktUUkVFIDIKKworc3RhdGljIGludCBjaGVja190b19jcmVhdGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKm5ld19uYW1lLAorCQkJICAgaW50IG9rX2lmX2V4aXN0cykKK3sKKwlzdHJ1Y3Qgc3RhdCBuc3Q7CisKKwlpZiAoc3RhdGUtPmNoZWNrX2luZGV4ICYmCisJICAgIGluZGV4X25hbWVfcG9zKHN0YXRlLT5yZXBvLT5pbmRleCwgbmV3X25hbWUsIHN0cmxlbihuZXdfbmFtZSkpID49IDAgJiYKKwkgICAgIW9rX2lmX2V4aXN0cykKKwkJcmV0dXJuIEVYSVNUU19JTl9JTkRFWDsKKwlpZiAoc3RhdGUtPmNhY2hlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWxzdGF0KG5ld19uYW1lLCAmbnN0KSkgeworCQlpZiAoU19JU0RJUihuc3Quc3RfbW9kZSkgfHwgb2tfaWZfZXhpc3RzKQorCQkJcmV0dXJuIDA7CisJCS8qCisJCSAqIEEgbGVhZGluZyBjb21wb25lbnQgb2YgbmV3X25hbWUgbWlnaHQgYmUgYSBzeW1saW5rCisJCSAqIHRoYXQgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZCB3aXRoIHRoaXMgcGF0Y2gsIGJ1dAorCQkgKiBzdGlsbCBwb2ludGluZyBhdCBzb21ld2hlcmUgdGhhdCBoYXMgdGhlIHBhdGguCisJCSAqIEluIHN1Y2ggYSBjYXNlLCBwYXRoICJuZXdfbmFtZSIgZG9lcyBub3QgZXhpc3QgYXMKKwkJICogZmFyIGFzIGdpdCBpcyBjb25jZXJuZWQuCisJCSAqLworCQlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKG5ld19uYW1lLCBzdHJsZW4obmV3X25hbWUpKSkKKwkJCXJldHVybiAwOworCisJCXJldHVybiBFWElTVFNfSU5fV09SS1RSRUU7CisJfSBlbHNlIGlmICghaXNfbWlzc2luZ19maWxlX2Vycm9yKGVycm5vKSkgeworCQlyZXR1cm4gZXJyb3JfZXJybm8oIiVzIiwgbmV3X25hbWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnRwdHJfdCByZWdpc3Rlcl9zeW1saW5rX2NoYW5nZXMoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCQkJICBjb25zdCBjaGFyICpwYXRoLAorCQkJCQkgIHVpbnRwdHJfdCB3aGF0KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICplbnQ7CisKKwllbnQgPSBzdHJpbmdfbGlzdF9sb29rdXAoJnN0YXRlLT5zeW1saW5rX2NoYW5nZXMsIHBhdGgpOworCWlmICghZW50KSB7CisJCWVudCA9IHN0cmluZ19saXN0X2luc2VydCgmc3RhdGUtPnN5bWxpbmtfY2hhbmdlcywgcGF0aCk7CisJCWVudC0+dXRpbCA9ICh2b2lkICopMDsKKwl9CisJZW50LT51dGlsID0gKHZvaWQgKikod2hhdCB8ICgodWludHB0cl90KWVudC0+dXRpbCkpOworCXJldHVybiAodWludHB0cl90KWVudC0+dXRpbDsKK30KKworc3RhdGljIHVpbnRwdHJfdCBjaGVja19zeW1saW5rX2NoYW5nZXMoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqZW50OworCisJZW50ID0gc3RyaW5nX2xpc3RfbG9va3VwKCZzdGF0ZS0+c3ltbGlua19jaGFuZ2VzLCBwYXRoKTsKKwlpZiAoIWVudCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICh1aW50cHRyX3QpZW50LT51dGlsOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3N5bWxpbmtfY2hhbmdlcyhzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCWZvciAoIDsgcGF0Y2g7IHBhdGNoID0gcGF0Y2gtPm5leHQpIHsKKwkJaWYgKChwYXRjaC0+b2xkX25hbWUgJiYgU19JU0xOSyhwYXRjaC0+b2xkX21vZGUpKSAmJgorCQkgICAgKHBhdGNoLT5pc19yZW5hbWUgfHwgcGF0Y2gtPmlzX2RlbGV0ZSkpCisJCQkvKiB0aGUgc3ltbGluayBhdCBwYXRjaC0+b2xkX25hbWUgaXMgcmVtb3ZlZCAqLworCQkJcmVnaXN0ZXJfc3ltbGlua19jaGFuZ2VzKHN0YXRlLCBwYXRjaC0+b2xkX25hbWUsIEFQUExZX1NZTUxJTktfR09FU19BV0FZKTsKKworCQlpZiAocGF0Y2gtPm5ld19uYW1lICYmIFNfSVNMTksocGF0Y2gtPm5ld19tb2RlKSkKKwkJCS8qIHRoZSBzeW1saW5rIGF0IHBhdGNoLT5uZXdfbmFtZSBpcyBjcmVhdGVkIG9yIHJlbWFpbnMgKi8KKwkJCXJlZ2lzdGVyX3N5bWxpbmtfY2hhbmdlcyhzdGF0ZSwgcGF0Y2gtPm5ld19uYW1lLCBBUFBMWV9TWU1MSU5LX0lOX1JFU1VMVCk7CisJfQorfQorCitzdGF0aWMgaW50IHBhdGhfaXNfYmV5b25kX3N5bWxpbmtfMShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3Qgc3RyYnVmICpuYW1lKQoreworCWRvIHsKKwkJdW5zaWduZWQgaW50IGNoYW5nZTsKKworCQl3aGlsZSAoLS1uYW1lLT5sZW4gJiYgbmFtZS0+YnVmW25hbWUtPmxlbl0gIT0gJy8nKQorCQkJOyAvKiBzY2FuIGJhY2t3YXJkcyAqLworCQlpZiAoIW5hbWUtPmxlbikKKwkJCWJyZWFrOworCQluYW1lLT5idWZbbmFtZS0+bGVuXSA9ICdcMCc7CisJCWNoYW5nZSA9IGNoZWNrX3N5bWxpbmtfY2hhbmdlcyhzdGF0ZSwgbmFtZS0+YnVmKTsKKwkJaWYgKGNoYW5nZSAmIEFQUExZX1NZTUxJTktfSU5fUkVTVUxUKQorCQkJcmV0dXJuIDE7CisJCWlmIChjaGFuZ2UgJiBBUFBMWV9TWU1MSU5LX0dPRVNfQVdBWSkKKwkJCS8qCisJCQkgKiBUaGlzIGNhbm5vdCBiZSAicmV0dXJuIDAiLCBiZWNhdXNlIHdlIG1heQorCQkJICogc2VlIGEgbmV3IG9uZSBjcmVhdGVkIGF0IGEgaGlnaGVyIGxldmVsLgorCQkJICovCisJCQljb250aW51ZTsKKworCQkvKiBvdGhlcndpc2UsIGNoZWNrIHRoZSBwcmVpbWFnZSAqLworCQlpZiAoc3RhdGUtPmNoZWNrX2luZGV4KSB7CisJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJCQljZSA9IGluZGV4X2ZpbGVfZXhpc3RzKHN0YXRlLT5yZXBvLT5pbmRleCwgbmFtZS0+YnVmLAorCQkJCQkgICAgICAgbmFtZS0+bGVuLCBpZ25vcmVfY2FzZSk7CisJCQlpZiAoY2UgJiYgU19JU0xOSyhjZS0+Y2VfbW9kZSkpCisJCQkJcmV0dXJuIDE7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJCWlmICghbHN0YXQobmFtZS0+YnVmLCAmc3QpICYmIFNfSVNMTksoc3Quc3RfbW9kZSkpCisJCQkJcmV0dXJuIDE7CisJCX0KKwl9IHdoaWxlICgxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXRoX2lzX2JleW9uZF9zeW1saW5rKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm5hbWVfKQoreworCWludCByZXQ7CisJc3RydWN0IHN0cmJ1ZiBuYW1lID0gU1RSQlVGX0lOSVQ7CisKKwlhc3NlcnQoKm5hbWVfICE9ICdcMCcpOworCXN0cmJ1Zl9hZGRzdHIoJm5hbWUsIG5hbWVfKTsKKwlyZXQgPSBwYXRoX2lzX2JleW9uZF9zeW1saW5rXzEoc3RhdGUsICZuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNoZWNrX3Vuc2FmZV9wYXRoKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJY29uc3QgY2hhciAqb2xkX25hbWUgPSBOVUxMOworCWNvbnN0IGNoYXIgKm5ld19uYW1lID0gTlVMTDsKKwlpZiAocGF0Y2gtPmlzX2RlbGV0ZSkKKwkJb2xkX25hbWUgPSBwYXRjaC0+b2xkX25hbWU7CisJZWxzZSBpZiAoIXBhdGNoLT5pc19uZXcgJiYgIXBhdGNoLT5pc19jb3B5KQorCQlvbGRfbmFtZSA9IHBhdGNoLT5vbGRfbmFtZTsKKwlpZiAoIXBhdGNoLT5pc19kZWxldGUpCisJCW5ld19uYW1lID0gcGF0Y2gtPm5ld19uYW1lOworCisJaWYgKG9sZF9uYW1lICYmICF2ZXJpZnlfcGF0aChvbGRfbmFtZSwgcGF0Y2gtPm9sZF9tb2RlKSkKKwkJcmV0dXJuIGVycm9yKF8oImludmFsaWQgcGF0aCAnJXMnIiksIG9sZF9uYW1lKTsKKwlpZiAobmV3X25hbWUgJiYgIXZlcmlmeV9wYXRoKG5ld19uYW1lLCBwYXRjaC0+bmV3X21vZGUpKQorCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCBwYXRoICclcyciKSwgbmV3X25hbWUpOworCXJldHVybiAwOworfQorCisvKgorICogQ2hlY2sgYW5kIGFwcGx5IHRoZSBwYXRjaCBpbi1jb3JlOyBsZWF2ZSB0aGUgcmVzdWx0IGluIHBhdGNoLT5yZXN1bHQKKyAqIGZvciB0aGUgY2FsbGVyIHRvIHdyaXRlIGl0IG91dCB0byB0aGUgZmluYWwgZGVzdGluYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfcGF0Y2goc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljb25zdCBjaGFyICpvbGRfbmFtZSA9IHBhdGNoLT5vbGRfbmFtZTsKKwljb25zdCBjaGFyICpuZXdfbmFtZSA9IHBhdGNoLT5uZXdfbmFtZTsKKwljb25zdCBjaGFyICpuYW1lID0gb2xkX25hbWUgPyBvbGRfbmFtZSA6IG5ld19uYW1lOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBOVUxMOworCXN0cnVjdCBwYXRjaCAqdHBhdGNoOworCWludCBva19pZl9leGlzdHM7CisJaW50IHN0YXR1czsKKworCXBhdGNoLT5yZWplY3RlZCA9IDE7IC8qIHdlIHdpbGwgZHJvcCB0aGlzIGFmdGVyIHdlIHN1Y2NlZWQgKi8KKworCXN0YXR1cyA9IGNoZWNrX3ByZWltYWdlKHN0YXRlLCBwYXRjaCwgJmNlLCAmc3QpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJb2xkX25hbWUgPSBwYXRjaC0+b2xkX25hbWU7CisKKwkvKgorCSAqIEEgdHlwZS1jaGFuZ2UgZGlmZiBpcyBhbHdheXMgc3BsaXQgaW50byBhIHBhdGNoIHRvIGRlbGV0ZQorCSAqIG9sZCwgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBwYXRjaCB0byBjcmVhdGUgbmV3IChzZWUKKwkgKiBkaWZmLmM6OnJ1bl9kaWZmKCkpOyBpbiBzdWNoIGEgY2FzZSBpdCBpcyBPayB0aGF0IHRoZSBlbnRyeQorCSAqIHRvIGJlIGRlbGV0ZWQgYnkgdGhlIHByZXZpb3VzIHBhdGNoIGlzIHN0aWxsIGluIHRoZSB3b3JraW5nCisJICogdHJlZSBhbmQgaW4gdGhlIGluZGV4LgorCSAqCisJICogQSBwYXRjaCB0byBzd2FwLXJlbmFtZSBiZXR3ZWVuIEEgYW5kIEIgd291bGQgZmlyc3QgcmVuYW1lIEEKKwkgKiB0byBCIGFuZCB0aGVuIHJlbmFtZSBCIHRvIEEuICBXaGlsZSBhcHBseWluZyB0aGUgZmlyc3Qgb25lLAorCSAqIHRoZSBwcmVzZW5jZSBvZiBCIHNob3VsZCBub3Qgc3RvcCBBIGZyb20gZ2V0dGluZyByZW5hbWVkIHRvCisJICogQjsgYXNrIHRvX2JlX2RlbGV0ZWQoKSBhYm91dCB0aGUgbGF0ZXIgcmVuYW1lLiAgUmVtb3ZhbCBvZgorCSAqIEIgYW5kIHJlbmFtZSBmcm9tIEEgdG8gQiBpcyBoYW5kbGVkIHRoZSBzYW1lIHdheSBieSBhc2tpbmcKKwkgKiB3YXNfZGVsZXRlZCgpLgorCSAqLworCWlmICgodHBhdGNoID0gaW5fZm5fdGFibGUoc3RhdGUsIG5ld19uYW1lKSkgJiYKKwkgICAgKHdhc19kZWxldGVkKHRwYXRjaCkgfHwgdG9fYmVfZGVsZXRlZCh0cGF0Y2gpKSkKKwkJb2tfaWZfZXhpc3RzID0gMTsKKwllbHNlCisJCW9rX2lmX2V4aXN0cyA9IDA7CisKKwlpZiAobmV3X25hbWUgJiYKKwkgICAgKCgwIDwgcGF0Y2gtPmlzX25ldykgfHwgcGF0Y2gtPmlzX3JlbmFtZSB8fCBwYXRjaC0+aXNfY29weSkpIHsKKwkJaW50IGVyciA9IGNoZWNrX3RvX2NyZWF0ZShzdGF0ZSwgbmV3X25hbWUsIG9rX2lmX2V4aXN0cyk7CisKKwkJaWYgKGVyciAmJiBzdGF0ZS0+dGhyZWV3YXkpIHsKKwkJCXBhdGNoLT5kaXJlY3RfdG9fdGhyZWV3YXkgPSAxOworCQl9IGVsc2Ugc3dpdGNoIChlcnIpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7IC8qIGhhcHB5ICovCisJCWNhc2UgRVhJU1RTX0lOX0lOREVYOgorCQkJcmV0dXJuIGVycm9yKF8oIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIpLCBuZXdfbmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSBFWElTVFNfSU5fV09SS1RSRUU6CisJCQlyZXR1cm4gZXJyb3IoXygiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IiksCisJCQkJICAgICBuZXdfbmFtZSk7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJaWYgKCFwYXRjaC0+bmV3X21vZGUpIHsKKwkJCWlmICgwIDwgcGF0Y2gtPmlzX25ldykKKwkJCQlwYXRjaC0+bmV3X21vZGUgPSBTX0lGUkVHIHwgMDY0NDsKKwkJCWVsc2UKKwkJCQlwYXRjaC0+bmV3X21vZGUgPSBwYXRjaC0+b2xkX21vZGU7CisJCX0KKwl9CisKKwlpZiAobmV3X25hbWUgJiYgb2xkX25hbWUpIHsKKwkJaW50IHNhbWUgPSAhc3RyY21wKG9sZF9uYW1lLCBuZXdfbmFtZSk7CisJCWlmICghcGF0Y2gtPm5ld19tb2RlKQorCQkJcGF0Y2gtPm5ld19tb2RlID0gcGF0Y2gtPm9sZF9tb2RlOworCQlpZiAoKHBhdGNoLT5vbGRfbW9kZSBeIHBhdGNoLT5uZXdfbW9kZSkgJiBTX0lGTVQpIHsKKwkJCWlmIChzYW1lKQorCQkJCXJldHVybiBlcnJvcihfKCJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90ICIKKwkJCQkJICAgICAgICJtYXRjaCBvbGQgbW9kZSAoJW8pIiksCisJCQkJCXBhdGNoLT5uZXdfbW9kZSwgbmV3X25hbWUsCisJCQkJCXBhdGNoLT5vbGRfbW9kZSk7CisJCQllbHNlCisJCQkJcmV0dXJuIGVycm9yKF8oIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgIgorCQkJCQkgICAgICAgIm1hdGNoIG9sZCBtb2RlICglbykgb2YgJXMiKSwKKwkJCQkJcGF0Y2gtPm5ld19tb2RlLCBuZXdfbmFtZSwKKwkJCQkJcGF0Y2gtPm9sZF9tb2RlLCBvbGRfbmFtZSk7CisJCX0KKwl9CisKKwlpZiAoIXN0YXRlLT51bnNhZmVfcGF0aHMgJiYgY2hlY2tfdW5zYWZlX3BhdGgocGF0Y2gpKQorCQlyZXR1cm4gLTEyODsKKworCS8qCisJICogQW4gYXR0ZW1wdCB0byByZWFkIGZyb20gb3IgZGVsZXRlIGEgcGF0aCB0aGF0IGlzIGJleW9uZCBhCisJICogc3ltYm9saWMgbGluayB3aWxsIGJlIHByZXZlbnRlZCBieSBsb2FkX3BhdGNoX3RhcmdldCgpIHRoYXQKKwkgKiBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhcHBseV9kYXRhKCkgc28gd2UgZG8gbm90CisJICogaGF2ZSB0byB3b3JyeSBhYm91dCBhIHBhdGNoIG1hcmtlZCB3aXRoICJpc19kZWxldGUiIGJpdAorCSAqIGhlcmUuICBXZSBob3dldmVyIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHBhdGNoIHJlc3VsdAorCSAqIGlzIG5vdCBkZXBvc2l0ZWQgdG8gYSBwYXRoIHRoYXQgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluaworCSAqIGhlcmUuCisJICovCisJaWYgKCFwYXRjaC0+aXNfZGVsZXRlICYmIHBhdGhfaXNfYmV5b25kX3N5bWxpbmsoc3RhdGUsIHBhdGNoLT5uZXdfbmFtZSkpCisJCXJldHVybiBlcnJvcihfKCJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIpLAorCQkJICAgICBwYXRjaC0+bmV3X25hbWUpOworCisJaWYgKGFwcGx5X2RhdGEoc3RhdGUsIHBhdGNoLCAmc3QsIGNlKSA8IDApCisJCXJldHVybiBlcnJvcihfKCIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiKSwgbmFtZSk7CisJcGF0Y2gtPnJlamVjdGVkID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19wYXRjaF9saXN0KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJaW50IGVyciA9IDA7CisKKwlwcmVwYXJlX3N5bWxpbmtfY2hhbmdlcyhzdGF0ZSwgcGF0Y2gpOworCXByZXBhcmVfZm5fdGFibGUoc3RhdGUsIHBhdGNoKTsKKwl3aGlsZSAocGF0Y2gpIHsKKwkJaW50IHJlczsKKwkJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPiB2ZXJib3NpdHlfbm9ybWFsKQorCQkJc2F5X3BhdGNoX25hbWUoc3RkZXJyLAorCQkJCSAgICAgICBfKCJDaGVja2luZyBwYXRjaCAlcy4uLiIpLCBwYXRjaCk7CisJCXJlcyA9IGNoZWNrX3BhdGNoKHN0YXRlLCBwYXRjaCk7CisJCWlmIChyZXMgPT0gLTEyOCkKKwkJCXJldHVybiAtMTI4OworCQllcnIgfD0gcmVzOworCQlwYXRjaCA9IHBhdGNoLT5uZXh0OworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHJlYWRfYXBwbHlfY2FjaGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoc3RhdGUtPmluZGV4X2ZpbGUpCisJCXJldHVybiByZWFkX2luZGV4X2Zyb20oc3RhdGUtPnJlcG8tPmluZGV4LCBzdGF0ZS0+aW5kZXhfZmlsZSwKKwkJCQkgICAgICAgZ2V0X2dpdF9kaXIoKSk7CisJZWxzZQorCQlyZXR1cm4gcmVwb19yZWFkX2luZGV4KHN0YXRlLT5yZXBvKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiB0cmllcyB0byByZWFkIHRoZSBvYmplY3QgbmFtZSBmcm9tIHRoZSBjdXJyZW50IGluZGV4ICovCitzdGF0aWMgaW50IGdldF9jdXJyZW50X29pZChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWludCBwb3M7CisKKwlpZiAocmVhZF9hcHBseV9jYWNoZShzdGF0ZSkgPCAwKQorCQlyZXR1cm4gLTE7CisJcG9zID0gaW5kZXhfbmFtZV9wb3Moc3RhdGUtPnJlcG8tPmluZGV4LCBwYXRoLCBzdHJsZW4ocGF0aCkpOworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gLTE7CisJb2lkY3B5KG9pZCwgJnN0YXRlLT5yZXBvLT5pbmRleC0+Y2FjaGVbcG9zXS0+b2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcmVpbWFnZV9vaWRfaW5fZ2l0bGlua19wYXRjaChzdHJ1Y3QgcGF0Y2ggKnAsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwkvKgorCSAqIEEgdXNhYmxlIGdpdGxpbmsgcGF0Y2ggaGFzIG9ubHkgb25lIGZyYWdtZW50IChodW5rKSB0aGF0IGxvb2tzIGxpa2U6CisJICogQEAgLTEgKzEgQEAKKwkgKiAtU3VicHJvamVjdCBjb21taXQgPG9sZCBzaGExPgorCSAqICtTdWJwcm9qZWN0IGNvbW1pdCA8bmV3IHNoYTE+CisJICogb3IKKwkgKiBAQCAtMSArMCwwIEBACisJICogLVN1YnByb2plY3QgY29tbWl0IDxvbGQgc2hhMT4KKwkgKiBmb3IgYSByZW1vdmFsIHBhdGNoLgorCSAqLworCXN0cnVjdCBmcmFnbWVudCAqaHVuayA9IHAtPmZyYWdtZW50czsKKwlzdGF0aWMgY29uc3QgY2hhciBoZWFkaW5nW10gPSAiLVN1YnByb2plY3QgY29tbWl0ICI7CisJY2hhciAqcHJlaW1hZ2U7CisKKwlpZiAoLyogZG9lcyB0aGUgcGF0Y2ggaGF2ZSBvbmx5IG9uZSBodW5rPyAqLworCSAgICBodW5rICYmICFodW5rLT5uZXh0ICYmCisJICAgIC8qIGlzIGl0cyBwcmVpbWFnZSBvbmUgbGluZT8gKi8KKwkgICAgaHVuay0+b2xkcG9zID09IDEgJiYgaHVuay0+b2xkbGluZXMgPT0gMSAmJgorCSAgICAvKiBkb2VzIHByZWltYWdlIGJlZ2luIHdpdGggdGhlIGhlYWRpbmc/ICovCisJICAgIChwcmVpbWFnZSA9IG1lbWNocihodW5rLT5wYXRjaCwgJ1xuJywgaHVuay0+c2l6ZSkpICE9IE5VTEwgJiYKKwkgICAgc3RhcnRzX3dpdGgoKytwcmVpbWFnZSwgaGVhZGluZykgJiYKKwkgICAgLyogZG9lcyBpdCByZWNvcmQgZnVsbCBTSEEtMT8gKi8KKwkgICAgIWdldF9vaWRfaGV4KHByZWltYWdlICsgc2l6ZW9mKGhlYWRpbmcpIC0gMSwgb2lkKSAmJgorCSAgICBwcmVpbWFnZVtzaXplb2YoaGVhZGluZykgKyB0aGVfaGFzaF9hbGdvLT5oZXhzeiAtIDFdID09ICdcbicgJiYKKwkgICAgLyogZG9lcyB0aGUgYWJicmV2aWF0ZWQgbmFtZSBvbiB0aGUgaW5kZXggbGluZSBhZ3JlZSB3aXRoIGl0PyAqLworCSAgICBzdGFydHNfd2l0aChwcmVpbWFnZSArIHNpemVvZihoZWFkaW5nKSAtIDEsIHAtPm9sZF9vaWRfcHJlZml4KSkKKwkJcmV0dXJuIDA7IC8qIGl0IGFsbCBsb29rcyBmaW5lICovCisKKwkvKiB3ZSBtYXkgaGF2ZSBmdWxsIG9iamVjdCBuYW1lIG9uIHRoZSBpbmRleCBsaW5lICovCisJcmV0dXJuIGdldF9vaWRfaGV4KHAtPm9sZF9vaWRfcHJlZml4LCBvaWQpOworfQorCisvKiBCdWlsZCBhbiBpbmRleCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIGZpbGVzIG5lZWRlZCBmb3IgYSAzd2F5IG1lcmdlICovCitzdGF0aWMgaW50IGJ1aWxkX2Zha2VfYW5jZXN0b3Ioc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpsaXN0KQoreworCXN0cnVjdCBwYXRjaCAqcGF0Y2g7CisJc3RydWN0IGluZGV4X3N0YXRlIHJlc3VsdCA9IHsgTlVMTCB9OworCXN0cnVjdCBsb2NrX2ZpbGUgbG9jayA9IExPQ0tfSU5JVDsKKwlpbnQgcmVzOworCisJLyogT25jZSB3ZSBzdGFydCBzdXBwb3J0aW5nIHRoZSByZXZlcnNlIHBhdGNoLCBpdCBtYXkgYmUKKwkgKiB3b3J0aCBzaG93aW5nIHRoZSBuZXcgc2hhMSBwcmVmaXgsIGJ1dCB1bnRpbCB0aGVuLi4uCisJICovCisJZm9yIChwYXRjaCA9IGxpc3Q7IHBhdGNoOyBwYXRjaCA9IHBhdGNoLT5uZXh0KSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCQljb25zdCBjaGFyICpuYW1lOworCisJCW5hbWUgPSBwYXRjaC0+b2xkX25hbWUgPyBwYXRjaC0+b2xkX25hbWUgOiBwYXRjaC0+bmV3X25hbWU7CisJCWlmICgwIDwgcGF0Y2gtPmlzX25ldykKKwkJCWNvbnRpbnVlOworCisJCWlmIChTX0lTR0lUTElOSyhwYXRjaC0+b2xkX21vZGUpKSB7CisJCQlpZiAoIXByZWltYWdlX29pZF9pbl9naXRsaW5rX3BhdGNoKHBhdGNoLCAmb2lkKSkKKwkJCQk7IC8qIG9rLCB0aGUgdGV4dHVhbCBwYXJ0IGxvb2tzIHNhbmUgKi8KKwkJCWVsc2UKKwkJCQlyZXR1cm4gZXJyb3IoXygic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yICIKKwkJCQkJICAgICAgICJ1c2VsZXNzIGZvciBzdWJtb2R1bGUgJXMiKSwgbmFtZSk7CisJCX0gZWxzZSBpZiAoIWdldF9vaWRfYmxvYihwYXRjaC0+b2xkX29pZF9wcmVmaXgsICZvaWQpKSB7CisJCQk7IC8qIG9rICovCisJCX0gZWxzZSBpZiAoIXBhdGNoLT5saW5lc19hZGRlZCAmJiAhcGF0Y2gtPmxpbmVzX2RlbGV0ZWQpIHsKKwkJCS8qIG1vZGUtb25seSBjaGFuZ2U6IHVwZGF0ZSB0aGUgY3VycmVudCAqLworCQkJaWYgKGdldF9jdXJyZW50X29pZChzdGF0ZSwgcGF0Y2gtPm9sZF9uYW1lLCAmb2lkKSkKKwkJCQlyZXR1cm4gZXJyb3IoXygibW9kZSBjaGFuZ2UgZm9yICVzLCB3aGljaCBpcyBub3QgIgorCQkJCQkgICAgICAgImluIGN1cnJlbnQgSEVBRCIpLCBuYW1lKTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gZXJyb3IoXygic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgIgorCQkJCSAgICAgICAiKCVzKS4iKSwgbmFtZSk7CisKKwkJY2UgPSBtYWtlX2NhY2hlX2VudHJ5KCZyZXN1bHQsIHBhdGNoLT5vbGRfbW9kZSwgJm9pZCwgbmFtZSwgMCwgMCk7CisJCWlmICghY2UpCisJCQlyZXR1cm4gZXJyb3IoXygibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIpLAorCQkJCSAgICAgbmFtZSk7CisJCWlmIChhZGRfaW5kZXhfZW50cnkoJnJlc3VsdCwgY2UsIEFERF9DQUNIRV9PS19UT19BREQpKSB7CisJCQlkaXNjYXJkX2NhY2hlX2VudHJ5KGNlKTsKKwkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIpLAorCQkJCSAgICAgbmFtZSk7CisJCX0KKwl9CisKKwlob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2NrLCBzdGF0ZS0+ZmFrZV9hbmNlc3RvciwgTE9DS19ESUVfT05fRVJST1IpOworCXJlcyA9IHdyaXRlX2xvY2tlZF9pbmRleCgmcmVzdWx0LCAmbG9jaywgQ09NTUlUX0xPQ0spOworCWRpc2NhcmRfaW5kZXgoJnJlc3VsdCk7CisKKwlpZiAocmVzKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHdyaXRlIHRlbXBvcmFyeSBpbmRleCB0byAlcyIpLAorCQkJICAgICBzdGF0ZS0+ZmFrZV9hbmNlc3Rvcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RhdF9wYXRjaF9saXN0KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJaW50IGZpbGVzLCBhZGRzLCBkZWxzOworCisJZm9yIChmaWxlcyA9IGFkZHMgPSBkZWxzID0gMCA7IHBhdGNoIDsgcGF0Y2ggPSBwYXRjaC0+bmV4dCkgeworCQlmaWxlcysrOworCQlhZGRzICs9IHBhdGNoLT5saW5lc19hZGRlZDsKKwkJZGVscyArPSBwYXRjaC0+bGluZXNfZGVsZXRlZDsKKwkJc2hvd19zdGF0cyhzdGF0ZSwgcGF0Y2gpOworCX0KKworCXByaW50X3N0YXRfc3VtbWFyeShzdGRvdXQsIGZpbGVzLCBhZGRzLCBkZWxzKTsKK30KKworc3RhdGljIHZvaWQgbnVtc3RhdF9wYXRjaF9saXN0KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgICAgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlmb3IgKCA7IHBhdGNoOyBwYXRjaCA9IHBhdGNoLT5uZXh0KSB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCW5hbWUgPSBwYXRjaC0+bmV3X25hbWUgPyBwYXRjaC0+bmV3X25hbWUgOiBwYXRjaC0+b2xkX25hbWU7CisJCWlmIChwYXRjaC0+aXNfYmluYXJ5KQorCQkJcHJpbnRmKCItXHQtXHQiKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlZFx0JWRcdCIsIHBhdGNoLT5saW5lc19hZGRlZCwgcGF0Y2gtPmxpbmVzX2RlbGV0ZWQpOworCQl3cml0ZV9uYW1lX3F1b3RlZChuYW1lLCBzdGRvdXQsIHN0YXRlLT5saW5lX3Rlcm1pbmF0aW9uKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZmlsZV9tb2RlX25hbWUoY29uc3QgY2hhciAqbmV3ZGVsZXRlLCB1bnNpZ25lZCBpbnQgbW9kZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAobW9kZSkKKwkJcHJpbnRmKCIgJXMgbW9kZSAlMDZvICVzXG4iLCBuZXdkZWxldGUsIG1vZGUsIG5hbWUpOworCWVsc2UKKwkJcHJpbnRmKCIgJXMgJXNcbiIsIG5ld2RlbGV0ZSwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbW9kZV9jaGFuZ2Uoc3RydWN0IHBhdGNoICpwLCBpbnQgc2hvd19uYW1lKQoreworCWlmIChwLT5vbGRfbW9kZSAmJiBwLT5uZXdfbW9kZSAmJiBwLT5vbGRfbW9kZSAhPSBwLT5uZXdfbW9kZSkgeworCQlpZiAoc2hvd19uYW1lKQorCQkJcHJpbnRmKCIgbW9kZSBjaGFuZ2UgJTA2byA9PiAlMDZvICVzXG4iLAorCQkJICAgICAgIHAtPm9sZF9tb2RlLCBwLT5uZXdfbW9kZSwgcC0+bmV3X25hbWUpOworCQllbHNlCisJCQlwcmludGYoIiBtb2RlIGNoYW5nZSAlMDZvID0+ICUwNm9cbiIsCisJCQkgICAgICAgcC0+b2xkX21vZGUsIHAtPm5ld19tb2RlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcmVuYW1lX2NvcHkoc3RydWN0IHBhdGNoICpwKQoreworCWNvbnN0IGNoYXIgKnJlbmFtZWNvcHkgPSBwLT5pc19yZW5hbWUgPyAicmVuYW1lIiA6ICJjb3B5IjsKKwljb25zdCBjaGFyICpvbGRfbmFtZSwgKm5ld19uYW1lOworCisJLyogRmluZCBjb21tb24gcHJlZml4ICovCisJb2xkX25hbWUgPSBwLT5vbGRfbmFtZTsKKwluZXdfbmFtZSA9IHAtPm5ld19uYW1lOworCXdoaWxlICgxKSB7CisJCWNvbnN0IGNoYXIgKnNsYXNoX29sZCwgKnNsYXNoX25ldzsKKwkJc2xhc2hfb2xkID0gc3RyY2hyKG9sZF9uYW1lLCAnLycpOworCQlzbGFzaF9uZXcgPSBzdHJjaHIobmV3X25hbWUsICcvJyk7CisJCWlmICghc2xhc2hfb2xkIHx8CisJCSAgICAhc2xhc2hfbmV3IHx8CisJCSAgICBzbGFzaF9vbGQgLSBvbGRfbmFtZSAhPSBzbGFzaF9uZXcgLSBuZXdfbmFtZSB8fAorCQkgICAgbWVtY21wKG9sZF9uYW1lLCBuZXdfbmFtZSwgc2xhc2hfbmV3IC0gbmV3X25hbWUpKQorCQkJYnJlYWs7CisJCW9sZF9uYW1lID0gc2xhc2hfb2xkICsgMTsKKwkJbmV3X25hbWUgPSBzbGFzaF9uZXcgKyAxOworCX0KKwkvKiBwLT5vbGRfbmFtZSB0aHJvdWdoIG9sZF9uYW1lIGlzIHRoZSBjb21tb24gcHJlZml4LCBhbmQgb2xkX25hbWUgYW5kCisJICogbmV3X25hbWUgdGhyb3VnaCB0aGUgZW5kIG9mIG5hbWVzIGFyZSByZW5hbWVzCisJICovCisJaWYgKG9sZF9uYW1lICE9IHAtPm9sZF9uYW1lKQorCQlwcmludGYoIiAlcyAlLipzeyVzID0+ICVzfSAoJWQlJSlcbiIsIHJlbmFtZWNvcHksCisJCSAgICAgICAoaW50KShvbGRfbmFtZSAtIHAtPm9sZF9uYW1lKSwgcC0+b2xkX25hbWUsCisJCSAgICAgICBvbGRfbmFtZSwgbmV3X25hbWUsIHAtPnNjb3JlKTsKKwllbHNlCisJCXByaW50ZigiICVzICVzID0+ICVzICglZCUlKVxuIiwgcmVuYW1lY29weSwKKwkJICAgICAgIHAtPm9sZF9uYW1lLCBwLT5uZXdfbmFtZSwgcC0+c2NvcmUpOworCXNob3dfbW9kZV9jaGFuZ2UocCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHN1bW1hcnlfcGF0Y2hfbGlzdChzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBwYXRjaCAqcDsKKworCWZvciAocCA9IHBhdGNoOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+aXNfbmV3KQorCQkJc2hvd19maWxlX21vZGVfbmFtZSgiY3JlYXRlIiwgcC0+bmV3X21vZGUsIHAtPm5ld19uYW1lKTsKKwkJZWxzZSBpZiAocC0+aXNfZGVsZXRlKQorCQkJc2hvd19maWxlX21vZGVfbmFtZSgiZGVsZXRlIiwgcC0+b2xkX21vZGUsIHAtPm9sZF9uYW1lKTsKKwkJZWxzZSB7CisJCQlpZiAocC0+aXNfcmVuYW1lIHx8IHAtPmlzX2NvcHkpCisJCQkJc2hvd19yZW5hbWVfY29weShwKTsKKwkJCWVsc2UgeworCQkJCWlmIChwLT5zY29yZSkgeworCQkJCQlwcmludGYoIiByZXdyaXRlICVzICglZCUlKVxuIiwKKwkJCQkJICAgICAgIHAtPm5ld19uYW1lLCBwLT5zY29yZSk7CisJCQkJCXNob3dfbW9kZV9jaGFuZ2UocCwgMCk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJc2hvd19tb2RlX2NoYW5nZShwLCAxKTsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcGF0Y2hfc3RhdHMoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlpbnQgbGluZXMgPSBwYXRjaC0+bGluZXNfYWRkZWQgKyBwYXRjaC0+bGluZXNfZGVsZXRlZDsKKworCWlmIChsaW5lcyA+IHN0YXRlLT5tYXhfY2hhbmdlKQorCQlzdGF0ZS0+bWF4X2NoYW5nZSA9IGxpbmVzOworCWlmIChwYXRjaC0+b2xkX25hbWUpIHsKKwkJaW50IGxlbiA9IHF1b3RlX2Nfc3R5bGUocGF0Y2gtPm9sZF9uYW1lLCBOVUxMLCBOVUxMLCAwKTsKKwkJaWYgKCFsZW4pCisJCQlsZW4gPSBzdHJsZW4ocGF0Y2gtPm9sZF9uYW1lKTsKKwkJaWYgKGxlbiA+IHN0YXRlLT5tYXhfbGVuKQorCQkJc3RhdGUtPm1heF9sZW4gPSBsZW47CisJfQorCWlmIChwYXRjaC0+bmV3X25hbWUpIHsKKwkJaW50IGxlbiA9IHF1b3RlX2Nfc3R5bGUocGF0Y2gtPm5ld19uYW1lLCBOVUxMLCBOVUxMLCAwKTsKKwkJaWYgKCFsZW4pCisJCQlsZW4gPSBzdHJsZW4ocGF0Y2gtPm5ld19uYW1lKTsKKwkJaWYgKGxlbiA+IHN0YXRlLT5tYXhfbGVuKQorCQkJc3RhdGUtPm1heF9sZW4gPSBsZW47CisJfQorfQorCitzdGF0aWMgaW50IHJlbW92ZV9maWxlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gsIGludCBybWRpcl9lbXB0eSkKK3sKKwlpZiAoc3RhdGUtPnVwZGF0ZV9pbmRleCAmJiAhc3RhdGUtPml0YV9vbmx5KSB7CisJCWlmIChyZW1vdmVfZmlsZV9mcm9tX2luZGV4KHN0YXRlLT5yZXBvLT5pbmRleCwgcGF0Y2gtPm9sZF9uYW1lKSA8IDApCisJCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IiksIHBhdGNoLT5vbGRfbmFtZSk7CisJfQorCWlmICghc3RhdGUtPmNhY2hlZCkgeworCQlpZiAoIXJlbW92ZV9vcl93YXJuKHBhdGNoLT5vbGRfbW9kZSwgcGF0Y2gtPm9sZF9uYW1lKSAmJiBybWRpcl9lbXB0eSkgeworCQkJcmVtb3ZlX3BhdGgocGF0Y2gtPm9sZF9uYW1lKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGRfaW5kZXhfZmlsZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICBjb25zdCBjaGFyICpwYXRoLAorCQkJICB1bnNpZ25lZCBtb2RlLAorCQkJICB2b2lkICpidWYsCisJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCWludCBuYW1lbGVuID0gc3RybGVuKHBhdGgpOworCisJY2UgPSBtYWtlX2VtcHR5X2NhY2hlX2VudHJ5KHN0YXRlLT5yZXBvLT5pbmRleCwgbmFtZWxlbik7CisJbWVtY3B5KGNlLT5uYW1lLCBwYXRoLCBuYW1lbGVuKTsKKwljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworCWNlLT5jZV9mbGFncyA9IGNyZWF0ZV9jZV9mbGFncygwKTsKKwljZS0+Y2VfbmFtZWxlbiA9IG5hbWVsZW47CisJaWYgKHN0YXRlLT5pdGFfb25seSkgeworCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfSU5URU5UX1RPX0FERDsKKwkJc2V0X29iamVjdF9uYW1lX2Zvcl9pbnRlbnRfdG9fYWRkX2VudHJ5KGNlKTsKKwl9IGVsc2UgaWYgKFNfSVNHSVRMSU5LKG1vZGUpKSB7CisJCWNvbnN0IGNoYXIgKnM7CisKKwkJaWYgKCFza2lwX3ByZWZpeChidWYsICJTdWJwcm9qZWN0IGNvbW1pdCAiLCAmcykgfHwKKwkJICAgIGdldF9vaWRfaGV4KHMsICZjZS0+b2lkKSkgeworCQkJZGlzY2FyZF9jYWNoZV9lbnRyeShjZSk7CisJCQlyZXR1cm4gZXJyb3IoXygiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIiksIHBhdGgpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCFzdGF0ZS0+Y2FjaGVkKSB7CisJCQlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApIHsKKwkJCQlkaXNjYXJkX2NhY2hlX2VudHJ5KGNlKTsKKwkJCQlyZXR1cm4gZXJyb3JfZXJybm8oXygidW5hYmxlIHRvIHN0YXQgbmV3bHkgIgorCQkJCQkJICAgICAiY3JlYXRlZCBmaWxlICclcyciKSwKKwkJCQkJCSAgIHBhdGgpOworCQkJfQorCQkJZmlsbF9zdGF0X2NhY2hlX2luZm8oc3RhdGUtPnJlcG8tPmluZGV4LCBjZSwgJnN0KTsKKwkJfQorCQlpZiAod3JpdGVfb2JqZWN0X2ZpbGUoYnVmLCBzaXplLCBibG9iX3R5cGUsICZjZS0+b2lkKSA8IDApIHsKKwkJCWRpc2NhcmRfY2FjaGVfZW50cnkoY2UpOworCQkJcmV0dXJuIGVycm9yKF8oInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSAiCisJCQkJICAgICAgICJmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIiksIHBhdGgpOworCQl9CisJfQorCWlmIChhZGRfaW5kZXhfZW50cnkoc3RhdGUtPnJlcG8tPmluZGV4LCBjZSwgQUREX0NBQ0hFX09LX1RPX0FERCkgPCAwKSB7CisJCWRpc2NhcmRfY2FjaGVfZW50cnkoY2UpOworCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiKSwgcGF0aCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXR1cm5zOgorICogIC0xIGlmIGFuIHVucmVjb3ZlcmFibGUgZXJyb3IgaGFwcGVuZWQKKyAqICAgMCBpZiBldmVyeXRoaW5nIHdlbnQgd2VsbAorICogICAxIGlmIGEgcmVjb3ZlcmFibGUgZXJyb3IgaGFwcGVuZWQKKyAqLworc3RhdGljIGludCB0cnlfY3JlYXRlX2ZpbGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgIHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCBjaGFyICpidWYsCisJCQkgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IGZkLCByZXM7CisJc3RydWN0IHN0cmJ1ZiBuYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoU19JU0dJVExJTksobW9kZSkpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWlmICghbHN0YXQocGF0aCwgJnN0KSAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiAhIW1rZGlyKHBhdGgsIDA3NzcpOworCX0KKworCWlmIChoYXNfc3ltbGlua3MgJiYgU19JU0xOSyhtb2RlKSkKKwkJLyogQWx0aG91Z2ggYnVmOnNpemUgaXMgY291bnRlZCBzdHJpbmcsIGl0IGFsc28gaXMgTlVMCisJCSAqIHRlcm1pbmF0ZWQuCisJCSAqLworCQlyZXR1cm4gISFzeW1saW5rKGJ1ZiwgcGF0aCk7CisKKwlmZCA9IG9wZW4ocGF0aCwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZLCAobW9kZSAmIDAxMDApID8gMDc3NyA6IDA2NjYpOworCWlmIChmZCA8IDApCisJCXJldHVybiAxOworCisJaWYgKGNvbnZlcnRfdG9fd29ya2luZ190cmVlKHN0YXRlLT5yZXBvLT5pbmRleCwgcGF0aCwgYnVmLCBzaXplLCAmbmJ1ZiwgTlVMTCkpIHsKKwkJc2l6ZSA9IG5idWYubGVuOworCQlidWYgID0gbmJ1Zi5idWY7CisJfQorCisJcmVzID0gd3JpdGVfaW5fZnVsbChmZCwgYnVmLCBzaXplKSA8IDA7CisJaWYgKHJlcykKKwkJZXJyb3JfZXJybm8oXygiZmFpbGVkIHRvIHdyaXRlIHRvICclcyciKSwgcGF0aCk7CisJc3RyYnVmX3JlbGVhc2UoJm5idWYpOworCisJaWYgKGNsb3NlKGZkKSA8IDAgJiYgIXJlcykKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNsb3NpbmcgZmlsZSAnJXMnIiksIHBhdGgpOworCisJcmV0dXJuIHJlcyA/IC0xIDogMDsKK30KKworLyoKKyAqIFdlIG9wdGltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IHRoZSBkaXJlY3RvcmllcyBleGlzdCwKKyAqIHdoaWNoIGlzIHRydWUgOTklIG9mIHRoZSB0aW1lIGFueXdheS4gSWYgdGhleSBkb24ndCwKKyAqIHdlIGNyZWF0ZSB0aGVtIGFuZCB0cnkgYWdhaW4uCisgKgorICogUmV0dXJuczoKKyAqICAgLTEgb24gZXJyb3IKKyAqICAgMCBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBjcmVhdGVfb25lX2ZpbGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgIGNoYXIgKnBhdGgsCisJCQkgICB1bnNpZ25lZCBtb2RlLAorCQkJICAgY29uc3QgY2hhciAqYnVmLAorCQkJICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCByZXM7CisKKwlpZiAoc3RhdGUtPmNhY2hlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXMgPSB0cnlfY3JlYXRlX2ZpbGUoc3RhdGUsIHBhdGgsIG1vZGUsIGJ1Ziwgc2l6ZSk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiAtMTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIDA7CisKKwlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisJCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKHBhdGgpKQorCQkJcmV0dXJuIDA7CisJCXJlcyA9IHRyeV9jcmVhdGVfZmlsZShzdGF0ZSwgcGF0aCwgbW9kZSwgYnVmLCBzaXplKTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmICghcmVzKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKGVycm5vID09IEVFWElTVCB8fCBlcnJubyA9PSBFQUNDRVMpIHsKKwkJLyogV2UgbWF5IGJlIHRyeWluZyB0byBjcmVhdGUgYSBmaWxlIHdoZXJlIGEgZGlyZWN0b3J5CisJCSAqIHVzZWQgdG8gYmUuCisJCSAqLworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaWYgKCFsc3RhdChwYXRoLCAmc3QpICYmICghU19JU0RJUihzdC5zdF9tb2RlKSB8fCAhcm1kaXIocGF0aCkpKQorCQkJZXJybm8gPSBFRVhJU1Q7CisJfQorCisJaWYgKGVycm5vID09IEVFWElTVCkgeworCQl1bnNpZ25lZCBpbnQgbnIgPSBnZXRwaWQoKTsKKworCQlmb3IgKDs7KSB7CisJCQljaGFyIG5ld3BhdGhbUEFUSF9NQVhdOworCQkJbWtzbnBhdGgobmV3cGF0aCwgc2l6ZW9mKG5ld3BhdGgpLCAiJXN+JXUiLCBwYXRoLCBucik7CisJCQlyZXMgPSB0cnlfY3JlYXRlX2ZpbGUoc3RhdGUsIG5ld3BhdGgsIG1vZGUsIGJ1Ziwgc2l6ZSk7CisJCQlpZiAocmVzIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAoIXJlcykgeworCQkJCWlmICghcmVuYW1lKG5ld3BhdGgsIHBhdGgpKQorCQkJCQlyZXR1cm4gMDsKKwkJCQl1bmxpbmtfb3Jfd2FybihuZXdwYXRoKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChlcnJubyAhPSBFRVhJU1QpCisJCQkJYnJlYWs7CisJCQkrK25yOworCQl9CisJfQorCXJldHVybiBlcnJvcl9lcnJubyhfKCJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iKSwKKwkJCSAgIHBhdGgsIG1vZGUpOworfQorCitzdGF0aWMgaW50IGFkZF9jb25mbGljdGVkX3N0YWdlc19maWxlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkJICAgICAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJaW50IHN0YWdlLCBuYW1lbGVuOworCXVuc2lnbmVkIG1vZGU7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWlmICghc3RhdGUtPnVwZGF0ZV9pbmRleCkKKwkJcmV0dXJuIDA7CisJbmFtZWxlbiA9IHN0cmxlbihwYXRjaC0+bmV3X25hbWUpOworCW1vZGUgPSBwYXRjaC0+bmV3X21vZGUgPyBwYXRjaC0+bmV3X21vZGUgOiAoU19JRlJFRyB8IDA2NDQpOworCisJcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleChzdGF0ZS0+cmVwby0+aW5kZXgsIHBhdGNoLT5uZXdfbmFtZSk7CisJZm9yIChzdGFnZSA9IDE7IHN0YWdlIDwgNDsgc3RhZ2UrKykgeworCQlpZiAoaXNfbnVsbF9vaWQoJnBhdGNoLT50aHJlZXdheV9zdGFnZVtzdGFnZSAtIDFdKSkKKwkJCWNvbnRpbnVlOworCQljZSA9IG1ha2VfZW1wdHlfY2FjaGVfZW50cnkoc3RhdGUtPnJlcG8tPmluZGV4LCBuYW1lbGVuKTsKKwkJbWVtY3B5KGNlLT5uYW1lLCBwYXRjaC0+bmV3X25hbWUsIG5hbWVsZW4pOworCQljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworCQljZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3Moc3RhZ2UpOworCQljZS0+Y2VfbmFtZWxlbiA9IG5hbWVsZW47CisJCW9pZGNweSgmY2UtPm9pZCwgJnBhdGNoLT50aHJlZXdheV9zdGFnZVtzdGFnZSAtIDFdKTsKKwkJaWYgKGFkZF9pbmRleF9lbnRyeShzdGF0ZS0+cmVwby0+aW5kZXgsIGNlLCBBRERfQ0FDSEVfT0tfVE9fQUREKSA8IDApIHsKKwkJCWRpc2NhcmRfY2FjaGVfZW50cnkoY2UpOworCQkJcmV0dXJuIGVycm9yKF8oInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIiksCisJCQkJICAgICBwYXRjaC0+bmV3X25hbWUpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX2ZpbGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwljaGFyICpwYXRoID0gcGF0Y2gtPm5ld19uYW1lOworCXVuc2lnbmVkIG1vZGUgPSBwYXRjaC0+bmV3X21vZGU7CisJdW5zaWduZWQgbG9uZyBzaXplID0gcGF0Y2gtPnJlc3VsdHNpemU7CisJY2hhciAqYnVmID0gcGF0Y2gtPnJlc3VsdDsKKworCWlmICghbW9kZSkKKwkJbW9kZSA9IFNfSUZSRUcgfCAwNjQ0OworCWlmIChjcmVhdGVfb25lX2ZpbGUoc3RhdGUsIHBhdGgsIG1vZGUsIGJ1Ziwgc2l6ZSkpCisJCXJldHVybiAtMTsKKworCWlmIChwYXRjaC0+Y29uZmxpY3RlZF90aHJlZXdheSkKKwkJcmV0dXJuIGFkZF9jb25mbGljdGVkX3N0YWdlc19maWxlKHN0YXRlLCBwYXRjaCk7CisJZWxzZSBpZiAoc3RhdGUtPnVwZGF0ZV9pbmRleCkKKwkJcmV0dXJuIGFkZF9pbmRleF9maWxlKHN0YXRlLCBwYXRoLCBtb2RlLCBidWYsIHNpemUpOworCXJldHVybiAwOworfQorCisvKiBwaGFzZSB6ZXJvIGlzIHRvIHJlbW92ZSwgcGhhc2Ugb25lIGlzIHRvIGNyZWF0ZSAqLworc3RhdGljIGludCB3cml0ZV9vdXRfb25lX3Jlc3VsdChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJCXN0cnVjdCBwYXRjaCAqcGF0Y2gsCisJCQkJaW50IHBoYXNlKQoreworCWlmIChwYXRjaC0+aXNfZGVsZXRlID4gMCkgeworCQlpZiAocGhhc2UgPT0gMCkKKwkJCXJldHVybiByZW1vdmVfZmlsZShzdGF0ZSwgcGF0Y2gsIDEpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHBhdGNoLT5pc19uZXcgPiAwIHx8IHBhdGNoLT5pc19jb3B5KSB7CisJCWlmIChwaGFzZSA9PSAxKQorCQkJcmV0dXJuIGNyZWF0ZV9maWxlKHN0YXRlLCBwYXRjaCk7CisJCXJldHVybiAwOworCX0KKwkvKgorCSAqIFJlbmFtZSBvciBtb2RpZmljYXRpb24gYm9pbHMgZG93biB0byB0aGUgc2FtZQorCSAqIHRoaW5nOiByZW1vdmUgdGhlIG9sZCwgd3JpdGUgdGhlIG5ldworCSAqLworCWlmIChwaGFzZSA9PSAwKQorCQlyZXR1cm4gcmVtb3ZlX2ZpbGUoc3RhdGUsIHBhdGNoLCBwYXRjaC0+aXNfcmVuYW1lKTsKKwlpZiAocGhhc2UgPT0gMSkKKwkJcmV0dXJuIGNyZWF0ZV9maWxlKHN0YXRlLCBwYXRjaCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfb3V0X29uZV9yZWplY3Qoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlGSUxFICpyZWo7CisJY2hhciBuYW1lYnVmW1BBVEhfTUFYXTsKKwlzdHJ1Y3QgZnJhZ21lbnQgKmZyYWc7CisJaW50IGNudCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJZm9yIChjbnQgPSAwLCBmcmFnID0gcGF0Y2gtPmZyYWdtZW50czsgZnJhZzsgZnJhZyA9IGZyYWctPm5leHQpIHsKKwkJaWYgKCFmcmFnLT5yZWplY3RlZCkKKwkJCWNvbnRpbnVlOworCQljbnQrKzsKKwl9CisKKwlpZiAoIWNudCkgeworCQlpZiAoc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA+IHZlcmJvc2l0eV9ub3JtYWwpCisJCQlzYXlfcGF0Y2hfbmFtZShzdGRlcnIsCisJCQkJICAgICAgIF8oIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iKSwgcGF0Y2gpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBiZWNhdXNlIGEgcmVtb3ZhbCBwYXRjaCB0aGF0IGxlYXZlcworCSAqIGNvbnRlbnRzIGFyZSBtYXJrZWQgInJlamVjdGVkIiBhdCB0aGUgcGF0Y2ggbGV2ZWwuCisJICovCisJaWYgKCFwYXRjaC0+bmV3X25hbWUpCisJCWRpZShfKCJpbnRlcm5hbCBlcnJvciIpKTsKKworCS8qIFNheSB0aGlzIGV2ZW4gd2l0aG91dCAtLXZlcmJvc2UgKi8KKwlzdHJidWZfYWRkZigmc2IsIFFfKCJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iLAorCQkJICAgICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3RzLi4uIiwKKwkJCSAgICBjbnQpLAorCQkgICAgY250KTsKKwlpZiAoc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA+IHZlcmJvc2l0eV9zaWxlbnQpCisJCXNheV9wYXRjaF9uYW1lKHN0ZGVyciwgc2IuYnVmLCBwYXRjaCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCWNudCA9IHN0cmxlbihwYXRjaC0+bmV3X25hbWUpOworCWlmIChBUlJBWV9TSVpFKG5hbWVidWYpIDw9IGNudCArIDUpIHsKKwkJY250ID0gQVJSQVlfU0laRShuYW1lYnVmKSAtIDU7CisJCXdhcm5pbmcoXygidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIiksCisJCQljbnQgLSAxLCBwYXRjaC0+bmV3X25hbWUpOworCX0KKwltZW1jcHkobmFtZWJ1ZiwgcGF0Y2gtPm5ld19uYW1lLCBjbnQpOworCW1lbWNweShuYW1lYnVmICsgY250LCAiLnJlaiIsIDUpOworCisJcmVqID0gZm9wZW4obmFtZWJ1ZiwgInciKTsKKwlpZiAoIXJlaikKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNhbm5vdCBvcGVuICVzIiksIG5hbWVidWYpOworCisJLyogTm9ybWFsIGdpdCB0b29scyBuZXZlciBkZWFsIHdpdGggLnJlaiwgc28gZG8gbm90IHByZXRlbmQKKwkgKiB0aGlzIGlzIGEgZ2l0IHBhdGNoIGJ5IHNheWluZyAtLWdpdCBvciBnaXZpbmcgZXh0ZW5kZWQKKwkgKiBoZWFkZXJzLiAgV2hpbGUgYXQgaXQsIG1heWJlIHBsZWFzZSAia29tcGFyZSIgdGhhdCB3YW50cworCSAqIHRoZSB0cmFpbGluZyBUQUIgYW5kIHNvbWUgZ2FyYmFnZSBhdCB0aGUgZW5kIG9mIGxpbmUgOy0pLgorCSAqLworCWZwcmludGYocmVqLCAiZGlmZiBhLyVzIGIvJXNcdChyZWplY3RlZCBodW5rcylcbiIsCisJCXBhdGNoLT5uZXdfbmFtZSwgcGF0Y2gtPm5ld19uYW1lKTsKKwlmb3IgKGNudCA9IDEsIGZyYWcgPSBwYXRjaC0+ZnJhZ21lbnRzOworCSAgICAgZnJhZzsKKwkgICAgIGNudCsrLCBmcmFnID0gZnJhZy0+bmV4dCkgeworCQlpZiAoIWZyYWctPnJlamVjdGVkKSB7CisJCQlpZiAoc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA+IHZlcmJvc2l0eV9zaWxlbnQpCisJCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iKSwgY250KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X3NpbGVudCkKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJSZWplY3RlZCBodW5rICMlZC4iKSwgY250KTsKKwkJZnByaW50ZihyZWosICIlLipzIiwgZnJhZy0+c2l6ZSwgZnJhZy0+cGF0Y2gpOworCQlpZiAoZnJhZy0+cGF0Y2hbZnJhZy0+c2l6ZS0xXSAhPSAnXG4nKQorCQkJZnB1dGMoJ1xuJywgcmVqKTsKKwl9CisJZmNsb3NlKHJlaik7CisJcmV0dXJuIC0xOworfQorCisvKgorICogUmV0dXJuczoKKyAqICAtMSBpZiBhbiBlcnJvciBoYXBwZW5lZAorICogICAwIGlmIHRoZSBwYXRjaCBhcHBsaWVkIGNsZWFubHkKKyAqICAgMSBpZiB0aGUgcGF0Y2ggZGlkIG5vdCBhcHBseSBjbGVhbmx5CisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfb3V0X3Jlc3VsdHMoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpsaXN0KQoreworCWludCBwaGFzZTsKKwlpbnQgZXJycyA9IDA7CisJc3RydWN0IHBhdGNoICpsOworCXN0cnVjdCBzdHJpbmdfbGlzdCBjcGF0aCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJZm9yIChwaGFzZSA9IDA7IHBoYXNlIDwgMjsgcGhhc2UrKykgeworCQlsID0gbGlzdDsKKwkJd2hpbGUgKGwpIHsKKwkJCWlmIChsLT5yZWplY3RlZCkKKwkJCQllcnJzID0gMTsKKwkJCWVsc2UgeworCQkJCWlmICh3cml0ZV9vdXRfb25lX3Jlc3VsdChzdGF0ZSwgbCwgcGhhc2UpKSB7CisJCQkJCXN0cmluZ19saXN0X2NsZWFyKCZjcGF0aCwgMCk7CisJCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQkJaWYgKHBoYXNlID09IDEpIHsKKwkJCQkJaWYgKHdyaXRlX291dF9vbmVfcmVqZWN0KHN0YXRlLCBsKSkKKwkJCQkJCWVycnMgPSAxOworCQkJCQlpZiAobC0+Y29uZmxpY3RlZF90aHJlZXdheSkgeworCQkJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZjcGF0aCwgbC0+bmV3X25hbWUpOworCQkJCQkJZXJycyA9IDE7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlsID0gbC0+bmV4dDsKKwkJfQorCX0KKworCWlmIChjcGF0aC5ucikgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCQlzdHJpbmdfbGlzdF9zb3J0KCZjcGF0aCk7CisJCWlmIChzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X3NpbGVudCkgeworCQkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmY3BhdGgpCisJCQkJZnByaW50ZihzdGRlcnIsICJVICVzXG4iLCBpdGVtLT5zdHJpbmcpOworCQl9CisJCXN0cmluZ19saXN0X2NsZWFyKCZjcGF0aCwgMCk7CisKKwkJcmVwb19yZXJlcmUoc3RhdGUtPnJlcG8sIDApOworCX0KKworCXJldHVybiBlcnJzOworfQorCisvKgorICogVHJ5IHRvIGFwcGx5IGEgcGF0Y2guCisgKgorICogUmV0dXJuczoKKyAqICAtMTI4IGlmIGEgYmFkIGVycm9yIGhhcHBlbmVkIChsaWtlIHBhdGNoIHVucmVhZGFibGUpCisgKiAgLTEgaWYgcGF0Y2ggZGlkIG5vdCBhcHBseSBhbmQgdXNlciBjYW5ub3QgZGVhbCB3aXRoIGl0CisgKiAgIDAgaWYgdGhlIHBhdGNoIGFwcGxpZWQKKyAqICAgMSBpZiB0aGUgcGF0Y2ggZGlkIG5vdCBhcHBseSBidXQgdXNlciBtaWdodCBmaXggaXQKKyAqLworc3RhdGljIGludCBhcHBseV9wYXRjaChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkgICAgICAgaW50IGZkLAorCQkgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCSAgICAgICBpbnQgb3B0aW9ucykKK3sKKwlzaXplX3Qgb2Zmc2V0OworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7IC8qIG93bnMgdGhlIHBhdGNoIHRleHQgKi8KKwlzdHJ1Y3QgcGF0Y2ggKmxpc3QgPSBOVUxMLCAqKmxpc3RwID0gJmxpc3Q7CisJaW50IHNraXBwZWRfcGF0Y2ggPSAwOworCWludCByZXMgPSAwOworCWludCBmbHVzaF9hdHRyaWJ1dGVzID0gMDsKKworCXN0YXRlLT5wYXRjaF9pbnB1dF9maWxlID0gZmlsZW5hbWU7CisJaWYgKHJlYWRfcGF0Y2hfZmlsZSgmYnVmLCBmZCkgPCAwKQorCQlyZXR1cm4gLTEyODsKKwlvZmZzZXQgPSAwOworCXdoaWxlIChvZmZzZXQgPCBidWYubGVuKSB7CisJCXN0cnVjdCBwYXRjaCAqcGF0Y2g7CisJCWludCBucjsKKworCQlwYXRjaCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpwYXRjaCkpOworCQlwYXRjaC0+aW5hY2N1cmF0ZV9lb2YgPSAhIShvcHRpb25zICYgQVBQTFlfT1BUX0lOQUNDVVJBVEVfRU9GKTsKKwkJcGF0Y2gtPnJlY291bnQgPSAgISEob3B0aW9ucyAmIEFQUExZX09QVF9SRUNPVU5UKTsKKwkJbnIgPSBwYXJzZV9jaHVuayhzdGF0ZSwgYnVmLmJ1ZiArIG9mZnNldCwgYnVmLmxlbiAtIG9mZnNldCwgcGF0Y2gpOworCQlpZiAobnIgPCAwKSB7CisJCQlmcmVlX3BhdGNoKHBhdGNoKTsKKwkJCWlmIChuciA9PSAtMTI4KSB7CisJCQkJcmVzID0gLTEyODsKKwkJCQlnb3RvIGVuZDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWlmIChzdGF0ZS0+YXBwbHlfaW5fcmV2ZXJzZSkKKwkJCXJldmVyc2VfcGF0Y2hlcyhwYXRjaCk7CisJCWlmICh1c2VfcGF0Y2goc3RhdGUsIHBhdGNoKSkgeworCQkJcGF0Y2hfc3RhdHMoc3RhdGUsIHBhdGNoKTsKKwkJCSpsaXN0cCA9IHBhdGNoOworCQkJbGlzdHAgPSAmcGF0Y2gtPm5leHQ7CisKKwkJCWlmICgocGF0Y2gtPm5ld19uYW1lICYmCisJCQkgICAgIGVuZHNfd2l0aF9wYXRoX2NvbXBvbmVudHMocGF0Y2gtPm5ld19uYW1lLAorCQkJCQkJICAgICAgIEdJVEFUVFJJQlVURVNfRklMRSkpIHx8CisJCQkgICAgKHBhdGNoLT5vbGRfbmFtZSAmJgorCQkJICAgICBlbmRzX3dpdGhfcGF0aF9jb21wb25lbnRzKHBhdGNoLT5vbGRfbmFtZSwKKwkJCQkJCSAgICAgICBHSVRBVFRSSUJVVEVTX0ZJTEUpKSkKKwkJCQlmbHVzaF9hdHRyaWJ1dGVzID0gMTsKKwkJfQorCQllbHNlIHsKKwkJCWlmIChzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X25vcm1hbCkKKwkJCQlzYXlfcGF0Y2hfbmFtZShzdGRlcnIsIF8oIlNraXBwZWQgcGF0Y2ggJyVzJy4iKSwgcGF0Y2gpOworCQkJZnJlZV9wYXRjaChwYXRjaCk7CisJCQlza2lwcGVkX3BhdGNoKys7CisJCX0KKwkJb2Zmc2V0ICs9IG5yOworCX0KKworCWlmICghbGlzdCAmJiAhc2tpcHBlZF9wYXRjaCkgeworCQllcnJvcihfKCJ1bnJlY29nbml6ZWQgaW5wdXQiKSk7CisJCXJlcyA9IC0xMjg7CisJCWdvdG8gZW5kOworCX0KKworCWlmIChzdGF0ZS0+d2hpdGVzcGFjZV9lcnJvciAmJiAoc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9PSBkaWVfb25fd3NfZXJyb3IpKQorCQlzdGF0ZS0+YXBwbHkgPSAwOworCisJc3RhdGUtPnVwZGF0ZV9pbmRleCA9IChzdGF0ZS0+Y2hlY2tfaW5kZXggfHwgc3RhdGUtPml0YV9vbmx5KSAmJiBzdGF0ZS0+YXBwbHk7CisJaWYgKHN0YXRlLT51cGRhdGVfaW5kZXggJiYgIWlzX2xvY2tfZmlsZV9sb2NrZWQoJnN0YXRlLT5sb2NrX2ZpbGUpKSB7CisJCWlmIChzdGF0ZS0+aW5kZXhfZmlsZSkKKwkJCWhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJnN0YXRlLT5sb2NrX2ZpbGUsCisJCQkJCQkgIHN0YXRlLT5pbmRleF9maWxlLAorCQkJCQkJICBMT0NLX0RJRV9PTl9FUlJPUik7CisJCWVsc2UKKwkJCXJlcG9faG9sZF9sb2NrZWRfaW5kZXgoc3RhdGUtPnJlcG8sICZzdGF0ZS0+bG9ja19maWxlLAorCQkJCQkgICAgICAgTE9DS19ESUVfT05fRVJST1IpOworCX0KKworCWlmIChzdGF0ZS0+Y2hlY2tfaW5kZXggJiYgcmVhZF9hcHBseV9jYWNoZShzdGF0ZSkgPCAwKSB7CisJCWVycm9yKF8oInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiKSk7CisJCXJlcyA9IC0xMjg7CisJCWdvdG8gZW5kOworCX0KKworCWlmIChzdGF0ZS0+Y2hlY2sgfHwgc3RhdGUtPmFwcGx5KSB7CisJCWludCByID0gY2hlY2tfcGF0Y2hfbGlzdChzdGF0ZSwgbGlzdCk7CisJCWlmIChyID09IC0xMjgpIHsKKwkJCXJlcyA9IC0xMjg7CisJCQlnb3RvIGVuZDsKKwkJfQorCQlpZiAociA8IDAgJiYgIXN0YXRlLT5hcHBseV93aXRoX3JlamVjdCkgeworCQkJcmVzID0gLTE7CisJCQlnb3RvIGVuZDsKKwkJfQorCX0KKworCWlmIChzdGF0ZS0+YXBwbHkpIHsKKwkJaW50IHdyaXRlX3JlcyA9IHdyaXRlX291dF9yZXN1bHRzKHN0YXRlLCBsaXN0KTsKKwkJaWYgKHdyaXRlX3JlcyA8IDApIHsKKwkJCXJlcyA9IC0xMjg7CisJCQlnb3RvIGVuZDsKKwkJfQorCQlpZiAod3JpdGVfcmVzID4gMCkgeworCQkJLyogd2l0aCAtLTN3YXksIHdlIHN0aWxsIG5lZWQgdG8gd3JpdGUgdGhlIGluZGV4IG91dCAqLworCQkJcmVzID0gc3RhdGUtPmFwcGx5X3dpdGhfcmVqZWN0ID8gLTEgOiAxOworCQkJZ290byBlbmQ7CisJCX0KKwl9CisKKwlpZiAoc3RhdGUtPmZha2VfYW5jZXN0b3IgJiYKKwkgICAgYnVpbGRfZmFrZV9hbmNlc3RvcihzdGF0ZSwgbGlzdCkpIHsKKwkJcmVzID0gLTEyODsKKwkJZ290byBlbmQ7CisJfQorCisJaWYgKHN0YXRlLT5kaWZmc3RhdCAmJiBzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X3NpbGVudCkKKwkJc3RhdF9wYXRjaF9saXN0KHN0YXRlLCBsaXN0KTsKKworCWlmIChzdGF0ZS0+bnVtc3RhdCAmJiBzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X3NpbGVudCkKKwkJbnVtc3RhdF9wYXRjaF9saXN0KHN0YXRlLCBsaXN0KTsKKworCWlmIChzdGF0ZS0+c3VtbWFyeSAmJiBzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X3NpbGVudCkKKwkJc3VtbWFyeV9wYXRjaF9saXN0KGxpc3QpOworCisJaWYgKGZsdXNoX2F0dHJpYnV0ZXMpCisJCXJlc2V0X3BhcnNlZF9hdHRyaWJ1dGVzKCk7CitlbmQ6CisJZnJlZV9wYXRjaF9saXN0KGxpc3QpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmluZ19saXN0X2NsZWFyKCZzdGF0ZS0+Zm5fdGFibGUsIDApOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfb3B0aW9uX3BhcnNlX2V4Y2x1ZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJYWRkX25hbWVfbGltaXQoc3RhdGUsIGFyZywgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfb3B0aW9uX3BhcnNlX2luY2x1ZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJYWRkX25hbWVfbGltaXQoc3RhdGUsIGFyZywgMCk7CisJc3RhdGUtPmhhc19pbmNsdWRlID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcHBseV9vcHRpb25fcGFyc2VfcChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJY29uc3QgY2hhciAqYXJnLAorCQkJCWludCB1bnNldCkKK3sKKwlzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKworCXN0YXRlLT5wX3ZhbHVlID0gYXRvaShhcmcpOworCXN0YXRlLT5wX3ZhbHVlX2tub3duID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcHBseV9vcHRpb25fcGFyc2Vfc3BhY2VfY2hhbmdlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkJICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCisJaWYgKHVuc2V0KQorCQlzdGF0ZS0+d3NfaWdub3JlX2FjdGlvbiA9IGlnbm9yZV93c19ub25lOworCWVsc2UKKwkJc3RhdGUtPndzX2lnbm9yZV9hY3Rpb24gPSBpZ25vcmVfd3NfY2hhbmdlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwcGx5X29wdGlvbl9wYXJzZV93aGl0ZXNwYWNlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkJIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJc3RhdGUtPndoaXRlc3BhY2Vfb3B0aW9uID0gYXJnOworCWlmIChwYXJzZV93aGl0ZXNwYWNlX29wdGlvbihzdGF0ZSwgYXJnKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwcGx5X29wdGlvbl9wYXJzZV9kaXJlY3RvcnkoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKworCXN0cmJ1Zl9yZXNldCgmc3RhdGUtPnJvb3QpOworCXN0cmJ1Zl9hZGRzdHIoJnN0YXRlLT5yb290LCBhcmcpOworCXN0cmJ1Zl9jb21wbGV0ZSgmc3RhdGUtPnJvb3QsICcvJyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhcHBseV9hbGxfcGF0Y2hlcyhzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkgICAgICBpbnQgYXJnYywKKwkJICAgICAgY29uc3QgY2hhciAqKmFyZ3YsCisJCSAgICAgIGludCBvcHRpb25zKQoreworCWludCBpOworCWludCByZXM7CisJaW50IGVycnMgPSAwOworCWludCByZWFkX3N0ZGluID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJY2hhciAqdG9fZnJlZSA9IE5VTEw7CisJCWludCBmZDsKKworCQlpZiAoIXN0cmNtcChhcmcsICItIikpIHsKKwkJCXJlcyA9IGFwcGx5X3BhdGNoKHN0YXRlLCAwLCAiPHN0ZGluPiIsIG9wdGlvbnMpOworCQkJaWYgKHJlcyA8IDApCisJCQkJZ290byBlbmQ7CisJCQllcnJzIHw9IHJlczsKKwkJCXJlYWRfc3RkaW4gPSAwOworCQkJY29udGludWU7CisJCX0gZWxzZQorCQkJYXJnID0gdG9fZnJlZSA9IHByZWZpeF9maWxlbmFtZShzdGF0ZS0+cHJlZml4LCBhcmcpOworCisJCWZkID0gb3BlbihhcmcsIE9fUkRPTkxZKTsKKwkJaWYgKGZkIDwgMCkgeworCQkJZXJyb3IoXygiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnOiAlcyIpLCBhcmcsIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXMgPSAtMTI4OworCQkJZnJlZSh0b19mcmVlKTsKKwkJCWdvdG8gZW5kOworCQl9CisJCXJlYWRfc3RkaW4gPSAwOworCQlzZXRfZGVmYXVsdF93aGl0ZXNwYWNlX21vZGUoc3RhdGUpOworCQlyZXMgPSBhcHBseV9wYXRjaChzdGF0ZSwgZmQsIGFyZywgb3B0aW9ucyk7CisJCWNsb3NlKGZkKTsKKwkJZnJlZSh0b19mcmVlKTsKKwkJaWYgKHJlcyA8IDApCisJCQlnb3RvIGVuZDsKKwkJZXJycyB8PSByZXM7CisJfQorCXNldF9kZWZhdWx0X3doaXRlc3BhY2VfbW9kZShzdGF0ZSk7CisJaWYgKHJlYWRfc3RkaW4pIHsKKwkJcmVzID0gYXBwbHlfcGF0Y2goc3RhdGUsIDAsICI8c3RkaW4+Iiwgb3B0aW9ucyk7CisJCWlmIChyZXMgPCAwKQorCQkJZ290byBlbmQ7CisJCWVycnMgfD0gcmVzOworCX0KKworCWlmIChzdGF0ZS0+d2hpdGVzcGFjZV9lcnJvcikgeworCQlpZiAoc3RhdGUtPnNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnMgJiYKKwkJICAgIHN0YXRlLT5zcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzIDwgc3RhdGUtPndoaXRlc3BhY2VfZXJyb3IpIHsKKwkJCWludCBzcXVlbGNoZWQgPQorCQkJCXN0YXRlLT53aGl0ZXNwYWNlX2Vycm9yIC0gc3RhdGUtPnNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnM7CisJCQl3YXJuaW5nKFFfKCJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvciIsCisJCQkJICAgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIsCisJCQkJICAgc3F1ZWxjaGVkKSwKKwkJCQlzcXVlbGNoZWQpOworCQl9CisJCWlmIChzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uID09IGRpZV9vbl93c19lcnJvcikgeworCQkJZXJyb3IoUV8oIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iLAorCQkJCSAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIsCisJCQkJIHN0YXRlLT53aGl0ZXNwYWNlX2Vycm9yKSwKKwkJCSAgICAgIHN0YXRlLT53aGl0ZXNwYWNlX2Vycm9yKTsKKwkJCXJlcyA9IC0xMjg7CisJCQlnb3RvIGVuZDsKKwkJfQorCQlpZiAoc3RhdGUtPmFwcGxpZWRfYWZ0ZXJfZml4aW5nX3dzICYmIHN0YXRlLT5hcHBseSkKKwkJCXdhcm5pbmcoUV8oIiVkIGxpbmUgYXBwbGllZCBhZnRlciIKKwkJCQkgICAiIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iLAorCQkJCSAgICIlZCBsaW5lcyBhcHBsaWVkIGFmdGVyIgorCQkJCSAgICIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIsCisJCQkJICAgc3RhdGUtPmFwcGxpZWRfYWZ0ZXJfZml4aW5nX3dzKSwKKwkJCQlzdGF0ZS0+YXBwbGllZF9hZnRlcl9maXhpbmdfd3MpOworCQllbHNlIGlmIChzdGF0ZS0+d2hpdGVzcGFjZV9lcnJvcikKKwkJCXdhcm5pbmcoUV8oIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iLAorCQkJCSAgICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIiwKKwkJCQkgICBzdGF0ZS0+d2hpdGVzcGFjZV9lcnJvciksCisJCQkJc3RhdGUtPndoaXRlc3BhY2VfZXJyb3IpOworCX0KKworCWlmIChzdGF0ZS0+dXBkYXRlX2luZGV4KSB7CisJCXJlcyA9IHdyaXRlX2xvY2tlZF9pbmRleChzdGF0ZS0+cmVwby0+aW5kZXgsICZzdGF0ZS0+bG9ja19maWxlLCBDT01NSVRfTE9DSyk7CisJCWlmIChyZXMpIHsKKwkJCWVycm9yKF8oIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpKTsKKwkJCXJlcyA9IC0xMjg7CisJCQlnb3RvIGVuZDsKKwkJfQorCX0KKworCXJlcyA9ICEhZXJyczsKKworZW5kOgorCXJvbGxiYWNrX2xvY2tfZmlsZSgmc3RhdGUtPmxvY2tfZmlsZSk7CisKKwlpZiAoc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA8PSB2ZXJib3NpdHlfc2lsZW50KSB7CisJCXNldF9lcnJvcl9yb3V0aW5lKHN0YXRlLT5zYXZlZF9lcnJvcl9yb3V0aW5lKTsKKwkJc2V0X3dhcm5fcm91dGluZShzdGF0ZS0+c2F2ZWRfd2Fybl9yb3V0aW5lKTsKKwl9CisKKwlpZiAocmVzID4gLTEpCisJCXJldHVybiByZXM7CisJcmV0dXJuIChyZXMgPT0gLTEgPyAxIDogMTI4KTsKK30KKworaW50IGFwcGx5X3BhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCWludCAqZm9yY2VfYXBwbHksIGludCAqb3B0aW9ucywKKwkJCWNvbnN0IGNoYXIgKiBjb25zdCAqYXBwbHlfdXNhZ2UpCit7CisJc3RydWN0IG9wdGlvbiBidWlsdGluX2FwcGx5X29wdGlvbnNbXSA9IHsKKwkJT1BUX0NBTExCQUNLX0YoMCwgImV4Y2x1ZGUiLCBzdGF0ZSwgTl8oInBhdGgiKSwKKwkJCU5fKCJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIiksCisJCQlQQVJTRV9PUFRfTk9ORUcsIGFwcGx5X29wdGlvbl9wYXJzZV9leGNsdWRlKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgImluY2x1ZGUiLCBzdGF0ZSwgTl8oInBhdGgiKSwKKwkJCU5fKCJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIiksCisJCQlQQVJTRV9PUFRfTk9ORUcsIGFwcGx5X29wdGlvbl9wYXJzZV9pbmNsdWRlKSwKKwkJT1BUX0NBTExCQUNLKCdwJywgTlVMTCwgc3RhdGUsIE5fKCJudW0iKSwKKwkJCU5fKCJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIpLAorCQkJYXBwbHlfb3B0aW9uX3BhcnNlX3ApLAorCQlPUFRfQk9PTCgwLCAibm8tYWRkIiwgJnN0YXRlLT5ub19hZGQsCisJCQlOXygiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIpKSwKKwkJT1BUX0JPT0woMCwgInN0YXQiLCAmc3RhdGUtPmRpZmZzdGF0LAorCQkJTl8oImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIpKSwKKwkJT1BUX05PT1BfTk9BUkcoMCwgImFsbG93LWJpbmFyeS1yZXBsYWNlbWVudCIpLAorCQlPUFRfTk9PUF9OT0FSRygwLCAiYmluYXJ5IiksCisJCU9QVF9CT09MKDAsICJudW1zdGF0IiwgJnN0YXRlLT5udW1zdGF0LAorCQkJTl8oInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iKSksCisJCU9QVF9CT09MKDAsICJzdW1tYXJ5IiwgJnN0YXRlLT5zdW1tYXJ5LAorCQkJTl8oImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiKSksCisJCU9QVF9CT09MKDAsICJjaGVjayIsICZzdGF0ZS0+Y2hlY2ssCisJCQlOXygiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIpKSwKKwkJT1BUX0JPT0woMCwgImluZGV4IiwgJnN0YXRlLT5jaGVja19pbmRleCwKKwkJCU5fKCJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiKSksCisJCU9QVF9CT09MKCdOJywgImludGVudC10by1hZGQiLCAmc3RhdGUtPml0YV9vbmx5LAorCQkJTl8oIm1hcmsgbmV3IGZpbGVzIHdpdGggYGdpdCBhZGQgLS1pbnRlbnQtdG8tYWRkYCIpKSwKKwkJT1BUX0JPT0woMCwgImNhY2hlZCIsICZzdGF0ZS0+Y2FjaGVkLAorCQkJTl8oImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIikpLAorCQlPUFRfQk9PTF9GKDAsICJ1bnNhZmUtcGF0aHMiLCAmc3RhdGUtPnVuc2FmZV9wYXRocywKKwkJCSAgIE5fKCJhY2NlcHQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgb3V0c2lkZSB0aGUgd29ya2luZyBhcmVhIiksCisJCQkgICBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9CT09MKDAsICJhcHBseSIsIGZvcmNlX2FwcGx5LAorCQkJTl8oImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIikpLAorCQlPUFRfQk9PTCgnMycsICIzd2F5IiwgJnN0YXRlLT50aHJlZXdheSwKKwkJCSBOXyggImF0dGVtcHQgdGhyZWUtd2F5IG1lcmdlIGlmIGEgcGF0Y2ggZG9lcyBub3QgYXBwbHkiKSksCisJCU9QVF9GSUxFTkFNRSgwLCAiYnVpbGQtZmFrZS1hbmNlc3RvciIsICZzdGF0ZS0+ZmFrZV9hbmNlc3RvciwKKwkJCU5fKCJidWlsZCBhIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiBlbWJlZGRlZCBpbmRleCBpbmZvcm1hdGlvbiIpKSwKKwkJLyogVGhpbmsgdHdpY2UgYmVmb3JlIGFkZGluZyAiLS1udWwiIHN5bm9ueW0gdG8gdGhpcyAqLworCQlPUFRfU0VUX0lOVCgneicsIE5VTEwsICZzdGF0ZS0+bGluZV90ZXJtaW5hdGlvbiwKKwkJCU5fKCJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIpLCAnXDAnKSwKKwkJT1BUX0lOVEVHRVIoJ0MnLCBOVUxMLCAmc3RhdGUtPnBfY29udGV4dCwKKwkJCQlOXygiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIikpLAorCQlPUFRfQ0FMTEJBQ0soMCwgIndoaXRlc3BhY2UiLCBzdGF0ZSwgTl8oImFjdGlvbiIpLAorCQkJTl8oImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIiksCisJCQlhcHBseV9vcHRpb25fcGFyc2Vfd2hpdGVzcGFjZSksCisJCU9QVF9DQUxMQkFDS19GKDAsICJpZ25vcmUtc3BhY2UtY2hhbmdlIiwgc3RhdGUsIE5VTEwsCisJCQlOXygiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIpLAorCQkJUEFSU0VfT1BUX05PQVJHLCBhcHBseV9vcHRpb25fcGFyc2Vfc3BhY2VfY2hhbmdlKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgImlnbm9yZS13aGl0ZXNwYWNlIiwgc3RhdGUsIE5VTEwsCisJCQlOXygiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIpLAorCQkJUEFSU0VfT1BUX05PQVJHLCBhcHBseV9vcHRpb25fcGFyc2Vfc3BhY2VfY2hhbmdlKSwKKwkJT1BUX0JPT0woJ1InLCAicmV2ZXJzZSIsICZzdGF0ZS0+YXBwbHlfaW5fcmV2ZXJzZSwKKwkJCU5fKCJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIpKSwKKwkJT1BUX0JPT0woMCwgInVuaWRpZmYtemVybyIsICZzdGF0ZS0+dW5pZGlmZl96ZXJvLAorCQkJTl8oImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IikpLAorCQlPUFRfQk9PTCgwLCAicmVqZWN0IiwgJnN0YXRlLT5hcHBseV93aXRoX3JlamVjdCwKKwkJCU5fKCJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIpKSwKKwkJT1BUX0JPT0woMCwgImFsbG93LW92ZXJsYXAiLCAmc3RhdGUtPmFsbG93X292ZXJsYXAsCisJCQlOXygiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiKSksCisJCU9QVF9fVkVSQk9TRSgmc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSwgTl8oImJlIHZlcmJvc2UiKSksCisJCU9QVF9CSVQoMCwgImluYWNjdXJhdGUtZW9mIiwgb3B0aW9ucywKKwkJCU5fKCJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIpLAorCQkJQVBQTFlfT1BUX0lOQUNDVVJBVEVfRU9GKSwKKwkJT1BUX0JJVCgwLCAicmVjb3VudCIsIG9wdGlvbnMsCisJCQlOXygiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIiksCisJCQlBUFBMWV9PUFRfUkVDT1VOVCksCisJCU9QVF9DQUxMQkFDSygwLCAiZGlyZWN0b3J5Iiwgc3RhdGUsIE5fKCJyb290IiksCisJCQlOXygicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIpLAorCQkJYXBwbHlfb3B0aW9uX3BhcnNlX2RpcmVjdG9yeSksCisJCU9QVF9FTkQoKQorCX07CisKKwlyZXR1cm4gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBzdGF0ZS0+cHJlZml4LCBidWlsdGluX2FwcGx5X29wdGlvbnMsIGFwcGx5X3VzYWdlLCAwKTsKK30KZGlmZiAtLWdpdCBhL2FwcGx5LmggYi9hcHBseS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhM2Q5NWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBseS5oCkBAIC0wLDAgKzEsMTkwIEBACisjaWZuZGVmIEFQUExZX0gKKyNkZWZpbmUgQVBQTFlfSAorCisjaW5jbHVkZSAiaGFzaC5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworc3RydWN0IHJlcG9zaXRvcnk7CisKK2VudW0gYXBwbHlfd3NfZXJyb3JfYWN0aW9uIHsKKwlub3dhcm5fd3NfZXJyb3IsCisJd2Fybl9vbl93c19lcnJvciwKKwlkaWVfb25fd3NfZXJyb3IsCisJY29ycmVjdF93c19lcnJvcgorfTsKKworZW51bSBhcHBseV93c19pZ25vcmUgeworCWlnbm9yZV93c19ub25lLAorCWlnbm9yZV93c19jaGFuZ2UKK307CisKK2VudW0gYXBwbHlfdmVyYm9zaXR5IHsKKwl2ZXJib3NpdHlfc2lsZW50ID0gLTEsCisJdmVyYm9zaXR5X25vcm1hbCA9IDAsCisJdmVyYm9zaXR5X3ZlcmJvc2UgPSAxCit9OworCisvKgorICogV2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvdyBzeW1saW5rcyBpbiB0aGUgcHJlaW1hZ2UgYXJlCisgKiBtYW5pcHVsYXRlZCBieSB0aGUgcGF0Y2hlcy4gIEEgcGF0Y2ggdG8gYWRkIGEvYi9jIHdoZXJlIGEvYgorICogaXMgYSBzeW1saW5rIHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBhZmZlY3QgdGhlIGRpcmVjdG9yeQorICogdGhlIHN5bWxpbmsgcG9pbnRzIGF0LCBidXQgaWYgdGhlIHNhbWUgcGF0Y2ggcmVtb3ZlcyBhL2IsCisgKiBpdCBpcyBwZXJmZWN0bHkgZmluZSwgYXMgdGhlIHBhdGNoIHJlbW92ZXMgYS9iIHRvIG1ha2Ugcm9vbQorICogdG8gY3JlYXRlIGEgZGlyZWN0b3J5IGEvYiBzbyB0aGF0IGEvYi9jIGNhbiBiZSBjcmVhdGVkLgorICoKKyAqIFNlZSBhbHNvICJzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3ltbGlua19jaGFuZ2VzIiBpbiAic3RydWN0CisgKiBhcHBseV9zdGF0ZSIuCisgKi8KKyNkZWZpbmUgQVBQTFlfU1lNTElOS19HT0VTX0FXQVkgMDEKKyNkZWZpbmUgQVBQTFlfU1lNTElOS19JTl9SRVNVTFQgMDIKKworc3RydWN0IGFwcGx5X3N0YXRlIHsKKwljb25zdCBjaGFyICpwcmVmaXg7CisKKwkvKiBMb2NrIGZpbGUgKi8KKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZTsKKworCS8qIFRoZXNlIGNvbnRyb2wgd2hhdCBnZXRzIGxvb2tlZCBhdCBhbmQgbW9kaWZpZWQgKi8KKwlpbnQgYXBwbHk7IC8qIHRoaXMgaXMgbm90IGEgZHJ5LXJ1biAqLworCWludCBjYWNoZWQ7IC8qIGFwcGx5IHRvIHRoZSBpbmRleCBvbmx5ICovCisJaW50IGNoZWNrOyAvKiBwcmVpbWFnZSBtdXN0IG1hdGNoIHdvcmtpbmcgdHJlZSwgZG9uJ3QgYWN0dWFsbHkgYXBwbHkgKi8KKwlpbnQgY2hlY2tfaW5kZXg7IC8qIHByZWltYWdlIG11c3QgbWF0Y2ggdGhlIGluZGV4ZWQgdmVyc2lvbiAqLworCWludCB1cGRhdGVfaW5kZXg7IC8qIGNoZWNrX2luZGV4ICYmIGFwcGx5ICovCisJaW50IGl0YV9vbmx5OwkgIC8qIGFkZCBpbnRlbnQtdG8tYWRkIGVudHJpZXMgdG8gdGhlIGluZGV4ICovCisKKwkvKiBUaGVzZSBjb250cm9sIGNvc21ldGljIGFzcGVjdCBvZiB0aGUgb3V0cHV0ICovCisJaW50IGRpZmZzdGF0OyAvKiBqdXN0IHNob3cgYSBkaWZmc3RhdCwgYW5kIGRvbid0IGFjdHVhbGx5IGFwcGx5ICovCisJaW50IG51bXN0YXQ7IC8qIGp1c3Qgc2hvdyBhIG51bWVyaWMgZGlmZnN0YXQsIGFuZCBkb24ndCBhY3R1YWxseSBhcHBseSAqLworCWludCBzdW1tYXJ5OyAvKiBqdXN0IHJlcG9ydCBjcmVhdGlvbiwgZGVsZXRpb24sIGV0YywgYW5kIGRvbid0IGFjdHVhbGx5IGFwcGx5ICovCisKKwkvKiBUaGVzZSBib29sZWFuIHBhcmFtZXRlcnMgY29udHJvbCBob3cgdGhlIGFwcGx5IGlzIGRvbmUgKi8KKwlpbnQgYWxsb3dfb3ZlcmxhcDsKKwlpbnQgYXBwbHlfaW5fcmV2ZXJzZTsKKwlpbnQgYXBwbHlfd2l0aF9yZWplY3Q7CisJaW50IG5vX2FkZDsKKwlpbnQgdGhyZWV3YXk7CisJaW50IHVuaWRpZmZfemVybzsKKwlpbnQgdW5zYWZlX3BhdGhzOworCisJLyogT3RoZXIgbm9uIGJvb2xlYW4gcGFyYW1ldGVycyAqLworCXN0cnVjdCByZXBvc2l0b3J5ICpyZXBvOworCWNvbnN0IGNoYXIgKmluZGV4X2ZpbGU7CisJZW51bSBhcHBseV92ZXJib3NpdHkgYXBwbHlfdmVyYm9zaXR5OworCWNvbnN0IGNoYXIgKmZha2VfYW5jZXN0b3I7CisJY29uc3QgY2hhciAqcGF0Y2hfaW5wdXRfZmlsZTsKKwlpbnQgbGluZV90ZXJtaW5hdGlvbjsKKwlzdHJ1Y3Qgc3RyYnVmIHJvb3Q7CisJaW50IHBfdmFsdWU7CisJaW50IHBfdmFsdWVfa25vd247CisJdW5zaWduZWQgaW50IHBfY29udGV4dDsKKworCS8qIEV4Y2x1ZGUgYW5kIGluY2x1ZGUgcGF0aCBwYXJhbWV0ZXJzICovCisJc3RydWN0IHN0cmluZ19saXN0IGxpbWl0X2J5X25hbWU7CisJaW50IGhhc19pbmNsdWRlOworCisJLyogVmFyaW91cyAiY3VycmVudCBzdGF0ZSIgKi8KKwlpbnQgbGluZW5yOyAvKiBjdXJyZW50IGxpbmUgbnVtYmVyICovCisJc3RydWN0IHN0cmluZ19saXN0IHN5bWxpbmtfY2hhbmdlczsgLyogd2UgaGF2ZSB0byB0cmFjayBzeW1saW5rcyAqLworCisJLyoKKwkgKiBGb3IgImRpZmYtc3RhdCIgbGlrZSBiZWhhdmlvdXIsIHdlIGtlZXAgdHJhY2sgb2YgdGhlIGJpZ2dlc3QgY2hhbmdlCisJICogd2UndmUgc2VlbiwgYW5kIHRoZSBsb25nZXN0IGZpbGVuYW1lLiBUaGF0IGFsbG93cyB1cyB0byBkbyBzaW1wbGUKKwkgKiBzY2FsaW5nLgorCSAqLworCWludCBtYXhfY2hhbmdlOworCWludCBtYXhfbGVuOworCisJLyoKKwkgKiBSZWNvcmRzIGZpbGVuYW1lcyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLCBpbiBvcmRlciB0byBoYW5kbGUKKwkgKiB0aGUgY2FzZSB3aGVyZSBtb3JlIHRoYW4gb25lIHBhdGNoZXMgdG91Y2ggdGhlIHNhbWUgZmlsZS4KKwkgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZm5fdGFibGU7CisKKwkvKgorCSAqIFRoaXMgaXMgdG8gc2F2ZSByZXBvcnRpbmcgcm91dGluZXMgYmVmb3JlIHVzaW5nCisJICogc2V0X2Vycm9yX3JvdXRpbmUoKSBvciBzZXRfd2Fybl9yb3V0aW5lKCkgdG8gaW5zdGFsbCBtdXRpbmcKKwkgKiByb3V0aW5lcyB3aGVuIGluIHZlcmJvc2l0eV9zaWxlbnQgbW9kZS4KKwkgKi8KKwl2b2lkICgqc2F2ZWRfZXJyb3Jfcm91dGluZSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcyk7CisJdm9pZCAoKnNhdmVkX3dhcm5fcm91dGluZSkoY29uc3QgY2hhciAqd2FybiwgdmFfbGlzdCBwYXJhbXMpOworCisJLyogVGhlc2UgY29udHJvbCB3aGl0ZXNwYWNlIGVycm9ycyAqLworCWVudW0gYXBwbHlfd3NfZXJyb3JfYWN0aW9uIHdzX2Vycm9yX2FjdGlvbjsKKwllbnVtIGFwcGx5X3dzX2lnbm9yZSB3c19pZ25vcmVfYWN0aW9uOworCWNvbnN0IGNoYXIgKndoaXRlc3BhY2Vfb3B0aW9uOworCWludCB3aGl0ZXNwYWNlX2Vycm9yOworCWludCBzcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzOworCWludCBhcHBsaWVkX2FmdGVyX2ZpeGluZ193czsKK307CisKKy8qCisgKiBUaGlzIHJlcHJlc2VudHMgYSAicGF0Y2giIHRvIGEgZmlsZSwgYm90aCBtZXRhaW5mbyBjaGFuZ2VzCisgKiBzdWNoIGFzIGNyZWF0aW9uL2RlbGV0aW9uLCBmaWxlbW9kZSBhbmQgY29udGVudCBjaGFuZ2VzIHJlcHJlc2VudGVkCisgKiBhcyBhIHNlcmllcyBvZiBmcmFnbWVudHMuCisgKi8KK3N0cnVjdCBwYXRjaCB7CisJY2hhciAqbmV3X25hbWUsICpvbGRfbmFtZSwgKmRlZl9uYW1lOworCXVuc2lnbmVkIGludCBvbGRfbW9kZSwgbmV3X21vZGU7CisJaW50IGlzX25ldywgaXNfZGVsZXRlOwkvKiAtMSA9IHVua25vd24sIDAgPSBmYWxzZSwgMSA9IHRydWUgKi8KKwlpbnQgcmVqZWN0ZWQ7CisJdW5zaWduZWQgd3NfcnVsZTsKKwlpbnQgbGluZXNfYWRkZWQsIGxpbmVzX2RlbGV0ZWQ7CisJaW50IHNjb3JlOworCWludCBleHRlbnNpb25fbGluZW5yOyAvKiBmaXJzdCBsaW5lIHNwZWNpZnlpbmcgZGVsZXRlL25ldy9yZW5hbWUvY29weSAqLworCXVuc2lnbmVkIGludCBpc190b3BsZXZlbF9yZWxhdGl2ZToxOworCXVuc2lnbmVkIGludCBpbmFjY3VyYXRlX2VvZjoxOworCXVuc2lnbmVkIGludCBpc19iaW5hcnk6MTsKKwl1bnNpZ25lZCBpbnQgaXNfY29weToxOworCXVuc2lnbmVkIGludCBpc19yZW5hbWU6MTsKKwl1bnNpZ25lZCBpbnQgcmVjb3VudDoxOworCXVuc2lnbmVkIGludCBjb25mbGljdGVkX3RocmVld2F5OjE7CisJdW5zaWduZWQgaW50IGRpcmVjdF90b190aHJlZXdheToxOworCXVuc2lnbmVkIGludCBjcmxmX2luX29sZDoxOworCXN0cnVjdCBmcmFnbWVudCAqZnJhZ21lbnRzOworCWNoYXIgKnJlc3VsdDsKKwlzaXplX3QgcmVzdWx0c2l6ZTsKKwljaGFyIG9sZF9vaWRfcHJlZml4W0dJVF9NQVhfSEVYU1ogKyAxXTsKKwljaGFyIG5ld19vaWRfcHJlZml4W0dJVF9NQVhfSEVYU1ogKyAxXTsKKwlzdHJ1Y3QgcGF0Y2ggKm5leHQ7CisKKwkvKiB0aHJlZS13YXkgZmFsbGJhY2sgcmVzdWx0ICovCisJc3RydWN0IG9iamVjdF9pZCB0aHJlZXdheV9zdGFnZVszXTsKK307CisKK2ludCBhcHBseV9wYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCXN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQlpbnQgKmZvcmNlX2FwcGx5LCBpbnQgKm9wdGlvbnMsCisJCQljb25zdCBjaGFyICogY29uc3QgKmFwcGx5X3VzYWdlKTsKK2ludCBpbml0X2FwcGx5X3N0YXRlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCSAgICAgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCSAgICAgY29uc3QgY2hhciAqcHJlZml4KTsKK3ZvaWQgY2xlYXJfYXBwbHlfc3RhdGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSk7CitpbnQgY2hlY2tfYXBwbHlfc3RhdGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgaW50IGZvcmNlX2FwcGx5KTsKKworLyoKKyAqIFBhcnNlIGEgZ2l0IGRpZmYgaGVhZGVyLCBzdGFydGluZyBhdCBsaW5lLiAgRmlsbHMgdGhlIHJlbGV2YW50CisgKiBtZXRhZGF0YSBpbmZvcm1hdGlvbiBpbiAnc3RydWN0IHBhdGNoJy4KKyAqCisgKiBSZXR1cm5zIC0xIG9uIGZhaWx1cmUsIHRoZSBsZW5ndGggb2YgdGhlIHBhcnNlZCBoZWFkZXIgb3RoZXJ3aXNlLgorICovCitpbnQgcGFyc2VfZ2l0X2RpZmZfaGVhZGVyKHN0cnVjdCBzdHJidWYgKnJvb3QsCisJCQkgIGludCAqbGluZW5yLAorCQkJICBpbnQgcF92YWx1ZSwKKwkJCSAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgaW50IGxlbiwKKwkJCSAgdW5zaWduZWQgaW50IHNpemUsCisJCQkgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpOworCisvKgorICogU29tZSBhc3BlY3RzIG9mIHRoZSBhcHBseSBiZWhhdmlvciBhcmUgY29udHJvbGxlZCBieSB0aGUgZm9sbG93aW5nCisgKiBiaXRzIGluIHRoZSAib3B0aW9ucyIgcGFyYW1ldGVyIHBhc3NlZCB0byBhcHBseV9hbGxfcGF0Y2hlcygpLgorICovCisjZGVmaW5lIEFQUExZX09QVF9JTkFDQ1VSQVRFX0VPRgkoMTw8MCkgLyogYWNjZXB0IGluYWNjdXJhdGUgZW9mICovCisjZGVmaW5lIEFQUExZX09QVF9SRUNPVU5UCQkoMTw8MSkgLyogYWNjZXB0IGluYWNjdXJhdGUgbGluZSBjb3VudCAqLworCitpbnQgYXBwbHlfYWxsX3BhdGNoZXMoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJICAgICAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkgICAgICBpbnQgb3B0aW9ucyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaGl2ZS10YXIuYyBiL2FyY2hpdmUtdGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNlZWMzNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2hpdmUtdGFyLmMKQEAgLTAsMCArMSw1MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUmVuZSBTY2hhcmZlCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInRhci5oIgorI2luY2x1ZGUgImFyY2hpdmUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCisjZGVmaW5lIFJFQ09SRFNJWkUJKDUxMikKKyNkZWZpbmUgQkxPQ0tTSVpFCShSRUNPUkRTSVpFICogMjApCisKK3N0YXRpYyBjaGFyIGJsb2NrW0JMT0NLU0laRV07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisKK3N0YXRpYyBpbnQgdGFyX3VtYXNrID0gMDAyOworCitzdGF0aWMgaW50IHdyaXRlX3Rhcl9maWx0ZXJfYXJjaGl2ZShjb25zdCBzdHJ1Y3QgYXJjaGl2ZXIgKmFyLAorCQkJCSAgICBzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncyk7CisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYXggdmFsdWUgdGhhdCBhIHVzdGFyIHNpemUgaGVhZGVyIGNhbiBzcGVjaWZ5LCBhcyBpdCBpcyBmaXhlZAorICogYXQgMTEgb2N0YWwgZGlnaXRzLiBQT1NJWCBzcGVjaWZpZXMgdGhhdCB3ZSBzd2l0Y2ggdG8gZXh0ZW5kZWQgaGVhZGVycyBhdAorICogdGhpcyBzaXplLgorICoKKyAqIExpa2V3aXNlIGZvciB0aGUgbXRpbWUgKHdoaWNoIGhhcHBlbnMgdG8gdXNlIGEgYnVmZmVyIG9mIHRoZSBzYW1lIHNpemUpLgorICovCisjaWYgVUxPTkdfTUFYID09IDB4RkZGRkZGRkYKKyNkZWZpbmUgVVNUQVJfTUFYX1NJWkUgVUxPTkdfTUFYCisjZWxzZQorI2RlZmluZSBVU1RBUl9NQVhfU0laRSAwNzc3Nzc3Nzc3NzdVTAorI2VuZGlmCisjaWYgVElNRV9NQVggPT0gMHhGRkZGRkZGRgorI2RlZmluZSBVU1RBUl9NQVhfTVRJTUUgVElNRV9NQVgKKyNlbHNlCisjZGVmaW5lIFVTVEFSX01BWF9NVElNRSAwNzc3Nzc3Nzc3NzdVTEwKKyNlbmRpZgorCisvKiB3cml0ZXMgb3V0IHRoZSB3aG9sZSBibG9jaywgYnV0IG9ubHkgaWYgaXQgaXMgZnVsbCAqLworc3RhdGljIHZvaWQgd3JpdGVfaWZfbmVlZGVkKHZvaWQpCit7CisJaWYgKG9mZnNldCA9PSBCTE9DS1NJWkUpIHsKKwkJd3JpdGVfb3JfZGllKDEsIGJsb2NrLCBCTE9DS1NJWkUpOworCQlvZmZzZXQgPSAwOworCX0KK30KKworLyoKKyAqIHF1ZXVlcyB1cCB3cml0ZXMsIHNvIHRoYXQgYWxsIG91ciB3cml0ZSgyKSBjYWxscyB3cml0ZSBleGFjdGx5IG9uZQorICogZnVsbCBibG9jazsgcGFkcyB3cml0ZXMgdG8gUkVDT1JEU0laRQorICovCitzdGF0aWMgdm9pZCBkb193cml0ZV9ibG9ja2VkKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwljb25zdCBjaGFyICpidWYgPSBkYXRhOworCisJaWYgKG9mZnNldCkgeworCQl1bnNpZ25lZCBsb25nIGNodW5rID0gQkxPQ0tTSVpFIC0gb2Zmc2V0OworCQlpZiAoc2l6ZSA8IGNodW5rKQorCQkJY2h1bmsgPSBzaXplOworCQltZW1jcHkoYmxvY2sgKyBvZmZzZXQsIGJ1ZiwgY2h1bmspOworCQlzaXplIC09IGNodW5rOworCQlvZmZzZXQgKz0gY2h1bms7CisJCWJ1ZiArPSBjaHVuazsKKwkJd3JpdGVfaWZfbmVlZGVkKCk7CisJfQorCXdoaWxlIChzaXplID49IEJMT0NLU0laRSkgeworCQl3cml0ZV9vcl9kaWUoMSwgYnVmLCBCTE9DS1NJWkUpOworCQlzaXplIC09IEJMT0NLU0laRTsKKwkJYnVmICs9IEJMT0NLU0laRTsKKwl9CisJaWYgKHNpemUpIHsKKwkJbWVtY3B5KGJsb2NrICsgb2Zmc2V0LCBidWYsIHNpemUpOworCQlvZmZzZXQgKz0gc2l6ZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9yZWNvcmQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRhaWw7CisJdGFpbCA9IG9mZnNldCAlIFJFQ09SRFNJWkU7CisJaWYgKHRhaWwpICB7CisJCW1lbXNldChibG9jayArIG9mZnNldCwgMCwgUkVDT1JEU0laRSAtIHRhaWwpOworCQlvZmZzZXQgKz0gUkVDT1JEU0laRSAtIHRhaWw7CisJfQorCXdyaXRlX2lmX25lZWRlZCgpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9ibG9ja2VkKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlkb193cml0ZV9ibG9ja2VkKGRhdGEsIHNpemUpOworCWZpbmlzaF9yZWNvcmQoKTsKK30KKworLyoKKyAqIFRoZSBlbmQgb2YgdGFyIGFyY2hpdmVzIGlzIG1hcmtlZCBieSAyKjUxMiBudWwgYnl0ZXMgYW5kIGFmdGVyIHRoYXQKKyAqIGZvbGxvd3MgdGhlIHJlc3Qgb2YgdGhlIGJsb2NrIChpZiBhbnkpLgorICovCitzdGF0aWMgdm9pZCB3cml0ZV90cmFpbGVyKHZvaWQpCit7CisJaW50IHRhaWwgPSBCTE9DS1NJWkUgLSBvZmZzZXQ7CisJbWVtc2V0KGJsb2NrICsgb2Zmc2V0LCAwLCB0YWlsKTsKKwl3cml0ZV9vcl9kaWUoMSwgYmxvY2ssIEJMT0NLU0laRSk7CisJaWYgKHRhaWwgPCAyICogUkVDT1JEU0laRSkgeworCQltZW1zZXQoYmxvY2ssIDAsIG9mZnNldCk7CisJCXdyaXRlX29yX2RpZSgxLCBibG9jaywgQkxPQ0tTSVpFKTsKKwl9Cit9CisKKy8qCisgKiBxdWV1ZXMgdXAgd3JpdGVzLCBzbyB0aGF0IGFsbCBvdXIgd3JpdGUoMikgY2FsbHMgd3JpdGUgZXhhY3RseSBvbmUKKyAqIGZ1bGwgYmxvY2s7IHBhZHMgd3JpdGVzIHRvIFJFQ09SRFNJWkUKKyAqLworc3RhdGljIGludCBzdHJlYW1fYmxvY2tlZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBnaXRfaXN0cmVhbSAqc3Q7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgc3o7CisJY2hhciBidWZbQkxPQ0tTSVpFXTsKKwlzc2l6ZV90IHJlYWRsZW47CisKKwlzdCA9IG9wZW5faXN0cmVhbShyLCBvaWQsICZ0eXBlLCAmc3osIE5VTEwpOworCWlmICghc3QpCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3Qgc3RyZWFtIGJsb2IgJXMiKSwgb2lkX3RvX2hleChvaWQpKTsKKwlmb3IgKDs7KSB7CisJCXJlYWRsZW4gPSByZWFkX2lzdHJlYW0oc3QsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlpZiAocmVhZGxlbiA8PSAwKQorCQkJYnJlYWs7CisJCWRvX3dyaXRlX2Jsb2NrZWQoYnVmLCByZWFkbGVuKTsKKwl9CisJY2xvc2VfaXN0cmVhbShzdCk7CisJaWYgKCFyZWFkbGVuKQorCQlmaW5pc2hfcmVjb3JkKCk7CisJcmV0dXJuIHJlYWRsZW47Cit9CisKKy8qCisgKiBwYXggZXh0ZW5kZWQgaGVhZGVyIHJlY29yZHMgaGF2ZSB0aGUgZm9ybWF0ICIldSAlcz0lc1xuIi4gICV1IGNvbnRhaW5zCisgKiB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUgc3RyaW5nIChpbmNsdWRpbmcgdGhlICV1KSwgdGhlIGZpcnN0ICVzIGlzIHRoZQorICoga2V5d29yZCwgdGhlIHNlY29uZCBvbmUgaXMgdGhlIHZhbHVlLiAgVGhpcyBmdW5jdGlvbiBjb25zdHJ1Y3RzIHN1Y2ggYQorICogc3RyaW5nIGFuZCBhcHBlbmRzIGl0IHRvIGEgc3RydWN0IHN0cmJ1Zi4KKyAqLworc3RhdGljIHZvaWQgc3RyYnVmX2FwcGVuZF9leHRfaGVhZGVyKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICprZXl3b3JkLAorCQkJCSAgICAgY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCB2YWx1ZWxlbikKK3sKKwlzaXplX3Qgb3JpZ19sZW4gPSBzYi0+bGVuOworCXNpemVfdCBsZW4sIHRtcDsKKworCS8qICIldSAlcz0lc1xuIiAqLworCWxlbiA9IDEgKyAxICsgc3RybGVuKGtleXdvcmQpICsgMSArIHZhbHVlbGVuICsgMTsKKwlmb3IgKHRtcCA9IDE7IGxlbiAvIDEwID49IHRtcDsgdG1wICo9IDEwKQorCQlsZW4rKzsKKworCXN0cmJ1Zl9ncm93KHNiLCBsZW4pOworCXN0cmJ1Zl9hZGRmKHNiLCAiJSJQUkl1TUFYIiAlcz0iLCAodWludG1heF90KWxlbiwga2V5d29yZCk7CisJc3RyYnVmX2FkZChzYiwgdmFsdWUsIHZhbHVlbGVuKTsKKwlzdHJidWZfYWRkY2goc2IsICdcbicpOworCisJaWYgKGxlbiAhPSBzYi0+bGVuIC0gb3JpZ19sZW4pCisJCUJVRygicGF4IGV4dGVuZGVkIGhlYWRlciBsZW5ndGggbWlzY2FsY3VsYXRlZCBhcyAlIlBSSXVNQVgKKwkJICAgICIsIHNob3VsZCBiZSAlIlBSSXVNQVgsCisJCSAgICAodWludG1heF90KWxlbiwgKHVpbnRtYXhfdCkoc2ItPmxlbiAtIG9yaWdfbGVuKSk7Cit9CisKKy8qCisgKiBMaWtlIHN0cmJ1Zl9hcHBlbmRfZXh0X2hlYWRlciwgYnV0IGZvciBudW1lcmljIHZhbHVlcy4KKyAqLworc3RhdGljIHZvaWQgc3RyYnVmX2FwcGVuZF9leHRfaGVhZGVyX3VpbnQoc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJCSAgY29uc3QgY2hhciAqa2V5d29yZCwKKwkJCQkJICB1aW50bWF4X3QgdmFsdWUpCit7CisJY2hhciBidWZbNDBdOyAvKiBiaWcgZW5vdWdoIGZvciAyXjEyOCBpbiBkZWNpbWFsLCBwbHVzIE5VTCAqLworCWludCBsZW47CisKKwlsZW4gPSB4c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUiUFJJdU1BWCwgdmFsdWUpOworCXN0cmJ1Zl9hcHBlbmRfZXh0X2hlYWRlcihzYiwga2V5d29yZCwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHVzdGFyX2hlYWRlcl9jaGtzdW0oY29uc3Qgc3RydWN0IHVzdGFyX2hlYWRlciAqaGVhZGVyKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKWhlYWRlcjsKKwl1bnNpZ25lZCBpbnQgY2hrc3VtID0gMDsKKwl3aGlsZSAocCA8IChjb25zdCB1bnNpZ25lZCBjaGFyICopaGVhZGVyLT5jaGtzdW0pCisJCWNoa3N1bSArPSAqcCsrOworCWNoa3N1bSArPSBzaXplb2YoaGVhZGVyLT5jaGtzdW0pICogJyAnOworCXAgKz0gc2l6ZW9mKGhlYWRlci0+Y2hrc3VtKTsKKwl3aGlsZSAocCA8IChjb25zdCB1bnNpZ25lZCBjaGFyICopaGVhZGVyICsgc2l6ZW9mKHN0cnVjdCB1c3Rhcl9oZWFkZXIpKQorCQljaGtzdW0gKz0gKnArKzsKKwlyZXR1cm4gY2hrc3VtOworfQorCitzdGF0aWMgc2l6ZV90IGdldF9wYXRoX3ByZWZpeChjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbiwgc2l6ZV90IG1heGxlbikKK3sKKwlzaXplX3QgaSA9IHBhdGhsZW47CisJaWYgKGkgPiAxICYmIHBhdGhbaSAtIDFdID09ICcvJykKKwkJaS0tOworCWlmIChpID4gbWF4bGVuKQorCQlpID0gbWF4bGVuOworCWRvIHsKKwkJaS0tOworCX0gd2hpbGUgKGkgPiAwICYmIHBhdGhbaV0gIT0gJy8nKTsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9oZWFkZXIoc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MsCisJCQkgICBzdHJ1Y3QgdXN0YXJfaGVhZGVyICpoZWFkZXIsCisJCQkgICB1bnNpZ25lZCBpbnQgbW9kZSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXhzbnByaW50ZihoZWFkZXItPm1vZGUsIHNpemVvZihoZWFkZXItPm1vZGUpLCAiJTA3byIsIG1vZGUgJiAwNzc3Nyk7CisJeHNucHJpbnRmKGhlYWRlci0+c2l6ZSwgc2l6ZW9mKGhlYWRlci0+c2l6ZSksICIlMDExIlBSSW9NQVggLCBTX0lTUkVHKG1vZGUpID8gKHVpbnRtYXhfdClzaXplIDogKHVpbnRtYXhfdCkwKTsKKwl4c25wcmludGYoaGVhZGVyLT5tdGltZSwgc2l6ZW9mKGhlYWRlci0+bXRpbWUpLCAiJTAxMWxvIiwgKHVuc2lnbmVkIGxvbmcpIGFyZ3MtPnRpbWUpOworCisJeHNucHJpbnRmKGhlYWRlci0+dWlkLCBzaXplb2YoaGVhZGVyLT51aWQpLCAiJTA3byIsIDApOworCXhzbnByaW50ZihoZWFkZXItPmdpZCwgc2l6ZW9mKGhlYWRlci0+Z2lkKSwgIiUwN28iLCAwKTsKKwlzdHJsY3B5KGhlYWRlci0+dW5hbWUsICJyb290Iiwgc2l6ZW9mKGhlYWRlci0+dW5hbWUpKTsKKwlzdHJsY3B5KGhlYWRlci0+Z25hbWUsICJyb290Iiwgc2l6ZW9mKGhlYWRlci0+Z25hbWUpKTsKKwl4c25wcmludGYoaGVhZGVyLT5kZXZtYWpvciwgc2l6ZW9mKGhlYWRlci0+ZGV2bWFqb3IpLCAiJTA3byIsIDApOworCXhzbnByaW50ZihoZWFkZXItPmRldm1pbm9yLCBzaXplb2YoaGVhZGVyLT5kZXZtaW5vciksICIlMDdvIiwgMCk7CisKKwltZW1jcHkoaGVhZGVyLT5tYWdpYywgInVzdGFyIiwgNik7CisJbWVtY3B5KGhlYWRlci0+dmVyc2lvbiwgIjAwIiwgMik7CisKKwl4c25wcmludGYoaGVhZGVyLT5jaGtzdW0sIHNpemVvZihoZWFkZXItPmNoa3N1bSksICIlMDdvIiwgdXN0YXJfaGVhZGVyX2Noa3N1bShoZWFkZXIpKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfZXh0ZW5kZWRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLAorCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgY29uc3Qgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IHVzdGFyX2hlYWRlciBoZWFkZXI7CisJdW5zaWduZWQgaW50IG1vZGU7CisJbWVtc2V0KCZoZWFkZXIsIDAsIHNpemVvZihoZWFkZXIpKTsKKwkqaGVhZGVyLnR5cGVmbGFnID0gVFlQRUZMQUdfRVhUX0hFQURFUjsKKwltb2RlID0gMDEwMDY2NjsKKwl4c25wcmludGYoaGVhZGVyLm5hbWUsIHNpemVvZihoZWFkZXIubmFtZSksICIlcy5wYXhoZWFkZXIiLCBvaWRfdG9faGV4KG9pZCkpOworCXByZXBhcmVfaGVhZGVyKGFyZ3MsICZoZWFkZXIsIG1vZGUsIHNpemUpOworCXdyaXRlX2Jsb2NrZWQoJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOworCXdyaXRlX2Jsb2NrZWQoYnVmZmVyLCBzaXplKTsKK30KKworc3RhdGljIGludCB3cml0ZV90YXJfZW50cnkoc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbiwKKwkJCSAgIHVuc2lnbmVkIGludCBtb2RlKQoreworCXN0cnVjdCB1c3Rhcl9oZWFkZXIgaGVhZGVyOworCXN0cnVjdCBzdHJidWYgZXh0X2hlYWRlciA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGludCBvbGRfbW9kZSA9IG1vZGU7CisJdW5zaWduZWQgbG9uZyBzaXplLCBzaXplX2luX2hlYWRlcjsKKwl2b2lkICpidWZmZXI7CisJaW50IGVyciA9IDA7CisKKwltZW1zZXQoJmhlYWRlciwgMCwgc2l6ZW9mKGhlYWRlcikpOworCisJaWYgKFNfSVNESVIobW9kZSkgfHwgU19JU0dJVExJTksobW9kZSkpIHsKKwkJKmhlYWRlci50eXBlZmxhZyA9IFRZUEVGTEFHX0RJUjsKKwkJbW9kZSA9IChtb2RlIHwgMDc3NykgJiB+dGFyX3VtYXNrOworCX0gZWxzZSBpZiAoU19JU0xOSyhtb2RlKSkgeworCQkqaGVhZGVyLnR5cGVmbGFnID0gVFlQRUZMQUdfTE5LOworCQltb2RlIHw9IDA3Nzc7CisJfSBlbHNlIGlmIChTX0lTUkVHKG1vZGUpKSB7CisJCSpoZWFkZXIudHlwZWZsYWcgPSBUWVBFRkxBR19SRUc7CisJCW1vZGUgPSAobW9kZSB8ICgobW9kZSAmIDAxMDApID8gMDc3NyA6IDA2NjYpKSAmIH50YXJfdW1hc2s7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGVycm9yKF8oInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiKSwKKwkJCSAgICAgbW9kZSwgb2lkX3RvX2hleChvaWQpKTsKKwl9CisJaWYgKHBhdGhsZW4gPiBzaXplb2YoaGVhZGVyLm5hbWUpKSB7CisJCXNpemVfdCBwbGVuID0gZ2V0X3BhdGhfcHJlZml4KHBhdGgsIHBhdGhsZW4sCisJCQkJCSAgICAgIHNpemVvZihoZWFkZXIucHJlZml4KSk7CisJCXNpemVfdCByZXN0ID0gcGF0aGxlbiAtIHBsZW4gLSAxOworCQlpZiAocGxlbiA+IDAgJiYgcmVzdCA8PSBzaXplb2YoaGVhZGVyLm5hbWUpKSB7CisJCQltZW1jcHkoaGVhZGVyLnByZWZpeCwgcGF0aCwgcGxlbik7CisJCQltZW1jcHkoaGVhZGVyLm5hbWUsIHBhdGggKyBwbGVuICsgMSwgcmVzdCk7CisJCX0gZWxzZSB7CisJCQl4c25wcmludGYoaGVhZGVyLm5hbWUsIHNpemVvZihoZWFkZXIubmFtZSksICIlcy5kYXRhIiwKKwkJCQkgIG9pZF90b19oZXgob2lkKSk7CisJCQlzdHJidWZfYXBwZW5kX2V4dF9oZWFkZXIoJmV4dF9oZWFkZXIsICJwYXRoIiwKKwkJCQkJCSBwYXRoLCBwYXRobGVuKTsKKwkJfQorCX0gZWxzZQorCQltZW1jcHkoaGVhZGVyLm5hbWUsIHBhdGgsIHBhdGhsZW4pOworCisJaWYgKFNfSVNSRUcobW9kZSkgJiYgIWFyZ3MtPmNvbnZlcnQgJiYKKwkgICAgb2lkX29iamVjdF9pbmZvKGFyZ3MtPnJlcG8sIG9pZCwgJnNpemUpID09IE9CSl9CTE9CICYmCisJICAgIHNpemUgPiBiaWdfZmlsZV90aHJlc2hvbGQpCisJCWJ1ZmZlciA9IE5VTEw7CisJZWxzZSBpZiAoU19JU0xOSyhtb2RlKSB8fCBTX0lTUkVHKG1vZGUpKSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJYnVmZmVyID0gb2JqZWN0X2ZpbGVfdG9fYXJjaGl2ZShhcmdzLCBwYXRoLCBvaWQsIG9sZF9tb2RlLCAmdHlwZSwgJnNpemUpOworCQlpZiAoIWJ1ZmZlcikKKwkJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcmVhZCAlcyIpLCBvaWRfdG9faGV4KG9pZCkpOworCX0gZWxzZSB7CisJCWJ1ZmZlciA9IE5VTEw7CisJCXNpemUgPSAwOworCX0KKworCWlmIChTX0lTTE5LKG1vZGUpKSB7CisJCWlmIChzaXplID4gc2l6ZW9mKGhlYWRlci5saW5rbmFtZSkpIHsKKwkJCXhzbnByaW50ZihoZWFkZXIubGlua25hbWUsIHNpemVvZihoZWFkZXIubGlua25hbWUpLAorCQkJCSAgInNlZSAlcy5wYXhoZWFkZXIiLCBvaWRfdG9faGV4KG9pZCkpOworCQkJc3RyYnVmX2FwcGVuZF9leHRfaGVhZGVyKCZleHRfaGVhZGVyLCAibGlua3BhdGgiLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZSk7CisJCX0gZWxzZQorCQkJbWVtY3B5KGhlYWRlci5saW5rbmFtZSwgYnVmZmVyLCBzaXplKTsKKwl9CisKKwlzaXplX2luX2hlYWRlciA9IHNpemU7CisJaWYgKFNfSVNSRUcobW9kZSkgJiYgc2l6ZSA+IFVTVEFSX01BWF9TSVpFKSB7CisJCXNpemVfaW5faGVhZGVyID0gMDsKKwkJc3RyYnVmX2FwcGVuZF9leHRfaGVhZGVyX3VpbnQoJmV4dF9oZWFkZXIsICJzaXplIiwgc2l6ZSk7CisJfQorCisJcHJlcGFyZV9oZWFkZXIoYXJncywgJmhlYWRlciwgbW9kZSwgc2l6ZV9pbl9oZWFkZXIpOworCisJaWYgKGV4dF9oZWFkZXIubGVuID4gMCkgeworCQl3cml0ZV9leHRlbmRlZF9oZWFkZXIoYXJncywgb2lkLCBleHRfaGVhZGVyLmJ1ZiwKKwkJCQkgICAgICBleHRfaGVhZGVyLmxlbik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZleHRfaGVhZGVyKTsKKwl3cml0ZV9ibG9ja2VkKCZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKKwlpZiAoU19JU1JFRyhtb2RlKSAmJiBzaXplID4gMCkgeworCQlpZiAoYnVmZmVyKQorCQkJd3JpdGVfYmxvY2tlZChidWZmZXIsIHNpemUpOworCQllbHNlCisJCQllcnIgPSBzdHJlYW1fYmxvY2tlZChhcmdzLT5yZXBvLCBvaWQpOworCX0KKwlmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfZ2xvYmFsX2V4dGVuZGVkX2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncykKK3sKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSBhcmdzLT5jb21taXRfb2lkOworCXN0cnVjdCBzdHJidWYgZXh0X2hlYWRlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCB1c3Rhcl9oZWFkZXIgaGVhZGVyOworCXVuc2lnbmVkIGludCBtb2RlOworCisJaWYgKG9pZCkKKwkJc3RyYnVmX2FwcGVuZF9leHRfaGVhZGVyKCZleHRfaGVhZGVyLCAiY29tbWVudCIsCisJCQkJCSBvaWRfdG9faGV4KG9pZCksCisJCQkJCSB0aGVfaGFzaF9hbGdvLT5oZXhzeik7CisJaWYgKGFyZ3MtPnRpbWUgPiBVU1RBUl9NQVhfTVRJTUUpIHsKKwkJc3RyYnVmX2FwcGVuZF9leHRfaGVhZGVyX3VpbnQoJmV4dF9oZWFkZXIsICJtdGltZSIsCisJCQkJCSAgICAgIGFyZ3MtPnRpbWUpOworCQlhcmdzLT50aW1lID0gVVNUQVJfTUFYX01USU1FOworCX0KKworCWlmICghZXh0X2hlYWRlci5sZW4pCisJCXJldHVybjsKKworCW1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7CisJKmhlYWRlci50eXBlZmxhZyA9IFRZUEVGTEFHX0dMT0JBTF9IRUFERVI7CisJbW9kZSA9IDAxMDA2NjY7CisJeHNucHJpbnRmKGhlYWRlci5uYW1lLCBzaXplb2YoaGVhZGVyLm5hbWUpLCAicGF4X2dsb2JhbF9oZWFkZXIiKTsKKwlwcmVwYXJlX2hlYWRlcihhcmdzLCAmaGVhZGVyLCBtb2RlLCBleHRfaGVhZGVyLmxlbik7CisJd3JpdGVfYmxvY2tlZCgmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisJd3JpdGVfYmxvY2tlZChleHRfaGVhZGVyLmJ1ZiwgZXh0X2hlYWRlci5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZleHRfaGVhZGVyKTsKK30KKworc3RhdGljIHN0cnVjdCBhcmNoaXZlciAqKnRhcl9maWx0ZXJzOworc3RhdGljIGludCBucl90YXJfZmlsdGVyczsKK3N0YXRpYyBpbnQgYWxsb2NfdGFyX2ZpbHRlcnM7CisKK3N0YXRpYyBzdHJ1Y3QgYXJjaGl2ZXIgKmZpbmRfdGFyX2ZpbHRlcihjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBucl90YXJfZmlsdGVyczsgaSsrKSB7CisJCXN0cnVjdCBhcmNoaXZlciAqYXIgPSB0YXJfZmlsdGVyc1tpXTsKKwkJaWYgKCFzdHJuY21wKGFyLT5uYW1lLCBuYW1lLCBsZW4pICYmICFhci0+bmFtZVtsZW5dKQorCQkJcmV0dXJuIGFyOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCB0YXJfZmlsdGVyX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhcmNoaXZlciAqYXI7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICp0eXBlOworCXNpemVfdCBuYW1lbGVuOworCisJaWYgKHBhcnNlX2NvbmZpZ19rZXkodmFyLCAidGFyIiwgJm5hbWUsICZuYW1lbGVuLCAmdHlwZSkgPCAwIHx8ICFuYW1lKQorCQlyZXR1cm4gMDsKKworCWFyID0gZmluZF90YXJfZmlsdGVyKG5hbWUsIG5hbWVsZW4pOworCWlmICghYXIpIHsKKwkJYXIgPSB4Y2FsbG9jKDEsIHNpemVvZigqYXIpKTsKKwkJYXItPm5hbWUgPSB4bWVtZHVweihuYW1lLCBuYW1lbGVuKTsKKwkJYXItPndyaXRlX2FyY2hpdmUgPSB3cml0ZV90YXJfZmlsdGVyX2FyY2hpdmU7CisJCWFyLT5mbGFncyA9IEFSQ0hJVkVSX1dBTlRfQ09NUFJFU1NJT05fTEVWRUxTOworCQlBTExPQ19HUk9XKHRhcl9maWx0ZXJzLCBucl90YXJfZmlsdGVycyArIDEsIGFsbG9jX3Rhcl9maWx0ZXJzKTsKKwkJdGFyX2ZpbHRlcnNbbnJfdGFyX2ZpbHRlcnMrK10gPSBhcjsKKwl9CisKKwlpZiAoIXN0cmNtcCh0eXBlLCAiY29tbWFuZCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJZnJlZShhci0+ZGF0YSk7CisJCWFyLT5kYXRhID0geHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh0eXBlLCAicmVtb3RlIikpIHsKKwkJaWYgKGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSkKKwkJCWFyLT5mbGFncyB8PSBBUkNISVZFUl9SRU1PVEU7CisJCWVsc2UKKwkJCWFyLT5mbGFncyAmPSB+QVJDSElWRVJfUkVNT1RFOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfdGFyX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJ0YXIudW1hc2siKSkgeworCQlpZiAodmFsdWUgJiYgIXN0cmNtcCh2YWx1ZSwgInVzZXIiKSkgeworCQkJdGFyX3VtYXNrID0gdW1hc2soMCk7CisJCQl1bWFzayh0YXJfdW1hc2spOworCQl9IGVsc2UgeworCQkJdGFyX3VtYXNrID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHRhcl9maWx0ZXJfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGludCB3cml0ZV90YXJfYXJjaGl2ZShjb25zdCBzdHJ1Y3QgYXJjaGl2ZXIgKmFyLAorCQkJICAgICBzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncykKK3sKKwlpbnQgZXJyID0gMDsKKworCXdyaXRlX2dsb2JhbF9leHRlbmRlZF9oZWFkZXIoYXJncyk7CisJZXJyID0gd3JpdGVfYXJjaGl2ZV9lbnRyaWVzKGFyZ3MsIHdyaXRlX3Rhcl9lbnRyeSk7CisJaWYgKCFlcnIpCisJCXdyaXRlX3RyYWlsZXIoKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHdyaXRlX3Rhcl9maWx0ZXJfYXJjaGl2ZShjb25zdCBzdHJ1Y3QgYXJjaGl2ZXIgKmFyLAorCQkJCSAgICBzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGNtZCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGZpbHRlciA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICphcmd2WzJdOworCWludCByOworCisJaWYgKCFhci0+ZGF0YSkKKwkJQlVHKCJ0YXItZmlsdGVyIGFyY2hpdmVyIGNhbGxlZCB3aXRoIG5vIGZpbHRlciBkZWZpbmVkIik7CisKKwlzdHJidWZfYWRkc3RyKCZjbWQsIGFyLT5kYXRhKTsKKwlpZiAoYXJncy0+Y29tcHJlc3Npb25fbGV2ZWwgPj0gMCkKKwkJc3RyYnVmX2FkZGYoJmNtZCwgIiAtJWQiLCBhcmdzLT5jb21wcmVzc2lvbl9sZXZlbCk7CisKKwlhcmd2WzBdID0gY21kLmJ1ZjsKKwlhcmd2WzFdID0gTlVMTDsKKwlmaWx0ZXIuYXJndiA9IGFyZ3Y7CisJZmlsdGVyLnVzZV9zaGVsbCA9IDE7CisJZmlsdGVyLmluID0gLTE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmZmlsdGVyKSA8IDApCisJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gc3RhcnQgJyVzJyBmaWx0ZXIiKSwgYXJndlswXSk7CisJY2xvc2UoMSk7CisJaWYgKGR1cDIoZmlsdGVyLmluLCAxKSA8IDApCisJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gcmVkaXJlY3QgZGVzY3JpcHRvciIpKTsKKwljbG9zZShmaWx0ZXIuaW4pOworCisJciA9IHdyaXRlX3Rhcl9hcmNoaXZlKGFyLCBhcmdzKTsKKworCWNsb3NlKDEpOworCWlmIChmaW5pc2hfY29tbWFuZCgmZmlsdGVyKSAhPSAwKQorCQlkaWUoXygiJyVzJyBmaWx0ZXIgcmVwb3J0ZWQgZXJyb3IiKSwgYXJndlswXSk7CisKKwlzdHJidWZfcmVsZWFzZSgmY21kKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHN0cnVjdCBhcmNoaXZlciB0YXJfYXJjaGl2ZXIgPSB7CisJInRhciIsCisJd3JpdGVfdGFyX2FyY2hpdmUsCisJQVJDSElWRVJfUkVNT1RFCit9OworCit2b2lkIGluaXRfdGFyX2FyY2hpdmVyKHZvaWQpCit7CisJaW50IGk7CisJcmVnaXN0ZXJfYXJjaGl2ZXIoJnRhcl9hcmNoaXZlcik7CisKKwl0YXJfZmlsdGVyX2NvbmZpZygidGFyLnRnei5jb21tYW5kIiwgImd6aXAgLWNuIiwgTlVMTCk7CisJdGFyX2ZpbHRlcl9jb25maWcoInRhci50Z3oucmVtb3RlIiwgInRydWUiLCBOVUxMKTsKKwl0YXJfZmlsdGVyX2NvbmZpZygidGFyLnRhci5nei5jb21tYW5kIiwgImd6aXAgLWNuIiwgTlVMTCk7CisJdGFyX2ZpbHRlcl9jb25maWcoInRhci50YXIuZ3oucmVtb3RlIiwgInRydWUiLCBOVUxMKTsKKwlnaXRfY29uZmlnKGdpdF90YXJfY29uZmlnLCBOVUxMKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdGFyX2ZpbHRlcnM7IGkrKykgeworCQkvKiBvbWl0IGFueSBmaWx0ZXJzIHRoYXQgbmV2ZXIgaGFkIGEgY29tbWFuZCBjb25maWd1cmVkICovCisJCWlmICh0YXJfZmlsdGVyc1tpXS0+ZGF0YSkKKwkJCXJlZ2lzdGVyX2FyY2hpdmVyKHRhcl9maWx0ZXJzW2ldKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoaXZlLXppcC5jIGIvYXJjaGl2ZS16aXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWY0MjYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaGl2ZS16aXAuYwpAQCAtMCwwICsxLDY2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBSZW5lIFNjaGFyZmUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYXJjaGl2ZS5oIgorI2luY2x1ZGUgInN0cmVhbWluZy5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorCitzdGF0aWMgaW50IHppcF9kYXRlOworc3RhdGljIGludCB6aXBfdGltZTsKKworLyogV2Ugb25seSBjYXJlIGFib3V0IHRoZSAiYnVmIiBwYXJ0IGhlcmUuICovCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiB6aXBfZGlyOworCitzdGF0aWMgdWludG1heF90IHppcF9vZmZzZXQ7CitzdGF0aWMgdWludDY0X3QgemlwX2Rpcl9lbnRyaWVzOworCitzdGF0aWMgdW5zaWduZWQgaW50IG1heF9jcmVhdG9yX3ZlcnNpb247CisKKyNkZWZpbmUgWklQX1NUUkVBTQkoMSA8PCAgMykKKyNkZWZpbmUgWklQX1VURjgJKDEgPDwgMTEpCisKK2VudW0gemlwX21ldGhvZCB7CisJWklQX01FVEhPRF9TVE9SRSA9IDAsCisJWklQX01FVEhPRF9ERUZMQVRFID0gOAorfTsKKworc3RydWN0IHppcF9sb2NhbF9oZWFkZXIgeworCXVuc2lnbmVkIGNoYXIgbWFnaWNbNF07CisJdW5zaWduZWQgY2hhciB2ZXJzaW9uWzJdOworCXVuc2lnbmVkIGNoYXIgZmxhZ3NbMl07CisJdW5zaWduZWQgY2hhciBjb21wcmVzc2lvbl9tZXRob2RbMl07CisJdW5zaWduZWQgY2hhciBtdGltZVsyXTsKKwl1bnNpZ25lZCBjaGFyIG1kYXRlWzJdOworCXVuc2lnbmVkIGNoYXIgY3JjMzJbNF07CisJdW5zaWduZWQgY2hhciBjb21wcmVzc2VkX3NpemVbNF07CisJdW5zaWduZWQgY2hhciBzaXplWzRdOworCXVuc2lnbmVkIGNoYXIgZmlsZW5hbWVfbGVuZ3RoWzJdOworCXVuc2lnbmVkIGNoYXIgZXh0cmFfbGVuZ3RoWzJdOworCXVuc2lnbmVkIGNoYXIgX2VuZFsxXTsKK307CisKK3N0cnVjdCB6aXBfZGF0YV9kZXNjIHsKKwl1bnNpZ25lZCBjaGFyIG1hZ2ljWzRdOworCXVuc2lnbmVkIGNoYXIgY3JjMzJbNF07CisJdW5zaWduZWQgY2hhciBjb21wcmVzc2VkX3NpemVbNF07CisJdW5zaWduZWQgY2hhciBzaXplWzRdOworCXVuc2lnbmVkIGNoYXIgX2VuZFsxXTsKK307CisKK3N0cnVjdCB6aXA2NF9kYXRhX2Rlc2MgeworCXVuc2lnbmVkIGNoYXIgbWFnaWNbNF07CisJdW5zaWduZWQgY2hhciBjcmMzMls0XTsKKwl1bnNpZ25lZCBjaGFyIGNvbXByZXNzZWRfc2l6ZVs4XTsKKwl1bnNpZ25lZCBjaGFyIHNpemVbOF07CisJdW5zaWduZWQgY2hhciBfZW5kWzFdOworfTsKKworc3RydWN0IHppcF9kaXJfdHJhaWxlciB7CisJdW5zaWduZWQgY2hhciBtYWdpY1s0XTsKKwl1bnNpZ25lZCBjaGFyIGRpc2tbMl07CisJdW5zaWduZWQgY2hhciBkaXJlY3Rvcnlfc3RhcnRfZGlza1syXTsKKwl1bnNpZ25lZCBjaGFyIGVudHJpZXNfb25fdGhpc19kaXNrWzJdOworCXVuc2lnbmVkIGNoYXIgZW50cmllc1syXTsKKwl1bnNpZ25lZCBjaGFyIHNpemVbNF07CisJdW5zaWduZWQgY2hhciBvZmZzZXRbNF07CisJdW5zaWduZWQgY2hhciBjb21tZW50X2xlbmd0aFsyXTsKKwl1bnNpZ25lZCBjaGFyIF9lbmRbMV07Cit9OworCitzdHJ1Y3QgemlwX2V4dHJhX210aW1lIHsKKwl1bnNpZ25lZCBjaGFyIG1hZ2ljWzJdOworCXVuc2lnbmVkIGNoYXIgZXh0cmFfc2l6ZVsyXTsKKwl1bnNpZ25lZCBjaGFyIGZsYWdzWzFdOworCXVuc2lnbmVkIGNoYXIgbXRpbWVbNF07CisJdW5zaWduZWQgY2hhciBfZW5kWzFdOworfTsKKworc3RydWN0IHppcDY0X2V4dHJhIHsKKwl1bnNpZ25lZCBjaGFyIG1hZ2ljWzJdOworCXVuc2lnbmVkIGNoYXIgZXh0cmFfc2l6ZVsyXTsKKwl1bnNpZ25lZCBjaGFyIHNpemVbOF07CisJdW5zaWduZWQgY2hhciBjb21wcmVzc2VkX3NpemVbOF07CisJdW5zaWduZWQgY2hhciBfZW5kWzFdOworfTsKKworc3RydWN0IHppcDY0X2Rpcl90cmFpbGVyIHsKKwl1bnNpZ25lZCBjaGFyIG1hZ2ljWzRdOworCXVuc2lnbmVkIGNoYXIgcmVjb3JkX3NpemVbOF07CisJdW5zaWduZWQgY2hhciBjcmVhdG9yX3ZlcnNpb25bMl07CisJdW5zaWduZWQgY2hhciB2ZXJzaW9uWzJdOworCXVuc2lnbmVkIGNoYXIgZGlza1s0XTsKKwl1bnNpZ25lZCBjaGFyIGRpcmVjdG9yeV9zdGFydF9kaXNrWzRdOworCXVuc2lnbmVkIGNoYXIgZW50cmllc19vbl90aGlzX2Rpc2tbOF07CisJdW5zaWduZWQgY2hhciBlbnRyaWVzWzhdOworCXVuc2lnbmVkIGNoYXIgc2l6ZVs4XTsKKwl1bnNpZ25lZCBjaGFyIG9mZnNldFs4XTsKKwl1bnNpZ25lZCBjaGFyIF9lbmRbMV07Cit9OworCitzdHJ1Y3QgemlwNjRfZGlyX3RyYWlsZXJfbG9jYXRvciB7CisJdW5zaWduZWQgY2hhciBtYWdpY1s0XTsKKwl1bnNpZ25lZCBjaGFyIGRpc2tbNF07CisJdW5zaWduZWQgY2hhciBvZmZzZXRbOF07CisJdW5zaWduZWQgY2hhciBudW1iZXJfb2ZfZGlza3NbNF07CisJdW5zaWduZWQgY2hhciBfZW5kWzFdOworfTsKKworLyoKKyAqIE9uIEFSTSwgcGFkZGluZyBpcyBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3QsIHNvIGEgc2ltcGxlCisgKiBzaXplb2Yoc3RydWN0IC4uLikgcmVwb3J0cyB0d28gYnl0ZXMgbW9yZSB0aGFuIHRoZSBwYXlsb2FkIHNpemUKKyAqIHdlJ3JlIGludGVyZXN0ZWQgaW4uCisgKi8KKyNkZWZpbmUgWklQX0xPQ0FMX0hFQURFUl9TSVpFCW9mZnNldG9mKHN0cnVjdCB6aXBfbG9jYWxfaGVhZGVyLCBfZW5kKQorI2RlZmluZSBaSVBfREFUQV9ERVNDX1NJWkUJb2Zmc2V0b2Yoc3RydWN0IHppcF9kYXRhX2Rlc2MsIF9lbmQpCisjZGVmaW5lIFpJUDY0X0RBVEFfREVTQ19TSVpFCW9mZnNldG9mKHN0cnVjdCB6aXA2NF9kYXRhX2Rlc2MsIF9lbmQpCisjZGVmaW5lIFpJUF9ESVJfSEVBREVSX1NJWkUJb2Zmc2V0b2Yoc3RydWN0IHppcF9kaXJfaGVhZGVyLCBfZW5kKQorI2RlZmluZSBaSVBfRElSX1RSQUlMRVJfU0laRQlvZmZzZXRvZihzdHJ1Y3QgemlwX2Rpcl90cmFpbGVyLCBfZW5kKQorI2RlZmluZSBaSVBfRVhUUkFfTVRJTUVfU0laRQlvZmZzZXRvZihzdHJ1Y3QgemlwX2V4dHJhX210aW1lLCBfZW5kKQorI2RlZmluZSBaSVBfRVhUUkFfTVRJTUVfUEFZTE9BRF9TSVpFIFwKKwkoWklQX0VYVFJBX01USU1FX1NJWkUgLSBvZmZzZXRvZihzdHJ1Y3QgemlwX2V4dHJhX210aW1lLCBmbGFncykpCisjZGVmaW5lIFpJUDY0X0VYVFJBX1NJWkUJb2Zmc2V0b2Yoc3RydWN0IHppcDY0X2V4dHJhLCBfZW5kKQorI2RlZmluZSBaSVA2NF9FWFRSQV9QQVlMT0FEX1NJWkUgXAorCShaSVA2NF9FWFRSQV9TSVpFIC0gb2Zmc2V0b2Yoc3RydWN0IHppcDY0X2V4dHJhLCBzaXplKSkKKyNkZWZpbmUgWklQNjRfRElSX1RSQUlMRVJfU0laRQlvZmZzZXRvZihzdHJ1Y3QgemlwNjRfZGlyX3RyYWlsZXIsIF9lbmQpCisjZGVmaW5lIFpJUDY0X0RJUl9UUkFJTEVSX1JFQ09SRF9TSVpFIFwKKwkoWklQNjRfRElSX1RSQUlMRVJfU0laRSAtIFwKKwkgb2Zmc2V0b2Yoc3RydWN0IHppcDY0X2Rpcl90cmFpbGVyLCBjcmVhdG9yX3ZlcnNpb24pKQorI2RlZmluZSBaSVA2NF9ESVJfVFJBSUxFUl9MT0NBVE9SX1NJWkUgXAorCW9mZnNldG9mKHN0cnVjdCB6aXA2NF9kaXJfdHJhaWxlcl9sb2NhdG9yLCBfZW5kKQorCitzdGF0aWMgdm9pZCBjb3B5X2xlMTYodW5zaWduZWQgY2hhciAqZGVzdCwgdW5zaWduZWQgaW50IG4pCit7CisJZGVzdFswXSA9IDB4ZmYgJiBuOworCWRlc3RbMV0gPSAweGZmICYgKG4gPj4gMDEwKTsKK30KKworc3RhdGljIHZvaWQgY29weV9sZTMyKHVuc2lnbmVkIGNoYXIgKmRlc3QsIHVuc2lnbmVkIGludCBuKQoreworCWRlc3RbMF0gPSAweGZmICYgbjsKKwlkZXN0WzFdID0gMHhmZiAmIChuID4+IDAxMCk7CisJZGVzdFsyXSA9IDB4ZmYgJiAobiA+PiAwMjApOworCWRlc3RbM10gPSAweGZmICYgKG4gPj4gMDMwKTsKK30KKworc3RhdGljIHZvaWQgY29weV9sZTY0KHVuc2lnbmVkIGNoYXIgKmRlc3QsIHVpbnQ2NF90IG4pCit7CisJZGVzdFswXSA9IDB4ZmYgJiBuOworCWRlc3RbMV0gPSAweGZmICYgKG4gPj4gMDEwKTsKKwlkZXN0WzJdID0gMHhmZiAmIChuID4+IDAyMCk7CisJZGVzdFszXSA9IDB4ZmYgJiAobiA+PiAwMzApOworCWRlc3RbNF0gPSAweGZmICYgKG4gPj4gMDQwKTsKKwlkZXN0WzVdID0gMHhmZiAmIChuID4+IDA1MCk7CisJZGVzdFs2XSA9IDB4ZmYgJiAobiA+PiAwNjApOworCWRlc3RbN10gPSAweGZmICYgKG4gPj4gMDcwKTsKK30KKworc3RhdGljIHVpbnQ2NF90IGNsYW1wX21heCh1aW50NjRfdCBuLCB1aW50NjRfdCBtYXgsIGludCAqY2xhbXBlZCkKK3sKKwlpZiAobiA8PSBtYXgpCisJCXJldHVybiBuOworCSpjbGFtcGVkID0gMTsKKwlyZXR1cm4gbWF4OworfQorCitzdGF0aWMgdm9pZCBjb3B5X2xlMTZfY2xhbXAodW5zaWduZWQgY2hhciAqZGVzdCwgdWludDY0X3QgbiwgaW50ICpjbGFtcGVkKQoreworCWNvcHlfbGUxNihkZXN0LCBjbGFtcF9tYXgobiwgMHhmZmZmLCBjbGFtcGVkKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfbGUzMl9jbGFtcCh1bnNpZ25lZCBjaGFyICpkZXN0LCB1aW50NjRfdCBuLCBpbnQgKmNsYW1wZWQpCit7CisJY29weV9sZTMyKGRlc3QsIGNsYW1wX21heChuLCAweGZmZmZmZmZmLCBjbGFtcGVkKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RyYnVmX2FkZF9sZShzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHNpemUsIHVpbnRtYXhfdCBuKQoreworCXdoaWxlIChzaXplLS0gPiAwKSB7CisJCXN0cmJ1Zl9hZGRjaChzYiwgbiAmIDB4ZmYpOworCQluID4+PSA4OworCX0KKwlyZXR1cm4gLSEhbjsKK30KKworc3RhdGljIHVpbnQzMl90IGNsYW1wMzIodWludG1heF90IG4pCit7CisJY29uc3QgdWludG1heF90IG1heCA9IDB4ZmZmZmZmZmY7CisJcmV0dXJuIChuIDwgbWF4KSA/IG4gOiBtYXg7Cit9CisKK3N0YXRpYyB2b2lkICp6bGliX2RlZmxhdGVfcmF3KHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgICAgIGludCBjb21wcmVzc2lvbl9sZXZlbCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmNvbXByZXNzZWRfc2l6ZSkKK3sKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJdW5zaWduZWQgbG9uZyBtYXhzaXplOworCXZvaWQgKmJ1ZmZlcjsKKwlpbnQgcmVzdWx0OworCisJZ2l0X2RlZmxhdGVfaW5pdF9yYXcoJnN0cmVhbSwgY29tcHJlc3Npb25fbGV2ZWwpOworCW1heHNpemUgPSBnaXRfZGVmbGF0ZV9ib3VuZCgmc3RyZWFtLCBzaXplKTsKKwlidWZmZXIgPSB4bWFsbG9jKG1heHNpemUpOworCisJc3RyZWFtLm5leHRfaW4gPSBkYXRhOworCXN0cmVhbS5hdmFpbF9pbiA9IHNpemU7CisJc3RyZWFtLm5leHRfb3V0ID0gYnVmZmVyOworCXN0cmVhbS5hdmFpbF9vdXQgPSBtYXhzaXplOworCisJZG8geworCQlyZXN1bHQgPSBnaXRfZGVmbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7CisJfSB3aGlsZSAocmVzdWx0ID09IFpfT0spOworCisJaWYgKHJlc3VsdCAhPSBaX1NUUkVBTV9FTkQpIHsKKwkJZnJlZShidWZmZXIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlnaXRfZGVmbGF0ZV9lbmQoJnN0cmVhbSk7CisJKmNvbXByZXNzZWRfc2l6ZSA9IHN0cmVhbS50b3RhbF9vdXQ7CisKKwlyZXR1cm4gYnVmZmVyOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV96aXBfZGF0YV9kZXNjKHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQl1bnNpZ25lZCBsb25nIGNvbXByZXNzZWRfc2l6ZSwKKwkJCQl1bnNpZ25lZCBsb25nIGNyYykKK3sKKwlpZiAoc2l6ZSA+PSAweGZmZmZmZmZmIHx8IGNvbXByZXNzZWRfc2l6ZSA+PSAweGZmZmZmZmZmKSB7CisJCXN0cnVjdCB6aXA2NF9kYXRhX2Rlc2MgdHJhaWxlcjsKKwkJY29weV9sZTMyKHRyYWlsZXIubWFnaWMsIDB4MDgwNzRiNTApOworCQljb3B5X2xlMzIodHJhaWxlci5jcmMzMiwgY3JjKTsKKwkJY29weV9sZTY0KHRyYWlsZXIuY29tcHJlc3NlZF9zaXplLCBjb21wcmVzc2VkX3NpemUpOworCQljb3B5X2xlNjQodHJhaWxlci5zaXplLCBzaXplKTsKKwkJd3JpdGVfb3JfZGllKDEsICZ0cmFpbGVyLCBaSVA2NF9EQVRBX0RFU0NfU0laRSk7CisJCXppcF9vZmZzZXQgKz0gWklQNjRfREFUQV9ERVNDX1NJWkU7CisJfSBlbHNlIHsKKwkJc3RydWN0IHppcF9kYXRhX2Rlc2MgdHJhaWxlcjsKKwkJY29weV9sZTMyKHRyYWlsZXIubWFnaWMsIDB4MDgwNzRiNTApOworCQljb3B5X2xlMzIodHJhaWxlci5jcmMzMiwgY3JjKTsKKwkJY29weV9sZTMyKHRyYWlsZXIuY29tcHJlc3NlZF9zaXplLCBjb21wcmVzc2VkX3NpemUpOworCQljb3B5X2xlMzIodHJhaWxlci5zaXplLCBzaXplKTsKKwkJd3JpdGVfb3JfZGllKDEsICZ0cmFpbGVyLCBaSVBfREFUQV9ERVNDX1NJWkUpOworCQl6aXBfb2Zmc2V0ICs9IFpJUF9EQVRBX0RFU0NfU0laRTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF96aXBfaGVhZGVyX2RhdGFfZGVzYyhzdHJ1Y3QgemlwX2xvY2FsX2hlYWRlciAqaGVhZGVyLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBjb21wcmVzc2VkX3NpemUsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGNyYykKK3sKKwljb3B5X2xlMzIoaGVhZGVyLT5jcmMzMiwgY3JjKTsKKwljb3B5X2xlMzIoaGVhZGVyLT5jb21wcmVzc2VkX3NpemUsIGNvbXByZXNzZWRfc2l6ZSk7CisJY29weV9sZTMyKGhlYWRlci0+c2l6ZSwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgaGFzX29ubHlfYXNjaWkoY29uc3QgY2hhciAqcykKK3sKKwlmb3IgKDs7KSB7CisJCWludCBjID0gKnMrKzsKKwkJaWYgKGMgPT0gJ1wwJykKKwkJCXJldHVybiAxOworCQlpZiAoIWlzYXNjaWkoYykpCisJCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZW50cnlfaXNfYmluYXJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcml2ZXIgPSB1c2VyZGlmZl9maW5kX2J5X3BhdGgoaXN0YXRlLCBwYXRoKTsKKwlpZiAoIWRyaXZlcikKKwkJZHJpdmVyID0gdXNlcmRpZmZfZmluZF9ieV9uYW1lKCJkZWZhdWx0Iik7CisJaWYgKGRyaXZlci0+YmluYXJ5ICE9IC0xKQorCQlyZXR1cm4gZHJpdmVyLT5iaW5hcnk7CisJcmV0dXJuIGJ1ZmZlcl9pc19iaW5hcnkoYnVmZmVyLCBzaXplKTsKK30KKworI2RlZmluZSBTVFJFQU1fQlVGRkVSX1NJWkUgKDEwMjQgKiAxNikKKworc3RhdGljIGludCB3cml0ZV96aXBfZW50cnkoc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbiwKKwkJCSAgIHVuc2lnbmVkIGludCBtb2RlKQoreworCXN0cnVjdCB6aXBfbG9jYWxfaGVhZGVyIGhlYWRlcjsKKwl1aW50bWF4X3Qgb2Zmc2V0ID0gemlwX29mZnNldDsKKwlzdHJ1Y3QgemlwX2V4dHJhX210aW1lIGV4dHJhOworCXN0cnVjdCB6aXA2NF9leHRyYSBleHRyYTY0OworCXNpemVfdCBoZWFkZXJfZXh0cmFfc2l6ZSA9IFpJUF9FWFRSQV9NVElNRV9TSVpFOworCWludCBuZWVkX3ppcDY0X2V4dHJhID0gMDsKKwl1bnNpZ25lZCBsb25nIGF0dHIyOworCXVuc2lnbmVkIGxvbmcgY29tcHJlc3NlZF9zaXplOworCXVuc2lnbmVkIGxvbmcgY3JjOworCWVudW0gemlwX21ldGhvZCBtZXRob2Q7CisJdW5zaWduZWQgY2hhciAqb3V0OworCXZvaWQgKmRlZmxhdGVkID0gTlVMTDsKKwl2b2lkICpidWZmZXI7CisJc3RydWN0IGdpdF9pc3RyZWFtICpzdHJlYW0gPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlpbnQgaXNfYmluYXJ5ID0gLTE7CisJY29uc3QgY2hhciAqcGF0aF93aXRob3V0X3ByZWZpeCA9IHBhdGggKyBhcmdzLT5iYXNlbGVuOworCXVuc2lnbmVkIGludCBjcmVhdG9yX3ZlcnNpb24gPSAwOworCXVuc2lnbmVkIGludCB2ZXJzaW9uX25lZWRlZCA9IDEwOworCXNpemVfdCB6aXBfZGlyX2V4dHJhX3NpemUgPSBaSVBfRVhUUkFfTVRJTUVfU0laRTsKKwlzaXplX3QgemlwNjRfZGlyX2V4dHJhX3BheWxvYWRfc2l6ZSA9IDA7CisKKwljcmMgPSBjcmMzMigwLCBOVUxMLCAwKTsKKworCWlmICghaGFzX29ubHlfYXNjaWkocGF0aCkpIHsKKwkJaWYgKGlzX3V0ZjgocGF0aCkpCisJCQlmbGFncyB8PSBaSVBfVVRGODsKKwkJZWxzZQorCQkJd2FybmluZyhfKCJwYXRoIGlzIG5vdCB2YWxpZCBVVEYtODogJXMiKSwgcGF0aCk7CisJfQorCisJaWYgKHBhdGhsZW4gPiAweGZmZmYpIHsKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIiksCisJCQkJKGludClwYXRobGVuLCBvaWRfdG9faGV4KG9pZCksIHBhdGgpOworCX0KKworCWlmIChTX0lTRElSKG1vZGUpIHx8IFNfSVNHSVRMSU5LKG1vZGUpKSB7CisJCW1ldGhvZCA9IFpJUF9NRVRIT0RfU1RPUkU7CisJCWF0dHIyID0gMTY7CisJCW91dCA9IE5VTEw7CisJCXNpemUgPSAwOworCQljb21wcmVzc2VkX3NpemUgPSAwOworCQlidWZmZXIgPSBOVUxMOworCX0gZWxzZSBpZiAoU19JU1JFRyhtb2RlKSB8fCBTX0lTTE5LKG1vZGUpKSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IG9pZF9vYmplY3RfaW5mbyhhcmdzLT5yZXBvLCBvaWQsCisJCQkJCQkJJnNpemUpOworCisJCW1ldGhvZCA9IFpJUF9NRVRIT0RfU1RPUkU7CisJCWF0dHIyID0gU19JU0xOSyhtb2RlKSA/ICgobW9kZSB8IDA3NzcpIDw8IDE2KSA6CisJCQkobW9kZSAmIDAxMTEpID8gKChtb2RlKSA8PCAxNikgOiAwOworCQlpZiAoU19JU0xOSyhtb2RlKSB8fCAobW9kZSAmIDAxMTEpKQorCQkJY3JlYXRvcl92ZXJzaW9uID0gMHgwMzE3OworCQlpZiAoU19JU1JFRyhtb2RlKSAmJiBhcmdzLT5jb21wcmVzc2lvbl9sZXZlbCAhPSAwICYmIHNpemUgPiAwKQorCQkJbWV0aG9kID0gWklQX01FVEhPRF9ERUZMQVRFOworCisJCWlmIChTX0lTUkVHKG1vZGUpICYmIHR5cGUgPT0gT0JKX0JMT0IgJiYgIWFyZ3MtPmNvbnZlcnQgJiYKKwkJICAgIHNpemUgPiBiaWdfZmlsZV90aHJlc2hvbGQpIHsKKwkJCXN0cmVhbSA9IG9wZW5faXN0cmVhbShhcmdzLT5yZXBvLCBvaWQsICZ0eXBlLCAmc2l6ZSwKKwkJCQkJICAgICAgTlVMTCk7CisJCQlpZiAoIXN0cmVhbSkKKwkJCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IHN0cmVhbSBibG9iICVzIiksCisJCQkJCSAgICAgb2lkX3RvX2hleChvaWQpKTsKKwkJCWZsYWdzIHw9IFpJUF9TVFJFQU07CisJCQlvdXQgPSBidWZmZXIgPSBOVUxMOworCQl9IGVsc2UgeworCQkJYnVmZmVyID0gb2JqZWN0X2ZpbGVfdG9fYXJjaGl2ZShhcmdzLCBwYXRoLCBvaWQsIG1vZGUsCisJCQkJCQkJJnR5cGUsICZzaXplKTsKKwkJCWlmICghYnVmZmVyKQorCQkJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcmVhZCAlcyIpLAorCQkJCQkgICAgIG9pZF90b19oZXgob2lkKSk7CisJCQljcmMgPSBjcmMzMihjcmMsIGJ1ZmZlciwgc2l6ZSk7CisJCQlpc19iaW5hcnkgPSBlbnRyeV9pc19iaW5hcnkoYXJncy0+cmVwby0+aW5kZXgsCisJCQkJCQkgICAgcGF0aF93aXRob3V0X3ByZWZpeCwKKwkJCQkJCSAgICBidWZmZXIsIHNpemUpOworCQkJb3V0ID0gYnVmZmVyOworCQl9CisJCWNvbXByZXNzZWRfc2l6ZSA9IChtZXRob2QgPT0gWklQX01FVEhPRF9TVE9SRSkgPyBzaXplIDogMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gZXJyb3IoXygidW5zdXBwb3J0ZWQgZmlsZSBtb2RlOiAwJW8gKFNIQTE6ICVzKSIpLCBtb2RlLAorCQkJCW9pZF90b19oZXgob2lkKSk7CisJfQorCisJaWYgKGNyZWF0b3JfdmVyc2lvbiA+IG1heF9jcmVhdG9yX3ZlcnNpb24pCisJCW1heF9jcmVhdG9yX3ZlcnNpb24gPSBjcmVhdG9yX3ZlcnNpb247CisKKwlpZiAoYnVmZmVyICYmIG1ldGhvZCA9PSBaSVBfTUVUSE9EX0RFRkxBVEUpIHsKKwkJb3V0ID0gZGVmbGF0ZWQgPSB6bGliX2RlZmxhdGVfcmF3KGJ1ZmZlciwgc2l6ZSwKKwkJCQkJCSAgYXJncy0+Y29tcHJlc3Npb25fbGV2ZWwsCisJCQkJCQkgICZjb21wcmVzc2VkX3NpemUpOworCQlpZiAoIW91dCB8fCBjb21wcmVzc2VkX3NpemUgPj0gc2l6ZSkgeworCQkJb3V0ID0gYnVmZmVyOworCQkJbWV0aG9kID0gWklQX01FVEhPRF9TVE9SRTsKKwkJCWNvbXByZXNzZWRfc2l6ZSA9IHNpemU7CisJCX0KKwl9CisKKwljb3B5X2xlMTYoZXh0cmEubWFnaWMsIDB4NTQ1NSk7CisJY29weV9sZTE2KGV4dHJhLmV4dHJhX3NpemUsIFpJUF9FWFRSQV9NVElNRV9QQVlMT0FEX1NJWkUpOworCWV4dHJhLmZsYWdzWzBdID0gMTsJLyoganVzdCBtdGltZSAqLworCWNvcHlfbGUzMihleHRyYS5tdGltZSwgYXJncy0+dGltZSk7CisKKwlpZiAoc2l6ZSA+IDB4ZmZmZmZmZmYgfHwgY29tcHJlc3NlZF9zaXplID4gMHhmZmZmZmZmZikKKwkJbmVlZF96aXA2NF9leHRyYSA9IDE7CisJaWYgKHN0cmVhbSAmJiBzaXplID4gMHg3ZmZmZmZmZikKKwkJbmVlZF96aXA2NF9leHRyYSA9IDE7CisKKwlpZiAobmVlZF96aXA2NF9leHRyYSkKKwkJdmVyc2lvbl9uZWVkZWQgPSA0NTsKKworCWNvcHlfbGUzMihoZWFkZXIubWFnaWMsIDB4MDQwMzRiNTApOworCWNvcHlfbGUxNihoZWFkZXIudmVyc2lvbiwgdmVyc2lvbl9uZWVkZWQpOworCWNvcHlfbGUxNihoZWFkZXIuZmxhZ3MsIGZsYWdzKTsKKwljb3B5X2xlMTYoaGVhZGVyLmNvbXByZXNzaW9uX21ldGhvZCwgbWV0aG9kKTsKKwljb3B5X2xlMTYoaGVhZGVyLm10aW1lLCB6aXBfdGltZSk7CisJY29weV9sZTE2KGhlYWRlci5tZGF0ZSwgemlwX2RhdGUpOworCWlmIChuZWVkX3ppcDY0X2V4dHJhKSB7CisJCXNldF96aXBfaGVhZGVyX2RhdGFfZGVzYygmaGVhZGVyLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCBjcmMpOworCQloZWFkZXJfZXh0cmFfc2l6ZSArPSBaSVA2NF9FWFRSQV9TSVpFOworCX0gZWxzZSB7CisJCXNldF96aXBfaGVhZGVyX2RhdGFfZGVzYygmaGVhZGVyLCBzaXplLCBjb21wcmVzc2VkX3NpemUsIGNyYyk7CisJfQorCWNvcHlfbGUxNihoZWFkZXIuZmlsZW5hbWVfbGVuZ3RoLCBwYXRobGVuKTsKKwljb3B5X2xlMTYoaGVhZGVyLmV4dHJhX2xlbmd0aCwgaGVhZGVyX2V4dHJhX3NpemUpOworCXdyaXRlX29yX2RpZSgxLCAmaGVhZGVyLCBaSVBfTE9DQUxfSEVBREVSX1NJWkUpOworCXppcF9vZmZzZXQgKz0gWklQX0xPQ0FMX0hFQURFUl9TSVpFOworCXdyaXRlX29yX2RpZSgxLCBwYXRoLCBwYXRobGVuKTsKKwl6aXBfb2Zmc2V0ICs9IHBhdGhsZW47CisJd3JpdGVfb3JfZGllKDEsICZleHRyYSwgWklQX0VYVFJBX01USU1FX1NJWkUpOworCXppcF9vZmZzZXQgKz0gWklQX0VYVFJBX01USU1FX1NJWkU7CisJaWYgKG5lZWRfemlwNjRfZXh0cmEpIHsKKwkJY29weV9sZTE2KGV4dHJhNjQubWFnaWMsIDB4MDAwMSk7CisJCWNvcHlfbGUxNihleHRyYTY0LmV4dHJhX3NpemUsIFpJUDY0X0VYVFJBX1BBWUxPQURfU0laRSk7CisJCWNvcHlfbGU2NChleHRyYTY0LnNpemUsIHNpemUpOworCQljb3B5X2xlNjQoZXh0cmE2NC5jb21wcmVzc2VkX3NpemUsIGNvbXByZXNzZWRfc2l6ZSk7CisJCXdyaXRlX29yX2RpZSgxLCAmZXh0cmE2NCwgWklQNjRfRVhUUkFfU0laRSk7CisJCXppcF9vZmZzZXQgKz0gWklQNjRfRVhUUkFfU0laRTsKKwl9CisKKwlpZiAoc3RyZWFtICYmIG1ldGhvZCA9PSBaSVBfTUVUSE9EX1NUT1JFKSB7CisJCXVuc2lnbmVkIGNoYXIgYnVmW1NUUkVBTV9CVUZGRVJfU0laRV07CisJCXNzaXplX3QgcmVhZGxlbjsKKworCQlmb3IgKDs7KSB7CisJCQlyZWFkbGVuID0gcmVhZF9pc3RyZWFtKHN0cmVhbSwgYnVmLCBzaXplb2YoYnVmKSk7CisJCQlpZiAocmVhZGxlbiA8PSAwKQorCQkJCWJyZWFrOworCQkJY3JjID0gY3JjMzIoY3JjLCBidWYsIHJlYWRsZW4pOworCQkJaWYgKGlzX2JpbmFyeSA9PSAtMSkKKwkJCQlpc19iaW5hcnkgPSBlbnRyeV9pc19iaW5hcnkoYXJncy0+cmVwby0+aW5kZXgsCisJCQkJCQkJICAgIHBhdGhfd2l0aG91dF9wcmVmaXgsCisJCQkJCQkJICAgIGJ1ZiwgcmVhZGxlbik7CisJCQl3cml0ZV9vcl9kaWUoMSwgYnVmLCByZWFkbGVuKTsKKwkJfQorCQljbG9zZV9pc3RyZWFtKHN0cmVhbSk7CisJCWlmIChyZWFkbGVuKQorCQkJcmV0dXJuIHJlYWRsZW47CisKKwkJY29tcHJlc3NlZF9zaXplID0gc2l6ZTsKKwkJemlwX29mZnNldCArPSBjb21wcmVzc2VkX3NpemU7CisKKwkJd3JpdGVfemlwX2RhdGFfZGVzYyhzaXplLCBjb21wcmVzc2VkX3NpemUsIGNyYyk7CisJfSBlbHNlIGlmIChzdHJlYW0gJiYgbWV0aG9kID09IFpJUF9NRVRIT0RfREVGTEFURSkgeworCQl1bnNpZ25lZCBjaGFyIGJ1ZltTVFJFQU1fQlVGRkVSX1NJWkVdOworCQlzc2l6ZV90IHJlYWRsZW47CisJCWdpdF96c3RyZWFtIHpzdHJlYW07CisJCWludCByZXN1bHQ7CisJCXNpemVfdCBvdXRfbGVuOworCQl1bnNpZ25lZCBjaGFyIGNvbXByZXNzZWRbU1RSRUFNX0JVRkZFUl9TSVpFICogMl07CisKKwkJZ2l0X2RlZmxhdGVfaW5pdF9yYXcoJnpzdHJlYW0sIGFyZ3MtPmNvbXByZXNzaW9uX2xldmVsKTsKKworCQljb21wcmVzc2VkX3NpemUgPSAwOworCQl6c3RyZWFtLm5leHRfb3V0ID0gY29tcHJlc3NlZDsKKwkJenN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoY29tcHJlc3NlZCk7CisKKwkJZm9yICg7OykgeworCQkJcmVhZGxlbiA9IHJlYWRfaXN0cmVhbShzdHJlYW0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQkJaWYgKHJlYWRsZW4gPD0gMCkKKwkJCQlicmVhazsKKwkJCWNyYyA9IGNyYzMyKGNyYywgYnVmLCByZWFkbGVuKTsKKwkJCWlmIChpc19iaW5hcnkgPT0gLTEpCisJCQkJaXNfYmluYXJ5ID0gZW50cnlfaXNfYmluYXJ5KGFyZ3MtPnJlcG8tPmluZGV4LAorCQkJCQkJCSAgICBwYXRoX3dpdGhvdXRfcHJlZml4LAorCQkJCQkJCSAgICBidWYsIHJlYWRsZW4pOworCisJCQl6c3RyZWFtLm5leHRfaW4gPSBidWY7CisJCQl6c3RyZWFtLmF2YWlsX2luID0gcmVhZGxlbjsKKwkJCXJlc3VsdCA9IGdpdF9kZWZsYXRlKCZ6c3RyZWFtLCAwKTsKKwkJCWlmIChyZXN1bHQgIT0gWl9PSykKKwkJCQlkaWUoXygiZGVmbGF0ZSBlcnJvciAoJWQpIiksIHJlc3VsdCk7CisJCQlvdXRfbGVuID0genN0cmVhbS5uZXh0X291dCAtIGNvbXByZXNzZWQ7CisKKwkJCWlmIChvdXRfbGVuID4gMCkgeworCQkJCXdyaXRlX29yX2RpZSgxLCBjb21wcmVzc2VkLCBvdXRfbGVuKTsKKwkJCQljb21wcmVzc2VkX3NpemUgKz0gb3V0X2xlbjsKKwkJCQl6c3RyZWFtLm5leHRfb3V0ID0gY29tcHJlc3NlZDsKKwkJCQl6c3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihjb21wcmVzc2VkKTsKKwkJCX0KKworCQl9CisJCWNsb3NlX2lzdHJlYW0oc3RyZWFtKTsKKwkJaWYgKHJlYWRsZW4pCisJCQlyZXR1cm4gcmVhZGxlbjsKKworCQl6c3RyZWFtLm5leHRfaW4gPSBidWY7CisJCXpzdHJlYW0uYXZhaWxfaW4gPSAwOworCQlyZXN1bHQgPSBnaXRfZGVmbGF0ZSgmenN0cmVhbSwgWl9GSU5JU0gpOworCQlpZiAocmVzdWx0ICE9IFpfU1RSRUFNX0VORCkKKwkJCWRpZSgiZGVmbGF0ZSBlcnJvciAoJWQpIiwgcmVzdWx0KTsKKworCQlnaXRfZGVmbGF0ZV9lbmQoJnpzdHJlYW0pOworCQlvdXRfbGVuID0genN0cmVhbS5uZXh0X291dCAtIGNvbXByZXNzZWQ7CisJCXdyaXRlX29yX2RpZSgxLCBjb21wcmVzc2VkLCBvdXRfbGVuKTsKKwkJY29tcHJlc3NlZF9zaXplICs9IG91dF9sZW47CisJCXppcF9vZmZzZXQgKz0gY29tcHJlc3NlZF9zaXplOworCisJCXdyaXRlX3ppcF9kYXRhX2Rlc2Moc2l6ZSwgY29tcHJlc3NlZF9zaXplLCBjcmMpOworCX0gZWxzZSBpZiAoY29tcHJlc3NlZF9zaXplID4gMCkgeworCQl3cml0ZV9vcl9kaWUoMSwgb3V0LCBjb21wcmVzc2VkX3NpemUpOworCQl6aXBfb2Zmc2V0ICs9IGNvbXByZXNzZWRfc2l6ZTsKKwl9CisKKwlmcmVlKGRlZmxhdGVkKTsKKwlmcmVlKGJ1ZmZlcik7CisKKwlpZiAoY29tcHJlc3NlZF9zaXplID4gMHhmZmZmZmZmZiB8fCBzaXplID4gMHhmZmZmZmZmZiB8fAorCSAgICBvZmZzZXQgPiAweGZmZmZmZmZmKSB7CisJCWlmIChjb21wcmVzc2VkX3NpemUgPj0gMHhmZmZmZmZmZikKKwkJCXppcDY0X2Rpcl9leHRyYV9wYXlsb2FkX3NpemUgKz0gODsKKwkJaWYgKHNpemUgPj0gMHhmZmZmZmZmZikKKwkJCXppcDY0X2Rpcl9leHRyYV9wYXlsb2FkX3NpemUgKz0gODsKKwkJaWYgKG9mZnNldCA+PSAweGZmZmZmZmZmKQorCQkJemlwNjRfZGlyX2V4dHJhX3BheWxvYWRfc2l6ZSArPSA4OworCQl6aXBfZGlyX2V4dHJhX3NpemUgKz0gMiArIDIgKyB6aXA2NF9kaXJfZXh0cmFfcGF5bG9hZF9zaXplOworCX0KKworCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDQsIDB4MDIwMTRiNTApOwkvKiBtYWdpYyAqLworCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDIsIGNyZWF0b3JfdmVyc2lvbik7CisJc3RyYnVmX2FkZF9sZSgmemlwX2RpciwgMiwgdmVyc2lvbl9uZWVkZWQpOworCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDIsIGZsYWdzKTsKKwlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCAyLCBtZXRob2QpOworCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDIsIHppcF90aW1lKTsKKwlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCAyLCB6aXBfZGF0ZSk7CisJc3RyYnVmX2FkZF9sZSgmemlwX2RpciwgNCwgY3JjKTsKKwlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCA0LCBjbGFtcDMyKGNvbXByZXNzZWRfc2l6ZSkpOworCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDQsIGNsYW1wMzIoc2l6ZSkpOworCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDIsIHBhdGhsZW4pOworCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDIsIHppcF9kaXJfZXh0cmFfc2l6ZSk7CisJc3RyYnVmX2FkZF9sZSgmemlwX2RpciwgMiwgMCk7CQkvKiBjb21tZW50IGxlbmd0aCAqLworCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDIsIDApOwkJLyogZGlzayAqLworCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDIsICFpc19iaW5hcnkpOworCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDQsIGF0dHIyKTsKKwlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCA0LCBjbGFtcDMyKG9mZnNldCkpOworCXN0cmJ1Zl9hZGQoJnppcF9kaXIsIHBhdGgsIHBhdGhsZW4pOworCXN0cmJ1Zl9hZGQoJnppcF9kaXIsICZleHRyYSwgWklQX0VYVFJBX01USU1FX1NJWkUpOworCWlmICh6aXA2NF9kaXJfZXh0cmFfcGF5bG9hZF9zaXplKSB7CisJCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDIsIDB4MDAwMSk7CS8qIG1hZ2ljICovCisJCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDIsIHppcDY0X2Rpcl9leHRyYV9wYXlsb2FkX3NpemUpOworCQlpZiAoc2l6ZSA+PSAweGZmZmZmZmZmKQorCQkJc3RyYnVmX2FkZF9sZSgmemlwX2RpciwgOCwgc2l6ZSk7CisJCWlmIChjb21wcmVzc2VkX3NpemUgPj0gMHhmZmZmZmZmZikKKwkJCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDgsIGNvbXByZXNzZWRfc2l6ZSk7CisJCWlmIChvZmZzZXQgPj0gMHhmZmZmZmZmZikKKwkJCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDgsIG9mZnNldCk7CisJfQorCXppcF9kaXJfZW50cmllcysrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3ppcDY0X3RyYWlsZXIodm9pZCkKK3sKKwlzdHJ1Y3QgemlwNjRfZGlyX3RyYWlsZXIgdHJhaWxlcjY0OworCXN0cnVjdCB6aXA2NF9kaXJfdHJhaWxlcl9sb2NhdG9yIGxvY2F0b3I2NDsKKworCWNvcHlfbGUzMih0cmFpbGVyNjQubWFnaWMsIDB4MDYwNjRiNTApOworCWNvcHlfbGU2NCh0cmFpbGVyNjQucmVjb3JkX3NpemUsIFpJUDY0X0RJUl9UUkFJTEVSX1JFQ09SRF9TSVpFKTsKKwljb3B5X2xlMTYodHJhaWxlcjY0LmNyZWF0b3JfdmVyc2lvbiwgbWF4X2NyZWF0b3JfdmVyc2lvbik7CisJY29weV9sZTE2KHRyYWlsZXI2NC52ZXJzaW9uLCA0NSk7CisJY29weV9sZTMyKHRyYWlsZXI2NC5kaXNrLCAwKTsKKwljb3B5X2xlMzIodHJhaWxlcjY0LmRpcmVjdG9yeV9zdGFydF9kaXNrLCAwKTsKKwljb3B5X2xlNjQodHJhaWxlcjY0LmVudHJpZXNfb25fdGhpc19kaXNrLCB6aXBfZGlyX2VudHJpZXMpOworCWNvcHlfbGU2NCh0cmFpbGVyNjQuZW50cmllcywgemlwX2Rpcl9lbnRyaWVzKTsKKwljb3B5X2xlNjQodHJhaWxlcjY0LnNpemUsIHppcF9kaXIubGVuKTsKKwljb3B5X2xlNjQodHJhaWxlcjY0Lm9mZnNldCwgemlwX29mZnNldCk7CisKKwljb3B5X2xlMzIobG9jYXRvcjY0Lm1hZ2ljLCAweDA3MDY0YjUwKTsKKwljb3B5X2xlMzIobG9jYXRvcjY0LmRpc2ssIDApOworCWNvcHlfbGU2NChsb2NhdG9yNjQub2Zmc2V0LCB6aXBfb2Zmc2V0ICsgemlwX2Rpci5sZW4pOworCWNvcHlfbGUzMihsb2NhdG9yNjQubnVtYmVyX29mX2Rpc2tzLCAxKTsKKworCXdyaXRlX29yX2RpZSgxLCAmdHJhaWxlcjY0LCBaSVA2NF9ESVJfVFJBSUxFUl9TSVpFKTsKKwl3cml0ZV9vcl9kaWUoMSwgJmxvY2F0b3I2NCwgWklQNjRfRElSX1RSQUlMRVJfTE9DQVRPUl9TSVpFKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfemlwX3RyYWlsZXIoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCB6aXBfZGlyX3RyYWlsZXIgdHJhaWxlcjsKKwlpbnQgY2xhbXBlZCA9IDA7CisKKwljb3B5X2xlMzIodHJhaWxlci5tYWdpYywgMHgwNjA1NGI1MCk7CisJY29weV9sZTE2KHRyYWlsZXIuZGlzaywgMCk7CisJY29weV9sZTE2KHRyYWlsZXIuZGlyZWN0b3J5X3N0YXJ0X2Rpc2ssIDApOworCWNvcHlfbGUxNl9jbGFtcCh0cmFpbGVyLmVudHJpZXNfb25fdGhpc19kaXNrLCB6aXBfZGlyX2VudHJpZXMsCisJCQkmY2xhbXBlZCk7CisJY29weV9sZTE2X2NsYW1wKHRyYWlsZXIuZW50cmllcywgemlwX2Rpcl9lbnRyaWVzLCAmY2xhbXBlZCk7CisJY29weV9sZTMyKHRyYWlsZXIuc2l6ZSwgemlwX2Rpci5sZW4pOworCWNvcHlfbGUzMl9jbGFtcCh0cmFpbGVyLm9mZnNldCwgemlwX29mZnNldCwgJmNsYW1wZWQpOworCWNvcHlfbGUxNih0cmFpbGVyLmNvbW1lbnRfbGVuZ3RoLCBvaWQgPyB0aGVfaGFzaF9hbGdvLT5oZXhzeiA6IDApOworCisJd3JpdGVfb3JfZGllKDEsIHppcF9kaXIuYnVmLCB6aXBfZGlyLmxlbik7CisJaWYgKGNsYW1wZWQpCisJCXdyaXRlX3ppcDY0X3RyYWlsZXIoKTsKKwl3cml0ZV9vcl9kaWUoMSwgJnRyYWlsZXIsIFpJUF9ESVJfVFJBSUxFUl9TSVpFKTsKKwlpZiAob2lkKQorCQl3cml0ZV9vcl9kaWUoMSwgb2lkX3RvX2hleChvaWQpLCB0aGVfaGFzaF9hbGdvLT5oZXhzeik7Cit9CisKK3N0YXRpYyB2b2lkIGRvc190aW1lKHRpbWVzdGFtcF90ICp0aW1lc3RhbXAsIGludCAqZG9zX2RhdGUsIGludCAqZG9zX3RpbWUpCit7CisJdGltZV90IHRpbWU7CisJc3RydWN0IHRtIHRtOworCisJaWYgKGRhdGVfb3ZlcmZsb3dzKCp0aW1lc3RhbXApKQorCQlkaWUoXygidGltZXN0YW1wIHRvbyBsYXJnZSBmb3IgdGhpcyBzeXN0ZW06ICUiUFJJdGltZSksCisJCSAgICAqdGltZXN0YW1wKTsKKwl0aW1lID0gKHRpbWVfdCkqdGltZXN0YW1wOworCWxvY2FsdGltZV9yKCZ0aW1lLCAmdG0pOworCSp0aW1lc3RhbXAgPSB0aW1lOworCisJKmRvc19kYXRlID0gdG0udG1fbWRheSArICh0bS50bV9tb24gKyAxKSAqIDMyICsKKwkJICAgICh0bS50bV95ZWFyICsgMTkwMCAtIDE5ODApICogNTEyOworCSpkb3NfdGltZSA9IHRtLnRtX3NlYyAvIDIgKyB0bS50bV9taW4gKiAzMiArIHRtLnRtX2hvdXIgKiAyMDQ4OworfQorCitzdGF0aWMgaW50IGFyY2hpdmVfemlwX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpkYXRhKQoreworCXJldHVybiB1c2VyZGlmZl9jb25maWcodmFyLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfemlwX2FyY2hpdmUoY29uc3Qgc3RydWN0IGFyY2hpdmVyICphciwKKwkJCSAgICAgc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MpCit7CisJaW50IGVycjsKKworCWdpdF9jb25maWcoYXJjaGl2ZV96aXBfY29uZmlnLCBOVUxMKTsKKworCWRvc190aW1lKCZhcmdzLT50aW1lLCAmemlwX2RhdGUsICZ6aXBfdGltZSk7CisKKwlzdHJidWZfaW5pdCgmemlwX2RpciwgMCk7CisKKwllcnIgPSB3cml0ZV9hcmNoaXZlX2VudHJpZXMoYXJncywgd3JpdGVfemlwX2VudHJ5KTsKKwlpZiAoIWVycikKKwkJd3JpdGVfemlwX3RyYWlsZXIoYXJncy0+Y29tbWl0X29pZCk7CisKKwlzdHJidWZfcmVsZWFzZSgmemlwX2Rpcik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IGFyY2hpdmVyIHppcF9hcmNoaXZlciA9IHsKKwkiemlwIiwKKwl3cml0ZV96aXBfYXJjaGl2ZSwKKwlBUkNISVZFUl9XQU5UX0NPTVBSRVNTSU9OX0xFVkVMU3xBUkNISVZFUl9SRU1PVEUKK307CisKK3ZvaWQgaW5pdF96aXBfYXJjaGl2ZXIodm9pZCkKK3sKKwlyZWdpc3Rlcl9hcmNoaXZlcigmemlwX2FyY2hpdmVyKTsKK30KZGlmZiAtLWdpdCBhL2FyY2hpdmUuYyBiL2FyY2hpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjM5NzA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaGl2ZS5jCkBAIC0wLDAgKzEsNTkwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgImFyY2hpdmUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAiZGlyLmgiCisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgYXJjaGl2ZV91c2FnZVtdID0geworCU5fKCJnaXQgYXJjaGl2ZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIiksCisJTl8oImdpdCBhcmNoaXZlIC0tbGlzdCIpLAorCU5fKCJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIpLAorCU5fKCJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhcmNoaXZlciAqKmFyY2hpdmVyczsKK3N0YXRpYyBpbnQgbnJfYXJjaGl2ZXJzOworc3RhdGljIGludCBhbGxvY19hcmNoaXZlcnM7CitzdGF0aWMgaW50IHJlbW90ZV9hbGxvd191bnJlYWNoYWJsZTsKKwordm9pZCByZWdpc3Rlcl9hcmNoaXZlcihzdHJ1Y3QgYXJjaGl2ZXIgKmFyKQoreworCUFMTE9DX0dST1coYXJjaGl2ZXJzLCBucl9hcmNoaXZlcnMgKyAxLCBhbGxvY19hcmNoaXZlcnMpOworCWFyY2hpdmVyc1tucl9hcmNoaXZlcnMrK10gPSBhcjsKK30KKwordm9pZCBpbml0X2FyY2hpdmVycyh2b2lkKQoreworCWluaXRfdGFyX2FyY2hpdmVyKCk7CisJaW5pdF96aXBfYXJjaGl2ZXIoKTsKK30KKworc3RhdGljIHZvaWQgZm9ybWF0X3N1YnN0KGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sCisJCQkgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgZm10ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwljdHguZGF0ZV9tb2RlLnR5cGUgPSBEQVRFX05PUk1BTDsKKwljdHguYWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CisKKwlpZiAoc3JjID09IGJ1Zi0+YnVmKQorCQl0b19mcmVlID0gc3RyYnVmX2RldGFjaChidWYsIE5VTEwpOworCWZvciAoOzspIHsKKwkJY29uc3QgY2hhciAqYiwgKmM7CisKKwkJYiA9IG1lbW1lbShzcmMsIGxlbiwgIiRGb3JtYXQ6IiwgOCk7CisJCWlmICghYikKKwkJCWJyZWFrOworCQljID0gbWVtY2hyKGIgKyA4LCAnJCcsIChzcmMgKyBsZW4pIC0gYiAtIDgpOworCQlpZiAoIWMpCisJCQlicmVhazsKKworCQlzdHJidWZfcmVzZXQoJmZtdCk7CisJCXN0cmJ1Zl9hZGQoJmZtdCwgYiArIDgsIGMgLSBiIC0gOCk7CisKKwkJc3RyYnVmX2FkZChidWYsIHNyYywgYiAtIHNyYyk7CisJCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsIGZtdC5idWYsIGJ1ZiwgJmN0eCk7CisJCWxlbiAtPSBjICsgMSAtIHNyYzsKKwkJc3JjICA9IGMgKyAxOworCX0KKwlzdHJidWZfYWRkKGJ1Ziwgc3JjLCBsZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZmbXQpOworCWZyZWUodG9fZnJlZSk7Cit9CisKK3ZvaWQgKm9iamVjdF9maWxlX3RvX2FyY2hpdmUoY29uc3Qgc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MsCisJCQkgICAgIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgdW5zaWduZWQgaW50IG1vZGUsIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgKnNpemVwKQoreworCXZvaWQgKmJ1ZmZlcjsKKwljb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBhcmdzLT5jb252ZXJ0ID8gYXJncy0+Y29tbWl0IDogTlVMTDsKKwlzdHJ1Y3QgY2hlY2tvdXRfbWV0YWRhdGEgbWV0YTsKKworCWluaXRfY2hlY2tvdXRfbWV0YWRhdGEoJm1ldGEsIGFyZ3MtPnJlZm5hbWUsCisJCQkgICAgICAgYXJncy0+Y29tbWl0X29pZCA/IGFyZ3MtPmNvbW1pdF9vaWQgOgorCQkJICAgICAgIChhcmdzLT50cmVlID8gJmFyZ3MtPnRyZWUtPm9iamVjdC5vaWQgOiBOVUxMKSwgb2lkKTsKKworCXBhdGggKz0gYXJncy0+YmFzZWxlbjsKKwlidWZmZXIgPSByZWFkX29iamVjdF9maWxlKG9pZCwgdHlwZSwgc2l6ZXApOworCWlmIChidWZmZXIgJiYgU19JU1JFRyhtb2RlKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlzaXplX3Qgc2l6ZSA9IDA7CisKKwkJc3RyYnVmX2F0dGFjaCgmYnVmLCBidWZmZXIsICpzaXplcCwgKnNpemVwICsgMSk7CisJCWNvbnZlcnRfdG9fd29ya2luZ190cmVlKGFyZ3MtPnJlcG8tPmluZGV4LCBwYXRoLCBidWYuYnVmLCBidWYubGVuLCAmYnVmLCAmbWV0YSk7CisJCWlmIChjb21taXQpCisJCQlmb3JtYXRfc3Vic3QoY29tbWl0LCBidWYuYnVmLCBidWYubGVuLCAmYnVmKTsKKwkJYnVmZmVyID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmc2l6ZSk7CisJCSpzaXplcCA9IHNpemU7CisJfQorCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RydWN0IGRpcmVjdG9yeSB7CisJc3RydWN0IGRpcmVjdG9yeSAqdXA7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IGJhc2VsZW4sIGxlbjsKKwl1bnNpZ25lZCBtb2RlOworCWludCBzdGFnZTsKKwljaGFyIHBhdGhbRkxFWF9BUlJBWV07Cit9OworCitzdHJ1Y3QgYXJjaGl2ZXJfY29udGV4dCB7CisJc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3M7CisJd3JpdGVfYXJjaGl2ZV9lbnRyeV9mbl90IHdyaXRlX2VudHJ5OworCXN0cnVjdCBkaXJlY3RvcnkgKmJvdHRvbTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cl9jaGVjayAqZ2V0X2FyY2hpdmVfYXR0cnMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCQkgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RhdGljIHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKKwlpZiAoIWNoZWNrKQorCQljaGVjayA9IGF0dHJfY2hlY2tfaW5pdGwoImV4cG9ydC1pZ25vcmUiLCAiZXhwb3J0LXN1YnN0IiwgTlVMTCk7CisJZ2l0X2NoZWNrX2F0dHIoaXN0YXRlLCBwYXRoLCBjaGVjayk7CisJcmV0dXJuIGNoZWNrOworfQorCitzdGF0aWMgaW50IGNoZWNrX2F0dHJfZXhwb3J0X2lnbm9yZShjb25zdCBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2spCit7CisJcmV0dXJuIGNoZWNrICYmIEFUVFJfVFJVRShjaGVjay0+aXRlbXNbMF0udmFsdWUpOworfQorCitzdGF0aWMgaW50IGNoZWNrX2F0dHJfZXhwb3J0X3N1YnN0KGNvbnN0IHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjaykKK3sKKwlyZXR1cm4gY2hlY2sgJiYgQVRUUl9UUlVFKGNoZWNrLT5pdGVtc1sxXS52YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfYXJjaGl2ZV9lbnRyeShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKmJhc2UsCisJCWludCBiYXNlbGVuLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgbW9kZSwgaW50IHN0YWdlLAorCQl2b2lkICpjb250ZXh0KQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgYXJjaGl2ZXJfY29udGV4dCAqYyA9IGNvbnRleHQ7CisJc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MgPSBjLT5hcmdzOworCXdyaXRlX2FyY2hpdmVfZW50cnlfZm5fdCB3cml0ZV9lbnRyeSA9IGMtPndyaXRlX2VudHJ5OworCWludCBlcnI7CisJY29uc3QgY2hhciAqcGF0aF93aXRob3V0X3ByZWZpeDsKKworCWFyZ3MtPmNvbnZlcnQgPSAwOworCXN0cmJ1Zl9yZXNldCgmcGF0aCk7CisJc3RyYnVmX2dyb3coJnBhdGgsIFBBVEhfTUFYKTsKKwlzdHJidWZfYWRkKCZwYXRoLCBhcmdzLT5iYXNlLCBhcmdzLT5iYXNlbGVuKTsKKwlzdHJidWZfYWRkKCZwYXRoLCBiYXNlLCBiYXNlbGVuKTsKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBmaWxlbmFtZSk7CisJaWYgKFNfSVNESVIobW9kZSkgfHwgU19JU0dJVExJTksobW9kZSkpCisJCXN0cmJ1Zl9hZGRjaCgmcGF0aCwgJy8nKTsKKwlwYXRoX3dpdGhvdXRfcHJlZml4ID0gcGF0aC5idWYgKyBhcmdzLT5iYXNlbGVuOworCisJaWYgKCFTX0lTRElSKG1vZGUpKSB7CisJCWNvbnN0IHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKKwkJY2hlY2sgPSBnZXRfYXJjaGl2ZV9hdHRycyhhcmdzLT5yZXBvLT5pbmRleCwgcGF0aF93aXRob3V0X3ByZWZpeCk7CisJCWlmIChjaGVja19hdHRyX2V4cG9ydF9pZ25vcmUoY2hlY2spKQorCQkJcmV0dXJuIDA7CisJCWFyZ3MtPmNvbnZlcnQgPSBjaGVja19hdHRyX2V4cG9ydF9zdWJzdChjaGVjayk7CisJfQorCisJaWYgKFNfSVNESVIobW9kZSkgfHwgU19JU0dJVExJTksobW9kZSkpIHsKKwkJaWYgKGFyZ3MtPnZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiUuKnNcbiIsIChpbnQpcGF0aC5sZW4sIHBhdGguYnVmKTsKKwkJZXJyID0gd3JpdGVfZW50cnkoYXJncywgb2lkLCBwYXRoLmJ1ZiwgcGF0aC5sZW4sIG1vZGUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJcmV0dXJuIChTX0lTRElSKG1vZGUpID8gUkVBRF9UUkVFX1JFQ1VSU0lWRSA6IDApOworCX0KKworCWlmIChhcmdzLT52ZXJib3NlKQorCQlmcHJpbnRmKHN0ZGVyciwgIiUuKnNcbiIsIChpbnQpcGF0aC5sZW4sIHBhdGguYnVmKTsKKwlyZXR1cm4gd3JpdGVfZW50cnkoYXJncywgb2lkLCBwYXRoLmJ1ZiwgcGF0aC5sZW4sIG1vZGUpOworfQorCitzdGF0aWMgdm9pZCBxdWV1ZV9kaXJlY3RvcnkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJc3RydWN0IHN0cmJ1ZiAqYmFzZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCXVuc2lnbmVkIG1vZGUsIGludCBzdGFnZSwgc3RydWN0IGFyY2hpdmVyX2NvbnRleHQgKmMpCit7CisJc3RydWN0IGRpcmVjdG9yeSAqZDsKKwlzaXplX3QgbGVuID0gc3RfYWRkNChiYXNlLT5sZW4sIDEsIHN0cmxlbihmaWxlbmFtZSksIDEpOworCWQgPSB4bWFsbG9jKHN0X2FkZChzaXplb2YoKmQpLCBsZW4pKTsKKwlkLT51cAkgICA9IGMtPmJvdHRvbTsKKwlkLT5iYXNlbGVuID0gYmFzZS0+bGVuOworCWQtPm1vZGUJICAgPSBtb2RlOworCWQtPnN0YWdlICAgPSBzdGFnZTsKKwljLT5ib3R0b20gID0gZDsKKwlkLT5sZW4gPSB4c25wcmludGYoZC0+cGF0aCwgbGVuLCAiJS4qcyVzLyIsIChpbnQpYmFzZS0+bGVuLCBiYXNlLT5idWYsIGZpbGVuYW1lKTsKKwloYXNoY3B5KGQtPm9pZC5oYXNoLCBzaGExKTsKK30KKworc3RhdGljIGludCB3cml0ZV9kaXJlY3Rvcnkoc3RydWN0IGFyY2hpdmVyX2NvbnRleHQgKmMpCit7CisJc3RydWN0IGRpcmVjdG9yeSAqZCA9IGMtPmJvdHRvbTsKKwlpbnQgcmV0OworCisJaWYgKCFkKQorCQlyZXR1cm4gMDsKKwljLT5ib3R0b20gPSBkLT51cDsKKwlkLT5wYXRoW2QtPmxlbiAtIDFdID0gJ1wwJzsgLyogbm8gdHJhaWxpbmcgc2xhc2ggKi8KKwlyZXQgPQorCQl3cml0ZV9kaXJlY3RvcnkoYykgfHwKKwkJd3JpdGVfYXJjaGl2ZV9lbnRyeSgmZC0+b2lkLCBkLT5wYXRoLCBkLT5iYXNlbGVuLAorCQkJCSAgICBkLT5wYXRoICsgZC0+YmFzZWxlbiwgZC0+bW9kZSwKKwkJCQkgICAgZC0+c3RhZ2UsIGMpICE9IFJFQURfVFJFRV9SRUNVUlNJVkU7CisJZnJlZShkKTsKKwlyZXR1cm4gcmV0ID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IHF1ZXVlX29yX3dyaXRlX2FyY2hpdmVfZW50cnkoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQlzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJdW5zaWduZWQgbW9kZSwgaW50IHN0YWdlLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBhcmNoaXZlcl9jb250ZXh0ICpjID0gY29udGV4dDsKKworCXdoaWxlIChjLT5ib3R0b20gJiYKKwkgICAgICAgIShiYXNlLT5sZW4gPj0gYy0+Ym90dG9tLT5sZW4gJiYKKwkJICFzdHJuY21wKGJhc2UtPmJ1ZiwgYy0+Ym90dG9tLT5wYXRoLCBjLT5ib3R0b20tPmxlbikpKSB7CisJCXN0cnVjdCBkaXJlY3RvcnkgKm5leHQgPSBjLT5ib3R0b20tPnVwOworCQlmcmVlKGMtPmJvdHRvbSk7CisJCWMtPmJvdHRvbSA9IG5leHQ7CisJfQorCisJaWYgKFNfSVNESVIobW9kZSkpIHsKKwkJc2l6ZV90IGJhc2VsZW4gPSBiYXNlLT5sZW47CisJCWNvbnN0IHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKKworCQkvKiBCb3Jyb3cgYmFzZSwgYnV0IHJlc3RvcmUgaXRzIG9yaWdpbmFsIHZhbHVlIHdoZW4gZG9uZS4gKi8KKwkJc3RyYnVmX2FkZHN0cihiYXNlLCBmaWxlbmFtZSk7CisJCXN0cmJ1Zl9hZGRjaChiYXNlLCAnLycpOworCQljaGVjayA9IGdldF9hcmNoaXZlX2F0dHJzKGMtPmFyZ3MtPnJlcG8tPmluZGV4LCBiYXNlLT5idWYpOworCQlzdHJidWZfc2V0bGVuKGJhc2UsIGJhc2VsZW4pOworCisJCWlmIChjaGVja19hdHRyX2V4cG9ydF9pZ25vcmUoY2hlY2spKQorCQkJcmV0dXJuIDA7CisJCXF1ZXVlX2RpcmVjdG9yeShvaWQtPmhhc2gsIGJhc2UsIGZpbGVuYW1lLAorCQkJCW1vZGUsIHN0YWdlLCBjKTsKKwkJcmV0dXJuIFJFQURfVFJFRV9SRUNVUlNJVkU7CisJfQorCisJaWYgKHdyaXRlX2RpcmVjdG9yeShjKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiB3cml0ZV9hcmNoaXZlX2VudHJ5KG9pZCwgYmFzZS0+YnVmLCBiYXNlLT5sZW4sIGZpbGVuYW1lLCBtb2RlLAorCQkJCSAgIHN0YWdlLCBjb250ZXh0KTsKK30KKworaW50IHdyaXRlX2FyY2hpdmVfZW50cmllcyhzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJd3JpdGVfYXJjaGl2ZV9lbnRyeV9mbl90IHdyaXRlX2VudHJ5KQoreworCXN0cnVjdCBhcmNoaXZlcl9jb250ZXh0IGNvbnRleHQ7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJc3RydWN0IHRyZWVfZGVzYyB0OworCWludCBlcnI7CisKKwlpZiAoYXJncy0+YmFzZWxlbiA+IDAgJiYgYXJncy0+YmFzZVthcmdzLT5iYXNlbGVuIC0gMV0gPT0gJy8nKSB7CisJCXNpemVfdCBsZW4gPSBhcmdzLT5iYXNlbGVuOworCisJCXdoaWxlIChsZW4gPiAxICYmIGFyZ3MtPmJhc2VbbGVuIC0gMl0gPT0gJy8nKQorCQkJbGVuLS07CisJCWlmIChhcmdzLT52ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICIlLipzXG4iLCAoaW50KWxlbiwgYXJncy0+YmFzZSk7CisJCWVyciA9IHdyaXRlX2VudHJ5KGFyZ3MsICZhcmdzLT50cmVlLT5vYmplY3Qub2lkLCBhcmdzLT5iYXNlLAorCQkJCSAgbGVuLCAwNDA3NzcpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwltZW1zZXQoJmNvbnRleHQsIDAsIHNpemVvZihjb250ZXh0KSk7CisJY29udGV4dC5hcmdzID0gYXJnczsKKwljb250ZXh0LndyaXRlX2VudHJ5ID0gd3JpdGVfZW50cnk7CisKKwkvKgorCSAqIFNldHVwIGluZGV4IGFuZCBpbnN0cnVjdCBhdHRyIHRvIHJlYWQgaW5kZXggb25seQorCSAqLworCWlmICghYXJncy0+d29ya3RyZWVfYXR0cmlidXRlcykgeworCQltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJCW9wdHMuaW5kZXhfb25seSA9IDE7CisJCW9wdHMuaGVhZF9pZHggPSAtMTsKKwkJb3B0cy5zcmNfaW5kZXggPSBhcmdzLT5yZXBvLT5pbmRleDsKKwkJb3B0cy5kc3RfaW5kZXggPSBhcmdzLT5yZXBvLT5pbmRleDsKKwkJb3B0cy5mbiA9IG9uZXdheV9tZXJnZTsKKwkJaW5pdF90cmVlX2Rlc2MoJnQsIGFyZ3MtPnRyZWUtPmJ1ZmZlciwgYXJncy0+dHJlZS0+c2l6ZSk7CisJCWlmICh1bnBhY2tfdHJlZXMoMSwgJnQsICZvcHRzKSkKKwkJCXJldHVybiAtMTsKKwkJZ2l0X2F0dHJfc2V0X2RpcmVjdGlvbihHSVRfQVRUUl9JTkRFWCk7CisJfQorCisJZXJyID0gcmVhZF90cmVlX3JlY3Vyc2l2ZShhcmdzLT5yZXBvLCBhcmdzLT50cmVlLCAiIiwKKwkJCQkgIDAsIDAsICZhcmdzLT5wYXRoc3BlYywKKwkJCQkgIHF1ZXVlX29yX3dyaXRlX2FyY2hpdmVfZW50cnksCisJCQkJICAmY29udGV4dCk7CisJaWYgKGVyciA9PSBSRUFEX1RSRUVfUkVDVVJTSVZFKQorCQllcnIgPSAwOworCXdoaWxlIChjb250ZXh0LmJvdHRvbSkgeworCQlzdHJ1Y3QgZGlyZWN0b3J5ICpuZXh0ID0gY29udGV4dC5ib3R0b20tPnVwOworCQlmcmVlKGNvbnRleHQuYm90dG9tKTsKKwkJY29udGV4dC5ib3R0b20gPSBuZXh0OworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyY2hpdmVyICpsb29rdXBfYXJjaGl2ZXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfYXJjaGl2ZXJzOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgYXJjaGl2ZXJzW2ldLT5uYW1lKSkKKwkJCXJldHVybiBhcmNoaXZlcnNbaV07CisJfQorCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgcGF0aF9leGlzdHNfY29udGV4dCB7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCXN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzOworfTsKKworc3RhdGljIGludCByZWplY3RfZW50cnkoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3Qgc3RyYnVmICpiYXNlLAorCQkJY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIG1vZGUsCisJCQlpbnQgc3RhZ2UsIHZvaWQgKmNvbnRleHQpCit7CisJaW50IHJldCA9IC0xOworCXN0cnVjdCBwYXRoX2V4aXN0c19jb250ZXh0ICpjdHggPSBjb250ZXh0OworCisJaWYgKFNfSVNESVIobW9kZSkpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkYnVmKCZzYiwgYmFzZSk7CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBmaWxlbmFtZSk7CisJCWlmICghbWF0Y2hfcGF0aHNwZWMoY3R4LT5hcmdzLT5yZXBvLT5pbmRleCwKKwkJCQkgICAgJmN0eC0+cGF0aHNwZWMsCisJCQkJICAgIHNiLmJ1Ziwgc2IubGVuLCAwLCBOVUxMLCAxKSkKKwkJCXJldCA9IFJFQURfVFJFRV9SRUNVUlNJVkU7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGF0aF9leGlzdHMoc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqcGF0aHNbXSA9IHsgcGF0aCwgTlVMTCB9OworCXN0cnVjdCBwYXRoX2V4aXN0c19jb250ZXh0IGN0eDsKKwlpbnQgcmV0OworCisJY3R4LmFyZ3MgPSBhcmdzOworCXBhcnNlX3BhdGhzcGVjKCZjdHgucGF0aHNwZWMsIDAsIDAsICIiLCBwYXRocyk7CisJY3R4LnBhdGhzcGVjLnJlY3Vyc2l2ZSA9IDE7CisJcmV0ID0gcmVhZF90cmVlX3JlY3Vyc2l2ZShhcmdzLT5yZXBvLCBhcmdzLT50cmVlLCAiIiwKKwkJCQkgIDAsIDAsICZjdHgucGF0aHNwZWMsCisJCQkJICByZWplY3RfZW50cnksICZjdHgpOworCWNsZWFyX3BhdGhzcGVjKCZjdHgucGF0aHNwZWMpOworCXJldHVybiByZXQgIT0gMDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfcGF0aHNwZWNfYXJnKGNvbnN0IGNoYXIgKipwYXRoc3BlYywKKwkJc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyX2FyZ3MpCit7CisJLyoKKwkgKiBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBwYXJzZV9wYXRoc3BlYyBpbiBwYXRoX2V4aXN0cygpCisJICogQWxzbyBpZiBwYXRoc3BlYyBwYXR0ZXJucyBhcmUgZGVwZW5kZW50LCB3ZSdyZSBpbiBiaWcKKwkgKiB0cm91YmxlIGFzIHdlIHRlc3QgZWFjaCBvbmUgc2VwYXJhdGVseQorCSAqLworCXBhcnNlX3BhdGhzcGVjKCZhcl9hcmdzLT5wYXRoc3BlYywgMCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMLAorCQkgICAgICAgIiIsIHBhdGhzcGVjKTsKKwlhcl9hcmdzLT5wYXRoc3BlYy5yZWN1cnNpdmUgPSAxOworCWlmIChwYXRoc3BlYykgeworCQl3aGlsZSAoKnBhdGhzcGVjKSB7CisJCQlpZiAoKipwYXRoc3BlYyAmJiAhcGF0aF9leGlzdHMoYXJfYXJncywgKnBhdGhzcGVjKSkKKwkJCQlkaWUoXygicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIpLCAqcGF0aHNwZWMpOworCQkJcGF0aHNwZWMrKzsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcGFyc2VfdHJlZWlzaF9hcmcoY29uc3QgY2hhciAqKmFyZ3YsCisJCXN0cnVjdCBhcmNoaXZlcl9hcmdzICphcl9hcmdzLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCWludCByZW1vdGUpCit7CisJY29uc3QgY2hhciAqbmFtZSA9IGFyZ3ZbMF07CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY29tbWl0X29pZDsKKwl0aW1lX3QgYXJjaGl2ZV90aW1lOworCXN0cnVjdCB0cmVlICp0cmVlOworCWNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljaGFyICpyZWYgPSBOVUxMOworCisJLyogUmVtb3RlcyBhcmUgb25seSBhbGxvd2VkIHRvIGZldGNoIGFjdHVhbCByZWZzICovCisJaWYgKHJlbW90ZSAmJiAhcmVtb3RlX2FsbG93X3VucmVhY2hhYmxlKSB7CisJCWNvbnN0IGNoYXIgKmNvbG9uID0gc3RyY2hybnVsKG5hbWUsICc6Jyk7CisJCWludCByZWZuYW1lbGVuID0gY29sb24gLSBuYW1lOworCisJCWlmICghZHdpbV9yZWYobmFtZSwgcmVmbmFtZWxlbiwgJm9pZCwgJnJlZikpCisJCQlkaWUoXygibm8gc3VjaCByZWY6ICUuKnMiKSwgcmVmbmFtZWxlbiwgbmFtZSk7CisJfSBlbHNlIHsKKwkJZHdpbV9yZWYobmFtZSwgc3RybGVuKG5hbWUpLCAmb2lkLCAmcmVmKTsKKwl9CisKKwlpZiAoZ2V0X29pZChuYW1lLCAmb2lkKSkKKwkJZGllKF8oIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAlcyIpLCBuYW1lKTsKKworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShhcl9hcmdzLT5yZXBvLCAmb2lkLCAxKTsKKwlpZiAoY29tbWl0KSB7CisJCWNvbW1pdF9vaWQgPSAmY29tbWl0LT5vYmplY3Qub2lkOworCQlhcmNoaXZlX3RpbWUgPSBjb21taXQtPmRhdGU7CisJfSBlbHNlIHsKKwkJY29tbWl0X29pZCA9IE5VTEw7CisJCWFyY2hpdmVfdGltZSA9IHRpbWUoTlVMTCk7CisJfQorCisJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoJm9pZCk7CisJaWYgKHRyZWUgPT0gTlVMTCkKKwkJZGllKF8oIm5vdCBhIHRyZWUgb2JqZWN0OiAlcyIpLCBvaWRfdG9faGV4KCZvaWQpKTsKKworCWlmIChwcmVmaXgpIHsKKwkJc3RydWN0IG9iamVjdF9pZCB0cmVlX29pZDsKKwkJdW5zaWduZWQgc2hvcnQgbW9kZTsKKwkJaW50IGVycjsKKworCQllcnIgPSBnZXRfdHJlZV9lbnRyeShhcl9hcmdzLT5yZXBvLAorCQkJCSAgICAgJnRyZWUtPm9iamVjdC5vaWQsCisJCQkJICAgICBwcmVmaXgsICZ0cmVlX29pZCwKKwkJCQkgICAgICZtb2RlKTsKKwkJaWYgKGVyciB8fCAhU19JU0RJUihtb2RlKSkKKwkJCWRpZShfKCJjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVudHJhY2tlZCIpKTsKKworCQl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdCgmdHJlZV9vaWQpOworCX0KKwlhcl9hcmdzLT5yZWZuYW1lID0gcmVmOworCWFyX2FyZ3MtPnRyZWUgPSB0cmVlOworCWFyX2FyZ3MtPmNvbW1pdF9vaWQgPSBjb21taXRfb2lkOworCWFyX2FyZ3MtPmNvbW1pdCA9IGNvbW1pdDsKKwlhcl9hcmdzLT50aW1lID0gYXJjaGl2ZV90aW1lOworfQorCisjZGVmaW5lIE9QVF9fQ09NUFIocywgdiwgaCwgcCkgXAorCU9QVF9TRVRfSU5UX0YocywgTlVMTCwgdiwgaCwgcCwgUEFSU0VfT1BUX05PTkVHKQorI2RlZmluZSBPUFRfX0NPTVBSX0hJRERFTihzLCB2LCBwKSBcCisJT1BUX1NFVF9JTlRfRihzLCBOVUxMLCB2LCAiIiwgcCwgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX0hJRERFTikKKworc3RhdGljIGludCBwYXJzZV9hcmNoaXZlX2FyZ3MoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQljb25zdCBzdHJ1Y3QgYXJjaGl2ZXIgKiphciwgc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MsCisJCWNvbnN0IGNoYXIgKm5hbWVfaGludCwgaW50IGlzX3JlbW90ZSkKK3sKKwljb25zdCBjaGFyICpmb3JtYXQgPSBOVUxMOworCWNvbnN0IGNoYXIgKmJhc2UgPSBOVUxMOworCWNvbnN0IGNoYXIgKnJlbW90ZSA9IE5VTEw7CisJY29uc3QgY2hhciAqZXhlYyA9IE5VTEw7CisJY29uc3QgY2hhciAqb3V0cHV0ID0gTlVMTDsKKwlpbnQgY29tcHJlc3Npb25fbGV2ZWwgPSAtMTsKKwlpbnQgdmVyYm9zZSA9IDA7CisJaW50IGk7CisJaW50IGxpc3QgPSAwOworCWludCB3b3JrdHJlZV9hdHRyaWJ1dGVzID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX1NUUklORygwLCAiZm9ybWF0IiwgJmZvcm1hdCwgTl8oImZtdCIpLCBOXygiYXJjaGl2ZSBmb3JtYXQiKSksCisJCU9QVF9TVFJJTkcoMCwgInByZWZpeCIsICZiYXNlLCBOXygicHJlZml4IiksCisJCQlOXygicHJlcGVuZCBwcmVmaXggdG8gZWFjaCBwYXRobmFtZSBpbiB0aGUgYXJjaGl2ZSIpKSwKKwkJT1BUX1NUUklORygnbycsICJvdXRwdXQiLCAmb3V0cHV0LCBOXygiZmlsZSIpLAorCQkJTl8oIndyaXRlIHRoZSBhcmNoaXZlIHRvIHRoaXMgZmlsZSIpKSwKKwkJT1BUX0JPT0woMCwgIndvcmt0cmVlLWF0dHJpYnV0ZXMiLCAmd29ya3RyZWVfYXR0cmlidXRlcywKKwkJCU5fKCJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IikpLAorCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIikpLAorCQlPUFRfX0NPTVBSKCcwJywgJmNvbXByZXNzaW9uX2xldmVsLCBOXygic3RvcmUgb25seSIpLCAwKSwKKwkJT1BUX19DT01QUignMScsICZjb21wcmVzc2lvbl9sZXZlbCwgTl8oImNvbXByZXNzIGZhc3RlciIpLCAxKSwKKwkJT1BUX19DT01QUl9ISURERU4oJzInLCAmY29tcHJlc3Npb25fbGV2ZWwsIDIpLAorCQlPUFRfX0NPTVBSX0hJRERFTignMycsICZjb21wcmVzc2lvbl9sZXZlbCwgMyksCisJCU9QVF9fQ09NUFJfSElEREVOKCc0JywgJmNvbXByZXNzaW9uX2xldmVsLCA0KSwKKwkJT1BUX19DT01QUl9ISURERU4oJzUnLCAmY29tcHJlc3Npb25fbGV2ZWwsIDUpLAorCQlPUFRfX0NPTVBSX0hJRERFTignNicsICZjb21wcmVzc2lvbl9sZXZlbCwgNiksCisJCU9QVF9fQ09NUFJfSElEREVOKCc3JywgJmNvbXByZXNzaW9uX2xldmVsLCA3KSwKKwkJT1BUX19DT01QUl9ISURERU4oJzgnLCAmY29tcHJlc3Npb25fbGV2ZWwsIDgpLAorCQlPUFRfX0NPTVBSKCc5JywgJmNvbXByZXNzaW9uX2xldmVsLCBOXygiY29tcHJlc3MgYmV0dGVyIiksIDkpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfQk9PTCgnbCcsICJsaXN0IiwgJmxpc3QsCisJCQlOXygibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIikpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfU1RSSU5HKDAsICJyZW1vdGUiLCAmcmVtb3RlLCBOXygicmVwbyIpLAorCQkJTl8oInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IikpLAorCQlPUFRfU1RSSU5HKDAsICJleGVjIiwgJmV4ZWMsIE5fKCJjb21tYW5kIiksCisJCQlOXygicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0cywgYXJjaGl2ZV91c2FnZSwgMCk7CisKKwlpZiAocmVtb3RlKQorCQlkaWUoXygiVW5leHBlY3RlZCBvcHRpb24gLS1yZW1vdGUiKSk7CisJaWYgKGV4ZWMpCisJCWRpZShfKCJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIpKTsKKwlpZiAob3V0cHV0KQorCQlkaWUoXygiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiKSk7CisKKwlpZiAoIWJhc2UpCisJCWJhc2UgPSAiIjsKKworCWlmIChsaXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBucl9hcmNoaXZlcnM7IGkrKykKKwkJCWlmICghaXNfcmVtb3RlIHx8IGFyY2hpdmVyc1tpXS0+ZmxhZ3MgJiBBUkNISVZFUl9SRU1PVEUpCisJCQkJcHJpbnRmKCIlc1xuIiwgYXJjaGl2ZXJzW2ldLT5uYW1lKTsKKwkJZXhpdCgwKTsKKwl9CisKKwlpZiAoIWZvcm1hdCAmJiBuYW1lX2hpbnQpCisJCWZvcm1hdCA9IGFyY2hpdmVfZm9ybWF0X2Zyb21fZmlsZW5hbWUobmFtZV9oaW50KTsKKwlpZiAoIWZvcm1hdCkKKwkJZm9ybWF0ID0gInRhciI7CisKKwkvKiBXZSBuZWVkIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgLS0gdHJlZS1pc2ggKi8KKwlpZiAoYXJnYyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhhcmNoaXZlX3VzYWdlLCBvcHRzKTsKKwkqYXIgPSBsb29rdXBfYXJjaGl2ZXIoZm9ybWF0KTsKKwlpZiAoISphciB8fCAoaXNfcmVtb3RlICYmICEoKCphciktPmZsYWdzICYgQVJDSElWRVJfUkVNT1RFKSkpCisJCWRpZShfKCJVbmtub3duIGFyY2hpdmUgZm9ybWF0ICclcyciKSwgZm9ybWF0KTsKKworCWFyZ3MtPmNvbXByZXNzaW9uX2xldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworCWlmIChjb21wcmVzc2lvbl9sZXZlbCAhPSAtMSkgeworCQlpZiAoKCphciktPmZsYWdzICYgQVJDSElWRVJfV0FOVF9DT01QUkVTU0lPTl9MRVZFTFMpCisJCQlhcmdzLT5jb21wcmVzc2lvbl9sZXZlbCA9IGNvbXByZXNzaW9uX2xldmVsOworCQllbHNlIHsKKwkJCWRpZShfKCJBcmd1bWVudCBub3Qgc3VwcG9ydGVkIGZvciBmb3JtYXQgJyVzJzogLSVkIiksCisJCQkJCWZvcm1hdCwgY29tcHJlc3Npb25fbGV2ZWwpOworCQl9CisJfQorCWFyZ3MtPnZlcmJvc2UgPSB2ZXJib3NlOworCWFyZ3MtPmJhc2UgPSBiYXNlOworCWFyZ3MtPmJhc2VsZW4gPSBzdHJsZW4oYmFzZSk7CisJYXJncy0+d29ya3RyZWVfYXR0cmlidXRlcyA9IHdvcmt0cmVlX2F0dHJpYnV0ZXM7CisKKwlyZXR1cm4gYXJnYzsKK30KKworaW50IHdyaXRlX2FyY2hpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCSAgY29uc3QgY2hhciAqbmFtZV9oaW50LCBpbnQgcmVtb3RlKQoreworCWNvbnN0IHN0cnVjdCBhcmNoaXZlciAqYXIgPSBOVUxMOworCXN0cnVjdCBhcmNoaXZlcl9hcmdzIGFyZ3M7CisKKwlnaXRfY29uZmlnX2dldF9ib29sKCJ1cGxvYWRhcmNoaXZlLmFsbG93dW5yZWFjaGFibGUiLCAmcmVtb3RlX2FsbG93X3VucmVhY2hhYmxlKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlhcmdzLnJlcG8gPSByZXBvOworCWFyZ2MgPSBwYXJzZV9hcmNoaXZlX2FyZ3MoYXJnYywgYXJndiwgJmFyLCAmYXJncywgbmFtZV9oaW50LCByZW1vdGUpOworCWlmICghc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpIHsKKwkJLyoKKwkJICogV2Uga25vdyB0aGlzIHdpbGwgZGllKCkgd2l0aCBhbiBlcnJvciwgc28gd2UgY291bGQganVzdAorCQkgKiBkaWUgb3Vyc2VsdmVzOyBidXQgaXRzIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBtb3JlIHNwZWNpZmljCisJCSAqIHRoYW4gd2hhdCB3ZSBjb3VsZCB3cml0ZSBoZXJlLgorCQkgKi8KKwkJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCX0KKworCXBhcnNlX3RyZWVpc2hfYXJnKGFyZ3YsICZhcmdzLCBwcmVmaXgsIHJlbW90ZSk7CisJcGFyc2VfcGF0aHNwZWNfYXJnKGFyZ3YgKyAxLCAmYXJncyk7CisKKwlyZXR1cm4gYXItPndyaXRlX2FyY2hpdmUoYXIsICZhcmdzKTsKK30KKworc3RhdGljIGludCBtYXRjaF9leHRlbnNpb24oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmV4dCkKK3sKKwlpbnQgcHJlZml4bGVuID0gc3RybGVuKGZpbGVuYW1lKSAtIHN0cmxlbihleHQpOworCisJLyoKKwkgKiBXZSBuZWVkIDEgY2hhcmFjdGVyIGZvciB0aGUgJy4nLCBhbmQgMSBjaGFyYWN0ZXIgdG8gZW5zdXJlIHRoYXQgdGhlCisJICogcHJlZml4IGlzIG5vbi1lbXB0eSAoay5lLiwgd2UgZG9uJ3QgbWF0Y2ggLnRhci5neiB3aXRoIG5vIGFjdHVhbAorCSAqIGZpbGVuYW1lKS4KKwkgKi8KKwlpZiAocHJlZml4bGVuIDwgMiB8fCBmaWxlbmFtZVtwcmVmaXhsZW4gLSAxXSAhPSAnLicpCisJCXJldHVybiAwOworCXJldHVybiAhc3RyY21wKGZpbGVuYW1lICsgcHJlZml4bGVuLCBleHQpOworfQorCitjb25zdCBjaGFyICphcmNoaXZlX2Zvcm1hdF9mcm9tX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2FyY2hpdmVyczsgaSsrKQorCQlpZiAobWF0Y2hfZXh0ZW5zaW9uKGZpbGVuYW1lLCBhcmNoaXZlcnNbaV0tPm5hbWUpKQorCQkJcmV0dXJuIGFyY2hpdmVyc1tpXS0+bmFtZTsKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2FyY2hpdmUuaCBiL2FyY2hpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmQ5NmJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaGl2ZS5oCkBAIC0wLDAgKzEsNjAgQEAKKyNpZm5kZWYgQVJDSElWRV9ICisjZGVmaW5lIEFSQ0hJVkVfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorCitzdHJ1Y3QgcmVwb3NpdG9yeTsKKworc3RydWN0IGFyY2hpdmVyX2FyZ3MgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyZXBvOworCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisJY29uc3QgY2hhciAqYmFzZTsKKwlzaXplX3QgYmFzZWxlbjsKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXRfb2lkOworCWNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwl0aW1lc3RhbXBfdCB0aW1lOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwl1bnNpZ25lZCBpbnQgdmVyYm9zZSA6IDE7CisJdW5zaWduZWQgaW50IHdvcmt0cmVlX2F0dHJpYnV0ZXMgOiAxOworCXVuc2lnbmVkIGludCBjb252ZXJ0IDogMTsKKwlpbnQgY29tcHJlc3Npb25fbGV2ZWw7Cit9OworCisvKiBtYWluIGFwaSAqLworCitpbnQgd3JpdGVfYXJjaGl2ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJICBjb25zdCBjaGFyICpuYW1lX2hpbnQsIGludCByZW1vdGUpOworCitjb25zdCBjaGFyICphcmNoaXZlX2Zvcm1hdF9mcm9tX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKworLyogYXJjaGl2ZSBiYWNrZW5kIHN0dWZmICovCisKKyNkZWZpbmUgQVJDSElWRVJfV0FOVF9DT01QUkVTU0lPTl9MRVZFTFMgMQorI2RlZmluZSBBUkNISVZFUl9SRU1PVEUgMgorc3RydWN0IGFyY2hpdmVyIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCAoKndyaXRlX2FyY2hpdmUpKGNvbnN0IHN0cnVjdCBhcmNoaXZlciAqLCBzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqKTsKKwl1bnNpZ25lZCBmbGFnczsKKwl2b2lkICpkYXRhOworfTsKK3ZvaWQgcmVnaXN0ZXJfYXJjaGl2ZXIoc3RydWN0IGFyY2hpdmVyICopOworCit2b2lkIGluaXRfdGFyX2FyY2hpdmVyKHZvaWQpOwordm9pZCBpbml0X3ppcF9hcmNoaXZlcih2b2lkKTsKK3ZvaWQgaW5pdF9hcmNoaXZlcnModm9pZCk7CisKK3R5cGVkZWYgaW50ICgqd3JpdGVfYXJjaGl2ZV9lbnRyeV9mbl90KShzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQljb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbiwKKwkJCQkJdW5zaWduZWQgaW50IG1vZGUpOworCitpbnQgd3JpdGVfYXJjaGl2ZV9lbnRyaWVzKHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLCB3cml0ZV9hcmNoaXZlX2VudHJ5X2ZuX3Qgd3JpdGVfZW50cnkpOwordm9pZCAqb2JqZWN0X2ZpbGVfdG9fYXJjaGl2ZShjb25zdCBzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJCSAgICAgY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbW9kZSwgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyAqc2l6ZXApOworCisjZW5kaWYJLyogQVJDSElWRV9IICovCmRpZmYgLS1naXQgYS9hcmd2LWFycmF5LmMgYi9hcmd2LWFycmF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlZjhjMAotLS0gL2Rldi9udWxsCisrKyBiL2FyZ3YtYXJyYXkuYwpAQCAtMCwwICsxLDEwOSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitjb25zdCBjaGFyICplbXB0eV9hcmd2W10gPSB7IE5VTEwgfTsKKwordm9pZCBhcmd2X2FycmF5X2luaXQoc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5KQoreworCWFycmF5LT5hcmd2ID0gZW1wdHlfYXJndjsKKwlhcnJheS0+YXJnYyA9IDA7CisJYXJyYXktPmFsbG9jID0gMDsKK30KKworc3RhdGljIHZvaWQgYXJndl9hcnJheV9wdXNoX25vZHVwKHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKGFycmF5LT5hcmd2ID09IGVtcHR5X2FyZ3YpCisJCWFycmF5LT5hcmd2ID0gTlVMTDsKKworCUFMTE9DX0dST1coYXJyYXktPmFyZ3YsIGFycmF5LT5hcmdjICsgMiwgYXJyYXktPmFsbG9jKTsKKwlhcnJheS0+YXJndlthcnJheS0+YXJnYysrXSA9IHZhbHVlOworCWFycmF5LT5hcmd2W2FycmF5LT5hcmdjXSA9IE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKmFyZ3ZfYXJyYXlfcHVzaChzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWFyZ3ZfYXJyYXlfcHVzaF9ub2R1cChhcnJheSwgeHN0cmR1cCh2YWx1ZSkpOworCXJldHVybiBhcnJheS0+YXJndlthcnJheS0+YXJnYyAtIDFdOworfQorCitjb25zdCBjaGFyICphcmd2X2FycmF5X3B1c2hmKHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlzdHJ1Y3Qgc3RyYnVmIHYgPSBTVFJCVUZfSU5JVDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0cmJ1Zl92YWRkZigmdiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCWFyZ3ZfYXJyYXlfcHVzaF9ub2R1cChhcnJheSwgc3RyYnVmX2RldGFjaCgmdiwgTlVMTCkpOworCXJldHVybiBhcnJheS0+YXJndlthcnJheS0+YXJnYyAtIDFdOworfQorCit2b2lkIGFyZ3ZfYXJyYXlfcHVzaGwoc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwljb25zdCBjaGFyICphcmc7CisKKwl2YV9zdGFydChhcCwgYXJyYXkpOworCXdoaWxlICgoYXJnID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyICopKSkKKwkJYXJndl9hcnJheV9wdXNoKGFycmF5LCBhcmcpOworCXZhX2VuZChhcCk7Cit9CisKK3ZvaWQgYXJndl9hcnJheV9wdXNodihzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXksIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWZvciAoOyAqYXJndjsgYXJndisrKQorCQlhcmd2X2FycmF5X3B1c2goYXJyYXksICphcmd2KTsKK30KKwordm9pZCBhcmd2X2FycmF5X3BvcChzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXkpCit7CisJaWYgKCFhcnJheS0+YXJnYykKKwkJcmV0dXJuOworCWZyZWUoKGNoYXIgKilhcnJheS0+YXJndlthcnJheS0+YXJnYyAtIDFdKTsKKwlhcnJheS0+YXJndlthcnJheS0+YXJnYyAtIDFdID0gTlVMTDsKKwlhcnJheS0+YXJnYy0tOworfQorCit2b2lkIGFyZ3ZfYXJyYXlfc3BsaXQoc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5LCBjb25zdCBjaGFyICp0b19zcGxpdCkKK3sKKwl3aGlsZSAoaXNzcGFjZSgqdG9fc3BsaXQpKQorCQl0b19zcGxpdCsrOworCWZvciAoOzspIHsKKwkJY29uc3QgY2hhciAqcCA9IHRvX3NwbGl0OworCisJCWlmICghKnApCisJCQlicmVhazsKKworCQl3aGlsZSAoKnAgJiYgIWlzc3BhY2UoKnApKQorCQkJcCsrOworCQlhcmd2X2FycmF5X3B1c2hfbm9kdXAoYXJyYXksIHhzdHJuZHVwKHRvX3NwbGl0LCBwIC0gdG9fc3BsaXQpKTsKKworCQl3aGlsZSAoaXNzcGFjZSgqcCkpCisJCQlwKys7CisJCXRvX3NwbGl0ID0gcDsKKwl9Cit9CisKK3ZvaWQgYXJndl9hcnJheV9jbGVhcihzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXkpCit7CisJaWYgKGFycmF5LT5hcmd2ICE9IGVtcHR5X2FyZ3YpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+YXJnYzsgaSsrKQorCQkJZnJlZSgoY2hhciAqKWFycmF5LT5hcmd2W2ldKTsKKwkJZnJlZShhcnJheS0+YXJndik7CisJfQorCWFyZ3ZfYXJyYXlfaW5pdChhcnJheSk7Cit9CisKK2NvbnN0IGNoYXIgKiphcmd2X2FycmF5X2RldGFjaChzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXkpCit7CisJaWYgKGFycmF5LT5hcmd2ID09IGVtcHR5X2FyZ3YpCisJCXJldHVybiB4Y2FsbG9jKDEsIHNpemVvZihjb25zdCBjaGFyICopKTsKKwllbHNlIHsKKwkJY29uc3QgY2hhciAqKnJldCA9IGFycmF5LT5hcmd2OworCQlhcmd2X2FycmF5X2luaXQoYXJyYXkpOworCQlyZXR1cm4gcmV0OworCX0KK30KZGlmZiAtLWdpdCBhL2FyZ3YtYXJyYXkuaCBiL2FyZ3YtYXJyYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2QzYjEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJndi1hcnJheS5oCkBAIC0wLDAgKzEsODkgQEAKKyNpZm5kZWYgQVJHVl9BUlJBWV9ICisjZGVmaW5lIEFSR1ZfQVJSQVlfSAorCisvKioKKyAqIFRoZSBhcmd2LWFycmF5IEFQSSBhbGxvd3Mgb25lIHRvIGR5bmFtaWNhbGx5IGJ1aWxkIGFuZCBzdG9yZQorICogTlVMTC10ZXJtaW5hdGVkIGxpc3RzLiAgQW4gYXJndi1hcnJheSBtYWludGFpbnMgdGhlIGludmFyaWFudCB0aGF0IHRoZQorICogYGFyZ3ZgIG1lbWJlciBhbHdheXMgcG9pbnRzIHRvIGEgbm9uLU5VTEwgYXJyYXksIGFuZCB0aGF0IHRoZSBhcnJheSBpcworICogYWx3YXlzIE5VTEwtdGVybWluYXRlZCBhdCB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IGBhcmd2W2FyZ2NdYC4gVGhpcworICogbWFrZXMgdGhlIHJlc3VsdCBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBmdW5jdGlvbnMgZXhwZWN0aW5nIHRvIHJlY2VpdmUKKyAqIGFyZ3YgZnJvbSBtYWluKCkuCisgKgorICogVGhlIHN0cmluZy1saXN0IEFQSSAoZG9jdW1lbnRlZCBpbiBzdHJpbmctbGlzdC5oKSBpcyBzaW1pbGFyLCBidXQgY2Fubm90IGJlCisgKiB1c2VkIGZvciB0aGVzZSBwdXJwb3NlczsgaW5zdGVhZCBvZiBzdG9yaW5nIGEgc3RyYWlnaHQgc3RyaW5nIHBvaW50ZXIsCisgKiBpdCBjb250YWlucyBhbiBpdGVtIHN0cnVjdHVyZSB3aXRoIGEgYHV0aWxgIGZpZWxkIHRoYXQgaXMgbm90IGNvbXBhdGlibGUKKyAqIHdpdGggdGhlIHRyYWRpdGlvbmFsIGFyZ3YgaW50ZXJmYWNlLgorICoKKyAqIEVhY2ggYGFyZ3ZfYXJyYXlgIG1hbmFnZXMgaXRzIG93biBtZW1vcnkuIEFueSBzdHJpbmdzIHB1c2hlZCBpbnRvIHRoZQorICogYXJyYXkgYXJlIGR1cGxpY2F0ZWQsIGFuZCBhbGwgbWVtb3J5IGlzIGZyZWVkIGJ5IGFyZ3ZfYXJyYXlfY2xlYXIoKS4KKyAqLworCitleHRlcm4gY29uc3QgY2hhciAqZW1wdHlfYXJndltdOworCisvKioKKyAqIEEgc2luZ2xlIGFycmF5LiBUaGlzIHNob3VsZCBiZSBpbml0aWFsaXplZCBieSBhc3NpZ25tZW50IGZyb20KKyAqIGBBUkdWX0FSUkFZX0lOSVRgLCBvciBieSBjYWxsaW5nIGBhcmd2X2FycmF5X2luaXRgLiBUaGUgYGFyZ3ZgCisgKiBtZW1iZXIgY29udGFpbnMgdGhlIGFjdHVhbCBhcnJheTsgdGhlIGBhcmdjYCBtZW1iZXIgY29udGFpbnMgdGhlCisgKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5LCBub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZworICogTlVMTC4KKyAqLworc3RydWN0IGFyZ3ZfYXJyYXkgeworCWNvbnN0IGNoYXIgKiphcmd2OworCWludCBhcmdjOworCWludCBhbGxvYzsKK307CisKKyNkZWZpbmUgQVJHVl9BUlJBWV9JTklUIHsgZW1wdHlfYXJndiwgMCwgMCB9CisKKy8qKgorICogSW5pdGlhbGl6ZSBhbiBhcnJheS4gVGhpcyBpcyBubyBkaWZmZXJlbnQgdGhhbiBhc3NpZ25pbmcgZnJvbQorICogYEFSR1ZfQVJSQVlfSU5JVGAuCisgKi8KK3ZvaWQgYXJndl9hcnJheV9pbml0KHN0cnVjdCBhcmd2X2FycmF5ICopOworCisvKiBQdXNoIGEgY29weSBvZiBhIHN0cmluZyBvbnRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LiAqLworY29uc3QgY2hhciAqYXJndl9hcnJheV9wdXNoKHN0cnVjdCBhcmd2X2FycmF5ICosIGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogRm9ybWF0IGEgc3RyaW5nIGFuZCBwdXNoIGl0IG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuIFRoaXMgaXMgYQorICogY29udmVuaWVuY2Ugd3JhcHBlciBjb21iaW5pbmcgYHN0cmJ1Zl9hZGRmYCBhbmQgYGFyZ3ZfYXJyYXlfcHVzaGAuCisgKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLDIsMykpKQorY29uc3QgY2hhciAqYXJndl9hcnJheV9wdXNoZihzdHJ1Y3QgYXJndl9hcnJheSAqLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKy8qKgorICogUHVzaCBhIGxpc3Qgb2Ygc3RyaW5ncyBvbnRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LiBUaGUgYXJndW1lbnRzCisgKiBzaG91bGQgYmUgYSBsaXN0IG9mIGBjb25zdCBjaGFyICpgIHN0cmluZ3MsIHRlcm1pbmF0ZWQgYnkgYSBOVUxMCisgKiBhcmd1bWVudC4KKyAqLworTEFTVF9BUkdfTVVTVF9CRV9OVUxMCit2b2lkIGFyZ3ZfYXJyYXlfcHVzaGwoc3RydWN0IGFyZ3ZfYXJyYXkgKiwgLi4uKTsKKworLyogUHVzaCBhIG51bGwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzIG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuICovCit2b2lkIGFyZ3ZfYXJyYXlfcHVzaHYoc3RydWN0IGFyZ3ZfYXJyYXkgKiwgY29uc3QgY2hhciAqKik7CisKKy8qKgorICogUmVtb3ZlIHRoZSBmaW5hbCBlbGVtZW50IGZyb20gdGhlIGFycmF5LiBJZiB0aGVyZSBhcmUgbm8KKyAqIGVsZW1lbnRzIGluIHRoZSBhcnJheSwgZG8gbm90aGluZy4KKyAqLwordm9pZCBhcmd2X2FycmF5X3BvcChzdHJ1Y3QgYXJndl9hcnJheSAqKTsKKworLyogU3BsaXRzIGJ5IHdoaXRlc3BhY2U7IGRvZXMgbm90IGhhbmRsZSBxdW90ZWQgYXJndW1lbnRzISAqLwordm9pZCBhcmd2X2FycmF5X3NwbGl0KHN0cnVjdCBhcmd2X2FycmF5ICosIGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogRnJlZSBhbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB0byB0aGUKKyAqIGluaXRpYWwsIGVtcHR5IHN0YXRlLgorICovCit2b2lkIGFyZ3ZfYXJyYXlfY2xlYXIoc3RydWN0IGFyZ3ZfYXJyYXkgKik7CisKKy8qKgorICogRGlzY29ubmVjdCB0aGUgYGFyZ3ZgIG1lbWJlciBmcm9tIHRoZSBgYXJndl9hcnJheWAgc3RydWN0IGFuZAorICogcmV0dXJuIGl0LiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRoZSBtZW1vcnkgdXNlZAorICogYnkgdGhlIGFycmF5LCBhbmQgYnkgdGhlIHN0cmluZ3MgaXQgcmVmZXJlbmNlcy4gQWZ0ZXIgZGV0YWNoaW5nLAorICogdGhlIGBhcmd2X2FycmF5YCBpcyBpbiBhIHJlaW5pdGlhbGl6ZWQgc3RhdGUgYW5kIGNhbiBiZSBwdXNoZWQKKyAqIGludG8gYWdhaW4uCisgKi8KK2NvbnN0IGNoYXIgKiphcmd2X2FycmF5X2RldGFjaChzdHJ1Y3QgYXJndl9hcnJheSAqKTsKKworI2VuZGlmIC8qIEFSR1ZfQVJSQVlfSCAqLwpkaWZmIC0tZ2l0IGEvYXR0ci5jIGIvYXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MjZiMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hdHRyLmMKQEAgLTAsMCArMSwxMTYwIEBACisvKgorICogSGFuZGxlIGdpdCBhdHRyaWJ1dGVzLiAgU2VlIGdpdGF0dHJpYnV0ZXMoNSkgZm9yIGEgZGVzY3JpcHRpb24gb2YKKyAqIHRoZSBmaWxlIHN5bnRheCwgYW5kIGF0dHIuaCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgQVBJLgorICoKKyAqIE9uZSBiYXNpYyBkZXNpZ24gZGVjaXNpb24gaGVyZSBpcyB0aGF0IHdlIGFyZSBub3QgZ29pbmcgdG8gc3VwcG9ydAorICogYW4gaW5zYW5lbHkgbGFyZ2UgbnVtYmVyIG9mIGF0dHJpYnV0ZXMuCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisKK2NvbnN0IGNoYXIgZ2l0X2F0dHJfX3RydWVbXSA9ICIoYnVpbHRpbil0cnVlIjsKK2NvbnN0IGNoYXIgZ2l0X2F0dHJfX2ZhbHNlW10gPSAiXDAoYnVpbHRpbilmYWxzZSI7CitzdGF0aWMgY29uc3QgY2hhciBnaXRfYXR0cl9fdW5rbm93bltdID0gIihidWlsdGluKXVua25vd24iOworI2RlZmluZSBBVFRSX19UUlVFIGdpdF9hdHRyX190cnVlCisjZGVmaW5lIEFUVFJfX0ZBTFNFIGdpdF9hdHRyX19mYWxzZQorI2RlZmluZSBBVFRSX19VTlNFVCBOVUxMCisjZGVmaW5lIEFUVFJfX1VOS05PV04gZ2l0X2F0dHJfX3Vua25vd24KKworI2lmbmRlZiBERUJVR19BVFRSCisjZGVmaW5lIERFQlVHX0FUVFIgMAorI2VuZGlmCisKK3N0cnVjdCBnaXRfYXR0ciB7CisJaW50IGF0dHJfbnI7IC8qIHVuaXF1ZSBhdHRyaWJ1dGUgbnVtYmVyICovCisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOyAvKiBhdHRyaWJ1dGUgbmFtZSAqLworfTsKKworY29uc3QgY2hhciAqZ2l0X2F0dHJfbmFtZShjb25zdCBzdHJ1Y3QgZ2l0X2F0dHIgKmF0dHIpCit7CisJcmV0dXJuIGF0dHItPm5hbWU7Cit9CisKK3N0cnVjdCBhdHRyX2hhc2htYXAgeworCXN0cnVjdCBoYXNobWFwIG1hcDsKKwlwdGhyZWFkX211dGV4X3QgbXV0ZXg7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgaGFzaG1hcF9sb2NrKHN0cnVjdCBhdHRyX2hhc2htYXAgKm1hcCkKK3sKKwlwdGhyZWFkX211dGV4X2xvY2soJm1hcC0+bXV0ZXgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGFzaG1hcF91bmxvY2soc3RydWN0IGF0dHJfaGFzaG1hcCAqbWFwKQoreworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtYXAtPm11dGV4KTsKK30KKworLyoKKyAqIFRoZSBnbG9iYWwgZGljdGlvbmFyeSBvZiBhbGwgaW50ZXJuZWQgYXR0cmlidXRlcy4gIFRoaXMKKyAqIGlzIGEgc2luZ2xldG9uIG9iamVjdCB3aGljaCBpcyBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzLgorICogQWNjZXNzIHRvIHRoaXMgZGljdGlvbmFyeSBtdXN0IGJlIHN1cnJvdW5kZWQgd2l0aCBhIG11dGV4LgorICovCitzdGF0aWMgc3RydWN0IGF0dHJfaGFzaG1hcCBnX2F0dHJfaGFzaG1hcDsKKworLyogVGhlIGNvbnRhaW5lciBmb3Igb2JqZWN0cyBzdG9yZWQgaW4gInN0cnVjdCBhdHRyX2hhc2htYXAiICovCitzdHJ1Y3QgYXR0cl9oYXNoX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJY29uc3QgY2hhciAqa2V5OyAvKiB0aGUga2V5OyBtZW1vcnkgc2hvdWxkIGJlIG93bmVkIGJ5IHZhbHVlICovCisJc2l6ZV90IGtleWxlbjsgLyogbGVuZ3RoIG9mIHRoZSBrZXkgKi8KKwl2b2lkICp2YWx1ZTsgLyogdGhlIHN0b3JlZCB2YWx1ZSAqLworfTsKKworLyogYXR0cl9oYXNobWFwIGNvbXBhcmlzb24gZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgYXR0cl9oYXNoX2VudHJ5X2NtcChjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVwdHIsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCSAgICAgICBjb25zdCB2b2lkICp1bnVzZWRfa2V5ZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgYXR0cl9oYXNoX2VudHJ5ICphLCAqYjsKKworCWEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IGF0dHJfaGFzaF9lbnRyeSwgZW50KTsKKwliID0gY29udGFpbmVyX29mKGVudHJ5X29yX2tleSwgY29uc3Qgc3RydWN0IGF0dHJfaGFzaF9lbnRyeSwgZW50KTsKKwlyZXR1cm4gKGEtPmtleWxlbiAhPSBiLT5rZXlsZW4pIHx8IHN0cm5jbXAoYS0+a2V5LCBiLT5rZXksIGEtPmtleWxlbik7Cit9CisKKy8qIEluaXRpYWxpemUgYW4gJ2F0dHJfaGFzaG1hcCcgb2JqZWN0ICovCitzdGF0aWMgdm9pZCBhdHRyX2hhc2htYXBfaW5pdChzdHJ1Y3QgYXR0cl9oYXNobWFwICptYXApCit7CisJaGFzaG1hcF9pbml0KCZtYXAtPm1hcCwgYXR0cl9oYXNoX2VudHJ5X2NtcCwgTlVMTCwgMCk7Cit9CisKKy8qCisgKiBSZXRyaWV2ZSB0aGUgJ3ZhbHVlJyBzdG9yZWQgaW4gYSBoYXNobWFwIGdpdmVuIHRoZSBwcm92aWRlZCAna2V5Jy4KKyAqIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIGVudHJ5LCByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIHZvaWQgKmF0dHJfaGFzaG1hcF9nZXQoc3RydWN0IGF0dHJfaGFzaG1hcCAqbWFwLAorCQkJICAgICAgY29uc3QgY2hhciAqa2V5LCBzaXplX3Qga2V5bGVuKQoreworCXN0cnVjdCBhdHRyX2hhc2hfZW50cnkgazsKKwlzdHJ1Y3QgYXR0cl9oYXNoX2VudHJ5ICplOworCisJaWYgKCFtYXAtPm1hcC50YWJsZXNpemUpCisJCWF0dHJfaGFzaG1hcF9pbml0KG1hcCk7CisKKwloYXNobWFwX2VudHJ5X2luaXQoJmsuZW50LCBtZW1oYXNoKGtleSwga2V5bGVuKSk7CisJay5rZXkgPSBrZXk7CisJay5rZXlsZW4gPSBrZXlsZW47CisJZSA9IGhhc2htYXBfZ2V0X2VudHJ5KCZtYXAtPm1hcCwgJmssIGVudCwgTlVMTCk7CisKKwlyZXR1cm4gZSA/IGUtPnZhbHVlIDogTlVMTDsKK30KKworLyogQWRkICd2YWx1ZScgdG8gYSBoYXNobWFwIGJhc2VkIG9uIHRoZSBwcm92aWRlZCAna2V5Jy4gKi8KK3N0YXRpYyB2b2lkIGF0dHJfaGFzaG1hcF9hZGQoc3RydWN0IGF0dHJfaGFzaG1hcCAqbWFwLAorCQkJICAgICBjb25zdCBjaGFyICprZXksIHNpemVfdCBrZXlsZW4sCisJCQkgICAgIHZvaWQgKnZhbHVlKQoreworCXN0cnVjdCBhdHRyX2hhc2hfZW50cnkgKmU7CisKKwlpZiAoIW1hcC0+bWFwLnRhYmxlc2l6ZSkKKwkJYXR0cl9oYXNobWFwX2luaXQobWFwKTsKKworCWUgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgYXR0cl9oYXNoX2VudHJ5KSk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZlLT5lbnQsIG1lbWhhc2goa2V5LCBrZXlsZW4pKTsKKwllLT5rZXkgPSBrZXk7CisJZS0+a2V5bGVuID0ga2V5bGVuOworCWUtPnZhbHVlID0gdmFsdWU7CisKKwloYXNobWFwX2FkZCgmbWFwLT5tYXAsICZlLT5lbnQpOworfQorCitzdHJ1Y3QgYWxsX2F0dHJzX2l0ZW0geworCWNvbnN0IHN0cnVjdCBnaXRfYXR0ciAqYXR0cjsKKwljb25zdCBjaGFyICp2YWx1ZTsKKwkvKgorCSAqIElmICdtYWNybycgaXMgbm9uLU5VTEwsIGluZGljYXRlcyB0aGF0ICdhdHRyJyBpcyBhIG1hY3JvIGJhc2VkIG9uCisJICogdGhlIGN1cnJlbnQgYXR0cmlidXRlIHN0YWNrIGFuZCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIG1hdGNoX2F0dHIKKwkgKiBkZWZpbml0aW9uIG9mIHRoZSBtYWNybworCSAqLworCWNvbnN0IHN0cnVjdCBtYXRjaF9hdHRyICptYWNybzsKK307CisKKy8qCisgKiBSZWFsbG9jYXRlIGFuZCByZWluaXRpYWxpemUgdGhlIGFycmF5IG9mIGFsbCBhdHRyaWJ1dGVzICh3aGljaCBpcyB1c2VkIGluCisgKiB0aGUgYXR0cmlidXRlIGNvbGxlY3Rpb24gcHJvY2VzcykgaW4gJ2NoZWNrJyBiYXNlZCBvbiB0aGUgZ2xvYmFsIGRpY3Rpb25hcnkKKyAqIG9mIGF0dHJpYnV0ZXMuCisgKi8KK3N0YXRpYyB2b2lkIGFsbF9hdHRyc19pbml0KHN0cnVjdCBhdHRyX2hhc2htYXAgKm1hcCwgc3RydWN0IGF0dHJfY2hlY2sgKmNoZWNrKQoreworCWludCBpOworCXVuc2lnbmVkIGludCBzaXplOworCisJaGFzaG1hcF9sb2NrKG1hcCk7CisKKwlzaXplID0gaGFzaG1hcF9nZXRfc2l6ZSgmbWFwLT5tYXApOworCWlmIChzaXplIDwgY2hlY2stPmFsbF9hdHRyc19ucikKKwkJQlVHKCJpbnRlcm5lZCBhdHRyaWJ1dGVzIHNob3VsZG4ndCBiZSBkZWxldGVkIik7CisKKwkvKgorCSAqIElmIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyBpbiB0aGUgZ2xvYmFsIGRpY3Rpb25hcnkgaGFzIGluY3JlYXNlZAorCSAqIChvciB0aGlzIGF0dHJfY2hlY2sgaW5zdGFuY2UgZG9lc24ndCBoYXZlIGFuIGluaXRpYWxpemVkIGFsbF9hdHRycworCSAqIGZpZWxkKSwgcmVhbGxvY2F0ZSB0aGUgcHJvdmlkZWQgYXR0cl9jaGVjayBpbnN0YW5jZSdzIGFsbF9hdHRycworCSAqIGZpZWxkIGFuZCBmaWxsIGVhY2ggZW50cnkgd2l0aCBpdHMgY29ycmVzcG9uZGluZyBnaXRfYXR0ci4KKwkgKi8KKwlpZiAoc2l6ZSAhPSBjaGVjay0+YWxsX2F0dHJzX25yKSB7CisJCXN0cnVjdCBhdHRyX2hhc2hfZW50cnkgKmU7CisJCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKworCQlSRUFMTE9DX0FSUkFZKGNoZWNrLT5hbGxfYXR0cnMsIHNpemUpOworCQljaGVjay0+YWxsX2F0dHJzX25yID0gc2l6ZTsKKworCQloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KCZtYXAtPm1hcCwgJml0ZXIsIGUsCisJCQkJCWVudCAvKiBtZW1iZXIgbmFtZSAqLykgeworCQkJY29uc3Qgc3RydWN0IGdpdF9hdHRyICphID0gZS0+dmFsdWU7CisJCQljaGVjay0+YWxsX2F0dHJzW2EtPmF0dHJfbnJdLmF0dHIgPSBhOworCQl9CisJfQorCisJaGFzaG1hcF91bmxvY2sobWFwKTsKKworCS8qCisJICogUmUtaW5pdGlhbGl6ZSBldmVyeSBlbnRyeSBpbiBjaGVjay0+YWxsX2F0dHJzLgorCSAqIFRoaXMgcmUtaW5pdGlhbGl6YXRpb24gY2FuIGxpdmUgb3V0c2lkZSBvZiB0aGUgbG9ja2VkIHJlZ2lvbiBzaW5jZQorCSAqIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeSBpcyBubyBsb25nZXIgYmVpbmcgYWNjZXNzZWQuCisJICovCisJZm9yIChpID0gMDsgaSA8IGNoZWNrLT5hbGxfYXR0cnNfbnI7IGkrKykgeworCQljaGVjay0+YWxsX2F0dHJzW2ldLnZhbHVlID0gQVRUUl9fVU5LTk9XTjsKKwkJY2hlY2stPmFsbF9hdHRyc1tpXS5tYWNybyA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGF0dHJfbmFtZV92YWxpZChjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbikKK3sKKwkvKgorCSAqIEF0dHJpYnV0ZSBuYW1lIGNhbm5vdCBiZWdpbiB3aXRoICctJyBhbmQgbXVzdCBjb25zaXN0IG9mCisJICogY2hhcmFjdGVycyBmcm9tIFstQS1aYS16MC05Xy5dLgorCSAqLworCWlmIChuYW1lbGVuIDw9IDAgfHwgKm5hbWUgPT0gJy0nKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAobmFtZWxlbi0tKSB7CisJCWNoYXIgY2ggPSAqbmFtZSsrOworCQlpZiAoISAoY2ggPT0gJy0nIHx8IGNoID09ICcuJyB8fCBjaCA9PSAnXycgfHwKKwkJICAgICAgICgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKSB8fAorCQkgICAgICAgKCdhJyA8PSBjaCAmJiBjaCA8PSAneicpIHx8CisJCSAgICAgICAoJ0EnIDw9IGNoICYmIGNoIDw9ICdaJykpICkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0X2ludmFsaWRfYXR0cihjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuLAorCQkJCWNvbnN0IGNoYXIgKnNyYywgaW50IGxpbmVubykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZlcnIsIF8oIiUuKnMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWUiKSwKKwkJICAgIChpbnQpIGxlbiwgbmFtZSk7CisJZnByaW50ZihzdGRlcnIsICIlczogJXM6JWRcbiIsIGVyci5idWYsIHNyYywgbGluZW5vKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKK30KKworLyoKKyAqIEdpdmVuIGEgJ25hbWUnLCBsb29rdXAgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgaW4gdGhlIGdsb2JhbAorICogZGljdGlvbmFyeS4gIElmIG5vIGVudHJ5IGlzIGZvdW5kLCBjcmVhdGUgYSBuZXcgYXR0cmlidXRlIGFuZCBzdG9yZSBpdCBpbgorICogdGhlIGRpY3Rpb25hcnkuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2l0X2F0dHIgKmdpdF9hdHRyX2ludGVybmFsKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKQoreworCXN0cnVjdCBnaXRfYXR0ciAqYTsKKworCWlmICghYXR0cl9uYW1lX3ZhbGlkKG5hbWUsIG5hbWVsZW4pKQorCQlyZXR1cm4gTlVMTDsKKworCWhhc2htYXBfbG9jaygmZ19hdHRyX2hhc2htYXApOworCisJYSA9IGF0dHJfaGFzaG1hcF9nZXQoJmdfYXR0cl9oYXNobWFwLCBuYW1lLCBuYW1lbGVuKTsKKworCWlmICghYSkgeworCQlGTEVYX0FMTE9DX01FTShhLCBuYW1lLCBuYW1lLCBuYW1lbGVuKTsKKwkJYS0+YXR0cl9uciA9IGhhc2htYXBfZ2V0X3NpemUoJmdfYXR0cl9oYXNobWFwLm1hcCk7CisKKwkJYXR0cl9oYXNobWFwX2FkZCgmZ19hdHRyX2hhc2htYXAsIGEtPm5hbWUsIG5hbWVsZW4sIGEpOworCQlhc3NlcnQoYS0+YXR0cl9uciA9PQorCQkgICAgICAgKGhhc2htYXBfZ2V0X3NpemUoJmdfYXR0cl9oYXNobWFwLm1hcCkgLSAxKSk7CisJfQorCisJaGFzaG1hcF91bmxvY2soJmdfYXR0cl9oYXNobWFwKTsKKworCXJldHVybiBhOworfQorCitjb25zdCBzdHJ1Y3QgZ2l0X2F0dHIgKmdpdF9hdHRyKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIGdpdF9hdHRyX2ludGVybmFsKG5hbWUsIHN0cmxlbihuYW1lKSk7Cit9CisKKy8qIFdoYXQgZG9lcyBhIG1hdGNoZWQgcGF0dGVybiBkZWNpZGU/ICovCitzdHJ1Y3QgYXR0cl9zdGF0ZSB7CisJY29uc3Qgc3RydWN0IGdpdF9hdHRyICphdHRyOworCWNvbnN0IGNoYXIgKnNldHRvOworfTsKKworc3RydWN0IHBhdHRlcm4geworCWNvbnN0IGNoYXIgKnBhdHRlcm47CisJaW50IHBhdHRlcm5sZW47CisJaW50IG5vd2lsZGNhcmRsZW47CisJdW5zaWduZWQgZmxhZ3M7CQkvKiBQQVRURVJOX0ZMQUdfKiAqLworfTsKKworLyoKKyAqIE9uZSBydWxlLCBhcyBmcm9tIGEgLmdpdGF0dHJpYnV0ZXMgZmlsZS4KKyAqCisgKiBJZiBpc19tYWNybyBpcyB0cnVlLCB0aGVuIHUuYXR0ciBpcyBhIHBvaW50ZXIgdG8gdGhlIGdpdF9hdHRyIGJlaW5nCisgKiBkZWZpbmVkLgorICoKKyAqIElmIGlzX21hY3JvIGlzIGZhbHNlLCB0aGVuIHUucGF0IGlzIHRoZSBmaWxlbmFtZSBwYXR0ZXJuIHRvIHdoaWNoIHRoZQorICogcnVsZSBhcHBsaWVzLgorICoKKyAqIEluIGVpdGhlciBjYXNlLCBudW1fYXR0ciBpcyB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgYWZmZWN0ZWQgYnkKKyAqIHRoaXMgcnVsZSwgYW5kIHN0YXRlIGlzIGFuIGFycmF5IGxpc3RpbmcgdGhlbS4gIFRoZSBhdHRyaWJ1dGVzIGFyZQorICogbGlzdGVkIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBmaWxlIChtYWNyb3MgdW5leHBhbmRlZCkuCisgKi8KK3N0cnVjdCBtYXRjaF9hdHRyIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBwYXR0ZXJuIHBhdDsKKwkJY29uc3Qgc3RydWN0IGdpdF9hdHRyICphdHRyOworCX0gdTsKKwljaGFyIGlzX21hY3JvOworCXVuc2lnbmVkIG51bV9hdHRyOworCXN0cnVjdCBhdHRyX3N0YXRlIHN0YXRlW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgYmxhbmtbXSA9ICIgXHRcclxuIjsKKworLyoKKyAqIFBhcnNlIGEgd2hpdGVzcGFjZS1kZWxpbWl0ZWQgYXR0cmlidXRlIHN0YXRlIChpLmUuLCAiYXR0ciIsCisgKiAiLWF0dHIiLCAiIWF0dHIiLCBvciAiYXR0cj12YWx1ZSIpIGZyb20gdGhlIHN0cmluZyBzdGFydGluZyBhdCBzcmMuCisgKiBJZiBlIGlzIG5vdCBOVUxMLCB3cml0ZSB0aGUgcmVzdWx0cyB0byAqZS4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlCisgKiByZW1haW5kZXIgb2YgdGhlIHN0cmluZyAod2l0aCBsZWFkaW5nIHdoaXRlc3BhY2UgcmVtb3ZlZCksIG9yIE5VTEwKKyAqIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2F0dHIoY29uc3QgY2hhciAqc3JjLCBpbnQgbGluZW5vLCBjb25zdCBjaGFyICpjcCwKKwkJCSAgICAgIHN0cnVjdCBhdHRyX3N0YXRlICplKQoreworCWNvbnN0IGNoYXIgKmVwLCAqZXF1YWxzOworCWludCBsZW47CisKKwllcCA9IGNwICsgc3RyY3NwbihjcCwgYmxhbmspOworCWVxdWFscyA9IHN0cmNocihjcCwgJz0nKTsKKwlpZiAoZXF1YWxzICYmIGVwIDwgZXF1YWxzKQorCQllcXVhbHMgPSBOVUxMOworCWlmIChlcXVhbHMpCisJCWxlbiA9IGVxdWFscyAtIGNwOworCWVsc2UKKwkJbGVuID0gZXAgLSBjcDsKKwlpZiAoIWUpIHsKKwkJaWYgKCpjcCA9PSAnLScgfHwgKmNwID09ICchJykgeworCQkJY3ArKzsKKwkJCWxlbi0tOworCQl9CisJCWlmICghYXR0cl9uYW1lX3ZhbGlkKGNwLCBsZW4pKSB7CisJCQlyZXBvcnRfaW52YWxpZF9hdHRyKGNwLCBsZW4sIHNyYywgbGluZW5vKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQXMgdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgY2FsbGVkIHR3aWNlLCBvbmNlIHdpdGgKKwkJICogZSA9PSBOVUxMIGluIHRoZSBmaXJzdCBwYXNzIGFuZCB0aGVuIGUgIT0gTlVMTCBpbgorCQkgKiB0aGUgc2Vjb25kIHBhc3MsIG5vIG5lZWQgZm9yIGF0dHJfbmFtZV92YWxpZCgpCisJCSAqIGNoZWNrIGhlcmUuCisJCSAqLworCQlpZiAoKmNwID09ICctJyB8fCAqY3AgPT0gJyEnKSB7CisJCQllLT5zZXR0byA9ICgqY3AgPT0gJy0nKSA/IEFUVFJfX0ZBTFNFIDogQVRUUl9fVU5TRVQ7CisJCQljcCsrOworCQkJbGVuLS07CisJCX0KKwkJZWxzZSBpZiAoIWVxdWFscykKKwkJCWUtPnNldHRvID0gQVRUUl9fVFJVRTsKKwkJZWxzZSB7CisJCQllLT5zZXR0byA9IHhtZW1kdXB6KGVxdWFscyArIDEsIGVwIC0gZXF1YWxzIC0gMSk7CisJCX0KKwkJZS0+YXR0ciA9IGdpdF9hdHRyX2ludGVybmFsKGNwLCBsZW4pOworCX0KKwlyZXR1cm4gZXAgKyBzdHJzcG4oZXAsIGJsYW5rKTsKK30KKworc3RhdGljIHN0cnVjdCBtYXRjaF9hdHRyICpwYXJzZV9hdHRyX2xpbmUoY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hhciAqc3JjLAorCQkJCQkgIGludCBsaW5lbm8sIGludCBtYWNyb19vaykKK3sKKwlpbnQgbmFtZWxlbjsKKwlpbnQgbnVtX2F0dHIsIGk7CisJY29uc3QgY2hhciAqY3AsICpuYW1lLCAqc3RhdGVzOworCXN0cnVjdCBtYXRjaF9hdHRyICpyZXMgPSBOVUxMOworCWludCBpc19tYWNybzsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdHRlcm4gPSBTVFJCVUZfSU5JVDsKKworCWNwID0gbGluZSArIHN0cnNwbihsaW5lLCBibGFuayk7CisJaWYgKCEqY3AgfHwgKmNwID09ICcjJykKKwkJcmV0dXJuIE5VTEw7CisJbmFtZSA9IGNwOworCisJaWYgKCpjcCA9PSAnIicgJiYgIXVucXVvdGVfY19zdHlsZSgmcGF0dGVybiwgbmFtZSwgJnN0YXRlcykpIHsKKwkJbmFtZSA9IHBhdHRlcm4uYnVmOworCQluYW1lbGVuID0gcGF0dGVybi5sZW47CisJfSBlbHNlIHsKKwkJbmFtZWxlbiA9IHN0cmNzcG4obmFtZSwgYmxhbmspOworCQlzdGF0ZXMgPSBuYW1lICsgbmFtZWxlbjsKKwl9CisKKwlpZiAoc3RybGVuKEFUVFJJQlVURV9NQUNST19QUkVGSVgpIDwgbmFtZWxlbiAmJgorCSAgICBzdGFydHNfd2l0aChuYW1lLCBBVFRSSUJVVEVfTUFDUk9fUFJFRklYKSkgeworCQlpZiAoIW1hY3JvX29rKSB7CisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiJXMgbm90IGFsbG93ZWQ6ICVzOiVkIiksCisJCQkJICAgbmFtZSwgc3JjLCBsaW5lbm8pOworCQkJZ290byBmYWlsX3JldHVybjsKKwkJfQorCQlpc19tYWNybyA9IDE7CisJCW5hbWUgKz0gc3RybGVuKEFUVFJJQlVURV9NQUNST19QUkVGSVgpOworCQluYW1lICs9IHN0cnNwbihuYW1lLCBibGFuayk7CisJCW5hbWVsZW4gPSBzdHJjc3BuKG5hbWUsIGJsYW5rKTsKKwkJaWYgKCFhdHRyX25hbWVfdmFsaWQobmFtZSwgbmFtZWxlbikpIHsKKwkJCXJlcG9ydF9pbnZhbGlkX2F0dHIobmFtZSwgbmFtZWxlbiwgc3JjLCBsaW5lbm8pOworCQkJZ290byBmYWlsX3JldHVybjsKKwkJfQorCX0KKwllbHNlCisJCWlzX21hY3JvID0gMDsKKworCXN0YXRlcyArPSBzdHJzcG4oc3RhdGVzLCBibGFuayk7CisKKwkvKiBGaXJzdCBwYXNzIHRvIGNvdW50IHRoZSBhdHRyX3N0YXRlcyAqLworCWZvciAoY3AgPSBzdGF0ZXMsIG51bV9hdHRyID0gMDsgKmNwOyBudW1fYXR0cisrKSB7CisJCWNwID0gcGFyc2VfYXR0cihzcmMsIGxpbmVubywgY3AsIE5VTEwpOworCQlpZiAoIWNwKQorCQkJZ290byBmYWlsX3JldHVybjsKKwl9CisKKwlyZXMgPSB4Y2FsbG9jKDEsCisJCSAgICAgIHNpemVvZigqcmVzKSArCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgYXR0cl9zdGF0ZSkgKiBudW1fYXR0ciArCisJCSAgICAgIChpc19tYWNybyA/IDAgOiBuYW1lbGVuICsgMSkpOworCWlmIChpc19tYWNybykgeworCQlyZXMtPnUuYXR0ciA9IGdpdF9hdHRyX2ludGVybmFsKG5hbWUsIG5hbWVsZW4pOworCX0gZWxzZSB7CisJCWNoYXIgKnAgPSAoY2hhciAqKSYocmVzLT5zdGF0ZVtudW1fYXR0cl0pOworCQltZW1jcHkocCwgbmFtZSwgbmFtZWxlbik7CisJCXJlcy0+dS5wYXQucGF0dGVybiA9IHA7CisJCXBhcnNlX3BhdGhfcGF0dGVybigmcmVzLT51LnBhdC5wYXR0ZXJuLAorCQkJCSAgICAgICZyZXMtPnUucGF0LnBhdHRlcm5sZW4sCisJCQkJICAgICAgJnJlcy0+dS5wYXQuZmxhZ3MsCisJCQkJICAgICAgJnJlcy0+dS5wYXQubm93aWxkY2FyZGxlbik7CisJCWlmIChyZXMtPnUucGF0LmZsYWdzICYgUEFUVEVSTl9GTEFHX05FR0FUSVZFKSB7CisJCQl3YXJuaW5nKF8oIk5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBpZ25vcmVkIGluIGdpdCBhdHRyaWJ1dGVzXG4iCisJCQkJICAiVXNlICdcXCEnIGZvciBsaXRlcmFsIGxlYWRpbmcgZXhjbGFtYXRpb24uIikpOworCQkJZ290byBmYWlsX3JldHVybjsKKwkJfQorCX0KKwlyZXMtPmlzX21hY3JvID0gaXNfbWFjcm87CisJcmVzLT5udW1fYXR0ciA9IG51bV9hdHRyOworCisJLyogU2Vjb25kIHBhc3MgdG8gZmlsbCB0aGUgYXR0cl9zdGF0ZXMgKi8KKwlmb3IgKGNwID0gc3RhdGVzLCBpID0gMDsgKmNwOyBpKyspIHsKKwkJY3AgPSBwYXJzZV9hdHRyKHNyYywgbGluZW5vLCBjcCwgJihyZXMtPnN0YXRlW2ldKSk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnBhdHRlcm4pOworCXJldHVybiByZXM7CisKK2ZhaWxfcmV0dXJuOgorCXN0cmJ1Zl9yZWxlYXNlKCZwYXR0ZXJuKTsKKwlmcmVlKHJlcyk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBMaWtlIGluZm8vZXhjbHVkZSBhbmQgLmdpdGlnbm9yZSwgdGhlIGF0dHJpYnV0ZSBpbmZvcm1hdGlvbiBjYW4KKyAqIGNvbWUgZnJvbSBtYW55IHBsYWNlcy4KKyAqCisgKiAoMSkgLmdpdGF0dHJpYnV0ZXMgZmlsZSBvZiB0aGUgc2FtZSBkaXJlY3Rvcnk7CisgKiAoMikgLmdpdGF0dHJpYnV0ZXMgZmlsZSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBpZiAoMSkgZG9lcyBub3QgaGF2ZQorICogICAgICBhbnkgbWF0Y2g7IHRoaXMgZ29lcyByZWN1cnNpdmVseSB1cHdhcmRzLCBqdXN0IGxpa2UgLmdpdGlnbm9yZS4KKyAqICgzKSAkR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXMsIHdoaWNoIG92ZXJyaWRlcyBib3RoIG9mIHRoZSBhYm92ZS4KKyAqCisgKiBJbiB0aGUgc2FtZSBmaWxlLCBsYXRlciBlbnRyaWVzIG92ZXJyaWRlIHRoZSBlYXJsaWVyIG1hdGNoLCBzbyBpbiB0aGUKKyAqIGdsb2JhbCBsaXN0LCB3ZSB3b3VsZCBoYXZlIGVudHJpZXMgZnJvbSBpbmZvL2F0dHJpYnV0ZXMgdGhlIGVhcmxpZXN0CisgKiAocmVhZGluZyB0aGUgZmlsZSBmcm9tIHRvcCB0byBib3R0b20pLCAuZ2l0YXR0cmlidXRlcyBvZiB0aGUgcm9vdAorICogZGlyZWN0b3J5IChhZ2FpbiwgcmVhZGluZyB0aGUgZmlsZSBmcm9tIHRvcCB0byBib3R0b20pIGRvd24gdG8gdGhlCisgKiBjdXJyZW50IGRpcmVjdG9yeSwgYW5kIHRoZW4gc2NhbiB0aGUgbGlzdCBiYWNrd2FyZHMgdG8gZmluZCB0aGUgZmlyc3QgbWF0Y2guCisgKiBUaGlzIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgd2hhdCBpc19leGNsdWRlZCgpIGRvZXMgaW4gZGlyLmMgdG8gZGVhbCB3aXRoCisgKiAuZ2l0aWdub3JlIGZpbGUgYW5kIGluZm8vZXhjbHVkZXMgZmlsZSBhcyBhIGZhbGxiYWNrLgorICovCisKK3N0cnVjdCBhdHRyX3N0YWNrIHsKKwlzdHJ1Y3QgYXR0cl9zdGFjayAqcHJldjsKKwljaGFyICpvcmlnaW47CisJc2l6ZV90IG9yaWdpbmxlbjsKKwl1bnNpZ25lZCBudW1fbWF0Y2hlczsKKwl1bnNpZ25lZCBhbGxvYzsKKwlzdHJ1Y3QgbWF0Y2hfYXR0ciAqKmF0dHJzOworfTsKKworc3RhdGljIHZvaWQgYXR0cl9zdGFja19mcmVlKHN0cnVjdCBhdHRyX3N0YWNrICplKQoreworCWludCBpOworCWZyZWUoZS0+b3JpZ2luKTsKKwlmb3IgKGkgPSAwOyBpIDwgZS0+bnVtX21hdGNoZXM7IGkrKykgeworCQlzdHJ1Y3QgbWF0Y2hfYXR0ciAqYSA9IGUtPmF0dHJzW2ldOworCQlpbnQgajsKKwkJZm9yIChqID0gMDsgaiA8IGEtPm51bV9hdHRyOyBqKyspIHsKKwkJCWNvbnN0IGNoYXIgKnNldHRvID0gYS0+c3RhdGVbal0uc2V0dG87CisJCQlpZiAoc2V0dG8gPT0gQVRUUl9fVFJVRSB8fAorCQkJICAgIHNldHRvID09IEFUVFJfX0ZBTFNFIHx8CisJCQkgICAgc2V0dG8gPT0gQVRUUl9fVU5TRVQgfHwKKwkJCSAgICBzZXR0byA9PSBBVFRSX19VTktOT1dOKQorCQkJCTsKKwkJCWVsc2UKKwkJCQlmcmVlKChjaGFyICopIHNldHRvKTsKKwkJfQorCQlmcmVlKGEpOworCX0KKwlmcmVlKGUtPmF0dHJzKTsKKwlmcmVlKGUpOworfQorCitzdGF0aWMgdm9pZCBkcm9wX2F0dHJfc3RhY2soc3RydWN0IGF0dHJfc3RhY2sgKipzdGFjaykKK3sKKwl3aGlsZSAoKnN0YWNrKSB7CisJCXN0cnVjdCBhdHRyX3N0YWNrICplbGVtID0gKnN0YWNrOworCQkqc3RhY2sgPSBlbGVtLT5wcmV2OworCQlhdHRyX3N0YWNrX2ZyZWUoZWxlbSk7CisJfQorfQorCisvKiBMaXN0IG9mIGFsbCBhdHRyX2NoZWNrIHN0cnVjdHM7IGFjY2VzcyBzaG91bGQgYmUgc3Vycm91bmRlZCBieSBtdXRleCAqLworc3RhdGljIHN0cnVjdCBjaGVja192ZWN0b3IgeworCXNpemVfdCBucjsKKwlzaXplX3QgYWxsb2M7CisJc3RydWN0IGF0dHJfY2hlY2sgKipjaGVja3M7CisJcHRocmVhZF9tdXRleF90IG11dGV4OworfSBjaGVja192ZWN0b3I7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZWN0b3JfbG9jayh2b2lkKQoreworCXB0aHJlYWRfbXV0ZXhfbG9jaygmY2hlY2tfdmVjdG9yLm11dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZlY3Rvcl91bmxvY2sodm9pZCkKK3sKKwlwdGhyZWFkX211dGV4X3VubG9jaygmY2hlY2tfdmVjdG9yLm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfdmVjdG9yX2FkZChzdHJ1Y3QgYXR0cl9jaGVjayAqYykKK3sKKwl2ZWN0b3JfbG9jaygpOworCisJQUxMT0NfR1JPVyhjaGVja192ZWN0b3IuY2hlY2tzLAorCQkgICBjaGVja192ZWN0b3IubnIgKyAxLAorCQkgICBjaGVja192ZWN0b3IuYWxsb2MpOworCWNoZWNrX3ZlY3Rvci5jaGVja3NbY2hlY2tfdmVjdG9yLm5yKytdID0gYzsKKworCXZlY3Rvcl91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfdmVjdG9yX3JlbW92ZShzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2spCit7CisJaW50IGk7CisKKwl2ZWN0b3JfbG9jaygpOworCisJLyogRmluZCBlbnRyeSAqLworCWZvciAoaSA9IDA7IGkgPCBjaGVja192ZWN0b3IubnI7IGkrKykKKwkJaWYgKGNoZWNrX3ZlY3Rvci5jaGVja3NbaV0gPT0gY2hlY2spCisJCQlicmVhazsKKworCWlmIChpID49IGNoZWNrX3ZlY3Rvci5ucikKKwkJQlVHKCJubyBlbnRyeSBmb3VuZCIpOworCisJLyogc2hpZnQgZW50cmllcyBvdmVyICovCisJZm9yICg7IGkgPCBjaGVja192ZWN0b3IubnIgLSAxOyBpKyspCisJCWNoZWNrX3ZlY3Rvci5jaGVja3NbaV0gPSBjaGVja192ZWN0b3IuY2hlY2tzW2kgKyAxXTsKKworCWNoZWNrX3ZlY3Rvci5uci0tOworCisJdmVjdG9yX3VubG9jaygpOworfQorCisvKiBJdGVyYXRlIHRocm91Z2ggYWxsIGF0dHJfY2hlY2sgaW5zdGFuY2VzIGFuZCBkcm9wIHRoZWlyIHN0YWNrcyAqLworc3RhdGljIHZvaWQgZHJvcF9hbGxfYXR0cl9zdGFja3Modm9pZCkKK3sKKwlpbnQgaTsKKworCXZlY3Rvcl9sb2NrKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2hlY2tfdmVjdG9yLm5yOyBpKyspIHsKKwkJZHJvcF9hdHRyX3N0YWNrKCZjaGVja192ZWN0b3IuY2hlY2tzW2ldLT5zdGFjayk7CisJfQorCisJdmVjdG9yX3VubG9jaygpOworfQorCitzdHJ1Y3QgYXR0cl9jaGVjayAqYXR0cl9jaGVja19hbGxvYyh2b2lkKQoreworCXN0cnVjdCBhdHRyX2NoZWNrICpjID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGF0dHJfY2hlY2spKTsKKworCS8qIHNhdmUgcG9pbnRlciB0byB0aGUgY2hlY2sgc3RydWN0ICovCisJY2hlY2tfdmVjdG9yX2FkZChjKTsKKworCXJldHVybiBjOworfQorCitzdHJ1Y3QgYXR0cl9jaGVjayAqYXR0cl9jaGVja19pbml0bChjb25zdCBjaGFyICpvbmUsIC4uLikKK3sKKwlzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2s7CisJaW50IGNudDsKKwl2YV9saXN0IHBhcmFtczsKKwljb25zdCBjaGFyICpwYXJhbTsKKworCXZhX3N0YXJ0KHBhcmFtcywgb25lKTsKKwlmb3IgKGNudCA9IDE7IChwYXJhbSA9IHZhX2FyZyhwYXJhbXMsIGNvbnN0IGNoYXIgKikpICE9IE5VTEw7IGNudCsrKQorCQk7CisJdmFfZW5kKHBhcmFtcyk7CisKKwljaGVjayA9IGF0dHJfY2hlY2tfYWxsb2MoKTsKKwljaGVjay0+bnIgPSBjbnQ7CisJY2hlY2stPmFsbG9jID0gY250OworCWNoZWNrLT5pdGVtcyA9IHhjYWxsb2MoY250LCBzaXplb2Yoc3RydWN0IGF0dHJfY2hlY2tfaXRlbSkpOworCisJY2hlY2stPml0ZW1zWzBdLmF0dHIgPSBnaXRfYXR0cihvbmUpOworCXZhX3N0YXJ0KHBhcmFtcywgb25lKTsKKwlmb3IgKGNudCA9IDE7IGNudCA8IGNoZWNrLT5ucjsgY250KyspIHsKKwkJY29uc3Qgc3RydWN0IGdpdF9hdHRyICphdHRyOworCQlwYXJhbSA9IHZhX2FyZyhwYXJhbXMsIGNvbnN0IGNoYXIgKik7CisJCWlmICghcGFyYW0pCisJCQlCVUcoImNvdW50ZWQgJWQgIT0gZW5kZWQgYXQgJWQiLAorCQkJICAgIGNoZWNrLT5uciwgY250KTsKKwkJYXR0ciA9IGdpdF9hdHRyKHBhcmFtKTsKKwkJaWYgKCFhdHRyKQorCQkJQlVHKCIlczogbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWUiLCBwYXJhbSk7CisJCWNoZWNrLT5pdGVtc1tjbnRdLmF0dHIgPSBhdHRyOworCX0KKwl2YV9lbmQocGFyYW1zKTsKKwlyZXR1cm4gY2hlY2s7Cit9CisKK3N0cnVjdCBhdHRyX2NoZWNrICphdHRyX2NoZWNrX2R1cChjb25zdCBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2spCit7CisJc3RydWN0IGF0dHJfY2hlY2sgKnJldDsKKworCWlmICghY2hlY2spCisJCXJldHVybiBOVUxMOworCisJcmV0ID0gYXR0cl9jaGVja19hbGxvYygpOworCisJcmV0LT5uciA9IGNoZWNrLT5ucjsKKwlyZXQtPmFsbG9jID0gY2hlY2stPmFsbG9jOworCUFMTE9DX0FSUkFZKHJldC0+aXRlbXMsIHJldC0+bnIpOworCUNPUFlfQVJSQVkocmV0LT5pdGVtcywgY2hlY2stPml0ZW1zLCByZXQtPm5yKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBhdHRyX2NoZWNrX2l0ZW0gKmF0dHJfY2hlY2tfYXBwZW5kKHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjaywKKwkJCQkJICBjb25zdCBzdHJ1Y3QgZ2l0X2F0dHIgKmF0dHIpCit7CisJc3RydWN0IGF0dHJfY2hlY2tfaXRlbSAqaXRlbTsKKworCUFMTE9DX0dST1coY2hlY2stPml0ZW1zLCBjaGVjay0+bnIgKyAxLCBjaGVjay0+YWxsb2MpOworCWl0ZW0gPSAmY2hlY2stPml0ZW1zW2NoZWNrLT5ucisrXTsKKwlpdGVtLT5hdHRyID0gYXR0cjsKKwlyZXR1cm4gaXRlbTsKK30KKwordm9pZCBhdHRyX2NoZWNrX3Jlc2V0KHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjaykKK3sKKwljaGVjay0+bnIgPSAwOworfQorCit2b2lkIGF0dHJfY2hlY2tfY2xlYXIoc3RydWN0IGF0dHJfY2hlY2sgKmNoZWNrKQoreworCUZSRUVfQU5EX05VTEwoY2hlY2stPml0ZW1zKTsKKwljaGVjay0+YWxsb2MgPSAwOworCWNoZWNrLT5uciA9IDA7CisKKwlGUkVFX0FORF9OVUxMKGNoZWNrLT5hbGxfYXR0cnMpOworCWNoZWNrLT5hbGxfYXR0cnNfbnIgPSAwOworCisJZHJvcF9hdHRyX3N0YWNrKCZjaGVjay0+c3RhY2spOworfQorCit2b2lkIGF0dHJfY2hlY2tfZnJlZShzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2spCit7CisJaWYgKGNoZWNrKSB7CisJCS8qIFJlbW92ZSBjaGVjayBmcm9tIHRoZSBjaGVjayB2ZWN0b3IgKi8KKwkJY2hlY2tfdmVjdG9yX3JlbW92ZShjaGVjayk7CisKKwkJYXR0cl9jaGVja19jbGVhcihjaGVjayk7CisJCWZyZWUoY2hlY2spOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmJ1aWx0aW5fYXR0cltdID0geworCSJbYXR0cl1iaW5hcnkgLWRpZmYgLW1lcmdlIC10ZXh0IiwKKwlOVUxMLAorfTsKKworc3RhdGljIHZvaWQgaGFuZGxlX2F0dHJfbGluZShzdHJ1Y3QgYXR0cl9zdGFjayAqcmVzLAorCQkJICAgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgICBjb25zdCBjaGFyICpzcmMsCisJCQkgICAgIGludCBsaW5lbm8sCisJCQkgICAgIGludCBtYWNyb19vaykKK3sKKwlzdHJ1Y3QgbWF0Y2hfYXR0ciAqYTsKKworCWEgPSBwYXJzZV9hdHRyX2xpbmUobGluZSwgc3JjLCBsaW5lbm8sIG1hY3JvX29rKTsKKwlpZiAoIWEpCisJCXJldHVybjsKKwlBTExPQ19HUk9XKHJlcy0+YXR0cnMsIHJlcy0+bnVtX21hdGNoZXMgKyAxLCByZXMtPmFsbG9jKTsKKwlyZXMtPmF0dHJzW3Jlcy0+bnVtX21hdGNoZXMrK10gPSBhOworfQorCitzdGF0aWMgc3RydWN0IGF0dHJfc3RhY2sgKnJlYWRfYXR0cl9mcm9tX2FycmF5KGNvbnN0IGNoYXIgKipsaXN0KQoreworCXN0cnVjdCBhdHRyX3N0YWNrICpyZXM7CisJY29uc3QgY2hhciAqbGluZTsKKwlpbnQgbGluZW5vID0gMDsKKworCXJlcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXMpKTsKKwl3aGlsZSAoKGxpbmUgPSAqKGxpc3QrKykpICE9IE5VTEwpCisJCWhhbmRsZV9hdHRyX2xpbmUocmVzLCBsaW5lLCAiW2J1aWx0aW5dIiwgKytsaW5lbm8sIDEpOworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBDYWxsZXJzIGludG8gdGhlIGF0dHJpYnV0ZSBzeXN0ZW0gYXNzdW1lIHRoZXJlIGlzIGEgc2luZ2xlLCBzeXN0ZW0td2lkZQorICogZ2xvYmFsIHN0YXRlIHdoZXJlIGF0dHJpYnV0ZXMgYXJlIHJlYWQgZnJvbSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgZmxpcHBlZCBieQorICogY2FsbGluZyBnaXRfYXR0cl9zZXRfZGlyZWN0aW9uKCksIHRoZSBzdGFjayBmcmFtZXMgdGhhdCBoYXZlIGJlZW4KKyAqIGNvbnN0cnVjdGVkIG5lZWQgdG8gYmUgZGlzY2FyZGVkIHNvIHNvIHRoYXQgc3Vic2VxdWVudCBjYWxscyBpbnRvIHRoZQorICogYXR0cmlidXRlIHN5c3RlbSB3aWxsIGxhemlseSByZWFkIGZyb20gdGhlIHJpZ2h0IHBsYWNlLiAgU2luY2UgY2hhbmdpbmcKKyAqIGRpcmVjdGlvbiBjYXVzZXMgYSBnbG9iYWwgcGFyYWRpZ20gc2hpZnQsIGl0IHNob3VsZCBub3QgZXZlciBiZSBjYWxsZWQgd2hpbGUKKyAqIGFub3RoZXIgdGhyZWFkIGNvdWxkIHBvdGVudGlhbGx5IGJlIGNhbGxpbmcgaW50byB0aGUgYXR0cmlidXRlIHN5c3RlbS4KKyAqLworc3RhdGljIGVudW0gZ2l0X2F0dHJfZGlyZWN0aW9uIGRpcmVjdGlvbjsKKwordm9pZCBnaXRfYXR0cl9zZXRfZGlyZWN0aW9uKGVudW0gZ2l0X2F0dHJfZGlyZWN0aW9uIG5ld19kaXJlY3Rpb24pCit7CisJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeSgpICYmIG5ld19kaXJlY3Rpb24gIT0gR0lUX0FUVFJfSU5ERVgpCisJCUJVRygibm9uLUlOREVYIGF0dHIgZGlyZWN0aW9uIGluIGEgYmFyZSByZXBvIik7CisKKwlpZiAobmV3X2RpcmVjdGlvbiAhPSBkaXJlY3Rpb24pCisJCWRyb3BfYWxsX2F0dHJfc3RhY2tzKCk7CisKKwlkaXJlY3Rpb24gPSBuZXdfZGlyZWN0aW9uOworfQorCitzdGF0aWMgc3RydWN0IGF0dHJfc3RhY2sgKnJlYWRfYXR0cl9mcm9tX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgaW50IG1hY3JvX29rKQoreworCUZJTEUgKmZwID0gZm9wZW5fb3Jfd2FybihwYXRoLCAiciIpOworCXN0cnVjdCBhdHRyX3N0YWNrICpyZXM7CisJY2hhciBidWZbMjA0OF07CisJaW50IGxpbmVubyA9IDA7CisKKwlpZiAoIWZwKQorCQlyZXR1cm4gTlVMTDsKKwlyZXMgPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVzKSk7CisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSkgeworCQljaGFyICpidWZwID0gYnVmOworCQlpZiAoIWxpbmVubykKKwkJCXNraXBfdXRmOF9ib20oJmJ1ZnAsIHN0cmxlbihidWZwKSk7CisJCWhhbmRsZV9hdHRyX2xpbmUocmVzLCBidWZwLCBwYXRoLCArK2xpbmVubywgbWFjcm9fb2spOworCX0KKwlmY2xvc2UoZnApOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cl9zdGFjayAqcmVhZF9hdHRyX2Zyb21faW5kZXgoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCSAgICAgICBjb25zdCBjaGFyICpwYXRoLAorCQkJCQkgICAgICAgaW50IG1hY3JvX29rKQoreworCXN0cnVjdCBhdHRyX3N0YWNrICpyZXM7CisJY2hhciAqYnVmLCAqc3A7CisJaW50IGxpbmVubyA9IDA7CisKKwlpZiAoIWlzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlidWYgPSByZWFkX2Jsb2JfZGF0YV9mcm9tX2luZGV4KGlzdGF0ZSwgcGF0aCwgTlVMTCk7CisJaWYgKCFidWYpCisJCXJldHVybiBOVUxMOworCisJcmVzID0geGNhbGxvYygxLCBzaXplb2YoKnJlcykpOworCWZvciAoc3AgPSBidWY7ICpzcDsgKSB7CisJCWNoYXIgKmVwOworCQlpbnQgbW9yZTsKKworCQllcCA9IHN0cmNocm51bChzcCwgJ1xuJyk7CisJCW1vcmUgPSAoKmVwID09ICdcbicpOworCQkqZXAgPSAnXDAnOworCQloYW5kbGVfYXR0cl9saW5lKHJlcywgc3AsIHBhdGgsICsrbGluZW5vLCBtYWNyb19vayk7CisJCXNwID0gZXAgKyBtb3JlOworCX0KKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyX3N0YWNrICpyZWFkX2F0dHIoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJICAgIGNvbnN0IGNoYXIgKnBhdGgsIGludCBtYWNyb19vaykKK3sKKwlzdHJ1Y3QgYXR0cl9zdGFjayAqcmVzID0gTlVMTDsKKworCWlmIChkaXJlY3Rpb24gPT0gR0lUX0FUVFJfSU5ERVgpIHsKKwkJcmVzID0gcmVhZF9hdHRyX2Zyb21faW5kZXgoaXN0YXRlLCBwYXRoLCBtYWNyb19vayk7CisJfSBlbHNlIGlmICghaXNfYmFyZV9yZXBvc2l0b3J5KCkpIHsKKwkJaWYgKGRpcmVjdGlvbiA9PSBHSVRfQVRUUl9DSEVDS09VVCkgeworCQkJcmVzID0gcmVhZF9hdHRyX2Zyb21faW5kZXgoaXN0YXRlLCBwYXRoLCBtYWNyb19vayk7CisJCQlpZiAoIXJlcykKKwkJCQlyZXMgPSByZWFkX2F0dHJfZnJvbV9maWxlKHBhdGgsIG1hY3JvX29rKTsKKwkJfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gR0lUX0FUVFJfQ0hFQ0tJTikgeworCQkJcmVzID0gcmVhZF9hdHRyX2Zyb21fZmlsZShwYXRoLCBtYWNyb19vayk7CisJCQlpZiAoIXJlcykKKwkJCQkvKgorCQkJCSAqIFRoZXJlIGlzIG5vIGNoZWNrZWQgb3V0IC5naXRhdHRyaWJ1dGVzIGZpbGUKKwkJCQkgKiB0aGVyZSwgYnV0IHdlIG1pZ2h0IGhhdmUgaXQgaW4gdGhlIGluZGV4LgorCQkJCSAqIFdlIGFsbG93IG9wZXJhdGlvbiBpbiBhIHNwYXJzZWx5IGNoZWNrZWQgb3V0CisJCQkJICogd29yayB0cmVlLCBzbyByZWFkIGZyb20gaXQuCisJCQkJICovCisJCQkJcmVzID0gcmVhZF9hdHRyX2Zyb21faW5kZXgoaXN0YXRlLCBwYXRoLCBtYWNyb19vayk7CisJCX0KKwl9CisKKwlpZiAoIXJlcykKKwkJcmVzID0geGNhbGxvYygxLCBzaXplb2YoKnJlcykpOworCXJldHVybiByZXM7Cit9CisKKyNpZiBERUJVR19BVFRSCitzdGF0aWMgdm9pZCBkZWJ1Z19pbmZvKGNvbnN0IGNoYXIgKndoYXQsIHN0cnVjdCBhdHRyX3N0YWNrICplbGVtKQoreworCWZwcmludGYoc3RkZXJyLCAiJXM6ICVzXG4iLCB3aGF0LCBlbGVtLT5vcmlnaW4gPyBlbGVtLT5vcmlnaW4gOiAiKCkiKTsKK30KK3N0YXRpYyB2b2lkIGRlYnVnX3NldChjb25zdCBjaGFyICp3aGF0LCBjb25zdCBjaGFyICptYXRjaCwgc3RydWN0IGdpdF9hdHRyICphdHRyLCBjb25zdCB2b2lkICp2KQoreworCWNvbnN0IGNoYXIgKnZhbHVlID0gdjsKKworCWlmIChBVFRSX1RSVUUodmFsdWUpKQorCQl2YWx1ZSA9ICJzZXQiOworCWVsc2UgaWYgKEFUVFJfRkFMU0UodmFsdWUpKQorCQl2YWx1ZSA9ICJ1bnNldCI7CisJZWxzZSBpZiAoQVRUUl9VTlNFVCh2YWx1ZSkpCisJCXZhbHVlID0gInVuc3BlY2lmaWVkIjsKKworCWZwcmludGYoc3RkZXJyLCAiJXM6ICVzID0+ICVzICglcylcbiIsCisJCXdoYXQsIGF0dHItPm5hbWUsIChjaGFyICopIHZhbHVlLCBtYXRjaCk7Cit9CisjZGVmaW5lIGRlYnVnX3B1c2goYSkgZGVidWdfaW5mbygicHVzaCIsIChhKSkKKyNkZWZpbmUgZGVidWdfcG9wKGEpIGRlYnVnX2luZm8oInBvcCIsIChhKSkKKyNlbHNlCisjZGVmaW5lIGRlYnVnX3B1c2goYSkgZG8geyA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRlYnVnX3BvcChhKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGVidWdfc2V0KGEsYixjLGQpIGRvIHsgOyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIERFQlVHX0FUVFIgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKmdpdF9ldGNfZ2l0YXR0cmlidXRlcyh2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpzeXN0ZW1fd2lkZTsKKwlpZiAoIXN5c3RlbV93aWRlKQorCQlzeXN0ZW1fd2lkZSA9IHN5c3RlbV9wYXRoKEVUQ19HSVRBVFRSSUJVVEVTKTsKKwlyZXR1cm4gc3lzdGVtX3dpZGU7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfaG9tZV9naXRhdHRyaWJ1dGVzKHZvaWQpCit7CisJaWYgKCFnaXRfYXR0cmlidXRlc19maWxlKQorCQlnaXRfYXR0cmlidXRlc19maWxlID0geGRnX2NvbmZpZ19ob21lKCJhdHRyaWJ1dGVzIik7CisKKwlyZXR1cm4gZ2l0X2F0dHJpYnV0ZXNfZmlsZTsKK30KKworc3RhdGljIGludCBnaXRfYXR0cl9zeXN0ZW0odm9pZCkKK3sKKwlyZXR1cm4gIWdpdF9lbnZfYm9vbCgiR0lUX0FUVFJfTk9TWVNURU0iLCAwKTsKK30KKworc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfaW5mb19hdHRyaWJ1dGVzLCBJTkZPQVRUUklCVVRFU19GSUxFKQorCitzdGF0aWMgdm9pZCBwdXNoX3N0YWNrKHN0cnVjdCBhdHRyX3N0YWNrICoqYXR0cl9zdGFja19wLAorCQkgICAgICAgc3RydWN0IGF0dHJfc3RhY2sgKmVsZW0sIGNoYXIgKm9yaWdpbiwgc2l6ZV90IG9yaWdpbmxlbikKK3sKKwlpZiAoZWxlbSkgeworCQllbGVtLT5vcmlnaW4gPSBvcmlnaW47CisJCWlmIChvcmlnaW4pCisJCQllbGVtLT5vcmlnaW5sZW4gPSBvcmlnaW5sZW47CisJCWVsZW0tPnByZXYgPSAqYXR0cl9zdGFja19wOworCQkqYXR0cl9zdGFja19wID0gZWxlbTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJvb3RzdHJhcF9hdHRyX3N0YWNrKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSBzdHJ1Y3QgYXR0cl9zdGFjayAqKnN0YWNrKQoreworCXN0cnVjdCBhdHRyX3N0YWNrICplOworCisJaWYgKCpzdGFjaykKKwkJcmV0dXJuOworCisJLyogYnVpbHRpbiBmcmFtZSAqLworCWUgPSByZWFkX2F0dHJfZnJvbV9hcnJheShidWlsdGluX2F0dHIpOworCXB1c2hfc3RhY2soc3RhY2ssIGUsIE5VTEwsIDApOworCisJLyogc3lzdGVtLXdpZGUgZnJhbWUgKi8KKwlpZiAoZ2l0X2F0dHJfc3lzdGVtKCkpIHsKKwkJZSA9IHJlYWRfYXR0cl9mcm9tX2ZpbGUoZ2l0X2V0Y19naXRhdHRyaWJ1dGVzKCksIDEpOworCQlwdXNoX3N0YWNrKHN0YWNrLCBlLCBOVUxMLCAwKTsKKwl9CisKKwkvKiBob21lIGRpcmVjdG9yeSAqLworCWlmIChnZXRfaG9tZV9naXRhdHRyaWJ1dGVzKCkpIHsKKwkJZSA9IHJlYWRfYXR0cl9mcm9tX2ZpbGUoZ2V0X2hvbWVfZ2l0YXR0cmlidXRlcygpLCAxKTsKKwkJcHVzaF9zdGFjayhzdGFjaywgZSwgTlVMTCwgMCk7CisJfQorCisJLyogcm9vdCBkaXJlY3RvcnkgKi8KKwllID0gcmVhZF9hdHRyKGlzdGF0ZSwgR0lUQVRUUklCVVRFU19GSUxFLCAxKTsKKwlwdXNoX3N0YWNrKHN0YWNrLCBlLCB4c3RyZHVwKCIiKSwgMCk7CisKKwkvKiBpbmZvIGZyYW1lICovCisJaWYgKHN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQorCQllID0gcmVhZF9hdHRyX2Zyb21fZmlsZShnaXRfcGF0aF9pbmZvX2F0dHJpYnV0ZXMoKSwgMSk7CisJZWxzZQorCQllID0gTlVMTDsKKwlpZiAoIWUpCisJCWUgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgYXR0cl9zdGFjaykpOworCXB1c2hfc3RhY2soc3RhY2ssIGUsIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX2F0dHJfc3RhY2soY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCwgaW50IGRpcmxlbiwKKwkJCSAgICAgICBzdHJ1Y3QgYXR0cl9zdGFjayAqKnN0YWNrKQoreworCXN0cnVjdCBhdHRyX3N0YWNrICppbmZvOworCXN0cnVjdCBzdHJidWYgcGF0aGJ1ZiA9IFNUUkJVRl9JTklUOworCisJLyoKKwkgKiBBdCB0aGUgYm90dG9tIG9mIHRoZSBhdHRyaWJ1dGUgc3RhY2sgaXMgdGhlIGJ1aWx0LWluCisJICogc2V0IG9mIGF0dHJpYnV0ZSBkZWZpbml0aW9ucywgZm9sbG93ZWQgYnkgdGhlIGNvbnRlbnRzCisJICogb2YgJChwcmVmaXgpL2V0Yy9naXRhdHRyaWJ1dGVzIGFuZCBhIGZpbGUgc3BlY2lmaWVkIGJ5CisJICogY29yZS5hdHRyaWJ1dGVzZmlsZS4gIFRoZW4sIGNvbnRlbnRzIGZyb20KKwkgKiAuZ2l0YXR0cmlidXRlcyBmaWxlcyBmcm9tIGRpcmVjdG9yaWVzIGNsb3NlciB0byB0aGUKKwkgKiByb290IHRvIHRoZSBvbmVzIGluIGRlZXBlciBkaXJlY3RvcmllcyBhcmUgcHVzaGVkCisJICogdG8gdGhlIHN0YWNrLiAgRmluYWxseSwgYXQgdGhlIHZlcnkgdG9wIG9mIHRoZSBzdGFjaworCSAqIHdlIGFsd2F5cyBrZWVwIHRoZSBjb250ZW50cyBvZiAkR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXMuCisJICoKKwkgKiBXaGVuIGNoZWNraW5nLCB3ZSB1c2UgZW50cmllcyBmcm9tIG5lYXIgdGhlIHRvcCBvZiB0aGUKKwkgKiBzdGFjaywgcHJlZmVycmluZyAkR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXMsIHRoZW4KKwkgKiAuZ2l0YXR0cmlidXRlcyBpbiBkZWVwZXIgZGlyZWN0b3JpZXMgdG8gc2hhbGxvd2VyIG9uZXMsCisJICogYW5kIGZpbmFsbHkgdXNlIHRoZSBidWlsdC1pbiBzZXQgYXMgdGhlIGRlZmF1bHQuCisJICovCisJYm9vdHN0cmFwX2F0dHJfc3RhY2soaXN0YXRlLCBzdGFjayk7CisKKwkvKgorCSAqIFBvcCB0aGUgImluZm8iIG9uZSB0aGF0IGlzIGFsd2F5cyBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4KKwkgKi8KKwlpbmZvID0gKnN0YWNrOworCSpzdGFjayA9IGluZm8tPnByZXY7CisKKwkvKgorCSAqIFBvcCB0aGUgb25lcyBmcm9tIGRpcmVjdG9yaWVzIHRoYXQgYXJlIG5vdCB0aGUgcHJlZml4IG9mCisJICogdGhlIHBhdGggd2UgYXJlIGNoZWNraW5nLiBCcmVhayBvdXQgb2YgdGhlIGxvb3Agd2hlbiB3ZSBzZWUKKwkgKiB0aGUgcm9vdCBvbmUgKHdob3NlIG9yaWdpbiBpcyBhbiBlbXB0eSBzdHJpbmcgIiIpIG9yIHRoZSBidWlsdGluCisJICogb25lICh3aG9zZSBvcmlnaW4gaXMgTlVMTCkgd2l0aG91dCBwb3BwaW5nIGl0LgorCSAqLworCXdoaWxlICgoKnN0YWNrKS0+b3JpZ2luKSB7CisJCWludCBuYW1lbGVuID0gKCpzdGFjayktPm9yaWdpbmxlbjsKKwkJc3RydWN0IGF0dHJfc3RhY2sgKmVsZW07CisKKwkJZWxlbSA9ICpzdGFjazsKKwkJaWYgKG5hbWVsZW4gPD0gZGlybGVuICYmCisJCSAgICAhc3RybmNtcChlbGVtLT5vcmlnaW4sIHBhdGgsIG5hbWVsZW4pICYmCisJCSAgICAoIW5hbWVsZW4gfHwgcGF0aFtuYW1lbGVuXSA9PSAnLycpKQorCQkJYnJlYWs7CisKKwkJZGVidWdfcG9wKGVsZW0pOworCQkqc3RhY2sgPSBlbGVtLT5wcmV2OworCQlhdHRyX3N0YWNrX2ZyZWUoZWxlbSk7CisJfQorCisJLyoKKwkgKiBib290c3RyYXBfYXR0cl9zdGFjaygpIHNob3VsZCBoYXZlIGFkZGVkLCBhbmQgdGhlCisJICogYWJvdmUgbG9vcCBzaG91bGQgaGF2ZSBzdG9wcGVkIGJlZm9yZSBwb3BwaW5nLCB0aGUKKwkgKiByb290IGVsZW1lbnQgd2hvc2UgYXR0cl9zdGFjay0+b3JpZ2luIGlzIHNldCB0byBhbgorCSAqIGVtcHR5IHN0cmluZy4KKwkgKi8KKwlhc3NlcnQoKCpzdGFjayktPm9yaWdpbik7CisKKwlzdHJidWZfYWRkc3RyKCZwYXRoYnVmLCAoKnN0YWNrKS0+b3JpZ2luKTsKKwkvKiBCdWlsZCB1cCB0byB0aGUgZGlyZWN0b3J5ICdwYXRoJyBpcyBpbiAqLworCXdoaWxlIChwYXRoYnVmLmxlbiA8IGRpcmxlbikgeworCQlzaXplX3QgbGVuID0gcGF0aGJ1Zi5sZW47CisJCXN0cnVjdCBhdHRyX3N0YWNrICpuZXh0OworCQljaGFyICpvcmlnaW47CisKKwkJLyogU2tpcCBwYXRoLXNlcGFyYXRvciAqLworCQlpZiAobGVuIDwgZGlybGVuICYmIGlzX2Rpcl9zZXAocGF0aFtsZW5dKSkKKwkJCWxlbisrOworCQkvKiBGaW5kIHRoZSBlbmQgb2YgdGhlIG5leHQgY29tcG9uZW50ICovCisJCXdoaWxlIChsZW4gPCBkaXJsZW4gJiYgIWlzX2Rpcl9zZXAocGF0aFtsZW5dKSkKKwkJCWxlbisrOworCisJCWlmIChwYXRoYnVmLmxlbiA+IDApCisJCQlzdHJidWZfYWRkY2goJnBhdGhidWYsICcvJyk7CisJCXN0cmJ1Zl9hZGQoJnBhdGhidWYsIHBhdGggKyBwYXRoYnVmLmxlbiwgKGxlbiAtIHBhdGhidWYubGVuKSk7CisJCXN0cmJ1Zl9hZGRmKCZwYXRoYnVmLCAiLyVzIiwgR0lUQVRUUklCVVRFU19GSUxFKTsKKworCQluZXh0ID0gcmVhZF9hdHRyKGlzdGF0ZSwgcGF0aGJ1Zi5idWYsIDApOworCisJCS8qIHJlc2V0IHRoZSBwYXRoYnVmIHRvIG5vdCBpbmNsdWRlICIvLmdpdGF0dHJpYnV0ZXMiICovCisJCXN0cmJ1Zl9zZXRsZW4oJnBhdGhidWYsIGxlbik7CisKKwkJb3JpZ2luID0geHN0cmR1cChwYXRoYnVmLmJ1Zik7CisJCXB1c2hfc3RhY2soc3RhY2ssIG5leHQsIG9yaWdpbiwgbGVuKTsKKwl9CisKKwkvKgorCSAqIEZpbmFsbHkgcHVzaCB0aGUgImluZm8iIG9uZSBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4KKwkgKi8KKwlwdXNoX3N0YWNrKHN0YWNrLCBpbmZvLCBOVUxMLCAwKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoYnVmKTsKK30KKworc3RhdGljIGludCBwYXRoX21hdGNoZXMoY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBwYXRobGVuLAorCQkJaW50IGJhc2VuYW1lX29mZnNldCwKKwkJCWNvbnN0IHN0cnVjdCBwYXR0ZXJuICpwYXQsCisJCQljb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbikKK3sKKwljb25zdCBjaGFyICpwYXR0ZXJuID0gcGF0LT5wYXR0ZXJuOworCWludCBwcmVmaXggPSBwYXQtPm5vd2lsZGNhcmRsZW47CisJaW50IGlzZGlyID0gKHBhdGhsZW4gJiYgcGF0aG5hbWVbcGF0aGxlbiAtIDFdID09ICcvJyk7CisKKwlpZiAoKHBhdC0+ZmxhZ3MgJiBQQVRURVJOX0ZMQUdfTVVTVEJFRElSKSAmJiAhaXNkaXIpCisJCXJldHVybiAwOworCisJaWYgKHBhdC0+ZmxhZ3MgJiBQQVRURVJOX0ZMQUdfTk9ESVIpIHsKKwkJcmV0dXJuIG1hdGNoX2Jhc2VuYW1lKHBhdGhuYW1lICsgYmFzZW5hbWVfb2Zmc2V0LAorCQkJCSAgICAgIHBhdGhsZW4gLSBiYXNlbmFtZV9vZmZzZXQgLSBpc2RpciwKKwkJCQkgICAgICBwYXR0ZXJuLCBwcmVmaXgsCisJCQkJICAgICAgcGF0LT5wYXR0ZXJubGVuLCBwYXQtPmZsYWdzKTsKKwl9CisJcmV0dXJuIG1hdGNoX3BhdGhuYW1lKHBhdGhuYW1lLCBwYXRobGVuIC0gaXNkaXIsCisJCQkgICAgICBiYXNlLCBiYXNlbGVuLAorCQkJICAgICAgcGF0dGVybiwgcHJlZml4LCBwYXQtPnBhdHRlcm5sZW4sIHBhdC0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG1hY3JvZXhwYW5kX29uZShzdHJ1Y3QgYWxsX2F0dHJzX2l0ZW0gKmFsbF9hdHRycywgaW50IG5yLCBpbnQgcmVtKTsKKworc3RhdGljIGludCBmaWxsX29uZShjb25zdCBjaGFyICp3aGF0LCBzdHJ1Y3QgYWxsX2F0dHJzX2l0ZW0gKmFsbF9hdHRycywKKwkJICAgIGNvbnN0IHN0cnVjdCBtYXRjaF9hdHRyICphLCBpbnQgcmVtKQoreworCWludCBpOworCisJZm9yIChpID0gYS0+bnVtX2F0dHIgLSAxOyByZW0gPiAwICYmIGkgPj0gMDsgaS0tKSB7CisJCWNvbnN0IHN0cnVjdCBnaXRfYXR0ciAqYXR0ciA9IGEtPnN0YXRlW2ldLmF0dHI7CisJCWNvbnN0IGNoYXIgKipuID0gJihhbGxfYXR0cnNbYXR0ci0+YXR0cl9ucl0udmFsdWUpOworCQljb25zdCBjaGFyICp2ID0gYS0+c3RhdGVbaV0uc2V0dG87CisKKwkJaWYgKCpuID09IEFUVFJfX1VOS05PV04pIHsKKwkJCWRlYnVnX3NldCh3aGF0LAorCQkJCSAgYS0+aXNfbWFjcm8gPyBhLT51LmF0dHItPm5hbWUgOiBhLT51LnBhdC5wYXR0ZXJuLAorCQkJCSAgYXR0ciwgdik7CisJCQkqbiA9IHY7CisJCQlyZW0tLTsKKwkJCXJlbSA9IG1hY3JvZXhwYW5kX29uZShhbGxfYXR0cnMsIGF0dHItPmF0dHJfbnIsIHJlbSk7CisJCX0KKwl9CisJcmV0dXJuIHJlbTsKK30KKworc3RhdGljIGludCBmaWxsKGNvbnN0IGNoYXIgKnBhdGgsIGludCBwYXRobGVuLCBpbnQgYmFzZW5hbWVfb2Zmc2V0LAorCQljb25zdCBzdHJ1Y3QgYXR0cl9zdGFjayAqc3RhY2ssCisJCXN0cnVjdCBhbGxfYXR0cnNfaXRlbSAqYWxsX2F0dHJzLCBpbnQgcmVtKQoreworCWZvciAoOyByZW0gPiAwICYmIHN0YWNrOyBzdGFjayA9IHN0YWNrLT5wcmV2KSB7CisJCWludCBpOworCQljb25zdCBjaGFyICpiYXNlID0gc3RhY2stPm9yaWdpbiA/IHN0YWNrLT5vcmlnaW4gOiAiIjsKKworCQlmb3IgKGkgPSBzdGFjay0+bnVtX21hdGNoZXMgLSAxOyAwIDwgcmVtICYmIDAgPD0gaTsgaS0tKSB7CisJCQljb25zdCBzdHJ1Y3QgbWF0Y2hfYXR0ciAqYSA9IHN0YWNrLT5hdHRyc1tpXTsKKwkJCWlmIChhLT5pc19tYWNybykKKwkJCQljb250aW51ZTsKKwkJCWlmIChwYXRoX21hdGNoZXMocGF0aCwgcGF0aGxlbiwgYmFzZW5hbWVfb2Zmc2V0LAorCQkJCQkgJmEtPnUucGF0LCBiYXNlLCBzdGFjay0+b3JpZ2lubGVuKSkKKwkJCQlyZW0gPSBmaWxsX29uZSgiZmlsbCIsIGFsbF9hdHRycywgYSwgcmVtKTsKKwkJfQorCX0KKworCXJldHVybiByZW07Cit9CisKK3N0YXRpYyBpbnQgbWFjcm9leHBhbmRfb25lKHN0cnVjdCBhbGxfYXR0cnNfaXRlbSAqYWxsX2F0dHJzLCBpbnQgbnIsIGludCByZW0pCit7CisJY29uc3Qgc3RydWN0IGFsbF9hdHRyc19pdGVtICppdGVtID0gJmFsbF9hdHRyc1tucl07CisKKwlpZiAoaXRlbS0+bWFjcm8gJiYgaXRlbS0+dmFsdWUgPT0gQVRUUl9fVFJVRSkKKwkJcmV0dXJuIGZpbGxfb25lKCJleHBhbmQiLCBhbGxfYXR0cnMsIGl0ZW0tPm1hY3JvLCByZW0pOworCWVsc2UKKwkJcmV0dXJuIHJlbTsKK30KKworLyoKKyAqIE1hcmtzIHRoZSBhdHRyaWJ1dGVzIHdoaWNoIGFyZSBtYWNyb3MgYmFzZWQgb24gdGhlIGF0dHJpYnV0ZSBzdGFjay4KKyAqIFRoaXMgcHJldmVudHMgaGF2aW5nIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBhdHRyaWJ1dGUgc3RhY2sgZWFjaCB0aW1lCisgKiBhIG1hY3JvIG5lZWRzIHRvIGJlIGV4cGFuZGVkIGR1cmluZyB0aGUgZmlsbCBzdGFnZS4KKyAqLworc3RhdGljIHZvaWQgZGV0ZXJtaW5lX21hY3JvcyhzdHJ1Y3QgYWxsX2F0dHJzX2l0ZW0gKmFsbF9hdHRycywKKwkJCSAgICAgY29uc3Qgc3RydWN0IGF0dHJfc3RhY2sgKnN0YWNrKQoreworCWZvciAoOyBzdGFjazsgc3RhY2sgPSBzdGFjay0+cHJldikgeworCQlpbnQgaTsKKwkJZm9yIChpID0gc3RhY2stPm51bV9tYXRjaGVzIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJCWNvbnN0IHN0cnVjdCBtYXRjaF9hdHRyICptYSA9IHN0YWNrLT5hdHRyc1tpXTsKKwkJCWlmIChtYS0+aXNfbWFjcm8pIHsKKwkJCQlpbnQgbiA9IG1hLT51LmF0dHItPmF0dHJfbnI7CisJCQkJaWYgKCFhbGxfYXR0cnNbbl0ubWFjcm8pIHsKKwkJCQkJYWxsX2F0dHJzW25dLm1hY3JvID0gbWE7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCisvKgorICogQ29sbGVjdCBhdHRyaWJ1dGVzIGZvciBwYXRoIGludG8gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgY2hlY2stPmFsbF9hdHRycy4KKyAqIElmIGNoZWNrLT5jaGVja19uciBpcyBub24temVybywgb25seSBhdHRyaWJ1dGVzIGluIGNoZWNrW10gYXJlIGNvbGxlY3RlZC4KKyAqIE90aGVyd2lzZSBhbGwgYXR0cmlidXRlcyBhcmUgY29sbGVjdGVkLgorICovCitzdGF0aWMgdm9pZCBjb2xsZWN0X3NvbWVfYXR0cnMoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICAgICBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2spCit7CisJaW50IHBhdGhsZW4sIHJlbSwgZGlybGVuOworCWNvbnN0IGNoYXIgKmNwLCAqbGFzdF9zbGFzaCA9IE5VTEw7CisJaW50IGJhc2VuYW1lX29mZnNldDsKKworCWZvciAoY3AgPSBwYXRoOyAqY3A7IGNwKyspIHsKKwkJaWYgKCpjcCA9PSAnLycgJiYgY3BbMV0pCisJCQlsYXN0X3NsYXNoID0gY3A7CisJfQorCXBhdGhsZW4gPSBjcCAtIHBhdGg7CisJaWYgKGxhc3Rfc2xhc2gpIHsKKwkJYmFzZW5hbWVfb2Zmc2V0ID0gbGFzdF9zbGFzaCArIDEgLSBwYXRoOworCQlkaXJsZW4gPSBsYXN0X3NsYXNoIC0gcGF0aDsKKwl9IGVsc2UgeworCQliYXNlbmFtZV9vZmZzZXQgPSAwOworCQlkaXJsZW4gPSAwOworCX0KKworCXByZXBhcmVfYXR0cl9zdGFjayhpc3RhdGUsIHBhdGgsIGRpcmxlbiwgJmNoZWNrLT5zdGFjayk7CisJYWxsX2F0dHJzX2luaXQoJmdfYXR0cl9oYXNobWFwLCBjaGVjayk7CisJZGV0ZXJtaW5lX21hY3JvcyhjaGVjay0+YWxsX2F0dHJzLCBjaGVjay0+c3RhY2spOworCisJcmVtID0gY2hlY2stPmFsbF9hdHRyc19ucjsKKwlmaWxsKHBhdGgsIHBhdGhsZW4sIGJhc2VuYW1lX29mZnNldCwgY2hlY2stPnN0YWNrLCBjaGVjay0+YWxsX2F0dHJzLCByZW0pOworfQorCit2b2lkIGdpdF9jaGVja19hdHRyKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJICAgIHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjaykKK3sKKwlpbnQgaTsKKworCWNvbGxlY3Rfc29tZV9hdHRycyhpc3RhdGUsIHBhdGgsIGNoZWNrKTsKKworCWZvciAoaSA9IDA7IGkgPCBjaGVjay0+bnI7IGkrKykgeworCQlzaXplX3QgbiA9IGNoZWNrLT5pdGVtc1tpXS5hdHRyLT5hdHRyX25yOworCQljb25zdCBjaGFyICp2YWx1ZSA9IGNoZWNrLT5hbGxfYXR0cnNbbl0udmFsdWU7CisJCWlmICh2YWx1ZSA9PSBBVFRSX19VTktOT1dOKQorCQkJdmFsdWUgPSBBVFRSX19VTlNFVDsKKwkJY2hlY2stPml0ZW1zW2ldLnZhbHVlID0gdmFsdWU7CisJfQorfQorCit2b2lkIGdpdF9hbGxfYXR0cnMoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCSAgIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjaykKK3sKKwlpbnQgaTsKKworCWF0dHJfY2hlY2tfcmVzZXQoY2hlY2spOworCWNvbGxlY3Rfc29tZV9hdHRycyhpc3RhdGUsIHBhdGgsIGNoZWNrKTsKKworCWZvciAoaSA9IDA7IGkgPCBjaGVjay0+YWxsX2F0dHJzX25yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IGNoZWNrLT5hbGxfYXR0cnNbaV0uYXR0ci0+bmFtZTsKKwkJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVjay0+YWxsX2F0dHJzW2ldLnZhbHVlOworCQlzdHJ1Y3QgYXR0cl9jaGVja19pdGVtICppdGVtOworCQlpZiAodmFsdWUgPT0gQVRUUl9fVU5TRVQgfHwgdmFsdWUgPT0gQVRUUl9fVU5LTk9XTikKKwkJCWNvbnRpbnVlOworCQlpdGVtID0gYXR0cl9jaGVja19hcHBlbmQoY2hlY2ssIGdpdF9hdHRyKG5hbWUpKTsKKwkJaXRlbS0+dmFsdWUgPSB2YWx1ZTsKKwl9Cit9CisKK3ZvaWQgYXR0cl9zdGFydCh2b2lkKQoreworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmZ19hdHRyX2hhc2htYXAubXV0ZXgsIE5VTEwpOworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmY2hlY2tfdmVjdG9yLm11dGV4LCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2F0dHIuaCBiL2F0dHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDQ1NDhmCi0tLSAvZGV2L251bGwKKysrIGIvYXR0ci5oCkBAIC0wLDAgKzEsMjEyIEBACisjaWZuZGVmIEFUVFJfSAorI2RlZmluZSBBVFRSX0gKKworLyoqCisgKiBnaXRhdHRyaWJ1dGVzIG1lY2hhbmlzbSBnaXZlcyBhIHVuaWZvcm0gd2F5IHRvIGFzc29jaWF0ZSB2YXJpb3VzIGF0dHJpYnV0ZXMKKyAqIHRvIHNldCBvZiBwYXRocy4KKyAqCisgKgorICogUXVlcnlpbmcgU3BlY2lmaWMgQXR0cmlidXRlcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIC0gUHJlcGFyZSBgc3RydWN0IGF0dHJfY2hlY2tgIHVzaW5nIGF0dHJfY2hlY2tfaW5pdGwoKSBmdW5jdGlvbiwgZW51bWVyYXRpbmcKKyAqICAgdGhlIG5hbWVzIG9mIGF0dHJpYnV0ZXMgd2hvc2UgdmFsdWVzIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiwgdGVybWluYXRlZCB3aXRoCisgKiAgIGEgTlVMTCBwb2ludGVyLiAgQWx0ZXJuYXRpdmVseSwgYW4gZW1wdHkgYHN0cnVjdCBhdHRyX2NoZWNrYCBjYW4gYmUKKyAqICAgcHJlcGFyZWQgYnkgY2FsbGluZyBgYXR0cl9jaGVja19hbGxvYygpYCBmdW5jdGlvbiBhbmQgdGhlbiBhdHRyaWJ1dGVzIHlvdQorICogICB3YW50IHRvIGFzayBhYm91dCBjYW4gYmUgYWRkZWQgdG8gaXQgd2l0aCBgYXR0cl9jaGVja19hcHBlbmQoKWAgZnVuY3Rpb24uCisgKgorICogLSBDYWxsIGBnaXRfY2hlY2tfYXR0cigpYCB0byBjaGVjayB0aGUgYXR0cmlidXRlcyBmb3IgdGhlIHBhdGguCisgKgorICogLSBJbnNwZWN0IGBhdHRyX2NoZWNrYCBzdHJ1Y3R1cmUgdG8gc2VlIGhvdyBlYWNoIG9mIHRoZSBhdHRyaWJ1dGUgaW4gdGhlCisgKiAgIGFycmF5IGlzIGRlZmluZWQgZm9yIHRoZSBwYXRoLgorICoKKyAqCisgKiBFeGFtcGxlCisgKiAtLS0tLS0tCisgKgorICogVG8gc2VlIGhvdyBhdHRyaWJ1dGVzICJjcmxmIiBhbmQgImlkZW50IiBhcmUgc2V0IGZvciBkaWZmZXJlbnQgcGF0aHMuCisgKgorICogLSBQcmVwYXJlIGEgYHN0cnVjdCBhdHRyX2NoZWNrYCB3aXRoIHR3byBlbGVtZW50cyAoYmVjYXVzZSB3ZSBhcmUgY2hlY2tpbmcKKyAqICAgdHdvIGF0dHJpYnV0ZXMpOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogc3RhdGljIHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKKyAqIHN0YXRpYyB2b2lkIHNldHVwX2NoZWNrKHZvaWQpCisgKiB7CisgKiAJaWYgKGNoZWNrKQorICogCQlyZXR1cm47IC8vIGFscmVhZHkgZG9uZQorICogY2hlY2sgPSBhdHRyX2NoZWNrX2luaXRsKCJjcmxmIiwgImlkZW50IiwgTlVMTCk7CisgKiB9CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiAtIENhbGwgYGdpdF9jaGVja19hdHRyKClgIHdpdGggdGhlIHByZXBhcmVkIGBzdHJ1Y3QgYXR0cl9jaGVja2A6CisgKgorICogLS0tLS0tLS0tLS0tCisgKiBjb25zdCBjaGFyICpwYXRoOworICoKKyAqIHNldHVwX2NoZWNrKCk7CisgKiBnaXRfY2hlY2tfYXR0cihwYXRoLCBjaGVjayk7CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiAtIEFjdCBvbiBgLnZhbHVlYCBtZW1iZXIgb2YgdGhlIHJlc3VsdCwgbGVmdCBpbiBgY2hlY2stPml0ZW1zW11gOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogY29uc3QgY2hhciAqdmFsdWUgPSBjaGVjay0+aXRlbXNbMF0udmFsdWU7CisgKgorICogaWYgKEFUVFJfVFJVRSh2YWx1ZSkpIHsKKyAqIFRoZSBhdHRyaWJ1dGUgaXMgU2V0LCBieSBsaXN0aW5nIG9ubHkgdGhlIG5hbWUgb2YgdGhlCisgKiBhdHRyaWJ1dGUgaW4gdGhlIGdpdGF0dHJpYnV0ZXMgZmlsZSBmb3IgdGhlIHBhdGguCisgKiB9IGVsc2UgaWYgKEFUVFJfRkFMU0UodmFsdWUpKSB7CisgKiBUaGUgYXR0cmlidXRlIGlzIFVuc2V0LCBieSBsaXN0aW5nIHRoZSBuYW1lIG9mIHRoZQorICogICAgICAgICBhdHRyaWJ1dGUgcHJlZml4ZWQgd2l0aCBhIGRhc2ggLSBmb3IgdGhlIHBhdGguCisgKiB9IGVsc2UgaWYgKEFUVFJfVU5TRVQodmFsdWUpKSB7CisgKiBUaGUgYXR0cmlidXRlIGlzIG5laXRoZXIgc2V0IG5vciB1bnNldCBmb3IgdGhlIHBhdGguCisgKiB9IGVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJpbnB1dCIpKSB7CisgKiBJZiBub25lIG9mIEFUVFJfVFJVRSgpLCBBVFRSX0ZBTFNFKCksIG9yIEFUVFJfVU5TRVQoKSBpcworICogICAgICAgICB0cnVlLCB0aGUgdmFsdWUgaXMgYSBzdHJpbmcgc2V0IGluIHRoZSBnaXRhdHRyaWJ1dGVzCisgKiBmaWxlIGZvciB0aGUgcGF0aCBieSBzYXlpbmcgImF0dHI9dmFsdWUiLgorICogfSBlbHNlIGlmICguLi4gb3RoZXIgY2hlY2sgdXNpbmcgdmFsdWUgYXMgc3RyaW5nIC4uLikgeworICogLi4uCisgKiB9CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBUbyBzZWUgaG93IGF0dHJpYnV0ZXMgaW4gYXJndltdIGFyZSBzZXQgZm9yIGRpZmZlcmVudCBwYXRocywgb25seQorICogdGhlIGZpcnN0IHN0ZXAgaW4gdGhlIGFib3ZlIHdvdWxkIGJlIGRpZmZlcmVudC4KKyAqCisgKiAtLS0tLS0tLS0tLS0KKyAqIHN0YXRpYyBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2s7CisgKiBzdGF0aWMgdm9pZCBzZXR1cF9jaGVjayhjb25zdCBjaGFyICoqYXJndikKKyAqIHsKKyAqICAgICBjaGVjayA9IGF0dHJfY2hlY2tfYWxsb2MoKTsKKyAqICAgICB3aGlsZSAoKmFyZ3YpIHsKKyAqICAgICAgICAgc3RydWN0IGdpdF9hdHRyICphdHRyID0gZ2l0X2F0dHIoKmFyZ3YpOworICogICAgICAgICBhdHRyX2NoZWNrX2FwcGVuZChjaGVjaywgYXR0cik7CisgKiAgICAgICAgIGFyZ3YrKzsKKyAqICAgICB9CisgKiB9CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogUXVlcnlpbmcgQWxsIEF0dHJpYnV0ZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVG8gZ2V0IHRoZSB2YWx1ZXMgb2YgYWxsIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZToKKyAqCisgKiAtIFByZXBhcmUgYW4gZW1wdHkgYGF0dHJfY2hlY2tgIHN0cnVjdHVyZSBieSBjYWxsaW5nIGBhdHRyX2NoZWNrX2FsbG9jKClgLgorICoKKyAqIC0gQ2FsbCBgZ2l0X2FsbF9hdHRycygpYCwgd2hpY2ggcG9wdWxhdGVzIHRoZSBgYXR0cl9jaGVja2Agd2l0aCB0aGUKKyAqIGF0dHJpYnV0ZXMgYXR0YWNoZWQgdG8gdGhlIHBhdGguCisgKgorICogLSBJdGVyYXRlIG92ZXIgdGhlIGBhdHRyX2NoZWNrLml0ZW1zW11gIGFycmF5IHRvIGV4YW1pbmUgdGhlIGF0dHJpYnV0ZQorICogbmFtZXMgYW5kIHZhbHVlcy4gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBkZXNjcmliZWQgYnkgYW4KKyAqIGBhdHRyX2NoZWNrLml0ZW1zW11gIG9iamVjdCBjYW4gYmUgcmV0cmlldmVkIHZpYQorICogYGdpdF9hdHRyX25hbWUoY2hlY2stPml0ZW1zW2ldLmF0dHIpYC4gKFBsZWFzZSBub3RlIHRoYXQgbm8gaXRlbXMgd2lsbCBiZQorICogcmV0dXJuZWQgZm9yIHVuc2V0IGF0dHJpYnV0ZXMsIHNvIGBBVFRSX1VOU0VUKClgIHdpbGwgcmV0dXJuIGZhbHNlIGZvciBhbGwKKyAqIHJldHVybmVkIGBhdHRyX2NoZWNrLml0ZW1zW11gIG9iamVjdHMuKQorICoKKyAqIC0gRnJlZSB0aGUgYGF0dHJfY2hlY2tgIHN0cnVjdCBieSBjYWxsaW5nIGBhdHRyX2NoZWNrX2ZyZWUoKWAuCisgKi8KKworc3RydWN0IGluZGV4X3N0YXRlOworCisvKioKKyAqIEFuIGF0dHJpYnV0ZSBpcyBhbiBvcGFxdWUgb2JqZWN0IHRoYXQgaXMgaWRlbnRpZmllZCBieSBpdHMgbmFtZS4gUGFzcyB0aGUKKyAqIG5hbWUgdG8gYGdpdF9hdHRyKClgIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgb2JqZWN0IG9mIHRoaXMgdHlwZS4KKyAqIFRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHN0cnVjdHVyZSBpcyBvZiBubyBpbnRlcmVzdCB0byB0aGUKKyAqIGNhbGxpbmcgcHJvZ3JhbXMuIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgY2FuIGJlIHJldHJpZXZlZCBieSBjYWxsaW5nCisgKiBgZ2l0X2F0dHJfbmFtZSgpYC4KKyAqLworc3RydWN0IGdpdF9hdHRyOworCisvKiBvcGFxdWUgc3RydWN0dXJlcyB1c2VkIGludGVybmFsbHkgZm9yIGF0dHJpYnV0ZSBjb2xsZWN0aW9uICovCitzdHJ1Y3QgYWxsX2F0dHJzX2l0ZW07CitzdHJ1Y3QgYXR0cl9zdGFjazsKK3N0cnVjdCBpbmRleF9zdGF0ZTsKKworLyoKKyAqIEdpdmVuIGEgc3RyaW5nLCByZXR1cm4gdGhlIGdpdGF0dHJpYnV0ZSBvYmplY3QgdGhhdAorICogY29ycmVzcG9uZHMgdG8gaXQuCisgKi8KK2NvbnN0IHN0cnVjdCBnaXRfYXR0ciAqZ2l0X2F0dHIoY29uc3QgY2hhciAqKTsKKworLyogSW50ZXJuYWwgdXNlICovCitleHRlcm4gY29uc3QgY2hhciBnaXRfYXR0cl9fdHJ1ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgZ2l0X2F0dHJfX2ZhbHNlW107CisKKy8qKgorICogQXR0cmlidXRlIFZhbHVlcworICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEFuIGF0dHJpYnV0ZSBmb3IgYSBwYXRoIGNhbiBiZSBpbiBvbmUgb2YgZm91ciBzdGF0ZXM6IFNldCwgVW5zZXQsIFVuc3BlY2lmaWVkCisgKiBvciBzZXQgdG8gYSBzdHJpbmcsIGFuZCBgLnZhbHVlYCBtZW1iZXIgb2YgYHN0cnVjdCBhdHRyX2NoZWNrX2l0ZW1gIHJlY29yZHMKKyAqIGl0LiBUaGUgdGhyZWUgbWFjcm9zIGNoZWNrIHRoZXNlLCBpZiBub25lIG9mIHRoZW0gcmV0dXJucyB0cnVlLCBgLnZhbHVlYAorICogbWVtYmVyIHBvaW50cyBhdCBhIHN0cmluZyB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGUgcGF0aC4KKyAqLworCisvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBTZXQgZm9yIHRoZSBwYXRoLiAqLworI2RlZmluZSBBVFRSX1RSVUUodikgKCh2KSA9PSBnaXRfYXR0cl9fdHJ1ZSkKKworLyogUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgVW5zZXQgZm9yIHRoZSBwYXRoLiAqLworI2RlZmluZSBBVFRSX0ZBTFNFKHYpICgodikgPT0gZ2l0X2F0dHJfX2ZhbHNlKQorCisvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBVbnNwZWNpZmllZCBmb3IgdGhlIHBhdGguICovCisjZGVmaW5lIEFUVFJfVU5TRVQodikgKCh2KSA9PSBOVUxMKQorCisvKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIG9uZSBhdHRyaWJ1dGUgYW5kIGl0cyB2YWx1ZS4gKi8KK3N0cnVjdCBhdHRyX2NoZWNrX2l0ZW0geworCWNvbnN0IHN0cnVjdCBnaXRfYXR0ciAqYXR0cjsKKwljb25zdCBjaGFyICp2YWx1ZTsKK307CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgYGF0dHJfY2hlY2tfaXRlbWAuIEl0IGlzIHBhc3NlZCB0bworICogYGdpdF9jaGVja19hdHRyKClgIGZ1bmN0aW9uLCBzcGVjaWZ5aW5nIHRoZSBhdHRyaWJ1dGVzIHRvIGNoZWNrLCBhbmQKKyAqIHJlY2VpdmVzIHRoZWlyIHZhbHVlcy4KKyAqLworc3RydWN0IGF0dHJfY2hlY2sgeworCWludCBucjsKKwlpbnQgYWxsb2M7CisJc3RydWN0IGF0dHJfY2hlY2tfaXRlbSAqaXRlbXM7CisJaW50IGFsbF9hdHRyc19ucjsKKwlzdHJ1Y3QgYWxsX2F0dHJzX2l0ZW0gKmFsbF9hdHRyczsKKwlzdHJ1Y3QgYXR0cl9zdGFjayAqc3RhY2s7Cit9OworCitzdHJ1Y3QgYXR0cl9jaGVjayAqYXR0cl9jaGVja19hbGxvYyh2b2lkKTsKK3N0cnVjdCBhdHRyX2NoZWNrICphdHRyX2NoZWNrX2luaXRsKGNvbnN0IGNoYXIgKiwgLi4uKTsKK3N0cnVjdCBhdHRyX2NoZWNrICphdHRyX2NoZWNrX2R1cChjb25zdCBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2spOworCitzdHJ1Y3QgYXR0cl9jaGVja19pdGVtICphdHRyX2NoZWNrX2FwcGVuZChzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2ssCisJCQkJCSAgY29uc3Qgc3RydWN0IGdpdF9hdHRyICphdHRyKTsKKwordm9pZCBhdHRyX2NoZWNrX3Jlc2V0KHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjayk7Cit2b2lkIGF0dHJfY2hlY2tfY2xlYXIoc3RydWN0IGF0dHJfY2hlY2sgKmNoZWNrKTsKK3ZvaWQgYXR0cl9jaGVja19mcmVlKHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjayk7CisKKy8qCisgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSByZXByZXNlbnRlZCBieSB0aGUgYXJndW1lbnQuICBUaGUKKyAqIHJldHVybiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gYSBudWxsLWRlbGltaXRlZCBzdHJpbmcgdGhhdCBpcyBwYXJ0CisgKiBvZiB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmU7IGl0IHNob3VsZCBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKi8KK2NvbnN0IGNoYXIgKmdpdF9hdHRyX25hbWUoY29uc3Qgc3RydWN0IGdpdF9hdHRyICopOworCit2b2lkIGdpdF9jaGVja19hdHRyKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICAgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGF0dHJfY2hlY2sgKmNoZWNrKTsKKworLyoKKyAqIFJldHJpZXZlIGFsbCBhdHRyaWJ1dGVzIHRoYXQgYXBwbHkgdG8gdGhlIHNwZWNpZmllZCBwYXRoLgorICogY2hlY2sgaG9sZHMgdGhlIGF0dHJpYnV0ZXMgYW5kIHRoZWlyIHZhbHVlcy4KKyAqLwordm9pZCBnaXRfYWxsX2F0dHJzKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2spOworCitlbnVtIGdpdF9hdHRyX2RpcmVjdGlvbiB7CisJR0lUX0FUVFJfQ0hFQ0tJTiwKKwlHSVRfQVRUUl9DSEVDS09VVCwKKwlHSVRfQVRUUl9JTkRFWAorfTsKK3ZvaWQgZ2l0X2F0dHJfc2V0X2RpcmVjdGlvbihlbnVtIGdpdF9hdHRyX2RpcmVjdGlvbiBuZXdfZGlyZWN0aW9uKTsKKwordm9pZCBhdHRyX3N0YXJ0KHZvaWQpOworCisjZW5kaWYgLyogQVRUUl9IICovCmRpZmYgLS1naXQgYS9iYW5uZWQuaCBiL2Jhbm5lZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYTE4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9iYW5uZWQuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIEJBTk5FRF9ICisjZGVmaW5lIEJBTk5FRF9ICisKKy8qCisgKiBUaGlzIGhlYWRlciBsaXN0cyBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gYmFubmVkIGZyb20gb3VyIGNvZGUgYmFzZSwKKyAqIGJlY2F1c2UgdGhleSdyZSB0b28gZWFzeSB0byBtaXN1c2UgKGFuZCBldmVuIGlmIHVzZWQgY29ycmVjdGx5LAorICogY29tcGxpY2F0ZSBhdWRpdHMpLiBJbmNsdWRpbmcgdGhpcyBoZWFkZXIgdHVybnMgdGhlbSBpbnRvIGNvbXBpbGUtdGltZQorICogZXJyb3JzLgorICovCisKKyNkZWZpbmUgQkFOTkVEKGZ1bmMpIHNvcnJ5XyMjZnVuYyMjX2lzX2FfYmFubmVkX2Z1bmN0aW9uCisKKyN1bmRlZiBzdHJjcHkKKyNkZWZpbmUgc3RyY3B5KHgseSkgQkFOTkVEKHN0cmNweSkKKyN1bmRlZiBzdHJjYXQKKyNkZWZpbmUgc3RyY2F0KHgseSkgQkFOTkVEKHN0cmNhdCkKKyN1bmRlZiBzdHJuY3B5CisjZGVmaW5lIHN0cm5jcHkoeCx5LG4pIEJBTk5FRChzdHJuY3B5KQorI3VuZGVmIHN0cm5jYXQKKyNkZWZpbmUgc3RybmNhdCh4LHksbikgQkFOTkVEKHN0cm5jYXQpCisKKyN1bmRlZiBzcHJpbnRmCisjdW5kZWYgdnNwcmludGYKKyNpZmRlZiBIQVZFX1ZBUklBRElDX01BQ1JPUworI2RlZmluZSBzcHJpbnRmKC4uLikgQkFOTkVEKHNwcmludGYpCisjZGVmaW5lIHZzcHJpbnRmKC4uLikgQkFOTkVEKHZzcHJpbnRmKQorI2Vsc2UKKyNkZWZpbmUgc3ByaW50ZihidWYsZm10LGFyZykgQkFOTkVEKHNwcmludGYpCisjZGVmaW5lIHZzcHJpbnRmKGJ1ZixmbXQsYXJnKSBCQU5ORUQodnNwcmludGYpCisjZW5kaWYKKworI2VuZGlmIC8qIEJBTk5FRF9IICovCmRpZmYgLS1naXQgYS9iYXNlODUuYyBiL2Jhc2U4NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTYwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9iYXNlODUuYwpAQCAtMCwwICsxLDEzMiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKKyN1bmRlZiBERUJVR184NQorCisjaWZkZWYgREVCVUdfODUKKyNkZWZpbmUgc2F5KGEpIGZwcmludGYoc3RkZXJyLCBhKQorI2RlZmluZSBzYXkxKGEsYikgZnByaW50ZihzdGRlcnIsIGEsIGIpCisjZGVmaW5lIHNheTIoYSxiLGMpIGZwcmludGYoc3RkZXJyLCBhLCBiLCBjKQorI2Vsc2UKKyNkZWZpbmUgc2F5KGEpIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQorI2RlZmluZSBzYXkxKGEsYikgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCisjZGVmaW5lIHNheTIoYSxiLGMpIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyIGVuODVbXSA9IHsKKwknMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsCisJJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywgJ0cnLCAnSCcsICdJJywgJ0onLAorCSdLJywgJ0wnLCAnTScsICdOJywgJ08nLCAnUCcsICdRJywgJ1InLCAnUycsICdUJywKKwknVScsICdWJywgJ1cnLCAnWCcsICdZJywgJ1onLAorCSdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJywgJ2gnLCAnaScsICdqJywKKwknaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsCisJJ3UnLCAndicsICd3JywgJ3gnLCAneScsICd6JywKKwknIScsICcjJywgJyQnLCAnJScsICcmJywgJygnLCAnKScsICcqJywgJysnLCAnLScsCisJJzsnLCAnPCcsICc9JywgJz4nLCAnPycsICdAJywgJ14nLCAnXycsCSdgJywgJ3snLAorCSd8JywgJ30nLCAnficKK307CisKK3N0YXRpYyBjaGFyIGRlODVbMjU2XTsKK3N0YXRpYyB2b2lkIHByZXBfYmFzZTg1KHZvaWQpCit7CisJaW50IGk7CisJaWYgKGRlODVbJ1onXSkKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVuODUpOyBpKyspIHsKKwkJaW50IGNoID0gZW44NVtpXTsKKwkJZGU4NVtjaF0gPSBpICsgMTsKKwl9Cit9CisKK2ludCBkZWNvZGVfODUoY2hhciAqZHN0LCBjb25zdCBjaGFyICpidWZmZXIsIGludCBsZW4pCit7CisJcHJlcF9iYXNlODUoKTsKKworCXNheTIoImRlY29kZSA4NSA8JS4qcz4iLCBsZW4gLyA0ICogNSwgYnVmZmVyKTsKKwl3aGlsZSAobGVuKSB7CisJCXVuc2lnbmVkIGFjYyA9IDA7CisJCWludCBkZSwgY250ID0gNDsKKwkJdW5zaWduZWQgY2hhciBjaDsKKwkJZG8geworCQkJY2ggPSAqYnVmZmVyKys7CisJCQlkZSA9IGRlODVbY2hdOworCQkJaWYgKC0tZGUgPCAwKQorCQkJCXJldHVybiBlcnJvcigiaW52YWxpZCBiYXNlODUgYWxwaGFiZXQgJWMiLCBjaCk7CisJCQlhY2MgPSBhY2MgKiA4NSArIGRlOworCQl9IHdoaWxlICgtLWNudCk7CisJCWNoID0gKmJ1ZmZlcisrOworCQlkZSA9IGRlODVbY2hdOworCQlpZiAoLS1kZSA8IDApCisJCQlyZXR1cm4gZXJyb3IoImludmFsaWQgYmFzZTg1IGFscGhhYmV0ICVjIiwgY2gpOworCQkvKiBEZXRlY3Qgb3ZlcmZsb3cuICovCisJCWlmICgweGZmZmZmZmZmIC8gODUgPCBhY2MgfHwKKwkJICAgIDB4ZmZmZmZmZmYgLSBkZSA8IChhY2MgKj0gODUpKQorCQkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGJhc2U4NSBzZXF1ZW5jZSAlLjVzIiwgYnVmZmVyLTUpOworCQlhY2MgKz0gZGU7CisJCXNheTEoIiAlMDh4IiwgYWNjKTsKKworCQljbnQgPSAobGVuIDwgNCkgPyBsZW4gOiA0OworCQlsZW4gLT0gY250OworCQlkbyB7CisJCQlhY2MgPSAoYWNjIDw8IDgpIHwgKGFjYyA+PiAyNCk7CisJCQkqZHN0KysgPSBhY2M7CisJCX0gd2hpbGUgKC0tY250KTsKKwl9CisJc2F5KCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZW5jb2RlXzg1KGNoYXIgKmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGJ5dGVzKQoreworCXNheSgiZW5jb2RlIDg1Iik7CisJd2hpbGUgKGJ5dGVzKSB7CisJCXVuc2lnbmVkIGFjYyA9IDA7CisJCWludCBjbnQ7CisJCWZvciAoY250ID0gMjQ7IGNudCA+PSAwOyBjbnQgLT0gOCkgeworCQkJdW5zaWduZWQgY2ggPSAqZGF0YSsrOworCQkJYWNjIHw9IGNoIDw8IGNudDsKKwkJCWlmICgtLWJ5dGVzID09IDApCisJCQkJYnJlYWs7CisJCX0KKwkJc2F5MSgiICUwOHgiLCBhY2MpOworCQlmb3IgKGNudCA9IDQ7IGNudCA+PSAwOyBjbnQtLSkgeworCQkJaW50IHZhbCA9IGFjYyAlIDg1OworCQkJYWNjIC89IDg1OworCQkJYnVmW2NudF0gPSBlbjg1W3ZhbF07CisJCX0KKwkJYnVmICs9IDU7CisJfQorCXNheSgiXG4iKTsKKworCSpidWYgPSAwOworfQorCisjaWZkZWYgREVCVUdfODUKK2ludCBtYWluKGludCBhYywgY2hhciAqKmF2KQoreworCWNoYXIgYnVmWzEwMjRdOworCisJaWYgKCFzdHJjbXAoYXZbMV0sICItZSIpKSB7CisJCWludCBsZW4gPSBzdHJsZW4oYXZbMl0pOworCQllbmNvZGVfODUoYnVmLCBhdlsyXSwgbGVuKTsKKwkJaWYgKGxlbiA8PSAyNikgbGVuID0gbGVuICsgJ0EnIC0gMTsKKwkJZWxzZSBsZW4gPSBsZW4gKyAnYScgLSAyNiAtIDE7CisJCXByaW50ZigiZW5jb2RlZDogJWMlc1xuIiwgbGVuLCBidWYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoYXZbMV0sICItZCIpKSB7CisJCWludCBsZW4gPSAqYXZbMl07CisJCWlmICgnQScgPD0gbGVuICYmIGxlbiA8PSAnWicpIGxlbiA9IGxlbiAtICdBJyArIDE7CisJCWVsc2UgbGVuID0gbGVuIC0gJ2EnICsgMjYgKyAxOworCQlkZWNvZGVfODUoYnVmLCBhdlsyXSsxLCBsZW4pOworCQlwcmludGYoImRlY29kZWQ6ICUuKnNcbiIsIGxlbiwgYnVmKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGF2WzFdLCAiLXQiKSkgeworCQljaGFyIHRbNF0gPSB7IC0xLC0xLC0xLC0xIH07CisJCWVuY29kZV84NShidWYsIHQsIDQpOworCQlwcmludGYoImVuY29kZWQ6IEQlc1xuIiwgYnVmKTsKKwkJcmV0dXJuIDA7CisJfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9iaXNlY3QuYyBiL2Jpc2VjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZTgzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXNlY3QuYwpAQCAtMCwwICsxLDExNDUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImJpc2VjdC5oIgorI2luY2x1ZGUgIm9pZC1hcnJheS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJjb21taXQtc2xhYi5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorCitzdGF0aWMgc3RydWN0IG9pZF9hcnJheSBnb29kX3JldnM7CitzdGF0aWMgc3RydWN0IG9pZF9hcnJheSBza2lwcGVkX3JldnM7CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2lkICpjdXJyZW50X2JhZF9vaWQ7CisKK3N0YXRpYyBjb25zdCBjaGFyICphcmd2X2NoZWNrb3V0W10gPSB7ImNoZWNrb3V0IiwgIi1xIiwgTlVMTCwgIi0tIiwgTlVMTH07CitzdGF0aWMgY29uc3QgY2hhciAqYXJndl9zaG93X2JyYW5jaFtdID0geyJzaG93LWJyYW5jaCIsIE5VTEwsIE5VTEx9OworCitzdGF0aWMgY29uc3QgY2hhciAqdGVybV9iYWQ7CitzdGF0aWMgY29uc3QgY2hhciAqdGVybV9nb29kOworCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworI2RlZmluZSBDT1VOVEVECQkoMXU8PDE2KQorCisvKgorICogVGhpcyBpcyBhIHRydWx5IHN0dXBpZCBhbGdvcml0aG0sIGJ1dCBpdCdzIG9ubHkKKyAqIHVzZWQgZm9yIGJpc2VjdGlvbiwgYW5kIHdlIGp1c3QgZG9uJ3QgY2FyZSBlbm91Z2guCisgKgorICogV2UgY2FyZSBqdXN0IGJhcmVseSBlbm91Z2ggdG8gYXZvaWQgcmVjdXJzaW5nIGZvcgorICogbm9uLW1lcmdlIGVudHJpZXMuCisgKi8KK3N0YXRpYyBpbnQgY291bnRfZGlzdGFuY2Uoc3RydWN0IGNvbW1pdF9saXN0ICplbnRyeSkKK3sKKwlpbnQgbnIgPSAwOworCisJd2hpbGUgKGVudHJ5KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGVudHJ5LT5pdGVtOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBDT1VOVEVEKSkKKwkJCWJyZWFrOworCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSkKKwkJCW5yKys7CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IENPVU5URUQ7CisJCXAgPSBjb21taXQtPnBhcmVudHM7CisJCWVudHJ5ID0gcDsKKwkJaWYgKHApIHsKKwkJCXAgPSBwLT5uZXh0OworCQkJd2hpbGUgKHApIHsKKwkJCQluciArPSBjb3VudF9kaXN0YW5jZShwKTsKKwkJCQlwID0gcC0+bmV4dDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBucjsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfZGlzdGFuY2Uoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH5DT1VOVEVEOworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwl9Cit9CisKK2RlZmluZV9jb21taXRfc2xhYihjb21taXRfd2VpZ2h0LCBpbnQgKik7CitzdGF0aWMgc3RydWN0IGNvbW1pdF93ZWlnaHQgY29tbWl0X3dlaWdodDsKKworI2RlZmluZSBERUJVR19CSVNFQ1QgMAorCitzdGF0aWMgaW5saW5lIGludCB3ZWlnaHQoc3RydWN0IGNvbW1pdF9saXN0ICplbGVtKQoreworCXJldHVybiAqKmNvbW1pdF93ZWlnaHRfYXQoJmNvbW1pdF93ZWlnaHQsIGVsZW0tPml0ZW0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2VpZ2h0X3NldChzdHJ1Y3QgY29tbWl0X2xpc3QgKmVsZW0sIGludCB3ZWlnaHQpCit7CisJKipjb21taXRfd2VpZ2h0X2F0KCZjb21taXRfd2VpZ2h0LCBlbGVtLT5pdGVtKSA9IHdlaWdodDsKK30KKworc3RhdGljIGludCBjb3VudF9pbnRlcmVzdGluZ19wYXJlbnRzKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJaW50IGNvdW50OworCisJZm9yIChjb3VudCA9IDAsIHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisJCWNvdW50Kys7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaGFsZndheShzdHJ1Y3QgY29tbWl0X2xpc3QgKnAsIGludCBucikKK3sKKwkvKgorCSAqIERvbid0IHNob3J0LWN1dCBzb21ldGhpbmcgd2UgYXJlIG5vdCBnb2luZyB0byByZXR1cm4hCisJICovCisJaWYgKHAtPml0ZW0tPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKQorCQlyZXR1cm4gMDsKKwlpZiAoREVCVUdfQklTRUNUKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIDIgYW5kIDMgYXJlIGhhbGZ3YXkgb2YgNS4KKwkgKiAzIGlzIGhhbGZ3YXkgb2YgNiBidXQgMiBhbmQgNCBhcmUgbm90LgorCSAqLworCXN3aXRjaCAoMiAqIHdlaWdodChwKSAtIG5yKSB7CisJY2FzZSAtMTogY2FzZSAwOiBjYXNlIDE6CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19saXN0KGNvbnN0IGNoYXIgKmRlYnVnLCBpbnQgY291bnRlZCwgaW50IG5yLAorCQkgICAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCisJaWYgKCFERUJVR19CSVNFQ1QpCisJCXJldHVybjsKKworCWZwcmludGYoc3RkZXJyLCAiJXMgKCVkLyVkKVxuIiwgZGVidWcsIGNvdW50ZWQsIG5yKTsKKworCWZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcHA7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXVuc2lnbmVkIGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQljaGFyICpidWYgPSByZWFkX29iamVjdF9maWxlKCZjb21taXQtPm9iamVjdC5vaWQsICZ0eXBlLAorCQkJCQkgICAgICZzaXplKTsKKwkJY29uc3QgY2hhciAqc3ViamVjdF9zdGFydDsKKwkJaW50IHN1YmplY3RfbGVuOworCisJCWZwcmludGYoc3RkZXJyLCAiJWMlYyVjICIsCisJCQkoZmxhZ3MgJiBUUkVFU0FNRSkgPyAnICcgOiAnVCcsCisJCQkoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSA/ICdVJyA6ICcgJywKKwkJCShmbGFncyAmIENPVU5URUQpID8gJ0MnIDogJyAnKTsKKwkJaWYgKCpjb21taXRfd2VpZ2h0X2F0KCZjb21taXRfd2VpZ2h0LCBwLT5pdGVtKSkKKwkJCWZwcmludGYoc3RkZXJyLCAiJTNkIiwgd2VpZ2h0KHApKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsICItLS0iKTsKKwkJZnByaW50ZihzdGRlcnIsICIgJS4qcyIsIDgsIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCQlmb3IgKHBwID0gY29tbWl0LT5wYXJlbnRzOyBwcDsgcHAgPSBwcC0+bmV4dCkKKwkJCWZwcmludGYoc3RkZXJyLCAiICUuKnMiLCA4LAorCQkJCW9pZF90b19oZXgoJnBwLT5pdGVtLT5vYmplY3Qub2lkKSk7CisKKwkJc3ViamVjdF9sZW4gPSBmaW5kX2NvbW1pdF9zdWJqZWN0KGJ1ZiwgJnN1YmplY3Rfc3RhcnQpOworCQlpZiAoc3ViamVjdF9sZW4pCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAlLipzIiwgc3ViamVjdF9sZW4sIHN1YmplY3Rfc3RhcnQpOworCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpiZXN0X2Jpc2VjdGlvbihzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIGludCBucikKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnAsICpiZXN0OworCWludCBiZXN0X2Rpc3RhbmNlID0gLTE7CisKKwliZXN0ID0gbGlzdDsKKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpbnQgZGlzdGFuY2U7CisJCXVuc2lnbmVkIGZsYWdzID0gcC0+aXRlbS0+b2JqZWN0LmZsYWdzOworCisJCWlmIChmbGFncyAmIFRSRUVTQU1FKQorCQkJY29udGludWU7CisJCWRpc3RhbmNlID0gd2VpZ2h0KHApOworCQlpZiAobnIgLSBkaXN0YW5jZSA8IGRpc3RhbmNlKQorCQkJZGlzdGFuY2UgPSBuciAtIGRpc3RhbmNlOworCQlpZiAoZGlzdGFuY2UgPiBiZXN0X2Rpc3RhbmNlKSB7CisJCQliZXN0ID0gcDsKKwkJCWJlc3RfZGlzdGFuY2UgPSBkaXN0YW5jZTsKKwkJfQorCX0KKworCXJldHVybiBiZXN0OworfQorCitzdHJ1Y3QgY29tbWl0X2Rpc3QgeworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlpbnQgZGlzdGFuY2U7Cit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfY29tbWl0X2Rpc3QoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCBjb21taXRfZGlzdCAqYSwgKmI7CisKKwlhID0gKHN0cnVjdCBjb21taXRfZGlzdCAqKWFfOworCWIgPSAoc3RydWN0IGNvbW1pdF9kaXN0ICopYl87CisJaWYgKGEtPmRpc3RhbmNlICE9IGItPmRpc3RhbmNlKQorCQlyZXR1cm4gYi0+ZGlzdGFuY2UgLSBhLT5kaXN0YW5jZTsgLyogZGVzYyBzb3J0ICovCisJcmV0dXJuIG9pZGNtcCgmYS0+Y29tbWl0LT5vYmplY3Qub2lkLCAmYi0+Y29tbWl0LT5vYmplY3Qub2lkKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqYmVzdF9iaXNlY3Rpb25fc29ydGVkKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwgaW50IG5yKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwlzdHJ1Y3QgY29tbWl0X2Rpc3QgKmFycmF5ID0geGNhbGxvYyhuciwgc2l6ZW9mKCphcnJheSkpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGNudCwgaTsKKworCWZvciAocCA9IGxpc3QsIGNudCA9IDA7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWludCBkaXN0YW5jZTsKKwkJdW5zaWduZWQgZmxhZ3MgPSBwLT5pdGVtLT5vYmplY3QuZmxhZ3M7CisKKwkJaWYgKGZsYWdzICYgVFJFRVNBTUUpCisJCQljb250aW51ZTsKKwkJZGlzdGFuY2UgPSB3ZWlnaHQocCk7CisJCWlmIChuciAtIGRpc3RhbmNlIDwgZGlzdGFuY2UpCisJCQlkaXN0YW5jZSA9IG5yIC0gZGlzdGFuY2U7CisJCWFycmF5W2NudF0uY29tbWl0ID0gcC0+aXRlbTsKKwkJYXJyYXlbY250XS5kaXN0YW5jZSA9IGRpc3RhbmNlOworCQljbnQrKzsKKwl9CisJUVNPUlQoYXJyYXksIGNudCwgY29tcGFyZV9jb21taXRfZGlzdCk7CisJZm9yIChwID0gbGlzdCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmKGFycmF5W2ldLmNvbW1pdC0+b2JqZWN0KTsKKworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJkaXN0PSVkIiwgYXJyYXlbaV0uZGlzdGFuY2UpOworCQlhZGRfbmFtZV9kZWNvcmF0aW9uKERFQ09SQVRJT05fTk9ORSwgYnVmLmJ1Ziwgb2JqKTsKKworCQlwLT5pdGVtID0gYXJyYXlbaV0uY29tbWl0OworCQlpZiAoaSA8IGNudCAtIDEpCisJCQlwID0gcC0+bmV4dDsKKwl9CisJaWYgKHApIHsKKwkJZnJlZV9jb21taXRfbGlzdChwLT5uZXh0KTsKKwkJcC0+bmV4dCA9IE5VTEw7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWZyZWUoYXJyYXkpOworCXJldHVybiBsaXN0OworfQorCisvKgorICogemVybyBvciBwb3NpdGl2ZSB3ZWlnaHQgaXMgdGhlIG51bWJlciBvZiBpbnRlcmVzdGluZyBjb21taXRzIGl0IGNhbgorICogcmVhY2gsIGluY2x1ZGluZyBpdHNlbGYuICBFc3BlY2lhbGx5LCB3ZWlnaHQgPSAwIG1lYW5zIGl0IGRvZXMgbm90CisgKiByZWFjaCBhbnkgdHJlZS1jaGFuZ2luZyBjb21taXRzIChlLmcuIGp1c3QgYWJvdmUgdW5pbnRlcmVzdGluZyBvbmUKKyAqIGJ1dCB0cmF2ZXJzYWwgaXMgd2l0aCBwYXRoc3BlYykuCisgKgorICogd2VpZ2h0ID0gLTEgbWVhbnMgaXQgaGFzIG9uZSBwYXJlbnQgYW5kIGl0cyBkaXN0YW5jZSBpcyB5ZXQgdG8KKyAqIGJlIGNvbXB1dGVkLgorICoKKyAqIHdlaWdodCA9IC0yIG1lYW5zIGl0IGhhcyBtb3JlIHRoYW4gb25lIHBhcmVudCBhbmQgaXRzIGRpc3RhbmNlIGlzCisgKiB1bmtub3duLiAgQWZ0ZXIgcnVubmluZyBjb3VudF9kaXN0YW5jZSgpIGZpcnN0LCB0aGV5IHdpbGwgZ2V0IHplcm8KKyAqIG9yIHBvc2l0aXZlIGRpc3RhbmNlLgorICovCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpkb19maW5kX2Jpc2VjdGlvbihzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsCisJCQkJCSAgICAgaW50IG5yLCBpbnQgKndlaWdodHMsCisJCQkJCSAgICAgaW50IGZpbmRfYWxsKQoreworCWludCBuLCBjb3VudGVkOworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKworCWNvdW50ZWQgPSAwOworCisJZm9yIChuID0gMCwgcCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXVuc2lnbmVkIGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisKKwkJKmNvbW1pdF93ZWlnaHRfYXQoJmNvbW1pdF93ZWlnaHQsIHAtPml0ZW0pID0gJndlaWdodHNbbisrXTsKKwkJc3dpdGNoIChjb3VudF9pbnRlcmVzdGluZ19wYXJlbnRzKGNvbW1pdCkpIHsKKwkJY2FzZSAwOgorCQkJaWYgKCEoZmxhZ3MgJiBUUkVFU0FNRSkpIHsKKwkJCQl3ZWlnaHRfc2V0KHAsIDEpOworCQkJCWNvdW50ZWQrKzsKKwkJCQlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGNvdW50IG9uZSIsCisJCQkJCSAgY291bnRlZCwgbnIsIGxpc3QpOworCQkJfQorCQkJLyoKKwkJCSAqIG90aGVyd2lzZSwgaXQgaXMga25vd24gbm90IHRvIHJlYWNoIGFueQorCQkJICogdHJlZS1jaGFuZ2luZyBjb21taXQgYW5kIGdldHMgd2VpZ2h0IDAuCisJCQkgKi8KKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl3ZWlnaHRfc2V0KHAsIC0xKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJd2VpZ2h0X3NldChwLCAtMik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNob3dfbGlzdCgiYmlzZWN0aW9uIDIgaW5pdGlhbGl6ZSIsIGNvdW50ZWQsIG5yLCBsaXN0KTsKKworCS8qCisJICogSWYgeW91IGhhdmUgb25seSBvbmUgcGFyZW50IGluIHRoZSByZXN1bHRpbmcgc2V0CisJICogdGhlbiB5b3UgY2FuIHJlYWNoIG9uZSBjb21taXQgbW9yZSB0aGFuIHRoYXQgcGFyZW50CisJICogY2FuIHJlYWNoLiAgU28gd2UgZG8gbm90IGhhdmUgdG8gcnVuIHRoZSBleHBlbnNpdmUKKwkgKiBjb3VudF9kaXN0YW5jZSgpIGZvciBzaW5nbGUgc3RyYW5kIG9mIHBlYXJscy4KKwkgKgorCSAqIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgcGFyZW50cywgeW91IGNhbm5vdAorCSAqIGp1c3QgYWRkIHRoZWlyIGRpc3RhbmNlIGFuZCBvbmUgZm9yIHlvdXJzZWxmLCBzaW5jZQorCSAqIHRoZXkgdXN1YWxseSByZWFjaCB0aGUgc2FtZSBhbmNlc3RvciBhbmQgeW91IHdvdWxkCisJICogZW5kIHVwIGNvdW50aW5nIHRoZW0gdHdpY2UgdGhhdCB3YXkuCisJICoKKwkgKiBTbyB3ZSB3aWxsIGZpcnN0IGNvdW50IGRpc3RhbmNlIG9mIG1lcmdlcyB0aGUgdXN1YWwKKwkgKiB3YXksIGFuZCB0aGVuIGZpbGwgdGhlIGJsYW5rcyB1c2luZyBjaGVhcGVyIGFsZ29yaXRobS4KKwkgKi8KKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCWNvbnRpbnVlOworCQlpZiAod2VpZ2h0KHApICE9IC0yKQorCQkJY29udGludWU7CisJCXdlaWdodF9zZXQocCwgY291bnRfZGlzdGFuY2UocCkpOworCQljbGVhcl9kaXN0YW5jZShsaXN0KTsKKworCQkvKiBEb2VzIGl0IGhhcHBlbiB0byBiZSBhdCBleGFjdGx5IGhhbGYtd2F5PyAqLworCQlpZiAoIWZpbmRfYWxsICYmIGhhbGZ3YXkocCwgbnIpKQorCQkJcmV0dXJuIHA7CisJCWNvdW50ZWQrKzsKKwl9CisKKwlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGNvdW50X2Rpc3RhbmNlIiwgY291bnRlZCwgbnIsIGxpc3QpOworCisJd2hpbGUgKGNvdW50ZWQgPCBucikgeworCQlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpxOworCQkJdW5zaWduZWQgZmxhZ3MgPSBwLT5pdGVtLT5vYmplY3QuZmxhZ3M7CisKKwkJCWlmICgwIDw9IHdlaWdodChwKSkKKwkJCQljb250aW51ZTsKKwkJCWZvciAocSA9IHAtPml0ZW0tPnBhcmVudHM7IHE7IHEgPSBxLT5uZXh0KSB7CisJCQkJaWYgKHEtPml0ZW0tPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmICgwIDw9IHdlaWdodChxKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIXEpCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiB3ZWlnaHQgZm9yIHAgaXMgdW5rbm93biBidXQgcSBpcyBrbm93bi4KKwkJCSAqIGFkZCBvbmUgZm9yIHAgaXRzZWxmIGlmIHAgaXMgdG8gYmUgY291bnRlZCwKKwkJCSAqIG90aGVyd2lzZSBpbmhlcml0IGl0IGZyb20gcSBkaXJlY3RseS4KKwkJCSAqLworCQkJaWYgKCEoZmxhZ3MgJiBUUkVFU0FNRSkpIHsKKwkJCQl3ZWlnaHRfc2V0KHAsIHdlaWdodChxKSsxKTsKKwkJCQljb3VudGVkKys7CisJCQkJc2hvd19saXN0KCJiaXNlY3Rpb24gMiBjb3VudCBvbmUiLAorCQkJCQkgIGNvdW50ZWQsIG5yLCBsaXN0KTsKKwkJCX0KKwkJCWVsc2UKKwkJCQl3ZWlnaHRfc2V0KHAsIHdlaWdodChxKSk7CisKKwkJCS8qIERvZXMgaXQgaGFwcGVuIHRvIGJlIGF0IGV4YWN0bHkgaGFsZi13YXk/ICovCisJCQlpZiAoIWZpbmRfYWxsICYmIGhhbGZ3YXkocCwgbnIpKQorCQkJCXJldHVybiBwOworCQl9CisJfQorCisJc2hvd19saXN0KCJiaXNlY3Rpb24gMiBjb3VudGVkIGFsbCIsIGNvdW50ZWQsIG5yLCBsaXN0KTsKKworCWlmICghZmluZF9hbGwpCisJCXJldHVybiBiZXN0X2Jpc2VjdGlvbihsaXN0LCBucik7CisJZWxzZQorCQlyZXR1cm4gYmVzdF9iaXNlY3Rpb25fc29ydGVkKGxpc3QsIG5yKTsKK30KKwordm9pZCBmaW5kX2Jpc2VjdGlvbihzdHJ1Y3QgY29tbWl0X2xpc3QgKipjb21taXRfbGlzdCwgaW50ICpyZWFjaGVzLAorCQkgICAgaW50ICphbGwsIGludCBmaW5kX2FsbCkKK3sKKwlpbnQgbnIsIG9uX2xpc3Q7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LCAqcCwgKmJlc3QsICpuZXh0LCAqbGFzdDsKKwlpbnQgKndlaWdodHM7CisKKwlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGVudHJ5IiwgMCwgMCwgKmNvbW1pdF9saXN0KTsKKwlpbml0X2NvbW1pdF93ZWlnaHQoJmNvbW1pdF93ZWlnaHQpOworCisJLyoKKwkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIHRvdGFsIGFuZCB0cmVlLWNoYW5naW5nIGl0ZW1zIG9uIHRoZQorCSAqIGxpc3QsIHdoaWxlIHJldmVyc2luZyB0aGUgbGlzdC4KKwkgKi8KKwlmb3IgKG5yID0gb25fbGlzdCA9IDAsIGxhc3QgPSBOVUxMLCBwID0gKmNvbW1pdF9saXN0OworCSAgICAgcDsKKwkgICAgIHAgPSBuZXh0KSB7CisJCXVuc2lnbmVkIGZsYWdzID0gcC0+aXRlbS0+b2JqZWN0LmZsYWdzOworCisJCW5leHQgPSBwLT5uZXh0OworCQlpZiAoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCQlmcmVlKHApOworCQkJY29udGludWU7CisJCX0KKwkJcC0+bmV4dCA9IGxhc3Q7CisJCWxhc3QgPSBwOworCQlpZiAoIShmbGFncyAmIFRSRUVTQU1FKSkKKwkJCW5yKys7CisJCW9uX2xpc3QrKzsKKwl9CisJbGlzdCA9IGxhc3Q7CisJc2hvd19saXN0KCJiaXNlY3Rpb24gMiBzb3J0ZWQiLCAwLCBuciwgbGlzdCk7CisKKwkqYWxsID0gbnI7CisJd2VpZ2h0cyA9IHhjYWxsb2Mob25fbGlzdCwgc2l6ZW9mKCp3ZWlnaHRzKSk7CisKKwkvKiBEbyB0aGUgcmVhbCB3b3JrIG9mIGZpbmRpbmcgYmlzZWN0aW9uIGNvbW1pdC4gKi8KKwliZXN0ID0gZG9fZmluZF9iaXNlY3Rpb24obGlzdCwgbnIsIHdlaWdodHMsIGZpbmRfYWxsKTsKKwlpZiAoYmVzdCkgeworCQlpZiAoIWZpbmRfYWxsKSB7CisJCQlsaXN0LT5pdGVtID0gYmVzdC0+aXRlbTsKKwkJCWZyZWVfY29tbWl0X2xpc3QobGlzdC0+bmV4dCk7CisJCQliZXN0ID0gbGlzdDsKKwkJCWJlc3QtPm5leHQgPSBOVUxMOworCQl9CisJCSpyZWFjaGVzID0gd2VpZ2h0KGJlc3QpOworCX0KKwlmcmVlKHdlaWdodHMpOworCSpjb21taXRfbGlzdCA9IGJlc3Q7CisJY2xlYXJfY29tbWl0X3dlaWdodCgmY29tbWl0X3dlaWdodCk7Cit9CisKK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCWludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGdvb2RfcHJlZml4ID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZHN0cigmZ29vZF9wcmVmaXgsIHRlcm1fZ29vZCk7CisJc3RyYnVmX2FkZHN0cigmZ29vZF9wcmVmaXgsICItIik7CisKKwlpZiAoIXN0cmNtcChyZWZuYW1lLCB0ZXJtX2JhZCkpIHsKKwkJY3VycmVudF9iYWRfb2lkID0geG1hbGxvYyhzaXplb2YoKmN1cnJlbnRfYmFkX29pZCkpOworCQlvaWRjcHkoY3VycmVudF9iYWRfb2lkLCBvaWQpOworCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgZ29vZF9wcmVmaXguYnVmKSkgeworCQlvaWRfYXJyYXlfYXBwZW5kKCZnb29kX3JldnMsIG9pZCk7CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aChyZWZuYW1lLCAic2tpcC0iKSkgeworCQlvaWRfYXJyYXlfYXBwZW5kKCZza2lwcGVkX3JldnMsIG9pZCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmdvb2RfcHJlZml4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfYmlzZWN0X3JlZnModm9pZCkKK3sKKwlyZXR1cm4gZm9yX2VhY2hfcmVmX2luKCJyZWZzL2Jpc2VjdC8iLCByZWdpc3Rlcl9yZWYsIE5VTEwpOworfQorCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF9iaXNlY3RfbmFtZXMsICJCSVNFQ1RfTkFNRVMiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfYmlzZWN0X2V4cGVjdGVkX3JldiwgIkJJU0VDVF9FWFBFQ1RFRF9SRVYiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfYmlzZWN0X2FuY2VzdG9yc19vaywgIkJJU0VDVF9BTkNFU1RPUlNfT0siKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfYmlzZWN0X3J1biwgIkJJU0VDVF9SVU4iKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfYmlzZWN0X3N0YXJ0LCAiQklTRUNUX1NUQVJUIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2Jpc2VjdF9sb2csICJCSVNFQ1RfTE9HIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2Jpc2VjdF90ZXJtcywgIkJJU0VDVF9URVJNUyIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF9oZWFkX25hbWUsICJoZWFkLW5hbWUiKQorCitzdGF0aWMgdm9pZCByZWFkX2Jpc2VjdF9wYXRocyhzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXkpCit7CisJc3RydWN0IHN0cmJ1ZiBzdHIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoX2Jpc2VjdF9uYW1lcygpOworCUZJTEUgKmZwID0geGZvcGVuKGZpbGVuYW1lLCAiciIpOworCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZzdHIsIGZwKSAhPSBFT0YpIHsKKwkJc3RyYnVmX3RyaW0oJnN0cik7CisJCWlmIChzcV9kZXF1b3RlX3RvX2FyZ3ZfYXJyYXkoc3RyLmJ1ZiwgYXJyYXkpKQorCQkJZGllKF8oIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiKSwKKwkJCSAgICBmaWxlbmFtZSwgc3RyLmJ1Zik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnN0cik7CisJZmNsb3NlKGZwKTsKK30KKworc3RhdGljIGNoYXIgKmpvaW5fb2lkX2FycmF5X2hleChzdHJ1Y3Qgb2lkX2FycmF5ICphcnJheSwgY2hhciBkZWxpbSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGpvaW5lZF9oZXhzID0gU1RSQlVGX0lOSVQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5yOyBpKyspIHsKKwkJc3RyYnVmX2FkZHN0cigmam9pbmVkX2hleHMsIG9pZF90b19oZXgoYXJyYXktPm9pZCArIGkpKTsKKwkJaWYgKGkgKyAxIDwgYXJyYXktPm5yKQorCQkJc3RyYnVmX2FkZGNoKCZqb2luZWRfaGV4cywgZGVsaW0pOworCX0KKworCXJldHVybiBzdHJidWZfZGV0YWNoKCZqb2luZWRfaGV4cywgTlVMTCk7Cit9CisKKy8qCisgKiBJbiB0aGlzIGZ1bmN0aW9uLCBwYXNzaW5nIGEgbm90IE5VTEwgc2tpcHBlZF9maXJzdCBpcyB2ZXJ5IHNwZWNpYWwuCisgKiBJdCBtZWFucyB0aGF0IHdlIHdhbnQgdG8ga25vdyBpZiB0aGUgZmlyc3QgY29tbWl0IGluIHRoZSBsaXN0IGlzCisgKiBza2lwcGVkIGJlY2F1c2Ugd2Ugd2lsbCB3YW50IHRvIHRlc3QgYSBjb21taXQgYXdheSBmcm9tIGl0IGlmIGl0IGlzCisgKiBpbmRlZWQgc2tpcHBlZC4KKyAqIFNvIGlmIHRoZSBmaXJzdCBjb21taXQgaXMgc2tpcHBlZCwgd2UgY2Fubm90IHRha2UgdGhlIHNob3J0Y3V0IHRvCisgKiBqdXN0ICJyZXR1cm4gbGlzdCIgd2hlbiB3ZSBmaW5kIHRoZSBmaXJzdCBub24gc2tpcHBlZCBjb21taXQsIHdlCisgKiBoYXZlIHRvIHJldHVybiBhIGZ1bGx5IGZpbHRlcmVkIGxpc3QuCisgKgorICogV2UgdXNlICgqc2tpcHBlZF9maXJzdCA9PSAtMSkgdG8gbWVhbiAiaXQgaGFzIGJlZW4gZm91bmQgdGhhdCB0aGUKKyAqIGZpcnN0IGNvbW1pdCBpcyBub3Qgc2tpcHBlZCIuIEluIHRoaXMgY2FzZSAqc2tpcHBlZF9maXJzdCBpcyBzZXQgYmFjaworICogdG8gMCBqdXN0IGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucy4KKyAqLworc3RydWN0IGNvbW1pdF9saXN0ICpmaWx0ZXJfc2tpcHBlZChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsCisJCQkJICAgc3RydWN0IGNvbW1pdF9saXN0ICoqdHJpZWQsCisJCQkJICAgaW50IHNob3dfYWxsLAorCQkJCSAgIGludCAqY291bnQsCisJCQkJICAgaW50ICpza2lwcGVkX2ZpcnN0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqZmlsdGVyZWQgPSBOVUxMLCAqKmYgPSAmZmlsdGVyZWQ7CisKKwkqdHJpZWQgPSBOVUxMOworCisJaWYgKHNraXBwZWRfZmlyc3QpCisJCSpza2lwcGVkX2ZpcnN0ID0gMDsKKwlpZiAoY291bnQpCisJCSpjb3VudCA9IDA7CisKKwlpZiAoIXNraXBwZWRfcmV2cy5ucikKKwkJcmV0dXJuIGxpc3Q7CisKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKm5leHQgPSBsaXN0LT5uZXh0OworCQlsaXN0LT5uZXh0ID0gTlVMTDsKKwkJaWYgKDAgPD0gb2lkX2FycmF5X2xvb2t1cCgmc2tpcHBlZF9yZXZzLCAmbGlzdC0+aXRlbS0+b2JqZWN0Lm9pZCkpIHsKKwkJCWlmIChza2lwcGVkX2ZpcnN0ICYmICEqc2tpcHBlZF9maXJzdCkKKwkJCQkqc2tpcHBlZF9maXJzdCA9IDE7CisJCQkvKiBNb3ZlIGN1cnJlbnQgdG8gdHJpZWQgbGlzdCAqLworCQkJKnRyaWVkID0gbGlzdDsKKwkJCXRyaWVkID0gJmxpc3QtPm5leHQ7CisJCX0gZWxzZSB7CisJCQlpZiAoIXNob3dfYWxsKSB7CisJCQkJaWYgKCFza2lwcGVkX2ZpcnN0IHx8ICEqc2tpcHBlZF9maXJzdCkKKwkJCQkJcmV0dXJuIGxpc3Q7CisJCQl9IGVsc2UgaWYgKHNraXBwZWRfZmlyc3QgJiYgISpza2lwcGVkX2ZpcnN0KSB7CisJCQkJLyogVGhpcyBtZWFucyB3ZSBrbm93IGl0J3Mgbm90IHNraXBwZWQgKi8KKwkJCQkqc2tpcHBlZF9maXJzdCA9IC0xOworCQkJfQorCQkJLyogTW92ZSBjdXJyZW50IHRvIGZpbHRlcmVkIGxpc3QgKi8KKwkJCSpmID0gbGlzdDsKKwkJCWYgPSAmbGlzdC0+bmV4dDsKKwkJCWlmIChjb3VudCkKKwkJCQkoKmNvdW50KSsrOworCQl9CisJCWxpc3QgPSBuZXh0OworCX0KKworCWlmIChza2lwcGVkX2ZpcnN0ICYmICpza2lwcGVkX2ZpcnN0ID09IC0xKQorCQkqc2tpcHBlZF9maXJzdCA9IDA7CisKKwlyZXR1cm4gZmlsdGVyZWQ7Cit9CisKKyNkZWZpbmUgUFJOX01PRFVMTyAzMjc2OAorCisvKgorICogVGhpcyBpcyBhIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBiYXNlZCBvbiAibWFuIDMgcmFuZCIuCisgKiBJdCBpcyBub3QgdXNlZCBwcm9wZXJseSBiZWNhdXNlIHRoZSBzZWVkIGlzIHRoZSBhcmd1bWVudCBhbmQgaXQKKyAqIGlzIGluY3JlYXNlZCBieSBvbmUgYmV0d2VlbiBlYWNoIGNhbGwsIGJ1dCB0aGF0IHNob3VsZCBub3QgbWF0dGVyCisgKiBmb3IgdGhpcyBhcHBsaWNhdGlvbi4KKyAqLworc3RhdGljIHVuc2lnbmVkIGdldF9wcm4odW5zaWduZWQgY291bnQpCit7CisJY291bnQgPSBjb3VudCAqIDExMDM1MTUyNDUgKyAxMjM0NTsKKwlyZXR1cm4gKGNvdW50LzY1NTM2KSAlIFBSTl9NT0RVTE87Cit9CisKKy8qCisgKiBDdXN0b20gaW50ZWdlciBzcXVhcmUgcm9vdCBmcm9tCisgKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JbnRlZ2VyX3NxdWFyZV9yb290CisgKi8KK3N0YXRpYyBpbnQgc3FydGkoaW50IHZhbCkKK3sKKwlmbG9hdCBkLCB4ID0gdmFsOworCisJaWYgKCF2YWwpCisJCXJldHVybiAwOworCisJZG8geworCQlmbG9hdCB5ID0gKHggKyAoZmxvYXQpdmFsIC8geCkgLyAyOworCQlkID0gKHkgPiB4KSA/IHkgLSB4IDogeCAtIHk7CisJCXggPSB5OworCX0gd2hpbGUgKGQgPj0gMC41KTsKKworCXJldHVybiAoaW50KXg7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKnNraXBfYXdheShzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmN1ciwgKnByZXZpb3VzOworCWludCBwcm4sIGluZGV4LCBpOworCisJcHJuID0gZ2V0X3Bybihjb3VudCk7CisJaW5kZXggPSAoY291bnQgKiBwcm4gLyBQUk5fTU9EVUxPKSAqIHNxcnRpKHBybikgLyBzcXJ0aShQUk5fTU9EVUxPKTsKKworCWN1ciA9IGxpc3Q7CisJcHJldmlvdXMgPSBOVUxMOworCisJZm9yIChpID0gMDsgY3VyOyBjdXIgPSBjdXItPm5leHQsIGkrKykgeworCQlpZiAoaSA9PSBpbmRleCkgeworCQkJaWYgKCFvaWRlcSgmY3VyLT5pdGVtLT5vYmplY3Qub2lkLCBjdXJyZW50X2JhZF9vaWQpKQorCQkJCXJldHVybiBjdXI7CisJCQlpZiAocHJldmlvdXMpCisJCQkJcmV0dXJuIHByZXZpb3VzOworCQkJcmV0dXJuIGxpc3Q7CisJCX0KKwkJcHJldmlvdXMgPSBjdXI7CisJfQorCisJcmV0dXJuIGxpc3Q7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKm1hbmFnZWRfc2tpcHBlZChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsCisJCQkJCSAgIHN0cnVjdCBjb21taXRfbGlzdCAqKnRyaWVkKQoreworCWludCBjb3VudCwgc2tpcHBlZF9maXJzdDsKKworCSp0cmllZCA9IE5VTEw7CisKKwlpZiAoIXNraXBwZWRfcmV2cy5ucikKKwkJcmV0dXJuIGxpc3Q7CisKKwlsaXN0ID0gZmlsdGVyX3NraXBwZWQobGlzdCwgdHJpZWQsIDAsICZjb3VudCwgJnNraXBwZWRfZmlyc3QpOworCisJaWYgKCFza2lwcGVkX2ZpcnN0KQorCQlyZXR1cm4gbGlzdDsKKworCXJldHVybiBza2lwX2F3YXkobGlzdCwgY291bnQpOworfQorCitzdGF0aWMgdm9pZCBiaXNlY3RfcmV2X3NldHVwKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgY29uc3QgY2hhciAqYmFkX2Zvcm1hdCwgY29uc3QgY2hhciAqZ29vZF9mb3JtYXQsCisJCQkgICAgIGludCByZWFkX3BhdGhzKQoreworCXN0cnVjdCBhcmd2X2FycmF5IHJldl9hcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCWludCBpOworCisJcmVwb19pbml0X3JldmlzaW9ucyhyLCByZXZzLCBwcmVmaXgpOworCXJldnMtPmFiYnJldiA9IDA7CisJcmV2cy0+Y29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX1VOU1BFQ0lGSUVEOworCisJLyogcmV2X2FyZ3YuYXJndlswXSB3aWxsIGJlIGlnbm9yZWQgYnkgc2V0dXBfcmV2aXNpb25zICovCisJYXJndl9hcnJheV9wdXNoKCZyZXZfYXJndiwgImJpc2VjdF9yZXZfc2V0dXAiKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZyZXZfYXJndiwgYmFkX2Zvcm1hdCwgb2lkX3RvX2hleChjdXJyZW50X2JhZF9vaWQpKTsKKwlmb3IgKGkgPSAwOyBpIDwgZ29vZF9yZXZzLm5yOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJnJldl9hcmd2LCBnb29kX2Zvcm1hdCwKKwkJCQkgb2lkX3RvX2hleChnb29kX3JldnMub2lkICsgaSkpOworCWFyZ3ZfYXJyYXlfcHVzaCgmcmV2X2FyZ3YsICItLSIpOworCWlmIChyZWFkX3BhdGhzKQorCQlyZWFkX2Jpc2VjdF9wYXRocygmcmV2X2FyZ3YpOworCisJc2V0dXBfcmV2aXNpb25zKHJldl9hcmd2LmFyZ2MsIHJldl9hcmd2LmFyZ3YsIHJldnMsIE5VTEwpOworCS8qIFhYWCBsZWFrIHJldl9hcmd2LCBhcyAicmV2cyIgbWF5IHN0aWxsIGJlIHBvaW50aW5nIHRvIGl0ICovCit9CisKK3N0YXRpYyB2b2lkIGJpc2VjdF9jb21tb24oc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsocmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwlpZiAocmV2cy0+dHJlZV9vYmplY3RzKQorCQltYXJrX2VkZ2VzX3VuaW50ZXJlc3RpbmcocmV2cywgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBlbnVtIGJpc2VjdF9lcnJvciBlcnJvcl9pZl9za2lwcGVkX2NvbW1pdHMoc3RydWN0IGNvbW1pdF9saXN0ICp0cmllZCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYmFkKQoreworCWlmICghdHJpZWQpCisJCXJldHVybiBCSVNFQ1RfT0s7CisKKwlwcmludGYoIlRoZXJlIGFyZSBvbmx5ICdza2lwJ3BlZCBjb21taXRzIGxlZnQgdG8gdGVzdC5cbiIKKwkgICAgICAgIlRoZSBmaXJzdCAlcyBjb21taXQgY291bGQgYmUgYW55IG9mOlxuIiwgdGVybV9iYWQpOworCisJZm9yICggOyB0cmllZDsgdHJpZWQgPSB0cmllZC0+bmV4dCkKKwkJcHJpbnRmKCIlc1xuIiwgb2lkX3RvX2hleCgmdHJpZWQtPml0ZW0tPm9iamVjdC5vaWQpKTsKKworCWlmIChiYWQpCisJCXByaW50ZigiJXNcbiIsIG9pZF90b19oZXgoYmFkKSk7CisJcHJpbnRmKF8oIldlIGNhbm5vdCBiaXNlY3QgbW9yZSFcbiIpKTsKKworCXJldHVybiBCSVNFQ1RfT05MWV9TS0lQUEVEX0xFRlQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfZXhwZWN0ZWRfcmV2KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoX2Jpc2VjdF9leHBlY3RlZF9yZXYoKTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3Qgc3RyYnVmIHN0ciA9IFNUUkJVRl9JTklUOworCUZJTEUgKmZwOworCWludCByZXMgPSAwOworCisJaWYgKHN0YXQoZmlsZW5hbWUsICZzdCkgfHwgIVNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCXJldHVybiAwOworCisJZnAgPSBmb3Blbl9vcl93YXJuKGZpbGVuYW1lLCAiciIpOworCWlmICghZnApCisJCXJldHVybiAwOworCisJaWYgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZzdHIsIGZwKSAhPSBFT0YpCisJCXJlcyA9ICFzdHJjbXAoc3RyLmJ1Ziwgb2lkX3RvX2hleChvaWQpKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzdHIpOworCWZjbG9zZShmcCk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgZW51bSBiaXNlY3RfZXJyb3IgYmlzZWN0X2NoZWNrb3V0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmJpc2VjdF9yZXYsIGludCBub19jaGVja291dCkKK3sKKwljaGFyIGJpc2VjdF9yZXZfaGV4W0dJVF9NQVhfSEVYU1ogKyAxXTsKKwllbnVtIGJpc2VjdF9lcnJvciByZXMgPSBCSVNFQ1RfT0s7CisKKwltZW1jcHkoYmlzZWN0X3Jldl9oZXgsIG9pZF90b19oZXgoYmlzZWN0X3JldiksIHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgMSk7CisJdXBkYXRlX3JlZihOVUxMLCAiQklTRUNUX0VYUEVDVEVEX1JFViIsIGJpc2VjdF9yZXYsIE5VTEwsIDAsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCisJYXJndl9jaGVja291dFsyXSA9IGJpc2VjdF9yZXZfaGV4OworCWlmIChub19jaGVja291dCkgeworCQl1cGRhdGVfcmVmKE5VTEwsICJCSVNFQ1RfSEVBRCIsIGJpc2VjdF9yZXYsIE5VTEwsIDAsCisJCQkgICBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKwl9IGVsc2UgeworCQlyZXMgPSBydW5fY29tbWFuZF92X29wdChhcmd2X2NoZWNrb3V0LCBSVU5fR0lUX0NNRCk7CisJCWlmIChyZXMpCisJCQkvKgorCQkJICogRXJyb3JzIGluIGBydW5fY29tbWFuZCgpYCBpdHNlbGYsIHNpZ25hbGVkIGJ5IHJlcyA8IDAsCisJCQkgKiBhbmQgZXJyb3JzIGluIHRoZSBjaGlsZCBwcm9jZXNzLCBzaWduYWxlZCBieSByZXMgPiAwCisJCQkgKiBjYW4gYm90aCBiZSB0cmVhdGVkIGFzIHJlZ3VsYXIgQklTRUNUX0ZBSUxVUkUgKC0xKS4KKwkJCSAqLworCQkJcmV0dXJuIC1hYnMocmVzKTsKKwl9CisKKwlhcmd2X3Nob3dfYnJhbmNoWzFdID0gYmlzZWN0X3Jldl9oZXg7CisJcmVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9zaG93X2JyYW5jaCwgUlVOX0dJVF9DTUQpOworCS8qCisJICogRXJyb3JzIGluIGBydW5fY29tbWFuZCgpYCBpdHNlbGYsIHNpZ25hbGVkIGJ5IHJlcyA8IDAsCisJICogYW5kIGVycm9ycyBpbiB0aGUgY2hpbGQgcHJvY2Vzcywgc2lnbmFsZWQgYnkgcmVzID4gMAorCSAqIGNhbiBib3RoIGJlIHRyZWF0ZWQgYXMgcmVndWxhciBCSVNFQ1RfRkFJTFVSRSAoLTEpLgorCSAqLworCXJldHVybiAtYWJzKHJlcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpnZXRfY29tbWl0X3JlZmVyZW5jZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBjb21taXQgKmMgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShyLCBvaWQpOworCWlmICghYykKKwkJZGllKF8oIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIiksIG9pZF90b19oZXgob2lkKSk7CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICoqZ2V0X2JhZF9hbmRfZ29vZF9jb21taXRzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkJaW50ICpyZXZfbnIpCit7CisJc3RydWN0IGNvbW1pdCAqKnJldjsKKwlpbnQgaSwgbiA9IDA7CisKKwlBTExPQ19BUlJBWShyZXYsIDEgKyBnb29kX3JldnMubnIpOworCXJldltuKytdID0gZ2V0X2NvbW1pdF9yZWZlcmVuY2UociwgY3VycmVudF9iYWRfb2lkKTsKKwlmb3IgKGkgPSAwOyBpIDwgZ29vZF9yZXZzLm5yOyBpKyspCisJCXJldltuKytdID0gZ2V0X2NvbW1pdF9yZWZlcmVuY2UociwgZ29vZF9yZXZzLm9pZCArIGkpOworCSpyZXZfbnIgPSBuOworCisJcmV0dXJuIHJldjsKK30KKworc3RhdGljIGVudW0gYmlzZWN0X2Vycm9yIGhhbmRsZV9iYWRfbWVyZ2VfYmFzZSh2b2lkKQoreworCWlmIChpc19leHBlY3RlZF9yZXYoY3VycmVudF9iYWRfb2lkKSkgeworCQljaGFyICpiYWRfaGV4ID0gb2lkX3RvX2hleChjdXJyZW50X2JhZF9vaWQpOworCQljaGFyICpnb29kX2hleCA9IGpvaW5fb2lkX2FycmF5X2hleCgmZ29vZF9yZXZzLCAnICcpOworCQlpZiAoIXN0cmNtcCh0ZXJtX2JhZCwgImJhZCIpICYmICFzdHJjbXAodGVybV9nb29kLCAiZ29vZCIpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorCQkJCSJUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgIgorCQkJCSJiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIiksCisJCQkJYmFkX2hleCwgYmFkX2hleCwgZ29vZF9oZXgpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAodGVybV9iYWQsICJuZXciKSAmJiAhc3RyY21wKHRlcm1fZ29vZCwgIm9sZCIpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiVGhlIG1lcmdlIGJhc2UgJXMgaXMgbmV3LlxuIgorCQkJCSJUaGUgcHJvcGVydHkgaGFzIGNoYW5nZWQgIgorCQkJCSJiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIiksCisJCQkJYmFkX2hleCwgYmFkX2hleCwgZ29vZF9oZXgpOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIlRoZSBtZXJnZSBiYXNlICVzIGlzICVzLlxuIgorCQkJCSJUaGlzIG1lYW5zIHRoZSBmaXJzdCAnJXMnIGNvbW1pdCBpcyAiCisJCQkJImJldHdlZW4gJXMgYW5kIFslc10uXG4iKSwKKwkJCQliYWRfaGV4LCB0ZXJtX2JhZCwgdGVybV9nb29kLCBiYWRfaGV4LCBnb29kX2hleCk7CisJCX0KKwkJcmV0dXJuIEJJU0VDVF9NRVJHRV9CQVNFX0NIRUNLOworCX0KKworCWZwcmludGYoc3RkZXJyLCBfKCJTb21lICVzIHJldnMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlICVzIHJldi5cbiIKKwkJImdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLlxuIgorCQkiTWF5YmUgeW91IG1pc3Rvb2sgJXMgYW5kICVzIHJldnM/XG4iKSwKKwkJdGVybV9nb29kLCB0ZXJtX2JhZCwgdGVybV9nb29kLCB0ZXJtX2JhZCk7CisJcmV0dXJuIEJJU0VDVF9GQUlMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9za2lwcGVkX21lcmdlX2Jhc2UoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbWIpCit7CisJY2hhciAqbWJfaGV4ID0gb2lkX3RvX2hleChtYik7CisJY2hhciAqYmFkX2hleCA9IG9pZF90b19oZXgoY3VycmVudF9iYWRfb2lkKTsKKwljaGFyICpnb29kX2hleCA9IGpvaW5fb2lkX2FycmF5X2hleCgmZ29vZF9yZXZzLCAnICcpOworCisJd2FybmluZyhfKCJ0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdICIKKwkJIm11c3QgYmUgc2tpcHBlZC5cbiIKKwkJIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCAlcyBjb21taXQgaXMgIgorCQkiYmV0d2VlbiAlcyBhbmQgJXMuXG4iCisJCSJXZSBjb250aW51ZSBhbnl3YXkuIiksCisJCWJhZF9oZXgsIGdvb2RfaGV4LCB0ZXJtX2JhZCwgbWJfaGV4LCBiYWRfaGV4KTsKKwlmcmVlKGdvb2RfaGV4KTsKK30KKworLyoKKyAqICJjaGVja19tZXJnZV9iYXNlcyIgY2hlY2tzIHRoYXQgbWVyZ2UgYmFzZXMgYXJlIG5vdCAiYmFkIiAob3IgIm5ldyIpLgorICoKKyAqIC0gSWYgb25lIGlzICJiYWQiIChvciAibmV3IiksIGl0IG1lYW5zIHRoZSB1c2VyIGFzc3VtZWQgc29tZXRoaW5nIHdyb25nCisgKiBhbmQgd2UgbXVzdCByZXR1cm4gZXJyb3Igd2l0aCBhIG5vbiAwIGVycm9yIGNvZGUuCisgKiAtIElmIG9uZSBpcyAiZ29vZCIgKG9yICJvbGQiKSwgdGhhdCdzIGdvb2QsIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAqIC0gSWYgb25lIGlzICJza2lwcGVkIiwgd2UgY2FuJ3Qga25vdyBidXQgd2Ugc2hvdWxkIHdhcm4uCisgKiAtIElmIHdlIGRvbid0IGtub3csIHdlIHNob3VsZCBjaGVjayBpdCBvdXQgYW5kIGFzayB0aGUgdXNlciB0byB0ZXN0LgorICogLSBJZiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQsIG9uIHN1Y2Nlc3MgcmV0dXJuCisgKiBCSVNFQ1RfSU5URVJOQUxfU1VDQ0VTU19NRVJHRV9CQVNFICgtMTEpIGEgc3BlY2lhbCBjb25kaXRpb24KKyAqIGZvciBlYXJseSBzdWNjZXNzLCB0aGlzIHdpbGwgYmUgY29udmVydGVkIGJhY2sgdG8gMCBpbgorICogY2hlY2tfZ29vZF9hcmVfYW5jZXN0b3JzX29mX2JhZCgpLgorICovCitzdGF0aWMgZW51bSBiaXNlY3RfZXJyb3IgY2hlY2tfbWVyZ2VfYmFzZXMoaW50IHJldl9uciwgc3RydWN0IGNvbW1pdCAqKnJldiwgaW50IG5vX2NoZWNrb3V0KQoreworCWVudW0gYmlzZWN0X2Vycm9yIHJlcyA9IEJJU0VDVF9PSzsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdDsKKworCXJlc3VsdCA9IGdldF9tZXJnZV9iYXNlc19tYW55KHJldlswXSwgcmV2X25yIC0gMSwgcmV2ICsgMSk7CisKKwlmb3IgKDsgcmVzdWx0OyByZXN1bHQgPSByZXN1bHQtPm5leHQpIHsKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbWIgPSAmcmVzdWx0LT5pdGVtLT5vYmplY3Qub2lkOworCQlpZiAob2lkZXEobWIsIGN1cnJlbnRfYmFkX29pZCkpIHsKKwkJCXJlcyA9IGhhbmRsZV9iYWRfbWVyZ2VfYmFzZSgpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoMCA8PSBvaWRfYXJyYXlfbG9va3VwKCZnb29kX3JldnMsIG1iKSkgeworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoMCA8PSBvaWRfYXJyYXlfbG9va3VwKCZza2lwcGVkX3JldnMsIG1iKSkgeworCQkJaGFuZGxlX3NraXBwZWRfbWVyZ2VfYmFzZShtYik7CisJCX0gZWxzZSB7CisJCQlwcmludGYoXygiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIpKTsKKwkJCXJlcyA9IGJpc2VjdF9jaGVja291dChtYiwgbm9fY2hlY2tvdXQpOworCQkJaWYgKCFyZXMpCisJCQkJLyogaW5kaWNhdGUgZWFybHkgc3VjY2VzcyAqLworCQkJCXJlcyA9IEJJU0VDVF9JTlRFUk5BTF9TVUNDRVNTX01FUkdFX0JBU0U7CisJCQlicmVhazsKKwkJfQorCX0KKworCWZyZWVfY29tbWl0X2xpc3QocmVzdWx0KTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGNoZWNrX2FuY2VzdG9ycyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgaW50IHJldl9uciwKKwkJCSAgIHN0cnVjdCBjb21taXQgKipyZXYsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlpbnQgcmVzOworCisJYmlzZWN0X3Jldl9zZXR1cChyLCAmcmV2cywgcHJlZml4LCAiXiVzIiwgIiVzIiwgMCk7CisKKwliaXNlY3RfY29tbW9uKCZyZXZzKTsKKwlyZXMgPSAocmV2cy5jb21taXRzICE9IE5VTEwpOworCisJLyogQ2xlYW4gdXAgb2JqZWN0cyB1c2VkLCBhcyB0aGV5IHdpbGwgYmUgcmV1c2VkLiAqLworCWNsZWFyX2NvbW1pdF9tYXJrc19tYW55KHJldl9uciwgcmV2LCBBTExfUkVWX0ZMQUdTKTsKKworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiAiY2hlY2tfZ29vZF9hcmVfYW5jZXN0b3JzX29mX2JhZCIgY2hlY2tzIHRoYXQgYWxsICJnb29kIiByZXZzIGFyZQorICogYW5jZXN0b3Igb2YgdGhlICJiYWQiIHJldi4KKyAqCisgKiBJZiB0aGF0J3Mgbm90IHRoZSBjYXNlLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBtZXJnZSBiYXNlcy4KKyAqIElmIGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCBieSB0aGUgdXNlciwgaXRzIHNvdXJjZSBjb2RlIHdpbGwgYmUKKyAqIGNoZWNrZWQgb3V0IHRvIGJlIHRlc3RlZCBieSB0aGUgdXNlciBhbmQgd2Ugd2lsbCByZXR1cm4uCisgKi8KKworc3RhdGljIGVudW0gYmlzZWN0X2Vycm9yIGNoZWNrX2dvb2RfYXJlX2FuY2VzdG9yc19vZl9iYWQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCSAgICBpbnQgbm9fY2hlY2tvdXQpCit7CisJY2hhciAqZmlsZW5hbWU7CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IGZkLCByZXZfbnI7CisJZW51bSBiaXNlY3RfZXJyb3IgcmVzID0gQklTRUNUX09LOworCXN0cnVjdCBjb21taXQgKipyZXY7CisKKwlpZiAoIWN1cnJlbnRfYmFkX29pZCkKKwkJcmV0dXJuIGVycm9yKF8oImEgJXMgcmV2aXNpb24gaXMgbmVlZGVkIiksIHRlcm1fYmFkKTsKKworCWZpbGVuYW1lID0gZ2l0X3BhdGhkdXAoIkJJU0VDVF9BTkNFU1RPUlNfT0siKTsKKworCS8qIENoZWNrIGlmIGZpbGUgQklTRUNUX0FOQ0VTVE9SU19PSyBleGlzdHMuICovCisJaWYgKCFzdGF0KGZpbGVuYW1lLCAmc3QpICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCWdvdG8gZG9uZTsKKworCS8qIEJpc2VjdGluZyB3aXRoIG5vIGdvb2QgcmV2IGlzIG9rLiAqLworCWlmICghZ29vZF9yZXZzLm5yKQorCQlnb3RvIGRvbmU7CisKKwkvKiBDaGVjayBpZiBhbGwgZ29vZCByZXZzIGFyZSBhbmNlc3RvciBvZiB0aGUgYmFkIHJldi4gKi8KKworCXJldiA9IGdldF9iYWRfYW5kX2dvb2RfY29tbWl0cyhyLCAmcmV2X25yKTsKKwlpZiAoY2hlY2tfYW5jZXN0b3JzKHIsIHJldl9uciwgcmV2LCBwcmVmaXgpKQorCQlyZXMgPSBjaGVja19tZXJnZV9iYXNlcyhyZXZfbnIsIHJldiwgbm9fY2hlY2tvdXQpOworCWZyZWUocmV2KTsKKworCWlmICghcmVzKSB7CisJCS8qIENyZWF0ZSBmaWxlIEJJU0VDVF9BTkNFU1RPUlNfT0suICovCisJCWZkID0gb3BlbihmaWxlbmFtZSwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSwgMDYwMCk7CisJCWlmIChmZCA8IDApCisJCQkvKgorCQkJICogQklTRUNUX0FOQ0VTVE9SU19PSyBmaWxlIGlzIG5vdCBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSwKKwkJCSAqIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlIGF0IHRoZSBuZXh0CisJCQkgKiBiaXNlY3Rpb24gc3RlcC4KKwkJCSAqIFNvLCBqdXN0IHNpZ25hbCB3aXRoIGEgd2FybmluZyB0aGF0IHNvbWV0aGluZworCQkJICogbWlnaHQgYmUgd3JvbmcuCisJCQkgKi8KKwkJCXdhcm5pbmdfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciKSwKKwkJCQlmaWxlbmFtZSk7CisJCWVsc2UKKwkJCWNsb3NlKGZkKTsKKwl9CisgZG9uZToKKwlmcmVlKGZpbGVuYW1lKTsKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogVGhpcyBkb2VzICJnaXQgZGlmZi10cmVlIC0tcHJldHR5IENPTU1JVCIgd2l0aG91dCBvbmUgZm9yaytleGVjLgorICovCitzdGF0aWMgdm9pZCBzaG93X2RpZmZfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwljb25zdCBjaGFyICphcmd2W10gPSB7CisJCSJkaWZmLXRyZWUiLCAiLS1wcmV0dHkiLCAiLS1zdGF0IiwgIi0tc3VtbWFyeSIsICItLWNjIiwgTlVMTAorCX07CisJc3RydWN0IHJldl9pbmZvIG9wdDsKKworCWdpdF9jb25maWcoZ2l0X2RpZmZfdWlfY29uZmlnLCBOVUxMKTsKKwlyZXBvX2luaXRfcmV2aXNpb25zKHIsICZvcHQsIHByZWZpeCk7CisKKwlzZXR1cF9yZXZpc2lvbnMoQVJSQVlfU0laRShhcmd2KSAtIDEsIGFyZ3YsICZvcHQsIE5VTEwpOworCWxvZ190cmVlX2NvbW1pdCgmb3B0LCBjb21taXQpOworfQorCisvKgorICogVGhlIHRlcm1zIHVzZWQgZm9yIHRoaXMgYmlzZWN0IHNlc3Npb24gYXJlIHN0b3JlZCBpbiBCSVNFQ1RfVEVSTVMuCisgKiBXZSByZWFkIHRoZW0gYW5kIHN0b3JlIHRoZW0gdG8gYWRhcHQgdGhlIG1lc3NhZ2VzIGFjY29yZGluZ2x5LgorICogRGVmYXVsdCBpcyBiYWQvZ29vZC4KKyAqLwordm9pZCByZWFkX2Jpc2VjdF90ZXJtcyhjb25zdCBjaGFyICoqcmVhZF9iYWQsIGNvbnN0IGNoYXIgKipyZWFkX2dvb2QpCit7CisJc3RydWN0IHN0cmJ1ZiBzdHIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoX2Jpc2VjdF90ZXJtcygpOworCUZJTEUgKmZwID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisKKwlpZiAoIWZwKSB7CisJCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKKwkJCSpyZWFkX2JhZCA9ICJiYWQiOworCQkJKnJlYWRfZ29vZCA9ICJnb29kIjsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciKSwgZmlsZW5hbWUpOworCQl9CisJfSBlbHNlIHsKKwkJc3RyYnVmX2dldGxpbmVfbGYoJnN0ciwgZnApOworCQkqcmVhZF9iYWQgPSBzdHJidWZfZGV0YWNoKCZzdHIsIE5VTEwpOworCQlzdHJidWZfZ2V0bGluZV9sZigmc3RyLCBmcCk7CisJCSpyZWFkX2dvb2QgPSBzdHJidWZfZGV0YWNoKCZzdHIsIE5VTEwpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc3RyKTsKKwlmY2xvc2UoZnApOworfQorCisvKgorICogV2UgdXNlIHRoZSBjb252ZW50aW9uIHRoYXQgcmV0dXJuIEJJU0VDVF9JTlRFUk5BTF9TVUNDRVNTXzFTVF9CQURfRk9VTkQgKC0xMCkgbWVhbnMKKyAqIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuCisgKiBJbiB0aGlzIGNhc2UgdGhlIGNhbGxpbmcgZnVuY3Rpb24gb3IgY29tbWFuZCBzaG91bGQgbm90IHR1cm4gYQorICogQklTRUNUX0lOVEVSTkFMX1NVQ0NFU1NfMVNUX0JBRF9GT1VORCByZXR1cm4gY29kZSBpbnRvIGFuIGVycm9yIG9yIGEgbm9uIHplcm8gZXhpdCBjb2RlLgorICogSWYgbm9fY2hlY2tvdXQgaXMgbm9uLXplcm8sIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyBkb2VzIG5vdAorICogY2hlY2tvdXQgdGhlIHRyaWFsIGNvbW1pdCBidXQgaW5zdGVhZCBzaW1wbHkgdXBkYXRlcyBCSVNFQ1RfSEVBRC4KKyAqLworZW51bSBiaXNlY3RfZXJyb3IgYmlzZWN0X25leHRfYWxsKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpwcmVmaXgsIGludCBub19jaGVja291dCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnRyaWVkOworCWludCByZWFjaGVzID0gMCwgYWxsID0gMCwgbnIsIHN0ZXBzOworCWVudW0gYmlzZWN0X2Vycm9yIHJlcyA9IEJJU0VDVF9PSzsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpiaXNlY3RfcmV2OworCWNoYXIgKnN0ZXBzX21zZzsKKworCXJlYWRfYmlzZWN0X3Rlcm1zKCZ0ZXJtX2JhZCwgJnRlcm1fZ29vZCk7CisJaWYgKHJlYWRfYmlzZWN0X3JlZnMoKSkKKwkJZGllKF8oInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIikpOworCisJcmVzID0gY2hlY2tfZ29vZF9hcmVfYW5jZXN0b3JzX29mX2JhZChyLCBwcmVmaXgsIG5vX2NoZWNrb3V0KTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJYmlzZWN0X3Jldl9zZXR1cChyLCAmcmV2cywgcHJlZml4LCAiJXMiLCAiXiVzIiwgMSk7CisJcmV2cy5saW1pdGVkID0gMTsKKworCWJpc2VjdF9jb21tb24oJnJldnMpOworCisJZmluZF9iaXNlY3Rpb24oJnJldnMuY29tbWl0cywgJnJlYWNoZXMsICZhbGwsICEhc2tpcHBlZF9yZXZzLm5yKTsKKwlyZXZzLmNvbW1pdHMgPSBtYW5hZ2VkX3NraXBwZWQocmV2cy5jb21taXRzLCAmdHJpZWQpOworCisJaWYgKCFyZXZzLmNvbW1pdHMpIHsKKwkJLyoKKwkJICogV2Ugc2hvdWxkIHJldHVybiBlcnJvciBoZXJlIG9ubHkgaWYgdGhlICJiYWQiCisJCSAqIGNvbW1pdCBpcyBhbHNvIGEgInNraXAiIGNvbW1pdC4KKwkJICovCisJCXJlcyA9IGVycm9yX2lmX3NraXBwZWRfY29tbWl0cyh0cmllZCwgTlVMTCk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwkJcHJpbnRmKF8oIiVzIHdhcyBib3RoICVzIGFuZCAlc1xuIiksCisJCSAgICAgICBvaWRfdG9faGV4KGN1cnJlbnRfYmFkX29pZCksCisJCSAgICAgICB0ZXJtX2dvb2QsCisJCSAgICAgICB0ZXJtX2JhZCk7CisKKwkJcmV0dXJuIEJJU0VDVF9GQUlMRUQ7CisJfQorCisJaWYgKCFhbGwpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKwkJCSJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iKSk7CisKKwkJcmV0dXJuIEJJU0VDVF9OT19URVNUQUJMRV9DT01NSVQ7CisJfQorCisJYmlzZWN0X3JldiA9ICZyZXZzLmNvbW1pdHMtPml0ZW0tPm9iamVjdC5vaWQ7CisKKwlpZiAob2lkZXEoYmlzZWN0X3JldiwgY3VycmVudF9iYWRfb2lkKSkgeworCQlyZXMgPSBlcnJvcl9pZl9za2lwcGVkX2NvbW1pdHModHJpZWQsIGN1cnJlbnRfYmFkX29pZCk7CisJCWlmIChyZXMpCisJCQlyZXR1cm4gcmVzOworCQlwcmludGYoIiVzIGlzIHRoZSBmaXJzdCAlcyBjb21taXRcbiIsIG9pZF90b19oZXgoYmlzZWN0X3JldiksCisJCQl0ZXJtX2JhZCk7CisKKwkJc2hvd19kaWZmX3RyZWUociwgcHJlZml4LCByZXZzLmNvbW1pdHMtPml0ZW0pOworCQkvKgorCQkgKiBUaGlzIG1lYW5zIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyBzdWNjZWVkZWQuCisJCSAqIFVzaW5nIEJJU0VDVF9JTlRFUk5BTF9TVUNDRVNTXzFTVF9CQURfRk9VTkQgKC0xMCkKKwkJICogc28gdGhhdCB0aGUgY2FsbCBjaGFpbiBjYW4gc2ltcGx5IGNoZWNrCisJCSAqIGZvciBuZWdhdGl2ZSByZXR1cm4gdmFsdWVzIGZvciBlYXJseSByZXR1cm5zIHVwCisJCSAqIHVudGlsIHRoZSBjbWRfYmlzZWN0X19oZWxwZXIoKSBjYWxsZXIuCisJCSAqLworCQlyZXR1cm4gQklTRUNUX0lOVEVSTkFMX1NVQ0NFU1NfMVNUX0JBRF9GT1VORDsKKwl9CisKKwluciA9IGFsbCAtIHJlYWNoZXMgLSAxOworCXN0ZXBzID0gZXN0aW1hdGVfYmlzZWN0X3N0ZXBzKGFsbCk7CisKKwlzdGVwc19tc2cgPSB4c3RyZm10KFFfKCIocm91Z2hseSAlZCBzdGVwKSIsICIocm91Z2hseSAlZCBzdGVwcykiLAorCQkgIHN0ZXBzKSwgc3RlcHMpOworCS8qCisJICogVFJBTlNMQVRPUlM6IHRoZSBsYXN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCAiKHJvdWdobHkgJWQKKwkgKiBzdGVwcykiIHRyYW5zbGF0aW9uLgorCSAqLworCXByaW50ZihRXygiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIiwKKwkJICAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIsCisJCSAgbnIpLCBuciwgc3RlcHNfbXNnKTsKKwlmcmVlKHN0ZXBzX21zZyk7CisKKwlyZXR1cm4gYmlzZWN0X2NoZWNrb3V0KGJpc2VjdF9yZXYsIG5vX2NoZWNrb3V0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9nMmkoaW50IG4pCit7CisJaW50IGxvZzIgPSAwOworCisJZm9yICg7IG4gPiAxOyBuID4+PSAxKQorCQlsb2cyKys7CisKKwlyZXR1cm4gbG9nMjsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXhwMmkoaW50IG4pCit7CisJcmV0dXJuIDEgPDwgbjsKK30KKworLyoKKyAqIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgYmlzZWN0IHN0ZXBzIGxlZnQgKGFmdGVyIHRoZSBjdXJyZW50IHN0ZXApCisgKgorICogRm9yIGFueSB4IGJldHdlZW4gMCBpbmNsdWRlZCBhbmQgMl5uIGV4Y2x1ZGVkLCB0aGUgcHJvYmFiaWxpdHkgZm9yCisgKiBuIC0gMSBzdGVwcyBsZWZ0IGxvb2tzIGxpa2U6CisgKgorICogUCgyXm4gKyB4KSA9PSAoMl5uIC0geCkgLyAoMl5uICsgeCkKKyAqCisgKiBhbmQgUCgyXm4gKyB4KSA8IDAuNSBtZWFucyAyXm4gPCAzeAorICovCitpbnQgZXN0aW1hdGVfYmlzZWN0X3N0ZXBzKGludCBhbGwpCit7CisJaW50IG4sIHgsIGU7CisKKwlpZiAoYWxsIDwgMykKKwkJcmV0dXJuIDA7CisKKwluID0gbG9nMmkoYWxsKTsKKwllID0gZXhwMmkobik7CisJeCA9IGFsbCAtIGU7CisKKwlyZXR1cm4gKGUgPCAzICogeCkgPyBuIDogbiAtIDE7Cit9CisKK3N0YXRpYyBpbnQgbWFya19mb3JfcmVtb3ZhbChjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpyZWZzID0gY2JfZGF0YTsKKwljaGFyICpyZWYgPSB4c3RyZm10KCJyZWZzL2Jpc2VjdCVzIiwgcmVmbmFtZSk7CisJc3RyaW5nX2xpc3RfYXBwZW5kKHJlZnMsIHJlZik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBiaXNlY3RfY2xlYW5fc3RhdGUodm9pZCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCS8qIFRoZXJlIG1heSBiZSBzb21lIHJlZnMgcGFja2VkIGR1cmluZyBiaXNlY3Rpb24gKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVmc19mb3JfcmVtb3ZhbCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJZm9yX2VhY2hfcmVmX2luKCJyZWZzL2Jpc2VjdCIsIG1hcmtfZm9yX3JlbW92YWwsICh2b2lkICopICZyZWZzX2Zvcl9yZW1vdmFsKTsKKwlzdHJpbmdfbGlzdF9hcHBlbmQoJnJlZnNfZm9yX3JlbW92YWwsIHhzdHJkdXAoIkJJU0VDVF9IRUFEIikpOworCXJlc3VsdCA9IGRlbGV0ZV9yZWZzKCJiaXNlY3Q6IHJlbW92ZSIsICZyZWZzX2Zvcl9yZW1vdmFsLCBSRUZfTk9fREVSRUYpOworCXJlZnNfZm9yX3JlbW92YWwuc3RyZHVwX3N0cmluZ3MgPSAxOworCXN0cmluZ19saXN0X2NsZWFyKCZyZWZzX2Zvcl9yZW1vdmFsLCAwKTsKKwl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aF9iaXNlY3RfZXhwZWN0ZWRfcmV2KCkpOworCXVubGlua19vcl93YXJuKGdpdF9wYXRoX2Jpc2VjdF9hbmNlc3RvcnNfb2soKSk7CisJdW5saW5rX29yX3dhcm4oZ2l0X3BhdGhfYmlzZWN0X2xvZygpKTsKKwl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aF9iaXNlY3RfbmFtZXMoKSk7CisJdW5saW5rX29yX3dhcm4oZ2l0X3BhdGhfYmlzZWN0X3J1bigpKTsKKwl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aF9iaXNlY3RfdGVybXMoKSk7CisJLyogQ2xlYW51cCBoZWFkLW5hbWUgaWYgaXQgZ290IGxlZnQgYnkgYW4gb2xkIHZlcnNpb24gb2YgZ2l0LWJpc2VjdCAqLworCXVubGlua19vcl93YXJuKGdpdF9wYXRoX2hlYWRfbmFtZSgpKTsKKwkvKgorCSAqIENsZWFudXAgQklTRUNUX1NUQVJUIGxhc3QgdG8gc3VwcG9ydCB0aGUgLS1uby1jaGVja291dCBvcHRpb24KKwkgKiBpbnRyb2R1Y2VkIGluIHRoZSBjb21taXQgNDc5NmU4MjNhLgorCSAqLworCXVubGlua19vcl93YXJuKGdpdF9wYXRoX2Jpc2VjdF9zdGFydCgpKTsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9iaXNlY3QuaCBiL2Jpc2VjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYWQ4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXNlY3QuaApAQCAtMCwwICsxLDcxIEBACisjaWZuZGVmIEJJU0VDVF9ICisjZGVmaW5lIEJJU0VDVF9ICisKK3N0cnVjdCBjb21taXRfbGlzdDsKK3N0cnVjdCByZXBvc2l0b3J5OworCisvKgorICogRmluZCBiaXNlY3Rpb24uIElmIHNvbWV0aGluZyBpcyBmb3VuZCwgYHJlYWNoZXNgIHdpbGwgYmUgdGhlIG51bWJlciBvZgorICogY29tbWl0cyB0aGF0IHRoZSBiZXN0IGNvbW1pdCByZWFjaGVzLiBgYWxsYCB3aWxsIGJlIHRoZSBjb3VudCBvZgorICogbm9uLVNBTUVUUkVFIGNvbW1pdHMuIElmIG5vdGhpbmcgaXMgZm91bmQsIGBsaXN0YCB3aWxsIGJlIE5VTEwuCisgKiBPdGhlcndpc2UsIGl0IHdpbGwgYmUgZWl0aGVyIGFsbCBub24tU0FNRVRSRUUgY29tbWl0cyBvciB0aGUgc2luZ2xlCisgKiBiZXN0IGNvbW1pdCwgYXMgY2hvc2VuIGJ5IGBmaW5kX2FsbGAuCisgKi8KK3ZvaWQgZmluZF9iaXNlY3Rpb24oc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCwgaW50ICpyZWFjaGVzLCBpbnQgKmFsbCwKKwkJICAgIGludCBmaW5kX2FsbCk7CisKK3N0cnVjdCBjb21taXRfbGlzdCAqZmlsdGVyX3NraXBwZWQoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJCSAgIHN0cnVjdCBjb21taXRfbGlzdCAqKnRyaWVkLAorCQkJCSAgIGludCBzaG93X2FsbCwKKwkJCQkgICBpbnQgKmNvdW50LAorCQkJCSAgIGludCAqc2tpcHBlZF9maXJzdCk7CisKKyNkZWZpbmUgQklTRUNUX1NIT1dfQUxMCQkoMTw8MCkKKyNkZWZpbmUgUkVWX0xJU1RfUVVJRVQJCSgxPDwxKQorCitzdHJ1Y3QgcmV2X2xpc3RfaW5mbyB7CisJc3RydWN0IHJldl9pbmZvICpyZXZzOworCWludCBmbGFnczsKKwlpbnQgc2hvd190aW1lc3RhbXA7CisJaW50IGhkcl90ZXJtaW5hdGlvbjsKKwljb25zdCBjaGFyICpoZWFkZXJfcHJlZml4OworfTsKKworLyoKKyAqIGVudW0gYmlzZWN0X2Vycm9yIHJlcHJlc2VudHMgdGhlIGZvbGxvd2luZyByZXR1cm4gY29kZXM6CisgKiBCSVNFQ1RfT0s6IHN1Y2Nlc3MgY29kZS4gSW50ZXJuYWxseSwgaXQgbWVhbnMgdGhhdCBuZXh0CisgKiBjb21taXQgaGFzIGJlZW4gZm91bmQgKGFuZCBwb3NzaWJseSBjaGVja2VkIG91dCkgYW5kIGl0CisgKiBzaG91bGQgYmUgdGVzdGVkLgorICogQklTRUNUX0ZBSUxFRCBlcnJvciBjb2RlOiBkZWZhdWx0IGVycm9yIGNvZGUuCisgKiBCSVNFQ1RfT05MWV9TS0lQUEVEX0xFRlQgZXJyb3IgY29kZTogb25seSBza2lwcGVkCisgKiBjb21taXRzIGxlZnQgdG8gYmUgdGVzdGVkLgorICogQklTRUNUX01FUkdFX0JBU0VfQ0hFQ0sgZXJyb3IgY29kZTogbWVyZ2UgYmFzZSBjaGVjayBmYWlsZWQuCisgKiBCSVNFQ1RfTk9fVEVTVEFCTEVfQ09NTUlUIGVycm9yIGNvZGU6IG5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC4KKyAqIEJJU0VDVF9JTlRFUk5BTF9TVUNDRVNTXzFTVF9CQURfRk9VTkQgZWFybHkgc3VjY2VzcyBjb2RlOgorICogZmlyc3QgdGVybV9iYWQgY29tbWl0IGZvdW5kLgorICogQklTRUNUX0lOVEVSTkFMX1NVQ0NFU1NfTUVSR0VfQkFTRSBlYXJseSBzdWNjZXNzCisgKiBjb2RlOiBmb3VuZCBtZXJnZSBiYXNlIHRoYXQgc2hvdWxkIGJlIHRlc3RlZC4KKyAqIEVhcmx5IHN1Y2Nlc3MgY29kZXMgQklTRUNUX0lOVEVSTkFMX1NVQ0NFU1NfMVNUX0JBRF9GT1VORCBhbmQKKyAqIEJJU0VDVF9JTlRFUk5BTF9TVUNDRVNTX01FUkdFX0JBU0Ugc2hvdWxkIGJlIG9ubHkgaW50ZXJuYWwgY29kZXMuCisgKi8KK2VudW0gYmlzZWN0X2Vycm9yIHsKKwlCSVNFQ1RfT0sgPSAwLAorCUJJU0VDVF9GQUlMRUQgPSAtMSwKKwlCSVNFQ1RfT05MWV9TS0lQUEVEX0xFRlQgPSAtMiwKKwlCSVNFQ1RfTUVSR0VfQkFTRV9DSEVDSyA9IC0zLAorCUJJU0VDVF9OT19URVNUQUJMRV9DT01NSVQgPSAtNCwKKwlCSVNFQ1RfSU5URVJOQUxfU1VDQ0VTU18xU1RfQkFEX0ZPVU5EID0gLTEwLAorCUJJU0VDVF9JTlRFUk5BTF9TVUNDRVNTX01FUkdFX0JBU0UgPSAtMTEKK307CisKK2VudW0gYmlzZWN0X2Vycm9yIGJpc2VjdF9uZXh0X2FsbChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICAgIGludCBub19jaGVja291dCk7CisKK2ludCBlc3RpbWF0ZV9iaXNlY3Rfc3RlcHMoaW50IGFsbCk7CisKK3ZvaWQgcmVhZF9iaXNlY3RfdGVybXMoY29uc3QgY2hhciAqKmJhZCwgY29uc3QgY2hhciAqKmdvb2QpOworCitpbnQgYmlzZWN0X2NsZWFuX3N0YXRlKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2JsYW1lLmMgYi9ibGFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhN2UyODgKLS0tIC9kZXYvbnVsbAorKysgYi9ibGFtZS5jCkBAIC0wLDAgKzEsMjkzMCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJtZXJnZXNvcnQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJibGFtZS5oIgorI2luY2x1ZGUgImFsbG9jLmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKyNpbmNsdWRlICJibG9vbS5oIgorI2luY2x1ZGUgImNvbW1pdC1ncmFwaC5oIgorCitkZWZpbmVfY29tbWl0X3NsYWIoYmxhbWVfc3VzcGVjdHMsIHN0cnVjdCBibGFtZV9vcmlnaW4gKik7CitzdGF0aWMgc3RydWN0IGJsYW1lX3N1c3BlY3RzIGJsYW1lX3N1c3BlY3RzOworCitzdHJ1Y3QgYmxhbWVfb3JpZ2luICpnZXRfYmxhbWVfc3VzcGVjdHMoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBibGFtZV9vcmlnaW4gKipyZXN1bHQ7CisKKwlyZXN1bHQgPSBibGFtZV9zdXNwZWN0c19wZWVrKCZibGFtZV9zdXNwZWN0cywgY29tbWl0KTsKKworCXJldHVybiByZXN1bHQgPyAqcmVzdWx0IDogTlVMTDsKK30KKworc3RhdGljIHZvaWQgc2V0X2JsYW1lX3N1c3BlY3RzKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGJsYW1lX29yaWdpbiAqb3JpZ2luKQoreworCSpibGFtZV9zdXNwZWN0c19hdCgmYmxhbWVfc3VzcGVjdHMsIGNvbW1pdCkgPSBvcmlnaW47Cit9CisKK3ZvaWQgYmxhbWVfb3JpZ2luX2RlY3JlZihzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvKQoreworCWlmIChvICYmIC0tby0+cmVmY250IDw9IDApIHsKKwkJc3RydWN0IGJsYW1lX29yaWdpbiAqcCwgKmwgPSBOVUxMOworCQlpZiAoby0+cHJldmlvdXMpCisJCQlibGFtZV9vcmlnaW5fZGVjcmVmKG8tPnByZXZpb3VzKTsKKwkJZnJlZShvLT5maWxlLnB0cik7CisJCS8qIFNob3VsZCBiZSBwcmVzZW50IGV4YWN0bHkgb25jZSBpbiBjb21taXQgY2hhaW4gKi8KKwkJZm9yIChwID0gZ2V0X2JsYW1lX3N1c3BlY3RzKG8tPmNvbW1pdCk7IHA7IGwgPSBwLCBwID0gcC0+bmV4dCkgeworCQkJaWYgKHAgPT0gbykgeworCQkJCWlmIChsKQorCQkJCQlsLT5uZXh0ID0gcC0+bmV4dDsKKwkJCQllbHNlCisJCQkJCXNldF9ibGFtZV9zdXNwZWN0cyhvLT5jb21taXQsIHAtPm5leHQpOworCQkJCWZyZWUobyk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCWRpZSgiaW50ZXJuYWwgZXJyb3IgaW4gYmxhbWVfb3JpZ2luX2RlY3JlZiIpOworCX0KK30KKworLyoKKyAqIEdpdmVuIGEgY29tbWl0IGFuZCBhIHBhdGggaW4gaXQsIGNyZWF0ZSBhIG5ldyBvcmlnaW4gc3RydWN0dXJlLgorICogVGhlIGNhbGxlcnMgdGhhdCBhZGQgYmxhbWUgdG8gdGhlIHNjb3JlYm9hcmQgc2hvdWxkIHVzZQorICogZ2V0X29yaWdpbigpIHRvIG9idGFpbiBzaGFyZWQsIHJlZmNvdW50ZWQgY29weSBpbnN0ZWFkIG9mIGNhbGxpbmcKKyAqIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYmxhbWVfb3JpZ2luICptYWtlX29yaWdpbihzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGJsYW1lX29yaWdpbiAqbzsKKwlGTEVYX0FMTE9DX1NUUihvLCBwYXRoLCBwYXRoKTsKKwlvLT5jb21taXQgPSBjb21taXQ7CisJby0+cmVmY250ID0gMTsKKwlvLT5uZXh0ID0gZ2V0X2JsYW1lX3N1c3BlY3RzKGNvbW1pdCk7CisJc2V0X2JsYW1lX3N1c3BlY3RzKGNvbW1pdCwgbyk7CisJcmV0dXJuIG87Cit9CisKKy8qCisgKiBMb2NhdGUgYW4gZXhpc3Rpbmcgb3JpZ2luIG9yIGNyZWF0ZSBhIG5ldyBvbmUuCisgKiBUaGlzIG1vdmVzIHRoZSBvcmlnaW4gdG8gZnJvbnQgcG9zaXRpb24gaW4gdGhlIGNvbW1pdCB1dGlsIGxpc3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYmxhbWVfb3JpZ2luICpnZXRfb3JpZ2luKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvLCAqbDsKKworCWZvciAobyA9IGdldF9ibGFtZV9zdXNwZWN0cyhjb21taXQpLCBsID0gTlVMTDsgbzsgbCA9IG8sIG8gPSBvLT5uZXh0KSB7CisJCWlmICghc3RyY21wKG8tPnBhdGgsIHBhdGgpKSB7CisJCQkvKiBidW1wIHRvIGZyb250ICovCisJCQlpZiAobCkgeworCQkJCWwtPm5leHQgPSBvLT5uZXh0OworCQkJCW8tPm5leHQgPSBnZXRfYmxhbWVfc3VzcGVjdHMoY29tbWl0KTsKKwkJCQlzZXRfYmxhbWVfc3VzcGVjdHMoY29tbWl0LCBvKTsKKwkJCX0KKwkJCXJldHVybiBibGFtZV9vcmlnaW5faW5jcmVmKG8pOworCQl9CisJfQorCXJldHVybiBtYWtlX29yaWdpbihjb21taXQsIHBhdGgpOworfQorCisKKworc3RhdGljIHZvaWQgdmVyaWZ5X3dvcmtpbmdfdHJlZV9wYXRoKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICAgc3RydWN0IGNvbW1pdCAqd29ya190cmVlLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwlpbnQgcG9zOworCisJZm9yIChwYXJlbnRzID0gd29ya190cmVlLT5wYXJlbnRzOyBwYXJlbnRzOyBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkgeworCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXRfb2lkID0gJnBhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQ7CisJCXN0cnVjdCBvYmplY3RfaWQgYmxvYl9vaWQ7CisJCXVuc2lnbmVkIHNob3J0IG1vZGU7CisKKwkJaWYgKCFnZXRfdHJlZV9lbnRyeShyLCBjb21taXRfb2lkLCBwYXRoLCAmYmxvYl9vaWQsICZtb2RlKSAmJgorCQkgICAgb2lkX29iamVjdF9pbmZvKHIsICZibG9iX29pZCwgTlVMTCkgPT0gT0JKX0JMT0IpCisJCQlyZXR1cm47CisJfQorCisJcG9zID0gaW5kZXhfbmFtZV9wb3Moci0+aW5kZXgsIHBhdGgsIHN0cmxlbihwYXRoKSk7CisJaWYgKHBvcyA+PSAwKQorCQk7IC8qIHBhdGggaXMgaW4gdGhlIGluZGV4ICovCisJZWxzZSBpZiAoLTEgLSBwb3MgPCByLT5pbmRleC0+Y2FjaGVfbnIgJiYKKwkJICFzdHJjbXAoci0+aW5kZXgtPmNhY2hlWy0xIC0gcG9zXS0+bmFtZSwgcGF0aCkpCisJCTsgLyogcGF0aCBpcyBpbiB0aGUgaW5kZXgsIHVubWVyZ2VkICovCisJZWxzZQorCQlkaWUoIm5vIHN1Y2ggcGF0aCAnJXMnIGluIEhFQUQiLCBwYXRoKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqKmFwcGVuZF9wYXJlbnQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgc3RydWN0IGNvbW1pdF9saXN0ICoqdGFpbCwKKwkJCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IGNvbW1pdCAqcGFyZW50OworCisJcGFyZW50ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uociwgb2lkKTsKKwlpZiAoIXBhcmVudCkKKwkJZGllKCJubyBzdWNoIGNvbW1pdCAlcyIsIG9pZF90b19oZXgob2lkKSk7CisJcmV0dXJuICZjb21taXRfbGlzdF9pbnNlcnQocGFyZW50LCB0YWlsKS0+bmV4dDsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kX21lcmdlX3BhcmVudHMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJIHN0cnVjdCBjb21taXRfbGlzdCAqKnRhaWwpCit7CisJaW50IG1lcmdlX2hlYWQ7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwltZXJnZV9oZWFkID0gb3BlbihnaXRfcGF0aF9tZXJnZV9oZWFkKHIpLCBPX1JET05MWSk7CisJaWYgKG1lcmdlX2hlYWQgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQlyZXR1cm47CisJCWRpZSgiY2Fubm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIsCisJCSAgICBnaXRfcGF0aF9tZXJnZV9oZWFkKHIpKTsKKwl9CisKKwl3aGlsZSAoIXN0cmJ1Zl9nZXR3aG9sZWxpbmVfZmQoJmxpbmUsIG1lcmdlX2hlYWQsICdcbicpKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlpZiAoZ2V0X29pZF9oZXgobGluZS5idWYsICZvaWQpKQorCQkJZGllKCJ1bmtub3duIGxpbmUgaW4gJyVzJzogJXMiLAorCQkJICAgIGdpdF9wYXRoX21lcmdlX2hlYWQociksIGxpbmUuYnVmKTsKKwkJdGFpbCA9IGFwcGVuZF9wYXJlbnQociwgdGFpbCwgJm9pZCk7CisJfQorCWNsb3NlKG1lcmdlX2hlYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKK30KKworLyoKKyAqIFRoaXMgaXNuJ3QgYXMgc2ltcGxlIGFzIHBhc3Npbmcgc2ItPmJ1ZiBhbmQgc2ItPmxlbiwgYmVjYXVzZSB3ZQorICogd2FudCB0byB0cmFuc2ZlciBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciB0byB0aGUgY29tbWl0IChzbyB3ZQorICogbXVzdCB1c2UgZGV0YWNoKS4KKyAqLworc3RhdGljIHZvaWQgc2V0X2NvbW1pdF9idWZmZXJfZnJvbV9zdHJidWYoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgc3RydWN0IGNvbW1pdCAqYywKKwkJCQkJICBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlzaXplX3QgbGVuOworCXZvaWQgKmJ1ZiA9IHN0cmJ1Zl9kZXRhY2goc2IsICZsZW4pOworCXNldF9jb21taXRfYnVmZmVyKHIsIGMsIGJ1ZiwgbGVuKTsKK30KKworLyoKKyAqIFByZXBhcmUgYSBkdW1teSBjb21taXQgdGhhdCByZXByZXNlbnRzIHRoZSB3b3JrIHRyZWUgKG9yIHN0YWdlZCkgaXRlbS4KKyAqIE5vdGUgdGhhdCBhbm5vdGF0aW5nIHdvcmsgdHJlZSBpdGVtIG5ldmVyIHdvcmtzIGluIHRoZSByZXZlcnNlLgorICovCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqZmFrZV93b3JraW5nX3RyZWVfY29tbWl0KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgICAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJICAgICAgIGNvbnN0IGNoYXIgKmNvbnRlbnRzX2Zyb20pCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBibGFtZV9vcmlnaW4gKm9yaWdpbjsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwYXJlbnRfdGFpbCwgKnBhcmVudDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWRfb2lkOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqaWRlbnQ7CisJdGltZV90IG5vdzsKKwlpbnQgbGVuOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJdW5zaWduZWQgbW9kZTsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCisJcmVwb19yZWFkX2luZGV4KHIpOworCXRpbWUoJm5vdyk7CisJY29tbWl0ID0gYWxsb2NfY29tbWl0X25vZGUocik7CisJY29tbWl0LT5vYmplY3QucGFyc2VkID0gMTsKKwljb21taXQtPmRhdGUgPSBub3c7CisJcGFyZW50X3RhaWwgPSAmY29tbWl0LT5wYXJlbnRzOworCisJaWYgKCFyZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLCAmaGVhZF9vaWQsIE5VTEwpKQorCQlkaWUoIm5vIHN1Y2ggcmVmOiBIRUFEIik7CisKKwlwYXJlbnRfdGFpbCA9IGFwcGVuZF9wYXJlbnQociwgcGFyZW50X3RhaWwsICZoZWFkX29pZCk7CisJYXBwZW5kX21lcmdlX3BhcmVudHMociwgcGFyZW50X3RhaWwpOworCXZlcmlmeV93b3JraW5nX3RyZWVfcGF0aChyLCBjb21taXQsIHBhdGgpOworCisJb3JpZ2luID0gbWFrZV9vcmlnaW4oY29tbWl0LCBwYXRoKTsKKworCWlkZW50ID0gZm10X2lkZW50KCJOb3QgQ29tbWl0dGVkIFlldCIsICJub3QuY29tbWl0dGVkLnlldCIsCisJCQlXQU5UX0JMQU5LX0lERU5ULCBOVUxMLCAwKTsKKwlzdHJidWZfYWRkc3RyKCZtc2csICJ0cmVlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcbiIpOworCWZvciAocGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+bmV4dCkKKwkJc3RyYnVmX2FkZGYoJm1zZywgInBhcmVudCAlc1xuIiwKKwkJCSAgICBvaWRfdG9faGV4KCZwYXJlbnQtPml0ZW0tPm9iamVjdC5vaWQpKTsKKwlzdHJidWZfYWRkZigmbXNnLAorCQkgICAgImF1dGhvciAlc1xuIgorCQkgICAgImNvbW1pdHRlciAlc1xuXG4iCisJCSAgICAiVmVyc2lvbiBvZiAlcyBmcm9tICVzXG4iLAorCQkgICAgaWRlbnQsIGlkZW50LCBwYXRoLAorCQkgICAgKCFjb250ZW50c19mcm9tID8gcGF0aCA6CisJCSAgICAgKCFzdHJjbXAoY29udGVudHNfZnJvbSwgIi0iKSA/ICJzdGFuZGFyZCBpbnB1dCIgOiBjb250ZW50c19mcm9tKSkpOworCXNldF9jb21taXRfYnVmZmVyX2Zyb21fc3RyYnVmKHIsIGNvbW1pdCwgJm1zZyk7CisKKwlpZiAoIWNvbnRlbnRzX2Zyb20gfHwgc3RyY21wKCItIiwgY29udGVudHNfZnJvbSkpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWNvbnN0IGNoYXIgKnJlYWRfZnJvbTsKKwkJY2hhciAqYnVmX3B0cjsKKwkJdW5zaWduZWQgbG9uZyBidWZfbGVuOworCisJCWlmIChjb250ZW50c19mcm9tKSB7CisJCQlpZiAoc3RhdChjb250ZW50c19mcm9tLCAmc3QpIDwgMCkKKwkJCQlkaWVfZXJybm8oIkNhbm5vdCBzdGF0ICclcyciLCBjb250ZW50c19mcm9tKTsKKwkJCXJlYWRfZnJvbSA9IGNvbnRlbnRzX2Zyb207CisJCX0KKwkJZWxzZSB7CisJCQlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApCisJCQkJZGllX2Vycm5vKCJDYW5ub3QgbHN0YXQgJyVzJyIsIHBhdGgpOworCQkJcmVhZF9mcm9tID0gcGF0aDsKKwkJfQorCQltb2RlID0gY2Fub25fbW9kZShzdC5zdF9tb2RlKTsKKworCQlzd2l0Y2ggKHN0LnN0X21vZGUgJiBTX0lGTVQpIHsKKwkJY2FzZSBTX0lGUkVHOgorCQkJaWYgKG9wdC0+ZmxhZ3MuYWxsb3dfdGV4dGNvbnYgJiYKKwkJCSAgICB0ZXh0Y29udl9vYmplY3QociwgcmVhZF9mcm9tLCBtb2RlLCAmbnVsbF9vaWQsIDAsICZidWZfcHRyLCAmYnVmX2xlbikpCisJCQkJc3RyYnVmX2F0dGFjaCgmYnVmLCBidWZfcHRyLCBidWZfbGVuLCBidWZfbGVuICsgMSk7CisJCQllbHNlIGlmIChzdHJidWZfcmVhZF9maWxlKCZidWYsIHJlYWRfZnJvbSwgc3Quc3Rfc2l6ZSkgIT0gc3Quc3Rfc2l6ZSkKKwkJCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuIG9yIHJlYWQgJyVzJyIsIHJlYWRfZnJvbSk7CisJCQlicmVhazsKKwkJY2FzZSBTX0lGTE5LOgorCQkJaWYgKHN0cmJ1Zl9yZWFkbGluaygmYnVmLCByZWFkX2Zyb20sIHN0LnN0X3NpemUpIDwgMCkKKwkJCQlkaWVfZXJybm8oImNhbm5vdCByZWFkbGluayAnJXMnIiwgcmVhZF9mcm9tKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGllKCJ1bnN1cHBvcnRlZCBmaWxlIHR5cGUgJXMiLCByZWFkX2Zyb20pOworCQl9CisJfQorCWVsc2UgeworCQkvKiBSZWFkaW5nIGZyb20gc3RkaW4gKi8KKwkJbW9kZSA9IDA7CisJCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCAwKSA8IDApCisJCQlkaWVfZXJybm8oImZhaWxlZCB0byByZWFkIGZyb20gc3RkaW4iKTsKKwl9CisJY29udmVydF90b19naXQoci0+aW5kZXgsIHBhdGgsIGJ1Zi5idWYsIGJ1Zi5sZW4sICZidWYsIDApOworCW9yaWdpbi0+ZmlsZS5wdHIgPSBidWYuYnVmOworCW9yaWdpbi0+ZmlsZS5zaXplID0gYnVmLmxlbjsKKwlwcmV0ZW5kX29iamVjdF9maWxlKGJ1Zi5idWYsIGJ1Zi5sZW4sIE9CSl9CTE9CLCAmb3JpZ2luLT5ibG9iX29pZCk7CisKKwkvKgorCSAqIFJlYWQgdGhlIGN1cnJlbnQgaW5kZXgsIHJlcGxhY2UgdGhlIHBhdGggZW50cnkgd2l0aAorCSAqIG9yaWdpbi0+YmxvYl9zaGExIHdpdGhvdXQgbXVja2luZyB3aXRoIGl0cyBtb2RlIG9yIHR5cGUKKwkgKiBiaXRzOyB3ZSBhcmUgbm90IGdvaW5nIHRvIHdyaXRlIHRoaXMgaW5kZXggb3V0IC0tIHdlIGp1c3QKKwkgKiB3YW50IHRvIHJ1biAiZGlmZi1pbmRleCAtLWNhY2hlZCIuCisJICovCisJZGlzY2FyZF9pbmRleChyLT5pbmRleCk7CisJcmVwb19yZWFkX2luZGV4KHIpOworCisJbGVuID0gc3RybGVuKHBhdGgpOworCWlmICghbW9kZSkgeworCQlpbnQgcG9zID0gaW5kZXhfbmFtZV9wb3Moci0+aW5kZXgsIHBhdGgsIGxlbik7CisJCWlmICgwIDw9IHBvcykKKwkJCW1vZGUgPSByLT5pbmRleC0+Y2FjaGVbcG9zXS0+Y2VfbW9kZTsKKwkJZWxzZQorCQkJLyogTGV0J3Mgbm90IGJvdGhlciByZWFkaW5nIGZyb20gSEVBRCB0cmVlICovCisJCQltb2RlID0gU19JRlJFRyB8IDA2NDQ7CisJfQorCWNlID0gbWFrZV9lbXB0eV9jYWNoZV9lbnRyeShyLT5pbmRleCwgbGVuKTsKKwlvaWRjcHkoJmNlLT5vaWQsICZvcmlnaW4tPmJsb2Jfb2lkKTsKKwltZW1jcHkoY2UtPm5hbWUsIHBhdGgsIGxlbik7CisJY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKDApOworCWNlLT5jZV9uYW1lbGVuID0gbGVuOworCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobW9kZSk7CisJYWRkX2luZGV4X2VudHJ5KHItPmluZGV4LCBjZSwKKwkJCUFERF9DQUNIRV9PS19UT19BREQgfCBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSk7CisKKwljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChyLT5pbmRleCwgcGF0aCk7CisKKwlyZXR1cm4gY29tbWl0OworfQorCisKKworc3RhdGljIGludCBkaWZmX2h1bmtzKG1tZmlsZV90ICpmaWxlX2EsIG1tZmlsZV90ICpmaWxlX2IsCisJCSAgICAgIHhkbF9lbWl0X2h1bmtfY29uc3VtZV9mdW5jX3QgaHVua19mdW5jLCB2b2lkICpjYl9kYXRhLCBpbnQgeGRsX29wdHMpCit7CisJeHBwYXJhbV90IHhwcCA9IHswfTsKKwl4ZGVtaXRjb25mX3QgeGVjZmcgPSB7MH07CisJeGRlbWl0Y2JfdCBlY2IgPSB7TlVMTH07CisKKwl4cHAuZmxhZ3MgPSB4ZGxfb3B0czsKKwl4ZWNmZy5odW5rX2Z1bmMgPSBodW5rX2Z1bmM7CisJZWNiLnByaXYgPSBjYl9kYXRhOworCXJldHVybiB4ZGlfZGlmZihmaWxlX2EsIGZpbGVfYiwgJnhwcCwgJnhlY2ZnLCAmZWNiKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9uZXh0X2xpbmUoY29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKmVuZCkKK3sKKwljb25zdCBjaGFyICpubCA9IG1lbWNocihzdGFydCwgJ1xuJywgZW5kIC0gc3RhcnQpOworCisJcmV0dXJuIG5sID8gbmwgKyAxIDogZW5kOworfQorCitzdGF0aWMgaW50IGZpbmRfbGluZV9zdGFydHMoaW50ICoqbGluZV9zdGFydHMsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwljb25zdCBjaGFyICplbmQgPSBidWYgKyBsZW47CisJY29uc3QgY2hhciAqcDsKKwlpbnQgKmxpbmVubzsKKwlpbnQgbnVtID0gMDsKKworCWZvciAocCA9IGJ1ZjsgcCA8IGVuZDsgcCA9IGdldF9uZXh0X2xpbmUocCwgZW5kKSkKKwkJbnVtKys7CisKKwlBTExPQ19BUlJBWSgqbGluZV9zdGFydHMsIG51bSArIDEpOworCWxpbmVubyA9ICpsaW5lX3N0YXJ0czsKKworCWZvciAocCA9IGJ1ZjsgcCA8IGVuZDsgcCA9IGdldF9uZXh0X2xpbmUocCwgZW5kKSkKKwkJKmxpbmVubysrID0gcCAtIGJ1ZjsKKworCSpsaW5lbm8gPSBsZW47CisKKwlyZXR1cm4gbnVtOworfQorCitzdHJ1Y3QgZmluZ2VycHJpbnRfZW50cnk7CisKKy8qIEEgZmluZ2VycHJpbnQgaXMgaW50ZW5kZWQgdG8gbG9vc2VseSByZXByZXNlbnQgYSBzdHJpbmcsIHN1Y2ggdGhhdCB0d28KKyAqIGZpbmdlcnByaW50cyBjYW4gYmUgcXVpY2tseSBjb21wYXJlZCB0byBnaXZlIGFuIGluZGljYXRpb24gb2YgdGhlIHNpbWlsYXJpdHkKKyAqIG9mIHRoZSBzdHJpbmdzIHRoYXQgdGhleSByZXByZXNlbnQuCisgKgorICogQSBmaW5nZXJwcmludCBpcyByZXByZXNlbnRlZCBhcyBhIG11bHRpc2V0IG9mIHRoZSBsb3dlci1jYXNlZCBieXRlIHBhaXJzIGluCisgKiB0aGUgc3RyaW5nIHRoYXQgaXQgcmVwcmVzZW50cy4gV2hpdGVzcGFjZSBpcyBhZGRlZCBhdCBlYWNoIGVuZCBvZiB0aGUKKyAqIHN0cmluZy4gV2hpdGVzcGFjZSBwYWlycyBhcmUgaWdub3JlZC4gV2hpdGVzcGFjZSBpcyBjb252ZXJ0ZWQgdG8gJ1wwJy4KKyAqIEZvciBleGFtcGxlLCB0aGUgc3RyaW5nICJEYXJ0aCAgIFJhZGFyIiB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgZm9sbG93aW5nCisgKiBmaW5nZXJwcmludDoKKyAqIHsiXDBkIiwgImRhIiwgImRhIiwgImFyIiwgImFyIiwgInJ0IiwgInRoIiwgImhcMCIsICJcMHIiLCAicmEiLCAiYWQiLCAiclwwIn0KKyAqCisgKiBUaGUgc2ltaWxhcml0eSBiZXR3ZWVuIHR3byBmaW5nZXJwcmludHMgaXMgdGhlIHNpemUgb2YgdGhlIGludGVyc2VjdGlvbiBvZgorICogdGhlaXIgbXVsdGlzZXRzLCBpbmNsdWRpbmcgcmVwZWF0ZWQgZWxlbWVudHMuIFNlZSBmaW5nZXJwcmludF9zaW1pbGFyaXR5IGZvcgorICogZXhhbXBsZXMuCisgKgorICogRm9yIGVhc2Ugb2YgaW1wbGVtZW50YXRpb24sIHRoZSBmaW5nZXJwcmludCBpcyBpbXBsZW1lbnRlZCBhcyBhIG1hcAorICogb2YgYnl0ZSBwYWlycyB0byB0aGUgY291bnQgb2YgdGhhdCBieXRlIHBhaXIgaW4gdGhlIHN0cmluZywgaW5zdGVhZCBvZgorICogYWxsb3dpbmcgcmVwZWF0ZWQgZWxlbWVudHMgaW4gYSBzZXQuCisgKi8KK3N0cnVjdCBmaW5nZXJwcmludCB7CisJc3RydWN0IGhhc2htYXAgbWFwOworCS8qIEFzIHdlIGtub3cgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gYWR2YW5jZSwgaXQncworCSAqIGNvbnZlbmllbnQgdG8gc3RvcmUgdGhlIGVudHJpZXMgaW4gYSBzaW5nbGUgYXJyYXkgaW5zdGVhZCBvZiBoYXZpbmcKKwkgKiB0aGUgaGFzaG1hcCBtYW5hZ2UgdGhlIG1lbW9yeS4KKwkgKi8KKwlzdHJ1Y3QgZmluZ2VycHJpbnRfZW50cnkgKmVudHJpZXM7Cit9OworCisvKiBBIGJ5dGUgcGFpciBpbiBhIGZpbmdlcnByaW50LiBTdG9yZXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgYnl0ZSBwYWlyCisgKiBvY2N1cnMgaW4gdGhlIHN0cmluZyB0aGF0IHRoZSBmaW5nZXJwcmludCByZXByZXNlbnRzLgorICovCitzdHJ1Y3QgZmluZ2VycHJpbnRfZW50cnkgeworCS8qIFRoZSBoYXNobWFwIGVudHJ5IC0gdGhlIGhhc2ggcmVwcmVzZW50cyB0aGUgYnl0ZSBwYWlyIGluIGl0cworCSAqIGVudGlyZXR5IHNvIHdlIGRvbid0IG5lZWQgdG8gc3RvcmUgdGhlIGJ5dGUgcGFpciBzZXBhcmF0ZWx5LgorCSAqLworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudHJ5OworCS8qIFRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGJ5dGUgcGFpciBvY2N1cnMgaW4gdGhlIHN0cmluZyB0aGF0IHRoZQorCSAqIGZpbmdlcnByaW50IHJlcHJlc2VudHMuCisJICovCisJaW50IGNvdW50OworfTsKKworLyogU2VlIGBzdHJ1Y3QgZmluZ2VycHJpbnRgIGZvciBhbiBleHBsYW5hdGlvbiBvZiB3aGF0IGEgZmluZ2VycHJpbnQgaXMuCisgKiBccGFyYW0gcmVzdWx0IHRoZSBmaW5nZXJwcmludCBvZiB0aGUgc3RyaW5nIGlzIHN0b3JlZCBoZXJlLiBUaGlzIG11c3QgYmUKKyAqIAkJIGZyZWVkIGxhdGVyIHVzaW5nIGZyZWVfZmluZ2VycHJpbnQuCisgKiBccGFyYW0gbGluZV9iZWdpbiB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZworICogXHBhcmFtIGxpbmVfZW5kIHRoZSBlbmQgb2YgdGhlIHN0cmluZworICovCitzdGF0aWMgdm9pZCBnZXRfZmluZ2VycHJpbnQoc3RydWN0IGZpbmdlcnByaW50ICpyZXN1bHQsCisJCQkgICAgY29uc3QgY2hhciAqbGluZV9iZWdpbiwKKwkJCSAgICBjb25zdCBjaGFyICpsaW5lX2VuZCkKK3sKKwl1bnNpZ25lZCBpbnQgaGFzaCwgYzAgPSAwLCBjMTsKKwljb25zdCBjaGFyICpwOworCWludCBtYXhfbWFwX2VudHJ5X2NvdW50ID0gMSArIGxpbmVfZW5kIC0gbGluZV9iZWdpbjsKKwlzdHJ1Y3QgZmluZ2VycHJpbnRfZW50cnkgKmVudHJ5ID0geGNhbGxvYyhtYXhfbWFwX2VudHJ5X2NvdW50LAorCQlzaXplb2Yoc3RydWN0IGZpbmdlcnByaW50X2VudHJ5KSk7CisJc3RydWN0IGZpbmdlcnByaW50X2VudHJ5ICpmb3VuZF9lbnRyeTsKKworCWhhc2htYXBfaW5pdCgmcmVzdWx0LT5tYXAsIE5VTEwsIE5VTEwsIG1heF9tYXBfZW50cnlfY291bnQpOworCXJlc3VsdC0+ZW50cmllcyA9IGVudHJ5OworCWZvciAocCA9IGxpbmVfYmVnaW47IHAgPD0gbGluZV9lbmQ7ICsrcCwgYzAgPSBjMSkgeworCQkvKiBBbHdheXMgdGVybWluYXRlIHRoZSBzdHJpbmcgd2l0aCB3aGl0ZXNwYWNlLgorCQkgKiBOb3JtYWxpc2Ugd2hpdGVzcGFjZSB0byAwLCBhbmQgbm9ybWFsaXNlIGxldHRlcnMgdG8KKwkJICogbG93ZXIgY2FzZS4gVGhpcyB3b24ndCB3b3JrIGZvciBtdWx0aWJ5dGUgY2hhcmFjdGVycyBidXQgYXQKKwkJICogd29yc3Qgd2lsbCBtYXRjaCBzb21lIHVucmVsYXRlZCBjaGFyYWN0ZXJzLgorCQkgKi8KKwkJaWYgKChwID09IGxpbmVfZW5kKSB8fCBpc3NwYWNlKCpwKSkKKwkJCWMxID0gMDsKKwkJZWxzZQorCQkJYzEgPSB0b2xvd2VyKCpwKTsKKwkJaGFzaCA9IGMwIHwgKGMxIDw8IDgpOworCQkvKiBJZ25vcmUgd2hpdGVzcGFjZSBwYWlycyAqLworCQlpZiAoaGFzaCA9PSAwKQorCQkJY29udGludWU7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmZW50cnktPmVudHJ5LCBoYXNoKTsKKworCQlmb3VuZF9lbnRyeSA9IGhhc2htYXBfZ2V0X2VudHJ5KCZyZXN1bHQtPm1hcCwgZW50cnksCisJCQkJCQkvKiBtZW1iZXIgbmFtZSAqLyBlbnRyeSwgTlVMTCk7CisJCWlmIChmb3VuZF9lbnRyeSkgeworCQkJZm91bmRfZW50cnktPmNvdW50ICs9IDE7CisJCX0gZWxzZSB7CisJCQllbnRyeS0+Y291bnQgPSAxOworCQkJaGFzaG1hcF9hZGQoJnJlc3VsdC0+bWFwLCAmZW50cnktPmVudHJ5KTsKKwkJCSsrZW50cnk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZmluZ2VycHJpbnQoc3RydWN0IGZpbmdlcnByaW50ICpmKQoreworCWhhc2htYXBfZnJlZSgmZi0+bWFwKTsKKwlmcmVlKGYtPmVudHJpZXMpOworfQorCisvKiBDYWxjdWxhdGVzIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gdHdvIGZpbmdlcnByaW50cyBhcyB0aGUgc2l6ZSBvZiB0aGUKKyAqIGludGVyc2VjdGlvbiBvZiB0aGVpciBtdWx0aXNldHMsIGluY2x1ZGluZyByZXBlYXRlZCBlbGVtZW50cy4gU2VlCisgKiBgc3RydWN0IGZpbmdlcnByaW50YCBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGZpbmdlcnByaW50IHJlcHJlc2VudGF0aW9uLgorICogVGhlIHNpbWlsYXJpdHkgYmV0d2VlbiAiY2F0IG1hdCIgYW5kICJmYXRoZXIgcmF0aGVyIiBpcyAyIGJlY2F1c2UgImF0IiBpcworICogcHJlc2VudCB0d2ljZSBpbiBib3RoIHN0cmluZ3Mgd2hpbGUgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiAidGltIiBhbmQgIm1pdCIKKyAqIGlzIDAuCisgKi8KK3N0YXRpYyBpbnQgZmluZ2VycHJpbnRfc2ltaWxhcml0eShzdHJ1Y3QgZmluZ2VycHJpbnQgKmEsIHN0cnVjdCBmaW5nZXJwcmludCAqYikKK3sKKwlpbnQgaW50ZXJzZWN0aW9uID0gMDsKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisJY29uc3Qgc3RydWN0IGZpbmdlcnByaW50X2VudHJ5ICplbnRyeV9hLCAqZW50cnlfYjsKKworCWhhc2htYXBfZm9yX2VhY2hfZW50cnkoJmItPm1hcCwgJml0ZXIsIGVudHJ5X2IsCisJCQkJZW50cnkgLyogbWVtYmVyIG5hbWUgKi8pIHsKKwkJZW50cnlfYSA9IGhhc2htYXBfZ2V0X2VudHJ5KCZhLT5tYXAsIGVudHJ5X2IsIGVudHJ5LCBOVUxMKTsKKwkJaWYgKGVudHJ5X2EpIHsKKwkJCWludGVyc2VjdGlvbiArPSBlbnRyeV9hLT5jb3VudCA8IGVudHJ5X2ItPmNvdW50ID8KKwkJCQkJZW50cnlfYS0+Y291bnQgOiBlbnRyeV9iLT5jb3VudDsKKwkJfQorCX0KKwlyZXR1cm4gaW50ZXJzZWN0aW9uOworfQorCisvKiBTdWJ0cmFjdHMgYnl0ZS1wYWlyIGVsZW1lbnRzIGluIEIgZnJvbSBBLCBtb2RpZnlpbmcgQSBpbiBwbGFjZS4KKyAqLworc3RhdGljIHZvaWQgZmluZ2VycHJpbnRfc3VidHJhY3Qoc3RydWN0IGZpbmdlcnByaW50ICphLCBzdHJ1Y3QgZmluZ2VycHJpbnQgKmIpCit7CisJc3RydWN0IGhhc2htYXBfaXRlciBpdGVyOworCXN0cnVjdCBmaW5nZXJwcmludF9lbnRyeSAqZW50cnlfYTsKKwljb25zdCBzdHJ1Y3QgZmluZ2VycHJpbnRfZW50cnkgKmVudHJ5X2I7CisKKwloYXNobWFwX2l0ZXJfaW5pdCgmYi0+bWFwLCAmaXRlcik7CisKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KCZiLT5tYXAsICZpdGVyLCBlbnRyeV9iLAorCQkJCWVudHJ5IC8qIG1lbWJlciBuYW1lICovKSB7CisJCWVudHJ5X2EgPSBoYXNobWFwX2dldF9lbnRyeSgmYS0+bWFwLCBlbnRyeV9iLCBlbnRyeSwgTlVMTCk7CisJCWlmIChlbnRyeV9hKSB7CisJCQlpZiAoZW50cnlfYS0+Y291bnQgPD0gZW50cnlfYi0+Y291bnQpCisJCQkJaGFzaG1hcF9yZW1vdmUoJmEtPm1hcCwgJmVudHJ5X2ItPmVudHJ5LCBOVUxMKTsKKwkJCWVsc2UKKwkJCQllbnRyeV9hLT5jb3VudCAtPSBlbnRyeV9iLT5jb3VudDsKKwkJfQorCX0KK30KKworLyogQ2FsY3VsYXRlIGZpbmdlcnByaW50cyBmb3IgYSBzZXJpZXMgb2YgbGluZXMuCisgKiBQdXRzIHRoZSBmaW5nZXJwcmludHMgaW4gdGhlIGZpbmdlcnByaW50cyBhcnJheSwgd2hpY2ggbXVzdCBoYXZlIGJlZW4KKyAqIHByZWFsbG9jYXRlZCB0byBhbGxvdyBzdG9yaW5nIGxpbmVfY291bnQgZWxlbWVudHMuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9saW5lX2ZpbmdlcnByaW50cyhzdHJ1Y3QgZmluZ2VycHJpbnQgKmZpbmdlcnByaW50cywKKwkJCQkgIGNvbnN0IGNoYXIgKmNvbnRlbnQsIGNvbnN0IGludCAqbGluZV9zdGFydHMsCisJCQkJICBsb25nIGZpcnN0X2xpbmUsIGxvbmcgbGluZV9jb3VudCkKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICpsaW5lc3RhcnQsICpsaW5lZW5kOworCisJbGluZV9zdGFydHMgKz0gZmlyc3RfbGluZTsKKwlmb3IgKGkgPSAwOyBpIDwgbGluZV9jb3VudDsgKytpKSB7CisJCWxpbmVzdGFydCA9IGNvbnRlbnQgKyBsaW5lX3N0YXJ0c1tpXTsKKwkJbGluZWVuZCA9IGNvbnRlbnQgKyBsaW5lX3N0YXJ0c1tpICsgMV07CisJCWdldF9maW5nZXJwcmludChmaW5nZXJwcmludHMgKyBpLCBsaW5lc3RhcnQsIGxpbmVlbmQpOworCX0KK30KKworc3RhdGljIHZvaWQgZnJlZV9saW5lX2ZpbmdlcnByaW50cyhzdHJ1Y3QgZmluZ2VycHJpbnQgKmZpbmdlcnByaW50cywKKwkJCQkgICBpbnQgbnJfZmluZ2VycHJpbnRzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2ZpbmdlcnByaW50czsgaSsrKQorCQlmcmVlX2ZpbmdlcnByaW50KCZmaW5nZXJwcmludHNbaV0pOworfQorCisvKiBUaGlzIGNvbnRhaW5zIHRoZSBkYXRhIG5lY2Vzc2FyeSB0byBsaW5lYXJseSBtYXAgYSBsaW5lIG51bWJlciBpbiBvbmUgaGFsZgorICogb2YgYSBkaWZmIGNodW5rIHRvIHRoZSBsaW5lIGluIHRoZSBvdGhlciBoYWxmIG9mIHRoZSBkaWZmIGNodW5rIHRoYXQgaXMKKyAqIGNsb3Nlc3QgaW4gdGVybXMgb2YgaXRzIHBvc2l0aW9uIGFzIGEgZnJhY3Rpb24gb2YgdGhlIGxlbmd0aCBvZiB0aGUgY2h1bmsuCisgKi8KK3N0cnVjdCBsaW5lX251bWJlcl9tYXBwaW5nIHsKKwlpbnQgZGVzdGluYXRpb25fc3RhcnQsIGRlc3RpbmF0aW9uX2xlbmd0aCwKKwkJc291cmNlX3N0YXJ0LCBzb3VyY2VfbGVuZ3RoOworfTsKKworLyogR2l2ZW4gYSBsaW5lIG51bWJlciBpbiBvbmUgcmFuZ2UsIG9mZnNldCBhbmQgc2NhbGUgaXQgdG8gbWFwIGl0IG9udG8gdGhlCisgKiBvdGhlciByYW5nZS4KKyAqIEVzc2VudGlhbGx5IHRoaXMgbWFwcGluZyBpcyBhIHNpbXBsZSBsaW5lYXIgZXF1YXRpb24gYnV0IHRoZSBjYWxjdWxhdGlvbiBpcworICogbW9yZSBjb21wbGljYXRlZCB0byBhbGxvdyBwZXJmb3JtaW5nIGl0IHdpdGggaW50ZWdlciBvcGVyYXRpb25zLgorICogQW5vdGhlciBjb21wbGljYXRpb24gaXMgdGhhdCBpZiBhIGxpbmUgY291bGQgbWFwIG9udG8gbWFueSBsaW5lcyBpbiB0aGUKKyAqIGRlc3RpbmF0aW9uIHJhbmdlIHRoZW4gd2Ugd2FudCB0byBjaG9vc2UgdGhlIGxpbmUgYXQgdGhlIGNlbnRlciBvZiB0aG9zZQorICogcG9zc2liaWxpdGllcy4KKyAqIEV4YW1wbGU6IGlmIHRoZSBjaHVuayBpcyAyIGxpbmVzIGxvbmcgaW4gQSBhbmQgMTAgbGluZXMgbG9uZyBpbiBCIHRoZW4gdGhlCisgKiBmaXJzdCA1IGxpbmVzIGluIEIgd2lsbCBtYXAgb250byB0aGUgZmlyc3QgbGluZSBpbiB0aGUgQSBjaHVuaywgd2hpbGUgdGhlCisgKiBsYXN0IDUgbGluZXMgd2lsbCBhbGwgbWFwIG9udG8gdGhlIHNlY29uZCBsaW5lIGluIHRoZSBBIGNodW5rLgorICogRXhhbXBsZTogaWYgdGhlIGNodW5rIGlzIDEwIGxpbmVzIGxvbmcgaW4gQSBhbmQgMiBsaW5lcyBsb25nIGluIEIgdGhlbiBsaW5lCisgKiAwIGluIEIgd2lsbCBtYXAgb250byBsaW5lIDIgaW4gQSwgYW5kIGxpbmUgMSBpbiBCIHdpbGwgbWFwIG9udG8gbGluZSA3IGluIEEuCisgKi8KK3N0YXRpYyBpbnQgbWFwX2xpbmVfbnVtYmVyKGludCBsaW5lX251bWJlciwKKwljb25zdCBzdHJ1Y3QgbGluZV9udW1iZXJfbWFwcGluZyAqbWFwcGluZykKK3sKKwlyZXR1cm4gKChsaW5lX251bWJlciAtIG1hcHBpbmctPnNvdXJjZV9zdGFydCkgKiAyICsgMSkgKgorCSAgICAgICBtYXBwaW5nLT5kZXN0aW5hdGlvbl9sZW5ndGggLworCSAgICAgICAobWFwcGluZy0+c291cmNlX2xlbmd0aCAqIDIpICsKKwkgICAgICAgbWFwcGluZy0+ZGVzdGluYXRpb25fc3RhcnQ7Cit9CisKKy8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQgc3RvcmluZyB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIGEgbGluZSBpbiBBCisgKiBhbmQgYSBsaW5lIGluIEIuCisgKgorICogVGhlIHNpbWlsYXJpdGllcyBhcmUgc3RvcmVkIGluIGEgMi1kaW1lbnNpb25hbCBhcnJheS4gRWFjaCAicm93IiBpbiB0aGUKKyAqIGFycmF5IGNvbnRhaW5zIHRoZSBzaW1pbGFyaXRpZXMgZm9yIGEgbGluZSBpbiBCLiBUaGUgc2ltaWxhcml0aWVzIHN0b3JlZCBpbgorICogYSByb3cgYXJlIHRoZSBzaW1pbGFyaXRpZXMgYmV0d2VlbiB0aGUgbGluZSBpbiBCIGFuZCB0aGUgbmVhcmJ5IGxpbmVzIGluIEEuCisgKiBUbyBrZWVwIHRoZSBsZW5ndGggb2YgZWFjaCByb3cgdGhlIHNhbWUsIGl0IGlzIHBhZGRlZCBvdXQgd2l0aCB2YWx1ZXMgb2YgLTEKKyAqIHdoZXJlIHRoZSBzZWFyY2ggcmFuZ2UgZXh0ZW5kcyBiZXlvbmQgdGhlIGxpbmVzIGluIEEuCisgKiBGb3IgZXhhbXBsZSwgaWYgbWF4X3NlYXJjaF9kaXN0YW5jZV9hIGlzIDIgYW5kIHRoZSB0d28gc2lkZXMgb2YgYSBkaWZmIGNodW5rCisgKiBsb29rIGxpa2UgdGhpczoKKyAqIGEgfCBtCisgKiBiIHwgbgorICogYyB8IG8KKyAqIGQgfCBwCisgKiBlIHwgcQorICogVGhlbiB0aGUgc2ltaWxhcml0eSBhcnJheSB3aWxsIGNvbnRhaW46CisgKiBbLTEsIC0xLCBhbSwgYm0sIGNtLAorICogIC0xLCBhbiwgYm4sIGNuLCBkbiwKKyAqICBhbywgYm8sIGNvLCBkbywgZW8sCisgKiAgYnAsIGNwLCBkcCwgZXAsIC0xLAorICogIGNxLCBkcSwgZXEsIC0xLCAtMV0KKyAqIFdoZXJlIHNpbWlsYXJpdGllcyBhcmUgZGVub3RlZCBlaXRoZXIgYnkgLTEgZm9yIGludmFsaWQsIG9yIHRoZQorICogY29uY2F0ZW5hdGlvbiBvZiB0aGUgdHdvIGxpbmVzIGluIHRoZSBkaWZmIGJlaW5nIGNvbXBhcmVkLgorICoKKyAqIFxwYXJhbSBzaW1pbGFyaXRpZXMgYXJyYXkgb2Ygc2ltaWxhcml0aWVzIGJldHdlZW4gbGluZXMgaW4gQSBhbmQgQgorICogXHBhcmFtIGxpbmVfYSB0aGUgaW5kZXggb2YgdGhlIGxpbmUgaW4gQSwgaW4gdGhlIHNhbWUgZnJhbWUgb2YgcmVmZXJlbmNlIGFzCisgKgljbG9zZXN0X2xpbmVfYS4KKyAqIFxwYXJhbSBsb2NhbF9saW5lX2IgdGhlIGluZGV4IG9mIHRoZSBsaW5lIGluIEIsIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBsaW5lCisgKgkJICAgICAgIGluIEIgdGhhdCBzaW1pbGFyaXRpZXMgcmVwcmVzZW50cy4KKyAqIFxwYXJhbSBjbG9zZXN0X2xpbmVfYSB0aGUgaW5kZXggb2YgdGhlIGxpbmUgaW4gQSB0aGF0IGlzIGRlZW1lZCB0byBiZQorICoJCQkgY2xvc2VzdCB0byBsb2NhbF9saW5lX2IuIFRoaXMgbXVzdCBiZSBpbiB0aGUgc2FtZQorICoJCQkgZnJhbWUgb2YgcmVmZXJlbmNlIGFzIGxpbmVfYS4gVGhpcyB2YWx1ZSBkZWZpbmVzCisgKgkJCSB3aGVyZSBzaW1pbGFyaXRpZXMgaXMgY2VudGVyZWQgZm9yIHRoZSBsaW5lIGluIEIuCisgKiBccGFyYW0gbWF4X3NlYXJjaF9kaXN0YW5jZV9hIG1heGltdW0gZGlzdGFuY2UgaW4gbGluZXMgZnJvbSB0aGUgY2xvc2VzdCBsaW5lCisgKiAJCQkJaW4gQSBmb3Igb3RoZXIgbGluZXMgaW4gQSBmb3Igd2hpY2gKKyAqIAkJCQlzaW1pbGFyaXRpZXMgbWF5IGJlIGNhbGN1bGF0ZWQuCisgKi8KK3N0YXRpYyBpbnQgKmdldF9zaW1pbGFyaXR5KGludCAqc2ltaWxhcml0aWVzLAorCQkJICAgaW50IGxpbmVfYSwgaW50IGxvY2FsX2xpbmVfYiwKKwkJCSAgIGludCBjbG9zZXN0X2xpbmVfYSwgaW50IG1heF9zZWFyY2hfZGlzdGFuY2VfYSkKK3sKKwlhc3NlcnQoYWJzKGxpbmVfYSAtIGNsb3Nlc3RfbGluZV9hKSA8PQorCSAgICAgICBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EpOworCXJldHVybiBzaW1pbGFyaXRpZXMgKyBsaW5lX2EgLSBjbG9zZXN0X2xpbmVfYSArCisJICAgICAgIG1heF9zZWFyY2hfZGlzdGFuY2VfYSArCisJICAgICAgIGxvY2FsX2xpbmVfYiAqIChtYXhfc2VhcmNoX2Rpc3RhbmNlX2EgKiAyICsgMSk7Cit9CisKKyNkZWZpbmUgQ0VSVEFJTl9OT1RISU5HX01BVENIRVMgLTIKKyNkZWZpbmUgQ0VSVEFJTlRZX05PVF9DQUxDVUxBVEVEIC0xCisKKy8qIEdpdmVuIGEgbGluZSBpbiBCLCBmaXJzdCBjYWxjdWxhdGUgaXRzIHNpbWlsYXJpdGllcyB3aXRoIG5lYXJieSBsaW5lcyBpbiBBCisgKiBpZiBub3QgYWxyZWFkeSBjYWxjdWxhdGVkLCB0aGVuIGlkZW50aWZ5IHRoZSBtb3N0IHNpbWlsYXIgYW5kIHNlY29uZCBtb3N0CisgKiBzaW1pbGFyIGxpbmVzLiBUaGUgImNlcnRhaW50eSIgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aG9zZSB0d28KKyAqIHNpbWlsYXJpdGllcy4KKyAqCisgKiBccGFyYW0gc3RhcnRfYSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGNodW5rIGluIEEKKyAqIFxwYXJhbSBsZW5ndGhfYSB0aGUgbGVuZ3RoIGluIGxpbmVzIG9mIHRoZSBjaHVuayBpbiBBCisgKiBccGFyYW0gbG9jYWxfbGluZV9iIHRoZSBpbmRleCBvZiB0aGUgbGluZSBpbiBCLCByZWxhdGl2ZSB0byB0aGUgZmlyc3QgbGluZQorICogCQkgICAgICAgaW4gdGhlIGNodW5rLgorICogXHBhcmFtIGZpbmdlcnByaW50c19hIGFycmF5IG9mIGZpbmdlcnByaW50cyBmb3IgdGhlIGNodW5rIGluIEEKKyAqIFxwYXJhbSBmaW5nZXJwcmludHNfYiBhcnJheSBvZiBmaW5nZXJwcmludHMgZm9yIHRoZSBjaHVuayBpbiBCCisgKiBccGFyYW0gc2ltaWxhcml0aWVzIDItZGltZW5zaW9uYWwgYXJyYXkgb2Ygc2ltaWxhcml0aWVzIGJldHdlZW4gbGluZXMgaW4gQQorICogCQkgICAgICAgYW5kIEIuIFNlZSBnZXRfc2ltaWxhcml0eSgpIGZvciBtb3JlIGRldGFpbHMuCisgKiBccGFyYW0gY2VydGFpbnRpZXMgYXJyYXkgb2YgdmFsdWVzIGluZGljYXRpbmcgaG93IHN0cm9uZ2x5IGEgbGluZSBpbiBCIGlzCisgKiAJCSAgICAgIG1hdGNoZWQgd2l0aCBzb21lIGxpbmUgaW4gQS4KKyAqIFxwYXJhbSBzZWNvbmRfYmVzdF9yZXN1bHQgYXJyYXkgb2YgYWJzb2x1dGUgaW5kaWNlcyBpbiBBIGZvciB0aGUgc2Vjb25kCisgKiAJCQkgICAgIGNsb3Nlc3QgbWF0Y2ggb2YgYSBsaW5lIGluIEIuCisgKiBccGFyYW0gcmVzdWx0IGFycmF5IG9mIGFic29sdXRlIGluZGljZXMgaW4gQSBmb3IgdGhlIGNsb3Nlc3QgbWF0Y2ggb2YgYSBsaW5lCisgKiAJCSBpbiBCLgorICogXHBhcmFtIG1heF9zZWFyY2hfZGlzdGFuY2VfYSBtYXhpbXVtIGRpc3RhbmNlIGluIGxpbmVzIGZyb20gdGhlIGNsb3Nlc3QgbGluZQorICogCQkJCWluIEEgZm9yIG90aGVyIGxpbmVzIGluIEEgZm9yIHdoaWNoCisgKiAJCQkJc2ltaWxhcml0aWVzIG1heSBiZSBjYWxjdWxhdGVkLgorICogXHBhcmFtIG1hcF9saW5lX251bWJlcl9pbl9iX3RvX2EgcGFyYW1ldGVyIHRvIG1hcF9saW5lX251bWJlcigpLgorICovCitzdGF0aWMgdm9pZCBmaW5kX2Jlc3RfbGluZV9tYXRjaGVzKAorCWludCBzdGFydF9hLAorCWludCBsZW5ndGhfYSwKKwlpbnQgc3RhcnRfYiwKKwlpbnQgbG9jYWxfbGluZV9iLAorCXN0cnVjdCBmaW5nZXJwcmludCAqZmluZ2VycHJpbnRzX2EsCisJc3RydWN0IGZpbmdlcnByaW50ICpmaW5nZXJwcmludHNfYiwKKwlpbnQgKnNpbWlsYXJpdGllcywKKwlpbnQgKmNlcnRhaW50aWVzLAorCWludCAqc2Vjb25kX2Jlc3RfcmVzdWx0LAorCWludCAqcmVzdWx0LAorCWNvbnN0IGludCBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EsCisJY29uc3Qgc3RydWN0IGxpbmVfbnVtYmVyX21hcHBpbmcgKm1hcF9saW5lX251bWJlcl9pbl9iX3RvX2EpCit7CisKKwlpbnQgaSwgc2VhcmNoX3N0YXJ0LCBzZWFyY2hfZW5kLCBjbG9zZXN0X2xvY2FsX2xpbmVfYSwgKnNpbWlsYXJpdHksCisJCWJlc3Rfc2ltaWxhcml0eSA9IDAsIHNlY29uZF9iZXN0X3NpbWlsYXJpdHkgPSAwLAorCQliZXN0X3NpbWlsYXJpdHlfaW5kZXggPSAwLCBzZWNvbmRfYmVzdF9zaW1pbGFyaXR5X2luZGV4ID0gMDsKKworCS8qIGNlcnRhaW50eSBoYXMgYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWQgc28gbm8gbmVlZCB0byByZWRvIHRoZSB3b3JrICovCisJaWYgKGNlcnRhaW50aWVzW2xvY2FsX2xpbmVfYl0gIT0gQ0VSVEFJTlRZX05PVF9DQUxDVUxBVEVEKQorCQlyZXR1cm47CisKKwljbG9zZXN0X2xvY2FsX2xpbmVfYSA9IG1hcF9saW5lX251bWJlcigKKwkJbG9jYWxfbGluZV9iICsgc3RhcnRfYiwgbWFwX2xpbmVfbnVtYmVyX2luX2JfdG9fYSkgLSBzdGFydF9hOworCisJc2VhcmNoX3N0YXJ0ID0gY2xvc2VzdF9sb2NhbF9saW5lX2EgLSBtYXhfc2VhcmNoX2Rpc3RhbmNlX2E7CisJaWYgKHNlYXJjaF9zdGFydCA8IDApCisJCXNlYXJjaF9zdGFydCA9IDA7CisKKwlzZWFyY2hfZW5kID0gY2xvc2VzdF9sb2NhbF9saW5lX2EgKyBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EgKyAxOworCWlmIChzZWFyY2hfZW5kID4gbGVuZ3RoX2EpCisJCXNlYXJjaF9lbmQgPSBsZW5ndGhfYTsKKworCWZvciAoaSA9IHNlYXJjaF9zdGFydDsgaSA8IHNlYXJjaF9lbmQ7ICsraSkgeworCQlzaW1pbGFyaXR5ID0gZ2V0X3NpbWlsYXJpdHkoc2ltaWxhcml0aWVzLAorCQkJCQkgICAgaSwgbG9jYWxfbGluZV9iLAorCQkJCQkgICAgY2xvc2VzdF9sb2NhbF9saW5lX2EsCisJCQkJCSAgICBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EpOworCQlpZiAoKnNpbWlsYXJpdHkgPT0gLTEpIHsKKwkJCS8qIFRoaXMgdmFsdWUgd2lsbCBuZXZlciBleGNlZWQgMTAgYnV0IGFzc2VydCBqdXN0IGluCisJCQkgKiBjYXNlCisJCQkgKi8KKwkJCWFzc2VydChhYnMoaSAtIGNsb3Nlc3RfbG9jYWxfbGluZV9hKSA8IDEwMDApOworCQkJLyogc2NhbGUgdGhlIHNpbWlsYXJpdHkgYnkgKDEwMDAgLSBkaXN0YW5jZSBmcm9tCisJCQkgKiBjbG9zZXN0IGxpbmUpIHRvIGFjdCBhcyBhIHRpZSBicmVhayBiZXR3ZWVuIGxpbmVzCisJCQkgKiB0aGF0IG90aGVyd2lzZSBhcmUgZXF1YWxseSBzaW1pbGFyLgorCQkJICovCisJCQkqc2ltaWxhcml0eSA9IGZpbmdlcnByaW50X3NpbWlsYXJpdHkoCisJCQkJZmluZ2VycHJpbnRzX2IgKyBsb2NhbF9saW5lX2IsCisJCQkJZmluZ2VycHJpbnRzX2EgKyBpKSAqCisJCQkJKDEwMDAgLSBhYnMoaSAtIGNsb3Nlc3RfbG9jYWxfbGluZV9hKSk7CisJCX0KKwkJaWYgKCpzaW1pbGFyaXR5ID4gYmVzdF9zaW1pbGFyaXR5KSB7CisJCQlzZWNvbmRfYmVzdF9zaW1pbGFyaXR5ID0gYmVzdF9zaW1pbGFyaXR5OworCQkJc2Vjb25kX2Jlc3Rfc2ltaWxhcml0eV9pbmRleCA9IGJlc3Rfc2ltaWxhcml0eV9pbmRleDsKKwkJCWJlc3Rfc2ltaWxhcml0eSA9ICpzaW1pbGFyaXR5OworCQkJYmVzdF9zaW1pbGFyaXR5X2luZGV4ID0gaTsKKwkJfSBlbHNlIGlmICgqc2ltaWxhcml0eSA+IHNlY29uZF9iZXN0X3NpbWlsYXJpdHkpIHsKKwkJCXNlY29uZF9iZXN0X3NpbWlsYXJpdHkgPSAqc2ltaWxhcml0eTsKKwkJCXNlY29uZF9iZXN0X3NpbWlsYXJpdHlfaW5kZXggPSBpOworCQl9CisJfQorCisJaWYgKGJlc3Rfc2ltaWxhcml0eSA9PSAwKSB7CisJCS8qIHRoaXMgbGluZSBkZWZpbml0ZWx5IGRvZXNuJ3QgbWF0Y2ggd2l0aCBhbnl0aGluZy4gTWFyayBpdAorCQkgKiB3aXRoIHRoaXMgc3BlY2lhbCB2YWx1ZSBzbyBpdCBkb2Vzbid0IGdldCBpbnZhbGlkYXRlZCBhbmQKKwkJICogd29uJ3QgYmUgcmVjYWxjdWxhdGVkLgorCQkgKi8KKwkJY2VydGFpbnRpZXNbbG9jYWxfbGluZV9iXSA9IENFUlRBSU5fTk9USElOR19NQVRDSEVTOworCQlyZXN1bHRbbG9jYWxfbGluZV9iXSA9IC0xOworCX0gZWxzZSB7CisJCS8qIENhbGN1bGF0ZSB0aGUgY2VydGFpbnR5IHdpdGggd2hpY2ggdGhpcyBsaW5lIG1hdGNoZXMuCisJCSAqIElmIHRoZSBsaW5lIG1hdGNoZXMgd2VsbCB3aXRoIHR3byBsaW5lcyB0aGVuIHRoYXQgcmVkdWNlcworCQkgKiB0aGUgY2VydGFpbnR5LiBIb3dldmVyIHdlIHN0aWxsIHdhbnQgdG8gcHJpb3JpdGlzZSBtYXRjaGluZworCQkgKiBhIGxpbmUgdGhhdCBtYXRjaGVzIHZlcnkgd2VsbCB3aXRoIHR3byBsaW5lcyBvdmVyIG1hdGNoaW5nIGEKKwkJICogbGluZSB0aGF0IG1hdGNoZXMgcG9vcmx5IHdpdGggb25lIGxpbmUsIGhlbmNlIGRvdWJsaW5nCisJCSAqIGJlc3Rfc2ltaWxhcml0eS4KKwkJICogVGhpcyBtZWFucyB0aGF0IGlmIHdlIGhhdmUKKwkJICogbGluZSBYIHRoYXQgbWF0Y2hlcyBvbmx5IG9uZSBsaW5lIHdpdGggYSBzY29yZSBvZiAzLAorCQkgKiBsaW5lIFkgdGhhdCBtYXRjaGVzIHR3byBsaW5lcyBlcXVhbGx5IHdpdGggYSBzY29yZSBvZiA1LAorCQkgKiBhbmQgbGluZSBaIHRoYXQgbWF0Y2hlcyBvbmx5IG9uZSBsaW5lIHdpdGggYSBzY29yZSBvciAyLAorCQkgKiB0aGVuIHRoZSBsaW5lcyBpbiBvcmRlciBvZiBjZXJ0YWludHkgYXJlIFgsIFksIFouCisJCSAqLworCQljZXJ0YWludGllc1tsb2NhbF9saW5lX2JdID0gYmVzdF9zaW1pbGFyaXR5ICogMiAtCisJCQlzZWNvbmRfYmVzdF9zaW1pbGFyaXR5OworCisJCS8qIFdlIGtlZXAgYm90aCB0aGUgYmVzdCBhbmQgc2Vjb25kIGJlc3QgcmVzdWx0cyB0byBhbGxvdyB1cyB0bworCQkgKiBjaGVjayBhdCBhIGxhdGVyIHN0YWdlIG9mIHRoZSBtYXRjaGluZyBwcm9jZXNzIHdoZXRoZXIgdGhlCisJCSAqIHJlc3VsdCBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZC4KKwkJICovCisJCXJlc3VsdFtsb2NhbF9saW5lX2JdID0gc3RhcnRfYSArIGJlc3Rfc2ltaWxhcml0eV9pbmRleDsKKwkJc2Vjb25kX2Jlc3RfcmVzdWx0W2xvY2FsX2xpbmVfYl0gPQorCQkJc3RhcnRfYSArIHNlY29uZF9iZXN0X3NpbWlsYXJpdHlfaW5kZXg7CisJfQorfQorCisvKgorICogVGhpcyBmaW5kcyB0aGUgbGluZSB0aGF0IHdlIGNhbiBtYXRjaCB3aXRoIHRoZSBtb3N0IGNvbmZpZGVuY2UsIGFuZAorICogdXNlcyBpdCBhcyBhIHBhcnRpdGlvbi4gSXQgdGhlbiBjYWxscyBpdHNlbGYgb24gdGhlIGxpbmVzIG9uIGVpdGhlciBzaWRlIG9mCisgKiB0aGF0IHBhcnRpdGlvbi4gSW4gdGhpcyB3YXkgd2UgYXZvaWQgbGluZXMgYXBwZWFyaW5nIG91dCBvZiBvcmRlciwgYW5kCisgKiByZXRhaW4gYSBzZW5zaWJsZSBsaW5lIG9yZGVyaW5nLgorICogXHBhcmFtIHN0YXJ0X2EgaW5kZXggb2YgdGhlIGZpcnN0IGxpbmUgaW4gQSB3aXRoIHdoaWNoIGxpbmVzIGluIEIgbWF5IGJlCisgKiAJCSAgY29tcGFyZWQuCisgKiBccGFyYW0gc3RhcnRfYiBpbmRleCBvZiB0aGUgZmlyc3QgbGluZSBpbiBCIGZvciB3aGljaCBtYXRjaGluZyBzaG91bGQgYmUKKyAqIAkJICBkb25lLgorICogXHBhcmFtIGxlbmd0aF9hIG51bWJlciBvZiBsaW5lcyBpbiBBIHdpdGggd2hpY2ggbGluZXMgaW4gQiBtYXkgYmUgY29tcGFyZWQuCisgKiBccGFyYW0gbGVuZ3RoX2IgbnVtYmVyIG9mIGxpbmVzIGluIEIgZm9yIHdoaWNoIG1hdGNoaW5nIHNob3VsZCBiZSBkb25lLgorICogXHBhcmFtIGZpbmdlcnByaW50c19hIG11dGFibGUgYXJyYXkgb2YgZmluZ2VycHJpbnRzIGluIEEuIFRoZSBmaXJzdCBlbGVtZW50CisgKiAJCQkgY29ycmVzcG9uZHMgdG8gdGhlIGxpbmUgYXQgc3RhcnRfYS4KKyAqIFxwYXJhbSBmaW5nZXJwcmludHNfYiBhcnJheSBvZiBmaW5nZXJwcmludHMgaW4gQi4gVGhlIGZpcnN0IGVsZW1lbnQKKyAqIAkJCSBjb3JyZXNwb25kcyB0byB0aGUgbGluZSBhdCBzdGFydF9iLgorICogXHBhcmFtIHNpbWlsYXJpdGllcyAyLWRpbWVuc2lvbmFsIGFycmF5IG9mIHNpbWlsYXJpdGllcyBiZXR3ZWVuIGxpbmVzIGluIEEKKyAqIAkJICAgICAgIGFuZCBCLiBTZWUgZ2V0X3NpbWlsYXJpdHkoKSBmb3IgbW9yZSBkZXRhaWxzLgorICogXHBhcmFtIGNlcnRhaW50aWVzIGFycmF5IG9mIHZhbHVlcyBpbmRpY2F0aW5nIGhvdyBzdHJvbmdseSBhIGxpbmUgaW4gQiBpcworICogCQkgICAgICBtYXRjaGVkIHdpdGggc29tZSBsaW5lIGluIEEuCisgKiBccGFyYW0gc2Vjb25kX2Jlc3RfcmVzdWx0IGFycmF5IG9mIGFic29sdXRlIGluZGljZXMgaW4gQSBmb3IgdGhlIHNlY29uZAorICogCQkJICAgICBjbG9zZXN0IG1hdGNoIG9mIGEgbGluZSBpbiBCLgorICogXHBhcmFtIHJlc3VsdCBhcnJheSBvZiBhYnNvbHV0ZSBpbmRpY2VzIGluIEEgZm9yIHRoZSBjbG9zZXN0IG1hdGNoIG9mIGEgbGluZQorICogCQkgaW4gQi4KKyAqIFxwYXJhbSBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EgbWF4aW11bSBkaXN0YW5jZSBpbiBsaW5lcyBmcm9tIHRoZSBjbG9zZXN0IGxpbmUKKyAqIAkJCSAgICAgIGluIEEgZm9yIG90aGVyIGxpbmVzIGluIEEgZm9yIHdoaWNoCisgKiAJCQkgICAgICBzaW1pbGFyaXRpZXMgbWF5IGJlIGNhbGN1bGF0ZWQuCisgKiBccGFyYW0gbWF4X3NlYXJjaF9kaXN0YW5jZV9iIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBncmVhdGVzdCBwb3NzaWJsZQorICogCQkJICAgICAgZGlzdGFuY2UgYmV0d2VlbiBsaW5lcyBpbiBCIHN1Y2ggdGhhdCB0aGV5IHdpbGwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aCBiZSBjb21wYXJlZCB3aXRoIHRoZSBzYW1lIGxpbmUgaW4gQQorICogCQkJICAgICAgYWNjb3JkaW5nIHRvIG1heF9zZWFyY2hfZGlzdGFuY2VfYS4KKyAqIFxwYXJhbSBtYXBfbGluZV9udW1iZXJfaW5fYl90b19hIHBhcmFtZXRlciB0byBtYXBfbGluZV9udW1iZXIoKS4KKyAqLworc3RhdGljIHZvaWQgZnV6enlfZmluZF9tYXRjaGluZ19saW5lc19yZWN1cnNlKAorCWludCBzdGFydF9hLCBpbnQgc3RhcnRfYiwKKwlpbnQgbGVuZ3RoX2EsIGludCBsZW5ndGhfYiwKKwlzdHJ1Y3QgZmluZ2VycHJpbnQgKmZpbmdlcnByaW50c19hLAorCXN0cnVjdCBmaW5nZXJwcmludCAqZmluZ2VycHJpbnRzX2IsCisJaW50ICpzaW1pbGFyaXRpZXMsCisJaW50ICpjZXJ0YWludGllcywKKwlpbnQgKnNlY29uZF9iZXN0X3Jlc3VsdCwKKwlpbnQgKnJlc3VsdCwKKwlpbnQgbWF4X3NlYXJjaF9kaXN0YW5jZV9hLAorCWludCBtYXhfc2VhcmNoX2Rpc3RhbmNlX2IsCisJY29uc3Qgc3RydWN0IGxpbmVfbnVtYmVyX21hcHBpbmcgKm1hcF9saW5lX251bWJlcl9pbl9iX3RvX2EpCit7CisJaW50IGksIGludmFsaWRhdGVfbWluLCBpbnZhbGlkYXRlX21heCwgb2Zmc2V0X2IsCisJCXNlY29uZF9oYWxmX3N0YXJ0X2EsIHNlY29uZF9oYWxmX3N0YXJ0X2IsCisJCXNlY29uZF9oYWxmX2xlbmd0aF9hLCBzZWNvbmRfaGFsZl9sZW5ndGhfYiwKKwkJbW9zdF9jZXJ0YWluX2xpbmVfYSwgbW9zdF9jZXJ0YWluX2xvY2FsX2xpbmVfYiA9IC0xLAorCQltb3N0X2NlcnRhaW5fbGluZV9jZXJ0YWludHkgPSAtMSwKKwkJY2xvc2VzdF9sb2NhbF9saW5lX2E7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoX2I7ICsraSkgeworCQlmaW5kX2Jlc3RfbGluZV9tYXRjaGVzKHN0YXJ0X2EsCisJCQkJICAgICAgIGxlbmd0aF9hLAorCQkJCSAgICAgICBzdGFydF9iLAorCQkJCSAgICAgICBpLAorCQkJCSAgICAgICBmaW5nZXJwcmludHNfYSwKKwkJCQkgICAgICAgZmluZ2VycHJpbnRzX2IsCisJCQkJICAgICAgIHNpbWlsYXJpdGllcywKKwkJCQkgICAgICAgY2VydGFpbnRpZXMsCisJCQkJICAgICAgIHNlY29uZF9iZXN0X3Jlc3VsdCwKKwkJCQkgICAgICAgcmVzdWx0LAorCQkJCSAgICAgICBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EsCisJCQkJICAgICAgIG1hcF9saW5lX251bWJlcl9pbl9iX3RvX2EpOworCisJCWlmIChjZXJ0YWludGllc1tpXSA+IG1vc3RfY2VydGFpbl9saW5lX2NlcnRhaW50eSkgeworCQkJbW9zdF9jZXJ0YWluX2xpbmVfY2VydGFpbnR5ID0gY2VydGFpbnRpZXNbaV07CisJCQltb3N0X2NlcnRhaW5fbG9jYWxfbGluZV9iID0gaTsKKwkJfQorCX0KKworCS8qIE5vIG1hdGNoZXMuICovCisJaWYgKG1vc3RfY2VydGFpbl9sb2NhbF9saW5lX2IgPT0gLTEpCisJCXJldHVybjsKKworCW1vc3RfY2VydGFpbl9saW5lX2EgPSByZXN1bHRbbW9zdF9jZXJ0YWluX2xvY2FsX2xpbmVfYl07CisKKwkvKgorCSAqIFN1YnRyYWN0IHRoZSBtb3N0IGNlcnRhaW4gbGluZSdzIGZpbmdlcnByaW50IGluIEIgZnJvbSB0aGUgbWF0Y2hlZAorCSAqIGZpbmdlcnByaW50IGluIEEuIFRoaXMgbWVhbnMgdGhhdCBvdGhlciBsaW5lcyBpbiBCIGNhbid0IGFsc28gbWF0Y2gKKwkgKiB0aGUgc2FtZSBwYXJ0cyBvZiB0aGUgbGluZSBpbiBBLgorCSAqLworCWZpbmdlcnByaW50X3N1YnRyYWN0KGZpbmdlcnByaW50c19hICsgbW9zdF9jZXJ0YWluX2xpbmVfYSAtIHN0YXJ0X2EsCisJCQkgICAgIGZpbmdlcnByaW50c19iICsgbW9zdF9jZXJ0YWluX2xvY2FsX2xpbmVfYik7CisKKwkvKiBJbnZhbGlkYXRlIHJlc3VsdHMgdGhhdCBtYXkgYmUgYWZmZWN0ZWQgYnkgdGhlIGNob2ljZSBvZiBtb3N0CisJICogY2VydGFpbiBsaW5lLgorCSAqLworCWludmFsaWRhdGVfbWluID0gbW9zdF9jZXJ0YWluX2xvY2FsX2xpbmVfYiAtIG1heF9zZWFyY2hfZGlzdGFuY2VfYjsKKwlpbnZhbGlkYXRlX21heCA9IG1vc3RfY2VydGFpbl9sb2NhbF9saW5lX2IgKyBtYXhfc2VhcmNoX2Rpc3RhbmNlX2IgKyAxOworCWlmIChpbnZhbGlkYXRlX21pbiA8IDApCisJCWludmFsaWRhdGVfbWluID0gMDsKKwlpZiAoaW52YWxpZGF0ZV9tYXggPiBsZW5ndGhfYikKKwkJaW52YWxpZGF0ZV9tYXggPSBsZW5ndGhfYjsKKworCS8qIEFzIHRoZSBmaW5nZXJwcmludCBpbiBBIGhhcyBjaGFuZ2VkLCBkaXNjYXJkIHByZXZpb3VzbHkgY2FsY3VsYXRlZAorCSAqIHNpbWlsYXJpdHkgdmFsdWVzIHdpdGggdGhhdCBmaW5nZXJwcmludC4KKwkgKi8KKwlmb3IgKGkgPSBpbnZhbGlkYXRlX21pbjsgaSA8IGludmFsaWRhdGVfbWF4OyArK2kpIHsKKwkJY2xvc2VzdF9sb2NhbF9saW5lX2EgPSBtYXBfbGluZV9udW1iZXIoCisJCQlpICsgc3RhcnRfYiwgbWFwX2xpbmVfbnVtYmVyX2luX2JfdG9fYSkgLSBzdGFydF9hOworCisJCS8qIENoZWNrIHRoYXQgdGhlIGxpbmVzIGluIEEgYW5kIEIgYXJlIGNsb3NlIGVub3VnaCB0aGF0IHRoZXJlCisJCSAqIGlzIGEgc2ltaWxhcml0eSB2YWx1ZSBmb3IgdGhlbS4KKwkJICovCisJCWlmIChhYnMobW9zdF9jZXJ0YWluX2xpbmVfYSAtIHN0YXJ0X2EgLSBjbG9zZXN0X2xvY2FsX2xpbmVfYSkgPgorCQkJbWF4X3NlYXJjaF9kaXN0YW5jZV9hKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCSpnZXRfc2ltaWxhcml0eShzaW1pbGFyaXRpZXMsIG1vc3RfY2VydGFpbl9saW5lX2EgLSBzdGFydF9hLAorCQkJCWksIGNsb3Nlc3RfbG9jYWxfbGluZV9hLAorCQkJCW1heF9zZWFyY2hfZGlzdGFuY2VfYSkgPSAtMTsKKwl9CisKKwkvKiBNb3JlIGludmFsaWRhdGluZyBvZiByZXN1bHRzIHRoYXQgbWF5IGJlIGFmZmVjdGVkIGJ5IHRoZSBjaG9pY2Ugb2YKKwkgKiBtb3N0IGNlcnRhaW4gbGluZS4KKwkgKiBEaXNjYXJkIHRoZSBtYXRjaGVzIGZvciBsaW5lcyBpbiBCIHRoYXQgYXJlIGN1cnJlbnRseSBtYXRjaGVkIHdpdGggYQorCSAqIGxpbmUgaW4gQSBzdWNoIHRoYXQgdGhlaXIgb3JkZXJpbmcgY29udHJhZGljdHMgdGhlIG9yZGVyaW5nIGltcG9zZWQKKwkgKiBieSB0aGUgY2hvaWNlIG9mIG1vc3QgY2VydGFpbiBsaW5lLgorCSAqLworCWZvciAoaSA9IG1vc3RfY2VydGFpbl9sb2NhbF9saW5lX2IgLSAxOyBpID49IGludmFsaWRhdGVfbWluOyAtLWkpIHsKKwkJLyogSW4gdGhpcyBsb29wIHdlIGRpc2NhcmQgcmVzdWx0cyBmb3IgbGluZXMgaW4gQiB0aGF0IGFyZQorCQkgKiBiZWZvcmUgbW9zdC1jZXJ0YWluLWxpbmUtQiBidXQgYXJlIG1hdGNoZWQgd2l0aCBhIGxpbmUgaW4gQQorCQkgKiB0aGF0IGlzIGFmdGVyIG1vc3QtY2VydGFpbi1saW5lLUEuCisJCSAqLworCQlpZiAoY2VydGFpbnRpZXNbaV0gPj0gMCAmJgorCQkgICAgKHJlc3VsdFtpXSA+PSBtb3N0X2NlcnRhaW5fbGluZV9hIHx8CisJCSAgICAgc2Vjb25kX2Jlc3RfcmVzdWx0W2ldID49IG1vc3RfY2VydGFpbl9saW5lX2EpKSB7CisJCQljZXJ0YWludGllc1tpXSA9IENFUlRBSU5UWV9OT1RfQ0FMQ1VMQVRFRDsKKwkJfQorCX0KKwlmb3IgKGkgPSBtb3N0X2NlcnRhaW5fbG9jYWxfbGluZV9iICsgMTsgaSA8IGludmFsaWRhdGVfbWF4OyArK2kpIHsKKwkJLyogSW4gdGhpcyBsb29wIHdlIGRpc2NhcmQgcmVzdWx0cyBmb3IgbGluZXMgaW4gQiB0aGF0IGFyZQorCQkgKiBhZnRlciBtb3N0LWNlcnRhaW4tbGluZS1CIGJ1dCBhcmUgbWF0Y2hlZCB3aXRoIGEgbGluZSBpbiBBCisJCSAqIHRoYXQgaXMgYmVmb3JlIG1vc3QtY2VydGFpbi1saW5lLUEuCisJCSAqLworCQlpZiAoY2VydGFpbnRpZXNbaV0gPj0gMCAmJgorCQkgICAgKHJlc3VsdFtpXSA8PSBtb3N0X2NlcnRhaW5fbGluZV9hIHx8CisJCSAgICAgc2Vjb25kX2Jlc3RfcmVzdWx0W2ldIDw9IG1vc3RfY2VydGFpbl9saW5lX2EpKSB7CisJCQljZXJ0YWludGllc1tpXSA9IENFUlRBSU5UWV9OT1RfQ0FMQ1VMQVRFRDsKKwkJfQorCX0KKworCS8qIFJlcGVhdCB0aGUgbWF0Y2hpbmcgcHJvY2VzcyBmb3IgbGluZXMgYmVmb3JlIHRoZSBtb3N0IGNlcnRhaW4gbGluZS4KKwkgKi8KKwlpZiAobW9zdF9jZXJ0YWluX2xvY2FsX2xpbmVfYiA+IDApIHsKKwkJZnV6enlfZmluZF9tYXRjaGluZ19saW5lc19yZWN1cnNlKAorCQkJc3RhcnRfYSwgc3RhcnRfYiwKKwkJCW1vc3RfY2VydGFpbl9saW5lX2EgKyAxIC0gc3RhcnRfYSwKKwkJCW1vc3RfY2VydGFpbl9sb2NhbF9saW5lX2IsCisJCQlmaW5nZXJwcmludHNfYSwgZmluZ2VycHJpbnRzX2IsIHNpbWlsYXJpdGllcywKKwkJCWNlcnRhaW50aWVzLCBzZWNvbmRfYmVzdF9yZXN1bHQsIHJlc3VsdCwKKwkJCW1heF9zZWFyY2hfZGlzdGFuY2VfYSwKKwkJCW1heF9zZWFyY2hfZGlzdGFuY2VfYiwKKwkJCW1hcF9saW5lX251bWJlcl9pbl9iX3RvX2EpOworCX0KKwkvKiBSZXBlYXQgdGhlIG1hdGNoaW5nIHByb2Nlc3MgZm9yIGxpbmVzIGFmdGVyIHRoZSBtb3N0IGNlcnRhaW4gbGluZS4KKwkgKi8KKwlpZiAobW9zdF9jZXJ0YWluX2xvY2FsX2xpbmVfYiArIDEgPCBsZW5ndGhfYikgeworCQlzZWNvbmRfaGFsZl9zdGFydF9hID0gbW9zdF9jZXJ0YWluX2xpbmVfYTsKKwkJb2Zmc2V0X2IgPSBtb3N0X2NlcnRhaW5fbG9jYWxfbGluZV9iICsgMTsKKwkJc2Vjb25kX2hhbGZfc3RhcnRfYiA9IHN0YXJ0X2IgKyBvZmZzZXRfYjsKKwkJc2Vjb25kX2hhbGZfbGVuZ3RoX2EgPQorCQkJbGVuZ3RoX2EgKyBzdGFydF9hIC0gc2Vjb25kX2hhbGZfc3RhcnRfYTsKKwkJc2Vjb25kX2hhbGZfbGVuZ3RoX2IgPQorCQkJbGVuZ3RoX2IgKyBzdGFydF9iIC0gc2Vjb25kX2hhbGZfc3RhcnRfYjsKKwkJZnV6enlfZmluZF9tYXRjaGluZ19saW5lc19yZWN1cnNlKAorCQkJc2Vjb25kX2hhbGZfc3RhcnRfYSwgc2Vjb25kX2hhbGZfc3RhcnRfYiwKKwkJCXNlY29uZF9oYWxmX2xlbmd0aF9hLCBzZWNvbmRfaGFsZl9sZW5ndGhfYiwKKwkJCWZpbmdlcnByaW50c19hICsgc2Vjb25kX2hhbGZfc3RhcnRfYSAtIHN0YXJ0X2EsCisJCQlmaW5nZXJwcmludHNfYiArIG9mZnNldF9iLAorCQkJc2ltaWxhcml0aWVzICsKKwkJCQlvZmZzZXRfYiAqIChtYXhfc2VhcmNoX2Rpc3RhbmNlX2EgKiAyICsgMSksCisJCQljZXJ0YWludGllcyArIG9mZnNldF9iLAorCQkJc2Vjb25kX2Jlc3RfcmVzdWx0ICsgb2Zmc2V0X2IsIHJlc3VsdCArIG9mZnNldF9iLAorCQkJbWF4X3NlYXJjaF9kaXN0YW5jZV9hLAorCQkJbWF4X3NlYXJjaF9kaXN0YW5jZV9iLAorCQkJbWFwX2xpbmVfbnVtYmVyX2luX2JfdG9fYSk7CisJfQorfQorCisvKiBGaW5kIHRoZSBsaW5lcyBpbiB0aGUgcGFyZW50IGxpbmUgcmFuZ2UgdGhhdCBtb3N0IGNsb3NlbHkgbWF0Y2ggdGhlIGxpbmVzIGluCisgKiB0aGUgdGFyZ2V0IGxpbmUgcmFuZ2UuIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IG1hdGNoaW5nIGZpbmdlcnByaW50cyBpbiBlYWNoCisgKiBibGFtZV9vcmlnaW4sIGFuZCBjaG9vc2luZyB0aGUgYmVzdCBtYXRjaGVzIHRoYXQgcHJlc2VydmUgdGhlIGxpbmUgb3JkZXJpbmcuCisgKiBTZWUgc3RydWN0IGZpbmdlcnByaW50IGZvciBkZXRhaWxzIG9mIGZpbmdlcnByaW50IG1hdGNoaW5nLCBhbmQKKyAqIGZ1enp5X2ZpbmRfbWF0Y2hpbmdfbGluZXNfcmVjdXJzZSBmb3IgZGV0YWlscyBvZiBwcmVzZXJ2aW5nIGxpbmUgb3JkZXJpbmcuCisgKgorICogVGhlIHBlcmZvcm1hbmNlIGlzIGJlbGlldmVkIHRvIGJlIE8obiBsb2cgbikgaW4gdGhlIHR5cGljYWwgY2FzZSBhbmQgTyhuXjIpCisgKiBpbiBhIHBhdGhvbG9naWNhbCBjYXNlLCB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHRhcmdldCByYW5nZS4KKyAqLworc3RhdGljIGludCAqZnV6enlfZmluZF9tYXRjaGluZ19saW5lcyhzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwYXJlbnQsCisJCQkJICAgICAgc3RydWN0IGJsYW1lX29yaWdpbiAqdGFyZ2V0LAorCQkJCSAgICAgIGludCB0bG5vLCBpbnQgcGFyZW50X3Nsbm8sIGludCBzYW1lLAorCQkJCSAgICAgIGludCBwYXJlbnRfbGVuKQoreworCS8qIFdlIHVzZSB0aGUgdGVybWlub2xvZ3kgIkEiIGZvciB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgdGhlIGRpZmYgQUtBCisJICogcGFyZW50LCBhbmQgIkIiIGZvciB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIHRoZSBkaWZmIEFLQSB0YXJnZXQuICovCisJaW50IHN0YXJ0X2EgPSBwYXJlbnRfc2xubzsKKwlpbnQgbGVuZ3RoX2EgPSBwYXJlbnRfbGVuOworCWludCBzdGFydF9iID0gdGxubzsKKwlpbnQgbGVuZ3RoX2IgPSBzYW1lIC0gdGxubzsKKworCXN0cnVjdCBsaW5lX251bWJlcl9tYXBwaW5nIG1hcF9saW5lX251bWJlcl9pbl9iX3RvX2EgPSB7CisJCXN0YXJ0X2EsIGxlbmd0aF9hLCBzdGFydF9iLCBsZW5ndGhfYgorCX07CisKKwlzdHJ1Y3QgZmluZ2VycHJpbnQgKmZpbmdlcnByaW50c19hID0gcGFyZW50LT5maW5nZXJwcmludHM7CisJc3RydWN0IGZpbmdlcnByaW50ICpmaW5nZXJwcmludHNfYiA9IHRhcmdldC0+ZmluZ2VycHJpbnRzOworCisJaW50IGksICpyZXN1bHQsICpzZWNvbmRfYmVzdF9yZXN1bHQsCisJCSpjZXJ0YWludGllcywgKnNpbWlsYXJpdGllcywgc2ltaWxhcml0eV9jb3VudDsKKworCS8qCisJICogbWF4X3NlYXJjaF9kaXN0YW5jZV9hIG1lYW5zIHRoYXQgZ2l2ZW4gYSBsaW5lIGluIEIsIGNvbXBhcmUgaXQgdG8KKwkgKiB0aGUgbGluZSBpbiBBIHRoYXQgaXMgY2xvc2VzdCB0byBpdHMgcG9zaXRpb24sIGFuZCB0aGUgbGluZXMgaW4gQQorCSAqIHRoYXQgYXJlIG5vIGdyZWF0ZXIgdGhhbiBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EgbGluZXMgYXdheSBmcm9tIHRoZQorCSAqIGNsb3Nlc3QgbGluZSBpbiBBLgorCSAqCisJICogbWF4X3NlYXJjaF9kaXN0YW5jZV9iIGlzIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBncmVhdGVzdCBwb3NzaWJsZQorCSAqIGRpc3RhbmNlIGJldHdlZW4gbGluZXMgaW4gQiBzdWNoIHRoYXQgdGhleSB3aWxsIGJvdGggYmUgY29tcGFyZWQKKwkgKiB3aXRoIHRoZSBzYW1lIGxpbmUgaW4gQSBhY2NvcmRpbmcgdG8gbWF4X3NlYXJjaF9kaXN0YW5jZV9hLgorCSAqLworCWludCBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EgPSAxMCwgbWF4X3NlYXJjaF9kaXN0YW5jZV9iOworCisJaWYgKGxlbmd0aF9hIDw9IDApCisJCXJldHVybiBOVUxMOworCisJaWYgKG1heF9zZWFyY2hfZGlzdGFuY2VfYSA+PSBsZW5ndGhfYSkKKwkJbWF4X3NlYXJjaF9kaXN0YW5jZV9hID0gbGVuZ3RoX2EgPyBsZW5ndGhfYSAtIDEgOiAwOworCisJbWF4X3NlYXJjaF9kaXN0YW5jZV9iID0gKCgyICogbWF4X3NlYXJjaF9kaXN0YW5jZV9hICsgMSkgKiBsZW5ndGhfYgorCQkJCSAtIDEpIC8gbGVuZ3RoX2E7CisKKwlyZXN1bHQgPSB4Y2FsbG9jKHNpemVvZihpbnQpLCBsZW5ndGhfYik7CisJc2Vjb25kX2Jlc3RfcmVzdWx0ID0geGNhbGxvYyhzaXplb2YoaW50KSwgbGVuZ3RoX2IpOworCWNlcnRhaW50aWVzID0geGNhbGxvYyhzaXplb2YoaW50KSwgbGVuZ3RoX2IpOworCisJLyogU2VlIGdldF9zaW1pbGFyaXR5KCkgZm9yIGRldGFpbHMgb2Ygc2ltaWxhcml0aWVzLiAqLworCXNpbWlsYXJpdHlfY291bnQgPSBsZW5ndGhfYiAqIChtYXhfc2VhcmNoX2Rpc3RhbmNlX2EgKiAyICsgMSk7CisJc2ltaWxhcml0aWVzID0geGNhbGxvYyhzaXplb2YoaW50KSwgc2ltaWxhcml0eV9jb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoX2I7ICsraSkgeworCQlyZXN1bHRbaV0gPSAtMTsKKwkJc2Vjb25kX2Jlc3RfcmVzdWx0W2ldID0gLTE7CisJCWNlcnRhaW50aWVzW2ldID0gQ0VSVEFJTlRZX05PVF9DQUxDVUxBVEVEOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzaW1pbGFyaXR5X2NvdW50OyArK2kpCisJCXNpbWlsYXJpdGllc1tpXSA9IC0xOworCisJZnV6enlfZmluZF9tYXRjaGluZ19saW5lc19yZWN1cnNlKHN0YXJ0X2EsIHN0YXJ0X2IsCisJCQkJCSAgbGVuZ3RoX2EsIGxlbmd0aF9iLAorCQkJCQkgIGZpbmdlcnByaW50c19hICsgc3RhcnRfYSwKKwkJCQkJICBmaW5nZXJwcmludHNfYiArIHN0YXJ0X2IsCisJCQkJCSAgc2ltaWxhcml0aWVzLAorCQkJCQkgIGNlcnRhaW50aWVzLAorCQkJCQkgIHNlY29uZF9iZXN0X3Jlc3VsdCwKKwkJCQkJICByZXN1bHQsCisJCQkJCSAgbWF4X3NlYXJjaF9kaXN0YW5jZV9hLAorCQkJCQkgIG1heF9zZWFyY2hfZGlzdGFuY2VfYiwKKwkJCQkJICAmbWFwX2xpbmVfbnVtYmVyX2luX2JfdG9fYSk7CisKKwlmcmVlKHNpbWlsYXJpdGllcyk7CisJZnJlZShjZXJ0YWludGllcyk7CisJZnJlZShzZWNvbmRfYmVzdF9yZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZmlsbF9vcmlnaW5fZmluZ2VycHJpbnRzKHN0cnVjdCBibGFtZV9vcmlnaW4gKm8pCit7CisJaW50ICpsaW5lX3N0YXJ0czsKKworCWlmIChvLT5maW5nZXJwcmludHMpCisJCXJldHVybjsKKwlvLT5udW1fbGluZXMgPSBmaW5kX2xpbmVfc3RhcnRzKCZsaW5lX3N0YXJ0cywgby0+ZmlsZS5wdHIsCisJCQkJCW8tPmZpbGUuc2l6ZSk7CisJby0+ZmluZ2VycHJpbnRzID0geGNhbGxvYyhzaXplb2Yoc3RydWN0IGZpbmdlcnByaW50KSwgby0+bnVtX2xpbmVzKTsKKwlnZXRfbGluZV9maW5nZXJwcmludHMoby0+ZmluZ2VycHJpbnRzLCBvLT5maWxlLnB0ciwgbGluZV9zdGFydHMsCisJCQkgICAgICAwLCBvLT5udW1fbGluZXMpOworCWZyZWUobGluZV9zdGFydHMpOworfQorCitzdGF0aWMgdm9pZCBkcm9wX29yaWdpbl9maW5nZXJwcmludHMoc3RydWN0IGJsYW1lX29yaWdpbiAqbykKK3sKKwlpZiAoby0+ZmluZ2VycHJpbnRzKSB7CisJCWZyZWVfbGluZV9maW5nZXJwcmludHMoby0+ZmluZ2VycHJpbnRzLCBvLT5udW1fbGluZXMpOworCQlvLT5udW1fbGluZXMgPSAwOworCQlGUkVFX0FORF9OVUxMKG8tPmZpbmdlcnByaW50cyk7CisJfQorfQorCisvKgorICogR2l2ZW4gYW4gb3JpZ2luLCBwcmVwYXJlIG1tZmlsZV90IHN0cnVjdHVyZSB0byBiZSB1c2VkIGJ5IHRoZQorICogZGlmZiBtYWNoaW5lcnkKKyAqLworc3RhdGljIHZvaWQgZmlsbF9vcmlnaW5fYmxvYihzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsCisJCQkgICAgIHN0cnVjdCBibGFtZV9vcmlnaW4gKm8sIG1tZmlsZV90ICpmaWxlLAorCQkJICAgICBpbnQgKm51bV9yZWFkX2Jsb2IsIGludCBmaWxsX2ZpbmdlcnByaW50cykKK3sKKwlpZiAoIW8tPmZpbGUucHRyKSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBmaWxlX3NpemU7CisKKwkJKCpudW1fcmVhZF9ibG9iKSsrOworCQlpZiAob3B0LT5mbGFncy5hbGxvd190ZXh0Y29udiAmJgorCQkgICAgdGV4dGNvbnZfb2JqZWN0KG9wdC0+cmVwbywgby0+cGF0aCwgby0+bW9kZSwKKwkJCQkgICAgJm8tPmJsb2Jfb2lkLCAxLCAmZmlsZS0+cHRyLCAmZmlsZV9zaXplKSkKKwkJCTsKKwkJZWxzZQorCQkJZmlsZS0+cHRyID0gcmVhZF9vYmplY3RfZmlsZSgmby0+YmxvYl9vaWQsICZ0eXBlLAorCQkJCQkJICAgICAmZmlsZV9zaXplKTsKKwkJZmlsZS0+c2l6ZSA9IGZpbGVfc2l6ZTsKKworCQlpZiAoIWZpbGUtPnB0cikKKwkJCWRpZSgiQ2Fubm90IHJlYWQgYmxvYiAlcyBmb3IgcGF0aCAlcyIsCisJCQkgICAgb2lkX3RvX2hleCgmby0+YmxvYl9vaWQpLAorCQkJICAgIG8tPnBhdGgpOworCQlvLT5maWxlID0gKmZpbGU7CisJfQorCWVsc2UKKwkJKmZpbGUgPSBvLT5maWxlOworCWlmIChmaWxsX2ZpbmdlcnByaW50cykKKwkJZmlsbF9vcmlnaW5fZmluZ2VycHJpbnRzKG8pOworfQorCitzdGF0aWMgdm9pZCBkcm9wX29yaWdpbl9ibG9iKHN0cnVjdCBibGFtZV9vcmlnaW4gKm8pCit7CisJRlJFRV9BTkRfTlVMTChvLT5maWxlLnB0cik7CisJZHJvcF9vcmlnaW5fZmluZ2VycHJpbnRzKG8pOworfQorCisvKgorICogQW55IG1lcmdlIG9mIGJsYW1lcyBoYXBwZW5zIG9uIGxpc3RzIG9mIGJsYW1lcyB0aGF0IGFycml2ZWQgdmlhCisgKiBkaWZmZXJlbnQgcGFyZW50cyBpbiBhIHNpbmdsZSBzdXNwZWN0LiAgSW4gdGhpcyBjYXNlLCB3ZSB3YW50IHRvCisgKiBzb3J0IGFjY29yZGluZyB0byB0aGUgc3VzcGVjdCBsaW5lIG51bWJlcnMgYXMgb3Bwb3NlZCB0byB0aGUgZmluYWwKKyAqIGltYWdlIGxpbmUgbnVtYmVycy4gIFRoZSBmdW5jdGlvbiBib2R5IGlzIHNvbWV3aGF0IGxvbmdpc2ggYmVjYXVzZQorICogaXQgYXZvaWRzIHVubmVjZXNzYXJ5IHdyaXRlcy4KKyAqLworCitzdGF0aWMgc3RydWN0IGJsYW1lX2VudHJ5ICpibGFtZV9tZXJnZShzdHJ1Y3QgYmxhbWVfZW50cnkgKmxpc3QxLAorCQkJCSAgICAgICBzdHJ1Y3QgYmxhbWVfZW50cnkgKmxpc3QyKQoreworCXN0cnVjdCBibGFtZV9lbnRyeSAqcDEgPSBsaXN0MSwgKnAyID0gbGlzdDIsCisJCSoqdGFpbCA9ICZsaXN0MTsKKworCWlmICghcDEpCisJCXJldHVybiBwMjsKKwlpZiAoIXAyKQorCQlyZXR1cm4gcDE7CisKKwlpZiAocDEtPnNfbG5vIDw9IHAyLT5zX2xubykgeworCQlkbyB7CisJCQl0YWlsID0gJnAxLT5uZXh0OworCQkJaWYgKChwMSA9ICp0YWlsKSA9PSBOVUxMKSB7CisJCQkJKnRhaWwgPSBwMjsKKwkJCQlyZXR1cm4gbGlzdDE7CisJCQl9CisJCX0gd2hpbGUgKHAxLT5zX2xubyA8PSBwMi0+c19sbm8pOworCX0KKwlmb3IgKDs7KSB7CisJCSp0YWlsID0gcDI7CisJCWRvIHsKKwkJCXRhaWwgPSAmcDItPm5leHQ7CisJCQlpZiAoKHAyID0gKnRhaWwpID09IE5VTEwpICB7CisJCQkJKnRhaWwgPSBwMTsKKwkJCQlyZXR1cm4gbGlzdDE7CisJCQl9CisJCX0gd2hpbGUgKHAxLT5zX2xubyA+IHAyLT5zX2xubyk7CisJCSp0YWlsID0gcDE7CisJCWRvIHsKKwkJCXRhaWwgPSAmcDEtPm5leHQ7CisJCQlpZiAoKHAxID0gKnRhaWwpID09IE5VTEwpIHsKKwkJCQkqdGFpbCA9IHAyOworCQkJCXJldHVybiBsaXN0MTsKKwkJCX0KKwkJfSB3aGlsZSAocDEtPnNfbG5vIDw9IHAyLT5zX2xubyk7CisJfQorfQorCitzdGF0aWMgdm9pZCAqZ2V0X25leHRfYmxhbWUoY29uc3Qgdm9pZCAqcCkKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgYmxhbWVfZW50cnkgKilwKS0+bmV4dDsKK30KKworc3RhdGljIHZvaWQgc2V0X25leHRfYmxhbWUodm9pZCAqcDEsIHZvaWQgKnAyKQoreworCSgoc3RydWN0IGJsYW1lX2VudHJ5ICopcDEpLT5uZXh0ID0gcDI7Cit9CisKKy8qCisgKiBGaW5hbCBpbWFnZSBsaW5lIG51bWJlcnMgYXJlIGFsbCBkaWZmZXJlbnQsIHNvIHdlIGRvbid0IG5lZWQgYQorICogdGhyZWUtd2F5IGNvbXBhcmlzb24gaGVyZS4KKyAqLworCitzdGF0aWMgaW50IGNvbXBhcmVfYmxhbWVfZmluYWwoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQoreworCXJldHVybiAoKHN0cnVjdCBibGFtZV9lbnRyeSAqKXAxKS0+bG5vID4gKChzdHJ1Y3QgYmxhbWVfZW50cnkgKilwMiktPmxubworCQk/IDEgOiAtMTsKK30KKworc3RhdGljIGludCBjb21wYXJlX2JsYW1lX3N1c3BlY3QoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQoreworCWNvbnN0IHN0cnVjdCBibGFtZV9lbnRyeSAqczEgPSBwMSwgKnMyID0gcDI7CisJLyoKKwkgKiB0byBhbGxvdyBmb3IgY29sbGF0aW5nIHN1c3BlY3RzLCB3ZSBzb3J0IGFjY29yZGluZyB0byB0aGUKKwkgKiByZXNwZWN0aXZlIHBvaW50ZXIgdmFsdWUgYXMgdGhlIHByaW1hcnkgc29ydGluZyBjcml0ZXJpb24uCisJICogVGhlIGFjdHVhbCByZWxhdGlvbiBpcyBwcmV0dHkgdW5pbXBvcnRhbnQgYXMgbG9uZyBhcyBpdAorCSAqIGVzdGFibGlzaGVzIGEgdG90YWwgb3JkZXIuICBDb21wYXJpbmcgYXMgaW50ZWdlcnMgZ2l2ZXMgdXMKKwkgKiB0aGF0LgorCSAqLworCWlmIChzMS0+c3VzcGVjdCAhPSBzMi0+c3VzcGVjdCkKKwkJcmV0dXJuIChpbnRwdHJfdClzMS0+c3VzcGVjdCA+IChpbnRwdHJfdClzMi0+c3VzcGVjdCA/IDEgOiAtMTsKKwlpZiAoczEtPnNfbG5vID09IHMyLT5zX2xubykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHMxLT5zX2xubyA+IHMyLT5zX2xubyA/IDEgOiAtMTsKK30KKwordm9pZCBibGFtZV9zb3J0X2ZpbmFsKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYikKK3sKKwlzYi0+ZW50ID0gbGxpc3RfbWVyZ2Vzb3J0KHNiLT5lbnQsIGdldF9uZXh0X2JsYW1lLCBzZXRfbmV4dF9ibGFtZSwKKwkJCQkgIGNvbXBhcmVfYmxhbWVfZmluYWwpOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfY29tbWl0c19ieV9yZXZlcnNlX2NvbW1pdF9kYXRlKGNvbnN0IHZvaWQgKmEsCisJCQkJCQkgIGNvbnN0IHZvaWQgKmIsCisJCQkJCQkgIHZvaWQgKmMpCit7CisJcmV0dXJuIC1jb21wYXJlX2NvbW1pdHNfYnlfY29tbWl0X2RhdGUoYSwgYiwgYyk7Cit9CisKKy8qCisgKiBGb3IgZGVidWdnaW5nIC0tIG9yaWdpbiBpcyByZWZjb3VudGVkLCBhbmQgdGhpcyBhc3NlcnRzIHRoYXQKKyAqIHdlIGRvIG5vdCB1bmRlcmZsb3cuCisgKi8KK3N0YXRpYyB2b2lkIHNhbml0eV9jaGVja19yZWZjbnQoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiKQoreworCWludCBiYWEgPSAwOworCXN0cnVjdCBibGFtZV9lbnRyeSAqZW50OworCisJZm9yIChlbnQgPSBzYi0+ZW50OyBlbnQ7IGVudCA9IGVudC0+bmV4dCkgeworCQkvKiBOb2JvZHkgc2hvdWxkIGhhdmUgemVybyBvciBuZWdhdGl2ZSByZWZjbnQgKi8KKwkJaWYgKGVudC0+c3VzcGVjdC0+cmVmY250IDw9IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXMgaW4gJXMgaGFzIG5lZ2F0aXZlIHJlZmNudCAlZFxuIiwKKwkJCQllbnQtPnN1c3BlY3QtPnBhdGgsCisJCQkJb2lkX3RvX2hleCgmZW50LT5zdXNwZWN0LT5jb21taXQtPm9iamVjdC5vaWQpLAorCQkJCWVudC0+c3VzcGVjdC0+cmVmY250KTsKKwkJCWJhYSA9IDE7CisJCX0KKwl9CisJaWYgKGJhYSkKKwkJc2ItPm9uX3Nhbml0eV9mYWlsKHNiLCBiYWEpOworfQorCisvKgorICogSWYgdHdvIGJsYW1lIGVudHJpZXMgdGhhdCBhcmUgbmV4dCB0byBlYWNoIG90aGVyIGNhbWUgZnJvbQorICogY29udGlndW91cyBsaW5lcyBpbiB0aGUgc2FtZSBvcmlnaW4gKGkuZS4gPGNvbW1pdCwgcGF0aD4gcGFpciksCisgKiBtZXJnZSB0aGVtIHRvZ2V0aGVyLgorICovCit2b2lkIGJsYW1lX2NvYWxlc2NlKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYikKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudCwgKm5leHQ7CisKKwlmb3IgKGVudCA9IHNiLT5lbnQ7IGVudCAmJiAobmV4dCA9IGVudC0+bmV4dCk7IGVudCA9IG5leHQpIHsKKwkJaWYgKGVudC0+c3VzcGVjdCA9PSBuZXh0LT5zdXNwZWN0ICYmCisJCSAgICBlbnQtPnNfbG5vICsgZW50LT5udW1fbGluZXMgPT0gbmV4dC0+c19sbm8gJiYKKwkJICAgIGVudC0+aWdub3JlZCA9PSBuZXh0LT5pZ25vcmVkICYmCisJCSAgICBlbnQtPnVuYmxhbWFibGUgPT0gbmV4dC0+dW5ibGFtYWJsZSkgeworCQkJZW50LT5udW1fbGluZXMgKz0gbmV4dC0+bnVtX2xpbmVzOworCQkJZW50LT5uZXh0ID0gbmV4dC0+bmV4dDsKKwkJCWJsYW1lX29yaWdpbl9kZWNyZWYobmV4dC0+c3VzcGVjdCk7CisJCQlmcmVlKG5leHQpOworCQkJZW50LT5zY29yZSA9IDA7CisJCQluZXh0ID0gZW50OyAvKiBhZ2FpbiAqLworCQl9CisJfQorCisJaWYgKHNiLT5kZWJ1ZykgLyogc2FuaXR5ICovCisJCXNhbml0eV9jaGVja19yZWZjbnQoc2IpOworfQorCisvKgorICogTWVyZ2UgdGhlIGdpdmVuIHNvcnRlZCBsaXN0IG9mIGJsYW1lcyBpbnRvIGEgcHJlZXhpc3Rpbmcgb3JpZ2luLgorICogSWYgdGhlcmUgd2VyZSBubyBwcmV2aW91cyBibGFtZXMgdG8gdGhhdCBjb21taXQsIGl0IGlzIGVudGVyZWQgaW50bworICogdGhlIGNvbW1pdCBwcmlvcml0eSBxdWV1ZSBvZiB0aGUgc2NvcmUgYm9hcmQuCisgKi8KKworc3RhdGljIHZvaWQgcXVldWVfYmxhbWVzKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwgc3RydWN0IGJsYW1lX29yaWdpbiAqcG9yaWdpbiwKKwkJCSBzdHJ1Y3QgYmxhbWVfZW50cnkgKnNvcnRlZCkKK3sKKwlpZiAocG9yaWdpbi0+c3VzcGVjdHMpCisJCXBvcmlnaW4tPnN1c3BlY3RzID0gYmxhbWVfbWVyZ2UocG9yaWdpbi0+c3VzcGVjdHMsIHNvcnRlZCk7CisJZWxzZSB7CisJCXN0cnVjdCBibGFtZV9vcmlnaW4gKm87CisJCWZvciAobyA9IGdldF9ibGFtZV9zdXNwZWN0cyhwb3JpZ2luLT5jb21taXQpOyBvOyBvID0gby0+bmV4dCkgeworCQkJaWYgKG8tPnN1c3BlY3RzKSB7CisJCQkJcG9yaWdpbi0+c3VzcGVjdHMgPSBzb3J0ZWQ7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCXBvcmlnaW4tPnN1c3BlY3RzID0gc29ydGVkOworCQlwcmlvX3F1ZXVlX3B1dCgmc2ItPmNvbW1pdHMsIHBvcmlnaW4tPmNvbW1pdCk7CisJfQorfQorCisvKgorICogRmlsbCB0aGUgYmxvYl9zaGExIGZpZWxkIG9mIGFuIG9yaWdpbiBpZiBpdCBoYXNuJ3QsIHNvIHRoYXQgbGF0ZXIKKyAqIGNhbGwgdG8gZmlsbF9vcmlnaW5fYmxvYigpIGNhbiB1c2UgaXQgdG8gbG9jYXRlIHRoZSBkYXRhLiAgYmxvYl9zaGExCisgKiBmb3IgYW4gb3JpZ2luIGlzIGFsc28gdXNlZCB0byBwYXNzIHRoZSBibGFtZSBmb3IgdGhlIGVudGlyZSBmaWxlIHRvCisgKiB0aGUgcGFyZW50IHRvIGRldGVjdCB0aGUgY2FzZSB3aGVyZSBhIGNoaWxkJ3MgYmxvYiBpcyBpZGVudGljYWwgdG8KKyAqIHRoYXQgb2YgaXRzIHBhcmVudCdzLgorICoKKyAqIFRoaXMgYWxzbyBmaWxscyBvcmlnaW4tPm1vZGUgZm9yIGNvcnJlc3BvbmRpbmcgdHJlZSBwYXRoLgorICovCitzdGF0aWMgaW50IGZpbGxfYmxvYl9zaGExX2FuZF9tb2RlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgIHN0cnVjdCBibGFtZV9vcmlnaW4gKm9yaWdpbikKK3sKKwlpZiAoIWlzX251bGxfb2lkKCZvcmlnaW4tPmJsb2Jfb2lkKSkKKwkJcmV0dXJuIDA7CisJaWYgKGdldF90cmVlX2VudHJ5KHIsICZvcmlnaW4tPmNvbW1pdC0+b2JqZWN0Lm9pZCwgb3JpZ2luLT5wYXRoLCAmb3JpZ2luLT5ibG9iX29pZCwgJm9yaWdpbi0+bW9kZSkpCisJCWdvdG8gZXJyb3Jfb3V0OworCWlmIChvaWRfb2JqZWN0X2luZm8ociwgJm9yaWdpbi0+YmxvYl9vaWQsIE5VTEwpICE9IE9CSl9CTE9CKQorCQlnb3RvIGVycm9yX291dDsKKwlyZXR1cm4gMDsKKyBlcnJvcl9vdXQ6CisJb2lkY2xyKCZvcmlnaW4tPmJsb2Jfb2lkKTsKKwlvcmlnaW4tPm1vZGUgPSBTX0lGSU5WQUxJRDsKKwlyZXR1cm4gLTE7Cit9CisKK3N0cnVjdCBibGFtZV9ibG9vbV9kYXRhIHsKKwkvKgorCSAqIENoYW5nZWQtcGF0aCBCbG9vbSBmaWx0ZXIga2V5cy4gVGhlc2UgY2FuIGhlbHAgcHJldmVudAorCSAqIGNvbXB1dGluZyBkaWZmcyBhZ2FpbnN0IGZpcnN0IHBhcmVudHMsIGJ1dCB3ZSBuZWVkIHRvCisJICogZXhwYW5kIHRoZSBsaXN0IGFzIGNvZGUgaXMgbW92ZWQgb3IgZmlsZXMgYXJlIHJlbmFtZWQuCisJICovCisJc3RydWN0IGJsb29tX2ZpbHRlcl9zZXR0aW5ncyAqc2V0dGluZ3M7CisJc3RydWN0IGJsb29tX2tleSAqKmtleXM7CisJaW50IG5yOworCWludCBhbGxvYzsKK307CisKK3N0YXRpYyBpbnQgYmxvb21fY291bnRfcXVlcmllcyA9IDA7CitzdGF0aWMgaW50IGJsb29tX2NvdW50X25vID0gMDsKK3N0YXRpYyBpbnQgbWF5YmVfY2hhbmdlZF9wYXRoKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICAgc3RydWN0IGJsYW1lX29yaWdpbiAqb3JpZ2luLAorCQkJICAgICAgc3RydWN0IGJsYW1lX2Jsb29tX2RhdGEgKmJkKQoreworCWludCBpOworCXN0cnVjdCBibG9vbV9maWx0ZXIgKmZpbHRlcjsKKworCWlmICghYmQpCisJCXJldHVybiAxOworCisJaWYgKG9yaWdpbi0+Y29tbWl0LT5nZW5lcmF0aW9uID09IEdFTkVSQVRJT05fTlVNQkVSX0lORklOSVRZKQorCQlyZXR1cm4gMTsKKworCWZpbHRlciA9IGdldF9ibG9vbV9maWx0ZXIociwgb3JpZ2luLT5jb21taXQsIDApOworCisJaWYgKCFmaWx0ZXIpCisJCXJldHVybiAxOworCisJYmxvb21fY291bnRfcXVlcmllcysrOworCWZvciAoaSA9IDA7IGkgPCBiZC0+bnI7IGkrKykgeworCQlpZiAoYmxvb21fZmlsdGVyX2NvbnRhaW5zKGZpbHRlciwKKwkJCQkJICBiZC0+a2V5c1tpXSwKKwkJCQkJICBiZC0+c2V0dGluZ3MpKQorCQkJcmV0dXJuIDE7CisJfQorCisJYmxvb21fY291bnRfbm8rKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRkX2Jsb29tX2tleShzdHJ1Y3QgYmxhbWVfYmxvb21fZGF0YSAqYmQsCisJCQkgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKCFiZCkKKwkJcmV0dXJuOworCisJaWYgKGJkLT5uciA+PSBiZC0+YWxsb2MpIHsKKwkJYmQtPmFsbG9jICo9IDI7CisJCVJFQUxMT0NfQVJSQVkoYmQtPmtleXMsIGJkLT5hbGxvYyk7CisJfQorCisJYmQtPmtleXNbYmQtPm5yXSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBibG9vbV9rZXkpKTsKKwlmaWxsX2Jsb29tX2tleShwYXRoLCBzdHJsZW4ocGF0aCksIGJkLT5rZXlzW2JkLT5ucl0sIGJkLT5zZXR0aW5ncyk7CisJYmQtPm5yKys7Cit9CisKKy8qCisgKiBXZSBoYXZlIGFuIG9yaWdpbiAtLSBjaGVjayBpZiB0aGUgc2FtZSBwYXRoIGV4aXN0cyBpbiB0aGUKKyAqIHBhcmVudCBhbmQgcmV0dXJuIGFuIG9yaWdpbiBzdHJ1Y3R1cmUgdG8gcmVwcmVzZW50IGl0LgorICovCitzdGF0aWMgc3RydWN0IGJsYW1lX29yaWdpbiAqZmluZF9vcmlnaW4oc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCXN0cnVjdCBjb21taXQgKnBhcmVudCwKKwkJCQkJc3RydWN0IGJsYW1lX29yaWdpbiAqb3JpZ2luLAorCQkJCQlzdHJ1Y3QgYmxhbWVfYmxvb21fZGF0YSAqYmQpCit7CisJc3RydWN0IGJsYW1lX29yaWdpbiAqcG9yaWdpbjsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZfb3B0czsKKwljb25zdCBjaGFyICpwYXRoc1syXTsKKworCS8qIEZpcnN0IGNoZWNrIGFueSBleGlzdGluZyBvcmlnaW5zICovCisJZm9yIChwb3JpZ2luID0gZ2V0X2JsYW1lX3N1c3BlY3RzKHBhcmVudCk7IHBvcmlnaW47IHBvcmlnaW4gPSBwb3JpZ2luLT5uZXh0KQorCQlpZiAoIXN0cmNtcChwb3JpZ2luLT5wYXRoLCBvcmlnaW4tPnBhdGgpKSB7CisJCQkvKgorCQkJICogVGhlIHNhbWUgcGF0aCBiZXR3ZWVuIG9yaWdpbiBhbmQgaXRzIHBhcmVudAorCQkJICogd2l0aG91dCByZW5hbWluZyAtLSB0aGUgbW9zdCBjb21tb24gY2FzZS4KKwkJCSAqLworCQkJcmV0dXJuIGJsYW1lX29yaWdpbl9pbmNyZWYgKHBvcmlnaW4pOworCQl9CisKKwkvKiBTZWUgaWYgdGhlIG9yaWdpbi0+cGF0aCBpcyBkaWZmZXJlbnQgYmV0d2VlbiBwYXJlbnQKKwkgKiBhbmQgb3JpZ2luIGZpcnN0LiAgTW9zdCBvZiB0aGUgdGltZSB0aGV5IGFyZSB0aGUKKwkgKiBzYW1lIGFuZCBkaWZmLXRyZWUgaXMgZmFpcmx5IGVmZmljaWVudCBhYm91dCB0aGlzLgorCSAqLworCXJlcG9fZGlmZl9zZXR1cChyLCAmZGlmZl9vcHRzKTsKKwlkaWZmX29wdHMuZmxhZ3MucmVjdXJzaXZlID0gMTsKKwlkaWZmX29wdHMuZGV0ZWN0X3JlbmFtZSA9IDA7CisJZGlmZl9vcHRzLm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisJcGF0aHNbMF0gPSBvcmlnaW4tPnBhdGg7CisJcGF0aHNbMV0gPSBOVUxMOworCisJcGFyc2VfcGF0aHNwZWMoJmRpZmZfb3B0cy5wYXRoc3BlYywKKwkJICAgICAgIFBBVEhTUEVDX0FMTF9NQUdJQyAmIH5QQVRIU1BFQ19MSVRFUkFMLAorCQkgICAgICAgUEFUSFNQRUNfTElURVJBTF9QQVRILCAiIiwgcGF0aHMpOworCWRpZmZfc2V0dXBfZG9uZSgmZGlmZl9vcHRzKTsKKworCWlmIChpc19udWxsX29pZCgmb3JpZ2luLT5jb21taXQtPm9iamVjdC5vaWQpKQorCQlkb19kaWZmX2NhY2hlKGdldF9jb21taXRfdHJlZV9vaWQocGFyZW50KSwgJmRpZmZfb3B0cyk7CisJZWxzZSB7CisJCWludCBjb21wdXRlX2RpZmYgPSAxOworCQlpZiAob3JpZ2luLT5jb21taXQtPnBhcmVudHMgJiYKKwkJICAgICFvaWRjbXAoJnBhcmVudC0+b2JqZWN0Lm9pZCwKKwkJCSAgICAmb3JpZ2luLT5jb21taXQtPnBhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQpKQorCQkJY29tcHV0ZV9kaWZmID0gbWF5YmVfY2hhbmdlZF9wYXRoKHIsIG9yaWdpbiwgYmQpOworCisJCWlmIChjb21wdXRlX2RpZmYpCisJCQlkaWZmX3RyZWVfb2lkKGdldF9jb21taXRfdHJlZV9vaWQocGFyZW50KSwKKwkJCQkgICAgICBnZXRfY29tbWl0X3RyZWVfb2lkKG9yaWdpbi0+Y29tbWl0KSwKKwkJCQkgICAgICAiIiwgJmRpZmZfb3B0cyk7CisJfQorCWRpZmZjb3JlX3N0ZCgmZGlmZl9vcHRzKTsKKworCWlmICghZGlmZl9xdWV1ZWRfZGlmZi5ucikgeworCQkvKiBUaGUgcGF0aCBpcyB0aGUgc2FtZSBhcyBwYXJlbnQgKi8KKwkJcG9yaWdpbiA9IGdldF9vcmlnaW4ocGFyZW50LCBvcmlnaW4tPnBhdGgpOworCQlvaWRjcHkoJnBvcmlnaW4tPmJsb2Jfb2lkLCAmb3JpZ2luLT5ibG9iX29pZCk7CisJCXBvcmlnaW4tPm1vZGUgPSBvcmlnaW4tPm1vZGU7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogU2luY2Ugb3JpZ2luLT5wYXRoIGlzIGEgcGF0aHNwZWMsIGlmIHRoZSBwYXJlbnQKKwkJICogY29tbWl0IGhhZCBpdCBhcyBhIGRpcmVjdG9yeSwgd2Ugd2lsbCBzZWUgYSB3aG9sZQorCQkgKiBidW5jaCBvZiBkZWxldGlvbiBvZiBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IHRoYXQgd2UKKwkJICogZG8gbm90IGNhcmUgYWJvdXQuCisJCSAqLworCQlpbnQgaTsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBOVUxMOworCQlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKSB7CisJCQljb25zdCBjaGFyICpuYW1lOworCQkJcCA9IGRpZmZfcXVldWVkX2RpZmYucXVldWVbaV07CisJCQluYW1lID0gcC0+b25lLT5wYXRoID8gcC0+b25lLT5wYXRoIDogcC0+dHdvLT5wYXRoOworCQkJaWYgKCFzdHJjbXAobmFtZSwgb3JpZ2luLT5wYXRoKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoIXApCisJCQlkaWUoImludGVybmFsIGVycm9yIGluIGJsYW1lOjpmaW5kX29yaWdpbiIpOworCQlzd2l0Y2ggKHAtPnN0YXR1cykgeworCQlkZWZhdWx0OgorCQkJZGllKCJpbnRlcm5hbCBlcnJvciBpbiBibGFtZTo6ZmluZF9vcmlnaW4gKCVjKSIsCisJCQkgICAgcC0+c3RhdHVzKTsKKwkJY2FzZSAnTSc6CisJCQlwb3JpZ2luID0gZ2V0X29yaWdpbihwYXJlbnQsIG9yaWdpbi0+cGF0aCk7CisJCQlvaWRjcHkoJnBvcmlnaW4tPmJsb2Jfb2lkLCAmcC0+b25lLT5vaWQpOworCQkJcG9yaWdpbi0+bW9kZSA9IHAtPm9uZS0+bW9kZTsKKwkJCWJyZWFrOworCQljYXNlICdBJzoKKwkJY2FzZSAnVCc6CisJCQkvKiBEaWQgbm90IGV4aXN0IGluIHBhcmVudCwgb3IgdHlwZSBjaGFuZ2VkICovCisJCQlicmVhazsKKwkJfQorCX0KKwlkaWZmX2ZsdXNoKCZkaWZmX29wdHMpOworCWNsZWFyX3BhdGhzcGVjKCZkaWZmX29wdHMucGF0aHNwZWMpOworCXJldHVybiBwb3JpZ2luOworfQorCisvKgorICogV2UgaGF2ZSBhbiBvcmlnaW4gLS0gZmluZCB0aGUgcGF0aCB0aGF0IGNvcnJlc3BvbmRzIHRvIGl0IGluIGl0cworICogcGFyZW50IGFuZCByZXR1cm4gYW4gb3JpZ2luIHN0cnVjdHVyZSB0byByZXByZXNlbnQgaXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYmxhbWVfb3JpZ2luICpmaW5kX3JlbmFtZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50LAorCQkJCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvcmlnaW4sCisJCQkJCXN0cnVjdCBibGFtZV9ibG9vbV9kYXRhICpiZCkKK3sKKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwb3JpZ2luID0gTlVMTDsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZfb3B0czsKKwlpbnQgaTsKKworCXJlcG9fZGlmZl9zZXR1cChyLCAmZGlmZl9vcHRzKTsKKwlkaWZmX29wdHMuZmxhZ3MucmVjdXJzaXZlID0gMTsKKwlkaWZmX29wdHMuZGV0ZWN0X3JlbmFtZSA9IERJRkZfREVURUNUX1JFTkFNRTsKKwlkaWZmX29wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlkaWZmX29wdHMuc2luZ2xlX2ZvbGxvdyA9IG9yaWdpbi0+cGF0aDsKKwlkaWZmX3NldHVwX2RvbmUoJmRpZmZfb3B0cyk7CisKKwlpZiAoaXNfbnVsbF9vaWQoJm9yaWdpbi0+Y29tbWl0LT5vYmplY3Qub2lkKSkKKwkJZG9fZGlmZl9jYWNoZShnZXRfY29tbWl0X3RyZWVfb2lkKHBhcmVudCksICZkaWZmX29wdHMpOworCWVsc2UKKwkJZGlmZl90cmVlX29pZChnZXRfY29tbWl0X3RyZWVfb2lkKHBhcmVudCksCisJCQkgICAgICBnZXRfY29tbWl0X3RyZWVfb2lkKG9yaWdpbi0+Y29tbWl0KSwKKwkJCSAgICAgICIiLCAmZGlmZl9vcHRzKTsKKwlkaWZmY29yZV9zdGQoJmRpZmZfb3B0cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXTsKKwkJaWYgKChwLT5zdGF0dXMgPT0gJ1InIHx8IHAtPnN0YXR1cyA9PSAnQycpICYmCisJCSAgICAhc3RyY21wKHAtPnR3by0+cGF0aCwgb3JpZ2luLT5wYXRoKSkgeworCQkJYWRkX2Jsb29tX2tleShiZCwgcC0+b25lLT5wYXRoKTsKKwkJCXBvcmlnaW4gPSBnZXRfb3JpZ2luKHBhcmVudCwgcC0+b25lLT5wYXRoKTsKKwkJCW9pZGNweSgmcG9yaWdpbi0+YmxvYl9vaWQsICZwLT5vbmUtPm9pZCk7CisJCQlwb3JpZ2luLT5tb2RlID0gcC0+b25lLT5tb2RlOworCQkJYnJlYWs7CisJCX0KKwl9CisJZGlmZl9mbHVzaCgmZGlmZl9vcHRzKTsKKwljbGVhcl9wYXRoc3BlYygmZGlmZl9vcHRzLnBhdGhzcGVjKTsKKwlyZXR1cm4gcG9yaWdpbjsKK30KKworLyoKKyAqIEFwcGVuZCBhIG5ldyBibGFtZSBlbnRyeSB0byBhIGdpdmVuIG91dHB1dCBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQgYWRkX2JsYW1lX2VudHJ5KHN0cnVjdCBibGFtZV9lbnRyeSAqKipxdWV1ZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgYmxhbWVfZW50cnkgKnNyYykKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmUgPSB4bWFsbG9jKHNpemVvZigqZSkpOworCW1lbWNweShlLCBzcmMsIHNpemVvZigqZSkpOworCWJsYW1lX29yaWdpbl9pbmNyZWYoZS0+c3VzcGVjdCk7CisKKwllLT5uZXh0ID0gKipxdWV1ZTsKKwkqKnF1ZXVlID0gZTsKKwkqcXVldWUgPSAmZS0+bmV4dDsKK30KKworLyoKKyAqIHNyYyB0eXBpY2FsbHkgaXMgb24tc3RhY2s7IHdlIHdhbnQgdG8gY29weSB0aGUgaW5mb3JtYXRpb24gaW4gaXQgdG8KKyAqIGEgbWFsbG9jZWQgYmxhbWVfZW50cnkgdGhhdCBnZXRzIGFkZGVkIHRvIHRoZSBnaXZlbiBxdWV1ZS4gIFRoZQorICogb3JpZ2luIG9mIGRzdCBsb3NlcyBhIHJlZmNudC4KKyAqLworc3RhdGljIHZvaWQgZHVwX2VudHJ5KHN0cnVjdCBibGFtZV9lbnRyeSAqKipxdWV1ZSwKKwkJICAgICAgc3RydWN0IGJsYW1lX2VudHJ5ICpkc3QsIHN0cnVjdCBibGFtZV9lbnRyeSAqc3JjKQoreworCWJsYW1lX29yaWdpbl9pbmNyZWYoc3JjLT5zdXNwZWN0KTsKKwlibGFtZV9vcmlnaW5fZGVjcmVmKGRzdC0+c3VzcGVjdCk7CisJbWVtY3B5KGRzdCwgc3JjLCBzaXplb2YoKnNyYykpOworCWRzdC0+bmV4dCA9ICoqcXVldWU7CisJKipxdWV1ZSA9IGRzdDsKKwkqcXVldWUgPSAmZHN0LT5uZXh0OworfQorCitjb25zdCBjaGFyICpibGFtZV9udGhfbGluZShzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsIGxvbmcgbG5vKQoreworCXJldHVybiBzYi0+ZmluYWxfYnVmICsgc2ItPmxpbmVub1tsbm9dOworfQorCisvKgorICogSXQgaXMga25vd24gdGhhdCBsaW5lcyBiZXR3ZWVuIHRsbm8gdG8gc2FtZSBjYW1lIGZyb20gcGFyZW50LCBhbmQgZQorICogaGFzIGFuIG92ZXJsYXAgd2l0aCB0aGF0IHJhbmdlLiAgaXQgYWxzbyBpcyBrbm93biB0aGF0IHBhcmVudCdzCisgKiBsaW5lIHBsbm8gY29ycmVzcG9uZHMgdG8gZSdzIGxpbmUgdGxuby4KKyAqCisgKiAgICAgICAgICAgICAgICA8LS0tLSBlIC0tLS0tPgorICogICAgICAgICAgICAgICAgICAgPC0tLS0tLT4KKyAqICAgICAgICAgICAgICAgICAgIDwtLS0tLS0tLS0tLS0+CisgKiAgICAgICAgICAgICA8LS0tLS0tLS0tLS0tPgorICogICAgICAgICAgICAgPC0tLS0tLS0tLS0tLS0tLS0tLT4KKyAqCisgKiBTcGxpdCBlIGludG8gcG90ZW50aWFsbHkgdGhyZWUgcGFydHM7IGJlZm9yZSB0aGlzIGNodW5rLCB0aGUgY2h1bmsKKyAqIHRvIGJlIGJsYW1lZCBmb3IgdGhlIHBhcmVudCwgYW5kIGFmdGVyIHRoYXQgcG9ydGlvbi4KKyAqLworc3RhdGljIHZvaWQgc3BsaXRfb3ZlcmxhcChzdHJ1Y3QgYmxhbWVfZW50cnkgKnNwbGl0LAorCQkJICBzdHJ1Y3QgYmxhbWVfZW50cnkgKmUsCisJCQkgIGludCB0bG5vLCBpbnQgcGxubywgaW50IHNhbWUsCisJCQkgIHN0cnVjdCBibGFtZV9vcmlnaW4gKnBhcmVudCkKK3sKKwlpbnQgY2h1bmtfZW5kX2xubzsKKwlpbnQgaTsKKwltZW1zZXQoc3BsaXQsIDAsIHNpemVvZihzdHJ1Y3QgYmxhbWVfZW50cnkgWzNdKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXNwbGl0W2ldLmlnbm9yZWQgPSBlLT5pZ25vcmVkOworCQlzcGxpdFtpXS51bmJsYW1hYmxlID0gZS0+dW5ibGFtYWJsZTsKKwl9CisKKwlpZiAoZS0+c19sbm8gPCB0bG5vKSB7CisJCS8qIHRoZXJlIGlzIGEgcHJlLWNodW5rIHBhcnQgbm90IGJsYW1lZCBvbiBwYXJlbnQgKi8KKwkJc3BsaXRbMF0uc3VzcGVjdCA9IGJsYW1lX29yaWdpbl9pbmNyZWYoZS0+c3VzcGVjdCk7CisJCXNwbGl0WzBdLmxubyA9IGUtPmxubzsKKwkJc3BsaXRbMF0uc19sbm8gPSBlLT5zX2xubzsKKwkJc3BsaXRbMF0ubnVtX2xpbmVzID0gdGxubyAtIGUtPnNfbG5vOworCQlzcGxpdFsxXS5sbm8gPSBlLT5sbm8gKyB0bG5vIC0gZS0+c19sbm87CisJCXNwbGl0WzFdLnNfbG5vID0gcGxubzsKKwl9CisJZWxzZSB7CisJCXNwbGl0WzFdLmxubyA9IGUtPmxubzsKKwkJc3BsaXRbMV0uc19sbm8gPSBwbG5vICsgKGUtPnNfbG5vIC0gdGxubyk7CisJfQorCisJaWYgKHNhbWUgPCBlLT5zX2xubyArIGUtPm51bV9saW5lcykgeworCQkvKiB0aGVyZSBpcyBhIHBvc3QtY2h1bmsgcGFydCBub3QgYmxhbWVkIG9uIHBhcmVudCAqLworCQlzcGxpdFsyXS5zdXNwZWN0ID0gYmxhbWVfb3JpZ2luX2luY3JlZihlLT5zdXNwZWN0KTsKKwkJc3BsaXRbMl0ubG5vID0gZS0+bG5vICsgKHNhbWUgLSBlLT5zX2xubyk7CisJCXNwbGl0WzJdLnNfbG5vID0gZS0+c19sbm8gKyAoc2FtZSAtIGUtPnNfbG5vKTsKKwkJc3BsaXRbMl0ubnVtX2xpbmVzID0gZS0+c19sbm8gKyBlLT5udW1fbGluZXMgLSBzYW1lOworCQljaHVua19lbmRfbG5vID0gc3BsaXRbMl0ubG5vOworCX0KKwllbHNlCisJCWNodW5rX2VuZF9sbm8gPSBlLT5sbm8gKyBlLT5udW1fbGluZXM7CisJc3BsaXRbMV0ubnVtX2xpbmVzID0gY2h1bmtfZW5kX2xubyAtIHNwbGl0WzFdLmxubzsKKworCS8qCisJICogaWYgaXQgdHVybnMgb3V0IHRoZXJlIGlzIG5vdGhpbmcgdG8gYmxhbWUgdGhlIHBhcmVudCBmb3IsCisJICogZm9yZ2V0IGFib3V0IHRoZSBzcGxpdHRpbmcuICAhc3BsaXRbMV0uc3VzcGVjdCBzaWduYWxzIHRoaXMuCisJICovCisJaWYgKHNwbGl0WzFdLm51bV9saW5lcyA8IDEpCisJCXJldHVybjsKKwlzcGxpdFsxXS5zdXNwZWN0ID0gYmxhbWVfb3JpZ2luX2luY3JlZihwYXJlbnQpOworfQorCisvKgorICogc3BsaXRfb3ZlcmxhcCgpIGRpdmlkZWQgYW4gZXhpc3RpbmcgYmxhbWUgZSBpbnRvIHVwIHRvIHRocmVlIHBhcnRzCisgKiBpbiBzcGxpdC4gIEFueSBhc3NpZ25lZCBibGFtZSBpcyBtb3ZlZCB0byBxdWV1ZSB0bworICogcmVmbGVjdCB0aGUgc3BsaXQuCisgKi8KK3N0YXRpYyB2b2lkIHNwbGl0X2JsYW1lKHN0cnVjdCBibGFtZV9lbnRyeSAqKipibGFtZWQsCisJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKioqdW5ibGFtZWQsCisJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKnNwbGl0LAorCQkJc3RydWN0IGJsYW1lX2VudHJ5ICplKQoreworCWlmIChzcGxpdFswXS5zdXNwZWN0ICYmIHNwbGl0WzJdLnN1c3BlY3QpIHsKKwkJLyogVGhlIGZpcnN0IHBhcnQgKHJldXNlIHN0b3JhZ2UgZm9yIHRoZSBleGlzdGluZyBlbnRyeSBlKSAqLworCQlkdXBfZW50cnkodW5ibGFtZWQsIGUsICZzcGxpdFswXSk7CisKKwkJLyogVGhlIGxhc3QgcGFydCAtLSBtZSAqLworCQlhZGRfYmxhbWVfZW50cnkodW5ibGFtZWQsICZzcGxpdFsyXSk7CisKKwkJLyogLi4uIGFuZCB0aGUgbWlkZGxlIHBhcnQgLS0gcGFyZW50ICovCisJCWFkZF9ibGFtZV9lbnRyeShibGFtZWQsICZzcGxpdFsxXSk7CisJfQorCWVsc2UgaWYgKCFzcGxpdFswXS5zdXNwZWN0ICYmICFzcGxpdFsyXS5zdXNwZWN0KQorCQkvKgorCQkgKiBUaGUgcGFyZW50IGNvdmVycyB0aGUgZW50aXJlIGFyZWE7IHJldXNlIHN0b3JhZ2UgZm9yCisJCSAqIGUgYW5kIHJlcGxhY2UgaXQgd2l0aCB0aGUgcGFyZW50LgorCQkgKi8KKwkJZHVwX2VudHJ5KGJsYW1lZCwgZSwgJnNwbGl0WzFdKTsKKwllbHNlIGlmIChzcGxpdFswXS5zdXNwZWN0KSB7CisJCS8qIG1lIGFuZCB0aGVuIHBhcmVudCAqLworCQlkdXBfZW50cnkodW5ibGFtZWQsIGUsICZzcGxpdFswXSk7CisJCWFkZF9ibGFtZV9lbnRyeShibGFtZWQsICZzcGxpdFsxXSk7CisJfQorCWVsc2UgeworCQkvKiBwYXJlbnQgYW5kIHRoZW4gbWUgKi8KKwkJZHVwX2VudHJ5KGJsYW1lZCwgZSwgJnNwbGl0WzFdKTsKKwkJYWRkX2JsYW1lX2VudHJ5KHVuYmxhbWVkLCAmc3BsaXRbMl0pOworCX0KK30KKworLyoKKyAqIEFmdGVyIHNwbGl0dGluZyB0aGUgYmxhbWUsIHRoZSBvcmlnaW5zIHVzZWQgYnkgdGhlCisgKiBvbi1zdGFjayBibGFtZV9lbnRyeSBzaG91bGQgbG9zZSBvbmUgcmVmY250IGVhY2guCisgKi8KK3N0YXRpYyB2b2lkIGRlY3JlZl9zcGxpdChzdHJ1Y3QgYmxhbWVfZW50cnkgKnNwbGl0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJYmxhbWVfb3JpZ2luX2RlY3JlZihzcGxpdFtpXS5zdXNwZWN0KTsKK30KKworLyoKKyAqIHJldmVyc2VfYmxhbWUgcmV2ZXJzZXMgdGhlIGxpc3QgZ2l2ZW4gaW4gaGVhZCwgYXBwZW5kaW5nIHRhaWwuCisgKiBUaGF0IGFsbG93cyB1cyB0byBidWlsZCBsaXN0cyBpbiByZXZlcnNlIG9yZGVyLCB0aGVuIHJldmVyc2UgdGhlbQorICogYWZ0ZXJ3YXJkcy4gIFRoaXMgY2FuIGJlIGZhc3RlciB0aGFuIGJ1aWxkaW5nIHRoZSBsaXN0IGluIHByb3BlcgorICogb3JkZXIgcmlnaHQgYXdheS4gIFRoZSByZWFzb24gaXMgdGhhdCBidWlsZGluZyBpbiBwcm9wZXIgb3JkZXIKKyAqIHJlcXVpcmVzIHdyaXRpbmcgYSBsaW5rIGluIHRoZSBfcHJldmlvdXNfIGVsZW1lbnQsIHdoaWxlIGJ1aWxkaW5nCisgKiBpbiByZXZlcnNlIG9yZGVyIGp1c3QgcmVxdWlyZXMgcGxhY2luZyB0aGUgbGlzdCBoZWFkIGludG8gdGhlCisgKiBfY3VycmVudF8gZWxlbWVudC4KKyAqLworCitzdGF0aWMgc3RydWN0IGJsYW1lX2VudHJ5ICpyZXZlcnNlX2JsYW1lKHN0cnVjdCBibGFtZV9lbnRyeSAqaGVhZCwKKwkJCQkJIHN0cnVjdCBibGFtZV9lbnRyeSAqdGFpbCkKK3sKKwl3aGlsZSAoaGVhZCkgeworCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5leHQgPSBoZWFkLT5uZXh0OworCQloZWFkLT5uZXh0ID0gdGFpbDsKKwkJdGFpbCA9IGhlYWQ7CisJCWhlYWQgPSBuZXh0OworCX0KKwlyZXR1cm4gdGFpbDsKK30KKworLyoKKyAqIFNwbGl0cyBhIGJsYW1lIGVudHJ5IGludG8gdHdvIGVudHJpZXMgYXQgJ2xlbicgbGluZXMuICBUaGUgb3JpZ2luYWwgJ2UnCisgKiBjb25zaXN0cyBvZiBsZW4gbGluZXMsIGkuZS4gW2UtPmxubywgZS0+bG5vICsgbGVuKSwgYW5kIHRoZSBzZWNvbmQgcGFydCwKKyAqIHdoaWNoIGlzIHJldHVybmVkLCBjb25zaXN0cyBvZiB0aGUgcmVtYWluZGVyOiBbZS0+bG5vICsgbGVuLCBlLT5sbm8gKworICogZS0+bnVtX2xpbmVzKS4gIFRoZSBjYWxsZXIgbmVlZHMgdG8gc29ydCBvdXQgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgdGhlCisgKiBuZXcgZW50cnkncyBzdXNwZWN0LgorICovCitzdGF0aWMgc3RydWN0IGJsYW1lX2VudHJ5ICpzcGxpdF9ibGFtZV9hdChzdHJ1Y3QgYmxhbWVfZW50cnkgKmUsIGludCBsZW4sCisJCQkJCSAgc3RydWN0IGJsYW1lX29yaWdpbiAqbmV3X3N1c3BlY3QpCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICpuID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGJsYW1lX2VudHJ5KSk7CisKKwluLT5zdXNwZWN0ID0gbmV3X3N1c3BlY3Q7CisJbi0+aWdub3JlZCA9IGUtPmlnbm9yZWQ7CisJbi0+dW5ibGFtYWJsZSA9IGUtPnVuYmxhbWFibGU7CisJbi0+bG5vID0gZS0+bG5vICsgbGVuOworCW4tPnNfbG5vID0gZS0+c19sbm8gKyBsZW47CisJbi0+bnVtX2xpbmVzID0gZS0+bnVtX2xpbmVzIC0gbGVuOworCWUtPm51bV9saW5lcyA9IGxlbjsKKwllLT5zY29yZSA9IDA7CisJcmV0dXJuIG47Cit9CisKK3N0cnVjdCBibGFtZV9saW5lX3RyYWNrZXIgeworCWludCBpc19wYXJlbnQ7CisJaW50IHNfbG5vOworfTsKKworc3RhdGljIGludCBhcmVfbGluZXNfYWRqYWNlbnQoc3RydWN0IGJsYW1lX2xpbmVfdHJhY2tlciAqZmlyc3QsCisJCQkgICAgICBzdHJ1Y3QgYmxhbWVfbGluZV90cmFja2VyICpzZWNvbmQpCit7CisJcmV0dXJuIGZpcnN0LT5pc19wYXJlbnQgPT0gc2Vjb25kLT5pc19wYXJlbnQgJiYKKwkgICAgICAgZmlyc3QtPnNfbG5vICsgMSA9PSBzZWNvbmQtPnNfbG5vOworfQorCitzdGF0aWMgaW50IHNjYW5fcGFyZW50X3JhbmdlKHN0cnVjdCBmaW5nZXJwcmludCAqcF9mcHMsCisJCQkgICAgIHN0cnVjdCBmaW5nZXJwcmludCAqdF9mcHMsIGludCB0X2lkeCwKKwkJCSAgICAgaW50IGZyb20sIGludCBucl9saW5lcykKK3sKKwlpbnQgc2ltLCBwX2lkeDsKKwkjZGVmaW5lIEZJTkdFUlBSSU5UX0ZJTEVfVEhSRVNIT0xECTEwCisJaW50IGJlc3Rfc2ltX3ZhbCA9IEZJTkdFUlBSSU5UX0ZJTEVfVEhSRVNIT0xEOworCWludCBiZXN0X3NpbV9pZHggPSAtMTsKKworCWZvciAocF9pZHggPSBmcm9tOyBwX2lkeCA8IGZyb20gKyBucl9saW5lczsgcF9pZHgrKykgeworCQlzaW0gPSBmaW5nZXJwcmludF9zaW1pbGFyaXR5KCZ0X2Zwc1t0X2lkeF0sICZwX2Zwc1twX2lkeF0pOworCQlpZiAoc2ltIDwgYmVzdF9zaW1fdmFsKQorCQkJY29udGludWU7CisJCS8qIEJyZWFrIHRpZXMgd2l0aCB0aGUgY2xvc2VzdC10by10YXJnZXQgbGluZSBudW1iZXIgKi8KKwkJaWYgKHNpbSA9PSBiZXN0X3NpbV92YWwgJiYgYmVzdF9zaW1faWR4ICE9IC0xICYmCisJCSAgICBhYnMoYmVzdF9zaW1faWR4IC0gdF9pZHgpIDwgYWJzKHBfaWR4IC0gdF9pZHgpKQorCQkJY29udGludWU7CisJCWJlc3Rfc2ltX3ZhbCA9IHNpbTsKKwkJYmVzdF9zaW1faWR4ID0gcF9pZHg7CisJfQorCXJldHVybiBiZXN0X3NpbV9pZHg7Cit9CisKKy8qCisgKiBUaGUgZmlyc3QgcGFzcyBjaGVja3MgdGhlIGJsYW1lIGVudHJ5IChmcm9tIHRoZSB0YXJnZXQpIGFnYWluc3QgdGhlIHBhcmVudCdzCisgKiBkaWZmIGNodW5rLiAgSWYgdGhhdCBmYWlscyBmb3IgYSBsaW5lLCB0aGUgc2Vjb25kIHBhc3MgdHJpZXMgdG8gbWF0Y2ggdGhhdAorICogbGluZSB0byBhbnkgcGFydCBvZiBwYXJlbnQgZmlsZS4gIFRoYXQgY2F0Y2hlcyBjYXNlcyB3aGVyZSBhIGNoYW5nZSB3YXMKKyAqIGJyb2tlbiBpbnRvIHR3byBjaHVua3MgYnkgJ2NvbnRleHQuJworICovCitzdGF0aWMgdm9pZCBndWVzc19saW5lX2JsYW1lcyhzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwYXJlbnQsCisJCQkgICAgICBzdHJ1Y3QgYmxhbWVfb3JpZ2luICp0YXJnZXQsCisJCQkgICAgICBpbnQgdGxubywgaW50IG9mZnNldCwgaW50IHNhbWUsIGludCBwYXJlbnRfbGVuLAorCQkJICAgICAgc3RydWN0IGJsYW1lX2xpbmVfdHJhY2tlciAqbGluZV9ibGFtZXMpCit7CisJaW50IGksIGJlc3RfaWR4LCB0YXJnZXRfaWR4OworCWludCBwYXJlbnRfc2xubyA9IHRsbm8gKyBvZmZzZXQ7CisJaW50ICpmdXp6eV9tYXRjaGVzOworCisJZnV6enlfbWF0Y2hlcyA9IGZ1enp5X2ZpbmRfbWF0Y2hpbmdfbGluZXMocGFyZW50LCB0YXJnZXQsCisJCQkJCQkgIHRsbm8sIHBhcmVudF9zbG5vLCBzYW1lLAorCQkJCQkJICBwYXJlbnRfbGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2FtZSAtIHRsbm87IGkrKykgeworCQl0YXJnZXRfaWR4ID0gdGxubyArIGk7CisJCWlmIChmdXp6eV9tYXRjaGVzICYmIGZ1enp5X21hdGNoZXNbaV0gPj0gMCkgeworCQkJYmVzdF9pZHggPSBmdXp6eV9tYXRjaGVzW2ldOworCQl9IGVsc2UgeworCQkJYmVzdF9pZHggPSBzY2FuX3BhcmVudF9yYW5nZShwYXJlbnQtPmZpbmdlcnByaW50cywKKwkJCQkJCSAgICAgdGFyZ2V0LT5maW5nZXJwcmludHMsCisJCQkJCQkgICAgIHRhcmdldF9pZHgsIDAsCisJCQkJCQkgICAgIHBhcmVudC0+bnVtX2xpbmVzKTsKKwkJfQorCQlpZiAoYmVzdF9pZHggPj0gMCkgeworCQkJbGluZV9ibGFtZXNbaV0uaXNfcGFyZW50ID0gMTsKKwkJCWxpbmVfYmxhbWVzW2ldLnNfbG5vID0gYmVzdF9pZHg7CisJCX0gZWxzZSB7CisJCQlsaW5lX2JsYW1lc1tpXS5pc19wYXJlbnQgPSAwOworCQkJbGluZV9ibGFtZXNbaV0uc19sbm8gPSB0YXJnZXRfaWR4OworCQl9CisJfQorCWZyZWUoZnV6enlfbWF0Y2hlcyk7Cit9CisKKy8qCisgKiBUaGlzIGRlY2lkZXMgd2hpY2ggcGFydHMgb2YgYSBibGFtZSBlbnRyeSBnbyB0byB0aGUgcGFyZW50IChhZGRlZCB0byB0aGUKKyAqIGlnbm9yZWRwIGxpc3QpIGFuZCB3aGljaCBzdGF5IHdpdGggdGhlIHRhcmdldCAoYWRkZWQgdG8gdGhlIGRpZmZwIGxpc3QpLiAgVGhlCisgKiBhY3R1YWwgZGVjaXNpb24gd2FzIG1hZGUgaW4gYSBzZXBhcmF0ZSBoZXVyaXN0aWMgZnVuY3Rpb24sIGFuZCB0aG9zZSBhbnN3ZXJzCisgKiBmb3IgdGhlIGxpbmVzIGluICdlJyBhcmUgaW4gbGluZV9ibGFtZXMuICBUaGlzIGNvbnN1bWVzIGUsIGVzc2VudGlhbGx5CisgKiBwdXR0aW5nIGl0IG9uIGEgbGlzdC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGJsYW1lIGVudHJpZXMgb24gdGhlIGlnbm9yZWRwIGxpc3QgYXJlIG5vdCBuZWNlc3NhcmlseSBzb3J0ZWQKKyAqIHdpdGggcmVzcGVjdCB0byB0aGUgcGFyZW50J3MgbGluZSBudW1iZXJzIHlldC4KKyAqLworc3RhdGljIHZvaWQgaWdub3JlX2JsYW1lX2VudHJ5KHN0cnVjdCBibGFtZV9lbnRyeSAqZSwKKwkJCSAgICAgICBzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwYXJlbnQsCisJCQkgICAgICAgc3RydWN0IGJsYW1lX2VudHJ5ICoqZGlmZnAsCisJCQkgICAgICAgc3RydWN0IGJsYW1lX2VudHJ5ICoqaWdub3JlZHAsCisJCQkgICAgICAgc3RydWN0IGJsYW1lX2xpbmVfdHJhY2tlciAqbGluZV9ibGFtZXMpCit7CisJaW50IGVudHJ5X2xlbiwgbnJfbGluZXMsIGk7CisKKwkvKgorCSAqIFdlIGNhcnZlIG5ldyBlbnRyaWVzIG9mZiB0aGUgZnJvbnQgb2YgZS4gIEVhY2ggZW50cnkgY29tZXMgZnJvbSBhCisJICogY29udGlndW91cyBjaHVuayBvZiBsaW5lczogYWRqYWNlbnQgbGluZXMgZnJvbSB0aGUgc2FtZSBvcmlnaW4KKwkgKiAoZWl0aGVyIHRoZSBwYXJlbnQgb3IgdGhlIHRhcmdldCkuCisJICovCisJZW50cnlfbGVuID0gMTsKKwlucl9saW5lcyA9IGUtPm51bV9saW5lczsJLyogZSBjaGFuZ2VzIGluIHRoZSBsb29wICovCisJZm9yIChpID0gMDsgaSA8IG5yX2xpbmVzOyBpKyspIHsKKwkJc3RydWN0IGJsYW1lX2VudHJ5ICpuZXh0ID0gTlVMTDsKKworCQkvKgorCQkgKiBXZSBhcmUgb2Z0ZW4gYWRqYWNlbnQgdG8gdGhlIG5leHQgbGluZSAtIG9ubHkgc3BsaXQgdGhlIGJsYW1lCisJCSAqIGVudHJ5IHdoZW4gd2UgaGF2ZSB0by4KKwkJICovCisJCWlmIChpICsgMSA8IG5yX2xpbmVzKSB7CisJCQlpZiAoYXJlX2xpbmVzX2FkamFjZW50KCZsaW5lX2JsYW1lc1tpXSwKKwkJCQkJICAgICAgICZsaW5lX2JsYW1lc1tpICsgMV0pKSB7CisJCQkJZW50cnlfbGVuKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQluZXh0ID0gc3BsaXRfYmxhbWVfYXQoZSwgZW50cnlfbGVuLAorCQkJCQkgICAgICBibGFtZV9vcmlnaW5faW5jcmVmKGUtPnN1c3BlY3QpKTsKKwkJfQorCQlpZiAobGluZV9ibGFtZXNbaV0uaXNfcGFyZW50KSB7CisJCQllLT5pZ25vcmVkID0gMTsKKwkJCWJsYW1lX29yaWdpbl9kZWNyZWYoZS0+c3VzcGVjdCk7CisJCQllLT5zdXNwZWN0ID0gYmxhbWVfb3JpZ2luX2luY3JlZihwYXJlbnQpOworCQkJZS0+c19sbm8gPSBsaW5lX2JsYW1lc1tpIC0gZW50cnlfbGVuICsgMV0uc19sbm87CisJCQllLT5uZXh0ID0gKmlnbm9yZWRwOworCQkJKmlnbm9yZWRwID0gZTsKKwkJfSBlbHNlIHsKKwkJCWUtPnVuYmxhbWFibGUgPSAxOworCQkJLyogZS0+c19sbm8gaXMgYWxyZWFkeSBpbiB0aGUgdGFyZ2V0J3MgYWRkcmVzcyBzcGFjZS4gKi8KKwkJCWUtPm5leHQgPSAqZGlmZnA7CisJCQkqZGlmZnAgPSBlOworCQl9CisJCWFzc2VydChlLT5udW1fbGluZXMgPT0gZW50cnlfbGVuKTsKKwkJZSA9IG5leHQ7CisJCWVudHJ5X2xlbiA9IDE7CisJfQorCWFzc2VydCghZSk7Cit9CisKKy8qCisgKiBQcm9jZXNzIG9uZSBodW5rIGZyb20gdGhlIHBhdGNoIGJldHdlZW4gdGhlIGN1cnJlbnQgc3VzcGVjdCBmb3IKKyAqIGJsYW1lX2VudHJ5IGUgYW5kIGl0cyBwYXJlbnQuICBUaGlzIGZpcnN0IGJsYW1lcyBhbnkgdW5maW5pc2hlZAorICogZW50cmllcyBiZWZvcmUgdGhlIGNodW5rICh3aGljaCBpcyB3aGVyZSB0YXJnZXQgYW5kIHBhcmVudCBzdGFydAorICogZGlmZmVyaW5nKSBvbiB0aGUgcGFyZW50LCBhbmQgdGhlbiBzcGxpdHMgYmxhbWUgZW50cmllcyBhdCB0aGUKKyAqIHN0YXJ0IGFuZCBhdCB0aGUgZW5kIG9mIHRoZSBkaWZmZXJlbmNlIHJlZ2lvbi4gIFNpbmNlIHVzZSBvZiAtTSBhbmQKKyAqIC1DIG9wdGlvbnMgbWF5IGxlYWQgdG8gb3ZlcmxhcHBpbmcvZHVwbGljYXRlIHNvdXJjZSBsaW5lIG51bWJlcgorICogcmFuZ2VzLCBhbGwgd2UgY2FuIHJlbHkgb24gZnJvbSBzb3J0aW5nL21lcmdpbmcgaXMgdGhlIG9yZGVyIG9mIHRoZQorICogZmlyc3Qgc3VzcGVjdCBsaW5lIG51bWJlci4KKyAqCisgKiB0bG5vOiBsaW5lIG51bWJlciBpbiB0aGUgdGFyZ2V0IHdoZXJlIHRoaXMgY2h1bmsgYmVnaW5zCisgKiBzYW1lOiBsaW5lIG51bWJlciBpbiB0aGUgdGFyZ2V0IHdoZXJlIHRoaXMgY2h1bmsgZW5kcworICogb2Zmc2V0OiBhZGQgdG8gdGxubyB0byBnZXQgdGhlIGNodW5rIHN0YXJ0aW5nIHBvaW50IGluIHRoZSBwYXJlbnQKKyAqIHBhcmVudF9sZW46IG51bWJlciBvZiBsaW5lcyBpbiB0aGUgcGFyZW50IGNodW5rCisgKi8KK3N0YXRpYyB2b2lkIGJsYW1lX2NodW5rKHN0cnVjdCBibGFtZV9lbnRyeSAqKipkc3RxLCBzdHJ1Y3QgYmxhbWVfZW50cnkgKioqc3JjcSwKKwkJCWludCB0bG5vLCBpbnQgb2Zmc2V0LCBpbnQgc2FtZSwgaW50IHBhcmVudF9sZW4sCisJCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwYXJlbnQsCisJCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICp0YXJnZXQsIGludCBpZ25vcmVfZGlmZnMpCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplID0gKipzcmNxOworCXN0cnVjdCBibGFtZV9lbnRyeSAqc2FtZXAgPSBOVUxMLCAqZGlmZnAgPSBOVUxMLCAqaWdub3JlZHAgPSBOVUxMOworCXN0cnVjdCBibGFtZV9saW5lX3RyYWNrZXIgKmxpbmVfYmxhbWVzID0gTlVMTDsKKworCXdoaWxlIChlICYmIGUtPnNfbG5vIDwgdGxubykgeworCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5leHQgPSBlLT5uZXh0OworCQkvKgorCQkgKiBjdXJyZW50IHJlY29yZCBzdGFydHMgYmVmb3JlIGRpZmZlcmluZyBwb3J0aW9uLiAgSWYKKwkJICogaXQgcmVhY2hlcyBpbnRvIGl0LCB3ZSBuZWVkIHRvIHNwbGl0IGl0IHVwIGFuZAorCQkgKiBleGFtaW5lIHRoZSBzZWNvbmQgcGFydCBzZXBhcmF0ZWx5LgorCQkgKi8KKwkJaWYgKGUtPnNfbG5vICsgZS0+bnVtX2xpbmVzID4gdGxubykgeworCQkJLyogTW92ZSBzZWNvbmQgaGFsZiB0byBhIG5ldyByZWNvcmQgKi8KKwkJCXN0cnVjdCBibGFtZV9lbnRyeSAqbjsKKworCQkJbiA9IHNwbGl0X2JsYW1lX2F0KGUsIHRsbm8gLSBlLT5zX2xubywgZS0+c3VzcGVjdCk7CisJCQkvKiBQdXNoIG5ldyByZWNvcmQgdG8gZGlmZnAgKi8KKwkJCW4tPm5leHQgPSBkaWZmcDsKKwkJCWRpZmZwID0gbjsKKwkJfSBlbHNlCisJCQlibGFtZV9vcmlnaW5fZGVjcmVmKGUtPnN1c3BlY3QpOworCQkvKiBQYXNzIGJsYW1lIGZvciBldmVyeXRoaW5nIGJlZm9yZSB0aGUgZGlmZmVyaW5nCisJCSAqIGNodW5rIHRvIHRoZSBwYXJlbnQgKi8KKwkJZS0+c3VzcGVjdCA9IGJsYW1lX29yaWdpbl9pbmNyZWYocGFyZW50KTsKKwkJZS0+c19sbm8gKz0gb2Zmc2V0OworCQllLT5uZXh0ID0gc2FtZXA7CisJCXNhbWVwID0gZTsKKwkJZSA9IG5leHQ7CisJfQorCS8qCisJICogQXMgd2UgZG9uJ3Qga25vdyBob3cgbXVjaCBvZiBhIGNvbW1vbiBzdHJldGNoIGFmdGVyIHRoaXMKKwkgKiBkaWZmIHdpbGwgb2NjdXIsIHRoZSBjdXJyZW50bHkgYmxhbWVkIHBhcnRzIGFyZSBhbGwgdGhhdCB3ZQorCSAqIGNhbiBhc3NpZ24gdG8gdGhlIHBhcmVudCBmb3Igbm93LgorCSAqLworCisJaWYgKHNhbWVwKSB7CisJCSoqZHN0cSA9IHJldmVyc2VfYmxhbWUoc2FtZXAsICoqZHN0cSk7CisJCSpkc3RxID0gJnNhbWVwLT5uZXh0OworCX0KKwkvKgorCSAqIFByZXBlbmQgdGhlIHNwbGl0IG9mZiBwb3J0aW9uczogZXZlcnl0aGluZyBhZnRlciBlIHN0YXJ0cworCSAqIGFmdGVyIHRoZSBibGFtZWFibGUgcG9ydGlvbi4KKwkgKi8KKwllID0gcmV2ZXJzZV9ibGFtZShkaWZmcCwgZSk7CisKKwkvKgorCSAqIE5vdyByZXRhaW4gcmVjb3JkcyBvbiB0aGUgdGFyZ2V0IHdoaWxlIHBhcnRzIGFyZSBkaWZmZXJlbnQKKwkgKiBmcm9tIHRoZSBwYXJlbnQuCisJICovCisJc2FtZXAgPSBOVUxMOworCWRpZmZwID0gTlVMTDsKKworCWlmIChpZ25vcmVfZGlmZnMgJiYgc2FtZSAtIHRsbm8gPiAwKSB7CisJCWxpbmVfYmxhbWVzID0geGNhbGxvYyhzaXplb2Yoc3RydWN0IGJsYW1lX2xpbmVfdHJhY2tlciksCisJCQkJICAgICAgc2FtZSAtIHRsbm8pOworCQlndWVzc19saW5lX2JsYW1lcyhwYXJlbnQsIHRhcmdldCwgdGxubywgb2Zmc2V0LCBzYW1lLAorCQkJCSAgcGFyZW50X2xlbiwgbGluZV9ibGFtZXMpOworCX0KKworCXdoaWxlIChlICYmIGUtPnNfbG5vIDwgc2FtZSkgeworCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5leHQgPSBlLT5uZXh0OworCisJCS8qCisJCSAqIElmIGN1cnJlbnQgcmVjb3JkIGV4dGVuZHMgaW50byBzYW1lbmVzcywgbmVlZCB0byBzcGxpdC4KKwkJICovCisJCWlmIChlLT5zX2xubyArIGUtPm51bV9saW5lcyA+IHNhbWUpIHsKKwkJCS8qCisJCQkgKiBNb3ZlIHNlY29uZCBoYWxmIHRvIGEgbmV3IHJlY29yZCB0byBiZQorCQkJICogcHJvY2Vzc2VkIGJ5IGxhdGVyIGNodW5rcworCQkJICovCisJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm47CisKKwkJCW4gPSBzcGxpdF9ibGFtZV9hdChlLCBzYW1lIC0gZS0+c19sbm8sCisJCQkJCSAgIGJsYW1lX29yaWdpbl9pbmNyZWYoZS0+c3VzcGVjdCkpOworCQkJLyogUHVzaCBuZXcgcmVjb3JkIHRvIHNhbWVwICovCisJCQluLT5uZXh0ID0gc2FtZXA7CisJCQlzYW1lcCA9IG47CisJCX0KKwkJaWYgKGlnbm9yZV9kaWZmcykgeworCQkJaWdub3JlX2JsYW1lX2VudHJ5KGUsIHBhcmVudCwgJmRpZmZwLCAmaWdub3JlZHAsCisJCQkJCSAgIGxpbmVfYmxhbWVzICsgZS0+c19sbm8gLSB0bG5vKTsKKwkJfSBlbHNlIHsKKwkJCWUtPm5leHQgPSBkaWZmcDsKKwkJCWRpZmZwID0gZTsKKwkJfQorCQllID0gbmV4dDsKKwl9CisJZnJlZShsaW5lX2JsYW1lcyk7CisJaWYgKGlnbm9yZWRwKSB7CisJCS8qCisJCSAqIE5vdGUgaWdub3JlZHAgaXMgbm90IHNvcnRlZCB5ZXQsIGFuZCB0aHVzIG5laXRoZXIgaXMgZHN0cS4KKwkJICogVGhhdCBsaXN0IG11c3QgYmUgc29ydGVkIGJlZm9yZSB3ZSBxdWV1ZV9ibGFtZXMoKS4gIFdlIGRlZmVyCisJCSAqIHNvcnRpbmcgdW50aWwgYWZ0ZXIgYWxsIGRpZmYgaHVua3MgYXJlIHByb2Nlc3NlZCwgc28gdGhhdAorCQkgKiBndWVzc19saW5lX2JsYW1lcygpIGNhbiBwaWNrICphbnkqIGxpbmUgaW4gdGhlIHBhcmVudC4gIFRoZQorCQkgKiBzbGlnaHQgZHJhd2JhY2sgaXMgdGhhdCB3ZSBlbmQgdXAgc29ydGluZyBhbGwgYmxhbWUgZW50cmllcworCQkgKiBwYXNzZWQgdG8gdGhlIHBhcmVudCwgaW5jbHVkaW5nIHRob3NlIHRoYXQgYXJlIHVucmVsYXRlZCB0bworCQkgKiBjaGFuZ2VzIG1hZGUgYnkgdGhlIGlnbm9yZWQgY29tbWl0LgorCQkgKi8KKwkJKipkc3RxID0gcmV2ZXJzZV9ibGFtZShpZ25vcmVkcCwgKipkc3RxKTsKKwkJKmRzdHEgPSAmaWdub3JlZHAtPm5leHQ7CisJfQorCSoqc3JjcSA9IHJldmVyc2VfYmxhbWUoZGlmZnAsIHJldmVyc2VfYmxhbWUoc2FtZXAsIGUpKTsKKwkvKiBNb3ZlIGFjcm9zcyBlbGVtZW50cyB0aGF0IGFyZSBpbiB0aGUgdW5ibGFtYWJsZSBwb3J0aW9uICovCisJaWYgKGRpZmZwKQorCQkqc3JjcSA9ICZkaWZmcC0+bmV4dDsKK30KKworc3RydWN0IGJsYW1lX2NodW5rX2NiX2RhdGEgeworCXN0cnVjdCBibGFtZV9vcmlnaW4gKnBhcmVudDsKKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICp0YXJnZXQ7CisJbG9uZyBvZmZzZXQ7CisJaW50IGlnbm9yZV9kaWZmczsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKipkc3RxOworCXN0cnVjdCBibGFtZV9lbnRyeSAqKnNyY3E7Cit9OworCisvKiBkaWZmIGNodW5rcyBhcmUgZnJvbSBwYXJlbnQgdG8gdGFyZ2V0ICovCitzdGF0aWMgaW50IGJsYW1lX2NodW5rX2NiKGxvbmcgc3RhcnRfYSwgbG9uZyBjb3VudF9hLAorCQkJICBsb25nIHN0YXJ0X2IsIGxvbmcgY291bnRfYiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYmxhbWVfY2h1bmtfY2JfZGF0YSAqZCA9IGRhdGE7CisJaWYgKHN0YXJ0X2EgLSBzdGFydF9iICE9IGQtPm9mZnNldCkKKwkJZGllKCJpbnRlcm5hbCBlcnJvciBpbiBibGFtZTo6YmxhbWVfY2h1bmtfY2IiKTsKKwlibGFtZV9jaHVuaygmZC0+ZHN0cSwgJmQtPnNyY3EsIHN0YXJ0X2IsIHN0YXJ0X2EgLSBzdGFydF9iLAorCQkgICAgc3RhcnRfYiArIGNvdW50X2IsIGNvdW50X2EsIGQtPnBhcmVudCwgZC0+dGFyZ2V0LAorCQkgICAgZC0+aWdub3JlX2RpZmZzKTsKKwlkLT5vZmZzZXQgPSBzdGFydF9hICsgY291bnRfYSAtIChzdGFydF9iICsgY291bnRfYik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXZSBhcmUgbG9va2luZyBhdCB0aGUgb3JpZ2luICd0YXJnZXQnIGFuZCBhaW1pbmcgdG8gcGFzcyBibGFtZQorICogZm9yIHRoZSBsaW5lcyBpdCBpcyBzdXNwZWN0ZWQgdG8gaXRzIHBhcmVudC4gIFJ1biBkaWZmIHRvIGZpbmQKKyAqIHdoaWNoIGxpbmVzIGNhbWUgZnJvbSBwYXJlbnQgYW5kIHBhc3MgYmxhbWUgZm9yIHRoZW0uCisgKi8KK3N0YXRpYyB2b2lkIHBhc3NfYmxhbWVfdG9fcGFyZW50KHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwKKwkJCQkgc3RydWN0IGJsYW1lX29yaWdpbiAqdGFyZ2V0LAorCQkJCSBzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwYXJlbnQsIGludCBpZ25vcmVfZGlmZnMpCit7CisJbW1maWxlX3QgZmlsZV9wLCBmaWxlX287CisJc3RydWN0IGJsYW1lX2NodW5rX2NiX2RhdGEgZDsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5ld2Rlc3QgPSBOVUxMOworCisJaWYgKCF0YXJnZXQtPnN1c3BlY3RzKQorCQlyZXR1cm47IC8qIG5vdGhpbmcgcmVtYWlucyBmb3IgdGhpcyB0YXJnZXQgKi8KKworCWQucGFyZW50ID0gcGFyZW50OworCWQudGFyZ2V0ID0gdGFyZ2V0OworCWQub2Zmc2V0ID0gMDsKKwlkLmlnbm9yZV9kaWZmcyA9IGlnbm9yZV9kaWZmczsKKwlkLmRzdHEgPSAmbmV3ZGVzdDsgZC5zcmNxID0gJnRhcmdldC0+c3VzcGVjdHM7CisKKwlmaWxsX29yaWdpbl9ibG9iKCZzYi0+cmV2cy0+ZGlmZm9wdCwgcGFyZW50LCAmZmlsZV9wLAorCQkJICZzYi0+bnVtX3JlYWRfYmxvYiwgaWdub3JlX2RpZmZzKTsKKwlmaWxsX29yaWdpbl9ibG9iKCZzYi0+cmV2cy0+ZGlmZm9wdCwgdGFyZ2V0LCAmZmlsZV9vLAorCQkJICZzYi0+bnVtX3JlYWRfYmxvYiwgaWdub3JlX2RpZmZzKTsKKwlzYi0+bnVtX2dldF9wYXRjaCsrOworCisJaWYgKGRpZmZfaHVua3MoJmZpbGVfcCwgJmZpbGVfbywgYmxhbWVfY2h1bmtfY2IsICZkLCBzYi0+eGRsX29wdHMpKQorCQlkaWUoInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmICglcyAtPiAlcykiLAorCQkgICAgb2lkX3RvX2hleCgmcGFyZW50LT5jb21taXQtPm9iamVjdC5vaWQpLAorCQkgICAgb2lkX3RvX2hleCgmdGFyZ2V0LT5jb21taXQtPm9iamVjdC5vaWQpKTsKKwkvKiBUaGUgcmVzdCBhcmUgdGhlIHNhbWUgYXMgdGhlIHBhcmVudCAqLworCWJsYW1lX2NodW5rKCZkLmRzdHEsICZkLnNyY3EsIElOVF9NQVgsIGQub2Zmc2V0LCBJTlRfTUFYLCAwLAorCQkgICAgcGFyZW50LCB0YXJnZXQsIDApOworCSpkLmRzdHEgPSBOVUxMOworCWlmIChpZ25vcmVfZGlmZnMpCisJCW5ld2Rlc3QgPSBsbGlzdF9tZXJnZXNvcnQobmV3ZGVzdCwgZ2V0X25leHRfYmxhbWUsCisJCQkJCSAgc2V0X25leHRfYmxhbWUsCisJCQkJCSAgY29tcGFyZV9ibGFtZV9zdXNwZWN0KTsKKwlxdWV1ZV9ibGFtZXMoc2IsIHBhcmVudCwgbmV3ZGVzdCk7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBUaGUgbGluZXMgaW4gYmxhbWVfZW50cnkgYWZ0ZXIgc3BsaXR0aW5nIGJsYW1lcyBtYW55IHRpbWVzIGNhbiBiZWNvbWUKKyAqIHZlcnkgc21hbGwgYW5kIHRyaXZpYWwsIGFuZCBhdCBzb21lIHBvaW50IGl0IGJlY29tZXMgcG9pbnRsZXNzIHRvCisgKiBibGFtZSB0aGUgcGFyZW50cy4gIEUuZy4gIlx0XHR9XG5cdH1cblxuIiBhcHBlYXJzIGV2ZXJ5d2hlcmUgaW4gYW55CisgKiBvcmRpbmFyeSBDIHByb2dyYW0sIGFuZCBpdCBpcyBub3Qgd29ydGggdG8gc2F5IGl0IHdhcyBjb3BpZWQgZnJvbQorICogdG90YWxseSB1bnJlbGF0ZWQgZmlsZSBpbiB0aGUgcGFyZW50LgorICoKKyAqIENvbXB1dGUgaG93IHRyaXZpYWwgdGhlIGxpbmVzIGluIHRoZSBibGFtZV9lbnRyeSBhcmUuCisgKi8KK3Vuc2lnbmVkIGJsYW1lX2VudHJ5X3Njb3JlKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwgc3RydWN0IGJsYW1lX2VudHJ5ICplKQoreworCXVuc2lnbmVkIHNjb3JlOworCWNvbnN0IGNoYXIgKmNwLCAqZXA7CisKKwlpZiAoZS0+c2NvcmUpCisJCXJldHVybiBlLT5zY29yZTsKKworCXNjb3JlID0gMTsKKwljcCA9IGJsYW1lX250aF9saW5lKHNiLCBlLT5sbm8pOworCWVwID0gYmxhbWVfbnRoX2xpbmUoc2IsIGUtPmxubyArIGUtPm51bV9saW5lcyk7CisJd2hpbGUgKGNwIDwgZXApIHsKKwkJdW5zaWduZWQgY2ggPSAqKCh1bnNpZ25lZCBjaGFyICopY3ApOworCQlpZiAoaXNhbG51bShjaCkpCisJCQlzY29yZSsrOworCQljcCsrOworCX0KKwllLT5zY29yZSA9IHNjb3JlOworCXJldHVybiBzY29yZTsKK30KKworLyoKKyAqIGJlc3Rfc29fZmFyW10gYW5kIHBvdGVudGlhbFtdIGFyZSBib3RoIGEgc3BsaXQgb2YgYW4gZXhpc3RpbmcgYmxhbWVfZW50cnkKKyAqIHRoYXQgcGFzc2VzIGJsYW1lIHRvIHRoZSBwYXJlbnQuICBNYWludGFpbiBiZXN0X3NvX2ZhciB0aGUgYmVzdCBzcGxpdCBzbworICogZmFyLCBieSBjb21wYXJpbmcgcG90ZW50aWFsIGFuZCBiZXN0X3NvX2ZhciBhbmQgY29weWluZyBwb3RlbnRpYWwgaW50bworICogYnN0X3NvX2ZhciBhcyBuZWVkZWQuCisgKi8KK3N0YXRpYyB2b2lkIGNvcHlfc3BsaXRfaWZfYmV0dGVyKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwKKwkJCQkgc3RydWN0IGJsYW1lX2VudHJ5ICpiZXN0X3NvX2ZhciwKKwkJCQkgc3RydWN0IGJsYW1lX2VudHJ5ICpwb3RlbnRpYWwpCit7CisJaW50IGk7CisKKwlpZiAoIXBvdGVudGlhbFsxXS5zdXNwZWN0KQorCQlyZXR1cm47CisJaWYgKGJlc3Rfc29fZmFyWzFdLnN1c3BlY3QpIHsKKwkJaWYgKGJsYW1lX2VudHJ5X3Njb3JlKHNiLCAmcG90ZW50aWFsWzFdKSA8CisJCSAgICBibGFtZV9lbnRyeV9zY29yZShzYiwgJmJlc3Rfc29fZmFyWzFdKSkKKwkJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlibGFtZV9vcmlnaW5faW5jcmVmKHBvdGVudGlhbFtpXS5zdXNwZWN0KTsKKwlkZWNyZWZfc3BsaXQoYmVzdF9zb19mYXIpOworCW1lbWNweShiZXN0X3NvX2ZhciwgcG90ZW50aWFsLCBzaXplb2Yoc3RydWN0IGJsYW1lX2VudHJ5WzNdKSk7Cit9CisKKy8qCisgKiBXZSBhcmUgbG9va2luZyBhdCBhIHBhcnQgb2YgdGhlIGZpbmFsIGltYWdlIHJlcHJlc2VudGVkIGJ5CisgKiBlbnQgKHRsbm8gYW5kIHNhbWUgYXJlIG9mZnNldCBieSBlbnQtPnNfbG5vKS4KKyAqIHRsbm8gaXMgd2hlcmUgd2UgYXJlIGxvb2tpbmcgYXQgaW4gdGhlIGZpbmFsIGltYWdlLgorICogdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSBzYW1lIG1hdGNoIHByZWltYWdlLgorICogcGxubyBpcyB3aGVyZSB3ZSBhcmUgbG9va2luZyBhdCBpbiB0aGUgcHJlaW1hZ2UuCisgKgorICogPC0tLS0tLS0tLS0tLS0tIGZpbmFsIGltYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+CisgKiAgICAgICA8LS0tLS0tZW50LS0tLS0tPgorICogICAgICAgICBedGxubyBec2FtZQorICogICAgPC0tLS0tLS0tLXByZWltYWdlLS0tLS0+CisgKiAgICAgICAgIF5wbG5vCisgKgorICogQWxsIGxpbmUgbnVtYmVycyBhcmUgMC1iYXNlZC4KKyAqLworc3RhdGljIHZvaWQgaGFuZGxlX3NwbGl0KHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwKKwkJCSBzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudCwKKwkJCSBpbnQgdGxubywgaW50IHBsbm8sIGludCBzYW1lLAorCQkJIHN0cnVjdCBibGFtZV9vcmlnaW4gKnBhcmVudCwKKwkJCSBzdHJ1Y3QgYmxhbWVfZW50cnkgKnNwbGl0KQoreworCWlmIChlbnQtPm51bV9saW5lcyA8PSB0bG5vKQorCQlyZXR1cm47CisJaWYgKHRsbm8gPCBzYW1lKSB7CisJCXN0cnVjdCBibGFtZV9lbnRyeSBwb3RlbnRpYWxbM107CisJCXRsbm8gKz0gZW50LT5zX2xubzsKKwkJc2FtZSArPSBlbnQtPnNfbG5vOworCQlzcGxpdF9vdmVybGFwKHBvdGVudGlhbCwgZW50LCB0bG5vLCBwbG5vLCBzYW1lLCBwYXJlbnQpOworCQljb3B5X3NwbGl0X2lmX2JldHRlcihzYiwgc3BsaXQsIHBvdGVudGlhbCk7CisJCWRlY3JlZl9zcGxpdChwb3RlbnRpYWwpOworCX0KK30KKworc3RydWN0IGhhbmRsZV9zcGxpdF9jYl9kYXRhIHsKKwlzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2I7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQ7CisJc3RydWN0IGJsYW1lX29yaWdpbiAqcGFyZW50OworCXN0cnVjdCBibGFtZV9lbnRyeSAqc3BsaXQ7CisJbG9uZyBwbG5vOworCWxvbmcgdGxubzsKK307CisKK3N0YXRpYyBpbnQgaGFuZGxlX3NwbGl0X2NiKGxvbmcgc3RhcnRfYSwgbG9uZyBjb3VudF9hLAorCQkJICAgbG9uZyBzdGFydF9iLCBsb25nIGNvdW50X2IsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGhhbmRsZV9zcGxpdF9jYl9kYXRhICpkID0gZGF0YTsKKwloYW5kbGVfc3BsaXQoZC0+c2IsIGQtPmVudCwgZC0+dGxubywgZC0+cGxubywgc3RhcnRfYiwgZC0+cGFyZW50LAorCQkgICAgIGQtPnNwbGl0KTsKKwlkLT5wbG5vID0gc3RhcnRfYSArIGNvdW50X2E7CisJZC0+dGxubyA9IHN0YXJ0X2IgKyBjb3VudF9iOworCXJldHVybiAwOworfQorCisvKgorICogRmluZCB0aGUgbGluZXMgZnJvbSBwYXJlbnQgdGhhdCBhcmUgdGhlIHNhbWUgYXMgZW50IHNvIHRoYXQKKyAqIHdlIGNhbiBwYXNzIGJsYW1lcyB0byBpdC4gIGZpbGVfcCBoYXMgdGhlIGJsb2IgY29udGVudHMgZm9yCisgKiB0aGUgcGFyZW50LgorICovCitzdGF0aWMgdm9pZCBmaW5kX2NvcHlfaW5fYmxvYihzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsCisJCQkgICAgICBzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudCwKKwkJCSAgICAgIHN0cnVjdCBibGFtZV9vcmlnaW4gKnBhcmVudCwKKwkJCSAgICAgIHN0cnVjdCBibGFtZV9lbnRyeSAqc3BsaXQsCisJCQkgICAgICBtbWZpbGVfdCAqZmlsZV9wKQoreworCWNvbnN0IGNoYXIgKmNwOworCW1tZmlsZV90IGZpbGVfbzsKKwlzdHJ1Y3QgaGFuZGxlX3NwbGl0X2NiX2RhdGEgZDsKKworCW1lbXNldCgmZCwgMCwgc2l6ZW9mKGQpKTsKKwlkLnNiID0gc2I7IGQuZW50ID0gZW50OyBkLnBhcmVudCA9IHBhcmVudDsgZC5zcGxpdCA9IHNwbGl0OworCS8qCisJICogUHJlcGFyZSBtbWZpbGUgdGhhdCBjb250YWlucyBvbmx5IHRoZSBsaW5lcyBpbiBlbnQuCisJICovCisJY3AgPSBibGFtZV9udGhfbGluZShzYiwgZW50LT5sbm8pOworCWZpbGVfby5wdHIgPSAoY2hhciAqKSBjcDsKKwlmaWxlX28uc2l6ZSA9IGJsYW1lX250aF9saW5lKHNiLCBlbnQtPmxubyArIGVudC0+bnVtX2xpbmVzKSAtIGNwOworCisJLyoKKwkgKiBmaWxlX28gaXMgYSBwYXJ0IG9mIGZpbmFsIGltYWdlIHdlIGFyZSBhbm5vdGF0aW5nLgorCSAqIGZpbGVfcCBwYXJ0aWFsbHkgbWF5IG1hdGNoIHRoYXQgaW1hZ2UuCisJICovCisJbWVtc2V0KHNwbGl0LCAwLCBzaXplb2Yoc3RydWN0IGJsYW1lX2VudHJ5IFszXSkpOworCWlmIChkaWZmX2h1bmtzKGZpbGVfcCwgJmZpbGVfbywgaGFuZGxlX3NwbGl0X2NiLCAmZCwgc2ItPnhkbF9vcHRzKSkKKwkJZGllKCJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZiAoJXMpIiwKKwkJICAgIG9pZF90b19oZXgoJnBhcmVudC0+Y29tbWl0LT5vYmplY3Qub2lkKSk7CisJLyogcmVtYWluZGVyLCBpZiBhbnksIGFsbCBtYXRjaCB0aGUgcHJlaW1hZ2UgKi8KKwloYW5kbGVfc3BsaXQoc2IsIGVudCwgZC50bG5vLCBkLnBsbm8sIGVudC0+bnVtX2xpbmVzLCBwYXJlbnQsIHNwbGl0KTsKK30KKworLyogTW92ZSBhbGwgYmxhbWUgZW50cmllcyBmcm9tIGxpc3QgKnNvdXJjZSB0aGF0IGhhdmUgYSBzY29yZSBzbWFsbGVyCisgKiB0aGFuIHNjb3JlX21pbiB0byB0aGUgZnJvbnQgb2YgbGlzdCAqc21hbGwuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbGluayBwb2ludGluZyB0byB0aGUgb2xkIGhlYWQgb2YgdGhlIHNtYWxsIGxpc3QuCisgKi8KKworc3RhdGljIHN0cnVjdCBibGFtZV9lbnRyeSAqKmZpbHRlcl9zbWFsbChzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsCisJCQkJCSBzdHJ1Y3QgYmxhbWVfZW50cnkgKipzbWFsbCwKKwkJCQkJIHN0cnVjdCBibGFtZV9lbnRyeSAqKnNvdXJjZSwKKwkJCQkJIHVuc2lnbmVkIHNjb3JlX21pbikKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKnAgPSAqc291cmNlOworCXN0cnVjdCBibGFtZV9lbnRyeSAqb2xkc21hbGwgPSAqc21hbGw7CisJd2hpbGUgKHApIHsKKwkJaWYgKGJsYW1lX2VudHJ5X3Njb3JlKHNiLCBwKSA8PSBzY29yZV9taW4pIHsKKwkJCSpzbWFsbCA9IHA7CisJCQlzbWFsbCA9ICZwLT5uZXh0OworCQkJcCA9ICpzbWFsbDsKKwkJfSBlbHNlIHsKKwkJCSpzb3VyY2UgPSBwOworCQkJc291cmNlID0gJnAtPm5leHQ7CisJCQlwID0gKnNvdXJjZTsKKwkJfQorCX0KKwkqc21hbGwgPSBvbGRzbWFsbDsKKwkqc291cmNlID0gTlVMTDsKKwlyZXR1cm4gc21hbGw7Cit9CisKKy8qCisgKiBTZWUgaWYgbGluZXMgY3VycmVudGx5IHRhcmdldCBpcyBzdXNwZWN0ZWQgZm9yIGNhbiBiZSBhdHRyaWJ1dGVkIHRvCisgKiBwYXJlbnQuCisgKi8KK3N0YXRpYyB2b2lkIGZpbmRfbW92ZV9pbl9wYXJlbnQoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLAorCQkJCXN0cnVjdCBibGFtZV9lbnRyeSAqKipibGFtZWQsCisJCQkJc3RydWN0IGJsYW1lX2VudHJ5ICoqdG9vc21hbGwsCisJCQkJc3RydWN0IGJsYW1lX29yaWdpbiAqdGFyZ2V0LAorCQkJCXN0cnVjdCBibGFtZV9vcmlnaW4gKnBhcmVudCkKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmUsIHNwbGl0WzNdOworCXN0cnVjdCBibGFtZV9lbnRyeSAqdW5ibGFtZWQgPSB0YXJnZXQtPnN1c3BlY3RzOworCXN0cnVjdCBibGFtZV9lbnRyeSAqbGVmdG92ZXIgPSBOVUxMOworCW1tZmlsZV90IGZpbGVfcDsKKworCWlmICghdW5ibGFtZWQpCisJCXJldHVybjsgLyogbm90aGluZyByZW1haW5zIGZvciB0aGlzIHRhcmdldCAqLworCisJZmlsbF9vcmlnaW5fYmxvYigmc2ItPnJldnMtPmRpZmZvcHQsIHBhcmVudCwgJmZpbGVfcCwKKwkJCSAmc2ItPm51bV9yZWFkX2Jsb2IsIDApOworCWlmICghZmlsZV9wLnB0cikKKwkJcmV0dXJuOworCisJLyogQXQgZWFjaCBpdGVyYXRpb24sIHVuYmxhbWVkIGhhcyBhIE5VTEwtdGVybWluYXRlZCBsaXN0IG9mCisJICogZW50cmllcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIHRlc3RlZCBmb3IgYmxhbWUuICBsZWZ0b3ZlcgorCSAqIGNvbnRhaW5zIHRoZSByZXZlcnNlZCBsaXN0IG9mIGVudHJpZXMgdGhhdCBoYXZlIGJlZW4gdGVzdGVkCisJICogd2l0aG91dCBiZWluZyBhc3NpZ25hYmxlIHRvIHRoZSBwYXJlbnQuCisJICovCisJZG8geworCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKip1bmJsYW1lZHRhaWwgPSAmdW5ibGFtZWQ7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqbmV4dDsKKwkJZm9yIChlID0gdW5ibGFtZWQ7IGU7IGUgPSBuZXh0KSB7CisJCQluZXh0ID0gZS0+bmV4dDsKKwkJCWZpbmRfY29weV9pbl9ibG9iKHNiLCBlLCBwYXJlbnQsIHNwbGl0LCAmZmlsZV9wKTsKKwkJCWlmIChzcGxpdFsxXS5zdXNwZWN0ICYmCisJCQkgICAgc2ItPm1vdmVfc2NvcmUgPCBibGFtZV9lbnRyeV9zY29yZShzYiwgJnNwbGl0WzFdKSkgeworCQkJCXNwbGl0X2JsYW1lKGJsYW1lZCwgJnVuYmxhbWVkdGFpbCwgc3BsaXQsIGUpOworCQkJfSBlbHNlIHsKKwkJCQllLT5uZXh0ID0gbGVmdG92ZXI7CisJCQkJbGVmdG92ZXIgPSBlOworCQkJfQorCQkJZGVjcmVmX3NwbGl0KHNwbGl0KTsKKwkJfQorCQkqdW5ibGFtZWR0YWlsID0gTlVMTDsKKwkJdG9vc21hbGwgPSBmaWx0ZXJfc21hbGwoc2IsIHRvb3NtYWxsLCAmdW5ibGFtZWQsIHNiLT5tb3ZlX3Njb3JlKTsKKwl9IHdoaWxlICh1bmJsYW1lZCk7CisJdGFyZ2V0LT5zdXNwZWN0cyA9IHJldmVyc2VfYmxhbWUobGVmdG92ZXIsIE5VTEwpOworfQorCitzdHJ1Y3QgYmxhbWVfbGlzdCB7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQ7CisJc3RydWN0IGJsYW1lX2VudHJ5IHNwbGl0WzNdOworfTsKKworLyoKKyAqIENvdW50IHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGUgdGFyZ2V0IGlzIHN1c3BlY3RlZCBmb3IsCisgKiBhbmQgcHJlcGFyZSBhIGxpc3Qgb2YgZW50cnkgYW5kIHRoZSBiZXN0IHNwbGl0LgorICovCitzdGF0aWMgc3RydWN0IGJsYW1lX2xpc3QgKnNldHVwX2JsYW1lX2xpc3Qoc3RydWN0IGJsYW1lX2VudHJ5ICp1bmJsYW1lZCwKKwkJCQkJICAgaW50ICpudW1fZW50c19wKQoreworCXN0cnVjdCBibGFtZV9lbnRyeSAqZTsKKwlpbnQgbnVtX2VudHMsIGk7CisJc3RydWN0IGJsYW1lX2xpc3QgKmJsYW1lX2xpc3QgPSBOVUxMOworCisJZm9yIChlID0gdW5ibGFtZWQsIG51bV9lbnRzID0gMDsgZTsgZSA9IGUtPm5leHQpCisJCW51bV9lbnRzKys7CisJaWYgKG51bV9lbnRzKSB7CisJCWJsYW1lX2xpc3QgPSB4Y2FsbG9jKG51bV9lbnRzLCBzaXplb2Yoc3RydWN0IGJsYW1lX2xpc3QpKTsKKwkJZm9yIChlID0gdW5ibGFtZWQsIGkgPSAwOyBlOyBlID0gZS0+bmV4dCkKKwkJCWJsYW1lX2xpc3RbaSsrXS5lbnQgPSBlOworCX0KKwkqbnVtX2VudHNfcCA9IG51bV9lbnRzOworCXJldHVybiBibGFtZV9saXN0OworfQorCisvKgorICogRm9yIGxpbmVzIHRhcmdldCBpcyBzdXNwZWN0ZWQgZm9yLCBzZWUgaWYgd2UgY2FuIGZpbmQgY29kZSBtb3ZlbWVudAorICogYWNyb3NzIGZpbGUgYm91bmRhcnkgZnJvbSB0aGUgcGFyZW50IGNvbW1pdC4gIHBvcmlnaW4gaXMgdGhlIHBhdGgKKyAqIGluIHRoZSBwYXJlbnQgd2UgYWxyZWFkeSB0cmllZC4KKyAqLworc3RhdGljIHZvaWQgZmluZF9jb3B5X2luX3BhcmVudChzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsCisJCQkJc3RydWN0IGJsYW1lX2VudHJ5ICoqKmJsYW1lZCwKKwkJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKip0b29zbWFsbCwKKwkJCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICp0YXJnZXQsCisJCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50LAorCQkJCXN0cnVjdCBibGFtZV9vcmlnaW4gKnBvcmlnaW4sCisJCQkJaW50IG9wdCkKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZfb3B0czsKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgYmxhbWVfbGlzdCAqYmxhbWVfbGlzdDsKKwlpbnQgbnVtX2VudHM7CisJc3RydWN0IGJsYW1lX2VudHJ5ICp1bmJsYW1lZCA9IHRhcmdldC0+c3VzcGVjdHM7CisJc3RydWN0IGJsYW1lX2VudHJ5ICpsZWZ0b3ZlciA9IE5VTEw7CisKKwlpZiAoIXVuYmxhbWVkKQorCQlyZXR1cm47IC8qIG5vdGhpbmcgcmVtYWlucyBmb3IgdGhpcyB0YXJnZXQgKi8KKworCXJlcG9fZGlmZl9zZXR1cChzYi0+cmVwbywgJmRpZmZfb3B0cyk7CisJZGlmZl9vcHRzLmZsYWdzLnJlY3Vyc2l2ZSA9IDE7CisJZGlmZl9vcHRzLm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisKKwlkaWZmX3NldHVwX2RvbmUoJmRpZmZfb3B0cyk7CisKKwkvKiBUcnkgImZpbmQgY29waWVzIGhhcmRlciIgb24gbmV3IHBhdGggaWYgcmVxdWVzdGVkOworCSAqIHdlIGRvIG5vdCB3YW50IHRvIHVzZSBkaWZmY29yZV9yZW5hbWUoKSBhY3R1YWxseSB0bworCSAqIG1hdGNoIHRoaW5ncyB1cDsgZmluZF9jb3BpZXNfaGFyZGVyIGlzIHNldCBvbmx5IHRvCisJICogZm9yY2UgZGlmZl90cmVlX29pZCgpIHRvIGZlZWQgYWxsIGZpbGVwYWlycyB0byBkaWZmX3F1ZXVlLAorCSAqIGFuZCB0aGlzIGNvZGUgbmVlZHMgdG8gYmUgYWZ0ZXIgZGlmZl9zZXR1cF9kb25lKCksIHdoaWNoCisJICogdXN1YWxseSBtYWtlcyBmaW5kLWNvcGllcy1oYXJkZXIgaW1wbHkgY29weSBkZXRlY3Rpb24uCisJICovCisJaWYgKChvcHQgJiBQSUNLQVhFX0JMQU1FX0NPUFlfSEFSREVTVCkKKwkgICAgfHwgKChvcHQgJiBQSUNLQVhFX0JMQU1FX0NPUFlfSEFSREVSKQorCQkmJiAoIXBvcmlnaW4gfHwgc3RyY21wKHRhcmdldC0+cGF0aCwgcG9yaWdpbi0+cGF0aCkpKSkKKwkJZGlmZl9vcHRzLmZsYWdzLmZpbmRfY29waWVzX2hhcmRlciA9IDE7CisKKwlpZiAoaXNfbnVsbF9vaWQoJnRhcmdldC0+Y29tbWl0LT5vYmplY3Qub2lkKSkKKwkJZG9fZGlmZl9jYWNoZShnZXRfY29tbWl0X3RyZWVfb2lkKHBhcmVudCksICZkaWZmX29wdHMpOworCWVsc2UKKwkJZGlmZl90cmVlX29pZChnZXRfY29tbWl0X3RyZWVfb2lkKHBhcmVudCksCisJCQkgICAgICBnZXRfY29tbWl0X3RyZWVfb2lkKHRhcmdldC0+Y29tbWl0KSwKKwkJCSAgICAgICIiLCAmZGlmZl9vcHRzKTsKKworCWlmICghZGlmZl9vcHRzLmZsYWdzLmZpbmRfY29waWVzX2hhcmRlcikKKwkJZGlmZmNvcmVfc3RkKCZkaWZmX29wdHMpOworCisJZG8geworCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKip1bmJsYW1lZHRhaWwgPSAmdW5ibGFtZWQ7CisJCWJsYW1lX2xpc3QgPSBzZXR1cF9ibGFtZV9saXN0KHVuYmxhbWVkLCAmbnVtX2VudHMpOworCisJCWZvciAoaSA9IDA7IGkgPCBkaWZmX3F1ZXVlZF9kaWZmLm5yOyBpKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXTsKKwkJCXN0cnVjdCBibGFtZV9vcmlnaW4gKm5vcmlnaW47CisJCQltbWZpbGVfdCBmaWxlX3A7CisJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgcG90ZW50aWFsWzNdOworCisJCQlpZiAoIURJRkZfRklMRV9WQUxJRChwLT5vbmUpKQorCQkJCWNvbnRpbnVlOyAvKiBkb2VzIG5vdCBleGlzdCBpbiBwYXJlbnQgKi8KKwkJCWlmIChTX0lTR0lUTElOSyhwLT5vbmUtPm1vZGUpKQorCQkJCWNvbnRpbnVlOyAvKiBpZ25vcmUgZ2l0IGxpbmtzICovCisJCQlpZiAocG9yaWdpbiAmJiAhc3RyY21wKHAtPm9uZS0+cGF0aCwgcG9yaWdpbi0+cGF0aCkpCisJCQkJLyogZmluZF9tb3ZlIGFscmVhZHkgZGVhbHQgd2l0aCB0aGlzIHBhdGggKi8KKwkJCQljb250aW51ZTsKKworCQkJbm9yaWdpbiA9IGdldF9vcmlnaW4ocGFyZW50LCBwLT5vbmUtPnBhdGgpOworCQkJb2lkY3B5KCZub3JpZ2luLT5ibG9iX29pZCwgJnAtPm9uZS0+b2lkKTsKKwkJCW5vcmlnaW4tPm1vZGUgPSBwLT5vbmUtPm1vZGU7CisJCQlmaWxsX29yaWdpbl9ibG9iKCZzYi0+cmV2cy0+ZGlmZm9wdCwgbm9yaWdpbiwgJmZpbGVfcCwKKwkJCQkJICZzYi0+bnVtX3JlYWRfYmxvYiwgMCk7CisJCQlpZiAoIWZpbGVfcC5wdHIpCisJCQkJY29udGludWU7CisKKwkJCWZvciAoaiA9IDA7IGogPCBudW1fZW50czsgaisrKSB7CisJCQkJZmluZF9jb3B5X2luX2Jsb2Ioc2IsIGJsYW1lX2xpc3Rbal0uZW50LAorCQkJCQkJICBub3JpZ2luLCBwb3RlbnRpYWwsICZmaWxlX3ApOworCQkJCWNvcHlfc3BsaXRfaWZfYmV0dGVyKHNiLCBibGFtZV9saXN0W2pdLnNwbGl0LAorCQkJCQkJICAgICBwb3RlbnRpYWwpOworCQkJCWRlY3JlZl9zcGxpdChwb3RlbnRpYWwpOworCQkJfQorCQkJYmxhbWVfb3JpZ2luX2RlY3JlZihub3JpZ2luKTsKKwkJfQorCisJCWZvciAoaiA9IDA7IGogPCBudW1fZW50czsgaisrKSB7CisJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKnNwbGl0ID0gYmxhbWVfbGlzdFtqXS5zcGxpdDsKKwkJCWlmIChzcGxpdFsxXS5zdXNwZWN0ICYmCisJCQkgICAgc2ItPmNvcHlfc2NvcmUgPCBibGFtZV9lbnRyeV9zY29yZShzYiwgJnNwbGl0WzFdKSkgeworCQkJCXNwbGl0X2JsYW1lKGJsYW1lZCwgJnVuYmxhbWVkdGFpbCwgc3BsaXQsCisJCQkJCSAgICBibGFtZV9saXN0W2pdLmVudCk7CisJCQl9IGVsc2UgeworCQkJCWJsYW1lX2xpc3Rbal0uZW50LT5uZXh0ID0gbGVmdG92ZXI7CisJCQkJbGVmdG92ZXIgPSBibGFtZV9saXN0W2pdLmVudDsKKwkJCX0KKwkJCWRlY3JlZl9zcGxpdChzcGxpdCk7CisJCX0KKwkJZnJlZShibGFtZV9saXN0KTsKKwkJKnVuYmxhbWVkdGFpbCA9IE5VTEw7CisJCXRvb3NtYWxsID0gZmlsdGVyX3NtYWxsKHNiLCB0b29zbWFsbCwgJnVuYmxhbWVkLCBzYi0+Y29weV9zY29yZSk7CisJfSB3aGlsZSAodW5ibGFtZWQpOworCXRhcmdldC0+c3VzcGVjdHMgPSByZXZlcnNlX2JsYW1lKGxlZnRvdmVyLCBOVUxMKTsKKwlkaWZmX2ZsdXNoKCZkaWZmX29wdHMpOworCWNsZWFyX3BhdGhzcGVjKCZkaWZmX29wdHMucGF0aHNwZWMpOworfQorCisvKgorICogVGhlIGJsb2JzIG9mIG9yaWdpbiBhbmQgcG9yaWdpbiBleGFjdGx5IG1hdGNoLCBzbyBldmVyeXRoaW5nCisgKiBvcmlnaW4gaXMgc3VzcGVjdGVkIGZvciBjYW4gYmUgYmxhbWVkIG9uIHRoZSBwYXJlbnQuCisgKi8KK3N0YXRpYyB2b2lkIHBhc3Nfd2hvbGVfYmxhbWUoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLAorCQkJICAgICBzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvcmlnaW4sIHN0cnVjdCBibGFtZV9vcmlnaW4gKnBvcmlnaW4pCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplLCAqc3VzcGVjdHM7CisKKwlpZiAoIXBvcmlnaW4tPmZpbGUucHRyICYmIG9yaWdpbi0+ZmlsZS5wdHIpIHsKKwkJLyogU3RlYWwgaXRzIGZpbGUgKi8KKwkJcG9yaWdpbi0+ZmlsZSA9IG9yaWdpbi0+ZmlsZTsKKwkJb3JpZ2luLT5maWxlLnB0ciA9IE5VTEw7CisJfQorCXN1c3BlY3RzID0gb3JpZ2luLT5zdXNwZWN0czsKKwlvcmlnaW4tPnN1c3BlY3RzID0gTlVMTDsKKwlmb3IgKGUgPSBzdXNwZWN0czsgZTsgZSA9IGUtPm5leHQpIHsKKwkJYmxhbWVfb3JpZ2luX2luY3JlZihwb3JpZ2luKTsKKwkJYmxhbWVfb3JpZ2luX2RlY3JlZihlLT5zdXNwZWN0KTsKKwkJZS0+c3VzcGVjdCA9IHBvcmlnaW47CisJfQorCXF1ZXVlX2JsYW1lcyhzYiwgcG9yaWdpbiwgc3VzcGVjdHMpOworfQorCisvKgorICogV2UgcGFzcyBibGFtZSBmcm9tIHRoZSBjdXJyZW50IGNvbW1pdCB0byBpdHMgcGFyZW50cy4gIFdlIGtlZXAgc2F5aW5nCisgKiAicGFyZW50IiAoYW5kICJwb3JpZ2luIiksIGJ1dCB3aGF0IHdlIG1lYW4gaXMgdG8gZmluZCBzY2FwZWdvYXQgdG8KKyAqIGV4b25lcmF0ZSBvdXJzZWx2ZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmZpcnN0X3NjYXBlZ29hdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkJaW50IHJldmVyc2UpCit7CisJaWYgKCFyZXZlcnNlKSB7CisJCWlmIChyZXZzLT5maXJzdF9wYXJlbnRfb25seSAmJgorCQkgICAgY29tbWl0LT5wYXJlbnRzICYmCisJCSAgICBjb21taXQtPnBhcmVudHMtPm5leHQpIHsKKwkJCWZyZWVfY29tbWl0X2xpc3QoY29tbWl0LT5wYXJlbnRzLT5uZXh0KTsKKwkJCWNvbW1pdC0+cGFyZW50cy0+bmV4dCA9IE5VTEw7CisJCX0KKwkJcmV0dXJuIGNvbW1pdC0+cGFyZW50czsKKwl9CisJcmV0dXJuIGxvb2t1cF9kZWNvcmF0aW9uKCZyZXZzLT5jaGlsZHJlbiwgJmNvbW1pdC0+b2JqZWN0KTsKK30KKworc3RhdGljIGludCBudW1fc2NhcGVnb2F0cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IHJldmVyc2UpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsID0gZmlyc3Rfc2NhcGVnb2F0KHJldnMsIGNvbW1pdCwgcmV2ZXJzZSk7CisJcmV0dXJuIGNvbW1pdF9saXN0X2NvdW50KGwpOworfQorCisvKiBEaXN0cmlidXRlIGNvbGxlY3RlZCB1bnNvcnRlZCBibGFtZXMgdG8gdGhlIHJlc3BlY3RlZCBzb3J0ZWQgbGlzdHMKKyAqIGluIHRoZSB2YXJpb3VzIG9yaWdpbnMuCisgKi8KK3N0YXRpYyB2b2lkIGRpc3RyaWJ1dGVfYmxhbWUoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLCBzdHJ1Y3QgYmxhbWVfZW50cnkgKmJsYW1lZCkKK3sKKwlibGFtZWQgPSBsbGlzdF9tZXJnZXNvcnQoYmxhbWVkLCBnZXRfbmV4dF9ibGFtZSwgc2V0X25leHRfYmxhbWUsCisJCQkJIGNvbXBhcmVfYmxhbWVfc3VzcGVjdCk7CisJd2hpbGUgKGJsYW1lZCkKKwl7CisJCXN0cnVjdCBibGFtZV9vcmlnaW4gKnBvcmlnaW4gPSBibGFtZWQtPnN1c3BlY3Q7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqc3VzcGVjdHMgPSBOVUxMOworCQlkbyB7CisJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5leHQgPSBibGFtZWQtPm5leHQ7CisJCQlibGFtZWQtPm5leHQgPSBzdXNwZWN0czsKKwkJCXN1c3BlY3RzID0gYmxhbWVkOworCQkJYmxhbWVkID0gbmV4dDsKKwkJfSB3aGlsZSAoYmxhbWVkICYmIGJsYW1lZC0+c3VzcGVjdCA9PSBwb3JpZ2luKTsKKwkJc3VzcGVjdHMgPSByZXZlcnNlX2JsYW1lKHN1c3BlY3RzLCBOVUxMKTsKKwkJcXVldWVfYmxhbWVzKHNiLCBwb3JpZ2luLCBzdXNwZWN0cyk7CisJfQorfQorCisjZGVmaW5lIE1BWFNHIDE2CisKK3R5cGVkZWYgc3RydWN0IGJsYW1lX29yaWdpbiAqKCpibGFtZV9maW5kX2FsZykoc3RydWN0IHJlcG9zaXRvcnkgKiwKKwkJCQkJICAgICAgIHN0cnVjdCBjb21taXQgKiwKKwkJCQkJICAgICAgIHN0cnVjdCBibGFtZV9vcmlnaW4gKiwKKwkJCQkJICAgICAgIHN0cnVjdCBibGFtZV9ibG9vbV9kYXRhICopOworCitzdGF0aWMgdm9pZCBwYXNzX2JsYW1lKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwgc3RydWN0IGJsYW1lX29yaWdpbiAqb3JpZ2luLCBpbnQgb3B0KQoreworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IHNiLT5yZXZzOworCWludCBpLCBwYXNzLCBudW1fc2c7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gb3JpZ2luLT5jb21taXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpzZzsKKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpzZ19idWZbTUFYU0ddOworCXN0cnVjdCBibGFtZV9vcmlnaW4gKnBvcmlnaW4sICoqc2dfb3JpZ2luID0gc2dfYnVmOworCXN0cnVjdCBibGFtZV9lbnRyeSAqdG9vc21hbGwgPSBOVUxMOworCXN0cnVjdCBibGFtZV9lbnRyeSAqYmxhbWVzLCAqKmJsYW1ldGFpbCA9ICZibGFtZXM7CisKKwludW1fc2cgPSBudW1fc2NhcGVnb2F0cyhyZXZzLCBjb21taXQsIHNiLT5yZXZlcnNlKTsKKwlpZiAoIW51bV9zZykKKwkJZ290byBmaW5pc2g7CisJZWxzZSBpZiAobnVtX3NnIDwgQVJSQVlfU0laRShzZ19idWYpKQorCQltZW1zZXQoc2dfYnVmLCAwLCBzaXplb2Yoc2dfYnVmKSk7CisJZWxzZQorCQlzZ19vcmlnaW4gPSB4Y2FsbG9jKG51bV9zZywgc2l6ZW9mKCpzZ19vcmlnaW4pKTsKKworCS8qCisJICogVGhlIGZpcnN0IHBhc3MgbG9va3MgZm9yIHVucmVuYW1lZCBwYXRoIHRvIG9wdGltaXplIGZvcgorCSAqIGNvbW1vbiBjYXNlcywgdGhlbiB3ZSBsb29rIGZvciByZW5hbWVzIGluIHRoZSBzZWNvbmQgcGFzcy4KKwkgKi8KKwlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgMiAtIHNiLT5ub193aG9sZV9maWxlX3JlbmFtZTsgcGFzcysrKSB7CisJCWJsYW1lX2ZpbmRfYWxnIGZpbmQgPSBwYXNzID8gZmluZF9yZW5hbWUgOiBmaW5kX29yaWdpbjsKKworCQlmb3IgKGkgPSAwLCBzZyA9IGZpcnN0X3NjYXBlZ29hdChyZXZzLCBjb21taXQsIHNiLT5yZXZlcnNlKTsKKwkJICAgICBpIDwgbnVtX3NnICYmIHNnOworCQkgICAgIHNnID0gc2ctPm5leHQsIGkrKykgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHNnLT5pdGVtOworCQkJaW50IGosIHNhbWU7CisKKwkJCWlmIChzZ19vcmlnaW5baV0pCisJCQkJY29udGludWU7CisJCQlpZiAocGFyc2VfY29tbWl0KHApKQorCQkJCWNvbnRpbnVlOworCQkJcG9yaWdpbiA9IGZpbmQoc2ItPnJlcG8sIHAsIG9yaWdpbiwgc2ItPmJsb29tX2RhdGEpOworCQkJaWYgKCFwb3JpZ2luKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG9pZGVxKCZwb3JpZ2luLT5ibG9iX29pZCwgJm9yaWdpbi0+YmxvYl9vaWQpKSB7CisJCQkJcGFzc193aG9sZV9ibGFtZShzYiwgb3JpZ2luLCBwb3JpZ2luKTsKKwkJCQlibGFtZV9vcmlnaW5fZGVjcmVmKHBvcmlnaW4pOworCQkJCWdvdG8gZmluaXNoOworCQkJfQorCQkJZm9yIChqID0gc2FtZSA9IDA7IGogPCBpOyBqKyspCisJCQkJaWYgKHNnX29yaWdpbltqXSAmJgorCQkJCSAgICBvaWRlcSgmc2dfb3JpZ2luW2pdLT5ibG9iX29pZCwgJnBvcmlnaW4tPmJsb2Jfb2lkKSkgeworCQkJCQlzYW1lID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJaWYgKCFzYW1lKQorCQkJCXNnX29yaWdpbltpXSA9IHBvcmlnaW47CisJCQllbHNlCisJCQkJYmxhbWVfb3JpZ2luX2RlY3JlZihwb3JpZ2luKTsKKwkJfQorCX0KKworCXNiLT5udW1fY29tbWl0cysrOworCWZvciAoaSA9IDAsIHNnID0gZmlyc3Rfc2NhcGVnb2F0KHJldnMsIGNvbW1pdCwgc2ItPnJldmVyc2UpOworCSAgICAgaSA8IG51bV9zZyAmJiBzZzsKKwkgICAgIHNnID0gc2ctPm5leHQsIGkrKykgeworCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwb3JpZ2luID0gc2dfb3JpZ2luW2ldOworCQlpZiAoIXBvcmlnaW4pCisJCQljb250aW51ZTsKKwkJaWYgKCFvcmlnaW4tPnByZXZpb3VzKSB7CisJCQlibGFtZV9vcmlnaW5faW5jcmVmKHBvcmlnaW4pOworCQkJb3JpZ2luLT5wcmV2aW91cyA9IHBvcmlnaW47CisJCX0KKwkJcGFzc19ibGFtZV90b19wYXJlbnQoc2IsIG9yaWdpbiwgcG9yaWdpbiwgMCk7CisJCWlmICghb3JpZ2luLT5zdXNwZWN0cykKKwkJCWdvdG8gZmluaXNoOworCX0KKworCS8qCisJICogUGFzcyByZW1haW5pbmcgc3VzcGVjdHMgZm9yIGlnbm9yZWQgY29tbWl0cyB0byB0aGVpciBwYXJlbnRzLgorCSAqLworCWlmIChvaWRzZXRfY29udGFpbnMoJnNiLT5pZ25vcmVfbGlzdCwgJmNvbW1pdC0+b2JqZWN0Lm9pZCkpIHsKKwkJZm9yIChpID0gMCwgc2cgPSBmaXJzdF9zY2FwZWdvYXQocmV2cywgY29tbWl0LCBzYi0+cmV2ZXJzZSk7CisJCSAgICAgaSA8IG51bV9zZyAmJiBzZzsKKwkJICAgICBzZyA9IHNnLT5uZXh0LCBpKyspIHsKKwkJCXN0cnVjdCBibGFtZV9vcmlnaW4gKnBvcmlnaW4gPSBzZ19vcmlnaW5baV07CisKKwkJCWlmICghcG9yaWdpbikKKwkJCQljb250aW51ZTsKKwkJCXBhc3NfYmxhbWVfdG9fcGFyZW50KHNiLCBvcmlnaW4sIHBvcmlnaW4sIDEpOworCQkJLyoKKwkJCSAqIFByZWVtcHRpdmVseSBkcm9wIHBvcmlnaW4gc28gd2UgY2FuIHJlZnJlc2ggdGhlCisJCQkgKiBmaW5nZXJwcmludHMgaWYgd2UgdXNlIHRoZSBwYXJlbnQgYWdhaW4sIHdoaWNoIGNhbgorCQkJICogb2NjdXIgaWYgeW91IGlnbm9yZSBiYWNrLXRvLWJhY2sgY29tbWl0cy4KKwkJCSAqLworCQkJZHJvcF9vcmlnaW5fYmxvYihwb3JpZ2luKTsKKwkJCWlmICghb3JpZ2luLT5zdXNwZWN0cykKKwkJCQlnb3RvIGZpbmlzaDsKKwkJfQorCX0KKworCS8qCisJICogT3B0aW9uYWxseSBmaW5kIG1vdmVzIGluIHBhcmVudHMnIGZpbGVzLgorCSAqLworCWlmIChvcHQgJiBQSUNLQVhFX0JMQU1FX01PVkUpIHsKKwkJZmlsdGVyX3NtYWxsKHNiLCAmdG9vc21hbGwsICZvcmlnaW4tPnN1c3BlY3RzLCBzYi0+bW92ZV9zY29yZSk7CisJCWlmIChvcmlnaW4tPnN1c3BlY3RzKSB7CisJCQlmb3IgKGkgPSAwLCBzZyA9IGZpcnN0X3NjYXBlZ29hdChyZXZzLCBjb21taXQsIHNiLT5yZXZlcnNlKTsKKwkJCSAgICAgaSA8IG51bV9zZyAmJiBzZzsKKwkJCSAgICAgc2cgPSBzZy0+bmV4dCwgaSsrKSB7CisJCQkJc3RydWN0IGJsYW1lX29yaWdpbiAqcG9yaWdpbiA9IHNnX29yaWdpbltpXTsKKwkJCQlpZiAoIXBvcmlnaW4pCisJCQkJCWNvbnRpbnVlOworCQkJCWZpbmRfbW92ZV9pbl9wYXJlbnQoc2IsICZibGFtZXRhaWwsICZ0b29zbWFsbCwgb3JpZ2luLCBwb3JpZ2luKTsKKwkJCQlpZiAoIW9yaWdpbi0+c3VzcGVjdHMpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBPcHRpb25hbGx5IGZpbmQgY29waWVzIGZyb20gcGFyZW50cycgZmlsZXMuCisJICovCisJaWYgKG9wdCAmIFBJQ0tBWEVfQkxBTUVfQ09QWSkgeworCQlpZiAoc2ItPmNvcHlfc2NvcmUgPiBzYi0+bW92ZV9zY29yZSkKKwkJCWZpbHRlcl9zbWFsbChzYiwgJnRvb3NtYWxsLCAmb3JpZ2luLT5zdXNwZWN0cywgc2ItPmNvcHlfc2NvcmUpOworCQllbHNlIGlmIChzYi0+Y29weV9zY29yZSA8IHNiLT5tb3ZlX3Njb3JlKSB7CisJCQlvcmlnaW4tPnN1c3BlY3RzID0gYmxhbWVfbWVyZ2Uob3JpZ2luLT5zdXNwZWN0cywgdG9vc21hbGwpOworCQkJdG9vc21hbGwgPSBOVUxMOworCQkJZmlsdGVyX3NtYWxsKHNiLCAmdG9vc21hbGwsICZvcmlnaW4tPnN1c3BlY3RzLCBzYi0+Y29weV9zY29yZSk7CisJCX0KKwkJaWYgKCFvcmlnaW4tPnN1c3BlY3RzKQorCQkJZ290byBmaW5pc2g7CisKKwkJZm9yIChpID0gMCwgc2cgPSBmaXJzdF9zY2FwZWdvYXQocmV2cywgY29tbWl0LCBzYi0+cmV2ZXJzZSk7CisJCSAgICAgaSA8IG51bV9zZyAmJiBzZzsKKwkJICAgICBzZyA9IHNnLT5uZXh0LCBpKyspIHsKKwkJCXN0cnVjdCBibGFtZV9vcmlnaW4gKnBvcmlnaW4gPSBzZ19vcmlnaW5baV07CisJCQlmaW5kX2NvcHlfaW5fcGFyZW50KHNiLCAmYmxhbWV0YWlsLCAmdG9vc21hbGwsCisJCQkJCSAgICBvcmlnaW4sIHNnLT5pdGVtLCBwb3JpZ2luLCBvcHQpOworCQkJaWYgKCFvcmlnaW4tPnN1c3BlY3RzKQorCQkJCWdvdG8gZmluaXNoOworCQl9CisJfQorCitmaW5pc2g6CisJKmJsYW1ldGFpbCA9IE5VTEw7CisJZGlzdHJpYnV0ZV9ibGFtZShzYiwgYmxhbWVzKTsKKwkvKgorCSAqIHByZXBlbmQgdG9vc21hbGwgdG8gb3JpZ2luLT5zdXNwZWN0cworCSAqCisJICogVGhlcmUgaXMgbm8gcG9pbnQgaW4gc29ydGluZzogdGhpcyBlbmRzIHVwIG9uIGEgYmlnCisJICogdW5zb3J0ZWQgbGlzdCBpbiB0aGUgY2FsbGVyIGFueXdheS4KKwkgKi8KKwlpZiAodG9vc21hbGwpIHsKKwkJc3RydWN0IGJsYW1lX2VudHJ5ICoqdGFpbCA9ICZ0b29zbWFsbDsKKwkJd2hpbGUgKCp0YWlsKQorCQkJdGFpbCA9ICYoKnRhaWwpLT5uZXh0OworCQkqdGFpbCA9IG9yaWdpbi0+c3VzcGVjdHM7CisJCW9yaWdpbi0+c3VzcGVjdHMgPSB0b29zbWFsbDsKKwl9CisJZm9yIChpID0gMDsgaSA8IG51bV9zZzsgaSsrKSB7CisJCWlmIChzZ19vcmlnaW5baV0pIHsKKwkJCWlmICghc2dfb3JpZ2luW2ldLT5zdXNwZWN0cykKKwkJCQlkcm9wX29yaWdpbl9ibG9iKHNnX29yaWdpbltpXSk7CisJCQlibGFtZV9vcmlnaW5fZGVjcmVmKHNnX29yaWdpbltpXSk7CisJCX0KKwl9CisJZHJvcF9vcmlnaW5fYmxvYihvcmlnaW4pOworCWlmIChzZ19idWYgIT0gc2dfb3JpZ2luKQorCQlmcmVlKHNnX29yaWdpbik7Cit9CisKKy8qCisgKiBUaGUgbWFpbiBsb29wIC0tIHdoaWxlIHdlIGhhdmUgYmxvYnMgd2l0aCBsaW5lcyB3aG9zZSB0cnVlIG9yaWdpbgorICogaXMgc3RpbGwgdW5rbm93biwgcGljayBvbmUgYmxvYiwgYW5kIGFsbG93IGl0cyBsaW5lcyB0byBwYXNzIGJsYW1lcworICogdG8gaXRzIHBhcmVudHMuICovCit2b2lkIGFzc2lnbl9ibGFtZShzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsIGludCBvcHQpCit7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gc2ItPnJldnM7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcHJpb19xdWV1ZV9nZXQoJnNiLT5jb21taXRzKTsKKworCXdoaWxlIChjb21taXQpIHsKKwkJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQ7CisJCXN0cnVjdCBibGFtZV9vcmlnaW4gKnN1c3BlY3QgPSBnZXRfYmxhbWVfc3VzcGVjdHMoY29tbWl0KTsKKworCQkvKiBmaW5kIG9uZSBzdXNwZWN0IHRvIGJyZWFrIGRvd24gKi8KKwkJd2hpbGUgKHN1c3BlY3QgJiYgIXN1c3BlY3QtPnN1c3BlY3RzKQorCQkJc3VzcGVjdCA9IHN1c3BlY3QtPm5leHQ7CisKKwkJaWYgKCFzdXNwZWN0KSB7CisJCQljb21taXQgPSBwcmlvX3F1ZXVlX2dldCgmc2ItPmNvbW1pdHMpOworCQkJY29udGludWU7CisJCX0KKworCQlhc3NlcnQoY29tbWl0ID09IHN1c3BlY3QtPmNvbW1pdCk7CisKKwkJLyoKKwkJICogV2Ugd2lsbCB1c2UgdGhpcyBzdXNwZWN0IGxhdGVyIGluIHRoZSBsb29wLAorCQkgKiBzbyBob2xkIG9udG8gaXQgaW4gdGhlIG1lYW50aW1lLgorCQkgKi8KKwkJYmxhbWVfb3JpZ2luX2luY3JlZihzdXNwZWN0KTsKKwkJcGFyc2VfY29tbWl0KGNvbW1pdCk7CisJCWlmIChzYi0+cmV2ZXJzZSB8fAorCQkgICAgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSAmJgorCQkgICAgICEocmV2cy0+bWF4X2FnZSAhPSAtMSAmJiBjb21taXQtPmRhdGUgPCByZXZzLT5tYXhfYWdlKSkpCisJCQlwYXNzX2JsYW1lKHNiLCBzdXNwZWN0LCBvcHQpOworCQllbHNlIHsKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCQlpZiAoY29tbWl0LT5vYmplY3QucGFyc2VkKQorCQkJCW1hcmtfcGFyZW50c191bmludGVyZXN0aW5nKGNvbW1pdCk7CisJCX0KKwkJLyogdHJlYXQgcm9vdCBjb21taXQgYXMgYm91bmRhcnkgKi8KKwkJaWYgKCFjb21taXQtPnBhcmVudHMgJiYgIXNiLT5zaG93X3Jvb3QpCisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCisJCS8qIFRha2UgcmVzcG9uc2liaWxpdHkgZm9yIHRoZSByZW1haW5pbmcgZW50cmllcyAqLworCQllbnQgPSBzdXNwZWN0LT5zdXNwZWN0czsKKwkJaWYgKGVudCkgeworCQkJc3VzcGVjdC0+Z3VpbHR5ID0gMTsKKwkJCWZvciAoOzspIHsKKwkJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5leHQgPSBlbnQtPm5leHQ7CisJCQkJaWYgKHNiLT5mb3VuZF9ndWlsdHlfZW50cnkpCisJCQkJCXNiLT5mb3VuZF9ndWlsdHlfZW50cnkoZW50LCBzYi0+Zm91bmRfZ3VpbHR5X2VudHJ5X2RhdGEpOworCQkJCWlmIChuZXh0KSB7CisJCQkJCWVudCA9IG5leHQ7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQllbnQtPm5leHQgPSBzYi0+ZW50OworCQkJCXNiLT5lbnQgPSBzdXNwZWN0LT5zdXNwZWN0czsKKwkJCQlzdXNwZWN0LT5zdXNwZWN0cyA9IE5VTEw7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJYmxhbWVfb3JpZ2luX2RlY3JlZihzdXNwZWN0KTsKKworCQlpZiAoc2ItPmRlYnVnKSAvKiBzYW5pdHkgKi8KKwkJCXNhbml0eV9jaGVja19yZWZjbnQoc2IpOworCX0KK30KKworLyoKKyAqIFRvIGFsbG93IHF1aWNrIGFjY2VzcyB0byB0aGUgY29udGVudHMgb2YgbnRoIGxpbmUgaW4gdGhlCisgKiBmaW5hbCBpbWFnZSwgcHJlcGFyZSBhbiBpbmRleCBpbiB0aGUgc2NvcmVib2FyZC4KKyAqLworc3RhdGljIGludCBwcmVwYXJlX2xpbmVzKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYikKK3sKKwlzYi0+bnVtX2xpbmVzID0gZmluZF9saW5lX3N0YXJ0cygmc2ItPmxpbmVubywgc2ItPmZpbmFsX2J1ZiwKKwkJCQkJIHNiLT5maW5hbF9idWZfc2l6ZSk7CisJcmV0dXJuIHNiLT5udW1fbGluZXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpmaW5kX3NpbmdsZV9maW5hbChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCWNvbnN0IGNoYXIgKipuYW1lX3ApCit7CisJaW50IGk7CisJc3RydWN0IGNvbW1pdCAqZm91bmQgPSBOVUxMOworCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IHJldnMtPnBlbmRpbmcubnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0uaXRlbTsKKwkJaWYgKG9iai0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisJCW9iaiA9IGRlcmVmX3RhZyhyZXZzLT5yZXBvLCBvYmosIE5VTEwsIDApOworCQlpZiAob2JqLT50eXBlICE9IE9CSl9DT01NSVQpCisJCQlkaWUoIk5vbiBjb21taXQgJXM/IiwgcmV2cy0+cGVuZGluZy5vYmplY3RzW2ldLm5hbWUpOworCQlpZiAoZm91bmQpCisJCQlkaWUoIk1vcmUgdGhhbiBvbmUgY29tbWl0IHRvIGRpZyBmcm9tICVzIGFuZCAlcz8iLAorCQkJICAgIHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lLCBuYW1lKTsKKwkJZm91bmQgPSAoc3RydWN0IGNvbW1pdCAqKW9iajsKKwkJbmFtZSA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lOworCX0KKwlpZiAobmFtZV9wKQorCQkqbmFtZV9wID0geHN0cmR1cF9vcl9udWxsKG5hbWUpOworCXJldHVybiBmb3VuZDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmR3aW1fcmV2ZXJzZV9pbml0aWFsKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkJICAgY29uc3QgY2hhciAqKm5hbWVfcCkKK3sKKwkvKgorCSAqIERXSU0gImdpdCBibGFtZSAtLXJldmVyc2UgT05FIC0tIFBBVEgiIGFzCisJICogImdpdCBibGFtZSAtLXJldmVyc2UgT05FLi5IRUFEIC0tIFBBVEgiIGJ1dCBvbmx5IGRvIHNvCisJICogd2hlbiBpdCBtYWtlcyBzZW5zZS4KKwkgKi8KKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQ7CisJc3RydWN0IG9iamVjdF9pZCBoZWFkX29pZDsKKworCWlmIChyZXZzLT5wZW5kaW5nLm5yICE9IDEpCisJCXJldHVybiBOVUxMOworCisJLyogSXMgdGhhdCBzb2xlIHJldiBhIGNvbW1pdHRpc2g/ICovCisJb2JqID0gcmV2cy0+cGVuZGluZy5vYmplY3RzWzBdLml0ZW07CisJb2JqID0gZGVyZWZfdGFnKHJldnMtPnJlcG8sIG9iaiwgTlVMTCwgMCk7CisJaWYgKG9iai0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIERvIHdlIGhhdmUgSEVBRD8gKi8KKwlpZiAoIXJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsICZoZWFkX29pZCwgTlVMTCkpCisJCXJldHVybiBOVUxMOworCWhlYWRfY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHJldnMtPnJlcG8sCisJCQkJCQkgICAgICZoZWFkX29pZCwgMSk7CisJaWYgKCFoZWFkX2NvbW1pdCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBUdXJuICJPTkUiIGludG8gIk9ORS4uSEVBRCIgdGhlbiAqLworCW9iai0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgJmhlYWRfY29tbWl0LT5vYmplY3QsICJIRUFEIik7CisKKwlpZiAobmFtZV9wKQorCQkqbmFtZV9wID0gcmV2cy0+cGVuZGluZy5vYmplY3RzWzBdLm5hbWU7CisJcmV0dXJuIChzdHJ1Y3QgY29tbWl0ICopb2JqOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqZmluZF9zaW5nbGVfaW5pdGlhbChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCSAgY29uc3QgY2hhciAqKm5hbWVfcCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY29tbWl0ICpmb3VuZCA9IE5VTEw7CisJY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisKKwkvKgorCSAqIFRoZXJlIG11c3QgYmUgb25lIGFuZCBvbmx5IG9uZSBuZWdhdGl2ZSBjb21taXQsIGFuZCBpdCBtdXN0IGJlCisJICogdGhlIGJvdW5kYXJ5LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCByZXZzLT5wZW5kaW5nLm5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gcmV2cy0+cGVuZGluZy5vYmplY3RzW2ldLml0ZW07CisJCWlmICghKG9iai0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCWNvbnRpbnVlOworCQlvYmogPSBkZXJlZl90YWcocmV2cy0+cmVwbywgb2JqLCBOVUxMLCAwKTsKKwkJaWYgKG9iai0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQkJZGllKCJOb24gY29tbWl0ICVzPyIsIHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lKTsKKwkJaWYgKGZvdW5kKQorCQkJZGllKCJNb3JlIHRoYW4gb25lIGNvbW1pdCB0byBkaWcgdXAgZnJvbSwgJXMgYW5kICVzPyIsCisJCQkgICAgcmV2cy0+cGVuZGluZy5vYmplY3RzW2ldLm5hbWUsIG5hbWUpOworCQlmb3VuZCA9IChzdHJ1Y3QgY29tbWl0ICopIG9iajsKKwkJbmFtZSA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lOworCX0KKworCWlmICghbmFtZSkKKwkJZm91bmQgPSBkd2ltX3JldmVyc2VfaW5pdGlhbChyZXZzLCAmbmFtZSk7CisJaWYgKCFuYW1lKQorCQlkaWUoIk5vIGNvbW1pdCB0byBkaWcgdXAgZnJvbT8iKTsKKworCWlmIChuYW1lX3ApCisJCSpuYW1lX3AgPSB4c3RyZHVwKG5hbWUpOworCXJldHVybiBmb3VuZDsKK30KKwordm9pZCBpbml0X3Njb3JlYm9hcmQoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiKQoreworCW1lbXNldChzYiwgMCwgc2l6ZW9mKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkKSk7CisJc2ItPm1vdmVfc2NvcmUgPSBCTEFNRV9ERUZBVUxUX01PVkVfU0NPUkU7CisJc2ItPmNvcHlfc2NvcmUgPSBCTEFNRV9ERUZBVUxUX0NPUFlfU0NPUkU7Cit9CisKK3ZvaWQgc2V0dXBfc2NvcmVib2FyZChzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsCisJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgICAgIHN0cnVjdCBibGFtZV9vcmlnaW4gKipvcmlnKQoreworCWNvbnN0IGNoYXIgKmZpbmFsX2NvbW1pdF9uYW1lID0gTlVMTDsKKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvOworCXN0cnVjdCBjb21taXQgKmZpbmFsX2NvbW1pdCA9IE5VTEw7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJaW5pdF9ibGFtZV9zdXNwZWN0cygmYmxhbWVfc3VzcGVjdHMpOworCisJaWYgKHNiLT5yZXZlcnNlICYmIHNiLT5jb250ZW50c19mcm9tKQorCQlkaWUoXygiLS1jb250ZW50cyBhbmQgLS1yZXZlcnNlIGRvIG5vdCBibGVuZCB3ZWxsLiIpKTsKKworCWlmICghc2ItPnJlcG8pCisJCUJVRygicmVwbyBpcyBOVUxMIik7CisKKwlpZiAoIXNiLT5yZXZlcnNlKSB7CisJCXNiLT5maW5hbCA9IGZpbmRfc2luZ2xlX2ZpbmFsKHNiLT5yZXZzLCAmZmluYWxfY29tbWl0X25hbWUpOworCQlzYi0+Y29tbWl0cy5jb21wYXJlID0gY29tcGFyZV9jb21taXRzX2J5X2NvbW1pdF9kYXRlOworCX0gZWxzZSB7CisJCXNiLT5maW5hbCA9IGZpbmRfc2luZ2xlX2luaXRpYWwoc2ItPnJldnMsICZmaW5hbF9jb21taXRfbmFtZSk7CisJCXNiLT5jb21taXRzLmNvbXBhcmUgPSBjb21wYXJlX2NvbW1pdHNfYnlfcmV2ZXJzZV9jb21taXRfZGF0ZTsKKwl9CisKKwlpZiAoc2ItPmZpbmFsICYmIHNiLT5jb250ZW50c19mcm9tKQorCQlkaWUoXygiY2Fubm90IHVzZSAtLWNvbnRlbnRzIHdpdGggZmluYWwgY29tbWl0IG9iamVjdCBuYW1lIikpOworCisJaWYgKHNiLT5yZXZlcnNlICYmIHNiLT5yZXZzLT5maXJzdF9wYXJlbnRfb25seSkKKwkJc2ItPnJldnMtPmNoaWxkcmVuLm5hbWUgPSBOVUxMOworCisJaWYgKCFzYi0+ZmluYWwpIHsKKwkJLyoKKwkJICogIi0tbm90IEEgQiAtLSBwYXRoIiB3aXRob3V0IGFueXRoaW5nIHBvc2l0aXZlOworCQkgKiBkbyBub3QgZGVmYXVsdCB0byBIRUFELCBidXQgdXNlIHRoZSB3b3JraW5nIHRyZWUKKwkJICogb3IgIi0tY29udGVudHMiLgorCQkgKi8KKwkJc2V0dXBfd29ya190cmVlKCk7CisJCXNiLT5maW5hbCA9IGZha2Vfd29ya2luZ190cmVlX2NvbW1pdChzYi0+cmVwbywKKwkJCQkJCSAgICAgJnNiLT5yZXZzLT5kaWZmb3B0LAorCQkJCQkJICAgICBwYXRoLCBzYi0+Y29udGVudHNfZnJvbSk7CisJCWFkZF9wZW5kaW5nX29iamVjdChzYi0+cmV2cywgJihzYi0+ZmluYWwtPm9iamVjdCksICI6Iik7CisJfQorCisJaWYgKHNiLT5yZXZlcnNlICYmIHNiLT5yZXZzLT5maXJzdF9wYXJlbnRfb25seSkgeworCQlmaW5hbF9jb21taXQgPSBmaW5kX3NpbmdsZV9maW5hbChzYi0+cmV2cywgTlVMTCk7CisJCWlmICghZmluYWxfY29tbWl0KQorCQkJZGllKF8oIi0tcmV2ZXJzZSBhbmQgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSBzcGVjaWZpZWQgbGF0ZXN0IGNvbW1pdCIpKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGhhdmUgYm90dG9tLCB0aGlzIHdpbGwgbWFyayB0aGUgYW5jZXN0b3JzIG9mIHRoZQorCSAqIGJvdHRvbSBjb21taXRzIHdlIHdvdWxkIHJlYWNoIHdoaWxlIHRyYXZlcnNpbmcgYXMKKwkgKiB1bmludGVyZXN0aW5nLgorCSAqLworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoc2ItPnJldnMpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisKKwlpZiAoc2ItPnJldmVyc2UgJiYgc2ItPnJldnMtPmZpcnN0X3BhcmVudF9vbmx5KSB7CisJCXN0cnVjdCBjb21taXQgKmMgPSBmaW5hbF9jb21taXQ7CisKKwkJc2ItPnJldnMtPmNoaWxkcmVuLm5hbWUgPSAiY2hpbGRyZW4iOworCQl3aGlsZSAoYy0+cGFyZW50cyAmJgorCQkgICAgICAgIW9pZGVxKCZjLT5vYmplY3Qub2lkLCAmc2ItPmZpbmFsLT5vYmplY3Qub2lkKSkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpsID0geGNhbGxvYygxLCBzaXplb2YoKmwpKTsKKworCQkJbC0+aXRlbSA9IGM7CisJCQlpZiAoYWRkX2RlY29yYXRpb24oJnNiLT5yZXZzLT5jaGlsZHJlbiwKKwkJCQkJICAgJmMtPnBhcmVudHMtPml0ZW0tPm9iamVjdCwgbCkpCisJCQkJQlVHKCJub3QgdW5pcXVlIGl0ZW0gaW4gZmlyc3QtcGFyZW50IGNoYWluIik7CisJCQljID0gYy0+cGFyZW50cy0+aXRlbTsKKwkJfQorCisJCWlmICghb2lkZXEoJmMtPm9iamVjdC5vaWQsICZzYi0+ZmluYWwtPm9iamVjdC5vaWQpKQorCQkJZGllKF8oIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHJhbmdlIGFsb25nIGZpcnN0LXBhcmVudCBjaGFpbiIpKTsKKwl9CisKKwlpZiAoaXNfbnVsbF9vaWQoJnNiLT5maW5hbC0+b2JqZWN0Lm9pZCkpIHsKKwkJbyA9IGdldF9ibGFtZV9zdXNwZWN0cyhzYi0+ZmluYWwpOworCQlzYi0+ZmluYWxfYnVmID0geG1lbWR1cHooby0+ZmlsZS5wdHIsIG8tPmZpbGUuc2l6ZSk7CisJCXNiLT5maW5hbF9idWZfc2l6ZSA9IG8tPmZpbGUuc2l6ZTsKKwl9CisJZWxzZSB7CisJCW8gPSBnZXRfb3JpZ2luKHNiLT5maW5hbCwgcGF0aCk7CisJCWlmIChmaWxsX2Jsb2Jfc2hhMV9hbmRfbW9kZShzYi0+cmVwbywgbykpCisJCQlkaWUoXygibm8gc3VjaCBwYXRoICVzIGluICVzIiksIHBhdGgsIGZpbmFsX2NvbW1pdF9uYW1lKTsKKworCQlpZiAoc2ItPnJldnMtPmRpZmZvcHQuZmxhZ3MuYWxsb3dfdGV4dGNvbnYgJiYKKwkJICAgIHRleHRjb252X29iamVjdChzYi0+cmVwbywgcGF0aCwgby0+bW9kZSwgJm8tPmJsb2Jfb2lkLCAxLCAoY2hhciAqKikgJnNiLT5maW5hbF9idWYsCisJCQkJICAgICZzYi0+ZmluYWxfYnVmX3NpemUpKQorCQkJOworCQllbHNlCisJCQlzYi0+ZmluYWxfYnVmID0gcmVhZF9vYmplY3RfZmlsZSgmby0+YmxvYl9vaWQsICZ0eXBlLAorCQkJCQkJCSAmc2ItPmZpbmFsX2J1Zl9zaXplKTsKKworCQlpZiAoIXNiLT5maW5hbF9idWYpCisJCQlkaWUoXygiY2Fubm90IHJlYWQgYmxvYiAlcyBmb3IgcGF0aCAlcyIpLAorCQkJICAgIG9pZF90b19oZXgoJm8tPmJsb2Jfb2lkKSwKKwkJCSAgICBwYXRoKTsKKwl9CisJc2ItPm51bV9yZWFkX2Jsb2IrKzsKKwlwcmVwYXJlX2xpbmVzKHNiKTsKKworCWlmIChvcmlnKQorCQkqb3JpZyA9IG87CisKKwlmcmVlKChjaGFyICopZmluYWxfY29tbWl0X25hbWUpOworfQorCisKKworc3RydWN0IGJsYW1lX2VudHJ5ICpibGFtZV9lbnRyeV9wcmVwZW5kKHN0cnVjdCBibGFtZV9lbnRyeSAqaGVhZCwKKwkJCQkJbG9uZyBzdGFydCwgbG9uZyBlbmQsCisJCQkJCXN0cnVjdCBibGFtZV9vcmlnaW4gKm8pCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICpuZXdfaGVhZCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBibGFtZV9lbnRyeSkpOworCW5ld19oZWFkLT5sbm8gPSBzdGFydDsKKwluZXdfaGVhZC0+bnVtX2xpbmVzID0gZW5kIC0gc3RhcnQ7CisJbmV3X2hlYWQtPnN1c3BlY3QgPSBvOworCW5ld19oZWFkLT5zX2xubyA9IHN0YXJ0OworCW5ld19oZWFkLT5uZXh0ID0gaGVhZDsKKwlibGFtZV9vcmlnaW5faW5jcmVmKG8pOworCXJldHVybiBuZXdfaGVhZDsKK30KKwordm9pZCBzZXR1cF9ibGFtZV9ibG9vbV9kYXRhKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwKKwkJCSAgICBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBibGFtZV9ibG9vbV9kYXRhICpiZDsKKworCWlmICghc2ItPnJlcG8tPm9iamVjdHMtPmNvbW1pdF9ncmFwaCkKKwkJcmV0dXJuOworCisJaWYgKCFzYi0+cmVwby0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoLT5ibG9vbV9maWx0ZXJfc2V0dGluZ3MpCisJCXJldHVybjsKKworCWJkID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGJsYW1lX2Jsb29tX2RhdGEpKTsKKworCWJkLT5zZXR0aW5ncyA9IHNiLT5yZXBvLT5vYmplY3RzLT5jb21taXRfZ3JhcGgtPmJsb29tX2ZpbHRlcl9zZXR0aW5nczsKKworCWJkLT5hbGxvYyA9IDQ7CisJYmQtPm5yID0gMDsKKwlBTExPQ19BUlJBWShiZC0+a2V5cywgYmQtPmFsbG9jKTsKKworCWFkZF9ibG9vbV9rZXkoYmQsIHBhdGgpOworCisJc2ItPmJsb29tX2RhdGEgPSBiZDsKK30KKwordm9pZCBjbGVhbnVwX3Njb3JlYm9hcmQoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiKQoreworCWlmIChzYi0+Ymxvb21fZGF0YSkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IHNiLT5ibG9vbV9kYXRhLT5ucjsgaSsrKSB7CisJCQlmcmVlKHNiLT5ibG9vbV9kYXRhLT5rZXlzW2ldLT5oYXNoZXMpOworCQkJZnJlZShzYi0+Ymxvb21fZGF0YS0+a2V5c1tpXSk7CisJCX0KKwkJZnJlZShzYi0+Ymxvb21fZGF0YS0+a2V5cyk7CisJCUZSRUVfQU5EX05VTEwoc2ItPmJsb29tX2RhdGEpOworCisJCXRyYWNlMl9kYXRhX2ludG1heCgiYmxhbWUiLCBzYi0+cmVwbywKKwkJCQkgICAiYmxvb20vcXVlcmllcyIsIGJsb29tX2NvdW50X3F1ZXJpZXMpOworCQl0cmFjZTJfZGF0YV9pbnRtYXgoImJsYW1lIiwgc2ItPnJlcG8sCisJCQkJICAgImJsb29tL3Jlc3BvbnNlLW5vIiwgYmxvb21fY291bnRfbm8pOworCX0KK30KZGlmZiAtLWdpdCBhL2JsYW1lLmggYi9ibGFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YmJlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9ibGFtZS5oCkBAIC0wLDAgKzEsMTk2IEBACisjaWZuZGVmIEJMQU1FX0gKKyNkZWZpbmUgQkxBTUVfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisKKyNkZWZpbmUgUElDS0FYRV9CTEFNRV9NT1ZFCQkwMQorI2RlZmluZSBQSUNLQVhFX0JMQU1FX0NPUFkJCTAyCisjZGVmaW5lIFBJQ0tBWEVfQkxBTUVfQ09QWV9IQVJERVIJMDQKKyNkZWZpbmUgUElDS0FYRV9CTEFNRV9DT1BZX0hBUkRFU1QJMDEwCisKKyNkZWZpbmUgQkxBTUVfREVGQVVMVF9NT1ZFX1NDT1JFCTIwCisjZGVmaW5lIEJMQU1FX0RFRkFVTFRfQ09QWV9TQ09SRQk0MAorCitzdHJ1Y3QgZmluZ2VycHJpbnQ7CisKKy8qCisgKiBPbmUgYmxvYiBpbiBhIGNvbW1pdCB0aGF0IGlzIGJlaW5nIHN1c3BlY3RlZAorICovCitzdHJ1Y3QgYmxhbWVfb3JpZ2luIHsKKwlpbnQgcmVmY250OworCS8qIFJlY29yZCBwcmVjZWRpbmcgYmxhbWUgcmVjb3JkIGZvciB0aGlzIGJsb2IgKi8KKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwcmV2aW91czsKKwkvKiBvcmlnaW5zIGFyZSBwdXQgaW4gYSBsaXN0IGxpbmtlZCB2aWEgYG5leHQnIGhhbmdpbmcgb2ZmIHRoZQorCSAqIGNvcnJlc3BvbmRpbmcgY29tbWl0J3MgdXRpbCBmaWVsZCBpbiBvcmRlciB0byBtYWtlIGZpbmRpbmcKKwkgKiB0aGVtIGZhc3QuICBUaGUgcHJlc2VuY2UgaW4gdGhpcyBjaGFpbiBkb2VzIG5vdCBjb3VudAorCSAqIHRvd2FyZHMgdGhlIG9yaWdpbidzIHJlZmVyZW5jZSBjb3VudC4gIEl0IGlzIHRlbXB0aW5nIHRvCisJICogbGV0IGl0IGNvdW50IGFzIGxvbmcgYXMgdGhlIGNvbW1pdCBpcyBwZW5kaW5nIGV4YW1pbmF0aW9uLAorCSAqIGJ1dCBldmVuIHVuZGVyIGNpcmN1bXN0YW5jZXMgd2hlcmUgdGhlIGNvbW1pdCB3aWxsIGJlCisJICogcHJlc2VudCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgcHJpb3JpdHkgcXVldWUgb2YgdW5leGFtaW5lZAorCSAqIGNvbW1pdHMsIHByb2Nlc3NpbmcgdGhlIGZpcnN0IGluc3RhbmNlIHdpbGwgbm90IGxlYXZlIGFueQorCSAqIHdvcmsgcmVxdWlyaW5nIHRoZSBvcmlnaW4gZGF0YSBmb3IgdGhlIHNlY29uZCBpbnN0YW5jZS4gIEFuCisJICogaW50ZXJzcGVyc2VkIGNvbW1pdCBjaGFuZ2luZyB0aGF0IHdvdWxkIGhhdmUgdG8gYmUKKwkgKiBwcmVleGlzdGluZyB3aXRoIGEgZGlmZmVyZW50IGFuY2VzdHJ5IGFuZCB3aXRoIHRoZSBzYW1lCisJICogY29tbWl0IGRhdGUgaW4gb3JkZXIgdG8gd2VkZ2UgaXRzZWxmIGJldHdlZW4gdHdvIGluc3RhbmNlcworCSAqIG9mIHRoZSBzYW1lIGNvbW1pdCBpbiB0aGUgcHJpb3JpdHkgcXVldWUgX2FuZF8gcHJvZHVjZQorCSAqIGJsYW1lIGVudHJpZXMgcmVsZXZhbnQgZm9yIGl0LiAgV2hpbGUgd2UgZG9uJ3Qgd2FudCB0byBsZXQKKwkgKiB1cyBnZXQgdHJpcHBlZCB1cCBieSB0aGlzIGNhc2UsIGl0IGNlcnRhaW5seSBkb2VzIG5vdCBzZWVtCisJICogd29ydGggb3B0aW1pemluZyBmb3IuCisJICovCisJc3RydWN0IGJsYW1lX29yaWdpbiAqbmV4dDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJLyogYHN1c3BlY3RzJyBjb250YWlucyBibGFtZSBlbnRyaWVzIHRoYXQgbWF5IGJlIGF0dHJpYnV0ZWQgdG8KKwkgKiB0aGlzIG9yaWdpbidzIGNvbW1pdCBvciB0byBwYXJlbnQgY29tbWl0cy4gIFdoZW4gYSBjb21taXQKKwkgKiBpcyBiZWluZyBwcm9jZXNzZWQsIGFsbCBzdXNwZWN0cyB3aWxsIGJlIG1vdmVkLCBlaXRoZXIgYnkKKwkgKiBhc3NpZ25pbmcgdGhlbSB0byBhbiBvcmlnaW4gaW4gYSBkaWZmZXJlbnQgY29tbWl0LCBvciBieQorCSAqIHNoaXBwaW5nIHRoZW0gdG8gdGhlIHNjb3JlYm9hcmQncyBlbnQgbGlzdCBiZWNhdXNlIHRoZXkKKwkgKiBjYW5ub3QgYmUgYXR0cmlidXRlZCB0byBhIGRpZmZlcmVudCBjb21taXQuCisJICovCisJc3RydWN0IGJsYW1lX2VudHJ5ICpzdXNwZWN0czsKKwltbWZpbGVfdCBmaWxlOworCWludCBudW1fbGluZXM7CisJc3RydWN0IGZpbmdlcnByaW50ICpmaW5nZXJwcmludHM7CisJc3RydWN0IG9iamVjdF9pZCBibG9iX29pZDsKKwl1bnNpZ25lZCBzaG9ydCBtb2RlOworCS8qIGd1aWx0eSBnZXRzIHNldCB3aGVuIHNoaXBwaW5nIGFueSBzdXNwZWN0cyB0byB0aGUgZmluYWwKKwkgKiBibGFtZSBsaXN0IGluc3RlYWQgb2Ygb3RoZXIgY29tbWl0cworCSAqLworCWNoYXIgZ3VpbHR5OworCWNoYXIgcGF0aFtGTEVYX0FSUkFZXTsKK307CisKKy8qCisgKiBFYWNoIGdyb3VwIG9mIGxpbmVzIGlzIGRlc2NyaWJlZCBieSBhIGJsYW1lX2VudHJ5OyBpdCBjYW4gYmUgc3BsaXQKKyAqIGFzIHdlIHBhc3MgYmxhbWUgdG8gdGhlIHBhcmVudHMuICBUaGV5IGFyZSBhcnJhbmdlZCBpbiBsaW5rZWQgbGlzdHMKKyAqIGtlcHQgYXMgYHN1c3BlY3RzJyBvZiBzb21lIHVucHJvY2Vzc2VkIG9yaWdpbiwgb3IgZW50ZXJlZCAod2hlbiB0aGUKKyAqIGJsYW1lIG9yaWdpbiBoYXMgYmVlbiBmaW5hbGl6ZWQpIGludG8gdGhlIHNjb3JlYm9hcmQgc3RydWN0dXJlLgorICogV2hpbGUgdGhlIHNjb3JlYm9hcmQgc3RydWN0dXJlIGlzIG9ubHkgc29ydGVkIGF0IHRoZSBlbmQgb2YKKyAqIHByb2Nlc3NpbmcgKGFjY29yZGluZyB0byBmaW5hbCBpbWFnZSBsaW5lIG51bWJlciksIHRoZSBsaXN0cworICogYXR0YWNoZWQgdG8gYW4gb3JpZ2luIGFyZSBzb3J0ZWQgYnkgdGhlIHRhcmdldCBsaW5lIG51bWJlci4KKyAqLworc3RydWN0IGJsYW1lX2VudHJ5IHsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5leHQ7CisKKwkvKiB0aGUgZmlyc3QgbGluZSBvZiB0aGlzIGdyb3VwIGluIHRoZSBmaW5hbCBpbWFnZTsKKwkgKiBpbnRlcm5hbGx5IGFsbCBsaW5lIG51bWJlcnMgYXJlIDAgYmFzZWQuCisJICovCisJaW50IGxubzsKKworCS8qIGhvdyBtYW55IGxpbmVzIHRoaXMgZ3JvdXAgaGFzICovCisJaW50IG51bV9saW5lczsKKworCS8qIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIHRoaXMgZ3JvdXAgaW50byB0aGUgZmluYWwgaW1hZ2UgKi8KKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpzdXNwZWN0OworCisJLyogdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBmaXJzdCBsaW5lIG9mIHRoaXMgZ3JvdXAgaW4gdGhlCisJICogc3VzcGVjdCdzIGZpbGU7IGludGVybmFsbHkgYWxsIGxpbmUgbnVtYmVycyBhcmUgMCBiYXNlZC4KKwkgKi8KKwlpbnQgc19sbm87CisKKwkvKiBob3cgc2lnbmlmaWNhbnQgdGhpcyBlbnRyeSBpcyAtLSBjYWNoZWQgdG8gYXZvaWQKKwkgKiBzY2FubmluZyB0aGUgbGluZXMgb3ZlciBhbmQgb3Zlci4KKwkgKi8KKwl1bnNpZ25lZCBzY29yZTsKKwlpbnQgaWdub3JlZDsKKwlpbnQgdW5ibGFtYWJsZTsKK307CisKK3N0cnVjdCBibGFtZV9ibG9vbV9kYXRhOworCisvKgorICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJsYW1lIGFzc2lnbm1lbnQuCisgKi8KK3N0cnVjdCBibGFtZV9zY29yZWJvYXJkIHsKKwkvKiB0aGUgZmluYWwgY29tbWl0IChpLmUuIHdoZXJlIHdlIHN0YXJ0ZWQgZGlnZ2luZyBmcm9tKSAqLworCXN0cnVjdCBjb21taXQgKmZpbmFsOworCS8qIFByaW9yaXR5IHF1ZXVlIGZvciBjb21taXRzIHdpdGggdW5hc3NpZ25lZCBibGFtZSByZWNvcmRzICovCisJc3RydWN0IHByaW9fcXVldWUgY29tbWl0czsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7CisJY29uc3QgY2hhciAqcGF0aDsKKworCS8qCisJICogVGhlIGNvbnRlbnRzIGluIHRoZSBmaW5hbCBpbWFnZS4KKwkgKiBVc2VkIGJ5IG1hbnkgZnVuY3Rpb25zIHRvIG9idGFpbiBjb250ZW50cyBvZiB0aGUgbnRoIGxpbmUsCisJICogaW5kZXhlZCB3aXRoIHNjb3JlYm9hcmQubGluZW5vW2JsYW1lX2VudHJ5Lmxub10uCisJICovCisJY29uc3QgY2hhciAqZmluYWxfYnVmOworCXVuc2lnbmVkIGxvbmcgZmluYWxfYnVmX3NpemU7CisKKwkvKiBsaW5rZWQgbGlzdCBvZiBibGFtZXMgKi8KKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudDsKKworCXN0cnVjdCBvaWRzZXQgaWdub3JlX2xpc3Q7CisKKwkvKiBsb29rLXVwIGEgbGluZSBpbiB0aGUgZmluYWwgYnVmZmVyICovCisJaW50IG51bV9saW5lczsKKwlpbnQgKmxpbmVubzsKKworCS8qIHN0YXRzICovCisJaW50IG51bV9yZWFkX2Jsb2I7CisJaW50IG51bV9nZXRfcGF0Y2g7CisJaW50IG51bV9jb21taXRzOworCisJLyoKKwkgKiBibGFtZSBmb3IgYSBibGFtZV9lbnRyeSB3aXRoIHNjb3JlIGxvd2VyIHRoYW4gdGhlc2UgdGhyZXNob2xkcworCSAqIGlzIG5vdCBwYXNzZWQgdG8gdGhlIHBhcmVudCB1c2luZyBtb3ZlL2NvcHkgbG9naWMuCisJICovCisJdW5zaWduZWQgbW92ZV9zY29yZTsKKwl1bnNpZ25lZCBjb3B5X3Njb3JlOworCisJLyogdXNlIHRoaXMgZmlsZSdzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSAqLworCWNvbnN0IGNoYXIgKmNvbnRlbnRzX2Zyb207CisKKwkvKiBmbGFncyAqLworCWludCByZXZlcnNlOworCWludCBzaG93X3Jvb3Q7CisJaW50IHhkbF9vcHRzOworCWludCBub193aG9sZV9maWxlX3JlbmFtZTsKKwlpbnQgZGVidWc7CisKKwkvKiBjYWxsYmFja3MgKi8KKwl2b2lkKCpvbl9zYW5pdHlfZmFpbCkoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKiwgaW50KTsKKwl2b2lkKCpmb3VuZF9ndWlsdHlfZW50cnkpKHN0cnVjdCBibGFtZV9lbnRyeSAqLCB2b2lkICopOworCisJdm9pZCAqZm91bmRfZ3VpbHR5X2VudHJ5X2RhdGE7CisJc3RydWN0IGJsYW1lX2Jsb29tX2RhdGEgKmJsb29tX2RhdGE7Cit9OworCisvKgorICogT3JpZ2luIGlzIHJlZmNvdW50ZWQgYW5kIHVzdWFsbHkgd2Uga2VlcCB0aGUgYmxvYiBjb250ZW50cyB0byBiZQorICogcmV1c2VkLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBibGFtZV9vcmlnaW4gKmJsYW1lX29yaWdpbl9pbmNyZWYoc3RydWN0IGJsYW1lX29yaWdpbiAqbykKK3sKKwlpZiAobykKKwkJby0+cmVmY250Kys7CisJcmV0dXJuIG87Cit9Cit2b2lkIGJsYW1lX29yaWdpbl9kZWNyZWYoc3RydWN0IGJsYW1lX29yaWdpbiAqbyk7CisKK3ZvaWQgYmxhbWVfY29hbGVzY2Uoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiKTsKK3ZvaWQgYmxhbWVfc29ydF9maW5hbChzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IpOwordW5zaWduZWQgYmxhbWVfZW50cnlfc2NvcmUoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLCBzdHJ1Y3QgYmxhbWVfZW50cnkgKmUpOwordm9pZCBhc3NpZ25fYmxhbWUoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLCBpbnQgb3B0KTsKK2NvbnN0IGNoYXIgKmJsYW1lX250aF9saW5lKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwgbG9uZyBsbm8pOworCit2b2lkIGluaXRfc2NvcmVib2FyZChzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IpOwordm9pZCBzZXR1cF9zY29yZWJvYXJkKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwKKwkJICAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJICAgICAgc3RydWN0IGJsYW1lX29yaWdpbiAqKm9yaWcpOwordm9pZCBzZXR1cF9ibGFtZV9ibG9vbV9kYXRhKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwKKwkJCSAgICBjb25zdCBjaGFyICpwYXRoKTsKK3ZvaWQgY2xlYW51cF9zY29yZWJvYXJkKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYik7CisKK3N0cnVjdCBibGFtZV9lbnRyeSAqYmxhbWVfZW50cnlfcHJlcGVuZChzdHJ1Y3QgYmxhbWVfZW50cnkgKmhlYWQsCisJCQkJCWxvbmcgc3RhcnQsIGxvbmcgZW5kLAorCQkJCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvKTsKKworc3RydWN0IGJsYW1lX29yaWdpbiAqZ2V0X2JsYW1lX3N1c3BlY3RzKHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CisKKyNlbmRpZiAvKiBCTEFNRV9IICovCmRpZmYgLS1naXQgYS9ibG9iLmMgYi9ibG9iLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZmOWFiZAotLS0gL2Rldi9udWxsCisrKyBiL2Jsb2IuYwpAQCAtMCwwICsxLDIwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImFsbG9jLmgiCisKK2NvbnN0IGNoYXIgKmJsb2JfdHlwZSA9ICJibG9iIjsKKworc3RydWN0IGJsb2IgKmxvb2t1cF9ibG9iKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChyLCBvaWQpOworCWlmICghb2JqKQorCQlyZXR1cm4gY3JlYXRlX29iamVjdChyLCBvaWQsIGFsbG9jX2Jsb2Jfbm9kZShyKSk7CisJcmV0dXJuIG9iamVjdF9hc190eXBlKHIsIG9iaiwgT0JKX0JMT0IsIDApOworfQorCitpbnQgcGFyc2VfYmxvYl9idWZmZXIoc3RydWN0IGJsb2IgKml0ZW0sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWl0ZW0tPm9iamVjdC5wYXJzZWQgPSAxOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYmxvYi5oIGIvYmxvYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NjQ4NzIKLS0tIC9kZXYvbnVsbAorKysgYi9ibG9iLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBCTE9CX0gKKyNkZWZpbmUgQkxPQl9ICisKKyNpbmNsdWRlICJvYmplY3QuaCIKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmJsb2JfdHlwZTsKKworc3RydWN0IGJsb2IgeworCXN0cnVjdCBvYmplY3Qgb2JqZWN0OworfTsKKworc3RydWN0IGJsb2IgKmxvb2t1cF9ibG9iKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCitpbnQgcGFyc2VfYmxvYl9idWZmZXIoc3RydWN0IGJsb2IgKml0ZW0sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworLyoqCisgKiBCbG9icyBkbyBub3QgY29udGFpbiByZWZlcmVuY2VzIHRvIG90aGVyIG9iamVjdHMgYW5kIGRvIG5vdCBoYXZlCisgKiBzdHJ1Y3R1cmVkIGRhdGEgdGhhdCBuZWVkcyBwYXJzaW5nLiBIb3dldmVyLCBjb2RlIG1heSB1c2UgdGhlCisgKiAicGFyc2VkIiBiaXQgaW4gdGhlIHN0cnVjdCBvYmplY3QgZm9yIGEgYmxvYiB0byBkZXRlcm1pbmUgd2hldGhlcgorICogaXRzIGNvbnRlbnQgaGFzIGJlZW4gZm91bmQgdG8gYWN0dWFsbHkgYmUgYXZhaWxhYmxlLCBzbworICogcGFyc2VfYmxvYl9idWZmZXIoKSBpcyB1c2VkIChieSBvYmplY3QuYykgdG8gZmxhZyB0aGF0IHRoZSBvYmplY3QKKyAqIGhhcyBiZWVuIHJlYWQgc3VjY2Vzc2Z1bGx5IGZyb20gdGhlIGRhdGFiYXNlLgorICoqLworCisjZW5kaWYgLyogQkxPQl9IICovCmRpZmYgLS1naXQgYS9ibG9jay1zaGExL3NoYTEuYyBiL2Jsb2NrLXNoYTEvc2hhMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYjEyNWMKLS0tIC9kZXYvbnVsbAorKysgYi9ibG9jay1zaGExL3NoYTEuYwpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIFNIQTEgcm91dGluZSBvcHRpbWl6ZWQgdG8gZG8gd29yZCBhY2Nlc3NlcyByYXRoZXIgdGhhbiBieXRlIGFjY2Vzc2VzLAorICogYW5kIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvcGllcyBpbnRvIHRoZSBjb250ZXh0IGFycmF5LgorICoKKyAqIFRoaXMgd2FzIGluaXRpYWxseSBiYXNlZCBvbiB0aGUgTW96aWxsYSBTSEExIGltcGxlbWVudGF0aW9uLCBhbHRob3VnaAorICogbm9uZSBvZiB0aGUgb3JpZ2luYWwgTW96aWxsYSBjb2RlIHJlbWFpbnMuCisgKi8KKworLyogdGhpcyBpcyBvbmx5IHRvIGdldCBkZWZpbml0aW9ucyBmb3IgbWVtY3B5KCksIG50b2hsKCkgYW5kIGh0b25sKCkgKi8KKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworI2luY2x1ZGUgInNoYTEuaCIKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQorCisvKgorICogRm9yY2UgdXNhZ2Ugb2Ygcm9sIG9yIHJvciBieSBzZWxlY3RpbmcgdGhlIG9uZSB3aXRoIHRoZSBzbWFsbGVyIGNvbnN0YW50LgorICogSXQgX2Nhbl8gZ2VuZXJhdGUgc2xpZ2h0bHkgc21hbGxlciBjb2RlIChhIGNvbnN0YW50IG9mIDEgaXMgc3BlY2lhbCksIGJ1dAorICogcGVyaGFwcyBtb3JlIGltcG9ydGFudGx5IGl0J3MgcG9zc2libHkgZmFzdGVyIG9uIGFueSB1YXJjaCB0aGF0IGRvZXMgYQorICogcm90YXRlIHdpdGggYSBsb29wLgorICovCisKKyNkZWZpbmUgU0hBX0FTTShvcCwgeCwgbikgKHsgdW5zaWduZWQgaW50IF9fcmVzOyBfX2FzbV9fKG9wICIgJTEsJTAiOiI9ciIgKF9fcmVzKToiaSIgKG4pLCAiMCIgKHgpKTsgX19yZXM7IH0pCisjZGVmaW5lIFNIQV9ST0woeCxuKQlTSEFfQVNNKCJyb2wiLCB4LCBuKQorI2RlZmluZSBTSEFfUk9SKHgsbikJU0hBX0FTTSgicm9yIiwgeCwgbikKKworI2Vsc2UKKworI2RlZmluZSBTSEFfUk9UKFgsbCxyKQkoKChYKSA8PCAobCkpIHwgKChYKSA+PiAocikpKQorI2RlZmluZSBTSEFfUk9MKFgsbikJU0hBX1JPVChYLG4sMzItKG4pKQorI2RlZmluZSBTSEFfUk9SKFgsbikJU0hBX1JPVChYLDMyLShuKSxuKQorCisjZW5kaWYKKworLyoKKyAqIElmIHlvdSBoYXZlIDMyIHJlZ2lzdGVycyBvciBtb3JlLCB0aGUgY29tcGlsZXIgY2FuIChhbmQgc2hvdWxkKQorICogdHJ5IHRvIGNoYW5nZSB0aGUgYXJyYXlbXSBhY2Nlc3NlcyBpbnRvIHJlZ2lzdGVycy4gSG93ZXZlciwgb24KKyAqIG1hY2hpbmVzIHdpdGggbGVzcyB0aGFuIH4yNSByZWdpc3RlcnMsIHRoYXQgd29uJ3QgcmVhbGx5IHdvcmssCisgKiBhbmQgYXQgbGVhc3QgZ2NjIHdpbGwgbWFrZSBhbiB1bmhvbHkgbWVzcyBvZiBpdC4KKyAqCisgKiBTbyB0byBhdm9pZCB0aGF0IG1lc3Mgd2hpY2gganVzdCBzbG93cyB0aGluZ3MgZG93biwgd2UgZm9yY2UKKyAqIHRoZSBzdG9yZXMgdG8gbWVtb3J5IHRvIGFjdHVhbGx5IGhhcHBlbiAod2UgbWlnaHQgYmUgYmV0dGVyIG9mZgorICogd2l0aCBhICdXKHQpPSh2YWwpO2FzbSgiIjoiK20iIChXKHQpKScgdGhlcmUgaW5zdGVhZCwgYXMKKyAqIHN1Z2dlc3RlZCBieSBBcnR1ciBTa2F3aW5hIC0gdGhhdCB3aWxsIGFsc28gbWFrZSBnY2MgdW5hYmxlIHRvCisgKiB0cnkgdG8gZG8gdGhlIHNpbGx5ICJvcHRpbWl6ZSBhd2F5IGxvYWRzIiBwYXJ0IGJlY2F1c2UgaXQgd29uJ3QKKyAqIHNlZSB3aGF0IHRoZSB2YWx1ZSB3aWxsIGJlKS4KKyAqCisgKiBCZW4gSGVycmVuc2NobWlkdCByZXBvcnRzIHRoYXQgb24gUFBDLCB0aGUgQyB2ZXJzaW9uIGNvbWVzIGNsb3NlCisgKiB0byB0aGUgb3B0aW1pemVkIGFzbSB3aXRoIHRoaXMgKGllIG9uIFBQQyB5b3UgZG9uJ3Qgd2FudCB0aGF0CisgKiAndm9sYXRpbGUnLCBzaW5jZSB0aGVyZSBhcmUgbG90cyBvZiByZWdpc3RlcnMpLgorICoKKyAqIE9uIEFSTSB3ZSBnZXQgdGhlIGJlc3QgY29kZSBnZW5lcmF0aW9uIGJ5IGZvcmNpbmcgYSBmdWxsIG1lbW9yeSBiYXJyaWVyCisgKiBiZXR3ZWVuIGVhY2ggU0hBX1JPVU5ELCBvdGhlcndpc2UgZ2NjIGhhcHBpbHkgZ2V0IHdpbGQgd2l0aCBzcGlsbGluZyBhbmQKKyAqIHRoZSBzdGFjayBmcmFtZSBzaXplIHNpbXBseSBleHBsb2RlIGFuZCBwZXJmb3JtYW5jZSBnb2VzIGRvd24gdGhlIGRyYWluLgorICovCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisgICNkZWZpbmUgc2V0Vyh4LCB2YWwpICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSZXKHgpID0gKHZhbCkpCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fYXJtX18pCisgICNkZWZpbmUgc2V0Vyh4LCB2YWwpIGRvIHsgVyh4KSA9ICh2YWwpOyBfX2FzbV9fKCIiOjo6Im1lbW9yeSIpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyAgI2RlZmluZSBzZXRXKHgsIHZhbCkgKFcoeCkgPSAodmFsKSkKKyNlbmRpZgorCisvKiBUaGlzICJyb2xscyIgb3ZlciB0aGUgNTEyLWJpdCBhcnJheSAqLworI2RlZmluZSBXKHgpIChhcnJheVsoeCkmMTVdKQorCisvKgorICogV2hlcmUgZG8gd2UgZ2V0IHRoZSBzb3VyY2UgZnJvbT8gVGhlIGZpcnN0IDE2IGl0ZXJhdGlvbnMgZ2V0IGl0IGZyb20KKyAqIHRoZSBpbnB1dCBkYXRhLCB0aGUgbmV4dCBtaXggaXQgZnJvbSB0aGUgNTEyLWJpdCBhcnJheS4KKyAqLworI2RlZmluZSBTSEFfU1JDKHQpIGdldF9iZTMyKCh1bnNpZ25lZCBjaGFyICopIGJsb2NrICsgKHQpKjQpCisjZGVmaW5lIFNIQV9NSVgodCkgU0hBX1JPTChXKCh0KSsxMykgXiBXKCh0KSs4KSBeIFcoKHQpKzIpIF4gVyh0KSwgMSk7CisKKyNkZWZpbmUgU0hBX1JPVU5EKHQsIGlucHV0LCBmbiwgY29uc3RhbnQsIEEsIEIsIEMsIEQsIEUpIGRvIHsgXAorCXVuc2lnbmVkIGludCBURU1QID0gaW5wdXQodCk7IHNldFcodCwgVEVNUCk7IFwKKwlFICs9IFRFTVAgKyBTSEFfUk9MKEEsNSkgKyAoZm4pICsgKGNvbnN0YW50KTsgXAorCUIgPSBTSEFfUk9SKEIsIDIpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFRfMF8xNSh0LCBBLCBCLCBDLCBELCBFKSAgU0hBX1JPVU5EKHQsIFNIQV9TUkMsICgoKENeRCkmQileRCkgLCAweDVhODI3OTk5LCBBLCBCLCBDLCBELCBFICkKKyNkZWZpbmUgVF8xNl8xOSh0LCBBLCBCLCBDLCBELCBFKSBTSEFfUk9VTkQodCwgU0hBX01JWCwgKCgoQ15EKSZCKV5EKSAsIDB4NWE4Mjc5OTksIEEsIEIsIEMsIEQsIEUgKQorI2RlZmluZSBUXzIwXzM5KHQsIEEsIEIsIEMsIEQsIEUpIFNIQV9ST1VORCh0LCBTSEFfTUlYLCAoQl5DXkQpICwgMHg2ZWQ5ZWJhMSwgQSwgQiwgQywgRCwgRSApCisjZGVmaW5lIFRfNDBfNTkodCwgQSwgQiwgQywgRCwgRSkgU0hBX1JPVU5EKHQsIFNIQV9NSVgsICgoQiZDKSsoRCYoQl5DKSkpICwgMHg4ZjFiYmNkYywgQSwgQiwgQywgRCwgRSApCisjZGVmaW5lIFRfNjBfNzkodCwgQSwgQiwgQywgRCwgRSkgU0hBX1JPVU5EKHQsIFNIQV9NSVgsIChCXkNeRCkgLCAgMHhjYTYyYzFkNiwgQSwgQiwgQywgRCwgRSApCisKK3N0YXRpYyB2b2lkIGJsa19TSEExX0Jsb2NrKGJsa19TSEFfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmJsb2NrKQoreworCXVuc2lnbmVkIGludCBBLEIsQyxELEU7CisJdW5zaWduZWQgaW50IGFycmF5WzE2XTsKKworCUEgPSBjdHgtPkhbMF07CisJQiA9IGN0eC0+SFsxXTsKKwlDID0gY3R4LT5IWzJdOworCUQgPSBjdHgtPkhbM107CisJRSA9IGN0eC0+SFs0XTsKKworCS8qIFJvdW5kIDEgLSBpdGVyYXRpb25zIDAtMTYgdGFrZSB0aGVpciBpbnB1dCBmcm9tICdibG9jaycgKi8KKwlUXzBfMTUoIDAsIEEsIEIsIEMsIEQsIEUpOworCVRfMF8xNSggMSwgRSwgQSwgQiwgQywgRCk7CisJVF8wXzE1KCAyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzBfMTUoIDMsIEMsIEQsIEUsIEEsIEIpOworCVRfMF8xNSggNCwgQiwgQywgRCwgRSwgQSk7CisJVF8wXzE1KCA1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzBfMTUoIDYsIEUsIEEsIEIsIEMsIEQpOworCVRfMF8xNSggNywgRCwgRSwgQSwgQiwgQyk7CisJVF8wXzE1KCA4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzBfMTUoIDksIEIsIEMsIEQsIEUsIEEpOworCVRfMF8xNSgxMCwgQSwgQiwgQywgRCwgRSk7CisJVF8wXzE1KDExLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzBfMTUoMTIsIEQsIEUsIEEsIEIsIEMpOworCVRfMF8xNSgxMywgQywgRCwgRSwgQSwgQik7CisJVF8wXzE1KDE0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzBfMTUoMTUsIEEsIEIsIEMsIEQsIEUpOworCisJLyogUm91bmQgMSAtIHRhaWwuIElucHV0IGZyb20gNTEyLWJpdCBtaXhpbmcgYXJyYXkgKi8KKwlUXzE2XzE5KDE2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzE2XzE5KDE3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzE2XzE5KDE4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzE2XzE5KDE5LCBCLCBDLCBELCBFLCBBKTsKKworCS8qIFJvdW5kIDIgKi8KKwlUXzIwXzM5KDIwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzIwXzM5KDIxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzIwXzM5KDIyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzIwXzM5KDIzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzIwXzM5KDI0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzIwXzM5KDI1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzIwXzM5KDI2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzIwXzM5KDI3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzIwXzM5KDI4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzIwXzM5KDI5LCBCLCBDLCBELCBFLCBBKTsKKwlUXzIwXzM5KDMwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzIwXzM5KDMxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzIwXzM5KDMyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzIwXzM5KDMzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzIwXzM5KDM0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzIwXzM5KDM1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzIwXzM5KDM2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzIwXzM5KDM3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzIwXzM5KDM4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzIwXzM5KDM5LCBCLCBDLCBELCBFLCBBKTsKKworCS8qIFJvdW5kIDMgKi8KKwlUXzQwXzU5KDQwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDQxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDQyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDQzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDQ0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzQwXzU5KDQ1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDQ2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDQ3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDQ4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDQ5LCBCLCBDLCBELCBFLCBBKTsKKwlUXzQwXzU5KDUwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDUxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDUyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDUzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDU0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzQwXzU5KDU1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDU2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDU3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDU4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDU5LCBCLCBDLCBELCBFLCBBKTsKKworCS8qIFJvdW5kIDQgKi8KKwlUXzYwXzc5KDYwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzYwXzc5KDYxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzYwXzc5KDYyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzYwXzc5KDYzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzYwXzc5KDY0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzYwXzc5KDY1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzYwXzc5KDY2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzYwXzc5KDY3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzYwXzc5KDY4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzYwXzc5KDY5LCBCLCBDLCBELCBFLCBBKTsKKwlUXzYwXzc5KDcwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzYwXzc5KDcxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzYwXzc5KDcyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzYwXzc5KDczLCBDLCBELCBFLCBBLCBCKTsKKwlUXzYwXzc5KDc0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzYwXzc5KDc1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzYwXzc5KDc2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzYwXzc5KDc3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzYwXzc5KDc4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzYwXzc5KDc5LCBCLCBDLCBELCBFLCBBKTsKKworCWN0eC0+SFswXSArPSBBOworCWN0eC0+SFsxXSArPSBCOworCWN0eC0+SFsyXSArPSBDOworCWN0eC0+SFszXSArPSBEOworCWN0eC0+SFs0XSArPSBFOworfQorCit2b2lkIGJsa19TSEExX0luaXQoYmxrX1NIQV9DVFggKmN0eCkKK3sKKwljdHgtPnNpemUgPSAwOworCisJLyogSW5pdGlhbGl6ZSBIIHdpdGggdGhlIG1hZ2ljIGNvbnN0YW50cyAoc2VlIEZJUFMxODAgZm9yIGNvbnN0YW50cykgKi8KKwljdHgtPkhbMF0gPSAweDY3NDUyMzAxOworCWN0eC0+SFsxXSA9IDB4ZWZjZGFiODk7CisJY3R4LT5IWzJdID0gMHg5OGJhZGNmZTsKKwljdHgtPkhbM10gPSAweDEwMzI1NDc2OworCWN0eC0+SFs0XSA9IDB4YzNkMmUxZjA7Cit9CisKK3ZvaWQgYmxrX1NIQTFfVXBkYXRlKGJsa19TSEFfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXVuc2lnbmVkIGludCBsZW5XID0gY3R4LT5zaXplICYgNjM7CisKKwljdHgtPnNpemUgKz0gbGVuOworCisJLyogUmVhZCB0aGUgZGF0YSBpbnRvIFcgYW5kIHByb2Nlc3MgYmxvY2tzIGFzIHRoZXkgZ2V0IGZ1bGwgKi8KKwlpZiAobGVuVykgeworCQl1bnNpZ25lZCBpbnQgbGVmdCA9IDY0IC0gbGVuVzsKKwkJaWYgKGxlbiA8IGxlZnQpCisJCQlsZWZ0ID0gbGVuOworCQltZW1jcHkobGVuVyArIChjaGFyICopY3R4LT5XLCBkYXRhLCBsZWZ0KTsKKwkJbGVuVyA9IChsZW5XICsgbGVmdCkgJiA2MzsKKwkJbGVuIC09IGxlZnQ7CisJCWRhdGEgPSAoKGNvbnN0IGNoYXIgKilkYXRhICsgbGVmdCk7CisJCWlmIChsZW5XKQorCQkJcmV0dXJuOworCQlibGtfU0hBMV9CbG9jayhjdHgsIGN0eC0+Vyk7CisJfQorCXdoaWxlIChsZW4gPj0gNjQpIHsKKwkJYmxrX1NIQTFfQmxvY2soY3R4LCBkYXRhKTsKKwkJZGF0YSA9ICgoY29uc3QgY2hhciAqKWRhdGEgKyA2NCk7CisJCWxlbiAtPSA2NDsKKwl9CisJaWYgKGxlbikKKwkJbWVtY3B5KGN0eC0+VywgZGF0YSwgbGVuKTsKK30KKwordm9pZCBibGtfU0hBMV9GaW5hbCh1bnNpZ25lZCBjaGFyIGhhc2hvdXRbMjBdLCBibGtfU0hBX0NUWCAqY3R4KQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhZFs2NF0gPSB7IDB4ODAgfTsKKwl1bnNpZ25lZCBpbnQgcGFkbGVuWzJdOworCWludCBpOworCisJLyogUGFkIHdpdGggYSBiaW5hcnkgMSAoaWUgMHg4MCksIHRoZW4gemVyb2VzLCB0aGVuIGxlbmd0aCAqLworCXBhZGxlblswXSA9IGh0b25sKCh1aW50MzJfdCkoY3R4LT5zaXplID4+IDI5KSk7CisJcGFkbGVuWzFdID0gaHRvbmwoKHVpbnQzMl90KShjdHgtPnNpemUgPDwgMykpOworCisJaSA9IGN0eC0+c2l6ZSAmIDYzOworCWJsa19TSEExX1VwZGF0ZShjdHgsIHBhZCwgMSArICg2MyAmICg1NSAtIGkpKSk7CisJYmxrX1NIQTFfVXBkYXRlKGN0eCwgcGFkbGVuLCA4KTsKKworCS8qIE91dHB1dCBoYXNoICovCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJcHV0X2JlMzIoaGFzaG91dCArIGkgKiA0LCBjdHgtPkhbaV0pOworfQpkaWZmIC0tZ2l0IGEvYmxvY2stc2hhMS9zaGExLmggYi9ibG9jay1zaGExL3NoYTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGY2NzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYmxvY2stc2hhMS9zaGExLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIFNIQTEgcm91dGluZSBvcHRpbWl6ZWQgdG8gZG8gd29yZCBhY2Nlc3NlcyByYXRoZXIgdGhhbiBieXRlIGFjY2Vzc2VzLAorICogYW5kIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvcGllcyBpbnRvIHRoZSBjb250ZXh0IGFycmF5LgorICoKKyAqIFRoaXMgd2FzIGluaXRpYWxseSBiYXNlZCBvbiB0aGUgTW96aWxsYSBTSEExIGltcGxlbWVudGF0aW9uLCBhbHRob3VnaAorICogbm9uZSBvZiB0aGUgb3JpZ2luYWwgTW96aWxsYSBjb2RlIHJlbWFpbnMuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOworCXVuc2lnbmVkIGludCBIWzVdOworCXVuc2lnbmVkIGludCBXWzE2XTsKK30gYmxrX1NIQV9DVFg7CisKK3ZvaWQgYmxrX1NIQTFfSW5pdChibGtfU0hBX0NUWCAqY3R4KTsKK3ZvaWQgYmxrX1NIQTFfVXBkYXRlKGJsa19TSEFfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGFJbiwgdW5zaWduZWQgbG9uZyBsZW4pOwordm9pZCBibGtfU0hBMV9GaW5hbCh1bnNpZ25lZCBjaGFyIGhhc2hvdXRbMjBdLCBibGtfU0hBX0NUWCAqY3R4KTsKKworI2RlZmluZSBwbGF0Zm9ybV9TSEFfQ1RYCWJsa19TSEFfQ1RYCisjZGVmaW5lIHBsYXRmb3JtX1NIQTFfSW5pdAlibGtfU0hBMV9Jbml0CisjZGVmaW5lIHBsYXRmb3JtX1NIQTFfVXBkYXRlCWJsa19TSEExX1VwZGF0ZQorI2RlZmluZSBwbGF0Zm9ybV9TSEExX0ZpbmFsCWJsa19TSEExX0ZpbmFsCmRpZmYgLS1naXQgYS9ibG9vbS5jIGIvYmxvb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yjg2YWEzCi0tLSAvZGV2L251bGwKKysrIGIvYmxvb20uYwpAQCAtMCwwICsxLDI5NiBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImJsb29tLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisjaW5jbHVkZSAiY29tbWl0LWdyYXBoLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisKK2RlZmluZV9jb21taXRfc2xhYihibG9vbV9maWx0ZXJfc2xhYiwgc3RydWN0IGJsb29tX2ZpbHRlcik7CisKK3N0YXRpYyBzdHJ1Y3QgYmxvb21fZmlsdGVyX3NsYWIgYmxvb21fZmlsdGVyczsKKworc3RydWN0IHBhdGhtYXBfaGFzaF9lbnRyeSB7CisgICAgc3RydWN0IGhhc2htYXBfZW50cnkgZW50cnk7CisgICAgY29uc3QgY2hhciBwYXRoW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIHVpbnQzMl90IHJvdGF0ZV9sZWZ0KHVpbnQzMl90IHZhbHVlLCBpbnQzMl90IGNvdW50KQoreworCXVpbnQzMl90IG1hc2sgPSA4ICogc2l6ZW9mKHVpbnQzMl90KSAtIDE7CisJY291bnQgJj0gbWFzazsKKwlyZXR1cm4gKCh2YWx1ZSA8PCBjb3VudCkgfCAodmFsdWUgPj4gKCgtY291bnQpICYgbWFzaykpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGdldF9iaXRtYXNrKHVpbnQzMl90IHBvcykKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBjaGFyKTEpIDw8IChwb3MgJiAoQklUU19QRVJfV09SRCAtIDEpKTsKK30KKworc3RhdGljIGludCBsb2FkX2Jsb29tX2ZpbHRlcl9mcm9tX2dyYXBoKHN0cnVjdCBjb21taXRfZ3JhcGggKmcsCisJCQkJCXN0cnVjdCBibG9vbV9maWx0ZXIgKmZpbHRlciwKKwkJCQkJc3RydWN0IGNvbW1pdCAqYykKK3sKKwl1aW50MzJfdCBsZXhfcG9zLCBzdGFydF9pbmRleCwgZW5kX2luZGV4OworCisJd2hpbGUgKGMtPmdyYXBoX3BvcyA8IGctPm51bV9jb21taXRzX2luX2Jhc2UpCisJCWcgPSBnLT5iYXNlX2dyYXBoOworCisJLyogVGhlIGNvbW1pdCBncmFwaCBjb21taXQgJ2MnIGxpdmVzIGluIGRvZXNuJ3QgY2FycnkgYmxvb20gZmlsdGVycy4gKi8KKwlpZiAoIWctPmNodW5rX2Jsb29tX2luZGV4ZXMpCisJCXJldHVybiAwOworCisJbGV4X3BvcyA9IGMtPmdyYXBoX3BvcyAtIGctPm51bV9jb21taXRzX2luX2Jhc2U7CisKKwllbmRfaW5kZXggPSBnZXRfYmUzMihnLT5jaHVua19ibG9vbV9pbmRleGVzICsgNCAqIGxleF9wb3MpOworCisJaWYgKGxleF9wb3MgPiAwKQorCQlzdGFydF9pbmRleCA9IGdldF9iZTMyKGctPmNodW5rX2Jsb29tX2luZGV4ZXMgKyA0ICogKGxleF9wb3MgLSAxKSk7CisJZWxzZQorCQlzdGFydF9pbmRleCA9IDA7CisKKwlmaWx0ZXItPmxlbiA9IGVuZF9pbmRleCAtIHN0YXJ0X2luZGV4OworCWZpbHRlci0+ZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopKGctPmNodW5rX2Jsb29tX2RhdGEgKworCQkJCQlzaXplb2YodW5zaWduZWQgY2hhcikgKiBzdGFydF9pbmRleCArCisJCQkJCUJMT09NREFUQV9DSFVOS19IRUFERVJfU0laRSk7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgbXVybXVyMyAzMi1iaXQgaGFzaCB2YWx1ZSBmb3IgdGhlIGdpdmVuIGRhdGEKKyAqIHVzaW5nIHRoZSBnaXZlbiBzZWVkLgorICogUHJvZHVjZXMgYSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgaGFzaCB2YWx1ZS4KKyAqIE5vdCBjb25zaWRlcmVkIHRvIGJlIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZS4KKyAqIEltcGxlbWVudGVkIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NdXJtdXJIYXNoI0FsZ29yaXRobQorICovCit1aW50MzJfdCBtdXJtdXIzX3NlZWRlZCh1aW50MzJfdCBzZWVkLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKQoreworCWNvbnN0IHVpbnQzMl90IGMxID0gMHhjYzllMmQ1MTsKKwljb25zdCB1aW50MzJfdCBjMiA9IDB4MWI4NzM1OTM7CisJY29uc3QgdWludDMyX3QgcjEgPSAxNTsKKwljb25zdCB1aW50MzJfdCByMiA9IDEzOworCWNvbnN0IHVpbnQzMl90IG0gPSA1OworCWNvbnN0IHVpbnQzMl90IG4gPSAweGU2NTQ2YjY0OworCWludCBpOworCXVpbnQzMl90IGsxID0gMDsKKwljb25zdCBjaGFyICp0YWlsOworCisJaW50IGxlbjQgPSBsZW4gLyBzaXplb2YodWludDMyX3QpOworCisJdWludDMyX3QgazsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuNDsgaSsrKSB7CisJCXVpbnQzMl90IGJ5dGUxID0gKHVpbnQzMl90KWRhdGFbNCppXTsKKwkJdWludDMyX3QgYnl0ZTIgPSAoKHVpbnQzMl90KWRhdGFbNCppICsgMV0pIDw8IDg7CisJCXVpbnQzMl90IGJ5dGUzID0gKCh1aW50MzJfdClkYXRhWzQqaSArIDJdKSA8PCAxNjsKKwkJdWludDMyX3QgYnl0ZTQgPSAoKHVpbnQzMl90KWRhdGFbNCppICsgM10pIDw8IDI0OworCQlrID0gYnl0ZTEgfCBieXRlMiB8IGJ5dGUzIHwgYnl0ZTQ7CisJCWsgKj0gYzE7CisJCWsgPSByb3RhdGVfbGVmdChrLCByMSk7CisJCWsgKj0gYzI7CisKKwkJc2VlZCBePSBrOworCQlzZWVkID0gcm90YXRlX2xlZnQoc2VlZCwgcjIpICogbSArIG47CisJfQorCisJdGFpbCA9IChkYXRhICsgbGVuNCAqIHNpemVvZih1aW50MzJfdCkpOworCisJc3dpdGNoIChsZW4gJiAoc2l6ZW9mKHVpbnQzMl90KSAtIDEpKSB7CisJY2FzZSAzOgorCQlrMSBePSAoKHVpbnQzMl90KXRhaWxbMl0pIDw8IDE2OworCQkvKi1mYWxsdGhyb3VnaCovCisJY2FzZSAyOgorCQlrMSBePSAoKHVpbnQzMl90KXRhaWxbMV0pIDw8IDg7CisJCS8qLWZhbGx0aHJvdWdoKi8KKwljYXNlIDE6CisJCWsxIF49ICgodWludDMyX3QpdGFpbFswXSkgPDwgMDsKKwkJazEgKj0gYzE7CisJCWsxID0gcm90YXRlX2xlZnQoazEsIHIxKTsKKwkJazEgKj0gYzI7CisJCXNlZWQgXj0gazE7CisJCWJyZWFrOworCX0KKworCXNlZWQgXj0gKHVpbnQzMl90KWxlbjsKKwlzZWVkIF49IChzZWVkID4+IDE2KTsKKwlzZWVkICo9IDB4ODVlYmNhNmI7CisJc2VlZCBePSAoc2VlZCA+PiAxMyk7CisJc2VlZCAqPSAweGMyYjJhZTM1OworCXNlZWQgXj0gKHNlZWQgPj4gMTYpOworCisJcmV0dXJuIHNlZWQ7Cit9CisKK3ZvaWQgZmlsbF9ibG9vbV9rZXkoY29uc3QgY2hhciAqZGF0YSwKKwkJICAgIHNpemVfdCBsZW4sCisJCSAgICBzdHJ1Y3QgYmxvb21fa2V5ICprZXksCisJCSAgICBjb25zdCBzdHJ1Y3QgYmxvb21fZmlsdGVyX3NldHRpbmdzICpzZXR0aW5ncykKK3sKKwlpbnQgaTsKKwljb25zdCB1aW50MzJfdCBzZWVkMCA9IDB4MjkzYWU3NmY7CisJY29uc3QgdWludDMyX3Qgc2VlZDEgPSAweDdlNjQ2ZTJjOworCWNvbnN0IHVpbnQzMl90IGhhc2gwID0gbXVybXVyM19zZWVkZWQoc2VlZDAsIGRhdGEsIGxlbik7CisJY29uc3QgdWludDMyX3QgaGFzaDEgPSBtdXJtdXIzX3NlZWRlZChzZWVkMSwgZGF0YSwgbGVuKTsKKworCWtleS0+aGFzaGVzID0gKHVpbnQzMl90ICopeGNhbGxvYyhzZXR0aW5ncy0+bnVtX2hhc2hlcywgc2l6ZW9mKHVpbnQzMl90KSk7CisJZm9yIChpID0gMDsgaSA8IHNldHRpbmdzLT5udW1faGFzaGVzOyBpKyspCisJCWtleS0+aGFzaGVzW2ldID0gaGFzaDAgKyBpICogaGFzaDE7Cit9CisKK3ZvaWQgYWRkX2tleV90b19maWx0ZXIoY29uc3Qgc3RydWN0IGJsb29tX2tleSAqa2V5LAorCQkgICAgICAgc3RydWN0IGJsb29tX2ZpbHRlciAqZmlsdGVyLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGJsb29tX2ZpbHRlcl9zZXR0aW5ncyAqc2V0dGluZ3MpCit7CisJaW50IGk7CisJdWludDY0X3QgbW9kID0gZmlsdGVyLT5sZW4gKiBCSVRTX1BFUl9XT1JEOworCisJZm9yIChpID0gMDsgaSA8IHNldHRpbmdzLT5udW1faGFzaGVzOyBpKyspIHsKKwkJdWludDY0X3QgaGFzaF9tb2QgPSBrZXktPmhhc2hlc1tpXSAlIG1vZDsKKwkJdWludDY0X3QgYmxvY2tfcG9zID0gaGFzaF9tb2QgLyBCSVRTX1BFUl9XT1JEOworCisJCWZpbHRlci0+ZGF0YVtibG9ja19wb3NdIHw9IGdldF9iaXRtYXNrKGhhc2hfbW9kKTsKKwl9Cit9CisKK3ZvaWQgaW5pdF9ibG9vbV9maWx0ZXJzKHZvaWQpCit7CisJaW5pdF9ibG9vbV9maWx0ZXJfc2xhYigmYmxvb21fZmlsdGVycyk7Cit9CisKK3N0YXRpYyBpbnQgcGF0aG1hcF9jbXAoY29uc3Qgdm9pZCAqaGFzaG1hcF9jbXBfZm5fZGF0YSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJICAgICAgIGNvbnN0IHZvaWQgKmtleWRhdGEpCit7CisJY29uc3Qgc3RydWN0IHBhdGhtYXBfaGFzaF9lbnRyeSAqZTEsICplMjsKKworCWUxID0gY29udGFpbmVyX29mKGVwdHIsIGNvbnN0IHN0cnVjdCBwYXRobWFwX2hhc2hfZW50cnksIGVudHJ5KTsKKwllMiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIGNvbnN0IHN0cnVjdCBwYXRobWFwX2hhc2hfZW50cnksIGVudHJ5KTsKKworCXJldHVybiBzdHJjbXAoZTEtPnBhdGgsIGUyLT5wYXRoKTsKK30KKworc3RydWN0IGJsb29tX2ZpbHRlciAqZ2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgICBzdHJ1Y3QgY29tbWl0ICpjLAorCQkJCSAgICAgIGludCBjb21wdXRlX2lmX25vdF9wcmVzZW50KQoreworCXN0cnVjdCBibG9vbV9maWx0ZXIgKmZpbHRlcjsKKwlzdHJ1Y3QgYmxvb21fZmlsdGVyX3NldHRpbmdzIHNldHRpbmdzID0gREVGQVVMVF9CTE9PTV9GSUxURVJfU0VUVElOR1M7CisJaW50IGk7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBkaWZmb3B0OworCWludCBtYXhfY2hhbmdlcyA9IDUxMjsKKworCWlmIChibG9vbV9maWx0ZXJzLnNsYWJfc2l6ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWZpbHRlciA9IGJsb29tX2ZpbHRlcl9zbGFiX2F0KCZibG9vbV9maWx0ZXJzLCBjKTsKKworCWlmICghZmlsdGVyLT5kYXRhKSB7CisJCWxvYWRfY29tbWl0X2dyYXBoX2luZm8ociwgYyk7CisJCWlmIChjLT5ncmFwaF9wb3MgIT0gQ09NTUlUX05PVF9GUk9NX0dSQVBIICYmCisJCQlyLT5vYmplY3RzLT5jb21taXRfZ3JhcGgtPmNodW5rX2Jsb29tX2luZGV4ZXMpIHsKKwkJCWlmIChsb2FkX2Jsb29tX2ZpbHRlcl9mcm9tX2dyYXBoKHItPm9iamVjdHMtPmNvbW1pdF9ncmFwaCwgZmlsdGVyLCBjKSkKKwkJCQlyZXR1cm4gZmlsdGVyOworCQkJZWxzZQorCQkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJaWYgKGZpbHRlci0+ZGF0YSB8fCAhY29tcHV0ZV9pZl9ub3RfcHJlc2VudCkKKwkJcmV0dXJuIGZpbHRlcjsKKworCXJlcG9fZGlmZl9zZXR1cChyLCAmZGlmZm9wdCk7CisJZGlmZm9wdC5mbGFncy5yZWN1cnNpdmUgPSAxOworCWRpZmZvcHQuZGV0ZWN0X3JlbmFtZSA9IDA7CisJZGlmZm9wdC5tYXhfY2hhbmdlcyA9IG1heF9jaGFuZ2VzOworCWRpZmZfc2V0dXBfZG9uZSgmZGlmZm9wdCk7CisKKwkvKiBlbnN1cmUgY29tbWl0IGlzIHBhcnNlZCBzbyB3ZSBoYXZlIHBhcmVudCBpbmZvcm1hdGlvbiAqLworCXJlcG9fcGFyc2VfY29tbWl0KHIsIGMpOworCisJaWYgKGMtPnBhcmVudHMpCisJCWRpZmZfdHJlZV9vaWQoJmMtPnBhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQsICZjLT5vYmplY3Qub2lkLCAiIiwgJmRpZmZvcHQpOworCWVsc2UKKwkJZGlmZl90cmVlX29pZChOVUxMLCAmYy0+b2JqZWN0Lm9pZCwgIiIsICZkaWZmb3B0KTsKKwlkaWZmY29yZV9zdGQoJmRpZmZvcHQpOworCisJaWYgKGRpZmZvcHQubnVtX2NoYW5nZXMgPD0gbWF4X2NoYW5nZXMpIHsKKwkJc3RydWN0IGhhc2htYXAgcGF0aG1hcDsKKwkJc3RydWN0IHBhdGhtYXBfaGFzaF9lbnRyeSAqZTsKKwkJc3RydWN0IGhhc2htYXBfaXRlciBpdGVyOworCQloYXNobWFwX2luaXQoJnBhdGhtYXAsIHBhdGhtYXBfY21wLCBOVUxMLCAwKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKSB7CisJCQljb25zdCBjaGFyICpwYXRoID0gZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXS0+dHdvLT5wYXRoOworCisJCQkvKgorCQkJICogQWRkIGVhY2ggbGVhZGluZyBkaXJlY3Rvcnkgb2YgdGhlIGNoYW5nZWQgZmlsZSwgaS5lLiBmb3IKKwkJCSAqICdkaXIvc3ViZGlyL2ZpbGUnIGFkZCAnZGlyJyBhbmQgJ2Rpci9zdWJkaXInIGFzIHdlbGwsIHNvCisJCQkgKiB0aGUgQmxvb20gZmlsdGVyIGNvdWxkIGJlIHVzZWQgdG8gc3BlZWQgdXAgY29tbWFuZHMgbGlrZQorCQkJICogJ2dpdCBsb2cgZGlyL3N1YmRpcicsIHRvby4KKwkJCSAqCisJCQkgKiBOb3RlIHRoYXQgZGlyZWN0b3JpZXMgYXJlIGFkZGVkIHdpdGhvdXQgdGhlIHRyYWlsaW5nICcvJy4KKwkJCSAqLworCQkJZG8geworCQkJCWNoYXIgKmxhc3Rfc2xhc2ggPSBzdHJyY2hyKHBhdGgsICcvJyk7CisKKwkJCQlGTEVYX0FMTE9DX1NUUihlLCBwYXRoLCBwYXRoKTsKKwkJCQloYXNobWFwX2VudHJ5X2luaXQoJmUtPmVudHJ5LCBzdHJoYXNoKHBhdGgpKTsKKworCQkJCWlmICghaGFzaG1hcF9nZXQoJnBhdGhtYXAsICZlLT5lbnRyeSwgTlVMTCkpCisJCQkJCWhhc2htYXBfYWRkKCZwYXRobWFwLCAmZS0+ZW50cnkpOworCQkJCWVsc2UKKwkJCQkJZnJlZShlKTsKKworCQkJCWlmICghbGFzdF9zbGFzaCkKKwkJCQkJbGFzdF9zbGFzaCA9IChjaGFyKilwYXRoOworCQkJCSpsYXN0X3NsYXNoID0gJ1wwJzsKKworCQkJfSB3aGlsZSAoKnBhdGgpOworCisJCQlkaWZmX2ZyZWVfZmlsZXBhaXIoZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXSk7CisJCX0KKworCQlmaWx0ZXItPmxlbiA9IChoYXNobWFwX2dldF9zaXplKCZwYXRobWFwKSAqIHNldHRpbmdzLmJpdHNfcGVyX2VudHJ5ICsgQklUU19QRVJfV09SRCAtIDEpIC8gQklUU19QRVJfV09SRDsKKwkJZmlsdGVyLT5kYXRhID0geGNhbGxvYyhmaWx0ZXItPmxlbiwgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKTsKKworCQloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KCZwYXRobWFwLCAmaXRlciwgZSwgZW50cnkpIHsKKwkJCXN0cnVjdCBibG9vbV9rZXkga2V5OworCQkJZmlsbF9ibG9vbV9rZXkoZS0+cGF0aCwgc3RybGVuKGUtPnBhdGgpLCAma2V5LCAmc2V0dGluZ3MpOworCQkJYWRkX2tleV90b19maWx0ZXIoJmtleSwgZmlsdGVyLCAmc2V0dGluZ3MpOworCQl9CisKKwkJaGFzaG1hcF9mcmVlX2VudHJpZXMoJnBhdGhtYXAsIHN0cnVjdCBwYXRobWFwX2hhc2hfZW50cnksIGVudHJ5KTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKQorCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKGRpZmZfcXVldWVkX2RpZmYucXVldWVbaV0pOworCQlmaWx0ZXItPmRhdGEgPSBOVUxMOworCQlmaWx0ZXItPmxlbiA9IDA7CisJfQorCisJZnJlZShkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlKTsKKwlESUZGX1FVRVVFX0NMRUFSKCZkaWZmX3F1ZXVlZF9kaWZmKTsKKworCXJldHVybiBmaWx0ZXI7Cit9CisKK2ludCBibG9vbV9maWx0ZXJfY29udGFpbnMoY29uc3Qgc3RydWN0IGJsb29tX2ZpbHRlciAqZmlsdGVyLAorCQkJICBjb25zdCBzdHJ1Y3QgYmxvb21fa2V5ICprZXksCisJCQkgIGNvbnN0IHN0cnVjdCBibG9vbV9maWx0ZXJfc2V0dGluZ3MgKnNldHRpbmdzKQoreworCWludCBpOworCXVpbnQ2NF90IG1vZCA9IGZpbHRlci0+bGVuICogQklUU19QRVJfV09SRDsKKworCWlmICghbW9kKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2V0dGluZ3MtPm51bV9oYXNoZXM7IGkrKykgeworCQl1aW50NjRfdCBoYXNoX21vZCA9IGtleS0+aGFzaGVzW2ldICUgbW9kOworCQl1aW50NjRfdCBibG9ja19wb3MgPSBoYXNoX21vZCAvIEJJVFNfUEVSX1dPUkQ7CisJCWlmICghKGZpbHRlci0+ZGF0YVtibG9ja19wb3NdICYgZ2V0X2JpdG1hc2soaGFzaF9tb2QpKSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvYmxvb20uaCBiL2Jsb29tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJhODM3OQotLS0gL2Rldi9udWxsCisrKyBiL2Jsb29tLmgKQEAgLTAsMCArMSw5MCBAQAorI2lmbmRlZiBCTE9PTV9ICisjZGVmaW5lIEJMT09NX0gKKworc3RydWN0IGNvbW1pdDsKK3N0cnVjdCByZXBvc2l0b3J5OworCitzdHJ1Y3QgYmxvb21fZmlsdGVyX3NldHRpbmdzIHsKKwkvKgorCSAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBoYXNoaW5nIHRlY2huaXF1ZSBiZWluZyB1c2VkLgorCSAqIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgdmVyc2lvbiA9IDEgd2hpY2ggaXMKKwkgKiB0aGUgc2VlZGVkIG11cm11cjMgaGFzaGluZyB0ZWNobmlxdWUgaW1wbGVtZW50ZWQKKwkgKiBpbiBibG9vbS5jLgorCSAqLworCXVpbnQzMl90IGhhc2hfdmVyc2lvbjsKKworCS8qCisJICogVGhlIG51bWJlciBvZiB0aW1lcyBhIHBhdGggaXMgaGFzaGVkLCBpLmUuIHRoZQorCSAqIG51bWJlciBvZiBiaXQgcG9zaXRpb25zIHRodCBjdW11bGF0aXZlbHkKKwkgKiBkZXRlcm1pbmUgd2hldGhlciBhIHBhdGggaXMgcHJlc2VudCBpbiB0aGUKKwkgKiBCbG9vbSBmaWx0ZXIuCisJICovCisJdWludDMyX3QgbnVtX2hhc2hlczsKKworCS8qCisJICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGJpdHMgcGVyIGVudHJ5IGluIHRoZSBCbG9vbQorCSAqIGZpbHRlci4gSWYgdGhlIGZpbHRlciBjb250YWlucyAnbicgZW50cmllcywgdGhlbgorCSAqIGZpbHRlciBzaXplIGlzIHRoZSBtaW5pbXVtIG51bWJlciBvZiA4LWJpdCB3b3JkcworCSAqIHRoYXQgY29udGFpbiBuKmIgYml0cy4KKwkgKi8KKwl1aW50MzJfdCBiaXRzX3Blcl9lbnRyeTsKK307CisKKyNkZWZpbmUgREVGQVVMVF9CTE9PTV9GSUxURVJfU0VUVElOR1MgeyAxLCA3LCAxMCB9CisjZGVmaW5lIEJJVFNfUEVSX1dPUkQgOAorI2RlZmluZSBCTE9PTURBVEFfQ0hVTktfSEVBREVSX1NJWkUgMyAqIHNpemVvZih1aW50MzJfdCkKKworLyoKKyAqIEEgYmxvb21fZmlsdGVyIHN0cnVjdCByZXByZXNlbnRzIGEgZGF0YSBzZWdtZW50IHRvCisgKiB1c2Ugd2hlbiB0ZXN0aW5nIGhhc2ggdmFsdWVzLiBUaGUgJ2xlbicgbWVtYmVyCisgKiBkaWN0YXRlcyBob3cgbWFueSBlbnRyaWVzIGFyZSBzdG9yZWQgaW4KKyAqICdkYXRhJy4KKyAqLworc3RydWN0IGJsb29tX2ZpbHRlciB7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwlzaXplX3QgbGVuOworfTsKKworLyoKKyAqIEEgYmxvb21fa2V5IHJlcHJlc2VudHMgdGhlIGsgaGFzaCB2YWx1ZXMgZm9yIGEKKyAqIGdpdmVuIHN0cmluZy4gVGhlc2UgY2FuIGJlIHByZWNvbXB1dGVkIGFuZAorICogc3RvcmVkIGluIGEgYmxvb21fa2V5IGZvciByZS11c2Ugd2hlbiB0ZXN0aW5nCisgKiBhZ2FpbnN0IGEgYmxvb21fZmlsdGVyLiBUaGUgbnVtYmVyIG9mIGhhc2hlcyBpcworICogZ2l2ZW4gYnkgdGhlIEJsb29tIGZpbHRlciBzZXR0aW5ncyBhbmQgaXMgdGhlIHNhbWUKKyAqIGZvciBhbGwgQmxvb20gZmlsdGVycyBhbmQga2V5cyBpbnRlcmFjdGluZyB3aXRoCisgKiB0aGUgbG9hZGVkIHZlcnNpb24gb2YgdGhlIGNvbW1pdCBncmFwaCBmaWxlIGFuZAorICogdGhlIEJsb29tIGRhdGEgY2h1bmtzLgorICovCitzdHJ1Y3QgYmxvb21fa2V5IHsKKwl1aW50MzJfdCAqaGFzaGVzOworfTsKKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgbXVybXVyMyAzMi1iaXQgaGFzaCB2YWx1ZSBmb3IgdGhlIGdpdmVuIGRhdGEKKyAqIHVzaW5nIHRoZSBnaXZlbiBzZWVkLgorICogUHJvZHVjZXMgYSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgaGFzaCB2YWx1ZS4KKyAqIE5vdCBjb25zaWRlcmVkIHRvIGJlIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZS4KKyAqIEltcGxlbWVudGVkIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NdXJtdXJIYXNoI0FsZ29yaXRobQorICovCit1aW50MzJfdCBtdXJtdXIzX3NlZWRlZCh1aW50MzJfdCBzZWVkLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKTsKKwordm9pZCBmaWxsX2Jsb29tX2tleShjb25zdCBjaGFyICpkYXRhLAorCQkgICAgc2l6ZV90IGxlbiwKKwkJICAgIHN0cnVjdCBibG9vbV9rZXkgKmtleSwKKwkJICAgIGNvbnN0IHN0cnVjdCBibG9vbV9maWx0ZXJfc2V0dGluZ3MgKnNldHRpbmdzKTsKKwordm9pZCBhZGRfa2V5X3RvX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYmxvb21fa2V5ICprZXksCisJCSAgICAgICBzdHJ1Y3QgYmxvb21fZmlsdGVyICpmaWx0ZXIsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgYmxvb21fZmlsdGVyX3NldHRpbmdzICpzZXR0aW5ncyk7CisKK3ZvaWQgaW5pdF9ibG9vbV9maWx0ZXJzKHZvaWQpOworCitzdHJ1Y3QgYmxvb21fZmlsdGVyICpnZXRfYmxvb21fZmlsdGVyKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICAgIHN0cnVjdCBjb21taXQgKmMsCisJCQkJICAgICAgaW50IGNvbXB1dGVfaWZfbm90X3ByZXNlbnQpOworCitpbnQgYmxvb21fZmlsdGVyX2NvbnRhaW5zKGNvbnN0IHN0cnVjdCBibG9vbV9maWx0ZXIgKmZpbHRlciwKKwkJCSAgY29uc3Qgc3RydWN0IGJsb29tX2tleSAqa2V5LAorCQkJICBjb25zdCBzdHJ1Y3QgYmxvb21fZmlsdGVyX3NldHRpbmdzICpzZXR0aW5ncyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYnJhbmNoLmMgYi9icmFuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDllNzY3Ci0tLSAvZGV2L251bGwKKysrIGIvYnJhbmNoLmMKQEAgLTAsMCArMSwzOTQgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZWZzcGVjLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKworc3RydWN0IHRyYWNraW5nIHsKKwlzdHJ1Y3QgcmVmc3BlY19pdGVtIHNwZWM7CisJY2hhciAqc3JjOworCWNvbnN0IGNoYXIgKnJlbW90ZTsKKwlpbnQgbWF0Y2hlczsKK307CisKK3N0YXRpYyBpbnQgZmluZF90cmFja2VkX2JyYW5jaChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IHRyYWNraW5nICp0cmFja2luZyA9IHByaXY7CisKKwlpZiAoIXJlbW90ZV9maW5kX3RyYWNraW5nKHJlbW90ZSwgJnRyYWNraW5nLT5zcGVjKSkgeworCQlpZiAoKyt0cmFja2luZy0+bWF0Y2hlcyA9PSAxKSB7CisJCQl0cmFja2luZy0+c3JjID0gdHJhY2tpbmctPnNwZWMuc3JjOworCQkJdHJhY2tpbmctPnJlbW90ZSA9IHJlbW90ZS0+bmFtZTsKKwkJfSBlbHNlIHsKKwkJCWZyZWUodHJhY2tpbmctPnNwZWMuc3JjKTsKKwkJCUZSRUVfQU5EX05VTEwodHJhY2tpbmctPnNyYyk7CisJCX0KKwkJdHJhY2tpbmctPnNwZWMuc3JjID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG91bGRfc2V0dXBfcmViYXNlKGNvbnN0IGNoYXIgKm9yaWdpbikKK3sKKwlzd2l0Y2ggKGF1dG9yZWJhc2UpIHsKKwljYXNlIEFVVE9SRUJBU0VfTkVWRVI6CisJCXJldHVybiAwOworCWNhc2UgQVVUT1JFQkFTRV9MT0NBTDoKKwkJcmV0dXJuIG9yaWdpbiA9PSBOVUxMOworCWNhc2UgQVVUT1JFQkFTRV9SRU1PVEU6CisJCXJldHVybiBvcmlnaW4gIT0gTlVMTDsKKwljYXNlIEFVVE9SRUJBU0VfQUxXQVlTOgorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHRyYWNraW5nX2FkdmljZVtdID0KK05fKCJcbiIKKyJBZnRlciBmaXhpbmcgdGhlIGVycm9yIGNhdXNlIHlvdSBtYXkgdHJ5IHRvIGZpeCB1cFxuIgorInRoZSByZW1vdGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYnkgaW52b2tpbmdcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIik7CisKK2ludCBpbnN0YWxsX2JyYW5jaF9jb25maWcoaW50IGZsYWcsIGNvbnN0IGNoYXIgKmxvY2FsLCBjb25zdCBjaGFyICpvcmlnaW4sIGNvbnN0IGNoYXIgKnJlbW90ZSkKK3sKKwljb25zdCBjaGFyICpzaG9ydG5hbWUgPSBOVUxMOworCXN0cnVjdCBzdHJidWYga2V5ID0gU1RSQlVGX0lOSVQ7CisJaW50IHJlYmFzaW5nID0gc2hvdWxkX3NldHVwX3JlYmFzZShvcmlnaW4pOworCisJaWYgKHNraXBfcHJlZml4KHJlbW90ZSwgInJlZnMvaGVhZHMvIiwgJnNob3J0bmFtZSkKKwkgICAgJiYgIXN0cmNtcChsb2NhbCwgc2hvcnRuYW1lKQorCSAgICAmJiAhb3JpZ2luKSB7CisJCXdhcm5pbmcoXygiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIiksCisJCQlsb2NhbCk7CisJCXJldHVybiAwOworCX0KKworCXN0cmJ1Zl9hZGRmKCZrZXksICJicmFuY2guJXMucmVtb3RlIiwgbG9jYWwpOworCWlmIChnaXRfY29uZmlnX3NldF9nZW50bHkoa2V5LmJ1Ziwgb3JpZ2luID8gb3JpZ2luIDogIi4iKSA8IDApCisJCWdvdG8gb3V0X2VycjsKKworCXN0cmJ1Zl9yZXNldCgma2V5KTsKKwlzdHJidWZfYWRkZigma2V5LCAiYnJhbmNoLiVzLm1lcmdlIiwgbG9jYWwpOworCWlmIChnaXRfY29uZmlnX3NldF9nZW50bHkoa2V5LmJ1ZiwgcmVtb3RlKSA8IDApCisJCWdvdG8gb3V0X2VycjsKKworCWlmIChyZWJhc2luZykgeworCQlzdHJidWZfcmVzZXQoJmtleSk7CisJCXN0cmJ1Zl9hZGRmKCZrZXksICJicmFuY2guJXMucmViYXNlIiwgbG9jYWwpOworCQlpZiAoZ2l0X2NvbmZpZ19zZXRfZ2VudGx5KGtleS5idWYsICJ0cnVlIikgPCAwKQorCQkJZ290byBvdXRfZXJyOworCX0KKwlzdHJidWZfcmVsZWFzZSgma2V5KTsKKworCWlmIChmbGFnICYgQlJBTkNIX0NPTkZJR19WRVJCT1NFKSB7CisJCWlmIChzaG9ydG5hbWUpIHsKKwkJCWlmIChvcmlnaW4pCisJCQkJcHJpbnRmX2xuKHJlYmFzaW5nID8KKwkJCQkJICBfKCJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJyBieSByZWJhc2luZy4iKSA6CisJCQkJCSAgXygiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycuIiksCisJCQkJCSAgbG9jYWwsIHNob3J0bmFtZSwgb3JpZ2luKTsKKwkJCWVsc2UKKwkJCQlwcmludGZfbG4ocmViYXNpbmcgPworCQkJCQkgIF8oIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJyBieSByZWJhc2luZy4iKSA6CisJCQkJCSAgXygiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIpLAorCQkJCQkgIGxvY2FsLCBzaG9ydG5hbWUpOworCQl9IGVsc2UgeworCQkJaWYgKG9yaWdpbikKKwkJCQlwcmludGZfbG4ocmViYXNpbmcgPworCQkJCQkgIF8oIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycgYnkgcmViYXNpbmcuIikgOgorCQkJCQkgIF8oIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycuIiksCisJCQkJCSAgbG9jYWwsIHJlbW90ZSk7CisJCQllbHNlCisJCQkJcHJpbnRmX2xuKHJlYmFzaW5nID8KKwkJCQkJICBfKCJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIikgOgorCQkJCQkgIF8oIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJy4iKSwKKwkJCQkJICBsb2NhbCwgcmVtb3RlKTsKKwkJfQorCX0KKworCXJldHVybiAwOworCitvdXRfZXJyOgorCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOworCWVycm9yKF8oIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIpKTsKKworCWFkdmlzZShfKHRyYWNraW5nX2FkdmljZSksCisJICAgICAgIG9yaWdpbiA/IG9yaWdpbiA6ICIiLAorCSAgICAgICBvcmlnaW4gPyAiLyIgOiAiIiwKKwkgICAgICAgc2hvcnRuYW1lID8gc2hvcnRuYW1lIDogcmVtb3RlKTsKKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gbmV3X3JlZiBpcyBicmFuY2hlZCBvZmYgb2Ygb3JpZ19yZWYsIGFuZCB0cmllcworICogdG8gaW5mZXIgdGhlIHNldHRpbmdzIGZvciBicmFuY2guPG5ld19yZWY+LntyZW1vdGUsbWVyZ2V9IGZyb20gdGhlCisgKiBjb25maWcuCisgKi8KK3N0YXRpYyB2b2lkIHNldHVwX3RyYWNraW5nKGNvbnN0IGNoYXIgKm5ld19yZWYsIGNvbnN0IGNoYXIgKm9yaWdfcmVmLAorCQkJICAgZW51bSBicmFuY2hfdHJhY2sgdHJhY2ssIGludCBxdWlldCkKK3sKKwlzdHJ1Y3QgdHJhY2tpbmcgdHJhY2tpbmc7CisJaW50IGNvbmZpZ19mbGFncyA9IHF1aWV0ID8gMCA6IEJSQU5DSF9DT05GSUdfVkVSQk9TRTsKKworCW1lbXNldCgmdHJhY2tpbmcsIDAsIHNpemVvZih0cmFja2luZykpOworCXRyYWNraW5nLnNwZWMuZHN0ID0gKGNoYXIgKilvcmlnX3JlZjsKKwlpZiAoZm9yX2VhY2hfcmVtb3RlKGZpbmRfdHJhY2tlZF9icmFuY2gsICZ0cmFja2luZykpCisJCXJldHVybjsKKworCWlmICghdHJhY2tpbmcubWF0Y2hlcykKKwkJc3dpdGNoICh0cmFjaykgeworCQljYXNlIEJSQU5DSF9UUkFDS19BTFdBWVM6CisJCWNhc2UgQlJBTkNIX1RSQUNLX0VYUExJQ0lUOgorCQljYXNlIEJSQU5DSF9UUkFDS19PVkVSUklERToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuOworCQl9CisKKwlpZiAodHJhY2tpbmcubWF0Y2hlcyA+IDEpCisJCWRpZShfKCJOb3QgdHJhY2tpbmc6IGFtYmlndW91cyBpbmZvcm1hdGlvbiBmb3IgcmVmICVzIiksCisJCSAgICBvcmlnX3JlZik7CisKKwlpZiAoaW5zdGFsbF9icmFuY2hfY29uZmlnKGNvbmZpZ19mbGFncywgbmV3X3JlZiwgdHJhY2tpbmcucmVtb3RlLAorCQkJICAgICAgdHJhY2tpbmcuc3JjID8gdHJhY2tpbmcuc3JjIDogb3JpZ19yZWYpIDwgMCkKKwkJZXhpdCgtMSk7CisKKwlmcmVlKHRyYWNraW5nLnNyYyk7Cit9CisKK2ludCByZWFkX2JyYW5jaF9kZXNjKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqYnJhbmNoX25hbWUpCit7CisJY2hhciAqdiA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBuYW1lID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJm5hbWUsICJicmFuY2guJXMuZGVzY3JpcHRpb24iLCBicmFuY2hfbmFtZSk7CisJaWYgKGdpdF9jb25maWdfZ2V0X3N0cmluZyhuYW1lLmJ1ZiwgJnYpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfYWRkc3RyKGJ1Ziwgdik7CisJZnJlZSh2KTsKKwlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayBpZiAnbmFtZScgY2FuIGJlIGEgdmFsaWQgbmFtZSBmb3IgYSBicmFuY2g7IGRpZSBvdGhlcndpc2UuCisgKiBSZXR1cm4gMSBpZiB0aGUgbmFtZWQgYnJhbmNoIGFscmVhZHkgZXhpc3RzOyByZXR1cm4gMCBvdGhlcndpc2UuCisgKiBGaWxsIHJlZiB3aXRoIHRoZSBmdWxsIHJlZm5hbWUgZm9yIHRoZSBicmFuY2guCisgKi8KK2ludCB2YWxpZGF0ZV9icmFuY2huYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKnJlZikKK3sKKwlpZiAoc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYocmVmLCBuYW1lKSkKKwkJZGllKF8oIiclcycgaXMgbm90IGEgdmFsaWQgYnJhbmNoIG5hbWUuIiksIG5hbWUpOworCisJcmV0dXJuIHJlZl9leGlzdHMocmVmLT5idWYpOworfQorCisvKgorICogQ2hlY2sgaWYgYSBicmFuY2ggJ25hbWUnIGNhbiBiZSBjcmVhdGVkIGFzIGEgbmV3IGJyYW5jaDsgZGllIG90aGVyd2lzZS4KKyAqICdmb3JjZScgY2FuIGJlIHVzZWQgd2hlbiBpdCBpcyBPSyBmb3IgdGhlIG5hbWVkIGJyYW5jaCBhbHJlYWR5IGV4aXN0cy4KKyAqIFJldHVybiAxIGlmIHRoZSBuYW1lZCBicmFuY2ggYWxyZWFkeSBleGlzdHM7IHJldHVybiAwIG90aGVyd2lzZS4KKyAqIEZpbGwgcmVmIHdpdGggdGhlIGZ1bGwgcmVmbmFtZSBmb3IgdGhlIGJyYW5jaC4KKyAqLworaW50IHZhbGlkYXRlX25ld19icmFuY2huYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKnJlZiwgaW50IGZvcmNlKQoreworCWNvbnN0IGNoYXIgKmhlYWQ7CisKKwlpZiAoIXZhbGlkYXRlX2JyYW5jaG5hbWUobmFtZSwgcmVmKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWZvcmNlKQorCQlkaWUoXygiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iKSwKKwkJICAgIHJlZi0+YnVmICsgc3RybGVuKCJyZWZzL2hlYWRzLyIpKTsKKworCWhlYWQgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCBOVUxMLCBOVUxMKTsKKwlpZiAoIWlzX2JhcmVfcmVwb3NpdG9yeSgpICYmIGhlYWQgJiYgIXN0cmNtcChoZWFkLCByZWYtPmJ1ZikpCisJCWRpZShfKCJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iKSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjaGVja190cmFja2luZ19icmFuY2goc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpjYl9kYXRhKQoreworCWNoYXIgKnRyYWNraW5nX2JyYW5jaCA9IGNiX2RhdGE7CisJc3RydWN0IHJlZnNwZWNfaXRlbSBxdWVyeTsKKwltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2Yoc3RydWN0IHJlZnNwZWNfaXRlbSkpOworCXF1ZXJ5LmRzdCA9IHRyYWNraW5nX2JyYW5jaDsKKwlyZXR1cm4gIXJlbW90ZV9maW5kX3RyYWNraW5nKHJlbW90ZSwgJnF1ZXJ5KTsKK30KKworc3RhdGljIGludCB2YWxpZGF0ZV9yZW1vdGVfdHJhY2tpbmdfYnJhbmNoKGNoYXIgKnJlZikKK3sKKwlyZXR1cm4gIWZvcl9lYWNoX3JlbW90ZShjaGVja190cmFja2luZ19icmFuY2gsIHJlZik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHVwc3RyZWFtX25vdF9icmFuY2hbXSA9CitOXygiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iKTsKK3N0YXRpYyBjb25zdCBjaGFyIHVwc3RyZWFtX21pc3NpbmdbXSA9CitOXygidGhlIHJlcXVlc3RlZCB1cHN0cmVhbSBicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIpOworc3RhdGljIGNvbnN0IGNoYXIgdXBzdHJlYW1fYWR2aWNlW10gPQorTl8oIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgb24gYmFzaW5nIHlvdXIgd29yayBvbiBhbiB1cHN0cmVhbVxuIgorImJyYW5jaCB0aGF0IGFscmVhZHkgZXhpc3RzIGF0IHRoZSByZW1vdGUsIHlvdSBtYXkgbmVlZCB0b1xuIgorInJ1biBcImdpdCBmZXRjaFwiIHRvIHJldHJpZXZlIGl0LlxuIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVzaCBvdXQgYSBuZXcgbG9jYWwgYnJhbmNoIHRoYXRcbiIKKyJ3aWxsIHRyYWNrIGl0cyByZW1vdGUgY291bnRlcnBhcnQsIHlvdSBtYXkgd2FudCB0byB1c2VcbiIKKyJcImdpdCBwdXNoIC11XCIgdG8gc2V0IHRoZSB1cHN0cmVhbSBjb25maWcgYXMgeW91IHB1c2guIik7CisKK3ZvaWQgY3JlYXRlX2JyYW5jaChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3RhcnRfbmFtZSwKKwkJICAgaW50IGZvcmNlLCBpbnQgY2xvYmJlcl9oZWFkX29rLCBpbnQgcmVmbG9nLAorCQkgICBpbnQgcXVpZXQsIGVudW0gYnJhbmNoX3RyYWNrIHRyYWNrKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljaGFyICpyZWFsX3JlZjsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZiA9IFNUUkJVRl9JTklUOworCWludCBmb3JjaW5nID0gMDsKKwlpbnQgZG9udF9jaGFuZ2VfcmVmID0gMDsKKwlpbnQgZXhwbGljaXRfdHJhY2tpbmcgPSAwOworCisJaWYgKHRyYWNrID09IEJSQU5DSF9UUkFDS19FWFBMSUNJVCB8fCB0cmFjayA9PSBCUkFOQ0hfVFJBQ0tfT1ZFUlJJREUpCisJCWV4cGxpY2l0X3RyYWNraW5nID0gMTsKKworCWlmICgodHJhY2sgPT0gQlJBTkNIX1RSQUNLX09WRVJSSURFIHx8IGNsb2JiZXJfaGVhZF9vaykKKwkgICAgPyB2YWxpZGF0ZV9icmFuY2huYW1lKG5hbWUsICZyZWYpCisJICAgIDogdmFsaWRhdGVfbmV3X2JyYW5jaG5hbWUobmFtZSwgJnJlZiwgZm9yY2UpKSB7CisJCWlmICghZm9yY2UpCisJCQlkb250X2NoYW5nZV9yZWYgPSAxOworCQllbHNlCisJCQlmb3JjaW5nID0gMTsKKwl9CisKKwlyZWFsX3JlZiA9IE5VTEw7CisJaWYgKGdldF9vaWRfbWIoc3RhcnRfbmFtZSwgJm9pZCkpIHsKKwkJaWYgKGV4cGxpY2l0X3RyYWNraW5nKSB7CisJCQlpZiAoYWR2aWNlX3NldF91cHN0cmVhbV9mYWlsdXJlKSB7CisJCQkJZXJyb3IoXyh1cHN0cmVhbV9taXNzaW5nKSwgc3RhcnRfbmFtZSk7CisJCQkJYWR2aXNlKF8odXBzdHJlYW1fYWR2aWNlKSk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWRpZShfKHVwc3RyZWFtX21pc3NpbmcpLCBzdGFydF9uYW1lKTsKKwkJfQorCQlkaWUoXygiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIiksIHN0YXJ0X25hbWUpOworCX0KKworCXN3aXRjaCAoZHdpbV9yZWYoc3RhcnRfbmFtZSwgc3RybGVuKHN0YXJ0X25hbWUpLCAmb2lkLCAmcmVhbF9yZWYpKSB7CisJY2FzZSAwOgorCQkvKiBOb3QgYnJhbmNoaW5nIGZyb20gYW55IGV4aXN0aW5nIGJyYW5jaCAqLworCQlpZiAoZXhwbGljaXRfdHJhY2tpbmcpCisJCQlkaWUoXyh1cHN0cmVhbV9ub3RfYnJhbmNoKSwgc3RhcnRfbmFtZSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJLyogVW5pcXVlIGNvbXBsZXRpb24gLS0gZ29vZCwgb25seSBpZiBpdCBpcyBhIHJlYWwgYnJhbmNoICovCisJCWlmICghc3RhcnRzX3dpdGgocmVhbF9yZWYsICJyZWZzL2hlYWRzLyIpICYmCisJCSAgICB2YWxpZGF0ZV9yZW1vdGVfdHJhY2tpbmdfYnJhbmNoKHJlYWxfcmVmKSkgeworCQkJaWYgKGV4cGxpY2l0X3RyYWNraW5nKQorCQkJCWRpZShfKHVwc3RyZWFtX25vdF9icmFuY2gpLCBzdGFydF9uYW1lKTsKKwkJCWVsc2UKKwkJCQlyZWFsX3JlZiA9IE5VTEw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKF8oIkFtYmlndW91cyBvYmplY3QgbmFtZTogJyVzJy4iKSwgc3RhcnRfbmFtZSk7CisJCWJyZWFrOworCX0KKworCWlmICgoY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UociwgJm9pZCkpID09IE5VTEwpCisJCWRpZShfKCJOb3QgYSB2YWxpZCBicmFuY2ggcG9pbnQ6ICclcycuIiksIHN0YXJ0X25hbWUpOworCW9pZGNweSgmb2lkLCAmY29tbWl0LT5vYmplY3Qub2lkKTsKKworCWlmIChyZWZsb2cpCisJCWxvZ19hbGxfcmVmX3VwZGF0ZXMgPSBMT0dfUkVGU19OT1JNQUw7CisKKwlpZiAoIWRvbnRfY2hhbmdlX3JlZikgeworCQlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKwkJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwkJY2hhciAqbXNnOworCisJCWlmIChmb3JjaW5nKQorCQkJbXNnID0geHN0cmZtdCgiYnJhbmNoOiBSZXNldCB0byAlcyIsIHN0YXJ0X25hbWUpOworCQllbHNlCisJCQltc2cgPSB4c3RyZm10KCJicmFuY2g6IENyZWF0ZWQgZnJvbSAlcyIsIHN0YXJ0X25hbWUpOworCisJCXRyYW5zYWN0aW9uID0gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCZlcnIpOworCQlpZiAoIXRyYW5zYWN0aW9uIHx8CisJCSAgICByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCByZWYuYnVmLAorCQkJCQkgICAmb2lkLCBmb3JjaW5nID8gTlVMTCA6ICZudWxsX29pZCwKKwkJCQkJICAgMCwgbXNnLCAmZXJyKSB8fAorCQkgICAgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpCisJCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCWZyZWUobXNnKTsKKwl9CisKKwlpZiAocmVhbF9yZWYgJiYgdHJhY2spCisJCXNldHVwX3RyYWNraW5nKHJlZi5idWYgKyAxMSwgcmVhbF9yZWYsIHRyYWNrLCBxdWlldCk7CisKKwlzdHJidWZfcmVsZWFzZSgmcmVmKTsKKwlmcmVlKHJlYWxfcmVmKTsKK30KKwordm9pZCByZW1vdmVfbWVyZ2VfYnJhbmNoX3N0YXRlKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXVubGluayhnaXRfcGF0aF9tZXJnZV9oZWFkKHIpKTsKKwl1bmxpbmsoZ2l0X3BhdGhfbWVyZ2VfcnIocikpOworCXVubGluayhnaXRfcGF0aF9tZXJnZV9tc2cocikpOworCXVubGluayhnaXRfcGF0aF9tZXJnZV9tb2RlKHIpKTsKKwlzYXZlX2F1dG9zdGFzaChnaXRfcGF0aF9tZXJnZV9hdXRvc3Rhc2gocikpOworfQorCit2b2lkIHJlbW92ZV9icmFuY2hfc3RhdGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGludCB2ZXJib3NlKQoreworCXNlcXVlbmNlcl9wb3N0X2NvbW1pdF9jbGVhbnVwKHIsIHZlcmJvc2UpOworCXVubGluayhnaXRfcGF0aF9zcXVhc2hfbXNnKHIpKTsKKwlyZW1vdmVfbWVyZ2VfYnJhbmNoX3N0YXRlKHIpOworfQorCit2b2lkIGRpZV9pZl9jaGVja2VkX291dChjb25zdCBjaGFyICpicmFuY2gsIGludCBpZ25vcmVfY3VycmVudF93b3JrdHJlZSkKK3sKKwljb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0OworCisJd3QgPSBmaW5kX3NoYXJlZF9zeW1yZWYoIkhFQUQiLCBicmFuY2gpOworCWlmICghd3QgfHwgKGlnbm9yZV9jdXJyZW50X3dvcmt0cmVlICYmIHd0LT5pc19jdXJyZW50KSkKKwkJcmV0dXJuOworCXNraXBfcHJlZml4KGJyYW5jaCwgInJlZnMvaGVhZHMvIiwgJmJyYW5jaCk7CisJZGllKF8oIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIiksCisJICAgIGJyYW5jaCwgd3QtPnBhdGgpOworfQorCitpbnQgcmVwbGFjZV9lYWNoX3dvcmt0cmVlX2hlYWRfc3ltcmVmKGNvbnN0IGNoYXIgKm9sZHJlZiwgY29uc3QgY2hhciAqbmV3cmVmLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmxvZ21zZykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgd29ya3RyZWUgKip3b3JrdHJlZXMgPSBnZXRfd29ya3RyZWVzKDApOworCWludCBpOworCisJZm9yIChpID0gMDsgd29ya3RyZWVzW2ldOyBpKyspIHsKKwkJc3RydWN0IHJlZl9zdG9yZSAqcmVmczsKKworCQlpZiAod29ya3RyZWVzW2ldLT5pc19kZXRhY2hlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXdvcmt0cmVlc1tpXS0+aGVhZF9yZWYpCisJCQljb250aW51ZTsKKwkJaWYgKHN0cmNtcChvbGRyZWYsIHdvcmt0cmVlc1tpXS0+aGVhZF9yZWYpKQorCQkJY29udGludWU7CisKKwkJcmVmcyA9IGdldF93b3JrdHJlZV9yZWZfc3RvcmUod29ya3RyZWVzW2ldKTsKKwkJaWYgKHJlZnNfY3JlYXRlX3N5bXJlZihyZWZzLCAiSEVBRCIsIG5ld3JlZiwgbG9nbXNnKSkKKwkJCXJldCA9IGVycm9yKF8oIkhFQUQgb2Ygd29ya2luZyB0cmVlICVzIGlzIG5vdCB1cGRhdGVkIiksCisJCQkJICAgIHdvcmt0cmVlc1tpXS0+cGF0aCk7CisJfQorCisJZnJlZV93b3JrdHJlZXMod29ya3RyZWVzKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYnJhbmNoLmggYi9icmFuY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjBiZTYxCi0tLSAvZGV2L251bGwKKysrIGIvYnJhbmNoLmgKQEAgLTAsMCArMSwxMDMgQEAKKyNpZm5kZWYgQlJBTkNIX0gKKyNkZWZpbmUgQlJBTkNIX0gKKworc3RydWN0IHJlcG9zaXRvcnk7CitzdHJ1Y3Qgc3RyYnVmOworCitlbnVtIGJyYW5jaF90cmFjayB7CisJQlJBTkNIX1RSQUNLX1VOU1BFQ0lGSUVEID0gLTEsCisJQlJBTkNIX1RSQUNLX05FVkVSID0gMCwKKwlCUkFOQ0hfVFJBQ0tfUkVNT1RFLAorCUJSQU5DSF9UUkFDS19BTFdBWVMsCisJQlJBTkNIX1RSQUNLX0VYUExJQ0lULAorCUJSQU5DSF9UUkFDS19PVkVSUklERQorfTsKKworZXh0ZXJuIGVudW0gYnJhbmNoX3RyYWNrIGdpdF9icmFuY2hfdHJhY2s7CisKKy8qIEZ1bmN0aW9ucyBmb3IgYWN0aW5nIG9uIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBicmFuY2hlcy4gKi8KKworLyoKKyAqIENyZWF0ZXMgYSBuZXcgYnJhbmNoLCB3aGVyZToKKyAqCisgKiAgIC0gciBpcyB0aGUgcmVwb3NpdG9yeSB0byBhZGQgYSBicmFuY2ggdG8KKyAqCisgKiAgIC0gbmFtZSBpcyB0aGUgbmV3IGJyYW5jaCBuYW1lCisgKgorICogICAtIHN0YXJ0X25hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGV4aXN0aW5nIGJyYW5jaCB0aGF0IHRoZSBuZXcgYnJhbmNoIHNob3VsZAorICogICAgIHN0YXJ0IGZyb20KKyAqCisgKiAgIC0gZm9yY2UgZW5hYmxlcyBvdmVyd3JpdGluZyBhbiBleGlzdGluZyAobm9uLWhlYWQpIGJyYW5jaAorICoKKyAqICAgLSBjbG9iYmVyX2hlYWRfb2sgYWxsb3dzIHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQgKGhlbmNlIGV4aXN0aW5nKQorICogICAgIGJyYW5jaCB0byBiZSBvdmVyd3JpdHRlbjsgd2l0aG91dCAnZm9yY2UnLCBpdCBoYXMgbm8gZWZmZWN0LgorICoKKyAqICAgLSByZWZsb2cgY3JlYXRlcyBhIHJlZmxvZyBmb3IgdGhlIGJyYW5jaAorICoKKyAqICAgLSBxdWlldCBzdXBwcmVzc2VzIHRyYWNraW5nIGluZm9ybWF0aW9uCisgKgorICogICAtIHRyYWNrIGNhdXNlcyB0aGUgbmV3IGJyYW5jaCB0byBiZSBjb25maWd1cmVkIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoCisgKiAgICAgdGhhdCBzdGFydF9uYW1lIGlzIGEgdHJhY2tpbmcgYnJhbmNoIGZvciAoaWYgYW55KS4KKyAqCisgKi8KK3ZvaWQgY3JlYXRlX2JyYW5jaChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3RhcnRfbmFtZSwKKwkJICAgaW50IGZvcmNlLCBpbnQgY2xvYmJlcl9oZWFkX29rLAorCQkgICBpbnQgcmVmbG9nLCBpbnQgcXVpZXQsIGVudW0gYnJhbmNoX3RyYWNrIHRyYWNrKTsKKworLyoKKyAqIENoZWNrIGlmICduYW1lJyBjYW4gYmUgYSB2YWxpZCBuYW1lIGZvciBhIGJyYW5jaDsgZGllIG90aGVyd2lzZS4KKyAqIFJldHVybiAxIGlmIHRoZSBuYW1lZCBicmFuY2ggYWxyZWFkeSBleGlzdHM7IHJldHVybiAwIG90aGVyd2lzZS4KKyAqIEZpbGwgcmVmIHdpdGggdGhlIGZ1bGwgcmVmbmFtZSBmb3IgdGhlIGJyYW5jaC4KKyAqLworaW50IHZhbGlkYXRlX2JyYW5jaG5hbWUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqcmVmKTsKKworLyoKKyAqIENoZWNrIGlmIGEgYnJhbmNoICduYW1lJyBjYW4gYmUgY3JlYXRlZCBhcyBhIG5ldyBicmFuY2g7IGRpZSBvdGhlcndpc2UuCisgKiAnZm9yY2UnIGNhbiBiZSB1c2VkIHdoZW4gaXQgaXMgT0sgZm9yIHRoZSBuYW1lZCBicmFuY2ggYWxyZWFkeSBleGlzdHMuCisgKiBSZXR1cm4gMSBpZiB0aGUgbmFtZWQgYnJhbmNoIGFscmVhZHkgZXhpc3RzOyByZXR1cm4gMCBvdGhlcndpc2UuCisgKiBGaWxsIHJlZiB3aXRoIHRoZSBmdWxsIHJlZm5hbWUgZm9yIHRoZSBicmFuY2guCisgKi8KK2ludCB2YWxpZGF0ZV9uZXdfYnJhbmNobmFtZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RyYnVmICpyZWYsIGludCBmb3JjZSk7CisKKy8qCisgKiBSZW1vdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1lcmdlIHN0YXRlIG9uIHRoZSBjdXJyZW50CisgKiBicmFuY2guIChFLmcuLCBNRVJHRV9IRUFEKQorICovCit2b2lkIHJlbW92ZV9tZXJnZV9icmFuY2hfc3RhdGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworCisvKgorICogUmVtb3ZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiB3b3JraW5nIG9uIHRoZSBjdXJyZW50CisgKiBicmFuY2guIChFLmcuLCBNRVJHRV9IRUFEKQorICovCit2b2lkIHJlbW92ZV9icmFuY2hfc3RhdGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGludCB2ZXJib3NlKTsKKworLyoKKyAqIENvbmZpZ3VyZSBsb2NhbCBicmFuY2ggImxvY2FsIiBhcyBkb3duc3RyZWFtIHRvIGJyYW5jaCAicmVtb3RlIgorICogZnJvbSByZW1vdGUgIm9yaWdpbiIuICBVc2VkIGJ5IGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0uCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqLworI2RlZmluZSBCUkFOQ0hfQ09ORklHX1ZFUkJPU0UgMDEKK2ludCBpbnN0YWxsX2JyYW5jaF9jb25maWcoaW50IGZsYWcsIGNvbnN0IGNoYXIgKmxvY2FsLCBjb25zdCBjaGFyICpvcmlnaW4sIGNvbnN0IGNoYXIgKnJlbW90ZSk7CisKKy8qCisgKiBSZWFkIGJyYW5jaCBkZXNjcmlwdGlvbgorICovCitpbnQgcmVhZF9icmFuY2hfZGVzYyhzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lKTsKKworLyoKKyAqIENoZWNrIGlmIGEgYnJhbmNoIGlzIGNoZWNrZWQgb3V0IGluIHRoZSBtYWluIHdvcmt0cmVlIG9yIGFueSBsaW5rZWQKKyAqIHdvcmt0cmVlIGFuZCBkaWUgKHdpdGggYSBtZXNzYWdlIGRlc2NyaWJpbmcgaXRzIGNoZWNrb3V0IGxvY2F0aW9uKSBpZgorICogaXQgaXMuCisgKi8KK3ZvaWQgZGllX2lmX2NoZWNrZWRfb3V0KGNvbnN0IGNoYXIgKmJyYW5jaCwgaW50IGlnbm9yZV9jdXJyZW50X3dvcmt0cmVlKTsKKworLyoKKyAqIFVwZGF0ZSBhbGwgcGVyLXdvcmt0cmVlIEhFQURzIHBvaW50aW5nIGF0IHRoZSBvbGQgcmVmIHRvIHBvaW50IHRoZSBuZXcgcmVmLgorICogVGhpcyB3aWxsIGJlIHVzZWQgd2hlbiByZW5hbWluZyBhIGJyYW5jaC4gUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG5vbi16ZXJvCisgKiBvdGhlcndpc2UuCisgKi8KK2ludCByZXBsYWNlX2VhY2hfd29ya3RyZWVfaGVhZF9zeW1yZWYoY29uc3QgY2hhciAqb2xkcmVmLCBjb25zdCBjaGFyICpuZXdyZWYsCisJCQkJICAgICAgY29uc3QgY2hhciAqbG9nbXNnKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9idWdyZXBvcnQuYyBiL2J1Z3JlcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOGE0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9idWdyZXBvcnQuYwpAQCAtMCwwICsxLDE5MiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgImhlbHAuaCIKKyNpbmNsdWRlICJjb21wYXQvY29tcGlsZXIuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCisKK3N0YXRpYyB2b2lkIGdldF9zeXN0ZW1faW5mbyhzdHJ1Y3Qgc3RyYnVmICpzeXNfaW5mbykKK3sKKwlzdHJ1Y3QgdXRzbmFtZSB1bmFtZV9pbmZvOworCisJLyogZ2V0IGdpdCB2ZXJzaW9uIGZyb20gbmF0aXZlIGNtZCAqLworCXN0cmJ1Zl9hZGRzdHIoc3lzX2luZm8sIF8oImdpdCB2ZXJzaW9uOlxuIikpOworCWdldF92ZXJzaW9uX2luZm8oc3lzX2luZm8sIDEpOworCisJLyogc3lzdGVtIGNhbGwgZm9yIG90aGVyIHZlcnNpb24gaW5mbyAqLworCXN0cmJ1Zl9hZGRzdHIoc3lzX2luZm8sICJ1bmFtZTogIik7CisJaWYgKHVuYW1lKCZ1bmFtZV9pbmZvKSkKKwkJc3RyYnVmX2FkZGYoc3lzX2luZm8sIF8oInVuYW1lKCkgZmFpbGVkIHdpdGggZXJyb3IgJyVzJyAoJWQpXG4iKSwKKwkJCSAgICBzdHJlcnJvcihlcnJubyksCisJCQkgICAgZXJybm8pOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoc3lzX2luZm8sICIlcyAlcyAlcyAlc1xuIiwKKwkJCSAgICB1bmFtZV9pbmZvLnN5c25hbWUsCisJCQkgICAgdW5hbWVfaW5mby5yZWxlYXNlLAorCQkJICAgIHVuYW1lX2luZm8udmVyc2lvbiwKKwkJCSAgICB1bmFtZV9pbmZvLm1hY2hpbmUpOworCisJc3RyYnVmX2FkZHN0cihzeXNfaW5mbywgXygiY29tcGlsZXIgaW5mbzogIikpOworCWdldF9jb21waWxlcl9pbmZvKHN5c19pbmZvKTsKKwlzdHJidWZfYWRkc3RyKHN5c19pbmZvLCBfKCJsaWJjIGluZm86ICIpKTsKKwlnZXRfbGliY19pbmZvKHN5c19pbmZvKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3BvcHVsYXRlZF9ob29rcyhzdHJ1Y3Qgc3RyYnVmICpob29rX2luZm8sIGludCBub25naXQpCit7CisJLyoKKwkgKiBORUVEU1dPUks6IERvZXNuJ3QgbG9vayBsaWtlIHRoZXJlIGlzIGEgbGlzdCBvZiBhbGwgcG9zc2libGUgaG9va3M7CisJICogc28gYmVsb3cgaXMgYSB0cmFuc2NyaXB0aW9uIG9mIGBnaXQgaGVscCBob29rc2AuIExhdGVyLCB0aGlzIHNob3VsZAorCSAqIGJlIHJlcGxhY2VkIHdpdGggc29tZSBwcm9ncmFtbWF0aWNhbGx5IGdlbmVyYXRlZCBsaXN0IChnZW5lcmF0ZWQgZnJvbQorCSAqIGRvYyBvciBlbHNlIHRha2VuIGZyb20gc29tZSBsaWJyYXJ5IHdoaWNoIHRlbGxzIHVzIGFib3V0IGFsbCB0aGUKKwkgKiBob29rcykKKwkgKi8KKwlzdGF0aWMgY29uc3QgY2hhciAqaG9va1tdID0geworCQkiYXBwbHlwYXRjaC1tc2ciLAorCQkicHJlLWFwcGx5cGF0Y2giLAorCQkicG9zdC1hcHBseXBhdGNoIiwKKwkJInByZS1jb21taXQiLAorCQkicHJlLW1lcmdlLWNvbW1pdCIsCisJCSJwcmVwYXJlLWNvbW1pdC1tc2ciLAorCQkiY29tbWl0LW1zZyIsCisJCSJwb3N0LWNvbW1pdCIsCisJCSJwcmUtcmViYXNlIiwKKwkJInBvc3QtY2hlY2tvdXQiLAorCQkicG9zdC1tZXJnZSIsCisJCSJwcmUtcHVzaCIsCisJCSJwcmUtcmVjZWl2ZSIsCisJCSJ1cGRhdGUiLAorCQkicG9zdC1yZWNlaXZlIiwKKwkJInBvc3QtdXBkYXRlIiwKKwkJInB1c2gtdG8tY2hlY2tvdXQiLAorCQkicHJlLWF1dG8tZ2MiLAorCQkicG9zdC1yZXdyaXRlIiwKKwkJInNlbmRlbWFpbC12YWxpZGF0ZSIsCisJCSJmc21vbml0b3Itd2F0Y2htYW4iLAorCQkicDQtcHJlLXN1Ym1pdCIsCisJCSJwb3N0LWluZGV4LWNoYW5nZSIsCisJfTsKKwlpbnQgaTsKKworCWlmIChub25naXQpIHsKKwkJc3RyYnVmX2FkZHN0cihob29rX2luZm8sCisJCQlfKCJub3QgcnVuIGZyb20gYSBnaXQgcmVwb3NpdG9yeSAtIG5vIGhvb2tzIHRvIHNob3dcbiIpKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhvb2spOyBpKyspCisJCWlmIChmaW5kX2hvb2soaG9va1tpXSkpCisJCQlzdHJidWZfYWRkZihob29rX2luZm8sICIlc1xuIiwgaG9va1tpXSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVncmVwb3J0X3VzYWdlW10gPSB7CisJTl8oImdpdCBidWdyZXBvcnQgWy1vfC0tb3V0cHV0LWRpcmVjdG9yeSA8ZmlsZT5dIFstc3wtLXN1ZmZpeCA8Zm9ybWF0Pl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGdldF9idWdfdGVtcGxhdGUoc3RydWN0IHN0cmJ1ZiAqdGVtcGxhdGUpCit7CisJY29uc3QgY2hhciB0ZW1wbGF0ZV90ZXh0W10gPSBOXygKKyJUaGFuayB5b3UgZm9yIGZpbGxpbmcgb3V0IGEgR2l0IGJ1ZyByZXBvcnQhXG4iCisiUGxlYXNlIGFuc3dlciB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucyB0byBoZWxwIHVzIHVuZGVyc3RhbmQgeW91ciBpc3N1ZS5cbiIKKyJcbiIKKyJXaGF0IGRpZCB5b3UgZG8gYmVmb3JlIHRoZSBidWcgaGFwcGVuZWQ/IChTdGVwcyB0byByZXByb2R1Y2UgeW91ciBpc3N1ZSlcbiIKKyJcbiIKKyJXaGF0IGRpZCB5b3UgZXhwZWN0IHRvIGhhcHBlbj8gKEV4cGVjdGVkIGJlaGF2aW9yKVxuIgorIlxuIgorIldoYXQgaGFwcGVuZWQgaW5zdGVhZD8gKEFjdHVhbCBiZWhhdmlvcilcbiIKKyJcbiIKKyJXaGF0J3MgZGlmZmVyZW50IGJldHdlZW4gd2hhdCB5b3UgZXhwZWN0ZWQgYW5kIHdoYXQgYWN0dWFsbHkgaGFwcGVuZWQ/XG4iCisiXG4iCisiQW55dGhpbmcgZWxzZSB5b3Ugd2FudCB0byBhZGQ6XG4iCisiXG4iCisiUGxlYXNlIHJldmlldyB0aGUgcmVzdCBvZiB0aGUgYnVnIHJlcG9ydCBiZWxvdy5cbiIKKyJZb3UgY2FuIGRlbGV0ZSBhbnkgbGluZXMgeW91IGRvbid0IHdpc2ggdG8gc2hhcmUuXG4iKTsKKworCXN0cmJ1Zl9hZGRzdHIodGVtcGxhdGUsIF8odGVtcGxhdGVfdGV4dCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnZXRfaGVhZGVyKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqdGl0bGUpCit7CisJc3RyYnVmX2FkZGYoYnVmLCAiXG5cblslc11cbiIsIHRpdGxlKTsKK30KKworaW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcmVwb3J0X3BhdGggPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmVwb3J0ID0gLTE7CisJdGltZV90IG5vdyA9IHRpbWUoTlVMTCk7CisJY2hhciAqb3B0aW9uX291dHB1dCA9IE5VTEw7CisJY2hhciAqb3B0aW9uX3N1ZmZpeCA9ICIlWS0lbS0lZC0lSCVNIjsKKwlpbnQgbm9uZ2l0X29rID0gMDsKKwljb25zdCBjaGFyICpwcmVmaXggPSBOVUxMOworCWNvbnN0IGNoYXIgKnVzZXJfcmVsYXRpdmVfcGF0aCA9IE5VTEw7CisKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIGJ1Z3JlcG9ydF9vcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoJ28nLCAib3V0cHV0LWRpcmVjdG9yeSIsICZvcHRpb25fb3V0cHV0LCBOXygicGF0aCIpLAorCQkJICAgTl8oInNwZWNpZnkgYSBkZXN0aW5hdGlvbiBmb3IgdGhlIGJ1Z3JlcG9ydCBmaWxlIikpLAorCQlPUFRfU1RSSU5HKCdzJywgInN1ZmZpeCIsICZvcHRpb25fc3VmZml4LCBOXygiZm9ybWF0IiksCisJCQkgICBOXygic3BlY2lmeSBhIHN0cmZ0aW1lIGZvcm1hdCBzdWZmaXggZm9yIHRoZSBmaWxlbmFtZSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXRfb2spOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWdyZXBvcnRfb3B0aW9ucywKKwkJCSAgICAgYnVncmVwb3J0X3VzYWdlLCAwKTsKKworCS8qIFByZXBhcmUgdGhlIHBhdGggdG8gcHV0IHRoZSByZXN1bHQgKi8KKwlzdHJidWZfYWRkc3RyKCZyZXBvcnRfcGF0aCwKKwkJICAgICAgcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwKKwkJCQkgICAgICBvcHRpb25fb3V0cHV0ID8gb3B0aW9uX291dHB1dCA6ICIiKSk7CisJc3RyYnVmX2NvbXBsZXRlKCZyZXBvcnRfcGF0aCwgJy8nKTsKKworCXN0cmJ1Zl9hZGRzdHIoJnJlcG9ydF9wYXRoLCAiZ2l0LWJ1Z3JlcG9ydC0iKTsKKwlzdHJidWZfYWRkZnRpbWUoJnJlcG9ydF9wYXRoLCBvcHRpb25fc3VmZml4LCBsb2NhbHRpbWUoJm5vdyksIDAsIDApOworCXN0cmJ1Zl9hZGRzdHIoJnJlcG9ydF9wYXRoLCAiLnR4dCIpOworCisJc3dpdGNoIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKHJlcG9ydF9wYXRoLmJ1ZikpIHsKKwljYXNlIFNDTERfT0s6CisJY2FzZSBTQ0xEX0VYSVNUUzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKF8oImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBmb3IgJyVzJyIpLAorCQkgICAgcmVwb3J0X3BhdGguYnVmKTsKKwl9CisKKwkvKiBQcmVwYXJlIHRoZSByZXBvcnQgY29udGVudHMgKi8KKwlnZXRfYnVnX3RlbXBsYXRlKCZidWZmZXIpOworCisJZ2V0X2hlYWRlcigmYnVmZmVyLCBfKCJTeXN0ZW0gSW5mbyIpKTsKKwlnZXRfc3lzdGVtX2luZm8oJmJ1ZmZlcik7CisKKwlnZXRfaGVhZGVyKCZidWZmZXIsIF8oIkVuYWJsZWQgSG9va3MiKSk7CisJZ2V0X3BvcHVsYXRlZF9ob29rcygmYnVmZmVyLCBub25naXRfb2spOworCisJLyogZm9wZW4gZG9lc24ndCBvZmZlciB1cyBhbiBPX0VYQ0wgYWx0ZXJuYXRpdmUsIGV4Y2VwdCB3aXRoIGdsaWJjLiAqLworCXJlcG9ydCA9IG9wZW4ocmVwb3J0X3BhdGguYnVmLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFksIDA2NjYpOworCisJaWYgKHJlcG9ydCA8IDApIHsKKwkJVU5MRUFLKHJlcG9ydF9wYXRoKTsKKwkJZGllKF8oImNvdWxkbid0IGNyZWF0ZSBhIG5ldyBmaWxlIGF0ICclcyciKSwgcmVwb3J0X3BhdGguYnVmKTsKKwl9CisKKwlzdHJidWZfd3JpdGVfZmQoJmJ1ZmZlciwgcmVwb3J0KTsKKwljbG9zZShyZXBvcnQpOworCisJLyoKKwkgKiBXZSB3YW50IHRvIHByaW50IHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSB1c2VyLCBidXQgd2Ugc3RpbGwgbmVlZCB0aGUKKwkgKiBwYXRoIHJlbGF0aXZlIHRvIHVzIHRvIGdpdmUgdG8gdGhlIGVkaXRvci4KKwkgKi8KKwlpZiAoIShwcmVmaXggJiYgc2tpcF9wcmVmaXgocmVwb3J0X3BhdGguYnVmLCBwcmVmaXgsICZ1c2VyX3JlbGF0aXZlX3BhdGgpKSkKKwkJdXNlcl9yZWxhdGl2ZV9wYXRoID0gcmVwb3J0X3BhdGguYnVmOworCWZwcmludGYoc3RkZXJyLCBfKCJDcmVhdGVkIG5ldyByZXBvcnQgYXQgJyVzJy5cbiIpLAorCQl1c2VyX3JlbGF0aXZlX3BhdGgpOworCisJVU5MRUFLKGJ1ZmZlcik7CisJVU5MRUFLKHJlcG9ydF9wYXRoKTsKKwlyZXR1cm4gISFsYXVuY2hfZWRpdG9yKHJlcG9ydF9wYXRoLmJ1ZiwgTlVMTCwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluLmggYi9idWlsdGluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVhZTE1YgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4uaApAQCAtMCwwICsxLDI0MSBAQAorI2lmbmRlZiBCVUlMVElOX0gKKyNkZWZpbmUgQlVJTFRJTl9ICisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorCisvKgorICogYnVpbHRpbiBBUEkKKyAqID09PT09PT09PT09CisgKgorICogQWRkaW5nIGEgbmV3IGJ1aWx0LWluCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGVyZSBhcmUgNCB0aGluZ3MgdG8gZG8gdG8gYWRkIGEgYnVpbHQtaW4gY29tbWFuZCBpbXBsZW1lbnRhdGlvbiB0bworICogR2l0OgorICoKKyAqIC4gRGVmaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYnVpbHQtaW4gY29tbWFuZCBgZm9vYCB3aXRoCisgKiAgIHNpZ25hdHVyZToKKyAqCisgKglpbnQgY21kX2ZvbyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CisgKgorICogLiBBZGQgdGhlIGV4dGVybmFsIGRlY2xhcmF0aW9uIGZvciB0aGUgZnVuY3Rpb24gdG8gYGJ1aWx0aW4uaGAuCisgKgorICogLiBBZGQgdGhlIGNvbW1hbmQgdG8gdGhlIGBjb21tYW5kc1tdYCB0YWJsZSBkZWZpbmVkIGluIGBnaXQuY2AuCisgKiAgIFRoZSBlbnRyeSBzaG91bGQgbG9vayBsaWtlOgorICoKKyAqCXsgImZvbyIsIGNtZF9mb28sIDxvcHRpb25zPiB9LAorICoKKyAqIHdoZXJlIG9wdGlvbnMgaXMgdGhlIGJpdHdpc2Utb3Igb2Y6CisgKgorICogYFJVTl9TRVRVUGA6CisgKglJZiB0aGVyZSBpcyBub3QgYSBHaXQgZGlyZWN0b3J5IHRvIHdvcmsgb24sIGFib3J0LiAgSWYgdGhlcmUKKyAqCWlzIGEgd29yayB0cmVlLCBjaGRpciB0byB0aGUgdG9wIG9mIGl0IGlmIHRoZSBjb21tYW5kIHdhcworICoJaW52b2tlZCBpbiBhIHN1YmRpcmVjdG9yeS4gIElmIHRoZXJlIGlzIG5vIHdvcmsgdHJlZSwgbm8KKyAqCWNoZGlyKCkgaXMgZG9uZS4KKyAqCisgKiBgUlVOX1NFVFVQX0dFTlRMWWA6CisgKglJZiB0aGVyZSBpcyBhIEdpdCBkaXJlY3RvcnksIGNoZGlyIGFzIHBlciBSVU5fU0VUVVAsIG90aGVyd2lzZSwKKyAqCWRvbid0IGNoZGlyIGFueXdoZXJlLgorICoKKyAqIGBVU0VfUEFHRVJgOgorICoKKyAqCUlmIHRoZSBzdGFuZGFyZCBvdXRwdXQgaXMgY29ubmVjdGVkIHRvIGEgdHR5LCBzcGF3biBhIHBhZ2VyIGFuZAorICoJZmVlZCBvdXIgb3V0cHV0IHRvIGl0LgorICoKKyAqIGBORUVEX1dPUktfVFJFRWA6CisgKgorICoJTWFrZSBzdXJlIHRoZXJlIGlzIGEgd29yayB0cmVlLCBpLmUuIHRoZSBjb21tYW5kIGNhbm5vdCBhY3QKKyAqCW9uIGJhcmUgcmVwb3NpdG9yaWVzLgorICoJVGhpcyBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gYFJVTl9TRVRVUGAgaXMgYWxzbyBzZXQuCisgKgorICogYFNVUFBPUlRfU1VQRVJfUFJFRklYYDoKKyAqCisgKglUaGUgYnVpbHQtaW4gc3VwcG9ydHMgYC0tc3VwZXItcHJlZml4YC4KKyAqCisgKiBgREVMQVlfUEFHRVJfQ09ORklHYDoKKyAqCisgKglJZiBSVU5fU0VUVVAgb3IgUlVOX1NFVFVQX0dFTlRMWSBpcyBzZXQsIGdpdC5jIG5vcm1hbGx5IGhhbmRsZXMKKyAqCXRoZSBgcGFnZXIuPGNtZD5gLWNvbmZpZ3VyYXRpb24uIElmIHRoaXMgZmxhZyBpcyB1c2VkLCBnaXQuYworICoJd2lsbCBza2lwIHRoYXQgc3RlcCwgaW5zdGVhZCBhbGxvd2luZyB0aGUgYnVpbHQtaW4gdG8gbWFrZSBhCisgKgltb3JlIGluZm9ybWVkIGRlY2lzaW9uLCBlLmcuLCBieSBpZ25vcmluZyBgcGFnZXIuPGNtZD5gIGZvcgorICoJY2VydGFpbiBzdWJjb21tYW5kcy4KKyAqCisgKiAuIEFkZCBgYnVpbHRpbi9mb28ub2AgdG8gYEJVSUxUSU5fT0JKU2AgaW4gYE1ha2VmaWxlYC4KKyAqCisgKiBBZGRpdGlvbmFsbHksIGlmIGBmb29gIGlzIGEgbmV3IGNvbW1hbmQsIHRoZXJlIGFyZSA0IG1vcmUgdGhpbmdzIHRvIGRvOgorICoKKyAqIC4gQWRkIHRlc3RzIHRvIGB0L2AgZGlyZWN0b3J5LgorICoKKyAqIC4gV3JpdGUgZG9jdW1lbnRhdGlvbiBpbiBgRG9jdW1lbnRhdGlvbi9naXQtZm9vLnR4dGAuCisgKgorICogLiBBZGQgYW4gZW50cnkgZm9yIGBnaXQtZm9vYCB0byBgY29tbWFuZC1saXN0LnR4dGAuCisgKgorICogLiBBZGQgYW4gZW50cnkgZm9yIGAvZ2l0LWZvb2AgdG8gYC5naXRpZ25vcmVgLgorICoKKyAqCisgKiBIb3cgYSBidWlsdC1pbiBpcyBjYWxsZWQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBgY21kX2ZvbygpYCB0YWtlcyB0aHJlZSBwYXJhbWV0ZXJzLCBgYXJnY2AsIGBhcmd2LAorICogYW5kIGBwcmVmaXhgLiAgVGhlIGZpcnN0IHR3byBhcmUgc2ltaWxhciB0byB3aGF0IGBtYWluKClgIG9mIGEKKyAqIHN0YW5kYWxvbmUgY29tbWFuZCB3b3VsZCBiZSBjYWxsZWQgd2l0aC4KKyAqCisgKiBXaGVuIGBSVU5fU0VUVVBgIGlzIHNwZWNpZmllZCBpbiB0aGUgYGNvbW1hbmRzW11gIHRhYmxlLCBhbmQgd2hlbiB5b3UKKyAqIHdlcmUgc3RhcnRlZCBmcm9tIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSB3b3JrIHRyZWUsIGBjbWRfZm9vKClgIGlzIGNhbGxlZAorICogYWZ0ZXIgY2hkaXIoMikgdG8gdGhlIHRvcCBvZiB0aGUgd29yayB0cmVlLCBhbmQgYHByZWZpeGAgZ2V0cyB0aGUgcGF0aAorICogdG8gdGhlIHN1YmRpcmVjdG9yeSB0aGUgY29tbWFuZCBzdGFydGVkIGZyb20uICBUaGlzIGFsbG93cyB5b3UgdG8KKyAqIGNvbnZlcnQgYSB1c2VyLXN1cHBsaWVkIHBhdGhuYW1lICh0eXBpY2FsbHkgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkpCisgKiB0byBhIHBhdGhuYW1lIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHdvcmsgdHJlZS4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGZyb20gYGNtZF9mb28oKWAgYmVjb21lcyB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlCisgKiBjb21tYW5kLgorICovCisKK2V4dGVybiBjb25zdCBjaGFyIGdpdF91c2FnZV9zdHJpbmdbXTsKK2V4dGVybiBjb25zdCBjaGFyIGdpdF9tb3JlX2luZm9fc3RyaW5nW107CisKKy8qKgorICogSWYgYSBidWlsdC1pbiBoYXMgREVMQVlfUEFHRVJfQ09ORklHIHNldCwgdGhlIGJ1aWx0LWluIHNob3VsZCBjYWxsIHRoaXMgZWFybHkKKyAqIHdoZW4gaXQgd2lzaGVzIHRvIHJlc3BlY3QgdGhlIGBwYWdlci5mb29gLWNvbmZpZy4gVGhlIGBjbWRgIGlzIHRoZSBuYW1lIG9mCisgKiB0aGUgYnVpbHQtaW4sIGUuZy4sICJmb28iLiBJZiBhIHBhZ2luZy1jaG9pY2UgaGFzIGFscmVhZHkgYmVlbiBzZXR1cCwgdGhpcworICogZG9lcyBub3RoaW5nLiBUaGUgZGVmYXVsdCBpbiBgZGVmYCBzaG91bGQgYmUgMCBmb3IgInBhZ2VyIG9mZiIsIDEgZm9yICJwYWdlcgorICogb24iIG9yIC0xIGZvciAicHVudCIuCisgKgorICogWW91IHNob3VsZCBtb3N0IGxpa2VseSB1c2UgYSBkZWZhdWx0IG9mIDAgb3IgMS4gIlB1bnQiICgtMSkgY291bGQgYmUgdXNlZnVsCisgKiB0byBiZSBhYmxlIHRvIGZhbGwgYmFjayB0byBzb21lIGhpc3RvcmljYWwgY29tcGF0aWJpbGl0eSBuYW1lLgorICovCit2b2lkIHNldHVwX2F1dG9fcGFnZXIoY29uc3QgY2hhciAqY21kLCBpbnQgZGVmKTsKKworaW50IGlzX2J1aWx0aW4oY29uc3QgY2hhciAqcyk7CisKK2ludCBjbWRfYWRkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfYW0oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2FwcGx5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfYXJjaGl2ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2Jpc2VjdF9faGVscGVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfYmxhbWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9icmFuY2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9idW5kbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9jYXRfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2NoZWNrb3V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfY2hlY2tvdXRfaW5kZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9jaGVja19hdHRyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfY2hlY2tfaWdub3JlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfY2hlY2tfbWFpbG1hcChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2NoZWNrX3JlZl9mb3JtYXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9jaGVycnkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9jaGVycnlfcGljayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2Nsb25lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfY2xlYW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9jb2x1bW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9jb21taXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9jb21taXRfZ3JhcGgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9jb21taXRfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2NvbmZpZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2NvdW50X29iamVjdHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9jcmVkZW50aWFsKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfZGVzY3JpYmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9kaWZmX2ZpbGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfZGlmZl9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2RpZmYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9kaWZmX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9kaWZmdG9vbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2Vudl9faGVscGVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfZmFzdF9leHBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9mZXRjaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2ZldGNoX3BhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9mbXRfbWVyZ2VfbXNnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfZm9yX2VhY2hfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfZm9ybWF0X3BhdGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfZnNjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2djKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfZ2V0X3Rhcl9jb21taXRfaWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9ncmVwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfaGFzaF9vYmplY3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfaW5kZXhfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2luaXRfZGIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9pbnRlcnByZXRfdHJhaWxlcnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9sb2coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9sb2dfcmVmbG9nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbHNfZmlsZXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9sc190cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbHNfcmVtb3RlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbWFpbGluZm8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9tYWlsc3BsaXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9tZXJnZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX21lcmdlX2Jhc2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9tZXJnZV9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX21lcmdlX291cnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9tZXJnZV9maWxlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbWVyZ2VfcmVjdXJzaXZlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbWVyZ2VfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX21rdGFnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbWt0cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbXVsdGlfcGFja19pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX212KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbmFtZV9yZXYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9ub3RlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3BhY2tfb2JqZWN0cyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3BhY2tfcmVkdW5kYW50KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcGF0Y2hfaWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9wcnVuZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3BydW5lX3BhY2tlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3B1bGwoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9wdXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcmFuZ2VfZGlmZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3JlYWRfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3JlYmFzZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3JlYmFzZV9faW50ZXJhY3RpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9yZWNlaXZlX3BhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9yZWZsb2coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9yZW1vdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9yZW1vdGVfZXh0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcmVtb3RlX2ZkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcmVwYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcmVyZXJlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcmVzZXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9yZXN0b3JlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcmV2X2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9yZXZfcGFyc2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9yZXZlcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9ybShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3NlbmRfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3Nob3J0bG9nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfc2hvdyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3Nob3dfYnJhbmNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfc2hvd19pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3NwYXJzZV9jaGVja291dChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3N0YXR1cyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3N0YXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfc3RyaXBzcGFjZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3N1Ym1vZHVsZV9faGVscGVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfc3dpdGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfc3ltYm9saWNfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfdGFnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfdGFyX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF91bnBhY2tfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3VucGFja19vYmplY3RzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfdXBkYXRlX2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfdXBkYXRlX3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3VwZGF0ZV9zZXJ2ZXJfaW5mbyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3VwbG9hZF9hcmNoaXZlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfdXBsb2FkX2FyY2hpdmVfd3JpdGVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfdXBsb2FkX3BhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF92YXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF92ZXJpZnlfY29tbWl0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfdmVyaWZ5X3RhZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3ZlcnNpb24oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF93aGF0Y2hhbmdlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3dvcmt0cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfd3JpdGVfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3ZlcmlmeV9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfc2hvd19yZWYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9wYWNrX3JlZnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9yZXBsYWNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9idWlsdGluL2FkZC5jIGIvYnVpbHRpbi9hZGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOThlMDExCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9hZGQuYwpAQCAtMCwwICsxLDYxNyBAQAorLyoKKyAqICJnaXQgYWRkIiBidWlsdGluIGNvbW1hbmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGludXMgVG9ydmFsZHMKKyAqLworI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiYnVsay1jaGVja2luLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgImFkZC1pbnRlcmFjdGl2ZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fYWRkX3VzYWdlW10gPSB7CisJTl8oImdpdCBhZGQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIiksCisJTlVMTAorfTsKK3N0YXRpYyBpbnQgcGF0Y2hfaW50ZXJhY3RpdmUsIGFkZF9pbnRlcmFjdGl2ZSwgZWRpdF9pbnRlcmFjdGl2ZTsKK3N0YXRpYyBpbnQgdGFrZV93b3JrdHJlZV9jaGFuZ2VzOworc3RhdGljIGludCBhZGRfcmVub3JtYWxpemU7CitzdGF0aWMgaW50IHBhdGhzcGVjX2ZpbGVfbnVsOworc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhzcGVjX2Zyb21fZmlsZTsKK3N0YXRpYyBpbnQgbGVnYWN5X3N0YXNoX3A7IC8qIHN1cHBvcnQgZm9yIHRoZSBzY3JpcHRlZCBgZ2l0IHN0YXNoYCAqLworCitzdHJ1Y3QgdXBkYXRlX2NhbGxiYWNrX2RhdGEgeworCWludCBmbGFnczsKKwlpbnQgYWRkX2Vycm9yczsKK307CisKK3N0YXRpYyB2b2lkIGNobW9kX3BhdGhzcGVjKHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsIGNoYXIgZmxpcCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCisJCWlmIChwYXRoc3BlYyAmJiAhY2VfcGF0aF9tYXRjaCgmdGhlX2luZGV4LCBjZSwgcGF0aHNwZWMsIE5VTEwpKQorCQkJY29udGludWU7CisKKwkJaWYgKGNobW9kX2NhY2hlX2VudHJ5KGNlLCBmbGlwKSA8IDApCisJCQlmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBjaG1vZCAlY3ggJyVzJ1xuIiwgZmxpcCwgY2UtPm5hbWUpOworCX0KK30KKworc3RhdGljIGludCBmaXhfdW5tZXJnZWRfc3RhdHVzKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLAorCQkJICAgICAgIHN0cnVjdCB1cGRhdGVfY2FsbGJhY2tfZGF0YSAqZGF0YSkKK3sKKwlpZiAocC0+c3RhdHVzICE9IERJRkZfU1RBVFVTX1VOTUVSR0VEKQorCQlyZXR1cm4gcC0+c3RhdHVzOworCWlmICghKGRhdGEtPmZsYWdzICYgQUREX0NBQ0hFX0lHTk9SRV9SRU1PVkFMKSAmJiAhcC0+dHdvLT5tb2RlKQorCQkvKgorCQkgKiBUaGlzIGlzIG5vdCBhbiBleHBsaWNpdCBhZGQgcmVxdWVzdCwgYW5kIHRoZQorCQkgKiBwYXRoIGlzIG1pc3NpbmcgZnJvbSB0aGUgd29ya2luZyB0cmVlIChkZWxldGVkKQorCQkgKi8KKwkJcmV0dXJuIERJRkZfU1RBVFVTX0RFTEVURUQ7CisJZWxzZQorCQkvKgorCQkgKiBFaXRoZXIgYW4gZXhwbGljaXQgYWRkIHJlcXVlc3QsIG9yIHBhdGggZXhpc3RzCisJCSAqIGluIHRoZSB3b3JraW5nIHRyZWUuICBBbiBhdHRlbXB0IHRvIGV4cGxpY2l0bHkKKwkJICogYWRkIGEgcGF0aCB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB3b3JraW5nIHRyZWUKKwkJICogd2lsbCBiZSBjYXVnaHQgYXMgYW4gZXJyb3IgYnkgdGhlIGNhbGxlciBpbW1lZGlhdGVseS4KKwkJICovCisJCXJldHVybiBESUZGX1NUQVRVU19NT0RJRklFRDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2NhbGxiYWNrKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKKwkJCSAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHZvaWQgKmNiZGF0YSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdXBkYXRlX2NhbGxiYWNrX2RhdGEgKmRhdGEgPSBjYmRhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQljb25zdCBjaGFyICpwYXRoID0gcC0+b25lLT5wYXRoOworCQlzd2l0Y2ggKGZpeF91bm1lcmdlZF9zdGF0dXMocCwgZGF0YSkpIHsKKwkJZGVmYXVsdDoKKwkJCWRpZShfKCJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIiksIHAtPnN0YXR1cyk7CisJCWNhc2UgRElGRl9TVEFUVVNfTU9ESUZJRUQ6CisJCWNhc2UgRElGRl9TVEFUVVNfVFlQRV9DSEFOR0VEOgorCQkJaWYgKGFkZF9maWxlX3RvX2luZGV4KCZ0aGVfaW5kZXgsIHBhdGgsCWRhdGEtPmZsYWdzKSkgeworCQkJCWlmICghKGRhdGEtPmZsYWdzICYgQUREX0NBQ0hFX0lHTk9SRV9FUlJPUlMpKQorCQkJCQlkaWUoXygidXBkYXRpbmcgZmlsZXMgZmFpbGVkIikpOworCQkJCWRhdGEtPmFkZF9lcnJvcnMrKzsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIERJRkZfU1RBVFVTX0RFTEVURUQ6CisJCQlpZiAoZGF0YS0+ZmxhZ3MgJiBBRERfQ0FDSEVfSUdOT1JFX1JFTU9WQUwpCisJCQkJYnJlYWs7CisJCQlpZiAoIShkYXRhLT5mbGFncyAmIEFERF9DQUNIRV9QUkVURU5EKSkKKwkJCQlyZW1vdmVfZmlsZV9mcm9tX2luZGV4KCZ0aGVfaW5kZXgsIHBhdGgpOworCQkJaWYgKGRhdGEtPmZsYWdzICYgKEFERF9DQUNIRV9QUkVURU5EfEFERF9DQUNIRV9WRVJCT1NFKSkKKwkJCQlwcmludGYoXygicmVtb3ZlICclcydcbiIpLCBwYXRoKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitpbnQgYWRkX2ZpbGVzX3RvX2NhY2hlKGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgdXBkYXRlX2NhbGxiYWNrX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCisJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCWRhdGEuZmxhZ3MgPSBmbGFnczsKKworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIHByZWZpeCk7CisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXYsIE5VTEwpOworCWlmIChwYXRoc3BlYykKKwkJY29weV9wYXRoc3BlYygmcmV2LnBydW5lX2RhdGEsIHBhdGhzcGVjKTsKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gdXBkYXRlX2NhbGxiYWNrOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gJmRhdGE7CisJcmV2LmRpZmZvcHQuZmxhZ3Mub3ZlcnJpZGVfc3VibW9kdWxlX2NvbmZpZyA9IDE7CisJcmV2Lm1heF9jb3VudCA9IDA7IC8qIGRvIG5vdCBjb21wYXJlIHVubWVyZ2VkIHBhdGhzIHdpdGggc3RhZ2UgIzIgKi8KKwlydW5fZGlmZl9maWxlcygmcmV2LCBESUZGX1JBQ1lfSVNfTU9ESUZJRUQpOworCWNsZWFyX3BhdGhzcGVjKCZyZXYucHJ1bmVfZGF0YSk7CisJcmV0dXJuICEhZGF0YS5hZGRfZXJyb3JzOworfQorCitzdGF0aWMgaW50IHJlbm9ybWFsaXplX3RyYWNrZWRfZmlsZXMoY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywgaW50IGZsYWdzKQoreworCWludCBpLCByZXR2YWwgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisKKwkJaWYgKGNlX3N0YWdlKGNlKSkKKwkJCWNvbnRpbnVlOyAvKiBkbyBub3QgdG91Y2ggdW5tZXJnZWQgcGF0aHMgKi8KKwkJaWYgKCFTX0lTUkVHKGNlLT5jZV9tb2RlKSAmJiAhU19JU0xOSyhjZS0+Y2VfbW9kZSkpCisJCQljb250aW51ZTsgLyogZG8gbm90IHRvdWNoIG5vbiBibG9icyAqLworCQlpZiAocGF0aHNwZWMgJiYgIWNlX3BhdGhfbWF0Y2goJnRoZV9pbmRleCwgY2UsIHBhdGhzcGVjLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCQlyZXR2YWwgfD0gYWRkX2ZpbGVfdG9fY2FjaGUoY2UtPm5hbWUsIGZsYWdzIHwgQUREX0NBQ0hFX1JFTk9STUFMSVpFKTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgY2hhciAqcHJ1bmVfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsIGludCBwcmVmaXgpCit7CisJY2hhciAqc2VlbjsKKwlpbnQgaTsKKwlzdHJ1Y3QgZGlyX2VudHJ5ICoqc3JjLCAqKmRzdDsKKworCXNlZW4gPSB4Y2FsbG9jKHBhdGhzcGVjLT5uciwgMSk7CisKKwlzcmMgPSBkc3QgPSBkaXItPmVudHJpZXM7CisJaSA9IGRpci0+bnI7CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCXN0cnVjdCBkaXJfZW50cnkgKmVudHJ5ID0gKnNyYysrOworCQlpZiAoZGlyX3BhdGhfbWF0Y2goJnRoZV9pbmRleCwgZW50cnksIHBhdGhzcGVjLCBwcmVmaXgsIHNlZW4pKQorCQkJKmRzdCsrID0gZW50cnk7CisJfQorCWRpci0+bnIgPSBkc3QgLSBkaXItPmVudHJpZXM7CisJYWRkX3BhdGhzcGVjX21hdGNoZXNfYWdhaW5zdF9pbmRleChwYXRoc3BlYywgJnRoZV9pbmRleCwgc2Vlbik7CisJcmV0dXJuIHNlZW47Cit9CisKK3N0YXRpYyB2b2lkIHJlZnJlc2goaW50IHZlcmJvc2UsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJY2hhciAqc2VlbjsKKwlpbnQgaTsKKworCXNlZW4gPSB4Y2FsbG9jKHBhdGhzcGVjLT5uciwgMSk7CisJcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCB2ZXJib3NlID8gUkVGUkVTSF9JTl9QT1JDRUxBSU4gOiBSRUZSRVNIX1FVSUVULAorCQkgICAgICBwYXRoc3BlYywgc2VlbiwgXygiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiKSk7CisJZm9yIChpID0gMDsgaSA8IHBhdGhzcGVjLT5ucjsgaSsrKSB7CisJCWlmICghc2VlbltpXSkKKwkJCWRpZShfKCJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIiksCisJCQkgICAgcGF0aHNwZWMtPml0ZW1zW2ldLm1hdGNoKTsKKwl9CisJZnJlZShzZWVuKTsKK30KKworaW50IHJ1bl9hZGRfaW50ZXJhY3RpdmUoY29uc3QgY2hhciAqcmV2aXNpb24sIGNvbnN0IGNoYXIgKnBhdGNoX21vZGUsCisJCQljb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCWludCBzdGF0dXMsIGk7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJndiA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlpbnQgdXNlX2J1aWx0aW5fYWRkX2kgPQorCQlnaXRfZW52X2Jvb2woIkdJVF9URVNUX0FERF9JX1VTRV9CVUlMVElOIiwgLTEpOworCisJaWYgKHVzZV9idWlsdGluX2FkZF9pIDwgMCkKKwkJZ2l0X2NvbmZpZ19nZXRfYm9vbCgiYWRkLmludGVyYWN0aXZlLnVzZWJ1aWx0aW4iLAorCQkJCSAgICAmdXNlX2J1aWx0aW5fYWRkX2kpOworCisJaWYgKHVzZV9idWlsdGluX2FkZF9pID09IDEpIHsKKwkJZW51bSBhZGRfcF9tb2RlIG1vZGU7CisKKwkJaWYgKCFwYXRjaF9tb2RlKQorCQkJcmV0dXJuICEhcnVuX2FkZF9pKHRoZV9yZXBvc2l0b3J5LCBwYXRoc3BlYyk7CisKKwkJaWYgKCFzdHJjbXAocGF0Y2hfbW9kZSwgIi0tcGF0Y2giKSkKKwkJCW1vZGUgPSBBRERfUF9BREQ7CisJCWVsc2UgaWYgKCFzdHJjbXAocGF0Y2hfbW9kZSwgIi0tcGF0Y2g9c3Rhc2giKSkKKwkJCW1vZGUgPSBBRERfUF9TVEFTSDsKKwkJZWxzZSBpZiAoIXN0cmNtcChwYXRjaF9tb2RlLCAiLS1wYXRjaD1yZXNldCIpKQorCQkJbW9kZSA9IEFERF9QX1JFU0VUOworCQllbHNlIGlmICghc3RyY21wKHBhdGNoX21vZGUsICItLXBhdGNoPWNoZWNrb3V0IikpCisJCQltb2RlID0gQUREX1BfQ0hFQ0tPVVQ7CisJCWVsc2UgaWYgKCFzdHJjbXAocGF0Y2hfbW9kZSwgIi0tcGF0Y2g9d29ya3RyZWUiKSkKKwkJCW1vZGUgPSBBRERfUF9XT1JLVFJFRTsKKwkJZWxzZQorCQkJZGllKCInJXMnIG5vdCBzdXBwb3J0ZWQiLCBwYXRjaF9tb2RlKTsKKworCQlyZXR1cm4gISFydW5fYWRkX3AodGhlX3JlcG9zaXRvcnksIG1vZGUsIHJldmlzaW9uLCBwYXRoc3BlYyk7CisJfQorCisJYXJndl9hcnJheV9wdXNoKCZhcmd2LCAiYWRkLS1pbnRlcmFjdGl2ZSIpOworCWlmIChwYXRjaF9tb2RlKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3YsIHBhdGNoX21vZGUpOworCWlmIChyZXZpc2lvbikKKwkJYXJndl9hcnJheV9wdXNoKCZhcmd2LCByZXZpc2lvbik7CisJYXJndl9hcnJheV9wdXNoKCZhcmd2LCAiLS0iKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGF0aHNwZWMtPm5yOyBpKyspCisJCS8qIHBhc3Mgb3JpZ2luYWwgcGF0aHNwZWMsIHRvIGJlIHJlLXBhcnNlZCAqLworCQlhcmd2X2FycmF5X3B1c2goJmFyZ3YsIHBhdGhzcGVjLT5pdGVtc1tpXS5vcmlnaW5hbCk7CisKKwlzdGF0dXMgPSBydW5fY29tbWFuZF92X29wdChhcmd2LmFyZ3YsIFJVTl9HSVRfQ01EKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmd2KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgaW50ZXJhY3RpdmVfYWRkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LCBpbnQgcGF0Y2gpCit7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCisJcGFyc2VfcGF0aHNwZWMoJnBhdGhzcGVjLCAwLAorCQkgICAgICAgUEFUSFNQRUNfUFJFRkVSX0ZVTEwgfAorCQkgICAgICAgUEFUSFNQRUNfU1lNTElOS19MRUFESU5HX1BBVEggfAorCQkgICAgICAgUEFUSFNQRUNfUFJFRklYX09SSUdJTiwKKwkJICAgICAgIHByZWZpeCwgYXJndik7CisKKwlyZXR1cm4gcnVuX2FkZF9pbnRlcmFjdGl2ZShOVUxMLAorCQkJCSAgIHBhdGNoID8gIi0tcGF0Y2giIDogTlVMTCwKKwkJCQkgICAmcGF0aHNwZWMpOworfQorCitzdGF0aWMgaW50IGVkaXRfcGF0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY2hhciAqZmlsZSA9IGdpdF9wYXRoZHVwKCJBRERfRURJVC5wYXRjaCIpOworCWNvbnN0IGNoYXIgKmFwcGx5X2FyZ3ZbXSA9IHsgImFwcGx5IiwgIi0tcmVjb3VudCIsICItLWNhY2hlZCIsCisJCU5VTEwsIE5VTEwgfTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCWludCBvdXQ7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlhcHBseV9hcmd2WzNdID0gZmlsZTsKKworCWdpdF9jb25maWcoZ2l0X2RpZmZfYmFzaWNfY29uZmlnLCBOVUxMKTsgLyogbm8gImRpZmYiIFVJIG9wdGlvbnMgKi8KKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoXygiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IikpOworCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldiwgcHJlZml4KTsKKwlyZXYuZGlmZm9wdC5jb250ZXh0ID0gNzsKKworCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldiwgTlVMTCk7CisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOworCXJldi5kaWZmb3B0LnVzZV9jb2xvciA9IDA7CisJcmV2LmRpZmZvcHQuZmxhZ3MuaWdub3JlX2RpcnR5X3N1Ym1vZHVsZXMgPSAxOworCW91dCA9IG9wZW4oZmlsZSwgT19DUkVBVCB8IE9fV1JPTkxZIHwgT19UUlVOQywgMDY2Nik7CisJaWYgKG91dCA8IDApCisJCWRpZShfKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIpLCBmaWxlKTsKKwlyZXYuZGlmZm9wdC5maWxlID0geGZkb3BlbihvdXQsICJ3Iik7CisJcmV2LmRpZmZvcHQuY2xvc2VfZmlsZSA9IDE7CisJaWYgKHJ1bl9kaWZmX2ZpbGVzKCZyZXYsIDApKQorCQlkaWUoXygiQ291bGQgbm90IHdyaXRlIHBhdGNoIikpOworCisJaWYgKGxhdW5jaF9lZGl0b3IoZmlsZSwgTlVMTCwgTlVMTCkpCisJCWRpZShfKCJlZGl0aW5nIHBhdGNoIGZhaWxlZCIpKTsKKworCWlmIChzdGF0KGZpbGUsICZzdCkpCisJCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgc3RhdCAnJXMnIiksIGZpbGUpOworCWlmICghc3Quc3Rfc2l6ZSkKKwkJZGllKF8oIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIpKTsKKworCWNoaWxkLmdpdF9jbWQgPSAxOworCWNoaWxkLmFyZ3YgPSBhcHBseV9hcmd2OworCWlmIChydW5fY29tbWFuZCgmY2hpbGQpKQorCQlkaWUoXygiQ291bGQgbm90IGFwcGx5ICclcyciKSwgZmlsZSk7CisKKwl1bmxpbmsoZmlsZSk7CisJZnJlZShmaWxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgaWdub3JlX2Vycm9yW10gPQorTl8oIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIpOworCitzdGF0aWMgaW50IHZlcmJvc2UsIHNob3dfb25seSwgaWdub3JlZF90b28sIHJlZnJlc2hfb25seTsKK3N0YXRpYyBpbnQgaWdub3JlX2FkZF9lcnJvcnMsIGludGVudF90b19hZGQsIGlnbm9yZV9taXNzaW5nOworc3RhdGljIGludCB3YXJuX29uX2VtYmVkZGVkX3JlcG8gPSAxOworCisjZGVmaW5lIEFERFJFTU9WRV9ERUZBVUxUIDEKK3N0YXRpYyBpbnQgYWRkcmVtb3ZlID0gQUREUkVNT1ZFX0RFRkFVTFQ7CitzdGF0aWMgaW50IGFkZHJlbW92ZV9leHBsaWNpdCA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLworCitzdGF0aWMgY2hhciAqY2htb2RfYXJnOworCitzdGF0aWMgaW50IGlnbm9yZV9yZW1vdmFsX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJLyogaWYgd2UgYXJlIHRvbGQgdG8gaWdub3JlLCB3ZSBhcmUgbm90IGFkZGluZyByZW1vdmFscyAqLworCSooaW50ICopb3B0LT52YWx1ZSA9ICF1bnNldCA/IDAgOiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2FkZF9vcHRpb25zW10gPSB7CisJT1BUX19EUllfUlVOKCZzaG93X29ubHksIE5fKCJkcnkgcnVuIikpLAorCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oImJlIHZlcmJvc2UiKSksCisJT1BUX0dST1VQKCIiKSwKKwlPUFRfQk9PTCgnaScsICJpbnRlcmFjdGl2ZSIsICZhZGRfaW50ZXJhY3RpdmUsIE5fKCJpbnRlcmFjdGl2ZSBwaWNraW5nIikpLAorCU9QVF9CT09MKCdwJywgInBhdGNoIiwgJnBhdGNoX2ludGVyYWN0aXZlLCBOXygic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiKSksCisJT1BUX0JPT0woJ2UnLCAiZWRpdCIsICZlZGl0X2ludGVyYWN0aXZlLCBOXygiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IikpLAorCU9QVF9fRk9SQ0UoJmlnbm9yZWRfdG9vLCBOXygiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIiksIDApLAorCU9QVF9CT09MKCd1JywgInVwZGF0ZSIsICZ0YWtlX3dvcmt0cmVlX2NoYW5nZXMsIE5fKCJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIpKSwKKwlPUFRfQk9PTCgwLCAicmVub3JtYWxpemUiLCAmYWRkX3Jlbm9ybWFsaXplLCBOXygicmVub3JtYWxpemUgRU9MIG9mIHRyYWNrZWQgZmlsZXMgKGltcGxpZXMgLXUpIikpLAorCU9QVF9CT09MKCdOJywgImludGVudC10by1hZGQiLCAmaW50ZW50X3RvX2FkZCwgTl8oInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIpKSwKKwlPUFRfQk9PTCgnQScsICJhbGwiLCAmYWRkcmVtb3ZlX2V4cGxpY2l0LCBOXygiYWRkIGNoYW5nZXMgZnJvbSBhbGwgdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIikpLAorCU9QVF9DQUxMQkFDS19GKDAsICJpZ25vcmUtcmVtb3ZhbCIsICZhZGRyZW1vdmVfZXhwbGljaXQsCisJICBOVUxMIC8qIHRha2VzIG5vIGFyZ3VtZW50cyAqLywKKwkgIE5fKCJpZ25vcmUgcGF0aHMgcmVtb3ZlZCBpbiB0aGUgd29ya2luZyB0cmVlIChzYW1lIGFzIC0tbm8tYWxsKSIpLAorCSAgUEFSU0VfT1BUX05PQVJHLCBpZ25vcmVfcmVtb3ZhbF9jYiksCisJT1BUX0JPT0woIDAgLCAicmVmcmVzaCIsICZyZWZyZXNoX29ubHksIE5fKCJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiKSksCisJT1BUX0JPT0woIDAgLCAiaWdub3JlLWVycm9ycyIsICZpZ25vcmVfYWRkX2Vycm9ycywgTl8oImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiKSksCisJT1BUX0JPT0woIDAgLCAiaWdub3JlLW1pc3NpbmciLCAmaWdub3JlX21pc3NpbmcsIE5fKCJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iKSksCisJT1BUX1NUUklORygwLCAiY2htb2QiLCAmY2htb2RfYXJnLCAiKCt8LSl4IiwKKwkJICAgTl8oIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIikpLAorCU9QVF9ISURERU5fQk9PTCgwLCAid2Fybi1lbWJlZGRlZC1yZXBvIiwgJndhcm5fb25fZW1iZWRkZWRfcmVwbywKKwkJCU5fKCJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiKSksCisJT1BUX0hJRERFTl9CT09MKDAsICJsZWdhY3ktc3Rhc2gtcCIsICZsZWdhY3lfc3Rhc2hfcCwKKwkJCU5fKCJiYWNrZW5kIGZvciBgZ2l0IHN0YXNoIC1wYCIpKSwKKwlPUFRfUEFUSFNQRUNfRlJPTV9GSUxFKCZwYXRoc3BlY19mcm9tX2ZpbGUpLAorCU9QVF9QQVRIU1BFQ19GSUxFX05VTCgmcGF0aHNwZWNfZmlsZV9udWwpLAorCU9QVF9FTkQoKSwKK307CisKK3N0YXRpYyBpbnQgYWRkX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJhZGQuaWdub3JlZXJyb3JzIikgfHwKKwkgICAgIXN0cmNtcCh2YXIsICJhZGQuaWdub3JlLWVycm9ycyIpKSB7CisJCWlnbm9yZV9hZGRfZXJyb3JzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgZW1iZWRkZWRfYWR2aWNlW10gPSBOXygKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiCWdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisiSWYgeW91IGFkZGVkIHRoaXMgcGF0aCBieSBtaXN0YWtlLCB5b3UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZVxuIgorImluZGV4IHdpdGg6XG4iCisiXG4iCisiCWdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIlNlZSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyk7CisKK3N0YXRpYyB2b2lkIGNoZWNrX2VtYmVkZGVkX3JlcG8oY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWUgPSBTVFJCVUZfSU5JVDsKKworCWlmICghd2Fybl9vbl9lbWJlZGRlZF9yZXBvKQorCQlyZXR1cm47CisJaWYgKCFlbmRzX3dpdGgocGF0aCwgIi8iKSkKKwkJcmV0dXJuOworCisJLyogRHJvcCB0cmFpbGluZyBzbGFzaCBmb3IgYWVzdGhldGljcyAqLworCXN0cmJ1Zl9hZGRzdHIoJm5hbWUsIHBhdGgpOworCXN0cmJ1Zl9zdHJpcF9zdWZmaXgoJm5hbWUsICIvIik7CisKKwl3YXJuaW5nKF8oImFkZGluZyBlbWJlZGRlZCBnaXQgcmVwb3NpdG9yeTogJXMiKSwgbmFtZS5idWYpOworCWlmIChhZHZpY2VfYWRkX2VtYmVkZGVkX3JlcG8pIHsKKwkJYWR2aXNlKGVtYmVkZGVkX2FkdmljZSwgbmFtZS5idWYsIG5hbWUuYnVmKTsKKwkJLyogdGhlcmUgbWF5IGJlIG11bHRpcGxlIGVudHJpZXM7IGFkdmlzZSBvbmx5IG9uY2UgKi8KKwkJYWR2aWNlX2FkZF9lbWJlZGRlZF9yZXBvID0gMDsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2ZpbGVzKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGludCBmbGFncykKK3sKKwlpbnQgaSwgZXhpdF9zdGF0dXMgPSAwOworCisJaWYgKGRpci0+aWdub3JlZF9ucikgeworCQlmcHJpbnRmKHN0ZGVyciwgXyhpZ25vcmVfZXJyb3IpKTsKKwkJZm9yIChpID0gMDsgaSA8IGRpci0+aWdub3JlZF9ucjsgaSsrKQorCQkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgZGlyLT5pZ25vcmVkW2ldLT5uYW1lKTsKKwkJaWYgKGFkdmljZV9hZGRfaWdub3JlZF9maWxlKQorCQkJYWR2aXNlKF8oIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCisJCQkJIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisJCQkJIlwiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkSWdub3JlZEZpbGUgZmFsc2VcIiIpKTsKKwkJZXhpdF9zdGF0dXMgPSAxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yOyBpKyspIHsKKwkJaWYgKGFkZF9maWxlX3RvX2luZGV4KCZ0aGVfaW5kZXgsIGRpci0+ZW50cmllc1tpXS0+bmFtZSwgZmxhZ3MpKSB7CisJCQlpZiAoIWlnbm9yZV9hZGRfZXJyb3JzKQorCQkJCWRpZShfKCJhZGRpbmcgZmlsZXMgZmFpbGVkIikpOworCQkJZXhpdF9zdGF0dXMgPSAxOworCQl9IGVsc2UgeworCQkJY2hlY2tfZW1iZWRkZWRfcmVwbyhkaXItPmVudHJpZXNbaV0tPm5hbWUpOworCQl9CisJfQorCXJldHVybiBleGl0X3N0YXR1czsKK30KKworaW50IGNtZF9hZGQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGV4aXRfc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOworCWludCBmbGFnczsKKwlpbnQgYWRkX25ld19maWxlczsKKwlpbnQgcmVxdWlyZV9wYXRoc3BlYzsKKwljaGFyICpzZWVuID0gTlVMTDsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKworCWdpdF9jb25maWcoYWRkX2NvbmZpZywgTlVMTCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fYWRkX29wdGlvbnMsCisJCQkgIGJ1aWx0aW5fYWRkX3VzYWdlLCBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisJaWYgKHBhdGNoX2ludGVyYWN0aXZlKQorCQlhZGRfaW50ZXJhY3RpdmUgPSAxOworCWlmIChhZGRfaW50ZXJhY3RpdmUpIHsKKwkJaWYgKHBhdGhzcGVjX2Zyb21fZmlsZSkKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giKSk7CisJCWV4aXQoaW50ZXJhY3RpdmVfYWRkKGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4LCBwYXRjaF9pbnRlcmFjdGl2ZSkpOworCX0KKwlpZiAobGVnYWN5X3N0YXNoX3ApIHsKKwkJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCisJCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywgMCwKKwkJCVBBVEhTUEVDX1BSRUZFUl9GVUxMIHwKKwkJCVBBVEhTUEVDX1NZTUxJTktfTEVBRElOR19QQVRIIHwKKwkJCVBBVEhTUEVDX1BSRUZJWF9PUklHSU4sCisJCQlwcmVmaXgsIGFyZ3YpOworCisJCXJldHVybiBydW5fYWRkX2ludGVyYWN0aXZlKE5VTEwsICItLXBhdGNoPXN0YXNoIiwgJnBhdGhzcGVjKTsKKwl9CisKKwlpZiAoZWRpdF9pbnRlcmFjdGl2ZSkgeworCQlpZiAocGF0aHNwZWNfZnJvbV9maWxlKQorCQkJZGllKF8oIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZWRpdCIpKTsKKwkJcmV0dXJuKGVkaXRfcGF0Y2goYXJnYywgYXJndiwgcHJlZml4KSk7CisJfQorCWFyZ2MtLTsKKwlhcmd2Kys7CisKKwlpZiAoMCA8PSBhZGRyZW1vdmVfZXhwbGljaXQpCisJCWFkZHJlbW92ZSA9IGFkZHJlbW92ZV9leHBsaWNpdDsKKwllbHNlIGlmICh0YWtlX3dvcmt0cmVlX2NoYW5nZXMgJiYgQUREUkVNT1ZFX0RFRkFVTFQpCisJCWFkZHJlbW92ZSA9IDA7IC8qICItdSIgd2FzIGdpdmVuIGJ1dCBub3QgIi1BIiAqLworCisJaWYgKGFkZHJlbW92ZSAmJiB0YWtlX3dvcmt0cmVlX2NoYW5nZXMpCisJCWRpZShfKCItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIpKTsKKworCWlmICghc2hvd19vbmx5ICYmIGlnbm9yZV9taXNzaW5nKQorCQlkaWUoXygiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIpKTsKKworCWlmIChjaG1vZF9hcmcgJiYgKChjaG1vZF9hcmdbMF0gIT0gJy0nICYmIGNobW9kX2FyZ1swXSAhPSAnKycpIHx8CisJCQkgIGNobW9kX2FyZ1sxXSAhPSAneCcgfHwgY2htb2RfYXJnWzJdKSkKKwkJZGllKF8oIi0tY2htb2QgcGFyYW0gJyVzJyBtdXN0IGJlIGVpdGhlciAteCBvciAreCIpLCBjaG1vZF9hcmcpOworCisJYWRkX25ld19maWxlcyA9ICF0YWtlX3dvcmt0cmVlX2NoYW5nZXMgJiYgIXJlZnJlc2hfb25seSAmJiAhYWRkX3Jlbm9ybWFsaXplOworCXJlcXVpcmVfcGF0aHNwZWMgPSAhKHRha2Vfd29ya3RyZWVfY2hhbmdlcyB8fCAoMCA8IGFkZHJlbW92ZV9leHBsaWNpdCkpOworCisJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgTE9DS19ESUVfT05fRVJST1IpOworCisJLyoKKwkgKiBDaGVjayB0aGUgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiIGJsb2NrCisJICogYmVsb3cgYmVmb3JlIGVuYWJsaW5nIG5ldyBtYWdpYy4KKwkgKi8KKwlwYXJzZV9wYXRoc3BlYygmcGF0aHNwZWMsIFBBVEhTUEVDX0FUVFIsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCB8CisJCSAgICAgICBQQVRIU1BFQ19TWU1MSU5LX0xFQURJTkdfUEFUSCwKKwkJICAgICAgIHByZWZpeCwgYXJndik7CisKKwlpZiAocGF0aHNwZWNfZnJvbV9maWxlKSB7CisJCWlmIChwYXRoc3BlYy5ucikKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiKSk7CisKKwkJcGFyc2VfcGF0aHNwZWNfZmlsZSgmcGF0aHNwZWMsIFBBVEhTUEVDX0FUVFIsCisJCQkJICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMIHwKKwkJCQkgICAgUEFUSFNQRUNfU1lNTElOS19MRUFESU5HX1BBVEgsCisJCQkJICAgIHByZWZpeCwgcGF0aHNwZWNfZnJvbV9maWxlLCBwYXRoc3BlY19maWxlX251bCk7CisJfSBlbHNlIGlmIChwYXRoc3BlY19maWxlX251bCkgeworCQlkaWUoXygiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIpKTsKKwl9CisKKwlpZiAocmVxdWlyZV9wYXRoc3BlYyAmJiBwYXRoc3BlYy5uciA9PSAwKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIpKTsKKwkJaWYgKGFkdmljZV9hZGRfZW1wdHlfcGF0aHNwZWMpCisJCQlhZHZpc2UoIF8oIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorCQkJCSJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorCQkJCSJcImdpdCBjb25maWcgYWR2aWNlLmFkZEVtcHR5UGF0aHNwZWMgZmFsc2VcIiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCF0YWtlX3dvcmt0cmVlX2NoYW5nZXMgJiYgYWRkcmVtb3ZlX2V4cGxpY2l0IDwgMCAmJiBwYXRoc3BlYy5ucikKKwkJLyogVHVybiAiZ2l0IGFkZCBwYXRoc3BlYy4uLiIgdG8gImdpdCBhZGQgLUEgcGF0aHNwZWMuLi4iICovCisJCWFkZHJlbW92ZSA9IDE7CisKKwlmbGFncyA9ICgodmVyYm9zZSA/IEFERF9DQUNIRV9WRVJCT1NFIDogMCkgfAorCQkgKHNob3dfb25seSA/IEFERF9DQUNIRV9QUkVURU5EIDogMCkgfAorCQkgKGludGVudF90b19hZGQgPyBBRERfQ0FDSEVfSU5URU5UIDogMCkgfAorCQkgKGlnbm9yZV9hZGRfZXJyb3JzID8gQUREX0NBQ0hFX0lHTk9SRV9FUlJPUlMgOiAwKSB8CisJCSAoIShhZGRyZW1vdmUgfHwgdGFrZV93b3JrdHJlZV9jaGFuZ2VzKQorCQkgID8gQUREX0NBQ0hFX0lHTk9SRV9SRU1PVkFMIDogMCkpOworCisJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZCgmcGF0aHNwZWMpIDwgMCkKKwkJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKworCWRpZV9pbl91bnBvcHVsYXRlZF9zdWJtb2R1bGUoJnRoZV9pbmRleCwgcHJlZml4KTsKKwlkaWVfcGF0aF9pbnNpZGVfc3VibW9kdWxlKCZ0aGVfaW5kZXgsICZwYXRoc3BlYyk7CisKKwlpZiAoYWRkX25ld19maWxlcykgeworCQlpbnQgYmFzZWxlbjsKKworCQkvKiBTZXQgdXAgdGhlIGRlZmF1bHQgZ2l0IHBvcmNlbGFpbiBleGNsdWRlcyAqLworCQltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCQlpZiAoIWlnbm9yZWRfdG9vKSB7CisJCQlkaXIuZmxhZ3MgfD0gRElSX0NPTExFQ1RfSUdOT1JFRDsKKwkJCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKCZkaXIpOworCQl9CisKKwkJLyogVGhpcyBwaWNrcyB1cCB0aGUgcGF0aHMgdGhhdCBhcmUgbm90IHRyYWNrZWQgKi8KKwkJYmFzZWxlbiA9IGZpbGxfZGlyZWN0b3J5KCZkaXIsICZ0aGVfaW5kZXgsICZwYXRoc3BlYyk7CisJCWlmIChwYXRoc3BlYy5ucikKKwkJCXNlZW4gPSBwcnVuZV9kaXJlY3RvcnkoJmRpciwgJnBhdGhzcGVjLCBiYXNlbGVuKTsKKwl9CisKKwlpZiAocmVmcmVzaF9vbmx5KSB7CisJCXJlZnJlc2godmVyYm9zZSwgJnBhdGhzcGVjKTsKKwkJZ290byBmaW5pc2g7CisJfQorCisJaWYgKHBhdGhzcGVjLm5yKSB7CisJCWludCBpOworCisJCWlmICghc2VlbikKKwkJCXNlZW4gPSBmaW5kX3BhdGhzcGVjc19tYXRjaGluZ19hZ2FpbnN0X2luZGV4KCZwYXRoc3BlYywgJnRoZV9pbmRleCk7CisKKwkJLyoKKwkJICogZmlsZV9leGlzdHMoKSBhc3N1bWVzIGV4YWN0IG1hdGNoCisJCSAqLworCQlHVUFSRF9QQVRIU1BFQygmcGF0aHNwZWMsCisJCQkgICAgICAgUEFUSFNQRUNfRlJPTVRPUCB8CisJCQkgICAgICAgUEFUSFNQRUNfTElURVJBTCB8CisJCQkgICAgICAgUEFUSFNQRUNfR0xPQiB8CisJCQkgICAgICAgUEFUSFNQRUNfSUNBU0UgfAorCQkJICAgICAgIFBBVEhTUEVDX0VYQ0xVREUpOworCisJCWZvciAoaSA9IDA7IGkgPCBwYXRoc3BlYy5ucjsgaSsrKSB7CisJCQljb25zdCBjaGFyICpwYXRoID0gcGF0aHNwZWMuaXRlbXNbaV0ubWF0Y2g7CisJCQlpZiAocGF0aHNwZWMuaXRlbXNbaV0ubWFnaWMgJiBQQVRIU1BFQ19FWENMVURFKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFzZWVuW2ldICYmIHBhdGhbMF0gJiYKKwkJCSAgICAoKHBhdGhzcGVjLml0ZW1zW2ldLm1hZ2ljICYKKwkJCSAgICAgIChQQVRIU1BFQ19HTE9CIHwgUEFUSFNQRUNfSUNBU0UpKSB8fAorCQkJICAgICAhZmlsZV9leGlzdHMocGF0aCkpKSB7CisJCQkJaWYgKGlnbm9yZV9taXNzaW5nKSB7CisJCQkJCWludCBkdHlwZSA9IERUX1VOS05PV047CisJCQkJCWlmIChpc19leGNsdWRlZCgmZGlyLCAmdGhlX2luZGV4LCBwYXRoLCAmZHR5cGUpKQorCQkJCQkJZGlyX2FkZF9pZ25vcmVkKCZkaXIsICZ0aGVfaW5kZXgsCisJCQkJCQkJCXBhdGgsIHBhdGhzcGVjLml0ZW1zW2ldLmxlbik7CisJCQkJfSBlbHNlCisJCQkJCWRpZShfKCJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIiksCisJCQkJCSAgICBwYXRoc3BlYy5pdGVtc1tpXS5vcmlnaW5hbCk7CisJCQl9CisJCX0KKwkJZnJlZShzZWVuKTsKKwl9CisKKwlwbHVnX2J1bGtfY2hlY2tpbigpOworCisJaWYgKGFkZF9yZW5vcm1hbGl6ZSkKKwkJZXhpdF9zdGF0dXMgfD0gcmVub3JtYWxpemVfdHJhY2tlZF9maWxlcygmcGF0aHNwZWMsIGZsYWdzKTsKKwllbHNlCisJCWV4aXRfc3RhdHVzIHw9IGFkZF9maWxlc190b19jYWNoZShwcmVmaXgsICZwYXRoc3BlYywgZmxhZ3MpOworCisJaWYgKGFkZF9uZXdfZmlsZXMpCisJCWV4aXRfc3RhdHVzIHw9IGFkZF9maWxlcygmZGlyLCBmbGFncyk7CisKKwlpZiAoY2htb2RfYXJnICYmIHBhdGhzcGVjLm5yKQorCQljaG1vZF9wYXRoc3BlYygmcGF0aHNwZWMsIGNobW9kX2FyZ1swXSk7CisJdW5wbHVnX2J1bGtfY2hlY2tpbigpOworCitmaW5pc2g6CisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLAorCQkJICAgICAgIENPTU1JVF9MT0NLIHwgU0tJUF9JRl9VTkNIQU5HRUQpKQorCQlkaWUoXygiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCisJVU5MRUFLKHBhdGhzcGVjKTsKKwlVTkxFQUsoZGlyKTsKKwlyZXR1cm4gZXhpdF9zdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2FtLmMgYi9idWlsdGluL2FtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllNTBkZQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vYW0uYwpAQCAtMCwwICsxLDI0MTcgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgYW0iCisgKgorICogQmFzZWQgb24gZ2l0LWFtLnNoIGJ5IEp1bmlvIEMgSGFtYW5vLgorICovCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJtZXJnZS1yZWN1cnNpdmUuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgIm5vdGVzLXV0aWxzLmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisjaW5jbHVkZSAicHJvbXB0LmgiCisjaW5jbHVkZSAibWFpbGluZm8uaCIKKyNpbmNsdWRlICJhcHBseS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisKKy8qKgorICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBmaXJzdCBsaW5lIG9mIG1zZy4KKyAqLworc3RhdGljIGludCBsaW5lbGVuKGNvbnN0IGNoYXIgKm1zZykKK3sKKwlyZXR1cm4gc3RyY2hybnVsKG1zZywgJ1xuJykgLSBtc2c7Cit9CisKKy8qKgorICogUmV0dXJucyB0cnVlIGlmIGBzdHJgIGNvbnNpc3RzIG9mIG9ubHkgd2hpdGVzcGFjZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHN0cl9pc3NwYWNlKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlmb3IgKDsgKnN0cjsgc3RyKyspCisJCWlmICghaXNzcGFjZSgqc3RyKSkKKwkJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK2VudW0gcGF0Y2hfZm9ybWF0IHsKKwlQQVRDSF9GT1JNQVRfVU5LTk9XTiA9IDAsCisJUEFUQ0hfRk9STUFUX01CT1gsCisJUEFUQ0hfRk9STUFUX1NUR0lULAorCVBBVENIX0ZPUk1BVF9TVEdJVF9TRVJJRVMsCisJUEFUQ0hfRk9STUFUX0hHLAorCVBBVENIX0ZPUk1BVF9NQk9YUkQKK307CisKK2VudW0ga2VlcF90eXBlIHsKKwlLRUVQX0ZBTFNFID0gMCwKKwlLRUVQX1RSVUUsICAgICAgLyogcGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbyAqLworCUtFRVBfTk9OX1BBVENIICAvKiBwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvICovCit9OworCitlbnVtIHNjaXNzb3JzX3R5cGUgeworCVNDSVNTT1JTX1VOU0VUID0gLTEsCisJU0NJU1NPUlNfRkFMU0UgPSAwLCAgLyogcGFzcyAtLW5vLXNjaXNzb3JzIHRvIGdpdC1tYWlsaW5mbyAqLworCVNDSVNTT1JTX1RSVUUgICAgICAgIC8qIHBhc3MgLS1zY2lzc29ycyB0byBnaXQtbWFpbGluZm8gKi8KK307CisKK2VudW0gc2lnbm9mZl90eXBlIHsKKwlTSUdOT0ZGX0ZBTFNFID0gMCwKKwlTSUdOT0ZGX1RSVUUgPSAxLAorCVNJR05PRkZfRVhQTElDSVQgLyogLS1zaWdub2ZmIHdhcyBzZXQgb24gdGhlIGNvbW1hbmQtbGluZSAqLworfTsKKworZW51bSBzaG93X3BhdGNoX3R5cGUgeworCVNIT1dfUEFUQ0hfUkFXID0gMCwKKwlTSE9XX1BBVENIX0RJRkYgPSAxLAorfTsKKworc3RydWN0IGFtX3N0YXRlIHsKKwkvKiBzdGF0ZSBkaXJlY3RvcnkgcGF0aCAqLworCWNoYXIgKmRpcjsKKworCS8qIGN1cnJlbnQgYW5kIGxhc3QgcGF0Y2ggbnVtYmVycywgMS1pbmRleGVkICovCisJaW50IGN1cjsKKwlpbnQgbGFzdDsKKworCS8qIGNvbW1pdCBtZXRhZGF0YSBhbmQgbWVzc2FnZSAqLworCWNoYXIgKmF1dGhvcl9uYW1lOworCWNoYXIgKmF1dGhvcl9lbWFpbDsKKwljaGFyICphdXRob3JfZGF0ZTsKKwljaGFyICptc2c7CisJc2l6ZV90IG1zZ19sZW47CisKKwkvKiB3aGVuIC0tcmViYXNpbmcsIHJlY29yZHMgdGhlIG9yaWdpbmFsIGNvbW1pdCB0aGUgcGF0Y2ggY2FtZSBmcm9tICovCisJc3RydWN0IG9iamVjdF9pZCBvcmlnX2NvbW1pdDsKKworCS8qIG51bWJlciBvZiBkaWdpdHMgaW4gcGF0Y2ggZmlsZW5hbWUgKi8KKwlpbnQgcHJlYzsKKworCS8qIHZhcmlvdXMgb3BlcmF0aW5nIG1vZGVzIGFuZCBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLworCWludCBpbnRlcmFjdGl2ZTsKKwlpbnQgdGhyZWV3YXk7CisJaW50IHF1aWV0OworCWludCBzaWdub2ZmOyAvKiBlbnVtIHNpZ25vZmZfdHlwZSAqLworCWludCB1dGY4OworCWludCBrZWVwOyAvKiBlbnVtIGtlZXBfdHlwZSAqLworCWludCBtZXNzYWdlX2lkOworCWludCBzY2lzc29yczsgLyogZW51bSBzY2lzc29yc190eXBlICovCisJc3RydWN0IGFyZ3ZfYXJyYXkgZ2l0X2FwcGx5X29wdHM7CisJY29uc3QgY2hhciAqcmVzb2x2ZW1zZzsKKwlpbnQgY29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGU7CisJaW50IGlnbm9yZV9kYXRlOworCWludCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTsKKwljb25zdCBjaGFyICpzaWduX2NvbW1pdDsKKwlpbnQgcmViYXNpbmc7Cit9OworCisvKioKKyAqIEluaXRpYWxpemVzIGFtX3N0YXRlIHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzLgorICovCitzdGF0aWMgdm9pZCBhbV9zdGF0ZV9pbml0KHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJaW50IGdwZ3NpZ247CisKKwltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKworCXN0YXRlLT5kaXIgPSBnaXRfcGF0aGR1cCgicmViYXNlLWFwcGx5Iik7CisKKwlzdGF0ZS0+cHJlYyA9IDQ7CisKKwlnaXRfY29uZmlnX2dldF9ib29sKCJhbS50aHJlZXdheSIsICZzdGF0ZS0+dGhyZWV3YXkpOworCisJc3RhdGUtPnV0ZjggPSAxOworCisJZ2l0X2NvbmZpZ19nZXRfYm9vbCgiYW0ubWVzc2FnZWlkIiwgJnN0YXRlLT5tZXNzYWdlX2lkKTsKKworCXN0YXRlLT5zY2lzc29ycyA9IFNDSVNTT1JTX1VOU0VUOworCisJYXJndl9hcnJheV9pbml0KCZzdGF0ZS0+Z2l0X2FwcGx5X29wdHMpOworCisJaWYgKCFnaXRfY29uZmlnX2dldF9ib29sKCJjb21taXQuZ3Bnc2lnbiIsICZncGdzaWduKSkKKwkJc3RhdGUtPnNpZ25fY29tbWl0ID0gZ3Bnc2lnbiA/ICIiIDogTlVMTDsKK30KKworLyoqCisgKiBSZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGFuIGFtX3N0YXRlLgorICovCitzdGF0aWMgdm9pZCBhbV9zdGF0ZV9yZWxlYXNlKHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJZnJlZShzdGF0ZS0+ZGlyKTsKKwlmcmVlKHN0YXRlLT5hdXRob3JfbmFtZSk7CisJZnJlZShzdGF0ZS0+YXV0aG9yX2VtYWlsKTsKKwlmcmVlKHN0YXRlLT5hdXRob3JfZGF0ZSk7CisJZnJlZShzdGF0ZS0+bXNnKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZzdGF0ZS0+Z2l0X2FwcGx5X29wdHMpOworfQorCisvKioKKyAqIFJldHVybnMgcGF0aCByZWxhdGl2ZSB0byB0aGUgYW1fc3RhdGUgZGlyZWN0b3J5LgorICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmFtX3BhdGgoY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gbWtwYXRoKCIlcy8lcyIsIHN0YXRlLT5kaXIsIHBhdGgpOworfQorCisvKioKKyAqIEZvciBjb252ZW5pZW5jZSB0byBjYWxsIHdyaXRlX2ZpbGUoKQorICovCitzdGF0aWMgdm9pZCB3cml0ZV9zdGF0ZV90ZXh0KGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwl3cml0ZV9maWxlKGFtX3BhdGgoc3RhdGUsIG5hbWUpLCAiJXMiLCBzdHJpbmcpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9zdGF0ZV9jb3VudChjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKQoreworCXdyaXRlX2ZpbGUoYW1fcGF0aChzdGF0ZSwgbmFtZSksICIlZCIsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfc3RhdGVfYm9vbChjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLAorCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpCit7CisJd3JpdGVfc3RhdGVfdGV4dChzdGF0ZSwgbmFtZSwgdmFsdWUgPyAidCIgOiAiZiIpOworfQorCisvKioKKyAqIElmIHN0YXRlLT5xdWlldCBpcyBmYWxzZSwgY2FsbHMgZnByaW50ZihmcCwgZm10LCAuLi4pLCBhbmQgYXBwZW5kcyBhIG5ld2xpbmUKKyAqIGF0IHRoZSBlbmQuCisgKi8KK3N0YXRpYyB2b2lkIHNheShjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCWlmICghc3RhdGUtPnF1aWV0KSB7CisJCXZmcHJpbnRmKGZwLCBmbXQsIGFwKTsKKwkJcHV0YygnXG4nLCBmcCk7CisJfQorCXZhX2VuZChhcCk7Cit9CisKKy8qKgorICogUmV0dXJucyAxIGlmIHRoZXJlIGlzIGFuIGFtIHNlc3Npb24gaW4gcHJvZ3Jlc3MsIDAgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IGFtX2luX3Byb2dyZXNzKGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAobHN0YXQoc3RhdGUtPmRpciwgJnN0KSA8IDAgfHwgIVNfSVNESVIoc3Quc3RfbW9kZSkpCisJCXJldHVybiAwOworCWlmIChsc3RhdChhbV9wYXRoKHN0YXRlLCAibGFzdCIpLCAmc3QpIHx8ICFTX0lTUkVHKHN0LnN0X21vZGUpKQorCQlyZXR1cm4gMDsKKwlpZiAobHN0YXQoYW1fcGF0aChzdGF0ZSwgIm5leHQiKSwgJnN0KSB8fCAhU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogUmVhZHMgdGhlIGNvbnRlbnRzIG9mIGBmaWxlYCBpbiB0aGUgYHN0YXRlYCBkaXJlY3RvcnkgaW50byBgc2JgLiBSZXR1cm5zIHRoZQorICogbnVtYmVyIG9mIGJ5dGVzIHJlYWQgb24gc3VjY2VzcywgLTEgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QuIElmIGB0cmltYCBpcworICogc2V0LCB0cmFpbGluZyB3aGl0ZXNwYWNlIHdpbGwgYmUgcmVtb3ZlZC4KKyAqLworc3RhdGljIGludCByZWFkX3N0YXRlX2ZpbGUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsCisJCQljb25zdCBjaGFyICpmaWxlLCBpbnQgdHJpbSkKK3sKKwlzdHJidWZfcmVzZXQoc2IpOworCisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoc2IsIGFtX3BhdGgoc3RhdGUsIGZpbGUpLCAwKSA+PSAwKSB7CisJCWlmICh0cmltKQorCQkJc3RyYnVmX3RyaW0oc2IpOworCisJCXJldHVybiBzYi0+bGVuOworCX0KKworCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCXJldHVybiAtMTsKKworCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCAnJXMnIiksIGFtX3BhdGgoc3RhdGUsIGZpbGUpKTsKK30KKworLyoqCisgKiBSZWFkcyBhbmQgcGFyc2VzIHRoZSBzdGF0ZSBkaXJlY3RvcnkncyAiYXV0aG9yLXNjcmlwdCIgZmlsZSwgYW5kIHNldHMKKyAqIHN0YXRlLT5hdXRob3JfbmFtZSwgc3RhdGUtPmF1dGhvcl9lbWFpbCBhbmQgc3RhdGUtPmF1dGhvcl9kYXRlIGFjY29yZGluZ2x5LgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIGlmIHRoZSBmaWxlIGNvdWxkIG5vdCBiZSBwYXJzZWQuCisgKgorICogVGhlIGF1dGhvciBzY3JpcHQgaXMgb2YgdGhlIGZvcm1hdDoKKyAqCisgKglHSVRfQVVUSE9SX05BTUU9JyRhdXRob3JfbmFtZScKKyAqCUdJVF9BVVRIT1JfRU1BSUw9JyRhdXRob3JfZW1haWwnCisgKglHSVRfQVVUSE9SX0RBVEU9JyRhdXRob3JfZGF0ZScKKyAqCisgKiB3aGVyZSAkYXV0aG9yX25hbWUsICRhdXRob3JfZW1haWwgYW5kICRhdXRob3JfZGF0ZSBhcmUgcXVvdGVkLiBXZSBhcmUgc3RyaWN0CisgKiB3aXRoIG91ciBwYXJzaW5nLCBhcyB0aGUgZmlsZSB3YXMgbWVhbnQgdG8gYmUgZXZhbCdkIGluIHRoZSBvbGQgZ2l0LWFtLnNoCisgKiBzY3JpcHQsIGFuZCB0aHVzIGlmIHRoZSBmaWxlIGRpZmZlcnMgZnJvbSB3aGF0IHRoaXMgZnVuY3Rpb24gZXhwZWN0cywgaXQgaXMKKyAqIGJldHRlciB0byBiYWlsIG91dCB0aGFuIHRvIGRvIHNvbWV0aGluZyB0aGF0IHRoZSB1c2VyIGRvZXMgbm90IGV4cGVjdC4KKyAqLworc3RhdGljIGludCByZWFkX2FtX2F1dGhvcl9zY3JpcHQoc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGFtX3BhdGgoc3RhdGUsICJhdXRob3Itc2NyaXB0Iik7CisKKwlhc3NlcnQoIXN0YXRlLT5hdXRob3JfbmFtZSk7CisJYXNzZXJ0KCFzdGF0ZS0+YXV0aG9yX2VtYWlsKTsKKwlhc3NlcnQoIXN0YXRlLT5hdXRob3JfZGF0ZSk7CisKKwlyZXR1cm4gcmVhZF9hdXRob3Jfc2NyaXB0KGZpbGVuYW1lLCAmc3RhdGUtPmF1dGhvcl9uYW1lLAorCQkJCSAgJnN0YXRlLT5hdXRob3JfZW1haWwsICZzdGF0ZS0+YXV0aG9yX2RhdGUsIDEpOworfQorCisvKioKKyAqIFNhdmVzIHN0YXRlLT5hdXRob3JfbmFtZSwgc3RhdGUtPmF1dGhvcl9lbWFpbCBhbmQgc3RhdGUtPmF1dGhvcl9kYXRlIGluIHRoZQorICogc3RhdGUgZGlyZWN0b3J5J3MgImF1dGhvci1zY3JpcHQiIGZpbGUuCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX2F1dGhvcl9zY3JpcHQoY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkc3RyKCZzYiwgIkdJVF9BVVRIT1JfTkFNRT0iKTsKKwlzcV9xdW90ZV9idWYoJnNiLCBzdGF0ZS0+YXV0aG9yX25hbWUpOworCXN0cmJ1Zl9hZGRjaCgmc2IsICdcbicpOworCisJc3RyYnVmX2FkZHN0cigmc2IsICJHSVRfQVVUSE9SX0VNQUlMPSIpOworCXNxX3F1b3RlX2J1Zigmc2IsIHN0YXRlLT5hdXRob3JfZW1haWwpOworCXN0cmJ1Zl9hZGRjaCgmc2IsICdcbicpOworCisJc3RyYnVmX2FkZHN0cigmc2IsICJHSVRfQVVUSE9SX0RBVEU9Iik7CisJc3FfcXVvdGVfYnVmKCZzYiwgc3RhdGUtPmF1dGhvcl9kYXRlKTsKKwlzdHJidWZfYWRkY2goJnNiLCAnXG4nKTsKKworCXdyaXRlX3N0YXRlX3RleHQoc3RhdGUsICJhdXRob3Itc2NyaXB0Iiwgc2IuYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKKy8qKgorICogUmVhZHMgdGhlIGNvbW1pdCBtZXNzYWdlIGZyb20gdGhlIHN0YXRlIGRpcmVjdG9yeSdzICJmaW5hbC1jb21taXQiIGZpbGUsCisgKiBzZXR0aW5nIHN0YXRlLT5tc2cgdG8gaXRzIGNvbnRlbnRzIGFuZCBzdGF0ZS0+bXNnX2xlbiB0byB0aGUgbGVuZ3RoIG9mIGl0cworICogY29udGVudHMgaW4gYnl0ZXMuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LgorICovCitzdGF0aWMgaW50IHJlYWRfY29tbWl0X21zZyhzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWFzc2VydCghc3RhdGUtPm1zZyk7CisKKwlpZiAocmVhZF9zdGF0ZV9maWxlKCZzYiwgc3RhdGUsICJmaW5hbC1jb21taXQiLCAwKSA8IDApIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0YXRlLT5tc2cgPSBzdHJidWZfZGV0YWNoKCZzYiwgJnN0YXRlLT5tc2dfbGVuKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBTYXZlcyBzdGF0ZS0+bXNnIGluIHRoZSBzdGF0ZSBkaXJlY3RvcnkncyAiZmluYWwtY29tbWl0IiBmaWxlLgorICovCitzdGF0aWMgdm9pZCB3cml0ZV9jb21taXRfbXNnKGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBhbV9wYXRoKHN0YXRlLCAiZmluYWwtY29tbWl0Iik7CisJd3JpdGVfZmlsZV9idWYoZmlsZW5hbWUsIHN0YXRlLT5tc2csIHN0YXRlLT5tc2dfbGVuKTsKK30KKworLyoqCisgKiBMb2FkcyBzdGF0ZSBmcm9tIGRpc2suCisgKi8KK3N0YXRpYyB2b2lkIGFtX2xvYWQoc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAocmVhZF9zdGF0ZV9maWxlKCZzYiwgc3RhdGUsICJuZXh0IiwgMSkgPCAwKQorCQlCVUcoInN0YXRlIGZpbGUgJ25leHQnIGRvZXMgbm90IGV4aXN0Iik7CisJc3RhdGUtPmN1ciA9IHN0cnRvbChzYi5idWYsIE5VTEwsIDEwKTsKKworCWlmIChyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgImxhc3QiLCAxKSA8IDApCisJCUJVRygic3RhdGUgZmlsZSAnbGFzdCcgZG9lcyBub3QgZXhpc3QiKTsKKwlzdGF0ZS0+bGFzdCA9IHN0cnRvbChzYi5idWYsIE5VTEwsIDEwKTsKKworCWlmIChyZWFkX2FtX2F1dGhvcl9zY3JpcHQoc3RhdGUpIDwgMCkKKwkJZGllKF8oImNvdWxkIG5vdCBwYXJzZSBhdXRob3Igc2NyaXB0IikpOworCisJcmVhZF9jb21taXRfbXNnKHN0YXRlKTsKKworCWlmIChyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgIm9yaWdpbmFsLWNvbW1pdCIsIDEpIDwgMCkKKwkJb2lkY2xyKCZzdGF0ZS0+b3JpZ19jb21taXQpOworCWVsc2UgaWYgKGdldF9vaWRfaGV4KHNiLmJ1ZiwgJnN0YXRlLT5vcmlnX2NvbW1pdCkgPCAwKQorCQlkaWUoXygiY291bGQgbm90IHBhcnNlICVzIiksIGFtX3BhdGgoc3RhdGUsICJvcmlnaW5hbC1jb21taXQiKSk7CisKKwlyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgInRocmVld2F5IiwgMSk7CisJc3RhdGUtPnRocmVld2F5ID0gIXN0cmNtcChzYi5idWYsICJ0Iik7CisKKwlyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgInF1aWV0IiwgMSk7CisJc3RhdGUtPnF1aWV0ID0gIXN0cmNtcChzYi5idWYsICJ0Iik7CisKKwlyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgInNpZ24iLCAxKTsKKwlzdGF0ZS0+c2lnbm9mZiA9ICFzdHJjbXAoc2IuYnVmLCAidCIpOworCisJcmVhZF9zdGF0ZV9maWxlKCZzYiwgc3RhdGUsICJ1dGY4IiwgMSk7CisJc3RhdGUtPnV0ZjggPSAhc3RyY21wKHNiLmJ1ZiwgInQiKTsKKworCWlmIChmaWxlX2V4aXN0cyhhbV9wYXRoKHN0YXRlLCAicmVyZXJlLWF1dG91cGRhdGUiKSkpIHsKKwkJcmVhZF9zdGF0ZV9maWxlKCZzYiwgc3RhdGUsICJyZXJlcmUtYXV0b3VwZGF0ZSIsIDEpOworCQlzdGF0ZS0+YWxsb3dfcmVyZXJlX2F1dG91cGRhdGUgPSBzdHJjbXAoc2IuYnVmLCAidCIpID8KKwkJCVJFUkVSRV9OT0FVVE9VUERBVEUgOiBSRVJFUkVfQVVUT1VQREFURTsKKwl9IGVsc2UgeworCQlzdGF0ZS0+YWxsb3dfcmVyZXJlX2F1dG91cGRhdGUgPSAwOworCX0KKworCXJlYWRfc3RhdGVfZmlsZSgmc2IsIHN0YXRlLCAia2VlcCIsIDEpOworCWlmICghc3RyY21wKHNiLmJ1ZiwgInQiKSkKKwkJc3RhdGUtPmtlZXAgPSBLRUVQX1RSVUU7CisJZWxzZSBpZiAoIXN0cmNtcChzYi5idWYsICJiIikpCisJCXN0YXRlLT5rZWVwID0gS0VFUF9OT05fUEFUQ0g7CisJZWxzZQorCQlzdGF0ZS0+a2VlcCA9IEtFRVBfRkFMU0U7CisKKwlyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgIm1lc3NhZ2VpZCIsIDEpOworCXN0YXRlLT5tZXNzYWdlX2lkID0gIXN0cmNtcChzYi5idWYsICJ0Iik7CisKKwlyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgInNjaXNzb3JzIiwgMSk7CisJaWYgKCFzdHJjbXAoc2IuYnVmLCAidCIpKQorCQlzdGF0ZS0+c2Npc3NvcnMgPSBTQ0lTU09SU19UUlVFOworCWVsc2UgaWYgKCFzdHJjbXAoc2IuYnVmLCAiZiIpKQorCQlzdGF0ZS0+c2Npc3NvcnMgPSBTQ0lTU09SU19GQUxTRTsKKwllbHNlCisJCXN0YXRlLT5zY2lzc29ycyA9IFNDSVNTT1JTX1VOU0VUOworCisJcmVhZF9zdGF0ZV9maWxlKCZzYiwgc3RhdGUsICJhcHBseS1vcHQiLCAxKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZzdGF0ZS0+Z2l0X2FwcGx5X29wdHMpOworCWlmIChzcV9kZXF1b3RlX3RvX2FyZ3ZfYXJyYXkoc2IuYnVmLCAmc3RhdGUtPmdpdF9hcHBseV9vcHRzKSA8IDApCisJCWRpZShfKCJjb3VsZCBub3QgcGFyc2UgJXMiKSwgYW1fcGF0aChzdGF0ZSwgImFwcGx5LW9wdCIpKTsKKworCXN0YXRlLT5yZWJhc2luZyA9ICEhZmlsZV9leGlzdHMoYW1fcGF0aChzdGF0ZSwgInJlYmFzaW5nIikpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworLyoqCisgKiBSZW1vdmVzIHRoZSBhbV9zdGF0ZSBkaXJlY3RvcnksIGZvcmNlZnVsbHkgdGVybWluYXRpbmcgdGhlIGN1cnJlbnQgYW0KKyAqIHNlc3Npb24uCisgKi8KK3N0YXRpYyB2b2lkIGFtX2Rlc3Ryb3koY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkc3RyKCZzYiwgc3RhdGUtPmRpcik7CisJcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmc2IsIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKKy8qKgorICogUnVucyBhcHBseXBhdGNoLW1zZyBob29rLiBSZXR1cm5zIGl0cyBleGl0IGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgcnVuX2FwcGx5cGF0Y2hfbXNnX2hvb2soc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgcmV0OworCisJYXNzZXJ0KHN0YXRlLT5tc2cpOworCXJldCA9IHJ1bl9ob29rX2xlKE5VTEwsICJhcHBseXBhdGNoLW1zZyIsIGFtX3BhdGgoc3RhdGUsICJmaW5hbC1jb21taXQiKSwgTlVMTCk7CisKKwlpZiAoIXJldCkgeworCQlGUkVFX0FORF9OVUxMKHN0YXRlLT5tc2cpOworCQlpZiAocmVhZF9jb21taXRfbXNnKHN0YXRlKSA8IDApCisJCQlkaWUoXygiJyVzJyB3YXMgZGVsZXRlZCBieSB0aGUgYXBwbHlwYXRjaC1tc2cgaG9vayIpLAorCQkJCWFtX3BhdGgoc3RhdGUsICJmaW5hbC1jb21taXQiKSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBSdW5zIHBvc3QtcmV3cml0ZSBob29rLiBSZXR1cm5zIGl0IGV4aXQgY29kZS4KKyAqLworc3RhdGljIGludCBydW5fcG9zdF9yZXdyaXRlX2hvb2soY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICpob29rID0gZmluZF9ob29rKCJwb3N0LXJld3JpdGUiKTsKKwlpbnQgcmV0OworCisJaWYgKCFob29rKQorCQlyZXR1cm4gMDsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgaG9vayk7CisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAicmViYXNlIik7CisKKwljcC5pbiA9IHhvcGVuKGFtX3BhdGgoc3RhdGUsICJyZXdyaXR0ZW4iKSwgT19SRE9OTFkpOworCWNwLnN0ZG91dF90b19zdGRlcnIgPSAxOworCWNwLnRyYWNlMl9ob29rX25hbWUgPSAicG9zdC1yZXdyaXRlIjsKKworCXJldCA9IHJ1bl9jb21tYW5kKCZjcCk7CisKKwljbG9zZShjcC5pbik7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBSZWFkcyB0aGUgc3RhdGUgZGlyZWN0b3J5J3MgInJld3JpdHRlbiIgZmlsZSwgYW5kIGNvcGllcyBub3RlcyBmcm9tIHRoZSBvbGQKKyAqIGNvbW1pdHMgbGlzdGVkIGluIHRoZSBmaWxlIHRvIHRoZWlyIHJld3JpdHRlbiBjb21taXRzLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGNvcHlfbm90ZXNfZm9yX3JlYmFzZShjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqYzsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqaW52YWxpZF9saW5lID0gXygiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIik7CisJY29uc3QgY2hhciAqbXNnID0gIk5vdGVzIGFkZGVkIGJ5ICdnaXQgcmViYXNlJyI7CisJRklMRSAqZnA7CisJaW50IHJldCA9IDA7CisKKwlhc3NlcnQoc3RhdGUtPnJlYmFzaW5nKTsKKworCWMgPSBpbml0X2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoInJlYmFzZSIpOworCWlmICghYykKKwkJcmV0dXJuIDA7CisKKwlmcCA9IHhmb3BlbihhbV9wYXRoKHN0YXRlLCAicmV3cml0dGVuIiksICJyIik7CisKKwl3aGlsZSAoIXN0cmJ1Zl9nZXRsaW5lX2xmKCZzYiwgZnApKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgZnJvbV9vYmosIHRvX29iajsKKwkJY29uc3QgY2hhciAqcDsKKworCQlpZiAoc2IubGVuICE9IHRoZV9oYXNoX2FsZ28tPmhleHN6ICogMiArIDEpIHsKKwkJCXJldCA9IGVycm9yKGludmFsaWRfbGluZSwgc2IuYnVmKTsKKwkJCWdvdG8gZmluaXNoOworCQl9CisKKwkJaWYgKHBhcnNlX29pZF9oZXgoc2IuYnVmLCAmZnJvbV9vYmosICZwKSkgeworCQkJcmV0ID0gZXJyb3IoaW52YWxpZF9saW5lLCBzYi5idWYpOworCQkJZ290byBmaW5pc2g7CisJCX0KKworCQlpZiAoKnAgIT0gJyAnKSB7CisJCQlyZXQgPSBlcnJvcihpbnZhbGlkX2xpbmUsIHNiLmJ1Zik7CisJCQlnb3RvIGZpbmlzaDsKKwkJfQorCisJCWlmIChnZXRfb2lkX2hleChwICsgMSwgJnRvX29iaikpIHsKKwkJCXJldCA9IGVycm9yKGludmFsaWRfbGluZSwgc2IuYnVmKTsKKwkJCWdvdG8gZmluaXNoOworCQl9CisKKwkJaWYgKGNvcHlfbm90ZV9mb3JfcmV3cml0ZShjLCAmZnJvbV9vYmosICZ0b19vYmopKQorCQkJcmV0ID0gZXJyb3IoXygiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciKSwKKwkJCQkJb2lkX3RvX2hleCgmZnJvbV9vYmopLCBvaWRfdG9faGV4KCZ0b19vYmopKTsKKwl9CisKK2ZpbmlzaDoKKwlmaW5pc2hfY29weV9ub3Rlc19mb3JfcmV3cml0ZSh0aGVfcmVwb3NpdG9yeSwgYywgbXNnKTsKKwlmY2xvc2UoZnApOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBEZXRlcm1pbmVzIGlmIHRoZSBmaWxlIGxvb2tzIGxpa2UgYSBwaWVjZSBvZiBSRkMyODIyIG1haWwgYnkgZ3JhYmJpbmcgYWxsCisgKiBub24taW5kZW50ZWQgbGluZXMgYW5kIGNoZWNraW5nIGlmIHRoZXkgbG9vayBsaWtlIHRoZXkgYmVnaW4gd2l0aCB2YWxpZAorICogaGVhZGVyIGZpZWxkIG5hbWVzLgorICoKKyAqIFJldHVybnMgMSBpZiB0aGUgZmlsZSBsb29rcyBsaWtlIGEgcGllY2Ugb2YgbWFpbCwgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgaXNfbWFpbChGSUxFICpmcCkKK3sKKwljb25zdCBjaGFyICpoZWFkZXJfcmVnZXggPSAiXlshLTk7LX5dKzoiOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlyZWdleF90IHJlZ2V4OworCWludCByZXQgPSAxOworCisJaWYgKGZzZWVrKGZwLCAwTCwgU0VFS19TRVQpKQorCQlkaWVfZXJybm8oXygiZnNlZWsgZmFpbGVkIikpOworCisJaWYgKHJlZ2NvbXAoJnJlZ2V4LCBoZWFkZXJfcmVnZXgsIFJFR19OT1NVQiB8IFJFR19FWFRFTkRFRCkpCisJCWRpZSgiaW52YWxpZCBwYXR0ZXJuOiAlcyIsIGhlYWRlcl9yZWdleCk7CisKKwl3aGlsZSAoIXN0cmJ1Zl9nZXRsaW5lKCZzYiwgZnApKSB7CisJCWlmICghc2IubGVuKQorCQkJYnJlYWs7IC8qIEVuZCBvZiBoZWFkZXIgKi8KKworCQkvKiBJZ25vcmUgaW5kZW50ZWQgZm9sZGVkIGxpbmVzICovCisJCWlmICgqc2IuYnVmID09ICdcdCcgfHwgKnNiLmJ1ZiA9PSAnICcpCisJCQljb250aW51ZTsKKworCQkvKiBJdCdzIGEgaGVhZGVyIGlmIGl0IG1hdGNoZXMgaGVhZGVyX3JlZ2V4ICovCisJCWlmIChyZWdleGVjKCZyZWdleCwgc2IuYnVmLCAwLCBOVUxMLCAwKSkgeworCQkJcmV0ID0gMDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworZG9uZToKKwlyZWdmcmVlKCZyZWdleCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIEF0dGVtcHRzIHRvIGRldGVjdCB0aGUgcGF0Y2hfZm9ybWF0IG9mIHRoZSBwYXRjaGVzIGNvbnRhaW5lZCBpbiBgcGF0aHNgLAorICogcmV0dXJuaW5nIHRoZSBQQVRDSF9GT1JNQVRfKiBlbnVtIHZhbHVlLiBSZXR1cm5zIFBBVENIX0ZPUk1BVF9VTktOT1dOIGlmCisgKiBkZXRlY3Rpb24gZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgZGV0ZWN0X3BhdGNoX2Zvcm1hdChjb25zdCBjaGFyICoqcGF0aHMpCit7CisJZW51bSBwYXRjaF9mb3JtYXQgcmV0ID0gUEFUQ0hfRk9STUFUX1VOS05PV047CisJc3RydWN0IHN0cmJ1ZiBsMSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgbDIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGwzID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqZnA7CisKKwkvKgorCSAqIFdlIGRlZmF1bHQgdG8gbWJveCBmb3JtYXQgaWYgaW5wdXQgaXMgZnJvbSBzdGRpbiBhbmQgZm9yIGRpcmVjdG9yaWVzCisJICovCisJaWYgKCEqcGF0aHMgfHwgIXN0cmNtcCgqcGF0aHMsICItIikgfHwgaXNfZGlyZWN0b3J5KCpwYXRocykpCisJCXJldHVybiBQQVRDSF9GT1JNQVRfTUJPWDsKKworCS8qCisJICogT3RoZXJ3aXNlLCBjaGVjayB0aGUgZmlyc3QgZmV3IGxpbmVzIG9mIHRoZSBmaXJzdCBwYXRjaCwgc3RhcnRpbmcKKwkgKiBmcm9tIHRoZSBmaXJzdCBub24tYmxhbmsgbGluZSwgdG8gdHJ5IHRvIGRldGVjdCBpdHMgZm9ybWF0LgorCSAqLworCisJZnAgPSB4Zm9wZW4oKnBhdGhzLCAiciIpOworCisJd2hpbGUgKCFzdHJidWZfZ2V0bGluZSgmbDEsIGZwKSkgeworCQlpZiAobDEubGVuKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHN0YXJ0c193aXRoKGwxLmJ1ZiwgIkZyb20gIikgfHwgc3RhcnRzX3dpdGgobDEuYnVmLCAiRnJvbTogIikpIHsKKwkJcmV0ID0gUEFUQ0hfRk9STUFUX01CT1g7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoc3RhcnRzX3dpdGgobDEuYnVmLCAiIyBUaGlzIHNlcmllcyBhcHBsaWVzIG9uIEdJVCBjb21taXQiKSkgeworCQlyZXQgPSBQQVRDSF9GT1JNQVRfU1RHSVRfU0VSSUVTOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCFzdHJjbXAobDEuYnVmLCAiIyBIRyBjaGFuZ2VzZXQgcGF0Y2giKSkgeworCQlyZXQgPSBQQVRDSF9GT1JNQVRfSEc7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlzdHJidWZfZ2V0bGluZSgmbDIsIGZwKTsKKwlzdHJidWZfZ2V0bGluZSgmbDMsIGZwKTsKKworCS8qCisJICogSWYgdGhlIHNlY29uZCBsaW5lIGlzIGVtcHR5IGFuZCB0aGUgdGhpcmQgaXMgYSBGcm9tLCBBdXRob3Igb3IgRGF0ZQorCSAqIGVudHJ5LCB0aGlzIGlzIGxpa2VseSBhbiBTdEdpdCBwYXRjaC4KKwkgKi8KKwlpZiAobDEubGVuICYmICFsMi5sZW4gJiYKKwkJKHN0YXJ0c193aXRoKGwzLmJ1ZiwgIkZyb206IikgfHwKKwkJIHN0YXJ0c193aXRoKGwzLmJ1ZiwgIkF1dGhvcjoiKSB8fAorCQkgc3RhcnRzX3dpdGgobDMuYnVmLCAiRGF0ZToiKSkpIHsKKwkJcmV0ID0gUEFUQ0hfRk9STUFUX1NUR0lUOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGwxLmxlbiAmJiBpc19tYWlsKGZwKSkgeworCQlyZXQgPSBQQVRDSF9GT1JNQVRfTUJPWDsKKwkJZ290byBkb25lOworCX0KKworZG9uZToKKwlmY2xvc2UoZnApOworCXN0cmJ1Zl9yZWxlYXNlKCZsMSk7CisJc3RyYnVmX3JlbGVhc2UoJmwyKTsKKwlzdHJidWZfcmVsZWFzZSgmbDMpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogU3BsaXRzIG91dCBpbmRpdmlkdWFsIGVtYWlsIHBhdGNoZXMgZnJvbSBgcGF0aHNgLCB3aGVyZSBlYWNoIHBhdGggaXMgZWl0aGVyCisgKiBhIG1ib3ggZmlsZSBvciBhIE1haWxkaXIuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHNwbGl0X21haWxfbWJveChzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICoqcGF0aHMsCisJCQkJaW50IGtlZXBfY3IsIGludCBtYm94cmQpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBsYXN0ID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldDsKKworCWNwLmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIm1haWxzcGxpdCIpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmFyZ3MsICItZCVkIiwgc3RhdGUtPnByZWMpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmFyZ3MsICItbyVzIiwgc3RhdGUtPmRpcik7CisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLWIiKTsKKwlpZiAoa2VlcF9jcikKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS1rZWVwLWNyIik7CisJaWYgKG1ib3hyZCkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS1tYm94cmQiKTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLSIpOworCWFyZ3ZfYXJyYXlfcHVzaHYoJmNwLmFyZ3MsIHBhdGhzKTsKKworCXJldCA9IGNhcHR1cmVfY29tbWFuZCgmY3AsICZsYXN0LCA4KTsKKwlpZiAocmV0KQorCQlnb3RvIGV4aXQ7CisKKwlzdGF0ZS0+Y3VyID0gMTsKKwlzdGF0ZS0+bGFzdCA9IHN0cnRvbChsYXN0LmJ1ZiwgTlVMTCwgMTApOworCitleGl0OgorCXN0cmJ1Zl9yZWxlYXNlKCZsYXN0KTsKKwlyZXR1cm4gcmV0ID8gLTEgOiAwOworfQorCisvKioKKyAqIENhbGxiYWNrIHNpZ25hdHVyZSBmb3Igc3BsaXRfbWFpbF9jb252KCkuIFRoZSBmb3JlaWduIHBhdGNoIHNob3VsZCBiZQorICogcmVhZCBmcm9tIGBpbmAsIGFuZCB0aGUgY29udmVydGVkIHBhdGNoIChpbiBSRkMyODIyIG1haWwgZm9ybWF0KSBzaG91bGQgYmUKKyAqIHdyaXR0ZW4gdG8gYG91dGAuIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGZhaWx1cmUuCisgKi8KK3R5cGVkZWYgaW50ICgqbWFpbF9jb252X2ZuKShGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQga2VlcF9jcik7CisKKy8qKgorICogQ2FsbHMgYGZuYCBmb3IgZWFjaCBmaWxlIGluIGBwYXRoc2AgdG8gY29udmVydCB0aGUgZm9yZWlnbiBwYXRjaCB0byB0aGUKKyAqIFJGQzI4MjIgbWFpbCBmb3JtYXQgc3VpdGFibGUgZm9yIHBhcnNpbmcgd2l0aCBnaXQtbWFpbGluZm8uCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgc3BsaXRfbWFpbF9jb252KG1haWxfY29udl9mbiBmbiwgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSwKKwkJCWNvbnN0IGNoYXIgKipwYXRocywgaW50IGtlZXBfY3IpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKnN0ZGluX29ubHlbXSA9IHsiLSIsIE5VTEx9OworCWludCBpOworCisJaWYgKCEqcGF0aHMpCisJCXBhdGhzID0gc3RkaW5fb25seTsKKworCWZvciAoaSA9IDA7ICpwYXRoczsgcGF0aHMrKywgaSsrKSB7CisJCUZJTEUgKmluLCAqb3V0OworCQljb25zdCBjaGFyICptYWlsOworCQlpbnQgcmV0OworCisJCWlmICghc3RyY21wKCpwYXRocywgIi0iKSkKKwkJCWluID0gc3RkaW47CisJCWVsc2UKKwkJCWluID0gZm9wZW4oKnBhdGhzLCAiciIpOworCisJCWlmICghaW4pCisJCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIpLAorCQkJCQkgICAqcGF0aHMpOworCisJCW1haWwgPSBta3BhdGgoIiVzLyUwKmQiLCBzdGF0ZS0+ZGlyLCBzdGF0ZS0+cHJlYywgaSArIDEpOworCisJCW91dCA9IGZvcGVuKG1haWwsICJ3Iik7CisJCWlmICghb3V0KSB7CisJCQlpZiAoaW4gIT0gc3RkaW4pCisJCQkJZmNsb3NlKGluKTsKKwkJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiksCisJCQkJCSAgIG1haWwpOworCQl9CisKKwkJcmV0ID0gZm4ob3V0LCBpbiwga2VlcF9jcik7CisKKwkJZmNsb3NlKG91dCk7CisJCWlmIChpbiAhPSBzdGRpbikKKwkJCWZjbG9zZShpbik7CisKKwkJaWYgKHJldCkKKwkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIpLCAqcGF0aHMpOworCX0KKworCXN0YXRlLT5jdXIgPSAxOworCXN0YXRlLT5sYXN0ID0gaTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBBIHNwbGl0X21haWxfY29udigpIGNhbGxiYWNrIHRoYXQgY29udmVydHMgYW4gU3RHaXQgcGF0Y2ggdG8gYW4gUkZDMjgyMgorICogbWVzc2FnZSBzdWl0YWJsZSBmb3IgcGFyc2luZyB3aXRoIGdpdC1tYWlsaW5mby4KKyAqLworc3RhdGljIGludCBzdGdpdF9wYXRjaF90b19tYWlsKEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBrZWVwX2NyKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc3ViamVjdF9wcmludGVkID0gMDsKKworCXdoaWxlICghc3RyYnVmX2dldGxpbmVfbGYoJnNiLCBpbikpIHsKKwkJY29uc3QgY2hhciAqc3RyOworCisJCWlmIChzdHJfaXNzcGFjZShzYi5idWYpKQorCQkJY29udGludWU7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KHNiLmJ1ZiwgIkF1dGhvcjoiLCAmc3RyKSkKKwkJCWZwcmludGYob3V0LCAiRnJvbTolc1xuIiwgc3RyKTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgoc2IuYnVmLCAiRnJvbSIpIHx8IHN0YXJ0c193aXRoKHNiLmJ1ZiwgIkRhdGUiKSkKKwkJCWZwcmludGYob3V0LCAiJXNcbiIsIHNiLmJ1Zik7CisJCWVsc2UgaWYgKCFzdWJqZWN0X3ByaW50ZWQpIHsKKwkJCWZwcmludGYob3V0LCAiU3ViamVjdDogJXNcbiIsIHNiLmJ1Zik7CisJCQlzdWJqZWN0X3ByaW50ZWQgPSAxOworCQl9IGVsc2UgeworCQkJZnByaW50ZihvdXQsICJcbiVzXG4iLCBzYi5idWYpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwl3aGlsZSAoc3RyYnVmX2ZyZWFkKCZzYiwgODE5MiwgaW4pID4gMCkgeworCQlmd3JpdGUoc2IuYnVmLCAxLCBzYi5sZW4sIG91dCk7CisJCXN0cmJ1Zl9yZXNldCgmc2IpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIFN0R2l0IHNlcmllcyBmaWxlIGluIGBwYXRoc2AuCisgKgorICogR2l2ZW4gYW4gU3RHaXQgc2VyaWVzIGZpbGUsIGNvbnZlcnRzIHRoZSBTdEdpdCBwYXRjaGVzIGluIHRoZSBzZXJpZXMgaW50bworICogUkZDMjgyMiBtZXNzYWdlcyBzdWl0YWJsZSBmb3IgcGFyc2luZyB3aXRoIGdpdC1tYWlsaW5mbywgYW5kIHF1ZXVlcyB0aGVtIGluCisgKiB0aGUgc3RhdGUgZGlyZWN0b3J5LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHNwbGl0X21haWxfc3RnaXRfc2VyaWVzKHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKipwYXRocywKKwkJCQkJaW50IGtlZXBfY3IpCit7CisJY29uc3QgY2hhciAqc2VyaWVzX2RpcjsKKwljaGFyICpzZXJpZXNfZGlyX2J1ZjsKKwlGSUxFICpmcDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBwYXRjaGVzID0gQVJHVl9BUlJBWV9JTklUOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJaWYgKCFwYXRoc1swXSB8fCBwYXRoc1sxXSkKKwkJcmV0dXJuIGVycm9yKF8oIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIikpOworCisJc2VyaWVzX2Rpcl9idWYgPSB4c3RyZHVwKCpwYXRocyk7CisJc2VyaWVzX2RpciA9IGRpcm5hbWUoc2VyaWVzX2Rpcl9idWYpOworCisJZnAgPSBmb3BlbigqcGF0aHMsICJyIik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciKSwgKnBhdGhzKTsKKworCXdoaWxlICghc3RyYnVmX2dldGxpbmVfbGYoJnNiLCBmcCkpIHsKKwkJaWYgKCpzYi5idWYgPT0gJyMnKQorCQkJY29udGludWU7IC8qIHNraXAgY29tbWVudCBsaW5lcyAqLworCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGF0Y2hlcywgbWtwYXRoKCIlcy8lcyIsIHNlcmllc19kaXIsIHNiLmJ1ZikpOworCX0KKworCWZjbG9zZShmcCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlmcmVlKHNlcmllc19kaXJfYnVmKTsKKworCXJldCA9IHNwbGl0X21haWxfY29udihzdGdpdF9wYXRjaF90b19tYWlsLCBzdGF0ZSwgcGF0Y2hlcy5hcmd2LCBrZWVwX2NyKTsKKworCWFyZ3ZfYXJyYXlfY2xlYXIoJnBhdGNoZXMpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogQSBzcGxpdF9wYXRjaGVzX2NvbnYoKSBjYWxsYmFjayB0aGF0IGNvbnZlcnRzIGEgbWVyY3VyaWFsIHBhdGNoIHRvIGEgUkZDMjgyMgorICogbWVzc2FnZSBzdWl0YWJsZSBmb3IgcGFyc2luZyB3aXRoIGdpdC1tYWlsaW5mby4KKyAqLworc3RhdGljIGludCBoZ19wYXRjaF90b19tYWlsKEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBrZWVwX2NyKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmMgPSAwOworCisJd2hpbGUgKCFzdHJidWZfZ2V0bGluZV9sZigmc2IsIGluKSkgeworCQljb25zdCBjaGFyICpzdHI7CisKKwkJaWYgKHNraXBfcHJlZml4KHNiLmJ1ZiwgIiMgVXNlciAiLCAmc3RyKSkKKwkJCWZwcmludGYob3V0LCAiRnJvbTogJXNcbiIsIHN0cik7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KHNiLmJ1ZiwgIiMgRGF0ZSAiLCAmc3RyKSkgeworCQkJdGltZXN0YW1wX3QgdGltZXN0YW1wOworCQkJbG9uZyB0eiwgdHoyOworCQkJY2hhciAqZW5kOworCisJCQllcnJubyA9IDA7CisJCQl0aW1lc3RhbXAgPSBwYXJzZV90aW1lc3RhbXAoc3RyLCAmZW5kLCAxMCk7CisJCQlpZiAoZXJybm8pIHsKKwkJCQlyYyA9IGVycm9yKF8oImludmFsaWQgdGltZXN0YW1wIikpOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKworCQkJaWYgKCFza2lwX3ByZWZpeChlbmQsICIgIiwgJnN0cikpIHsKKwkJCQlyYyA9IGVycm9yKF8oImludmFsaWQgRGF0ZSBsaW5lIikpOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKworCQkJZXJybm8gPSAwOworCQkJdHogPSBzdHJ0b2woc3RyLCAmZW5kLCAxMCk7CisJCQlpZiAoZXJybm8pIHsKKwkJCQlyYyA9IGVycm9yKF8oImludmFsaWQgdGltZXpvbmUgb2Zmc2V0IikpOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKworCQkJaWYgKCplbmQpIHsKKwkJCQlyYyA9IGVycm9yKF8oImludmFsaWQgRGF0ZSBsaW5lIikpOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKworCQkJLyoKKwkJCSAqIG1lcmN1cmlhbCdzIHRpbWV6b25lIGlzIGluIHNlY29uZHMgd2VzdCBvZiBVVEMsCisJCQkgKiBob3dldmVyIGdpdCdzIHRpbWV6b25lIGlzIGluIGhvdXJzICsgbWludXRlcyBlYXN0IG9mCisJCQkgKiBVVEMuIENvbnZlcnQgaXQuCisJCQkgKi8KKwkJCXR6MiA9IGxhYnModHopIC8gMzYwMCAqIDEwMCArIGxhYnModHopICUgMzYwMCAvIDYwOworCQkJaWYgKHR6ID4gMCkKKwkJCQl0ejIgPSAtdHoyOworCisJCQlmcHJpbnRmKG91dCwgIkRhdGU6ICVzXG4iLCBzaG93X2RhdGUodGltZXN0YW1wLCB0ejIsIERBVEVfTU9ERShSRkMyODIyKSkpOworCQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKHNiLmJ1ZiwgIiMgIikpIHsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJZnByaW50ZihvdXQsICJcbiVzXG4iLCBzYi5idWYpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwl3aGlsZSAoc3RyYnVmX2ZyZWFkKCZzYiwgODE5MiwgaW4pID4gMCkgeworCQlmd3JpdGUoc2IuYnVmLCAxLCBzYi5sZW4sIG91dCk7CisJCXN0cmJ1Zl9yZXNldCgmc2IpOworCX0KK2V4aXQ6CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogU3BsaXRzIGEgbGlzdCBvZiBmaWxlcy9kaXJlY3RvcmllcyBpbnRvIGluZGl2aWR1YWwgZW1haWwgcGF0Y2hlcy4gRWFjaCBwYXRoCisgKiBpbiBgcGF0aHNgIG11c3QgYmUgYSBmaWxlL2RpcmVjdG9yeSB0aGF0IGlzIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8KKyAqIGBwYXRjaF9mb3JtYXRgLgorICoKKyAqIE9uY2Ugc3BsaXQgb3V0LCB0aGUgaW5kaXZpZHVhbCBlbWFpbCBwYXRjaGVzIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdGF0ZQorICogZGlyZWN0b3J5LCB3aXRoIGVhY2ggcGF0Y2gncyBmaWxlbmFtZSBiZWluZyBpdHMgaW5kZXgsIHBhZGRlZCB0byBzdGF0ZS0+cHJlYworICogZGlnaXRzLgorICoKKyAqIHN0YXRlLT5jdXIgd2lsbCBiZSBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBtYWlsLCBhbmQgc3RhdGUtPmxhc3Qgd2lsbAorICogYmUgc2V0IHRvIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBtYWlsLgorICoKKyAqIFNldCBrZWVwX2NyIHRvIDAgdG8gY29udmVydCBhbGwgbGluZXMgZW5kaW5nIHdpdGggXHJcbiB0byBlbmQgd2l0aCBcbiwgMQorICogdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLCAtMSB0byB1c2UgdGhlIGRlZmF1bHQgY29uZmlndXJlZCBzZXR0aW5nLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHNwbGl0X21haWwoc3RydWN0IGFtX3N0YXRlICpzdGF0ZSwgZW51bSBwYXRjaF9mb3JtYXQgcGF0Y2hfZm9ybWF0LAorCQkJY29uc3QgY2hhciAqKnBhdGhzLCBpbnQga2VlcF9jcikKK3sKKwlpZiAoa2VlcF9jciA8IDApIHsKKwkJa2VlcF9jciA9IDA7CisJCWdpdF9jb25maWdfZ2V0X2Jvb2woImFtLmtlZXBjciIsICZrZWVwX2NyKTsKKwl9CisKKwlzd2l0Y2ggKHBhdGNoX2Zvcm1hdCkgeworCWNhc2UgUEFUQ0hfRk9STUFUX01CT1g6CisJCXJldHVybiBzcGxpdF9tYWlsX21ib3goc3RhdGUsIHBhdGhzLCBrZWVwX2NyLCAwKTsKKwljYXNlIFBBVENIX0ZPUk1BVF9TVEdJVDoKKwkJcmV0dXJuIHNwbGl0X21haWxfY29udihzdGdpdF9wYXRjaF90b19tYWlsLCBzdGF0ZSwgcGF0aHMsIGtlZXBfY3IpOworCWNhc2UgUEFUQ0hfRk9STUFUX1NUR0lUX1NFUklFUzoKKwkJcmV0dXJuIHNwbGl0X21haWxfc3RnaXRfc2VyaWVzKHN0YXRlLCBwYXRocywga2VlcF9jcik7CisJY2FzZSBQQVRDSF9GT1JNQVRfSEc6CisJCXJldHVybiBzcGxpdF9tYWlsX2NvbnYoaGdfcGF0Y2hfdG9fbWFpbCwgc3RhdGUsIHBhdGhzLCBrZWVwX2NyKTsKKwljYXNlIFBBVENIX0ZPUk1BVF9NQk9YUkQ6CisJCXJldHVybiBzcGxpdF9tYWlsX21ib3goc3RhdGUsIHBhdGhzLCBrZWVwX2NyLCAxKTsKKwlkZWZhdWx0OgorCQlCVUcoImludmFsaWQgcGF0Y2hfZm9ybWF0Iik7CisJfQorCXJldHVybiAtMTsKK30KKworLyoqCisgKiBTZXR1cCBhIG5ldyBhbSBzZXNzaW9uIGZvciBhcHBseWluZyBwYXRjaGVzCisgKi8KK3N0YXRpYyB2b2lkIGFtX3NldHVwKHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsIGVudW0gcGF0Y2hfZm9ybWF0IHBhdGNoX2Zvcm1hdCwKKwkJCWNvbnN0IGNoYXIgKipwYXRocywgaW50IGtlZXBfY3IpCit7CisJc3RydWN0IG9iamVjdF9pZCBjdXJyX2hlYWQ7CisJY29uc3QgY2hhciAqc3RyOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmICghcGF0Y2hfZm9ybWF0KQorCQlwYXRjaF9mb3JtYXQgPSBkZXRlY3RfcGF0Y2hfZm9ybWF0KHBhdGhzKTsKKworCWlmICghcGF0Y2hfZm9ybWF0KSB7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iKSk7CisJCWV4aXQoMTI4KTsKKwl9CisKKwlpZiAobWtkaXIoc3RhdGUtPmRpciwgMDc3NykgPCAwICYmIGVycm5vICE9IEVFWElTVCkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciKSwgc3RhdGUtPmRpcik7CisJZGVsZXRlX3JlZihOVUxMLCAiUkVCQVNFX0hFQUQiLCBOVUxMLCBSRUZfTk9fREVSRUYpOworCisJaWYgKHNwbGl0X21haWwoc3RhdGUsIHBhdGNoX2Zvcm1hdCwgcGF0aHMsIGtlZXBfY3IpIDwgMCkgeworCQlhbV9kZXN0cm95KHN0YXRlKTsKKwkJZGllKF8oIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIpKTsKKwl9CisKKwlpZiAoc3RhdGUtPnJlYmFzaW5nKQorCQlzdGF0ZS0+dGhyZWV3YXkgPSAxOworCisJd3JpdGVfc3RhdGVfYm9vbChzdGF0ZSwgInRocmVld2F5Iiwgc3RhdGUtPnRocmVld2F5KTsKKwl3cml0ZV9zdGF0ZV9ib29sKHN0YXRlLCAicXVpZXQiLCBzdGF0ZS0+cXVpZXQpOworCXdyaXRlX3N0YXRlX2Jvb2woc3RhdGUsICJzaWduIiwgc3RhdGUtPnNpZ25vZmYpOworCXdyaXRlX3N0YXRlX2Jvb2woc3RhdGUsICJ1dGY4Iiwgc3RhdGUtPnV0ZjgpOworCisJaWYgKHN0YXRlLT5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSkKKwkJd3JpdGVfc3RhdGVfYm9vbChzdGF0ZSwgInJlcmVyZS1hdXRvdXBkYXRlIiwKKwkJCSBzdGF0ZS0+YWxsb3dfcmVyZXJlX2F1dG91cGRhdGUgPT0gUkVSRVJFX0FVVE9VUERBVEUpOworCisJc3dpdGNoIChzdGF0ZS0+a2VlcCkgeworCWNhc2UgS0VFUF9GQUxTRToKKwkJc3RyID0gImYiOworCQlicmVhazsKKwljYXNlIEtFRVBfVFJVRToKKwkJc3RyID0gInQiOworCQlicmVhazsKKwljYXNlIEtFRVBfTk9OX1BBVENIOgorCQlzdHIgPSAiYiI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygiaW52YWxpZCB2YWx1ZSBmb3Igc3RhdGUtPmtlZXAiKTsKKwl9CisKKwl3cml0ZV9zdGF0ZV90ZXh0KHN0YXRlLCAia2VlcCIsIHN0cik7CisJd3JpdGVfc3RhdGVfYm9vbChzdGF0ZSwgIm1lc3NhZ2VpZCIsIHN0YXRlLT5tZXNzYWdlX2lkKTsKKworCXN3aXRjaCAoc3RhdGUtPnNjaXNzb3JzKSB7CisJY2FzZSBTQ0lTU09SU19VTlNFVDoKKwkJc3RyID0gIiI7CisJCWJyZWFrOworCWNhc2UgU0NJU1NPUlNfRkFMU0U6CisJCXN0ciA9ICJmIjsKKwkJYnJlYWs7CisJY2FzZSBTQ0lTU09SU19UUlVFOgorCQlzdHIgPSAidCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygiaW52YWxpZCB2YWx1ZSBmb3Igc3RhdGUtPnNjaXNzb3JzIik7CisJfQorCXdyaXRlX3N0YXRlX3RleHQoc3RhdGUsICJzY2lzc29ycyIsIHN0cik7CisKKwlzcV9xdW90ZV9hcmd2KCZzYiwgc3RhdGUtPmdpdF9hcHBseV9vcHRzLmFyZ3YpOworCXdyaXRlX3N0YXRlX3RleHQoc3RhdGUsICJhcHBseS1vcHQiLCBzYi5idWYpOworCisJaWYgKHN0YXRlLT5yZWJhc2luZykKKwkJd3JpdGVfc3RhdGVfdGV4dChzdGF0ZSwgInJlYmFzaW5nIiwgIiIpOworCWVsc2UKKwkJd3JpdGVfc3RhdGVfdGV4dChzdGF0ZSwgImFwcGx5aW5nIiwgIiIpOworCisJaWYgKCFnZXRfb2lkKCJIRUFEIiwgJmN1cnJfaGVhZCkpIHsKKwkJd3JpdGVfc3RhdGVfdGV4dChzdGF0ZSwgImFib3J0LXNhZmV0eSIsIG9pZF90b19oZXgoJmN1cnJfaGVhZCkpOworCQlpZiAoIXN0YXRlLT5yZWJhc2luZykKKwkJCXVwZGF0ZV9yZWYoImFtIiwgIk9SSUdfSEVBRCIsICZjdXJyX2hlYWQsIE5VTEwsIDAsCisJCQkJICAgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisJfSBlbHNlIHsKKwkJd3JpdGVfc3RhdGVfdGV4dChzdGF0ZSwgImFib3J0LXNhZmV0eSIsICIiKTsKKwkJaWYgKCFzdGF0ZS0+cmViYXNpbmcpCisJCQlkZWxldGVfcmVmKE5VTEwsICJPUklHX0hFQUQiLCBOVUxMLCAwKTsKKwl9CisKKwkvKgorCSAqIE5PVEU6IFNpbmNlIHRoZSAibmV4dCIgYW5kICJsYXN0IiBmaWxlcyBkZXRlcm1pbmUgaWYgYW4gYW1fc3RhdGUKKwkgKiBzZXNzaW9uIGlzIGluIHByb2dyZXNzLCB0aGV5IHNob3VsZCBiZSB3cml0dGVuIGxhc3QuCisJICovCisKKwl3cml0ZV9zdGF0ZV9jb3VudChzdGF0ZSwgIm5leHQiLCBzdGF0ZS0+Y3VyKTsKKwl3cml0ZV9zdGF0ZV9jb3VudChzdGF0ZSwgImxhc3QiLCBzdGF0ZS0+bGFzdCk7CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCisvKioKKyAqIEluY3JlbWVudHMgdGhlIHBhdGNoIHBvaW50ZXIsIGFuZCBjbGVhbnMgYW1fc3RhdGUgZm9yIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUKKyAqIG5leHQgcGF0Y2guCisgKi8KK3N0YXRpYyB2b2lkIGFtX25leHQoc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWQ7CisKKwlGUkVFX0FORF9OVUxMKHN0YXRlLT5hdXRob3JfbmFtZSk7CisJRlJFRV9BTkRfTlVMTChzdGF0ZS0+YXV0aG9yX2VtYWlsKTsKKwlGUkVFX0FORF9OVUxMKHN0YXRlLT5hdXRob3JfZGF0ZSk7CisJRlJFRV9BTkRfTlVMTChzdGF0ZS0+bXNnKTsKKwlzdGF0ZS0+bXNnX2xlbiA9IDA7CisKKwl1bmxpbmsoYW1fcGF0aChzdGF0ZSwgImF1dGhvci1zY3JpcHQiKSk7CisJdW5saW5rKGFtX3BhdGgoc3RhdGUsICJmaW5hbC1jb21taXQiKSk7CisKKwlvaWRjbHIoJnN0YXRlLT5vcmlnX2NvbW1pdCk7CisJdW5saW5rKGFtX3BhdGgoc3RhdGUsICJvcmlnaW5hbC1jb21taXQiKSk7CisJZGVsZXRlX3JlZihOVUxMLCAiUkVCQVNFX0hFQUQiLCBOVUxMLCBSRUZfTk9fREVSRUYpOworCisJaWYgKCFnZXRfb2lkKCJIRUFEIiwgJmhlYWQpKQorCQl3cml0ZV9zdGF0ZV90ZXh0KHN0YXRlLCAiYWJvcnQtc2FmZXR5Iiwgb2lkX3RvX2hleCgmaGVhZCkpOworCWVsc2UKKwkJd3JpdGVfc3RhdGVfdGV4dChzdGF0ZSwgImFib3J0LXNhZmV0eSIsICIiKTsKKworCXN0YXRlLT5jdXIrKzsKKwl3cml0ZV9zdGF0ZV9jb3VudChzdGF0ZSwgIm5leHQiLCBzdGF0ZS0+Y3VyKTsKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBmaWxlbmFtZSBvZiB0aGUgY3VycmVudCBwYXRjaCBlbWFpbC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKm1zZ251bShjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwlzdHJidWZfYWRkZigmc2IsICIlMCpkIiwgc3RhdGUtPnByZWMsIHN0YXRlLT5jdXIpOworCisJcmV0dXJuIHNiLmJ1ZjsKK30KKworLyoqCisgKiBEaWVzIHdpdGggYSB1c2VyLWZyaWVuZGx5IG1lc3NhZ2Ugb24gaG93IHRvIHByb2NlZWQgYWZ0ZXIgcmVzb2x2aW5nIHRoZQorICogcHJvYmxlbS4gVGhpcyBtZXNzYWdlIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggc3RhdGUtPnJlc29sdmVtc2cuCisgKi8KK3N0YXRpYyB2b2lkIE5PUkVUVVJOIGRpZV91c2VyX3Jlc29sdmUoY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoc3RhdGUtPnJlc29sdmVtc2cpIHsKKwkJcHJpbnRmX2xuKCIlcyIsIHN0YXRlLT5yZXNvbHZlbXNnKTsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyICpjbWRsaW5lID0gc3RhdGUtPmludGVyYWN0aXZlID8gImdpdCBhbSAtaSIgOiAiZ2l0IGFtIjsKKworCQlwcmludGZfbG4oXygiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiVzIC0tY29udGludWVcIi4iKSwgY21kbGluZSk7CisJCXByaW50Zl9sbihfKCJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJXMgLS1za2lwXCIgaW5zdGVhZC4iKSwgY21kbGluZSk7CisJCXByaW50Zl9sbihfKCJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iKSwgY21kbGluZSk7CisJfQorCisJZXhpdCgxMjgpOworfQorCisvKioKKyAqIEFwcGVuZHMgc2lnbm9mZiB0byB0aGUgIm1zZyIgZmllbGQgb2YgdGhlIGFtX3N0YXRlLgorICovCitzdGF0aWMgdm9pZCBhbV9hcHBlbmRfc2lnbm9mZihzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hdHRhY2goJnNiLCBzdGF0ZS0+bXNnLCBzdGF0ZS0+bXNnX2xlbiwgc3RhdGUtPm1zZ19sZW4pOworCWFwcGVuZF9zaWdub2ZmKCZzYiwgMCwgMCk7CisJc3RhdGUtPm1zZyA9IHN0cmJ1Zl9kZXRhY2goJnNiLCAmc3RhdGUtPm1zZ19sZW4pOworfQorCisvKioKKyAqIFBhcnNlcyBgbWFpbGAgdXNpbmcgZ2l0LW1haWxpbmZvLCBleHRyYWN0aW5nIGl0cyBwYXRjaCBhbmQgYXV0aG9yc2hpcCBpbmZvLgorICogc3RhdGUtPm1zZyB3aWxsIGJlIHNldCB0byB0aGUgcGF0Y2ggbWVzc2FnZS4gc3RhdGUtPmF1dGhvcl9uYW1lLAorICogc3RhdGUtPmF1dGhvcl9lbWFpbCBhbmQgc3RhdGUtPmF1dGhvcl9kYXRlIHdpbGwgYmUgc2V0IHRvIHRoZSBwYXRjaCBhdXRob3IncworICogbmFtZSwgZW1haWwgYW5kIGRhdGUgcmVzcGVjdGl2ZWx5LiBUaGUgcGF0Y2ggYm9keSB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlCisgKiBzdGF0ZSBkaXJlY3RvcnkncyAicGF0Y2giIGZpbGUuCisgKgorICogUmV0dXJucyAxIGlmIHRoZSBwYXRjaCBzaG91bGQgYmUgc2tpcHBlZCwgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfbWFpbChzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICptYWlsKQoreworCUZJTEUgKmZwOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYXV0aG9yX25hbWUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGF1dGhvcl9kYXRlID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBhdXRob3JfZW1haWwgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbWFpbGluZm8gbWk7CisKKwlzZXR1cF9tYWlsaW5mbygmbWkpOworCisJaWYgKHN0YXRlLT51dGY4KQorCQltaS5tZXRhaW5mb19jaGFyc2V0ID0gZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKKwllbHNlCisJCW1pLm1ldGFpbmZvX2NoYXJzZXQgPSBOVUxMOworCisJc3dpdGNoIChzdGF0ZS0+a2VlcCkgeworCWNhc2UgS0VFUF9GQUxTRToKKwkJYnJlYWs7CisJY2FzZSBLRUVQX1RSVUU6CisJCW1pLmtlZXBfc3ViamVjdCA9IDE7CisJCWJyZWFrOworCWNhc2UgS0VFUF9OT05fUEFUQ0g6CisJCW1pLmtlZXBfbm9uX3BhdGNoX2JyYWNrZXRzX2luX3N1YmplY3QgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoImludmFsaWQgdmFsdWUgZm9yIHN0YXRlLT5rZWVwIik7CisJfQorCisJaWYgKHN0YXRlLT5tZXNzYWdlX2lkKQorCQltaS5hZGRfbWVzc2FnZV9pZCA9IDE7CisKKwlzd2l0Y2ggKHN0YXRlLT5zY2lzc29ycykgeworCWNhc2UgU0NJU1NPUlNfVU5TRVQ6CisJCWJyZWFrOworCWNhc2UgU0NJU1NPUlNfRkFMU0U6CisJCW1pLnVzZV9zY2lzc29ycyA9IDA7CisJCWJyZWFrOworCWNhc2UgU0NJU1NPUlNfVFJVRToKKwkJbWkudXNlX3NjaXNzb3JzID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCJpbnZhbGlkIHZhbHVlIGZvciBzdGF0ZS0+c2Npc3NvcnMiKTsKKwl9CisKKwltaS5pbnB1dCA9IHhmb3BlbihtYWlsLCAiciIpOworCW1pLm91dHB1dCA9IHhmb3BlbihhbV9wYXRoKHN0YXRlLCAiaW5mbyIpLCAidyIpOworCWlmIChtYWlsaW5mbygmbWksIGFtX3BhdGgoc3RhdGUsICJtc2ciKSwgYW1fcGF0aChzdGF0ZSwgInBhdGNoIikpKQorCQlkaWUoImNvdWxkIG5vdCBwYXJzZSBwYXRjaCIpOworCisJZmNsb3NlKG1pLmlucHV0KTsKKwlmY2xvc2UobWkub3V0cHV0KTsKKworCWlmIChtaS5mb3JtYXRfZmxvd2VkKQorCQl3YXJuaW5nKF8oIlBhdGNoIHNlbnQgd2l0aCBmb3JtYXQ9Zmxvd2VkOyAiCisJCQkgICJzcGFjZSBhdCB0aGUgZW5kIG9mIGxpbmVzIG1pZ2h0IGJlIGxvc3QuIikpOworCisJLyogRXh0cmFjdCBtZXNzYWdlIGFuZCBhdXRob3IgaW5mb3JtYXRpb24gKi8KKwlmcCA9IHhmb3BlbihhbV9wYXRoKHN0YXRlLCAiaW5mbyIpLCAiciIpOworCXdoaWxlICghc3RyYnVmX2dldGxpbmVfbGYoJnNiLCBmcCkpIHsKKwkJY29uc3QgY2hhciAqeDsKKworCQlpZiAoc2tpcF9wcmVmaXgoc2IuYnVmLCAiU3ViamVjdDogIiwgJngpKSB7CisJCQlpZiAobXNnLmxlbikKKwkJCQlzdHJidWZfYWRkY2goJm1zZywgJ1xuJyk7CisJCQlzdHJidWZfYWRkc3RyKCZtc2csIHgpOworCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KHNiLmJ1ZiwgIkF1dGhvcjogIiwgJngpKQorCQkJc3RyYnVmX2FkZHN0cigmYXV0aG9yX25hbWUsIHgpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChzYi5idWYsICJFbWFpbDogIiwgJngpKQorCQkJc3RyYnVmX2FkZHN0cigmYXV0aG9yX2VtYWlsLCB4KTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoc2IuYnVmLCAiRGF0ZTogIiwgJngpKQorCQkJc3RyYnVmX2FkZHN0cigmYXV0aG9yX2RhdGUsIHgpOworCX0KKwlmY2xvc2UoZnApOworCisJLyogU2tpcCBwaW5lJ3MgaW50ZXJuYWwgZm9sZGVyIGRhdGEgKi8KKwlpZiAoIXN0cmNtcChhdXRob3JfbmFtZS5idWYsICJNYWlsIFN5c3RlbSBJbnRlcm5hbCBEYXRhIikpIHsKKwkJcmV0ID0gMTsKKwkJZ290byBmaW5pc2g7CisJfQorCisJaWYgKGlzX2VtcHR5X29yX21pc3NpbmdfZmlsZShhbV9wYXRoKHN0YXRlLCAicGF0Y2giKSkpIHsKKwkJcHJpbnRmX2xuKF8oIlBhdGNoIGlzIGVtcHR5LiIpKTsKKwkJZGllX3VzZXJfcmVzb2x2ZShzdGF0ZSk7CisJfQorCisJc3RyYnVmX2FkZHN0cigmbXNnLCAiXG5cbiIpOworCXN0cmJ1Zl9hZGRidWYoJm1zZywgJm1pLmxvZ19tZXNzYWdlKTsKKwlzdHJidWZfc3RyaXBzcGFjZSgmbXNnLCAwKTsKKworCWFzc2VydCghc3RhdGUtPmF1dGhvcl9uYW1lKTsKKwlzdGF0ZS0+YXV0aG9yX25hbWUgPSBzdHJidWZfZGV0YWNoKCZhdXRob3JfbmFtZSwgTlVMTCk7CisKKwlhc3NlcnQoIXN0YXRlLT5hdXRob3JfZW1haWwpOworCXN0YXRlLT5hdXRob3JfZW1haWwgPSBzdHJidWZfZGV0YWNoKCZhdXRob3JfZW1haWwsIE5VTEwpOworCisJYXNzZXJ0KCFzdGF0ZS0+YXV0aG9yX2RhdGUpOworCXN0YXRlLT5hdXRob3JfZGF0ZSA9IHN0cmJ1Zl9kZXRhY2goJmF1dGhvcl9kYXRlLCBOVUxMKTsKKworCWFzc2VydCghc3RhdGUtPm1zZyk7CisJc3RhdGUtPm1zZyA9IHN0cmJ1Zl9kZXRhY2goJm1zZywgJnN0YXRlLT5tc2dfbGVuKTsKKworZmluaXNoOgorCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworCXN0cmJ1Zl9yZWxlYXNlKCZhdXRob3JfZGF0ZSk7CisJc3RyYnVmX3JlbGVhc2UoJmF1dGhvcl9lbWFpbCk7CisJc3RyYnVmX3JlbGVhc2UoJmF1dGhvcl9uYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWNsZWFyX21haWxpbmZvKCZtaSk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBTZXRzIGNvbW1pdF9pZCB0byB0aGUgY29tbWl0IGhhc2ggd2hlcmUgdGhlIG1haWwgd2FzIGdlbmVyYXRlZCBmcm9tLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X21haWxfY29tbWl0X29pZChzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXRfaWQsIGNvbnN0IGNoYXIgKm1haWwpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCUZJTEUgKmZwID0geGZvcGVuKG1haWwsICJyIik7CisJY29uc3QgY2hhciAqeDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChzdHJidWZfZ2V0bGluZV9sZigmc2IsIGZwKSB8fAorCSAgICAhc2tpcF9wcmVmaXgoc2IuYnVmLCAiRnJvbSAiLCAmeCkgfHwKKwkgICAgZ2V0X29pZF9oZXgoeCwgY29tbWl0X2lkKSA8IDApCisJCXJldCA9IC0xOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlmY2xvc2UoZnApOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogU2V0cyBzdGF0ZS0+bXNnLCBzdGF0ZS0+YXV0aG9yX25hbWUsIHN0YXRlLT5hdXRob3JfZW1haWwsIHN0YXRlLT5hdXRob3JfZGF0ZQorICogdG8gdGhlIGNvbW1pdCdzIHJlc3BlY3RpdmUgaW5mby4KKyAqLworc3RhdGljIHZvaWQgZ2V0X2NvbW1pdF9pbmZvKHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwljb25zdCBjaGFyICpidWZmZXIsICppZGVudF9saW5lLCAqbXNnOworCXNpemVfdCBpZGVudF9sZW47CisJc3RydWN0IGlkZW50X3NwbGl0IGlkOworCisJYnVmZmVyID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKSk7CisKKwlpZGVudF9saW5lID0gZmluZF9jb21taXRfaGVhZGVyKGJ1ZmZlciwgImF1dGhvciIsICZpZGVudF9sZW4pOworCWlmICghaWRlbnRfbGluZSkKKwkJZGllKF8oIm1pc3NpbmcgYXV0aG9yIGxpbmUgaW4gY29tbWl0ICVzIiksCisJCSAgICAgIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCWlmIChzcGxpdF9pZGVudF9saW5lKCZpZCwgaWRlbnRfbGluZSwgaWRlbnRfbGVuKSA8IDApCisJCWRpZShfKCJpbnZhbGlkIGlkZW50IGxpbmU6ICUuKnMiKSwgKGludClpZGVudF9sZW4sIGlkZW50X2xpbmUpOworCisJYXNzZXJ0KCFzdGF0ZS0+YXV0aG9yX25hbWUpOworCWlmIChpZC5uYW1lX2JlZ2luKQorCQlzdGF0ZS0+YXV0aG9yX25hbWUgPQorCQkJeG1lbWR1cHooaWQubmFtZV9iZWdpbiwgaWQubmFtZV9lbmQgLSBpZC5uYW1lX2JlZ2luKTsKKwllbHNlCisJCXN0YXRlLT5hdXRob3JfbmFtZSA9IHhzdHJkdXAoIiIpOworCisJYXNzZXJ0KCFzdGF0ZS0+YXV0aG9yX2VtYWlsKTsKKwlpZiAoaWQubWFpbF9iZWdpbikKKwkJc3RhdGUtPmF1dGhvcl9lbWFpbCA9CisJCQl4bWVtZHVweihpZC5tYWlsX2JlZ2luLCBpZC5tYWlsX2VuZCAtIGlkLm1haWxfYmVnaW4pOworCWVsc2UKKwkJc3RhdGUtPmF1dGhvcl9lbWFpbCA9IHhzdHJkdXAoIiIpOworCisJYXNzZXJ0KCFzdGF0ZS0+YXV0aG9yX2RhdGUpOworCXN0YXRlLT5hdXRob3JfZGF0ZSA9IHhzdHJkdXAoc2hvd19pZGVudF9kYXRlKCZpZCwgREFURV9NT0RFKE5PUk1BTCkpKTsKKworCWFzc2VydCghc3RhdGUtPm1zZyk7CisJbXNnID0gc3Ryc3RyKGJ1ZmZlciwgIlxuXG4iKTsKKwlpZiAoIW1zZykKKwkJZGllKF8oInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiKSwgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJc3RhdGUtPm1zZyA9IHhzdHJkdXAobXNnICsgMik7CisJc3RhdGUtPm1zZ19sZW4gPSBzdHJsZW4oc3RhdGUtPm1zZyk7CisJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIGJ1ZmZlcik7Cit9CisKKy8qKgorICogV3JpdGVzIGBjb21taXRgIGFzIGEgcGF0Y2ggdG8gdGhlIHN0YXRlIGRpcmVjdG9yeSdzICJwYXRjaCIgZmlsZS4KKyAqLworc3RhdGljIHZvaWQgd3JpdGVfY29tbWl0X3BhdGNoKGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2X2luZm87CisJRklMRSAqZnA7CisKKwlmcCA9IHhmb3BlbihhbV9wYXRoKHN0YXRlLCAicGF0Y2giKSwgInciKTsKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2X2luZm8sIE5VTEwpOworCXJldl9pbmZvLmRpZmYgPSAxOworCXJldl9pbmZvLmFiYnJldiA9IDA7CisJcmV2X2luZm8uZGlzYWJsZV9zdGRpbiA9IDE7CisJcmV2X2luZm8uc2hvd19yb290X2RpZmYgPSAxOworCXJldl9pbmZvLmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOworCXJldl9pbmZvLm5vX2NvbW1pdF9pZCA9IDE7CisJcmV2X2luZm8uZGlmZm9wdC5mbGFncy5iaW5hcnkgPSAxOworCXJldl9pbmZvLmRpZmZvcHQuZmxhZ3MuZnVsbF9pbmRleCA9IDE7CisJcmV2X2luZm8uZGlmZm9wdC51c2VfY29sb3IgPSAwOworCXJldl9pbmZvLmRpZmZvcHQuZmlsZSA9IGZwOworCXJldl9pbmZvLmRpZmZvcHQuY2xvc2VfZmlsZSA9IDE7CisJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXZfaW5mbywgJmNvbW1pdC0+b2JqZWN0LCAiIik7CisJZGlmZl9zZXR1cF9kb25lKCZyZXZfaW5mby5kaWZmb3B0KTsKKwlsb2dfdHJlZV9jb21taXQoJnJldl9pbmZvLCBjb21taXQpOworfQorCisvKioKKyAqIFdyaXRlcyB0aGUgZGlmZiBvZiB0aGUgaW5kZXggYWdhaW5zdCBIRUFEIGFzIGEgcGF0Y2ggdG8gdGhlIHN0YXRlCisgKiBkaXJlY3RvcnkncyAicGF0Y2giIGZpbGUuCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX2luZGV4X3BhdGNoKGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHRyZWUgKnRyZWU7CisJc3RydWN0IG9iamVjdF9pZCBoZWFkOworCXN0cnVjdCByZXZfaW5mbyByZXZfaW5mbzsKKwlGSUxFICpmcDsKKworCWlmICghZ2V0X29pZCgiSEVBRCIsICZoZWFkKSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0X29yX2RpZSgmaGVhZCwgIkhFQUQiKTsKKwkJdHJlZSA9IGdldF9jb21taXRfdHJlZShjb21taXQpOworCX0gZWxzZQorCQl0cmVlID0gbG9va3VwX3RyZWUodGhlX3JlcG9zaXRvcnksCisJCQkJICAgdGhlX3JlcG9zaXRvcnktPmhhc2hfYWxnby0+ZW1wdHlfdHJlZSk7CisKKwlmcCA9IHhmb3BlbihhbV9wYXRoKHN0YXRlLCAicGF0Y2giKSwgInciKTsKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2X2luZm8sIE5VTEwpOworCXJldl9pbmZvLmRpZmYgPSAxOworCXJldl9pbmZvLmRpc2FibGVfc3RkaW4gPSAxOworCXJldl9pbmZvLm5vX2NvbW1pdF9pZCA9IDE7CisJcmV2X2luZm8uZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisJcmV2X2luZm8uZGlmZm9wdC51c2VfY29sb3IgPSAwOworCXJldl9pbmZvLmRpZmZvcHQuZmlsZSA9IGZwOworCXJldl9pbmZvLmRpZmZvcHQuY2xvc2VfZmlsZSA9IDE7CisJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXZfaW5mbywgJnRyZWUtPm9iamVjdCwgIiIpOworCWRpZmZfc2V0dXBfZG9uZSgmcmV2X2luZm8uZGlmZm9wdCk7CisJcnVuX2RpZmZfaW5kZXgoJnJldl9pbmZvLCAxKTsKK30KKworLyoqCisgKiBMaWtlIHBhcnNlX21haWwoKSwgYnV0IHBhcnNlcyB0aGUgbWFpbCBieSBsb29raW5nIHVwIGl0cyBjb21taXQgSUQKKyAqIGRpcmVjdGx5LiBUaGlzIGlzIHVzZWQgaW4gLS1yZWJhc2luZyBtb2RlIHRvIGJ5cGFzcyBnaXQtbWFpbGluZm8ncyBtdW5naW5nCisgKiBvZiBwYXRjaGVzLgorICoKKyAqIHN0YXRlLT5vcmlnX2NvbW1pdCB3aWxsIGJlIHNldCB0byB0aGUgb3JpZ2luYWwgY29tbWl0IElELgorICoKKyAqIFdpbGwgYWx3YXlzIHJldHVybiAwIGFzIHRoZSBwYXRjaCBzaG91bGQgbmV2ZXIgYmUgc2tpcHBlZC4KKyAqLworc3RhdGljIGludCBwYXJzZV9tYWlsX3JlYmFzZShzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICptYWlsKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGNvbW1pdF9vaWQ7CisKKwlpZiAoZ2V0X21haWxfY29tbWl0X29pZCgmY29tbWl0X29pZCwgbWFpbCkgPCAwKQorCQlkaWUoXygiY291bGQgbm90IHBhcnNlICVzIiksIG1haWwpOworCisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9vcl9kaWUoJmNvbW1pdF9vaWQsIG1haWwpOworCisJZ2V0X2NvbW1pdF9pbmZvKHN0YXRlLCBjb21taXQpOworCisJd3JpdGVfY29tbWl0X3BhdGNoKHN0YXRlLCBjb21taXQpOworCisJb2lkY3B5KCZzdGF0ZS0+b3JpZ19jb21taXQsICZjb21taXRfb2lkKTsKKwl3cml0ZV9zdGF0ZV90ZXh0KHN0YXRlLCAib3JpZ2luYWwtY29tbWl0Iiwgb2lkX3RvX2hleCgmY29tbWl0X29pZCkpOworCXVwZGF0ZV9yZWYoImFtIiwgIlJFQkFTRV9IRUFEIiwgJmNvbW1pdF9vaWQsCisJCSAgIE5VTEwsIFJFRl9OT19ERVJFRiwgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBBcHBsaWVzIGN1cnJlbnQgcGF0Y2ggd2l0aCBnaXQtYXBwbHkuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuIElmCisgKiBgaW5kZXhfZmlsZWAgaXMgbm90IE5VTEwsIHRoZSBwYXRjaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhhdCBpbmRleC4KKyAqLworc3RhdGljIGludCBydW5fYXBwbHkoY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqaW5kZXhfZmlsZSkKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcHBseV9wYXRocyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcHBseV9vcHRzID0gQVJHVl9BUlJBWV9JTklUOworCXN0cnVjdCBhcHBseV9zdGF0ZSBhcHBseV9zdGF0ZTsKKwlpbnQgcmVzLCBvcHRzX2xlZnQ7CisJaW50IGZvcmNlX2FwcGx5ID0gMDsKKwlpbnQgb3B0aW9ucyA9IDA7CisKKwlpZiAoaW5pdF9hcHBseV9zdGF0ZSgmYXBwbHlfc3RhdGUsIHRoZV9yZXBvc2l0b3J5LCBOVUxMKSkKKwkJQlVHKCJpbml0X2FwcGx5X3N0YXRlKCkgZmFpbGVkIik7CisKKwlhcmd2X2FycmF5X3B1c2goJmFwcGx5X29wdHMsICJhcHBseSIpOworCWFyZ3ZfYXJyYXlfcHVzaHYoJmFwcGx5X29wdHMsIHN0YXRlLT5naXRfYXBwbHlfb3B0cy5hcmd2KTsKKworCW9wdHNfbGVmdCA9IGFwcGx5X3BhcnNlX29wdGlvbnMoYXBwbHlfb3B0cy5hcmdjLCBhcHBseV9vcHRzLmFyZ3YsCisJCQkJCSZhcHBseV9zdGF0ZSwgJmZvcmNlX2FwcGx5LCAmb3B0aW9ucywKKwkJCQkJTlVMTCk7CisKKwlpZiAob3B0c19sZWZ0ICE9IDApCisJCWRpZSgidW5rbm93biBvcHRpb24gcGFzc2VkIHRocm91Z2ggdG8gZ2l0IGFwcGx5Iik7CisKKwlpZiAoaW5kZXhfZmlsZSkgeworCQlhcHBseV9zdGF0ZS5pbmRleF9maWxlID0gaW5kZXhfZmlsZTsKKwkJYXBwbHlfc3RhdGUuY2FjaGVkID0gMTsKKwl9IGVsc2UKKwkJYXBwbHlfc3RhdGUuY2hlY2tfaW5kZXggPSAxOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgYWxsb3dlZCB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UsIGRvbid0IGdpdmUgZmFsc2UKKwkgKiBlcnJvcnMgZHVyaW5nIHRoZSBpbml0aWFsIGF0dGVtcHQuCisJICovCisJaWYgKHN0YXRlLT50aHJlZXdheSAmJiAhaW5kZXhfZmlsZSkKKwkJYXBwbHlfc3RhdGUuYXBwbHlfdmVyYm9zaXR5ID0gdmVyYm9zaXR5X3NpbGVudDsKKworCWlmIChjaGVja19hcHBseV9zdGF0ZSgmYXBwbHlfc3RhdGUsIGZvcmNlX2FwcGx5KSkKKwkJQlVHKCJjaGVja19hcHBseV9zdGF0ZSgpIGZhaWxlZCIpOworCisJYXJndl9hcnJheV9wdXNoKCZhcHBseV9wYXRocywgYW1fcGF0aChzdGF0ZSwgInBhdGNoIikpOworCisJcmVzID0gYXBwbHlfYWxsX3BhdGNoZXMoJmFwcGx5X3N0YXRlLCBhcHBseV9wYXRocy5hcmdjLCBhcHBseV9wYXRocy5hcmd2LCBvcHRpb25zKTsKKworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFwcGx5X3BhdGhzKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZhcHBseV9vcHRzKTsKKwljbGVhcl9hcHBseV9zdGF0ZSgmYXBwbHlfc3RhdGUpOworCisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCWlmIChpbmRleF9maWxlKSB7CisJCS8qIFJlbG9hZCBpbmRleCBhcyBhcHBseV9hbGxfcGF0Y2hlcygpIHdpbGwgaGF2ZSBtb2RpZmllZCBpdC4gKi8KKwkJZGlzY2FyZF9jYWNoZSgpOworCQlyZWFkX2NhY2hlX2Zyb20oaW5kZXhfZmlsZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQnVpbGRzIGFuIGluZGV4IHRoYXQgY29udGFpbnMganVzdCB0aGUgYmxvYnMgbmVlZGVkIGZvciBhIDN3YXkgbWVyZ2UuCisgKi8KK3N0YXRpYyBpbnQgYnVpbGRfZmFrZV9hbmNlc3Rvcihjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICppbmRleF9maWxlKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJY3AuZ2l0X2NtZCA9IDE7CisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiYXBwbHkiKTsKKwlhcmd2X2FycmF5X3B1c2h2KCZjcC5hcmdzLCBzdGF0ZS0+Z2l0X2FwcGx5X29wdHMuYXJndik7CisJYXJndl9hcnJheV9wdXNoZigmY3AuYXJncywgIi0tYnVpbGQtZmFrZS1hbmNlc3Rvcj0lcyIsIGluZGV4X2ZpbGUpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgYW1fcGF0aChzdGF0ZSwgInBhdGNoIikpOworCisJaWYgKHJ1bl9jb21tYW5kKCZjcCkpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIEF0dGVtcHQgYSB0aHJlZXdheSBtZXJnZSwgdXNpbmcgaW5kZXhfcGF0aCBhcyB0aGUgdGVtcG9yYXJ5IGluZGV4LgorICovCitzdGF0aWMgaW50IGZhbGxfYmFja190aHJlZXdheShjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICppbmRleF9wYXRoKQoreworCXN0cnVjdCBvYmplY3RfaWQgb3JpZ190cmVlLCB0aGVpcl90cmVlLCBvdXJfdHJlZTsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpiYXNlc1sxXSA9IHsgJm9yaWdfdHJlZSB9OworCXN0cnVjdCBtZXJnZV9vcHRpb25zIG87CisJc3RydWN0IGNvbW1pdCAqcmVzdWx0OworCWNoYXIgKnRoZWlyX3RyZWVfbmFtZTsKKworCWlmIChnZXRfb2lkKCJIRUFEIiwgJm91cl90cmVlKSA8IDApCisJCW9pZGNweSgmb3VyX3RyZWUsIHRoZV9oYXNoX2FsZ28tPmVtcHR5X3RyZWUpOworCisJaWYgKGJ1aWxkX2Zha2VfYW5jZXN0b3Ioc3RhdGUsIGluZGV4X3BhdGgpKQorCQlyZXR1cm4gZXJyb3IoImNvdWxkIG5vdCBidWlsZCBmYWtlIGFuY2VzdG9yIik7CisKKwlkaXNjYXJkX2NhY2hlKCk7CisJcmVhZF9jYWNoZV9mcm9tKGluZGV4X3BhdGgpOworCisJaWYgKHdyaXRlX2luZGV4X2FzX3RyZWUoJm9yaWdfdHJlZSwgJnRoZV9pbmRleCwgaW5kZXhfcGF0aCwgMCwgTlVMTCkpCisJCXJldHVybiBlcnJvcihfKCJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIikpOworCisJc2F5KHN0YXRlLCBzdGRvdXQsIF8oIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iKSk7CisKKwlpZiAoIXN0YXRlLT5xdWlldCkgeworCQkvKgorCQkgKiBMaXN0IHBhdGhzIHRoYXQgbmVlZGVkIDMtd2F5IGZhbGxiYWNrLCBzbyB0aGF0IHRoZSB1c2VyIGNhbgorCQkgKiByZXZpZXcgdGhlbSB3aXRoIGV4dHJhIGNhcmUgdG8gc3BvdCBtaXNtZXJnZXMuCisJCSAqLworCQlzdHJ1Y3QgcmV2X2luZm8gcmV2X2luZm87CisKKwkJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldl9pbmZvLCBOVUxMKTsKKwkJcmV2X2luZm8uZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTkFNRV9TVEFUVVM7CisJCXJldl9pbmZvLmRpZmZvcHQuZmlsdGVyIHw9IGRpZmZfZmlsdGVyX2JpdCgnQScpOworCQlyZXZfaW5mby5kaWZmb3B0LmZpbHRlciB8PSBkaWZmX2ZpbHRlcl9iaXQoJ00nKTsKKwkJYWRkX3BlbmRpbmdfb2lkKCZyZXZfaW5mbywgIkhFQUQiLCAmb3VyX3RyZWUsIDApOworCQlkaWZmX3NldHVwX2RvbmUoJnJldl9pbmZvLmRpZmZvcHQpOworCQlydW5fZGlmZl9pbmRleCgmcmV2X2luZm8sIDEpOworCX0KKworCWlmIChydW5fYXBwbHkoc3RhdGUsIGluZGV4X3BhdGgpKQorCQlyZXR1cm4gZXJyb3IoXygiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKwkJCQkiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIpKTsKKworCWlmICh3cml0ZV9pbmRleF9hc190cmVlKCZ0aGVpcl90cmVlLCAmdGhlX2luZGV4LCBpbmRleF9wYXRoLCAwLCBOVUxMKSkKKwkJcmV0dXJuIGVycm9yKCJjb3VsZCBub3Qgd3JpdGUgdHJlZSIpOworCisJc2F5KHN0YXRlLCBzdGRvdXQsIF8oIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIpKTsKKworCWRpc2NhcmRfY2FjaGUoKTsKKwlyZWFkX2NhY2hlKCk7CisKKwkvKgorCSAqIFRoaXMgaXMgbm90IHNvIHdyb25nLiBEZXBlbmRpbmcgb24gd2hpY2ggYmFzZSB3ZSBwaWNrZWQsIG9yaWdfdHJlZQorCSAqIG1heSBiZSB3aWxkbHkgZGlmZmVyZW50IGZyb20gb3VycywgYnV0IHRoZWlyX3RyZWUgaGFzIHRoZSBzYW1lIHNldCBvZgorCSAqIHdpbGRseSBkaWZmZXJlbnQgY2hhbmdlcyBpbiBwYXJ0cyB0aGUgcGF0Y2ggZGlkIG5vdCB0b3VjaCwgc28KKwkgKiByZWN1cnNpdmUgZW5kcyB1cCBjYW5jZWxpbmcgdGhlbSwgc2F5aW5nIHRoYXQgd2UgcmV2ZXJ0ZWQgYWxsIHRob3NlCisJICogY2hhbmdlcy4KKwkgKi8KKworCWluaXRfbWVyZ2Vfb3B0aW9ucygmbywgdGhlX3JlcG9zaXRvcnkpOworCisJby5icmFuY2gxID0gIkhFQUQiOworCXRoZWlyX3RyZWVfbmFtZSA9IHhzdHJmbXQoIiUuKnMiLCBsaW5lbGVuKHN0YXRlLT5tc2cpLCBzdGF0ZS0+bXNnKTsKKwlvLmJyYW5jaDIgPSB0aGVpcl90cmVlX25hbWU7CisJby5kZXRlY3RfZGlyZWN0b3J5X3JlbmFtZXMgPSBNRVJHRV9ESVJFQ1RPUllfUkVOQU1FU19OT05FOworCisJaWYgKHN0YXRlLT5xdWlldCkKKwkJby52ZXJib3NpdHkgPSAwOworCisJaWYgKG1lcmdlX3JlY3Vyc2l2ZV9nZW5lcmljKCZvLCAmb3VyX3RyZWUsICZ0aGVpcl90cmVlLCAxLCBiYXNlcywgJnJlc3VsdCkpIHsKKwkJcmVwb19yZXJlcmUodGhlX3JlcG9zaXRvcnksIHN0YXRlLT5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSk7CisJCWZyZWUodGhlaXJfdHJlZV9uYW1lKTsKKwkJcmV0dXJuIGVycm9yKF8oIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iKSk7CisJfQorCisJZnJlZSh0aGVpcl90cmVlX25hbWUpOworCXJldHVybiAwOworfQorCisvKioKKyAqIENvbW1pdHMgdGhlIGN1cnJlbnQgaW5kZXggd2l0aCBzdGF0ZS0+bXNnIGFzIHRoZSBjb21taXQgbWVzc2FnZSBhbmQKKyAqIHN0YXRlLT5hdXRob3JfbmFtZSwgc3RhdGUtPmF1dGhvcl9lbWFpbCBhbmQgc3RhdGUtPmF1dGhvcl9kYXRlIGFzIHRoZSBhdXRob3IKKyAqIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgdm9pZCBkb19jb21taXQoY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHRyZWUsIHBhcmVudCwgY29tbWl0OworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gTlVMTDsKKwljb25zdCBjaGFyICpyZWZsb2dfbXNnLCAqYXV0aG9yOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmIChydW5faG9va19sZShOVUxMLCAicHJlLWFwcGx5cGF0Y2giLCBOVUxMKSkKKwkJZXhpdCgxKTsKKworCWlmICh3cml0ZV9jYWNoZV9hc190cmVlKCZ0cmVlLCAwLCBOVUxMKSkKKwkJZGllKF8oImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiKSk7CisKKwlpZiAoIWdldF9vaWRfY29tbWl0KCJIRUFEIiwgJnBhcmVudCkpIHsKKwkJb2xkX29pZCA9ICZwYXJlbnQ7CisJCWNvbW1pdF9saXN0X2luc2VydChsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCAmcGFyZW50KSwKKwkJCQkgICAmcGFyZW50cyk7CisJfSBlbHNlIHsKKwkJb2xkX29pZCA9IE5VTEw7CisJCXNheShzdGF0ZSwgc3RkZXJyLCBfKCJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IikpOworCX0KKworCWF1dGhvciA9IGZtdF9pZGVudChzdGF0ZS0+YXV0aG9yX25hbWUsIHN0YXRlLT5hdXRob3JfZW1haWwsCisJCVdBTlRfQVVUSE9SX0lERU5ULAorCQkJc3RhdGUtPmlnbm9yZV9kYXRlID8gTlVMTCA6IHN0YXRlLT5hdXRob3JfZGF0ZSwKKwkJCUlERU5UX1NUUklDVCk7CisKKwlpZiAoc3RhdGUtPmNvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlKQorCQlzZXRlbnYoIkdJVF9DT01NSVRURVJfREFURSIsCisJCQlzdGF0ZS0+aWdub3JlX2RhdGUgPyAiIiA6IHN0YXRlLT5hdXRob3JfZGF0ZSwgMSk7CisKKwlpZiAoY29tbWl0X3RyZWUoc3RhdGUtPm1zZywgc3RhdGUtPm1zZ19sZW4sICZ0cmVlLCBwYXJlbnRzLCAmY29tbWl0LAorCQkJYXV0aG9yLCBzdGF0ZS0+c2lnbl9jb21taXQpKQorCQlkaWUoXygiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiKSk7CisKKwlyZWZsb2dfbXNnID0gZ2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIpOworCWlmICghcmVmbG9nX21zZykKKwkJcmVmbG9nX21zZyA9ICJhbSI7CisKKwlzdHJidWZfYWRkZigmc2IsICIlczogJS4qcyIsIHJlZmxvZ19tc2csIGxpbmVsZW4oc3RhdGUtPm1zZyksCisJCQlzdGF0ZS0+bXNnKTsKKworCXVwZGF0ZV9yZWYoc2IuYnVmLCAiSEVBRCIsICZjb21taXQsIG9sZF9vaWQsIDAsCisJCSAgIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCisJaWYgKHN0YXRlLT5yZWJhc2luZykgeworCQlGSUxFICpmcCA9IHhmb3BlbihhbV9wYXRoKHN0YXRlLCAicmV3cml0dGVuIiksICJhIik7CisKKwkJYXNzZXJ0KCFpc19udWxsX29pZCgmc3RhdGUtPm9yaWdfY29tbWl0KSk7CisJCWZwcmludGYoZnAsICIlcyAiLCBvaWRfdG9faGV4KCZzdGF0ZS0+b3JpZ19jb21taXQpKTsKKwkJZnByaW50ZihmcCwgIiVzXG4iLCBvaWRfdG9faGV4KCZjb21taXQpKTsKKwkJZmNsb3NlKGZwKTsKKwl9CisKKwlydW5faG9va19sZShOVUxMLCAicG9zdC1hcHBseXBhdGNoIiwgTlVMTCk7CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCisvKioKKyAqIFZhbGlkYXRlcyB0aGUgYW1fc3RhdGUgZm9yIHJlc3VtaW5nIC0tIHRoZSAibXNnIiBhbmQgYXV0aG9yc2hpcCBmaWVsZHMgbXVzdAorICogYmUgZmlsbGVkIHVwLgorICovCitzdGF0aWMgdm9pZCB2YWxpZGF0ZV9yZXN1bWVfc3RhdGUoY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoIXN0YXRlLT5tc2cpCisJCWRpZShfKCJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iKSwKKwkJCWFtX3BhdGgoc3RhdGUsICJmaW5hbC1jb21taXQiKSk7CisKKwlpZiAoIXN0YXRlLT5hdXRob3JfbmFtZSB8fCAhc3RhdGUtPmF1dGhvcl9lbWFpbCB8fCAhc3RhdGUtPmF1dGhvcl9kYXRlKQorCQlkaWUoXygiY2Fubm90IHJlc3VtZTogJXMgZG9lcyBub3QgZXhpc3QuIiksCisJCQlhbV9wYXRoKHN0YXRlLCAiYXV0aG9yLXNjcmlwdCIpKTsKK30KKworLyoqCisgKiBJbnRlcmFjdGl2ZWx5IHByb21wdCB0aGUgdXNlciBvbiB3aGV0aGVyIHRoZSBjdXJyZW50IHBhdGNoIHNob3VsZCBiZQorICogYXBwbGllZC4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIHVzZXIgY2hvb3NlcyB0byBhcHBseSB0aGUgcGF0Y2gsIDEgaWYgdGhlIHVzZXIgY2hvb3NlcyB0bworICogc2tpcCBpdC4KKyAqLworc3RhdGljIGludCBkb19pbnRlcmFjdGl2ZShzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlKQoreworCWFzc2VydChzdGF0ZS0+bXNnKTsKKworCWZvciAoOzspIHsKKwkJY2hhciByZXBseVs2NF07CisKKwkJcHV0cyhfKCJDb21taXQgQm9keSBpczoiKSk7CisJCXB1dHMoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisJCXByaW50ZigiJXMiLCBzdGF0ZS0+bXNnKTsKKwkJcHV0cygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKworCQkvKgorCQkgKiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKwkJICogaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisJCSAqIGlucHV0IGF0IHRoaXMgcG9pbnQuCisJCSAqLworCQlwcmludGYoXygiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIpKTsKKwkJaWYgKCFmZ2V0cyhyZXBseSwgc2l6ZW9mKHJlcGx5KSwgc3RkaW4pKQorCQkJZGllKCJ1bmFibGUgdG8gcmVhZCBmcm9tIHN0ZGluOyBhYm9ydGluZyIpOworCisJCWlmICgqcmVwbHkgPT0gJ3knIHx8ICpyZXBseSA9PSAnWScpIHsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKCpyZXBseSA9PSAnYScgfHwgKnJlcGx5ID09ICdBJykgeworCQkJc3RhdGUtPmludGVyYWN0aXZlID0gMDsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKCpyZXBseSA9PSAnbicgfHwgKnJlcGx5ID09ICdOJykgeworCQkJcmV0dXJuIDE7CisJCX0gZWxzZSBpZiAoKnJlcGx5ID09ICdlJyB8fCAqcmVwbHkgPT0gJ0UnKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCisJCQlpZiAoIWxhdW5jaF9lZGl0b3IoYW1fcGF0aChzdGF0ZSwgImZpbmFsLWNvbW1pdCIpLCAmbXNnLCBOVUxMKSkgeworCQkJCWZyZWUoc3RhdGUtPm1zZyk7CisJCQkJc3RhdGUtPm1zZyA9IHN0cmJ1Zl9kZXRhY2goJm1zZywgJnN0YXRlLT5tc2dfbGVuKTsKKwkJCX0KKwkJCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworCQl9IGVsc2UgaWYgKCpyZXBseSA9PSAndicgfHwgKnJlcGx5ID09ICdWJykgeworCQkJY29uc3QgY2hhciAqcGFnZXIgPSBnaXRfcGFnZXIoMSk7CisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQkJaWYgKCFwYWdlcikKKwkJCQlwYWdlciA9ICJjYXQiOworCQkJcHJlcGFyZV9wYWdlcl9hcmdzKCZjcCwgcGFnZXIpOworCQkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBhbV9wYXRoKHN0YXRlLCAicGF0Y2giKSk7CisJCQlydW5fY29tbWFuZCgmY3ApOworCQl9CisJfQorfQorCisvKioKKyAqIEFwcGxpZXMgYWxsIHF1ZXVlZCBtYWlsLgorICoKKyAqIElmIGByZXN1bWVgIGlzIHRydWUsIHdlIGFyZSAicmVzdW1pbmciLiBUaGUgIm1zZyIgYW5kIGF1dGhvcnNoaXAgZmllbGRzLCBhcworICogd2VsbCBhcyB0aGUgc3RhdGUgZGlyZWN0b3J5J3MgInBhdGNoIiBmaWxlIGlzIHVzZWQgYXMtaXMgZm9yIGFwcGx5aW5nIHRoZQorICogcGF0Y2ggYW5kIGNvbW1pdHRpbmcgaXQuCisgKi8KK3N0YXRpYyB2b2lkIGFtX3J1bihzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBpbnQgcmVzdW1lKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCXVubGluayhhbV9wYXRoKHN0YXRlLCAiZGlydHlpbmRleCIpKTsKKworCWlmIChyZWZyZXNoX2FuZF93cml0ZV9jYWNoZShSRUZSRVNIX1FVSUVULCAwLCAwKSA8IDApCisJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIpKTsKKworCWlmIChyZXBvX2luZGV4X2hhc19jaGFuZ2VzKHRoZV9yZXBvc2l0b3J5LCBOVUxMLCAmc2IpKSB7CisJCXdyaXRlX3N0YXRlX2Jvb2woc3RhdGUsICJkaXJ0eWluZGV4IiwgMSk7CisJCWRpZShfKCJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAlcykiKSwgc2IuYnVmKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJd2hpbGUgKHN0YXRlLT5jdXIgPD0gc3RhdGUtPmxhc3QpIHsKKwkJY29uc3QgY2hhciAqbWFpbCA9IGFtX3BhdGgoc3RhdGUsIG1zZ251bShzdGF0ZSkpOworCQlpbnQgYXBwbHlfc3RhdHVzOworCisJCXJlc2V0X2lkZW50X2RhdGUoKTsKKworCQlpZiAoIWZpbGVfZXhpc3RzKG1haWwpKQorCQkJZ290byBuZXh0OworCisJCWlmIChyZXN1bWUpIHsKKwkJCXZhbGlkYXRlX3Jlc3VtZV9zdGF0ZShzdGF0ZSk7CisJCX0gZWxzZSB7CisJCQlpbnQgc2tpcDsKKworCQkJaWYgKHN0YXRlLT5yZWJhc2luZykKKwkJCQlza2lwID0gcGFyc2VfbWFpbF9yZWJhc2Uoc3RhdGUsIG1haWwpOworCQkJZWxzZQorCQkJCXNraXAgPSBwYXJzZV9tYWlsKHN0YXRlLCBtYWlsKTsKKworCQkJaWYgKHNraXApCisJCQkJZ290byBuZXh0OyAvKiBtYWlsIHNob3VsZCBiZSBza2lwcGVkICovCisKKwkJCWlmIChzdGF0ZS0+c2lnbm9mZikKKwkJCQlhbV9hcHBlbmRfc2lnbm9mZihzdGF0ZSk7CisKKwkJCXdyaXRlX2F1dGhvcl9zY3JpcHQoc3RhdGUpOworCQkJd3JpdGVfY29tbWl0X21zZyhzdGF0ZSk7CisJCX0KKworCQlpZiAoc3RhdGUtPmludGVyYWN0aXZlICYmIGRvX2ludGVyYWN0aXZlKHN0YXRlKSkKKwkJCWdvdG8gbmV4dDsKKworCQlpZiAocnVuX2FwcGx5cGF0Y2hfbXNnX2hvb2soc3RhdGUpKQorCQkJZXhpdCgxKTsKKworCQlzYXkoc3RhdGUsIHN0ZG91dCwgXygiQXBwbHlpbmc6ICUuKnMiKSwgbGluZWxlbihzdGF0ZS0+bXNnKSwgc3RhdGUtPm1zZyk7CisKKwkJYXBwbHlfc3RhdHVzID0gcnVuX2FwcGx5KHN0YXRlLCBOVUxMKTsKKworCQlpZiAoYXBwbHlfc3RhdHVzICYmIHN0YXRlLT50aHJlZXdheSkgeworCQkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCQlzdHJidWZfYWRkc3RyKCZzYiwgYW1fcGF0aChzdGF0ZSwgInBhdGNoLW1lcmdlLWluZGV4IikpOworCQkJYXBwbHlfc3RhdHVzID0gZmFsbF9iYWNrX3RocmVld2F5KHN0YXRlLCBzYi5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCQkJLyoKKwkJCSAqIEFwcGx5aW5nIHRoZSBwYXRjaCB0byBhbiBlYXJsaWVyIHRyZWUgYW5kIG1lcmdpbmcKKwkJCSAqIHRoZSByZXN1bHQgbWF5IGhhdmUgcHJvZHVjZWQgdGhlIHNhbWUgdHJlZSBhcyBvdXJzLgorCQkJICovCisJCQlpZiAoIWFwcGx5X3N0YXR1cyAmJgorCQkJICAgICFyZXBvX2luZGV4X2hhc19jaGFuZ2VzKHRoZV9yZXBvc2l0b3J5LCBOVUxMLCBOVUxMKSkgeworCQkJCXNheShzdGF0ZSwgc3Rkb3V0LCBfKCJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iKSk7CisJCQkJZ290byBuZXh0OworCQkJfQorCQl9CisKKwkJaWYgKGFwcGx5X3N0YXR1cykgeworCQkJcHJpbnRmX2xuKF8oIlBhdGNoIGZhaWxlZCBhdCAlcyAlLipzIiksIG1zZ251bShzdGF0ZSksCisJCQkJbGluZWxlbihzdGF0ZS0+bXNnKSwgc3RhdGUtPm1zZyk7CisKKwkJCWlmIChhZHZpY2VfYW13b3JrZGlyKQorCQkJCWFkdmlzZShfKCJVc2UgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaD1kaWZmJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIpKTsKKworCQkJZGllX3VzZXJfcmVzb2x2ZShzdGF0ZSk7CisJCX0KKworCQlkb19jb21taXQoc3RhdGUpOworCituZXh0OgorCQlhbV9uZXh0KHN0YXRlKTsKKworCQlpZiAocmVzdW1lKQorCQkJYW1fbG9hZChzdGF0ZSk7CisJCXJlc3VtZSA9IDA7CisJfQorCisJaWYgKCFpc19lbXB0eV9vcl9taXNzaW5nX2ZpbGUoYW1fcGF0aChzdGF0ZSwgInJld3JpdHRlbiIpKSkgeworCQlhc3NlcnQoc3RhdGUtPnJlYmFzaW5nKTsKKwkJY29weV9ub3Rlc19mb3JfcmViYXNlKHN0YXRlKTsKKwkJcnVuX3Bvc3RfcmV3cml0ZV9ob29rKHN0YXRlKTsKKwl9CisKKwkvKgorCSAqIEluIHJlYmFzaW5nIG1vZGUsIGl0J3MgdXAgdG8gdGhlIGNhbGxlciB0byB0YWtlIGNhcmUgb2YKKwkgKiBob3VzZWtlZXBpbmcuCisJICovCisJaWYgKCFzdGF0ZS0+cmViYXNpbmcpIHsKKwkJYW1fZGVzdHJveShzdGF0ZSk7CisJCWNsb3NlX29iamVjdF9zdG9yZSh0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cyk7CisJCXJ1bl9hdXRvX2djKHN0YXRlLT5xdWlldCk7CisJfQorfQorCisvKioKKyAqIFJlc3VtZSB0aGUgY3VycmVudCBhbSBzZXNzaW9uIGFmdGVyIHBhdGNoIGFwcGxpY2F0aW9uIGZhaWx1cmUuIFRoZSB1c2VyIGRpZAorICogYWxsIHRoZSBoYXJkIHdvcmssIGFuZCB3ZSBkbyBub3QgaGF2ZSB0byBkbyBhbnkgcGF0Y2ggYXBwbGljYXRpb24uIEp1c3QKKyAqIHRydXN0IGFuZCBjb21taXQgd2hhdCB0aGUgdXNlciBoYXMgaW4gdGhlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkIGFtX3Jlc29sdmUoc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwl2YWxpZGF0ZV9yZXN1bWVfc3RhdGUoc3RhdGUpOworCisJc2F5KHN0YXRlLCBzdGRvdXQsIF8oIkFwcGx5aW5nOiAlLipzIiksIGxpbmVsZW4oc3RhdGUtPm1zZyksIHN0YXRlLT5tc2cpOworCisJaWYgKCFyZXBvX2luZGV4X2hhc19jaGFuZ2VzKHRoZV9yZXBvc2l0b3J5LCBOVUxMLCBOVUxMKSkgeworCQlwcmludGZfbG4oXygiTm8gY2hhbmdlcyAtIGRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/XG4iCisJCQkiSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlXG4iCisJCQkiYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZXM7IHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyBwYXRjaC4iKSk7CisJCWRpZV91c2VyX3Jlc29sdmUoc3RhdGUpOworCX0KKworCWlmICh1bm1lcmdlZF9jYWNoZSgpKSB7CisJCXByaW50Zl9sbihfKCJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4LlxuIgorCQkJIllvdSBzaG91bGQgJ2dpdCBhZGQnIGVhY2ggZmlsZSB3aXRoIHJlc29sdmVkIGNvbmZsaWN0cyB0byBtYXJrIHRoZW0gYXMgc3VjaC5cbiIKKwkJCSJZb3UgbWlnaHQgcnVuIGBnaXQgcm1gIG9uIGEgZmlsZSB0byBhY2NlcHQgXCJkZWxldGVkIGJ5IHRoZW1cIiBmb3IgaXQuIikpOworCQlkaWVfdXNlcl9yZXNvbHZlKHN0YXRlKTsKKwl9CisKKwlpZiAoc3RhdGUtPmludGVyYWN0aXZlKSB7CisJCXdyaXRlX2luZGV4X3BhdGNoKHN0YXRlKTsKKwkJaWYgKGRvX2ludGVyYWN0aXZlKHN0YXRlKSkKKwkJCWdvdG8gbmV4dDsKKwl9CisKKwlyZXBvX3JlcmVyZSh0aGVfcmVwb3NpdG9yeSwgMCk7CisKKwlkb19jb21taXQoc3RhdGUpOworCituZXh0OgorCWFtX25leHQoc3RhdGUpOworCWFtX2xvYWQoc3RhdGUpOworCWFtX3J1bihzdGF0ZSwgMCk7Cit9CisKKy8qKgorICogUGVyZm9ybXMgYSBjaGVja291dCBmYXN0LWZvcndhcmQgZnJvbSBgaGVhZGAgdG8gYHJlbW90ZWAuIElmIGByZXNldGAgaXMKKyAqIHRydWUsIGFueSB1bm1lcmdlZCBlbnRyaWVzIHdpbGwgYmUgZGlzY2FyZGVkLiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24KKyAqIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgZmFzdF9mb3J3YXJkX3RvKHN0cnVjdCB0cmVlICpoZWFkLCBzdHJ1Y3QgdHJlZSAqcmVtb3RlLCBpbnQgcmVzZXQpCit7CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGUgPSBMT0NLX0lOSVQ7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJc3RydWN0IHRyZWVfZGVzYyB0WzJdOworCisJaWYgKHBhcnNlX3RyZWUoaGVhZCkgfHwgcGFyc2VfdHJlZShyZW1vdGUpKQorCQlyZXR1cm4gLTE7CisKKwlob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCBMT0NLX0RJRV9PTl9FUlJPUik7CisKKwlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuaGVhZF9pZHggPSAxOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy51cGRhdGUgPSAxOworCW9wdHMubWVyZ2UgPSAxOworCW9wdHMucmVzZXQgPSByZXNldDsKKwlvcHRzLmZuID0gdHdvd2F5X21lcmdlOworCWluaXRfdHJlZV9kZXNjKCZ0WzBdLCBoZWFkLT5idWZmZXIsIGhlYWQtPnNpemUpOworCWluaXRfdHJlZV9kZXNjKCZ0WzFdLCByZW1vdGUtPmJ1ZmZlciwgcmVtb3RlLT5zaXplKTsKKworCWlmICh1bnBhY2tfdHJlZXMoMiwgdCwgJm9wdHMpKSB7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9ja19maWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmxvY2tfZmlsZSwgQ09NTUlUX0xPQ0spKQorCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogTWVyZ2VzIGEgdHJlZSBpbnRvIHRoZSBpbmRleC4gVGhlIGluZGV4J3Mgc3RhdCBpbmZvIHdpbGwgdGFrZSBwcmVjZWRlbmNlCisgKiBvdmVyIHRoZSBtZXJnZWQgdHJlZSdzLiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBtZXJnZV90cmVlKHN0cnVjdCB0cmVlICp0cmVlKQoreworCXN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlID0gTE9DS19JTklUOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCXN0cnVjdCB0cmVlX2Rlc2MgdFsxXTsKKworCWlmIChwYXJzZV90cmVlKHRyZWUpKQorCQlyZXR1cm4gLTE7CisKKwlob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCBMT0NLX0RJRV9PTl9FUlJPUik7CisKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJb3B0cy5oZWFkX2lkeCA9IDE7CisJb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLm1lcmdlID0gMTsKKwlvcHRzLmZuID0gb25ld2F5X21lcmdlOworCWluaXRfdHJlZV9kZXNjKCZ0WzBdLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCisJaWYgKHVucGFja190cmVlcygxLCB0LCAmb3B0cykpIHsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrX2ZpbGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDbGVhbiB0aGUgaW5kZXggd2l0aG91dCB0b3VjaGluZyBlbnRyaWVzIHRoYXQgYXJlIG5vdCBtb2RpZmllZCBiZXR3ZWVuCisgKiBgaGVhZGAgYW5kIGByZW1vdGVgLgorICovCitzdGF0aWMgaW50IGNsZWFuX2luZGV4KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmhlYWQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnJlbW90ZSkKK3sKKwlzdHJ1Y3QgdHJlZSAqaGVhZF90cmVlLCAqcmVtb3RlX3RyZWUsICppbmRleF90cmVlOworCXN0cnVjdCBvYmplY3RfaWQgaW5kZXg7CisKKwloZWFkX3RyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KGhlYWQpOworCWlmICghaGVhZF90cmVlKQorCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIpLCBvaWRfdG9faGV4KGhlYWQpKTsKKworCXJlbW90ZV90cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChyZW1vdGUpOworCWlmICghcmVtb3RlX3RyZWUpCisJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIiksIG9pZF90b19oZXgocmVtb3RlKSk7CisKKwlyZWFkX2NhY2hlX3VubWVyZ2VkKCk7CisKKwlpZiAoZmFzdF9mb3J3YXJkX3RvKGhlYWRfdHJlZSwgaGVhZF90cmVlLCAxKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHdyaXRlX2NhY2hlX2FzX3RyZWUoJmluZGV4LCAwLCBOVUxMKSkKKwkJcmV0dXJuIC0xOworCisJaW5kZXhfdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoJmluZGV4KTsKKwlpZiAoIWluZGV4X3RyZWUpCisJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIiksIG9pZF90b19oZXgoJmluZGV4KSk7CisKKwlpZiAoZmFzdF9mb3J3YXJkX3RvKGluZGV4X3RyZWUsIHJlbW90ZV90cmVlLCAwKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKG1lcmdlX3RyZWUocmVtb3RlX3RyZWUpKQorCQlyZXR1cm4gLTE7CisKKwlyZW1vdmVfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5LCAwKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFJlc2V0cyByZXJlcmUncyBtZXJnZSByZXNvbHV0aW9uIG1ldGFkYXRhLgorICovCitzdGF0aWMgdm9pZCBhbV9yZXJlcmVfY2xlYXIodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWVyZ2VfcnIgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlyZXJlcmVfY2xlYXIodGhlX3JlcG9zaXRvcnksICZtZXJnZV9ycik7CisJc3RyaW5nX2xpc3RfY2xlYXIoJm1lcmdlX3JyLCAxKTsKK30KKworLyoqCisgKiBSZXN1bWUgdGhlIGN1cnJlbnQgYW0gc2Vzc2lvbiBieSBza2lwcGluZyB0aGUgY3VycmVudCBwYXRjaC4KKyAqLworc3RhdGljIHZvaWQgYW1fc2tpcChzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBvYmplY3RfaWQgaGVhZDsKKworCWFtX3JlcmVyZV9jbGVhcigpOworCisJaWYgKGdldF9vaWQoIkhFQUQiLCAmaGVhZCkpCisJCW9pZGNweSgmaGVhZCwgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSk7CisKKwlpZiAoY2xlYW5faW5kZXgoJmhlYWQsICZoZWFkKSkKKwkJZGllKF8oImZhaWxlZCB0byBjbGVhbiBpbmRleCIpKTsKKworCWlmIChzdGF0ZS0+cmViYXNpbmcpIHsKKwkJRklMRSAqZnAgPSB4Zm9wZW4oYW1fcGF0aChzdGF0ZSwgInJld3JpdHRlbiIpLCAiYSIpOworCisJCWFzc2VydCghaXNfbnVsbF9vaWQoJnN0YXRlLT5vcmlnX2NvbW1pdCkpOworCQlmcHJpbnRmKGZwLCAiJXMgIiwgb2lkX3RvX2hleCgmc3RhdGUtPm9yaWdfY29tbWl0KSk7CisJCWZwcmludGYoZnAsICIlc1xuIiwgb2lkX3RvX2hleCgmaGVhZCkpOworCQlmY2xvc2UoZnApOworCX0KKworCWFtX25leHQoc3RhdGUpOworCWFtX2xvYWQoc3RhdGUpOworCWFtX3J1bihzdGF0ZSwgMCk7Cit9CisKKy8qKgorICogUmV0dXJucyB0cnVlIGlmIGl0IGlzIHNhZmUgdG8gcmVzZXQgSEVBRCB0byB0aGUgT1JJR19IRUFELCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogSXQgaXMgbm90IHNhZmUgdG8gcmVzZXQgSEVBRCB3aGVuOgorICogMS4gZ2l0LWFtIHByZXZpb3VzbHkgZmFpbGVkIGJlY2F1c2UgdGhlIGluZGV4IHdhcyBkaXJ0eS4KKyAqIDIuIEhFQUQgaGFzIG1vdmVkIHNpbmNlIGdpdC1hbSBwcmV2aW91c2x5IGZhaWxlZC4KKyAqLworc3RhdGljIGludCBzYWZlX3RvX2Fib3J0KGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgYWJvcnRfc2FmZXR5LCBoZWFkOworCisJaWYgKGZpbGVfZXhpc3RzKGFtX3BhdGgoc3RhdGUsICJkaXJ0eWluZGV4IikpKQorCQlyZXR1cm4gMDsKKworCWlmIChyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgImFib3J0LXNhZmV0eSIsIDEpID4gMCkgeworCQlpZiAoZ2V0X29pZF9oZXgoc2IuYnVmLCAmYWJvcnRfc2FmZXR5KSkKKwkJCWRpZShfKCJjb3VsZCBub3QgcGFyc2UgJXMiKSwgYW1fcGF0aChzdGF0ZSwgImFib3J0LXNhZmV0eSIpKTsKKwl9IGVsc2UKKwkJb2lkY2xyKCZhYm9ydF9zYWZldHkpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwlpZiAoZ2V0X29pZCgiSEVBRCIsICZoZWFkKSkKKwkJb2lkY2xyKCZoZWFkKTsKKworCWlmIChvaWRlcSgmaGVhZCwgJmFib3J0X3NhZmV0eSkpCisJCXJldHVybiAxOworCisJd2FybmluZyhfKCJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorCQkiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBBYm9ydHMgdGhlIGN1cnJlbnQgYW0gc2Vzc2lvbiBpZiBpdCBpcyBzYWZlIHRvIGRvIHNvLgorICovCitzdGF0aWMgdm9pZCBhbV9hYm9ydChzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBvYmplY3RfaWQgY3Vycl9oZWFkLCBvcmlnX2hlYWQ7CisJaW50IGhhc19jdXJyX2hlYWQsIGhhc19vcmlnX2hlYWQ7CisJY2hhciAqY3Vycl9icmFuY2g7CisKKwlpZiAoIXNhZmVfdG9fYWJvcnQoc3RhdGUpKSB7CisJCWFtX2Rlc3Ryb3koc3RhdGUpOworCQlyZXR1cm47CisJfQorCisJYW1fcmVyZXJlX2NsZWFyKCk7CisKKwljdXJyX2JyYW5jaCA9IHJlc29sdmVfcmVmZHVwKCJIRUFEIiwgMCwgJmN1cnJfaGVhZCwgTlVMTCk7CisJaGFzX2N1cnJfaGVhZCA9IGN1cnJfYnJhbmNoICYmICFpc19udWxsX29pZCgmY3Vycl9oZWFkKTsKKwlpZiAoIWhhc19jdXJyX2hlYWQpCisJCW9pZGNweSgmY3Vycl9oZWFkLCB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlKTsKKworCWhhc19vcmlnX2hlYWQgPSAhZ2V0X29pZCgiT1JJR19IRUFEIiwgJm9yaWdfaGVhZCk7CisJaWYgKCFoYXNfb3JpZ19oZWFkKQorCQlvaWRjcHkoJm9yaWdfaGVhZCwgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSk7CisKKwljbGVhbl9pbmRleCgmY3Vycl9oZWFkLCAmb3JpZ19oZWFkKTsKKworCWlmIChoYXNfb3JpZ19oZWFkKQorCQl1cGRhdGVfcmVmKCJhbSAtLWFib3J0IiwgIkhFQUQiLCAmb3JpZ19oZWFkLAorCQkJICAgaGFzX2N1cnJfaGVhZCA/ICZjdXJyX2hlYWQgOiBOVUxMLCAwLAorCQkJICAgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisJZWxzZSBpZiAoY3Vycl9icmFuY2gpCisJCWRlbGV0ZV9yZWYoTlVMTCwgY3Vycl9icmFuY2gsIE5VTEwsIFJFRl9OT19ERVJFRik7CisKKwlmcmVlKGN1cnJfYnJhbmNoKTsKKwlhbV9kZXN0cm95KHN0YXRlKTsKK30KKworc3RhdGljIGludCBzaG93X3BhdGNoKHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsIGVudW0gc2hvd19wYXRjaF90eXBlIHN1Yl9tb2RlKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpwYXRjaF9wYXRoOworCWludCBsZW47CisKKwlpZiAoIWlzX251bGxfb2lkKCZzdGF0ZS0+b3JpZ19jb21taXQpKSB7CisJCWNvbnN0IGNoYXIgKmF2WzRdID0geyAic2hvdyIsIE5VTEwsICItLSIsIE5VTEwgfTsKKwkJY2hhciAqbmV3X29pZF9zdHI7CisJCWludCByZXQ7CisKKwkJYXZbMV0gPSBuZXdfb2lkX3N0ciA9IHhzdHJkdXAob2lkX3RvX2hleCgmc3RhdGUtPm9yaWdfY29tbWl0KSk7CisJCXJldCA9IHJ1bl9jb21tYW5kX3Zfb3B0KGF2LCBSVU5fR0lUX0NNRCk7CisJCWZyZWUobmV3X29pZF9zdHIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXN3aXRjaCAoc3ViX21vZGUpIHsKKwljYXNlIFNIT1dfUEFUQ0hfUkFXOgorCQlwYXRjaF9wYXRoID0gYW1fcGF0aChzdGF0ZSwgbXNnbnVtKHN0YXRlKSk7CisJCWJyZWFrOworCWNhc2UgU0hPV19QQVRDSF9ESUZGOgorCQlwYXRjaF9wYXRoID0gYW1fcGF0aChzdGF0ZSwgInBhdGNoIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygiaW52YWxpZCBtb2RlIGZvciAtLXNob3ctY3VycmVudC1wYXRjaCIpOworCX0KKworCWxlbiA9IHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBwYXRjaF9wYXRoLCAwKTsKKwlpZiAobGVuIDwgMCkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byByZWFkICclcyciKSwgcGF0Y2hfcGF0aCk7CisKKwlzZXR1cF9wYWdlcigpOworCXdyaXRlX2luX2Z1bGwoMSwgc2IuYnVmLCBzYi5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGFyc2Vfb3B0aW9ucygpIGNhbGxiYWNrIHRoYXQgdmFsaWRhdGVzIGFuZCBzZXRzIG9wdC0+dmFsdWUgdG8gdGhlCisgKiBQQVRDSF9GT1JNQVRfKiBlbnVtIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYGFyZ2AuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2Vfb3B0X3BhdGNoZm9ybWF0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50ICpvcHRfdmFsdWUgPSBvcHQtPnZhbHVlOworCisJaWYgKHVuc2V0KQorCQkqb3B0X3ZhbHVlID0gUEFUQ0hfRk9STUFUX1VOS05PV047CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJtYm94IikpCisJCSpvcHRfdmFsdWUgPSBQQVRDSF9GT1JNQVRfTUJPWDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInN0Z2l0IikpCisJCSpvcHRfdmFsdWUgPSBQQVRDSF9GT1JNQVRfU1RHSVQ7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJzdGdpdC1zZXJpZXMiKSkKKwkJKm9wdF92YWx1ZSA9IFBBVENIX0ZPUk1BVF9TVEdJVF9TRVJJRVM7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJoZyIpKQorCQkqb3B0X3ZhbHVlID0gUEFUQ0hfRk9STUFUX0hHOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAibWJveHJkIikpCisJCSpvcHRfdmFsdWUgPSBQQVRDSF9GT1JNQVRfTUJPWFJEOworCS8qCisJICogUGxlYXNlIHVwZGF0ZSAkX19naXRfcGF0Y2hmb3JtYXQgaW4gZ2l0LWNvbXBsZXRpb24uYmFzaAorCSAqIHdoZW4geW91IGFkZCBuZXcgb3B0aW9ucworCSAqLworCWVsc2UKKwkJcmV0dXJuIGVycm9yKF8oIkludmFsaWQgdmFsdWUgZm9yIC0tcGF0Y2gtZm9ybWF0OiAlcyIpLCBhcmcpOworCXJldHVybiAwOworfQorCitlbnVtIHJlc3VtZV90eXBlIHsKKwlSRVNVTUVfRkFMU0UgPSAwLAorCVJFU1VNRV9BUFBMWSwKKwlSRVNVTUVfUkVTT0xWRUQsCisJUkVTVU1FX1NLSVAsCisJUkVTVU1FX0FCT1JULAorCVJFU1VNRV9RVUlULAorCVJFU1VNRV9TSE9XX1BBVENICit9OworCitzdHJ1Y3QgcmVzdW1lX21vZGUgeworCWVudW0gcmVzdW1lX3R5cGUgbW9kZTsKKwllbnVtIHNob3dfcGF0Y2hfdHlwZSBzdWJfbW9kZTsKK307CisKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0X3Nob3dfY3VycmVudF9wYXRjaChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWludCAqb3B0X3ZhbHVlID0gb3B0LT52YWx1ZTsKKwlzdHJ1Y3QgcmVzdW1lX21vZGUgKnJlc3VtZSA9IGNvbnRhaW5lcl9vZihvcHRfdmFsdWUsIHN0cnVjdCByZXN1bWVfbW9kZSwgbW9kZSk7CisKKwkvKgorCSAqIFBsZWFzZSB1cGRhdGUgJF9fZ2l0X3Nob3djdXJyZW50cGF0Y2ggaW4gZ2l0LWNvbXBsZXRpb24uYmFzaAorCSAqIHdoZW4geW91IGFkZCBuZXcgb3B0aW9ucworCSAqLworCWNvbnN0IGNoYXIgKnZhbGlkX21vZGVzW10gPSB7CisJCVtTSE9XX1BBVENIX0RJRkZdID0gImRpZmYiLAorCQlbU0hPV19QQVRDSF9SQVddID0gInJhdyIKKwl9OworCWludCBuZXdfdmFsdWUgPSBTSE9XX1BBVENIX1JBVzsKKworCWlmIChhcmcpIHsKKwkJZm9yIChuZXdfdmFsdWUgPSAwOyBuZXdfdmFsdWUgPCBBUlJBWV9TSVpFKHZhbGlkX21vZGVzKTsgbmV3X3ZhbHVlKyspIHsKKwkJCWlmICghc3RyY21wKGFyZywgdmFsaWRfbW9kZXNbbmV3X3ZhbHVlXSkpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKG5ld192YWx1ZSA+PSBBUlJBWV9TSVpFKHZhbGlkX21vZGVzKSkKKwkJCXJldHVybiBlcnJvcihfKCJJbnZhbGlkIHZhbHVlIGZvciAtLXNob3ctY3VycmVudC1wYXRjaDogJXMiKSwgYXJnKTsKKwl9CisKKwlpZiAocmVzdW1lLT5tb2RlID09IFJFU1VNRV9TSE9XX1BBVENIICYmIG5ld192YWx1ZSAhPSByZXN1bWUtPnN1Yl9tb2RlKQorCQlyZXR1cm4gZXJyb3IoXygiLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMgaXMgaW5jb21wYXRpYmxlIHdpdGggIgorCQkJICAgICAgICItLXNob3ctY3VycmVudC1wYXRjaD0lcyIpLAorCQkJICAgICBhcmcsIHZhbGlkX21vZGVzW3Jlc3VtZS0+c3ViX21vZGVdKTsKKworCXJlc3VtZS0+bW9kZSA9IFJFU1VNRV9TSE9XX1BBVENIOworCXJlc3VtZS0+c3ViX21vZGUgPSBuZXdfdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2FtX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gZ2l0X2dwZ19jb25maWcoaywgdiwgTlVMTCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcoaywgdiwgTlVMTCk7Cit9CisKK2ludCBjbWRfYW0oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGFtX3N0YXRlIHN0YXRlOworCWludCBiaW5hcnkgPSAtMTsKKwlpbnQga2VlcF9jciA9IC0xOworCWludCBwYXRjaF9mb3JtYXQgPSBQQVRDSF9GT1JNQVRfVU5LTk9XTjsKKwlzdHJ1Y3QgcmVzdW1lX21vZGUgcmVzdW1lID0geyAubW9kZSA9IFJFU1VNRV9GQUxTRSB9OworCWludCBpbl9wcm9ncmVzczsKKwlpbnQgcmV0ID0gMDsKKworCWNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZVtdID0geworCQlOXygiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iKSwKKwkJTl8oImdpdCBhbSBbPG9wdGlvbnM+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIiksCisJCU5VTEwKKwl9OworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdpJywgImludGVyYWN0aXZlIiwgJnN0YXRlLmludGVyYWN0aXZlLAorCQkJTl8oInJ1biBpbnRlcmFjdGl2ZWx5IikpLAorCQlPUFRfSElEREVOX0JPT0woJ2InLCAiYmluYXJ5IiwgJmJpbmFyeSwKKwkJCU5fKCJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIpKSwKKwkJT1BUX0JPT0woJzMnLCAiM3dheSIsICZzdGF0ZS50aHJlZXdheSwKKwkJCU5fKCJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIpKSwKKwkJT1BUX19RVUlFVCgmc3RhdGUucXVpZXQsIE5fKCJiZSBxdWlldCIpKSwKKwkJT1BUX1NFVF9JTlQoJ3MnLCAic2lnbm9mZiIsICZzdGF0ZS5zaWdub2ZmLAorCQkJTl8oImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiKSwKKwkJCVNJR05PRkZfRVhQTElDSVQpLAorCQlPUFRfQk9PTCgndScsICJ1dGY4IiwgJnN0YXRlLnV0ZjgsCisJCQlOXygicmVjb2RlIGludG8gdXRmOCAoZGVmYXVsdCkiKSksCisJCU9QVF9TRVRfSU5UKCdrJywgImtlZXAiLCAmc3RhdGUua2VlcCwKKwkJCU5fKCJwYXNzIC1rIGZsYWcgdG8gZ2l0LW1haWxpbmZvIiksIEtFRVBfVFJVRSksCisJCU9QVF9TRVRfSU5UKDAsICJrZWVwLW5vbi1wYXRjaCIsICZzdGF0ZS5rZWVwLAorCQkJTl8oInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iKSwgS0VFUF9OT05fUEFUQ0gpLAorCQlPUFRfQk9PTCgnbScsICJtZXNzYWdlLWlkIiwgJnN0YXRlLm1lc3NhZ2VfaWQsCisJCQlOXygicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIpKSwKKwkJT1BUX1NFVF9JTlRfRigwLCAia2VlcC1jciIsICZrZWVwX2NyLAorCQkJTl8oInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiKSwKKwkJCTEsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9TRVRfSU5UX0YoMCwgIm5vLWtlZXAtY3IiLCAma2VlcF9jciwKKwkJCU5fKCJkbyBub3QgcGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGluZGVwZW5kZW50IG9mIGFtLmtlZXBjciIpLAorCQkJMCwgUEFSU0VfT1BUX05PTkVHKSwKKwkJT1BUX0JPT0woJ2MnLCAic2Npc3NvcnMiLCAmc3RhdGUuc2Npc3NvcnMsCisJCQlOXygic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIikpLAorCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAid2hpdGVzcGFjZSIsICZzdGF0ZS5naXRfYXBwbHlfb3B0cywgTl8oImFjdGlvbiIpLAorCQkJTl8oInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiKSwKKwkJCTApLAorCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAiaWdub3JlLXNwYWNlLWNoYW5nZSIsICZzdGF0ZS5naXRfYXBwbHlfb3B0cywgTlVMTCwKKwkJCU5fKCJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IiksCisJCQlQQVJTRV9PUFRfTk9BUkcpLAorCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAiaWdub3JlLXdoaXRlc3BhY2UiLCAmc3RhdGUuZ2l0X2FwcGx5X29wdHMsIE5VTEwsCisJCQlOXygicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIpLAorCQkJUEFSU0VfT1BUX05PQVJHKSwKKwkJT1BUX1BBU1NUSFJVX0FSR1YoMCwgImRpcmVjdG9yeSIsICZzdGF0ZS5naXRfYXBwbHlfb3B0cywgTl8oInJvb3QiKSwKKwkJCU5fKCJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IiksCisJCQkwKSwKKwkJT1BUX1BBU1NUSFJVX0FSR1YoMCwgImV4Y2x1ZGUiLCAmc3RhdGUuZ2l0X2FwcGx5X29wdHMsIE5fKCJwYXRoIiksCisJCQlOXygicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIpLAorCQkJMCksCisJCU9QVF9QQVNTVEhSVV9BUkdWKDAsICJpbmNsdWRlIiwgJnN0YXRlLmdpdF9hcHBseV9vcHRzLCBOXygicGF0aCIpLAorCQkJTl8oInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiKSwKKwkJCTApLAorCQlPUFRfUEFTU1RIUlVfQVJHVignQycsIE5VTEwsICZzdGF0ZS5naXRfYXBwbHlfb3B0cywgTl8oIm4iKSwKKwkJCU5fKCJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IiksCisJCQkwKSwKKwkJT1BUX1BBU1NUSFJVX0FSR1YoJ3AnLCBOVUxMLCAmc3RhdGUuZ2l0X2FwcGx5X29wdHMsIE5fKCJudW0iKSwKKwkJCU5fKCJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IiksCisJCQkwKSwKKwkJT1BUX0NBTExCQUNLKDAsICJwYXRjaC1mb3JtYXQiLCAmcGF0Y2hfZm9ybWF0LCBOXygiZm9ybWF0IiksCisJCQlOXygiZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluIiksCisJCQlwYXJzZV9vcHRfcGF0Y2hmb3JtYXQpLAorCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAicmVqZWN0IiwgJnN0YXRlLmdpdF9hcHBseV9vcHRzLCBOVUxMLAorCQkJTl8oInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyksCisJCU9QVF9TVFJJTkcoMCwgInJlc29sdmVtc2ciLCAmc3RhdGUucmVzb2x2ZW1zZywgTlVMTCwKKwkJCU5fKCJvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMiKSksCisJCU9QVF9DTURNT0RFKDAsICJjb250aW51ZSIsICZyZXN1bWUubW9kZSwKKwkJCU5fKCJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IiksCisJCQlSRVNVTUVfUkVTT0xWRUQpLAorCQlPUFRfQ01ETU9ERSgncicsICJyZXNvbHZlZCIsICZyZXN1bWUubW9kZSwKKwkJCU5fKCJzeW5vbnltcyBmb3IgLS1jb250aW51ZSIpLAorCQkJUkVTVU1FX1JFU09MVkVEKSwKKwkJT1BUX0NNRE1PREUoMCwgInNraXAiLCAmcmVzdW1lLm1vZGUsCisJCQlOXygic2tpcCB0aGUgY3VycmVudCBwYXRjaCIpLAorCQkJUkVTVU1FX1NLSVApLAorCQlPUFRfQ01ETU9ERSgwLCAiYWJvcnQiLCAmcmVzdW1lLm1vZGUsCisJCQlOXygicmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLiIpLAorCQkJUkVTVU1FX0FCT1JUKSwKKwkJT1BUX0NNRE1PREUoMCwgInF1aXQiLCAmcmVzdW1lLm1vZGUsCisJCQlOXygiYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbiBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzLiIpLAorCQkJUkVTVU1FX1FVSVQpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInNob3ctY3VycmVudC1wYXRjaCIsICZyZXN1bWUubW9kZSwKKwkJICAiKGRpZmZ8cmF3KSIsCisJCSAgTl8oInNob3cgdGhlIHBhdGNoIGJlaW5nIGFwcGxpZWQiKSwKKwkJICBQQVJTRV9PUFRfQ01ETU9ERSB8IFBBUlNFX09QVF9PUFRBUkcgfCBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQLAorCQkgIHBhcnNlX29wdF9zaG93X2N1cnJlbnRfcGF0Y2gsIFJFU1VNRV9TSE9XX1BBVENIIH0sCisJCU9QVF9CT09MKDAsICJjb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSIsCisJCQkmc3RhdGUuY29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGUsCisJCQlOXygibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIikpLAorCQlPUFRfQk9PTCgwLCAiaWdub3JlLWRhdGUiLCAmc3RhdGUuaWdub3JlX2RhdGUsCisJCQlOXygidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIpKSwKKwkJT1BUX1JFUkVSRV9BVVRPVVBEQVRFKCZzdGF0ZS5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSksCisJCXsgT1BUSU9OX1NUUklORywgJ1MnLCAiZ3BnLXNpZ24iLCAmc3RhdGUuc2lnbl9jb21taXQsIE5fKCJrZXktaWQiKSwKKwkJICBOXygiR1BHLXNpZ24gY29tbWl0cyIpLAorCQkgIFBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdCkgIiIgfSwKKwkJT1BUX0hJRERFTl9CT09MKDAsICJyZWJhc2luZyIsICZzdGF0ZS5yZWJhc2luZywKKwkJCU5fKCIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVzYWdlLCBvcHRpb25zKTsKKworCWdpdF9jb25maWcoZ2l0X2FtX2NvbmZpZywgTlVMTCk7CisKKwlhbV9zdGF0ZV9pbml0KCZzdGF0ZSk7CisKKwlpbl9wcm9ncmVzcyA9IGFtX2luX3Byb2dyZXNzKCZzdGF0ZSk7CisJaWYgKGluX3Byb2dyZXNzKQorCQlhbV9sb2FkKCZzdGF0ZSk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHVzYWdlLCAwKTsKKworCWlmIChiaW5hcnkgPj0gMCkKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmRcbiIKKwkJCQkiaXQgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdCBhbnltb3JlLiIpKTsKKworCS8qIEVuc3VyZSBhIHZhbGlkIGNvbW1pdHRlciBpZGVudCBjYW4gYmUgY29uc3RydWN0ZWQgKi8KKwlnaXRfY29tbWl0dGVyX2luZm8oSURFTlRfU1RSSUNUKTsKKworCWlmIChyZXBvX3JlYWRfaW5kZXhfcHJlbG9hZCh0aGVfcmVwb3NpdG9yeSwgTlVMTCwgMCkgPCAwKQorCQlkaWUoXygiZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IikpOworCisJaWYgKGluX3Byb2dyZXNzKSB7CisJCS8qCisJCSAqIENhdGNoIHVzZXIgZXJyb3IgdG8gZmVlZCB1cyBwYXRjaGVzIHdoZW4gdGhlcmUgaXMgYSBzZXNzaW9uCisJCSAqIGluIHByb2dyZXNzOgorCQkgKgorCQkgKiAxLiBtYm94IHBhdGgocykgYXJlIHByb3ZpZGVkIG9uIHRoZSBjb21tYW5kLWxpbmUuCisJCSAqIDIuIHN0ZGluIGlzIG5vdCBhIHR0eTogdGhlIHVzZXIgaXMgdHJ5aW5nIHRvIGZlZWQgdXMgYSBwYXRjaAorCQkgKiAgICBmcm9tIHN0YW5kYXJkIGlucHV0LiBUaGlzIGlzIHNvbWV3aGF0IHVucmVsaWFibGUgLS0gc3RkaW4KKwkJICogICAgY291bGQgYmUgL2Rldi9udWxsIGZvciBleGFtcGxlIGFuZCB0aGUgY2FsbGVyIGRpZCBub3QKKwkJICogICAgaW50ZW5kIHRvIGZlZWQgdXMgYSBwYXRjaCBidXQgd2FudGVkIHRvIGNvbnRpbnVlCisJCSAqICAgIHVuYXR0ZW5kZWQuCisJCSAqLworCQlpZiAoYXJnYyB8fCAocmVzdW1lLm1vZGUgPT0gUkVTVU1FX0ZBTFNFICYmICFpc2F0dHkoMCkpKQorCQkJZGllKF8oInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJXMgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIpLAorCQkJCXN0YXRlLmRpcik7CisKKwkJaWYgKHJlc3VtZS5tb2RlID09IFJFU1VNRV9GQUxTRSkKKwkJCXJlc3VtZS5tb2RlID0gUkVTVU1FX0FQUExZOworCisJCWlmIChzdGF0ZS5zaWdub2ZmID09IFNJR05PRkZfRVhQTElDSVQpCisJCQlhbV9hcHBlbmRfc2lnbm9mZigmc3RhdGUpOworCX0gZWxzZSB7CisJCXN0cnVjdCBhcmd2X2FycmF5IHBhdGhzID0gQVJHVl9BUlJBWV9JTklUOworCQlpbnQgaTsKKworCQkvKgorCQkgKiBIYW5kbGUgc3RyYXkgc3RhdGUgZGlyZWN0b3J5IGluIHRoZSBpbmRlcGVuZGVudC1ydW4gY2FzZS4gSW4KKwkJICogdGhlIC0tcmViYXNpbmcgY2FzZSwgaXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byB0YWtlIGNhcmUgb2YKKwkJICogc3RyYXkgZGlyZWN0b3JpZXMuCisJCSAqLworCQlpZiAoZmlsZV9leGlzdHMoc3RhdGUuZGlyKSAmJiAhc3RhdGUucmViYXNpbmcpIHsKKwkJCWlmIChyZXN1bWUubW9kZSA9PSBSRVNVTUVfQUJPUlQgfHwgcmVzdW1lLm1vZGUgPT0gUkVTVU1FX1FVSVQpIHsKKwkJCQlhbV9kZXN0cm95KCZzdGF0ZSk7CisJCQkJYW1fc3RhdGVfcmVsZWFzZSgmc3RhdGUpOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlkaWUoXygiU3RyYXkgJXMgZGlyZWN0b3J5IGZvdW5kLlxuIgorCQkJCSJVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlbW92ZSBpdC4iKSwKKwkJCQlzdGF0ZS5kaXIpOworCQl9CisKKwkJaWYgKHJlc3VtZS5tb2RlKQorCQkJZGllKF8oIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iKSk7CisKKwkJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQkJaWYgKGlzX2Fic29sdXRlX3BhdGgoYXJndltpXSkgfHwgIXByZWZpeCkKKwkJCQlhcmd2X2FycmF5X3B1c2goJnBhdGhzLCBhcmd2W2ldKTsKKwkJCWVsc2UKKwkJCQlhcmd2X2FycmF5X3B1c2goJnBhdGhzLCBta3BhdGgoIiVzLyVzIiwgcHJlZml4LCBhcmd2W2ldKSk7CisJCX0KKworCQlpZiAoc3RhdGUuaW50ZXJhY3RpdmUgJiYgIXBhdGhzLmFyZ2MpCisJCQlkaWUoXygiaW50ZXJhY3RpdmUgbW9kZSByZXF1aXJlcyBwYXRjaGVzIG9uIHRoZSBjb21tYW5kIGxpbmUiKSk7CisKKwkJYW1fc2V0dXAoJnN0YXRlLCBwYXRjaF9mb3JtYXQsIHBhdGhzLmFyZ3YsIGtlZXBfY3IpOworCisJCWFyZ3ZfYXJyYXlfY2xlYXIoJnBhdGhzKTsKKwl9CisKKwlzd2l0Y2ggKHJlc3VtZS5tb2RlKSB7CisJY2FzZSBSRVNVTUVfRkFMU0U6CisJCWFtX3J1bigmc3RhdGUsIDApOworCQlicmVhazsKKwljYXNlIFJFU1VNRV9BUFBMWToKKwkJYW1fcnVuKCZzdGF0ZSwgMSk7CisJCWJyZWFrOworCWNhc2UgUkVTVU1FX1JFU09MVkVEOgorCQlhbV9yZXNvbHZlKCZzdGF0ZSk7CisJCWJyZWFrOworCWNhc2UgUkVTVU1FX1NLSVA6CisJCWFtX3NraXAoJnN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBSRVNVTUVfQUJPUlQ6CisJCWFtX2Fib3J0KCZzdGF0ZSk7CisJCWJyZWFrOworCWNhc2UgUkVTVU1FX1FVSVQ6CisJCWFtX3JlcmVyZV9jbGVhcigpOworCQlhbV9kZXN0cm95KCZzdGF0ZSk7CisJCWJyZWFrOworCWNhc2UgUkVTVU1FX1NIT1dfUEFUQ0g6CisJCXJldCA9IHNob3dfcGF0Y2goJnN0YXRlLCByZXN1bWUuc3ViX21vZGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoImludmFsaWQgcmVzdW1lIHZhbHVlIik7CisJfQorCisJYW1fc3RhdGVfcmVsZWFzZSgmc3RhdGUpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vYW5ub3RhdGUuYyBiL2J1aWx0aW4vYW5ub3RhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTQxM2FlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9hbm5vdGF0ZS5jCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiAiZ2l0IGFubm90YXRlIiBidWlsdGluIGFsaWFzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFJ5YW4gQW5kZXJzb24KKyAqLworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisKK2ludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlpbnQgaTsKKworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3MsICJhbm5vdGF0ZSIsICItYyIsIE5VTEwpOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIGFyZ3ZbaV0pOworCX0KKworCXJldHVybiBjbWRfYmxhbWUoYXJncy5hcmdjLCBhcmdzLmFyZ3YsIHByZWZpeCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2FwcGx5LmMgYi9idWlsdGluL2FwcGx5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwOTliOQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vYXBwbHkuYwpAQCAtMCwwICsxLDM0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiYXBwbHkuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhcHBseV91c2FnZVtdID0geworCU5fKCJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIiksCisJTlVMTAorfTsKKworaW50IGNtZF9hcHBseShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgZm9yY2VfYXBwbHkgPSAwOworCWludCBvcHRpb25zID0gMDsKKwlpbnQgcmV0OworCXN0cnVjdCBhcHBseV9zdGF0ZSBzdGF0ZTsKKworCWlmIChpbml0X2FwcGx5X3N0YXRlKCZzdGF0ZSwgdGhlX3JlcG9zaXRvcnksIHByZWZpeCkpCisJCWV4aXQoMTI4KTsKKworCWFyZ2MgPSBhcHBseV9wYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsCisJCQkJICAgJnN0YXRlLCAmZm9yY2VfYXBwbHksICZvcHRpb25zLAorCQkJCSAgIGFwcGx5X3VzYWdlKTsKKworCWlmIChjaGVja19hcHBseV9zdGF0ZSgmc3RhdGUsIGZvcmNlX2FwcGx5KSkKKwkJZXhpdCgxMjgpOworCisJcmV0ID0gYXBwbHlfYWxsX3BhdGNoZXMoJnN0YXRlLCBhcmdjLCBhcmd2LCBvcHRpb25zKTsKKworCWNsZWFyX2FwcGx5X3N0YXRlKCZzdGF0ZSk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9hcmNoaXZlLmMgYi9idWlsdGluL2FyY2hpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWQxMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9hcmNoaXZlLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgRnJhbmNrIEJ1aS1IdXUKKyAqIENvcHlyaWdodCAoYykgMjAwNiBSZW5lIFNjaGFyZmUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImFyY2hpdmUuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorCitzdGF0aWMgdm9pZCBjcmVhdGVfb3V0cHV0X2ZpbGUoY29uc3QgY2hhciAqb3V0cHV0X2ZpbGUpCit7CisJaW50IG91dHB1dF9mZCA9IG9wZW4ob3V0cHV0X2ZpbGUsIE9fQ1JFQVQgfCBPX1dST05MWSB8IE9fVFJVTkMsIDA2NjYpOworCWlmIChvdXRwdXRfZmQgPCAwKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIpLCBvdXRwdXRfZmlsZSk7CisJaWYgKG91dHB1dF9mZCAhPSAxKSB7CisJCWlmIChkdXAyKG91dHB1dF9mZCwgMSkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiKSk7CisJCWVsc2UKKwkJCWNsb3NlKG91dHB1dF9mZCk7CisJfQorfQorCitzdGF0aWMgaW50IHJ1bl9yZW1vdGVfYXJjaGl2ZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnJlbW90ZSwgY29uc3QgY2hhciAqZXhlYywKKwkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lX2hpbnQpCit7CisJaW50IGZkWzJdLCBpLCBydjsKKwlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CisJc3RydWN0IHJlbW90ZSAqX3JlbW90ZTsKKwlzdHJ1Y3QgcGFja2V0X3JlYWRlciByZWFkZXI7CisKKwlfcmVtb3RlID0gcmVtb3RlX2dldChyZW1vdGUpOworCWlmICghX3JlbW90ZS0+dXJsWzBdKQorCQlkaWUoXygiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIpKTsKKwl0cmFuc3BvcnQgPSB0cmFuc3BvcnRfZ2V0KF9yZW1vdGUsIF9yZW1vdGUtPnVybFswXSk7CisJdHJhbnNwb3J0X2Nvbm5lY3QodHJhbnNwb3J0LCAiZ2l0LXVwbG9hZC1hcmNoaXZlIiwgZXhlYywgZmQpOworCisJLyoKKwkgKiBJbmplY3QgYSBmYWtlIC0tZm9ybWF0IGZpZWxkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisJICogYXJndW1lbnRzLCB3aXRoIHRoZSBmb3JtYXQgaW5mZXJyZWQgZnJvbSBvdXIgb3V0cHV0CisJICogZmlsZW5hbWUuIFRoaXMgd2F5IGV4cGxpY2l0IC0tZm9ybWF0IG9wdGlvbnMgY2FuIG92ZXJyaWRlCisJICogaXQuCisJICovCisJaWYgKG5hbWVfaGludCkgeworCQljb25zdCBjaGFyICpmb3JtYXQgPSBhcmNoaXZlX2Zvcm1hdF9mcm9tX2ZpbGVuYW1lKG5hbWVfaGludCk7CisJCWlmIChmb3JtYXQpCisJCQlwYWNrZXRfd3JpdGVfZm10KGZkWzFdLCAiYXJndW1lbnQgLS1mb3JtYXQ9JXNcbiIsIGZvcm1hdCk7CisJfQorCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisJCXBhY2tldF93cml0ZV9mbXQoZmRbMV0sICJhcmd1bWVudCAlc1xuIiwgYXJndltpXSk7CisJcGFja2V0X2ZsdXNoKGZkWzFdKTsKKworCXBhY2tldF9yZWFkZXJfaW5pdCgmcmVhZGVyLCBmZFswXSwgTlVMTCwgMCwKKwkJCSAgIFBBQ0tFVF9SRUFEX0NIT01QX05FV0xJTkUgfAorCQkJICAgUEFDS0VUX1JFQURfRElFX09OX0VSUl9QQUNLRVQpOworCisJaWYgKHBhY2tldF9yZWFkZXJfcmVhZCgmcmVhZGVyKSAhPSBQQUNLRVRfUkVBRF9OT1JNQUwpCisJCWRpZShfKCJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IikpOworCWlmIChzdHJjbXAocmVhZGVyLmxpbmUsICJBQ0siKSkgeworCQlpZiAoc3RhcnRzX3dpdGgocmVhZGVyLmxpbmUsICJOQUNLICIpKQorCQkJZGllKF8oImdpdCBhcmNoaXZlOiBOQUNLICVzIiksIHJlYWRlci5saW5lICsgNSk7CisJCWRpZShfKCJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiKSk7CisJfQorCisJaWYgKHBhY2tldF9yZWFkZXJfcmVhZCgmcmVhZGVyKSAhPSBQQUNLRVRfUkVBRF9GTFVTSCkKKwkJZGllKF8oImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIikpOworCisJLyogTm93LCBzdGFydCByZWFkaW5nIGZyb20gZmRbMF0gYW5kIHNwaXQgaXQgb3V0IHRvIHN0ZG91dCAqLworCXJ2ID0gcmVjdl9zaWRlYmFuZCgiYXJjaGl2ZSIsIGZkWzBdLCAxKTsKKwlydiB8PSB0cmFuc3BvcnRfZGlzY29ubmVjdCh0cmFuc3BvcnQpOworCisJcmV0dXJuICEhcnY7Cit9CisKKyNkZWZpbmUgUEFSU0VfT1BUX0tFRVBfQUxMICggUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggfCAJXAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCB8IAlcCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX1VOS05PV04gfAlcCisJCQkgICAgIFBBUlNFX09QVF9OT19JTlRFUk5BTF9IRUxQCSkKKworaW50IGNtZF9hcmNoaXZlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKmV4ZWMgPSAiZ2l0LXVwbG9hZC1hcmNoaXZlIjsKKwljb25zdCBjaGFyICpvdXRwdXQgPSBOVUxMOworCWNvbnN0IGNoYXIgKnJlbW90ZSA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBsb2NhbF9vcHRzW10gPSB7CisJCU9QVF9GSUxFTkFNRSgnbycsICJvdXRwdXQiLCAmb3V0cHV0LAorCQkJICAgICBOXygid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIikpLAorCQlPUFRfU1RSSU5HKDAsICJyZW1vdGUiLCAmcmVtb3RlLCBOXygicmVwbyIpLAorCQkJTl8oInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IikpLAorCQlPUFRfU1RSSU5HKDAsICJleGVjIiwgJmV4ZWMsIE5fKCJjb21tYW5kIiksCisJCQlOXygicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBsb2NhbF9vcHRzLCBOVUxMLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BTEwpOworCisJaW5pdF9hcmNoaXZlcnMoKTsKKworCWlmIChvdXRwdXQpCisJCWNyZWF0ZV9vdXRwdXRfZmlsZShvdXRwdXQpOworCisJaWYgKHJlbW90ZSkKKwkJcmV0dXJuIHJ1bl9yZW1vdGVfYXJjaGl2ZXIoYXJnYywgYXJndiwgcmVtb3RlLCBleGVjLCBvdXRwdXQpOworCisJc2V0dmJ1ZihzdGRlcnIsIE5VTEwsIF9JT0xCRiwgQlVGU0laKTsKKworCXJldHVybiB3cml0ZV9hcmNoaXZlKGFyZ2MsIGFyZ3YsIHByZWZpeCwgdGhlX3JlcG9zaXRvcnksIG91dHB1dCwgMCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2Jpc2VjdC0taGVscGVyLmMgYi9idWlsdGluL2Jpc2VjdC0taGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjNDBiNQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYwpAQCAtMCwwICsxLDcyNiBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJiaXNlY3QuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicHJvbXB0LmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKworc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfYmlzZWN0X3Rlcm1zLCAiQklTRUNUX1RFUk1TIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2Jpc2VjdF9leHBlY3RlZF9yZXYsICJCSVNFQ1RfRVhQRUNURURfUkVWIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2Jpc2VjdF9hbmNlc3RvcnNfb2ssICJCSVNFQ1RfQU5DRVNUT1JTX09LIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2Jpc2VjdF9zdGFydCwgIkJJU0VDVF9TVEFSVCIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF9iaXNlY3RfaGVhZCwgIkJJU0VDVF9IRUFEIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2Jpc2VjdF9sb2csICJCSVNFQ1RfTE9HIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2hlYWRfbmFtZSwgImhlYWQtbmFtZSIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF9iaXNlY3RfbmFtZXMsICJCSVNFQ1RfTkFNRVMiKQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9iaXNlY3RfaGVscGVyX3VzYWdlW10gPSB7CisJTl8oImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIpLAorCU5fKCJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8YmFkX3Rlcm0+IDxnb29kX3Rlcm0+IiksCisJTl8oImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIpLAorCU5fKCJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzxjb21taXQ+XSIpLAorCU5fKCJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA8c3RhdGU+IDxyZXZpc2lvbj4gPGdvb2RfdGVybT4gPGJhZF90ZXJtPiIpLAorCU5fKCJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2hlY2stYW5kLXNldC10ZXJtcyA8Y29tbWFuZD4gPGdvb2RfdGVybT4gPGJhZF90ZXJtPiIpLAorCU5fKCJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA8Z29vZF90ZXJtPiA8YmFkX3Rlcm0+IFs8dGVybT5dIiksCisJTl8oImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC10ZXJtcyBbLS10ZXJtLWdvb2QgfCAtLXRlcm0tb2xkIHwgLS10ZXJtLWJhZCB8IC0tdGVybS1uZXddIiksCisJTl8oImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1zdGFydCBbLS10ZXJtLXtvbGQsZ29vZH09PHRlcm0+IC0tdGVybS17bmV3LGJhZH09PHRlcm0+XSIKKwkJCQkJICAgICAiWy0tbm8tY2hlY2tvdXRdIFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSBbPHBhdGhzPi4uLl0iKSwKKwlOVUxMCit9OworCitzdHJ1Y3QgYmlzZWN0X3Rlcm1zIHsKKwljaGFyICp0ZXJtX2dvb2Q7CisJY2hhciAqdGVybV9iYWQ7Cit9OworCitzdGF0aWMgdm9pZCBmcmVlX3Rlcm1zKHN0cnVjdCBiaXNlY3RfdGVybXMgKnRlcm1zKQoreworCUZSRUVfQU5EX05VTEwodGVybXMtPnRlcm1fZ29vZCk7CisJRlJFRV9BTkRfTlVMTCh0ZXJtcy0+dGVybV9iYWQpOworfQorCitzdGF0aWMgdm9pZCBzZXRfdGVybXMoc3RydWN0IGJpc2VjdF90ZXJtcyAqdGVybXMsIGNvbnN0IGNoYXIgKmJhZCwKKwkJICAgICAgY29uc3QgY2hhciAqZ29vZCkKK3sKKwlmcmVlKCh2b2lkICopdGVybXMtPnRlcm1fZ29vZCk7CisJdGVybXMtPnRlcm1fZ29vZCA9IHhzdHJkdXAoZ29vZCk7CisJZnJlZSgodm9pZCAqKXRlcm1zLT50ZXJtX2JhZCk7CisJdGVybXMtPnRlcm1fYmFkID0geHN0cmR1cChiYWQpOworfQorCitzdGF0aWMgY29uc3QgY2hhciB2b2NhYl9iYWRbXSA9ICJiYWR8bmV3IjsKK3N0YXRpYyBjb25zdCBjaGFyIHZvY2FiX2dvb2RbXSA9ICJnb29kfG9sZCI7CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIHRoZSBzdHJpbmcgYHRlcm1gIGJlbG9uZ3MgdG8gdGhlIHNldCBvZiBzdHJpbmdzCisgKiBpbmNsdWRlZCBpbiB0aGUgdmFyaWFibGUgYXJndW1lbnRzLgorICovCitMQVNUX0FSR19NVVNUX0JFX05VTEwKK3N0YXRpYyBpbnQgb25lX29mKGNvbnN0IGNoYXIgKnRlcm0sIC4uLikKK3sKKwlpbnQgcmVzID0gMDsKKwl2YV9saXN0IG1hdGNoZXM7CisJY29uc3QgY2hhciAqbWF0Y2g7CisKKwl2YV9zdGFydChtYXRjaGVzLCB0ZXJtKTsKKwl3aGlsZSAoIXJlcyAmJiAobWF0Y2ggPSB2YV9hcmcobWF0Y2hlcywgY29uc3QgY2hhciAqKSkpCisJCXJlcyA9ICFzdHJjbXAodGVybSwgbWF0Y2gpOworCXZhX2VuZChtYXRjaGVzKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfdGVybV9mb3JtYXQoY29uc3QgY2hhciAqdGVybSwgY29uc3QgY2hhciAqb3JpZ190ZXJtKQoreworCWludCByZXM7CisJY2hhciAqbmV3X3Rlcm0gPSB4c3RyZm10KCJyZWZzL2Jpc2VjdC8lcyIsIHRlcm0pOworCisJcmVzID0gY2hlY2tfcmVmbmFtZV9mb3JtYXQobmV3X3Rlcm0sIDApOworCWZyZWUobmV3X3Rlcm0pOworCisJaWYgKHJlcykKKwkJcmV0dXJuIGVycm9yKF8oIiclcycgaXMgbm90IGEgdmFsaWQgdGVybSIpLCB0ZXJtKTsKKworCWlmIChvbmVfb2YodGVybSwgImhlbHAiLCAic3RhcnQiLCAic2tpcCIsICJuZXh0IiwgInJlc2V0IiwKKwkJCSJ2aXN1YWxpemUiLCAidmlldyIsICJyZXBsYXkiLCAibG9nIiwgInJ1biIsICJ0ZXJtcyIsIE5VTEwpKQorCQlyZXR1cm4gZXJyb3IoXygiY2FuJ3QgdXNlIHRoZSBidWlsdGluIGNvbW1hbmQgJyVzJyBhcyBhIHRlcm0iKSwgdGVybSk7CisKKwkvKgorCSAqIEluIHRoZW9yeSwgbm90aGluZyBwcmV2ZW50cyBzd2FwcGluZyBjb21wbGV0ZWx5IGdvb2QgYW5kIGJhZCwKKwkgKiBidXQgdGhpcyBzaXR1YXRpb24gY291bGQgYmUgY29uZnVzaW5nIGFuZCBoYXNuJ3QgYmVlbiB0ZXN0ZWQKKwkgKiBlbm91Z2guIEZvcmJpZCBpdCBmb3Igbm93LgorCSAqLworCisJaWYgKChzdHJjbXAob3JpZ190ZXJtLCAiYmFkIikgJiYgb25lX29mKHRlcm0sICJiYWQiLCAibmV3IiwgTlVMTCkpIHx8CisJCSAoc3RyY21wKG9yaWdfdGVybSwgImdvb2QiKSAmJiBvbmVfb2YodGVybSwgImdvb2QiLCAib2xkIiwgTlVMTCkpKQorCQlyZXR1cm4gZXJyb3IoXygiY2FuJ3QgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSB0ZXJtICclcyciKSwgdGVybSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3cml0ZV90ZXJtcyhjb25zdCBjaGFyICpiYWQsIGNvbnN0IGNoYXIgKmdvb2QpCit7CisJRklMRSAqZnAgPSBOVUxMOworCWludCByZXM7CisKKwlpZiAoIXN0cmNtcChiYWQsIGdvb2QpKQorCQlyZXR1cm4gZXJyb3IoXygicGxlYXNlIHVzZSB0d28gZGlmZmVyZW50IHRlcm1zIikpOworCisJaWYgKGNoZWNrX3Rlcm1fZm9ybWF0KGJhZCwgImJhZCIpIHx8IGNoZWNrX3Rlcm1fZm9ybWF0KGdvb2QsICJnb29kIikpCisJCXJldHVybiAtMTsKKworCWZwID0gZm9wZW4oZ2l0X3BhdGhfYmlzZWN0X3Rlcm1zKCksICJ3Iik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuIHRoZSBmaWxlIEJJU0VDVF9URVJNUyIpKTsKKworCXJlcyA9IGZwcmludGYoZnAsICIlc1xuJXNcbiIsIGJhZCwgZ29vZCk7CisJcmVzIHw9IGZjbG9zZShmcCk7CisJcmV0dXJuIChyZXMgPCAwKSA/IC0xIDogMDsKK30KKworc3RhdGljIGludCBpc19leHBlY3RlZF9yZXYoY29uc3QgY2hhciAqZXhwZWN0ZWRfaGV4KQoreworCXN0cnVjdCBzdHJidWYgYWN0dWFsX2hleCA9IFNUUkJVRl9JTklUOworCWludCByZXMgPSAwOworCWlmIChzdHJidWZfcmVhZF9maWxlKCZhY3R1YWxfaGV4LCBnaXRfcGF0aF9iaXNlY3RfZXhwZWN0ZWRfcmV2KCksIDApID49IDQwKSB7CisJCXN0cmJ1Zl90cmltKCZhY3R1YWxfaGV4KTsKKwkJcmVzID0gIXN0cmNtcChhY3R1YWxfaGV4LmJ1ZiwgZXhwZWN0ZWRfaGV4KTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmFjdHVhbF9oZXgpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2V4cGVjdGVkX3JldnMoY29uc3QgY2hhciAqKnJldnMsIGludCByZXZfbnIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmV2X25yOyBpKyspIHsKKwkJaWYgKCFpc19leHBlY3RlZF9yZXYocmV2c1tpXSkpIHsKKwkJCXVubGlua19vcl93YXJuKGdpdF9wYXRoX2Jpc2VjdF9hbmNlc3RvcnNfb2soKSk7CisJCQl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aF9iaXNlY3RfZXhwZWN0ZWRfcmV2KCkpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGJpc2VjdF9yZXNldChjb25zdCBjaGFyICpjb21taXQpCit7CisJc3RydWN0IHN0cmJ1ZiBicmFuY2ggPSBTVFJCVUZfSU5JVDsKKworCWlmICghY29tbWl0KSB7CisJCWlmIChzdHJidWZfcmVhZF9maWxlKCZicmFuY2gsIGdpdF9wYXRoX2Jpc2VjdF9zdGFydCgpLCAwKSA8IDEpIHsKKwkJCXByaW50ZihfKCJXZSBhcmUgbm90IGJpc2VjdGluZy5cbiIpKTsKKwkJCXJldHVybiAwOworCQl9CisJCXN0cmJ1Zl9ydHJpbSgmYnJhbmNoKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCQlpZiAoZ2V0X29pZF9jb21taXQoY29tbWl0LCAmb2lkKSkKKwkJCXJldHVybiBlcnJvcihfKCInJXMnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIpLCBjb21taXQpOworCQlzdHJidWZfYWRkc3RyKCZicmFuY2gsIGNvbW1pdCk7CisJfQorCisJaWYgKCFmaWxlX2V4aXN0cyhnaXRfcGF0aF9iaXNlY3RfaGVhZCgpKSkgeworCQlzdHJ1Y3QgYXJndl9hcnJheSBhcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3YsICJjaGVja291dCIsIGJyYW5jaC5idWYsICItLSIsIE5VTEwpOworCQlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJndi5hcmd2LCBSVU5fR0lUX0NNRCkpIHsKKwkJCWVycm9yKF8oImNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwiCisJCQkJIiBIRUFEICclcycuIFRyeSAnZ2l0IGJpc2VjdCIKKwkJCQkiIHJlc2V0IDxjb21taXQ+Jy4iKSwgYnJhbmNoLmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmYnJhbmNoKTsKKwkJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3YpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3YpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZicmFuY2gpOworCXJldHVybiBiaXNlY3RfY2xlYW5fc3RhdGUoKTsKK30KKworc3RhdGljIHZvaWQgbG9nX2NvbW1pdChGSUxFICpmcCwgY2hhciAqZm10LCBjb25zdCBjaGFyICpzdGF0ZSwKKwkJICAgICAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgcHAgPSB7MH07CisJc3RydWN0IHN0cmJ1ZiBjb21taXRfbXNnID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqbGFiZWwgPSB4c3RyZm10KGZtdCwgc3RhdGUpOworCisJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgIiVzIiwgJmNvbW1pdF9tc2csICZwcCk7CisKKwlmcHJpbnRmKGZwLCAiIyAlczogWyVzXSAlc1xuIiwgbGFiZWwsIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCksCisJCWNvbW1pdF9tc2cuYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZjb21taXRfbXNnKTsKKwlmcmVlKGxhYmVsKTsKK30KKworc3RhdGljIGludCBiaXNlY3Rfd3JpdGUoY29uc3QgY2hhciAqc3RhdGUsIGNvbnN0IGNoYXIgKnJldiwKKwkJCWNvbnN0IHN0cnVjdCBiaXNlY3RfdGVybXMgKnRlcm1zLCBpbnQgbm9sb2cpCit7CisJc3RydWN0IHN0cmJ1ZiB0YWcgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJRklMRSAqZnAgPSBOVUxMOworCWludCByZXMgPSAwOworCisJaWYgKCFzdHJjbXAoc3RhdGUsIHRlcm1zLT50ZXJtX2JhZCkpIHsKKwkJc3RyYnVmX2FkZGYoJnRhZywgInJlZnMvYmlzZWN0LyVzIiwgc3RhdGUpOworCX0gZWxzZSBpZiAob25lX29mKHN0YXRlLCB0ZXJtcy0+dGVybV9nb29kLCAic2tpcCIsIE5VTEwpKSB7CisJCXN0cmJ1Zl9hZGRmKCZ0YWcsICJyZWZzL2Jpc2VjdC8lcy0lcyIsIHN0YXRlLCByZXYpOworCX0gZWxzZSB7CisJCXJlcyA9IGVycm9yKF8oIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICVzIiksIHN0YXRlKTsKKwkJZ290byBmaW5pc2g7CisJfQorCisJaWYgKGdldF9vaWQocmV2LCAmb2lkKSkgeworCQlyZXMgPSBlcnJvcihfKCJjb3VsZG4ndCBnZXQgdGhlIG9pZCBvZiB0aGUgcmV2ICclcyciKSwgcmV2KTsKKwkJZ290byBmaW5pc2g7CisJfQorCisJaWYgKHVwZGF0ZV9yZWYoTlVMTCwgdGFnLmJ1ZiwgJm9pZCwgTlVMTCwgMCwKKwkJICAgICAgIFVQREFURV9SRUZTX01TR19PTl9FUlIpKSB7CisJCXJlcyA9IC0xOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwlmcCA9IGZvcGVuKGdpdF9wYXRoX2Jpc2VjdF9sb2coKSwgImEiKTsKKwlpZiAoIWZwKSB7CisJCXJlcyA9IGVycm9yX2Vycm5vKF8oImNvdWxkbid0IG9wZW4gdGhlIGZpbGUgJyVzJyIpLCBnaXRfcGF0aF9iaXNlY3RfbG9nKCkpOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJbG9nX2NvbW1pdChmcCwgIiVzIiwgc3RhdGUsIGNvbW1pdCk7CisKKwlpZiAoIW5vbG9nKQorCQlmcHJpbnRmKGZwLCAiZ2l0IGJpc2VjdCAlcyAlc1xuIiwgc3RhdGUsIHJldik7CisKK2ZpbmlzaDoKKwlpZiAoZnApCisJCWZjbG9zZShmcCk7CisJc3RyYnVmX3JlbGVhc2UoJnRhZyk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBjaGVja19hbmRfc2V0X3Rlcm1zKHN0cnVjdCBiaXNlY3RfdGVybXMgKnRlcm1zLCBjb25zdCBjaGFyICpjbWQpCit7CisJaW50IGhhc190ZXJtX2ZpbGUgPSAhaXNfZW1wdHlfb3JfbWlzc2luZ19maWxlKGdpdF9wYXRoX2Jpc2VjdF90ZXJtcygpKTsKKworCWlmIChvbmVfb2YoY21kLCAic2tpcCIsICJzdGFydCIsICJ0ZXJtcyIsIE5VTEwpKQorCQlyZXR1cm4gMDsKKworCWlmIChoYXNfdGVybV9maWxlICYmIHN0cmNtcChjbWQsIHRlcm1zLT50ZXJtX2JhZCkgJiYKKwkgICAgc3RyY21wKGNtZCwgdGVybXMtPnRlcm1fZ29vZCkpCisJCXJldHVybiBlcnJvcihfKCJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAiCisJCQkJIiVzLyVzIGJpc2VjdCIpLCB0ZXJtcy0+dGVybV9iYWQsCisJCQkJdGVybXMtPnRlcm1fZ29vZCk7CisKKwlpZiAoIWhhc190ZXJtX2ZpbGUpIHsKKwkJaWYgKG9uZV9vZihjbWQsICJiYWQiLCAiZ29vZCIsIE5VTEwpKSB7CisJCQlzZXRfdGVybXModGVybXMsICJiYWQiLCAiZ29vZCIpOworCQkJcmV0dXJuIHdyaXRlX3Rlcm1zKHRlcm1zLT50ZXJtX2JhZCwgdGVybXMtPnRlcm1fZ29vZCk7CisJCX0KKwkJaWYgKG9uZV9vZihjbWQsICJuZXciLCAib2xkIiwgTlVMTCkpIHsKKwkJCXNldF90ZXJtcyh0ZXJtcywgIm5ldyIsICJvbGQiKTsKKwkJCXJldHVybiB3cml0ZV90ZXJtcyh0ZXJtcy0+dGVybV9iYWQsIHRlcm1zLT50ZXJtX2dvb2QpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFya19nb29kKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlpbnQgKm1fZ29vZCA9IChpbnQgKiljYl9kYXRhOworCSptX2dvb2QgPSAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgY2hhciBuZWVkX2JhZF9hbmRfZ29vZF9yZXZpc2lvbl93YXJuaW5nW10gPQorCU5fKCJZb3UgbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisJICAgIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgbmVlZF9iaXNlY3Rfc3RhcnRfd2FybmluZ1tdID0KKwlOXygiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisJICAgIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorCSAgICJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIik7CisKK3N0YXRpYyBpbnQgZGVjaWRlX25leHQoY29uc3Qgc3RydWN0IGJpc2VjdF90ZXJtcyAqdGVybXMsCisJCSAgICAgICBjb25zdCBjaGFyICpjdXJyZW50X3Rlcm0sIGludCBtaXNzaW5nX2dvb2QsCisJCSAgICAgICBpbnQgbWlzc2luZ19iYWQpCit7CisJaWYgKCFtaXNzaW5nX2dvb2QgJiYgIW1pc3NpbmdfYmFkKQorCQlyZXR1cm4gMDsKKwlpZiAoIWN1cnJlbnRfdGVybSkKKwkJcmV0dXJuIC0xOworCisJaWYgKG1pc3NpbmdfZ29vZCAmJiAhbWlzc2luZ19iYWQgJiYKKwkgICAgIXN0cmNtcChjdXJyZW50X3Rlcm0sIHRlcm1zLT50ZXJtX2dvb2QpKSB7CisJCWNoYXIgKnllc25vOworCQkvKgorCQkgKiBoYXZlIGJhZCAob3IgbmV3KSBidXQgbm90IGdvb2QgKG9yIG9sZCkuIFdlIGNvdWxkIGJpc2VjdAorCQkgKiBhbHRob3VnaCB0aGlzIGlzIGxlc3Mgb3B0aW11bS4KKwkJICovCisJCXdhcm5pbmcoXygiYmlzZWN0aW5nIG9ubHkgd2l0aCBhICVzIGNvbW1pdCIpLCB0ZXJtcy0+dGVybV9iYWQpOworCQlpZiAoIWlzYXR0eSgwKSkKKwkJCXJldHVybiAwOworCQkvKgorCQkgKiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorCQkgKiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisJCSAqIGF0IHRoaXMgcG9pbnQuCisJCSAqLworCQl5ZXNubyA9IGdpdF9wcm9tcHQoXygiQXJlIHlvdSBzdXJlIFtZL25dPyAiKSwgUFJPTVBUX0VDSE8pOworCQlpZiAoc3RhcnRzX3dpdGgoeWVzbm8sICJOIikgfHwgc3RhcnRzX3dpdGgoeWVzbm8sICJuIikpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKworCWlmICghaXNfZW1wdHlfb3JfbWlzc2luZ19maWxlKGdpdF9wYXRoX2Jpc2VjdF9zdGFydCgpKSkKKwkJcmV0dXJuIGVycm9yKF8obmVlZF9iYWRfYW5kX2dvb2RfcmV2aXNpb25fd2FybmluZyksCisJCQkgICAgIHZvY2FiX2JhZCwgdm9jYWJfZ29vZCwgdm9jYWJfYmFkLCB2b2NhYl9nb29kKTsKKwllbHNlCisJCXJldHVybiBlcnJvcihfKG5lZWRfYmlzZWN0X3N0YXJ0X3dhcm5pbmcpLAorCQkJICAgICB2b2NhYl9nb29kLCB2b2NhYl9iYWQsIHZvY2FiX2dvb2QsIHZvY2FiX2JhZCk7Cit9CisKK3N0YXRpYyBpbnQgYmlzZWN0X25leHRfY2hlY2soY29uc3Qgc3RydWN0IGJpc2VjdF90ZXJtcyAqdGVybXMsCisJCQkgICAgIGNvbnN0IGNoYXIgKmN1cnJlbnRfdGVybSkKK3sKKwlpbnQgbWlzc2luZ19nb29kID0gMSwgbWlzc2luZ19iYWQgPSAxOworCWNoYXIgKmJhZF9yZWYgPSB4c3RyZm10KCJyZWZzL2Jpc2VjdC8lcyIsIHRlcm1zLT50ZXJtX2JhZCk7CisJY2hhciAqZ29vZF9nbG9iID0geHN0cmZtdCgiJXMtKiIsIHRlcm1zLT50ZXJtX2dvb2QpOworCisJaWYgKHJlZl9leGlzdHMoYmFkX3JlZikpCisJCW1pc3NpbmdfYmFkID0gMDsKKworCWZvcl9lYWNoX2dsb2JfcmVmX2luKG1hcmtfZ29vZCwgZ29vZF9nbG9iLCAicmVmcy9iaXNlY3QvIiwKKwkJCSAgICAgKHZvaWQgKikgJm1pc3NpbmdfZ29vZCk7CisKKwlmcmVlKGdvb2RfZ2xvYik7CisJZnJlZShiYWRfcmVmKTsKKworCXJldHVybiBkZWNpZGVfbmV4dCh0ZXJtcywgY3VycmVudF90ZXJtLCBtaXNzaW5nX2dvb2QsIG1pc3NpbmdfYmFkKTsKK30KKworc3RhdGljIGludCBnZXRfdGVybXMoc3RydWN0IGJpc2VjdF90ZXJtcyAqdGVybXMpCit7CisJc3RydWN0IHN0cmJ1ZiBzdHIgPSBTVFJCVUZfSU5JVDsKKwlGSUxFICpmcCA9IE5VTEw7CisJaW50IHJlcyA9IDA7CisKKwlmcCA9IGZvcGVuKGdpdF9wYXRoX2Jpc2VjdF90ZXJtcygpLCAiciIpOworCWlmICghZnApIHsKKwkJcmVzID0gLTE7CisJCWdvdG8gZmluaXNoOworCX0KKworCWZyZWVfdGVybXModGVybXMpOworCXN0cmJ1Zl9nZXRsaW5lX2xmKCZzdHIsIGZwKTsKKwl0ZXJtcy0+dGVybV9iYWQgPSBzdHJidWZfZGV0YWNoKCZzdHIsIE5VTEwpOworCXN0cmJ1Zl9nZXRsaW5lX2xmKCZzdHIsIGZwKTsKKwl0ZXJtcy0+dGVybV9nb29kID0gc3RyYnVmX2RldGFjaCgmc3RyLCBOVUxMKTsKKworZmluaXNoOgorCWlmIChmcCkKKwkJZmNsb3NlKGZwKTsKKwlzdHJidWZfcmVsZWFzZSgmc3RyKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGJpc2VjdF90ZXJtcyhzdHJ1Y3QgYmlzZWN0X3Rlcm1zICp0ZXJtcywgY29uc3QgY2hhciAqb3B0aW9uKQoreworCWlmIChnZXRfdGVybXModGVybXMpKQorCQlyZXR1cm4gZXJyb3IoXygibm8gdGVybXMgZGVmaW5lZCIpKTsKKworCWlmIChvcHRpb24gPT0gTlVMTCkgeworCQlwcmludGYoXygiWW91ciBjdXJyZW50IHRlcm1zIGFyZSAlcyBmb3IgdGhlIG9sZCBzdGF0ZVxuIgorCQkJICJhbmQgJXMgZm9yIHRoZSBuZXcgc3RhdGUuXG4iKSwKKwkJICAgICAgIHRlcm1zLT50ZXJtX2dvb2QsIHRlcm1zLT50ZXJtX2JhZCk7CisJCXJldHVybiAwOworCX0KKwlpZiAob25lX29mKG9wdGlvbiwgIi0tdGVybS1nb29kIiwgIi0tdGVybS1vbGQiLCBOVUxMKSkKKwkJcHJpbnRmKCIlc1xuIiwgdGVybXMtPnRlcm1fZ29vZCk7CisJZWxzZSBpZiAob25lX29mKG9wdGlvbiwgIi0tdGVybS1iYWQiLCAiLS10ZXJtLW5ldyIsIE5VTEwpKQorCQlwcmludGYoIiVzXG4iLCB0ZXJtcy0+dGVybV9iYWQpOworCWVsc2UKKwkJcmV0dXJuIGVycm9yKF8oImludmFsaWQgYXJndW1lbnQgJXMgZm9yICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKwkJCSAgICAgICAiU3VwcG9ydGVkIG9wdGlvbnMgYXJlOiAiCisJCQkgICAgICAgIi0tdGVybS1nb29kfC0tdGVybS1vbGQgYW5kICIKKwkJCSAgICAgICAiLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIpLCBvcHRpb24pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmlzZWN0X2FwcGVuZF9sb2dfcXVvdGVkKGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCByZXMgPSAwOworCUZJTEUgKmZwID0gZm9wZW4oZ2l0X3BhdGhfYmlzZWN0X2xvZygpLCAiYSIpOworCXN0cnVjdCBzdHJidWYgb3JpZ19hcmdzID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIWZwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZnByaW50ZihmcCwgImdpdCBiaXNlY3Qgc3RhcnQiKSA8IDEpIHsKKwkJcmVzID0gLTE7CisJCWdvdG8gZmluaXNoOworCX0KKworCXNxX3F1b3RlX2FyZ3YoJm9yaWdfYXJncywgYXJndik7CisJaWYgKGZwcmludGYoZnAsICIlc1xuIiwgb3JpZ19hcmdzLmJ1ZikgPCAxKQorCQlyZXMgPSAtMTsKKworZmluaXNoOgorCWZjbG9zZShmcCk7CisJc3RyYnVmX3JlbGVhc2UoJm9yaWdfYXJncyk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBiaXNlY3Rfc3RhcnQoc3RydWN0IGJpc2VjdF90ZXJtcyAqdGVybXMsIGludCBub19jaGVja291dCwKKwkJCWNvbnN0IGNoYXIgKiphcmd2LCBpbnQgYXJnYykKK3sKKwlpbnQgaSwgaGFzX2RvdWJsZV9kYXNoID0gMCwgbXVzdF93cml0ZV90ZXJtcyA9IDAsIGJhZF9zZWVuID0gMDsKKwlpbnQgZmxhZ3MsIHBhdGhzcGVjX3BvcywgcmVzID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmV2cyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBzdGF0ZXMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyYnVmIHN0YXJ0X2hlYWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJpc2VjdF9uYW1lcyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY29uc3QgY2hhciAqaGVhZDsKKworCWlmIChpc19iYXJlX3JlcG9zaXRvcnkoKSkKKwkJbm9fY2hlY2tvdXQgPSAxOworCisJLyoKKwkgKiBDaGVjayBmb3Igb25lIGJhZCBhbmQgdGhlbiBzb21lIGdvb2QgcmV2aXNpb25zCisJICovCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS0iKSkgeworCQkJaGFzX2RvdWJsZV9kYXNoID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS0iKSkgeworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLWNoZWNrb3V0IikpIHsKKwkJCW5vX2NoZWNrb3V0ID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tdGVybS1nb29kIikgfHwKKwkJCSAhc3RyY21wKGFyZywgIi0tdGVybS1vbGQiKSkgeworCQkJbXVzdF93cml0ZV90ZXJtcyA9IDE7CisJCQlmcmVlKCh2b2lkICopIHRlcm1zLT50ZXJtX2dvb2QpOworCQkJdGVybXMtPnRlcm1fZ29vZCA9IHhzdHJkdXAoYXJndlsrK2ldKTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLXRlcm0tZ29vZD0iLCAmYXJnKSB8fAorCQkJICAgc2tpcF9wcmVmaXgoYXJnLCAiLS10ZXJtLW9sZD0iLCAmYXJnKSkgeworCQkJbXVzdF93cml0ZV90ZXJtcyA9IDE7CisJCQlmcmVlKCh2b2lkICopIHRlcm1zLT50ZXJtX2dvb2QpOworCQkJdGVybXMtPnRlcm1fZ29vZCA9IHhzdHJkdXAoYXJnKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tdGVybS1iYWQiKSB8fAorCQkJICFzdHJjbXAoYXJnLCAiLS10ZXJtLW5ldyIpKSB7CisJCQltdXN0X3dyaXRlX3Rlcm1zID0gMTsKKwkJCWZyZWUoKHZvaWQgKikgdGVybXMtPnRlcm1fYmFkKTsKKwkJCXRlcm1zLT50ZXJtX2JhZCA9IHhzdHJkdXAoYXJndlsrK2ldKTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLXRlcm0tYmFkPSIsICZhcmcpIHx8CisJCQkgICBza2lwX3ByZWZpeChhcmcsICItLXRlcm0tbmV3PSIsICZhcmcpKSB7CisJCQltdXN0X3dyaXRlX3Rlcm1zID0gMTsKKwkJCWZyZWUoKHZvaWQgKikgdGVybXMtPnRlcm1fYmFkKTsKKwkJCXRlcm1zLT50ZXJtX2JhZCA9IHhzdHJkdXAoYXJnKTsKKwkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChhcmcsICItLSIpICYmCisJCQkgIW9uZV9vZihhcmcsICItLXRlcm0tZ29vZCIsICItLXRlcm0tYmFkIiwgTlVMTCkpIHsKKwkJCXJldHVybiBlcnJvcihfKCJ1bnJlY29nbml6ZWQgb3B0aW9uOiAnJXMnIiksIGFyZyk7CisJCX0gZWxzZSB7CisJCQljaGFyICpjb21taXRfaWQgPSB4c3RyZm10KCIlc157Y29tbWl0fSIsIGFyZyk7CisJCQlpZiAoZ2V0X29pZChjb21taXRfaWQsICZvaWQpICYmIGhhc19kb3VibGVfZGFzaCkKKwkJCQlkaWUoXygiJyVzJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCAiCisJCQkJICAgICAgInJldmlzaW9uIiksIGFyZyk7CisKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmV2cywgb2lkX3RvX2hleCgmb2lkKSk7CisJCQlmcmVlKGNvbW1pdF9pZCk7CisJCX0KKwl9CisJcGF0aHNwZWNfcG9zID0gaTsKKworCS8qCisJICogVGhlIHVzZXIgcmFuICJnaXQgYmlzZWN0IHN0YXJ0IDxzaGExPiA8c2hhMT4iLCBoZW5jZSBkaWQgbm90CisJICogZXhwbGljaXRseSBzcGVjaWZ5IHRoZSB0ZXJtcywgYnV0IHdlIGFyZSBhbHJlYWR5IHN0YXJ0aW5nIHRvCisJICogc2V0IHJlZmVyZW5jZXMgbmFtZWQgd2l0aCB0aGUgZGVmYXVsdCB0ZXJtcywgYW5kIHdvbid0IGJlIGFibGUKKwkgKiB0byBjaGFuZ2UgYWZ0ZXJ3YXJkcy4KKwkgKi8KKwlpZiAocmV2cy5ucikKKwkJbXVzdF93cml0ZV90ZXJtcyA9IDE7CisJZm9yIChpID0gMDsgaSA8IHJldnMubnI7IGkrKykgeworCQlpZiAoYmFkX3NlZW4pIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmc3RhdGVzLCB0ZXJtcy0+dGVybV9nb29kKTsKKwkJfSBlbHNlIHsKKwkJCWJhZF9zZWVuID0gMTsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmc3RhdGVzLCB0ZXJtcy0+dGVybV9iYWQpOworCQl9CisJfQorCisJLyoKKwkgKiBWZXJpZnkgSEVBRAorCSAqLworCWhlYWQgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCAmaGVhZF9vaWQsICZmbGFncyk7CisJaWYgKCFoZWFkKQorCQlpZiAoZ2V0X29pZCgiSEVBRCIsICZoZWFkX29pZCkpCisJCQlyZXR1cm4gZXJyb3IoXygiYmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIikpOworCisJLyoKKwkgKiBDaGVjayBpZiB3ZSBhcmUgYmlzZWN0aW5nCisJICovCisJaWYgKCFpc19lbXB0eV9vcl9taXNzaW5nX2ZpbGUoZ2l0X3BhdGhfYmlzZWN0X3N0YXJ0KCkpKSB7CisJCS8qIFJlc2V0IHRvIHRoZSByZXYgZnJvbSB3aGVyZSB3ZSBzdGFydGVkICovCisJCXN0cmJ1Zl9yZWFkX2ZpbGUoJnN0YXJ0X2hlYWQsIGdpdF9wYXRoX2Jpc2VjdF9zdGFydCgpLCAwKTsKKwkJc3RyYnVmX3RyaW0oJnN0YXJ0X2hlYWQpOworCQlpZiAoIW5vX2NoZWNrb3V0KSB7CisJCQlzdHJ1Y3QgYXJndl9hcnJheSBhcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCisJCQlhcmd2X2FycmF5X3B1c2hsKCZhcmd2LCAiY2hlY2tvdXQiLCBzdGFydF9oZWFkLmJ1ZiwKKwkJCQkJICItLSIsIE5VTEwpOworCQkJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YuYXJndiwgUlVOX0dJVF9DTUQpKSB7CisJCQkJcmVzID0gZXJyb3IoXygiY2hlY2tpbmcgb3V0ICclcycgZmFpbGVkLiIKKwkJCQkJCSAiIFRyeSAnZ2l0IGJpc2VjdCBzdGFydCAiCisJCQkJCQkgIjx2YWxpZC1icmFuY2g+Jy4iKSwKKwkJCQkJICAgICAgIHN0YXJ0X2hlYWQuYnVmKTsKKwkJCQlnb3RvIGZpbmlzaDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCS8qIEdldCB0aGUgcmV2IGZyb20gd2hlcmUgd2Ugc3RhcnQuICovCisJCWlmICghZ2V0X29pZChoZWFkLCAmaGVhZF9vaWQpICYmCisJCSAgICAhc3RhcnRzX3dpdGgoaGVhZCwgInJlZnMvaGVhZHMvIikpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmc3RhcnRfaGVhZCk7CisJCQlzdHJidWZfYWRkc3RyKCZzdGFydF9oZWFkLCBvaWRfdG9faGV4KCZoZWFkX29pZCkpOworCQl9IGVsc2UgaWYgKCFnZXRfb2lkKGhlYWQsICZoZWFkX29pZCkgJiYKKwkJCSAgIHNraXBfcHJlZml4KGhlYWQsICJyZWZzL2hlYWRzLyIsICZoZWFkKSkgeworCQkJLyoKKwkJCSAqIFRoaXMgZXJyb3IgbWVzc2FnZSBzaG91bGQgb25seSBiZSB0cmlnZ2VyZWQgYnkKKwkJCSAqIGNvZ2l0byB1c2FnZSwgYW5kIGNvZ2l0byB1c2VycyBzaG91bGQgdW5kZXJzdGFuZAorCQkJICogaXQgcmVsYXRlcyB0byBjZy1zZWVrLgorCQkJICovCisJCQlpZiAoIWlzX2VtcHR5X29yX21pc3NpbmdfZmlsZShnaXRfcGF0aF9oZWFkX25hbWUoKSkpCisJCQkJcmV0dXJuIGVycm9yKF8oIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiKSk7CisJCQlzdHJidWZfYWRkc3RyKCZzdGFydF9oZWFkLCBoZWFkKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBlcnJvcihfKCJiYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIikpOworCQl9CisJfQorCisJLyoKKwkgKiBHZXQgcmlkIG9mIGFueSBvbGQgYmlzZWN0IHN0YXRlLgorCSAqLworCWlmIChiaXNlY3RfY2xlYW5fc3RhdGUoKSkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBJbiBjYXNlIG9mIG1pc3Rha2VuIHJldnMgb3IgY2hlY2tvdXQgZXJyb3IsIG9yIHNpZ25hbHMgcmVjZWl2ZWQsCisJICogImJpc2VjdF9hdXRvX25leHQiIGJlbG93IG1heSBleGl0IG9yIG1pc2JlaGF2ZS4KKwkgKiBXZSBoYXZlIHRvIHRyYXAgdGhpcyB0byBiZSBhYmxlIHRvIGNsZWFuIHVwIHVzaW5nCisJICogImJpc2VjdF9jbGVhbl9zdGF0ZSIuCisJICovCisKKwkvKgorCSAqIFdyaXRlIG5ldyBzdGFydCBzdGF0ZQorCSAqLworCXdyaXRlX2ZpbGUoZ2l0X3BhdGhfYmlzZWN0X3N0YXJ0KCksICIlc1xuIiwgc3RhcnRfaGVhZC5idWYpOworCisJaWYgKG5vX2NoZWNrb3V0KSB7CisJCWlmIChnZXRfb2lkKHN0YXJ0X2hlYWQuYnVmLCAmb2lkKSA8IDApIHsKKwkJCXJlcyA9IGVycm9yKF8oImludmFsaWQgcmVmOiAnJXMnIiksIHN0YXJ0X2hlYWQuYnVmKTsKKwkJCWdvdG8gZmluaXNoOworCQl9CisJCWlmICh1cGRhdGVfcmVmKE5VTEwsICJCSVNFQ1RfSEVBRCIsICZvaWQsIE5VTEwsIDAsCisJCQkgICAgICAgVVBEQVRFX1JFRlNfTVNHX09OX0VSUikpIHsKKwkJCXJlcyA9IC0xOworCQkJZ290byBmaW5pc2g7CisJCX0KKwl9CisKKwlpZiAocGF0aHNwZWNfcG9zIDwgYXJnYyAtIDEpCisJCXNxX3F1b3RlX2FyZ3YoJmJpc2VjdF9uYW1lcywgYXJndiArIHBhdGhzcGVjX3Bvcyk7CisJd3JpdGVfZmlsZShnaXRfcGF0aF9iaXNlY3RfbmFtZXMoKSwgIiVzXG4iLCBiaXNlY3RfbmFtZXMuYnVmKTsKKworCWZvciAoaSA9IDA7IGkgPCBzdGF0ZXMubnI7IGkrKykKKwkJaWYgKGJpc2VjdF93cml0ZShzdGF0ZXMuaXRlbXNbaV0uc3RyaW5nLAorCQkJCSByZXZzLml0ZW1zW2ldLnN0cmluZywgdGVybXMsIDEpKSB7CisJCQlyZXMgPSAtMTsKKwkJCWdvdG8gZmluaXNoOworCQl9CisKKwlpZiAobXVzdF93cml0ZV90ZXJtcyAmJiB3cml0ZV90ZXJtcyh0ZXJtcy0+dGVybV9iYWQsCisJCQkJCSAgICB0ZXJtcy0+dGVybV9nb29kKSkgeworCQlyZXMgPSAtMTsKKwkJZ290byBmaW5pc2g7CisJfQorCisJcmVzID0gYmlzZWN0X2FwcGVuZF9sb2dfcXVvdGVkKGFyZ3YpOworCWlmIChyZXMpCisJCXJlcyA9IC0xOworCitmaW5pc2g6CisJc3RyaW5nX2xpc3RfY2xlYXIoJnJldnMsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZzdGF0ZXMsIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZzdGFydF9oZWFkKTsKKwlzdHJidWZfcmVsZWFzZSgmYmlzZWN0X25hbWVzKTsKKwlyZXR1cm4gcmVzOworfQorCitpbnQgY21kX2Jpc2VjdF9faGVscGVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWVudW0geworCQlORVhUX0FMTCA9IDEsCisJCVdSSVRFX1RFUk1TLAorCQlCSVNFQ1RfQ0xFQU5fU1RBVEUsCisJCUNIRUNLX0VYUEVDVEVEX1JFVlMsCisJCUJJU0VDVF9SRVNFVCwKKwkJQklTRUNUX1dSSVRFLAorCQlDSEVDS19BTkRfU0VUX1RFUk1TLAorCQlCSVNFQ1RfTkVYVF9DSEVDSywKKwkJQklTRUNUX1RFUk1TLAorCQlCSVNFQ1RfU1RBUlQKKwl9IGNtZG1vZGUgPSAwOworCWludCBub19jaGVja291dCA9IDAsIHJlcyA9IDAsIG5vbG9nID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0NNRE1PREUoMCwgIm5leHQtYWxsIiwgJmNtZG1vZGUsCisJCQkgTl8oInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciKSwgTkVYVF9BTEwpLAorCQlPUFRfQ01ETU9ERSgwLCAid3JpdGUtdGVybXMiLCAmY21kbW9kZSwKKwkJCSBOXygid3JpdGUgdGhlIHRlcm1zIHRvIC5naXQvQklTRUNUX1RFUk1TIiksIFdSSVRFX1RFUk1TKSwKKwkJT1BUX0NNRE1PREUoMCwgImJpc2VjdC1jbGVhbi1zdGF0ZSIsICZjbWRtb2RlLAorCQkJIE5fKCJjbGVhbnVwIHRoZSBiaXNlY3Rpb24gc3RhdGUiKSwgQklTRUNUX0NMRUFOX1NUQVRFKSwKKwkJT1BUX0NNRE1PREUoMCwgImNoZWNrLWV4cGVjdGVkLXJldnMiLCAmY21kbW9kZSwKKwkJCSBOXygiY2hlY2sgZm9yIGV4cGVjdGVkIHJldnMiKSwgQ0hFQ0tfRVhQRUNURURfUkVWUyksCisJCU9QVF9DTURNT0RFKDAsICJiaXNlY3QtcmVzZXQiLCAmY21kbW9kZSwKKwkJCSBOXygicmVzZXQgdGhlIGJpc2VjdGlvbiBzdGF0ZSIpLCBCSVNFQ1RfUkVTRVQpLAorCQlPUFRfQ01ETU9ERSgwLCAiYmlzZWN0LXdyaXRlIiwgJmNtZG1vZGUsCisJCQkgTl8oIndyaXRlIG91dCB0aGUgYmlzZWN0aW9uIHN0YXRlIGluIEJJU0VDVF9MT0ciKSwgQklTRUNUX1dSSVRFKSwKKwkJT1BUX0NNRE1PREUoMCwgImNoZWNrLWFuZC1zZXQtdGVybXMiLCAmY21kbW9kZSwKKwkJCSBOXygiY2hlY2sgYW5kIHNldCB0ZXJtcyBpbiBhIGJpc2VjdGlvbiBzdGF0ZSIpLCBDSEVDS19BTkRfU0VUX1RFUk1TKSwKKwkJT1BUX0NNRE1PREUoMCwgImJpc2VjdC1uZXh0LWNoZWNrIiwgJmNtZG1vZGUsCisJCQkgTl8oImNoZWNrIHdoZXRoZXIgYmFkIG9yIGdvb2QgdGVybXMgZXhpc3QiKSwgQklTRUNUX05FWFRfQ0hFQ0spLAorCQlPUFRfQ01ETU9ERSgwLCAiYmlzZWN0LXRlcm1zIiwgJmNtZG1vZGUsCisJCQkgTl8oInByaW50IG91dCB0aGUgYmlzZWN0IHRlcm1zIiksIEJJU0VDVF9URVJNUyksCisJCU9QVF9DTURNT0RFKDAsICJiaXNlY3Qtc3RhcnQiLCAmY21kbW9kZSwKKwkJCSBOXygic3RhcnQgdGhlIGJpc2VjdCBzZXNzaW9uIiksIEJJU0VDVF9TVEFSVCksCisJCU9QVF9CT09MKDAsICJuby1jaGVja291dCIsICZub19jaGVja291dCwKKwkJCSBOXygidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIpKSwKKwkJT1BUX0JPT0woMCwgIm5vLWxvZyIsICZub2xvZywKKwkJCSBOXygibm8gbG9nIGZvciBCSVNFQ1RfV1JJVEUiKSksCisJCU9QVF9FTkQoKQorCX07CisJc3RydWN0IGJpc2VjdF90ZXJtcyB0ZXJtcyA9IHsgLnRlcm1fZ29vZCA9IE5VTEwsIC50ZXJtX2JhZCA9IE5VTEwgfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgZ2l0X2Jpc2VjdF9oZWxwZXJfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTik7CisKKwlpZiAoIWNtZG1vZGUpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfYmlzZWN0X2hlbHBlcl91c2FnZSwgb3B0aW9ucyk7CisKKwlzd2l0Y2ggKGNtZG1vZGUpIHsKKwljYXNlIE5FWFRfQUxMOgorCQlyZXMgPSBiaXNlY3RfbmV4dF9hbGwodGhlX3JlcG9zaXRvcnksIHByZWZpeCwgbm9fY2hlY2tvdXQpOworCQlicmVhazsKKwljYXNlIFdSSVRFX1RFUk1TOgorCQlpZiAoYXJnYyAhPSAyKQorCQkJcmV0dXJuIGVycm9yKF8oIi0td3JpdGUtdGVybXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyIpKTsKKwkJcmV0dXJuIHdyaXRlX3Rlcm1zKGFyZ3ZbMF0sIGFyZ3ZbMV0pOworCWNhc2UgQklTRUNUX0NMRUFOX1NUQVRFOgorCQlpZiAoYXJnYyAhPSAwKQorCQkJcmV0dXJuIGVycm9yKF8oIi0tYmlzZWN0LWNsZWFuLXN0YXRlIHJlcXVpcmVzIG5vIGFyZ3VtZW50cyIpKTsKKwkJcmV0dXJuIGJpc2VjdF9jbGVhbl9zdGF0ZSgpOworCWNhc2UgQ0hFQ0tfRVhQRUNURURfUkVWUzoKKwkJY2hlY2tfZXhwZWN0ZWRfcmV2cyhhcmd2LCBhcmdjKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBCSVNFQ1RfUkVTRVQ6CisJCWlmIChhcmdjID4gMSkKKwkJCXJldHVybiBlcnJvcihfKCItLWJpc2VjdC1yZXNldCByZXF1aXJlcyBlaXRoZXIgbm8gYXJndW1lbnQgb3IgYSBjb21taXQiKSk7CisJCXJldHVybiAhIWJpc2VjdF9yZXNldChhcmdjID8gYXJndlswXSA6IE5VTEwpOworCWNhc2UgQklTRUNUX1dSSVRFOgorCQlpZiAoYXJnYyAhPSA0ICYmIGFyZ2MgIT0gNSkKKwkJCXJldHVybiBlcnJvcihfKCItLWJpc2VjdC13cml0ZSByZXF1aXJlcyBlaXRoZXIgNCBvciA1IGFyZ3VtZW50cyIpKTsKKwkJc2V0X3Rlcm1zKCZ0ZXJtcywgYXJndlszXSwgYXJndlsyXSk7CisJCXJlcyA9IGJpc2VjdF93cml0ZShhcmd2WzBdLCBhcmd2WzFdLCAmdGVybXMsIG5vbG9nKTsKKwkJYnJlYWs7CisJY2FzZSBDSEVDS19BTkRfU0VUX1RFUk1TOgorCQlpZiAoYXJnYyAhPSAzKQorCQkJcmV0dXJuIGVycm9yKF8oIi0tY2hlY2stYW5kLXNldC10ZXJtcyByZXF1aXJlcyAzIGFyZ3VtZW50cyIpKTsKKwkJc2V0X3Rlcm1zKCZ0ZXJtcywgYXJndlsyXSwgYXJndlsxXSk7CisJCXJlcyA9IGNoZWNrX2FuZF9zZXRfdGVybXMoJnRlcm1zLCBhcmd2WzBdKTsKKwkJYnJlYWs7CisJY2FzZSBCSVNFQ1RfTkVYVF9DSEVDSzoKKwkJaWYgKGFyZ2MgIT0gMiAmJiBhcmdjICE9IDMpCisJCQlyZXR1cm4gZXJyb3IoXygiLS1iaXNlY3QtbmV4dC1jaGVjayByZXF1aXJlcyAyIG9yIDMgYXJndW1lbnRzIikpOworCQlzZXRfdGVybXMoJnRlcm1zLCBhcmd2WzFdLCBhcmd2WzBdKTsKKwkJcmVzID0gYmlzZWN0X25leHRfY2hlY2soJnRlcm1zLCBhcmdjID09IDMgPyBhcmd2WzJdIDogTlVMTCk7CisJCWJyZWFrOworCWNhc2UgQklTRUNUX1RFUk1TOgorCQlpZiAoYXJnYyA+IDEpCisJCQlyZXR1cm4gZXJyb3IoXygiLS1iaXNlY3QtdGVybXMgcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50IikpOworCQlyZXMgPSBiaXNlY3RfdGVybXMoJnRlcm1zLCBhcmdjID09IDEgPyBhcmd2WzBdIDogTlVMTCk7CisJCWJyZWFrOworCWNhc2UgQklTRUNUX1NUQVJUOgorCQlzZXRfdGVybXMoJnRlcm1zLCAiYmFkIiwgImdvb2QiKTsKKwkJcmVzID0gYmlzZWN0X3N0YXJ0KCZ0ZXJtcywgbm9fY2hlY2tvdXQsIGFyZ3YsIGFyZ2MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZXJyb3IoIkJVRzogdW5rbm93biBzdWJjb21tYW5kICclZCciLCBjbWRtb2RlKTsKKwl9CisJZnJlZV90ZXJtcygmdGVybXMpOworCisJLyoKKwkgKiBIYW5kbGUgZWFybHkgc3VjY2VzcworCSAqIEZyb20gY2hlY2tfbWVyZ2VfYmFzZXMgPiBjaGVja19nb29kX2FyZV9hbmNlc3RvcnNfb2ZfYmFkID4gYmlzZWN0X25leHRfYWxsCisJICovCisJaWYgKHJlcyA9PSBCSVNFQ1RfSU5URVJOQUxfU1VDQ0VTU19NRVJHRV9CQVNFKQorCQlyZXMgPSBCSVNFQ1RfT0s7CisKKwlyZXR1cm4gYWJzKHJlcyk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2JsYW1lLmMgYi9idWlsdGluL2JsYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRlZjU3YwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vYmxhbWUuYwpAQCAtMCwwICsxLDExNzggQEAKKy8qCisgKiBCbGFtZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAxNCBieSBpdHMgYXV0aG9ycworICogU2VlIENPUFlJTkcgZm9yIGxpY2Vuc2luZyBjb25kaXRpb25zCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJtYWlsbWFwLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJsaW5lLXJhbmdlLmgiCisjaW5jbHVkZSAibGluZS1sb2cuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImJsYW1lLmgiCisjaW5jbHVkZSAicmVmcy5oIgorCitzdGF0aWMgY2hhciBibGFtZV91c2FnZVtdID0gTl8oImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIpOworCitzdGF0aWMgY29uc3QgY2hhciAqYmxhbWVfb3B0X3VzYWdlW10gPSB7CisJYmxhbWVfdXNhZ2UsCisJIiIsCisJTl8oIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBsb25nZXN0X2ZpbGU7CitzdGF0aWMgaW50IGxvbmdlc3RfYXV0aG9yOworc3RhdGljIGludCBtYXhfb3JpZ19kaWdpdHM7CitzdGF0aWMgaW50IG1heF9kaWdpdHM7CitzdGF0aWMgaW50IG1heF9zY29yZV9kaWdpdHM7CitzdGF0aWMgaW50IHNob3dfcm9vdDsKK3N0YXRpYyBpbnQgcmV2ZXJzZTsKK3N0YXRpYyBpbnQgYmxhbmtfYm91bmRhcnk7CitzdGF0aWMgaW50IGluY3JlbWVudGFsOworc3RhdGljIGludCB4ZGxfb3B0czsKK3N0YXRpYyBpbnQgYWJicmV2ID0gLTE7CitzdGF0aWMgaW50IG5vX3dob2xlX2ZpbGVfcmVuYW1lOworc3RhdGljIGludCBzaG93X3Byb2dyZXNzOworc3RhdGljIGNoYXIgcmVwZWF0ZWRfbWV0YV9jb2xvcltDT0xPUl9NQVhMRU5dOworc3RhdGljIGludCBjb2xvcmluZ19tb2RlOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBpZ25vcmVfcmV2c19maWxlX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworc3RhdGljIGludCBtYXJrX3VuYmxhbWFibGVfbGluZXM7CitzdGF0aWMgaW50IG1hcmtfaWdub3JlZF9saW5lczsKKworc3RhdGljIHN0cnVjdCBkYXRlX21vZGUgYmxhbWVfZGF0ZV9tb2RlID0geyBEQVRFX0lTTzg2MDEgfTsKK3N0YXRpYyBzaXplX3QgYmxhbWVfZGF0ZV93aWR0aDsKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBtYWlsbWFwID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKworI2lmbmRlZiBERUJVR19CTEFNRQorI2RlZmluZSBERUJVR19CTEFNRSAwCisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGJsYW1lX21vdmVfc2NvcmU7CitzdGF0aWMgdW5zaWduZWQgYmxhbWVfY29weV9zY29yZTsKKworLyogUmVtZW1iZXIgdG8gdXBkYXRlIG9iamVjdCBmbGFnIGFsbG9jYXRpb24gaW4gb2JqZWN0LmggKi8KKyNkZWZpbmUgTUVUQUlORk9fU0hPV04JCSgxdTw8MTIpCisjZGVmaW5lIE1PUkVfVEhBTl9PTkVfUEFUSAkoMXU8PDEzKQorCitzdHJ1Y3QgcHJvZ3Jlc3NfaW5mbyB7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKKwlpbnQgYmxhbWVkX2xpbmVzOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm50aF9saW5lX2NiKHZvaWQgKmRhdGEsIGxvbmcgbG5vKQoreworCXJldHVybiBibGFtZV9udGhfbGluZSgoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKilkYXRhLCBsbm8pOworfQorCisvKgorICogSW5mb3JtYXRpb24gb24gY29tbWl0cywgdXNlZCBmb3Igb3V0cHV0LgorICovCitzdHJ1Y3QgY29tbWl0X2luZm8geworCXN0cnVjdCBzdHJidWYgYXV0aG9yOworCXN0cnVjdCBzdHJidWYgYXV0aG9yX21haWw7CisJdGltZXN0YW1wX3QgYXV0aG9yX3RpbWU7CisJc3RydWN0IHN0cmJ1ZiBhdXRob3JfdHo7CisKKwkvKiBmaWxsZWQgb25seSB3aGVuIGFza2VkIGZvciBkZXRhaWxzICovCisJc3RydWN0IHN0cmJ1ZiBjb21taXR0ZXI7CisJc3RydWN0IHN0cmJ1ZiBjb21taXR0ZXJfbWFpbDsKKwl0aW1lc3RhbXBfdCBjb21taXR0ZXJfdGltZTsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdHRlcl90ejsKKworCXN0cnVjdCBzdHJidWYgc3VtbWFyeTsKK307CisKKy8qCisgKiBQYXJzZSBhdXRob3IvY29tbWl0dGVyIGxpbmUgaW4gdGhlIGNvbW1pdCBvYmplY3QgYnVmZmVyCisgKi8KK3N0YXRpYyB2b2lkIGdldF9hY19saW5lKGNvbnN0IGNoYXIgKmluYnVmLCBjb25zdCBjaGFyICp3aGF0LAorCXN0cnVjdCBzdHJidWYgKm5hbWUsIHN0cnVjdCBzdHJidWYgKm1haWwsCisJdGltZXN0YW1wX3QgKnRpbWUsIHN0cnVjdCBzdHJidWYgKnR6KQoreworCXN0cnVjdCBpZGVudF9zcGxpdCBpZGVudDsKKwlzaXplX3QgbGVuLCBtYWlsbGVuLCBuYW1lbGVuOworCWNoYXIgKnRtcCwgKmVuZHA7CisJY29uc3QgY2hhciAqbmFtZWJ1ZiwgKm1haWxidWY7CisKKwl0bXAgPSBzdHJzdHIoaW5idWYsIHdoYXQpOworCWlmICghdG1wKQorCQlnb3RvIGVycm9yX291dDsKKwl0bXAgKz0gc3RybGVuKHdoYXQpOworCWVuZHAgPSBzdHJjaHIodG1wLCAnXG4nKTsKKwlpZiAoIWVuZHApCisJCWxlbiA9IHN0cmxlbih0bXApOworCWVsc2UKKwkJbGVuID0gZW5kcCAtIHRtcDsKKworCWlmIChzcGxpdF9pZGVudF9saW5lKCZpZGVudCwgdG1wLCBsZW4pKSB7CisJZXJyb3Jfb3V0OgorCQkvKiBVZ2ggKi8KKwkJdG1wID0gIih1bmtub3duKSI7CisJCXN0cmJ1Zl9hZGRzdHIobmFtZSwgdG1wKTsKKwkJc3RyYnVmX2FkZHN0cihtYWlsLCB0bXApOworCQlzdHJidWZfYWRkc3RyKHR6LCB0bXApOworCQkqdGltZSA9IDA7CisJCXJldHVybjsKKwl9CisKKwluYW1lbGVuID0gaWRlbnQubmFtZV9lbmQgLSBpZGVudC5uYW1lX2JlZ2luOworCW5hbWVidWYgPSBpZGVudC5uYW1lX2JlZ2luOworCisJbWFpbGxlbiA9IGlkZW50Lm1haWxfZW5kIC0gaWRlbnQubWFpbF9iZWdpbjsKKwltYWlsYnVmID0gaWRlbnQubWFpbF9iZWdpbjsKKworCWlmIChpZGVudC5kYXRlX2JlZ2luICYmIGlkZW50LmRhdGVfZW5kKQorCQkqdGltZSA9IHN0cnRvdWwoaWRlbnQuZGF0ZV9iZWdpbiwgTlVMTCwgMTApOworCWVsc2UKKwkJKnRpbWUgPSAwOworCisJaWYgKGlkZW50LnR6X2JlZ2luICYmIGlkZW50LnR6X2VuZCkKKwkJc3RyYnVmX2FkZCh0eiwgaWRlbnQudHpfYmVnaW4sIGlkZW50LnR6X2VuZCAtIGlkZW50LnR6X2JlZ2luKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRzdHIodHosICIodW5rbm93bikiKTsKKworCS8qCisJICogTm93LCBjb252ZXJ0IGJvdGggbmFtZSBhbmQgZS1tYWlsIHVzaW5nIG1haWxtYXAKKwkgKi8KKwltYXBfdXNlcigmbWFpbG1hcCwgJm1haWxidWYsICZtYWlsbGVuLAorCQkgJm5hbWVidWYsICZuYW1lbGVuKTsKKworCXN0cmJ1Zl9hZGRmKG1haWwsICI8JS4qcz4iLCAoaW50KW1haWxsZW4sIG1haWxidWYpOworCXN0cmJ1Zl9hZGQobmFtZSwgbmFtZWJ1ZiwgbmFtZWxlbik7Cit9CisKK3N0YXRpYyB2b2lkIGNvbW1pdF9pbmZvX2luaXQoc3RydWN0IGNvbW1pdF9pbmZvICpjaSkKK3sKKworCXN0cmJ1Zl9pbml0KCZjaS0+YXV0aG9yLCAwKTsKKwlzdHJidWZfaW5pdCgmY2ktPmF1dGhvcl9tYWlsLCAwKTsKKwlzdHJidWZfaW5pdCgmY2ktPmF1dGhvcl90eiwgMCk7CisJc3RyYnVmX2luaXQoJmNpLT5jb21taXR0ZXIsIDApOworCXN0cmJ1Zl9pbml0KCZjaS0+Y29tbWl0dGVyX21haWwsIDApOworCXN0cmJ1Zl9pbml0KCZjaS0+Y29tbWl0dGVyX3R6LCAwKTsKKwlzdHJidWZfaW5pdCgmY2ktPnN1bW1hcnksIDApOworfQorCitzdGF0aWMgdm9pZCBjb21taXRfaW5mb19kZXN0cm95KHN0cnVjdCBjb21taXRfaW5mbyAqY2kpCit7CisKKwlzdHJidWZfcmVsZWFzZSgmY2ktPmF1dGhvcik7CisJc3RyYnVmX3JlbGVhc2UoJmNpLT5hdXRob3JfbWFpbCk7CisJc3RyYnVmX3JlbGVhc2UoJmNpLT5hdXRob3JfdHopOworCXN0cmJ1Zl9yZWxlYXNlKCZjaS0+Y29tbWl0dGVyKTsKKwlzdHJidWZfcmVsZWFzZSgmY2ktPmNvbW1pdHRlcl9tYWlsKTsKKwlzdHJidWZfcmVsZWFzZSgmY2ktPmNvbW1pdHRlcl90eik7CisJc3RyYnVmX3JlbGVhc2UoJmNpLT5zdW1tYXJ5KTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2NvbW1pdF9pbmZvKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICBzdHJ1Y3QgY29tbWl0X2luZm8gKnJldCwKKwkJCSAgICBpbnQgZGV0YWlsZWQpCit7CisJaW50IGxlbjsKKwljb25zdCBjaGFyICpzdWJqZWN0LCAqZW5jb2Rpbmc7CisJY29uc3QgY2hhciAqbWVzc2FnZTsKKworCWNvbW1pdF9pbmZvX2luaXQocmV0KTsKKworCWVuY29kaW5nID0gZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKTsKKwltZXNzYWdlID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZW5jb2RpbmcpOworCWdldF9hY19saW5lKG1lc3NhZ2UsICJcbmF1dGhvciAiLAorCQkgICAgJnJldC0+YXV0aG9yLCAmcmV0LT5hdXRob3JfbWFpbCwKKwkJICAgICZyZXQtPmF1dGhvcl90aW1lLCAmcmV0LT5hdXRob3JfdHopOworCisJaWYgKCFkZXRhaWxlZCkgeworCQl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgbWVzc2FnZSk7CisJCXJldHVybjsKKwl9CisKKwlnZXRfYWNfbGluZShtZXNzYWdlLCAiXG5jb21taXR0ZXIgIiwKKwkJICAgICZyZXQtPmNvbW1pdHRlciwgJnJldC0+Y29tbWl0dGVyX21haWwsCisJCSAgICAmcmV0LT5jb21taXR0ZXJfdGltZSwgJnJldC0+Y29tbWl0dGVyX3R6KTsKKworCWxlbiA9IGZpbmRfY29tbWl0X3N1YmplY3QobWVzc2FnZSwgJnN1YmplY3QpOworCWlmIChsZW4pCisJCXN0cmJ1Zl9hZGQoJnJldC0+c3VtbWFyeSwgc3ViamVjdCwgbGVuKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKCZyZXQtPnN1bW1hcnksICIoJXMpIiwgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisKKwl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgbWVzc2FnZSk7Cit9CisKKy8qCisgKiBXcml0ZSBvdXQgYW55IHN1c3BlY3QgaW5mb3JtYXRpb24gd2hpY2ggZGVwZW5kcyBvbiB0aGUgcGF0aC4gVGhpcyBtdXN0IGJlCisgKiBoYW5kbGVkIHNlcGFyYXRlbHkgZnJvbSBlbWl0X29uZV9zdXNwZWN0X2RldGFpbCgpLCBiZWNhdXNlIGEgZ2l2ZW4gY29tbWl0CisgKiBtYXkgaGF2ZSBjaGFuZ2VzIGluIG11bHRpcGxlIHBhdGhzLiBTbyB0aGlzIG5lZWRzIHRvIGFwcGVhciBlYWNoIHRpbWUKKyAqIHdlIG1lbnRpb24gYSBuZXcgZ3JvdXAuCisgKgorICogVG8gYWxsb3cgTEYgYW5kIG90aGVyIG5vbnBvcnRhYmxlIGNoYXJhY3RlcnMgaW4gcGF0aG5hbWVzLAorICogdGhleSBhcmUgYy1zdHlsZSBxdW90ZWQgYXMgbmVlZGVkLgorICovCitzdGF0aWMgdm9pZCB3cml0ZV9maWxlbmFtZV9pbmZvKHN0cnVjdCBibGFtZV9vcmlnaW4gKnN1c3BlY3QpCit7CisJaWYgKHN1c3BlY3QtPnByZXZpb3VzKSB7CisJCXN0cnVjdCBibGFtZV9vcmlnaW4gKnByZXYgPSBzdXNwZWN0LT5wcmV2aW91czsKKwkJcHJpbnRmKCJwcmV2aW91cyAlcyAiLCBvaWRfdG9faGV4KCZwcmV2LT5jb21taXQtPm9iamVjdC5vaWQpKTsKKwkJd3JpdGVfbmFtZV9xdW90ZWQocHJldi0+cGF0aCwgc3Rkb3V0LCAnXG4nKTsKKwl9CisJcHJpbnRmKCJmaWxlbmFtZSAiKTsKKwl3cml0ZV9uYW1lX3F1b3RlZChzdXNwZWN0LT5wYXRoLCBzdGRvdXQsICdcbicpOworfQorCisvKgorICogUG9yY2VsYWluL0luY3JlbWVudGFsIGZvcm1hdCB3YW50cyB0byBzaG93IGEgbG90IG9mIGRldGFpbHMgcGVyCisgKiBjb21taXQuICBJbnN0ZWFkIG9mIHJlcGVhdGluZyB0aGlzIGV2ZXJ5IGxpbmUsIGVtaXQgaXQgb25seSBvbmNlLAorICogdGhlIGZpcnN0IHRpbWUgZWFjaCBjb21taXQgYXBwZWFycyBpbiB0aGUgb3V0cHV0ICh1bmxlc3MgdGhlCisgKiB1c2VyIGhhcyBzcGVjaWZpY2FsbHkgYXNrZWQgZm9yIHVzIHRvIHJlcGVhdCkuCisgKi8KK3N0YXRpYyBpbnQgZW1pdF9vbmVfc3VzcGVjdF9kZXRhaWwoc3RydWN0IGJsYW1lX29yaWdpbiAqc3VzcGVjdCwgaW50IHJlcGVhdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2luZm8gY2k7CisKKwlpZiAoIXJlcGVhdCAmJiAoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBNRVRBSU5GT19TSE9XTikpCisJCXJldHVybiAwOworCisJc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gTUVUQUlORk9fU0hPV047CisJZ2V0X2NvbW1pdF9pbmZvKHN1c3BlY3QtPmNvbW1pdCwgJmNpLCAxKTsKKwlwcmludGYoImF1dGhvciAlc1xuIiwgY2kuYXV0aG9yLmJ1Zik7CisJcHJpbnRmKCJhdXRob3ItbWFpbCAlc1xuIiwgY2kuYXV0aG9yX21haWwuYnVmKTsKKwlwcmludGYoImF1dGhvci10aW1lICUiUFJJdGltZSJcbiIsIGNpLmF1dGhvcl90aW1lKTsKKwlwcmludGYoImF1dGhvci10eiAlc1xuIiwgY2kuYXV0aG9yX3R6LmJ1Zik7CisJcHJpbnRmKCJjb21taXR0ZXIgJXNcbiIsIGNpLmNvbW1pdHRlci5idWYpOworCXByaW50ZigiY29tbWl0dGVyLW1haWwgJXNcbiIsIGNpLmNvbW1pdHRlcl9tYWlsLmJ1Zik7CisJcHJpbnRmKCJjb21taXR0ZXItdGltZSAlIlBSSXRpbWUiXG4iLCBjaS5jb21taXR0ZXJfdGltZSk7CisJcHJpbnRmKCJjb21taXR0ZXItdHogJXNcbiIsIGNpLmNvbW1pdHRlcl90ei5idWYpOworCXByaW50Zigic3VtbWFyeSAlc1xuIiwgY2kuc3VtbWFyeS5idWYpOworCWlmIChzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCXByaW50ZigiYm91bmRhcnlcbiIpOworCisJY29tbWl0X2luZm9fZGVzdHJveSgmY2kpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBUaGUgYmxhbWVfZW50cnkgaXMgZm91bmQgdG8gYmUgZ3VpbHR5IGZvciB0aGUgcmFuZ2UuCisgKiBTaG93IGl0IGluIGluY3JlbWVudGFsIG91dHB1dC4KKyAqLworc3RhdGljIHZvaWQgZm91bmRfZ3VpbHR5X2VudHJ5KHN0cnVjdCBibGFtZV9lbnRyeSAqZW50LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwcm9ncmVzc19pbmZvICpwaSA9IChzdHJ1Y3QgcHJvZ3Jlc3NfaW5mbyAqKWRhdGE7CisKKwlpZiAoaW5jcmVtZW50YWwpIHsKKwkJc3RydWN0IGJsYW1lX29yaWdpbiAqc3VzcGVjdCA9IGVudC0+c3VzcGVjdDsKKworCQlwcmludGYoIiVzICVkICVkICVkXG4iLAorCQkgICAgICAgb2lkX3RvX2hleCgmc3VzcGVjdC0+Y29tbWl0LT5vYmplY3Qub2lkKSwKKwkJICAgICAgIGVudC0+c19sbm8gKyAxLCBlbnQtPmxubyArIDEsIGVudC0+bnVtX2xpbmVzKTsKKwkJZW1pdF9vbmVfc3VzcGVjdF9kZXRhaWwoc3VzcGVjdCwgMCk7CisJCXdyaXRlX2ZpbGVuYW1lX2luZm8oc3VzcGVjdCk7CisJCW1heWJlX2ZsdXNoX29yX2RpZShzdGRvdXQsICJzdGRvdXQiKTsKKwl9CisJcGktPmJsYW1lZF9saW5lcyArPSBlbnQtPm51bV9saW5lczsKKwlkaXNwbGF5X3Byb2dyZXNzKHBpLT5wcm9ncmVzcywgcGktPmJsYW1lZF9saW5lcyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfdGltZSh0aW1lc3RhbXBfdCB0aW1lLCBjb25zdCBjaGFyICp0el9zdHIsCisJCQkgICAgICAgaW50IHNob3dfcmF3X3RpbWUpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgdGltZV9idWYgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9yZXNldCgmdGltZV9idWYpOworCWlmIChzaG93X3Jhd190aW1lKSB7CisJCXN0cmJ1Zl9hZGRmKCZ0aW1lX2J1ZiwgIiUiUFJJdGltZSIgJXMiLCB0aW1lLCB0el9zdHIpOworCX0KKwllbHNlIHsKKwkJY29uc3QgY2hhciAqdGltZV9zdHI7CisJCXNpemVfdCB0aW1lX3dpZHRoOworCQlpbnQgdHo7CisJCXR6ID0gYXRvaSh0el9zdHIpOworCQl0aW1lX3N0ciA9IHNob3dfZGF0ZSh0aW1lLCB0eiwgJmJsYW1lX2RhdGVfbW9kZSk7CisJCXN0cmJ1Zl9hZGRzdHIoJnRpbWVfYnVmLCB0aW1lX3N0cik7CisJCS8qCisJCSAqIEFkZCBzcGFjZSBwYWRkaW5ncyB0byB0aW1lX2J1ZiB0byBkaXNwbGF5IGEgZml4ZWQgd2lkdGgKKwkJICogc3RyaW5nLCBhbmQgdXNlIHRpbWVfd2lkdGggZm9yIGRpc3BsYXkgd2lkdGggY2FsaWJyYXRpb24uCisJCSAqLworCQlmb3IgKHRpbWVfd2lkdGggPSB1dGY4X3N0cndpZHRoKHRpbWVfc3RyKTsKKwkJICAgICB0aW1lX3dpZHRoIDwgYmxhbWVfZGF0ZV93aWR0aDsKKwkJICAgICB0aW1lX3dpZHRoKyspCisJCQlzdHJidWZfYWRkY2goJnRpbWVfYnVmLCAnICcpOworCX0KKwlyZXR1cm4gdGltZV9idWYuYnVmOworfQorCisjZGVmaW5lIE9VVFBVVF9BTk5PVEFURV9DT01QQVQgICAgICAoMVU8PDApCisjZGVmaW5lIE9VVFBVVF9MT05HX09CSkVDVF9OQU1FICAgICAoMVU8PDEpCisjZGVmaW5lIE9VVFBVVF9SQVdfVElNRVNUQU1QICAgICAgICAoMVU8PDIpCisjZGVmaW5lIE9VVFBVVF9QT1JDRUxBSU4gICAgICAgICAgICAoMVU8PDMpCisjZGVmaW5lIE9VVFBVVF9TSE9XX05BTUUgICAgICAgICAgICAoMVU8PDQpCisjZGVmaW5lIE9VVFBVVF9TSE9XX05VTUJFUiAgICAgICAgICAoMVU8PDUpCisjZGVmaW5lIE9VVFBVVF9TSE9XX1NDT1JFICAgICAgICAgICAoMVU8PDYpCisjZGVmaW5lIE9VVFBVVF9OT19BVVRIT1IgICAgICAgICAgICAoMVU8PDcpCisjZGVmaW5lIE9VVFBVVF9TSE9XX0VNQUlMICAgICAgICAgICAoMVU8PDgpCisjZGVmaW5lIE9VVFBVVF9MSU5FX1BPUkNFTEFJTiAgICAgICAoMVU8PDkpCisjZGVmaW5lIE9VVFBVVF9DT0xPUl9MSU5FICAgICAgICAgICAoMVU8PDEwKQorI2RlZmluZSBPVVRQVVRfU0hPV19BR0VfV0lUSF9DT0xPUiAgKDFVPDwxMSkKKworc3RhdGljIHZvaWQgZW1pdF9wb3JjZWxhaW5fZGV0YWlscyhzdHJ1Y3QgYmxhbWVfb3JpZ2luICpzdXNwZWN0LCBpbnQgcmVwZWF0KQoreworCWlmIChlbWl0X29uZV9zdXNwZWN0X2RldGFpbChzdXNwZWN0LCByZXBlYXQpIHx8CisJICAgIChzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyAmIE1PUkVfVEhBTl9PTkVfUEFUSCkpCisJCXdyaXRlX2ZpbGVuYW1lX2luZm8oc3VzcGVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfcG9yY2VsYWluKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwgc3RydWN0IGJsYW1lX2VudHJ5ICplbnQsCisJCQkgICBpbnQgb3B0KQoreworCWludCByZXBlYXQgPSBvcHQgJiBPVVRQVVRfTElORV9QT1JDRUxBSU47CisJaW50IGNudDsKKwljb25zdCBjaGFyICpjcDsKKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpzdXNwZWN0ID0gZW50LT5zdXNwZWN0OworCWNoYXIgaGV4W0dJVF9NQVhfSEVYU1ogKyAxXTsKKworCW9pZF90b19oZXhfcihoZXgsICZzdXNwZWN0LT5jb21taXQtPm9iamVjdC5vaWQpOworCXByaW50ZigiJXMgJWQgJWQgJWRcbiIsCisJICAgICAgIGhleCwKKwkgICAgICAgZW50LT5zX2xubyArIDEsCisJICAgICAgIGVudC0+bG5vICsgMSwKKwkgICAgICAgZW50LT5udW1fbGluZXMpOworCWVtaXRfcG9yY2VsYWluX2RldGFpbHMoc3VzcGVjdCwgcmVwZWF0KTsKKworCWNwID0gYmxhbWVfbnRoX2xpbmUoc2IsIGVudC0+bG5vKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IGVudC0+bnVtX2xpbmVzOyBjbnQrKykgeworCQljaGFyIGNoOworCQlpZiAoY250KSB7CisJCQlwcmludGYoIiVzICVkICVkXG4iLCBoZXgsCisJCQkgICAgICAgZW50LT5zX2xubyArIDEgKyBjbnQsCisJCQkgICAgICAgZW50LT5sbm8gKyAxICsgY250KTsKKwkJCWlmIChyZXBlYXQpCisJCQkJZW1pdF9wb3JjZWxhaW5fZGV0YWlscyhzdXNwZWN0LCAxKTsKKwkJfQorCQlwdXRjaGFyKCdcdCcpOworCQlkbyB7CisJCQljaCA9ICpjcCsrOworCQkJcHV0Y2hhcihjaCk7CisJCX0gd2hpbGUgKGNoICE9ICdcbicgJiYKKwkJCSBjcCA8IHNiLT5maW5hbF9idWYgKyBzYi0+ZmluYWxfYnVmX3NpemUpOworCX0KKworCWlmIChzYi0+ZmluYWxfYnVmX3NpemUgJiYgY3BbLTFdICE9ICdcbicpCisJCXB1dGNoYXIoJ1xuJyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29sb3JfZmllbGQgeworCXRpbWVzdGFtcF90IGhvcDsKKwljaGFyIGNvbFtDT0xPUl9NQVhMRU5dOworfSAqY29sb3JmaWVsZDsKK3N0YXRpYyBpbnQgY29sb3JmaWVsZF9uciwgY29sb3JmaWVsZF9hbGxvYzsKKworc3RhdGljIHZvaWQgcGFyc2VfY29sb3JfZmllbGRzKGNvbnN0IGNoYXIgKnMpCit7CisJc3RydWN0IHN0cmluZ19saXN0IGwgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwllbnVtIHsgRVhQRUNUX0RBVEUsIEVYUEVDVF9DT0xPUiB9IG5leHQgPSBFWFBFQ1RfQ09MT1I7CisKKwljb2xvcmZpZWxkX25yID0gMDsKKworCS8qIElkZWFsbHkgdGhpcyB3b3VsZCBiZSBzdHJpcHBlZCBhbmQgc3BsaXQgYXQgdGhlIHNhbWUgdGltZT8gKi8KKwlzdHJpbmdfbGlzdF9zcGxpdCgmbCwgcywgJywnLCAtMSk7CisJQUxMT0NfR1JPVyhjb2xvcmZpZWxkLCBjb2xvcmZpZWxkX25yICsgMSwgY29sb3JmaWVsZF9hbGxvYyk7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZsKSB7CisJCXN3aXRjaCAobmV4dCkgeworCQljYXNlIEVYUEVDVF9EQVRFOgorCQkJY29sb3JmaWVsZFtjb2xvcmZpZWxkX25yXS5ob3AgPSBhcHByb3hpZGF0ZShpdGVtLT5zdHJpbmcpOworCQkJbmV4dCA9IEVYUEVDVF9DT0xPUjsKKwkJCWNvbG9yZmllbGRfbnIrKzsKKwkJCUFMTE9DX0dST1coY29sb3JmaWVsZCwgY29sb3JmaWVsZF9uciArIDEsIGNvbG9yZmllbGRfYWxsb2MpOworCQkJYnJlYWs7CisJCWNhc2UgRVhQRUNUX0NPTE9SOgorCQkJaWYgKGNvbG9yX3BhcnNlKGl0ZW0tPnN0cmluZywgY29sb3JmaWVsZFtjb2xvcmZpZWxkX25yXS5jb2wpKQorCQkJCWRpZShfKCJleHBlY3RpbmcgYSBjb2xvcjogJXMiKSwgaXRlbS0+c3RyaW5nKTsKKwkJCW5leHQgPSBFWFBFQ1RfREFURTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKG5leHQgPT0gRVhQRUNUX0NPTE9SKQorCQlkaWUoXygibXVzdCBlbmQgd2l0aCBhIGNvbG9yIikpOworCisJY29sb3JmaWVsZFtjb2xvcmZpZWxkX25yXS5ob3AgPSBUSU1FX01BWDsKKwlzdHJpbmdfbGlzdF9jbGVhcigmbCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2RlZmF1bHRfY29sb3JfYnlfYWdlKHZvaWQpCit7CisJcGFyc2VfY29sb3JfZmllbGRzKCJibHVlLDEyIG1vbnRoIGFnbyx3aGl0ZSwxIG1vbnRoIGFnbyxyZWQiKTsKK30KKworc3RhdGljIHZvaWQgZGV0ZXJtaW5lX2xpbmVfaGVhdChzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudCwgY29uc3QgY2hhciAqKmRlc3RfY29sb3IpCit7CisJaW50IGkgPSAwOworCXN0cnVjdCBjb21taXRfaW5mbyBjaTsKKwlnZXRfY29tbWl0X2luZm8oZW50LT5zdXNwZWN0LT5jb21taXQsICZjaSwgMSk7CisKKwl3aGlsZSAoaSA8IGNvbG9yZmllbGRfbnIgJiYgY2kuYXV0aG9yX3RpbWUgPiBjb2xvcmZpZWxkW2ldLmhvcCkKKwkJaSsrOworCisJKmRlc3RfY29sb3IgPSBjb2xvcmZpZWxkW2ldLmNvbDsKK30KKworc3RhdGljIHZvaWQgZW1pdF9vdGhlcihzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsIHN0cnVjdCBibGFtZV9lbnRyeSAqZW50LCBpbnQgb3B0KQoreworCWludCBjbnQ7CisJY29uc3QgY2hhciAqY3A7CisJc3RydWN0IGJsYW1lX29yaWdpbiAqc3VzcGVjdCA9IGVudC0+c3VzcGVjdDsKKwlzdHJ1Y3QgY29tbWl0X2luZm8gY2k7CisJY2hhciBoZXhbR0lUX01BWF9IRVhTWiArIDFdOworCWludCBzaG93X3Jhd190aW1lID0gISEob3B0ICYgT1VUUFVUX1JBV19USU1FU1RBTVApOworCWNvbnN0IGNoYXIgKmRlZmF1bHRfY29sb3IgPSBOVUxMLCAqY29sb3IgPSBOVUxMLCAqcmVzZXQgPSBOVUxMOworCisJZ2V0X2NvbW1pdF9pbmZvKHN1c3BlY3QtPmNvbW1pdCwgJmNpLCAxKTsKKwlvaWRfdG9faGV4X3IoaGV4LCAmc3VzcGVjdC0+Y29tbWl0LT5vYmplY3Qub2lkKTsKKworCWNwID0gYmxhbWVfbnRoX2xpbmUoc2IsIGVudC0+bG5vKTsKKworCWlmIChvcHQgJiBPVVRQVVRfU0hPV19BR0VfV0lUSF9DT0xPUikgeworCQlkZXRlcm1pbmVfbGluZV9oZWF0KGVudCwgJmRlZmF1bHRfY29sb3IpOworCQljb2xvciA9IGRlZmF1bHRfY29sb3I7CisJCXJlc2V0ID0gR0lUX0NPTE9SX1JFU0VUOworCX0KKworCWZvciAoY250ID0gMDsgY250IDwgZW50LT5udW1fbGluZXM7IGNudCsrKSB7CisJCWNoYXIgY2g7CisJCWludCBsZW5ndGggPSAob3B0ICYgT1VUUFVUX0xPTkdfT0JKRUNUX05BTUUpID8gdGhlX2hhc2hfYWxnby0+aGV4c3ogOiBhYmJyZXY7CisKKwkJaWYgKG9wdCAmIE9VVFBVVF9DT0xPUl9MSU5FKSB7CisJCQlpZiAoY250ID4gMCkgeworCQkJCWNvbG9yID0gcmVwZWF0ZWRfbWV0YV9jb2xvcjsKKwkJCQlyZXNldCA9IEdJVF9DT0xPUl9SRVNFVDsKKwkJCX0gZWxzZSAgeworCQkJCWNvbG9yID0gZGVmYXVsdF9jb2xvciA/IGRlZmF1bHRfY29sb3IgOiBOVUxMOworCQkJCXJlc2V0ID0gZGVmYXVsdF9jb2xvciA/IEdJVF9DT0xPUl9SRVNFVCA6IE5VTEw7CisJCQl9CisJCX0KKwkJaWYgKGNvbG9yKQorCQkJZnB1dHMoY29sb3IsIHN0ZG91dCk7CisKKwkJaWYgKHN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykgeworCQkJaWYgKGJsYW5rX2JvdW5kYXJ5KQorCQkJCW1lbXNldChoZXgsICcgJywgbGVuZ3RoKTsKKwkJCWVsc2UgaWYgKCEob3B0ICYgT1VUUFVUX0FOTk9UQVRFX0NPTVBBVCkpIHsKKwkJCQlsZW5ndGgtLTsKKwkJCQlwdXRjaGFyKCdeJyk7CisJCQl9CisJCX0KKworCQlpZiAobWFya191bmJsYW1hYmxlX2xpbmVzICYmIGVudC0+dW5ibGFtYWJsZSkgeworCQkJbGVuZ3RoLS07CisJCQlwdXRjaGFyKCcqJyk7CisJCX0KKwkJaWYgKG1hcmtfaWdub3JlZF9saW5lcyAmJiBlbnQtPmlnbm9yZWQpIHsKKwkJCWxlbmd0aC0tOworCQkJcHV0Y2hhcignPycpOworCQl9CisJCXByaW50ZigiJS4qcyIsIGxlbmd0aCwgaGV4KTsKKwkJaWYgKG9wdCAmIE9VVFBVVF9BTk5PVEFURV9DT01QQVQpIHsKKwkJCWNvbnN0IGNoYXIgKm5hbWU7CisJCQlpZiAob3B0ICYgT1VUUFVUX1NIT1dfRU1BSUwpCisJCQkJbmFtZSA9IGNpLmF1dGhvcl9tYWlsLmJ1ZjsKKwkJCWVsc2UKKwkJCQluYW1lID0gY2kuYXV0aG9yLmJ1ZjsKKwkJCXByaW50ZigiXHQoJTEwc1x0JTEwc1x0JWQpIiwgbmFtZSwKKwkJCSAgICAgICBmb3JtYXRfdGltZShjaS5hdXRob3JfdGltZSwgY2kuYXV0aG9yX3R6LmJ1ZiwKKwkJCQkJICAgc2hvd19yYXdfdGltZSksCisJCQkgICAgICAgZW50LT5sbm8gKyAxICsgY250KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChvcHQgJiBPVVRQVVRfU0hPV19TQ09SRSkKKwkJCQlwcmludGYoIiAlKmQgJTAyZCIsCisJCQkJICAgICAgIG1heF9zY29yZV9kaWdpdHMsIGVudC0+c2NvcmUsCisJCQkJICAgICAgIGVudC0+c3VzcGVjdC0+cmVmY250KTsKKwkJCWlmIChvcHQgJiBPVVRQVVRfU0hPV19OQU1FKQorCQkJCXByaW50ZigiICUtKi4qcyIsIGxvbmdlc3RfZmlsZSwgbG9uZ2VzdF9maWxlLAorCQkJCSAgICAgICBzdXNwZWN0LT5wYXRoKTsKKwkJCWlmIChvcHQgJiBPVVRQVVRfU0hPV19OVU1CRVIpCisJCQkJcHJpbnRmKCIgJSpkIiwgbWF4X29yaWdfZGlnaXRzLAorCQkJCSAgICAgICBlbnQtPnNfbG5vICsgMSArIGNudCk7CisKKwkJCWlmICghKG9wdCAmIE9VVFBVVF9OT19BVVRIT1IpKSB7CisJCQkJY29uc3QgY2hhciAqbmFtZTsKKwkJCQlpbnQgcGFkOworCQkJCWlmIChvcHQgJiBPVVRQVVRfU0hPV19FTUFJTCkKKwkJCQkJbmFtZSA9IGNpLmF1dGhvcl9tYWlsLmJ1ZjsKKwkJCQllbHNlCisJCQkJCW5hbWUgPSBjaS5hdXRob3IuYnVmOworCQkJCXBhZCA9IGxvbmdlc3RfYXV0aG9yIC0gdXRmOF9zdHJ3aWR0aChuYW1lKTsKKwkJCQlwcmludGYoIiAoJXMlKnMgJTEwcyIsCisJCQkJICAgICAgIG5hbWUsIHBhZCwgIiIsCisJCQkJICAgICAgIGZvcm1hdF90aW1lKGNpLmF1dGhvcl90aW1lLAorCQkJCQkJICAgY2kuYXV0aG9yX3R6LmJ1ZiwKKwkJCQkJCSAgIHNob3dfcmF3X3RpbWUpKTsKKwkJCX0KKwkJCXByaW50ZigiICUqZCkgIiwKKwkJCSAgICAgICBtYXhfZGlnaXRzLCBlbnQtPmxubyArIDEgKyBjbnQpOworCQl9CisJCWlmIChyZXNldCkKKwkJCWZwdXRzKHJlc2V0LCBzdGRvdXQpOworCQlkbyB7CisJCQljaCA9ICpjcCsrOworCQkJcHV0Y2hhcihjaCk7CisJCX0gd2hpbGUgKGNoICE9ICdcbicgJiYKKwkJCSBjcCA8IHNiLT5maW5hbF9idWYgKyBzYi0+ZmluYWxfYnVmX3NpemUpOworCX0KKworCWlmIChzYi0+ZmluYWxfYnVmX3NpemUgJiYgY3BbLTFdICE9ICdcbicpCisJCXB1dGNoYXIoJ1xuJyk7CisKKwljb21taXRfaW5mb19kZXN0cm95KCZjaSk7Cit9CisKK3N0YXRpYyB2b2lkIG91dHB1dChzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsIGludCBvcHRpb24pCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQ7CisKKwlpZiAob3B0aW9uICYgT1VUUFVUX1BPUkNFTEFJTikgeworCQlmb3IgKGVudCA9IHNiLT5lbnQ7IGVudDsgZW50ID0gZW50LT5uZXh0KSB7CisJCQlpbnQgY291bnQgPSAwOworCQkJc3RydWN0IGJsYW1lX29yaWdpbiAqc3VzcGVjdDsKKwkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGVudC0+c3VzcGVjdC0+Y29tbWl0OworCQkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgTU9SRV9USEFOX09ORV9QQVRIKQorCQkJCWNvbnRpbnVlOworCQkJZm9yIChzdXNwZWN0ID0gZ2V0X2JsYW1lX3N1c3BlY3RzKGNvbW1pdCk7IHN1c3BlY3Q7IHN1c3BlY3QgPSBzdXNwZWN0LT5uZXh0KSB7CisJCQkJaWYgKHN1c3BlY3QtPmd1aWx0eSAmJiBjb3VudCsrKSB7CisJCQkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IE1PUkVfVEhBTl9PTkVfUEFUSDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJZm9yIChlbnQgPSBzYi0+ZW50OyBlbnQ7IGVudCA9IGVudC0+bmV4dCkgeworCQlpZiAob3B0aW9uICYgT1VUUFVUX1BPUkNFTEFJTikKKwkJCWVtaXRfcG9yY2VsYWluKHNiLCBlbnQsIG9wdGlvbik7CisJCWVsc2UgeworCQkJZW1pdF9vdGhlcihzYiwgZW50LCBvcHRpb24pOworCQl9CisJfQorfQorCisvKgorICogQWRkIHBob255IGdyYWZ0cyBmb3IgdXNlIHdpdGggLVM7IHRoaXMgaXMgcHJpbWFyaWx5IHRvCisgKiBzdXBwb3J0IGdpdCdzIGN2c3NlcnZlciB0aGF0IHdhbnRzIHRvIGdpdmUgYSBsaW5lYXIgaGlzdG9yeQorICogdG8gaXRzIGNsaWVudHMuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9hbmNlc3RyeShjb25zdCBjaGFyICpncmFmdF9maWxlKQoreworCUZJTEUgKmZwID0gZm9wZW5fb3Jfd2FybihncmFmdF9maWxlLCAiciIpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaWYgKCFmcCkKKwkJcmV0dXJuIC0xOworCXdoaWxlICghc3RyYnVmX2dldHdob2xlbGluZSgmYnVmLCBmcCwgJ1xuJykpIHsKKwkJLyogVGhlIGZvcm1hdCBpcyBqdXN0ICJDb21taXQgUGFyZW50MSBQYXJlbnQyIC4uLlxuIiAqLworCQlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCA9IHJlYWRfZ3JhZnRfbGluZSgmYnVmKTsKKwkJaWYgKGdyYWZ0KQorCQkJcmVnaXN0ZXJfY29tbWl0X2dyYWZ0KHRoZV9yZXBvc2l0b3J5LCBncmFmdCwgMCk7CisJfQorCWZjbG9zZShmcCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX2F1dG9fYWJicmV2KGludCBhdXRvX2FiYnJldiwgc3RydWN0IGJsYW1lX29yaWdpbiAqc3VzcGVjdCkKK3sKKwljb25zdCBjaGFyICp1bmlxID0gZmluZF91bmlxdWVfYWJicmV2KCZzdXNwZWN0LT5jb21taXQtPm9iamVjdC5vaWQsCisJCQkJCSAgICAgIGF1dG9fYWJicmV2KTsKKwlpbnQgbGVuID0gc3RybGVuKHVuaXEpOworCWlmIChhdXRvX2FiYnJldiA8IGxlbikKKwkJcmV0dXJuIGxlbjsKKwlyZXR1cm4gYXV0b19hYmJyZXY7Cit9CisKKy8qCisgKiBIb3cgbWFueSBjb2x1bW5zIGRvIHdlIG5lZWQgdG8gc2hvdyBsaW5lIG51bWJlcnMsIGF1dGhvcnMsCisgKiBhbmQgZmlsZW5hbWVzPworICovCitzdGF0aWMgdm9pZCBmaW5kX2FsaWdubWVudChzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsIGludCAqb3B0aW9uKQoreworCWludCBsb25nZXN0X3NyY19saW5lcyA9IDA7CisJaW50IGxvbmdlc3RfZHN0X2xpbmVzID0gMDsKKwl1bnNpZ25lZCBsYXJnZXN0X3Njb3JlID0gMDsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmU7CisJaW50IGNvbXB1dGVfYXV0b19hYmJyZXYgPSAoYWJicmV2IDwgMCk7CisJaW50IGF1dG9fYWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CisKKwlmb3IgKGUgPSBzYi0+ZW50OyBlOyBlID0gZS0+bmV4dCkgeworCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpzdXNwZWN0ID0gZS0+c3VzcGVjdDsKKwkJaW50IG51bTsKKworCQlpZiAoY29tcHV0ZV9hdXRvX2FiYnJldikKKwkJCWF1dG9fYWJicmV2ID0gdXBkYXRlX2F1dG9fYWJicmV2KGF1dG9fYWJicmV2LCBzdXNwZWN0KTsKKwkJaWYgKHN0cmNtcChzdXNwZWN0LT5wYXRoLCBzYi0+cGF0aCkpCisJCQkqb3B0aW9uIHw9IE9VVFBVVF9TSE9XX05BTUU7CisJCW51bSA9IHN0cmxlbihzdXNwZWN0LT5wYXRoKTsKKwkJaWYgKGxvbmdlc3RfZmlsZSA8IG51bSkKKwkJCWxvbmdlc3RfZmlsZSA9IG51bTsKKwkJaWYgKCEoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBNRVRBSU5GT19TSE9XTikpIHsKKwkJCXN0cnVjdCBjb21taXRfaW5mbyBjaTsKKwkJCXN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IE1FVEFJTkZPX1NIT1dOOworCQkJZ2V0X2NvbW1pdF9pbmZvKHN1c3BlY3QtPmNvbW1pdCwgJmNpLCAxKTsKKwkJCWlmICgqb3B0aW9uICYgT1VUUFVUX1NIT1dfRU1BSUwpCisJCQkJbnVtID0gdXRmOF9zdHJ3aWR0aChjaS5hdXRob3JfbWFpbC5idWYpOworCQkJZWxzZQorCQkJCW51bSA9IHV0Zjhfc3Ryd2lkdGgoY2kuYXV0aG9yLmJ1Zik7CisJCQlpZiAobG9uZ2VzdF9hdXRob3IgPCBudW0pCisJCQkJbG9uZ2VzdF9hdXRob3IgPSBudW07CisJCQljb21taXRfaW5mb19kZXN0cm95KCZjaSk7CisJCX0KKwkJbnVtID0gZS0+c19sbm8gKyBlLT5udW1fbGluZXM7CisJCWlmIChsb25nZXN0X3NyY19saW5lcyA8IG51bSkKKwkJCWxvbmdlc3Rfc3JjX2xpbmVzID0gbnVtOworCQludW0gPSBlLT5sbm8gKyBlLT5udW1fbGluZXM7CisJCWlmIChsb25nZXN0X2RzdF9saW5lcyA8IG51bSkKKwkJCWxvbmdlc3RfZHN0X2xpbmVzID0gbnVtOworCQlpZiAobGFyZ2VzdF9zY29yZSA8IGJsYW1lX2VudHJ5X3Njb3JlKHNiLCBlKSkKKwkJCWxhcmdlc3Rfc2NvcmUgPSBibGFtZV9lbnRyeV9zY29yZShzYiwgZSk7CisJfQorCW1heF9vcmlnX2RpZ2l0cyA9IGRlY2ltYWxfd2lkdGgobG9uZ2VzdF9zcmNfbGluZXMpOworCW1heF9kaWdpdHMgPSBkZWNpbWFsX3dpZHRoKGxvbmdlc3RfZHN0X2xpbmVzKTsKKwltYXhfc2NvcmVfZGlnaXRzID0gZGVjaW1hbF93aWR0aChsYXJnZXN0X3Njb3JlKTsKKworCWlmIChjb21wdXRlX2F1dG9fYWJicmV2KQorCQkvKiBvbmUgbW9yZSBhYmJyZXYgbGVuZ3RoIGlzIG5lZWRlZCBmb3IgdGhlIGJvdW5kYXJ5IGNvbW1pdCAqLworCQlhYmJyZXYgPSBhdXRvX2FiYnJldiArIDE7Cit9CisKK3N0YXRpYyB2b2lkIHNhbml0eV9jaGVja19vbl9mYWlsKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwgaW50IGJhYSkKK3sKKwlpbnQgb3B0ID0gT1VUUFVUX1NIT1dfU0NPUkUgfCBPVVRQVVRfU0hPV19OVU1CRVIgfCBPVVRQVVRfU0hPV19OQU1FOworCWZpbmRfYWxpZ25tZW50KHNiLCAmb3B0KTsKKwlvdXRwdXQoc2IsIG9wdCk7CisJZGllKCJCYWEgJWQhIiwgYmFhKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHBhcnNlX3Njb3JlKGNvbnN0IGNoYXIgKmFyZykKK3sKKwljaGFyICplbmQ7CisJdW5zaWduZWQgbG9uZyBzY29yZSA9IHN0cnRvdWwoYXJnLCAmZW5kLCAxMCk7CisJaWYgKCplbmQpCisJCXJldHVybiAwOworCXJldHVybiBzY29yZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmFkZF9wcmVmaXgoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpwYXRoKQoreworCXJldHVybiBwcmVmaXhfcGF0aChwcmVmaXgsIHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMCwgcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2JsYW1lX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJibGFtZS5zaG93cm9vdCIpKSB7CisJCXNob3dfcm9vdCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImJsYW1lLmJsYW5rYm91bmRhcnkiKSkgeworCQlibGFua19ib3VuZGFyeSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImJsYW1lLnNob3dlbWFpbCIpKSB7CisJCWludCAqb3V0cHV0X29wdGlvbiA9IGNiOworCQlpZiAoZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpKQorCQkJKm91dHB1dF9vcHRpb24gfD0gT1VUUFVUX1NIT1dfRU1BSUw7CisJCWVsc2UKKwkJCSpvdXRwdXRfb3B0aW9uICY9IH5PVVRQVVRfU0hPV19FTUFJTDsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImJsYW1lLmRhdGUiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXBhcnNlX2RhdGVfZm9ybWF0KHZhbHVlLCAmYmxhbWVfZGF0ZV9tb2RlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImJsYW1lLmlnbm9yZXJldnNmaWxlIikpIHsKKwkJY29uc3QgY2hhciAqc3RyOworCQlpbnQgcmV0OworCisJCXJldCA9IGdpdF9jb25maWdfcGF0aG5hbWUoJnN0ciwgdmFyLCB2YWx1ZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlzdHJpbmdfbGlzdF9pbnNlcnQoJmlnbm9yZV9yZXZzX2ZpbGVfbGlzdCwgc3RyKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImJsYW1lLm1hcmt1bmJsYW1hYmxlbGluZXMiKSkgeworCQltYXJrX3VuYmxhbWFibGVfbGluZXMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJibGFtZS5tYXJraWdub3JlZGxpbmVzIikpIHsKKwkJbWFya19pZ25vcmVkX2xpbmVzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuYmxhbWUucmVwZWF0ZWRsaW5lcyIpKSB7CisJCWlmIChjb2xvcl9wYXJzZV9tZW0odmFsdWUsIHN0cmxlbih2YWx1ZSksIHJlcGVhdGVkX21ldGFfY29sb3IpKQorCQkJd2FybmluZyhfKCJpbnZhbGlkIGNvbG9yICclcycgaW4gY29sb3IuYmxhbWUucmVwZWF0ZWRMaW5lcyIpLAorCQkJCXZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImNvbG9yLmJsYW1lLmhpZ2hsaWdodHJlY2VudCIpKSB7CisJCXBhcnNlX2NvbG9yX2ZpZWxkcyh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImJsYW1lLmNvbG9yaW5nIikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJyZXBlYXRlZExpbmVzIikpIHsKKwkJCWNvbG9yaW5nX21vZGUgfD0gT1VUUFVUX0NPTE9SX0xJTkU7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImhpZ2hsaWdodFJlY2VudCIpKSB7CisJCQljb2xvcmluZ19tb2RlIHw9IE9VVFBVVF9TSE9XX0FHRV9XSVRIX0NPTE9SOworCQl9IGVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJub25lIikpIHsKKwkJCWNvbG9yaW5nX21vZGUgJj0gfihPVVRQVVRfQ09MT1JfTElORSB8CisJCQkJCSAgICBPVVRQVVRfU0hPV19BR0VfV0lUSF9DT0xPUik7CisJCX0gZWxzZSB7CisJCQl3YXJuaW5nKF8oImludmFsaWQgdmFsdWUgZm9yIGJsYW1lLmNvbG9yaW5nIikpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoZ2l0X2RpZmZfaGV1cmlzdGljX2NvbmZpZyh2YXIsIHZhbHVlLCBjYikgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKHVzZXJkaWZmX2NvbmZpZyh2YXIsIHZhbHVlKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IGJsYW1lX2NvcHlfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9uLCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgKm9wdCA9IG9wdGlvbi0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwkvKgorCSAqIC1DIGVuYWJsZXMgY29weSBmcm9tIHJlbW92ZWQgZmlsZXM7CisJICogLUMgLUMgZW5hYmxlcyBjb3B5IGZyb20gZXhpc3RpbmcgZmlsZXMsIGJ1dCBvbmx5CisJICogICAgICAgd2hlbiBibGFtaW5nIGEgbmV3IGZpbGU7CisJICogLUMgLUMgLUMgZW5hYmxlcyBjb3B5IGZyb20gZXhpc3RpbmcgZmlsZXMgZm9yCisJICogICAgICAgICAgZXZlcnlib2R5CisJICovCisJaWYgKCpvcHQgJiBQSUNLQVhFX0JMQU1FX0NPUFlfSEFSREVSKQorCQkqb3B0IHw9IFBJQ0tBWEVfQkxBTUVfQ09QWV9IQVJERVNUOworCWlmICgqb3B0ICYgUElDS0FYRV9CTEFNRV9DT1BZKQorCQkqb3B0IHw9IFBJQ0tBWEVfQkxBTUVfQ09QWV9IQVJERVI7CisJKm9wdCB8PSBQSUNLQVhFX0JMQU1FX0NPUFkgfCBQSUNLQVhFX0JMQU1FX01PVkU7CisKKwlpZiAoYXJnKQorCQlibGFtZV9jb3B5X3Njb3JlID0gcGFyc2Vfc2NvcmUoYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibGFtZV9tb3ZlX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbiwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50ICpvcHQgPSBvcHRpb24tPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJKm9wdCB8PSBQSUNLQVhFX0JMQU1FX01PVkU7CisKKwlpZiAoYXJnKQorCQlibGFtZV9tb3ZlX3Njb3JlID0gcGFyc2Vfc2NvcmUoYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19hX3Jldihjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJaWYgKGdldF9vaWQobmFtZSwgJm9pZCkpCisJCXJldHVybiAwOworCXJldHVybiBPQkpfTk9ORSA8IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgJm9pZCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGJ1aWxkX2lnbm9yZWxpc3Qoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLAorCQkJICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmlnbm9yZV9yZXZzX2ZpbGVfbGlzdCwKKwkJCSAgICAgc3RydWN0IHN0cmluZ19saXN0ICppZ25vcmVfcmV2X2xpc3QpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmk7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlvaWRzZXRfaW5pdCgmc2ItPmlnbm9yZV9saXN0LCAwKTsKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGksIGlnbm9yZV9yZXZzX2ZpbGVfbGlzdCkgeworCQlpZiAoIXN0cmNtcChpLT5zdHJpbmcsICIiKSkKKwkJCW9pZHNldF9jbGVhcigmc2ItPmlnbm9yZV9saXN0KTsKKwkJZWxzZQorCQkJb2lkc2V0X3BhcnNlX2ZpbGUoJnNiLT5pZ25vcmVfbGlzdCwgaS0+c3RyaW5nKTsKKwl9CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpLCBpZ25vcmVfcmV2X2xpc3QpIHsKKwkJaWYgKGdldF9vaWRfY29tbWl0dGlzaChpLT5zdHJpbmcsICZvaWQpKQorCQkJZGllKF8oImNhbm5vdCBmaW5kIHJldmlzaW9uICVzIHRvIGlnbm9yZSIpLCBpLT5zdHJpbmcpOworCQlvaWRzZXRfaW5zZXJ0KCZzYi0+aWdub3JlX2xpc3QsICZvaWQpOworCX0KK30KKworaW50IGNtZF9ibGFtZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwljb25zdCBjaGFyICpwYXRoOworCXN0cnVjdCBibGFtZV9zY29yZWJvYXJkIHNiOworCXN0cnVjdCBibGFtZV9vcmlnaW4gKm87CisJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQgPSBOVUxMOworCWxvbmcgZGFzaGRhc2hfcG9zLCBsbm87CisJc3RydWN0IHByb2dyZXNzX2luZm8gcGkgPSB7IE5VTEwsIDAgfTsKKworCXN0cnVjdCBzdHJpbmdfbGlzdCByYW5nZV9saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgaWdub3JlX3Jldl9saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlpbnQgb3V0cHV0X29wdGlvbiA9IDAsIG9wdCA9IDA7CisJaW50IHNob3dfc3RhdHMgPSAwOworCWNvbnN0IGNoYXIgKnJldnNfZmlsZSA9IE5VTEw7CisJY29uc3QgY2hhciAqY29udGVudHNfZnJvbSA9IE5VTEw7CisJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKDAsICJpbmNyZW1lbnRhbCIsICZpbmNyZW1lbnRhbCwgTl8oIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiKSksCisJCU9QVF9CT09MKCdiJywgTlVMTCwgJmJsYW5rX2JvdW5kYXJ5LCBOXygiU2hvdyBibGFuayBTSEEtMSBmb3IgYm91bmRhcnkgY29tbWl0cyAoRGVmYXVsdDogb2ZmKSIpKSwKKwkJT1BUX0JPT0woMCwgInJvb3QiLCAmc2hvd19yb290LCBOXygiRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIChEZWZhdWx0OiBvZmYpIikpLAorCQlPUFRfQk9PTCgwLCAic2hvdy1zdGF0cyIsICZzaG93X3N0YXRzLCBOXygiU2hvdyB3b3JrIGNvc3Qgc3RhdGlzdGljcyIpKSwKKwkJT1BUX0JPT0woMCwgInByb2dyZXNzIiwgJnNob3dfcHJvZ3Jlc3MsIE5fKCJGb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciKSksCisJCU9QVF9CSVQoMCwgInNjb3JlLWRlYnVnIiwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIpLCBPVVRQVVRfU0hPV19TQ09SRSksCisJCU9QVF9CSVQoJ2YnLCAic2hvdy1uYW1lIiwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIpLCBPVVRQVVRfU0hPV19OQU1FKSwKKwkJT1BUX0JJVCgnbicsICJzaG93LW51bWJlciIsICZvdXRwdXRfb3B0aW9uLCBOXygiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIiksIE9VVFBVVF9TSE9XX05VTUJFUiksCisJCU9QVF9CSVQoJ3AnLCAicG9yY2VsYWluIiwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIiksIE9VVFBVVF9QT1JDRUxBSU4pLAorCQlPUFRfQklUKDAsICJsaW5lLXBvcmNlbGFpbiIsICZvdXRwdXRfb3B0aW9uLCBOXygiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIiksIE9VVFBVVF9QT1JDRUxBSU58T1VUUFVUX0xJTkVfUE9SQ0VMQUlOKSwKKwkJT1BUX0JJVCgnYycsIE5VTEwsICZvdXRwdXRfb3B0aW9uLCBOXygiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIpLCBPVVRQVVRfQU5OT1RBVEVfQ09NUEFUKSwKKwkJT1BUX0JJVCgndCcsIE5VTEwsICZvdXRwdXRfb3B0aW9uLCBOXygiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIiksIE9VVFBVVF9SQVdfVElNRVNUQU1QKSwKKwkJT1BUX0JJVCgnbCcsIE5VTEwsICZvdXRwdXRfb3B0aW9uLCBOXygiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIiksIE9VVFBVVF9MT05HX09CSkVDVF9OQU1FKSwKKwkJT1BUX0JJVCgncycsIE5VTEwsICZvdXRwdXRfb3B0aW9uLCBOXygiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIpLCBPVVRQVVRfTk9fQVVUSE9SKSwKKwkJT1BUX0JJVCgnZScsICJzaG93LWVtYWlsIiwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiKSwgT1VUUFVUX1NIT1dfRU1BSUwpLAorCQlPUFRfQklUKCd3JywgTlVMTCwgJnhkbF9vcHRzLCBOXygiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiKSwgWERGX0lHTk9SRV9XSElURVNQQUNFKSwKKwkJT1BUX1NUUklOR19MSVNUKDAsICJpZ25vcmUtcmV2IiwgJmlnbm9yZV9yZXZfbGlzdCwgTl8oInJldiIpLCBOXygiSWdub3JlIDxyZXY+IHdoZW4gYmxhbWluZyIpKSwKKwkJT1BUX1NUUklOR19MSVNUKDAsICJpZ25vcmUtcmV2cy1maWxlIiwgJmlnbm9yZV9yZXZzX2ZpbGVfbGlzdCwgTl8oImZpbGUiKSwgTl8oIklnbm9yZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4iKSksCisJCU9QVF9CSVQoMCwgImNvbG9yLWxpbmVzIiwgJm91dHB1dF9vcHRpb24sIE5fKCJjb2xvciByZWR1bmRhbnQgbWV0YWRhdGEgZnJvbSBwcmV2aW91cyBsaW5lIGRpZmZlcmVudGx5IiksIE9VVFBVVF9DT0xPUl9MSU5FKSwKKwkJT1BUX0JJVCgwLCAiY29sb3ItYnktYWdlIiwgJm91dHB1dF9vcHRpb24sIE5fKCJjb2xvciBsaW5lcyBieSBhZ2UiKSwgT1VUUFVUX1NIT1dfQUdFX1dJVEhfQ09MT1IpLAorCQlPUFRfQklUKDAsICJtaW5pbWFsIiwgJnhkbF9vcHRzLCBOXygiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIiksIFhERl9ORUVEX01JTklNQUwpLAorCQlPUFRfU1RSSU5HKCdTJywgTlVMTCwgJnJldnNfZmlsZSwgTl8oImZpbGUiKSwgTl8oIlVzZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4gaW5zdGVhZCBvZiBjYWxsaW5nIGdpdC1yZXYtbGlzdCIpKSwKKwkJT1BUX1NUUklORygwLCAiY29udGVudHMiLCAmY29udGVudHNfZnJvbSwgTl8oImZpbGUiKSwgTl8oIlVzZSA8ZmlsZT4ncyBjb250ZW50cyBhcyB0aGUgZmluYWwgaW1hZ2UiKSksCisJCU9QVF9DQUxMQkFDS19GKCdDJywgTlVMTCwgJm9wdCwgTl8oInNjb3JlIiksIE5fKCJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIiksIFBBUlNFX09QVF9PUFRBUkcsIGJsYW1lX2NvcHlfY2FsbGJhY2spLAorCQlPUFRfQ0FMTEJBQ0tfRignTScsIE5VTEwsICZvcHQsIE5fKCJzY29yZSIpLCBOXygiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIpLCBQQVJTRV9PUFRfT1BUQVJHLCBibGFtZV9tb3ZlX2NhbGxiYWNrKSwKKwkJT1BUX1NUUklOR19MSVNUKCdMJywgTlVMTCwgJnJhbmdlX2xpc3QsIE5fKCJuLG0iKSwgTl8oIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIikpLAorCQlPUFRfX0FCQlJFVigmYWJicmV2KSwKKwkJT1BUX0VORCgpCisJfTsKKworCXN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgY3R4OworCWludCBjbWRfaXNfYW5ub3RhdGUgPSAhc3RyY21wKGFyZ3ZbMF0sICJhbm5vdGF0ZSIpOworCXN0cnVjdCByYW5nZV9zZXQgcmFuZ2VzOworCXVuc2lnbmVkIGludCByYW5nZV9pOworCWxvbmcgYW5jaG9yOworCWNvbnN0IGludCBoZXhzeiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6OworCisJc2V0dXBfZGVmYXVsdF9jb2xvcl9ieV9hZ2UoKTsKKwlnaXRfY29uZmlnKGdpdF9ibGFtZV9jb25maWcsICZvdXRwdXRfb3B0aW9uKTsKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2cywgTlVMTCk7CisJcmV2cy5kYXRlX21vZGUgPSBibGFtZV9kYXRlX21vZGU7CisJcmV2cy5kaWZmb3B0LmZsYWdzLmFsbG93X3RleHRjb252ID0gMTsKKwlyZXZzLmRpZmZvcHQuZmxhZ3MuZm9sbG93X3JlbmFtZXMgPSAxOworCisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKwlkYXNoZGFzaF9wb3MgPSAwOworCXNob3dfcHJvZ3Jlc3MgPSAtMTsKKworCXBhcnNlX29wdGlvbnNfc3RhcnQoJmN0eCwgYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwgUEFSU0VfT1BUX0tFRVBfQVJHVjApOworCWZvciAoOzspIHsKKwkJc3dpdGNoIChwYXJzZV9vcHRpb25zX3N0ZXAoJmN0eCwgb3B0aW9ucywgYmxhbWVfb3B0X3VzYWdlKSkgeworCQljYXNlIFBBUlNFX09QVF9IRUxQOgorCQljYXNlIFBBUlNFX09QVF9FUlJPUjoKKwkJCWV4aXQoMTI5KTsKKwkJY2FzZSBQQVJTRV9PUFRfQ09NUExFVEU6CisJCQlleGl0KDApOworCQljYXNlIFBBUlNFX09QVF9ET05FOgorCQkJaWYgKGN0eC5hcmd2WzBdKQorCQkJCWRhc2hkYXNoX3BvcyA9IGN0eC5jcGlkeDsKKwkJCWdvdG8gcGFyc2VfZG9uZTsKKwkJfQorCisJCWlmICghc3RyY21wKGN0eC5hcmd2WzBdLCAiLS1yZXZlcnNlIikpIHsKKwkJCWN0eC5hcmd2WzBdID0gIi0tY2hpbGRyZW4iOworCQkJcmV2ZXJzZSA9IDE7CisJCX0KKwkJcGFyc2VfcmV2aXNpb25fb3B0KCZyZXZzLCAmY3R4LCBvcHRpb25zLCBibGFtZV9vcHRfdXNhZ2UpOworCX0KK3BhcnNlX2RvbmU6CisJbm9fd2hvbGVfZmlsZV9yZW5hbWUgPSAhcmV2cy5kaWZmb3B0LmZsYWdzLmZvbGxvd19yZW5hbWVzOworCXhkbF9vcHRzIHw9IHJldnMuZGlmZm9wdC54ZGxfb3B0cyAmIFhERl9JTkRFTlRfSEVVUklTVElDOworCXJldnMuZGlmZm9wdC5mbGFncy5mb2xsb3dfcmVuYW1lcyA9IDA7CisJYXJnYyA9IHBhcnNlX29wdGlvbnNfZW5kKCZjdHgpOworCisJaWYgKGluY3JlbWVudGFsIHx8IChvdXRwdXRfb3B0aW9uICYgT1VUUFVUX1BPUkNFTEFJTikpIHsKKwkJaWYgKHNob3dfcHJvZ3Jlc3MgPiAwKQorCQkJZGllKF8oIi0tcHJvZ3Jlc3MgY2FuJ3QgYmUgdXNlZCB3aXRoIC0taW5jcmVtZW50YWwgb3IgcG9yY2VsYWluIGZvcm1hdHMiKSk7CisJCXNob3dfcHJvZ3Jlc3MgPSAwOworCX0gZWxzZSBpZiAoc2hvd19wcm9ncmVzcyA8IDApCisJCXNob3dfcHJvZ3Jlc3MgPSBpc2F0dHkoMik7CisKKwlpZiAoMCA8IGFiYnJldiAmJiBhYmJyZXYgPCBoZXhzeikKKwkJLyogb25lIG1vcmUgYWJicmV2IGxlbmd0aCBpcyBuZWVkZWQgZm9yIHRoZSBib3VuZGFyeSBjb21taXQgKi8KKwkJYWJicmV2Kys7CisJZWxzZSBpZiAoIWFiYnJldikKKwkJYWJicmV2ID0gaGV4c3o7CisKKwlpZiAocmV2c19maWxlICYmIHJlYWRfYW5jZXN0cnkocmV2c19maWxlKSkKKwkJZGllX2Vycm5vKCJyZWFkaW5nIGdyYWZ0IGZpbGUgJyVzJyBmYWlsZWQiLCByZXZzX2ZpbGUpOworCisJaWYgKGNtZF9pc19hbm5vdGF0ZSkgeworCQlvdXRwdXRfb3B0aW9uIHw9IE9VVFBVVF9BTk5PVEFURV9DT01QQVQ7CisJCWJsYW1lX2RhdGVfbW9kZS50eXBlID0gREFURV9JU084NjAxOworCX0gZWxzZSB7CisJCWJsYW1lX2RhdGVfbW9kZSA9IHJldnMuZGF0ZV9tb2RlOworCX0KKworCS8qIFRoZSBtYXhpbXVtIHdpZHRoIHVzZWQgdG8gc2hvdyB0aGUgZGF0ZXMgKi8KKwlzd2l0Y2ggKGJsYW1lX2RhdGVfbW9kZS50eXBlKSB7CisJY2FzZSBEQVRFX1JGQzI4MjI6CisJCWJsYW1lX2RhdGVfd2lkdGggPSBzaXplb2YoIlRodSwgMTkgT2N0IDIwMDYgMTY6MDA6MDQgLTA3MDAiKTsKKwkJYnJlYWs7CisJY2FzZSBEQVRFX0lTTzg2MDFfU1RSSUNUOgorCQlibGFtZV9kYXRlX3dpZHRoID0gc2l6ZW9mKCIyMDA2LTEwLTE5VDE2OjAwOjA0LTA3OjAwIik7CisJCWJyZWFrOworCWNhc2UgREFURV9JU084NjAxOgorCQlibGFtZV9kYXRlX3dpZHRoID0gc2l6ZW9mKCIyMDA2LTEwLTE5IDE2OjAwOjA0IC0wNzAwIik7CisJCWJyZWFrOworCWNhc2UgREFURV9SQVc6CisJCWJsYW1lX2RhdGVfd2lkdGggPSBzaXplb2YoIjExNjEyOTg4MDQgLTA3MDAiKTsKKwkJYnJlYWs7CisJY2FzZSBEQVRFX1VOSVg6CisJCWJsYW1lX2RhdGVfd2lkdGggPSBzaXplb2YoIjExNjEyOTg4MDQiKTsKKwkJYnJlYWs7CisJY2FzZSBEQVRFX1NIT1JUOgorCQlibGFtZV9kYXRlX3dpZHRoID0gc2l6ZW9mKCIyMDA2LTEwLTE5Iik7CisJCWJyZWFrOworCWNhc2UgREFURV9SRUxBVElWRToKKwkJLyoKKwkJICogVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUKKwkJICogbWF4aW11bSBkaXNwbGF5IHdpZHRoIGZvciBhIHJlbGF0aXZlIHRpbWVzdGFtcCBpbgorCQkgKiAiZ2l0IGJsYW1lIiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMQorCQkgKiBtb250aHMgYWdvIiwgd2hpY2ggdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdAorCQkgKiBhbW9uZyB2YXJpb3VzIGZvcm1zIG9mIHJlbGF0aXZlIHRpbWVzdGFtcHMsIGJ1dAorCQkgKiB5b3VyIGxhbmd1YWdlIG1heSBuZWVkIG1vcmUgb3IgZmV3ZXIgZGlzcGxheQorCQkgKiBjb2x1bW5zLgorCQkgKi8KKwkJYmxhbWVfZGF0ZV93aWR0aCA9IHV0Zjhfc3Ryd2lkdGgoXygiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIpKSArIDE7IC8qIGFkZCB0aGUgbnVsbCAqLworCQlicmVhazsKKwljYXNlIERBVEVfSFVNQU46CisJCS8qIElmIHRoZSB5ZWFyIGlzIHNob3duLCBubyB0aW1lIGlzIHNob3duICovCisJCWJsYW1lX2RhdGVfd2lkdGggPSBzaXplb2YoIlRodSBPY3QgMTkgMTY6MDAiKTsKKwkJYnJlYWs7CisJY2FzZSBEQVRFX05PUk1BTDoKKwkJYmxhbWVfZGF0ZV93aWR0aCA9IHNpemVvZigiVGh1IE9jdCAxOSAxNjowMDowNCAyMDA2IC0wNzAwIik7CisJCWJyZWFrOworCWNhc2UgREFURV9TVFJGVElNRToKKwkJYmxhbWVfZGF0ZV93aWR0aCA9IHN0cmxlbihzaG93X2RhdGUoMCwgMCwgJmJsYW1lX2RhdGVfbW9kZSkpICsgMTsgLyogYWRkIHRoZSBudWxsICovCisJCWJyZWFrOworCX0KKwlibGFtZV9kYXRlX3dpZHRoIC09IDE7IC8qIHN0cmlwIHRoZSBudWxsICovCisKKwlpZiAocmV2cy5kaWZmb3B0LmZsYWdzLmZpbmRfY29waWVzX2hhcmRlcikKKwkJb3B0IHw9IChQSUNLQVhFX0JMQU1FX0NPUFkgfCBQSUNLQVhFX0JMQU1FX01PVkUgfAorCQkJUElDS0FYRV9CTEFNRV9DT1BZX0hBUkRFUik7CisKKwkvKgorCSAqIFdlIGhhdmUgY29sbGVjdGVkIG9wdGlvbnMgdW5rbm93biB0byB1cyBpbiBhcmd2WzEuLnVua10KKwkgKiB3aGljaCBhcmUgdG8gYmUgcGFzc2VkIHRvIHJldmlzaW9uIG1hY2hpbmVyeSBpZiB3ZSBhcmUKKwkgKiBnb2luZyB0byBkbyB0aGUgImJvdHRvbSIgcHJvY2Vzc2luZy4KKwkgKgorCSAqIFRoZSByZW1haW5pbmcgYXJlOgorCSAqCisJICogKDEpIGlmIGRhc2hkYXNoX3BvcyAhPSAwLCBpdCBpcyBlaXRoZXIKKwkgKiAgICAgImJsYW1lIFtyZXZpc2lvbnNdIC0tIDxwYXRoPiIgb3IKKwkgKiAgICAgImJsYW1lIC0tIDxwYXRoPiA8cmV2PiIKKwkgKgorCSAqICgyKSBvdGhlcndpc2UsIGl0IGlzIG9uZSBvZiB0aGUgdHdvOgorCSAqICAgICAiYmxhbWUgW3JldmlzaW9uc10gPHBhdGg+IgorCSAqICAgICAiYmxhbWUgPHBhdGg+IDxyZXY+IgorCSAqCisJICogTm90ZSB0aGF0IHdlIG11c3Qgc3RyaXAgb3V0IDxwYXRoPiBmcm9tIHRoZSBhcmd1bWVudHM6IHdlIGRvIG5vdAorCSAqIHdhbnQgdGhlIHBhdGggcHJ1bmluZyBidXQgd2UgbWF5IHdhbnQgImJvdHRvbSIgcHJvY2Vzc2luZy4KKwkgKi8KKwlpZiAoZGFzaGRhc2hfcG9zKSB7CisJCXN3aXRjaCAoYXJnYyAtIGRhc2hkYXNoX3BvcyAtIDEpIHsKKwkJY2FzZSAyOiAvKiAoMWIpICovCisJCQlpZiAoYXJnYyAhPSA0KQorCQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhibGFtZV9vcHRfdXNhZ2UsIG9wdGlvbnMpOworCQkJLyogcmVvcmRlciBmb3IgdGhlIG5ldyB3YXk6IDxyZXY+IC0tIDxwYXRoPiAqLworCQkJYXJndlsxXSA9IGFyZ3ZbM107CisJCQlhcmd2WzNdID0gYXJndlsyXTsKKwkJCWFyZ3ZbMl0gPSAiLS0iOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAxOiAvKiAoMWEpICovCisJCQlwYXRoID0gYWRkX3ByZWZpeChwcmVmaXgsIGFyZ3ZbLS1hcmdjXSk7CisJCQlhcmd2W2FyZ2NdID0gTlVMTDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJsYW1lX29wdF91c2FnZSwgb3B0aW9ucyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYXJnYyA8IDIpCisJCQl1c2FnZV93aXRoX29wdGlvbnMoYmxhbWVfb3B0X3VzYWdlLCBvcHRpb25zKTsKKwkJaWYgKGFyZ2MgPT0gMyAmJiBpc19hX3Jldihhcmd2W2FyZ2MgLSAxXSkpIHsgLyogKDJiKSAqLworCQkJcGF0aCA9IGFkZF9wcmVmaXgocHJlZml4LCBhcmd2WzFdKTsKKwkJCWFyZ3ZbMV0gPSBhcmd2WzJdOworCQl9IGVsc2UgewkvKiAoMmEpICovCisJCQlpZiAoYXJnYyA9PSAyICYmIGlzX2FfcmV2KGFyZ3ZbMV0pICYmICFnZXRfZ2l0X3dvcmtfdHJlZSgpKQorCQkJCWRpZSgibWlzc2luZyA8cGF0aD4gdG8gYmxhbWUiKTsKKwkJCXBhdGggPSBhZGRfcHJlZml4KHByZWZpeCwgYXJndlthcmdjIC0gMV0pOworCQl9CisJCWFyZ3ZbYXJnYyAtIDFdID0gIi0tIjsKKwl9CisKKwlyZXZzLmRpc2FibGVfc3RkaW4gPSAxOworCXNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2cywgTlVMTCk7CisJaWYgKCFyZXZzLnBlbmRpbmcubnIgJiYgaXNfYmFyZV9yZXBvc2l0b3J5KCkpIHsKKwkJc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQ7CisJCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisKKwkJaWYgKCFyZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCQkmaGVhZF9vaWQsIE5VTEwpIHx8CisJCSAgICAhKGhlYWRfY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHJldnMucmVwbywKKwkJCQkJCQkgICAgICZoZWFkX29pZCwgMSkpKQorCQkJZGllKCJubyBzdWNoIHJlZjogSEVBRCIpOworCisJCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2cywgJmhlYWRfY29tbWl0LT5vYmplY3QsICJIRUFEIik7CisJfQorCisJaW5pdF9zY29yZWJvYXJkKCZzYik7CisJc2IucmV2cyA9ICZyZXZzOworCXNiLmNvbnRlbnRzX2Zyb20gPSBjb250ZW50c19mcm9tOworCXNiLnJldmVyc2UgPSByZXZlcnNlOworCXNiLnJlcG8gPSB0aGVfcmVwb3NpdG9yeTsKKwlidWlsZF9pZ25vcmVsaXN0KCZzYiwgJmlnbm9yZV9yZXZzX2ZpbGVfbGlzdCwgJmlnbm9yZV9yZXZfbGlzdCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmlnbm9yZV9yZXZzX2ZpbGVfbGlzdCwgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmlnbm9yZV9yZXZfbGlzdCwgMCk7CisJc2V0dXBfc2NvcmVib2FyZCgmc2IsIHBhdGgsICZvKTsKKworCS8qCisJICogQ2hhbmdlZC1wYXRoIEJsb29tIGZpbHRlcnMgYXJlIGRpc2FibGVkIHdoZW4gbG9va2luZworCSAqIGZvciBjb3BpZXMuCisJICovCisJaWYgKCEob3B0ICYgUElDS0FYRV9CTEFNRV9DT1BZKSkKKwkJc2V0dXBfYmxhbWVfYmxvb21fZGF0YSgmc2IsIHBhdGgpOworCisJbG5vID0gc2IubnVtX2xpbmVzOworCisJaWYgKGxubyAmJiAhcmFuZ2VfbGlzdC5ucikKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyYW5nZV9saXN0LCAiMSIpOworCisJYW5jaG9yID0gMTsKKwlyYW5nZV9zZXRfaW5pdCgmcmFuZ2VzLCByYW5nZV9saXN0Lm5yKTsKKwlmb3IgKHJhbmdlX2kgPSAwOyByYW5nZV9pIDwgcmFuZ2VfbGlzdC5ucjsgKytyYW5nZV9pKSB7CisJCWxvbmcgYm90dG9tLCB0b3A7CisJCWlmIChwYXJzZV9yYW5nZV9hcmcocmFuZ2VfbGlzdC5pdGVtc1tyYW5nZV9pXS5zdHJpbmcsCisJCQkJICAgIG50aF9saW5lX2NiLCAmc2IsIGxubywgYW5jaG9yLAorCQkJCSAgICAmYm90dG9tLCAmdG9wLCBzYi5wYXRoLAorCQkJCSAgICB0aGVfcmVwb3NpdG9yeS0+aW5kZXgpKQorCQkJdXNhZ2UoYmxhbWVfdXNhZ2UpOworCQlpZiAoKCFsbm8gJiYgKHRvcCB8fCBib3R0b20pKSB8fCBsbm8gPCBib3R0b20pCisJCQlkaWUoUV8oImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmUiLAorCQkJICAgICAgICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIsCisJCQkgICAgICAgbG5vKSwgcGF0aCwgbG5vKTsKKwkJaWYgKGJvdHRvbSA8IDEpCisJCQlib3R0b20gPSAxOworCQlpZiAodG9wIDwgMSB8fCBsbm8gPCB0b3ApCisJCQl0b3AgPSBsbm87CisJCWJvdHRvbS0tOworCQlyYW5nZV9zZXRfYXBwZW5kX3Vuc2FmZSgmcmFuZ2VzLCBib3R0b20sIHRvcCk7CisJCWFuY2hvciA9IHRvcCArIDE7CisJfQorCXNvcnRfYW5kX21lcmdlX3JhbmdlX3NldCgmcmFuZ2VzKTsKKworCWZvciAocmFuZ2VfaSA9IHJhbmdlcy5ucjsgcmFuZ2VfaSA+IDA7IC0tcmFuZ2VfaSkgeworCQljb25zdCBzdHJ1Y3QgcmFuZ2UgKnIgPSAmcmFuZ2VzLnJhbmdlc1tyYW5nZV9pIC0gMV07CisJCWVudCA9IGJsYW1lX2VudHJ5X3ByZXBlbmQoZW50LCByLT5zdGFydCwgci0+ZW5kLCBvKTsKKwl9CisKKwlvLT5zdXNwZWN0cyA9IGVudDsKKwlwcmlvX3F1ZXVlX3B1dCgmc2IuY29tbWl0cywgby0+Y29tbWl0KTsKKworCWJsYW1lX29yaWdpbl9kZWNyZWYobyk7CisKKwlyYW5nZV9zZXRfcmVsZWFzZSgmcmFuZ2VzKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmcmFuZ2VfbGlzdCwgMCk7CisKKwlzYi5lbnQgPSBOVUxMOworCXNiLnBhdGggPSBwYXRoOworCisJaWYgKGJsYW1lX21vdmVfc2NvcmUpCisJCXNiLm1vdmVfc2NvcmUgPSBibGFtZV9tb3ZlX3Njb3JlOworCWlmIChibGFtZV9jb3B5X3Njb3JlKQorCQlzYi5jb3B5X3Njb3JlID0gYmxhbWVfY29weV9zY29yZTsKKworCXNiLmRlYnVnID0gREVCVUdfQkxBTUU7CisJc2Iub25fc2FuaXR5X2ZhaWwgPSAmc2FuaXR5X2NoZWNrX29uX2ZhaWw7CisKKwlzYi5zaG93X3Jvb3QgPSBzaG93X3Jvb3Q7CisJc2IueGRsX29wdHMgPSB4ZGxfb3B0czsKKwlzYi5ub193aG9sZV9maWxlX3JlbmFtZSA9IG5vX3dob2xlX2ZpbGVfcmVuYW1lOworCisJcmVhZF9tYWlsbWFwKCZtYWlsbWFwLCBOVUxMKTsKKworCXNiLmZvdW5kX2d1aWx0eV9lbnRyeSA9ICZmb3VuZF9ndWlsdHlfZW50cnk7CisJc2IuZm91bmRfZ3VpbHR5X2VudHJ5X2RhdGEgPSAmcGk7CisJaWYgKHNob3dfcHJvZ3Jlc3MpCisJCXBpLnByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcyhfKCJCbGFtaW5nIGxpbmVzIiksIHNiLm51bV9saW5lcyk7CisKKwlhc3NpZ25fYmxhbWUoJnNiLCBvcHQpOworCisJc3RvcF9wcm9ncmVzcygmcGkucHJvZ3Jlc3MpOworCisJaWYgKCFpbmNyZW1lbnRhbCkKKwkJc2V0dXBfcGFnZXIoKTsKKwllbHNlCisJCXJldHVybiAwOworCisJYmxhbWVfc29ydF9maW5hbCgmc2IpOworCisJYmxhbWVfY29hbGVzY2UoJnNiKTsKKworCWlmICghKG91dHB1dF9vcHRpb24gJiAoT1VUUFVUX0NPTE9SX0xJTkUgfCBPVVRQVVRfU0hPV19BR0VfV0lUSF9DT0xPUikpKQorCQlvdXRwdXRfb3B0aW9uIHw9IGNvbG9yaW5nX21vZGU7CisKKwlpZiAoIShvdXRwdXRfb3B0aW9uICYgT1VUUFVUX1BPUkNFTEFJTikpIHsKKwkJZmluZF9hbGlnbm1lbnQoJnNiLCAmb3V0cHV0X29wdGlvbik7CisJCWlmICghKnJlcGVhdGVkX21ldGFfY29sb3IgJiYKKwkJICAgIChvdXRwdXRfb3B0aW9uICYgT1VUUFVUX0NPTE9SX0xJTkUpKQorCQkJeHNucHJpbnRmKHJlcGVhdGVkX21ldGFfY29sb3IsCisJCQkJICBzaXplb2YocmVwZWF0ZWRfbWV0YV9jb2xvciksCisJCQkJICAiJXMiLCBHSVRfQ09MT1JfQ1lBTik7CisJfQorCWlmIChvdXRwdXRfb3B0aW9uICYgT1VUUFVUX0FOTk9UQVRFX0NPTVBBVCkKKwkJb3V0cHV0X29wdGlvbiAmPSB+KE9VVFBVVF9DT0xPUl9MSU5FIHwgT1VUUFVUX1NIT1dfQUdFX1dJVEhfQ09MT1IpOworCisJb3V0cHV0KCZzYiwgb3V0cHV0X29wdGlvbik7CisJZnJlZSgodm9pZCAqKXNiLmZpbmFsX2J1Zik7CisJZm9yIChlbnQgPSBzYi5lbnQ7IGVudDsgKSB7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqZSA9IGVudC0+bmV4dDsKKwkJZnJlZShlbnQpOworCQllbnQgPSBlOworCX0KKworCWlmIChzaG93X3N0YXRzKSB7CisJCXByaW50ZigibnVtIHJlYWQgYmxvYjogJWRcbiIsIHNiLm51bV9yZWFkX2Jsb2IpOworCQlwcmludGYoIm51bSBnZXQgcGF0Y2g6ICVkXG4iLCBzYi5udW1fZ2V0X3BhdGNoKTsKKwkJcHJpbnRmKCJudW0gY29tbWl0czogJWRcbiIsIHNiLm51bV9jb21taXRzKTsKKwl9CisKKwljbGVhbnVwX3Njb3JlYm9hcmQoJnNiKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vYnJhbmNoLmMgYi9idWlsdGluL2JyYW5jaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjY2I2MWIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2JyYW5jaC5jCkBAIC0wLDAgKzEsODUzIEBACisvKgorICogQnVpbHRpbiAiZ2l0IGJyYW5jaCIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgS3Jpc3RpYW4gSMO4Z3NiZXJnIDxrcmhAcmVkaGF0LmNvbT4KKyAqIEJhc2VkIG9uIGdpdC1icmFuY2guc2ggYnkgSnVuaW8gQyBIYW1hbm8uCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImNvbHVtbi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJ3dC1zdGF0dXMuaCIKKyNpbmNsdWRlICJyZWYtZmlsdGVyLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKyNpbmNsdWRlICJoZWxwLmgiCisjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9icmFuY2hfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIiksCisJTl8oImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIiksCisJTl8oImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaC1uYW1lPi4uLiIpLAorCU5fKCJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iKSwKKwlOXygiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLWMgfCAtQykgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IiksCisJTl8oImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iKSwKKwlOXygiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpoZWFkOworc3RhdGljIHN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisKK3N0YXRpYyBpbnQgYnJhbmNoX3VzZV9jb2xvciA9IC0xOworc3RhdGljIGNoYXIgYnJhbmNoX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CisJR0lUX0NPTE9SX1JFU0VULAorCUdJVF9DT0xPUl9OT1JNQUwsICAgICAgIC8qIFBMQUlOICovCisJR0lUX0NPTE9SX1JFRCwgICAgICAgICAgLyogUkVNT1RFICovCisJR0lUX0NPTE9SX05PUk1BTCwgICAgICAgLyogTE9DQUwgKi8KKwlHSVRfQ09MT1JfR1JFRU4sICAgICAgICAvKiBDVVJSRU5UICovCisJR0lUX0NPTE9SX0JMVUUsICAgICAgICAgLyogVVBTVFJFQU0gKi8KKwlHSVRfQ09MT1JfQ1lBTiwgICAgICAgICAvKiBXT1JLVFJFRSAqLworfTsKK2VudW0gY29sb3JfYnJhbmNoIHsKKwlCUkFOQ0hfQ09MT1JfUkVTRVQgPSAwLAorCUJSQU5DSF9DT0xPUl9QTEFJTiA9IDEsCisJQlJBTkNIX0NPTE9SX1JFTU9URSA9IDIsCisJQlJBTkNIX0NPTE9SX0xPQ0FMID0gMywKKwlCUkFOQ0hfQ09MT1JfQ1VSUkVOVCA9IDQsCisJQlJBTkNIX0NPTE9SX1VQU1RSRUFNID0gNSwKKwlCUkFOQ0hfQ09MT1JfV09SS1RSRUUgPSA2Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29sb3JfYnJhbmNoX3Nsb3RzW10gPSB7CisJW0JSQU5DSF9DT0xPUl9SRVNFVF0JPSAicmVzZXQiLAorCVtCUkFOQ0hfQ09MT1JfUExBSU5dCT0gInBsYWluIiwKKwlbQlJBTkNIX0NPTE9SX1JFTU9URV0JPSAicmVtb3RlIiwKKwlbQlJBTkNIX0NPTE9SX0xPQ0FMXQk9ICJsb2NhbCIsCisJW0JSQU5DSF9DT0xPUl9DVVJSRU5UXQk9ICJjdXJyZW50IiwKKwlbQlJBTkNIX0NPTE9SX1VQU1RSRUFNXSA9ICJ1cHN0cmVhbSIsCisJW0JSQU5DSF9DT0xPUl9XT1JLVFJFRV0gPSAid29ya3RyZWUiLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBvdXRwdXQgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29sb3B0czsKKworZGVmaW5lX2xpc3RfY29uZmlnX2FycmF5KGNvbG9yX2JyYW5jaF9zbG90cyk7CisKK3N0YXRpYyBpbnQgZ2l0X2JyYW5jaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqc2xvdF9uYW1lOworCXN0cnVjdCByZWZfc29ydGluZyAqKnNvcnRpbmdfdGFpbCA9IChzdHJ1Y3QgcmVmX3NvcnRpbmcgKiopY2I7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJicmFuY2guc29ydCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcGFyc2VfcmVmX3NvcnRpbmcoc29ydGluZ190YWlsLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdGFydHNfd2l0aCh2YXIsICJjb2x1bW4uIikpCisJCXJldHVybiBnaXRfY29sdW1uX2NvbmZpZyh2YXIsIHZhbHVlLCAiYnJhbmNoIiwgJmNvbG9wdHMpOworCWlmICghc3RyY21wKHZhciwgImNvbG9yLmJyYW5jaCIpKSB7CisJCWJyYW5jaF91c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChza2lwX3ByZWZpeCh2YXIsICJjb2xvci5icmFuY2guIiwgJnNsb3RfbmFtZSkpIHsKKwkJaW50IHNsb3QgPSBMT09LVVBfQ09ORklHKGNvbG9yX2JyYW5jaF9zbG90cywgc2xvdF9uYW1lKTsKKwkJaWYgKHNsb3QgPCAwKQorCQkJcmV0dXJuIDA7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcmV0dXJuIGNvbG9yX3BhcnNlKHZhbHVlLCBicmFuY2hfY29sb3JzW3Nsb3RdKTsKKwl9CisJcmV0dXJuIGdpdF9jb2xvcl9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpicmFuY2hfZ2V0X2NvbG9yKGVudW0gY29sb3JfYnJhbmNoIGl4KQoreworCWlmICh3YW50X2NvbG9yKGJyYW5jaF91c2VfY29sb3IpKQorCQlyZXR1cm4gYnJhbmNoX2NvbG9yc1tpeF07CisJcmV0dXJuICIiOworfQorCitzdGF0aWMgaW50IGJyYW5jaF9tZXJnZWQoaW50IGtpbmQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgc3RydWN0IGNvbW1pdCAqcmV2LCBzdHJ1Y3QgY29tbWl0ICpoZWFkX3JldikKK3sKKwkvKgorCSAqIFRoaXMgY2hlY2tzIHdoZXRoZXIgdGhlIG1lcmdlIGJhc2VzIG9mIGJyYW5jaCBhbmQgSEVBRCAob3IKKwkgKiB0aGUgb3RoZXIgYnJhbmNoIHRoaXMgYnJhbmNoIGJ1aWxkcyB1cG9uKSBjb250YWlucyB0aGUKKwkgKiBicmFuY2gsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGJyYW5jaCBoYXMgYWxyZWFkeSBiZWVuIG1lcmdlZAorCSAqIHNhZmVseSB0byBIRUFEIChvciB0aGUgb3RoZXIgYnJhbmNoKS4KKwkgKi8KKwlzdHJ1Y3QgY29tbWl0ICpyZWZlcmVuY2VfcmV2ID0gTlVMTDsKKwljb25zdCBjaGFyICpyZWZlcmVuY2VfbmFtZSA9IE5VTEw7CisJdm9pZCAqcmVmZXJlbmNlX25hbWVfdG9fZnJlZSA9IE5VTEw7CisJaW50IG1lcmdlZDsKKworCWlmIChraW5kID09IEZJTFRFUl9SRUZTX0JSQU5DSEVTKSB7CisJCXN0cnVjdCBicmFuY2ggKmJyYW5jaCA9IGJyYW5jaF9nZXQobmFtZSk7CisJCWNvbnN0IGNoYXIgKnVwc3RyZWFtID0gYnJhbmNoX2dldF91cHN0cmVhbShicmFuY2gsIE5VTEwpOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCQlpZiAodXBzdHJlYW0gJiYKKwkJICAgIChyZWZlcmVuY2VfbmFtZSA9IHJlZmVyZW5jZV9uYW1lX3RvX2ZyZWUgPQorCQkgICAgIHJlc29sdmVfcmVmZHVwKHVwc3RyZWFtLCBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCSAgICAmb2lkLCBOVUxMKSkgIT0gTlVMTCkKKwkJCXJlZmVyZW5jZV9yZXYgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQkJJm9pZCk7CisJfQorCWlmICghcmVmZXJlbmNlX3JldikKKwkJcmVmZXJlbmNlX3JldiA9IGhlYWRfcmV2OworCisJbWVyZ2VkID0gaW5fbWVyZ2VfYmFzZXMocmV2LCByZWZlcmVuY2VfcmV2KTsKKworCS8qCisJICogQWZ0ZXIgdGhlIHNhZmV0eSB2YWx2ZSBpcyBmdWxseSByZWRlZmluZWQgdG8gImNoZWNrIHdpdGgKKwkgKiB1cHN0cmVhbSwgaWYgYW55LCBvdGhlcndpc2Ugd2l0aCBIRUFEIiwgd2Ugc2hvdWxkIGp1c3QKKwkgKiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgaW5fbWVyZ2VfYmFzZXMoKSBhYm92ZSB3aXRob3V0CisJICogYW55IG9mIHRoZSBmb2xsb3dpbmcgY29kZSwgYnV0IGR1cmluZyB0aGUgdHJhbnNpdGlvbiBwZXJpb2QsCisJICogYSBnZW50bGUgcmVtaW5kZXIgaXMgaW4gb3JkZXIuCisJICovCisJaWYgKChoZWFkX3JldiAhPSByZWZlcmVuY2VfcmV2KSAmJgorCSAgICBpbl9tZXJnZV9iYXNlcyhyZXYsIGhlYWRfcmV2KSAhPSBtZXJnZWQpIHsKKwkJaWYgKG1lcmdlZCkKKwkJCXdhcm5pbmcoXygiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKwkJCQkiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIiksCisJCQkJbmFtZSwgcmVmZXJlbmNlX25hbWUpOworCQllbHNlCisJCQl3YXJuaW5nKF8oIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisJCQkJIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIpLAorCQkJCW5hbWUsIHJlZmVyZW5jZV9uYW1lKTsKKwl9CisJZnJlZShyZWZlcmVuY2VfbmFtZV90b19mcmVlKTsKKwlyZXR1cm4gbWVyZ2VkOworfQorCitzdGF0aWMgaW50IGNoZWNrX2JyYW5jaF9jb21taXQoY29uc3QgY2hhciAqYnJhbmNobmFtZSwgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBjb21taXQgKmhlYWRfcmV2LAorCQkJICAgICAgIGludCBraW5kcywgaW50IGZvcmNlKQoreworCXN0cnVjdCBjb21taXQgKnJldiA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCWlmICghcmV2KSB7CisJCWVycm9yKF8oIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIpLCByZWZuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIWZvcmNlICYmICFicmFuY2hfbWVyZ2VkKGtpbmRzLCBicmFuY2huYW1lLCByZXYsIGhlYWRfcmV2KSkgeworCQllcnJvcihfKCJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKwkJICAgICAgIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsICIKKwkJICAgICAgInJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIiksIGJyYW5jaG5hbWUsIGJyYW5jaG5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfYnJhbmNoX2NvbmZpZyhjb25zdCBjaGFyICpicmFuY2huYW1lKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgImJyYW5jaC4lcyIsIGJyYW5jaG5hbWUpOworCWlmIChnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uKGJ1Zi5idWYsIE5VTEwpIDwgMCkKKwkJd2FybmluZyhfKCJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIikpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgaW50IGRlbGV0ZV9icmFuY2hlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGludCBmb3JjZSwgaW50IGtpbmRzLAorCQkJICAgaW50IHF1aWV0KQoreworCXN0cnVjdCBjb21taXQgKmhlYWRfcmV2ID0gTlVMTDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljaGFyICpuYW1lID0gTlVMTDsKKwljb25zdCBjaGFyICpmbXQ7CisJaW50IGk7CisJaW50IHJldCA9IDA7CisJaW50IHJlbW90ZV9icmFuY2ggPSAwOworCXN0cnVjdCBzdHJidWYgYm5hbWUgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBhbGxvd2VkX2ludGVycHJldDsKKworCXN3aXRjaCAoa2luZHMpIHsKKwljYXNlIEZJTFRFUl9SRUZTX1JFTU9URVM6CisJCWZtdCA9ICJyZWZzL3JlbW90ZXMvJXMiOworCQkvKiBGb3Igc3Vic2VxdWVudCBVSSBtZXNzYWdlcyAqLworCQlyZW1vdGVfYnJhbmNoID0gMTsKKwkJYWxsb3dlZF9pbnRlcnByZXQgPSBJTlRFUlBSRVRfQlJBTkNIX1JFTU9URTsKKworCQlmb3JjZSA9IDE7CisJCWJyZWFrOworCWNhc2UgRklMVEVSX1JFRlNfQlJBTkNIRVM6CisJCWZtdCA9ICJyZWZzL2hlYWRzLyVzIjsKKwkJYWxsb3dlZF9pbnRlcnByZXQgPSBJTlRFUlBSRVRfQlJBTkNIX0xPQ0FMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoXygiY2Fubm90IHVzZSAtYSB3aXRoIC1kIikpOworCX0KKworCWlmICghZm9yY2UpIHsKKwkJaGVhZF9yZXYgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJmhlYWRfb2lkKTsKKwkJaWYgKCFoZWFkX3JldikKKwkJCWRpZShfKCJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiKSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyssIHN0cmJ1Zl9yZXNldCgmYm5hbWUpKSB7CisJCWNoYXIgKnRhcmdldCA9IE5VTEw7CisJCWludCBmbGFncyA9IDA7CisKKwkJc3RyYnVmX2JyYW5jaG5hbWUoJmJuYW1lLCBhcmd2W2ldLCBhbGxvd2VkX2ludGVycHJldCk7CisJCWZyZWUobmFtZSk7CisJCW5hbWUgPSBta3BhdGhkdXAoZm10LCBibmFtZS5idWYpOworCisJCWlmIChraW5kcyA9PSBGSUxURVJfUkVGU19CUkFOQ0hFUykgeworCQkJY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCA9CisJCQkJZmluZF9zaGFyZWRfc3ltcmVmKCJIRUFEIiwgbmFtZSk7CisJCQlpZiAod3QpIHsKKwkJCQllcnJvcihfKCJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnICIKKwkJCQkJImNoZWNrZWQgb3V0IGF0ICclcyciKSwKKwkJCQkgICAgICBibmFtZS5idWYsIHd0LT5wYXRoKTsKKwkJCQlyZXQgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJdGFyZ2V0ID0gcmVzb2x2ZV9yZWZkdXAobmFtZSwKKwkJCQkJUkVTT0xWRV9SRUZfUkVBRElORworCQkJCQl8IFJFU09MVkVfUkVGX05PX1JFQ1VSU0UKKwkJCQkJfCBSRVNPTFZFX1JFRl9BTExPV19CQURfTkFNRSwKKwkJCQkJJm9pZCwgJmZsYWdzKTsKKwkJaWYgKCF0YXJnZXQpIHsKKwkJCWVycm9yKHJlbW90ZV9icmFuY2gKKwkJCSAgICAgID8gXygicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iKQorCQkJICAgICAgOiBfKCJicmFuY2ggJyVzJyBub3QgZm91bmQuIiksIGJuYW1lLmJ1Zik7CisJCQlyZXQgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIShmbGFncyAmIChSRUZfSVNTWU1SRUZ8UkVGX0lTQlJPS0VOKSkgJiYKKwkJICAgIGNoZWNrX2JyYW5jaF9jb21taXQoYm5hbWUuYnVmLCBuYW1lLCAmb2lkLCBoZWFkX3Jldiwga2luZHMsCisJCQkJCWZvcmNlKSkgeworCQkJcmV0ID0gMTsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCisJCWlmIChkZWxldGVfcmVmKE5VTEwsIG5hbWUsIGlzX251bGxfb2lkKCZvaWQpID8gTlVMTCA6ICZvaWQsCisJCQkgICAgICAgUkVGX05PX0RFUkVGKSkgeworCQkJZXJyb3IocmVtb3RlX2JyYW5jaAorCQkJICAgICAgPyBfKCJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciKQorCQkJICAgICAgOiBfKCJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIpLAorCQkJICAgICAgYm5hbWUuYnVmKTsKKwkJCXJldCA9IDE7CisJCQlnb3RvIG5leHQ7CisJCX0KKwkJaWYgKCFxdWlldCkgeworCQkJcHJpbnRmKHJlbW90ZV9icmFuY2gKKwkJCSAgICAgICA/IF8oIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIpCisJCQkgICAgICAgOiBfKCJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIpLAorCQkJICAgICAgIGJuYW1lLmJ1ZiwKKwkJCSAgICAgICAoZmxhZ3MgJiBSRUZfSVNCUk9LRU4pID8gImJyb2tlbiIKKwkJCSAgICAgICA6IChmbGFncyAmIFJFRl9JU1NZTVJFRikgPyB0YXJnZXQKKwkJCSAgICAgICA6IGZpbmRfdW5pcXVlX2FiYnJldigmb2lkLCBERUZBVUxUX0FCQlJFVikpOworCQl9CisJCWRlbGV0ZV9icmFuY2hfY29uZmlnKGJuYW1lLmJ1Zik7CisKKwluZXh0OgorCQlmcmVlKHRhcmdldCk7CisJfQorCisJZnJlZShuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmYm5hbWUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjYWxjX21heHdpZHRoKHN0cnVjdCByZWZfYXJyYXkgKnJlZnMsIGludCByZW1vdGVfYm9udXMpCit7CisJaW50IGksIG1heCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHJlZnMtPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl9hcnJheV9pdGVtICppdCA9IHJlZnMtPml0ZW1zW2ldOworCQljb25zdCBjaGFyICpkZXNjID0gaXQtPnJlZm5hbWU7CisJCWludCB3OworCisJCXNraXBfcHJlZml4KGl0LT5yZWZuYW1lLCAicmVmcy9oZWFkcy8iLCAmZGVzYyk7CisJCXNraXBfcHJlZml4KGl0LT5yZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIsICZkZXNjKTsKKwkJaWYgKGl0LT5raW5kID09IEZJTFRFUl9SRUZTX0RFVEFDSEVEX0hFQUQpIHsKKwkJCWNoYXIgKmhlYWRfZGVzYyA9IGdldF9oZWFkX2Rlc2NyaXB0aW9uKCk7CisJCQl3ID0gdXRmOF9zdHJ3aWR0aChoZWFkX2Rlc2MpOworCQkJZnJlZShoZWFkX2Rlc2MpOworCQl9IGVsc2UKKwkJCXcgPSB1dGY4X3N0cndpZHRoKGRlc2MpOworCisJCWlmIChpdC0+a2luZCA9PSBGSUxURVJfUkVGU19SRU1PVEVTKQorCQkJdyArPSByZW1vdGVfYm9udXM7CisJCWlmICh3ID4gbWF4KQorCQkJbWF4ID0gdzsKKwl9CisJcmV0dXJuIG1heDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnF1b3RlX2xpdGVyYWxfZm9yX2Zvcm1hdChjb25zdCBjaGFyICpzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXdoaWxlICgqcykgeworCQljb25zdCBjaGFyICplcCA9IHN0cmNocm51bChzLCAnJScpOworCQlpZiAocyA8IGVwKQorCQkJc3RyYnVmX2FkZCgmYnVmLCBzLCBlcCAtIHMpOworCQlpZiAoKmVwID09ICclJykgeworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiJSUiKTsKKwkJCXMgPSBlcCArIDE7CisJCX0gZWxzZSB7CisJCQlzID0gZXA7CisJCX0KKwl9CisJcmV0dXJuIGJ1Zi5idWY7Cit9CisKK3N0YXRpYyBjaGFyICpidWlsZF9mb3JtYXQoc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciwgaW50IG1heHdpZHRoLCBjb25zdCBjaGFyICpyZW1vdGVfcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgZm10ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBsb2NhbCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcmVtb3RlID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkZigmbG9jYWwsICIlJShpZiklJShIRUFEKSUlKHRoZW4pKiAlcyUlKGVsc2UpJSUoaWYpJSUod29ya3RyZWVwYXRoKSUlKHRoZW4pKyAlcyUlKGVsc2UpICAlcyUlKGVuZCklJShlbmQpIiwKKwkJCWJyYW5jaF9nZXRfY29sb3IoQlJBTkNIX0NPTE9SX0NVUlJFTlQpLAorCQkJYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfV09SS1RSRUUpLAorCQkJYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfTE9DQUwpKTsKKwlzdHJidWZfYWRkZigmcmVtb3RlLCAiICAlcyIsCisJCSAgICBicmFuY2hfZ2V0X2NvbG9yKEJSQU5DSF9DT0xPUl9SRU1PVEUpKTsKKworCWlmIChmaWx0ZXItPnZlcmJvc2UpIHsKKwkJc3RydWN0IHN0cmJ1ZiBvYm5hbWUgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoZmlsdGVyLT5hYmJyZXYgPCAwKQorCQkJc3RyYnVmX2FkZGYoJm9ibmFtZSwgIiUlKG9iamVjdG5hbWU6c2hvcnQpIik7CisJCWVsc2UgaWYgKCFmaWx0ZXItPmFiYnJldikKKwkJCXN0cmJ1Zl9hZGRmKCZvYm5hbWUsICIlJShvYmplY3RuYW1lKSIpOworCQllbHNlCisJCQlzdHJidWZfYWRkZigmb2JuYW1lLCAiJSUob2JqZWN0bmFtZTpzaG9ydD0lZCkiLCBmaWx0ZXItPmFiYnJldik7CisKKwkJc3RyYnVmX2FkZGYoJmxvY2FsLCAiJSUoYWxpZ246JWQsbGVmdCklJShyZWZuYW1lOmxzdHJpcD0yKSUlKGVuZCkiLCBtYXh3aWR0aCk7CisJCXN0cmJ1Zl9hZGRzdHIoJmxvY2FsLCBicmFuY2hfZ2V0X2NvbG9yKEJSQU5DSF9DT0xPUl9SRVNFVCkpOworCQlzdHJidWZfYWRkZigmbG9jYWwsICIgJXMgIiwgb2JuYW1lLmJ1Zik7CisKKwkJaWYgKGZpbHRlci0+dmVyYm9zZSA+IDEpCisJCXsKKwkJCXN0cmJ1Zl9hZGRmKCZsb2NhbCwgIiUlKGlmOm5vdGVxdWFscz0qKSUlKEhFQUQpJSUodGhlbiklJShpZiklJSh3b3JrdHJlZXBhdGgpJSUodGhlbikoJXMlJSh3b3JrdHJlZXBhdGgpJXMpICUlKGVuZCklJShlbmQpIiwKKwkJCQkgICAgYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfV09SS1RSRUUpLCBicmFuY2hfZ2V0X2NvbG9yKEJSQU5DSF9DT0xPUl9SRVNFVCkpOworCQkJc3RyYnVmX2FkZGYoJmxvY2FsLCAiJSUoaWYpJSUodXBzdHJlYW0pJSUodGhlbilbJXMlJSh1cHN0cmVhbTpzaG9ydCklcyUlKGlmKSUlKHVwc3RyZWFtOnRyYWNrKSIKKwkJCQkgICAgIiUlKHRoZW4pOiAlJSh1cHN0cmVhbTp0cmFjayxub2JyYWNrZXQpJSUoZW5kKV0gJSUoZW5kKSUlKGNvbnRlbnRzOnN1YmplY3QpIiwKKwkJCQkgICAgYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfVVBTVFJFQU0pLCBicmFuY2hfZ2V0X2NvbG9yKEJSQU5DSF9DT0xPUl9SRVNFVCkpOworCQl9CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKCZsb2NhbCwgIiUlKGlmKSUlKHVwc3RyZWFtOnRyYWNrKSUlKHRoZW4pJSUodXBzdHJlYW06dHJhY2spICUlKGVuZCklJShjb250ZW50czpzdWJqZWN0KSIpOworCisJCXN0cmJ1Zl9hZGRmKCZyZW1vdGUsICIlJShhbGlnbjolZCxsZWZ0KSVzJSUocmVmbmFtZTpsc3RyaXA9MiklJShlbmQpJXMiCisJCQkgICAgIiUlKGlmKSUlKHN5bXJlZiklJSh0aGVuKSAtPiAlJShzeW1yZWY6c2hvcnQpIgorCQkJICAgICIlJShlbHNlKSAlcyAlJShjb250ZW50czpzdWJqZWN0KSUlKGVuZCkiLAorCQkJICAgIG1heHdpZHRoLCBxdW90ZV9saXRlcmFsX2Zvcl9mb3JtYXQocmVtb3RlX3ByZWZpeCksCisJCQkgICAgYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfUkVTRVQpLCBvYm5hbWUuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm9ibmFtZSk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZGYoJmxvY2FsLCAiJSUocmVmbmFtZTpsc3RyaXA9MiklcyUlKGlmKSUlKHN5bXJlZiklJSh0aGVuKSAtPiAlJShzeW1yZWY6c2hvcnQpJSUoZW5kKSIsCisJCQkgICAgYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfUkVTRVQpKTsKKwkJc3RyYnVmX2FkZGYoJnJlbW90ZSwgIiVzJSUocmVmbmFtZTpsc3RyaXA9MiklcyUlKGlmKSUlKHN5bXJlZiklJSh0aGVuKSAtPiAlJShzeW1yZWY6c2hvcnQpJSUoZW5kKSIsCisJCQkgICAgcXVvdGVfbGl0ZXJhbF9mb3JfZm9ybWF0KHJlbW90ZV9wcmVmaXgpLAorCQkJICAgIGJyYW5jaF9nZXRfY29sb3IoQlJBTkNIX0NPTE9SX1JFU0VUKSk7CisJfQorCisJc3RyYnVmX2FkZGYoJmZtdCwgIiUlKGlmOm5vdGVxdWFscz1yZWZzL3JlbW90ZXMpJSUocmVmbmFtZTpyc3RyaXA9LTIpJSUodGhlbiklcyUlKGVsc2UpJXMlJShlbmQpIiwgbG9jYWwuYnVmLCByZW1vdGUuYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZsb2NhbCk7CisJc3RyYnVmX3JlbGVhc2UoJnJlbW90ZSk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmZtdCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3JlZl9saXN0KHN0cnVjdCByZWZfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCByZWZfc29ydGluZyAqc29ydGluZywgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVmX2FycmF5IGFycmF5OworCWludCBtYXh3aWR0aCA9IDA7CisJY29uc3QgY2hhciAqcmVtb3RlX3ByZWZpeCA9ICIiOworCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgbGlzdGluZyBtb3JlIHRoYW4ganVzdCByZW1vdGUgYnJhbmNoZXMsCisJICogdGhlbiByZW1vdGUgYnJhbmNoZXMgd2lsbCBoYXZlIGEgInJlbW90ZXMvIiBwcmVmaXguCisJICogV2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGlzIGluIHRoZSB3aWR0aC4KKwkgKi8KKwlpZiAoZmlsdGVyLT5raW5kICE9IEZJTFRFUl9SRUZTX1JFTU9URVMpCisJCXJlbW90ZV9wcmVmaXggPSAicmVtb3Rlcy8iOworCisJbWVtc2V0KCZhcnJheSwgMCwgc2l6ZW9mKGFycmF5KSk7CisKKwlmaWx0ZXJfcmVmcygmYXJyYXksIGZpbHRlciwgZmlsdGVyLT5raW5kIHwgRklMVEVSX1JFRlNfSU5DTFVERV9CUk9LRU4pOworCisJaWYgKGZpbHRlci0+dmVyYm9zZSkKKwkJbWF4d2lkdGggPSBjYWxjX21heHdpZHRoKCZhcnJheSwgc3RybGVuKHJlbW90ZV9wcmVmaXgpKTsKKworCWlmICghZm9ybWF0LT5mb3JtYXQpCisJCWZvcm1hdC0+Zm9ybWF0ID0gdG9fZnJlZSA9IGJ1aWxkX2Zvcm1hdChmaWx0ZXIsIG1heHdpZHRoLCByZW1vdGVfcHJlZml4KTsKKwlmb3JtYXQtPnVzZV9jb2xvciA9IGJyYW5jaF91c2VfY29sb3I7CisKKwlpZiAodmVyaWZ5X3JlZl9mb3JtYXQoZm9ybWF0KSkKKwkJZGllKF8oInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIikpOworCisJcmVmX2FycmF5X3NvcnQoc29ydGluZywgJmFycmF5KTsKKworCWZvciAoaSA9IDA7IGkgPCBhcnJheS5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJCWlmIChmb3JtYXRfcmVmX2FycmF5X2l0ZW0oYXJyYXkuaXRlbXNbaV0sIGZvcm1hdCwgJm91dCwgJmVycikpCisJCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJCWlmIChjb2x1bW5fYWN0aXZlKGNvbG9wdHMpKSB7CisJCQlhc3NlcnQoIWZpbHRlci0+dmVyYm9zZSAmJiAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIik7CisJCQkgLyogZm9ybWF0IHRvIGEgc3RyaW5nX2xpc3QgdG8gbGV0IHByaW50X2NvbHVtbnMoKSBkbyBpdHMgam9iICovCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJm91dHB1dCwgb3V0LmJ1Zik7CisJCX0gZWxzZSB7CisJCQlmd3JpdGUob3V0LmJ1ZiwgMSwgb3V0Lmxlbiwgc3Rkb3V0KTsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworCX0KKworCXJlZl9hcnJheV9jbGVhcigmYXJyYXkpOworCWZyZWUodG9fZnJlZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2N1cnJlbnRfYnJhbmNoX25hbWUodm9pZCkKK3sKKwlpbnQgZmxhZ3M7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIDAsIE5VTEwsICZmbGFncyk7CisJY29uc3QgY2hhciAqc2hvcnRuYW1lOworCWlmICghcmVmbmFtZSkKKwkJZGllKF8oImNvdWxkIG5vdCByZXNvbHZlIEhFQUQiKSk7CisJZWxzZSBpZiAoIShmbGFncyAmIFJFRl9JU1NZTVJFRikpCisJCXJldHVybjsKKwllbHNlIGlmIChza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy9oZWFkcy8iLCAmc2hvcnRuYW1lKSkKKwkJcHV0cyhzaG9ydG5hbWUpOworCWVsc2UKKwkJZGllKF8oIkhFQUQgKCVzKSBwb2ludHMgb3V0c2lkZSBvZiByZWZzL2hlYWRzLyIpLCByZWZuYW1lKTsKK30KKworc3RhdGljIHZvaWQgcmVqZWN0X3JlYmFzZV9vcl9iaXNlY3RfYnJhbmNoKGNvbnN0IGNoYXIgKnRhcmdldCkKK3sKKwlzdHJ1Y3Qgd29ya3RyZWUgKip3b3JrdHJlZXMgPSBnZXRfd29ya3RyZWVzKDApOworCWludCBpOworCisJZm9yIChpID0gMDsgd29ya3RyZWVzW2ldOyBpKyspIHsKKwkJc3RydWN0IHdvcmt0cmVlICp3dCA9IHdvcmt0cmVlc1tpXTsKKworCQlpZiAoIXd0LT5pc19kZXRhY2hlZCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpc193b3JrdHJlZV9iZWluZ19yZWJhc2VkKHd0LCB0YXJnZXQpKQorCQkJZGllKF8oIkJyYW5jaCAlcyBpcyBiZWluZyByZWJhc2VkIGF0ICVzIiksCisJCQkgICAgdGFyZ2V0LCB3dC0+cGF0aCk7CisKKwkJaWYgKGlzX3dvcmt0cmVlX2JlaW5nX2Jpc2VjdGVkKHd0LCB0YXJnZXQpKQorCQkJZGllKF8oIkJyYW5jaCAlcyBpcyBiZWluZyBiaXNlY3RlZCBhdCAlcyIpLAorCQkJICAgIHRhcmdldCwgd3QtPnBhdGgpOworCX0KKworCWZyZWVfd29ya3RyZWVzKHdvcmt0cmVlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfb3JfcmVuYW1lX2JyYW5jaChjb25zdCBjaGFyICpvbGRuYW1lLCBjb25zdCBjaGFyICpuZXduYW1lLCBpbnQgY29weSwgaW50IGZvcmNlKQoreworCXN0cnVjdCBzdHJidWYgb2xkcmVmID0gU1RSQlVGX0lOSVQsIG5ld3JlZiA9IFNUUkJVRl9JTklULCBsb2dtc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIG9sZHNlY3Rpb24gPSBTVFJCVUZfSU5JVCwgbmV3c2VjdGlvbiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmludGVycHJldGVkX29sZG5hbWUgPSBOVUxMOworCWNvbnN0IGNoYXIgKmludGVycHJldGVkX25ld25hbWUgPSBOVUxMOworCWludCByZWNvdmVyeSA9IDA7CisKKwlpZiAoIW9sZG5hbWUpIHsKKwkJaWYgKGNvcHkpCisJCQlkaWUoXygiY2Fubm90IGNvcHkgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIikpOworCQllbHNlCisJCQlkaWUoXygiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iKSk7CisJfQorCisJaWYgKHN0cmJ1Zl9jaGVja19icmFuY2hfcmVmKCZvbGRyZWYsIG9sZG5hbWUpKSB7CisJCS8qCisJCSAqIEJhZCBuYW1lIC0tLSB0aGlzIGNvdWxkIGJlIGFuIGF0dGVtcHQgdG8gcmVuYW1lIGEKKwkJICogcmVmIHRoYXQgd2UgdXNlZCB0byBhbGxvdyB0byBiZSBjcmVhdGVkIGJ5IGFjY2lkZW50LgorCQkgKi8KKwkJaWYgKHJlZl9leGlzdHMob2xkcmVmLmJ1ZikpCisJCQlyZWNvdmVyeSA9IDE7CisJCWVsc2UKKwkJCWRpZShfKCJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIiksIG9sZG5hbWUpOworCX0KKworCS8qCisJICogQSBjb21tYW5kIGxpa2UgImdpdCBicmFuY2ggLU0gY3VycmVudGJyYW5jaCBjdXJyZW50YnJhbmNoIiBjYW5ub3QKKwkgKiBjYXVzZSB0aGUgd29ya3RyZWUgdG8gYmVjb21lIGluY29uc2lzdGVudCB3aXRoIEhFQUQsIHNvIGFsbG93IGl0LgorCSAqLworCWlmICghc3RyY21wKG9sZG5hbWUsIG5ld25hbWUpKQorCQl2YWxpZGF0ZV9icmFuY2huYW1lKG5ld25hbWUsICZuZXdyZWYpOworCWVsc2UKKwkJdmFsaWRhdGVfbmV3X2JyYW5jaG5hbWUobmV3bmFtZSwgJm5ld3JlZiwgZm9yY2UpOworCisJcmVqZWN0X3JlYmFzZV9vcl9iaXNlY3RfYnJhbmNoKG9sZHJlZi5idWYpOworCisJaWYgKCFza2lwX3ByZWZpeChvbGRyZWYuYnVmLCAicmVmcy9oZWFkcy8iLCAmaW50ZXJwcmV0ZWRfb2xkbmFtZSkgfHwKKwkgICAgIXNraXBfcHJlZml4KG5ld3JlZi5idWYsICJyZWZzL2hlYWRzLyIsICZpbnRlcnByZXRlZF9uZXduYW1lKSkgeworCQlCVUcoImV4cGVjdGVkIHByZWZpeCBtaXNzaW5nIGZvciByZWZzIik7CisJfQorCisJaWYgKGNvcHkpCisJCXN0cmJ1Zl9hZGRmKCZsb2dtc2csICJCcmFuY2g6IGNvcGllZCAlcyB0byAlcyIsCisJCQkgICAgb2xkcmVmLmJ1ZiwgbmV3cmVmLmJ1Zik7CisJZWxzZQorCQlzdHJidWZfYWRkZigmbG9nbXNnLCAiQnJhbmNoOiByZW5hbWVkICVzIHRvICVzIiwKKwkJCSAgICBvbGRyZWYuYnVmLCBuZXdyZWYuYnVmKTsKKworCWlmICghY29weSAmJiByZW5hbWVfcmVmKG9sZHJlZi5idWYsIG5ld3JlZi5idWYsIGxvZ21zZy5idWYpKQorCQlkaWUoXygiQnJhbmNoIHJlbmFtZSBmYWlsZWQiKSk7CisJaWYgKGNvcHkgJiYgY29weV9leGlzdGluZ19yZWYob2xkcmVmLmJ1ZiwgbmV3cmVmLmJ1ZiwgbG9nbXNnLmJ1ZikpCisJCWRpZShfKCJCcmFuY2ggY29weSBmYWlsZWQiKSk7CisKKwlpZiAocmVjb3ZlcnkpIHsKKwkJaWYgKGNvcHkpCisJCQl3YXJuaW5nKF8oIkNyZWF0ZWQgYSBjb3B5IG9mIGEgbWlzbmFtZWQgYnJhbmNoICclcyciKSwKKwkJCQlpbnRlcnByZXRlZF9vbGRuYW1lKTsKKwkJZWxzZQorCQkJd2FybmluZyhfKCJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIpLAorCQkJCWludGVycHJldGVkX29sZG5hbWUpOworCX0KKworCWlmICghY29weSAmJgorCSAgICByZXBsYWNlX2VhY2hfd29ya3RyZWVfaGVhZF9zeW1yZWYob2xkcmVmLmJ1ZiwgbmV3cmVmLmJ1ZiwgbG9nbXNnLmJ1ZikpCisJCWRpZShfKCJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIiksIG5ld25hbWUpOworCisJc3RyYnVmX3JlbGVhc2UoJmxvZ21zZyk7CisKKwlzdHJidWZfYWRkZigmb2xkc2VjdGlvbiwgImJyYW5jaC4lcyIsIGludGVycHJldGVkX29sZG5hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZvbGRyZWYpOworCXN0cmJ1Zl9hZGRmKCZuZXdzZWN0aW9uLCAiYnJhbmNoLiVzIiwgaW50ZXJwcmV0ZWRfbmV3bmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJm5ld3JlZik7CisJaWYgKCFjb3B5ICYmIGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb24ob2xkc2VjdGlvbi5idWYsIG5ld3NlY3Rpb24uYnVmKSA8IDApCisJCWRpZShfKCJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiKSk7CisJaWYgKGNvcHkgJiYgc3RyY21wKG9sZG5hbWUsIG5ld25hbWUpICYmIGdpdF9jb25maWdfY29weV9zZWN0aW9uKG9sZHNlY3Rpb24uYnVmLCBuZXdzZWN0aW9uLmJ1ZikgPCAwKQorCQlkaWUoXygiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiKSk7CisJc3RyYnVmX3JlbGVhc2UoJm9sZHNlY3Rpb24pOworCXN0cmJ1Zl9yZWxlYXNlKCZuZXdzZWN0aW9uKTsKK30KKworc3RhdGljIEdJVF9QQVRIX0ZVTkMoZWRpdF9kZXNjcmlwdGlvbiwgIkVESVRfREVTQ1JJUFRJT04iKQorCitzdGF0aWMgaW50IGVkaXRfYnJhbmNoX2Rlc2NyaXB0aW9uKGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBuYW1lID0gU1RSQlVGX0lOSVQ7CisKKwlyZWFkX2JyYW5jaF9kZXNjKCZidWYsIGJyYW5jaF9uYW1lKTsKKwlpZiAoIWJ1Zi5sZW4gfHwgYnVmLmJ1ZltidWYubGVuLTFdICE9ICdcbicpCisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwlzdHJidWZfY29tbWVudGVkX2FkZGYoJmJ1ZiwKKwkJICAgIF8oIlBsZWFzZSBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaFxuIgorCQkgICAgICAiICAlc1xuIgorCQkgICAgICAiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgc3RyaXBwZWQuXG4iKSwKKwkJICAgIGJyYW5jaF9uYW1lLCBjb21tZW50X2xpbmVfY2hhcik7CisJd3JpdGVfZmlsZV9idWYoZWRpdF9kZXNjcmlwdGlvbigpLCBidWYuYnVmLCBidWYubGVuKTsKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJaWYgKGxhdW5jaF9lZGl0b3IoZWRpdF9kZXNjcmlwdGlvbigpLCAmYnVmLCBOVUxMKSkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfc3RyaXBzcGFjZSgmYnVmLCAxKTsKKworCXN0cmJ1Zl9hZGRmKCZuYW1lLCAiYnJhbmNoLiVzLmRlc2NyaXB0aW9uIiwgYnJhbmNoX25hbWUpOworCWdpdF9jb25maWdfc2V0KG5hbWUuYnVmLCBidWYubGVuID8gYnVmLmJ1ZiA6IE5VTEwpOworCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiAwOworfQorCitpbnQgY21kX2JyYW5jaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgZGVsZXRlID0gMCwgcmVuYW1lID0gMCwgY29weSA9IDAsIGZvcmNlID0gMCwgbGlzdCA9IDA7CisJaW50IHNob3dfY3VycmVudCA9IDA7CisJaW50IHJlZmxvZyA9IDAsIGVkaXRfZGVzY3JpcHRpb24gPSAwOworCWludCBxdWlldCA9IDAsIHVuc2V0X3Vwc3RyZWFtID0gMDsKKwljb25zdCBjaGFyICpuZXdfdXBzdHJlYW0gPSBOVUxMOworCWVudW0gYnJhbmNoX3RyYWNrIHRyYWNrOworCXN0cnVjdCByZWZfZmlsdGVyIGZpbHRlcjsKKwlpbnQgaWNhc2UgPSAwOworCXN0YXRpYyBzdHJ1Y3QgcmVmX3NvcnRpbmcgKnNvcnRpbmcgPSBOVUxMLCAqKnNvcnRpbmdfdGFpbCA9ICZzb3J0aW5nOworCXN0cnVjdCByZWZfZm9ybWF0IGZvcm1hdCA9IFJFRl9GT1JNQVRfSU5JVDsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfR1JPVVAoTl8oIkdlbmVyaWMgb3B0aW9ucyIpKSwKKwkJT1BUX19WRVJCT1NFKCZmaWx0ZXIudmVyYm9zZSwKKwkJCU5fKCJzaG93IGhhc2ggYW5kIHN1YmplY3QsIGdpdmUgdHdpY2UgZm9yIHVwc3RyZWFtIGJyYW5jaCIpKSwKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIikpLAorCQlPUFRfU0VUX0lOVCgndCcsICJ0cmFjayIsICAmdHJhY2ssIE5fKCJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIpLAorCQkJQlJBTkNIX1RSQUNLX0VYUExJQ0lUKSwKKwkJT1BUX1NFVF9JTlRfRigwLCAic2V0LXVwc3RyZWFtIiwgJnRyYWNrLCBOXygiZG8gbm90IHVzZSIpLAorCQkJQlJBTkNIX1RSQUNLX09WRVJSSURFLCBQQVJTRV9PUFRfSElEREVOKSwKKwkJT1BUX1NUUklORygndScsICJzZXQtdXBzdHJlYW0tdG8iLCAmbmV3X3Vwc3RyZWFtLCBOXygidXBzdHJlYW0iKSwgTl8oImNoYW5nZSB0aGUgdXBzdHJlYW0gaW5mbyIpKSwKKwkJT1BUX0JPT0woMCwgInVuc2V0LXVwc3RyZWFtIiwgJnVuc2V0X3Vwc3RyZWFtLCBOXygidW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iKSksCisJCU9QVF9fQ09MT1IoJmJyYW5jaF91c2VfY29sb3IsIE5fKCJ1c2UgY29sb3JlZCBvdXRwdXQiKSksCisJCU9QVF9TRVRfSU5UKCdyJywgInJlbW90ZXMiLCAgICAgJmZpbHRlci5raW5kLCBOXygiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIpLAorCQkJRklMVEVSX1JFRlNfUkVNT1RFUyksCisJCU9QVF9DT05UQUlOUygmZmlsdGVyLndpdGhfY29tbWl0LCBOXygicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX05PX0NPTlRBSU5TKCZmaWx0ZXIubm9fY29tbWl0LCBOXygicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX1dJVEgoJmZpbHRlci53aXRoX2NvbW1pdCwgTl8oInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiKSksCisJCU9QVF9XSVRIT1VUKCZmaWx0ZXIubm9fY29tbWl0LCBOXygicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX19BQkJSRVYoJmZpbHRlci5hYmJyZXYpLAorCisJCU9QVF9HUk9VUChOXygiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIpKSwKKwkJT1BUX1NFVF9JTlQoJ2EnLCAiYWxsIiwgJmZpbHRlci5raW5kLCBOXygibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiKSwKKwkJCUZJTFRFUl9SRUZTX1JFTU9URVMgfCBGSUxURVJfUkVGU19CUkFOQ0hFUyksCisJCU9QVF9CSVQoJ2QnLCAiZGVsZXRlIiwgJmRlbGV0ZSwgTl8oImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIiksIDEpLAorCQlPUFRfQklUKCdEJywgTlVMTCwgJmRlbGV0ZSwgTl8oImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiKSwgMiksCisJCU9QVF9CSVQoJ20nLCAibW92ZSIsICZyZW5hbWUsIE5fKCJtb3ZlL3JlbmFtZSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIpLCAxKSwKKwkJT1BUX0JJVCgnTScsIE5VTEwsICZyZW5hbWUsIE5fKCJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIiksIDIpLAorCQlPUFRfQklUKCdjJywgImNvcHkiLCAmY29weSwgTl8oImNvcHkgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciKSwgMSksCisJCU9QVF9CSVQoJ0MnLCBOVUxMLCAmY29weSwgTl8oImNvcHkgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIpLCAyKSwKKwkJT1BUX0JPT0woJ2wnLCAibGlzdCIsICZsaXN0LCBOXygibGlzdCBicmFuY2ggbmFtZXMiKSksCisJCU9QVF9CT09MKDAsICJzaG93LWN1cnJlbnQiLCAmc2hvd19jdXJyZW50LCBOXygic2hvdyBjdXJyZW50IGJyYW5jaCBuYW1lIikpLAorCQlPUFRfQk9PTCgwLCAiY3JlYXRlLXJlZmxvZyIsICZyZWZsb2csIE5fKCJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIpKSwKKwkJT1BUX0JPT0woMCwgImVkaXQtZGVzY3JpcHRpb24iLCAmZWRpdF9kZXNjcmlwdGlvbiwKKwkJCSBOXygiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giKSksCisJCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygiZm9yY2UgY3JlYXRpb24sIG1vdmUvcmVuYW1lLCBkZWxldGlvbiIpLCBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9NRVJHRUQoJmZpbHRlciwgTl8oInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbWVyZ2VkIikpLAorCQlPUFRfTk9fTUVSR0VEKCZmaWx0ZXIsIE5fKCJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG5vdCBtZXJnZWQiKSksCisJCU9QVF9DT0xVTU4oMCwgImNvbHVtbiIsICZjb2xvcHRzLCBOXygibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIikpLAorCQlPUFRfUkVGX1NPUlQoc29ydGluZ190YWlsKSwKKwkJT1BUX0NBTExCQUNLKDAsICJwb2ludHMtYXQiLCAmZmlsdGVyLnBvaW50c19hdCwgTl8oIm9iamVjdCIpLAorCQkJTl8oInByaW50IG9ubHkgYnJhbmNoZXMgb2YgdGhlIG9iamVjdCIpLCBwYXJzZV9vcHRfb2JqZWN0X25hbWUpLAorCQlPUFRfQk9PTCgnaScsICJpZ25vcmUtY2FzZSIsICZpY2FzZSwgTl8oInNvcnRpbmcgYW5kIGZpbHRlcmluZyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSIpKSwKKwkJT1BUX1NUUklORyggIDAgLCAiZm9ybWF0IiwgJmZvcm1hdC5mb3JtYXQsIE5fKCJmb3JtYXQiKSwgTl8oImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiKSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJc2V0dXBfcmVmX2ZpbHRlcl9wb3JjZWxhaW5fbXNnKCk7CisKKwltZW1zZXQoJmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpOworCWZpbHRlci5raW5kID0gRklMVEVSX1JFRlNfQlJBTkNIRVM7CisJZmlsdGVyLmFiYnJldiA9IC0xOworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9icmFuY2hfdXNhZ2UsIG9wdGlvbnMpOworCisJZ2l0X2NvbmZpZyhnaXRfYnJhbmNoX2NvbmZpZywgc29ydGluZ190YWlsKTsKKworCXRyYWNrID0gZ2l0X2JyYW5jaF90cmFjazsKKworCWhlYWQgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIDAsICZoZWFkX29pZCwgTlVMTCk7CisJaWYgKCFoZWFkKQorCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iKSk7CisJaWYgKCFzdHJjbXAoaGVhZCwgIkhFQUQiKSkKKwkJZmlsdGVyLmRldGFjaGVkID0gMTsKKwllbHNlIGlmICghc2tpcF9wcmVmaXgoaGVhZCwgInJlZnMvaGVhZHMvIiwgJmhlYWQpKQorCQlkaWUoXygiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiKSk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGJ1aWx0aW5fYnJhbmNoX3VzYWdlLAorCQkJICAgICAwKTsKKworCWlmICghZGVsZXRlICYmICFyZW5hbWUgJiYgIWNvcHkgJiYgIWVkaXRfZGVzY3JpcHRpb24gJiYgIW5ld191cHN0cmVhbSAmJgorCSAgICAhc2hvd19jdXJyZW50ICYmICF1bnNldF91cHN0cmVhbSAmJiBhcmdjID09IDApCisJCWxpc3QgPSAxOworCisJaWYgKGZpbHRlci53aXRoX2NvbW1pdCB8fCBmaWx0ZXIubWVyZ2UgIT0gUkVGX0ZJTFRFUl9NRVJHRURfTk9ORSB8fCBmaWx0ZXIucG9pbnRzX2F0Lm5yIHx8CisJICAgIGZpbHRlci5ub19jb21taXQpCisJCWxpc3QgPSAxOworCisJaWYgKCEhZGVsZXRlICsgISFyZW5hbWUgKyAhIWNvcHkgKyAhIW5ld191cHN0cmVhbSArICEhc2hvd19jdXJyZW50ICsKKwkgICAgbGlzdCArIHVuc2V0X3Vwc3RyZWFtID4gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fYnJhbmNoX3VzYWdlLCBvcHRpb25zKTsKKworCWlmIChmaWx0ZXIuYWJicmV2ID09IC0xKQorCQlmaWx0ZXIuYWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CisJZmlsdGVyLmlnbm9yZV9jYXNlID0gaWNhc2U7CisKKwlmaW5hbGl6ZV9jb2xvcHRzKCZjb2xvcHRzLCAtMSk7CisJaWYgKGZpbHRlci52ZXJib3NlKSB7CisJCWlmIChleHBsaWNpdGx5X2VuYWJsZV9jb2x1bW4oY29sb3B0cykpCisJCQlkaWUoXygiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIikpOworCQljb2xvcHRzID0gMDsKKwl9CisKKwlpZiAoZm9yY2UpIHsKKwkJZGVsZXRlICo9IDI7CisJCXJlbmFtZSAqPSAyOworCQljb3B5ICo9IDI7CisJfQorCisJaWYgKGxpc3QpCisJCXNldHVwX2F1dG9fcGFnZXIoImJyYW5jaCIsIDEpOworCisJaWYgKGRlbGV0ZSkgeworCQlpZiAoIWFyZ2MpCisJCQlkaWUoXygiYnJhbmNoIG5hbWUgcmVxdWlyZWQiKSk7CisJCXJldHVybiBkZWxldGVfYnJhbmNoZXMoYXJnYywgYXJndiwgZGVsZXRlID4gMSwgZmlsdGVyLmtpbmQsIHF1aWV0KTsKKwl9IGVsc2UgaWYgKHNob3dfY3VycmVudCkgeworCQlwcmludF9jdXJyZW50X2JyYW5jaF9uYW1lKCk7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAobGlzdCkgeworCQkvKiAgZ2l0IGJyYW5jaCAtLWxvY2FsIGFsc28gc2hvd3MgSEVBRCB3aGVuIGl0IGlzIGRldGFjaGVkICovCisJCWlmICgoZmlsdGVyLmtpbmQgJiBGSUxURVJfUkVGU19CUkFOQ0hFUykgJiYgZmlsdGVyLmRldGFjaGVkKQorCQkJZmlsdGVyLmtpbmQgfD0gRklMVEVSX1JFRlNfREVUQUNIRURfSEVBRDsKKwkJZmlsdGVyLm5hbWVfcGF0dGVybnMgPSBhcmd2OworCQkvKgorCQkgKiBJZiBubyBzb3J0aW5nIHBhcmFtZXRlciBpcyBnaXZlbiB0aGVuIHdlIGRlZmF1bHQgdG8gc29ydGluZworCQkgKiBieSAncmVmbmFtZScuIFRoaXMgd291bGQgZ2l2ZSB1cyBhbiBhbHBoYWJldGljYWxseSBzb3J0ZWQKKwkJICogYXJyYXkgd2l0aCB0aGUgJ0hFQUQnIHJlZiBhdCB0aGUgYmVnaW5uaW5nIGZvbGxvd2VkIGJ5CisJCSAqIGxvY2FsIGJyYW5jaGVzICdyZWZzL2hlYWRzLy4uLicgYW5kIGZpbmFsbHkgcmVtb3RlLXRyYWNraW5nCisJCSAqIGJyYW5jaGVzICdyZWZzL3JlbW90ZXMvLi4uJy4KKwkJICovCisJCWlmICghc29ydGluZykKKwkJCXNvcnRpbmcgPSByZWZfZGVmYXVsdF9zb3J0aW5nKCk7CisJCXJlZl9zb3J0aW5nX2ljYXNlX2FsbChzb3J0aW5nLCBpY2FzZSk7CisJCXByaW50X3JlZl9saXN0KCZmaWx0ZXIsIHNvcnRpbmcsICZmb3JtYXQpOworCQlwcmludF9jb2x1bW5zKCZvdXRwdXQsIGNvbG9wdHMsIE5VTEwpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmb3V0cHV0LCAwKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChlZGl0X2Rlc2NyaXB0aW9uKSB7CisJCWNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lOworCQlzdHJ1Y3Qgc3RyYnVmIGJyYW5jaF9yZWYgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoIWFyZ2MpIHsKKwkJCWlmIChmaWx0ZXIuZGV0YWNoZWQpCisJCQkJZGllKF8oIkNhbm5vdCBnaXZlIGRlc2NyaXB0aW9uIHRvIGRldGFjaGVkIEhFQUQiKSk7CisJCQlicmFuY2hfbmFtZSA9IGhlYWQ7CisJCX0gZWxzZSBpZiAoYXJnYyA9PSAxKQorCQkJYnJhbmNoX25hbWUgPSBhcmd2WzBdOworCQllbHNlCisJCQlkaWUoXygiY2Fubm90IGVkaXQgZGVzY3JpcHRpb24gb2YgbW9yZSB0aGFuIG9uZSBicmFuY2giKSk7CisKKwkJc3RyYnVmX2FkZGYoJmJyYW5jaF9yZWYsICJyZWZzL2hlYWRzLyVzIiwgYnJhbmNoX25hbWUpOworCQlpZiAoIXJlZl9leGlzdHMoYnJhbmNoX3JlZi5idWYpKSB7CisJCQlzdHJidWZfcmVsZWFzZSgmYnJhbmNoX3JlZik7CisKKwkJCWlmICghYXJnYykKKwkJCQlyZXR1cm4gZXJyb3IoXygiTm8gY29tbWl0IG9uIGJyYW5jaCAnJXMnIHlldC4iKSwKKwkJCQkJICAgICBicmFuY2hfbmFtZSk7CisJCQllbHNlCisJCQkJcmV0dXJuIGVycm9yKF8oIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIpLAorCQkJCQkgICAgIGJyYW5jaF9uYW1lKTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmYnJhbmNoX3JlZik7CisKKwkJaWYgKGVkaXRfYnJhbmNoX2Rlc2NyaXB0aW9uKGJyYW5jaF9uYW1lKSkKKwkJCXJldHVybiAxOworCX0gZWxzZSBpZiAoY29weSkgeworCQlpZiAoIWFyZ2MpCisJCQlkaWUoXygiYnJhbmNoIG5hbWUgcmVxdWlyZWQiKSk7CisJCWVsc2UgaWYgKGFyZ2MgPT0gMSkKKwkJCWNvcHlfb3JfcmVuYW1lX2JyYW5jaChoZWFkLCBhcmd2WzBdLCAxLCBjb3B5ID4gMSk7CisJCWVsc2UgaWYgKGFyZ2MgPT0gMikKKwkJCWNvcHlfb3JfcmVuYW1lX2JyYW5jaChhcmd2WzBdLCBhcmd2WzFdLCAxLCBjb3B5ID4gMSk7CisJCWVsc2UKKwkJCWRpZShfKCJ0b28gbWFueSBicmFuY2hlcyBmb3IgYSBjb3B5IG9wZXJhdGlvbiIpKTsKKwl9IGVsc2UgaWYgKHJlbmFtZSkgeworCQlpZiAoIWFyZ2MpCisJCQlkaWUoXygiYnJhbmNoIG5hbWUgcmVxdWlyZWQiKSk7CisJCWVsc2UgaWYgKGFyZ2MgPT0gMSkKKwkJCWNvcHlfb3JfcmVuYW1lX2JyYW5jaChoZWFkLCBhcmd2WzBdLCAwLCByZW5hbWUgPiAxKTsKKwkJZWxzZSBpZiAoYXJnYyA9PSAyKQorCQkJY29weV9vcl9yZW5hbWVfYnJhbmNoKGFyZ3ZbMF0sIGFyZ3ZbMV0sIDAsIHJlbmFtZSA+IDEpOworCQllbHNlCisJCQlkaWUoXygidG9vIG1hbnkgYXJndW1lbnRzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iKSk7CisJfSBlbHNlIGlmIChuZXdfdXBzdHJlYW0pIHsKKwkJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChhcmd2WzBdKTsKKworCQlpZiAoYXJnYyA+IDEpCisJCQlkaWUoXygidG9vIG1hbnkgYXJndW1lbnRzIHRvIHNldCBuZXcgdXBzdHJlYW0iKSk7CisKKwkJaWYgKCFicmFuY2gpIHsKKwkJCWlmICghYXJnYyB8fCAhc3RyY21wKGFyZ3ZbMF0sICJIRUFEIikpCisJCQkJZGllKF8oImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuICIKKwkJCQkgICAgICAiaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iKSwKKwkJCQkgICAgbmV3X3Vwc3RyZWFtKTsKKwkJCWRpZShfKCJubyBzdWNoIGJyYW5jaCAnJXMnIiksIGFyZ3ZbMF0pOworCQl9CisKKwkJaWYgKCFyZWZfZXhpc3RzKGJyYW5jaC0+cmVmbmFtZSkpCisJCQlkaWUoXygiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiKSwgYnJhbmNoLT5uYW1lKTsKKworCQkvKgorCQkgKiBjcmVhdGVfYnJhbmNoIHRha2VzIGNhcmUgb2Ygc2V0dGluZyB1cCB0aGUgdHJhY2tpbmcKKwkJICogaW5mbyBhbmQgbWFraW5nIHN1cmUgbmV3X3Vwc3RyZWFtIGlzIGNvcnJlY3QKKwkJICovCisJCWNyZWF0ZV9icmFuY2godGhlX3JlcG9zaXRvcnksIGJyYW5jaC0+bmFtZSwgbmV3X3Vwc3RyZWFtLAorCQkJICAgICAgMCwgMCwgMCwgcXVpZXQsIEJSQU5DSF9UUkFDS19PVkVSUklERSk7CisJfSBlbHNlIGlmICh1bnNldF91cHN0cmVhbSkgeworCQlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KGFyZ3ZbMF0pOworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCWlmIChhcmdjID4gMSkKKwkJCWRpZShfKCJ0b28gbWFueSBhcmd1bWVudHMgdG8gdW5zZXQgdXBzdHJlYW0iKSk7CisKKwkJaWYgKCFicmFuY2gpIHsKKwkJCWlmICghYXJnYyB8fCAhc3RyY21wKGFyZ3ZbMF0sICJIRUFEIikpCisJCQkJZGllKF8oImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gIgorCQkJCSAgICAgICJpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIpKTsKKwkJCWRpZShfKCJubyBzdWNoIGJyYW5jaCAnJXMnIiksIGFyZ3ZbMF0pOworCQl9CisKKwkJaWYgKCFicmFuY2hfaGFzX21lcmdlX2NvbmZpZyhicmFuY2gpKQorCQkJZGllKF8oIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIpLCBicmFuY2gtPm5hbWUpOworCisJCXN0cmJ1Zl9hZGRmKCZidWYsICJicmFuY2guJXMucmVtb3RlIiwgYnJhbmNoLT5uYW1lKTsKKwkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoYnVmLmJ1ZiwgTlVMTCwgTlVMTCwgMSk7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgImJyYW5jaC4lcy5tZXJnZSIsIGJyYW5jaC0+bmFtZSk7CisJCWdpdF9jb25maWdfc2V0X211bHRpdmFyKGJ1Zi5idWYsIE5VTEwsIE5VTEwsIDEpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9IGVsc2UgaWYgKGFyZ2MgPiAwICYmIGFyZ2MgPD0gMikgeworCQlpZiAoZmlsdGVyLmtpbmQgIT0gRklMVEVSX1JFRlNfQlJBTkNIRVMpCisJCQlkaWUoXygiVGhlIC1hLCBhbmQgLXIsIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCB0YWtlIGEgYnJhbmNoIG5hbWUuXG4iCisJCQkJICAiRGlkIHlvdSBtZWFuIHRvIHVzZTogLWF8LXIgLS1saXN0IDxwYXR0ZXJuPj8iKSk7CisKKwkJaWYgKHRyYWNrID09IEJSQU5DSF9UUkFDS19PVkVSUklERSkKKwkJCWRpZShfKCJ0aGUgJy0tc2V0LXVwc3RyZWFtJyBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gUGxlYXNlIHVzZSAnLS10cmFjaycgb3IgJy0tc2V0LXVwc3RyZWFtLXRvJyBpbnN0ZWFkLiIpKTsKKworCQljcmVhdGVfYnJhbmNoKHRoZV9yZXBvc2l0b3J5LAorCQkJICAgICAgYXJndlswXSwgKGFyZ2MgPT0gMikgPyBhcmd2WzFdIDogaGVhZCwKKwkJCSAgICAgIGZvcmNlLCAwLCByZWZsb2csIHF1aWV0LCB0cmFjayk7CisKKwl9IGVsc2UKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fYnJhbmNoX3VzYWdlLCBvcHRpb25zKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9idW5kbGUuYyBiL2J1aWx0aW4vYnVuZGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA0OWQyNwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vYnVuZGxlLmMKQEAgLTAsMCArMSwxOTQgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1bmRsZS5oIgorCisvKgorICogQmFzaWMgaGFuZGxlciBmb3IgYnVuZGxlIGZpbGVzIHRvIGNvbm5lY3QgcmVwb3NpdG9yaWVzIHZpYSBzbmVha2VybmV0LgorICogSW52b2NhdGlvbiBtdXN0IGluY2x1ZGUgYWN0aW9uLgorICogVGhpcyBmdW5jdGlvbiBjYW4gY3JlYXRlIGEgYnVuZGxlIG9yIHByb3ZpZGUgaW5mb3JtYXRpb24gb24gYW4gZXhpc3RpbmcKKyAqIGJ1bmRsZSBzdXBwb3J0aW5nICJmZXRjaCIsICJwdWxsIiwgYW5kICJscy1yZW1vdGUiLgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9idW5kbGVfdXNhZ2VbXSA9IHsKKyAgTl8oImdpdCBidW5kbGUgY3JlYXRlIFs8b3B0aW9ucz5dIDxmaWxlPiA8Z2l0LXJldi1saXN0IGFyZ3M+IiksCisgIE5fKCJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmlsZT4iKSwKKyAgTl8oImdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iKSwKKyAgTl8oImdpdCBidW5kbGUgdW5idW5kbGUgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIiksCisgIE5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9idW5kbGVfY3JlYXRlX3VzYWdlW10gPSB7CisgIE5fKCJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIpLAorICBOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fYnVuZGxlX3ZlcmlmeV91c2FnZVtdID0geworICBOXygiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzxvcHRpb25zPl0gPGZpbGU+IiksCisgIE5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9idW5kbGVfbGlzdF9oZWFkc191c2FnZVtdID0geworICBOXygiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIpLAorICBOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fYnVuZGxlX3VuYnVuZGxlX3VzYWdlW10gPSB7CisgIE5fKCJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIpLAorICBOVUxMCit9OworCitzdGF0aWMgaW50IHZlcmJvc2U7CisKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0aW9uc19jbWRfYnVuZGxlKGludCBhcmdjLAorCQljb25zdCBjaGFyICoqYXJndiwKKwkJY29uc3QgY2hhciogcHJlZml4LAorCQljb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSwKKwkJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10sCisJCWNvbnN0IGNoYXIgKipidW5kbGVfZmlsZSkgeworCWludCBuZXdhcmdjOworCW5ld2FyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIHVzYWdlc3RyLAorCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKwlpZiAoYXJnYyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZXN0ciwgb3B0aW9ucyk7CisJKmJ1bmRsZV9maWxlID0gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgYXJndlswXSk7CisJcmV0dXJuIG5ld2FyZ2M7Cit9CisKK3N0YXRpYyBpbnQgY21kX2J1bmRsZV9jcmVhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpIHsKKwlpbnQgYWxsX3Byb2dyZXNzX2ltcGxpZWQgPSAwOworCWludCBwcm9ncmVzcyA9IGlzYXR0eShTVERFUlJfRklMRU5PKTsKKwlzdHJ1Y3QgYXJndl9hcnJheSBwYWNrX29wdHM7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX1NFVF9JTlQoJ3EnLCAicXVpZXQiLCAmcHJvZ3Jlc3MsCisJCQkgICAgTl8oImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIiksIDApLAorCQlPUFRfU0VUX0lOVCgwLCAicHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MsCisJCQkgICAgTl8oInNob3cgcHJvZ3Jlc3MgbWV0ZXIiKSwgMSksCisJCU9QVF9TRVRfSU5UKDAsICJhbGwtcHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MsCisJCQkgICAgTl8oInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIiksIDIpLAorCQlPUFRfQk9PTCgwLCAiYWxsLXByb2dyZXNzLWltcGxpZWQiLAorCQkJICZhbGxfcHJvZ3Jlc3NfaW1wbGllZCwKKwkJCSBOXygic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWNvbnN0IGNoYXIqIGJ1bmRsZV9maWxlOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnNfY21kX2J1bmRsZShhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQlidWlsdGluX2J1bmRsZV9jcmVhdGVfdXNhZ2UsIG9wdGlvbnMsICZidW5kbGVfZmlsZSk7CisJLyogYnVuZGxlIGludGVybmFscyB1c2UgYXJndlsxXSBhcyBmdXJ0aGVyIHBhcmFtZXRlcnMgKi8KKworCWFyZ3ZfYXJyYXlfaW5pdCgmcGFja19vcHRzKTsKKwlpZiAocHJvZ3Jlc3MgPT0gMCkKKwkJYXJndl9hcnJheV9wdXNoKCZwYWNrX29wdHMsICItLXF1aWV0Iik7CisJZWxzZSBpZiAocHJvZ3Jlc3MgPT0gMSkKKwkJYXJndl9hcnJheV9wdXNoKCZwYWNrX29wdHMsICItLXByb2dyZXNzIik7CisJZWxzZSBpZiAocHJvZ3Jlc3MgPT0gMikKKwkJYXJndl9hcnJheV9wdXNoKCZwYWNrX29wdHMsICItLWFsbC1wcm9ncmVzcyIpOworCWlmIChwcm9ncmVzcyAmJiBhbGxfcHJvZ3Jlc3NfaW1wbGllZCkKKwkJYXJndl9hcnJheV9wdXNoKCZwYWNrX29wdHMsICItLWFsbC1wcm9ncmVzcy1pbXBsaWVkIik7CisKKwlpZiAoIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQorCQlkaWUoXygiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIpKTsKKwlyZXR1cm4gISFjcmVhdGVfYnVuZGxlKHRoZV9yZXBvc2l0b3J5LCBidW5kbGVfZmlsZSwgYXJnYywgYXJndiwgJnBhY2tfb3B0cyk7Cit9CisKK3N0YXRpYyBpbnQgY21kX2J1bmRsZV92ZXJpZnkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpIHsKKwlzdHJ1Y3QgYnVuZGxlX2hlYWRlciBoZWFkZXI7CisJaW50IGJ1bmRsZV9mZCA9IC0xOworCWludCBxdWlldCA9IDA7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woJ3EnLCAicXVpZXQiLCAmcXVpZXQsCisJCQkgICAgTl8oImRvIG5vdCBzaG93IGJ1bmRsZSBkZXRhaWxzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWNvbnN0IGNoYXIqIGJ1bmRsZV9maWxlOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnNfY21kX2J1bmRsZShhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQlidWlsdGluX2J1bmRsZV92ZXJpZnlfdXNhZ2UsIG9wdGlvbnMsICZidW5kbGVfZmlsZSk7CisJLyogYnVuZGxlIGludGVybmFscyB1c2UgYXJndlsxXSBhcyBmdXJ0aGVyIHBhcmFtZXRlcnMgKi8KKworCW1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7CisJaWYgKChidW5kbGVfZmQgPSByZWFkX2J1bmRsZV9oZWFkZXIoYnVuZGxlX2ZpbGUsICZoZWFkZXIpKSA8IDApCisJCXJldHVybiAxOworCWNsb3NlKGJ1bmRsZV9mZCk7CisJaWYgKHZlcmlmeV9idW5kbGUodGhlX3JlcG9zaXRvcnksICZoZWFkZXIsICFxdWlldCkpCisJCXJldHVybiAxOworCWZwcmludGYoc3RkZXJyLCBfKCIlcyBpcyBva2F5XG4iKSwgYnVuZGxlX2ZpbGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtZF9idW5kbGVfbGlzdF9oZWFkcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkgeworCXN0cnVjdCBidW5kbGVfaGVhZGVyIGhlYWRlcjsKKwlpbnQgYnVuZGxlX2ZkID0gLTE7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpCisJfTsKKwljb25zdCBjaGFyKiBidW5kbGVfZmlsZTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zX2NtZF9idW5kbGUoYXJnYywgYXJndiwgcHJlZml4LAorCQkJYnVpbHRpbl9idW5kbGVfbGlzdF9oZWFkc191c2FnZSwgb3B0aW9ucywgJmJ1bmRsZV9maWxlKTsKKwkvKiBidW5kbGUgaW50ZXJuYWxzIHVzZSBhcmd2WzFdIGFzIGZ1cnRoZXIgcGFyYW1ldGVycyAqLworCisJbWVtc2V0KCZoZWFkZXIsIDAsIHNpemVvZihoZWFkZXIpKTsKKwlpZiAoKGJ1bmRsZV9mZCA9IHJlYWRfYnVuZGxlX2hlYWRlcihidW5kbGVfZmlsZSwgJmhlYWRlcikpIDwgMCkKKwkJcmV0dXJuIDE7CisJY2xvc2UoYnVuZGxlX2ZkKTsKKwlyZXR1cm4gISFsaXN0X2J1bmRsZV9yZWZzKCZoZWFkZXIsIGFyZ2MsIGFyZ3YpOworfQorCitzdGF0aWMgaW50IGNtZF9idW5kbGVfdW5idW5kbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpIHsKKwlzdHJ1Y3QgYnVuZGxlX2hlYWRlciBoZWFkZXI7CisJaW50IGJ1bmRsZV9mZCA9IC0xOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CisJY29uc3QgY2hhciogYnVuZGxlX2ZpbGU7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9uc19jbWRfYnVuZGxlKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCWJ1aWx0aW5fYnVuZGxlX3VuYnVuZGxlX3VzYWdlLCBvcHRpb25zLCAmYnVuZGxlX2ZpbGUpOworCS8qIGJ1bmRsZSBpbnRlcm5hbHMgdXNlIGFyZ3ZbMV0gYXMgZnVydGhlciBwYXJhbWV0ZXJzICovCisKKwltZW1zZXQoJmhlYWRlciwgMCwgc2l6ZW9mKGhlYWRlcikpOworCWlmICgoYnVuZGxlX2ZkID0gcmVhZF9idW5kbGVfaGVhZGVyKGJ1bmRsZV9maWxlLCAmaGVhZGVyKSkgPCAwKQorCQlyZXR1cm4gMTsKKwlpZiAoIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQorCQlkaWUoXygiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIikpOworCXJldHVybiAhIXVuYnVuZGxlKHRoZV9yZXBvc2l0b3J5LCAmaGVhZGVyLCBidW5kbGVfZmQsIDApIHx8CisJCWxpc3RfYnVuZGxlX3JlZnMoJmhlYWRlciwgYXJnYywgYXJndik7Cit9CisKK2ludCBjbWRfYnVuZGxlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJiZSB2ZXJib3NlOyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYSBzdWJjb21tYW5kIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWludCByZXN1bHQ7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGJ1aWx0aW5fYnVuZGxlX3VzYWdlLAorCQlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKworCXBhY2tldF90cmFjZV9pZGVudGl0eSgiYnVuZGxlIik7CisKKwlpZiAoYXJnYyA8IDIpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2J1bmRsZV91c2FnZSwgb3B0aW9ucyk7CisKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJjcmVhdGUiKSkKKwkJcmVzdWx0ID0gY21kX2J1bmRsZV9jcmVhdGUoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJ2ZXJpZnkiKSkKKwkJcmVzdWx0ID0gY21kX2J1bmRsZV92ZXJpZnkoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJsaXN0LWhlYWRzIikpCisJCXJlc3VsdCA9IGNtZF9idW5kbGVfbGlzdF9oZWFkcyhhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInVuYnVuZGxlIikpCisJCXJlc3VsdCA9IGNtZF9idW5kbGVfdW5idW5kbGUoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIHsKKwkJZXJyb3IoXygiVW5rbm93biBzdWJjb21tYW5kOiAlcyIpLCBhcmd2WzBdKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fYnVuZGxlX3VzYWdlLCBvcHRpb25zKTsKKwl9CisJcmV0dXJuIHJlc3VsdCA/IDEgOiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jYXQtZmlsZS5jIGIvYnVpbHRpbi9jYXQtZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMThlMjAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NhdC1maWxlLmMKQEAgLTAsMCArMSw3MjEgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJvaWQtYXJyYXkuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInByb21pc29yLXJlbW90ZS5oIgorCitzdHJ1Y3QgYmF0Y2hfb3B0aW9ucyB7CisJaW50IGVuYWJsZWQ7CisJaW50IGZvbGxvd19zeW1saW5rczsKKwlpbnQgcHJpbnRfY29udGVudHM7CisJaW50IGJ1ZmZlcl9vdXRwdXQ7CisJaW50IGFsbF9vYmplY3RzOworCWludCB1bm9yZGVyZWQ7CisJaW50IGNtZG1vZGU7IC8qIG1heSBiZSAndycgb3IgJ2MnIGZvciAtLWZpbHRlcnMgb3IgLS10ZXh0Y29udiAqLworCWNvbnN0IGNoYXIgKmZvcm1hdDsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpmb3JjZV9wYXRoOworCitzdGF0aWMgaW50IGZpbHRlcl9vYmplY3QoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbW9kZSwKKwkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgY2hhciAqKmJ1ZiwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwkqYnVmID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCBzaXplKTsKKwlpZiAoISpidWYpCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIpLAorCQkJICAgICBvaWRfdG9faGV4KG9pZCksIHBhdGgpOworCWlmICgodHlwZSA9PSBPQkpfQkxPQikgJiYgU19JU1JFRyhtb2RlKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHN0cmJ1ZiA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3QgY2hlY2tvdXRfbWV0YWRhdGEgbWV0YTsKKworCQlpbml0X2NoZWNrb3V0X21ldGFkYXRhKCZtZXRhLCBOVUxMLCBOVUxMLCBvaWQpOworCQlpZiAoY29udmVydF90b193b3JraW5nX3RyZWUoJnRoZV9pbmRleCwgcGF0aCwgKmJ1ZiwgKnNpemUsICZzdHJidWYsICZtZXRhKSkgeworCQkJZnJlZSgqYnVmKTsKKwkJCSpzaXplID0gc3RyYnVmLmxlbjsKKwkJCSpidWYgPSBzdHJidWZfZGV0YWNoKCZzdHJidWYsIE5VTEwpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RyZWFtX2Jsb2IoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWlmIChzdHJlYW1fYmxvYl90b19mZCgxLCBvaWQsIE5VTEwsIDApKQorCQlkaWUoInVuYWJsZSB0byBzdHJlYW0gJXMgdG8gc3Rkb3V0Iiwgb2lkX3RvX2hleChvaWQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYXRfb25lX2ZpbGUoaW50IG9wdCwgY29uc3QgY2hhciAqZXhwX3R5cGUsIGNvbnN0IGNoYXIgKm9ial9uYW1lLAorCQkJaW50IHVua25vd25fdHlwZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciAqYnVmOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgb2JqX2NvbnRleHQ7CisJc3RydWN0IG9iamVjdF9pbmZvIG9pID0gT0JKRUNUX0lORk9fSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgZmxhZ3MgPSBPQkpFQ1RfSU5GT19MT09LVVBfUkVQTEFDRTsKKwljb25zdCBjaGFyICpwYXRoID0gZm9yY2VfcGF0aDsKKworCWlmICh1bmtub3duX3R5cGUpCisJCWZsYWdzIHw9IE9CSkVDVF9JTkZPX0FMTE9XX1VOS05PV05fVFlQRTsKKworCWlmIChnZXRfb2lkX3dpdGhfY29udGV4dCh0aGVfcmVwb3NpdG9yeSwgb2JqX25hbWUsCisJCQkJIEdFVF9PSURfUkVDT1JEX1BBVEgsCisJCQkJICZvaWQsICZvYmpfY29udGV4dCkpCisJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBvYmpfbmFtZSk7CisKKwlpZiAoIXBhdGgpCisJCXBhdGggPSBvYmpfY29udGV4dC5wYXRoOworCWlmIChvYmpfY29udGV4dC5tb2RlID09IFNfSUZJTlZBTElEKQorCQlvYmpfY29udGV4dC5tb2RlID0gMDEwMDY0NDsKKworCWJ1ZiA9IE5VTEw7CisJc3dpdGNoIChvcHQpIHsKKwljYXNlICd0JzoKKwkJb2kudHlwZV9uYW1lID0gJnNiOworCQlpZiAob2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKHRoZV9yZXBvc2l0b3J5LCAmb2lkLCAmb2ksIGZsYWdzKSA8IDApCisJCQlkaWUoImdpdCBjYXQtZmlsZTogY291bGQgbm90IGdldCBvYmplY3QgaW5mbyIpOworCQlpZiAoc2IubGVuKSB7CisJCQlwcmludGYoIiVzXG4iLCBzYi5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSAncyc6CisJCW9pLnNpemVwID0gJnNpemU7CisJCWlmIChvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQodGhlX3JlcG9zaXRvcnksICZvaWQsICZvaSwgZmxhZ3MpIDwgMCkKKwkJCWRpZSgiZ2l0IGNhdC1maWxlOiBjb3VsZCBub3QgZ2V0IG9iamVjdCBpbmZvIik7CisJCXByaW50ZigiJSJQUkl1TUFYIlxuIiwgKHVpbnRtYXhfdClzaXplKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlICdlJzoKKwkJcmV0dXJuICFoYXNfb2JqZWN0X2ZpbGUoJm9pZCk7CisKKwljYXNlICd3JzoKKwkJaWYgKCFwYXRoKQorCQkJZGllKCJnaXQgY2F0LWZpbGUgLS1maWx0ZXJzICVzOiA8b2JqZWN0PiBtdXN0IGJlICIKKwkJCSAgICAiPHNoYTE6cGF0aD4iLCBvYmpfbmFtZSk7CisKKwkJaWYgKGZpbHRlcl9vYmplY3QocGF0aCwgb2JqX2NvbnRleHQubW9kZSwKKwkJCQkgICZvaWQsICZidWYsICZzaXplKSkKKwkJCXJldHVybiAtMTsKKwkJYnJlYWs7CisKKwljYXNlICdjJzoKKwkJaWYgKCFwYXRoKQorCQkJZGllKCJnaXQgY2F0LWZpbGUgLS10ZXh0Y29udiAlczogPG9iamVjdD4gbXVzdCBiZSA8c2hhMTpwYXRoPiIsCisJCQkgICAgb2JqX25hbWUpOworCisJCWlmICh0ZXh0Y29udl9vYmplY3QodGhlX3JlcG9zaXRvcnksIHBhdGgsIG9ial9jb250ZXh0Lm1vZGUsCisJCQkJICAgICZvaWQsIDEsICZidWYsICZzaXplKSkKKwkJCWJyZWFrOworCQkvKiBlbHNlIGZhbGx0aHJvdWdoICovCisKKwljYXNlICdwJzoKKwkJdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgJm9pZCwgTlVMTCk7CisJCWlmICh0eXBlIDwgMCkKKwkJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBvYmpfbmFtZSk7CisKKwkJLyogY3VzdG9tIHByZXR0eS1wcmludCBoZXJlICovCisJCWlmICh0eXBlID09IE9CSl9UUkVFKSB7CisJCQljb25zdCBjaGFyICpsc19hcmdzWzNdID0geyBOVUxMIH07CisJCQlsc19hcmdzWzBdID0gICJscy10cmVlIjsKKwkJCWxzX2FyZ3NbMV0gPSAgb2JqX25hbWU7CisJCQlyZXR1cm4gY21kX2xzX3RyZWUoMiwgbHNfYXJncywgTlVMTCk7CisJCX0KKworCQlpZiAodHlwZSA9PSBPQkpfQkxPQikKKwkJCXJldHVybiBzdHJlYW1fYmxvYigmb2lkKTsKKwkJYnVmID0gcmVhZF9vYmplY3RfZmlsZSgmb2lkLCAmdHlwZSwgJnNpemUpOworCQlpZiAoIWJ1ZikKKwkJCWRpZSgiQ2Fubm90IHJlYWQgb2JqZWN0ICVzIiwgb2JqX25hbWUpOworCisJCS8qIG90aGVyd2lzZSBqdXN0IHNwaXQgb3V0IHRoZSBkYXRhICovCisJCWJyZWFrOworCisJY2FzZSAwOgorCQlpZiAodHlwZV9mcm9tX3N0cmluZyhleHBfdHlwZSkgPT0gT0JKX0JMT0IpIHsKKwkJCXN0cnVjdCBvYmplY3RfaWQgYmxvYl9vaWQ7CisJCQlpZiAob2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCAmb2lkLCBOVUxMKSA9PSBPQkpfVEFHKSB7CisJCQkJY2hhciAqYnVmZmVyID0gcmVhZF9vYmplY3RfZmlsZSgmb2lkLCAmdHlwZSwKKwkJCQkJCQkJJnNpemUpOworCQkJCWNvbnN0IGNoYXIgKnRhcmdldDsKKwkJCQlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgIm9iamVjdCAiLCAmdGFyZ2V0KSB8fAorCQkJCSAgICBnZXRfb2lkX2hleCh0YXJnZXQsICZibG9iX29pZCkpCisJCQkJCWRpZSgiJXMgbm90IGEgdmFsaWQgdGFnIiwgb2lkX3RvX2hleCgmb2lkKSk7CisJCQkJZnJlZShidWZmZXIpOworCQkJfSBlbHNlCisJCQkJb2lkY3B5KCZibG9iX29pZCwgJm9pZCk7CisKKwkJCWlmIChvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksICZibG9iX29pZCwgTlVMTCkgPT0gT0JKX0JMT0IpCisJCQkJcmV0dXJuIHN0cmVhbV9ibG9iKCZibG9iX29pZCk7CisJCQkvKgorCQkJICogd2UgYXR0ZW1wdGVkIHRvIGRlcmVmZXJlbmNlIGEgdGFnIHRvIGEgYmxvYgorCQkJICogYW5kIGZhaWxlZDsgdGhlcmUgbWF5IGJlIG5ldyBkZXJlZmVyZW5jZQorCQkJICogbWVjaGFuaXNtcyB0aGlzIGNvZGUgaXMgbm90IGF3YXJlIG9mLgorCQkJICogZmFsbC1iYWNrIHRvIHRoZSB1c3VhbCBjYXNlLgorCQkJICovCisJCX0KKwkJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksCisJCQkJCQkgJm9pZCwgZXhwX3R5cGUsICZzaXplLCBOVUxMKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkaWUoImdpdCBjYXQtZmlsZTogdW5rbm93biBvcHRpb246ICVzIiwgZXhwX3R5cGUpOworCX0KKworCWlmICghYnVmKQorCQlkaWUoImdpdCBjYXQtZmlsZSAlczogYmFkIGZpbGUiLCBvYmpfbmFtZSk7CisKKwl3cml0ZV9vcl9kaWUoMSwgYnVmLCBzaXplKTsKKwlmcmVlKGJ1Zik7CisJZnJlZShvYmpfY29udGV4dC5wYXRoKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGV4cGFuZF9kYXRhIHsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCW9mZl90IGRpc2tfc2l6ZTsKKwljb25zdCBjaGFyICpyZXN0OworCXN0cnVjdCBvYmplY3RfaWQgZGVsdGFfYmFzZV9vaWQ7CisKKwkvKgorCSAqIElmIG1hcmtfcXVlcnkgaXMgdHJ1ZSwgd2UgZG8gbm90IGV4cGFuZCBhbnl0aGluZywgYnV0IHJhdGhlcgorCSAqIGp1c3QgbWFyayB0aGUgb2JqZWN0X2luZm8gd2l0aCBpdGVtcyB3ZSB3aXNoIHRvIHF1ZXJ5LgorCSAqLworCWludCBtYXJrX3F1ZXJ5OworCisJLyoKKwkgKiBXaGV0aGVyIHRvIHNwbGl0IHRoZSBpbnB1dCBvbiB3aGl0ZXNwYWNlIGJlZm9yZSBmZWVkaW5nIGl0IHRvCisJICogZ2V0X3NoYTE7IHRoaXMgaXMgZGVjaWRlZCBkdXJpbmcgdGhlIG1hcmtfcXVlcnkgcGhhc2UgYmFzZWQgb24KKwkgKiB3aGV0aGVyIHdlIGhhdmUgYSAlKHJlc3QpIHRva2VuIGluIG91ciBmb3JtYXQuCisJICovCisJaW50IHNwbGl0X29uX3doaXRlc3BhY2U7CisKKwkvKgorCSAqIEFmdGVyIGEgbWFya19xdWVyeSBydW4sIHRoaXMgb2JqZWN0X2luZm8gaXMgc2V0IHVwIHRvIGJlCisJICogcGFzc2VkIHRvIG9pZF9vYmplY3RfaW5mb19leHRlbmRlZC4gSXQgd2lsbCBwb2ludCB0byB0aGUgZGF0YQorCSAqIGVsZW1lbnRzIGFib3ZlLCBzbyB5b3UgY2FuIHJldHJpZXZlIHRoZSByZXNwb25zZSBmcm9tIHRoZXJlLgorCSAqLworCXN0cnVjdCBvYmplY3RfaW5mbyBpbmZvOworCisJLyoKKwkgKiBUaGlzIGZsYWcgd2lsbCBiZSB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgYmF0Y2ggZm9ybWF0IGFuZCBvcHRpb25zCisJICogZG9uJ3QgcmVxdWlyZSB1cyB0byBjYWxsIG9pZF9vYmplY3RfaW5mbywgd2hpY2ggY2FuIHRoZW4gYmUKKwkgKiBvcHRpbWl6ZWQgb3V0LgorCSAqLworCXVuc2lnbmVkIHNraXBfb2JqZWN0X2luZm8gOiAxOworfTsKKworc3RhdGljIGludCBpc19hdG9tKGNvbnN0IGNoYXIgKmF0b20sIGNvbnN0IGNoYXIgKnMsIGludCBzbGVuKQoreworCWludCBhbGVuID0gc3RybGVuKGF0b20pOworCXJldHVybiBhbGVuID09IHNsZW4gJiYgIW1lbWNtcChhdG9tLCBzLCBhbGVuKTsKK30KKworc3RhdGljIHZvaWQgZXhwYW5kX2F0b20oc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmF0b20sIGludCBsZW4sCisJCQl2b2lkICp2ZGF0YSkKK3sKKwlzdHJ1Y3QgZXhwYW5kX2RhdGEgKmRhdGEgPSB2ZGF0YTsKKworCWlmIChpc19hdG9tKCJvYmplY3RuYW1lIiwgYXRvbSwgbGVuKSkgeworCQlpZiAoIWRhdGEtPm1hcmtfcXVlcnkpCisJCQlzdHJidWZfYWRkc3RyKHNiLCBvaWRfdG9faGV4KCZkYXRhLT5vaWQpKTsKKwl9IGVsc2UgaWYgKGlzX2F0b20oIm9iamVjdHR5cGUiLCBhdG9tLCBsZW4pKSB7CisJCWlmIChkYXRhLT5tYXJrX3F1ZXJ5KQorCQkJZGF0YS0+aW5mby50eXBlcCA9ICZkYXRhLT50eXBlOworCQllbHNlCisJCQlzdHJidWZfYWRkc3RyKHNiLCB0eXBlX25hbWUoZGF0YS0+dHlwZSkpOworCX0gZWxzZSBpZiAoaXNfYXRvbSgib2JqZWN0c2l6ZSIsIGF0b20sIGxlbikpIHsKKwkJaWYgKGRhdGEtPm1hcmtfcXVlcnkpCisJCQlkYXRhLT5pbmZvLnNpemVwID0gJmRhdGEtPnNpemU7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKHNiLCAiJSJQUkl1TUFYICwgKHVpbnRtYXhfdClkYXRhLT5zaXplKTsKKwl9IGVsc2UgaWYgKGlzX2F0b20oIm9iamVjdHNpemU6ZGlzayIsIGF0b20sIGxlbikpIHsKKwkJaWYgKGRhdGEtPm1hcmtfcXVlcnkpCisJCQlkYXRhLT5pbmZvLmRpc2tfc2l6ZXAgPSAmZGF0YS0+ZGlza19zaXplOworCQllbHNlCisJCQlzdHJidWZfYWRkZihzYiwgIiUiUFJJdU1BWCwgKHVpbnRtYXhfdClkYXRhLT5kaXNrX3NpemUpOworCX0gZWxzZSBpZiAoaXNfYXRvbSgicmVzdCIsIGF0b20sIGxlbikpIHsKKwkJaWYgKGRhdGEtPm1hcmtfcXVlcnkpCisJCQlkYXRhLT5zcGxpdF9vbl93aGl0ZXNwYWNlID0gMTsKKwkJZWxzZSBpZiAoZGF0YS0+cmVzdCkKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGRhdGEtPnJlc3QpOworCX0gZWxzZSBpZiAoaXNfYXRvbSgiZGVsdGFiYXNlIiwgYXRvbSwgbGVuKSkgeworCQlpZiAoZGF0YS0+bWFya19xdWVyeSkKKwkJCWRhdGEtPmluZm8uZGVsdGFfYmFzZV9vaWQgPSAmZGF0YS0+ZGVsdGFfYmFzZV9vaWQ7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsCisJCQkJICAgICAgb2lkX3RvX2hleCgmZGF0YS0+ZGVsdGFfYmFzZV9vaWQpKTsKKwl9IGVsc2UKKwkJZGllKCJ1bmtub3duIGZvcm1hdCBlbGVtZW50OiAlLipzIiwgbGVuLCBhdG9tKTsKK30KKworc3RhdGljIHNpemVfdCBleHBhbmRfZm9ybWF0KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzdGFydCwgdm9pZCAqZGF0YSkKK3sKKwljb25zdCBjaGFyICplbmQ7CisKKwlpZiAoKnN0YXJ0ICE9ICcoJykKKwkJcmV0dXJuIDA7CisJZW5kID0gc3RyY2hyKHN0YXJ0ICsgMSwgJyknKTsKKwlpZiAoIWVuZCkKKwkJZGllKCJmb3JtYXQgZWxlbWVudCAnJXMnIGRvZXMgbm90IGVuZCBpbiAnKSciLCBzdGFydCk7CisKKwlleHBhbmRfYXRvbShzYiwgc3RhcnQgKyAxLCBlbmQgLSBzdGFydCAtIDEsIGRhdGEpOworCisJcmV0dXJuIGVuZCAtIHN0YXJ0ICsgMTsKK30KKworc3RhdGljIHZvaWQgYmF0Y2hfd3JpdGUoc3RydWN0IGJhdGNoX29wdGlvbnMgKm9wdCwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlpZiAob3B0LT5idWZmZXJfb3V0cHV0KSB7CisJCWlmIChmd3JpdGUoZGF0YSwgMSwgbGVuLCBzdGRvdXQpICE9IGxlbikKKwkJCWRpZV9lcnJubygidW5hYmxlIHRvIHdyaXRlIHRvIHN0ZG91dCIpOworCX0gZWxzZQorCQl3cml0ZV9vcl9kaWUoMSwgZGF0YSwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfb2JqZWN0X29yX2RpZShzdHJ1Y3QgYmF0Y2hfb3B0aW9ucyAqb3B0LCBzdHJ1Y3QgZXhwYW5kX2RhdGEgKmRhdGEpCit7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkID0gJmRhdGEtPm9pZDsKKworCWFzc2VydChkYXRhLT5pbmZvLnR5cGVwKTsKKworCWlmIChkYXRhLT50eXBlID09IE9CSl9CTE9CKSB7CisJCWlmIChvcHQtPmJ1ZmZlcl9vdXRwdXQpCisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJaWYgKG9wdC0+Y21kbW9kZSkgeworCQkJY2hhciAqY29udGVudHM7CisJCQl1bnNpZ25lZCBsb25nIHNpemU7CisKKwkJCWlmICghZGF0YS0+cmVzdCkKKwkJCQlkaWUoIm1pc3NpbmcgcGF0aCBmb3IgJyVzJyIsIG9pZF90b19oZXgob2lkKSk7CisKKwkJCWlmIChvcHQtPmNtZG1vZGUgPT0gJ3cnKSB7CisJCQkJaWYgKGZpbHRlcl9vYmplY3QoZGF0YS0+cmVzdCwgMDEwMDY0NCwgb2lkLAorCQkJCQkJICAmY29udGVudHMsICZzaXplKSkKKwkJCQkJZGllKCJjb3VsZCBub3QgY29udmVydCAnJXMnICVzIiwKKwkJCQkJICAgIG9pZF90b19oZXgob2lkKSwgZGF0YS0+cmVzdCk7CisJCQl9IGVsc2UgaWYgKG9wdC0+Y21kbW9kZSA9PSAnYycpIHsKKwkJCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCQkJaWYgKCF0ZXh0Y29udl9vYmplY3QodGhlX3JlcG9zaXRvcnksCisJCQkJCQkgICAgIGRhdGEtPnJlc3QsIDAxMDA2NDQsIG9pZCwKKwkJCQkJCSAgICAgMSwgJmNvbnRlbnRzLCAmc2l6ZSkpCisJCQkJCWNvbnRlbnRzID0gcmVhZF9vYmplY3RfZmlsZShvaWQsCisJCQkJCQkJCSAgICAmdHlwZSwKKwkJCQkJCQkJICAgICZzaXplKTsKKwkJCQlpZiAoIWNvbnRlbnRzKQorCQkJCQlkaWUoImNvdWxkIG5vdCBjb252ZXJ0ICclcycgJXMiLAorCQkJCQkgICAgb2lkX3RvX2hleChvaWQpLCBkYXRhLT5yZXN0KTsKKwkJCX0gZWxzZQorCQkJCUJVRygiaW52YWxpZCBjbWRtb2RlOiAlYyIsIG9wdC0+Y21kbW9kZSk7CisJCQliYXRjaF93cml0ZShvcHQsIGNvbnRlbnRzLCBzaXplKTsKKwkJCWZyZWUoY29udGVudHMpOworCQl9IGVsc2UgeworCQkJc3RyZWFtX2Jsb2Iob2lkKTsKKwkJfQorCX0KKwllbHNlIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCXZvaWQgKmNvbnRlbnRzOworCisJCWNvbnRlbnRzID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCAmc2l6ZSk7CisJCWlmICghY29udGVudHMpCisJCQlkaWUoIm9iamVjdCAlcyBkaXNhcHBlYXJlZCIsIG9pZF90b19oZXgob2lkKSk7CisJCWlmICh0eXBlICE9IGRhdGEtPnR5cGUpCisJCQlkaWUoIm9iamVjdCAlcyBjaGFuZ2VkIHR5cGUhPyIsIG9pZF90b19oZXgob2lkKSk7CisJCWlmIChkYXRhLT5pbmZvLnNpemVwICYmIHNpemUgIT0gZGF0YS0+c2l6ZSkKKwkJCWRpZSgib2JqZWN0ICVzIGNoYW5nZWQgc2l6ZSE/Iiwgb2lkX3RvX2hleChvaWQpKTsKKworCQliYXRjaF93cml0ZShvcHQsIGNvbnRlbnRzLCBzaXplKTsKKwkJZnJlZShjb250ZW50cyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBiYXRjaF9vYmplY3Rfd3JpdGUoY29uc3QgY2hhciAqb2JqX25hbWUsCisJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqc2NyYXRjaCwKKwkJCSAgICAgICBzdHJ1Y3QgYmF0Y2hfb3B0aW9ucyAqb3B0LAorCQkJICAgICAgIHN0cnVjdCBleHBhbmRfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEtPnNraXBfb2JqZWN0X2luZm8gJiYKKwkgICAgb2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKHRoZV9yZXBvc2l0b3J5LCAmZGF0YS0+b2lkLCAmZGF0YS0+aW5mbywKKwkJCQkgICAgIE9CSkVDVF9JTkZPX0xPT0tVUF9SRVBMQUNFKSA8IDApIHsKKwkJcHJpbnRmKCIlcyBtaXNzaW5nXG4iLAorCQkgICAgICAgb2JqX25hbWUgPyBvYmpfbmFtZSA6IG9pZF90b19oZXgoJmRhdGEtPm9pZCkpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJcmV0dXJuOworCX0KKworCXN0cmJ1Zl9yZXNldChzY3JhdGNoKTsKKwlzdHJidWZfZXhwYW5kKHNjcmF0Y2gsIG9wdC0+Zm9ybWF0LCBleHBhbmRfZm9ybWF0LCBkYXRhKTsKKwlzdHJidWZfYWRkY2goc2NyYXRjaCwgJ1xuJyk7CisJYmF0Y2hfd3JpdGUob3B0LCBzY3JhdGNoLT5idWYsIHNjcmF0Y2gtPmxlbik7CisKKwlpZiAob3B0LT5wcmludF9jb250ZW50cykgeworCQlwcmludF9vYmplY3Rfb3JfZGllKG9wdCwgZGF0YSk7CisJCWJhdGNoX3dyaXRlKG9wdCwgIlxuIiwgMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBiYXRjaF9vbmVfb2JqZWN0KGNvbnN0IGNoYXIgKm9ial9uYW1lLAorCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICpzY3JhdGNoLAorCQkJICAgICBzdHJ1Y3QgYmF0Y2hfb3B0aW9ucyAqb3B0LAorCQkJICAgICBzdHJ1Y3QgZXhwYW5kX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG9iamVjdF9jb250ZXh0IGN0eDsKKwlpbnQgZmxhZ3MgPSBvcHQtPmZvbGxvd19zeW1saW5rcyA/IEdFVF9PSURfRk9MTE9XX1NZTUxJTktTIDogMDsKKwllbnVtIGdldF9vaWRfcmVzdWx0IHJlc3VsdDsKKworCXJlc3VsdCA9IGdldF9vaWRfd2l0aF9jb250ZXh0KHRoZV9yZXBvc2l0b3J5LCBvYmpfbmFtZSwKKwkJCQkgICAgICBmbGFncywgJmRhdGEtPm9pZCwgJmN0eCk7CisJaWYgKHJlc3VsdCAhPSBGT1VORCkgeworCQlzd2l0Y2ggKHJlc3VsdCkgeworCQljYXNlIE1JU1NJTkdfT0JKRUNUOgorCQkJcHJpbnRmKCIlcyBtaXNzaW5nXG4iLCBvYmpfbmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSBTSE9SVF9OQU1FX0FNQklHVU9VUzoKKwkJCXByaW50ZigiJXMgYW1iaWd1b3VzXG4iLCBvYmpfbmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSBEQU5HTElOR19TWU1MSU5LOgorCQkJcHJpbnRmKCJkYW5nbGluZyAlIlBSSXVNQVgiXG4lc1xuIiwKKwkJCSAgICAgICAodWludG1heF90KXN0cmxlbihvYmpfbmFtZSksIG9ial9uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIFNZTUxJTktfTE9PUDoKKwkJCXByaW50ZigibG9vcCAlIlBSSXVNQVgiXG4lc1xuIiwKKwkJCSAgICAgICAodWludG1heF90KXN0cmxlbihvYmpfbmFtZSksIG9ial9uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIE5PVF9ESVI6CisJCQlwcmludGYoIm5vdGRpciAlIlBSSXVNQVgiXG4lc1xuIiwKKwkJCSAgICAgICAodWludG1heF90KXN0cmxlbihvYmpfbmFtZSksIG9ial9uYW1lKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCJ1bmtub3duIGdldF9zaGExX3dpdGhfY29udGV4dCByZXN1bHQgJWRcbiIsCisJCQkgICAgICAgcmVzdWx0KTsKKwkJCWJyZWFrOworCQl9CisJCWZmbHVzaChzdGRvdXQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGN0eC5tb2RlID09IDApIHsKKwkJcHJpbnRmKCJzeW1saW5rICUiUFJJdU1BWCJcbiVzXG4iLAorCQkgICAgICAgKHVpbnRtYXhfdCljdHguc3ltbGlua19wYXRoLmxlbiwKKwkJICAgICAgIGN0eC5zeW1saW5rX3BhdGguYnVmKTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJCXJldHVybjsKKwl9CisKKwliYXRjaF9vYmplY3Rfd3JpdGUob2JqX25hbWUsIHNjcmF0Y2gsIG9wdCwgZGF0YSk7Cit9CisKK3N0cnVjdCBvYmplY3RfY2JfZGF0YSB7CisJc3RydWN0IGJhdGNoX29wdGlvbnMgKm9wdDsKKwlzdHJ1Y3QgZXhwYW5kX2RhdGEgKmV4cGFuZDsKKwlzdHJ1Y3Qgb2lkc2V0ICpzZWVuOworCXN0cnVjdCBzdHJidWYgKnNjcmF0Y2g7Cit9OworCitzdGF0aWMgaW50IGJhdGNoX29iamVjdF9jYihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHZvaWQgKnZkYXRhKQoreworCXN0cnVjdCBvYmplY3RfY2JfZGF0YSAqZGF0YSA9IHZkYXRhOworCW9pZGNweSgmZGF0YS0+ZXhwYW5kLT5vaWQsIG9pZCk7CisJYmF0Y2hfb2JqZWN0X3dyaXRlKE5VTEwsIGRhdGEtPnNjcmF0Y2gsIGRhdGEtPm9wdCwgZGF0YS0+ZXhwYW5kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb2xsZWN0X2xvb3NlX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJY29uc3QgY2hhciAqcGF0aCwKKwkJCQl2b2lkICpkYXRhKQoreworCW9pZF9hcnJheV9hcHBlbmQoZGF0YSwgb2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb2xsZWN0X3BhY2tlZF9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjaywKKwkJCQkgdWludDMyX3QgcG9zLAorCQkJCSB2b2lkICpkYXRhKQoreworCW9pZF9hcnJheV9hcHBlbmQoZGF0YSwgb2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiYXRjaF91bm9yZGVyZWRfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdm9pZCAqdmRhdGEpCit7CisJc3RydWN0IG9iamVjdF9jYl9kYXRhICpkYXRhID0gdmRhdGE7CisKKwlpZiAob2lkc2V0X2luc2VydChkYXRhLT5zZWVuLCBvaWQpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBiYXRjaF9vYmplY3RfY2Iob2lkLCBkYXRhKTsKK30KKworc3RhdGljIGludCBiYXRjaF91bm9yZGVyZWRfbG9vc2UoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSBjb25zdCBjaGFyICpwYXRoLAorCQkJCSB2b2lkICpkYXRhKQoreworCXJldHVybiBiYXRjaF91bm9yZGVyZWRfb2JqZWN0KG9pZCwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgYmF0Y2hfdW5vcmRlcmVkX3BhY2tlZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjaywKKwkJCQkgIHVpbnQzMl90IHBvcywKKwkJCQkgIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGJhdGNoX3Vub3JkZXJlZF9vYmplY3Qob2lkLCBkYXRhKTsKK30KKworc3RhdGljIGludCBiYXRjaF9vYmplY3RzKHN0cnVjdCBiYXRjaF9vcHRpb25zICpvcHQpCit7CisJc3RydWN0IHN0cmJ1ZiBpbnB1dCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgb3V0cHV0ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGV4cGFuZF9kYXRhIGRhdGE7CisJaW50IHNhdmVfd2FybmluZzsKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmICghb3B0LT5mb3JtYXQpCisJCW9wdC0+Zm9ybWF0ID0gIiUob2JqZWN0bmFtZSkgJShvYmplY3R0eXBlKSAlKG9iamVjdHNpemUpIjsKKworCS8qCisJICogRXhwYW5kIG9uY2Ugd2l0aCBvdXIgc3BlY2lhbCBtYXJrX3F1ZXJ5IGZsYWcsIHdoaWNoIHdpbGwgcHJpbWUgdGhlCisJICogb2JqZWN0X2luZm8gdG8gYmUgaGFuZGVkIHRvIG9pZF9vYmplY3RfaW5mb19leHRlbmRlZCBmb3IgZWFjaAorCSAqIG9iamVjdC4KKwkgKi8KKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisJZGF0YS5tYXJrX3F1ZXJ5ID0gMTsKKwlzdHJidWZfZXhwYW5kKCZvdXRwdXQsIG9wdC0+Zm9ybWF0LCBleHBhbmRfZm9ybWF0LCAmZGF0YSk7CisJZGF0YS5tYXJrX3F1ZXJ5ID0gMDsKKwlzdHJidWZfcmVsZWFzZSgmb3V0cHV0KTsKKwlpZiAob3B0LT5jbWRtb2RlKQorCQlkYXRhLnNwbGl0X29uX3doaXRlc3BhY2UgPSAxOworCisJaWYgKG9wdC0+YWxsX29iamVjdHMpIHsKKwkJc3RydWN0IG9iamVjdF9pbmZvIGVtcHR5ID0gT0JKRUNUX0lORk9fSU5JVDsKKwkJaWYgKCFtZW1jbXAoJmRhdGEuaW5mbywgJmVtcHR5LCBzaXplb2YoZW1wdHkpKSkKKwkJCWRhdGEuc2tpcF9vYmplY3RfaW5mbyA9IDE7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhcmUgcHJpbnRpbmcgb3V0IHRoZSBvYmplY3QsIHRoZW4gYWx3YXlzIGZpbGwgaW4gdGhlIHR5cGUsCisJICogc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBzdHJlYW0uCisJICovCisJaWYgKG9wdC0+cHJpbnRfY29udGVudHMpCisJCWRhdGEuaW5mby50eXBlcCA9ICZkYXRhLnR5cGU7CisKKwlpZiAob3B0LT5hbGxfb2JqZWN0cykgeworCQlzdHJ1Y3Qgb2JqZWN0X2NiX2RhdGEgY2I7CisKKwkJaWYgKGhhc19wcm9taXNvcl9yZW1vdGUoKSkKKwkJCXdhcm5pbmcoIlRoaXMgcmVwb3NpdG9yeSB1c2VzIHByb21pc29yIHJlbW90ZXMuIFNvbWUgb2JqZWN0cyBtYXkgbm90IGJlIGxvYWRlZC4iKTsKKworCQljYi5vcHQgPSBvcHQ7CisJCWNiLmV4cGFuZCA9ICZkYXRhOworCQljYi5zY3JhdGNoID0gJm91dHB1dDsKKworCQlpZiAob3B0LT51bm9yZGVyZWQpIHsKKwkJCXN0cnVjdCBvaWRzZXQgc2VlbiA9IE9JRFNFVF9JTklUOworCisJCQljYi5zZWVuID0gJnNlZW47CisKKwkJCWZvcl9lYWNoX2xvb3NlX29iamVjdChiYXRjaF91bm9yZGVyZWRfbG9vc2UsICZjYiwgMCk7CisJCQlmb3JfZWFjaF9wYWNrZWRfb2JqZWN0KGJhdGNoX3Vub3JkZXJlZF9wYWNrZWQsICZjYiwKKwkJCQkJICAgICAgIEZPUl9FQUNIX09CSkVDVF9QQUNLX09SREVSKTsKKworCQkJb2lkc2V0X2NsZWFyKCZzZWVuKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBvaWRfYXJyYXkgc2EgPSBPSURfQVJSQVlfSU5JVDsKKworCQkJZm9yX2VhY2hfbG9vc2Vfb2JqZWN0KGNvbGxlY3RfbG9vc2Vfb2JqZWN0LCAmc2EsIDApOworCQkJZm9yX2VhY2hfcGFja2VkX29iamVjdChjb2xsZWN0X3BhY2tlZF9vYmplY3QsICZzYSwgMCk7CisKKwkJCW9pZF9hcnJheV9mb3JfZWFjaF91bmlxdWUoJnNhLCBiYXRjaF9vYmplY3RfY2IsICZjYik7CisKKwkJCW9pZF9hcnJheV9jbGVhcigmc2EpOworCQl9CisKKwkJc3RyYnVmX3JlbGVhc2UoJm91dHB1dCk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogV2UgYXJlIGdvaW5nIHRvIGNhbGwgZ2V0X3NoYTEgb24gYSBwb3RlbnRpYWxseSB2ZXJ5IGxhcmdlIG51bWJlciBvZgorCSAqIG9iamVjdHMuIEluIG1vc3QgbGFyZ2UgY2FzZXMsIHRoZXNlIHdpbGwgYmUgYWN0dWFsIG9iamVjdCBzaGExcy4gVGhlCisJICogY29zdCB0byBkb3VibGUtY2hlY2sgdGhhdCBlYWNoIG9uZSBpcyBub3QgYWxzbyBhIHJlZiAoanVzdCBzbyB3ZSBjYW4KKwkgKiB3YXJuKSBlbmRzIHVwIGR3YXJmaW5nIHRoZSBhY3R1YWwgY29zdCBvZiB0aGUgb2JqZWN0IGxvb2t1cHMKKwkgKiB0aGVtc2VsdmVzLiBXZSBjYW4gd29yayBhcm91bmQgaXQgYnkganVzdCB0dXJuaW5nIG9mZiB0aGUgd2FybmluZy4KKwkgKi8KKwlzYXZlX3dhcm5pbmcgPSB3YXJuX29uX29iamVjdF9yZWZuYW1lX2FtYmlndWl0eTsKKwl3YXJuX29uX29iamVjdF9yZWZuYW1lX2FtYmlndWl0eSA9IDA7CisKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmlucHV0LCBzdGRpbikgIT0gRU9GKSB7CisJCWlmIChkYXRhLnNwbGl0X29uX3doaXRlc3BhY2UpIHsKKwkJCS8qCisJCQkgKiBTcGxpdCBhdCBmaXJzdCB3aGl0ZXNwYWNlLCB0eWluZyBvZmYgdGhlIGJlZ2lubmluZworCQkJICogb2YgdGhlIHN0cmluZyBhbmQgc2F2aW5nIHRoZSByZW1haW5kZXIgKG9yIE5VTEwpIGluCisJCQkgKiBkYXRhLnJlc3QuCisJCQkgKi8KKwkJCWNoYXIgKnAgPSBzdHJwYnJrKGlucHV0LmJ1ZiwgIiBcdCIpOworCQkJaWYgKHApIHsKKwkJCQl3aGlsZSAoKnAgJiYgc3RyY2hyKCIgXHQiLCAqcCkpCisJCQkJCSpwKysgPSAnXDAnOworCQkJfQorCQkJZGF0YS5yZXN0ID0gcDsKKwkJfQorCisJCWJhdGNoX29uZV9vYmplY3QoaW5wdXQuYnVmLCAmb3V0cHV0LCBvcHQsICZkYXRhKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmaW5wdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZvdXRwdXQpOworCXdhcm5fb25fb2JqZWN0X3JlZm5hbWVfYW1iaWd1aXR5ID0gc2F2ZV93YXJuaW5nOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2F0X2ZpbGVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgLXAgfCA8dHlwZT4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxwYXRoPl0gPG9iamVjdD4iKSwKKwlOXygiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tZmlsdGVyc10iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGdpdF9jYXRfZmlsZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKHVzZXJkaWZmX2NvbmZpZyh2YXIsIHZhbHVlKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IGJhdGNoX29wdGlvbl9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJIGNvbnN0IGNoYXIgKmFyZywKKwkJCQkgaW50IHVuc2V0KQoreworCXN0cnVjdCBiYXRjaF9vcHRpb25zICpibyA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlpZiAoYm8tPmVuYWJsZWQpIHsKKwkJcmV0dXJuIGVycm9yKF8oIm9ubHkgb25lIGJhdGNoIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIikpOworCX0KKworCWJvLT5lbmFibGVkID0gMTsKKwliby0+cHJpbnRfY29udGVudHMgPSAhc3RyY21wKG9wdC0+bG9uZ19uYW1lLCAiYmF0Y2giKTsKKwliby0+Zm9ybWF0ID0gYXJnOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfY2F0X2ZpbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IG9wdCA9IDA7CisJY29uc3QgY2hhciAqZXhwX3R5cGUgPSBOVUxMLCAqb2JqX25hbWUgPSBOVUxMOworCXN0cnVjdCBiYXRjaF9vcHRpb25zIGJhdGNoID0gezB9OworCWludCB1bmtub3duX3R5cGUgPSAwOworCisJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9HUk9VUChOXygiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIikpLAorCQlPUFRfQ01ETU9ERSgndCcsIE5VTEwsICZvcHQsIE5fKCJzaG93IG9iamVjdCB0eXBlIiksICd0JyksCisJCU9QVF9DTURNT0RFKCdzJywgTlVMTCwgJm9wdCwgTl8oInNob3cgb2JqZWN0IHNpemUiKSwgJ3MnKSwKKwkJT1BUX0NNRE1PREUoJ2UnLCBOVUxMLCAmb3B0LAorCQkJICAgIE5fKCJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiKSwgJ2UnKSwKKwkJT1BUX0NNRE1PREUoJ3AnLCBOVUxMLCAmb3B0LCBOXygicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiKSwgJ3AnKSwKKwkJT1BUX0NNRE1PREUoMCwgInRleHRjb252IiwgJm9wdCwKKwkJCSAgICBOXygiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiKSwgJ2MnKSwKKwkJT1BUX0NNRE1PREUoMCwgImZpbHRlcnMiLCAmb3B0LAorCQkJICAgIE5fKCJmb3IgYmxvYiBvYmplY3RzLCBydW4gZmlsdGVycyBvbiBvYmplY3QncyBjb250ZW50IiksICd3JyksCisJCU9QVF9TVFJJTkcoMCwgInBhdGgiLCAmZm9yY2VfcGF0aCwgTl8oImJsb2IiKSwKKwkJCSAgIE5fKCJ1c2UgYSBzcGVjaWZpYyBwYXRoIGZvciAtLXRleHRjb252Ly0tZmlsdGVycyIpKSwKKwkJT1BUX0JPT0woMCwgImFsbG93LXVua25vd24tdHlwZSIsICZ1bmtub3duX3R5cGUsCisJCQkgIE5fKCJhbGxvdyAtcyBhbmQgLXQgdG8gd29yayB3aXRoIGJyb2tlbi9jb3JydXB0IG9iamVjdHMiKSksCisJCU9QVF9CT09MKDAsICJidWZmZXIiLCAmYmF0Y2guYnVmZmVyX291dHB1dCwgTl8oImJ1ZmZlciAtLWJhdGNoIG91dHB1dCIpKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgImJhdGNoIiwgJmJhdGNoLCAiZm9ybWF0IiwKKwkJCU5fKCJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiKSwKKwkJCVBBUlNFX09QVF9PUFRBUkcgfCBQQVJTRV9PUFRfTk9ORUcsCisJCQliYXRjaF9vcHRpb25fY2FsbGJhY2spLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAiYmF0Y2gtY2hlY2siLCAmYmF0Y2gsICJmb3JtYXQiLAorCQkJTl8oInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIpLAorCQkJUEFSU0VfT1BUX09QVEFSRyB8IFBBUlNFX09QVF9OT05FRywKKwkJCWJhdGNoX29wdGlvbl9jYWxsYmFjayksCisJCU9QVF9CT09MKDAsICJmb2xsb3ctc3ltbGlua3MiLCAmYmF0Y2guZm9sbG93X3N5bWxpbmtzLAorCQkJIE5fKCJmb2xsb3cgaW4tdHJlZSBzeW1saW5rcyAodXNlZCB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjaykiKSksCisJCU9QVF9CT09MKDAsICJiYXRjaC1hbGwtb2JqZWN0cyIsICZiYXRjaC5hbGxfb2JqZWN0cywKKwkJCSBOXygic2hvdyBhbGwgb2JqZWN0cyB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjayIpKSwKKwkJT1BUX0JPT0woMCwgInVub3JkZXJlZCIsICZiYXRjaC51bm9yZGVyZWQsCisJCQkgTl8oImRvIG5vdCBvcmRlciAtLWJhdGNoLWFsbC1vYmplY3RzIG91dHB1dCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2NhdF9maWxlX2NvbmZpZywgTlVMTCk7CisKKwliYXRjaC5idWZmZXJfb3V0cHV0ID0gLTE7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBjYXRfZmlsZV91c2FnZSwgMCk7CisKKwlpZiAob3B0KSB7CisJCWlmIChiYXRjaC5lbmFibGVkICYmIChvcHQgPT0gJ2MnIHx8IG9wdCA9PSAndycpKQorCQkJYmF0Y2guY21kbW9kZSA9IG9wdDsKKwkJZWxzZSBpZiAoYXJnYyA9PSAxKQorCQkJb2JqX25hbWUgPSBhcmd2WzBdOworCQllbHNlCisJCQl1c2FnZV93aXRoX29wdGlvbnMoY2F0X2ZpbGVfdXNhZ2UsIG9wdGlvbnMpOworCX0KKwlpZiAoIW9wdCAmJiAhYmF0Y2guZW5hYmxlZCkgeworCQlpZiAoYXJnYyA9PSAyKSB7CisJCQlleHBfdHlwZSA9IGFyZ3ZbMF07CisJCQlvYmpfbmFtZSA9IGFyZ3ZbMV07CisJCX0gZWxzZQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNhdF9maWxlX3VzYWdlLCBvcHRpb25zKTsKKwl9CisJaWYgKGJhdGNoLmVuYWJsZWQpIHsKKwkJaWYgKGJhdGNoLmNtZG1vZGUgIT0gb3B0IHx8IGFyZ2MpCisJCQl1c2FnZV93aXRoX29wdGlvbnMoY2F0X2ZpbGVfdXNhZ2UsIG9wdGlvbnMpOworCQlpZiAoYmF0Y2guY21kbW9kZSAmJiBiYXRjaC5hbGxfb2JqZWN0cykKKwkJCWRpZSgiLS1iYXRjaC1hbGwtb2JqZWN0cyBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAiCisJCQkgICAgIi0tdGV4dGNvbnYgbm9yIHdpdGggLS1maWx0ZXJzIik7CisJfQorCisJaWYgKChiYXRjaC5mb2xsb3dfc3ltbGlua3MgfHwgYmF0Y2guYWxsX29iamVjdHMpICYmICFiYXRjaC5lbmFibGVkKSB7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhjYXRfZmlsZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKGZvcmNlX3BhdGggJiYgb3B0ICE9ICdjJyAmJiBvcHQgIT0gJ3cnKSB7CisJCWVycm9yKCItLXBhdGg9PHBhdGg+IG5lZWRzIC0tdGV4dGNvbnYgb3IgLS1maWx0ZXJzIik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhjYXRfZmlsZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKGZvcmNlX3BhdGggJiYgYmF0Y2guZW5hYmxlZCkgeworCQllcnJvcigiLS1wYXRoPTxwYXRoPiBpbmNvbXBhdGlibGUgd2l0aCAtLWJhdGNoIik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhjYXRfZmlsZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKGJhdGNoLmJ1ZmZlcl9vdXRwdXQgPCAwKQorCQliYXRjaC5idWZmZXJfb3V0cHV0ID0gYmF0Y2guYWxsX29iamVjdHM7CisKKwlpZiAoYmF0Y2guZW5hYmxlZCkKKwkJcmV0dXJuIGJhdGNoX29iamVjdHMoJmJhdGNoKTsKKworCWlmICh1bmtub3duX3R5cGUgJiYgb3B0ICE9ICd0JyAmJiBvcHQgIT0gJ3MnKQorCQlkaWUoImdpdCBjYXQtZmlsZSAtLWFsbG93LXVua25vd24tdHlwZTogdXNlIHdpdGggLXMgb3IgLXQiKTsKKwlyZXR1cm4gY2F0X29uZV9maWxlKG9wdCwgZXhwX3R5cGUsIG9ial9uYW1lLCB1bmtub3duX3R5cGUpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jaGVjay1hdHRyLmMgYi9idWlsdGluL2NoZWNrLWF0dHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDgzMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jaGVjay1hdHRyLmMKQEAgLTAsMCArMSwxODkgQEAKKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGludCBhbGxfYXR0cnM7CitzdGF0aWMgaW50IGNhY2hlZF9hdHRyczsKK3N0YXRpYyBpbnQgc3RkaW5fcGF0aHM7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNoZWNrX2F0dHJfdXNhZ2VbXSA9IHsKK05fKCJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIiksCitOXygiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIpLAorTlVMTAorfTsKKworc3RhdGljIGludCBudWxfdGVybV9saW5lOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBjaGVja19hdHRyX29wdGlvbnNbXSA9IHsKKwlPUFRfQk9PTCgnYScsICJhbGwiLCAmYWxsX2F0dHJzLCBOXygicmVwb3J0IGFsbCBhdHRyaWJ1dGVzIHNldCBvbiBmaWxlIikpLAorCU9QVF9CT09MKDAsICAiY2FjaGVkIiwgJmNhY2hlZF9hdHRycywgTl8oInVzZSAuZ2l0YXR0cmlidXRlcyBvbmx5IGZyb20gdGhlIGluZGV4IikpLAorCU9QVF9CT09MKDAgLCAic3RkaW4iLCAmc3RkaW5fcGF0aHMsIE5fKCJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIpKSwKKwlPUFRfQk9PTCgneicsIE5VTEwsICZudWxfdGVybV9saW5lLAorCQkgTl8oInRlcm1pbmF0ZSBpbnB1dCBhbmQgb3V0cHV0IHJlY29yZHMgYnkgYSBOVUwgY2hhcmFjdGVyIikpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIHZvaWQgb3V0cHV0X2F0dHIoc3RydWN0IGF0dHJfY2hlY2sgKmNoZWNrLCBjb25zdCBjaGFyICpmaWxlKQoreworCWludCBqOworCWludCBjbnQgPSBjaGVjay0+bnI7CisKKwlmb3IgKGogPSAwOyBqIDwgY250OyBqKyspIHsKKwkJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVjay0+aXRlbXNbal0udmFsdWU7CisKKwkJaWYgKEFUVFJfVFJVRSh2YWx1ZSkpCisJCQl2YWx1ZSA9ICJzZXQiOworCQllbHNlIGlmIChBVFRSX0ZBTFNFKHZhbHVlKSkKKwkJCXZhbHVlID0gInVuc2V0IjsKKwkJZWxzZSBpZiAoQVRUUl9VTlNFVCh2YWx1ZSkpCisJCQl2YWx1ZSA9ICJ1bnNwZWNpZmllZCI7CisKKwkJaWYgKG51bF90ZXJtX2xpbmUpIHsKKwkJCXByaW50ZigiJXMlYyIgLyogcGF0aCAqLworCQkJICAgICAgICIlcyVjIiAvKiBhdHRybmFtZSAqLworCQkJICAgICAgICIlcyVjIiAvKiBhdHRydmFsdWUgKi8sCisJCQkgICAgICAgZmlsZSwgMCwKKwkJCSAgICAgICBnaXRfYXR0cl9uYW1lKGNoZWNrLT5pdGVtc1tqXS5hdHRyKSwgMCwgdmFsdWUsIDApOworCQl9IGVsc2UgeworCQkJcXVvdGVfY19zdHlsZShmaWxlLCBOVUxMLCBzdGRvdXQsIDApOworCQkJcHJpbnRmKCI6ICVzOiAlc1xuIiwKKwkJCSAgICAgICBnaXRfYXR0cl9uYW1lKGNoZWNrLT5pdGVtc1tqXS5hdHRyKSwgdmFsdWUpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBjaGVja19hdHRyKGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICAgICAgIHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjaywKKwkJICAgICAgIGludCBjb2xsZWN0X2FsbCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmZpbGUpCit7CisJY2hhciAqZnVsbF9wYXRoID0KKwkJcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDAsIGZpbGUpOworCisJaWYgKGNvbGxlY3RfYWxsKSB7CisJCWdpdF9hbGxfYXR0cnMoJnRoZV9pbmRleCwgZnVsbF9wYXRoLCBjaGVjayk7CisJfSBlbHNlIHsKKwkJZ2l0X2NoZWNrX2F0dHIoJnRoZV9pbmRleCwgZnVsbF9wYXRoLCBjaGVjayk7CisJfQorCW91dHB1dF9hdHRyKGNoZWNrLCBmaWxlKTsKKworCWZyZWUoZnVsbF9wYXRoKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfYXR0cl9zdGRpbl9wYXRocyhjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJICAgc3RydWN0IGF0dHJfY2hlY2sgKmNoZWNrLAorCQkJCSAgIGludCBjb2xsZWN0X2FsbCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgdW5xdW90ZWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfZ2V0bGluZV9mbiBnZXRsaW5lX2ZuOworCisJZ2V0bGluZV9mbiA9IG51bF90ZXJtX2xpbmUgPyBzdHJidWZfZ2V0bGluZV9udWwgOiBzdHJidWZfZ2V0bGluZV9sZjsKKwl3aGlsZSAoZ2V0bGluZV9mbigmYnVmLCBzdGRpbikgIT0gRU9GKSB7CisJCWlmICghbnVsX3Rlcm1fbGluZSAmJiBidWYuYnVmWzBdID09ICciJykgeworCQkJc3RyYnVmX3Jlc2V0KCZ1bnF1b3RlZCk7CisJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZ1bnF1b3RlZCwgYnVmLmJ1ZiwgTlVMTCkpCisJCQkJZGllKCJsaW5lIGlzIGJhZGx5IHF1b3RlZCIpOworCQkJc3RyYnVmX3N3YXAoJmJ1ZiwgJnVucXVvdGVkKTsKKwkJfQorCQljaGVja19hdHRyKHByZWZpeCwgY2hlY2ssIGNvbGxlY3RfYWxsLCBidWYuYnVmKTsKKwkJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgImF0dHJpYnV0ZSB0byBzdGRvdXQiKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnVucXVvdGVkKTsKK30KKworc3RhdGljIE5PUkVUVVJOIHZvaWQgZXJyb3Jfd2l0aF91c2FnZShjb25zdCBjaGFyICptc2cpCit7CisJZXJyb3IoIiVzIiwgbXNnKTsKKwl1c2FnZV93aXRoX29wdGlvbnMoY2hlY2tfYXR0cl91c2FnZSwgY2hlY2tfYXR0cl9vcHRpb25zKTsKK30KKworaW50IGNtZF9jaGVja19hdHRyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKKwlpbnQgY250LCBpLCBkb3VibGVkYXNoLCBmaWxlaTsKKworCWlmICghaXNfYmFyZV9yZXBvc2l0b3J5KCkpCisJCXNldHVwX3dvcmtfdHJlZSgpOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBjaGVja19hdHRyX29wdGlvbnMsCisJCQkgICAgIGNoZWNrX2F0dHJfdXNhZ2UsIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKSB7CisJCWRpZSgiaW52YWxpZCBjYWNoZSIpOworCX0KKworCWlmIChjYWNoZWRfYXR0cnMpCisJCWdpdF9hdHRyX3NldF9kaXJlY3Rpb24oR0lUX0FUVFJfSU5ERVgpOworCisJZG91YmxlZGFzaCA9IC0xOworCWZvciAoaSA9IDA7IGRvdWJsZWRhc2ggPCAwICYmIGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tIikpCisJCQlkb3VibGVkYXNoID0gaTsKKwl9CisKKwkvKiBQcm9jZXNzIC0tYWxsIGFuZC9vciBhdHRyaWJ1dGUgYXJndW1lbnRzOiAqLworCWlmIChhbGxfYXR0cnMpIHsKKwkJaWYgKGRvdWJsZWRhc2ggPj0gMSkKKwkJCWVycm9yX3dpdGhfdXNhZ2UoIkF0dHJpYnV0ZXMgYW5kIC0tYWxsIGJvdGggc3BlY2lmaWVkIik7CisKKwkJY250ID0gMDsKKwkJZmlsZWkgPSBkb3VibGVkYXNoICsgMTsKKwl9IGVsc2UgaWYgKGRvdWJsZWRhc2ggPT0gMCkgeworCQllcnJvcl93aXRoX3VzYWdlKCJObyBhdHRyaWJ1dGUgc3BlY2lmaWVkIik7CisJfSBlbHNlIGlmIChkb3VibGVkYXNoIDwgMCkgeworCQlpZiAoIWFyZ2MpCisJCQllcnJvcl93aXRoX3VzYWdlKCJObyBhdHRyaWJ1dGUgc3BlY2lmaWVkIik7CisKKwkJaWYgKHN0ZGluX3BhdGhzKSB7CisJCQkvKiBUcmVhdCBhbGwgYXJndW1lbnRzIGFzIGF0dHJpYnV0ZSBuYW1lcy4gKi8KKwkJCWNudCA9IGFyZ2M7CisJCQlmaWxlaSA9IGFyZ2M7CisJCX0gZWxzZSB7CisJCQkvKiBUcmVhdCBleGFjdGx5IG9uZSBhcmd1bWVudCBhcyBhbiBhdHRyaWJ1dGUgbmFtZS4gKi8KKwkJCWNudCA9IDE7CisJCQlmaWxlaSA9IDE7CisJCX0KKwl9IGVsc2UgeworCQljbnQgPSBkb3VibGVkYXNoOworCQlmaWxlaSA9IGRvdWJsZWRhc2ggKyAxOworCX0KKworCS8qIENoZWNrIGZpbGUgYXJndW1lbnQocyk6ICovCisJaWYgKHN0ZGluX3BhdGhzKSB7CisJCWlmIChmaWxlaSA8IGFyZ2MpCisJCQllcnJvcl93aXRoX3VzYWdlKCJDYW4ndCBzcGVjaWZ5IGZpbGVzIHdpdGggLS1zdGRpbiIpOworCX0gZWxzZSB7CisJCWlmIChmaWxlaSA+PSBhcmdjKQorCQkJZXJyb3Jfd2l0aF91c2FnZSgiTm8gZmlsZSBzcGVjaWZpZWQiKTsKKwl9CisKKwljaGVjayA9IGF0dHJfY2hlY2tfYWxsb2MoKTsKKwlpZiAoIWFsbF9hdHRycykgeworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJCWNvbnN0IHN0cnVjdCBnaXRfYXR0ciAqYSA9IGdpdF9hdHRyKGFyZ3ZbaV0pOworCisJCQlpZiAoIWEpCisJCQkJcmV0dXJuIGVycm9yKCIlczogbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWUiLAorCQkJCQkgICAgIGFyZ3ZbaV0pOworCQkJYXR0cl9jaGVja19hcHBlbmQoY2hlY2ssIGEpOworCQl9CisJfQorCisJaWYgKHN0ZGluX3BhdGhzKQorCQljaGVja19hdHRyX3N0ZGluX3BhdGhzKHByZWZpeCwgY2hlY2ssIGFsbF9hdHRycyk7CisJZWxzZSB7CisJCWZvciAoaSA9IGZpbGVpOyBpIDwgYXJnYzsgaSsrKQorCQkJY2hlY2tfYXR0cihwcmVmaXgsIGNoZWNrLCBhbGxfYXR0cnMsIGFyZ3ZbaV0pOworCQltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAiYXR0cmlidXRlIHRvIHN0ZG91dCIpOworCX0KKworCWF0dHJfY2hlY2tfZnJlZShjaGVjayk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NoZWNrLWlnbm9yZS5jIGIvYnVpbHRpbi9jaGVjay1pZ25vcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTVkMGFlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jaGVjay1pZ25vcmUuYwpAQCAtMCwwICsxLDE5NiBAQAorI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKworc3RhdGljIGludCBxdWlldCwgdmVyYm9zZSwgc3RkaW5fcGF0aHMsIHNob3dfbm9uX21hdGNoaW5nLCBub19pbmRleDsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2hlY2tfaWdub3JlX3VzYWdlW10gPSB7CisiZ2l0IGNoZWNrLWlnbm9yZSBbPG9wdGlvbnM+XSA8cGF0aG5hbWU+Li4uIiwKKyJnaXQgY2hlY2staWdub3JlIFs8b3B0aW9ucz5dIC0tc3RkaW4iLAorTlVMTAorfTsKKworc3RhdGljIGludCBudWxfdGVybV9saW5lOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBjaGVja19pZ25vcmVfb3B0aW9uc1tdID0geworCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oImJlIHZlcmJvc2UiKSksCisJT1BUX0dST1VQKCIiKSwKKwlPUFRfQk9PTCgwLCAic3RkaW4iLCAmc3RkaW5fcGF0aHMsCisJCSBOXygicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iKSksCisJT1BUX0JPT0woJ3onLCBOVUxMLCAmbnVsX3Rlcm1fbGluZSwKKwkJIE5fKCJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIpKSwKKwlPUFRfQk9PTCgnbicsICJub24tbWF0Y2hpbmciLCAmc2hvd19ub25fbWF0Y2hpbmcsCisJCSBOXygic2hvdyBub24tbWF0Y2hpbmcgaW5wdXQgcGF0aHMiKSksCisJT1BUX0JPT0woMCwgIm5vLWluZGV4IiwgJm5vX2luZGV4LAorCQkgTl8oImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIikpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIHZvaWQgb3V0cHV0X3BhdHRlcm4oY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHBhdGhfcGF0dGVybiAqcGF0dGVybikKK3sKKwljaGFyICpiYW5nICA9IChwYXR0ZXJuICYmIHBhdHRlcm4tPmZsYWdzICYgUEFUVEVSTl9GTEFHX05FR0FUSVZFKSAgPyAiISIgOiAiIjsKKwljaGFyICpzbGFzaCA9IChwYXR0ZXJuICYmIHBhdHRlcm4tPmZsYWdzICYgUEFUVEVSTl9GTEFHX01VU1RCRURJUikgPyAiLyIgOiAiIjsKKwlpZiAoIW51bF90ZXJtX2xpbmUpIHsKKwkJaWYgKCF2ZXJib3NlKSB7CisJCQl3cml0ZV9uYW1lX3F1b3RlZChwYXRoLCBzdGRvdXQsICdcbicpOworCQl9IGVsc2UgeworCQkJaWYgKHBhdHRlcm4pIHsKKwkJCQlxdW90ZV9jX3N0eWxlKHBhdHRlcm4tPnBsLT5zcmMsIE5VTEwsIHN0ZG91dCwgMCk7CisJCQkJcHJpbnRmKCI6JWQ6JXMlcyVzXHQiLAorCQkJCSAgICAgICBwYXR0ZXJuLT5zcmNwb3MsCisJCQkJICAgICAgIGJhbmcsIHBhdHRlcm4tPnBhdHRlcm4sIHNsYXNoKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXByaW50ZigiOjpcdCIpOworCQkJfQorCQkJcXVvdGVfY19zdHlsZShwYXRoLCBOVUxMLCBzdGRvdXQsIDApOworCQkJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghdmVyYm9zZSkgeworCQkJcHJpbnRmKCIlcyVjIiwgcGF0aCwgJ1wwJyk7CisJCX0gZWxzZSB7CisJCQlpZiAocGF0dGVybikKKwkJCQlwcmludGYoIiVzJWMlZCVjJXMlcyVzJWMlcyVjIiwKKwkJCQkgICAgICAgcGF0dGVybi0+cGwtPnNyYywgJ1wwJywKKwkJCQkgICAgICAgcGF0dGVybi0+c3JjcG9zLCAnXDAnLAorCQkJCSAgICAgICBiYW5nLCBwYXR0ZXJuLT5wYXR0ZXJuLCBzbGFzaCwgJ1wwJywKKwkJCQkgICAgICAgcGF0aCwgJ1wwJyk7CisJCQllbHNlCisJCQkJcHJpbnRmKCIlYyVjJWMlcyVjIiwgJ1wwJywgJ1wwJywgJ1wwJywgcGF0aCwgJ1wwJyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfaWdub3JlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQljb25zdCBjaGFyICpwcmVmaXgsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpmdWxsX3BhdGg7CisJY2hhciAqc2VlbjsKKwlpbnQgbnVtX2lnbm9yZWQgPSAwLCBpOworCXN0cnVjdCBwYXRoX3BhdHRlcm4gKnBhdHRlcm47CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCisJaWYgKCFhcmdjKSB7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmKHN0ZGVyciwgIm5vIHBhdGhzcGVjIGdpdmVuLlxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogY2hlY2staWdub3JlIGp1c3QgbmVlZHMgcGF0aHMuIE1hZ2ljIGJleW9uZCA6LyBpcyByZWFsbHkKKwkgKiBpcnJlbGV2YW50LgorCSAqLworCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywKKwkJICAgICAgIFBBVEhTUEVDX0FMTF9NQUdJQyAmIH5QQVRIU1BFQ19GUk9NVE9QLAorCQkgICAgICAgUEFUSFNQRUNfU1lNTElOS19MRUFESU5HX1BBVEggfAorCQkgICAgICAgUEFUSFNQRUNfS0VFUF9PUkRFUiwKKwkJICAgICAgIHByZWZpeCwgYXJndik7CisKKwlkaWVfcGF0aF9pbnNpZGVfc3VibW9kdWxlKCZ0aGVfaW5kZXgsICZwYXRoc3BlYyk7CisKKwkvKgorCSAqIGxvb2sgZm9yIHBhdGhzcGVjcyBtYXRjaGluZyBlbnRyaWVzIGluIHRoZSBpbmRleCwgc2luY2UgdGhlc2UKKwkgKiBzaG91bGQgbm90IGJlIGlnbm9yZWQsIGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnQgd2l0aAorCSAqICdnaXQgc3RhdHVzJywgJ2dpdCBhZGQnIGV0Yy4KKwkgKi8KKwlzZWVuID0gZmluZF9wYXRoc3BlY3NfbWF0Y2hpbmdfYWdhaW5zdF9pbmRleCgmcGF0aHNwZWMsICZ0aGVfaW5kZXgpOworCWZvciAoaSA9IDA7IGkgPCBwYXRoc3BlYy5ucjsgaSsrKSB7CisJCWZ1bGxfcGF0aCA9IHBhdGhzcGVjLml0ZW1zW2ldLm1hdGNoOworCQlwYXR0ZXJuID0gTlVMTDsKKwkJaWYgKCFzZWVuW2ldKSB7CisJCQlpbnQgZHR5cGUgPSBEVF9VTktOT1dOOworCQkJcGF0dGVybiA9IGxhc3RfbWF0Y2hpbmdfcGF0dGVybihkaXIsICZ0aGVfaW5kZXgsCisJCQkJCQkJZnVsbF9wYXRoLCAmZHR5cGUpOworCQkJaWYgKCF2ZXJib3NlICYmIHBhdHRlcm4gJiYKKwkJCSAgICBwYXR0ZXJuLT5mbGFncyAmIFBBVFRFUk5fRkxBR19ORUdBVElWRSkKKwkJCQlwYXR0ZXJuID0gTlVMTDsKKwkJfQorCQlpZiAoIXF1aWV0ICYmIChwYXR0ZXJuIHx8IHNob3dfbm9uX21hdGNoaW5nKSkKKwkJCW91dHB1dF9wYXR0ZXJuKHBhdGhzcGVjLml0ZW1zW2ldLm9yaWdpbmFsLCBwYXR0ZXJuKTsKKwkJaWYgKHBhdHRlcm4pCisJCQludW1faWdub3JlZCsrOworCX0KKwlmcmVlKHNlZW4pOworCisJcmV0dXJuIG51bV9pZ25vcmVkOworfQorCitzdGF0aWMgaW50IGNoZWNrX2lnbm9yZV9zdGRpbl9wYXRocyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHVucXVvdGVkID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcGF0aHNwZWNbMl0gPSB7IE5VTEwsIE5VTEwgfTsKKwlzdHJidWZfZ2V0bGluZV9mbiBnZXRsaW5lX2ZuOworCWludCBudW1faWdub3JlZCA9IDA7CisKKwlnZXRsaW5lX2ZuID0gbnVsX3Rlcm1fbGluZSA/IHN0cmJ1Zl9nZXRsaW5lX251bCA6IHN0cmJ1Zl9nZXRsaW5lX2xmOworCXdoaWxlIChnZXRsaW5lX2ZuKCZidWYsIHN0ZGluKSAhPSBFT0YpIHsKKwkJaWYgKCFudWxfdGVybV9saW5lICYmIGJ1Zi5idWZbMF0gPT0gJyInKSB7CisJCQlzdHJidWZfcmVzZXQoJnVucXVvdGVkKTsKKwkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnVucXVvdGVkLCBidWYuYnVmLCBOVUxMKSkKKwkJCQlkaWUoImxpbmUgaXMgYmFkbHkgcXVvdGVkIik7CisJCQlzdHJidWZfc3dhcCgmYnVmLCAmdW5xdW90ZWQpOworCQl9CisJCXBhdGhzcGVjWzBdID0gYnVmLmJ1ZjsKKwkJbnVtX2lnbm9yZWQgKz0gY2hlY2tfaWdub3JlKGRpciwgcHJlZml4LAorCQkJCQkgICAgMSwgKGNvbnN0IGNoYXIgKiopcGF0aHNwZWMpOworCQltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAiY2hlY2staWdub3JlIHRvIHN0ZG91dCIpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmdW5xdW90ZWQpOworCXJldHVybiBudW1faWdub3JlZDsKK30KKworaW50IGNtZF9jaGVja19pZ25vcmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IG51bV9pZ25vcmVkOworCXN0cnVjdCBkaXJfc3RydWN0IGRpcjsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgY2hlY2tfaWdub3JlX29wdGlvbnMsCisJCQkgICAgIGNoZWNrX2lnbm9yZV91c2FnZSwgMCk7CisKKwlpZiAoc3RkaW5fcGF0aHMpIHsKKwkJaWYgKGFyZ2MgPiAwKQorCQkJZGllKF8oImNhbm5vdCBzcGVjaWZ5IHBhdGhuYW1lcyB3aXRoIC0tc3RkaW4iKSk7CisJfSBlbHNlIHsKKwkJaWYgKG51bF90ZXJtX2xpbmUpCisJCQlkaWUoXygiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iKSk7CisJCWlmIChhcmdjID09IDApCisJCQlkaWUoXygibm8gcGF0aCBzcGVjaWZpZWQiKSk7CisJfQorCWlmIChxdWlldCkgeworCQlpZiAoYXJnYyA+IDEpCisJCQlkaWUoXygiLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiKSk7CisJCWlmICh2ZXJib3NlKQorCQkJZGllKF8oImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIikpOworCX0KKwlpZiAoc2hvd19ub25fbWF0Y2hpbmcgJiYgIXZlcmJvc2UpCisJCWRpZShfKCItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIikpOworCisJLyogcmVhZF9jYWNoZSgpIGlzIG9ubHkgbmVjZXNzYXJ5IHNvIHdlIGNhbiB3YXRjaCBvdXQgZm9yIHN1Ym1vZHVsZXMuICovCisJaWYgKCFub19pbmRleCAmJiByZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKKwlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKKworCWlmIChzdGRpbl9wYXRocykgeworCQludW1faWdub3JlZCA9IGNoZWNrX2lnbm9yZV9zdGRpbl9wYXRocygmZGlyLCBwcmVmaXgpOworCX0gZWxzZSB7CisJCW51bV9pZ25vcmVkID0gY2hlY2tfaWdub3JlKCZkaXIsIHByZWZpeCwgYXJnYywgYXJndik7CisJCW1heWJlX2ZsdXNoX29yX2RpZShzdGRvdXQsICJpZ25vcmUgdG8gc3Rkb3V0Iik7CisJfQorCisJY2xlYXJfZGlyZWN0b3J5KCZkaXIpOworCisJcmV0dXJuICFudW1faWdub3JlZDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2hlY2stbWFpbG1hcC5jIGIvYnVpbHRpbi9jaGVjay1tYWlsbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RjZTE0NAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY2hlY2stbWFpbG1hcC5jCkBAIC0wLDAgKzEsNjcgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibWFpbG1hcC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCitzdGF0aWMgaW50IHVzZV9zdGRpbjsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2hlY2tfbWFpbG1hcF91c2FnZVtdID0geworTl8oImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIpLAorTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gY2hlY2tfbWFpbG1hcF9vcHRpb25zW10gPSB7CisJT1BUX0JPT0woMCwgInN0ZGluIiwgJnVzZV9zdGRpbiwgTl8oImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIikpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIHZvaWQgY2hlY2tfbWFpbG1hcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1haWxtYXAsIGNvbnN0IGNoYXIgKmNvbnRhY3QpCit7CisJY29uc3QgY2hhciAqbmFtZSwgKm1haWw7CisJc2l6ZV90IG5hbWVsZW4sIG1haWxsZW47CisJc3RydWN0IGlkZW50X3NwbGl0IGlkZW50OworCisJaWYgKHNwbGl0X2lkZW50X2xpbmUoJmlkZW50LCBjb250YWN0LCBzdHJsZW4oY29udGFjdCkpKQorCQlkaWUoXygidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIiksIGNvbnRhY3QpOworCisJbmFtZSA9IGlkZW50Lm5hbWVfYmVnaW47CisJbmFtZWxlbiA9IGlkZW50Lm5hbWVfZW5kIC0gaWRlbnQubmFtZV9iZWdpbjsKKwltYWlsID0gaWRlbnQubWFpbF9iZWdpbjsKKwltYWlsbGVuID0gaWRlbnQubWFpbF9lbmQgLSBpZGVudC5tYWlsX2JlZ2luOworCisJbWFwX3VzZXIobWFpbG1hcCwgJm1haWwsICZtYWlsbGVuLCAmbmFtZSwgJm5hbWVsZW4pOworCisJaWYgKG5hbWVsZW4pCisJCXByaW50ZigiJS4qcyAiLCAoaW50KW5hbWVsZW4sIG5hbWUpOworCXByaW50ZigiPCUuKnM+XG4iLCAoaW50KW1haWxsZW4sIG1haWwpOworfQorCitpbnQgY21kX2NoZWNrX21haWxtYXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmluZ19saXN0IG1haWxtYXAgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgY2hlY2tfbWFpbG1hcF9vcHRpb25zLAorCQkJICAgICBjaGVja19tYWlsbWFwX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyA9PSAwICYmICF1c2Vfc3RkaW4pCisJCWRpZShfKCJubyBjb250YWN0cyBzcGVjaWZpZWQiKSk7CisKKwlyZWFkX21haWxtYXAoJm1haWxtYXAsIE5VTEwpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7ICsraSkKKwkJY2hlY2tfbWFpbG1hcCgmbWFpbG1hcCwgYXJndltpXSk7CisJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgInN0ZG91dCIpOworCisJaWYgKHVzZV9zdGRpbikgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQl3aGlsZSAoc3RyYnVmX2dldGxpbmVfbGYoJmJ1Ziwgc3RkaW4pICE9IEVPRikgeworCQkJY2hlY2tfbWFpbG1hcCgmbWFpbG1hcCwgYnVmLmJ1Zik7CisJCQltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAic3Rkb3V0Iik7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorCisJY2xlYXJfbWFpbG1hcCgmbWFpbG1hcCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NoZWNrLXJlZi1mb3JtYXQuYyBiL2J1aWx0aW4vY2hlY2stcmVmLWZvcm1hdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNjdkM2YKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NoZWNrLXJlZi1mb3JtYXQuYwpAQCAtMCwwICsxLDkxIEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9jaGVja19yZWZfZm9ybWF0X3VzYWdlW10gPQorImdpdCBjaGVjay1yZWYtZm9ybWF0IFstLW5vcm1hbGl6ZV0gWzxvcHRpb25zPl0gPHJlZm5hbWU+XG4iCisiICAgb3I6IGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIDxicmFuY2huYW1lLXNob3J0aGFuZD4iOworCisvKgorICogUmV0dXJuIGEgY29weSBvZiByZWZuYW1lIGJ1dCB3aXRoIGxlYWRpbmcgc2xhc2hlcyByZW1vdmVkIGFuZCBydW5zCisgKiBvZiBhZGphY2VudCBzbGFzaGVzIHJlcGxhY2VkIHdpdGggc2luZ2xlIHNsYXNoZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIG5vcm1hbGl6ZV9wYXRoX2NvcHkoKSwgYnV0IHN0cmlwcGVkIGRvd24KKyAqIHRvIG1lZXQgY2hlY2tfcmVmX2Zvcm1hdCdzIHNpbXBsZXIgbmVlZHMuCisgKi8KK3N0YXRpYyBjaGFyICpjb2xsYXBzZV9zbGFzaGVzKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJY2hhciAqcmV0ID0geG1hbGxvY3ooc3RybGVuKHJlZm5hbWUpKTsKKwljaGFyIGNoOworCWNoYXIgcHJldiA9ICcvJzsKKwljaGFyICpjcCA9IHJldDsKKworCXdoaWxlICgoY2ggPSAqcmVmbmFtZSsrKSAhPSAnXDAnKSB7CisJCWlmIChwcmV2ID09ICcvJyAmJiBjaCA9PSBwcmV2KQorCQkJY29udGludWU7CisKKwkJKmNwKysgPSBjaDsKKwkJcHJldiA9IGNoOworCX0KKwkqY3AgPSAnXDAnOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVmX2Zvcm1hdF9icmFuY2goY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBub25naXQ7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0KTsKKwlpZiAoc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoJnNiLCBhcmcpIHx8CisJICAgICFza2lwX3ByZWZpeChzYi5idWYsICJyZWZzL2hlYWRzLyIsICZuYW1lKSkKKwkJZGllKCInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lIiwgYXJnKTsKKwlwcmludGYoIiVzXG4iLCBuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiAwOworfQorCitpbnQgY21kX2NoZWNrX3JlZl9mb3JtYXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJaW50IG5vcm1hbGl6ZSA9IDA7CisJaW50IGZsYWdzID0gMDsKKwljb25zdCBjaGFyICpyZWZuYW1lOworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZShidWlsdGluX2NoZWNrX3JlZl9mb3JtYXRfdXNhZ2UpOworCisJaWYgKGFyZ2MgPT0gMyAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLWJyYW5jaCIpKQorCQlyZXR1cm4gY2hlY2tfcmVmX2Zvcm1hdF9icmFuY2goYXJndlsyXSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYyAmJiBhcmd2W2ldWzBdID09ICctJzsgaSsrKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLW5vcm1hbGl6ZSIpIHx8ICFzdHJjbXAoYXJndltpXSwgIi0tcHJpbnQiKSkKKwkJCW5vcm1hbGl6ZSA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tYWxsb3ctb25lbGV2ZWwiKSkKKwkJCWZsYWdzIHw9IFJFRk5BTUVfQUxMT1dfT05FTEVWRUw7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tbm8tYWxsb3ctb25lbGV2ZWwiKSkKKwkJCWZsYWdzICY9IH5SRUZOQU1FX0FMTE9XX09ORUxFVkVMOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLXJlZnNwZWMtcGF0dGVybiIpKQorCQkJZmxhZ3MgfD0gUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk47CisJCWVsc2UKKwkJCXVzYWdlKGJ1aWx0aW5fY2hlY2tfcmVmX2Zvcm1hdF91c2FnZSk7CisJfQorCWlmICghIChpID09IGFyZ2MgLSAxKSkKKwkJdXNhZ2UoYnVpbHRpbl9jaGVja19yZWZfZm9ybWF0X3VzYWdlKTsKKworCXJlZm5hbWUgPSBhcmd2W2ldOworCWlmIChub3JtYWxpemUpCisJCXJlZm5hbWUgPSBjb2xsYXBzZV9zbGFzaGVzKHJlZm5hbWUpOworCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChyZWZuYW1lLCBmbGFncykpCisJCXJldHVybiAxOworCWlmIChub3JtYWxpemUpCisJCXByaW50ZigiJXNcbiIsIHJlZm5hbWUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NoZWNrb3V0LWluZGV4LmMgYi9idWlsdGluL2NoZWNrb3V0LWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg1NGZkMQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY2hlY2tvdXQtaW5kZXguYwpAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIENoZWNrLW91dCBmaWxlcyBmcm9tIHRoZSAiY3VycmVudCBjYWNoZSBkaXJlY3RvcnkiCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IExpbnVzIFRvcnZhbGRzCisgKgorICovCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKKyNkZWZpbmUgQ0hFQ0tPVVRfQUxMIDQKK3N0YXRpYyBpbnQgbnVsX3Rlcm1fbGluZTsKK3N0YXRpYyBpbnQgY2hlY2tvdXRfc3RhZ2U7IC8qIGRlZmF1bHQgdG8gY2hlY2tvdXQgc3RhZ2UwICovCitzdGF0aWMgaW50IHRvX3RlbXBmaWxlOworc3RhdGljIGNoYXIgdG9wYXRoWzRdW1RFTVBPUkFSWV9GSUxFTkFNRV9MRU5HVEggKyAxXTsKKworc3RhdGljIHN0cnVjdCBjaGVja291dCBzdGF0ZSA9IENIRUNLT1VUX0lOSVQ7CisKK3N0YXRpYyB2b2lkIHdyaXRlX3RlbXBmaWxlX3JlY29yZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisKKwlpZiAoQ0hFQ0tPVVRfQUxMID09IGNoZWNrb3V0X3N0YWdlKSB7CisJCWZvciAoaSA9IDE7IGkgPCA0OyBpKyspIHsKKwkJCWlmIChpID4gMSkKKwkJCQlwdXRjaGFyKCcgJyk7CisJCQlpZiAodG9wYXRoW2ldWzBdKQorCQkJCWZwdXRzKHRvcGF0aFtpXSwgc3Rkb3V0KTsKKwkJCWVsc2UKKwkJCQlwdXRjaGFyKCcuJyk7CisJCX0KKwl9IGVsc2UKKwkJZnB1dHModG9wYXRoW2NoZWNrb3V0X3N0YWdlXSwgc3Rkb3V0KTsKKworCXB1dGNoYXIoJ1x0Jyk7CisJd3JpdGVfbmFtZV9xdW90ZWRfcmVsYXRpdmUobmFtZSwgcHJlZml4LCBzdGRvdXQsCisJCQkJICAgbnVsX3Rlcm1fbGluZSA/ICdcMCcgOiAnXG4nKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJdG9wYXRoW2ldWzBdID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfZmlsZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKG5hbWUsIG5hbWVsZW4pOworCWludCBoYXNfc2FtZV9uYW1lID0gMDsKKwlpbnQgZGlkX2NoZWNrb3V0ID0gMDsKKwlpbnQgZXJycyA9IDA7CisKKwlpZiAocG9zIDwgMCkKKwkJcG9zID0gLXBvcyAtIDE7CisKKwl3aGlsZSAocG9zIDwgYWN0aXZlX25yKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKGNlX25hbWVsZW4oY2UpICE9IG5hbWVsZW4gfHwKKwkJICAgIG1lbWNtcChjZS0+bmFtZSwgbmFtZSwgbmFtZWxlbikpCisJCQlicmVhazsKKwkJaGFzX3NhbWVfbmFtZSA9IDE7CisJCXBvcysrOworCQlpZiAoY2Vfc3RhZ2UoY2UpICE9IGNoZWNrb3V0X3N0YWdlCisJCSAgICAmJiAoQ0hFQ0tPVVRfQUxMICE9IGNoZWNrb3V0X3N0YWdlIHx8ICFjZV9zdGFnZShjZSkpKQorCQkJY29udGludWU7CisJCWRpZF9jaGVja291dCA9IDE7CisJCWlmIChjaGVja291dF9lbnRyeShjZSwgJnN0YXRlLAorCQkJCSAgIHRvX3RlbXBmaWxlID8gdG9wYXRoW2NlX3N0YWdlKGNlKV0gOiBOVUxMLAorCQkJCSAgIE5VTEwpIDwgMCkKKwkJCWVycnMrKzsKKwl9CisKKwlpZiAoZGlkX2NoZWNrb3V0KSB7CisJCWlmICh0b190ZW1wZmlsZSkKKwkJCXdyaXRlX3RlbXBmaWxlX3JlY29yZChuYW1lLCBwcmVmaXgpOworCQlyZXR1cm4gZXJycyA+IDAgPyAtMSA6IDA7CisJfQorCisJaWYgKCFzdGF0ZS5xdWlldCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImdpdCBjaGVja291dC1pbmRleDogJXMgIiwgbmFtZSk7CisJCWlmICghaGFzX3NhbWVfbmFtZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiaXMgbm90IGluIHRoZSBjYWNoZSIpOworCQllbHNlIGlmIChjaGVja291dF9zdGFnZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiZG9lcyBub3QgZXhpc3QgYXQgc3RhZ2UgJWQiLAorCQkJCWNoZWNrb3V0X3N0YWdlKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsICJpcyB1bm1lcmdlZCIpOworCQlmcHV0YygnXG4nLCBzdGRlcnIpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrb3V0X2FsbChjb25zdCBjaGFyICpwcmVmaXgsIGludCBwcmVmaXhfbGVuZ3RoKQoreworCWludCBpLCBlcnJzID0gMDsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmxhc3RfY2UgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9uciA7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQlpZiAoY2Vfc3RhZ2UoY2UpICE9IGNoZWNrb3V0X3N0YWdlCisJCSAgICAmJiAoQ0hFQ0tPVVRfQUxMICE9IGNoZWNrb3V0X3N0YWdlIHx8ICFjZV9zdGFnZShjZSkpKQorCQkJY29udGludWU7CisJCWlmIChwcmVmaXggJiYgKnByZWZpeCAmJgorCQkgICAgKGNlX25hbWVsZW4oY2UpIDw9IHByZWZpeF9sZW5ndGggfHwKKwkJICAgICBtZW1jbXAocHJlZml4LCBjZS0+bmFtZSwgcHJlZml4X2xlbmd0aCkpKQorCQkJY29udGludWU7CisJCWlmIChsYXN0X2NlICYmIHRvX3RlbXBmaWxlKSB7CisJCQlpZiAoY2VfbmFtZWxlbihsYXN0X2NlKSAhPSBjZV9uYW1lbGVuKGNlKQorCQkJICAgIHx8IG1lbWNtcChsYXN0X2NlLT5uYW1lLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpKQorCQkJCXdyaXRlX3RlbXBmaWxlX3JlY29yZChsYXN0X2NlLT5uYW1lLCBwcmVmaXgpOworCQl9CisJCWlmIChjaGVja291dF9lbnRyeShjZSwgJnN0YXRlLAorCQkJCSAgIHRvX3RlbXBmaWxlID8gdG9wYXRoW2NlX3N0YWdlKGNlKV0gOiBOVUxMLAorCQkJCSAgIE5VTEwpIDwgMCkKKwkJCWVycnMrKzsKKwkJbGFzdF9jZSA9IGNlOworCX0KKwlpZiAobGFzdF9jZSAmJiB0b190ZW1wZmlsZSkKKwkJd3JpdGVfdGVtcGZpbGVfcmVjb3JkKGxhc3RfY2UtPm5hbWUsIHByZWZpeCk7CisJaWYgKGVycnMpCisJCS8qIHdlIGhhdmUgYWxyZWFkeSBkb25lIG91ciBlcnJvciByZXBvcnRpbmcuCisJCSAqIGV4aXQgd2l0aCB0aGUgc2FtZSBjb2RlIGFzIGRpZSgpLgorCQkgKi8KKwkJZXhpdCgxMjgpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fY2hlY2tvdXRfaW5kZXhfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9zdGFnZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlpZiAoIXN0cmNtcChhcmcsICJhbGwiKSkgeworCQl0b190ZW1wZmlsZSA9IDE7CisJCWNoZWNrb3V0X3N0YWdlID0gQ0hFQ0tPVVRfQUxMOworCX0gZWxzZSB7CisJCWludCBjaCA9IGFyZ1swXTsKKwkJaWYgKCcxJyA8PSBjaCAmJiBjaCA8PSAnMycpCisJCQljaGVja291dF9zdGFnZSA9IGFyZ1swXSAtICcwJzsKKwkJZWxzZQorCQkJZGllKF8oInN0YWdlIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDMgb3IgYWxsIikpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9jaGVja291dF9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKwlpbnQgYWxsID0gMDsKKwlpbnQgcmVhZF9mcm9tX3N0ZGluID0gMDsKKwlpbnQgcHJlZml4X2xlbmd0aDsKKwlpbnQgZm9yY2UgPSAwLCBxdWlldCA9IDAsIG5vdF9uZXcgPSAwOworCWludCBpbmRleF9vcHQgPSAwOworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9jaGVja291dF9pbmRleF9vcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdhJywgImFsbCIsICZhbGwsCisJCQlOXygiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiKSksCisJCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIiksIDApLAorCQlPUFRfX1FVSUVUKCZxdWlldCwKKwkJCU5fKCJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IikpLAorCQlPUFRfQk9PTCgnbicsICJuby1jcmVhdGUiLCAmbm90X25ldywKKwkJCU5fKCJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiKSksCisJCU9QVF9CT09MKCd1JywgImluZGV4IiwgJmluZGV4X29wdCwKKwkJCSBOXygidXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGZpbGUiKSksCisJCU9QVF9CT09MKCd6JywgTlVMTCwgJm51bF90ZXJtX2xpbmUsCisJCQlOXygicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiKSksCisJCU9QVF9CT09MKDAsICJzdGRpbiIsICZyZWFkX2Zyb21fc3RkaW4sCisJCQlOXygicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IikpLAorCQlPUFRfQk9PTCgwLCAidGVtcCIsICZ0b190ZW1wZmlsZSwKKwkJCU5fKCJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiKSksCisJCU9QVF9TVFJJTkcoMCwgInByZWZpeCIsICZzdGF0ZS5iYXNlX2RpciwgTl8oInN0cmluZyIpLAorCQkJTl8oIndoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4iKSksCisJCU9QVF9DQUxMQkFDS19GKDAsICJzdGFnZSIsIE5VTEwsICIoMXwyfDN8YWxsKSIsCisJCQlOXygiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiKSwKKwkJCVBBUlNFX09QVF9OT05FRywgb3B0aW9uX3BhcnNlX3N0YWdlKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fY2hlY2tvdXRfaW5kZXhfdXNhZ2UsCisJCQkJICAgYnVpbHRpbl9jaGVja291dF9pbmRleF9vcHRpb25zKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJcHJlZml4X2xlbmd0aCA9IHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMDsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKSB7CisJCWRpZSgiaW52YWxpZCBjYWNoZSIpOworCX0KKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9jaGVja291dF9pbmRleF9vcHRpb25zLAorCQkJYnVpbHRpbl9jaGVja291dF9pbmRleF91c2FnZSwgMCk7CisJc3RhdGUuaXN0YXRlID0gJnRoZV9pbmRleDsKKwlzdGF0ZS5mb3JjZSA9IGZvcmNlOworCXN0YXRlLnF1aWV0ID0gcXVpZXQ7CisJc3RhdGUubm90X25ldyA9IG5vdF9uZXc7CisKKwlpZiAoIXN0YXRlLmJhc2VfZGlyKQorCQlzdGF0ZS5iYXNlX2RpciA9ICIiOworCXN0YXRlLmJhc2VfZGlyX2xlbiA9IHN0cmxlbihzdGF0ZS5iYXNlX2Rpcik7CisKKwkvKgorCSAqIHdoZW4gLS1wcmVmaXggaXMgc3BlY2lmaWVkIHdlIGRvIG5vdCB3YW50IHRvIHVwZGF0ZSBjYWNoZS4KKwkgKi8KKwlpZiAoaW5kZXhfb3B0ICYmICFzdGF0ZS5iYXNlX2Rpcl9sZW4gJiYgIXRvX3RlbXBmaWxlKSB7CisJCXN0YXRlLnJlZnJlc2hfY2FjaGUgPSAxOworCQlzdGF0ZS5pc3RhdGUgPSAmdGhlX2luZGV4OworCQlob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCBMT0NLX0RJRV9PTl9FUlJPUik7CisJfQorCisJLyogQ2hlY2sgb3V0IG5hbWVkIGZpbGVzIGZpcnN0ICovCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQljaGFyICpwOworCisJCWlmIChhbGwpCisJCQlkaWUoImdpdCBjaGVja291dC1pbmRleDogZG9uJ3QgbWl4ICctLWFsbCcgYW5kIGV4cGxpY2l0IGZpbGVuYW1lcyIpOworCQlpZiAocmVhZF9mcm9tX3N0ZGluKQorCQkJZGllKCJnaXQgY2hlY2tvdXQtaW5kZXg6IGRvbid0IG1peCAnLS1zdGRpbicgYW5kIGV4cGxpY2l0IGZpbGVuYW1lcyIpOworCQlwID0gcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXhfbGVuZ3RoLCBhcmcpOworCQljaGVja291dF9maWxlKHAsIHByZWZpeCk7CisJCWZyZWUocCk7CisJfQorCisJaWYgKHJlYWRfZnJvbV9zdGRpbikgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIHVucXVvdGVkID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9nZXRsaW5lX2ZuIGdldGxpbmVfZm47CisKKwkJaWYgKGFsbCkKKwkJCWRpZSgiZ2l0IGNoZWNrb3V0LWluZGV4OiBkb24ndCBtaXggJy0tYWxsJyBhbmQgJy0tc3RkaW4nIik7CisKKwkJZ2V0bGluZV9mbiA9IG51bF90ZXJtX2xpbmUgPyBzdHJidWZfZ2V0bGluZV9udWwgOiBzdHJidWZfZ2V0bGluZV9sZjsKKwkJd2hpbGUgKGdldGxpbmVfZm4oJmJ1Ziwgc3RkaW4pICE9IEVPRikgeworCQkJY2hhciAqcDsKKwkJCWlmICghbnVsX3Rlcm1fbGluZSAmJiBidWYuYnVmWzBdID09ICciJykgeworCQkJCXN0cmJ1Zl9yZXNldCgmdW5xdW90ZWQpOworCQkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnVucXVvdGVkLCBidWYuYnVmLCBOVUxMKSkKKwkJCQkJZGllKCJsaW5lIGlzIGJhZGx5IHF1b3RlZCIpOworCQkJCXN0cmJ1Zl9zd2FwKCZidWYsICZ1bnF1b3RlZCk7CisJCQl9CisJCQlwID0gcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXhfbGVuZ3RoLCBidWYuYnVmKTsKKwkJCWNoZWNrb3V0X2ZpbGUocCwgcHJlZml4KTsKKwkJCWZyZWUocCk7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJnVucXVvdGVkKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorCisJaWYgKGFsbCkKKwkJY2hlY2tvdXRfYWxsKHByZWZpeCwgcHJlZml4X2xlbmd0aCk7CisKKwlpZiAoaXNfbG9ja19maWxlX2xvY2tlZCgmbG9ja19maWxlKSAmJgorCSAgICB3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmxvY2tfZmlsZSwgQ09NTUlUX0xPQ0spKQorCQlkaWUoIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jaGVja291dC5jIGIvYnVpbHRpbi9jaGVja291dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZDExMWIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NoZWNrb3V0LmMKQEAgLTAsMCArMSwxODcyIEBACisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiYWR2aWNlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJjaGVja291dC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJsbC1tZXJnZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAibWVyZ2UtcmVjdXJzaXZlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJ3dC1zdGF0dXMuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjaGVja291dF91c2FnZVtdID0geworCU5fKCJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iKSwKKwlOXygiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIiksCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3dpdGNoX2JyYW5jaF91c2FnZVtdID0geworCU5fKCJnaXQgc3dpdGNoIFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0iKSwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZXN0b3JlX3VzYWdlW10gPSB7CisJTl8oImdpdCByZXN0b3JlIFs8b3B0aW9ucz5dIFstLXNvdXJjZT08YnJhbmNoPl0gPGZpbGU+Li4uIiksCisJTlVMTCwKK307CisKK3N0cnVjdCBjaGVja291dF9vcHRzIHsKKwlpbnQgcGF0Y2hfbW9kZTsKKwlpbnQgcXVpZXQ7CisJaW50IG1lcmdlOworCWludCBmb3JjZTsKKwlpbnQgZm9yY2VfZGV0YWNoOworCWludCBpbXBsaWNpdF9kZXRhY2g7CisJaW50IHdyaXRlb3V0X3N0YWdlOworCWludCBvdmVyd3JpdGVfaWdub3JlOworCWludCBpZ25vcmVfc2tpcHdvcmt0cmVlOworCWludCBpZ25vcmVfb3RoZXJfd29ya3RyZWVzOworCWludCBzaG93X3Byb2dyZXNzOworCWludCBjb3VudF9jaGVja291dF9wYXRoczsKKwlpbnQgb3ZlcmxheV9tb2RlOworCWludCBkd2ltX25ld19sb2NhbF9icmFuY2g7CisJaW50IGRpc2NhcmRfY2hhbmdlczsKKwlpbnQgYWNjZXB0X3JlZjsKKwlpbnQgYWNjZXB0X3BhdGhzcGVjOworCWludCBzd2l0Y2hfYnJhbmNoX2RvaW5nX25vdGhpbmdfaXNfb2s7CisJaW50IG9ubHlfbWVyZ2Vfb25fc3dpdGNoaW5nX2JyYW5jaGVzOworCWludCBjYW5fc3dpdGNoX3doZW5faW5fcHJvZ3Jlc3M7CisJaW50IG9ycGhhbl9mcm9tX2VtcHR5X3RyZWU7CisJaW50IGVtcHR5X3BhdGhzcGVjX29rOworCWludCBjaGVja291dF9pbmRleDsKKwlpbnQgY2hlY2tvdXRfd29ya3RyZWU7CisJY29uc3QgY2hhciAqaWdub3JlX3VubWVyZ2VkX29wdDsKKwlpbnQgaWdub3JlX3VubWVyZ2VkOworCWludCBwYXRoc3BlY19maWxlX251bDsKKwljb25zdCBjaGFyICpwYXRoc3BlY19mcm9tX2ZpbGU7CisKKwljb25zdCBjaGFyICpuZXdfYnJhbmNoOworCWNvbnN0IGNoYXIgKm5ld19icmFuY2hfZm9yY2U7CisJY29uc3QgY2hhciAqbmV3X29ycGhhbl9icmFuY2g7CisJaW50IG5ld19icmFuY2hfbG9nOworCWVudW0gYnJhbmNoX3RyYWNrIHRyYWNrOworCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZl9vcHRpb25zOworCWNoYXIgKmNvbmZsaWN0X3N0eWxlOworCisJaW50IGJyYW5jaF9leGlzdHM7CisJY29uc3QgY2hhciAqcHJlZml4OworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwljb25zdCBjaGFyICpmcm9tX3RyZWVpc2g7CisJc3RydWN0IHRyZWUgKnNvdXJjZV90cmVlOworfTsKKworc3RydWN0IGJyYW5jaF9pbmZvIHsKKwljb25zdCBjaGFyICpuYW1lOyAvKiBUaGUgc2hvcnQgbmFtZSB1c2VkICovCisJY29uc3QgY2hhciAqcGF0aDsgLyogVGhlIGZ1bGwgbmFtZSBvZiBhIHJlYWwgYnJhbmNoICovCisJc3RydWN0IGNvbW1pdCAqY29tbWl0OyAvKiBUaGUgbmFtZWQgY29tbWl0ICovCisJY2hhciAqcmVmbmFtZTsgLyogVGhlIGZ1bGwgbmFtZSBvZiB0aGUgcmVmIGJlaW5nIGNoZWNrZWQgb3V0LiAqLworCXN0cnVjdCBvYmplY3RfaWQgb2lkOyAvKiBUaGUgb2JqZWN0IElEIG9mIHRoZSBjb21taXQgYmVpbmcgY2hlY2tlZCBvdXQuICovCisJLyoKKwkgKiBpZiBub3QgbnVsbCB0aGUgYnJhbmNoIGlzIGRldGFjaGVkIGJlY2F1c2UgaXQncyBhbHJlYWR5CisJICogY2hlY2tlZCBvdXQgaW4gdGhpcyBjaGVja291dAorCSAqLworCWNoYXIgKmNoZWNrb3V0OworfTsKKworc3RhdGljIGludCBwb3N0X2NoZWNrb3V0X2hvb2soc3RydWN0IGNvbW1pdCAqb2xkX2NvbW1pdCwgc3RydWN0IGNvbW1pdCAqbmV3X2NvbW1pdCwKKwkJCSAgICAgIGludCBjaGFuZ2VkKQoreworCXJldHVybiBydW5faG9va19sZShOVUxMLCAicG9zdC1jaGVja291dCIsCisJCQkgICBvaWRfdG9faGV4KG9sZF9jb21taXQgPyAmb2xkX2NvbW1pdC0+b2JqZWN0Lm9pZCA6ICZudWxsX29pZCksCisJCQkgICBvaWRfdG9faGV4KG5ld19jb21taXQgPyAmbmV3X2NvbW1pdC0+b2JqZWN0Lm9pZCA6ICZudWxsX29pZCksCisJCQkgICBjaGFuZ2VkID8gIjEiIDogIjAiLCBOVUxMKTsKKwkvKiAibmV3X2NvbW1pdCIgY2FuIGJlIE5VTEwgd2hlbiBjaGVja2luZyBvdXQgZnJvbSB0aGUgaW5kZXggYmVmb3JlCisJICAgYSBjb21taXQgZXhpc3RzLiAqLworCit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX3NvbWUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3Qgc3RyYnVmICpiYXNlLAorCQljb25zdCBjaGFyICpwYXRobmFtZSwgdW5zaWduZWQgbW9kZSwgaW50IHN0YWdlLCB2b2lkICpjb250ZXh0KQoreworCWludCBsZW47CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwlpbnQgcG9zOworCisJaWYgKFNfSVNESVIobW9kZSkpCisJCXJldHVybiBSRUFEX1RSRUVfUkVDVVJTSVZFOworCisJbGVuID0gYmFzZS0+bGVuICsgc3RybGVuKHBhdGhuYW1lKTsKKwljZSA9IG1ha2VfZW1wdHlfY2FjaGVfZW50cnkoJnRoZV9pbmRleCwgbGVuKTsKKwlvaWRjcHkoJmNlLT5vaWQsIG9pZCk7CisJbWVtY3B5KGNlLT5uYW1lLCBiYXNlLT5idWYsIGJhc2UtPmxlbik7CisJbWVtY3B5KGNlLT5uYW1lICsgYmFzZS0+bGVuLCBwYXRobmFtZSwgbGVuIC0gYmFzZS0+bGVuKTsKKwljZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3MoMCkgfCBDRV9VUERBVEU7CisJY2UtPmNlX25hbWVsZW4gPSBsZW47CisJY2UtPmNlX21vZGUgPSBjcmVhdGVfY2VfbW9kZShtb2RlKTsKKworCS8qCisJICogSWYgdGhlIGVudHJ5IGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IGluZGV4LCB3ZSBjYW4gbGVhdmUgdGhlIG9sZAorCSAqIGVudHJ5IGluIHBsYWNlLiBXaGV0aGVyIGl0IGlzIFVQVE9EQVRFIG9yIG5vdCwgY2hlY2tvdXRfZW50cnkgd2lsbAorCSAqIGRvIHRoZSByaWdodCB0aGluZy4KKwkgKi8KKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhjZS0+bmFtZSwgY2UtPmNlX25hbWVsZW4pOworCWlmIChwb3MgPj0gMCkgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlpZiAoY2UtPmNlX21vZGUgPT0gb2xkLT5jZV9tb2RlICYmCisJCSAgICAhY2VfaW50ZW50X3RvX2FkZChvbGQpICYmCisJCSAgICBvaWRlcSgmY2UtPm9pZCwgJm9sZC0+b2lkKSkgeworCQkJb2xkLT5jZV9mbGFncyB8PSBDRV9VUERBVEU7CisJCQlkaXNjYXJkX2NhY2hlX2VudHJ5KGNlKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJYWRkX2NhY2hlX2VudHJ5KGNlLCBBRERfQ0FDSEVfT0tfVE9fQUREIHwgQUREX0NBQ0hFX09LX1RPX1JFUExBQ0UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfdHJlZV9zb21lKHN0cnVjdCB0cmVlICp0cmVlLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCXJlYWRfdHJlZV9yZWN1cnNpdmUodGhlX3JlcG9zaXRvcnksIHRyZWUsICIiLCAwLCAwLAorCQkJICAgIHBhdGhzcGVjLCB1cGRhdGVfc29tZSwgTlVMTCk7CisKKwkvKiB1cGRhdGUgdGhlIGluZGV4IHdpdGggdGhlIGdpdmVuIHRyZWUncyBpbmZvCisJICogZm9yIGFsbCBhcmdzLCBleHBhbmRpbmcgd2lsZGNhcmRzLCBhbmQgZXhpdAorCSAqIHdpdGggYW55IG5vbi16ZXJvIHJldHVybiBjb2RlLgorCSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNraXBfc2FtZV9uYW1lKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBwb3MpCit7CisJd2hpbGUgKCsrcG9zIDwgYWN0aXZlX25yICYmCisJICAgICAgICFzdHJjbXAoYWN0aXZlX2NhY2hlW3Bvc10tPm5hbWUsIGNlLT5uYW1lKSkKKwkJOyAvKiBza2lwICovCisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIGludCBjaGVja19zdGFnZShpbnQgc3RhZ2UsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBwb3MsCisJCSAgICAgICBpbnQgb3ZlcmxheV9tb2RlKQoreworCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIgJiYKKwkgICAgICAgIXN0cmNtcChhY3RpdmVfY2FjaGVbcG9zXS0+bmFtZSwgY2UtPm5hbWUpKSB7CisJCWlmIChjZV9zdGFnZShhY3RpdmVfY2FjaGVbcG9zXSkgPT0gc3RhZ2UpCisJCQlyZXR1cm4gMDsKKwkJcG9zKys7CisJfQorCWlmICghb3ZlcmxheV9tb2RlKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RhZ2UgPT0gMikKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIiksIGNlLT5uYW1lKTsKKwllbHNlCisJCXJldHVybiBlcnJvcihfKCJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIiksIGNlLT5uYW1lKTsKK30KKworc3RhdGljIGludCBjaGVja19zdGFnZXModW5zaWduZWQgc3RhZ2VzLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgcG9zKQoreworCXVuc2lnbmVkIHNlZW4gPSAwOworCWNvbnN0IGNoYXIgKm5hbWUgPSBjZS0+bmFtZTsKKworCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKHN0cmNtcChuYW1lLCBjZS0+bmFtZSkpCisJCQlicmVhazsKKwkJc2VlbiB8PSAoMSA8PCBjZV9zdGFnZShjZSkpOworCQlwb3MrKzsKKwl9CisJaWYgKChzdGFnZXMgJiBzZWVuKSAhPSBzdGFnZXMpCisJCXJldHVybiBlcnJvcihfKCJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIiksCisJCQkgICAgIG5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X3N0YWdlKGludCBzdGFnZSwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHBvcywKKwkJCSAgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgaW50ICpucl9jaGVja291dHMsCisJCQkgIGludCBvdmVybGF5X21vZGUpCit7CisJd2hpbGUgKHBvcyA8IGFjdGl2ZV9uciAmJgorCSAgICAgICAhc3RyY21wKGFjdGl2ZV9jYWNoZVtwb3NdLT5uYW1lLCBjZS0+bmFtZSkpIHsKKwkJaWYgKGNlX3N0YWdlKGFjdGl2ZV9jYWNoZVtwb3NdKSA9PSBzdGFnZSkKKwkJCXJldHVybiBjaGVja291dF9lbnRyeShhY3RpdmVfY2FjaGVbcG9zXSwgc3RhdGUsCisJCQkJCSAgICAgIE5VTEwsIG5yX2NoZWNrb3V0cyk7CisJCXBvcysrOworCX0KKwlpZiAoIW92ZXJsYXlfbW9kZSkgeworCQl1bmxpbmtfZW50cnkoY2UpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHN0YWdlID09IDIpCisJCXJldHVybiBlcnJvcihfKCJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIpLCBjZS0+bmFtZSk7CisJZWxzZQorCQlyZXR1cm4gZXJyb3IoXygicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlaXIgdmVyc2lvbiIpLCBjZS0+bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfbWVyZ2VkKGludCBwb3MsIGNvbnN0IHN0cnVjdCBjaGVja291dCAqc3RhdGUsIGludCAqbnJfY2hlY2tvdXRzKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwljb25zdCBjaGFyICpwYXRoID0gY2UtPm5hbWU7CisJbW1maWxlX3QgYW5jZXN0b3IsIG91cnMsIHRoZWlyczsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCW1tYnVmZmVyX3QgcmVzdWx0X2J1ZjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHRocmVld2F5WzNdOworCXVuc2lnbmVkIG1vZGUgPSAwOworCisJbWVtc2V0KHRocmVld2F5LCAwLCBzaXplb2YodGhyZWV3YXkpKTsKKwl3aGlsZSAocG9zIDwgYWN0aXZlX25yKSB7CisJCWludCBzdGFnZTsKKwkJc3RhZ2UgPSBjZV9zdGFnZShjZSk7CisJCWlmICghc3RhZ2UgfHwgc3RyY21wKHBhdGgsIGNlLT5uYW1lKSkKKwkJCWJyZWFrOworCQlvaWRjcHkoJnRocmVld2F5W3N0YWdlIC0gMV0sICZjZS0+b2lkKTsKKwkJaWYgKHN0YWdlID09IDIpCisJCQltb2RlID0gY3JlYXRlX2NlX21vZGUoY2UtPmNlX21vZGUpOworCQlwb3MrKzsKKwkJY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwl9CisJaWYgKGlzX251bGxfb2lkKCZ0aHJlZXdheVsxXSkgfHwgaXNfbnVsbF9vaWQoJnRocmVld2F5WzJdKSkKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG5lY2Vzc2FyeSB2ZXJzaW9ucyIpLCBwYXRoKTsKKworCXJlYWRfbW1ibG9iKCZhbmNlc3RvciwgJnRocmVld2F5WzBdKTsKKwlyZWFkX21tYmxvYigmb3VycywgJnRocmVld2F5WzFdKTsKKwlyZWFkX21tYmxvYigmdGhlaXJzLCAmdGhyZWV3YXlbMl0pOworCisJLyoKKwkgKiBORUVEU1dPUks6IHJlLWNyZWF0ZSBjb25mbGljdHMgZnJvbSBtZXJnZXMgd2l0aAorCSAqIG1lcmdlLnJlbm9ybWFsaXplIHNldCwgdG9vCisJICovCisJc3RhdHVzID0gbGxfbWVyZ2UoJnJlc3VsdF9idWYsIHBhdGgsICZhbmNlc3RvciwgImJhc2UiLAorCQkJICAmb3VycywgIm91cnMiLCAmdGhlaXJzLCAidGhlaXJzIiwKKwkJCSAgc3RhdGUtPmlzdGF0ZSwgTlVMTCk7CisJZnJlZShhbmNlc3Rvci5wdHIpOworCWZyZWUob3Vycy5wdHIpOworCWZyZWUodGhlaXJzLnB0cik7CisJaWYgKHN0YXR1cyA8IDAgfHwgIXJlc3VsdF9idWYucHRyKSB7CisJCWZyZWUocmVzdWx0X2J1Zi5wdHIpOworCQlyZXR1cm4gZXJyb3IoXygicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiKSwgcGF0aCk7CisJfQorCisJLyoKKwkgKiBORUVEU1dPUks6CisJICogVGhlcmUgaXMgYWJzb2x1dGVseSBubyByZWFzb24gdG8gd3JpdGUgdGhpcyBhcyBhIGJsb2Igb2JqZWN0CisJICogYW5kIGNyZWF0ZSBhIHBob255IGNhY2hlIGVudHJ5LiAgVGhpcyBoYWNrIGlzIHByaW1hcmlseSB0byBnZXQKKwkgKiB0byB0aGUgd3JpdGVfZW50cnkoKSBtYWNoaW5lcnkgdGhhdCBtYXNzYWdlcyB0aGUgY29udGVudHMgdG8KKwkgKiB3b3JrLXRyZWUgZm9ybWF0IGFuZCB3cml0ZXMgb3V0IHdoaWNoIG9ubHkgYWxsb3dzIGl0IGZvciBhCisJICogY2FjaGUgZW50cnkuICBUaGUgY29kZSBpbiB3cml0ZV9lbnRyeSgpIG5lZWRzIHRvIGJlIHJlZmFjdG9yZWQKKwkgKiB0byBhbGxvdyB1cyB0byBmZWVkIGEgPGJ1ZmZlciwgc2l6ZSwgbW9kZT4gaW5zdGVhZCBvZiBhIGNhY2hlCisJICogZW50cnkuICBTdWNoIGEgcmVmYWN0b3Jpbmcgd291bGQgaGVscCBtZXJnZV9yZWN1cnNpdmUgYXMgd2VsbAorCSAqIChpdCBhbHNvIHdyaXRlcyB0aGUgbWVyZ2UgcmVzdWx0IHRvIHRoZSBvYmplY3QgZGF0YWJhc2UgZXZlbgorCSAqIHdoZW4gaXQgbWF5IGNvbnRhaW4gY29uZmxpY3RzKS4KKwkgKi8KKwlpZiAod3JpdGVfb2JqZWN0X2ZpbGUocmVzdWx0X2J1Zi5wdHIsIHJlc3VsdF9idWYuc2l6ZSwgYmxvYl90eXBlLCAmb2lkKSkKKwkJZGllKF8oIlVuYWJsZSB0byBhZGQgbWVyZ2UgcmVzdWx0IGZvciAnJXMnIiksIHBhdGgpOworCWZyZWUocmVzdWx0X2J1Zi5wdHIpOworCWNlID0gbWFrZV90cmFuc2llbnRfY2FjaGVfZW50cnkobW9kZSwgJm9pZCwgcGF0aCwgMik7CisJaWYgKCFjZSkKKwkJZGllKF8oIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciKSwgcGF0aCk7CisJc3RhdHVzID0gY2hlY2tvdXRfZW50cnkoY2UsIHN0YXRlLCBOVUxMLCBucl9jaGVja291dHMpOworCWRpc2NhcmRfY2FjaGVfZW50cnkoY2UpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfY2VfZm9yX2NoZWNrb3V0X292ZXJsYXkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkJIGNoYXIgKnBzX21hdGNoZWQsCisJCQkJCSBjb25zdCBzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cykKK3sKKwljZS0+Y2VfZmxhZ3MgJj0gfkNFX01BVENIRUQ7CisJaWYgKCFvcHRzLT5pZ25vcmVfc2tpcHdvcmt0cmVlICYmIGNlX3NraXBfd29ya3RyZWUoY2UpKQorCQlyZXR1cm47CisJaWYgKG9wdHMtPnNvdXJjZV90cmVlICYmICEoY2UtPmNlX2ZsYWdzICYgQ0VfVVBEQVRFKSkKKwkJLyoKKwkJICogImdpdCBjaGVja291dCB0cmVlLWlzaCAtLSBwYXRoIiwgYnV0IHRoaXMgZW50cnkKKwkJICogaXMgaW4gdGhlIG9yaWdpbmFsIGluZGV4IGJ1dCBpcyBub3QgaW4gdHJlZS1pc2gKKwkJICogb3IgZG9lcyBub3QgbWF0Y2ggdGhlIHBhdGhzcGVjOyBpdCB3aWxsIG5vdCBiZQorCQkgKiBjaGVja2VkIG91dCB0byB0aGUgd29ya2luZyB0cmVlLiAgV2Ugd2lsbCBub3QgZG8KKwkJICogYW55dGhpbmcgdG8gdGhpcyBlbnRyeSBhdCBhbGwuCisJCSAqLworCQlyZXR1cm47CisJLyoKKwkgKiBFaXRoZXIgdGhpcyBlbnRyeSBjYW1lIGZyb20gdGhlIHRyZWUtaXNoIHdlIGFyZQorCSAqIGNoZWNraW5nIHRoZSBwYXRocyBvdXQgb2YsIG9yIHdlIGFyZSBjaGVja2luZyBvdXQKKwkgKiBvZiB0aGUgaW5kZXguCisJICoKKwkgKiBJZiBpdCBjb21lcyBmcm9tIHRoZSB0cmVlLWlzaCwgd2UgYWxyZWFkeSBrbm93IGl0CisJICogbWF0Y2hlcyB0aGUgcGF0aHNwZWMgYW5kIGNvdWxkIGp1c3Qgc3RhbXAKKwkgKiBDRV9NQVRDSEVEIHRvIGl0IGZyb20gdXBkYXRlX3NvbWUoKS4gQnV0IHdlIHN0aWxsCisJICogbmVlZCBwc19tYXRjaGVkIGFuZCByZWFkX3RyZWVfcmVjdXJzaXZlIChhbmQKKwkgKiBldmVudHVhbGx5IHRyZWVfZW50cnlfaW50ZXJlc3RpbmcpIGNhbm5vdCBmaWxsCisJICogcHNfbWF0Y2hlZCB5ZXQuIE9uY2UgaXQgY2FuLCB3ZSBjYW4gYXZvaWQgY2FsbGluZworCSAqIG1hdGNoX3BhdGhzcGVjKCkgZm9yIF9hbGxfIGVudHJpZXMgd2hlbgorCSAqIG9wdHMtPnNvdXJjZV90cmVlICE9IE5VTEwuCisJICovCisJaWYgKGNlX3BhdGhfbWF0Y2goJnRoZV9pbmRleCwgY2UsICZvcHRzLT5wYXRoc3BlYywgcHNfbWF0Y2hlZCkpCisJCWNlLT5jZV9mbGFncyB8PSBDRV9NQVRDSEVEOworfQorCitzdGF0aWMgdm9pZCBtYXJrX2NlX2Zvcl9jaGVja291dF9ub19vdmVybGF5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJCSAgICBjaGFyICpwc19tYXRjaGVkLAorCQkJCQkgICAgY29uc3Qgc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMpCit7CisJY2UtPmNlX2ZsYWdzICY9IH5DRV9NQVRDSEVEOworCWlmICghb3B0cy0+aWdub3JlX3NraXB3b3JrdHJlZSAmJiBjZV9za2lwX3dvcmt0cmVlKGNlKSkKKwkJcmV0dXJuOworCWlmIChjZV9wYXRoX21hdGNoKCZ0aGVfaW5kZXgsIGNlLCAmb3B0cy0+cGF0aHNwZWMsIHBzX21hdGNoZWQpKSB7CisJCWNlLT5jZV9mbGFncyB8PSBDRV9NQVRDSEVEOworCQlpZiAob3B0cy0+c291cmNlX3RyZWUgJiYgIShjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEUpKQorCQkJLyoKKwkJCSAqIEluIG92ZXJsYXkgbW9kZSwgYnV0IHRoZSBwYXRoIGlzIG5vdCBpbgorCQkJICogdHJlZS1pc2gsIHdoaWNoIG1lYW5zIHdlIHNob3VsZCByZW1vdmUgaXQKKwkJCSAqIGZyb20gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlLgorCQkJICovCisJCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfUkVNT1ZFIHwgQ0VfV1RfUkVNT1ZFOworCX0KK30KKworc3RhdGljIGludCBjaGVja291dF93b3JrdHJlZShjb25zdCBzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cywKKwkJCSAgICAgY29uc3Qgc3RydWN0IGJyYW5jaF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjaGVja291dCBzdGF0ZSA9IENIRUNLT1VUX0lOSVQ7CisJaW50IG5yX2NoZWNrb3V0cyA9IDAsIG5yX3VubWVyZ2VkID0gMDsKKwlpbnQgZXJycyA9IDA7CisJaW50IHBvczsKKworCXN0YXRlLmZvcmNlID0gMTsKKwlzdGF0ZS5yZWZyZXNoX2NhY2hlID0gMTsKKwlzdGF0ZS5pc3RhdGUgPSAmdGhlX2luZGV4OworCisJaW5pdF9jaGVja291dF9tZXRhZGF0YSgmc3RhdGUubWV0YSwgaW5mby0+cmVmbmFtZSwKKwkJCSAgICAgICBpbmZvLT5jb21taXQgPyAmaW5mby0+Y29tbWl0LT5vYmplY3Qub2lkIDogJmluZm8tPm9pZCwKKwkJCSAgICAgICBOVUxMKTsKKworCWVuYWJsZV9kZWxheWVkX2NoZWNrb3V0KCZzdGF0ZSk7CisJZm9yIChwb3MgPSAwOyBwb3MgPCBhY3RpdmVfbnI7IHBvcysrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKGNlLT5jZV9mbGFncyAmIENFX01BVENIRUQpIHsKKwkJCWlmICghY2Vfc3RhZ2UoY2UpKSB7CisJCQkJZXJycyB8PSBjaGVja291dF9lbnRyeShjZSwgJnN0YXRlLAorCQkJCQkJICAgICAgIE5VTEwsICZucl9jaGVja291dHMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKG9wdHMtPndyaXRlb3V0X3N0YWdlKQorCQkJCWVycnMgfD0gY2hlY2tvdXRfc3RhZ2Uob3B0cy0+d3JpdGVvdXRfc3RhZ2UsCisJCQkJCQkgICAgICAgY2UsIHBvcywKKwkJCQkJCSAgICAgICAmc3RhdGUsCisJCQkJCQkgICAgICAgJm5yX2NoZWNrb3V0cywgb3B0cy0+b3ZlcmxheV9tb2RlKTsKKwkJCWVsc2UgaWYgKG9wdHMtPm1lcmdlKQorCQkJCWVycnMgfD0gY2hlY2tvdXRfbWVyZ2VkKHBvcywgJnN0YXRlLAorCQkJCQkJCSZucl91bm1lcmdlZCk7CisJCQlwb3MgPSBza2lwX3NhbWVfbmFtZShjZSwgcG9zKSAtIDE7CisJCX0KKwl9CisJcmVtb3ZlX21hcmtlZF9jYWNoZV9lbnRyaWVzKCZ0aGVfaW5kZXgsIDEpOworCXJlbW92ZV9zY2hlZHVsZWRfZGlycygpOworCWVycnMgfD0gZmluaXNoX2RlbGF5ZWRfY2hlY2tvdXQoJnN0YXRlLCAmbnJfY2hlY2tvdXRzKTsKKworCWlmIChvcHRzLT5jb3VudF9jaGVja291dF9wYXRocykgeworCQlpZiAobnJfdW5tZXJnZWQpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgUV8oIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdCIsCisJCQkJCSAgICAgICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3RzIiwKKwkJCQkJICAgICAgbnJfdW5tZXJnZWQpLAorCQkJCSAgIG5yX3VubWVyZ2VkKTsKKwkJaWYgKG9wdHMtPnNvdXJjZV90cmVlKQorCQkJZnByaW50Zl9sbihzdGRlcnIsIFFfKCJVcGRhdGVkICVkIHBhdGggZnJvbSAlcyIsCisJCQkJCSAgICAgICJVcGRhdGVkICVkIHBhdGhzIGZyb20gJXMiLAorCQkJCQkgICAgICBucl9jaGVja291dHMpLAorCQkJCSAgIG5yX2NoZWNrb3V0cywKKwkJCQkgICBmaW5kX3VuaXF1ZV9hYmJyZXYoJm9wdHMtPnNvdXJjZV90cmVlLT5vYmplY3Qub2lkLAorCQkJCQkJICAgICAgREVGQVVMVF9BQkJSRVYpKTsKKwkJZWxzZSBpZiAoIW5yX3VubWVyZ2VkIHx8IG5yX2NoZWNrb3V0cykKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBRXygiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IiwKKwkJCQkJICAgICAgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSB0aGUgaW5kZXgiLAorCQkJCQkgICAgICBucl9jaGVja291dHMpLAorCQkJCSAgIG5yX2NoZWNrb3V0cyk7CisJfQorCisJcmV0dXJuIGVycnM7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfcGF0aHMoY29uc3Qgc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMsCisJCQkgIGNvbnN0IHN0cnVjdCBicmFuY2hfaW5mbyAqbmV3X2JyYW5jaF9pbmZvKQoreworCWludCBwb3M7CisJc3RhdGljIGNoYXIgKnBzX21hdGNoZWQ7CisJc3RydWN0IG9iamVjdF9pZCByZXY7CisJc3RydWN0IGNvbW1pdCAqaGVhZDsKKwlpbnQgZXJycyA9IDA7CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGUgPSBMT0NLX0lOSVQ7CisJaW50IGNoZWNrb3V0X2luZGV4OworCisJdHJhY2UyX2NtZF9tb2RlKG9wdHMtPnBhdGNoX21vZGUgPyAicGF0Y2giIDogInBhdGgiKTsKKworCWlmIChvcHRzLT50cmFjayAhPSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiKSwgIi0tdHJhY2siKTsKKworCWlmIChvcHRzLT5uZXdfYnJhbmNoX2xvZykKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIpLCAiLWwiKTsKKworCWlmIChvcHRzLT5pZ25vcmVfdW5tZXJnZWQgJiYgb3B0cy0+cGF0Y2hfbW9kZSkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIpLAorCQkgICAgb3B0cy0+aWdub3JlX3VubWVyZ2VkX29wdCk7CisKKwlpZiAob3B0cy0+Zm9yY2VfZGV0YWNoKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIiksICItLWRldGFjaCIpOworCisJaWYgKG9wdHMtPm1lcmdlICYmIG9wdHMtPnBhdGNoX21vZGUpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiKSwgIi0tbWVyZ2UiLCAiLS1wYXRjaCIpOworCisJaWYgKG9wdHMtPmlnbm9yZV91bm1lcmdlZCAmJiBvcHRzLT5tZXJnZSkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIpLAorCQkgICAgb3B0cy0+aWdub3JlX3VubWVyZ2VkX29wdCwgIi1tIik7CisKKwlpZiAob3B0cy0+bmV3X2JyYW5jaCkKKwkJZGllKF8oIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIpLAorCQkgICAgb3B0cy0+bmV3X2JyYW5jaCk7CisKKwlpZiAoIW9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlICYmICFvcHRzLT5jaGVja291dF9pbmRleCkKKwkJZGllKF8oIm5laXRoZXIgJyVzJyBvciAnJXMnIGlzIHNwZWNpZmllZCIpLAorCQkgICAgIi0tc3RhZ2VkIiwgIi0td29ya3RyZWUiKTsKKworCWlmICghb3B0cy0+Y2hlY2tvdXRfd29ya3RyZWUgJiYgIW9wdHMtPmZyb21fdHJlZWlzaCkKKwkJZGllKF8oIiclcycgbXVzdCBiZSB1c2VkIHdoZW4gJyVzJyBpcyBub3Qgc3BlY2lmaWVkIiksCisJCSAgICAiLS13b3JrdHJlZSIsICItLXNvdXJjZSIpOworCisJaWYgKG9wdHMtPmNoZWNrb3V0X2luZGV4ICYmICFvcHRzLT5jaGVja291dF93b3JrdHJlZSAmJgorCSAgICBvcHRzLT53cml0ZW91dF9zdGFnZSkKKwkJZGllKF8oIiclcycgb3IgJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIiksCisJCSAgICAiLS1vdXJzIiwgIi0tdGhlaXJzIiwgIi0tc3RhZ2VkIik7CisKKwlpZiAob3B0cy0+Y2hlY2tvdXRfaW5kZXggJiYgIW9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlICYmCisJICAgIG9wdHMtPm1lcmdlKQorCQlkaWUoXygiJyVzJyBvciAnJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiKSwKKwkJICAgICItLW1lcmdlIiwgIi0tY29uZmxpY3QiLCAiLS1zdGFnZWQiKTsKKworCWlmIChvcHRzLT5wYXRjaF9tb2RlKSB7CisJCWNvbnN0IGNoYXIgKnBhdGNoX21vZGU7CisKKwkJaWYgKG9wdHMtPmNoZWNrb3V0X2luZGV4ICYmIG9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlKQorCQkJcGF0Y2hfbW9kZSA9ICItLXBhdGNoPWNoZWNrb3V0IjsKKwkJZWxzZSBpZiAob3B0cy0+Y2hlY2tvdXRfaW5kZXggJiYgIW9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlKQorCQkJcGF0Y2hfbW9kZSA9ICItLXBhdGNoPXJlc2V0IjsKKwkJZWxzZSBpZiAoIW9wdHMtPmNoZWNrb3V0X2luZGV4ICYmIG9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlKQorCQkJcGF0Y2hfbW9kZSA9ICItLXBhdGNoPXdvcmt0cmVlIjsKKwkJZWxzZQorCQkJQlVHKCJlaXRoZXIgZmxhZyBtdXN0IGhhdmUgYmVlbiBzZXQsIHdvcmt0cmVlPSVkLCBpbmRleD0lZCIsCisJCQkgICAgb3B0cy0+Y2hlY2tvdXRfd29ya3RyZWUsIG9wdHMtPmNoZWNrb3V0X2luZGV4KTsKKwkJcmV0dXJuIHJ1bl9hZGRfaW50ZXJhY3RpdmUobmV3X2JyYW5jaF9pbmZvLT5uYW1lLCBwYXRjaF9tb2RlLCAmb3B0cy0+cGF0aHNwZWMpOworCX0KKworCXJlcG9faG9sZF9sb2NrZWRfaW5kZXgodGhlX3JlcG9zaXRvcnksICZsb2NrX2ZpbGUsIExPQ0tfRElFX09OX0VSUk9SKTsKKwlpZiAocmVhZF9jYWNoZV9wcmVsb2FkKCZvcHRzLT5wYXRoc3BlYykgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJaWYgKG9wdHMtPnNvdXJjZV90cmVlKQorCQlyZWFkX3RyZWVfc29tZShvcHRzLT5zb3VyY2VfdHJlZSwgJm9wdHMtPnBhdGhzcGVjKTsKKworCXBzX21hdGNoZWQgPSB4Y2FsbG9jKG9wdHMtPnBhdGhzcGVjLm5yLCAxKTsKKworCS8qCisJICogTWFrZSBzdXJlIGFsbCBwYXRoc3BlY3MgcGFydGljaXBhdGVkIGluIGxvY2F0aW5nIHRoZSBwYXRocworCSAqIHRvIGJlIGNoZWNrZWQgb3V0LgorCSAqLworCWZvciAocG9zID0gMDsgcG9zIDwgYWN0aXZlX25yOyBwb3MrKykKKwkJaWYgKG9wdHMtPm92ZXJsYXlfbW9kZSkKKwkJCW1hcmtfY2VfZm9yX2NoZWNrb3V0X292ZXJsYXkoYWN0aXZlX2NhY2hlW3Bvc10sCisJCQkJCQkgICAgIHBzX21hdGNoZWQsCisJCQkJCQkgICAgIG9wdHMpOworCQllbHNlCisJCQltYXJrX2NlX2Zvcl9jaGVja291dF9ub19vdmVybGF5KGFjdGl2ZV9jYWNoZVtwb3NdLAorCQkJCQkJCXBzX21hdGNoZWQsCisJCQkJCQkJb3B0cyk7CisKKwlpZiAocmVwb3J0X3BhdGhfZXJyb3IocHNfbWF0Y2hlZCwgJm9wdHMtPnBhdGhzcGVjKSkgeworCQlmcmVlKHBzX21hdGNoZWQpOworCQlyZXR1cm4gMTsKKwl9CisJZnJlZShwc19tYXRjaGVkKTsKKworCS8qICJjaGVja291dCAtbSBwYXRoIiB0byByZWNyZWF0ZSBjb25mbGljdGVkIHN0YXRlICovCisJaWYgKG9wdHMtPm1lcmdlKQorCQl1bm1lcmdlX21hcmtlZF9pbmRleCgmdGhlX2luZGV4KTsKKworCS8qIEFueSB1bm1lcmdlZCBwYXRocz8gKi8KKwlmb3IgKHBvcyA9IDA7IHBvcyA8IGFjdGl2ZV9ucjsgcG9zKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfTUFUQ0hFRCkgeworCQkJaWYgKCFjZV9zdGFnZShjZSkpCisJCQkJY29udGludWU7CisJCQlpZiAob3B0cy0+aWdub3JlX3VubWVyZ2VkKSB7CisJCQkJaWYgKCFvcHRzLT5xdWlldCkKKwkJCQkJd2FybmluZyhfKCJwYXRoICclcycgaXMgdW5tZXJnZWQiKSwgY2UtPm5hbWUpOworCQkJfSBlbHNlIGlmIChvcHRzLT53cml0ZW91dF9zdGFnZSkgeworCQkJCWVycnMgfD0gY2hlY2tfc3RhZ2Uob3B0cy0+d3JpdGVvdXRfc3RhZ2UsIGNlLCBwb3MsIG9wdHMtPm92ZXJsYXlfbW9kZSk7CisJCQl9IGVsc2UgaWYgKG9wdHMtPm1lcmdlKSB7CisJCQkJZXJycyB8PSBjaGVja19zdGFnZXMoKDE8PDIpIHwgKDE8PDMpLCBjZSwgcG9zKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJycyA9IDE7CisJCQkJZXJyb3IoXygicGF0aCAnJXMnIGlzIHVubWVyZ2VkIiksIGNlLT5uYW1lKTsKKwkJCX0KKwkJCXBvcyA9IHNraXBfc2FtZV9uYW1lKGNlLCBwb3MpIC0gMTsKKwkJfQorCX0KKwlpZiAoZXJycykKKwkJcmV0dXJuIDE7CisKKwkvKiBOb3cgd2UgYXJlIGNvbW1pdHRlZCB0byBjaGVjayB0aGVtIG91dCAqLworCWlmIChvcHRzLT5jaGVja291dF93b3JrdHJlZSkKKwkJZXJycyB8PSBjaGVja291dF93b3JrdHJlZShvcHRzLCBuZXdfYnJhbmNoX2luZm8pOworCWVsc2UKKwkJcmVtb3ZlX21hcmtlZF9jYWNoZV9lbnRyaWVzKCZ0aGVfaW5kZXgsIDEpOworCisJLyoKKwkgKiBBbGxvdyB1cGRhdGluZyB0aGUgaW5kZXggd2hlbiBjaGVja2luZyBvdXQgZnJvbSB0aGUgaW5kZXguCisJICogVGhpcyBpcyB0byBzYXZlIG5ldyBzdGF0IGluZm8uCisJICovCisJaWYgKG9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlICYmICFvcHRzLT5jaGVja291dF9pbmRleCAmJiAhb3B0cy0+c291cmNlX3RyZWUpCisJCWNoZWNrb3V0X2luZGV4ID0gMTsKKwllbHNlCisJCWNoZWNrb3V0X2luZGV4ID0gb3B0cy0+Y2hlY2tvdXRfaW5kZXg7CisKKwlpZiAoY2hlY2tvdXRfaW5kZXgpIHsKKwkJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIE5FRURTV09SSzogaWYgLS13b3JrdHJlZSBpcyBub3Qgc3BlY2lmaWVkLCB3ZQorCQkgKiBzaG91bGQgc2F2ZSBzdGF0IGluZm8gb2YgY2hlY2tlZCBvdXQgZmlsZXMgaW4gdGhlCisJCSAqIGluZGV4IHRvIGF2b2lkIHRoZSBuZXh0IChwb3RlbnRpYWxseSBjb3N0bHkpCisJCSAqIHJlZnJlc2guIEJ1dCBpdCdzIGEgYml0IHRyaWNrZXIgdG8gZG8uLi4KKwkJICovCisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9ja19maWxlKTsKKwl9CisKKwlyZWFkX3JlZl9mdWxsKCJIRUFEIiwgMCwgJnJldiwgTlVMTCk7CisJaGVhZCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseSh0aGVfcmVwb3NpdG9yeSwgJnJldiwgMSk7CisKKwllcnJzIHw9IHBvc3RfY2hlY2tvdXRfaG9vayhoZWFkLCBoZWFkLCAwKTsKKwlyZXR1cm4gZXJyczsKK30KKworc3RhdGljIHZvaWQgc2hvd19sb2NhbF9jaGFuZ2VzKHN0cnVjdCBvYmplY3QgKmhlYWQsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCS8qIEkgdGhpbmsgd2Ugd2FudCBmdWxsIHBhdGhzLCBldmVuIGlmIHdlJ3JlIGluIGEgc3ViZGlyZWN0b3J5LiAqLworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIE5VTEwpOworCXJldi5kaWZmb3B0LmZsYWdzID0gb3B0cy0+ZmxhZ3M7CisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUzsKKwlkaWZmX3NldHVwX2RvbmUoJnJldi5kaWZmb3B0KTsKKwlhZGRfcGVuZGluZ19vYmplY3QoJnJldiwgaGVhZCwgTlVMTCk7CisJcnVuX2RpZmZfaW5kZXgoJnJldiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc2NyaWJlX2RldGFjaGVkX2hlYWQoY29uc3QgY2hhciAqbXNnLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJaWYgKCFwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJcHBfY29tbWl0X2Vhc3koQ01JVF9GTVRfT05FTElORSwgY29tbWl0LCAmc2IpOworCWlmIChwcmludF9zaGExX2VsbGlwc2lzKCkpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyAlcy4uLiAlc1xuIiwgbXNnLAorCQkJZmluZF91bmlxdWVfYWJicmV2KCZjb21taXQtPm9iamVjdC5vaWQsIERFRkFVTFRfQUJCUkVWKSwgc2IuYnVmKTsKKwl9IGVsc2UgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzICVzICVzXG4iLCBtc2csCisJCQlmaW5kX3VuaXF1ZV9hYmJyZXYoJmNvbW1pdC0+b2JqZWN0Lm9pZCwgREVGQVVMVF9BQkJSRVYpLCBzYi5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgaW50IHJlc2V0X3RyZWUoc3RydWN0IHRyZWUgKnRyZWUsIGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvLAorCQkgICAgICBpbnQgd29ya3RyZWUsIGludCAqd3JpdGVvdXRfZXJyb3IsCisJCSAgICAgIHN0cnVjdCBicmFuY2hfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgb3B0czsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRyZWVfZGVzYzsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gLTE7CisJb3B0cy51cGRhdGUgPSB3b3JrdHJlZTsKKwlvcHRzLnNraXBfdW5tZXJnZWQgPSAhd29ya3RyZWU7CisJb3B0cy5yZXNldCA9IDE7CisJb3B0cy5tZXJnZSA9IDE7CisJb3B0cy5mbiA9IG9uZXdheV9tZXJnZTsKKwlvcHRzLnZlcmJvc2VfdXBkYXRlID0gby0+c2hvd19wcm9ncmVzczsKKwlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCWluaXRfY2hlY2tvdXRfbWV0YWRhdGEoJm9wdHMubWV0YSwgaW5mby0+cmVmbmFtZSwKKwkJCSAgICAgICBpbmZvLT5jb21taXQgPyAmaW5mby0+Y29tbWl0LT5vYmplY3Qub2lkIDoKKwkJCSAgICAgICBpc19udWxsX29pZCgmaW5mby0+b2lkKSA/ICZ0cmVlLT5vYmplY3Qub2lkIDoKKwkJCSAgICAgICAmaW5mby0+b2lkLAorCQkJICAgICAgIE5VTEwpOworCXBhcnNlX3RyZWUodHJlZSk7CisJaW5pdF90cmVlX2Rlc2MoJnRyZWVfZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwlzd2l0Y2ggKHVucGFja190cmVlcygxLCAmdHJlZV9kZXNjLCAmb3B0cykpIHsKKwljYXNlIC0yOgorCQkqd3JpdGVvdXRfZXJyb3IgPSAxOworCQkvKgorCQkgKiBXZSByZXR1cm4gMCBuZXZlcnRoZWxlc3MsIGFzIHRoZSBpbmRleCBpcyBhbGwgcmlnaHQKKwkJICogYW5kIG1vcmUgaW1wb3J0YW50bHkgd2UgaGF2ZSBtYWRlIGJlc3QgZWZmb3J0cyB0bworCQkgKiB1cGRhdGUgcGF0aHMgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHdlIGNhbm5vdCByZXZlcnQKKwkJICogdGhlbS4KKwkJICovCisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSAwOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTI4OworCX0KK30KKworc3RhdGljIHZvaWQgc2V0dXBfYnJhbmNoX3BhdGgoc3RydWN0IGJyYW5jaF9pbmZvICpicmFuY2gpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIHJlZiwgcmVzb2x2ZSBpdDsgb3RoZXJ3aXNlLCBsb29rIHVwIHRoZSBPSUQgZm9yIG91cgorCSAqIGV4cHJlc3Npb24uICBGYWlsdXJlIGhlcmUgaXMgb2theS4KKwkgKi8KKwlpZiAoIWR3aW1fcmVmKGJyYW5jaC0+bmFtZSwgc3RybGVuKGJyYW5jaC0+bmFtZSksICZicmFuY2gtPm9pZCwgJmJyYW5jaC0+cmVmbmFtZSkpCisJCXJlcG9fZ2V0X29pZF9jb21taXR0aXNoKHRoZV9yZXBvc2l0b3J5LCBicmFuY2gtPm5hbWUsICZicmFuY2gtPm9pZCk7CisKKwlzdHJidWZfYnJhbmNobmFtZSgmYnVmLCBicmFuY2gtPm5hbWUsIElOVEVSUFJFVF9CUkFOQ0hfTE9DQUwpOworCWlmIChzdHJjbXAoYnVmLmJ1ZiwgYnJhbmNoLT5uYW1lKSkKKwkJYnJhbmNoLT5uYW1lID0geHN0cmR1cChidWYuYnVmKTsKKwlzdHJidWZfc3BsaWNlKCZidWYsIDAsIDAsICJyZWZzL2hlYWRzLyIsIDExKTsKKwlicmFuY2gtPnBhdGggPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworfQorCitzdGF0aWMgaW50IG1lcmdlX3dvcmtpbmdfdHJlZShjb25zdCBzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cywKKwkJCSAgICAgIHN0cnVjdCBicmFuY2hfaW5mbyAqb2xkX2JyYW5jaF9pbmZvLAorCQkJICAgICAgc3RydWN0IGJyYW5jaF9pbmZvICpuZXdfYnJhbmNoX2luZm8sCisJCQkgICAgICBpbnQgKndyaXRlb3V0X2Vycm9yKQoreworCWludCByZXQ7CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGUgPSBMT0NLX0lOSVQ7CisJc3RydWN0IHRyZWUgKm5ld190cmVlOworCisJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgTE9DS19ESUVfT05fRVJST1IpOworCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQoTlVMTCkgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJcmVzb2x2ZV91bmRvX2NsZWFyKCk7CisJaWYgKG9wdHMtPm5ld19vcnBoYW5fYnJhbmNoICYmIG9wdHMtPm9ycGhhbl9mcm9tX2VtcHR5X3RyZWUpIHsKKwkJaWYgKG5ld19icmFuY2hfaW5mby0+Y29tbWl0KQorCQkJQlVHKCInc3dpdGNoIC0tb3JwaGFuJyBzaG91bGQgbmV2ZXIgYWNjZXB0IGEgY29tbWl0IGFzIHN0YXJ0aW5nIHBvaW50Iik7CisJCW5ld190cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdCh0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlKTsKKwl9IGVsc2UKKwkJbmV3X3RyZWUgPSBnZXRfY29tbWl0X3RyZWUobmV3X2JyYW5jaF9pbmZvLT5jb21taXQpOworCWlmIChvcHRzLT5kaXNjYXJkX2NoYW5nZXMpIHsKKwkJcmV0ID0gcmVzZXRfdHJlZShuZXdfdHJlZSwgb3B0cywgMSwgd3JpdGVvdXRfZXJyb3IsIG5ld19icmFuY2hfaW5mbyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCXN0cnVjdCB0cmVlX2Rlc2MgdHJlZXNbMl07CisJCXN0cnVjdCB0cmVlICp0cmVlOworCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgdG9wdHM7CisKKwkJbWVtc2V0KCZ0b3B0cywgMCwgc2l6ZW9mKHRvcHRzKSk7CisJCXRvcHRzLmhlYWRfaWR4ID0gLTE7CisJCXRvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJCXRvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisKKwkJc2V0dXBfdW5wYWNrX3RyZWVzX3BvcmNlbGFpbigmdG9wdHMsICJjaGVja291dCIpOworCisJCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVCk7CisKKwkJaWYgKHVubWVyZ2VkX2NhY2hlKCkpIHsKKwkJCWVycm9yKF8oInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IikpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKiAyLXdheSBtZXJnZSB0byB0aGUgbmV3IGJyYW5jaCAqLworCQl0b3B0cy5pbml0aWFsX2NoZWNrb3V0ID0gaXNfY2FjaGVfdW5ib3JuKCk7CisJCXRvcHRzLnVwZGF0ZSA9IDE7CisJCXRvcHRzLm1lcmdlID0gMTsKKwkJdG9wdHMucXVpZXQgPSBvcHRzLT5tZXJnZSAmJiBvbGRfYnJhbmNoX2luZm8tPmNvbW1pdDsKKwkJdG9wdHMudmVyYm9zZV91cGRhdGUgPSBvcHRzLT5zaG93X3Byb2dyZXNzOworCQl0b3B0cy5mbiA9IHR3b3dheV9tZXJnZTsKKwkJaW5pdF9jaGVja291dF9tZXRhZGF0YSgmdG9wdHMubWV0YSwgbmV3X2JyYW5jaF9pbmZvLT5yZWZuYW1lLAorCQkJCSAgICAgICBuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCA/CisJCQkJICAgICAgICZuZXdfYnJhbmNoX2luZm8tPmNvbW1pdC0+b2JqZWN0Lm9pZCA6CisJCQkJICAgICAgICZuZXdfYnJhbmNoX2luZm8tPm9pZCwgTlVMTCk7CisJCWlmIChvcHRzLT5vdmVyd3JpdGVfaWdub3JlKSB7CisJCQl0b3B0cy5kaXIgPSB4Y2FsbG9jKDEsIHNpemVvZigqdG9wdHMuZGlyKSk7CisJCQl0b3B0cy5kaXItPmZsYWdzIHw9IERJUl9TSE9XX0lHTk9SRUQ7CisJCQlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcyh0b3B0cy5kaXIpOworCQl9CisJCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KG9sZF9icmFuY2hfaW5mby0+Y29tbWl0ID8KKwkJCQkJICAgJm9sZF9icmFuY2hfaW5mby0+Y29tbWl0LT5vYmplY3Qub2lkIDoKKwkJCQkJICAgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSk7CisJCWluaXRfdHJlZV9kZXNjKCZ0cmVlc1swXSwgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwkJcGFyc2VfdHJlZShuZXdfdHJlZSk7CisJCXRyZWUgPSBuZXdfdHJlZTsKKwkJaW5pdF90cmVlX2Rlc2MoJnRyZWVzWzFdLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCisJCXJldCA9IHVucGFja190cmVlcygyLCB0cmVlcywgJnRvcHRzKTsKKwkJY2xlYXJfdW5wYWNrX3RyZWVzX3BvcmNlbGFpbigmdG9wdHMpOworCQlpZiAocmV0ID09IC0xKSB7CisJCQkvKgorCQkJICogVW5wYWNrIGNvdWxkbid0IGRvIGEgdHJpdmlhbCBtZXJnZTsgZWl0aGVyCisJCQkgKiBnaXZlIHVwIG9yIGRvIGEgcmVhbCBtZXJnZSwgZGVwZW5kaW5nIG9uCisJCQkgKiB3aGV0aGVyIHRoZSBtZXJnZSBmbGFnIHdhcyB1c2VkLgorCQkJICovCisJCQlzdHJ1Y3QgdHJlZSAqd29yazsKKwkJCXN0cnVjdCB0cmVlICpvbGRfdHJlZTsKKwkJCXN0cnVjdCBtZXJnZV9vcHRpb25zIG87CisJCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJ1Y3Qgc3RyYnVmIG9sZF9jb21taXRfc2hvcnRuYW1lID0gU1RSQlVGX0lOSVQ7CisKKwkJCWlmICghb3B0cy0+bWVyZ2UpCisJCQkJcmV0dXJuIDE7CisKKwkJCS8qCisJCQkgKiBXaXRob3V0IG9sZF9icmFuY2hfaW5mby0+Y29tbWl0LCB0aGUgYmVsb3cgaXMgdGhlIHNhbWUgYXMKKwkJCSAqIHRoZSB0d28tdHJlZSB1bnBhY2sgd2UgYWxyZWFkeSB0cmllZCBhbmQgZmFpbGVkLgorCQkJICovCisJCQlpZiAoIW9sZF9icmFuY2hfaW5mby0+Y29tbWl0KQorCQkJCXJldHVybiAxOworCQkJb2xkX3RyZWUgPSBnZXRfY29tbWl0X3RyZWUob2xkX2JyYW5jaF9pbmZvLT5jb21taXQpOworCisJCQlpZiAocmVwb19pbmRleF9oYXNfY2hhbmdlcyh0aGVfcmVwb3NpdG9yeSwgb2xkX3RyZWUsICZzYikpCisJCQkJZGllKF8oImNhbm5vdCBjb250aW51ZSB3aXRoIHN0YWdlZCBjaGFuZ2VzIGluICIKKwkJCQkgICAgICAidGhlIGZvbGxvd2luZyBmaWxlczpcbiVzIiksIHNiLmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJCQkvKiBEbyBtb3JlIHJlYWwgbWVyZ2UgKi8KKworCQkJLyoKKwkJCSAqIFdlIHVwZGF0ZSB0aGUgaW5kZXggZnVsbHksIHRoZW4gd3JpdGUgdGhlCisJCQkgKiB0cmVlIGZyb20gdGhlIGluZGV4LCB0aGVuIG1lcmdlIHRoZSBuZXcKKwkJCSAqIGJyYW5jaCB3aXRoIHRoZSBjdXJyZW50IHRyZWUsIHdpdGggdGhlIG9sZAorCQkJICogYnJhbmNoIGFzIHRoZSBiYXNlLiBUaGVuIHdlIHJlc2V0IHRoZSBpbmRleAorCQkJICogKGJ1dCBub3QgdGhlIHdvcmtpbmcgdHJlZSkgdG8gdGhlIG5ldworCQkJICogYnJhbmNoLCBsZWF2aW5nIHRoZSB3b3JraW5nIHRyZWUgYXMgdGhlCisJCQkgKiBtZXJnZWQgdmVyc2lvbiwgYnV0IHNraXBwaW5nIHVubWVyZ2VkCisJCQkgKiBlbnRyaWVzIGluIHRoZSBpbmRleC4KKwkJCSAqLworCisJCQlhZGRfZmlsZXNfdG9fY2FjaGUoTlVMTCwgTlVMTCwgMCk7CisJCQkvKgorCQkJICogTkVFRFNXT1JLOiBjYXJyeWluZyBvdmVyIGxvY2FsIGNoYW5nZXMKKwkJCSAqIHdoZW4gYnJhbmNoZXMgaGF2ZSBkaWZmZXJlbnQgZW5kLW9mLWxpbmUKKwkJCSAqIG5vcm1hbGl6YXRpb24gKG9yIGNsZWFuK3NtdWRnZSBydWxlcykgaXMKKwkJCSAqIGEgcGFpbjsgcGx1bWIgaW4gYW4gb3B0aW9uIHRvIHNldAorCQkJICogby5yZW5vcm1hbGl6ZT8KKwkJCSAqLworCQkJaW5pdF9tZXJnZV9vcHRpb25zKCZvLCB0aGVfcmVwb3NpdG9yeSk7CisJCQlvLnZlcmJvc2l0eSA9IDA7CisJCQl3b3JrID0gd3JpdGVfaW5fY29yZV9pbmRleF9hc190cmVlKHRoZV9yZXBvc2l0b3J5KTsKKworCQkJcmV0ID0gcmVzZXRfdHJlZShuZXdfdHJlZSwKKwkJCQkJIG9wdHMsIDEsCisJCQkJCSB3cml0ZW91dF9lcnJvciwgbmV3X2JyYW5jaF9pbmZvKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCW8uYW5jZXN0b3IgPSBvbGRfYnJhbmNoX2luZm8tPm5hbWU7CisJCQlpZiAob2xkX2JyYW5jaF9pbmZvLT5uYW1lID09IE5VTEwpIHsKKwkJCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJm9sZF9jb21taXRfc2hvcnRuYW1lLAorCQkJCQkJCSAmb2xkX2JyYW5jaF9pbmZvLT5jb21taXQtPm9iamVjdC5vaWQsCisJCQkJCQkJIERFRkFVTFRfQUJCUkVWKTsKKwkJCQlvLmFuY2VzdG9yID0gb2xkX2NvbW1pdF9zaG9ydG5hbWUuYnVmOworCQkJfQorCQkJby5icmFuY2gxID0gbmV3X2JyYW5jaF9pbmZvLT5uYW1lOworCQkJby5icmFuY2gyID0gImxvY2FsIjsKKwkJCXJldCA9IG1lcmdlX3RyZWVzKCZvLAorCQkJCQkgIG5ld190cmVlLAorCQkJCQkgIHdvcmssCisJCQkJCSAgb2xkX3RyZWUpOworCQkJaWYgKHJldCA8IDApCisJCQkJZXhpdCgxMjgpOworCQkJcmV0ID0gcmVzZXRfdHJlZShuZXdfdHJlZSwKKwkJCQkJIG9wdHMsIDAsCisJCQkJCSB3cml0ZW91dF9lcnJvciwgbmV3X2JyYW5jaF9pbmZvKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZvLm9idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJm9sZF9jb21taXRfc2hvcnRuYW1lKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWlmICghYWN0aXZlX2NhY2hlX3RyZWUpCisJCWFjdGl2ZV9jYWNoZV90cmVlID0gY2FjaGVfdHJlZSgpOworCisJaWYgKCFjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKGFjdGl2ZV9jYWNoZV90cmVlKSkKKwkJY2FjaGVfdHJlZV91cGRhdGUoJnRoZV9pbmRleCwgV1JJVEVfVFJFRV9TSUxFTlQgfCBXUklURV9UUkVFX1JFUEFJUik7CisKKwlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZsb2NrX2ZpbGUsIENPTU1JVF9MT0NLKSkKKwkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpKTsKKworCWlmICghb3B0cy0+ZGlzY2FyZF9jaGFuZ2VzICYmICFvcHRzLT5xdWlldCAmJiBuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCkKKwkJc2hvd19sb2NhbF9jaGFuZ2VzKCZuZXdfYnJhbmNoX2luZm8tPmNvbW1pdC0+b2JqZWN0LCAmb3B0cy0+ZGlmZl9vcHRpb25zKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZXBvcnRfdHJhY2tpbmcoc3RydWN0IGJyYW5jaF9pbmZvICpuZXdfYnJhbmNoX2luZm8pCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBicmFuY2ggKmJyYW5jaCA9IGJyYW5jaF9nZXQobmV3X2JyYW5jaF9pbmZvLT5uYW1lKTsKKworCWlmICghZm9ybWF0X3RyYWNraW5nX2luZm8oYnJhbmNoLCAmc2IsIEFIRUFEX0JFSElORF9GVUxMKSkKKwkJcmV0dXJuOworCWZwdXRzKHNiLmJ1Ziwgc3Rkb3V0KTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfcmVmc19mb3Jfc3dpdGNoKGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJCSAgIHN0cnVjdCBicmFuY2hfaW5mbyAqb2xkX2JyYW5jaF9pbmZvLAorCQkJCSAgIHN0cnVjdCBicmFuY2hfaW5mbyAqbmV3X2JyYW5jaF9pbmZvKQoreworCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqb2xkX2Rlc2MsICpyZWZsb2dfbXNnOworCWlmIChvcHRzLT5uZXdfYnJhbmNoKSB7CisJCWlmIChvcHRzLT5uZXdfb3JwaGFuX2JyYW5jaCkgeworCQkJY2hhciAqcmVmbmFtZTsKKworCQkJcmVmbmFtZSA9IG1rcGF0aGR1cCgicmVmcy9oZWFkcy8lcyIsIG9wdHMtPm5ld19vcnBoYW5fYnJhbmNoKTsKKwkJCWlmIChvcHRzLT5uZXdfYnJhbmNoX2xvZyAmJgorCQkJICAgICFzaG91bGRfYXV0b2NyZWF0ZV9yZWZsb2cocmVmbmFtZSkpIHsKKwkJCQlpbnQgcmV0OworCQkJCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisKKwkJCQlyZXQgPSBzYWZlX2NyZWF0ZV9yZWZsb2cocmVmbmFtZSwgMSwgJmVycik7CisJCQkJaWYgKHJldCkgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgXygiQ2FuIG5vdCBkbyByZWZsb2cgZm9yICclcyc6ICVzXG4iKSwKKwkJCQkJCW9wdHMtPm5ld19vcnBoYW5fYnJhbmNoLCBlcnIuYnVmKTsKKwkJCQkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCQkJCWZyZWUocmVmbmFtZSk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCQl9CisJCQlmcmVlKHJlZm5hbWUpOworCQl9CisJCWVsc2UKKwkJCWNyZWF0ZV9icmFuY2godGhlX3JlcG9zaXRvcnksCisJCQkJICAgICAgb3B0cy0+bmV3X2JyYW5jaCwgbmV3X2JyYW5jaF9pbmZvLT5uYW1lLAorCQkJCSAgICAgIG9wdHMtPm5ld19icmFuY2hfZm9yY2UgPyAxIDogMCwKKwkJCQkgICAgICBvcHRzLT5uZXdfYnJhbmNoX2ZvcmNlID8gMSA6IDAsCisJCQkJICAgICAgb3B0cy0+bmV3X2JyYW5jaF9sb2csCisJCQkJICAgICAgb3B0cy0+cXVpZXQsCisJCQkJICAgICAgb3B0cy0+dHJhY2spOworCQluZXdfYnJhbmNoX2luZm8tPm5hbWUgPSBvcHRzLT5uZXdfYnJhbmNoOworCQlzZXR1cF9icmFuY2hfcGF0aChuZXdfYnJhbmNoX2luZm8pOworCX0KKworCW9sZF9kZXNjID0gb2xkX2JyYW5jaF9pbmZvLT5uYW1lOworCWlmICghb2xkX2Rlc2MgJiYgb2xkX2JyYW5jaF9pbmZvLT5jb21taXQpCisJCW9sZF9kZXNjID0gb2lkX3RvX2hleCgmb2xkX2JyYW5jaF9pbmZvLT5jb21taXQtPm9iamVjdC5vaWQpOworCisJcmVmbG9nX21zZyA9IGdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKTsKKwlpZiAoIXJlZmxvZ19tc2cpCisJCXN0cmJ1Zl9hZGRmKCZtc2csICJjaGVja291dDogbW92aW5nIGZyb20gJXMgdG8gJXMiLAorCQkJb2xkX2Rlc2MgPyBvbGRfZGVzYyA6ICIoaW52YWxpZCkiLCBuZXdfYnJhbmNoX2luZm8tPm5hbWUpOworCWVsc2UKKwkJc3RyYnVmX2luc2VydHN0cigmbXNnLCAwLCByZWZsb2dfbXNnKTsKKworCWlmICghc3RyY21wKG5ld19icmFuY2hfaW5mby0+bmFtZSwgIkhFQUQiKSAmJiAhbmV3X2JyYW5jaF9pbmZvLT5wYXRoICYmICFvcHRzLT5mb3JjZV9kZXRhY2gpIHsKKwkJLyogTm90aGluZyB0byBkby4gKi8KKwl9IGVsc2UgaWYgKG9wdHMtPmZvcmNlX2RldGFjaCB8fCAhbmV3X2JyYW5jaF9pbmZvLT5wYXRoKSB7CS8qIE5vIGxvbmdlciBvbiBhbnkgYnJhbmNoLiAqLworCQl1cGRhdGVfcmVmKG1zZy5idWYsICJIRUFEIiwgJm5ld19icmFuY2hfaW5mby0+Y29tbWl0LT5vYmplY3Qub2lkLCBOVUxMLAorCQkJICAgUkVGX05PX0RFUkVGLCBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKwkJaWYgKCFvcHRzLT5xdWlldCkgeworCQkJaWYgKG9sZF9icmFuY2hfaW5mby0+cGF0aCAmJgorCQkJICAgIGFkdmljZV9kZXRhY2hlZF9oZWFkICYmICFvcHRzLT5mb3JjZV9kZXRhY2gpCisJCQkJZGV0YWNoX2FkdmljZShuZXdfYnJhbmNoX2luZm8tPm5hbWUpOworCQkJZGVzY3JpYmVfZGV0YWNoZWRfaGVhZChfKCJIRUFEIGlzIG5vdyBhdCIpLCBuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCk7CisJCX0KKwl9IGVsc2UgaWYgKG5ld19icmFuY2hfaW5mby0+cGF0aCkgewkvKiBTd2l0Y2ggYnJhbmNoZXMuICovCisJCWlmIChjcmVhdGVfc3ltcmVmKCJIRUFEIiwgbmV3X2JyYW5jaF9pbmZvLT5wYXRoLCBtc2cuYnVmKSA8IDApCisJCQlkaWUoXygidW5hYmxlIHRvIHVwZGF0ZSBIRUFEIikpOworCQlpZiAoIW9wdHMtPnF1aWV0KSB7CisJCQlpZiAob2xkX2JyYW5jaF9pbmZvLT5wYXRoICYmICFzdHJjbXAobmV3X2JyYW5jaF9pbmZvLT5wYXRoLCBvbGRfYnJhbmNoX2luZm8tPnBhdGgpKSB7CisJCQkJaWYgKG9wdHMtPm5ld19icmFuY2hfZm9yY2UpCisJCQkJCWZwcmludGYoc3RkZXJyLCBfKCJSZXNldCBicmFuY2ggJyVzJ1xuIiksCisJCQkJCQluZXdfYnJhbmNoX2luZm8tPm5hbWUpOworCQkJCWVsc2UKKwkJCQkJZnByaW50ZihzdGRlcnIsIF8oIkFscmVhZHkgb24gJyVzJ1xuIiksCisJCQkJCQluZXdfYnJhbmNoX2luZm8tPm5hbWUpOworCQkJfSBlbHNlIGlmIChvcHRzLT5uZXdfYnJhbmNoKSB7CisJCQkJaWYgKG9wdHMtPmJyYW5jaF9leGlzdHMpCisJCQkJCWZwcmludGYoc3RkZXJyLCBfKCJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIpLCBuZXdfYnJhbmNoX2luZm8tPm5hbWUpOworCQkJCWVsc2UKKwkJCQkJZnByaW50ZihzdGRlcnIsIF8oIlN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnJXMnXG4iKSwgbmV3X2JyYW5jaF9pbmZvLT5uYW1lKTsKKwkJCX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iKSwKKwkJCQkJbmV3X2JyYW5jaF9pbmZvLT5uYW1lKTsKKwkJCX0KKwkJfQorCQlpZiAob2xkX2JyYW5jaF9pbmZvLT5wYXRoICYmIG9sZF9icmFuY2hfaW5mby0+bmFtZSkgeworCQkJaWYgKCFyZWZfZXhpc3RzKG9sZF9icmFuY2hfaW5mby0+cGF0aCkgJiYgcmVmbG9nX2V4aXN0cyhvbGRfYnJhbmNoX2luZm8tPnBhdGgpKQorCQkJCWRlbGV0ZV9yZWZsb2cob2xkX2JyYW5jaF9pbmZvLT5wYXRoKTsKKwkJfQorCX0KKwlyZW1vdmVfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5LCAhb3B0cy0+cXVpZXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworCWlmICghb3B0cy0+cXVpZXQgJiYKKwkgICAgKG5ld19icmFuY2hfaW5mby0+cGF0aCB8fCAoIW9wdHMtPmZvcmNlX2RldGFjaCAmJiAhc3RyY21wKG5ld19icmFuY2hfaW5mby0+bmFtZSwgIkhFQUQiKSkpKQorCQlyZXBvcnRfdHJhY2tpbmcobmV3X2JyYW5jaF9pbmZvKTsKK30KKworc3RhdGljIGludCBhZGRfcGVuZGluZ191bmludGVyZXN0aW5nX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQkgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCWFkZF9wZW5kaW5nX29pZChjYl9kYXRhLCByZWZuYW1lLCBvaWQsIFVOSU5URVJFU1RJTkcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZXNjcmliZV9vbmVfb3JwaGFuKHN0cnVjdCBzdHJidWYgKnNiLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RyYnVmX2FkZHN0cihzYiwgIiAgIik7CisJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KHNiLCAmY29tbWl0LT5vYmplY3Qub2lkLCBERUZBVUxUX0FCQlJFVik7CisJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCWlmICghcGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCXBwX2NvbW1pdF9lYXN5KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgc2IpOworCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7Cit9CisKKyNkZWZpbmUgT1JQSEFOX0NVVE9GRiA0CitzdGF0aWMgdm9pZCBzdWdnZXN0X3JlYXR0YWNoKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBjb21taXQgKmMsICpsYXN0ID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IGxvc3QgPSAwOworCXdoaWxlICgoYyA9IGdldF9yZXZpc2lvbihyZXZzKSkgIT0gTlVMTCkgeworCQlpZiAobG9zdCA8IE9SUEhBTl9DVVRPRkYpCisJCQlkZXNjcmliZV9vbmVfb3JwaGFuKCZzYiwgYyk7CisJCWxhc3QgPSBjOworCQlsb3N0Kys7CisJfQorCWlmIChPUlBIQU5fQ1VUT0ZGIDwgbG9zdCkgeworCQlpbnQgbW9yZSA9IGxvc3QgLSBPUlBIQU5fQ1VUT0ZGOworCQlpZiAobW9yZSA9PSAxKQorCQkJZGVzY3JpYmVfb25lX29ycGhhbigmc2IsIGxhc3QpOworCQllbHNlCisJCQlzdHJidWZfYWRkZigmc2IsIF8oIiAuLi4gYW5kICVkIG1vcmUuXG4iKSwgbW9yZSk7CisJfQorCisJZnByaW50ZihzdGRlcnIsCisJCVFfKAorCQkvKiBUaGUgc2luZ3VsYXIgdmVyc2lvbiAqLworCQkiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsICIKKwkJIm5vdCBjb25uZWN0ZWQgdG9cbiIKKwkJImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuXG4iCisJCSIlc1xuIiwKKwkJLyogVGhlIHBsdXJhbCB2ZXJzaW9uICovCisJCSJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsICIKKwkJIm5vdCBjb25uZWN0ZWQgdG9cbiIKKwkJImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuXG4iCisJCSIlc1xuIiwKKwkJLyogR2l2ZSBuZ2V0dGV4dCgpIHRoZSBjb3VudCAqLworCQlsb3N0KSwKKwkJbG9zdCwKKwkJc2IuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJaWYgKGFkdmljZV9kZXRhY2hlZF9oZWFkKQorCQlmcHJpbnRmKHN0ZGVyciwKKwkJCVFfKAorCQkJLyogVGhlIHNpbmd1bGFyIHZlcnNpb24gKi8KKwkJCSJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgIgorCQkJInRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG50byBkbyBzbyB3aXRoOlxuXG4iCisJCQkiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcblxuIiwKKwkJCS8qIFRoZSBwbHVyYWwgdmVyc2lvbiAqLworCQkJIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsICIKKwkJCSJ0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxudG8gZG8gc28gd2l0aDpcblxuIgorCQkJIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG5cbiIsCisJCQkvKiBHaXZlIG5nZXR0ZXh0KCkgdGhlIGNvdW50ICovCisJCQlsb3N0KSwKKwkJCWZpbmRfdW5pcXVlX2FiYnJldigmY29tbWl0LT5vYmplY3Qub2lkLCBERUZBVUxUX0FCQlJFVikpOworfQorCisvKgorICogV2UgYXJlIGFib3V0IHRvIGxlYXZlIGNvbW1pdCB0aGF0IHdhcyBhdCB0aGUgdGlwIG9mIGEgZGV0YWNoZWQKKyAqIEhFQUQuICBJZiBpdCBpcyBub3QgcmVhY2hhYmxlIGZyb20gYW55IHJlZiwgdGhpcyBpcyB0aGUgbGFzdCBjaGFuY2UKKyAqIGZvciB0aGUgdXNlciB0byBkbyBzbyB3aXRob3V0IHJlc29ydGluZyB0byByZWZsb2cuCisgKi8KK3N0YXRpYyB2b2lkIG9ycGhhbmVkX2NvbW1pdF93YXJuaW5nKHN0cnVjdCBjb21taXQgKm9sZF9jb21taXQsIHN0cnVjdCBjb21taXQgKm5ld19jb21taXQpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gJm9sZF9jb21taXQtPm9iamVjdDsKKworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXZzLCBOVUxMKTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldnMsIE5VTEwpOworCisJb2JqZWN0LT5mbGFncyAmPSB+VU5JTlRFUkVTVElORzsKKwlhZGRfcGVuZGluZ19vYmplY3QoJnJldnMsIG9iamVjdCwgb2lkX3RvX2hleCgmb2JqZWN0LT5vaWQpKTsKKworCWZvcl9lYWNoX3JlZihhZGRfcGVuZGluZ191bmludGVyZXN0aW5nX3JlZiwgJnJldnMpOworCWlmIChuZXdfY29tbWl0KQorCQlhZGRfcGVuZGluZ19vaWQoJnJldnMsICJIRUFEIiwKKwkJCQkmbmV3X2NvbW1pdC0+b2JqZWN0Lm9pZCwKKwkJCQlVTklOVEVSRVNUSU5HKTsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQlkaWUoXygiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIpKTsKKwlpZiAoIShvbGRfY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJc3VnZ2VzdF9yZWF0dGFjaChvbGRfY29tbWl0LCAmcmV2cyk7CisJZWxzZQorCQlkZXNjcmliZV9kZXRhY2hlZF9oZWFkKF8oIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIiksIG9sZF9jb21taXQpOworCisJLyogQ2xlYW4gdXAgb2JqZWN0cyB1c2VkLCBhcyB0aGV5IHdpbGwgYmUgcmV1c2VkLiAqLworCWNsZWFyX2NvbW1pdF9tYXJrc19hbGwoQUxMX1JFVl9GTEFHUyk7Cit9CisKK3N0YXRpYyBpbnQgc3dpdGNoX2JyYW5jaGVzKGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJICAgc3RydWN0IGJyYW5jaF9pbmZvICpuZXdfYnJhbmNoX2luZm8pCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGJyYW5jaF9pbmZvIG9sZF9icmFuY2hfaW5mbzsKKwl2b2lkICpwYXRoX3RvX2ZyZWU7CisJc3RydWN0IG9iamVjdF9pZCByZXY7CisJaW50IGZsYWcsIHdyaXRlb3V0X2Vycm9yID0gMDsKKwlpbnQgZG9fbWVyZ2UgPSAxOworCisJdHJhY2UyX2NtZF9tb2RlKCJicmFuY2giKTsKKworCW1lbXNldCgmb2xkX2JyYW5jaF9pbmZvLCAwLCBzaXplb2Yob2xkX2JyYW5jaF9pbmZvKSk7CisJb2xkX2JyYW5jaF9pbmZvLnBhdGggPSBwYXRoX3RvX2ZyZWUgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIDAsICZyZXYsICZmbGFnKTsKKwlpZiAob2xkX2JyYW5jaF9pbmZvLnBhdGgpCisJCW9sZF9icmFuY2hfaW5mby5jb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksICZyZXYsIDEpOworCWlmICghKGZsYWcgJiBSRUZfSVNTWU1SRUYpKQorCQlvbGRfYnJhbmNoX2luZm8ucGF0aCA9IE5VTEw7CisKKwlpZiAob2xkX2JyYW5jaF9pbmZvLnBhdGgpCisJCXNraXBfcHJlZml4KG9sZF9icmFuY2hfaW5mby5wYXRoLCAicmVmcy9oZWFkcy8iLCAmb2xkX2JyYW5jaF9pbmZvLm5hbWUpOworCisJaWYgKG9wdHMtPm5ld19vcnBoYW5fYnJhbmNoICYmIG9wdHMtPm9ycGhhbl9mcm9tX2VtcHR5X3RyZWUpIHsKKwkJaWYgKG5ld19icmFuY2hfaW5mby0+bmFtZSkKKwkJCUJVRygiJ3N3aXRjaCAtLW9ycGhhbicgc2hvdWxkIG5ldmVyIGFjY2VwdCBhIGNvbW1pdCBhcyBzdGFydGluZyBwb2ludCIpOworCQluZXdfYnJhbmNoX2luZm8tPmNvbW1pdCA9IE5VTEw7CisJCW5ld19icmFuY2hfaW5mby0+bmFtZSA9ICIoZW1wdHkpIjsKKwkJZG9fbWVyZ2UgPSAxOworCX0KKworCWlmICghbmV3X2JyYW5jaF9pbmZvLT5uYW1lKSB7CisJCW5ld19icmFuY2hfaW5mby0+bmFtZSA9ICJIRUFEIjsKKwkJbmV3X2JyYW5jaF9pbmZvLT5jb21taXQgPSBvbGRfYnJhbmNoX2luZm8uY29tbWl0OworCQlpZiAoIW5ld19icmFuY2hfaW5mby0+Y29tbWl0KQorCQkJZGllKF8oIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iKSk7CisJCXBhcnNlX2NvbW1pdF9vcl9kaWUobmV3X2JyYW5jaF9pbmZvLT5jb21taXQpOworCisJCWlmIChvcHRzLT5vbmx5X21lcmdlX29uX3N3aXRjaGluZ19icmFuY2hlcykKKwkJCWRvX21lcmdlID0gMDsKKwl9CisKKwlpZiAoZG9fbWVyZ2UpIHsKKwkJcmV0ID0gbWVyZ2Vfd29ya2luZ190cmVlKG9wdHMsICZvbGRfYnJhbmNoX2luZm8sIG5ld19icmFuY2hfaW5mbywgJndyaXRlb3V0X2Vycm9yKTsKKwkJaWYgKHJldCkgeworCQkJZnJlZShwYXRoX3RvX2ZyZWUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWlmICghb3B0cy0+cXVpZXQgJiYgIW9sZF9icmFuY2hfaW5mby5wYXRoICYmIG9sZF9icmFuY2hfaW5mby5jb21taXQgJiYgbmV3X2JyYW5jaF9pbmZvLT5jb21taXQgIT0gb2xkX2JyYW5jaF9pbmZvLmNvbW1pdCkKKwkJb3JwaGFuZWRfY29tbWl0X3dhcm5pbmcob2xkX2JyYW5jaF9pbmZvLmNvbW1pdCwgbmV3X2JyYW5jaF9pbmZvLT5jb21taXQpOworCisJdXBkYXRlX3JlZnNfZm9yX3N3aXRjaChvcHRzLCAmb2xkX2JyYW5jaF9pbmZvLCBuZXdfYnJhbmNoX2luZm8pOworCisJcmV0ID0gcG9zdF9jaGVja291dF9ob29rKG9sZF9icmFuY2hfaW5mby5jb21taXQsIG5ld19icmFuY2hfaW5mby0+Y29tbWl0LCAxKTsKKwlmcmVlKHBhdGhfdG9fZnJlZSk7CisJcmV0dXJuIHJldCB8fCB3cml0ZW91dF9lcnJvcjsKK30KKworc3RhdGljIGludCBnaXRfY2hlY2tvdXRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImRpZmYuaWdub3Jlc3VibW9kdWxlcyIpKSB7CisJCXN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzID0gY2I7CisJCWhhbmRsZV9pZ25vcmVfc3VibW9kdWxlc19hcmcoJm9wdHMtPmRpZmZfb3B0aW9ucywgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAic3VibW9kdWxlLiIpKQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfc3VibW9kdWxlX2NvbmZpZyh2YXIsIHZhbHVlLCBOVUxMKTsKKworCXJldHVybiBnaXRfeG1lcmdlX2NvbmZpZyh2YXIsIHZhbHVlLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfbmV3X2JyYW5jaF9pbmZvX2FuZF9zb3VyY2VfdHJlZSgKKwlzdHJ1Y3QgYnJhbmNoX2luZm8gKm5ld19icmFuY2hfaW5mbywKKwlzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cywKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpyZXYsCisJY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdCB0cmVlICoqc291cmNlX3RyZWUgPSAmb3B0cy0+c291cmNlX3RyZWU7CisJc3RydWN0IG9iamVjdF9pZCBicmFuY2hfcmV2OworCisJbmV3X2JyYW5jaF9pbmZvLT5uYW1lID0gYXJnOworCXNldHVwX2JyYW5jaF9wYXRoKG5ld19icmFuY2hfaW5mbyk7CisKKwlpZiAoIWNoZWNrX3JlZm5hbWVfZm9ybWF0KG5ld19icmFuY2hfaW5mby0+cGF0aCwgMCkgJiYKKwkgICAgIXJlYWRfcmVmKG5ld19icmFuY2hfaW5mby0+cGF0aCwgJmJyYW5jaF9yZXYpKQorCQlvaWRjcHkocmV2LCAmYnJhbmNoX3Jldik7CisJZWxzZQorCQluZXdfYnJhbmNoX2luZm8tPnBhdGggPSBOVUxMOyAvKiBub3QgYW4gZXhpc3RpbmcgYnJhbmNoICovCisKKwluZXdfYnJhbmNoX2luZm8tPmNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseSh0aGVfcmVwb3NpdG9yeSwgcmV2LCAxKTsKKwlpZiAoIW5ld19icmFuY2hfaW5mby0+Y29tbWl0KSB7CisJCS8qIG5vdCBhIGNvbW1pdCAqLworCQkqc291cmNlX3RyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KHJldik7CisJfSBlbHNlIHsKKwkJcGFyc2VfY29tbWl0X29yX2RpZShuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCk7CisJCSpzb3VyY2VfdHJlZSA9IGdldF9jb21taXRfdHJlZShuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCk7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfcmVtb3RlX2JyYW5jaChjb25zdCBjaGFyICphcmcsCisJCQkJICAgICAgIHN0cnVjdCBvYmplY3RfaWQgKnJldiwKKwkJCQkgICAgICAgaW50IGNvdWxkX2JlX2NoZWNrb3V0X3BhdGhzKQoreworCWludCBudW1fbWF0Y2hlcyA9IDA7CisJY29uc3QgY2hhciAqcmVtb3RlID0gdW5pcXVlX3RyYWNraW5nX25hbWUoYXJnLCByZXYsICZudW1fbWF0Y2hlcyk7CisKKwlpZiAocmVtb3RlICYmIGNvdWxkX2JlX2NoZWNrb3V0X3BhdGhzKSB7CisJCWRpZShfKCInJXMnIGNvdWxkIGJlIGJvdGggYSBsb2NhbCBmaWxlIGFuZCBhIHRyYWNraW5nIGJyYW5jaC5cbiIKKwkJCSJQbGVhc2UgdXNlIC0tIChhbmQgb3B0aW9uYWxseSAtLW5vLWd1ZXNzKSB0byBkaXNhbWJpZ3VhdGUiKSwKKwkJICAgIGFyZyk7CisJfQorCisJaWYgKCFyZW1vdGUgJiYgbnVtX21hdGNoZXMgPiAxKSB7CisJICAgIGlmIChhZHZpY2VfY2hlY2tvdXRfYW1iaWd1b3VzX3JlbW90ZV9icmFuY2hfbmFtZSkgeworCQkgICAgYWR2aXNlKF8oIklmIHlvdSBtZWFudCB0byBjaGVjayBvdXQgYSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIG9uLCBlLmcuICdvcmlnaW4nLFxuIgorCQkJICAgICAieW91IGNhbiBkbyBzbyBieSBmdWxseSBxdWFsaWZ5aW5nIHRoZSBuYW1lIHdpdGggdGhlIC0tdHJhY2sgb3B0aW9uOlxuIgorCQkJICAgICAiXG4iCisJCQkgICAgICIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luLzxuYW1lPlxuIgorCQkJICAgICAiXG4iCisJCQkgICAgICJJZiB5b3UnZCBsaWtlIHRvIGFsd2F5cyBoYXZlIGNoZWNrb3V0cyBvZiBhbiBhbWJpZ3VvdXMgPG5hbWU+IHByZWZlclxuIgorCQkJICAgICAib25lIHJlbW90ZSwgZS5nLiB0aGUgJ29yaWdpbicgcmVtb3RlLCBjb25zaWRlciBzZXR0aW5nXG4iCisJCQkgICAgICJjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbiBpbiB5b3VyIGNvbmZpZy4iKSk7CisJICAgIH0KKworCSAgICBkaWUoXygiJyVzJyBtYXRjaGVkIG11bHRpcGxlICglZCkgcmVtb3RlIHRyYWNraW5nIGJyYW5jaGVzIiksCisJCWFyZywgbnVtX21hdGNoZXMpOworCX0KKworCXJldHVybiByZW1vdGU7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfYnJhbmNobmFtZV9hcmcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJCWludCBkd2ltX25ld19sb2NhbF9icmFuY2hfb2ssCisJCQkJc3RydWN0IGJyYW5jaF9pbmZvICpuZXdfYnJhbmNoX2luZm8sCisJCQkJc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMsCisJCQkJc3RydWN0IG9iamVjdF9pZCAqcmV2KQoreworCWNvbnN0IGNoYXIgKipuZXdfYnJhbmNoID0gJm9wdHMtPm5ld19icmFuY2g7CisJaW50IGFyZ2NvdW50ID0gMDsKKwljb25zdCBjaGFyICphcmc7CisJaW50IGRhc2hfZGFzaF9wb3M7CisJaW50IGhhc19kYXNoX2Rhc2ggPSAwOworCWludCBpOworCisJLyoKKwkgKiBjYXNlIDE6IGdpdCBjaGVja291dCA8cmVmPiAtLSBbPHBhdGhzPl0KKwkgKgorCSAqICAgPHJlZj4gbXVzdCBiZSBhIHZhbGlkIHRyZWUsIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlICctLScgbXVzdCBiZQorCSAqICAgYSBwYXRoLgorCSAqCisJICogY2FzZSAyOiBnaXQgY2hlY2tvdXQgLS0gWzxwYXRocz5dCisJICoKKwkgKiAgIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlICctLScgbXVzdCBiZSBwYXRocy4KKwkgKgorCSAqIGNhc2UgMzogZ2l0IGNoZWNrb3V0IDxzb21ldGhpbmc+IFstLV0KKwkgKgorCSAqICAgKGEpIElmIDxzb21ldGhpbmc+IGlzIGEgY29tbWl0LCB0aGF0IGlzIHRvCisJICogICAgICAgc3dpdGNoIHRvIHRoZSBicmFuY2ggb3IgZGV0YWNoIEhFQUQgYXQgaXQuICBBcyBhIHNwZWNpYWwgY2FzZSwKKwkgKiAgICAgICBpZiA8c29tZXRoaW5nPiBpcyBBLi4uQiAobWlzc2luZyBBIG9yIEIgbWVhbnMgSEVBRCBidXQgeW91IGNhbgorCSAqICAgICAgIG9taXQgYXQgbW9zdCBvbmUgc2lkZSksIGFuZCBpZiB0aGVyZSBpcyBhIHVuaXF1ZSBtZXJnZSBiYXNlCisJICogICAgICAgYmV0d2VlbiBBIGFuZCBCLCBBLi4uQiBuYW1lcyB0aGF0IG1lcmdlIGJhc2UuCisJICoKKwkgKiAgIChiKSBJZiA8c29tZXRoaW5nPiBpcyBfbm90XyBhIGNvbW1pdCwgZWl0aGVyICItLSIgaXMgcHJlc2VudAorCSAqICAgICAgIG9yIDxzb21ldGhpbmc+IGlzIG5vdCBhIHBhdGgsIG5vIC10IG9yIC1iIHdhcyBnaXZlbiwgYW5kCisJICogICAgICAgYW5kIHRoZXJlIGlzIGEgdHJhY2tpbmcgYnJhbmNoIHdob3NlIG5hbWUgaXMgPHNvbWV0aGluZz4KKwkgKiAgICAgICBpbiBvbmUgYW5kIG9ubHkgb25lIHJlbW90ZSAob3IgaWYgdGhlIGJyYW5jaCBleGlzdHMgb24gdGhlCisJICogICAgICAgcmVtb3RlIG5hbWVkIGluIGNoZWNrb3V0LmRlZmF1bHRSZW1vdGUpLCB0aGVuIHRoaXMgaXMgYQorCSAqICAgICAgIHNob3J0LWhhbmQgdG8gZm9yayBsb2NhbCA8c29tZXRoaW5nPiBmcm9tIHRoYXQKKwkgKiAgICAgICByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLgorCSAqCisJICogICAoYykgT3RoZXJ3aXNlLCBpZiAiLS0iIGlzIHByZXNlbnQsIHRyZWF0IGl0IGxpa2UgY2FzZSAoMSkuCisJICoKKwkgKiAgIChkKSBPdGhlcndpc2UgOgorCSAqICAgICAgIC0gaWYgaXQncyBhIHJlZmVyZW5jZSwgdHJlYXQgaXQgbGlrZSBjYXNlICgxKQorCSAqICAgICAgIC0gZWxzZSBpZiBpdCdzIGEgcGF0aCwgdHJlYXQgaXQgbGlrZSBjYXNlICgyKQorCSAqICAgICAgIC0gZWxzZTogZmFpbC4KKwkgKgorCSAqIGNhc2UgNDogZ2l0IGNoZWNrb3V0IDxzb21ldGhpbmc+IDxwYXRocz4KKwkgKgorCSAqICAgVGhlIGZpcnN0IGFyZ3VtZW50IG11c3Qgbm90IGJlIGFtYmlndW91cy4KKwkgKiAgIC0gSWYgaXQncyAqb25seSogYSByZWZlcmVuY2UsIHRyZWF0IGl0IGxpa2UgY2FzZSAoMSkuCisJICogICAtIElmIGl0J3Mgb25seSBhIHBhdGgsIHRyZWF0IGl0IGxpa2UgY2FzZSAoMikuCisJICogICAtIGVsc2U6IGZhaWwuCisJICoKKwkgKi8KKwlpZiAoIWFyZ2MpCisJCXJldHVybiAwOworCisJaWYgKCFvcHRzLT5hY2NlcHRfcGF0aHNwZWMpIHsKKwkJaWYgKGFyZ2MgPiAxKQorCQkJZGllKF8oIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCIpKTsKKwkJaGFzX2Rhc2hfZGFzaCA9IDE7IC8qIGhlbHBzIGRpc2FtYmlndWF0ZSAqLworCX0KKworCWFyZyA9IGFyZ3ZbMF07CisJZGFzaF9kYXNoX3BvcyA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKG9wdHMtPmFjY2VwdF9wYXRoc3BlYyAmJiAhc3RyY21wKGFyZ3ZbaV0sICItLSIpKSB7CisJCQlkYXNoX2Rhc2hfcG9zID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChkYXNoX2Rhc2hfcG9zID09IDApCisJCXJldHVybiAxOyAvKiBjYXNlICgyKSAqLworCWVsc2UgaWYgKGRhc2hfZGFzaF9wb3MgPT0gMSkKKwkJaGFzX2Rhc2hfZGFzaCA9IDE7IC8qIGNhc2UgKDMpIG9yICgxKSAqLworCWVsc2UgaWYgKGRhc2hfZGFzaF9wb3MgPj0gMikKKwkJZGllKF8oIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCwgJWQgZ2l2ZW4uIiksIGRhc2hfZGFzaF9wb3MpOworCW9wdHMtPmNvdW50X2NoZWNrb3V0X3BhdGhzID0gIW9wdHMtPnF1aWV0ICYmICFoYXNfZGFzaF9kYXNoOworCisJaWYgKCFzdHJjbXAoYXJnLCAiLSIpKQorCQlhcmcgPSAiQHstMX0iOworCisJaWYgKGdldF9vaWRfbWIoYXJnLCByZXYpKSB7CisJCS8qCisJCSAqIEVpdGhlciBjYXNlICgzKSBvciAoNCksIHdpdGggPHNvbWV0aGluZz4gbm90IGJlaW5nCisJCSAqIGEgY29tbWl0LCBvciBhbiBhdHRlbXB0IHRvIHVzZSBjYXNlICgxKSB3aXRoIGFuCisJCSAqIGludmFsaWQgcmVmLgorCQkgKgorCQkgKiBJdCdzIGxpa2VseSBhbiBlcnJvciwgYnV0IHdlIG5lZWQgdG8gZmluZCBvdXQgaWYKKwkJICogd2Ugc2hvdWxkIGF1dG8tY3JlYXRlIHRoZSBicmFuY2gsIGNhc2UgKDMpLihiKS4KKwkJICovCisJCWludCByZWNvdmVyX3dpdGhfZHdpbSA9IGR3aW1fbmV3X2xvY2FsX2JyYW5jaF9vazsKKworCQlpbnQgY291bGRfYmVfY2hlY2tvdXRfcGF0aHMgPSAhaGFzX2Rhc2hfZGFzaCAmJgorCQkJY2hlY2tfZmlsZW5hbWUob3B0cy0+cHJlZml4LCBhcmcpOworCisJCWlmICghaGFzX2Rhc2hfZGFzaCAmJiAhbm9fd2lsZGNhcmQoYXJnKSkKKwkJCXJlY292ZXJfd2l0aF9kd2ltID0gMDsKKworCQkvKgorCQkgKiBBY2NlcHQgImdpdCBjaGVja291dCBmb28iLCAiZ2l0IGNoZWNrb3V0IGZvbyAtLSIKKwkJICogYW5kICJnaXQgc3dpdGNoIGZvbyIgYXMgY2FuZGlkYXRlcyBmb3IgZHdpbS4KKwkJICovCisJCWlmICghKGFyZ2MgPT0gMSAmJiAhaGFzX2Rhc2hfZGFzaCkgJiYKKwkJICAgICEoYXJnYyA9PSAyICYmIGhhc19kYXNoX2Rhc2gpICYmCisJCSAgICBvcHRzLT5hY2NlcHRfcGF0aHNwZWMpCisJCQlyZWNvdmVyX3dpdGhfZHdpbSA9IDA7CisKKwkJaWYgKHJlY292ZXJfd2l0aF9kd2ltKSB7CisJCQljb25zdCBjaGFyICpyZW1vdGUgPSBwYXJzZV9yZW1vdGVfYnJhbmNoKGFyZywgcmV2LAorCQkJCQkJCQkgY291bGRfYmVfY2hlY2tvdXRfcGF0aHMpOworCQkJaWYgKHJlbW90ZSkgeworCQkJCSpuZXdfYnJhbmNoID0gYXJnOworCQkJCWFyZyA9IHJlbW90ZTsKKwkJCQkvKiBEV0lNbWVkIHRvIGNyZWF0ZSBsb2NhbCBicmFuY2gsIGNhc2UgKDMpLihiKSAqLworCQkJfSBlbHNlIHsKKwkJCQlyZWNvdmVyX3dpdGhfZHdpbSA9IDA7CisJCQl9CisJCX0KKworCQlpZiAoIXJlY292ZXJfd2l0aF9kd2ltKSB7CisJCQlpZiAoaGFzX2Rhc2hfZGFzaCkKKwkJCQlkaWUoXygiaW52YWxpZCByZWZlcmVuY2U6ICVzIiksIGFyZyk7CisJCQlyZXR1cm4gYXJnY291bnQ7CisJCX0KKwl9CisKKwkvKiB3ZSBjYW4ndCBlbmQgdXAgYmVpbmcgaW4gKDIpIGFueW1vcmUsIGVhdCB0aGUgYXJndW1lbnQgKi8KKwlhcmdjb3VudCsrOworCWFyZ3YrKzsKKwlhcmdjLS07CisKKwlzZXR1cF9uZXdfYnJhbmNoX2luZm9fYW5kX3NvdXJjZV90cmVlKG5ld19icmFuY2hfaW5mbywgb3B0cywgcmV2LCBhcmcpOworCisJaWYgKCFvcHRzLT5zb3VyY2VfdHJlZSkgICAgICAgICAgICAgICAgICAgLyogY2FzZSAoMSk6IHdhbnQgYSB0cmVlICovCisJCWRpZShfKCJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiKSwgYXJnKTsKKworCWlmICghaGFzX2Rhc2hfZGFzaCkgewkvKiBjYXNlICgzKS4oZCkgLT4gKDEpICovCisJCS8qCisJCSAqIERvIG5vdCBjb21wbGFpbiB0aGUgbW9zdCBjb21tb24gY2FzZQorCQkgKglnaXQgY2hlY2tvdXQgYnJhbmNoCisJCSAqIGV2ZW4gaWYgdGhlcmUgaGFwcGVuIHRvIGJlIGEgZmlsZSBjYWxsZWQgJ2JyYW5jaCc7CisJCSAqIGl0IHdvdWxkIGJlIGV4dHJlbWVseSBhbm5veWluZy4KKwkJICovCisJCWlmIChhcmdjKQorCQkJdmVyaWZ5X25vbl9maWxlbmFtZShvcHRzLT5wcmVmaXgsIGFyZyk7CisJfSBlbHNlIGlmIChvcHRzLT5hY2NlcHRfcGF0aHNwZWMpIHsKKwkJYXJnY291bnQrKzsKKwkJYXJndisrOworCQlhcmdjLS07CisJfQorCisJcmV0dXJuIGFyZ2NvdW50OworfQorCitzdGF0aWMgaW50IHN3aXRjaF91bmJvcm5fdG9fbmV3X2JyYW5jaChjb25zdCBzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cykKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBzdHJidWYgYnJhbmNoX3JlZiA9IFNUUkJVRl9JTklUOworCisJdHJhY2UyX2NtZF9tb2RlKCJ1bmJvcm4iKTsKKworCWlmICghb3B0cy0+bmV3X2JyYW5jaCkKKwkJZGllKF8oIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iKSk7CisJc3RyYnVmX2FkZGYoJmJyYW5jaF9yZWYsICJyZWZzL2hlYWRzLyVzIiwgb3B0cy0+bmV3X2JyYW5jaCk7CisJc3RhdHVzID0gY3JlYXRlX3N5bXJlZigiSEVBRCIsIGJyYW5jaF9yZWYuYnVmLCAiY2hlY2tvdXQgLWIiKTsKKwlzdHJidWZfcmVsZWFzZSgmYnJhbmNoX3JlZik7CisJaWYgKCFvcHRzLT5xdWlldCkKKwkJZnByaW50ZihzdGRlcnIsIF8oIlN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnJXMnXG4iKSwKKwkJCW9wdHMtPm5ld19icmFuY2gpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGRpZV9leHBlY3RpbmdfYV9icmFuY2goY29uc3Qgc3RydWN0IGJyYW5jaF9pbmZvICpicmFuY2hfaW5mbykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljaGFyICp0b19mcmVlOworCisJaWYgKGR3aW1fcmVmKGJyYW5jaF9pbmZvLT5uYW1lLCBzdHJsZW4oYnJhbmNoX2luZm8tPm5hbWUpLCAmb2lkLCAmdG9fZnJlZSkgPT0gMSkgeworCQljb25zdCBjaGFyICpyZWYgPSB0b19mcmVlOworCisJCWlmIChza2lwX3ByZWZpeChyZWYsICJyZWZzL3RhZ3MvIiwgJnJlZikpCisJCQlkaWUoXygiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCB0YWcgJyVzJyIpLCByZWYpOworCQlpZiAoc2tpcF9wcmVmaXgocmVmLCAicmVmcy9yZW1vdGVzLyIsICZyZWYpKQorCQkJZGllKF8oImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgcmVtb3RlIGJyYW5jaCAnJXMnIiksIHJlZik7CisJCWRpZShfKCJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290ICclcyciKSwgcmVmKTsKKwl9CisJaWYgKGJyYW5jaF9pbmZvLT5jb21taXQpCisJCWRpZShfKCJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IGNvbW1pdCAnJXMnIiksIGJyYW5jaF9pbmZvLT5uYW1lKTsKKwkvKgorCSAqIFRoaXMgY2FzZSBzaG91bGQgbmV2ZXIgaGFwcGVuIGJlY2F1c2Ugd2UgYWxyZWFkeSBkaWUoKSBvbgorCSAqIG5vbi1jb21taXQsIGJ1dCBqdXN0IGluIGNhc2UuCisJICovCisJZGllKF8oImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgJyVzJyIpLCBicmFuY2hfaW5mby0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZV9pZl9zb21lX29wZXJhdGlvbl9pbl9wcm9ncmVzcyh2b2lkKQoreworCXN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgc3RhdGU7CisKKwltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKTsKKwl3dF9zdGF0dXNfZ2V0X3N0YXRlKHRoZV9yZXBvc2l0b3J5LCAmc3RhdGUsIDApOworCisJaWYgKHN0YXRlLm1lcmdlX2luX3Byb2dyZXNzKQorCQlkaWUoXygiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgbWVyZ2luZ1xuIgorCQkgICAgICAiQ29uc2lkZXIgXCJnaXQgbWVyZ2UgLS1xdWl0XCIgIgorCQkgICAgICAib3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIikpOworCWlmIChzdGF0ZS5hbV9pbl9wcm9ncmVzcykKKwkJZGllKF8oImNhbm5vdCBzd2l0Y2ggYnJhbmNoIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvblxuIgorCQkgICAgICAiQ29uc2lkZXIgXCJnaXQgYW0gLS1xdWl0XCIgIgorCQkgICAgICAib3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIikpOworCWlmIChzdGF0ZS5yZWJhc2VfaW50ZXJhY3RpdmVfaW5fcHJvZ3Jlc3MgfHwgc3RhdGUucmViYXNlX2luX3Byb2dyZXNzKQorCQlkaWUoXygiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKwkJICAgICAgIkNvbnNpZGVyIFwiZ2l0IHJlYmFzZSAtLXF1aXRcIiAiCisJCSAgICAgICJvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iKSk7CisJaWYgKHN0YXRlLmNoZXJyeV9waWNrX2luX3Byb2dyZXNzKQorCQlkaWUoXygiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgY2hlcnJ5LXBpY2tpbmdcbiIKKwkJICAgICAgIkNvbnNpZGVyIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiICIKKwkJICAgICAgIm9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIpKTsKKwlpZiAoc3RhdGUucmV2ZXJ0X2luX3Byb2dyZXNzKQorCQlkaWUoXygiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmV2ZXJ0aW5nXG4iCisJCSAgICAgICJDb25zaWRlciBcImdpdCByZXZlcnQgLS1xdWl0XCIgIgorCQkgICAgICAib3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIikpOworCWlmIChzdGF0ZS5iaXNlY3RfaW5fcHJvZ3Jlc3MpCisJCXdhcm5pbmcoXygieW91IGFyZSBzd2l0Y2hpbmcgYnJhbmNoIHdoaWxlIGJpc2VjdGluZyIpKTsKK30KKworc3RhdGljIGludCBjaGVja291dF9icmFuY2goc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMsCisJCQkgICBzdHJ1Y3QgYnJhbmNoX2luZm8gKm5ld19icmFuY2hfaW5mbykKK3sKKwlpZiAob3B0cy0+cGF0aHNwZWMubnIpCisJCWRpZShfKCJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIpKTsKKworCWlmIChvcHRzLT5wYXRjaF9tb2RlKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIpLAorCQkgICAgIi0tcGF0Y2giKTsKKworCWlmIChvcHRzLT5vdmVybGF5X21vZGUgIT0gLTEpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIiksCisJCSAgICAiLS1bbm9dLW92ZXJsYXkiKTsKKworCWlmIChvcHRzLT53cml0ZW91dF9zdGFnZSkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiKSwKKwkJICAgICItLW91cnMvLS10aGVpcnMiKTsKKworCWlmIChvcHRzLT5mb3JjZSAmJiBvcHRzLT5tZXJnZSkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIiksICItZiIsICItbSIpOworCisJaWYgKG9wdHMtPmRpc2NhcmRfY2hhbmdlcyAmJiBvcHRzLT5tZXJnZSkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIiksICItLWRpc2NhcmQtY2hhbmdlcyIsICItLW1lcmdlIik7CisKKwlpZiAob3B0cy0+Zm9yY2VfZGV0YWNoICYmIG9wdHMtPm5ld19icmFuY2gpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIpLAorCQkgICAgIi0tZGV0YWNoIiwgIi1iLy1CLy0tb3JwaGFuIik7CisKKwlpZiAob3B0cy0+bmV3X29ycGhhbl9icmFuY2gpIHsKKwkJaWYgKG9wdHMtPnRyYWNrICE9IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCkKKwkJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIpLCAiLS1vcnBoYW4iLCAiLXQiKTsKKwkJaWYgKG9wdHMtPm9ycGhhbl9mcm9tX2VtcHR5X3RyZWUgJiYgbmV3X2JyYW5jaF9pbmZvLT5uYW1lKQorCQkJZGllKF8oIiclcycgY2Fubm90IHRha2UgPHN0YXJ0LXBvaW50PiIpLCAiLS1vcnBoYW4iKTsKKwl9IGVsc2UgaWYgKG9wdHMtPmZvcmNlX2RldGFjaCkgeworCQlpZiAob3B0cy0+dHJhY2sgIT0gQlJBTkNIX1RSQUNLX1VOU1BFQ0lGSUVEKQorCQkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIiksICItLWRldGFjaCIsICItdCIpOworCX0gZWxzZSBpZiAob3B0cy0+dHJhY2sgPT0gQlJBTkNIX1RSQUNLX1VOU1BFQ0lGSUVEKQorCQlvcHRzLT50cmFjayA9IGdpdF9icmFuY2hfdHJhY2s7CisKKwlpZiAobmV3X2JyYW5jaF9pbmZvLT5uYW1lICYmICFuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCkKKwkJZGllKF8oIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIiksCisJCSAgICBuZXdfYnJhbmNoX2luZm8tPm5hbWUpOworCisJaWYgKCFvcHRzLT5zd2l0Y2hfYnJhbmNoX2RvaW5nX25vdGhpbmdfaXNfb2sgJiYKKwkgICAgIW5ld19icmFuY2hfaW5mby0+bmFtZSAmJgorCSAgICAhb3B0cy0+bmV3X2JyYW5jaCAmJgorCSAgICAhb3B0cy0+Zm9yY2VfZGV0YWNoKQorCQlkaWUoXygibWlzc2luZyBicmFuY2ggb3IgY29tbWl0IGFyZ3VtZW50IikpOworCisJaWYgKCFvcHRzLT5pbXBsaWNpdF9kZXRhY2ggJiYKKwkgICAgIW9wdHMtPmZvcmNlX2RldGFjaCAmJgorCSAgICAhb3B0cy0+bmV3X2JyYW5jaCAmJgorCSAgICAhb3B0cy0+bmV3X2JyYW5jaF9mb3JjZSAmJgorCSAgICBuZXdfYnJhbmNoX2luZm8tPm5hbWUgJiYKKwkgICAgIW5ld19icmFuY2hfaW5mby0+cGF0aCkKKwkJZGllX2V4cGVjdGluZ19hX2JyYW5jaChuZXdfYnJhbmNoX2luZm8pOworCisJaWYgKCFvcHRzLT5jYW5fc3dpdGNoX3doZW5faW5fcHJvZ3Jlc3MpCisJCWRpZV9pZl9zb21lX29wZXJhdGlvbl9pbl9wcm9ncmVzcygpOworCisJaWYgKG5ld19icmFuY2hfaW5mby0+cGF0aCAmJiAhb3B0cy0+Zm9yY2VfZGV0YWNoICYmICFvcHRzLT5uZXdfYnJhbmNoICYmCisJICAgICFvcHRzLT5pZ25vcmVfb3RoZXJfd29ya3RyZWVzKSB7CisJCWludCBmbGFnOworCQljaGFyICpoZWFkX3JlZiA9IHJlc29sdmVfcmVmZHVwKCJIRUFEIiwgMCwgTlVMTCwgJmZsYWcpOworCQlpZiAoaGVhZF9yZWYgJiYKKwkJICAgICghKGZsYWcgJiBSRUZfSVNTWU1SRUYpIHx8IHN0cmNtcChoZWFkX3JlZiwgbmV3X2JyYW5jaF9pbmZvLT5wYXRoKSkpCisJCQlkaWVfaWZfY2hlY2tlZF9vdXQobmV3X2JyYW5jaF9pbmZvLT5wYXRoLCAxKTsKKwkJZnJlZShoZWFkX3JlZik7CisJfQorCisJaWYgKCFuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCAmJiBvcHRzLT5uZXdfYnJhbmNoKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgcmV2OworCQlpbnQgZmxhZzsKKworCQlpZiAoIXJlYWRfcmVmX2Z1bGwoIkhFQUQiLCAwLCAmcmV2LCAmZmxhZykgJiYKKwkJICAgIChmbGFnICYgUkVGX0lTU1lNUkVGKSAmJiBpc19udWxsX29pZCgmcmV2KSkKKwkJCXJldHVybiBzd2l0Y2hfdW5ib3JuX3RvX25ld19icmFuY2gob3B0cyk7CisJfQorCXJldHVybiBzd2l0Y2hfYnJhbmNoZXMob3B0cywgbmV3X2JyYW5jaF9pbmZvKTsKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gKmFkZF9jb21tb25fb3B0aW9ucyhzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cywKKwkJCQkJIHN0cnVjdCBvcHRpb24gKnByZXZvcHRzKQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX1FVSUVUKCZvcHRzLT5xdWlldCwgTl8oInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIpKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgInJlY3Vyc2Utc3VibW9kdWxlcyIsIE5VTEwsCisJCQkgICAgImNoZWNrb3V0IiwgImNvbnRyb2wgcmVjdXJzaXZlIHVwZGF0aW5nIG9mIHN1Ym1vZHVsZXMiLAorCQkJICAgIFBBUlNFX09QVF9PUFRBUkcsIG9wdGlvbl9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXNfd29ya3RyZWVfdXBkYXRlciksCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZvcHRzLT5zaG93X3Byb2dyZXNzLCBOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCQlPUFRfQk9PTCgnbScsICJtZXJnZSIsICZvcHRzLT5tZXJnZSwgTl8oInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIikpLAorCQlPUFRfU1RSSU5HKDAsICJjb25mbGljdCIsICZvcHRzLT5jb25mbGljdF9zdHlsZSwgTl8oInN0eWxlIiksCisJCQkgICBOXygiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlzdHJ1Y3Qgb3B0aW9uICpuZXdvcHRzID0gcGFyc2Vfb3B0aW9uc19jb25jYXQocHJldm9wdHMsIG9wdGlvbnMpOworCWZyZWUocHJldm9wdHMpOworCXJldHVybiBuZXdvcHRzOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiAqYWRkX2NvbW1vbl9zd2l0Y2hfYnJhbmNoX29wdGlvbnMoCisJc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMsIHN0cnVjdCBvcHRpb24gKnByZXZvcHRzKQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnZCcsICJkZXRhY2giLCAmb3B0cy0+Zm9yY2VfZGV0YWNoLCBOXygiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IikpLAorCQlPUFRfU0VUX0lOVCgndCcsICJ0cmFjayIsICAmb3B0cy0+dHJhY2ssIE5fKCJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIpLAorCQkJQlJBTkNIX1RSQUNLX0VYUExJQ0lUKSwKKwkJT1BUX19GT1JDRSgmb3B0cy0+Zm9yY2UsIE5fKCJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIpLAorCQkJICAgUEFSU0VfT1BUX05PQ09NUExFVEUpLAorCQlPUFRfU1RSSU5HKDAsICJvcnBoYW4iLCAmb3B0cy0+bmV3X29ycGhhbl9icmFuY2gsIE5fKCJuZXctYnJhbmNoIiksIE5fKCJuZXcgdW5wYXJlbnRlZCBicmFuY2giKSksCisJCU9QVF9CT09MX0YoMCwgIm92ZXJ3cml0ZS1pZ25vcmUiLCAmb3B0cy0+b3ZlcndyaXRlX2lnbm9yZSwKKwkJCSAgIE5fKCJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiKSwKKwkJCSAgIFBBUlNFX09QVF9OT0NPTVBMRVRFKSwKKwkJT1BUX0JPT0woMCwgImlnbm9yZS1vdGhlci13b3JrdHJlZXMiLCAmb3B0cy0+aWdub3JlX290aGVyX3dvcmt0cmVlcywKKwkJCSBOXygiZG8gbm90IGNoZWNrIGlmIGFub3RoZXIgd29ya3RyZWUgaXMgaG9sZGluZyB0aGUgZ2l2ZW4gcmVmIikpLAorCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCBvcHRpb24gKm5ld29wdHMgPSBwYXJzZV9vcHRpb25zX2NvbmNhdChwcmV2b3B0cywgb3B0aW9ucyk7CisJZnJlZShwcmV2b3B0cyk7CisJcmV0dXJuIG5ld29wdHM7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uICphZGRfY2hlY2tvdXRfcGF0aF9vcHRpb25zKHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJCQkJc3RydWN0IG9wdGlvbiAqcHJldm9wdHMpCit7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9TRVRfSU5UX0YoJzInLCAib3VycyIsICZvcHRzLT53cml0ZW91dF9zdGFnZSwKKwkJCSAgICAgIE5fKCJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiKSwKKwkJCSAgICAgIDIsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9TRVRfSU5UX0YoJzMnLCAidGhlaXJzIiwgJm9wdHMtPndyaXRlb3V0X3N0YWdlLAorCQkJICAgICAgTl8oImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIiksCisJCQkgICAgICAzLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfQk9PTCgncCcsICJwYXRjaCIsICZvcHRzLT5wYXRjaF9tb2RlLCBOXygic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiKSksCisJCU9QVF9CT09MKDAsICJpZ25vcmUtc2tpcC13b3JrdHJlZS1iaXRzIiwgJm9wdHMtPmlnbm9yZV9za2lwd29ya3RyZWUsCisJCQkgTl8oImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIpKSwKKwkJT1BUX1BBVEhTUEVDX0ZST01fRklMRSgmb3B0cy0+cGF0aHNwZWNfZnJvbV9maWxlKSwKKwkJT1BUX1BBVEhTUEVDX0ZJTEVfTlVMKCZvcHRzLT5wYXRoc3BlY19maWxlX251bCksCisJCU9QVF9FTkQoKQorCX07CisJc3RydWN0IG9wdGlvbiAqbmV3b3B0cyA9IHBhcnNlX29wdGlvbnNfY29uY2F0KHByZXZvcHRzLCBvcHRpb25zKTsKKwlmcmVlKHByZXZvcHRzKTsKKwlyZXR1cm4gbmV3b3B0czsKK30KKworLyogY3JlYXRlLWJyYW5jaCBvcHRpb24gKGVpdGhlciBiIG9yIGMpICovCitzdGF0aWMgY2hhciBjYl9vcHRpb24gPSAnYic7CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSBzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cywgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywKKwkJCSBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSkKK3sKKwlzdHJ1Y3QgYnJhbmNoX2luZm8gbmV3X2JyYW5jaF9pbmZvOworCWludCBwYXJzZW9wdF9mbGFncyA9IDA7CisKKwltZW1zZXQoJm5ld19icmFuY2hfaW5mbywgMCwgc2l6ZW9mKG5ld19icmFuY2hfaW5mbykpOworCW9wdHMtPm92ZXJ3cml0ZV9pZ25vcmUgPSAxOworCW9wdHMtPnByZWZpeCA9IHByZWZpeDsKKwlvcHRzLT5zaG93X3Byb2dyZXNzID0gLTE7CisKKwlnaXRfY29uZmlnKGdpdF9jaGVja291dF9jb25maWcsIG9wdHMpOworCisJb3B0cy0+dHJhY2sgPSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQ7CisKKwlpZiAoIW9wdHMtPmFjY2VwdF9wYXRoc3BlYyAmJiAhb3B0cy0+YWNjZXB0X3JlZikKKwkJQlVHKCJtYWtlIHVwIHlvdXIgbWluZCwgeW91IG5lZWQgdG8gdGFrZSBfc29tZXRoaW5nXyIpOworCWlmIChvcHRzLT5hY2NlcHRfcGF0aHNwZWMgJiYgb3B0cy0+YWNjZXB0X3JlZikKKwkJcGFyc2VvcHRfZmxhZ3MgPSBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSDsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgdXNhZ2VzdHIsIHBhcnNlb3B0X2ZsYWdzKTsKKworCWlmIChvcHRzLT5zaG93X3Byb2dyZXNzIDwgMCkgeworCQlpZiAob3B0cy0+cXVpZXQpCisJCQlvcHRzLT5zaG93X3Byb2dyZXNzID0gMDsKKwkJZWxzZQorCQkJb3B0cy0+c2hvd19wcm9ncmVzcyA9IGlzYXR0eSgyKTsKKwl9CisKKwlpZiAob3B0cy0+Y29uZmxpY3Rfc3R5bGUpIHsKKwkJb3B0cy0+bWVyZ2UgPSAxOyAvKiBpbXBsaWVkICovCisJCWdpdF94bWVyZ2VfY29uZmlnKCJtZXJnZS5jb25mbGljdHN0eWxlIiwgb3B0cy0+Y29uZmxpY3Rfc3R5bGUsIE5VTEwpOworCX0KKwlpZiAob3B0cy0+Zm9yY2UpIHsKKwkJb3B0cy0+ZGlzY2FyZF9jaGFuZ2VzID0gMTsKKwkJb3B0cy0+aWdub3JlX3VubWVyZ2VkX29wdCA9ICItLWZvcmNlIjsKKwkJb3B0cy0+aWdub3JlX3VubWVyZ2VkID0gMTsKKwl9CisKKwlpZiAoKCEhb3B0cy0+bmV3X2JyYW5jaCArICEhb3B0cy0+bmV3X2JyYW5jaF9mb3JjZSArICEhb3B0cy0+bmV3X29ycGhhbl9icmFuY2gpID4gMSkKKwkJZGllKF8oIi0lYywgLSVjIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIiksCisJCQkJY2Jfb3B0aW9uLCB0b3VwcGVyKGNiX29wdGlvbikpOworCisJaWYgKG9wdHMtPm92ZXJsYXlfbW9kZSA9PSAxICYmIG9wdHMtPnBhdGNoX21vZGUpCisJCWRpZShfKCItcCBhbmQgLS1vdmVybGF5IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKSk7CisKKwlpZiAob3B0cy0+Y2hlY2tvdXRfaW5kZXggPj0gMCB8fCBvcHRzLT5jaGVja291dF93b3JrdHJlZSA+PSAwKSB7CisJCWlmIChvcHRzLT5jaGVja291dF9pbmRleCA8IDApCisJCQlvcHRzLT5jaGVja291dF9pbmRleCA9IDA7CisJCWlmIChvcHRzLT5jaGVja291dF93b3JrdHJlZSA8IDApCisJCQlvcHRzLT5jaGVja291dF93b3JrdHJlZSA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKG9wdHMtPmNoZWNrb3V0X2luZGV4IDwgMCkKKwkJCW9wdHMtPmNoZWNrb3V0X2luZGV4ID0gLW9wdHMtPmNoZWNrb3V0X2luZGV4IC0gMTsKKwkJaWYgKG9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlIDwgMCkKKwkJCW9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlID0gLW9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlIC0gMTsKKwl9CisJaWYgKG9wdHMtPmNoZWNrb3V0X2luZGV4IDwgMCB8fCBvcHRzLT5jaGVja291dF93b3JrdHJlZSA8IDApCisJCUJVRygidGhlc2UgZmxhZ3Mgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBieSBub3ciKTsKKwkvKgorCSAqIGNvbnZlbmllbnQgc2hvcnRjdXQ6ICJnaXQgcmVzdG9yZSAtLXN0YWdlZCBbLS13b3JrdHJlZV0iIGVxdWFscworCSAqICJnaXQgcmVzdG9yZSAtLXN0YWdlZCBbLS13b3JrdHJlZV0gLS1zb3VyY2UgSEVBRCIKKwkgKi8KKwlpZiAoIW9wdHMtPmZyb21fdHJlZWlzaCAmJiBvcHRzLT5jaGVja291dF9pbmRleCkKKwkJb3B0cy0+ZnJvbV90cmVlaXNoID0gIkhFQUQiOworCisJLyoKKwkgKiBGcm9tIGhlcmUgb24sIG5ld19icmFuY2ggd2lsbCBjb250YWluIHRoZSBicmFuY2ggdG8gYmUgY2hlY2tlZCBvdXQsCisJICogYW5kIG5ld19icmFuY2hfZm9yY2UgYW5kIG5ld19vcnBoYW5fYnJhbmNoIHdpbGwgdGVsbCB1cyB3aGljaCBvbmUgb2YKKwkgKiAtYi8tQi8tYy8tQy8tLW9ycGhhbiBpcyBiZWluZyB1c2VkLgorCSAqLworCWlmIChvcHRzLT5uZXdfYnJhbmNoX2ZvcmNlKQorCQlvcHRzLT5uZXdfYnJhbmNoID0gb3B0cy0+bmV3X2JyYW5jaF9mb3JjZTsKKworCWlmIChvcHRzLT5uZXdfb3JwaGFuX2JyYW5jaCkKKwkJb3B0cy0+bmV3X2JyYW5jaCA9IG9wdHMtPm5ld19vcnBoYW5fYnJhbmNoOworCisJLyogLS10cmFjayB3aXRob3V0IC1jLy1DLy1iLy1CLy0tb3JwaGFuIHNob3VsZCBEV0lNICovCisJaWYgKG9wdHMtPnRyYWNrICE9IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCAmJiAhb3B0cy0+bmV3X2JyYW5jaCkgeworCQljb25zdCBjaGFyICphcmd2MCA9IGFyZ3ZbMF07CisJCWlmICghYXJnYyB8fCAhc3RyY21wKGFyZ3YwLCAiLS0iKSkKKwkJCWRpZShfKCItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiKSk7CisJCXNraXBfcHJlZml4KGFyZ3YwLCAicmVmcy8iLCAmYXJndjApOworCQlza2lwX3ByZWZpeChhcmd2MCwgInJlbW90ZXMvIiwgJmFyZ3YwKTsKKwkJYXJndjAgPSBzdHJjaHIoYXJndjAsICcvJyk7CisJCWlmICghYXJndjAgfHwgIWFyZ3YwWzFdKQorCQkJZGllKF8oIm1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtJWMiKSwgY2Jfb3B0aW9uKTsKKwkJb3B0cy0+bmV3X2JyYW5jaCA9IGFyZ3YwICsgMTsKKwl9CisKKwkvKgorCSAqIEV4dHJhY3QgYnJhbmNoIG5hbWUgZnJvbSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCBzbworCSAqIGFsbCB0aGF0IGlzIGxlZnQgaXMgcGF0aHNwZWNzLgorCSAqCisJICogSGFuZGxlCisJICoKKwkgKiAgMSkgZ2l0IGNoZWNrb3V0IDx0cmVlPiAtLSBbPHBhdGhzPl0KKwkgKiAgMikgZ2l0IGNoZWNrb3V0IC0tIFs8cGF0aHM+XQorCSAqICAzKSBnaXQgY2hlY2tvdXQgPHNvbWV0aGluZz4gWzxwYXRocz5dCisJICoKKwkgKiBpbmNsdWRpbmcgImxhc3QgYnJhbmNoIiBzeW50YXggYW5kIERXSU0tZXJ5IGZvciBuYW1lcyBvZgorCSAqIHJlbW90ZSBicmFuY2hlcywgZXJyb3Jpbmcgb3V0IGZvciBpbnZhbGlkIG9yIGFtYmlndW91cyBjYXNlcy4KKwkgKi8KKwlpZiAoYXJnYyAmJiBvcHRzLT5hY2NlcHRfcmVmKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgcmV2OworCQlpbnQgZHdpbV9vayA9CisJCQkhb3B0cy0+cGF0Y2hfbW9kZSAmJgorCQkJb3B0cy0+ZHdpbV9uZXdfbG9jYWxfYnJhbmNoICYmCisJCQlvcHRzLT50cmFjayA9PSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQgJiYKKwkJCSFvcHRzLT5uZXdfYnJhbmNoOworCQlpbnQgbiA9IHBhcnNlX2JyYW5jaG5hbWVfYXJnKGFyZ2MsIGFyZ3YsIGR3aW1fb2ssCisJCQkJCSAgICAgJm5ld19icmFuY2hfaW5mbywgb3B0cywgJnJldik7CisJCWFyZ3YgKz0gbjsKKwkJYXJnYyAtPSBuOworCX0gZWxzZSBpZiAoIW9wdHMtPmFjY2VwdF9yZWYgJiYgb3B0cy0+ZnJvbV90cmVlaXNoKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgcmV2OworCisJCWlmIChnZXRfb2lkX21iKG9wdHMtPmZyb21fdHJlZWlzaCwgJnJldikpCisJCQlkaWUoXygiY291bGQgbm90IHJlc29sdmUgJXMiKSwgb3B0cy0+ZnJvbV90cmVlaXNoKTsKKworCQlzZXR1cF9uZXdfYnJhbmNoX2luZm9fYW5kX3NvdXJjZV90cmVlKCZuZXdfYnJhbmNoX2luZm8sCisJCQkJCQkgICAgICBvcHRzLCAmcmV2LAorCQkJCQkJICAgICAgb3B0cy0+ZnJvbV90cmVlaXNoKTsKKworCQlpZiAoIW9wdHMtPnNvdXJjZV90cmVlKQorCQkJZGllKF8oInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIpLCBvcHRzLT5mcm9tX3RyZWVpc2gpOworCX0KKworCWlmIChhcmdjKSB7CisJCXBhcnNlX3BhdGhzcGVjKCZvcHRzLT5wYXRoc3BlYywgMCwKKwkJCSAgICAgICBvcHRzLT5wYXRjaF9tb2RlID8gUEFUSFNQRUNfUFJFRklYX09SSUdJTiA6IDAsCisJCQkgICAgICAgcHJlZml4LCBhcmd2KTsKKworCQlpZiAoIW9wdHMtPnBhdGhzcGVjLm5yKQorCQkJZGllKF8oImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIikpOworCisJCS8qCisJCSAqIFRyeSB0byBnaXZlIG1vcmUgaGVscGZ1bCBzdWdnZXN0aW9uLgorCQkgKiBuZXdfYnJhbmNoICYmIGFyZ2MgPiAxIHdpbGwgYmUgY2F1Z2h0IGxhdGVyLgorCQkgKi8KKwkJaWYgKG9wdHMtPm5ld19icmFuY2ggJiYgYXJnYyA9PSAxKQorCQkJZGllKF8oIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiKSwKKwkJCQlhcmd2WzBdLCBvcHRzLT5uZXdfYnJhbmNoKTsKKworCQlpZiAob3B0cy0+Zm9yY2VfZGV0YWNoKQorCQkJZGllKF8oImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIpLAorCQkJICAgIGFyZ3ZbMF0pOworCX0KKworCWlmIChvcHRzLT5wYXRoc3BlY19mcm9tX2ZpbGUpIHsKKwkJaWYgKG9wdHMtPnBhdGhzcGVjLm5yKQorCQkJZGllKF8oIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIpKTsKKworCQlpZiAob3B0cy0+Zm9yY2VfZGV0YWNoKQorCQkJZGllKF8oIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZGV0YWNoIikpOworCisJCWlmIChvcHRzLT5wYXRjaF9tb2RlKQorCQkJZGllKF8oIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giKSk7CisKKwkJcGFyc2VfcGF0aHNwZWNfZmlsZSgmb3B0cy0+cGF0aHNwZWMsIDAsCisJCQkJICAgIDAsCisJCQkJICAgIHByZWZpeCwgb3B0cy0+cGF0aHNwZWNfZnJvbV9maWxlLCBvcHRzLT5wYXRoc3BlY19maWxlX251bCk7CisJfSBlbHNlIGlmIChvcHRzLT5wYXRoc3BlY19maWxlX251bCkgeworCQlkaWUoXygiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIpKTsKKwl9CisKKwlpZiAob3B0cy0+cGF0aHNwZWMubnIpIHsKKwkJaWYgKDEgPCAhIW9wdHMtPndyaXRlb3V0X3N0YWdlICsgISFvcHRzLT5mb3JjZSArICEhb3B0cy0+bWVyZ2UpCisJCQlkaWUoXygiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisJCQkgICAgICAiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iKSk7CisJfSBlbHNlIHsKKwkJaWYgKG9wdHMtPmFjY2VwdF9wYXRoc3BlYyAmJiAhb3B0cy0+ZW1wdHlfcGF0aHNwZWNfb2sgJiYKKwkJICAgICFvcHRzLT5wYXRjaF9tb2RlKQkvKiBwYXRjaCBtb2RlIGlzIHNwZWNpYWwgKi8KKwkJCWRpZShfKCJ5b3UgbXVzdCBzcGVjaWZ5IHBhdGgocykgdG8gcmVzdG9yZSIpKTsKKwl9CisKKwlpZiAob3B0cy0+bmV3X2JyYW5jaCkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCWlmIChvcHRzLT5uZXdfYnJhbmNoX2ZvcmNlKQorCQkJb3B0cy0+YnJhbmNoX2V4aXN0cyA9IHZhbGlkYXRlX2JyYW5jaG5hbWUob3B0cy0+bmV3X2JyYW5jaCwgJmJ1Zik7CisJCWVsc2UKKwkJCW9wdHMtPmJyYW5jaF9leGlzdHMgPQorCQkJCXZhbGlkYXRlX25ld19icmFuY2huYW1lKG9wdHMtPm5ld19icmFuY2gsICZidWYsIDApOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9CisKKwlVTkxFQUsob3B0cyk7CisJaWYgKG9wdHMtPnBhdGNoX21vZGUgfHwgb3B0cy0+cGF0aHNwZWMubnIpCisJCXJldHVybiBjaGVja291dF9wYXRocyhvcHRzLCAmbmV3X2JyYW5jaF9pbmZvKTsKKwllbHNlCisJCXJldHVybiBjaGVja291dF9icmFuY2gob3B0cywgJm5ld19icmFuY2hfaW5mbyk7Cit9CisKK2ludCBjbWRfY2hlY2tvdXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNoZWNrb3V0X29wdHMgb3B0czsKKwlzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zOworCXN0cnVjdCBvcHRpb24gY2hlY2tvdXRfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKCdiJywgTlVMTCwgJm9wdHMubmV3X2JyYW5jaCwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIikpLAorCQlPUFRfU1RSSU5HKCdCJywgTlVMTCwgJm9wdHMubmV3X2JyYW5jaF9mb3JjZSwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZS9yZXNldCBhbmQgY2hlY2tvdXQgYSBicmFuY2giKSksCisJCU9QVF9CT09MKCdsJywgTlVMTCwgJm9wdHMubmV3X2JyYW5jaF9sb2csIE5fKCJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIikpLAorCQlPUFRfQk9PTCgwLCAiZ3Vlc3MiLCAmb3B0cy5kd2ltX25ld19sb2NhbF9icmFuY2gsCisJCQkgTl8oInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIChkZWZhdWx0KSIpKSwKKwkJT1BUX0JPT0woMCwgIm92ZXJsYXkiLCAmb3B0cy5vdmVybGF5X21vZGUsIE5fKCJ1c2Ugb3ZlcmxheSBtb2RlIChkZWZhdWx0KSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuZHdpbV9uZXdfbG9jYWxfYnJhbmNoID0gMTsKKwlvcHRzLnN3aXRjaF9icmFuY2hfZG9pbmdfbm90aGluZ19pc19vayA9IDE7CisJb3B0cy5vbmx5X21lcmdlX29uX3N3aXRjaGluZ19icmFuY2hlcyA9IDA7CisJb3B0cy5hY2NlcHRfcmVmID0gMTsKKwlvcHRzLmFjY2VwdF9wYXRoc3BlYyA9IDE7CisJb3B0cy5pbXBsaWNpdF9kZXRhY2ggPSAxOworCW9wdHMuY2FuX3N3aXRjaF93aGVuX2luX3Byb2dyZXNzID0gMTsKKwlvcHRzLm9ycGhhbl9mcm9tX2VtcHR5X3RyZWUgPSAwOworCW9wdHMuZW1wdHlfcGF0aHNwZWNfb2sgPSAxOworCW9wdHMub3ZlcmxheV9tb2RlID0gLTE7CisJb3B0cy5jaGVja291dF9pbmRleCA9IC0yOyAgICAvKiBkZWZhdWx0IG9uICovCisJb3B0cy5jaGVja291dF93b3JrdHJlZSA9IC0yOyAvKiBkZWZhdWx0IG9uICovCisKKwlpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgIi1iIikpIHsKKwkJLyoKKwkJICogVXNlciByYW4gJ2dpdCBjaGVja291dCAtYiA8YnJhbmNoPicgYW5kIGV4cGVjdHMKKwkJICogdGhlIHNhbWUgYmVoYXZpb3IgYXMgJ2dpdCBzd2l0Y2ggLWMgPGJyYW5jaD4nLgorCQkgKi8KKwkJb3B0cy5zd2l0Y2hfYnJhbmNoX2RvaW5nX25vdGhpbmdfaXNfb2sgPSAwOworCQlvcHRzLm9ubHlfbWVyZ2Vfb25fc3dpdGNoaW5nX2JyYW5jaGVzID0gMTsKKwl9CisKKwlvcHRpb25zID0gcGFyc2Vfb3B0aW9uc19kdXAoY2hlY2tvdXRfb3B0aW9ucyk7CisJb3B0aW9ucyA9IGFkZF9jb21tb25fb3B0aW9ucygmb3B0cywgb3B0aW9ucyk7CisJb3B0aW9ucyA9IGFkZF9jb21tb25fc3dpdGNoX2JyYW5jaF9vcHRpb25zKCZvcHRzLCBvcHRpb25zKTsKKwlvcHRpb25zID0gYWRkX2NoZWNrb3V0X3BhdGhfb3B0aW9ucygmb3B0cywgb3B0aW9ucyk7CisKKwlyZXQgPSBjaGVja291dF9tYWluKGFyZ2MsIGFyZ3YsIHByZWZpeCwgJm9wdHMsCisJCQkgICAgb3B0aW9ucywgY2hlY2tvdXRfdXNhZ2UpOworCUZSRUVfQU5EX05VTEwob3B0aW9ucyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNtZF9zd2l0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNoZWNrb3V0X29wdHMgb3B0czsKKwlzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIHN3aXRjaF9vcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoJ2MnLCAiY3JlYXRlIiwgJm9wdHMubmV3X2JyYW5jaCwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZSBhbmQgc3dpdGNoIHRvIGEgbmV3IGJyYW5jaCIpKSwKKwkJT1BUX1NUUklORygnQycsICJmb3JjZS1jcmVhdGUiLCAmb3B0cy5uZXdfYnJhbmNoX2ZvcmNlLCBOXygiYnJhbmNoIiksCisJCQkgICBOXygiY3JlYXRlL3Jlc2V0IGFuZCBzd2l0Y2ggdG8gYSBicmFuY2giKSksCisJCU9QVF9CT09MKDAsICJndWVzcyIsICZvcHRzLmR3aW1fbmV3X2xvY2FsX2JyYW5jaCwKKwkJCSBOXygic2Vjb25kIGd1ZXNzICdnaXQgc3dpdGNoIDxuby1zdWNoLWJyYW5jaD4nIikpLAorCQlPUFRfQk9PTCgwLCAiZGlzY2FyZC1jaGFuZ2VzIiwgJm9wdHMuZGlzY2FyZF9jaGFuZ2VzLAorCQkJIE5fKCJ0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMiKSksCisJCU9QVF9FTkQoKQorCX07CisJaW50IHJldDsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmR3aW1fbmV3X2xvY2FsX2JyYW5jaCA9IDE7CisJb3B0cy5hY2NlcHRfcmVmID0gMTsKKwlvcHRzLmFjY2VwdF9wYXRoc3BlYyA9IDA7CisJb3B0cy5zd2l0Y2hfYnJhbmNoX2RvaW5nX25vdGhpbmdfaXNfb2sgPSAwOworCW9wdHMub25seV9tZXJnZV9vbl9zd2l0Y2hpbmdfYnJhbmNoZXMgPSAxOworCW9wdHMuaW1wbGljaXRfZGV0YWNoID0gMDsKKwlvcHRzLmNhbl9zd2l0Y2hfd2hlbl9pbl9wcm9ncmVzcyA9IDA7CisJb3B0cy5vcnBoYW5fZnJvbV9lbXB0eV90cmVlID0gMTsKKwlvcHRzLm92ZXJsYXlfbW9kZSA9IC0xOworCisJb3B0aW9ucyA9IHBhcnNlX29wdGlvbnNfZHVwKHN3aXRjaF9vcHRpb25zKTsKKwlvcHRpb25zID0gYWRkX2NvbW1vbl9vcHRpb25zKCZvcHRzLCBvcHRpb25zKTsKKwlvcHRpb25zID0gYWRkX2NvbW1vbl9zd2l0Y2hfYnJhbmNoX29wdGlvbnMoJm9wdHMsIG9wdGlvbnMpOworCisJY2Jfb3B0aW9uID0gJ2MnOworCisJcmV0ID0gY2hlY2tvdXRfbWFpbihhcmdjLCBhcmd2LCBwcmVmaXgsICZvcHRzLAorCQkJICAgIG9wdGlvbnMsIHN3aXRjaF9icmFuY2hfdXNhZ2UpOworCUZSRUVfQU5EX05VTEwob3B0aW9ucyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNtZF9yZXN0b3JlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBjaGVja291dF9vcHRzIG9wdHM7CisJc3RydWN0IG9wdGlvbiAqb3B0aW9uczsKKwlzdHJ1Y3Qgb3B0aW9uIHJlc3RvcmVfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKCdzJywgInNvdXJjZSIsICZvcHRzLmZyb21fdHJlZWlzaCwgIjx0cmVlLWlzaD4iLAorCQkJICAgTl8oIndoaWNoIHRyZWUtaXNoIHRvIGNoZWNrb3V0IGZyb20iKSksCisJCU9QVF9CT09MKCdTJywgInN0YWdlZCIsICZvcHRzLmNoZWNrb3V0X2luZGV4LAorCQkJICAgTl8oInJlc3RvcmUgdGhlIGluZGV4IikpLAorCQlPUFRfQk9PTCgnVycsICJ3b3JrdHJlZSIsICZvcHRzLmNoZWNrb3V0X3dvcmt0cmVlLAorCQkJICAgTl8oInJlc3RvcmUgdGhlIHdvcmtpbmcgdHJlZSAoZGVmYXVsdCkiKSksCisJCU9QVF9CT09MKDAsICJpZ25vcmUtdW5tZXJnZWQiLCAmb3B0cy5pZ25vcmVfdW5tZXJnZWQsCisJCQkgTl8oImlnbm9yZSB1bm1lcmdlZCBlbnRyaWVzIikpLAorCQlPUFRfQk9PTCgwLCAib3ZlcmxheSIsICZvcHRzLm92ZXJsYXlfbW9kZSwgTl8oInVzZSBvdmVybGF5IG1vZGUiKSksCisJCU9QVF9FTkQoKQorCX07CisJaW50IHJldDsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmFjY2VwdF9yZWYgPSAwOworCW9wdHMuYWNjZXB0X3BhdGhzcGVjID0gMTsKKwlvcHRzLmVtcHR5X3BhdGhzcGVjX29rID0gMDsKKwlvcHRzLm92ZXJsYXlfbW9kZSA9IDA7CisJb3B0cy5jaGVja291dF9pbmRleCA9IC0xOyAgICAvKiBkZWZhdWx0IG9mZiAqLworCW9wdHMuY2hlY2tvdXRfd29ya3RyZWUgPSAtMjsgLyogZGVmYXVsdCBvbiAqLworCW9wdHMuaWdub3JlX3VubWVyZ2VkX29wdCA9ICItLWlnbm9yZS11bm1lcmdlZCI7CisKKwlvcHRpb25zID0gcGFyc2Vfb3B0aW9uc19kdXAocmVzdG9yZV9vcHRpb25zKTsKKwlvcHRpb25zID0gYWRkX2NvbW1vbl9vcHRpb25zKCZvcHRzLCBvcHRpb25zKTsKKwlvcHRpb25zID0gYWRkX2NoZWNrb3V0X3BhdGhfb3B0aW9ucygmb3B0cywgb3B0aW9ucyk7CisKKwlyZXQgPSBjaGVja291dF9tYWluKGFyZ2MsIGFyZ3YsIHByZWZpeCwgJm9wdHMsCisJCQkgICAgb3B0aW9ucywgcmVzdG9yZV91c2FnZSk7CisJRlJFRV9BTkRfTlVMTChvcHRpb25zKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jbGVhbi5jIGIvYnVpbHRpbi9jbGVhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYTEyYmMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NsZWFuLmMKQEAgLTAsMCArMSwxMDUwIEBACisvKgorICogImdpdCBjbGVhbiIgYnVpbHRpbiBjb21tYW5kCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIEJvaHJlcgorICoKKyAqIEJhc2VkIG9uIGdpdC1jbGVhbi5zaCBieSBQYXZlbCBSb3NraW4KKyAqLworCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImNvbHVtbi5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJoZWxwLmgiCisjaW5jbHVkZSAicHJvbXB0LmgiCisKK3N0YXRpYyBpbnQgZm9yY2UgPSAtMTsgLyogdW5zZXQgKi8KK3N0YXRpYyBpbnQgaW50ZXJhY3RpdmU7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGRlbF9saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbG9wdHM7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBidWlsdGluX2NsZWFuX3VzYWdlW10gPSB7CisJTl8oImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICptc2dfcmVtb3ZlID0gTl8oIlJlbW92aW5nICVzXG4iKTsKK3N0YXRpYyBjb25zdCBjaGFyICptc2dfd291bGRfcmVtb3ZlID0gTl8oIldvdWxkIHJlbW92ZSAlc1xuIik7CitzdGF0aWMgY29uc3QgY2hhciAqbXNnX3NraXBfZ2l0X2RpciA9IE5fKCJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iKTsKK3N0YXRpYyBjb25zdCBjaGFyICptc2dfd291bGRfc2tpcF9naXRfZGlyID0gTl8oIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIik7CitzdGF0aWMgY29uc3QgY2hhciAqbXNnX3dhcm5fcmVtb3ZlX2ZhaWxlZCA9IE5fKCJmYWlsZWQgdG8gcmVtb3ZlICVzIik7CitzdGF0aWMgY29uc3QgY2hhciAqbXNnX3dhcm5fbHN0YXRfZmFpbGVkID0gTl8oImNvdWxkIG5vdCBsc3RhdCAlc1xuIik7CisKK2VudW0gY29sb3JfY2xlYW4geworCUNMRUFOX0NPTE9SX1JFU0VUID0gMCwKKwlDTEVBTl9DT0xPUl9QTEFJTiA9IDEsCisJQ0xFQU5fQ09MT1JfUFJPTVBUID0gMiwKKwlDTEVBTl9DT0xPUl9IRUFERVIgPSAzLAorCUNMRUFOX0NPTE9SX0hFTFAgPSA0LAorCUNMRUFOX0NPTE9SX0VSUk9SID0gNQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbG9yX2ludGVyYWN0aXZlX3Nsb3RzW10gPSB7CisJW0NMRUFOX0NPTE9SX0VSUk9SXSAgPSAiZXJyb3IiLAorCVtDTEVBTl9DT0xPUl9IRUFERVJdID0gImhlYWRlciIsCisJW0NMRUFOX0NPTE9SX0hFTFBdICAgPSAiaGVscCIsCisJW0NMRUFOX0NPTE9SX1BMQUlOXSAgPSAicGxhaW4iLAorCVtDTEVBTl9DT0xPUl9QUk9NUFRdID0gInByb21wdCIsCisJW0NMRUFOX0NPTE9SX1JFU0VUXSAgPSAicmVzZXQiLAorfTsKKworc3RhdGljIGludCBjbGVhbl91c2VfY29sb3IgPSAtMTsKK3N0YXRpYyBjaGFyIGNsZWFuX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CisJW0NMRUFOX0NPTE9SX0VSUk9SXSA9IEdJVF9DT0xPUl9CT0xEX1JFRCwKKwlbQ0xFQU5fQ09MT1JfSEVBREVSXSA9IEdJVF9DT0xPUl9CT0xELAorCVtDTEVBTl9DT0xPUl9IRUxQXSA9IEdJVF9DT0xPUl9CT0xEX1JFRCwKKwlbQ0xFQU5fQ09MT1JfUExBSU5dID0gR0lUX0NPTE9SX05PUk1BTCwKKwlbQ0xFQU5fQ09MT1JfUFJPTVBUXSA9IEdJVF9DT0xPUl9CT0xEX0JMVUUsCisJW0NMRUFOX0NPTE9SX1JFU0VUXSA9IEdJVF9DT0xPUl9SRVNFVCwKK307CisKKyNkZWZpbmUgTUVOVV9PUFRTX1NJTkdMRVRPTgkJMDEKKyNkZWZpbmUgTUVOVV9PUFRTX0lNTUVESUFURQkJMDIKKyNkZWZpbmUgTUVOVV9PUFRTX0xJU1RfT05MWQkJMDQKKworc3RydWN0IG1lbnVfb3B0cyB7CisJY29uc3QgY2hhciAqaGVhZGVyOworCWNvbnN0IGNoYXIgKnByb21wdDsKKwlpbnQgZmxhZ3M7Cit9OworCisjZGVmaW5lIE1FTlVfUkVUVVJOX05PX0xPT1AJCTEwCisKK3N0cnVjdCBtZW51X2l0ZW0geworCWNoYXIgaG90a2V5OworCWNvbnN0IGNoYXIgKnRpdGxlOworCWludCBzZWxlY3RlZDsKKwlpbnQgKCpmbikodm9pZCk7Cit9OworCitlbnVtIG1lbnVfc3R1ZmZfdHlwZSB7CisJTUVOVV9TVFVGRl9UWVBFX1NUUklOR19MSVNUID0gMSwKKwlNRU5VX1NUVUZGX1RZUEVfTUVOVV9JVEVNCit9OworCitzdHJ1Y3QgbWVudV9zdHVmZiB7CisJZW51bSBtZW51X3N0dWZmX3R5cGUgdHlwZTsKKwlpbnQgbnI7CisJdm9pZCAqc3R1ZmY7Cit9OworCitkZWZpbmVfbGlzdF9jb25maWdfYXJyYXkoY29sb3JfaW50ZXJhY3RpdmVfc2xvdHMpOworCitzdGF0aWMgaW50IGdpdF9jbGVhbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqc2xvdF9uYW1lOworCisJaWYgKHN0YXJ0c193aXRoKHZhciwgImNvbHVtbi4iKSkKKwkJcmV0dXJuIGdpdF9jb2x1bW5fY29uZmlnKHZhciwgdmFsdWUsICJjbGVhbiIsICZjb2xvcHRzKTsKKworCS8qIGhvbm9ycyB0aGUgY29sb3IuaW50ZXJhY3RpdmUqIGNvbmZpZyB2YXJpYWJsZXMgd2hpY2ggYWxzbworCSAgIGFwcGxpZWQgaW4gZ2l0LWFkZC0taW50ZXJhY3RpdmUgYW5kIGdpdC1zdGFzaCAqLworCWlmICghc3RyY21wKHZhciwgImNvbG9yLmludGVyYWN0aXZlIikpIHsKKwkJY2xlYW5fdXNlX2NvbG9yID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoc2tpcF9wcmVmaXgodmFyLCAiY29sb3IuaW50ZXJhY3RpdmUuIiwgJnNsb3RfbmFtZSkpIHsKKwkJaW50IHNsb3QgPSBMT09LVVBfQ09ORklHKGNvbG9yX2ludGVyYWN0aXZlX3Nsb3RzLCBzbG90X25hbWUpOworCQlpZiAoc2xvdCA8IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlyZXR1cm4gY29sb3JfcGFyc2UodmFsdWUsIGNsZWFuX2NvbG9yc1tzbG90XSk7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY2xlYW4ucmVxdWlyZWZvcmNlIikpIHsKKwkJZm9yY2UgPSAhZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBpbnNwZWN0IHRoZSBjb2xvci51aSBjb25maWcgdmFyaWFibGUgYW5kIG90aGVycyAqLworCXJldHVybiBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY2xlYW5fZ2V0X2NvbG9yKGVudW0gY29sb3JfY2xlYW4gaXgpCit7CisJaWYgKHdhbnRfY29sb3IoY2xlYW5fdXNlX2NvbG9yKSkKKwkJcmV0dXJuIGNsZWFuX2NvbG9yc1tpeF07CisJcmV0dXJuICIiOworfQorCitzdGF0aWMgdm9pZCBjbGVhbl9wcmludF9jb2xvcihlbnVtIGNvbG9yX2NsZWFuIGl4KQoreworCXByaW50ZigiJXMiLCBjbGVhbl9nZXRfY29sb3IoaXgpKTsKK30KKworc3RhdGljIGludCBleGNsdWRlX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpleGNsdWRlX2xpc3QgPSBvcHQtPnZhbHVlOworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlzdHJpbmdfbGlzdF9hcHBlbmQoZXhjbHVkZV9saXN0LCBhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9kaXJzKHN0cnVjdCBzdHJidWYgKnBhdGgsIGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGZvcmNlX2ZsYWcsCisJCWludCBkcnlfcnVuLCBpbnQgcXVpZXQsIGludCAqZGlyX2dvbmUpCit7CisJRElSICpkaXI7CisJc3RydWN0IHN0cmJ1ZiBxdW90ZWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgZGlyZW50ICplOworCWludCByZXMgPSAwLCByZXQgPSAwLCBnb25lID0gMSwgb3JpZ2luYWxfbGVuID0gcGF0aC0+bGVuLCBsZW47CisJc3RydWN0IHN0cmluZ19saXN0IGRlbHMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCSpkaXJfZ29uZSA9IDE7CisKKwlpZiAoKGZvcmNlX2ZsYWcgJiBSRU1PVkVfRElSX0tFRVBfTkVTVEVEX0dJVCkgJiYKKwkgICAgaXNfbm9uYmFyZV9yZXBvc2l0b3J5X2RpcihwYXRoKSkgeworCQlpZiAoIXF1aWV0KSB7CisJCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1ZiwgcHJlZml4LCAmcXVvdGVkKTsKKwkJCXByaW50ZihkcnlfcnVuID8gIF8obXNnX3dvdWxkX3NraXBfZ2l0X2RpcikgOiBfKG1zZ19za2lwX2dpdF9kaXIpLAorCQkJCQlxdW90ZWQuYnVmKTsKKwkJfQorCisJCSpkaXJfZ29uZSA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCWRpciA9IG9wZW5kaXIocGF0aC0+YnVmKTsKKwlpZiAoIWRpcikgeworCQkvKiBhbiBlbXB0eSBkaXIgY291bGQgYmUgcmVtb3ZlZCBldmVuIGlmIGl0IGlzIHVucmVhZGJsZSAqLworCQlyZXMgPSBkcnlfcnVuID8gMCA6IHJtZGlyKHBhdGgtPmJ1Zik7CisJCWlmIChyZXMpIHsKKwkJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOworCQkJcXVvdGVfcGF0aF9yZWxhdGl2ZShwYXRoLT5idWYsIHByZWZpeCwgJnF1b3RlZCk7CisJCQllcnJubyA9IHNhdmVkX2Vycm5vOworCQkJd2FybmluZ19lcnJubyhfKG1zZ193YXJuX3JlbW92ZV9mYWlsZWQpLCBxdW90ZWQuYnVmKTsKKwkJCSpkaXJfZ29uZSA9IDA7CisJCX0KKwkJcmV0ID0gcmVzOworCQlnb3RvIG91dDsKKwl9CisKKwlzdHJidWZfY29tcGxldGUocGF0aCwgJy8nKTsKKworCWxlbiA9IHBhdGgtPmxlbjsKKwl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGUtPmRfbmFtZSkpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfc2V0bGVuKHBhdGgsIGxlbik7CisJCXN0cmJ1Zl9hZGRzdHIocGF0aCwgZS0+ZF9uYW1lKTsKKwkJaWYgKGxzdGF0KHBhdGgtPmJ1ZiwgJnN0KSkKKwkJCXdhcm5pbmdfZXJybm8oXyhtc2dfd2Fybl9sc3RhdF9mYWlsZWQpLCBwYXRoLT5idWYpOworCQllbHNlIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCQlpZiAocmVtb3ZlX2RpcnMocGF0aCwgcHJlZml4LCBmb3JjZV9mbGFnLCBkcnlfcnVuLCBxdWlldCwgJmdvbmUpKQorCQkJCXJldCA9IDE7CisJCQlpZiAoZ29uZSkgeworCQkJCXF1b3RlX3BhdGhfcmVsYXRpdmUocGF0aC0+YnVmLCBwcmVmaXgsICZxdW90ZWQpOworCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmZGVscywgcXVvdGVkLmJ1Zik7CisJCQl9IGVsc2UKKwkJCQkqZGlyX2dvbmUgPSAwOworCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQlyZXMgPSBkcnlfcnVuID8gMCA6IHVubGluayhwYXRoLT5idWYpOworCQkJaWYgKCFyZXMpIHsKKwkJCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1ZiwgcHJlZml4LCAmcXVvdGVkKTsKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmRlbHMsIHF1b3RlZC5idWYpOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1ZiwgcHJlZml4LCAmcXVvdGVkKTsKKwkJCQllcnJubyA9IHNhdmVkX2Vycm5vOworCQkJCXdhcm5pbmdfZXJybm8oXyhtc2dfd2Fybl9yZW1vdmVfZmFpbGVkKSwgcXVvdGVkLmJ1Zik7CisJCQkJKmRpcl9nb25lID0gMDsKKwkJCQlyZXQgPSAxOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQkvKiBwYXRoIHRvbyBsb25nLCBzdGF0IGZhaWxzLCBvciBub24tZGlyZWN0b3J5IHN0aWxsIGV4aXN0cyAqLworCQkqZGlyX2dvbmUgPSAwOworCQlyZXQgPSAxOworCQlicmVhazsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKworCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgb3JpZ2luYWxfbGVuKTsKKworCWlmICgqZGlyX2dvbmUpIHsKKwkJcmVzID0gZHJ5X3J1biA/IDAgOiBybWRpcihwYXRoLT5idWYpOworCQlpZiAoIXJlcykKKwkJCSpkaXJfZ29uZSA9IDE7CisJCWVsc2UgeworCQkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1ZiwgcHJlZml4LCAmcXVvdGVkKTsKKwkJCWVycm5vID0gc2F2ZWRfZXJybm87CisJCQl3YXJuaW5nX2Vycm5vKF8obXNnX3dhcm5fcmVtb3ZlX2ZhaWxlZCksIHF1b3RlZC5idWYpOworCQkJKmRpcl9nb25lID0gMDsKKwkJCXJldCA9IDE7CisJCX0KKwl9CisKKwlpZiAoISpkaXJfZ29uZSAmJiAhcXVpZXQpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBkZWxzLm5yOyBpKyspCisJCQlwcmludGYoZHJ5X3J1biA/ICBfKG1zZ193b3VsZF9yZW1vdmUpIDogXyhtc2dfcmVtb3ZlKSwgZGVscy5pdGVtc1tpXS5zdHJpbmcpOworCX0KK291dDoKKwlzdHJidWZfcmVsZWFzZSgmcXVvdGVkKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZGVscywgMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcHJldHR5X3ByaW50X2RlbHModm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcW5hbWU7CisJc3RydWN0IGNvbHVtbl9vcHRpb25zIGNvcHRzOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZGVsX2xpc3QpIHsKKwkJcW5hbWUgPSBxdW90ZV9wYXRoX3JlbGF0aXZlKGl0ZW0tPnN0cmluZywgTlVMTCwgJmJ1Zik7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmbGlzdCwgcW5hbWUpOworCX0KKworCS8qCisJICogYWx3YXlzIGVuYWJsZSBjb2x1bW4gZGlzcGxheSwgd2Ugb25seSBjb25zdWx0IGNvbHVtbi4qCisJICogYWJvdXQgbGF5b3V0IHN0cmF0ZWd5IGFuZCBzdHVmZgorCSAqLworCWNvbG9wdHMgPSAoY29sb3B0cyAmIH5DT0xfRU5BQkxFX01BU0spIHwgQ09MX0VOQUJMRUQ7CisJbWVtc2V0KCZjb3B0cywgMCwgc2l6ZW9mKGNvcHRzKSk7CisJY29wdHMuaW5kZW50ID0gIiAgIjsKKwljb3B0cy5wYWRkaW5nID0gMjsKKwlwcmludF9jb2x1bW5zKCZsaXN0LCBjb2xvcHRzLCAmY29wdHMpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKK30KKworc3RhdGljIHZvaWQgcHJldHR5X3ByaW50X21lbnVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWVudV9saXN0KQoreworCXVuc2lnbmVkIGludCBsb2NhbF9jb2xvcHRzID0gMDsKKwlzdHJ1Y3QgY29sdW1uX29wdGlvbnMgY29wdHM7CisKKwlsb2NhbF9jb2xvcHRzID0gQ09MX0VOQUJMRUQgfCBDT0xfUk9XOworCW1lbXNldCgmY29wdHMsIDAsIHNpemVvZihjb3B0cykpOworCWNvcHRzLmluZGVudCA9ICIgICI7CisJY29wdHMucGFkZGluZyA9IDI7CisJcHJpbnRfY29sdW1ucyhtZW51X2xpc3QsIGxvY2FsX2NvbG9wdHMsICZjb3B0cyk7Cit9CisKK3N0YXRpYyB2b2lkIHByb21wdF9oZWxwX2NtZChpbnQgc2luZ2xldG9uKQoreworCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX0hFTFApOworCXByaW50ZihzaW5nbGV0b24gPworCQkgIF8oIlByb21wdCBoZWxwOlxuIgorCQkgICAgIjEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtXG4iCisJCSAgICAiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKwkJICAgICIgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZ1xuIikgOgorCQkgIF8oIlByb21wdCBoZWxwOlxuIgorCQkgICAgIjEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbVxuIgorCQkgICAgIjMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtc1xuIgorCQkgICAgIjItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzXG4iCisJCSAgICAiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKwkJICAgICItLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zXG4iCisJCSAgICAiKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXNcbiIKKwkJICAgICIgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nXG4iKSk7CisJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfUkVTRVQpOworfQorCisvKgorICogZGlzcGxheSBtZW51IHN0dWZmIHdpdGggbnVtYmVyIHByZWZpeCBhbmQgaG90a2V5IGhpZ2hsaWdodAorICovCitzdGF0aWMgdm9pZCBwcmludF9oaWdobGlnaHRfbWVudV9zdHVmZihzdHJ1Y3QgbWVudV9zdHVmZiAqc3R1ZmYsIGludCAqKmNob3NlbikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWVudV9saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmJ1ZiBtZW51ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG1lbnVfaXRlbSAqbWVudV9pdGVtOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9pdGVtOworCWludCBpOworCisJc3dpdGNoIChzdHVmZi0+dHlwZSkgeworCWRlZmF1bHQ6CisJCWRpZSgiQmFkIHR5cGUgb2YgbWVudV9zdHVmZiB3aGVuIHByaW50IG1lbnUiKTsKKwljYXNlIE1FTlVfU1RVRkZfVFlQRV9NRU5VX0lURU06CisJCW1lbnVfaXRlbSA9IChzdHJ1Y3QgbWVudV9pdGVtICopc3R1ZmYtPnN0dWZmOworCQlmb3IgKGkgPSAwOyBpIDwgc3R1ZmYtPm5yOyBpKyssIG1lbnVfaXRlbSsrKSB7CisJCQljb25zdCBjaGFyICpwOworCQkJaW50IGhpZ2hsaWdodGVkID0gMDsKKworCQkJcCA9IG1lbnVfaXRlbS0+dGl0bGU7CisJCQlpZiAoKCpjaG9zZW4pW2ldIDwgMCkKKwkJCQkoKmNob3NlbilbaV0gPSBtZW51X2l0ZW0tPnNlbGVjdGVkID8gMSA6IDA7CisJCQlzdHJidWZfYWRkZigmbWVudSwgIiVzJTJkOiAiLCAoKmNob3NlbilbaV0gPyAiKiIgOiAiICIsIGkrMSk7CisJCQlmb3IgKDsgKnA7IHArKykgeworCQkJCWlmICghaGlnaGxpZ2h0ZWQgJiYgKnAgPT0gbWVudV9pdGVtLT5ob3RrZXkpIHsKKwkJCQkJc3RyYnVmX2FkZHN0cigmbWVudSwgY2xlYW5fZ2V0X2NvbG9yKENMRUFOX0NPTE9SX1BST01QVCkpOworCQkJCQlzdHJidWZfYWRkY2goJm1lbnUsICpwKTsKKwkJCQkJc3RyYnVmX2FkZHN0cigmbWVudSwgY2xlYW5fZ2V0X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKSk7CisJCQkJCWhpZ2hsaWdodGVkID0gMTsKKwkJCQl9IGVsc2UgeworCQkJCQlzdHJidWZfYWRkY2goJm1lbnUsICpwKTsKKwkJCQl9CisJCQl9CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJm1lbnVfbGlzdCwgbWVudS5idWYpOworCQkJc3RyYnVmX3Jlc2V0KCZtZW51KTsKKwkJfQorCQlicmVhazsKKwljYXNlIE1FTlVfU1RVRkZfVFlQRV9TVFJJTkdfTElTVDoKKwkJaSA9IDA7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oc3RyaW5nX2xpc3RfaXRlbSwgKHN0cnVjdCBzdHJpbmdfbGlzdCAqKXN0dWZmLT5zdHVmZikgeworCQkJaWYgKCgqY2hvc2VuKVtpXSA8IDApCisJCQkJKCpjaG9zZW4pW2ldID0gMDsKKwkJCXN0cmJ1Zl9hZGRmKCZtZW51LCAiJXMlMmQ6ICVzIiwKKwkJCQkgICAgKCpjaG9zZW4pW2ldID8gIioiIDogIiAiLCBpKzEsIHN0cmluZ19saXN0X2l0ZW0tPnN0cmluZyk7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJm1lbnVfbGlzdCwgbWVudS5idWYpOworCQkJc3RyYnVmX3Jlc2V0KCZtZW51KTsKKwkJCWkrKzsKKwkJfQorCQlicmVhazsKKwl9CisKKwlwcmV0dHlfcHJpbnRfbWVudXMoJm1lbnVfbGlzdCk7CisKKwlzdHJidWZfcmVsZWFzZSgmbWVudSk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJm1lbnVfbGlzdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZmluZF91bmlxdWUoY29uc3QgY2hhciAqY2hvaWNlLCBzdHJ1Y3QgbWVudV9zdHVmZiAqbWVudV9zdHVmZikKK3sKKwlzdHJ1Y3QgbWVudV9pdGVtICptZW51X2l0ZW07CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnN0cmluZ19saXN0X2l0ZW07CisJaW50IGksIGxlbiwgZm91bmQgPSAwOworCisJbGVuID0gc3RybGVuKGNob2ljZSk7CisJc3dpdGNoIChtZW51X3N0dWZmLT50eXBlKSB7CisJZGVmYXVsdDoKKwkJZGllKCJCYWQgdHlwZSBvZiBtZW51X3N0dWZmIHdoZW4gcGFyc2UgY2hvaWNlIik7CisJY2FzZSBNRU5VX1NUVUZGX1RZUEVfTUVOVV9JVEVNOgorCisJCW1lbnVfaXRlbSA9IChzdHJ1Y3QgbWVudV9pdGVtICopbWVudV9zdHVmZi0+c3R1ZmY7CisJCWZvciAoaSA9IDA7IGkgPCBtZW51X3N0dWZmLT5ucjsgaSsrLCBtZW51X2l0ZW0rKykgeworCQkJaWYgKGxlbiA9PSAxICYmICpjaG9pY2UgPT0gbWVudV9pdGVtLT5ob3RrZXkpIHsKKwkJCQlmb3VuZCA9IGkgKyAxOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKCFzdHJuY2FzZWNtcChjaG9pY2UsIG1lbnVfaXRlbS0+dGl0bGUsIGxlbikpIHsKKwkJCQlpZiAoZm91bmQpIHsKKwkJCQkJaWYgKGxlbiA9PSAxKSB7CisJCQkJCQkvKiBjb250aW51ZSBmb3IgaG90a2V5IG1hdGNoaW5nICovCisJCQkJCQlmb3VuZCA9IC0xOworCQkJCQl9IGVsc2UgeworCQkJCQkJZm91bmQgPSAwOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlmb3VuZCA9IGkgKyAxOworCQkJCX0KKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIE1FTlVfU1RVRkZfVFlQRV9TVFJJTkdfTElTVDoKKwkJc3RyaW5nX2xpc3RfaXRlbSA9ICgoc3RydWN0IHN0cmluZ19saXN0ICopbWVudV9zdHVmZi0+c3R1ZmYpLT5pdGVtczsKKwkJZm9yIChpID0gMDsgaSA8IG1lbnVfc3R1ZmYtPm5yOyBpKyssIHN0cmluZ19saXN0X2l0ZW0rKykgeworCQkJaWYgKCFzdHJuY2FzZWNtcChjaG9pY2UsIHN0cmluZ19saXN0X2l0ZW0tPnN0cmluZywgbGVuKSkgeworCQkJCWlmIChmb3VuZCkgeworCQkJCQlmb3VuZCA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlmb3VuZCA9IGkgKyAxOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qCisgKiBQYXJzZSB1c2VyIGlucHV0LCBhbmQgcmV0dXJuIGNob2ljZShzKSBmb3IgbWVudSAobWVudV9zdHVmZikuCisgKgorICogSW5wdXQKKyAqICAgICAoZm9yIHNpbmdsZSBjaG9pY2UpCisgKiAgICAgICAgIDEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtCisgKiAgICAgICAgIGZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiBtZW51IHRpdGxlCisgKiAgICAgICAgICAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nCisgKgorICogICAgIChmb3IgbXVsdGlwbGUgY2hvaWNlKQorICogICAgICAgICAxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW0KKyAqICAgICAgICAgMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zCisgKiAgICAgICAgIDItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzCisgKiAgICAgICAgIGZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiBtZW51IHRpdGxlCisgKiAgICAgICAgIC0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXMKKyAqICAgICAgICAgKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXMKKyAqICAgICAgICAgICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZworICoKKyAqIFRoZSBwYXJzZSByZXN1bHQgd2lsbCBiZSBzYXZlZCBpbiBhcnJheSAqKmNob3NlbiwgYW5kCisgKiByZXR1cm4gbnVtYmVyIG9mIHRvdGFsIHNlbGVjdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfY2hvaWNlKHN0cnVjdCBtZW51X3N0dWZmICptZW51X3N0dWZmLAorCQkJaW50IGlzX3NpbmdsZSwKKwkJCXN0cnVjdCBzdHJidWYgaW5wdXQsCisJCQlpbnQgKipjaG9zZW4pCit7CisJc3RydWN0IHN0cmJ1ZiAqKmNob2ljZV9saXN0LCAqKnB0cjsKKwlpbnQgbnIgPSAwOworCWludCBpOworCisJaWYgKGlzX3NpbmdsZSkgeworCQljaG9pY2VfbGlzdCA9IHN0cmJ1Zl9zcGxpdF9tYXgoJmlucHV0LCAnXG4nLCAwKTsKKwl9IGVsc2UgeworCQljaGFyICpwID0gaW5wdXQuYnVmOworCQlkbyB7CisJCQlpZiAoKnAgPT0gJywnKQorCQkJCSpwID0gJyAnOworCQl9IHdoaWxlICgqcCsrKTsKKwkJY2hvaWNlX2xpc3QgPSBzdHJidWZfc3BsaXRfbWF4KCZpbnB1dCwgJyAnLCAwKTsKKwl9CisKKwlmb3IgKHB0ciA9IGNob2ljZV9saXN0OyAqcHRyOyBwdHIrKykgeworCQljaGFyICpwOworCQlpbnQgY2hvb3NlID0gMTsKKwkJaW50IGJvdHRvbSA9IDAsIHRvcCA9IDA7CisJCWludCBpc19yYW5nZSwgaXNfbnVtYmVyOworCisJCXN0cmJ1Zl90cmltKCpwdHIpOworCQlpZiAoISgqcHRyKS0+bGVuKQorCQkJY29udGludWU7CisKKwkJLyogSW5wdXQgdGhhdCBiZWdpbnMgd2l0aCAnLSc7IHVuY2hvb3NlICovCisJCWlmICgqKCpwdHIpLT5idWYgPT0gJy0nKSB7CisJCQljaG9vc2UgPSAwOworCQkJc3RyYnVmX3JlbW92ZSgoKnB0ciksIDAsIDEpOworCQl9CisKKwkJaXNfcmFuZ2UgPSAwOworCQlpc19udW1iZXIgPSAxOworCQlmb3IgKHAgPSAoKnB0ciktPmJ1ZjsgKnA7IHArKykgeworCQkJaWYgKCctJyA9PSAqcCkgeworCQkJCWlmICghaXNfcmFuZ2UpIHsKKwkJCQkJaXNfcmFuZ2UgPSAxOworCQkJCQlpc19udW1iZXIgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCWlzX251bWJlciA9IDA7CisJCQkJCWlzX3JhbmdlID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIGlmICghaXNkaWdpdCgqcCkpIHsKKwkJCQlpc19udW1iZXIgPSAwOworCQkJCWlzX3JhbmdlID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChpc19udW1iZXIpIHsKKwkJCWJvdHRvbSA9IGF0b2koKCpwdHIpLT5idWYpOworCQkJdG9wID0gYm90dG9tOworCQl9IGVsc2UgaWYgKGlzX3JhbmdlKSB7CisJCQlib3R0b20gPSBhdG9pKCgqcHRyKS0+YnVmKTsKKwkJCS8qIGEgcmFuZ2UgY2FuIGJlIHNwZWNpZmllZCBsaWtlIDUtNyBvciA1LSAqLworCQkJaWYgKCEqKHN0cmNocigoKnB0ciktPmJ1ZiwgJy0nKSArIDEpKQorCQkJCXRvcCA9IG1lbnVfc3R1ZmYtPm5yOworCQkJZWxzZQorCQkJCXRvcCA9IGF0b2koc3RyY2hyKCgqcHRyKS0+YnVmLCAnLScpICsgMSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCgoKnB0ciktPmJ1ZiwgIioiKSkgeworCQkJYm90dG9tID0gMTsKKwkJCXRvcCA9IG1lbnVfc3R1ZmYtPm5yOworCQl9IGVsc2UgeworCQkJYm90dG9tID0gZmluZF91bmlxdWUoKCpwdHIpLT5idWYsIG1lbnVfc3R1ZmYpOworCQkJdG9wID0gYm90dG9tOworCQl9CisKKwkJaWYgKHRvcCA8PSAwIHx8IGJvdHRvbSA8PSAwIHx8IHRvcCA+IG1lbnVfc3R1ZmYtPm5yIHx8IGJvdHRvbSA+IHRvcCB8fAorCQkgICAgKGlzX3NpbmdsZSAmJiBib3R0b20gIT0gdG9wKSkgeworCQkJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfRVJST1IpOworCQkJcHJpbnRmKF8oIkh1aCAoJXMpP1xuIiksICgqcHRyKS0+YnVmKTsKKwkJCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9yIChpID0gYm90dG9tOyBpIDw9IHRvcDsgaSsrKQorCQkJKCpjaG9zZW4pW2ktMV0gPSBjaG9vc2U7CisJfQorCisJc3RyYnVmX2xpc3RfZnJlZShjaG9pY2VfbGlzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWVudV9zdHVmZi0+bnI7IGkrKykKKwkJbnIgKz0gKCpjaG9zZW4pW2ldOworCXJldHVybiBucjsKK30KKworLyoKKyAqIEltcGxlbWVudCBhIGdpdC1hZGQtaW50ZXJhY3RpdmUgY29tcGF0aWJsZSBVSSwgd2hpY2ggaXMgYm9ycm93ZWQKKyAqIGZyb20gZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybC4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKgorICogICAtIFJldHVybiBhbiBhcnJheSBvZiBpbnRlZ2VycworICogICAtICwgYW5kIGl0IGlzIHVwIHRvIHlvdSB0byBmcmVlIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LgorICogICAtIFRoZSBhcnJheSBlbmRzIHdpdGggRU9GLgorICogICAtIElmIHVzZXIgcHJlc3NlZCBDVFJMLUQgKGkuZS4gRU9GKSwgbm8gc2VsZWN0aW9uIHJldHVybmVkLgorICovCitzdGF0aWMgaW50ICpsaXN0X2FuZF9jaG9vc2Uoc3RydWN0IG1lbnVfb3B0cyAqb3B0cywgc3RydWN0IG1lbnVfc3R1ZmYgKnN0dWZmKQoreworCXN0cnVjdCBzdHJidWYgY2hvaWNlID0gU1RSQlVGX0lOSVQ7CisJaW50ICpjaG9zZW4sICpyZXN1bHQ7CisJaW50IG5yID0gMDsKKwlpbnQgZW9mID0gMDsKKwlpbnQgaTsKKworCUFMTE9DX0FSUkFZKGNob3Nlbiwgc3R1ZmYtPm5yKTsKKwkvKiBzZXQgY2hvc2VuIGFzIHVuaW5pdGlhbGl6ZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3R1ZmYtPm5yOyBpKyspCisJCWNob3NlbltpXSA9IC0xOworCisJZm9yICg7OykgeworCQlpZiAob3B0cy0+aGVhZGVyKSB7CisJCQlwcmludGZfbG4oIiVzJXMlcyIsCisJCQkJICBjbGVhbl9nZXRfY29sb3IoQ0xFQU5fQ09MT1JfSEVBREVSKSwKKwkJCQkgIF8ob3B0cy0+aGVhZGVyKSwKKwkJCQkgIGNsZWFuX2dldF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCkpOworCQl9CisKKwkJLyogY2hvc2VuIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgcHJpbnRfaGlnaGxpZ2h0X21lbnVfc3R1ZmYgKi8KKwkJcHJpbnRfaGlnaGxpZ2h0X21lbnVfc3R1ZmYoc3R1ZmYsICZjaG9zZW4pOworCisJCWlmIChvcHRzLT5mbGFncyAmIE1FTlVfT1BUU19MSVNUX09OTFkpCisJCQlicmVhazsKKworCQlpZiAob3B0cy0+cHJvbXB0KSB7CisJCQlwcmludGYoIiVzJXMlcyVzIiwKKwkJCSAgICAgICBjbGVhbl9nZXRfY29sb3IoQ0xFQU5fQ09MT1JfUFJPTVBUKSwKKwkJCSAgICAgICBfKG9wdHMtPnByb21wdCksCisJCQkgICAgICAgb3B0cy0+ZmxhZ3MgJiBNRU5VX09QVFNfU0lOR0xFVE9OID8gIj4gIiA6ICI+PiAiLAorCQkJICAgICAgIGNsZWFuX2dldF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCkpOworCQl9CisKKwkJaWYgKGdpdF9yZWFkX2xpbmVfaW50ZXJhY3RpdmVseSgmY2hvaWNlKSA9PSBFT0YpIHsKKwkJCWVvZiA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGhlbHAgZm9yIHByb21wdCAqLworCQlpZiAoIXN0cmNtcChjaG9pY2UuYnVmLCAiPyIpKSB7CisJCQlwcm9tcHRfaGVscF9jbWQob3B0cy0+ZmxhZ3MgJiBNRU5VX09QVFNfU0lOR0xFVE9OKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogZm9yIGEgbXVsdGlwbGUtY2hvaWNlIG1lbnUsIHByZXNzIEVOVEVSIChlbXB0eSkgd2lsbCByZXR1cm4gYmFjayAqLworCQlpZiAoIShvcHRzLT5mbGFncyAmIE1FTlVfT1BUU19TSU5HTEVUT04pICYmICFjaG9pY2UubGVuKQorCQkJYnJlYWs7CisKKwkJbnIgPSBwYXJzZV9jaG9pY2Uoc3R1ZmYsCisJCQkJICBvcHRzLT5mbGFncyAmIE1FTlVfT1BUU19TSU5HTEVUT04sCisJCQkJICBjaG9pY2UsCisJCQkJICAmY2hvc2VuKTsKKworCQlpZiAob3B0cy0+ZmxhZ3MgJiBNRU5VX09QVFNfU0lOR0xFVE9OKSB7CisJCQlpZiAobnIpCisJCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAob3B0cy0+ZmxhZ3MgJiBNRU5VX09QVFNfSU1NRURJQVRFKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChlb2YpIHsKKwkJcmVzdWx0ID0geG1hbGxvYyhzaXplb2YoaW50KSk7CisJCSpyZXN1bHQgPSBFT0Y7CisJfSBlbHNlIHsKKwkJaW50IGogPSAwOworCisJCS8qCisJCSAqIHJlY2FsY3VsYXRlIG5yLCBpZiByZXR1cm4gYmFjayBmcm9tIG1lbnUgZGlyZWN0bHkgd2l0aAorCQkgKiBkZWZhdWx0IHNlbGVjdGlvbnMuCisJCSAqLworCQlpZiAoIW5yKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgc3R1ZmYtPm5yOyBpKyspCisJCQkJbnIgKz0gY2hvc2VuW2ldOworCQl9CisKKwkJcmVzdWx0ID0geGNhbGxvYyhzdF9hZGQobnIsIDEpLCBzaXplb2YoaW50KSk7CisJCWZvciAoaSA9IDA7IGkgPCBzdHVmZi0+bnIgJiYgaiA8IG5yOyBpKyspIHsKKwkJCWlmIChjaG9zZW5baV0pCisJCQkJcmVzdWx0W2orK10gPSBpOworCQl9CisJCXJlc3VsdFtqXSA9IEVPRjsKKwl9CisKKwlmcmVlKGNob3Nlbik7CisJc3RyYnVmX3JlbGVhc2UoJmNob2ljZSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBjbGVhbl9jbWQodm9pZCkKK3sKKwlyZXR1cm4gTUVOVV9SRVRVUk5fTk9fTE9PUDsKK30KKworc3RhdGljIGludCBmaWx0ZXJfYnlfcGF0dGVybnNfY21kKHZvaWQpCit7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOworCXN0cnVjdCBzdHJidWYgY29uZmlybSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgKippZ25vcmVfbGlzdDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbDsKKwlpbnQgY2hhbmdlZCA9IC0xLCBpOworCisJZm9yICg7OykgeworCQlpZiAoIWRlbF9saXN0Lm5yKQorCQkJYnJlYWs7CisKKwkJaWYgKGNoYW5nZWQpCisJCQlwcmV0dHlfcHJpbnRfZGVscygpOworCisJCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX1BST01QVCk7CisJCXByaW50ZihfKCJJbnB1dCBpZ25vcmUgcGF0dGVybnM+PiAiKSk7CisJCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKTsKKwkJaWYgKGdpdF9yZWFkX2xpbmVfaW50ZXJhY3RpdmVseSgmY29uZmlybSkgPT0gRU9GKQorCQkJcHV0Y2hhcignXG4nKTsKKworCQkvKiBxdWl0IGZpbHRlcl9ieV9wYXR0ZXJuIG1vZGUgaWYgcHJlc3MgRU5URVIgb3IgQ3RybC1EICovCisJCWlmICghY29uZmlybS5sZW4pCisJCQlicmVhazsKKworCQltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCQlwbCA9IGFkZF9wYXR0ZXJuX2xpc3QoJmRpciwgRVhDX0NNREwsICJtYW51YWwgZXhjbHVkZSIpOworCQlpZ25vcmVfbGlzdCA9IHN0cmJ1Zl9zcGxpdF9tYXgoJmNvbmZpcm0sICcgJywgMCk7CisKKwkJZm9yIChpID0gMDsgaWdub3JlX2xpc3RbaV07IGkrKykgeworCQkJc3RyYnVmX3RyaW0oaWdub3JlX2xpc3RbaV0pOworCQkJaWYgKCFpZ25vcmVfbGlzdFtpXS0+bGVuKQorCQkJCWNvbnRpbnVlOworCisJCQlhZGRfcGF0dGVybihpZ25vcmVfbGlzdFtpXS0+YnVmLCAiIiwgMCwgcGwsIC0oaSsxKSk7CisJCX0KKworCQljaGFuZ2VkID0gMDsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZGVsX2xpc3QpIHsKKwkJCWludCBkdHlwZSA9IERUX1VOS05PV047CisKKwkJCWlmIChpc19leGNsdWRlZCgmZGlyLCAmdGhlX2luZGV4LCBpdGVtLT5zdHJpbmcsICZkdHlwZSkpIHsKKwkJCQkqaXRlbS0+c3RyaW5nID0gJ1wwJzsKKwkJCQljaGFuZ2VkKys7CisJCQl9CisJCX0KKworCQlpZiAoY2hhbmdlZCkgeworCQkJc3RyaW5nX2xpc3RfcmVtb3ZlX2VtcHR5X2l0ZW1zKCZkZWxfbGlzdCwgMCk7CisJCX0gZWxzZSB7CisJCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9FUlJPUik7CisJCQlwcmludGZfbG4oXygiV0FSTklORzogQ2Fubm90IGZpbmQgaXRlbXMgbWF0Y2hlZCBieTogJXMiKSwgY29uZmlybS5idWYpOworCQkJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfUkVTRVQpOworCQl9CisKKwkJc3RyYnVmX2xpc3RfZnJlZShpZ25vcmVfbGlzdCk7CisJCWNsZWFyX2RpcmVjdG9yeSgmZGlyKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmY29uZmlybSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2VsZWN0X2J5X251bWJlcnNfY21kKHZvaWQpCit7CisJc3RydWN0IG1lbnVfb3B0cyBtZW51X29wdHM7CisJc3RydWN0IG1lbnVfc3R1ZmYgbWVudV9zdHVmZjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbXM7CisJaW50ICpjaG9zZW47CisJaW50IGksIGo7CisKKwltZW51X29wdHMuaGVhZGVyID0gTlVMTDsKKwltZW51X29wdHMucHJvbXB0ID0gTl8oIlNlbGVjdCBpdGVtcyB0byBkZWxldGUiKTsKKwltZW51X29wdHMuZmxhZ3MgPSAwOworCisJbWVudV9zdHVmZi50eXBlID0gTUVOVV9TVFVGRl9UWVBFX1NUUklOR19MSVNUOworCW1lbnVfc3R1ZmYuc3R1ZmYgPSAmZGVsX2xpc3Q7CisJbWVudV9zdHVmZi5uciA9IGRlbF9saXN0Lm5yOworCisJY2hvc2VuID0gbGlzdF9hbmRfY2hvb3NlKCZtZW51X29wdHMsICZtZW51X3N0dWZmKTsKKwlpdGVtcyA9IGRlbF9saXN0Lml0ZW1zOworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgZGVsX2xpc3QubnI7IGkrKykgeworCQlpZiAoaSA8IGNob3NlbltqXSkgeworCQkJKihpdGVtc1tpXS5zdHJpbmcpID0gJ1wwJzsKKwkJfSBlbHNlIGlmIChpID09IGNob3NlbltqXSkgeworCQkJLyogZGVsZXRlIHNlbGVjdGVkIGl0ZW0gKi8KKwkJCWorKzsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJLyogZW5kIG9mIGNob3NlbiAoY2hvc2VuW2pdID09IEVPRiksIHdvbid0IGRlbGV0ZSAqLworCQkJKihpdGVtc1tpXS5zdHJpbmcpID0gJ1wwJzsKKwkJfQorCX0KKworCXN0cmluZ19saXN0X3JlbW92ZV9lbXB0eV9pdGVtcygmZGVsX2xpc3QsIDApOworCisJZnJlZShjaG9zZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFza19lYWNoX2NtZCh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgY29uZmlybSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJY29uc3QgY2hhciAqcW5hbWU7CisJaW50IGNoYW5nZWQgPSAwLCBlb2YgPSAwOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZGVsX2xpc3QpIHsKKwkJLyogQ3RybC1EIHNob3VsZCBzdG9wIHJlbW92aW5nIGZpbGVzICovCisJCWlmICghZW9mKSB7CisJCQlxbmFtZSA9IHF1b3RlX3BhdGhfcmVsYXRpdmUoaXRlbS0+c3RyaW5nLCBOVUxMLCAmYnVmKTsKKwkJCS8qIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcyAqLworCQkJcHJpbnRmKF8oIlJlbW92ZSAlcyBbeS9OXT8gIiksIHFuYW1lKTsKKwkJCWlmIChnaXRfcmVhZF9saW5lX2ludGVyYWN0aXZlbHkoJmNvbmZpcm0pID09IEVPRikgeworCQkJCXB1dGNoYXIoJ1xuJyk7CisJCQkJZW9mID0gMTsKKwkJCX0KKwkJfQorCQlpZiAoIWNvbmZpcm0ubGVuIHx8IHN0cm5jYXNlY21wKGNvbmZpcm0uYnVmLCAieWVzIiwgY29uZmlybS5sZW4pKSB7CisJCQkqaXRlbS0+c3RyaW5nID0gJ1wwJzsKKwkJCWNoYW5nZWQrKzsKKwkJfQorCX0KKworCWlmIChjaGFuZ2VkKQorCQlzdHJpbmdfbGlzdF9yZW1vdmVfZW1wdHlfaXRlbXMoJmRlbF9saXN0LCAwKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZjb25maXJtKTsKKwlyZXR1cm4gTUVOVV9SRVRVUk5fTk9fTE9PUDsKK30KKworc3RhdGljIGludCBxdWl0X2NtZCh2b2lkKQoreworCXN0cmluZ19saXN0X2NsZWFyKCZkZWxfbGlzdCwgMCk7CisJcHJpbnRmKF8oIkJ5ZS5cbiIpKTsKKwlyZXR1cm4gTUVOVV9SRVRVUk5fTk9fTE9PUDsKK30KKworc3RhdGljIGludCBoZWxwX2NtZCh2b2lkKQoreworCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX0hFTFApOworCXByaW50Zl9sbihfKAorCQkgICAgImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorCQkgICAgImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKwkJICAgICJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorCQkgICAgImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorCQkgICAgInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisJCSAgICAiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisJCSAgICAiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCisJCSAgICkpOworCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW50ZXJhY3RpdmVfbWFpbl9sb29wKHZvaWQpCit7CisJd2hpbGUgKGRlbF9saXN0Lm5yKSB7CisJCXN0cnVjdCBtZW51X29wdHMgbWVudV9vcHRzOworCQlzdHJ1Y3QgbWVudV9zdHVmZiBtZW51X3N0dWZmOworCQlzdHJ1Y3QgbWVudV9pdGVtIG1lbnVzW10gPSB7CisJCQl7J2MnLCAiY2xlYW4iLAkJCTAsIGNsZWFuX2NtZH0sCisJCQl7J2YnLCAiZmlsdGVyIGJ5IHBhdHRlcm4iLAkwLCBmaWx0ZXJfYnlfcGF0dGVybnNfY21kfSwKKwkJCXsncycsICJzZWxlY3QgYnkgbnVtYmVycyIsCTAsIHNlbGVjdF9ieV9udW1iZXJzX2NtZH0sCisJCQl7J2EnLCAiYXNrIGVhY2giLAkJMCwgYXNrX2VhY2hfY21kfSwKKwkJCXsncScsICJxdWl0IiwJCQkwLCBxdWl0X2NtZH0sCisJCQl7J2gnLCAiaGVscCIsCQkJMCwgaGVscF9jbWR9LAorCQl9OworCQlpbnQgKmNob3NlbjsKKworCQltZW51X29wdHMuaGVhZGVyID0gTl8oIioqKiBDb21tYW5kcyAqKioiKTsKKwkJbWVudV9vcHRzLnByb21wdCA9IE5fKCJXaGF0IG5vdyIpOworCQltZW51X29wdHMuZmxhZ3MgPSBNRU5VX09QVFNfU0lOR0xFVE9OOworCisJCW1lbnVfc3R1ZmYudHlwZSA9IE1FTlVfU1RVRkZfVFlQRV9NRU5VX0lURU07CisJCW1lbnVfc3R1ZmYuc3R1ZmYgPSBtZW51czsKKwkJbWVudV9zdHVmZi5uciA9IHNpemVvZihtZW51cykgLyBzaXplb2Yoc3RydWN0IG1lbnVfaXRlbSk7CisKKwkJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfSEVBREVSKTsKKwkJcHJpbnRmX2xuKFFfKCJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIsCisJCQkgICAgICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiLAorCQkJICAgICBkZWxfbGlzdC5ucikpOworCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCk7CisKKwkJcHJldHR5X3ByaW50X2RlbHMoKTsKKworCQljaG9zZW4gPSBsaXN0X2FuZF9jaG9vc2UoJm1lbnVfb3B0cywgJm1lbnVfc3R1ZmYpOworCisJCWlmICgqY2hvc2VuICE9IEVPRikgeworCQkJaW50IHJldDsKKwkJCXJldCA9IG1lbnVzWypjaG9zZW5dLmZuKCk7CisJCQlpZiAocmV0ICE9IE1FTlVfUkVUVVJOX05PX0xPT1ApIHsKKwkJCQlGUkVFX0FORF9OVUxMKGNob3Nlbik7CisJCQkJaWYgKCFkZWxfbGlzdC5ucikgeworCQkJCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9FUlJPUik7CisJCQkJCXByaW50Zl9sbihfKCJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIpKTsKKwkJCQkJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfUkVTRVQpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlxdWl0X2NtZCgpOworCQl9CisKKwkJRlJFRV9BTkRfTlVMTChjaG9zZW4pOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvcnJlY3RfdW50cmFja2VkX2VudHJpZXMoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcikKK3sKKwlpbnQgc3JjLCBkc3QsIGlnbjsKKworCWZvciAoc3JjID0gZHN0ID0gaWduID0gMDsgc3JjIDwgZGlyLT5ucjsgc3JjKyspIHsKKwkJLyogc2tpcCBwYXRocyBpbiBpZ25vcmVkW10gdGhhdCBjYW5ub3QgYmUgaW5zaWRlIGVudHJpZXNbc3JjXSAqLworCQl3aGlsZSAoaWduIDwgZGlyLT5pZ25vcmVkX25yICYmCisJCSAgICAgICAwIDw9IGNtcF9kaXJfZW50cnkoJmRpci0+ZW50cmllc1tzcmNdLCAmZGlyLT5pZ25vcmVkW2lnbl0pKQorCQkJaWduKys7CisKKwkJaWYgKGlnbiA8IGRpci0+aWdub3JlZF9uciAmJgorCQkgICAgY2hlY2tfZGlyX2VudHJ5X2NvbnRhaW5zKGRpci0+ZW50cmllc1tzcmNdLCBkaXItPmlnbm9yZWRbaWduXSkpIHsKKwkJCS8qIGVudHJpZXNbc3JjXSBjb250YWlucyBhbiBpZ25vcmVkIHBhdGgsIHNvIHdlIGRyb3AgaXQgKi8KKwkJCWZyZWUoZGlyLT5lbnRyaWVzW3NyY10pOworCQl9IGVsc2UgeworCQkJc3RydWN0IGRpcl9lbnRyeSAqZW50ID0gZGlyLT5lbnRyaWVzW3NyYysrXTsKKworCQkJLyogZW50cmllc1tzcmNdIGRvZXMgbm90IGNvbnRhaW4gYW4gaWdub3JlZCBwYXRoLCBzbyB3ZSBrZWVwIGl0ICovCisJCQlkaXItPmVudHJpZXNbZHN0KytdID0gZW50OworCisJCQkvKiB0aGVuIGRpc2NhcmQgcGF0aHMgaW4gZW50cmllc1tdIGNvbnRhaW5lZCBpbnNpZGUgZW50cmllc1tzcmNdICovCisJCQl3aGlsZSAoc3JjIDwgZGlyLT5uciAmJgorCQkJICAgICAgIGNoZWNrX2Rpcl9lbnRyeV9jb250YWlucyhlbnQsIGRpci0+ZW50cmllc1tzcmNdKSkKKwkJCQlmcmVlKGRpci0+ZW50cmllc1tzcmMrK10pOworCisJCQkvKiBjb21wZW5zYXRlIGZvciB0aGUgb3V0ZXIgbG9vcCdzIGxvb3AgY29udHJvbCAqLworCQkJc3JjLS07CisJCX0KKwl9CisJZGlyLT5uciA9IGRzdDsKK30KKworaW50IGNtZF9jbGVhbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSwgcmVzOworCWludCBkcnlfcnVuID0gMCwgcmVtb3ZlX2RpcmVjdG9yaWVzID0gMCwgcXVpZXQgPSAwLCBpZ25vcmVkID0gMDsKKwlpbnQgaWdub3JlZF9vbmx5ID0gMCwgY29uZmlnX3NldCA9IDAsIGVycm9ycyA9IDAsIGdvbmUgPSAxOworCWludCBybV9mbGFncyA9IFJFTU9WRV9ESVJfS0VFUF9ORVNURURfR0lUOworCXN0cnVjdCBzdHJidWYgYWJzX3BhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0IGV4Y2x1ZGVfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHBhdHRlcm5fbGlzdCAqcGw7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJY29uc3QgY2hhciAqcW5hbWU7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiKSksCisJCU9QVF9fRFJZX1JVTigmZHJ5X3J1biwgTl8oImRyeSBydW4iKSksCisJCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygiZm9yY2UiKSwgUEFSU0VfT1BUX05PQ09NUExFVEUpLAorCQlPUFRfQk9PTCgnaScsICJpbnRlcmFjdGl2ZSIsICZpbnRlcmFjdGl2ZSwgTl8oImludGVyYWN0aXZlIGNsZWFuaW5nIikpLAorCQlPUFRfQk9PTCgnZCcsIE5VTEwsICZyZW1vdmVfZGlyZWN0b3JpZXMsCisJCQkJTl8oInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIpKSwKKwkJT1BUX0NBTExCQUNLX0YoJ2UnLCAiZXhjbHVkZSIsICZleGNsdWRlX2xpc3QsIE5fKCJwYXR0ZXJuIiksCisJCSAgTl8oImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIiksIFBBUlNFX09QVF9OT05FRywgZXhjbHVkZV9jYiksCisJCU9QVF9CT09MKCd4JywgTlVMTCwgJmlnbm9yZWQsIE5fKCJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIikpLAorCQlPUFRfQk9PTCgnWCcsIE5VTEwsICZpZ25vcmVkX29ubHksCisJCQkJTl8oInJlbW92ZSBvbmx5IGlnbm9yZWQgZmlsZXMiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF9jbGVhbl9jb25maWcsIE5VTEwpOworCWlmIChmb3JjZSA8IDApCisJCWZvcmNlID0gMDsKKwllbHNlCisJCWNvbmZpZ19zZXQgPSAxOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBidWlsdGluX2NsZWFuX3VzYWdlLAorCQkJICAgICAwKTsKKworCW1lbXNldCgmZGlyLCAwLCBzaXplb2YoZGlyKSk7CisJaWYgKGlnbm9yZWRfb25seSkKKwkJZGlyLmZsYWdzIHw9IERJUl9TSE9XX0lHTk9SRUQ7CisKKwlpZiAoaWdub3JlZCAmJiBpZ25vcmVkX29ubHkpCisJCWRpZShfKCIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKSk7CisKKwlpZiAoIWludGVyYWN0aXZlICYmICFkcnlfcnVuICYmICFmb3JjZSkgeworCQlpZiAoY29uZmlnX3NldCkKKwkJCWRpZShfKCJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKwkJCQkgICJyZWZ1c2luZyB0byBjbGVhbiIpKTsKKwkJZWxzZQorCQkJZGllKF8oImNsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0cyB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyIKKwkJCQkgICIgcmVmdXNpbmcgdG8gY2xlYW4iKSk7CisJfQorCisJaWYgKGZvcmNlID4gMSkKKwkJcm1fZmxhZ3MgPSAwOworCWVsc2UKKwkJZGlyLmZsYWdzIHw9IERJUl9TS0lQX05FU1RFRF9HSVQ7CisKKwlkaXIuZmxhZ3MgfD0gRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVM7CisKKwlpZiAoYXJnYykgeworCQkvKgorCQkgKiBSZW1haW5pbmcgYXJncyBpbXBsaWVzIHBhdGhzcGVjcyBzcGVjaWZpZWQsIGFuZCB3ZSBzaG91bGQKKwkJICogcmVjdXJzZSB3aXRoaW4gdGhvc2UuCisJCSAqLworCQlyZW1vdmVfZGlyZWN0b3JpZXMgPSAxOworCX0KKworCWlmIChyZW1vdmVfZGlyZWN0b3JpZXMpCisJCWRpci5mbGFncyB8PSBESVJfU0hPV19JR05PUkVEX1RPTyB8IERJUl9LRUVQX1VOVFJBQ0tFRF9DT05URU5UUzsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJaWYgKCFpZ25vcmVkKQorCQlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKKworCXBsID0gYWRkX3BhdHRlcm5fbGlzdCgmZGlyLCBFWENfQ01ETCwgIi0tZXhjbHVkZSBvcHRpb24iKTsKKwlmb3IgKGkgPSAwOyBpIDwgZXhjbHVkZV9saXN0Lm5yOyBpKyspCisJCWFkZF9wYXR0ZXJuKGV4Y2x1ZGVfbGlzdC5pdGVtc1tpXS5zdHJpbmcsICIiLCAwLCBwbCwgLShpKzEpKTsKKworCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywgMCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9DV0QsCisJCSAgICAgICBwcmVmaXgsIGFyZ3YpOworCisJZmlsbF9kaXJlY3RvcnkoJmRpciwgJnRoZV9pbmRleCwgJnBhdGhzcGVjKTsKKwljb3JyZWN0X3VudHJhY2tlZF9lbnRyaWVzKCZkaXIpOworCisJZm9yIChpID0gMDsgaSA8IGRpci5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaXJfZW50cnkgKmVudCA9IGRpci5lbnRyaWVzW2ldOworCQlpbnQgbWF0Y2hlcyA9IDA7CisJCXN0cnVjdCBzdGF0IHN0OworCQljb25zdCBjaGFyICpyZWw7CisKKwkJaWYgKCFjYWNoZV9uYW1lX2lzX290aGVyKGVudC0+bmFtZSwgZW50LT5sZW4pKQorCQkJY29udGludWU7CisKKwkJaWYgKGxzdGF0KGVudC0+bmFtZSwgJnN0KSkKKwkJCWRpZV9lcnJubygiQ2Fubm90IGxzdGF0ICclcyciLCBlbnQtPm5hbWUpOworCisJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpICYmICFyZW1vdmVfZGlyZWN0b3JpZXMgJiYKKwkJICAgIG1hdGNoZXMgIT0gTUFUQ0hFRF9FWEFDVExZKQorCQkJY29udGludWU7CisKKwkJcmVsID0gcmVsYXRpdmVfcGF0aChlbnQtPm5hbWUsIHByZWZpeCwgJmJ1Zik7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmZGVsX2xpc3QsIHJlbCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRpci5ucjsgaSsrKQorCQlmcmVlKGRpci5lbnRyaWVzW2ldKTsKKworCWZvciAoaSA9IDA7IGkgPCBkaXIuaWdub3JlZF9ucjsgaSsrKQorCQlmcmVlKGRpci5pZ25vcmVkW2ldKTsKKworCWlmIChpbnRlcmFjdGl2ZSAmJiBkZWxfbGlzdC5uciA+IDApCisJCWludGVyYWN0aXZlX21haW5fbG9vcCgpOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZGVsX2xpc3QpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisKKwkJc3RyYnVmX3Jlc2V0KCZhYnNfcGF0aCk7CisJCWlmIChwcmVmaXgpCisJCQlzdHJidWZfYWRkc3RyKCZhYnNfcGF0aCwgcHJlZml4KTsKKworCQlzdHJidWZfYWRkc3RyKCZhYnNfcGF0aCwgaXRlbS0+c3RyaW5nKTsKKworCQkvKgorCQkgKiB3ZSBtaWdodCBoYXZlIHJlbW92ZWQgdGhpcyBhcyBwYXJ0IG9mIGVhcmxpZXIKKwkJICogcmVjdXJzaXZlIGRpcmVjdG9yeSByZW1vdmFsLCBzbyBsc3RhdCgpIGhlcmUgY291bGQKKwkJICogZmFpbCB3aXRoIEVOT0VOVC4KKwkJICovCisJCWlmIChsc3RhdChhYnNfcGF0aC5idWYsICZzdCkpCisJCQljb250aW51ZTsKKworCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJaWYgKHJlbW92ZV9kaXJzKCZhYnNfcGF0aCwgcHJlZml4LCBybV9mbGFncywgZHJ5X3J1biwgcXVpZXQsICZnb25lKSkKKwkJCQllcnJvcnMrKzsKKwkJCWlmIChnb25lICYmICFxdWlldCkgeworCQkJCXFuYW1lID0gcXVvdGVfcGF0aF9yZWxhdGl2ZShpdGVtLT5zdHJpbmcsIE5VTEwsICZidWYpOworCQkJCXByaW50ZihkcnlfcnVuID8gXyhtc2dfd291bGRfcmVtb3ZlKSA6IF8obXNnX3JlbW92ZSksIHFuYW1lKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJlcyA9IGRyeV9ydW4gPyAwIDogdW5saW5rKGFic19wYXRoLmJ1Zik7CisJCQlpZiAocmVzKSB7CisJCQkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCQkJcW5hbWUgPSBxdW90ZV9wYXRoX3JlbGF0aXZlKGl0ZW0tPnN0cmluZywgTlVMTCwgJmJ1Zik7CisJCQkJZXJybm8gPSBzYXZlZF9lcnJubzsKKwkJCQl3YXJuaW5nX2Vycm5vKF8obXNnX3dhcm5fcmVtb3ZlX2ZhaWxlZCksIHFuYW1lKTsKKwkJCQllcnJvcnMrKzsKKwkJCX0gZWxzZSBpZiAoIXF1aWV0KSB7CisJCQkJcW5hbWUgPSBxdW90ZV9wYXRoX3JlbGF0aXZlKGl0ZW0tPnN0cmluZywgTlVMTCwgJmJ1Zik7CisJCQkJcHJpbnRmKGRyeV9ydW4gPyBfKG1zZ193b3VsZF9yZW1vdmUpIDogXyhtc2dfcmVtb3ZlKSwgcW5hbWUpOworCQkJfQorCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmFic19wYXRoKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZGVsX2xpc3QsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZleGNsdWRlX2xpc3QsIDApOworCXJldHVybiAoZXJyb3JzICE9IDApOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jbG9uZS5jIGIvYnVpbHRpbi9jbG9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNDhhMjkKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2Nsb25lLmMKQEAgLTAsMCArMSwxMzE1IEBACisvKgorICogQnVpbHRpbiAiZ2l0IGNsb25lIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBLcmlzdGlhbiBIw7hnc2JlcmcgPGtyaEByZWRoYXQuY29tPiwKKyAqCQkgMjAwOCBEYW5pZWwgQmFya2Fsb3cgPGJhcmthbG93QGlhYmVydm9uLm9yZz4KKyAqIEJhc2VkIG9uIGdpdC1jb21taXQuc2ggYnkgSnVuaW8gQyBIYW1hbm8gYW5kIExpbnVzIFRvcnZhbGRzCisgKgorICogQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5IHRoYXQgZG9lcyBub3QgeWV0IGV4aXN0LgorICovCisKKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJmZXRjaC1wYWNrLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlZnNwZWMuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiZGlyLWl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiaXRlcmF0b3IuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiY29ubmVjdGVkLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaCIKKworLyoKKyAqIE92ZXJhbGwgRklYTUVzOgorICogIC0gcmVzcGVjdCBEQl9FTlZJUk9OTUVOVCBmb3IgLmdpdC9vYmplY3RzLgorICoKKyAqIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICogIC0gZHJvcHBpbmcgdXNlLXNlcGFyYXRlLXJlbW90ZSBhbmQgbm8tc2VwYXJhdGUtcmVtb3RlIGNvbXBhdGliaWxpdHkKKyAqCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9jbG9uZV91c2FnZVtdID0geworCU5fKCJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgb3B0aW9uX25vX2NoZWNrb3V0LCBvcHRpb25fYmFyZSwgb3B0aW9uX21pcnJvciwgb3B0aW9uX3NpbmdsZV9icmFuY2ggPSAtMTsKK3N0YXRpYyBpbnQgb3B0aW9uX2xvY2FsID0gLTEsIG9wdGlvbl9ub19oYXJkbGlua3MsIG9wdGlvbl9zaGFyZWQ7CitzdGF0aWMgaW50IG9wdGlvbl9ub190YWdzOworc3RhdGljIGludCBvcHRpb25fc2hhbGxvd19zdWJtb2R1bGVzOworc3RhdGljIGludCBkZWVwZW47CitzdGF0aWMgY2hhciAqb3B0aW9uX3RlbXBsYXRlLCAqb3B0aW9uX2RlcHRoLCAqb3B0aW9uX3NpbmNlOworc3RhdGljIGNoYXIgKm9wdGlvbl9vcmlnaW4gPSBOVUxMOworc3RhdGljIGNoYXIgKm9wdGlvbl9icmFuY2ggPSBOVUxMOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBvcHRpb25fbm90ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKK3N0YXRpYyBjb25zdCBjaGFyICpyZWFsX2dpdF9kaXI7CitzdGF0aWMgY2hhciAqb3B0aW9uX3VwbG9hZF9wYWNrID0gImdpdC11cGxvYWQtcGFjayI7CitzdGF0aWMgaW50IG9wdGlvbl92ZXJib3NpdHk7CitzdGF0aWMgaW50IG9wdGlvbl9wcm9ncmVzcyA9IC0xOworc3RhdGljIGludCBvcHRpb25fc3BhcnNlX2NoZWNrb3V0Oworc3RhdGljIGVudW0gdHJhbnNwb3J0X2ZhbWlseSBmYW1pbHk7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG9wdGlvbl9jb25maWcgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBvcHRpb25fcmVxdWlyZWRfcmVmZXJlbmNlID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3Qgb3B0aW9uX29wdGlvbmFsX3JlZmVyZW5jZSA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgaW50IG9wdGlvbl9kaXNzb2NpYXRlOworc3RhdGljIGludCBtYXhfam9icyA9IC0xOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBvcHRpb25fcmVjdXJzZV9zdWJtb2R1bGVzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zIGZpbHRlcl9vcHRpb25zOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBzZXJ2ZXJfb3B0aW9ucyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgaW50IG9wdGlvbl9yZW1vdGVfc3VibW9kdWxlczsKKworc3RhdGljIGludCByZWN1cnNlX3N1Ym1vZHVsZXNfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpCisJCXN0cmluZ19saXN0X2NsZWFyKChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKilvcHQtPnZhbHVlLCAwKTsKKwllbHNlIGlmIChhcmcpCisJCXN0cmluZ19saXN0X2FwcGVuZCgoc3RydWN0IHN0cmluZ19saXN0ICopb3B0LT52YWx1ZSwgYXJnKTsKKwllbHNlCisJCXN0cmluZ19saXN0X2FwcGVuZCgoc3RydWN0IHN0cmluZ19saXN0ICopb3B0LT52YWx1ZSwKKwkJCQkgICAoY29uc3QgY2hhciAqKW9wdC0+ZGVmdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2Nsb25lX29wdGlvbnNbXSA9IHsKKwlPUFRfX1ZFUkJPU0lUWSgmb3B0aW9uX3ZlcmJvc2l0eSksCisJT1BUX0JPT0woMCwgInByb2dyZXNzIiwgJm9wdGlvbl9wcm9ncmVzcywKKwkJIE5fKCJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciKSksCisJT1BUX0JPT0woJ24nLCAibm8tY2hlY2tvdXQiLCAmb3B0aW9uX25vX2NoZWNrb3V0LAorCQkgTl8oImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IikpLAorCU9QVF9CT09MKDAsICJiYXJlIiwgJm9wdGlvbl9iYXJlLCBOXygiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IikpLAorCU9QVF9ISURERU5fQk9PTCgwLCAibmFrZWQiLCAmb3B0aW9uX2JhcmUsCisJCQlOXygiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IikpLAorCU9QVF9CT09MKDAsICJtaXJyb3IiLCAmb3B0aW9uX21pcnJvciwKKwkJIE5fKCJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIpKSwKKwlPUFRfQk9PTCgnbCcsICJsb2NhbCIsICZvcHRpb25fbG9jYWwsCisJCU5fKCJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIpKSwKKwlPUFRfQk9PTCgwLCAibm8taGFyZGxpbmtzIiwgJm9wdGlvbl9ub19oYXJkbGlua3MsCisJCSAgICBOXygiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiKSksCisJT1BUX0JPT0woJ3MnLCAic2hhcmVkIiwgJm9wdGlvbl9zaGFyZWQsCisJCSAgICBOXygic2V0dXAgYXMgc2hhcmVkIHJlcG9zaXRvcnkiKSksCisJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJyZWN1cnNlLXN1Ym1vZHVsZXMiLCAmb3B0aW9uX3JlY3Vyc2Vfc3VibW9kdWxlcywKKwkgIE5fKCJwYXRoc3BlYyIpLCBOXygiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIpLAorCSAgUEFSU0VfT1BUX09QVEFSRywgcmVjdXJzZV9zdWJtb2R1bGVzX2NiLCAoaW50cHRyX3QpIi4iIH0sCisJT1BUX0FMSUFTKDAsICJyZWN1cnNpdmUiLCAicmVjdXJzZS1zdWJtb2R1bGVzIiksCisJT1BUX0lOVEVHRVIoJ2onLCAiam9icyIsICZtYXhfam9icywKKwkJICAgIE5fKCJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiKSksCisJT1BUX1NUUklORygwLCAidGVtcGxhdGUiLCAmb3B0aW9uX3RlbXBsYXRlLCBOXygidGVtcGxhdGUtZGlyZWN0b3J5IiksCisJCSAgIE5fKCJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIikpLAorCU9QVF9TVFJJTkdfTElTVCgwLCAicmVmZXJlbmNlIiwgJm9wdGlvbl9yZXF1aXJlZF9yZWZlcmVuY2UsIE5fKCJyZXBvIiksCisJCQlOXygicmVmZXJlbmNlIHJlcG9zaXRvcnkiKSksCisJT1BUX1NUUklOR19MSVNUKDAsICJyZWZlcmVuY2UtaWYtYWJsZSIsICZvcHRpb25fb3B0aW9uYWxfcmVmZXJlbmNlLAorCQkJTl8oInJlcG8iKSwgTl8oInJlZmVyZW5jZSByZXBvc2l0b3J5IikpLAorCU9QVF9CT09MKDAsICJkaXNzb2NpYXRlIiwgJm9wdGlvbl9kaXNzb2NpYXRlLAorCQkgTl8oInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciKSksCisJT1BUX1NUUklORygnbycsICJvcmlnaW4iLCAmb3B0aW9uX29yaWdpbiwgTl8oIm5hbWUiKSwKKwkJICAgTl8oInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIpKSwKKwlPUFRfU1RSSU5HKCdiJywgImJyYW5jaCIsICZvcHRpb25fYnJhbmNoLCBOXygiYnJhbmNoIiksCisJCSAgIE5fKCJjaGVja291dCA8YnJhbmNoPiBpbnN0ZWFkIG9mIHRoZSByZW1vdGUncyBIRUFEIikpLAorCU9QVF9TVFJJTkcoJ3UnLCAidXBsb2FkLXBhY2siLCAmb3B0aW9uX3VwbG9hZF9wYWNrLCBOXygicGF0aCIpLAorCQkgICBOXygicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIpKSwKKwlPUFRfU1RSSU5HKDAsICJkZXB0aCIsICZvcHRpb25fZGVwdGgsIE5fKCJkZXB0aCIpLAorCQkgICAgTl8oImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIpKSwKKwlPUFRfU1RSSU5HKDAsICJzaGFsbG93LXNpbmNlIiwgJm9wdGlvbl9zaW5jZSwgTl8oInRpbWUiKSwKKwkJICAgIE5fKCJjcmVhdGUgYSBzaGFsbG93IGNsb25lIHNpbmNlIGEgc3BlY2lmaWMgdGltZSIpKSwKKwlPUFRfU1RSSU5HX0xJU1QoMCwgInNoYWxsb3ctZXhjbHVkZSIsICZvcHRpb25fbm90LCBOXygicmV2aXNpb24iKSwKKwkJCU5fKCJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lLCBleGNsdWRpbmcgcmV2IikpLAorCU9QVF9CT09MKDAsICJzaW5nbGUtYnJhbmNoIiwgJm9wdGlvbl9zaW5nbGVfYnJhbmNoLAorCQkgICAgTl8oImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIpKSwKKwlPUFRfQk9PTCgwLCAibm8tdGFncyIsICZvcHRpb25fbm9fdGFncywKKwkJIE5fKCJkb24ndCBjbG9uZSBhbnkgdGFncywgYW5kIG1ha2UgbGF0ZXIgZmV0Y2hlcyBub3QgdG8gZm9sbG93IHRoZW0iKSksCisJT1BUX0JPT0woMCwgInNoYWxsb3ctc3VibW9kdWxlcyIsICZvcHRpb25fc2hhbGxvd19zdWJtb2R1bGVzLAorCQkgICAgTl8oImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIGJlIHNoYWxsb3ciKSksCisJT1BUX1NUUklORygwLCAic2VwYXJhdGUtZ2l0LWRpciIsICZyZWFsX2dpdF9kaXIsIE5fKCJnaXRkaXIiKSwKKwkJICAgTl8oInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiKSksCisJT1BUX1NUUklOR19MSVNUKCdjJywgImNvbmZpZyIsICZvcHRpb25fY29uZmlnLCBOXygia2V5PXZhbHVlIiksCisJCQlOXygic2V0IGNvbmZpZyBpbnNpZGUgdGhlIG5ldyByZXBvc2l0b3J5IikpLAorCU9QVF9TVFJJTkdfTElTVCgwLCAic2VydmVyLW9wdGlvbiIsICZzZXJ2ZXJfb3B0aW9ucywKKwkJCU5fKCJzZXJ2ZXItc3BlY2lmaWMiKSwgTl8oIm9wdGlvbiB0byB0cmFuc21pdCIpKSwKKwlPUFRfU0VUX0lOVCgnNCcsICJpcHY0IiwgJmZhbWlseSwgTl8oInVzZSBJUHY0IGFkZHJlc3NlcyBvbmx5IiksCisJCQlUUkFOU1BPUlRfRkFNSUxZX0lQVjQpLAorCU9QVF9TRVRfSU5UKCc2JywgImlwdjYiLCAmZmFtaWx5LCBOXygidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiKSwKKwkJCVRSQU5TUE9SVF9GQU1JTFlfSVBWNiksCisJT1BUX1BBUlNFX0xJU1RfT0JKRUNUU19GSUxURVIoJmZpbHRlcl9vcHRpb25zKSwKKwlPUFRfQk9PTCgwLCAicmVtb3RlLXN1Ym1vZHVsZXMiLCAmb3B0aW9uX3JlbW90ZV9zdWJtb2R1bGVzLAorCQkgICAgTl8oImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIHVzZSB0aGVpciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIikpLAorCU9QVF9CT09MKDAsICJzcGFyc2UiLCAmb3B0aW9uX3NwYXJzZV9jaGVja291dCwKKwkJICAgIE5fKCJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCBmaWxlIHRvIGluY2x1ZGUgb25seSBmaWxlcyBhdCByb290IikpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9yZXBvX3BhdGhfMShzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBpbnQgKmlzX2J1bmRsZSkKK3sKKwlzdGF0aWMgY2hhciAqc3VmZml4W10gPSB7ICIvLmdpdCIsICIiLCAiLmdpdC8uZ2l0IiwgIi5naXQiIH07CisJc3RhdGljIGNoYXIgKmJ1bmRsZV9zdWZmaXhbXSA9IHsgIi5idW5kbGUiLCAiIiB9OworCXNpemVfdCBiYXNlbGVuID0gcGF0aC0+bGVuOworCXN0cnVjdCBzdGF0IHN0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3VmZml4KTsgaSsrKSB7CisJCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgYmFzZWxlbik7CisJCXN0cmJ1Zl9hZGRzdHIocGF0aCwgc3VmZml4W2ldKTsKKwkJaWYgKHN0YXQocGF0aC0+YnVmLCAmc3QpKQorCQkJY29udGludWU7CisJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpICYmIGlzX2dpdF9kaXJlY3RvcnkocGF0aC0+YnVmKSkgeworCQkJKmlzX2J1bmRsZSA9IDA7CisJCQlyZXR1cm4gcGF0aC0+YnVmOworCQl9IGVsc2UgaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkgJiYgc3Quc3Rfc2l6ZSA+IDgpIHsKKwkJCS8qIElzIGl0IGEgImdpdGZpbGUiPyAqLworCQkJY2hhciBzaWduYXR1cmVbOF07CisJCQljb25zdCBjaGFyICpkc3Q7CisJCQlpbnQgbGVuLCBmZCA9IG9wZW4ocGF0aC0+YnVmLCBPX1JET05MWSk7CisJCQlpZiAoZmQgPCAwKQorCQkJCWNvbnRpbnVlOworCQkJbGVuID0gcmVhZF9pbl9mdWxsKGZkLCBzaWduYXR1cmUsIDgpOworCQkJY2xvc2UoZmQpOworCQkJaWYgKGxlbiAhPSA4IHx8IHN0cm5jbXAoc2lnbmF0dXJlLCAiZ2l0ZGlyOiAiLCA4KSkKKwkJCQljb250aW51ZTsKKwkJCWRzdCA9IHJlYWRfZ2l0ZmlsZShwYXRoLT5idWYpOworCQkJaWYgKGRzdCkgeworCQkJCSppc19idW5kbGUgPSAwOworCQkJCXJldHVybiBkc3Q7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidW5kbGVfc3VmZml4KTsgaSsrKSB7CisJCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgYmFzZWxlbik7CisJCXN0cmJ1Zl9hZGRzdHIocGF0aCwgYnVuZGxlX3N1ZmZpeFtpXSk7CisJCWlmICghc3RhdChwYXRoLT5idWYsICZzdCkgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkgeworCQkJKmlzX2J1bmRsZSA9IDE7CisJCQlyZXR1cm4gcGF0aC0+YnVmOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfcmVwb19wYXRoKGNvbnN0IGNoYXIgKnJlcG8sIGludCAqaXNfYnVuZGxlKQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnJhdzsKKwljaGFyICpjYW5vbjsKKworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIHJlcG8pOworCXJhdyA9IGdldF9yZXBvX3BhdGhfMSgmcGF0aCwgaXNfYnVuZGxlKTsKKwljYW5vbiA9IHJhdyA/IGFic29sdXRlX3BhdGhkdXAocmF3KSA6IE5VTEw7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCXJldHVybiBjYW5vbjsKK30KKworc3RhdGljIGNoYXIgKmd1ZXNzX2Rpcl9uYW1lKGNvbnN0IGNoYXIgKnJlcG8sIGludCBpc19idW5kbGUsIGludCBpc19iYXJlKQoreworCWNvbnN0IGNoYXIgKmVuZCA9IHJlcG8gKyBzdHJsZW4ocmVwbyksICpzdGFydCwgKnB0cjsKKwlzaXplX3QgbGVuOworCWNoYXIgKmRpcjsKKworCS8qCisJICogU2tpcCBzY2hlbWUuCisJICovCisJc3RhcnQgPSBzdHJzdHIocmVwbywgIjovLyIpOworCWlmIChzdGFydCA9PSBOVUxMKQorCQlzdGFydCA9IHJlcG87CisJZWxzZQorCQlzdGFydCArPSAzOworCisJLyoKKwkgKiBTa2lwIGF1dGhlbnRpY2F0aW9uIGRhdGEuIFRoZSBzdHJpcHBpbmcgZG9lcyBoYXBwZW4KKwkgKiBncmVlZGlseSwgc3VjaCB0aGF0IHdlIHN0cmlwIHVwIHRvIHRoZSBsYXN0ICdAJyBpbnNpZGUKKwkgKiB0aGUgaG9zdCBwYXJ0LgorCSAqLworCWZvciAocHRyID0gc3RhcnQ7IHB0ciA8IGVuZCAmJiAhaXNfZGlyX3NlcCgqcHRyKTsgcHRyKyspIHsKKwkJaWYgKCpwdHIgPT0gJ0AnKQorCQkJc3RhcnQgPSBwdHIgKyAxOworCX0KKworCS8qCisJICogU3RyaXAgdHJhaWxpbmcgc3BhY2VzLCBzbGFzaGVzIGFuZCAvLmdpdAorCSAqLworCXdoaWxlIChzdGFydCA8IGVuZCAmJiAoaXNfZGlyX3NlcChlbmRbLTFdKSB8fCBpc3NwYWNlKGVuZFstMV0pKSkKKwkJZW5kLS07CisJaWYgKGVuZCAtIHN0YXJ0ID4gNSAmJiBpc19kaXJfc2VwKGVuZFstNV0pICYmCisJICAgICFzdHJuY21wKGVuZCAtIDQsICIuZ2l0IiwgNCkpIHsKKwkJZW5kIC09IDU7CisJCXdoaWxlIChzdGFydCA8IGVuZCAmJiBpc19kaXJfc2VwKGVuZFstMV0pKQorCQkJZW5kLS07CisJfQorCisJLyoKKwkgKiBTdHJpcCB0cmFpbGluZyBwb3J0IG51bWJlciBpZiB3ZSd2ZSBnb3Qgb25seSBhCisJICogaG9zdG5hbWUgKHRoYXQgaXMsIHRoZXJlIGlzIG5vIGRpciBzZXBhcmF0b3IgYnV0IGEKKwkgKiBjb2xvbikuIFRoaXMgY2hlY2sgaXMgcmVxdWlyZWQgc3VjaCB0aGF0IHdlIGRvIG5vdAorCSAqIHN0cmlwIFVSSSdzIGxpa2UgJy9mb28vYmFyOjIyMjIuZ2l0Jywgd2hpY2ggc2hvdWxkCisJICogcmVzdWx0IGluIGEgZGlyICcyMjIyJyBiZWluZyBndWVzc2VkIGR1ZSB0byBiYWNrd2FyZHMKKwkgKiBjb21wYXRpYmlsaXR5LgorCSAqLworCWlmIChtZW1jaHIoc3RhcnQsICcvJywgZW5kIC0gc3RhcnQpID09IE5VTEwKKwkgICAgJiYgbWVtY2hyKHN0YXJ0LCAnOicsIGVuZCAtIHN0YXJ0KSAhPSBOVUxMKSB7CisJCXB0ciA9IGVuZDsKKwkJd2hpbGUgKHN0YXJ0IDwgcHRyICYmIGlzZGlnaXQocHRyWy0xXSkgJiYgcHRyWy0xXSAhPSAnOicpCisJCQlwdHItLTsKKwkJaWYgKHN0YXJ0IDwgcHRyICYmIHB0clstMV0gPT0gJzonKQorCQkJZW5kID0gcHRyIC0gMTsKKwl9CisKKwkvKgorCSAqIEZpbmQgbGFzdCBjb21wb25lbnQuIFRvIHJlbWFpbiBiYWNrd2FyZHMgY29tcGF0aWJsZSB3ZQorCSAqIGFsc28gcmVnYXJkIGNvbG9ucyBhcyBwYXRoIHNlcGFyYXRvcnMsIHN1Y2ggdGhhdAorCSAqIGNsb25pbmcgYSByZXBvc2l0b3J5ICdmb286YmFyLmdpdCcgd291bGQgcmVzdWx0IGluIGEKKwkgKiBkaXJlY3RvcnkgJ2JhcicgYmVpbmcgZ3Vlc3NlZC4KKwkgKi8KKwlwdHIgPSBlbmQ7CisJd2hpbGUgKHN0YXJ0IDwgcHRyICYmICFpc19kaXJfc2VwKHB0clstMV0pICYmIHB0clstMV0gIT0gJzonKQorCQlwdHItLTsKKwlzdGFydCA9IHB0cjsKKworCS8qCisJICogU3RyaXAgLntidW5kbGUsZ2l0fS4KKwkgKi8KKwlsZW4gPSBlbmQgLSBzdGFydDsKKwlzdHJpcF9zdWZmaXhfbWVtKHN0YXJ0LCAmbGVuLCBpc19idW5kbGUgPyAiLmJ1bmRsZSIgOiAiLmdpdCIpOworCisJaWYgKCFsZW4gfHwgKGxlbiA9PSAxICYmICpzdGFydCA9PSAnLycpKQorCQlkaWUoXygiTm8gZGlyZWN0b3J5IG5hbWUgY291bGQgYmUgZ3Vlc3NlZC5cbiIKKwkJICAgICAgIlBsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG9uIHRoZSBjb21tYW5kIGxpbmUiKSk7CisKKwlpZiAoaXNfYmFyZSkKKwkJZGlyID0geHN0cmZtdCgiJS4qcy5naXQiLCAoaW50KWxlbiwgc3RhcnQpOworCWVsc2UKKwkJZGlyID0geHN0cm5kdXAoc3RhcnQsIGxlbik7CisJLyoKKwkgKiBSZXBsYWNlIHNlcXVlbmNlcyBvZiAnY29udHJvbCcgY2hhcmFjdGVycyBhbmQgd2hpdGVzcGFjZQorCSAqIHdpdGggb25lIGFzY2lpIHNwYWNlLCByZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzLgorCSAqLworCWlmICgqZGlyKSB7CisJCWNoYXIgKm91dCA9IGRpcjsKKwkJaW50IHByZXZfc3BhY2UgPSAxIC8qIHN0cmlwIGxlYWRpbmcgd2hpdGVzcGFjZSAqLzsKKwkJZm9yIChlbmQgPSBkaXI7ICplbmQ7ICsrZW5kKSB7CisJCQljaGFyIGNoID0gKmVuZDsKKwkJCWlmICgodW5zaWduZWQgY2hhciljaCA8ICdceDIwJykKKwkJCQljaCA9ICdceDIwJzsKKwkJCWlmIChpc3NwYWNlKGNoKSkgeworCQkJCWlmIChwcmV2X3NwYWNlKQorCQkJCQljb250aW51ZTsKKwkJCQlwcmV2X3NwYWNlID0gMTsKKwkJCX0gZWxzZQorCQkJCXByZXZfc3BhY2UgPSAwOworCQkJKm91dCsrID0gY2g7CisJCX0KKwkJKm91dCA9ICdcMCc7CisJCWlmIChvdXQgPiBkaXIgJiYgcHJldl9zcGFjZSkKKwkJCW91dFstMV0gPSAnXDAnOworCX0KKwlyZXR1cm4gZGlyOworfQorCitzdGF0aWMgdm9pZCBzdHJpcF90cmFpbGluZ19zbGFzaGVzKGNoYXIgKmRpcikKK3sKKwljaGFyICplbmQgPSBkaXIgKyBzdHJsZW4oZGlyKTsKKworCXdoaWxlIChkaXIgPCBlbmQgLSAxICYmIGlzX2Rpcl9zZXAoZW5kWy0xXSkpCisJCWVuZC0tOworCSplbmQgPSAnXDAnOworfQorCitzdGF0aWMgaW50IGFkZF9vbmVfcmVmZXJlbmNlKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJaW50ICpyZXF1aXJlZCA9IGNiX2RhdGE7CisJY2hhciAqcmVmX2dpdCA9IGNvbXB1dGVfYWx0ZXJuYXRlX3BhdGgoaXRlbS0+c3RyaW5nLCAmZXJyKTsKKworCWlmICghcmVmX2dpdCkgeworCQlpZiAoKnJlcXVpcmVkKQorCQkJZGllKCIlcyIsIGVyci5idWYpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJpbmZvOiBDb3VsZCBub3QgYWRkIGFsdGVybmF0ZSBmb3IgJyVzJzogJXNcbiIpLAorCQkJCWl0ZW0tPnN0cmluZywgZXJyLmJ1Zik7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkZigmc2IsICIlcy9vYmplY3RzIiwgcmVmX2dpdCk7CisJCWFkZF90b19hbHRlcm5hdGVzX2ZpbGUoc2IuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlmcmVlKHJlZl9naXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9yZWZlcmVuY2Uodm9pZCkKK3sKKwlpbnQgcmVxdWlyZWQgPSAxOworCWZvcl9lYWNoX3N0cmluZ19saXN0KCZvcHRpb25fcmVxdWlyZWRfcmVmZXJlbmNlLAorCQkJICAgICBhZGRfb25lX3JlZmVyZW5jZSwgJnJlcXVpcmVkKTsKKwlyZXF1aXJlZCA9IDA7CisJZm9yX2VhY2hfc3RyaW5nX2xpc3QoJm9wdGlvbl9vcHRpb25hbF9yZWZlcmVuY2UsCisJCQkgICAgIGFkZF9vbmVfcmVmZXJlbmNlLCAmcmVxdWlyZWQpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2FsdGVybmF0ZXMoc3RydWN0IHN0cmJ1ZiAqc3JjLCBjb25zdCBjaGFyICpzcmNfcmVwbykKK3sKKwkvKgorCSAqIFJlYWQgZnJvbSB0aGUgc291cmNlIG9iamVjdHMvaW5mby9hbHRlcm5hdGVzIGZpbGUKKwkgKiBhbmQgY29weSB0aGUgZW50cmllcyB0byBjb3JyZXNwb25kaW5nIGZpbGUgaW4gdGhlCisJICogZGVzdGluYXRpb24gcmVwb3NpdG9yeSB3aXRoIGFkZF90b19hbHRlcm5hdGVzX2ZpbGUoKS4KKwkgKiBCb3RoIHNyYyBhbmQgZHN0IGhhdmUgIiRwYXRoL29iamVjdHMvaW5mby9hbHRlcm5hdGVzIi4KKwkgKgorCSAqIEluc3RlYWQgb2YgY29weWluZyBiaXQtZm9yLWJpdCBmcm9tIHRoZSBvcmlnaW5hbCwKKwkgKiB3ZSBuZWVkIHRvIGFwcGVuZCB0byBleGlzdGluZyBvbmUgc28gdGhhdCB0aGUgYWxyZWFkeQorCSAqIGNyZWF0ZWQgZW50cnkgdmlhICJjbG9uZSAtcyIgaXMgbm90IGxvc3QsIGFuZCBhbHNvCisJICogdG8gdHVybiBlbnRyaWVzIHdpdGggcGF0aHMgcmVsYXRpdmUgdG8gdGhlIG9yaWdpbmFsCisJICogYWJzb2x1dGUsIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBpbiB0aGUgbmV3IHJlcG9zaXRvcnkuCisJICovCisJRklMRSAqaW4gPSB4Zm9wZW4oc3JjLT5idWYsICJyIik7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmxpbmUsIGluKSAhPSBFT0YpIHsKKwkJY2hhciAqYWJzX3BhdGg7CisJCWlmICghbGluZS5sZW4gfHwgbGluZS5idWZbMF0gPT0gJyMnKQorCQkJY29udGludWU7CisJCWlmIChpc19hYnNvbHV0ZV9wYXRoKGxpbmUuYnVmKSkgeworCQkJYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShsaW5lLmJ1Zik7CisJCQljb250aW51ZTsKKwkJfQorCQlhYnNfcGF0aCA9IG1rcGF0aGR1cCgiJXMvb2JqZWN0cy8lcyIsIHNyY19yZXBvLCBsaW5lLmJ1Zik7CisJCWlmICghbm9ybWFsaXplX3BhdGhfY29weShhYnNfcGF0aCwgYWJzX3BhdGgpKQorCQkJYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShhYnNfcGF0aCk7CisJCWVsc2UKKwkJCXdhcm5pbmcoInNraXBwaW5nIGludmFsaWQgcmVsYXRpdmUgYWx0ZXJuYXRlOiAlcy8lcyIsCisJCQkJc3JjX3JlcG8sIGxpbmUuYnVmKTsKKwkJZnJlZShhYnNfcGF0aCk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwlmY2xvc2UoaW4pOworfQorCitzdGF0aWMgdm9pZCBta2Rpcl9pZl9taXNzaW5nKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBtb2RlX3QgbW9kZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICghbWtkaXIocGF0aG5hbWUsIG1vZGUpKQorCQlyZXR1cm47CisKKwlpZiAoZXJybm8gIT0gRUVYSVNUKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIpLCBwYXRobmFtZSk7CisJZWxzZSBpZiAoc3RhdChwYXRobmFtZSwgJnN0KSkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBzdGF0ICclcyciKSwgcGF0aG5hbWUpOworCWVsc2UgaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpKQorCQlkaWUoXygiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiKSwgcGF0aG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X29yX2xpbmtfZGlyZWN0b3J5KHN0cnVjdCBzdHJidWYgKnNyYywgc3RydWN0IHN0cmJ1ZiAqZGVzdCwKKwkJCQkgICBjb25zdCBjaGFyICpzcmNfcmVwbykKK3sKKwlpbnQgc3JjX2xlbiwgZGVzdF9sZW47CisJc3RydWN0IGRpcl9pdGVyYXRvciAqaXRlcjsKKwlpbnQgaXRlcl9zdGF0dXM7CisJdW5zaWduZWQgaW50IGZsYWdzOworCXN0cnVjdCBzdHJidWYgcmVhbHBhdGggPSBTVFJCVUZfSU5JVDsKKworCW1rZGlyX2lmX21pc3NpbmcoZGVzdC0+YnVmLCAwNzc3KTsKKworCWZsYWdzID0gRElSX0lURVJBVE9SX1BFREFOVElDIHwgRElSX0lURVJBVE9SX0ZPTExPV19TWU1MSU5LUzsKKwlpdGVyID0gZGlyX2l0ZXJhdG9yX2JlZ2luKHNyYy0+YnVmLCBmbGFncyk7CisKKwlpZiAoIWl0ZXIpCisJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gc3RhcnQgaXRlcmF0b3Igb3ZlciAnJXMnIiksIHNyYy0+YnVmKTsKKworCXN0cmJ1Zl9hZGRjaChzcmMsICcvJyk7CisJc3JjX2xlbiA9IHNyYy0+bGVuOworCXN0cmJ1Zl9hZGRjaChkZXN0LCAnLycpOworCWRlc3RfbGVuID0gZGVzdC0+bGVuOworCisJd2hpbGUgKChpdGVyX3N0YXR1cyA9IGRpcl9pdGVyYXRvcl9hZHZhbmNlKGl0ZXIpKSA9PSBJVEVSX09LKSB7CisJCXN0cmJ1Zl9zZXRsZW4oc3JjLCBzcmNfbGVuKTsKKwkJc3RyYnVmX2FkZHN0cihzcmMsIGl0ZXItPnJlbGF0aXZlX3BhdGgpOworCQlzdHJidWZfc2V0bGVuKGRlc3QsIGRlc3RfbGVuKTsKKwkJc3RyYnVmX2FkZHN0cihkZXN0LCBpdGVyLT5yZWxhdGl2ZV9wYXRoKTsKKworCQlpZiAoU19JU0RJUihpdGVyLT5zdC5zdF9tb2RlKSkgeworCQkJbWtkaXJfaWZfbWlzc2luZyhkZXN0LT5idWYsIDA3NzcpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBGaWxlcyB0aGF0IGNhbm5vdCBiZSBjb3BpZWQgYml0LWZvci1iaXQuLi4gKi8KKwkJaWYgKCFmc3BhdGhjbXAoaXRlci0+cmVsYXRpdmVfcGF0aCwgImluZm8vYWx0ZXJuYXRlcyIpKSB7CisJCQljb3B5X2FsdGVybmF0ZXMoc3JjLCBzcmNfcmVwbyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICh1bmxpbmsoZGVzdC0+YnVmKSAmJiBlcnJubyAhPSBFTk9FTlQpCisJCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHVubGluayAnJXMnIiksIGRlc3QtPmJ1Zik7CisJCWlmICghb3B0aW9uX25vX2hhcmRsaW5rcykgeworCQkJc3RyYnVmX3JlYWxwYXRoKCZyZWFscGF0aCwgc3JjLT5idWYsIDEpOworCQkJaWYgKCFsaW5rKHJlYWxwYXRoLmJ1ZiwgZGVzdC0+YnVmKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChvcHRpb25fbG9jYWwgPiAwKQorCQkJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIpLCBkZXN0LT5idWYpOworCQkJb3B0aW9uX25vX2hhcmRsaW5rcyA9IDE7CisJCX0KKwkJaWYgKGNvcHlfZmlsZV93aXRoX3RpbWUoZGVzdC0+YnVmLCBzcmMtPmJ1ZiwgMDY2NikpCisJCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIiksIGRlc3QtPmJ1Zik7CisJfQorCisJaWYgKGl0ZXJfc3RhdHVzICE9IElURVJfRE9ORSkgeworCQlzdHJidWZfc2V0bGVuKHNyYywgc3JjX2xlbik7CisJCWRpZShfKCJmYWlsZWQgdG8gaXRlcmF0ZSBvdmVyICclcyciKSwgc3JjLT5idWYpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWFscGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsb25lX2xvY2FsKGNvbnN0IGNoYXIgKnNyY19yZXBvLCBjb25zdCBjaGFyICpkZXN0X3JlcG8pCit7CisJaWYgKG9wdGlvbl9zaGFyZWQpIHsKKwkJc3RydWN0IHN0cmJ1ZiBhbHQgPSBTVFJCVUZfSU5JVDsKKwkJZ2V0X2NvbW1vbl9kaXIoJmFsdCwgc3JjX3JlcG8pOworCQlzdHJidWZfYWRkc3RyKCZhbHQsICIvb2JqZWN0cyIpOworCQlhZGRfdG9fYWx0ZXJuYXRlc19maWxlKGFsdC5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmYWx0KTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIHNyYyA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIGRlc3QgPSBTVFJCVUZfSU5JVDsKKwkJZ2V0X2NvbW1vbl9kaXIoJnNyYywgc3JjX3JlcG8pOworCQlnZXRfY29tbW9uX2RpcigmZGVzdCwgZGVzdF9yZXBvKTsKKwkJc3RyYnVmX2FkZHN0cigmc3JjLCAiL29iamVjdHMiKTsKKwkJc3RyYnVmX2FkZHN0cigmZGVzdCwgIi9vYmplY3RzIik7CisJCWNvcHlfb3JfbGlua19kaXJlY3RvcnkoJnNyYywgJmRlc3QsIHNyY19yZXBvKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNyYyk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZkZXN0KTsKKwl9CisKKwlpZiAoMCA8PSBvcHRpb25fdmVyYm9zaXR5KQorCQlmcHJpbnRmKHN0ZGVyciwgXygiZG9uZS5cbiIpKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmp1bmtfd29ya190cmVlOworc3RhdGljIGludCBqdW5rX3dvcmtfdHJlZV9mbGFnczsKK3N0YXRpYyBjb25zdCBjaGFyICpqdW5rX2dpdF9kaXI7CitzdGF0aWMgaW50IGp1bmtfZ2l0X2Rpcl9mbGFnczsKK3N0YXRpYyBlbnVtIHsKKwlKVU5LX0xFQVZFX05PTkUsCisJSlVOS19MRUFWRV9SRVBPLAorCUpVTktfTEVBVkVfQUxMCit9IGp1bmtfbW9kZSA9IEpVTktfTEVBVkVfTk9ORTsKKworc3RhdGljIGNvbnN0IGNoYXIganVua19sZWF2ZV9yZXBvX21zZ1tdID0KK05fKCJDbG9uZSBzdWNjZWVkZWQsIGJ1dCBjaGVja291dCBmYWlsZWQuXG4iCisgICAiWW91IGNhbiBpbnNwZWN0IHdoYXQgd2FzIGNoZWNrZWQgb3V0IHdpdGggJ2dpdCBzdGF0dXMnXG4iCisgICAiYW5kIHJldHJ5IHdpdGggJ2dpdCByZXN0b3JlIC0tc291cmNlPUhFQUQgOi8nXG4iKTsKKworc3RhdGljIHZvaWQgcmVtb3ZlX2p1bmsodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlzd2l0Y2ggKGp1bmtfbW9kZSkgeworCWNhc2UgSlVOS19MRUFWRV9SRVBPOgorCQl3YXJuaW5nKCIlcyIsIF8oanVua19sZWF2ZV9yZXBvX21zZykpOworCQkvKiBmYWxsLXRocm91Z2ggKi8KKwljYXNlIEpVTktfTEVBVkVfQUxMOgorCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJLyogcHJvY2VlZCB0byByZW1vdmFsICovCisJCWJyZWFrOworCX0KKworCWlmIChqdW5rX2dpdF9kaXIpIHsKKwkJc3RyYnVmX2FkZHN0cigmc2IsIGp1bmtfZ2l0X2Rpcik7CisJCXJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJnNiLCBqdW5rX2dpdF9kaXJfZmxhZ3MpOworCQlzdHJidWZfcmVzZXQoJnNiKTsKKwl9CisJaWYgKGp1bmtfd29ya190cmVlKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBqdW5rX3dvcmtfdHJlZSk7CisJCXJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJnNiLCBqdW5rX3dvcmtfdHJlZV9mbGFncyk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9qdW5rX29uX3NpZ25hbChpbnQgc2lnbm8pCit7CisJcmVtb3ZlX2p1bmsoKTsKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOworCXJhaXNlKHNpZ25vKTsKK30KKworc3RhdGljIHN0cnVjdCByZWYgKmZpbmRfcmVtb3RlX2JyYW5jaChjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLCBjb25zdCBjaGFyICpicmFuY2gpCit7CisJc3RydWN0IHJlZiAqcmVmOworCXN0cnVjdCBzdHJidWYgaGVhZCA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRzdHIoJmhlYWQsICJyZWZzL2hlYWRzLyIpOworCXN0cmJ1Zl9hZGRzdHIoJmhlYWQsIGJyYW5jaCk7CisJcmVmID0gZmluZF9yZWZfYnlfbmFtZShyZWZzLCBoZWFkLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmhlYWQpOworCisJaWYgKHJlZikKKwkJcmV0dXJuIHJlZjsKKworCXN0cmJ1Zl9hZGRzdHIoJmhlYWQsICJyZWZzL3RhZ3MvIik7CisJc3RyYnVmX2FkZHN0cigmaGVhZCwgYnJhbmNoKTsKKwlyZWYgPSBmaW5kX3JlZl9ieV9uYW1lKHJlZnMsIGhlYWQuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmaGVhZCk7CisKKwlyZXR1cm4gcmVmOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqd2FudGVkX3BlZXJfcmVmcyhjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLAorCQlzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlYykKK3sKKwlzdHJ1Y3QgcmVmICpoZWFkID0gY29weV9yZWYoZmluZF9yZWZfYnlfbmFtZShyZWZzLCAiSEVBRCIpKTsKKwlzdHJ1Y3QgcmVmICpsb2NhbF9yZWZzID0gaGVhZDsKKwlzdHJ1Y3QgcmVmICoqdGFpbCA9IGhlYWQgPyAmaGVhZC0+bmV4dCA6ICZsb2NhbF9yZWZzOworCisJaWYgKG9wdGlvbl9zaW5nbGVfYnJhbmNoKSB7CisJCXN0cnVjdCByZWYgKnJlbW90ZV9oZWFkID0gTlVMTDsKKworCQlpZiAoIW9wdGlvbl9icmFuY2gpCisJCQlyZW1vdGVfaGVhZCA9IGd1ZXNzX3JlbW90ZV9oZWFkKGhlYWQsIHJlZnMsIDApOworCQllbHNlIHsKKwkJCWxvY2FsX3JlZnMgPSBOVUxMOworCQkJdGFpbCA9ICZsb2NhbF9yZWZzOworCQkJcmVtb3RlX2hlYWQgPSBjb3B5X3JlZihmaW5kX3JlbW90ZV9icmFuY2gocmVmcywgb3B0aW9uX2JyYW5jaCkpOworCQl9CisKKwkJaWYgKCFyZW1vdGVfaGVhZCAmJiBvcHRpb25fYnJhbmNoKQorCQkJd2FybmluZyhfKCJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIpLAorCQkJCW9wdGlvbl9icmFuY2gpOworCQllbHNlIHsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IHJlZnNwZWMtPm5yOyBpKyspCisJCQkJZ2V0X2ZldGNoX21hcChyZW1vdGVfaGVhZCwgJnJlZnNwZWMtPml0ZW1zW2ldLAorCQkJCQkgICAgICAmdGFpbCwgMCk7CisKKwkJCS8qIGlmIC0tYnJhbmNoPXRhZywgcHVsbCB0aGUgcmVxdWVzdGVkIHRhZyBleHBsaWNpdGx5ICovCisJCQlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9oZWFkLCB0YWdfcmVmc3BlYywgJnRhaWwsIDApOworCQl9CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCByZWZzcGVjLT5ucjsgaSsrKQorCQkJZ2V0X2ZldGNoX21hcChyZWZzLCAmcmVmc3BlYy0+aXRlbXNbaV0sICZ0YWlsLCAwKTsKKwl9CisKKwlpZiAoIW9wdGlvbl9taXJyb3IgJiYgIW9wdGlvbl9zaW5nbGVfYnJhbmNoICYmICFvcHRpb25fbm9fdGFncykKKwkJZ2V0X2ZldGNoX21hcChyZWZzLCB0YWdfcmVmc3BlYywgJnRhaWwsIDApOworCisJcmV0dXJuIGxvY2FsX3JlZnM7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3JlbW90ZV9yZWZzKGNvbnN0IHN0cnVjdCByZWYgKmxvY2FsX3JlZnMpCit7CisJY29uc3Qgc3RydWN0IHJlZiAqcjsKKworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnQ7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKworCXQgPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJaWYgKCF0KQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisKKwlmb3IgKHIgPSBsb2NhbF9yZWZzOyByOyByID0gci0+bmV4dCkgeworCQlpZiAoIXItPnBlZXJfcmVmKQorCQkJY29udGludWU7CisJCWlmIChyZWZfdHJhbnNhY3Rpb25fY3JlYXRlKHQsIHItPnBlZXJfcmVmLT5uYW1lLCAmci0+b2xkX29pZCwKKwkJCQkJICAgMCwgTlVMTCwgJmVycikpCisJCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJfQorCisJaWYgKGluaXRpYWxfcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0LCAmZXJyKSkKKwkJZGllKCIlcyIsIGVyci5idWYpOworCisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodCk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2ZvbGxvd3RhZ3MoY29uc3Qgc3RydWN0IHJlZiAqcmVmcywgY29uc3QgY2hhciAqbXNnKQoreworCWNvbnN0IHN0cnVjdCByZWYgKnJlZjsKKwlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmICghc3RhcnRzX3dpdGgocmVmLT5uYW1lLCAicmVmcy90YWdzLyIpKQorCQkJY29udGludWU7CisJCWlmIChlbmRzX3dpdGgocmVmLT5uYW1lLCAiXnt9IikpCisJCQljb250aW51ZTsKKwkJaWYgKCFoYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncygmcmVmLT5vbGRfb2lkLAorCQkJCQkJT0JKRUNUX0lORk9fUVVJQ0sgfAorCQkJCQkJT0JKRUNUX0lORk9fU0tJUF9GRVRDSF9PQkpFQ1QpKQorCQkJY29udGludWU7CisJCXVwZGF0ZV9yZWYobXNnLCByZWYtPm5hbWUsICZyZWYtPm9sZF9vaWQsIE5VTEwsIDAsCisJCQkgICBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXRlcmF0ZV9yZWZfbWFwKHZvaWQgKmNiX2RhdGEsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgcmVmICoqcm0gPSBjYl9kYXRhOworCXN0cnVjdCByZWYgKnJlZiA9ICpybTsKKworCS8qCisJICogU2tpcCBhbnl0aGluZyBtaXNzaW5nIGEgcGVlcl9yZWYsIHdoaWNoIHdlIGFyZSBub3QKKwkgKiBhY3R1YWxseSBnb2luZyB0byB3cml0ZSBhIHJlZiBmb3IuCisJICovCisJd2hpbGUgKHJlZiAmJiAhcmVmLT5wZWVyX3JlZikKKwkJcmVmID0gcmVmLT5uZXh0OworCS8qIFJldHVybmluZyAtMSBub3RlcyAiZW5kIG9mIGxpc3QiIHRvIHRoZSBjYWxsZXIuICovCisJaWYgKCFyZWYpCisJCXJldHVybiAtMTsKKworCW9pZGNweShvaWQsICZyZWYtPm9sZF9vaWQpOworCSpybSA9IHJlZi0+bmV4dDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3JlbW90ZV9yZWZzKGNvbnN0IHN0cnVjdCByZWYgKnJlZnMsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHJlZiAqbWFwcGVkX3JlZnMsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX2hlYWRfcG9pbnRzX2F0LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJyYW5jaF90b3AsCisJCQkgICAgICAgY29uc3QgY2hhciAqbXNnLAorCQkJICAgICAgIHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCSAgICAgICBpbnQgY2hlY2tfY29ubmVjdGl2aXR5KQoreworCWNvbnN0IHN0cnVjdCByZWYgKnJtID0gbWFwcGVkX3JlZnM7CisKKwlpZiAoY2hlY2tfY29ubmVjdGl2aXR5KSB7CisJCXN0cnVjdCBjaGVja19jb25uZWN0ZWRfb3B0aW9ucyBvcHQgPSBDSEVDS19DT05ORUNURURfSU5JVDsKKworCQlvcHQudHJhbnNwb3J0ID0gdHJhbnNwb3J0OworCQlvcHQucHJvZ3Jlc3MgPSB0cmFuc3BvcnQtPnByb2dyZXNzOworCisJCWlmIChjaGVja19jb25uZWN0ZWQoaXRlcmF0ZV9yZWZfbWFwLCAmcm0sICZvcHQpKQorCQkJZGllKF8oInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIikpOworCX0KKworCWlmIChyZWZzKSB7CisJCXdyaXRlX3JlbW90ZV9yZWZzKG1hcHBlZF9yZWZzKTsKKwkJaWYgKG9wdGlvbl9zaW5nbGVfYnJhbmNoICYmICFvcHRpb25fbm9fdGFncykKKwkJCXdyaXRlX2ZvbGxvd3RhZ3MocmVmcywgbXNnKTsKKwl9CisKKwlpZiAocmVtb3RlX2hlYWRfcG9pbnRzX2F0ICYmICFvcHRpb25fYmFyZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGhlYWRfcmVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRzdHIoJmhlYWRfcmVmLCBicmFuY2hfdG9wKTsKKwkJc3RyYnVmX2FkZHN0cigmaGVhZF9yZWYsICJIRUFEIik7CisJCWlmIChjcmVhdGVfc3ltcmVmKGhlYWRfcmVmLmJ1ZiwKKwkJCQkgIHJlbW90ZV9oZWFkX3BvaW50c19hdC0+cGVlcl9yZWYtPm5hbWUsCisJCQkJICBtc2cpIDwgMCkKKwkJCWRpZShfKCJ1bmFibGUgdG8gdXBkYXRlICVzIiksIGhlYWRfcmVmLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkX3JlZik7CisJfQorfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfaGVhZChjb25zdCBzdHJ1Y3QgcmVmICpvdXIsIGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZSwKKwkJCWNvbnN0IGNoYXIgKm1zZykKK3sKKwljb25zdCBjaGFyICpoZWFkOworCWlmIChvdXIgJiYgc2tpcF9wcmVmaXgob3VyLT5uYW1lLCAicmVmcy9oZWFkcy8iLCAmaGVhZCkpIHsKKwkJLyogTG9jYWwgZGVmYXVsdCBicmFuY2ggbGluayAqLworCQlpZiAoY3JlYXRlX3N5bXJlZigiSEVBRCIsIG91ci0+bmFtZSwgTlVMTCkgPCAwKQorCQkJZGllKF8oInVuYWJsZSB0byB1cGRhdGUgSEVBRCIpKTsKKwkJaWYgKCFvcHRpb25fYmFyZSkgeworCQkJdXBkYXRlX3JlZihtc2csICJIRUFEIiwgJm91ci0+b2xkX29pZCwgTlVMTCwgMCwKKwkJCQkgICBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKwkJCWluc3RhbGxfYnJhbmNoX2NvbmZpZygwLCBoZWFkLCBvcHRpb25fb3JpZ2luLCBvdXItPm5hbWUpOworCQl9CisJfSBlbHNlIGlmIChvdXIpIHsKKwkJc3RydWN0IGNvbW1pdCAqYyA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSAgICZvdXItPm9sZF9vaWQpOworCQkvKiAtLWJyYW5jaCBzcGVjaWZpZXMgYSBub24tYnJhbmNoIChpLmUuIHRhZ3MpLCBkZXRhY2ggSEVBRCAqLworCQl1cGRhdGVfcmVmKG1zZywgIkhFQUQiLCAmYy0+b2JqZWN0Lm9pZCwgTlVMTCwgUkVGX05PX0RFUkVGLAorCQkJICAgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisJfSBlbHNlIGlmIChyZW1vdGUpIHsKKwkJLyoKKwkJICogV2Uga25vdyByZW1vdGUgSEVBRCBwb2ludHMgdG8gYSBub24tYnJhbmNoLCBvcgorCQkgKiBIRUFEIHBvaW50cyB0byBhIGJyYW5jaCBidXQgd2UgZG9uJ3Qga25vdyB3aGljaCBvbmUuCisJCSAqIERldGFjaCBIRUFEIGluIGFsbCB0aGVzZSBjYXNlcy4KKwkJICovCisJCXVwZGF0ZV9yZWYobXNnLCAiSEVBRCIsICZyZW1vdGUtPm9sZF9vaWQsIE5VTEwsIFJFRl9OT19ERVJFRiwKKwkJCSAgIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCX0KK30KKworc3RhdGljIGludCBnaXRfc3BhcnNlX2NoZWNrb3V0X2luaXQoY29uc3QgY2hhciAqcmVwbykKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCWludCByZXN1bHQgPSAwOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3YsICItQyIsIHJlcG8sICJzcGFyc2UtY2hlY2tvdXQiLCAiaW5pdCIsIE5VTEwpOworCisJLyoKKwkgKiBXZSBtdXN0IGFwcGx5IHRoZSBzZXR0aW5nIGluIHRoZSBjdXJyZW50IHByb2Nlc3MKKwkgKiBmb3IgdGhlIGxhdGVyIGNoZWNrb3V0IHRvIHVzZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUuCisJICovCisJY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQgPSAxOworCisJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YuYXJndiwgUlVOX0dJVF9DTUQpKSB7CisJCWVycm9yKF8oImZhaWxlZCB0byBpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIpKTsKKwkJcmVzdWx0ID0gMTsKKwl9CisKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmd2KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0KGludCBzdWJtb2R1bGVfcHJvZ3Jlc3MpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY2hhciAqaGVhZDsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgb3B0czsKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHQ7CisJaW50IGVyciA9IDA7CisKKwlpZiAob3B0aW9uX25vX2NoZWNrb3V0KQorCQlyZXR1cm4gMDsKKworCWhlYWQgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsICZvaWQsIE5VTEwpOworCWlmICghaGVhZCkgeworCQl3YXJuaW5nKF8oInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsICIKKwkJCSAgInVuYWJsZSB0byBjaGVja291dC5cbiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGhlYWQsICJIRUFEIikpIHsKKwkJaWYgKGFkdmljZV9kZXRhY2hlZF9oZWFkKQorCQkJZGV0YWNoX2FkdmljZShvaWRfdG9faGV4KCZvaWQpKTsKKwkJRlJFRV9BTkRfTlVMTChoZWFkKTsKKwl9IGVsc2UgeworCQlpZiAoIXN0YXJ0c193aXRoKGhlYWQsICJyZWZzL2hlYWRzLyIpKQorCQkJZGllKF8oIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIikpOworCX0KKworCS8qIFdlIG5lZWQgdG8gYmUgaW4gdGhlIG5ldyB3b3JrIHRyZWUgZm9yIHRoZSBjaGVja291dCAqLworCXNldHVwX3dvcmtfdHJlZSgpOworCisJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgTE9DS19ESUVfT05fRVJST1IpOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Ygb3B0cyk7CisJb3B0cy51cGRhdGUgPSAxOworCW9wdHMubWVyZ2UgPSAxOworCW9wdHMuY2xvbmUgPSAxOworCW9wdHMuZm4gPSBvbmV3YXlfbWVyZ2U7CisJb3B0cy52ZXJib3NlX3VwZGF0ZSA9IChvcHRpb25fdmVyYm9zaXR5ID49IDApOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisJaW5pdF9jaGVja291dF9tZXRhZGF0YSgmb3B0cy5tZXRhLCBoZWFkLCAmb2lkLCBOVUxMKTsKKworCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KCZvaWQpOworCXBhcnNlX3RyZWUodHJlZSk7CisJaW5pdF90cmVlX2Rlc2MoJnQsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisJaWYgKHVucGFja190cmVlcygxLCAmdCwgJm9wdHMpIDwgMCkKKwkJZGllKF8oInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiKSk7CisKKwlmcmVlKGhlYWQpOworCisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisKKwllcnIgfD0gcnVuX2hvb2tfbGUoTlVMTCwgInBvc3QtY2hlY2tvdXQiLCBvaWRfdG9faGV4KCZudWxsX29pZCksCisJCQkgICBvaWRfdG9faGV4KCZvaWQpLCAiMSIsIE5VTEwpOworCisJaWYgKCFlcnIgJiYgKG9wdGlvbl9yZWN1cnNlX3N1Ym1vZHVsZXMubnIgPiAwKSkgeworCQlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCQlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAic3VibW9kdWxlIiwgInVwZGF0ZSIsICItLXJlcXVpcmUtaW5pdCIsICItLXJlY3Vyc2l2ZSIsIE5VTEwpOworCisJCWlmIChvcHRpb25fc2hhbGxvd19zdWJtb2R1bGVzID09IDEpCisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLWRlcHRoPTEiKTsKKworCQlpZiAobWF4X2pvYnMgIT0gLTEpCisJCQlhcmd2X2FycmF5X3B1c2hmKCZhcmdzLCAiLS1qb2JzPSVkIiwgbWF4X2pvYnMpOworCisJCWlmIChzdWJtb2R1bGVfcHJvZ3Jlc3MpCisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXByb2dyZXNzIik7CisKKwkJaWYgKG9wdGlvbl92ZXJib3NpdHkgPCAwKQorCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1xdWlldCIpOworCisJCWlmIChvcHRpb25fcmVtb3RlX3N1Ym1vZHVsZXMpIHsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tcmVtb3RlIik7CisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLW5vLWZldGNoIik7CisJCX0KKworCQlpZiAob3B0aW9uX3NpbmdsZV9icmFuY2ggPj0gMCkKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0aW9uX3NpbmdsZV9icmFuY2ggPworCQkJCQkgICAgICAgIi0tc2luZ2xlLWJyYW5jaCIgOgorCQkJCQkgICAgICAgIi0tbm8tc2luZ2xlLWJyYW5jaCIpOworCisJCWVyciA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MuYXJndiwgUlVOX0dJVF9DTUQpOworCQlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHdyaXRlX29uZV9jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfZ2VudGx5KGtleSwKKwkJCQkJICAgICAgdmFsdWUgPyB2YWx1ZSA6ICJ0cnVlIiwKKwkJCQkJICAgICAgQ09ORklHX1JFR0VYX05PTkUsIDApOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9jb25maWcoc3RydWN0IHN0cmluZ19saXN0ICpjb25maWcpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5ucjsgaSsrKSB7CisJCWlmIChnaXRfY29uZmlnX3BhcnNlX3BhcmFtZXRlcihjb25maWctPml0ZW1zW2ldLnN0cmluZywKKwkJCQkJICAgICAgIHdyaXRlX29uZV9jb25maWcsIE5VTEwpIDwgMCkKKwkJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgcGFyYW1ldGVycyB0byBjb25maWcgZmlsZSIpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3JlZnNwZWNfY29uZmlnKGNvbnN0IGNoYXIgKnNyY19yZWZfcHJlZml4LAorCQljb25zdCBzdHJ1Y3QgcmVmICpvdXJfaGVhZF9wb2ludHNfYXQsCisJCWNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9oZWFkX3BvaW50c19hdCwKKwkJc3RydWN0IHN0cmJ1ZiAqYnJhbmNoX3RvcCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGtleSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgdmFsdWUgPSBTVFJCVUZfSU5JVDsKKworCWlmIChvcHRpb25fbWlycm9yIHx8ICFvcHRpb25fYmFyZSkgeworCQlpZiAob3B0aW9uX3NpbmdsZV9icmFuY2ggJiYgIW9wdGlvbl9taXJyb3IpIHsKKwkJCWlmIChvcHRpb25fYnJhbmNoKSB7CisJCQkJaWYgKHN0YXJ0c193aXRoKG91cl9oZWFkX3BvaW50c19hdC0+bmFtZSwgInJlZnMvdGFncy8iKSkKKwkJCQkJc3RyYnVmX2FkZGYoJnZhbHVlLCAiKyVzOiVzIiwgb3VyX2hlYWRfcG9pbnRzX2F0LT5uYW1lLAorCQkJCQkJb3VyX2hlYWRfcG9pbnRzX2F0LT5uYW1lKTsKKwkJCQllbHNlCisJCQkJCXN0cmJ1Zl9hZGRmKCZ2YWx1ZSwgIislczolcyVzIiwgb3VyX2hlYWRfcG9pbnRzX2F0LT5uYW1lLAorCQkJCQkJYnJhbmNoX3RvcC0+YnVmLCBvcHRpb25fYnJhbmNoKTsKKwkJCX0gZWxzZSBpZiAocmVtb3RlX2hlYWRfcG9pbnRzX2F0KSB7CisJCQkJY29uc3QgY2hhciAqaGVhZCA9IHJlbW90ZV9oZWFkX3BvaW50c19hdC0+bmFtZTsKKwkJCQlpZiAoIXNraXBfcHJlZml4KGhlYWQsICJyZWZzL2hlYWRzLyIsICZoZWFkKSkKKwkJCQkJQlVHKCJyZW1vdGUgSEVBRCBwb2ludHMgYXQgbm9uLWhlYWQ/Iik7CisKKwkJCQlzdHJidWZfYWRkZigmdmFsdWUsICIrJXM6JXMlcyIsIHJlbW90ZV9oZWFkX3BvaW50c19hdC0+bmFtZSwKKwkJCQkJCWJyYW5jaF90b3AtPmJ1ZiwgaGVhZCk7CisJCQl9CisJCQkvKgorCQkJICogb3RoZXJ3aXNlLCB0aGUgbmV4dCAiZ2l0IGZldGNoIiB3aWxsCisJCQkgKiBzaW1wbHkgZmV0Y2ggZnJvbSBIRUFEIHdpdGhvdXQgdXBkYXRpbmcKKwkJCSAqIGFueSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLCB3aGljaCBpcyB3aGF0CisJCQkgKiB3ZSB3YW50LgorCQkJICovCisJCX0gZWxzZSB7CisJCQlzdHJidWZfYWRkZigmdmFsdWUsICIrJXMqOiVzKiIsIHNyY19yZWZfcHJlZml4LCBicmFuY2hfdG9wLT5idWYpOworCQl9CisJCS8qIENvbmZpZ3VyZSB0aGUgcmVtb3RlICovCisJCWlmICh2YWx1ZS5sZW4pIHsKKwkJCXN0cmJ1Zl9hZGRmKCZrZXksICJyZW1vdGUuJXMuZmV0Y2giLCBvcHRpb25fb3JpZ2luKTsKKwkJCWdpdF9jb25maWdfc2V0X211bHRpdmFyKGtleS5idWYsIHZhbHVlLmJ1ZiwgIl4kIiwgMCk7CisJCQlzdHJidWZfcmVzZXQoJmtleSk7CisKKwkJCWlmIChvcHRpb25fbWlycm9yKSB7CisJCQkJc3RyYnVmX2FkZGYoJmtleSwgInJlbW90ZS4lcy5taXJyb3IiLCBvcHRpb25fb3JpZ2luKTsKKwkJCQlnaXRfY29uZmlnX3NldChrZXkuYnVmLCAidHJ1ZSIpOworCQkJCXN0cmJ1Zl9yZXNldCgma2V5KTsKKwkJCX0KKwkJfQorCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOworCXN0cmJ1Zl9yZWxlYXNlKCZ2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3NvY2lhdGVfZnJvbV9yZWZlcmVuY2VzKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIqIGFyZ3ZbXSA9IHsgInJlcGFjayIsICItYSIsICItZCIsIE5VTEwgfTsKKwljaGFyICphbHRlcm5hdGVzID0gZ2l0X3BhdGhkdXAoIm9iamVjdHMvaW5mby9hbHRlcm5hdGVzIik7CisKKwlpZiAoIWFjY2VzcyhhbHRlcm5hdGVzLCBGX09LKSkgeworCQlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgUlVOX0dJVF9DTUR8UlVOX0NPTU1BTkRfTk9fU1RESU4pKQorCQkJZGllKF8oImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiKSk7CisJCWlmICh1bmxpbmsoYWx0ZXJuYXRlcykgJiYgZXJybm8gIT0gRU5PRU5UKQorCQkJZGllX2Vycm5vKF8oImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIpKTsKKwl9CisJZnJlZShhbHRlcm5hdGVzKTsKK30KKworc3RhdGljIGludCBwYXRoX2V4aXN0cyhjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdGF0IHNiOworCXJldHVybiAhc3RhdChwYXRoLCAmc2IpOworfQorCitpbnQgY21kX2Nsb25lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpc19idW5kbGUgPSAwLCBpc19sb2NhbDsKKwljb25zdCBjaGFyICpyZXBvX25hbWUsICpyZXBvLCAqd29ya190cmVlLCAqZ2l0X2RpcjsKKwljaGFyICpwYXRoLCAqZGlyOworCWludCBkZXN0X2V4aXN0czsKKwljb25zdCBzdHJ1Y3QgcmVmICpyZWZzLCAqcmVtb3RlX2hlYWQ7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX2hlYWRfcG9pbnRzX2F0OworCWNvbnN0IHN0cnVjdCByZWYgKm91cl9oZWFkX3BvaW50c19hdDsKKwlzdHJ1Y3QgcmVmICptYXBwZWRfcmVmczsKKwljb25zdCBzdHJ1Y3QgcmVmICpyZWY7CisJc3RydWN0IHN0cmJ1ZiBrZXkgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGRlZmF1bHRfcmVmc3BlYyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYnJhbmNoX3RvcCA9IFNUUkJVRl9JTklULCByZWZsb2dfbXNnID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0ID0gTlVMTDsKKwljb25zdCBjaGFyICpzcmNfcmVmX3ByZWZpeCA9ICJyZWZzL2hlYWRzLyI7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCWludCBlcnIgPSAwLCBjb21wbGV0ZV9yZWZzX2JlZm9yZV9mZXRjaCA9IDE7CisJaW50IHN1Ym1vZHVsZV9wcm9ncmVzczsKKworCXN0cnVjdCBhcmd2X2FycmF5IHJlZl9wcmVmaXhlcyA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCXBhY2tldF90cmFjZV9pZGVudGl0eSgiY2xvbmUiKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fY2xvbmVfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9jbG9uZV91c2FnZSwgMCk7CisKKwlpZiAoYXJnYyA+IDIpCisJCXVzYWdlX21zZ19vcHQoXygiVG9vIG1hbnkgYXJndW1lbnRzLiIpLAorCQkJYnVpbHRpbl9jbG9uZV91c2FnZSwgYnVpbHRpbl9jbG9uZV9vcHRpb25zKTsKKworCWlmIChhcmdjID09IDApCisJCXVzYWdlX21zZ19vcHQoXygiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIiksCisJCQlidWlsdGluX2Nsb25lX3VzYWdlLCBidWlsdGluX2Nsb25lX29wdGlvbnMpOworCisJaWYgKG9wdGlvbl9kZXB0aCB8fCBvcHRpb25fc2luY2UgfHwgb3B0aW9uX25vdC5ucikKKwkJZGVlcGVuID0gMTsKKwlpZiAob3B0aW9uX3NpbmdsZV9icmFuY2ggPT0gLTEpCisJCW9wdGlvbl9zaW5nbGVfYnJhbmNoID0gZGVlcGVuID8gMSA6IDA7CisKKwlpZiAob3B0aW9uX21pcnJvcikKKwkJb3B0aW9uX2JhcmUgPSAxOworCisJaWYgKG9wdGlvbl9iYXJlKSB7CisJCWlmIChvcHRpb25fb3JpZ2luKQorCQkJZGllKF8oIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIpLAorCQkJICAgIG9wdGlvbl9vcmlnaW4pOworCQlpZiAocmVhbF9naXRfZGlyKQorCQkJZGllKF8oIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIikpOworCQlvcHRpb25fbm9fY2hlY2tvdXQgPSAxOworCX0KKworCWlmICghb3B0aW9uX29yaWdpbikKKwkJb3B0aW9uX29yaWdpbiA9ICJvcmlnaW4iOworCisJcmVwb19uYW1lID0gYXJndlswXTsKKworCXBhdGggPSBnZXRfcmVwb19wYXRoKHJlcG9fbmFtZSwgJmlzX2J1bmRsZSk7CisJaWYgKHBhdGgpCisJCXJlcG8gPSBhYnNvbHV0ZV9wYXRoZHVwKHJlcG9fbmFtZSk7CisJZWxzZSBpZiAoIXN0cmNocihyZXBvX25hbWUsICc6JykpCisJCWRpZShfKCJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiKSwgcmVwb19uYW1lKTsKKwllbHNlCisJCXJlcG8gPSByZXBvX25hbWU7CisKKwkvKiBubyBuZWVkIHRvIGJlIHN0cmljdCwgdHJhbnNwb3J0X3NldF9vcHRpb24oKSB3aWxsIHZhbGlkYXRlIGl0IGFnYWluICovCisJaWYgKG9wdGlvbl9kZXB0aCAmJiBhdG9pKG9wdGlvbl9kZXB0aCkgPCAxKQorCQlkaWUoXygiZGVwdGggJXMgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyIiksIG9wdGlvbl9kZXB0aCk7CisKKwlpZiAoYXJnYyA9PSAyKQorCQlkaXIgPSB4c3RyZHVwKGFyZ3ZbMV0pOworCWVsc2UKKwkJZGlyID0gZ3Vlc3NfZGlyX25hbWUocmVwb19uYW1lLCBpc19idW5kbGUsIG9wdGlvbl9iYXJlKTsKKwlzdHJpcF90cmFpbGluZ19zbGFzaGVzKGRpcik7CisKKwlkZXN0X2V4aXN0cyA9IHBhdGhfZXhpc3RzKGRpcik7CisJaWYgKGRlc3RfZXhpc3RzICYmICFpc19lbXB0eV9kaXIoZGlyKSkKKwkJZGllKF8oImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90ICIKKwkJCSJhbiBlbXB0eSBkaXJlY3RvcnkuIiksIGRpcik7CisKKwlzdHJidWZfYWRkZigmcmVmbG9nX21zZywgImNsb25lOiBmcm9tICVzIiwgcmVwbyk7CisKKwlpZiAob3B0aW9uX2JhcmUpCisJCXdvcmtfdHJlZSA9IE5VTEw7CisJZWxzZSB7CisJCXdvcmtfdHJlZSA9IGdldGVudigiR0lUX1dPUktfVFJFRSIpOworCQlpZiAod29ya190cmVlICYmIHBhdGhfZXhpc3RzKHdvcmtfdHJlZSkpCisJCQlkaWUoXygid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIiksIHdvcmtfdHJlZSk7CisJfQorCisJaWYgKG9wdGlvbl9iYXJlIHx8IHdvcmtfdHJlZSkKKwkJZ2l0X2RpciA9IHhzdHJkdXAoZGlyKTsKKwllbHNlIHsKKwkJd29ya190cmVlID0gZGlyOworCQlnaXRfZGlyID0gbWtwYXRoZHVwKCIlcy8uZ2l0IiwgZGlyKTsKKwl9CisKKwlhdGV4aXQocmVtb3ZlX2p1bmspOworCXNpZ2NoYWluX3B1c2hfY29tbW9uKHJlbW92ZV9qdW5rX29uX3NpZ25hbCk7CisKKwlpZiAoIW9wdGlvbl9iYXJlKSB7CisJCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHdvcmtfdHJlZSkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIiksCisJCQkJICB3b3JrX3RyZWUpOworCQlpZiAoZGVzdF9leGlzdHMpCisJCQlqdW5rX3dvcmtfdHJlZV9mbGFncyB8PSBSRU1PVkVfRElSX0tFRVBfVE9QTEVWRUw7CisJCWVsc2UgaWYgKG1rZGlyKHdvcmtfdHJlZSwgMDc3NykpCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciKSwKKwkJCQkgIHdvcmtfdHJlZSk7CisJCWp1bmtfd29ya190cmVlID0gd29ya190cmVlOworCQlzZXRfZ2l0X3dvcmtfdHJlZSh3b3JrX3RyZWUpOworCX0KKworCWlmIChyZWFsX2dpdF9kaXIpIHsKKwkJaWYgKHBhdGhfZXhpc3RzKHJlYWxfZ2l0X2RpcikpCisJCQlqdW5rX2dpdF9kaXJfZmxhZ3MgfD0gUkVNT1ZFX0RJUl9LRUVQX1RPUExFVkVMOworCQlqdW5rX2dpdF9kaXIgPSByZWFsX2dpdF9kaXI7CisJfSBlbHNlIHsKKwkJaWYgKGRlc3RfZXhpc3RzKQorCQkJanVua19naXRfZGlyX2ZsYWdzIHw9IFJFTU9WRV9ESVJfS0VFUF9UT1BMRVZFTDsKKwkJanVua19naXRfZGlyID0gZ2l0X2RpcjsKKwl9CisJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoZ2l0X2RpcikgPCAwKQorCQlkaWUoXygiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciKSwgZ2l0X2Rpcik7CisKKwlpZiAoMCA8PSBvcHRpb25fdmVyYm9zaXR5KSB7CisJCWlmIChvcHRpb25fYmFyZSkKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIpLCBkaXIpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiQ2xvbmluZyBpbnRvICclcycuLi5cbiIpLCBkaXIpOworCX0KKworCWlmIChvcHRpb25fcmVjdXJzZV9zdWJtb2R1bGVzLm5yID4gMCkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCS8qIHJlbW92ZSBkdXBsaWNhdGVzICovCisJCXN0cmluZ19saXN0X3NvcnQoJm9wdGlvbl9yZWN1cnNlX3N1Ym1vZHVsZXMpOworCQlzdHJpbmdfbGlzdF9yZW1vdmVfZHVwbGljYXRlcygmb3B0aW9uX3JlY3Vyc2Vfc3VibW9kdWxlcywgMCk7CisKKwkJLyoKKwkJICogTkVFRFNXT1JLOiBJbiBhIG11bHRpLXdvcmtpbmctdHJlZSB3b3JsZCwgdGhpcyBuZWVkcyB0byBiZQorCQkgKiBzZXQgaW4gdGhlIHBlci13b3JrdHJlZSBjb25maWcuCisJCSAqLworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZvcHRpb25fcmVjdXJzZV9zdWJtb2R1bGVzKSB7CisJCQlzdHJidWZfYWRkZigmc2IsICJzdWJtb2R1bGUuYWN0aXZlPSVzIiwKKwkJCQkgICAgaXRlbS0+c3RyaW5nKTsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmb3B0aW9uX2NvbmZpZywKKwkJCQkJICAgc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpKTsKKwkJfQorCisJCWlmIChvcHRpb25fcmVxdWlyZWRfcmVmZXJlbmNlLm5yICYmCisJCSAgICBvcHRpb25fb3B0aW9uYWxfcmVmZXJlbmNlLm5yKQorCQkJZGllKF8oImNsb25lIC0tcmVjdXJzaXZlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggIgorCQkJICAgICAgImJvdGggLS1yZWZlcmVuY2UgYW5kIC0tcmVmZXJlbmNlLWlmLWFibGUiKSk7CisJCWVsc2UgaWYgKG9wdGlvbl9yZXF1aXJlZF9yZWZlcmVuY2UubnIpIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmb3B0aW9uX2NvbmZpZywKKwkJCQkic3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uPXN1cGVycHJvamVjdCIpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZvcHRpb25fY29uZmlnLAorCQkJCSJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneT1kaWUiKTsKKwkJfSBlbHNlIGlmIChvcHRpb25fb3B0aW9uYWxfcmVmZXJlbmNlLm5yKSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJm9wdGlvbl9jb25maWcsCisJCQkJInN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbj1zdXBlcnByb2plY3QiKTsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmb3B0aW9uX2NvbmZpZywKKwkJCQkic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3k9aW5mbyIpOworCQl9CisJfQorCisJaW5pdF9kYihnaXRfZGlyLCByZWFsX2dpdF9kaXIsIG9wdGlvbl90ZW1wbGF0ZSwgR0lUX0hBU0hfVU5LTk9XTiwgSU5JVF9EQl9RVUlFVCk7CisKKwlpZiAocmVhbF9naXRfZGlyKQorCQlnaXRfZGlyID0gcmVhbF9naXRfZGlyOworCisJd3JpdGVfY29uZmlnKCZvcHRpb25fY29uZmlnKTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWlmIChvcHRpb25fYmFyZSkgeworCQlpZiAob3B0aW9uX21pcnJvcikKKwkJCXNyY19yZWZfcHJlZml4ID0gInJlZnMvIjsKKwkJc3RyYnVmX2FkZHN0cigmYnJhbmNoX3RvcCwgc3JjX3JlZl9wcmVmaXgpOworCisJCWdpdF9jb25maWdfc2V0KCJjb3JlLmJhcmUiLCAidHJ1ZSIpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRmKCZicmFuY2hfdG9wLCAicmVmcy9yZW1vdGVzLyVzLyIsIG9wdGlvbl9vcmlnaW4pOworCX0KKworCXN0cmJ1Zl9hZGRmKCZrZXksICJyZW1vdGUuJXMudXJsIiwgb3B0aW9uX29yaWdpbik7CisJZ2l0X2NvbmZpZ19zZXQoa2V5LmJ1ZiwgcmVwbyk7CisJc3RyYnVmX3Jlc2V0KCZrZXkpOworCisJaWYgKG9wdGlvbl9ub190YWdzKSB7CisJCXN0cmJ1Zl9hZGRmKCZrZXksICJyZW1vdGUuJXMudGFnT3B0Iiwgb3B0aW9uX29yaWdpbik7CisJCWdpdF9jb25maWdfc2V0KGtleS5idWYsICItLW5vLXRhZ3MiKTsKKwkJc3RyYnVmX3Jlc2V0KCZrZXkpOworCX0KKworCWlmIChvcHRpb25fcmVxdWlyZWRfcmVmZXJlbmNlLm5yIHx8IG9wdGlvbl9vcHRpb25hbF9yZWZlcmVuY2UubnIpCisJCXNldHVwX3JlZmVyZW5jZSgpOworCisJaWYgKG9wdGlvbl9zcGFyc2VfY2hlY2tvdXQgJiYgZ2l0X3NwYXJzZV9jaGVja291dF9pbml0KGRpcikpCisJCXJldHVybiAxOworCisJcmVtb3RlID0gcmVtb3RlX2dldChvcHRpb25fb3JpZ2luKTsKKworCXN0cmJ1Zl9hZGRmKCZkZWZhdWx0X3JlZnNwZWMsICIrJXMqOiVzKiIsIHNyY19yZWZfcHJlZml4LAorCQkgICAgYnJhbmNoX3RvcC5idWYpOworCXJlZnNwZWNfYXBwZW5kKCZyZW1vdGUtPmZldGNoLCBkZWZhdWx0X3JlZnNwZWMuYnVmKTsKKworCXRyYW5zcG9ydCA9IHRyYW5zcG9ydF9nZXQocmVtb3RlLCByZW1vdGUtPnVybFswXSk7CisJdHJhbnNwb3J0X3NldF92ZXJib3NpdHkodHJhbnNwb3J0LCBvcHRpb25fdmVyYm9zaXR5LCBvcHRpb25fcHJvZ3Jlc3MpOworCXRyYW5zcG9ydC0+ZmFtaWx5ID0gZmFtaWx5OworCisJcGF0aCA9IGdldF9yZXBvX3BhdGgocmVtb3RlLT51cmxbMF0sICZpc19idW5kbGUpOworCWlzX2xvY2FsID0gb3B0aW9uX2xvY2FsICE9IDAgJiYgcGF0aCAmJiAhaXNfYnVuZGxlOworCWlmIChpc19sb2NhbCkgeworCQlpZiAob3B0aW9uX2RlcHRoKQorCQkJd2FybmluZyhfKCItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIpKTsKKwkJaWYgKG9wdGlvbl9zaW5jZSkKKwkJCXdhcm5pbmcoXygiLS1zaGFsbG93LXNpbmNlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIpKTsKKwkJaWYgKG9wdGlvbl9ub3QubnIpCisJCQl3YXJuaW5nKF8oIi0tc2hhbGxvdy1leGNsdWRlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIpKTsKKwkJaWYgKGZpbHRlcl9vcHRpb25zLmNob2ljZSkKKwkJCXdhcm5pbmcoXygiLS1maWx0ZXIgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIikpOworCQlpZiAoIWFjY2Vzcyhta3BhdGgoIiVzL3NoYWxsb3ciLCBwYXRoKSwgRl9PSykpIHsKKwkJCWlmIChvcHRpb25fbG9jYWwgPiAwKQorCQkJCXdhcm5pbmcoXygic291cmNlIHJlcG9zaXRvcnkgaXMgc2hhbGxvdywgaWdub3JpbmcgLS1sb2NhbCIpKTsKKwkJCWlzX2xvY2FsID0gMDsKKwkJfQorCX0KKwlpZiAob3B0aW9uX2xvY2FsID4gMCAmJiAhaXNfbG9jYWwpCisJCXdhcm5pbmcoXygiLS1sb2NhbCBpcyBpZ25vcmVkIikpOworCXRyYW5zcG9ydC0+Y2xvbmluZyA9IDE7CisKKwl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9LRUVQLCAieWVzIik7CisKKwlpZiAob3B0aW9uX2RlcHRoKQorCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9ERVBUSCwKKwkJCQkgICAgIG9wdGlvbl9kZXB0aCk7CisJaWYgKG9wdGlvbl9zaW5jZSkKKwkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfREVFUEVOX1NJTkNFLAorCQkJCSAgICAgb3B0aW9uX3NpbmNlKTsKKwlpZiAob3B0aW9uX25vdC5ucikKKwkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfREVFUEVOX05PVCwKKwkJCQkgICAgIChjb25zdCBjaGFyICopJm9wdGlvbl9ub3QpOworCWlmIChvcHRpb25fc2luZ2xlX2JyYW5jaCkKKwkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfRk9MTE9XVEFHUywgIjEiKTsKKworCWlmIChvcHRpb25fdXBsb2FkX3BhY2spCisJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX1VQTE9BRFBBQ0ssCisJCQkJICAgICBvcHRpb25fdXBsb2FkX3BhY2spOworCisJaWYgKHNlcnZlcl9vcHRpb25zLm5yKQorCQl0cmFuc3BvcnQtPnNlcnZlcl9vcHRpb25zID0gJnNlcnZlcl9vcHRpb25zOworCisJaWYgKGZpbHRlcl9vcHRpb25zLmNob2ljZSkgeworCQljb25zdCBjaGFyICpzcGVjID0KKwkJCWV4cGFuZF9saXN0X29iamVjdHNfZmlsdGVyX3NwZWMoJmZpbHRlcl9vcHRpb25zKTsKKwkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfTElTVF9PQkpFQ1RTX0ZJTFRFUiwKKwkJCQkgICAgIHNwZWMpOworCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9GUk9NX1BST01JU09SLCAiMSIpOworCX0KKworCWlmICh0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMgJiYgIWRlZXBlbiAmJiAhZmlsdGVyX29wdGlvbnMuY2hvaWNlKQorCQl0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMtPmNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgPSAxOworCisKKwlhcmd2X2FycmF5X3B1c2goJnJlZl9wcmVmaXhlcywgIkhFQUQiKTsKKwlyZWZzcGVjX3JlZl9wcmVmaXhlcygmcmVtb3RlLT5mZXRjaCwgJnJlZl9wcmVmaXhlcyk7CisJaWYgKG9wdGlvbl9icmFuY2gpCisJCWV4cGFuZF9yZWZfcHJlZml4KCZyZWZfcHJlZml4ZXMsIG9wdGlvbl9icmFuY2gpOworCWlmICghb3B0aW9uX25vX3RhZ3MpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcmVmX3ByZWZpeGVzLCAicmVmcy90YWdzLyIpOworCisJcmVmcyA9IHRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnModHJhbnNwb3J0LCAmcmVmX3ByZWZpeGVzKTsKKworCWlmIChyZWZzKSB7CisJCW1hcHBlZF9yZWZzID0gd2FudGVkX3BlZXJfcmVmcyhyZWZzLCAmcmVtb3RlLT5mZXRjaCk7CisJCS8qCisJCSAqIHRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnMoKSBtYXkgcmV0dXJuIHJlZnMgd2l0aCBudWxsIHNoYS0xCisJCSAqIGluIG1hcHBlZF9yZWZzIChzZWUgc3RydWN0IHRyYW5zcG9ydC0+Z2V0X3JlZnNfbGlzdAorCQkgKiBjb21tZW50KS4gSW4gdGhhdCBjYXNlIHdlIG5lZWQgZmV0Y2ggaXQgZWFybHkgYmVjYXVzZQorCQkgKiByZW1vdGVfaGVhZCBjb2RlIGJlbG93IHJlbGllcyBvbiBpdC4KKwkJICoKKwkJICogZm9yIG5vcm1hbCBjbG9uZXMsIHRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnMoKSBzaG91bGQKKwkJICogcmV0dXJuIHJlbGlhYmxlIHJlZiBzZXQsIHdlIGNhbiBkZWxheSBjbG9uaW5nIHVudGlsIGFmdGVyCisJCSAqIHJlbW90ZSBIRUFEIGNoZWNrLgorCQkgKi8KKwkJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKKwkJCWlmIChpc19udWxsX29pZCgmcmVmLT5vbGRfb2lkKSkgeworCQkJCWNvbXBsZXRlX3JlZnNfYmVmb3JlX2ZldGNoID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKworCQlpZiAoIWlzX2xvY2FsICYmICFjb21wbGV0ZV9yZWZzX2JlZm9yZV9mZXRjaCkKKwkJCXRyYW5zcG9ydF9mZXRjaF9yZWZzKHRyYW5zcG9ydCwgbWFwcGVkX3JlZnMpOworCisJCXJlbW90ZV9oZWFkID0gZmluZF9yZWZfYnlfbmFtZShyZWZzLCAiSEVBRCIpOworCQlyZW1vdGVfaGVhZF9wb2ludHNfYXQgPQorCQkJZ3Vlc3NfcmVtb3RlX2hlYWQocmVtb3RlX2hlYWQsIG1hcHBlZF9yZWZzLCAwKTsKKworCQlpZiAob3B0aW9uX2JyYW5jaCkgeworCQkJb3VyX2hlYWRfcG9pbnRzX2F0ID0KKwkJCQlmaW5kX3JlbW90ZV9icmFuY2gobWFwcGVkX3JlZnMsIG9wdGlvbl9icmFuY2gpOworCisJCQlpZiAoIW91cl9oZWFkX3BvaW50c19hdCkKKwkJCQlkaWUoXygiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiKSwKKwkJCQkgICAgb3B0aW9uX2JyYW5jaCwgb3B0aW9uX29yaWdpbik7CisJCX0KKwkJZWxzZQorCQkJb3VyX2hlYWRfcG9pbnRzX2F0ID0gcmVtb3RlX2hlYWRfcG9pbnRzX2F0OworCX0KKwllbHNlIHsKKwkJaWYgKG9wdGlvbl9icmFuY2gpCisJCQlkaWUoXygiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiKSwKKwkJCQkJb3B0aW9uX2JyYW5jaCwgb3B0aW9uX29yaWdpbik7CisKKwkJd2FybmluZyhfKCJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIikpOworCQltYXBwZWRfcmVmcyA9IE5VTEw7CisJCW91cl9oZWFkX3BvaW50c19hdCA9IE5VTEw7CisJCXJlbW90ZV9oZWFkX3BvaW50c19hdCA9IE5VTEw7CisJCXJlbW90ZV9oZWFkID0gTlVMTDsKKwkJb3B0aW9uX25vX2NoZWNrb3V0ID0gMTsKKwkJaWYgKCFvcHRpb25fYmFyZSkKKwkJCWluc3RhbGxfYnJhbmNoX2NvbmZpZygwLCAibWFzdGVyIiwgb3B0aW9uX29yaWdpbiwKKwkJCQkJICAgICAgInJlZnMvaGVhZHMvbWFzdGVyIik7CisJfQorCisJd3JpdGVfcmVmc3BlY19jb25maWcoc3JjX3JlZl9wcmVmaXgsIG91cl9oZWFkX3BvaW50c19hdCwKKwkJCXJlbW90ZV9oZWFkX3BvaW50c19hdCwgJmJyYW5jaF90b3ApOworCisJaWYgKGZpbHRlcl9vcHRpb25zLmNob2ljZSkKKwkJcGFydGlhbF9jbG9uZV9yZWdpc3RlcihvcHRpb25fb3JpZ2luLCAmZmlsdGVyX29wdGlvbnMpOworCisJaWYgKGlzX2xvY2FsKQorCQljbG9uZV9sb2NhbChwYXRoLCBnaXRfZGlyKTsKKwllbHNlIGlmIChyZWZzICYmIGNvbXBsZXRlX3JlZnNfYmVmb3JlX2ZldGNoKQorCQl0cmFuc3BvcnRfZmV0Y2hfcmVmcyh0cmFuc3BvcnQsIG1hcHBlZF9yZWZzKTsKKworCXVwZGF0ZV9yZW1vdGVfcmVmcyhyZWZzLCBtYXBwZWRfcmVmcywgcmVtb3RlX2hlYWRfcG9pbnRzX2F0LAorCQkJICAgYnJhbmNoX3RvcC5idWYsIHJlZmxvZ19tc2cuYnVmLCB0cmFuc3BvcnQsCisJCQkgICAhaXNfbG9jYWwpOworCisJdXBkYXRlX2hlYWQob3VyX2hlYWRfcG9pbnRzX2F0LCByZW1vdGVfaGVhZCwgcmVmbG9nX21zZy5idWYpOworCisJLyoKKwkgKiBXZSB3YW50IHRvIHNob3cgcHJvZ3Jlc3MgZm9yIHJlY3Vyc2l2ZSBzdWJtb2R1bGUgY2xvbmVzIGlmZgorCSAqIHdlIGRpZCBzbyBmb3IgdGhlIG1haW4gY2xvbmUuIEJ1dCBvbmx5IHRoZSB0cmFuc3BvcnQga25vd3MKKwkgKiB0aGUgZmluYWwgZGVjaXNpb24gZm9yIHRoaXMgZmxhZywgc28gd2UgbmVlZCB0byByZXNjdWUgdGhlIHZhbHVlCisJICogYmVmb3JlIHdlIGZyZWUgdGhlIHRyYW5zcG9ydC4KKwkgKi8KKwlzdWJtb2R1bGVfcHJvZ3Jlc3MgPSB0cmFuc3BvcnQtPnByb2dyZXNzOworCisJdHJhbnNwb3J0X3VubG9ja19wYWNrKHRyYW5zcG9ydCk7CisJdHJhbnNwb3J0X2Rpc2Nvbm5lY3QodHJhbnNwb3J0KTsKKworCWlmIChvcHRpb25fZGlzc29jaWF0ZSkgeworCQljbG9zZV9vYmplY3Rfc3RvcmUodGhlX3JlcG9zaXRvcnktPm9iamVjdHMpOworCQlkaXNzb2NpYXRlX2Zyb21fcmVmZXJlbmNlcygpOworCX0KKworCWp1bmtfbW9kZSA9IEpVTktfTEVBVkVfUkVQTzsKKwllcnIgPSBjaGVja291dChzdWJtb2R1bGVfcHJvZ3Jlc3MpOworCisJc3RyYnVmX3JlbGVhc2UoJnJlZmxvZ19tc2cpOworCXN0cmJ1Zl9yZWxlYXNlKCZicmFuY2hfdG9wKTsKKwlzdHJidWZfcmVsZWFzZSgma2V5KTsKKwlzdHJidWZfcmVsZWFzZSgmZGVmYXVsdF9yZWZzcGVjKTsKKwlqdW5rX21vZGUgPSBKVU5LX0xFQVZFX0FMTDsKKworCWFyZ3ZfYXJyYXlfY2xlYXIoJnJlZl9wcmVmaXhlcyk7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29sdW1uLmMgYi9idWlsdGluL2NvbHVtbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MTVlMTQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NvbHVtbi5jCkBAIC0wLDAgKzEsNTkgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJjb2x1bW4uaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2NvbHVtbl91c2FnZVtdID0geworCU5fKCJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIiksCisJTlVMTAorfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29sb3B0czsKKworc3RhdGljIGludCBjb2x1bW5fY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXJldHVybiBnaXRfY29sdW1uX2NvbmZpZyh2YXIsIHZhbHVlLCBjYiwgJmNvbG9wdHMpOworfQorCitpbnQgY21kX2NvbHVtbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY29sdW1uX29wdGlvbnMgY29wdHM7CisJY29uc3QgY2hhciAqY29tbWFuZCA9IE5VTEwsICpyZWFsX2NvbW1hbmQgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKDAsICJjb21tYW5kIiwgJnJlYWxfY29tbWFuZCwgTl8oIm5hbWUiKSwgTl8oImxvb2t1cCBjb25maWcgdmFycyIpKSwKKwkJT1BUX0NPTFVNTigwLCAibW9kZSIsICZjb2xvcHRzLCBOXygibGF5b3V0IHRvIHVzZSIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgInJhdy1tb2RlIiwgJmNvbG9wdHMsIE5fKCJsYXlvdXQgdG8gdXNlIikpLAorCQlPUFRfSU5URUdFUigwLCAid2lkdGgiLCAmY29wdHMud2lkdGgsIE5fKCJNYXhpbXVtIHdpZHRoIikpLAorCQlPUFRfU1RSSU5HKDAsICJpbmRlbnQiLCAmY29wdHMuaW5kZW50LCBOXygic3RyaW5nIiksIE5fKCJQYWRkaW5nIHNwYWNlIG9uIGxlZnQgYm9yZGVyIikpLAorCQlPUFRfSU5URUdFUigwLCAibmwiLCAmY29wdHMubmwsIE5fKCJQYWRkaW5nIHNwYWNlIG9uIHJpZ2h0IGJvcmRlciIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgInBhZGRpbmciLCAmY29wdHMucGFkZGluZywgTl8oIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJLyogVGhpcyBvbmUgaXMgc3BlY2lhbCBhbmQgbXVzdCBiZSB0aGUgZmlyc3Qgb25lICovCisJaWYgKGFyZ2MgPiAxICYmIHN0YXJ0c193aXRoKGFyZ3ZbMV0sICItLWNvbW1hbmQ9IikpIHsKKwkJY29tbWFuZCA9IGFyZ3ZbMV0gKyAxMDsKKwkJZ2l0X2NvbmZpZyhjb2x1bW5fY29uZmlnLCAodm9pZCAqKWNvbW1hbmQpOworCX0gZWxzZQorCQlnaXRfY29uZmlnKGNvbHVtbl9jb25maWcsIE5VTEwpOworCisJbWVtc2V0KCZjb3B0cywgMCwgc2l6ZW9mKGNvcHRzKSk7CisJY29wdHMucGFkZGluZyA9IDE7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBidWlsdGluX2NvbHVtbl91c2FnZSwgMCk7CisJaWYgKGFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2NvbHVtbl91c2FnZSwgb3B0aW9ucyk7CisJaWYgKHJlYWxfY29tbWFuZCB8fCBjb21tYW5kKSB7CisJCWlmICghcmVhbF9jb21tYW5kIHx8ICFjb21tYW5kIHx8IHN0cmNtcChyZWFsX2NvbW1hbmQsIGNvbW1hbmQpKQorCQkJZGllKF8oIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIpKTsKKwl9CisJZmluYWxpemVfY29sb3B0cygmY29sb3B0cywgLTEpOworCXdoaWxlICghc3RyYnVmX2dldGxpbmUoJnNiLCBzdGRpbikpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmbGlzdCwgc2IuYnVmKTsKKworCXByaW50X2NvbHVtbnMoJmxpc3QsIGNvbG9wdHMsICZjb3B0cyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NvbW1pdC1ncmFwaC5jIGIvYnVpbHRpbi9jb21taXQtZ3JhcGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWZlNjAzCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jb21taXQtZ3JhcGguYwpAQCAtMCwwICsxLDI4MyBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LWdyYXBoLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgYnVpbHRpbl9jb21taXRfZ3JhcGhfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10iKSwKKwlOXygiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmRdICIKKwkgICAiWy0tc3BsaXRbPTxzdHJhdGVneT5dXSBbLS1yZWFjaGFibGV8LS1zdGRpbi1wYWNrc3wtLXN0ZGluLWNvbW1pdHNdICIKKwkgICAiWy0tY2hhbmdlZC1wYXRoc10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2NvbW1pdF9ncmFwaF92ZXJpZnlfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fY29tbWl0X2dyYXBoX3dyaXRlX3VzYWdlW10gPSB7CisJTl8oImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tYXBwZW5kXSAiCisJICAgIlstLXNwbGl0Wz08c3RyYXRlZ3k+XV0gWy0tcmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSAiCisJICAgIlstLWNoYW5nZWQtcGF0aHNdIFstLVtuby1dcHJvZ3Jlc3NdIDxzcGxpdCBvcHRpb25zPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0c19jb21taXRfZ3JhcGggeworCWNvbnN0IGNoYXIgKm9ial9kaXI7CisJaW50IHJlYWNoYWJsZTsKKwlpbnQgc3RkaW5fcGFja3M7CisJaW50IHN0ZGluX2NvbW1pdHM7CisJaW50IGFwcGVuZDsKKwlpbnQgc3BsaXQ7CisJaW50IHNoYWxsb3c7CisJaW50IHByb2dyZXNzOworCWludCBlbmFibGVfY2hhbmdlZF9wYXRoczsKK30gb3B0czsKKworc3RhdGljIHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpmaW5kX29kYihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJIGNvbnN0IGNoYXIgKm9ial9kaXIpCit7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYjsKKwljaGFyICpvYmpfZGlyX3JlYWwgPSByZWFsX3BhdGhkdXAob2JqX2RpciwgMSk7CisJc3RydWN0IHN0cmJ1ZiBvZGJfcGF0aF9yZWFsID0gU1RSQlVGX0lOSVQ7CisKKwlwcmVwYXJlX2FsdF9vZGIocik7CisJZm9yIChvZGIgPSByLT5vYmplY3RzLT5vZGI7IG9kYjsgb2RiID0gb2RiLT5uZXh0KSB7CisJCXN0cmJ1Zl9yZWFscGF0aCgmb2RiX3BhdGhfcmVhbCwgb2RiLT5wYXRoLCAxKTsKKwkJaWYgKCFzdHJjbXAob2JqX2Rpcl9yZWFsLCBvZGJfcGF0aF9yZWFsLmJ1ZikpCisJCQlicmVhazsKKwl9CisKKwlmcmVlKG9ial9kaXJfcmVhbCk7CisJc3RyYnVmX3JlbGVhc2UoJm9kYl9wYXRoX3JlYWwpOworCisJaWYgKCFvZGIpCisJCWRpZShfKCJjb3VsZCBub3QgZmluZCBvYmplY3QgZGlyZWN0b3J5IG1hdGNoaW5nICVzIiksIG9ial9kaXIpOworCXJldHVybiBvZGI7Cit9CisKK3N0YXRpYyBpbnQgZ3JhcGhfdmVyaWZ5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgY29tbWl0X2dyYXBoICpncmFwaCA9IE5VTEw7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYiA9IE5VTEw7CisJY2hhciAqZ3JhcGhfbmFtZTsKKwlpbnQgb3Blbl9vazsKKwlpbnQgZmQ7CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IGZsYWdzID0gMDsKKworCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fY29tbWl0X2dyYXBoX3ZlcmlmeV9vcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoMCwgIm9iamVjdC1kaXIiLCAmb3B0cy5vYmpfZGlyLAorCQkJICAgTl8oImRpciIpLAorCQkJICAgTl8oIlRoZSBvYmplY3QgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBncmFwaCIpKSwKKwkJT1BUX0JPT0woMCwgInNoYWxsb3ciLCAmb3B0cy5zaGFsbG93LAorCQkJIE5fKCJpZiB0aGUgY29tbWl0LWdyYXBoIGlzIHNwbGl0LCBvbmx5IHZlcmlmeSB0aGUgdGlwIGZpbGUiKSksCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZvcHRzLnByb2dyZXNzLCBOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCQlPUFRfRU5EKCksCisJfTsKKworCXRyYWNlMl9jbWRfbW9kZSgidmVyaWZ5Iik7CisKKwlvcHRzLnByb2dyZXNzID0gaXNhdHR5KDIpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsCisJCQkgICAgIGJ1aWx0aW5fY29tbWl0X2dyYXBoX3ZlcmlmeV9vcHRpb25zLAorCQkJICAgICBidWlsdGluX2NvbW1pdF9ncmFwaF92ZXJpZnlfdXNhZ2UsIDApOworCisJaWYgKCFvcHRzLm9ial9kaXIpCisJCW9wdHMub2JqX2RpciA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7CisJaWYgKG9wdHMuc2hhbGxvdykKKwkJZmxhZ3MgfD0gQ09NTUlUX0dSQVBIX1ZFUklGWV9TSEFMTE9XOworCWlmIChvcHRzLnByb2dyZXNzKQorCQlmbGFncyB8PSBDT01NSVRfR1JBUEhfV1JJVEVfUFJPR1JFU1M7CisKKwlvZGIgPSBmaW5kX29kYih0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmpfZGlyKTsKKwlncmFwaF9uYW1lID0gZ2V0X2NvbW1pdF9ncmFwaF9maWxlbmFtZShvZGIpOworCW9wZW5fb2sgPSBvcGVuX2NvbW1pdF9ncmFwaChncmFwaF9uYW1lLCAmZmQsICZzdCk7CisJaWYgKCFvcGVuX29rICYmIGVycm5vICE9IEVOT0VOVCkKKwkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCBvcGVuIGNvbW1pdC1ncmFwaCAnJXMnIiksIGdyYXBoX25hbWUpOworCisJRlJFRV9BTkRfTlVMTChncmFwaF9uYW1lKTsKKworCWlmIChvcGVuX29rKQorCQlncmFwaCA9IGxvYWRfY29tbWl0X2dyYXBoX29uZV9mZF9zdChmZCwgJnN0LCBvZGIpOworCWVsc2UKKwkJZ3JhcGggPSByZWFkX2NvbW1pdF9ncmFwaF9vbmUodGhlX3JlcG9zaXRvcnksIG9kYik7CisKKwkvKiBSZXR1cm4gZmFpbHVyZSBpZiBvcGVuX29rIHByZWRpY3RlZCBzdWNjZXNzICovCisJaWYgKCFncmFwaCkKKwkJcmV0dXJuICEhb3Blbl9vazsKKworCVVOTEVBSyhncmFwaCk7CisJcmV0dXJuIHZlcmlmeV9jb21taXRfZ3JhcGgodGhlX3JlcG9zaXRvcnksIGdyYXBoLCBmbGFncyk7Cit9CisKK2V4dGVybiBpbnQgcmVhZF9yZXBsYWNlX3JlZnM7CitzdGF0aWMgc3RydWN0IHNwbGl0X2NvbW1pdF9ncmFwaF9vcHRzIHNwbGl0X29wdHM7CisKK3N0YXRpYyBpbnQgd3JpdGVfb3B0aW9uX3BhcnNlX3NwbGl0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCSAgICBpbnQgdW5zZXQpCit7CisJZW51bSBjb21taXRfZ3JhcGhfc3BsaXRfZmxhZ3MgKmZsYWdzID0gb3B0LT52YWx1ZTsKKworCW9wdHMuc3BsaXQgPSAxOworCWlmICghYXJnKQorCQlyZXR1cm4gMDsKKworCWlmICghc3RyY21wKGFyZywgIm5vLW1lcmdlIikpCisJCSpmbGFncyA9IENPTU1JVF9HUkFQSF9TUExJVF9NRVJHRV9QUk9ISUJJVEVEOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAicmVwbGFjZSIpKQorCQkqZmxhZ3MgPSBDT01NSVRfR1JBUEhfU1BMSVRfUkVQTEFDRTsKKwllbHNlCisJCWRpZShfKCJ1bnJlY29nbml6ZWQgLS1zcGxpdCBhcmd1bWVudCwgJXMiKSwgYXJnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdyYXBoX3dyaXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBhY2tfaW5kZXhlcyA9IE5VTEw7CisJc3RydWN0IG9pZHNldCBjb21taXRzID0gT0lEU0VUX0lOSVQ7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYiA9IE5VTEw7CisJc3RydWN0IHN0cmluZ19saXN0IGxpbmVzOworCWludCByZXN1bHQgPSAwOworCWVudW0gY29tbWl0X2dyYXBoX3dyaXRlX2ZsYWdzIGZsYWdzID0gMDsKKworCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fY29tbWl0X2dyYXBoX3dyaXRlX29wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAib2JqZWN0LWRpciIsICZvcHRzLm9ial9kaXIsCisJCQlOXygiZGlyIiksCisJCQlOXygiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIikpLAorCQlPUFRfQk9PTCgwLCAicmVhY2hhYmxlIiwgJm9wdHMucmVhY2hhYmxlLAorCQkJTl8oInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiKSksCisJCU9QVF9CT09MKDAsICJzdGRpbi1wYWNrcyIsICZvcHRzLnN0ZGluX3BhY2tzLAorCQkJTl8oInNjYW4gcGFjay1pbmRleGVzIGxpc3RlZCBieSBzdGRpbiBmb3IgY29tbWl0cyIpKSwKKwkJT1BUX0JPT0woMCwgInN0ZGluLWNvbW1pdHMiLCAmb3B0cy5zdGRpbl9jb21taXRzLAorCQkJTl8oInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iKSksCisJCU9QVF9CT09MKDAsICJhcHBlbmQiLCAmb3B0cy5hcHBlbmQsCisJCQlOXygiaW5jbHVkZSBhbGwgY29tbWl0cyBhbHJlYWR5IGluIHRoZSBjb21taXQtZ3JhcGggZmlsZSIpKSwKKwkJT1BUX0JPT0woMCwgImNoYW5nZWQtcGF0aHMiLCAmb3B0cy5lbmFibGVfY2hhbmdlZF9wYXRocywKKwkJCU5fKCJlbmFibGUgY29tcHV0YXRpb24gZm9yIGNoYW5nZWQgcGF0aHMiKSksCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZvcHRzLnByb2dyZXNzLCBOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAic3BsaXQiLCAmc3BsaXRfb3B0cy5mbGFncywgTlVMTCwKKwkJCU5fKCJhbGxvdyB3cml0aW5nIGFuIGluY3JlbWVudGFsIGNvbW1pdC1ncmFwaCBmaWxlIiksCisJCQlQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLAorCQkJd3JpdGVfb3B0aW9uX3BhcnNlX3NwbGl0KSwKKwkJT1BUX0lOVEVHRVIoMCwgIm1heC1jb21taXRzIiwgJnNwbGl0X29wdHMubWF4X2NvbW1pdHMsCisJCQlOXygibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgInNpemUtbXVsdGlwbGUiLCAmc3BsaXRfb3B0cy5zaXplX211bHRpcGxlLAorCQkJTl8oIm1heGltdW0gcmF0aW8gYmV0d2VlbiB0d28gbGV2ZWxzIG9mIGEgc3BsaXQgY29tbWl0LWdyYXBoIikpLAorCQlPUFRfRVhQSVJZX0RBVEUoMCwgImV4cGlyZS10aW1lIiwgJnNwbGl0X29wdHMuZXhwaXJlX3RpbWUsCisJCQlOXygib25seSBleHBpcmUgZmlsZXMgb2xkZXIgdGhhbiBhIGdpdmVuIGRhdGUtdGltZSIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlvcHRzLnByb2dyZXNzID0gaXNhdHR5KDIpOworCXNwbGl0X29wdHMuc2l6ZV9tdWx0aXBsZSA9IDI7CisJc3BsaXRfb3B0cy5tYXhfY29tbWl0cyA9IDA7CisJc3BsaXRfb3B0cy5leHBpcmVfdGltZSA9IDA7CisKKwl0cmFjZTJfY21kX21vZGUoIndyaXRlIik7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLAorCQkJICAgICBidWlsdGluX2NvbW1pdF9ncmFwaF93cml0ZV9vcHRpb25zLAorCQkJICAgICBidWlsdGluX2NvbW1pdF9ncmFwaF93cml0ZV91c2FnZSwgMCk7CisKKwlpZiAob3B0cy5yZWFjaGFibGUgKyBvcHRzLnN0ZGluX3BhY2tzICsgb3B0cy5zdGRpbl9jb21taXRzID4gMSkKKwkJZGllKF8oInVzZSBhdCBtb3N0IG9uZSBvZiAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzLCBvciAtLXN0ZGluLXBhY2tzIikpOworCWlmICghb3B0cy5vYmpfZGlyKQorCQlvcHRzLm9ial9kaXIgPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOworCWlmIChvcHRzLmFwcGVuZCkKKwkJZmxhZ3MgfD0gQ09NTUlUX0dSQVBIX1dSSVRFX0FQUEVORDsKKwlpZiAob3B0cy5zcGxpdCkKKwkJZmxhZ3MgfD0gQ09NTUlUX0dSQVBIX1dSSVRFX1NQTElUOworCWlmIChvcHRzLnByb2dyZXNzKQorCQlmbGFncyB8PSBDT01NSVRfR1JBUEhfV1JJVEVfUFJPR1JFU1M7CisJaWYgKG9wdHMuZW5hYmxlX2NoYW5nZWRfcGF0aHMgfHwKKwkgICAgZ2l0X2Vudl9ib29sKEdJVF9URVNUX0NPTU1JVF9HUkFQSF9DSEFOR0VEX1BBVEhTLCAwKSkKKwkJZmxhZ3MgfD0gQ09NTUlUX0dSQVBIX1dSSVRFX0JMT09NX0ZJTFRFUlM7CisKKwlyZWFkX3JlcGxhY2VfcmVmcyA9IDA7CisJb2RiID0gZmluZF9vZGIodGhlX3JlcG9zaXRvcnksIG9wdHMub2JqX2Rpcik7CisKKwlpZiAob3B0cy5yZWFjaGFibGUpIHsKKwkJaWYgKHdyaXRlX2NvbW1pdF9ncmFwaF9yZWFjaGFibGUob2RiLCBmbGFncywgJnNwbGl0X29wdHMpKQorCQkJcmV0dXJuIDE7CisJCXJldHVybiAwOworCX0KKworCXN0cmluZ19saXN0X2luaXQoJmxpbmVzLCAwKTsKKwlpZiAob3B0cy5zdGRpbl9wYWNrcyB8fCBvcHRzLnN0ZGluX2NvbW1pdHMpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCQl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4pICE9IEVPRikKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmbGluZXMsIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworCisJCWlmIChvcHRzLnN0ZGluX3BhY2tzKQorCQkJcGFja19pbmRleGVzID0gJmxpbmVzOworCQlpZiAob3B0cy5zdGRpbl9jb21taXRzKSB7CisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJCW9pZHNldF9pbml0KCZjb21taXRzLCBsaW5lcy5ucik7CisJCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZsaW5lcykgeworCQkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQkJCWNvbnN0IGNoYXIgKmVuZDsKKworCQkJCWlmIChwYXJzZV9vaWRfaGV4KGl0ZW0tPnN0cmluZywgJm9pZCwgJmVuZCkpIHsKKwkJCQkJZXJyb3IoXygidW5leHBlY3RlZCBub24taGV4IG9iamVjdCBJRDogIgorCQkJCQkJIiVzIiksIGl0ZW0tPnN0cmluZyk7CisJCQkJCXJldHVybiAxOworCQkJCX0KKworCQkJCW9pZHNldF9pbnNlcnQoJmNvbW1pdHMsICZvaWQpOworCQkJfQorCQkJZmxhZ3MgfD0gQ09NTUlUX0dSQVBIX1dSSVRFX0NIRUNLX09JRFM7CisJCX0KKworCQlVTkxFQUsoYnVmKTsKKwl9CisKKwlpZiAod3JpdGVfY29tbWl0X2dyYXBoKG9kYiwKKwkJCSAgICAgICBwYWNrX2luZGV4ZXMsCisJCQkgICAgICAgb3B0cy5zdGRpbl9jb21taXRzID8gJmNvbW1pdHMgOiBOVUxMLAorCQkJICAgICAgIGZsYWdzLAorCQkJICAgICAgICZzcGxpdF9vcHRzKSkKKwkJcmVzdWx0ID0gMTsKKworCVVOTEVBSyhsaW5lcyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IGNtZF9jb21taXRfZ3JhcGgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9jb21taXRfZ3JhcGhfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKDAsICJvYmplY3QtZGlyIiwgJm9wdHMub2JqX2RpciwKKwkJCU5fKCJkaXIiKSwKKwkJCU5fKCJUaGUgb2JqZWN0IGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgZ3JhcGgiKSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9jb21taXRfZ3JhcGhfdXNhZ2UsCisJCQkJICAgYnVpbHRpbl9jb21taXRfZ3JhcGhfb3B0aW9ucyk7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LAorCQkJICAgICBidWlsdGluX2NvbW1pdF9ncmFwaF9vcHRpb25zLAorCQkJICAgICBidWlsdGluX2NvbW1pdF9ncmFwaF91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisKKwlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOworCisJaWYgKGFyZ2MgPiAwKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICJ2ZXJpZnkiKSkKKwkJCXJldHVybiBncmFwaF92ZXJpZnkoYXJnYywgYXJndik7CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICJ3cml0ZSIpKQorCQkJcmV0dXJuIGdyYXBoX3dyaXRlKGFyZ2MsIGFyZ3YpOworCX0KKworCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2NvbW1pdF9ncmFwaF91c2FnZSwKKwkJCSAgIGJ1aWx0aW5fY29tbWl0X2dyYXBoX29wdGlvbnMpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jb21taXQtdHJlZS5jIGIvYnVpbHRpbi9jb21taXQtdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMzFiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NvbW1pdC10cmVlLmMKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNvbW1pdF90cmVlX3VzYWdlW10gPSB7CisJTl8oImdpdCBjb21taXQtdHJlZSBbKC1wIDxwYXJlbnQ+KS4uLl0gWy1TWzxrZXlpZD5dXSBbKC1tIDxtZXNzYWdlPikuLi5dICIKKwkJIlsoLUYgPGZpbGU+KS4uLl0gPHRyZWU+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNpZ25fY29tbWl0OworCitzdGF0aWMgdm9pZCBuZXdfcGFyZW50KHN0cnVjdCBjb21taXQgKnBhcmVudCwgc3RydWN0IGNvbW1pdF9saXN0ICoqcGFyZW50c19wKQoreworCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9ICZwYXJlbnQtPm9iamVjdC5vaWQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCWZvciAocGFyZW50cyA9ICpwYXJlbnRzX3A7IHBhcmVudHM7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7CisJCWlmIChwYXJlbnRzLT5pdGVtID09IHBhcmVudCkgeworCQkJZXJyb3IoXygiZHVwbGljYXRlIHBhcmVudCAlcyBpZ25vcmVkIiksIG9pZF90b19oZXgob2lkKSk7CisJCQlyZXR1cm47CisJCX0KKwkJcGFyZW50c19wID0gJnBhcmVudHMtPm5leHQ7CisJfQorCWNvbW1pdF9saXN0X2luc2VydChwYXJlbnQsIHBhcmVudHNfcCk7Cit9CisKK3N0YXRpYyBpbnQgY29tbWl0X3RyZWVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWludCBzdGF0dXMgPSBnaXRfZ3BnX2NvbmZpZyh2YXIsIHZhbHVlLCBOVUxMKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IHBhcnNlX3BhcmVudF9hcmdfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwYXJlbnRzID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfTkVHX05PQVJHKHVuc2V0LCBhcmcpOworCisJaWYgKGdldF9vaWRfY29tbWl0KGFyZywgJm9pZCkpCisJCWRpZShfKCJub3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIpLCBhcmcpOworCisJYXNzZXJ0X29pZF90eXBlKCZvaWQsIE9CSl9DT01NSVQpOworCW5ld19wYXJlbnQobG9va3VwX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwgJm9pZCksIHBhcmVudHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX21lc3NhZ2VfYXJnX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IHN0cmJ1ZiAqYnVmID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfTkVHX05PQVJHKHVuc2V0LCBhcmcpOworCisJaWYgKGJ1Zi0+bGVuKQorCQlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKwlzdHJidWZfYWRkc3RyKGJ1ZiwgYXJnKTsKKwlzdHJidWZfY29tcGxldGVfbGluZShidWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZmlsZV9hcmdfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgZmQ7CisJc3RydWN0IHN0cmJ1ZiAqYnVmID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfTkVHX05PQVJHKHVuc2V0LCBhcmcpOworCisJaWYgKGJ1Zi0+bGVuKQorCQlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKwlpZiAoIXN0cmNtcChhcmcsICItIikpCisJCWZkID0gMDsKKwllbHNlIHsKKwkJZmQgPSBvcGVuKGFyZywgT19SRE9OTFkpOworCQlpZiAoZmQgPCAwKQorCQkJZGllX2Vycm5vKF8oImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIG9wZW4gJyVzJyIpLCBhcmcpOworCX0KKwlpZiAoc3RyYnVmX3JlYWQoYnVmLCBmZCwgMCkgPCAwKQorCQlkaWVfZXJybm8oXygiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCAnJXMnIiksIGFyZyk7CisJaWYgKGZkICYmIGNsb3NlKGZkKSkKKwkJZGllX2Vycm5vKF8oImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIGNsb3NlICclcyciKSwgYXJnKTsKKworCXJldHVybiAwOworfQorCitpbnQgY21kX2NvbW1pdF90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IE5VTEw7CisJc3RydWN0IG9iamVjdF9pZCB0cmVlX29pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGNvbW1pdF9vaWQ7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0NBTExCQUNLX0YoJ3AnLCBOVUxMLCAmcGFyZW50cywgTl8oInBhcmVudCIpLAorCQkJTl8oImlkIG9mIGEgcGFyZW50IGNvbW1pdCBvYmplY3QiKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2VfcGFyZW50X2FyZ19jYWxsYmFjayksCisJCU9QVF9DQUxMQkFDS19GKCdtJywgTlVMTCwgJmJ1ZmZlciwgTl8oIm1lc3NhZ2UiKSwKKwkJCU5fKCJjb21taXQgbWVzc2FnZSIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9tZXNzYWdlX2FyZ19jYWxsYmFjayksCisJCU9QVF9DQUxMQkFDS19GKCdGJywgTlVMTCwgJmJ1ZmZlciwgTl8oImZpbGUiKSwKKwkJCU5fKCJyZWFkIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tIGZpbGUiKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2VfZmlsZV9hcmdfY2FsbGJhY2spLAorCQl7IE9QVElPTl9TVFJJTkcsICdTJywgImdwZy1zaWduIiwgJnNpZ25fY29tbWl0LCBOXygia2V5LWlkIiksCisJCQlOXygiR1BHIHNpZ24gY29tbWl0IiksIFBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdCkgIiIgfSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoY29tbWl0X3RyZWVfY29uZmlnLCBOVUxMKTsKKworCWlmIChhcmdjIDwgMiB8fCAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoY29tbWl0X3RyZWVfdXNhZ2UsIG9wdGlvbnMpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBjb21taXRfdHJlZV91c2FnZSwgMCk7CisKKwlpZiAoYXJnYyAhPSAxKQorCQlkaWUoXygibXVzdCBnaXZlIGV4YWN0bHkgb25lIHRyZWUiKSk7CisKKwlpZiAoZ2V0X29pZF90cmVlKGFyZ3ZbMF0sICZ0cmVlX29pZCkpCisJCWRpZShfKCJub3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIpLCBhcmd2WzBdKTsKKworCWlmICghYnVmZmVyLmxlbikgeworCQlpZiAoc3RyYnVmX3JlYWQoJmJ1ZmZlciwgMCwgMCkgPCAwKQorCQkJZGllX2Vycm5vKF8oImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQiKSk7CisJfQorCisJaWYgKGNvbW1pdF90cmVlKGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4sICZ0cmVlX29pZCwgcGFyZW50cywgJmNvbW1pdF9vaWQsCisJCQlOVUxMLCBzaWduX2NvbW1pdCkpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJCXJldHVybiAxOworCX0KKworCXByaW50ZigiJXNcbiIsIG9pZF90b19oZXgoJmNvbW1pdF9vaWQpKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29tbWl0LmMgYi9idWlsdGluL2NvbW1pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYjczOTYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NvbW1pdC5jCkBAIC0wLDAgKzEsMTcyNiBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCBjb21taXQiCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEtyaXN0aWFuIEjDuGdzYmVyZyA8a3JoQHJlZGhhdC5jb20+CisgKiBCYXNlZCBvbiBnaXQtY29tbWl0LnNoIGJ5IEp1bmlvIEMgSGFtYW5vIGFuZCBMaW51cyBUb3J2YWxkcworICovCisKKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJ3dC1zdGF0dXMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJyZXJlcmUuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJjb2x1bW4uaCIKKyNpbmNsdWRlICJzZXF1ZW5jZXIuaCIKKyNpbmNsdWRlICJtYWlsbWFwLmgiCisjaW5jbHVkZSAiaGVscC5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorI2luY2x1ZGUgImNvbW1pdC1ncmFwaC5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fY29tbWl0X3VzYWdlW10gPSB7CisJTl8oImdpdCBjb21taXQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3N0YXR1c191c2FnZVtdID0geworCU5fKCJnaXQgc3RhdHVzIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIGVtcHR5X2FtZW5kX2FkdmljZVtdID0KK05fKCJZb3UgYXNrZWQgdG8gYW1lbmQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2VcbiIKKyJpdCBlbXB0eS4gWW91IGNhbiByZXBlYXQgeW91ciBjb21tYW5kIHdpdGggLS1hbGxvdy1lbXB0eSwgb3IgeW91IGNhblxuIgorInJlbW92ZSB0aGUgY29tbWl0IGVudGlyZWx5IHdpdGggXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIpOworCitzdGF0aWMgY29uc3QgY2hhciBlbXB0eV9jaGVycnlfcGlja19hZHZpY2VbXSA9CitOXygiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIpOworCitzdGF0aWMgY29uc3QgY2hhciBlbXB0eV9yZWJhc2VfcGlja19hZHZpY2VbXSA9CitOXygiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgcmViYXNlIC0tc2tpcCdcbiIpOworCitzdGF0aWMgY29uc3QgY2hhciBlbXB0eV9jaGVycnlfcGlja19hZHZpY2Vfc2luZ2xlW10gPQorTl8oIk90aGVyd2lzZSwgcGxlYXNlIHVzZSAnZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCdcbiIpOworCitzdGF0aWMgY29uc3QgY2hhciBlbXB0eV9jaGVycnlfcGlja19hZHZpY2VfbXVsdGlbXSA9CitOXygiYW5kIHRoZW4gdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorInRvIHJlc3VtZSBjaGVycnktcGlja2luZyB0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbG9yX3N0YXR1c19zbG90c1tdID0geworCVtXVF9TVEFUVVNfSEVBREVSXQkgID0gImhlYWRlciIsCisJW1dUX1NUQVRVU19VUERBVEVEXQkgID0gInVwZGF0ZWQiLAorCVtXVF9TVEFUVVNfQ0hBTkdFRF0JICA9ICJjaGFuZ2VkIiwKKwlbV1RfU1RBVFVTX1VOVFJBQ0tFRF0JICA9ICJ1bnRyYWNrZWQiLAorCVtXVF9TVEFUVVNfTk9CUkFOQ0hdCSAgPSAibm9CcmFuY2giLAorCVtXVF9TVEFUVVNfVU5NRVJHRURdCSAgPSAidW5tZXJnZWQiLAorCVtXVF9TVEFUVVNfTE9DQUxfQlJBTkNIXSAgPSAibG9jYWxCcmFuY2giLAorCVtXVF9TVEFUVVNfUkVNT1RFX0JSQU5DSF0gPSAicmVtb3RlQnJhbmNoIiwKKwlbV1RfU1RBVFVTX09OQlJBTkNIXQkgID0gImJyYW5jaCIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqdXNlX21lc3NhZ2VfYnVmZmVyOworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jazsgLyogcmVhbCBpbmRleCAqLworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgZmFsc2VfbG9jazsgLyogdXNlZCBvbmx5IGZvciBwYXJ0aWFsIGNvbW1pdHMgKi8KK3N0YXRpYyBlbnVtIHsKKwlDT01NSVRfQVNfSVMgPSAxLAorCUNPTU1JVF9OT1JNQUwsCisJQ09NTUlUX1BBUlRJQUwKK30gY29tbWl0X3N0eWxlOworCitzdGF0aWMgY29uc3QgY2hhciAqbG9nZmlsZSwgKmZvcmNlX2F1dGhvcjsKK3N0YXRpYyBjb25zdCBjaGFyICp0ZW1wbGF0ZV9maWxlOworLyoKKyAqIFRoZSBfbWVzc2FnZSB2YXJpYWJsZXMgYXJlIGNvbW1pdCBuYW1lcyBmcm9tIHdoaWNoIHRvIHRha2UKKyAqIHRoZSBjb21taXQgbWVzc2FnZSBhbmQvb3IgYXV0aG9yc2hpcC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmF1dGhvcl9tZXNzYWdlLCAqYXV0aG9yX21lc3NhZ2VfYnVmZmVyOworc3RhdGljIGNoYXIgKmVkaXRfbWVzc2FnZSwgKnVzZV9tZXNzYWdlOworc3RhdGljIGNoYXIgKmZpeHVwX21lc3NhZ2UsICpzcXVhc2hfbWVzc2FnZTsKK3N0YXRpYyBpbnQgYWxsLCBhbHNvLCBpbnRlcmFjdGl2ZSwgcGF0Y2hfaW50ZXJhY3RpdmUsIG9ubHksIGFtZW5kLCBzaWdub2ZmOworc3RhdGljIGludCBlZGl0X2ZsYWcgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KK3N0YXRpYyBpbnQgcXVpZXQsIHZlcmJvc2UsIG5vX3ZlcmlmeSwgYWxsb3dfZW1wdHksIGRyeV9ydW4sIHJlbmV3X2F1dGhvcnNoaXA7CitzdGF0aWMgaW50IGNvbmZpZ19jb21taXRfdmVyYm9zZSA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLworc3RhdGljIGludCBub19wb3N0X3Jld3JpdGUsIGFsbG93X2VtcHR5X21lc3NhZ2UsIHBhdGhzcGVjX2ZpbGVfbnVsOworc3RhdGljIGNoYXIgKnVudHJhY2tlZF9maWxlc19hcmcsICpmb3JjZV9kYXRlLCAqaWdub3JlX3N1Ym1vZHVsZV9hcmcsICppZ25vcmVkX2FyZzsKK3N0YXRpYyBjaGFyICpzaWduX2NvbW1pdCwgKnBhdGhzcGVjX2Zyb21fZmlsZTsKKworLyoKKyAqIFRoZSBkZWZhdWx0IGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSB3aWxsIHJlbW92ZSB0aGUgbGluZXMKKyAqIGJlZ2lubmluZyB3aXRoICMgKHNoZWxsIGNvbW1lbnRzKSBhbmQgbGVhZGluZyBhbmQgdHJhaWxpbmcKKyAqIHdoaXRlc3BhY2VzIChlbXB0eSBsaW5lcyBvciBjb250YWluaW5nIG9ubHkgd2hpdGVzcGFjZXMpCisgKiBpZiBlZGl0b3IgaXMgdXNlZCwgYW5kIG9ubHkgdGhlIHdoaXRlc3BhY2VzIGlmIHRoZSBtZXNzYWdlCisgKiBpcyBzcGVjaWZpZWQgZXhwbGljaXRseS4KKyAqLworc3RhdGljIGVudW0gY29tbWl0X21zZ19jbGVhbnVwX21vZGUgY2xlYW51cF9tb2RlOworc3RhdGljIGNvbnN0IGNoYXIgKmNsZWFudXBfYXJnOworCitzdGF0aWMgZW51bSBjb21taXRfd2hlbmNlIHdoZW5jZTsKK3N0YXRpYyBpbnQgdXNlX2VkaXRvciA9IDEsIGluY2x1ZGVfc3RhdHVzID0gMTsKK3N0YXRpYyBpbnQgaGF2ZV9vcHRpb25fbTsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG1lc3NhZ2UgPSBTVFJCVUZfSU5JVDsKKworc3RhdGljIGVudW0gd3Rfc3RhdHVzX2Zvcm1hdCBzdGF0dXNfZm9ybWF0ID0gU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRDsKKworc3RhdGljIGludCBvcHRfcGFyc2VfcG9yY2VsYWluKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJZW51bSB3dF9zdGF0dXNfZm9ybWF0ICp2YWx1ZSA9IChlbnVtIHd0X3N0YXR1c19mb3JtYXQgKilvcHQtPnZhbHVlOworCWlmICh1bnNldCkKKwkJKnZhbHVlID0gU1RBVFVTX0ZPUk1BVF9OT05FOworCWVsc2UgaWYgKCFhcmcpCisJCSp2YWx1ZSA9IFNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAidjEiKSB8fCAhc3RyY21wKGFyZywgIjEiKSkKKwkJKnZhbHVlID0gU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU47CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJ2MiIpIHx8ICFzdHJjbXAoYXJnLCAiMiIpKQorCQkqdmFsdWUgPSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTl9WMjsKKwllbHNlCisJCWRpZSgidW5zdXBwb3J0ZWQgcG9yY2VsYWluIHZlcnNpb24gJyVzJyIsIGFyZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRfcGFyc2VfbShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBzdHJidWYgKmJ1ZiA9IG9wdC0+dmFsdWU7CisJaWYgKHVuc2V0KSB7CisJCWhhdmVfb3B0aW9uX20gPSAwOworCQlzdHJidWZfc2V0bGVuKGJ1ZiwgMCk7CisJfSBlbHNlIHsKKwkJaGF2ZV9vcHRpb25fbSA9IDE7CisJCWlmIChidWYtPmxlbikKKwkJCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOworCQlzdHJidWZfYWRkc3RyKGJ1ZiwgYXJnKTsKKwkJc3RyYnVmX2NvbXBsZXRlX2xpbmUoYnVmKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0X3BhcnNlX3JlbmFtZV9zY29yZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWNvbnN0IGNoYXIgKip2YWx1ZSA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlpZiAoYXJnICE9IE5VTEwgJiYgKmFyZyA9PSAnPScpCisJCWFyZyA9IGFyZyArIDE7CisKKwkqdmFsdWUgPSBhcmc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRldGVybWluZV93aGVuY2Uoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpZiAoZmlsZV9leGlzdHMoZ2l0X3BhdGhfbWVyZ2VfaGVhZCh0aGVfcmVwb3NpdG9yeSkpKQorCQl3aGVuY2UgPSBGUk9NX01FUkdFOworCWVsc2UgaWYgKCFzZXF1ZW5jZXJfZGV0ZXJtaW5lX3doZW5jZSh0aGVfcmVwb3NpdG9yeSwgJndoZW5jZSkpCisJCXdoZW5jZSA9IEZST01fQ09NTUlUOworCWlmIChzKQorCQlzLT53aGVuY2UgPSB3aGVuY2U7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXR1c19pbml0X2NvbmZpZyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBjb25maWdfZm5fdCBmbikKK3sKKwl3dF9zdGF0dXNfcHJlcGFyZSh0aGVfcmVwb3NpdG9yeSwgcyk7CisJaW5pdF9kaWZmX3VpX2RlZmF1bHRzKCk7CisJZ2l0X2NvbmZpZyhmbiwgcyk7CisJZGV0ZXJtaW5lX3doZW5jZShzKTsKKwlzLT5oaW50cyA9IGFkdmljZV9zdGF0dXNfaGludHM7IC8qIG11c3QgY29tZSBhZnRlciBnaXRfY29uZmlnKCkgKi8KK30KKworc3RhdGljIHZvaWQgcm9sbGJhY2tfaW5kZXhfZmlsZXModm9pZCkKK3sKKwlzd2l0Y2ggKGNvbW1pdF9zdHlsZSkgeworCWNhc2UgQ09NTUlUX0FTX0lTOgorCQlicmVhazsgLyogbm90aGluZyB0byBkbyAqLworCWNhc2UgQ09NTUlUX05PUk1BTDoKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZpbmRleF9sb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBDT01NSVRfUEFSVElBTDoKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZpbmRleF9sb2NrKTsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZmYWxzZV9sb2NrKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGNvbW1pdF9pbmRleF9maWxlcyh2b2lkKQoreworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChjb21taXRfc3R5bGUpIHsKKwljYXNlIENPTU1JVF9BU19JUzoKKwkJYnJlYWs7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKwljYXNlIENPTU1JVF9OT1JNQUw6CisJCWVyciA9IGNvbW1pdF9sb2NrX2ZpbGUoJmluZGV4X2xvY2spOworCQlicmVhazsKKwljYXNlIENPTU1JVF9QQVJUSUFMOgorCQllcnIgPSBjb21taXRfbG9ja19maWxlKCZpbmRleF9sb2NrKTsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZmYWxzZV9sb2NrKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRha2UgYSB1bmlvbiBvZiBwYXRocyBpbiB0aGUgaW5kZXggYW5kIHRoZSBuYW1lZCB0cmVlICh0eXBpY2FsbHksICJIRUFEIiksCisgKiBhbmQgcmV0dXJuIHRoZSBwYXRocyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBwYXR0ZXJuIGluIGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgbGlzdF9wYXRocyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKndpdGhfdHJlZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXR0ZXJuKQoreworCWludCBpLCByZXQ7CisJY2hhciAqbTsKKworCWlmICghcGF0dGVybi0+bnIpCisJCXJldHVybiAwOworCisJbSA9IHhjYWxsb2MoMSwgcGF0dGVybi0+bnIpOworCisJaWYgKHdpdGhfdHJlZSkgeworCQljaGFyICptYXhfcHJlZml4ID0gY29tbW9uX3ByZWZpeChwYXR0ZXJuKTsKKwkJb3ZlcmxheV90cmVlX29uX2luZGV4KCZ0aGVfaW5kZXgsIHdpdGhfdHJlZSwgbWF4X3ByZWZpeCk7CisJCWZyZWUobWF4X3ByZWZpeCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEUpCisJCQljb250aW51ZTsKKwkJaWYgKCFjZV9wYXRoX21hdGNoKCZ0aGVfaW5kZXgsIGNlLCBwYXR0ZXJuLCBtKSkKKwkJCWNvbnRpbnVlOworCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KGxpc3QsIGNlLT5uYW1lKTsKKwkJaWYgKGNlX3NraXBfd29ya3RyZWUoY2UpKQorCQkJaXRlbS0+dXRpbCA9IGl0ZW07IC8qIGJldHRlciBhIHZhbGlkIHBvaW50ZXIgdGhhbiBhIGZha2Ugb25lICovCisJfQorCisJcmV0ID0gcmVwb3J0X3BhdGhfZXJyb3IobSwgcGF0dGVybik7CisJZnJlZShtKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhZGRfcmVtb3ZlX2ZpbGVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnAgPSAmKGxpc3QtPml0ZW1zW2ldKTsKKworCQkvKiBwLT51dGlsIGlzIHNraXAtd29ya3RyZWUgKi8KKwkJaWYgKHAtPnV0aWwpCisJCQljb250aW51ZTsKKworCQlpZiAoIWxzdGF0KHAtPnN0cmluZywgJnN0KSkgeworCQkJaWYgKGFkZF90b19jYWNoZShwLT5zdHJpbmcsICZzdCwgMCkpCisJCQkJZGllKF8oInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIpKTsKKwkJfSBlbHNlCisJCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHAtPnN0cmluZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcmVhdGVfYmFzZV9pbmRleChjb25zdCBzdHJ1Y3QgY29tbWl0ICpjdXJyZW50X2hlYWQpCit7CisJc3RydWN0IHRyZWUgKnRyZWU7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJc3RydWN0IHRyZWVfZGVzYyB0OworCisJaWYgKCFjdXJyZW50X2hlYWQpIHsKKwkJZGlzY2FyZF9jYWNoZSgpOworCQlyZXR1cm47CisJfQorCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuaGVhZF9pZHggPSAxOworCW9wdHMuaW5kZXhfb25seSA9IDE7CisJb3B0cy5tZXJnZSA9IDE7CisJb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKKworCW9wdHMuZm4gPSBvbmV3YXlfbWVyZ2U7CisJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoJmN1cnJlbnRfaGVhZC0+b2JqZWN0Lm9pZCk7CisJaWYgKCF0cmVlKQorCQlkaWUoXygiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IikpOworCXBhcnNlX3RyZWUodHJlZSk7CisJaW5pdF90cmVlX2Rlc2MoJnQsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisJaWYgKHVucGFja190cmVlcygxLCAmdCwgJm9wdHMpKQorCQlleGl0KDEyOCk7IC8qIFdlJ3ZlIGFscmVhZHkgcmVwb3J0ZWQgdGhlIGVycm9yLCBmaW5pc2ggZHlpbmcgKi8KK30KKworc3RhdGljIHZvaWQgcmVmcmVzaF9jYWNoZV9vcl9kaWUoaW50IHJlZnJlc2hfZmxhZ3MpCit7CisJLyoKKwkgKiByZWZyZXNoX2ZsYWdzIGNvbnRhaW5zIFJFRlJFU0hfUVVJRVQsIHNvIHRoZSBvbmx5IGVycm9ycworCSAqIGFyZSBmb3IgdW5tZXJnZWQgZW50cmllcy4KKwkgKi8KKwlpZiAocmVmcmVzaF9jYWNoZShyZWZyZXNoX2ZsYWdzIHwgUkVGUkVTSF9JTl9QT1JDRUxBSU4pKQorCQlkaWVfcmVzb2x2ZV9jb25mbGljdCgiY29tbWl0Iik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwcmVwYXJlX2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjdXJyZW50X2hlYWQsIGludCBpc19zdGF0dXMpCit7CisJc3RydWN0IHN0cmluZ19saXN0IHBhcnRpYWwgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJaW50IHJlZnJlc2hfZmxhZ3MgPSBSRUZSRVNIX1FVSUVUOworCWNvbnN0IGNoYXIgKnJldDsKKworCWlmIChpc19zdGF0dXMpCisJCXJlZnJlc2hfZmxhZ3MgfD0gUkVGUkVTSF9VTk1FUkdFRDsKKwlwYXJzZV9wYXRoc3BlYygmcGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCwKKwkJICAgICAgIHByZWZpeCwgYXJndik7CisKKwlpZiAocGF0aHNwZWNfZnJvbV9maWxlKSB7CisJCWlmIChpbnRlcmFjdGl2ZSkKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giKSk7CisKKwkJaWYgKGFsbCkKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiKSk7CisKKwkJaWYgKHBhdGhzcGVjLm5yKQorCQkJZGllKF8oIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIpKTsKKworCQlwYXJzZV9wYXRoc3BlY19maWxlKCZwYXRoc3BlYywgMCwKKwkJCQkgICAgUEFUSFNQRUNfUFJFRkVSX0ZVTEwsCisJCQkJICAgIHByZWZpeCwgcGF0aHNwZWNfZnJvbV9maWxlLCBwYXRoc3BlY19maWxlX251bCk7CisJfSBlbHNlIGlmIChwYXRoc3BlY19maWxlX251bCkgeworCQlkaWUoXygiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIpKTsKKwl9CisKKwlpZiAoIXBhdGhzcGVjLm5yICYmIChhbHNvIHx8IChvbmx5ICYmICFhbWVuZCAmJiAhYWxsb3dfZW1wdHkpKSkKKwkJZGllKF8oIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIpKTsKKworCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQoJnBhdGhzcGVjKSA8IDApCisJCWRpZShfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CisKKwlpZiAoaW50ZXJhY3RpdmUpIHsKKwkJY2hhciAqb2xkX2luZGV4X2VudiA9IE5VTEwsICpvbGRfcmVwb19pbmRleF9maWxlOworCQlob2xkX2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaywgTE9DS19ESUVfT05fRVJST1IpOworCisJCXJlZnJlc2hfY2FjaGVfb3JfZGllKHJlZnJlc2hfZmxhZ3MpOworCisJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmluZGV4X2xvY2ssIDApKQorCQkJZGllKF8oInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IikpOworCisJCW9sZF9yZXBvX2luZGV4X2ZpbGUgPSB0aGVfcmVwb3NpdG9yeS0+aW5kZXhfZmlsZTsKKwkJdGhlX3JlcG9zaXRvcnktPmluZGV4X2ZpbGUgPQorCQkJKGNoYXIgKilnZXRfbG9ja19maWxlX3BhdGgoJmluZGV4X2xvY2spOworCQlvbGRfaW5kZXhfZW52ID0geHN0cmR1cF9vcl9udWxsKGdldGVudihJTkRFWF9FTlZJUk9OTUVOVCkpOworCQlzZXRlbnYoSU5ERVhfRU5WSVJPTk1FTlQsIHRoZV9yZXBvc2l0b3J5LT5pbmRleF9maWxlLCAxKTsKKworCQlpZiAoaW50ZXJhY3RpdmVfYWRkKGFyZ2MsIGFyZ3YsIHByZWZpeCwgcGF0Y2hfaW50ZXJhY3RpdmUpICE9IDApCisJCQlkaWUoXygiaW50ZXJhY3RpdmUgYWRkIGZhaWxlZCIpKTsKKworCQl0aGVfcmVwb3NpdG9yeS0+aW5kZXhfZmlsZSA9IG9sZF9yZXBvX2luZGV4X2ZpbGU7CisJCWlmIChvbGRfaW5kZXhfZW52ICYmICpvbGRfaW5kZXhfZW52KQorCQkJc2V0ZW52KElOREVYX0VOVklST05NRU5ULCBvbGRfaW5kZXhfZW52LCAxKTsKKwkJZWxzZQorCQkJdW5zZXRlbnYoSU5ERVhfRU5WSVJPTk1FTlQpOworCQlGUkVFX0FORF9OVUxMKG9sZF9pbmRleF9lbnYpOworCisJCWRpc2NhcmRfY2FjaGUoKTsKKwkJcmVhZF9jYWNoZV9mcm9tKGdldF9sb2NrX2ZpbGVfcGF0aCgmaW5kZXhfbG9jaykpOworCQlpZiAodXBkYXRlX21haW5fY2FjaGVfdHJlZShXUklURV9UUkVFX1NJTEVOVCkgPT0gMCkgeworCQkJaWYgKHJlb3Blbl9sb2NrX2ZpbGUoJmluZGV4X2xvY2spIDwgMCkKKwkJCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlIGluZGV4IGZpbGUiKSk7CisJCQlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZpbmRleF9sb2NrLCAwKSkKKwkJCQlkaWUoXygidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiKSk7CisJCX0gZWxzZQorCQkJd2FybmluZyhfKCJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIpKTsKKworCQljb21taXRfc3R5bGUgPSBDT01NSVRfTk9STUFMOworCQlyZXQgPSBnZXRfbG9ja19maWxlX3BhdGgoJmluZGV4X2xvY2spOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIE5vbiBwYXJ0aWFsLCBub24gYXMtaXMgY29tbWl0LgorCSAqCisJICogKDEpIGdldCB0aGUgcmVhbCBpbmRleDsKKwkgKiAoMikgdXBkYXRlIHRoZV9pbmRleCBhcyBuZWNlc3Nhcnk7CisJICogKDMpIHdyaXRlIHRoZV9pbmRleCBvdXQgdG8gdGhlIHJlYWwgaW5kZXggKHN0aWxsIGxvY2tlZCk7CisJICogKDQpIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgbG9ja2VkIGluZGV4IGZpbGUuCisJICoKKwkgKiBUaGUgY2FsbGVyIHNob3VsZCBydW4gaG9va3Mgb24gdGhlIGxvY2tlZCByZWFsIGluZGV4LCBhbmQKKwkgKiAoQSkgaWYgYWxsIGdvZXMgd2VsbCwgY29tbWl0IHRoZSByZWFsIGluZGV4OworCSAqIChCKSBvbiBmYWlsdXJlLCByb2xsYmFjayB0aGUgcmVhbCBpbmRleC4KKwkgKi8KKwlpZiAoYWxsIHx8IChhbHNvICYmIHBhdGhzcGVjLm5yKSkgeworCQlob2xkX2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaywgTE9DS19ESUVfT05fRVJST1IpOworCQlhZGRfZmlsZXNfdG9fY2FjaGUoYWxzbyA/IHByZWZpeCA6IE5VTEwsICZwYXRoc3BlYywgMCk7CisJCXJlZnJlc2hfY2FjaGVfb3JfZGllKHJlZnJlc2hfZmxhZ3MpOworCQl1cGRhdGVfbWFpbl9jYWNoZV90cmVlKFdSSVRFX1RSRUVfU0lMRU5UKTsKKwkJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmaW5kZXhfbG9jaywgMCkpCisJCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIikpOworCQljb21taXRfc3R5bGUgPSBDT01NSVRfTk9STUFMOworCQlyZXQgPSBnZXRfbG9ja19maWxlX3BhdGgoJmluZGV4X2xvY2spOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIEFzLWlzIGNvbW1pdC4KKwkgKgorCSAqICgxKSByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHJlYWwgaW5kZXggZmlsZS4KKwkgKgorCSAqIFRoZSBjYWxsZXIgc2hvdWxkIHJ1biBob29rcyBvbiB0aGUgcmVhbCBpbmRleCwKKwkgKiBhbmQgY3JlYXRlIGNvbW1pdCBmcm9tIHRoZV9pbmRleC4KKwkgKiBXZSBzdGlsbCBuZWVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IGhlcmUuCisJICovCisJaWYgKCFvbmx5ICYmICFwYXRoc3BlYy5ucikgeworCQlob2xkX2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaywgTE9DS19ESUVfT05fRVJST1IpOworCQlyZWZyZXNoX2NhY2hlX29yX2RpZShyZWZyZXNoX2ZsYWdzKTsKKwkJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkCisJCSAgICB8fCAhY2FjaGVfdHJlZV9mdWxseV92YWxpZChhY3RpdmVfY2FjaGVfdHJlZSkpCisJCQl1cGRhdGVfbWFpbl9jYWNoZV90cmVlKFdSSVRFX1RSRUVfU0lMRU5UKTsKKwkJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmaW5kZXhfbG9jaywKKwkJCQkgICAgICAgQ09NTUlUX0xPQ0sgfCBTS0lQX0lGX1VOQ0hBTkdFRCkpCisJCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIikpOworCQljb21taXRfc3R5bGUgPSBDT01NSVRfQVNfSVM7CisJCXJldCA9IGdldF9pbmRleF9maWxlKCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogQSBwYXJ0aWFsIGNvbW1pdC4KKwkgKgorCSAqICgwKSBmaW5kIHRoZSBzZXQgb2YgYWZmZWN0ZWQgcGF0aHM7CisJICogKDEpIGdldCBsb2NrIG9uIHRoZSByZWFsIGluZGV4IGZpbGU7CisJICogKDIpIHVwZGF0ZSB0aGVfaW5kZXggd2l0aCB0aGUgZ2l2ZW4gcGF0aHM7CisJICogKDMpIHdyaXRlIHRoZV9pbmRleCBvdXQgdG8gdGhlIHJlYWwgaW5kZXggKHN0aWxsIGxvY2tlZCk7CisJICogKDQpIGdldCBsb2NrIG9uIHRoZSBmYWxzZSBpbmRleCBmaWxlOworCSAqICg1KSByZXNldCB0aGVfaW5kZXggZnJvbSBIRUFEOworCSAqICg2KSB1cGRhdGUgdGhlX2luZGV4IHRoZSBzYW1lIHdheSBhcyAoMik7CisJICogKDcpIHdyaXRlIHRoZV9pbmRleCBvdXQgdG8gdGhlIGZhbHNlIGluZGV4IGZpbGU7CisJICogKDgpIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgZmFsc2UgaW5kZXggZmlsZSAoc3RpbGwgbG9ja2VkKTsKKwkgKgorCSAqIFRoZSBjYWxsZXIgc2hvdWxkIHJ1biBob29rcyBvbiB0aGUgbG9ja2VkIGZhbHNlIGluZGV4LCBhbmQKKwkgKiBjcmVhdGUgY29tbWl0IGZyb20gaXQuICBUaGVuCisJICogKEEpIGlmIGFsbCBnb2VzIHdlbGwsIGNvbW1pdCB0aGUgcmVhbCBpbmRleDsKKwkgKiAoQikgb24gZmFpbHVyZSwgcm9sbGJhY2sgdGhlIHJlYWwgaW5kZXg7CisJICogSW4gZWl0aGVyIGNhc2UsIHJvbGxiYWNrIHRoZSBmYWxzZSBpbmRleC4KKwkgKi8KKwljb21taXRfc3R5bGUgPSBDT01NSVRfUEFSVElBTDsKKworCWlmICh3aGVuY2UgIT0gRlJPTV9DT01NSVQpIHsKKwkJaWYgKHdoZW5jZSA9PSBGUk9NX01FUkdFKQorCQkJZGllKF8oImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIpKTsKKwkJZWxzZSBpZiAoaXNfZnJvbV9jaGVycnlfcGljayh3aGVuY2UpKQorCQkJZGllKF8oImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIpKTsKKwkJZWxzZSBpZiAoaXNfZnJvbV9yZWJhc2Uod2hlbmNlKSkKKwkJCWRpZShfKCJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIikpOworCX0KKworCWlmIChsaXN0X3BhdGhzKCZwYXJ0aWFsLCAhY3VycmVudF9oZWFkID8gTlVMTCA6ICJIRUFEIiwgJnBhdGhzcGVjKSkKKwkJZXhpdCgxKTsKKworCWRpc2NhcmRfY2FjaGUoKTsKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKF8oImNhbm5vdCByZWFkIHRoZSBpbmRleCIpKTsKKworCWhvbGRfbG9ja2VkX2luZGV4KCZpbmRleF9sb2NrLCBMT0NLX0RJRV9PTl9FUlJPUik7CisJYWRkX3JlbW92ZV9maWxlcygmcGFydGlhbCk7CisJcmVmcmVzaF9jYWNoZShSRUZSRVNIX1FVSUVUKTsKKwl1cGRhdGVfbWFpbl9jYWNoZV90cmVlKFdSSVRFX1RSRUVfU0lMRU5UKTsKKwlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZpbmRleF9sb2NrLCAwKSkKKwkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIpKTsKKworCWhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmZhbHNlX2xvY2ssCisJCQkJICBnaXRfcGF0aCgibmV4dC1pbmRleC0lIlBSSXVNQVgsCisJCQkJCSAgICh1aW50bWF4X3QpIGdldHBpZCgpKSwKKwkJCQkgIExPQ0tfRElFX09OX0VSUk9SKTsKKworCWNyZWF0ZV9iYXNlX2luZGV4KGN1cnJlbnRfaGVhZCk7CisJYWRkX3JlbW92ZV9maWxlcygmcGFydGlhbCk7CisJcmVmcmVzaF9jYWNoZShSRUZSRVNIX1FVSUVUKTsKKworCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmZhbHNlX2xvY2ssIDApKQorCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIikpOworCisJZGlzY2FyZF9jYWNoZSgpOworCXJldCA9IGdldF9sb2NrX2ZpbGVfcGF0aCgmZmFsc2VfbG9jayk7CisJcmVhZF9jYWNoZV9mcm9tKHJldCk7CitvdXQ6CisJc3RyaW5nX2xpc3RfY2xlYXIoJnBhcnRpYWwsIDApOworCWNsZWFyX3BhdGhzcGVjKCZwYXRoc3BlYyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBydW5fc3RhdHVzKEZJTEUgKmZwLCBjb25zdCBjaGFyICppbmRleF9maWxlLCBjb25zdCBjaGFyICpwcmVmaXgsIGludCBub3dhcm4sCisJCSAgICAgIHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlpZiAocy0+cmVsYXRpdmVfcGF0aHMpCisJCXMtPnByZWZpeCA9IHByZWZpeDsKKworCWlmIChhbWVuZCkgeworCQlzLT5hbWVuZCA9IDE7CisJCXMtPnJlZmVyZW5jZSA9ICJIRUFEXjEiOworCX0KKwlzLT52ZXJib3NlID0gdmVyYm9zZTsKKwlzLT5pbmRleF9maWxlID0gaW5kZXhfZmlsZTsKKwlzLT5mcCA9IGZwOworCXMtPm5vd2FybiA9IG5vd2FybjsKKwlzLT5pc19pbml0aWFsID0gZ2V0X29pZChzLT5yZWZlcmVuY2UsICZvaWQpID8gMSA6IDA7CisJaWYgKCFzLT5pc19pbml0aWFsKQorCQlvaWRjcHkoJnMtPm9pZF9jb21taXQsICZvaWQpOworCXMtPnN0YXR1c19mb3JtYXQgPSBzdGF0dXNfZm9ybWF0OworCXMtPmlnbm9yZV9zdWJtb2R1bGVfYXJnID0gaWdub3JlX3N1Ym1vZHVsZV9hcmc7CisKKwl3dF9zdGF0dXNfY29sbGVjdChzKTsKKwl3dF9zdGF0dXNfcHJpbnQocyk7CisJd3Rfc3RhdHVzX2NvbGxlY3RfZnJlZV9idWZmZXJzKHMpOworCisJcmV0dXJuIHMtPmNvbW1pdHRhYmxlOworfQorCitzdGF0aWMgaW50IGlzX2FfbWVyZ2UoY29uc3Qgc3RydWN0IGNvbW1pdCAqY3VycmVudF9oZWFkKQoreworCXJldHVybiAhIShjdXJyZW50X2hlYWQtPnBhcmVudHMgJiYgY3VycmVudF9oZWFkLT5wYXJlbnRzLT5uZXh0KTsKK30KKworc3RhdGljIHZvaWQgYXNzZXJ0X3NwbGl0X2lkZW50KHN0cnVjdCBpZGVudF9zcGxpdCAqaWQsIGNvbnN0IHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlpZiAoc3BsaXRfaWRlbnRfbGluZShpZCwgYnVmLT5idWYsIGJ1Zi0+bGVuKSB8fCAhaWQtPmRhdGVfYmVnaW4pCisJCUJVRygidW5hYmxlIHRvIHBhcnNlIG91ciBvd24gaWRlbnQ6ICVzIiwgYnVmLT5idWYpOworfQorCitzdGF0aWMgdm9pZCBleHBvcnRfb25lKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZSwgaW50IGhhY2spCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpZiAoaGFjaykKKwkJc3RyYnVmX2FkZGNoKCZidWYsIGhhY2spOworCXN0cmJ1Zl9hZGQoJmJ1ZiwgcywgZSAtIHMpOworCXNldGVudih2YXIsIGJ1Zi5idWYsIDEpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2ZvcmNlX2RhdGUoY29uc3QgY2hhciAqaW4sIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlzdHJidWZfYWRkY2gob3V0LCAnQCcpOworCisJaWYgKHBhcnNlX2RhdGUoaW4sIG91dCkgPCAwKSB7CisJCWludCBlcnJvcnMgPSAwOworCQl1bnNpZ25lZCBsb25nIHQgPSBhcHByb3hpZGF0ZV9jYXJlZnVsKGluLCAmZXJyb3JzKTsKKwkJaWYgKGVycm9ycykKKwkJCXJldHVybiAtMTsKKwkJc3RyYnVmX2FkZGYob3V0LCAiJWx1IiwgdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9pZGVudF92YXIoY2hhciAqKmJ1ZiwgY2hhciAqdmFsKQoreworCWZyZWUoKmJ1Zik7CisJKmJ1ZiA9IHZhbDsKK30KKworc3RhdGljIHZvaWQgZGV0ZXJtaW5lX2F1dGhvcl9pbmZvKHN0cnVjdCBzdHJidWYgKmF1dGhvcl9pZGVudCkKK3sKKwljaGFyICpuYW1lLCAqZW1haWwsICpkYXRlOworCXN0cnVjdCBpZGVudF9zcGxpdCBhdXRob3I7CisKKwluYW1lID0geHN0cmR1cF9vcl9udWxsKGdldGVudigiR0lUX0FVVEhPUl9OQU1FIikpOworCWVtYWlsID0geHN0cmR1cF9vcl9udWxsKGdldGVudigiR0lUX0FVVEhPUl9FTUFJTCIpKTsKKwlkYXRlID0geHN0cmR1cF9vcl9udWxsKGdldGVudigiR0lUX0FVVEhPUl9EQVRFIikpOworCisJaWYgKGF1dGhvcl9tZXNzYWdlKSB7CisJCXN0cnVjdCBpZGVudF9zcGxpdCBpZGVudDsKKwkJc2l6ZV90IGxlbjsKKwkJY29uc3QgY2hhciAqYTsKKworCQlhID0gZmluZF9jb21taXRfaGVhZGVyKGF1dGhvcl9tZXNzYWdlX2J1ZmZlciwgImF1dGhvciIsICZsZW4pOworCQlpZiAoIWEpCisJCQlkaWUoXygiY29tbWl0ICclcycgbGFja3MgYXV0aG9yIGhlYWRlciIpLCBhdXRob3JfbWVzc2FnZSk7CisJCWlmIChzcGxpdF9pZGVudF9saW5lKCZpZGVudCwgYSwgbGVuKSA8IDApCisJCQlkaWUoXygiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIpLCBhdXRob3JfbWVzc2FnZSk7CisKKwkJc2V0X2lkZW50X3ZhcigmbmFtZSwgeG1lbWR1cHooaWRlbnQubmFtZV9iZWdpbiwgaWRlbnQubmFtZV9lbmQgLSBpZGVudC5uYW1lX2JlZ2luKSk7CisJCXNldF9pZGVudF92YXIoJmVtYWlsLCB4bWVtZHVweihpZGVudC5tYWlsX2JlZ2luLCBpZGVudC5tYWlsX2VuZCAtIGlkZW50Lm1haWxfYmVnaW4pKTsKKworCQlpZiAoaWRlbnQuZGF0ZV9iZWdpbikgeworCQkJc3RydWN0IHN0cmJ1ZiBkYXRlX2J1ZiA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZGNoKCZkYXRlX2J1ZiwgJ0AnKTsKKwkJCXN0cmJ1Zl9hZGQoJmRhdGVfYnVmLCBpZGVudC5kYXRlX2JlZ2luLCBpZGVudC5kYXRlX2VuZCAtIGlkZW50LmRhdGVfYmVnaW4pOworCQkJc3RyYnVmX2FkZGNoKCZkYXRlX2J1ZiwgJyAnKTsKKwkJCXN0cmJ1Zl9hZGQoJmRhdGVfYnVmLCBpZGVudC50el9iZWdpbiwgaWRlbnQudHpfZW5kIC0gaWRlbnQudHpfYmVnaW4pOworCQkJc2V0X2lkZW50X3ZhcigmZGF0ZSwgc3RyYnVmX2RldGFjaCgmZGF0ZV9idWYsIE5VTEwpKTsKKwkJfQorCX0KKworCWlmIChmb3JjZV9hdXRob3IpIHsKKwkJc3RydWN0IGlkZW50X3NwbGl0IGlkZW50OworCisJCWlmIChzcGxpdF9pZGVudF9saW5lKCZpZGVudCwgZm9yY2VfYXV0aG9yLCBzdHJsZW4oZm9yY2VfYXV0aG9yKSkgPCAwKQorCQkJZGllKF8oIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiKSk7CisJCXNldF9pZGVudF92YXIoJm5hbWUsIHhtZW1kdXB6KGlkZW50Lm5hbWVfYmVnaW4sIGlkZW50Lm5hbWVfZW5kIC0gaWRlbnQubmFtZV9iZWdpbikpOworCQlzZXRfaWRlbnRfdmFyKCZlbWFpbCwgeG1lbWR1cHooaWRlbnQubWFpbF9iZWdpbiwgaWRlbnQubWFpbF9lbmQgLSBpZGVudC5tYWlsX2JlZ2luKSk7CisJfQorCisJaWYgKGZvcmNlX2RhdGUpIHsKKwkJc3RydWN0IHN0cmJ1ZiBkYXRlX2J1ZiA9IFNUUkJVRl9JTklUOworCQlpZiAocGFyc2VfZm9yY2VfZGF0ZShmb3JjZV9kYXRlLCAmZGF0ZV9idWYpKQorCQkJZGllKF8oImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIiksIGZvcmNlX2RhdGUpOworCQlzZXRfaWRlbnRfdmFyKCZkYXRlLCBzdHJidWZfZGV0YWNoKCZkYXRlX2J1ZiwgTlVMTCkpOworCX0KKworCXN0cmJ1Zl9hZGRzdHIoYXV0aG9yX2lkZW50LCBmbXRfaWRlbnQobmFtZSwgZW1haWwsIFdBTlRfQVVUSE9SX0lERU5ULCBkYXRlLAorCQkJCUlERU5UX1NUUklDVCkpOworCWFzc2VydF9zcGxpdF9pZGVudCgmYXV0aG9yLCBhdXRob3JfaWRlbnQpOworCWV4cG9ydF9vbmUoIkdJVF9BVVRIT1JfTkFNRSIsIGF1dGhvci5uYW1lX2JlZ2luLCBhdXRob3IubmFtZV9lbmQsIDApOworCWV4cG9ydF9vbmUoIkdJVF9BVVRIT1JfRU1BSUwiLCBhdXRob3IubWFpbF9iZWdpbiwgYXV0aG9yLm1haWxfZW5kLCAwKTsKKwlleHBvcnRfb25lKCJHSVRfQVVUSE9SX0RBVEUiLCBhdXRob3IuZGF0ZV9iZWdpbiwgYXV0aG9yLnR6X2VuZCwgJ0AnKTsKKwlmcmVlKG5hbWUpOworCWZyZWUoZW1haWwpOworCWZyZWUoZGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgYXV0aG9yX2RhdGVfaXNfaW50ZXJlc3Rpbmcodm9pZCkKK3sKKwlyZXR1cm4gYXV0aG9yX21lc3NhZ2UgfHwgZm9yY2VfZGF0ZTsKK30KKworc3RhdGljIHZvaWQgYWRqdXN0X2NvbW1lbnRfbGluZV9jaGFyKGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiKQoreworCWNoYXIgY2FuZGlkYXRlc1tdID0gIiM7QCEkJV4mfDoiOworCWNoYXIgKmNhbmRpZGF0ZTsKKwljb25zdCBjaGFyICpwOworCisJY29tbWVudF9saW5lX2NoYXIgPSBjYW5kaWRhdGVzWzBdOworCWlmICghbWVtY2hyKHNiLT5idWYsIGNvbW1lbnRfbGluZV9jaGFyLCBzYi0+bGVuKSkKKwkJcmV0dXJuOworCisJcCA9IHNiLT5idWY7CisJY2FuZGlkYXRlID0gc3RyY2hyKGNhbmRpZGF0ZXMsICpwKTsKKwlpZiAoY2FuZGlkYXRlKQorCQkqY2FuZGlkYXRlID0gJyAnOworCWZvciAocCA9IHNiLT5idWY7ICpwOyBwKyspIHsKKwkJaWYgKChwWzBdID09ICdcbicgfHwgcFswXSA9PSAnXHInKSAmJiBwWzFdKSB7CisJCQljYW5kaWRhdGUgPSBzdHJjaHIoY2FuZGlkYXRlcywgcFsxXSk7CisJCQlpZiAoY2FuZGlkYXRlKQorCQkJCSpjYW5kaWRhdGUgPSAnICc7CisJCX0KKwl9CisKKwlmb3IgKHAgPSBjYW5kaWRhdGVzOyAqcCA9PSAnICc7IHArKykKKwkJOworCWlmICghKnApCisJCWRpZShfKCJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorCQkgICAgICAiaW4gdGhlIGN1cnJlbnQgY29tbWl0IG1lc3NhZ2UiKSk7CisJY29tbWVudF9saW5lX2NoYXIgPSAqcDsKK30KKworc3RhdGljIGludCBwcmVwYXJlX3RvX2NvbW1pdChjb25zdCBjaGFyICppbmRleF9maWxlLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgIHN0cnVjdCBjb21taXQgKmN1cnJlbnRfaGVhZCwKKwkJCSAgICAgc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqYXV0aG9yX2lkZW50KQoreworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisJc3RydWN0IHN0cmJ1ZiBjb21taXR0ZXJfaWRlbnQgPSBTVFJCVUZfSU5JVDsKKwlpbnQgY29tbWl0dGFibGU7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmhvb2tfYXJnMSA9IE5VTEw7CisJY29uc3QgY2hhciAqaG9va19hcmcyID0gTlVMTDsKKwlpbnQgY2xlYW5fbWVzc2FnZV9jb250ZW50cyA9IChjbGVhbnVwX21vZGUgIT0gQ09NTUlUX01TR19DTEVBTlVQX05PTkUpOworCWludCBvbGRfZGlzcGxheV9jb21tZW50X3ByZWZpeDsKKwlpbnQgbWVyZ2VfY29udGFpbnNfc2Npc3NvcnMgPSAwOworCisJLyogVGhpcyBjaGVja3MgYW5kIGJhcmZzIGlmIGF1dGhvciBpcyBiYWRseSBzcGVjaWZpZWQgKi8KKwlkZXRlcm1pbmVfYXV0aG9yX2luZm8oYXV0aG9yX2lkZW50KTsKKworCWlmICghbm9fdmVyaWZ5ICYmIHJ1bl9jb21taXRfaG9vayh1c2VfZWRpdG9yLCBpbmRleF9maWxlLCAicHJlLWNvbW1pdCIsIE5VTEwpKQorCQlyZXR1cm4gMDsKKworCWlmIChzcXVhc2hfbWVzc2FnZSkgeworCQkvKgorCQkgKiBJbnNlcnQgdGhlIHByb3BlciBzdWJqZWN0IGxpbmUgYmVmb3JlIG90aGVyIGNvbW1pdAorCQkgKiBtZXNzYWdlIG9wdGlvbnMgYWRkIHRoZWlyIGNvbnRlbnQuCisJCSAqLworCQlpZiAodXNlX21lc3NhZ2UgJiYgIXN0cmNtcCh1c2VfbWVzc2FnZSwgc3F1YXNoX21lc3NhZ2UpKQorCQkJc3RyYnVmX2FkZHN0cigmc2IsICJzcXVhc2ghICIpOworCQllbHNlIHsKKwkJCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CisJCQlzdHJ1Y3QgY29tbWl0ICpjOworCQkJYyA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUoc3F1YXNoX21lc3NhZ2UpOworCQkJaWYgKCFjKQorCQkJCWRpZShfKCJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIpLCBzcXVhc2hfbWVzc2FnZSk7CisJCQljdHgub3V0cHV0X2VuY29kaW5nID0gZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKKwkJCWZvcm1hdF9jb21taXRfbWVzc2FnZShjLCAic3F1YXNoISAlc1xuXG4iLCAmc2IsCisJCQkJCSAgICAgICZjdHgpOworCQl9CisJfQorCisJaWYgKGhhdmVfb3B0aW9uX20gJiYgIWZpeHVwX21lc3NhZ2UpIHsKKwkJc3RyYnVmX2FkZGJ1Zigmc2IsICZtZXNzYWdlKTsKKwkJaG9va19hcmcxID0gIm1lc3NhZ2UiOworCX0gZWxzZSBpZiAobG9nZmlsZSAmJiAhc3RyY21wKGxvZ2ZpbGUsICItIikpIHsKKwkJaWYgKGlzYXR0eSgwKSkKKwkJCWZwcmludGYoc3RkZXJyLCBfKCIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIikpOworCQlpZiAoc3RyYnVmX3JlYWQoJnNiLCAwLCAwKSA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiKSk7CisJCWhvb2tfYXJnMSA9ICJtZXNzYWdlIjsKKwl9IGVsc2UgaWYgKGxvZ2ZpbGUpIHsKKwkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBsb2dmaWxlLCAwKSA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIpLAorCQkJCSAgbG9nZmlsZSk7CisJCWhvb2tfYXJnMSA9ICJtZXNzYWdlIjsKKwl9IGVsc2UgaWYgKHVzZV9tZXNzYWdlKSB7CisJCWNoYXIgKmJ1ZmZlcjsKKwkJYnVmZmVyID0gc3Ryc3RyKHVzZV9tZXNzYWdlX2J1ZmZlciwgIlxuXG4iKTsKKwkJaWYgKGJ1ZmZlcikKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBza2lwX2JsYW5rX2xpbmVzKGJ1ZmZlciArIDIpKTsKKwkJaG9va19hcmcxID0gImNvbW1pdCI7CisJCWhvb2tfYXJnMiA9IHVzZV9tZXNzYWdlOworCX0gZWxzZSBpZiAoZml4dXBfbWVzc2FnZSkgeworCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUoZml4dXBfbWVzc2FnZSk7CisJCWlmICghY29tbWl0KQorCQkJZGllKF8oImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIiksIGZpeHVwX21lc3NhZ2UpOworCQljdHgub3V0cHV0X2VuY29kaW5nID0gZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKKwkJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgImZpeHVwISAlc1xuXG4iLAorCQkJCSAgICAgICZzYiwgJmN0eCk7CisJCWlmIChoYXZlX29wdGlvbl9tKQorCQkJc3RyYnVmX2FkZGJ1Zigmc2IsICZtZXNzYWdlKTsKKwkJaG9va19hcmcxID0gIm1lc3NhZ2UiOworCX0gZWxzZSBpZiAoIXN0YXQoZ2l0X3BhdGhfbWVyZ2VfbXNnKHRoZV9yZXBvc2l0b3J5KSwgJnN0YXRidWYpKSB7CisJCXNpemVfdCBtZXJnZV9tc2dfc3RhcnQ7CisKKwkJLyoKKwkJICogcHJlcGVuZCBTUVVBU0hfTVNHIGhlcmUgaWYgaXQgZXhpc3RzIGFuZCBhCisJCSAqICJtZXJnZSAtLXNxdWFzaCIgd2FzIG9yaWdpbmFsbHkgcGVyZm9ybWVkCisJCSAqLworCQlpZiAoIXN0YXQoZ2l0X3BhdGhfc3F1YXNoX21zZyh0aGVfcmVwb3NpdG9yeSksICZzdGF0YnVmKSkgeworCQkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBnaXRfcGF0aF9zcXVhc2hfbXNnKHRoZV9yZXBvc2l0b3J5KSwgMCkgPCAwKQorCQkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIikpOworCQkJaG9va19hcmcxID0gInNxdWFzaCI7CisJCX0gZWxzZQorCQkJaG9va19hcmcxID0gIm1lcmdlIjsKKworCQltZXJnZV9tc2dfc3RhcnQgPSBzYi5sZW47CisJCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgZ2l0X3BhdGhfbWVyZ2VfbXNnKHRoZV9yZXBvc2l0b3J5KSwgMCkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIpKTsKKworCQlpZiAoY2xlYW51cF9tb2RlID09IENPTU1JVF9NU0dfQ0xFQU5VUF9TQ0lTU09SUyAmJgorCQkgICAgd3Rfc3RhdHVzX2xvY2F0ZV9lbmQoc2IuYnVmICsgbWVyZ2VfbXNnX3N0YXJ0LAorCQkJCQkgc2IubGVuIC0gbWVyZ2VfbXNnX3N0YXJ0KSA8CisJCQkJc2IubGVuIC0gbWVyZ2VfbXNnX3N0YXJ0KQorCQkJbWVyZ2VfY29udGFpbnNfc2Npc3NvcnMgPSAxOworCX0gZWxzZSBpZiAoIXN0YXQoZ2l0X3BhdGhfc3F1YXNoX21zZyh0aGVfcmVwb3NpdG9yeSksICZzdGF0YnVmKSkgeworCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIGdpdF9wYXRoX3NxdWFzaF9tc2codGhlX3JlcG9zaXRvcnkpLCAwKSA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIpKTsKKwkJaG9va19hcmcxID0gInNxdWFzaCI7CisJfSBlbHNlIGlmICh0ZW1wbGF0ZV9maWxlKSB7CisJCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgdGVtcGxhdGVfZmlsZSwgMCkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkICclcyciKSwgdGVtcGxhdGVfZmlsZSk7CisJCWhvb2tfYXJnMSA9ICJ0ZW1wbGF0ZSI7CisJCWNsZWFuX21lc3NhZ2VfY29udGVudHMgPSAwOworCX0KKworCS8qCisJICogVGhlIHJlbWFpbmluZyBjYXNlcyBkb24ndCBtb2RpZnkgdGhlIHRlbXBsYXRlIG1lc3NhZ2UsIGJ1dAorCSAqIGp1c3Qgc2V0IHRoZSBhcmd1bWVudChzKSB0byB0aGUgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suCisJICovCisJZWxzZSBpZiAod2hlbmNlID09IEZST01fTUVSR0UpCisJCWhvb2tfYXJnMSA9ICJtZXJnZSI7CisJZWxzZSBpZiAoaXNfZnJvbV9jaGVycnlfcGljayh3aGVuY2UpIHx8IHdoZW5jZSA9PSBGUk9NX1JFQkFTRV9QSUNLKSB7CisJCWhvb2tfYXJnMSA9ICJjb21taXQiOworCQlob29rX2FyZzIgPSAiQ0hFUlJZX1BJQ0tfSEVBRCI7CisJfQorCisJaWYgKHNxdWFzaF9tZXNzYWdlKSB7CisJCS8qCisJCSAqIElmIHNxdWFzaF9jb21taXQgd2FzIHVzZWQgZm9yIHRoZSBjb21taXQgc3ViamVjdCwKKwkJICogdGhlbiB3ZSdyZSBwb3NzaWJseSBoaWphY2tpbmcgb3RoZXIgY29tbWl0IGxvZyBvcHRpb25zLgorCQkgKiBSZXNldCB0aGUgaG9vayBhcmdzIHRvIHRlbGwgdGhlIHJlYWwgc3RvcnkuCisJCSAqLworCQlob29rX2FyZzEgPSAibWVzc2FnZSI7CisJCWhvb2tfYXJnMiA9ICIiOworCX0KKworCXMtPmZwID0gZm9wZW5fZm9yX3dyaXRpbmcoZ2l0X3BhdGhfY29tbWl0X2VkaXRtc2coKSk7CisJaWYgKHMtPmZwID09IE5VTEwpCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIiksIGdpdF9wYXRoX2NvbW1pdF9lZGl0bXNnKCkpOworCisJLyogSWdub3JlIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeDogd2UgZG8gbmVlZCBjb21tZW50cyBpbiBDT01NSVRfRURJVE1TRy4gKi8KKwlvbGRfZGlzcGxheV9jb21tZW50X3ByZWZpeCA9IHMtPmRpc3BsYXlfY29tbWVudF9wcmVmaXg7CisJcy0+ZGlzcGxheV9jb21tZW50X3ByZWZpeCA9IDE7CisKKwkvKgorCSAqIE1vc3QgaGludHMgYXJlIGNvdW50ZXItcHJvZHVjdGl2ZSB3aGVuIHRoZSBjb21taXQgaGFzCisJICogYWxyZWFkeSBzdGFydGVkLgorCSAqLworCXMtPmhpbnRzID0gMDsKKworCWlmIChjbGVhbl9tZXNzYWdlX2NvbnRlbnRzKQorCQlzdHJidWZfc3RyaXBzcGFjZSgmc2IsIDApOworCisJaWYgKHNpZ25vZmYpCisJCWFwcGVuZF9zaWdub2ZmKCZzYiwgaWdub3JlX25vbl90cmFpbGVyKHNiLmJ1Ziwgc2IubGVuKSwgMCk7CisKKwlpZiAoZndyaXRlKHNiLmJ1ZiwgMSwgc2IubGVuLCBzLT5mcCkgPCBzYi5sZW4pCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIikpOworCisJaWYgKGF1dG9fY29tbWVudF9saW5lX2NoYXIpCisJCWFkanVzdF9jb21tZW50X2xpbmVfY2hhcigmc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwkvKiBUaGlzIGNoZWNrcyBpZiBjb21taXR0ZXIgaWRlbnQgaXMgZXhwbGljaXRseSBnaXZlbiAqLworCXN0cmJ1Zl9hZGRzdHIoJmNvbW1pdHRlcl9pZGVudCwgZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX1NUUklDVCkpOworCWlmICh1c2VfZWRpdG9yICYmIGluY2x1ZGVfc3RhdHVzKSB7CisJCWludCBpZGVudF9zaG93biA9IDA7CisJCWludCBzYXZlZF9jb2xvcl9zZXR0aW5nOworCQlzdHJ1Y3QgaWRlbnRfc3BsaXQgY2ksIGFpOworCisJCWlmICh3aGVuY2UgIT0gRlJPTV9DT01NSVQpIHsKKwkJCWlmIChjbGVhbnVwX21vZGUgPT0gQ09NTUlUX01TR19DTEVBTlVQX1NDSVNTT1JTICYmCisJCQkJIW1lcmdlX2NvbnRhaW5zX3NjaXNzb3JzKQorCQkJCXd0X3N0YXR1c19hZGRfY3V0X2xpbmUocy0+ZnApOworCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBHSVRfQ09MT1JfTk9STUFMLAorCQkJICAgIHdoZW5jZSA9PSBGUk9NX01FUkdFCisJCQkJPyBfKCJcbiIKKwkJCQkJIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisJCQkJCSJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisJCQkJCSIJJXNcbiIKKwkJCQkJImFuZCB0cnkgYWdhaW4uXG4iKQorCQkJCTogXygiXG4iCisJCQkJCSJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorCQkJCQkiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorCQkJCQkiCSVzXG4iCisJCQkJCSJhbmQgdHJ5IGFnYWluLlxuIiksCisJCQkJd2hlbmNlID09IEZST01fTUVSR0UgPworCQkJCQlnaXRfcGF0aF9tZXJnZV9oZWFkKHRoZV9yZXBvc2l0b3J5KSA6CisJCQkJCWdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQodGhlX3JlcG9zaXRvcnkpKTsKKwkJfQorCisJCWZwcmludGYocy0+ZnAsICJcbiIpOworCQlpZiAoY2xlYW51cF9tb2RlID09IENPTU1JVF9NU0dfQ0xFQU5VUF9BTEwpCisJCQlzdGF0dXNfcHJpbnRmKHMsIEdJVF9DT0xPUl9OT1JNQUwsCisJCQkJXygiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiIKKwkJCQkgICIgTGluZXMgc3RhcnRpbmdcbndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSIKKwkJCQkgICIgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIpLCBjb21tZW50X2xpbmVfY2hhcik7CisJCWVsc2UgaWYgKGNsZWFudXBfbW9kZSA9PSBDT01NSVRfTVNHX0NMRUFOVVBfU0NJU1NPUlMpIHsKKwkJCWlmICh3aGVuY2UgPT0gRlJPTV9DT01NSVQgJiYgIW1lcmdlX2NvbnRhaW5zX3NjaXNzb3JzKQorCQkJCXd0X3N0YXR1c19hZGRfY3V0X2xpbmUocy0+ZnApOworCQl9IGVsc2UgLyogQ09NTUlUX01TR19DTEVBTlVQX1NQQUNFLCB0aGF0IGlzLiAqLworCQkJc3RhdHVzX3ByaW50ZihzLCBHSVRfQ09MT1JfTk9STUFMLAorCQkJCV8oIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4iCisJCQkJICAiIExpbmVzIHN0YXJ0aW5nXG4iCisJCQkJICAid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSIKKwkJCQkgICIgeW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisJCQkJICAiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIpLCBjb21tZW50X2xpbmVfY2hhcik7CisKKwkJLyoKKwkJICogVGhlc2Ugc2hvdWxkIG5ldmVyIGZhaWwgYmVjYXVzZSB0aGV5IGNvbWUgZnJvbSBvdXIgb3duCisJCSAqIGZtdF9pZGVudC4gVGhleSBtYXkgZmFpbCB0aGUgc2FuZV9pZGVudCB0ZXN0LCBidXQgd2Uga25vdworCQkgKiB0aGF0IHRoZSBuYW1lIGFuZCBtYWlsIHBvaW50ZXJzIHdpbGwgYXQgbGVhc3QgYmUgdmFsaWQsCisJCSAqIHdoaWNoIGlzIGVub3VnaCBmb3Igb3VyIHRlc3RzIGFuZCBwcmludGluZyBoZXJlLgorCQkgKi8KKwkJYXNzZXJ0X3NwbGl0X2lkZW50KCZhaSwgYXV0aG9yX2lkZW50KTsKKwkJYXNzZXJ0X3NwbGl0X2lkZW50KCZjaSwgJmNvbW1pdHRlcl9pZGVudCk7CisKKwkJaWYgKGlkZW50X2NtcCgmYWksICZjaSkpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsCisJCQkJXygiJXMiCisJCQkJIkF1dGhvcjogICAgJS4qcyA8JS4qcz4iKSwKKwkJCQlpZGVudF9zaG93bisrID8gIiIgOiAiXG4iLAorCQkJCShpbnQpKGFpLm5hbWVfZW5kIC0gYWkubmFtZV9iZWdpbiksIGFpLm5hbWVfYmVnaW4sCisJCQkJKGludCkoYWkubWFpbF9lbmQgLSBhaS5tYWlsX2JlZ2luKSwgYWkubWFpbF9iZWdpbik7CisKKwkJaWYgKGF1dGhvcl9kYXRlX2lzX2ludGVyZXN0aW5nKCkpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsCisJCQkJXygiJXMiCisJCQkJIkRhdGU6ICAgICAgJXMiKSwKKwkJCQlpZGVudF9zaG93bisrID8gIiIgOiAiXG4iLAorCQkJCXNob3dfaWRlbnRfZGF0ZSgmYWksIERBVEVfTU9ERShOT1JNQUwpKSk7CisKKwkJaWYgKCFjb21taXR0ZXJfaWRlbnRfc3VmZmljaWVudGx5X2dpdmVuKCkpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsCisJCQkJXygiJXMiCisJCQkJIkNvbW1pdHRlcjogJS4qcyA8JS4qcz4iKSwKKwkJCQlpZGVudF9zaG93bisrID8gIiIgOiAiXG4iLAorCQkJCShpbnQpKGNpLm5hbWVfZW5kIC0gY2kubmFtZV9iZWdpbiksIGNpLm5hbWVfYmVnaW4sCisJCQkJKGludCkoY2kubWFpbF9lbmQgLSBjaS5tYWlsX2JlZ2luKSwgY2kubWFpbF9iZWdpbik7CisKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBHSVRfQ09MT1JfTk9STUFMLCAiJXMiLCAiIik7IC8qIEFkZCBuZXcgbGluZSBmb3IgY2xhcml0eSAqLworCisJCXNhdmVkX2NvbG9yX3NldHRpbmcgPSBzLT51c2VfY29sb3I7CisJCXMtPnVzZV9jb2xvciA9IDA7CisJCWNvbW1pdHRhYmxlID0gcnVuX3N0YXR1cyhzLT5mcCwgaW5kZXhfZmlsZSwgcHJlZml4LCAxLCBzKTsKKwkJcy0+dXNlX2NvbG9yID0gc2F2ZWRfY29sb3Jfc2V0dGluZzsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJnMtPmNoYW5nZSwgMSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWNvbnN0IGNoYXIgKnBhcmVudCA9ICJIRUFEIjsKKworCQlpZiAoIWFjdGl2ZV9uciAmJiByZWFkX2NhY2hlKCkgPCAwKQorCQkJZGllKF8oIkNhbm5vdCByZWFkIGluZGV4IikpOworCisJCWlmIChhbWVuZCkKKwkJCXBhcmVudCA9ICJIRUFEXjEiOworCisJCWlmIChnZXRfb2lkKHBhcmVudCwgJm9pZCkpIHsKKwkJCWludCBpLCBpdGFfbnIgPSAwOworCisJCQlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspCisJCQkJaWYgKGNlX2ludGVudF90b19hZGQoYWN0aXZlX2NhY2hlW2ldKSkKKwkJCQkJaXRhX25yKys7CisJCQljb21taXR0YWJsZSA9IGFjdGl2ZV9uciAtIGl0YV9uciA+IDA7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVW5sZXNzIHRoZSB1c2VyIGRpZCBleHBsaWNpdGx5IHJlcXVlc3QgYSBzdWJtb2R1bGUKKwkJCSAqIGlnbm9yZSBtb2RlIGJ5IHBhc3NpbmcgYSBjb21tYW5kIGxpbmUgb3B0aW9uIHdlIGRvCisJCQkgKiBub3QgaWdub3JlIGFueSBjaGFuZ2VkIHN1Ym1vZHVsZSBTSEEtMXMgd2hlbgorCQkJICogY29tcGFyaW5nIGluZGV4IGFuZCBwYXJlbnQsIG5vIG1hdHRlciB3aGF0IGlzCisJCQkgKiBjb25maWd1cmVkLiBPdGhlcndpc2Ugd2Ugd29uJ3QgY29tbWl0IGFueQorCQkJICogc3VibW9kdWxlcyB3aGljaCB3ZXJlIG1hbnVhbGx5IHN0YWdlZCwgd2hpY2ggd291bGQKKwkJCSAqIGJlIHJlYWxseSBjb25mdXNpbmcuCisJCQkgKi8KKwkJCXN0cnVjdCBkaWZmX2ZsYWdzIGZsYWdzID0gRElGRl9GTEFHU19JTklUOworCQkJZmxhZ3Mub3ZlcnJpZGVfc3VibW9kdWxlX2NvbmZpZyA9IDE7CisJCQlpZiAoaWdub3JlX3N1Ym1vZHVsZV9hcmcgJiYKKwkJCSAgICAhc3RyY21wKGlnbm9yZV9zdWJtb2R1bGVfYXJnLCAiYWxsIikpCisJCQkJZmxhZ3MuaWdub3JlX3N1Ym1vZHVsZXMgPSAxOworCQkJY29tbWl0dGFibGUgPSBpbmRleF9kaWZmZXJzX2Zyb20odGhlX3JlcG9zaXRvcnksCisJCQkJCQkJIHBhcmVudCwgJmZsYWdzLCAxKTsKKwkJfQorCX0KKwlzdHJidWZfcmVsZWFzZSgmY29tbWl0dGVyX2lkZW50KTsKKworCWZjbG9zZShzLT5mcCk7CisKKwkvKgorCSAqIFJlamVjdCBhbiBhdHRlbXB0IHRvIHJlY29yZCBhIG5vbi1tZXJnZSBlbXB0eSBjb21taXQgd2l0aG91dAorCSAqIGV4cGxpY2l0IC0tYWxsb3ctZW1wdHkuIEluIHRoZSBjaGVycnktcGljayBjYXNlLCBpdCBtYXkgYmUKKwkgKiBlbXB0eSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbiwgd2hpY2ggdGhlIHVzZXIgc2hvdWxkIG9rYXkuCisJICovCisJaWYgKCFjb21taXR0YWJsZSAmJiB3aGVuY2UgIT0gRlJPTV9NRVJHRSAmJiAhYWxsb3dfZW1wdHkgJiYKKwkgICAgIShhbWVuZCAmJiBpc19hX21lcmdlKGN1cnJlbnRfaGVhZCkpKSB7CisJCXMtPmhpbnRzID0gYWR2aWNlX3N0YXR1c19oaW50czsKKwkJcy0+ZGlzcGxheV9jb21tZW50X3ByZWZpeCA9IG9sZF9kaXNwbGF5X2NvbW1lbnRfcHJlZml4OworCQlydW5fc3RhdHVzKHN0ZG91dCwgaW5kZXhfZmlsZSwgcHJlZml4LCAwLCBzKTsKKwkJaWYgKGFtZW5kKQorCQkJZnB1dHMoXyhlbXB0eV9hbWVuZF9hZHZpY2UpLCBzdGRlcnIpOworCQllbHNlIGlmIChpc19mcm9tX2NoZXJyeV9waWNrKHdoZW5jZSkgfHwKKwkJCSB3aGVuY2UgPT0gRlJPTV9SRUJBU0VfUElDSykgeworCQkJZnB1dHMoXyhlbXB0eV9jaGVycnlfcGlja19hZHZpY2UpLCBzdGRlcnIpOworCQkJaWYgKHdoZW5jZSA9PSBGUk9NX0NIRVJSWV9QSUNLX1NJTkdMRSkKKwkJCQlmcHV0cyhfKGVtcHR5X2NoZXJyeV9waWNrX2FkdmljZV9zaW5nbGUpLCBzdGRlcnIpOworCQkJZWxzZSBpZiAod2hlbmNlID09IEZST01fQ0hFUlJZX1BJQ0tfTVVMVEkpCisJCQkJZnB1dHMoXyhlbXB0eV9jaGVycnlfcGlja19hZHZpY2VfbXVsdGkpLCBzdGRlcnIpOworCQkJZWxzZQorCQkJCWZwdXRzKF8oZW1wdHlfcmViYXNlX3BpY2tfYWR2aWNlKSwgc3RkZXJyKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIW5vX3ZlcmlmeSAmJiBmaW5kX2hvb2soInByZS1jb21taXQiKSkgeworCQkvKgorCQkgKiBSZS1yZWFkIHRoZSBpbmRleCBhcyBwcmUtY29tbWl0IGhvb2sgY291bGQgaGF2ZSB1cGRhdGVkIGl0LAorCQkgKiBhbmQgd3JpdGUgaXQgb3V0IGFzIGEgdHJlZS4gIFdlIG11c3QgZG8gdGhpcyBiZWZvcmUgd2UgaW52b2tlCisJCSAqIHRoZSBlZGl0b3IgYW5kIGFmdGVyIHdlIGludm9rZSBydW5fc3RhdHVzIGFib3ZlLgorCQkgKi8KKwkJZGlzY2FyZF9jYWNoZSgpOworCX0KKwlyZWFkX2NhY2hlX2Zyb20oaW5kZXhfZmlsZSk7CisKKwlpZiAodXBkYXRlX21haW5fY2FjaGVfdHJlZSgwKSkgeworCQllcnJvcihfKCJFcnJvciBidWlsZGluZyB0cmVlcyIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHJ1bl9jb21taXRfaG9vayh1c2VfZWRpdG9yLCBpbmRleF9maWxlLCAicHJlcGFyZS1jb21taXQtbXNnIiwKKwkJCSAgICBnaXRfcGF0aF9jb21taXRfZWRpdG1zZygpLCBob29rX2FyZzEsIGhvb2tfYXJnMiwgTlVMTCkpCisJCXJldHVybiAwOworCisJaWYgKHVzZV9lZGl0b3IpIHsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgZW52ID0gQVJHVl9BUlJBWV9JTklUOworCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmVudiwgIkdJVF9JTkRFWF9GSUxFPSVzIiwgaW5kZXhfZmlsZSk7CisJCWlmIChsYXVuY2hfZWRpdG9yKGdpdF9wYXRoX2NvbW1pdF9lZGl0bXNnKCksIE5VTEwsIGVudi5hcmd2KSkgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQlfKCJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iKSk7CisJCQlleGl0KDEpOworCQl9CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmVudik7CisJfQorCisJaWYgKCFub192ZXJpZnkgJiYKKwkgICAgcnVuX2NvbW1pdF9ob29rKHVzZV9lZGl0b3IsIGluZGV4X2ZpbGUsICJjb21taXQtbXNnIiwgZ2l0X3BhdGhfY29tbWl0X2VkaXRtc2coKSwgTlVMTCkpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpmaW5kX2F1dGhvcl9ieV9uaWNrbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJpbmdfbGlzdCBtYWlsbWFwID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwljb25zdCBjaGFyICphdlsyMF07CisJaW50IGFjID0gMDsKKworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXZzLCBOVUxMKTsKKwlzdHJidWZfYWRkZigmYnVmLCAiLS1hdXRob3I9JXMiLCBuYW1lKTsKKwlhdlsrK2FjXSA9ICItLWFsbCI7CisJYXZbKythY10gPSAiLWkiOworCWF2WysrYWNdID0gYnVmLmJ1ZjsKKwlhdlsrK2FjXSA9IE5VTEw7CisJc2V0dXBfcmV2aXNpb25zKGFjLCBhdiwgJnJldnMsIE5VTEwpOworCXJldnMubWFpbG1hcCA9ICZtYWlsbWFwOworCXJlYWRfbWFpbG1hcChyZXZzLm1haWxtYXAsIE5VTEwpOworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKwljb21taXQgPSBnZXRfcmV2aXNpb24oJnJldnMpOworCWlmIChjb21taXQpIHsKKwkJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwkJY3R4LmRhdGVfbW9kZS50eXBlID0gREFURV9OT1JNQUw7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJWFOIDwlYUU+IiwgJmJ1ZiwgJmN0eCk7CisJCWNsZWFyX21haWxtYXAoJm1haWxtYXApOworCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwl9CisJZGllKF8oIi0tYXV0aG9yICclcycgaXMgbm90ICdOYW1lIDxlbWFpbD4nIGFuZCBtYXRjaGVzIG5vIGV4aXN0aW5nIGF1dGhvciIpLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2lnbm9yZWRfYXJnKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaWYgKCFpZ25vcmVkX2FyZykKKwkJOyAvKiBkZWZhdWx0IGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKwllbHNlIGlmICghc3RyY21wKGlnbm9yZWRfYXJnLCAidHJhZGl0aW9uYWwiKSkKKwkJcy0+c2hvd19pZ25vcmVkX21vZGUgPSBTSE9XX1RSQURJVElPTkFMX0lHTk9SRUQ7CisJZWxzZSBpZiAoIXN0cmNtcChpZ25vcmVkX2FyZywgIm5vIikpCisJCXMtPnNob3dfaWdub3JlZF9tb2RlID0gU0hPV19OT19JR05PUkVEOworCWVsc2UgaWYgKCFzdHJjbXAoaWdub3JlZF9hcmcsICJtYXRjaGluZyIpKQorCQlzLT5zaG93X2lnbm9yZWRfbW9kZSA9IFNIT1dfTUFUQ0hJTkdfSUdOT1JFRDsKKwllbHNlCisJCWRpZShfKCJJbnZhbGlkIGlnbm9yZWQgbW9kZSAnJXMnIiksIGlnbm9yZWRfYXJnKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3VudHJhY2tlZF9maWxlc19hcmcoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpZiAoIXVudHJhY2tlZF9maWxlc19hcmcpCisJCTsgLyogZGVmYXVsdCBhbHJlYWR5IGluaXRpYWxpemVkICovCisJZWxzZSBpZiAoIXN0cmNtcCh1bnRyYWNrZWRfZmlsZXNfYXJnLCAibm8iKSkKKwkJcy0+c2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX05PX1VOVFJBQ0tFRF9GSUxFUzsKKwllbHNlIGlmICghc3RyY21wKHVudHJhY2tlZF9maWxlc19hcmcsICJub3JtYWwiKSkKKwkJcy0+c2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX05PUk1BTF9VTlRSQUNLRURfRklMRVM7CisJZWxzZSBpZiAoIXN0cmNtcCh1bnRyYWNrZWRfZmlsZXNfYXJnLCAiYWxsIikpCisJCXMtPnNob3dfdW50cmFja2VkX2ZpbGVzID0gU0hPV19BTExfVU5UUkFDS0VEX0ZJTEVTOworCS8qCisJICogUGxlYXNlIHVwZGF0ZSAkX19naXRfdW50cmFja2VkX2ZpbGVfbW9kZXMgaW4KKwkgKiBnaXQtY29tcGxldGlvbi5iYXNoIHdoZW4geW91IGFkZCBuZXcgb3B0aW9ucworCSAqLworCWVsc2UKKwkJZGllKF8oIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIpLCB1bnRyYWNrZWRfZmlsZXNfYXJnKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJlYWRfY29tbWl0X21lc3NhZ2UoY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBjaGFyICpvdXRfZW5jOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUobmFtZSk7CisJaWYgKCFjb21taXQpCisJCWRpZShfKCJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIpLCBuYW1lKTsKKwlvdXRfZW5jID0gZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKKwlyZXR1cm4gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgb3V0X2VuYyk7Cit9CisKKy8qCisgKiBFbnVtZXJhdGUgd2hhdCBuZWVkcyB0byBiZSBwcm9wYWdhdGVkIHdoZW4gLS1wb3JjZWxhaW4KKyAqIGlzIG5vdCBpbiBlZmZlY3QgaGVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBzdGF0dXNfZGVmZXJyZWRfY29uZmlnIHsKKwllbnVtIHd0X3N0YXR1c19mb3JtYXQgc3RhdHVzX2Zvcm1hdDsKKwlpbnQgc2hvd19icmFuY2g7CisJZW51bSBhaGVhZF9iZWhpbmRfZmxhZ3MgYWhlYWRfYmVoaW5kOworfSBzdGF0dXNfZGVmZXJyZWRfY29uZmlnID0geworCVNUQVRVU19GT1JNQVRfVU5TUEVDSUZJRUQsCisJLTEsIC8qIHVuc3BlY2lmaWVkICovCisJQUhFQURfQkVISU5EX1VOU1BFQ0lGSUVELAorfTsKKworc3RhdGljIHZvaWQgZmluYWxpemVfZGVmZXJyZWRfY29uZmlnKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IHVzZV9kZWZlcnJlZF9jb25maWcgPSAoc3RhdHVzX2Zvcm1hdCAhPSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTiAmJgorCQkJCSAgIHN0YXR1c19mb3JtYXQgIT0gU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU5fVjIgJiYKKwkJCQkgICAhcy0+bnVsbF90ZXJtaW5hdGlvbik7CisKKwlpZiAocy0+bnVsbF90ZXJtaW5hdGlvbikgeworCQlpZiAoc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX05PTkUgfHwKKwkJICAgIHN0YXR1c19mb3JtYXQgPT0gU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRCkKKwkJCXN0YXR1c19mb3JtYXQgPSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTjsKKwkJZWxzZSBpZiAoc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX0xPTkcpCisJCQlkaWUoXygiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIikpOworCX0KKworCWlmICh1c2VfZGVmZXJyZWRfY29uZmlnICYmIHN0YXR1c19mb3JtYXQgPT0gU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRCkKKwkJc3RhdHVzX2Zvcm1hdCA9IHN0YXR1c19kZWZlcnJlZF9jb25maWcuc3RhdHVzX2Zvcm1hdDsKKwlpZiAoc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX1VOU1BFQ0lGSUVEKQorCQlzdGF0dXNfZm9ybWF0ID0gU1RBVFVTX0ZPUk1BVF9OT05FOworCisJaWYgKHVzZV9kZWZlcnJlZF9jb25maWcgJiYgcy0+c2hvd19icmFuY2ggPCAwKQorCQlzLT5zaG93X2JyYW5jaCA9IHN0YXR1c19kZWZlcnJlZF9jb25maWcuc2hvd19icmFuY2g7CisJaWYgKHMtPnNob3dfYnJhbmNoIDwgMCkKKwkJcy0+c2hvd19icmFuY2ggPSAwOworCisJLyoKKwkgKiBJZiB0aGUgdXNlciBkaWQgbm90IGdpdmUgYSAiLS1bbm9dLWFoZWFkLWJlaGluZCIgY29tbWFuZAorCSAqIGxpbmUgYXJndW1lbnQgKkFORCogd2Ugd2lsbCBwcmludCBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdAorCSAqIChzaG9ydCwgbG9uZyBldGMuKSB0aGVuIHdlIGluaGVyaXQgZnJvbSB0aGUgc3RhdHVzLmFoZWFkYmVoaW5kCisJICogY29uZmlnIHNldHRpbmcuICBJbiBhbGwgb3RoZXIgY2FzZXMgKGFuZCBwb3JjZWxhaW4gVlsxMl0gZm9ybWF0cworCSAqIGluIHBhcnRpY3VsYXIpLCB3ZSBpbmhlcml0IF9GVUxMIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKwkgKi8KKwlpZiAodXNlX2RlZmVycmVkX2NvbmZpZyAmJgorCSAgICBzLT5haGVhZF9iZWhpbmRfZmxhZ3MgPT0gQUhFQURfQkVISU5EX1VOU1BFQ0lGSUVEKQorCQlzLT5haGVhZF9iZWhpbmRfZmxhZ3MgPSBzdGF0dXNfZGVmZXJyZWRfY29uZmlnLmFoZWFkX2JlaGluZDsKKworCWlmIChzLT5haGVhZF9iZWhpbmRfZmxhZ3MgPT0gQUhFQURfQkVISU5EX1VOU1BFQ0lGSUVEKQorCQlzLT5haGVhZF9iZWhpbmRfZmxhZ3MgPSBBSEVBRF9CRUhJTkRfRlVMTDsKK30KKworc3RhdGljIGludCBwYXJzZV9hbmRfdmFsaWRhdGVfb3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCisJCQkJICAgICAgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlW10sCisJCQkJICAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSAgICAgIHN0cnVjdCBjb21taXQgKmN1cnJlbnRfaGVhZCwKKwkJCQkgICAgICBzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWludCBmID0gMDsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgdXNhZ2UsIDApOworCWZpbmFsaXplX2RlZmVycmVkX2NvbmZpZyhzKTsKKworCWlmIChmb3JjZV9hdXRob3IgJiYgIXN0cmNocihmb3JjZV9hdXRob3IsICc+JykpCisJCWZvcmNlX2F1dGhvciA9IGZpbmRfYXV0aG9yX2J5X25pY2tuYW1lKGZvcmNlX2F1dGhvcik7CisKKwlpZiAoZm9yY2VfYXV0aG9yICYmIHJlbmV3X2F1dGhvcnNoaXApCisJCWRpZShfKCJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIikpOworCisJaWYgKGxvZ2ZpbGUgfHwgaGF2ZV9vcHRpb25fbSB8fCB1c2VfbWVzc2FnZSB8fCBmaXh1cF9tZXNzYWdlKQorCQl1c2VfZWRpdG9yID0gMDsKKwlpZiAoMCA8PSBlZGl0X2ZsYWcpCisJCXVzZV9lZGl0b3IgPSBlZGl0X2ZsYWc7CisKKwkvKiBTYW5pdHkgY2hlY2sgb3B0aW9ucyAqLworCWlmIChhbWVuZCAmJiAhY3VycmVudF9oZWFkKQorCQlkaWUoXygiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iKSk7CisJaWYgKGFtZW5kICYmIHdoZW5jZSAhPSBGUk9NX0NPTU1JVCkgeworCQlpZiAod2hlbmNlID09IEZST01fTUVSR0UpCisJCQlkaWUoXygiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIpKTsKKwkJZWxzZSBpZiAoaXNfZnJvbV9jaGVycnlfcGljayh3aGVuY2UpKQorCQkJZGllKF8oIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iKSk7CisJCWVsc2UgaWYgKHdoZW5jZSA9PSBGUk9NX1JFQkFTRV9QSUNLKQorCQkJZGllKF8oIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHJlYmFzZSAtLSBjYW5ub3QgYW1lbmQuIikpOworCX0KKwlpZiAoZml4dXBfbWVzc2FnZSAmJiBzcXVhc2hfbWVzc2FnZSkKKwkJZGllKF8oIk9wdGlvbnMgLS1zcXVhc2ggYW5kIC0tZml4dXAgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKSk7CisJaWYgKHVzZV9tZXNzYWdlKQorCQlmKys7CisJaWYgKGVkaXRfbWVzc2FnZSkKKwkJZisrOworCWlmIChmaXh1cF9tZXNzYWdlKQorCQlmKys7CisJaWYgKGxvZ2ZpbGUpCisJCWYrKzsKKwlpZiAoZiA+IDEpCisJCWRpZShfKCJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIpKTsKKwlpZiAoaGF2ZV9vcHRpb25fbSAmJiAoZWRpdF9tZXNzYWdlIHx8IHVzZV9tZXNzYWdlIHx8IGxvZ2ZpbGUpKQorCQlkaWUoKF8oIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi4iKSkpOworCWlmIChmIHx8IGhhdmVfb3B0aW9uX20pCisJCXRlbXBsYXRlX2ZpbGUgPSBOVUxMOworCWlmIChlZGl0X21lc3NhZ2UpCisJCXVzZV9tZXNzYWdlID0gZWRpdF9tZXNzYWdlOworCWlmIChhbWVuZCAmJiAhdXNlX21lc3NhZ2UgJiYgIWZpeHVwX21lc3NhZ2UpCisJCXVzZV9tZXNzYWdlID0gIkhFQUQiOworCWlmICghdXNlX21lc3NhZ2UgJiYgIWlzX2Zyb21fY2hlcnJ5X3BpY2sod2hlbmNlKSAmJgorCSAgICAhaXNfZnJvbV9yZWJhc2Uod2hlbmNlKSAmJiByZW5ld19hdXRob3JzaGlwKQorCQlkaWUoXygiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIpKTsKKwlpZiAodXNlX21lc3NhZ2UpIHsKKwkJdXNlX21lc3NhZ2VfYnVmZmVyID0gcmVhZF9jb21taXRfbWVzc2FnZSh1c2VfbWVzc2FnZSk7CisJCWlmICghcmVuZXdfYXV0aG9yc2hpcCkgeworCQkJYXV0aG9yX21lc3NhZ2UgPSB1c2VfbWVzc2FnZTsKKwkJCWF1dGhvcl9tZXNzYWdlX2J1ZmZlciA9IHVzZV9tZXNzYWdlX2J1ZmZlcjsKKwkJfQorCX0KKwlpZiAoKGlzX2Zyb21fY2hlcnJ5X3BpY2sod2hlbmNlKSB8fCB3aGVuY2UgPT0gRlJPTV9SRUJBU0VfUElDSykgJiYKKwkgICAgIXJlbmV3X2F1dGhvcnNoaXApIHsKKwkJYXV0aG9yX21lc3NhZ2UgPSAiQ0hFUlJZX1BJQ0tfSEVBRCI7CisJCWF1dGhvcl9tZXNzYWdlX2J1ZmZlciA9IHJlYWRfY29tbWl0X21lc3NhZ2UoYXV0aG9yX21lc3NhZ2UpOworCX0KKworCWlmIChwYXRjaF9pbnRlcmFjdGl2ZSkKKwkJaW50ZXJhY3RpdmUgPSAxOworCisJaWYgKGFsc28gKyBvbmx5ICsgYWxsICsgaW50ZXJhY3RpdmUgPiAxKQorCQlkaWUoXygiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIikpOworCWNsZWFudXBfbW9kZSA9IGdldF9jbGVhbnVwX21vZGUoY2xlYW51cF9hcmcsIHVzZV9lZGl0b3IpOworCisJaGFuZGxlX3VudHJhY2tlZF9maWxlc19hcmcocyk7CisKKwlpZiAoYWxsICYmIGFyZ2MgPiAwKQorCQlkaWUoXygicGF0aHMgJyVzIC4uLicgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIiksCisJCSAgICBhcmd2WzBdKTsKKworCWlmIChzdGF0dXNfZm9ybWF0ICE9IFNUQVRVU19GT1JNQVRfTk9ORSkKKwkJZHJ5X3J1biA9IDE7CisKKwlyZXR1cm4gYXJnYzsKK30KKworc3RhdGljIGludCBkcnlfcnVuX2NvbW1pdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgY29uc3Qgc3RydWN0IGNvbW1pdCAqY3VycmVudF9oZWFkLCBzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWludCBjb21taXR0YWJsZTsKKwljb25zdCBjaGFyICppbmRleF9maWxlOworCisJaW5kZXhfZmlsZSA9IHByZXBhcmVfaW5kZXgoYXJnYywgYXJndiwgcHJlZml4LCBjdXJyZW50X2hlYWQsIDEpOworCWNvbW1pdHRhYmxlID0gcnVuX3N0YXR1cyhzdGRvdXQsIGluZGV4X2ZpbGUsIHByZWZpeCwgMCwgcyk7CisJcm9sbGJhY2tfaW5kZXhfZmlsZXMoKTsKKworCXJldHVybiBjb21taXR0YWJsZSA/IDAgOiAxOworfQorCitkZWZpbmVfbGlzdF9jb25maWdfYXJyYXlfZXh0cmEoY29sb3Jfc3RhdHVzX3Nsb3RzLCB7ImFkZGVkIn0pOworCitzdGF0aWMgaW50IHBhcnNlX3N0YXR1c19zbG90KGNvbnN0IGNoYXIgKnNsb3QpCit7CisJaWYgKCFzdHJjYXNlY21wKHNsb3QsICJhZGRlZCIpKQorCQlyZXR1cm4gV1RfU1RBVFVTX1VQREFURUQ7CisKKwlyZXR1cm4gTE9PS1VQX0NPTkZJRyhjb2xvcl9zdGF0dXNfc2xvdHMsIHNsb3QpOworfQorCitzdGF0aWMgaW50IGdpdF9zdGF0dXNfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQoreworCXN0cnVjdCB3dF9zdGF0dXMgKnMgPSBjYjsKKwljb25zdCBjaGFyICpzbG90X25hbWU7CisKKwlpZiAoc3RhcnRzX3dpdGgoaywgImNvbHVtbi4iKSkKKwkJcmV0dXJuIGdpdF9jb2x1bW5fY29uZmlnKGssIHYsICJzdGF0dXMiLCAmcy0+Y29sb3B0cyk7CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5IikpIHsKKwkJaW50IGlzX2Jvb2w7CisJCXMtPnN1Ym1vZHVsZV9zdW1tYXJ5ID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrLCB2LCAmaXNfYm9vbCk7CisJCWlmIChpc19ib29sICYmIHMtPnN1Ym1vZHVsZV9zdW1tYXJ5KQorCQkJcy0+c3VibW9kdWxlX3N1bW1hcnkgPSAtMTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMuc2hvcnQiKSkgeworCQlpZiAoZ2l0X2NvbmZpZ19ib29sKGssIHYpKQorCQkJc3RhdHVzX2RlZmVycmVkX2NvbmZpZy5zdGF0dXNfZm9ybWF0ID0gU1RBVFVTX0ZPUk1BVF9TSE9SVDsKKwkJZWxzZQorCQkJc3RhdHVzX2RlZmVycmVkX2NvbmZpZy5zdGF0dXNfZm9ybWF0ID0gU1RBVFVTX0ZPUk1BVF9OT05FOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5icmFuY2giKSkgeworCQlzdGF0dXNfZGVmZXJyZWRfY29uZmlnLnNob3dfYnJhbmNoID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5haGVhZGJlaGluZCIpKSB7CisJCXN0YXR1c19kZWZlcnJlZF9jb25maWcuYWhlYWRfYmVoaW5kID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5zaG93c3Rhc2giKSkgeworCQlzLT5zaG93X3N0YXNoID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5jb2xvciIpIHx8ICFzdHJjbXAoaywgImNvbG9yLnN0YXR1cyIpKSB7CisJCXMtPnVzZV9jb2xvciA9IGdpdF9jb25maWdfY29sb3Jib29sKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5kaXNwbGF5Y29tbWVudHByZWZpeCIpKSB7CisJCXMtPmRpc3BsYXlfY29tbWVudF9wcmVmaXggPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0KKwlpZiAoc2tpcF9wcmVmaXgoaywgInN0YXR1cy5jb2xvci4iLCAmc2xvdF9uYW1lKSB8fAorCSAgICBza2lwX3ByZWZpeChrLCAiY29sb3Iuc3RhdHVzLiIsICZzbG90X25hbWUpKSB7CisJCWludCBzbG90ID0gcGFyc2Vfc3RhdHVzX3Nsb3Qoc2xvdF9uYW1lKTsKKwkJaWYgKHNsb3QgPCAwKQorCQkJcmV0dXJuIDA7CisJCWlmICghdikKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrKTsKKwkJcmV0dXJuIGNvbG9yX3BhcnNlKHYsIHMtPmNvbG9yX3BhbGV0dGVbc2xvdF0pOworCX0KKwlpZiAoIXN0cmNtcChrLCAic3RhdHVzLnJlbGF0aXZlcGF0aHMiKSkgeworCQlzLT5yZWxhdGl2ZV9wYXRocyA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzIikpIHsKKwkJaWYgKCF2KQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGspOworCQllbHNlIGlmICghc3RyY21wKHYsICJubyIpKQorCQkJcy0+c2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX05PX1VOVFJBQ0tFRF9GSUxFUzsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2LCAibm9ybWFsIikpCisJCQlzLT5zaG93X3VudHJhY2tlZF9maWxlcyA9IFNIT1dfTk9STUFMX1VOVFJBQ0tFRF9GSUxFUzsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2LCAiYWxsIikpCisJCQlzLT5zaG93X3VudHJhY2tlZF9maWxlcyA9IFNIT1dfQUxMX1VOVFJBQ0tFRF9GSUxFUzsKKwkJZWxzZQorCQkJcmV0dXJuIGVycm9yKF8oIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIpLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJkaWZmLnJlbmFtZWxpbWl0IikpIHsKKwkJaWYgKHMtPnJlbmFtZV9saW1pdCA9PSAtMSkKKwkJCXMtPnJlbmFtZV9saW1pdCA9IGdpdF9jb25maWdfaW50KGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5yZW5hbWVsaW1pdCIpKSB7CisJCXMtPnJlbmFtZV9saW1pdCA9IGdpdF9jb25maWdfaW50KGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgImRpZmYucmVuYW1lcyIpKSB7CisJCWlmIChzLT5kZXRlY3RfcmVuYW1lID09IC0xKQorCQkJcy0+ZGV0ZWN0X3JlbmFtZSA9IGdpdF9jb25maWdfcmVuYW1lKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5yZW5hbWVzIikpIHsKKwkJcy0+ZGV0ZWN0X3JlbmFtZSA9IGdpdF9jb25maWdfcmVuYW1lKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGdpdF9kaWZmX3VpX2NvbmZpZyhrLCB2LCBOVUxMKTsKK30KKworaW50IGNtZF9zdGF0dXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RhdGljIGludCBub19yZW5hbWVzID0gLTE7CisJc3RhdGljIGNvbnN0IGNoYXIgKnJlbmFtZV9zY29yZV9hcmcgPSAoY29uc3QgY2hhciAqKS0xOworCXN0YXRpYyBzdHJ1Y3Qgd3Rfc3RhdHVzIHM7CisJdW5zaWduZWQgaW50IHByb2dyZXNzX2ZsYWcgPSAwOworCWludCBmZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX3N0YXR1c19vcHRpb25zW10gPSB7CisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oImJlIHZlcmJvc2UiKSksCisJCU9QVF9TRVRfSU5UKCdzJywgInNob3J0IiwgJnN0YXR1c19mb3JtYXQsCisJCQkgICAgTl8oInNob3cgc3RhdHVzIGNvbmNpc2VseSIpLCBTVEFUVVNfRk9STUFUX1NIT1JUKSwKKwkJT1BUX0JPT0woJ2InLCAiYnJhbmNoIiwgJnMuc2hvd19icmFuY2gsCisJCQkgTl8oInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIikpLAorCQlPUFRfQk9PTCgwLCAic2hvdy1zdGFzaCIsICZzLnNob3dfc3Rhc2gsCisJCQkgTl8oInNob3cgc3Rhc2ggaW5mb3JtYXRpb24iKSksCisJCU9QVF9CT09MKDAsICJhaGVhZC1iZWhpbmQiLCAmcy5haGVhZF9iZWhpbmRfZmxhZ3MsCisJCQkgTl8oImNvbXB1dGUgZnVsbCBhaGVhZC9iZWhpbmQgdmFsdWVzIikpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAicG9yY2VsYWluIiwgJnN0YXR1c19mb3JtYXQsCisJCSAgTl8oInZlcnNpb24iKSwgTl8oIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IiksCisJCSAgUEFSU0VfT1BUX09QVEFSRywgb3B0X3BhcnNlX3BvcmNlbGFpbiksCisJCU9QVF9TRVRfSU5UKDAsICJsb25nIiwgJnN0YXR1c19mb3JtYXQsCisJCQkgICAgTl8oInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIpLAorCQkJICAgIFNUQVRVU19GT1JNQVRfTE9ORyksCisJCU9QVF9CT09MKCd6JywgIm51bGwiLCAmcy5udWxsX3Rlcm1pbmF0aW9uLAorCQkJIE5fKCJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIpKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAndScsICJ1bnRyYWNrZWQtZmlsZXMiLCAmdW50cmFja2VkX2ZpbGVzX2FyZywKKwkJICBOXygibW9kZSIpLAorCQkgIE5fKCJzaG93IHVudHJhY2tlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IGFsbCwgbm9ybWFsLCBuby4gKERlZmF1bHQ6IGFsbCkiKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpImFsbCIgfSwKKwkJeyBPUFRJT05fU1RSSU5HLCAwLCAiaWdub3JlZCIsICZpZ25vcmVkX2FyZywKKwkJICBOXygibW9kZSIpLAorCQkgIE5fKCJzaG93IGlnbm9yZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAoRGVmYXVsdDogdHJhZGl0aW9uYWwpIiksCisJCSAgUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSJ0cmFkaXRpb25hbCIgfSwKKwkJeyBPUFRJT05fU1RSSU5HLCAwLCAiaWdub3JlLXN1Ym1vZHVsZXMiLCAmaWdub3JlX3N1Ym1vZHVsZV9hcmcsIE5fKCJ3aGVuIiksCisJCSAgTl8oImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gKERlZmF1bHQ6IGFsbCkiKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpImFsbCIgfSwKKwkJT1BUX0NPTFVNTigwLCAiY29sdW1uIiwgJnMuY29sb3B0cywgTl8oImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiKSksCisJCU9QVF9CT09MKDAsICJuby1yZW5hbWVzIiwgJm5vX3JlbmFtZXMsIE5fKCJkbyBub3QgZGV0ZWN0IHJlbmFtZXMiKSksCisJCU9QVF9DQUxMQkFDS19GKCdNJywgImZpbmQtcmVuYW1lcyIsICZyZW5hbWVfc2NvcmVfYXJnLAorCQkgIE5fKCJuIiksIE5fKCJkZXRlY3QgcmVuYW1lcywgb3B0aW9uYWxseSBzZXQgc2ltaWxhcml0eSBpbmRleCIpLAorCQkgIFBBUlNFX09QVF9PUFRBUkcgfCBQQVJTRV9PUFRfTk9ORUcsIG9wdF9wYXJzZV9yZW5hbWVfc2NvcmUpLAorCQlPUFRfRU5EKCksCisJfTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fc3RhdHVzX3VzYWdlLCBidWlsdGluX3N0YXR1c19vcHRpb25zKTsKKworCXN0YXR1c19pbml0X2NvbmZpZygmcywgZ2l0X3N0YXR1c19jb25maWcpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCSAgICAgYnVpbHRpbl9zdGF0dXNfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9zdGF0dXNfdXNhZ2UsIDApOworCWZpbmFsaXplX2NvbG9wdHMoJnMuY29sb3B0cywgLTEpOworCWZpbmFsaXplX2RlZmVycmVkX2NvbmZpZygmcyk7CisKKwloYW5kbGVfdW50cmFja2VkX2ZpbGVzX2FyZygmcyk7CisJaGFuZGxlX2lnbm9yZWRfYXJnKCZzKTsKKworCWlmIChzLnNob3dfaWdub3JlZF9tb2RlID09IFNIT1dfTUFUQ0hJTkdfSUdOT1JFRCAmJgorCSAgICBzLnNob3dfdW50cmFja2VkX2ZpbGVzID09IFNIT1dfTk9fVU5UUkFDS0VEX0ZJTEVTKQorCQlkaWUoXygiVW5zdXBwb3J0ZWQgY29tYmluYXRpb24gb2YgaWdub3JlZCBhbmQgdW50cmFja2VkLWZpbGVzIGFyZ3VtZW50cyIpKTsKKworCXBhcnNlX3BhdGhzcGVjKCZzLnBhdGhzcGVjLCAwLAorCQkgICAgICAgUEFUSFNQRUNfUFJFRkVSX0ZVTEwsCisJCSAgICAgICBwcmVmaXgsIGFyZ3YpOworCisJaWYgKHN0YXR1c19mb3JtYXQgIT0gU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU4gJiYKKwkgICAgc3RhdHVzX2Zvcm1hdCAhPSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTl9WMikKKwkJcHJvZ3Jlc3NfZmxhZyA9IFJFRlJFU0hfUFJPR1JFU1M7CisJcmVwb19yZWFkX2luZGV4KHRoZV9yZXBvc2l0b3J5KTsKKwlyZWZyZXNoX2luZGV4KCZ0aGVfaW5kZXgsCisJCSAgICAgIFJFRlJFU0hfUVVJRVR8UkVGUkVTSF9VTk1FUkdFRHxwcm9ncmVzc19mbGFnLAorCQkgICAgICAmcy5wYXRoc3BlYywgTlVMTCwgTlVMTCk7CisKKwlpZiAodXNlX29wdGlvbmFsX2xvY2tzKCkpCisJCWZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIDApOworCWVsc2UKKwkJZmQgPSAtMTsKKworCXMuaXNfaW5pdGlhbCA9IGdldF9vaWQocy5yZWZlcmVuY2UsICZvaWQpID8gMSA6IDA7CisJaWYgKCFzLmlzX2luaXRpYWwpCisJCW9pZGNweSgmcy5vaWRfY29tbWl0LCAmb2lkKTsKKworCXMuaWdub3JlX3N1Ym1vZHVsZV9hcmcgPSBpZ25vcmVfc3VibW9kdWxlX2FyZzsKKwlzLnN0YXR1c19mb3JtYXQgPSBzdGF0dXNfZm9ybWF0OworCXMudmVyYm9zZSA9IHZlcmJvc2U7CisJaWYgKG5vX3JlbmFtZXMgIT0gLTEpCisJCXMuZGV0ZWN0X3JlbmFtZSA9ICFub19yZW5hbWVzOworCWlmICgoaW50cHRyX3QpcmVuYW1lX3Njb3JlX2FyZyAhPSAtMSkgeworCQlpZiAocy5kZXRlY3RfcmVuYW1lIDwgRElGRl9ERVRFQ1RfUkVOQU1FKQorCQkJcy5kZXRlY3RfcmVuYW1lID0gRElGRl9ERVRFQ1RfUkVOQU1FOworCQlpZiAocmVuYW1lX3Njb3JlX2FyZykKKwkJCXMucmVuYW1lX3Njb3JlID0gcGFyc2VfcmVuYW1lX3Njb3JlKCZyZW5hbWVfc2NvcmVfYXJnKTsKKwl9CisKKwl3dF9zdGF0dXNfY29sbGVjdCgmcyk7CisKKwlpZiAoMCA8PSBmZCkKKwkJcmVwb191cGRhdGVfaW5kZXhfaWZfYWJsZSh0aGVfcmVwb3NpdG9yeSwgJmluZGV4X2xvY2spOworCisJaWYgKHMucmVsYXRpdmVfcGF0aHMpCisJCXMucHJlZml4ID0gcHJlZml4OworCisJd3Rfc3RhdHVzX3ByaW50KCZzKTsKKwl3dF9zdGF0dXNfY29sbGVjdF9mcmVlX2J1ZmZlcnMoJnMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2NvbW1pdF9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJc3RydWN0IHd0X3N0YXR1cyAqcyA9IGNiOworCWludCBzdGF0dXM7CisKKwlpZiAoIXN0cmNtcChrLCAiY29tbWl0LnRlbXBsYXRlIikpCisJCXJldHVybiBnaXRfY29uZmlnX3BhdGhuYW1lKCZ0ZW1wbGF0ZV9maWxlLCBrLCB2KTsKKwlpZiAoIXN0cmNtcChrLCAiY29tbWl0LnN0YXR1cyIpKSB7CisJCWluY2x1ZGVfc3RhdHVzID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgImNvbW1pdC5jbGVhbnVwIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmY2xlYW51cF9hcmcsIGssIHYpOworCWlmICghc3RyY21wKGssICJjb21taXQuZ3Bnc2lnbiIpKSB7CisJCXNpZ25fY29tbWl0ID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpID8gIiIgOiBOVUxMOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgImNvbW1pdC52ZXJib3NlIikpIHsKKwkJaW50IGlzX2Jvb2w7CisJCWNvbmZpZ19jb21taXRfdmVyYm9zZSA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoaywgdiwgJmlzX2Jvb2wpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzdGF0dXMgPSBnaXRfZ3BnX2NvbmZpZyhrLCB2LCBOVUxMKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBnaXRfc3RhdHVzX2NvbmZpZyhrLCB2LCBzKTsKK30KKworaW50IGNtZF9jb21taXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RhdGljIHN0cnVjdCB3dF9zdGF0dXMgczsKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2NvbW1pdF9vcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIpKSwKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIikpLAorCisJCU9QVF9HUk9VUChOXygiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIpKSwKKwkJT1BUX0ZJTEVOQU1FKCdGJywgImZpbGUiLCAmbG9nZmlsZSwgTl8oInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiKSksCisJCU9QVF9TVFJJTkcoMCwgImF1dGhvciIsICZmb3JjZV9hdXRob3IsIE5fKCJhdXRob3IiKSwgTl8oIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IikpLAorCQlPUFRfU1RSSU5HKDAsICJkYXRlIiwgJmZvcmNlX2RhdGUsIE5fKCJkYXRlIiksIE5fKCJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiKSksCisJCU9QVF9DQUxMQkFDSygnbScsICJtZXNzYWdlIiwgJm1lc3NhZ2UsIE5fKCJtZXNzYWdlIiksIE5fKCJjb21taXQgbWVzc2FnZSIpLCBvcHRfcGFyc2VfbSksCisJCU9QVF9TVFJJTkcoJ2MnLCAicmVlZGl0LW1lc3NhZ2UiLCAmZWRpdF9tZXNzYWdlLCBOXygiY29tbWl0IiksIE5fKCJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIpKSwKKwkJT1BUX1NUUklORygnQycsICJyZXVzZS1tZXNzYWdlIiwgJnVzZV9tZXNzYWdlLCBOXygiY29tbWl0IiksIE5fKCJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIpKSwKKwkJT1BUX1NUUklORygwLCAiZml4dXAiLCAmZml4dXBfbWVzc2FnZSwgTl8oImNvbW1pdCIpLCBOXygidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIpKSwKKwkJT1BUX1NUUklORygwLCAic3F1YXNoIiwgJnNxdWFzaF9tZXNzYWdlLCBOXygiY29tbWl0IiksIE5fKCJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIpKSwKKwkJT1BUX0JPT0woMCwgInJlc2V0LWF1dGhvciIsICZyZW5ld19hdXRob3JzaGlwLCBOXygidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIpKSwKKwkJT1BUX0JPT0woJ3MnLCAic2lnbm9mZiIsICZzaWdub2ZmLCBOXygiYWRkIFNpZ25lZC1vZmYtYnk6IikpLAorCQlPUFRfRklMRU5BTUUoJ3QnLCAidGVtcGxhdGUiLCAmdGVtcGxhdGVfZmlsZSwgTl8oInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIpKSwKKwkJT1BUX0JPT0woJ2UnLCAiZWRpdCIsICZlZGl0X2ZsYWcsIE5fKCJmb3JjZSBlZGl0IG9mIGNvbW1pdCIpKSwKKwkJT1BUX0NMRUFOVVAoJmNsZWFudXBfYXJnKSwKKwkJT1BUX0JPT0woMCwgInN0YXR1cyIsICZpbmNsdWRlX3N0YXR1cywgTl8oImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIikpLAorCQl7IE9QVElPTl9TVFJJTkcsICdTJywgImdwZy1zaWduIiwgJnNpZ25fY29tbWl0LCBOXygia2V5LWlkIiksCisJCSAgTl8oIkdQRyBzaWduIGNvbW1pdCIpLCBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpICIiIH0sCisJCS8qIGVuZCBjb21taXQgbWVzc2FnZSBvcHRpb25zICovCisKKwkJT1BUX0dST1VQKE5fKCJDb21taXQgY29udGVudHMgb3B0aW9ucyIpKSwKKwkJT1BUX0JPT0woJ2EnLCAiYWxsIiwgJmFsbCwgTl8oImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIpKSwKKwkJT1BUX0JPT0woJ2knLCAiaW5jbHVkZSIsICZhbHNvLCBOXygiYWRkIHNwZWNpZmllZCBmaWxlcyB0byBpbmRleCBmb3IgY29tbWl0IikpLAorCQlPUFRfQk9PTCgwLCAiaW50ZXJhY3RpdmUiLCAmaW50ZXJhY3RpdmUsIE5fKCJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIpKSwKKwkJT1BUX0JPT0woJ3AnLCAicGF0Y2giLCAmcGF0Y2hfaW50ZXJhY3RpdmUsIE5fKCJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIikpLAorCQlPUFRfQk9PTCgnbycsICJvbmx5IiwgJm9ubHksIE5fKCJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiKSksCisJCU9QVF9CT09MKCduJywgIm5vLXZlcmlmeSIsICZub192ZXJpZnksIE5fKCJieXBhc3MgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIpKSwKKwkJT1BUX0JPT0woMCwgImRyeS1ydW4iLCAmZHJ5X3J1biwgTl8oInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiKSksCisJCU9QVF9TRVRfSU5UKDAsICJzaG9ydCIsICZzdGF0dXNfZm9ybWF0LCBOXygic2hvdyBzdGF0dXMgY29uY2lzZWx5IiksCisJCQkgICAgU1RBVFVTX0ZPUk1BVF9TSE9SVCksCisJCU9QVF9CT09MKDAsICJicmFuY2giLCAmcy5zaG93X2JyYW5jaCwgTl8oInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIikpLAorCQlPUFRfQk9PTCgwLCAiYWhlYWQtYmVoaW5kIiwgJnMuYWhlYWRfYmVoaW5kX2ZsYWdzLAorCQkJIE5fKCJjb21wdXRlIGZ1bGwgYWhlYWQvYmVoaW5kIHZhbHVlcyIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgInBvcmNlbGFpbiIsICZzdGF0dXNfZm9ybWF0LAorCQkJICAgIE5fKCJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIpLCBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTiksCisJCU9QVF9TRVRfSU5UKDAsICJsb25nIiwgJnN0YXR1c19mb3JtYXQsCisJCQkgICAgTl8oInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIpLAorCQkJICAgIFNUQVRVU19GT1JNQVRfTE9ORyksCisJCU9QVF9CT09MKCd6JywgIm51bGwiLCAmcy5udWxsX3Rlcm1pbmF0aW9uLAorCQkJIE5fKCJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIpKSwKKwkJT1BUX0JPT0woMCwgImFtZW5kIiwgJmFtZW5kLCBOXygiYW1lbmQgcHJldmlvdXMgY29tbWl0IikpLAorCQlPUFRfQk9PTCgwLCAibm8tcG9zdC1yZXdyaXRlIiwgJm5vX3Bvc3RfcmV3cml0ZSwgTl8oImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIpKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAndScsICJ1bnRyYWNrZWQtZmlsZXMiLCAmdW50cmFja2VkX2ZpbGVzX2FyZywgTl8oIm1vZGUiKSwgTl8oInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIpLCBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpImFsbCIgfSwKKwkJT1BUX1BBVEhTUEVDX0ZST01fRklMRSgmcGF0aHNwZWNfZnJvbV9maWxlKSwKKwkJT1BUX1BBVEhTUEVDX0ZJTEVfTlVMKCZwYXRoc3BlY19maWxlX251bCksCisJCS8qIGVuZCBjb21taXQgY29udGVudHMgb3B0aW9ucyAqLworCisJCU9QVF9ISURERU5fQk9PTCgwLCAiYWxsb3ctZW1wdHkiLCAmYWxsb3dfZW1wdHksCisJCQkJTl8oIm9rIHRvIHJlY29yZCBhbiBlbXB0eSBjaGFuZ2UiKSksCisJCU9QVF9ISURERU5fQk9PTCgwLCAiYWxsb3ctZW1wdHktbWVzc2FnZSIsICZhbGxvd19lbXB0eV9tZXNzYWdlLAorCQkJCU5fKCJvayB0byByZWNvcmQgYSBjaGFuZ2Ugd2l0aCBhbiBlbXB0eSBtZXNzYWdlIikpLAorCisJCU9QVF9FTkQoKQorCX07CisKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBhdXRob3JfaWRlbnQgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICppbmRleF9maWxlLCAqcmVmbG9nX21zZzsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBOVUxMOworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisJc3RydWN0IGNvbW1pdCAqY3VycmVudF9oZWFkID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2NvbW1pdF91c2FnZSwgYnVpbHRpbl9jb21taXRfb3B0aW9ucyk7CisKKwlzdGF0dXNfaW5pdF9jb25maWcoJnMsIGdpdF9jb21taXRfY29uZmlnKTsKKwlzLmNvbW1pdF90ZW1wbGF0ZSA9IDE7CisJc3RhdHVzX2Zvcm1hdCA9IFNUQVRVU19GT1JNQVRfTk9ORTsgLyogSWdub3JlIHN0YXR1cy5zaG9ydCAqLworCXMuY29sb3B0cyA9IDA7CisKKwlpZiAoZ2V0X29pZCgiSEVBRCIsICZvaWQpKQorCQljdXJyZW50X2hlYWQgPSBOVUxMOworCWVsc2UgeworCQljdXJyZW50X2hlYWQgPSBsb29rdXBfY29tbWl0X29yX2RpZSgmb2lkLCAiSEVBRCIpOworCQlpZiAocGFyc2VfY29tbWl0KGN1cnJlbnRfaGVhZCkpCisJCQlkaWUoXygiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IikpOworCX0KKwl2ZXJib3NlID0gLTE7IC8qIHVuc3BlY2lmaWVkICovCisJYXJnYyA9IHBhcnNlX2FuZF92YWxpZGF0ZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fY29tbWl0X29wdGlvbnMsCisJCQkJCSAgYnVpbHRpbl9jb21taXRfdXNhZ2UsCisJCQkJCSAgcHJlZml4LCBjdXJyZW50X2hlYWQsICZzKTsKKwlpZiAodmVyYm9zZSA9PSAtMSkKKwkJdmVyYm9zZSA9IChjb25maWdfY29tbWl0X3ZlcmJvc2UgPCAwKSA/IDAgOiBjb25maWdfY29tbWl0X3ZlcmJvc2U7CisKKwlpZiAoZHJ5X3J1bikKKwkJcmV0dXJuIGRyeV9ydW5fY29tbWl0KGFyZ2MsIGFyZ3YsIHByZWZpeCwgY3VycmVudF9oZWFkLCAmcyk7CisJaW5kZXhfZmlsZSA9IHByZXBhcmVfaW5kZXgoYXJnYywgYXJndiwgcHJlZml4LCBjdXJyZW50X2hlYWQsIDApOworCisJLyogU2V0IHVwIGV2ZXJ5dGhpbmcgZm9yIHdyaXRpbmcgdGhlIGNvbW1pdCBvYmplY3QuICBUaGlzIGluY2x1ZGVzCisJICAgcnVubmluZyBob29rcywgd3JpdGluZyB0aGUgdHJlZXMsIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSB1c2VyLiAgKi8KKwlpZiAoIXByZXBhcmVfdG9fY29tbWl0KGluZGV4X2ZpbGUsIHByZWZpeCwKKwkJCSAgICAgICBjdXJyZW50X2hlYWQsICZzLCAmYXV0aG9yX2lkZW50KSkgeworCQlyb2xsYmFja19pbmRleF9maWxlcygpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBEZXRlcm1pbmUgcGFyZW50cyAqLworCXJlZmxvZ19tc2cgPSBnZXRlbnYoIkdJVF9SRUZMT0dfQUNUSU9OIik7CisJaWYgKCFjdXJyZW50X2hlYWQpIHsKKwkJaWYgKCFyZWZsb2dfbXNnKQorCQkJcmVmbG9nX21zZyA9ICJjb21taXQgKGluaXRpYWwpIjsKKwl9IGVsc2UgaWYgKGFtZW5kKSB7CisJCWlmICghcmVmbG9nX21zZykKKwkJCXJlZmxvZ19tc2cgPSAiY29tbWl0IChhbWVuZCkiOworCQlwYXJlbnRzID0gY29weV9jb21taXRfbGlzdChjdXJyZW50X2hlYWQtPnBhcmVudHMpOworCX0gZWxzZSBpZiAod2hlbmNlID09IEZST01fTUVSR0UpIHsKKwkJc3RydWN0IHN0cmJ1ZiBtID0gU1RSQlVGX0lOSVQ7CisJCUZJTEUgKmZwOworCQlpbnQgYWxsb3dfZmFzdF9mb3J3YXJkID0gMTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICoqcHB0ciA9ICZwYXJlbnRzOworCisJCWlmICghcmVmbG9nX21zZykKKwkJCXJlZmxvZ19tc2cgPSAiY29tbWl0IChtZXJnZSkiOworCQlwcHRyID0gY29tbWl0X2xpc3RfYXBwZW5kKGN1cnJlbnRfaGVhZCwgcHB0cik7CisJCWZwID0geGZvcGVuKGdpdF9wYXRoX21lcmdlX2hlYWQodGhlX3JlcG9zaXRvcnkpLCAiciIpOworCQl3aGlsZSAoc3RyYnVmX2dldGxpbmVfbGYoJm0sIGZwKSAhPSBFT0YpIHsKKwkJCXN0cnVjdCBjb21taXQgKnBhcmVudDsKKworCQkJcGFyZW50ID0gZ2V0X21lcmdlX3BhcmVudChtLmJ1Zik7CisJCQlpZiAoIXBhcmVudCkKKwkJCQlkaWUoXygiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIpLCBtLmJ1Zik7CisJCQlwcHRyID0gY29tbWl0X2xpc3RfYXBwZW5kKHBhcmVudCwgcHB0cik7CisJCX0KKwkJZmNsb3NlKGZwKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm0pOworCQlpZiAoIXN0YXQoZ2l0X3BhdGhfbWVyZ2VfbW9kZSh0aGVfcmVwb3NpdG9yeSksICZzdGF0YnVmKSkgeworCQkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBnaXRfcGF0aF9tZXJnZV9tb2RlKHRoZV9yZXBvc2l0b3J5KSwgMCkgPCAwKQorCQkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIikpOworCQkJaWYgKCFzdHJjbXAoc2IuYnVmLCAibm8tZmYiKSkKKwkJCQlhbGxvd19mYXN0X2ZvcndhcmQgPSAwOworCQl9CisJCWlmIChhbGxvd19mYXN0X2ZvcndhcmQpCisJCQlyZWR1Y2VfaGVhZHNfcmVwbGFjZSgmcGFyZW50cyk7CisJfSBlbHNlIHsKKwkJaWYgKCFyZWZsb2dfbXNnKQorCQkJcmVmbG9nX21zZyA9IGlzX2Zyb21fY2hlcnJ5X3BpY2sod2hlbmNlKQorCQkJCQk/ICJjb21taXQgKGNoZXJyeS1waWNrKSIKKwkJCQkJOiBpc19mcm9tX3JlYmFzZSh3aGVuY2UpCisJCQkJCT8gImNvbW1pdCAocmViYXNlKSIKKwkJCQkJOiAiY29tbWl0IjsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGN1cnJlbnRfaGVhZCwgJnBhcmVudHMpOworCX0KKworCS8qIEZpbmFsbHksIGdldCB0aGUgY29tbWl0IG1lc3NhZ2UgKi8KKwlzdHJidWZfcmVzZXQoJnNiKTsKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIGdpdF9wYXRoX2NvbW1pdF9lZGl0bXNnKCksIDApIDwgMCkgeworCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJcm9sbGJhY2tfaW5kZXhfZmlsZXMoKTsKKwkJZGllKF8oImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIpLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCX0KKworCWNsZWFudXBfbWVzc2FnZSgmc2IsIGNsZWFudXBfbW9kZSwgdmVyYm9zZSk7CisKKwlpZiAobWVzc2FnZV9pc19lbXB0eSgmc2IsIGNsZWFudXBfbW9kZSkgJiYgIWFsbG93X2VtcHR5X21lc3NhZ2UpIHsKKwkJcm9sbGJhY2tfaW5kZXhfZmlsZXMoKTsKKwkJZnByaW50ZihzdGRlcnIsIF8oIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iKSk7CisJCWV4aXQoMSk7CisJfQorCWlmICh0ZW1wbGF0ZV91bnRvdWNoZWQoJnNiLCB0ZW1wbGF0ZV9maWxlLCBjbGVhbnVwX21vZGUpICYmICFhbGxvd19lbXB0eV9tZXNzYWdlKSB7CisJCXJvbGxiYWNrX2luZGV4X2ZpbGVzKCk7CisJCWZwcmludGYoc3RkZXJyLCBfKCJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iKSk7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKGFtZW5kKSB7CisJCWNvbnN0IGNoYXIgKmV4Y2x1ZGVfZ3Bnc2lnWzNdID0geyAiZ3Bnc2lnIiwgImdwZ3NpZy1zaGEyNTYiLCBOVUxMIH07CisJCWV4dHJhID0gcmVhZF9jb21taXRfZXh0cmFfaGVhZGVycyhjdXJyZW50X2hlYWQsIGV4Y2x1ZGVfZ3Bnc2lnKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqKnRhaWwgPSAmZXh0cmE7CisJCWFwcGVuZF9tZXJnZV90YWdfaGVhZGVycyhwYXJlbnRzLCAmdGFpbCk7CisJfQorCisJaWYgKGNvbW1pdF90cmVlX2V4dGVuZGVkKHNiLmJ1Ziwgc2IubGVuLCAmYWN0aXZlX2NhY2hlX3RyZWUtPm9pZCwKKwkJCQkgcGFyZW50cywgJm9pZCwgYXV0aG9yX2lkZW50LmJ1Ziwgc2lnbl9jb21taXQsCisJCQkJIGV4dHJhKSkgeworCQlyb2xsYmFja19pbmRleF9maWxlcygpOworCQlkaWUoXygiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiKSk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZhdXRob3JfaWRlbnQpOworCWZyZWVfY29tbWl0X2V4dHJhX2hlYWRlcnMoZXh0cmEpOworCisJaWYgKHVwZGF0ZV9oZWFkX3dpdGhfcmVmbG9nKGN1cnJlbnRfaGVhZCwgJm9pZCwgcmVmbG9nX21zZywgJnNiLAorCQkJCSAgICAmZXJyKSkgeworCQlyb2xsYmFja19pbmRleF9maWxlcygpOworCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJfQorCisJc2VxdWVuY2VyX3Bvc3RfY29tbWl0X2NsZWFudXAodGhlX3JlcG9zaXRvcnksIDApOworCXVubGluayhnaXRfcGF0aF9tZXJnZV9oZWFkKHRoZV9yZXBvc2l0b3J5KSk7CisJdW5saW5rKGdpdF9wYXRoX21lcmdlX21zZyh0aGVfcmVwb3NpdG9yeSkpOworCXVubGluayhnaXRfcGF0aF9tZXJnZV9tb2RlKHRoZV9yZXBvc2l0b3J5KSk7CisJdW5saW5rKGdpdF9wYXRoX3NxdWFzaF9tc2codGhlX3JlcG9zaXRvcnkpKTsKKworCWlmIChjb21taXRfaW5kZXhfZmlsZXMoKSkKKwkJZGllKF8oInJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorCQkgICAgICAibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBhbmQgcXVvdGEgaXNcbiIKKwkJICAgICAgIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIHRvIHJlY292ZXIuIikpOworCisJZ2l0X3Rlc3Rfd3JpdGVfY29tbWl0X2dyYXBoX29yX2RpZSgpOworCisJcmVwb19yZXJlcmUodGhlX3JlcG9zaXRvcnksIDApOworCXJ1bl9hdXRvX2djKHF1aWV0KTsKKwlydW5fY29tbWl0X2hvb2sodXNlX2VkaXRvciwgZ2V0X2luZGV4X2ZpbGUoKSwgInBvc3QtY29tbWl0IiwgTlVMTCk7CisJaWYgKGFtZW5kICYmICFub19wb3N0X3Jld3JpdGUpIHsKKwkJY29tbWl0X3Bvc3RfcmV3cml0ZSh0aGVfcmVwb3NpdG9yeSwgY3VycmVudF9oZWFkLCAmb2lkKTsKKwl9CisJaWYgKCFxdWlldCkgeworCQl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCisJCWlmICghY3VycmVudF9oZWFkKQorCQkJZmxhZ3MgfD0gU1VNTUFSWV9JTklUSUFMX0NPTU1JVDsKKwkJaWYgKGF1dGhvcl9kYXRlX2lzX2ludGVyZXN0aW5nKCkpCisJCQlmbGFncyB8PSBTVU1NQVJZX1NIT1dfQVVUSE9SX0RBVEU7CisJCXByaW50X2NvbW1pdF9zdW1tYXJ5KHRoZV9yZXBvc2l0b3J5LCBwcmVmaXgsCisJCQkJICAgICAmb2lkLCBmbGFncyk7CisJfQorCisJYXBwbHlfYXV0b3N0YXNoKGdpdF9wYXRoX21lcmdlX2F1dG9zdGFzaCh0aGVfcmVwb3NpdG9yeSkpOworCisJVU5MRUFLKGVycik7CisJVU5MRUFLKHNiKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29uZmlnLmMgYi9idWlsdGluL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNGFlZjYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NvbmZpZy5jCkBAIC0wLDAgKzEsODk4IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidXJsbWF0Y2guaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgIndvcmt0cmVlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBidWlsdGluX2NvbmZpZ191c2FnZVtdID0geworCU5fKCJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNoYXIgKmtleTsKK3N0YXRpYyByZWdleF90ICprZXlfcmVnZXhwOworc3RhdGljIHJlZ2V4X3QgKnJlZ2V4cDsKK3N0YXRpYyBpbnQgc2hvd19rZXlzOworc3RhdGljIGludCBvbWl0X3ZhbHVlczsKK3N0YXRpYyBpbnQgdXNlX2tleV9yZWdleHA7CitzdGF0aWMgaW50IGRvX2FsbDsKK3N0YXRpYyBpbnQgZG9fbm90X21hdGNoOworc3RhdGljIGNoYXIgZGVsaW0gPSAnPSc7CitzdGF0aWMgY2hhciBrZXlfZGVsaW0gPSAnICc7CitzdGF0aWMgY2hhciB0ZXJtID0gJ1xuJzsKKworc3RhdGljIGludCB1c2VfZ2xvYmFsX2NvbmZpZywgdXNlX3N5c3RlbV9jb25maWcsIHVzZV9sb2NhbF9jb25maWc7CitzdGF0aWMgaW50IHVzZV93b3JrdHJlZV9jb25maWc7CitzdGF0aWMgc3RydWN0IGdpdF9jb25maWdfc291cmNlIGdpdmVuX2NvbmZpZ19zb3VyY2U7CitzdGF0aWMgaW50IGFjdGlvbnMsIHR5cGU7CitzdGF0aWMgY2hhciAqZGVmYXVsdF92YWx1ZTsKK3N0YXRpYyBpbnQgZW5kX251bDsKK3N0YXRpYyBpbnQgcmVzcGVjdF9pbmNsdWRlc19vcHQgPSAtMTsKK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX29wdGlvbnMgY29uZmlnX29wdGlvbnM7CitzdGF0aWMgaW50IHNob3dfb3JpZ2luOworc3RhdGljIGludCBzaG93X3Njb3BlOworCisjZGVmaW5lIEFDVElPTl9HRVQgKDE8PDApCisjZGVmaW5lIEFDVElPTl9HRVRfQUxMICgxPDwxKQorI2RlZmluZSBBQ1RJT05fR0VUX1JFR0VYUCAoMTw8MikKKyNkZWZpbmUgQUNUSU9OX1JFUExBQ0VfQUxMICgxPDwzKQorI2RlZmluZSBBQ1RJT05fQUREICgxPDw0KQorI2RlZmluZSBBQ1RJT05fVU5TRVQgKDE8PDUpCisjZGVmaW5lIEFDVElPTl9VTlNFVF9BTEwgKDE8PDYpCisjZGVmaW5lIEFDVElPTl9SRU5BTUVfU0VDVElPTiAoMTw8NykKKyNkZWZpbmUgQUNUSU9OX1JFTU9WRV9TRUNUSU9OICgxPDw4KQorI2RlZmluZSBBQ1RJT05fTElTVCAoMTw8OSkKKyNkZWZpbmUgQUNUSU9OX0VESVQgKDE8PDEwKQorI2RlZmluZSBBQ1RJT05fU0VUICgxPDwxMSkKKyNkZWZpbmUgQUNUSU9OX1NFVF9BTEwgKDE8PDEyKQorI2RlZmluZSBBQ1RJT05fR0VUX0NPTE9SICgxPDwxMykKKyNkZWZpbmUgQUNUSU9OX0dFVF9DT0xPUkJPT0wgKDE8PDE0KQorI2RlZmluZSBBQ1RJT05fR0VUX1VSTE1BVENIICgxPDwxNSkKKworLyoKKyAqIFRoZSBhY3Rpb25zICJBQ1RJT05fTElTVCB8IEFDVElPTl9HRVRfKiIgd2hpY2ggbWF5IHByb2R1Y2UgbW9yZSB0aGFuCisgKiBvbmUgbGluZSBvZiBvdXRwdXQgYW5kIHdoaWNoIHNob3VsZCB0aGVyZWZvcmUgYmUgcGFnZWQuCisgKi8KKyNkZWZpbmUgUEFHSU5HX0FDVElPTlMgKEFDVElPTl9MSVNUIHwgQUNUSU9OX0dFVF9BTEwgfCBcCisJCQlBQ1RJT05fR0VUX1JFR0VYUCB8IEFDVElPTl9HRVRfVVJMTUFUQ0gpCisKKyNkZWZpbmUgVFlQRV9CT09MCQkxCisjZGVmaW5lIFRZUEVfSU5UCQkyCisjZGVmaW5lIFRZUEVfQk9PTF9PUl9JTlQJMworI2RlZmluZSBUWVBFX1BBVEgJCTQKKyNkZWZpbmUgVFlQRV9FWFBJUllfREFURQk1CisjZGVmaW5lIFRZUEVfQ09MT1IJCTYKKworI2RlZmluZSBPUFRfQ0FMTEJBQ0tfVkFMVUUocywgbCwgdiwgaCwgaSkgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgKHYpLCBOVUxMLCAoaCksIFBBUlNFX09QVF9OT0FSRyB8IFwKKwlQQVJTRV9PUFRfTk9ORUcsIG9wdGlvbl9wYXJzZV90eXBlLCAoaSkgfQorCitzdGF0aWMgTk9SRVRVUk4gdm9pZCB1c2FnZV9idWlsdGluX2NvbmZpZyh2b2lkKTsKKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfdHlwZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICAgaW50IHVuc2V0KQoreworCWludCBuZXdfdHlwZSwgKnRvX3R5cGU7CisKKwlpZiAodW5zZXQpIHsKKwkJKigoaW50ICopIG9wdC0+dmFsdWUpID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBUbyBzdXBwb3J0ICctLTx0eXBlPicgc3R5bGUgZmxhZ3MsIGJlZ2luIHdpdGggbmV3X3R5cGUgZXF1YWwgdG8KKwkgKiBvcHQtPmRlZnZhbC4KKwkgKi8KKwluZXdfdHlwZSA9IG9wdC0+ZGVmdmFsOworCWlmICghbmV3X3R5cGUpIHsKKwkJaWYgKCFzdHJjbXAoYXJnLCAiYm9vbCIpKQorCQkJbmV3X3R5cGUgPSBUWVBFX0JPT0w7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiaW50IikpCisJCQluZXdfdHlwZSA9IFRZUEVfSU5UOworCQllbHNlIGlmICghc3RyY21wKGFyZywgImJvb2wtb3ItaW50IikpCisJCQluZXdfdHlwZSA9IFRZUEVfQk9PTF9PUl9JTlQ7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAicGF0aCIpKQorCQkJbmV3X3R5cGUgPSBUWVBFX1BBVEg7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZXhwaXJ5LWRhdGUiKSkKKwkJCW5ld190eXBlID0gVFlQRV9FWFBJUllfREFURTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJjb2xvciIpKQorCQkJbmV3X3R5cGUgPSBUWVBFX0NPTE9SOworCQllbHNlCisJCQlkaWUoXygidW5yZWNvZ25pemVkIC0tdHlwZSBhcmd1bWVudCwgJXMiKSwgYXJnKTsKKwl9CisKKwl0b190eXBlID0gb3B0LT52YWx1ZTsKKwlpZiAoKnRvX3R5cGUgJiYgKnRvX3R5cGUgIT0gbmV3X3R5cGUpIHsKKwkJLyoKKwkJICogQ29tcGxhaW4gd2hlbiB0aGVyZSBpcyBhIG5ldyB0eXBlIG5vdCBlcXVhbCB0byB0aGUgb2xkIHR5cGUuCisJCSAqIFRoaXMgYWxsb3dzIGZvciBjb21iaW5hdGlvbnMgbGlrZSAnLS1pbnQgLS10eXBlPWludCcgYW5kCisJCSAqICctLXR5cGU9aW50IC0tdHlwZT1pbnQnLCBidXQgZGlzYWxsb3dzIG9uZXMgbGlrZSAnLS10eXBlPWJvb2wKKwkJICogLS1pbnQnIGFuZCAnLS10eXBlPWJvb2wKKwkJICogLS10eXBlPWludCcuCisJCSAqLworCQllcnJvcihfKCJvbmx5IG9uZSB0eXBlIGF0IGEgdGltZSIpKTsKKwkJdXNhZ2VfYnVpbHRpbl9jb25maWcoKTsKKwl9CisJKnRvX3R5cGUgPSBuZXdfdHlwZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2NvbmZpZ19vcHRpb25zW10gPSB7CisJT1BUX0dST1VQKE5fKCJDb25maWcgZmlsZSBsb2NhdGlvbiIpKSwKKwlPUFRfQk9PTCgwLCAiZ2xvYmFsIiwgJnVzZV9nbG9iYWxfY29uZmlnLCBOXygidXNlIGdsb2JhbCBjb25maWcgZmlsZSIpKSwKKwlPUFRfQk9PTCgwLCAic3lzdGVtIiwgJnVzZV9zeXN0ZW1fY29uZmlnLCBOXygidXNlIHN5c3RlbSBjb25maWcgZmlsZSIpKSwKKwlPUFRfQk9PTCgwLCAibG9jYWwiLCAmdXNlX2xvY2FsX2NvbmZpZywgTl8oInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIikpLAorCU9QVF9CT09MKDAsICJ3b3JrdHJlZSIsICZ1c2Vfd29ya3RyZWVfY29uZmlnLCBOXygidXNlIHBlci13b3JrdHJlZSBjb25maWcgZmlsZSIpKSwKKwlPUFRfU1RSSU5HKCdmJywgImZpbGUiLCAmZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLCBOXygiZmlsZSIpLCBOXygidXNlIGdpdmVuIGNvbmZpZyBmaWxlIikpLAorCU9QVF9TVFJJTkcoMCwgImJsb2IiLCAmZ2l2ZW5fY29uZmlnX3NvdXJjZS5ibG9iLCBOXygiYmxvYi1pZCIpLCBOXygicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIpKSwKKwlPUFRfR1JPVVAoTl8oIkFjdGlvbiIpKSwKKwlPUFRfQklUKDAsICJnZXQiLCAmYWN0aW9ucywgTl8oImdldCB2YWx1ZTogbmFtZSBbdmFsdWUtcmVnZXhdIiksIEFDVElPTl9HRVQpLAorCU9QVF9CSVQoMCwgImdldC1hbGwiLCAmYWN0aW9ucywgTl8oImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIpLCBBQ1RJT05fR0VUX0FMTCksCisJT1BUX0JJVCgwLCAiZ2V0LXJlZ2V4cCIsICZhY3Rpb25zLCBOXygiZ2V0IHZhbHVlcyBmb3IgcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iKSwgQUNUSU9OX0dFVF9SRUdFWFApLAorCU9QVF9CSVQoMCwgImdldC11cmxtYXRjaCIsICZhY3Rpb25zLCBOXygiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIpLCBBQ1RJT05fR0VUX1VSTE1BVENIKSwKKwlPUFRfQklUKDAsICJyZXBsYWNlLWFsbCIsICZhY3Rpb25zLCBOXygicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iKSwgQUNUSU9OX1JFUExBQ0VfQUxMKSwKKwlPUFRfQklUKDAsICJhZGQiLCAmYWN0aW9ucywgTl8oImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIpLCBBQ1RJT05fQUREKSwKKwlPUFRfQklUKDAsICJ1bnNldCIsICZhY3Rpb25zLCBOXygicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIpLCBBQ1RJT05fVU5TRVQpLAorCU9QVF9CSVQoMCwgInVuc2V0LWFsbCIsICZhY3Rpb25zLCBOXygicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iKSwgQUNUSU9OX1VOU0VUX0FMTCksCisJT1BUX0JJVCgwLCAicmVuYW1lLXNlY3Rpb24iLCAmYWN0aW9ucywgTl8oInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIpLCBBQ1RJT05fUkVOQU1FX1NFQ1RJT04pLAorCU9QVF9CSVQoMCwgInJlbW92ZS1zZWN0aW9uIiwgJmFjdGlvbnMsIE5fKCJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIiksIEFDVElPTl9SRU1PVkVfU0VDVElPTiksCisJT1BUX0JJVCgnbCcsICJsaXN0IiwgJmFjdGlvbnMsIE5fKCJsaXN0IGFsbCIpLCBBQ1RJT05fTElTVCksCisJT1BUX0JJVCgnZScsICJlZGl0IiwgJmFjdGlvbnMsIE5fKCJvcGVuIGFuIGVkaXRvciIpLCBBQ1RJT05fRURJVCksCisJT1BUX0JJVCgwLCAiZ2V0LWNvbG9yIiwgJmFjdGlvbnMsIE5fKCJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIpLCBBQ1RJT05fR0VUX0NPTE9SKSwKKwlPUFRfQklUKDAsICJnZXQtY29sb3Jib29sIiwgJmFjdGlvbnMsIE5fKCJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIpLCBBQ1RJT05fR0VUX0NPTE9SQk9PTCksCisJT1BUX0dST1VQKE5fKCJUeXBlIikpLAorCU9QVF9DQUxMQkFDSygndCcsICJ0eXBlIiwgJnR5cGUsICIiLCBOXygidmFsdWUgaXMgZ2l2ZW4gdGhpcyB0eXBlIiksIG9wdGlvbl9wYXJzZV90eXBlKSwKKwlPUFRfQ0FMTEJBQ0tfVkFMVUUoMCwgImJvb2wiLCAmdHlwZSwgTl8oInZhbHVlIGlzIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIpLCBUWVBFX0JPT0wpLAorCU9QVF9DQUxMQkFDS19WQUxVRSgwLCAiaW50IiwgJnR5cGUsIE5fKCJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIpLCBUWVBFX0lOVCksCisJT1BUX0NBTExCQUNLX1ZBTFVFKDAsICJib29sLW9yLWludCIsICZ0eXBlLCBOXygidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IiksIFRZUEVfQk9PTF9PUl9JTlQpLAorCU9QVF9DQUxMQkFDS19WQUxVRSgwLCAicGF0aCIsICZ0eXBlLCBOXygidmFsdWUgaXMgYSBwYXRoIChmaWxlIG9yIGRpcmVjdG9yeSBuYW1lKSIpLCBUWVBFX1BBVEgpLAorCU9QVF9DQUxMQkFDS19WQUxVRSgwLCAiZXhwaXJ5LWRhdGUiLCAmdHlwZSwgTl8oInZhbHVlIGlzIGFuIGV4cGlyeSBkYXRlIiksIFRZUEVfRVhQSVJZX0RBVEUpLAorCU9QVF9HUk9VUChOXygiT3RoZXIiKSksCisJT1BUX0JPT0woJ3onLCAibnVsbCIsICZlbmRfbnVsLCBOXygidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIikpLAorCU9QVF9CT09MKDAsICJuYW1lLW9ubHkiLCAmb21pdF92YWx1ZXMsIE5fKCJzaG93IHZhcmlhYmxlIG5hbWVzIG9ubHkiKSksCisJT1BUX0JPT0woMCwgImluY2x1ZGVzIiwgJnJlc3BlY3RfaW5jbHVkZXNfb3B0LCBOXygicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIikpLAorCU9QVF9CT09MKDAsICJzaG93LW9yaWdpbiIsICZzaG93X29yaWdpbiwgTl8oInNob3cgb3JpZ2luIG9mIGNvbmZpZyAoZmlsZSwgc3RhbmRhcmQgaW5wdXQsIGJsb2IsIGNvbW1hbmQgbGluZSkiKSksCisJT1BUX0JPT0woMCwgInNob3ctc2NvcGUiLCAmc2hvd19zY29wZSwgTl8oInNob3cgc2NvcGUgb2YgY29uZmlnICh3b3JrdHJlZSwgbG9jYWwsIGdsb2JhbCwgc3lzdGVtLCBjb21tYW5kKSIpKSwKKwlPUFRfU1RSSU5HKDAsICJkZWZhdWx0IiwgJmRlZmF1bHRfdmFsdWUsIE5fKCJ2YWx1ZSIpLCBOXygid2l0aCAtLWdldCwgdXNlIGRlZmF1bHQgdmFsdWUgd2hlbiBtaXNzaW5nIGVudHJ5IikpLAorCU9QVF9FTkQoKSwKK307CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIHVzYWdlX2J1aWx0aW5fY29uZmlnKHZvaWQpCit7CisJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fY29uZmlnX3VzYWdlLCBidWlsdGluX2NvbmZpZ19vcHRpb25zKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfYXJnYyhpbnQgYXJnYywgaW50IG1pbiwgaW50IG1heCkKK3sKKwlpZiAoYXJnYyA+PSBtaW4gJiYgYXJnYyA8PSBtYXgpCisJCXJldHVybjsKKwlpZiAobWluID09IG1heCkKKwkJZXJyb3IoXygid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlICVkIiksIG1pbik7CisJZWxzZQorCQllcnJvcihfKCJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgZnJvbSAlZCB0byAlZCIpLAorCQkgICAgICBtaW4sIG1heCk7CisJdXNhZ2VfYnVpbHRpbl9jb25maWcoKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19jb25maWdfb3JpZ2luKHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwljb25zdCBjaGFyIHRlcm0gPSBlbmRfbnVsID8gJ1wwJyA6ICdcdCc7CisKKwlzdHJidWZfYWRkc3RyKGJ1ZiwgY3VycmVudF9jb25maWdfb3JpZ2luX3R5cGUoKSk7CisJc3RyYnVmX2FkZGNoKGJ1ZiwgJzonKTsKKwlpZiAoZW5kX251bCkKKwkJc3RyYnVmX2FkZHN0cihidWYsIGN1cnJlbnRfY29uZmlnX25hbWUoKSk7CisJZWxzZQorCQlxdW90ZV9jX3N0eWxlKGN1cnJlbnRfY29uZmlnX25hbWUoKSwgYnVmLCBOVUxMLCAwKTsKKwlzdHJidWZfYWRkY2goYnVmLCB0ZXJtKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19jb25maWdfc2NvcGUoc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWNvbnN0IGNoYXIgdGVybSA9IGVuZF9udWwgPyAnXDAnIDogJ1x0JzsKKwljb25zdCBjaGFyICpzY29wZSA9IGNvbmZpZ19zY29wZV9uYW1lKGN1cnJlbnRfY29uZmlnX3Njb3BlKCkpOworCisJc3RyYnVmX2FkZHN0cihidWYsIE5fKHNjb3BlKSk7CisJc3RyYnVmX2FkZGNoKGJ1ZiwgdGVybSk7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19hbGxfY29uZmlnKGNvbnN0IGNoYXIgKmtleV8sIGNvbnN0IGNoYXIgKnZhbHVlXywgdm9pZCAqY2IpCit7CisJaWYgKHNob3dfb3JpZ2luIHx8IHNob3dfc2NvcGUpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKHNob3dfc2NvcGUpCisJCQlzaG93X2NvbmZpZ19zY29wZSgmYnVmKTsKKwkJaWYgKHNob3dfb3JpZ2luKQorCQkJc2hvd19jb25maWdfb3JpZ2luKCZidWYpOworCQkvKiBVc2UgZndyaXRlIGFzICJidWYiIGNhbiBjb250YWluIFwwJ3MgaWYgImVuZF9udWxsIiBpcyBzZXQuICovCisJCWZ3cml0ZShidWYuYnVmLCAxLCBidWYubGVuLCBzdGRvdXQpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9CisJaWYgKCFvbWl0X3ZhbHVlcyAmJiB2YWx1ZV8pCisJCXByaW50ZigiJXMlYyVzJWMiLCBrZXlfLCBkZWxpbSwgdmFsdWVfLCB0ZXJtKTsKKwllbHNlCisJCXByaW50ZigiJXMlYyIsIGtleV8sIHRlcm0pOworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc3RyYnVmX2xpc3QgeworCXN0cnVjdCBzdHJidWYgKml0ZW1zOworCWludCBucjsKKwlpbnQgYWxsb2M7Cit9OworCitzdGF0aWMgaW50IGZvcm1hdF9jb25maWcoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICprZXlfLCBjb25zdCBjaGFyICp2YWx1ZV8pCit7CisJaWYgKHNob3dfc2NvcGUpCisJCXNob3dfY29uZmlnX3Njb3BlKGJ1Zik7CisJaWYgKHNob3dfb3JpZ2luKQorCQlzaG93X2NvbmZpZ19vcmlnaW4oYnVmKTsKKwlpZiAoc2hvd19rZXlzKQorCQlzdHJidWZfYWRkc3RyKGJ1Ziwga2V5Xyk7CisJaWYgKCFvbWl0X3ZhbHVlcykgeworCQlpZiAoc2hvd19rZXlzKQorCQkJc3RyYnVmX2FkZGNoKGJ1Ziwga2V5X2RlbGltKTsKKworCQlpZiAodHlwZSA9PSBUWVBFX0lOVCkKKwkJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUiUFJJZDY0LAorCQkJCSAgICBnaXRfY29uZmlnX2ludDY0KGtleV8sIHZhbHVlXyA/IHZhbHVlXyA6ICIiKSk7CisJCWVsc2UgaWYgKHR5cGUgPT0gVFlQRV9CT09MKQorCQkJc3RyYnVmX2FkZHN0cihidWYsIGdpdF9jb25maWdfYm9vbChrZXlfLCB2YWx1ZV8pID8KKwkJCQkgICAgICAidHJ1ZSIgOiAiZmFsc2UiKTsKKwkJZWxzZSBpZiAodHlwZSA9PSBUWVBFX0JPT0xfT1JfSU5UKSB7CisJCQlpbnQgaXNfYm9vbCwgdjsKKwkJCXYgPSBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGtleV8sIHZhbHVlXywgJmlzX2Jvb2wpOworCQkJaWYgKGlzX2Jvb2wpCisJCQkJc3RyYnVmX2FkZHN0cihidWYsIHYgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKwkJCWVsc2UKKwkJCQlzdHJidWZfYWRkZihidWYsICIlZCIsIHYpOworCQl9IGVsc2UgaWYgKHR5cGUgPT0gVFlQRV9QQVRIKSB7CisJCQljb25zdCBjaGFyICp2OworCQkJaWYgKGdpdF9jb25maWdfcGF0aG5hbWUoJnYsIGtleV8sIHZhbHVlXykgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCB2KTsKKwkJCWZyZWUoKGNoYXIgKil2KTsKKwkJfSBlbHNlIGlmICh0eXBlID09IFRZUEVfRVhQSVJZX0RBVEUpIHsKKwkJCXRpbWVzdGFtcF90IHQ7CisJCQlpZiAoZ2l0X2NvbmZpZ19leHBpcnlfZGF0ZSgmdCwga2V5XywgdmFsdWVfKSA8IDApCisJCQkJcmV0dXJuIC0xOworCQkJc3RyYnVmX2FkZGYoYnVmLCAiJSJQUkl0aW1lLCB0KTsKKwkJfSBlbHNlIGlmICh0eXBlID09IFRZUEVfQ09MT1IpIHsKKwkJCWNoYXIgdltDT0xPUl9NQVhMRU5dOworCQkJaWYgKGdpdF9jb25maWdfY29sb3Iodiwga2V5XywgdmFsdWVfKSA8IDApCisJCQkJcmV0dXJuIC0xOworCQkJc3RyYnVmX2FkZHN0cihidWYsIHYpOworCQl9IGVsc2UgaWYgKHZhbHVlXykgeworCQkJc3RyYnVmX2FkZHN0cihidWYsIHZhbHVlXyk7CisJCX0gZWxzZSB7CisJCQkvKiBKdXN0IHNob3cgdGhlIGtleSBuYW1lOyBiYWNrIG91dCBkZWxpbWl0ZXIgKi8KKwkJCWlmIChzaG93X2tleXMpCisJCQkJc3RyYnVmX3NldGxlbihidWYsIGJ1Zi0+bGVuIC0gMSk7CisJCX0KKwl9CisJc3RyYnVmX2FkZGNoKGJ1ZiwgdGVybSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29sbGVjdF9jb25maWcoY29uc3QgY2hhciAqa2V5XywgY29uc3QgY2hhciAqdmFsdWVfLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3Qgc3RyYnVmX2xpc3QgKnZhbHVlcyA9IGNiOworCisJaWYgKCF1c2Vfa2V5X3JlZ2V4cCAmJiBzdHJjbXAoa2V5Xywga2V5KSkKKwkJcmV0dXJuIDA7CisJaWYgKHVzZV9rZXlfcmVnZXhwICYmIHJlZ2V4ZWMoa2V5X3JlZ2V4cCwga2V5XywgMCwgTlVMTCwgMCkpCisJCXJldHVybiAwOworCWlmIChyZWdleHAgIT0gTlVMTCAmJgorCSAgICAoZG9fbm90X21hdGNoIF4gISFyZWdleGVjKHJlZ2V4cCwgKHZhbHVlXz92YWx1ZV86IiIpLCAwLCBOVUxMLCAwKSkpCisJCXJldHVybiAwOworCisJQUxMT0NfR1JPVyh2YWx1ZXMtPml0ZW1zLCB2YWx1ZXMtPm5yICsgMSwgdmFsdWVzLT5hbGxvYyk7CisJc3RyYnVmX2luaXQoJnZhbHVlcy0+aXRlbXNbdmFsdWVzLT5ucl0sIDApOworCisJcmV0dXJuIGZvcm1hdF9jb25maWcoJnZhbHVlcy0+aXRlbXNbdmFsdWVzLT5ucisrXSwga2V5XywgdmFsdWVfKTsKK30KKworc3RhdGljIGludCBnZXRfdmFsdWUoY29uc3QgY2hhciAqa2V5XywgY29uc3QgY2hhciAqcmVnZXhfKQoreworCWludCByZXQgPSBDT05GSUdfR0VORVJJQ19FUlJPUjsKKwlzdHJ1Y3Qgc3RyYnVmX2xpc3QgdmFsdWVzID0ge05VTEx9OworCWludCBpOworCisJaWYgKHVzZV9rZXlfcmVnZXhwKSB7CisJCWNoYXIgKnRsOworCisJCS8qCisJCSAqIE5FRURTV09SSzogdGhpcyBuYWl2ZSBwYXR0ZXJuIGxvd2VyY2FzaW5nIG9idmlvdXNseSBkb2VzIG5vdAorCQkgKiB3b3JrIGZvciBtb3JlIGNvbXBsZXggcGF0dGVybnMgbGlrZSAiXlteLl0qRm9vLipiYXIiLgorCQkgKiBQZXJoYXBzIHdlIHNob3VsZCBkZXByZWNhdGUgdGhpcyBhbHRvZ2V0aGVyIHNvbWVkYXkuCisJCSAqLworCisJCWtleSA9IHhzdHJkdXAoa2V5Xyk7CisJCWZvciAodGwgPSBrZXkgKyBzdHJsZW4oa2V5KSAtIDE7CisJCSAgICAgdGwgPj0ga2V5ICYmICp0bCAhPSAnLic7CisJCSAgICAgdGwtLSkKKwkJCSp0bCA9IHRvbG93ZXIoKnRsKTsKKwkJZm9yICh0bCA9IGtleTsgKnRsICYmICp0bCAhPSAnLic7IHRsKyspCisJCQkqdGwgPSB0b2xvd2VyKCp0bCk7CisKKwkJa2V5X3JlZ2V4cCA9IChyZWdleF90Kil4bWFsbG9jKHNpemVvZihyZWdleF90KSk7CisJCWlmIChyZWdjb21wKGtleV9yZWdleHAsIGtleSwgUkVHX0VYVEVOREVEKSkgeworCQkJZXJyb3IoXygiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiKSwga2V5Xyk7CisJCQlGUkVFX0FORF9OVUxMKGtleV9yZWdleHApOworCQkJcmV0ID0gQ09ORklHX0lOVkFMSURfUEFUVEVSTjsKKwkJCWdvdG8gZnJlZV9zdHJpbmdzOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGdpdF9jb25maWdfcGFyc2Vfa2V5KGtleV8sICZrZXksIE5VTEwpKSB7CisJCQlyZXQgPSBDT05GSUdfSU5WQUxJRF9LRVk7CisJCQlnb3RvIGZyZWVfc3RyaW5nczsKKwkJfQorCX0KKworCWlmIChyZWdleF8pIHsKKwkJaWYgKHJlZ2V4X1swXSA9PSAnIScpIHsKKwkJCWRvX25vdF9tYXRjaCA9IDE7CisJCQlyZWdleF8rKzsKKwkJfQorCisJCXJlZ2V4cCA9IChyZWdleF90Kil4bWFsbG9jKHNpemVvZihyZWdleF90KSk7CisJCWlmIChyZWdjb21wKHJlZ2V4cCwgcmVnZXhfLCBSRUdfRVhURU5ERUQpKSB7CisJCQllcnJvcihfKCJpbnZhbGlkIHBhdHRlcm46ICVzIiksIHJlZ2V4Xyk7CisJCQlGUkVFX0FORF9OVUxMKHJlZ2V4cCk7CisJCQlyZXQgPSBDT05GSUdfSU5WQUxJRF9QQVRURVJOOworCQkJZ290byBmcmVlX3N0cmluZ3M7CisJCX0KKwl9CisKKwljb25maWdfd2l0aF9vcHRpb25zKGNvbGxlY3RfY29uZmlnLCAmdmFsdWVzLAorCQkJICAgICZnaXZlbl9jb25maWdfc291cmNlLCAmY29uZmlnX29wdGlvbnMpOworCisJaWYgKCF2YWx1ZXMubnIgJiYgZGVmYXVsdF92YWx1ZSkgeworCQlzdHJ1Y3Qgc3RyYnVmICppdGVtOworCQlBTExPQ19HUk9XKHZhbHVlcy5pdGVtcywgdmFsdWVzLm5yICsgMSwgdmFsdWVzLmFsbG9jKTsKKwkJaXRlbSA9ICZ2YWx1ZXMuaXRlbXNbdmFsdWVzLm5yKytdOworCQlzdHJidWZfaW5pdChpdGVtLCAwKTsKKwkJaWYgKGZvcm1hdF9jb25maWcoaXRlbSwga2V5XywgZGVmYXVsdF92YWx1ZSkgPCAwKQorCQkJZGllKF8oImZhaWxlZCB0byBmb3JtYXQgZGVmYXVsdCBjb25maWcgdmFsdWU6ICVzIiksCisJCQkJZGVmYXVsdF92YWx1ZSk7CisJfQorCisJcmV0ID0gIXZhbHVlcy5ucjsKKworCWZvciAoaSA9IDA7IGkgPCB2YWx1ZXMubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyYnVmICpidWYgPSB2YWx1ZXMuaXRlbXMgKyBpOworCQlpZiAoZG9fYWxsIHx8IGkgPT0gdmFsdWVzLm5yIC0gMSkKKwkJCWZ3cml0ZShidWYtPmJ1ZiwgMSwgYnVmLT5sZW4sIHN0ZG91dCk7CisJCXN0cmJ1Zl9yZWxlYXNlKGJ1Zik7CisJfQorCWZyZWUodmFsdWVzLml0ZW1zKTsKKworZnJlZV9zdHJpbmdzOgorCWZyZWUoa2V5KTsKKwlpZiAoa2V5X3JlZ2V4cCkgeworCQlyZWdmcmVlKGtleV9yZWdleHApOworCQlmcmVlKGtleV9yZWdleHApOworCX0KKwlpZiAocmVnZXhwKSB7CisJCXJlZ2ZyZWUocmVnZXhwKTsKKwkJZnJlZShyZWdleHApOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICpub3JtYWxpemVfdmFsdWUoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICh0eXBlID09IDAgfHwgdHlwZSA9PSBUWVBFX1BBVEggfHwgdHlwZSA9PSBUWVBFX0VYUElSWV9EQVRFKQorCQkvKgorCQkgKiBXZSBkb24ndCBkbyBub3JtYWxpemF0aW9uIGZvciBUWVBFX1BBVEggaGVyZTogSWYKKwkJICogdGhlIHBhdGggaXMgbGlrZSB+L2Zvb2Jhci8sIHdlIHByZWZlciB0byBzdG9yZQorCQkgKiAifi9mb29iYXIvIiBpbiB0aGUgY29uZmlnIGZpbGUsIGFuZCB0byBleHBhbmQgdGhlIH4KKwkJICogd2hlbiByZXRyaWV2aW5nIHRoZSB2YWx1ZS4KKwkJICogQWxzbyBkb24ndCBkbyBub3JtYWxpemF0aW9uIGZvciBleHBpcnkgZGF0ZXMuCisJCSAqLworCQlyZXR1cm4geHN0cmR1cCh2YWx1ZSk7CisJaWYgKHR5cGUgPT0gVFlQRV9JTlQpCisJCXJldHVybiB4c3RyZm10KCIlIlBSSWQ2NCwgZ2l0X2NvbmZpZ19pbnQ2NChrZXksIHZhbHVlKSk7CisJaWYgKHR5cGUgPT0gVFlQRV9CT09MKQorCQlyZXR1cm4geHN0cmR1cChnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWx1ZSkgPyAgInRydWUiIDogImZhbHNlIik7CisJaWYgKHR5cGUgPT0gVFlQRV9CT09MX09SX0lOVCkgeworCQlpbnQgaXNfYm9vbCwgdjsKKwkJdiA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmlzX2Jvb2wpOworCQlpZiAoIWlzX2Jvb2wpCisJCQlyZXR1cm4geHN0cmZtdCgiJWQiLCB2KTsKKwkJZWxzZQorCQkJcmV0dXJuIHhzdHJkdXAodiA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCX0KKwlpZiAodHlwZSA9PSBUWVBFX0NPTE9SKSB7CisJCWNoYXIgdltDT0xPUl9NQVhMRU5dOworCQlpZiAoZ2l0X2NvbmZpZ19jb2xvcih2LCBrZXksIHZhbHVlKSkKKwkJCWRpZShfKCJjYW5ub3QgcGFyc2UgY29sb3IgJyVzJyIpLCB2YWx1ZSk7CisKKwkJLyoKKwkJICogVGhlIGNvbnRlbnRzIG9mIGB2YCBub3cgY29udGFpbiBhbiBBTlNJIGVzY2FwZQorCQkgKiBzZXF1ZW5jZSwgbm90IHN1aXRhYmxlIGZvciBpbmNsdWRpbmcgd2l0aGluIGEKKwkJICogY29uZmlndXJhdGlvbiBmaWxlLiBUcmVhdCB0aGUgYWJvdmUgYXMgYQorCQkgKiAic2FuaXR5LWNoZWNrIiwgYW5kIHJldHVybiB0aGUgZ2l2ZW4gdmFsdWUsIHdoaWNoIHdlCisJCSAqIGtub3cgaXMgcmVwcmVzZW50YWJsZSBhcyB2YWxpZCBjb2xvciBjb2RlLgorCQkgKi8KKwkJcmV0dXJuIHhzdHJkdXAodmFsdWUpOworCX0KKworCUJVRygiY2Fubm90IG5vcm1hbGl6ZSB0eXBlICVkIiwgdHlwZSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2NvbG9yX2ZvdW5kOworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcl9zbG90Oworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcmJvb2xfc2xvdDsKK3N0YXRpYyBjaGFyIHBhcnNlZF9jb2xvcltDT0xPUl9NQVhMRU5dOworCitzdGF0aWMgaW50IGdpdF9nZXRfY29sb3JfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgZ2V0X2NvbG9yX3Nsb3QpKSB7CisJCWlmICghdmFsdWUpCisJCQljb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlpZiAoY29sb3JfcGFyc2UodmFsdWUsIHBhcnNlZF9jb2xvcikgPCAwKQorCQkJcmV0dXJuIC0xOworCQlnZXRfY29sb3JfZm91bmQgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2V0X2NvbG9yKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqZGVmX2NvbG9yKQoreworCWdldF9jb2xvcl9zbG90ID0gdmFyOworCWdldF9jb2xvcl9mb3VuZCA9IDA7CisJcGFyc2VkX2NvbG9yWzBdID0gJ1wwJzsKKwljb25maWdfd2l0aF9vcHRpb25zKGdpdF9nZXRfY29sb3JfY29uZmlnLCBOVUxMLAorCQkJICAgICZnaXZlbl9jb25maWdfc291cmNlLCAmY29uZmlnX29wdGlvbnMpOworCisJaWYgKCFnZXRfY29sb3JfZm91bmQgJiYgZGVmX2NvbG9yKSB7CisJCWlmIChjb2xvcl9wYXJzZShkZWZfY29sb3IsIHBhcnNlZF9jb2xvcikgPCAwKQorCQkJZGllKF8oInVuYWJsZSB0byBwYXJzZSBkZWZhdWx0IGNvbG9yIHZhbHVlIikpOworCX0KKworCWZwdXRzKHBhcnNlZF9jb2xvciwgc3Rkb3V0KTsKK30KKworc3RhdGljIGludCBnZXRfY29sb3Jib29sX2ZvdW5kOworc3RhdGljIGludCBnZXRfZGlmZl9jb2xvcl9mb3VuZDsKK3N0YXRpYyBpbnQgZ2V0X2NvbG9yX3VpX2ZvdW5kOworc3RhdGljIGludCBnaXRfZ2V0X2NvbG9yYm9vbF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCBnZXRfY29sb3Jib29sX3Nsb3QpKQorCQlnZXRfY29sb3Jib29sX2ZvdW5kID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcCh2YXIsICJkaWZmLmNvbG9yIikpCisJCWdldF9kaWZmX2NvbG9yX2ZvdW5kID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcCh2YXIsICJjb2xvci51aSIpKQorCQlnZXRfY29sb3JfdWlfZm91bmQgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfY29sb3Jib29sKGNvbnN0IGNoYXIgKnZhciwgaW50IHByaW50KQoreworCWdldF9jb2xvcmJvb2xfc2xvdCA9IHZhcjsKKwlnZXRfY29sb3Jib29sX2ZvdW5kID0gLTE7CisJZ2V0X2RpZmZfY29sb3JfZm91bmQgPSAtMTsKKwlnZXRfY29sb3JfdWlfZm91bmQgPSAtMTsKKwljb25maWdfd2l0aF9vcHRpb25zKGdpdF9nZXRfY29sb3Jib29sX2NvbmZpZywgTlVMTCwKKwkJCSAgICAmZ2l2ZW5fY29uZmlnX3NvdXJjZSwgJmNvbmZpZ19vcHRpb25zKTsKKworCWlmIChnZXRfY29sb3Jib29sX2ZvdW5kIDwgMCkgeworCQlpZiAoIXN0cmNtcChnZXRfY29sb3Jib29sX3Nsb3QsICJjb2xvci5kaWZmIikpCisJCQlnZXRfY29sb3Jib29sX2ZvdW5kID0gZ2V0X2RpZmZfY29sb3JfZm91bmQ7CisJCWlmIChnZXRfY29sb3Jib29sX2ZvdW5kIDwgMCkKKwkJCWdldF9jb2xvcmJvb2xfZm91bmQgPSBnZXRfY29sb3JfdWlfZm91bmQ7CisJfQorCisJaWYgKGdldF9jb2xvcmJvb2xfZm91bmQgPCAwKQorCQkvKiBkZWZhdWx0IHZhbHVlIGlmIG5vbmUgZm91bmQgaW4gY29uZmlnICovCisJCWdldF9jb2xvcmJvb2xfZm91bmQgPSBHSVRfQ09MT1JfQVVUTzsKKworCWdldF9jb2xvcmJvb2xfZm91bmQgPSB3YW50X2NvbG9yKGdldF9jb2xvcmJvb2xfZm91bmQpOworCisJaWYgKHByaW50KSB7CisJCXByaW50ZigiJXNcbiIsIGdldF9jb2xvcmJvb2xfZm91bmQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiBnZXRfY29sb3Jib29sX2ZvdW5kID8gMCA6IDE7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3dyaXRlKHZvaWQpCit7CisJaWYgKCFnaXZlbl9jb25maWdfc291cmNlLmZpbGUgJiYgIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQorCQlkaWUoXygibm90IGluIGEgZ2l0IGRpcmVjdG9yeSIpKTsKKworCWlmIChnaXZlbl9jb25maWdfc291cmNlLnVzZV9zdGRpbikKKwkJZGllKF8oIndyaXRpbmcgdG8gc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIpKTsKKworCWlmIChnaXZlbl9jb25maWdfc291cmNlLmJsb2IpCisJCWRpZShfKCJ3cml0aW5nIGNvbmZpZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIikpOworfQorCitzdHJ1Y3QgdXJsbWF0Y2hfY3VycmVudF9jYW5kaWRhdGVfdmFsdWUgeworCWNoYXIgdmFsdWVfaXNfbnVsbDsKKwlzdHJ1Y3Qgc3RyYnVmIHZhbHVlOworfTsKKworc3RhdGljIGludCB1cmxtYXRjaF9jb2xsZWN0X2ZuKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqdmFsdWVzID0gY2I7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQodmFsdWVzLCB2YXIpOworCXN0cnVjdCB1cmxtYXRjaF9jdXJyZW50X2NhbmRpZGF0ZV92YWx1ZSAqbWF0Y2hlZCA9IGl0ZW0tPnV0aWw7CisKKwlpZiAoIW1hdGNoZWQpIHsKKwkJbWF0Y2hlZCA9IHhtYWxsb2Moc2l6ZW9mKCptYXRjaGVkKSk7CisJCXN0cmJ1Zl9pbml0KCZtYXRjaGVkLT52YWx1ZSwgMCk7CisJCWl0ZW0tPnV0aWwgPSBtYXRjaGVkOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9yZXNldCgmbWF0Y2hlZC0+dmFsdWUpOworCX0KKworCWlmICh2YWx1ZSkgeworCQlzdHJidWZfYWRkc3RyKCZtYXRjaGVkLT52YWx1ZSwgdmFsdWUpOworCQltYXRjaGVkLT52YWx1ZV9pc19udWxsID0gMDsKKwl9IGVsc2UgeworCQltYXRjaGVkLT52YWx1ZV9pc19udWxsID0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3VybG1hdGNoKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdXJsKQoreworCWludCByZXQ7CisJY2hhciAqc2VjdGlvbl90YWlsOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCB1cmxtYXRjaF9jb25maWcgY29uZmlnID0geyBTVFJJTkdfTElTVF9JTklUX0RVUCB9OworCXN0cnVjdCBzdHJpbmdfbGlzdCB2YWx1ZXMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCWNvbmZpZy5jb2xsZWN0X2ZuID0gdXJsbWF0Y2hfY29sbGVjdF9mbjsKKwljb25maWcuY2FzY2FkZV9mbiA9IE5VTEw7CisJY29uZmlnLmNiID0gJnZhbHVlczsKKworCWlmICghdXJsX25vcm1hbGl6ZSh1cmwsICZjb25maWcudXJsKSkKKwkJZGllKCIlcyIsIGNvbmZpZy51cmwuZXJyKTsKKworCWNvbmZpZy5zZWN0aW9uID0geHN0cmR1cF90b2xvd2VyKHZhcik7CisJc2VjdGlvbl90YWlsID0gc3RyY2hyKGNvbmZpZy5zZWN0aW9uLCAnLicpOworCWlmIChzZWN0aW9uX3RhaWwpIHsKKwkJKnNlY3Rpb25fdGFpbCA9ICdcMCc7CisJCWNvbmZpZy5rZXkgPSBzZWN0aW9uX3RhaWwgKyAxOworCQlzaG93X2tleXMgPSAwOworCX0gZWxzZSB7CisJCWNvbmZpZy5rZXkgPSBOVUxMOworCQlzaG93X2tleXMgPSAxOworCX0KKworCWNvbmZpZ193aXRoX29wdGlvbnModXJsbWF0Y2hfY29uZmlnX2VudHJ5LCAmY29uZmlnLAorCQkJICAgICZnaXZlbl9jb25maWdfc291cmNlLCAmY29uZmlnX29wdGlvbnMpOworCisJcmV0ID0gIXZhbHVlcy5ucjsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJnZhbHVlcykgeworCQlzdHJ1Y3QgdXJsbWF0Y2hfY3VycmVudF9jYW5kaWRhdGVfdmFsdWUgKm1hdGNoZWQgPSBpdGVtLT51dGlsOworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCWZvcm1hdF9jb25maWcoJmJ1ZiwgaXRlbS0+c3RyaW5nLAorCQkJICAgICAgbWF0Y2hlZC0+dmFsdWVfaXNfbnVsbCA/IE5VTEwgOiBtYXRjaGVkLT52YWx1ZS5idWYpOworCQlmd3JpdGUoYnVmLmJ1ZiwgMSwgYnVmLmxlbiwgc3Rkb3V0KTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwkJc3RyYnVmX3JlbGVhc2UoJm1hdGNoZWQtPnZhbHVlKTsKKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJmNvbmZpZy52YXJzLCAxKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmdmFsdWVzLCAxKTsKKwlmcmVlKGNvbmZpZy51cmwudXJsKTsKKworCWZyZWUoKHZvaWQgKiljb25maWcuc2VjdGlvbik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNoYXIgKmRlZmF1bHRfdXNlcl9jb25maWcodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZidWYsCisJCSAgICBfKCIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorCQkgICAgICAiW3VzZXJdXG4iCisJCSAgICAgICIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisJCSAgICAgICIjCW5hbWUgPSAlc1xuIgorCQkgICAgICAiIwllbWFpbCA9ICVzXG4iKSwKKwkJICAgIGlkZW50X2RlZmF1bHRfbmFtZSgpLAorCQkgICAgaWRlbnRfZGVmYXVsdF9lbWFpbCgpKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworaW50IGNtZF9jb25maWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IG5vbmdpdCA9ICFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeTsKKwljaGFyICp2YWx1ZTsKKworCWdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSA9IHhzdHJkdXBfb3JfbnVsbChnZXRlbnYoQ09ORklHX0VOVklST05NRU5UKSk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fY29uZmlnX29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fY29uZmlnX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKworCWlmICh1c2VfZ2xvYmFsX2NvbmZpZyArIHVzZV9zeXN0ZW1fY29uZmlnICsgdXNlX2xvY2FsX2NvbmZpZyArCisJICAgIHVzZV93b3JrdHJlZV9jb25maWcgKworCSAgICAhIWdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSArICEhZ2l2ZW5fY29uZmlnX3NvdXJjZS5ibG9iID4gMSkgeworCQllcnJvcihfKCJvbmx5IG9uZSBjb25maWcgZmlsZSBhdCBhIHRpbWUiKSk7CisJCXVzYWdlX2J1aWx0aW5fY29uZmlnKCk7CisJfQorCisJaWYgKHVzZV9sb2NhbF9jb25maWcgJiYgbm9uZ2l0KQorCQlkaWUoXygiLS1sb2NhbCBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IikpOworCisJaWYgKGdpdmVuX2NvbmZpZ19zb3VyY2UuYmxvYiAmJiBub25naXQpCisJCWRpZShfKCItLWJsb2IgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIpKTsKKworCWlmIChnaXZlbl9jb25maWdfc291cmNlLmZpbGUgJiYKKwkJCSFzdHJjbXAoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLCAiLSIpKSB7CisJCWdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSA9IE5VTEw7CisJCWdpdmVuX2NvbmZpZ19zb3VyY2UudXNlX3N0ZGluID0gMTsKKwkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5zY29wZSA9IENPTkZJR19TQ09QRV9DT01NQU5EOworCX0KKworCWlmICh1c2VfZ2xvYmFsX2NvbmZpZykgeworCQljaGFyICp1c2VyX2NvbmZpZyA9IGV4cGFuZF91c2VyX3BhdGgoIn4vLmdpdGNvbmZpZyIsIDApOworCQljaGFyICp4ZGdfY29uZmlnID0geGRnX2NvbmZpZ19ob21lKCJjb25maWciKTsKKworCQlpZiAoIXVzZXJfY29uZmlnKQorCQkJLyoKKwkJCSAqIEl0IGlzIHVua25vd24gaWYgSE9NRS8uZ2l0Y29uZmlnIGV4aXN0cywgc28KKwkJCSAqIHdlIGRvIG5vdCBrbm93IGlmIHdlIHNob3VsZCB3cml0ZSB0byBYREcKKwkJCSAqIGxvY2F0aW9uOyBlcnJvciBvdXQgZXZlbiBpZiBYREdfQ09ORklHX0hPTUUKKwkJCSAqIGlzIHNldCBhbmQgcG9pbnRzIGF0IGEgc2FuZSBsb2NhdGlvbi4KKwkJCSAqLworCQkJZGllKF8oIiRIT01FIG5vdCBzZXQiKSk7CisKKwkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5zY29wZSA9IENPTkZJR19TQ09QRV9HTE9CQUw7CisKKwkJaWYgKGFjY2Vzc19vcl93YXJuKHVzZXJfY29uZmlnLCBSX09LLCAwKSAmJgorCQkgICAgeGRnX2NvbmZpZyAmJiAhYWNjZXNzX29yX3dhcm4oeGRnX2NvbmZpZywgUl9PSywgMCkpIHsKKwkJCWdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSA9IHhkZ19jb25maWc7CisJCQlmcmVlKHVzZXJfY29uZmlnKTsKKwkJfSBlbHNlIHsKKwkJCWdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSA9IHVzZXJfY29uZmlnOworCQkJZnJlZSh4ZGdfY29uZmlnKTsKKwkJfQorCX0KKwllbHNlIGlmICh1c2Vfc3lzdGVtX2NvbmZpZykgeworCQlnaXZlbl9jb25maWdfc291cmNlLmZpbGUgPSBnaXRfZXRjX2dpdGNvbmZpZygpOworCQlnaXZlbl9jb25maWdfc291cmNlLnNjb3BlID0gQ09ORklHX1NDT1BFX1NZU1RFTTsKKwl9IGVsc2UgaWYgKHVzZV9sb2NhbF9jb25maWcpIHsKKwkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlID0gZ2l0X3BhdGhkdXAoImNvbmZpZyIpOworCQlnaXZlbl9jb25maWdfc291cmNlLnNjb3BlID0gQ09ORklHX1NDT1BFX0xPQ0FMOworCX0gZWxzZSBpZiAodXNlX3dvcmt0cmVlX2NvbmZpZykgeworCQlzdHJ1Y3Qgd29ya3RyZWUgKip3b3JrdHJlZXMgPSBnZXRfd29ya3RyZWVzKDApOworCQlpZiAocmVwb3NpdG9yeV9mb3JtYXRfd29ya3RyZWVfY29uZmlnKQorCQkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlID0gZ2l0X3BhdGhkdXAoImNvbmZpZy53b3JrdHJlZSIpOworCQllbHNlIGlmICh3b3JrdHJlZXNbMF0gJiYgd29ya3RyZWVzWzFdKQorCQkJZGllKF8oIi0td29ya3RyZWUgY2Fubm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSAiCisJCQkgICAgICAid29ya2luZyB0cmVlcyB1bmxlc3MgdGhlIGNvbmZpZ1xuIgorCQkJICAgICAgImV4dGVuc2lvbiB3b3JrdHJlZUNvbmZpZyBpcyBlbmFibGVkLiAiCisJCQkgICAgICAiUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorCQkJICAgICAgInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIikpOworCQllbHNlCisJCQlnaXZlbl9jb25maWdfc291cmNlLmZpbGUgPSBnaXRfcGF0aGR1cCgiY29uZmlnIik7CisJCWdpdmVuX2NvbmZpZ19zb3VyY2Uuc2NvcGUgPSBDT05GSUdfU0NPUEVfTE9DQUw7CisJCWZyZWVfd29ya3RyZWVzKHdvcmt0cmVlcyk7CisJfSBlbHNlIGlmIChnaXZlbl9jb25maWdfc291cmNlLmZpbGUpIHsKKwkJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKGdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSkgJiYgcHJlZml4KQorCQkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlID0KKwkJCQlwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBnaXZlbl9jb25maWdfc291cmNlLmZpbGUpOworCQlnaXZlbl9jb25maWdfc291cmNlLnNjb3BlID0gQ09ORklHX1NDT1BFX0NPTU1BTkQ7CisJfSBlbHNlIGlmIChnaXZlbl9jb25maWdfc291cmNlLmJsb2IpIHsKKwkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5zY29wZSA9IENPTkZJR19TQ09QRV9DT01NQU5EOworCX0KKworCisJaWYgKHJlc3BlY3RfaW5jbHVkZXNfb3B0ID09IC0xKQorCQljb25maWdfb3B0aW9ucy5yZXNwZWN0X2luY2x1ZGVzID0gIWdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZTsKKwllbHNlCisJCWNvbmZpZ19vcHRpb25zLnJlc3BlY3RfaW5jbHVkZXMgPSByZXNwZWN0X2luY2x1ZGVzX29wdDsKKwlpZiAoIW5vbmdpdCkgeworCQljb25maWdfb3B0aW9ucy5jb21tb25kaXIgPSBnZXRfZ2l0X2NvbW1vbl9kaXIoKTsKKwkJY29uZmlnX29wdGlvbnMuZ2l0X2RpciA9IGdldF9naXRfZGlyKCk7CisJfQorCisJaWYgKGVuZF9udWwpIHsKKwkJdGVybSA9ICdcMCc7CisJCWRlbGltID0gJ1xuJzsKKwkJa2V5X2RlbGltID0gJ1xuJzsKKwl9CisKKwlpZiAoKGFjdGlvbnMgJiAoQUNUSU9OX0dFVF9DT0xPUnxBQ1RJT05fR0VUX0NPTE9SQk9PTCkpICYmIHR5cGUpIHsKKwkJZXJyb3IoXygiLS1nZXQtY29sb3IgYW5kIHZhcmlhYmxlIHR5cGUgYXJlIGluY29oZXJlbnQiKSk7CisJCXVzYWdlX2J1aWx0aW5fY29uZmlnKCk7CisJfQorCisJaWYgKEhBU19NVUxUSV9CSVRTKGFjdGlvbnMpKSB7CisJCWVycm9yKF8oIm9ubHkgb25lIGFjdGlvbiBhdCBhIHRpbWUiKSk7CisJCXVzYWdlX2J1aWx0aW5fY29uZmlnKCk7CisJfQorCWlmIChhY3Rpb25zID09IDApCisJCXN3aXRjaCAoYXJnYykgeworCQljYXNlIDE6IGFjdGlvbnMgPSBBQ1RJT05fR0VUOyBicmVhazsKKwkJY2FzZSAyOiBhY3Rpb25zID0gQUNUSU9OX1NFVDsgYnJlYWs7CisJCWNhc2UgMzogYWN0aW9ucyA9IEFDVElPTl9TRVRfQUxMOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlX2J1aWx0aW5fY29uZmlnKCk7CisJCX0KKwlpZiAob21pdF92YWx1ZXMgJiYKKwkgICAgIShhY3Rpb25zID09IEFDVElPTl9MSVNUIHx8IGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9SRUdFWFApKSB7CisJCWVycm9yKF8oIi0tbmFtZS1vbmx5IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWxpc3Qgb3IgLS1nZXQtcmVnZXhwIikpOworCQl1c2FnZV9idWlsdGluX2NvbmZpZygpOworCX0KKworCWlmIChzaG93X29yaWdpbiAmJiAhKGFjdGlvbnMgJgorCQkoQUNUSU9OX0dFVHxBQ1RJT05fR0VUX0FMTHxBQ1RJT05fR0VUX1JFR0VYUHxBQ1RJT05fTElTVCkpKSB7CisJCWVycm9yKF8oIi0tc2hvdy1vcmlnaW4gaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0LCAtLWdldC1hbGwsICIKKwkJCSItLWdldC1yZWdleHAsIGFuZCAtLWxpc3QiKSk7CisJCXVzYWdlX2J1aWx0aW5fY29uZmlnKCk7CisJfQorCisJaWYgKGRlZmF1bHRfdmFsdWUgJiYgIShhY3Rpb25zICYgQUNUSU9OX0dFVCkpIHsKKwkJZXJyb3IoXygiLS1kZWZhdWx0IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCIpKTsKKwkJdXNhZ2VfYnVpbHRpbl9jb25maWcoKTsKKwl9CisKKwlpZiAoYWN0aW9ucyAmIFBBR0lOR19BQ1RJT05TKQorCQlzZXR1cF9hdXRvX3BhZ2VyKCJjb25maWciLCAxKTsKKworCWlmIChhY3Rpb25zID09IEFDVElPTl9MSVNUKSB7CisJCWNoZWNrX2FyZ2MoYXJnYywgMCwgMCk7CisJCWlmIChjb25maWdfd2l0aF9vcHRpb25zKHNob3dfYWxsX2NvbmZpZywgTlVMTCwKKwkJCQkJJmdpdmVuX2NvbmZpZ19zb3VyY2UsCisJCQkJCSZjb25maWdfb3B0aW9ucykgPCAwKSB7CisJCQlpZiAoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlKQorCQkJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIiksCisJCQkJCSAgZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlKTsKKwkJCWVsc2UKKwkJCQlkaWUoXygiZXJyb3IgcHJvY2Vzc2luZyBjb25maWcgZmlsZShzKSIpKTsKKwkJfQorCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9FRElUKSB7CisJCWNoYXIgKmNvbmZpZ19maWxlOworCisJCWNoZWNrX2FyZ2MoYXJnYywgMCwgMCk7CisJCWlmICghZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlICYmIG5vbmdpdCkKKwkJCWRpZShfKCJub3QgaW4gYSBnaXQgZGlyZWN0b3J5IikpOworCQlpZiAoZ2l2ZW5fY29uZmlnX3NvdXJjZS51c2Vfc3RkaW4pCisJCQlkaWUoXygiZWRpdGluZyBzdGRpbiBpcyBub3Qgc3VwcG9ydGVkIikpOworCQlpZiAoZ2l2ZW5fY29uZmlnX3NvdXJjZS5ibG9iKQorCQkJZGllKF8oImVkaXRpbmcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIpKTsKKwkJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCQljb25maWdfZmlsZSA9IGdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSA/CisJCQkJeHN0cmR1cChnaXZlbl9jb25maWdfc291cmNlLmZpbGUpIDoKKwkJCQlnaXRfcGF0aGR1cCgiY29uZmlnIik7CisJCWlmICh1c2VfZ2xvYmFsX2NvbmZpZykgeworCQkJaW50IGZkID0gb3Blbihjb25maWdfZmlsZSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZLCAwNjY2KTsKKwkJCWlmIChmZCA+PSAwKSB7CisJCQkJY2hhciAqY29udGVudCA9IGRlZmF1bHRfdXNlcl9jb25maWcoKTsKKwkJCQl3cml0ZV9zdHJfaW5fZnVsbChmZCwgY29udGVudCk7CisJCQkJZnJlZShjb250ZW50KTsKKwkJCQljbG9zZShmZCk7CisJCQl9CisJCQllbHNlIGlmIChlcnJubyAhPSBFRVhJU1QpCisJCQkJZGllX2Vycm5vKF8oImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIiksIGNvbmZpZ19maWxlKTsKKwkJfQorCQlsYXVuY2hfZWRpdG9yKGNvbmZpZ19maWxlLCBOVUxMLCBOVUxMKTsKKwkJZnJlZShjb25maWdfZmlsZSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1NFVCkgeworCQlpbnQgcmV0OworCQljaGVja193cml0ZSgpOworCQljaGVja19hcmdjKGFyZ2MsIDIsIDIpOworCQl2YWx1ZSA9IG5vcm1hbGl6ZV92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKKwkJVU5MRUFLKHZhbHVlKTsKKwkJcmV0ID0gZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLCBhcmd2WzBdLCB2YWx1ZSk7CisJCWlmIChyZXQgPT0gQ09ORklHX05PVEhJTkdfU0VUKQorCQkJZXJyb3IoXygiY2Fubm90IG92ZXJ3cml0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBhIHNpbmdsZSB2YWx1ZVxuIgorCQkJIiAgICAgICBVc2UgYSByZWdleHAsIC0tYWRkIG9yIC0tcmVwbGFjZS1hbGwgdG8gY2hhbmdlICVzLiIpLCBhcmd2WzBdKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fU0VUX0FMTCkgeworCQljaGVja193cml0ZSgpOworCQljaGVja19hcmdjKGFyZ2MsIDIsIDMpOworCQl2YWx1ZSA9IG5vcm1hbGl6ZV92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKKwkJVU5MRUFLKHZhbHVlKTsKKwkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGVfZ2VudGx5KGdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSwKKwkJCQkJCQkgICAgICBhcmd2WzBdLCB2YWx1ZSwgYXJndlsyXSwgMCk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0FERCkgeworCQljaGVja193cml0ZSgpOworCQljaGVja19hcmdjKGFyZ2MsIDIsIDIpOworCQl2YWx1ZSA9IG5vcm1hbGl6ZV92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKKwkJVU5MRUFLKHZhbHVlKTsKKwkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGVfZ2VudGx5KGdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSwKKwkJCQkJCQkgICAgICBhcmd2WzBdLCB2YWx1ZSwKKwkJCQkJCQkgICAgICBDT05GSUdfUkVHRVhfTk9ORSwgMCk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1JFUExBQ0VfQUxMKSB7CisJCWNoZWNrX3dyaXRlKCk7CisJCWNoZWNrX2FyZ2MoYXJnYywgMiwgMyk7CisJCXZhbHVlID0gbm9ybWFsaXplX3ZhbHVlKGFyZ3ZbMF0sIGFyZ3ZbMV0pOworCQlVTkxFQUsodmFsdWUpOworCQlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZV9nZW50bHkoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLAorCQkJCQkJCSAgICAgIGFyZ3ZbMF0sIHZhbHVlLCBhcmd2WzJdLCAxKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fR0VUKSB7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CisJCXJldHVybiBnZXRfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9BTEwpIHsKKwkJZG9fYWxsID0gMTsKKwkJY2hlY2tfYXJnYyhhcmdjLCAxLCAyKTsKKwkJcmV0dXJuIGdldF92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fR0VUX1JFR0VYUCkgeworCQlzaG93X2tleXMgPSAxOworCQl1c2Vfa2V5X3JlZ2V4cCA9IDE7CisJCWRvX2FsbCA9IDE7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CisJCXJldHVybiBnZXRfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9VUkxNQVRDSCkgeworCQljaGVja19hcmdjKGFyZ2MsIDIsIDIpOworCQlyZXR1cm4gZ2V0X3VybG1hdGNoKGFyZ3ZbMF0sIGFyZ3ZbMV0pOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9VTlNFVCkgeworCQljaGVja193cml0ZSgpOworCQljaGVja19hcmdjKGFyZ2MsIDEsIDIpOworCQlpZiAoYXJnYyA9PSAyKQorCQkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGVfZ2VudGx5KGdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSwKKwkJCQkJCQkJICAgICAgYXJndlswXSwgTlVMTCwgYXJndlsxXSwgMCk7CisJCWVsc2UKKwkJCXJldHVybiBnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShnaXZlbl9jb25maWdfc291cmNlLmZpbGUsCisJCQkJCQkJICAgICBhcmd2WzBdLCBOVUxMKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fVU5TRVRfQUxMKSB7CisJCWNoZWNrX3dyaXRlKCk7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CisJCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlX2dlbnRseShnaXZlbl9jb25maWdfc291cmNlLmZpbGUsCisJCQkJCQkJICAgICAgYXJndlswXSwgTlVMTCwgYXJndlsxXSwgMSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1JFTkFNRV9TRUNUSU9OKSB7CisJCWludCByZXQ7CisJCWNoZWNrX3dyaXRlKCk7CisJCWNoZWNrX2FyZ2MoYXJnYywgMiwgMik7CisJCXJldCA9IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25faW5fZmlsZShnaXZlbl9jb25maWdfc291cmNlLmZpbGUsCisJCQkJCQkJYXJndlswXSwgYXJndlsxXSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKHJldCA9PSAwKQorCQkJZGllKF8oIm5vIHN1Y2ggc2VjdGlvbjogJXMiKSwgYXJndlswXSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1JFTU9WRV9TRUNUSU9OKSB7CisJCWludCByZXQ7CisJCWNoZWNrX3dyaXRlKCk7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMSk7CisJCXJldCA9IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25faW5fZmlsZShnaXZlbl9jb25maWdfc291cmNlLmZpbGUsCisJCQkJCQkJYXJndlswXSwgTlVMTCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKHJldCA9PSAwKQorCQkJZGllKF8oIm5vIHN1Y2ggc2VjdGlvbjogJXMiKSwgYXJndlswXSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9DT0xPUikgeworCQljaGVja19hcmdjKGFyZ2MsIDEsIDIpOworCQlnZXRfY29sb3IoYXJndlswXSwgYXJndlsxXSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9DT0xPUkJPT0wpIHsKKwkJY2hlY2tfYXJnYyhhcmdjLCAxLCAyKTsKKwkJaWYgKGFyZ2MgPT0gMikKKwkJCWNvbG9yX3N0ZG91dF9pc190dHkgPSBnaXRfY29uZmlnX2Jvb2woImNvbW1hbmQgbGluZSIsIGFyZ3ZbMV0pOworCQlyZXR1cm4gZ2V0X2NvbG9yYm9vbChhcmd2WzBdLCBhcmdjID09IDIpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jb3VudC1vYmplY3RzLmMgYi9idWlsdGluL2NvdW50LW9iamVjdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmFlNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jb3VudC1vYmplY3RzLmMKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgY291bnQtb2JqZWN0cyIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnYXJiYWdlOworc3RhdGljIG9mZl90IHNpemVfZ2FyYmFnZTsKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvb3NlLCBwYWNrZWQsIHBhY2tlZF9sb29zZTsKK3N0YXRpYyBvZmZfdCBsb29zZV9zaXplOworCitzdGF0aWMgY29uc3QgY2hhciAqYml0c190b19tc2codW5zaWduZWQgc2Vlbl9iaXRzKQoreworCXN3aXRjaCAoc2Vlbl9iaXRzKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gIm5vIGNvcnJlc3BvbmRpbmcgLmlkeCBvciAucGFjayI7CisJY2FzZSBQQUNLRElSX0ZJTEVfR0FSQkFHRToKKwkJcmV0dXJuICJnYXJiYWdlIGZvdW5kIjsKKwljYXNlIFBBQ0tESVJfRklMRV9QQUNLOgorCQlyZXR1cm4gIm5vIGNvcnJlc3BvbmRpbmcgLmlkeCI7CisJY2FzZSBQQUNLRElSX0ZJTEVfSURYOgorCQlyZXR1cm4gIm5vIGNvcnJlc3BvbmRpbmcgLnBhY2siOworCWNhc2UgUEFDS0RJUl9GSUxFX1BBQ0t8UEFDS0RJUl9GSUxFX0lEWDoKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlYWxfcmVwb3J0X2dhcmJhZ2UodW5zaWduZWQgc2Vlbl9iaXRzLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdGF0IHN0OworCWNvbnN0IGNoYXIgKmRlc2MgPSBiaXRzX3RvX21zZyhzZWVuX2JpdHMpOworCisJaWYgKCFkZXNjKQorCQlyZXR1cm47CisKKwlpZiAoIXN0YXQocGF0aCwgJnN0KSkKKwkJc2l6ZV9nYXJiYWdlICs9IHN0LnN0X3NpemU7CisJd2FybmluZygiJXM6ICVzIiwgZGVzYywgcGF0aCk7CisJZ2FyYmFnZSsrOworfQorCitzdGF0aWMgdm9pZCBsb29zZV9nYXJiYWdlKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKHZlcmJvc2UpCisJCXJlcG9ydF9nYXJiYWdlKFBBQ0tESVJfRklMRV9HQVJCQUdFLCBwYXRoKTsKK30KKworc3RhdGljIGludCBjb3VudF9sb29zZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAobHN0YXQocGF0aCwgJnN0KSB8fCAhU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJbG9vc2VfZ2FyYmFnZShwYXRoKTsKKwllbHNlIHsKKwkJbG9vc2Vfc2l6ZSArPSBvbl9kaXNrX2J5dGVzKHN0KTsKKwkJbG9vc2UrKzsKKwkJaWYgKHZlcmJvc2UgJiYgaGFzX29iamVjdF9wYWNrKG9pZCkpCisJCQlwYWNrZWRfbG9vc2UrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfY3J1ZnQoY29uc3QgY2hhciAqYmFzZW5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKmRhdGEpCit7CisJbG9vc2VfZ2FyYmFnZShwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcmludF9hbHRlcm5hdGUoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYiwgdm9pZCAqZGF0YSkKK3sKKwlwcmludGYoImFsdGVybmF0ZTogIik7CisJcXVvdGVfY19zdHlsZShvZGItPnBhdGgsIE5VTEwsIHN0ZG91dCwgMCk7CisJcHV0Y2hhcignXG4nKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBjb3VudF9vYmplY3RzX3VzYWdlW10gPSB7CisJTl8oImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iKSwKKwlOVUxMCit9OworCitpbnQgY21kX2NvdW50X29iamVjdHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGh1bWFuX3JlYWRhYmxlID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygiYmUgdmVyYm9zZSIpKSwKKwkJT1BUX0JPT0woJ0gnLCAiaHVtYW4tcmVhZGFibGUiLCAmaHVtYW5fcmVhZGFibGUsCisJCQkgTl8oInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdHMsIGNvdW50X29iamVjdHNfdXNhZ2UsIDApOworCS8qIHdlIGRvIG5vdCB0YWtlIGFyZ3VtZW50cyBvdGhlciB0aGFuIGZsYWdzIGZvciBub3cgKi8KKwlpZiAoYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNvdW50X29iamVjdHNfdXNhZ2UsIG9wdHMpOworCWlmICh2ZXJib3NlKSB7CisJCXJlcG9ydF9nYXJiYWdlID0gcmVhbF9yZXBvcnRfZ2FyYmFnZTsKKwkJcmVwb3J0X2xpbmtlZF9jaGVja291dF9nYXJiYWdlKCk7CisJfQorCisJZm9yX2VhY2hfbG9vc2VfZmlsZV9pbl9vYmpkaXIoZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwKKwkJCQkgICAgICBjb3VudF9sb29zZSwgY291bnRfY3J1ZnQsIE5VTEwsIE5VTEwpOworCisJaWYgKHZlcmJvc2UpIHsKKwkJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJCXVuc2lnbmVkIGxvbmcgbnVtX3BhY2sgPSAwOworCQlvZmZfdCBzaXplX3BhY2sgPSAwOworCQlzdHJ1Y3Qgc3RyYnVmIGxvb3NlX2J1ZiA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIHBhY2tfYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgZ2FyYmFnZV9idWYgPSBTVFJCVUZfSU5JVDsKKworCQlmb3IgKHAgPSBnZXRfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5KTsgcDsgcCA9IHAtPm5leHQpIHsKKwkJCWlmICghcC0+cGFja19sb2NhbCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCisJCQkJY29udGludWU7CisJCQlwYWNrZWQgKz0gcC0+bnVtX29iamVjdHM7CisJCQlzaXplX3BhY2sgKz0gcC0+cGFja19zaXplICsgcC0+aW5kZXhfc2l6ZTsKKwkJCW51bV9wYWNrKys7CisJCX0KKworCQlpZiAoaHVtYW5fcmVhZGFibGUpIHsKKwkJCXN0cmJ1Zl9odW1hbmlzZV9ieXRlcygmbG9vc2VfYnVmLCBsb29zZV9zaXplKTsKKwkJCXN0cmJ1Zl9odW1hbmlzZV9ieXRlcygmcGFja19idWYsIHNpemVfcGFjayk7CisJCQlzdHJidWZfaHVtYW5pc2VfYnl0ZXMoJmdhcmJhZ2VfYnVmLCBzaXplX2dhcmJhZ2UpOworCQl9IGVsc2UgeworCQkJc3RyYnVmX2FkZGYoJmxvb3NlX2J1ZiwgIiVsdSIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKShsb29zZV9zaXplIC8gMTAyNCkpOworCQkJc3RyYnVmX2FkZGYoJnBhY2tfYnVmLCAiJWx1IiwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcpKHNpemVfcGFjayAvIDEwMjQpKTsKKwkJCXN0cmJ1Zl9hZGRmKCZnYXJiYWdlX2J1ZiwgIiVsdSIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKShzaXplX2dhcmJhZ2UgLyAxMDI0KSk7CisJCX0KKworCQlwcmludGYoImNvdW50OiAlbHVcbiIsIGxvb3NlKTsKKwkJcHJpbnRmKCJzaXplOiAlc1xuIiwgbG9vc2VfYnVmLmJ1Zik7CisJCXByaW50ZigiaW4tcGFjazogJWx1XG4iLCBwYWNrZWQpOworCQlwcmludGYoInBhY2tzOiAlbHVcbiIsIG51bV9wYWNrKTsKKwkJcHJpbnRmKCJzaXplLXBhY2s6ICVzXG4iLCBwYWNrX2J1Zi5idWYpOworCQlwcmludGYoInBydW5lLXBhY2thYmxlOiAlbHVcbiIsIHBhY2tlZF9sb29zZSk7CisJCXByaW50ZigiZ2FyYmFnZTogJWx1XG4iLCBnYXJiYWdlKTsKKwkJcHJpbnRmKCJzaXplLWdhcmJhZ2U6ICVzXG4iLCBnYXJiYWdlX2J1Zi5idWYpOworCQlmb3JlYWNoX2FsdF9vZGIocHJpbnRfYWx0ZXJuYXRlLCBOVUxMKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmxvb3NlX2J1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZwYWNrX2J1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZnYXJiYWdlX2J1Zik7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKGh1bWFuX3JlYWRhYmxlKQorCQkJc3RyYnVmX2h1bWFuaXNlX2J5dGVzKCZidWYsIGxvb3NlX3NpemUpOworCQllbHNlCisJCQlzdHJidWZfYWRkZigmYnVmLCAiJWx1IGtpbG9ieXRlcyIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKShsb29zZV9zaXplIC8gMTAyNCkpOworCQlwcmludGYoIiVsdSBvYmplY3RzLCAlc1xuIiwgbG9vc2UsIGJ1Zi5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NyZWRlbnRpYWwuYyBiL2J1aWx0aW4vY3JlZGVudGlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OWFjZmIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NyZWRlbnRpYWwuYwpAQCAtMCwwICsxLDMxIEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiY3JlZGVudGlhbC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdXNhZ2VfbXNnW10gPQorCSJnaXQgY3JlZGVudGlhbCBbZmlsbHxhcHByb3ZlfHJlamVjdF0iOworCitpbnQgY21kX2NyZWRlbnRpYWwoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqb3A7CisJc3RydWN0IGNyZWRlbnRpYWwgYyA9IENSRURFTlRJQUxfSU5JVDsKKworCWlmIChhcmdjICE9IDIgfHwgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UodXNhZ2VfbXNnKTsKKwlvcCA9IGFyZ3ZbMV07CisKKwlpZiAoY3JlZGVudGlhbF9yZWFkKCZjLCBzdGRpbikgPCAwKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGNyZWRlbnRpYWwgZnJvbSBzdGRpbiIpOworCisJaWYgKCFzdHJjbXAob3AsICJmaWxsIikpIHsKKwkJY3JlZGVudGlhbF9maWxsKCZjKTsKKwkJY3JlZGVudGlhbF93cml0ZSgmYywgc3Rkb3V0KTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAob3AsICJhcHByb3ZlIikpIHsKKwkJY3JlZGVudGlhbF9hcHByb3ZlKCZjKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAob3AsICJyZWplY3QiKSkgeworCQljcmVkZW50aWFsX3JlamVjdCgmYyk7CisJfSBlbHNlIHsKKwkJdXNhZ2UodXNhZ2VfbXNnKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2Rlc2NyaWJlLmMgYi9idWlsdGluL2Rlc2NyaWJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFkMmNiOQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZGVzY3JpYmUuYwpAQCAtMCwwICsxLDY4MSBAQAorI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKyNpbmNsdWRlICJjb21taXQtc2xhYi5oIgorCisjZGVmaW5lIE1BWF9UQUdTCShGTEFHX0JJVFMgLSAxKQorCitkZWZpbmVfY29tbWl0X3NsYWIoY29tbWl0X25hbWVzLCBzdHJ1Y3QgY29tbWl0X25hbWUgKik7CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGVzY3JpYmVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIFs8Y29tbWl0LWlzaD4uLi5dIiksCisJTl8oImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBkZWJ1ZzsJLyogRGlzcGxheSBsb3RzIG9mIHZlcmJvc2UgaW5mbyAqLworc3RhdGljIGludCBhbGw7CS8qIEFueSB2YWxpZCByZWYgY2FuIGJlIHVzZWQgKi8KK3N0YXRpYyBpbnQgdGFnczsJLyogQWxsb3cgbGlnaHR3ZWlnaHQgdGFncyAqLworc3RhdGljIGludCBsb25nZm9ybWF0Oworc3RhdGljIGludCBmaXJzdF9wYXJlbnQ7CitzdGF0aWMgaW50IGFiYnJldiA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLworc3RhdGljIGludCBtYXhfY2FuZGlkYXRlcyA9IDEwOworc3RhdGljIHN0cnVjdCBoYXNobWFwIG5hbWVzOworc3RhdGljIGludCBoYXZlX3V0aWw7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IHBhdHRlcm5zID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhjbHVkZV9wYXR0ZXJucyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgaW50IGFsd2F5czsKK3N0YXRpYyBjb25zdCBjaGFyICpzdWZmaXgsICpkaXJ0eSwgKmJyb2tlbjsKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X25hbWVzIGNvbW1pdF9uYW1lczsKKworLyogZGlmZi1pbmRleCBjb21tYW5kIGFyZ3VtZW50cyB0byBjaGVjayBpZiB3b3JraW5nIHRyZWUgaXMgZGlydHkuICovCitzdGF0aWMgY29uc3QgY2hhciAqZGlmZl9pbmRleF9hcmdzW10gPSB7CisJImRpZmYtaW5kZXgiLCAiLS1xdWlldCIsICJIRUFEIiwgIi0tIiwgTlVMTAorfTsKKworc3RydWN0IGNvbW1pdF9uYW1lIHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnRyeTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHBlZWxlZDsKKwlzdHJ1Y3QgdGFnICp0YWc7CisJdW5zaWduZWQgcHJpbzoyOyAvKiBhbm5vdGF0ZWQgdGFnID0gMiwgdGFnID0gMSwgaGVhZCA9IDAgKi8KKwl1bnNpZ25lZCBuYW1lX2NoZWNrZWQ6MTsKKwl1bnNpZ25lZCBtaXNuYW1lZDoxOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNoYXIgKnBhdGg7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcHJpb19uYW1lc1tdID0geworCU5fKCJoZWFkIiksIE5fKCJsaWdodHdlaWdodCIpLCBOXygiYW5ub3RhdGVkIiksCit9OworCitzdGF0aWMgaW50IGNvbW1pdF9uYW1lX25lcShjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCQkgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZXB0ciwKKwkJCSAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCQkgICBjb25zdCB2b2lkICpwZWVsZWQpCit7CisJY29uc3Qgc3RydWN0IGNvbW1pdF9uYW1lICpjbjEsICpjbjI7CisKKwljbjEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IGNvbW1pdF9uYW1lLCBlbnRyeSk7CisJY24yID0gY29udGFpbmVyX29mKGVudHJ5X29yX2tleSwgY29uc3Qgc3RydWN0IGNvbW1pdF9uYW1lLCBlbnRyeSk7CisKKwlyZXR1cm4gIW9pZGVxKCZjbjEtPnBlZWxlZCwgcGVlbGVkID8gcGVlbGVkIDogJmNuMi0+cGVlbGVkKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY29tbWl0X25hbWUgKmZpbmRfY29tbWl0X25hbWUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqcGVlbGVkKQoreworCXJldHVybiBoYXNobWFwX2dldF9lbnRyeV9mcm9tX2hhc2goJm5hbWVzLCBvaWRoYXNoKHBlZWxlZCksIHBlZWxlZCwKKwkJCQkJCXN0cnVjdCBjb21taXRfbmFtZSwgZW50cnkpOworfQorCitzdGF0aWMgaW50IHJlcGxhY2VfbmFtZShzdHJ1Y3QgY29tbWl0X25hbWUgKmUsCisJCQkgICAgICAgaW50IHByaW8sCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgIHN0cnVjdCB0YWcgKip0YWcpCit7CisJaWYgKCFlIHx8IGUtPnByaW8gPCBwcmlvKQorCQlyZXR1cm4gMTsKKworCWlmIChlLT5wcmlvID09IDIgJiYgcHJpbyA9PSAyKSB7CisJCS8qIE11bHRpcGxlIGFubm90YXRlZCB0YWdzIHBvaW50IHRvIHRoZSBzYW1lIGNvbW1pdC4KKwkJICogU2VsZWN0IG9uZSB0byBrZWVwIGJhc2VkIHVwb24gdGhlaXIgdGFnZ2VyIGRhdGUuCisJCSAqLworCQlzdHJ1Y3QgdGFnICp0OworCisJCWlmICghZS0+dGFnKSB7CisJCQl0ID0gbG9va3VwX3RhZyh0aGVfcmVwb3NpdG9yeSwgJmUtPm9pZCk7CisJCQlpZiAoIXQgfHwgcGFyc2VfdGFnKHQpKQorCQkJCXJldHVybiAxOworCQkJZS0+dGFnID0gdDsKKwkJfQorCisJCXQgPSBsb29rdXBfdGFnKHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCQlpZiAoIXQgfHwgcGFyc2VfdGFnKHQpKQorCQkJcmV0dXJuIDA7CisJCSp0YWcgPSB0OworCisJCWlmIChlLT50YWctPmRhdGUgPCB0LT5kYXRlKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF90b19rbm93bl9uYW1lcyhjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnBlZWxlZCwKKwkJCSAgICAgICBpbnQgcHJpbywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IGNvbW1pdF9uYW1lICplID0gZmluZF9jb21taXRfbmFtZShwZWVsZWQpOworCXN0cnVjdCB0YWcgKnRhZyA9IE5VTEw7CisJaWYgKHJlcGxhY2VfbmFtZShlLCBwcmlvLCBvaWQsICZ0YWcpKSB7CisJCWlmICghZSkgeworCQkJZSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21taXRfbmFtZSkpOworCQkJb2lkY3B5KCZlLT5wZWVsZWQsIHBlZWxlZCk7CisJCQloYXNobWFwX2VudHJ5X2luaXQoJmUtPmVudHJ5LCBvaWRoYXNoKHBlZWxlZCkpOworCQkJaGFzaG1hcF9hZGQoJm5hbWVzLCAmZS0+ZW50cnkpOworCQkJZS0+cGF0aCA9IE5VTEw7CisJCX0KKwkJZS0+dGFnID0gdGFnOworCQllLT5wcmlvID0gcHJpbzsKKwkJZS0+bmFtZV9jaGVja2VkID0gMDsKKwkJZS0+bWlzbmFtZWQgPSAwOworCQlvaWRjcHkoJmUtPm9pZCwgb2lkKTsKKwkJZnJlZShlLT5wYXRoKTsKKwkJZS0+cGF0aCA9IHhzdHJkdXAocGF0aCk7CisJfQorfQorCitzdGF0aWMgaW50IGdldF9uYW1lKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJaW50IGlzX3RhZyA9IDA7CisJc3RydWN0IG9iamVjdF9pZCBwZWVsZWQ7CisJaW50IGlzX2Fubm90YXRlZCwgcHJpbzsKKwljb25zdCBjaGFyICpwYXRoX3RvX21hdGNoID0gTlVMTDsKKworCWlmIChza2lwX3ByZWZpeChwYXRoLCAicmVmcy90YWdzLyIsICZwYXRoX3RvX21hdGNoKSkgeworCQlpc190YWcgPSAxOworCX0gZWxzZSBpZiAoYWxsKSB7CisJCWlmICgoZXhjbHVkZV9wYXR0ZXJucy5uciB8fCBwYXR0ZXJucy5ucikgJiYKKwkJICAgICFza2lwX3ByZWZpeChwYXRoLCAicmVmcy9oZWFkcy8iLCAmcGF0aF90b19tYXRjaCkgJiYKKwkJICAgICFza2lwX3ByZWZpeChwYXRoLCAicmVmcy9yZW1vdGVzLyIsICZwYXRoX3RvX21hdGNoKSkgeworCQkJLyogT25seSBhY2NlcHQgcmVmZXJlbmNlIG9mIGtub3duIHR5cGUgaWYgdGhlcmUgYXJlIG1hdGNoL2V4Y2x1ZGUgcGF0dGVybnMgKi8KKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJLyogUmVqZWN0IGFueXRoaW5nIG91dHNpZGUgcmVmcy90YWdzLyB1bmxlc3MgLS1hbGwgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBJZiB3ZSdyZSBnaXZlbiBleGNsdWRlIHBhdHRlcm5zLCBmaXJzdCBleGNsdWRlIGFueSB0YWcgd2hpY2ggbWF0Y2gKKwkgKiBhbnkgb2YgdGhlIGV4Y2x1ZGUgcGF0dGVybi4KKwkgKi8KKwlpZiAoZXhjbHVkZV9wYXR0ZXJucy5ucikgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZleGNsdWRlX3BhdHRlcm5zKSB7CisJCQlpZiAoIXdpbGRtYXRjaChpdGVtLT5zdHJpbmcsIHBhdGhfdG9fbWF0Y2gsIDApKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB3ZSdyZSBnaXZlbiBwYXR0ZXJucywgYWNjZXB0IG9ubHkgdGFncyB3aGljaCBtYXRjaCBhdCBsZWFzdCBvbmUKKwkgKiBwYXR0ZXJuLgorCSAqLworCWlmIChwYXR0ZXJucy5ucikgeworCQlpbnQgZm91bmQgPSAwOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZwYXR0ZXJucykgeworCQkJaWYgKCF3aWxkbWF0Y2goaXRlbS0+c3RyaW5nLCBwYXRoX3RvX21hdGNoLCAwKSkgeworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghZm91bmQpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJcyBpdCBhbm5vdGF0ZWQ/ICovCisJaWYgKCFwZWVsX3JlZihwYXRoLCAmcGVlbGVkKSkgeworCQlpc19hbm5vdGF0ZWQgPSAhb2lkZXEob2lkLCAmcGVlbGVkKTsKKwl9IGVsc2UgeworCQlvaWRjcHkoJnBlZWxlZCwgb2lkKTsKKwkJaXNfYW5ub3RhdGVkID0gMDsKKwl9CisKKwkvKgorCSAqIEJ5IGRlZmF1bHQsIHdlIG9ubHkgdXNlIGFubm90YXRlZCB0YWdzLCBidXQgd2l0aCAtLXRhZ3MKKwkgKiB3ZSBmYWxsIGJhY2sgdG8gbGlnaHR3ZWlnaHQgb25lcyAoZXZlbiB3aXRob3V0IC0tdGFncywKKwkgKiB3ZSBzdGlsbCByZW1lbWJlciBsaWdodHdlaWdodCBvbmVzLCBvbmx5IHRvIGdpdmUgaGludHMKKwkgKiBpbiBhbiBlcnJvciBtZXNzYWdlKS4gIC0tYWxsIGFsbG93cyBhbnkgcmVmcyB0byBiZSB1c2VkLgorCSAqLworCWlmIChpc19hbm5vdGF0ZWQpCisJCXByaW8gPSAyOworCWVsc2UgaWYgKGlzX3RhZykKKwkJcHJpbyA9IDE7CisJZWxzZQorCQlwcmlvID0gMDsKKworCWFkZF90b19rbm93bl9uYW1lcyhhbGwgPyBwYXRoICsgNSA6IHBhdGggKyAxMCwgJnBlZWxlZCwgcHJpbywgb2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHBvc3NpYmxlX3RhZyB7CisJc3RydWN0IGNvbW1pdF9uYW1lICpuYW1lOworCWludCBkZXB0aDsKKwlpbnQgZm91bmRfb3JkZXI7CisJdW5zaWduZWQgZmxhZ193aXRoaW47Cit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfcHQoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCBwb3NzaWJsZV90YWcgKmEgPSAoc3RydWN0IHBvc3NpYmxlX3RhZyAqKWFfOworCXN0cnVjdCBwb3NzaWJsZV90YWcgKmIgPSAoc3RydWN0IHBvc3NpYmxlX3RhZyAqKWJfOworCWlmIChhLT5kZXB0aCAhPSBiLT5kZXB0aCkKKwkJcmV0dXJuIGEtPmRlcHRoIC0gYi0+ZGVwdGg7CisJaWYgKGEtPmZvdW5kX29yZGVyICE9IGItPmZvdW5kX29yZGVyKQorCQlyZXR1cm4gYS0+Zm91bmRfb3JkZXIgLSBiLT5mb3VuZF9vcmRlcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluaXNoX2RlcHRoX2NvbXB1dGF0aW9uKAorCXN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QsCisJc3RydWN0IHBvc3NpYmxlX3RhZyAqYmVzdCkKK3sKKwl1bnNpZ25lZCBsb25nIHNlZW5fY29tbWl0cyA9IDA7CisJd2hpbGUgKCpsaXN0KSB7CisJCXN0cnVjdCBjb21taXQgKmMgPSBwb3BfY29tbWl0KGxpc3QpOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBjLT5wYXJlbnRzOworCQlzZWVuX2NvbW1pdHMrKzsKKwkJaWYgKGMtPm9iamVjdC5mbGFncyAmIGJlc3QtPmZsYWdfd2l0aGluKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmEgPSAqbGlzdDsKKwkJCXdoaWxlIChhKSB7CisJCQkJc3RydWN0IGNvbW1pdCAqaSA9IGEtPml0ZW07CisJCQkJaWYgKCEoaS0+b2JqZWN0LmZsYWdzICYgYmVzdC0+ZmxhZ193aXRoaW4pKQorCQkJCQlicmVhazsKKwkJCQlhID0gYS0+bmV4dDsKKwkJCX0KKwkJCWlmICghYSkKKwkJCQlicmVhazsKKwkJfSBlbHNlCisJCQliZXN0LT5kZXB0aCsrOworCQl3aGlsZSAocGFyZW50cykgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudHMtPml0ZW07CisJCQlwYXJzZV9jb21taXQocCk7CisJCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBTRUVOKSkKKwkJCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShwLCBsaXN0KTsKKwkJCXAtPm9iamVjdC5mbGFncyB8PSBjLT5vYmplY3QuZmxhZ3M7CisJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJfQorCX0KKwlyZXR1cm4gc2Vlbl9jb21taXRzOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfbmFtZShzdHJ1Y3QgY29tbWl0X25hbWUgKm4sIHN0cnVjdCBzdHJidWYgKmRzdCkKK3sKKwlpZiAobi0+cHJpbyA9PSAyICYmICFuLT50YWcpIHsKKwkJbi0+dGFnID0gbG9va3VwX3RhZyh0aGVfcmVwb3NpdG9yeSwgJm4tPm9pZCk7CisJCWlmICghbi0+dGFnIHx8IHBhcnNlX3RhZyhuLT50YWcpKQorCQkJZGllKF8oImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIpLCBuLT5wYXRoKTsKKwl9CisJaWYgKG4tPnRhZyAmJiAhbi0+bmFtZV9jaGVja2VkKSB7CisJCWlmIChzdHJjbXAobi0+dGFnLT50YWcsIGFsbCA/IG4tPnBhdGggKyA1IDogbi0+cGF0aCkpIHsKKwkJCXdhcm5pbmcoXygidGFnICclcycgaXMgZXh0ZXJuYWxseSBrbm93biBhcyAnJXMnIiksCisJCQkJbi0+cGF0aCwgbi0+dGFnLT50YWcpOworCQkJbi0+bWlzbmFtZWQgPSAxOworCQl9CisJCW4tPm5hbWVfY2hlY2tlZCA9IDE7CisJfQorCisJaWYgKG4tPnRhZykgeworCQlpZiAoYWxsKQorCQkJc3RyYnVmX2FkZHN0cihkc3QsICJ0YWdzLyIpOworCQlzdHJidWZfYWRkc3RyKGRzdCwgbi0+dGFnLT50YWcpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIoZHN0LCBuLT5wYXRoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdWZmaXgoaW50IGRlcHRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBzdHJidWYgKmRzdCkKK3sKKwlzdHJidWZfYWRkZihkc3QsICItJWQtZyVzIiwgZGVwdGgsIGZpbmRfdW5pcXVlX2FiYnJldihvaWQsIGFiYnJldikpOworfQorCitzdGF0aWMgdm9pZCBkZXNjcmliZV9jb21taXQoc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3Qgc3RyYnVmICpkc3QpCit7CisJc3RydWN0IGNvbW1pdCAqY21pdCwgKmdhdmVfdXBfb24gPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdDsKKwlzdHJ1Y3QgY29tbWl0X25hbWUgKm47CisJc3RydWN0IHBvc3NpYmxlX3RhZyBhbGxfbWF0Y2hlc1tNQVhfVEFHU107CisJdW5zaWduZWQgaW50IG1hdGNoX2NudCA9IDAsIGFubm90YXRlZF9jbnQgPSAwLCBjdXJfbWF0Y2g7CisJdW5zaWduZWQgbG9uZyBzZWVuX2NvbW1pdHMgPSAwOworCXVuc2lnbmVkIGludCB1bmFubm90YXRlZF9jbnQgPSAwOworCisJY21pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCisJbiA9IGZpbmRfY29tbWl0X25hbWUoJmNtaXQtPm9iamVjdC5vaWQpOworCWlmIChuICYmICh0YWdzIHx8IGFsbCB8fCBuLT5wcmlvID09IDIpKSB7CisJCS8qCisJCSAqIEV4YWN0IG1hdGNoIHRvIGFuIGV4aXN0aW5nIHJlZi4KKwkJICovCisJCWFwcGVuZF9uYW1lKG4sIGRzdCk7CisJCWlmIChuLT5taXNuYW1lZCB8fCBsb25nZm9ybWF0KQorCQkJYXBwZW5kX3N1ZmZpeCgwLCBuLT50YWcgPyBnZXRfdGFnZ2VkX29pZChuLT50YWcpIDogb2lkLCBkc3QpOworCQlpZiAoc3VmZml4KQorCQkJc3RyYnVmX2FkZHN0cihkc3QsIHN1ZmZpeCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIW1heF9jYW5kaWRhdGVzKQorCQlkaWUoXygibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIiksIG9pZF90b19oZXgoJmNtaXQtPm9iamVjdC5vaWQpKTsKKwlpZiAoZGVidWcpCisJCWZwcmludGYoc3RkZXJyLCBfKCJObyBleGFjdCBtYXRjaCBvbiByZWZzIG9yIHRhZ3MsIHNlYXJjaGluZyB0byBkZXNjcmliZVxuIikpOworCisJaWYgKCFoYXZlX3V0aWwpIHsKKwkJc3RydWN0IGhhc2htYXBfaXRlciBpdGVyOworCQlzdHJ1Y3QgY29tbWl0ICpjOworCQlzdHJ1Y3QgY29tbWl0X25hbWUgKm47CisKKwkJaW5pdF9jb21taXRfbmFtZXMoJmNvbW1pdF9uYW1lcyk7CisJCWhhc2htYXBfZm9yX2VhY2hfZW50cnkoJm5hbWVzLCAmaXRlciwgbiwKKwkJCQkJZW50cnkgLyogbWVtYmVyIG5hbWUgKi8pIHsKKwkJCWMgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJICAgJm4tPnBlZWxlZCwgMSk7CisJCQlpZiAoYykKKwkJCQkqY29tbWl0X25hbWVzX2F0KCZjb21taXRfbmFtZXMsIGMpID0gbjsKKwkJfQorCQloYXZlX3V0aWwgPSAxOworCX0KKworCWxpc3QgPSBOVUxMOworCWNtaXQtPm9iamVjdC5mbGFncyA9IFNFRU47CisJY29tbWl0X2xpc3RfaW5zZXJ0KGNtaXQsICZsaXN0KTsKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gcG9wX2NvbW1pdCgmbGlzdCk7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IGMtPnBhcmVudHM7CisJCXN0cnVjdCBjb21taXRfbmFtZSAqKnNsb3Q7CisKKwkJc2Vlbl9jb21taXRzKys7CisJCXNsb3QgPSBjb21taXRfbmFtZXNfcGVlaygmY29tbWl0X25hbWVzLCBjKTsKKwkJbiA9IHNsb3QgPyAqc2xvdCA6IE5VTEw7CisJCWlmIChuKSB7CisJCQlpZiAoIXRhZ3MgJiYgIWFsbCAmJiBuLT5wcmlvIDwgMikgeworCQkJCXVuYW5ub3RhdGVkX2NudCsrOworCQkJfSBlbHNlIGlmIChtYXRjaF9jbnQgPCBtYXhfY2FuZGlkYXRlcykgeworCQkJCXN0cnVjdCBwb3NzaWJsZV90YWcgKnQgPSAmYWxsX21hdGNoZXNbbWF0Y2hfY250KytdOworCQkJCXQtPm5hbWUgPSBuOworCQkJCXQtPmRlcHRoID0gc2Vlbl9jb21taXRzIC0gMTsKKwkJCQl0LT5mbGFnX3dpdGhpbiA9IDF1IDw8IG1hdGNoX2NudDsKKwkJCQl0LT5mb3VuZF9vcmRlciA9IG1hdGNoX2NudDsKKwkJCQljLT5vYmplY3QuZmxhZ3MgfD0gdC0+ZmxhZ193aXRoaW47CisJCQkJaWYgKG4tPnByaW8gPT0gMikKKwkJCQkJYW5ub3RhdGVkX2NudCsrOworCQkJfQorCQkJZWxzZSB7CisJCQkJZ2F2ZV91cF9vbiA9IGM7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZm9yIChjdXJfbWF0Y2ggPSAwOyBjdXJfbWF0Y2ggPCBtYXRjaF9jbnQ7IGN1cl9tYXRjaCsrKSB7CisJCQlzdHJ1Y3QgcG9zc2libGVfdGFnICp0ID0gJmFsbF9tYXRjaGVzW2N1cl9tYXRjaF07CisJCQlpZiAoIShjLT5vYmplY3QuZmxhZ3MgJiB0LT5mbGFnX3dpdGhpbikpCisJCQkJdC0+ZGVwdGgrKzsKKwkJfQorCQkvKiBTdG9wIGlmIGxhc3QgcmVtYWluaW5nIHBhdGggYWxyZWFkeSBjb3ZlcmVkIGJ5IGJlc3QgY2FuZGlkYXRlKHMpICovCisJCWlmIChhbm5vdGF0ZWRfY250ICYmICFsaXN0KSB7CisJCQlpbnQgYmVzdF9kZXB0aCA9IElOVF9NQVg7CisJCQl1bnNpZ25lZCBiZXN0X3dpdGhpbiA9IDA7CisJCQlmb3IgKGN1cl9tYXRjaCA9IDA7IGN1cl9tYXRjaCA8IG1hdGNoX2NudDsgY3VyX21hdGNoKyspIHsKKwkJCQlzdHJ1Y3QgcG9zc2libGVfdGFnICp0ID0gJmFsbF9tYXRjaGVzW2N1cl9tYXRjaF07CisJCQkJaWYgKHQtPmRlcHRoIDwgYmVzdF9kZXB0aCkgeworCQkJCQliZXN0X2RlcHRoID0gdC0+ZGVwdGg7CisJCQkJCWJlc3Rfd2l0aGluID0gdC0+ZmxhZ193aXRoaW47CisJCQkJfSBlbHNlIGlmICh0LT5kZXB0aCA9PSBiZXN0X2RlcHRoKSB7CisJCQkJCWJlc3Rfd2l0aGluIHw9IHQtPmZsYWdfd2l0aGluOworCQkJCX0KKwkJCX0KKwkJCWlmICgoYy0+b2JqZWN0LmZsYWdzICYgYmVzdF93aXRoaW4pID09IGJlc3Rfd2l0aGluKSB7CisJCQkJaWYgKGRlYnVnKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgXygiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iKSwKKwkJCQkJCW9pZF90b19oZXgoJmMtPm9iamVjdC5vaWQpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQl3aGlsZSAocGFyZW50cykgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudHMtPml0ZW07CisJCQlwYXJzZV9jb21taXQocCk7CisJCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBTRUVOKSkKKwkJCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShwLCAmbGlzdCk7CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gYy0+b2JqZWN0LmZsYWdzOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisKKwkJCWlmIChmaXJzdF9wYXJlbnQpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIW1hdGNoX2NudCkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkICpjbWl0X29pZCA9ICZjbWl0LT5vYmplY3Qub2lkOworCQlpZiAoYWx3YXlzKSB7CisJCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoZHN0LCBjbWl0X29pZCwgYWJicmV2KTsKKwkJCWlmIChzdWZmaXgpCisJCQkJc3RyYnVmX2FkZHN0cihkc3QsIHN1ZmZpeCk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHVuYW5ub3RhdGVkX2NudCkKKwkJCWRpZShfKCJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKwkJCSAgICAiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIpLAorCQkJICAgIG9pZF90b19oZXgoY21pdF9vaWQpKTsKKwkJZWxzZQorCQkJZGllKF8oIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisJCQkgICAgIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iKSwKKwkJCSAgICBvaWRfdG9faGV4KGNtaXRfb2lkKSk7CisJfQorCisJUVNPUlQoYWxsX21hdGNoZXMsIG1hdGNoX2NudCwgY29tcGFyZV9wdCk7CisKKwlpZiAoZ2F2ZV91cF9vbikgeworCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShnYXZlX3VwX29uLCAmbGlzdCk7CisJCXNlZW5fY29tbWl0cy0tOworCX0KKwlzZWVuX2NvbW1pdHMgKz0gZmluaXNoX2RlcHRoX2NvbXB1dGF0aW9uKCZsaXN0LCAmYWxsX21hdGNoZXNbMF0pOworCWZyZWVfY29tbWl0X2xpc3QobGlzdCk7CisKKwlpZiAoZGVidWcpIHsKKwkJc3RhdGljIGludCBsYWJlbF93aWR0aCA9IC0xOworCQlpZiAobGFiZWxfd2lkdGggPCAwKSB7CisJCQlpbnQgaSwgdzsKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByaW9fbmFtZXMpOyBpKyspIHsKKwkJCQl3ID0gc3RybGVuKF8ocHJpb19uYW1lc1tpXSkpOworCQkJCWlmIChsYWJlbF93aWR0aCA8IHcpCisJCQkJCWxhYmVsX3dpZHRoID0gdzsKKwkJCX0KKwkJfQorCQlmb3IgKGN1cl9tYXRjaCA9IDA7IGN1cl9tYXRjaCA8IG1hdGNoX2NudDsgY3VyX21hdGNoKyspIHsKKwkJCXN0cnVjdCBwb3NzaWJsZV90YWcgKnQgPSAmYWxsX21hdGNoZXNbY3VyX21hdGNoXTsKKwkJCWZwcmludGYoc3RkZXJyLCAiICUtKnMgJThkICVzXG4iLAorCQkJCWxhYmVsX3dpZHRoLCBfKHByaW9fbmFtZXNbdC0+bmFtZS0+cHJpb10pLAorCQkJCXQtPmRlcHRoLCB0LT5uYW1lLT5wYXRoKTsKKwkJfQorCQlmcHJpbnRmKHN0ZGVyciwgXygidHJhdmVyc2VkICVsdSBjb21taXRzXG4iKSwgc2Vlbl9jb21taXRzKTsKKwkJaWYgKGdhdmVfdXBfb24pIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCV8oIm1vcmUgdGhhbiAlaSB0YWdzIGZvdW5kOyBsaXN0ZWQgJWkgbW9zdCByZWNlbnRcbiIKKwkJCQkiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIpLAorCQkJCW1heF9jYW5kaWRhdGVzLCBtYXhfY2FuZGlkYXRlcywKKwkJCQlvaWRfdG9faGV4KCZnYXZlX3VwX29uLT5vYmplY3Qub2lkKSk7CisJCX0KKwl9CisKKwlhcHBlbmRfbmFtZShhbGxfbWF0Y2hlc1swXS5uYW1lLCBkc3QpOworCWlmIChhbGxfbWF0Y2hlc1swXS5uYW1lLT5taXNuYW1lZCB8fCBhYmJyZXYpCisJCWFwcGVuZF9zdWZmaXgoYWxsX21hdGNoZXNbMF0uZGVwdGgsICZjbWl0LT5vYmplY3Qub2lkLCBkc3QpOworCWlmIChzdWZmaXgpCisJCXN0cmJ1Zl9hZGRzdHIoZHN0LCBzdWZmaXgpOworfQorCitzdHJ1Y3QgcHJvY2Vzc19jb21taXRfZGF0YSB7CisJc3RydWN0IG9iamVjdF9pZCBjdXJyZW50X2NvbW1pdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGxvb2tpbmdfZm9yOworCXN0cnVjdCBzdHJidWYgKmRzdDsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7Cit9OworCitzdGF0aWMgdm9pZCBwcm9jZXNzX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHByb2Nlc3NfY29tbWl0X2RhdGEgKnBjZCA9IGRhdGE7CisJcGNkLT5jdXJyZW50X2NvbW1pdCA9IGNvbW1pdC0+b2JqZWN0Lm9pZDsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwcm9jZXNzX2NvbW1pdF9kYXRhICpwY2QgPSBkYXRhOworCisJaWYgKG9pZGVxKCZwY2QtPmxvb2tpbmdfZm9yLCAmb2JqLT5vaWQpICYmICFwY2QtPmRzdC0+bGVuKSB7CisJCXJlc2V0X3JldmlzaW9uX3dhbGsoKTsKKwkJZGVzY3JpYmVfY29tbWl0KCZwY2QtPmN1cnJlbnRfY29tbWl0LCBwY2QtPmRzdCk7CisJCXN0cmJ1Zl9hZGRmKHBjZC0+ZHN0LCAiOiVzIiwgcGF0aCk7CisJCWZyZWVfY29tbWl0X2xpc3QocGNkLT5yZXZzLT5jb21taXRzKTsKKwkJcGNkLT5yZXZzLT5jb21taXRzID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRlc2NyaWJlX2Jsb2Ioc3RydWN0IG9iamVjdF9pZCBvaWQsIHN0cnVjdCBzdHJidWYgKmRzdCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCXN0cnVjdCBwcm9jZXNzX2NvbW1pdF9kYXRhIHBjZCA9IHsgbnVsbF9vaWQsIG9pZCwgZHN0LCAmcmV2c307CisKKwlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAiaW50ZXJuYWw6IFRoZSBmaXJzdCBhcmcgaXMgbm90IHBhcnNlZCIsCisJCSItLW9iamVjdHMiLCAiLS1pbi1jb21taXQtb3JkZXIiLCAiLS1yZXZlcnNlIiwgIkhFQUQiLAorCQlOVUxMKTsKKworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXZzLCBOVUxMKTsKKwlpZiAoc2V0dXBfcmV2aXNpb25zKGFyZ3MuYXJnYywgYXJncy5hcmd2LCAmcmV2cywgTlVMTCkgPiAxKQorCQlCVUcoInNldHVwX3JldmlzaW9ucyBjb3VsZCBub3QgaGFuZGxlIGFsbCBhcmdzPyIpOworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKworCXRyYXZlcnNlX2NvbW1pdF9saXN0KCZyZXZzLCBwcm9jZXNzX2NvbW1pdCwgcHJvY2Vzc19vYmplY3QsICZwY2QpOworCXJlc2V0X3JldmlzaW9uX3dhbGsoKTsKK30KKworc3RhdGljIHZvaWQgZGVzY3JpYmUoY29uc3QgY2hhciAqYXJnLCBpbnQgbGFzdF9vbmUpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IGNvbW1pdCAqY21pdDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoZGVidWcpCisJCWZwcmludGYoc3RkZXJyLCBfKCJkZXNjcmliZSAlc1xuIiksIGFyZyk7CisKKwlpZiAoZ2V0X29pZChhcmcsICZvaWQpKQorCQlkaWUoXygiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiKSwgYXJnKTsKKwljbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LCAmb2lkLCAxKTsKKworCWlmIChjbWl0KQorCQlkZXNjcmliZV9jb21taXQoJm9pZCwgJnNiKTsKKwllbHNlIGlmIChvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksICZvaWQsIE5VTEwpID09IE9CSl9CTE9CKQorCQlkZXNjcmliZV9ibG9iKG9pZCwgJnNiKTsKKwllbHNlCisJCWRpZShfKCIlcyBpcyBuZWl0aGVyIGEgY29tbWl0IG5vciBibG9iIiksIGFyZyk7CisKKwlwdXRzKHNiLmJ1Zik7CisKKwlpZiAoIWxhc3Rfb25lKQorCQljbGVhcl9jb21taXRfbWFya3MoY21pdCwgLTEpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworaW50IGNtZF9kZXNjcmliZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgY29udGFpbnMgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgwLCAiY29udGFpbnMiLCAgICZjb250YWlucywgTl8oImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiKSksCisJCU9QVF9CT09MKDAsICJkZWJ1ZyIsICAgICAgJmRlYnVnLCBOXygiZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVyciIpKSwKKwkJT1BUX0JPT0woMCwgImFsbCIsICAgICAgICAmYWxsLCBOXygidXNlIGFueSByZWYiKSksCisJCU9QVF9CT09MKDAsICJ0YWdzIiwgICAgICAgJnRhZ3MsIE5fKCJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIpKSwKKwkJT1BUX0JPT0woMCwgImxvbmciLCAgICAgICAmbG9uZ2Zvcm1hdCwgTl8oImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiKSksCisJCU9QVF9CT09MKDAsICJmaXJzdC1wYXJlbnQiLCAmZmlyc3RfcGFyZW50LCBOXygib25seSBmb2xsb3cgZmlyc3QgcGFyZW50IikpLAorCQlPUFRfX0FCQlJFVigmYWJicmV2KSwKKwkJT1BUX1NFVF9JTlQoMCwgImV4YWN0LW1hdGNoIiwgJm1heF9jYW5kaWRhdGVzLAorCQkJICAgIE5fKCJvbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIiksIDApLAorCQlPUFRfSU5URUdFUigwLCAiY2FuZGlkYXRlcyIsICZtYXhfY2FuZGlkYXRlcywKKwkJCSAgICBOXygiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIpKSwKKwkJT1BUX1NUUklOR19MSVNUKDAsICJtYXRjaCIsICZwYXR0ZXJucywgTl8oInBhdHRlcm4iKSwKKwkJCSAgIE5fKCJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IikpLAorCQlPUFRfU1RSSU5HX0xJU1QoMCwgImV4Y2x1ZGUiLCAmZXhjbHVkZV9wYXR0ZXJucywgTl8oInBhdHRlcm4iKSwKKwkJCSAgIE5fKCJkbyBub3QgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iKSksCisJCU9QVF9CT09MKDAsICJhbHdheXMiLCAgICAgICAgJmFsd2F5cywKKwkJCU5fKCJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siKSksCisJCXtPUFRJT05fU1RSSU5HLCAwLCAiZGlydHkiLCAgJmRpcnR5LCBOXygibWFyayIpLAorCQkJTl8oImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIpLAorCQkJUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSAiLWRpcnR5In0sCisJCXtPUFRJT05fU1RSSU5HLCAwLCAiYnJva2VuIiwgICZicm9rZW4sIE5fKCJtYXJrIiksCisJCQlOXygiYXBwZW5kIDxtYXJrPiBvbiBicm9rZW4gd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1icm9rZW5cIikiKSwKKwkJCVBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdCkgIi1icm9rZW4ifSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBkZXNjcmliZV91c2FnZSwgMCk7CisJaWYgKGFiYnJldiA8IDApCisJCWFiYnJldiA9IERFRkFVTFRfQUJCUkVWOworCisJaWYgKG1heF9jYW5kaWRhdGVzIDwgMCkKKwkJbWF4X2NhbmRpZGF0ZXMgPSAwOworCWVsc2UgaWYgKG1heF9jYW5kaWRhdGVzID4gTUFYX1RBR1MpCisJCW1heF9jYW5kaWRhdGVzID0gTUFYX1RBR1M7CisKKwlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOworCisJaWYgKGxvbmdmb3JtYXQgJiYgYWJicmV2ID09IDApCisJCWRpZShfKCItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIpKTsKKworCWlmIChjb250YWlucykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgYXJnczsKKworCQlhcmd2X2FycmF5X2luaXQoJmFyZ3MpOworCQlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAibmFtZS1yZXYiLAorCQkJCSAiLS1wZWVsLXRhZyIsICItLW5hbWUtb25seSIsICItLW5vLXVuZGVmaW5lZCIsCisJCQkJIE5VTEwpOworCQlpZiAoYWx3YXlzKQorCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1hbHdheXMiKTsKKwkJaWYgKCFhbGwpIHsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tdGFncyIpOworCQkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmcGF0dGVybnMpCisJCQkJYXJndl9hcnJheV9wdXNoZigmYXJncywgIi0tcmVmcz1yZWZzL3RhZ3MvJXMiLCBpdGVtLT5zdHJpbmcpOworCQkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZXhjbHVkZV9wYXR0ZXJucykKKwkJCQlhcmd2X2FycmF5X3B1c2hmKCZhcmdzLCAiLS1leGNsdWRlPXJlZnMvdGFncy8lcyIsIGl0ZW0tPnN0cmluZyk7CisJCX0KKwkJaWYgKGFyZ2MpCisJCQlhcmd2X2FycmF5X3B1c2h2KCZhcmdzLCBhcmd2KTsKKwkJZWxzZQorCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiSEVBRCIpOworCQlyZXR1cm4gY21kX25hbWVfcmV2KGFyZ3MuYXJnYywgYXJncy5hcmd2LCBwcmVmaXgpOworCX0KKworCWhhc2htYXBfaW5pdCgmbmFtZXMsIGNvbW1pdF9uYW1lX25lcSwgTlVMTCwgMCk7CisJZm9yX2VhY2hfcmF3cmVmKGdldF9uYW1lLCBOVUxMKTsKKwlpZiAoIWhhc2htYXBfZ2V0X3NpemUoJm5hbWVzKSAmJiAhYWx3YXlzKQorCQlkaWUoXygiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iKSk7CisKKwlpZiAoYXJnYyA9PSAwKSB7CisJCWlmIChicm9rZW4pIHsKKwkJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQkJYXJndl9hcnJheV9wdXNodigmY3AuYXJncywgZGlmZl9pbmRleF9hcmdzKTsKKwkJCWNwLmdpdF9jbWQgPSAxOworCQkJY3Aubm9fc3RkaW4gPSAxOworCQkJY3Aubm9fc3Rkb3V0ID0gMTsKKworCQkJaWYgKCFkaXJ0eSkKKwkJCQlkaXJ0eSA9ICItZGlydHkiOworCisJCQlzd2l0Y2ggKHJ1bl9jb21tYW5kKCZjcCkpIHsKKwkJCWNhc2UgMDoKKwkJCQlzdWZmaXggPSBOVUxMOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXN1ZmZpeCA9IGRpcnR5OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBkaWZmLWluZGV4IGFib3J0ZWQgYWJub3JtYWxseSAqLworCQkJCXN1ZmZpeCA9IGJyb2tlbjsKKwkJCX0KKwkJfSBlbHNlIGlmIChkaXJ0eSkgeworCQkJc3RydWN0IGxvY2tfZmlsZSBpbmRleF9sb2NrID0gTE9DS19JTklUOworCQkJc3RydWN0IHJldl9pbmZvIHJldnM7CisJCQlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCQkJaW50IGZkLCByZXN1bHQ7CisKKwkJCXNldHVwX3dvcmtfdHJlZSgpOworCQkJcmVhZF9jYWNoZSgpOworCQkJcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCBSRUZSRVNIX1FVSUVUfFJFRlJFU0hfVU5NRVJHRUQsCisJCQkJICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQlmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZpbmRleF9sb2NrLCAwKTsKKwkJCWlmICgwIDw9IGZkKQorCQkJCXJlcG9fdXBkYXRlX2luZGV4X2lmX2FibGUodGhlX3JlcG9zaXRvcnksICZpbmRleF9sb2NrKTsKKworCQkJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldnMsIHByZWZpeCk7CisJCQlhcmd2X2FycmF5X3B1c2h2KCZhcmdzLCBkaWZmX2luZGV4X2FyZ3MpOworCQkJaWYgKHNldHVwX3JldmlzaW9ucyhhcmdzLmFyZ2MsIGFyZ3MuYXJndiwgJnJldnMsIE5VTEwpICE9IDEpCisJCQkJQlVHKCJtYWxmb3JtZWQgaW50ZXJuYWwgZGlmZi1pbmRleCBjb21tYW5kIGxpbmUiKTsKKwkJCXJlc3VsdCA9IHJ1bl9kaWZmX2luZGV4KCZyZXZzLCAwKTsKKworCQkJaWYgKCFkaWZmX3Jlc3VsdF9jb2RlKCZyZXZzLmRpZmZvcHQsIHJlc3VsdCkpCisJCQkJc3VmZml4ID0gTlVMTDsKKwkJCWVsc2UKKwkJCQlzdWZmaXggPSBkaXJ0eTsKKwkJfQorCQlkZXNjcmliZSgiSEVBRCIsIDEpOworCX0gZWxzZSBpZiAoZGlydHkpIHsKKwkJZGllKF8oIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIikpOworCX0gZWxzZSBpZiAoYnJva2VuKSB7CisJCWRpZShfKCItLWJyb2tlbiBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiKSk7CisJfSBlbHNlIHsKKwkJd2hpbGUgKGFyZ2MtLSA+IDApCisJCQlkZXNjcmliZSgqYXJndisrLCBhcmdjID09IDApOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZGlmZi1maWxlcy5jIGIvYnVpbHRpbi9kaWZmLWZpbGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhZTQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZGlmZi1maWxlcy5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciBkaWZmX2ZpbGVzX3VzYWdlW10gPQorImdpdCBkaWZmLWZpbGVzIFstcV0gWy0wIHwgLTEgfCAtMiB8IC0zIHwgLWMgfCAtLWNjXSBbPGNvbW1vbi1kaWZmLW9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK0NPTU1PTl9ESUZGX09QVElPTlNfSEVMUDsKKworaW50IGNtZF9kaWZmX2ZpbGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBvcHRpb25zID0gMDsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UoZGlmZl9maWxlc191c2FnZSk7CisKKwlnaXRfY29uZmlnKGdpdF9kaWZmX2Jhc2ljX2NvbmZpZywgTlVMTCk7IC8qIG5vICJkaWZmIiBVSSBvcHRpb25zICovCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldiwgcHJlZml4KTsKKwlyZXYuYWJicmV2ID0gMDsKKwlwcmVjb21wb3NlX2FyZ3YoYXJnYywgYXJndik7CisKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsIE5VTEwpOworCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgeworCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1iYXNlIikpCisJCQlyZXYubWF4X2NvdW50ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1vdXJzIikpCisJCQlyZXYubWF4X2NvdW50ID0gMjsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS10aGVpcnMiKSkKKwkJCXJldi5tYXhfY291bnQgPSAzOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItcSIpKQorCQkJb3B0aW9ucyB8PSBESUZGX1NJTEVOVF9PTl9SRU1PVkVEOworCQllbHNlCisJCQl1c2FnZShkaWZmX2ZpbGVzX3VzYWdlKTsKKwkJYXJndisrOyBhcmdjLS07CisJfQorCWlmICghcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkKKwkJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1JBVzsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZXJlIGFyZSBOTyByZXZpc2lvbiAoaS5lLiBwZW5kaW5nIG9iamVjdCkgcGFyYW1ldGVyLAorCSAqIHJldi5tYXhfY291bnQgaXMgcmVhc29uYWJsZSAoMCA8PSBuIDw9IDMpLCBhbmQKKwkgKiB0aGVyZSBpcyBubyBvdGhlciByZXZpc2lvbiBmaWx0ZXJpbmcgcGFyYW1ldGVycy4KKwkgKi8KKwlpZiAocmV2LnBlbmRpbmcubnIgfHwKKwkgICAgcmV2Lm1pbl9hZ2UgIT0gLTEgfHwgcmV2Lm1heF9hZ2UgIT0gLTEgfHwKKwkgICAgMyA8IHJldi5tYXhfY291bnQpCisJCXVzYWdlKGRpZmZfZmlsZXNfdXNhZ2UpOworCisJLyoKKwkgKiAiZGlmZi1maWxlcyAtLWJhc2UgLXAiIHNob3VsZCBub3QgY29tYmluZSBtZXJnZXMgYmVjYXVzZSBpdAorCSAqIHdhcyBub3QgYXNrZWQgdG8uICAiZGlmZi1maWxlcyAtYyAtcCIgc2hvdWxkIG5vdCBkZW5zaWZ5CisJICogKHRoZSB1c2VyIHNob3VsZCBhc2sgd2l0aCAiZGlmZi1maWxlcyAtLWNjIiBleHBsaWNpdGx5KS4KKwkgKi8KKwlpZiAocmV2Lm1heF9jb3VudCA9PSAtMSAmJiAhcmV2LmNvbWJpbmVfbWVyZ2VzICYmCisJICAgIChyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfUEFUQ0gpKQorCQlyZXYuY29tYmluZV9tZXJnZXMgPSByZXYuZGVuc2VfY29tYmluZWRfbWVyZ2VzID0gMTsKKworCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQoJnJldi5kaWZmb3B0LnBhdGhzcGVjKSA8IDApIHsKKwkJcGVycm9yKCJyZWFkX2NhY2hlX3ByZWxvYWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXN1bHQgPSBydW5fZGlmZl9maWxlcygmcmV2LCBvcHRpb25zKTsKKwlyZXR1cm4gZGlmZl9yZXN1bHRfY29kZSgmcmV2LmRpZmZvcHQsIHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2RpZmYtaW5kZXguYyBiL2J1aWx0aW4vZGlmZi1pbmRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZWM2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2RpZmYtaW5kZXguYwpAQCAtMCwwICsxLDYyIEBACisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgZGlmZl9jYWNoZV91c2FnZVtdID0KKyJnaXQgZGlmZi1pbmRleCBbLW1dIFstLWNhY2hlZF0gIgorIls8Y29tbW9uLWRpZmYtb3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCitDT01NT05fRElGRl9PUFRJT05TX0hFTFA7CisKK2ludCBjbWRfZGlmZl9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCWludCBjYWNoZWQgPSAwOworCWludCBpOworCWludCByZXN1bHQ7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlKGRpZmZfY2FjaGVfdXNhZ2UpOworCisJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOyAvKiBubyAiZGlmZiIgVUkgb3B0aW9ucyAqLworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIHByZWZpeCk7CisJcmV2LmFiYnJldiA9IDA7CisJcHJlY29tcG9zZV9hcmd2KGFyZ2MsIGFyZ3YpOworCisJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2LCBOVUxMKTsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1jYWNoZWQiKSkKKwkJCWNhY2hlZCA9IDE7CisJCWVsc2UKKwkJCXVzYWdlKGRpZmZfY2FjaGVfdXNhZ2UpOworCX0KKwlpZiAoIXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpCisJCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9SQVc7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGVyZSBpcyBvbmUgcmV2aXNpb24gKGkuZS4gcGVuZGluZyBvYmplY3QpLAorCSAqIGFuZCB0aGVyZSBpcyBubyByZXZpc2lvbiBmaWx0ZXJpbmcgcGFyYW1ldGVycy4KKwkgKi8KKwlpZiAocmV2LnBlbmRpbmcubnIgIT0gMSB8fAorCSAgICByZXYubWF4X2NvdW50ICE9IC0xIHx8IHJldi5taW5fYWdlICE9IC0xIHx8IHJldi5tYXhfYWdlICE9IC0xKQorCQl1c2FnZShkaWZmX2NhY2hlX3VzYWdlKTsKKwlpZiAoIWNhY2hlZCkgeworCQlzZXR1cF93b3JrX3RyZWUoKTsKKwkJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZCgmcmV2LmRpZmZvcHQucGF0aHNwZWMpIDwgMCkgeworCQkJcGVycm9yKCJyZWFkX2NhY2hlX3ByZWxvYWQiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0gZWxzZSBpZiAocmVhZF9jYWNoZSgpIDwgMCkgeworCQlwZXJyb3IoInJlYWRfY2FjaGUiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXN1bHQgPSBydW5fZGlmZl9pbmRleCgmcmV2LCBjYWNoZWQpOworCVVOTEVBSyhyZXYpOworCXJldHVybiBkaWZmX3Jlc3VsdF9jb2RlKCZyZXYuZGlmZm9wdCwgcmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZGlmZi10cmVlLmMgYi9idWlsdGluL2RpZmYtdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMjM2M2QKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2RpZmYtdHJlZS5jCkBAIC0wLDAgKzEsMjA1IEBACisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisKK3N0YXRpYyBzdHJ1Y3QgcmV2X2luZm8gbG9nX3RyZWVfb3B0OworCitzdGF0aWMgaW50IGRpZmZfdHJlZV9jb21taXRfb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBsb2dfdHJlZV9jb21taXQoJmxvZ190cmVlX29wdCwgY29tbWl0KTsKK30KKworLyogRGlmZiBvbmUgb3IgbW9yZSBjb21taXRzLiAqLworc3RhdGljIGludCBzdGRpbl9kaWZmX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKnApCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcHB0ciA9IE5VTEw7CisKKwkvKiBHcmFmdCB0aGUgZmFrZSBwYXJlbnRzIGxvY2FsbHkgdG8gdGhlIGNvbW1pdCAqLworCXdoaWxlIChpc3NwYWNlKCpwKyspICYmICFwYXJzZV9vaWRfaGV4KHAsICZvaWQsICZwKSkgeworCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwkJaWYgKCFwcHRyKSB7CisJCQkvKiBGcmVlIHRoZSByZWFsIHBhcmVudCBsaXN0ICovCisJCQlmcmVlX2NvbW1pdF9saXN0KGNvbW1pdC0+cGFyZW50cyk7CisJCQljb21taXQtPnBhcmVudHMgPSBOVUxMOworCQkJcHB0ciA9ICYoY29tbWl0LT5wYXJlbnRzKTsKKwkJfQorCQlpZiAocGFyZW50KSB7CisJCQlwcHRyID0gJmNvbW1pdF9saXN0X2luc2VydChwYXJlbnQsIHBwdHIpLT5uZXh0OworCQl9CisJfQorCXJldHVybiBsb2dfdHJlZV9jb21taXQoJmxvZ190cmVlX29wdCwgY29tbWl0KTsKK30KKworLyogRGlmZiB0d28gdHJlZXMuICovCitzdGF0aWMgaW50IHN0ZGluX2RpZmZfdHJlZXMoc3RydWN0IHRyZWUgKnRyZWUxLCBjb25zdCBjaGFyICpwKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCB0cmVlICp0cmVlMjsKKwlpZiAoIWlzc3BhY2UoKnArKykgfHwgcGFyc2Vfb2lkX2hleChwLCAmb2lkLCAmcCkgfHwgKnApCisJCXJldHVybiBlcnJvcigiTmVlZCBleGFjdGx5IHR3byB0cmVlcywgc2VwYXJhdGVkIGJ5IGEgc3BhY2UiKTsKKwl0cmVlMiA9IGxvb2t1cF90cmVlKHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwlpZiAoIXRyZWUyIHx8IHBhcnNlX3RyZWUodHJlZTIpKQorCQlyZXR1cm4gLTE7CisJcHJpbnRmKCIlcyAlc1xuIiwgb2lkX3RvX2hleCgmdHJlZTEtPm9iamVjdC5vaWQpLAorCQkJICBvaWRfdG9faGV4KCZ0cmVlMi0+b2JqZWN0Lm9pZCkpOworCWRpZmZfdHJlZV9vaWQoJnRyZWUxLT5vYmplY3Qub2lkLCAmdHJlZTItPm9iamVjdC5vaWQsCisJCSAgICAgICIiLCAmbG9nX3RyZWVfb3B0LmRpZmZvcHQpOworCWxvZ190cmVlX2RpZmZfZmx1c2goJmxvZ190cmVlX29wdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl90cmVlX3N0ZGluKGNoYXIgKmxpbmUpCit7CisJaW50IGxlbiA9IHN0cmxlbihsaW5lKTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJY29uc3QgY2hhciAqcDsKKworCWlmICghbGVuIHx8IGxpbmVbbGVuLTFdICE9ICdcbicpCisJCXJldHVybiAtMTsKKwlsaW5lW2xlbi0xXSA9IDA7CisJaWYgKHBhcnNlX29pZF9oZXgobGluZSwgJm9pZCwgJnApKQorCQlyZXR1cm4gLTE7CisJb2JqID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIC0xOworCWlmIChvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIHN0ZGluX2RpZmZfY29tbWl0KChzdHJ1Y3QgY29tbWl0ICopb2JqLCBwKTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKQorCQlyZXR1cm4gc3RkaW5fZGlmZl90cmVlcygoc3RydWN0IHRyZWUgKilvYmosIHApOworCWVycm9yKCJPYmplY3QgJXMgaXMgYSAlcywgbm90IGEgY29tbWl0IG9yIHRyZWUiLAorCSAgICAgIG9pZF90b19oZXgoJm9pZCksIHR5cGVfbmFtZShvYmotPnR5cGUpKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGRpZmZfdHJlZV91c2FnZVtdID0KKyJnaXQgZGlmZi10cmVlIFstLXN0ZGluXSBbLW1dIFstYyB8IC0tY2NdIFstc10gWy12XSBbLS1wcmV0dHldIFstdF0gWy1yXSBbLS1yb290XSAiCisiWzxjb21tb24tZGlmZi1vcHRpb25zPl0gPHRyZWUtaXNoPiBbPHRyZWUtaXNoPl0gWzxwYXRoPi4uLl1cbiIKKyIgIC1yICAgICAgICAgICAgZGlmZiByZWN1cnNpdmVseVxuIgorIiAgLWMgICAgICAgICAgICBzaG93IGNvbWJpbmVkIGRpZmYgZm9yIG1lcmdlIGNvbW1pdHNcbiIKKyIgIC0tY2MgICAgICAgICAgc2hvdyBjb21iaW5lZCBkaWZmIGZvciBtZXJnZSBjb21taXRzIHJlbW92aW5nIHVuaW50ZXJlc3RpbmcgaHVua3NcbiIKKyIgIC0tY29tYmluZWQtYWxsLXBhdGhzXG4iCisiICAgICAgICAgICAgICAgIHNob3cgbmFtZSBvZiBmaWxlIGluIGFsbCBwYXJlbnRzIGZvciBjb21iaW5lZCBkaWZmc1xuIgorIiAgLS1yb290ICAgICAgICBpbmNsdWRlIHRoZSBpbml0aWFsIGNvbW1pdCBhcyBkaWZmIGFnYWluc3QgL2Rldi9udWxsXG4iCitDT01NT05fRElGRl9PUFRJT05TX0hFTFA7CisKK3N0YXRpYyB2b2lkIGRpZmZfdHJlZV90d2Vha19yZXYoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgKm9wdCkKK3sKKwlpZiAoIXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0KSB7CisJCWlmIChyZXYtPmRlbnNlX2NvbWJpbmVkX21lcmdlcykKKwkJCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisJCWVsc2UKKwkJCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUkFXOworCX0KK30KKworaW50IGNtZF9kaWZmX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY2hhciBsaW5lWzEwMDBdOworCXN0cnVjdCBvYmplY3QgKnRyZWUxLCAqdHJlZTI7CisJc3RhdGljIHN0cnVjdCByZXZfaW5mbyAqb3B0ID0gJmxvZ190cmVlX29wdDsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IHNfcl9vcHQ7CisJc3RydWN0IHVzZXJmb3JtYXRfd2FudCB3OworCWludCByZWFkX3N0ZGluID0gMDsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UoZGlmZl90cmVlX3VzYWdlKTsKKworCWdpdF9jb25maWcoZ2l0X2RpZmZfYmFzaWNfY29uZmlnLCBOVUxMKTsgLyogbm8gImRpZmYiIFVJIG9wdGlvbnMgKi8KKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCBvcHQsIHByZWZpeCk7CisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZShfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CisJb3B0LT5hYmJyZXYgPSAwOworCW9wdC0+ZGlmZiA9IDE7CisJb3B0LT5kaXNhYmxlX3N0ZGluID0gMTsKKwltZW1zZXQoJnNfcl9vcHQsIDAsIHNpemVvZihzX3Jfb3B0KSk7CisJc19yX29wdC50d2VhayA9IGRpZmZfdHJlZV90d2Vha19yZXY7CisKKwlwcmVjb21wb3NlX2FyZ3YoYXJnYywgYXJndik7CisJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCBvcHQsICZzX3Jfb3B0KTsKKworCW1lbXNldCgmdywgMCwgc2l6ZW9mKHcpKTsKKwl1c2VyZm9ybWF0X2ZpbmRfcmVxdWlyZW1lbnRzKE5VTEwsICZ3KTsKKworCWlmICghb3B0LT5zaG93X25vdGVzX2dpdmVuICYmIHcubm90ZXMpCisJCW9wdC0+c2hvd19ub3RlcyA9IDE7CisJaWYgKG9wdC0+c2hvd19ub3RlcykKKwkJbG9hZF9kaXNwbGF5X25vdGVzKCZvcHQtPm5vdGVzX29wdCk7CisKKwl3aGlsZSAoLS1hcmdjID4gMCkgeworCQljb25zdCBjaGFyICphcmcgPSAqKythcmd2OworCisJCWlmICghc3RyY21wKGFyZywgIi0tc3RkaW4iKSkgeworCQkJcmVhZF9zdGRpbiA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQl1c2FnZShkaWZmX3RyZWVfdXNhZ2UpOworCX0KKworCS8qCisJICogTk9URSEgIFdlIGV4cGVjdCAiYS4uYiIgdG8gZXhwYW5kIHRvICJeYSBiIiBidXQgaXQgaXMKKwkgKiBwZXJmZWN0bHkgdmFsaWQgZm9yIHJldmlzaW9uIHJhbmdlIHBhcnNlciB0byB5aWVsZCAiYiBeYSIsCisJICogd2hpY2ggbWVhbnMgdGhlIHNhbWUgdGhpbmcuIElmIHdlIGdldCB0aGUgbGF0dGVyLCBpLmUuIHRoZQorCSAqIHNlY29uZCBvbmUgaXMgbWFya2VkIFVOSU5URVJFU1RJTkcsIHdlIHJlY292ZXIgdGhlIG9yaWdpbmFsCisJICogb3JkZXIgdGhlIHVzZXIgZ2F2ZSwgaS5lLiAiYS4uYiIsIGJ5IHN3YXBwaW5nIHRoZSB0cmVlcy4KKwkgKi8KKwlzd2l0Y2ggKG9wdC0+cGVuZGluZy5ucikgeworCWNhc2UgMDoKKwkJaWYgKCFyZWFkX3N0ZGluKQorCQkJdXNhZ2UoZGlmZl90cmVlX3VzYWdlKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl0cmVlMSA9IG9wdC0+cGVuZGluZy5vYmplY3RzWzBdLml0ZW07CisJCWRpZmZfdHJlZV9jb21taXRfb2lkKCZ0cmVlMS0+b2lkKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl0cmVlMSA9IG9wdC0+cGVuZGluZy5vYmplY3RzWzBdLml0ZW07CisJCXRyZWUyID0gb3B0LT5wZW5kaW5nLm9iamVjdHNbMV0uaXRlbTsKKwkJaWYgKHRyZWUyLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKKwkJCVNXQVAodHJlZTIsIHRyZWUxKTsKKwkJfQorCQlkaWZmX3RyZWVfb2lkKCZ0cmVlMS0+b2lkLCAmdHJlZTItPm9pZCwgIiIsICZvcHQtPmRpZmZvcHQpOworCQlsb2dfdHJlZV9kaWZmX2ZsdXNoKG9wdCk7CisJCWJyZWFrOworCX0KKworCWlmIChyZWFkX3N0ZGluKSB7CisJCWludCBzYXZlZF9ucmwgPSAwOworCQlpbnQgc2F2ZWRfZGNjdGMgPSAwOworCisJCWlmIChvcHQtPmRpZmZvcHQuZGV0ZWN0X3JlbmFtZSkgeworCQkJaWYgKCF0aGVfaW5kZXguY2FjaGUpCisJCQkJcmVwb19yZWFkX2luZGV4KHRoZV9yZXBvc2l0b3J5KTsKKwkJCW9wdC0+ZGlmZm9wdC5zZXR1cCB8PSBESUZGX1NFVFVQX1VTRV9TSVpFX0NBQ0hFOworCQl9CisJCXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIHN0ZGluKSkgeworCQkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJCWlmIChnZXRfb2lkX2hleChsaW5lLCAmb2lkKSkgeworCQkJCWZwdXRzKGxpbmUsIHN0ZG91dCk7CisJCQkJZmZsdXNoKHN0ZG91dCk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlkaWZmX3RyZWVfc3RkaW4obGluZSk7CisJCQkJaWYgKHNhdmVkX25ybCA8IG9wdC0+ZGlmZm9wdC5uZWVkZWRfcmVuYW1lX2xpbWl0KQorCQkJCQlzYXZlZF9ucmwgPSBvcHQtPmRpZmZvcHQubmVlZGVkX3JlbmFtZV9saW1pdDsKKwkJCQlpZiAob3B0LT5kaWZmb3B0LmRlZ3JhZGVkX2NjX3RvX2MpCisJCQkJCXNhdmVkX2RjY3RjID0gMTsKKwkJCX0KKwkJfQorCQlvcHQtPmRpZmZvcHQuZGVncmFkZWRfY2NfdG9fYyA9IHNhdmVkX2RjY3RjOworCQlvcHQtPmRpZmZvcHQubmVlZGVkX3JlbmFtZV9saW1pdCA9IHNhdmVkX25ybDsKKwl9CisKKwlyZXR1cm4gZGlmZl9yZXN1bHRfY29kZSgmb3B0LT5kaWZmb3B0LCAwKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZGlmZi5jIGIvYnVpbHRpbi9kaWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUzN2IxNwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZGlmZi5jCkBAIC0wLDAgKzEsNDY1IEBACisvKgorICogQnVpbHRpbiAiZ2l0IGRpZmYiCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgIm9pZC1hcnJheS5oIgorCisjZGVmaW5lIERJRkZfTk9fSU5ERVhfRVhQTElDSVQgMQorI2RlZmluZSBESUZGX05PX0lOREVYX0lNUExJQ0lUIDIKKworc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9kaWZmX3VzYWdlW10gPQorImdpdCBkaWZmIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dIjsKKworc3RhdGljIGNvbnN0IGNoYXIgKmJsb2JfcGF0aChzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnRyeSkKK3sKKwlyZXR1cm4gZW50cnktPnBhdGggPyBlbnRyeS0+cGF0aCA6IGVudHJ5LT5uYW1lOworfQorCitzdGF0aWMgdm9pZCBzdHVmZl9jaGFuZ2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LAorCQkJIHVuc2lnbmVkIG9sZF9tb2RlLCB1bnNpZ25lZCBuZXdfbW9kZSwKKwkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLAorCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsCisJCQkgaW50IG9sZF9vaWRfdmFsaWQsCisJCQkgaW50IG5ld19vaWRfdmFsaWQsCisJCQkgY29uc3QgY2hhciAqb2xkX3BhdGgsCisJCQkgY29uc3QgY2hhciAqbmV3X3BhdGgpCit7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwgKnR3bzsKKworCWlmICghaXNfbnVsbF9vaWQob2xkX29pZCkgJiYgIWlzX251bGxfb2lkKG5ld19vaWQpICYmCisJICAgIG9pZGVxKG9sZF9vaWQsIG5ld19vaWQpICYmIChvbGRfbW9kZSA9PSBuZXdfbW9kZSkpCisJCXJldHVybjsKKworCWlmIChvcHQtPmZsYWdzLnJldmVyc2VfZGlmZikgeworCQlTV0FQKG9sZF9tb2RlLCBuZXdfbW9kZSk7CisJCVNXQVAob2xkX29pZCwgbmV3X29pZCk7CisJCVNXQVAob2xkX3BhdGgsIG5ld19wYXRoKTsKKwl9CisKKwlpZiAob3B0LT5wcmVmaXggJiYKKwkgICAgKHN0cm5jbXAob2xkX3BhdGgsIG9wdC0+cHJlZml4LCBvcHQtPnByZWZpeF9sZW5ndGgpIHx8CisJICAgICBzdHJuY21wKG5ld19wYXRoLCBvcHQtPnByZWZpeCwgb3B0LT5wcmVmaXhfbGVuZ3RoKSkpCisJCXJldHVybjsKKworCW9uZSA9IGFsbG9jX2ZpbGVzcGVjKG9sZF9wYXRoKTsKKwl0d28gPSBhbGxvY19maWxlc3BlYyhuZXdfcGF0aCk7CisJZmlsbF9maWxlc3BlYyhvbmUsIG9sZF9vaWQsIG9sZF9vaWRfdmFsaWQsIG9sZF9tb2RlKTsKKwlmaWxsX2ZpbGVzcGVjKHR3bywgbmV3X29pZCwgbmV3X29pZF92YWxpZCwgbmV3X21vZGUpOworCisJZGlmZl9xdWV1ZSgmZGlmZl9xdWV1ZWRfZGlmZiwgb25lLCB0d28pOworfQorCitzdGF0aWMgaW50IGJ1aWx0aW5fZGlmZl9iX2Yoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCSAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICoqYmxvYikKK3sKKwkvKiBCbG9iIHZzIGZpbGUgaW4gdGhlIHdvcmtpbmcgdHJlZSovCisJc3RydWN0IHN0YXQgc3Q7CisJY29uc3QgY2hhciAqcGF0aDsKKworCWlmIChhcmdjID4gMSkKKwkJdXNhZ2UoYnVpbHRpbl9kaWZmX3VzYWdlKTsKKworCUdVQVJEX1BBVEhTUEVDKCZyZXZzLT5wcnVuZV9kYXRhLCBQQVRIU1BFQ19GUk9NVE9QIHwgUEFUSFNQRUNfTElURVJBTCk7CisJcGF0aCA9IHJldnMtPnBydW5lX2RhdGEuaXRlbXNbMF0ubWF0Y2g7CisKKwlpZiAobHN0YXQocGF0aCwgJnN0KSkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBzdGF0ICclcyciKSwgcGF0aCk7CisJaWYgKCEoU19JU1JFRyhzdC5zdF9tb2RlKSB8fCBTX0lTTE5LKHN0LnN0X21vZGUpKSkKKwkJZGllKF8oIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIiksIHBhdGgpOworCisJZGlmZl9zZXRfbW5lbW9uaWNfcHJlZml4KCZyZXZzLT5kaWZmb3B0LCAiby8iLCAidy8iKTsKKworCWlmIChibG9iWzBdLT5tb2RlID09IFNfSUZJTlZBTElEKQorCQlibG9iWzBdLT5tb2RlID0gY2Fub25fbW9kZShzdC5zdF9tb2RlKTsKKworCXN0dWZmX2NoYW5nZSgmcmV2cy0+ZGlmZm9wdCwKKwkJICAgICBibG9iWzBdLT5tb2RlLCBjYW5vbl9tb2RlKHN0LnN0X21vZGUpLAorCQkgICAgICZibG9iWzBdLT5pdGVtLT5vaWQsICZudWxsX29pZCwKKwkJICAgICAxLCAwLAorCQkgICAgIGJsb2JbMF0tPnBhdGggPyBibG9iWzBdLT5wYXRoIDogcGF0aCwKKwkJICAgICBwYXRoKTsKKwlkaWZmY29yZV9zdGQoJnJldnMtPmRpZmZvcHQpOworCWRpZmZfZmx1c2goJnJldnMtPmRpZmZvcHQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ1aWx0aW5fZGlmZl9ibG9icyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICoqYmxvYikKK3sKKwljb25zdCB1bnNpZ25lZCBtb2RlID0gY2Fub25fbW9kZShTX0lGUkVHIHwgMDY0NCk7CisKKwlpZiAoYXJnYyA+IDEpCisJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisKKwlpZiAoYmxvYlswXS0+bW9kZSA9PSBTX0lGSU5WQUxJRCkKKwkJYmxvYlswXS0+bW9kZSA9IG1vZGU7CisKKwlpZiAoYmxvYlsxXS0+bW9kZSA9PSBTX0lGSU5WQUxJRCkKKwkJYmxvYlsxXS0+bW9kZSA9IG1vZGU7CisKKwlzdHVmZl9jaGFuZ2UoJnJldnMtPmRpZmZvcHQsCisJCSAgICAgYmxvYlswXS0+bW9kZSwgYmxvYlsxXS0+bW9kZSwKKwkJICAgICAmYmxvYlswXS0+aXRlbS0+b2lkLCAmYmxvYlsxXS0+aXRlbS0+b2lkLAorCQkgICAgIDEsIDEsCisJCSAgICAgYmxvYl9wYXRoKGJsb2JbMF0pLCBibG9iX3BhdGgoYmxvYlsxXSkpOworCWRpZmZjb3JlX3N0ZCgmcmV2cy0+ZGlmZm9wdCk7CisJZGlmZl9mbHVzaCgmcmV2cy0+ZGlmZm9wdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnVpbHRpbl9kaWZmX2luZGV4KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICAgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgY2FjaGVkID0gMDsKKwl3aGlsZSAoMSA8IGFyZ2MpIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndlsxXTsKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1jYWNoZWQiKSB8fCAhc3RyY21wKGFyZywgIi0tc3RhZ2VkIikpCisJCQljYWNoZWQgPSAxOworCQllbHNlCisJCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOworCQlhcmd2Kys7IGFyZ2MtLTsKKwl9CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlcmUgaXMgb25lIHJldmlzaW9uIChpLmUuIHBlbmRpbmcgb2JqZWN0KSwKKwkgKiBhbmQgdGhlcmUgaXMgbm8gcmV2aXNpb24gZmlsdGVyaW5nIHBhcmFtZXRlcnMuCisJICovCisJaWYgKHJldnMtPnBlbmRpbmcubnIgIT0gMSB8fAorCSAgICByZXZzLT5tYXhfY291bnQgIT0gLTEgfHwgcmV2cy0+bWluX2FnZSAhPSAtMSB8fAorCSAgICByZXZzLT5tYXhfYWdlICE9IC0xKQorCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOworCWlmICghY2FjaGVkKSB7CisJCXNldHVwX3dvcmtfdHJlZSgpOworCQlpZiAocmVhZF9jYWNoZV9wcmVsb2FkKCZyZXZzLT5kaWZmb3B0LnBhdGhzcGVjKSA8IDApIHsKKwkJCXBlcnJvcigicmVhZF9jYWNoZV9wcmVsb2FkIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9IGVsc2UgaWYgKHJlYWRfY2FjaGUoKSA8IDApIHsKKwkJcGVycm9yKCJyZWFkX2NhY2hlIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIHJ1bl9kaWZmX2luZGV4KHJldnMsIGNhY2hlZCk7Cit9CisKK3N0YXRpYyBpbnQgYnVpbHRpbl9kaWZmX3RyZWUoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCQkgICAgIHN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmVudDAsCisJCQkgICAgIHN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmVudDEpCit7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqKG9pZFsyXSk7CisJaW50IHN3YXAgPSAwOworCisJaWYgKGFyZ2MgPiAxKQorCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOworCisJLyoKKwkgKiBXZSBzYXcgdHdvIHRyZWVzLCBlbnQwIGFuZCBlbnQxLiAgSWYgZW50MSBpcyB1bmludGVyZXN0aW5nLAorCSAqIHN3YXAgdGhlbS4KKwkgKi8KKwlpZiAoZW50MS0+aXRlbS0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQlzd2FwID0gMTsKKwlvaWRbc3dhcF0gPSAmZW50MC0+aXRlbS0+b2lkOworCW9pZFsxIC0gc3dhcF0gPSAmZW50MS0+aXRlbS0+b2lkOworCWRpZmZfdHJlZV9vaWQob2lkWzBdLCBvaWRbMV0sICIiLCAmcmV2cy0+ZGlmZm9wdCk7CisJbG9nX3RyZWVfZGlmZl9mbHVzaChyZXZzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidWlsdGluX2RpZmZfY29tYmluZWQoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCSBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCQkJIHN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmVudCwKKwkJCQkgaW50IGVudHMpCit7CisJc3RydWN0IG9pZF9hcnJheSBwYXJlbnRzID0gT0lEX0FSUkFZX0lOSVQ7CisJaW50IGk7CisKKwlpZiAoYXJnYyA+IDEpCisJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisKKwlpZiAoIXJldnMtPmRlbnNlX2NvbWJpbmVkX21lcmdlcyAmJiAhcmV2cy0+Y29tYmluZV9tZXJnZXMpCisJCXJldnMtPmRlbnNlX2NvbWJpbmVkX21lcmdlcyA9IHJldnMtPmNvbWJpbmVfbWVyZ2VzID0gMTsKKwlmb3IgKGkgPSAxOyBpIDwgZW50czsgaSsrKQorCQlvaWRfYXJyYXlfYXBwZW5kKCZwYXJlbnRzLCAmZW50W2ldLml0ZW0tPm9pZCk7CisJZGlmZl90cmVlX2NvbWJpbmVkKCZlbnRbMF0uaXRlbS0+b2lkLCAmcGFyZW50cywKKwkJCSAgIHJldnMtPmRlbnNlX2NvbWJpbmVkX21lcmdlcywgcmV2cyk7CisJb2lkX2FycmF5X2NsZWFyKCZwYXJlbnRzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVmcmVzaF9pbmRleF9xdWlldGx5KHZvaWQpCit7CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGUgPSBMT0NLX0lOSVQ7CisJaW50IGZkOworCisJZmQgPSBob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCAwKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm47CisJZGlzY2FyZF9jYWNoZSgpOworCXJlYWRfY2FjaGUoKTsKKwlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVR8UkVGUkVTSF9VTk1FUkdFRCk7CisJcmVwb191cGRhdGVfaW5kZXhfaWZfYWJsZSh0aGVfcmVwb3NpdG9yeSwgJmxvY2tfZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgYnVpbHRpbl9kaWZmX2ZpbGVzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGludCBvcHRpb25zID0gMDsKKworCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgeworCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1iYXNlIikpCisJCQlyZXZzLT5tYXhfY291bnQgPSAxOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLW91cnMiKSkKKwkJCXJldnMtPm1heF9jb3VudCA9IDI7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tdGhlaXJzIikpCisJCQlyZXZzLT5tYXhfY291bnQgPSAzOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItcSIpKQorCQkJb3B0aW9ucyB8PSBESUZGX1NJTEVOVF9PTl9SRU1PVkVEOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQkJdXNhZ2UoYnVpbHRpbl9kaWZmX3VzYWdlKTsKKwkJZWxzZQorCQkJcmV0dXJuIGVycm9yKF8oImludmFsaWQgb3B0aW9uOiAlcyIpLCBhcmd2WzFdKTsKKwkJYXJndisrOyBhcmdjLS07CisJfQorCisJLyoKKwkgKiAiZGlmZiAtLWJhc2UiIHNob3VsZCBub3QgY29tYmluZSBtZXJnZXMgYmVjYXVzZSBpdCB3YXMgbm90CisJICogYXNrZWQgdG8uICAiZGlmZiAtYyIgc2hvdWxkIG5vdCBkZW5zaWZ5IChpZiB0aGUgdXNlciB3YW50cworCSAqIGRlbnNlIG9uZSwgLS1jYyBjYW4gYmUgZXhwbGljaXRseSBhc2tlZCBmb3IsIG9yIGp1c3QgcmVseQorCSAqIG9uIHRoZSBkZWZhdWx0KS4KKwkgKi8KKwlpZiAocmV2cy0+bWF4X2NvdW50ID09IC0xICYmICFyZXZzLT5jb21iaW5lX21lcmdlcyAmJgorCSAgICAocmV2cy0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfUEFUQ0gpKQorCQlyZXZzLT5jb21iaW5lX21lcmdlcyA9IHJldnMtPmRlbnNlX2NvbWJpbmVkX21lcmdlcyA9IDE7CisKKwlzZXR1cF93b3JrX3RyZWUoKTsKKwlpZiAocmVhZF9jYWNoZV9wcmVsb2FkKCZyZXZzLT5kaWZmb3B0LnBhdGhzcGVjKSA8IDApIHsKKwkJcGVycm9yKCJyZWFkX2NhY2hlX3ByZWxvYWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gcnVuX2RpZmZfZmlsZXMocmV2cywgb3B0aW9ucyk7Cit9CisKK2ludCBjbWRfZGlmZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBvYmplY3RfYXJyYXkgZW50ID0gT0JKRUNUX0FSUkFZX0lOSVQ7CisJaW50IGJsb2JzID0gMCwgcGF0aHMgPSAwOworCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmJsb2JbMl07CisJaW50IG5vbmdpdCA9IDAsIG5vX2luZGV4ID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCS8qCisJICogV2UgY291bGQgZ2V0IE4gdHJlZS1pc2ggaW4gdGhlIHJldi5wZW5kaW5nX29iamVjdHMgbGlzdC4KKwkgKiBBbHNvIHRoZXJlIGNvdWxkIGJlIE0gYmxvYnMgdGhlcmUsIGFuZCBQIHBhdGhzcGVjcy4KKwkgKgorCSAqIE49MCwgTT0wOgorCSAqCWNhY2hlIHZzIGZpbGVzIChkaWZmLWZpbGVzKQorCSAqIE49MCwgTT0yOgorCSAqICAgICAgY29tcGFyZSB0d28gcmFuZG9tIGJsb2JzLiAgUCBtdXN0IGJlIHplcm8uCisJICogTj0wLCBNPTEsIFA9MToKKwkgKgljb21wYXJlIGEgYmxvYiB3aXRoIGEgd29ya2luZyB0cmVlIGZpbGUuCisJICoKKwkgKiBOPTEsIE09MDoKKwkgKiAgICAgIHRyZWUgdnMgY2FjaGUgKGRpZmYtaW5kZXggLS1jYWNoZWQpCisJICoKKwkgKiBOPTIsIE09MDoKKwkgKiAgICAgIHRyZWUgdnMgdHJlZSAoZGlmZi10cmVlKQorCSAqCisJICogTj0wLCBNPTAsIFA9MjoKKwkgKiAgICAgIGNvbXBhcmUgdHdvIGZpbGVzeXN0ZW0gZW50aXRpZXMgKGFrYSAtLW5vLWluZGV4KS4KKwkgKgorCSAqIE90aGVyIGNhc2VzIGFyZSBlcnJvcnMuCisJICovCisKKwkvKiBXZXJlIHdlIGFza2VkIHRvIGRvIC0tbm8taW5kZXggZXhwbGljaXRseT8gKi8KKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLSIpKSB7CisJCQlpKys7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1uby1pbmRleCIpKQorCQkJbm9faW5kZXggPSBESUZGX05PX0lOREVYX0VYUExJQ0lUOworCQlpZiAoYXJndltpXVswXSAhPSAnLScpCisJCQlicmVhazsKKwl9CisKKwlwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0KTsKKworCWlmICghbm9faW5kZXgpIHsKKwkJLyoKKwkJICogVHJlYXQgZ2l0IGRpZmYgd2l0aCBhdCBsZWFzdCBvbmUgcGF0aCBvdXRzaWRlIG9mIHRoZQorCQkgKiByZXBvIHRoZSBzYW1lIGFzIGlmIHRoZSBjb21tYW5kIHdvdWxkIGhhdmUgYmVlbiBleGVjdXRlZAorCQkgKiBvdXRzaWRlIG9mIGEgZ2l0IHJlcG9zaXRvcnkuICBJbiB0aGlzIGNhc2UgaXQgYmVoYXZlcworCQkgKiB0aGUgc2FtZSB3YXkgYXMgImdpdCBkaWZmIC0tbm8taW5kZXggPGE+IDxiPiIsIHdoaWNoIGFjdHMKKwkJICogYXMgYSBjb2xvdXJmdWwgImRpZmYiIHJlcGxhY2VtZW50LgorCQkgKi8KKwkJaWYgKG5vbmdpdCB8fCAoKGFyZ2MgPT0gaSArIDIpICYmCisJCQkgICAgICAgKCFwYXRoX2luc2lkZV9yZXBvKHByZWZpeCwgYXJndltpXSkgfHwKKwkJCQkhcGF0aF9pbnNpZGVfcmVwbyhwcmVmaXgsIGFyZ3ZbaSArIDFdKSkpKQorCQkJbm9faW5kZXggPSBESUZGX05PX0lOREVYX0lNUExJQ0lUOworCX0KKworCWluaXRfZGlmZl91aV9kZWZhdWx0cygpOworCWdpdF9jb25maWcoZ2l0X2RpZmZfdWlfY29uZmlnLCBOVUxMKTsKKwlwcmVjb21wb3NlX2FyZ3YoYXJnYywgYXJndik7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2LCBwcmVmaXgpOworCisJLyogU2V0IHVwIGRlZmF1bHRzIHRoYXQgd2lsbCBhcHBseSB0byBib3RoIG5vLWluZGV4IGFuZCByZWd1bGFyIGRpZmZzLiAqLworCXJldi5kaWZmb3B0LnN0YXRfd2lkdGggPSAtMTsKKwlyZXYuZGlmZm9wdC5zdGF0X2dyYXBoX3dpZHRoID0gLTE7CisJcmV2LmRpZmZvcHQuZmxhZ3MuYWxsb3dfZXh0ZXJuYWwgPSAxOworCXJldi5kaWZmb3B0LmZsYWdzLmFsbG93X3RleHRjb252ID0gMTsKKworCS8qIElmIHRoaXMgaXMgYSBuby1pbmRleCBkaWZmLCBqdXN0IHJ1biBpdCBhbmQgZXhpdCB0aGVyZS4gKi8KKwlpZiAobm9faW5kZXgpCisJCWV4aXQoZGlmZl9ub19pbmRleCgmcmV2LCBub19pbmRleCA9PSBESUZGX05PX0lOREVYX0lNUExJQ0lULAorCQkJCSAgIGFyZ2MsIGFyZ3YpKTsKKworCisJLyoKKwkgKiBPdGhlcndpc2UsIHdlIGFyZSBkb2luZyB0aGUgdXN1YWwgImdpdCIgZGlmZjsgc2V0IHVwIGFueQorCSAqIGZ1cnRoZXIgZGVmYXVsdHMgdGhhdCBhcHBseSB0byByZWd1bGFyIGRpZmZzLgorCSAqLworCXJldi5kaWZmb3B0LnNraXBfc3RhdF91bm1hdGNoID0gISFkaWZmX2F1dG9fcmVmcmVzaF9pbmRleDsKKworCS8qCisJICogRGVmYXVsdCB0byBpbnRlbnQtdG8tYWRkIGVudHJpZXMgaW52aXNpYmxlIGluIHRoZQorCSAqIGluZGV4LiBUaGlzIG1ha2VzIHRoZW0gc2hvdyB1cCBhcyBuZXcgZmlsZXMgaW4gZGlmZi1maWxlcworCSAqIGFuZCBub3QgYXQgYWxsIGluIGRpZmYtY2FjaGVkLgorCSAqLworCXJldi5kaWZmb3B0Lml0YV9pbnZpc2libGVfaW5faW5kZXggPSAxOworCisJaWYgKG5vbmdpdCkKKwkJZGllKF8oIk5vdCBhIGdpdCByZXBvc2l0b3J5IikpOworCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldiwgTlVMTCk7CisJaWYgKCFyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0KSB7CisJCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9QQVRDSDsKKwkJZGlmZl9zZXR1cF9kb25lKCZyZXYuZGlmZm9wdCk7CisJfQorCisJcmV2LmRpZmZvcHQuZmxhZ3MucmVjdXJzaXZlID0gMTsKKworCXNldHVwX2RpZmZfcGFnZXIoJnJldi5kaWZmb3B0KTsKKworCS8qCisJICogRG8gd2UgaGF2ZSAtLWNhY2hlZCBhbmQgbm90IGhhdmUgYSBwZW5kaW5nIG9iamVjdCwgdGhlbgorCSAqIGRlZmF1bHQgdG8gSEVBRCBieSBoYW5kLiAgRWVrLgorCSAqLworCWlmICghcmV2LnBlbmRpbmcubnIpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKQorCQkJCWJyZWFrOworCQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNhY2hlZCIpIHx8CisJCQkJICFzdHJjbXAoYXJnLCAiLS1zdGFnZWQiKSkgeworCQkJCWFkZF9oZWFkX3RvX3BlbmRpbmcoJnJldik7CisJCQkJaWYgKCFyZXYucGVuZGluZy5ucikgeworCQkJCQlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwkJCQkJdHJlZSA9IGxvb2t1cF90cmVlKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSAgIHRoZV9yZXBvc2l0b3J5LT5oYXNoX2FsZ28tPmVtcHR5X3RyZWUpOworCQkJCQlhZGRfcGVuZGluZ19vYmplY3QoJnJldiwgJnRyZWUtPm9iamVjdCwgIkhFQUQiKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcmV2LnBlbmRpbmcubnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnRyeSA9ICZyZXYucGVuZGluZy5vYmplY3RzW2ldOworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBlbnRyeS0+aXRlbTsKKwkJY29uc3QgY2hhciAqbmFtZSA9IGVudHJ5LT5uYW1lOworCQlpbnQgZmxhZ3MgPSAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpOworCQlpZiAoIW9iai0+cGFyc2VkKQorCQkJb2JqID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2JqLT5vaWQpOworCQlvYmogPSBkZXJlZl90YWcodGhlX3JlcG9zaXRvcnksIG9iaiwgTlVMTCwgMCk7CisJCWlmICghb2JqKQorCQkJZGllKF8oImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIiksIG5hbWUpOworCQlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpCisJCQlvYmogPSAmZ2V0X2NvbW1pdF90cmVlKCgoc3RydWN0IGNvbW1pdCAqKW9iaikpLT5vYmplY3Q7CisKKwkJaWYgKG9iai0+dHlwZSA9PSBPQkpfVFJFRSkgeworCQkJb2JqLT5mbGFncyB8PSBmbGFnczsKKwkJCWFkZF9vYmplY3RfYXJyYXkob2JqLCBuYW1lLCAmZW50KTsKKwkJfSBlbHNlIGlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpIHsKKwkJCWlmICgyIDw9IGJsb2JzKQorCQkJCWRpZShfKCJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIiksIG5hbWUpOworCQkJYmxvYltibG9ic10gPSBlbnRyeTsKKwkJCWJsb2JzKys7CisKKwkJfSBlbHNlIHsKKwkJCWRpZShfKCJ1bmhhbmRsZWQgb2JqZWN0ICclcycgZ2l2ZW4uIiksIG5hbWUpOworCQl9CisJfQorCWlmIChyZXYucHJ1bmVfZGF0YS5ucikKKwkJcGF0aHMgKz0gcmV2LnBydW5lX2RhdGEubnI7CisKKwkvKgorCSAqIE5vdywgZG8gdGhlIGFyZ3VtZW50cyBsb29rIHJlYXNvbmFibGU/CisJICovCisJaWYgKCFlbnQubnIpIHsKKwkJc3dpdGNoIChibG9icykgeworCQljYXNlIDA6CisJCQlyZXN1bHQgPSBidWlsdGluX2RpZmZfZmlsZXMoJnJldiwgYXJnYywgYXJndik7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJaWYgKHBhdGhzICE9IDEpCisJCQkJdXNhZ2UoYnVpbHRpbl9kaWZmX3VzYWdlKTsKKwkJCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl9iX2YoJnJldiwgYXJnYywgYXJndiwgYmxvYik7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaWYgKHBhdGhzKQorCQkJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisJCQlyZXN1bHQgPSBidWlsdGluX2RpZmZfYmxvYnMoJnJldiwgYXJnYywgYXJndiwgYmxvYik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisJCX0KKwl9CisJZWxzZSBpZiAoYmxvYnMpCisJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisJZWxzZSBpZiAoZW50Lm5yID09IDEpCisJCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl9pbmRleCgmcmV2LCBhcmdjLCBhcmd2KTsKKwllbHNlIGlmIChlbnQubnIgPT0gMikKKwkJcmVzdWx0ID0gYnVpbHRpbl9kaWZmX3RyZWUoJnJldiwgYXJnYywgYXJndiwKKwkJCQkJICAgJmVudC5vYmplY3RzWzBdLCAmZW50Lm9iamVjdHNbMV0pOworCWVsc2UgaWYgKGVudC5vYmplY3RzWzBdLml0ZW0tPmZsYWdzICYgVU5JTlRFUkVTVElORykgeworCQkvKgorCQkgKiBkaWZmIEEuLi5CIHdoZXJlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBtZXJnZSBiYXNlCisJCSAqIGJldHdlZW4gQSBhbmQgQi4gIFdlIGhhdmUgZW50Lm9iamVjdHNbMF0gPT0KKwkJICogbWVyZ2UtYmFzZSwgZW50Lm9iamVjdHNbZW50cy0yXSA9PSBBLCBhbmQKKwkJICogZW50Lm9iamVjdHNbZW50cy0xXSA9PSBCLiAgU2hvdyBkaWZmIGJldHdlZW4gdGhlCisJCSAqIGJhc2UgYW5kIEIuICBOb3RlIHRoYXQgd2UgcGljayBvbmUgbWVyZ2UgYmFzZSBhdAorCQkgKiByYW5kb20gaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUuCisJCSAqLworCQlyZXN1bHQgPSBidWlsdGluX2RpZmZfdHJlZSgmcmV2LCBhcmdjLCBhcmd2LAorCQkJCQkgICAmZW50Lm9iamVjdHNbMF0sCisJCQkJCSAgICZlbnQub2JqZWN0c1tlbnQubnItMV0pOworCX0gZWxzZQorCQlyZXN1bHQgPSBidWlsdGluX2RpZmZfY29tYmluZWQoJnJldiwgYXJnYywgYXJndiwKKwkJCQkJICAgICAgIGVudC5vYmplY3RzLCBlbnQubnIpOworCXJlc3VsdCA9IGRpZmZfcmVzdWx0X2NvZGUoJnJldi5kaWZmb3B0LCByZXN1bHQpOworCWlmICgxIDwgcmV2LmRpZmZvcHQuc2tpcF9zdGF0X3VubWF0Y2gpCisJCXJlZnJlc2hfaW5kZXhfcXVpZXRseSgpOworCVVOTEVBSyhyZXYpOworCVVOTEVBSyhlbnQpOworCVVOTEVBSyhibG9iKTsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9kaWZmdG9vbC5jIGIvYnVpbHRpbi9kaWZmdG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyODBlNjgKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2RpZmZ0b29sLmMKQEAgLTAsMCArMSw3NzIgQEAKKy8qCisgKiAiZ2l0IGRpZmZ0b29sIiBidWlsdGluIGNvbW1hbmQKKyAqCisgKiBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIEdJVF9FWFRFUk5BTF9ESUZGLWNvbXBhdGlibGUKKyAqIGdpdC1kaWZmdG9vbC0taGVscGVyIHNjcmlwdC4KKyAqCisgKiBUaGlzIHNjcmlwdCBleHBvcnRzIEdJVF9FWFRFUk5BTF9ESUZGIGFuZCBHSVRfUEFHRVIgZm9yIHVzZSBieSBnaXQuCisgKiBUaGUgR0lUX0RJRkYqIHZhcmlhYmxlcyBhcmUgZXhwb3J0ZWQgZm9yIHVzZSBieSBnaXQtZGlmZnRvb2wtLWhlbHBlci4KKyAqCisgKiBBbnkgYXJndW1lbnRzIHRoYXQgYXJlIHVua25vd24gdG8gdGhpcyBzY3JpcHQgYXJlIGZvcndhcmRlZCB0byAnZ2l0IGRpZmYnLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBKb2hhbm5lcyBTY2hpbmRlbGluCisgKi8KKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisKK3N0YXRpYyBpbnQgdHJ1c3RfZXhpdF9jb2RlOworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnVpbHRpbl9kaWZmdG9vbF91c2FnZVtdID0geworCU5fKCJnaXQgZGlmZnRvb2wgWzxvcHRpb25zPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwYXRoPi4uLl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGRpZmZ0b29sX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmdG9vbC50cnVzdGV4aXRjb2RlIikpIHsKKwkJdHJ1c3RfZXhpdF9jb2RlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGludCBwcmludF90b29sX2hlbHAodm9pZCkKK3sKKwljb25zdCBjaGFyICphcmd2W10gPSB7ICJtZXJnZXRvb2wiLCAiLS10b29sLWhlbHA9ZGlmZiIsIE5VTEwgfTsKKwlyZXR1cm4gcnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgUlVOX0dJVF9DTUQpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2luZGV4X2luZm8oY2hhciAqcCwgaW50ICptb2RlMSwgaW50ICptb2RlMiwKKwkJCSAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQxLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQyLAorCQkJICAgIGNoYXIgKnN0YXR1cykKK3sKKwlpZiAoKnAgIT0gJzonKQorCQlyZXR1cm4gZXJyb3IoImV4cGVjdGVkICc6JywgZ290ICclYyciLCAqcCk7CisJKm1vZGUxID0gKGludClzdHJ0b2wocCArIDEsICZwLCA4KTsKKwlpZiAoKnAgIT0gJyAnKQorCQlyZXR1cm4gZXJyb3IoImV4cGVjdGVkICcgJywgZ290ICclYyciLCAqcCk7CisJKm1vZGUyID0gKGludClzdHJ0b2wocCArIDEsICZwLCA4KTsKKwlpZiAoKnAgIT0gJyAnKQorCQlyZXR1cm4gZXJyb3IoImV4cGVjdGVkICcgJywgZ290ICclYyciLCAqcCk7CisJaWYgKHBhcnNlX29pZF9oZXgoKytwLCBvaWQxLCAoY29uc3QgY2hhciAqKikmcCkpCisJCXJldHVybiBlcnJvcigiZXhwZWN0ZWQgb2JqZWN0IElELCBnb3QgJyVzJyIsIHApOworCWlmICgqcCAhPSAnICcpCisJCXJldHVybiBlcnJvcigiZXhwZWN0ZWQgJyAnLCBnb3QgJyVjJyIsICpwKTsKKwlpZiAocGFyc2Vfb2lkX2hleCgrK3AsIG9pZDIsIChjb25zdCBjaGFyICoqKSZwKSkKKwkJcmV0dXJuIGVycm9yKCJleHBlY3RlZCBvYmplY3QgSUQsIGdvdCAnJXMnIiwgcCk7CisJaWYgKCpwICE9ICcgJykKKwkJcmV0dXJuIGVycm9yKCJleHBlY3RlZCAnICcsIGdvdCAnJWMnIiwgKnApOworCSpzdGF0dXMgPSAqKytwOworCWlmICghKnN0YXR1cykKKwkJcmV0dXJuIGVycm9yKCJtaXNzaW5nIHN0YXR1cyIpOworCWlmIChwWzFdICYmICFpc2RpZ2l0KHBbMV0pKQorCQlyZXR1cm4gZXJyb3IoInVuZXhwZWN0ZWQgdHJhaWxlcjogJyVzJyIsIHAgKyAxKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbW92ZSBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSAkd29ya2RpcgorICogYmVmb3JlIHN0YXJ0aW5nIHRvIGF2b2lkIGRvdWJsZSBzbGFzaGVzIGluIHN5bWxpbmsgdGFyZ2V0cy4KKyAqLworc3RhdGljIHZvaWQgYWRkX3BhdGgoc3RydWN0IHN0cmJ1ZiAqYnVmLCBzaXplX3QgYmFzZV9sZW4sIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RyYnVmX3NldGxlbihidWYsIGJhc2VfbGVuKTsKKwlpZiAoYnVmLT5sZW4gJiYgYnVmLT5idWZbYnVmLT5sZW4gLSAxXSAhPSAnLycpCisJCXN0cmJ1Zl9hZGRjaChidWYsICcvJyk7CisJc3RyYnVmX2FkZHN0cihidWYsIHBhdGgpOworfQorCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgY2FuIHNpbXBseSByZXVzZSB0aGUgZmlsZSBpbiB0aGUgd29ya3RyZWUuCisgKi8KK3N0YXRpYyBpbnQgdXNlX3d0X2ZpbGUoY29uc3QgY2hhciAqd29ya2RpciwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdGF0IHN0OworCWludCB1c2UgPSAwOworCisJc3RyYnVmX2FkZHN0cigmYnVmLCB3b3JrZGlyKTsKKwlhZGRfcGF0aCgmYnVmLCBidWYubGVuLCBuYW1lKTsKKworCWlmICghbHN0YXQoYnVmLmJ1ZiwgJnN0KSAmJiAhU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIHd0X29pZDsKKwkJaW50IGZkID0gb3BlbihidWYuYnVmLCBPX1JET05MWSk7CisKKwkJaWYgKGZkID49IDAgJiYKKwkJICAgICFpbmRleF9mZCgmdGhlX2luZGV4LCAmd3Rfb2lkLCBmZCwgJnN0LCBPQkpfQkxPQiwgbmFtZSwgMCkpIHsKKwkJCWlmIChpc19udWxsX29pZChvaWQpKSB7CisJCQkJb2lkY3B5KG9pZCwgJnd0X29pZCk7CisJCQkJdXNlID0gMTsKKwkJCX0gZWxzZSBpZiAob2lkZXEob2lkLCAmd3Rfb2lkKSkKKwkJCQl1c2UgPSAxOworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlyZXR1cm4gdXNlOworfQorCitzdHJ1Y3Qgd29ya2luZ190cmVlX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnRyeTsKKwljaGFyIHBhdGhbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgaW50IHdvcmtpbmdfdHJlZV9lbnRyeV9jbXAoY29uc3Qgdm9pZCAqdW51c2VkX2NtcF9kYXRhLAorCQkJCSAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVwdHIsCisJCQkJICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnlfb3Jfa2V5LAorCQkJCSAgY29uc3Qgdm9pZCAqdW51c2VkX2tleWRhdGEpCit7CisJY29uc3Qgc3RydWN0IHdvcmtpbmdfdHJlZV9lbnRyeSAqYSwgKmI7CisKKwlhID0gY29udGFpbmVyX29mKGVwdHIsIGNvbnN0IHN0cnVjdCB3b3JraW5nX3RyZWVfZW50cnksIGVudHJ5KTsKKwliID0gY29udGFpbmVyX29mKGVudHJ5X29yX2tleSwgY29uc3Qgc3RydWN0IHdvcmtpbmdfdHJlZV9lbnRyeSwgZW50cnkpOworCisJcmV0dXJuIHN0cmNtcChhLT5wYXRoLCBiLT5wYXRoKTsKK30KKworLyoKKyAqIFRoZSBgbGVmdGAgYW5kIGByaWdodGAgZW50cmllcyBob2xkIHBhdGhzIGZvciB0aGUgc3ltbGlua3MgaGFzaG1hcCwKKyAqIGFuZCBhIFNIQS0xIHN1cnJvdW5kZWQgYnkgYnJpZWYgdGV4dCBmb3Igc3VibW9kdWxlcy4KKyAqLworc3RydWN0IHBhaXJfZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudHJ5OworCWNoYXIgbGVmdFtQQVRIX01BWF0sIHJpZ2h0W1BBVEhfTUFYXTsKKwljb25zdCBjaGFyIHBhdGhbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgaW50IHBhaXJfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkgICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJICAgIGNvbnN0IHZvaWQgKnVudXNlZF9rZXlkYXRhKQoreworCWNvbnN0IHN0cnVjdCBwYWlyX2VudHJ5ICphLCAqYjsKKworCWEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IHBhaXJfZW50cnksIGVudHJ5KTsKKwliID0gY29udGFpbmVyX29mKGVudHJ5X29yX2tleSwgY29uc3Qgc3RydWN0IHBhaXJfZW50cnksIGVudHJ5KTsKKworCXJldHVybiBzdHJjbXAoYS0+cGF0aCwgYi0+cGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9sZWZ0X29yX3JpZ2h0KHN0cnVjdCBoYXNobWFwICptYXAsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgICBjb25zdCBjaGFyICpjb250ZW50LCBpbnQgaXNfcmlnaHQpCit7CisJc3RydWN0IHBhaXJfZW50cnkgKmUsICpleGlzdGluZzsKKworCUZMRVhfQUxMT0NfU1RSKGUsIHBhdGgsIHBhdGgpOworCWhhc2htYXBfZW50cnlfaW5pdCgmZS0+ZW50cnksIHN0cmhhc2gocGF0aCkpOworCWV4aXN0aW5nID0gaGFzaG1hcF9nZXRfZW50cnkobWFwLCBlLCBlbnRyeSwgTlVMTCk7CisJaWYgKGV4aXN0aW5nKSB7CisJCWZyZWUoZSk7CisJCWUgPSBleGlzdGluZzsKKwl9IGVsc2UgeworCQllLT5sZWZ0WzBdID0gZS0+cmlnaHRbMF0gPSAnXDAnOworCQloYXNobWFwX2FkZChtYXAsICZlLT5lbnRyeSk7CisJfQorCXN0cmxjcHkoaXNfcmlnaHQgPyBlLT5yaWdodCA6IGUtPmxlZnQsIGNvbnRlbnQsIFBBVEhfTUFYKTsKK30KKworc3RydWN0IHBhdGhfZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudHJ5OworCWNoYXIgcGF0aFtGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyBpbnQgcGF0aF9lbnRyeV9jbXAoY29uc3Qgdm9pZCAqdW51c2VkX2NtcF9kYXRhLAorCQkJICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZXB0ciwKKwkJCSAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCSAgY29uc3Qgdm9pZCAqa2V5KQoreworCWNvbnN0IHN0cnVjdCBwYXRoX2VudHJ5ICphLCAqYjsKKworCWEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IHBhdGhfZW50cnksIGVudHJ5KTsKKwliID0gY29udGFpbmVyX29mKGVudHJ5X29yX2tleSwgY29uc3Qgc3RydWN0IHBhdGhfZW50cnksIGVudHJ5KTsKKworCXJldHVybiBzdHJjbXAoYS0+cGF0aCwga2V5ID8ga2V5IDogYi0+cGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoYW5nZWRfZmlsZXMoc3RydWN0IGhhc2htYXAgKnJlc3VsdCwgY29uc3QgY2hhciAqaW5kZXhfcGF0aCwKKwkJCSAgY29uc3QgY2hhciAqd29ya2RpcikKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyB1cGRhdGVfaW5kZXggPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgZGlmZl9maWxlcyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGluZGV4X2VudiA9IFNUUkJVRl9JTklULCBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpnaXRfZGlyID0gYWJzb2x1dGVfcGF0aChnZXRfZ2l0X2RpcigpKSwgKmVudltdID0geworCQlOVUxMLCBOVUxMCisJfTsKKwlGSUxFICpmcDsKKworCXN0cmJ1Zl9hZGRmKCZpbmRleF9lbnYsICJHSVRfSU5ERVhfRklMRT0lcyIsIGluZGV4X3BhdGgpOworCWVudlswXSA9IGluZGV4X2Vudi5idWY7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZ1cGRhdGVfaW5kZXguYXJncywKKwkJCSAiLS1naXQtZGlyIiwgZ2l0X2RpciwgIi0td29yay10cmVlIiwgd29ya2RpciwKKwkJCSAidXBkYXRlLWluZGV4IiwgIi0tcmVhbGx5LXJlZnJlc2giLCAiLXEiLAorCQkJICItLXVubWVyZ2VkIiwgTlVMTCk7CisJdXBkYXRlX2luZGV4Lm5vX3N0ZGluID0gMTsKKwl1cGRhdGVfaW5kZXgubm9fc3Rkb3V0ID0gMTsKKwl1cGRhdGVfaW5kZXgubm9fc3RkZXJyID0gMTsKKwl1cGRhdGVfaW5kZXguZ2l0X2NtZCA9IDE7CisJdXBkYXRlX2luZGV4LnVzZV9zaGVsbCA9IDA7CisJdXBkYXRlX2luZGV4LmNsZWFuX29uX2V4aXQgPSAxOworCXVwZGF0ZV9pbmRleC5kaXIgPSB3b3JrZGlyOworCXVwZGF0ZV9pbmRleC5lbnYgPSBlbnY7CisJLyogSWdub3JlIGFueSBlcnJvcnMgb2YgdXBkYXRlLWluZGV4ICovCisJcnVuX2NvbW1hbmQoJnVwZGF0ZV9pbmRleCk7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZkaWZmX2ZpbGVzLmFyZ3MsCisJCQkgIi0tZ2l0LWRpciIsIGdpdF9kaXIsICItLXdvcmstdHJlZSIsIHdvcmtkaXIsCisJCQkgImRpZmYtZmlsZXMiLCAiLS1uYW1lLW9ubHkiLCAiLXoiLCBOVUxMKTsKKwlkaWZmX2ZpbGVzLm5vX3N0ZGluID0gMTsKKwlkaWZmX2ZpbGVzLmdpdF9jbWQgPSAxOworCWRpZmZfZmlsZXMudXNlX3NoZWxsID0gMDsKKwlkaWZmX2ZpbGVzLmNsZWFuX29uX2V4aXQgPSAxOworCWRpZmZfZmlsZXMub3V0ID0gLTE7CisJZGlmZl9maWxlcy5kaXIgPSB3b3JrZGlyOworCWRpZmZfZmlsZXMuZW52ID0gZW52OworCWlmIChzdGFydF9jb21tYW5kKCZkaWZmX2ZpbGVzKSkKKwkJZGllKCJjb3VsZCBub3Qgb2J0YWluIHJhdyBkaWZmIik7CisJZnAgPSB4ZmRvcGVuKGRpZmZfZmlsZXMub3V0LCAiciIpOworCXdoaWxlICghc3RyYnVmX2dldGxpbmVfbnVsKCZidWYsIGZwKSkgeworCQlzdHJ1Y3QgcGF0aF9lbnRyeSAqZW50cnk7CisJCUZMRVhfQUxMT0NfU1RSKGVudHJ5LCBwYXRoLCBidWYuYnVmKTsKKwkJaGFzaG1hcF9lbnRyeV9pbml0KCZlbnRyeS0+ZW50cnksIHN0cmhhc2goYnVmLmJ1ZikpOworCQloYXNobWFwX2FkZChyZXN1bHQsICZlbnRyeS0+ZW50cnkpOworCX0KKwlmY2xvc2UoZnApOworCWlmIChmaW5pc2hfY29tbWFuZCgmZGlmZl9maWxlcykpCisJCWRpZSgiZGlmZi1maWxlcyBkaWQgbm90IGV4aXQgcHJvcGVybHkiKTsKKwlzdHJidWZfcmVsZWFzZSgmaW5kZXhfZW52KTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIE5PUkVUVVJOIHZvaWQgZXhpdF9jbGVhbnVwKGNvbnN0IGNoYXIgKnRtcGRpciwgaW50IGV4aXRfY29kZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgdG1wZGlyKTsKKwlyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZidWYsIDApOworCWlmIChleGl0X2NvZGUpCisJCXdhcm5pbmcoXygiZmFpbGVkOiAlZCIpLCBleGl0X2NvZGUpOworCWV4aXQoZXhpdF9jb2RlKTsKK30KKworc3RhdGljIGludCBlbnN1cmVfbGVhZGluZ19kaXJlY3RvcmllcyhjaGFyICpwYXRoKQoreworCXN3aXRjaCAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhwYXRoKSkgeworCQljYXNlIFNDTERfT0s6CisJCWNhc2UgU0NMRF9FWElTVFM6CisJCQlyZXR1cm4gMDsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgIgorCQkJCSAgICAgICAib2YgJyVzJyIpLCBwYXRoKTsKKwl9Cit9CisKKy8qCisgKiBVbmNvbmRpdGlvbmFsIHdyaXRpbmcgb2YgYSBwbGFpbiByZWd1bGFyIGZpbGUgaXMgd2hhdAorICogImdpdCBkaWZmdG9vbCAtLWRpci1kaWZmIiB3YW50cyB0byBkbyBmb3Igc3ltbGlua3MuICBXZSBhcmUgcHJlcGFyaW5nIHR3bworICogdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIHRvIGJlIGZlZCB0byBhIEdpdC11bmF3YXJlIHRvb2wgdGhhdCBrbm93cyBob3cgdG8KKyAqIHNob3cgYSBkaWZmIG9mIHR3byBkaXJlY3RvcmllcyAoZS5nLiAiZGlmZiAtciBBIEIiKS4KKyAqCisgKiBCZWNhdXNlIHRoZSB0b29sIGlzIEdpdC11bmF3YXJlLCBpZiBhIHN5bWJvbGljIGxpbmsgYXBwZWFycyBpbiBlaXRoZXIgb2YKKyAqIHRoZXNlIHRlbXBvcmFyeSBkaXJlY3RvcmllcywgaXQgd2lsbCB0cnkgdG8gZGVyZWZlcmVuY2UgYW5kIHNob3cgdGhlCisgKiBkaWZmZXJlbmNlIG9mIHRoZSB0YXJnZXQgb2YgdGhlIHN5bWJvbGljIGxpbmssIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQsCisgKiBhcyB0aGUgZ29hbCBvZiB0aGUgZGlyLWRpZmYgbW9kZSBpcyB0byBwcm9kdWNlIGFuIG91dHB1dCB0aGF0IGlzIGxvZ2ljYWxseQorICogZXF1aXZhbGVudCB0byB3aGF0ICJnaXQgZGlmZiIgcHJvZHVjZXMuCisgKgorICogTW9zdCBpbXBvcnRhbnRseSwgd2Ugd2FudCB0byBnZXQgdGV4dHVhbCBjb21wYXJpc29uIG9mIHRoZSByZXN1bHQgb2YgdGhlCisgKiByZWFkbGluaygyKS4gIGdldF9zeW1saW5rKCkgcHJvdmlkZXMgdGhhdC0tLWl0IHJldHVybnMgdGhlIGNvbnRlbnRzIG9mCisgKiB0aGUgc3ltbGluayB0aGF0IGdldHMgd3JpdHRlbiB0byBhIHJlZ3VsYXIgZmlsZSB0byBmb3JjZSB0aGUgZXh0ZXJuYWwgdG9vbAorICogdG8gY29tcGFyZSB0aGUgcmVhZGxpbmsoMikgcmVzdWx0IGFzIHRleHQsIGV2ZW4gb24gYSBmaWxlc3lzdGVtIHRoYXQgaXMKKyAqIGNhcGFibGUgb2YgZG9pbmcgYSBzeW1ib2xpYyBsaW5rLgorICovCitzdGF0aWMgY2hhciAqZ2V0X3N5bWxpbmsoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpwYXRoKQoreworCWNoYXIgKmRhdGE7CisJaWYgKGlzX251bGxfb2lkKG9pZCkpIHsKKwkJLyogVGhlIHN5bWxpbmsgaXMgdW5rbm93biB0byBHaXQgc28gcmVhZCBmcm9tIHRoZSBmaWxlc3lzdGVtICovCisJCXN0cnVjdCBzdHJidWYgbGluayA9IFNUUkJVRl9JTklUOworCQlpZiAoaGFzX3N5bWxpbmtzKSB7CisJCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZsaW5rLCBwYXRoLCBzdHJsZW4ocGF0aCkpKQorCQkJCWRpZShfKCJjb3VsZCBub3QgcmVhZCBzeW1saW5rICVzIiksIHBhdGgpOworCQl9IGVsc2UgaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmxpbmssIHBhdGgsIDEyOCkpCisJCQlkaWUoXygiY291bGQgbm90IHJlYWQgc3ltbGluayBmaWxlICVzIiksIHBhdGgpOworCisJCWRhdGEgPSBzdHJidWZfZGV0YWNoKCZsaW5rLCBOVUxMKTsKKwl9IGVsc2UgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJZGF0YSA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCQlpZiAoIWRhdGEpCisJCQlkaWUoXygiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIGZvciBzeW1saW5rICVzIiksCisJCQkJb2lkX3RvX2hleChvaWQpLCBwYXRoKTsKKwl9CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGludCBjaGVja291dF9wYXRoKHVuc2lnbmVkIG1vZGUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJaW50IHJldDsKKworCWNlID0gbWFrZV90cmFuc2llbnRfY2FjaGVfZW50cnkobW9kZSwgb2lkLCBwYXRoLCAwKTsKKwlyZXQgPSBjaGVja291dF9lbnRyeShjZSwgc3RhdGUsIE5VTEwsIE5VTEwpOworCisJZGlzY2FyZF9jYWNoZV9lbnRyeShjZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBydW5fZGlyX2RpZmYoY29uc3QgY2hhciAqZXh0Y21kLCBpbnQgc3ltbGlua3MsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCWludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljaGFyIHRtcGRpcltQQVRIX01BWF07CisJc3RydWN0IHN0cmJ1ZiBpbmZvID0gU1RSQlVGX0lOSVQsIGxwYXRoID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBycGF0aCA9IFNUUkJVRl9JTklULCBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGxkaXIgPSBTVFJCVUZfSU5JVCwgcmRpciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgd3RkaXIgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpsYmFzZV9kaXIsICpyYmFzZV9kaXI7CisJc2l6ZV90IGxkaXJfbGVuLCByZGlyX2xlbiwgd3RkaXJfbGVuOworCWNvbnN0IGNoYXIgKndvcmtkaXIsICp0bXA7CisJaW50IHJldCA9IDAsIGk7CisJRklMRSAqZnA7CisJc3RydWN0IGhhc2htYXAgd29ya2luZ190cmVlX2R1cHMsIHN1Ym1vZHVsZXMsIHN5bWxpbmtzMjsKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisJc3RydWN0IHBhaXJfZW50cnkgKmVudHJ5OworCXN0cnVjdCBpbmRleF9zdGF0ZSB3dGluZGV4OworCXN0cnVjdCBjaGVja291dCBsc3RhdGUsIHJzdGF0ZTsKKwlpbnQgcmMsIGZsYWdzID0gUlVOX0dJVF9DTUQsIGVyciA9IDA7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hpbGQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqaGVscGVyX2FyZ3ZbXSA9IHsgImRpZmZ0b29sLS1oZWxwZXIiLCBOVUxMLCBOVUxMLCBOVUxMIH07CisJc3RydWN0IGhhc2htYXAgd3RfbW9kaWZpZWQsIHRtcF9tb2RpZmllZDsKKwlpbnQgaW5kaWNlc19sb2FkZWQgPSAwOworCisJd29ya2RpciA9IGdldF9naXRfd29ya190cmVlKCk7CisKKwkvKiBTZXR1cCB0ZW1wIGRpcmVjdG9yaWVzICovCisJdG1wID0gZ2V0ZW52KCJUTVBESVIiKTsKKwl4c25wcmludGYodG1wZGlyLCBzaXplb2YodG1wZGlyKSwgIiVzL2dpdC1kaWZmdG9vbC5YWFhYWFgiLCB0bXAgPyB0bXAgOiAiL3RtcCIpOworCWlmICghbWtkdGVtcCh0bXBkaXIpKQorCQlyZXR1cm4gZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUgJyVzJyIsIHRtcGRpcik7CisJc3RyYnVmX2FkZGYoJmxkaXIsICIlcy9sZWZ0LyIsIHRtcGRpcik7CisJc3RyYnVmX2FkZGYoJnJkaXIsICIlcy9yaWdodC8iLCB0bXBkaXIpOworCXN0cmJ1Zl9hZGRzdHIoJnd0ZGlyLCB3b3JrZGlyKTsKKwlpZiAoIXd0ZGlyLmxlbiB8fCAhaXNfZGlyX3NlcCh3dGRpci5idWZbd3RkaXIubGVuIC0gMV0pKQorCQlzdHJidWZfYWRkY2goJnd0ZGlyLCAnLycpOworCW1rZGlyKGxkaXIuYnVmLCAwNzAwKTsKKwlta2RpcihyZGlyLmJ1ZiwgMDcwMCk7CisKKwltZW1zZXQoJnd0aW5kZXgsIDAsIHNpemVvZih3dGluZGV4KSk7CisKKwltZW1zZXQoJmxzdGF0ZSwgMCwgc2l6ZW9mKGxzdGF0ZSkpOworCWxzdGF0ZS5iYXNlX2RpciA9IGxiYXNlX2RpciA9IHhzdHJkdXAobGRpci5idWYpOworCWxzdGF0ZS5iYXNlX2Rpcl9sZW4gPSBsZGlyLmxlbjsKKwlsc3RhdGUuZm9yY2UgPSAxOworCW1lbXNldCgmcnN0YXRlLCAwLCBzaXplb2YocnN0YXRlKSk7CisJcnN0YXRlLmJhc2VfZGlyID0gcmJhc2VfZGlyID0geHN0cmR1cChyZGlyLmJ1Zik7CisJcnN0YXRlLmJhc2VfZGlyX2xlbiA9IHJkaXIubGVuOworCXJzdGF0ZS5mb3JjZSA9IDE7CisKKwlsZGlyX2xlbiA9IGxkaXIubGVuOworCXJkaXJfbGVuID0gcmRpci5sZW47CisJd3RkaXJfbGVuID0gd3RkaXIubGVuOworCisJaGFzaG1hcF9pbml0KCZ3b3JraW5nX3RyZWVfZHVwcywgd29ya2luZ190cmVlX2VudHJ5X2NtcCwgTlVMTCwgMCk7CisJaGFzaG1hcF9pbml0KCZzdWJtb2R1bGVzLCBwYWlyX2NtcCwgTlVMTCwgMCk7CisJaGFzaG1hcF9pbml0KCZzeW1saW5rczIsIHBhaXJfY21wLCBOVUxMLCAwKTsKKworCWNoaWxkLm5vX3N0ZGluID0gMTsKKwljaGlsZC5naXRfY21kID0gMTsKKwljaGlsZC51c2Vfc2hlbGwgPSAwOworCWNoaWxkLmNsZWFuX29uX2V4aXQgPSAxOworCWNoaWxkLmRpciA9IHByZWZpeDsKKwljaGlsZC5vdXQgPSAtMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjaGlsZC5hcmdzLCAiZGlmZiIsICItLXJhdyIsICItLW5vLWFiYnJldiIsICIteiIsCisJCQkgTlVMTCk7CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC5hcmdzLCBhcmd2W2ldKTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2hpbGQpKQorCQlkaWUoImNvdWxkIG5vdCBvYnRhaW4gcmF3IGRpZmYiKTsKKwlmcCA9IHhmZG9wZW4oY2hpbGQub3V0LCAiciIpOworCisJLyogQnVpbGQgaW5kZXggaW5mbyBmb3IgbGVmdCBhbmQgcmlnaHQgc2lkZXMgb2YgdGhlIGRpZmYgKi8KKwlpID0gMDsKKwl3aGlsZSAoIXN0cmJ1Zl9nZXRsaW5lX251bCgmaW5mbywgZnApKSB7CisJCWludCBsbW9kZSwgcm1vZGU7CisJCXN0cnVjdCBvYmplY3RfaWQgbG9pZCwgcm9pZDsKKwkJY2hhciBzdGF0dXM7CisJCWNvbnN0IGNoYXIgKnNyY19wYXRoLCAqZHN0X3BhdGg7CisKKwkJaWYgKHN0YXJ0c193aXRoKGluZm8uYnVmLCAiOjoiKSkKKwkJCWRpZShOXygiY29tYmluZWQgZGlmZiBmb3JtYXRzKCctYycgYW5kICctLWNjJykgYXJlICIKKwkJCSAgICAgICAibm90IHN1cHBvcnRlZCBpblxuIgorCQkJICAgICAgICJkaXJlY3RvcnkgZGlmZiBtb2RlKCctZCcgYW5kICctLWRpci1kaWZmJykuIikpOworCisJCWlmIChwYXJzZV9pbmRleF9pbmZvKGluZm8uYnVmLCAmbG1vZGUsICZybW9kZSwgJmxvaWQsICZyb2lkLAorCQkJCSAgICAgJnN0YXR1cykpCisJCQlicmVhazsKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lX251bCgmbHBhdGgsIGZwKSkKKwkJCWJyZWFrOworCQlzcmNfcGF0aCA9IGxwYXRoLmJ1ZjsKKworCQlpKys7CisJCWlmIChzdGF0dXMgIT0gJ0MnICYmIHN0YXR1cyAhPSAnUicpIHsKKwkJCWRzdF9wYXRoID0gc3JjX3BhdGg7CisJCX0gZWxzZSB7CisJCQlpZiAoc3RyYnVmX2dldGxpbmVfbnVsKCZycGF0aCwgZnApKQorCQkJCWJyZWFrOworCQkJZHN0X3BhdGggPSBycGF0aC5idWY7CisJCX0KKworCQlpZiAoU19JU0dJVExJTksobG1vZGUpIHx8IFNfSVNHSVRMSU5LKHJtb2RlKSkgeworCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIlN1YnByb2plY3QgY29tbWl0ICVzIiwKKwkJCQkgICAgb2lkX3RvX2hleCgmbG9pZCkpOworCQkJYWRkX2xlZnRfb3JfcmlnaHQoJnN1Ym1vZHVsZXMsIHNyY19wYXRoLCBidWYuYnVmLCAwKTsKKwkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICJTdWJwcm9qZWN0IGNvbW1pdCAlcyIsCisJCQkJICAgIG9pZF90b19oZXgoJnJvaWQpKTsKKwkJCWlmIChvaWRlcSgmbG9pZCwgJnJvaWQpKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIi1kaXJ0eSIpOworCQkJYWRkX2xlZnRfb3JfcmlnaHQoJnN1Ym1vZHVsZXMsIGRzdF9wYXRoLCBidWYuYnVmLCAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKFNfSVNMTksobG1vZGUpKSB7CisJCQljaGFyICpjb250ZW50ID0gZ2V0X3N5bWxpbmsoJmxvaWQsIHNyY19wYXRoKTsKKwkJCWFkZF9sZWZ0X29yX3JpZ2h0KCZzeW1saW5rczIsIHNyY19wYXRoLCBjb250ZW50LCAwKTsKKwkJCWZyZWUoY29udGVudCk7CisJCX0KKworCQlpZiAoU19JU0xOSyhybW9kZSkpIHsKKwkJCWNoYXIgKmNvbnRlbnQgPSBnZXRfc3ltbGluaygmcm9pZCwgZHN0X3BhdGgpOworCQkJYWRkX2xlZnRfb3JfcmlnaHQoJnN5bWxpbmtzMiwgZHN0X3BhdGgsIGNvbnRlbnQsIDEpOworCQkJZnJlZShjb250ZW50KTsKKwkJfQorCisJCWlmIChsbW9kZSAmJiBzdGF0dXMgIT0gJ0MnKSB7CisJCQlpZiAoY2hlY2tvdXRfcGF0aChsbW9kZSwgJmxvaWQsIHNyY19wYXRoLCAmbHN0YXRlKSkgeworCQkJCXJldCA9IGVycm9yKCJjb3VsZCBub3Qgd3JpdGUgJyVzJyIsIHNyY19wYXRoKTsKKwkJCQlnb3RvIGZpbmlzaDsKKwkJCX0KKwkJfQorCisJCWlmIChybW9kZSAmJiAhU19JU0xOSyhybW9kZSkpIHsKKwkJCXN0cnVjdCB3b3JraW5nX3RyZWVfZW50cnkgKmVudHJ5OworCisJCQkvKiBBdm9pZCBkdXBsaWNhdGUgd29ya2luZ190cmVlIGVudHJpZXMgKi8KKwkJCUZMRVhfQUxMT0NfU1RSKGVudHJ5LCBwYXRoLCBkc3RfcGF0aCk7CisJCQloYXNobWFwX2VudHJ5X2luaXQoJmVudHJ5LT5lbnRyeSwgc3RyaGFzaChkc3RfcGF0aCkpOworCQkJaWYgKGhhc2htYXBfZ2V0KCZ3b3JraW5nX3RyZWVfZHVwcywgJmVudHJ5LT5lbnRyeSwKKwkJCQkJTlVMTCkpIHsKKwkJCQlmcmVlKGVudHJ5KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWhhc2htYXBfYWRkKCZ3b3JraW5nX3RyZWVfZHVwcywgJmVudHJ5LT5lbnRyeSk7CisKKwkJCWlmICghdXNlX3d0X2ZpbGUod29ya2RpciwgZHN0X3BhdGgsICZyb2lkKSkgeworCQkJCWlmIChjaGVja291dF9wYXRoKHJtb2RlLCAmcm9pZCwgZHN0X3BhdGgsCisJCQkJCQkgICZyc3RhdGUpKSB7CisJCQkJCXJldCA9IGVycm9yKCJjb3VsZCBub3Qgd3JpdGUgJyVzJyIsCisJCQkJCQkgICAgZHN0X3BhdGgpOworCQkJCQlnb3RvIGZpbmlzaDsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKCFpc19udWxsX29pZCgmcm9pZCkpIHsKKwkJCQkvKgorCQkJCSAqIENoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBuZWVkIHNwZWNpYWwKKwkJCQkgKiB0cmVhdG1lbnQgc2luY2UgdGhleSBhcmUgbm90IHBhcnQgb2YgdGhlCisJCQkJICogaW5kZXguCisJCQkJICovCisJCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTIgPQorCQkJCQltYWtlX2NhY2hlX2VudHJ5KCZ3dGluZGV4LCBybW9kZSwgJnJvaWQsCisJCQkJCQkJIGRzdF9wYXRoLCAwLCAwKTsKKworCQkJCWFkZF9pbmRleF9lbnRyeSgmd3RpbmRleCwgY2UyLAorCQkJCQkJQUREX0NBQ0hFX0pVU1RfQVBQRU5EKTsKKworCQkJCWFkZF9wYXRoKCZyZGlyLCByZGlyX2xlbiwgZHN0X3BhdGgpOworCQkJCWlmIChlbnN1cmVfbGVhZGluZ19kaXJlY3RvcmllcyhyZGlyLmJ1ZikpIHsKKwkJCQkJcmV0ID0gZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUgIgorCQkJCQkJICAgICJkaXJlY3RvcnkgZm9yICclcyciLAorCQkJCQkJICAgIGRzdF9wYXRoKTsKKwkJCQkJZ290byBmaW5pc2g7CisJCQkJfQorCQkJCWFkZF9wYXRoKCZ3dGRpciwgd3RkaXJfbGVuLCBkc3RfcGF0aCk7CisJCQkJaWYgKHN5bWxpbmtzKSB7CisJCQkJCWlmIChzeW1saW5rKHd0ZGlyLmJ1ZiwgcmRpci5idWYpKSB7CisJCQkJCQlyZXQgPSBlcnJvcl9lcnJubygiY291bGQgbm90IHN5bWxpbmsgJyVzJyB0byAnJXMnIiwgd3RkaXIuYnVmLCByZGlyLmJ1Zik7CisJCQkJCQlnb3RvIGZpbmlzaDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCXN0cnVjdCBzdGF0IHN0OworCQkJCQlpZiAoc3RhdCh3dGRpci5idWYsICZzdCkpCisJCQkJCQlzdC5zdF9tb2RlID0gMDY0NDsKKwkJCQkJaWYgKGNvcHlfZmlsZShyZGlyLmJ1Ziwgd3RkaXIuYnVmLAorCQkJCQkJICAgICAgc3Quc3RfbW9kZSkpIHsKKwkJCQkJCXJldCA9IGVycm9yKCJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyciLCB3dGRpci5idWYsIHJkaXIuYnVmKTsKKwkJCQkJCWdvdG8gZmluaXNoOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJZmNsb3NlKGZwKTsKKwlmcCA9IE5VTEw7CisJaWYgKGZpbmlzaF9jb21tYW5kKCZjaGlsZCkpIHsKKwkJcmV0ID0gZXJyb3IoImVycm9yIG9jY3VycmVkIHJ1bm5pbmcgZGlmZiAtLXJhdyIpOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwlpZiAoIWkpCisJCWdvdG8gZmluaXNoOworCisJLyoKKwkgKiBDaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgcmVxdWlyZSBzcGVjaWFsIHRyZWF0bWVudC5UaGlzIGxvb3Agd3JpdGVzIGEKKwkgKiB0ZW1wb3JhcnkgZmlsZSB0byBib3RoIHRoZSBsZWZ0IGFuZCByaWdodCBkaXJlY3RvcmllcyB0byBzaG93IHRoZQorCSAqIGNoYW5nZSBpbiB0aGUgcmVjb3JkZWQgU0hBMSBmb3IgdGhlIHN1Ym1vZHVsZS4KKwkgKi8KKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KCZzdWJtb2R1bGVzLCAmaXRlciwgZW50cnksCisJCQkJZW50cnkgLyogbWVtYmVyIG5hbWUgKi8pIHsKKwkJaWYgKCplbnRyeS0+bGVmdCkgeworCQkJYWRkX3BhdGgoJmxkaXIsIGxkaXJfbGVuLCBlbnRyeS0+cGF0aCk7CisJCQllbnN1cmVfbGVhZGluZ19kaXJlY3RvcmllcyhsZGlyLmJ1Zik7CisJCQl3cml0ZV9maWxlKGxkaXIuYnVmLCAiJXMiLCBlbnRyeS0+bGVmdCk7CisJCX0KKwkJaWYgKCplbnRyeS0+cmlnaHQpIHsKKwkJCWFkZF9wYXRoKCZyZGlyLCByZGlyX2xlbiwgZW50cnktPnBhdGgpOworCQkJZW5zdXJlX2xlYWRpbmdfZGlyZWN0b3JpZXMocmRpci5idWYpOworCQkJd3JpdGVfZmlsZShyZGlyLmJ1ZiwgIiVzIiwgZW50cnktPnJpZ2h0KTsKKwkJfQorCX0KKworCS8qCisJICogU3ltYm9saWMgbGlua3MgcmVxdWlyZSBzcGVjaWFsIHRyZWF0bWVudC5UaGUgc3RhbmRhcmQgImdpdCBkaWZmIgorCSAqIHNob3dzIG9ubHkgdGhlIGxpbmsgaXRzZWxmLCBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBsaW5rIHRhcmdldC4KKwkgKiBUaGlzIGxvb3AgcmVwbGljYXRlcyB0aGF0IGJlaGF2aW9yLgorCSAqLworCWhhc2htYXBfZm9yX2VhY2hfZW50cnkoJnN5bWxpbmtzMiwgJml0ZXIsIGVudHJ5LAorCQkJCWVudHJ5IC8qIG1lbWJlciBuYW1lICovKSB7CisJCWlmICgqZW50cnktPmxlZnQpIHsKKwkJCWFkZF9wYXRoKCZsZGlyLCBsZGlyX2xlbiwgZW50cnktPnBhdGgpOworCQkJZW5zdXJlX2xlYWRpbmdfZGlyZWN0b3JpZXMobGRpci5idWYpOworCQkJd3JpdGVfZmlsZShsZGlyLmJ1ZiwgIiVzIiwgZW50cnktPmxlZnQpOworCQl9CisJCWlmICgqZW50cnktPnJpZ2h0KSB7CisJCQlhZGRfcGF0aCgmcmRpciwgcmRpcl9sZW4sIGVudHJ5LT5wYXRoKTsKKwkJCWVuc3VyZV9sZWFkaW5nX2RpcmVjdG9yaWVzKHJkaXIuYnVmKTsKKwkJCXdyaXRlX2ZpbGUocmRpci5idWYsICIlcyIsIGVudHJ5LT5yaWdodCk7CisJCX0KKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXN0cmJ1Zl9zZXRsZW4oJmxkaXIsIGxkaXJfbGVuKTsKKwloZWxwZXJfYXJndlsxXSA9IGxkaXIuYnVmOworCXN0cmJ1Zl9zZXRsZW4oJnJkaXIsIHJkaXJfbGVuKTsKKwloZWxwZXJfYXJndlsyXSA9IHJkaXIuYnVmOworCisJaWYgKGV4dGNtZCkgeworCQloZWxwZXJfYXJndlswXSA9IGV4dGNtZDsKKwkJZmxhZ3MgPSAwOworCX0gZWxzZQorCQlzZXRlbnYoIkdJVF9ESUZGVE9PTF9ESVJESUZGIiwgInRydWUiLCAxKTsKKwlyYyA9IHJ1bl9jb21tYW5kX3Zfb3B0KGhlbHBlcl9hcmd2LCBmbGFncyk7CisKKwkvKgorCSAqIElmIHRoZSBkaWZmIGluY2x1ZGVzIHdvcmtpbmcgY29weSBmaWxlcyBhbmQgdGhvc2UKKwkgKiBmaWxlcyB3ZXJlIG1vZGlmaWVkIGR1cmluZyB0aGUgZGlmZiwgdGhlbiB0aGUgY2hhbmdlcworCSAqIHNob3VsZCBiZSBjb3BpZWQgYmFjayB0byB0aGUgd29ya2luZyB0cmVlLgorCSAqIERvIG5vdCBjb3B5IGJhY2sgZmlsZXMgd2hlbiBzeW1saW5rcyBhcmUgdXNlZCBhbmQgdGhlCisJICogZXh0ZXJuYWwgdG9vbCBkaWQgbm90IHJlcGxhY2UgdGhlIG9yaWdpbmFsIGxpbmsgd2l0aCBhIGZpbGUuCisJICoKKwkgKiBUaGVzZSBoYXNoZXMgYXJlIGxvYWRlZCBsYXppbHkgc2luY2UgdGhleSBhcmVuJ3QgbmVlZGVkCisJICogaW4gdGhlIGNvbW1vbiBjYXNlIG9mIC0tc3ltbGlua3MgYW5kIHRoZSBkaWZmdG9vbCB1cGRhdGluZworCSAqIGZpbGVzIHRocm91Z2ggdGhlIHN5bWxpbmsuCisJICovCisJaGFzaG1hcF9pbml0KCZ3dF9tb2RpZmllZCwgcGF0aF9lbnRyeV9jbXAsIE5VTEwsIHd0aW5kZXguY2FjaGVfbnIpOworCWhhc2htYXBfaW5pdCgmdG1wX21vZGlmaWVkLCBwYXRoX2VudHJ5X2NtcCwgTlVMTCwgd3RpbmRleC5jYWNoZV9ucik7CisKKwlmb3IgKGkgPSAwOyBpIDwgd3RpbmRleC5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBoYXNobWFwX2VudHJ5IGR1bW15OworCQljb25zdCBjaGFyICpuYW1lID0gd3RpbmRleC5jYWNoZVtpXS0+bmFtZTsKKwkJc3RydWN0IHN0YXQgc3Q7CisKKwkJYWRkX3BhdGgoJnJkaXIsIHJkaXJfbGVuLCBuYW1lKTsKKwkJaWYgKGxzdGF0KHJkaXIuYnVmLCAmc3QpKQorCQkJY29udGludWU7CisKKwkJaWYgKChzeW1saW5rcyAmJiBTX0lTTE5LKHN0LnN0X21vZGUpKSB8fCAhU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghaW5kaWNlc19sb2FkZWQpIHsKKwkJCXN0cnVjdCBsb2NrX2ZpbGUgbG9jayA9IExPQ0tfSU5JVDsKKwkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy93dGluZGV4IiwgdG1wZGlyKTsKKwkJCWlmIChob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2NrLCBidWYuYnVmLCAwKSA8IDAgfHwKKwkJCSAgICB3cml0ZV9sb2NrZWRfaW5kZXgoJnd0aW5kZXgsICZsb2NrLCBDT01NSVRfTE9DSykpIHsKKwkJCQlyZXQgPSBlcnJvcigiY291bGQgbm90IHdyaXRlICVzIiwgYnVmLmJ1Zik7CisJCQkJZ290byBmaW5pc2g7CisJCQl9CisJCQljaGFuZ2VkX2ZpbGVzKCZ3dF9tb2RpZmllZCwgYnVmLmJ1Ziwgd29ya2Rpcik7CisJCQlzdHJidWZfc2V0bGVuKCZyZGlyLCByZGlyX2xlbik7CisJCQljaGFuZ2VkX2ZpbGVzKCZ0bXBfbW9kaWZpZWQsIGJ1Zi5idWYsIHJkaXIuYnVmKTsKKwkJCWFkZF9wYXRoKCZyZGlyLCByZGlyX2xlbiwgbmFtZSk7CisJCQlpbmRpY2VzX2xvYWRlZCA9IDE7CisJCX0KKworCQloYXNobWFwX2VudHJ5X2luaXQoJmR1bW15LCBzdHJoYXNoKG5hbWUpKTsKKwkJaWYgKGhhc2htYXBfZ2V0KCZ0bXBfbW9kaWZpZWQsICZkdW1teSwgbmFtZSkpIHsKKwkJCWFkZF9wYXRoKCZ3dGRpciwgd3RkaXJfbGVuLCBuYW1lKTsKKwkJCWlmIChoYXNobWFwX2dldCgmd3RfbW9kaWZpZWQsICZkdW1teSwgbmFtZSkpIHsKKwkJCQl3YXJuaW5nKF8oImJvdGggZmlsZXMgbW9kaWZpZWQ6ICclcycgYW5kICclcycuIiksCisJCQkJCXd0ZGlyLmJ1ZiwgcmRpci5idWYpOworCQkJCXdhcm5pbmcoXygid29ya2luZyB0cmVlIGZpbGUgaGFzIGJlZW4gbGVmdC4iKSk7CisJCQkJd2FybmluZygiJXMiLCAiIik7CisJCQkJZXJyID0gMTsKKwkJCX0gZWxzZSBpZiAodW5saW5rKHd0ZGlyLmJ1ZikgfHwKKwkJCQkgICBjb3B5X2ZpbGUod3RkaXIuYnVmLCByZGlyLmJ1Ziwgc3Quc3RfbW9kZSkpCisJCQkJd2FybmluZ19lcnJubyhfKCJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyciKSwKKwkJCQkJICAgICAgcmRpci5idWYsIHd0ZGlyLmJ1Zik7CisJCX0KKwl9CisKKwlpZiAoZXJyKSB7CisJCXdhcm5pbmcoXygidGVtcG9yYXJ5IGZpbGVzIGV4aXN0IGluICclcycuIiksIHRtcGRpcik7CisJCXdhcm5pbmcoXygieW91IG1heSB3YW50IHRvIGNsZWFudXAgb3IgcmVjb3ZlciB0aGVzZS4iKSk7CisJCWV4aXQoMSk7CisJfSBlbHNlCisJCWV4aXRfY2xlYW51cCh0bXBkaXIsIHJjKTsKKworZmluaXNoOgorCWlmIChmcCkKKwkJZmNsb3NlKGZwKTsKKworCWZyZWUobGJhc2VfZGlyKTsKKwlmcmVlKHJiYXNlX2Rpcik7CisJc3RyYnVmX3JlbGVhc2UoJmxkaXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZGlyKTsKKwlzdHJidWZfcmVsZWFzZSgmd3RkaXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBydW5fZmlsZV9kaWZmKGludCBwcm9tcHQsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwljb25zdCBjaGFyICplbnZbXSA9IHsKKwkJIkdJVF9QQUdFUj0iLCAiR0lUX0VYVEVSTkFMX0RJRkY9Z2l0LWRpZmZ0b29sLS1oZWxwZXIiLCBOVUxMLAorCQlOVUxMCisJfTsKKwlpbnQgcmV0ID0gMCwgaTsKKworCWlmIChwcm9tcHQgPiAwKQorCQllbnZbMl0gPSAiR0lUX0RJRkZUT09MX1BST01QVD10cnVlIjsKKwllbHNlIGlmICghcHJvbXB0KQorCQllbnZbMl0gPSAiR0lUX0RJRkZUT09MX05PX1BST01QVD10cnVlIjsKKworCisJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiZGlmZiIpOworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgYXJndltpXSk7CisJcmV0ID0gcnVuX2NvbW1hbmRfdl9vcHRfY2RfZW52KGFyZ3MuYXJndiwgUlVOX0dJVF9DTUQsIHByZWZpeCwgZW52KTsKKwlleGl0KHJldCk7Cit9CisKK2ludCBjbWRfZGlmZnRvb2woaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IHVzZV9ndWlfdG9vbCA9IDAsIGRpcl9kaWZmID0gMCwgcHJvbXB0ID0gLTEsIHN5bWxpbmtzID0gMCwKKwkgICAgdG9vbF9oZWxwID0gMCwgbm9faW5kZXggPSAwOworCXN0YXRpYyBjaGFyICpkaWZmdG9vbF9jbWQgPSBOVUxMLCAqZXh0Y21kID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fZGlmZnRvb2xfb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnZycsICJndWkiLCAmdXNlX2d1aV90b29sLAorCQkJIE5fKCJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIpKSwKKwkJT1BUX0JPT0woJ2QnLCAiZGlyLWRpZmYiLCAmZGlyX2RpZmYsCisJCQkgTl8oInBlcmZvcm0gYSBmdWxsLWRpcmVjdG9yeSBkaWZmIikpLAorCQlPUFRfU0VUX0lOVF9GKCd5JywgIm5vLXByb21wdCIsICZwcm9tcHQsCisJCQlOXygiZG8gbm90IHByb21wdCBiZWZvcmUgbGF1bmNoaW5nIGEgZGlmZiB0b29sIiksCisJCQkwLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfU0VUX0lOVF9GKDAsICJwcm9tcHQiLCAmcHJvbXB0LCBOVUxMLAorCQkJMSwgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX0hJRERFTiksCisJCU9QVF9CT09MKDAsICJzeW1saW5rcyIsICZzeW1saW5rcywKKwkJCSBOXygidXNlIHN5bWxpbmtzIGluIGRpci1kaWZmIG1vZGUiKSksCisJCU9QVF9TVFJJTkcoJ3QnLCAidG9vbCIsICZkaWZmdG9vbF9jbWQsIE5fKCJ0b29sIiksCisJCQkgICBOXygidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIikpLAorCQlPUFRfQk9PTCgwLCAidG9vbC1oZWxwIiwgJnRvb2xfaGVscCwKKwkJCSBOXygicHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoICIKKwkJCSAgICAiYC0tdG9vbGAiKSksCisJCU9QVF9CT09MKDAsICJ0cnVzdC1leGl0LWNvZGUiLCAmdHJ1c3RfZXhpdF9jb2RlLAorCQkJIE5fKCJtYWtlICdnaXQtZGlmZnRvb2wnIGV4aXQgd2hlbiBhbiBpbnZva2VkIGRpZmYgIgorCQkJICAgICJ0b29sIHJldHVybnMgYSBub24gLSB6ZXJvIGV4aXQgY29kZSIpKSwKKwkJT1BUX1NUUklORygneCcsICJleHRjbWQiLCAmZXh0Y21kLCBOXygiY29tbWFuZCIpLAorCQkJICAgTl8oInNwZWNpZnkgYSBjdXN0b20gY29tbWFuZCBmb3Igdmlld2luZyBkaWZmcyIpKSwKKwkJT1BUX0FSR1VNRU5UKCJuby1pbmRleCIsICZub19pbmRleCwgTl8oInBhc3NlZCB0byBgZGlmZmAiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGRpZmZ0b29sX2NvbmZpZywgTlVMTCk7CisJc3ltbGlua3MgPSBoYXNfc3ltbGlua3M7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fZGlmZnRvb2xfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9kaWZmdG9vbF91c2FnZSwgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTiB8CisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKKworCWlmICh0b29sX2hlbHApCisJCXJldHVybiBwcmludF90b29sX2hlbHAoKTsKKworCWlmICghbm9faW5kZXggJiYgIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQorCQlkaWUoXygiZGlmZnRvb2wgcmVxdWlyZXMgd29ya3RyZWUgb3IgLS1uby1pbmRleCIpKTsKKworCWlmICghbm9faW5kZXgpeworCQlzZXR1cF93b3JrX3RyZWUoKTsKKwkJc2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQsIGFic29sdXRlX3BhdGgoZ2V0X2dpdF9kaXIoKSksIDEpOworCQlzZXRlbnYoR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCwgYWJzb2x1dGVfcGF0aChnZXRfZ2l0X3dvcmtfdHJlZSgpKSwgMSk7CisJfSBlbHNlIGlmIChkaXJfZGlmZikKKwkJZGllKF8oIi0tZGlyLWRpZmYgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1pbmRleCIpKTsKKworCWlmICh1c2VfZ3VpX3Rvb2wgKyAhIWRpZmZ0b29sX2NtZCArICEhZXh0Y21kID4gMSkKKwkJZGllKF8oIi0tZ3VpLCAtLXRvb2wgYW5kIC0tZXh0Y21kIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKSk7CisKKwlpZiAodXNlX2d1aV90b29sKQorCQlzZXRlbnYoIkdJVF9NRVJHRVRPT0xfR1VJIiwgInRydWUiLCAxKTsKKwllbHNlIGlmIChkaWZmdG9vbF9jbWQpIHsKKwkJaWYgKCpkaWZmdG9vbF9jbWQpCisJCQlzZXRlbnYoIkdJVF9ESUZGX1RPT0wiLCBkaWZmdG9vbF9jbWQsIDEpOworCQllbHNlCisJCQlkaWUoXygibm8gPHRvb2w+IGdpdmVuIGZvciAtLXRvb2w9PHRvb2w+IikpOworCX0KKworCWlmIChleHRjbWQpIHsKKwkJaWYgKCpleHRjbWQpCisJCQlzZXRlbnYoIkdJVF9ESUZGVE9PTF9FWFRDTUQiLCBleHRjbWQsIDEpOworCQllbHNlCisJCQlkaWUoXygibm8gPGNtZD4gZ2l2ZW4gZm9yIC0tZXh0Y21kPTxjbWQ+IikpOworCX0KKworCXNldGVudigiR0lUX0RJRkZUT09MX1RSVVNUX0VYSVRfQ09ERSIsCisJICAgICAgIHRydXN0X2V4aXRfY29kZSA/ICJ0cnVlIiA6ICJmYWxzZSIsIDEpOworCisJLyoKKwkgKiBJbiBkaXJlY3RvcnkgZGlmZiBtb2RlLCAnZ2l0LWRpZmZ0b29sLS1oZWxwZXInIGlzIGNhbGxlZCBvbmNlCisJICogdG8gY29tcGFyZSB0aGUgYSAvIGIgZGlyZWN0b3JpZXMuIEluIGZpbGUgZGlmZiBtb2RlLCAnZ2l0IGRpZmYnCisJICogd2lsbCBpbnZva2UgYSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiAnZ2l0LWRpZmZ0b29sLS1oZWxwZXInIGZvcgorCSAqIGVhY2ggZmlsZSB0aGF0IGNoYW5nZWQuCisJICovCisJaWYgKGRpcl9kaWZmKQorCQlyZXR1cm4gcnVuX2Rpcl9kaWZmKGV4dGNtZCwgc3ltbGlua3MsIHByZWZpeCwgYXJnYywgYXJndik7CisJcmV0dXJuIHJ1bl9maWxlX2RpZmYocHJvbXB0LCBwcmVmaXgsIGFyZ2MsIGFyZ3YpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9lbnYtLWhlbHBlci5jIGIvYnVpbHRpbi9lbnYtLWhlbHBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYzIxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2Vudi0taGVscGVyLmMKQEAgLTAsMCArMSw5NSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgZW52X19oZWxwZXJfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPG9wdGlvbnM+IDxlbnYtdmFyPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBlbnVtIHsKKwlFTlZfSEVMUEVSX1RZUEVfQk9PTCA9IDEsCisJRU5WX0hFTFBFUl9UWVBFX1VMT05HCit9IGNtZG1vZGUgPSAwOworCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV90eXBlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgICBpbnQgdW5zZXQpCit7CisJaWYgKCFzdHJjbXAoYXJnLCAiYm9vbCIpKQorCQljbWRtb2RlID0gRU5WX0hFTFBFUl9UWVBFX0JPT0w7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJ1bG9uZyIpKQorCQljbWRtb2RlID0gRU5WX0hFTFBFUl9UWVBFX1VMT05HOworCWVsc2UKKwkJZGllKF8oInVucmVjb2duaXplZCAtLXR5cGUgYXJndW1lbnQsICVzIiksIGFyZyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9lbnZfX2hlbHBlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgZXhpdF9jb2RlID0gMDsKKwljb25zdCBjaGFyICplbnZfdmFyaWFibGUgPSBOVUxMOworCWNvbnN0IGNoYXIgKmVudl9kZWZhdWx0ID0gTlVMTDsKKwlpbnQgcmV0OworCWludCByZXRfaW50LCBkZWZhdWx0X2ludDsKKwl1bnNpZ25lZCBsb25nIHJldF91bG9uZywgZGVmYXVsdF91bG9uZzsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKKwkJT1BUX0NBTExCQUNLX0YoMCwgInR5cGUiLCAmY21kbW9kZSwgTl8oInR5cGUiKSwKKwkJCSAgICAgICBOXygidmFsdWUgaXMgZ2l2ZW4gdGhpcyB0eXBlIiksIFBBUlNFX09QVF9OT05FRywKKwkJCSAgICAgICBvcHRpb25fcGFyc2VfdHlwZSksCisJCU9QVF9TVFJJTkcoMCwgImRlZmF1bHQiLCAmZW52X2RlZmF1bHQsIE5fKCJ2YWx1ZSIpLAorCQkJICAgTl8oImRlZmF1bHQgZm9yIGdpdF9lbnZfKiguLi4pIHRvIGZhbGwgYmFjayBvbiIpKSwKKwkJT1BUX0JPT0woMCwgImV4aXQtY29kZSIsICZleGl0X2NvZGUsCisJCQkgTl8oImJlIHF1aWV0IG9ubHkgdXNlIGdpdF9lbnZfKigpIHZhbHVlIGFzIGV4aXQgY29kZSIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdHMsIGVudl9faGVscGVyX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9VTktOT1dOKTsKKwlpZiAoZW52X2RlZmF1bHQgJiYgISplbnZfZGVmYXVsdCkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGVudl9faGVscGVyX3VzYWdlLCBvcHRzKTsKKwlpZiAoIWNtZG1vZGUpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhlbnZfX2hlbHBlcl91c2FnZSwgb3B0cyk7CisJaWYgKGFyZ2MgIT0gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGVudl9faGVscGVyX3VzYWdlLCBvcHRzKTsKKwllbnZfdmFyaWFibGUgPSBhcmd2WzBdOworCisJc3dpdGNoIChjbWRtb2RlKSB7CisJY2FzZSBFTlZfSEVMUEVSX1RZUEVfQk9PTDoKKwkJaWYgKGVudl9kZWZhdWx0KSB7CisJCQlkZWZhdWx0X2ludCA9IGdpdF9wYXJzZV9tYXliZV9ib29sKGVudl9kZWZhdWx0KTsKKwkJCWlmIChkZWZhdWx0X2ludCA9PSAtMSkgeworCQkJCWVycm9yKF8oIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGEgYm9vbGVhbiB2YWx1ZSB3aXRoIGAtLXR5cGU9Ym9vbGAsIG5vdCBgJXNgIiksCisJCQkJICAgICAgZW52X2RlZmF1bHQpOworCQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhlbnZfX2hlbHBlcl91c2FnZSwgb3B0cyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZWZhdWx0X2ludCA9IDA7CisJCX0KKwkJcmV0X2ludCA9IGdpdF9lbnZfYm9vbChlbnZfdmFyaWFibGUsIGRlZmF1bHRfaW50KTsKKwkJaWYgKCFleGl0X2NvZGUpCisJCQlwdXRzKHJldF9pbnQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKwkJcmV0ID0gcmV0X2ludDsKKwkJYnJlYWs7CisJY2FzZSBFTlZfSEVMUEVSX1RZUEVfVUxPTkc6CisJCWlmIChlbnZfZGVmYXVsdCkgeworCQkJaWYgKCFnaXRfcGFyc2VfdWxvbmcoZW52X2RlZmF1bHQsICZkZWZhdWx0X3Vsb25nKSkgeworCQkJCWVycm9yKF8oIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGFuIHVuc2lnbmVkIGxvbmcgdmFsdWUgd2l0aCBgLS10eXBlPXVsb25nYCwgbm90IGAlc2AiKSwKKwkJCQkgICAgICBlbnZfZGVmYXVsdCk7CisJCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGVudl9faGVscGVyX3VzYWdlLCBvcHRzKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRlZmF1bHRfdWxvbmcgPSAwOworCQl9CisJCXJldF91bG9uZyA9IGdpdF9lbnZfdWxvbmcoZW52X3ZhcmlhYmxlLCBkZWZhdWx0X3Vsb25nKTsKKwkJaWYgKCFleGl0X2NvZGUpCisJCQlwcmludGYoIiVsdVxuIiwgcmV0X3Vsb25nKTsKKwkJcmV0ID0gcmV0X3Vsb25nOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoInVua25vd24gPHR5cGU+IHZhbHVlIik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAhcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mYXN0LWV4cG9ydC5jIGIvYnVpbHRpbi9mYXN0LWV4cG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODY4MTYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2Zhc3QtZXhwb3J0LmMKQEAgLTAsMCArMSwxMjYwIEBACisvKgorICogImdpdCBmYXN0LWV4cG9ydCIgYnVpbHRpbiBjb21tYW5kCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyAqLworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZWZzcGVjLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImRlY29yYXRlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImNvbW1pdC1zbGFiLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpmYXN0X2V4cG9ydF91c2FnZVtdID0geworCU5fKCJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBwcm9ncmVzczsKK3N0YXRpYyBlbnVtIHsgU0lHTkVEX1RBR19BQk9SVCwgVkVSQkFUSU0sIFdBUk4sIFdBUk5fU1RSSVAsIFNUUklQIH0gc2lnbmVkX3RhZ19tb2RlID0gU0lHTkVEX1RBR19BQk9SVDsKK3N0YXRpYyBlbnVtIHsgVEFHX0ZJTFRFUklOR19BQk9SVCwgRFJPUCwgUkVXUklURSB9IHRhZ19vZl9maWx0ZXJlZF9tb2RlID0gVEFHX0ZJTFRFUklOR19BQk9SVDsKK3N0YXRpYyBlbnVtIHsgUkVFTkNPREVfQUJPUlQsIFJFRU5DT0RFX1lFUywgUkVFTkNPREVfTk8gfSByZWVuY29kZV9tb2RlID0gUkVFTkNPREVfQUJPUlQ7CitzdGF0aWMgaW50IGZha2VfbWlzc2luZ190YWdnZXI7CitzdGF0aWMgaW50IHVzZV9kb25lX2ZlYXR1cmU7CitzdGF0aWMgaW50IG5vX2RhdGE7CitzdGF0aWMgaW50IGZ1bGxfdHJlZTsKK3N0YXRpYyBpbnQgcmVmZXJlbmNlX2V4Y2x1ZGVkX2NvbW1pdHM7CitzdGF0aWMgaW50IHNob3dfb3JpZ2luYWxfaWRzOworc3RhdGljIGludCBtYXJrX3RhZ3M7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGV4dHJhX3JlZnMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCB0YWdfcmVmcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgc3RydWN0IHJlZnNwZWMgcmVmc3BlY3MgPSBSRUZTUEVDX0lOSVRfRkVUQ0g7CitzdGF0aWMgaW50IGFub255bWl6ZTsKK3N0YXRpYyBzdHJ1Y3QgcmV2aXNpb25fc291cmNlcyByZXZpc2lvbl9zb3VyY2VzOworCitzdGF0aWMgaW50IHBhcnNlX29wdF9zaWduZWRfdGFnX21vZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0IHx8ICFzdHJjbXAoYXJnLCAiYWJvcnQiKSkKKwkJc2lnbmVkX3RhZ19tb2RlID0gU0lHTkVEX1RBR19BQk9SVDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInZlcmJhdGltIikgfHwgIXN0cmNtcChhcmcsICJpZ25vcmUiKSkKKwkJc2lnbmVkX3RhZ19tb2RlID0gVkVSQkFUSU07CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJ3YXJuIikpCisJCXNpZ25lZF90YWdfbW9kZSA9IFdBUk47CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJ3YXJuLXN0cmlwIikpCisJCXNpZ25lZF90YWdfbW9kZSA9IFdBUk5fU1RSSVA7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJzdHJpcCIpKQorCQlzaWduZWRfdGFnX21vZGUgPSBTVFJJUDsKKwllbHNlCisJCXJldHVybiBlcnJvcigiVW5rbm93biBzaWduZWQtdGFncyBtb2RlOiAlcyIsIGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0X3RhZ19vZl9maWx0ZXJlZF9tb2RlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQgfHwgIXN0cmNtcChhcmcsICJhYm9ydCIpKQorCQl0YWdfb2ZfZmlsdGVyZWRfbW9kZSA9IFRBR19GSUxURVJJTkdfQUJPUlQ7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJkcm9wIikpCisJCXRhZ19vZl9maWx0ZXJlZF9tb2RlID0gRFJPUDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInJld3JpdGUiKSkKKwkJdGFnX29mX2ZpbHRlcmVkX21vZGUgPSBSRVdSSVRFOworCWVsc2UKKwkJcmV0dXJuIGVycm9yKCJVbmtub3duIHRhZy1vZi1maWx0ZXJlZCBtb2RlOiAlcyIsIGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0X3JlZW5jb2RlX21vZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCkgeworCQlyZWVuY29kZV9tb2RlID0gUkVFTkNPREVfQUJPUlQ7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoZ2l0X3BhcnNlX21heWJlX2Jvb2woYXJnKSkgeworCWNhc2UgMDoKKwkJcmVlbmNvZGVfbW9kZSA9IFJFRU5DT0RFX05POworCQlicmVhazsKKwljYXNlIDE6CisJCXJlZW5jb2RlX21vZGUgPSBSRUVOQ09ERV9ZRVM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmICghc3RyY2FzZWNtcChhcmcsICJhYm9ydCIpKQorCQkJcmVlbmNvZGVfbW9kZSA9IFJFRU5DT0RFX0FCT1JUOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3IoIlVua25vd24gcmVlbmNvZGluZyBtb2RlOiAlcyIsIGFyZyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVjb3JhdGlvbiBpZG51bXM7CitzdGF0aWMgdWludDMyX3QgbGFzdF9pZG51bTsKKworc3RhdGljIGludCBoYXNfdW5zaG93bl9wYXJlbnQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCisJZm9yIChwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5uZXh0KQorCQlpZiAoIShwYXJlbnQtPml0ZW0tPm9iamVjdC5mbGFncyAmIFNIT1dOKSAmJgorCQkgICAgIShwYXJlbnQtPml0ZW0tPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBhbm9ueW1pemVkX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBoYXNoOworCWNvbnN0IGNoYXIgKm9yaWc7CisJc2l6ZV90IG9yaWdfbGVuOworCWNvbnN0IGNoYXIgKmFub247CisJc2l6ZV90IGFub25fbGVuOworfTsKKworc3RhdGljIGludCBhbm9ueW1pemVkX2VudHJ5X2NtcChjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCQkJY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVwdHIsCisJCQkJY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCQljb25zdCB2b2lkICp1bnVzZWRfa2V5ZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgYW5vbnltaXplZF9lbnRyeSAqYSwgKmI7CisKKwlhID0gY29udGFpbmVyX29mKGVwdHIsIGNvbnN0IHN0cnVjdCBhbm9ueW1pemVkX2VudHJ5LCBoYXNoKTsKKwliID0gY29udGFpbmVyX29mKGVudHJ5X29yX2tleSwgY29uc3Qgc3RydWN0IGFub255bWl6ZWRfZW50cnksIGhhc2gpOworCisJcmV0dXJuIGEtPm9yaWdfbGVuICE9IGItPm9yaWdfbGVuIHx8CisJCW1lbWNtcChhLT5vcmlnLCBiLT5vcmlnLCBhLT5vcmlnX2xlbik7Cit9CisKKy8qCisgKiBCYXNpY2FsbHkga2VlcCBhIGNhY2hlIG9mIFgtPlkgc28gdGhhdCB3ZSBjYW4gcmVwZWF0ZWRseSByZXBsYWNlCisgKiB0aGUgc2FtZSBhbm9ueW1pemVkIHN0cmluZyB3aXRoIGFub3RoZXIuIFRoZSBhY3R1YWwgZ2VuZXJhdGlvbgorICogaXMgZmFybWVkIG91dCB0byB0aGUgZ2VuZXJhdGUgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBjb25zdCB2b2lkICphbm9ueW1pemVfbWVtKHN0cnVjdCBoYXNobWFwICptYXAsCisJCQkJIHZvaWQgKigqZ2VuZXJhdGUpKGNvbnN0IHZvaWQgKiwgc2l6ZV90ICopLAorCQkJCSBjb25zdCB2b2lkICpvcmlnLCBzaXplX3QgKmxlbikKK3sKKwlzdHJ1Y3QgYW5vbnltaXplZF9lbnRyeSBrZXksICpyZXQ7CisKKwlpZiAoIW1hcC0+Y21wZm4pCisJCWhhc2htYXBfaW5pdChtYXAsIGFub255bWl6ZWRfZW50cnlfY21wLCBOVUxMLCAwKTsKKworCWhhc2htYXBfZW50cnlfaW5pdCgma2V5Lmhhc2gsIG1lbWhhc2gob3JpZywgKmxlbikpOworCWtleS5vcmlnID0gb3JpZzsKKwlrZXkub3JpZ19sZW4gPSAqbGVuOworCXJldCA9IGhhc2htYXBfZ2V0X2VudHJ5KG1hcCwgJmtleSwgaGFzaCwgTlVMTCk7CisKKwlpZiAoIXJldCkgeworCQlyZXQgPSB4bWFsbG9jKHNpemVvZigqcmV0KSk7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmcmV0LT5oYXNoLCBrZXkuaGFzaC5oYXNoKTsKKwkJcmV0LT5vcmlnID0geHN0cmR1cChvcmlnKTsKKwkJcmV0LT5vcmlnX2xlbiA9ICpsZW47CisJCXJldC0+YW5vbiA9IGdlbmVyYXRlKG9yaWcsIGxlbik7CisJCXJldC0+YW5vbl9sZW4gPSAqbGVuOworCQloYXNobWFwX3B1dChtYXAsICZyZXQtPmhhc2gpOworCX0KKworCSpsZW4gPSByZXQtPmFub25fbGVuOworCXJldHVybiByZXQtPmFub247Cit9CisKKy8qCisgKiBXZSBhbm9ueW1pemUgZWFjaCBjb21wb25lbnQgb2YgYSBwYXRoIGluZGl2aWR1YWxseSwKKyAqIHNvIHRoYXQgcGF0aHMgYS9iIGFuZCBhL2Mgd2lsbCBzaGFyZSBhIGNvbW1vbiByb290LgorICogVGhlIHBhdGhzIGFyZSBjYWNoZWQgdmlhIGFub255bWl6ZV9tZW0gc28gdGhhdCByZXBlYXRlZAorICogbG9va3VwcyBmb3IgImEiIHdpbGwgeWllbGQgdGhlIHNhbWUgdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIGFub255bWl6ZV9wYXRoKHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgIHN0cnVjdCBoYXNobWFwICptYXAsCisJCQkgICB2b2lkICooKmdlbmVyYXRlKShjb25zdCB2b2lkICosIHNpemVfdCAqKSkKK3sKKwl3aGlsZSAoKnBhdGgpIHsKKwkJY29uc3QgY2hhciAqZW5kX29mX2NvbXBvbmVudCA9IHN0cmNocm51bChwYXRoLCAnLycpOworCQlzaXplX3QgbGVuID0gZW5kX29mX2NvbXBvbmVudCAtIHBhdGg7CisJCWNvbnN0IGNoYXIgKmMgPSBhbm9ueW1pemVfbWVtKG1hcCwgZ2VuZXJhdGUsIHBhdGgsICZsZW4pOworCQlzdHJidWZfYWRkKG91dCwgYywgbGVuKTsKKwkJcGF0aCA9IGVuZF9vZl9jb21wb25lbnQ7CisJCWlmICgqcGF0aCkKKwkJCXN0cmJ1Zl9hZGRjaChvdXQsICpwYXRoKyspOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkICptYXJrX3RvX3B0cih1aW50MzJfdCBtYXJrKQoreworCXJldHVybiAodm9pZCAqKSh1aW50cHRyX3QpbWFyazsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBwdHJfdG9fbWFyayh2b2lkICogbWFyaykKK3sKKwlyZXR1cm4gKHVpbnQzMl90KSh1aW50cHRyX3QpbWFyazsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iamVjdCwgdWludDMyX3QgbWFyaykKK3sKKwlhZGRfZGVjb3JhdGlvbigmaWRudW1zLCBvYmplY3QsIG1hcmtfdG9fcHRyKG1hcmspKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hcmtfbmV4dF9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqZWN0KQoreworCW1hcmtfb2JqZWN0KG9iamVjdCwgKytsYXN0X2lkbnVtKTsKK30KKworc3RhdGljIGludCBnZXRfb2JqZWN0X21hcmsoc3RydWN0IG9iamVjdCAqb2JqZWN0KQoreworCXZvaWQgKmRlY29yYXRpb24gPSBsb29rdXBfZGVjb3JhdGlvbigmaWRudW1zLCBvYmplY3QpOworCWlmICghZGVjb3JhdGlvbikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHB0cl90b19tYXJrKGRlY29yYXRpb24pOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqcmV3cml0ZV9jb21taXQoc3RydWN0IGNvbW1pdCAqcCkKK3sKKwlmb3IgKDs7KSB7CisJCWlmIChwLT5wYXJlbnRzICYmIHAtPnBhcmVudHMtPm5leHQpCisJCQlicmVhazsKKwkJaWYgKHAtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQlicmVhazsKKwkJaWYgKCEocC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUUpKQorCQkJYnJlYWs7CisJCWlmICghcC0+cGFyZW50cykKKwkJCXJldHVybiBOVUxMOworCQlwID0gcC0+cGFyZW50cy0+aXRlbTsKKwl9CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcHJvZ3Jlc3Modm9pZCkKK3sKKwlzdGF0aWMgaW50IGNvdW50ZXIgPSAwOworCWlmICghcHJvZ3Jlc3MpCisJCXJldHVybjsKKwlpZiAoKCsrY291bnRlciAlIHByb2dyZXNzKSA9PSAwKQorCQlwcmludGYoInByb2dyZXNzICVkIG9iamVjdHNcbiIsIGNvdW50ZXIpOworfQorCisvKgorICogSWRlYWxseSB3ZSB3b3VsZCB3YW50IHNvbWUgdHJhbnNmb3JtYXRpb24gb2YgdGhlIGJsb2IgZGF0YSBoZXJlCisgKiB0aGF0IGlzIHVucmV2ZXJzaWJsZSwgYnV0IHdvdWxkIHN0aWxsIGJlIHRoZSBzYW1lIHNpemUgYW5kIGhhdmUKKyAqIHRoZSBzYW1lIGRhdGEgcmVsYXRpb25zaGlwIHRvIG90aGVyIGJsb2JzIChzbyB0aGF0IHdlIGdldCB0aGUgc2FtZQorICogZGVsdGEgYW5kIHBhY2tpbmcgYmVoYXZpb3IgYXMgdGhlIG9yaWdpbmFsKS4gQnV0IHRoZSBmaXJzdCBhbmQgbGFzdAorICogcmVxdWlyZW1lbnRzIHRoZXJlIGFyZSBwcm9iYWJseSBtdXR1YWxseSBleGNsdXNpdmUsIHNvIGxldCdzIHRha2UKKyAqIHRoZSBlYXN5IHdheSBvdXQgZm9yIG5vdywgYW5kIGp1c3QgZ2VuZXJhdGUgYXJiaXRyYXJ5IGNvbnRlbnQuCisgKgorICogVGhlcmUncyBubyBuZWVkIHRvIGNhY2hlIHRoaXMgcmVzdWx0IHdpdGggYW5vbnltaXplX21lbSwgc2luY2UKKyAqIHdlIGFscmVhZHkgaGFuZGxlIGJsb2IgY29udGVudCBjYWNoaW5nIHdpdGggbWFya3MuCisgKi8KK3N0YXRpYyBjaGFyICphbm9ueW1pemVfYmxvYih1bnNpZ25lZCBsb25nICpzaXplKQoreworCXN0YXRpYyBpbnQgY291bnRlcjsKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZvdXQsICJhbm9ueW1vdXMgYmxvYiAlZCIsIGNvdW50ZXIrKyk7CisJKnNpemUgPSBvdXQubGVuOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZvdXQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBleHBvcnRfYmxvYihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyICpidWY7CisJc3RydWN0IG9iamVjdCAqb2JqZWN0OworCWludCBlYXRlbjsKKworCWlmIChub19kYXRhKQorCQlyZXR1cm47CisKKwlpZiAoaXNfbnVsbF9vaWQob2lkKSkKKwkJcmV0dXJuOworCisJb2JqZWN0ID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKwlpZiAob2JqZWN0ICYmIG9iamVjdC0+ZmxhZ3MgJiBTSE9XTikKKwkJcmV0dXJuOworCisJaWYgKGFub255bWl6ZSkgeworCQlidWYgPSBhbm9ueW1pemVfYmxvYigmc2l6ZSk7CisJCW9iamVjdCA9IChzdHJ1Y3Qgb2JqZWN0ICopbG9va3VwX2Jsb2IodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJCWVhdGVuID0gMDsKKwl9IGVsc2UgeworCQlidWYgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFidWYpCisJCQlkaWUoImNvdWxkIG5vdCByZWFkIGJsb2IgJXMiLCBvaWRfdG9faGV4KG9pZCkpOworCQlpZiAoY2hlY2tfb2JqZWN0X3NpZ25hdHVyZSh0aGVfcmVwb3NpdG9yeSwgb2lkLCBidWYsIHNpemUsCisJCQkJCSAgIHR5cGVfbmFtZSh0eXBlKSkgPCAwKQorCQkJZGllKCJvaWQgbWlzbWF0Y2ggaW4gYmxvYiAlcyIsIG9pZF90b19oZXgob2lkKSk7CisJCW9iamVjdCA9IHBhcnNlX29iamVjdF9idWZmZXIodGhlX3JlcG9zaXRvcnksIG9pZCwgdHlwZSwKKwkJCQkJICAgICBzaXplLCBidWYsICZlYXRlbik7CisJfQorCisJaWYgKCFvYmplY3QpCisJCWRpZSgiQ291bGQgbm90IHJlYWQgYmxvYiAlcyIsIG9pZF90b19oZXgob2lkKSk7CisKKwltYXJrX25leHRfb2JqZWN0KG9iamVjdCk7CisKKwlwcmludGYoImJsb2Jcbm1hcmsgOiUiUFJJdTMyIlxuIiwgbGFzdF9pZG51bSk7CisJaWYgKHNob3dfb3JpZ2luYWxfaWRzKQorCQlwcmludGYoIm9yaWdpbmFsLW9pZCAlc1xuIiwgb2lkX3RvX2hleChvaWQpKTsKKwlwcmludGYoImRhdGEgJSJQUkl1TUFYIlxuIiwgKHVpbnRtYXhfdClzaXplKTsKKwlpZiAoc2l6ZSAmJiBmd3JpdGUoYnVmLCBzaXplLCAxLCBzdGRvdXQpICE9IDEpCisJCWRpZV9lcnJubygiY291bGQgbm90IHdyaXRlIGJsb2IgJyVzJyIsIG9pZF90b19oZXgob2lkKSk7CisJcHJpbnRmKCJcbiIpOworCisJc2hvd19wcm9ncmVzcygpOworCisJb2JqZWN0LT5mbGFncyB8PSBTSE9XTjsKKwlpZiAoIWVhdGVuKQorCQlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgZGVwdGhfZmlyc3QoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVwYWlyICphID0gKigoY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKiopYV8pOworCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpiID0gKigoY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKiopYl8pOworCWNvbnN0IGNoYXIgKm5hbWVfYSwgKm5hbWVfYjsKKwlpbnQgbGVuX2EsIGxlbl9iLCBsZW47CisJaW50IGNtcDsKKworCW5hbWVfYSA9IGEtPm9uZSA/IGEtPm9uZS0+cGF0aCA6IGEtPnR3by0+cGF0aDsKKwluYW1lX2IgPSBiLT5vbmUgPyBiLT5vbmUtPnBhdGggOiBiLT50d28tPnBhdGg7CisKKwlsZW5fYSA9IHN0cmxlbihuYW1lX2EpOworCWxlbl9iID0gc3RybGVuKG5hbWVfYik7CisJbGVuID0gKGxlbl9hIDwgbGVuX2IpID8gbGVuX2EgOiBsZW5fYjsKKworCS8qIHN0cmNtcCB3aWxsIHNvcnQgJ2QnIGJlZm9yZSAnZC9lJywgd2Ugd2FudCAnZC9lJyBiZWZvcmUgJ2QnICovCisJY21wID0gbWVtY21wKG5hbWVfYSwgbmFtZV9iLCBsZW4pOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisJY21wID0gbGVuX2IgLSBsZW5fYTsKKwlpZiAoY21wKQorCQlyZXR1cm4gY21wOworCS8qCisJICogTW92ZSAnUidlbmFtZSBlbnRyaWVzIGxhc3Qgc28gdGhhdCBhbGwgcmVmZXJlbmNlcyBvZiB0aGUgZmlsZQorCSAqIGFwcGVhciBpbiB0aGUgb3V0cHV0IGJlZm9yZSBpdCBpcyByZW5hbWVkIChlLmcuLCB3aGVuIGEgZmlsZQorCSAqIHdhcyBjb3BpZWQgYW5kIHJlbmFtZWQgaW4gdGhlIHNhbWUgY29tbWl0KS4KKwkgKi8KKwlyZXR1cm4gKGEtPnN0YXR1cyA9PSAnUicpIC0gKGItPnN0YXR1cyA9PSAnUicpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9wYXRoXzEoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgbmVlZF9xdW90ZSA9IHF1b3RlX2Nfc3R5bGUocGF0aCwgTlVMTCwgTlVMTCwgMCk7CisJaWYgKG5lZWRfcXVvdGUpCisJCXF1b3RlX2Nfc3R5bGUocGF0aCwgTlVMTCwgc3Rkb3V0LCAwKTsKKwllbHNlIGlmIChzdHJjaHIocGF0aCwgJyAnKSkKKwkJcHJpbnRmKCJcIiVzXCIiLCBwYXRoKTsKKwllbHNlCisJCXByaW50ZigiJXMiLCBwYXRoKTsKK30KKworc3RhdGljIHZvaWQgKmFub255bWl6ZV9wYXRoX2NvbXBvbmVudChjb25zdCB2b2lkICpwYXRoLCBzaXplX3QgKmxlbikKK3sKKwlzdGF0aWMgaW50IGNvdW50ZXI7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkZigmb3V0LCAicGF0aCVkIiwgY291bnRlcisrKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmb3V0LCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBwcmludF9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKCFhbm9ueW1pemUpCisJCXByaW50X3BhdGhfMShwYXRoKTsKKwllbHNlIHsKKwkJc3RhdGljIHN0cnVjdCBoYXNobWFwIHBhdGhzOworCQlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBhbm9uID0gU1RSQlVGX0lOSVQ7CisKKwkJYW5vbnltaXplX3BhdGgoJmFub24sIHBhdGgsICZwYXRocywgYW5vbnltaXplX3BhdGhfY29tcG9uZW50KTsKKwkJcHJpbnRfcGF0aF8xKGFub24uYnVmKTsKKwkJc3RyYnVmX3Jlc2V0KCZhbm9uKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkICpnZW5lcmF0ZV9mYWtlX29pZChjb25zdCB2b2lkICpvbGQsIHNpemVfdCAqbGVuKQoreworCXN0YXRpYyB1aW50MzJfdCBjb3VudGVyID0gMTsgLyogYXZvaWQgbnVsbCBvaWQgKi8KKwljb25zdCB1bnNpZ25lZCBoYXNoc3ogPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKwl1bnNpZ25lZCBjaGFyICpvdXQgPSB4Y2FsbG9jKGhhc2hzeiwgMSk7CisJcHV0X2JlMzIob3V0ICsgaGFzaHN6IC0gNCwgY291bnRlcisrKTsKKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYW5vbnltaXplX29pZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RhdGljIHN0cnVjdCBoYXNobWFwIG9ianM7CisJc2l6ZV90IGxlbiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCXJldHVybiBhbm9ueW1pemVfbWVtKCZvYmpzLCBnZW5lcmF0ZV9mYWtlX29pZCwgb2lkLCAmbGVuKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19maWxlbW9kaWZ5KHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKKwkJCSAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCB2b2lkICpkYXRhKQoreworCWludCBpOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqY2hhbmdlZCA9IGRhdGE7CisKKwkvKgorCSAqIEhhbmRsZSBmaWxlcyBiZWxvdyBhIGRpcmVjdG9yeSBmaXJzdCwgaW4gY2FzZSB0aGV5IGFyZSBhbGwgZGVsZXRlZAorCSAqIGFuZCB0aGUgZGlyZWN0b3J5IGNoYW5nZXMgdG8gYSBmaWxlIG9yIHN5bWxpbmsuCisJICovCisJUVNPUlQocS0+cXVldWUsIHEtPm5yLCBkZXB0aF9maXJzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb3NwZWMgPSBxLT5xdWV1ZVtpXS0+b25lOworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3BlYyA9IHEtPnF1ZXVlW2ldLT50d287CisKKwkJc3dpdGNoIChxLT5xdWV1ZVtpXS0+c3RhdHVzKSB7CisJCWNhc2UgRElGRl9TVEFUVVNfREVMRVRFRDoKKwkJCXByaW50ZigiRCAiKTsKKwkJCXByaW50X3BhdGgoc3BlYy0+cGF0aCk7CisJCQlzdHJpbmdfbGlzdF9pbnNlcnQoY2hhbmdlZCwgc3BlYy0+cGF0aCk7CisJCQlwdXRjaGFyKCdcbicpOworCQkJYnJlYWs7CisKKwkJY2FzZSBESUZGX1NUQVRVU19DT1BJRUQ6CisJCWNhc2UgRElGRl9TVEFUVVNfUkVOQU1FRDoKKwkJCS8qCisJCQkgKiBJZiBhIGNoYW5nZSBpbiB0aGUgZmlsZSBjb3JyZXNwb25kaW5nIHRvIG9zcGVjLT5wYXRoCisJCQkgKiBoYXMgYmVlbiBvYnNlcnZlZCwgd2UgY2Fubm90IHRydXN0IGl0cyBjb250ZW50cworCQkJICogYmVjYXVzZSB0aGUgZGlmZiBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBwcmlvcgorCQkJICogY29udGVudHMsIG5vdCB0aGUgY3VycmVudCBjb250ZW50cy4gIFNvLCBkZWNsYXJlIGEKKwkJCSAqIGNvcHkgb3IgcmVuYW1lIG9ubHkgaWYgdGhlcmUgd2FzIG5vIGNoYW5nZSBvYnNlcnZlZC4KKwkJCSAqLworCQkJaWYgKCFzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKGNoYW5nZWQsIG9zcGVjLT5wYXRoKSkgeworCQkJCXByaW50ZigiJWMgIiwgcS0+cXVldWVbaV0tPnN0YXR1cyk7CisJCQkJcHJpbnRfcGF0aChvc3BlYy0+cGF0aCk7CisJCQkJcHV0Y2hhcignICcpOworCQkJCXByaW50X3BhdGgoc3BlYy0+cGF0aCk7CisJCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KGNoYW5nZWQsIHNwZWMtPnBhdGgpOworCQkJCXB1dGNoYXIoJ1xuJyk7CisKKwkJCQlpZiAob2lkZXEoJm9zcGVjLT5vaWQsICZzcGVjLT5vaWQpICYmCisJCQkJICAgIG9zcGVjLT5tb2RlID09IHNwZWMtPm1vZGUpCisJCQkJCWJyZWFrOworCQkJfQorCQkJLyogZmFsbHRocm91Z2ggKi8KKworCQljYXNlIERJRkZfU1RBVFVTX1RZUEVfQ0hBTkdFRDoKKwkJY2FzZSBESUZGX1NUQVRVU19NT0RJRklFRDoKKwkJY2FzZSBESUZGX1NUQVRVU19BRERFRDoKKwkJCS8qCisJCQkgKiBMaW5rcyByZWZlciB0byBvYmplY3RzIGluIGFub3RoZXIgcmVwb3NpdG9yaWVzOworCQkJICogb3V0cHV0IHRoZSBTSEEtMSB2ZXJiYXRpbS4KKwkJCSAqLworCQkJaWYgKG5vX2RhdGEgfHwgU19JU0dJVExJTksoc3BlYy0+bW9kZSkpCisJCQkJcHJpbnRmKCJNICUwNm8gJXMgIiwgc3BlYy0+bW9kZSwKKwkJCQkgICAgICAgb2lkX3RvX2hleChhbm9ueW1pemUgPworCQkJCQkJICBhbm9ueW1pemVfb2lkKCZzcGVjLT5vaWQpIDoKKwkJCQkJCSAgJnNwZWMtPm9pZCkpOworCQkJZWxzZSB7CisJCQkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQkJICAgICAgJnNwZWMtPm9pZCk7CisJCQkJcHJpbnRmKCJNICUwNm8gOiVkICIsIHNwZWMtPm1vZGUsCisJCQkJICAgICAgIGdldF9vYmplY3RfbWFyayhvYmplY3QpKTsKKwkJCX0KKwkJCXByaW50X3BhdGgoc3BlYy0+cGF0aCk7CisJCQlzdHJpbmdfbGlzdF9pbnNlcnQoY2hhbmdlZCwgc3BlYy0+cGF0aCk7CisJCQlwdXRjaGFyKCdcbicpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRpZSgiVW5leHBlY3RlZCBjb21wYXJpc29uIHN0YXR1cyAnJWMnIGZvciAlcywgJXMiLAorCQkJCXEtPnF1ZXVlW2ldLT5zdGF0dXMsCisJCQkJb3NwZWMtPnBhdGggPyBvc3BlYy0+cGF0aCA6ICJub25lIiwKKwkJCQlzcGVjLT5wYXRoID8gc3BlYy0+cGF0aCA6ICJub25lIik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpmaW5kX2VuY29kaW5nKGNvbnN0IGNoYXIgKmJlZ2luLCBjb25zdCBjaGFyICplbmQpCit7CisJY29uc3QgY2hhciAqbmVlZGxlID0gIlxuZW5jb2RpbmcgIjsKKwljaGFyICpib2wsICplb2w7CisKKwlib2wgPSBtZW1tZW0oYmVnaW4sIGVuZCA/IGVuZCAtIGJlZ2luIDogc3RybGVuKGJlZ2luKSwKKwkJICAgICBuZWVkbGUsIHN0cmxlbihuZWVkbGUpKTsKKwlpZiAoIWJvbCkKKwkJcmV0dXJuIE5VTEw7CisJYm9sICs9IHN0cmxlbihuZWVkbGUpOworCWVvbCA9IHN0cmNocm51bChib2wsICdcbicpOworCSplb2wgPSAnXDAnOworCXJldHVybiBib2w7Cit9CisKK3N0YXRpYyB2b2lkICphbm9ueW1pemVfcmVmX2NvbXBvbmVudChjb25zdCB2b2lkICpvbGQsIHNpemVfdCAqbGVuKQoreworCXN0YXRpYyBpbnQgY291bnRlcjsKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZvdXQsICJyZWYlZCIsIGNvdW50ZXIrKyk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJm91dCwgbGVuKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmFub255bWl6ZV9yZWZuYW1lKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJLyoKKwkgKiBJZiBhbnkgb2YgdGhlc2UgcHJlZml4ZXMgaXMgZm91bmQsIHdlIHdpbGwgbGVhdmUgaXQgaW50YWN0CisJICogc28gdGhhdCB0YWdzIHJlbWFpbiB0YWdzIGFuZCBzbyBmb3J0aC4KKwkgKi8KKwlzdGF0aWMgY29uc3QgY2hhciAqcHJlZml4ZXNbXSA9IHsKKwkJInJlZnMvaGVhZHMvIiwKKwkJInJlZnMvdGFncy8iLAorCQkicmVmcy9yZW1vdGVzLyIsCisJCSJyZWZzLyIKKwl9OworCXN0YXRpYyBzdHJ1Y3QgaGFzaG1hcCByZWZzOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGFub24gPSBTVFJCVUZfSU5JVDsKKwlpbnQgaTsKKworCS8qCisJICogV2UgYWxzbyBsZWF2ZSAibWFzdGVyIiBhcyBhIHNwZWNpYWwgY2FzZSwgc2luY2UgaXQgZG9lcyBub3QgcmV2ZWFsCisJICogYW55dGhpbmcgaW50ZXJlc3RpbmcuCisJICovCisJaWYgKCFzdHJjbXAocmVmbmFtZSwgInJlZnMvaGVhZHMvbWFzdGVyIikpCisJCXJldHVybiByZWZuYW1lOworCisJc3RyYnVmX3Jlc2V0KCZhbm9uKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVmaXhlcyk7IGkrKykgeworCQlpZiAoc2tpcF9wcmVmaXgocmVmbmFtZSwgcHJlZml4ZXNbaV0sICZyZWZuYW1lKSkgeworCQkJc3RyYnVmX2FkZHN0cigmYW5vbiwgcHJlZml4ZXNbaV0pOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlhbm9ueW1pemVfcGF0aCgmYW5vbiwgcmVmbmFtZSwgJnJlZnMsIGFub255bWl6ZV9yZWZfY29tcG9uZW50KTsKKwlyZXR1cm4gYW5vbi5idWY7Cit9CisKKy8qCisgKiBXZSBkbyBub3QgZXZlbiBib3RoZXIgdG8gY2FjaGUgY29tbWl0IG1lc3NhZ2VzLCBhcyB0aGV5IGFyZSB1bmxpa2VseQorICogdG8gYmUgcmVwZWF0ZWQgdmVyYmF0aW0sIGFuZCBpdCBpcyBub3QgdGhhdCBpbnRlcmVzdGluZyB3aGVuIHRoZXkgYXJlLgorICovCitzdGF0aWMgY2hhciAqYW5vbnltaXplX2NvbW1pdF9tZXNzYWdlKGNvbnN0IGNoYXIgKm9sZCkKK3sKKwlzdGF0aWMgaW50IGNvdW50ZXI7CisJcmV0dXJuIHhzdHJmbXQoInN1YmplY3QgJWRcblxuYm9keVxuIiwgY291bnRlcisrKTsKK30KKworc3RhdGljIHN0cnVjdCBoYXNobWFwIGlkZW50czsKK3N0YXRpYyB2b2lkICphbm9ueW1pemVfaWRlbnQoY29uc3Qgdm9pZCAqb2xkLCBzaXplX3QgKmxlbikKK3sKKwlzdGF0aWMgaW50IGNvdW50ZXI7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkZigmb3V0LCAiVXNlciAlZCA8dXNlciVkQGV4YW1wbGUuY29tPiIsIGNvdW50ZXIsIGNvdW50ZXIpOworCWNvdW50ZXIrKzsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmb3V0LCBsZW4pOworfQorCisvKgorICogT3VyIHN0cmF0ZWd5IGhlcmUgaXMgdG8gYW5vbnltaXplIHRoZSBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzLAorICogYnV0IGtlZXAgdGltZXN0YW1wcyBpbnRhY3QsIGFzIHRoZXkgaW5mbHVlbmNlIHRoaW5ncyBsaWtlIHRyYXZlcnNhbAorICogb3JkZXIgKGFuZCBieSB0aGVtc2VsdmVzIHNob3VsZCBub3QgYmUgdG9vIHJldmVhbGluZykuCisgKi8KK3N0YXRpYyB2b2lkIGFub255bWl6ZV9pZGVudF9saW5lKGNvbnN0IGNoYXIgKipiZWcsIGNvbnN0IGNoYXIgKiplbmQpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmZmVyc1tdID0geyBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQgfTsKKwlzdGF0aWMgdW5zaWduZWQgd2hpY2hfYnVmZmVyOworCisJc3RydWN0IHN0cmJ1ZiAqb3V0OworCXN0cnVjdCBpZGVudF9zcGxpdCBzcGxpdDsKKwljb25zdCBjaGFyICplbmRfb2ZfaGVhZGVyOworCisJb3V0ID0gJmJ1ZmZlcnNbd2hpY2hfYnVmZmVyKytdOworCXdoaWNoX2J1ZmZlciAlPSBBUlJBWV9TSVpFKGJ1ZmZlcnMpOworCXN0cmJ1Zl9yZXNldChvdXQpOworCisJLyogc2tpcCAiY29tbWl0dGVyIiwgImF1dGhvciIsICJ0YWdnZXIiLCBldGMgKi8KKwllbmRfb2ZfaGVhZGVyID0gc3RyY2hyKCpiZWcsICcgJyk7CisJaWYgKCFlbmRfb2ZfaGVhZGVyKQorCQlCVUcoIm1hbGZvcm1lZCBsaW5lIGZlZCB0byBhbm9ueW1pemVfaWRlbnRfbGluZTogJS4qcyIsCisJCSAgICAoaW50KSgqZW5kIC0gKmJlZyksICpiZWcpOworCWVuZF9vZl9oZWFkZXIrKzsKKwlzdHJidWZfYWRkKG91dCwgKmJlZywgZW5kX29mX2hlYWRlciAtICpiZWcpOworCisJaWYgKCFzcGxpdF9pZGVudF9saW5lKCZzcGxpdCwgZW5kX29mX2hlYWRlciwgKmVuZCAtIGVuZF9vZl9oZWFkZXIpICYmCisJICAgIHNwbGl0LmRhdGVfYmVnaW4pIHsKKwkJY29uc3QgY2hhciAqaWRlbnQ7CisJCXNpemVfdCBsZW47CisKKwkJbGVuID0gc3BsaXQubWFpbF9lbmQgLSBzcGxpdC5uYW1lX2JlZ2luOworCQlpZGVudCA9IGFub255bWl6ZV9tZW0oJmlkZW50cywgYW5vbnltaXplX2lkZW50LAorCQkJCSAgICAgIHNwbGl0Lm5hbWVfYmVnaW4sICZsZW4pOworCQlzdHJidWZfYWRkKG91dCwgaWRlbnQsIGxlbik7CisJCXN0cmJ1Zl9hZGRjaChvdXQsICcgJyk7CisJCXN0cmJ1Zl9hZGQob3V0LCBzcGxpdC5kYXRlX2JlZ2luLCBzcGxpdC50el9lbmQgLSBzcGxpdC5kYXRlX2JlZ2luKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkc3RyKG91dCwgIk1hbGZvcm1lZCBJZGVudCA8bWFsZm9ybWVkQGV4YW1wbGUuY29tPiAwIC0wMDAwIik7CisJfQorCisJKmJlZyA9IG91dC0+YnVmOworCSplbmQgPSBvdXQtPmJ1ZiArIG91dC0+bGVuOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IHJldl9pbmZvICpyZXYsCisJCQkgIHN0cnVjdCBzdHJpbmdfbGlzdCAqcGF0aHNfb2ZfY2hhbmdlZF9vYmplY3RzKQoreworCWludCBzYXZlZF9vdXRwdXRfZm9ybWF0ID0gcmV2LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQ7CisJY29uc3QgY2hhciAqY29tbWl0X2J1ZmZlcjsKKwljb25zdCBjaGFyICphdXRob3IsICphdXRob3JfZW5kLCAqY29tbWl0dGVyLCAqY29tbWl0dGVyX2VuZDsKKwljb25zdCBjaGFyICplbmNvZGluZywgKm1lc3NhZ2U7CisJY2hhciAqcmVlbmNvZGVkID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJY29uc3QgY2hhciAqcmVmbmFtZTsKKwlpbnQgaTsKKworCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisKKwlwYXJzZV9jb21taXRfb3JfZGllKGNvbW1pdCk7CisJY29tbWl0X2J1ZmZlciA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgTlVMTCk7CisJYXV0aG9yID0gc3Ryc3RyKGNvbW1pdF9idWZmZXIsICJcbmF1dGhvciAiKTsKKwlpZiAoIWF1dGhvcikKKwkJZGllKCJjb3VsZCBub3QgZmluZCBhdXRob3IgaW4gY29tbWl0ICVzIiwKKwkJICAgIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCWF1dGhvcisrOworCWF1dGhvcl9lbmQgPSBzdHJjaHJudWwoYXV0aG9yLCAnXG4nKTsKKwljb21taXR0ZXIgPSBzdHJzdHIoYXV0aG9yX2VuZCwgIlxuY29tbWl0dGVyICIpOworCWlmICghY29tbWl0dGVyKQorCQlkaWUoImNvdWxkIG5vdCBmaW5kIGNvbW1pdHRlciBpbiBjb21taXQgJXMiLAorCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJY29tbWl0dGVyKys7CisJY29tbWl0dGVyX2VuZCA9IHN0cmNocm51bChjb21taXR0ZXIsICdcbicpOworCW1lc3NhZ2UgPSBzdHJzdHIoY29tbWl0dGVyX2VuZCwgIlxuXG4iKTsKKwllbmNvZGluZyA9IGZpbmRfZW5jb2RpbmcoY29tbWl0dGVyX2VuZCwgbWVzc2FnZSk7CisJaWYgKG1lc3NhZ2UpCisJCW1lc3NhZ2UgKz0gMjsKKworCWlmIChjb21taXQtPnBhcmVudHMgJiYKKwkgICAgKGdldF9vYmplY3RfbWFyaygmY29tbWl0LT5wYXJlbnRzLT5pdGVtLT5vYmplY3QpICE9IDAgfHwKKwkgICAgIHJlZmVyZW5jZV9leGNsdWRlZF9jb21taXRzKSAmJgorCSAgICAhZnVsbF90cmVlKSB7CisJCXBhcnNlX2NvbW1pdF9vcl9kaWUoY29tbWl0LT5wYXJlbnRzLT5pdGVtKTsKKwkJZGlmZl90cmVlX29pZChnZXRfY29tbWl0X3RyZWVfb2lkKGNvbW1pdC0+cGFyZW50cy0+aXRlbSksCisJCQkgICAgICBnZXRfY29tbWl0X3RyZWVfb2lkKGNvbW1pdCksICIiLCAmcmV2LT5kaWZmb3B0KTsKKwl9CisJZWxzZQorCQlkaWZmX3Jvb3RfdHJlZV9vaWQoZ2V0X2NvbW1pdF90cmVlX29pZChjb21taXQpLAorCQkJCSAgICIiLCAmcmV2LT5kaWZmb3B0KTsKKworCS8qIEV4cG9ydCB0aGUgcmVmZXJlbmNlZCBibG9icywgYW5kIHJlbWVtYmVyIHRoZSBtYXJrcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKQorCQlpZiAoIVNfSVNHSVRMSU5LKGRpZmZfcXVldWVkX2RpZmYucXVldWVbaV0tPnR3by0+bW9kZSkpCisJCQlleHBvcnRfYmxvYigmZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXS0+dHdvLT5vaWQpOworCisJcmVmbmFtZSA9ICpyZXZpc2lvbl9zb3VyY2VzX2F0KCZyZXZpc2lvbl9zb3VyY2VzLCBjb21taXQpOworCS8qCisJICogRklYTUU6IHN0cmluZ19saXN0X3JlbW92ZSgpIGJlbG93IGZvciBlYWNoIHJlZiBpcyBvdmVyYWxsCisJICogTyhOXjIpLiAgQ29tcGFyZWQgdG8gYSBoaXN0b3J5IHdhbGsgYW5kIGRpZmZpbmcgdHJlZXMsIHRoaXMgaXMKKwkgKiBqdXN0IGxvc3QgaW4gdGhlIG5vaXNlIGluIHByYWN0aWNlLiAgSG93ZXZlciwgdGhlb3JldGljYWxseSBhCisJICogcmVwbyBtYXkgaGF2ZSBlbm91Z2ggcmVmcyBmb3IgdGhpcyB0byBiZWNvbWUgc2xvdy4KKwkgKi8KKwlzdHJpbmdfbGlzdF9yZW1vdmUoJmV4dHJhX3JlZnMsIHJlZm5hbWUsIDApOworCWlmIChhbm9ueW1pemUpIHsKKwkJcmVmbmFtZSA9IGFub255bWl6ZV9yZWZuYW1lKHJlZm5hbWUpOworCQlhbm9ueW1pemVfaWRlbnRfbGluZSgmY29tbWl0dGVyLCAmY29tbWl0dGVyX2VuZCk7CisJCWFub255bWl6ZV9pZGVudF9saW5lKCZhdXRob3IsICZhdXRob3JfZW5kKTsKKwl9CisKKwltYXJrX25leHRfb2JqZWN0KCZjb21taXQtPm9iamVjdCk7CisJaWYgKGFub255bWl6ZSkgeworCQlyZWVuY29kZWQgPSBhbm9ueW1pemVfY29tbWl0X21lc3NhZ2UobWVzc2FnZSk7CisJfSBlbHNlIGlmIChlbmNvZGluZykgeworCQlzd2l0Y2gocmVlbmNvZGVfbW9kZSkgeworCQljYXNlIFJFRU5DT0RFX1lFUzoKKwkJCXJlZW5jb2RlZCA9IHJlZW5jb2RlX3N0cmluZyhtZXNzYWdlLCAiVVRGLTgiLCBlbmNvZGluZyk7CisJCQlicmVhazsKKwkJY2FzZSBSRUVOQ09ERV9OTzoKKwkJCWJyZWFrOworCQljYXNlIFJFRU5DT0RFX0FCT1JUOgorCQkJZGllKCJFbmNvdW50ZXJlZCBjb21taXQtc3BlY2lmaWMgZW5jb2RpbmcgJXMgaW4gY29tbWl0ICIKKwkJCSAgICAiJXM7IHVzZSAtLXJlZW5jb2RlPVt5ZXN8bm9dIHRvIGhhbmRsZSBpdCIsCisJCQkgICAgZW5jb2RpbmcsIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCQl9CisJfQorCWlmICghY29tbWl0LT5wYXJlbnRzKQorCQlwcmludGYoInJlc2V0ICVzXG4iLCByZWZuYW1lKTsKKwlwcmludGYoImNvbW1pdCAlc1xubWFyayA6JSJQUkl1MzIiXG4iLCByZWZuYW1lLCBsYXN0X2lkbnVtKTsKKwlpZiAoc2hvd19vcmlnaW5hbF9pZHMpCisJCXByaW50Zigib3JpZ2luYWwtb2lkICVzXG4iLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwlwcmludGYoIiUuKnNcbiUuKnNcbiIsCisJICAgICAgIChpbnQpKGF1dGhvcl9lbmQgLSBhdXRob3IpLCBhdXRob3IsCisJICAgICAgIChpbnQpKGNvbW1pdHRlcl9lbmQgLSBjb21taXR0ZXIpLCBjb21taXR0ZXIpOworCWlmICghcmVlbmNvZGVkICYmIGVuY29kaW5nKQorCQlwcmludGYoImVuY29kaW5nICVzXG4iLCBlbmNvZGluZyk7CisJcHJpbnRmKCJkYXRhICV1XG4lcyIsCisJICAgICAgICh1bnNpZ25lZCkocmVlbmNvZGVkCisJCQkgID8gc3RybGVuKHJlZW5jb2RlZCkgOiBtZXNzYWdlCisJCQkgID8gc3RybGVuKG1lc3NhZ2UpIDogMCksCisJICAgICAgIHJlZW5jb2RlZCA/IHJlZW5jb2RlZCA6IG1lc3NhZ2UgPyBtZXNzYWdlIDogIiIpOworCWZyZWUocmVlbmNvZGVkKTsKKwl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgY29tbWl0X2J1ZmZlcik7CisKKwlmb3IgKGkgPSAwLCBwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmcC0+aXRlbS0+b2JqZWN0OworCQlpbnQgbWFyayA9IGdldF9vYmplY3RfbWFyayhvYmopOworCisJCWlmICghbWFyayAmJiAhcmVmZXJlbmNlX2V4Y2x1ZGVkX2NvbW1pdHMpCisJCQljb250aW51ZTsKKwkJaWYgKGkgPT0gMCkKKwkJCXByaW50ZigiZnJvbSAiKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJtZXJnZSAiKTsKKwkJaWYgKG1hcmspCisJCQlwcmludGYoIjolZFxuIiwgbWFyayk7CisJCWVsc2UKKwkJCXByaW50ZigiJXNcbiIsIG9pZF90b19oZXgoYW5vbnltaXplID8KKwkJCQkJCSAgYW5vbnltaXplX29pZCgmb2JqLT5vaWQpIDoKKwkJCQkJCSAgJm9iai0+b2lkKSk7CisJCWkrKzsKKwl9CisKKwlpZiAoZnVsbF90cmVlKQorCQlwcmludGYoImRlbGV0ZWFsbFxuIik7CisJbG9nX3RyZWVfZGlmZl9mbHVzaChyZXYpOworCXN0cmluZ19saXN0X2NsZWFyKHBhdGhzX29mX2NoYW5nZWRfb2JqZWN0cywgMCk7CisJcmV2LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBzYXZlZF9vdXRwdXRfZm9ybWF0OworCisJcHJpbnRmKCJcbiIpOworCisJc2hvd19wcm9ncmVzcygpOworfQorCitzdGF0aWMgdm9pZCAqYW5vbnltaXplX3RhZyhjb25zdCB2b2lkICpvbGQsIHNpemVfdCAqbGVuKQoreworCXN0YXRpYyBpbnQgY291bnRlcjsKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZvdXQsICJ0YWcgbWVzc2FnZSAlZCIsIGNvdW50ZXIrKyk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJm91dCwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3RhaWwoc3RydWN0IG9iamVjdF9hcnJheSAqY29tbWl0cywgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJc3RydWN0IHN0cmluZ19saXN0ICpwYXRoc19vZl9jaGFuZ2VkX29iamVjdHMpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXdoaWxlIChjb21taXRzLT5ucikgeworCQljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW9iamVjdF9hcnJheV9wb3AoY29tbWl0cyk7CisJCWlmIChoYXNfdW5zaG93bl9wYXJlbnQoY29tbWl0KSkgeworCQkJLyogUXVldWUgYWdhaW4sIHRvIGJlIGhhbmRsZWQgbGF0ZXIgKi8KKwkJCWFkZF9vYmplY3RfYXJyYXkoJmNvbW1pdC0+b2JqZWN0LCBOVUxMLCBjb21taXRzKTsKKwkJCXJldHVybjsKKwkJfQorCQloYW5kbGVfY29tbWl0KGNvbW1pdCwgcmV2cywgcGF0aHNfb2ZfY2hhbmdlZF9vYmplY3RzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV90YWcoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHRhZyAqdGFnKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciAqYnVmOworCWNvbnN0IGNoYXIgKnRhZ2dlciwgKnRhZ2dlcl9lbmQsICptZXNzYWdlOworCXNpemVfdCBtZXNzYWdlX3NpemUgPSAwOworCXN0cnVjdCBvYmplY3QgKnRhZ2dlZDsKKwlpbnQgdGFnZ2VkX21hcms7CisJc3RydWN0IGNvbW1pdCAqcDsKKworCS8qIFRyZWVzIGhhdmUgbm8gaWRlbnRpZmllciBpbiBmYXN0LWV4cG9ydCBvdXRwdXQsIHRodXMgd2UgaGF2ZSBubyB3YXkKKwkgKiB0byBvdXRwdXQgdGFncyBvZiB0cmVlcywgdGFncyBvZiB0YWdzIG9mIHRyZWVzLCBldGMuICBTaW1wbHkgb21pdAorCSAqIHN1Y2ggdGFncy4KKwkgKi8KKwl0YWdnZWQgPSB0YWctPnRhZ2dlZDsKKwl3aGlsZSAodGFnZ2VkLT50eXBlID09IE9CSl9UQUcpIHsKKwkJdGFnZ2VkID0gKChzdHJ1Y3QgdGFnICopdGFnZ2VkKS0+dGFnZ2VkOworCX0KKwlpZiAodGFnZ2VkLT50eXBlID09IE9CSl9UUkVFKSB7CisJCXdhcm5pbmcoIk9taXR0aW5nIHRhZyAlcyxcbnNpbmNlIHRhZ3Mgb2YgdHJlZXMgKG9yIHRhZ3Mgb2YgdGFncyBvZiB0cmVlcywgZXRjLikgYXJlIG5vdCBzdXBwb3J0ZWQuIiwKKwkJCW9pZF90b19oZXgoJnRhZy0+b2JqZWN0Lm9pZCkpOworCQlyZXR1cm47CisJfQorCisJYnVmID0gcmVhZF9vYmplY3RfZmlsZSgmdGFnLT5vYmplY3Qub2lkLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlkaWUoImNvdWxkIG5vdCByZWFkIHRhZyAlcyIsIG9pZF90b19oZXgoJnRhZy0+b2JqZWN0Lm9pZCkpOworCW1lc3NhZ2UgPSBtZW1tZW0oYnVmLCBzaXplLCAiXG5cbiIsIDIpOworCWlmIChtZXNzYWdlKSB7CisJCW1lc3NhZ2UgKz0gMjsKKwkJbWVzc2FnZV9zaXplID0gc3RybGVuKG1lc3NhZ2UpOworCX0KKwl0YWdnZXIgPSBtZW1tZW0oYnVmLCBtZXNzYWdlID8gbWVzc2FnZSAtIGJ1ZiA6IHNpemUsICJcbnRhZ2dlciAiLCA4KTsKKwlpZiAoIXRhZ2dlcikgeworCQlpZiAoZmFrZV9taXNzaW5nX3RhZ2dlcikKKwkJCXRhZ2dlciA9ICJ0YWdnZXIgVW5zcGVjaWZpZWQgVGFnZ2VyICIKKwkJCQkiPHVuc3BlY2lmaWVkLXRhZ2dlcj4gMCArMDAwMCI7CisJCWVsc2UKKwkJCXRhZ2dlciA9ICIiOworCQl0YWdnZXJfZW5kID0gdGFnZ2VyICsgc3RybGVuKHRhZ2dlcik7CisJfSBlbHNlIHsKKwkJdGFnZ2VyKys7CisJCXRhZ2dlcl9lbmQgPSBzdHJjaHJudWwodGFnZ2VyLCAnXG4nKTsKKwkJaWYgKGFub255bWl6ZSkKKwkJCWFub255bWl6ZV9pZGVudF9saW5lKCZ0YWdnZXIsICZ0YWdnZXJfZW5kKTsKKwl9CisKKwlpZiAoYW5vbnltaXplKSB7CisJCW5hbWUgPSBhbm9ueW1pemVfcmVmbmFtZShuYW1lKTsKKwkJaWYgKG1lc3NhZ2UpIHsKKwkJCXN0YXRpYyBzdHJ1Y3QgaGFzaG1hcCB0YWdzOworCQkJbWVzc2FnZSA9IGFub255bWl6ZV9tZW0oJnRhZ3MsIGFub255bWl6ZV90YWcsCisJCQkJCQltZXNzYWdlLCAmbWVzc2FnZV9zaXplKTsKKwkJfQorCX0KKworCS8qIGhhbmRsZSBzaWduZWQgdGFncyAqLworCWlmIChtZXNzYWdlKSB7CisJCWNvbnN0IGNoYXIgKnNpZ25hdHVyZSA9IHN0cnN0cihtZXNzYWdlLAorCQkJCQkgICAgICAgIlxuLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS1cbiIpOworCQlpZiAoc2lnbmF0dXJlKQorCQkJc3dpdGNoKHNpZ25lZF90YWdfbW9kZSkgeworCQkJY2FzZSBTSUdORURfVEFHX0FCT1JUOgorCQkJCWRpZSgiZW5jb3VudGVyZWQgc2lnbmVkIHRhZyAlczsgdXNlICIKKwkJCQkgICAgIi0tc2lnbmVkLXRhZ3M9PG1vZGU+IHRvIGhhbmRsZSBpdCIsCisJCQkJICAgIG9pZF90b19oZXgoJnRhZy0+b2JqZWN0Lm9pZCkpOworCQkJY2FzZSBXQVJOOgorCQkJCXdhcm5pbmcoImV4cG9ydGluZyBzaWduZWQgdGFnICVzIiwKKwkJCQkJb2lkX3RvX2hleCgmdGFnLT5vYmplY3Qub2lkKSk7CisJCQkJLyogZmFsbHRocnUgKi8KKwkJCWNhc2UgVkVSQkFUSU06CisJCQkJYnJlYWs7CisJCQljYXNlIFdBUk5fU1RSSVA6CisJCQkJd2FybmluZygic3RyaXBwaW5nIHNpZ25hdHVyZSBmcm9tIHRhZyAlcyIsCisJCQkJCW9pZF90b19oZXgoJnRhZy0+b2JqZWN0Lm9pZCkpOworCQkJCS8qIGZhbGx0aHJ1ICovCisJCQljYXNlIFNUUklQOgorCQkJCW1lc3NhZ2Vfc2l6ZSA9IHNpZ25hdHVyZSArIDEgLSBtZXNzYWdlOworCQkJCWJyZWFrOworCQkJfQorCX0KKworCS8qIGhhbmRsZSB0YWctPnRhZ2dlZCBoYXZpbmcgYmVlbiBmaWx0ZXJlZCBvdXQgZHVlIHRvIHBhdGhzIHNwZWNpZmllZCAqLworCXRhZ2dlZCA9IHRhZy0+dGFnZ2VkOworCXRhZ2dlZF9tYXJrID0gZ2V0X29iamVjdF9tYXJrKHRhZ2dlZCk7CisJaWYgKCF0YWdnZWRfbWFyaykgeworCQlzd2l0Y2godGFnX29mX2ZpbHRlcmVkX21vZGUpIHsKKwkJY2FzZSBUQUdfRklMVEVSSU5HX0FCT1JUOgorCQkJZGllKCJ0YWcgJXMgdGFncyB1bmV4cG9ydGVkIG9iamVjdDsgdXNlICIKKwkJCSAgICAiLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0PTxtb2RlPiB0byBoYW5kbGUgaXQiLAorCQkJICAgIG9pZF90b19oZXgoJnRhZy0+b2JqZWN0Lm9pZCkpOworCQljYXNlIERST1A6CisJCQkvKiBJZ25vcmUgdGhpcyB0YWcgYWx0b2dldGhlciAqLworCQkJZnJlZShidWYpOworCQkJcmV0dXJuOworCQljYXNlIFJFV1JJVEU6CisJCQlpZiAodGFnZ2VkLT50eXBlID09IE9CSl9UQUcgJiYgIW1hcmtfdGFncykgeworCQkJCWRpZShfKCJFcnJvcjogQ2Fubm90IGV4cG9ydCBuZXN0ZWQgdGFncyB1bmxlc3MgLS1tYXJrLXRhZ3MgaXMgc3BlY2lmaWVkLiIpKTsKKwkJCX0gZWxzZSBpZiAodGFnZ2VkLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJCQlwID0gcmV3cml0ZV9jb21taXQoKHN0cnVjdCBjb21taXQgKil0YWdnZWQpOworCQkJCWlmICghcCkgeworCQkJCQlwcmludGYoInJlc2V0ICVzXG5mcm9tICVzXG5cbiIsCisJCQkJCSAgICAgICBuYW1lLCBvaWRfdG9faGV4KCZudWxsX29pZCkpOworCQkJCQlmcmVlKGJ1Zik7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJdGFnZ2VkX21hcmsgPSBnZXRfb2JqZWN0X21hcmsoJnAtPm9iamVjdCk7CisJCQl9IGVsc2UgeworCQkJCS8qIHRhZ2dlZC0+dHlwZSBpcyBlaXRoZXIgT0JKX0JMT0Igb3IgT0JKX1RBRyAqLworCQkJCXRhZ2dlZF9tYXJrID0gZ2V0X29iamVjdF9tYXJrKHRhZ2dlZCk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAodGFnZ2VkLT50eXBlID09IE9CSl9UQUcpIHsKKwkJcHJpbnRmKCJyZXNldCAlc1xuZnJvbSAlc1xuXG4iLAorCQkgICAgICAgbmFtZSwgb2lkX3RvX2hleCgmbnVsbF9vaWQpKTsKKwl9CisJc2tpcF9wcmVmaXgobmFtZSwgInJlZnMvdGFncy8iLCAmbmFtZSk7CisJcHJpbnRmKCJ0YWcgJXNcbiIsIG5hbWUpOworCWlmIChtYXJrX3RhZ3MpIHsKKwkJbWFya19uZXh0X29iamVjdCgmdGFnLT5vYmplY3QpOworCQlwcmludGYoIm1hcmsgOiUiUFJJdTMyIlxuIiwgbGFzdF9pZG51bSk7CisJfQorCWlmICh0YWdnZWRfbWFyaykKKwkJcHJpbnRmKCJmcm9tIDolZFxuIiwgdGFnZ2VkX21hcmspOworCWVsc2UKKwkJcHJpbnRmKCJmcm9tICVzXG4iLCBvaWRfdG9faGV4KCZ0YWdnZWQtPm9pZCkpOworCisJaWYgKHNob3dfb3JpZ2luYWxfaWRzKQorCQlwcmludGYoIm9yaWdpbmFsLW9pZCAlc1xuIiwgb2lkX3RvX2hleCgmdGFnLT5vYmplY3Qub2lkKSk7CisJcHJpbnRmKCIlLipzJXNkYXRhICVkXG4lLipzXG4iLAorCSAgICAgICAoaW50KSh0YWdnZXJfZW5kIC0gdGFnZ2VyKSwgdGFnZ2VyLAorCSAgICAgICB0YWdnZXIgPT0gdGFnZ2VyX2VuZCA/ICIiIDogIlxuIiwKKwkgICAgICAgKGludCltZXNzYWdlX3NpemUsIChpbnQpbWVzc2FnZV9zaXplLCBtZXNzYWdlID8gbWVzc2FnZSA6ICIiKTsKKwlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpnZXRfY29tbWl0KHN0cnVjdCByZXZfY21kbGluZV9lbnRyeSAqZSwgY2hhciAqZnVsbF9uYW1lKQoreworCXN3aXRjaCAoZS0+aXRlbS0+dHlwZSkgeworCWNhc2UgT0JKX0NPTU1JVDoKKwkJcmV0dXJuIChzdHJ1Y3QgY29tbWl0ICopZS0+aXRlbTsKKwljYXNlIE9CSl9UQUc6IHsKKwkJc3RydWN0IHRhZyAqdGFnID0gKHN0cnVjdCB0YWcgKillLT5pdGVtOworCisJCS8qIGhhbmRsZSBuZXN0ZWQgdGFncyAqLworCQl3aGlsZSAodGFnICYmIHRhZy0+b2JqZWN0LnR5cGUgPT0gT0JKX1RBRykgeworCQkJcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmdGFnLT5vYmplY3Qub2lkKTsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmdGFnX3JlZnMsIGZ1bGxfbmFtZSktPnV0aWwgPSB0YWc7CisJCQl0YWcgPSAoc3RydWN0IHRhZyAqKXRhZy0+dGFnZ2VkOworCQl9CisJCWlmICghdGFnKQorCQkJZGllKCJUYWcgJXMgcG9pbnRzIG5vd2hlcmU/IiwgZS0+bmFtZSk7CisJCXJldHVybiAoc3RydWN0IGNvbW1pdCAqKXRhZzsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgZ2V0X3RhZ3NfYW5kX2R1cGxpY2F0ZXMoc3RydWN0IHJldl9jbWRsaW5lX2luZm8gKmluZm8pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcmV2X2NtZGxpbmVfZW50cnkgKmUgPSBpbmZvLT5yZXYgKyBpOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQljaGFyICpmdWxsX25hbWU7CisKKwkJaWYgKGUtPmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCWNvbnRpbnVlOworCisJCWlmIChkd2ltX3JlZihlLT5uYW1lLCBzdHJsZW4oZS0+bmFtZSksICZvaWQsICZmdWxsX25hbWUpICE9IDEpCisJCQljb250aW51ZTsKKworCQlpZiAocmVmc3BlY3MubnIpIHsKKwkJCWNoYXIgKnByaXZhdGU7CisJCQlwcml2YXRlID0gYXBwbHlfcmVmc3BlY3MoJnJlZnNwZWNzLCBmdWxsX25hbWUpOworCQkJaWYgKHByaXZhdGUpIHsKKwkJCQlmcmVlKGZ1bGxfbmFtZSk7CisJCQkJZnVsbF9uYW1lID0gcHJpdmF0ZTsKKwkJCX0KKwkJfQorCisJCWNvbW1pdCA9IGdldF9jb21taXQoZSwgZnVsbF9uYW1lKTsKKwkJaWYgKCFjb21taXQpIHsKKwkJCXdhcm5pbmcoIiVzOiBVbmV4cGVjdGVkIG9iamVjdCBvZiB0eXBlICVzLCBza2lwcGluZy4iLAorCQkJCWUtPm5hbWUsCisJCQkJdHlwZV9uYW1lKGUtPml0ZW0tPnR5cGUpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoKGNvbW1pdC0+b2JqZWN0LnR5cGUpIHsKKwkJY2FzZSBPQkpfQ09NTUlUOgorCQkJYnJlYWs7CisJCWNhc2UgT0JKX0JMT0I6CisJCQlleHBvcnRfYmxvYigmY29tbWl0LT5vYmplY3Qub2lkKTsKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OiAvKiBPQkpfVEFHIChuZXN0ZWQgdGFncykgaXMgYWxyZWFkeSBoYW5kbGVkICovCisJCQl3YXJuaW5nKCJUYWcgcG9pbnRzIHRvIG9iamVjdCBvZiB1bmV4cGVjdGVkIHR5cGUgJXMsIHNraXBwaW5nLiIsCisJCQkJdHlwZV9uYW1lKGNvbW1pdC0+b2JqZWN0LnR5cGUpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoaXMgcmVmIGdldHMgcHJvcGVybHkgdXBkYXRlZCBldmVudHVhbGx5LCB3aGV0aGVyCisJCSAqIHRocm91Z2ggYSBjb21taXQgb3IgbWFudWFsbHkgYXQgdGhlIGVuZC4KKwkJICovCisJCWlmIChlLT5pdGVtLT50eXBlICE9IE9CSl9UQUcpCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmV4dHJhX3JlZnMsIGZ1bGxfbmFtZSktPnV0aWwgPSBjb21taXQ7CisKKwkJaWYgKCEqcmV2aXNpb25fc291cmNlc19hdCgmcmV2aXNpb25fc291cmNlcywgY29tbWl0KSkKKwkJCSpyZXZpc2lvbl9zb3VyY2VzX2F0KCZyZXZpc2lvbl9zb3VyY2VzLCBjb21taXQpID0gZnVsbF9uYW1lOworCX0KKworCXN0cmluZ19saXN0X3NvcnQoJmV4dHJhX3JlZnMpOworCXN0cmluZ19saXN0X3JlbW92ZV9kdXBsaWNhdGVzKCZleHRyYV9yZWZzLCAwKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3RhZ3NfYW5kX2R1cGxpY2F0ZXMoc3RydWN0IHN0cmluZ19saXN0ICpleHRyYXMpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWludCBpOworCisJZm9yIChpID0gZXh0cmFzLT5uciAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBleHRyYXMtPml0ZW1zW2ldLnN0cmluZzsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gZXh0cmFzLT5pdGVtc1tpXS51dGlsOworCQlpbnQgbWFyazsKKworCQlzd2l0Y2ggKG9iamVjdC0+dHlwZSkgeworCQljYXNlIE9CSl9UQUc6CisJCQloYW5kbGVfdGFnKG5hbWUsIChzdHJ1Y3QgdGFnICopb2JqZWN0KTsKKwkJCWJyZWFrOworCQljYXNlIE9CSl9DT01NSVQ6CisJCQlpZiAoYW5vbnltaXplKQorCQkJCW5hbWUgPSBhbm9ueW1pemVfcmVmbmFtZShuYW1lKTsKKwkJCS8qIGNyZWF0ZSByZWZzIHBvaW50aW5nIHRvIGFscmVhZHkgc2VlbiBjb21taXRzICovCisJCQljb21taXQgPSByZXdyaXRlX2NvbW1pdCgoc3RydWN0IGNvbW1pdCAqKW9iamVjdCk7CisJCQlpZiAoIWNvbW1pdCkgeworCQkJCS8qCisJCQkJICogTmVpdGhlciB0aGlzIG9iamVjdCBub3IgYW55IG9mIGl0cworCQkJCSAqIGFuY2VzdG9ycyB0b3VjaCBhbnkgcmVsZXZhbnQgcGF0aHMsIHNvCisJCQkJICogaXQgaGFzIGJlZW4gZmlsdGVyZWQgdG8gbm90aGluZy4gIERlbGV0ZQorCQkJCSAqIGl0LgorCQkJCSAqLworCQkJCXByaW50ZigicmVzZXQgJXNcbmZyb20gJXNcblxuIiwKKwkJCQkgICAgICAgbmFtZSwgb2lkX3RvX2hleCgmbnVsbF9vaWQpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJbWFyayA9IGdldF9vYmplY3RfbWFyaygmY29tbWl0LT5vYmplY3QpOworCQkJaWYgKCFtYXJrKSB7CisJCQkJLyoKKwkJCQkgKiBHZXR0aW5nIGhlcmUgbWVhbnMgd2UgaGF2ZSBhIGNvbW1pdCB3aGljaAorCQkJCSAqIHdhcyBleGNsdWRlZCBieSBhIG5lZ2F0aXZlIHJlZnNwZWMgKGUuZy4KKwkJCQkgKiBmYXN0LWV4cG9ydCBebWFzdGVyIG1hc3RlcikuICBJZiB3ZSBhcmUKKwkJCQkgKiByZWZlcmVuY2luZyBleGNsdWRlZCBjb21taXRzLCBzZXQgdGhlIHJlZgorCQkJCSAqIHRvIHRoZSBleGFjdCBjb21taXQuICBPdGhlcndpc2UsIHRoZSB1c2VyCisJCQkJICogd2FudHMgdGhlIGJyYW5jaCBleHBvcnRlZCBidXQgZXZlcnkgY29tbWl0CisJCQkJICogaW4gaXRzIGhpc3RvcnkgdG8gYmUgZGVsZXRlZCwgd2hpY2ggYmFzaWNhbGx5CisJCQkJICoganVzdCBtZWFucyBkZWxldGlvbiBvZiB0aGUgcmVmLgorCQkJCSAqLworCQkJCWlmICghcmVmZXJlbmNlX2V4Y2x1ZGVkX2NvbW1pdHMpIHsKKwkJCQkJLyogZGVsZXRlIHRoZSByZWYgKi8KKwkJCQkJcHJpbnRmKCJyZXNldCAlc1xuZnJvbSAlc1xuXG4iLAorCQkJCQkgICAgICAgbmFtZSwgb2lkX3RvX2hleCgmbnVsbF9vaWQpKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCS8qIHNldCByZWYgdG8gY29tbWl0IHVzaW5nIG9pZCwgbm90IG1hcmsgKi8KKwkJCQlwcmludGYoInJlc2V0ICVzXG5mcm9tICVzXG5cbiIsIG5hbWUsCisJCQkJICAgICAgIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlwcmludGYoInJlc2V0ICVzXG5mcm9tIDolZFxuXG4iLCBuYW1lLCBtYXJrCisJCQkgICAgICAgKTsKKwkJCXNob3dfcHJvZ3Jlc3MoKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBleHBvcnRfbWFya3MoY2hhciAqZmlsZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1aW50MzJfdCBtYXJrOworCXN0cnVjdCBkZWNvcmF0aW9uX2VudHJ5ICpkZWNvID0gaWRudW1zLmVudHJpZXM7CisJRklMRSAqZjsKKwlpbnQgZSA9IDA7CisKKwlmID0gZm9wZW5fZm9yX3dyaXRpbmcoZmlsZSk7CisJaWYgKCFmKQorCQlkaWVfZXJybm8oIlVuYWJsZSB0byBvcGVuIG1hcmtzIGZpbGUgJXMgZm9yIHdyaXRpbmcuIiwgZmlsZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaWRudW1zLnNpemU7IGkrKykgeworCQlpZiAoZGVjby0+YmFzZSAmJiBkZWNvLT5iYXNlLT50eXBlID09IDEpIHsKKwkJCW1hcmsgPSBwdHJfdG9fbWFyayhkZWNvLT5kZWNvcmF0aW9uKTsKKwkJCWlmIChmcHJpbnRmKGYsICI6JSJQUkl1MzIiICVzXG4iLCBtYXJrLAorCQkJCW9pZF90b19oZXgoJmRlY28tPmJhc2UtPm9pZCkpIDwgMCkgeworCQkJICAgIGUgPSAxOworCQkJICAgIGJyZWFrOworCQkJfQorCQl9CisJCWRlY28rKzsKKwl9CisKKwllIHw9IGZlcnJvcihmKTsKKwllIHw9IGZjbG9zZShmKTsKKwlpZiAoZSkKKwkJZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBtYXJrcyBmaWxlICVzLiIsIGZpbGUpOworfQorCitzdGF0aWMgdm9pZCBpbXBvcnRfbWFya3MoY2hhciAqaW5wdXRfZmlsZSwgaW50IGNoZWNrX2V4aXN0cykKK3sKKwljaGFyIGxpbmVbNTEyXTsKKwlGSUxFICpmOworCXN0cnVjdCBzdGF0IHNiOworCisJaWYgKGNoZWNrX2V4aXN0cyAmJiBzdGF0KGlucHV0X2ZpbGUsICZzYikpCisJCXJldHVybjsKKworCWYgPSB4Zm9wZW4oaW5wdXRfZmlsZSwgInIiKTsKKwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkgeworCQl1aW50MzJfdCBtYXJrOworCQljaGFyICpsaW5lX2VuZCwgKm1hcmtfZW5kOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0OworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCQlsaW5lX2VuZCA9IHN0cmNocihsaW5lLCAnXG4nKTsKKwkJaWYgKGxpbmVbMF0gIT0gJzonIHx8ICFsaW5lX2VuZCkKKwkJCWRpZSgiY29ycnVwdCBtYXJrIGxpbmU6ICVzIiwgbGluZSk7CisJCSpsaW5lX2VuZCA9ICdcMCc7CisKKwkJbWFyayA9IHN0cnRvdW1heChsaW5lICsgMSwgJm1hcmtfZW5kLCAxMCk7CisJCWlmICghbWFyayB8fCBtYXJrX2VuZCA9PSBsaW5lICsgMQorCQkJfHwgKm1hcmtfZW5kICE9ICcgJyB8fCBnZXRfb2lkX2hleChtYXJrX2VuZCArIDEsICZvaWQpKQorCQkJZGllKCJjb3JydXB0IG1hcmsgbGluZTogJXMiLCBsaW5lKTsKKworCQlpZiAobGFzdF9pZG51bSA8IG1hcmspCisJCQlsYXN0X2lkbnVtID0gbWFyazsKKworCQl0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCAmb2lkLCBOVUxMKTsKKwkJaWYgKHR5cGUgPCAwKQorCQkJZGllKCJvYmplY3Qgbm90IGZvdW5kOiAlcyIsIG9pZF90b19oZXgoJm9pZCkpOworCisJCWlmICh0eXBlICE9IE9CSl9DT01NSVQpCisJCQkvKiBvbmx5IGNvbW1pdHMgKi8KKwkJCWNvbnRpbnVlOworCisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXQodGhlX3JlcG9zaXRvcnksICZvaWQpOworCQlpZiAoIWNvbW1pdCkKKwkJCWRpZSgibm90IGEgY29tbWl0PyBjYW4ndCBoYXBwZW46ICVzIiwgb2lkX3RvX2hleCgmb2lkKSk7CisKKwkJb2JqZWN0ID0gJmNvbW1pdC0+b2JqZWN0OworCisJCWlmIChvYmplY3QtPmZsYWdzICYgU0hPV04pCisJCQllcnJvcigiT2JqZWN0ICVzIGFscmVhZHkgaGFzIGEgbWFyayIsIG9pZF90b19oZXgoJm9pZCkpOworCisJCW1hcmtfb2JqZWN0KG9iamVjdCwgbWFyayk7CisKKwkJb2JqZWN0LT5mbGFncyB8PSBTSE9XTjsKKwl9CisJZmNsb3NlKGYpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZGVsZXRlcyh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCByZWZzcGVjcy5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZzcGVjX2l0ZW0gKnJlZnNwZWMgPSAmcmVmc3BlY3MuaXRlbXNbaV07CisJCWlmICgqcmVmc3BlYy0+c3JjKQorCQkJY29udGludWU7CisKKwkJcHJpbnRmKCJyZXNldCAlc1xuZnJvbSAlc1xuXG4iLAorCQkJCXJlZnNwZWMtPmRzdCwgb2lkX3RvX2hleCgmbnVsbF9vaWQpKTsKKwl9Cit9CisKK2ludCBjbWRfZmFzdF9leHBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJc3RydWN0IG9iamVjdF9hcnJheSBjb21taXRzID0gT0JKRUNUX0FSUkFZX0lOSVQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWNoYXIgKmV4cG9ydF9maWxlbmFtZSA9IE5VTEwsCisJICAgICAqaW1wb3J0X2ZpbGVuYW1lID0gTlVMTCwKKwkgICAgICppbXBvcnRfZmlsZW5hbWVfaWZfZXhpc3RzID0gTlVMTDsKKwl1aW50MzJfdCBsYXN0aW1wb3J0aWQ7CisJc3RydWN0IHN0cmluZ19saXN0IHJlZnNwZWNzX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBwYXRoc19vZl9jaGFuZ2VkX29iamVjdHMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0lOVEVHRVIoMCwgInByb2dyZXNzIiwgJnByb2dyZXNzLAorCQkJICAgIE5fKCJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIikpLAorCQlPUFRfQ0FMTEJBQ0soMCwgInNpZ25lZC10YWdzIiwgJnNpZ25lZF90YWdfbW9kZSwgTl8oIm1vZGUiKSwKKwkJCSAgICAgTl8oInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIpLAorCQkJICAgICBwYXJzZV9vcHRfc2lnbmVkX3RhZ19tb2RlKSwKKwkJT1BUX0NBTExCQUNLKDAsICJ0YWctb2YtZmlsdGVyZWQtb2JqZWN0IiwgJnRhZ19vZl9maWx0ZXJlZF9tb2RlLCBOXygibW9kZSIpLAorCQkJICAgICBOXygic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIpLAorCQkJICAgICBwYXJzZV9vcHRfdGFnX29mX2ZpbHRlcmVkX21vZGUpLAorCQlPUFRfQ0FMTEJBQ0soMCwgInJlZW5jb2RlIiwgJnJlZW5jb2RlX21vZGUsIE5fKCJtb2RlIiksCisJCQkgICAgIE5fKCJzZWxlY3QgaGFuZGxpbmcgb2YgY29tbWl0IG1lc3NhZ2VzIGluIGFuIGFsdGVybmF0ZSBlbmNvZGluZyIpLAorCQkJICAgICBwYXJzZV9vcHRfcmVlbmNvZGVfbW9kZSksCisJCU9QVF9TVFJJTkcoMCwgImV4cG9ydC1tYXJrcyIsICZleHBvcnRfZmlsZW5hbWUsIE5fKCJmaWxlIiksCisJCQkgICAgIE5fKCJEdW1wIG1hcmtzIHRvIHRoaXMgZmlsZSIpKSwKKwkJT1BUX1NUUklORygwLCAiaW1wb3J0LW1hcmtzIiwgJmltcG9ydF9maWxlbmFtZSwgTl8oImZpbGUiKSwKKwkJCSAgICAgTl8oIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSIpKSwKKwkJT1BUX1NUUklORygwLCAiaW1wb3J0LW1hcmtzLWlmLWV4aXN0cyIsCisJCQkgICAgICZpbXBvcnRfZmlsZW5hbWVfaWZfZXhpc3RzLAorCQkJICAgICBOXygiZmlsZSIpLAorCQkJICAgICBOXygiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIGlmIGl0IGV4aXN0cyIpKSwKKwkJT1BUX0JPT0woMCwgImZha2UtbWlzc2luZy10YWdnZXIiLCAmZmFrZV9taXNzaW5nX3RhZ2dlciwKKwkJCSBOXygiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiKSksCisJCU9QVF9CT09MKDAsICJmdWxsLXRyZWUiLCAmZnVsbF90cmVlLAorCQkJIE5fKCJPdXRwdXQgZnVsbCB0cmVlIGZvciBlYWNoIGNvbW1pdCIpKSwKKwkJT1BUX0JPT0woMCwgInVzZS1kb25lLWZlYXR1cmUiLCAmdXNlX2RvbmVfZmVhdHVyZSwKKwkJCSAgICAgTl8oIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIikpLAorCQlPUFRfQk9PTCgwLCAibm8tZGF0YSIsICZub19kYXRhLCBOXygiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIikpLAorCQlPUFRfU1RSSU5HX0xJU1QoMCwgInJlZnNwZWMiLCAmcmVmc3BlY3NfbGlzdCwgTl8oInJlZnNwZWMiKSwKKwkJCSAgICAgTl8oIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIpKSwKKwkJT1BUX0JPT0woMCwgImFub255bWl6ZSIsICZhbm9ueW1pemUsIE5fKCJhbm9ueW1pemUgb3V0cHV0IikpLAorCQlPUFRfQk9PTCgwLCAicmVmZXJlbmNlLWV4Y2x1ZGVkLXBhcmVudHMiLAorCQkJICZyZWZlcmVuY2VfZXhjbHVkZWRfY29tbWl0cywgTl8oIlJlZmVyZW5jZSBwYXJlbnRzIHdoaWNoIGFyZSBub3QgaW4gZmFzdC1leHBvcnQgc3RyZWFtIGJ5IG9iamVjdCBpZCIpKSwKKwkJT1BUX0JPT0woMCwgInNob3ctb3JpZ2luYWwtaWRzIiwgJnNob3dfb3JpZ2luYWxfaWRzLAorCQkJICAgIE5fKCJTaG93IG9yaWdpbmFsIG9iamVjdCBpZHMgb2YgYmxvYnMvY29tbWl0cyIpKSwKKwkJT1BUX0JPT0woMCwgIm1hcmstdGFncyIsICZtYXJrX3RhZ3MsCisJCQkgICAgTl8oIkxhYmVsIHRhZ3Mgd2l0aCBtYXJrIGlkcyIpKSwKKworCQlPUFRfRU5EKCkKKwl9OworCisJaWYgKGFyZ2MgPT0gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zIChmYXN0X2V4cG9ydF91c2FnZSwgb3B0aW9ucyk7CisKKwkvKiB3ZSBoYW5kbGUgZW5jb2RpbmdzICovCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldnMsIHByZWZpeCk7CisJaW5pdF9yZXZpc2lvbl9zb3VyY2VzKCZyZXZpc2lvbl9zb3VyY2VzKTsKKwlyZXZzLnRvcG9fb3JkZXIgPSAxOworCXJldnMuc291cmNlcyA9ICZyZXZpc2lvbl9zb3VyY2VzOworCXJldnMucmV3cml0ZV9wYXJlbnRzID0gMTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGZhc3RfZXhwb3J0X3VzYWdlLAorCQkJUEFSU0VfT1BUX0tFRVBfQVJHVjAgfCBQQVJTRV9PUFRfS0VFUF9VTktOT1dOKTsKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXZzLCBOVUxMKTsKKwlpZiAoYXJnYyA+IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyAoZmFzdF9leHBvcnRfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKHJlZnNwZWNzX2xpc3QubnIpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IHJlZnNwZWNzX2xpc3QubnI7IGkrKykKKwkJCXJlZnNwZWNfYXBwZW5kKCZyZWZzcGVjcywgcmVmc3BlY3NfbGlzdC5pdGVtc1tpXS5zdHJpbmcpOworCisJCXN0cmluZ19saXN0X2NsZWFyKCZyZWZzcGVjc19saXN0LCAxKTsKKwl9CisKKwlpZiAodXNlX2RvbmVfZmVhdHVyZSkKKwkJcHJpbnRmKCJmZWF0dXJlIGRvbmVcbiIpOworCisJaWYgKGltcG9ydF9maWxlbmFtZSAmJiBpbXBvcnRfZmlsZW5hbWVfaWZfZXhpc3RzKQorCQlkaWUoXygiQ2Fubm90IHBhc3MgYm90aCAtLWltcG9ydC1tYXJrcyBhbmQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIikpOworCWlmIChpbXBvcnRfZmlsZW5hbWUpCisJCWltcG9ydF9tYXJrcyhpbXBvcnRfZmlsZW5hbWUsIDApOworCWVsc2UgaWYgKGltcG9ydF9maWxlbmFtZV9pZl9leGlzdHMpCisJCWltcG9ydF9tYXJrcyhpbXBvcnRfZmlsZW5hbWVfaWZfZXhpc3RzLCAxKTsKKwlsYXN0aW1wb3J0aWQgPSBsYXN0X2lkbnVtOworCisJaWYgKGltcG9ydF9maWxlbmFtZSAmJiByZXZzLnBydW5lX2RhdGEubnIpCisJCWZ1bGxfdHJlZSA9IDE7CisKKwlnZXRfdGFnc19hbmRfZHVwbGljYXRlcygmcmV2cy5jbWRsaW5lKTsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisJcmV2cy5kaWZmb3B0LmZvcm1hdF9jYWxsYmFjayA9IHNob3dfZmlsZW1vZGlmeTsKKwlyZXZzLmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSAmcGF0aHNfb2ZfY2hhbmdlZF9vYmplY3RzOworCXJldnMuZGlmZm9wdC5mbGFncy5yZWN1cnNpdmUgPSAxOworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXZzKSkpIHsKKwkJaWYgKGhhc191bnNob3duX3BhcmVudChjb21taXQpKSB7CisJCQlhZGRfb2JqZWN0X2FycmF5KCZjb21taXQtPm9iamVjdCwgTlVMTCwgJmNvbW1pdHMpOworCQl9CisJCWVsc2UgeworCQkJaGFuZGxlX2NvbW1pdChjb21taXQsICZyZXZzLCAmcGF0aHNfb2ZfY2hhbmdlZF9vYmplY3RzKTsKKwkJCWhhbmRsZV90YWlsKCZjb21taXRzLCAmcmV2cywgJnBhdGhzX29mX2NoYW5nZWRfb2JqZWN0cyk7CisJCX0KKwl9CisKKwloYW5kbGVfdGFnc19hbmRfZHVwbGljYXRlcygmZXh0cmFfcmVmcyk7CisJaGFuZGxlX3RhZ3NfYW5kX2R1cGxpY2F0ZXMoJnRhZ19yZWZzKTsKKwloYW5kbGVfZGVsZXRlcygpOworCisJaWYgKGV4cG9ydF9maWxlbmFtZSAmJiBsYXN0aW1wb3J0aWQgIT0gbGFzdF9pZG51bSkKKwkJZXhwb3J0X21hcmtzKGV4cG9ydF9maWxlbmFtZSk7CisKKwlpZiAodXNlX2RvbmVfZmVhdHVyZSkKKwkJcHJpbnRmKCJkb25lXG4iKTsKKworCXJlZnNwZWNfY2xlYXIoJnJlZnNwZWNzKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mZXRjaC1wYWNrLmMgYi9idWlsdGluL2ZldGNoLXBhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzcxMTAwCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9mZXRjaC1wYWNrLmMKQEAgLTAsMCArMSwyNzAgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJmZXRjaC1wYWNrLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgIm9pZC1hcnJheS5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGZldGNoX3BhY2tfdXNhZ2VbXSA9CisiZ2l0IGZldGNoLXBhY2sgWy0tYWxsXSBbLS1zdGRpbl0gWy0tcXVpZXQgfCAtcV0gWy0ta2VlcCB8IC1rXSBbLS10aGluXSAiCisiWy0taW5jbHVkZS10YWddIFstLXVwbG9hZC1wYWNrPTxnaXQtdXBsb2FkLXBhY2s+XSBbLS1kZXB0aD08bj5dICIKKyJbLS1uby1wcm9ncmVzc10gWy0tZGlhZy11cmxdIFstdl0gWzxob3N0PjpdPGRpcmVjdG9yeT4gWzxyZWZzPi4uLl0iOworCitzdGF0aWMgdm9pZCBhZGRfc291Z2h0X2VudHJ5KHN0cnVjdCByZWYgKioqc291Z2h0LCBpbnQgKm5yLCBpbnQgKmFsbG9jLAorCQkJICAgICBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljb25zdCBjaGFyICpwOworCisJaWYgKCFwYXJzZV9vaWRfaGV4KG5hbWUsICZvaWQsICZwKSkgeworCQlpZiAoKnAgPT0gJyAnKSB7CisJCQkvKiA8b2lkPiA8cmVmPiwgZmluZCByZWZuYW1lICovCisJCQluYW1lID0gcCArIDE7CisJCX0gZWxzZSBpZiAoKnAgPT0gJ1wwJykgeworCQkJOyAvKiA8b2lkPiwgbGVhdmUgb2lkIGFzIG5hbWUgKi8KKwkJfSBlbHNlIHsKKwkJCS8qIDxyZWY+LCBjbGVhciBjcnVmdCBmcm9tIG9pZCAqLworCQkJb2lkY2xyKCZvaWQpOworCQl9CisJfSBlbHNlIHsKKwkJLyogPHJlZj4sIGNsZWFyIGNydWZ0IGZyb20gZ2V0X29pZF9oZXggKi8KKwkJb2lkY2xyKCZvaWQpOworCX0KKworCXJlZiA9IGFsbG9jX3JlZihuYW1lKTsKKwlvaWRjcHkoJnJlZi0+b2xkX29pZCwgJm9pZCk7CisJKCpucikrKzsKKwlBTExPQ19HUk9XKCpzb3VnaHQsICpuciwgKmFsbG9jKTsKKwkoKnNvdWdodClbKm5yIC0gMV0gPSByZWY7Cit9CisKK2ludCBjbWRfZmV0Y2hfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSwgcmV0OworCXN0cnVjdCByZWYgKnJlZiA9IE5VTEw7CisJY29uc3QgY2hhciAqZGVzdCA9IE5VTEw7CisJc3RydWN0IHJlZiAqKnNvdWdodCA9IE5VTEw7CisJaW50IG5yX3NvdWdodCA9IDAsIGFsbG9jX3NvdWdodCA9IDA7CisJaW50IGZkWzJdOworCWNoYXIgKnBhY2tfbG9ja2ZpbGUgPSBOVUxMOworCWNoYXIgKipwYWNrX2xvY2tmaWxlX3B0ciA9IE5VTEw7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm47CisJc3RydWN0IGZldGNoX3BhY2tfYXJncyBhcmdzOworCXN0cnVjdCBvaWRfYXJyYXkgc2hhbGxvdyA9IE9JRF9BUlJBWV9JTklUOworCXN0cnVjdCBzdHJpbmdfbGlzdCBkZWVwZW5fbm90ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHBhY2tldF9yZWFkZXIgcmVhZGVyOworCWVudW0gcHJvdG9jb2xfdmVyc2lvbiB2ZXJzaW9uOworCisJZmV0Y2hfaWZfbWlzc2luZyA9IDA7CisKKwlwYWNrZXRfdHJhY2VfaWRlbnRpdHkoImZldGNoLXBhY2siKTsKKworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwlhcmdzLnVwbG9hZHBhY2sgPSAiZ2l0LXVwbG9hZC1wYWNrIjsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjICYmICphcmd2W2ldID09ICctJzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tdXBsb2FkLXBhY2s9IiwgJmFyZykpIHsKKwkJCWFyZ3MudXBsb2FkcGFjayA9IGFyZzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWV4ZWM9IiwgJmFyZykpIHsKKwkJCWFyZ3MudXBsb2FkcGFjayA9IGFyZzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLXF1aWV0IiwgYXJnKSB8fCAhc3RyY21wKCItcSIsIGFyZykpIHsKKwkJCWFyZ3MucXVpZXQgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0ta2VlcCIsIGFyZykgfHwgIXN0cmNtcCgiLWsiLCBhcmcpKSB7CisJCQlhcmdzLmxvY2tfcGFjayA9IGFyZ3Mua2VlcF9wYWNrOworCQkJYXJncy5rZWVwX3BhY2sgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tdGhpbiIsIGFyZykpIHsKKwkJCWFyZ3MudXNlX3RoaW5fcGFjayA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcCgiLS1pbmNsdWRlLXRhZyIsIGFyZykpIHsKKwkJCWFyZ3MuaW5jbHVkZV90YWcgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tYWxsIiwgYXJnKSkgeworCQkJYXJncy5mZXRjaF9hbGwgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tc3RkaW4iLCBhcmcpKSB7CisJCQlhcmdzLnN0ZGluX3JlZnMgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tZGlhZy11cmwiLCBhcmcpKSB7CisJCQlhcmdzLmRpYWdfdXJsID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItdiIsIGFyZykpIHsKKwkJCWFyZ3MudmVyYm9zZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1kZXB0aD0iLCAmYXJnKSkgeworCQkJYXJncy5kZXB0aCA9IHN0cnRvbChhcmcsIE5VTEwsIDApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tc2hhbGxvdy1zaW5jZT0iLCAmYXJnKSkgeworCQkJYXJncy5kZWVwZW5fc2luY2UgPSB4c3RyZHVwKGFyZyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1zaGFsbG93LWV4Y2x1ZGU9IiwgJmFyZykpIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmZGVlcGVuX25vdCwgYXJnKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tZGVlcGVuLXJlbGF0aXZlIikpIHsKKwkJCWFyZ3MuZGVlcGVuX3JlbGF0aXZlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLW5vLXByb2dyZXNzIiwgYXJnKSkgeworCQkJYXJncy5ub19wcm9ncmVzcyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcCgiLS1zdGF0ZWxlc3MtcnBjIiwgYXJnKSkgeworCQkJYXJncy5zdGF0ZWxlc3NfcnBjID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLWxvY2stcGFjayIsIGFyZykpIHsKKwkJCWFyZ3MubG9ja19wYWNrID0gMTsKKwkJCXBhY2tfbG9ja2ZpbGVfcHRyID0gJnBhY2tfbG9ja2ZpbGU7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcCgiLS1jaGVjay1zZWxmLWNvbnRhaW5lZC1hbmQtY29ubmVjdGVkIiwgYXJnKSkgeworCQkJYXJncy5jaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLWNsb25pbmciLCBhcmcpKSB7CisJCQlhcmdzLmNsb25pbmcgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tdXBkYXRlLXNoYWxsb3ciLCBhcmcpKSB7CisJCQlhcmdzLnVwZGF0ZV9zaGFsbG93ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLWZyb20tcHJvbWlzb3IiLCBhcmcpKSB7CisJCQlhcmdzLmZyb21fcHJvbWlzb3IgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tbm8tZGVwZW5kZW50cyIsIGFyZykpIHsKKwkJCWFyZ3Mubm9fZGVwZW5kZW50cyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAoIi0tIiBDTF9BUkdfX0ZJTFRFUiAiPSIpLCAmYXJnKSkgeworCQkJcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcigmYXJncy5maWx0ZXJfb3B0aW9ucywgYXJnKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgKCItLW5vLSIgQ0xfQVJHX19GSUxURVIpKSkgeworCQkJbGlzdF9vYmplY3RzX2ZpbHRlcl9zZXRfbm9fZmlsdGVyKCZhcmdzLmZpbHRlcl9vcHRpb25zKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXVzYWdlKGZldGNoX3BhY2tfdXNhZ2UpOworCX0KKwlpZiAoZGVlcGVuX25vdC5ucikKKwkJYXJncy5kZWVwZW5fbm90ID0gJmRlZXBlbl9ub3Q7CisKKwlpZiAoaSA8IGFyZ2MpCisJCWRlc3QgPSBhcmd2W2krK107CisJZWxzZQorCQl1c2FnZShmZXRjaF9wYWNrX3VzYWdlKTsKKworCS8qCisJICogQ29weSByZWZzIGZyb20gY21kbGluZSB0byBncm93YWJsZSBsaXN0LCB0aGVuIGFwcGVuZCBhbnkKKwkgKiByZWZzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0OgorCSAqLworCWZvciAoOyBpIDwgYXJnYzsgaSsrKQorCQlhZGRfc291Z2h0X2VudHJ5KCZzb3VnaHQsICZucl9zb3VnaHQsICZhbGxvY19zb3VnaHQsIGFyZ3ZbaV0pOworCWlmIChhcmdzLnN0ZGluX3JlZnMpIHsKKwkJaWYgKGFyZ3Muc3RhdGVsZXNzX3JwYykgeworCQkJLyogaW4gc3RhdGVsZXNzIFJQQyBtb2RlIHdlIHVzZSBwa3QtbGluZSB0byByZWFkCisJCQkgKiBmcm9tIHN0ZGluLCB1bnRpbCB3ZSBnZXQgYSBmbHVzaCBwYWNrZXQKKwkJCSAqLworCQkJZm9yICg7OykgeworCQkJCWNoYXIgKmxpbmUgPSBwYWNrZXRfcmVhZF9saW5lKDAsIE5VTEwpOworCQkJCWlmICghbGluZSkKKwkJCQkJYnJlYWs7CisJCQkJYWRkX3NvdWdodF9lbnRyeSgmc291Z2h0LCAmbnJfc291Z2h0LCAgJmFsbG9jX3NvdWdodCwgbGluZSk7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQkvKiByZWFkIGZyb20gc3RkaW4gb25lIHJlZiBwZXIgbGluZSwgdW50aWwgRU9GICovCisJCQlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwkJCXdoaWxlIChzdHJidWZfZ2V0bGluZV9sZigmbGluZSwgc3RkaW4pICE9IEVPRikKKwkJCQlhZGRfc291Z2h0X2VudHJ5KCZzb3VnaHQsICZucl9zb3VnaHQsICZhbGxvY19zb3VnaHQsIGxpbmUuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwkJfQorCX0KKworCWlmIChhcmdzLnN0YXRlbGVzc19ycGMpIHsKKwkJY29ubiA9IE5VTEw7CisJCWZkWzBdID0gMDsKKwkJZmRbMV0gPSAxOworCX0gZWxzZSB7CisJCWludCBmbGFncyA9IGFyZ3MudmVyYm9zZSA/IENPTk5FQ1RfVkVSQk9TRSA6IDA7CisJCWlmIChhcmdzLmRpYWdfdXJsKQorCQkJZmxhZ3MgfD0gQ09OTkVDVF9ESUFHX1VSTDsKKwkJY29ubiA9IGdpdF9jb25uZWN0KGZkLCBkZXN0LCBhcmdzLnVwbG9hZHBhY2ssCisJCQkJICAgZmxhZ3MpOworCQlpZiAoIWNvbm4pCisJCQlyZXR1cm4gYXJncy5kaWFnX3VybCA/IDAgOiAxOworCX0KKworCXBhY2tldF9yZWFkZXJfaW5pdCgmcmVhZGVyLCBmZFswXSwgTlVMTCwgMCwKKwkJCSAgIFBBQ0tFVF9SRUFEX0NIT01QX05FV0xJTkUgfAorCQkJICAgUEFDS0VUX1JFQURfR0VOVExFX09OX0VPRiB8CisJCQkgICBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCk7CisKKwl2ZXJzaW9uID0gZGlzY292ZXJfdmVyc2lvbigmcmVhZGVyKTsKKwlzd2l0Y2ggKHZlcnNpb24pIHsKKwljYXNlIHByb3RvY29sX3YyOgorCQlnZXRfcmVtb3RlX3JlZnMoZmRbMV0sICZyZWFkZXIsICZyZWYsIDAsIE5VTEwsIE5VTEwpOworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3YxOgorCWNhc2UgcHJvdG9jb2xfdjA6CisJCWdldF9yZW1vdGVfaGVhZHMoJnJlYWRlciwgJnJlZiwgMCwgTlVMTCwgJnNoYWxsb3cpOworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3Vua25vd25fdmVyc2lvbjoKKwkJQlVHKCJ1bmtub3duIHByb3RvY29sIHZlcnNpb24iKTsKKwl9CisKKwlyZWYgPSBmZXRjaF9wYWNrKCZhcmdzLCBmZCwgcmVmLCBzb3VnaHQsIG5yX3NvdWdodCwKKwkJCSAmc2hhbGxvdywgcGFja19sb2NrZmlsZV9wdHIsIHZlcnNpb24pOworCWlmIChwYWNrX2xvY2tmaWxlKSB7CisJCXByaW50ZigibG9jayAlc1xuIiwgcGFja19sb2NrZmlsZSk7CisJCWZmbHVzaChzdGRvdXQpOworCX0KKwlpZiAoYXJncy5jaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkICYmCisJICAgIGFyZ3Muc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCkgeworCQlwcmludGYoImNvbm5lY3Rpdml0eS1va1xuIik7CisJCWZmbHVzaChzdGRvdXQpOworCX0KKwljbG9zZShmZFswXSk7CisJY2xvc2UoZmRbMV0pOworCWlmIChmaW5pc2hfY29ubmVjdChjb25uKSkKKwkJcmV0dXJuIDE7CisKKwlyZXQgPSAhcmVmOworCisJLyoKKwkgKiBJZiB0aGUgaGVhZHMgdG8gcHVsbCB3ZXJlIGdpdmVuLCB3ZSBzaG91bGQgaGF2ZSBjb25zdW1lZAorCSAqIGFsbCBvZiB0aGVtIGJ5IG1hdGNoaW5nIHRoZSByZW1vdGUuICBPdGhlcndpc2UsICdnaXQgZmV0Y2gKKwkgKiByZW1vdGUgbm8tc3VjaC1yZWYnIHdvdWxkIHNpbGVudGx5IHN1Y2NlZWQgd2l0aG91dCBpc3N1aW5nCisJICogYW4gZXJyb3IuCisJICovCisJcmV0IHw9IHJlcG9ydF91bm1hdGNoZWRfcmVmcyhzb3VnaHQsIG5yX3NvdWdodCk7CisKKwl3aGlsZSAocmVmKSB7CisJCXByaW50ZigiJXMgJXNcbiIsCisJCSAgICAgICBvaWRfdG9faGV4KCZyZWYtPm9sZF9vaWQpLCByZWYtPm5hbWUpOworCQlyZWYgPSByZWYtPm5leHQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZmV0Y2guYyBiL2J1aWx0aW4vZmV0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTc4OGMxCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9mZXRjaC5jCkBAIC0wLDAgKzEsMTg4NiBAQAorLyoKKyAqICJnaXQgZmV0Y2giCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVmc3BlYy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgIm9pZHNldC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgImNvbm5lY3RlZC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJwcm9taXNvci1yZW1vdGUuaCIKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKyNpbmNsdWRlICJzaGFsbG93LmgiCisKKyNkZWZpbmUgRk9SQ0VEX1VQREFURVNfREVMQVlfV0FSTklOR19JTl9NUyAoMTAgKiAxMDAwKQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fZmV0Y2hfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIiksCisJTl8oImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IiksCisJTl8oImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIiksCisJTl8oImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIpLAorCU5VTEwKK307CisKK2VudW0geworCVRBR1NfVU5TRVQgPSAwLAorCVRBR1NfREVGQVVMVCA9IDEsCisJVEFHU19TRVQgPSAyCit9OworCitzdGF0aWMgaW50IGZldGNoX3BydW5lX2NvbmZpZyA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLworc3RhdGljIGludCBmZXRjaF9zaG93X2ZvcmNlZF91cGRhdGVzID0gMTsKK3N0YXRpYyB1aW50NjRfdCBmb3JjZWRfdXBkYXRlc19tcyA9IDA7CitzdGF0aWMgaW50IHBydW5lID0gLTE7IC8qIHVuc3BlY2lmaWVkICovCisjZGVmaW5lIFBSVU5FX0JZX0RFRkFVTFQgMCAvKiBkbyB3ZSBwcnVuZSBieSBkZWZhdWx0PyAqLworCitzdGF0aWMgaW50IGZldGNoX3BydW5lX3RhZ3NfY29uZmlnID0gLTE7IC8qIHVuc3BlY2lmaWVkICovCitzdGF0aWMgaW50IHBydW5lX3RhZ3MgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KKyNkZWZpbmUgUFJVTkVfVEFHU19CWV9ERUZBVUxUIDAgLyogZG8gd2UgcHJ1bmUgdGFncyBieSBkZWZhdWx0PyAqLworCitzdGF0aWMgaW50IGFsbCwgYXBwZW5kLCBkcnlfcnVuLCBmb3JjZSwga2VlcCwgbXVsdGlwbGUsIHVwZGF0ZV9oZWFkX29rOworc3RhdGljIGludCB2ZXJib3NpdHksIGRlZXBlbl9yZWxhdGl2ZSwgc2V0X3Vwc3RyZWFtOworc3RhdGljIGludCBwcm9ncmVzcyA9IC0xOworc3RhdGljIGludCBlbmFibGVfYXV0b19nYyA9IDE7CitzdGF0aWMgaW50IHRhZ3MgPSBUQUdTX0RFRkFVTFQsIHVuc2hhbGxvdywgdXBkYXRlX3NoYWxsb3csIGRlZXBlbjsKK3N0YXRpYyBpbnQgbWF4X2pvYnMgPSAtMSwgc3VibW9kdWxlX2ZldGNoX2pvYnNfY29uZmlnID0gLTE7CitzdGF0aWMgaW50IGZldGNoX3BhcmFsbGVsX2NvbmZpZyA9IDE7CitzdGF0aWMgZW51bSB0cmFuc3BvcnRfZmFtaWx5IGZhbWlseTsKK3N0YXRpYyBjb25zdCBjaGFyICpkZXB0aDsKK3N0YXRpYyBjb25zdCBjaGFyICpkZWVwZW5fc2luY2U7CitzdGF0aWMgY29uc3QgY2hhciAqdXBsb2FkX3BhY2s7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGRlZXBlbl9ub3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworc3RhdGljIHN0cnVjdCBzdHJidWYgZGVmYXVsdF9ybGEgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNwb3J0ICpndHJhbnNwb3J0Oworc3RhdGljIHN0cnVjdCB0cmFuc3BvcnQgKmdzZWNvbmRhcnk7CitzdGF0aWMgY29uc3QgY2hhciAqc3VibW9kdWxlX3ByZWZpeCA9ICIiOworc3RhdGljIGludCByZWN1cnNlX3N1Ym1vZHVsZXMgPSBSRUNVUlNFX1NVQk1PRFVMRVNfREVGQVVMVDsKK3N0YXRpYyBpbnQgcmVjdXJzZV9zdWJtb2R1bGVzX2RlZmF1bHQgPSBSRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EOworc3RhdGljIGludCBzaG93bl91cmwgPSAwOworc3RhdGljIHN0cnVjdCByZWZzcGVjIHJlZm1hcCA9IFJFRlNQRUNfSU5JVF9GRVRDSDsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zIGZpbHRlcl9vcHRpb25zOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBzZXJ2ZXJfb3B0aW9ucyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBuZWdvdGlhdGlvbl90aXAgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworc3RhdGljIGludCBmZXRjaF93cml0ZV9jb21taXRfZ3JhcGggPSAtMTsKKworc3RhdGljIGludCBnaXRfZmV0Y2hfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKGssICJmZXRjaC5wcnVuZSIpKSB7CisJCWZldGNoX3BydW5lX2NvbmZpZyA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAoaywgImZldGNoLnBydW5ldGFncyIpKSB7CisJCWZldGNoX3BydW5lX3RhZ3NfY29uZmlnID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcChrLCAiZmV0Y2guc2hvd2ZvcmNlZHVwZGF0ZXMiKSkgeworCQlmZXRjaF9zaG93X2ZvcmNlZF91cGRhdGVzID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcChrLCAic3VibW9kdWxlLnJlY3Vyc2UiKSkgeworCQlpbnQgciA9IGdpdF9jb25maWdfYm9vbChrLCB2KSA/CisJCQlSRUNVUlNFX1NVQk1PRFVMRVNfT04gOiBSRUNVUlNFX1NVQk1PRFVMRVNfT0ZGOworCQlyZWN1cnNlX3N1Ym1vZHVsZXMgPSByOworCX0KKworCWlmICghc3RyY21wKGssICJzdWJtb2R1bGUuZmV0Y2hqb2JzIikpIHsKKwkJc3VibW9kdWxlX2ZldGNoX2pvYnNfY29uZmlnID0gcGFyc2Vfc3VibW9kdWxlX2ZldGNoam9icyhrLCB2KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKGssICJmZXRjaC5yZWN1cnNlc3VibW9kdWxlcyIpKSB7CisJCXJlY3Vyc2Vfc3VibW9kdWxlcyA9IHBhcnNlX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcoaywgdik7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKGssICJmZXRjaC5wYXJhbGxlbCIpKSB7CisJCWZldGNoX3BhcmFsbGVsX2NvbmZpZyA9IGdpdF9jb25maWdfaW50KGssIHYpOworCQlpZiAoZmV0Y2hfcGFyYWxsZWxfY29uZmlnIDwgMCkKKwkJCWRpZShfKCJmZXRjaC5wYXJhbGxlbCBjYW5ub3QgYmUgbmVnYXRpdmUiKSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcoaywgdiwgY2IpOworfQorCitzdGF0aWMgaW50IHBhcnNlX3JlZm1hcF9hcmcoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwkvKgorCSAqICJnaXQgZmV0Y2ggLS1yZWZtYXA9Jycgb3JpZ2luIGZvbyIKKwkgKiBjYW4gYmUgdXNlZCB0byB0ZWxsIHRoZSBjb21tYW5kIG5vdCB0byBzdG9yZSBhbnl3aGVyZQorCSAqLworCXJlZnNwZWNfYXBwZW5kKCZyZWZtYXAsIGFyZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9mZXRjaF9vcHRpb25zW10gPSB7CisJT1BUX19WRVJCT1NJVFkoJnZlcmJvc2l0eSksCisJT1BUX0JPT0woMCwgImFsbCIsICZhbGwsCisJCSBOXygiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIpKSwKKwlPUFRfQk9PTCgwLCAic2V0LXVwc3RyZWFtIiwgJnNldF91cHN0cmVhbSwKKwkJIE5fKCJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL2ZldGNoIikpLAorCU9QVF9CT09MKCdhJywgImFwcGVuZCIsICZhcHBlbmQsCisJCSBOXygiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIikpLAorCU9QVF9TVFJJTkcoMCwgInVwbG9hZC1wYWNrIiwgJnVwbG9hZF9wYWNrLCBOXygicGF0aCIpLAorCQkgICBOXygicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIikpLAorCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIHJlZmVyZW5jZSIpLCAwKSwKKwlPUFRfQk9PTCgnbScsICJtdWx0aXBsZSIsICZtdWx0aXBsZSwKKwkJIE5fKCJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiKSksCisJT1BUX1NFVF9JTlQoJ3QnLCAidGFncyIsICZ0YWdzLAorCQkgICAgTl8oImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiKSwgVEFHU19TRVQpLAorCU9QVF9TRVRfSU5UKCduJywgTlVMTCwgJnRhZ3MsCisJCSAgICBOXygiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIiksIFRBR1NfVU5TRVQpLAorCU9QVF9JTlRFR0VSKCdqJywgImpvYnMiLCAmbWF4X2pvYnMsCisJCSAgICBOXygibnVtYmVyIG9mIHN1Ym1vZHVsZXMgZmV0Y2hlZCBpbiBwYXJhbGxlbCIpKSwKKwlPUFRfQk9PTCgncCcsICJwcnVuZSIsICZwcnVuZSwKKwkJIE5fKCJwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm8gbG9uZ2VyIG9uIHJlbW90ZSIpKSwKKwlPUFRfQk9PTCgnUCcsICJwcnVuZS10YWdzIiwgJnBydW5lX3RhZ3MsCisJCSBOXygicHJ1bmUgbG9jYWwgdGFncyBubyBsb25nZXIgb24gcmVtb3RlIGFuZCBjbG9iYmVyIGNoYW5nZWQgdGFncyIpKSwKKwlPUFRfQ0FMTEJBQ0tfRigwLCAicmVjdXJzZS1zdWJtb2R1bGVzIiwgJnJlY3Vyc2Vfc3VibW9kdWxlcywgTl8oIm9uLWRlbWFuZCIpLAorCQkgICAgTl8oImNvbnRyb2wgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiKSwKKwkJICAgIFBBUlNFX09QVF9PUFRBUkcsIG9wdGlvbl9mZXRjaF9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXMpLAorCU9QVF9CT09MKDAsICJkcnktcnVuIiwgJmRyeV9ydW4sCisJCSBOXygiZHJ5IHJ1biIpKSwKKwlPUFRfQk9PTCgnaycsICJrZWVwIiwgJmtlZXAsIE5fKCJrZWVwIGRvd25sb2FkZWQgcGFjayIpKSwKKwlPUFRfQk9PTCgndScsICJ1cGRhdGUtaGVhZC1vayIsICZ1cGRhdGVfaGVhZF9vaywKKwkJICAgIE5fKCJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIpKSwKKwlPUFRfQk9PTCgwLCAicHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MsIE5fKCJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciKSksCisJT1BUX1NUUklORygwLCAiZGVwdGgiLCAmZGVwdGgsIE5fKCJkZXB0aCIpLAorCQkgICBOXygiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIpKSwKKwlPUFRfU1RSSU5HKDAsICJzaGFsbG93LXNpbmNlIiwgJmRlZXBlbl9zaW5jZSwgTl8oInRpbWUiKSwKKwkJICAgTl8oImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aW1lIikpLAorCU9QVF9TVFJJTkdfTElTVCgwLCAic2hhbGxvdy1leGNsdWRlIiwgJmRlZXBlbl9ub3QsIE5fKCJyZXZpc2lvbiIpLAorCQkJTl8oImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUsIGV4Y2x1ZGluZyByZXYiKSksCisJT1BUX0lOVEVHRVIoMCwgImRlZXBlbiIsICZkZWVwZW5fcmVsYXRpdmUsCisJCSAgICBOXygiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIpKSwKKwlPUFRfU0VUX0lOVF9GKDAsICJ1bnNoYWxsb3ciLCAmdW5zaGFsbG93LAorCQkgICAgICBOXygiY29udmVydCB0byBhIGNvbXBsZXRlIHJlcG9zaXRvcnkiKSwKKwkJICAgICAgMSwgUEFSU0VfT1BUX05PTkVHKSwKKwl7IE9QVElPTl9TVFJJTkcsIDAsICJzdWJtb2R1bGUtcHJlZml4IiwgJnN1Ym1vZHVsZV9wcmVmaXgsIE5fKCJkaXIiKSwKKwkJICAgTl8oInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiKSwgUEFSU0VfT1BUX0hJRERFTiB9LAorCU9QVF9DQUxMQkFDS19GKDAsICJyZWN1cnNlLXN1Ym1vZHVsZXMtZGVmYXVsdCIsCisJCSAgICZyZWN1cnNlX3N1Ym1vZHVsZXNfZGVmYXVsdCwgTl8oIm9uLWRlbWFuZCIpLAorCQkgICBOXygiZGVmYXVsdCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgIgorCQkgICAgICAiKGxvd2VyIHByaW9yaXR5IHRoYW4gY29uZmlnIGZpbGVzKSIpLAorCQkgICBQQVJTRV9PUFRfSElEREVOLCBvcHRpb25fZmV0Y2hfcGFyc2VfcmVjdXJzZV9zdWJtb2R1bGVzKSwKKwlPUFRfQk9PTCgwLCAidXBkYXRlLXNoYWxsb3ciLCAmdXBkYXRlX3NoYWxsb3csCisJCSBOXygiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IikpLAorCU9QVF9DQUxMQkFDS19GKDAsICJyZWZtYXAiLCBOVUxMLCBOXygicmVmbWFwIiksCisJCSAgICAgICBOXygic3BlY2lmeSBmZXRjaCByZWZtYXAiKSwgUEFSU0VfT1BUX05PTkVHLCBwYXJzZV9yZWZtYXBfYXJnKSwKKwlPUFRfU1RSSU5HX0xJU1QoJ28nLCAic2VydmVyLW9wdGlvbiIsICZzZXJ2ZXJfb3B0aW9ucywgTl8oInNlcnZlci1zcGVjaWZpYyIpLCBOXygib3B0aW9uIHRvIHRyYW5zbWl0IikpLAorCU9QVF9TRVRfSU5UKCc0JywgImlwdjQiLCAmZmFtaWx5LCBOXygidXNlIElQdjQgYWRkcmVzc2VzIG9ubHkiKSwKKwkJCVRSQU5TUE9SVF9GQU1JTFlfSVBWNCksCisJT1BUX1NFVF9JTlQoJzYnLCAiaXB2NiIsICZmYW1pbHksIE5fKCJ1c2UgSVB2NiBhZGRyZXNzZXMgb25seSIpLAorCQkJVFJBTlNQT1JUX0ZBTUlMWV9JUFY2KSwKKwlPUFRfU1RSSU5HX0xJU1QoMCwgIm5lZ290aWF0aW9uLXRpcCIsICZuZWdvdGlhdGlvbl90aXAsIE5fKCJyZXZpc2lvbiIpLAorCQkJTl8oInJlcG9ydCB0aGF0IHdlIGhhdmUgb25seSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRoaXMgb2JqZWN0IikpLAorCU9QVF9QQVJTRV9MSVNUX09CSkVDVFNfRklMVEVSKCZmaWx0ZXJfb3B0aW9ucyksCisJT1BUX0JPT0woMCwgImF1dG8tZ2MiLCAmZW5hYmxlX2F1dG9fZ2MsCisJCSBOXygicnVuICdnYyAtLWF1dG8nIGFmdGVyIGZldGNoaW5nIikpLAorCU9QVF9CT09MKDAsICJzaG93LWZvcmNlZC11cGRhdGVzIiwgJmZldGNoX3Nob3dfZm9yY2VkX3VwZGF0ZXMsCisJCSBOXygiY2hlY2sgZm9yIGZvcmNlZC11cGRhdGVzIG9uIGFsbCB1cGRhdGVkIGJyYW5jaGVzIikpLAorCU9QVF9CT09MKDAsICJ3cml0ZS1jb21taXQtZ3JhcGgiLCAmZmV0Y2hfd3JpdGVfY29tbWl0X2dyYXBoLAorCQkgTl8oIndyaXRlIHRoZSBjb21taXQtZ3JhcGggYWZ0ZXIgZmV0Y2hpbmciKSksCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgdm9pZCB1bmxvY2tfcGFjayh2b2lkKQoreworCWlmIChndHJhbnNwb3J0KQorCQl0cmFuc3BvcnRfdW5sb2NrX3BhY2soZ3RyYW5zcG9ydCk7CisJaWYgKGdzZWNvbmRhcnkpCisJCXRyYW5zcG9ydF91bmxvY2tfcGFjayhnc2Vjb25kYXJ5KTsKK30KKworc3RhdGljIHZvaWQgdW5sb2NrX3BhY2tfb25fc2lnbmFsKGludCBzaWdubykKK3sKKwl1bmxvY2tfcGFjaygpOworCXNpZ2NoYWluX3BvcChzaWdubyk7CisJcmFpc2Uoc2lnbm8pOworfQorCitzdGF0aWMgdm9pZCBhZGRfbWVyZ2VfY29uZmlnKHN0cnVjdCByZWYgKipoZWFkLAorCQkJICAgY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsCisJCSAgICAgICAgICAgc3RydWN0IGJyYW5jaCAqYnJhbmNoLAorCQkgICAgICAgICAgIHN0cnVjdCByZWYgKioqdGFpbCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBicmFuY2gtPm1lcmdlX25yOyBpKyspIHsKKwkJc3RydWN0IHJlZiAqcm0sICoqb2xkX3RhaWwgPSAqdGFpbDsKKwkJc3RydWN0IHJlZnNwZWNfaXRlbSByZWZzcGVjOworCisJCWZvciAocm0gPSAqaGVhZDsgcm07IHJtID0gcm0tPm5leHQpIHsKKwkJCWlmIChicmFuY2hfbWVyZ2VfbWF0Y2hlcyhicmFuY2gsIGksIHJtLT5uYW1lKSkgeworCQkJCXJtLT5mZXRjaF9oZWFkX3N0YXR1cyA9IEZFVENIX0hFQURfTUVSR0U7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHJtKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogTm90IGZldGNoZWQgdG8gYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoPyAgV2UgbmVlZCB0byBmZXRjaAorCQkgKiBpdCBhbnl3YXkgdG8gYWxsb3cgdGhpcyBicmFuY2gncyAiYnJhbmNoLiRuYW1lLm1lcmdlIgorCQkgKiB0byBiZSBob25vcmVkIGJ5ICdnaXQgcHVsbCcsIGJ1dCB3ZSBkbyBub3QgaGF2ZSB0bworCQkgKiBmYWlsIGlmIGJyYW5jaC4kbmFtZS5tZXJnZSBpcyBtaXNjb25maWd1cmVkIHRvIHBvaW50CisJCSAqIGF0IGEgbm9uZXhpc3RpbmcgYnJhbmNoLiAgSWYgd2Ugd2VyZSBpbmRlZWQgY2FsbGVkIGJ5CisJCSAqICdnaXQgcHVsbCcsIGl0IHdpbGwgbm90aWNlIHRoZSBtaXNjb25maWd1cmF0aW9uIGJlY2F1c2UKKwkJICogdGhlcmUgaXMgbm8gZW50cnkgaW4gdGhlIHJlc3VsdGluZyBGRVRDSF9IRUFEIG1hcmtlZAorCQkgKiBmb3IgbWVyZ2luZy4KKwkJICovCisJCW1lbXNldCgmcmVmc3BlYywgMCwgc2l6ZW9mKHJlZnNwZWMpKTsKKwkJcmVmc3BlYy5zcmMgPSBicmFuY2gtPm1lcmdlW2ldLT5zcmM7CisJCWdldF9mZXRjaF9tYXAocmVtb3RlX3JlZnMsICZyZWZzcGVjLCB0YWlsLCAxKTsKKwkJZm9yIChybSA9ICpvbGRfdGFpbDsgcm07IHJtID0gcm0tPm5leHQpCisJCQlybS0+ZmV0Y2hfaGVhZF9zdGF0dXMgPSBGRVRDSF9IRUFEX01FUkdFOworCX0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2ZldGNoX29pZHNldChzdHJ1Y3QgcmVmICoqaGVhZCwgc3RydWN0IG9pZHNldCAqb3V0KQoreworCXN0cnVjdCByZWYgKnJtID0gKmhlYWQ7CisJd2hpbGUgKHJtKSB7CisJCW9pZHNldF9pbnNlcnQob3V0LCAmcm0tPm9sZF9vaWQpOworCQlybSA9IHJtLT5uZXh0OworCX0KK30KKworc3RydWN0IHJlZm5hbWVfaGFzaF9lbnRyeSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50OworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBpZ25vcmU7CisJY2hhciByZWZuYW1lW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIGludCByZWZuYW1lX2hhc2hfZW50cnlfY21wKGNvbnN0IHZvaWQgKmhhc2htYXBfY21wX2ZuX2RhdGEsCisJCQkJICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZXB0ciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCQkJICBjb25zdCB2b2lkICprZXlkYXRhKQoreworCWNvbnN0IHN0cnVjdCByZWZuYW1lX2hhc2hfZW50cnkgKmUxLCAqZTI7CisKKwllMSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3QgcmVmbmFtZV9oYXNoX2VudHJ5LCBlbnQpOworCWUyID0gY29udGFpbmVyX29mKGVudHJ5X29yX2tleSwgY29uc3Qgc3RydWN0IHJlZm5hbWVfaGFzaF9lbnRyeSwgZW50KTsKKwlyZXR1cm4gc3RyY21wKGUxLT5yZWZuYW1lLCBrZXlkYXRhID8ga2V5ZGF0YSA6IGUyLT5yZWZuYW1lKTsKK30KKworc3RhdGljIHN0cnVjdCByZWZuYW1lX2hhc2hfZW50cnkgKnJlZm5hbWVfaGFzaF9hZGQoc3RydWN0IGhhc2htYXAgKm1hcCwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IHJlZm5hbWVfaGFzaF9lbnRyeSAqZW50OworCXNpemVfdCBsZW4gPSBzdHJsZW4ocmVmbmFtZSk7CisKKwlGTEVYX0FMTE9DX01FTShlbnQsIHJlZm5hbWUsIHJlZm5hbWUsIGxlbik7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZlbnQtPmVudCwgc3RyaGFzaChyZWZuYW1lKSk7CisJb2lkY3B5KCZlbnQtPm9pZCwgb2lkKTsKKwloYXNobWFwX2FkZChtYXAsICZlbnQtPmVudCk7CisJcmV0dXJuIGVudDsKK30KKworc3RhdGljIGludCBhZGRfb25lX3JlZm5hbWUoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgIGludCBmbGFnLCB2b2lkICpjYmRhdGEpCit7CisJc3RydWN0IGhhc2htYXAgKnJlZm5hbWVfbWFwID0gY2JkYXRhOworCisJKHZvaWQpIHJlZm5hbWVfaGFzaF9hZGQocmVmbmFtZV9tYXAsIHJlZm5hbWUsIG9pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlZm5hbWVfaGFzaF9pbml0KHN0cnVjdCBoYXNobWFwICptYXApCit7CisJaGFzaG1hcF9pbml0KG1hcCwgcmVmbmFtZV9oYXNoX2VudHJ5X2NtcCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcmVmbmFtZV9oYXNoX2V4aXN0cyhzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXJldHVybiAhIWhhc2htYXBfZ2V0X2Zyb21faGFzaChtYXAsIHN0cmhhc2gocmVmbmFtZSksIHJlZm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9pdGVtKHN0cnVjdCByZWZuYW1lX2hhc2hfZW50cnkgKml0ZW0pCit7CisJaXRlbS0+aWdub3JlID0gMTsKK30KKworc3RhdGljIHZvaWQgZmluZF9ub25fbG9jYWxfdGFncyhjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLAorCQkJCXN0cnVjdCByZWYgKipoZWFkLAorCQkJCXN0cnVjdCByZWYgKioqdGFpbCkKK3sKKwlzdHJ1Y3QgaGFzaG1hcCBleGlzdGluZ19yZWZzOworCXN0cnVjdCBoYXNobWFwIHJlbW90ZV9yZWZzOworCXN0cnVjdCBvaWRzZXQgZmV0Y2hfb2lkcyA9IE9JRFNFVF9JTklUOworCXN0cnVjdCBzdHJpbmdfbGlzdCByZW1vdGVfcmVmc19saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcmVtb3RlX3JlZl9pdGVtOworCWNvbnN0IHN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3QgcmVmbmFtZV9oYXNoX2VudHJ5ICppdGVtID0gTlVMTDsKKwljb25zdCBpbnQgcXVpY2tfZmxhZ3MgPSBPQkpFQ1RfSU5GT19RVUlDSyB8IE9CSkVDVF9JTkZPX1NLSVBfRkVUQ0hfT0JKRUNUOworCisJcmVmbmFtZV9oYXNoX2luaXQoJmV4aXN0aW5nX3JlZnMpOworCXJlZm5hbWVfaGFzaF9pbml0KCZyZW1vdGVfcmVmcyk7CisJY3JlYXRlX2ZldGNoX29pZHNldChoZWFkLCAmZmV0Y2hfb2lkcyk7CisKKwlmb3JfZWFjaF9yZWYoYWRkX29uZV9yZWZuYW1lLCAmZXhpc3RpbmdfcmVmcyk7CisJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAoIXN0YXJ0c193aXRoKHJlZi0+bmFtZSwgInJlZnMvdGFncy8iKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFRoZSBwZWVsZWQgcmVmIGFsd2F5cyBmb2xsb3dzIHRoZSBtYXRjaGluZyBiYXNlCisJCSAqIHJlZiwgc28gaWYgd2Ugc2VlIGEgcGVlbGVkIHJlZiB0aGF0IHdlIGRvbid0IHdhbnQKKwkJICogdG8gZmV0Y2ggdGhlbiB3ZSBjYW4gbWFyayB0aGUgcmVmIGVudHJ5IGluIHRoZSBsaXN0CisJCSAqIGFzIG9uZSB0byBpZ25vcmUgYnkgc2V0dGluZyB1dGlsIHRvIE5VTEwuCisJCSAqLworCQlpZiAoZW5kc193aXRoKHJlZi0+bmFtZSwgIl57fSIpKSB7CisJCQlpZiAoaXRlbSAmJgorCQkJICAgICFoYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncygmcmVmLT5vbGRfb2lkLCBxdWlja19mbGFncykgJiYKKwkJCSAgICAhb2lkc2V0X2NvbnRhaW5zKCZmZXRjaF9vaWRzLCAmcmVmLT5vbGRfb2lkKSAmJgorCQkJICAgICFoYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncygmaXRlbS0+b2lkLCBxdWlja19mbGFncykgJiYKKwkJCSAgICAhb2lkc2V0X2NvbnRhaW5zKCZmZXRjaF9vaWRzLCAmaXRlbS0+b2lkKSkKKwkJCQljbGVhcl9pdGVtKGl0ZW0pOworCQkJaXRlbSA9IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIElmIGl0ZW0gaXMgbm9uLU5VTEwgaGVyZSwgdGhlbiB3ZSBwcmV2aW91c2x5IHNhdyBhCisJCSAqIHJlZiBub3QgZm9sbG93ZWQgYnkgYSBwZWVsZWQgcmVmZXJlbmNlLCBzbyB3ZSBuZWVkCisJCSAqIHRvIGNoZWNrIGlmIGl0IGlzIGEgbGlnaHR3ZWlnaHQgdGFnIHRoYXQgd2Ugd2FudCB0bworCQkgKiBmZXRjaC4KKwkJICovCisJCWlmIChpdGVtICYmCisJCSAgICAhaGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3MoJml0ZW0tPm9pZCwgcXVpY2tfZmxhZ3MpICYmCisJCSAgICAhb2lkc2V0X2NvbnRhaW5zKCZmZXRjaF9vaWRzLCAmaXRlbS0+b2lkKSkKKwkJCWNsZWFyX2l0ZW0oaXRlbSk7CisKKwkJaXRlbSA9IE5VTEw7CisKKwkJLyogc2tpcCBkdXBsaWNhdGVzIGFuZCByZWZzIHRoYXQgd2UgYWxyZWFkeSBoYXZlICovCisJCWlmIChyZWZuYW1lX2hhc2hfZXhpc3RzKCZyZW1vdGVfcmVmcywgcmVmLT5uYW1lKSB8fAorCQkgICAgcmVmbmFtZV9oYXNoX2V4aXN0cygmZXhpc3RpbmdfcmVmcywgcmVmLT5uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWl0ZW0gPSByZWZuYW1lX2hhc2hfYWRkKCZyZW1vdGVfcmVmcywgcmVmLT5uYW1lLCAmcmVmLT5vbGRfb2lkKTsKKwkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZyZW1vdGVfcmVmc19saXN0LCByZWYtPm5hbWUpOworCX0KKwloYXNobWFwX2ZyZWVfZW50cmllcygmZXhpc3RpbmdfcmVmcywgc3RydWN0IHJlZm5hbWVfaGFzaF9lbnRyeSwgZW50KTsKKworCS8qCisJICogV2UgbWF5IGhhdmUgYSBmaW5hbCBsaWdodHdlaWdodCB0YWcgdGhhdCBuZWVkcyB0byBiZQorCSAqIGNoZWNrZWQgdG8gc2VlIGlmIGl0IG5lZWRzIGZldGNoaW5nLgorCSAqLworCWlmIChpdGVtICYmCisJICAgICFoYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncygmaXRlbS0+b2lkLCBxdWlja19mbGFncykgJiYKKwkgICAgIW9pZHNldF9jb250YWlucygmZmV0Y2hfb2lkcywgJml0ZW0tPm9pZCkpCisJCWNsZWFyX2l0ZW0oaXRlbSk7CisKKwkvKgorCSAqIEZvciBhbGwgdGhlIHRhZ3MgaW4gdGhlIHJlbW90ZV9yZWZzX2xpc3QsCisJICogYWRkIHRoZW0gdG8gdGhlIGxpc3Qgb2YgcmVmcyB0byBiZSBmZXRjaGVkCisJICovCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShyZW1vdGVfcmVmX2l0ZW0sICZyZW1vdGVfcmVmc19saXN0KSB7CisJCWNvbnN0IGNoYXIgKnJlZm5hbWUgPSByZW1vdGVfcmVmX2l0ZW0tPnN0cmluZzsKKwkJc3RydWN0IHJlZiAqcm07CisJCXVuc2lnbmVkIGludCBoYXNoID0gc3RyaGFzaChyZWZuYW1lKTsKKworCQlpdGVtID0gaGFzaG1hcF9nZXRfZW50cnlfZnJvbV9oYXNoKCZyZW1vdGVfcmVmcywgaGFzaCwgcmVmbmFtZSwKKwkJCQkJc3RydWN0IHJlZm5hbWVfaGFzaF9lbnRyeSwgZW50KTsKKwkJaWYgKCFpdGVtKQorCQkJQlVHKCJ1bnNlZW4gcmVtb3RlIHJlZj8iKTsKKworCQkvKiBVbmxlc3Mgd2UgaGF2ZSBhbHJlYWR5IGRlY2lkZWQgdG8gaWdub3JlIHRoaXMgaXRlbS4uLiAqLworCQlpZiAoaXRlbS0+aWdub3JlKQorCQkJY29udGludWU7CisKKwkJcm0gPSBhbGxvY19yZWYoaXRlbS0+cmVmbmFtZSk7CisJCXJtLT5wZWVyX3JlZiA9IGFsbG9jX3JlZihpdGVtLT5yZWZuYW1lKTsKKwkJb2lkY3B5KCZybS0+b2xkX29pZCwgJml0ZW0tPm9pZCk7CisJCSoqdGFpbCA9IHJtOworCQkqdGFpbCA9ICZybS0+bmV4dDsKKwl9CisJaGFzaG1hcF9mcmVlX2VudHJpZXMoJnJlbW90ZV9yZWZzLCBzdHJ1Y3QgcmVmbmFtZV9oYXNoX2VudHJ5LCBlbnQpOworCXN0cmluZ19saXN0X2NsZWFyKCZyZW1vdGVfcmVmc19saXN0LCAwKTsKKwlvaWRzZXRfY2xlYXIoJmZldGNoX29pZHMpOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZl9tYXAoc3RydWN0IHJlbW90ZSAqcmVtb3RlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLAorCQkJICAgICAgIHN0cnVjdCByZWZzcGVjICpycywKKwkJCSAgICAgICBpbnQgdGFncywgaW50ICphdXRvdGFncykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVmICpybTsKKwlzdHJ1Y3QgcmVmICpyZWZfbWFwID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICoqdGFpbCA9ICZyZWZfbWFwOworCisJLyogb3Bwb3J0dW5pc3RpY2FsbHktdXBkYXRlZCByZWZlcmVuY2VzOiAqLworCXN0cnVjdCByZWYgKm9yZWZzID0gTlVMTCwgKipvcmVmX3RhaWwgPSAmb3JlZnM7CisKKwlzdHJ1Y3QgaGFzaG1hcCBleGlzdGluZ19yZWZzOworCisJaWYgKHJzLT5ucikgeworCQlzdHJ1Y3QgcmVmc3BlYyAqZmV0Y2hfcmVmc3BlYzsKKworCQlmb3IgKGkgPSAwOyBpIDwgcnMtPm5yOyBpKyspIHsKKwkJCWdldF9mZXRjaF9tYXAocmVtb3RlX3JlZnMsICZycy0+aXRlbXNbaV0sICZ0YWlsLCAwKTsKKwkJCWlmIChycy0+aXRlbXNbaV0uZHN0ICYmIHJzLT5pdGVtc1tpXS5kc3RbMF0pCisJCQkJKmF1dG90YWdzID0gMTsKKwkJfQorCQkvKiBNZXJnZSBldmVyeXRoaW5nIG9uIHRoZSBjb21tYW5kIGxpbmUgKGJ1dCBub3QgLS10YWdzKSAqLworCQlmb3IgKHJtID0gcmVmX21hcDsgcm07IHJtID0gcm0tPm5leHQpCisJCQlybS0+ZmV0Y2hfaGVhZF9zdGF0dXMgPSBGRVRDSF9IRUFEX01FUkdFOworCisJCS8qCisJCSAqIEZvciBhbnkgcmVmcyB0aGF0IHdlIGhhcHBlbiB0byBiZSBmZXRjaGluZyB2aWEKKwkJICogY29tbWFuZC1saW5lIGFyZ3VtZW50cywgdGhlIGRlc3RpbmF0aW9uIHJlZiBtaWdodAorCQkgKiBoYXZlIGJlZW4gbWlzc2luZyBvciBoYXZlIGJlZW4gZGlmZmVyZW50IHRoYW4gdGhlCisJCSAqIHJlbW90ZS10cmFja2luZyByZWYgdGhhdCB3b3VsZCBiZSBkZXJpdmVkIGZyb20gdGhlCisJCSAqIGNvbmZpZ3VyZWQgcmVmc3BlYy4gIEluIHRoZXNlIGNhc2VzLCB3ZSB3YW50IHRvCisJCSAqIHRha2UgdGhlIG9wcG9ydHVuaXR5IHRvIHVwZGF0ZSB0aGVpciBjb25maWd1cmVkCisJCSAqIHJlbW90ZS10cmFja2luZyByZWZlcmVuY2UuICBIb3dldmVyLCB3ZSBkbyBub3Qgd2FudAorCQkgKiB0byBtZW50aW9uIHRoZXNlIGVudHJpZXMgaW4gRkVUQ0hfSEVBRCBhdCBhbGwsIGFzCisJCSAqIHRoZXkgd291bGQgc2ltcGx5IGJlIGR1cGxpY2F0ZXMgb2YgZXhpc3RpbmcKKwkJICogZW50cmllcywgc28gd2Ugc2V0IHRoZW0gRkVUQ0hfSEVBRF9JR05PUkUgYmVsb3cuCisJCSAqCisJCSAqIFdlIGNvbXB1dGUgdGhlc2UgZW50cmllcyBub3csIGJhc2VkIG9ubHkgb24gdGhlCisJCSAqIHJlZnNwZWNzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgQnV0IHdlIGFkZAorCQkgKiB0aGVtIHRvIHRoZSBsaXN0IGZvbGxvd2luZyB0aGUgcmVmc3BlY3MgcmVzdWx0aW5nCisJCSAqIGZyb20gdGhlIHRhZ3Mgb3B0aW9uIHNvIHRoYXQgb25lIG9mIHRoZSBsYXR0ZXIsCisJCSAqIHdoaWNoIGhhcyBGRVRDSF9IRUFEX05PVF9GT1JfTUVSR0UsIGlzIG5vdCByZW1vdmVkCisJCSAqIGJ5IHJlZl9yZW1vdmVfZHVwbGljYXRlcygpIGluIGZhdm9yIG9mIG9uZSBvZiB0aGVzZQorCQkgKiBvcHBvcnR1bmlzdGljIGVudHJpZXMgd2l0aCBGRVRDSF9IRUFEX0lHTk9SRS4KKwkJICovCisJCWlmIChyZWZtYXAubnIpCisJCQlmZXRjaF9yZWZzcGVjID0gJnJlZm1hcDsKKwkJZWxzZQorCQkJZmV0Y2hfcmVmc3BlYyA9ICZyZW1vdGUtPmZldGNoOworCisJCWZvciAoaSA9IDA7IGkgPCBmZXRjaF9yZWZzcGVjLT5ucjsgaSsrKQorCQkJZ2V0X2ZldGNoX21hcChyZWZfbWFwLCAmZmV0Y2hfcmVmc3BlYy0+aXRlbXNbaV0sICZvcmVmX3RhaWwsIDEpOworCX0gZWxzZSBpZiAocmVmbWFwLm5yKSB7CisJCWRpZSgiLS1yZWZtYXAgb3B0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aXRoIGNvbW1hbmQtbGluZSByZWZzcGVjKHMpLiIpOworCX0gZWxzZSB7CisJCS8qIFVzZSB0aGUgZGVmYXVsdHMgKi8KKwkJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKwkJaW50IGhhc19tZXJnZSA9IGJyYW5jaF9oYXNfbWVyZ2VfY29uZmlnKGJyYW5jaCk7CisJCWlmIChyZW1vdGUgJiYKKwkJICAgIChyZW1vdGUtPmZldGNoLm5yIHx8CisJCSAgICAgLyogTm90ZTogaGFzX21lcmdlIGltcGxpZXMgbm9uLU5VTEwgYnJhbmNoLT5yZW1vdGVfbmFtZSAqLworCQkgICAgIChoYXNfbWVyZ2UgJiYgIXN0cmNtcChicmFuY2gtPnJlbW90ZV9uYW1lLCByZW1vdGUtPm5hbWUpKSkpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCByZW1vdGUtPmZldGNoLm5yOyBpKyspIHsKKwkJCQlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9yZWZzLCAmcmVtb3RlLT5mZXRjaC5pdGVtc1tpXSwgJnRhaWwsIDApOworCQkJCWlmIChyZW1vdGUtPmZldGNoLml0ZW1zW2ldLmRzdCAmJgorCQkJCSAgICByZW1vdGUtPmZldGNoLml0ZW1zW2ldLmRzdFswXSkKKwkJCQkJKmF1dG90YWdzID0gMTsKKwkJCQlpZiAoIWkgJiYgIWhhc19tZXJnZSAmJiByZWZfbWFwICYmCisJCQkJICAgICFyZW1vdGUtPmZldGNoLml0ZW1zWzBdLnBhdHRlcm4pCisJCQkJCXJlZl9tYXAtPmZldGNoX2hlYWRfc3RhdHVzID0gRkVUQ0hfSEVBRF9NRVJHRTsKKwkJCX0KKwkJCS8qCisJCQkgKiBpZiB0aGUgcmVtb3RlIHdlJ3JlIGZldGNoaW5nIGZyb20gaXMgdGhlIHNhbWUKKwkJCSAqIGFzIGdpdmVuIGluIGJyYW5jaC48bmFtZT4ucmVtb3RlLCB3ZSBhZGQgdGhlCisJCQkgKiByZWYgZ2l2ZW4gaW4gYnJhbmNoLjxuYW1lPi5tZXJnZSwgdG9vLgorCQkJICoKKwkJCSAqIE5vdGU6IGhhc19tZXJnZSBpbXBsaWVzIG5vbi1OVUxMIGJyYW5jaC0+cmVtb3RlX25hbWUKKwkJCSAqLworCQkJaWYgKGhhc19tZXJnZSAmJgorCQkJICAgICFzdHJjbXAoYnJhbmNoLT5yZW1vdGVfbmFtZSwgcmVtb3RlLT5uYW1lKSkKKwkJCQlhZGRfbWVyZ2VfY29uZmlnKCZyZWZfbWFwLCByZW1vdGVfcmVmcywgYnJhbmNoLCAmdGFpbCk7CisJCX0gZWxzZSB7CisJCQlyZWZfbWFwID0gZ2V0X3JlbW90ZV9yZWYocmVtb3RlX3JlZnMsICJIRUFEIik7CisJCQlpZiAoIXJlZl9tYXApCisJCQkJZGllKF8oIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIikpOworCQkJcmVmX21hcC0+ZmV0Y2hfaGVhZF9zdGF0dXMgPSBGRVRDSF9IRUFEX01FUkdFOworCQkJdGFpbCA9ICZyZWZfbWFwLT5uZXh0OworCQl9CisJfQorCisJaWYgKHRhZ3MgPT0gVEFHU19TRVQpCisJCS8qIGFsc28gZmV0Y2ggYWxsIHRhZ3MgKi8KKwkJZ2V0X2ZldGNoX21hcChyZW1vdGVfcmVmcywgdGFnX3JlZnNwZWMsICZ0YWlsLCAwKTsKKwllbHNlIGlmICh0YWdzID09IFRBR1NfREVGQVVMVCAmJiAqYXV0b3RhZ3MpCisJCWZpbmRfbm9uX2xvY2FsX3RhZ3MocmVtb3RlX3JlZnMsICZyZWZfbWFwLCAmdGFpbCk7CisKKwkvKiBOb3cgYXBwZW5kIGFueSByZWZzIHRvIGJlIHVwZGF0ZWQgb3Bwb3J0dW5pc3RpY2FsbHk6ICovCisJKnRhaWwgPSBvcmVmczsKKwlmb3IgKHJtID0gb3JlZnM7IHJtOyBybSA9IHJtLT5uZXh0KSB7CisJCXJtLT5mZXRjaF9oZWFkX3N0YXR1cyA9IEZFVENIX0hFQURfSUdOT1JFOworCQl0YWlsID0gJnJtLT5uZXh0OworCX0KKworCXJlZl9tYXAgPSByZWZfcmVtb3ZlX2R1cGxpY2F0ZXMocmVmX21hcCk7CisKKwlyZWZuYW1lX2hhc2hfaW5pdCgmZXhpc3RpbmdfcmVmcyk7CisJZm9yX2VhY2hfcmVmKGFkZF9vbmVfcmVmbmFtZSwgJmV4aXN0aW5nX3JlZnMpOworCisJZm9yIChybSA9IHJlZl9tYXA7IHJtOyBybSA9IHJtLT5uZXh0KSB7CisJCWlmIChybS0+cGVlcl9yZWYpIHsKKwkJCWNvbnN0IGNoYXIgKnJlZm5hbWUgPSBybS0+cGVlcl9yZWYtPm5hbWU7CisJCQlzdHJ1Y3QgcmVmbmFtZV9oYXNoX2VudHJ5ICpwZWVyX2l0ZW07CisJCQl1bnNpZ25lZCBpbnQgaGFzaCA9IHN0cmhhc2gocmVmbmFtZSk7CisKKwkJCXBlZXJfaXRlbSA9IGhhc2htYXBfZ2V0X2VudHJ5X2Zyb21faGFzaCgmZXhpc3RpbmdfcmVmcywKKwkJCQkJCWhhc2gsIHJlZm5hbWUsCisJCQkJCQlzdHJ1Y3QgcmVmbmFtZV9oYXNoX2VudHJ5LCBlbnQpOworCQkJaWYgKHBlZXJfaXRlbSkgeworCQkJCXN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQgPSAmcGVlcl9pdGVtLT5vaWQ7CisJCQkJb2lkY3B5KCZybS0+cGVlcl9yZWYtPm9sZF9vaWQsIG9sZF9vaWQpOworCQkJfQorCQl9CisJfQorCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZleGlzdGluZ19yZWZzLCBzdHJ1Y3QgcmVmbmFtZV9oYXNoX2VudHJ5LCBlbnQpOworCisJcmV0dXJuIHJlZl9tYXA7Cit9CisKKyNkZWZpbmUgU1RPUkVfUkVGX0VSUk9SX09USEVSIDEKKyNkZWZpbmUgU1RPUkVfUkVGX0VSUk9SX0RGX0NPTkZMSUNUIDIKKworc3RhdGljIGludCBzX3VwZGF0ZV9yZWYoY29uc3QgY2hhciAqYWN0aW9uLAorCQkJc3RydWN0IHJlZiAqcmVmLAorCQkJaW50IGNoZWNrX29sZCkKK3sKKwljaGFyICptc2c7CisJY2hhciAqcmxhID0gZ2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIpOworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCwgZGZfY29uZmxpY3QgPSAwOworCisJaWYgKGRyeV9ydW4pCisJCXJldHVybiAwOworCWlmICghcmxhKQorCQlybGEgPSBkZWZhdWx0X3JsYS5idWY7CisJbXNnID0geHN0cmZtdCgiJXM6ICVzIiwgcmxhLCBhY3Rpb24pOworCisJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJaWYgKCF0cmFuc2FjdGlvbiB8fAorCSAgICByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCByZWYtPm5hbWUsCisJCQkJICAgJnJlZi0+bmV3X29pZCwKKwkJCQkgICBjaGVja19vbGQgPyAmcmVmLT5vbGRfb2lkIDogTlVMTCwKKwkJCQkgICAwLCBtc2csICZlcnIpKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSByZWZfdHJhbnNhY3Rpb25fY29tbWl0KHRyYW5zYWN0aW9uLCAmZXJyKTsKKwlpZiAocmV0KSB7CisJCWRmX2NvbmZsaWN0ID0gKHJldCA9PSBUUkFOU0FDVElPTl9OQU1FX0NPTkZMSUNUKTsKKwkJZ290byBmYWlsOworCX0KKworCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlmcmVlKG1zZyk7CisJcmV0dXJuIDA7CitmYWlsOgorCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwllcnJvcigiJXMiLCBlcnIuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlmcmVlKG1zZyk7CisJcmV0dXJuIGRmX2NvbmZsaWN0ID8gU1RPUkVfUkVGX0VSUk9SX0RGX0NPTkZMSUNUCisJCQkgICA6IFNUT1JFX1JFRl9FUlJPUl9PVEhFUjsKK30KKworc3RhdGljIGludCByZWZjb2xfd2lkdGggPSAxMDsKK3N0YXRpYyBpbnQgY29tcGFjdF9mb3JtYXQ7CisKK3N0YXRpYyB2b2lkIGFkanVzdF9yZWZjb2xfd2lkdGgoY29uc3Qgc3RydWN0IHJlZiAqcmVmKQoreworCWludCBtYXgsIHJsZW4sIGxsZW4sIGxlbjsKKworCS8qIHVwdG9kYXRlIGxpbmVzIGFyZSBvbmx5IHNob3duIG9uIGhpZ2ggdmVyYm9zaXR5IGxldmVsICovCisJaWYgKCF2ZXJib3NpdHkgJiYgb2lkZXEoJnJlZi0+cGVlcl9yZWYtPm9sZF9vaWQsICZyZWYtPm9sZF9vaWQpKQorCQlyZXR1cm47CisKKwltYXggICAgPSB0ZXJtX2NvbHVtbnMoKTsKKwlybGVuICAgPSB1dGY4X3N0cndpZHRoKHByZXR0aWZ5X3JlZm5hbWUocmVmLT5uYW1lKSk7CisKKwlsbGVuICAgPSB1dGY4X3N0cndpZHRoKHByZXR0aWZ5X3JlZm5hbWUocmVmLT5wZWVyX3JlZi0+bmFtZSkpOworCisJLyoKKwkgKiByb3VnaCBlc3RpbWF0aW9uIHRvIHNlZSBpZiB0aGUgb3V0cHV0IGxpbmUgaXMgdG9vIGxvbmcgYW5kCisJICogc2hvdWxkIG5vdCBiZSBjb3VudGVkICh3ZSBjYW4ndCBkbyBwcmVjaXNlIGNhbGN1bGF0aW9uCisJICogYW55d2F5IGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGUgZXJyb3IgZXhwbGFuYXRpb24gcGFydAorCSAqIHdpbGwgYmUgcHJpbnRlZCBpbiB1cGRhdGVfbG9jYWxfcmVmKQorCSAqLworCWlmIChjb21wYWN0X2Zvcm1hdCkgeworCQlsbGVuID0gMDsKKwkJbWF4ID0gbWF4ICogMiAvIDM7CisJfQorCWxlbiA9IDIxIC8qIGZsYWcgYW5kIHN1bW1hcnkgKi8gKyBybGVuICsgNCAvKiAtPiAqLyArIGxsZW47CisJaWYgKGxlbiA+PSBtYXgpCisJCXJldHVybjsKKworCS8qCisJICogTm90IHByZWNpc2UgY2FsY3VsYXRpb24gZm9yIGNvbXBhY3QgbW9kZSBiZWNhdXNlICcqJyBjYW4KKwkgKiBhcHBlYXIgb24gdGhlIGxlZnQgaGFuZCBzaWRlIG9mICctPicgYW5kIHNocmluayB0aGUgY29sdW1uCisJICogYmFjay4KKwkgKi8KKwlpZiAocmVmY29sX3dpZHRoIDwgcmxlbikKKwkJcmVmY29sX3dpZHRoID0gcmxlbjsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9mb3JtYXRfZGlzcGxheShzdHJ1Y3QgcmVmICpyZWZfbWFwKQoreworCXN0cnVjdCByZWYgKnJtOworCWNvbnN0IGNoYXIgKmZvcm1hdCA9ICJmdWxsIjsKKworCWdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdCgiZmV0Y2gub3V0cHV0IiwgJmZvcm1hdCk7CisJaWYgKCFzdHJjYXNlY21wKGZvcm1hdCwgImZ1bGwiKSkKKwkJY29tcGFjdF9mb3JtYXQgPSAwOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGZvcm1hdCwgImNvbXBhY3QiKSkKKwkJY29tcGFjdF9mb3JtYXQgPSAxOworCWVsc2UKKwkJZGllKF8oImNvbmZpZ3VyYXRpb24gZmV0Y2gub3V0cHV0IGNvbnRhaW5zIGludmFsaWQgdmFsdWUgJXMiKSwKKwkJICAgIGZvcm1hdCk7CisKKwlmb3IgKHJtID0gcmVmX21hcDsgcm07IHJtID0gcm0tPm5leHQpIHsKKwkJaWYgKHJtLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfU0hBTExPVyB8fAorCQkgICAgIXJtLT5wZWVyX3JlZiB8fAorCQkgICAgIXN0cmNtcChybS0+bmFtZSwgIkhFQUQiKSkKKwkJCWNvbnRpbnVlOworCisJCWFkanVzdF9yZWZjb2xfd2lkdGgocm0pOworCX0KK30KKworc3RhdGljIHZvaWQgcHJpbnRfcmVtb3RlX3RvX2xvY2FsKHN0cnVjdCBzdHJidWYgKmRpc3BsYXksCisJCQkJICBjb25zdCBjaGFyICpyZW1vdGUsIGNvbnN0IGNoYXIgKmxvY2FsKQoreworCXN0cmJ1Zl9hZGRmKGRpc3BsYXksICIlLSpzIC0+ICVzIiwgcmVmY29sX3dpZHRoLCByZW1vdGUsIGxvY2FsKTsKK30KKworc3RhdGljIGludCBmaW5kX2FuZF9yZXBsYWNlKHN0cnVjdCBzdHJidWYgKmhheXN0YWNrLAorCQkJICAgIGNvbnN0IGNoYXIgKm5lZWRsZSwKKwkJCSAgICBjb25zdCBjaGFyICpwbGFjZWhvbGRlcikKK3sKKwljb25zdCBjaGFyICpwID0gTlVMTDsKKwlpbnQgcGxlbiwgbmxlbjsKKworCW5sZW4gPSBzdHJsZW4obmVlZGxlKTsKKwlpZiAoZW5kc193aXRoKGhheXN0YWNrLT5idWYsIG5lZWRsZSkpCisJCXAgPSBoYXlzdGFjay0+YnVmICsgaGF5c3RhY2stPmxlbiAtIG5sZW47CisJZWxzZQorCQlwID0gc3Ryc3RyKGhheXN0YWNrLT5idWYsIG5lZWRsZSk7CisJaWYgKCFwKQorCQlyZXR1cm4gMDsKKworCWlmIChwID4gaGF5c3RhY2stPmJ1ZiAmJiBwWy0xXSAhPSAnLycpCisJCXJldHVybiAwOworCisJcGxlbiA9IHN0cmxlbihwKTsKKwlpZiAocGxlbiA+IG5sZW4gJiYgcFtubGVuXSAhPSAnLycpCisJCXJldHVybiAwOworCisJc3RyYnVmX3NwbGljZShoYXlzdGFjaywgcCAtIGhheXN0YWNrLT5idWYsIG5sZW4sCisJCSAgICAgIHBsYWNlaG9sZGVyLCBzdHJsZW4ocGxhY2Vob2xkZXIpKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfY29tcGFjdChzdHJ1Y3Qgc3RyYnVmICpkaXNwbGF5LAorCQkJICBjb25zdCBjaGFyICpyZW1vdGUsIGNvbnN0IGNoYXIgKmxvY2FsKQoreworCXN0cnVjdCBzdHJidWYgciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgbCA9IFNUUkJVRl9JTklUOworCisJaWYgKCFzdHJjbXAocmVtb3RlLCBsb2NhbCkpIHsKKwkJc3RyYnVmX2FkZGYoZGlzcGxheSwgIiUtKnMgLT4gKiIsIHJlZmNvbF93aWR0aCwgcmVtb3RlKTsKKwkJcmV0dXJuOworCX0KKworCXN0cmJ1Zl9hZGRzdHIoJnIsIHJlbW90ZSk7CisJc3RyYnVmX2FkZHN0cigmbCwgbG9jYWwpOworCisJaWYgKCFmaW5kX2FuZF9yZXBsYWNlKCZyLCBsb2NhbCwgIioiKSkKKwkJZmluZF9hbmRfcmVwbGFjZSgmbCwgcmVtb3RlLCAiKiIpOworCXByaW50X3JlbW90ZV90b19sb2NhbChkaXNwbGF5LCByLmJ1ZiwgbC5idWYpOworCisJc3RyYnVmX3JlbGVhc2UoJnIpOworCXN0cmJ1Zl9yZWxlYXNlKCZsKTsKK30KKworc3RhdGljIHZvaWQgZm9ybWF0X2Rpc3BsYXkoc3RydWN0IHN0cmJ1ZiAqZGlzcGxheSwgY2hhciBjb2RlLAorCQkJICAgY29uc3QgY2hhciAqc3VtbWFyeSwgY29uc3QgY2hhciAqZXJyb3IsCisJCQkgICBjb25zdCBjaGFyICpyZW1vdGUsIGNvbnN0IGNoYXIgKmxvY2FsLAorCQkJICAgaW50IHN1bW1hcnlfd2lkdGgpCit7CisJaW50IHdpZHRoID0gKHN1bW1hcnlfd2lkdGggKyBzdHJsZW4oc3VtbWFyeSkgLSBnZXR0ZXh0X3dpZHRoKHN1bW1hcnkpKTsKKworCXN0cmJ1Zl9hZGRmKGRpc3BsYXksICIlYyAlLSpzICIsIGNvZGUsIHdpZHRoLCBzdW1tYXJ5KTsKKwlpZiAoIWNvbXBhY3RfZm9ybWF0KQorCQlwcmludF9yZW1vdGVfdG9fbG9jYWwoZGlzcGxheSwgcmVtb3RlLCBsb2NhbCk7CisJZWxzZQorCQlwcmludF9jb21wYWN0KGRpc3BsYXksIHJlbW90ZSwgbG9jYWwpOworCWlmIChlcnJvcikKKwkJc3RyYnVmX2FkZGYoZGlzcGxheSwgIiAgKCVzKSIsIGVycm9yKTsKK30KKworc3RhdGljIGludCB1cGRhdGVfbG9jYWxfcmVmKHN0cnVjdCByZWYgKnJlZiwKKwkJCSAgICBjb25zdCBjaGFyICpyZW1vdGUsCisJCQkgICAgY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZiwKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpkaXNwbGF5LAorCQkJICAgIGludCBzdW1tYXJ5X3dpZHRoKQoreworCXN0cnVjdCBjb21taXQgKmN1cnJlbnQgPSBOVUxMLCAqdXBkYXRlZDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJc3RydWN0IGJyYW5jaCAqY3VycmVudF9icmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOworCWNvbnN0IGNoYXIgKnByZXR0eV9yZWYgPSBwcmV0dGlmeV9yZWZuYW1lKHJlZi0+bmFtZSk7CisJaW50IGZhc3RfZm9yd2FyZCA9IDA7CisKKwl0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCAmcmVmLT5uZXdfb2lkLCBOVUxMKTsKKwlpZiAodHlwZSA8IDApCisJCWRpZShfKCJvYmplY3QgJXMgbm90IGZvdW5kIiksIG9pZF90b19oZXgoJnJlZi0+bmV3X29pZCkpOworCisJaWYgKG9pZGVxKCZyZWYtPm9sZF9vaWQsICZyZWYtPm5ld19vaWQpKSB7CisJCWlmICh2ZXJib3NpdHkgPiAwKQorCQkJZm9ybWF0X2Rpc3BsYXkoZGlzcGxheSwgJz0nLCBfKCJbdXAgdG8gZGF0ZV0iKSwgTlVMTCwKKwkJCQkgICAgICAgcmVtb3RlLCBwcmV0dHlfcmVmLCBzdW1tYXJ5X3dpZHRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGN1cnJlbnRfYnJhbmNoICYmCisJICAgICFzdHJjbXAocmVmLT5uYW1lLCBjdXJyZW50X2JyYW5jaC0+bmFtZSkgJiYKKwkgICAgISh1cGRhdGVfaGVhZF9vayB8fCBpc19iYXJlX3JlcG9zaXRvcnkoKSkgJiYKKwkgICAgIWlzX251bGxfb2lkKCZyZWYtPm9sZF9vaWQpKSB7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgdGhlIGhlYWQsIGFuZCBpdCdzIG5vdCBva2F5IHRvIHVwZGF0ZQorCQkgKiB0aGUgaGVhZCwgYW5kIHRoZSBvbGQgdmFsdWUgb2YgdGhlIGhlYWQgaXNuJ3QgZW1wdHkuLi4KKwkJICovCisJCWZvcm1hdF9kaXNwbGF5KGRpc3BsYXksICchJywgXygiW3JlamVjdGVkXSIpLAorCQkJICAgICAgIF8oImNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoIiksCisJCQkgICAgICAgcmVtb3RlLCBwcmV0dHlfcmVmLCBzdW1tYXJ5X3dpZHRoKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKCFpc19udWxsX29pZCgmcmVmLT5vbGRfb2lkKSAmJgorCSAgICBzdGFydHNfd2l0aChyZWYtPm5hbWUsICJyZWZzL3RhZ3MvIikpIHsKKwkJaWYgKGZvcmNlIHx8IHJlZi0+Zm9yY2UpIHsKKwkJCWludCByOworCQkJciA9IHNfdXBkYXRlX3JlZigidXBkYXRpbmcgdGFnIiwgcmVmLCAwKTsKKwkJCWZvcm1hdF9kaXNwbGF5KGRpc3BsYXksIHIgPyAnIScgOiAndCcsIF8oIlt0YWcgdXBkYXRlXSIpLAorCQkJCSAgICAgICByID8gXygidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiKSA6IE5VTEwsCisJCQkJICAgICAgIHJlbW90ZSwgcHJldHR5X3JlZiwgc3VtbWFyeV93aWR0aCk7CisJCQlyZXR1cm4gcjsKKwkJfSBlbHNlIHsKKwkJCWZvcm1hdF9kaXNwbGF5KGRpc3BsYXksICchJywgXygiW3JlamVjdGVkXSIpLCBfKCJ3b3VsZCBjbG9iYmVyIGV4aXN0aW5nIHRhZyIpLAorCQkJCSAgICAgICByZW1vdGUsIHByZXR0eV9yZWYsIHN1bW1hcnlfd2lkdGgpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwljdXJyZW50ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJICZyZWYtPm9sZF9vaWQsIDEpOworCXVwZGF0ZWQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksCisJCQkJCQkgJnJlZi0+bmV3X29pZCwgMSk7CisJaWYgKCFjdXJyZW50IHx8ICF1cGRhdGVkKSB7CisJCWNvbnN0IGNoYXIgKm1zZzsKKwkJY29uc3QgY2hhciAqd2hhdDsKKwkJaW50IHI7CisJCS8qCisJCSAqIE5pY2VseSBkZXNjcmliZSB0aGUgbmV3IHJlZiB3ZSdyZSBmZXRjaGluZy4KKwkJICogQmFzZSB0aGlzIG9uIHRoZSByZW1vdGUncyByZWYgbmFtZSwgYXMgaXQncworCQkgKiBtb3JlIGxpa2VseSB0byBmb2xsb3cgYSBzdGFuZGFyZCBsYXlvdXQuCisJCSAqLworCQljb25zdCBjaGFyICpuYW1lID0gcmVtb3RlX3JlZiA/IHJlbW90ZV9yZWYtPm5hbWUgOiAiIjsKKwkJaWYgKHN0YXJ0c193aXRoKG5hbWUsICJyZWZzL3RhZ3MvIikpIHsKKwkJCW1zZyA9ICJzdG9yaW5nIHRhZyI7CisJCQl3aGF0ID0gXygiW25ldyB0YWddIik7CisJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgobmFtZSwgInJlZnMvaGVhZHMvIikpIHsKKwkJCW1zZyA9ICJzdG9yaW5nIGhlYWQiOworCQkJd2hhdCA9IF8oIltuZXcgYnJhbmNoXSIpOworCQl9IGVsc2UgeworCQkJbXNnID0gInN0b3JpbmcgcmVmIjsKKwkJCXdoYXQgPSBfKCJbbmV3IHJlZl0iKTsKKwkJfQorCisJCXIgPSBzX3VwZGF0ZV9yZWYobXNnLCByZWYsIDApOworCQlmb3JtYXRfZGlzcGxheShkaXNwbGF5LCByID8gJyEnIDogJyonLCB3aGF0LAorCQkJICAgICAgIHIgPyBfKCJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIpIDogTlVMTCwKKwkJCSAgICAgICByZW1vdGUsIHByZXR0eV9yZWYsIHN1bW1hcnlfd2lkdGgpOworCQlyZXR1cm4gcjsKKwl9CisKKwlpZiAoZmV0Y2hfc2hvd19mb3JjZWRfdXBkYXRlcykgeworCQl1aW50NjRfdCB0X2JlZm9yZSA9IGdldG5hbm90aW1lKCk7CisJCWZhc3RfZm9yd2FyZCA9IGluX21lcmdlX2Jhc2VzKGN1cnJlbnQsIHVwZGF0ZWQpOworCQlmb3JjZWRfdXBkYXRlc19tcyArPSAoZ2V0bmFub3RpbWUoKSAtIHRfYmVmb3JlKSAvIDEwMDAwMDA7CisJfSBlbHNlIHsKKwkJZmFzdF9mb3J3YXJkID0gMTsKKwl9CisKKwlpZiAoZmFzdF9mb3J3YXJkKSB7CisJCXN0cnVjdCBzdHJidWYgcXVpY2tyZWYgPSBTVFJCVUZfSU5JVDsKKwkJaW50IHI7CisKKwkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KCZxdWlja3JlZiwgJmN1cnJlbnQtPm9iamVjdC5vaWQsIERFRkFVTFRfQUJCUkVWKTsKKwkJc3RyYnVmX2FkZHN0cigmcXVpY2tyZWYsICIuLiIpOworCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJnF1aWNrcmVmLCAmcmVmLT5uZXdfb2lkLCBERUZBVUxUX0FCQlJFVik7CisJCXIgPSBzX3VwZGF0ZV9yZWYoImZhc3QtZm9yd2FyZCIsIHJlZiwgMSk7CisJCWZvcm1hdF9kaXNwbGF5KGRpc3BsYXksIHIgPyAnIScgOiAnICcsIHF1aWNrcmVmLmJ1ZiwKKwkJCSAgICAgICByID8gXygidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiKSA6IE5VTEwsCisJCQkgICAgICAgcmVtb3RlLCBwcmV0dHlfcmVmLCBzdW1tYXJ5X3dpZHRoKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnF1aWNrcmVmKTsKKwkJcmV0dXJuIHI7CisJfSBlbHNlIGlmIChmb3JjZSB8fCByZWYtPmZvcmNlKSB7CisJCXN0cnVjdCBzdHJidWYgcXVpY2tyZWYgPSBTVFJCVUZfSU5JVDsKKwkJaW50IHI7CisJCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldigmcXVpY2tyZWYsICZjdXJyZW50LT5vYmplY3Qub2lkLCBERUZBVUxUX0FCQlJFVik7CisJCXN0cmJ1Zl9hZGRzdHIoJnF1aWNrcmVmLCAiLi4uIik7CisJCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldigmcXVpY2tyZWYsICZyZWYtPm5ld19vaWQsIERFRkFVTFRfQUJCUkVWKTsKKwkJciA9IHNfdXBkYXRlX3JlZigiZm9yY2VkLXVwZGF0ZSIsIHJlZiwgMSk7CisJCWZvcm1hdF9kaXNwbGF5KGRpc3BsYXksIHIgPyAnIScgOiAnKycsIHF1aWNrcmVmLmJ1ZiwKKwkJCSAgICAgICByID8gXygidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiKSA6IF8oImZvcmNlZCB1cGRhdGUiKSwKKwkJCSAgICAgICByZW1vdGUsIHByZXR0eV9yZWYsIHN1bW1hcnlfd2lkdGgpOworCQlzdHJidWZfcmVsZWFzZSgmcXVpY2tyZWYpOworCQlyZXR1cm4gcjsKKwl9IGVsc2UgeworCQlmb3JtYXRfZGlzcGxheShkaXNwbGF5LCAnIScsIF8oIltyZWplY3RlZF0iKSwgXygibm9uLWZhc3QtZm9yd2FyZCIpLAorCQkJICAgICAgIHJlbW90ZSwgcHJldHR5X3JlZiwgc3VtbWFyeV93aWR0aCk7CisJCXJldHVybiAxOworCX0KK30KKworc3RhdGljIGludCBpdGVyYXRlX3JlZl9tYXAodm9pZCAqY2JfZGF0YSwgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCByZWYgKipybSA9IGNiX2RhdGE7CisJc3RydWN0IHJlZiAqcmVmID0gKnJtOworCisJd2hpbGUgKHJlZiAmJiByZWYtPnN0YXR1cyA9PSBSRUZfU1RBVFVTX1JFSkVDVF9TSEFMTE9XKQorCQlyZWYgPSByZWYtPm5leHQ7CisJaWYgKCFyZWYpCisJCXJldHVybiAtMTsgLyogZW5kIG9mIHRoZSBsaXN0ICovCisJKnJtID0gcmVmLT5uZXh0OworCW9pZGNweShvaWQsICZyZWYtPm9sZF9vaWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciB3YXJuX3Nob3dfZm9yY2VkX3VwZGF0ZXNbXSA9CitOXygiRmV0Y2ggbm9ybWFsbHkgaW5kaWNhdGVzIHdoaWNoIGJyYW5jaGVzIGhhZCBhIGZvcmNlZCB1cGRhdGUsXG4iCisgICAiYnV0IHRoYXQgY2hlY2sgaGFzIGJlZW4gZGlzYWJsZWQuIFRvIHJlLWVuYWJsZSwgdXNlICctLXNob3ctZm9yY2VkLXVwZGF0ZXMnXG4iCisgICAiZmxhZyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgdHJ1ZScuIik7CitzdGF0aWMgY29uc3QgY2hhciB3YXJuX3RpbWVfc2hvd19mb3JjZWRfdXBkYXRlc1tdID0KK05fKCJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjaGVjayBmb3JjZWQgdXBkYXRlcy4gWW91IGNhbiB1c2VcbiIKKyAgICInLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgZmFsc2UnXG4iCisgICAiIHRvIGF2b2lkIHRoaXMgY2hlY2suXG4iKTsKKworc3RhdGljIGludCBzdG9yZV91cGRhdGVkX3JlZnMoY29uc3QgY2hhciAqcmF3X3VybCwgY29uc3QgY2hhciAqcmVtb3RlX25hbWUsCisJCQkgICAgICBpbnQgY29ubmVjdGl2aXR5X2NoZWNrZWQsIHN0cnVjdCByZWYgKnJlZl9tYXApCit7CisJRklMRSAqZnA7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWludCB1cmxfbGVuLCBpLCByYyA9IDA7CisJc3RydWN0IHN0cmJ1ZiBub3RlID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqd2hhdCwgKmtpbmQ7CisJc3RydWN0IHJlZiAqcm07CisJY2hhciAqdXJsOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gZHJ5X3J1biA/ICIvZGV2L251bGwiIDogZ2l0X3BhdGhfZmV0Y2hfaGVhZCh0aGVfcmVwb3NpdG9yeSk7CisJaW50IHdhbnRfc3RhdHVzOworCWludCBzdW1tYXJ5X3dpZHRoID0gdHJhbnNwb3J0X3N1bW1hcnlfd2lkdGgocmVmX21hcCk7CisKKwlmcCA9IGZvcGVuKGZpbGVuYW1lLCAiYSIpOworCWlmICghZnApCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjYW5ub3Qgb3BlbiAlcyIpLCBmaWxlbmFtZSk7CisKKwlpZiAocmF3X3VybCkKKwkJdXJsID0gdHJhbnNwb3J0X2Fub255bWl6ZV91cmwocmF3X3VybCk7CisJZWxzZQorCQl1cmwgPSB4c3RyZHVwKCJmb3JlaWduIik7CisKKwlpZiAoIWNvbm5lY3Rpdml0eV9jaGVja2VkKSB7CisJCXN0cnVjdCBjaGVja19jb25uZWN0ZWRfb3B0aW9ucyBvcHQgPSBDSEVDS19DT05ORUNURURfSU5JVDsKKworCQlybSA9IHJlZl9tYXA7CisJCWlmIChjaGVja19jb25uZWN0ZWQoaXRlcmF0ZV9yZWZfbWFwLCAmcm0sICZvcHQpKSB7CisJCQlyYyA9IGVycm9yKF8oIiVzIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHNcbiIpLCB1cmwpOworCQkJZ290byBhYm9ydDsKKwkJfQorCX0KKworCXByZXBhcmVfZm9ybWF0X2Rpc3BsYXkocmVmX21hcCk7CisKKwkvKgorCSAqIFdlIGRvIGEgcGFzcyBmb3IgZWFjaCBmZXRjaF9oZWFkX3N0YXR1cyB0eXBlIGluIHRoZWlyIGVudW0gb3JkZXIsIHNvCisJICogbWVyZ2VkIGVudHJpZXMgYXJlIHdyaXR0ZW4gYmVmb3JlIG5vdC1mb3ItbWVyZ2UuIFRoYXQgbGV0cyByZWFkZXJzCisJICogdXNlIEZFVENIX0hFQUQgYXMgYSByZWZuYW1lIHRvIHJlZmVyIHRvIHRoZSByZWYgdG8gYmUgbWVyZ2VkLgorCSAqLworCWZvciAod2FudF9zdGF0dXMgPSBGRVRDSF9IRUFEX01FUkdFOworCSAgICAgd2FudF9zdGF0dXMgPD0gRkVUQ0hfSEVBRF9JR05PUkU7CisJICAgICB3YW50X3N0YXR1cysrKSB7CisJCWZvciAocm0gPSByZWZfbWFwOyBybTsgcm0gPSBybS0+bmV4dCkgeworCQkJc3RydWN0IHJlZiAqcmVmID0gTlVMTDsKKwkJCWNvbnN0IGNoYXIgKm1lcmdlX3N0YXR1c19tYXJrZXIgPSAiIjsKKworCQkJaWYgKHJtLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfU0hBTExPVykgeworCQkJCWlmICh3YW50X3N0YXR1cyA9PSBGRVRDSF9IRUFEX01FUkdFKQorCQkJCQl3YXJuaW5nKF8oInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiKSwKKwkJCQkJCXJtLT5wZWVyX3JlZiA/IHJtLT5wZWVyX3JlZi0+bmFtZSA6IHJtLT5uYW1lKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCQkmcm0tPm9sZF9vaWQsCisJCQkJCQkJCTEpOworCQkJaWYgKCFjb21taXQpCisJCQkJcm0tPmZldGNoX2hlYWRfc3RhdHVzID0gRkVUQ0hfSEVBRF9OT1RfRk9SX01FUkdFOworCisJCQlpZiAocm0tPmZldGNoX2hlYWRfc3RhdHVzICE9IHdhbnRfc3RhdHVzKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAocm0tPnBlZXJfcmVmKSB7CisJCQkJcmVmID0gYWxsb2NfcmVmKHJtLT5wZWVyX3JlZi0+bmFtZSk7CisJCQkJb2lkY3B5KCZyZWYtPm9sZF9vaWQsICZybS0+cGVlcl9yZWYtPm9sZF9vaWQpOworCQkJCW9pZGNweSgmcmVmLT5uZXdfb2lkLCAmcm0tPm9sZF9vaWQpOworCQkJCXJlZi0+Zm9yY2UgPSBybS0+cGVlcl9yZWYtPmZvcmNlOworCQkJfQorCisJCQlpZiAocmVjdXJzZV9zdWJtb2R1bGVzICE9IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkYpCisJCQkJY2hlY2tfZm9yX25ld19zdWJtb2R1bGVfY29tbWl0cygmcm0tPm9sZF9vaWQpOworCisJCQlpZiAoIXN0cmNtcChybS0+bmFtZSwgIkhFQUQiKSkgeworCQkJCWtpbmQgPSAiIjsKKwkJCQl3aGF0ID0gIiI7CisJCQl9CisJCQllbHNlIGlmIChza2lwX3ByZWZpeChybS0+bmFtZSwgInJlZnMvaGVhZHMvIiwgJndoYXQpKQorCQkJCWtpbmQgPSAiYnJhbmNoIjsKKwkJCWVsc2UgaWYgKHNraXBfcHJlZml4KHJtLT5uYW1lLCAicmVmcy90YWdzLyIsICZ3aGF0KSkKKwkJCQlraW5kID0gInRhZyI7CisJCQllbHNlIGlmIChza2lwX3ByZWZpeChybS0+bmFtZSwgInJlZnMvcmVtb3Rlcy8iLCAmd2hhdCkpCisJCQkJa2luZCA9ICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoIjsKKwkJCWVsc2UgeworCQkJCWtpbmQgPSAiIjsKKwkJCQl3aGF0ID0gcm0tPm5hbWU7CisJCQl9CisKKwkJCXVybF9sZW4gPSBzdHJsZW4odXJsKTsKKwkJCWZvciAoaSA9IHVybF9sZW4gLSAxOyB1cmxbaV0gPT0gJy8nICYmIDAgPD0gaTsgaS0tKQorCQkJCTsKKwkJCXVybF9sZW4gPSBpICsgMTsKKwkJCWlmICg0IDwgaSAmJiAhc3RybmNtcCgiLmdpdCIsIHVybCArIGkgLSAzLCA0KSkKKwkJCQl1cmxfbGVuID0gaSAtIDM7CisKKwkJCXN0cmJ1Zl9yZXNldCgmbm90ZSk7CisJCQlpZiAoKndoYXQpIHsKKwkJCQlpZiAoKmtpbmQpCisJCQkJCXN0cmJ1Zl9hZGRmKCZub3RlLCAiJXMgIiwga2luZCk7CisJCQkJc3RyYnVmX2FkZGYoJm5vdGUsICInJXMnIG9mICIsIHdoYXQpOworCQkJfQorCQkJc3dpdGNoIChybS0+ZmV0Y2hfaGVhZF9zdGF0dXMpIHsKKwkJCWNhc2UgRkVUQ0hfSEVBRF9OT1RfRk9SX01FUkdFOgorCQkJCW1lcmdlX3N0YXR1c19tYXJrZXIgPSAibm90LWZvci1tZXJnZSI7CisJCQkJLyogZmFsbC10aHJvdWdoICovCisJCQljYXNlIEZFVENIX0hFQURfTUVSR0U6CisJCQkJZnByaW50ZihmcCwgIiVzXHQlc1x0JXMiLAorCQkJCQlvaWRfdG9faGV4KCZybS0+b2xkX29pZCksCisJCQkJCW1lcmdlX3N0YXR1c19tYXJrZXIsCisJCQkJCW5vdGUuYnVmKTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgdXJsX2xlbjsgKytpKQorCQkJCQlpZiAoJ1xuJyA9PSB1cmxbaV0pCisJCQkJCQlmcHV0cygiXFxuIiwgZnApOworCQkJCQllbHNlCisJCQkJCQlmcHV0Yyh1cmxbaV0sIGZwKTsKKwkJCQlmcHV0YygnXG4nLCBmcCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qIGRvIG5vdCB3cml0ZSBhbnl0aGluZyB0byBGRVRDSF9IRUFEICovCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXN0cmJ1Zl9yZXNldCgmbm90ZSk7CisJCQlpZiAocmVmKSB7CisJCQkJcmMgfD0gdXBkYXRlX2xvY2FsX3JlZihyZWYsIHdoYXQsIHJtLCAmbm90ZSwKKwkJCQkJCSAgICAgICBzdW1tYXJ5X3dpZHRoKTsKKwkJCQlmcmVlKHJlZik7CisJCQl9IGVsc2UKKwkJCQlmb3JtYXRfZGlzcGxheSgmbm90ZSwgJyonLAorCQkJCQkgICAgICAgKmtpbmQgPyBraW5kIDogImJyYW5jaCIsIE5VTEwsCisJCQkJCSAgICAgICAqd2hhdCA/IHdoYXQgOiAiSEVBRCIsCisJCQkJCSAgICAgICAiRkVUQ0hfSEVBRCIsIHN1bW1hcnlfd2lkdGgpOworCQkJaWYgKG5vdGUubGVuKSB7CisJCQkJaWYgKHZlcmJvc2l0eSA+PSAwICYmICFzaG93bl91cmwpIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsIF8oIkZyb20gJS4qc1xuIiksCisJCQkJCQkJdXJsX2xlbiwgdXJsKTsKKwkJCQkJc2hvd25fdXJsID0gMTsKKwkJCQl9CisJCQkJaWYgKHZlcmJvc2l0eSA+PSAwKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiAlc1xuIiwgbm90ZS5idWYpOworCQkJfQorCQl9CisJfQorCisJaWYgKHJjICYgU1RPUkVfUkVGX0VSUk9SX0RGX0NPTkZMSUNUKQorCQllcnJvcihfKCJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisJCSAgICAgICIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyAiCisJCSAgICAgICJicmFuY2hlcyIpLCByZW1vdGVfbmFtZSk7CisKKwlpZiAoYWR2aWNlX2ZldGNoX3Nob3dfZm9yY2VkX3VwZGF0ZXMpIHsKKwkJaWYgKCFmZXRjaF9zaG93X2ZvcmNlZF91cGRhdGVzKSB7CisJCQl3YXJuaW5nKF8od2Fybl9zaG93X2ZvcmNlZF91cGRhdGVzKSk7CisJCX0gZWxzZSBpZiAoZm9yY2VkX3VwZGF0ZXNfbXMgPiBGT1JDRURfVVBEQVRFU19ERUxBWV9XQVJOSU5HX0lOX01TKSB7CisJCQl3YXJuaW5nKF8od2Fybl90aW1lX3Nob3dfZm9yY2VkX3VwZGF0ZXMpLAorCQkJCWZvcmNlZF91cGRhdGVzX21zIC8gMTAwMC4wKTsKKwkJfQorCX0KKworIGFib3J0OgorCXN0cmJ1Zl9yZWxlYXNlKCZub3RlKTsKKwlmcmVlKHVybCk7CisJZmNsb3NlKGZwKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBXZSB3b3VsZCB3YW50IHRvIGJ5cGFzcyB0aGUgb2JqZWN0IHRyYW5zZmVyIGFsdG9nZXRoZXIgaWYKKyAqIGV2ZXJ5dGhpbmcgd2UgYXJlIGdvaW5nIHRvIGZldGNoIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBjb25uZWN0ZWQKKyAqIGxvY2FsbHkuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfZXhpc3RfYW5kX2Nvbm5lY3RlZChzdHJ1Y3QgcmVmICpyZWZfbWFwKQoreworCXN0cnVjdCByZWYgKnJtID0gcmVmX21hcDsKKwlzdHJ1Y3QgY2hlY2tfY29ubmVjdGVkX29wdGlvbnMgb3B0ID0gQ0hFQ0tfQ09OTkVDVEVEX0lOSVQ7CisJc3RydWN0IHJlZiAqcjsKKworCS8qCisJICogSWYgd2UgYXJlIGRlZXBlbmluZyBhIHNoYWxsb3cgY2xvbmUgd2UgYWxyZWFkeSBoYXZlIHRoZXNlCisJICogb2JqZWN0cyByZWFjaGFibGUuICBSdW5uaW5nIHJldi1saXN0IGhlcmUgd2lsbCByZXR1cm4gd2l0aAorCSAqIGEgZ29vZCAoMCkgZXhpdCBzdGF0dXMgYW5kIHdlJ2xsIGJ5cGFzcyB0aGUgZmV0Y2ggdGhhdCB3ZQorCSAqIHJlYWxseSBuZWVkIHRvIHBlcmZvcm0uICBDbGFpbWluZyBmYWlsdXJlIG5vdyB3aWxsIGVuc3VyZQorCSAqIHdlIHBlcmZvcm0gdGhlIG5ldHdvcmsgZXhjaGFuZ2UgdG8gZGVlcGVuIG91ciBoaXN0b3J5LgorCSAqLworCWlmIChkZWVwZW4pCisJCXJldHVybiAtMTsKKworCS8qCisJICogY2hlY2tfY29ubmVjdGVkKCkgYWxsb3dzIG9iamVjdHMgdG8gbWVyZWx5IGJlIHByb21pc2VkLCBidXQKKwkgKiB3ZSBuZWVkIGFsbCBkaXJlY3QgdGFyZ2V0cyB0byBleGlzdC4KKwkgKi8KKwlmb3IgKHIgPSBybTsgcjsgciA9IHItPm5leHQpIHsKKwkJaWYgKCFoYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncygmci0+b2xkX29pZCwKKwkJCQkJCU9CSkVDVF9JTkZPX1NLSVBfRkVUQ0hfT0JKRUNUKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlvcHQucXVpZXQgPSAxOworCXJldHVybiBjaGVja19jb25uZWN0ZWQoaXRlcmF0ZV9yZWZfbWFwLCAmcm0sICZvcHQpOworfQorCitzdGF0aWMgaW50IGZldGNoX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgcmVmICpyZWZfbWFwKQoreworCWludCByZXQgPSBjaGVja19leGlzdF9hbmRfY29ubmVjdGVkKHJlZl9tYXApOworCWlmIChyZXQpIHsKKwkJdHJhY2UyX3JlZ2lvbl9lbnRlcigiZmV0Y2giLCAiZmV0Y2hfcmVmcyIsIHRoZV9yZXBvc2l0b3J5KTsKKwkJcmV0ID0gdHJhbnNwb3J0X2ZldGNoX3JlZnModHJhbnNwb3J0LCByZWZfbWFwKTsKKwkJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgiZmV0Y2giLCAiZmV0Y2hfcmVmcyIsIHRoZV9yZXBvc2l0b3J5KTsKKwl9CisJaWYgKCFyZXQpCisJCS8qCisJCSAqIEtlZXAgdGhlIG5ldyBwYWNrJ3MgIi5rZWVwIiBmaWxlIGFyb3VuZCB0byBhbGxvdyB0aGUgY2FsbGVyCisJCSAqIHRpbWUgdG8gdXBkYXRlIHJlZnMgdG8gcmVmZXJlbmNlIHRoZSBuZXcgb2JqZWN0cy4KKwkJICovCisJCXJldHVybiAwOworCXRyYW5zcG9ydF91bmxvY2tfcGFjayh0cmFuc3BvcnQpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFVwZGF0ZSBsb2NhbCByZWZzIGJhc2VkIG9uIHRoZSByZWYgdmFsdWVzIGZldGNoZWQgZnJvbSBhIHJlbW90ZSAqLworc3RhdGljIGludCBjb25zdW1lX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgcmVmICpyZWZfbWFwKQoreworCWludCBjb25uZWN0aXZpdHlfY2hlY2tlZCA9IHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucworCQk/IHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucy0+Y29ubmVjdGl2aXR5X2NoZWNrZWQgOiAwOworCWludCByZXQ7CisJdHJhY2UyX3JlZ2lvbl9lbnRlcigiZmV0Y2giLCAiY29uc3VtZV9yZWZzIiwgdGhlX3JlcG9zaXRvcnkpOworCXJldCA9IHN0b3JlX3VwZGF0ZWRfcmVmcyh0cmFuc3BvcnQtPnVybCwKKwkJCQkgdHJhbnNwb3J0LT5yZW1vdGUtPm5hbWUsCisJCQkJIGNvbm5lY3Rpdml0eV9jaGVja2VkLAorCQkJCSByZWZfbWFwKTsKKwl0cmFuc3BvcnRfdW5sb2NrX3BhY2sodHJhbnNwb3J0KTsKKwl0cmFjZTJfcmVnaW9uX2xlYXZlKCJmZXRjaCIsICJjb25zdW1lX3JlZnMiLCB0aGVfcmVwb3NpdG9yeSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwcnVuZV9yZWZzKHN0cnVjdCByZWZzcGVjICpycywgc3RydWN0IHJlZiAqcmVmX21hcCwKKwkJICAgICAgY29uc3QgY2hhciAqcmF3X3VybCkKK3sKKwlpbnQgdXJsX2xlbiwgaSwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgcmVmICpyZWYsICpzdGFsZV9yZWZzID0gZ2V0X3N0YWxlX2hlYWRzKHJzLCByZWZfbWFwKTsKKwljaGFyICp1cmw7CisJaW50IHN1bW1hcnlfd2lkdGggPSB0cmFuc3BvcnRfc3VtbWFyeV93aWR0aChzdGFsZV9yZWZzKTsKKwljb25zdCBjaGFyICpkYW5nbGluZ19tc2cgPSBkcnlfcnVuCisJCT8gXygiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIpCisJCTogXygiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIik7CisKKwlpZiAocmF3X3VybCkKKwkJdXJsID0gdHJhbnNwb3J0X2Fub255bWl6ZV91cmwocmF3X3VybCk7CisJZWxzZQorCQl1cmwgPSB4c3RyZHVwKCJmb3JlaWduIik7CisKKwl1cmxfbGVuID0gc3RybGVuKHVybCk7CisJZm9yIChpID0gdXJsX2xlbiAtIDE7IHVybFtpXSA9PSAnLycgJiYgMCA8PSBpOyBpLS0pCisJCTsKKworCXVybF9sZW4gPSBpICsgMTsKKwlpZiAoNCA8IGkgJiYgIXN0cm5jbXAoIi5naXQiLCB1cmwgKyBpIC0gMywgNCkpCisJCXVybF9sZW4gPSBpIC0gMzsKKworCWlmICghZHJ5X3J1bikgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVmbmFtZXMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJCWZvciAocmVmID0gc3RhbGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJlZm5hbWVzLCByZWYtPm5hbWUpOworCisJCXJlc3VsdCA9IGRlbGV0ZV9yZWZzKCJmZXRjaDogcHJ1bmUiLCAmcmVmbmFtZXMsIDApOworCQlzdHJpbmdfbGlzdF9jbGVhcigmcmVmbmFtZXMsIDApOworCX0KKworCWlmICh2ZXJib3NpdHkgPj0gMCkgeworCQlmb3IgKHJlZiA9IHN0YWxlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAoIXNob3duX3VybCkgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCJGcm9tICUuKnNcbiIpLCB1cmxfbGVuLCB1cmwpOworCQkJCXNob3duX3VybCA9IDE7CisJCQl9CisJCQlmb3JtYXRfZGlzcGxheSgmc2IsICctJywgXygiW2RlbGV0ZWRdIiksIE5VTEwsCisJCQkJICAgICAgIF8oIihub25lKSIpLCBwcmV0dGlmeV9yZWZuYW1lKHJlZi0+bmFtZSksCisJCQkJICAgICAgIHN1bW1hcnlfd2lkdGgpOworCQkJZnByaW50ZihzdGRlcnIsICIgJXNcbiIsc2IuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCQl3YXJuX2RhbmdsaW5nX3N5bXJlZihzdGRlcnIsIGRhbmdsaW5nX21zZywgcmVmLT5uYW1lKTsKKwkJfQorCX0KKworCWZyZWUodXJsKTsKKwlmcmVlX3JlZnMoc3RhbGVfcmVmcyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfbm90X2N1cnJlbnRfYnJhbmNoKHN0cnVjdCByZWYgKnJlZl9tYXApCit7CisJc3RydWN0IGJyYW5jaCAqY3VycmVudF9icmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOworCisJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeSgpIHx8ICFjdXJyZW50X2JyYW5jaCkKKwkJcmV0dXJuOworCisJZm9yICg7IHJlZl9tYXA7IHJlZl9tYXAgPSByZWZfbWFwLT5uZXh0KQorCQlpZiAocmVmX21hcC0+cGVlcl9yZWYgJiYgIXN0cmNtcChjdXJyZW50X2JyYW5jaC0+cmVmbmFtZSwKKwkJCQkJcmVmX21hcC0+cGVlcl9yZWYtPm5hbWUpKQorCQkJZGllKF8oIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgIgorCQkJICAgICJvZiBub24tYmFyZSByZXBvc2l0b3J5IiksIGN1cnJlbnRfYnJhbmNoLT5yZWZuYW1lKTsKK30KKworc3RhdGljIGludCB0cnVuY2F0ZV9mZXRjaF9oZWFkKHZvaWQpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aF9mZXRjaF9oZWFkKHRoZV9yZXBvc2l0b3J5KTsKKwlGSUxFICpmcCA9IGZvcGVuX2Zvcl93cml0aW5nKGZpbGVuYW1lKTsKKworCWlmICghZnApCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjYW5ub3Qgb3BlbiAlcyIpLCBmaWxlbmFtZSk7CisJZmNsb3NlKGZwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X29wdGlvbihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCByID0gdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBuYW1lLCB2YWx1ZSk7CisJaWYgKHIgPCAwKQorCQlkaWUoXygiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIpLAorCQkgICAgbmFtZSwgdmFsdWUsIHRyYW5zcG9ydC0+dXJsKTsKKwlpZiAociA+IDApCisJCXdhcm5pbmcoXygiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIiksCisJCQluYW1lLCB0cmFuc3BvcnQtPnVybCk7Cit9CisKKworc3RhdGljIGludCBhZGRfb2lkKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZsYWdzLAorCQkgICB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvaWRfYXJyYXkgKm9pZHMgPSBjYl9kYXRhOworCisJb2lkX2FycmF5X2FwcGVuZChvaWRzLCBvaWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZGRfbmVnb3RpYXRpb25fdGlwcyhzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9vcHRpb25zICpzbWFydF9vcHRpb25zKQoreworCXN0cnVjdCBvaWRfYXJyYXkgKm9pZHMgPSB4Y2FsbG9jKDEsIHNpemVvZigqb2lkcykpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5lZ290aWF0aW9uX3RpcC5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnMgPSBuZWdvdGlhdGlvbl90aXAuaXRlbXNbaV0uc3RyaW5nOworCQlpbnQgb2xkX25yOworCQlpZiAoIWhhc19nbG9iX3NwZWNpYWxzKHMpKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJCWlmIChnZXRfb2lkKHMsICZvaWQpKQorCQkJCWRpZSgiJXMgaXMgbm90IGEgdmFsaWQgb2JqZWN0Iiwgcyk7CisJCQlvaWRfYXJyYXlfYXBwZW5kKG9pZHMsICZvaWQpOworCQkJY29udGludWU7CisJCX0KKwkJb2xkX25yID0gb2lkcy0+bnI7CisJCWZvcl9lYWNoX2dsb2JfcmVmKGFkZF9vaWQsIHMsIG9pZHMpOworCQlpZiAob2xkX25yID09IG9pZHMtPm5yKQorCQkJd2FybmluZygiSWdub3JpbmcgLS1uZWdvdGlhdGlvbi10aXA9JXMgYmVjYXVzZSBpdCBkb2VzIG5vdCBtYXRjaCBhbnkgcmVmcyIsCisJCQkJcyk7CisJfQorCXNtYXJ0X29wdGlvbnMtPm5lZ290aWF0aW9uX3RpcHMgPSBvaWRzOworfQorCitzdGF0aWMgc3RydWN0IHRyYW5zcG9ydCAqcHJlcGFyZV90cmFuc3BvcnQoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBpbnQgZGVlcGVuKQoreworCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydDsKKworCXRyYW5zcG9ydCA9IHRyYW5zcG9ydF9nZXQocmVtb3RlLCBOVUxMKTsKKwl0cmFuc3BvcnRfc2V0X3ZlcmJvc2l0eSh0cmFuc3BvcnQsIHZlcmJvc2l0eSwgcHJvZ3Jlc3MpOworCXRyYW5zcG9ydC0+ZmFtaWx5ID0gZmFtaWx5OworCWlmICh1cGxvYWRfcGFjaykKKwkJc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9VUExPQURQQUNLLCB1cGxvYWRfcGFjayk7CisJaWYgKGtlZXApCisJCXNldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfS0VFUCwgInllcyIpOworCWlmIChkZXB0aCkKKwkJc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9ERVBUSCwgZGVwdGgpOworCWlmIChkZWVwZW4gJiYgZGVlcGVuX3NpbmNlKQorCQlzZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0RFRVBFTl9TSU5DRSwgZGVlcGVuX3NpbmNlKTsKKwlpZiAoZGVlcGVuICYmIGRlZXBlbl9ub3QubnIpCisJCXNldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfREVFUEVOX05PVCwKKwkJCSAgIChjb25zdCBjaGFyICopJmRlZXBlbl9ub3QpOworCWlmIChkZWVwZW5fcmVsYXRpdmUpCisJCXNldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfREVFUEVOX1JFTEFUSVZFLCAieWVzIik7CisJaWYgKHVwZGF0ZV9zaGFsbG93KQorCQlzZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX1VQREFURV9TSEFMTE9XLCAieWVzIik7CisJaWYgKGZpbHRlcl9vcHRpb25zLmNob2ljZSkgeworCQljb25zdCBjaGFyICpzcGVjID0KKwkJCWV4cGFuZF9saXN0X29iamVjdHNfZmlsdGVyX3NwZWMoJmZpbHRlcl9vcHRpb25zKTsKKwkJc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9MSVNUX09CSkVDVFNfRklMVEVSLCBzcGVjKTsKKwkJc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9GUk9NX1BST01JU09SLCAiMSIpOworCX0KKwlpZiAobmVnb3RpYXRpb25fdGlwLm5yKSB7CisJCWlmICh0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMpCisJCQlhZGRfbmVnb3RpYXRpb25fdGlwcyh0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMpOworCQllbHNlCisJCQl3YXJuaW5nKCJJZ25vcmluZyAtLW5lZ290aWF0aW9uLXRpcCBiZWNhdXNlIHRoZSBwcm90b2NvbCBkb2VzIG5vdCBzdXBwb3J0IGl0LiIpOworCX0KKwlyZXR1cm4gdHJhbnNwb3J0OworfQorCitzdGF0aWMgdm9pZCBiYWNrZmlsbF90YWdzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmX21hcCkKK3sKKwlpbnQgY2Fubm90X3JldXNlOworCisJLyoKKwkgKiBPbmNlIHdlIGhhdmUgc2V0IFRSQU5TX09QVF9ERUVQRU5fU0lOQ0UsIHdlIGNhbid0IHVuc2V0IGl0CisJICogd2hlbiByZW1vdGUgaGVscGVyIGlzIHVzZWQgKHNldHRpbmcgaXQgdG8gYW4gZW1wdHkgc3RyaW5nCisJICogaXMgbm90IHVuc2V0dGluZykuIFdlIGNvdWxkIGV4dGVuZCB0aGUgcmVtb3RlIGhlbHBlcgorCSAqIHByb3RvY29sIGZvciB0aGF0LCBidXQgZm9yIG5vdywganVzdCBmb3JjZSBhIG5ldyBjb25uZWN0aW9uCisJICogd2l0aG91dCBkZWVwZW4tc2luY2UuIFNpbWlsYXIgc3RvcnkgZm9yIGRlZXBlbi1ub3QuCisJICovCisJY2Fubm90X3JldXNlID0gdHJhbnNwb3J0LT5jYW5ub3RfcmV1c2UgfHwKKwkJZGVlcGVuX3NpbmNlIHx8IGRlZXBlbl9ub3QubnI7CisJaWYgKGNhbm5vdF9yZXVzZSkgeworCQlnc2Vjb25kYXJ5ID0gcHJlcGFyZV90cmFuc3BvcnQodHJhbnNwb3J0LT5yZW1vdGUsIDApOworCQl0cmFuc3BvcnQgPSBnc2Vjb25kYXJ5OworCX0KKworCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0ZPTExPV1RBR1MsIE5VTEwpOworCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0RFUFRILCAiMCIpOworCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0RFRVBFTl9SRUxBVElWRSwgTlVMTCk7CisJaWYgKCFmZXRjaF9yZWZzKHRyYW5zcG9ydCwgcmVmX21hcCkpCisJCWNvbnN1bWVfcmVmcyh0cmFuc3BvcnQsIHJlZl9tYXApOworCisJaWYgKGdzZWNvbmRhcnkpIHsKKwkJdHJhbnNwb3J0X2Rpc2Nvbm5lY3QoZ3NlY29uZGFyeSk7CisJCWdzZWNvbmRhcnkgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBkb19mZXRjaChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCSAgICBzdHJ1Y3QgcmVmc3BlYyAqcnMpCit7CisJc3RydWN0IHJlZiAqcmVmX21hcDsKKwlpbnQgYXV0b3RhZ3MgPSAodHJhbnNwb3J0LT5yZW1vdGUtPmZldGNoX3RhZ3MgPT0gMSk7CisJaW50IHJldGNvZGUgPSAwOworCWNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzOworCXN0cnVjdCBhcmd2X2FycmF5IHJlZl9wcmVmaXhlcyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlpbnQgbXVzdF9saXN0X3JlZnMgPSAxOworCisJaWYgKHRhZ3MgPT0gVEFHU19ERUZBVUxUKSB7CisJCWlmICh0cmFuc3BvcnQtPnJlbW90ZS0+ZmV0Y2hfdGFncyA9PSAyKQorCQkJdGFncyA9IFRBR1NfU0VUOworCQlpZiAodHJhbnNwb3J0LT5yZW1vdGUtPmZldGNoX3RhZ3MgPT0gLTEpCisJCQl0YWdzID0gVEFHU19VTlNFVDsKKwl9CisKKwkvKiBpZiBub3QgYXBwZW5kaW5nLCB0cnVuY2F0ZSBGRVRDSF9IRUFEICovCisJaWYgKCFhcHBlbmQgJiYgIWRyeV9ydW4pIHsKKwkJcmV0Y29kZSA9IHRydW5jYXRlX2ZldGNoX2hlYWQoKTsKKwkJaWYgKHJldGNvZGUpCisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKHJzLT5ucikgeworCQlpbnQgaTsKKworCQlyZWZzcGVjX3JlZl9wcmVmaXhlcyhycywgJnJlZl9wcmVmaXhlcyk7CisKKwkJLyoKKwkJICogV2UgY2FuIGF2b2lkIGxpc3RpbmcgcmVmcyBpZiBhbGwgb2YgdGhlbSBhcmUgZXhhY3QKKwkJICogT0lEcworCQkgKi8KKwkJbXVzdF9saXN0X3JlZnMgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgcnMtPm5yOyBpKyspIHsKKwkJCWlmICghcnMtPml0ZW1zW2ldLmV4YWN0X3NoYTEpIHsKKwkJCQltdXN0X2xpc3RfcmVmcyA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKHRyYW5zcG9ydC0+cmVtb3RlICYmIHRyYW5zcG9ydC0+cmVtb3RlLT5mZXRjaC5ucikKKwkJcmVmc3BlY19yZWZfcHJlZml4ZXMoJnRyYW5zcG9ydC0+cmVtb3RlLT5mZXRjaCwgJnJlZl9wcmVmaXhlcyk7CisKKwlpZiAodGFncyA9PSBUQUdTX1NFVCB8fCB0YWdzID09IFRBR1NfREVGQVVMVCkgeworCQltdXN0X2xpc3RfcmVmcyA9IDE7CisJCWlmIChyZWZfcHJlZml4ZXMuYXJnYykKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmcmVmX3ByZWZpeGVzLCAicmVmcy90YWdzLyIpOworCX0KKworCWlmIChtdXN0X2xpc3RfcmVmcykgeworCQl0cmFjZTJfcmVnaW9uX2VudGVyKCJmZXRjaCIsICJyZW1vdGVfcmVmcyIsIHRoZV9yZXBvc2l0b3J5KTsKKwkJcmVtb3RlX3JlZnMgPSB0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHRyYW5zcG9ydCwgJnJlZl9wcmVmaXhlcyk7CisJCXRyYWNlMl9yZWdpb25fbGVhdmUoImZldGNoIiwgInJlbW90ZV9yZWZzIiwgdGhlX3JlcG9zaXRvcnkpOworCX0gZWxzZQorCQlyZW1vdGVfcmVmcyA9IE5VTEw7CisKKwlhcmd2X2FycmF5X2NsZWFyKCZyZWZfcHJlZml4ZXMpOworCisJcmVmX21hcCA9IGdldF9yZWZfbWFwKHRyYW5zcG9ydC0+cmVtb3RlLCByZW1vdGVfcmVmcywgcnMsCisJCQkgICAgICB0YWdzLCAmYXV0b3RhZ3MpOworCWlmICghdXBkYXRlX2hlYWRfb2spCisJCWNoZWNrX25vdF9jdXJyZW50X2JyYW5jaChyZWZfbWFwKTsKKworCWlmICh0YWdzID09IFRBR1NfREVGQVVMVCAmJiBhdXRvdGFncykKKwkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfRk9MTE9XVEFHUywgIjEiKTsKKwlpZiAocHJ1bmUpIHsKKwkJLyoKKwkJICogV2Ugb25seSBwcnVuZSBiYXNlZCBvbiByZWZzcGVjcyBzcGVjaWZpZWQKKwkJICogZXhwbGljaXRseSAodmlhIGNvbW1hbmQgbGluZSBvciBjb25maWd1cmF0aW9uKTsgd2UKKwkJICogZG9uJ3QgY2FyZSB3aGV0aGVyIC0tdGFncyB3YXMgc3BlY2lmaWVkLgorCQkgKi8KKwkJaWYgKHJzLT5ucikgeworCQkJcHJ1bmVfcmVmcyhycywgcmVmX21hcCwgdHJhbnNwb3J0LT51cmwpOworCQl9IGVsc2UgeworCQkJcHJ1bmVfcmVmcygmdHJhbnNwb3J0LT5yZW1vdGUtPmZldGNoLAorCQkJCSAgIHJlZl9tYXAsCisJCQkJICAgdHJhbnNwb3J0LT51cmwpOworCQl9CisJfQorCWlmIChmZXRjaF9yZWZzKHRyYW5zcG9ydCwgcmVmX21hcCkgfHwgY29uc3VtZV9yZWZzKHRyYW5zcG9ydCwgcmVmX21hcCkpIHsKKwkJZnJlZV9yZWZzKHJlZl9tYXApOworCQlyZXRjb2RlID0gMTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWlmIChzZXRfdXBzdHJlYW0pIHsKKwkJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldCgiSEVBRCIpOworCQlzdHJ1Y3QgcmVmICpybTsKKwkJc3RydWN0IHJlZiAqc291cmNlX3JlZiA9IE5VTEw7CisKKwkJLyoKKwkJICogV2UncmUgc2V0dGluZyB0aGUgdXBzdHJlYW0gY29uZmlndXJhdGlvbiBmb3IgdGhlCisJCSAqIGN1cnJlbnQgYnJhbmNoLiBUaGUgcmVsZXZhbnQgdXBzdHJlYW0gaXMgdGhlCisJCSAqIGZldGNoZWQgYnJhbmNoIHRoYXQgaXMgbWVhbnQgdG8gYmUgbWVyZ2VkIHdpdGggdGhlCisJCSAqIGN1cnJlbnQgb25lLCBpLmUuIHRoZSBvbmUgZmV0Y2hlZCB0byBGRVRDSF9IRUFELgorCQkgKgorCQkgKiBXaGVuIHRoZXJlIGFyZSBzZXZlcmFsIHN1Y2ggYnJhbmNoZXMsIGNvbnNpZGVyIHRoZQorCQkgKiByZXF1ZXN0IGFtYmlndW91cyBhbmQgZXJyIG9uIHRoZSBzYWZlIHNpZGUgYnkgZG9pbmcKKwkJICogbm90aGluZyBhbmQganVzdCBlbWl0IGEgd2FybmluZy4KKwkJICovCisJCWZvciAocm0gPSByZWZfbWFwOyBybTsgcm0gPSBybS0+bmV4dCkgeworCQkJaWYgKCFybS0+cGVlcl9yZWYpIHsKKwkJCQlpZiAoc291cmNlX3JlZikgeworCQkJCQl3YXJuaW5nKF8oIm11bHRpcGxlIGJyYW5jaGVzIGRldGVjdGVkLCBpbmNvbXBhdGlibGUgd2l0aCAtLXNldC11cHN0cmVhbSIpKTsKKwkJCQkJZ290byBza2lwOworCQkJCX0gZWxzZSB7CisJCQkJCXNvdXJjZV9yZWYgPSBybTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKHNvdXJjZV9yZWYpIHsKKwkJCWlmICghc3RyY21wKHNvdXJjZV9yZWYtPm5hbWUsICJIRUFEIikgfHwKKwkJCSAgICBzdGFydHNfd2l0aChzb3VyY2VfcmVmLT5uYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJCQlpbnN0YWxsX2JyYW5jaF9jb25maWcoMCwKKwkJCQkJCSAgICAgIGJyYW5jaC0+bmFtZSwKKwkJCQkJCSAgICAgIHRyYW5zcG9ydC0+cmVtb3RlLT5uYW1lLAorCQkJCQkJICAgICAgc291cmNlX3JlZi0+bmFtZSk7CisJCQllbHNlIGlmIChzdGFydHNfd2l0aChzb3VyY2VfcmVmLT5uYW1lLCAicmVmcy9yZW1vdGVzLyIpKQorCQkJCXdhcm5pbmcoXygibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHJlbW90ZS10cmFja2luZyBicmFuY2giKSk7CisJCQllbHNlIGlmIChzdGFydHNfd2l0aChzb3VyY2VfcmVmLT5uYW1lLCAicmVmcy90YWdzLyIpKQorCQkJCXdhcm5pbmcoXygibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHRhZyIpKTsKKwkJCWVsc2UKKwkJCQl3YXJuaW5nKF8oInVua25vd24gYnJhbmNoIHR5cGUiKSk7CisJCX0gZWxzZSB7CisJCQl3YXJuaW5nKF8oIm5vIHNvdXJjZSBicmFuY2ggZm91bmQuXG4iCisJCQkJInlvdSBuZWVkIHRvIHNwZWNpZnkgZXhhY3RseSBvbmUgYnJhbmNoIHdpdGggdGhlIC0tc2V0LXVwc3RyZWFtIG9wdGlvbi4iKSk7CisJCX0KKwl9Cisgc2tpcDoKKwlmcmVlX3JlZnMocmVmX21hcCk7CisKKwkvKiBpZiBuZWl0aGVyIC0tbm8tdGFncyBub3IgLS10YWdzIHdhcyBzcGVjaWZpZWQsIGRvIGF1dG9tYXRlZCB0YWcKKwkgKiBmb2xsb3dpbmcgLi4uICovCisJaWYgKHRhZ3MgPT0gVEFHU19ERUZBVUxUICYmIGF1dG90YWdzKSB7CisJCXN0cnVjdCByZWYgKip0YWlsID0gJnJlZl9tYXA7CisJCXJlZl9tYXAgPSBOVUxMOworCQlmaW5kX25vbl9sb2NhbF90YWdzKHJlbW90ZV9yZWZzLCAmcmVmX21hcCwgJnRhaWwpOworCQlpZiAocmVmX21hcCkKKwkJCWJhY2tmaWxsX3RhZ3ModHJhbnNwb3J0LCByZWZfbWFwKTsKKwkJZnJlZV9yZWZzKHJlZl9tYXApOworCX0KKworIGNsZWFudXA6CisJcmV0dXJuIHJldGNvZGU7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X29uZV9yZW1vdGVfZm9yX2ZldGNoKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QgPSBwcml2OworCWlmICghcmVtb3RlLT5za2lwX2RlZmF1bHRfdXBkYXRlKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgcmVtb3RlLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlbW90ZV9ncm91cF9kYXRhIHsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdDsKK307CisKK3N0YXRpYyBpbnQgZ2V0X3JlbW90ZV9ncm91cChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCByZW1vdGVfZ3JvdXBfZGF0YSAqZyA9IHByaXY7CisKKwlpZiAoc2tpcF9wcmVmaXgoa2V5LCAicmVtb3Rlcy4iLCAma2V5KSAmJiAhc3RyY21wKGtleSwgZy0+bmFtZSkpIHsKKwkJLyogc3BsaXQgbGlzdCBieSB3aGl0ZSBzcGFjZSAqLworCQl3aGlsZSAoKnZhbHVlKSB7CisJCQlzaXplX3Qgd29yZGxlbiA9IHN0cmNzcG4odmFsdWUsICIgXHRcbiIpOworCisJCQlpZiAod29yZGxlbiA+PSAxKQorCQkJCXN0cmluZ19saXN0X2FwcGVuZF9ub2R1cChnLT5saXN0LAorCQkJCQkJICAgeHN0cm5kdXAodmFsdWUsIHdvcmRsZW4pKTsKKwkJCXZhbHVlICs9IHdvcmRsZW4gKyAodmFsdWVbd29yZGxlbl0gIT0gJ1wwJyk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGRfcmVtb3RlX29yX2dyb3VwKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwlpbnQgcHJldl9uciA9IGxpc3QtPm5yOworCXN0cnVjdCByZW1vdGVfZ3JvdXBfZGF0YSBnOworCWcubmFtZSA9IG5hbWU7IGcubGlzdCA9IGxpc3Q7CisKKwlnaXRfY29uZmlnKGdldF9yZW1vdGVfZ3JvdXAsICZnKTsKKwlpZiAobGlzdC0+bnIgPT0gcHJldl9ucikgeworCQlzdHJ1Y3QgcmVtb3RlICpyZW1vdGUgPSByZW1vdGVfZ2V0KG5hbWUpOworCQlpZiAoIXJlbW90ZV9pc19jb25maWd1cmVkKHJlbW90ZSwgMCkpCisJCQlyZXR1cm4gMDsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHJlbW90ZS0+bmFtZSk7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBhZGRfb3B0aW9uc190b19hcmd2KHN0cnVjdCBhcmd2X2FycmF5ICphcmd2KQoreworCWlmIChkcnlfcnVuKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgIi0tZHJ5LXJ1biIpOworCWlmIChwcnVuZSAhPSAtMSkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsIHBydW5lID8gIi0tcHJ1bmUiIDogIi0tbm8tcHJ1bmUiKTsKKwlpZiAocHJ1bmVfdGFncyAhPSAtMSkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsIHBydW5lX3RhZ3MgPyAiLS1wcnVuZS10YWdzIiA6ICItLW5vLXBydW5lLXRhZ3MiKTsKKwlpZiAodXBkYXRlX2hlYWRfb2spCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLS11cGRhdGUtaGVhZC1vayIpOworCWlmIChmb3JjZSkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItLWZvcmNlIik7CisJaWYgKGtlZXApCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLS1rZWVwIik7CisJaWYgKHJlY3Vyc2Vfc3VibW9kdWxlcyA9PSBSRUNVUlNFX1NVQk1PRFVMRVNfT04pCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMiKTsKKwllbHNlIGlmIChyZWN1cnNlX3N1Ym1vZHVsZXMgPT0gUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORCkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQiKTsKKwlpZiAodGFncyA9PSBUQUdTX1NFVCkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItLXRhZ3MiKTsKKwllbHNlIGlmICh0YWdzID09IFRBR1NfVU5TRVQpCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLS1uby10YWdzIik7CisJaWYgKHZlcmJvc2l0eSA+PSAyKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgIi12Iik7CisJaWYgKHZlcmJvc2l0eSA+PSAxKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgIi12Iik7CisJZWxzZSBpZiAodmVyYm9zaXR5IDwgMCkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItcSIpOworCit9CisKKy8qIEZldGNoIG11bHRpcGxlIHJlbW90ZXMgaW4gcGFyYWxsZWwgKi8KKworc3RydWN0IHBhcmFsbGVsX2ZldGNoX3N0YXRlIHsKKwljb25zdCBjaGFyICoqYXJndjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlbW90ZXM7CisJaW50IG5leHQsIHJlc3VsdDsKK307CisKK3N0YXRpYyBpbnQgZmV0Y2hfbmV4dF9yZW1vdGUoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNwLCBzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCQkgICAgIHZvaWQgKmNiLCB2b2lkICoqdGFza19jYikKK3sKKwlzdHJ1Y3QgcGFyYWxsZWxfZmV0Y2hfc3RhdGUgKnN0YXRlID0gY2I7CisJY2hhciAqcmVtb3RlOworCisJaWYgKHN0YXRlLT5uZXh0IDwgMCB8fCBzdGF0ZS0+bmV4dCA+PSBzdGF0ZS0+cmVtb3Rlcy0+bnIpCisJCXJldHVybiAwOworCisJcmVtb3RlID0gc3RhdGUtPnJlbW90ZXMtPml0ZW1zW3N0YXRlLT5uZXh0KytdLnN0cmluZzsKKwkqdGFza19jYiA9IHJlbW90ZTsKKworCWFyZ3ZfYXJyYXlfcHVzaHYoJmNwLT5hcmdzLCBzdGF0ZS0+YXJndik7CisJYXJndl9hcnJheV9wdXNoKCZjcC0+YXJncywgcmVtb3RlKTsKKwljcC0+Z2l0X2NtZCA9IDE7CisKKwlpZiAodmVyYm9zaXR5ID49IDApCisJCXByaW50ZihfKCJGZXRjaGluZyAlc1xuIiksIHJlbW90ZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmZXRjaF9mYWlsZWRfdG9fc3RhcnQoc3RydWN0IHN0cmJ1ZiAqb3V0LCB2b2lkICpjYiwgdm9pZCAqdGFza19jYikKK3sKKwlzdHJ1Y3QgcGFyYWxsZWxfZmV0Y2hfc3RhdGUgKnN0YXRlID0gY2I7CisJY29uc3QgY2hhciAqcmVtb3RlID0gdGFza19jYjsKKworCXN0YXRlLT5yZXN1bHQgPSBlcnJvcihfKCJDb3VsZCBub3QgZmV0Y2ggJXMiKSwgcmVtb3RlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZldGNoX2ZpbmlzaGVkKGludCByZXN1bHQsIHN0cnVjdCBzdHJidWYgKm91dCwKKwkJCSAgdm9pZCAqY2IsIHZvaWQgKnRhc2tfY2IpCit7CisJc3RydWN0IHBhcmFsbGVsX2ZldGNoX3N0YXRlICpzdGF0ZSA9IGNiOworCWNvbnN0IGNoYXIgKnJlbW90ZSA9IHRhc2tfY2I7CisKKwlpZiAocmVzdWx0KSB7CisJCXN0cmJ1Zl9hZGRmKG91dCwgXygiY291bGQgbm90IGZldGNoICclcycgKGV4aXQgY29kZTogJWQpXG4iKSwKKwkJCSAgICByZW1vdGUsIHJlc3VsdCk7CisJCXN0YXRlLT5yZXN1bHQgPSAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmZXRjaF9tdWx0aXBsZShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGludCBtYXhfY2hpbGRyZW4pCit7CisJaW50IGksIHJlc3VsdCA9IDA7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJndiA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCWlmICghYXBwZW5kICYmICFkcnlfcnVuKSB7CisJCWludCBlcnJjb2RlID0gdHJ1bmNhdGVfZmV0Y2hfaGVhZCgpOworCQlpZiAoZXJyY29kZSkKKwkJCXJldHVybiBlcnJjb2RlOworCX0KKworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3YsICJmZXRjaCIsICItLWFwcGVuZCIsICItLW5vLWF1dG8tZ2MiLAorCQkJIi0tbm8td3JpdGUtY29tbWl0LWdyYXBoIiwgTlVMTCk7CisJYWRkX29wdGlvbnNfdG9fYXJndigmYXJndik7CisKKwlpZiAobWF4X2NoaWxkcmVuICE9IDEgJiYgbGlzdC0+bnIgIT0gMSkgeworCQlzdHJ1Y3QgcGFyYWxsZWxfZmV0Y2hfc3RhdGUgc3RhdGUgPSB7IGFyZ3YuYXJndiwgbGlzdCwgMCwgMCB9OworCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgIi0tZW5kLW9mLW9wdGlvbnMiKTsKKwkJcmVzdWx0ID0gcnVuX3Byb2Nlc3Nlc19wYXJhbGxlbF90cjIobWF4X2NoaWxkcmVuLAorCQkJCQkJICAgICZmZXRjaF9uZXh0X3JlbW90ZSwKKwkJCQkJCSAgICAmZmV0Y2hfZmFpbGVkX3RvX3N0YXJ0LAorCQkJCQkJICAgICZmZXRjaF9maW5pc2hlZCwKKwkJCQkJCSAgICAmc3RhdGUsCisJCQkJCQkgICAgImZldGNoIiwgInBhcmFsbGVsL2ZldGNoIik7CisKKwkJaWYgKCFyZXN1bHQpCisJCQlyZXN1bHQgPSBzdGF0ZS5yZXN1bHQ7CisJfSBlbHNlCisJCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKSB7CisJCQljb25zdCBjaGFyICpuYW1lID0gbGlzdC0+aXRlbXNbaV0uc3RyaW5nOworCQkJYXJndl9hcnJheV9wdXNoKCZhcmd2LCBuYW1lKTsKKwkJCWlmICh2ZXJib3NpdHkgPj0gMCkKKwkJCQlwcmludGYoXygiRmV0Y2hpbmcgJXNcbiIpLCBuYW1lKTsKKwkJCWlmIChydW5fY29tbWFuZF92X29wdChhcmd2LmFyZ3YsIFJVTl9HSVRfQ01EKSkgeworCQkJCWVycm9yKF8oIkNvdWxkIG5vdCBmZXRjaCAlcyIpLCBuYW1lKTsKKwkJCQlyZXN1bHQgPSAxOworCQkJfQorCQkJYXJndl9hcnJheV9wb3AoJmFyZ3YpOworCQl9CisKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmd2KTsKKwlyZXR1cm4gISFyZXN1bHQ7Cit9CisKKy8qCisgKiBGZXRjaGluZyBmcm9tIHRoZSBwcm9taXNvciByZW1vdGUgc2hvdWxkIHVzZSB0aGUgZ2l2ZW4gZmlsdGVyLXNwZWMKKyAqIG9yIGluaGVyaXQgdGhlIGRlZmF1bHQgZmlsdGVyLXNwZWMgZnJvbSB0aGUgY29uZmlnLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmV0Y2hfb25lX3NldHVwX3BhcnRpYWwoc3RydWN0IHJlbW90ZSAqcmVtb3RlKQoreworCS8qCisJICogRXhwbGljaXQgLS1uby1maWx0ZXIgYXJndW1lbnQgb3ZlcnJpZGVzIGV2ZXJ5dGhpbmcsIHJlZ2FyZGxlc3MKKwkgKiBvZiBhbnkgcHJpb3IgcGFydGlhbCBjbG9uZXMgYW5kIGZldGNoZXMuCisJICovCisJaWYgKGZpbHRlcl9vcHRpb25zLm5vX2ZpbHRlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiBubyBwcmlvciBwYXJ0aWFsIGNsb25lL2ZldGNoIGFuZCB0aGUgY3VycmVudCBmZXRjaCBESUQgTk9UCisJICogcmVxdWVzdCBhIHBhcnRpYWwtZmV0Y2gsIGRvIGEgbm9ybWFsIGZldGNoLgorCSAqLworCWlmICghaGFzX3Byb21pc29yX3JlbW90ZSgpICYmICFmaWx0ZXJfb3B0aW9ucy5jaG9pY2UpCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIHBhcnRpYWwtZmV0Y2ggcmVxdWVzdCwgd2UgZW5hYmxlIHBhcnRpYWwgb24KKwkgKiB0aGlzIHJlcG8gaWYgbm90IGFscmVhZHkgZW5hYmxlZCBhbmQgcmVtZW1iZXIgdGhlIGdpdmVuCisJICogZmlsdGVyLXNwZWMgYXMgdGhlIGRlZmF1bHQgZm9yIHN1YnNlcXVlbnQgZmV0Y2hlcyB0byB0aGlzCisJICogcmVtb3RlLgorCSAqLworCWlmIChmaWx0ZXJfb3B0aW9ucy5jaG9pY2UpIHsKKwkJcGFydGlhbF9jbG9uZV9yZWdpc3RlcihyZW1vdGUtPm5hbWUsICZmaWx0ZXJfb3B0aW9ucyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIERvIGEgcGFydGlhbC1mZXRjaCBmcm9tIHRoZSBwcm9taXNvciByZW1vdGUgdXNpbmcgZWl0aGVyIHRoZQorCSAqIGV4cGxpY2l0bHkgZ2l2ZW4gZmlsdGVyLXNwZWMgb3IgaW5oZXJpdCB0aGUgZmlsdGVyLXNwZWMgZnJvbQorCSAqIHRoZSBjb25maWcuCisJICovCisJaWYgKCFmaWx0ZXJfb3B0aW9ucy5jaG9pY2UpCisJCXBhcnRpYWxfY2xvbmVfZ2V0X2RlZmF1bHRfZmlsdGVyX3NwZWMoJmZpbHRlcl9vcHRpb25zLCByZW1vdGUtPm5hbWUpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBmZXRjaF9vbmUoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGludCBwcnVuZV90YWdzX29rKQoreworCXN0cnVjdCByZWZzcGVjIHJzID0gUkVGU1BFQ19JTklUX0ZFVENIOworCWludCBpOworCWludCBleGl0X2NvZGU7CisJaW50IG1heWJlX3BydW5lX3RhZ3M7CisJaW50IHJlbW90ZV92aWFfY29uZmlnID0gcmVtb3RlX2lzX2NvbmZpZ3VyZWQocmVtb3RlLCAwKTsKKworCWlmICghcmVtb3RlKQorCQlkaWUoXygiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisJCSAgICAicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIpKTsKKworCWd0cmFuc3BvcnQgPSBwcmVwYXJlX3RyYW5zcG9ydChyZW1vdGUsIDEpOworCisJaWYgKHBydW5lIDwgMCkgeworCQkvKiBubyBjb21tYW5kIGxpbmUgcmVxdWVzdCAqLworCQlpZiAoMCA8PSByZW1vdGUtPnBydW5lKQorCQkJcHJ1bmUgPSByZW1vdGUtPnBydW5lOworCQllbHNlIGlmICgwIDw9IGZldGNoX3BydW5lX2NvbmZpZykKKwkJCXBydW5lID0gZmV0Y2hfcHJ1bmVfY29uZmlnOworCQllbHNlCisJCQlwcnVuZSA9IFBSVU5FX0JZX0RFRkFVTFQ7CisJfQorCisJaWYgKHBydW5lX3RhZ3MgPCAwKSB7CisJCS8qIG5vIGNvbW1hbmQgbGluZSByZXF1ZXN0ICovCisJCWlmICgwIDw9IHJlbW90ZS0+cHJ1bmVfdGFncykKKwkJCXBydW5lX3RhZ3MgPSByZW1vdGUtPnBydW5lX3RhZ3M7CisJCWVsc2UgaWYgKDAgPD0gZmV0Y2hfcHJ1bmVfdGFnc19jb25maWcpCisJCQlwcnVuZV90YWdzID0gZmV0Y2hfcHJ1bmVfdGFnc19jb25maWc7CisJCWVsc2UKKwkJCXBydW5lX3RhZ3MgPSBQUlVORV9UQUdTX0JZX0RFRkFVTFQ7CisJfQorCisJbWF5YmVfcHJ1bmVfdGFncyA9IHBydW5lX3RhZ3Nfb2sgJiYgcHJ1bmVfdGFnczsKKwlpZiAobWF5YmVfcHJ1bmVfdGFncyAmJiByZW1vdGVfdmlhX2NvbmZpZykKKwkJcmVmc3BlY19hcHBlbmQoJnJlbW90ZS0+ZmV0Y2gsIFRBR19SRUZTUEVDKTsKKworCWlmIChtYXliZV9wcnVuZV90YWdzICYmIChhcmdjIHx8ICFyZW1vdGVfdmlhX2NvbmZpZykpCisJCXJlZnNwZWNfYXBwZW5kKCZycywgVEFHX1JFRlNQRUMpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAidGFnIikpIHsKKwkJCWNoYXIgKnRhZzsKKwkJCWkrKzsKKwkJCWlmIChpID49IGFyZ2MpCisJCQkJZGllKF8oIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iKSk7CisKKwkJCXRhZyA9IHhzdHJmbXQoInJlZnMvdGFncy8lczpyZWZzL3RhZ3MvJXMiLAorCQkJCSAgICAgIGFyZ3ZbaV0sIGFyZ3ZbaV0pOworCQkJcmVmc3BlY19hcHBlbmQoJnJzLCB0YWcpOworCQkJZnJlZSh0YWcpOworCQl9IGVsc2UgeworCQkJcmVmc3BlY19hcHBlbmQoJnJzLCBhcmd2W2ldKTsKKwkJfQorCX0KKworCWlmIChzZXJ2ZXJfb3B0aW9ucy5ucikKKwkJZ3RyYW5zcG9ydC0+c2VydmVyX29wdGlvbnMgPSAmc2VydmVyX29wdGlvbnM7CisKKwlzaWdjaGFpbl9wdXNoX2NvbW1vbih1bmxvY2tfcGFja19vbl9zaWduYWwpOworCWF0ZXhpdCh1bmxvY2tfcGFjayk7CisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKwlleGl0X2NvZGUgPSBkb19mZXRjaChndHJhbnNwb3J0LCAmcnMpOworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKwlyZWZzcGVjX2NsZWFyKCZycyk7CisJdHJhbnNwb3J0X2Rpc2Nvbm5lY3QoZ3RyYW5zcG9ydCk7CisJZ3RyYW5zcG9ydCA9IE5VTEw7CisJcmV0dXJuIGV4aXRfY29kZTsKK30KKworaW50IGNtZF9mZXRjaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZSA9IE5VTEw7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IHBydW5lX3RhZ3Nfb2sgPSAxOworCisJcGFja2V0X3RyYWNlX2lkZW50aXR5KCJmZXRjaCIpOworCisJLyogUmVjb3JkIHRoZSBjb21tYW5kIGxpbmUgZm9yIHRoZSByZWZsb2cgKi8KKwlzdHJidWZfYWRkc3RyKCZkZWZhdWx0X3JsYSwgImZldGNoIik7CisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKwkJc3RyYnVmX2FkZGYoJmRlZmF1bHRfcmxhLCAiICVzIiwgYXJndltpXSk7CisKKwlmZXRjaF9jb25maWdfZnJvbV9naXRtb2R1bGVzKCZzdWJtb2R1bGVfZmV0Y2hfam9ic19jb25maWcsCisJCQkJICAgICAmcmVjdXJzZV9zdWJtb2R1bGVzKTsKKwlnaXRfY29uZmlnKGdpdF9mZXRjaF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LAorCQkJICAgICBidWlsdGluX2ZldGNoX29wdGlvbnMsIGJ1aWx0aW5fZmV0Y2hfdXNhZ2UsIDApOworCisJaWYgKGRlZXBlbl9yZWxhdGl2ZSkgeworCQlpZiAoZGVlcGVuX3JlbGF0aXZlIDwgMCkKKwkJCWRpZShfKCJOZWdhdGl2ZSBkZXB0aCBpbiAtLWRlZXBlbiBpcyBub3Qgc3VwcG9ydGVkIikpOworCQlpZiAoZGVwdGgpCisJCQlkaWUoXygiLS1kZWVwZW4gYW5kIC0tZGVwdGggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIpKTsKKwkJZGVwdGggPSB4c3RyZm10KCIlZCIsIGRlZXBlbl9yZWxhdGl2ZSk7CisJfQorCWlmICh1bnNoYWxsb3cpIHsKKwkJaWYgKGRlcHRoKQorCQkJZGllKF8oIi0tZGVwdGggYW5kIC0tdW5zaGFsbG93IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIikpOworCQllbHNlIGlmICghaXNfcmVwb3NpdG9yeV9zaGFsbG93KHRoZV9yZXBvc2l0b3J5KSkKKwkJCWRpZShfKCItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIpKTsKKwkJZWxzZQorCQkJZGVwdGggPSB4c3RyZm10KCIlZCIsIElORklOSVRFX0RFUFRIKTsKKwl9CisKKwkvKiBubyBuZWVkIHRvIGJlIHN0cmljdCwgdHJhbnNwb3J0X3NldF9vcHRpb24oKSB3aWxsIHZhbGlkYXRlIGl0IGFnYWluICovCisJaWYgKGRlcHRoICYmIGF0b2koZGVwdGgpIDwgMSkKKwkJZGllKF8oImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIpLCBkZXB0aCk7CisJaWYgKGRlcHRoIHx8IGRlZXBlbl9zaW5jZSB8fCBkZWVwZW5fbm90Lm5yKQorCQlkZWVwZW4gPSAxOworCisJaWYgKGZpbHRlcl9vcHRpb25zLmNob2ljZSAmJiAhaGFzX3Byb21pc29yX3JlbW90ZSgpKQorCQlkaWUoIi0tZmlsdGVyIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiBleHRlbnNpb25zLnBhcnRpYWxDbG9uZSBpcyBzZXQiKTsKKworCWlmIChhbGwpIHsKKwkJaWYgKGFyZ2MgPT0gMSkKKwkJCWRpZShfKCJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIpKTsKKwkJZWxzZSBpZiAoYXJnYyA+IDEpCisJCQlkaWUoXygiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIikpOworCQkodm9pZCkgZm9yX2VhY2hfcmVtb3RlKGdldF9vbmVfcmVtb3RlX2Zvcl9mZXRjaCwgJmxpc3QpOworCX0gZWxzZSBpZiAoYXJnYyA9PSAwKSB7CisJCS8qIE5vIGFyZ3VtZW50cyAtLSB1c2UgZGVmYXVsdCByZW1vdGUgKi8KKwkJcmVtb3RlID0gcmVtb3RlX2dldChOVUxMKTsKKwl9IGVsc2UgaWYgKG11bHRpcGxlKSB7CisJCS8qIEFsbCBhcmd1bWVudHMgYXJlIGFzc3VtZWQgdG8gYmUgcmVtb3RlcyBvciBncm91cHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJCWlmICghYWRkX3JlbW90ZV9vcl9ncm91cChhcmd2W2ldLCAmbGlzdCkpCisJCQkJZGllKF8oIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiKSwgYXJndltpXSk7CisJfSBlbHNlIHsKKwkJLyogU2luZ2xlIHJlbW90ZSBvciBncm91cCAqLworCQkodm9pZCkgYWRkX3JlbW90ZV9vcl9ncm91cChhcmd2WzBdLCAmbGlzdCk7CisJCWlmIChsaXN0Lm5yID4gMSkgeworCQkJLyogTW9yZSB0aGFuIG9uZSByZW1vdGUgKi8KKwkJCWlmIChhcmdjID4gMSkKKwkJCQlkaWUoXygiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIikpOworCQl9IGVsc2UgeworCQkJLyogWmVybyBvciBvbmUgcmVtb3RlcyAqLworCQkJcmVtb3RlID0gcmVtb3RlX2dldChhcmd2WzBdKTsKKwkJCXBydW5lX3RhZ3Nfb2sgPSAoYXJnYyA9PSAxKTsKKwkJCWFyZ2MtLTsKKwkJCWFyZ3YrKzsKKwkJfQorCX0KKworCWlmIChyZW1vdGUpIHsKKwkJaWYgKGZpbHRlcl9vcHRpb25zLmNob2ljZSB8fCBoYXNfcHJvbWlzb3JfcmVtb3RlKCkpCisJCQlmZXRjaF9vbmVfc2V0dXBfcGFydGlhbChyZW1vdGUpOworCQlyZXN1bHQgPSBmZXRjaF9vbmUocmVtb3RlLCBhcmdjLCBhcmd2LCBwcnVuZV90YWdzX29rKTsKKwl9IGVsc2UgeworCQlpbnQgbWF4X2NoaWxkcmVuID0gbWF4X2pvYnM7CisKKwkJaWYgKGZpbHRlcl9vcHRpb25zLmNob2ljZSkKKwkJCWRpZShfKCItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSAiCisJCQkgICAgICAiY29uZmlndXJlZCBpbiBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSIpKTsKKworCQlpZiAobWF4X2NoaWxkcmVuIDwgMCkKKwkJCW1heF9jaGlsZHJlbiA9IGZldGNoX3BhcmFsbGVsX2NvbmZpZzsKKworCQkvKiBUT0RPIHNob3VsZCB0aGlzIGFsc28gZGllIGlmIHdlIGhhdmUgYSBwcmV2aW91cyBwYXJ0aWFsLWNsb25lPyAqLworCQlyZXN1bHQgPSBmZXRjaF9tdWx0aXBsZSgmbGlzdCwgbWF4X2NoaWxkcmVuKTsKKwl9CisKKwlpZiAoIXJlc3VsdCAmJiAocmVjdXJzZV9zdWJtb2R1bGVzICE9IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkYpKSB7CisJCXN0cnVjdCBhcmd2X2FycmF5IG9wdGlvbnMgPSBBUkdWX0FSUkFZX0lOSVQ7CisJCWludCBtYXhfY2hpbGRyZW4gPSBtYXhfam9iczsKKworCQlpZiAobWF4X2NoaWxkcmVuIDwgMCkKKwkJCW1heF9jaGlsZHJlbiA9IHN1Ym1vZHVsZV9mZXRjaF9qb2JzX2NvbmZpZzsKKwkJaWYgKG1heF9jaGlsZHJlbiA8IDApCisJCQltYXhfY2hpbGRyZW4gPSBmZXRjaF9wYXJhbGxlbF9jb25maWc7CisKKwkJYWRkX29wdGlvbnNfdG9fYXJndigmb3B0aW9ucyk7CisJCXJlc3VsdCA9IGZldGNoX3BvcHVsYXRlZF9zdWJtb2R1bGVzKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJICAgICZvcHRpb25zLAorCQkJCQkJICAgIHN1Ym1vZHVsZV9wcmVmaXgsCisJCQkJCQkgICAgcmVjdXJzZV9zdWJtb2R1bGVzLAorCQkJCQkJICAgIHJlY3Vyc2Vfc3VibW9kdWxlc19kZWZhdWx0LAorCQkJCQkJICAgIHZlcmJvc2l0eSA8IDAsCisJCQkJCQkgICAgbWF4X2NoaWxkcmVuKTsKKwkJYXJndl9hcnJheV9jbGVhcigmb3B0aW9ucyk7CisJfQorCisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDApOworCisJcHJlcGFyZV9yZXBvX3NldHRpbmdzKHRoZV9yZXBvc2l0b3J5KTsKKwlpZiAoZmV0Y2hfd3JpdGVfY29tbWl0X2dyYXBoID4gMCB8fAorCSAgICAoZmV0Y2hfd3JpdGVfY29tbWl0X2dyYXBoIDwgMCAmJgorCSAgICAgdGhlX3JlcG9zaXRvcnktPnNldHRpbmdzLmZldGNoX3dyaXRlX2NvbW1pdF9ncmFwaCkpIHsKKwkJaW50IGNvbW1pdF9ncmFwaF9mbGFncyA9IENPTU1JVF9HUkFQSF9XUklURV9TUExJVDsKKworCQlpZiAocHJvZ3Jlc3MpCisJCQljb21taXRfZ3JhcGhfZmxhZ3MgfD0gQ09NTUlUX0dSQVBIX1dSSVRFX1BST0dSRVNTOworCisJCXdyaXRlX2NvbW1pdF9ncmFwaF9yZWFjaGFibGUodGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPm9kYiwKKwkJCQkJICAgICBjb21taXRfZ3JhcGhfZmxhZ3MsCisJCQkJCSAgICAgTlVMTCk7CisJfQorCisJY2xvc2Vfb2JqZWN0X3N0b3JlKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKKworCWlmIChlbmFibGVfYXV0b19nYykKKwkJcnVuX2F1dG9fZ2ModmVyYm9zaXR5IDwgMCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmMgYi9idWlsdGluL2ZtdC1tZXJnZS1tc2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGE4Njk5Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmMKQEAgLTAsMCArMSw2NSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJmbXQtbWVyZ2UtbXNnLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZtdF9tZXJnZV9tc2dfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIpLAorCU5VTEwKK307CisKK2ludCBjbWRfZm10X21lcmdlX21zZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICppbnBhdGggPSBOVUxMOworCWNvbnN0IGNoYXIgKm1lc3NhZ2UgPSBOVUxMOworCWludCBzaG9ydGxvZ19sZW4gPSAtMTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJeyBPUFRJT05fSU5URUdFUiwgMCwgImxvZyIsICZzaG9ydGxvZ19sZW4sIE5fKCJuIiksCisJCSAgTl8oInBvcHVsYXRlIGxvZyB3aXRoIGF0IG1vc3QgPG4+IGVudHJpZXMgZnJvbSBzaG9ydGxvZyIpLAorCQkgIFBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIERFRkFVTFRfTUVSR0VfTE9HX0xFTiB9LAorCQl7IE9QVElPTl9JTlRFR0VSLCAwLCAic3VtbWFyeSIsICZzaG9ydGxvZ19sZW4sIE5fKCJuIiksCisJCSAgTl8oImFsaWFzIGZvciAtLWxvZyAoZGVwcmVjYXRlZCkiKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX0hJRERFTiwgTlVMTCwKKwkJICBERUZBVUxUX01FUkdFX0xPR19MRU4gfSwKKwkJT1BUX1NUUklORygnbScsICJtZXNzYWdlIiwgJm1lc3NhZ2UsIE5fKCJ0ZXh0IiksCisJCQlOXygidXNlIDx0ZXh0PiBhcyBzdGFydCBvZiBtZXNzYWdlIikpLAorCQlPUFRfRklMRU5BTUUoJ0YnLCAiZmlsZSIsICZpbnBhdGgsIE5fKCJmaWxlIHRvIHJlYWQgZnJvbSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCUZJTEUgKmluID0gc3RkaW47CisJc3RydWN0IHN0cmJ1ZiBpbnB1dCA9IFNUUkJVRl9JTklULCBvdXRwdXQgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCXN0cnVjdCBmbXRfbWVyZ2VfbXNnX29wdHMgb3B0czsKKworCWdpdF9jb25maWcoZm10X21lcmdlX21zZ19jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZm10X21lcmdlX21zZ191c2FnZSwKKwkJCSAgICAgMCk7CisJaWYgKGFyZ2MgPiAwKQorCQl1c2FnZV93aXRoX29wdGlvbnMoZm10X21lcmdlX21zZ191c2FnZSwgb3B0aW9ucyk7CisJaWYgKHNob3J0bG9nX2xlbiA8IDApCisJCXNob3J0bG9nX2xlbiA9IChtZXJnZV9sb2dfY29uZmlnID4gMCkgPyBtZXJnZV9sb2dfY29uZmlnIDogMDsKKworCWlmIChpbnBhdGggJiYgc3RyY21wKGlucGF0aCwgIi0iKSkgeworCQlpbiA9IGZvcGVuKGlucGF0aCwgInIiKTsKKwkJaWYgKCFpbikKKwkJCWRpZV9lcnJubygiY2Fubm90IG9wZW4gJyVzJyIsIGlucGF0aCk7CisJfQorCisJaWYgKHN0cmJ1Zl9yZWFkKCZpbnB1dCwgZmlsZW5vKGluKSwgMCkgPCAwKQorCQlkaWVfZXJybm8oImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUiKTsKKworCWlmIChtZXNzYWdlKQorCQlzdHJidWZfYWRkc3RyKCZvdXRwdXQsIG1lc3NhZ2UpOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuYWRkX3RpdGxlID0gIW1lc3NhZ2U7CisJb3B0cy5jcmVkaXRfcGVvcGxlID0gMTsKKwlvcHRzLnNob3J0bG9nX2xlbiA9IHNob3J0bG9nX2xlbjsKKworCXJldCA9IGZtdF9tZXJnZV9tc2coJmlucHV0LCAmb3V0cHV0LCAmb3B0cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwl3cml0ZV9pbl9mdWxsKFNURE9VVF9GSUxFTk8sIG91dHB1dC5idWYsIG91dHB1dC5sZW4pOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mb3ItZWFjaC1yZWYuYyBiL2J1aWx0aW4vZm9yLWVhY2gtcmVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc0ODllNAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZm9yLWVhY2gtcmVmLmMKQEAgLTAsMCArMSw4NyBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicmVmLWZpbHRlci5oIgorCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGZvcl9lYWNoX3JlZl91c2FnZVtdID0geworCU5fKCJnaXQgZm9yLWVhY2gtcmVmIFs8b3B0aW9ucz5dIFs8cGF0dGVybj5dIiksCisJTl8oImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDxvYmplY3Q+XSIpLAorCU5fKCJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iKSwKKwlOXygiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPGNvbW1pdD5dXSBbLS1uby1jb250YWlucyBbPGNvbW1pdD5dXSIpLAorCU5VTEwKK307CisKK2ludCBjbWRfZm9yX2VhY2hfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCXN0cnVjdCByZWZfc29ydGluZyAqc29ydGluZyA9IE5VTEwsICoqc29ydGluZ190YWlsID0gJnNvcnRpbmc7CisJaW50IG1heGNvdW50ID0gMCwgaWNhc2UgPSAwOworCXN0cnVjdCByZWZfYXJyYXkgYXJyYXk7CisJc3RydWN0IHJlZl9maWx0ZXIgZmlsdGVyOworCXN0cnVjdCByZWZfZm9ybWF0IGZvcm1hdCA9IFJFRl9GT1JNQVRfSU5JVDsKKworCXN0cnVjdCBvcHRpb24gb3B0c1tdID0geworCQlPUFRfQklUKCdzJywgInNoZWxsIiwgJmZvcm1hdC5xdW90ZV9zdHlsZSwKKwkJCU5fKCJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIpLCBRVU9URV9TSEVMTCksCisJCU9QVF9CSVQoJ3AnLCAicGVybCIsICAmZm9ybWF0LnF1b3RlX3N0eWxlLAorCQkJTl8oInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIpLCBRVU9URV9QRVJMKSwKKwkJT1BUX0JJVCgwICwgInB5dGhvbiIsICZmb3JtYXQucXVvdGVfc3R5bGUsCisJCQlOXygicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iKSwgUVVPVEVfUFlUSE9OKSwKKwkJT1BUX0JJVCgwICwgInRjbCIsICAmZm9ybWF0LnF1b3RlX3N0eWxlLAorCQkJTl8oInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgVGNsIiksIFFVT1RFX1RDTCksCisKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0lOVEVHRVIoIDAgLCAiY291bnQiLCAmbWF4Y291bnQsIE5fKCJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIpKSwKKwkJT1BUX1NUUklORyggIDAgLCAiZm9ybWF0IiwgJmZvcm1hdC5mb3JtYXQsIE5fKCJmb3JtYXQiKSwgTl8oImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiKSksCisJCU9QVF9fQ09MT1IoJmZvcm1hdC51c2VfY29sb3IsIE5fKCJyZXNwZWN0IGZvcm1hdCBjb2xvcnMiKSksCisJCU9QVF9SRUZfU09SVChzb3J0aW5nX3RhaWwpLAorCQlPUFRfQ0FMTEJBQ0soMCwgInBvaW50cy1hdCIsICZmaWx0ZXIucG9pbnRzX2F0LAorCQkJICAgICBOXygib2JqZWN0IiksIE5fKCJwcmludCBvbmx5IHJlZnMgd2hpY2ggcG9pbnRzIGF0IHRoZSBnaXZlbiBvYmplY3QiKSwKKwkJCSAgICAgcGFyc2Vfb3B0X29iamVjdF9uYW1lKSwKKwkJT1BUX01FUkdFRCgmZmlsdGVyLCBOXygicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG1lcmdlZCIpKSwKKwkJT1BUX05PX01FUkdFRCgmZmlsdGVyLCBOXygicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG5vdCBtZXJnZWQiKSksCisJCU9QVF9DT05UQUlOUygmZmlsdGVyLndpdGhfY29tbWl0LCBOXygicHJpbnQgb25seSByZWZzIHdoaWNoIGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX05PX0NPTlRBSU5TKCZmaWx0ZXIubm9fY29tbWl0LCBOXygicHJpbnQgb25seSByZWZzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX0JPT0woMCwgImlnbm9yZS1jYXNlIiwgJmljYXNlLCBOXygic29ydGluZyBhbmQgZmlsdGVyaW5nIGFyZSBjYXNlIGluc2Vuc2l0aXZlIikpLAorCQlPUFRfRU5EKCksCisJfTsKKworCW1lbXNldCgmYXJyYXksIDAsIHNpemVvZihhcnJheSkpOworCW1lbXNldCgmZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7CisKKwlmb3JtYXQuZm9ybWF0ID0gIiUob2JqZWN0bmFtZSkgJShvYmplY3R0eXBlKVx0JShyZWZuYW1lKSI7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgZm9yX2VhY2hfcmVmX3VzYWdlLCAwKTsKKwlpZiAobWF4Y291bnQgPCAwKSB7CisJCWVycm9yKCJpbnZhbGlkIC0tY291bnQgYXJndW1lbnQ6IGAlZCciLCBtYXhjb3VudCk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhmb3JfZWFjaF9yZWZfdXNhZ2UsIG9wdHMpOworCX0KKwlpZiAoSEFTX01VTFRJX0JJVFMoZm9ybWF0LnF1b3RlX3N0eWxlKSkgeworCQllcnJvcigibW9yZSB0aGFuIG9uZSBxdW90aW5nIHN0eWxlPyIpOworCQl1c2FnZV93aXRoX29wdGlvbnMoZm9yX2VhY2hfcmVmX3VzYWdlLCBvcHRzKTsKKwl9CisJaWYgKHZlcmlmeV9yZWZfZm9ybWF0KCZmb3JtYXQpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoZm9yX2VhY2hfcmVmX3VzYWdlLCBvcHRzKTsKKworCWlmICghc29ydGluZykKKwkJc29ydGluZyA9IHJlZl9kZWZhdWx0X3NvcnRpbmcoKTsKKwlyZWZfc29ydGluZ19pY2FzZV9hbGwoc29ydGluZywgaWNhc2UpOworCWZpbHRlci5pZ25vcmVfY2FzZSA9IGljYXNlOworCisJZmlsdGVyLm5hbWVfcGF0dGVybnMgPSBhcmd2OworCWZpbHRlci5tYXRjaF9hc19wYXRoID0gMTsKKwlmaWx0ZXJfcmVmcygmYXJyYXksICZmaWx0ZXIsIEZJTFRFUl9SRUZTX0FMTCB8IEZJTFRFUl9SRUZTX0lOQ0xVREVfQlJPS0VOKTsKKwlyZWZfYXJyYXlfc29ydChzb3J0aW5nLCAmYXJyYXkpOworCisJaWYgKCFtYXhjb3VudCB8fCBhcnJheS5uciA8IG1heGNvdW50KQorCQltYXhjb3VudCA9IGFycmF5Lm5yOworCWZvciAoaSA9IDA7IGkgPCBtYXhjb3VudDsgaSsrKQorCQlzaG93X3JlZl9hcnJheV9pdGVtKGFycmF5Lml0ZW1zW2ldLCAmZm9ybWF0KTsKKwlyZWZfYXJyYXlfY2xlYXIoJmFycmF5KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZnNjay5jIGIvYnVpbHRpbi9mc2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxMzc5NAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZnNjay5jCkBAIC0wLDAgKzEsOTYwIEBACisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJmc2NrLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAic3RyZWFtaW5nLmgiCisjaW5jbHVkZSAiZGVjb3JhdGUuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKworI2RlZmluZSBSRUFDSEFCTEUgMHgwMDAxCisjZGVmaW5lIFNFRU4gICAgICAweDAwMDIKKyNkZWZpbmUgSEFTX09CSiAgIDB4MDAwNAorLyogVGhpcyBmbGFnIGlzIHNldCBpZiBzb21ldGhpbmcgcG9pbnRzIHRvIHRoaXMgb2JqZWN0LiAqLworI2RlZmluZSBVU0VEICAgICAgMHgwMDA4CisKK3N0YXRpYyBpbnQgc2hvd19yb290Oworc3RhdGljIGludCBzaG93X3RhZ3M7CitzdGF0aWMgaW50IHNob3dfdW5yZWFjaGFibGU7CitzdGF0aWMgaW50IGluY2x1ZGVfcmVmbG9ncyA9IDE7CitzdGF0aWMgaW50IGNoZWNrX2Z1bGwgPSAxOworc3RhdGljIGludCBjb25uZWN0aXZpdHlfb25seTsKK3N0YXRpYyBpbnQgY2hlY2tfc3RyaWN0Oworc3RhdGljIGludCBrZWVwX2NhY2hlX29iamVjdHM7CitzdGF0aWMgc3RydWN0IGZzY2tfb3B0aW9ucyBmc2NrX3dhbGtfb3B0aW9ucyA9IEZTQ0tfT1BUSU9OU19ERUZBVUxUOworc3RhdGljIHN0cnVjdCBmc2NrX29wdGlvbnMgZnNja19vYmpfb3B0aW9ucyA9IEZTQ0tfT1BUSU9OU19ERUZBVUxUOworc3RhdGljIGludCBlcnJvcnNfZm91bmQ7CitzdGF0aWMgaW50IHdyaXRlX2xvc3RfYW5kX2ZvdW5kOworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCBzaG93X3Byb2dyZXNzID0gLTE7CitzdGF0aWMgaW50IHNob3dfZGFuZ2xpbmcgPSAxOworc3RhdGljIGludCBuYW1lX29iamVjdHM7CisjZGVmaW5lIEVSUk9SX09CSkVDVCAwMQorI2RlZmluZSBFUlJPUl9SRUFDSEFCTEUgMDIKKyNkZWZpbmUgRVJST1JfUEFDSyAwNAorI2RlZmluZSBFUlJPUl9SRUZTIDAxMAorI2RlZmluZSBFUlJPUl9DT01NSVRfR1JBUEggMDIwCisKK3N0YXRpYyBjb25zdCBjaGFyICpkZXNjcmliZV9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXJldHVybiBmc2NrX2Rlc2NyaWJlX29iamVjdCgmZnNja193YWxrX29wdGlvbnMsIG9pZCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwcmludGFibGVfdHlwZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICBlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJY29uc3QgY2hhciAqcmV0OworCisJaWYgKHR5cGUgPT0gT0JKX05PTkUpCisJCXR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksIG9pZCwgTlVMTCk7CisKKwlyZXQgPSB0eXBlX25hbWUodHlwZSk7CisJaWYgKCFyZXQpCisJCXJldCA9IF8oInVua25vd24iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZnNja19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKHN0cmNtcCh2YXIsICJmc2NrLnNraXBsaXN0IikgPT0gMCkgeworCQljb25zdCBjaGFyICpwYXRoOworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKGdpdF9jb25maWdfcGF0aG5hbWUoJnBhdGgsIHZhciwgdmFsdWUpKQorCQkJcmV0dXJuIDE7CisJCXN0cmJ1Zl9hZGRmKCZzYiwgInNraXBsaXN0PSVzIiwgcGF0aCk7CisJCWZyZWUoKGNoYXIgKilwYXRoKTsKKwkJZnNja19zZXRfbXNnX3R5cGVzKCZmc2NrX29ial9vcHRpb25zLCBzYi5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2tpcF9wcmVmaXgodmFyLCAiZnNjay4iLCAmdmFyKSkgeworCQlmc2NrX3NldF9tc2dfdHlwZSgmZnNja19vYmpfb3B0aW9ucywgdmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IG9iamVycm9yKHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqZXJyKQoreworCWVycm9yc19mb3VuZCB8PSBFUlJPUl9PQkpFQ1Q7CisJLyogVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPiAqLworCWZwcmludGZfbG4oc3RkZXJyLCBfKCJlcnJvciBpbiAlcyAlczogJXMiKSwKKwkJICAgcHJpbnRhYmxlX3R5cGUoJm9iai0+b2lkLCBvYmotPnR5cGUpLAorCQkgICBkZXNjcmliZV9vYmplY3QoJm9iai0+b2lkKSwgZXJyKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZnNja19lcnJvcl9mdW5jKHN0cnVjdCBmc2NrX29wdGlvbnMgKm8sCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICBlbnVtIG9iamVjdF90eXBlIG9iamVjdF90eXBlLAorCQkJICAgaW50IG1zZ190eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKQoreworCXN3aXRjaCAobXNnX3R5cGUpIHsKKwljYXNlIEZTQ0tfV0FSTjoKKwkJLyogVFJBTlNMQVRPUlM6IGUuZy4gd2FybmluZyBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+ICovCisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJ3YXJuaW5nIGluICVzICVzOiAlcyIpLAorCQkJICAgcHJpbnRhYmxlX3R5cGUob2lkLCBvYmplY3RfdHlwZSksCisJCQkgICBkZXNjcmliZV9vYmplY3Qob2lkKSwgbWVzc2FnZSk7CisJCXJldHVybiAwOworCWNhc2UgRlNDS19FUlJPUjoKKwkJLyogVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPiAqLworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZXJyb3IgaW4gJXMgJXM6ICVzIiksCisJCQkgICBwcmludGFibGVfdHlwZShvaWQsIG9iamVjdF90eXBlKSwKKwkJCSAgIGRlc2NyaWJlX29iamVjdChvaWQpLCBtZXNzYWdlKTsKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJQlVHKCIlZCAoRlNDS19JR05PUkU/KSBzaG91bGQgbmV2ZXIgdHJpZ2dlciB0aGlzIGNhbGxiYWNrIiwKKwkJICAgIG1zZ190eXBlKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2FycmF5IHBlbmRpbmc7CisKK3N0YXRpYyBpbnQgbWFya19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpwYXJlbnQgPSBkYXRhOworCisJLyoKKwkgKiBUaGUgb25seSBjYXNlIGRhdGEgaXMgTlVMTCBvciB0eXBlIGlzIE9CSl9BTlkgaXMgd2hlbgorCSAqIG1hcmtfb2JqZWN0X3JlYWNoYWJsZSgpIGNhbGxzIHVzLiAgQWxsIHRoZSBjYWxsZXJzIG9mCisJICogdGhhdCBmdW5jdGlvbiBoYXMgbm9uLU5VTEwgb2JqIGhlbmNlIC4uLgorCSAqLworCWlmICghb2JqKSB7CisJCS8qIC4uLiB0aGVzZSByZWZlcmVuY2VzIHRvIHBhcmVudC0+ZmxkIGFyZSBzYWZlIGhlcmUgKi8KKwkJcHJpbnRmX2xuKF8oImJyb2tlbiBsaW5rIGZyb20gJTdzICVzIiksCisJCQkgIHByaW50YWJsZV90eXBlKCZwYXJlbnQtPm9pZCwgcGFyZW50LT50eXBlKSwKKwkJCSAgZGVzY3JpYmVfb2JqZWN0KCZwYXJlbnQtPm9pZCkpOworCQlwcmludGZfbG4oXygiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXMiKSwKKwkJCSAgKHR5cGUgPT0gT0JKX0FOWSA/IF8oInVua25vd24iKSA6IHR5cGVfbmFtZSh0eXBlKSksCisJCQkgIF8oInVua25vd24iKSk7CisJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUFDSEFCTEU7CisJCXJldHVybiAxOworCX0KKworCWlmICh0eXBlICE9IE9CSl9BTlkgJiYgb2JqLT50eXBlICE9IHR5cGUpCisJCS8qIC4uLiBhbmQgdGhlIHJlZmVyZW5jZSB0byBwYXJlbnQgaXMgc2FmZSBoZXJlICovCisJCW9iamVycm9yKHBhcmVudCwgXygid3Jvbmcgb2JqZWN0IHR5cGUgaW4gbGluayIpKTsKKworCWlmIChvYmotPmZsYWdzICYgUkVBQ0hBQkxFKQorCQlyZXR1cm4gMDsKKwlvYmotPmZsYWdzIHw9IFJFQUNIQUJMRTsKKworCWlmIChpc19wcm9taXNvcl9vYmplY3QoJm9iai0+b2lkKSkKKwkJLyoKKwkJICogRnVydGhlciByZWN1cnNpb24gZG9lcyBub3QgbmVlZCB0byBiZSBwZXJmb3JtZWQgb24gdGhpcworCQkgKiBvYmplY3Qgc2luY2UgaXQgaXMgYSBwcm9taXNvciBvYmplY3QgKHNvIGl0IGRvZXMgbm90IG5lZWQgdG8KKwkJICogYmUgYWRkZWQgdG8gInBlbmRpbmciKS4KKwkJICovCisJCXJldHVybiAwOworCisJaWYgKCEob2JqLT5mbGFncyAmIEhBU19PQkopKSB7CisJCWlmIChwYXJlbnQgJiYgIWhhc19vYmplY3RfZmlsZSgmb2JqLT5vaWQpKSB7CisJCQlwcmludGZfbG4oXygiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXNcbiIKKwkJCQkgICAgIiAgICAgICAgICAgICAgdG8gJTdzICVzIiksCisJCQkJICBwcmludGFibGVfdHlwZSgmcGFyZW50LT5vaWQsIHBhcmVudC0+dHlwZSksCisJCQkJICBkZXNjcmliZV9vYmplY3QoJnBhcmVudC0+b2lkKSwKKwkJCQkgIHByaW50YWJsZV90eXBlKCZvYmotPm9pZCwgb2JqLT50eXBlKSwKKwkJCQkgIGRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpKTsKKwkJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUFDSEFCTEU7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCisJYWRkX29iamVjdF9hcnJheShvYmosIE5VTEwsICZwZW5kaW5nKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWFya19vYmplY3RfcmVhY2hhYmxlKHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwltYXJrX29iamVjdChvYmosIE9CSl9BTlksIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW50IHRyYXZlcnNlX29uZV9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqKQoreworCWludCByZXN1bHQgPSBmc2NrX3dhbGsob2JqLCBvYmosICZmc2NrX3dhbGtfb3B0aW9ucyk7CisKKwlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKSB7CisJCXN0cnVjdCB0cmVlICp0cmVlID0gKHN0cnVjdCB0cmVlICopb2JqOworCQlmcmVlX3RyZWVfYnVmZmVyKHRyZWUpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHRyYXZlcnNlX3JlYWNoYWJsZSh2b2lkKQoreworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCXVuc2lnbmVkIGludCBuciA9IDA7CisJaW50IHJlc3VsdCA9IDA7CisJaWYgKHNob3dfcHJvZ3Jlc3MpCisJCXByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcyhfKCJDaGVja2luZyBjb25uZWN0aXZpdHkiKSwgMCk7CisJd2hpbGUgKHBlbmRpbmcubnIpIHsKKwkJcmVzdWx0IHw9IHRyYXZlcnNlX29uZV9vYmplY3Qob2JqZWN0X2FycmF5X3BvcCgmcGVuZGluZykpOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCArK25yKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCXJldHVybiAhIXJlc3VsdDsKK30KKworc3RhdGljIGludCBtYXJrX3VzZWQoc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpZiAoIW9iaikKKwkJcmV0dXJuIDE7CisJb2JqLT5mbGFncyB8PSBVU0VEOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtYXJrX3VucmVhY2hhYmxlX3JlZmVyZW50cyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IGZzY2tfb3B0aW9ucyBvcHRpb25zID0gRlNDS19PUFRJT05TX0RFRkFVTFQ7CisJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKworCWlmICghb2JqIHx8ICEob2JqLT5mbGFncyAmIEhBU19PQkopKQorCQlyZXR1cm47IC8qIG5vdCBwYXJ0IG9mIG91ciBvcmlnaW5hbCBzZXQgKi8KKwlpZiAob2JqLT5mbGFncyAmIFJFQUNIQUJMRSkKKwkJcmV0dXJuOyAvKiByZWFjaGFibGUgb2JqZWN0cyBhbHJlYWR5IHRyYXZlcnNlZCAqLworCisJLyoKKwkgKiBBdm9pZCBwYXNzaW5nIE9CSl9OT05FIHRvIGZzY2tfd2Fsaywgd2hpY2ggd2lsbCBwYXJzZSB0aGUgb2JqZWN0CisJICogKGFuZCB3ZSB3YW50IHRvIGF2b2lkIHBhcnNpbmcgYmxvYnMpLgorCSAqLworCWlmIChvYmotPnR5cGUgPT0gT0JKX05PTkUpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSZvYmotPm9pZCwgTlVMTCk7CisJCWlmICh0eXBlID4gMCkKKwkJCW9iamVjdF9hc190eXBlKHRoZV9yZXBvc2l0b3J5LCBvYmosIHR5cGUsIDApOworCX0KKworCW9wdGlvbnMud2FsayA9IG1hcmtfdXNlZDsKKwlmc2NrX3dhbGsob2JqLCBOVUxMLCAmb3B0aW9ucyk7Cit9CisKK3N0YXRpYyBpbnQgbWFya19sb29zZV91bnJlYWNoYWJsZV9yZWZlcmVudHMoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQkgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJICAgIHZvaWQgKmRhdGEpCit7CisJbWFya191bnJlYWNoYWJsZV9yZWZlcmVudHMob2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXJrX3BhY2tlZF91bnJlYWNoYWJsZV9yZWZlcmVudHMoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQkgICAgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrLAorCQkJCQkgICAgIHVpbnQzMl90IHBvcywKKwkJCQkJICAgICB2b2lkICpkYXRhKQoreworCW1hcmtfdW5yZWFjaGFibGVfcmVmZXJlbnRzKG9pZCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayBhIHNpbmdsZSByZWFjaGFibGUgb2JqZWN0CisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX3JlYWNoYWJsZV9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqKQoreworCS8qCisJICogV2Ugb2J2aW91c2x5IHdhbnQgdGhlIG9iamVjdCB0byBiZSBwYXJzZWQsCisJICogZXhjZXB0IGlmIGl0IHdhcyBpbiBhIHBhY2stZmlsZSBhbmQgd2UgZGlkbid0CisJICogZG8gYSBmdWxsIGZzY2sKKwkgKi8KKwlpZiAoIShvYmotPmZsYWdzICYgSEFTX09CSikpIHsKKwkJaWYgKGlzX3Byb21pc29yX29iamVjdCgmb2JqLT5vaWQpKQorCQkJcmV0dXJuOworCQlpZiAoaGFzX29iamVjdF9wYWNrKCZvYmotPm9pZCkpCisJCQlyZXR1cm47IC8qIGl0IGlzIGluIHBhY2sgLSBmb3JnZXQgYWJvdXQgaXQgKi8KKwkJcHJpbnRmX2xuKF8oIm1pc3NpbmcgJXMgJXMiKSwKKwkJCSAgcHJpbnRhYmxlX3R5cGUoJm9iai0+b2lkLCBvYmotPnR5cGUpLAorCQkJICBkZXNjcmliZV9vYmplY3QoJm9iai0+b2lkKSk7CisJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUFDSEFCTEU7CisJCXJldHVybjsKKwl9Cit9CisKKy8qCisgKiBDaGVjayBhIHNpbmdsZSB1bnJlYWNoYWJsZSBvYmplY3QKKyAqLworc3RhdGljIHZvaWQgY2hlY2tfdW5yZWFjaGFibGVfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwkvKgorCSAqIE1pc3NpbmcgdW5yZWFjaGFibGUgb2JqZWN0PyBJZ25vcmUgaXQuIEl0J3Mgbm90IGxpa2UKKwkgKiB3ZSBtaXNzIGl0IChzaW5jZSBpdCBjYW4ndCBiZSByZWFjaGVkKSwgbm9yIGRvIHdlIHdhbnQKKwkgKiB0byBjb21wbGFpbiBhYm91dCBpdCBiZWluZyB1bnJlYWNoYWJsZSAoc2luY2UgaXQgZG9lcworCSAqIG5vdCBleGlzdCkuCisJICovCisJaWYgKCEob2JqLT5mbGFncyAmIEhBU19PQkopKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFVucmVhY2hhYmxlIG9iamVjdCB0aGF0IGV4aXN0cz8gU2hvdyBpdCBpZiBhc2tlZCB0bywKKwkgKiBzaW5jZSB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGlzIHBydW5hYmxlLgorCSAqLworCWlmIChzaG93X3VucmVhY2hhYmxlKSB7CisJCXByaW50Zl9sbihfKCJ1bnJlYWNoYWJsZSAlcyAlcyIpLAorCQkJICBwcmludGFibGVfdHlwZSgmb2JqLT5vaWQsIG9iai0+dHlwZSksCisJCQkgIGRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogIiFVU0VEIiBtZWFucyB0aGF0IG5vdGhpbmcgYXQgYWxsIHBvaW50cyB0byBpdCwgaW5jbHVkaW5nCisJICogb3RoZXIgdW5yZWFjaGFibGUgb2JqZWN0cy4gSW4gb3RoZXIgd29yZHMsIGl0J3MgdGhlICJ0aXAiCisJICogb2Ygc29tZSBzZXQgb2YgdW5yZWFjaGFibGUgb2JqZWN0cywgdXN1YWxseSBhIGNvbW1pdCB0aGF0CisJICogZ290IGRyb3BwZWQuCisJICoKKwkgKiBTdWNoIHN0YXJ0aW5nIHBvaW50cyBhcmUgbW9yZSBpbnRlcmVzdGluZyB0aGFuIHNvbWUgcmFuZG9tCisJICogc2V0IG9mIHVucmVhY2hhYmxlIG9iamVjdHMsIHNvIHdlIHNob3cgdGhlbSBldmVuIGlmIHRoZSB1c2VyCisJICogaGFzbid0IGFza2VkIGZvciBfYWxsXyB1bnJlYWNoYWJsZSBvYmplY3RzLiBJZiB5b3UgaGF2ZQorCSAqIGRlbGV0ZWQgYSBicmFuY2ggYnkgbWlzdGFrZSwgdGhpcyBpcyBhIHByaW1lIGNhbmRpZGF0ZSB0bworCSAqIHN0YXJ0IGxvb2tpbmcgYXQsIGZvciBleGFtcGxlLgorCSAqLworCWlmICghKG9iai0+ZmxhZ3MgJiBVU0VEKSkgeworCQlpZiAoc2hvd19kYW5nbGluZykKKwkJCXByaW50Zl9sbihfKCJkYW5nbGluZyAlcyAlcyIpLAorCQkJCSAgcHJpbnRhYmxlX3R5cGUoJm9iai0+b2lkLCBvYmotPnR5cGUpLAorCQkJCSAgZGVzY3JpYmVfb2JqZWN0KCZvYmotPm9pZCkpOworCQlpZiAod3JpdGVfbG9zdF9hbmRfZm91bmQpIHsKKwkJCWNoYXIgKmZpbGVuYW1lID0gZ2l0X3BhdGhkdXAoImxvc3QtZm91bmQvJXMvJXMiLAorCQkJCW9iai0+dHlwZSA9PSBPQkpfQ09NTUlUID8gImNvbW1pdCIgOiAib3RoZXIiLAorCQkJCWRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpKTsKKwkJCUZJTEUgKmY7CisKKwkJCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KGZpbGVuYW1lKSkgeworCQkJCWVycm9yKF8oImNvdWxkIG5vdCBjcmVhdGUgbG9zdC1mb3VuZCIpKTsKKwkJCQlmcmVlKGZpbGVuYW1lKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlmID0geGZvcGVuKGZpbGVuYW1lLCAidyIpOworCQkJaWYgKG9iai0+dHlwZSA9PSBPQkpfQkxPQikgeworCQkJCWlmIChzdHJlYW1fYmxvYl90b19mZChmaWxlbm8oZiksICZvYmotPm9pZCwgTlVMTCwgMSkpCisJCQkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgJyVzJyIpLCBmaWxlbmFtZSk7CisJCQl9IGVsc2UKKwkJCQlmcHJpbnRmKGYsICIlc1xuIiwgZGVzY3JpYmVfb2JqZWN0KCZvYmotPm9pZCkpOworCQkJaWYgKGZjbG9zZShmKSkKKwkJCQlkaWVfZXJybm8oXygiY291bGQgbm90IGZpbmlzaCAnJXMnIiksCisJCQkJCSAgZmlsZW5hbWUpOworCQkJZnJlZShmaWxlbmFtZSk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qCisJICogT3RoZXJ3aXNlPyBJdCdzIHRoZXJlLCBpdCdzIHVucmVhY2hhYmxlLCBhbmQgc29tZSBvdGhlciB1bnJlYWNoYWJsZQorCSAqIG9iamVjdCBwb2ludHMgdG8gaXQuIElnbm9yZSBpdCAtIGl0J3Mgbm90IGludGVyZXN0aW5nLCBhbmQgd2Ugc2hvd2VkCisJICogYWxsIHRoZSBpbnRlcmVzdGluZyBjYXNlcyBhYm92ZS4KKwkgKi8KK30KKworc3RhdGljIHZvaWQgY2hlY2tfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwlpZiAodmVyYm9zZSkKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNoZWNraW5nICVzIiksIGRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpKTsKKworCWlmIChvYmotPmZsYWdzICYgUkVBQ0hBQkxFKQorCQljaGVja19yZWFjaGFibGVfb2JqZWN0KG9iaik7CisJZWxzZQorCQljaGVja191bnJlYWNoYWJsZV9vYmplY3Qob2JqKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfY29ubmVjdGl2aXR5KHZvaWQpCit7CisJaW50IGksIG1heDsKKworCS8qIFRyYXZlcnNlIHRoZSBwZW5kaW5nIHJlYWNoYWJsZSBvYmplY3RzICovCisJdHJhdmVyc2VfcmVhY2hhYmxlKCk7CisKKwkvKgorCSAqIFdpdGggLS1jb25uZWN0aXZpdHktb25seSwgd2Ugd29uJ3QgaGF2ZSBhY3R1YWxseSBvcGVuZWQgYW5kIG1hcmtlZAorCSAqIHVucmVhY2hhYmxlIG9iamVjdHMgd2l0aCBVU0VELiBEbyB0aGF0IG5vdyB0byBtYWtlIC0tZGFuZ2xpbmcsIGV0YworCSAqIGFjY3VyYXRlLgorCSAqLworCWlmIChjb25uZWN0aXZpdHlfb25seSAmJiAoc2hvd19kYW5nbGluZyB8fCB3cml0ZV9sb3N0X2FuZF9mb3VuZCkpIHsKKwkJLyoKKwkJICogRXZlbiB0aG91Z2ggd2UgYWxyZWFkeSBoYXZlIGEgInN0cnVjdCBvYmplY3QiIGZvciBlYWNoIG9mCisJCSAqIHRoZXNlIGluIG1lbW9yeSwgd2UgbXVzdCBub3QgaXRlcmF0ZSBvdmVyIHRoZSBpbnRlcm5hbAorCQkgKiBvYmplY3QgaGFzaCBhcyB3ZSBkbyBiZWxvdy4gT3VyIGxvb3Agd291bGQgcG90ZW50aWFsbHkKKwkJICogcmVzaXplIHRoZSBoYXNoLCBtYWtpbmcgb3VyIGl0ZXJhdGlvbiBpbnZhbGlkLgorCQkgKgorCQkgKiBJbnN0ZWFkLCB3ZSdsbCBqdXN0IGdvIGJhY2sgdG8gdGhlIHNvdXJjZSBsaXN0IG9mIG9iamVjdHMsCisJCSAqIGFuZCBpZ25vcmUgYW55IHRoYXQgd2VyZW4ndCBwcmVzZW50IGluIG91ciBlYXJsaWVyCisJCSAqIHRyYXZlcnNhbC4KKwkJICovCisJCWZvcl9lYWNoX2xvb3NlX29iamVjdChtYXJrX2xvb3NlX3VucmVhY2hhYmxlX3JlZmVyZW50cywgTlVMTCwgMCk7CisJCWZvcl9lYWNoX3BhY2tlZF9vYmplY3QobWFya19wYWNrZWRfdW5yZWFjaGFibGVfcmVmZXJlbnRzLCBOVUxMLCAwKTsKKwl9CisKKwkvKiBMb29rIHVwIGFsbCB0aGUgcmVxdWlyZW1lbnRzLCB3YXJuIGFib3V0IG1pc3Npbmcgb2JqZWN0cy4uICovCisJbWF4ID0gZ2V0X21heF9vYmplY3RfaW5kZXgoKTsKKwlpZiAodmVyYm9zZSkKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNoZWNraW5nIGNvbm5lY3Rpdml0eSAoJWQgb2JqZWN0cykiKSwgbWF4KTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBnZXRfaW5kZXhlZF9vYmplY3QoaSk7CisKKwkJaWYgKG9iaikKKwkJCWNoZWNrX29iamVjdChvYmopOworCX0KK30KKworc3RhdGljIGludCBmc2NrX29iaihzdHJ1Y3Qgb2JqZWN0ICpvYmosIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCBlcnI7CisKKwlpZiAob2JqLT5mbGFncyAmIFNFRU4pCisJCXJldHVybiAwOworCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKworCWlmICh2ZXJib3NlKQorCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ2hlY2tpbmcgJXMgJXMiKSwKKwkJCSAgIHByaW50YWJsZV90eXBlKCZvYmotPm9pZCwgb2JqLT50eXBlKSwKKwkJCSAgIGRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpKTsKKworCWlmIChmc2NrX3dhbGsob2JqLCBOVUxMLCAmZnNja19vYmpfb3B0aW9ucykpCisJCW9iamVycm9yKG9iaiwgXygiYnJva2VuIGxpbmtzIikpOworCWVyciA9IGZzY2tfb2JqZWN0KG9iaiwgYnVmZmVyLCBzaXplLCAmZnNja19vYmpfb3B0aW9ucyk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKikgb2JqOworCisJCWlmICghY29tbWl0LT5wYXJlbnRzICYmIHNob3dfcm9vdCkKKwkJCXByaW50Zl9sbihfKCJyb290ICVzIiksCisJCQkJICBkZXNjcmliZV9vYmplY3QoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCX0KKworCWlmIChvYmotPnR5cGUgPT0gT0JKX1RBRykgeworCQlzdHJ1Y3QgdGFnICp0YWcgPSAoc3RydWN0IHRhZyAqKSBvYmo7CisKKwkJaWYgKHNob3dfdGFncyAmJiB0YWctPnRhZ2dlZCkgeworCQkJcHJpbnRmX2xuKF8oInRhZ2dlZCAlcyAlcyAoJXMpIGluICVzIiksCisJCQkJICBwcmludGFibGVfdHlwZSgmdGFnLT50YWdnZWQtPm9pZCwgdGFnLT50YWdnZWQtPnR5cGUpLAorCQkJCSAgZGVzY3JpYmVfb2JqZWN0KCZ0YWctPnRhZ2dlZC0+b2lkKSwKKwkJCQkgIHRhZy0+dGFnLAorCQkJCSAgZGVzY3JpYmVfb2JqZWN0KCZ0YWctPm9iamVjdC5vaWQpKTsKKwkJfQorCX0KKworb3V0OgorCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpCisJCWZyZWVfdHJlZV9idWZmZXIoKHN0cnVjdCB0cmVlICopb2JqKTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpCisJCWZyZWVfY29tbWl0X2J1ZmZlcih0aGVfcmVwb3NpdG9yeS0+cGFyc2VkX29iamVjdHMsCisJCQkJICAgKHN0cnVjdCBjb21taXQgKilvYmopOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZnNja19vYmpfYnVmZmVyKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJICAgdW5zaWduZWQgbG9uZyBzaXplLCB2b2lkICpidWZmZXIsIGludCAqZWF0ZW4pCit7CisJLyoKKwkgKiBOb3RlLCBidWZmZXIgbWF5IGJlIE5VTEwgaWYgdHlwZSBpcyBPQkpfQkxPQi4gU2VlCisJICogdmVyaWZ5X3BhY2tmaWxlKCksIGRhdGFfdmFsaWQgdmFyaWFibGUgZm9yIGRldGFpbHMuCisJICovCisJc3RydWN0IG9iamVjdCAqb2JqOworCW9iaiA9IHBhcnNlX29iamVjdF9idWZmZXIodGhlX3JlcG9zaXRvcnksIG9pZCwgdHlwZSwgc2l6ZSwgYnVmZmVyLAorCQkJCSAgZWF0ZW4pOworCWlmICghb2JqKSB7CisJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9PQkpFQ1Q7CisJCXJldHVybiBlcnJvcihfKCIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZyIpLAorCQkJICAgICBvaWRfdG9faGV4KG9pZCkpOworCX0KKwlvYmotPmZsYWdzICY9IH4oUkVBQ0hBQkxFIHwgU0VFTik7CisJb2JqLT5mbGFncyB8PSBIQVNfT0JKOworCXJldHVybiBmc2NrX29iaihvYmosIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgZGVmYXVsdF9yZWZzOworCitzdGF0aWMgdm9pZCBmc2NrX2hhbmRsZV9yZWZsb2dfb2lkKGNvbnN0IGNoYXIgKnJlZm5hbWUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwl0aW1lc3RhbXBfdCB0aW1lc3RhbXApCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCisJaWYgKCFpc19udWxsX29pZChvaWQpKSB7CisJCW9iaiA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJCWlmIChvYmogJiYgKG9iai0+ZmxhZ3MgJiBIQVNfT0JKKSkgeworCQkJaWYgKHRpbWVzdGFtcCkKKwkJCQlmc2NrX3B1dF9vYmplY3RfbmFtZSgmZnNja193YWxrX29wdGlvbnMsIG9pZCwKKwkJCQkJCSAgICAgIiVzQHslIlBSSXRpbWUifSIsCisJCQkJCQkgICAgIHJlZm5hbWUsIHRpbWVzdGFtcCk7CisJCQlvYmotPmZsYWdzIHw9IFVTRUQ7CisJCQltYXJrX29iamVjdF9yZWFjaGFibGUob2JqKTsKKwkJfSBlbHNlIGlmICghaXNfcHJvbWlzb3Jfb2JqZWN0KG9pZCkpIHsKKwkJCWVycm9yKF8oIiVzOiBpbnZhbGlkIHJlZmxvZyBlbnRyeSAlcyIpLAorCQkJICAgICAgcmVmbmFtZSwgb2lkX3RvX2hleChvaWQpKTsKKwkJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUFDSEFCTEU7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZnNja19oYW5kbGVfcmVmbG9nX2VudChzdHJ1Y3Qgb2JqZWN0X2lkICpvb2lkLCBzdHJ1Y3Qgb2JqZWN0X2lkICpub2lkLAorCQljb25zdCBjaGFyICplbWFpbCwgdGltZXN0YW1wX3QgdGltZXN0YW1wLCBpbnQgdHosCisJCWNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IGNiX2RhdGE7CisKKwlpZiAodmVyYm9zZSkKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNoZWNraW5nIHJlZmxvZyAlcy0+JXMiKSwKKwkJCSAgIG9pZF90b19oZXgob29pZCksIG9pZF90b19oZXgobm9pZCkpOworCisJZnNja19oYW5kbGVfcmVmbG9nX29pZChyZWZuYW1lLCBvb2lkLCAwKTsKKwlmc2NrX2hhbmRsZV9yZWZsb2dfb2lkKHJlZm5hbWUsIG5vaWQsIHRpbWVzdGFtcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnNja19oYW5kbGVfcmVmbG9nKGNvbnN0IGNoYXIgKmxvZ25hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzdHJidWYgcmVmbmFtZSA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3dvcmt0cmVlX3JlZihjYl9kYXRhLCAmcmVmbmFtZSwgbG9nbmFtZSk7CisJZm9yX2VhY2hfcmVmbG9nX2VudChyZWZuYW1lLmJ1ZiwgZnNja19oYW5kbGVfcmVmbG9nX2VudCwgcmVmbmFtZS5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZWZuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmc2NrX2hhbmRsZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCisJb2JqID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCWlmICghb2JqKSB7CisJCWlmIChpc19wcm9taXNvcl9vYmplY3Qob2lkKSkgeworCQkJLyoKKwkJCSAqIEluY3JlbWVudCBkZWZhdWx0X3JlZnMgYW55d2F5LCBiZWNhdXNlIHRoaXMgaXMgYQorCQkJICogdmFsaWQgcmVmLgorCQkJICovCisJCQkgZGVmYXVsdF9yZWZzKys7CisJCQkgcmV0dXJuIDA7CisJCX0KKwkJZXJyb3IoXygiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyICVzIiksCisJCSAgICAgIHJlZm5hbWUsIG9pZF90b19oZXgob2lkKSk7CisJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUFDSEFCTEU7CisJCS8qIFdlJ2xsIGNvbnRpbnVlIHdpdGggdGhlIHJlc3QgZGVzcGl0ZSB0aGUgZXJyb3IuLiAqLworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG9iai0+dHlwZSAhPSBPQkpfQ09NTUlUICYmIGlzX2JyYW5jaChyZWZuYW1lKSkgeworCQllcnJvcihfKCIlczogbm90IGEgY29tbWl0IiksIHJlZm5hbWUpOworCQllcnJvcnNfZm91bmQgfD0gRVJST1JfUkVGUzsKKwl9CisJZGVmYXVsdF9yZWZzKys7CisJb2JqLT5mbGFncyB8PSBVU0VEOworCWZzY2tfcHV0X29iamVjdF9uYW1lKCZmc2NrX3dhbGtfb3B0aW9ucywKKwkJCSAgICAgb2lkLCAiJXMiLCByZWZuYW1lKTsKKwltYXJrX29iamVjdF9yZWFjaGFibGUob2JqKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzY2tfaGVhZF9saW5rKGNvbnN0IGNoYXIgKmhlYWRfcmVmX25hbWUsCisJCQkgIGNvbnN0IGNoYXIgKipoZWFkX3BvaW50c19hdCwKKwkJCSAgc3RydWN0IG9iamVjdF9pZCAqaGVhZF9vaWQpOworCitzdGF0aWMgdm9pZCBnZXRfZGVmYXVsdF9oZWFkcyh2b2lkKQoreworCXN0cnVjdCB3b3JrdHJlZSAqKndvcmt0cmVlcywgKipwOworCWNvbnN0IGNoYXIgKmhlYWRfcG9pbnRzX2F0OworCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisKKwlmb3JfZWFjaF9yYXdyZWYoZnNja19oYW5kbGVfcmVmLCBOVUxMKTsKKworCXdvcmt0cmVlcyA9IGdldF93b3JrdHJlZXMoMCk7CisJZm9yIChwID0gd29ya3RyZWVzOyAqcDsgcCsrKSB7CisJCXN0cnVjdCB3b3JrdHJlZSAqd3QgPSAqcDsKKwkJc3RydWN0IHN0cmJ1ZiByZWYgPSBTVFJCVUZfSU5JVDsKKworCQlzdHJidWZfd29ya3RyZWVfcmVmKHd0LCAmcmVmLCAiSEVBRCIpOworCQlmc2NrX2hlYWRfbGluayhyZWYuYnVmLCAmaGVhZF9wb2ludHNfYXQsICZoZWFkX29pZCk7CisJCWlmIChoZWFkX3BvaW50c19hdCAmJiAhaXNfbnVsbF9vaWQoJmhlYWRfb2lkKSkKKwkJCWZzY2tfaGFuZGxlX3JlZihyZWYuYnVmLCAmaGVhZF9vaWQsIDAsIE5VTEwpOworCQlzdHJidWZfcmVsZWFzZSgmcmVmKTsKKworCQlpZiAoaW5jbHVkZV9yZWZsb2dzKQorCQkJcmVmc19mb3JfZWFjaF9yZWZsb2coZ2V0X3dvcmt0cmVlX3JlZl9zdG9yZSh3dCksCisJCQkJCSAgICAgZnNja19oYW5kbGVfcmVmbG9nLCB3dCk7CisJfQorCWZyZWVfd29ya3RyZWVzKHdvcmt0cmVlcyk7CisKKwkvKgorCSAqIE5vdCBoYXZpbmcgYW55IGRlZmF1bHQgaGVhZHMgaXNuJ3QgcmVhbGx5IGZhdGFsLCBidXQKKwkgKiBpdCBkb2VzIG1lYW4gdGhhdCAiLS11bnJlYWNoYWJsZSIgbm8gbG9uZ2VyIG1ha2VzIGFueQorCSAqIHNlbnNlIChzaW5jZSBpbiB0aGlzIGNhc2UgZXZlcnl0aGluZyB3aWxsIG9idmlvdXNseQorCSAqIGJlIHVucmVhY2hhYmxlIGJ5IGRlZmluaXRpb24uCisJICoKKwkgKiBTaG93aW5nIGRhbmdsaW5nIG9iamVjdHMgaXMgdmFsaWQsIHRob3VnaCAoYXMgdGhvc2UKKwkgKiBkYW5nbGluZyBvYmplY3RzIGFyZSBsaWtlbHkgbG9zdCBoZWFkcykuCisJICoKKwkgKiBTbyB3ZSBqdXN0IHByaW50IGEgd2FybmluZyBhYm91dCBpdCwgYW5kIGNsZWFyIHRoZQorCSAqICJzaG93X3VucmVhY2hhYmxlIiBmbGFnLgorCSAqLworCWlmICghZGVmYXVsdF9yZWZzKSB7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJub3RpY2U6IE5vIGRlZmF1bHQgcmVmZXJlbmNlcyIpKTsKKwkJc2hvd191bnJlYWNoYWJsZSA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IGZzY2tfbG9vc2UoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBvYmplY3QgKm9iajsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXZvaWQgKmNvbnRlbnRzOworCWludCBlYXRlbjsKKworCWlmIChyZWFkX2xvb3NlX29iamVjdChwYXRoLCBvaWQsICZ0eXBlLCAmc2l6ZSwgJmNvbnRlbnRzKSA8IDApIHsKKwkJZXJyb3JzX2ZvdW5kIHw9IEVSUk9SX09CSkVDVDsKKwkJZXJyb3IoXygiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3Npbmc6ICVzIiksCisJCSAgICAgIG9pZF90b19oZXgob2lkKSwgcGF0aCk7CisJCXJldHVybiAwOyAvKiBrZWVwIGNoZWNraW5nIG90aGVyIG9iamVjdHMgKi8KKwl9CisKKwlpZiAoIWNvbnRlbnRzICYmIHR5cGUgIT0gT0JKX0JMT0IpCisJCUJVRygicmVhZF9sb29zZV9vYmplY3Qgc3RyZWFtZWQgYSBub24tYmxvYiIpOworCisJb2JqID0gcGFyc2Vfb2JqZWN0X2J1ZmZlcih0aGVfcmVwb3NpdG9yeSwgb2lkLCB0eXBlLCBzaXplLAorCQkJCSAgY29udGVudHMsICZlYXRlbik7CisKKwlpZiAoIW9iaikgeworCQllcnJvcnNfZm91bmQgfD0gRVJST1JfT0JKRUNUOworCQllcnJvcihfKCIlczogb2JqZWN0IGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICVzIiksCisJCSAgICAgIG9pZF90b19oZXgob2lkKSwgcGF0aCk7CisJCWlmICghZWF0ZW4pCisJCQlmcmVlKGNvbnRlbnRzKTsKKwkJcmV0dXJuIDA7IC8qIGtlZXAgY2hlY2tpbmcgb3RoZXIgb2JqZWN0cyAqLworCX0KKworCW9iai0+ZmxhZ3MgJj0gfihSRUFDSEFCTEUgfCBTRUVOKTsKKwlvYmotPmZsYWdzIHw9IEhBU19PQko7CisJaWYgKGZzY2tfb2JqKG9iaiwgY29udGVudHMsIHNpemUpKQorCQllcnJvcnNfZm91bmQgfD0gRVJST1JfT0JKRUNUOworCisJaWYgKCFlYXRlbikKKwkJZnJlZShjb250ZW50cyk7CisJcmV0dXJuIDA7IC8qIGtlZXAgY2hlY2tpbmcgb3RoZXIgb2JqZWN0cywgZXZlbiBpZiB3ZSBzYXcgYW4gZXJyb3IgKi8KK30KKworc3RhdGljIGludCBmc2NrX2NydWZ0KGNvbnN0IGNoYXIgKmJhc2VuYW1lLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpkYXRhKQoreworCWlmICghc3RhcnRzX3dpdGgoYmFzZW5hbWUsICJ0bXBfb2JqXyIpKQorCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiYmFkIHNoYTEgZmlsZTogJXMiKSwgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnNja19zdWJkaXIodW5zaWduZWQgaW50IG5yLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpwcm9ncmVzcykKK3sKKwlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBuciArIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmc2NrX29iamVjdF9kaXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKKworCWlmICh2ZXJib3NlKQorCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yeSIpKTsKKworCWlmIChzaG93X3Byb2dyZXNzKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIpLCAyNTYpOworCisJZm9yX2VhY2hfbG9vc2VfZmlsZV9pbl9vYmpkaXIocGF0aCwgZnNja19sb29zZSwgZnNja19jcnVmdCwgZnNja19zdWJkaXIsCisJCQkJICAgICAgcHJvZ3Jlc3MpOworCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIDI1Nik7CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW50IGZzY2tfaGVhZF9saW5rKGNvbnN0IGNoYXIgKmhlYWRfcmVmX25hbWUsCisJCQkgIGNvbnN0IGNoYXIgKipoZWFkX3BvaW50c19hdCwKKwkJCSAgc3RydWN0IG9iamVjdF9pZCAqaGVhZF9vaWQpCit7CisJaW50IG51bGxfaXNfZXJyb3IgPSAwOworCisJaWYgKHZlcmJvc2UpCisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJDaGVja2luZyAlcyBsaW5rIiksIGhlYWRfcmVmX25hbWUpOworCisJKmhlYWRfcG9pbnRzX2F0ID0gcmVzb2x2ZV9yZWZfdW5zYWZlKGhlYWRfcmVmX25hbWUsIDAsIGhlYWRfb2lkLCBOVUxMKTsKKwlpZiAoISpoZWFkX3BvaW50c19hdCkgeworCQllcnJvcnNfZm91bmQgfD0gRVJST1JfUkVGUzsKKwkJcmV0dXJuIGVycm9yKF8oImludmFsaWQgJXMiKSwgaGVhZF9yZWZfbmFtZSk7CisJfQorCWlmICghc3RyY21wKCpoZWFkX3BvaW50c19hdCwgaGVhZF9yZWZfbmFtZSkpCisJCS8qIGRldGFjaGVkIEhFQUQgKi8KKwkJbnVsbF9pc19lcnJvciA9IDE7CisJZWxzZSBpZiAoIXN0YXJ0c193aXRoKCpoZWFkX3BvaW50c19hdCwgInJlZnMvaGVhZHMvIikpIHsKKwkJZXJyb3JzX2ZvdW5kIHw9IEVSUk9SX1JFRlM7CisJCXJldHVybiBlcnJvcihfKCIlcyBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIpLAorCQkJICAgICBoZWFkX3JlZl9uYW1lLCAqaGVhZF9wb2ludHNfYXQpOworCX0KKwlpZiAoaXNfbnVsbF9vaWQoaGVhZF9vaWQpKSB7CisJCWlmIChudWxsX2lzX2Vycm9yKSB7CisJCQllcnJvcnNfZm91bmQgfD0gRVJST1JfUkVGUzsKKwkJCXJldHVybiBlcnJvcihfKCIlczogZGV0YWNoZWQgSEVBRCBwb2ludHMgYXQgbm90aGluZyIpLAorCQkJCSAgICAgaGVhZF9yZWZfbmFtZSk7CisJCX0KKwkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkgICBfKCJub3RpY2U6ICVzIHBvaW50cyB0byBhbiB1bmJvcm4gYnJhbmNoICglcykiKSwKKwkJCSAgIGhlYWRfcmVmX25hbWUsICpoZWFkX3BvaW50c19hdCArIDExKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnNja19jYWNoZV90cmVlKHN0cnVjdCBjYWNoZV90cmVlICppdCkKK3sKKwlpbnQgaTsKKwlpbnQgZXJyID0gMDsKKworCWlmICh2ZXJib3NlKQorCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ2hlY2tpbmcgY2FjaGUgdHJlZSIpKTsKKworCWlmICgwIDw9IGl0LT5lbnRyeV9jb3VudCkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZpdC0+b2lkKTsKKwkJaWYgKCFvYmopIHsKKwkJCWVycm9yKF8oIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciBpbiBjYWNoZS10cmVlIiksCisJCQkgICAgICBvaWRfdG9faGV4KCZpdC0+b2lkKSk7CisJCQllcnJvcnNfZm91bmQgfD0gRVJST1JfUkVGUzsKKwkJCXJldHVybiAxOworCQl9CisJCW9iai0+ZmxhZ3MgfD0gVVNFRDsKKwkJZnNja19wdXRfb2JqZWN0X25hbWUoJmZzY2tfd2Fsa19vcHRpb25zLCAmaXQtPm9pZCwgIjoiKTsKKwkJbWFya19vYmplY3RfcmVhY2hhYmxlKG9iaik7CisJCWlmIChvYmotPnR5cGUgIT0gT0JKX1RSRUUpCisJCQllcnIgfD0gb2JqZXJyb3Iob2JqLCBfKCJub24tdHJlZSBpbiBjYWNoZS10cmVlIikpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgaXQtPnN1YnRyZWVfbnI7IGkrKykKKwkJZXJyIHw9IGZzY2tfY2FjaGVfdHJlZShpdC0+ZG93bltpXS0+Y2FjaGVfdHJlZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbWFya19vYmplY3RfZm9yX2Nvbm5lY3Rpdml0eShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX3Vua25vd25fb2JqZWN0KG9pZCk7CisJb2JqLT5mbGFncyB8PSBIQVNfT0JKOworfQorCitzdGF0aWMgaW50IG1hcmtfbG9vc2VfZm9yX2Nvbm5lY3Rpdml0eShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJbWFya19vYmplY3RfZm9yX2Nvbm5lY3Rpdml0eShvaWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hcmtfcGFja2VkX2Zvcl9jb25uZWN0aXZpdHkoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjaywKKwkJCQkJdWludDMyX3QgcG9zLAorCQkJCQl2b2lkICpkYXRhKQoreworCW1hcmtfb2JqZWN0X2Zvcl9jb25uZWN0aXZpdHkob2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBmc2NrX3VzYWdlW10gPSB7CisJTl8oImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IG9wdGlvbiBmc2NrX29wdHNbXSA9IHsKKwlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJiZSB2ZXJib3NlIikpLAorCU9QVF9CT09MKDAsICJ1bnJlYWNoYWJsZSIsICZzaG93X3VucmVhY2hhYmxlLCBOXygic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIikpLAorCU9QVF9CT09MKDAsICJkYW5nbGluZyIsICZzaG93X2RhbmdsaW5nLCBOXygic2hvdyBkYW5nbGluZyBvYmplY3RzIikpLAorCU9QVF9CT09MKDAsICJ0YWdzIiwgJnNob3dfdGFncywgTl8oInJlcG9ydCB0YWdzIikpLAorCU9QVF9CT09MKDAsICJyb290IiwgJnNob3dfcm9vdCwgTl8oInJlcG9ydCByb290IG5vZGVzIikpLAorCU9QVF9CT09MKDAsICJjYWNoZSIsICZrZWVwX2NhY2hlX29iamVjdHMsIE5fKCJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIpKSwKKwlPUFRfQk9PTCgwLCAicmVmbG9ncyIsICZpbmNsdWRlX3JlZmxvZ3MsIE5fKCJtYWtlIHJlZmxvZ3MgaGVhZCBub2RlcyAoZGVmYXVsdCkiKSksCisJT1BUX0JPT0woMCwgImZ1bGwiLCAmY2hlY2tfZnVsbCwgTl8oImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIikpLAorCU9QVF9CT09MKDAsICJjb25uZWN0aXZpdHktb25seSIsICZjb25uZWN0aXZpdHlfb25seSwgTl8oImNoZWNrIG9ubHkgY29ubmVjdGl2aXR5IikpLAorCU9QVF9CT09MKDAsICJzdHJpY3QiLCAmY2hlY2tfc3RyaWN0LCBOXygiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIikpLAorCU9QVF9CT09MKDAsICJsb3N0LWZvdW5kIiwgJndyaXRlX2xvc3RfYW5kX2ZvdW5kLAorCQkJCU5fKCJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIpKSwKKwlPUFRfQk9PTCgwLCAicHJvZ3Jlc3MiLCAmc2hvd19wcm9ncmVzcywgTl8oInNob3cgcHJvZ3Jlc3MiKSksCisJT1BUX0JPT0woMCwgIm5hbWUtb2JqZWN0cyIsICZuYW1lX29iamVjdHMsIE5fKCJzaG93IHZlcmJvc2UgbmFtZXMgZm9yIHJlYWNoYWJsZSBvYmplY3RzIikpLAorCU9QVF9FTkQoKSwKK307CisKK2ludCBjbWRfZnNjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiOworCisJLyogZnNjayBrbm93cyBob3cgdG8gaGFuZGxlIG1pc3NpbmcgcHJvbWlzb3Igb2JqZWN0cyAqLworCWZldGNoX2lmX21pc3NpbmcgPSAwOworCisJZXJyb3JzX2ZvdW5kID0gMDsKKwlyZWFkX3JlcGxhY2VfcmVmcyA9IDA7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGZzY2tfb3B0cywgZnNja191c2FnZSwgMCk7CisKKwlmc2NrX3dhbGtfb3B0aW9ucy53YWxrID0gbWFya19vYmplY3Q7CisJZnNja19vYmpfb3B0aW9ucy53YWxrID0gbWFya191c2VkOworCWZzY2tfb2JqX29wdGlvbnMuZXJyb3JfZnVuYyA9IGZzY2tfZXJyb3JfZnVuYzsKKwlpZiAoY2hlY2tfc3RyaWN0KQorCQlmc2NrX29ial9vcHRpb25zLnN0cmljdCA9IDE7CisKKwlpZiAoc2hvd19wcm9ncmVzcyA9PSAtMSkKKwkJc2hvd19wcm9ncmVzcyA9IGlzYXR0eSgyKTsKKwlpZiAodmVyYm9zZSkKKwkJc2hvd19wcm9ncmVzcyA9IDA7CisKKwlpZiAod3JpdGVfbG9zdF9hbmRfZm91bmQpIHsKKwkJY2hlY2tfZnVsbCA9IDE7CisJCWluY2x1ZGVfcmVmbG9ncyA9IDA7CisJfQorCisJaWYgKG5hbWVfb2JqZWN0cykKKwkJZnNja19lbmFibGVfb2JqZWN0X25hbWVzKCZmc2NrX3dhbGtfb3B0aW9ucyk7CisKKwlnaXRfY29uZmlnKGZzY2tfY29uZmlnLCBOVUxMKTsKKworCWlmIChjb25uZWN0aXZpdHlfb25seSkgeworCQlmb3JfZWFjaF9sb29zZV9vYmplY3QobWFya19sb29zZV9mb3JfY29ubmVjdGl2aXR5LCBOVUxMLCAwKTsKKwkJZm9yX2VhY2hfcGFja2VkX29iamVjdChtYXJrX3BhY2tlZF9mb3JfY29ubmVjdGl2aXR5LCBOVUxMLCAwKTsKKwl9IGVsc2UgeworCQlwcmVwYXJlX2FsdF9vZGIodGhlX3JlcG9zaXRvcnkpOworCQlmb3IgKG9kYiA9IHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzLT5vZGI7IG9kYjsgb2RiID0gb2RiLT5uZXh0KQorCQkJZnNja19vYmplY3RfZGlyKG9kYi0+cGF0aCk7CisKKwkJaWYgKGNoZWNrX2Z1bGwpIHsKKwkJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCQkJdWludDMyX3QgdG90YWwgPSAwLCBjb3VudCA9IDA7CisJCQlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKKworCQkJaWYgKHNob3dfcHJvZ3Jlc3MpIHsKKwkJCQlmb3IgKHAgPSBnZXRfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5KTsgcDsKKwkJCQkgICAgIHAgPSBwLT5uZXh0KSB7CisJCQkJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCisJCQkJCQljb250aW51ZTsKKwkJCQkJdG90YWwgKz0gcC0+bnVtX29iamVjdHM7CisJCQkJfQorCisJCQkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJDaGVja2luZyBvYmplY3RzIiksIHRvdGFsKTsKKwkJCX0KKwkJCWZvciAocCA9IGdldF9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnkpOyBwOworCQkJICAgICBwID0gcC0+bmV4dCkgeworCQkJCS8qIHZlcmlmeSBnaXZlcyBlcnJvciBtZXNzYWdlcyBpdHNlbGYgKi8KKwkJCQlpZiAodmVyaWZ5X3BhY2sodGhlX3JlcG9zaXRvcnksCisJCQkJCQlwLCBmc2NrX29ial9idWZmZXIsCisJCQkJCQlwcm9ncmVzcywgY291bnQpKQorCQkJCQllcnJvcnNfZm91bmQgfD0gRVJST1JfUEFDSzsKKwkJCQljb3VudCArPSBwLT5udW1fb2JqZWN0czsKKwkJCX0KKwkJCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwkJfQorCisJCWlmIChmc2NrX2ZpbmlzaCgmZnNja19vYmpfb3B0aW9ucykpCisJCQllcnJvcnNfZm91bmQgfD0gRVJST1JfT0JKRUNUOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWlmICghZ2V0X29pZChhcmcsICZvaWQpKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSAgICZvaWQpOworCisJCQlpZiAoIW9iaiB8fCAhKG9iai0+ZmxhZ3MgJiBIQVNfT0JKKSkgeworCQkJCWlmIChpc19wcm9taXNvcl9vYmplY3QoJm9pZCkpCisJCQkJCWNvbnRpbnVlOworCQkJCWVycm9yKF8oIiVzOiBvYmplY3QgbWlzc2luZyIpLCBvaWRfdG9faGV4KCZvaWQpKTsKKwkJCQllcnJvcnNfZm91bmQgfD0gRVJST1JfT0JKRUNUOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlvYmotPmZsYWdzIHw9IFVTRUQ7CisJCQlmc2NrX3B1dF9vYmplY3RfbmFtZSgmZnNja193YWxrX29wdGlvbnMsICZvaWQsCisJCQkJCSAgICAgIiVzIiwgYXJnKTsKKwkJCW1hcmtfb2JqZWN0X3JlYWNoYWJsZShvYmopOworCQkJY29udGludWU7CisJCX0KKwkJZXJyb3IoXygiaW52YWxpZCBwYXJhbWV0ZXI6IGV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIiksIGFyZyk7CisJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9PQkpFQ1Q7CisJfQorCisJLyoKKwkgKiBJZiB3ZSd2ZSBub3QgYmVlbiBnaXZlbiBhbnkgZXhwbGljaXQgaGVhZCBpbmZvcm1hdGlvbiwgZG8gdGhlCisJICogZGVmYXVsdCBvbmVzIGZyb20gLmdpdC9yZWZzLiBXZSBhbHNvIGNvbnNpZGVyIHRoZSBpbmRleCBmaWxlCisJICogaW4gdGhpcyBjYXNlIChpZSB0aGlzIGltcGxpZXMgLS1jYWNoZSkuCisJICovCisJaWYgKCFhcmdjKSB7CisJCWdldF9kZWZhdWx0X2hlYWRzKCk7CisJCWtlZXBfY2FjaGVfb2JqZWN0cyA9IDE7CisJfQorCisJaWYgKGtlZXBfY2FjaGVfb2JqZWN0cykgeworCQl2ZXJpZnlfaW5kZXhfY2hlY2tzdW0gPSAxOworCQl2ZXJpZnlfY2Vfb3JkZXIgPSAxOworCQlyZWFkX2NhY2hlKCk7CisJCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQkJdW5zaWduZWQgaW50IG1vZGU7CisJCQlzdHJ1Y3QgYmxvYiAqYmxvYjsKKwkJCXN0cnVjdCBvYmplY3QgKm9iajsKKworCQkJbW9kZSA9IGFjdGl2ZV9jYWNoZVtpXS0+Y2VfbW9kZTsKKwkJCWlmIChTX0lTR0lUTElOSyhtb2RlKSkKKwkJCQljb250aW51ZTsKKwkJCWJsb2IgPSBsb29rdXBfYmxvYih0aGVfcmVwb3NpdG9yeSwKKwkJCQkJICAgJmFjdGl2ZV9jYWNoZVtpXS0+b2lkKTsKKwkJCWlmICghYmxvYikKKwkJCQljb250aW51ZTsKKwkJCW9iaiA9ICZibG9iLT5vYmplY3Q7CisJCQlvYmotPmZsYWdzIHw9IFVTRUQ7CisJCQlmc2NrX3B1dF9vYmplY3RfbmFtZSgmZnNja193YWxrX29wdGlvbnMsICZvYmotPm9pZCwKKwkJCQkJICAgICAiOiVzIiwgYWN0aXZlX2NhY2hlW2ldLT5uYW1lKTsKKwkJCW1hcmtfb2JqZWN0X3JlYWNoYWJsZShvYmopOworCQl9CisJCWlmIChhY3RpdmVfY2FjaGVfdHJlZSkKKwkJCWZzY2tfY2FjaGVfdHJlZShhY3RpdmVfY2FjaGVfdHJlZSk7CisJfQorCisJY2hlY2tfY29ubmVjdGl2aXR5KCk7CisKKwlpZiAoIWdpdF9jb25maWdfZ2V0X2Jvb2woImNvcmUuY29tbWl0Z3JhcGgiLCAmaSkgJiYgaSkgeworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjb21taXRfZ3JhcGhfdmVyaWZ5ID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQljb25zdCBjaGFyICp2ZXJpZnlfYXJndltdID0geyAiY29tbWl0LWdyYXBoIiwgInZlcmlmeSIsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKworCQlwcmVwYXJlX2FsdF9vZGIodGhlX3JlcG9zaXRvcnkpOworCQlmb3IgKG9kYiA9IHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzLT5vZGI7IG9kYjsgb2RiID0gb2RiLT5uZXh0KSB7CisJCQljaGlsZF9wcm9jZXNzX2luaXQoJmNvbW1pdF9ncmFwaF92ZXJpZnkpOworCQkJY29tbWl0X2dyYXBoX3ZlcmlmeS5hcmd2ID0gdmVyaWZ5X2FyZ3Y7CisJCQljb21taXRfZ3JhcGhfdmVyaWZ5LmdpdF9jbWQgPSAxOworCQkJdmVyaWZ5X2FyZ3ZbMl0gPSAiLS1vYmplY3QtZGlyIjsKKwkJCXZlcmlmeV9hcmd2WzNdID0gb2RiLT5wYXRoOworCQkJaWYgKHJ1bl9jb21tYW5kKCZjb21taXRfZ3JhcGhfdmVyaWZ5KSkKKwkJCQllcnJvcnNfZm91bmQgfD0gRVJST1JfQ09NTUlUX0dSQVBIOworCQl9CisJfQorCisJaWYgKCFnaXRfY29uZmlnX2dldF9ib29sKCJjb3JlLm11bHRpcGFja2luZGV4IiwgJmkpICYmIGkpIHsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgbWlkeF92ZXJpZnkgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCWNvbnN0IGNoYXIgKm1pZHhfYXJndltdID0geyAibXVsdGktcGFjay1pbmRleCIsICJ2ZXJpZnkiLCBOVUxMLCBOVUxMLCBOVUxMIH07CisKKwkJcHJlcGFyZV9hbHRfb2RiKHRoZV9yZXBvc2l0b3J5KTsKKwkJZm9yIChvZGIgPSB0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cy0+b2RiOyBvZGI7IG9kYiA9IG9kYi0+bmV4dCkgeworCQkJY2hpbGRfcHJvY2Vzc19pbml0KCZtaWR4X3ZlcmlmeSk7CisJCQltaWR4X3ZlcmlmeS5hcmd2ID0gbWlkeF9hcmd2OworCQkJbWlkeF92ZXJpZnkuZ2l0X2NtZCA9IDE7CisJCQltaWR4X2FyZ3ZbMl0gPSAiLS1vYmplY3QtZGlyIjsKKwkJCW1pZHhfYXJndlszXSA9IG9kYi0+cGF0aDsKKwkJCWlmIChydW5fY29tbWFuZCgmbWlkeF92ZXJpZnkpKQorCQkJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9DT01NSVRfR1JBUEg7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyb3JzX2ZvdW5kOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9nYy5jIGIvYnVpbHRpbi9nYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMGI5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2djLmMKQEAgLTAsMCArMSw3MDEgQEAKKy8qCisgKiBnaXQgZ2MgYnVpbHRpbiBjb21tYW5kCisgKgorICogQ2xlYW51cCB1bnJlYWNoYWJsZSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIHJlcG9zaXRvcnkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEphbWVzIEJvd2VzCisgKgorICogQmFzZWQgb24gZ2l0LWdjLnNoLCB3aGljaCBpcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBTaGF3biBPLiBQZWFyY2UKKyAqLworCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0ZW1wZmlsZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiY29tbWl0LWdyYXBoLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAicGFjay1vYmplY3RzLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJwcm9taXNvci1yZW1vdGUuaCIKKworI2RlZmluZSBGQUlMRURfUlVOICJmYWlsZWQgdG8gcnVuICVzIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fZ2NfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGdjIFs8b3B0aW9ucz5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBwYWNrX3JlZnMgPSAxOworc3RhdGljIGludCBwcnVuZV9yZWZsb2dzID0gMTsKK3N0YXRpYyBpbnQgYWdncmVzc2l2ZV9kZXB0aCA9IDUwOworc3RhdGljIGludCBhZ2dyZXNzaXZlX3dpbmRvdyA9IDI1MDsKK3N0YXRpYyBpbnQgZ2NfYXV0b190aHJlc2hvbGQgPSA2NzAwOworc3RhdGljIGludCBnY19hdXRvX3BhY2tfbGltaXQgPSA1MDsKK3N0YXRpYyBpbnQgZGV0YWNoX2F1dG8gPSAxOworc3RhdGljIHRpbWVzdGFtcF90IGdjX2xvZ19leHBpcmVfdGltZTsKK3N0YXRpYyBjb25zdCBjaGFyICpnY19sb2dfZXhwaXJlID0gIjEuZGF5LmFnbyI7CitzdGF0aWMgY29uc3QgY2hhciAqcHJ1bmVfZXhwaXJlID0gIjIud2Vla3MuYWdvIjsKK3N0YXRpYyBjb25zdCBjaGFyICpwcnVuZV93b3JrdHJlZXNfZXhwaXJlID0gIjMubW9udGhzLmFnbyI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBiaWdfcGFja190aHJlc2hvbGQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhfZGVsdGFfY2FjaGVfc2l6ZSA9IERFRkFVTFRfREVMVEFfQ0FDSEVfU0laRTsKKworc3RhdGljIHN0cnVjdCBhcmd2X2FycmF5IHBhY2tfcmVmc19jbWQgPSBBUkdWX0FSUkFZX0lOSVQ7CitzdGF0aWMgc3RydWN0IGFyZ3ZfYXJyYXkgcmVmbG9nID0gQVJHVl9BUlJBWV9JTklUOworc3RhdGljIHN0cnVjdCBhcmd2X2FycmF5IHJlcGFjayA9IEFSR1ZfQVJSQVlfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QgYXJndl9hcnJheSBwcnVuZSA9IEFSR1ZfQVJSQVlfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QgYXJndl9hcnJheSBwcnVuZV93b3JrdHJlZXMgPSBBUkdWX0FSUkFZX0lOSVQ7CitzdGF0aWMgc3RydWN0IGFyZ3ZfYXJyYXkgcmVyZXJlID0gQVJHVl9BUlJBWV9JTklUOworCitzdGF0aWMgc3RydWN0IHRlbXBmaWxlICpwaWRmaWxlOworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbG9nX2xvY2s7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgcGFja19nYXJiYWdlID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKK3N0YXRpYyB2b2lkIGNsZWFuX3BhY2tfZ2FyYmFnZSh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBwYWNrX2dhcmJhZ2UubnI7IGkrKykKKwkJdW5saW5rX29yX3dhcm4ocGFja19nYXJiYWdlLml0ZW1zW2ldLnN0cmluZyk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnBhY2tfZ2FyYmFnZSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9wYWNrX2dhcmJhZ2UodW5zaWduZWQgc2Vlbl9iaXRzLCBjb25zdCBjaGFyICpwYXRoKQoreworCWlmIChzZWVuX2JpdHMgPT0gUEFDS0RJUl9GSUxFX0lEWCkKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZwYWNrX2dhcmJhZ2UsIHBhdGgpOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2xvZ19maWxlKHZvaWQpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJaWYgKGZzdGF0KGdldF9sb2NrX2ZpbGVfZmQoJmxvZ19sb2NrKSwgJnN0KSkgeworCQkvKgorCQkgKiBQZXJoYXBzIHRoZXJlIHdhcyBhbiBpL28gZXJyb3Igb3IgYW5vdGhlcgorCQkgKiB1bmxpa2VseSBzaXR1YXRpb24uICBUcnkgdG8gbWFrZSBhIG5vdGUgb2YKKwkJICogdGhpcyBpbiBnYy5sb2cgYWxvbmcgd2l0aCBhbnkgZXhpc3RpbmcKKwkJICogbWVzc2FnZXMuCisJCSAqLworCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJZnByaW50ZihzdGRlcnIsIF8oIkZhaWxlZCB0byBmc3RhdCAlczogJXMiKSwKKwkJCWdldF90ZW1wZmlsZV9wYXRoKGxvZ19sb2NrLnRlbXBmaWxlKSwKKwkJCXN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJCWZmbHVzaChzdGRlcnIpOworCQljb21taXRfbG9ja19maWxlKCZsb2dfbG9jayk7CisJCWVycm5vID0gc2F2ZWRfZXJybm87CisJfSBlbHNlIGlmIChzdC5zdF9zaXplKSB7CisJCS8qIFRoZXJlIHdhcyBzb21lIGVycm9yIHJlY29yZGVkIGluIHRoZSBsb2NrIGZpbGUgKi8KKwkJY29tbWl0X2xvY2tfZmlsZSgmbG9nX2xvY2spOworCX0gZWxzZSB7CisJCS8qIE5vIGVycm9yLCBjbGVhbiB1cCBhbnkgb2xkIGdjLmxvZyAqLworCQl1bmxpbmsoZ2l0X3BhdGgoImdjLmxvZyIpKTsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2dfbG9jayk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2xvZ19maWxlX2F0X2V4aXQodm9pZCkKK3sKKwlmZmx1c2goc3RkZXJyKTsKKwlwcm9jZXNzX2xvZ19maWxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfbG9nX2ZpbGVfb25fc2lnbmFsKGludCBzaWdubykKK3sKKwlwcm9jZXNzX2xvZ19maWxlKCk7CisJc2lnY2hhaW5fcG9wKHNpZ25vKTsKKwlyYWlzZShzaWdubyk7Cit9CisKK3N0YXRpYyBpbnQgZ2NfY29uZmlnX2lzX3RpbWVzdGFtcF9uZXZlcihjb25zdCBjaGFyICp2YXIpCit7CisJY29uc3QgY2hhciAqdmFsdWU7CisJdGltZXN0YW1wX3QgZXhwaXJlOworCisJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSh2YXIsICZ2YWx1ZSkgJiYgdmFsdWUpIHsKKwkJaWYgKHBhcnNlX2V4cGlyeV9kYXRlKHZhbHVlLCAmZXhwaXJlKSkKKwkJCWRpZShfKCJmYWlsZWQgdG8gcGFyc2UgJyVzJyB2YWx1ZSAnJXMnIiksIHZhciwgdmFsdWUpOworCQlyZXR1cm4gZXhwaXJlID09IDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnY19jb25maWcodm9pZCkKK3sKKwljb25zdCBjaGFyICp2YWx1ZTsKKworCWlmICghZ2l0X2NvbmZpZ19nZXRfdmFsdWUoImdjLnBhY2tyZWZzIiwgJnZhbHVlKSkgeworCQlpZiAodmFsdWUgJiYgIXN0cmNtcCh2YWx1ZSwgIm5vdGJhcmUiKSkKKwkJCXBhY2tfcmVmcyA9IC0xOworCQllbHNlCisJCQlwYWNrX3JlZnMgPSBnaXRfY29uZmlnX2Jvb2woImdjLnBhY2tyZWZzIiwgdmFsdWUpOworCX0KKworCWlmIChnY19jb25maWdfaXNfdGltZXN0YW1wX25ldmVyKCJnYy5yZWZsb2dleHBpcmUiKSAmJgorCSAgICBnY19jb25maWdfaXNfdGltZXN0YW1wX25ldmVyKCJnYy5yZWZsb2dleHBpcmV1bnJlYWNoYWJsZSIpKQorCQlwcnVuZV9yZWZsb2dzID0gMDsKKworCWdpdF9jb25maWdfZ2V0X2ludCgiZ2MuYWdncmVzc2l2ZXdpbmRvdyIsICZhZ2dyZXNzaXZlX3dpbmRvdyk7CisJZ2l0X2NvbmZpZ19nZXRfaW50KCJnYy5hZ2dyZXNzaXZlZGVwdGgiLCAmYWdncmVzc2l2ZV9kZXB0aCk7CisJZ2l0X2NvbmZpZ19nZXRfaW50KCJnYy5hdXRvIiwgJmdjX2F1dG9fdGhyZXNob2xkKTsKKwlnaXRfY29uZmlnX2dldF9pbnQoImdjLmF1dG9wYWNrbGltaXQiLCAmZ2NfYXV0b19wYWNrX2xpbWl0KTsKKwlnaXRfY29uZmlnX2dldF9ib29sKCJnYy5hdXRvZGV0YWNoIiwgJmRldGFjaF9hdXRvKTsKKwlnaXRfY29uZmlnX2dldF9leHBpcnkoImdjLnBydW5lZXhwaXJlIiwgJnBydW5lX2V4cGlyZSk7CisJZ2l0X2NvbmZpZ19nZXRfZXhwaXJ5KCJnYy53b3JrdHJlZXBydW5lZXhwaXJlIiwgJnBydW5lX3dvcmt0cmVlc19leHBpcmUpOworCWdpdF9jb25maWdfZ2V0X2V4cGlyeSgiZ2MubG9nZXhwaXJ5IiwgJmdjX2xvZ19leHBpcmUpOworCisJZ2l0X2NvbmZpZ19nZXRfdWxvbmcoImdjLmJpZ3BhY2t0aHJlc2hvbGQiLCAmYmlnX3BhY2tfdGhyZXNob2xkKTsKKwlnaXRfY29uZmlnX2dldF91bG9uZygicGFjay5kZWx0YWNhY2hlc2l6ZSIsICZtYXhfZGVsdGFfY2FjaGVfc2l6ZSk7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgdG9vX21hbnlfbG9vc2Vfb2JqZWN0cyh2b2lkKQoreworCS8qCisJICogUXVpY2tseSBjaGVjayBpZiBhICJnYyIgaXMgbmVlZGVkLCBieSBlc3RpbWF0aW5nIGhvdworCSAqIG1hbnkgbG9vc2Ugb2JqZWN0cyB0aGVyZSBhcmUuICBCZWNhdXNlIFNIQS0xIGlzIGV2ZW5seQorCSAqIGRpc3RyaWJ1dGVkLCB3ZSBjYW4gY2hlY2sgb25seSBvbmUgYW5kIGdldCBhIHJlYXNvbmFibGUKKwkgKiBlc3RpbWF0ZS4KKwkgKi8KKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICplbnQ7CisJaW50IGF1dG9fdGhyZXNob2xkOworCWludCBudW1fbG9vc2UgPSAwOworCWludCBuZWVkZWQgPSAwOworCWNvbnN0IHVuc2lnbmVkIGhleHN6X2xvb3NlID0gdGhlX2hhc2hfYWxnby0+aGV4c3ogLSAyOworCisJZGlyID0gb3BlbmRpcihnaXRfcGF0aCgib2JqZWN0cy8xNyIpKTsKKwlpZiAoIWRpcikKKwkJcmV0dXJuIDA7CisKKwlhdXRvX3RocmVzaG9sZCA9IERJVl9ST1VORF9VUChnY19hdXRvX3RocmVzaG9sZCwgMjU2KTsKKwl3aGlsZSAoKGVudCA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlpZiAoc3Ryc3BuKGVudC0+ZF9uYW1lLCAiMDEyMzQ1Njc4OWFiY2RlZiIpICE9IGhleHN6X2xvb3NlIHx8CisJCSAgICBlbnQtPmRfbmFtZVtoZXhzel9sb29zZV0gIT0gJ1wwJykKKwkJCWNvbnRpbnVlOworCQlpZiAoKytudW1fbG9vc2UgPiBhdXRvX3RocmVzaG9sZCkgeworCQkJbmVlZGVkID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWNsb3NlZGlyKGRpcik7CisJcmV0dXJuIG5lZWRlZDsKK30KKworc3RhdGljIHN0cnVjdCBwYWNrZWRfZ2l0ICpmaW5kX2Jhc2VfcGFja3Moc3RydWN0IHN0cmluZ19saXN0ICpwYWNrcywKKwkJCQkJICB1bnNpZ25lZCBsb25nIGxpbWl0KQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwLCAqYmFzZSA9IE5VTEw7CisKKwlmb3IgKHAgPSBnZXRfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5KTsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKCFwLT5wYWNrX2xvY2FsKQorCQkJY29udGludWU7CisJCWlmIChsaW1pdCkgeworCQkJaWYgKHAtPnBhY2tfc2l6ZSA+PSBsaW1pdCkKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQocGFja3MsIHAtPnBhY2tfbmFtZSk7CisJCX0gZWxzZSBpZiAoIWJhc2UgfHwgYmFzZS0+cGFja19zaXplIDwgcC0+cGFja19zaXplKSB7CisJCQliYXNlID0gcDsKKwkJfQorCX0KKworCWlmIChiYXNlKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQocGFja3MsIGJhc2UtPnBhY2tfbmFtZSk7CisKKwlyZXR1cm4gYmFzZTsKK30KKworc3RhdGljIGludCB0b29fbWFueV9wYWNrcyh2b2lkKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCWludCBjbnQ7CisKKwlpZiAoZ2NfYXV0b19wYWNrX2xpbWl0IDw9IDApCisJCXJldHVybiAwOworCisJZm9yIChjbnQgPSAwLCBwID0gZ2V0X2FsbF9wYWNrcyh0aGVfcmVwb3NpdG9yeSk7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmICghcC0+cGFja19sb2NhbCkKKwkJCWNvbnRpbnVlOworCQlpZiAocC0+cGFja19rZWVwKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIFBlcmhhcHMgY2hlY2sgdGhlIHNpemUgb2YgdGhlIHBhY2sgYW5kIGNvdW50IG9ubHkKKwkJICogdmVyeSBzbWFsbCBvbmVzIGhlcmU/CisJCSAqLworCQljbnQrKzsKKwl9CisJcmV0dXJuIGdjX2F1dG9fcGFja19saW1pdCA8IGNudDsKK30KKworc3RhdGljIHVpbnQ2NF90IHRvdGFsX3JhbSh2b2lkKQoreworI2lmIGRlZmluZWQoSEFWRV9TWVNJTkZPKQorCXN0cnVjdCBzeXNpbmZvIHNpOworCisJaWYgKCFzeXNpbmZvKCZzaSkpCisJCXJldHVybiBzaS50b3RhbHJhbTsKKyNlbGlmIGRlZmluZWQoSEFWRV9CU0RfU1lTQ1RMKSAmJiAoZGVmaW5lZChIV19NRU1TSVpFKSB8fCBkZWZpbmVkKEhXX1BIWVNNRU0pKQorCWludDY0X3QgcGh5c2ljYWxfbWVtb3J5OworCWludCBtaWJbMl07CisJc2l6ZV90IGxlbmd0aDsKKworCW1pYlswXSA9IENUTF9IVzsKKyMgaWYgZGVmaW5lZChIV19NRU1TSVpFKQorCW1pYlsxXSA9IEhXX01FTVNJWkU7CisjIGVsc2UKKwltaWJbMV0gPSBIV19QSFlTTUVNOworIyBlbmRpZgorCWxlbmd0aCA9IHNpemVvZihpbnQ2NF90KTsKKwlpZiAoIXN5c2N0bChtaWIsIDIsICZwaHlzaWNhbF9tZW1vcnksICZsZW5ndGgsIE5VTEwsIDApKQorCQlyZXR1cm4gcGh5c2ljYWxfbWVtb3J5OworI2VsaWYgZGVmaW5lZChHSVRfV0lORE9XU19OQVRJVkUpCisJTUVNT1JZU1RBVFVTRVggbWVtSW5mbzsKKworCW1lbUluZm8uZHdMZW5ndGggPSBzaXplb2YoTUVNT1JZU1RBVFVTRVgpOworCWlmIChHbG9iYWxNZW1vcnlTdGF0dXNFeCgmbWVtSW5mbykpCisJCXJldHVybiBtZW1JbmZvLnVsbFRvdGFsUGh5czsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgdWludDY0X3QgZXN0aW1hdGVfcmVwYWNrX21lbW9yeShzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjaykKK3sKKwl1bnNpZ25lZCBsb25nIG5yX29iamVjdHMgPSBhcHByb3hpbWF0ZV9vYmplY3RfY291bnQoKTsKKwlzaXplX3Qgb3NfY2FjaGUsIGhlYXA7CisKKwlpZiAoIXBhY2sgfHwgIW5yX29iamVjdHMpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBGaXJzdCB3ZSBoYXZlIHRvIHNjYW4gdGhyb3VnaCBhdCBsZWFzdCBvbmUgcGFjay4KKwkgKiBBc3N1bWUgZW5vdWdoIHJvb20gaW4gT1MgZmlsZSBjYWNoZSB0byBrZWVwIHRoZSBlbnRpcmUgcGFjaworCSAqIG9yIHdlIG1heSBhY2NpZGVudGFsbHkgZXZpY3QgZGF0YSBvZiBvdGhlciBwcm9jZXNzZXMgZnJvbQorCSAqIHRoZSBjYWNoZS4KKwkgKi8KKwlvc19jYWNoZSA9IHBhY2stPnBhY2tfc2l6ZSArIHBhY2stPmluZGV4X3NpemU7CisJLyogdGhlbiBwYWNrLW9iamVjdHMgbmVlZHMgbG90cyBtb3JlIGZvciBib29rIGtlZXBpbmcgKi8KKwloZWFwID0gc2l6ZW9mKHN0cnVjdCBvYmplY3RfZW50cnkpICogbnJfb2JqZWN0czsKKwkvKgorCSAqIGludGVybmFsIHJldi1saXN0IC0tYWxsIC0tb2JqZWN0cyB0YWtlcyB1cCBzb21lIG1lbW9yeSB0b28sCisJICogbGV0J3Mgc2F5IGhhbGYgb2YgaXQgaXMgZm9yIGJsb2JzCisJICovCisJaGVhcCArPSBzaXplb2Yoc3RydWN0IGJsb2IpICogbnJfb2JqZWN0cyAvIDI7CisJLyoKKwkgKiBhbmQgdGhlIG90aGVyIGhhbGYgaXMgZm9yIHRyZWVzIChjb21taXRzIGFuZCB0YWdzIGFyZQorCSAqIHVzdWFsbHkgaW5zaWduaWZpY2FudCkKKwkgKi8KKwloZWFwICs9IHNpemVvZihzdHJ1Y3QgdHJlZSkgKiBucl9vYmplY3RzIC8gMjsKKwkvKiBhbmQgdGhlbiBvYmpfaGFzaFtdLCB1bmRlcmVzdGltYXRlZCBpbiBmYWN0ICovCisJaGVhcCArPSBzaXplb2Yoc3RydWN0IG9iamVjdCAqKSAqIG5yX29iamVjdHM7CisJLyogcmV2aW5kZXggaXMgdXNlZCBhbHNvICovCisJaGVhcCArPSBzaXplb2Yoc3RydWN0IHJldmluZGV4X2VudHJ5KSAqIG5yX29iamVjdHM7CisJLyoKKwkgKiByZWFkX3NoYTFfZmlsZSgpIChlaXRoZXIgYXQgZGVsdGEgY2FsY3VsYXRpb24gcGhhc2UsIG9yCisJICogd3JpdGluZyBwaGFzZSkgYWxzbyBmaWxscyB1cCB0aGUgZGVsdGEgYmFzZSBjYWNoZQorCSAqLworCWhlYXAgKz0gZGVsdGFfYmFzZV9jYWNoZV9saW1pdDsKKwkvKiBhbmQgb2YgY291cnNlIHBhY2stb2JqZWN0cyBoYXMgaXRzIG93biBkZWx0YSBjYWNoZSAqLworCWhlYXAgKz0gbWF4X2RlbHRhX2NhY2hlX3NpemU7CisKKwlyZXR1cm4gb3NfY2FjaGUgKyBoZWFwOworfQorCitzdGF0aWMgaW50IGtlZXBfb25lX3BhY2soc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmRhdGEpCit7CisJYXJndl9hcnJheV9wdXNoZigmcmVwYWNrLCAiLS1rZWVwLXBhY2s9JXMiLCBiYXNlbmFtZShpdGVtLT5zdHJpbmcpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRkX3JlcGFja19hbGxfb3B0aW9uKHN0cnVjdCBzdHJpbmdfbGlzdCAqa2VlcF9wYWNrKQoreworCWlmIChwcnVuZV9leHBpcmUgJiYgIXN0cmNtcChwcnVuZV9leHBpcmUsICJub3ciKSkKKwkJYXJndl9hcnJheV9wdXNoKCZyZXBhY2ssICItYSIpOworCWVsc2UgeworCQlhcmd2X2FycmF5X3B1c2goJnJlcGFjaywgIi1BIik7CisJCWlmIChwcnVuZV9leHBpcmUpCisJCQlhcmd2X2FycmF5X3B1c2hmKCZyZXBhY2ssICItLXVucGFjay11bnJlYWNoYWJsZT0lcyIsIHBydW5lX2V4cGlyZSk7CisJfQorCisJaWYgKGtlZXBfcGFjaykKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3Qoa2VlcF9wYWNrLCBrZWVwX29uZV9wYWNrLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgYWRkX3JlcGFja19pbmNyZW1lbnRhbF9vcHRpb24odm9pZCkKK3sKKwlhcmd2X2FycmF5X3B1c2goJnJlcGFjaywgIi0tbm8td3JpdGUtYml0bWFwLWluZGV4Iik7Cit9CisKK3N0YXRpYyBpbnQgbmVlZF90b19nYyh2b2lkKQoreworCS8qCisJICogU2V0dGluZyBnYy5hdXRvIHRvIDAgb3IgbmVnYXRpdmUgY2FuIGRpc2FibGUgdGhlCisJICogYXV0b21hdGljIGdjLgorCSAqLworCWlmIChnY19hdXRvX3RocmVzaG9sZCA8PSAwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIHRvbyBtYW55IGxvb3NlIG9iamVjdHMsIGJ1dCBub3QgdG9vIG1hbnkKKwkgKiBwYWNrcywgd2UgcnVuICJyZXBhY2sgLWQgLWwiLiAgSWYgdGhlcmUgYXJlIHRvbyBtYW55IHBhY2tzLAorCSAqIHdlIHJ1biAicmVwYWNrIC1BIC1kIC1sIi4gIE90aGVyd2lzZSB3ZSB0ZWxsIHRoZSBjYWxsZXIKKwkgKiB0aGVyZSBpcyBubyBuZWVkLgorCSAqLworCWlmICh0b29fbWFueV9wYWNrcygpKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBrZWVwX3BhY2sgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJCWlmIChiaWdfcGFja190aHJlc2hvbGQpIHsKKwkJCWZpbmRfYmFzZV9wYWNrcygma2VlcF9wYWNrLCBiaWdfcGFja190aHJlc2hvbGQpOworCQkJaWYgKGtlZXBfcGFjay5uciA+PSBnY19hdXRvX3BhY2tfbGltaXQpIHsKKwkJCQliaWdfcGFja190aHJlc2hvbGQgPSAwOworCQkJCXN0cmluZ19saXN0X2NsZWFyKCZrZWVwX3BhY2ssIDApOworCQkJCWZpbmRfYmFzZV9wYWNrcygma2VlcF9wYWNrLCAwKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gZmluZF9iYXNlX3BhY2tzKCZrZWVwX3BhY2ssIDApOworCQkJdWludDY0X3QgbWVtX2hhdmUsIG1lbV93YW50OworCisJCQltZW1faGF2ZSA9IHRvdGFsX3JhbSgpOworCQkJbWVtX3dhbnQgPSBlc3RpbWF0ZV9yZXBhY2tfbWVtb3J5KHApOworCisJCQkvKgorCQkJICogT25seSBhbGxvdyAxLzIgb2YgbWVtb3J5IGZvciBwYWNrLW9iamVjdHMsIGxlYXZlCisJCQkgKiB0aGUgcmVzdCBmb3IgdGhlIE9TIGFuZCBvdGhlciBwcm9jZXNzZXMgaW4gdGhlCisJCQkgKiBzeXN0ZW0uCisJCQkgKi8KKwkJCWlmICghbWVtX2hhdmUgfHwgbWVtX3dhbnQgPCBtZW1faGF2ZSAvIDIpCisJCQkJc3RyaW5nX2xpc3RfY2xlYXIoJmtlZXBfcGFjaywgMCk7CisJCX0KKworCQlhZGRfcmVwYWNrX2FsbF9vcHRpb24oJmtlZXBfcGFjayk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZrZWVwX3BhY2ssIDApOworCX0gZWxzZSBpZiAodG9vX21hbnlfbG9vc2Vfb2JqZWN0cygpKQorCQlhZGRfcmVwYWNrX2luY3JlbWVudGFsX29wdGlvbigpOworCWVsc2UKKwkJcmV0dXJuIDA7CisKKwlpZiAocnVuX2hvb2tfbGUoTlVMTCwgInByZS1hdXRvLWdjIiwgTlVMTCkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKiByZXR1cm4gTlVMTCBvbiBzdWNjZXNzLCBlbHNlIGhvc3RuYW1lIHJ1bm5pbmcgdGhlIGdjICovCitzdGF0aWMgY29uc3QgY2hhciAqbG9ja19yZXBvX2Zvcl9nYyhpbnQgZm9yY2UsIHBpZF90KiByZXRfcGlkKQoreworCXN0cnVjdCBsb2NrX2ZpbGUgbG9jayA9IExPQ0tfSU5JVDsKKwljaGFyIG15X2hvc3RbSE9TVF9OQU1FX01BWCArIDFdOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwl1aW50bWF4X3QgcGlkOworCUZJTEUgKmZwOworCWludCBmZDsKKwljaGFyICpwaWRmaWxlX3BhdGg7CisKKwlpZiAoaXNfdGVtcGZpbGVfYWN0aXZlKHBpZGZpbGUpKQorCQkvKiBhbHJlYWR5IGxvY2tlZCAqLworCQlyZXR1cm4gTlVMTDsKKworCWlmICh4Z2V0aG9zdG5hbWUobXlfaG9zdCwgc2l6ZW9mKG15X2hvc3QpKSkKKwkJeHNucHJpbnRmKG15X2hvc3QsIHNpemVvZihteV9ob3N0KSwgInVua25vd24iKTsKKworCXBpZGZpbGVfcGF0aCA9IGdpdF9wYXRoZHVwKCJnYy5waWQiKTsKKwlmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmxvY2ssIHBpZGZpbGVfcGF0aCwKKwkJCQkgICAgICAgTE9DS19ESUVfT05fRVJST1IpOworCWlmICghZm9yY2UpIHsKKwkJc3RhdGljIGNoYXIgbG9ja2luZ19ob3N0W0hPU1RfTkFNRV9NQVggKyAxXTsKKwkJc3RhdGljIGNoYXIgKnNjYW5fZm10OworCQlpbnQgc2hvdWxkX2V4aXQ7CisKKwkJaWYgKCFzY2FuX2ZtdCkKKwkJCXNjYW5fZm10ID0geHN0cmZtdCgiJXMgJSUlZHMiLCAiJSJTQ051TUFYLCBIT1NUX05BTUVfTUFYKTsKKwkJZnAgPSBmb3BlbihwaWRmaWxlX3BhdGgsICJyIik7CisJCW1lbXNldChsb2NraW5nX2hvc3QsIDAsIHNpemVvZihsb2NraW5nX2hvc3QpKTsKKwkJc2hvdWxkX2V4aXQgPQorCQkJZnAgIT0gTlVMTCAmJgorCQkJIWZzdGF0KGZpbGVubyhmcCksICZzdCkgJiYKKwkJCS8qCisJCQkgKiAxMiBob3VyIGxpbWl0IGlzIHZlcnkgZ2VuZXJvdXMgYXMgZ2Mgc2hvdWxkCisJCQkgKiBuZXZlciB0YWtlIHRoYXQgbG9uZy4gT24gdGhlIG90aGVyIGhhbmQgd2UKKwkJCSAqIGRvbid0IHJlYWxseSBuZWVkIGEgc3RyaWN0IGxpbWl0IGhlcmUsCisJCQkgKiBydW5uaW5nIGdjIC0tYXV0byBvbmUgZGF5IGxhdGUgaXMgbm90IGEgYmlnCisJCQkgKiBwcm9ibGVtLiAtLWZvcmNlIGNhbiBiZSB1c2VkIGluIG1hbnVhbCBnYworCQkJICogYWZ0ZXIgdGhlIHVzZXIgdmVyaWZpZXMgdGhhdCBubyBnYyBpcworCQkJICogcnVubmluZy4KKwkJCSAqLworCQkJdGltZShOVUxMKSAtIHN0LnN0X210aW1lIDw9IDEyICogMzYwMCAmJgorCQkJZnNjYW5mKGZwLCBzY2FuX2ZtdCwgJnBpZCwgbG9ja2luZ19ob3N0KSA9PSAyICYmCisJCQkvKiBiZSBnZW50bGUgdG8gY29uY3VycmVudCAiZ2MiIG9uIHJlbW90ZSBob3N0cyAqLworCQkJKHN0cmNtcChsb2NraW5nX2hvc3QsIG15X2hvc3QpIHx8ICFraWxsKHBpZCwgMCkgfHwgZXJybm8gPT0gRVBFUk0pOworCQlpZiAoZnAgIT0gTlVMTCkKKwkJCWZjbG9zZShmcCk7CisJCWlmIChzaG91bGRfZXhpdCkgeworCQkJaWYgKGZkID49IDApCisJCQkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwkJCSpyZXRfcGlkID0gcGlkOworCQkJZnJlZShwaWRmaWxlX3BhdGgpOworCQkJcmV0dXJuIGxvY2tpbmdfaG9zdDsKKwkJfQorCX0KKworCXN0cmJ1Zl9hZGRmKCZzYiwgIiUiUFJJdU1BWCIgJXMiLAorCQkgICAgKHVpbnRtYXhfdCkgZ2V0cGlkKCksIG15X2hvc3QpOworCXdyaXRlX2luX2Z1bGwoZmQsIHNiLmJ1Ziwgc2IubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWNvbW1pdF9sb2NrX2ZpbGUoJmxvY2spOworCXBpZGZpbGUgPSByZWdpc3Rlcl90ZW1wZmlsZShwaWRmaWxlX3BhdGgpOworCWZyZWUocGlkZmlsZV9wYXRoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFJldHVybnMgMCBpZiB0aGVyZSB3YXMgbm8gcHJldmlvdXMgZXJyb3IgYW5kIGdjIGNhbiBwcm9jZWVkLCAxIGlmCisgKiBnYyBzaG91bGQgbm90IHByb2NlZWQgZHVlIHRvIGFuIGVycm9yIGluIHRoZSBsYXN0IHJ1bi4gUHJpbnRzIGEKKyAqIG1lc3NhZ2UgYW5kIHJldHVybnMgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBnYy5sb2cKKyAqLworc3RhdGljIGludCByZXBvcnRfbGFzdF9nY19lcnJvcih2b2lkKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gMDsKKwlzc2l6ZV90IGxlbjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyICpnY19sb2dfcGF0aCA9IGdpdF9wYXRoZHVwKCJnYy5sb2ciKTsKKworCWlmIChzdGF0KGdjX2xvZ19wYXRoLCAmc3QpKSB7CisJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQlnb3RvIGRvbmU7CisKKwkJcmV0ID0gZXJyb3JfZXJybm8oXygiY2Fubm90IHN0YXQgJyVzJyIpLCBnY19sb2dfcGF0aCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoc3Quc3RfbXRpbWUgPCBnY19sb2dfZXhwaXJlX3RpbWUpCisJCWdvdG8gZG9uZTsKKworCWxlbiA9IHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBnY19sb2dfcGF0aCwgMCk7CisJaWYgKGxlbiA8IDApCisJCXJldCA9IGVycm9yX2Vycm5vKF8oImNhbm5vdCByZWFkICclcyciKSwgZ2NfbG9nX3BhdGgpOworCWVsc2UgaWYgKGxlbiA+IDApIHsKKwkJLyoKKwkJICogQSBwcmV2aW91cyBnYyBmYWlsZWQuICBSZXBvcnQgdGhlIGVycm9yLCBhbmQgZG9uJ3QKKwkJICogYm90aGVyIHdpdGggYW4gYXV0b21hdGljIGdjIHJ1biBzaW5jZSBpdCBpcyBsaWtlbHkKKwkJICogdG8gZmFpbCBpbiB0aGUgc2FtZSB3YXkuCisJCSAqLworCQl3YXJuaW5nKF8oIlRoZSBsYXN0IGdjIHJ1biByZXBvcnRlZCB0aGUgZm9sbG93aW5nLiAiCisJCQkgICAgICAgIlBsZWFzZSBjb3JyZWN0IHRoZSByb290IGNhdXNlXG4iCisJCQkgICAgICAgImFuZCByZW1vdmUgJXMuXG4iCisJCQkgICAgICAgIkF1dG9tYXRpYyBjbGVhbnVwIHdpbGwgbm90IGJlIHBlcmZvcm1lZCAiCisJCQkgICAgICAgInVudGlsIHRoZSBmaWxlIGlzIHJlbW92ZWQuXG5cbiIKKwkJCSAgICAgICAiJXMiKSwKKwkJCSAgICBnY19sb2dfcGF0aCwgc2IuYnVmKTsKKwkJcmV0ID0gMTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK2RvbmU6CisJZnJlZShnY19sb2dfcGF0aCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZ2NfYmVmb3JlX3JlcGFjayh2b2lkKQoreworCS8qCisJICogV2UgbWF5IGJlIGNhbGxlZCB0d2ljZSwgYXMgYm90aCB0aGUgcHJlLSBhbmQKKwkgKiBwb3N0LWRhZW1vbml6ZWQgcGhhc2VzIHdpbGwgY2FsbCB1cywgYnV0IHJ1bm5pbmcgdGhlc2UKKwkgKiBjb21tYW5kcyBtb3JlIHRoYW4gb25jZSBpcyBwb2ludGxlc3MgYW5kIHdhc3RlZnVsLgorCSAqLworCXN0YXRpYyBpbnQgZG9uZSA9IDA7CisJaWYgKGRvbmUrKykKKwkJcmV0dXJuOworCisJaWYgKHBhY2tfcmVmcyAmJiBydW5fY29tbWFuZF92X29wdChwYWNrX3JlZnNfY21kLmFyZ3YsIFJVTl9HSVRfQ01EKSkKKwkJZGllKEZBSUxFRF9SVU4sIHBhY2tfcmVmc19jbWQuYXJndlswXSk7CisKKwlpZiAocHJ1bmVfcmVmbG9ncyAmJiBydW5fY29tbWFuZF92X29wdChyZWZsb2cuYXJndiwgUlVOX0dJVF9DTUQpKQorCQlkaWUoRkFJTEVEX1JVTiwgcmVmbG9nLmFyZ3ZbMF0pOworfQorCitpbnQgY21kX2djKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBhZ2dyZXNzaXZlID0gMDsKKwlpbnQgYXV0b19nYyA9IDA7CisJaW50IHF1aWV0ID0gMDsKKwlpbnQgZm9yY2UgPSAwOworCWNvbnN0IGNoYXIgKm5hbWU7CisJcGlkX3QgcGlkOworCWludCBkYWVtb25pemVkID0gMDsKKwlpbnQga2VlcF9iYXNlX3BhY2sgPSAtMTsKKwl0aW1lc3RhbXBfdCBkdW1teTsKKworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9nY19vcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCQl7IE9QVElPTl9TVFJJTkcsIDAsICJwcnVuZSIsICZwcnVuZV9leHBpcmUsIE5fKCJkYXRlIiksCisJCQlOXygicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiKSwKKwkJCVBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdClwcnVuZV9leHBpcmUgfSwKKwkJT1BUX0JPT0woMCwgImFnZ3Jlc3NpdmUiLCAmYWdncmVzc2l2ZSwgTl8oImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIpKSwKKwkJT1BUX0JPT0xfRigwLCAiYXV0byIsICZhdXRvX2djLCBOXygiZW5hYmxlIGF1dG8tZ2MgbW9kZSIpLAorCQkJICAgUEFSU0VfT1BUX05PQ09NUExFVEUpLAorCQlPUFRfQk9PTF9GKDAsICJmb3JjZSIsICZmb3JjZSwKKwkJCSAgIE5fKCJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIpLAorCQkJICAgUEFSU0VfT1BUX05PQ09NUExFVEUpLAorCQlPUFRfQk9PTCgwLCAia2VlcC1sYXJnZXN0LXBhY2siLCAma2VlcF9iYXNlX3BhY2ssCisJCQkgTl8oInJlcGFjayBhbGwgb3RoZXIgcGFja3MgZXhjZXB0IHRoZSBsYXJnZXN0IHBhY2siKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2djX3VzYWdlLCBidWlsdGluX2djX29wdGlvbnMpOworCisJYXJndl9hcnJheV9wdXNobCgmcGFja19yZWZzX2NtZCwgInBhY2stcmVmcyIsICItLWFsbCIsICItLXBydW5lIiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNobCgmcmVmbG9nLCAicmVmbG9nIiwgImV4cGlyZSIsICItLWFsbCIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGwoJnJlcGFjaywgInJlcGFjayIsICItZCIsICItbCIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGwoJnBydW5lLCAicHJ1bmUiLCAiLS1leHBpcmUiLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2hsKCZwcnVuZV93b3JrdHJlZXMsICJ3b3JrdHJlZSIsICJwcnVuZSIsICItLWV4cGlyZSIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGwoJnJlcmVyZSwgInJlcmVyZSIsICJnYyIsIE5VTEwpOworCisJLyogZGVmYXVsdCBleHBpcnkgdGltZSwgb3ZlcndyaXR0ZW4gaW4gZ2NfY29uZmlnICovCisJZ2NfY29uZmlnKCk7CisJaWYgKHBhcnNlX2V4cGlyeV9kYXRlKGdjX2xvZ19leHBpcmUsICZnY19sb2dfZXhwaXJlX3RpbWUpKQorCQlkaWUoXygiZmFpbGVkIHRvIHBhcnNlIGdjLmxvZ2V4cGlyeSB2YWx1ZSAlcyIpLCBnY19sb2dfZXhwaXJlKTsKKworCWlmIChwYWNrX3JlZnMgPCAwKQorCQlwYWNrX3JlZnMgPSAhaXNfYmFyZV9yZXBvc2l0b3J5KCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fZ2Nfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9nY191c2FnZSwgMCk7CisJaWYgKGFyZ2MgPiAwKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9nY191c2FnZSwgYnVpbHRpbl9nY19vcHRpb25zKTsKKworCWlmIChwcnVuZV9leHBpcmUgJiYgcGFyc2VfZXhwaXJ5X2RhdGUocHJ1bmVfZXhwaXJlLCAmZHVtbXkpKQorCQlkaWUoXygiZmFpbGVkIHRvIHBhcnNlIHBydW5lIGV4cGlyeSB2YWx1ZSAlcyIpLCBwcnVuZV9leHBpcmUpOworCisJaWYgKGFnZ3Jlc3NpdmUpIHsKKwkJYXJndl9hcnJheV9wdXNoKCZyZXBhY2ssICItZiIpOworCQlpZiAoYWdncmVzc2l2ZV9kZXB0aCA+IDApCisJCQlhcmd2X2FycmF5X3B1c2hmKCZyZXBhY2ssICItLWRlcHRoPSVkIiwgYWdncmVzc2l2ZV9kZXB0aCk7CisJCWlmIChhZ2dyZXNzaXZlX3dpbmRvdyA+IDApCisJCQlhcmd2X2FycmF5X3B1c2hmKCZyZXBhY2ssICItLXdpbmRvdz0lZCIsIGFnZ3Jlc3NpdmVfd2luZG93KTsKKwl9CisJaWYgKHF1aWV0KQorCQlhcmd2X2FycmF5X3B1c2goJnJlcGFjaywgIi1xIik7CisKKwlpZiAoYXV0b19nYykgeworCQkvKgorCQkgKiBBdXRvLWdjIHNob3VsZCBiZSBsZWFzdCBpbnRydXNpdmUgYXMgcG9zc2libGUuCisJCSAqLworCQlpZiAoIW5lZWRfdG9fZ2MoKSkKKwkJCXJldHVybiAwOworCQlpZiAoIXF1aWV0KSB7CisJCQlpZiAoZGV0YWNoX2F1dG8pCisJCQkJZnByaW50ZihzdGRlcnIsIF8oIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIikpOworCQkJZWxzZQorCQkJCWZwcmludGYoc3RkZXJyLCBfKCJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iKSk7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIpKTsKKwkJfQorCQlpZiAoZGV0YWNoX2F1dG8pIHsKKwkJCWludCByZXQgPSByZXBvcnRfbGFzdF9nY19lcnJvcigpOworCQkJaWYgKHJldCA8IDApCisJCQkJLyogYW4gSS9PIGVycm9yIG9jY3VycmVkLCBhbHJlYWR5IHJlcG9ydGVkICovCisJCQkJZXhpdCgxMjgpOworCQkJaWYgKHJldCA9PSAxKQorCQkJCS8qIExhc3QgZ2MgLS1hdXRvIGZhaWxlZC4gU2tpcCB0aGlzIG9uZS4gKi8KKwkJCQlyZXR1cm4gMDsKKworCQkJaWYgKGxvY2tfcmVwb19mb3JfZ2MoZm9yY2UsICZwaWQpKQorCQkJCXJldHVybiAwOworCQkJZ2NfYmVmb3JlX3JlcGFjaygpOyAvKiBkaWVzIG9uIGZhaWx1cmUgKi8KKwkJCWRlbGV0ZV90ZW1wZmlsZSgmcGlkZmlsZSk7CisKKwkJCS8qCisJCQkgKiBmYWlsdXJlIHRvIGRhZW1vbml6ZSBpcyBvaywgd2UnbGwgY29udGludWUKKwkJCSAqIGluIGZvcmVncm91bmQKKwkJCSAqLworCQkJZGFlbW9uaXplZCA9ICFkYWVtb25pemUoKTsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBrZWVwX3BhY2sgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJCWlmIChrZWVwX2Jhc2VfcGFjayAhPSAtMSkgeworCQkJaWYgKGtlZXBfYmFzZV9wYWNrKQorCQkJCWZpbmRfYmFzZV9wYWNrcygma2VlcF9wYWNrLCAwKTsKKwkJfSBlbHNlIGlmIChiaWdfcGFja190aHJlc2hvbGQpIHsKKwkJCWZpbmRfYmFzZV9wYWNrcygma2VlcF9wYWNrLCBiaWdfcGFja190aHJlc2hvbGQpOworCQl9CisKKwkJYWRkX3JlcGFja19hbGxfb3B0aW9uKCZrZWVwX3BhY2spOworCQlzdHJpbmdfbGlzdF9jbGVhcigma2VlcF9wYWNrLCAwKTsKKwl9CisKKwluYW1lID0gbG9ja19yZXBvX2Zvcl9nYyhmb3JjZSwgJnBpZCk7CisJaWYgKG5hbWUpIHsKKwkJaWYgKGF1dG9fZ2MpCisJCQlyZXR1cm4gMDsgLyogYmUgcXVpZXQgb24gLS1hdXRvICovCisJCWRpZShfKCJnYyBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gbWFjaGluZSAnJXMnIHBpZCAlIlBSSXVNQVgiICh1c2UgLS1mb3JjZSBpZiBub3QpIiksCisJCSAgICBuYW1lLCAodWludG1heF90KXBpZCk7CisJfQorCisJaWYgKGRhZW1vbml6ZWQpIHsKKwkJaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbG9nX2xvY2ssCisJCQkJCSAgZ2l0X3BhdGgoImdjLmxvZyIpLAorCQkJCQkgIExPQ0tfRElFX09OX0VSUk9SKTsKKwkJZHVwMihnZXRfbG9ja19maWxlX2ZkKCZsb2dfbG9jayksIDIpOworCQlzaWdjaGFpbl9wdXNoX2NvbW1vbihwcm9jZXNzX2xvZ19maWxlX29uX3NpZ25hbCk7CisJCWF0ZXhpdChwcm9jZXNzX2xvZ19maWxlX2F0X2V4aXQpOworCX0KKworCWdjX2JlZm9yZV9yZXBhY2soKTsKKworCWlmICghcmVwb3NpdG9yeV9mb3JtYXRfcHJlY2lvdXNfb2JqZWN0cykgeworCQljbG9zZV9vYmplY3Rfc3RvcmUodGhlX3JlcG9zaXRvcnktPm9iamVjdHMpOworCQlpZiAocnVuX2NvbW1hbmRfdl9vcHQocmVwYWNrLmFyZ3YsIFJVTl9HSVRfQ01EKSkKKwkJCWRpZShGQUlMRURfUlVOLCByZXBhY2suYXJndlswXSk7CisKKwkJaWYgKHBydW5lX2V4cGlyZSkgeworCQkJYXJndl9hcnJheV9wdXNoKCZwcnVuZSwgcHJ1bmVfZXhwaXJlKTsKKwkJCWlmIChxdWlldCkKKwkJCQlhcmd2X2FycmF5X3B1c2goJnBydW5lLCAiLS1uby1wcm9ncmVzcyIpOworCQkJaWYgKGhhc19wcm9taXNvcl9yZW1vdGUoKSkKKwkJCQlhcmd2X2FycmF5X3B1c2goJnBydW5lLAorCQkJCQkJIi0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIik7CisJCQlpZiAocnVuX2NvbW1hbmRfdl9vcHQocHJ1bmUuYXJndiwgUlVOX0dJVF9DTUQpKQorCQkJCWRpZShGQUlMRURfUlVOLCBwcnVuZS5hcmd2WzBdKTsKKwkJfQorCX0KKworCWlmIChwcnVuZV93b3JrdHJlZXNfZXhwaXJlKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcHJ1bmVfd29ya3RyZWVzLCBwcnVuZV93b3JrdHJlZXNfZXhwaXJlKTsKKwkJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KHBydW5lX3dvcmt0cmVlcy5hcmd2LCBSVU5fR0lUX0NNRCkpCisJCQlkaWUoRkFJTEVEX1JVTiwgcHJ1bmVfd29ya3RyZWVzLmFyZ3ZbMF0pOworCX0KKworCWlmIChydW5fY29tbWFuZF92X29wdChyZXJlcmUuYXJndiwgUlVOX0dJVF9DTUQpKQorCQlkaWUoRkFJTEVEX1JVTiwgcmVyZXJlLmFyZ3ZbMF0pOworCisJcmVwb3J0X2dhcmJhZ2UgPSByZXBvcnRfcGFja19nYXJiYWdlOworCXJlcHJlcGFyZV9wYWNrZWRfZ2l0KHRoZV9yZXBvc2l0b3J5KTsKKwlpZiAocGFja19nYXJiYWdlLm5yID4gMCkgeworCQljbG9zZV9vYmplY3Rfc3RvcmUodGhlX3JlcG9zaXRvcnktPm9iamVjdHMpOworCQljbGVhbl9wYWNrX2dhcmJhZ2UoKTsKKwl9CisKKwlwcmVwYXJlX3JlcG9fc2V0dGluZ3ModGhlX3JlcG9zaXRvcnkpOworCWlmICh0aGVfcmVwb3NpdG9yeS0+c2V0dGluZ3MuZ2Nfd3JpdGVfY29tbWl0X2dyYXBoID09IDEpCisJCXdyaXRlX2NvbW1pdF9ncmFwaF9yZWFjaGFibGUodGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPm9kYiwKKwkJCQkJICAgICAhcXVpZXQgJiYgIWRhZW1vbml6ZWQgPyBDT01NSVRfR1JBUEhfV1JJVEVfUFJPR1JFU1MgOiAwLAorCQkJCQkgICAgIE5VTEwpOworCisJaWYgKGF1dG9fZ2MgJiYgdG9vX21hbnlfbG9vc2Vfb2JqZWN0cygpKQorCQl3YXJuaW5nKF8oIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyAiCisJCQkicnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIpKTsKKworCWlmICghZGFlbW9uaXplZCkKKwkJdW5saW5rKGdpdF9wYXRoKCJnYy5sb2ciKSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZ2V0LXRhci1jb21taXQtaWQuYyBiL2J1aWx0aW4vZ2V0LXRhci1jb21taXQtaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTFhZjkyCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9nZXQtdGFyLWNvbW1pdC1pZC5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUmVuZSBTY2hhcmZlCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhci5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciBidWlsdGluX2dldF90YXJfY29tbWl0X2lkX3VzYWdlW10gPQorImdpdCBnZXQtdGFyLWNvbW1pdC1pZCI7CisKKy8qIHVzdGFyIGhlYWRlciArIGV4dGVuZGVkIGdsb2JhbCBoZWFkZXIgY29udGVudCAqLworI2RlZmluZSBSRUNPUkRTSVpFCSg1MTIpCisjZGVmaW5lIEhFQURFUlNJWkUgKDIgKiBSRUNPUkRTSVpFKQorCitpbnQgY21kX2dldF90YXJfY29tbWl0X2lkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNoYXIgYnVmZmVyW0hFQURFUlNJWkVdOworCXN0cnVjdCB1c3Rhcl9oZWFkZXIgKmhlYWRlciA9IChzdHJ1Y3QgdXN0YXJfaGVhZGVyICopYnVmZmVyOworCWNoYXIgKmNvbnRlbnQgPSBidWZmZXIgKyBSRUNPUkRTSVpFOworCWNvbnN0IGNoYXIgKmNvbW1lbnQ7CisJc3NpemVfdCBuOworCWxvbmcgbGVuOworCWNoYXIgKmVuZDsKKworCWlmIChhcmdjICE9IDEpCisJCXVzYWdlKGJ1aWx0aW5fZ2V0X3Rhcl9jb21taXRfaWRfdXNhZ2UpOworCisJbiA9IHJlYWRfaW5fZnVsbCgwLCBidWZmZXIsIEhFQURFUlNJWkUpOworCWlmIChuIDwgMCkKKwkJZGllX2Vycm5vKCJnaXQgZ2V0LXRhci1jb21taXQtaWQ6IHJlYWQgZXJyb3IiKTsKKwlpZiAobiAhPSBIRUFERVJTSVpFKQorCQlkaWVfZXJybm8oImdpdCBnZXQtdGFyLWNvbW1pdC1pZDogRU9GIGJlZm9yZSByZWFkaW5nIHRhciBoZWFkZXIiKTsKKwlpZiAoaGVhZGVyLT50eXBlZmxhZ1swXSAhPSAnZycpCisJCXJldHVybiAxOworCisJbGVuID0gc3RydG9sKGNvbnRlbnQsICZlbmQsIDEwKTsKKwlpZiAoZXJybm8gPT0gRVJBTkdFIHx8IGVuZCA9PSBjb250ZW50IHx8IGxlbiA8IDApCisJCXJldHVybiAxOworCWlmICghc2tpcF9wcmVmaXgoZW5kLCAiIGNvbW1lbnQ9IiwgJmNvbW1lbnQpKQorCQlyZXR1cm4gMTsKKwlsZW4gLT0gY29tbWVudCAtIGNvbnRlbnQ7CisJaWYgKGxlbiA8IDEgfHwgIShsZW4gJSAyKSB8fAorCSAgICBoYXNoX2FsZ29fYnlfbGVuZ3RoKChsZW4gLSAxKSAvIDIpID09IEdJVF9IQVNIX1VOS05PV04pCisJCXJldHVybiAxOworCisJaWYgKHdyaXRlX2luX2Z1bGwoMSwgY29tbWVudCwgbGVuKSA8IDApCisJCWRpZV9lcnJubygiZ2l0IGdldC10YXItY29tbWl0LWlkOiB3cml0ZSBlcnJvciIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2dyZXAuYyBiL2J1aWx0aW4vZ3JlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MDU2ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2dyZXAuYwpAQCAtMCwwICsxLDExNzQgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgZ3JlcCIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyAqLworI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorI2luY2x1ZGUgImdyZXAuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgZ3JlcF91c2FnZVtdID0geworCU5fKCJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHJlY3Vyc2Vfc3VibW9kdWxlczsKKworc3RhdGljIGludCBudW1fdGhyZWFkczsKKworc3RhdGljIHB0aHJlYWRfdCAqdGhyZWFkczsKKworLyogV2UgdXNlIG9uZSBwcm9kdWNlciB0aHJlYWQgYW5kIFRIUkVBRFMgY29uc3VtZXIKKyAqIHRocmVhZHMuIFRoZSBwcm9kdWNlciBhZGRzIHN0cnVjdCB3b3JrX2l0ZW1zIHRvICd0b2RvJyBhbmQgdGhlCisgKiBjb25zdW1lcnMgcGljayB3b3JrIGl0ZW1zIGZyb20gdGhlIHNhbWUgYXJyYXkuCisgKi8KK3N0cnVjdCB3b3JrX2l0ZW0geworCXN0cnVjdCBncmVwX3NvdXJjZSBzb3VyY2U7CisJY2hhciBkb25lOworCXN0cnVjdCBzdHJidWYgb3V0OworfTsKKworLyogSW4gdGhlIHJhbmdlIFt0b2RvX2RvbmUsIHRvZG9fc3RhcnQpIGluICd0b2RvJyB3ZSBoYXZlIHdvcmtfaXRlbXMKKyAqIHRoYXQgaGF2ZSBiZWVuIG9yIGFyZSBwcm9jZXNzZWQgYnkgYSBjb25zdW1lciB0aHJlYWQuIFdlIGhhdmVuJ3QKKyAqIHdyaXR0ZW4gdGhlIHJlc3VsdCBmb3IgdGhlc2UgdG8gc3Rkb3V0IHlldC4KKyAqCisgKiBUaGUgd29ya19pdGVtcyBpbiBbdG9kb19zdGFydCwgdG9kb19lbmQpIGFyZSB3YWl0aW5nIHRvIGJlIHBpY2tlZAorICogdXAgYnkgYSBjb25zdW1lciB0aHJlYWQuCisgKgorICogVGhlIHJhbmdlcyBhcmUgbW9kdWxvIFRPRE9fU0laRS4KKyAqLworI2RlZmluZSBUT0RPX1NJWkUgMTI4CitzdGF0aWMgc3RydWN0IHdvcmtfaXRlbSB0b2RvW1RPRE9fU0laRV07CitzdGF0aWMgaW50IHRvZG9fc3RhcnQ7CitzdGF0aWMgaW50IHRvZG9fZW5kOworc3RhdGljIGludCB0b2RvX2RvbmU7CisKKy8qIEhhcyBhbGwgd29yayBpdGVtcyBiZWVuIGFkZGVkPyAqLworc3RhdGljIGludCBhbGxfd29ya19hZGRlZDsKKworLyogVGhpcyBsb2NrIHByb3RlY3RzIGFsbCB0aGUgdmFyaWFibGVzIGFib3ZlLiAqLworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBncmVwX211dGV4OworCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JlcF9sb2NrKHZvaWQpCit7CisJcHRocmVhZF9tdXRleF9sb2NrKCZncmVwX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyZXBfdW5sb2NrKHZvaWQpCit7CisJcHRocmVhZF9tdXRleF91bmxvY2soJmdyZXBfbXV0ZXgpOworfQorCisvKiBTaWduYWxsZWQgd2hlbiBhIG5ldyB3b3JrX2l0ZW0gaXMgYWRkZWQgdG8gdG9kby4gKi8KK3N0YXRpYyBwdGhyZWFkX2NvbmRfdCBjb25kX2FkZDsKKworLyogU2lnbmFsbGVkIHdoZW4gdGhlIHJlc3VsdCBmcm9tIG9uZSB3b3JrX2l0ZW0gaXMgd3JpdHRlbiB0bworICogc3Rkb3V0LgorICovCitzdGF0aWMgcHRocmVhZF9jb25kX3QgY29uZF93cml0ZTsKKworLyogU2lnbmFsbGVkIHdoZW4gd2UgYXJlIGZpbmlzaGVkIHdpdGggZXZlcnl0aGluZy4gKi8KK3N0YXRpYyBwdGhyZWFkX2NvbmRfdCBjb25kX3Jlc3VsdDsKKworc3RhdGljIGludCBza2lwX2ZpcnN0X2xpbmU7CisKK3N0YXRpYyB2b2lkIGFkZF93b3JrKHN0cnVjdCBncmVwX29wdCAqb3B0LCBzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKQoreworCWlmIChvcHQtPmJpbmFyeSAhPSBHUkVQX0JJTkFSWV9URVhUKQorCQlncmVwX3NvdXJjZV9sb2FkX2RyaXZlcihncywgb3B0LT5yZXBvLT5pbmRleCk7CisKKwlncmVwX2xvY2soKTsKKworCXdoaWxlICgodG9kb19lbmQrMSkgJSBBUlJBWV9TSVpFKHRvZG8pID09IHRvZG9fZG9uZSkgeworCQlwdGhyZWFkX2NvbmRfd2FpdCgmY29uZF93cml0ZSwgJmdyZXBfbXV0ZXgpOworCX0KKworCXRvZG9bdG9kb19lbmRdLnNvdXJjZSA9ICpnczsKKwl0b2RvW3RvZG9fZW5kXS5kb25lID0gMDsKKwlzdHJidWZfcmVzZXQoJnRvZG9bdG9kb19lbmRdLm91dCk7CisJdG9kb19lbmQgPSAodG9kb19lbmQgKyAxKSAlIEFSUkFZX1NJWkUodG9kbyk7CisKKwlwdGhyZWFkX2NvbmRfc2lnbmFsKCZjb25kX2FkZCk7CisJZ3JlcF91bmxvY2soKTsKK30KKworc3RhdGljIHN0cnVjdCB3b3JrX2l0ZW0gKmdldF93b3JrKHZvaWQpCit7CisJc3RydWN0IHdvcmtfaXRlbSAqcmV0OworCisJZ3JlcF9sb2NrKCk7CisJd2hpbGUgKHRvZG9fc3RhcnQgPT0gdG9kb19lbmQgJiYgIWFsbF93b3JrX2FkZGVkKSB7CisJCXB0aHJlYWRfY29uZF93YWl0KCZjb25kX2FkZCwgJmdyZXBfbXV0ZXgpOworCX0KKworCWlmICh0b2RvX3N0YXJ0ID09IHRvZG9fZW5kICYmIGFsbF93b3JrX2FkZGVkKSB7CisJCXJldCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJcmV0ID0gJnRvZG9bdG9kb19zdGFydF07CisJCXRvZG9fc3RhcnQgPSAodG9kb19zdGFydCArIDEpICUgQVJSQVlfU0laRSh0b2RvKTsKKwl9CisJZ3JlcF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3b3JrX2RvbmUoc3RydWN0IHdvcmtfaXRlbSAqdykKK3sKKwlpbnQgb2xkX2RvbmU7CisKKwlncmVwX2xvY2soKTsKKwl3LT5kb25lID0gMTsKKwlvbGRfZG9uZSA9IHRvZG9fZG9uZTsKKwlmb3IoOyB0b2RvW3RvZG9fZG9uZV0uZG9uZSAmJiB0b2RvX2RvbmUgIT0gdG9kb19zdGFydDsKKwkgICAgdG9kb19kb25lID0gKHRvZG9fZG9uZSsxKSAlIEFSUkFZX1NJWkUodG9kbykpIHsKKwkJdyA9ICZ0b2RvW3RvZG9fZG9uZV07CisJCWlmICh3LT5vdXQubGVuKSB7CisJCQljb25zdCBjaGFyICpwID0gdy0+b3V0LmJ1ZjsKKwkJCXNpemVfdCBsZW4gPSB3LT5vdXQubGVuOworCisJCQkvKiBTa2lwIHRoZSBsZWFkaW5nIGh1bmsgbWFyayBvZiB0aGUgZmlyc3QgZmlsZS4gKi8KKwkJCWlmIChza2lwX2ZpcnN0X2xpbmUpIHsKKwkJCQl3aGlsZSAobGVuKSB7CisJCQkJCWxlbi0tOworCQkJCQlpZiAoKnArKyA9PSAnXG4nKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXNraXBfZmlyc3RfbGluZSA9IDA7CisJCQl9CisKKwkJCXdyaXRlX29yX2RpZSgxLCBwLCBsZW4pOworCQl9CisJCWdyZXBfc291cmNlX2NsZWFyKCZ3LT5zb3VyY2UpOworCX0KKworCWlmIChvbGRfZG9uZSAhPSB0b2RvX2RvbmUpCisJCXB0aHJlYWRfY29uZF9zaWduYWwoJmNvbmRfd3JpdGUpOworCisJaWYgKGFsbF93b3JrX2FkZGVkICYmIHRvZG9fZG9uZSA9PSB0b2RvX2VuZCkKKwkJcHRocmVhZF9jb25kX3NpZ25hbCgmY29uZF9yZXN1bHQpOworCisJZ3JlcF91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgKnJ1bih2b2lkICphcmcpCit7CisJaW50IGhpdCA9IDA7CisJc3RydWN0IGdyZXBfb3B0ICpvcHQgPSBhcmc7CisKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3Qgd29ya19pdGVtICp3ID0gZ2V0X3dvcmsoKTsKKwkJaWYgKCF3KQorCQkJYnJlYWs7CisKKwkJb3B0LT5vdXRwdXRfcHJpdiA9IHc7CisJCWhpdCB8PSBncmVwX3NvdXJjZShvcHQsICZ3LT5zb3VyY2UpOworCQlncmVwX3NvdXJjZV9jbGVhcl9kYXRhKCZ3LT5zb3VyY2UpOworCQl3b3JrX2RvbmUodyk7CisJfQorCWZyZWVfZ3JlcF9wYXR0ZXJucyhhcmcpOworCWZyZWUoYXJnKTsKKworCXJldHVybiAodm9pZCopIChpbnRwdHJfdCkgaGl0OworfQorCitzdGF0aWMgdm9pZCBzdHJidWZfb3V0KHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB3b3JrX2l0ZW0gKncgPSBvcHQtPm91dHB1dF9wcml2OworCXN0cmJ1Zl9hZGQoJnctPm91dCwgYnVmLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgc3RhcnRfdGhyZWFkcyhzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKK3sKKwlpbnQgaTsKKworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmZ3JlcF9tdXRleCwgTlVMTCk7CisJcHRocmVhZF9tdXRleF9pbml0KCZncmVwX2F0dHJfbXV0ZXgsIE5VTEwpOworCXB0aHJlYWRfY29uZF9pbml0KCZjb25kX2FkZCwgTlVMTCk7CisJcHRocmVhZF9jb25kX2luaXQoJmNvbmRfd3JpdGUsIE5VTEwpOworCXB0aHJlYWRfY29uZF9pbml0KCZjb25kX3Jlc3VsdCwgTlVMTCk7CisJZ3JlcF91c2VfbG9ja3MgPSAxOworCWVuYWJsZV9vYmpfcmVhZF9sb2NrKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0b2RvKTsgaSsrKSB7CisJCXN0cmJ1Zl9pbml0KCZ0b2RvW2ldLm91dCwgMCk7CisJfQorCisJdGhyZWFkcyA9IHhjYWxsb2MobnVtX3RocmVhZHMsIHNpemVvZigqdGhyZWFkcykpOworCWZvciAoaSA9IDA7IGkgPCBudW1fdGhyZWFkczsgaSsrKSB7CisJCWludCBlcnI7CisJCXN0cnVjdCBncmVwX29wdCAqbyA9IGdyZXBfb3B0X2R1cChvcHQpOworCQlvLT5vdXRwdXQgPSBzdHJidWZfb3V0OworCQlpZiAoaSkKKwkJCW8tPmRlYnVnID0gMDsKKwkJY29tcGlsZV9ncmVwX3BhdHRlcm5zKG8pOworCQllcnIgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkc1tpXSwgTlVMTCwgcnVuLCBvKTsKKworCQlpZiAoZXJyKQorCQkJZGllKF8oImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIpLAorCQkJICAgIHN0cmVycm9yKGVycikpOworCX0KK30KKworc3RhdGljIGludCB3YWl0X2FsbCh2b2lkKQoreworCWludCBoaXQgPSAwOworCWludCBpOworCisJaWYgKCFIQVZFX1RIUkVBRFMpCisJCUJVRygiTmV2ZXIgY2FsbCB0aGlzIGZ1bmN0aW9uIHVubGVzcyB5b3UgaGF2ZSBzdGFydGVkIHRocmVhZHMiKTsKKworCWdyZXBfbG9jaygpOworCWFsbF93b3JrX2FkZGVkID0gMTsKKworCS8qIFdhaXQgdW50aWwgYWxsIHdvcmsgaXMgZG9uZS4gKi8KKwl3aGlsZSAodG9kb19kb25lICE9IHRvZG9fZW5kKQorCQlwdGhyZWFkX2NvbmRfd2FpdCgmY29uZF9yZXN1bHQsICZncmVwX211dGV4KTsKKworCS8qIFdha2UgdXAgYWxsIHRoZSBjb25zdW1lciB0aHJlYWRzIHNvIHRoZXkgY2FuIHNlZSB0aGF0IHRoZXJlCisJICogaXMgbm8gbW9yZSB3b3JrIHRvIGRvLgorCSAqLworCXB0aHJlYWRfY29uZF9icm9hZGNhc3QoJmNvbmRfYWRkKTsKKwlncmVwX3VubG9jaygpOworCisJZm9yIChpID0gMDsgaSA8IG51bV90aHJlYWRzOyBpKyspIHsKKwkJdm9pZCAqaDsKKwkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sICZoKTsKKwkJaGl0IHw9IChpbnQpIChpbnRwdHJfdCkgaDsKKwl9CisKKwlmcmVlKHRocmVhZHMpOworCisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZncmVwX211dGV4KTsKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmdyZXBfYXR0cl9tdXRleCk7CisJcHRocmVhZF9jb25kX2Rlc3Ryb3koJmNvbmRfYWRkKTsKKwlwdGhyZWFkX2NvbmRfZGVzdHJveSgmY29uZF93cml0ZSk7CisJcHRocmVhZF9jb25kX2Rlc3Ryb3koJmNvbmRfcmVzdWx0KTsKKwlncmVwX3VzZV9sb2NrcyA9IDA7CisJZGlzYWJsZV9vYmpfcmVhZF9sb2NrKCk7CisKKwlyZXR1cm4gaGl0OworfQorCitzdGF0aWMgaW50IGdyZXBfY21kX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpbnQgc3QgPSBncmVwX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisJaWYgKGdpdF9jb2xvcl9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYikgPCAwKQorCQlzdCA9IC0xOworCisJaWYgKCFzdHJjbXAodmFyLCAiZ3JlcC50aHJlYWRzIikpIHsKKwkJbnVtX3RocmVhZHMgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJaWYgKG51bV90aHJlYWRzIDwgMCkKKwkJCWRpZShfKCJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIGZvciAlcyIpLAorCQkJICAgIG51bV90aHJlYWRzLCB2YXIpOworCQllbHNlIGlmICghSEFWRV9USFJFQURTICYmIG51bV90aHJlYWRzID4gMSkgeworCQkJLyoKKwkJCSAqIFRSQU5TTEFUT1JTOiAlcyBpcyB0aGUgY29uZmlndXJhdGlvbgorCQkJICogdmFyaWFibGUgZm9yIHR3ZWFraW5nIHRocmVhZHMsIGN1cnJlbnRseQorCQkJICogZ3JlcC50aHJlYWRzCisJCQkgKi8KKwkJCXdhcm5pbmcoXygibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIpLCB2YXIpOworCQkJbnVtX3RocmVhZHMgPSAxOworCQl9CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAic3VibW9kdWxlLnJlY3Vyc2UiKSkKKwkJcmVjdXJzZV9zdWJtb2R1bGVzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCisJcmV0dXJuIHN0OworfQorCitzdGF0aWMgdm9pZCBncmVwX3NvdXJjZV9uYW1lKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCSAgICAgaW50IHRyZWVfbmFtZV9sZW4sIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlzdHJidWZfcmVzZXQob3V0KTsKKworCWlmIChvcHQtPm51bGxfZm9sbG93aW5nX25hbWUpIHsKKwkJaWYgKG9wdC0+cmVsYXRpdmUgJiYgb3B0LT5wcmVmaXhfbGVuZ3RoKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHJlbF9idWYgPSBTVFJCVUZfSU5JVDsKKwkJCWNvbnN0IGNoYXIgKnJlbF9uYW1lID0KKwkJCQlyZWxhdGl2ZV9wYXRoKGZpbGVuYW1lICsgdHJlZV9uYW1lX2xlbiwKKwkJCQkJICAgICAgb3B0LT5wcmVmaXgsICZyZWxfYnVmKTsKKworCQkJaWYgKHRyZWVfbmFtZV9sZW4pCisJCQkJc3RyYnVmX2FkZChvdXQsIGZpbGVuYW1lLCB0cmVlX25hbWVfbGVuKTsKKworCQkJc3RyYnVmX2FkZHN0cihvdXQsIHJlbF9uYW1lKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZyZWxfYnVmKTsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCBmaWxlbmFtZSk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWlmIChvcHQtPnJlbGF0aXZlICYmIG9wdC0+cHJlZml4X2xlbmd0aCkKKwkJcXVvdGVfcGF0aF9yZWxhdGl2ZShmaWxlbmFtZSArIHRyZWVfbmFtZV9sZW4sIG9wdC0+cHJlZml4LCBvdXQpOworCWVsc2UKKwkJcXVvdGVfY19zdHlsZShmaWxlbmFtZSArIHRyZWVfbmFtZV9sZW4sIG91dCwgTlVMTCwgMCk7CisKKwlpZiAodHJlZV9uYW1lX2xlbikKKwkJc3RyYnVmX2luc2VydChvdXQsIDAsIGZpbGVuYW1lLCB0cmVlX25hbWVfbGVuKTsKK30KKworc3RhdGljIGludCBncmVwX29pZChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgdHJlZV9uYW1lX2xlbiwKKwkJICAgICBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJidWYgcGF0aGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBncmVwX3NvdXJjZSBnczsKKworCWdyZXBfc291cmNlX25hbWUob3B0LCBmaWxlbmFtZSwgdHJlZV9uYW1lX2xlbiwgJnBhdGhidWYpOworCWdyZXBfc291cmNlX2luaXQoJmdzLCBHUkVQX1NPVVJDRV9PSUQsIHBhdGhidWYuYnVmLCBwYXRoLCBvaWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoYnVmKTsKKworCWlmIChudW1fdGhyZWFkcyA+IDEpIHsKKwkJLyoKKwkJICogYWRkX3dvcmsoKSBjb3BpZXMgZ3MgYW5kIHRodXMgYXNzdW1lcyBvd25lcnNoaXAgb2YKKwkJICogaXRzIGZpZWxkcywgc28gZG8gbm90IGNhbGwgZ3JlcF9zb3VyY2VfY2xlYXIoKQorCQkgKi8KKwkJYWRkX3dvcmsob3B0LCAmZ3MpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlpbnQgaGl0OworCisJCWhpdCA9IGdyZXBfc291cmNlKG9wdCwgJmdzKTsKKworCQlncmVwX3NvdXJjZV9jbGVhcigmZ3MpOworCQlyZXR1cm4gaGl0OworCX0KK30KKworc3RhdGljIGludCBncmVwX2ZpbGUoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGdyZXBfc291cmNlIGdzOworCisJZ3JlcF9zb3VyY2VfbmFtZShvcHQsIGZpbGVuYW1lLCAwLCAmYnVmKTsKKwlncmVwX3NvdXJjZV9pbml0KCZncywgR1JFUF9TT1VSQ0VfRklMRSwgYnVmLmJ1ZiwgZmlsZW5hbWUsIGZpbGVuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCWlmIChudW1fdGhyZWFkcyA+IDEpIHsKKwkJLyoKKwkJICogYWRkX3dvcmsoKSBjb3BpZXMgZ3MgYW5kIHRodXMgYXNzdW1lcyBvd25lcnNoaXAgb2YKKwkJICogaXRzIGZpZWxkcywgc28gZG8gbm90IGNhbGwgZ3JlcF9zb3VyY2VfY2xlYXIoKQorCQkgKi8KKwkJYWRkX3dvcmsob3B0LCAmZ3MpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlpbnQgaGl0OworCisJCWhpdCA9IGdyZXBfc291cmNlKG9wdCwgJmdzKTsKKworCQlncmVwX3NvdXJjZV9jbGVhcigmZ3MpOworCQlyZXR1cm4gaGl0OworCX0KK30KKworc3RhdGljIHZvaWQgYXBwZW5kX3BhdGgoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpwYXRoX2xpc3QgPSBvcHQtPm91dHB1dF9wcml2OworCisJaWYgKGxlbiA9PSAxICYmICooY29uc3QgY2hhciAqKWRhdGEgPT0gJ1wwJykKKwkJcmV0dXJuOworCXN0cmluZ19saXN0X2FwcGVuZChwYXRoX2xpc3QsIHhzdHJuZHVwKGRhdGEsIGxlbikpOworfQorCitzdGF0aWMgdm9pZCBydW5fcGFnZXIoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBhdGhfbGlzdCA9IG9wdC0+b3V0cHV0X3ByaXY7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hpbGQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJaW50IGksIHN0YXR1czsKKworCWZvciAoaSA9IDA7IGkgPCBwYXRoX2xpc3QtPm5yOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgcGF0aF9saXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCWNoaWxkLmRpciA9IHByZWZpeDsKKwljaGlsZC51c2Vfc2hlbGwgPSAxOworCisJc3RhdHVzID0gcnVuX2NvbW1hbmQoJmNoaWxkKTsKKwlpZiAoc3RhdHVzKQorCQlleGl0KHN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF9jYWNoZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwKKwkJICAgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywgaW50IGNhY2hlZCk7CitzdGF0aWMgaW50IGdyZXBfdHJlZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJICAgICBzdHJ1Y3QgdHJlZV9kZXNjICp0cmVlLCBzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBpbnQgdG5fbGVuLAorCQkgICAgIGludCBjaGVja19hdHRyKTsKKworc3RhdGljIGludCBncmVwX3N1Ym1vZHVsZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwKKwkJCSAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqcGF0aCwgaW50IGNhY2hlZCkKK3sKKwlzdHJ1Y3QgcmVwb3NpdG9yeSBzdWJyZXBvOworCXN0cnVjdCByZXBvc2l0b3J5ICpzdXBlcnByb2plY3QgPSBvcHQtPnJlcG87CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViOworCXN0cnVjdCBncmVwX29wdCBzdWJvcHQ7CisJaW50IGhpdDsKKworCXN1YiA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgoc3VwZXJwcm9qZWN0LCAmbnVsbF9vaWQsIHBhdGgpOworCisJaWYgKCFpc19zdWJtb2R1bGVfYWN0aXZlKHN1cGVycHJvamVjdCwgcGF0aCkpCisJCXJldHVybiAwOworCisJaWYgKHJlcG9fc3VibW9kdWxlX2luaXQoJnN1YnJlcG8sIHN1cGVycHJvamVjdCwgc3ViKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIE5FRURTV09SSzogcmVwb19yZWFkX2dpdG1vZHVsZXMoKSBtaWdodCBjYWxsCisJICogYWRkX3RvX2FsdGVybmF0ZXNfbWVtb3J5KCkgdmlhIGNvbmZpZ19mcm9tX2dpdG1vZHVsZXMoKS4gVGhpcworCSAqIG9wZXJhdGlvbiBjYXVzZXMgYSByYWNlIGNvbmRpdGlvbiB3aXRoIGNvbmN1cnJlbnQgb2JqZWN0IHJlYWRpbmdzCisJICogcGVyZm9ybWVkIGJ5IHRoZSB3b3JrZXIgdGhyZWFkcy4gVGhhdCdzIHdoeSB3ZSBuZWVkIG9ial9yZWFkX2xvY2soKQorCSAqIGhlcmUuIEl0IHNob3VsZCBiZSByZW1vdmVkIG9uY2UgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIGFkZCB0aGUKKwkgKiBzdWJyZXBvJ3Mgb2RicyB0byB0aGUgaW4tbWVtb3J5IGFsdGVybmF0ZXMgbGlzdC4KKwkgKi8KKwlvYmpfcmVhZF9sb2NrKCk7CisJcmVwb19yZWFkX2dpdG1vZHVsZXMoJnN1YnJlcG8sIDApOworCisJLyoKKwkgKiBORUVEU1dPUks6IFRoaXMgYWRkcyB0aGUgc3VibW9kdWxlJ3Mgb2JqZWN0IGRpcmVjdG9yeSB0byB0aGUgbGlzdCBvZgorCSAqIGFsdGVybmF0ZXMgZm9yIHRoZSBzaW5nbGUgaW4tbWVtb3J5IG9iamVjdCBzdG9yZS4gIFRoaXMgaGFzIHNvbWUgYmFkCisJICogY29uc2VxdWVuY2VzIGZvciBtZW1vcnkgKHByb2Nlc3NlZCBvYmplY3RzIHdpbGwgbmV2ZXIgYmUgZnJlZWQpIGFuZAorCSAqIHBlcmZvcm1hbmNlICh0aGlzIGluY3JlYXNlcyB0aGUgbnVtYmVyIG9mIHBhY2sgZmlsZXMgZ2l0IGhhcyB0byBwYXkKKwkgKiBhdHRlbnRpb24gdG8sIHRvIHRoZSBzdW0gb2YgdGhlIG51bWJlciBvZiBwYWNrIGZpbGVzIGluIGFsbCB0aGUKKwkgKiByZXBvc2l0b3JpZXMgcHJvY2Vzc2VkIHNvIGZhcikuICBUaGlzIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhlIG9iamVjdAorCSAqIHN0b3JlIGlzIG5vIGxvbmdlciBnbG9iYWwgYW5kIGluc3RlYWQgaXMgYSBtZW1iZXIgb2YgdGhlIHJlcG9zaXRvcnkKKwkgKiBvYmplY3QuCisJICovCisJYWRkX3RvX2FsdGVybmF0ZXNfbWVtb3J5KHN1YnJlcG8ub2JqZWN0cy0+b2RiLT5wYXRoKTsKKwlvYmpfcmVhZF91bmxvY2soKTsKKworCW1lbWNweSgmc3Vib3B0LCBvcHQsIHNpemVvZihzdWJvcHQpKTsKKwlzdWJvcHQucmVwbyA9ICZzdWJyZXBvOworCisJaWYgKG9pZCkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisJCXN0cnVjdCB0cmVlX2Rlc2MgdHJlZTsKKwkJdm9pZCAqZGF0YTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQlzdHJ1Y3Qgc3RyYnVmIGJhc2UgPSBTVFJCVUZfSU5JVDsKKworCQlvYmpfcmVhZF9sb2NrKCk7CisJCW9iamVjdCA9IHBhcnNlX29iamVjdF9vcl9kaWUob2lkLCBvaWRfdG9faGV4KG9pZCkpOworCQlvYmpfcmVhZF91bmxvY2soKTsKKwkJZGF0YSA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKCZzdWJyZXBvLAorCQkJCQkJICAmb2JqZWN0LT5vaWQsIHRyZWVfdHlwZSwKKwkJCQkJCSAgJnNpemUsIE5VTEwpOworCQlpZiAoIWRhdGEpCisJCQlkaWUoXygidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIiksIG9pZF90b19oZXgoJm9iamVjdC0+b2lkKSk7CisKKwkJc3RyYnVmX2FkZHN0cigmYmFzZSwgZmlsZW5hbWUpOworCQlzdHJidWZfYWRkY2goJmJhc2UsICcvJyk7CisKKwkJaW5pdF90cmVlX2Rlc2MoJnRyZWUsIGRhdGEsIHNpemUpOworCQloaXQgPSBncmVwX3RyZWUoJnN1Ym9wdCwgcGF0aHNwZWMsICZ0cmVlLCAmYmFzZSwgYmFzZS5sZW4sCisJCQkJb2JqZWN0LT50eXBlID09IE9CSl9DT01NSVQpOworCQlzdHJidWZfcmVsZWFzZSgmYmFzZSk7CisJCWZyZWUoZGF0YSk7CisJfSBlbHNlIHsKKwkJaGl0ID0gZ3JlcF9jYWNoZSgmc3Vib3B0LCBwYXRoc3BlYywgY2FjaGVkKTsKKwl9CisKKwlyZXBvX2NsZWFyKCZzdWJyZXBvKTsKKwlyZXR1cm4gaGl0OworfQorCitzdGF0aWMgaW50IGdyZXBfY2FjaGUoc3RydWN0IGdyZXBfb3B0ICpvcHQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsIGludCBjYWNoZWQpCit7CisJc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8gPSBvcHQtPnJlcG87CisJaW50IGhpdCA9IDA7CisJaW50IG5yOworCXN0cnVjdCBzdHJidWYgbmFtZSA9IFNUUkJVRl9JTklUOworCWludCBuYW1lX2Jhc2VfbGVuID0gMDsKKwlpZiAocmVwby0+c3VibW9kdWxlX3ByZWZpeCkgeworCQluYW1lX2Jhc2VfbGVuID0gc3RybGVuKHJlcG8tPnN1Ym1vZHVsZV9wcmVmaXgpOworCQlzdHJidWZfYWRkc3RyKCZuYW1lLCByZXBvLT5zdWJtb2R1bGVfcHJlZml4KTsKKwl9CisKKwlpZiAocmVwb19yZWFkX2luZGV4KHJlcG8pIDwgMCkKKwkJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKworCWZvciAobnIgPSAwOyBuciA8IHJlcG8tPmluZGV4LT5jYWNoZV9ucjsgbnIrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gcmVwby0+aW5kZXgtPmNhY2hlW25yXTsKKwkJc3RyYnVmX3NldGxlbigmbmFtZSwgbmFtZV9iYXNlX2xlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJm5hbWUsIGNlLT5uYW1lKTsKKworCQlpZiAoU19JU1JFRyhjZS0+Y2VfbW9kZSkgJiYKKwkJICAgIG1hdGNoX3BhdGhzcGVjKHJlcG8tPmluZGV4LCBwYXRoc3BlYywgbmFtZS5idWYsIG5hbWUubGVuLCAwLCBOVUxMLAorCQkJCSAgIFNfSVNESVIoY2UtPmNlX21vZGUpIHx8CisJCQkJICAgU19JU0dJVExJTksoY2UtPmNlX21vZGUpKSkgeworCQkJLyoKKwkJCSAqIElmIENFX1ZBTElEIGlzIG9uLCB3ZSBhc3N1bWUgd29ya3RyZWUgZmlsZSBhbmQgaXRzCisJCQkgKiBjYWNoZSBlbnRyeSBhcmUgaWRlbnRpY2FsLCBldmVuIGlmIHdvcmt0cmVlIGZpbGUgaGFzCisJCQkgKiBiZWVuIG1vZGlmaWVkLCBzbyB1c2UgY2FjaGUgdmVyc2lvbiBpbnN0ZWFkCisJCQkgKi8KKwkJCWlmIChjYWNoZWQgfHwgKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSB8fAorCQkJICAgIGNlX3NraXBfd29ya3RyZWUoY2UpKSB7CisJCQkJaWYgKGNlX3N0YWdlKGNlKSB8fCBjZV9pbnRlbnRfdG9fYWRkKGNlKSkKKwkJCQkJY29udGludWU7CisJCQkJaGl0IHw9IGdyZXBfb2lkKG9wdCwgJmNlLT5vaWQsIG5hbWUuYnVmLAorCQkJCQkJIDAsIG5hbWUuYnVmKTsKKwkJCX0gZWxzZSB7CisJCQkJaGl0IHw9IGdyZXBfZmlsZShvcHQsIG5hbWUuYnVmKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChyZWN1cnNlX3N1Ym1vZHVsZXMgJiYgU19JU0dJVExJTksoY2UtPmNlX21vZGUpICYmCisJCQkgICBzdWJtb2R1bGVfcGF0aF9tYXRjaChyZXBvLT5pbmRleCwgcGF0aHNwZWMsIG5hbWUuYnVmLCBOVUxMKSkgeworCQkJaGl0IHw9IGdyZXBfc3VibW9kdWxlKG9wdCwgcGF0aHNwZWMsIE5VTEwsIGNlLT5uYW1lLAorCQkJCQkgICAgICBjZS0+bmFtZSwgY2FjaGVkKTsKKwkJfSBlbHNlIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNlX3N0YWdlKGNlKSkgeworCQkJZG8geworCQkJCW5yKys7CisJCQl9IHdoaWxlIChuciA8IHJlcG8tPmluZGV4LT5jYWNoZV9uciAmJgorCQkJCSAhc3RyY21wKGNlLT5uYW1lLCByZXBvLT5pbmRleC0+Y2FjaGVbbnJdLT5uYW1lKSk7CisJCQluci0tOyAvKiBjb21wZW5zYXRlIGZvciBsb29wIGNvbnRyb2wgKi8KKwkJfQorCQlpZiAoaGl0ICYmIG9wdC0+c3RhdHVzX29ubHkpCisJCQlicmVhazsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CisJcmV0dXJuIGhpdDsKK30KKworc3RhdGljIGludCBncmVwX3RyZWUoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCSAgICAgc3RydWN0IHRyZWVfZGVzYyAqdHJlZSwgc3RydWN0IHN0cmJ1ZiAqYmFzZSwgaW50IHRuX2xlbiwKKwkJICAgICBpbnQgY2hlY2tfYXR0cikKK3sKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbyA9IG9wdC0+cmVwbzsKKwlpbnQgaGl0ID0gMDsKKwllbnVtIGludGVyZXN0aW5nIG1hdGNoID0gZW50cnlfbm90X2ludGVyZXN0aW5nOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCWludCBvbGRfYmFzZWxlbiA9IGJhc2UtPmxlbjsKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWUgPSBTVFJCVUZfSU5JVDsKKwlpbnQgbmFtZV9iYXNlX2xlbiA9IDA7CisJaWYgKHJlcG8tPnN1Ym1vZHVsZV9wcmVmaXgpIHsKKwkJc3RyYnVmX2FkZHN0cigmbmFtZSwgcmVwby0+c3VibW9kdWxlX3ByZWZpeCk7CisJCW5hbWVfYmFzZV9sZW4gPSBuYW1lLmxlbjsKKwl9CisKKwl3aGlsZSAodHJlZV9lbnRyeSh0cmVlLCAmZW50cnkpKSB7CisJCWludCB0ZV9sZW4gPSB0cmVlX2VudHJ5X2xlbigmZW50cnkpOworCisJCWlmIChtYXRjaCAhPSBhbGxfZW50cmllc19pbnRlcmVzdGluZykgeworCQkJc3RyYnVmX2FkZHN0cigmbmFtZSwgYmFzZS0+YnVmICsgdG5fbGVuKTsKKwkJCW1hdGNoID0gdHJlZV9lbnRyeV9pbnRlcmVzdGluZyhyZXBvLT5pbmRleCwKKwkJCQkJCSAgICAgICAmZW50cnksICZuYW1lLAorCQkJCQkJICAgICAgIDAsIHBhdGhzcGVjKTsKKwkJCXN0cmJ1Zl9zZXRsZW4oJm5hbWUsIG5hbWVfYmFzZV9sZW4pOworCisJCQlpZiAobWF0Y2ggPT0gYWxsX2VudHJpZXNfbm90X2ludGVyZXN0aW5nKQorCQkJCWJyZWFrOworCQkJaWYgKG1hdGNoID09IGVudHJ5X25vdF9pbnRlcmVzdGluZykKKwkJCQljb250aW51ZTsKKwkJfQorCisJCXN0cmJ1Zl9hZGQoYmFzZSwgZW50cnkucGF0aCwgdGVfbGVuKTsKKworCQlpZiAoU19JU1JFRyhlbnRyeS5tb2RlKSkgeworCQkJaGl0IHw9IGdyZXBfb2lkKG9wdCwgJmVudHJ5Lm9pZCwgYmFzZS0+YnVmLCB0bl9sZW4sCisJCQkJCSBjaGVja19hdHRyID8gYmFzZS0+YnVmICsgdG5fbGVuIDogTlVMTCk7CisJCX0gZWxzZSBpZiAoU19JU0RJUihlbnRyeS5tb2RlKSkgeworCQkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQkJc3RydWN0IHRyZWVfZGVzYyBzdWI7CisJCQl2b2lkICpkYXRhOworCQkJdW5zaWduZWQgbG9uZyBzaXplOworCisJCQlkYXRhID0gcmVhZF9vYmplY3RfZmlsZSgmZW50cnkub2lkLCAmdHlwZSwgJnNpemUpOworCQkJaWYgKCFkYXRhKQorCQkJCWRpZShfKCJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiKSwKKwkJCQkgICAgb2lkX3RvX2hleCgmZW50cnkub2lkKSk7CisKKwkJCXN0cmJ1Zl9hZGRjaChiYXNlLCAnLycpOworCQkJaW5pdF90cmVlX2Rlc2MoJnN1YiwgZGF0YSwgc2l6ZSk7CisJCQloaXQgfD0gZ3JlcF90cmVlKG9wdCwgcGF0aHNwZWMsICZzdWIsIGJhc2UsIHRuX2xlbiwKKwkJCQkJIGNoZWNrX2F0dHIpOworCQkJZnJlZShkYXRhKTsKKwkJfSBlbHNlIGlmIChyZWN1cnNlX3N1Ym1vZHVsZXMgJiYgU19JU0dJVExJTksoZW50cnkubW9kZSkpIHsKKwkJCWhpdCB8PSBncmVwX3N1Ym1vZHVsZShvcHQsIHBhdGhzcGVjLCAmZW50cnkub2lkLAorCQkJCQkgICAgICBiYXNlLT5idWYsIGJhc2UtPmJ1ZiArIHRuX2xlbiwKKwkJCQkJICAgICAgMSk7IC8qIGlnbm9yZWQgKi8KKwkJfQorCisJCXN0cmJ1Zl9zZXRsZW4oYmFzZSwgb2xkX2Jhc2VsZW4pOworCisJCWlmIChoaXQgJiYgb3B0LT5zdGF0dXNfb25seSkKKwkJCWJyZWFrOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwlyZXR1cm4gaGl0OworfQorCitzdGF0aWMgaW50IGdyZXBfb2JqZWN0KHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkgICAgICAgc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoKQoreworCWlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpCisJCXJldHVybiBncmVwX29pZChvcHQsICZvYmotPm9pZCwgbmFtZSwgMCwgcGF0aCk7CisJaWYgKG9iai0+dHlwZSA9PSBPQkpfQ09NTUlUIHx8IG9iai0+dHlwZSA9PSBPQkpfVFJFRSkgeworCQlzdHJ1Y3QgdHJlZV9kZXNjIHRyZWU7CisJCXZvaWQgKmRhdGE7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJc3RydWN0IHN0cmJ1ZiBiYXNlOworCQlpbnQgaGl0LCBsZW47CisKKwkJZGF0YSA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKG9wdC0+cmVwbywKKwkJCQkJCSAgJm9iai0+b2lkLCB0cmVlX3R5cGUsCisJCQkJCQkgICZzaXplLCBOVUxMKTsKKwkJaWYgKCFkYXRhKQorCQkJZGllKF8oInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIpLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCisJCWxlbiA9IG5hbWUgPyBzdHJsZW4obmFtZSkgOiAwOworCQlzdHJidWZfaW5pdCgmYmFzZSwgUEFUSF9NQVggKyBsZW4gKyAxKTsKKwkJaWYgKGxlbikgeworCQkJc3RyYnVmX2FkZCgmYmFzZSwgbmFtZSwgbGVuKTsKKwkJCXN0cmJ1Zl9hZGRjaCgmYmFzZSwgJzonKTsKKwkJfQorCQlpbml0X3RyZWVfZGVzYygmdHJlZSwgZGF0YSwgc2l6ZSk7CisJCWhpdCA9IGdyZXBfdHJlZShvcHQsIHBhdGhzcGVjLCAmdHJlZSwgJmJhc2UsIGJhc2UubGVuLAorCQkJCW9iai0+dHlwZSA9PSBPQkpfQ09NTUlUKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJhc2UpOworCQlmcmVlKGRhdGEpOworCQlyZXR1cm4gaGl0OworCX0KKwlkaWUoXygidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIpLCB0eXBlX25hbWUob2JqLT50eXBlKSk7Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF9vYmplY3RzKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJY29uc3Qgc3RydWN0IG9iamVjdF9hcnJheSAqbGlzdCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgaGl0ID0gMDsKKwljb25zdCB1bnNpZ25lZCBpbnQgbnIgPSBsaXN0LT5ucjsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKnJlYWxfb2JqOworCisJCW9ial9yZWFkX2xvY2soKTsKKwkJcmVhbF9vYmogPSBkZXJlZl90YWcob3B0LT5yZXBvLCBsaXN0LT5vYmplY3RzW2ldLml0ZW0sCisJCQkJICAgICBOVUxMLCAwKTsKKwkJb2JqX3JlYWRfdW5sb2NrKCk7CisKKwkJLyogbG9hZCB0aGUgZ2l0bW9kdWxlcyBmaWxlIGZvciB0aGlzIHJldiAqLworCQlpZiAocmVjdXJzZV9zdWJtb2R1bGVzKSB7CisJCQlzdWJtb2R1bGVfZnJlZShvcHQtPnJlcG8pOworCQkJb2JqX3JlYWRfbG9jaygpOworCQkJZ2l0bW9kdWxlc19jb25maWdfb2lkKCZyZWFsX29iai0+b2lkKTsKKwkJCW9ial9yZWFkX3VubG9jaygpOworCQl9CisJCWlmIChncmVwX29iamVjdChvcHQsIHBhdGhzcGVjLCByZWFsX29iaiwgbGlzdC0+b2JqZWN0c1tpXS5uYW1lLAorCQkJCWxpc3QtPm9iamVjdHNbaV0ucGF0aCkpIHsKKwkJCWhpdCA9IDE7CisJCQlpZiAob3B0LT5zdGF0dXNfb25seSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gaGl0OworfQorCitzdGF0aWMgaW50IGdyZXBfZGlyZWN0b3J5KHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJICBpbnQgZXhjX3N0ZCwgaW50IHVzZV9pbmRleCkKK3sKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CisJaW50IGksIGhpdCA9IDA7CisKKwltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCWlmICghdXNlX2luZGV4KQorCQlkaXIuZmxhZ3MgfD0gRElSX05PX0dJVExJTktTOworCWlmIChleGNfc3RkKQorCQlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKKworCWZpbGxfZGlyZWN0b3J5KCZkaXIsIG9wdC0+cmVwby0+aW5kZXgsIHBhdGhzcGVjKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLm5yOyBpKyspIHsKKwkJaGl0IHw9IGdyZXBfZmlsZShvcHQsIGRpci5lbnRyaWVzW2ldLT5uYW1lKTsKKwkJaWYgKGhpdCAmJiBvcHQtPnN0YXR1c19vbmx5KQorCQkJYnJlYWs7CisJfQorCXJldHVybiBoaXQ7Cit9CisKK3N0YXRpYyBpbnQgY29udGV4dF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJaW50IHZhbHVlOworCWNvbnN0IGNoYXIgKmVuZHA7CisKKwlpZiAodW5zZXQpIHsKKwkJZ3JlcF9vcHQtPnByZV9jb250ZXh0ID0gZ3JlcF9vcHQtPnBvc3RfY29udGV4dCA9IDA7CisJCXJldHVybiAwOworCX0KKwl2YWx1ZSA9IHN0cnRvbChhcmcsIChjaGFyICoqKSZlbmRwLCAxMCk7CisJaWYgKCplbmRwKSB7CisJCXJldHVybiBlcnJvcihfKCJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIiksCisJCQkgICAgIG9wdC0+c2hvcnRfbmFtZSk7CisJfQorCWdyZXBfb3B0LT5wcmVfY29udGV4dCA9IGdyZXBfb3B0LT5wb3N0X2NvbnRleHQgPSB2YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaWxlX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJaW50IGZyb21fc3RkaW47CisJRklMRSAqcGF0dGVybnM7CisJaW50IGxubyA9IDA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJZnJvbV9zdGRpbiA9ICFzdHJjbXAoYXJnLCAiLSIpOworCXBhdHRlcm5zID0gZnJvbV9zdGRpbiA/IHN0ZGluIDogZm9wZW4oYXJnLCAiciIpOworCWlmICghcGF0dGVybnMpCisJCWRpZV9lcnJubyhfKCJjYW5ub3Qgb3BlbiAnJXMnIiksIGFyZyk7CisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZzYiwgcGF0dGVybnMpID09IDApIHsKKwkJLyogaWdub3JlIGVtcHR5IGxpbmUgbGlrZSBncmVwIGRvZXMgKi8KKwkJaWYgKHNiLmxlbiA9PSAwKQorCQkJY29udGludWU7CisKKwkJYXBwZW5kX2dyZXBfcGF0KGdyZXBfb3B0LCBzYi5idWYsIHNiLmxlbiwgYXJnLCArK2xubywKKwkJCQlHUkVQX1BBVFRFUk4pOworCX0KKwlpZiAoIWZyb21fc3RkaW4pCisJCWZjbG9zZShwYXR0ZXJucyk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBub3RfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0ID0gb3B0LT52YWx1ZTsKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJQlVHX09OX09QVF9BUkcoYXJnKTsKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKGdyZXBfb3B0LCAiLS1ub3QiLCAiY29tbWFuZCBsaW5lIiwgMCwgR1JFUF9OT1QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFuZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCWFwcGVuZF9ncmVwX3BhdHRlcm4oZ3JlcF9vcHQsICItLWFuZCIsICJjb21tYW5kIGxpbmUiLCAwLCBHUkVQX0FORCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCWFwcGVuZF9ncmVwX3BhdHRlcm4oZ3JlcF9vcHQsICIoIiwgImNvbW1hbmQgbGluZSIsIDAsIEdSRVBfT1BFTl9QQVJFTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xvc2VfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0ID0gb3B0LT52YWx1ZTsKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJQlVHX09OX09QVF9BUkcoYXJnKTsKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKGdyZXBfb3B0LCAiKSIsICJjb21tYW5kIGxpbmUiLCAwLCBHUkVQX0NMT1NFX1BBUkVOKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXR0ZXJuX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0ID0gb3B0LT52YWx1ZTsKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJYXBwZW5kX2dyZXBfcGF0dGVybihncmVwX29wdCwgYXJnLCAiLWUgb3B0aW9uIiwgMCwgR1JFUF9QQVRURVJOKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9ncmVwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBoaXQgPSAwOworCWludCBjYWNoZWQgPSAwLCB1bnRyYWNrZWQgPSAwLCBvcHRfZXhjbHVkZSA9IC0xOworCWludCBzZWVuX2Rhc2hkYXNoID0gMDsKKwlpbnQgZXh0ZXJuYWxfZ3JlcF9hbGxvd2VkX19pZ25vcmVkOworCWNvbnN0IGNoYXIgKnNob3dfaW5fcGFnZXIgPSBOVUxMLCAqZGVmYXVsdF9wYWdlciA9ICJkdW1teSI7CisJc3RydWN0IGdyZXBfb3B0IG9wdDsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IGxpc3QgPSBPQkpFQ1RfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJc3RydWN0IHN0cmluZ19saXN0IHBhdGhfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJaW50IGk7CisJaW50IGR1bW15OworCWludCB1c2VfaW5kZXggPSAxOworCWludCBwYXR0ZXJuX3R5cGVfYXJnID0gR1JFUF9QQVRURVJOX1RZUEVfVU5TUEVDSUZJRUQ7CisJaW50IGFsbG93X3JldnM7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woMCwgImNhY2hlZCIsICZjYWNoZWQsCisJCQlOXygic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIpKSwKKwkJT1BUX05FR0JJVCgwLCAibm8taW5kZXgiLCAmdXNlX2luZGV4LAorCQkJIE5fKCJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIpLCAxKSwKKwkJT1BUX0JPT0woMCwgInVudHJhY2tlZCIsICZ1bnRyYWNrZWQsCisJCQlOXygic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIikpLAorCQlPUFRfU0VUX0lOVCgwLCAiZXhjbHVkZS1zdGFuZGFyZCIsICZvcHRfZXhjbHVkZSwKKwkJCSAgICBOXygiaWdub3JlIGZpbGVzIHNwZWNpZmllZCB2aWEgJy5naXRpZ25vcmUnIiksIDEpLAorCQlPUFRfQk9PTCgwLCAicmVjdXJzZS1zdWJtb2R1bGVzIiwgJnJlY3Vyc2Vfc3VibW9kdWxlcywKKwkJCSBOXygicmVjdXJzaXZlbHkgc2VhcmNoIGluIGVhY2ggc3VibW9kdWxlIikpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfQk9PTCgndicsICJpbnZlcnQtbWF0Y2giLCAmb3B0LmludmVydCwKKwkJCU5fKCJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIpKSwKKwkJT1BUX0JPT0woJ2knLCAiaWdub3JlLWNhc2UiLCAmb3B0Lmlnbm9yZV9jYXNlLAorCQkJTl8oImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciKSksCisJCU9QVF9CT09MKCd3JywgIndvcmQtcmVnZXhwIiwgJm9wdC53b3JkX3JlZ2V4cCwKKwkJCU5fKCJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIpKSwKKwkJT1BUX1NFVF9JTlQoJ2EnLCAidGV4dCIsICZvcHQuYmluYXJ5LAorCQkJTl8oInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiKSwgR1JFUF9CSU5BUllfVEVYVCksCisJCU9QVF9TRVRfSU5UKCdJJywgTlVMTCwgJm9wdC5iaW5hcnksCisJCQlOXygiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIiksCisJCQlHUkVQX0JJTkFSWV9OT01BVENIKSwKKwkJT1BUX0JPT0woMCwgInRleHRjb252IiwgJm9wdC5hbGxvd190ZXh0Y29udiwKKwkJCSBOXygicHJvY2VzcyBiaW5hcnkgZmlsZXMgd2l0aCB0ZXh0Y29udiBmaWx0ZXJzIikpLAorCQlPUFRfU0VUX0lOVCgncicsICJyZWN1cnNpdmUiLCAmb3B0Lm1heF9kZXB0aCwKKwkJCSAgICBOXygic2VhcmNoIGluIHN1YmRpcmVjdG9yaWVzIChkZWZhdWx0KSIpLCAtMSksCisJCXsgT1BUSU9OX0lOVEVHRVIsIDAsICJtYXgtZGVwdGgiLCAmb3B0Lm1heF9kZXB0aCwgTl8oImRlcHRoIiksCisJCQlOXygiZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4gbGV2ZWxzIiksIFBBUlNFX09QVF9OT05FRywKKwkJCU5VTEwsIDEgfSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX1NFVF9JTlQoJ0UnLCAiZXh0ZW5kZWQtcmVnZXhwIiwgJnBhdHRlcm5fdHlwZV9hcmcsCisJCQkgICAgTl8oInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIiksCisJCQkgICAgR1JFUF9QQVRURVJOX1RZUEVfRVJFKSwKKwkJT1BUX1NFVF9JTlQoJ0cnLCAiYmFzaWMtcmVnZXhwIiwgJnBhdHRlcm5fdHlwZV9hcmcsCisJCQkgICAgTl8oInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIpLAorCQkJICAgIEdSRVBfUEFUVEVSTl9UWVBFX0JSRSksCisJCU9QVF9TRVRfSU5UKCdGJywgImZpeGVkLXN0cmluZ3MiLCAmcGF0dGVybl90eXBlX2FyZywKKwkJCSAgICBOXygiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiKSwKKwkJCSAgICBHUkVQX1BBVFRFUk5fVFlQRV9GSVhFRCksCisJCU9QVF9TRVRfSU5UKCdQJywgInBlcmwtcmVnZXhwIiwgJnBhdHRlcm5fdHlwZV9hcmcsCisJCQkgICAgTl8oInVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIpLAorCQkJICAgIEdSRVBfUEFUVEVSTl9UWVBFX1BDUkUpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfQk9PTCgnbicsICJsaW5lLW51bWJlciIsICZvcHQubGluZW51bSwgTl8oInNob3cgbGluZSBudW1iZXJzIikpLAorCQlPUFRfQk9PTCgwLCAiY29sdW1uIiwgJm9wdC5jb2x1bW5udW0sIE5fKCJzaG93IGNvbHVtbiBudW1iZXIgb2YgZmlyc3QgbWF0Y2giKSksCisJCU9QVF9ORUdCSVQoJ2gnLCBOVUxMLCAmb3B0LnBhdGhuYW1lLCBOXygiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiKSwgMSksCisJCU9QVF9CSVQoJ0gnLCBOVUxMLCAmb3B0LnBhdGhuYW1lLCBOXygic2hvdyBmaWxlbmFtZXMiKSwgMSksCisJCU9QVF9ORUdCSVQoMCwgImZ1bGwtbmFtZSIsICZvcHQucmVsYXRpdmUsCisJCQlOXygic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIpLCAxKSwKKwkJT1BUX0JPT0woJ2wnLCAiZmlsZXMtd2l0aC1tYXRjaGVzIiwgJm9wdC5uYW1lX29ubHksCisJCQlOXygic2hvdyBvbmx5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIikpLAorCQlPUFRfQk9PTCgwLCAibmFtZS1vbmx5IiwgJm9wdC5uYW1lX29ubHksCisJCQlOXygic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiKSksCisJCU9QVF9CT09MKCdMJywgImZpbGVzLXdpdGhvdXQtbWF0Y2giLAorCQkJJm9wdC51bm1hdGNoX25hbWVfb25seSwKKwkJCU5fKCJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giKSksCisJCU9QVF9CT09MX0YoJ3onLCAibnVsbCIsICZvcHQubnVsbF9mb2xsb3dpbmdfbmFtZSwKKwkJCSAgIE5fKCJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIiksCisJCQkgICBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9CT09MKCdvJywgIm9ubHktbWF0Y2hpbmciLCAmb3B0Lm9ubHlfbWF0Y2hpbmcsCisJCQlOXygic2hvdyBvbmx5IG1hdGNoaW5nIHBhcnRzIG9mIGEgbGluZSIpKSwKKwkJT1BUX0JPT0woJ2MnLCAiY291bnQiLCAmb3B0LmNvdW50LAorCQkJTl8oInNob3cgdGhlIG51bWJlciBvZiBtYXRjaGVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiKSksCisJCU9QVF9fQ09MT1IoJm9wdC5jb2xvciwgTl8oImhpZ2hsaWdodCBtYXRjaGVzIikpLAorCQlPUFRfQk9PTCgwLCAiYnJlYWsiLCAmb3B0LmZpbGVfYnJlYWssCisJCQlOXygicHJpbnQgZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMiKSksCisJCU9QVF9CT09MKDAsICJoZWFkaW5nIiwgJm9wdC5oZWFkaW5nLAorCQkJTl8oInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiKSksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9DQUxMQkFDSygnQycsICJjb250ZXh0IiwgJm9wdCwgTl8oIm4iKSwKKwkJCU5fKCJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgbWF0Y2hlcyIpLAorCQkJY29udGV4dF9jYWxsYmFjayksCisJCU9QVF9JTlRFR0VSKCdCJywgImJlZm9yZS1jb250ZXh0IiwgJm9wdC5wcmVfY29udGV4dCwKKwkJCU5fKCJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIikpLAorCQlPUFRfSU5URUdFUignQScsICJhZnRlci1jb250ZXh0IiwgJm9wdC5wb3N0X2NvbnRleHQsCisJCQlOXygic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIikpLAorCQlPUFRfSU5URUdFUigwLCAidGhyZWFkcyIsICZudW1fdGhyZWFkcywKKwkJCU5fKCJ1c2UgPG4+IHdvcmtlciB0aHJlYWRzIikpLAorCQlPUFRfTlVNQkVSX0NBTExCQUNLKCZvcHQsIE5fKCJzaG9ydGN1dCBmb3IgLUMgTlVNIiksCisJCQljb250ZXh0X2NhbGxiYWNrKSwKKwkJT1BUX0JPT0woJ3AnLCAic2hvdy1mdW5jdGlvbiIsICZvcHQuZnVuY25hbWUsCisJCQlOXygic2hvdyBhIGxpbmUgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSBiZWZvcmUgbWF0Y2hlcyIpKSwKKwkJT1BUX0JPT0woJ1cnLCAiZnVuY3Rpb24tY29udGV4dCIsICZvcHQuZnVuY2JvZHksCisJCQlOXygic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iKSksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9DQUxMQkFDSygnZicsIE5VTEwsICZvcHQsIE5fKCJmaWxlIiksCisJCQlOXygicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiKSwgZmlsZV9jYWxsYmFjayksCisJCU9QVF9DQUxMQkFDS19GKCdlJywgTlVMTCwgJm9wdCwgTl8oInBhdHRlcm4iKSwKKwkJCU5fKCJtYXRjaCA8cGF0dGVybj4iKSwgUEFSU0VfT1BUX05PTkVHLCBwYXR0ZXJuX2NhbGxiYWNrKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgImFuZCIsICZvcHQsIE5VTEwsCisJCQlOXygiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBhbmRfY2FsbGJhY2spLAorCQlPUFRfQk9PTCgwLCAib3IiLCAmZHVtbXksICIiKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgIm5vdCIsICZvcHQsIE5VTEwsICIiLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBub3RfY2FsbGJhY2spLAorCQlPUFRfQ0FMTEJBQ0tfRignKCcsIE5VTEwsICZvcHQsIE5VTEwsICIiLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PREFTSCwKKwkJCW9wZW5fY2FsbGJhY2spLAorCQlPUFRfQ0FMTEJBQ0tfRignKScsIE5VTEwsICZvcHQsIE5VTEwsICIiLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PREFTSCwKKwkJCWNsb3NlX2NhbGxiYWNrKSwKKwkJT1BUX19RVUlFVCgmb3B0LnN0YXR1c19vbmx5LAorCQkJICAgTl8oImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IikpLAorCQlPUFRfQk9PTCgwLCAiYWxsLW1hdGNoIiwgJm9wdC5hbGxfbWF0Y2gsCisJCQlOXygic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIpKSwKKwkJT1BUX1NFVF9JTlRfRigwLCAiZGVidWciLCAmb3B0LmRlYnVnLAorCQkJICAgICAgTl8oInNob3cgcGFyc2UgdHJlZSBmb3IgZ3JlcCBleHByZXNzaW9uIiksCisJCQkgICAgICAxLCBQQVJTRV9PUFRfSElEREVOKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAnTycsICJvcGVuLWZpbGVzLWluLXBhZ2VyIiwgJnNob3dfaW5fcGFnZXIsCisJCQlOXygicGFnZXIiKSwgTl8oInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIiksCisJCQlQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PQ09NUExFVEUsCisJCQlOVUxMLCAoaW50cHRyX3QpZGVmYXVsdF9wYWdlciB9LAorCQlPUFRfQk9PTF9GKDAsICJleHQtZ3JlcCIsICZleHRlcm5hbF9ncmVwX2FsbG93ZWRfX2lnbm9yZWQsCisJCQkgICBOXygiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIiksCisJCQkgICBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9FTkQoKQorCX07CisKKwlpbml0X2dyZXBfZGVmYXVsdHModGhlX3JlcG9zaXRvcnkpOworCWdpdF9jb25maWcoZ3JlcF9jbWRfY29uZmlnLCBOVUxMKTsKKwlncmVwX2luaXQoJm9wdCwgdGhlX3JlcG9zaXRvcnksIHByZWZpeCk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIC0tIHRoZW4gdGhlIHBhdGhzIG11c3QgZXhpc3QgaW4gdGhlIHdvcmtpbmcKKwkgKiB0cmVlLiAgSWYgdGhlcmUgaXMgbm8gZXhwbGljaXQgcGF0dGVybiBzcGVjaWZpZWQgd2l0aCAtZSBvcgorCSAqIC1mLCB3ZSB0YWtlIHRoZSBmaXJzdCB1bnJlY29nbml6ZWQgbm9uIG9wdGlvbiB0byBiZSB0aGUKKwkgKiBwYXR0ZXJuLCBidXQgdGhlbiB3aGF0IGZvbGxvd3MgaXQgbXVzdCBiZSB6ZXJvIG9yIG1vcmUKKwkgKiB2YWxpZCByZWZzIHVwIHRvIHRoZSAtLSAoaWYgZXhpc3RzKSwgYW5kIHRoZW4gZXhpc3RpbmcKKwkgKiBwYXRocy4gIElmIHRoZXJlIGlzIGFuIGV4cGxpY2l0IHBhdHRlcm4sIHRoZW4gdGhlIGZpcnN0CisJICogdW5yZWNvZ25pemVkIG5vbiBvcHRpb24gaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVmcyBsaXN0CisJICogdGhhdCBjb250aW51ZXMgdXAgdG8gdGhlIC0tIChpZiBleGlzdHMpLCBhbmQgdGhlbiBwYXRocy4KKwkgKi8KKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdyZXBfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisJZ3JlcF9jb21taXRfcGF0dGVybl90eXBlKHBhdHRlcm5fdHlwZV9hcmcsICZvcHQpOworCisJaWYgKHVzZV9pbmRleCAmJiAhc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpIHsKKwkJaW50IGZhbGxiYWNrID0gMDsKKwkJZ2l0X2NvbmZpZ19nZXRfYm9vbCgiZ3JlcC5mYWxsYmFja3Rvbm9pbmRleCIsICZmYWxsYmFjayk7CisJCWlmIChmYWxsYmFjaykKKwkJCXVzZV9pbmRleCA9IDA7CisJCWVsc2UKKwkJCS8qIGRpZSB0aGUgc2FtZSB3YXkgYXMgaWYgd2UgZGlkIGl0IGF0IHRoZSBiZWdpbm5pbmcgKi8KKwkJCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwl9CisJLyogSWdub3JlIC0tcmVjdXJzZS1zdWJtb2R1bGVzIGlmIC0tbm8taW5kZXggaXMgZ2l2ZW4gb3IgaW1wbGllZCAqLworCWlmICghdXNlX2luZGV4KQorCQlyZWN1cnNlX3N1Ym1vZHVsZXMgPSAwOworCisJLyoKKwkgKiBza2lwIGEgLS0gc2VwYXJhdG9yOyB3ZSBrbm93IGl0IGNhbm5vdCBiZQorCSAqIHNlcGFyYXRpbmcgcmV2aXNpb25zIGZyb20gcGF0aG5hbWVzIGlmCisJICogd2UgaGF2ZW4ndCBldmVuIGhhZCBhbnkgcGF0dGVybnMgeWV0CisJICovCisJaWYgKGFyZ2MgPiAwICYmICFvcHQucGF0dGVybl9saXN0ICYmICFzdHJjbXAoYXJndlswXSwgIi0tIikpIHsKKwkJYXJndisrOworCQlhcmdjLS07CisJfQorCisJLyogRmlyc3QgdW5yZWNvZ25pemVkIG5vbi1vcHRpb24gdG9rZW4gKi8KKwlpZiAoYXJnYyA+IDAgJiYgIW9wdC5wYXR0ZXJuX2xpc3QpIHsKKwkJYXBwZW5kX2dyZXBfcGF0dGVybigmb3B0LCBhcmd2WzBdLCAiY29tbWFuZCBsaW5lIiwgMCwKKwkJCQkgICAgR1JFUF9QQVRURVJOKTsKKwkJYXJndisrOworCQlhcmdjLS07CisJfQorCisJaWYgKHNob3dfaW5fcGFnZXIgPT0gZGVmYXVsdF9wYWdlcikKKwkJc2hvd19pbl9wYWdlciA9IGdpdF9wYWdlcigxKTsKKwlpZiAoc2hvd19pbl9wYWdlcikgeworCQlvcHQuY29sb3IgPSAwOworCQlvcHQubmFtZV9vbmx5ID0gMTsKKwkJb3B0Lm51bGxfZm9sbG93aW5nX25hbWUgPSAxOworCQlvcHQub3V0cHV0X3ByaXYgPSAmcGF0aF9saXN0OworCQlvcHQub3V0cHV0ID0gYXBwZW5kX3BhdGg7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmcGF0aF9saXN0LCBzaG93X2luX3BhZ2VyKTsKKwl9CisKKwlpZiAoIW9wdC5wYXR0ZXJuX2xpc3QpCisJCWRpZShfKCJubyBwYXR0ZXJuIGdpdmVuIikpOworCisJLyogLS1vbmx5LW1hdGNoaW5nIGhhcyBubyBlZmZlY3Qgd2l0aCAtLWludmVydC4gKi8KKwlpZiAob3B0LmludmVydCkKKwkJb3B0Lm9ubHlfbWF0Y2hpbmcgPSAwOworCisJLyoKKwkgKiBXZSBoYXZlIHRvIGZpbmQgIi0tIiBpbiBhIHNlcGFyYXRlIHBhc3MsIGJlY2F1c2UgaXRzIHByZXNlbmNlCisJICogaW5mbHVlbmNlcyBob3cgd2Ugd2lsbCBwYXJzZSBhcmd1bWVudHMgdGhhdCBjb21lIGJlZm9yZSBpdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLSIpKSB7CisJCQlzZWVuX2Rhc2hkYXNoID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBSZXNvbHZlIGFueSByZXYgYXJndW1lbnRzLiBJZiB3ZSBoYXZlIGEgZGFzaGRhc2gsIHRoZW4gZXZlcnl0aGluZyB1cAorCSAqIHRvIGl0IG11c3QgcmVzb2x2ZSBhcyBhIHJldi4gSWYgbm90LCB0aGVuIHdlIHN0b3AgYXQgdGhlIGZpcnN0CisJICogbm9uLXJldiBhbmQgYXNzdW1lIGV2ZXJ5dGhpbmcgZWxzZSBpcyBhIHBhdGguCisJICovCisJYWxsb3dfcmV2cyA9IHVzZV9pbmRleCAmJiAhdW50cmFja2VkOworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBvYmplY3RfY29udGV4dCBvYzsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0OworCisJCWlmICghc3RyY21wKGFyZywgIi0tIikpIHsKKwkJCWkrKzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFhbGxvd19yZXZzKSB7CisJCQlpZiAoc2Vlbl9kYXNoZGFzaCkKKwkJCQlkaWUoXygiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMiKSk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChnZXRfb2lkX3dpdGhfY29udGV4dCh0aGVfcmVwb3NpdG9yeSwgYXJnLAorCQkJCQkgR0VUX09JRF9SRUNPUkRfUEFUSCwKKwkJCQkJICZvaWQsICZvYykpIHsKKwkJCWlmIChzZWVuX2Rhc2hkYXNoKQorCQkJCWRpZShfKCJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiKSwgYXJnKTsKKwkJCWJyZWFrOworCQl9CisKKwkJb2JqZWN0ID0gcGFyc2Vfb2JqZWN0X29yX2RpZSgmb2lkLCBhcmcpOworCQlpZiAoIXNlZW5fZGFzaGRhc2gpCisJCQl2ZXJpZnlfbm9uX2ZpbGVuYW1lKHByZWZpeCwgYXJnKTsKKwkJYWRkX29iamVjdF9hcnJheV93aXRoX3BhdGgob2JqZWN0LCBhcmcsICZsaXN0LCBvYy5tb2RlLCBvYy5wYXRoKTsKKwkJZnJlZShvYy5wYXRoKTsKKwl9CisKKwkvKgorCSAqIEFueXRoaW5nIGxlZnQgb3ZlciBpcyBwcmVzdW1lZCB0byBiZSBhIHBhdGguIEJ1dCBpbiB0aGUgbm9uLWRhc2hkYXNoCisJICogImRvIHdoYXQgSSBtZWFuIiBjYXNlLCB3ZSB2ZXJpZnkgYW5kIGNvbXBsYWluIHdoZW4gdGhhdCBpc24ndCB0cnVlLgorCSAqLworCWlmICghc2Vlbl9kYXNoZGFzaCkgeworCQlpbnQgajsKKwkJZm9yIChqID0gaTsgaiA8IGFyZ2M7IGorKykKKwkJCXZlcmlmeV9maWxlbmFtZShwcmVmaXgsIGFyZ3Zbal0sIGogPT0gaSAmJiBhbGxvd19yZXZzKTsKKwl9CisKKwlwYXJzZV9wYXRoc3BlYygmcGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfQ1dEIHwKKwkJICAgICAgIChvcHQubWF4X2RlcHRoICE9IC0xID8gUEFUSFNQRUNfTUFYREVQVEhfVkFMSUQgOiAwKSwKKwkJICAgICAgIHByZWZpeCwgYXJndiArIGkpOworCXBhdGhzcGVjLm1heF9kZXB0aCA9IG9wdC5tYXhfZGVwdGg7CisJcGF0aHNwZWMucmVjdXJzaXZlID0gMTsKKwlwYXRoc3BlYy5yZWN1cnNlX3N1Ym1vZHVsZXMgPSAhIXJlY3Vyc2Vfc3VibW9kdWxlczsKKworCWlmIChyZWN1cnNlX3N1Ym1vZHVsZXMgJiYgdW50cmFja2VkKQorCQlkaWUoXygiLS11bnRyYWNrZWQgbm90IHN1cHBvcnRlZCB3aXRoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIikpOworCisJaWYgKHNob3dfaW5fcGFnZXIpIHsKKwkJaWYgKG51bV90aHJlYWRzID4gMSkKKwkJCXdhcm5pbmcoXygiaW52YWxpZCBvcHRpb24gY29tYmluYXRpb24sIGlnbm9yaW5nIC0tdGhyZWFkcyIpKTsKKwkJbnVtX3RocmVhZHMgPSAxOworCX0gZWxzZSBpZiAoIUhBVkVfVEhSRUFEUyAmJiBudW1fdGhyZWFkcyA+IDEpIHsKKwkJd2FybmluZyhfKCJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIC0tdGhyZWFkcyIpKTsKKwkJbnVtX3RocmVhZHMgPSAxOworCX0gZWxzZSBpZiAobnVtX3RocmVhZHMgPCAwKQorCQlkaWUoXygiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSIpLCBudW1fdGhyZWFkcyk7CisJZWxzZSBpZiAobnVtX3RocmVhZHMgPT0gMCkKKwkJbnVtX3RocmVhZHMgPSBIQVZFX1RIUkVBRFMgPyBvbmxpbmVfY3B1cygpIDogMTsKKworCWlmIChudW1fdGhyZWFkcyA+IDEpIHsKKwkJaWYgKCFIQVZFX1RIUkVBRFMpCisJCQlCVUcoIlNvbWVib2R5IGdvdCBudW1fdGhyZWFkcyBjYWxjdWxhdGlvbiB3cm9uZyEiKTsKKwkJaWYgKCEob3B0Lm5hbWVfb25seSB8fCBvcHQudW5tYXRjaF9uYW1lX29ubHkgfHwgb3B0LmNvdW50KQorCQkgICAgJiYgKG9wdC5wcmVfY29udGV4dCB8fCBvcHQucG9zdF9jb250ZXh0IHx8CisJCQlvcHQuZmlsZV9icmVhayB8fCBvcHQuZnVuY2JvZHkpKQorCQkJc2tpcF9maXJzdF9saW5lID0gMTsKKworCQkvKgorCQkgKiBQcmUtcmVhZCBnaXRtb2R1bGVzIChpZiBub3QgcmVhZCBhbHJlYWR5KSBhbmQgZm9yY2UgZWFnZXIKKwkJICogaW5pdGlhbGl6YXRpb24gb2YgcGFja2VkX2dpdCB0byBwcmV2ZW50IHJhY3kgbGF6eQorCQkgKiByZWFkaW5nL2luaXRpYWxpemF0aW9uIG9uY2Ugd29ya2VyIHRocmVhZHMgYXJlIHN0YXJ0ZWQuCisJCSAqLworCQlpZiAocmVjdXJzZV9zdWJtb2R1bGVzKQorCQkJcmVwb19yZWFkX2dpdG1vZHVsZXModGhlX3JlcG9zaXRvcnksIDEpOworCQlpZiAoc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpCisJCQkodm9pZClnZXRfcGFja2VkX2dpdCh0aGVfcmVwb3NpdG9yeSk7CisKKwkJc3RhcnRfdGhyZWFkcygmb3B0KTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGUgY29tcGlsZWQgcGF0dGVybnMgb24gdGhlIG1haW4gcGF0aCBhcmUgb25seQorCQkgKiB1c2VkIHdoZW4gbm90IHVzaW5nIHRocmVhZGluZy4gT3RoZXJ3aXNlCisJCSAqIHN0YXJ0X3RocmVhZHMoKSBhYm92ZSBjYWxscyBjb21waWxlX2dyZXBfcGF0dGVybnMoKQorCQkgKiBmb3IgZWFjaCB0aHJlYWQuCisJCSAqLworCQljb21waWxlX2dyZXBfcGF0dGVybnMoJm9wdCk7CisJfQorCisJaWYgKHNob3dfaW5fcGFnZXIgJiYgKGNhY2hlZCB8fCBsaXN0Lm5yKSkKKwkJZGllKF8oIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIpKTsKKworCWlmIChzaG93X2luX3BhZ2VyICYmIG9wdC5wYXR0ZXJuX2xpc3QgJiYgIW9wdC5wYXR0ZXJuX2xpc3QtPm5leHQpIHsKKwkJY29uc3QgY2hhciAqcGFnZXIgPSBwYXRoX2xpc3QuaXRlbXNbMF0uc3RyaW5nOworCQlpbnQgbGVuID0gc3RybGVuKHBhZ2VyKTsKKworCQlpZiAobGVuID4gNCAmJiBpc19kaXJfc2VwKHBhZ2VyW2xlbiAtIDVdKSkKKwkJCXBhZ2VyICs9IGxlbiAtIDQ7CisKKwkJaWYgKG9wdC5pZ25vcmVfY2FzZSAmJiAhc3RyY21wKCJsZXNzIiwgcGFnZXIpKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZwYXRoX2xpc3QsICItSSIpOworCisJCWlmICghc3RyY21wKCJsZXNzIiwgcGFnZXIpIHx8ICFzdHJjbXAoInZpIiwgcGFnZXIpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIisvJXMlcyIsCisJCQkJCXN0cmNtcCgibGVzcyIsIHBhZ2VyKSA/ICIiIDogIioiLAorCQkJCQlvcHQucGF0dGVybl9saXN0LT5wYXR0ZXJuKTsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmcGF0aF9saXN0LAorCQkJCQkgICBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpKTsKKwkJfQorCX0KKworCWlmICghc2hvd19pbl9wYWdlciAmJiAhb3B0LnN0YXR1c19vbmx5KQorCQlzZXR1cF9wYWdlcigpOworCisJaWYgKCF1c2VfaW5kZXggJiYgKHVudHJhY2tlZCB8fCBjYWNoZWQpKQorCQlkaWUoXygiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4IikpOworCisJaWYgKCF1c2VfaW5kZXggfHwgdW50cmFja2VkKSB7CisJCWludCB1c2VfZXhjbHVkZSA9IChvcHRfZXhjbHVkZSA8IDApID8gdXNlX2luZGV4IDogISFvcHRfZXhjbHVkZTsKKwkJaGl0ID0gZ3JlcF9kaXJlY3RvcnkoJm9wdCwgJnBhdGhzcGVjLCB1c2VfZXhjbHVkZSwgdXNlX2luZGV4KTsKKwl9IGVsc2UgaWYgKDAgPD0gb3B0X2V4Y2x1ZGUpIHsKKwkJZGllKF8oIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzIikpOworCX0gZWxzZSBpZiAoIWxpc3QubnIpIHsKKwkJaWYgKCFjYWNoZWQpCisJCQlzZXR1cF93b3JrX3RyZWUoKTsKKworCQloaXQgPSBncmVwX2NhY2hlKCZvcHQsICZwYXRoc3BlYywgY2FjaGVkKTsKKwl9IGVsc2UgeworCQlpZiAoY2FjaGVkKQorCQkJZGllKF8oImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbiIpKTsKKworCQloaXQgPSBncmVwX29iamVjdHMoJm9wdCwgJnBhdGhzcGVjLCAmbGlzdCk7CisJfQorCisJaWYgKG51bV90aHJlYWRzID4gMSkKKwkJaGl0IHw9IHdhaXRfYWxsKCk7CisJaWYgKGhpdCAmJiBzaG93X2luX3BhZ2VyKQorCQlydW5fcGFnZXIoJm9wdCwgcHJlZml4KTsKKwljbGVhcl9wYXRoc3BlYygmcGF0aHNwZWMpOworCWZyZWVfZ3JlcF9wYXR0ZXJucygmb3B0KTsKKwlncmVwX2Rlc3Ryb3koKTsKKwlyZXR1cm4gIWhpdDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vaGFzaC1vYmplY3QuYyBiL2J1aWx0aW4vaGFzaC1vYmplY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDBlZjRkCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9oYXNoLW9iamVjdC5jCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICogQ29weXJpZ2h0IChDKSBKdW5pbyBDIEhhbWFubywgMjAwNQorICovCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorCisvKgorICogVGhpcyBpcyB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgYW5kIGFzIHN1Y2ggaXQKKyAqIG5lZWRzIHRvIGJ5cGFzcyB0aGUgZGF0YSBjb252ZXJzaW9uIHBlcmZvcm1lZCBieSwgYW5kIHRoZSB0eXBlCisgKiBsaW1pdGF0aW9uIGltcG9zZWQgYnksIGluZGV4X2ZkKCkgYW5kIGl0cyBjYWxsZWVzLgorICovCitzdGF0aWMgaW50IGhhc2hfbGl0ZXJhbGx5KHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZkLCBjb25zdCBjaGFyICp0eXBlLCB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXQ7CisKKwlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgZmQsIDQwOTYpIDwgMCkKKwkJcmV0ID0gLTE7CisJZWxzZQorCQlyZXQgPSBoYXNoX29iamVjdF9maWxlX2xpdGVyYWxseShidWYuYnVmLCBidWYubGVuLCB0eXBlLCBvaWQsCisJCQkJCQkgZmxhZ3MpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGhhc2hfZmQoaW50IGZkLCBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBmbGFncywKKwkJICAgIGludCBsaXRlcmFsbHkpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlpZiAoZnN0YXQoZmQsICZzdCkgPCAwIHx8CisJICAgIChsaXRlcmFsbHkKKwkgICAgID8gaGFzaF9saXRlcmFsbHkoJm9pZCwgZmQsIHR5cGUsIGZsYWdzKQorCSAgICAgOiBpbmRleF9mZCh0aGVfcmVwb3NpdG9yeS0+aW5kZXgsICZvaWQsIGZkLCAmc3QsCisJCQl0eXBlX2Zyb21fc3RyaW5nKHR5cGUpLCBwYXRoLCBmbGFncykpKQorCQlkaWUoKGZsYWdzICYgSEFTSF9XUklURV9PQkpFQ1QpCisJCSAgICA/ICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorCQkgICAgOiAiVW5hYmxlIHRvIGhhc2ggJXMiLCBwYXRoKTsKKwlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KCZvaWQpKTsKKwltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAiaGFzaCB0byBzdGRvdXQiKTsKK30KKworc3RhdGljIHZvaWQgaGFzaF9vYmplY3QoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqdnBhdGgsCisJCQl1bnNpZ25lZCBmbGFncywgaW50IGxpdGVyYWxseSkKK3sKKwlpbnQgZmQ7CisJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oIkNhbm5vdCBvcGVuICclcyciLCBwYXRoKTsKKwloYXNoX2ZkKGZkLCB0eXBlLCB2cGF0aCwgZmxhZ3MsIGxpdGVyYWxseSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhc2hfc3RkaW5fcGF0aHMoY29uc3QgY2hhciAqdHlwZSwgaW50IG5vX2ZpbHRlcnMsIHVuc2lnbmVkIGZsYWdzLAorCQkJICAgICBpbnQgbGl0ZXJhbGx5KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB1bnF1b3RlZCA9IFNUUkJVRl9JTklUOworCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZidWYsIHN0ZGluKSAhPSBFT0YpIHsKKwkJaWYgKGJ1Zi5idWZbMF0gPT0gJyInKSB7CisJCQlzdHJidWZfcmVzZXQoJnVucXVvdGVkKTsKKwkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnVucXVvdGVkLCBidWYuYnVmLCBOVUxMKSkKKwkJCQlkaWUoImxpbmUgaXMgYmFkbHkgcXVvdGVkIik7CisJCQlzdHJidWZfc3dhcCgmYnVmLCAmdW5xdW90ZWQpOworCQl9CisJCWhhc2hfb2JqZWN0KGJ1Zi5idWYsIHR5cGUsIG5vX2ZpbHRlcnMgPyBOVUxMIDogYnVmLmJ1ZiwgZmxhZ3MsCisJCQkgICAgbGl0ZXJhbGx5KTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnVucXVvdGVkKTsKK30KKworaW50IGNtZF9oYXNoX29iamVjdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGhhc2hfb2JqZWN0X3VzYWdlW10gPSB7CisJCU5fKCJnaXQgaGFzaC1vYmplY3QgWy10IDx0eXBlPl0gWy13XSBbLS1wYXRoPTxmaWxlPiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dIFstLV0gPGZpbGU+Li4uIiksCisJCU5fKCJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiKSwKKwkJTlVMTAorCX07CisJY29uc3QgY2hhciAqdHlwZSA9IGJsb2JfdHlwZTsKKwlpbnQgaGFzaHN0ZGluID0gMDsKKwlpbnQgc3RkaW5fcGF0aHMgPSAwOworCWludCBub19maWx0ZXJzID0gMDsKKwlpbnQgbGl0ZXJhbGx5ID0gMDsKKwlpbnQgbm9uZ2l0ID0gMDsKKwl1bnNpZ25lZCBmbGFncyA9IEhBU0hfRk9STUFUX0NIRUNLOworCWNvbnN0IGNoYXIgKnZwYXRoID0gTlVMTDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIGhhc2hfb2JqZWN0X29wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygndCcsIE5VTEwsICZ0eXBlLCBOXygidHlwZSIpLCBOXygib2JqZWN0IHR5cGUiKSksCisJCU9QVF9CSVQoJ3cnLCBOVUxMLCAmZmxhZ3MsIE5fKCJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIpLAorCQkJSEFTSF9XUklURV9PQkpFQ1QpLAorCQlPUFRfQ09VTlRVUCggMCAsICJzdGRpbiIsICZoYXNoc3RkaW4sIE5fKCJyZWFkIHRoZSBvYmplY3QgZnJvbSBzdGRpbiIpKSwKKwkJT1BUX0JPT0woIDAgLCAic3RkaW4tcGF0aHMiLCAmc3RkaW5fcGF0aHMsIE5fKCJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIpKSwKKwkJT1BUX0JPT0woIDAgLCAibm8tZmlsdGVycyIsICZub19maWx0ZXJzLCBOXygic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiKSksCisJCU9QVF9CT09MKCAwLCAibGl0ZXJhbGx5IiwgJmxpdGVyYWxseSwgTl8oImp1c3QgaGFzaCBhbnkgcmFuZG9tIGdhcmJhZ2UgdG8gY3JlYXRlIGNvcnJ1cHQgb2JqZWN0cyBmb3IgZGVidWdnaW5nIEdpdCIpKSwKKwkJT1BUX1NUUklORyggMCAsICJwYXRoIiwgJnZwYXRoLCBOXygiZmlsZSIpLCBOXygicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiKSksCisJCU9QVF9FTkQoKQorCX07CisJaW50IGk7CisJY29uc3QgY2hhciAqZXJyc3RyID0gTlVMTDsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgaGFzaF9vYmplY3Rfb3B0aW9ucywKKwkJCSAgICAgaGFzaF9vYmplY3RfdXNhZ2UsIDApOworCisJaWYgKGZsYWdzICYgSEFTSF9XUklURV9PQkpFQ1QpCisJCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwllbHNlCisJCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOworCisJaWYgKHZwYXRoICYmIHByZWZpeCkKKwkJdnBhdGggPSB4c3RyZHVwKHByZWZpeF9maWxlbmFtZShwcmVmaXgsIHZwYXRoKSk7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlpZiAoc3RkaW5fcGF0aHMpIHsKKwkJaWYgKGhhc2hzdGRpbikKKwkJCWVycnN0ciA9ICJDYW4ndCB1c2UgLS1zdGRpbi1wYXRocyB3aXRoIC0tc3RkaW4iOworCQllbHNlIGlmIChhcmdjKQorCQkJZXJyc3RyID0gIkNhbid0IHNwZWNpZnkgZmlsZXMgd2l0aCAtLXN0ZGluLXBhdGhzIjsKKwkJZWxzZSBpZiAodnBhdGgpCisJCQllcnJzdHIgPSAiQ2FuJ3QgdXNlIC0tc3RkaW4tcGF0aHMgd2l0aCAtLXBhdGgiOworCX0KKwllbHNlIHsKKwkJaWYgKGhhc2hzdGRpbiA+IDEpCisJCQllcnJzdHIgPSAiTXVsdGlwbGUgLS1zdGRpbiBhcmd1bWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQiOworCQlpZiAodnBhdGggJiYgbm9fZmlsdGVycykKKwkJCWVycnN0ciA9ICJDYW4ndCB1c2UgLS1wYXRoIHdpdGggLS1uby1maWx0ZXJzIjsKKwl9CisKKwlpZiAoZXJyc3RyKSB7CisJCWVycm9yKCIlcyIsIGVycnN0cik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhoYXNoX29iamVjdF91c2FnZSwgaGFzaF9vYmplY3Rfb3B0aW9ucyk7CisJfQorCisJaWYgKGhhc2hzdGRpbikKKwkJaGFzaF9mZCgwLCB0eXBlLCB2cGF0aCwgZmxhZ3MsIGxpdGVyYWxseSk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQljaGFyICp0b19mcmVlID0gTlVMTDsKKworCQlpZiAocHJlZml4KQorCQkJYXJnID0gdG9fZnJlZSA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIGFyZyk7CisJCWhhc2hfb2JqZWN0KGFyZywgdHlwZSwgbm9fZmlsdGVycyA/IE5VTEwgOiB2cGF0aCA/IHZwYXRoIDogYXJnLAorCQkJICAgIGZsYWdzLCBsaXRlcmFsbHkpOworCQlmcmVlKHRvX2ZyZWUpOworCX0KKworCWlmIChzdGRpbl9wYXRocykKKwkJaGFzaF9zdGRpbl9wYXRocyh0eXBlLCBub19maWx0ZXJzLCBmbGFncywgbGl0ZXJhbGx5KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9oZWxwLmMgYi9idWlsdGluL2hlbHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTkyMDZlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9oZWxwLmMKQEAgLTAsMCArMSw2MjMgQEAKKy8qCisgKiBCdWlsdGluIGhlbHAgY29tbWFuZAorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJjb2x1bW4uaCIKKyNpbmNsdWRlICJjb25maWctbGlzdC5oIgorI2luY2x1ZGUgImhlbHAuaCIKKyNpbmNsdWRlICJhbGlhcy5oIgorCisjaWZuZGVmIERFRkFVTFRfSEVMUF9GT1JNQVQKKyNkZWZpbmUgREVGQVVMVF9IRUxQX0ZPUk1BVCAibWFuIgorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgbWFuX3ZpZXdlcl9saXN0IHsKKwlzdHJ1Y3QgbWFuX3ZpZXdlcl9saXN0ICpuZXh0OworCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsKK30gKm1hbl92aWV3ZXJfbGlzdDsKKworc3RhdGljIHN0cnVjdCBtYW5fdmlld2VyX2luZm9fbGlzdCB7CisJc3RydWN0IG1hbl92aWV3ZXJfaW5mb19saXN0ICpuZXh0OworCWNvbnN0IGNoYXIgKmluZm87CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfSAqbWFuX3ZpZXdlcl9pbmZvX2xpc3Q7CisKK2VudW0gaGVscF9mb3JtYXQgeworCUhFTFBfRk9STUFUX05PTkUsCisJSEVMUF9GT1JNQVRfTUFOLAorCUhFTFBfRk9STUFUX0lORk8sCisJSEVMUF9GT1JNQVRfV0VCCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqaHRtbF9wYXRoOworCitzdGF0aWMgaW50IHNob3dfYWxsID0gMDsKK3N0YXRpYyBpbnQgc2hvd19ndWlkZXMgPSAwOworc3RhdGljIGludCBzaG93X2NvbmZpZzsKK3N0YXRpYyBpbnQgdmVyYm9zZSA9IDE7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbG9wdHM7CitzdGF0aWMgZW51bSBoZWxwX2Zvcm1hdCBoZWxwX2Zvcm1hdCA9IEhFTFBfRk9STUFUX05PTkU7CitzdGF0aWMgaW50IGV4Y2x1ZGVfZ3VpZGVzOworc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9oZWxwX29wdGlvbnNbXSA9IHsKKwlPUFRfQk9PTCgnYScsICJhbGwiLCAmc2hvd19hbGwsIE5fKCJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIikpLAorCU9QVF9ISURERU5fQk9PTCgwLCAiZXhjbHVkZS1ndWlkZXMiLCAmZXhjbHVkZV9ndWlkZXMsIE5fKCJleGNsdWRlIGd1aWRlcyIpKSwKKwlPUFRfQk9PTCgnZycsICJndWlkZXMiLCAmc2hvd19ndWlkZXMsIE5fKCJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiKSksCisJT1BUX0JPT0woJ2MnLCAiY29uZmlnIiwgJnNob3dfY29uZmlnLCBOXygicHJpbnQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMiKSksCisJT1BUX1NFVF9JTlRfRigwLCAiY29uZmlnLWZvci1jb21wbGV0aW9uIiwgJnNob3dfY29uZmlnLCAiIiwgMiwgUEFSU0VfT1BUX0hJRERFTiksCisJT1BUX1NFVF9JTlQoJ20nLCAibWFuIiwgJmhlbHBfZm9ybWF0LCBOXygic2hvdyBtYW4gcGFnZSIpLCBIRUxQX0ZPUk1BVF9NQU4pLAorCU9QVF9TRVRfSU5UKCd3JywgIndlYiIsICZoZWxwX2Zvcm1hdCwgTl8oInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIiksCisJCQlIRUxQX0ZPUk1BVF9XRUIpLAorCU9QVF9TRVRfSU5UKCdpJywgImluZm8iLCAmaGVscF9mb3JtYXQsIE5fKCJzaG93IGluZm8gcGFnZSIpLAorCQkJSEVMUF9GT1JNQVRfSU5GTyksCisJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygicHJpbnQgY29tbWFuZCBkZXNjcmlwdGlvbiIpKSwKKwlPUFRfRU5EKCksCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5faGVscF91c2FnZVtdID0geworCU5fKCJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIiksCisJTlVMTAorfTsKKworc3RydWN0IHNsb3RfZXhwYW5zaW9uIHsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJY29uc3QgY2hhciAqcGxhY2Vob2xkZXI7CisJdm9pZCAoKmZuKShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnByZWZpeCk7CisJaW50IGZvdW5kOworfTsKKworc3RhdGljIHZvaWQgbGlzdF9jb25maWdfaGVscChpbnQgZm9yX2h1bWFuKQoreworCXN0cnVjdCBzbG90X2V4cGFuc2lvbiBzbG90X2V4cGFuc2lvbnNbXSA9IHsKKwkJeyAiYWR2aWNlIiwgIioiLCBsaXN0X2NvbmZpZ19hZHZpY2VzIH0sCisJCXsgImNvbG9yLmJyYW5jaCIsICI8c2xvdD4iLCBsaXN0X2NvbmZpZ19jb2xvcl9icmFuY2hfc2xvdHMgfSwKKwkJeyAiY29sb3IuZGVjb3JhdGUiLCAiPHNsb3Q+IiwgbGlzdF9jb25maWdfY29sb3JfZGVjb3JhdGVfc2xvdHMgfSwKKwkJeyAiY29sb3IuZGlmZiIsICI8c2xvdD4iLCBsaXN0X2NvbmZpZ19jb2xvcl9kaWZmX3Nsb3RzIH0sCisJCXsgImNvbG9yLmdyZXAiLCAiPHNsb3Q+IiwgbGlzdF9jb25maWdfY29sb3JfZ3JlcF9zbG90cyB9LAorCQl7ICJjb2xvci5pbnRlcmFjdGl2ZSIsICI8c2xvdD4iLCBsaXN0X2NvbmZpZ19jb2xvcl9pbnRlcmFjdGl2ZV9zbG90cyB9LAorCQl7ICJjb2xvci5yZW1vdGUiLCAiPHNsb3Q+IiwgbGlzdF9jb25maWdfY29sb3Jfc2lkZWJhbmRfc2xvdHMgfSwKKwkJeyAiY29sb3Iuc3RhdHVzIiwgIjxzbG90PiIsIGxpc3RfY29uZmlnX2NvbG9yX3N0YXR1c19zbG90cyB9LAorCQl7ICJmc2NrIiwgIjxtc2ctaWQ+IiwgbGlzdF9jb25maWdfZnNja19tc2dfaWRzIH0sCisJCXsgInJlY2VpdmUuZnNjayIsICI8bXNnLWlkPiIsIGxpc3RfY29uZmlnX2ZzY2tfbXNnX2lkcyB9LAorCQl7IE5VTEwsIE5VTEwsIE5VTEwgfQorCX07CisJY29uc3QgY2hhciAqKnA7CisJc3RydWN0IHNsb3RfZXhwYW5zaW9uICplOworCXN0cnVjdCBzdHJpbmdfbGlzdCBrZXlzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJaW50IGk7CisKKwlmb3IgKHAgPSBjb25maWdfbmFtZV9saXN0OyAqcDsgcCsrKSB7CisJCWNvbnN0IGNoYXIgKnZhciA9ICpwOworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJZm9yIChlID0gc2xvdF9leHBhbnNpb25zOyBlLT5wcmVmaXg7IGUrKykgeworCisJCQlzdHJidWZfcmVzZXQoJnNiKTsKKwkJCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzLiVzIiwgZS0+cHJlZml4LCBlLT5wbGFjZWhvbGRlcik7CisJCQlpZiAoIXN0cmNhc2VjbXAodmFyLCBzYi5idWYpKSB7CisJCQkJZS0+Zm4oJmtleXMsIGUtPnByZWZpeCk7CisJCQkJZS0+Zm91bmQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlpZiAoIWUtPnByZWZpeCkKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgma2V5cywgdmFyKTsKKwl9CisKKwlmb3IgKGUgPSBzbG90X2V4cGFuc2lvbnM7IGUtPnByZWZpeDsgZSsrKQorCQlpZiAoIWUtPmZvdW5kKQorCQkJQlVHKCJzbG90X2V4cGFuc2lvbiAlcy4lcyBpcyBub3QgdXNlZCIsCisJCQkgICAgZS0+cHJlZml4LCBlLT5wbGFjZWhvbGRlcik7CisKKwlzdHJpbmdfbGlzdF9zb3J0KCZrZXlzKTsKKwlmb3IgKGkgPSAwOyBpIDwga2V5cy5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnZhciA9IGtleXMuaXRlbXNbaV0uc3RyaW5nOworCQljb25zdCBjaGFyICp3aWxkY2FyZCwgKnRhZywgKmN1dDsKKworCQlpZiAoZm9yX2h1bWFuKSB7CisJCQlwdXRzKHZhcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXdpbGRjYXJkID0gc3RyY2hyKHZhciwgJyonKTsKKwkJdGFnID0gc3RyY2hyKHZhciwgJzwnKTsKKworCQlpZiAoIXdpbGRjYXJkICYmICF0YWcpIHsKKwkJCXB1dHModmFyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHdpbGRjYXJkICYmICF0YWcpCisJCQljdXQgPSB3aWxkY2FyZDsKKwkJZWxzZSBpZiAoIXdpbGRjYXJkICYmIHRhZykKKwkJCWN1dCA9IHRhZzsKKwkJZWxzZQorCQkJY3V0ID0gd2lsZGNhcmQgPCB0YWcgPyB3aWxkY2FyZCA6IHRhZzsKKworCQkvKgorCQkgKiBXZSBtYXkgcHJvZHVjZSBkdXBsaWNhdGVzLCBidXQgdGhhdCdzIHVwIHRvCisJCSAqIGdpdC1jb21wbGV0aW9uLmJhc2ggdG8gaGFuZGxlCisJCSAqLworCQlwcmludGYoIiUuKnNcbiIsIChpbnQpKGN1dCAtIHZhciksIHZhcik7CisJfQorCXN0cmluZ19saXN0X2NsZWFyKCZrZXlzLCAwKTsKK30KKworc3RhdGljIGVudW0gaGVscF9mb3JtYXQgcGFyc2VfaGVscF9mb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KQoreworCWlmICghc3RyY21wKGZvcm1hdCwgIm1hbiIpKQorCQlyZXR1cm4gSEVMUF9GT1JNQVRfTUFOOworCWlmICghc3RyY21wKGZvcm1hdCwgImluZm8iKSkKKwkJcmV0dXJuIEhFTFBfRk9STUFUX0lORk87CisJaWYgKCFzdHJjbXAoZm9ybWF0LCAid2ViIikgfHwgIXN0cmNtcChmb3JtYXQsICJodG1sIikpCisJCXJldHVybiBIRUxQX0ZPUk1BVF9XRUI7CisJLyoKKwkgKiBQbGVhc2UgdXBkYXRlIF9naXRfY29uZmlnKCkgaW4gZ2l0LWNvbXBsZXRpb24uYmFzaCB3aGVuIHlvdQorCSAqIGFkZCBuZXcgaGVscCBmb3JtYXRzLgorCSAqLworCWRpZShfKCJ1bnJlY29nbml6ZWQgaGVscCBmb3JtYXQgJyVzJyIpLCBmb3JtYXQpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X21hbl92aWV3ZXJfaW5mbyhjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBtYW5fdmlld2VyX2luZm9fbGlzdCAqdmlld2VyOworCisJZm9yICh2aWV3ZXIgPSBtYW5fdmlld2VyX2luZm9fbGlzdDsgdmlld2VyOyB2aWV3ZXIgPSB2aWV3ZXItPm5leHQpCisJeworCQlpZiAoIXN0cmNhc2VjbXAobmFtZSwgdmlld2VyLT5uYW1lKSkKKwkJCXJldHVybiB2aWV3ZXItPmluZm87CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGNoZWNrX2VtYWNzY2xpZW50X3ZlcnNpb24odm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGVjX3Byb2Nlc3MgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqYXJndl9lY1tdID0geyAiZW1hY3NjbGllbnQiLCAiLS12ZXJzaW9uIiwgTlVMTCB9OworCWludCB2ZXJzaW9uOworCisJLyogZW1hY3NjbGllbnQgcHJpbnRzIGl0cyB2ZXJzaW9uIG51bWJlciBvbiBzdGRlcnIgKi8KKwllY19wcm9jZXNzLmFyZ3YgPSBhcmd2X2VjOworCWVjX3Byb2Nlc3MuZXJyID0gLTE7CisJZWNfcHJvY2Vzcy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmZWNfcHJvY2VzcykpCisJCXJldHVybiBlcnJvcihfKCJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIikpOworCisJc3RyYnVmX3JlYWQoJmJ1ZmZlciwgZWNfcHJvY2Vzcy5lcnIsIDIwKTsKKwljbG9zZShlY19wcm9jZXNzLmVycik7CisKKwkvKgorCSAqIERvbid0IGJvdGhlciBjaGVja2luZyByZXR1cm4gdmFsdWUsIGJlY2F1c2UgImVtYWNzY2xpZW50IC0tdmVyc2lvbiIKKwkgKiBzZWVtcyB0byBhbHdheXMgZXhpdHMgd2l0aCBjb2RlIDEuCisJICovCisJZmluaXNoX2NvbW1hbmQoJmVjX3Byb2Nlc3MpOworCisJaWYgKCFzdGFydHNfd2l0aChidWZmZXIuYnVmLCAiZW1hY3NjbGllbnQiKSkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwkJcmV0dXJuIGVycm9yKF8oIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIpKTsKKwl9CisKKwlzdHJidWZfcmVtb3ZlKCZidWZmZXIsIDAsIHN0cmxlbigiZW1hY3NjbGllbnQiKSk7CisJdmVyc2lvbiA9IGF0b2koYnVmZmVyLmJ1Zik7CisKKwlpZiAodmVyc2lvbiA8IDIyKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCQlyZXR1cm4gZXJyb3IoXygiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIpLAorCQkJdmVyc2lvbik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNfd29tYW5fZW1hY3MoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3sKKwlpZiAoIWNoZWNrX2VtYWNzY2xpZW50X3ZlcnNpb24oKSkgeworCQkvKiBUaGlzIHdvcmtzIG9ubHkgd2l0aCBlbWFjc2NsaWVudCB2ZXJzaW9uID49IDIyLiAqLworCQlzdHJ1Y3Qgc3RyYnVmIG1hbl9wYWdlID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKCFwYXRoKQorCQkJcGF0aCA9ICJlbWFjc2NsaWVudCI7CisJCXN0cmJ1Zl9hZGRmKCZtYW5fcGFnZSwgIih3b21hbiBcIiVzXCIpIiwgcGFnZSk7CisJCWV4ZWNscChwYXRoLCAiZW1hY3NjbGllbnQiLCAiLWUiLCBtYW5fcGFnZS5idWYsIChjaGFyICopTlVMTCk7CisJCXdhcm5pbmdfZXJybm8oXygiZmFpbGVkIHRvIGV4ZWMgJyVzJyIpLCBwYXRoKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm1hbl9wYWdlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNfbWFuX2tvbnF1ZXJvcihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwYWdlKQoreworCWNvbnN0IGNoYXIgKmRpc3BsYXkgPSBnZXRlbnYoIkRJU1BMQVkiKTsKKwlpZiAoZGlzcGxheSAmJiAqZGlzcGxheSkgeworCQlzdHJ1Y3Qgc3RyYnVmIG1hbl9wYWdlID0gU1RSQlVGX0lOSVQ7CisJCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gImtmbWNsaWVudCI7CisKKwkJLyogSXQncyBzaW1wbGVyIHRvIGxhdW5jaCBrb25xdWVyb3IgdXNpbmcga2ZtY2xpZW50LiAqLworCQlpZiAocGF0aCkgeworCQkJc2l6ZV90IGxlbjsKKwkJCWlmIChzdHJpcF9zdWZmaXgocGF0aCwgIi9rb25xdWVyb3IiLCAmbGVuKSkKKwkJCQlwYXRoID0geHN0cmZtdCgiJS4qcy9rZm1jbGllbnQiLCAoaW50KWxlbiwgcGF0aCk7CisJCQlmaWxlbmFtZSA9IGJhc2VuYW1lKChjaGFyICopcGF0aCk7CisJCX0gZWxzZQorCQkJcGF0aCA9ICJrZm1jbGllbnQiOworCQlzdHJidWZfYWRkZigmbWFuX3BhZ2UsICJtYW46JXMoMSkiLCBwYWdlKTsKKwkJZXhlY2xwKHBhdGgsIGZpbGVuYW1lLCAibmV3VGFiIiwgbWFuX3BhZ2UuYnVmLCAoY2hhciAqKU5VTEwpOworCQl3YXJuaW5nX2Vycm5vKF8oImZhaWxlZCB0byBleGVjICclcyciKSwgcGF0aCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZtYW5fcGFnZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBleGVjX21hbl9tYW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3sKKwlpZiAoIXBhdGgpCisJCXBhdGggPSAibWFuIjsKKwlleGVjbHAocGF0aCwgIm1hbiIsIHBhZ2UsIChjaGFyICopTlVMTCk7CisJd2FybmluZ19lcnJubyhfKCJmYWlsZWQgdG8gZXhlYyAnJXMnIiksIHBhdGgpOworfQorCitzdGF0aWMgdm9pZCBleGVjX21hbl9jbWQoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpwYWdlKQoreworCXN0cnVjdCBzdHJidWYgc2hlbGxfY21kID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJnNoZWxsX2NtZCwgIiVzICVzIiwgY21kLCBwYWdlKTsKKwlleGVjbChTSEVMTF9QQVRILCBTSEVMTF9QQVRILCAiLWMiLCBzaGVsbF9jbWQuYnVmLCAoY2hhciAqKU5VTEwpOworCXdhcm5pbmcoXygiZmFpbGVkIHRvIGV4ZWMgJyVzJyIpLCBjbWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZzaGVsbF9jbWQpOworfQorCitzdGF0aWMgdm9pZCBhZGRfbWFuX3ZpZXdlcihjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBtYW5fdmlld2VyX2xpc3QgKipwID0gJm1hbl92aWV3ZXJfbGlzdDsKKworCXdoaWxlICgqcCkKKwkJcCA9ICYoKCpwKS0+bmV4dCk7CisJRkxFWF9BTExPQ19TVFIoKnAsIG5hbWUsIG5hbWUpOworfQorCitzdGF0aWMgaW50IHN1cHBvcnRlZF9tYW5fdmlld2VyKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuICghc3RybmNhc2VjbXAoIm1hbiIsIG5hbWUsIGxlbikgfHwKKwkJIXN0cm5jYXNlY21wKCJ3b21hbiIsIG5hbWUsIGxlbikgfHwKKwkJIXN0cm5jYXNlY21wKCJrb25xdWVyb3IiLCBuYW1lLCBsZW4pKTsKK30KKworc3RhdGljIHZvaWQgZG9fYWRkX21hbl92aWV3ZXJfaW5mbyhjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIHNpemVfdCBsZW4sCisJCQkJICAgY29uc3QgY2hhciAqdmFsdWUpCit7CisJc3RydWN0IG1hbl92aWV3ZXJfaW5mb19saXN0ICpuZXdfbWFuX3ZpZXdlcjsKKwlGTEVYX0FMTE9DX01FTShuZXdfbWFuX3ZpZXdlciwgbmFtZSwgbmFtZSwgbGVuKTsKKwluZXdfbWFuX3ZpZXdlci0+aW5mbyA9IHhzdHJkdXAodmFsdWUpOworCW5ld19tYW5fdmlld2VyLT5uZXh0ID0gbWFuX3ZpZXdlcl9pbmZvX2xpc3Q7CisJbWFuX3ZpZXdlcl9pbmZvX2xpc3QgPSBuZXdfbWFuX3ZpZXdlcjsKK30KKworc3RhdGljIGludCBhZGRfbWFuX3ZpZXdlcl9wYXRoKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICAgc2l6ZV90IGxlbiwKKwkJCSAgICAgICBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoc3VwcG9ydGVkX21hbl92aWV3ZXIobmFtZSwgbGVuKSkKKwkJZG9fYWRkX21hbl92aWV3ZXJfaW5mbyhuYW1lLCBsZW4sIHZhbHVlKTsKKwllbHNlCisJCXdhcm5pbmcoXygiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKwkJCSAgIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5jbWQnIGluc3RlYWQuIiksCisJCQluYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9tYW5fdmlld2VyX2NtZChjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgc2l6ZV90IGxlbiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmIChzdXBwb3J0ZWRfbWFuX3ZpZXdlcihuYW1lLCBsZW4pKQorCQl3YXJuaW5nKF8oIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisJCQkgICJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iKSwKKwkJCW5hbWUpOworCWVsc2UKKwkJZG9fYWRkX21hbl92aWV3ZXJfaW5mbyhuYW1lLCBsZW4sIHZhbHVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9tYW5fdmlld2VyX2luZm8oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwljb25zdCBjaGFyICpuYW1lLCAqc3Via2V5OworCXNpemVfdCBuYW1lbGVuOworCisJaWYgKHBhcnNlX2NvbmZpZ19rZXkodmFyLCAibWFuIiwgJm5hbWUsICZuYW1lbGVuLCAmc3Via2V5KSA8IDAgfHwgIW5hbWUpCisJCXJldHVybiAwOworCisJaWYgKCFzdHJjbXAoc3Via2V5LCAicGF0aCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcmV0dXJuIGFkZF9tYW5fdmlld2VyX3BhdGgobmFtZSwgbmFtZWxlbiwgdmFsdWUpOworCX0KKwlpZiAoIXN0cmNtcChzdWJrZXksICJjbWQiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXJldHVybiBhZGRfbWFuX3ZpZXdlcl9jbWQobmFtZSwgbmFtZWxlbiwgdmFsdWUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9oZWxwX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAiY29sdW1uLiIpKQorCQlyZXR1cm4gZ2l0X2NvbHVtbl9jb25maWcodmFyLCB2YWx1ZSwgImhlbHAiLCAmY29sb3B0cyk7CisJaWYgKCFzdHJjbXAodmFyLCAiaGVscC5mb3JtYXQiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWhlbHBfZm9ybWF0ID0gcGFyc2VfaGVscF9mb3JtYXQodmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiaGVscC5odG1scGF0aCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJaHRtbF9wYXRoID0geHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJtYW4udmlld2VyIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlhZGRfbWFuX3ZpZXdlcih2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAibWFuLiIpKQorCQlyZXR1cm4gYWRkX21hbl92aWV3ZXJfaW5mbyh2YXIsIHZhbHVlKTsKKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgc3RydWN0IGNtZG5hbWVzIG1haW5fY21kcywgb3RoZXJfY21kczsKKworc3RhdGljIGludCBpc19naXRfY29tbWFuZChjb25zdCBjaGFyICpzKQoreworCWlmIChpc19idWlsdGluKHMpKQorCQlyZXR1cm4gMTsKKworCWxvYWRfY29tbWFuZF9saXN0KCJnaXQtIiwgJm1haW5fY21kcywgJm90aGVyX2NtZHMpOworCXJldHVybiBpc19pbl9jbWRsaXN0KCZtYWluX2NtZHMsIHMpIHx8CisJCWlzX2luX2NtZGxpc3QoJm90aGVyX2NtZHMsIHMpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY21kX3RvX3BhZ2UoY29uc3QgY2hhciAqZ2l0X2NtZCkKK3sKKwlpZiAoIWdpdF9jbWQpCisJCXJldHVybiAiZ2l0IjsKKwllbHNlIGlmIChzdGFydHNfd2l0aChnaXRfY21kLCAiZ2l0IikpCisJCXJldHVybiBnaXRfY21kOworCWVsc2UgaWYgKGlzX2dpdF9jb21tYW5kKGdpdF9jbWQpKQorCQlyZXR1cm4geHN0cmZtdCgiZ2l0LSVzIiwgZ2l0X2NtZCk7CisJZWxzZQorCQlyZXR1cm4geHN0cmZtdCgiZ2l0JXMiLCBnaXRfY21kKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfbWFuX3BhdGgodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG5ld19wYXRoID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqb2xkX3BhdGggPSBnZXRlbnYoIk1BTlBBVEgiKTsKKwljaGFyICpnaXRfbWFuX3BhdGggPSBzeXN0ZW1fcGF0aChHSVRfTUFOX1BBVEgpOworCisJLyogV2Ugc2hvdWxkIGFsd2F5cyBwdXQgJzonIGFmdGVyIG91ciBwYXRoLiBJZiB0aGVyZSBpcyBubworCSAqIG9sZF9wYXRoLCB0aGUgJzonIGF0IHRoZSBlbmQgd2lsbCBsZXQgJ21hbicgdG8gdHJ5CisJICogc3lzdGVtLXdpZGUgcGF0aHMgYWZ0ZXIgb3VycyB0byBmaW5kIHRoZSBtYW51YWwgcGFnZS4gSWYKKwkgKiB0aGVyZSBpcyBvbGRfcGF0aCwgd2UgbmVlZCAnOicgYXMgZGVsaW1pdGVyLiAqLworCXN0cmJ1Zl9hZGRzdHIoJm5ld19wYXRoLCBnaXRfbWFuX3BhdGgpOworCXN0cmJ1Zl9hZGRjaCgmbmV3X3BhdGgsICc6Jyk7CisJaWYgKG9sZF9wYXRoKQorCQlzdHJidWZfYWRkc3RyKCZuZXdfcGF0aCwgb2xkX3BhdGgpOworCisJZnJlZShnaXRfbWFuX3BhdGgpOworCXNldGVudigiTUFOUEFUSCIsIG5ld19wYXRoLmJ1ZiwgMSk7CisKKwlzdHJidWZfcmVsZWFzZSgmbmV3X3BhdGgpOworfQorCitzdGF0aWMgdm9pZCBleGVjX3ZpZXdlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYWdlKQoreworCWNvbnN0IGNoYXIgKmluZm8gPSBnZXRfbWFuX3ZpZXdlcl9pbmZvKG5hbWUpOworCisJaWYgKCFzdHJjYXNlY21wKG5hbWUsICJtYW4iKSkKKwkJZXhlY19tYW5fbWFuKGluZm8sIHBhZ2UpOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKG5hbWUsICJ3b21hbiIpKQorCQlleGVjX3dvbWFuX2VtYWNzKGluZm8sIHBhZ2UpOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKG5hbWUsICJrb25xdWVyb3IiKSkKKwkJZXhlY19tYW5fa29ucXVlcm9yKGluZm8sIHBhZ2UpOworCWVsc2UgaWYgKGluZm8pCisJCWV4ZWNfbWFuX2NtZChpbmZvLCBwYWdlKTsKKwllbHNlCisJCXdhcm5pbmcoXygiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIpLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19tYW5fcGFnZShjb25zdCBjaGFyICpnaXRfY21kKQoreworCXN0cnVjdCBtYW5fdmlld2VyX2xpc3QgKnZpZXdlcjsKKwljb25zdCBjaGFyICpwYWdlID0gY21kX3RvX3BhZ2UoZ2l0X2NtZCk7CisJY29uc3QgY2hhciAqZmFsbGJhY2sgPSBnZXRlbnYoIkdJVF9NQU5fVklFV0VSIik7CisKKwlzZXR1cF9tYW5fcGF0aCgpOworCWZvciAodmlld2VyID0gbWFuX3ZpZXdlcl9saXN0OyB2aWV3ZXI7IHZpZXdlciA9IHZpZXdlci0+bmV4dCkKKwl7CisJCWV4ZWNfdmlld2VyKHZpZXdlci0+bmFtZSwgcGFnZSk7IC8qIHdpbGwgcmV0dXJuIHdoZW4gdW5hYmxlICovCisJfQorCWlmIChmYWxsYmFjaykKKwkJZXhlY192aWV3ZXIoZmFsbGJhY2ssIHBhZ2UpOworCWV4ZWNfdmlld2VyKCJtYW4iLCBwYWdlKTsKKwlkaWUoXygibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IikpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2luZm9fcGFnZShjb25zdCBjaGFyICpnaXRfY21kKQoreworCWNvbnN0IGNoYXIgKnBhZ2UgPSBjbWRfdG9fcGFnZShnaXRfY21kKTsKKwlzZXRlbnYoIklORk9QQVRIIiwgc3lzdGVtX3BhdGgoR0lUX0lORk9fUEFUSCksIDEpOworCWV4ZWNscCgiaW5mbyIsICJpbmZvIiwgImdpdG1hbiIsIHBhZ2UsIChjaGFyICopTlVMTCk7CisJZGllKF8oIm5vIGluZm8gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9odG1sX3BhZ2VfcGF0aChzdHJ1Y3Qgc3RyYnVmICpwYWdlX3BhdGgsIGNvbnN0IGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhciAqdG9fZnJlZSA9IE5VTEw7CisKKwlpZiAoIWh0bWxfcGF0aCkKKwkJaHRtbF9wYXRoID0gdG9fZnJlZSA9IHN5c3RlbV9wYXRoKEdJVF9IVE1MX1BBVEgpOworCisJLyogQ2hlY2sgdGhhdCB3ZSBoYXZlIGEgZ2l0IGRvY3VtZW50YXRpb24gZGlyZWN0b3J5LiAqLworCWlmICghc3Ryc3RyKGh0bWxfcGF0aCwgIjovLyIpKSB7CisJCWlmIChzdGF0KG1rcGF0aCgiJXMvZ2l0Lmh0bWwiLCBodG1sX3BhdGgpLCAmc3QpCisJCSAgICB8fCAhU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJCWRpZSgiJyVzJzogbm90IGEgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkuIiwgaHRtbF9wYXRoKTsKKwl9CisKKwlzdHJidWZfaW5pdChwYWdlX3BhdGgsIDApOworCXN0cmJ1Zl9hZGRmKHBhZ2VfcGF0aCwgIiVzLyVzLmh0bWwiLCBodG1sX3BhdGgsIHBhZ2UpOworCWZyZWUodG9fZnJlZSk7Cit9CisKK3N0YXRpYyB2b2lkIG9wZW5faHRtbChjb25zdCBjaGFyICpwYXRoKQoreworCWV4ZWNsX2dpdF9jbWQoIndlYi0tYnJvd3NlIiwgIi1jIiwgImhlbHAuYnJvd3NlciIsIHBhdGgsIChjaGFyICopTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfaHRtbF9wYWdlKGNvbnN0IGNoYXIgKmdpdF9jbWQpCit7CisJY29uc3QgY2hhciAqcGFnZSA9IGNtZF90b19wYWdlKGdpdF9jbWQpOworCXN0cnVjdCBzdHJidWYgcGFnZV9wYXRoOyAvKiBpdCBsZWFrcyBidXQgd2UgZXhlYyBiZWxsb3cgKi8KKworCWdldF9odG1sX3BhZ2VfcGF0aCgmcGFnZV9wYXRoLCBwYWdlKTsKKworCW9wZW5faHRtbChwYWdlX3BhdGguYnVmKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNoZWNrX2dpdF9jbWQoY29uc3QgY2hhciogY21kKQoreworCWNoYXIgKmFsaWFzOworCisJaWYgKGlzX2dpdF9jb21tYW5kKGNtZCkpCisJCXJldHVybiBjbWQ7CisKKwlhbGlhcyA9IGFsaWFzX2xvb2t1cChjbWQpOworCWlmIChhbGlhcykgeworCQljb25zdCBjaGFyICoqYXJndjsKKwkJaW50IGNvdW50OworCisJCS8qCisJCSAqIGhhbmRsZV9idWlsdGluKCkgaW4gZ2l0LmMgcmV3cml0ZXMgImdpdCBjbWQgLS1oZWxwIgorCQkgKiB0byAiZ2l0IGhlbHAgLS1leGNsdWRlLWd1aWRlcyBjbWQiLCBzbyB3ZSBjYW4gdXNlCisJCSAqIGV4Y2x1ZGVfZ3VpZGVzIHRvIGRpc3Rpbmd1aXNoICJnaXQgY21kIC0taGVscCIgZnJvbQorCQkgKiAiZ2l0IGhlbHAgY21kIi4gSW4gdGhlIGxhdHRlciBjYXNlLCBvciBpZiBjbWQgaXMgYW4KKwkJICogYWxpYXMgZm9yIGEgc2hlbGwgY29tbWFuZCwganVzdCBwcmludCB0aGUgYWxpYXMKKwkJICogZGVmaW5pdGlvbi4KKwkJICovCisJCWlmICghZXhjbHVkZV9ndWlkZXMgfHwgYWxpYXNbMF0gPT0gJyEnKSB7CisJCQlwcmludGZfbG4oXygiJyVzJyBpcyBhbGlhc2VkIHRvICclcyciKSwgY21kLCBhbGlhcyk7CisJCQlmcmVlKGFsaWFzKTsKKwkJCWV4aXQoMCk7CisJCX0KKwkJLyoKKwkJICogT3RoZXJ3aXNlLCB3ZSBwcmV0ZW5kIHRoYXQgdGhlIGNvbW1hbmQgd2FzICJnaXQKKwkJICogd29yZDAgLS1oZWxwIi4gV2UgdXNlIHNwbGl0X2NtZGxpbmUoKSB0byBnZXQgdGhlCisJCSAqIGZpcnN0IHdvcmQgb2YgdGhlIGFsaWFzLCB0byBlbnN1cmUgdGhhdCB3ZSB1c2UgdGhlCisJCSAqIHNhbWUgcnVsZXMgYXMgd2hlbiB0aGUgYWxpYXMgaXMgYWN0dWFsbHkKKwkJICogdXNlZC4gc3BsaXRfY21kbGluZSgpIG1vZGlmaWVzIGFsaWFzIGluLXBsYWNlLgorCQkgKi8KKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIiclcycgaXMgYWxpYXNlZCB0byAnJXMnIiksIGNtZCwgYWxpYXMpOworCQljb3VudCA9IHNwbGl0X2NtZGxpbmUoYWxpYXMsICZhcmd2KTsKKwkJaWYgKGNvdW50IDwgMCkKKwkJCWRpZShfKCJiYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIpLCBjbWQsCisJCQkgICAgc3BsaXRfY21kbGluZV9zdHJlcnJvcihjb3VudCkpOworCQlmcmVlKGFyZ3YpOworCQlVTkxFQUsoYWxpYXMpOworCQlyZXR1cm4gYWxpYXM7CisJfQorCisJaWYgKGV4Y2x1ZGVfZ3VpZGVzKQorCQlyZXR1cm4gaGVscF91bmtub3duX2NtZChjbWQpOworCisJcmV0dXJuIGNtZDsKK30KKworaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBub25naXQ7CisJZW51bSBoZWxwX2Zvcm1hdCBwYXJzZWRfaGVscF9mb3JtYXQ7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5faGVscF9vcHRpb25zLAorCQkJYnVpbHRpbl9oZWxwX3VzYWdlLCAwKTsKKwlwYXJzZWRfaGVscF9mb3JtYXQgPSBoZWxwX2Zvcm1hdDsKKworCWlmIChzaG93X2FsbCkgeworCQlnaXRfY29uZmlnKGdpdF9oZWxwX2NvbmZpZywgTlVMTCk7CisJCWlmICh2ZXJib3NlKSB7CisJCQlzZXR1cF9wYWdlcigpOworCQkJbGlzdF9hbGxfY21kc19oZWxwKCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlwcmludGYoXygidXNhZ2U6ICVzJXMiKSwgXyhnaXRfdXNhZ2Vfc3RyaW5nKSwgIlxuXG4iKTsKKwkJbG9hZF9jb21tYW5kX2xpc3QoImdpdC0iLCAmbWFpbl9jbWRzLCAmb3RoZXJfY21kcyk7CisJCWxpc3RfY29tbWFuZHMoY29sb3B0cywgJm1haW5fY21kcywgJm90aGVyX2NtZHMpOworCX0KKworCWlmIChzaG93X2NvbmZpZykgeworCQlpbnQgZm9yX2h1bWFuID0gc2hvd19jb25maWcgPT0gMTsKKworCQlpZiAoIWZvcl9odW1hbikgeworCQkJbGlzdF9jb25maWdfaGVscChmb3JfaHVtYW4pOworCQkJcmV0dXJuIDA7CisJCX0KKwkJc2V0dXBfcGFnZXIoKTsKKwkJbGlzdF9jb25maWdfaGVscChmb3JfaHVtYW4pOworCQlwcmludGYoIlxuJXNcbiIsIF8oIidnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGluZm9ybWF0aW9uIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2hvd19ndWlkZXMpCisJCWxpc3RfY29tbW9uX2d1aWRlc19oZWxwKCk7CisKKwlpZiAoc2hvd19hbGwgfHwgc2hvd19ndWlkZXMpIHsKKwkJcHJpbnRmKCIlc1xuIiwgXyhnaXRfbW9yZV9pbmZvX3N0cmluZykpOworCQkvKgorCQkqIFdlJ3JlIGRvbmUuIElnbm9yZSBhbnkgcmVtYWluaW5nIGFyZ3MKKwkJKi8KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFhcmd2WzBdKSB7CisJCXByaW50ZihfKCJ1c2FnZTogJXMlcyIpLCBfKGdpdF91c2FnZV9zdHJpbmcpLCAiXG5cbiIpOworCQlsaXN0X2NvbW1vbl9jbWRzX2hlbHAoKTsKKwkJcHJpbnRmKCJcbiVzXG4iLCBfKGdpdF9tb3JlX2luZm9fc3RyaW5nKSk7CisJCXJldHVybiAwOworCX0KKworCXNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOworCWdpdF9jb25maWcoZ2l0X2hlbHBfY29uZmlnLCBOVUxMKTsKKworCWlmIChwYXJzZWRfaGVscF9mb3JtYXQgIT0gSEVMUF9GT1JNQVRfTk9ORSkKKwkJaGVscF9mb3JtYXQgPSBwYXJzZWRfaGVscF9mb3JtYXQ7CisJaWYgKGhlbHBfZm9ybWF0ID09IEhFTFBfRk9STUFUX05PTkUpCisJCWhlbHBfZm9ybWF0ID0gcGFyc2VfaGVscF9mb3JtYXQoREVGQVVMVF9IRUxQX0ZPUk1BVCk7CisKKwlhcmd2WzBdID0gY2hlY2tfZ2l0X2NtZChhcmd2WzBdKTsKKworCXN3aXRjaCAoaGVscF9mb3JtYXQpIHsKKwljYXNlIEhFTFBfRk9STUFUX05PTkU6CisJY2FzZSBIRUxQX0ZPUk1BVF9NQU46CisJCXNob3dfbWFuX3BhZ2UoYXJndlswXSk7CisJCWJyZWFrOworCWNhc2UgSEVMUF9GT1JNQVRfSU5GTzoKKwkJc2hvd19pbmZvX3BhZ2UoYXJndlswXSk7CisJCWJyZWFrOworCWNhc2UgSEVMUF9GT1JNQVRfV0VCOgorCQlzaG93X2h0bWxfcGFnZShhcmd2WzBdKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2luZGV4LXBhY2suYyBiL2J1aWx0aW4vaW5kZXgtcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzZkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2luZGV4LXBhY2suYwpAQCAtMCwwICsxLDE4NTIgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAiY3N1bS1maWxlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgImZzY2suaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInN0cmVhbWluZy5oIgorI2luY2x1ZGUgInRocmVhZC11dGlscy5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicHJvbWlzb3ItcmVtb3RlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGluZGV4X3BhY2tfdXNhZ2VbXSA9CisiZ2l0IGluZGV4LXBhY2sgWy12XSBbLW8gPGluZGV4LWZpbGU+XSBbLS1rZWVwIHwgLS1rZWVwPTxtc2c+XSBbLS12ZXJpZnldIFstLXN0cmljdF0gKDxwYWNrLWZpbGU+IHwgLS1zdGRpbiBbLS1maXgtdGhpbl0gWzxwYWNrLWZpbGU+XSkiOworCitzdHJ1Y3Qgb2JqZWN0X2VudHJ5IHsKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgaWR4OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIGhkcl9zaXplOworCXNpZ25lZCBjaGFyIHR5cGU7CisJc2lnbmVkIGNoYXIgcmVhbF90eXBlOworfTsKKworc3RydWN0IG9iamVjdF9zdGF0IHsKKwl1bnNpZ25lZCBkZWx0YV9kZXB0aDsKKwlpbnQgYmFzZV9vYmplY3Rfbm87Cit9OworCitzdHJ1Y3QgYmFzZV9kYXRhIHsKKwlzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlOworCXN0cnVjdCBiYXNlX2RhdGEgKmNoaWxkOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iajsKKwl2b2lkICpkYXRhOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlpbnQgcmVmX2ZpcnN0LCByZWZfbGFzdDsKKwlpbnQgb2ZzX2ZpcnN0LCBvZnNfbGFzdDsKK307CisKK3N0cnVjdCB0aHJlYWRfbG9jYWwgeworCXB0aHJlYWRfdCB0aHJlYWQ7CisJc3RydWN0IGJhc2VfZGF0YSAqYmFzZV9jYWNoZTsKKwlzaXplX3QgYmFzZV9jYWNoZV91c2VkOworCWludCBwYWNrX2ZkOworfTsKKworLyogUmVtZW1iZXIgdG8gdXBkYXRlIG9iamVjdCBmbGFnIGFsbG9jYXRpb24gaW4gb2JqZWN0LmggKi8KKyNkZWZpbmUgRkxBR19MSU5LICgxdTw8MjApCisjZGVmaW5lIEZMQUdfQ0hFQ0tFRCAoMXU8PDIxKQorCitzdHJ1Y3Qgb2ZzX2RlbHRhX2VudHJ5IHsKKwlvZmZfdCBvZmZzZXQ7CisJaW50IG9ial9ubzsKK307CisKK3N0cnVjdCByZWZfZGVsdGFfZW50cnkgeworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBvYmpfbm87Cit9OworCitzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqZWN0czsKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X3N0YXQgKm9ial9zdGF0Oworc3RhdGljIHN0cnVjdCBvZnNfZGVsdGFfZW50cnkgKm9mc19kZWx0YXM7CitzdGF0aWMgc3RydWN0IHJlZl9kZWx0YV9lbnRyeSAqcmVmX2RlbHRhczsKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkX2xvY2FsIG5vdGhyZWFkX2RhdGE7CitzdGF0aWMgaW50IG5yX29iamVjdHM7CitzdGF0aWMgaW50IG5yX29mc19kZWx0YXM7CitzdGF0aWMgaW50IG5yX3JlZl9kZWx0YXM7CitzdGF0aWMgaW50IHJlZl9kZWx0YXNfYWxsb2M7CitzdGF0aWMgaW50IG5yX3Jlc29sdmVkX2RlbHRhczsKK3N0YXRpYyBpbnQgbnJfdGhyZWFkczsKKworc3RhdGljIGludCBmcm9tX3N0ZGluOworc3RhdGljIGludCBzdHJpY3Q7CitzdGF0aWMgaW50IGRvX2ZzY2tfb2JqZWN0Oworc3RhdGljIHN0cnVjdCBmc2NrX29wdGlvbnMgZnNja19vcHRpb25zID0gRlNDS19PUFRJT05TX1NUUklDVDsKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgc2hvd19yZXNvbHZpbmdfcHJvZ3Jlc3M7CitzdGF0aWMgaW50IHNob3dfc3RhdDsKK3N0YXRpYyBpbnQgY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZDsKKworc3RhdGljIHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CisKKy8qIFdlIGFsd2F5cyByZWFkIGluIDRrQiBjaHVua3MuICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBpbnB1dF9idWZmZXJbNDA5Nl07CitzdGF0aWMgdW5zaWduZWQgaW50IGlucHV0X29mZnNldCwgaW5wdXRfbGVuOworc3RhdGljIG9mZl90IGNvbnN1bWVkX2J5dGVzOworc3RhdGljIG9mZl90IG1heF9pbnB1dF9zaXplOworc3RhdGljIHVuc2lnbmVkIGRlZXBlc3RfZGVsdGE7CitzdGF0aWMgZ2l0X2hhc2hfY3R4IGlucHV0X2N0eDsKK3N0YXRpYyB1aW50MzJfdCBpbnB1dF9jcmMzMjsKK3N0YXRpYyBpbnQgaW5wdXRfZmQsIG91dHB1dF9mZDsKK3N0YXRpYyBjb25zdCBjaGFyICpjdXJyX3BhY2s7CisKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkX2xvY2FsICp0aHJlYWRfZGF0YTsKK3N0YXRpYyBpbnQgbnJfZGlzcGF0Y2hlZDsKK3N0YXRpYyBpbnQgdGhyZWFkc19hY3RpdmU7CisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgcmVhZF9tdXRleDsKKyNkZWZpbmUgcmVhZF9sb2NrKCkJCWxvY2tfbXV0ZXgoJnJlYWRfbXV0ZXgpCisjZGVmaW5lIHJlYWRfdW5sb2NrKCkJCXVubG9ja19tdXRleCgmcmVhZF9tdXRleCkKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBjb3VudGVyX211dGV4OworI2RlZmluZSBjb3VudGVyX2xvY2soKQkJbG9ja19tdXRleCgmY291bnRlcl9tdXRleCkKKyNkZWZpbmUgY291bnRlcl91bmxvY2soKQl1bmxvY2tfbXV0ZXgoJmNvdW50ZXJfbXV0ZXgpCisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3Qgd29ya19tdXRleDsKKyNkZWZpbmUgd29ya19sb2NrKCkJCWxvY2tfbXV0ZXgoJndvcmtfbXV0ZXgpCisjZGVmaW5lIHdvcmtfdW5sb2NrKCkJCXVubG9ja19tdXRleCgmd29ya19tdXRleCkKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBkZWVwZXN0X2RlbHRhX211dGV4OworI2RlZmluZSBkZWVwZXN0X2RlbHRhX2xvY2soKQlsb2NrX211dGV4KCZkZWVwZXN0X2RlbHRhX211dGV4KQorI2RlZmluZSBkZWVwZXN0X2RlbHRhX3VubG9jaygpCXVubG9ja19tdXRleCgmZGVlcGVzdF9kZWx0YV9tdXRleCkKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCB0eXBlX2Nhc19tdXRleDsKKyNkZWZpbmUgdHlwZV9jYXNfbG9jaygpCQlsb2NrX211dGV4KCZ0eXBlX2Nhc19tdXRleCkKKyNkZWZpbmUgdHlwZV9jYXNfdW5sb2NrKCkJdW5sb2NrX211dGV4KCZ0eXBlX2Nhc19tdXRleCkKKworc3RhdGljIHB0aHJlYWRfa2V5X3Qga2V5OworCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19tdXRleChwdGhyZWFkX211dGV4X3QgKm11dGV4KQoreworCWlmICh0aHJlYWRzX2FjdGl2ZSkKKwkJcHRocmVhZF9tdXRleF9sb2NrKG11dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19tdXRleChwdGhyZWFkX211dGV4X3QgKm11dGV4KQoreworCWlmICh0aHJlYWRzX2FjdGl2ZSkKKwkJcHRocmVhZF9tdXRleF91bmxvY2sobXV0ZXgpOworfQorCisvKgorICogTXV0ZXggYW5kIGNvbmRpdGlvbmFsIHZhcmlhYmxlIGNhbid0IGJlIHN0YXRpY2FsbHktaW5pdGlhbGl6ZWQgb24gV2luZG93cy4KKyAqLworc3RhdGljIHZvaWQgaW5pdF90aHJlYWQodm9pZCkKK3sKKwlpbnQgaTsKKwlpbml0X3JlY3Vyc2l2ZV9tdXRleCgmcmVhZF9tdXRleCk7CisJcHRocmVhZF9tdXRleF9pbml0KCZjb3VudGVyX211dGV4LCBOVUxMKTsKKwlwdGhyZWFkX211dGV4X2luaXQoJndvcmtfbXV0ZXgsIE5VTEwpOworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmdHlwZV9jYXNfbXV0ZXgsIE5VTEwpOworCWlmIChzaG93X3N0YXQpCisJCXB0aHJlYWRfbXV0ZXhfaW5pdCgmZGVlcGVzdF9kZWx0YV9tdXRleCwgTlVMTCk7CisJcHRocmVhZF9rZXlfY3JlYXRlKCZrZXksIE5VTEwpOworCXRocmVhZF9kYXRhID0geGNhbGxvYyhucl90aHJlYWRzLCBzaXplb2YoKnRocmVhZF9kYXRhKSk7CisJZm9yIChpID0gMDsgaSA8IG5yX3RocmVhZHM7IGkrKykgeworCQl0aHJlYWRfZGF0YVtpXS5wYWNrX2ZkID0gb3BlbihjdXJyX3BhY2ssIE9fUkRPTkxZKTsKKwkJaWYgKHRocmVhZF9kYXRhW2ldLnBhY2tfZmQgPT0gLTEpCisJCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIG9wZW4gJXMiKSwgY3Vycl9wYWNrKTsKKwl9CisKKwl0aHJlYWRzX2FjdGl2ZSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfdGhyZWFkKHZvaWQpCit7CisJaW50IGk7CisJaWYgKCF0aHJlYWRzX2FjdGl2ZSkKKwkJcmV0dXJuOworCXRocmVhZHNfYWN0aXZlID0gMDsKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJnJlYWRfbXV0ZXgpOworCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmY291bnRlcl9tdXRleCk7CisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZ3b3JrX211dGV4KTsKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJnR5cGVfY2FzX211dGV4KTsKKwlpZiAoc2hvd19zdGF0KQorCQlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmRlZXBlc3RfZGVsdGFfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBucl90aHJlYWRzOyBpKyspCisJCWNsb3NlKHRocmVhZF9kYXRhW2ldLnBhY2tfZmQpOworCXB0aHJlYWRfa2V5X2RlbGV0ZShrZXkpOworCWZyZWUodGhyZWFkX2RhdGEpOworfQorCitzdGF0aWMgaW50IG1hcmtfbGluayhzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCB2b2lkICpkYXRhLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWlmICghb2JqKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodHlwZSAhPSBPQkpfQU5ZICYmIG9iai0+dHlwZSAhPSB0eXBlKQorCQlkaWUoXygib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiKSwgb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKKworCW9iai0+ZmxhZ3MgfD0gRkxBR19MSU5LOworCXJldHVybiAwOworfQorCisvKiBUaGUgY29udGVudCBvZiBlYWNoIGxpbmtlZCBvYmplY3QgbXVzdCBoYXZlIGJlZW4gY2hlY2tlZAorICAgb3IgaXQgbXVzdCBiZSBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSAqLworc3RhdGljIHVuc2lnbmVkIGNoZWNrX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJaWYgKCFvYmopCisJCXJldHVybiAwOworCisJaWYgKCEob2JqLT5mbGFncyAmIEZMQUdfTElOSykpCisJCXJldHVybiAwOworCisJaWYgKCEob2JqLT5mbGFncyAmIEZMQUdfQ0hFQ0tFRCkpIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQlpbnQgdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgJm9iai0+b2lkLCAmc2l6ZSk7CisJCWlmICh0eXBlIDw9IDApCisJCQlkaWUoXygiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIG9iamVjdCAlcyIpLAorCQkJICAgICAgb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKKwkJaWYgKHR5cGUgIT0gb2JqLT50eXBlKQorCQkJZGllKF8oIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiKSwKKwkJCSAgICBvaWRfdG9faGV4KCZvYmotPm9pZCksCisJCQkgICAgdHlwZV9uYW1lKG9iai0+dHlwZSksIHR5cGVfbmFtZSh0eXBlKSk7CisJCW9iai0+ZmxhZ3MgfD0gRkxBR19DSEVDS0VEOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoZWNrX29iamVjdHModm9pZCkKK3sKKwl1bnNpZ25lZCBpLCBtYXgsIGZvcmVpZ25fbnIgPSAwOworCisJbWF4ID0gZ2V0X21heF9vYmplY3RfaW5kZXgoKTsKKworCWlmICh2ZXJib3NlKQorCQlwcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoXygiQ2hlY2tpbmcgb2JqZWN0cyIpLCBtYXgpOworCisJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7CisJCWZvcmVpZ25fbnIgKz0gY2hlY2tfb2JqZWN0KGdldF9pbmRleGVkX29iamVjdChpKSk7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKKwl9CisKKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisJcmV0dXJuIGZvcmVpZ25fbnI7Cit9CisKKworLyogRGlzY2FyZCBjdXJyZW50IGJ1ZmZlciB1c2VkIGNvbnRlbnQuICovCitzdGF0aWMgdm9pZCBmbHVzaCh2b2lkKQoreworCWlmIChpbnB1dF9vZmZzZXQpIHsKKwkJaWYgKG91dHB1dF9mZCA+PSAwKQorCQkJd3JpdGVfb3JfZGllKG91dHB1dF9mZCwgaW5wdXRfYnVmZmVyLCBpbnB1dF9vZmZzZXQpOworCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmlucHV0X2N0eCwgaW5wdXRfYnVmZmVyLCBpbnB1dF9vZmZzZXQpOworCQltZW1tb3ZlKGlucHV0X2J1ZmZlciwgaW5wdXRfYnVmZmVyICsgaW5wdXRfb2Zmc2V0LCBpbnB1dF9sZW4pOworCQlpbnB1dF9vZmZzZXQgPSAwOworCX0KK30KKworLyoKKyAqIE1ha2Ugc3VyZSBhdCBsZWFzdCAibWluIiBieXRlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBidWZmZXIsIGFuZAorICogcmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkICpmaWxsKGludCBtaW4pCit7CisJaWYgKG1pbiA8PSBpbnB1dF9sZW4pCisJCXJldHVybiBpbnB1dF9idWZmZXIgKyBpbnB1dF9vZmZzZXQ7CisJaWYgKG1pbiA+IHNpemVvZihpbnB1dF9idWZmZXIpKQorCQlkaWUoUV8oImNhbm5vdCBmaWxsICVkIGJ5dGUiLAorCQkgICAgICAgImNhbm5vdCBmaWxsICVkIGJ5dGVzIiwKKwkJICAgICAgIG1pbiksCisJCSAgICBtaW4pOworCWZsdXNoKCk7CisJZG8geworCQlzc2l6ZV90IHJldCA9IHhyZWFkKGlucHV0X2ZkLCBpbnB1dF9idWZmZXIgKyBpbnB1dF9sZW4sCisJCQkJc2l6ZW9mKGlucHV0X2J1ZmZlcikgLSBpbnB1dF9sZW4pOworCQlpZiAocmV0IDw9IDApIHsKKwkJCWlmICghcmV0KQorCQkJCWRpZShfKCJlYXJseSBFT0YiKSk7CisJCQlkaWVfZXJybm8oXygicmVhZCBlcnJvciBvbiBpbnB1dCIpKTsKKwkJfQorCQlpbnB1dF9sZW4gKz0gcmV0OworCQlpZiAoZnJvbV9zdGRpbikKKwkJCWRpc3BsYXlfdGhyb3VnaHB1dChwcm9ncmVzcywgY29uc3VtZWRfYnl0ZXMgKyBpbnB1dF9sZW4pOworCX0gd2hpbGUgKGlucHV0X2xlbiA8IG1pbik7CisJcmV0dXJuIGlucHV0X2J1ZmZlcjsKK30KKworc3RhdGljIHZvaWQgdXNlKGludCBieXRlcykKK3sKKwlpZiAoYnl0ZXMgPiBpbnB1dF9sZW4pCisJCWRpZShfKCJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIpKTsKKwlpbnB1dF9jcmMzMiA9IGNyYzMyKGlucHV0X2NyYzMyLCBpbnB1dF9idWZmZXIgKyBpbnB1dF9vZmZzZXQsIGJ5dGVzKTsKKwlpbnB1dF9sZW4gLT0gYnl0ZXM7CisJaW5wdXRfb2Zmc2V0ICs9IGJ5dGVzOworCisJLyogbWFrZSBzdXJlIG9mZl90IGlzIHN1ZmZpY2llbnRseSBsYXJnZSBub3QgdG8gd3JhcCAqLworCWlmIChzaWduZWRfYWRkX292ZXJmbG93cyhjb25zdW1lZF9ieXRlcywgYnl0ZXMpKQorCQlkaWUoXygicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIpKTsKKwljb25zdW1lZF9ieXRlcyArPSBieXRlczsKKwlpZiAobWF4X2lucHV0X3NpemUgJiYgY29uc3VtZWRfYnl0ZXMgPiBtYXhfaW5wdXRfc2l6ZSkKKwkJZGllKF8oInBhY2sgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZSIpKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fcGFja19maWxlKGNvbnN0IGNoYXIgKnBhY2tfbmFtZSkKK3sKKwlpZiAoZnJvbV9zdGRpbikgeworCQlpbnB1dF9mZCA9IDA7CisJCWlmICghcGFja19uYW1lKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHRtcF9maWxlID0gU1RSQlVGX0lOSVQ7CisJCQlvdXRwdXRfZmQgPSBvZGJfbWtzdGVtcCgmdG1wX2ZpbGUsCisJCQkJCQkicGFjay90bXBfcGFja19YWFhYWFgiKTsKKwkJCXBhY2tfbmFtZSA9IHN0cmJ1Zl9kZXRhY2goJnRtcF9maWxlLCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCW91dHB1dF9mZCA9IG9wZW4ocGFja19uYW1lLCBPX0NSRUFUfE9fRVhDTHxPX1JEV1IsIDA2MDApOworCQkJaWYgKG91dHB1dF9mZCA8IDApCisJCQkJZGllX2Vycm5vKF8oInVuYWJsZSB0byBjcmVhdGUgJyVzJyIpLCBwYWNrX25hbWUpOworCQl9CisJCW5vdGhyZWFkX2RhdGEucGFja19mZCA9IG91dHB1dF9mZDsKKwl9IGVsc2UgeworCQlpbnB1dF9mZCA9IG9wZW4ocGFja19uYW1lLCBPX1JET05MWSk7CisJCWlmIChpbnB1dF9mZCA8IDApCisJCQlkaWVfZXJybm8oXygiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIpLCBwYWNrX25hbWUpOworCQlvdXRwdXRfZmQgPSAtMTsKKwkJbm90aHJlYWRfZGF0YS5wYWNrX2ZkID0gaW5wdXRfZmQ7CisJfQorCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJmlucHV0X2N0eCk7CisJcmV0dXJuIHBhY2tfbmFtZTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfcGFja19oZWFkZXIodm9pZCkKK3sKKwlzdHJ1Y3QgcGFja19oZWFkZXIgKmhkciA9IGZpbGwoc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcikpOworCisJLyogSGVhZGVyIGNvbnNpc3RlbmN5IGNoZWNrICovCisJaWYgKGhkci0+aGRyX3NpZ25hdHVyZSAhPSBodG9ubChQQUNLX1NJR05BVFVSRSkpCisJCWRpZShfKCJwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCIpKTsKKwlpZiAoIXBhY2tfdmVyc2lvbl9vayhoZHItPmhkcl92ZXJzaW9uKSkKKwkJZGllKF8oInBhY2sgdmVyc2lvbiAlIlBSSXUzMiIgdW5zdXBwb3J0ZWQiKSwKKwkJCW50b2hsKGhkci0+aGRyX3ZlcnNpb24pKTsKKworCW5yX29iamVjdHMgPSBudG9obChoZHItPmhkcl9lbnRyaWVzKTsKKwl1c2Uoc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcikpOworfQorCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBiYWRfb2JqZWN0KG9mZl90IG9mZnNldCwgY29uc3QgY2hhciAqZm9ybWF0LAorCQkgICAgICAgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKworc3RhdGljIE5PUkVUVVJOIHZvaWQgYmFkX29iamVjdChvZmZfdCBvZmZzZXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCWNoYXIgYnVmWzEwMjRdOworCisJdmFfc3RhcnQocGFyYW1zLCBmb3JtYXQpOworCXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7CisJZGllKF8oInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICUiUFJJdU1BWCI6ICVzIiksCisJICAgICh1aW50bWF4X3Qpb2Zmc2V0LCBidWYpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfbG9jYWwgKmdldF90aHJlYWRfZGF0YSh2b2lkKQoreworCWlmIChIQVZFX1RIUkVBRFMpIHsKKwkJaWYgKHRocmVhZHNfYWN0aXZlKQorCQkJcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5KTsKKwkJYXNzZXJ0KCF0aHJlYWRzX2FjdGl2ZSAmJgorCQkgICAgICAgIlRoaXMgc2hvdWxkIG9ubHkgYmUgcmVhY2hlZCB3aGVuIGFsbCB0aHJlYWRzIGFyZSBnb25lIik7CisJfQorCXJldHVybiAmbm90aHJlYWRfZGF0YTsKK30KKworc3RhdGljIHZvaWQgc2V0X3RocmVhZF9kYXRhKHN0cnVjdCB0aHJlYWRfbG9jYWwgKmRhdGEpCit7CisJaWYgKHRocmVhZHNfYWN0aXZlKQorCQlwdGhyZWFkX3NldHNwZWNpZmljKGtleSwgZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFzZV9kYXRhICphbGxvY19iYXNlX2RhdGEodm9pZCkKK3sKKwlzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGJhc2VfZGF0YSkpOworCWJhc2UtPnJlZl9sYXN0ID0gLTE7CisJYmFzZS0+b2ZzX2xhc3QgPSAtMTsKKwlyZXR1cm4gYmFzZTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9iYXNlX2RhdGEoc3RydWN0IGJhc2VfZGF0YSAqYykKK3sKKwlpZiAoYy0+ZGF0YSkgeworCQlGUkVFX0FORF9OVUxMKGMtPmRhdGEpOworCQlnZXRfdGhyZWFkX2RhdGEoKS0+YmFzZV9jYWNoZV91c2VkIC09IGMtPnNpemU7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcnVuZV9iYXNlX2RhdGEoc3RydWN0IGJhc2VfZGF0YSAqcmV0YWluKQoreworCXN0cnVjdCBiYXNlX2RhdGEgKmI7CisJc3RydWN0IHRocmVhZF9sb2NhbCAqZGF0YSA9IGdldF90aHJlYWRfZGF0YSgpOworCWZvciAoYiA9IGRhdGEtPmJhc2VfY2FjaGU7CisJICAgICBkYXRhLT5iYXNlX2NhY2hlX3VzZWQgPiBkZWx0YV9iYXNlX2NhY2hlX2xpbWl0ICYmIGI7CisJICAgICBiID0gYi0+Y2hpbGQpIHsKKwkJaWYgKGItPmRhdGEgJiYgYiAhPSByZXRhaW4pCisJCQlmcmVlX2Jhc2VfZGF0YShiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxpbmtfYmFzZV9kYXRhKHN0cnVjdCBiYXNlX2RhdGEgKmJhc2UsIHN0cnVjdCBiYXNlX2RhdGEgKmMpCit7CisJaWYgKGJhc2UpCisJCWJhc2UtPmNoaWxkID0gYzsKKwllbHNlCisJCWdldF90aHJlYWRfZGF0YSgpLT5iYXNlX2NhY2hlID0gYzsKKworCWMtPmJhc2UgPSBiYXNlOworCWMtPmNoaWxkID0gTlVMTDsKKwlpZiAoYy0+ZGF0YSkKKwkJZ2V0X3RocmVhZF9kYXRhKCktPmJhc2VfY2FjaGVfdXNlZCArPSBjLT5zaXplOworCXBydW5lX2Jhc2VfZGF0YShjKTsKK30KKworc3RhdGljIHZvaWQgdW5saW5rX2Jhc2VfZGF0YShzdHJ1Y3QgYmFzZV9kYXRhICpjKQoreworCXN0cnVjdCBiYXNlX2RhdGEgKmJhc2UgPSBjLT5iYXNlOworCWlmIChiYXNlKQorCQliYXNlLT5jaGlsZCA9IE5VTEw7CisJZWxzZQorCQlnZXRfdGhyZWFkX2RhdGEoKS0+YmFzZV9jYWNoZSA9IE5VTEw7CisJZnJlZV9iYXNlX2RhdGEoYyk7Cit9CisKK3N0YXRpYyBpbnQgaXNfZGVsdGFfdHlwZShlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJcmV0dXJuICh0eXBlID09IE9CSl9SRUZfREVMVEEgfHwgdHlwZSA9PSBPQkpfT0ZTX0RFTFRBKTsKK30KKworc3RhdGljIHZvaWQgKnVucGFja19lbnRyeV9kYXRhKG9mZl90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgICAgIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0YXRpYyBjaGFyIGZpeGVkX2J1Zls4MTkyXTsKKwlpbnQgc3RhdHVzOworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwl2b2lkICpidWY7CisJZ2l0X2hhc2hfY3R4IGM7CisJY2hhciBoZHJbMzJdOworCWludCBoZHJsZW47CisKKwlpZiAoIWlzX2RlbHRhX3R5cGUodHlwZSkpIHsKKwkJaGRybGVuID0geHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksICIlcyAlIlBSSXVNQVgsCisJCQkJICAgdHlwZV9uYW1lKHR5cGUpLCh1aW50bWF4X3Qpc2l6ZSkgKyAxOworCQl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZjKTsKKwkJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjLCBoZHIsIGhkcmxlbik7CisJfSBlbHNlCisJCW9pZCA9IE5VTEw7CisJaWYgKHR5cGUgPT0gT0JKX0JMT0IgJiYgc2l6ZSA+IGJpZ19maWxlX3RocmVzaG9sZCkKKwkJYnVmID0gZml4ZWRfYnVmOworCWVsc2UKKwkJYnVmID0geG1hbGxvY3ooc2l6ZSk7CisKKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCWdpdF9pbmZsYXRlX2luaXQoJnN0cmVhbSk7CisJc3RyZWFtLm5leHRfb3V0ID0gYnVmOworCXN0cmVhbS5hdmFpbF9vdXQgPSBidWYgPT0gZml4ZWRfYnVmID8gc2l6ZW9mKGZpeGVkX2J1ZikgOiBzaXplOworCisJZG8geworCQl1bnNpZ25lZCBjaGFyICpsYXN0X291dCA9IHN0cmVhbS5uZXh0X291dDsKKwkJc3RyZWFtLm5leHRfaW4gPSBmaWxsKDEpOworCQlzdHJlYW0uYXZhaWxfaW4gPSBpbnB1dF9sZW47CisJCXN0YXR1cyA9IGdpdF9pbmZsYXRlKCZzdHJlYW0sIDApOworCQl1c2UoaW5wdXRfbGVuIC0gc3RyZWFtLmF2YWlsX2luKTsKKwkJaWYgKG9pZCkKKwkJCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmYywgbGFzdF9vdXQsIHN0cmVhbS5uZXh0X291dCAtIGxhc3Rfb3V0KTsKKwkJaWYgKGJ1ZiA9PSBmaXhlZF9idWYpIHsKKwkJCXN0cmVhbS5uZXh0X291dCA9IGJ1ZjsKKwkJCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoZml4ZWRfYnVmKTsKKwkJfQorCX0gd2hpbGUgKHN0YXR1cyA9PSBaX09LKTsKKwlpZiAoc3RyZWFtLnRvdGFsX291dCAhPSBzaXplIHx8IHN0YXR1cyAhPSBaX1NUUkVBTV9FTkQpCisJCWJhZF9vYmplY3Qob2Zmc2V0LCBfKCJpbmZsYXRlIHJldHVybmVkICVkIiksIHN0YXR1cyk7CisJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCWlmIChvaWQpCisJCXRoZV9oYXNoX2FsZ28tPmZpbmFsX2ZuKG9pZC0+aGFzaCwgJmMpOworCXJldHVybiBidWYgPT0gZml4ZWRfYnVmID8gTlVMTCA6IGJ1ZjsKK30KKworc3RhdGljIHZvaWQgKnVucGFja19yYXdfZW50cnkoc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqLAorCQkJICAgICAgb2ZmX3QgKm9mc19vZmZzZXQsCisJCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpyZWZfb2lkLAorCQkJICAgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXVuc2lnbmVkIGNoYXIgKnA7CisJdW5zaWduZWQgbG9uZyBzaXplLCBjOworCW9mZl90IGJhc2Vfb2Zmc2V0OworCXVuc2lnbmVkIHNoaWZ0OworCXZvaWQgKmRhdGE7CisKKwlvYmotPmlkeC5vZmZzZXQgPSBjb25zdW1lZF9ieXRlczsKKwlpbnB1dF9jcmMzMiA9IGNyYzMyKDAsIE5VTEwsIDApOworCisJcCA9IGZpbGwoMSk7CisJYyA9ICpwOworCXVzZSgxKTsKKwlvYmotPnR5cGUgPSAoYyA+PiA0KSAmIDc7CisJc2l6ZSA9IChjICYgMTUpOworCXNoaWZ0ID0gNDsKKwl3aGlsZSAoYyAmIDB4ODApIHsKKwkJcCA9IGZpbGwoMSk7CisJCWMgPSAqcDsKKwkJdXNlKDEpOworCQlzaXplICs9IChjICYgMHg3ZikgPDwgc2hpZnQ7CisJCXNoaWZ0ICs9IDc7CisJfQorCW9iai0+c2l6ZSA9IHNpemU7CisKKwlzd2l0Y2ggKG9iai0+dHlwZSkgeworCWNhc2UgT0JKX1JFRl9ERUxUQToKKwkJaGFzaGNweShyZWZfb2lkLT5oYXNoLCBmaWxsKHRoZV9oYXNoX2FsZ28tPnJhd3N6KSk7CisJCXVzZSh0aGVfaGFzaF9hbGdvLT5yYXdzeik7CisJCWJyZWFrOworCWNhc2UgT0JKX09GU19ERUxUQToKKwkJcCA9IGZpbGwoMSk7CisJCWMgPSAqcDsKKwkJdXNlKDEpOworCQliYXNlX29mZnNldCA9IGMgJiAxMjc7CisJCXdoaWxlIChjICYgMTI4KSB7CisJCQliYXNlX29mZnNldCArPSAxOworCQkJaWYgKCFiYXNlX29mZnNldCB8fCBNU0IoYmFzZV9vZmZzZXQsIDcpKQorCQkJCWJhZF9vYmplY3Qob2JqLT5pZHgub2Zmc2V0LCBfKCJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IikpOworCQkJcCA9IGZpbGwoMSk7CisJCQljID0gKnA7CisJCQl1c2UoMSk7CisJCQliYXNlX29mZnNldCA9IChiYXNlX29mZnNldCA8PCA3KSArIChjICYgMTI3KTsKKwkJfQorCQkqb2ZzX29mZnNldCA9IG9iai0+aWR4Lm9mZnNldCAtIGJhc2Vfb2Zmc2V0OworCQlpZiAoKm9mc19vZmZzZXQgPD0gMCB8fCAqb2ZzX29mZnNldCA+PSBvYmotPmlkeC5vZmZzZXQpCisJCQliYWRfb2JqZWN0KG9iai0+aWR4Lm9mZnNldCwgXygiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIikpOworCQlicmVhazsKKwljYXNlIE9CSl9DT01NSVQ6CisJY2FzZSBPQkpfVFJFRToKKwljYXNlIE9CSl9CTE9COgorCWNhc2UgT0JKX1RBRzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYmFkX29iamVjdChvYmotPmlkeC5vZmZzZXQsIF8oInVua25vd24gb2JqZWN0IHR5cGUgJWQiKSwgb2JqLT50eXBlKTsKKwl9CisJb2JqLT5oZHJfc2l6ZSA9IGNvbnN1bWVkX2J5dGVzIC0gb2JqLT5pZHgub2Zmc2V0OworCisJZGF0YSA9IHVucGFja19lbnRyeV9kYXRhKG9iai0+aWR4Lm9mZnNldCwgb2JqLT5zaXplLCBvYmotPnR5cGUsIG9pZCk7CisJb2JqLT5pZHguY3JjMzIgPSBpbnB1dF9jcmMzMjsKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgKnVucGFja19kYXRhKHN0cnVjdCBvYmplY3RfZW50cnkgKm9iaiwKKwkJCSBpbnQgKCpjb25zdW1lKShjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKiksCisJCQkgdm9pZCAqY2JfZGF0YSkKK3sKKwlvZmZfdCBmcm9tID0gb2JqWzBdLmlkeC5vZmZzZXQgKyBvYmpbMF0uaGRyX3NpemU7CisJb2ZmX3QgbGVuID0gb2JqWzFdLmlkeC5vZmZzZXQgLSBmcm9tOworCXVuc2lnbmVkIGNoYXIgKmRhdGEsICppbmJ1ZjsKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJaW50IHN0YXR1czsKKworCWRhdGEgPSB4bWFsbG9jeihjb25zdW1lID8gNjQqMTAyNCA6IG9iai0+c2l6ZSk7CisJaW5idWYgPSB4bWFsbG9jKChsZW4gPCA2NCoxMDI0KSA/IChpbnQpbGVuIDogNjQqMTAyNCk7CisKKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCWdpdF9pbmZsYXRlX2luaXQoJnN0cmVhbSk7CisJc3RyZWFtLm5leHRfb3V0ID0gZGF0YTsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gY29uc3VtZSA/IDY0KjEwMjQgOiBvYmotPnNpemU7CisKKwlkbyB7CisJCXNzaXplX3QgbiA9IChsZW4gPCA2NCoxMDI0KSA/IChzc2l6ZV90KWxlbiA6IDY0KjEwMjQ7CisJCW4gPSB4cHJlYWQoZ2V0X3RocmVhZF9kYXRhKCktPnBhY2tfZmQsIGluYnVmLCBuLCBmcm9tKTsKKwkJaWYgKG4gPCAwKQorCQkJZGllX2Vycm5vKF8oImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiKSk7CisJCWlmICghbikKKwkJCWRpZShRXygicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICUiUFJJdU1BWCIgYnl0ZSBtaXNzaW5nIiwKKwkJCSAgICAgICAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICUiUFJJdU1BWCIgYnl0ZXMgbWlzc2luZyIsCisJCQkgICAgICAgKHVuc2lnbmVkIGludClsZW4pLAorCQkJICAgICh1aW50bWF4X3QpbGVuKTsKKwkJZnJvbSArPSBuOworCQlsZW4gLT0gbjsKKwkJc3RyZWFtLm5leHRfaW4gPSBpbmJ1ZjsKKwkJc3RyZWFtLmF2YWlsX2luID0gbjsKKwkJaWYgKCFjb25zdW1lKQorCQkJc3RhdHVzID0gZ2l0X2luZmxhdGUoJnN0cmVhbSwgMCk7CisJCWVsc2UgeworCQkJZG8geworCQkJCXN0YXR1cyA9IGdpdF9pbmZsYXRlKCZzdHJlYW0sIDApOworCQkJCWlmIChjb25zdW1lKGRhdGEsIHN0cmVhbS5uZXh0X291dCAtIGRhdGEsIGNiX2RhdGEpKSB7CisJCQkJCWZyZWUoaW5idWYpOworCQkJCQlmcmVlKGRhdGEpOworCQkJCQlyZXR1cm4gTlVMTDsKKwkJCQl9CisJCQkJc3RyZWFtLm5leHRfb3V0ID0gZGF0YTsKKwkJCQlzdHJlYW0uYXZhaWxfb3V0ID0gNjQqMTAyNDsKKwkJCX0gd2hpbGUgKHN0YXR1cyA9PSBaX09LICYmIHN0cmVhbS5hdmFpbF9pbik7CisJCX0KKwl9IHdoaWxlIChsZW4gJiYgc3RhdHVzID09IFpfT0sgJiYgIXN0cmVhbS5hdmFpbF9pbik7CisKKwkvKiBUaGlzIGhhcyBiZWVuIGluZmxhdGVkIE9LIHdoZW4gZmlyc3QgZW5jb3VudGVyZWQsIHNvLi4uICovCisJaWYgKHN0YXR1cyAhPSBaX1NUUkVBTV9FTkQgfHwgc3RyZWFtLnRvdGFsX291dCAhPSBvYmotPnNpemUpCisJCWRpZShfKCJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIpKTsKKworCWdpdF9pbmZsYXRlX2VuZCgmc3RyZWFtKTsKKwlmcmVlKGluYnVmKTsKKwlpZiAoY29uc3VtZSkgeworCQlGUkVFX0FORF9OVUxMKGRhdGEpOworCX0KKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgKmdldF9kYXRhX2Zyb21fcGFjayhzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmopCit7CisJcmV0dXJuIHVucGFja19kYXRhKG9iaiwgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9vZnNfZGVsdGFfYmFzZXMob2ZmX3Qgb2Zmc2V0MSwgb2ZmX3Qgb2Zmc2V0MiwKKwkJCQkgICBlbnVtIG9iamVjdF90eXBlIHR5cGUxLAorCQkJCSAgIGVudW0gb2JqZWN0X3R5cGUgdHlwZTIpCit7CisJaW50IGNtcCA9IHR5cGUxIC0gdHlwZTI7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwlyZXR1cm4gb2Zmc2V0MSA8IG9mZnNldDIgPyAtMSA6CisJICAgICAgIG9mZnNldDEgPiBvZmZzZXQyID8gIDEgOgorCSAgICAgICAwOworfQorCitzdGF0aWMgaW50IGZpbmRfb2ZzX2RlbHRhKGNvbnN0IG9mZl90IG9mZnNldCwgZW51bSBvYmplY3RfdHlwZSB0eXBlKQoreworCWludCBmaXJzdCA9IDAsIGxhc3QgPSBucl9vZnNfZGVsdGFzOworCisJd2hpbGUgKGZpcnN0IDwgbGFzdCkgeworCQlpbnQgbmV4dCA9IGZpcnN0ICsgKGxhc3QgLSBmaXJzdCkgLyAyOworCQlzdHJ1Y3Qgb2ZzX2RlbHRhX2VudHJ5ICpkZWx0YSA9ICZvZnNfZGVsdGFzW25leHRdOworCQlpbnQgY21wOworCisJCWNtcCA9IGNvbXBhcmVfb2ZzX2RlbHRhX2Jhc2VzKG9mZnNldCwgZGVsdGEtPm9mZnNldCwKKwkJCQkJICAgICAgdHlwZSwgb2JqZWN0c1tkZWx0YS0+b2JqX25vXS50eXBlKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbmV4dDsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCWxhc3QgPSBuZXh0OworCQkJY29udGludWU7CisJCX0KKwkJZmlyc3QgPSBuZXh0KzE7CisJfQorCXJldHVybiAtZmlyc3QtMTsKK30KKworc3RhdGljIHZvaWQgZmluZF9vZnNfZGVsdGFfY2hpbGRyZW4ob2ZmX3Qgb2Zmc2V0LAorCQkJCSAgICBpbnQgKmZpcnN0X2luZGV4LCBpbnQgKmxhc3RfaW5kZXgsCisJCQkJICAgIGVudW0gb2JqZWN0X3R5cGUgdHlwZSkKK3sKKwlpbnQgZmlyc3QgPSBmaW5kX29mc19kZWx0YShvZmZzZXQsIHR5cGUpOworCWludCBsYXN0ID0gZmlyc3Q7CisJaW50IGVuZCA9IG5yX29mc19kZWx0YXMgLSAxOworCisJaWYgKGZpcnN0IDwgMCkgeworCQkqZmlyc3RfaW5kZXggPSAwOworCQkqbGFzdF9pbmRleCA9IC0xOworCQlyZXR1cm47CisJfQorCXdoaWxlIChmaXJzdCA+IDAgJiYgb2ZzX2RlbHRhc1tmaXJzdCAtIDFdLm9mZnNldCA9PSBvZmZzZXQpCisJCS0tZmlyc3Q7CisJd2hpbGUgKGxhc3QgPCBlbmQgJiYgb2ZzX2RlbHRhc1tsYXN0ICsgMV0ub2Zmc2V0ID09IG9mZnNldCkKKwkJKytsYXN0OworCSpmaXJzdF9pbmRleCA9IGZpcnN0OworCSpsYXN0X2luZGV4ID0gbGFzdDsKK30KKworc3RhdGljIGludCBjb21wYXJlX3JlZl9kZWx0YV9iYXNlcyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQxLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDIsCisJCQkJICAgZW51bSBvYmplY3RfdHlwZSB0eXBlMSwKKwkJCQkgICBlbnVtIG9iamVjdF90eXBlIHR5cGUyKQoreworCWludCBjbXAgPSB0eXBlMSAtIHR5cGUyOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisJcmV0dXJuIG9pZGNtcChvaWQxLCBvaWQyKTsKK30KKworc3RhdGljIGludCBmaW5kX3JlZl9kZWx0YShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSkKK3sKKwlpbnQgZmlyc3QgPSAwLCBsYXN0ID0gbnJfcmVmX2RlbHRhczsKKworCXdoaWxlIChmaXJzdCA8IGxhc3QpIHsKKwkJaW50IG5leHQgPSBmaXJzdCArIChsYXN0IC0gZmlyc3QpIC8gMjsKKwkJc3RydWN0IHJlZl9kZWx0YV9lbnRyeSAqZGVsdGEgPSAmcmVmX2RlbHRhc1tuZXh0XTsKKwkJaW50IGNtcDsKKworCQljbXAgPSBjb21wYXJlX3JlZl9kZWx0YV9iYXNlcyhvaWQsICZkZWx0YS0+b2lkLAorCQkJCQkgICAgICB0eXBlLCBvYmplY3RzW2RlbHRhLT5vYmpfbm9dLnR5cGUpOworCQlpZiAoIWNtcCkKKwkJCXJldHVybiBuZXh0OworCQlpZiAoY21wIDwgMCkgeworCQkJbGFzdCA9IG5leHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlmaXJzdCA9IG5leHQrMTsKKwl9CisJcmV0dXJuIC1maXJzdC0xOworfQorCitzdGF0aWMgdm9pZCBmaW5kX3JlZl9kZWx0YV9jaGlsZHJlbihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICAgIGludCAqZmlyc3RfaW5kZXgsIGludCAqbGFzdF9pbmRleCwKKwkJCQkgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlKQoreworCWludCBmaXJzdCA9IGZpbmRfcmVmX2RlbHRhKG9pZCwgdHlwZSk7CisJaW50IGxhc3QgPSBmaXJzdDsKKwlpbnQgZW5kID0gbnJfcmVmX2RlbHRhcyAtIDE7CisKKwlpZiAoZmlyc3QgPCAwKSB7CisJCSpmaXJzdF9pbmRleCA9IDA7CisJCSpsYXN0X2luZGV4ID0gLTE7CisJCXJldHVybjsKKwl9CisJd2hpbGUgKGZpcnN0ID4gMCAmJiBvaWRlcSgmcmVmX2RlbHRhc1tmaXJzdCAtIDFdLm9pZCwgb2lkKSkKKwkJLS1maXJzdDsKKwl3aGlsZSAobGFzdCA8IGVuZCAmJiBvaWRlcSgmcmVmX2RlbHRhc1tsYXN0ICsgMV0ub2lkLCBvaWQpKQorCQkrK2xhc3Q7CisJKmZpcnN0X2luZGV4ID0gZmlyc3Q7CisJKmxhc3RfaW5kZXggPSBsYXN0OworfQorCitzdHJ1Y3QgY29tcGFyZV9kYXRhIHsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0OworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGJ1Zl9zaXplOworfTsKKworc3RhdGljIGludCBjb21wYXJlX29iamVjdHMoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBjb21wYXJlX2RhdGEgKmRhdGEgPSBjYl9kYXRhOworCisJaWYgKGRhdGEtPmJ1Zl9zaXplIDwgc2l6ZSkgeworCQlmcmVlKGRhdGEtPmJ1Zik7CisJCWRhdGEtPmJ1ZiA9IHhtYWxsb2Moc2l6ZSk7CisJCWRhdGEtPmJ1Zl9zaXplID0gc2l6ZTsKKwl9CisKKwl3aGlsZSAoc2l6ZSkgeworCQlzc2l6ZV90IGxlbiA9IHJlYWRfaXN0cmVhbShkYXRhLT5zdCwgZGF0YS0+YnVmLCBzaXplKTsKKwkJaWYgKGxlbiA9PSAwKQorCQkJZGllKF8oIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIpLAorCQkJICAgIG9pZF90b19oZXgoJmRhdGEtPmVudHJ5LT5pZHgub2lkKSk7CisJCWlmIChsZW4gPCAwKQorCQkJZGllKF8oInVuYWJsZSB0byByZWFkICVzIiksCisJCQkgICAgb2lkX3RvX2hleCgmZGF0YS0+ZW50cnktPmlkeC5vaWQpKTsKKwkJaWYgKG1lbWNtcChidWYsIGRhdGEtPmJ1ZiwgbGVuKSkKKwkJCWRpZShfKCJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiKSwKKwkJCSAgICBvaWRfdG9faGV4KCZkYXRhLT5lbnRyeS0+aWR4Lm9pZCkpOworCQlzaXplIC09IGxlbjsKKwkJYnVmICs9IGxlbjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfY29sbGlzb24oc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IGNvbXBhcmVfZGF0YSBkYXRhOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlpZiAoZW50cnktPnNpemUgPD0gYmlnX2ZpbGVfdGhyZXNob2xkIHx8IGVudHJ5LT50eXBlICE9IE9CSl9CTE9CKQorCQlyZXR1cm4gLTE7CisKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisJZGF0YS5lbnRyeSA9IGVudHJ5OworCWRhdGEuc3QgPSBvcGVuX2lzdHJlYW0odGhlX3JlcG9zaXRvcnksICZlbnRyeS0+aWR4Lm9pZCwgJnR5cGUsICZzaXplLAorCQkJICAgICAgIE5VTEwpOworCWlmICghZGF0YS5zdCkKKwkJcmV0dXJuIC0xOworCWlmIChzaXplICE9IGVudHJ5LT5zaXplIHx8IHR5cGUgIT0gZW50cnktPnR5cGUpCisJCWRpZShfKCJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiKSwKKwkJICAgIG9pZF90b19oZXgoJmVudHJ5LT5pZHgub2lkKSk7CisJdW5wYWNrX2RhdGEoZW50cnksIGNvbXBhcmVfb2JqZWN0cywgJmRhdGEpOworCWNsb3NlX2lzdHJlYW0oZGF0YS5zdCk7CisJZnJlZShkYXRhLmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTFfb2JqZWN0KGNvbnN0IHZvaWQgKmRhdGEsIHN0cnVjdCBvYmplY3RfZW50cnkgKm9ial9lbnRyeSwKKwkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXZvaWQgKm5ld19kYXRhID0gTlVMTDsKKwlpbnQgY29sbGlzaW9uX3Rlc3RfbmVlZGVkID0gMDsKKworCWFzc2VydChkYXRhIHx8IG9ial9lbnRyeSk7CisKKwlpZiAoc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpIHsKKwkJcmVhZF9sb2NrKCk7CisJCWNvbGxpc2lvbl90ZXN0X25lZWRlZCA9CisJCQloYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncyhvaWQsIE9CSkVDVF9JTkZPX1FVSUNLKTsKKwkJcmVhZF91bmxvY2soKTsKKwl9CisKKwlpZiAoY29sbGlzaW9uX3Rlc3RfbmVlZGVkICYmICFkYXRhKSB7CisJCXJlYWRfbG9jaygpOworCQlpZiAoIWNoZWNrX2NvbGxpc29uKG9ial9lbnRyeSkpCisJCQljb2xsaXNpb25fdGVzdF9uZWVkZWQgPSAwOworCQlyZWFkX3VubG9jaygpOworCX0KKwlpZiAoY29sbGlzaW9uX3Rlc3RfbmVlZGVkKSB7CisJCXZvaWQgKmhhc19kYXRhOworCQllbnVtIG9iamVjdF90eXBlIGhhc190eXBlOworCQl1bnNpZ25lZCBsb25nIGhhc19zaXplOworCQlyZWFkX2xvY2soKTsKKwkJaGFzX3R5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksIG9pZCwgJmhhc19zaXplKTsKKwkJaWYgKGhhc190eXBlIDwgMCkKKwkJCWRpZShfKCJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgaW5mbyAlcyIpLCBvaWRfdG9faGV4KG9pZCkpOworCQlpZiAoaGFzX3R5cGUgIT0gdHlwZSB8fCBoYXNfc2l6ZSAhPSBzaXplKQorCQkJZGllKF8oIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIpLCBvaWRfdG9faGV4KG9pZCkpOworCQloYXNfZGF0YSA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmaGFzX3R5cGUsICZoYXNfc2l6ZSk7CisJCXJlYWRfdW5sb2NrKCk7CisJCWlmICghZGF0YSkKKwkJCWRhdGEgPSBuZXdfZGF0YSA9IGdldF9kYXRhX2Zyb21fcGFjayhvYmpfZW50cnkpOworCQlpZiAoIWhhc19kYXRhKQorCQkJZGllKF8oImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIpLCBvaWRfdG9faGV4KG9pZCkpOworCQlpZiAoc2l6ZSAhPSBoYXNfc2l6ZSB8fCB0eXBlICE9IGhhc190eXBlIHx8CisJCSAgICBtZW1jbXAoZGF0YSwgaGFzX2RhdGEsIHNpemUpICE9IDApCisJCQlkaWUoXygiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIiksIG9pZF90b19oZXgob2lkKSk7CisJCWZyZWUoaGFzX2RhdGEpOworCX0KKworCWlmIChzdHJpY3QgfHwgZG9fZnNja19vYmplY3QpIHsKKwkJcmVhZF9sb2NrKCk7CisJCWlmICh0eXBlID09IE9CSl9CTE9CKSB7CisJCQlzdHJ1Y3QgYmxvYiAqYmxvYiA9IGxvb2t1cF9ibG9iKHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCQkJaWYgKGJsb2IpCisJCQkJYmxvYi0+b2JqZWN0LmZsYWdzIHw9IEZMQUdfQ0hFQ0tFRDsKKwkJCWVsc2UKKwkJCQlkaWUoXygiaW52YWxpZCBibG9iIG9iamVjdCAlcyIpLCBvaWRfdG9faGV4KG9pZCkpOworCQkJaWYgKGRvX2ZzY2tfb2JqZWN0ICYmCisJCQkgICAgZnNja19vYmplY3QoJmJsb2ItPm9iamVjdCwgKHZvaWQgKilkYXRhLCBzaXplLCAmZnNja19vcHRpb25zKSkKKwkJCQlkaWUoXygiZnNjayBlcnJvciBpbiBwYWNrZWQgb2JqZWN0IikpOworCQl9IGVsc2UgeworCQkJc3RydWN0IG9iamVjdCAqb2JqOworCQkJaW50IGVhdGVuOworCQkJdm9pZCAqYnVmID0gKHZvaWQgKikgZGF0YTsKKworCQkJYXNzZXJ0KGRhdGEgJiYgImRhdGEgY2FuIG9ubHkgYmUgTlVMTCBmb3IgbGFyZ2UgX2Jsb2JzXyIpOworCisJCQkvKgorCQkJICogd2UgZG8gbm90IG5lZWQgdG8gZnJlZSB0aGUgbWVtb3J5IGhlcmUsIGFzIHRoZQorCQkJICogYnVmIGlzIGRlbGV0ZWQgYnkgdGhlIGNhbGxlci4KKwkJCSAqLworCQkJb2JqID0gcGFyc2Vfb2JqZWN0X2J1ZmZlcih0aGVfcmVwb3NpdG9yeSwgb2lkLCB0eXBlLAorCQkJCQkJICBzaXplLCBidWYsCisJCQkJCQkgICZlYXRlbik7CisJCQlpZiAoIW9iaikKKwkJCQlkaWUoXygiaW52YWxpZCAlcyIpLCB0eXBlX25hbWUodHlwZSkpOworCQkJaWYgKGRvX2ZzY2tfb2JqZWN0ICYmCisJCQkgICAgZnNja19vYmplY3Qob2JqLCBidWYsIHNpemUsICZmc2NrX29wdGlvbnMpKQorCQkJCWRpZShfKCJmc2NrIGVycm9yIGluIHBhY2tlZCBvYmplY3QiKSk7CisJCQlpZiAoc3RyaWN0ICYmIGZzY2tfd2FsayhvYmosIE5VTEwsICZmc2NrX29wdGlvbnMpKQorCQkJCWRpZShfKCJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIpLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCisJCQlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKSB7CisJCQkJc3RydWN0IHRyZWUgKml0ZW0gPSAoc3RydWN0IHRyZWUgKikgb2JqOworCQkJCWl0ZW0tPmJ1ZmZlciA9IE5VTEw7CisJCQkJb2JqLT5wYXJzZWQgPSAwOworCQkJfQorCQkJaWYgKG9iai0+dHlwZSA9PSBPQkpfQ09NTUlUKSB7CisJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKikgb2JqOworCQkJCWlmIChkZXRhY2hfY29tbWl0X2J1ZmZlcihjb21taXQsIE5VTEwpICE9IGRhdGEpCisJCQkJCUJVRygicGFyc2Vfb2JqZWN0X2J1ZmZlciB0cmFuc21vZ3JpZmllZCBvdXIgYnVmZmVyIik7CisJCQl9CisJCQlvYmotPmZsYWdzIHw9IEZMQUdfQ0hFQ0tFRDsKKwkJfQorCQlyZWFkX3VubG9jaygpOworCX0KKworCWZyZWUobmV3X2RhdGEpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIGZpbmRfdW5yZXNvbHZlZF9kZWx0YXMoKS4gVGhlcmUgYXJlIHR3bworICogd2Fsa2VycyBnb2luZyBpbiB0aGUgb3Bwb3NpdGUgd2F5cy4KKyAqCisgKiBUaGUgZmlyc3Qgb25lIGluIGZpbmRfdW5yZXNvbHZlZF9kZWx0YXMoKSB0cmF2ZXJzZXMgZG93biBmcm9tCisgKiBwYXJlbnQgbm9kZSB0byBjaGlsZHJlbiwgZGVmbGF0aW5nIG5vZGVzIGFsb25nIHRoZSB3YXkuIEhvd2V2ZXIsCisgKiBtZW1vcnkgZm9yIGRlZmxhdGVkIG5vZGVzIGlzIGxpbWl0ZWQgYnkgZGVsdGFfYmFzZV9jYWNoZV9saW1pdCwgc28KKyAqIGF0IHNvbWUgcG9pbnQgcGFyZW50IG5vZGUncyBkZWZsYXRlZCBjb250ZW50IG1heSBiZSBmcmVlZC4KKyAqCisgKiBUaGUgc2Vjb25kIHdhbGtlciBpcyB0aGlzIGZ1bmN0aW9uLCB3aGljaCBnb2VzIGZyb20gY3VycmVudCBub2RlIHVwCisgKiB0byB0b3AgcGFyZW50IGlmIG5lY2Vzc2FyeSB0byBkZWZsYXRlIHRoZSBub2RlLiBJbiBub3JtYWwKKyAqIHNpdHVhdGlvbiwgaXRzIHBhcmVudCBub2RlIHdvdWxkIGJlIGFscmVhZHkgZGVmbGF0ZWQsIHNvIGl0IGp1c3QKKyAqIG5lZWRzIHRvIGFwcGx5IGRlbHRhLgorICoKKyAqIEluIHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvLCBwYXJlbnQgbm9kZSBpcyBubyBsb25nZXIgZGVmbGF0ZWQgYmVjYXVzZQorICogd2UncmUgcnVubmluZyBvdXQgb2YgZGVsdGFfYmFzZV9jYWNoZV9saW1pdDsgd2UgbmVlZCB0byByZS1kZWZsYXRlCisgKiBwYXJlbnRzLCBwb3NzaWJseSB1cCB0byB0aGUgdG9wIGJhc2UuCisgKgorICogQWxsIGRlZmxhdGVkIG9iamVjdHMgaGVyZSBhcmUgc3ViamVjdCB0byBiZSBmcmVlZCBpZiB3ZSBleGNlZWQKKyAqIGRlbHRhX2Jhc2VfY2FjaGVfbGltaXQsIGp1c3QgbGlrZSBpbiBmaW5kX3VucmVzb2x2ZWRfZGVsdGFzKCksIHdlCisgKiBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBsYXN0IG5vZGUgaXMgbm90IGZyZWVkLgorICovCitzdGF0aWMgdm9pZCAqZ2V0X2Jhc2VfZGF0YShzdHJ1Y3QgYmFzZV9kYXRhICpjKQoreworCWlmICghYy0+ZGF0YSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmogPSBjLT5vYmo7CisJCXN0cnVjdCBiYXNlX2RhdGEgKipkZWx0YSA9IE5VTEw7CisJCWludCBkZWx0YV9uciA9IDAsIGRlbHRhX2FsbG9jID0gMDsKKworCQl3aGlsZSAoaXNfZGVsdGFfdHlwZShjLT5vYmotPnR5cGUpICYmICFjLT5kYXRhKSB7CisJCQlBTExPQ19HUk9XKGRlbHRhLCBkZWx0YV9uciArIDEsIGRlbHRhX2FsbG9jKTsKKwkJCWRlbHRhW2RlbHRhX25yKytdID0gYzsKKwkJCWMgPSBjLT5iYXNlOworCQl9CisJCWlmICghZGVsdGFfbnIpIHsKKwkJCWMtPmRhdGEgPSBnZXRfZGF0YV9mcm9tX3BhY2sob2JqKTsKKwkJCWMtPnNpemUgPSBvYmotPnNpemU7CisJCQlnZXRfdGhyZWFkX2RhdGEoKS0+YmFzZV9jYWNoZV91c2VkICs9IGMtPnNpemU7CisJCQlwcnVuZV9iYXNlX2RhdGEoYyk7CisJCX0KKwkJZm9yICg7IGRlbHRhX25yID4gMDsgZGVsdGFfbnItLSkgeworCQkJdm9pZCAqYmFzZSwgKnJhdzsKKwkJCWMgPSBkZWx0YVtkZWx0YV9uciAtIDFdOworCQkJb2JqID0gYy0+b2JqOworCQkJYmFzZSA9IGdldF9iYXNlX2RhdGEoYy0+YmFzZSk7CisJCQlyYXcgPSBnZXRfZGF0YV9mcm9tX3BhY2sob2JqKTsKKwkJCWMtPmRhdGEgPSBwYXRjaF9kZWx0YSgKKwkJCQliYXNlLCBjLT5iYXNlLT5zaXplLAorCQkJCXJhdywgb2JqLT5zaXplLAorCQkJCSZjLT5zaXplKTsKKwkJCWZyZWUocmF3KTsKKwkJCWlmICghYy0+ZGF0YSkKKwkJCQliYWRfb2JqZWN0KG9iai0+aWR4Lm9mZnNldCwgXygiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIikpOworCQkJZ2V0X3RocmVhZF9kYXRhKCktPmJhc2VfY2FjaGVfdXNlZCArPSBjLT5zaXplOworCQkJcHJ1bmVfYmFzZV9kYXRhKGMpOworCQl9CisJCWZyZWUoZGVsdGEpOworCX0KKwlyZXR1cm4gYy0+ZGF0YTsKK30KKworc3RhdGljIHZvaWQgcmVzb2x2ZV9kZWx0YShzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpkZWx0YV9vYmosCisJCQkgIHN0cnVjdCBiYXNlX2RhdGEgKmJhc2UsIHN0cnVjdCBiYXNlX2RhdGEgKnJlc3VsdCkKK3sKKwl2b2lkICpiYXNlX2RhdGEsICpkZWx0YV9kYXRhOworCisJaWYgKHNob3dfc3RhdCkgeworCQlpbnQgaSA9IGRlbHRhX29iaiAtIG9iamVjdHM7CisJCWludCBqID0gYmFzZS0+b2JqIC0gb2JqZWN0czsKKwkJb2JqX3N0YXRbaV0uZGVsdGFfZGVwdGggPSBvYmpfc3RhdFtqXS5kZWx0YV9kZXB0aCArIDE7CisJCWRlZXBlc3RfZGVsdGFfbG9jaygpOworCQlpZiAoZGVlcGVzdF9kZWx0YSA8IG9ial9zdGF0W2ldLmRlbHRhX2RlcHRoKQorCQkJZGVlcGVzdF9kZWx0YSA9IG9ial9zdGF0W2ldLmRlbHRhX2RlcHRoOworCQlkZWVwZXN0X2RlbHRhX3VubG9jaygpOworCQlvYmpfc3RhdFtpXS5iYXNlX29iamVjdF9ubyA9IGo7CisJfQorCWRlbHRhX2RhdGEgPSBnZXRfZGF0YV9mcm9tX3BhY2soZGVsdGFfb2JqKTsKKwliYXNlX2RhdGEgPSBnZXRfYmFzZV9kYXRhKGJhc2UpOworCXJlc3VsdC0+b2JqID0gZGVsdGFfb2JqOworCXJlc3VsdC0+ZGF0YSA9IHBhdGNoX2RlbHRhKGJhc2VfZGF0YSwgYmFzZS0+c2l6ZSwKKwkJCQkgICBkZWx0YV9kYXRhLCBkZWx0YV9vYmotPnNpemUsICZyZXN1bHQtPnNpemUpOworCWZyZWUoZGVsdGFfZGF0YSk7CisJaWYgKCFyZXN1bHQtPmRhdGEpCisJCWJhZF9vYmplY3QoZGVsdGFfb2JqLT5pZHgub2Zmc2V0LCBfKCJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiKSk7CisJaGFzaF9vYmplY3RfZmlsZSh0aGVfaGFzaF9hbGdvLCByZXN1bHQtPmRhdGEsIHJlc3VsdC0+c2l6ZSwKKwkJCSB0eXBlX25hbWUoZGVsdGFfb2JqLT5yZWFsX3R5cGUpLCAmZGVsdGFfb2JqLT5pZHgub2lkKTsKKwlzaGExX29iamVjdChyZXN1bHQtPmRhdGEsIE5VTEwsIHJlc3VsdC0+c2l6ZSwgZGVsdGFfb2JqLT5yZWFsX3R5cGUsCisJCSAgICAmZGVsdGFfb2JqLT5pZHgub2lkKTsKKwljb3VudGVyX2xvY2soKTsKKwlucl9yZXNvbHZlZF9kZWx0YXMrKzsKKwljb3VudGVyX3VubG9jaygpOworfQorCisvKgorICogU3RhbmRhcmQgYm9vbGVhbiBjb21wYXJlLWFuZC1zd2FwOiBhdG9taWNhbGx5IGNoZWNrIHdoZXRoZXIgIip0eXBlIiBpcworICogIndhbnQiOyBpZiBzbywgc3dhcCBpbiAic2V0IiBhbmQgcmV0dXJuIHRydWUuIE90aGVyd2lzZSwgbGVhdmUgaXQgdW50b3VjaGVkCisgKiBhbmQgcmV0dXJuIGZhbHNlLgorICovCitzdGF0aWMgaW50IGNvbXBhcmVfYW5kX3N3YXBfdHlwZShzaWduZWQgY2hhciAqdHlwZSwKKwkJCQkgZW51bSBvYmplY3RfdHlwZSB3YW50LAorCQkJCSBlbnVtIG9iamVjdF90eXBlIHNldCkKK3sKKwllbnVtIG9iamVjdF90eXBlIG9sZDsKKworCXR5cGVfY2FzX2xvY2soKTsKKwlvbGQgPSAqdHlwZTsKKwlpZiAob2xkID09IHdhbnQpCisJCSp0eXBlID0gc2V0OworCXR5cGVfY2FzX3VubG9jaygpOworCisJcmV0dXJuIG9sZCA9PSB3YW50OworfQorCitzdGF0aWMgc3RydWN0IGJhc2VfZGF0YSAqZmluZF91bnJlc29sdmVkX2RlbHRhc18xKHN0cnVjdCBiYXNlX2RhdGEgKmJhc2UsCisJCQkJCQkgIHN0cnVjdCBiYXNlX2RhdGEgKnByZXZfYmFzZSkKK3sKKwlpZiAoYmFzZS0+cmVmX2xhc3QgPT0gLTEgJiYgYmFzZS0+b2ZzX2xhc3QgPT0gLTEpIHsKKwkJZmluZF9yZWZfZGVsdGFfY2hpbGRyZW4oJmJhc2UtPm9iai0+aWR4Lm9pZCwKKwkJCQkJJmJhc2UtPnJlZl9maXJzdCwgJmJhc2UtPnJlZl9sYXN0LAorCQkJCQlPQkpfUkVGX0RFTFRBKTsKKworCQlmaW5kX29mc19kZWx0YV9jaGlsZHJlbihiYXNlLT5vYmotPmlkeC5vZmZzZXQsCisJCQkJCSZiYXNlLT5vZnNfZmlyc3QsICZiYXNlLT5vZnNfbGFzdCwKKwkJCQkJT0JKX09GU19ERUxUQSk7CisKKwkJaWYgKGJhc2UtPnJlZl9sYXN0ID09IC0xICYmIGJhc2UtPm9mc19sYXN0ID09IC0xKSB7CisJCQlmcmVlKGJhc2UtPmRhdGEpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlsaW5rX2Jhc2VfZGF0YShwcmV2X2Jhc2UsIGJhc2UpOworCX0KKworCWlmIChiYXNlLT5yZWZfZmlyc3QgPD0gYmFzZS0+cmVmX2xhc3QpIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqY2hpbGQgPSBvYmplY3RzICsgcmVmX2RlbHRhc1tiYXNlLT5yZWZfZmlyc3RdLm9ial9ubzsKKwkJc3RydWN0IGJhc2VfZGF0YSAqcmVzdWx0ID0gYWxsb2NfYmFzZV9kYXRhKCk7CisKKwkJaWYgKCFjb21wYXJlX2FuZF9zd2FwX3R5cGUoJmNoaWxkLT5yZWFsX3R5cGUsIE9CSl9SRUZfREVMVEEsCisJCQkJCSAgIGJhc2UtPm9iai0+cmVhbF90eXBlKSkKKwkJCWRpZSgiUkVGX0RFTFRBIGF0IG9mZnNldCAlIlBSSXVNQVgiIGFscmVhZHkgcmVzb2x2ZWQgKGR1cGxpY2F0ZSBiYXNlICVzPykiLAorCQkJICAgICh1aW50bWF4X3QpY2hpbGQtPmlkeC5vZmZzZXQsCisJCQkgICAgb2lkX3RvX2hleCgmYmFzZS0+b2JqLT5pZHgub2lkKSk7CisKKwkJcmVzb2x2ZV9kZWx0YShjaGlsZCwgYmFzZSwgcmVzdWx0KTsKKwkJaWYgKGJhc2UtPnJlZl9maXJzdCA9PSBiYXNlLT5yZWZfbGFzdCAmJiBiYXNlLT5vZnNfbGFzdCA9PSAtMSkKKwkJCWZyZWVfYmFzZV9kYXRhKGJhc2UpOworCisJCWJhc2UtPnJlZl9maXJzdCsrOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWlmIChiYXNlLT5vZnNfZmlyc3QgPD0gYmFzZS0+b2ZzX2xhc3QpIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqY2hpbGQgPSBvYmplY3RzICsgb2ZzX2RlbHRhc1tiYXNlLT5vZnNfZmlyc3RdLm9ial9ubzsKKwkJc3RydWN0IGJhc2VfZGF0YSAqcmVzdWx0ID0gYWxsb2NfYmFzZV9kYXRhKCk7CisKKwkJYXNzZXJ0KGNoaWxkLT5yZWFsX3R5cGUgPT0gT0JKX09GU19ERUxUQSk7CisJCWNoaWxkLT5yZWFsX3R5cGUgPSBiYXNlLT5vYmotPnJlYWxfdHlwZTsKKwkJcmVzb2x2ZV9kZWx0YShjaGlsZCwgYmFzZSwgcmVzdWx0KTsKKwkJaWYgKGJhc2UtPm9mc19maXJzdCA9PSBiYXNlLT5vZnNfbGFzdCkKKwkJCWZyZWVfYmFzZV9kYXRhKGJhc2UpOworCisJCWJhc2UtPm9mc19maXJzdCsrOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXVubGlua19iYXNlX2RhdGEoYmFzZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfdW5yZXNvbHZlZF9kZWx0YXMoc3RydWN0IGJhc2VfZGF0YSAqYmFzZSkKK3sKKwlzdHJ1Y3QgYmFzZV9kYXRhICpuZXdfYmFzZSwgKnByZXZfYmFzZSA9IE5VTEw7CisJZm9yICg7OykgeworCQluZXdfYmFzZSA9IGZpbmRfdW5yZXNvbHZlZF9kZWx0YXNfMShiYXNlLCBwcmV2X2Jhc2UpOworCisJCWlmIChuZXdfYmFzZSkgeworCQkJcHJldl9iYXNlID0gYmFzZTsKKwkJCWJhc2UgPSBuZXdfYmFzZTsKKwkJfSBlbHNlIHsKKwkJCWZyZWUoYmFzZSk7CisJCQliYXNlID0gcHJldl9iYXNlOworCQkJaWYgKCFiYXNlKQorCQkJCXJldHVybjsKKwkJCXByZXZfYmFzZSA9IGJhc2UtPmJhc2U7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9vZnNfZGVsdGFfZW50cnkoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3Qgb2ZzX2RlbHRhX2VudHJ5ICpkZWx0YV9hID0gYTsKKwljb25zdCBzdHJ1Y3Qgb2ZzX2RlbHRhX2VudHJ5ICpkZWx0YV9iID0gYjsKKworCXJldHVybiBkZWx0YV9hLT5vZmZzZXQgPCBkZWx0YV9iLT5vZmZzZXQgPyAtMSA6CisJICAgICAgIGRlbHRhX2EtPm9mZnNldCA+IGRlbHRhX2ItPm9mZnNldCA/ICAxIDoKKwkgICAgICAgMDsKK30KKworc3RhdGljIGludCBjb21wYXJlX3JlZl9kZWx0YV9lbnRyeShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCByZWZfZGVsdGFfZW50cnkgKmRlbHRhX2EgPSBhOworCWNvbnN0IHN0cnVjdCByZWZfZGVsdGFfZW50cnkgKmRlbHRhX2IgPSBiOworCisJcmV0dXJuIG9pZGNtcCgmZGVsdGFfYS0+b2lkLCAmZGVsdGFfYi0+b2lkKTsKK30KKworc3RhdGljIHZvaWQgcmVzb2x2ZV9iYXNlKHN0cnVjdCBvYmplY3RfZW50cnkgKm9iaikKK3sKKwlzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlX29iaiA9IGFsbG9jX2Jhc2VfZGF0YSgpOworCWJhc2Vfb2JqLT5vYmogPSBvYmo7CisJYmFzZV9vYmotPmRhdGEgPSBOVUxMOworCWZpbmRfdW5yZXNvbHZlZF9kZWx0YXMoYmFzZV9vYmopOworfQorCitzdGF0aWMgdm9pZCAqdGhyZWFkZWRfc2Vjb25kX3Bhc3Modm9pZCAqZGF0YSkKK3sKKwlzZXRfdGhyZWFkX2RhdGEoZGF0YSk7CisJZm9yICg7OykgeworCQlpbnQgaTsKKwkJY291bnRlcl9sb2NrKCk7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIG5yX3Jlc29sdmVkX2RlbHRhcyk7CisJCWNvdW50ZXJfdW5sb2NrKCk7CisJCXdvcmtfbG9jaygpOworCQl3aGlsZSAobnJfZGlzcGF0Y2hlZCA8IG5yX29iamVjdHMgJiYKKwkJICAgICAgIGlzX2RlbHRhX3R5cGUob2JqZWN0c1tucl9kaXNwYXRjaGVkXS50eXBlKSkKKwkJCW5yX2Rpc3BhdGNoZWQrKzsKKwkJaWYgKG5yX2Rpc3BhdGNoZWQgPj0gbnJfb2JqZWN0cykgeworCQkJd29ya191bmxvY2soKTsKKwkJCWJyZWFrOworCQl9CisJCWkgPSBucl9kaXNwYXRjaGVkKys7CisJCXdvcmtfdW5sb2NrKCk7CisKKwkJcmVzb2x2ZV9iYXNlKCZvYmplY3RzW2ldKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBGaXJzdCBwYXNzOgorICogLSBmaW5kIGxvY2F0aW9ucyBvZiBhbGwgb2JqZWN0czsKKyAqIC0gY2FsY3VsYXRlIFNIQTEgb2YgYWxsIG5vbi1kZWx0YSBvYmplY3RzOworICogLSByZW1lbWJlciBiYXNlIChTSEExIG9yIG9mZnNldCkgZm9yIGFsbCBkZWx0YXMuCisgKi8KK3N0YXRpYyB2b2lkIHBhcnNlX3BhY2tfb2JqZWN0cyh1bnNpZ25lZCBjaGFyICpoYXNoKQoreworCWludCBpLCBucl9kZWxheXMgPSAwOworCXN0cnVjdCBvZnNfZGVsdGFfZW50cnkgKm9mc19kZWx0YSA9IG9mc19kZWx0YXM7CisJc3RydWN0IG9iamVjdF9pZCByZWZfZGVsdGFfb2lkOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKHZlcmJvc2UpCisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3MoCisJCQkJZnJvbV9zdGRpbiA/IF8oIlJlY2VpdmluZyBvYmplY3RzIikgOiBfKCJJbmRleGluZyBvYmplY3RzIiksCisJCQkJbnJfb2JqZWN0cyk7CisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmogPSAmb2JqZWN0c1tpXTsKKwkJdm9pZCAqZGF0YSA9IHVucGFja19yYXdfZW50cnkob2JqLCAmb2ZzX2RlbHRhLT5vZmZzZXQsCisJCQkJCSAgICAgICZyZWZfZGVsdGFfb2lkLAorCQkJCQkgICAgICAmb2JqLT5pZHgub2lkKTsKKwkJb2JqLT5yZWFsX3R5cGUgPSBvYmotPnR5cGU7CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX09GU19ERUxUQSkgeworCQkJbnJfb2ZzX2RlbHRhcysrOworCQkJb2ZzX2RlbHRhLT5vYmpfbm8gPSBpOworCQkJb2ZzX2RlbHRhKys7CisJCX0gZWxzZSBpZiAob2JqLT50eXBlID09IE9CSl9SRUZfREVMVEEpIHsKKwkJCUFMTE9DX0dST1cocmVmX2RlbHRhcywgbnJfcmVmX2RlbHRhcyArIDEsIHJlZl9kZWx0YXNfYWxsb2MpOworCQkJb2lkY3B5KCZyZWZfZGVsdGFzW25yX3JlZl9kZWx0YXNdLm9pZCwgJnJlZl9kZWx0YV9vaWQpOworCQkJcmVmX2RlbHRhc1tucl9yZWZfZGVsdGFzXS5vYmpfbm8gPSBpOworCQkJbnJfcmVmX2RlbHRhcysrOworCQl9IGVsc2UgaWYgKCFkYXRhKSB7CisJCQkvKiBsYXJnZSBibG9icywgY2hlY2sgbGF0ZXIgKi8KKwkJCW9iai0+cmVhbF90eXBlID0gT0JKX0JBRDsKKwkJCW5yX2RlbGF5cysrOworCQl9IGVsc2UKKwkJCXNoYTFfb2JqZWN0KGRhdGEsIE5VTEwsIG9iai0+c2l6ZSwgb2JqLT50eXBlLAorCQkJCSAgICAmb2JqLT5pZHgub2lkKTsKKwkJZnJlZShkYXRhKTsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgaSsxKTsKKwl9CisJb2JqZWN0c1tpXS5pZHgub2Zmc2V0ID0gY29uc3VtZWRfYnl0ZXM7CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCisJLyogQ2hlY2sgcGFjayBpbnRlZ3JpdHkgKi8KKwlmbHVzaCgpOworCXRoZV9oYXNoX2FsZ28tPmZpbmFsX2ZuKGhhc2gsICZpbnB1dF9jdHgpOworCWlmICghaGFzaGVxKGZpbGwodGhlX2hhc2hfYWxnby0+cmF3c3opLCBoYXNoKSkKKwkJZGllKF8oInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIpKTsKKwl1c2UodGhlX2hhc2hfYWxnby0+cmF3c3opOworCisJLyogSWYgaW5wdXRfZmQgaXMgYSBmaWxlLCB3ZSBzaG91bGQgaGF2ZSByZWFjaGVkIGl0cyBlbmQgbm93LiAqLworCWlmIChmc3RhdChpbnB1dF9mZCwgJnN0KSkKKwkJZGllX2Vycm5vKF8oImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIpKTsKKwlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSAmJgorCQkJbHNlZWsoaW5wdXRfZmQsIDAsIFNFRUtfQ1VSKSAtIGlucHV0X2xlbiAhPSBzdC5zdF9zaXplKQorCQlkaWUoXygicGFjayBoYXMganVuayBhdCB0aGUgZW5kIikpOworCisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmogPSAmb2JqZWN0c1tpXTsKKwkJaWYgKG9iai0+cmVhbF90eXBlICE9IE9CSl9CQUQpCisJCQljb250aW51ZTsKKwkJb2JqLT5yZWFsX3R5cGUgPSBvYmotPnR5cGU7CisJCXNoYTFfb2JqZWN0KE5VTEwsIG9iaiwgb2JqLT5zaXplLCBvYmotPnR5cGUsCisJCQkgICAgJm9iai0+aWR4Lm9pZCk7CisJCW5yX2RlbGF5cy0tOworCX0KKwlpZiAobnJfZGVsYXlzKQorCQlkaWUoXygiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSBpbiBwYXJzZV9wYWNrX29iamVjdHMoKSIpKTsKK30KKworLyoKKyAqIFNlY29uZCBwYXNzOgorICogLSBmb3IgYWxsIG5vbi1kZWx0YSBvYmplY3RzLCBsb29rIGlmIGl0IGlzIHVzZWQgYXMgYSBiYXNlIGZvcgorICogICBkZWx0YXM7CisgKiAtIGlmIHVzZWQgYXMgYSBiYXNlLCB1bmNvbXByZXNzIHRoZSBvYmplY3QgYW5kIGFwcGx5IGFsbCBkZWx0YXMsCisgKiAgIHJlY3Vyc2l2ZWx5IGNoZWNraW5nIGlmIHRoZSByZXN1bHRpbmcgb2JqZWN0IGlzIHVzZWQgYXMgYSBiYXNlCisgKiAgIGZvciBzb21lIG1vcmUgZGVsdGFzLgorICovCitzdGF0aWMgdm9pZCByZXNvbHZlX2RlbHRhcyh2b2lkKQoreworCWludCBpOworCisJaWYgKCFucl9vZnNfZGVsdGFzICYmICFucl9yZWZfZGVsdGFzKQorCQlyZXR1cm47CisKKwkvKiBTb3J0IGRlbHRhcyBieSBiYXNlIFNIQTEvb2Zmc2V0IGZvciBmYXN0IHNlYXJjaGluZyAqLworCVFTT1JUKG9mc19kZWx0YXMsIG5yX29mc19kZWx0YXMsIGNvbXBhcmVfb2ZzX2RlbHRhX2VudHJ5KTsKKwlRU09SVChyZWZfZGVsdGFzLCBucl9yZWZfZGVsdGFzLCBjb21wYXJlX3JlZl9kZWx0YV9lbnRyeSk7CisKKwlpZiAodmVyYm9zZSB8fCBzaG93X3Jlc29sdmluZ19wcm9ncmVzcykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJSZXNvbHZpbmcgZGVsdGFzIiksCisJCQkJCSAgbnJfcmVmX2RlbHRhcyArIG5yX29mc19kZWx0YXMpOworCisJbnJfZGlzcGF0Y2hlZCA9IDA7CisJaWYgKG5yX3RocmVhZHMgPiAxIHx8IGdldGVudigiR0lUX0ZPUkNFX1RIUkVBRFMiKSkgeworCQlpbml0X3RocmVhZCgpOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfdGhyZWFkczsgaSsrKSB7CisJCQlpbnQgcmV0ID0gcHRocmVhZF9jcmVhdGUoJnRocmVhZF9kYXRhW2ldLnRocmVhZCwgTlVMTCwKKwkJCQkJCSB0aHJlYWRlZF9zZWNvbmRfcGFzcywgdGhyZWFkX2RhdGEgKyBpKTsKKwkJCWlmIChyZXQpCisJCQkJZGllKF8oInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkOiAlcyIpLAorCQkJCSAgICBzdHJlcnJvcihyZXQpKTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgbnJfdGhyZWFkczsgaSsrKQorCQkJcHRocmVhZF9qb2luKHRocmVhZF9kYXRhW2ldLnRocmVhZCwgTlVMTCk7CisJCWNsZWFudXBfdGhyZWFkKCk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iaiA9ICZvYmplY3RzW2ldOworCisJCWlmIChpc19kZWx0YV90eXBlKG9iai0+dHlwZSkpCisJCQljb250aW51ZTsKKwkJcmVzb2x2ZV9iYXNlKG9iaik7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIG5yX3Jlc29sdmVkX2RlbHRhcyk7CisJfQorfQorCisvKgorICogVGhpcmQgcGFzczoKKyAqIC0gYXBwZW5kIG9iamVjdHMgdG8gY29udmVydCB0aGluIHBhY2sgdG8gZnVsbCBwYWNrIGlmIHJlcXVpcmVkCisgKiAtIHdyaXRlIHRoZSBmaW5hbCBwYWNrIGhhc2gKKyAqLworc3RhdGljIHZvaWQgZml4X3VucmVzb2x2ZWRfZGVsdGFzKHN0cnVjdCBoYXNoZmlsZSAqZik7CitzdGF0aWMgdm9pZCBjb25jbHVkZV9wYWNrKGludCBmaXhfdGhpbl9wYWNrLCBjb25zdCBjaGFyICpjdXJyX3BhY2ssIHVuc2lnbmVkIGNoYXIgKnBhY2tfaGFzaCkKK3sKKwlpZiAobnJfcmVmX2RlbHRhcyArIG5yX29mc19kZWx0YXMgPT0gbnJfcmVzb2x2ZWRfZGVsdGFzKSB7CisJCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwkJLyogRmx1c2ggcmVtYWluaW5nIHBhY2sgZmluYWwgaGFzaC4gKi8KKwkJZmx1c2goKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChmaXhfdGhpbl9wYWNrKSB7CisJCXN0cnVjdCBoYXNoZmlsZSAqZjsKKwkJdW5zaWduZWQgY2hhciByZWFkX2hhc2hbR0lUX01BWF9SQVdTWl0sIHRhaWxfaGFzaFtHSVRfTUFYX1JBV1NaXTsKKwkJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwkJaW50IG5yX3VucmVzb2x2ZWQgPSBucl9vZnNfZGVsdGFzICsgbnJfcmVmX2RlbHRhcyAtIG5yX3Jlc29sdmVkX2RlbHRhczsKKwkJaW50IG5yX29iamVjdHNfaW5pdGlhbCA9IG5yX29iamVjdHM7CisJCWlmIChucl91bnJlc29sdmVkIDw9IDApCisJCQlkaWUoXygiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIpKTsKKwkJUkVBTExPQ19BUlJBWShvYmplY3RzLCBucl9vYmplY3RzICsgbnJfdW5yZXNvbHZlZCArIDEpOworCQltZW1zZXQob2JqZWN0cyArIG5yX29iamVjdHMgKyAxLCAwLAorCQkgICAgICAgbnJfdW5yZXNvbHZlZCAqIHNpemVvZigqb2JqZWN0cykpOworCQlmID0gaGFzaGZkKG91dHB1dF9mZCwgY3Vycl9wYWNrKTsKKwkJZml4X3VucmVzb2x2ZWRfZGVsdGFzKGYpOworCQlzdHJidWZfYWRkZigmbXNnLCBRXygiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0IiwKKwkJCQkgICAgICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3RzIiwKKwkJCQkgICAgIG5yX29iamVjdHMgLSBucl9vYmplY3RzX2luaXRpYWwpLAorCQkJICAgIG5yX29iamVjdHMgLSBucl9vYmplY3RzX2luaXRpYWwpOworCQlzdG9wX3Byb2dyZXNzX21zZygmcHJvZ3Jlc3MsIG1zZy5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmbXNnKTsKKwkJZmluYWxpemVfaGFzaGZpbGUoZiwgdGFpbF9oYXNoLCAwKTsKKwkJaGFzaGNweShyZWFkX2hhc2gsIHBhY2tfaGFzaCk7CisJCWZpeHVwX3BhY2tfaGVhZGVyX2Zvb3RlcihvdXRwdXRfZmQsIHBhY2tfaGFzaCwKKwkJCQkJIGN1cnJfcGFjaywgbnJfb2JqZWN0cywKKwkJCQkJIHJlYWRfaGFzaCwgY29uc3VtZWRfYnl0ZXMtdGhlX2hhc2hfYWxnby0+cmF3c3opOworCQlpZiAoIWhhc2hlcShyZWFkX2hhc2gsIHRhaWxfaGFzaCkpCisJCQlkaWUoXygiVW5leHBlY3RlZCB0YWlsIGNoZWNrc3VtIGZvciAlcyAiCisJCQkgICAgICAiKGRpc2sgY29ycnVwdGlvbj8pIiksIGN1cnJfcGFjayk7CisJfQorCWlmIChucl9vZnNfZGVsdGFzICsgbnJfcmVmX2RlbHRhcyAhPSBucl9yZXNvbHZlZF9kZWx0YXMpCisJCWRpZShRXygicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIsCisJCSAgICAgICAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiLAorCQkgICAgICAgbnJfb2ZzX2RlbHRhcyArIG5yX3JlZl9kZWx0YXMgLSBucl9yZXNvbHZlZF9kZWx0YXMpLAorCQkgICAgbnJfb2ZzX2RlbHRhcyArIG5yX3JlZl9kZWx0YXMgLSBucl9yZXNvbHZlZF9kZWx0YXMpOworfQorCitzdGF0aWMgaW50IHdyaXRlX2NvbXByZXNzZWQoc3RydWN0IGhhc2hmaWxlICpmLCB2b2lkICppbiwgdW5zaWduZWQgaW50IHNpemUpCit7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCWludCBzdGF0dXM7CisJdW5zaWduZWQgY2hhciBvdXRidWZbNDA5Nl07CisKKwlnaXRfZGVmbGF0ZV9pbml0KCZzdHJlYW0sIHpsaWJfY29tcHJlc3Npb25fbGV2ZWwpOworCXN0cmVhbS5uZXh0X2luID0gaW47CisJc3RyZWFtLmF2YWlsX2luID0gc2l6ZTsKKworCWRvIHsKKwkJc3RyZWFtLm5leHRfb3V0ID0gb3V0YnVmOworCQlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKG91dGJ1Zik7CisJCXN0YXR1cyA9IGdpdF9kZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKTsKKwkJaGFzaHdyaXRlKGYsIG91dGJ1Ziwgc2l6ZW9mKG91dGJ1ZikgLSBzdHJlYW0uYXZhaWxfb3V0KTsKKwl9IHdoaWxlIChzdGF0dXMgPT0gWl9PSyk7CisKKwlpZiAoc3RhdHVzICE9IFpfU1RSRUFNX0VORCkKKwkJZGllKF8oInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIiksIHN0YXR1cyk7CisJc2l6ZSA9IHN0cmVhbS50b3RhbF9vdXQ7CisJZ2l0X2RlZmxhdGVfZW5kKCZzdHJlYW0pOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeSAqYXBwZW5kX29ial90b19wYWNrKHN0cnVjdCBoYXNoZmlsZSAqZiwKKwkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICpidWYsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gJm9iamVjdHNbbnJfb2JqZWN0cysrXTsKKwl1bnNpZ25lZCBjaGFyIGhlYWRlclsxMF07CisJdW5zaWduZWQgbG9uZyBzID0gc2l6ZTsKKwlpbnQgbiA9IDA7CisJdW5zaWduZWQgY2hhciBjID0gKHR5cGUgPDwgNCkgfCAocyAmIDE1KTsKKwlzID4+PSA0OworCXdoaWxlIChzKSB7CisJCWhlYWRlcltuKytdID0gYyB8IDB4ODA7CisJCWMgPSBzICYgMHg3ZjsKKwkJcyA+Pj0gNzsKKwl9CisJaGVhZGVyW24rK10gPSBjOworCWNyYzMyX2JlZ2luKGYpOworCWhhc2h3cml0ZShmLCBoZWFkZXIsIG4pOworCW9ialswXS5zaXplID0gc2l6ZTsKKwlvYmpbMF0uaGRyX3NpemUgPSBuOworCW9ialswXS50eXBlID0gdHlwZTsKKwlvYmpbMF0ucmVhbF90eXBlID0gdHlwZTsKKwlvYmpbMV0uaWR4Lm9mZnNldCA9IG9ialswXS5pZHgub2Zmc2V0ICsgbjsKKwlvYmpbMV0uaWR4Lm9mZnNldCArPSB3cml0ZV9jb21wcmVzc2VkKGYsIGJ1Ziwgc2l6ZSk7CisJb2JqWzBdLmlkeC5jcmMzMiA9IGNyYzMyX2VuZChmKTsKKwloYXNoZmx1c2goZik7CisJaGFzaGNweShvYmotPmlkeC5vaWQuaGFzaCwgc2hhMSk7CisJcmV0dXJuIG9iajsKK30KKworc3RhdGljIGludCBkZWx0YV9wb3NfY29tcGFyZShjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJc3RydWN0IHJlZl9kZWx0YV9lbnRyeSAqYSA9ICooc3RydWN0IHJlZl9kZWx0YV9lbnRyeSAqKilfYTsKKwlzdHJ1Y3QgcmVmX2RlbHRhX2VudHJ5ICpiID0gKihzdHJ1Y3QgcmVmX2RlbHRhX2VudHJ5ICoqKV9iOworCXJldHVybiBhLT5vYmpfbm8gLSBiLT5vYmpfbm87Cit9CisKK3N0YXRpYyB2b2lkIGZpeF91bnJlc29sdmVkX2RlbHRhcyhzdHJ1Y3QgaGFzaGZpbGUgKmYpCit7CisJc3RydWN0IHJlZl9kZWx0YV9lbnRyeSAqKnNvcnRlZF9ieV9wb3M7CisJaW50IGk7CisKKwkvKgorCSAqIFNpbmNlIG1hbnkgdW5yZXNvbHZlZCBkZWx0YXMgbWF5IHdlbGwgYmUgdGhlbXNlbHZlcyBiYXNlIG9iamVjdHMKKwkgKiBmb3IgbW9yZSB1bnJlc29sdmVkIGRlbHRhcywgd2UgcmVhbGx5IHdhbnQgdG8gaW5jbHVkZSB0aGUKKwkgKiBzbWFsbGVzdCBudW1iZXIgb2YgYmFzZSBvYmplY3RzIHRoYXQgd291bGQgY292ZXIgYXMgbXVjaCBkZWx0YQorCSAqIGFzIHBvc3NpYmxlIGJ5IHBpY2tpbmcgdGhlCisJICogdHJ1bmMgZGVsdGFzIGZpcnN0LCBhbGxvd2luZyBmb3Igb3RoZXIgZGVsdGFzIHRvIHJlc29sdmUgd2l0aG91dAorCSAqIGFkZGl0aW9uYWwgYmFzZSBvYmplY3RzLiAgU2luY2UgbW9zdCBiYXNlIG9iamVjdHMgYXJlIHRvIGJlIGZvdW5kCisJICogYmVmb3JlIGRlbHRhcyBkZXBlbmRpbmcgb24gdGhlbSwgYSBnb29kIGhldXJpc3RpYyBpcyB0byBzdGFydAorCSAqIHJlc29sdmluZyBkZWx0YXMgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlaXIgcG9zaXRpb24gaW4gdGhlIHBhY2suCisJICovCisJQUxMT0NfQVJSQVkoc29ydGVkX2J5X3BvcywgbnJfcmVmX2RlbHRhcyk7CisJZm9yIChpID0gMDsgaSA8IG5yX3JlZl9kZWx0YXM7IGkrKykKKwkJc29ydGVkX2J5X3Bvc1tpXSA9ICZyZWZfZGVsdGFzW2ldOworCVFTT1JUKHNvcnRlZF9ieV9wb3MsIG5yX3JlZl9kZWx0YXMsIGRlbHRhX3Bvc19jb21wYXJlKTsKKworCWlmIChoYXNfcHJvbWlzb3JfcmVtb3RlKCkpIHsKKwkJLyoKKwkJICogUHJlZmV0Y2ggdGhlIGRlbHRhIGJhc2VzLgorCQkgKi8KKwkJc3RydWN0IG9pZF9hcnJheSB0b19mZXRjaCA9IE9JRF9BUlJBWV9JTklUOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfcmVmX2RlbHRhczsgaSsrKSB7CisJCQlzdHJ1Y3QgcmVmX2RlbHRhX2VudHJ5ICpkID0gc29ydGVkX2J5X3Bvc1tpXTsKKwkJCWlmICghb2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKHRoZV9yZXBvc2l0b3J5LCAmZC0+b2lkLAorCQkJCQkJICAgICAgTlVMTCwKKwkJCQkJCSAgICAgIE9CSkVDVF9JTkZPX0ZPUl9QUkVGRVRDSCkpCisJCQkJY29udGludWU7CisJCQlvaWRfYXJyYXlfYXBwZW5kKCZ0b19mZXRjaCwgJmQtPm9pZCk7CisJCX0KKwkJcHJvbWlzb3JfcmVtb3RlX2dldF9kaXJlY3QodGhlX3JlcG9zaXRvcnksCisJCQkJCSAgIHRvX2ZldGNoLm9pZCwgdG9fZmV0Y2gubnIpOworCQlvaWRfYXJyYXlfY2xlYXIoJnRvX2ZldGNoKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmVmX2RlbHRhczsgaSsrKSB7CisJCXN0cnVjdCByZWZfZGVsdGFfZW50cnkgKmQgPSBzb3J0ZWRfYnlfcG9zW2ldOworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXN0cnVjdCBiYXNlX2RhdGEgKmJhc2Vfb2JqID0gYWxsb2NfYmFzZV9kYXRhKCk7CisKKwkJaWYgKG9iamVjdHNbZC0+b2JqX25vXS5yZWFsX3R5cGUgIT0gT0JKX1JFRl9ERUxUQSkKKwkJCWNvbnRpbnVlOworCQliYXNlX29iai0+ZGF0YSA9IHJlYWRfb2JqZWN0X2ZpbGUoJmQtPm9pZCwgJnR5cGUsCisJCQkJCQkgICZiYXNlX29iai0+c2l6ZSk7CisJCWlmICghYmFzZV9vYmotPmRhdGEpCisJCQljb250aW51ZTsKKworCQlpZiAoY2hlY2tfb2JqZWN0X3NpZ25hdHVyZSh0aGVfcmVwb3NpdG9yeSwgJmQtPm9pZCwKKwkJCQkJICAgYmFzZV9vYmotPmRhdGEsIGJhc2Vfb2JqLT5zaXplLAorCQkJCQkgICB0eXBlX25hbWUodHlwZSkpKQorCQkJZGllKF8oImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0IiksIG9pZF90b19oZXgoJmQtPm9pZCkpOworCQliYXNlX29iai0+b2JqID0gYXBwZW5kX29ial90b19wYWNrKGYsIGQtPm9pZC5oYXNoLAorCQkJCQliYXNlX29iai0+ZGF0YSwgYmFzZV9vYmotPnNpemUsIHR5cGUpOworCQlmaW5kX3VucmVzb2x2ZWRfZGVsdGFzKGJhc2Vfb2JqKTsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgbnJfcmVzb2x2ZWRfZGVsdGFzKTsKKwl9CisJZnJlZShzb3J0ZWRfYnlfcG9zKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmRlcml2ZV9maWxlbmFtZShjb25zdCBjaGFyICpwYWNrX25hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCwKKwkJCQkgICBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJc2l6ZV90IGxlbjsKKwlpZiAoIXN0cmlwX3N1ZmZpeChwYWNrX25hbWUsICIucGFjayIsICZsZW4pKQorCQlkaWUoXygicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciKSwKKwkJICAgIHBhY2tfbmFtZSk7CisJc3RyYnVmX2FkZChidWYsIHBhY2tfbmFtZSwgbGVuKTsKKwlzdHJidWZfYWRkY2goYnVmLCAnLicpOworCXN0cmJ1Zl9hZGRzdHIoYnVmLCBzdWZmaXgpOworCXJldHVybiBidWYtPmJ1ZjsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfc3BlY2lhbF9maWxlKGNvbnN0IGNoYXIgKnN1ZmZpeCwgY29uc3QgY2hhciAqbXNnLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnBhY2tfbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwKKwkJCSAgICAgICBjb25zdCBjaGFyICoqcmVwb3J0KQoreworCXN0cnVjdCBzdHJidWYgbmFtZV9idWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwlpbnQgZmQ7CisJaW50IG1zZ19sZW4gPSBzdHJsZW4obXNnKTsKKworCWlmIChwYWNrX25hbWUpCisJCWZpbGVuYW1lID0gZGVyaXZlX2ZpbGVuYW1lKHBhY2tfbmFtZSwgc3VmZml4LCAmbmFtZV9idWYpOworCWVsc2UKKwkJZmlsZW5hbWUgPSBvZGJfcGFja19uYW1lKCZuYW1lX2J1ZiwgaGFzaCwgc3VmZml4KTsKKworCWZkID0gb2RiX3BhY2tfa2VlcChmaWxlbmFtZSk7CisJaWYgKGZkIDwgMCkgeworCQlpZiAoZXJybm8gIT0gRUVYSVNUKQorCQkJZGllX2Vycm5vKF8oImNhbm5vdCB3cml0ZSAlcyBmaWxlICclcyciKSwKKwkJCQkgIHN1ZmZpeCwgZmlsZW5hbWUpOworCX0gZWxzZSB7CisJCWlmIChtc2dfbGVuID4gMCkgeworCQkJd3JpdGVfb3JfZGllKGZkLCBtc2csIG1zZ19sZW4pOworCQkJd3JpdGVfb3JfZGllKGZkLCAiXG4iLCAxKTsKKwkJfQorCQlpZiAoY2xvc2UoZmQpICE9IDApCisJCQlkaWVfZXJybm8oXygiY2Fubm90IGNsb3NlIHdyaXR0ZW4gJXMgZmlsZSAnJXMnIiksCisJCQkJICBzdWZmaXgsIGZpbGVuYW1lKTsKKwkJaWYgKHJlcG9ydCkKKwkJCSpyZXBvcnQgPSBzdWZmaXg7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lX2J1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmFsKGNvbnN0IGNoYXIgKmZpbmFsX3BhY2tfbmFtZSwgY29uc3QgY2hhciAqY3Vycl9wYWNrX25hbWUsCisJCSAgY29uc3QgY2hhciAqZmluYWxfaW5kZXhfbmFtZSwgY29uc3QgY2hhciAqY3Vycl9pbmRleF9uYW1lLAorCQkgIGNvbnN0IGNoYXIgKmtlZXBfbXNnLCBjb25zdCBjaGFyICpwcm9taXNvcl9tc2csCisJCSAgdW5zaWduZWQgY2hhciAqaGFzaCkKK3sKKwljb25zdCBjaGFyICpyZXBvcnQgPSAicGFjayI7CisJc3RydWN0IHN0cmJ1ZiBwYWNrX25hbWUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGluZGV4X25hbWUgPSBTVFJCVUZfSU5JVDsKKwlpbnQgZXJyOworCisJaWYgKCFmcm9tX3N0ZGluKSB7CisJCWNsb3NlKGlucHV0X2ZkKTsKKwl9IGVsc2UgeworCQlmc3luY19vcl9kaWUob3V0cHV0X2ZkLCBjdXJyX3BhY2tfbmFtZSk7CisJCWVyciA9IGNsb3NlKG91dHB1dF9mZCk7CisJCWlmIChlcnIpCisJCQlkaWVfZXJybm8oXygiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiKSk7CisJfQorCisJaWYgKGtlZXBfbXNnKQorCQl3cml0ZV9zcGVjaWFsX2ZpbGUoImtlZXAiLCBrZWVwX21zZywgZmluYWxfcGFja19uYW1lLCBoYXNoLAorCQkJCSAgICZyZXBvcnQpOworCWlmIChwcm9taXNvcl9tc2cpCisJCXdyaXRlX3NwZWNpYWxfZmlsZSgicHJvbWlzb3IiLCBwcm9taXNvcl9tc2csIGZpbmFsX3BhY2tfbmFtZSwKKwkJCQkgICBoYXNoLCBOVUxMKTsKKworCWlmIChmaW5hbF9wYWNrX25hbWUgIT0gY3Vycl9wYWNrX25hbWUpIHsKKwkJaWYgKCFmaW5hbF9wYWNrX25hbWUpCisJCQlmaW5hbF9wYWNrX25hbWUgPSBvZGJfcGFja19uYW1lKCZwYWNrX25hbWUsIGhhc2gsICJwYWNrIik7CisJCWlmIChmaW5hbGl6ZV9vYmplY3RfZmlsZShjdXJyX3BhY2tfbmFtZSwgZmluYWxfcGFja19uYW1lKSkKKwkJCWRpZShfKCJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIikpOworCX0gZWxzZSBpZiAoZnJvbV9zdGRpbikKKwkJY2htb2QoZmluYWxfcGFja19uYW1lLCAwNDQ0KTsKKworCWlmIChmaW5hbF9pbmRleF9uYW1lICE9IGN1cnJfaW5kZXhfbmFtZSkgeworCQlpZiAoIWZpbmFsX2luZGV4X25hbWUpCisJCQlmaW5hbF9pbmRleF9uYW1lID0gb2RiX3BhY2tfbmFtZSgmaW5kZXhfbmFtZSwgaGFzaCwgImlkeCIpOworCQlpZiAoZmluYWxpemVfb2JqZWN0X2ZpbGUoY3Vycl9pbmRleF9uYW1lLCBmaW5hbF9pbmRleF9uYW1lKSkKKwkJCWRpZShfKCJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIpKTsKKwl9IGVsc2UKKwkJY2htb2QoZmluYWxfaW5kZXhfbmFtZSwgMDQ0NCk7CisKKwlpZiAoZG9fZnNja19vYmplY3QpIHsKKwkJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJCXAgPSBhZGRfcGFja2VkX2dpdChmaW5hbF9pbmRleF9uYW1lLCBzdHJsZW4oZmluYWxfaW5kZXhfbmFtZSksIDApOworCQlpZiAocCkKKwkJCWluc3RhbGxfcGFja2VkX2dpdCh0aGVfcmVwb3NpdG9yeSwgcCk7CisJfQorCisJaWYgKCFmcm9tX3N0ZGluKSB7CisJCXByaW50ZigiJXNcbiIsIGhhc2hfdG9faGV4KGhhc2gpKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCXN0cmJ1Zl9hZGRmKCZidWYsICIlc1x0JXNcbiIsIHJlcG9ydCwgaGFzaF90b19oZXgoaGFzaCkpOworCQl3cml0ZV9vcl9kaWUoMSwgYnVmLmJ1ZiwgYnVmLmxlbik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJCS8qCisJCSAqIExldCdzIGp1c3QgbWltaWMgZ2l0LXVucGFjay1vYmplY3RzIGhlcmUgYW5kIHdyaXRlCisJCSAqIHRoZSBsYXN0IHBhcnQgb2YgdGhlIGlucHV0IGJ1ZmZlciB0byBzdGRvdXQuCisJCSAqLworCQl3aGlsZSAoaW5wdXRfbGVuKSB7CisJCQllcnIgPSB4d3JpdGUoMSwgaW5wdXRfYnVmZmVyICsgaW5wdXRfb2Zmc2V0LCBpbnB1dF9sZW4pOworCQkJaWYgKGVyciA8PSAwKQorCQkJCWJyZWFrOworCQkJaW5wdXRfbGVuIC09IGVycjsKKwkJCWlucHV0X29mZnNldCArPSBlcnI7CisJCX0KKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmaW5kZXhfbmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJnBhY2tfbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2luZGV4X3BhY2tfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQoreworCXN0cnVjdCBwYWNrX2lkeF9vcHRpb24gKm9wdHMgPSBjYjsKKworCWlmICghc3RyY21wKGssICJwYWNrLmluZGV4dmVyc2lvbiIpKSB7CisJCW9wdHMtPnZlcnNpb24gPSBnaXRfY29uZmlnX2ludChrLCB2KTsKKwkJaWYgKG9wdHMtPnZlcnNpb24gPiAyKQorCQkJZGllKF8oImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lIlBSSXUzMiksIG9wdHMtPnZlcnNpb24pOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgInBhY2sudGhyZWFkcyIpKSB7CisJCW5yX3RocmVhZHMgPSBnaXRfY29uZmlnX2ludChrLCB2KTsKKwkJaWYgKG5yX3RocmVhZHMgPCAwKQorCQkJZGllKF8oImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiKSwKKwkJCSAgICBucl90aHJlYWRzKTsKKwkJaWYgKCFIQVZFX1RIUkVBRFMgJiYgbnJfdGhyZWFkcyAhPSAxKSB7CisJCQl3YXJuaW5nKF8oIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiKSwgayk7CisJCQlucl90aHJlYWRzID0gMTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyhrLCB2LCBjYik7Cit9CisKK3N0YXRpYyBpbnQgY21wX3VpbnQzMihjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJdWludDMyX3QgYSA9ICooKHVpbnQzMl90ICopYV8pOworCXVpbnQzMl90IGIgPSAqKCh1aW50MzJfdCAqKWJfKTsKKworCXJldHVybiAoYSA8IGIpID8gLTEgOiAoYSAhPSBiKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF92Ml9hbm9tYWxvdXNfb2Zmc2V0cyhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCQkgICAgICBzdHJ1Y3QgcGFja19pZHhfb3B0aW9uICpvcHRzKQoreworCWNvbnN0IHVpbnQzMl90ICppZHgxLCAqaWR4MjsKKwl1aW50MzJfdCBpOworCWNvbnN0IHVpbnQzMl90IGhhc2h3b3JkcyA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6IC8gc2l6ZW9mKHVpbnQzMl90KTsKKworCS8qIFRoZSBhZGRyZXNzIG9mIHRoZSA0LWJ5dGUgb2Zmc2V0IHRhYmxlICovCisJaWR4MSA9ICgoKGNvbnN0IHVpbnQzMl90ICopcC0+aW5kZXhfZGF0YSkKKwkJKyAyIC8qIDgtYnl0ZSBoZWFkZXIgKi8KKwkJKyAyNTYgLyogZmFuIG91dCAqLworCQkrIGhhc2h3b3JkcyAqIHAtPm51bV9vYmplY3RzIC8qIG9iamVjdCBJRCB0YWJsZSAqLworCQkrIHAtPm51bV9vYmplY3RzIC8qIENSQzMyIHRhYmxlICovCisJCSk7CisKKwkvKiBUaGUgYWRkcmVzcyBvZiB0aGUgOC1ieXRlIG9mZnNldCB0YWJsZSAqLworCWlkeDIgPSBpZHgxICsgcC0+bnVtX29iamVjdHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgcC0+bnVtX29iamVjdHM7IGkrKykgeworCQl1aW50MzJfdCBvZmYgPSBudG9obChpZHgxW2ldKTsKKwkJaWYgKCEob2ZmICYgMHg4MDAwMDAwMCkpCisJCQljb250aW51ZTsKKwkJb2ZmID0gb2ZmICYgMHg3ZmZmZmZmZjsKKwkJY2hlY2tfcGFja19pbmRleF9wdHIocCwgJmlkeDJbb2ZmICogMl0pOworCQlpZiAoaWR4MltvZmYgKiAyXSkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBUaGUgcmVhbCBvZmZzZXQgaXMgbnRvaGwoaWR4MltvZmYgKiAyXSkgaW4gaGlnaCA0CisJCSAqIG9jdGV0cywgYW5kIG50b2hsKGlkeDJbb2ZmICogMiArIDFdKSBpbiBsb3cgNAorCQkgKiBvY3RldHMuICBCdXQgaWR4MltvZmYgKiAyXSBpcyBaZXJvISEhCisJCSAqLworCQlBTExPQ19HUk9XKG9wdHMtPmFub21hbHksIG9wdHMtPmFub21hbHlfbnIgKyAxLCBvcHRzLT5hbm9tYWx5X2FsbG9jKTsKKwkJb3B0cy0+YW5vbWFseVtvcHRzLT5hbm9tYWx5X25yKytdID0gbnRvaGwoaWR4MltvZmYgKiAyICsgMV0pOworCX0KKworCVFTT1JUKG9wdHMtPmFub21hbHksIG9wdHMtPmFub21hbHlfbnIsIGNtcF91aW50MzIpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2lkeF9vcHRpb24oc3RydWN0IHBhY2tfaWR4X29wdGlvbiAqb3B0cywgY29uc3QgY2hhciAqcGFja19uYW1lKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gYWRkX3BhY2tlZF9naXQocGFja19uYW1lLCBzdHJsZW4ocGFja19uYW1lKSwgMSk7CisKKwlpZiAoIXApCisJCWRpZShfKCJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGZpbGUgJyVzJyIpLCBwYWNrX25hbWUpOworCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCisJCWRpZShfKCJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIiksIHBhY2tfbmFtZSk7CisKKwkvKiBSZWFkIHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhlIGV4aXN0aW5nIGlkeCBmaWxlICovCisJb3B0cy0+dmVyc2lvbiA9IHAtPmluZGV4X3ZlcnNpb247CisKKwlpZiAob3B0cy0+dmVyc2lvbiA9PSAyKQorCQlyZWFkX3YyX2Fub21hbG91c19vZmZzZXRzKHAsIG9wdHMpOworCisJLyoKKwkgKiBHZXQgcmlkIG9mIHRoZSBpZHggZmlsZSBhcyB3ZSBkbyBub3QgbmVlZCBpdCBhbnltb3JlLgorCSAqIE5FRURTV09SSzogZXh0cmFjdCB0aGlzIGJpdCBmcm9tIGZyZWVfcGFja19ieV9uYW1lKCkgaW4KKwkgKiBzaGExLWZpbGUuYywgcGVyaGFwcz8gIEl0IHNob3VsZG4ndCBtYXR0ZXIgdmVyeSBtdWNoIGFzIHdlCisJICoga25vdyB3ZSBoYXZlbid0IGluc3RhbGxlZCB0aGlzIHBhY2sgKGhlbmNlIHdlIG5ldmVyIGhhdmUKKwkgKiByZWFkIGFueXRoaW5nIGZyb20gaXQpLgorCSAqLworCWNsb3NlX3BhY2tfaW5kZXgocCk7CisJZnJlZShwKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19wYWNrX2luZm8oaW50IHN0YXRfb25seSkKK3sKKwlpbnQgaSwgYmFzZW9iamVjdHMgPSBucl9vYmplY3RzIC0gbnJfcmVmX2RlbHRhcyAtIG5yX29mc19kZWx0YXM7CisJdW5zaWduZWQgbG9uZyAqY2hhaW5faGlzdG9ncmFtID0gTlVMTDsKKworCWlmIChkZWVwZXN0X2RlbHRhKQorCQljaGFpbl9oaXN0b2dyYW0gPSB4Y2FsbG9jKGRlZXBlc3RfZGVsdGEsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iaiA9ICZvYmplY3RzW2ldOworCisJCWlmIChpc19kZWx0YV90eXBlKG9iai0+dHlwZSkpCisJCQljaGFpbl9oaXN0b2dyYW1bb2JqX3N0YXRbaV0uZGVsdGFfZGVwdGggLSAxXSsrOworCQlpZiAoc3RhdF9vbmx5KQorCQkJY29udGludWU7CisJCXByaW50ZigiJXMgJS02cyAlIlBSSXVNQVgiICUiUFJJdU1BWCIgJSJQUkl1TUFYLAorCQkgICAgICAgb2lkX3RvX2hleCgmb2JqLT5pZHgub2lkKSwKKwkJICAgICAgIHR5cGVfbmFtZShvYmotPnJlYWxfdHlwZSksICh1aW50bWF4X3Qpb2JqLT5zaXplLAorCQkgICAgICAgKHVpbnRtYXhfdCkob2JqWzFdLmlkeC5vZmZzZXQgLSBvYmotPmlkeC5vZmZzZXQpLAorCQkgICAgICAgKHVpbnRtYXhfdClvYmotPmlkeC5vZmZzZXQpOworCQlpZiAoaXNfZGVsdGFfdHlwZShvYmotPnR5cGUpKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpib2JqID0gJm9iamVjdHNbb2JqX3N0YXRbaV0uYmFzZV9vYmplY3Rfbm9dOworCQkJcHJpbnRmKCIgJXUgJXMiLCBvYmpfc3RhdFtpXS5kZWx0YV9kZXB0aCwKKwkJCSAgICAgICBvaWRfdG9faGV4KCZib2JqLT5pZHgub2lkKSk7CisJCX0KKwkJcHV0Y2hhcignXG4nKTsKKwl9CisKKwlpZiAoYmFzZW9iamVjdHMpCisJCXByaW50Zl9sbihRXygibm9uIGRlbHRhOiAlZCBvYmplY3QiLAorCQkJICAgICAibm9uIGRlbHRhOiAlZCBvYmplY3RzIiwKKwkJCSAgICAgYmFzZW9iamVjdHMpLAorCQkJICBiYXNlb2JqZWN0cyk7CisJZm9yIChpID0gMDsgaSA8IGRlZXBlc3RfZGVsdGE7IGkrKykgeworCQlpZiAoIWNoYWluX2hpc3RvZ3JhbVtpXSkKKwkJCWNvbnRpbnVlOworCQlwcmludGZfbG4oUV8oImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IiwKKwkJCSAgICAgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIsCisJCQkgICAgIGNoYWluX2hpc3RvZ3JhbVtpXSksCisJCQkgIGkgKyAxLAorCQkJICBjaGFpbl9oaXN0b2dyYW1baV0pOworCX0KK30KKworaW50IGNtZF9pbmRleF9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCBmaXhfdGhpbl9wYWNrID0gMCwgdmVyaWZ5ID0gMCwgc3RhdF9vbmx5ID0gMDsKKwljb25zdCBjaGFyICpjdXJyX2luZGV4OworCWNvbnN0IGNoYXIgKmluZGV4X25hbWUgPSBOVUxMLCAqcGFja19uYW1lID0gTlVMTDsKKwljb25zdCBjaGFyICprZWVwX21zZyA9IE5VTEw7CisJY29uc3QgY2hhciAqcHJvbWlzb3JfbXNnID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIGluZGV4X25hbWVfYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqaWR4X29iamVjdHM7CisJc3RydWN0IHBhY2tfaWR4X29wdGlvbiBvcHRzOworCXVuc2lnbmVkIGNoYXIgcGFja19oYXNoW0dJVF9NQVhfUkFXU1pdOworCXVuc2lnbmVkIGZvcmVpZ25fbnIgPSAxOwkvKiB6ZXJvIGlzIGEgImdvb2QiIHZhbHVlLCBhc3N1bWUgYmFkICovCisJaW50IHJlcG9ydF9lbmRfb2ZfaW5wdXQgPSAwOworCisJLyoKKwkgKiBpbmRleC1wYWNrIG5ldmVyIG5lZWRzIHRvIGZldGNoIG1pc3Npbmcgb2JqZWN0cyBleGNlcHQgd2hlbgorCSAqIFJFRl9ERUxUQSBiYXNlcyBhcmUgbWlzc2luZyAod2hpY2ggYXJlIGV4cGxpY2l0bHkgaGFuZGxlZCkuIEl0IG9ubHkKKwkgKiBhY2Nlc3NlcyB0aGUgcmVwbyB0byBkbyBoYXNoIGNvbGxpc2lvbiBjaGVja3MgYW5kIHRvIGNoZWNrIHdoaWNoCisJICogUkVGX0RFTFRBIGJhc2VzIG5lZWQgdG8gYmUgZmV0Y2hlZC4KKwkgKi8KKwlmZXRjaF9pZl9taXNzaW5nID0gMDsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CisKKwlyZWFkX3JlcGxhY2VfcmVmcyA9IDA7CisJZnNja19vcHRpb25zLndhbGsgPSBtYXJrX2xpbms7CisKKwlyZXNldF9wYWNrX2lkeF9vcHRpb24oJm9wdHMpOworCWdpdF9jb25maWcoZ2l0X2luZGV4X3BhY2tfY29uZmlnLCAmb3B0cyk7CisJaWYgKHByZWZpeCAmJiBjaGRpcihwcmVmaXgpKQorCQlkaWUoXygiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiKSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXN0ZGluIikpIHsKKwkJCQlmcm9tX3N0ZGluID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWZpeC10aGluIikpIHsKKwkJCQlmaXhfdGhpbl9wYWNrID0gMTsKKwkJCX0gZWxzZSBpZiAoc2tpcF90b19vcHRpb25hbF9hcmcoYXJnLCAiLS1zdHJpY3QiLCAmYXJnKSkgeworCQkJCXN0cmljdCA9IDE7CisJCQkJZG9fZnNja19vYmplY3QgPSAxOworCQkJCWZzY2tfc2V0X21zZ190eXBlcygmZnNja19vcHRpb25zLCBhcmcpOworCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tY2hlY2stc2VsZi1jb250YWluZWQtYW5kLWNvbm5lY3RlZCIpKSB7CisJCQkJc3RyaWN0ID0gMTsKKwkJCQljaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWZzY2stb2JqZWN0cyIpKSB7CisJCQkJZG9fZnNja19vYmplY3QgPSAxOworCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tdmVyaWZ5IikpIHsKKwkJCQl2ZXJpZnkgPSAxOworCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tdmVyaWZ5LXN0YXQiKSkgeworCQkJCXZlcmlmeSA9IDE7CisJCQkJc2hvd19zdGF0ID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXZlcmlmeS1zdGF0LW9ubHkiKSkgeworCQkJCXZlcmlmeSA9IDE7CisJCQkJc2hvd19zdGF0ID0gMTsKKwkJCQlzdGF0X29ubHkgPSAxOworCQkJfSBlbHNlIGlmIChza2lwX3RvX29wdGlvbmFsX2FyZyhhcmcsICItLWtlZXAiLCAma2VlcF9tc2cpKSB7CisJCQkJOyAvKiBub3RoaW5nIHRvIGRvICovCisJCQl9IGVsc2UgaWYgKHNraXBfdG9fb3B0aW9uYWxfYXJnKGFyZywgIi0tcHJvbWlzb3IiLCAmcHJvbWlzb3JfbXNnKSkgeworCQkJCTsgLyogYWxyZWFkeSBwYXJzZWQgKi8KKwkJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS10aHJlYWRzPSIpKSB7CisJCQkJY2hhciAqZW5kOworCQkJCW5yX3RocmVhZHMgPSBzdHJ0b3VsKGFyZysxMCwgJmVuZCwgMCk7CisJCQkJaWYgKCFhcmdbMTBdIHx8ICplbmQgfHwgbnJfdGhyZWFkcyA8IDApCisJCQkJCXVzYWdlKGluZGV4X3BhY2tfdXNhZ2UpOworCQkJCWlmICghSEFWRV9USFJFQURTICYmIG5yX3RocmVhZHMgIT0gMSkgeworCQkJCQl3YXJuaW5nKF8oIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiKSwgYXJnKTsKKwkJCQkJbnJfdGhyZWFkcyA9IDE7CisJCQkJfQorCQkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChhcmcsICItLXBhY2tfaGVhZGVyPSIpKSB7CisJCQkJc3RydWN0IHBhY2tfaGVhZGVyICpoZHI7CisJCQkJY2hhciAqYzsKKworCQkJCWhkciA9IChzdHJ1Y3QgcGFja19oZWFkZXIgKilpbnB1dF9idWZmZXI7CisJCQkJaGRyLT5oZHJfc2lnbmF0dXJlID0gaHRvbmwoUEFDS19TSUdOQVRVUkUpOworCQkJCWhkci0+aGRyX3ZlcnNpb24gPSBodG9ubChzdHJ0b3VsKGFyZyArIDE0LCAmYywgMTApKTsKKwkJCQlpZiAoKmMgIT0gJywnKQorCQkJCQlkaWUoXygiYmFkICVzIiksIGFyZyk7CisJCQkJaGRyLT5oZHJfZW50cmllcyA9IGh0b25sKHN0cnRvdWwoYyArIDEsICZjLCAxMCkpOworCQkJCWlmICgqYykKKwkJCQkJZGllKF8oImJhZCAlcyIpLCBhcmcpOworCQkJCWlucHV0X2xlbiA9IHNpemVvZigqaGRyKTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItdiIpKSB7CisJCQkJdmVyYm9zZSA9IDE7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG93LXJlc29sdmluZy1wcm9ncmVzcyIpKSB7CisJCQkJc2hvd19yZXNvbHZpbmdfcHJvZ3Jlc3MgPSAxOworCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmVwb3J0LWVuZC1vZi1pbnB1dCIpKSB7CisJCQkJcmVwb3J0X2VuZF9vZl9pbnB1dCA9IDE7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLW8iKSkgeworCQkJCWlmIChpbmRleF9uYW1lIHx8IChpKzEpID49IGFyZ2MpCisJCQkJCXVzYWdlKGluZGV4X3BhY2tfdXNhZ2UpOworCQkJCWluZGV4X25hbWUgPSBhcmd2WysraV07CisJCQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGFyZywgIi0taW5kZXgtdmVyc2lvbj0iKSkgeworCQkJCWNoYXIgKmM7CisJCQkJb3B0cy52ZXJzaW9uID0gc3RydG91bChhcmcgKyAxNiwgJmMsIDEwKTsKKwkJCQlpZiAob3B0cy52ZXJzaW9uID4gMikKKwkJCQkJZGllKF8oImJhZCAlcyIpLCBhcmcpOworCQkJCWlmICgqYyA9PSAnLCcpCisJCQkJCW9wdHMub2ZmMzJfbGltaXQgPSBzdHJ0b3VsKGMrMSwgJmMsIDApOworCQkJCWlmICgqYyB8fCBvcHRzLm9mZjMyX2xpbWl0ICYgMHg4MDAwMDAwMCkKKwkJCQkJZGllKF8oImJhZCAlcyIpLCBhcmcpOworCQkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLW1heC1pbnB1dC1zaXplPSIsICZhcmcpKSB7CisJCQkJbWF4X2lucHV0X3NpemUgPSBzdHJ0b3VtYXgoYXJnLCBOVUxMLCAxMCk7CisJCQl9IGVsc2UKKwkJCQl1c2FnZShpbmRleF9wYWNrX3VzYWdlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHBhY2tfbmFtZSkKKwkJCXVzYWdlKGluZGV4X3BhY2tfdXNhZ2UpOworCQlwYWNrX25hbWUgPSBhcmc7CisJfQorCisJaWYgKCFwYWNrX25hbWUgJiYgIWZyb21fc3RkaW4pCisJCXVzYWdlKGluZGV4X3BhY2tfdXNhZ2UpOworCWlmIChmaXhfdGhpbl9wYWNrICYmICFmcm9tX3N0ZGluKQorCQlkaWUoXygiLS1maXgtdGhpbiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IC0tc3RkaW4iKSk7CisJaWYgKGZyb21fc3RkaW4gJiYgIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQorCQlkaWUoXygiLS1zdGRpbiByZXF1aXJlcyBhIGdpdCByZXBvc2l0b3J5IikpOworCWlmICghaW5kZXhfbmFtZSAmJiBwYWNrX25hbWUpCisJCWluZGV4X25hbWUgPSBkZXJpdmVfZmlsZW5hbWUocGFja19uYW1lLCAiaWR4IiwgJmluZGV4X25hbWVfYnVmKTsKKworCWlmICh2ZXJpZnkpIHsKKwkJaWYgKCFpbmRleF9uYW1lKQorCQkJZGllKF8oIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIpKTsKKwkJcmVhZF9pZHhfb3B0aW9uKCZvcHRzLCBpbmRleF9uYW1lKTsKKwkJb3B0cy5mbGFncyB8PSBXUklURV9JRFhfVkVSSUZZIHwgV1JJVEVfSURYX1NUUklDVDsKKwl9CisJaWYgKHN0cmljdCkKKwkJb3B0cy5mbGFncyB8PSBXUklURV9JRFhfU1RSSUNUOworCisJaWYgKEhBVkVfVEhSRUFEUyAmJiAhbnJfdGhyZWFkcykgeworCQlucl90aHJlYWRzID0gb25saW5lX2NwdXMoKTsKKwkJLyogQW4gZXhwZXJpbWVudCBzaG93ZWQgdGhhdCBtb3JlIHRocmVhZHMgZG9lcyBub3QgbWVhbiBmYXN0ZXIgKi8KKwkJaWYgKG5yX3RocmVhZHMgPiAzKQorCQkJbnJfdGhyZWFkcyA9IDM7CisJfQorCisJY3Vycl9wYWNrID0gb3Blbl9wYWNrX2ZpbGUocGFja19uYW1lKTsKKwlwYXJzZV9wYWNrX2hlYWRlcigpOworCW9iamVjdHMgPSB4Y2FsbG9jKHN0X2FkZChucl9vYmplY3RzLCAxKSwgc2l6ZW9mKHN0cnVjdCBvYmplY3RfZW50cnkpKTsKKwlpZiAoc2hvd19zdGF0KQorCQlvYmpfc3RhdCA9IHhjYWxsb2Moc3RfYWRkKG5yX29iamVjdHMsIDEpLCBzaXplb2Yoc3RydWN0IG9iamVjdF9zdGF0KSk7CisJb2ZzX2RlbHRhcyA9IHhjYWxsb2MobnJfb2JqZWN0cywgc2l6ZW9mKHN0cnVjdCBvZnNfZGVsdGFfZW50cnkpKTsKKwlwYXJzZV9wYWNrX29iamVjdHMocGFja19oYXNoKTsKKwlpZiAocmVwb3J0X2VuZF9vZl9pbnB1dCkKKwkJd3JpdGVfaW5fZnVsbCgyLCAiXDAiLCAxKTsKKwlyZXNvbHZlX2RlbHRhcygpOworCWNvbmNsdWRlX3BhY2soZml4X3RoaW5fcGFjaywgY3Vycl9wYWNrLCBwYWNrX2hhc2gpOworCWZyZWUob2ZzX2RlbHRhcyk7CisJZnJlZShyZWZfZGVsdGFzKTsKKwlpZiAoc3RyaWN0KQorCQlmb3JlaWduX25yID0gY2hlY2tfb2JqZWN0cygpOworCisJaWYgKHNob3dfc3RhdCkKKwkJc2hvd19wYWNrX2luZm8oc3RhdF9vbmx5KTsKKworCUFMTE9DX0FSUkFZKGlkeF9vYmplY3RzLCBucl9vYmplY3RzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKQorCQlpZHhfb2JqZWN0c1tpXSA9ICZvYmplY3RzW2ldLmlkeDsKKwljdXJyX2luZGV4ID0gd3JpdGVfaWR4X2ZpbGUoaW5kZXhfbmFtZSwgaWR4X29iamVjdHMsIG5yX29iamVjdHMsICZvcHRzLCBwYWNrX2hhc2gpOworCWZyZWUoaWR4X29iamVjdHMpOworCisJaWYgKCF2ZXJpZnkpCisJCWZpbmFsKHBhY2tfbmFtZSwgY3Vycl9wYWNrLAorCQkgICAgICBpbmRleF9uYW1lLCBjdXJyX2luZGV4LAorCQkgICAgICBrZWVwX21zZywgcHJvbWlzb3JfbXNnLAorCQkgICAgICBwYWNrX2hhc2gpOworCWVsc2UKKwkJY2xvc2UoaW5wdXRfZmQpOworCisJaWYgKGRvX2ZzY2tfb2JqZWN0ICYmIGZzY2tfZmluaXNoKCZmc2NrX29wdGlvbnMpKQorCQlkaWUoXygiZnNjayBlcnJvciBpbiBwYWNrIG9iamVjdHMiKSk7CisKKwlmcmVlKG9iamVjdHMpOworCXN0cmJ1Zl9yZWxlYXNlKCZpbmRleF9uYW1lX2J1Zik7CisJaWYgKHBhY2tfbmFtZSA9PSBOVUxMKQorCQlmcmVlKCh2b2lkICopIGN1cnJfcGFjayk7CisJaWYgKGluZGV4X25hbWUgPT0gTlVMTCkKKwkJZnJlZSgodm9pZCAqKSBjdXJyX2luZGV4KTsKKworCS8qCisJICogTGV0IHRoZSBjYWxsZXIga25vdyB0aGlzIHBhY2sgaXMgbm90IHNlbGYgY29udGFpbmVkCisJICovCisJaWYgKGNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgJiYgZm9yZWlnbl9ucikKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vaW5pdC1kYi5jIGIvYnVpbHRpbi9pbml0LWRiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3MjIyZQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vaW5pdC1kYi5jCkBAIC0wLDAgKzEsNjU2IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCisjaWZuZGVmIERFRkFVTFRfR0lUX1RFTVBMQVRFX0RJUgorI2RlZmluZSBERUZBVUxUX0dJVF9URU1QTEFURV9ESVIgIi91c3Ivc2hhcmUvZ2l0LWNvcmUvdGVtcGxhdGVzIgorI2VuZGlmCisKKyNpZmRlZiBOT19UUlVTVEFCTEVfRklMRU1PREUKKyNkZWZpbmUgVEVTVF9GSUxFTU9ERSAwCisjZWxzZQorI2RlZmluZSBURVNUX0ZJTEVNT0RFIDEKKyNlbmRpZgorCisjZGVmaW5lIEdJVF9ERUZBVUxUX0hBU0hfRU5WSVJPTk1FTlQgIkdJVF9ERUZBVUxUX0hBU0giCisKK3N0YXRpYyBpbnQgaW5pdF9pc19iYXJlX3JlcG9zaXRvcnkgPSAwOworc3RhdGljIGludCBpbml0X3NoYXJlZF9yZXBvc2l0b3J5ID0gLTE7CitzdGF0aWMgY29uc3QgY2hhciAqaW5pdF9kYl90ZW1wbGF0ZV9kaXI7CisKK3N0YXRpYyB2b2lkIGNvcHlfdGVtcGxhdGVzXzEoc3RydWN0IHN0cmJ1ZiAqcGF0aCwgc3RydWN0IHN0cmJ1ZiAqdGVtcGxhdGVfcGF0aCwKKwkJCSAgICAgRElSICpkaXIpCit7CisJc2l6ZV90IHBhdGhfYmFzZWxlbiA9IHBhdGgtPmxlbjsKKwlzaXplX3QgdGVtcGxhdGVfYmFzZWxlbiA9IHRlbXBsYXRlX3BhdGgtPmxlbjsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKworCS8qIE5vdGU6IGlmICIuZ2l0L2hvb2tzIiBmaWxlIGV4aXN0cyBpbiB0aGUgcmVwb3NpdG9yeSBiZWluZworCSAqIHJlLWluaXRpYWxpemVkLCAvZXRjL2NvcmUtZ2l0L3RlbXBsYXRlcy9ob29rcy91cGRhdGUgd291bGQKKwkgKiBjYXVzZSAiZ2l0IGluaXQiIHRvIGZhaWwgaGVyZS4gIEkgdGhpbmsgdGhpcyBpcyBzYW5lIGJ1dAorCSAqIGl0IG1lYW5zIHRoYXQgdGhlIHNldCBvZiB0ZW1wbGF0ZXMgd2Ugc2hpcCBieSBkZWZhdWx0LCBhbG9uZworCSAqIHdpdGggdGhlIHdheSB0aGUgbmFtZXNwYWNlIHVuZGVyIC5naXQvIGlzIG9yZ2FuaXplZCwgc2hvdWxkCisJICogYmUgcmVhbGx5IGNhcmVmdWxseSBjaG9zZW4uCisJICovCisJc2FmZV9jcmVhdGVfZGlyKHBhdGgtPmJ1ZiwgMSk7CisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc3RhdCBzdF9naXQsIHN0X3RlbXBsYXRlOworCQlpbnQgZXhpc3RzID0gMDsKKworCQlzdHJidWZfc2V0bGVuKHBhdGgsIHBhdGhfYmFzZWxlbik7CisJCXN0cmJ1Zl9zZXRsZW4odGVtcGxhdGVfcGF0aCwgdGVtcGxhdGVfYmFzZWxlbik7CisKKwkJaWYgKGRlLT5kX25hbWVbMF0gPT0gJy4nKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9hZGRzdHIocGF0aCwgZGUtPmRfbmFtZSk7CisJCXN0cmJ1Zl9hZGRzdHIodGVtcGxhdGVfcGF0aCwgZGUtPmRfbmFtZSk7CisJCWlmIChsc3RhdChwYXRoLT5idWYsICZzdF9naXQpKSB7CisJCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJCWRpZV9lcnJubyhfKCJjYW5ub3Qgc3RhdCAnJXMnIiksIHBhdGgtPmJ1Zik7CisJCX0KKwkJZWxzZQorCQkJZXhpc3RzID0gMTsKKworCQlpZiAobHN0YXQodGVtcGxhdGVfcGF0aC0+YnVmLCAmc3RfdGVtcGxhdGUpKQorCQkJZGllX2Vycm5vKF8oImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciKSwgdGVtcGxhdGVfcGF0aC0+YnVmKTsKKworCQlpZiAoU19JU0RJUihzdF90ZW1wbGF0ZS5zdF9tb2RlKSkgeworCQkJRElSICpzdWJkaXIgPSBvcGVuZGlyKHRlbXBsYXRlX3BhdGgtPmJ1Zik7CisJCQlpZiAoIXN1YmRpcikKKwkJCQlkaWVfZXJybm8oXygiY2Fubm90IG9wZW5kaXIgJyVzJyIpLCB0ZW1wbGF0ZV9wYXRoLT5idWYpOworCQkJc3RyYnVmX2FkZGNoKHBhdGgsICcvJyk7CisJCQlzdHJidWZfYWRkY2godGVtcGxhdGVfcGF0aCwgJy8nKTsKKwkJCWNvcHlfdGVtcGxhdGVzXzEocGF0aCwgdGVtcGxhdGVfcGF0aCwgc3ViZGlyKTsKKwkJCWNsb3NlZGlyKHN1YmRpcik7CisJCX0KKwkJZWxzZSBpZiAoZXhpc3RzKQorCQkJY29udGludWU7CisJCWVsc2UgaWYgKFNfSVNMTksoc3RfdGVtcGxhdGUuc3RfbW9kZSkpIHsKKwkJCXN0cnVjdCBzdHJidWYgbG5rID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZsbmssIHRlbXBsYXRlX3BhdGgtPmJ1ZiwKKwkJCQkJICAgIHN0X3RlbXBsYXRlLnN0X3NpemUpIDwgMCkKKwkJCQlkaWVfZXJybm8oXygiY2Fubm90IHJlYWRsaW5rICclcyciKSwgdGVtcGxhdGVfcGF0aC0+YnVmKTsKKwkJCWlmIChzeW1saW5rKGxuay5idWYsIHBhdGgtPmJ1ZikpCisJCQkJZGllX2Vycm5vKF8oImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIpLAorCQkJCQkgIGxuay5idWYsIHBhdGgtPmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmbG5rKTsKKwkJfQorCQllbHNlIGlmIChTX0lTUkVHKHN0X3RlbXBsYXRlLnN0X21vZGUpKSB7CisJCQlpZiAoY29weV9maWxlKHBhdGgtPmJ1ZiwgdGVtcGxhdGVfcGF0aC0+YnVmLCBzdF90ZW1wbGF0ZS5zdF9tb2RlKSkKKwkJCQlkaWVfZXJybm8oXygiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIiksCisJCQkJCSAgdGVtcGxhdGVfcGF0aC0+YnVmLCBwYXRoLT5idWYpOworCQl9CisJCWVsc2UKKwkJCWVycm9yKF8oImlnbm9yaW5nIHRlbXBsYXRlICVzIiksIHRlbXBsYXRlX3BhdGgtPmJ1Zik7CisJfQorfQorCitzdGF0aWMgdm9pZCBjb3B5X3RlbXBsYXRlcyhjb25zdCBjaGFyICp0ZW1wbGF0ZV9kaXIpCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB0ZW1wbGF0ZV9wYXRoID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IHRlbXBsYXRlX2xlbjsKKwlzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgdGVtcGxhdGVfZm9ybWF0ID0gUkVQT1NJVE9SWV9GT1JNQVRfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCURJUiAqZGlyOworCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOworCisJaWYgKCF0ZW1wbGF0ZV9kaXIpCisJCXRlbXBsYXRlX2RpciA9IGdldGVudihURU1QTEFURV9ESVJfRU5WSVJPTk1FTlQpOworCWlmICghdGVtcGxhdGVfZGlyKQorCQl0ZW1wbGF0ZV9kaXIgPSBpbml0X2RiX3RlbXBsYXRlX2RpcjsKKwlpZiAoIXRlbXBsYXRlX2RpcikKKwkJdGVtcGxhdGVfZGlyID0gdG9fZnJlZSA9IHN5c3RlbV9wYXRoKERFRkFVTFRfR0lUX1RFTVBMQVRFX0RJUik7CisJaWYgKCF0ZW1wbGF0ZV9kaXJbMF0pIHsKKwkJZnJlZSh0b19mcmVlKTsKKwkJcmV0dXJuOworCX0KKworCXN0cmJ1Zl9hZGRzdHIoJnRlbXBsYXRlX3BhdGgsIHRlbXBsYXRlX2Rpcik7CisJc3RyYnVmX2NvbXBsZXRlKCZ0ZW1wbGF0ZV9wYXRoLCAnLycpOworCXRlbXBsYXRlX2xlbiA9IHRlbXBsYXRlX3BhdGgubGVuOworCisJZGlyID0gb3BlbmRpcih0ZW1wbGF0ZV9wYXRoLmJ1Zik7CisJaWYgKCFkaXIpIHsKKwkJd2FybmluZyhfKCJ0ZW1wbGF0ZXMgbm90IGZvdW5kIGluICVzIiksIHRlbXBsYXRlX2Rpcik7CisJCWdvdG8gZnJlZV9yZXR1cm47CisJfQorCisJLyogTWFrZSBzdXJlIHRoYXQgdGVtcGxhdGUgaXMgZnJvbSB0aGUgY29ycmVjdCB2aW50YWdlICovCisJc3RyYnVmX2FkZHN0cigmdGVtcGxhdGVfcGF0aCwgImNvbmZpZyIpOworCXJlYWRfcmVwb3NpdG9yeV9mb3JtYXQoJnRlbXBsYXRlX2Zvcm1hdCwgdGVtcGxhdGVfcGF0aC5idWYpOworCXN0cmJ1Zl9zZXRsZW4oJnRlbXBsYXRlX3BhdGgsIHRlbXBsYXRlX2xlbik7CisKKwkvKgorCSAqIE5vIG1lbnRpb24gb2YgdmVyc2lvbiBhdCBhbGwgaXMgT0ssIGJ1dCBhbnl0aGluZyBlbHNlIHNob3VsZCBiZQorCSAqIHZlcmlmaWVkLgorCSAqLworCWlmICh0ZW1wbGF0ZV9mb3JtYXQudmVyc2lvbiA+PSAwICYmCisJICAgIHZlcmlmeV9yZXBvc2l0b3J5X2Zvcm1hdCgmdGVtcGxhdGVfZm9ybWF0LCAmZXJyKSA8IDApIHsKKwkJd2FybmluZyhfKCJub3QgY29weWluZyB0ZW1wbGF0ZXMgZnJvbSAnJXMnOiAlcyIpLAorCQkJICB0ZW1wbGF0ZV9kaXIsIGVyci5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwkJZ290byBjbG9zZV9mcmVlX3JldHVybjsKKwl9CisKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBnZXRfZ2l0X2NvbW1vbl9kaXIoKSk7CisJc3RyYnVmX2NvbXBsZXRlKCZwYXRoLCAnLycpOworCWNvcHlfdGVtcGxhdGVzXzEoJnBhdGgsICZ0ZW1wbGF0ZV9wYXRoLCBkaXIpOworY2xvc2VfZnJlZV9yZXR1cm46CisJY2xvc2VkaXIoZGlyKTsKK2ZyZWVfcmV0dXJuOgorCWZyZWUodG9fZnJlZSk7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCXN0cmJ1Zl9yZWxlYXNlKCZ0ZW1wbGF0ZV9wYXRoKTsKKwljbGVhcl9yZXBvc2l0b3J5X2Zvcm1hdCgmdGVtcGxhdGVfZm9ybWF0KTsKK30KKworc3RhdGljIGludCBnaXRfaW5pdF9kYl9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAoaywgImluaXQudGVtcGxhdGVkaXIiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfcGF0aG5hbWUoJmluaXRfZGJfdGVtcGxhdGVfZGlyLCBrLCB2KTsKKworCWlmIChzdGFydHNfd2l0aChrLCAiY29yZS4iKSkKKwkJcmV0dXJuIHBsYXRmb3JtX2NvcmVfY29uZmlnKGssIHYsIGNiKTsKKworCXJldHVybiAwOworfQorCisvKgorICogSWYgdGhlIGdpdF9kaXIgaXMgbm90IGRpcmVjdGx5IGluc2lkZSB0aGUgd29ya2luZyB0cmVlLCB0aGVuIGdpdCB3aWxsIG5vdAorICogZmluZCBpdCBieSBkZWZhdWx0LCBhbmQgd2UgbmVlZCB0byBzZXQgdGhlIHdvcmt0cmVlIGV4cGxpY2l0bHkuCisgKi8KK3N0YXRpYyBpbnQgbmVlZHNfd29ya190cmVlX2NvbmZpZyhjb25zdCBjaGFyICpnaXRfZGlyLCBjb25zdCBjaGFyICp3b3JrX3RyZWUpCit7CisJaWYgKCFzdHJjbXAod29ya190cmVlLCAiLyIpICYmICFzdHJjbXAoZ2l0X2RpciwgIi8uZ2l0IikpCisJCXJldHVybiAwOworCWlmIChza2lwX3ByZWZpeChnaXRfZGlyLCB3b3JrX3RyZWUsICZnaXRfZGlyKSAmJgorCSAgICAhc3RyY21wKGdpdF9kaXIsICIvLmdpdCIpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKwordm9pZCBpbml0aWFsaXplX3JlcG9zaXRvcnlfdmVyc2lvbihpbnQgaGFzaF9hbGdvKQoreworCWNoYXIgcmVwb192ZXJzaW9uX3N0cmluZ1sxMF07CisJaW50IHJlcG9fdmVyc2lvbiA9IEdJVF9SRVBPX1ZFUlNJT047CisKKyNpZm5kZWYgRU5BQkxFX1NIQTI1NgorCWlmIChoYXNoX2FsZ28gIT0gR0lUX0hBU0hfU0hBMSkKKwkJZGllKF8oIlRoZSBoYXNoIGFsZ29yaXRobSAlcyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVpbGQuIiksIGhhc2hfYWxnb3NbaGFzaF9hbGdvXS5uYW1lKTsKKyNlbmRpZgorCisJaWYgKGhhc2hfYWxnbyAhPSBHSVRfSEFTSF9TSEExKQorCQlyZXBvX3ZlcnNpb24gPSBHSVRfUkVQT19WRVJTSU9OX1JFQUQ7CisKKwkvKiBUaGlzIGZvcmNlcyBjcmVhdGlvbiBvZiBuZXcgY29uZmlnIGZpbGUgKi8KKwl4c25wcmludGYocmVwb192ZXJzaW9uX3N0cmluZywgc2l6ZW9mKHJlcG9fdmVyc2lvbl9zdHJpbmcpLAorCQkgICIlZCIsIHJlcG9fdmVyc2lvbik7CisJZ2l0X2NvbmZpZ19zZXQoImNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24iLCByZXBvX3ZlcnNpb25fc3RyaW5nKTsKKworCWlmIChoYXNoX2FsZ28gIT0gR0lUX0hBU0hfU0hBMSkKKwkJZ2l0X2NvbmZpZ19zZXQoImV4dGVuc2lvbnMub2JqZWN0Zm9ybWF0IiwKKwkJCSAgICAgICBoYXNoX2FsZ29zW2hhc2hfYWxnb10ubmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX2RlZmF1bHRfZmlsZXMoY29uc3QgY2hhciAqdGVtcGxhdGVfcGF0aCwKKwkJCQljb25zdCBjaGFyICpvcmlnaW5hbF9naXRfZGlyLAorCQkJCWNvbnN0IHN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCBzdGF0IHN0MTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNoYXIgKnBhdGg7CisJY2hhciBqdW5rWzJdOworCWludCByZWluaXQ7CisJaW50IGZpbGVtb2RlOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBKdXN0IGxvb2sgZm9yIGBpbml0LnRlbXBsYXRlZGlyYCAqLworCWluaXRfZGJfdGVtcGxhdGVfZGlyID0gTlVMTDsgLyogcmUtc2V0IGluIGNhc2UgaXQgd2FzIHNldCBiZWZvcmUgKi8KKwlnaXRfY29uZmlnKGdpdF9pbml0X2RiX2NvbmZpZywgTlVMTCk7CisKKwkvKgorCSAqIEZpcnN0IGNvcHkgdGhlIHRlbXBsYXRlcyAtLSB3ZSBtaWdodCBoYXZlIHRoZSBkZWZhdWx0CisJICogY29uZmlnIGZpbGUgdGhlcmUsIGluIHdoaWNoIGNhc2Ugd2Ugd291bGQgd2FudCB0byByZWFkCisJICogZnJvbSBpdCBhZnRlciBpbnN0YWxsaW5nLgorCSAqCisJICogQmVmb3JlIHJlYWRpbmcgdGhhdCBjb25maWcsIHdlIGFsc28gbmVlZCB0byBjbGVhciBvdXQgYW55IGNhY2hlZAorCSAqIHZhbHVlcyAoc2luY2Ugd2UndmUganVzdCBwb3RlbnRpYWxseSBjaGFuZ2VkIHdoYXQncyBhdmFpbGFibGUgb24KKwkgKiBkaXNrKS4KKwkgKi8KKwljb3B5X3RlbXBsYXRlcyh0ZW1wbGF0ZV9wYXRoKTsKKwlnaXRfY29uZmlnX2NsZWFyKCk7CisJcmVzZXRfc2hhcmVkX3JlcG9zaXRvcnkoKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwkvKgorCSAqIFdlIG11c3QgbWFrZSBzdXJlIGNvbW1hbmQtbGluZSBvcHRpb25zIGNvbnRpbnVlIHRvIG92ZXJyaWRlIGFueQorCSAqIHZhbHVlcyB3ZSBtaWdodCBoYXZlIGp1c3QgcmUtcmVhZCBmcm9tIHRoZSBjb25maWcuCisJICovCisJaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IGluaXRfaXNfYmFyZV9yZXBvc2l0b3J5OworCWlmIChpbml0X3NoYXJlZF9yZXBvc2l0b3J5ICE9IC0xKQorCQlzZXRfc2hhcmVkX3JlcG9zaXRvcnkoaW5pdF9zaGFyZWRfcmVwb3NpdG9yeSk7CisKKwkvKgorCSAqIFdlIHdvdWxkIGhhdmUgY3JlYXRlZCB0aGUgYWJvdmUgdW5kZXIgdXNlcidzIHVtYXNrIC0tIHVuZGVyCisJICogc2hhcmVkLXJlcG9zaXRvcnkgc2V0dGluZ3MsIHdlIHdvdWxkIG5lZWQgdG8gZml4IHRoZW0gdXAuCisJICovCisJaWYgKGdldF9zaGFyZWRfcmVwb3NpdG9yeSgpKSB7CisJCWFkanVzdF9zaGFyZWRfcGVybShnZXRfZ2l0X2RpcigpKTsKKwl9CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gY3JlYXRlIGEgInJlZnMiIGRpciBpbiBhbnkgY2FzZSBzbyB0aGF0IG9sZGVyCisJICogdmVyc2lvbnMgb2YgZ2l0IGNhbiB0ZWxsIHRoYXQgdGhpcyBpcyBhIHJlcG9zaXRvcnkuCisJICovCisJc2FmZV9jcmVhdGVfZGlyKGdpdF9wYXRoKCJyZWZzIiksIDEpOworCWFkanVzdF9zaGFyZWRfcGVybShnaXRfcGF0aCgicmVmcyIpKTsKKworCWlmIChyZWZzX2luaXRfZGIoJmVycikpCisJCWRpZSgiZmFpbGVkIHRvIHNldCB1cCByZWZzIGRiOiAlcyIsIGVyci5idWYpOworCisJLyoKKwkgKiBDcmVhdGUgdGhlIGRlZmF1bHQgc3ltbGluayBmcm9tICIuZ2l0L0hFQUQiIHRvIHRoZSAibWFzdGVyIgorCSAqIGJyYW5jaCwgaWYgaXQgZG9lcyBub3QgZXhpc3QgeWV0LgorCSAqLworCXBhdGggPSBnaXRfcGF0aF9idWYoJmJ1ZiwgIkhFQUQiKTsKKwlyZWluaXQgPSAoIWFjY2VzcyhwYXRoLCBSX09LKQorCQkgIHx8IHJlYWRsaW5rKHBhdGgsIGp1bmssIHNpemVvZihqdW5rKS0xKSAhPSAtMSk7CisJaWYgKCFyZWluaXQpIHsKKwkJaWYgKGNyZWF0ZV9zeW1yZWYoIkhFQUQiLCAicmVmcy9oZWFkcy9tYXN0ZXIiLCBOVUxMKSA8IDApCisJCQlleGl0KDEpOworCX0KKworCWluaXRpYWxpemVfcmVwb3NpdG9yeV92ZXJzaW9uKGZtdC0+aGFzaF9hbGdvKTsKKworCS8qIENoZWNrIGZpbGVtb2RlIHRydXN0YWJpbGl0eSAqLworCXBhdGggPSBnaXRfcGF0aF9idWYoJmJ1ZiwgImNvbmZpZyIpOworCWZpbGVtb2RlID0gVEVTVF9GSUxFTU9ERTsKKwlpZiAoVEVTVF9GSUxFTU9ERSAmJiAhbHN0YXQocGF0aCwgJnN0MSkpIHsKKwkJc3RydWN0IHN0YXQgc3QyOworCQlmaWxlbW9kZSA9ICghY2htb2QocGF0aCwgc3QxLnN0X21vZGUgXiBTX0lYVVNSKSAmJgorCQkJCSFsc3RhdChwYXRoLCAmc3QyKSAmJgorCQkJCXN0MS5zdF9tb2RlICE9IHN0Mi5zdF9tb2RlICYmCisJCQkJIWNobW9kKHBhdGgsIHN0MS5zdF9tb2RlKSk7CisJCWlmIChmaWxlbW9kZSAmJiAhcmVpbml0ICYmIChzdDEuc3RfbW9kZSAmIFNfSVhVU1IpKQorCQkJZmlsZW1vZGUgPSAwOworCX0KKwlnaXRfY29uZmlnX3NldCgiY29yZS5maWxlbW9kZSIsIGZpbGVtb2RlID8gInRydWUiIDogImZhbHNlIik7CisKKwlpZiAoaXNfYmFyZV9yZXBvc2l0b3J5KCkpCisJCWdpdF9jb25maWdfc2V0KCJjb3JlLmJhcmUiLCAidHJ1ZSIpOworCWVsc2UgeworCQljb25zdCBjaGFyICp3b3JrX3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpOworCQlnaXRfY29uZmlnX3NldCgiY29yZS5iYXJlIiwgImZhbHNlIik7CisJCS8qIGFsbG93IHRlbXBsYXRlIGNvbmZpZyBmaWxlIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0ICovCisJCWlmIChsb2dfYWxsX3JlZl91cGRhdGVzID09IExPR19SRUZTX1VOU0VUKQorCQkJZ2l0X2NvbmZpZ19zZXQoImNvcmUubG9nYWxscmVmdXBkYXRlcyIsICJ0cnVlIik7CisJCWlmIChuZWVkc193b3JrX3RyZWVfY29uZmlnKG9yaWdpbmFsX2dpdF9kaXIsIHdvcmtfdHJlZSkpCisJCQlnaXRfY29uZmlnX3NldCgiY29yZS53b3JrdHJlZSIsIHdvcmtfdHJlZSk7CisJfQorCisJaWYgKCFyZWluaXQpIHsKKwkJLyogQ2hlY2sgaWYgc3ltbGluayBpcyBzdXBwb3J0ZWQgaW4gdGhlIHdvcmsgdHJlZSAqLworCQlwYXRoID0gZ2l0X3BhdGhfYnVmKCZidWYsICJ0WFhYWFhYIik7CisJCWlmICghY2xvc2UoeG1rc3RlbXAocGF0aCkpICYmCisJCSAgICAhdW5saW5rKHBhdGgpICYmCisJCSAgICAhc3ltbGluaygidGVzdGluZyIsIHBhdGgpICYmCisJCSAgICAhbHN0YXQocGF0aCwgJnN0MSkgJiYKKwkJICAgIFNfSVNMTksoc3QxLnN0X21vZGUpKQorCQkJdW5saW5rKHBhdGgpOyAvKiBnb29kICovCisJCWVsc2UKKwkJCWdpdF9jb25maWdfc2V0KCJjb3JlLnN5bWxpbmtzIiwgImZhbHNlIik7CisKKwkJLyogQ2hlY2sgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgY2FzZS1pbnNlbnNpdGl2ZSAqLworCQlwYXRoID0gZ2l0X3BhdGhfYnVmKCZidWYsICJDb05mSWciKTsKKwkJaWYgKCFhY2Nlc3MocGF0aCwgRl9PSykpCisJCQlnaXRfY29uZmlnX3NldCgiY29yZS5pZ25vcmVjYXNlIiwgInRydWUiKTsKKwkJcHJvYmVfdXRmOF9wYXRobmFtZV9jb21wb3NpdGlvbigpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiByZWluaXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9vYmplY3RfZGlyZWN0b3J5KHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IGJhc2VsZW47CisKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwliYXNlbGVuID0gcGF0aC5sZW47CisKKwlzYWZlX2NyZWF0ZV9kaXIocGF0aC5idWYsIDEpOworCisJc3RyYnVmX3NldGxlbigmcGF0aCwgYmFzZWxlbik7CisJc3RyYnVmX2FkZHN0cigmcGF0aCwgIi9wYWNrIik7CisJc2FmZV9jcmVhdGVfZGlyKHBhdGguYnVmLCAxKTsKKworCXN0cmJ1Zl9zZXRsZW4oJnBhdGgsIGJhc2VsZW4pOworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsICIvaW5mbyIpOworCXNhZmVfY3JlYXRlX2RpcihwYXRoLmJ1ZiwgMSk7CisKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcGFyYXRlX2dpdF9kaXIoY29uc3QgY2hhciAqZ2l0X2RpciwgY29uc3QgY2hhciAqZ2l0X2xpbmspCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoIXN0YXQoZ2l0X2xpbmssICZzdCkpIHsKKwkJY29uc3QgY2hhciAqc3JjOworCisJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQorCQkJc3JjID0gcmVhZF9naXRmaWxlKGdpdF9saW5rKTsKKwkJZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCXNyYyA9IGdpdF9saW5rOworCQllbHNlCisJCQlkaWUoXygidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiKSwgKGludClzdC5zdF9tb2RlKTsKKworCQlpZiAocmVuYW1lKHNyYywgZ2l0X2RpcikpCisJCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiKSwgc3JjLCBnaXRfZGlyKTsKKwl9CisKKwl3cml0ZV9maWxlKGdpdF9saW5rLCAiZ2l0ZGlyOiAlcyIsIGdpdF9kaXIpOworfQorCitzdGF0aWMgdm9pZCB2YWxpZGF0ZV9oYXNoX2FsZ29yaXRobShzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgKnJlcG9fZm10LCBpbnQgaGFzaCkKK3sKKwljb25zdCBjaGFyICplbnYgPSBnZXRlbnYoR0lUX0RFRkFVTFRfSEFTSF9FTlZJUk9OTUVOVCk7CisJLyoKKwkgKiBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gaW5pdGlhbGl6ZWQgcmVwbywgZG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8KKwkgKiBzcGVjaWZ5IGEgZGlmZmVyZW50IGFsZ29yaXRobSwgYXMgdGhhdCBjb3VsZCBjYXVzZSBjb3JydXB0aW9uLgorCSAqIE90aGVyd2lzZSwgaWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBvbmUgb24gdGhlIGNvbW1hbmQgbGluZSwgdXNlIGl0LgorCSAqLworCWlmIChyZXBvX2ZtdC0+dmVyc2lvbiA+PSAwICYmIGhhc2ggIT0gR0lUX0hBU0hfVU5LTk9XTiAmJiBoYXNoICE9IHJlcG9fZm10LT5oYXNoX2FsZ28pCisJCWRpZShfKCJhdHRlbXB0IHRvIHJlaW5pdGlhbGl6ZSByZXBvc2l0b3J5IHdpdGggZGlmZmVyZW50IGhhc2giKSk7CisJZWxzZSBpZiAoaGFzaCAhPSBHSVRfSEFTSF9VTktOT1dOKQorCQlyZXBvX2ZtdC0+aGFzaF9hbGdvID0gaGFzaDsKKwllbHNlIGlmIChlbnYpIHsKKwkJaW50IGVudl9hbGdvID0gaGFzaF9hbGdvX2J5X25hbWUoZW52KTsKKwkJaWYgKGVudl9hbGdvID09IEdJVF9IQVNIX1VOS05PV04pCisJCQlkaWUoXygidW5rbm93biBoYXNoIGFsZ29yaXRobSAnJXMnIiksIGVudik7CisJCXJlcG9fZm10LT5oYXNoX2FsZ28gPSBlbnZfYWxnbzsKKwl9Cit9CisKK2ludCBpbml0X2RiKGNvbnN0IGNoYXIgKmdpdF9kaXIsIGNvbnN0IGNoYXIgKnJlYWxfZ2l0X2RpciwKKwkgICAgY29uc3QgY2hhciAqdGVtcGxhdGVfZGlyLCBpbnQgaGFzaCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWludCByZWluaXQ7CisJaW50IGV4aXN0X29rID0gZmxhZ3MgJiBJTklUX0RCX0VYSVNUX09LOworCWNoYXIgKm9yaWdpbmFsX2dpdF9kaXIgPSByZWFsX3BhdGhkdXAoZ2l0X2RpciwgMSk7CisJc3RydWN0IHJlcG9zaXRvcnlfZm9ybWF0IHJlcG9fZm10ID0gUkVQT1NJVE9SWV9GT1JNQVRfSU5JVDsKKworCWlmIChyZWFsX2dpdF9kaXIpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisKKwkJaWYgKCFleGlzdF9vayAmJiAhc3RhdChnaXRfZGlyLCAmc3QpKQorCQkJZGllKF8oIiVzIGFscmVhZHkgZXhpc3RzIiksIGdpdF9kaXIpOworCisJCWlmICghZXhpc3Rfb2sgJiYgIXN0YXQocmVhbF9naXRfZGlyLCAmc3QpKQorCQkJZGllKF8oIiVzIGFscmVhZHkgZXhpc3RzIiksIHJlYWxfZ2l0X2Rpcik7CisKKwkJc2V0X2dpdF9kaXIocmVhbF9naXRfZGlyLCAxKTsKKwkJZ2l0X2RpciA9IGdldF9naXRfZGlyKCk7CisJCXNlcGFyYXRlX2dpdF9kaXIoZ2l0X2Rpciwgb3JpZ2luYWxfZ2l0X2Rpcik7CisJfQorCWVsc2UgeworCQlzZXRfZ2l0X2RpcihnaXRfZGlyLCAxKTsKKwkJZ2l0X2RpciA9IGdldF9naXRfZGlyKCk7CisJfQorCXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5ID0gMTsKKworCS8qIEp1c3QgbG9vayBmb3IgYGNvcmUuaGlkZWRvdGZpbGVzYCAqLworCWdpdF9jb25maWcoZ2l0X2luaXRfZGJfY29uZmlnLCBOVUxMKTsKKworCXNhZmVfY3JlYXRlX2RpcihnaXRfZGlyLCAwKTsKKworCWluaXRfaXNfYmFyZV9yZXBvc2l0b3J5ID0gaXNfYmFyZV9yZXBvc2l0b3J5KCk7CisKKwkvKiBDaGVjayB0byBzZWUgaWYgdGhlIHJlcG9zaXRvcnkgdmVyc2lvbiBpcyByaWdodC4KKwkgKiBOb3RlIHRoYXQgYSBuZXdseSBjcmVhdGVkIHJlcG9zaXRvcnkgZG9lcyBub3QgaGF2ZQorCSAqIGNvbmZpZyBmaWxlLCBzbyB0aGlzIHdpbGwgbm90IGZhaWwuICBXaGF0IHdlIGFyZSBjYXRjaGluZworCSAqIGlzIGFuIGF0dGVtcHQgdG8gcmVpbml0aWFsaXplIG5ldyByZXBvc2l0b3J5IHdpdGggYW4gb2xkIHRvb2wuCisJICovCisJY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXQoJnJlcG9fZm10KTsKKworCXZhbGlkYXRlX2hhc2hfYWxnb3JpdGhtKCZyZXBvX2ZtdCwgaGFzaCk7CisKKwlyZWluaXQgPSBjcmVhdGVfZGVmYXVsdF9maWxlcyh0ZW1wbGF0ZV9kaXIsIG9yaWdpbmFsX2dpdF9kaXIsICZyZXBvX2ZtdCk7CisKKwljcmVhdGVfb2JqZWN0X2RpcmVjdG9yeSgpOworCisJaWYgKGdldF9zaGFyZWRfcmVwb3NpdG9yeSgpKSB7CisJCWNoYXIgYnVmWzEwXTsKKwkJLyogV2UgZG8gbm90IHNwZWxsICJncm91cCIgYW5kIHN1Y2gsIHNvIHRoYXQKKwkJICogdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHJlYWQgYnkgb2xkZXIgdmVyc2lvbgorCQkgKiBvZiBnaXQuIE5vdGUsIHdlIHVzZSBvY3RhbCBudW1iZXJzIGZvciBuZXcgc2hhcmUgbW9kZXMsCisJCSAqIGFuZCBjb21wYXRpYmlsaXR5IHZhbHVlcyBmb3IgUEVSTV9HUk9VUCBhbmQKKwkJICogUEVSTV9FVkVSWUJPRFkuCisJCSAqLworCQlpZiAoZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCkgPCAwKQorCQkJLyogZm9yY2UgdG8gdGhlIG1vZGUgdmFsdWUgKi8KKwkJCXhzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiMCVvIiwgLWdldF9zaGFyZWRfcmVwb3NpdG9yeSgpKTsKKwkJZWxzZSBpZiAoZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCkgPT0gUEVSTV9HUk9VUCkKKwkJCXhzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBPTERfUEVSTV9HUk9VUCk7CisJCWVsc2UgaWYgKGdldF9zaGFyZWRfcmVwb3NpdG9yeSgpID09IFBFUk1fRVZFUllCT0RZKQorCQkJeHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIE9MRF9QRVJNX0VWRVJZQk9EWSk7CisJCWVsc2UKKwkJCUJVRygiaW52YWxpZCB2YWx1ZSBmb3Igc2hhcmVkX3JlcG9zaXRvcnkiKTsKKwkJZ2l0X2NvbmZpZ19zZXQoImNvcmUuc2hhcmVkcmVwb3NpdG9yeSIsIGJ1Zik7CisJCWdpdF9jb25maWdfc2V0KCJyZWNlaXZlLmRlbnlOb25GYXN0Zm9yd2FyZHMiLCAidHJ1ZSIpOworCX0KKworCWlmICghKGZsYWdzICYgSU5JVF9EQl9RVUlFVCkpIHsKKwkJaW50IGxlbiA9IHN0cmxlbihnaXRfZGlyKTsKKworCQlpZiAocmVpbml0KQorCQkJcHJpbnRmKGdldF9zaGFyZWRfcmVwb3NpdG9yeSgpCisJCQkgICAgICAgPyBfKCJSZWluaXRpYWxpemVkIGV4aXN0aW5nIHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iKQorCQkJICAgICAgIDogXygiUmVpbml0aWFsaXplZCBleGlzdGluZyBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iKSwKKwkJCSAgICAgICBnaXRfZGlyLCBsZW4gJiYgZ2l0X2RpcltsZW4tMV0gIT0gJy8nID8gIi8iIDogIiIpOworCQllbHNlCisJCQlwcmludGYoZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCkKKwkJCSAgICAgICA/IF8oIkluaXRpYWxpemVkIGVtcHR5IHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iKQorCQkJICAgICAgIDogXygiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIiksCisJCQkgICAgICAgZ2l0X2RpciwgbGVuICYmIGdpdF9kaXJbbGVuLTFdICE9ICcvJyA/ICIvIiA6ICIiKTsKKwl9CisKKwlmcmVlKG9yaWdpbmFsX2dpdF9kaXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGd1ZXNzX3JlcG9zaXRvcnlfdHlwZShjb25zdCBjaGFyICpnaXRfZGlyKQoreworCWNvbnN0IGNoYXIgKnNsYXNoOworCWNoYXIgKmN3ZDsKKwlpbnQgY3dkX2lzX2dpdF9kaXI7CisKKwkvKgorCSAqICJHSVRfRElSPS4gZ2l0IGluaXQiIGlzIGFsd2F5cyBiYXJlLgorCSAqICJHSVRfRElSPWBwd2RgIGdpdCBpbml0IiB0b28uCisJICovCisJaWYgKCFzdHJjbXAoIi4iLCBnaXRfZGlyKSkKKwkJcmV0dXJuIDE7CisJY3dkID0geGdldGN3ZCgpOworCWN3ZF9pc19naXRfZGlyID0gIXN0cmNtcChnaXRfZGlyLCBjd2QpOworCWZyZWUoY3dkKTsKKwlpZiAoY3dkX2lzX2dpdF9kaXIpCisJCXJldHVybiAxOworCS8qCisJICogIkdJVF9ESVI9LmdpdCBvciBHSVRfRElSPXNvbWV0aGluZy8uZ2l0IGlzIHVzdWFsbHkgbm90LgorCSAqLworCWlmICghc3RyY21wKGdpdF9kaXIsICIuZ2l0IikpCisJCXJldHVybiAwOworCXNsYXNoID0gc3RycmNocihnaXRfZGlyLCAnLycpOworCWlmIChzbGFzaCAmJiAhc3RyY21wKHNsYXNoLCAiLy5naXQiKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIE90aGVyd2lzZSBpdCBpcyBvZnRlbiBiYXJlLiAgQXQgdGhpcyBwb2ludAorCSAqIHdlIGFyZSBqdXN0IGd1ZXNzaW5nLgorCSAqLworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNoYXJlZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwkqKChpbnQgKikgb3B0LT52YWx1ZSkgPSAoYXJnKSA/IGdpdF9jb25maWdfcGVybSgiYXJnIiwgYXJnKSA6IFBFUk1fR1JPVVA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBpbml0X2RiX3VzYWdlW10gPSB7CisJTl8oImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZS1kaXJlY3Rvcnk+XSBbLS1zaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPGRpcmVjdG9yeT5dIiksCisJTlVMTAorfTsKKworLyoKKyAqIElmIHlvdSB3YW50IHRvLCB5b3UgY2FuIHNoYXJlIHRoZSBEQiBhcmVhIHdpdGggYW55IG51bWJlciBvZiBicmFuY2hlcy4KKyAqIFRoYXQgaGFzIGFkdmFudGFnZXM6IHlvdSBjYW4gc2F2ZSBzcGFjZSBieSBzaGFyaW5nIGFsbCB0aGUgU0hBMSBvYmplY3RzLgorICogT24gdGhlIG90aGVyIGhhbmQsIGl0IG1pZ2h0IGp1c3QgbWFrZSBsb29rdXAgc2xvd2VyIGFuZCBtZXNzaWVyLiBZb3UKKyAqIGJlIHRoZSBqdWRnZS4gIFRoZSBkZWZhdWx0IGNhc2UgaXMgdG8gaGF2ZSBvbmUgREIgcGVyIG1hbmFnZWQgZGlyZWN0b3J5LgorICovCitpbnQgY21kX2luaXRfZGIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqZ2l0X2RpcjsKKwljb25zdCBjaGFyICpyZWFsX2dpdF9kaXIgPSBOVUxMOworCWNvbnN0IGNoYXIgKndvcmtfdHJlZTsKKwljb25zdCBjaGFyICp0ZW1wbGF0ZV9kaXIgPSBOVUxMOworCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CisJY29uc3QgY2hhciAqb2JqZWN0X2Zvcm1hdCA9IE5VTEw7CisJaW50IGhhc2hfYWxnbyA9IEdJVF9IQVNIX1VOS05PV047CisJY29uc3Qgc3RydWN0IG9wdGlvbiBpbml0X2RiX29wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAidGVtcGxhdGUiLCAmdGVtcGxhdGVfZGlyLCBOXygidGVtcGxhdGUtZGlyZWN0b3J5IiksCisJCQkJTl8oImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiKSksCisJCU9QVF9TRVRfSU5UKDAsICJiYXJlIiwgJmlzX2JhcmVfcmVwb3NpdG9yeV9jZmcsCisJCQkJTl8oImNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeSIpLCAxKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJzaGFyZWQiLCAmaW5pdF9zaGFyZWRfcmVwb3NpdG9yeSwKKwkJCU5fKCJwZXJtaXNzaW9ucyIpLAorCQkJTl8oInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIpLAorCQkJUEFSU0VfT1BUX09QVEFSRyB8IFBBUlNFX09QVF9OT05FRywgc2hhcmVkX2NhbGxiYWNrLCAwfSwKKwkJT1BUX0JJVCgncScsICJxdWlldCIsICZmbGFncywgTl8oImJlIHF1aWV0IiksIElOSVRfREJfUVVJRVQpLAorCQlPUFRfU1RSSU5HKDAsICJzZXBhcmF0ZS1naXQtZGlyIiwgJnJlYWxfZ2l0X2RpciwgTl8oImdpdGRpciIpLAorCQkJICAgTl8oInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiKSksCisJCU9QVF9TVFJJTkcoMCwgIm9iamVjdC1mb3JtYXQiLCAmb2JqZWN0X2Zvcm1hdCwgTl8oImhhc2giKSwKKwkJCSAgIE5fKCJzcGVjaWZ5IHRoZSBoYXNoIGFsZ29yaXRobSB0byB1c2UiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGluaXRfZGJfb3B0aW9ucywgaW5pdF9kYl91c2FnZSwgMCk7CisKKwlpZiAocmVhbF9naXRfZGlyICYmICFpc19hYnNvbHV0ZV9wYXRoKHJlYWxfZ2l0X2RpcikpCisJCXJlYWxfZ2l0X2RpciA9IHJlYWxfcGF0aGR1cChyZWFsX2dpdF9kaXIsIDEpOworCisJaWYgKHRlbXBsYXRlX2RpciAmJiAqdGVtcGxhdGVfZGlyICYmICFpc19hYnNvbHV0ZV9wYXRoKHRlbXBsYXRlX2RpcikpCisJCXRlbXBsYXRlX2RpciA9IGFic29sdXRlX3BhdGhkdXAodGVtcGxhdGVfZGlyKTsKKworCWlmIChhcmdjID09IDEpIHsKKwkJaW50IG1rZGlyX3RyaWVkID0gMDsKKwlyZXRyeToKKwkJaWYgKGNoZGlyKGFyZ3ZbMF0pIDwgMCkgeworCQkJaWYgKCFta2Rpcl90cmllZCkgeworCQkJCWludCBzYXZlZDsKKwkJCQkvKgorCQkJCSAqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZW4ndCByZWFkIGFueSBjb25maWd1cmF0aW9uLAorCQkJCSAqIGFuZCB3ZSBrbm93IHNoYXJlZF9yZXBvc2l0b3J5IHNob3VsZCBhbHdheXMgYmUgMDsKKwkJCQkgKiBidXQganVzdCBpbiBjYXNlIHdlIHBsYXkgc2FmZS4KKwkJCQkgKi8KKwkJCQlzYXZlZCA9IGdldF9zaGFyZWRfcmVwb3NpdG9yeSgpOworCQkJCXNldF9zaGFyZWRfcmVwb3NpdG9yeSgwKTsKKwkJCQlzd2l0Y2ggKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoYXJndlswXSkpIHsKKwkJCQljYXNlIFNDTERfT0s6CisJCQkJY2FzZSBTQ0xEX1BFUk1TOgorCQkJCQlicmVhazsKKwkJCQljYXNlIFNDTERfRVhJU1RTOgorCQkJCQllcnJubyA9IEVFWElTVDsKKwkJCQkJLyogZmFsbHRocnUgKi8KKwkJCQlkZWZhdWx0OgorCQkJCQlkaWVfZXJybm8oXygiY2Fubm90IG1rZGlyICVzIiksIGFyZ3ZbMF0pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc2V0X3NoYXJlZF9yZXBvc2l0b3J5KHNhdmVkKTsKKwkJCQlpZiAobWtkaXIoYXJndlswXSwgMDc3NykgPCAwKQorCQkJCQlkaWVfZXJybm8oXygiY2Fubm90IG1rZGlyICVzIiksIGFyZ3ZbMF0pOworCQkJCW1rZGlyX3RyaWVkID0gMTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfQorCQkJZGllX2Vycm5vKF8oImNhbm5vdCBjaGRpciB0byAlcyIpLCBhcmd2WzBdKTsKKwkJfQorCX0gZWxzZSBpZiAoMCA8IGFyZ2MpIHsKKwkJdXNhZ2UoaW5pdF9kYl91c2FnZVswXSk7CisJfQorCWlmIChpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID09IDEpIHsKKwkJY2hhciAqY3dkID0geGdldGN3ZCgpOworCQlzZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCwgY3dkLCBhcmdjID4gMCk7CisJCWZyZWUoY3dkKTsKKwl9CisKKwlpZiAob2JqZWN0X2Zvcm1hdCkgeworCQloYXNoX2FsZ28gPSBoYXNoX2FsZ29fYnlfbmFtZShvYmplY3RfZm9ybWF0KTsKKwkJaWYgKGhhc2hfYWxnbyA9PSBHSVRfSEFTSF9VTktOT1dOKQorCQkJZGllKF8oInVua25vd24gaGFzaCBhbGdvcml0aG0gJyVzJyIpLCBvYmplY3RfZm9ybWF0KTsKKwl9CisKKwlpZiAoaW5pdF9zaGFyZWRfcmVwb3NpdG9yeSAhPSAtMSkKKwkJc2V0X3NoYXJlZF9yZXBvc2l0b3J5KGluaXRfc2hhcmVkX3JlcG9zaXRvcnkpOworCisJLyoKKwkgKiBHSVRfV09SS19UUkVFIG1ha2VzIHNlbnNlIG9ubHkgaW4gY29uanVuY3Rpb24gd2l0aCBHSVRfRElSCisJICogd2l0aG91dCAtLWJhcmUuICBDYXRjaCB0aGUgZXJyb3IgZWFybHkuCisJICovCisJZ2l0X2RpciA9IHhzdHJkdXBfb3JfbnVsbChnZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCkpOworCXdvcmtfdHJlZSA9IHhzdHJkdXBfb3JfbnVsbChnZXRlbnYoR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCkpOworCWlmICgoIWdpdF9kaXIgfHwgaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9PSAxKSAmJiB3b3JrX3RyZWUpCisJCWRpZShfKCIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgIgorCQkJICAic3BlY2lmeWluZyAlcyAob3IgLS1naXQtZGlyPTxkaXJlY3Rvcnk+KSIpLAorCQkgICAgR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCwKKwkJICAgIEdJVF9ESVJfRU5WSVJPTk1FTlQpOworCisJLyoKKwkgKiBTZXQgdXAgdGhlIGRlZmF1bHQgLmdpdCBkaXJlY3RvcnkgY29udGVudHMKKwkgKi8KKwlpZiAoIWdpdF9kaXIpCisJCWdpdF9kaXIgPSBERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQ7CisKKwlpZiAoaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA8IDApCisJCWlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSBndWVzc19yZXBvc2l0b3J5X3R5cGUoZ2l0X2Rpcik7CisKKwlpZiAoIWlzX2JhcmVfcmVwb3NpdG9yeV9jZmcpIHsKKwkJY29uc3QgY2hhciAqZ2l0X2Rpcl9wYXJlbnQgPSBzdHJyY2hyKGdpdF9kaXIsICcvJyk7CisJCWlmIChnaXRfZGlyX3BhcmVudCkgeworCQkJY2hhciAqcmVsID0geHN0cm5kdXAoZ2l0X2RpciwgZ2l0X2Rpcl9wYXJlbnQgLSBnaXRfZGlyKTsKKwkJCWdpdF93b3JrX3RyZWVfY2ZnID0gcmVhbF9wYXRoZHVwKHJlbCwgMSk7CisJCQlmcmVlKHJlbCk7CisJCX0KKwkJaWYgKCFnaXRfd29ya190cmVlX2NmZykKKwkJCWdpdF93b3JrX3RyZWVfY2ZnID0geGdldGN3ZCgpOworCQlpZiAod29ya190cmVlKQorCQkJc2V0X2dpdF93b3JrX3RyZWUod29ya190cmVlKTsKKwkJZWxzZQorCQkJc2V0X2dpdF93b3JrX3RyZWUoZ2l0X3dvcmtfdHJlZV9jZmcpOworCQlpZiAoYWNjZXNzKGdldF9naXRfd29ya190cmVlKCksIFhfT0spKQorCQkJZGllX2Vycm5vIChfKCJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIiksCisJCQkJICAgZ2V0X2dpdF93b3JrX3RyZWUoKSk7CisJfQorCWVsc2UgeworCQlpZiAod29ya190cmVlKQorCQkJc2V0X2dpdF93b3JrX3RyZWUod29ya190cmVlKTsKKwl9CisKKwlVTkxFQUsocmVhbF9naXRfZGlyKTsKKwlVTkxFQUsoZ2l0X2Rpcik7CisJVU5MRUFLKHdvcmtfdHJlZSk7CisKKwlmbGFncyB8PSBJTklUX0RCX0VYSVNUX09LOworCXJldHVybiBpbml0X2RiKGdpdF9kaXIsIHJlYWxfZ2l0X2RpciwgdGVtcGxhdGVfZGlyLCBoYXNoX2FsZ28sIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmMgYi9idWlsdGluL2ludGVycHJldC10cmFpbGVycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NzQ4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2ludGVycHJldC10cmFpbGVycy5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQnVpbHRpbiAiZ2l0IGludGVycHJldC10cmFpbGVycyIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMsIDIwMTQgQ2hyaXN0aWFuIENvdWRlciA8Y2hyaXNjb29sQHR1eGZhbWlseS5vcmc+CisgKgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJ0cmFpbGVyLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X2ludGVycHJldF90cmFpbGVyc191c2FnZVtdID0geworCU5fKCJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciA8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBlbnVtIHRyYWlsZXJfd2hlcmUgd2hlcmU7CitzdGF0aWMgZW51bSB0cmFpbGVyX2lmX2V4aXN0cyBpZl9leGlzdHM7CitzdGF0aWMgZW51bSB0cmFpbGVyX2lmX21pc3NpbmcgaWZfbWlzc2luZzsKKworc3RhdGljIGludCBvcHRpb25fcGFyc2Vfd2hlcmUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcmV0dXJuIHRyYWlsZXJfc2V0X3doZXJlKCZ3aGVyZSwgYXJnKTsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfaWZfZXhpc3RzKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXJldHVybiB0cmFpbGVyX3NldF9pZl9leGlzdHMoJmlmX2V4aXN0cywgYXJnKTsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfaWZfbWlzc2luZyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcmV0dXJuIHRyYWlsZXJfc2V0X2lmX21pc3NpbmcoJmlmX21pc3NpbmcsIGFyZyk7Cit9CisKK3N0YXRpYyB2b2lkIG5ld190cmFpbGVyc19jbGVhcihzdHJ1Y3QgbGlzdF9oZWFkICp0cmFpbGVycykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7CisJc3RydWN0IG5ld190cmFpbGVyX2l0ZW0gKml0ZW07CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsIHRyYWlsZXJzKSB7CisJCWl0ZW0gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG5ld190cmFpbGVyX2l0ZW0sIGxpc3QpOworCQlsaXN0X2RlbChwb3MpOworCQlmcmVlKGl0ZW0pOworCX0KK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfdHJhaWxlcihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqdHJhaWxlcnMgPSBvcHQtPnZhbHVlOworCXN0cnVjdCBuZXdfdHJhaWxlcl9pdGVtICppdGVtOworCisJaWYgKHVuc2V0KSB7CisJCW5ld190cmFpbGVyc19jbGVhcih0cmFpbGVycyk7CisJCXJldHVybiAwOworCX0KKworCWlmICghYXJnKQorCQlyZXR1cm4gLTE7CisKKwlpdGVtID0geG1hbGxvYyhzaXplb2YoKml0ZW0pKTsKKwlpdGVtLT50ZXh0ID0gYXJnOworCWl0ZW0tPndoZXJlID0gd2hlcmU7CisJaXRlbS0+aWZfZXhpc3RzID0gaWZfZXhpc3RzOworCWl0ZW0tPmlmX21pc3NpbmcgPSBpZl9taXNzaW5nOworCWxpc3RfYWRkX3RhaWwoJml0ZW0tPmxpc3QsIHRyYWlsZXJzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9vcHRfcGFyc2UoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICBpbnQgdW5zZXQpCit7CisJc3RydWN0IHByb2Nlc3NfdHJhaWxlcl9vcHRpb25zICp2ID0gb3B0LT52YWx1ZTsKKwl2LT5vbmx5X3RyYWlsZXJzID0gMTsKKwl2LT5vbmx5X2lucHV0ID0gMTsKKwl2LT51bmZvbGQgPSAxOworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCXJldHVybiAwOworfQorCitpbnQgY21kX2ludGVycHJldF90cmFpbGVycyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc190cmFpbGVyX29wdGlvbnMgb3B0cyA9IFBST0NFU1NfVFJBSUxFUl9PUFRJT05TX0lOSVQ7CisJTElTVF9IRUFEKHRyYWlsZXJzKTsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgwLCAiaW4tcGxhY2UiLCAmb3B0cy5pbl9wbGFjZSwgTl8oImVkaXQgZmlsZXMgaW4gcGxhY2UiKSksCisJCU9QVF9CT09MKDAsICJ0cmltLWVtcHR5IiwgJm9wdHMudHJpbV9lbXB0eSwgTl8oInRyaW0gZW1wdHkgdHJhaWxlcnMiKSksCisKKwkJT1BUX0NBTExCQUNLKDAsICJ3aGVyZSIsIE5VTEwsIE5fKCJhY3Rpb24iKSwKKwkJCSAgICAgTl8oIndoZXJlIHRvIHBsYWNlIHRoZSBuZXcgdHJhaWxlciIpLCBvcHRpb25fcGFyc2Vfd2hlcmUpLAorCQlPUFRfQ0FMTEJBQ0soMCwgImlmLWV4aXN0cyIsIE5VTEwsIE5fKCJhY3Rpb24iKSwKKwkJCSAgICAgTl8oImFjdGlvbiBpZiB0cmFpbGVyIGFscmVhZHkgZXhpc3RzIiksIG9wdGlvbl9wYXJzZV9pZl9leGlzdHMpLAorCQlPUFRfQ0FMTEJBQ0soMCwgImlmLW1pc3NpbmciLCBOVUxMLCBOXygiYWN0aW9uIiksCisJCQkgICAgIE5fKCJhY3Rpb24gaWYgdHJhaWxlciBpcyBtaXNzaW5nIiksIG9wdGlvbl9wYXJzZV9pZl9taXNzaW5nKSwKKworCQlPUFRfQk9PTCgwLCAib25seS10cmFpbGVycyIsICZvcHRzLm9ubHlfdHJhaWxlcnMsIE5fKCJvdXRwdXQgb25seSB0aGUgdHJhaWxlcnMiKSksCisJCU9QVF9CT09MKDAsICJvbmx5LWlucHV0IiwgJm9wdHMub25seV9pbnB1dCwgTl8oImRvIG5vdCBhcHBseSBjb25maWcgcnVsZXMiKSksCisJCU9QVF9CT09MKDAsICJ1bmZvbGQiLCAmb3B0cy51bmZvbGQsIE5fKCJqb2luIHdoaXRlc3BhY2UtY29udGludWVkIHZhbHVlcyIpKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgInBhcnNlIiwgJm9wdHMsIE5VTEwsIE5fKCJzZXQgcGFyc2luZyBvcHRpb25zIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIHBhcnNlX29wdF9wYXJzZSksCisJCU9QVF9CT09MKDAsICJuby1kaXZpZGVyIiwgJm9wdHMubm9fZGl2aWRlciwgTl8oImRvIG5vdCB0cmVhdCAtLS0gc3BlY2lhbGx5IikpLAorCQlPUFRfQ0FMTEJBQ0soMCwgInRyYWlsZXIiLCAmdHJhaWxlcnMsIE5fKCJ0cmFpbGVyIiksCisJCQkJTl8oInRyYWlsZXIocykgdG8gYWRkIiksIG9wdGlvbl9wYXJzZV90cmFpbGVyKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgZ2l0X2ludGVycHJldF90cmFpbGVyc191c2FnZSwgMCk7CisKKwlpZiAob3B0cy5vbmx5X2lucHV0ICYmICFsaXN0X2VtcHR5KCZ0cmFpbGVycykpCisJCXVzYWdlX21zZ19vcHQoCisJCQlfKCItLXRyYWlsZXIgd2l0aCAtLW9ubHktaW5wdXQgZG9lcyBub3QgbWFrZSBzZW5zZSIpLAorCQkJZ2l0X2ludGVycHJldF90cmFpbGVyc191c2FnZSwKKwkJCW9wdGlvbnMpOworCisJaWYgKGFyZ2MpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCQlwcm9jZXNzX3RyYWlsZXJzKGFyZ3ZbaV0sICZvcHRzLCAmdHJhaWxlcnMpOworCX0gZWxzZSB7CisJCWlmIChvcHRzLmluX3BsYWNlKQorCQkJZGllKF8oIm5vIGlucHV0IGZpbGUgZ2l2ZW4gZm9yIGluLXBsYWNlIGVkaXRpbmciKSk7CisJCXByb2Nlc3NfdHJhaWxlcnMoTlVMTCwgJm9wdHMsICZ0cmFpbGVycyk7CisJfQorCisJbmV3X3RyYWlsZXJzX2NsZWFyKCZ0cmFpbGVycyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbG9nLmMgYi9idWlsdGluL2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMDRkNWMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2xvZy5jCkBAIC0wLDAgKzEsMjI1MiBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCBsb2ciIGFuZCByZWxhdGVkIGNvbW1hbmRzIChzaG93LCB3aGF0Y2hhbmdlZCkKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDYgTGludXMgVG9ydmFsZHMKKyAqCQkgMjAwNiBKdW5pbyBIYW1hbm8KKyAqLworI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJyZWZsb2ctd2Fsay5oIgorI2luY2x1ZGUgInBhdGNoLWlkcy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic2hvcnRsb2cuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJsaW5lLWxvZy5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgInN0cmVhbWluZy5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJtYWlsbWFwLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisjaW5jbHVkZSAiaW50ZXJkaWZmLmgiCisjaW5jbHVkZSAicmFuZ2UtZGlmZi5oIgorCisjZGVmaW5lIE1BSUxfREVGQVVMVF9XUkFQIDcyCisjZGVmaW5lIENPVkVSX0ZST01fQVVUT19NQVhfU1VCSkVDVF9MRU4gMTAwCisKKy8qIFNldCBhIGRlZmF1bHQgZGF0ZS10aW1lIGZvcm1hdCBmb3IgZ2l0IGxvZyAoImxvZy5kYXRlIiBjb25maWcgdmFyaWFibGUpICovCitzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9kYXRlX21vZGUgPSBOVUxMOworCitzdGF0aWMgaW50IGRlZmF1bHRfYWJicmV2X2NvbW1pdDsKK3N0YXRpYyBpbnQgZGVmYXVsdF9zaG93X3Jvb3QgPSAxOworc3RhdGljIGludCBkZWZhdWx0X2ZvbGxvdzsKK3N0YXRpYyBpbnQgZGVmYXVsdF9zaG93X3NpZ25hdHVyZTsKK3N0YXRpYyBpbnQgZGVmYXVsdF9lbmNvZGVfZW1haWxfaGVhZGVycyA9IDE7CitzdGF0aWMgaW50IGRlY29yYXRpb25fc3R5bGU7CitzdGF0aWMgaW50IGRlY29yYXRpb25fZ2l2ZW47CitzdGF0aWMgaW50IHVzZV9tYWlsbWFwX2NvbmZpZyA9IDE7CitzdGF0aWMgY29uc3QgY2hhciAqZm10X3BhdGNoX3N1YmplY3RfcHJlZml4ID0gIlBBVENIIjsKK3N0YXRpYyBjb25zdCBjaGFyICpmbXRfcHJldHR5OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fbG9nX3VzYWdlW10gPSB7CisJTl8oImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iKSwKKwlOXygiZ2l0IHNob3cgWzxvcHRpb25zPl0gPG9iamVjdD4uLi4iKSwKKwlOVUxMCit9OworCitzdHJ1Y3QgbGluZV9vcHRfY2FsbGJhY2tfZGF0YSB7CisJc3RydWN0IHJldl9pbmZvICpyZXY7CisJY29uc3QgY2hhciAqcHJlZml4OworCXN0cnVjdCBzdHJpbmdfbGlzdCBhcmdzOworfTsKKworc3RhdGljIGludCBzZXNzaW9uX2lzX2ludGVyYWN0aXZlKHZvaWQpCit7CisJcmV0dXJuIGlzYXR0eSgxKSB8fCBwYWdlcl9pbl91c2UoKTsKK30KKworc3RhdGljIGludCBhdXRvX2RlY29yYXRpb25fc3R5bGUodm9pZCkKK3sKKwlyZXR1cm4gc2Vzc2lvbl9pc19pbnRlcmFjdGl2ZSgpID8gREVDT1JBVEVfU0hPUlRfUkVGUyA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZGVjb3JhdGlvbl9zdHlsZShjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlzd2l0Y2ggKGdpdF9wYXJzZV9tYXliZV9ib29sKHZhbHVlKSkgeworCWNhc2UgMToKKwkJcmV0dXJuIERFQ09SQVRFX1NIT1JUX1JFRlM7CisJY2FzZSAwOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJaWYgKCFzdHJjbXAodmFsdWUsICJmdWxsIikpCisJCXJldHVybiBERUNPUkFURV9GVUxMX1JFRlM7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInNob3J0IikpCisJCXJldHVybiBERUNPUkFURV9TSE9SVF9SRUZTOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJhdXRvIikpCisJCXJldHVybiBhdXRvX2RlY29yYXRpb25fc3R5bGUoKTsKKwkvKgorCSAqIFBsZWFzZSB1cGRhdGUgX2dpdF9sb2coKSBpbiBnaXQtY29tcGxldGlvbi5iYXNoIHdoZW4geW91CisJICogYWRkIG5ldyBkZWNvcmF0aW9uIHN0eWxlcy4KKwkgKi8KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZGVjb3JhdGVfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpCisJCWRlY29yYXRpb25fc3R5bGUgPSAwOworCWVsc2UgaWYgKGFyZykKKwkJZGVjb3JhdGlvbl9zdHlsZSA9IHBhcnNlX2RlY29yYXRpb25fc3R5bGUoYXJnKTsKKwllbHNlCisJCWRlY29yYXRpb25fc3R5bGUgPSBERUNPUkFURV9TSE9SVF9SRUZTOworCisJaWYgKGRlY29yYXRpb25fc3R5bGUgPCAwKQorCQlkaWUoXygiaW52YWxpZCAtLWRlY29yYXRlIG9wdGlvbjogJXMiKSwgYXJnKTsKKworCWRlY29yYXRpb25fZ2l2ZW4gPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9nX2xpbmVfcmFuZ2VfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9uLCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgbGluZV9vcHRfY2FsbGJhY2tfZGF0YSAqZGF0YSA9IG9wdGlvbi0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCisJZGF0YS0+cmV2LT5saW5lX2xldmVsX3RyYXZlcnNlID0gMTsKKwlzdHJpbmdfbGlzdF9hcHBlbmQoJmRhdGEtPmFyZ3MsIGFyZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW5pdF9sb2dfZGVmYXVsdHModm9pZCkKK3sKKwlpbml0X2dyZXBfZGVmYXVsdHModGhlX3JlcG9zaXRvcnkpOworCWluaXRfZGlmZl91aV9kZWZhdWx0cygpOworCisJZGVjb3JhdGlvbl9zdHlsZSA9IGF1dG9fZGVjb3JhdGlvbl9zdHlsZSgpOworfQorCitzdGF0aWMgdm9pZCBjbWRfbG9nX2luaXRfZGVmYXVsdHMoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJaWYgKGZtdF9wcmV0dHkpCisJCWdldF9jb21taXRfZm9ybWF0KGZtdF9wcmV0dHksIHJldik7CisJaWYgKGRlZmF1bHRfZm9sbG93KQorCQlyZXYtPmRpZmZvcHQuZmxhZ3MuZGVmYXVsdF9mb2xsb3dfcmVuYW1lcyA9IDE7CisJcmV2LT52ZXJib3NlX2hlYWRlciA9IDE7CisJcmV2LT5kaWZmb3B0LmZsYWdzLnJlY3Vyc2l2ZSA9IDE7CisJcmV2LT5kaWZmb3B0LnN0YXRfd2lkdGggPSAtMTsgLyogdXNlIGZ1bGwgdGVybWluYWwgd2lkdGggKi8KKwlyZXYtPmRpZmZvcHQuc3RhdF9ncmFwaF93aWR0aCA9IC0xOyAvKiByZXNwZWN0IHN0YXRHcmFwaFdpZHRoIGNvbmZpZyAqLworCXJldi0+YWJicmV2X2NvbW1pdCA9IGRlZmF1bHRfYWJicmV2X2NvbW1pdDsKKwlyZXYtPnNob3dfcm9vdF9kaWZmID0gZGVmYXVsdF9zaG93X3Jvb3Q7CisJcmV2LT5zdWJqZWN0X3ByZWZpeCA9IGZtdF9wYXRjaF9zdWJqZWN0X3ByZWZpeDsKKwlyZXYtPnNob3dfc2lnbmF0dXJlID0gZGVmYXVsdF9zaG93X3NpZ25hdHVyZTsKKwlyZXYtPmVuY29kZV9lbWFpbF9oZWFkZXJzID0gZGVmYXVsdF9lbmNvZGVfZW1haWxfaGVhZGVyczsKKwlyZXYtPmRpZmZvcHQuZmxhZ3MuYWxsb3dfdGV4dGNvbnYgPSAxOworCisJaWYgKGRlZmF1bHRfZGF0ZV9tb2RlKQorCQlwYXJzZV9kYXRlX2Zvcm1hdChkZWZhdWx0X2RhdGVfbW9kZSwgJnJldi0+ZGF0ZV9tb2RlKTsKK30KKworc3RhdGljIHZvaWQgY21kX2xvZ19pbml0X2ZpbmlzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSBzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCAqb3B0KQoreworCXN0cnVjdCB1c2VyZm9ybWF0X3dhbnQgdzsKKwlpbnQgcXVpZXQgPSAwLCBzb3VyY2UgPSAwLCBtYWlsbWFwOworCXN0YXRpYyBzdHJ1Y3QgbGluZV9vcHRfY2FsbGJhY2tfZGF0YSBsaW5lX2NiID0ge05VTEwsIE5VTEwsIFNUUklOR19MSVNUX0lOSVRfRFVQfTsKKwlzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGRlY29yYXRlX3JlZnNfZXhjbHVkZSA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBkZWNvcmF0ZV9yZWZzX2V4Y2x1ZGVfY29uZmlnID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGRlY29yYXRlX3JlZnNfaW5jbHVkZSA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IGRlY29yYXRpb25fZmlsdGVyIGRlY29yYXRpb25fZmlsdGVyID0geyZkZWNvcmF0ZV9yZWZzX2luY2x1ZGUsCisJCQkJCQkgICAgICAmZGVjb3JhdGVfcmVmc19leGNsdWRlLAorCQkJCQkJICAgICAgJmRlY29yYXRlX3JlZnNfZXhjbHVkZV9jb25maWd9OworCXN0YXRpYyBzdHJ1Y3QgcmV2aXNpb25fc291cmNlcyByZXZpc2lvbl9zb3VyY2VzOworCisJY29uc3Qgc3RydWN0IG9wdGlvbiBidWlsdGluX2xvZ19vcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygic3VwcHJlc3MgZGlmZiBvdXRwdXQiKSksCisJCU9QVF9CT09MKDAsICJzb3VyY2UiLCAmc291cmNlLCBOXygic2hvdyBzb3VyY2UiKSksCisJCU9QVF9CT09MKDAsICJ1c2UtbWFpbG1hcCIsICZtYWlsbWFwLCBOXygiVXNlIG1haWwgbWFwIGZpbGUiKSksCisJCU9QVF9BTElBUygwLCAibWFpbG1hcCIsICJ1c2UtbWFpbG1hcCIpLAorCQlPUFRfU1RSSU5HX0xJU1QoMCwgImRlY29yYXRlLXJlZnMiLCAmZGVjb3JhdGVfcmVmc19pbmNsdWRlLAorCQkJCU5fKCJwYXR0ZXJuIiksIE5fKCJvbmx5IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iKSksCisJCU9QVF9TVFJJTkdfTElTVCgwLCAiZGVjb3JhdGUtcmVmcy1leGNsdWRlIiwgJmRlY29yYXRlX3JlZnNfZXhjbHVkZSwKKwkJCQlOXygicGF0dGVybiIpLCBOXygiZG8gbm90IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iKSksCisJCU9QVF9DQUxMQkFDS19GKDAsICJkZWNvcmF0ZSIsIE5VTEwsIE5VTEwsIE5fKCJkZWNvcmF0ZSBvcHRpb25zIiksCisJCQkgICAgICAgUEFSU0VfT1BUX09QVEFSRywgZGVjb3JhdGVfY2FsbGJhY2spLAorCQlPUFRfQ0FMTEJBQ0soJ0wnLCBOVUxMLCAmbGluZV9jYiwgIm4sbTpmaWxlIiwKKwkJCSAgICAgTl8oIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIiksCisJCQkgICAgIGxvZ19saW5lX3JhbmdlX2NhbGxiYWNrKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWxpbmVfY2IucmV2ID0gcmV2OworCWxpbmVfY2IucHJlZml4ID0gcHJlZml4OworCisJbWFpbG1hcCA9IHVzZV9tYWlsbWFwX2NvbmZpZzsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQkgICAgIGJ1aWx0aW5fbG9nX29wdGlvbnMsIGJ1aWx0aW5fbG9nX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCB8IFBBUlNFX09QVF9LRUVQX1VOS05PV04gfAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CisKKwlpZiAocXVpZXQpCisJCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsIHJldiwgb3B0KTsKKworCS8qIEFueSBhcmd1bWVudHMgYXQgdGhpcyBwb2ludCBhcmUgbm90IHJlY29nbml6ZWQgKi8KKwlpZiAoYXJnYyA+IDEpCisJCWRpZShfKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIiksIGFyZ3ZbMV0pOworCisJbWVtc2V0KCZ3LCAwLCBzaXplb2YodykpOworCXVzZXJmb3JtYXRfZmluZF9yZXF1aXJlbWVudHMoTlVMTCwgJncpOworCisJaWYgKCFyZXYtPnNob3dfbm90ZXNfZ2l2ZW4gJiYgKCFyZXYtPnByZXR0eV9naXZlbiB8fCB3Lm5vdGVzKSkKKwkJcmV2LT5zaG93X25vdGVzID0gMTsKKwlpZiAocmV2LT5zaG93X25vdGVzKQorCQlsb2FkX2Rpc3BsYXlfbm90ZXMoJnJldi0+bm90ZXNfb3B0KTsKKworCWlmICgocmV2LT5kaWZmb3B0LnBpY2theGVfb3B0cyAmIERJRkZfUElDS0FYRV9LSU5EU19NQVNLKSB8fAorCSAgICByZXYtPmRpZmZvcHQuZmlsdGVyIHx8IHJldi0+ZGlmZm9wdC5mbGFncy5mb2xsb3dfcmVuYW1lcykKKwkJcmV2LT5hbHdheXNfc2hvd19oZWFkZXIgPSAwOworCisJaWYgKHNvdXJjZSB8fCB3LnNvdXJjZSkgeworCQlpbml0X3JldmlzaW9uX3NvdXJjZXMoJnJldmlzaW9uX3NvdXJjZXMpOworCQlyZXYtPnNvdXJjZXMgPSAmcmV2aXNpb25fc291cmNlczsKKwl9CisKKwlpZiAobWFpbG1hcCkgeworCQlyZXYtPm1haWxtYXAgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3RyaW5nX2xpc3QpKTsKKwkJcmVhZF9tYWlsbWFwKHJldi0+bWFpbG1hcCwgTlVMTCk7CisJfQorCisJaWYgKHJldi0+cHJldHR5X2dpdmVuICYmIHJldi0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9SQVcpIHsKKwkJLyoKKwkJICogImxvZyAtLXByZXR0eT1yYXciIGlzIHNwZWNpYWw7IGlnbm9yZSBVSSBvcmllbnRlZAorCQkgKiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBzdWNoIGFzIGRlY29yYXRpb24uCisJCSAqLworCQlpZiAoIWRlY29yYXRpb25fZ2l2ZW4pCisJCQlkZWNvcmF0aW9uX3N0eWxlID0gMDsKKwkJaWYgKCFyZXYtPmFiYnJldl9jb21taXRfZ2l2ZW4pCisJCQlyZXYtPmFiYnJldl9jb21taXQgPSAwOworCX0KKworCWlmIChkZWNvcmF0aW9uX3N0eWxlKSB7CisJCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqY29uZmlnX2V4Y2x1ZGUgPQorCQkJcmVwb19jb25maWdfZ2V0X3ZhbHVlX211bHRpKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJICAgICJsb2cuZXhjbHVkZURlY29yYXRpb24iKTsKKworCQlpZiAoY29uZmlnX2V4Y2x1ZGUpIHsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCBjb25maWdfZXhjbHVkZSkKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmRlY29yYXRlX3JlZnNfZXhjbHVkZV9jb25maWcsCisJCQkJCQkgICBpdGVtLT5zdHJpbmcpOworCQl9CisKKwkJcmV2LT5zaG93X2RlY29yYXRpb25zID0gMTsKKworCQlsb2FkX3JlZl9kZWNvcmF0aW9ucygmZGVjb3JhdGlvbl9maWx0ZXIsIGRlY29yYXRpb25fc3R5bGUpOworCX0KKworCWlmIChyZXYtPmxpbmVfbGV2ZWxfdHJhdmVyc2UpCisJCWxpbmVfbG9nX2luaXQocmV2LCBsaW5lX2NiLnByZWZpeCwgJmxpbmVfY2IuYXJncyk7CisKKwlzZXR1cF9wYWdlcigpOworfQorCitzdGF0aWMgdm9pZCBjbWRfbG9nX2luaXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgKm9wdCkKK3sKKwljbWRfbG9nX2luaXRfZGVmYXVsdHMocmV2KTsKKwljbWRfbG9nX2luaXRfZmluaXNoKGFyZ2MsIGFyZ3YsIHByZWZpeCwgcmV2LCBvcHQpOworfQorCisvKgorICogVGhpcyBnaXZlcyBhIHJvdWdoIGVzdGltYXRlIGZvciBob3cgbWFueSBjb21taXRzIHdlCisgKiB3aWxsIHByaW50IG91dCBpbiB0aGUgbGlzdC4KKyAqLworc3RhdGljIGludCBlc3RpbWF0ZV9jb21taXRfY291bnQoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCWludCBuID0gMDsKKworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CisJCXVuc2lnbmVkIGludCBmbGFncyA9IGNvbW1pdC0+b2JqZWN0LmZsYWdzOworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJaWYgKCEoZmxhZ3MgJiAoVFJFRVNBTUUgfCBVTklOVEVSRVNUSU5HKSkpCisJCQluKys7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgdm9pZCBzaG93X2Vhcmx5X2hlYWRlcihzdHJ1Y3QgcmV2X2luZm8gKnJldiwgY29uc3QgY2hhciAqc3RhZ2UsIGludCBucikKK3sKKwlpZiAocmV2LT5zaG93bl9vbmUpIHsKKwkJcmV2LT5zaG93bl9vbmUgPSAwOworCQlpZiAocmV2LT5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX09ORUxJTkUpCisJCQlwdXRjaGFyKHJldi0+ZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uKTsKKwl9CisJZnByaW50ZihyZXYtPmRpZmZvcHQuZmlsZSwgXygiRmluYWwgb3V0cHV0OiAlZCAlc1xuIiksIG5yLCBzdGFnZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXRpbWVydmFsIGVhcmx5X291dHB1dF90aW1lcjsKKworc3RhdGljIHZvaWQgbG9nX3Nob3dfZWFybHkoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJaW50IGkgPSByZXZzLT5lYXJseV9vdXRwdXQsIGNsb3NlX2ZpbGUgPSByZXZzLT5kaWZmb3B0LmNsb3NlX2ZpbGU7CisJaW50IHNob3dfaGVhZGVyID0gMTsKKworCXJldnMtPmRpZmZvcHQuY2xvc2VfZmlsZSA9IDA7CisJc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcigmbGlzdCwgcmV2cy0+c29ydF9vcmRlcik7CisJd2hpbGUgKGxpc3QgJiYgaSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOworCQlzd2l0Y2ggKHNpbXBsaWZ5X2NvbW1pdChyZXZzLCBjb21taXQpKSB7CisJCWNhc2UgY29tbWl0X3Nob3c6CisJCQlpZiAoc2hvd19oZWFkZXIpIHsKKwkJCQlpbnQgbiA9IGVzdGltYXRlX2NvbW1pdF9jb3VudChsaXN0KTsKKwkJCQlzaG93X2Vhcmx5X2hlYWRlcihyZXZzLCAiaW5jb21wbGV0ZSIsIG4pOworCQkJCXNob3dfaGVhZGVyID0gMDsKKwkJCX0KKwkJCWxvZ190cmVlX2NvbW1pdChyZXZzLCBjb21taXQpOworCQkJaS0tOworCQkJYnJlYWs7CisJCWNhc2UgY29tbWl0X2lnbm9yZToKKwkJCWJyZWFrOworCQljYXNlIGNvbW1pdF9lcnJvcjoKKwkJCWlmIChjbG9zZV9maWxlKQorCQkJCWZjbG9zZShyZXZzLT5kaWZmb3B0LmZpbGUpOworCQkJcmV0dXJuOworCQl9CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKworCS8qIERpZCB3ZSBhbHJlYWR5IGdldCBlbm91Z2ggY29tbWl0cyBmb3IgdGhlIGVhcmx5IG91dHB1dD8gKi8KKwlpZiAoIWkpIHsKKwkJaWYgKGNsb3NlX2ZpbGUpCisJCQlmY2xvc2UocmV2cy0+ZGlmZm9wdC5maWxlKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogLi5pZiBubywgdGhlbiByZXBlYXQgaXQgdHdpY2UgYSBzZWNvbmQgdW50aWwgd2UKKwkgKiBkby4KKwkgKgorCSAqIE5PVEUhIFdlIGRvbid0IHVzZSAiaXRfaW50ZXJ2YWwiLCBiZWNhdXNlIGlmIHRoZQorCSAqIHJlYWRlciBpc24ndCBsaXN0ZW5pbmcsIHdlIHdhbnQgb3VyIG91dHB1dCB0byBiZQorCSAqIHRocm90dGxlZCBieSB0aGUgd3JpdGluZywgYW5kIG5vdCBoYXZlIHRoZSB0aW1lcgorCSAqIHRyaWdnZXIgZXZlcnkgc2Vjb25kIGV2ZW4gaWYgd2UncmUgYmxvY2tlZCBvbiBhCisJICogcmVhZGVyIQorCSAqLworCWVhcmx5X291dHB1dF90aW1lci5pdF92YWx1ZS50dl9zZWMgPSAwOworCWVhcmx5X291dHB1dF90aW1lci5pdF92YWx1ZS50dl91c2VjID0gNTAwMDAwOworCXNldGl0aW1lcihJVElNRVJfUkVBTCwgJmVhcmx5X291dHB1dF90aW1lciwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGVhcmx5X291dHB1dChpbnQgc2lnbmFsKQoreworCXNob3dfZWFybHlfb3V0cHV0ID0gbG9nX3Nob3dfZWFybHk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2Vhcmx5X291dHB1dCh2b2lkKQoreworCXN0cnVjdCBzaWdhY3Rpb24gc2E7CisKKwkvKgorCSAqIFNldCB1cCB0aGUgc2lnbmFsIGhhbmRsZXIsIG1pbmltYWxseSBpbnRydXNpdmVseToKKwkgKiB3ZSBvbmx5IHNldCBhIHNpbmdsZSB2b2xhdGlsZSBpbnRlZ2VyIHdvcmQgKG5vdAorCSAqIHVzaW5nIHNpZ2F0b21pY190IC0gdHJ5aW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5CisJICogc3lzdGVtIGRlcGVuZGVuY2llcyBhbmQgaGVhZGVycyksIGFuZCB1c2luZworCSAqIFNBX1JFU1RBUlQuCisJICovCisJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7CisJc2Euc2FfaGFuZGxlciA9IGVhcmx5X291dHB1dDsKKwlzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7CisJc2Euc2FfZmxhZ3MgPSBTQV9SRVNUQVJUOworCXNpZ2FjdGlvbihTSUdBTFJNLCAmc2EsIE5VTEwpOworCisJLyoKKwkgKiBJZiB3ZSBjYW4gZ2V0IHRoZSB3aG9sZSBvdXRwdXQgaW4gbGVzcyB0aGFuIGEKKwkgKiB0ZW50aCBvZiBhIHNlY29uZCwgZG9uJ3QgZXZlbiBib3RoZXIgZG9pbmcgdGhlCisJICogZWFybHktb3V0cHV0IHRoaW5nLi4KKwkgKgorCSAqIFRoaXMgaXMgYSBvbmUtdGltZS1vbmx5IHRyaWdnZXIuCisJICovCisJZWFybHlfb3V0cHV0X3RpbWVyLml0X3ZhbHVlLnR2X3NlYyA9IDA7CisJZWFybHlfb3V0cHV0X3RpbWVyLml0X3ZhbHVlLnR2X3VzZWMgPSAxMDAwMDA7CisJc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmZWFybHlfb3V0cHV0X3RpbWVyLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgZmluaXNoX2Vhcmx5X291dHB1dChzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlpbnQgbiA9IGVzdGltYXRlX2NvbW1pdF9jb3VudChyZXYtPmNvbW1pdHMpOworCXNpZ25hbChTSUdBTFJNLCBTSUdfSUdOKTsKKwlzaG93X2Vhcmx5X2hlYWRlcihyZXYsICJkb25lIiwgbik7Cit9CisKK3N0YXRpYyBpbnQgY21kX2xvZ193YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlpbnQgc2F2ZWRfbnJsID0gMDsKKwlpbnQgc2F2ZWRfZGNjdGMgPSAwLCBjbG9zZV9maWxlID0gcmV2LT5kaWZmb3B0LmNsb3NlX2ZpbGU7CisKKwlpZiAocmV2LT5lYXJseV9vdXRwdXQpCisJCXNldHVwX2Vhcmx5X291dHB1dCgpOworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsayhyZXYpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisKKwlpZiAocmV2LT5lYXJseV9vdXRwdXQpCisJCWZpbmlzaF9lYXJseV9vdXRwdXQocmV2KTsKKworCS8qCisJICogRm9yIC0tY2hlY2sgYW5kIC0tZXhpdC1jb2RlLCB0aGUgZXhpdCBjb2RlIGlzIGJhc2VkIG9uIENIRUNLX0ZBSUxFRAorCSAqIGFuZCBIQVNfQ0hBTkdFUyBiZWluZyBhY2N1bXVsYXRlZCBpbiByZXYtPmRpZmZvcHQsIHNvIGJlIGNhcmVmdWwgdG8KKwkgKiByZXRhaW4gdGhhdCBzdGF0ZSBpbmZvcm1hdGlvbiBpZiByZXBsYWNpbmcgcmV2LT5kaWZmb3B0IGluIHRoaXMgbG9vcAorCSAqLworCXJldi0+ZGlmZm9wdC5jbG9zZV9maWxlID0gMDsKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbihyZXYpKSAhPSBOVUxMKSB7CisJCWlmICghbG9nX3RyZWVfY29tbWl0KHJldiwgY29tbWl0KSAmJiByZXYtPm1heF9jb3VudCA+PSAwKQorCQkJLyoKKwkJCSAqIFdlIGRlY3JlbWVudGVkIG1heF9jb3VudCBpbiBnZXRfcmV2aXNpb24sCisJCQkgKiBidXQgd2UgZGlkbid0IGFjdHVhbGx5IHNob3cgdGhlIGNvbW1pdC4KKwkJCSAqLworCQkJcmV2LT5tYXhfY291bnQrKzsKKwkJaWYgKCFyZXYtPnJlZmxvZ19pbmZvKSB7CisJCQkvKgorCQkJICogV2UgbWF5IHNob3cgYSBnaXZlbiBjb21taXQgbXVsdGlwbGUgdGltZXMgd2hlbgorCQkJICogd2Fsa2luZyB0aGUgcmVmbG9ncy4KKwkJCSAqLworCQkJZnJlZV9jb21taXRfYnVmZmVyKHRoZV9yZXBvc2l0b3J5LT5wYXJzZWRfb2JqZWN0cywKKwkJCQkJICAgY29tbWl0KTsKKwkJCWZyZWVfY29tbWl0X2xpc3QoY29tbWl0LT5wYXJlbnRzKTsKKwkJCWNvbW1pdC0+cGFyZW50cyA9IE5VTEw7CisJCX0KKwkJaWYgKHNhdmVkX25ybCA8IHJldi0+ZGlmZm9wdC5uZWVkZWRfcmVuYW1lX2xpbWl0KQorCQkJc2F2ZWRfbnJsID0gcmV2LT5kaWZmb3B0Lm5lZWRlZF9yZW5hbWVfbGltaXQ7CisJCWlmIChyZXYtPmRpZmZvcHQuZGVncmFkZWRfY2NfdG9fYykKKwkJCXNhdmVkX2RjY3RjID0gMTsKKwl9CisJcmV2LT5kaWZmb3B0LmRlZ3JhZGVkX2NjX3RvX2MgPSBzYXZlZF9kY2N0YzsKKwlyZXYtPmRpZmZvcHQubmVlZGVkX3JlbmFtZV9saW1pdCA9IHNhdmVkX25ybDsKKwlpZiAoY2xvc2VfZmlsZSkKKwkJZmNsb3NlKHJldi0+ZGlmZm9wdC5maWxlKTsKKworCWlmIChyZXYtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NIRUNLRElGRiAmJgorCSAgICByZXYtPmRpZmZvcHQuZmxhZ3MuY2hlY2tfZmFpbGVkKSB7CisJCXJldHVybiAwMjsKKwl9CisJcmV0dXJuIGRpZmZfcmVzdWx0X2NvZGUoJnJldi0+ZGlmZm9wdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2xvZ19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqc2xvdF9uYW1lOworCisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnByZXR0eSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmZtdF9wcmV0dHksIHZhciwgdmFsdWUpOworCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5zdWJqZWN0cHJlZml4IikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZm10X3BhdGNoX3N1YmplY3RfcHJlZml4LCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuZW5jb2RlZW1haWxoZWFkZXJzIikpIHsKKwkJZGVmYXVsdF9lbmNvZGVfZW1haWxfaGVhZGVycyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImxvZy5hYmJyZXZjb21taXQiKSkgeworCQlkZWZhdWx0X2FiYnJldl9jb21taXQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJsb2cuZGF0ZSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRlZmF1bHRfZGF0ZV9tb2RlLCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJsb2cuZGVjb3JhdGUiKSkgeworCQlkZWNvcmF0aW9uX3N0eWxlID0gcGFyc2VfZGVjb3JhdGlvbl9zdHlsZSh2YWx1ZSk7CisJCWlmIChkZWNvcmF0aW9uX3N0eWxlIDwgMCkKKwkJCWRlY29yYXRpb25fc3R5bGUgPSAwOyAvKiBtYXliZSB3YXJuPyAqLworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAibG9nLnNob3dyb290IikpIHsKKwkJZGVmYXVsdF9zaG93X3Jvb3QgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJsb2cuZm9sbG93IikpIHsKKwkJZGVmYXVsdF9mb2xsb3cgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoc2tpcF9wcmVmaXgodmFyLCAiY29sb3IuZGVjb3JhdGUuIiwgJnNsb3RfbmFtZSkpCisJCXJldHVybiBwYXJzZV9kZWNvcmF0ZV9jb2xvcl9jb25maWcodmFyLCBzbG90X25hbWUsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJsb2cubWFpbG1hcCIpKSB7CisJCXVzZV9tYWlsbWFwX2NvbmZpZyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImxvZy5zaG93c2lnbmF0dXJlIikpIHsKKwkJZGVmYXVsdF9zaG93X3NpZ25hdHVyZSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGdyZXBfY29uZmlnKHZhciwgdmFsdWUsIGNiKSA8IDApCisJCXJldHVybiAtMTsKKwlpZiAoZ2l0X2dwZ19jb25maWcodmFyLCB2YWx1ZSwgY2IpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBnaXRfZGlmZl91aV9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitpbnQgY21kX3doYXRjaGFuZ2VkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBvcHQ7CisKKwlpbml0X2xvZ19kZWZhdWx0cygpOworCWdpdF9jb25maWcoZ2l0X2xvZ19jb25maWcsIE5VTEwpOworCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldiwgcHJlZml4KTsKKwlyZXYuZGlmZiA9IDE7CisJcmV2LnNpbXBsaWZ5X2hpc3RvcnkgPSAwOworCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CisJb3B0LmRlZiA9ICJIRUFEIjsKKwlvcHQucmV2YXJnX29wdCA9IFJFVkFSR19DT01NSVRUSVNIOworCWNtZF9sb2dfaW5pdChhcmdjLCBhcmd2LCBwcmVmaXgsICZyZXYsICZvcHQpOworCWlmICghcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkKKwkJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1JBVzsKKwlyZXR1cm4gY21kX2xvZ193YWxrKCZyZXYpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3RhZ2dlcihjb25zdCBjaGFyICpidWYsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHBwID0gezB9OworCisJcHAuZm10ID0gcmV2LT5jb21taXRfZm9ybWF0OworCXBwLmRhdGVfbW9kZSA9IHJldi0+ZGF0ZV9tb2RlOworCXBwX3VzZXJfaW5mbygmcHAsICJUYWdnZXIiLCAmb3V0LCBidWYsIGdldF9sb2dfb3V0cHV0X2VuY29kaW5nKCkpOworCWZwcmludGYocmV2LT5kaWZmb3B0LmZpbGUsICIlcyIsIG91dC5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworfQorCitzdGF0aWMgaW50IHNob3dfYmxvYl9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3QgcmV2X2luZm8gKnJldiwgY29uc3QgY2hhciAqb2JqX25hbWUpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWRjOworCXN0cnVjdCBvYmplY3RfY29udGV4dCBvYmpfY29udGV4dDsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJZmZsdXNoKHJldi0+ZGlmZm9wdC5maWxlKTsKKwlpZiAoIXJldi0+ZGlmZm9wdC5mbGFncy50ZXh0Y29udl9zZXRfdmlhX2NtZGxpbmUgfHwKKwkgICAgIXJldi0+ZGlmZm9wdC5mbGFncy5hbGxvd190ZXh0Y29udikKKwkJcmV0dXJuIHN0cmVhbV9ibG9iX3RvX2ZkKDEsIG9pZCwgTlVMTCwgMCk7CisKKwlpZiAoZ2V0X29pZF93aXRoX2NvbnRleHQodGhlX3JlcG9zaXRvcnksIG9ial9uYW1lLAorCQkJCSBHRVRfT0lEX1JFQ09SRF9QQVRILAorCQkJCSAmb2lkYywgJm9ial9jb250ZXh0KSkKKwkJZGllKF8oIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIiksIG9ial9uYW1lKTsKKwlpZiAoIW9ial9jb250ZXh0LnBhdGggfHwKKwkgICAgIXRleHRjb252X29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2JqX2NvbnRleHQucGF0aCwKKwkJCSAgICAgb2JqX2NvbnRleHQubW9kZSwgJm9pZGMsIDEsICZidWYsICZzaXplKSkgeworCQlmcmVlKG9ial9jb250ZXh0LnBhdGgpOworCQlyZXR1cm4gc3RyZWFtX2Jsb2JfdG9fZmQoMSwgb2lkLCBOVUxMLCAwKTsKKwl9CisKKwlpZiAoIWJ1ZikKKwkJZGllKF8oImdpdCBzaG93ICVzOiBiYWQgZmlsZSIpLCBvYmpfbmFtZSk7CisKKwl3cml0ZV9vcl9kaWUoMSwgYnVmLCBzaXplKTsKKwlmcmVlKG9ial9jb250ZXh0LnBhdGgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfdGFnX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciAqYnVmID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCAmc2l6ZSk7CisJaW50IG9mZnNldCA9IDA7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIpLCBvaWRfdG9faGV4KG9pZCkpOworCisJYXNzZXJ0KHR5cGUgPT0gT0JKX1RBRyk7CisJd2hpbGUgKG9mZnNldCA8IHNpemUgJiYgYnVmW29mZnNldF0gIT0gJ1xuJykgeworCQlpbnQgbmV3X29mZnNldCA9IG9mZnNldCArIDE7CisJCWNvbnN0IGNoYXIgKmlkZW50OworCQl3aGlsZSAobmV3X29mZnNldCA8IHNpemUgJiYgYnVmW25ld19vZmZzZXQrK10gIT0gJ1xuJykKKwkJCTsgLyogZG8gbm90aGluZyAqLworCQlpZiAoc2tpcF9wcmVmaXgoYnVmICsgb2Zmc2V0LCAidGFnZ2VyICIsICZpZGVudCkpCisJCQlzaG93X3RhZ2dlcihpZGVudCwgcmV2KTsKKwkJb2Zmc2V0ID0gbmV3X29mZnNldDsKKwl9CisKKwlpZiAob2Zmc2V0IDwgc2l6ZSkKKwkJZndyaXRlKGJ1ZiArIG9mZnNldCwgc2l6ZSAtIG9mZnNldCwgMSwgcmV2LT5kaWZmb3B0LmZpbGUpOworCWZyZWUoYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X3RyZWVfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJc3RydWN0IHN0cmJ1ZiAqYmFzZSwKKwkJY29uc3QgY2hhciAqcGF0aG5hbWUsIHVuc2lnbmVkIG1vZGUsIGludCBzdGFnZSwgdm9pZCAqY29udGV4dCkKK3sKKwlGSUxFICpmaWxlID0gY29udGV4dDsKKwlmcHJpbnRmKGZpbGUsICIlcyVzXG4iLCBwYXRobmFtZSwgU19JU0RJUihtb2RlKSA/ICIvIiA6ICIiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hvd19zZXR1cF9yZXZpc2lvbnNfdHdlYWsoc3RydWN0IHJldl9pbmZvICpyZXYsCisJCQkJICAgICAgIHN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgKm9wdCkKK3sKKwlpZiAocmV2LT5pZ25vcmVfbWVyZ2VzKSB7CisJCS8qIFRoZXJlIHdhcyBubyAiLW0iIG9uIHRoZSBjb21tYW5kIGxpbmUgKi8KKwkJcmV2LT5pZ25vcmVfbWVyZ2VzID0gMDsKKwkJaWYgKCFyZXYtPmZpcnN0X3BhcmVudF9vbmx5ICYmICFyZXYtPmNvbWJpbmVfbWVyZ2VzKSB7CisJCQkvKiBObyAiLS1maXJzdC1wYXJlbnQiLCAiLWMiLCBvciAiLS1jYyIgKi8KKwkJCXJldi0+Y29tYmluZV9tZXJnZXMgPSAxOworCQkJcmV2LT5kZW5zZV9jb21iaW5lZF9tZXJnZXMgPSAxOworCQl9CisJfQorCWlmICghcmV2LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpCisJCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7Cit9CisKK2ludCBjbWRfc2hvdyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKm9iamVjdHM7CisJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBvcHQ7CisJc3RydWN0IHBhdGhzcGVjIG1hdGNoX2FsbDsKKwlpbnQgaSwgY291bnQsIHJldCA9IDA7CisKKwlpbml0X2xvZ19kZWZhdWx0cygpOworCWdpdF9jb25maWcoZ2l0X2xvZ19jb25maWcsIE5VTEwpOworCisJbWVtc2V0KCZtYXRjaF9hbGwsIDAsIHNpemVvZihtYXRjaF9hbGwpKTsKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2LCBwcmVmaXgpOworCXJldi5kaWZmID0gMTsKKwlyZXYuYWx3YXlzX3Nob3dfaGVhZGVyID0gMTsKKwlyZXYubm9fd2FsayA9IFJFVklTSU9OX1dBTEtfTk9fV0FMS19TT1JURUQ7CisJcmV2LmRpZmZvcHQuc3RhdF93aWR0aCA9IC0xOyAJLyogU2NhbGUgdG8gcmVhbCB0ZXJtaW5hbCBzaXplICovCisKKwltZW1zZXQoJm9wdCwgMCwgc2l6ZW9mKG9wdCkpOworCW9wdC5kZWYgPSAiSEVBRCI7CisJb3B0LnR3ZWFrID0gc2hvd19zZXR1cF9yZXZpc2lvbnNfdHdlYWs7CisJY21kX2xvZ19pbml0KGFyZ2MsIGFyZ3YsIHByZWZpeCwgJnJldiwgJm9wdCk7CisKKwlpZiAoIXJldi5ub193YWxrKQorCQlyZXR1cm4gY21kX2xvZ193YWxrKCZyZXYpOworCisJY291bnQgPSByZXYucGVuZGluZy5ucjsKKwlvYmplY3RzID0gcmV2LnBlbmRpbmcub2JqZWN0czsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQgJiYgIXJldDsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm8gPSBvYmplY3RzW2ldLml0ZW07CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBvYmplY3RzW2ldLm5hbWU7CisJCXN3aXRjaCAoby0+dHlwZSkgeworCQljYXNlIE9CSl9CTE9COgorCQkJcmV0ID0gc2hvd19ibG9iX29iamVjdCgmby0+b2lkLCAmcmV2LCBuYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIE9CSl9UQUc6IHsKKwkJCXN0cnVjdCB0YWcgKnQgPSAoc3RydWN0IHRhZyAqKW87CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSBnZXRfdGFnZ2VkX29pZCh0KTsKKworCQkJaWYgKHJldi5zaG93bl9vbmUpCisJCQkJcHV0Y2hhcignXG4nKTsKKwkJCWZwcmludGYocmV2LmRpZmZvcHQuZmlsZSwgIiVzdGFnICVzJXNcbiIsCisJCQkJCWRpZmZfZ2V0X2NvbG9yX29wdCgmcmV2LmRpZmZvcHQsIERJRkZfQ09NTUlUKSwKKwkJCQkJdC0+dGFnLAorCQkJCQlkaWZmX2dldF9jb2xvcl9vcHQoJnJldi5kaWZmb3B0LCBESUZGX1JFU0VUKSk7CisJCQlyZXQgPSBzaG93X3RhZ19vYmplY3QoJm8tPm9pZCwgJnJldik7CisJCQlyZXYuc2hvd25fb25lID0gMTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisJCQlvID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCQkJaWYgKCFvKQorCQkJCXJldCA9IGVycm9yKF8oImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIpLAorCQkJCQkgICAgb2lkX3RvX2hleChvaWQpKTsKKwkJCW9iamVjdHNbaV0uaXRlbSA9IG87CisJCQlpLS07CisJCQlicmVhazsKKwkJfQorCQljYXNlIE9CSl9UUkVFOgorCQkJaWYgKHJldi5zaG93bl9vbmUpCisJCQkJcHV0Y2hhcignXG4nKTsKKwkJCWZwcmludGYocmV2LmRpZmZvcHQuZmlsZSwgIiVzdHJlZSAlcyVzXG5cbiIsCisJCQkJCWRpZmZfZ2V0X2NvbG9yX29wdCgmcmV2LmRpZmZvcHQsIERJRkZfQ09NTUlUKSwKKwkJCQkJbmFtZSwKKwkJCQkJZGlmZl9nZXRfY29sb3Jfb3B0KCZyZXYuZGlmZm9wdCwgRElGRl9SRVNFVCkpOworCQkJcmVhZF90cmVlX3JlY3Vyc2l2ZSh0aGVfcmVwb3NpdG9yeSwgKHN0cnVjdCB0cmVlICopbywgIiIsCisJCQkJCSAgICAwLCAwLCAmbWF0Y2hfYWxsLCBzaG93X3RyZWVfb2JqZWN0LAorCQkJCQkgICAgcmV2LmRpZmZvcHQuZmlsZSk7CisJCQlyZXYuc2hvd25fb25lID0gMTsKKwkJCWJyZWFrOworCQljYXNlIE9CSl9DT01NSVQ6CisJCQlyZXYucGVuZGluZy5uciA9IHJldi5wZW5kaW5nLmFsbG9jID0gMDsKKwkJCXJldi5wZW5kaW5nLm9iamVjdHMgPSBOVUxMOworCQkJYWRkX29iamVjdF9hcnJheShvLCBuYW1lLCAmcmV2LnBlbmRpbmcpOworCQkJcmV0ID0gY21kX2xvZ193YWxrKCZyZXYpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSBlcnJvcihfKCJ1bmtub3duIHR5cGU6ICVkIiksIG8tPnR5cGUpOworCQl9CisJfQorCWZyZWUob2JqZWN0cyk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAiZ2l0IGxvZyAtZyAtLWFiYnJldi1jb21taXQgLS1wcmV0dHk9b25lbGluZSIKKyAqLworaW50IGNtZF9sb2dfcmVmbG9nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBvcHQ7CisKKwlpbml0X2xvZ19kZWZhdWx0cygpOworCWdpdF9jb25maWcoZ2l0X2xvZ19jb25maWcsIE5VTEwpOworCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldiwgcHJlZml4KTsKKwlpbml0X3JlZmxvZ193YWxrKCZyZXYucmVmbG9nX2luZm8pOworCXJldi52ZXJib3NlX2hlYWRlciA9IDE7CisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwlvcHQuZGVmID0gIkhFQUQiOworCWNtZF9sb2dfaW5pdF9kZWZhdWx0cygmcmV2KTsKKwlyZXYuYWJicmV2X2NvbW1pdCA9IDE7CisJcmV2LmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9PTkVMSU5FOworCXJldi51c2VfdGVybWluYXRvciA9IDE7CisJcmV2LmFsd2F5c19zaG93X2hlYWRlciA9IDE7CisJY21kX2xvZ19pbml0X2ZpbmlzaChhcmdjLCBhcmd2LCBwcmVmaXgsICZyZXYsICZvcHQpOworCisJcmV0dXJuIGNtZF9sb2dfd2FsaygmcmV2KTsKK30KKworc3RhdGljIHZvaWQgbG9nX3NldHVwX3JldmlzaW9uc190d2VhayhzdHJ1Y3QgcmV2X2luZm8gKnJldiwKKwkJCQkgICAgICBzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0ICpvcHQpCit7CisJaWYgKHJldi0+ZGlmZm9wdC5mbGFncy5kZWZhdWx0X2ZvbGxvd19yZW5hbWVzICYmCisJICAgIHJldi0+cHJ1bmVfZGF0YS5uciA9PSAxKQorCQlyZXYtPmRpZmZvcHQuZmxhZ3MuZm9sbG93X3JlbmFtZXMgPSAxOworCisJLyogVHVybiAtLWNjLy1jIGludG8gLXAgLS1jYy8tYyB3aGVuIC1wIHdhcyBub3QgZ2l2ZW4gKi8KKwlpZiAoIXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYmIHJldi0+Y29tYmluZV9tZXJnZXMpCisJCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisKKwkvKiBUdXJuIC1tIG9uIHdoZW4gLS1jYy8tYyB3YXMgZ2l2ZW4gKi8KKwlpZiAocmV2LT5jb21iaW5lX21lcmdlcykKKwkJcmV2LT5pZ25vcmVfbWVyZ2VzID0gMDsKK30KKworaW50IGNtZF9sb2coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IG9wdDsKKworCWluaXRfbG9nX2RlZmF1bHRzKCk7CisJZ2l0X2NvbmZpZyhnaXRfbG9nX2NvbmZpZywgTlVMTCk7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2LCBwcmVmaXgpOworCXJldi5hbHdheXNfc2hvd19oZWFkZXIgPSAxOworCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CisJb3B0LmRlZiA9ICJIRUFEIjsKKwlvcHQucmV2YXJnX29wdCA9IFJFVkFSR19DT01NSVRUSVNIOworCW9wdC50d2VhayA9IGxvZ19zZXR1cF9yZXZpc2lvbnNfdHdlYWs7CisJY21kX2xvZ19pbml0KGFyZ2MsIGFyZ3YsIHByZWZpeCwgJnJldiwgJm9wdCk7CisJcmV0dXJuIGNtZF9sb2dfd2FsaygmcmV2KTsKK30KKworLyogZm9ybWF0LXBhdGNoICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpmbXRfcGF0Y2hfc3VmZml4ID0gIi5wYXRjaCI7CitzdGF0aWMgaW50IG51bWJlcmVkID0gMDsKK3N0YXRpYyBpbnQgYXV0b19udW1iZXIgPSAxOworCitzdGF0aWMgY2hhciAqZGVmYXVsdF9hdHRhY2ggPSBOVUxMOworCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGV4dHJhX2hkciA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGV4dHJhX3RvID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXh0cmFfY2MgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCitzdGF0aWMgdm9pZCBhZGRfaGVhZGVyKGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWludCBsZW4gPSBzdHJsZW4odmFsdWUpOworCXdoaWxlIChsZW4gJiYgdmFsdWVbbGVuIC0gMV0gPT0gJ1xuJykKKwkJbGVuLS07CisKKwlpZiAoIXN0cm5jYXNlY21wKHZhbHVlLCAidG86ICIsIDQpKSB7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoJmV4dHJhX3RvLCB2YWx1ZSArIDQpOworCQlsZW4gLT0gNDsKKwl9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcCh2YWx1ZSwgImNjOiAiLCA0KSkgeworCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZleHRyYV9jYywgdmFsdWUgKyA0KTsKKwkJbGVuIC09IDQ7CisJfSBlbHNlIHsKKwkJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZCgmZXh0cmFfaGRyLCB2YWx1ZSk7CisJfQorCisJaXRlbS0+c3RyaW5nW2xlbl0gPSAnXDAnOworfQorCitlbnVtIGNvdmVyX3NldHRpbmcgeworCUNPVkVSX1VOU0VULAorCUNPVkVSX09GRiwKKwlDT1ZFUl9PTiwKKwlDT1ZFUl9BVVRPCit9OworCitlbnVtIHRocmVhZF9sZXZlbCB7CisJVEhSRUFEX1VOU0VULAorCVRIUkVBRF9TSEFMTE9XLAorCVRIUkVBRF9ERUVQCit9OworCitlbnVtIGNvdmVyX2Zyb21fZGVzY3JpcHRpb24geworCUNPVkVSX0ZST01fTk9ORSwKKwlDT1ZFUl9GUk9NX01FU1NBR0UsCisJQ09WRVJfRlJPTV9TVUJKRUNULAorCUNPVkVSX0ZST01fQVVUTworfTsKKworc3RhdGljIGVudW0gdGhyZWFkX2xldmVsIHRocmVhZDsKK3N0YXRpYyBpbnQgZG9fc2lnbm9mZjsKK3N0YXRpYyBpbnQgYmFzZV9hdXRvOworc3RhdGljIGNoYXIgKmZyb207CitzdGF0aWMgY29uc3QgY2hhciAqc2lnbmF0dXJlID0gZ2l0X3ZlcnNpb25fc3RyaW5nOworc3RhdGljIGNvbnN0IGNoYXIgKnNpZ25hdHVyZV9maWxlOworc3RhdGljIGVudW0gY292ZXJfc2V0dGluZyBjb25maWdfY292ZXJfbGV0dGVyOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbmZpZ19vdXRwdXRfZGlyZWN0b3J5Oworc3RhdGljIGVudW0gY292ZXJfZnJvbV9kZXNjcmlwdGlvbiBjb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uX21vZGUgPSBDT1ZFUl9GUk9NX01FU1NBR0U7CitzdGF0aWMgaW50IHNob3dfbm90ZXM7CitzdGF0aWMgc3RydWN0IGRpc3BsYXlfbm90ZXNfb3B0IG5vdGVzX29wdDsKKworc3RhdGljIGVudW0gY292ZXJfZnJvbV9kZXNjcmlwdGlvbiBwYXJzZV9jb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uKGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAoIWFyZyB8fCAhc3RyY21wKGFyZywgImRlZmF1bHQiKSkKKwkJcmV0dXJuIENPVkVSX0ZST01fTUVTU0FHRTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIm5vbmUiKSkKKwkJcmV0dXJuIENPVkVSX0ZST01fTk9ORTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIm1lc3NhZ2UiKSkKKwkJcmV0dXJuIENPVkVSX0ZST01fTUVTU0FHRTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInN1YmplY3QiKSkKKwkJcmV0dXJuIENPVkVSX0ZST01fU1VCSkVDVDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgImF1dG8iKSkKKwkJcmV0dXJuIENPVkVSX0ZST01fQVVUTzsKKwllbHNlCisJCWRpZShfKCIlczogaW52YWxpZCBjb3ZlciBmcm9tIGRlc2NyaXB0aW9uIG1vZGUiKSwgYXJnKTsKK30KKworc3RhdGljIGludCBnaXRfZm9ybWF0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuaGVhZGVycyIpKSB7CisJCWlmICghdmFsdWUpCisJCQlkaWUoXygiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIpKTsKKwkJYWRkX2hlYWRlcih2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuc3VmZml4IikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZm10X3BhdGNoX3N1ZmZpeCwgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnRvIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmV4dHJhX3RvLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuY2MiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmZXh0cmFfY2MsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImRpZmYuY29sb3IiKSB8fCAhc3RyY21wKHZhciwgImNvbG9yLmRpZmYiKSB8fAorCSAgICAhc3RyY21wKHZhciwgImNvbG9yLnVpIikgfHwgIXN0cmNtcCh2YXIsICJkaWZmLnN1Ym1vZHVsZSIpKSB7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQubnVtYmVyZWQiKSkgeworCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJhdXRvIikpIHsKKwkJCWF1dG9fbnVtYmVyID0gMTsKKwkJCXJldHVybiAwOworCQl9CisJCW51bWJlcmVkID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlhdXRvX251bWJlciA9IGF1dG9fbnVtYmVyICYmIG51bWJlcmVkOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LmF0dGFjaCIpKSB7CisJCWlmICh2YWx1ZSAmJiAqdmFsdWUpCisJCQlkZWZhdWx0X2F0dGFjaCA9IHhzdHJkdXAodmFsdWUpOworCQllbHNlCisJCQlkZWZhdWx0X2F0dGFjaCA9IHhzdHJkdXAoZ2l0X3ZlcnNpb25fc3RyaW5nKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImZvcm1hdC50aHJlYWQiKSkgeworCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJkZWVwIikpIHsKKwkJCXRocmVhZCA9IFRIUkVBRF9ERUVQOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKHZhbHVlICYmICFzdHJjYXNlY21wKHZhbHVlLCAic2hhbGxvdyIpKSB7CisJCQl0aHJlYWQgPSBUSFJFQURfU0hBTExPVzsKKwkJCXJldHVybiAwOworCQl9CisJCXRocmVhZCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSA/IFRIUkVBRF9TSEFMTE9XIDogVEhSRUFEX1VOU0VUOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnNpZ25vZmYiKSkgeworCQlkb19zaWdub2ZmID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnNpZ25hdHVyZSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnNpZ25hdHVyZSwgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnNpZ25hdHVyZWZpbGUiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfcGF0aG5hbWUoJnNpZ25hdHVyZV9maWxlLCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuY292ZXJsZXR0ZXIiKSkgeworCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJhdXRvIikpIHsKKwkJCWNvbmZpZ19jb3Zlcl9sZXR0ZXIgPSBDT1ZFUl9BVVRPOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY29uZmlnX2NvdmVyX2xldHRlciA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSA/IENPVkVSX09OIDogQ09WRVJfT0ZGOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0Lm91dHB1dGRpcmVjdG9yeSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmNvbmZpZ19vdXRwdXRfZGlyZWN0b3J5LCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQudXNlYXV0b2Jhc2UiKSkgeworCQliYXNlX2F1dG8gPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuZnJvbSIpKSB7CisJCWludCBiID0gZ2l0X3BhcnNlX21heWJlX2Jvb2wodmFsdWUpOworCQlmcmVlKGZyb20pOworCQlpZiAoYiA8IDApCisJCQlmcm9tID0geHN0cmR1cCh2YWx1ZSk7CisJCWVsc2UgaWYgKGIpCisJCQlmcm9tID0geHN0cmR1cChnaXRfY29tbWl0dGVyX2luZm8oSURFTlRfTk9fREFURSkpOworCQllbHNlCisJCQlmcm9tID0gTlVMTDsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5ub3RlcyIpKSB7CisJCWludCBiID0gZ2l0X3BhcnNlX21heWJlX2Jvb2wodmFsdWUpOworCQlpZiAoYiA8IDApCisJCQllbmFibGVfcmVmX2Rpc3BsYXlfbm90ZXMoJm5vdGVzX29wdCwgJnNob3dfbm90ZXMsIHZhbHVlKTsKKwkJZWxzZSBpZiAoYikKKwkJCWVuYWJsZV9kZWZhdWx0X2Rpc3BsYXlfbm90ZXMoJm5vdGVzX29wdCwgJnNob3dfbm90ZXMpOworCQllbHNlCisJCQlkaXNhYmxlX2Rpc3BsYXlfbm90ZXMoJm5vdGVzX29wdCwgJnNob3dfbm90ZXMpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LmNvdmVyZnJvbWRlc2NyaXB0aW9uIikpIHsKKwkJY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID0gcGFyc2VfY292ZXJfZnJvbV9kZXNjcmlwdGlvbih2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfbG9nX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpvdXRwdXRfZGlyZWN0b3J5ID0gTlVMTDsKK3N0YXRpYyBpbnQgb3V0ZGlyX29mZnNldDsKKworc3RhdGljIGludCBvcGVuX25leHRfZmlsZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKnN1YmplY3QsCisJCQkgc3RydWN0IHJldl9pbmZvICpyZXYsIGludCBxdWlldCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGZpbGVuYW1lID0gU1RSQlVGX0lOSVQ7CisJaW50IHN1ZmZpeF9sZW4gPSBzdHJsZW4ocmV2LT5wYXRjaF9zdWZmaXgpICsgMTsKKworCWlmIChvdXRwdXRfZGlyZWN0b3J5KSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmZpbGVuYW1lLCBvdXRwdXRfZGlyZWN0b3J5KTsKKwkJaWYgKGZpbGVuYW1lLmxlbiA+PQorCQkgICAgUEFUSF9NQVggLSBGT1JNQVRfUEFUQ0hfTkFNRV9NQVggLSBzdWZmaXhfbGVuKSB7CisJCQlzdHJidWZfcmVsZWFzZSgmZmlsZW5hbWUpOworCQkJcmV0dXJuIGVycm9yKF8oIm5hbWUgb2Ygb3V0cHV0IGRpcmVjdG9yeSBpcyB0b28gbG9uZyIpKTsKKwkJfQorCQlzdHJidWZfY29tcGxldGUoJmZpbGVuYW1lLCAnLycpOworCX0KKworCWlmIChyZXYtPm51bWJlcmVkX2ZpbGVzKQorCQlzdHJidWZfYWRkZigmZmlsZW5hbWUsICIlZCIsIHJldi0+bnIpOworCWVsc2UgaWYgKGNvbW1pdCkKKwkJZm10X291dHB1dF9jb21taXQoJmZpbGVuYW1lLCBjb21taXQsIHJldik7CisJZWxzZQorCQlmbXRfb3V0cHV0X3N1YmplY3QoJmZpbGVuYW1lLCBzdWJqZWN0LCByZXYpOworCisJaWYgKCFxdWlldCkKKwkJcHJpbnRmKCIlc1xuIiwgZmlsZW5hbWUuYnVmICsgb3V0ZGlyX29mZnNldCk7CisKKwlpZiAoKHJldi0+ZGlmZm9wdC5maWxlID0gZm9wZW4oZmlsZW5hbWUuYnVmLCAidyIpKSA9PSBOVUxMKSB7CisJCWVycm9yX2Vycm5vKF8oImNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiKSwgZmlsZW5hbWUuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmZpbGVuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZmaWxlbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9wYXRjaF9pZHMoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBwYXRjaF9pZHMgKmlkcykKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gY2hlY2tfcmV2OworCXN0cnVjdCBjb21taXQgKmNvbW1pdCwgKmMxLCAqYzI7CisJc3RydWN0IG9iamVjdCAqbzEsICpvMjsKKwl1bnNpZ25lZCBmbGFnczEsIGZsYWdzMjsKKworCWlmIChyZXYtPnBlbmRpbmcubnIgIT0gMikKKwkJZGllKF8oIm5lZWQgZXhhY3RseSBvbmUgcmFuZ2UiKSk7CisKKwlvMSA9IHJldi0+cGVuZGluZy5vYmplY3RzWzBdLml0ZW07CisJbzIgPSByZXYtPnBlbmRpbmcub2JqZWN0c1sxXS5pdGVtOworCWZsYWdzMSA9IG8xLT5mbGFnczsKKwlmbGFnczIgPSBvMi0+ZmxhZ3M7CisJYzEgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm8xLT5vaWQpOworCWMyID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksICZvMi0+b2lkKTsKKworCWlmICgoZmxhZ3MxICYgVU5JTlRFUkVTVElORykgPT0gKGZsYWdzMiAmIFVOSU5URVJFU1RJTkcpKQorCQlkaWUoXygibm90IGEgcmFuZ2UiKSk7CisKKwlpbml0X3BhdGNoX2lkcyh0aGVfcmVwb3NpdG9yeSwgaWRzKTsKKworCS8qIGdpdmVuIGEgcmFuZ2UgYS4uYiBnZXQgYWxsIHBhdGNoIGlkcyBmb3IgYi4uYSAqLworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZjaGVja19yZXYsIHJldi0+cHJlZml4KTsKKwljaGVja19yZXYubWF4X3BhcmVudHMgPSAxOworCW8xLT5mbGFncyBePSBVTklOVEVSRVNUSU5HOworCW8yLT5mbGFncyBePSBVTklOVEVSRVNUSU5HOworCWFkZF9wZW5kaW5nX29iamVjdCgmY2hlY2tfcmV2LCBvMSwgIm8xIik7CisJYWRkX3BlbmRpbmdfb2JqZWN0KCZjaGVja19yZXYsIG8yLCAibzIiKTsKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZjaGVja19yZXYpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmY2hlY2tfcmV2KSkgIT0gTlVMTCkgeworCQlhZGRfY29tbWl0X3BhdGNoX2lkKGNvbW1pdCwgaWRzKTsKKwl9CisKKwkvKiByZXNldCBmb3IgbmV4dCByZXZpc2lvbiB3YWxrICovCisJY2xlYXJfY29tbWl0X21hcmtzKGMxLCBTRUVOIHwgVU5JTlRFUkVTVElORyB8IFNIT1dOIHwgQURERUQpOworCWNsZWFyX2NvbW1pdF9tYXJrcyhjMiwgU0VFTiB8IFVOSU5URVJFU1RJTkcgfCBTSE9XTiB8IEFEREVEKTsKKwlvMS0+ZmxhZ3MgPSBmbGFnczE7CisJbzItPmZsYWdzID0gZmxhZ3MyOworfQorCitzdGF0aWMgdm9pZCBnZW5fbWVzc2FnZV9pZChzdHJ1Y3QgcmV2X2luZm8gKmluZm8sIGNoYXIgKmJhc2UpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkZigmYnVmLCAiJXMuJSJQUkl0aW1lIi5naXQuJXMiLCBiYXNlLAorCQkgICAgKHRpbWVzdGFtcF90KSB0aW1lKE5VTEwpLAorCQkgICAgZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX05PX05BTUV8SURFTlRfTk9fREFURXxJREVOVF9TVFJJQ1QpKTsKKwlpbmZvLT5tZXNzYWdlX2lkID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfc2lnbmF0dXJlKEZJTEUgKmZpbGUpCit7CisJaWYgKCFzaWduYXR1cmUgfHwgISpzaWduYXR1cmUpCisJCXJldHVybjsKKworCWZwcmludGYoZmlsZSwgIi0tIFxuJXMiLCBzaWduYXR1cmUpOworCWlmIChzaWduYXR1cmVbc3RybGVuKHNpZ25hdHVyZSktMV0gIT0gJ1xuJykKKwkJcHV0YygnXG4nLCBmaWxlKTsKKwlwdXRjKCdcbicsIGZpbGUpOworfQorCitzdGF0aWMgY2hhciAqZmluZF9icmFuY2hfbmFtZShzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlpbnQgaSwgcG9zaXRpdmUgPSAtMTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGJyYW5jaF9vaWQ7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdGlwX29pZDsKKwljb25zdCBjaGFyICpyZWYsICp2OworCWNoYXIgKmZ1bGxfcmVmLCAqYnJhbmNoID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCByZXYtPmNtZGxpbmUubnI7IGkrKykgeworCQlpZiAocmV2LT5jbWRsaW5lLnJldltpXS5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQljb250aW51ZTsKKwkJaWYgKHBvc2l0aXZlIDwgMCkKKwkJCXBvc2l0aXZlID0gaTsKKwkJZWxzZQorCQkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChwb3NpdGl2ZSA8IDApCisJCXJldHVybiBOVUxMOworCXJlZiA9IHJldi0+Y21kbGluZS5yZXZbcG9zaXRpdmVdLm5hbWU7CisJdGlwX29pZCA9ICZyZXYtPmNtZGxpbmUucmV2W3Bvc2l0aXZlXS5pdGVtLT5vaWQ7CisJaWYgKGR3aW1fcmVmKHJlZiwgc3RybGVuKHJlZiksICZicmFuY2hfb2lkLCAmZnVsbF9yZWYpICYmCisJICAgIHNraXBfcHJlZml4KGZ1bGxfcmVmLCAicmVmcy9oZWFkcy8iLCAmdikgJiYKKwkgICAgb2lkZXEodGlwX29pZCwgJmJyYW5jaF9vaWQpKQorCQlicmFuY2ggPSB4c3RyZHVwKHYpOworCWZyZWUoZnVsbF9yZWYpOworCXJldHVybiBicmFuY2g7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZGlmZnN0YXQoc3RydWN0IHJldl9pbmZvICpyZXYsCisJCQkgIHN0cnVjdCBjb21taXQgKm9yaWdpbiwgc3RydWN0IGNvbW1pdCAqaGVhZCkKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIG9wdHM7CisKKwltZW1jcHkoJm9wdHMsICZyZXYtPmRpZmZvcHQsIHNpemVvZihvcHRzKSk7CisJb3B0cy5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfU1VNTUFSWSB8IERJRkZfRk9STUFUX0RJRkZTVEFUOworCWRpZmZfc2V0dXBfZG9uZSgmb3B0cyk7CisKKwlkaWZmX3RyZWVfb2lkKGdldF9jb21taXRfdHJlZV9vaWQob3JpZ2luKSwKKwkJICAgICAgZ2V0X2NvbW1pdF90cmVlX29pZChoZWFkKSwKKwkJICAgICAgIiIsICZvcHRzKTsKKwlkaWZmY29yZV9zdGQoJm9wdHMpOworCWRpZmZfZmx1c2goJm9wdHMpOworCisJZnByaW50ZihyZXYtPmRpZmZvcHQuZmlsZSwgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfY292ZXJfdGV4dChzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lLAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorCQkJICAgICAgIGludCBuZWVkXzhiaXRfY3RlKQoreworCWNvbnN0IGNoYXIgKnN1YmplY3QgPSAiKioqIFNVQkpFQ1QgSEVSRSAqKioiOworCWNvbnN0IGNoYXIgKmJvZHkgPSAiKioqIEJMVVJCIEhFUkUgKioqIjsKKwlzdHJ1Y3Qgc3RyYnVmIGRlc2NyaXB0aW9uX3NiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzdWJqZWN0X3NiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fTk9ORSkKKwkJZ290byBkb19wcDsKKworCWlmIChicmFuY2hfbmFtZSAmJiAqYnJhbmNoX25hbWUpCisJCXJlYWRfYnJhbmNoX2Rlc2MoJmRlc2NyaXB0aW9uX3NiLCBicmFuY2hfbmFtZSk7CisJaWYgKCFkZXNjcmlwdGlvbl9zYi5sZW4pCisJCWdvdG8gZG9fcHA7CisKKwlpZiAoY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fU1VCSkVDVCB8fAorCQkJY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fQVVUTykKKwkJYm9keSA9IGZvcm1hdF9zdWJqZWN0KCZzdWJqZWN0X3NiLCBkZXNjcmlwdGlvbl9zYi5idWYsICIgIik7CisKKwlpZiAoY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fTUVTU0FHRSB8fAorCQkJKGNvdmVyX2Zyb21fZGVzY3JpcHRpb25fbW9kZSA9PSBDT1ZFUl9GUk9NX0FVVE8gJiYKKwkJCSBzdWJqZWN0X3NiLmxlbiA+IENPVkVSX0ZST01fQVVUT19NQVhfU1VCSkVDVF9MRU4pKQorCQlib2R5ID0gZGVzY3JpcHRpb25fc2IuYnVmOworCWVsc2UKKwkJc3ViamVjdCA9IHN1YmplY3Rfc2IuYnVmOworCitkb19wcDoKKwlwcF90aXRsZV9saW5lKHBwLCAmc3ViamVjdCwgc2IsIGVuY29kaW5nLCBuZWVkXzhiaXRfY3RlKTsKKwlwcF9yZW1haW5kZXIocHAsICZib2R5LCBzYiwgMCk7CisKKwlzdHJidWZfcmVsZWFzZSgmZGVzY3JpcHRpb25fc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZzdWJqZWN0X3NiKTsKK30KKworc3RhdGljIGludCBnZXRfbm90ZXNfcmVmcyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqYXJnKQoreworCWFyZ3ZfYXJyYXlfcHVzaGYoYXJnLCAiLS1ub3Rlcz0lcyIsIGl0ZW0tPnN0cmluZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9ub3Rlc19hcmdzKHN0cnVjdCBhcmd2X2FycmF5ICphcmcsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCWlmICghcmV2LT5zaG93X25vdGVzKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaChhcmcsICItLW5vLW5vdGVzIik7CisJfSBlbHNlIGlmIChyZXYtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA+IDAgfHwKKwkJICAgKHJldi0+bm90ZXNfb3B0LnVzZV9kZWZhdWx0X25vdGVzID09IC0xICYmCisJCSAgICAhcmV2LT5ub3Rlc19vcHQuZXh0cmFfbm90ZXNfcmVmcy5ucikpIHsKKwkJYXJndl9hcnJheV9wdXNoKGFyZywgIi0tbm90ZXMiKTsKKwl9IGVsc2UgeworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdCgmcmV2LT5ub3Rlc19vcHQuZXh0cmFfbm90ZXNfcmVmcywgZ2V0X25vdGVzX3JlZnMsIGFyZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtYWtlX2NvdmVyX2xldHRlcihzdHJ1Y3QgcmV2X2luZm8gKnJldiwgaW50IHVzZV9zdGRvdXQsCisJCQkgICAgICBzdHJ1Y3QgY29tbWl0ICpvcmlnaW4sCisJCQkgICAgICBpbnQgbnIsIHN0cnVjdCBjb21taXQgKipsaXN0LAorCQkJICAgICAgY29uc3QgY2hhciAqYnJhbmNoX25hbWUsCisJCQkgICAgICBpbnQgcXVpZXQpCit7CisJY29uc3QgY2hhciAqY29tbWl0dGVyOworCXN0cnVjdCBzaG9ydGxvZyBsb2c7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCBpOworCWNvbnN0IGNoYXIgKmVuY29kaW5nID0gIlVURi04IjsKKwlpbnQgbmVlZF84Yml0X2N0ZSA9IDA7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHBwID0gezB9OworCXN0cnVjdCBjb21taXQgKmhlYWQgPSBsaXN0WzBdOworCisJaWYgKCFjbWl0X2ZtdF9pc19tYWlsKHJldi0+Y29tbWl0X2Zvcm1hdCkpCisJCWRpZShfKCJjb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IikpOworCisJY29tbWl0dGVyID0gZ2l0X2NvbW1pdHRlcl9pbmZvKDApOworCisJaWYgKCF1c2Vfc3Rkb3V0ICYmCisJICAgIG9wZW5fbmV4dF9maWxlKE5VTEwsIHJldi0+bnVtYmVyZWRfZmlsZXMgPyBOVUxMIDogImNvdmVyLWxldHRlciIsIHJldiwgcXVpZXQpKQorCQlkaWUoXygiZmFpbGVkIHRvIGNyZWF0ZSBjb3Zlci1sZXR0ZXIgZmlsZSIpKTsKKworCWxvZ193cml0ZV9lbWFpbF9oZWFkZXJzKHJldiwgaGVhZCwgJnBwLmFmdGVyX3N1YmplY3QsICZuZWVkXzhiaXRfY3RlLCAwKTsKKworCWZvciAoaSA9IDA7ICFuZWVkXzhiaXRfY3RlICYmIGkgPCBucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmJ1ZiA9IGdldF9jb21taXRfYnVmZmVyKGxpc3RbaV0sIE5VTEwpOworCQlpZiAoaGFzX25vbl9hc2NpaShidWYpKQorCQkJbmVlZF84Yml0X2N0ZSA9IDE7CisJCXVudXNlX2NvbW1pdF9idWZmZXIobGlzdFtpXSwgYnVmKTsKKwl9CisKKwlpZiAoIWJyYW5jaF9uYW1lKQorCQlicmFuY2hfbmFtZSA9IGZpbmRfYnJhbmNoX25hbWUocmV2KTsKKworCXBwLmZtdCA9IENNSVRfRk1UX0VNQUlMOworCXBwLmRhdGVfbW9kZS50eXBlID0gREFURV9SRkMyODIyOworCXBwLnJldiA9IHJldjsKKwlwcC5wcmludF9lbWFpbF9zdWJqZWN0ID0gMTsKKwlwcF91c2VyX2luZm8oJnBwLCBOVUxMLCAmc2IsIGNvbW1pdHRlciwgZW5jb2RpbmcpOworCXByZXBhcmVfY292ZXJfdGV4dCgmcHAsIGJyYW5jaF9uYW1lLCAmc2IsIGVuY29kaW5nLCBuZWVkXzhiaXRfY3RlKTsKKwlmcHJpbnRmKHJldi0+ZGlmZm9wdC5maWxlLCAiJXNcbiIsIHNiLmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJc2hvcnRsb2dfaW5pdCgmbG9nKTsKKwlsb2cud3JhcF9saW5lcyA9IDE7CisJbG9nLndyYXAgPSBNQUlMX0RFRkFVTFRfV1JBUDsKKwlsb2cuaW4xID0gMjsKKwlsb2cuaW4yID0gNDsKKwlsb2cuZmlsZSA9IHJldi0+ZGlmZm9wdC5maWxlOworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCQlzaG9ydGxvZ19hZGRfY29tbWl0KCZsb2csIGxpc3RbaV0pOworCisJc2hvcnRsb2dfb3V0cHV0KCZsb2cpOworCisJLyogV2UgY2FuIG9ubHkgZG8gZGlmZnN0YXQgd2l0aCBhIHVuaXF1ZSByZWZlcmVuY2UgcG9pbnQgKi8KKwlpZiAob3JpZ2luKQorCQlzaG93X2RpZmZzdGF0KHJldiwgb3JpZ2luLCBoZWFkKTsKKworCWlmIChyZXYtPmlkaWZmX29pZDEpIHsKKwkJZnByaW50Zl9sbihyZXYtPmRpZmZvcHQuZmlsZSwgIiVzIiwgcmV2LT5pZGlmZl90aXRsZSk7CisJCXNob3dfaW50ZXJkaWZmKHJldiwgMCk7CisJfQorCisJaWYgKHJldi0+cmRpZmYxKSB7CisJCS8qCisJCSAqIFBhc3MgbWluaW11bSByZXF1aXJlZCBkaWZmLW9wdGlvbnMgdG8gcmFuZ2UtZGlmZjsgb3RoZXJzCisJCSAqIGNhbiBiZSBhZGRlZCBsYXRlciBpZiBkZWVtZWQgZGVzaXJhYmxlLgorCQkgKi8KKwkJc3RydWN0IGRpZmZfb3B0aW9ucyBvcHRzOworCQlzdHJ1Y3QgYXJndl9hcnJheSBvdGhlcl9hcmcgPSBBUkdWX0FSUkFZX0lOSVQ7CisJCWRpZmZfc2V0dXAoJm9wdHMpOworCQlvcHRzLmZpbGUgPSByZXYtPmRpZmZvcHQuZmlsZTsKKwkJb3B0cy51c2VfY29sb3IgPSByZXYtPmRpZmZvcHQudXNlX2NvbG9yOworCQlkaWZmX3NldHVwX2RvbmUoJm9wdHMpOworCQlmcHJpbnRmX2xuKHJldi0+ZGlmZm9wdC5maWxlLCAiJXMiLCByZXYtPnJkaWZmX3RpdGxlKTsKKwkJZ2V0X25vdGVzX2FyZ3MoJm90aGVyX2FyZywgcmV2KTsKKwkJc2hvd19yYW5nZV9kaWZmKHJldi0+cmRpZmYxLCByZXYtPnJkaWZmMiwKKwkJCQlyZXYtPmNyZWF0aW9uX2ZhY3RvciwgMSwgJm9wdHMsICZvdGhlcl9hcmcpOworCQlhcmd2X2FycmF5X2NsZWFyKCZvdGhlcl9hcmcpOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNsZWFuX21lc3NhZ2VfaWQoY29uc3QgY2hhciAqbXNnX2lkKQoreworCWNoYXIgY2g7CisJY29uc3QgY2hhciAqYSwgKnosICptOworCisJbSA9IG1zZ19pZDsKKwl3aGlsZSAoKGNoID0gKm0pICYmIChpc3NwYWNlKGNoKSB8fCAoY2ggPT0gJzwnKSkpCisJCW0rKzsKKwlhID0gbTsKKwl6ID0gTlVMTDsKKwl3aGlsZSAoKGNoID0gKm0pKSB7CisJCWlmICghaXNzcGFjZShjaCkgJiYgKGNoICE9ICc+JykpCisJCQl6ID0gbTsKKwkJbSsrOworCX0KKwlpZiAoIXopCisJCWRpZShfKCJpbnNhbmUgaW4tcmVwbHktdG86ICVzIiksIG1zZ19pZCk7CisJaWYgKCsreiA9PSBtKQorCQlyZXR1cm4gYTsKKwlyZXR1cm4geG1lbWR1cHooYSwgeiAtIGEpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2V0X291dGRpcihjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKm91dHB1dF9kaXJlY3RvcnkpCit7CisJaWYgKG91dHB1dF9kaXJlY3RvcnkgJiYgaXNfYWJzb2x1dGVfcGF0aChvdXRwdXRfZGlyZWN0b3J5KSkKKwkJcmV0dXJuIG91dHB1dF9kaXJlY3Rvcnk7CisKKwlpZiAoIXByZWZpeCB8fCAhKnByZWZpeCkgeworCQlpZiAob3V0cHV0X2RpcmVjdG9yeSkKKwkJCXJldHVybiBvdXRwdXRfZGlyZWN0b3J5OworCQkvKiBUaGUgdXNlciBkaWQgbm90IGV4cGxpY2l0bHkgYXNrIGZvciAiLi8iICovCisJCW91dGRpcl9vZmZzZXQgPSAyOworCQlyZXR1cm4gIi4vIjsKKwl9CisKKwlvdXRkaXJfb2Zmc2V0ID0gc3RybGVuKHByZWZpeCk7CisJaWYgKCFvdXRwdXRfZGlyZWN0b3J5KQorCQlyZXR1cm4gcHJlZml4OworCisJcmV0dXJuIHByZWZpeF9maWxlbmFtZShwcmVmaXgsIG91dHB1dF9kaXJlY3RvcnkpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fZm9ybWF0X3BhdGNoX3VzYWdlW10gPSB7CisJTl8oImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHRpb25zPl0gWzxzaW5jZT4gfCA8cmV2aXNpb24tcmFuZ2U+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQga2VlcF9zdWJqZWN0ID0gMDsKKworc3RhdGljIGludCBrZWVwX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisJKChzdHJ1Y3QgcmV2X2luZm8gKilvcHQtPnZhbHVlKS0+dG90YWwgPSAtMTsKKwlrZWVwX3N1YmplY3QgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1YmplY3RfcHJlZml4ID0gMDsKKworc3RhdGljIGludCBzdWJqZWN0X3ByZWZpeF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICBpbnQgdW5zZXQpCit7CisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCXN1YmplY3RfcHJlZml4ID0gMTsKKwkoKHN0cnVjdCByZXZfaW5mbyAqKW9wdC0+dmFsdWUpLT5zdWJqZWN0X3ByZWZpeCA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZmNfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJQlVHX09OX09QVF9BUkcoYXJnKTsKKwlyZXR1cm4gc3ViamVjdF9wcmVmaXhfY2FsbGJhY2sob3B0LCAiUkZDIFBBVENIIiwgdW5zZXQpOworfQorCitzdGF0aWMgaW50IG51bWJlcmVkX2NtZGxpbmVfb3B0ID0gMDsKKworc3RhdGljIGludCBudW1iZXJlZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICAgaW50IHVuc2V0KQoreworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisJKihpbnQgKilvcHQtPnZhbHVlID0gbnVtYmVyZWRfY21kbGluZV9vcHQgPSB1bnNldCA/IDAgOiAxOworCWlmICh1bnNldCkKKwkJYXV0b19udW1iZXIgPSAgMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBub19udW1iZXJlZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCQlpbnQgdW5zZXQpCit7CisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCXJldHVybiBudW1iZXJlZF9jYWxsYmFjayhvcHQsIGFyZywgMSk7Cit9CisKK3N0YXRpYyBpbnQgb3V0cHV0X2RpcmVjdG9yeV9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICAgIGludCB1bnNldCkKK3sKKwljb25zdCBjaGFyICoqZGlyID0gKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZTsKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJaWYgKCpkaXIpCisJCWRpZShfKCJ0d28gb3V0cHV0IGRpcmVjdG9yaWVzPyIpKTsKKwkqZGlyID0gYXJnOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRocmVhZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWVudW0gdGhyZWFkX2xldmVsICp0aHJlYWQgPSAoZW51bSB0aHJlYWRfbGV2ZWwgKilvcHQtPnZhbHVlOworCWlmICh1bnNldCkKKwkJKnRocmVhZCA9IFRIUkVBRF9VTlNFVDsKKwllbHNlIGlmICghYXJnIHx8ICFzdHJjbXAoYXJnLCAic2hhbGxvdyIpKQorCQkqdGhyZWFkID0gVEhSRUFEX1NIQUxMT1c7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJkZWVwIikpCisJCSp0aHJlYWQgPSBUSFJFQURfREVFUDsKKwkvKgorCSAqIFBsZWFzZSB1cGRhdGUgX2dpdF9mb3JtYXRwYXRjaCgpIGluIGdpdC1jb21wbGV0aW9uLmJhc2gKKwkgKiB3aGVuIHlvdSBhZGQgbmV3IG9wdGlvbnMuCisJICovCisJZWxzZQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdHRhY2hfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldiA9IChzdHJ1Y3QgcmV2X2luZm8gKilvcHQtPnZhbHVlOworCWlmICh1bnNldCkKKwkJcmV2LT5taW1lX2JvdW5kYXJ5ID0gTlVMTDsKKwllbHNlIGlmIChhcmcpCisJCXJldi0+bWltZV9ib3VuZGFyeSA9IGFyZzsKKwllbHNlCisJCXJldi0+bWltZV9ib3VuZGFyeSA9IGdpdF92ZXJzaW9uX3N0cmluZzsKKwlyZXYtPm5vX2lubGluZSA9IHVuc2V0ID8gMCA6IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5saW5lX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IHJldl9pbmZvICpyZXYgPSAoc3RydWN0IHJldl9pbmZvICopb3B0LT52YWx1ZTsKKwlpZiAodW5zZXQpCisJCXJldi0+bWltZV9ib3VuZGFyeSA9IE5VTEw7CisJZWxzZSBpZiAoYXJnKQorCQlyZXYtPm1pbWVfYm91bmRhcnkgPSBhcmc7CisJZWxzZQorCQlyZXYtPm1pbWVfYm91bmRhcnkgPSBnaXRfdmVyc2lvbl9zdHJpbmc7CisJcmV2LT5ub19pbmxpbmUgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhlYWRlcl9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCkgeworCQlzdHJpbmdfbGlzdF9jbGVhcigmZXh0cmFfaGRyLCAwKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX3RvLCAwKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX2NjLCAwKTsKKwl9IGVsc2UgeworCQlhZGRfaGVhZGVyKGFyZyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KQorCQlzdHJpbmdfbGlzdF9jbGVhcigmZXh0cmFfdG8sIDApOworCWVsc2UKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZleHRyYV90bywgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjY19jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCkKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX2NjLCAwKTsKKwllbHNlCisJCXN0cmluZ19saXN0X2FwcGVuZCgmZXh0cmFfY2MsIGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnJvbV9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWNoYXIgKipmcm9tID0gb3B0LT52YWx1ZTsKKworCWZyZWUoKmZyb20pOworCisJaWYgKHVuc2V0KQorCQkqZnJvbSA9IE5VTEw7CisJZWxzZSBpZiAoYXJnKQorCQkqZnJvbSA9IHhzdHJkdXAoYXJnKTsKKwllbHNlCisJCSpmcm9tID0geHN0cmR1cChnaXRfY29tbWl0dGVyX2luZm8oSURFTlRfTk9fREFURSkpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgYmFzZV90cmVlX2luZm8geworCXN0cnVjdCBvYmplY3RfaWQgYmFzZV9jb21taXQ7CisJaW50IG5yX3BhdGNoX2lkLCBhbGxvY19wYXRjaF9pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpwYXRjaF9pZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpnZXRfYmFzZV9jb21taXQoY29uc3QgY2hhciAqYmFzZV9jb21taXQsCisJCQkJICAgICAgc3RydWN0IGNvbW1pdCAqKmxpc3QsCisJCQkJICAgICAgaW50IHRvdGFsKQoreworCXN0cnVjdCBjb21taXQgKmJhc2UgPSBOVUxMOworCXN0cnVjdCBjb21taXQgKipyZXY7CisJaW50IGkgPSAwLCByZXZfbnIgPSAwOworCisJaWYgKGJhc2VfY29tbWl0ICYmIHN0cmNtcChiYXNlX2NvbW1pdCwgImF1dG8iKSkgeworCQliYXNlID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShiYXNlX2NvbW1pdCk7CisJCWlmICghYmFzZSkKKwkJCWRpZShfKCJ1bmtub3duIGNvbW1pdCAlcyIpLCBiYXNlX2NvbW1pdCk7CisJfSBlbHNlIGlmICgoYmFzZV9jb21taXQgJiYgIXN0cmNtcChiYXNlX2NvbW1pdCwgImF1dG8iKSkpIHsKKwkJc3RydWN0IGJyYW5jaCAqY3Vycl9icmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOworCQljb25zdCBjaGFyICp1cHN0cmVhbSA9IGJyYW5jaF9nZXRfdXBzdHJlYW0oY3Vycl9icmFuY2gsIE5VTEwpOworCQlpZiAodXBzdHJlYW0pIHsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqYmFzZV9saXN0OworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJCWlmIChnZXRfb2lkKHVwc3RyZWFtLCAmb2lkKSkKKwkJCQlkaWUoXygiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZiIpLCB1cHN0cmVhbSk7CisJCQljb21taXQgPSBsb29rdXBfY29tbWl0X29yX2RpZSgmb2lkLCAidXBzdHJlYW0gYmFzZSIpOworCQkJYmFzZV9saXN0ID0gZ2V0X21lcmdlX2Jhc2VzX21hbnkoY29tbWl0LCB0b3RhbCwgbGlzdCk7CisJCQkvKiBUaGVyZSBzaG91bGQgYmUgb25lIGFuZCBvbmx5IG9uZSBtZXJnZSBiYXNlLiAqLworCQkJaWYgKCFiYXNlX2xpc3QgfHwgYmFzZV9saXN0LT5uZXh0KQorCQkJCWRpZShfKCJjb3VsZCBub3QgZmluZCBleGFjdCBtZXJnZSBiYXNlIikpOworCQkJYmFzZSA9IGJhc2VfbGlzdC0+aXRlbTsKKwkJCWZyZWVfY29tbWl0X2xpc3QoYmFzZV9saXN0KTsKKwkJfSBlbHNlIHsKKwkJCWRpZShfKCJmYWlsZWQgdG8gZ2V0IHVwc3RyZWFtLCBpZiB5b3Ugd2FudCB0byByZWNvcmQgYmFzZSBjb21taXQgYXV0b21hdGljYWxseSxcbiIKKwkJCSAgICAgICJwbGVhc2UgdXNlIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gdG8gdHJhY2sgYSByZW1vdGUgYnJhbmNoLlxuIgorCQkJICAgICAgIk9yIHlvdSBjb3VsZCBzcGVjaWZ5IGJhc2UgY29tbWl0IGJ5IC0tYmFzZT08YmFzZS1jb21taXQtaWQ+IG1hbnVhbGx5IikpOworCQl9CisJfQorCisJQUxMT0NfQVJSQVkocmV2LCB0b3RhbCk7CisJZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspCisJCXJldltpXSA9IGxpc3RbaV07CisKKwlyZXZfbnIgPSB0b3RhbDsKKwkvKgorCSAqIEdldCBtZXJnZSBiYXNlIHRocm91Z2ggcGFpci13aXNlIGNvbXB1dGF0aW9ucworCSAqIGFuZCBzdG9yZSBpdCBpbiByZXZbMF0uCisJICovCisJd2hpbGUgKHJldl9uciA+IDEpIHsKKwkJZm9yIChpID0gMDsgaSA8IHJldl9uciAvIDI7IGkrKykgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICptZXJnZV9iYXNlOworCQkJbWVyZ2VfYmFzZSA9IGdldF9tZXJnZV9iYXNlcyhyZXZbMiAqIGldLCByZXZbMiAqIGkgKyAxXSk7CisJCQlpZiAoIW1lcmdlX2Jhc2UgfHwgbWVyZ2VfYmFzZS0+bmV4dCkKKwkJCQlkaWUoXygiZmFpbGVkIHRvIGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIpKTsKKworCQkJcmV2W2ldID0gbWVyZ2VfYmFzZS0+aXRlbTsKKwkJfQorCisJCWlmIChyZXZfbnIgJSAyKQorCQkJcmV2W2ldID0gcmV2WzIgKiBpXTsKKwkJcmV2X25yID0gRElWX1JPVU5EX1VQKHJldl9uciwgMik7CisJfQorCisJaWYgKCFpbl9tZXJnZV9iYXNlcyhiYXNlLCByZXZbMF0pKQorCQlkaWUoXygiYmFzZSBjb21taXQgc2hvdWxkIGJlIHRoZSBhbmNlc3RvciBvZiByZXZpc2lvbiBsaXN0IikpOworCisJZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHsKKwkJaWYgKGJhc2UgPT0gbGlzdFtpXSkKKwkJCWRpZShfKCJiYXNlIGNvbW1pdCBzaG91bGRuJ3QgYmUgaW4gcmV2aXNpb24gbGlzdCIpKTsKKwl9CisKKwlmcmVlKHJldik7CisJcmV0dXJuIGJhc2U7Cit9CisKK2RlZmluZV9jb21taXRfc2xhYihjb21taXRfYmFzZSwgaW50KTsKKworc3RhdGljIHZvaWQgcHJlcGFyZV9iYXNlcyhzdHJ1Y3QgYmFzZV90cmVlX2luZm8gKmJhc2VzLAorCQkJICBzdHJ1Y3QgY29tbWl0ICpiYXNlLAorCQkJICBzdHJ1Y3QgY29tbWl0ICoqbGlzdCwKKwkJCSAgaW50IHRvdGFsKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZvcHQ7CisJc3RydWN0IGNvbW1pdF9iYXNlIGNvbW1pdF9iYXNlOworCWludCBpOworCisJaWYgKCFiYXNlKQorCQlyZXR1cm47CisKKwlpbml0X2NvbW1pdF9iYXNlKCZjb21taXRfYmFzZSk7CisJcmVwb19kaWZmX3NldHVwKHRoZV9yZXBvc2l0b3J5LCAmZGlmZm9wdCk7CisJZGlmZm9wdC5mbGFncy5yZWN1cnNpdmUgPSAxOworCWRpZmZfc2V0dXBfZG9uZSgmZGlmZm9wdCk7CisKKwlvaWRjcHkoJmJhc2VzLT5iYXNlX2NvbW1pdCwgJmJhc2UtPm9iamVjdC5vaWQpOworCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldnMsIE5VTEwpOworCXJldnMubWF4X3BhcmVudHMgPSAxOworCXJldnMudG9wb19vcmRlciA9IDE7CisJZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHsKKwkJbGlzdFtpXS0+b2JqZWN0LmZsYWdzICY9IH5VTklOVEVSRVNUSU5HOworCQlhZGRfcGVuZGluZ19vYmplY3QoJnJldnMsICZsaXN0W2ldLT5vYmplY3QsICJyZXZfbGlzdCIpOworCQkqY29tbWl0X2Jhc2VfYXQoJmNvbW1pdF9iYXNlLCBsaXN0W2ldKSA9IDE7CisJfQorCWJhc2UtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2cywgJmJhc2UtPm9iamVjdCwgImJhc2UiKTsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisJLyoKKwkgKiBUcmF2ZXJzZSB0aGUgY29tbWl0cyBsaXN0LCBnZXQgcHJlcmVxdWlzaXRlIHBhdGNoIGlkcworCSAqIGFuZCBzdHVmZiB0aGVtIGluIGJhc2VzIHN0cnVjdHVyZS4KKwkgKi8KKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2cykpICE9IE5VTEwpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBvYmplY3RfaWQgKnBhdGNoX2lkOworCQlpZiAoKmNvbW1pdF9iYXNlX2F0KCZjb21taXRfYmFzZSwgY29tbWl0KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY29tbWl0X3BhdGNoX2lkKGNvbW1pdCwgJmRpZmZvcHQsICZvaWQsIDAsIDEpKQorCQkJZGllKF8oImNhbm5vdCBnZXQgcGF0Y2ggaWQiKSk7CisJCUFMTE9DX0dST1coYmFzZXMtPnBhdGNoX2lkLCBiYXNlcy0+bnJfcGF0Y2hfaWQgKyAxLCBiYXNlcy0+YWxsb2NfcGF0Y2hfaWQpOworCQlwYXRjaF9pZCA9IGJhc2VzLT5wYXRjaF9pZCArIGJhc2VzLT5ucl9wYXRjaF9pZDsKKwkJb2lkY3B5KHBhdGNoX2lkLCAmb2lkKTsKKwkJYmFzZXMtPm5yX3BhdGNoX2lkKys7CisJfQorCWNsZWFyX2NvbW1pdF9iYXNlKCZjb21taXRfYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2Jhc2VzKHN0cnVjdCBiYXNlX3RyZWVfaW5mbyAqYmFzZXMsIEZJTEUgKmZpbGUpCit7CisJaW50IGk7CisKKwkvKiBPbmx5IGRvIHRoaXMgb25jZSwgZWl0aGVyIGZvciB0aGUgY292ZXIgb3IgZm9yIHRoZSBmaXJzdCBvbmUgKi8KKwlpZiAoaXNfbnVsbF9vaWQoJmJhc2VzLT5iYXNlX2NvbW1pdCkpCisJCXJldHVybjsKKworCS8qIFNob3cgdGhlIGJhc2UgY29tbWl0ICovCisJZnByaW50ZihmaWxlLCAiXG5iYXNlLWNvbW1pdDogJXNcbiIsIG9pZF90b19oZXgoJmJhc2VzLT5iYXNlX2NvbW1pdCkpOworCisJLyogU2hvdyB0aGUgcHJlcmVxdWlzaXRlIHBhdGNoZXMgKi8KKwlmb3IgKGkgPSBiYXNlcy0+bnJfcGF0Y2hfaWQgLSAxOyBpID49IDA7IGktLSkKKwkJZnByaW50ZihmaWxlLCAicHJlcmVxdWlzaXRlLXBhdGNoLWlkOiAlc1xuIiwgb2lkX3RvX2hleCgmYmFzZXMtPnBhdGNoX2lkW2ldKSk7CisKKwlmcmVlKGJhc2VzLT5wYXRjaF9pZCk7CisJYmFzZXMtPm5yX3BhdGNoX2lkID0gMDsKKwliYXNlcy0+YWxsb2NfcGF0Y2hfaWQgPSAwOworCW9pZGNscigmYmFzZXMtPmJhc2VfY29tbWl0KTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmRpZmZfdGl0bGUoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCByZXJvbGxfY291bnQsCisJCSAgICAgICBjb25zdCBjaGFyICpnZW5lcmljLCBjb25zdCBjaGFyICpyZXJvbGxlZCkKK3sKKwlpZiAocmVyb2xsX2NvdW50IDw9IDApCisJCXN0cmJ1Zl9hZGRzdHIoc2IsIGdlbmVyaWMpOworCWVsc2UgLyogUkZDIG1heSBiZSB2MCwgc28gYWxsb3cgLXYxIHRvIGRpZmYgYWdhaW5zdCB2MCAqLworCQlzdHJidWZfYWRkZihzYiwgcmVyb2xsZWQsIHJlcm9sbF9jb3VudCAtIDEpOworCXJldHVybiBzYi0+YnVmOworfQorCitzdGF0aWMgdm9pZCBpbmZlcl9yYW5nZV9kaWZmX3JhbmdlcyhzdHJ1Y3Qgc3RyYnVmICpyMSwKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqcjIsCisJCQkJICAgIGNvbnN0IGNoYXIgKnByZXYsCisJCQkJICAgIHN0cnVjdCBjb21taXQgKm9yaWdpbiwKKwkJCQkgICAgc3RydWN0IGNvbW1pdCAqaGVhZCkKK3sKKwljb25zdCBjaGFyICpoZWFkX29pZCA9IG9pZF90b19oZXgoJmhlYWQtPm9iamVjdC5vaWQpOworCisJaWYgKCFzdHJzdHIocHJldiwgIi4uIikpIHsKKwkJc3RyYnVmX2FkZGYocjEsICIlcy4uJXMiLCBoZWFkX29pZCwgcHJldik7CisJCXN0cmJ1Zl9hZGRmKHIyLCAiJXMuLiVzIiwgcHJldiwgaGVhZF9vaWQpOworCX0gZWxzZSBpZiAoIW9yaWdpbikgeworCQlkaWUoXygiZmFpbGVkIHRvIGluZmVyIHJhbmdlLWRpZmYgcmFuZ2VzIikpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIocjEsIHByZXYpOworCQlzdHJidWZfYWRkZihyMiwgIiVzLi4lcyIsCisJCQkgICAgb2lkX3RvX2hleCgmb3JpZ2luLT5vYmplY3Qub2lkKSwgaGVhZF9vaWQpOworCX0KK30KKworaW50IGNtZF9mb3JtYXRfcGF0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXQgKipsaXN0ID0gTlVMTDsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgc19yX29wdDsKKwlpbnQgbnIgPSAwLCB0b3RhbCwgaTsKKwlpbnQgdXNlX3N0ZG91dCA9IDA7CisJaW50IHN0YXJ0X251bWJlciA9IC0xOworCWludCBqdXN0X251bWJlcnMgPSAwOworCWludCBpZ25vcmVfaWZfaW5fdXBzdHJlYW0gPSAwOworCWludCBjb3Zlcl9sZXR0ZXIgPSAtMTsKKwlpbnQgYm91bmRhcnlfY291bnQgPSAwOworCWludCBub19iaW5hcnlfZGlmZiA9IDA7CisJaW50IHplcm9fY29tbWl0ID0gMDsKKwlzdHJ1Y3QgY29tbWl0ICpvcmlnaW4gPSBOVUxMOworCWNvbnN0IGNoYXIgKmluX3JlcGx5X3RvID0gTlVMTDsKKwlzdHJ1Y3QgcGF0Y2hfaWRzIGlkczsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCB1c2VfcGF0Y2hfZm9ybWF0ID0gMDsKKwlpbnQgcXVpZXQgPSAwOworCWludCByZXJvbGxfY291bnQgPSAtMTsKKwljaGFyICpjb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uX2FyZyA9IE5VTEw7CisJY2hhciAqYnJhbmNoX25hbWUgPSBOVUxMOworCWNoYXIgKmJhc2VfY29tbWl0ID0gTlVMTDsKKwlzdHJ1Y3QgYmFzZV90cmVlX2luZm8gYmFzZXM7CisJaW50IHNob3dfcHJvZ3Jlc3MgPSAwOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCXN0cnVjdCBvaWRfYXJyYXkgaWRpZmZfcHJldiA9IE9JRF9BUlJBWV9JTklUOworCXN0cnVjdCBzdHJidWYgaWRpZmZfdGl0bGUgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpyZGlmZl9wcmV2ID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIHJkaWZmMSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcmRpZmYyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiByZGlmZl90aXRsZSA9IFNUUkJVRl9JTklUOworCWludCBjcmVhdGlvbl9mYWN0b3IgPSAtMTsKKworCWNvbnN0IHN0cnVjdCBvcHRpb24gYnVpbHRpbl9mb3JtYXRfcGF0Y2hfb3B0aW9uc1tdID0geworCQlPUFRfQ0FMTEJBQ0tfRignbicsICJudW1iZXJlZCIsICZudW1iZXJlZCwgTlVMTCwKKwkJCSAgICBOXygidXNlIFtQQVRDSCBuL21dIGV2ZW4gd2l0aCBhIHNpbmdsZSBwYXRjaCIpLAorCQkJICAgIFBBUlNFX09QVF9OT0FSRywgbnVtYmVyZWRfY2FsbGJhY2spLAorCQlPUFRfQ0FMTEJBQ0tfRignTicsICJuby1udW1iZXJlZCIsICZudW1iZXJlZCwgTlVMTCwKKwkJCSAgICBOXygidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiKSwKKwkJCSAgICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIG5vX251bWJlcmVkX2NhbGxiYWNrKSwKKwkJT1BUX0JPT0woJ3MnLCAic2lnbm9mZiIsICZkb19zaWdub2ZmLCBOXygiYWRkIFNpZ25lZC1vZmYtYnk6IikpLAorCQlPUFRfQk9PTCgwLCAic3Rkb3V0IiwgJnVzZV9zdGRvdXQsCisJCQkgICAgTl8oInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IikpLAorCQlPUFRfQk9PTCgwLCAiY292ZXItbGV0dGVyIiwgJmNvdmVyX2xldHRlciwKKwkJCSAgICBOXygiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiKSksCisJCU9QVF9CT09MKDAsICJudW1iZXJlZC1maWxlcyIsICZqdXN0X251bWJlcnMsCisJCQkgICAgTl8oInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIpKSwKKwkJT1BUX1NUUklORygwLCAic3VmZml4IiwgJmZtdF9wYXRjaF9zdWZmaXgsIE5fKCJzZngiKSwKKwkJCSAgICBOXygidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciKSksCisJCU9QVF9JTlRFR0VSKDAsICJzdGFydC1udW1iZXIiLCAmc3RhcnRfbnVtYmVyLAorCQkJICAgIE5fKCJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIikpLAorCQlPUFRfSU5URUdFUigndicsICJyZXJvbGwtY291bnQiLCAmcmVyb2xsX2NvdW50LAorCQkJICAgIE5fKCJtYXJrIHRoZSBzZXJpZXMgYXMgTnRoIHJlLXJvbGwiKSksCisJCU9QVF9DQUxMQkFDS19GKDAsICJyZmMiLCAmcmV2LCBOVUxMLAorCQkJICAgIE5fKCJVc2UgW1JGQyBQQVRDSF0gaW5zdGVhZCBvZiBbUEFUQ0hdIiksCisJCQkgICAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCByZmNfY2FsbGJhY2spLAorCQlPUFRfU1RSSU5HKDAsICJjb3Zlci1mcm9tLWRlc2NyaXB0aW9uIiwgJmNvdmVyX2Zyb21fZGVzY3JpcHRpb25fYXJnLAorCQkJICAgIE5fKCJjb3Zlci1mcm9tLWRlc2NyaXB0aW9uLW1vZGUiKSwKKwkJCSAgICBOXygiZ2VuZXJhdGUgcGFydHMgb2YgYSBjb3ZlciBsZXR0ZXIgYmFzZWQgb24gYSBicmFuY2gncyBkZXNjcmlwdGlvbiIpKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgInN1YmplY3QtcHJlZml4IiwgJnJldiwgTl8oInByZWZpeCIpLAorCQkJICAgIE5fKCJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iKSwKKwkJCSAgICBQQVJTRV9PUFRfTk9ORUcsIHN1YmplY3RfcHJlZml4X2NhbGxiYWNrKSwKKwkJT1BUX0NBTExCQUNLX0YoJ28nLCAib3V0cHV0LWRpcmVjdG9yeSIsICZvdXRwdXRfZGlyZWN0b3J5LAorCQkJICAgIE5fKCJkaXIiKSwgTl8oInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIpLAorCQkJICAgIFBBUlNFX09QVF9OT05FRywgb3V0cHV0X2RpcmVjdG9yeV9jYWxsYmFjayksCisJCU9QVF9DQUxMQkFDS19GKCdrJywgImtlZXAtc3ViamVjdCIsICZyZXYsIE5VTEwsCisJCQkgICAgTl8oImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIiksCisJCQkgICAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBrZWVwX2NhbGxiYWNrKSwKKwkJT1BUX0JPT0woMCwgIm5vLWJpbmFyeSIsICZub19iaW5hcnlfZGlmZiwKKwkJCSBOXygiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIpKSwKKwkJT1BUX0JPT0woMCwgInplcm8tY29tbWl0IiwgJnplcm9fY29tbWl0LAorCQkJIE5fKCJvdXRwdXQgYWxsLXplcm8gaGFzaCBpbiBGcm9tIGhlYWRlciIpKSwKKwkJT1BUX0JPT0woMCwgImlnbm9yZS1pZi1pbi11cHN0cmVhbSIsICZpZ25vcmVfaWZfaW5fdXBzdHJlYW0sCisJCQkgTl8oImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIpKSwKKwkJT1BUX1NFVF9JTlRfRigncCcsICJuby1zdGF0IiwgJnVzZV9wYXRjaF9mb3JtYXQsCisJCQkgICAgICBOXygic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIiksCisJCQkgICAgICAxLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfR1JPVVAoTl8oIk1lc3NhZ2luZyIpKSwKKwkJT1BUX0NBTExCQUNLKDAsICJhZGQtaGVhZGVyIiwgTlVMTCwgTl8oImhlYWRlciIpLAorCQkJICAgIE5fKCJhZGQgZW1haWwgaGVhZGVyIiksIGhlYWRlcl9jYWxsYmFjayksCisJCU9QVF9DQUxMQkFDSygwLCAidG8iLCBOVUxMLCBOXygiZW1haWwiKSwgTl8oImFkZCBUbzogaGVhZGVyIiksIHRvX2NhbGxiYWNrKSwKKwkJT1BUX0NBTExCQUNLKDAsICJjYyIsIE5VTEwsIE5fKCJlbWFpbCIpLCBOXygiYWRkIENjOiBoZWFkZXIiKSwgY2NfY2FsbGJhY2spLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAiZnJvbSIsICZmcm9tLCBOXygiaWRlbnQiKSwKKwkJCSAgICBOXygic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIpLAorCQkJICAgIFBBUlNFX09QVF9PUFRBUkcsIGZyb21fY2FsbGJhY2spLAorCQlPUFRfU1RSSU5HKDAsICJpbi1yZXBseS10byIsICZpbl9yZXBseV90bywgTl8oIm1lc3NhZ2UtaWQiKSwKKwkJCSAgICBOXygibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IikpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAiYXR0YWNoIiwgJnJldiwgTl8oImJvdW5kYXJ5IiksCisJCQkgICAgTl8oImF0dGFjaCB0aGUgcGF0Y2giKSwgUEFSU0VfT1BUX09QVEFSRywKKwkJCSAgICBhdHRhY2hfY2FsbGJhY2spLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAiaW5saW5lIiwgJnJldiwgTl8oImJvdW5kYXJ5IiksCisJCQkgICAgTl8oImlubGluZSB0aGUgcGF0Y2giKSwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLAorCQkJICAgIGlubGluZV9jYWxsYmFjayksCisJCU9QVF9DQUxMQkFDS19GKDAsICJ0aHJlYWQiLCAmdGhyZWFkLCBOXygic3R5bGUiKSwKKwkJCSAgICBOXygiZW5hYmxlIG1lc3NhZ2UgdGhyZWFkaW5nLCBzdHlsZXM6IHNoYWxsb3csIGRlZXAiKSwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHLCB0aHJlYWRfY2FsbGJhY2spLAorCQlPUFRfU1RSSU5HKDAsICJzaWduYXR1cmUiLCAmc2lnbmF0dXJlLCBOXygic2lnbmF0dXJlIiksCisJCQkgICAgTl8oImFkZCBhIHNpZ25hdHVyZSIpKSwKKwkJT1BUX1NUUklORygwLCAiYmFzZSIsICZiYXNlX2NvbW1pdCwgTl8oImJhc2UtY29tbWl0IiksCisJCQkgICBOXygiYWRkIHByZXJlcXVpc2l0ZSB0cmVlIGluZm8gdG8gdGhlIHBhdGNoIHNlcmllcyIpKSwKKwkJT1BUX0ZJTEVOQU1FKDAsICJzaWduYXR1cmUtZmlsZSIsICZzaWduYXR1cmVfZmlsZSwKKwkJCQlOXygiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIikpLAorCQlPUFRfX1FVSUVUKCZxdWlldCwgTl8oImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiKSksCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZzaG93X3Byb2dyZXNzLAorCQkJIE5fKCJzaG93IHByb2dyZXNzIHdoaWxlIGdlbmVyYXRpbmcgcGF0Y2hlcyIpKSwKKwkJT1BUX0NBTExCQUNLKDAsICJpbnRlcmRpZmYiLCAmaWRpZmZfcHJldiwgTl8oInJldiIpLAorCQkJICAgICBOXygic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJldj4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIpLAorCQkJICAgICBwYXJzZV9vcHRfb2JqZWN0X25hbWUpLAorCQlPUFRfU1RSSU5HKDAsICJyYW5nZS1kaWZmIiwgJnJkaWZmX3ByZXYsIE5fKCJyZWZzcGVjIiksCisJCQkgICBOXygic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJlZnNwZWM+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giKSksCisJCU9QVF9JTlRFR0VSKDAsICJjcmVhdGlvbi1mYWN0b3IiLCAmY3JlYXRpb25fZmFjdG9yLAorCQkJICAgIE5fKCJwZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZXh0cmFfaGRyLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlleHRyYV90by5zdHJkdXBfc3RyaW5ncyA9IDE7CisJZXh0cmFfY2Muc3RyZHVwX3N0cmluZ3MgPSAxOworCWluaXRfbG9nX2RlZmF1bHRzKCk7CisJaW5pdF9kaXNwbGF5X25vdGVzKCZub3Rlc19vcHQpOworCWdpdF9jb25maWcoZ2l0X2Zvcm1hdF9jb25maWcsIE5VTEwpOworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIHByZWZpeCk7CisJcmV2LnNob3dfbm90ZXMgPSBzaG93X25vdGVzOworCW1lbWNweSgmcmV2Lm5vdGVzX29wdCwgJm5vdGVzX29wdCwgc2l6ZW9mKG5vdGVzX29wdCkpOworCXJldi5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfRU1BSUw7CisJcmV2LmVuY29kZV9lbWFpbF9oZWFkZXJzID0gZGVmYXVsdF9lbmNvZGVfZW1haWxfaGVhZGVyczsKKwlyZXYuZXhwYW5kX3RhYnNfaW5fbG9nX2RlZmF1bHQgPSAwOworCXJldi52ZXJib3NlX2hlYWRlciA9IDE7CisJcmV2LmRpZmYgPSAxOworCXJldi5tYXhfcGFyZW50cyA9IDE7CisJcmV2LmRpZmZvcHQuZmxhZ3MucmVjdXJzaXZlID0gMTsKKwlyZXYuc3ViamVjdF9wcmVmaXggPSBmbXRfcGF0Y2hfc3ViamVjdF9wcmVmaXg7CisJbWVtc2V0KCZzX3Jfb3B0LCAwLCBzaXplb2Yoc19yX29wdCkpOworCXNfcl9vcHQuZGVmID0gIkhFQUQiOworCXNfcl9vcHQucmV2YXJnX29wdCA9IFJFVkFSR19DT01NSVRUSVNIOworCisJaWYgKGJhc2VfYXV0bykKKwkJYmFzZV9jb21taXQgPSAiYXV0byI7CisKKwlpZiAoZGVmYXVsdF9hdHRhY2gpIHsKKwkJcmV2Lm1pbWVfYm91bmRhcnkgPSBkZWZhdWx0X2F0dGFjaDsKKwkJcmV2Lm5vX2lubGluZSA9IDE7CisJfQorCisJLyoKKwkgKiBQYXJzZSB0aGUgYXJndW1lbnRzIGJlZm9yZSBzZXR1cF9yZXZpc2lvbnMoKSwgb3Igc29tZXRoaW5nCisJICogbGlrZSAiZ2l0IGZvcm1hdC1wYXRjaCAtbyBhMTIzIEhFQUReLi4iIG1heSBmYWlsOyBhMTIzIGlzCisJICogcG9zc2libHkgYSB2YWxpZCBTSEExLgorCSAqLworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9mb3JtYXRfcGF0Y2hfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9mb3JtYXRfcGF0Y2hfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwIHwgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTiB8CisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKKworCWlmIChjb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uX2FyZykKKwkJY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID0gcGFyc2VfY292ZXJfZnJvbV9kZXNjcmlwdGlvbihjb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uX2FyZyk7CisKKwlpZiAoMCA8IHJlcm9sbF9jb3VudCkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNwcmVmaXggPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZGYoJnNwcmVmaXgsICIlcyB2JWQiLAorCQkJICAgIHJldi5zdWJqZWN0X3ByZWZpeCwgcmVyb2xsX2NvdW50KTsKKwkJcmV2LnJlcm9sbF9jb3VudCA9IHJlcm9sbF9jb3VudDsKKwkJcmV2LnN1YmplY3RfcHJlZml4ID0gc3RyYnVmX2RldGFjaCgmc3ByZWZpeCwgTlVMTCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGV4dHJhX2hkci5ucjsgaSsrKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZXh0cmFfaGRyLml0ZW1zW2ldLnN0cmluZyk7CisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwl9CisKKwlpZiAoZXh0cmFfdG8ubnIpCisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIlRvOiAiKTsKKwlmb3IgKGkgPSAwOyBpIDwgZXh0cmFfdG8ubnI7IGkrKykgeworCQlpZiAoaSkKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiAgICAiKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBleHRyYV90by5pdGVtc1tpXS5zdHJpbmcpOworCQlpZiAoaSArIDEgPCBleHRyYV90by5ucikKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnLCcpOworCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJfQorCisJaWYgKGV4dHJhX2NjLm5yKQorCQlzdHJidWZfYWRkc3RyKCZidWYsICJDYzogIik7CisJZm9yIChpID0gMDsgaSA8IGV4dHJhX2NjLm5yOyBpKyspIHsKKwkJaWYgKGkpCisJCQlzdHJidWZfYWRkc3RyKCZidWYsICIgICAgIik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZXh0cmFfY2MuaXRlbXNbaV0uc3RyaW5nKTsKKwkJaWYgKGkgKyAxIDwgZXh0cmFfY2MubnIpCisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJywnKTsKKwkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCX0KKworCXJldi5leHRyYV9oZWFkZXJzID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCWlmIChmcm9tKSB7CisJCWlmIChzcGxpdF9pZGVudF9saW5lKCZyZXYuZnJvbV9pZGVudCwgZnJvbSwgc3RybGVuKGZyb20pKSkKKwkJCWRpZShfKCJpbnZhbGlkIGlkZW50IGxpbmU6ICVzIiksIGZyb20pOworCX0KKworCWlmIChzdGFydF9udW1iZXIgPCAwKQorCQlzdGFydF9udW1iZXIgPSAxOworCisJLyoKKwkgKiBJZiBudW1iZXJlZCBpcyBzZXQgc29sZWx5IGR1ZSB0byBmb3JtYXQubnVtYmVyZWQgaW4gY29uZmlnLAorCSAqIGFuZCBpdCB3b3VsZCBjb25mbGljdCB3aXRoIC0ta2VlcC1zdWJqZWN0ICgtaykgZnJvbSB0aGUKKwkgKiBjb21tYW5kIGxpbmUsIHJlc2V0ICJudW1iZXJlZCIuCisJICovCisJaWYgKG51bWJlcmVkICYmIGtlZXBfc3ViamVjdCAmJiAhbnVtYmVyZWRfY21kbGluZV9vcHQpCisJCW51bWJlcmVkID0gMDsKKworCWlmIChudW1iZXJlZCAmJiBrZWVwX3N1YmplY3QpCisJCWRpZShfKCItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIpKTsKKwlpZiAoa2VlcF9zdWJqZWN0ICYmIHN1YmplY3RfcHJlZml4KQorCQlkaWUoXygiLS1zdWJqZWN0LXByZWZpeC8tLXJmYyBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIpKTsKKwlyZXYucHJlc2VydmVfc3ViamVjdCA9IGtlZXBfc3ViamVjdDsKKworCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldiwgJnNfcl9vcHQpOworCWlmIChhcmdjID4gMSkKKwkJZGllKF8oInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiKSwgYXJndlsxXSk7CisKKwlpZiAocmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX05BTUUpCisJCWRpZShfKCItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIikpOworCWlmIChyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfTkFNRV9TVEFUVVMpCisJCWRpZShfKCItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiKSk7CisJaWYgKHJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9DSEVDS0RJRkYpCisJCWRpZShfKCItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiKSk7CisKKwlpZiAoIXVzZV9wYXRjaF9mb3JtYXQgJiYKKwkJKCFyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHx8CisJCSByZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID09IERJRkZfRk9STUFUX1BBVENIKSkKKwkJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX0RJRkZTVEFUIHwgRElGRl9GT1JNQVRfU1VNTUFSWTsKKwlpZiAoIXJldi5kaWZmb3B0LnN0YXRfd2lkdGgpCisJCXJldi5kaWZmb3B0LnN0YXRfd2lkdGggPSBNQUlMX0RFRkFVTFRfV1JBUDsKKworCS8qIEFsd2F5cyBnZW5lcmF0ZSBhIHBhdGNoICovCisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9QQVRDSDsKKworCXJldi56ZXJvX2NvbW1pdCA9IHplcm9fY29tbWl0OworCisJaWYgKCFyZXYuZGlmZm9wdC5mbGFncy50ZXh0ICYmICFub19iaW5hcnlfZGlmZikKKwkJcmV2LmRpZmZvcHQuZmxhZ3MuYmluYXJ5ID0gMTsKKworCWlmIChyZXYuc2hvd19ub3RlcykKKwkJbG9hZF9kaXNwbGF5X25vdGVzKCZyZXYubm90ZXNfb3B0KTsKKworCWlmICghb3V0cHV0X2RpcmVjdG9yeSAmJiAhdXNlX3N0ZG91dCkKKwkJb3V0cHV0X2RpcmVjdG9yeSA9IGNvbmZpZ19vdXRwdXRfZGlyZWN0b3J5OworCisJaWYgKCF1c2Vfc3Rkb3V0KQorCQlvdXRwdXRfZGlyZWN0b3J5ID0gc2V0X291dGRpcihwcmVmaXgsIG91dHB1dF9kaXJlY3RvcnkpOworCWVsc2UKKwkJc2V0dXBfcGFnZXIoKTsKKworCWlmIChvdXRwdXRfZGlyZWN0b3J5KSB7CisJCWludCBzYXZlZDsKKwkJaWYgKHJldi5kaWZmb3B0LnVzZV9jb2xvciAhPSBHSVRfQ09MT1JfQUxXQVlTKQorCQkJcmV2LmRpZmZvcHQudXNlX2NvbG9yID0gR0lUX0NPTE9SX05FVkVSOworCQlpZiAodXNlX3N0ZG91dCkKKwkJCWRpZShfKCJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIpKTsKKwkJLyoKKwkJICogV2UgY29uc2lkZXIgPG91dGRpcj4gYXMgJ291dHNpZGUgb2YgZ2l0ZGlyJywgdGhlcmVmb3JlIGF2b2lkCisJCSAqIGFwcGx5aW5nIGFkanVzdF9zaGFyZWRfcGVybSBpbiBzLWMtbC1kLgorCQkgKi8KKwkJc2F2ZWQgPSBnZXRfc2hhcmVkX3JlcG9zaXRvcnkoKTsKKwkJc2V0X3NoYXJlZF9yZXBvc2l0b3J5KDApOworCQlzd2l0Y2ggKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3Qob3V0cHV0X2RpcmVjdG9yeSkpIHsKKwkJY2FzZSBTQ0xEX09LOgorCQljYXNlIFNDTERfRVhJU1RTOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkaWUoXygiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzICIKKwkJCSAgICAgICJvZiAnJXMnIiksIG91dHB1dF9kaXJlY3RvcnkpOworCQl9CisJCXNldF9zaGFyZWRfcmVwb3NpdG9yeShzYXZlZCk7CisJCWlmIChta2RpcihvdXRwdXRfZGlyZWN0b3J5LCAwNzc3KSA8IDAgJiYgZXJybm8gIT0gRUVYSVNUKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciKSwKKwkJCQkgIG91dHB1dF9kaXJlY3RvcnkpOworCX0KKworCWlmIChyZXYucGVuZGluZy5uciA9PSAxKSB7CisJCWludCBjaGVja19oZWFkID0gMDsKKworCQlpZiAocmV2Lm1heF9jb3VudCA8IDAgJiYgIXJldi5zaG93X3Jvb3RfZGlmZikgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgdHJhZGl0aW9uYWwgYmVoYXZpb3VyIG9mICJnaXQgZm9ybWF0LXBhdGNoCisJCQkgKiBvcmlnaW4iIHRoYXQgcHJlcGFyZXMgd2hhdCB0aGUgb3JpZ2luIHNpZGUgc3RpbGwKKwkJCSAqIGRvZXMgbm90IGhhdmUuCisJCQkgKi8KKwkJCXJldi5wZW5kaW5nLm9iamVjdHNbMF0uaXRlbS0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJCWFkZF9oZWFkX3RvX3BlbmRpbmcoJnJldik7CisJCQljaGVja19oZWFkID0gMTsKKwkJfQorCQkvKgorCQkgKiBPdGhlcndpc2UsIGl0IGlzICJmb3JtYXQtcGF0Y2ggLTIyIEhFQUQiLCBhbmQvb3IKKwkJICogImZvcm1hdC1wYXRjaCAtLXJvb3QgSEVBRCIuICBUaGUgdXNlciB3YW50cworCQkgKiBnZXRfcmV2aXNpb24oKSB0byBkbyB0aGUgdXN1YWwgdHJhdmVyc2FsLgorCQkgKi8KKworCQlpZiAoIXN0cmNtcChyZXYucGVuZGluZy5vYmplY3RzWzBdLm5hbWUsICJIRUFEIikpCisJCQljaGVja19oZWFkID0gMTsKKworCQlpZiAoY2hlY2tfaGVhZCkgeworCQkJY29uc3QgY2hhciAqcmVmLCAqdjsKKwkJCXJlZiA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCQkgTlVMTCwgTlVMTCk7CisJCQlpZiAocmVmICYmIHNraXBfcHJlZml4KHJlZiwgInJlZnMvaGVhZHMvIiwgJnYpKQorCQkJCWJyYW5jaF9uYW1lID0geHN0cmR1cCh2KTsKKwkJCWVsc2UKKwkJCQlicmFuY2hfbmFtZSA9IHhzdHJkdXAoIiIpOyAvKiBubyBicmFuY2ggKi8KKwkJfQorCX0KKworCS8qCisJICogV2UgY2Fubm90IG1vdmUgdGhpcyBhbnl3aGVyZSBlYXJsaWVyIGJlY2F1c2Ugd2UgZG8gd2FudCB0bworCSAqIGtub3cgaWYgLS1yb290IHdhcyBnaXZlbiBleHBsaWNpdGx5IGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKwkgKi8KKwlyZXYuc2hvd19yb290X2RpZmYgPSAxOworCisJaWYgKGlnbm9yZV9pZl9pbl91cHN0cmVhbSkgeworCQkvKiBEb24ndCBzYXkgYW55dGhpbmcgaWYgaGVhZCBhbmQgdXBzdHJlYW0gYXJlIHRoZSBzYW1lLiAqLworCQlpZiAocmV2LnBlbmRpbmcubnIgPT0gMikgeworCQkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqbyA9IHJldi5wZW5kaW5nLm9iamVjdHM7CisJCQlpZiAob2lkZXEoJm9bMF0uaXRlbS0+b2lkLCAmb1sxXS5pdGVtLT5vaWQpKQorCQkJCWdvdG8gZG9uZTsKKwkJfQorCQlnZXRfcGF0Y2hfaWRzKCZyZXYsICZpZHMpOworCX0KKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldikpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKwlyZXYuYm91bmRhcnkgPSAxOworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXYpKSAhPSBOVUxMKSB7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKSB7CisJCQlib3VuZGFyeV9jb3VudCsrOworCQkJb3JpZ2luID0gKGJvdW5kYXJ5X2NvdW50ID09IDEpID8gY29tbWl0IDogTlVMTDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGlnbm9yZV9pZl9pbl91cHN0cmVhbSAmJiBoYXNfY29tbWl0X3BhdGNoX2lkKGNvbW1pdCwgJmlkcykpCisJCQljb250aW51ZTsKKworCQlucisrOworCQlSRUFMTE9DX0FSUkFZKGxpc3QsIG5yKTsKKwkJbGlzdFtuciAtIDFdID0gY29tbWl0OworCX0KKwlpZiAobnIgPT0gMCkKKwkJLyogbm90aGluZyB0byBkbyAqLworCQlnb3RvIGRvbmU7CisJdG90YWwgPSBucjsKKwlpZiAoY292ZXJfbGV0dGVyID09IC0xKSB7CisJCWlmIChjb25maWdfY292ZXJfbGV0dGVyID09IENPVkVSX0FVVE8pCisJCQljb3Zlcl9sZXR0ZXIgPSAodG90YWwgPiAxKTsKKwkJZWxzZQorCQkJY292ZXJfbGV0dGVyID0gKGNvbmZpZ19jb3Zlcl9sZXR0ZXIgPT0gQ09WRVJfT04pOworCX0KKwlpZiAoIWtlZXBfc3ViamVjdCAmJiBhdXRvX251bWJlciAmJiAodG90YWwgPiAxIHx8IGNvdmVyX2xldHRlcikpCisJCW51bWJlcmVkID0gMTsKKwlpZiAobnVtYmVyZWQpCisJCXJldi50b3RhbCA9IHRvdGFsICsgc3RhcnRfbnVtYmVyIC0gMTsKKworCWlmIChpZGlmZl9wcmV2Lm5yKSB7CisJCWlmICghY292ZXJfbGV0dGVyICYmIHRvdGFsICE9IDEpCisJCQlkaWUoXygiLS1pbnRlcmRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIikpOworCQlyZXYuaWRpZmZfb2lkMSA9ICZpZGlmZl9wcmV2Lm9pZFtpZGlmZl9wcmV2Lm5yIC0gMV07CisJCXJldi5pZGlmZl9vaWQyID0gZ2V0X2NvbW1pdF90cmVlX29pZChsaXN0WzBdKTsKKwkJcmV2LmlkaWZmX3RpdGxlID0gZGlmZl90aXRsZSgmaWRpZmZfdGl0bGUsIHJlcm9sbF9jb3VudCwKKwkJCQkJICAgICBfKCJJbnRlcmRpZmY6IiksCisJCQkJCSAgICAgXygiSW50ZXJkaWZmIGFnYWluc3QgdiVkOiIpKTsKKwl9CisKKwlpZiAoY3JlYXRpb25fZmFjdG9yIDwgMCkKKwkJY3JlYXRpb25fZmFjdG9yID0gUkFOR0VfRElGRl9DUkVBVElPTl9GQUNUT1JfREVGQVVMVDsKKwllbHNlIGlmICghcmRpZmZfcHJldikKKwkJZGllKF8oIi0tY3JlYXRpb24tZmFjdG9yIHJlcXVpcmVzIC0tcmFuZ2UtZGlmZiIpKTsKKworCWlmIChyZGlmZl9wcmV2KSB7CisJCWlmICghY292ZXJfbGV0dGVyICYmIHRvdGFsICE9IDEpCisJCQlkaWUoXygiLS1yYW5nZS1kaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIpKTsKKworCQlpbmZlcl9yYW5nZV9kaWZmX3JhbmdlcygmcmRpZmYxLCAmcmRpZmYyLCByZGlmZl9wcmV2LAorCQkJCQlvcmlnaW4sIGxpc3RbMF0pOworCQlyZXYucmRpZmYxID0gcmRpZmYxLmJ1ZjsKKwkJcmV2LnJkaWZmMiA9IHJkaWZmMi5idWY7CisJCXJldi5jcmVhdGlvbl9mYWN0b3IgPSBjcmVhdGlvbl9mYWN0b3I7CisJCXJldi5yZGlmZl90aXRsZSA9IGRpZmZfdGl0bGUoJnJkaWZmX3RpdGxlLCByZXJvbGxfY291bnQsCisJCQkJCSAgICAgXygiUmFuZ2UtZGlmZjoiKSwKKwkJCQkJICAgICBfKCJSYW5nZS1kaWZmIGFnYWluc3QgdiVkOiIpKTsKKwl9CisKKwlpZiAoIXNpZ25hdHVyZSkgeworCQk7IC8qIC0tbm8tc2lnbmF0dXJlIGluaGliaXRzIGFsbCBzaWduYXR1cmVzICovCisJfSBlbHNlIGlmIChzaWduYXR1cmUgJiYgc2lnbmF0dXJlICE9IGdpdF92ZXJzaW9uX3N0cmluZykgeworCQk7IC8qIG5vbi1kZWZhdWx0IHNpZ25hdHVyZSBhbHJlYWR5IHNldCAqLworCX0gZWxzZSBpZiAoc2lnbmF0dXJlX2ZpbGUpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCBzaWduYXR1cmVfZmlsZSwgMTI4KSA8IDApCisJCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIpLCBzaWduYXR1cmVfZmlsZSk7CisJCXNpZ25hdHVyZSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJfQorCisJbWVtc2V0KCZiYXNlcywgMCwgc2l6ZW9mKGJhc2VzKSk7CisJaWYgKGJhc2VfY29tbWl0KSB7CisJCXN0cnVjdCBjb21taXQgKmJhc2UgPSBnZXRfYmFzZV9jb21taXQoYmFzZV9jb21taXQsIGxpc3QsIG5yKTsKKwkJcmVzZXRfcmV2aXNpb25fd2FsaygpOworCQljbGVhcl9vYmplY3RfZmxhZ3MoVU5JTlRFUkVTVElORyk7CisJCXByZXBhcmVfYmFzZXMoJmJhc2VzLCBiYXNlLCBsaXN0LCBucik7CisJfQorCisJaWYgKGluX3JlcGx5X3RvIHx8IHRocmVhZCB8fCBjb3Zlcl9sZXR0ZXIpCisJCXJldi5yZWZfbWVzc2FnZV9pZHMgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3RyaW5nX2xpc3QpKTsKKwlpZiAoaW5fcmVwbHlfdG8pIHsKKwkJY29uc3QgY2hhciAqbXNnaWQgPSBjbGVhbl9tZXNzYWdlX2lkKGluX3JlcGx5X3RvKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKHJldi5yZWZfbWVzc2FnZV9pZHMsIG1zZ2lkKTsKKwl9CisJcmV2Lm51bWJlcmVkX2ZpbGVzID0ganVzdF9udW1iZXJzOworCXJldi5wYXRjaF9zdWZmaXggPSBmbXRfcGF0Y2hfc3VmZml4OworCWlmIChjb3Zlcl9sZXR0ZXIpIHsKKwkJaWYgKHRocmVhZCkKKwkJCWdlbl9tZXNzYWdlX2lkKCZyZXYsICJjb3ZlciIpOworCQltYWtlX2NvdmVyX2xldHRlcigmcmV2LCB1c2Vfc3Rkb3V0LAorCQkJCSAgb3JpZ2luLCBuciwgbGlzdCwgYnJhbmNoX25hbWUsIHF1aWV0KTsKKwkJcHJpbnRfYmFzZXMoJmJhc2VzLCByZXYuZGlmZm9wdC5maWxlKTsKKwkJcHJpbnRfc2lnbmF0dXJlKHJldi5kaWZmb3B0LmZpbGUpOworCQl0b3RhbCsrOworCQlzdGFydF9udW1iZXItLTsKKwkJLyogaW50ZXJkaWZmL3JhbmdlLWRpZmYgaW4gY292ZXItbGV0dGVyOyBvbWl0IGZyb20gcGF0Y2hlcyAqLworCQlyZXYuaWRpZmZfb2lkMSA9IE5VTEw7CisJCXJldi5yZGlmZjEgPSBOVUxMOworCX0KKwlyZXYuYWRkX3NpZ25vZmYgPSBkb19zaWdub2ZmOworCisJaWYgKHNob3dfcHJvZ3Jlc3MpCisJCXByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcyhfKCJHZW5lcmF0aW5nIHBhdGNoZXMiKSwgdG90YWwpOworCXdoaWxlICgwIDw9IC0tbnIpIHsKKwkJaW50IHNob3duOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCB0b3RhbCAtIG5yKTsKKwkJY29tbWl0ID0gbGlzdFtucl07CisJCXJldi5uciA9IHRvdGFsIC0gbnIgKyAoc3RhcnRfbnVtYmVyIC0gMSk7CisJCS8qIE1ha2UgdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBtYWlscyByZXBsaWVzIHRvIHRoZSBmaXJzdCAqLworCQlpZiAodGhyZWFkKSB7CisJCQkvKiBIYXZlIHdlIGFscmVhZHkgaGFkIGEgbWVzc2FnZSBJRD8gKi8KKwkJCWlmIChyZXYubWVzc2FnZV9pZCkgeworCQkJCS8qCisJCQkJICogRm9yIGRlZXAgdGhyZWFkaW5nOiBtYWtlIGV2ZXJ5IG1haWwKKwkJCQkgKiBhIHJlcGx5IHRvIHRoZSBwcmV2aW91cyBvbmUsIG5vCisJCQkJICogbWF0dGVyIHdoYXQgb3RoZXIgb3B0aW9ucyBhcmUgc2V0LgorCQkJCSAqCisJCQkJICogRm9yIHNoYWxsb3cgdGhyZWFkaW5nOgorCQkJCSAqCisJCQkJICogV2l0aG91dCAtLWNvdmVyLWxldHRlciBhbmQKKwkJCQkgKiAtLWluLXJlcGx5LXRvLCBtYWtlIGV2ZXJ5IG1haWwgYQorCQkJCSAqIHJlcGx5IHRvIHRoZSBvbmUgYmVmb3JlLgorCQkJCSAqCisJCQkJICogV2l0aCAtLWluLXJlcGx5LXRvIGJ1dCBubworCQkJCSAqIC0tY292ZXItbGV0dGVyLCBtYWtlIGV2ZXJ5IG1haWwgYQorCQkJCSAqIHJlcGx5IHRvIHRoZSA8cmVwbHktdG8+LgorCQkJCSAqCisJCQkJICogV2l0aCAtLWNvdmVyLWxldHRlciwgbWFrZSBldmVyeQorCQkJCSAqIG1haWwgYnV0IHRoZSBjb3ZlciBsZXR0ZXIgYSByZXBseQorCQkJCSAqIHRvIHRoZSBjb3ZlciBsZXR0ZXIuICBUaGUgY292ZXIKKwkJCQkgKiBsZXR0ZXIgaXMgYSByZXBseSB0byB0aGUKKwkJCQkgKiAtLWluLXJlcGx5LXRvLCBpZiBzcGVjaWZpZWQuCisJCQkJICovCisJCQkJaWYgKHRocmVhZCA9PSBUSFJFQURfU0hBTExPVworCQkJCSAgICAmJiByZXYucmVmX21lc3NhZ2VfaWRzLT5uciA+IDAKKwkJCQkgICAgJiYgKCFjb3Zlcl9sZXR0ZXIgfHwgcmV2Lm5yID4gMSkpCisJCQkJCWZyZWUocmV2Lm1lc3NhZ2VfaWQpOworCQkJCWVsc2UKKwkJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKHJldi5yZWZfbWVzc2FnZV9pZHMsCisJCQkJCQkJICAgcmV2Lm1lc3NhZ2VfaWQpOworCQkJfQorCQkJZ2VuX21lc3NhZ2VfaWQoJnJldiwgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCX0KKworCQlpZiAoIXVzZV9zdGRvdXQgJiYKKwkJICAgIG9wZW5fbmV4dF9maWxlKHJldi5udW1iZXJlZF9maWxlcyA/IE5VTEwgOiBjb21taXQsIE5VTEwsICZyZXYsIHF1aWV0KSkKKwkJCWRpZShfKCJmYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIpKTsKKwkJc2hvd24gPSBsb2dfdHJlZV9jb21taXQoJnJldiwgY29tbWl0KTsKKwkJZnJlZV9jb21taXRfYnVmZmVyKHRoZV9yZXBvc2l0b3J5LT5wYXJzZWRfb2JqZWN0cywKKwkJCQkgICBjb21taXQpOworCisJCS8qIFdlIHB1dCBvbmUgZXh0cmEgYmxhbmsgbGluZSBiZXR3ZWVuIGZvcm1hdHRlZAorCQkgKiBwYXRjaGVzIGFuZCB0aGlzIGZsYWcgaXMgdXNlZCBieSBsb2ctdHJlZSBjb2RlCisJCSAqIHRvIHNlZSBpZiBpdCBuZWVkcyB0byBlbWl0IGEgTEYgYmVmb3JlIHNob3dpbmcKKwkJICogdGhlIGxvZzsgd2hlbiB1c2luZyBvbmUgZmlsZSBwZXIgcGF0Y2gsIHdlIGRvCisJCSAqIG5vdCB3YW50IHRoZSBleHRyYSBibGFuayBsaW5lLgorCQkgKi8KKwkJaWYgKCF1c2Vfc3Rkb3V0KQorCQkJcmV2LnNob3duX29uZSA9IDA7CisJCWlmIChzaG93bikgeworCQkJcHJpbnRfYmFzZXMoJmJhc2VzLCByZXYuZGlmZm9wdC5maWxlKTsKKwkJCWlmIChyZXYubWltZV9ib3VuZGFyeSkKKwkJCQlmcHJpbnRmKHJldi5kaWZmb3B0LmZpbGUsICJcbi0tJXMlcy0tXG5cblxuIiwKKwkJCQkgICAgICAgbWltZV9ib3VuZGFyeV9sZWFkZXIsCisJCQkJICAgICAgIHJldi5taW1lX2JvdW5kYXJ5KTsKKwkJCWVsc2UKKwkJCQlwcmludF9zaWduYXR1cmUocmV2LmRpZmZvcHQuZmlsZSk7CisJCX0KKwkJaWYgKCF1c2Vfc3Rkb3V0KQorCQkJZmNsb3NlKHJldi5kaWZmb3B0LmZpbGUpOworCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisJZnJlZShsaXN0KTsKKwlmcmVlKGJyYW5jaF9uYW1lKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZXh0cmFfdG8sIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZleHRyYV9jYywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX2hkciwgMCk7CisJaWYgKGlnbm9yZV9pZl9pbl91cHN0cmVhbSkKKwkJZnJlZV9wYXRjaF9pZHMoJmlkcyk7CisKK2RvbmU6CisJb2lkX2FycmF5X2NsZWFyKCZpZGlmZl9wcmV2KTsKKwlzdHJidWZfcmVsZWFzZSgmaWRpZmZfdGl0bGUpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZGlmZjEpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZGlmZjIpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZGlmZl90aXRsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3BlbmRpbmdfY29tbWl0KGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IHJldl9pbmZvICpyZXZzLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaWYgKGdldF9vaWQoYXJnLCAmb2lkKSA9PSAwKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCQkmb2lkKTsKKwkJaWYgKGNvbW1pdCkgeworCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gZmxhZ3M7CisJCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgJmNvbW1pdC0+b2JqZWN0LCBhcmcpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNoZXJyeV91c2FnZVtdID0geworCU5fKCJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyB2b2lkIHByaW50X2NvbW1pdChjaGFyIHNpZ24sIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IHZlcmJvc2UsCisJCQkgaW50IGFiYnJldiwgRklMRSAqZmlsZSkKK3sKKwlpZiAoIXZlcmJvc2UpIHsKKwkJZnByaW50ZihmaWxlLCAiJWMgJXNcbiIsIHNpZ24sCisJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoJmNvbW1pdC0+b2JqZWN0Lm9pZCwgYWJicmV2KSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJcHBfY29tbWl0X2Vhc3koQ01JVF9GTVRfT05FTElORSwgY29tbWl0LCAmYnVmKTsKKwkJZnByaW50ZihmaWxlLCAiJWMgJXMgJXNcbiIsIHNpZ24sCisJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoJmNvbW1pdC0+b2JqZWN0Lm9pZCwgYWJicmV2KSwKKwkJICAgICAgIGJ1Zi5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9Cit9CisKK2ludCBjbWRfY2hlcnJ5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCBwYXRjaF9pZHMgaWRzOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMOworCXN0cnVjdCBicmFuY2ggKmN1cnJlbnRfYnJhbmNoOworCWNvbnN0IGNoYXIgKnVwc3RyZWFtOworCWNvbnN0IGNoYXIgKmhlYWQgPSAiSEVBRCI7CisJY29uc3QgY2hhciAqbGltaXQgPSBOVUxMOworCWludCB2ZXJib3NlID0gMCwgYWJicmV2ID0gMDsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX0FCQlJFVigmYWJicmV2KSwKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygiYmUgdmVyYm9zZSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgY2hlcnJ5X3VzYWdlLCAwKTsKKworCXN3aXRjaCAoYXJnYykgeworCWNhc2UgMzoKKwkJbGltaXQgPSBhcmd2WzJdOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgMjoKKwkJaGVhZCA9IGFyZ3ZbMV07CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSAxOgorCQl1cHN0cmVhbSA9IGFyZ3ZbMF07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWN1cnJlbnRfYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKwkJdXBzdHJlYW0gPSBicmFuY2hfZ2V0X3Vwc3RyZWFtKGN1cnJlbnRfYnJhbmNoLCBOVUxMKTsKKwkJaWYgKCF1cHN0cmVhbSkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCIKKwkJCQkJIiByZW1vdGUgYnJhbmNoLCBwbGVhc2UiCisJCQkJCSIgc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIikpOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNoZXJyeV91c2FnZSwgb3B0aW9ucyk7CisJCX0KKwl9CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2cywgcHJlZml4KTsKKwlyZXZzLm1heF9wYXJlbnRzID0gMTsKKworCWlmIChhZGRfcGVuZGluZ19jb21taXQoaGVhZCwgJnJldnMsIDApKQorCQlkaWUoXygidW5rbm93biBjb21taXQgJXMiKSwgaGVhZCk7CisJaWYgKGFkZF9wZW5kaW5nX2NvbW1pdCh1cHN0cmVhbSwgJnJldnMsIFVOSU5URVJFU1RJTkcpKQorCQlkaWUoXygidW5rbm93biBjb21taXQgJXMiKSwgdXBzdHJlYW0pOworCisJLyogRG9uJ3Qgc2F5IGFueXRoaW5nIGlmIGhlYWQgYW5kIHVwc3RyZWFtIGFyZSB0aGUgc2FtZS4gKi8KKwlpZiAocmV2cy5wZW5kaW5nLm5yID09IDIpIHsKKwkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqbyA9IHJldnMucGVuZGluZy5vYmplY3RzOworCQlpZiAob2lkZXEoJm9bMF0uaXRlbS0+b2lkLCAmb1sxXS5pdGVtLT5vaWQpKQorCQkJcmV0dXJuIDA7CisJfQorCisJZ2V0X3BhdGNoX2lkcygmcmV2cywgJmlkcyk7CisKKwlpZiAobGltaXQgJiYgYWRkX3BlbmRpbmdfY29tbWl0KGxpbWl0LCAmcmV2cywgVU5JTlRFUkVTVElORykpCisJCWRpZShfKCJ1bmtub3duIGNvbW1pdCAlcyIpLCBsaW1pdCk7CisKKwkvKiByZXZlcnNlIHRoZSBsaXN0IG9mIGNvbW1pdHMgKi8KKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXZzKSkgIT0gTlVMTCkgeworCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCAmbGlzdCk7CisJfQorCisJd2hpbGUgKGxpc3QpIHsKKwkJY2hhciBzaWduID0gJysnOworCisJCWNvbW1pdCA9IGxpc3QtPml0ZW07CisJCWlmIChoYXNfY29tbWl0X3BhdGNoX2lkKGNvbW1pdCwgJmlkcykpCisJCQlzaWduID0gJy0nOworCQlwcmludF9jb21taXQoc2lnbiwgY29tbWl0LCB2ZXJib3NlLCBhYmJyZXYsIHJldnMuZGlmZm9wdC5maWxlKTsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCisJZnJlZV9wYXRjaF9pZHMoJmlkcyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2xzLWZpbGVzLmMgYi9idWlsdGluL2xzLWZpbGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhNGMxMAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbHMtZmlsZXMuYwpAQCAtMCwwICsxLDY5MyBAQAorLyoKKyAqIFRoaXMgbWVyZ2VzIHRoZSBmaWxlIGxpc3RpbmcgaW4gdGhlIGRpcmVjdG9yeSBjYWNoZSBpbmRleAorICogd2l0aCB0aGUgYWN0dWFsIHdvcmtpbmcgZGlyZWN0b3J5IGxpc3QsIGFuZCBzaG93cyBkaWZmZXJlbnQKKyAqIGNvbWJpbmF0aW9ucyBvZiB0aGUgdHdvLgorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicmVzb2x2ZS11bmRvLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorCitzdGF0aWMgaW50IGFiYnJldjsKK3N0YXRpYyBpbnQgc2hvd19kZWxldGVkOworc3RhdGljIGludCBzaG93X2NhY2hlZDsKK3N0YXRpYyBpbnQgc2hvd19vdGhlcnM7CitzdGF0aWMgaW50IHNob3dfc3RhZ2U7CitzdGF0aWMgaW50IHNob3dfdW5tZXJnZWQ7CitzdGF0aWMgaW50IHNob3dfcmVzb2x2ZV91bmRvOworc3RhdGljIGludCBzaG93X21vZGlmaWVkOworc3RhdGljIGludCBzaG93X2tpbGxlZDsKK3N0YXRpYyBpbnQgc2hvd192YWxpZF9iaXQ7CitzdGF0aWMgaW50IHNob3dfZnNtb25pdG9yX2JpdDsKK3N0YXRpYyBpbnQgbGluZV90ZXJtaW5hdG9yID0gJ1xuJzsKK3N0YXRpYyBpbnQgZGVidWdfbW9kZTsKK3N0YXRpYyBpbnQgc2hvd19lb2w7CitzdGF0aWMgaW50IHJlY3Vyc2Vfc3VibW9kdWxlczsKKworc3RhdGljIGNvbnN0IGNoYXIgKnByZWZpeDsKK3N0YXRpYyBpbnQgbWF4X3ByZWZpeF9sZW47CitzdGF0aWMgaW50IHByZWZpeF9sZW47CitzdGF0aWMgc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworc3RhdGljIGludCBlcnJvcl91bm1hdGNoOworc3RhdGljIGNoYXIgKnBzX21hdGNoZWQ7CitzdGF0aWMgY29uc3QgY2hhciAqd2l0aF90cmVlOworc3RhdGljIGludCBleGNfZ2l2ZW47CitzdGF0aWMgaW50IGV4Y2x1ZGVfYXJnczsKKworc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19jYWNoZWQgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfdW5tZXJnZWQgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfcmVtb3ZlZCA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19vdGhlciA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19raWxsZWQgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfbW9kaWZpZWQgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfc2tpcF93b3JrdHJlZSA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19yZXNvbHZlX3VuZG8gPSAiIjsKKworc3RhdGljIHZvaWQgd3JpdGVfZW9saW5mbyhjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoc2hvd19lb2wpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWNvbnN0IGNoYXIgKmlfdHh0ID0gIiI7CisJCWNvbnN0IGNoYXIgKndfdHh0ID0gIiI7CisJCWNvbnN0IGNoYXIgKmFfdHh0ID0gZ2V0X2NvbnZlcnRfYXR0cl9hc2NpaShpc3RhdGUsIHBhdGgpOworCQlpZiAoY2UgJiYgU19JU1JFRyhjZS0+Y2VfbW9kZSkpCisJCQlpX3R4dCA9IGdldF9jYWNoZWRfY29udmVydF9zdGF0c19hc2NpaShpc3RhdGUsCisJCQkJCQkJICAgICAgIGNlLT5uYW1lKTsKKwkJaWYgKCFsc3RhdChwYXRoLCAmc3QpICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCQl3X3R4dCA9IGdldF93dF9jb252ZXJ0X3N0YXRzX2FzY2lpKHBhdGgpOworCQlwcmludGYoImkvJS01cyB3LyUtNXMgYXR0ci8lLTE3c1x0IiwgaV90eHQsIHdfdHh0LCBhX3R4dCk7CisJfQorfQorCitzdGF0aWMgdm9pZCB3cml0ZV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJLyoKKwkgKiBXaXRoICItLWZ1bGwtbmFtZSIsIHByZWZpeF9sZW49MDsgdGhpcyBjYWxsZXIgbmVlZHMgdG8gcGFzcworCSAqIGFuIGVtcHR5IHN0cmluZyBpbiB0aGF0IGNhc2UgKGEgTlVMTCBpcyBnb29kIGZvciAiIikuCisJICovCisJd3JpdGVfbmFtZV9xdW90ZWRfcmVsYXRpdmUobmFtZSwgcHJlZml4X2xlbiA/IHByZWZpeCA6IE5VTEwsCisJCQkJICAgc3Rkb3V0LCBsaW5lX3Rlcm1pbmF0b3IpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3RhZyhjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBjaGFyICp0YWcpCit7CisJc3RhdGljIGNoYXIgYWx0dGFnWzRdOworCisJaWYgKHRhZyAmJiAqdGFnICYmICgoc2hvd192YWxpZF9iaXQgJiYgKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSkgfHwKKwkJKHNob3dfZnNtb25pdG9yX2JpdCAmJiAoY2UtPmNlX2ZsYWdzICYgQ0VfRlNNT05JVE9SX1ZBTElEKSkpKSB7CisJCW1lbWNweShhbHR0YWcsIHRhZywgMyk7CisKKwkJaWYgKGlzYWxwaGEodGFnWzBdKSkgeworCQkJYWx0dGFnWzBdID0gdG9sb3dlcih0YWdbMF0pOworCQl9IGVsc2UgaWYgKHRhZ1swXSA9PSAnPycpIHsKKwkJCWFsdHRhZ1swXSA9ICchJzsKKwkJfSBlbHNlIHsKKwkJCWFsdHRhZ1swXSA9ICd2JzsKKwkJCWFsdHRhZ1sxXSA9IHRhZ1swXTsKKwkJCWFsdHRhZ1syXSA9ICcgJzsKKwkJCWFsdHRhZ1szXSA9IDA7CisJCX0KKworCQl0YWcgPSBhbHR0YWc7CisJfQorCisJcmV0dXJuIHRhZzsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZGVidWcoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpZiAoZGVidWdfbW9kZSkgeworCQljb25zdCBzdHJ1Y3Qgc3RhdF9kYXRhICpzZCA9ICZjZS0+Y2Vfc3RhdF9kYXRhOworCisJCXByaW50ZigiICBjdGltZTogJXU6JXVcbiIsIHNkLT5zZF9jdGltZS5zZWMsIHNkLT5zZF9jdGltZS5uc2VjKTsKKwkJcHJpbnRmKCIgIG10aW1lOiAldToldVxuIiwgc2QtPnNkX210aW1lLnNlYywgc2QtPnNkX210aW1lLm5zZWMpOworCQlwcmludGYoIiAgZGV2OiAldVx0aW5vOiAldVxuIiwgc2QtPnNkX2Rldiwgc2QtPnNkX2lubyk7CisJCXByaW50ZigiICB1aWQ6ICV1XHRnaWQ6ICV1XG4iLCBzZC0+c2RfdWlkLCBzZC0+c2RfZ2lkKTsKKwkJcHJpbnRmKCIgIHNpemU6ICV1XHRmbGFnczogJXhcbiIsIHNkLT5zZF9zaXplLCBjZS0+Y2VfZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19kaXJfZW50cnkoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICBjb25zdCBjaGFyICp0YWcsIHN0cnVjdCBkaXJfZW50cnkgKmVudCkKK3sKKwlpbnQgbGVuID0gbWF4X3ByZWZpeF9sZW47CisKKwlpZiAobGVuID4gZW50LT5sZW4pCisJCWRpZSgiZ2l0IGxzLWZpbGVzOiBpbnRlcm5hbCBlcnJvciAtIGRpcmVjdG9yeSBlbnRyeSBub3Qgc3VwZXJzZXQgb2YgcHJlZml4Iik7CisKKwkvKiBJZiBwc19tYXRjaGVzIGlzIG5vbi1OVUxMLCBmaWd1cmUgb3V0IHdoaWNoIHBhdGhzcGVjKHMpIG1hdGNoLiAqLworCWlmIChwc19tYXRjaGVkKQorCQlkaXJfcGF0aF9tYXRjaChpc3RhdGUsIGVudCwgJnBhdGhzcGVjLCBsZW4sIHBzX21hdGNoZWQpOworCisJZnB1dHModGFnLCBzdGRvdXQpOworCXdyaXRlX2VvbGluZm8oaXN0YXRlLCBOVUxMLCBlbnQtPm5hbWUpOworCXdyaXRlX25hbWUoZW50LT5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19vdGhlcl9maWxlcyhjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpcl9lbnRyeSAqZW50ID0gZGlyLT5lbnRyaWVzW2ldOworCQlpZiAoIWluZGV4X25hbWVfaXNfb3RoZXIoaXN0YXRlLCBlbnQtPm5hbWUsIGVudC0+bGVuKSkKKwkJCWNvbnRpbnVlOworCQlzaG93X2Rpcl9lbnRyeShpc3RhdGUsIHRhZ19vdGhlciwgZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfa2lsbGVkX2ZpbGVzKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaXJfZW50cnkgKmVudCA9IGRpci0+ZW50cmllc1tpXTsKKwkJY2hhciAqY3AsICpzcDsKKwkJaW50IHBvcywgbGVuLCBraWxsZWQgPSAwOworCisJCWZvciAoY3AgPSBlbnQtPm5hbWU7IGNwIC0gZW50LT5uYW1lIDwgZW50LT5sZW47IGNwID0gc3AgKyAxKSB7CisJCQlzcCA9IHN0cmNocihjcCwgJy8nKTsKKwkJCWlmICghc3ApIHsKKwkJCQkvKiBJZiBlbnQtPm5hbWUgaXMgcHJlZml4IG9mIGFuIGVudHJ5IGluIHRoZQorCQkJCSAqIGNhY2hlLCBpdCB3aWxsIGJlIGtpbGxlZC4KKwkJCQkgKi8KKwkJCQlwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIGVudC0+bmFtZSwgZW50LT5sZW4pOworCQkJCWlmICgwIDw9IHBvcykKKwkJCQkJQlVHKCJraWxsZWQtZmlsZSAlLipzIG5vdCBmb3VuZCIsCisJCQkJCQllbnQtPmxlbiwgZW50LT5uYW1lKTsKKwkJCQlwb3MgPSAtcG9zIC0gMTsKKwkJCQl3aGlsZSAocG9zIDwgaXN0YXRlLT5jYWNoZV9uciAmJgorCQkJCSAgICAgICBjZV9zdGFnZShpc3RhdGUtPmNhY2hlW3Bvc10pKQorCQkJCQlwb3MrKzsgLyogc2tpcCB1bm1lcmdlZCAqLworCQkJCWlmIChpc3RhdGUtPmNhY2hlX25yIDw9IHBvcykKKwkJCQkJYnJlYWs7CisJCQkJLyogcG9zIHBvaW50cyBhdCBhIG5hbWUgaW1tZWRpYXRlbHkgYWZ0ZXIKKwkJCQkgKiBlbnQtPm5hbWUgaW4gdGhlIGNhY2hlLiAgRG9lcyBpdCBleHBlY3QKKwkJCQkgKiBlbnQtPm5hbWUgdG8gYmUgYSBkaXJlY3Rvcnk/CisJCQkJICovCisJCQkJbGVuID0gY2VfbmFtZWxlbihpc3RhdGUtPmNhY2hlW3Bvc10pOworCQkJCWlmICgoZW50LT5sZW4gPCBsZW4pICYmCisJCQkJICAgICFzdHJuY21wKGlzdGF0ZS0+Y2FjaGVbcG9zXS0+bmFtZSwKKwkJCQkJICAgICBlbnQtPm5hbWUsIGVudC0+bGVuKSAmJgorCQkJCSAgICBpc3RhdGUtPmNhY2hlW3Bvc10tPm5hbWVbZW50LT5sZW5dID09ICcvJykKKwkJCQkJa2lsbGVkID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICgwIDw9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgZW50LT5uYW1lLCBzcCAtIGVudC0+bmFtZSkpIHsKKwkJCQkvKiBJZiBhbnkgb2YgdGhlIGxlYWRpbmcgZGlyZWN0b3JpZXMgaW4KKwkJCQkgKiBlbnQtPm5hbWUgaXMgcmVnaXN0ZXJlZCBpbiB0aGUgY2FjaGUsCisJCQkJICogZW50LT5uYW1lIHdpbGwgYmUga2lsbGVkLgorCQkJCSAqLworCQkJCWtpbGxlZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGtpbGxlZCkKKwkJCXNob3dfZGlyX2VudHJ5KGlzdGF0ZSwgdGFnX2tpbGxlZCwgZGlyLT5lbnRyaWVzW2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZmlsZXMoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIHN0cnVjdCBkaXJfc3RydWN0ICpkaXIpOworCitzdGF0aWMgdm9pZCBzaG93X3N1Ym1vZHVsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqc3VwZXJwcm9qZWN0LAorCQkJICAgc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgcmVwb3NpdG9yeSBzdWJyZXBvOworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YiA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgoc3VwZXJwcm9qZWN0LAorCQkJCQkJCSAgJm51bGxfb2lkLCBwYXRoKTsKKworCWlmIChyZXBvX3N1Ym1vZHVsZV9pbml0KCZzdWJyZXBvLCBzdXBlcnByb2plY3QsIHN1YikpCisJCXJldHVybjsKKworCWlmIChyZXBvX3JlYWRfaW5kZXgoJnN1YnJlcG8pIDwgMCkKKwkJZGllKCJpbmRleCBmaWxlIGNvcnJ1cHQiKTsKKworCXNob3dfZmlsZXMoJnN1YnJlcG8sIGRpcik7CisKKwlyZXBvX2NsZWFyKCZzdWJyZXBvKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19jZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJICAgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNvbnN0IGNoYXIgKmZ1bGxuYW1lLAorCQkgICAgY29uc3QgY2hhciAqdGFnKQoreworCWlmIChtYXhfcHJlZml4X2xlbiA+IHN0cmxlbihmdWxsbmFtZSkpCisJCWRpZSgiZ2l0IGxzLWZpbGVzOiBpbnRlcm5hbCBlcnJvciAtIGNhY2hlIGVudHJ5IG5vdCBzdXBlcnNldCBvZiBwcmVmaXgiKTsKKworCWlmIChyZWN1cnNlX3N1Ym1vZHVsZXMgJiYgU19JU0dJVExJTksoY2UtPmNlX21vZGUpICYmCisJICAgIGlzX3N1Ym1vZHVsZV9hY3RpdmUocmVwbywgY2UtPm5hbWUpKSB7CisJCXNob3dfc3VibW9kdWxlKHJlcG8sIGRpciwgY2UtPm5hbWUpOworCX0gZWxzZSBpZiAobWF0Y2hfcGF0aHNwZWMocmVwby0+aW5kZXgsICZwYXRoc3BlYywgZnVsbG5hbWUsIHN0cmxlbihmdWxsbmFtZSksCisJCQkJICBtYXhfcHJlZml4X2xlbiwgcHNfbWF0Y2hlZCwKKwkJCQkgIFNfSVNESVIoY2UtPmNlX21vZGUpIHx8CisJCQkJICBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpKSB7CisJCXRhZyA9IGdldF90YWcoY2UsIHRhZyk7CisKKwkJaWYgKCFzaG93X3N0YWdlKSB7CisJCQlmcHV0cyh0YWcsIHN0ZG91dCk7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIiVzJTA2byAlcyAlZFx0IiwKKwkJCSAgICAgICB0YWcsCisJCQkgICAgICAgY2UtPmNlX21vZGUsCisJCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KCZjZS0+b2lkLCBhYmJyZXYpLAorCQkJICAgICAgIGNlX3N0YWdlKGNlKSk7CisJCX0KKwkJd3JpdGVfZW9saW5mbyhyZXBvLT5pbmRleCwgY2UsIGZ1bGxuYW1lKTsKKwkJd3JpdGVfbmFtZShmdWxsbmFtZSk7CisJCXByaW50X2RlYnVnKGNlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcnVfaW5mbyhjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCWlmICghaXN0YXRlLT5yZXNvbHZlX3VuZG8pCisJCXJldHVybjsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgaXN0YXRlLT5yZXNvbHZlX3VuZG8pIHsKKwkJY29uc3QgY2hhciAqcGF0aCA9IGl0ZW0tPnN0cmluZzsKKwkJc3RydWN0IHJlc29sdmVfdW5kb19pbmZvICp1aSA9IGl0ZW0tPnV0aWw7CisJCWludCBpLCBsZW47CisKKwkJbGVuID0gc3RybGVuKHBhdGgpOworCQlpZiAobGVuIDwgbWF4X3ByZWZpeF9sZW4pCisJCQljb250aW51ZTsgLyogb3V0c2lkZSBvZiB0aGUgcHJlZml4ICovCisJCWlmICghbWF0Y2hfcGF0aHNwZWMoaXN0YXRlLCAmcGF0aHNwZWMsIHBhdGgsIGxlbiwKKwkJCQkgICAgbWF4X3ByZWZpeF9sZW4sIHBzX21hdGNoZWQsIDApKQorCQkJY29udGludWU7IC8qIHVuaW50ZXJlc3RlZCAqLworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlpZiAoIXVpLT5tb2RlW2ldKQorCQkJCWNvbnRpbnVlOworCQkJcHJpbnRmKCIlcyUwNm8gJXMgJWRcdCIsIHRhZ19yZXNvbHZlX3VuZG8sIHVpLT5tb2RlW2ldLAorCQkJICAgICAgIGZpbmRfdW5pcXVlX2FiYnJldigmdWktPm9pZFtpXSwgYWJicmV2KSwKKwkJCSAgICAgICBpICsgMSk7CisJCQl3cml0ZV9uYW1lKHBhdGgpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGNlX2V4Y2x1ZGVkKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICAgICAgY29uc3QgY2hhciAqZnVsbG5hbWUsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJaW50IGR0eXBlID0gY2VfdG9fZHR5cGUoY2UpOworCXJldHVybiBpc19leGNsdWRlZChkaXIsIGlzdGF0ZSwgZnVsbG5hbWUsICZkdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnN0cnVjdF9mdWxsbmFtZShzdHJ1Y3Qgc3RyYnVmICpvdXQsIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJc3RyYnVmX3Jlc2V0KG91dCk7CisJaWYgKHJlcG8tPnN1Ym1vZHVsZV9wcmVmaXgpCisJCXN0cmJ1Zl9hZGRzdHIob3V0LCByZXBvLT5zdWJtb2R1bGVfcHJlZml4KTsKKwlzdHJidWZfYWRkc3RyKG91dCwgY2UtPm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2ZpbGVzKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKQoreworCWludCBpOworCXN0cnVjdCBzdHJidWYgZnVsbG5hbWUgPSBTVFJCVUZfSU5JVDsKKworCS8qIEZvciBjYWNoZWQvZGVsZXRlZCBmaWxlcyB3ZSBkb24ndCBuZWVkIHRvIGV2ZW4gZG8gdGhlIHJlYWRkaXIgKi8KKwlpZiAoc2hvd19vdGhlcnMgfHwgc2hvd19raWxsZWQpIHsKKwkJaWYgKCFzaG93X290aGVycykKKwkJCWRpci0+ZmxhZ3MgfD0gRElSX0NPTExFQ1RfS0lMTEVEX09OTFk7CisJCWZpbGxfZGlyZWN0b3J5KGRpciwgcmVwby0+aW5kZXgsICZwYXRoc3BlYyk7CisJCWlmIChzaG93X290aGVycykKKwkJCXNob3dfb3RoZXJfZmlsZXMocmVwby0+aW5kZXgsIGRpcik7CisJCWlmIChzaG93X2tpbGxlZCkKKwkJCXNob3dfa2lsbGVkX2ZpbGVzKHJlcG8tPmluZGV4LCBkaXIpOworCX0KKwlpZiAoc2hvd19jYWNoZWQgfHwgc2hvd19zdGFnZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgcmVwby0+aW5kZXgtPmNhY2hlX25yOyBpKyspIHsKKwkJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSByZXBvLT5pbmRleC0+Y2FjaGVbaV07CisKKwkJCWNvbnN0cnVjdF9mdWxsbmFtZSgmZnVsbG5hbWUsIHJlcG8sIGNlKTsKKworCQkJaWYgKChkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCkgJiYKKwkJCSAgICAhY2VfZXhjbHVkZWQoZGlyLCByZXBvLT5pbmRleCwgZnVsbG5hbWUuYnVmLCBjZSkpCisJCQkJY29udGludWU7CisJCQlpZiAoc2hvd191bm1lcmdlZCAmJiAhY2Vfc3RhZ2UoY2UpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1VQREFURSkKKwkJCQljb250aW51ZTsKKwkJCXNob3dfY2UocmVwbywgZGlyLCBjZSwgZnVsbG5hbWUuYnVmLAorCQkJCWNlX3N0YWdlKGNlKSA/IHRhZ191bm1lcmdlZCA6CisJCQkJKGNlX3NraXBfd29ya3RyZWUoY2UpID8gdGFnX3NraXBfd29ya3RyZWUgOgorCQkJCSB0YWdfY2FjaGVkKSk7CisJCX0KKwl9CisJaWYgKHNob3dfZGVsZXRlZCB8fCBzaG93X21vZGlmaWVkKSB7CisJCWZvciAoaSA9IDA7IGkgPCByZXBvLT5pbmRleC0+Y2FjaGVfbnI7IGkrKykgeworCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IHJlcG8tPmluZGV4LT5jYWNoZVtpXTsKKwkJCXN0cnVjdCBzdGF0IHN0OworCQkJaW50IGVycjsKKworCQkJY29uc3RydWN0X2Z1bGxuYW1lKCZmdWxsbmFtZSwgcmVwbywgY2UpOworCisJCQlpZiAoKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKSAmJgorCQkJICAgICFjZV9leGNsdWRlZChkaXIsIHJlcG8tPmluZGV4LCBmdWxsbmFtZS5idWYsIGNlKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEUpCisJCQkJY29udGludWU7CisJCQlpZiAoY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCQkJY29udGludWU7CisJCQllcnIgPSBsc3RhdChmdWxsbmFtZS5idWYsICZzdCk7CisJCQlpZiAoc2hvd19kZWxldGVkICYmIGVycikKKwkJCQlzaG93X2NlKHJlcG8sIGRpciwgY2UsIGZ1bGxuYW1lLmJ1ZiwgdGFnX3JlbW92ZWQpOworCQkJaWYgKHNob3dfbW9kaWZpZWQgJiYgaWVfbW9kaWZpZWQocmVwby0+aW5kZXgsIGNlLCAmc3QsIDApKQorCQkJCXNob3dfY2UocmVwbywgZGlyLCBjZSwgZnVsbG5hbWUuYnVmLCB0YWdfbW9kaWZpZWQpOworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmZ1bGxuYW1lKTsKK30KKworLyoKKyAqIFBydW5lIHRoZSBpbmRleCB0byBvbmx5IGNvbnRhaW4gc3R1ZmYgc3RhcnRpbmcgd2l0aCAicHJlZml4IgorICovCitzdGF0aWMgdm9pZCBwcnVuZV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCWNvbnN0IGNoYXIgKnByZWZpeCwgc2l6ZV90IHByZWZpeGxlbikKK3sKKwlpbnQgcG9zOworCXVuc2lnbmVkIGludCBmaXJzdCwgbGFzdDsKKworCWlmICghcHJlZml4IHx8ICFpc3RhdGUtPmNhY2hlX25yKQorCQlyZXR1cm47CisJcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBwcmVmaXgsIHByZWZpeGxlbik7CisJaWYgKHBvcyA8IDApCisJCXBvcyA9IC1wb3MtMTsKKwlmaXJzdCA9IHBvczsKKwlsYXN0ID0gaXN0YXRlLT5jYWNoZV9ucjsKKwl3aGlsZSAobGFzdCA+IGZpcnN0KSB7CisJCWludCBuZXh0ID0gZmlyc3QgKyAoKGxhc3QgLSBmaXJzdCkgPj4gMSk7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW25leHRdOworCQlpZiAoIXN0cm5jbXAoY2UtPm5hbWUsIHByZWZpeCwgcHJlZml4bGVuKSkgeworCQkJZmlyc3QgPSBuZXh0KzE7CisJCQljb250aW51ZTsKKwkJfQorCQlsYXN0ID0gbmV4dDsKKwl9CisJTU9WRV9BUlJBWShpc3RhdGUtPmNhY2hlLCBpc3RhdGUtPmNhY2hlICsgcG9zLCBsYXN0IC0gcG9zKTsKKwlpc3RhdGUtPmNhY2hlX25yID0gbGFzdCAtIHBvczsKK30KKworc3RhdGljIGludCBnZXRfY29tbW9uX3ByZWZpeF9sZW4oY29uc3QgY2hhciAqY29tbW9uX3ByZWZpeCkKK3sKKwlpbnQgY29tbW9uX3ByZWZpeF9sZW47CisKKwlpZiAoIWNvbW1vbl9wcmVmaXgpCisJCXJldHVybiAwOworCisJY29tbW9uX3ByZWZpeF9sZW4gPSBzdHJsZW4oY29tbW9uX3ByZWZpeCk7CisKKwkvKgorCSAqIElmIHRoZSBwcmVmaXggaGFzIGEgdHJhaWxpbmcgc2xhc2gsIHN0cmlwIGl0IHNvIHRoYXQgc3VibW9kdWxlcyB3b250CisJICogYmUgcHJ1bmVkIGZyb20gdGhlIGluZGV4LgorCSAqLworCWlmIChjb21tb25fcHJlZml4W2NvbW1vbl9wcmVmaXhfbGVuIC0gMV0gPT0gJy8nKQorCQljb21tb25fcHJlZml4X2xlbi0tOworCisJcmV0dXJuIGNvbW1vbl9wcmVmaXhfbGVuOworfQorCisvKgorICogUmVhZCB0aGUgdHJlZSBzcGVjaWZpZWQgd2l0aCAtLXdpdGgtdHJlZSBvcHRpb24KKyAqICh0eXBpY2FsbHksIEhFQUQpIGludG8gc3RhZ2UgIzEgYW5kIHRoZW4KKyAqIHNxdWFzaCB0aGVtIGRvd24gdG8gc3RhZ2UgIzAuICBUaGlzIGlzIHVzZWQgZm9yCisgKiAtLWVycm9yLXVubWF0Y2ggdG8gbGlzdCBhbmQgY2hlY2sgdGhlIHBhdGggcGF0dGVybnMKKyAqIHRoYXQgd2VyZSBnaXZlbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUuICBXZSBhcmUgbm90CisgKiBnb2luZyB0byB3cml0ZSB0aGlzIGluZGV4IG91dC4KKyAqLwordm9pZCBvdmVybGF5X3RyZWVfb25faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICBjb25zdCBjaGFyICp0cmVlX25hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpsYXN0X3N0YWdlMCA9IE5VTEw7CisJaW50IGk7CisKKwlpZiAoZ2V0X29pZCh0cmVlX25hbWUsICZvaWQpKQorCQlkaWUoInRyZWUtaXNoICVzIG5vdCBmb3VuZC4iLCB0cmVlX25hbWUpOworCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KCZvaWQpOworCWlmICghdHJlZSkKKwkJZGllKCJiYWQgdHJlZS1pc2ggJXMiLCB0cmVlX25hbWUpOworCisJLyogSG9pc3QgdGhlIHVubWVyZ2VkIGVudHJpZXMgdXAgdG8gc3RhZ2UgIzMgdG8gbWFrZSByb29tICovCisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJaWYgKCFjZV9zdGFnZShjZSkpCisJCQljb250aW51ZTsKKwkJY2UtPmNlX2ZsYWdzIHw9IENFX1NUQUdFTUFTSzsKKwl9CisKKwlpZiAocHJlZml4KSB7CisJCXN0YXRpYyBjb25zdCBjaGFyICoobWF0Y2hidWZbMV0pOworCQltYXRjaGJ1ZlswXSA9IE5VTEw7CisJCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywgUEFUSFNQRUNfQUxMX01BR0lDLAorCQkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9DV0QsIHByZWZpeCwgbWF0Y2hidWYpOworCX0gZWxzZQorCQltZW1zZXQoJnBhdGhzcGVjLCAwLCBzaXplb2YocGF0aHNwZWMpKTsKKwlpZiAocmVhZF90cmVlKHRoZV9yZXBvc2l0b3J5LCB0cmVlLCAxLCAmcGF0aHNwZWMsIGlzdGF0ZSkpCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgdHJlZSBlbnRyaWVzICVzIiwgdHJlZV9uYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCXN3aXRjaCAoY2Vfc3RhZ2UoY2UpKSB7CisJCWNhc2UgMDoKKwkJCWxhc3Rfc3RhZ2UwID0gY2U7CisJCQkvKiBmYWxsdGhydSAqLworCQlkZWZhdWx0OgorCQkJY29udGludWU7CisJCWNhc2UgMToKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBpcyBzdGFnZSAjMCBlbnRyeSBmb3IgdGhpcywgd2UgZG8gbm90CisJCQkgKiBuZWVkIHRvIHNob3cgaXQuICBXZSB1c2UgQ0VfVVBEQVRFIGJpdCB0byBtYXJrCisJCQkgKiBzdWNoIGFuIGVudHJ5LgorCQkJICovCisJCQlpZiAobGFzdF9zdGFnZTAgJiYKKwkJCSAgICAhc3RyY21wKGxhc3Rfc3RhZ2UwLT5uYW1lLCBjZS0+bmFtZSkpCisJCQkJY2UtPmNlX2ZsYWdzIHw9IENFX1VQREFURTsKKwkJfQorCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsc19maWxlc191c2FnZVtdID0geworCU5fKCJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWxlPi4uLl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9leGNsdWRlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmV4Y2x1ZGVfbGlzdCA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlleGNfZ2l2ZW4gPSAxOworCXN0cmluZ19saXN0X2FwcGVuZChleGNsdWRlX2xpc3QsIGFyZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfZXhjbHVkZV9mcm9tKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBkaXJfc3RydWN0ICpkaXIgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJZXhjX2dpdmVuID0gMTsKKwlhZGRfcGF0dGVybnNfZnJvbV9maWxlKGRpciwgYXJnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9leGNsdWRlX3N0YW5kYXJkKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkJIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBkaXJfc3RydWN0ICpkaXIgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisKKwlleGNfZ2l2ZW4gPSAxOworCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKGRpcik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9sc19maWxlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmNtZF9wcmVmaXgpCit7CisJaW50IHJlcXVpcmVfd29ya190cmVlID0gMCwgc2hvd190YWcgPSAwLCBpOworCWNvbnN0IGNoYXIgKm1heF9wcmVmaXg7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOworCXN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsOworCXN0cnVjdCBzdHJpbmdfbGlzdCBleGNsdWRlX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9sc19maWxlc19vcHRpb25zW10gPSB7CisJCS8qIFRoaW5rIHR3aWNlIGJlZm9yZSBhZGRpbmcgIi0tbnVsIiBzeW5vbnltIHRvIHRoaXMgKi8KKwkJT1BUX1NFVF9JTlQoJ3onLCBOVUxMLCAmbGluZV90ZXJtaW5hdG9yLAorCQkJTl8oInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIiksICdcMCcpLAorCQlPUFRfQk9PTCgndCcsIE5VTEwsICZzaG93X3RhZywKKwkJCU5fKCJpZGVudGlmeSB0aGUgZmlsZSBzdGF0dXMgd2l0aCB0YWdzIikpLAorCQlPUFRfQk9PTCgndicsIE5VTEwsICZzaG93X3ZhbGlkX2JpdCwKKwkJCU5fKCJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdhc3N1bWUgdW5jaGFuZ2VkJyBmaWxlcyIpKSwKKwkJT1BUX0JPT0woJ2YnLCBOVUxMLCAmc2hvd19mc21vbml0b3JfYml0LAorCQkJTl8oInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2ZzbW9uaXRvciBjbGVhbicgZmlsZXMiKSksCisJCU9QVF9CT09MKCdjJywgImNhY2hlZCIsICZzaG93X2NhY2hlZCwKKwkJCU5fKCJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIpKSwKKwkJT1BUX0JPT0woJ2QnLCAiZGVsZXRlZCIsICZzaG93X2RlbGV0ZWQsCisJCQlOXygic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiKSksCisJCU9QVF9CT09MKCdtJywgIm1vZGlmaWVkIiwgJnNob3dfbW9kaWZpZWQsCisJCQlOXygic2hvdyBtb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0IikpLAorCQlPUFRfQk9PTCgnbycsICJvdGhlcnMiLCAmc2hvd19vdGhlcnMsCisJCQlOXygic2hvdyBvdGhlciBmaWxlcyBpbiB0aGUgb3V0cHV0IikpLAorCQlPUFRfQklUKCdpJywgImlnbm9yZWQiLCAmZGlyLmZsYWdzLAorCQkJTl8oInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IiksCisJCQlESVJfU0hPV19JR05PUkVEKSwKKwkJT1BUX0JPT0woJ3MnLCAic3RhZ2UiLCAmc2hvd19zdGFnZSwKKwkJCU5fKCJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIpKSwKKwkJT1BUX0JPT0woJ2snLCAia2lsbGVkIiwgJnNob3dfa2lsbGVkLAorCQkJTl8oInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiKSksCisJCU9QVF9CSVQoMCwgImRpcmVjdG9yeSIsICZkaXIuZmxhZ3MsCisJCQlOXygic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IiksCisJCQlESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUyksCisJCU9QVF9CT09MKDAsICJlb2wiLCAmc2hvd19lb2wsIE5fKCJzaG93IGxpbmUgZW5kaW5ncyBvZiBmaWxlcyIpKSwKKwkJT1BUX05FR0JJVCgwLCAiZW1wdHktZGlyZWN0b3J5IiwgJmRpci5mbGFncywKKwkJCU5fKCJkb24ndCBzaG93IGVtcHR5IGRpcmVjdG9yaWVzIiksCisJCQlESVJfSElERV9FTVBUWV9ESVJFQ1RPUklFUyksCisJCU9QVF9CT09MKCd1JywgInVubWVyZ2VkIiwgJnNob3dfdW5tZXJnZWQsCisJCQlOXygic2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IikpLAorCQlPUFRfQk9PTCgwLCAicmVzb2x2ZS11bmRvIiwgJnNob3dfcmVzb2x2ZV91bmRvLAorCQkJICAgIE5fKCJzaG93IHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbiIpKSwKKwkJT1BUX0NBTExCQUNLX0YoJ3gnLCAiZXhjbHVkZSIsICZleGNsdWRlX2xpc3QsIE5fKCJwYXR0ZXJuIiksCisJCQlOXygic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIiksCisJCQlQQVJTRV9PUFRfTk9ORUcsIG9wdGlvbl9wYXJzZV9leGNsdWRlKSwKKwkJT1BUX0NBTExCQUNLX0YoJ1gnLCAiZXhjbHVkZS1mcm9tIiwgJmRpciwgTl8oImZpbGUiKSwKKwkJCU5fKCJleGNsdWRlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gPGZpbGU+IiksCisJCQlQQVJTRV9PUFRfTk9ORUcsIG9wdGlvbl9wYXJzZV9leGNsdWRlX2Zyb20pLAorCQlPUFRfU1RSSU5HKDAsICJleGNsdWRlLXBlci1kaXJlY3RvcnkiLCAmZGlyLmV4Y2x1ZGVfcGVyX2RpciwgTl8oImZpbGUiKSwKKwkJCU5fKCJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIpKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgImV4Y2x1ZGUtc3RhbmRhcmQiLCAmZGlyLCBOVUxMLAorCQkJTl8oImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywKKwkJCW9wdGlvbl9wYXJzZV9leGNsdWRlX3N0YW5kYXJkKSwKKwkJT1BUX1NFVF9JTlRfRigwLCAiZnVsbC1uYW1lIiwgJnByZWZpeF9sZW4sCisJCQkgICAgICBOXygibWFrZSB0aGUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHRvcCBkaXJlY3RvcnkiKSwKKwkJCSAgICAgIDAsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9CT09MKDAsICJyZWN1cnNlLXN1Ym1vZHVsZXMiLCAmcmVjdXJzZV9zdWJtb2R1bGVzLAorCQkJTl8oInJlY3Vyc2UgdGhyb3VnaCBzdWJtb2R1bGVzIikpLAorCQlPUFRfQk9PTCgwLCAiZXJyb3ItdW5tYXRjaCIsICZlcnJvcl91bm1hdGNoLAorCQkJTl8oImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIpKSwKKwkJT1BUX1NUUklORygwLCAid2l0aC10cmVlIiwgJndpdGhfdHJlZSwgTl8oInRyZWUtaXNoIiksCisJCQlOXygicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIpKSwKKwkJT1BUX19BQkJSRVYoJmFiYnJldiksCisJCU9QVF9CT09MKDAsICJkZWJ1ZyIsICZkZWJ1Z19tb2RlLCBOXygic2hvdyBkZWJ1Z2dpbmcgZGF0YSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGxzX2ZpbGVzX3VzYWdlLCBidWlsdGluX2xzX2ZpbGVzX29wdGlvbnMpOworCisJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKKwlwcmVmaXggPSBjbWRfcHJlZml4OworCWlmIChwcmVmaXgpCisJCXByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlpZiAocmVwb19yZWFkX2luZGV4KHRoZV9yZXBvc2l0b3J5KSA8IDApCisJCWRpZSgiaW5kZXggZmlsZSBjb3JydXB0Iik7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fbHNfZmlsZXNfb3B0aW9ucywKKwkJCWxzX2ZpbGVzX3VzYWdlLCAwKTsKKwlwbCA9IGFkZF9wYXR0ZXJuX2xpc3QoJmRpciwgRVhDX0NNREwsICItLWV4Y2x1ZGUgb3B0aW9uIik7CisJZm9yIChpID0gMDsgaSA8IGV4Y2x1ZGVfbGlzdC5ucjsgaSsrKSB7CisJCWFkZF9wYXR0ZXJuKGV4Y2x1ZGVfbGlzdC5pdGVtc1tpXS5zdHJpbmcsICIiLCAwLCBwbCwgLS1leGNsdWRlX2FyZ3MpOworCX0KKwlpZiAoc2hvd190YWcgfHwgc2hvd192YWxpZF9iaXQgfHwgc2hvd19mc21vbml0b3JfYml0KSB7CisJCXRhZ19jYWNoZWQgPSAiSCAiOworCQl0YWdfdW5tZXJnZWQgPSAiTSAiOworCQl0YWdfcmVtb3ZlZCA9ICJSICI7CisJCXRhZ19tb2RpZmllZCA9ICJDICI7CisJCXRhZ19vdGhlciA9ICI/ICI7CisJCXRhZ19raWxsZWQgPSAiSyAiOworCQl0YWdfc2tpcF93b3JrdHJlZSA9ICJTICI7CisJCXRhZ19yZXNvbHZlX3VuZG8gPSAiVSAiOworCX0KKwlpZiAoc2hvd19tb2RpZmllZCB8fCBzaG93X290aGVycyB8fCBzaG93X2RlbGV0ZWQgfHwgKGRpci5mbGFncyAmIERJUl9TSE9XX0lHTk9SRUQpIHx8IHNob3dfa2lsbGVkKQorCQlyZXF1aXJlX3dvcmtfdHJlZSA9IDE7CisJaWYgKHNob3dfdW5tZXJnZWQpCisJCS8qCisJCSAqIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gc2hvd2luZyB1bm1lcmdlZCB1bmxlc3MKKwkJICogeW91IGFsc28gc2hvdyB0aGUgc3RhZ2UgaW5mb3JtYXRpb24uCisJCSAqLworCQlzaG93X3N0YWdlID0gMTsKKwlpZiAoZGlyLmV4Y2x1ZGVfcGVyX2RpcikKKwkJZXhjX2dpdmVuID0gMTsKKworCWlmIChyZXF1aXJlX3dvcmtfdHJlZSAmJiAhaXNfaW5zaWRlX3dvcmtfdHJlZSgpKQorCQlzZXR1cF93b3JrX3RyZWUoKTsKKworCWlmIChyZWN1cnNlX3N1Ym1vZHVsZXMgJiYKKwkgICAgKHNob3dfc3RhZ2UgfHwgc2hvd19kZWxldGVkIHx8IHNob3dfb3RoZXJzIHx8IHNob3dfdW5tZXJnZWQgfHwKKwkgICAgIHNob3dfa2lsbGVkIHx8IHNob3dfbW9kaWZpZWQgfHwgc2hvd19yZXNvbHZlX3VuZG8gfHwgd2l0aF90cmVlKSkKKwkJZGllKCJscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyB1bnN1cHBvcnRlZCBtb2RlIik7CisKKwlpZiAocmVjdXJzZV9zdWJtb2R1bGVzICYmIGVycm9yX3VubWF0Y2gpCisJCWRpZSgibHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgZG9lcyBub3Qgc3VwcG9ydCAiCisJCSAgICAiLS1lcnJvci11bm1hdGNoIik7CisKKwlwYXJzZV9wYXRoc3BlYygmcGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfQ1dELAorCQkgICAgICAgcHJlZml4LCBhcmd2KTsKKworCS8qCisJICogRmluZCBjb21tb24gcHJlZml4IGZvciBhbGwgcGF0aHNwZWMncworCSAqIFRoaXMgaXMgdXNlZCBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB3aGljaCB1bmZvcnR1bmF0ZWx5IGNhbm5vdAorCSAqIGJlIGRvbmUgd2hlbiByZWN1cnNpbmcgaW50byBzdWJtb2R1bGVzIGJlY2F1c2Ugd2hlbiBhIHBhdGhzcGVjIGlzCisJICogZ2l2ZW4gd2hpY2ggc3BhbnMgcmVwb3NpdG9yeSBib3VuZGFyaWVzIHlvdSBjYW4ndCBzaW1wbHkgcmVtb3ZlIHRoZQorCSAqIHN1Ym1vZHVsZSBlbnRyeSBiZWNhdXNlIHRoZSBwYXRoc3BlYyBtYXkgbWF0Y2ggc29tZXRoaW5nIGluc2lkZSB0aGUKKwkgKiBzdWJtb2R1bGUuCisJICovCisJaWYgKHJlY3Vyc2Vfc3VibW9kdWxlcykKKwkJbWF4X3ByZWZpeCA9IE5VTEw7CisJZWxzZQorCQltYXhfcHJlZml4ID0gY29tbW9uX3ByZWZpeCgmcGF0aHNwZWMpOworCW1heF9wcmVmaXhfbGVuID0gZ2V0X2NvbW1vbl9wcmVmaXhfbGVuKG1heF9wcmVmaXgpOworCisJcHJ1bmVfaW5kZXgodGhlX3JlcG9zaXRvcnktPmluZGV4LCBtYXhfcHJlZml4LCBtYXhfcHJlZml4X2xlbik7CisKKwkvKiBUcmVhdCB1bm1hdGNoaW5nIHBhdGhzcGVjIGVsZW1lbnRzIGFzIGVycm9ycyAqLworCWlmIChwYXRoc3BlYy5uciAmJiBlcnJvcl91bm1hdGNoKQorCQlwc19tYXRjaGVkID0geGNhbGxvYyhwYXRoc3BlYy5uciwgMSk7CisKKwlpZiAoKGRpci5mbGFncyAmIERJUl9TSE9XX0lHTk9SRUQpICYmICFleGNfZ2l2ZW4pCisJCWRpZSgibHMtZmlsZXMgLS1pZ25vcmVkIG5lZWRzIHNvbWUgZXhjbHVkZSBwYXR0ZXJuIik7CisKKwkvKiBXaXRoIG5vIGZsYWdzLCB3ZSBkZWZhdWx0IHRvIHNob3dpbmcgdGhlIGNhY2hlZCBmaWxlcyAqLworCWlmICghKHNob3dfc3RhZ2UgfHwgc2hvd19kZWxldGVkIHx8IHNob3dfb3RoZXJzIHx8IHNob3dfdW5tZXJnZWQgfHwKKwkgICAgICBzaG93X2tpbGxlZCB8fCBzaG93X21vZGlmaWVkIHx8IHNob3dfcmVzb2x2ZV91bmRvKSkKKwkJc2hvd19jYWNoZWQgPSAxOworCisJaWYgKHdpdGhfdHJlZSkgeworCQkvKgorCQkgKiBCYXNpYyBzYW5pdHkgY2hlY2s7IHNob3ctc3RhZ2VzIGFuZCBzaG93LXVubWVyZ2VkCisJCSAqIHdvdWxkIG5vdCBtYWtlIGFueSBzZW5zZSB3aXRoIHRoaXMgb3B0aW9uLgorCQkgKi8KKwkJaWYgKHNob3dfc3RhZ2UgfHwgc2hvd191bm1lcmdlZCkKKwkJCWRpZSgibHMtZmlsZXMgLS13aXRoLXRyZWUgaXMgaW5jb21wYXRpYmxlIHdpdGggLXMgb3IgLXUiKTsKKwkJb3ZlcmxheV90cmVlX29uX2luZGV4KHRoZV9yZXBvc2l0b3J5LT5pbmRleCwgd2l0aF90cmVlLCBtYXhfcHJlZml4KTsKKwl9CisKKwlzaG93X2ZpbGVzKHRoZV9yZXBvc2l0b3J5LCAmZGlyKTsKKworCWlmIChzaG93X3Jlc29sdmVfdW5kbykKKwkJc2hvd19ydV9pbmZvKHRoZV9yZXBvc2l0b3J5LT5pbmRleCk7CisKKwlpZiAocHNfbWF0Y2hlZCkgeworCQlpbnQgYmFkOworCQliYWQgPSByZXBvcnRfcGF0aF9lcnJvcihwc19tYXRjaGVkLCAmcGF0aHNwZWMpOworCQlpZiAoYmFkKQorCQkJZnByaW50ZihzdGRlcnIsICJEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/XG4iKTsKKworCQlyZXR1cm4gYmFkID8gMSA6IDA7CisJfQorCisJVU5MRUFLKGRpcik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2xzLXJlbW90ZS5jIGIvYnVpbHRpbi9scy1yZW1vdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWY1MTk1Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9scy1yZW1vdGUuYwpAQCAtMCwwICsxLDE1MiBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInJlZi1maWx0ZXIuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbHNfcmVtb3RlX3VzYWdlW10gPSB7CisJTl8oImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKwkgICAiICAgICAgICAgICAgICAgICAgICAgWy1xIHwgLS1xdWlldF0gWy0tZXhpdC1jb2RlXSBbLS1nZXQtdXJsXVxuIgorCSAgICIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dIiksCisJTlVMTAorfTsKKworLyoKKyAqIElzIHRoZXJlIG9uZSBhbW9uZyB0aGUgbGlzdCBvZiBwYXR0ZXJucyB0aGF0IG1hdGNoIHRoZSB0YWlsIHBhcnQKKyAqIG9mIHRoZSBwYXRoPworICovCitzdGF0aWMgaW50IHRhaWxfbWF0Y2goY29uc3QgY2hhciAqKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqcDsKKwljaGFyICpwYXRoYnVmOworCisJaWYgKCFwYXR0ZXJuKQorCQlyZXR1cm4gMTsgLyogbm8gcmVzdHJpY3Rpb24gKi8KKworCXBhdGhidWYgPSB4c3RyZm10KCIvJXMiLCBwYXRoKTsKKwl3aGlsZSAoKHAgPSAqKHBhdHRlcm4rKykpICE9IE5VTEwpIHsKKwkJaWYgKCF3aWxkbWF0Y2gocCwgcGF0aGJ1ZiwgMCkpIHsKKwkJCWZyZWUocGF0aGJ1Zik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlmcmVlKHBhdGhidWYpOworCXJldHVybiAwOworfQorCitpbnQgY21kX2xzX3JlbW90ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpkZXN0ID0gTlVMTDsKKwl1bnNpZ25lZCBmbGFncyA9IDA7CisJaW50IGdldF91cmwgPSAwOworCWludCBxdWlldCA9IDA7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHNob3dfc3ltcmVmX3RhcmdldCA9IDA7CisJY29uc3QgY2hhciAqdXBsb2FkcGFjayA9IE5VTEw7CisJY29uc3QgY2hhciAqKnBhdHRlcm4gPSBOVUxMOworCXN0cnVjdCBhcmd2X2FycmF5IHJlZl9wcmVmaXhlcyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc2VydmVyX29wdGlvbnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmOworCXN0cnVjdCByZWZfYXJyYXkgcmVmX2FycmF5OworCXN0YXRpYyBzdHJ1Y3QgcmVmX3NvcnRpbmcgKnNvcnRpbmcgPSBOVUxMLCAqKnNvcnRpbmdfdGFpbCA9ICZzb3J0aW5nOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygiZG8gbm90IHByaW50IHJlbW90ZSBVUkwiKSksCisJCU9QVF9TVFJJTkcoMCwgInVwbG9hZC1wYWNrIiwgJnVwbG9hZHBhY2ssIE5fKCJleGVjIiksCisJCQkgICBOXygicGF0aCBvZiBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSBob3N0IikpLAorCQl7IE9QVElPTl9TVFJJTkcsIDAsICJleGVjIiwgJnVwbG9hZHBhY2ssIE5fKCJleGVjIiksCisJCQkgICBOXygicGF0aCBvZiBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSBob3N0IiksCisJCQkgICBQQVJTRV9PUFRfSElEREVOIH0sCisJCU9QVF9CSVQoJ3QnLCAidGFncyIsICZmbGFncywgTl8oImxpbWl0IHRvIHRhZ3MiKSwgUkVGX1RBR1MpLAorCQlPUFRfQklUKCdoJywgImhlYWRzIiwgJmZsYWdzLCBOXygibGltaXQgdG8gaGVhZHMiKSwgUkVGX0hFQURTKSwKKwkJT1BUX0JJVCgwLCAicmVmcyIsICZmbGFncywgTl8oImRvIG5vdCBzaG93IHBlZWxlZCB0YWdzIiksIFJFRl9OT1JNQUwpLAorCQlPUFRfQk9PTCgwLCAiZ2V0LXVybCIsICZnZXRfdXJsLAorCQkJIE5fKCJ0YWtlIHVybC48YmFzZT4uaW5zdGVhZE9mIGludG8gYWNjb3VudCIpKSwKKwkJT1BUX1JFRl9TT1JUKHNvcnRpbmdfdGFpbCksCisJCU9QVF9TRVRfSU5UX0YoMCwgImV4aXQtY29kZSIsICZzdGF0dXMsCisJCQkgICAgICBOXygiZXhpdCB3aXRoIGV4aXQgY29kZSAyIGlmIG5vIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kIiksCisJCQkgICAgICAyLCBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9CT09MKDAsICJzeW1yZWYiLCAmc2hvd19zeW1yZWZfdGFyZ2V0LAorCQkJIE5fKCJzaG93IHVuZGVybHlpbmcgcmVmIGluIGFkZGl0aW9uIHRvIHRoZSBvYmplY3QgcG9pbnRlZCBieSBpdCIpKSwKKwkJT1BUX1NUUklOR19MSVNUKCdvJywgInNlcnZlci1vcHRpb24iLCAmc2VydmVyX29wdGlvbnMsIE5fKCJzZXJ2ZXItc3BlY2lmaWMiKSwgTl8oIm9wdGlvbiB0byB0cmFuc21pdCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCW1lbXNldCgmcmVmX2FycmF5LCAwLCBzaXplb2YocmVmX2FycmF5KSk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGxzX3JlbW90ZV91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisJZGVzdCA9IGFyZ3ZbMF07CisKKwlpZiAoYXJnYyA+IDEpIHsKKwkJaW50IGk7CisJCXBhdHRlcm4gPSB4Y2FsbG9jKGFyZ2MsIHNpemVvZihjb25zdCBjaGFyICopKTsKKwkJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQkJcGF0dGVybltpIC0gMV0gPSB4c3RyZm10KCIqLyVzIiwgYXJndltpXSk7CisJCX0KKwl9CisKKwlpZiAoZmxhZ3MgJiBSRUZfVEFHUykKKwkJYXJndl9hcnJheV9wdXNoKCZyZWZfcHJlZml4ZXMsICJyZWZzL3RhZ3MvIik7CisJaWYgKGZsYWdzICYgUkVGX0hFQURTKQorCQlhcmd2X2FycmF5X3B1c2goJnJlZl9wcmVmaXhlcywgInJlZnMvaGVhZHMvIik7CisKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KGRlc3QpOworCWlmICghcmVtb3RlKSB7CisJCWlmIChkZXN0KQorCQkJZGllKCJiYWQgcmVwb3NpdG9yeSAnJXMnIiwgZGVzdCk7CisJCWRpZSgiTm8gcmVtb3RlIGNvbmZpZ3VyZWQgdG8gbGlzdCByZWZzIGZyb20uIik7CisJfQorCWlmICghcmVtb3RlLT51cmxfbnIpCisJCWRpZSgicmVtb3RlICVzIGhhcyBubyBjb25maWd1cmVkIFVSTCIsIGRlc3QpOworCisJaWYgKGdldF91cmwpIHsKKwkJcHJpbnRmKCIlc1xuIiwgKnJlbW90ZS0+dXJsKTsKKwkJVU5MRUFLKHNvcnRpbmcpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0cmFuc3BvcnQgPSB0cmFuc3BvcnRfZ2V0KHJlbW90ZSwgTlVMTCk7CisJaWYgKHVwbG9hZHBhY2sgIT0gTlVMTCkKKwkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfVVBMT0FEUEFDSywgdXBsb2FkcGFjayk7CisJaWYgKHNlcnZlcl9vcHRpb25zLm5yKQorCQl0cmFuc3BvcnQtPnNlcnZlcl9vcHRpb25zID0gJnNlcnZlcl9vcHRpb25zOworCisJcmVmID0gdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyh0cmFuc3BvcnQsICZyZWZfcHJlZml4ZXMpOworCWlmICh0cmFuc3BvcnRfZGlzY29ubmVjdCh0cmFuc3BvcnQpKSB7CisJCVVOTEVBSyhzb3J0aW5nKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKCFkZXN0ICYmICFxdWlldCkKKwkJZnByaW50ZihzdGRlcnIsICJGcm9tICVzXG4iLCAqcmVtb3RlLT51cmwpOworCWZvciAoIDsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3RydWN0IHJlZl9hcnJheV9pdGVtICppdGVtOworCQlpZiAoIWNoZWNrX3JlZl90eXBlKHJlZiwgZmxhZ3MpKQorCQkJY29udGludWU7CisJCWlmICghdGFpbF9tYXRjaChwYXR0ZXJuLCByZWYtPm5hbWUpKQorCQkJY29udGludWU7CisJCWl0ZW0gPSByZWZfYXJyYXlfcHVzaCgmcmVmX2FycmF5LCByZWYtPm5hbWUsICZyZWYtPm9sZF9vaWQpOworCQlpdGVtLT5zeW1yZWYgPSB4c3RyZHVwX29yX251bGwocmVmLT5zeW1yZWYpOworCX0KKworCWlmIChzb3J0aW5nKQorCQlyZWZfYXJyYXlfc29ydChzb3J0aW5nLCAmcmVmX2FycmF5KTsKKworCWZvciAoaSA9IDA7IGkgPCByZWZfYXJyYXkubnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKnJlZiA9IHJlZl9hcnJheS5pdGVtc1tpXTsKKwkJaWYgKHNob3dfc3ltcmVmX3RhcmdldCAmJiByZWYtPnN5bXJlZikKKwkJCXByaW50ZigicmVmOiAlc1x0JXNcbiIsIHJlZi0+c3ltcmVmLCByZWYtPnJlZm5hbWUpOworCQlwcmludGYoIiVzXHQlc1xuIiwgb2lkX3RvX2hleCgmcmVmLT5vYmplY3RuYW1lKSwgcmVmLT5yZWZuYW1lKTsKKwkJc3RhdHVzID0gMDsgLyogd2UgZm91bmQgc29tZXRoaW5nICovCisJfQorCisJVU5MRUFLKHNvcnRpbmcpOworCXJlZl9hcnJheV9jbGVhcigmcmVmX2FycmF5KTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9scy10cmVlLmMgYi9idWlsdGluL2xzLXRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2FkM2YyCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9scy10cmVlLmMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisKK3N0YXRpYyBpbnQgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CisjZGVmaW5lIExTX1JFQ1VSU0lWRSAxCisjZGVmaW5lIExTX1RSRUVfT05MWSAyCisjZGVmaW5lIExTX1NIT1dfVFJFRVMgNAorI2RlZmluZSBMU19OQU1FX09OTFkgOAorI2RlZmluZSBMU19TSE9XX1NJWkUgMTYKK3N0YXRpYyBpbnQgYWJicmV2Oworc3RhdGljIGludCBsc19vcHRpb25zOworc3RhdGljIHN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKK3N0YXRpYyBpbnQgY2hvbXBfcHJlZml4Oworc3RhdGljIGNvbnN0IGNoYXIgKmxzX3RyZWVfcHJlZml4OworCitzdGF0aWMgY29uc3QgIGNoYXIgKiBjb25zdCBsc190cmVlX3VzYWdlW10gPSB7CisJTl8oImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHNob3dfcmVjdXJzaXZlKGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLCBjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKwlpbnQgaTsKKworCWlmIChsc19vcHRpb25zICYgTFNfUkVDVVJTSVZFKQorCQlyZXR1cm4gMTsKKworCWlmICghcGF0aHNwZWMubnIpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IHBhdGhzcGVjLm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqc3BlYyA9IHBhdGhzcGVjLml0ZW1zW2ldLm1hdGNoOworCQlpbnQgbGVuLCBzcGVjbGVuOworCisJCWlmIChzdHJuY21wKGJhc2UsIHNwZWMsIGJhc2VsZW4pKQorCQkJY29udGludWU7CisJCWxlbiA9IHN0cmxlbihwYXRobmFtZSk7CisJCXNwZWMgKz0gYmFzZWxlbjsKKwkJc3BlY2xlbiA9IHN0cmxlbihzcGVjKTsKKwkJaWYgKHNwZWNsZW4gPD0gbGVuKQorCQkJY29udGludWU7CisJCWlmIChzcGVjW2xlbl0gJiYgc3BlY1tsZW5dICE9ICcvJykKKwkJCWNvbnRpbnVlOworCQlpZiAobWVtY21wKHBhdGhuYW1lLCBzcGVjLCBsZW4pKQorCQkJY29udGludWU7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X3RyZWUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3Qgc3RyYnVmICpiYXNlLAorCQljb25zdCBjaGFyICpwYXRobmFtZSwgdW5zaWduZWQgbW9kZSwgaW50IHN0YWdlLCB2b2lkICpjb250ZXh0KQoreworCWludCByZXR2YWwgPSAwOworCWludCBiYXNlbGVuOworCWNvbnN0IGNoYXIgKnR5cGUgPSBibG9iX3R5cGU7CisKKwlpZiAoU19JU0dJVExJTksobW9kZSkpIHsKKwkJLyoKKwkJICogTWF5YmUgd2Ugd2FudCB0byBoYXZlIHNvbWUgcmVjdXJzaXZlIHZlcnNpb24gaGVyZT8KKwkJICoKKwkJICogU29tZXRoaW5nIHNpbWlsYXIgdG8gdGhpcyBpbmNvbXBsZXRlIGV4YW1wbGU6CisJCSAqCisJCWlmIChzaG93X3N1YnByb2plY3RzKGJhc2UsIGJhc2VsZW4sIHBhdGhuYW1lKSkKKwkJCXJldHZhbCA9IFJFQURfVFJFRV9SRUNVUlNJVkU7CisJCSAqCisJCSAqLworCQl0eXBlID0gY29tbWl0X3R5cGU7CisJfSBlbHNlIGlmIChTX0lTRElSKG1vZGUpKSB7CisJCWlmIChzaG93X3JlY3Vyc2l2ZShiYXNlLT5idWYsIGJhc2UtPmxlbiwgcGF0aG5hbWUpKSB7CisJCQlyZXR2YWwgPSBSRUFEX1RSRUVfUkVDVVJTSVZFOworCQkJaWYgKCEobHNfb3B0aW9ucyAmIExTX1NIT1dfVFJFRVMpKQorCQkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJdHlwZSA9IHRyZWVfdHlwZTsKKwl9CisJZWxzZSBpZiAobHNfb3B0aW9ucyAmIExTX1RSRUVfT05MWSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIShsc19vcHRpb25zICYgTFNfTkFNRV9PTkxZKSkgeworCQlpZiAobHNfb3B0aW9ucyAmIExTX1NIT1dfU0laRSkgeworCQkJY2hhciBzaXplX3RleHRbMjRdOworCQkJaWYgKCFzdHJjbXAodHlwZSwgYmxvYl90eXBlKSkgeworCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJCQlpZiAob2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBvaWQsICZzaXplKSA9PSBPQkpfQkFEKQorCQkJCQl4c25wcmludGYoc2l6ZV90ZXh0LCBzaXplb2Yoc2l6ZV90ZXh0KSwKKwkJCQkJCSAgIkJBRCIpOworCQkJCWVsc2UKKwkJCQkJeHNucHJpbnRmKHNpemVfdGV4dCwgc2l6ZW9mKHNpemVfdGV4dCksCisJCQkJCQkgICIlIlBSSXVNQVgsICh1aW50bWF4X3Qpc2l6ZSk7CisJCQl9IGVsc2UKKwkJCQl4c25wcmludGYoc2l6ZV90ZXh0LCBzaXplb2Yoc2l6ZV90ZXh0KSwgIi0iKTsKKwkJCXByaW50ZigiJTA2byAlcyAlcyAlN3NcdCIsIG1vZGUsIHR5cGUsCisJCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KG9pZCwgYWJicmV2KSwKKwkJCSAgICAgICBzaXplX3RleHQpOworCQl9IGVsc2UKKwkJCXByaW50ZigiJTA2byAlcyAlc1x0IiwgbW9kZSwgdHlwZSwKKwkJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYob2lkLCBhYmJyZXYpKTsKKwl9CisJYmFzZWxlbiA9IGJhc2UtPmxlbjsKKwlzdHJidWZfYWRkc3RyKGJhc2UsIHBhdGhuYW1lKTsKKwl3cml0ZV9uYW1lX3F1b3RlZF9yZWxhdGl2ZShiYXNlLT5idWYsCisJCQkJICAgY2hvbXBfcHJlZml4ID8gbHNfdHJlZV9wcmVmaXggOiBOVUxMLAorCQkJCSAgIHN0ZG91dCwgbGluZV90ZXJtaW5hdGlvbik7CisJc3RyYnVmX3NldGxlbihiYXNlLCBiYXNlbGVuKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgY21kX2xzX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IHRyZWUgKnRyZWU7CisJaW50IGksIGZ1bGxfdHJlZSA9IDA7CisJY29uc3Qgc3RydWN0IG9wdGlvbiBsc190cmVlX29wdGlvbnNbXSA9IHsKKwkJT1BUX0JJVCgnZCcsIE5VTEwsICZsc19vcHRpb25zLCBOXygib25seSBzaG93IHRyZWVzIiksCisJCQlMU19UUkVFX09OTFkpLAorCQlPUFRfQklUKCdyJywgTlVMTCwgJmxzX29wdGlvbnMsIE5fKCJyZWN1cnNlIGludG8gc3VidHJlZXMiKSwKKwkJCUxTX1JFQ1VSU0lWRSksCisJCU9QVF9CSVQoJ3QnLCBOVUxMLCAmbHNfb3B0aW9ucywgTl8oInNob3cgdHJlZXMgd2hlbiByZWN1cnNpbmciKSwKKwkJCUxTX1NIT1dfVFJFRVMpLAorCQlPUFRfU0VUX0lOVCgneicsIE5VTEwsICZsaW5lX3Rlcm1pbmF0aW9uLAorCQkJICAgIE5fKCJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIiksIDApLAorCQlPUFRfQklUKCdsJywgImxvbmciLCAmbHNfb3B0aW9ucywgTl8oImluY2x1ZGUgb2JqZWN0IHNpemUiKSwKKwkJCUxTX1NIT1dfU0laRSksCisJCU9QVF9CSVQoMCwgIm5hbWUtb25seSIsICZsc19vcHRpb25zLCBOXygibGlzdCBvbmx5IGZpbGVuYW1lcyIpLAorCQkJTFNfTkFNRV9PTkxZKSwKKwkJT1BUX0JJVCgwLCAibmFtZS1zdGF0dXMiLCAmbHNfb3B0aW9ucywgTl8oImxpc3Qgb25seSBmaWxlbmFtZXMiKSwKKwkJCUxTX05BTUVfT05MWSksCisJCU9QVF9TRVRfSU5UKDAsICJmdWxsLW5hbWUiLCAmY2hvbXBfcHJlZml4LAorCQkJICAgIE5fKCJ1c2UgZnVsbCBwYXRoIG5hbWVzIiksIDApLAorCQlPUFRfQk9PTCgwLCAiZnVsbC10cmVlIiwgJmZ1bGxfdHJlZSwKKwkJCSBOXygibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgIgorCQkJICAgICIoaW1wbGllcyAtLWZ1bGwtbmFtZSkiKSksCisJCU9QVF9fQUJCUkVWKCZhYmJyZXYpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWxzX3RyZWVfcHJlZml4ID0gcHJlZml4OworCWlmIChwcmVmaXggJiYgKnByZWZpeCkKKwkJY2hvbXBfcHJlZml4ID0gc3RybGVuKHByZWZpeCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGxzX3RyZWVfb3B0aW9ucywKKwkJCSAgICAgbHNfdHJlZV91c2FnZSwgMCk7CisJaWYgKGZ1bGxfdHJlZSkgeworCQlsc190cmVlX3ByZWZpeCA9IHByZWZpeCA9IE5VTEw7CisJCWNob21wX3ByZWZpeCA9IDA7CisJfQorCS8qIC1kIC1yIHNob3VsZCBpbXBseSAtdCwgYnV0IC1kIGJ5IGl0c2VsZiBzaG91bGQgbm90IGhhdmUgdG8uICovCisJaWYgKCAoTFNfVFJFRV9PTkxZfExTX1JFQ1VSU0lWRSkgPT0KKwkgICAgKChMU19UUkVFX09OTFl8TFNfUkVDVVJTSVZFKSAmIGxzX29wdGlvbnMpKQorCQlsc19vcHRpb25zIHw9IExTX1NIT1dfVFJFRVM7CisKKwlpZiAoYXJnYyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhsc190cmVlX3VzYWdlLCBsc190cmVlX29wdGlvbnMpOworCWlmIChnZXRfb2lkKGFyZ3ZbMF0sICZvaWQpKQorCQlkaWUoIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIiwgYXJndlswXSk7CisKKwkvKgorCSAqIHNob3dfcmVjdXJzaXZlKCkgcm9sbHMgaXRzIG93biBtYXRjaGluZyBjb2RlIGFuZCBpcworCSAqIGdlbmVyYWxseSBpZ25vcmFudCBvZiAnc3RydWN0IHBhdGhzcGVjJy4gVGhlIG1hZ2ljIG1hc2sKKwkgKiBjYW5ub3QgYmUgbGlmdGVkIHVudGlsIGl0IGlzIGNvbnZlcnRlZCB0byB1c2UKKwkgKiBtYXRjaF9wYXRoc3BlYygpIG9yIHRyZWVfZW50cnlfaW50ZXJlc3RpbmcoKQorCSAqLworCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywgUEFUSFNQRUNfQUxMX01BR0lDICYKKwkJCQkgIH4oUEFUSFNQRUNfRlJPTVRPUCB8IFBBVEhTUEVDX0xJVEVSQUwpLAorCQkgICAgICAgUEFUSFNQRUNfUFJFRkVSX0NXRCwKKwkJICAgICAgIHByZWZpeCwgYXJndiArIDEpOworCWZvciAoaSA9IDA7IGkgPCBwYXRoc3BlYy5ucjsgaSsrKQorCQlwYXRoc3BlYy5pdGVtc1tpXS5ub3dpbGRjYXJkX2xlbiA9IHBhdGhzcGVjLml0ZW1zW2ldLmxlbjsKKwlwYXRoc3BlYy5oYXNfd2lsZGNhcmQgPSAwOworCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KCZvaWQpOworCWlmICghdHJlZSkKKwkJZGllKCJub3QgYSB0cmVlIG9iamVjdCIpOworCXJldHVybiAhIXJlYWRfdHJlZV9yZWN1cnNpdmUodGhlX3JlcG9zaXRvcnksIHRyZWUsICIiLCAwLCAwLAorCQkJCSAgICAgJnBhdGhzcGVjLCBzaG93X3RyZWUsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tYWlsaW5mby5jIGIvYnVpbHRpbi9tYWlsaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYjY2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21haWxpbmZvLmMKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIEFub3RoZXIgc3R1cGlkIHByb2dyYW0sIHRoaXMgb25lIHBhcnNpbmcgdGhlIGhlYWRlcnMgb2YgYW4KKyAqIGVtYWlsIHRvIGZpZ3VyZSBvdXQgYXV0aG9yc2hpcCBhbmQgc3ViamVjdAorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgIm1haWxpbmZvLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIG1haWxpbmZvX3VzYWdlW10gPQorCSJnaXQgbWFpbGluZm8gWy1rIHwgLWJdIFstbSB8IC0tbWVzc2FnZS1pZF0gWy11IHwgLS1lbmNvZGluZz08ZW5jb2Rpbmc+IHwgLW5dIFstLXNjaXNzb3JzIHwgLS1uby1zY2lzc29yc10gPG1zZz4gPHBhdGNoPiA8IG1haWwgPmluZm8iOworCitpbnQgY21kX21haWxpbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKmRlZl9jaGFyc2V0OworCXN0cnVjdCBtYWlsaW5mbyBtaTsKKwlpbnQgc3RhdHVzOworCWNoYXIgKm1zZ2ZpbGUsICpwYXRjaGZpbGU7CisKKwlzZXR1cF9tYWlsaW5mbygmbWkpOworCisJZGVmX2NoYXJzZXQgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOworCW1pLm1ldGFpbmZvX2NoYXJzZXQgPSBkZWZfY2hhcnNldDsKKworCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgeworCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLWsiKSkKKwkJCW1pLmtlZXBfc3ViamVjdCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1iIikpCisJCQltaS5rZWVwX25vbl9wYXRjaF9icmFja2V0c19pbl9zdWJqZWN0ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLW0iKSB8fCAhc3RyY21wKGFyZ3ZbMV0sICItLW1lc3NhZ2UtaWQiKSkKKwkJCW1pLmFkZF9tZXNzYWdlX2lkID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLXUiKSkKKwkJCW1pLm1ldGFpbmZvX2NoYXJzZXQgPSBkZWZfY2hhcnNldDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLW4iKSkKKwkJCW1pLm1ldGFpbmZvX2NoYXJzZXQgPSBOVUxMOworCQllbHNlIGlmIChzdGFydHNfd2l0aChhcmd2WzFdLCAiLS1lbmNvZGluZz0iKSkKKwkJCW1pLm1ldGFpbmZvX2NoYXJzZXQgPSBhcmd2WzFdICsgMTE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tc2Npc3NvcnMiKSkKKwkJCW1pLnVzZV9zY2lzc29ycyA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tbm8tc2Npc3NvcnMiKSkKKwkJCW1pLnVzZV9zY2lzc29ycyA9IDA7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tbm8taW5ib2R5LWhlYWRlcnMiKSkKKwkJCW1pLnVzZV9pbmJvZHlfaGVhZGVycyA9IDA7CisJCWVsc2UKKwkJCXVzYWdlKG1haWxpbmZvX3VzYWdlKTsKKwkJYXJnYy0tOyBhcmd2Kys7CisJfQorCisJaWYgKGFyZ2MgIT0gMykKKwkJdXNhZ2UobWFpbGluZm9fdXNhZ2UpOworCisJbWkuaW5wdXQgPSBzdGRpbjsKKwltaS5vdXRwdXQgPSBzdGRvdXQ7CisKKwltc2dmaWxlID0gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgYXJndlsxXSk7CisJcGF0Y2hmaWxlID0gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgYXJndlsyXSk7CisKKwlzdGF0dXMgPSAhIW1haWxpbmZvKCZtaSwgbXNnZmlsZSwgcGF0Y2hmaWxlKTsKKwljbGVhcl9tYWlsaW5mbygmbWkpOworCisJZnJlZShtc2dmaWxlKTsKKwlmcmVlKHBhdGNoZmlsZSk7CisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWFpbHNwbGl0LmMgYi9idWlsdGluL21haWxzcGxpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NDQwMGIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21haWxzcGxpdC5jCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogVG90YWxseSBicmFpbmRhbWFnZWQgbWJveCBzcGxpdHRlciBwcm9ncmFtLgorICoKKyAqIEl0IGp1c3Qgc3BsaXRzIGEgbWJveCBpbnRvIGEgbGlzdCBvZiBmaWxlczogIjAwMDEiICIwMDAyIiAuLgorICogc28geW91IGNhbiBwcm9jZXNzIHRoZW0gZnVydGhlciBmcm9tIHRoZXJlLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgZ2l0X21haWxzcGxpdF91c2FnZVtdID0KKyJnaXQgbWFpbHNwbGl0IFstZDxwcmVjPl0gWy1mPG4+XSBbLWJdIFstLWtlZXAtY3JdIC1vPGRpcmVjdG9yeT4gWyg8bWJveD58PE1haWxkaXI+KS4uLl0iOworCitzdGF0aWMgaW50IGlzX2Zyb21fbGluZShjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWNvbnN0IGNoYXIgKmNvbG9uOworCisJaWYgKGxlbiA8IDIwIHx8IG1lbWNtcCgiRnJvbSAiLCBsaW5lLCA1KSkKKwkJcmV0dXJuIDA7CisKKwljb2xvbiA9IGxpbmUgKyBsZW4gLSAyOworCWxpbmUgKz0gNTsKKwlmb3IgKDs7KSB7CisJCWlmIChjb2xvbiA8IGxpbmUpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCotLWNvbG9uID09ICc6JykKKwkJCWJyZWFrOworCX0KKworCWlmICghaXNkaWdpdChjb2xvblstNF0pIHx8CisJICAgICFpc2RpZ2l0KGNvbG9uWy0yXSkgfHwKKwkgICAgIWlzZGlnaXQoY29sb25bLTFdKSB8fAorCSAgICAhaXNkaWdpdChjb2xvblsgMV0pIHx8CisJICAgICFpc2RpZ2l0KGNvbG9uWyAyXSkpCisJCXJldHVybiAwOworCisJLyogeWVhciAqLworCWlmIChzdHJ0b2woY29sb24rMywgTlVMTCwgMTApIDw9IDkwKQorCQlyZXR1cm4gMDsKKworCS8qIE9rLCBjbG9zZSBlbm91Z2ggKi8KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgaW50IGtlZXBfY3I7CitzdGF0aWMgaW50IG1ib3hyZDsKKworc3RhdGljIGludCBpc19ndGZyb20oY29uc3Qgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCXNpemVfdCBtaW4gPSBzdHJsZW4oIj5Gcm9tICIpOworCXNpemVfdCBuZ3Q7CisKKwlpZiAoYnVmLT5sZW4gPCBtaW4pCisJCXJldHVybiAwOworCisJbmd0ID0gc3Ryc3BuKGJ1Zi0+YnVmLCAiPiIpOworCXJldHVybiBuZ3QgJiYgc3RhcnRzX3dpdGgoYnVmLT5idWYgKyBuZ3QsICJGcm9tICIpOworfQorCisvKiBDYWxsZWQgd2l0aCB0aGUgZmlyc3QgbGluZSAocG90ZW50aWFsbHkgcGFydGlhbCkKKyAqIGFscmVhZHkgaW4gYnVmW10gLS0gbm9ybWFsbHkgdGhhdCBzaG91bGQgYmVnaW4gd2l0aAorICogdGhlIFVuaXggIkZyb20gIiBsaW5lLiAgV3JpdGUgaXQgaW50byB0aGUgc3BlY2lmaWVkCisgKiBmaWxlLgorICovCitzdGF0aWMgaW50IHNwbGl0X29uZShGSUxFICptYm94LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgYWxsb3dfYmFyZSkKK3sKKwlGSUxFICpvdXRwdXQ7CisJaW50IGZkOworCWludCBzdGF0dXMgPSAwOworCWludCBpc19iYXJlID0gIWlzX2Zyb21fbGluZShidWYuYnVmLCBidWYubGVuKTsKKworCWlmIChpc19iYXJlICYmICFhbGxvd19iYXJlKSB7CisJCWZwcmludGYoc3RkZXJyLCAiY29ycnVwdCBtYWlsYm94XG4iKTsKKwkJZXhpdCgxKTsKKwl9CisJZmQgPSBvcGVuKG5hbWUsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiBvdXRwdXQgZmlsZSAnJXMnIiwgbmFtZSk7CisJb3V0cHV0ID0geGZkb3BlbihmZCwgInciKTsKKworCS8qIENvcHkgaXQgb3V0LCB3aGlsZSBzZWFyY2hpbmcgZm9yIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoCisJICogIkZyb20gIiBhbmQgaGF2aW5nIHNvbWV0aGluZyB0aGF0IGxvb2tzIGxpa2UgYSBkYXRlIGZvcm1hdC4KKwkgKi8KKwlmb3IgKDs7KSB7CisJCWlmICgha2VlcF9jciAmJiBidWYubGVuID4gMSAmJiBidWYuYnVmW2J1Zi5sZW4tMV0gPT0gJ1xuJyAmJgorCQkJYnVmLmJ1ZltidWYubGVuLTJdID09ICdccicpIHsKKwkJCXN0cmJ1Zl9zZXRsZW4oJmJ1ZiwgYnVmLmxlbi0yKTsKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwkJfQorCisJCWlmIChtYm94cmQgJiYgaXNfZ3Rmcm9tKCZidWYpKQorCQkJc3RyYnVmX3JlbW92ZSgmYnVmLCAwLCAxKTsKKworCQlpZiAoZndyaXRlKGJ1Zi5idWYsIDEsIGJ1Zi5sZW4sIG91dHB1dCkgIT0gYnVmLmxlbikKKwkJCWRpZV9lcnJubygiY2Fubm90IHdyaXRlIG91dHB1dCIpOworCisJCWlmIChzdHJidWZfZ2V0d2hvbGVsaW5lKCZidWYsIG1ib3gsICdcbicpKSB7CisJCQlpZiAoZmVvZihtYm94KSkgeworCQkJCXN0YXR1cyA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkaWVfZXJybm8oImNhbm5vdCByZWFkIG1ib3giKTsKKwkJfQorCQlpZiAoIWlzX2JhcmUgJiYgaXNfZnJvbV9saW5lKGJ1Zi5idWYsIGJ1Zi5sZW4pKQorCQkJYnJlYWs7IC8qIGRvbmUgd2l0aCBvbmUgbWVzc2FnZSAqLworCX0KKwlmY2xvc2Uob3V0cHV0KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHBvcHVsYXRlX21haWxkaXJfbGlzdChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZGVudDsKKwljaGFyICpuYW1lID0gTlVMTDsKKwljaGFyICpzdWJzW10gPSB7ICJjdXIiLCAibmV3IiwgTlVMTCB9OworCWNoYXIgKipzdWI7CisJaW50IHJldCA9IC0xOworCisJZm9yIChzdWIgPSBzdWJzOyAqc3ViOyArK3N1YikgeworCQlmcmVlKG5hbWUpOworCQluYW1lID0geHN0cmZtdCgiJXMvJXMiLCBwYXRoLCAqc3ViKTsKKwkJaWYgKChkaXIgPSBvcGVuZGlyKG5hbWUpKSA9PSBOVUxMKSB7CisJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJCWNvbnRpbnVlOworCQkJZXJyb3JfZXJybm8oImNhbm5vdCBvcGVuZGlyICVzIiwgbmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQkJaWYgKGRlbnQtPmRfbmFtZVswXSA9PSAnLicpCisJCQkJY29udGludWU7CisJCQlmcmVlKG5hbWUpOworCQkJbmFtZSA9IHhzdHJmbXQoIiVzLyVzIiwgKnN1YiwgZGVudC0+ZF9uYW1lKTsKKwkJCXN0cmluZ19saXN0X2luc2VydChsaXN0LCBuYW1lKTsKKwkJfQorCisJCWNsb3NlZGlyKGRpcik7CisJfQorCisJcmV0ID0gMDsKKworb3V0OgorCWZyZWUobmFtZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYWlsZGlyX2ZpbGVuYW1lX2NtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworCXdoaWxlICgqYSAmJiAqYikgeworCQlpZiAoaXNkaWdpdCgqYSkgJiYgaXNkaWdpdCgqYikpIHsKKwkJCWxvbmcgaW50IG5hLCBuYjsKKwkJCW5hID0gc3RydG9sKGEsIChjaGFyICoqKSZhLCAxMCk7CisJCQluYiA9IHN0cnRvbChiLCAoY2hhciAqKikmYiwgMTApOworCQkJaWYgKG5hICE9IG5iKQorCQkJCXJldHVybiBuYSAtIG5iOworCQkJLyogc3RydG9sIGFkdmFuY2VkIG91ciBwb2ludGVycyAqLworCQl9CisJCWVsc2UgeworCQkJaWYgKCphICE9ICpiKQorCQkJCXJldHVybiAodW5zaWduZWQgY2hhcikqYSAtICh1bnNpZ25lZCBjaGFyKSpiOworCQkJYSsrOworCQkJYisrOworCQl9CisJfQorCXJldHVybiAodW5zaWduZWQgY2hhcikqYSAtICh1bnNpZ25lZCBjaGFyKSpiOworfQorCitzdGF0aWMgaW50IHNwbGl0X21haWxkaXIoY29uc3QgY2hhciAqbWFpbGRpciwgY29uc3QgY2hhciAqZGlyLAorCWludCBucl9wcmVjLCBpbnQgc2tpcCkKK3sKKwljaGFyICpmaWxlID0gTlVMTDsKKwlGSUxFICpmID0gTlVMTDsKKwlpbnQgcmV0ID0gLTE7CisJaW50IGk7CisJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCWxpc3QuY21wID0gbWFpbGRpcl9maWxlbmFtZV9jbXA7CisKKwlpZiAocG9wdWxhdGVfbWFpbGRpcl9saXN0KCZsaXN0LCBtYWlsZGlyKSA8IDApCisJCWdvdG8gb3V0OworCisJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykgeworCQljaGFyICpuYW1lOworCisJCWZyZWUoZmlsZSk7CisJCWZpbGUgPSB4c3RyZm10KCIlcy8lcyIsIG1haWxkaXIsIGxpc3QuaXRlbXNbaV0uc3RyaW5nKTsKKworCQlmID0gZm9wZW4oZmlsZSwgInIiKTsKKwkJaWYgKCFmKSB7CisJCQllcnJvcl9lcnJubygiY2Fubm90IG9wZW4gbWFpbCAlcyIsIGZpbGUpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoc3RyYnVmX2dldHdob2xlbGluZSgmYnVmLCBmLCAnXG4nKSkgeworCQkJZXJyb3JfZXJybm8oImNhbm5vdCByZWFkIG1haWwgJXMiLCBmaWxlKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbmFtZSA9IHhzdHJmbXQoIiVzLyUwKmQiLCBkaXIsIG5yX3ByZWMsICsrc2tpcCk7CisJCXNwbGl0X29uZShmLCBuYW1lLCAxKTsKKwkJZnJlZShuYW1lKTsKKworCQlmY2xvc2UoZik7CisJCWYgPSBOVUxMOworCX0KKworCXJldCA9IHNraXA7CitvdXQ6CisJaWYgKGYpCisJCWZjbG9zZShmKTsKKwlmcmVlKGZpbGUpOworCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNwbGl0X21ib3goY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqZGlyLCBpbnQgYWxsb3dfYmFyZSwKKwkJICAgICAgaW50IG5yX3ByZWMsIGludCBza2lwKQoreworCWludCByZXQgPSAtMTsKKwlpbnQgcGVlazsKKworCUZJTEUgKmYgPSAhc3RyY21wKGZpbGUsICItIikgPyBzdGRpbiA6IGZvcGVuKGZpbGUsICJyIik7CisJaW50IGZpbGVfZG9uZSA9IDA7CisKKwlpZiAoIWYpIHsKKwkJZXJyb3JfZXJybm8oImNhbm5vdCBvcGVuIG1ib3ggJXMiLCBmaWxlKTsKKwkJZ290byBvdXQ7CisJfQorCisJZG8geworCQlwZWVrID0gZmdldGMoZik7CisJCWlmIChwZWVrID09IEVPRikgeworCQkJaWYgKGYgPT0gc3RkaW4pCisJCQkJLyogZW1wdHkgc3RkaW4gaXMgT0sgKi8KKwkJCQlyZXQgPSBza2lwOworCQkJZWxzZSB7CisJCQkJZmNsb3NlKGYpOworCQkJCWVycm9yKF8oImVtcHR5IG1ib3g6ICclcyciKSwgZmlsZSk7CisJCQl9CisJCQlnb3RvIG91dDsKKwkJfQorCX0gd2hpbGUgKGlzc3BhY2UocGVlaykpOworCXVuZ2V0YyhwZWVrLCBmKTsKKworCWlmIChzdHJidWZfZ2V0d2hvbGVsaW5lKCZidWYsIGYsICdcbicpKSB7CisJCS8qIGVtcHR5IHN0ZGluIGlzIE9LICovCisJCWlmIChmICE9IHN0ZGluKSB7CisJCQllcnJvcigiY2Fubm90IHJlYWQgbWJveCAlcyIsIGZpbGUpOworCQkJZ290byBvdXQ7CisJCX0KKwkJZmlsZV9kb25lID0gMTsKKwl9CisKKwl3aGlsZSAoIWZpbGVfZG9uZSkgeworCQljaGFyICpuYW1lID0geHN0cmZtdCgiJXMvJTAqZCIsIGRpciwgbnJfcHJlYywgKytza2lwKTsKKwkJZmlsZV9kb25lID0gc3BsaXRfb25lKGYsIG5hbWUsIGFsbG93X2JhcmUpOworCQlmcmVlKG5hbWUpOworCX0KKworCWlmIChmICE9IHN0ZGluKQorCQlmY2xvc2UoZik7CisKKwlyZXQgPSBza2lwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK2ludCBjbWRfbWFpbHNwbGl0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBuciA9IDAsIG5yX3ByZWMgPSA0LCBudW0gPSAwOworCWludCBhbGxvd19iYXJlID0gMDsKKwljb25zdCBjaGFyICpkaXIgPSBOVUxMOworCWNvbnN0IGNoYXIgKiphcmdwOworCXN0YXRpYyBjb25zdCBjaGFyICpzdGRpbl9vbmx5W10gPSB7ICItIiwgTlVMTCB9OworCisJZm9yIChhcmdwID0gYXJndisxOyAqYXJncDsgYXJncCsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9ICphcmdwOworCisJCWlmIChhcmdbMF0gIT0gJy0nKQorCQkJYnJlYWs7CisJCS8qIGRvIGZsYWdzIGhlcmUgKi8KKwkJaWYgKCBhcmdbMV0gPT0gJ2QnICkgeworCQkJbnJfcHJlYyA9IHN0cnRvbChhcmcrMiwgTlVMTCwgMTApOworCQkJaWYgKG5yX3ByZWMgPCAzIHx8IDEwIDw9IG5yX3ByZWMpCisJCQkJdXNhZ2UoZ2l0X21haWxzcGxpdF91c2FnZSk7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICggYXJnWzFdID09ICdmJyApIHsKKwkJCW5yID0gc3RydG9sKGFyZysyLCBOVUxMLCAxMCk7CisJCX0gZWxzZSBpZiAoIGFyZ1sxXSA9PSAnaCcgKSB7CisJCQl1c2FnZShnaXRfbWFpbHNwbGl0X3VzYWdlKTsKKwkJfSBlbHNlIGlmICggYXJnWzFdID09ICdiJyAmJiAhYXJnWzJdICkgeworCQkJYWxsb3dfYmFyZSA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWtlZXAtY3IiKSkgeworCQkJa2VlcF9jciA9IDE7CisJCX0gZWxzZSBpZiAoIGFyZ1sxXSA9PSAnbycgJiYgYXJnWzJdICkgeworCQkJZGlyID0gYXJnKzI7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW1ib3hyZCIpKSB7CisJCQltYm94cmQgPSAxOworCQl9IGVsc2UgaWYgKCBhcmdbMV0gPT0gJy0nICYmICFhcmdbMl0gKSB7CisJCQlhcmdwKys7CS8qIC0tIG1hcmtzIGVuZCBvZiBvcHRpb25zICovCisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWRpZSgidW5rbm93biBvcHRpb246ICVzIiwgYXJnKTsKKwkJfQorCX0KKworCWlmICggIWRpciApIHsKKwkJLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHk6IGlmIG5vIC1vIHNwZWNpZmllZCwgYWNjZXB0CisJCSAgIDxtYm94PiA8ZGlyPiBvciBqdXN0IDxkaXI+ICovCisJCXN3aXRjaCAoYXJnYyAtIChhcmdwLWFyZ3YpKSB7CisJCWNhc2UgMToKKwkJCWRpciA9IGFyZ3BbMF07CisJCQlhcmdwID0gc3RkaW5fb25seTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlzdGRpbl9vbmx5WzBdID0gYXJncFswXTsKKwkJCWRpciA9IGFyZ3BbMV07CisJCQlhcmdwID0gc3RkaW5fb25seTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2UoZ2l0X21haWxzcGxpdF91c2FnZSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBOZXcgdXNhZ2U6IGlmIG5vIG1vcmUgYXJndW1lbnQsIHBhcnNlIHN0ZGluICovCisJCWlmICggISphcmdwICkKKwkJCWFyZ3AgPSBzdGRpbl9vbmx5OworCX0KKworCXdoaWxlICgqYXJncCkgeworCQljb25zdCBjaGFyICphcmcgPSAqYXJncCsrOworCQlzdHJ1Y3Qgc3RhdCBhcmdzdGF0OworCQlpbnQgcmV0ID0gMDsKKworCQlpZiAoYXJnWzBdID09ICctJyAmJiBhcmdbMV0gPT0gMCkgeworCQkJcmV0ID0gc3BsaXRfbWJveChhcmcsIGRpciwgYWxsb3dfYmFyZSwgbnJfcHJlYywgbnIpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQllcnJvcigiY2Fubm90IHNwbGl0IHBhdGNoZXMgZnJvbSBzdGRpbiIpOworCQkJCXJldHVybiAxOworCQkJfQorCQkJbnVtICs9IChyZXQgLSBucik7CisJCQluciA9IHJldDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHN0YXQoYXJnLCAmYXJnc3RhdCkgPT0gLTEpIHsKKwkJCWVycm9yX2Vycm5vKCJjYW5ub3Qgc3RhdCAlcyIsIGFyZyk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWlmIChTX0lTRElSKGFyZ3N0YXQuc3RfbW9kZSkpCisJCQlyZXQgPSBzcGxpdF9tYWlsZGlyKGFyZywgZGlyLCBucl9wcmVjLCBucik7CisJCWVsc2UKKwkJCXJldCA9IHNwbGl0X21ib3goYXJnLCBkaXIsIGFsbG93X2JhcmUsIG5yX3ByZWMsIG5yKTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJZXJyb3IoImNhbm5vdCBzcGxpdCBwYXRjaGVzIGZyb20gJXMiLCBhcmcpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJbnVtICs9IChyZXQgLSBucik7CisJCW5yID0gcmV0OworCX0KKworCXByaW50ZigiJWRcbiIsIG51bSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWVyZ2UtYmFzZS5jIGIvYnVpbHRpbi9tZXJnZS1iYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxOWFjMQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWVyZ2UtYmFzZS5jCkBAIC0wLDAgKzEsMTg4IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisKK3N0YXRpYyBpbnQgc2hvd19tZXJnZV9iYXNlKHN0cnVjdCBjb21taXQgKipyZXYsIGludCByZXZfbnIsIGludCBzaG93X2FsbCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdCwgKnI7CisKKwlyZXN1bHQgPSBnZXRfbWVyZ2VfYmFzZXNfbWFueV9kaXJ0eShyZXZbMF0sIHJldl9uciAtIDEsIHJldiArIDEpOworCisJaWYgKCFyZXN1bHQpCisJCXJldHVybiAxOworCisJZm9yIChyID0gcmVzdWx0OyByOyByID0gci0+bmV4dCkgeworCQlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KCZyLT5pdGVtLT5vYmplY3Qub2lkKSk7CisJCWlmICghc2hvd19hbGwpCisJCQlicmVhazsKKwl9CisKKwlmcmVlX2NvbW1pdF9saXN0KHJlc3VsdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWVyZ2VfYmFzZV91c2FnZVtdID0geworCU5fKCJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iKSwKKwlOXygiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIpLAorCU5fKCJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDxjb21taXQ+Li4uIiksCisJTl8oImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iKSwKKwlOXygiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqZ2V0X2NvbW1pdF9yZWZlcmVuY2UoY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdCBvYmplY3RfaWQgcmV2a2V5OworCXN0cnVjdCBjb21taXQgKnI7CisKKwlpZiAoZ2V0X29pZChhcmcsICZyZXZrZXkpKQorCQlkaWUoIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIiwgYXJnKTsKKwlyID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksICZyZXZrZXkpOworCWlmICghcikKKwkJZGllKCJOb3QgYSB2YWxpZCBjb21taXQgbmFtZSAlcyIsIGFyZyk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBoYW5kbGVfaW5kZXBlbmRlbnQoaW50IGNvdW50LCBjb25zdCBjaGFyICoqYXJncykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJldnMgPSBOVUxMLCAqcmV2OworCWludCBpOworCisJZm9yIChpID0gY291bnQgLSAxOyBpID49IDA7IGktLSkKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGdldF9jb21taXRfcmVmZXJlbmNlKGFyZ3NbaV0pLCAmcmV2cyk7CisKKwlyZWR1Y2VfaGVhZHNfcmVwbGFjZSgmcmV2cyk7CisKKwlpZiAoIXJldnMpCisJCXJldHVybiAxOworCisJZm9yIChyZXYgPSByZXZzOyByZXY7IHJldiA9IHJldi0+bmV4dCkKKwkJcHJpbnRmKCIlc1xuIiwgb2lkX3RvX2hleCgmcmV2LT5pdGVtLT5vYmplY3Qub2lkKSk7CisKKwlmcmVlX2NvbW1pdF9saXN0KHJldnMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9vY3RvcHVzKGludCBjb3VudCwgY29uc3QgY2hhciAqKmFyZ3MsIGludCBzaG93X2FsbCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJldnMgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqcmVzdWx0LCAqcmV2OworCWludCBpOworCisJZm9yIChpID0gY291bnQgLSAxOyBpID49IDA7IGktLSkKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGdldF9jb21taXRfcmVmZXJlbmNlKGFyZ3NbaV0pLCAmcmV2cyk7CisKKwlyZXN1bHQgPSBnZXRfb2N0b3B1c19tZXJnZV9iYXNlcyhyZXZzKTsKKwlmcmVlX2NvbW1pdF9saXN0KHJldnMpOworCXJlZHVjZV9oZWFkc19yZXBsYWNlKCZyZXN1bHQpOworCisJaWYgKCFyZXN1bHQpCisJCXJldHVybiAxOworCisJZm9yIChyZXYgPSByZXN1bHQ7IHJldjsgcmV2ID0gcmV2LT5uZXh0KSB7CisJCXByaW50ZigiJXNcbiIsIG9pZF90b19oZXgoJnJldi0+aXRlbS0+b2JqZWN0Lm9pZCkpOworCQlpZiAoIXNob3dfYWxsKQorCQkJYnJlYWs7CisJfQorCisJZnJlZV9jb21taXRfbGlzdChyZXN1bHQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9pc19hbmNlc3RvcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGNvbW1pdCAqb25lLCAqdHdvOworCisJaWYgKGFyZ2MgIT0gMikKKwkJZGllKCItLWlzLWFuY2VzdG9yIHRha2VzIGV4YWN0bHkgdHdvIGNvbW1pdHMiKTsKKwlvbmUgPSBnZXRfY29tbWl0X3JlZmVyZW5jZShhcmd2WzBdKTsKKwl0d28gPSBnZXRfY29tbWl0X3JlZmVyZW5jZShhcmd2WzFdKTsKKwlpZiAoaW5fbWVyZ2VfYmFzZXMob25lLCB0d28pKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9mb3JrX3BvaW50KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgY29tbWl0ICpkZXJpdmVkLCAqZm9ya19wb2ludDsKKwljb25zdCBjaGFyICpjb21taXRuYW1lOworCisJY29tbWl0bmFtZSA9IChhcmdjID09IDIpID8gYXJndlsxXSA6ICJIRUFEIjsKKwlpZiAoZ2V0X29pZChjb21taXRuYW1lLCAmb2lkKSkKKwkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIsIGNvbW1pdG5hbWUpOworCisJZGVyaXZlZCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKworCWZvcmtfcG9pbnQgPSBnZXRfZm9ya19wb2ludChhcmd2WzBdLCBkZXJpdmVkKTsKKworCWlmICghZm9ya19wb2ludCkKKwkJcmV0dXJuIDE7CisKKwlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KCZmb3JrX3BvaW50LT5vYmplY3Qub2lkKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfbWVyZ2VfYmFzZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICoqcmV2OworCWludCByZXZfbnIgPSAwOworCWludCBzaG93X2FsbCA9IDA7CisJaW50IGNtZG1vZGUgPSAwOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdhJywgImFsbCIsICZzaG93X2FsbCwgTl8oIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIpKSwKKwkJT1BUX0NNRE1PREUoMCwgIm9jdG9wdXMiLCAmY21kbW9kZSwKKwkJCSAgICBOXygiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIiksICdvJyksCisJCU9QVF9DTURNT0RFKDAsICJpbmRlcGVuZGVudCIsICZjbWRtb2RlLAorCQkJICAgIE5fKCJsaXN0IHJldnMgbm90IHJlYWNoYWJsZSBmcm9tIG90aGVycyIpLCAncicpLAorCQlPUFRfQ01ETU9ERSgwLCAiaXMtYW5jZXN0b3IiLCAmY21kbW9kZSwKKwkJCSAgICBOXygiaXMgdGhlIGZpcnN0IG9uZSBhbmNlc3RvciBvZiB0aGUgb3RoZXI/IiksICdhJyksCisJCU9QVF9DTURNT0RFKDAsICJmb3JrLXBvaW50IiwgJmNtZG1vZGUsCisJCQkgICAgTl8oImZpbmQgd2hlcmUgPGNvbW1pdD4gZm9ya2VkIGZyb20gcmVmbG9nIG9mIDxyZWY+IiksICdmJyksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBtZXJnZV9iYXNlX3VzYWdlLCAwKTsKKworCWlmIChjbWRtb2RlID09ICdhJykgeworCQlpZiAoYXJnYyA8IDIpCisJCQl1c2FnZV93aXRoX29wdGlvbnMobWVyZ2VfYmFzZV91c2FnZSwgb3B0aW9ucyk7CisJCWlmIChzaG93X2FsbCkKKwkJCWRpZSgiLS1pcy1hbmNlc3RvciBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tYWxsIik7CisJCXJldHVybiBoYW5kbGVfaXNfYW5jZXN0b3IoYXJnYywgYXJndik7CisJfQorCisJaWYgKGNtZG1vZGUgPT0gJ3InICYmIHNob3dfYWxsKQorCQlkaWUoIi0taW5kZXBlbmRlbnQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLWFsbCIpOworCisJaWYgKGNtZG1vZGUgPT0gJ28nKQorCQlyZXR1cm4gaGFuZGxlX29jdG9wdXMoYXJnYywgYXJndiwgc2hvd19hbGwpOworCisJaWYgKGNtZG1vZGUgPT0gJ3InKQorCQlyZXR1cm4gaGFuZGxlX2luZGVwZW5kZW50KGFyZ2MsIGFyZ3YpOworCisJaWYgKGNtZG1vZGUgPT0gJ2YnKSB7CisJCWlmIChhcmdjIDwgMSB8fCAyIDwgYXJnYykKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhtZXJnZV9iYXNlX3VzYWdlLCBvcHRpb25zKTsKKwkJcmV0dXJuIGhhbmRsZV9mb3JrX3BvaW50KGFyZ2MsIGFyZ3YpOworCX0KKworCWlmIChhcmdjIDwgMikKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKG1lcmdlX2Jhc2VfdXNhZ2UsIG9wdGlvbnMpOworCisJQUxMT0NfQVJSQVkocmV2LCBhcmdjKTsKKwl3aGlsZSAoYXJnYy0tID4gMCkKKwkJcmV2W3Jldl9ucisrXSA9IGdldF9jb21taXRfcmVmZXJlbmNlKCphcmd2KyspOworCXJldHVybiBzaG93X21lcmdlX2Jhc2UocmV2LCByZXZfbnIsIHNob3dfYWxsKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWVyZ2UtZmlsZS5jIGIvYnVpbHRpbi9tZXJnZS1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhMmY5MAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWVyZ2UtZmlsZS5jCkBAIC0wLDAgKzEsMTE4IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAieGRpZmYveGRpZmYuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZXJnZV9maWxlX3VzYWdlW10gPSB7CisJTl8oImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiA8b3JpZy1maWxlPiA8ZmlsZTI+IiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBsYWJlbF9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0YXRpYyBpbnQgbGFiZWxfY291bnQgPSAwOworCWNvbnN0IGNoYXIgKipuYW1lcyA9IChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlpZiAobGFiZWxfY291bnQgPj0gMykKKwkJcmV0dXJuIGVycm9yKCJ0b28gbWFueSBsYWJlbHMgb24gdGhlIGNvbW1hbmQgbGluZSIpOworCW5hbWVzW2xhYmVsX2NvdW50KytdID0gYXJnOworCXJldHVybiAwOworfQorCitpbnQgY21kX21lcmdlX2ZpbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqbmFtZXNbM10gPSB7IE5VTEwsIE5VTEwsIE5VTEwgfTsKKwltbWZpbGVfdCBtbWZzWzNdOworCW1tYnVmZmVyX3QgcmVzdWx0ID0ge05VTEwsIDB9OworCXhtcGFyYW1fdCB4bXAgPSB7ezB9fTsKKwlpbnQgcmV0ID0gMCwgaSA9IDAsIHRvX3N0ZG91dCA9IDA7CisJaW50IHF1aWV0ID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woJ3AnLCAic3Rkb3V0IiwgJnRvX3N0ZG91dCwgTl8oInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiKSksCisJCU9QVF9TRVRfSU5UKDAsICJkaWZmMyIsICZ4bXAuc3R5bGUsIE5fKCJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIpLCBYRExfTUVSR0VfRElGRjMpLAorCQlPUFRfU0VUX0lOVCgwLCAib3VycyIsICZ4bXAuZmF2b3IsIE5fKCJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iKSwKKwkJCSAgICBYRExfTUVSR0VfRkFWT1JfT1VSUyksCisJCU9QVF9TRVRfSU5UKDAsICJ0aGVpcnMiLCAmeG1wLmZhdm9yLCBOXygiZm9yIGNvbmZsaWN0cywgdXNlIHRoZWlyIHZlcnNpb24iKSwKKwkJCSAgICBYRExfTUVSR0VfRkFWT1JfVEhFSVJTKSwKKwkJT1BUX1NFVF9JTlQoMCwgInVuaW9uIiwgJnhtcC5mYXZvciwgTl8oImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iKSwKKwkJCSAgICBYRExfTUVSR0VfRkFWT1JfVU5JT04pLAorCQlPUFRfSU5URUdFUigwLCAibWFya2VyLXNpemUiLCAmeG1wLm1hcmtlcl9zaXplLAorCQkJICAgIE5fKCJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIpKSwKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMiKSksCisJCU9QVF9DQUxMQkFDSygnTCcsIE5VTEwsIG5hbWVzLCBOXygibmFtZSIpLAorCQkJICAgICBOXygic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZy1maWxlL2ZpbGUyIiksICZsYWJlbF9jYiksCisJCU9QVF9FTkQoKSwKKwl9OworCisJeG1wLmxldmVsID0gWERMX01FUkdFX1pFQUxPVVNfQUxOVU07CisJeG1wLnN0eWxlID0gMDsKKwl4bXAuZmF2b3IgPSAwOworCisJaWYgKHN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KSB7CisJCS8qIFJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAqLworCQlnaXRfY29uZmlnKGdpdF94bWVyZ2VfY29uZmlnLCBOVUxMKTsKKwkJaWYgKDAgPD0gZ2l0X3htZXJnZV9zdHlsZSkKKwkJCXhtcC5zdHlsZSA9IGdpdF94bWVyZ2Vfc3R5bGU7CisJfQorCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBtZXJnZV9maWxlX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyAhPSAzKQorCQl1c2FnZV93aXRoX29wdGlvbnMobWVyZ2VfZmlsZV91c2FnZSwgb3B0aW9ucyk7CisJaWYgKHF1aWV0KSB7CisJCWlmICghZnJlb3BlbigiL2Rldi9udWxsIiwgInciLCBzdGRlcnIpKQorCQkJcmV0dXJuIGVycm9yX2Vycm5vKCJmYWlsZWQgdG8gcmVkaXJlY3Qgc3RkZXJyIHRvIC9kZXYvbnVsbCIpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJY2hhciAqZm5hbWU7CisJCWludCByZXQ7CisKKwkJaWYgKCFuYW1lc1tpXSkKKwkJCW5hbWVzW2ldID0gYXJndltpXTsKKworCQlmbmFtZSA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIGFyZ3ZbaV0pOworCQlyZXQgPSByZWFkX21tZmlsZShtbWZzICsgaSwgZm5hbWUpOworCQlmcmVlKGZuYW1lKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtMTsKKworCQlpZiAobW1mc1tpXS5zaXplID4gTUFYX1hESUZGX1NJWkUgfHwKKwkJICAgIGJ1ZmZlcl9pc19iaW5hcnkobW1mc1tpXS5wdHIsIG1tZnNbaV0uc2l6ZSkpCisJCQlyZXR1cm4gZXJyb3IoIkNhbm5vdCBtZXJnZSBiaW5hcnkgZmlsZXM6ICVzIiwKKwkJCQkJYXJndltpXSk7CisJfQorCisJeG1wLmFuY2VzdG9yID0gbmFtZXNbMV07CisJeG1wLmZpbGUxID0gbmFtZXNbMF07CisJeG1wLmZpbGUyID0gbmFtZXNbMl07CisJcmV0ID0geGRsX21lcmdlKG1tZnMgKyAxLCBtbWZzICsgMCwgbW1mcyArIDIsICZ4bXAsICZyZXN1bHQpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJZnJlZShtbWZzW2ldLnB0cik7CisKKwlpZiAocmV0ID49IDApIHsKKwkJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBhcmd2WzBdOworCQljaGFyICpmcGF0aCA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIGFyZ3ZbMF0pOworCQlGSUxFICpmID0gdG9fc3Rkb3V0ID8gc3Rkb3V0IDogZm9wZW4oZnBhdGgsICJ3YiIpOworCisJCWlmICghZikKKwkJCXJldCA9IGVycm9yX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIsCisJCQkJCSAgZmlsZW5hbWUpOworCQllbHNlIGlmIChyZXN1bHQuc2l6ZSAmJgorCQkJIGZ3cml0ZShyZXN1bHQucHRyLCByZXN1bHQuc2l6ZSwgMSwgZikgIT0gMSkKKwkJCXJldCA9IGVycm9yX2Vycm5vKCJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiLCBmaWxlbmFtZSk7CisJCWVsc2UgaWYgKGZjbG9zZShmKSkKKwkJCXJldCA9IGVycm9yX2Vycm5vKCJDb3VsZCBub3QgY2xvc2UgJXMiLCBmaWxlbmFtZSk7CisJCWZyZWUocmVzdWx0LnB0cik7CisJCWZyZWUoZnBhdGgpOworCX0KKworCWlmIChyZXQgPiAxMjcpCisJCXJldCA9IDEyNzsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21lcmdlLWluZGV4LmMgYi9idWlsdGluL21lcmdlLWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhlYTZhZAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWVyZ2UtaW5kZXguYwpAQCAtMCwwICsxLDExMSBAQAorI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpwZ207CitzdGF0aWMgaW50IG9uZV9zaG90LCBxdWlldDsKK3N0YXRpYyBpbnQgZXJyOworCitzdGF0aWMgaW50IG1lcmdlX2VudHJ5KGludCBwb3MsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGZvdW5kOworCWNvbnN0IGNoYXIgKmFyZ3VtZW50c1tdID0geyBwZ20sICIiLCAiIiwgIiIsIHBhdGgsICIiLCAiIiwgIiIsIE5VTEwgfTsKKwljaGFyIGhleGJ1Zls0XVtHSVRfTUFYX0hFWFNaICsgMV07CisJY2hhciBvd25idWZbNF1bNjBdOworCisJaWYgKHBvcyA+PSBhY3RpdmVfbnIpCisJCWRpZSgiZ2l0IG1lcmdlLWluZGV4OiAlcyBub3QgaW4gdGhlIGNhY2hlIiwgcGF0aCk7CisJZm91bmQgPSAwOworCWRvIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlpbnQgc3RhZ2UgPSBjZV9zdGFnZShjZSk7CisKKwkJaWYgKHN0cmNtcChjZS0+bmFtZSwgcGF0aCkpCisJCQlicmVhazsKKwkJZm91bmQrKzsKKwkJb2lkX3RvX2hleF9yKGhleGJ1ZltzdGFnZV0sICZjZS0+b2lkKTsKKwkJeHNucHJpbnRmKG93bmJ1ZltzdGFnZV0sIHNpemVvZihvd25idWZbc3RhZ2VdKSwgIiVvIiwgY2UtPmNlX21vZGUpOworCQlhcmd1bWVudHNbc3RhZ2VdID0gaGV4YnVmW3N0YWdlXTsKKwkJYXJndW1lbnRzW3N0YWdlICsgNF0gPSBvd25idWZbc3RhZ2VdOworCX0gd2hpbGUgKCsrcG9zIDwgYWN0aXZlX25yKTsKKwlpZiAoIWZvdW5kKQorCQlkaWUoImdpdCBtZXJnZS1pbmRleDogJXMgbm90IGluIHRoZSBjYWNoZSIsIHBhdGgpOworCisJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3VtZW50cywgMCkpIHsKKwkJaWYgKG9uZV9zaG90KQorCQkJZXJyKys7CisJCWVsc2UgeworCQkJaWYgKCFxdWlldCkKKwkJCQlkaWUoIm1lcmdlIHByb2dyYW0gZmFpbGVkIik7CisJCQlleGl0KDEpOworCQl9CisJfQorCXJldHVybiBmb3VuZDsKK30KKworc3RhdGljIHZvaWQgbWVyZ2Vfb25lX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgc3RybGVuKHBhdGgpKTsKKworCS8qCisJICogSWYgaXQgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGNhY2hlIGFzIHN0YWdlMCwgaXQncworCSAqIGFscmVhZHkgbWVyZ2VkIGFuZCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLgorCSAqLworCWlmIChwb3MgPCAwKQorCQltZXJnZV9lbnRyeSgtcG9zLTEsIHBhdGgpOworfQorCitzdGF0aWMgdm9pZCBtZXJnZV9hbGwodm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJaWYgKCFjZV9zdGFnZShjZSkpCisJCQljb250aW51ZTsKKwkJaSArPSBtZXJnZV9lbnRyeShpLCBjZS0+bmFtZSktMTsKKwl9Cit9CisKK2ludCBjbWRfbWVyZ2VfaW5kZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGksIGZvcmNlX2ZpbGUgPSAwOworCisJLyogV2l0aG91dCB0aGlzIHdlIGNhbm5vdCByZWx5IG9uIHdhaXRwaWQoKSB0byB0ZWxsCisJICogd2hhdCBoYXBwZW5lZCB0byBvdXIgY2hpbGRyZW4uCisJICovCisJc2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOworCisJaWYgKGFyZ2MgPCAzKQorCQl1c2FnZSgiZ2l0IG1lcmdlLWluZGV4IFstb10gWy1xXSA8bWVyZ2UtcHJvZ3JhbT4gKC1hIHwgWy0tXSBbPGZpbGVuYW1lPi4uLl0pIik7CisKKwlyZWFkX2NhY2hlKCk7CisKKwlpID0gMTsKKwlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLW8iKSkgeworCQlvbmVfc2hvdCA9IDE7CisJCWkrKzsKKwl9CisJaWYgKCFzdHJjbXAoYXJndltpXSwgIi1xIikpIHsKKwkJcXVpZXQgPSAxOworCQlpKys7CisJfQorCXBnbSA9IGFyZ3ZbaSsrXTsKKwlmb3IgKDsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQlpZiAoIWZvcmNlX2ZpbGUgJiYgKmFyZyA9PSAnLScpIHsKKwkJCWlmICghc3RyY21wKGFyZywgIi0tIikpIHsKKwkJCQlmb3JjZV9maWxlID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi1hIikpIHsKKwkJCQltZXJnZV9hbGwoKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWRpZSgiZ2l0IG1lcmdlLWluZGV4OiB1bmtub3duIG9wdGlvbiAlcyIsIGFyZyk7CisJCX0KKwkJbWVyZ2Vfb25lX3BhdGgoYXJnKTsKKwl9CisJaWYgKGVyciAmJiAhcXVpZXQpCisJCWRpZSgibWVyZ2UgcHJvZ3JhbSBmYWlsZWQiKTsKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS1vdXJzLmMgYi9idWlsdGluL21lcmdlLW91cnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTk0NTA3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9tZXJnZS1vdXJzLmMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIGdpdC1tZXJnZS1vdXJzLnNoIGFzIGJ1aWx0aW4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhvbWFzIEhhcm5pbmcgSnIKKyAqIE9yaWdpbmFsOgorICogT3JpZ2luYWwgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKgorICogUHJldGVuZCB3ZSByZXNvbHZlZCB0aGUgaGVhZHMsIGJ1dCBkZWNsYXJlIG91ciB0cmVlIHRydW1wcyBldmVyeWJvZHkgZWxzZS4KKyAqLworI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImRpZmYuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9tZXJnZV9vdXJzX3VzYWdlW10gPQorCSJnaXQgbWVyZ2Utb3VycyA8YmFzZT4uLi4gLS0gSEVBRCA8cmVtb3RlPi4uLiI7CisKK2ludCBjbWRfbWVyZ2Vfb3VycyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlKGJ1aWx0aW5fbWVyZ2Vfb3Vyc191c2FnZSk7CisKKwkvKgorCSAqIFRoZSBjb250ZW50cyBvZiB0aGUgY3VycmVudCBpbmRleCBiZWNvbWVzIHRoZSB0cmVlIHdlCisJICogY29tbWl0LiAgVGhlIGluZGV4IG11c3QgbWF0Y2ggSEVBRCwgb3IgdGhpcyBtZXJnZSBjYW5ub3QgZ28KKwkgKiB0aHJvdWdoLgorCSAqLworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWVfZXJybm8oInJlYWRfY2FjaGUgZmFpbGVkIik7CisJaWYgKGluZGV4X2RpZmZlcnNfZnJvbSh0aGVfcmVwb3NpdG9yeSwgIkhFQUQiLCBOVUxMLCAwKSkKKwkJZXhpdCgyKTsKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYyBiL2J1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiZmQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmMKQEAgLTAsMCArMSw5MiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgIm1lcmdlLXJlY3Vyc2l2ZS5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciBidWlsdGluX21lcmdlX3JlY3Vyc2l2ZV91c2FnZVtdID0KKwkiZ2l0ICVzIDxiYXNlPi4uLiAtLSA8aGVhZD4gPHJlbW90ZT4gLi4uIjsKKworc3RhdGljIGNoYXIgKmJldHRlcl9icmFuY2hfbmFtZShjb25zdCBjaGFyICpicmFuY2gpCit7CisJc3RhdGljIGNoYXIgZ2l0aGVhZF9lbnZbOCArIEdJVF9NQVhfSEVYU1ogKyAxXTsKKwljaGFyICpuYW1lOworCisJaWYgKHN0cmxlbihicmFuY2gpICE9IHRoZV9oYXNoX2FsZ28tPmhleHN6KQorCQlyZXR1cm4geHN0cmR1cChicmFuY2gpOworCXhzbnByaW50ZihnaXRoZWFkX2Vudiwgc2l6ZW9mKGdpdGhlYWRfZW52KSwgIkdJVEhFQURfJXMiLCBicmFuY2gpOworCW5hbWUgPSBnZXRlbnYoZ2l0aGVhZF9lbnYpOworCXJldHVybiB4c3RyZHVwKG5hbWUgPyBuYW1lIDogYnJhbmNoKTsKK30KKworaW50IGNtZF9tZXJnZV9yZWN1cnNpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYmFzZXNbMjFdOworCXVuc2lnbmVkIGJhc2VzX2NvdW50ID0gMDsKKwlpbnQgaSwgZmFpbGVkOworCXN0cnVjdCBvYmplY3RfaWQgaDEsIGgyOworCXN0cnVjdCBtZXJnZV9vcHRpb25zIG87CisJY2hhciAqYmV0dGVyMSwgKmJldHRlcjI7CisJc3RydWN0IGNvbW1pdCAqcmVzdWx0OworCisJaW5pdF9tZXJnZV9vcHRpb25zKCZvLCB0aGVfcmVwb3NpdG9yeSk7CisJaWYgKGFyZ3ZbMF0gJiYgZW5kc193aXRoKGFyZ3ZbMF0sICItc3VidHJlZSIpKQorCQlvLnN1YnRyZWVfc2hpZnQgPSAiIjsKKworCWlmIChhcmdjIDwgNCkKKwkJdXNhZ2VmKGJ1aWx0aW5fbWVyZ2VfcmVjdXJzaXZlX3VzYWdlLCBhcmd2WzBdKTsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyArK2kpIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKworCQlpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS0iKSkgeworCQkJaWYgKCFhcmdbMl0pCisJCQkJYnJlYWs7CisJCQlpZiAocGFyc2VfbWVyZ2Vfb3B0KCZvLCBhcmcgKyAyKSkKKwkJCQlkaWUoXygidW5rbm93biBvcHRpb24gJXMiKSwgYXJnKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChiYXNlc19jb3VudCA8IEFSUkFZX1NJWkUoYmFzZXMpLTEpIHsKKwkJCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBvYmplY3RfaWQpKTsKKwkJCWlmIChnZXRfb2lkKGFyZ3ZbaV0sIG9pZCkpCisJCQkJZGllKF8oImNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIpLCBhcmd2W2ldKTsKKwkJCWJhc2VzW2Jhc2VzX2NvdW50KytdID0gb2lkOworCQl9CisJCWVsc2UKKwkJCXdhcm5pbmcoUV8oImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2UuICIKKwkJCQkgICAiSWdub3JpbmcgJXMuIiwKKwkJCQkgICAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZXMuICIKKwkJCQkgICAiSWdub3JpbmcgJXMuIiwKKwkJCQkgICAgKGludClBUlJBWV9TSVpFKGJhc2VzKS0xKSwKKwkJCQkoaW50KUFSUkFZX1NJWkUoYmFzZXMpLTEsIGFyZ3ZbaV0pOworCX0KKwlpZiAoYXJnYyAtIGkgIT0gMykgLyogIi0tIiAiPGhlYWQ+IiAiPHJlbW90ZT4iICovCisJCWRpZShfKCJub3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIikpOworCisJaWYgKHJlcG9fcmVhZF9pbmRleF91bm1lcmdlZCh0aGVfcmVwb3NpdG9yeSkpCisJCWRpZV9yZXNvbHZlX2NvbmZsaWN0KCJtZXJnZSIpOworCisJby5icmFuY2gxID0gYXJndlsrK2ldOworCW8uYnJhbmNoMiA9IGFyZ3ZbKytpXTsKKworCWlmIChnZXRfb2lkKG8uYnJhbmNoMSwgJmgxKSkKKwkJZGllKF8oImNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIiksIG8uYnJhbmNoMSk7CisJaWYgKGdldF9vaWQoby5icmFuY2gyLCAmaDIpKQorCQlkaWUoXygiY291bGQgbm90IHJlc29sdmUgcmVmICclcyciKSwgby5icmFuY2gyKTsKKworCW8uYnJhbmNoMSA9IGJldHRlcjEgPSBiZXR0ZXJfYnJhbmNoX25hbWUoby5icmFuY2gxKTsKKwlvLmJyYW5jaDIgPSBiZXR0ZXIyID0gYmV0dGVyX2JyYW5jaF9uYW1lKG8uYnJhbmNoMik7CisKKwlpZiAoby52ZXJib3NpdHkgPj0gMykKKwkJcHJpbnRmKF8oIk1lcmdpbmcgJXMgd2l0aCAlc1xuIiksIG8uYnJhbmNoMSwgby5icmFuY2gyKTsKKworCWZhaWxlZCA9IG1lcmdlX3JlY3Vyc2l2ZV9nZW5lcmljKCZvLCAmaDEsICZoMiwgYmFzZXNfY291bnQsIGJhc2VzLCAmcmVzdWx0KTsKKworCWZyZWUoYmV0dGVyMSk7CisJZnJlZShiZXR0ZXIyKTsKKworCWlmIChmYWlsZWQgPCAwKQorCQlyZXR1cm4gMTI4OyAvKiBkaWUoKSBlcnJvciBjb2RlICovCisJcmV0dXJuIGZhaWxlZDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWVyZ2UtdHJlZS5jIGIvYnVpbHRpbi9tZXJnZS10cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcyNzE0YQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWVyZ2UtdHJlZS5jCkBAIC0wLDAgKzEsMzkwIEBACisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgIm1lcmdlLWJsb2JzLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIG1lcmdlX3RyZWVfdXNhZ2VbXSA9ICJnaXQgbWVyZ2UtdHJlZSA8YmFzZS10cmVlPiA8YnJhbmNoMT4gPGJyYW5jaDI+IjsKKworc3RydWN0IG1lcmdlX2xpc3QgeworCXN0cnVjdCBtZXJnZV9saXN0ICpuZXh0OworCXN0cnVjdCBtZXJnZV9saXN0ICpsaW5rOwkvKiBvdGhlciBzdGFnZXMgZm9yIHRoaXMgb2JqZWN0ICovCisKKwl1bnNpZ25lZCBpbnQgc3RhZ2UgOiAyOworCXVuc2lnbmVkIGludCBtb2RlOworCWNvbnN0IGNoYXIgKnBhdGg7CisJc3RydWN0IGJsb2IgKmJsb2I7Cit9OworCitzdGF0aWMgc3RydWN0IG1lcmdlX2xpc3QgKm1lcmdlX3Jlc3VsdCwgKiptZXJnZV9yZXN1bHRfZW5kID0gJm1lcmdlX3Jlc3VsdDsKKworc3RhdGljIHZvaWQgYWRkX21lcmdlX2VudHJ5KHN0cnVjdCBtZXJnZV9saXN0ICplbnRyeSkKK3sKKwkqbWVyZ2VfcmVzdWx0X2VuZCA9IGVudHJ5OworCW1lcmdlX3Jlc3VsdF9lbmQgPSAmZW50cnktPm5leHQ7Cit9CisKK3N0YXRpYyB2b2lkIG1lcmdlX3RyZWVzKHN0cnVjdCB0cmVlX2Rlc2MgdFszXSwgY29uc3QgY2hhciAqYmFzZSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpleHBsYW5hdGlvbihzdHJ1Y3QgbWVyZ2VfbGlzdCAqZW50cnkpCit7CisJc3dpdGNoIChlbnRyeS0+c3RhZ2UpIHsKKwljYXNlIDA6CisJCXJldHVybiAibWVyZ2VkIjsKKwljYXNlIDM6CisJCXJldHVybiAiYWRkZWQgaW4gcmVtb3RlIjsKKwljYXNlIDI6CisJCWlmIChlbnRyeS0+bGluaykKKwkJCXJldHVybiAiYWRkZWQgaW4gYm90aCI7CisJCXJldHVybiAiYWRkZWQgaW4gbG9jYWwiOworCX0KKworCS8qIEV4aXN0ZWQgaW4gYmFzZSAqLworCWVudHJ5ID0gZW50cnktPmxpbms7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuICJyZW1vdmVkIGluIGJvdGgiOworCisJaWYgKGVudHJ5LT5saW5rKQorCQlyZXR1cm4gImNoYW5nZWQgaW4gYm90aCI7CisKKwlpZiAoZW50cnktPnN0YWdlID09IDMpCisJCXJldHVybiAicmVtb3ZlZCBpbiBsb2NhbCI7CisJcmV0dXJuICJyZW1vdmVkIGluIHJlbW90ZSI7Cit9CisKK3N0YXRpYyB2b2lkICpyZXN1bHQoc3RydWN0IG1lcmdlX2xpc3QgKmVudHJ5LCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlzdHJ1Y3QgYmxvYiAqYmFzZSwgKm91ciwgKnRoZWlyOworCWNvbnN0IGNoYXIgKnBhdGggPSBlbnRyeS0+cGF0aDsKKworCWlmICghZW50cnktPnN0YWdlKQorCQlyZXR1cm4gcmVhZF9vYmplY3RfZmlsZSgmZW50cnktPmJsb2ItPm9iamVjdC5vaWQsICZ0eXBlLCBzaXplKTsKKwliYXNlID0gTlVMTDsKKwlpZiAoZW50cnktPnN0YWdlID09IDEpIHsKKwkJYmFzZSA9IGVudHJ5LT5ibG9iOworCQllbnRyeSA9IGVudHJ5LT5saW5rOworCX0KKwlvdXIgPSBOVUxMOworCWlmIChlbnRyeSAmJiBlbnRyeS0+c3RhZ2UgPT0gMikgeworCQlvdXIgPSBlbnRyeS0+YmxvYjsKKwkJZW50cnkgPSBlbnRyeS0+bGluazsKKwl9CisJdGhlaXIgPSBOVUxMOworCWlmIChlbnRyeSkKKwkJdGhlaXIgPSBlbnRyeS0+YmxvYjsKKwlyZXR1cm4gbWVyZ2VfYmxvYnModGhlX3JlcG9zaXRvcnktPmluZGV4LCBwYXRoLAorCQkJICAgYmFzZSwgb3VyLCB0aGVpciwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkICpvcmlnaW4oc3RydWN0IG1lcmdlX2xpc3QgKmVudHJ5LCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl3aGlsZSAoZW50cnkpIHsKKwkJaWYgKGVudHJ5LT5zdGFnZSA9PSAyKQorCQkJcmV0dXJuIHJlYWRfb2JqZWN0X2ZpbGUoJmVudHJ5LT5ibG9iLT5vYmplY3Qub2lkLAorCQkJCQkJJnR5cGUsIHNpemUpOworCQllbnRyeSA9IGVudHJ5LT5saW5rOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBzaG93X291dGYodm9pZCAqcHJpdl8sIG1tYnVmZmVyX3QgKm1iLCBpbnQgbmJ1ZikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbmJ1ZjsgaSsrKQorCQlwcmludGYoIiUuKnMiLCAoaW50KSBtYltpXS5zaXplLCBtYltpXS5wdHIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaG93X2RpZmYoc3RydWN0IG1lcmdlX2xpc3QgKmVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwltbWZpbGVfdCBzcmMsIGRzdDsKKwl4cHBhcmFtX3QgeHBwOworCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKwl4ZGVtaXRjYl90IGVjYjsKKworCXhwcC5mbGFncyA9IDA7CisJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJeGVjZmcuY3R4bGVuID0gMzsKKwllY2Iub3V0X2h1bmsgPSBOVUxMOworCWVjYi5vdXRfbGluZSA9IHNob3dfb3V0ZjsKKwllY2IucHJpdiA9IE5VTEw7CisKKwlzcmMucHRyID0gb3JpZ2luKGVudHJ5LCAmc2l6ZSk7CisJaWYgKCFzcmMucHRyKQorCQlzaXplID0gMDsKKwlzcmMuc2l6ZSA9IHNpemU7CisJZHN0LnB0ciA9IHJlc3VsdChlbnRyeSwgJnNpemUpOworCWlmICghZHN0LnB0cikKKwkJc2l6ZSA9IDA7CisJZHN0LnNpemUgPSBzaXplOworCWlmICh4ZGlfZGlmZigmc3JjLCAmZHN0LCAmeHBwLCAmeGVjZmcsICZlY2IpKQorCQlkaWUoInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmIik7CisJZnJlZShzcmMucHRyKTsKKwlmcmVlKGRzdC5wdHIpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3Jlc3VsdF9saXN0KHN0cnVjdCBtZXJnZV9saXN0ICplbnRyeSkKK3sKKwlwcmludGYoIiVzXG4iLCBleHBsYW5hdGlvbihlbnRyeSkpOworCWRvIHsKKwkJc3RydWN0IG1lcmdlX2xpc3QgKmxpbmsgPSBlbnRyeS0+bGluazsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKmRlc2NbNF0gPSB7ICJyZXN1bHQiLCAiYmFzZSIsICJvdXIiLCAidGhlaXIiIH07CisJCXByaW50ZigiICAlLTZzICVvICVzICVzXG4iLCBkZXNjW2VudHJ5LT5zdGFnZV0sIGVudHJ5LT5tb2RlLCBvaWRfdG9faGV4KCZlbnRyeS0+YmxvYi0+b2JqZWN0Lm9pZCksIGVudHJ5LT5wYXRoKTsKKwkJZW50cnkgPSBsaW5rOworCX0gd2hpbGUgKGVudHJ5KTsKK30KKworc3RhdGljIHZvaWQgc2hvd19yZXN1bHQodm9pZCkKK3sKKwlzdHJ1Y3QgbWVyZ2VfbGlzdCAqd2FsazsKKworCXdhbGsgPSBtZXJnZV9yZXN1bHQ7CisJd2hpbGUgKHdhbGspIHsKKwkJc2hvd19yZXN1bHRfbGlzdCh3YWxrKTsKKwkJc2hvd19kaWZmKHdhbGspOworCQl3YWxrID0gd2Fsay0+bmV4dDsKKwl9Cit9CisKKy8qIEFuIGVtcHR5IGVudHJ5IG5ldmVyIGNvbXBhcmVzIHNhbWUsIG5vdCBldmVuIHRvIGFub3RoZXIgZW1wdHkgZW50cnkgKi8KK3N0YXRpYyBpbnQgc2FtZV9lbnRyeShzdHJ1Y3QgbmFtZV9lbnRyeSAqYSwgc3RydWN0IG5hbWVfZW50cnkgKmIpCit7CisJcmV0dXJuCSFpc19udWxsX29pZCgmYS0+b2lkKSAmJgorCQkhaXNfbnVsbF9vaWQoJmItPm9pZCkgJiYKKwkJb2lkZXEoJmEtPm9pZCwgJmItPm9pZCkgJiYKKwkJYS0+bW9kZSA9PSBiLT5tb2RlOworfQorCitzdGF0aWMgaW50IGJvdGhfZW1wdHkoc3RydWN0IG5hbWVfZW50cnkgKmEsIHN0cnVjdCBuYW1lX2VudHJ5ICpiKQoreworCXJldHVybiBpc19udWxsX29pZCgmYS0+b2lkKSAmJiBpc19udWxsX29pZCgmYi0+b2lkKTsKK30KKworc3RhdGljIHN0cnVjdCBtZXJnZV9saXN0ICpjcmVhdGVfZW50cnkodW5zaWduZWQgc3RhZ2UsIHVuc2lnbmVkIG1vZGUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgbWVyZ2VfbGlzdCAqcmVzID0geGNhbGxvYygxLCBzaXplb2YoKnJlcykpOworCisJcmVzLT5zdGFnZSA9IHN0YWdlOworCXJlcy0+cGF0aCA9IHBhdGg7CisJcmVzLT5tb2RlID0gbW9kZTsKKwlyZXMtPmJsb2IgPSBsb29rdXBfYmxvYih0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgY2hhciAqdHJhdmVyc2VfcGF0aChjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKm4pCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfbWFrZV90cmF2ZXJzZV9wYXRoKCZidWYsIGluZm8sIG4tPnBhdGgsIG4tPnBhdGhsZW4pOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCByZXNvbHZlKGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqb3Vycywgc3RydWN0IG5hbWVfZW50cnkgKnJlc3VsdCkKK3sKKwlzdHJ1Y3QgbWVyZ2VfbGlzdCAqb3JpZywgKmZpbmFsOworCWNvbnN0IGNoYXIgKnBhdGg7CisKKwkvKiBJZiBpdCdzIGFscmVhZHkgb3VycywgZG9uJ3QgYm90aGVyIHNob3dpbmcgaXQgKi8KKwlpZiAoIW91cnMpCisJCXJldHVybjsKKworCXBhdGggPSB0cmF2ZXJzZV9wYXRoKGluZm8sIHJlc3VsdCk7CisJb3JpZyA9IGNyZWF0ZV9lbnRyeSgyLCBvdXJzLT5tb2RlLCAmb3Vycy0+b2lkLCBwYXRoKTsKKwlmaW5hbCA9IGNyZWF0ZV9lbnRyeSgwLCByZXN1bHQtPm1vZGUsICZyZXN1bHQtPm9pZCwgcGF0aCk7CisKKwlmaW5hbC0+bGluayA9IG9yaWc7CisKKwlhZGRfbWVyZ2VfZW50cnkoZmluYWwpOworfQorCitzdGF0aWMgdm9pZCB1bnJlc29sdmVkX2RpcmVjdG9yeShjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IG5hbWVfZW50cnkgblszXSkKK3sKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqciA9IHRoZV9yZXBvc2l0b3J5OworCWNoYXIgKm5ld2Jhc2U7CisJc3RydWN0IG5hbWVfZW50cnkgKnA7CisJc3RydWN0IHRyZWVfZGVzYyB0WzNdOworCXZvaWQgKmJ1ZjAsICpidWYxLCAqYnVmMjsKKworCWZvciAocCA9IG47IHAgPCBuICsgMzsgcCsrKSB7CisJCWlmIChwLT5tb2RlICYmIFNfSVNESVIocC0+bW9kZSkpCisJCQlicmVhazsKKwl9CisJaWYgKG4gKyAzIDw9IHApCisJCXJldHVybjsgLyogdGhlcmUgaXMgbm8gdHJlZSBoZXJlICovCisKKwluZXdiYXNlID0gdHJhdmVyc2VfcGF0aChpbmZvLCBwKTsKKworI2RlZmluZSBFTlRSWV9PSUQoZSkgKCgoZSktPm1vZGUgJiYgU19JU0RJUigoZSktPm1vZGUpKSA/ICYoZSktPm9pZCA6IE5VTEwpCisJYnVmMCA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKHIsIHQgKyAwLCBFTlRSWV9PSUQobiArIDApKTsKKwlidWYxID0gZmlsbF90cmVlX2Rlc2NyaXB0b3IociwgdCArIDEsIEVOVFJZX09JRChuICsgMSkpOworCWJ1ZjIgPSBmaWxsX3RyZWVfZGVzY3JpcHRvcihyLCB0ICsgMiwgRU5UUllfT0lEKG4gKyAyKSk7CisjdW5kZWYgRU5UUllfT0lECisKKwltZXJnZV90cmVlcyh0LCBuZXdiYXNlKTsKKworCWZyZWUoYnVmMCk7CisJZnJlZShidWYxKTsKKwlmcmVlKGJ1ZjIpOworCWZyZWUobmV3YmFzZSk7Cit9CisKKworc3RhdGljIHN0cnVjdCBtZXJnZV9saXN0ICpsaW5rX2VudHJ5KHVuc2lnbmVkIHN0YWdlLCBjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgc3RydWN0IG5hbWVfZW50cnkgKm4sIHN0cnVjdCBtZXJnZV9saXN0ICplbnRyeSkKK3sKKwljb25zdCBjaGFyICpwYXRoOworCXN0cnVjdCBtZXJnZV9saXN0ICpsaW5rOworCisJaWYgKCFuLT5tb2RlKQorCQlyZXR1cm4gZW50cnk7CisJaWYgKGVudHJ5KQorCQlwYXRoID0gZW50cnktPnBhdGg7CisJZWxzZQorCQlwYXRoID0gdHJhdmVyc2VfcGF0aChpbmZvLCBuKTsKKwlsaW5rID0gY3JlYXRlX2VudHJ5KHN0YWdlLCBuLT5tb2RlLCAmbi0+b2lkLCBwYXRoKTsKKwlsaW5rLT5saW5rID0gZW50cnk7CisJcmV0dXJuIGxpbms7Cit9CisKK3N0YXRpYyB2b2lkIHVucmVzb2x2ZWQoY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sIHN0cnVjdCBuYW1lX2VudHJ5IG5bM10pCit7CisJc3RydWN0IG1lcmdlX2xpc3QgKmVudHJ5ID0gTlVMTDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBkaXJtYXNrID0gMCwgbWFzayA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCW1hc2sgfD0gKDEgPDwgaSk7CisJCS8qCisJCSAqIFRyZWF0IG1pc3NpbmcgZW50cmllcyBhcyBkaXJlY3RvcmllcyBzbyB0aGF0IHdlIHJldHVybgorCQkgKiBhZnRlciB1bnJlc29sdmVkX2RpcmVjdG9yeSBoYXMgaGFuZGxlZCB0aGlzLgorCQkgKi8KKwkJaWYgKCFuW2ldLm1vZGUgfHwgU19JU0RJUihuW2ldLm1vZGUpKQorCQkJZGlybWFzayB8PSAoMSA8PCBpKTsKKwl9CisKKwl1bnJlc29sdmVkX2RpcmVjdG9yeShpbmZvLCBuKTsKKworCWlmIChkaXJtYXNrID09IG1hc2spCisJCXJldHVybjsKKworCWlmIChuWzJdLm1vZGUgJiYgIVNfSVNESVIoblsyXS5tb2RlKSkKKwkJZW50cnkgPSBsaW5rX2VudHJ5KDMsIGluZm8sIG4gKyAyLCBlbnRyeSk7CisJaWYgKG5bMV0ubW9kZSAmJiAhU19JU0RJUihuWzFdLm1vZGUpKQorCQllbnRyeSA9IGxpbmtfZW50cnkoMiwgaW5mbywgbiArIDEsIGVudHJ5KTsKKwlpZiAoblswXS5tb2RlICYmICFTX0lTRElSKG5bMF0ubW9kZSkpCisJCWVudHJ5ID0gbGlua19lbnRyeSgxLCBpbmZvLCBuICsgMCwgZW50cnkpOworCisJYWRkX21lcmdlX2VudHJ5KGVudHJ5KTsKK30KKworLyoKKyAqIE1lcmdlIHR3byB0cmVlcyB0b2dldGhlciAodFsxXSBhbmQgdFsyXSksIHVzaW5nIGEgY29tbW9uIGJhc2UgKHRbMF0pCisgKiBhcyB0aGUgb3JpZ2luLgorICoKKyAqIFRoaXMgd2Fsa3MgdGhlIChzb3J0ZWQpIHRyZWVzIGluIGxvY2stc3RlcCwgY2hlY2tpbmcgZXZlcnkgcG9zc2libGUKKyAqIG5hbWUuIE5vdGUgdGhhdCBkaXJlY3RvcmllcyBhdXRvbWF0aWNhbGx5IHNvcnQgZGlmZmVyZW50bHkgZnJvbSBvdGhlcgorICogZmlsZXMgKHNlZSAiYmFzZV9uYW1lX2NvbXBhcmUiKSwgc28geW91J2xsIG5ldmVyIHNlZSBmaWxlL2RpcmVjdG9yeQorICogY29uZmxpY3RzLCBiZWNhdXNlIHRoZXkgd29uJ3QgZXZlciBjb21wYXJlIHRoZSBzYW1lLgorICoKKyAqIElPVywgaWYgYSBkaXJlY3RvcnkgY2hhbmdlcyB0byBhIGZpbGVuYW1lLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUKKyAqIHNlZW4gYXMgdGhlIGRpcmVjdG9yeSBnb2luZyBhd2F5LCBhbmQgdGhlIGZpbGVuYW1lIGJlaW5nIGNyZWF0ZWQuCisgKgorICogVGhpbmsgb2YgdGhpcyBhcyBhIHRocmVlLXdheSBkaWZmLgorICoKKyAqIFRoZSBvdXRwdXQgd2lsbCBiZSBlaXRoZXI6CisgKiAgLSBzdWNjZXNzZnVsIG1lcmdlCisgKgkgIjAgbW9kZSBzaGExIGZpbGVuYW1lIgorICogICAgTk9URSBOT1RFIE5PVEUhIEZJWE1FISBXZSByZWFsbHkgcmVhbGx5IG5lZWQgdG8gd2FsayB0aGUgaW5kZXgKKyAqICAgIGluIHBhcmFsbGVsIHdpdGggdGhpcyB0b28hCisgKgorICogIC0gY29uZmxpY3Q6CisgKgkiMSBtb2RlIHNoYTEgZmlsZW5hbWUiCisgKgkiMiBtb2RlIHNoYTEgZmlsZW5hbWUiCisgKgkiMyBtb2RlIHNoYTEgZmlsZW5hbWUiCisgKiAgICB3aGVyZSBub3QgYWxsIG9mIHRoZSAxLzIvMyBsaW5lcyBtYXkgZXhpc3QsIG9mIGNvdXJzZS4KKyAqCisgKiBUaGUgc3VjY2Vzc2Z1bCBtZXJnZSBydWxlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSB0aHJlZS13YXkgbWVyZ2UKKyAqIGluIGdpdC1yZWFkLXRyZWUuCisgKi8KK3N0YXRpYyBpbnQgdGhyZWV3YXlfY2FsbGJhY2soaW50IG4sIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBkaXJtYXNrLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50cnksIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQoreworCS8qIFNhbWUgaW4gYm90aD8gKi8KKwlpZiAoc2FtZV9lbnRyeShlbnRyeSsxLCBlbnRyeSsyKSB8fCBib3RoX2VtcHR5KGVudHJ5KzEsIGVudHJ5KzIpKSB7CisJCS8qIE1vZGlmaWVkLCBhZGRlZCBvciByZW1vdmVkIGlkZW50aWNhbGx5ICovCisJCXJlc29sdmUoaW5mbywgTlVMTCwgZW50cnkrMSk7CisJCXJldHVybiBtYXNrOworCX0KKworCWlmIChzYW1lX2VudHJ5KGVudHJ5KzAsIGVudHJ5KzEpKSB7CisJCWlmICghaXNfbnVsbF9vaWQoJmVudHJ5WzJdLm9pZCkgJiYgIVNfSVNESVIoZW50cnlbMl0ubW9kZSkpIHsKKwkJCS8qIFdlIGRpZCBub3QgdG91Y2gsIHRoZXkgbW9kaWZpZWQgLS0gdGFrZSB0aGVpcnMgKi8KKwkJCXJlc29sdmUoaW5mbywgZW50cnkrMSwgZW50cnkrMik7CisJCQlyZXR1cm4gbWFzazsKKwkJfQorCQkvKgorCQkgKiBJZiB3ZSBkaWQgbm90IHRvdWNoIGEgZGlyZWN0b3J5IGJ1dCB0aGV5IG1hZGUgaXQKKwkJICogaW50byBhIGZpbGUsIHdlIGZhbGwgdGhyb3VnaCBhbmQgdW5yZXNvbHZlZCgpCisJCSAqIHJlY3Vyc2VzIGRvd24uICBMaWtld2lzZSBmb3IgdGhlIG9wcG9zaXRlIGNhc2UuCisJCSAqLworCX0KKworCWlmIChzYW1lX2VudHJ5KGVudHJ5KzAsIGVudHJ5KzIpIHx8IGJvdGhfZW1wdHkoZW50cnkrMCwgZW50cnkrMikpIHsKKwkJLyogV2UgYWRkZWQsIG1vZGlmaWVkIG9yIHJlbW92ZWQsIHRoZXkgZGlkIG5vdCB0b3VjaCAtLSB0YWtlIG91cnMgKi8KKwkJcmVzb2x2ZShpbmZvLCBOVUxMLCBlbnRyeSsxKTsKKwkJcmV0dXJuIG1hc2s7CisJfQorCisJdW5yZXNvbHZlZChpbmZvLCBlbnRyeSk7CisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIG1lcmdlX3RyZWVzKHN0cnVjdCB0cmVlX2Rlc2MgdFszXSwgY29uc3QgY2hhciAqYmFzZSkKK3sKKwlzdHJ1Y3QgdHJhdmVyc2VfaW5mbyBpbmZvOworCisJc2V0dXBfdHJhdmVyc2VfaW5mbygmaW5mbywgYmFzZSk7CisJaW5mby5mbiA9IHRocmVld2F5X2NhbGxiYWNrOworCXRyYXZlcnNlX3RyZWVzKCZ0aGVfaW5kZXgsIDMsIHQsICZpbmZvKTsKK30KKworc3RhdGljIHZvaWQgKmdldF90cmVlX2Rlc2NyaXB0b3Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJIHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsCisJCQkJIGNvbnN0IGNoYXIgKnJldikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwl2b2lkICpidWY7CisKKwlpZiAocmVwb19nZXRfb2lkKHIsIHJldiwgJm9pZCkpCisJCWRpZSgidW5rbm93biByZXYgJXMiLCByZXYpOworCWJ1ZiA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKHIsIGRlc2MsICZvaWQpOworCWlmICghYnVmKQorCQlkaWUoIiVzIGlzIG5vdCBhIHRyZWUiLCByZXYpOworCXJldHVybiBidWY7Cit9CisKK2ludCBjbWRfbWVyZ2VfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqciA9IHRoZV9yZXBvc2l0b3J5OworCXN0cnVjdCB0cmVlX2Rlc2MgdFszXTsKKwl2b2lkICpidWYxLCAqYnVmMiwgKmJ1ZjM7CisKKwlpZiAoYXJnYyAhPSA0KQorCQl1c2FnZShtZXJnZV90cmVlX3VzYWdlKTsKKworCWJ1ZjEgPSBnZXRfdHJlZV9kZXNjcmlwdG9yKHIsIHQrMCwgYXJndlsxXSk7CisJYnVmMiA9IGdldF90cmVlX2Rlc2NyaXB0b3IociwgdCsxLCBhcmd2WzJdKTsKKwlidWYzID0gZ2V0X3RyZWVfZGVzY3JpcHRvcihyLCB0KzIsIGFyZ3ZbM10pOworCW1lcmdlX3RyZWVzKHQsICIiKTsKKwlmcmVlKGJ1ZjEpOworCWZyZWUoYnVmMik7CisJZnJlZShidWYzKTsKKworCXNob3dfcmVzdWx0KCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21lcmdlLmMgYi9idWlsdGluL21lcmdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2YTVkYwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWVyZ2UuYwpAQCAtMCwwICsxLDE3MTkgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgbWVyZ2UiCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE1pa2xvcyBWYWpuYSA8dm1pa2xvc0BmcnVnYWx3YXJlLm9yZz4KKyAqCisgKiBCYXNlZCBvbiBnaXQtbWVyZ2Uuc2ggYnkgSnVuaW8gQyBIYW1hbm8uCisgKi8KKworI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlZnNwZWMuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisjaW5jbHVkZSAiaGVscC5oIgorI2luY2x1ZGUgIm1lcmdlLXJlY3Vyc2l2ZS5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImZtdC1tZXJnZS1tc2cuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImFsaWFzLmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCisjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisjaW5jbHVkZSAid3Qtc3RhdHVzLmgiCisjaW5jbHVkZSAiY29tbWl0LWdyYXBoLmgiCisKKyNkZWZpbmUgREVGQVVMVF9UV09IRUFEICgxPDwwKQorI2RlZmluZSBERUZBVUxUX09DVE9QVVMgKDE8PDEpCisjZGVmaW5lIE5PX0ZBU1RfRk9SV0FSRCAoMTw8MikKKyNkZWZpbmUgTk9fVFJJVklBTCAgICAgICgxPDwzKQorCitzdHJ1Y3Qgc3RyYXRlZ3kgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgYXR0cjsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9tZXJnZV91c2FnZVtdID0geworCU5fKCJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIpLAorCU5fKCJnaXQgbWVyZ2UgLS1hYm9ydCIpLAorCU5fKCJnaXQgbWVyZ2UgLS1jb250aW51ZSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgc2hvd19kaWZmc3RhdCA9IDEsIHNob3J0bG9nX2xlbiA9IC0xLCBzcXVhc2g7CitzdGF0aWMgaW50IG9wdGlvbl9jb21taXQgPSAtMTsKK3N0YXRpYyBpbnQgb3B0aW9uX2VkaXQgPSAtMTsKK3N0YXRpYyBpbnQgYWxsb3dfdHJpdmlhbCA9IDEsIGhhdmVfbWVzc2FnZSwgdmVyaWZ5X3NpZ25hdHVyZXM7CitzdGF0aWMgaW50IGNoZWNrX3RydXN0X2xldmVsID0gMTsKK3N0YXRpYyBpbnQgb3ZlcndyaXRlX2lnbm9yZSA9IDE7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBtZXJnZV9tc2cgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYXRlZ3kgKip1c2Vfc3RyYXRlZ2llczsKK3N0YXRpYyBzaXplX3QgdXNlX3N0cmF0ZWdpZXNfbnIsIHVzZV9zdHJhdGVnaWVzX2FsbG9jOworc3RhdGljIGNvbnN0IGNoYXIgKip4b3B0czsKK3N0YXRpYyBzaXplX3QgeG9wdHNfbnIsIHhvcHRzX2FsbG9jOworc3RhdGljIGNvbnN0IGNoYXIgKmJyYW5jaDsKK3N0YXRpYyBjaGFyICpicmFuY2hfbWVyZ2VvcHRpb25zOworc3RhdGljIGludCBvcHRpb25fcmVub3JtYWxpemU7CitzdGF0aWMgaW50IHZlcmJvc2l0eTsKK3N0YXRpYyBpbnQgYWxsb3dfcmVyZXJlX2F1dG87CitzdGF0aWMgaW50IGFib3J0X2N1cnJlbnRfbWVyZ2U7CitzdGF0aWMgaW50IHF1aXRfY3VycmVudF9tZXJnZTsKK3N0YXRpYyBpbnQgY29udGludWVfY3VycmVudF9tZXJnZTsKK3N0YXRpYyBpbnQgYWxsb3dfdW5yZWxhdGVkX2hpc3RvcmllczsKK3N0YXRpYyBpbnQgc2hvd19wcm9ncmVzcyA9IC0xOworc3RhdGljIGludCBkZWZhdWx0X3RvX3Vwc3RyZWFtID0gMTsKK3N0YXRpYyBpbnQgc2lnbm9mZjsKK3N0YXRpYyBjb25zdCBjaGFyICpzaWduX2NvbW1pdDsKK3N0YXRpYyBpbnQgYXV0b3N0YXNoOworc3RhdGljIGludCBub192ZXJpZnk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYXRlZ3kgYWxsX3N0cmF0ZWd5W10gPSB7CisJeyAicmVjdXJzaXZlIiwgIERFRkFVTFRfVFdPSEVBRCB8IE5PX1RSSVZJQUwgfSwKKwl7ICJvY3RvcHVzIiwgICAgREVGQVVMVF9PQ1RPUFVTIH0sCisJeyAicmVzb2x2ZSIsICAgIDAgfSwKKwl7ICJvdXJzIiwgICAgICAgTk9fRkFTVF9GT1JXQVJEIHwgTk9fVFJJVklBTCB9LAorCXsgInN1YnRyZWUiLCAgICBOT19GQVNUX0ZPUldBUkQgfCBOT19UUklWSUFMIH0sCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcHVsbF90d29oZWFkLCAqcHVsbF9vY3RvcHVzOworCitlbnVtIGZmX3R5cGUgeworCUZGX05PLAorCUZGX0FMTE9XLAorCUZGX09OTFkKK307CisKK3N0YXRpYyBlbnVtIGZmX3R5cGUgZmFzdF9mb3J3YXJkID0gRkZfQUxMT1c7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjbGVhbnVwX2FyZzsKK3N0YXRpYyBlbnVtIGNvbW1pdF9tc2dfY2xlYW51cF9tb2RlIGNsZWFudXBfbW9kZTsKKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfbWVzc2FnZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IHN0cmJ1ZiAqYnVmID0gb3B0LT52YWx1ZTsKKworCWlmICh1bnNldCkKKwkJc3RyYnVmX3NldGxlbihidWYsIDApOworCWVsc2UgaWYgKGFyZykgeworCQlzdHJidWZfYWRkZihidWYsICIlcyVzIiwgYnVmLT5sZW4gPyAiXG5cbiIgOiAiIiwgYXJnKTsKKwkJaGF2ZV9tZXNzYWdlID0gMTsKKwl9IGVsc2UKKwkJcmV0dXJuIGVycm9yKF8oInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gcGFyc2Vfb3B0X3Jlc3VsdCBvcHRpb25fcmVhZF9tZXNzYWdlKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCQkJCSBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJCQkgY29uc3QgY2hhciAqYXJnX25vdF91c2VkLAorCQkJCQkJIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpidWYgPSBvcHQtPnZhbHVlOworCWNvbnN0IGNoYXIgKmFyZzsKKworCUJVR19PTl9PUFRfQVJHKGFyZ19ub3RfdXNlZCk7CisJaWYgKHVuc2V0KQorCQlCVUcoIi1GIGNhbm5vdCBiZSBuZWdhdGVkIik7CisKKwlpZiAoY3R4LT5vcHQpIHsKKwkJYXJnID0gY3R4LT5vcHQ7CisJCWN0eC0+b3B0ID0gTlVMTDsKKwl9IGVsc2UgaWYgKGN0eC0+YXJnYyA+IDEpIHsKKwkJY3R4LT5hcmdjLS07CisJCWFyZyA9ICorK2N0eC0+YXJndjsKKwl9IGVsc2UKKwkJcmV0dXJuIGVycm9yKF8oIm9wdGlvbiBgJXMnIHJlcXVpcmVzIGEgdmFsdWUiKSwgb3B0LT5sb25nX25hbWUpOworCisJaWYgKGJ1Zi0+bGVuKQorCQlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKwlpZiAoY3R4LT5wcmVmaXggJiYgIWlzX2Fic29sdXRlX3BhdGgoYXJnKSkKKwkJYXJnID0gcHJlZml4X2ZpbGVuYW1lKGN0eC0+cHJlZml4LCBhcmcpOworCWlmIChzdHJidWZfcmVhZF9maWxlKGJ1ZiwgYXJnLCAwKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciKSwgYXJnKTsKKwloYXZlX21lc3NhZ2UgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYXRlZ3kgKmdldF9zdHJhdGVneShjb25zdCBjaGFyICpuYW1lKQoreworCWludCBpOworCXN0cnVjdCBzdHJhdGVneSAqcmV0OworCXN0YXRpYyBzdHJ1Y3QgY21kbmFtZXMgbWFpbl9jbWRzLCBvdGhlcl9jbWRzOworCXN0YXRpYyBpbnQgbG9hZGVkOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbF9zdHJhdGVneSk7IGkrKykKKwkJaWYgKCFzdHJjbXAobmFtZSwgYWxsX3N0cmF0ZWd5W2ldLm5hbWUpKQorCQkJcmV0dXJuICZhbGxfc3RyYXRlZ3lbaV07CisKKwlpZiAoIWxvYWRlZCkgeworCQlzdHJ1Y3QgY21kbmFtZXMgbm90X3N0cmF0ZWdpZXM7CisJCWxvYWRlZCA9IDE7CisKKwkJbWVtc2V0KCZub3Rfc3RyYXRlZ2llcywgMCwgc2l6ZW9mKHN0cnVjdCBjbWRuYW1lcykpOworCQlsb2FkX2NvbW1hbmRfbGlzdCgiZ2l0LW1lcmdlLSIsICZtYWluX2NtZHMsICZvdGhlcl9jbWRzKTsKKwkJZm9yIChpID0gMDsgaSA8IG1haW5fY21kcy5jbnQ7IGkrKykgeworCQkJaW50IGosIGZvdW5kID0gMDsKKwkJCXN0cnVjdCBjbWRuYW1lICplbnQgPSBtYWluX2NtZHMubmFtZXNbaV07CisJCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShhbGxfc3RyYXRlZ3kpOyBqKyspCisJCQkJaWYgKCFzdHJuY21wKGVudC0+bmFtZSwgYWxsX3N0cmF0ZWd5W2pdLm5hbWUsIGVudC0+bGVuKQorCQkJCQkJJiYgIWFsbF9zdHJhdGVneVtqXS5uYW1lW2VudC0+bGVuXSkKKwkJCQkJZm91bmQgPSAxOworCQkJaWYgKCFmb3VuZCkKKwkJCQlhZGRfY21kbmFtZSgmbm90X3N0cmF0ZWdpZXMsIGVudC0+bmFtZSwgZW50LT5sZW4pOworCQl9CisJCWV4Y2x1ZGVfY21kcygmbWFpbl9jbWRzLCAmbm90X3N0cmF0ZWdpZXMpOworCX0KKwlpZiAoIWlzX2luX2NtZGxpc3QoJm1haW5fY21kcywgbmFtZSkgJiYgIWlzX2luX2NtZGxpc3QoJm90aGVyX2NtZHMsIG5hbWUpKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJDb3VsZCBub3QgZmluZCBtZXJnZSBzdHJhdGVneSAnJXMnLlxuIiksIG5hbWUpOworCQlmcHJpbnRmKHN0ZGVyciwgXygiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIpKTsKKwkJZm9yIChpID0gMDsgaSA8IG1haW5fY21kcy5jbnQ7IGkrKykKKwkJCWZwcmludGYoc3RkZXJyLCAiICVzIiwgbWFpbl9jbWRzLm5hbWVzW2ldLT5uYW1lKTsKKwkJZnByaW50ZihzdGRlcnIsICIuXG4iKTsKKwkJaWYgKG90aGVyX2NtZHMuY250KSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiKSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgb3RoZXJfY21kcy5jbnQ7IGkrKykKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIG90aGVyX2NtZHMubmFtZXNbaV0tPm5hbWUpOworCQkJZnByaW50ZihzdGRlcnIsICIuXG4iKTsKKwkJfQorCQlleGl0KDEpOworCX0KKworCXJldCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHJhdGVneSkpOworCXJldC0+bmFtZSA9IHhzdHJkdXAobmFtZSk7CisJcmV0LT5hdHRyID0gTk9fVFJJVklBTDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfc3RyYXRlZ3koc3RydWN0IHN0cmF0ZWd5ICpzKQoreworCUFMTE9DX0dST1codXNlX3N0cmF0ZWdpZXMsIHVzZV9zdHJhdGVnaWVzX25yICsgMSwgdXNlX3N0cmF0ZWdpZXNfYWxsb2MpOworCXVzZV9zdHJhdGVnaWVzW3VzZV9zdHJhdGVnaWVzX25yKytdID0gczsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2Vfc3RyYXRlZ3koY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSBjb25zdCBjaGFyICpuYW1lLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KQorCQlyZXR1cm4gMDsKKworCWFwcGVuZF9zdHJhdGVneShnZXRfc3RyYXRlZ3kobmFtZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV94KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KQorCQlyZXR1cm4gMDsKKworCUFMTE9DX0dST1coeG9wdHMsIHhvcHRzX25yICsgMSwgeG9wdHNfYWxsb2MpOworCXhvcHRzW3hvcHRzX25yKytdID0geHN0cmR1cChhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9uKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJQlVHX09OX09QVF9BUkcoYXJnKTsKKwlzaG93X2RpZmZzdGF0ID0gdW5zZXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fbWVyZ2Vfb3B0aW9uc1tdID0geworCU9QVF9DQUxMQkFDS19GKCduJywgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTl8oImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiKSwKKwkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2VfbiksCisJT1BUX0JPT0woMCwgInN0YXQiLCAmc2hvd19kaWZmc3RhdCwKKwkJTl8oInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIpKSwKKwlPUFRfQk9PTCgwLCAic3VtbWFyeSIsICZzaG93X2RpZmZzdGF0LCBOXygiKHN5bm9ueW0gdG8gLS1zdGF0KSIpKSwKKwl7IE9QVElPTl9JTlRFR0VSLCAwLCAibG9nIiwgJnNob3J0bG9nX2xlbiwgTl8oIm4iKSwKKwkgIE5fKCJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiKSwKKwkgIFBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIERFRkFVTFRfTUVSR0VfTE9HX0xFTiB9LAorCU9QVF9CT09MKDAsICJzcXVhc2giLCAmc3F1YXNoLAorCQlOXygiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiKSksCisJT1BUX0JPT0woMCwgImNvbW1pdCIsICZvcHRpb25fY29tbWl0LAorCQlOXygicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIikpLAorCU9QVF9CT09MKCdlJywgImVkaXQiLCAmb3B0aW9uX2VkaXQsCisJCU5fKCJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciKSksCisJT1BUX0NMRUFOVVAoJmNsZWFudXBfYXJnKSwKKwlPUFRfU0VUX0lOVCgwLCAiZmYiLCAmZmFzdF9mb3J3YXJkLCBOXygiYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KSIpLCBGRl9BTExPVyksCisJT1BUX1NFVF9JTlRfRigwLCAiZmYtb25seSIsICZmYXN0X2ZvcndhcmQsCisJCSAgICAgIE5fKCJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIiksCisJCSAgICAgIEZGX09OTFksIFBBUlNFX09QVF9OT05FRyksCisJT1BUX1JFUkVSRV9BVVRPVVBEQVRFKCZhbGxvd19yZXJlcmVfYXV0byksCisJT1BUX0JPT0woMCwgInZlcmlmeS1zaWduYXR1cmVzIiwgJnZlcmlmeV9zaWduYXR1cmVzLAorCQlOXygidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIikpLAorCU9QVF9DQUxMQkFDSygncycsICJzdHJhdGVneSIsICZ1c2Vfc3RyYXRlZ2llcywgTl8oInN0cmF0ZWd5IiksCisJCU5fKCJtZXJnZSBzdHJhdGVneSB0byB1c2UiKSwgb3B0aW9uX3BhcnNlX3N0cmF0ZWd5KSwKKwlPUFRfQ0FMTEJBQ0soJ1gnLCAic3RyYXRlZ3ktb3B0aW9uIiwgJnhvcHRzLCBOXygib3B0aW9uPXZhbHVlIiksCisJCU5fKCJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IiksIG9wdGlvbl9wYXJzZV94KSwKKwlPUFRfQ0FMTEJBQ0soJ20nLCAibWVzc2FnZSIsICZtZXJnZV9tc2csIE5fKCJtZXNzYWdlIiksCisJCU5fKCJtZXJnZSBjb21taXQgbWVzc2FnZSAoZm9yIGEgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZSkiKSwKKwkJb3B0aW9uX3BhcnNlX21lc3NhZ2UpLAorCXsgT1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLLCAnRicsICJmaWxlIiwgJm1lcmdlX21zZywgTl8oInBhdGgiKSwKKwkJTl8oInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiKSwgUEFSU0VfT1BUX05PTkVHLAorCQlOVUxMLCAwLCBvcHRpb25fcmVhZF9tZXNzYWdlIH0sCisJT1BUX19WRVJCT1NJVFkoJnZlcmJvc2l0eSksCisJT1BUX0JPT0woMCwgImFib3J0IiwgJmFib3J0X2N1cnJlbnRfbWVyZ2UsCisJCU5fKCJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIpKSwKKwlPUFRfQk9PTCgwLCAicXVpdCIsICZxdWl0X2N1cnJlbnRfbWVyZ2UsCisJCU5fKCItLWFib3J0IGJ1dCBsZWF2ZSBpbmRleCBhbmQgd29ya2luZyB0cmVlIGFsb25lIikpLAorCU9QVF9CT09MKDAsICJjb250aW51ZSIsICZjb250aW51ZV9jdXJyZW50X21lcmdlLAorCQlOXygiY29udGludWUgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiKSksCisJT1BUX0JPT0woMCwgImFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMiLCAmYWxsb3dfdW5yZWxhdGVkX2hpc3RvcmllcywKKwkJIE5fKCJhbGxvdyBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMiKSksCisJT1BUX1NFVF9JTlQoMCwgInByb2dyZXNzIiwgJnNob3dfcHJvZ3Jlc3MsIE5fKCJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciKSwgMSksCisJeyBPUFRJT05fU1RSSU5HLCAnUycsICJncGctc2lnbiIsICZzaWduX2NvbW1pdCwgTl8oImtleS1pZCIpLAorCSAgTl8oIkdQRyBzaWduIGNvbW1pdCIpLCBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpICIiIH0sCisJT1BUX0FVVE9TVEFTSCgmYXV0b3N0YXNoKSwKKwlPUFRfQk9PTCgwLCAib3ZlcndyaXRlLWlnbm9yZSIsICZvdmVyd3JpdGVfaWdub3JlLCBOXygidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIikpLAorCU9QVF9CT09MKDAsICJzaWdub2ZmIiwgJnNpZ25vZmYsIE5fKCJhZGQgU2lnbmVkLW9mZi1ieToiKSksCisJT1BUX0JPT0woMCwgIm5vLXZlcmlmeSIsICZub192ZXJpZnksIE5fKCJieXBhc3MgcHJlLW1lcmdlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIpKSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyBpbnQgc2F2ZV9zdGF0ZShzdHJ1Y3Qgb2JqZWN0X2lkICpzdGFzaCkKK3sKKwlpbnQgbGVuOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqYXJndltdID0geyJzdGFzaCIsICJjcmVhdGUiLCBOVUxMfTsKKwlpbnQgcmMgPSAtMTsKKworCWNwLmFyZ3YgPSBhcmd2OworCWNwLm91dCA9IC0xOworCWNwLmdpdF9jbWQgPSAxOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNwKSkKKwkJZGllKF8oImNvdWxkIG5vdCBydW4gc3Rhc2guIikpOworCWxlbiA9IHN0cmJ1Zl9yZWFkKCZidWZmZXIsIGNwLm91dCwgMTAyNCk7CisJY2xvc2UoY3Aub3V0KTsKKworCWlmIChmaW5pc2hfY29tbWFuZCgmY3ApIHx8IGxlbiA8IDApCisJCWRpZShfKCJzdGFzaCBmYWlsZWQiKSk7CisJZWxzZSBpZiAoIWxlbikJCS8qIG5vIGNoYW5nZXMgKi8KKwkJZ290byBvdXQ7CisJc3RyYnVmX3NldGxlbigmYnVmZmVyLCBidWZmZXIubGVuLTEpOworCWlmIChnZXRfb2lkKGJ1ZmZlci5idWYsIHN0YXNoKSkKKwkJZGllKF8oIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiKSwgYnVmZmVyLmJ1Zik7CisJcmMgPSAwOworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgcmVhZF9lbXB0eShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCB2ZXJib3NlKQoreworCWludCBpID0gMDsKKwljb25zdCBjaGFyICphcmdzWzddOworCisJYXJnc1tpKytdID0gInJlYWQtdHJlZSI7CisJaWYgKHZlcmJvc2UpCisJCWFyZ3NbaSsrXSA9ICItdiI7CisJYXJnc1tpKytdID0gIi1tIjsKKwlhcmdzW2krK10gPSAiLXUiOworCWFyZ3NbaSsrXSA9IGVtcHR5X3RyZWVfb2lkX2hleCgpOworCWFyZ3NbaSsrXSA9IG9pZF90b19oZXgob2lkKTsKKwlhcmdzW2ldID0gTlVMTDsKKworCWlmIChydW5fY29tbWFuZF92X29wdChhcmdzLCBSVU5fR0lUX0NNRCkpCisJCWRpZShfKCJyZWFkLXRyZWUgZmFpbGVkIikpOworfQorCitzdGF0aWMgdm9pZCByZXNldF9oYXJkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IHZlcmJvc2UpCit7CisJaW50IGkgPSAwOworCWNvbnN0IGNoYXIgKmFyZ3NbNl07CisKKwlhcmdzW2krK10gPSAicmVhZC10cmVlIjsKKwlpZiAodmVyYm9zZSkKKwkJYXJnc1tpKytdID0gIi12IjsKKwlhcmdzW2krK10gPSAiLS1yZXNldCI7CisJYXJnc1tpKytdID0gIi11IjsKKwlhcmdzW2krK10gPSBvaWRfdG9faGV4KG9pZCk7CisJYXJnc1tpXSA9IE5VTEw7CisKKwlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJncywgUlVOX0dJVF9DTUQpKQorCQlkaWUoXygicmVhZC10cmVlIGZhaWxlZCIpKTsKK30KKworc3RhdGljIHZvaWQgcmVzdG9yZV9zdGF0ZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpoZWFkLAorCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpzdGFzaCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqYXJnc1tdID0geyAic3Rhc2giLCAiYXBwbHkiLCBOVUxMLCBOVUxMIH07CisKKwlpZiAoaXNfbnVsbF9vaWQoc3Rhc2gpKQorCQlyZXR1cm47CisKKwlyZXNldF9oYXJkKGhlYWQsIDEpOworCisJYXJnc1syXSA9IG9pZF90b19oZXgoc3Rhc2gpOworCisJLyoKKwkgKiBJdCBpcyBPSyB0byBpZ25vcmUgZXJyb3IgaGVyZSwgZm9yIGV4YW1wbGUgd2hlbiB0aGVyZSB3YXMKKwkgKiBub3RoaW5nIHRvIHJlc3RvcmUuCisJICovCisJcnVuX2NvbW1hbmRfdl9vcHQoYXJncywgUlVOX0dJVF9DTUQpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOworfQorCisvKiBUaGlzIGlzIGNhbGxlZCB3aGVuIG5vIG1lcmdlIHdhcyBuZWNlc3NhcnkuICovCitzdGF0aWMgdm9pZCBmaW5pc2hfdXBfdG9fZGF0ZShjb25zdCBjaGFyICptc2cpCit7CisJaWYgKHZlcmJvc2l0eSA+PSAwKQorCQlwcmludGYoIiVzJXNcbiIsIHNxdWFzaCA/IF8oIiAobm90aGluZyB0byBzcXVhc2gpIikgOiAiIiwgbXNnKTsKKwlyZW1vdmVfbWVyZ2VfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5KTsKK30KKworc3RhdGljIHZvaWQgc3F1YXNoX21lc3NhZ2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzKQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmo7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKworCXByaW50ZihfKCJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iKSk7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2LCBOVUxMKTsKKwlyZXYuaWdub3JlX21lcmdlcyA9IDE7CisJcmV2LmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9NRURJVU07CisKKwljb21taXQtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2LCAmY29tbWl0LT5vYmplY3QsIE5VTEwpOworCisJZm9yIChqID0gcmVtb3RlaGVhZHM7IGo7IGogPSBqLT5uZXh0KQorCQlhZGRfcGVuZGluZ19vYmplY3QoJnJldiwgJmotPml0ZW0tPm9iamVjdCwgTlVMTCk7CisKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgTlVMTCk7CisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2KSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCisJY3R4LmFiYnJldiA9IHJldi5hYmJyZXY7CisJY3R4LmRhdGVfbW9kZSA9IHJldi5kYXRlX21vZGU7CisJY3R4LmZtdCA9IHJldi5jb21taXRfZm9ybWF0OworCisJc3RyYnVmX2FkZHN0cigmb3V0LCAiU3F1YXNoZWQgY29tbWl0IG9mIHRoZSBmb2xsb3dpbmc6XG4iKTsKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2KSkgIT0gTlVMTCkgeworCQlzdHJidWZfYWRkY2goJm91dCwgJ1xuJyk7CisJCXN0cmJ1Zl9hZGRmKCZvdXQsICJjb21taXQgJXNcbiIsCisJCQlvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwkJcHJldHR5X3ByaW50X2NvbW1pdCgmY3R4LCBjb21taXQsICZvdXQpOworCX0KKwl3cml0ZV9maWxlX2J1ZihnaXRfcGF0aF9zcXVhc2hfbXNnKHRoZV9yZXBvc2l0b3J5KSwgb3V0LmJ1Ziwgb3V0Lmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJm91dCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaChzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdCwKKwkJICAgc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkcywKKwkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X2hlYWQsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlZmxvZ19tZXNzYWdlID0gU1RSQlVGX0lOSVQ7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqaGVhZCA9ICZoZWFkX2NvbW1pdC0+b2JqZWN0Lm9pZDsKKworCWlmICghbXNnKQorCQlzdHJidWZfYWRkc3RyKCZyZWZsb2dfbWVzc2FnZSwgZ2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIpKTsKKwllbHNlIHsKKwkJaWYgKHZlcmJvc2l0eSA+PSAwKQorCQkJcHJpbnRmKCIlc1xuIiwgbXNnKTsKKwkJc3RyYnVmX2FkZGYoJnJlZmxvZ19tZXNzYWdlLCAiJXM6ICVzIiwKKwkJCWdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKSwgbXNnKTsKKwl9CisJaWYgKHNxdWFzaCkgeworCQlzcXVhc2hfbWVzc2FnZShoZWFkX2NvbW1pdCwgcmVtb3RlaGVhZHMpOworCX0gZWxzZSB7CisJCWlmICh2ZXJib3NpdHkgPj0gMCAmJiAhbWVyZ2VfbXNnLmxlbikKKwkJCXByaW50ZihfKCJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iKSk7CisJCWVsc2UgeworCQkJdXBkYXRlX3JlZihyZWZsb2dfbWVzc2FnZS5idWYsICJIRUFEIiwgbmV3X2hlYWQsIGhlYWQsCisJCQkJICAgMCwgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisJCQkvKgorCQkJICogV2UgaWdub3JlIGVycm9ycyBpbiAnZ2MgLS1hdXRvJywgc2luY2UgdGhlCisJCQkgKiB1c2VyIHNob3VsZCBzZWUgdGhlbS4KKwkJCSAqLworCQkJY2xvc2Vfb2JqZWN0X3N0b3JlKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKKwkJCXJ1bl9hdXRvX2djKHZlcmJvc2l0eSA8IDApOworCQl9CisJfQorCWlmIChuZXdfaGVhZCAmJiBzaG93X2RpZmZzdGF0KSB7CisJCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0czsKKwkJcmVwb19kaWZmX3NldHVwKHRoZV9yZXBvc2l0b3J5LCAmb3B0cyk7CisJCW9wdHMuc3RhdF93aWR0aCA9IC0xOyAvKiB1c2UgZnVsbCB0ZXJtaW5hbCB3aWR0aCAqLworCQlvcHRzLnN0YXRfZ3JhcGhfd2lkdGggPSAtMTsgLyogcmVzcGVjdCBzdGF0R3JhcGhXaWR0aCBjb25maWcgKi8KKwkJb3B0cy5vdXRwdXRfZm9ybWF0IHw9CisJCQlESUZGX0ZPUk1BVF9TVU1NQVJZIHwgRElGRl9GT1JNQVRfRElGRlNUQVQ7CisJCW9wdHMuZGV0ZWN0X3JlbmFtZSA9IERJRkZfREVURUNUX1JFTkFNRTsKKwkJZGlmZl9zZXR1cF9kb25lKCZvcHRzKTsKKwkJZGlmZl90cmVlX29pZChoZWFkLCBuZXdfaGVhZCwgIiIsICZvcHRzKTsKKwkJZGlmZmNvcmVfc3RkKCZvcHRzKTsKKwkJZGlmZl9mbHVzaCgmb3B0cyk7CisJfQorCisJLyogUnVuIGEgcG9zdC1tZXJnZSBob29rICovCisJcnVuX2hvb2tfbGUoTlVMTCwgInBvc3QtbWVyZ2UiLCBzcXVhc2ggPyAiMSIgOiAiMCIsIE5VTEwpOworCisJYXBwbHlfYXV0b3N0YXNoKGdpdF9wYXRoX21lcmdlX2F1dG9zdGFzaCh0aGVfcmVwb3NpdG9yeSkpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZWZsb2dfbWVzc2FnZSk7Cit9CisKKy8qIEdldCB0aGUgbmFtZSBmb3IgdGhlIG1lcmdlIGNvbW1pdCdzIG1lc3NhZ2UuICovCitzdGF0aWMgdm9pZCBtZXJnZV9uYW1lKGNvbnN0IGNoYXIgKnJlbW90ZSwgc3RydWN0IHN0cmJ1ZiAqbXNnKQoreworCXN0cnVjdCBjb21taXQgKnJlbW90ZV9oZWFkOworCXN0cnVjdCBvYmplY3RfaWQgYnJhbmNoX2hlYWQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJuYW1lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG1lcmdlX3JlbW90ZV9kZXNjICpkZXNjOworCWNvbnN0IGNoYXIgKnB0cjsKKwljaGFyICpmb3VuZF9yZWY7CisJaW50IGxlbiwgZWFybHk7CisKKwlzdHJidWZfYnJhbmNobmFtZSgmYm5hbWUsIHJlbW90ZSwgMCk7CisJcmVtb3RlID0gYm5hbWUuYnVmOworCisJb2lkY2xyKCZicmFuY2hfaGVhZCk7CisJcmVtb3RlX2hlYWQgPSBnZXRfbWVyZ2VfcGFyZW50KHJlbW90ZSk7CisJaWYgKCFyZW1vdGVfaGVhZCkKKwkJZGllKF8oIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiKSwgcmVtb3RlKTsKKworCWlmIChkd2ltX3JlZihyZW1vdGUsIHN0cmxlbihyZW1vdGUpLCAmYnJhbmNoX2hlYWQsICZmb3VuZF9yZWYpID4gMCkgeworCQlpZiAoc3RhcnRzX3dpdGgoZm91bmRfcmVmLCAicmVmcy9oZWFkcy8iKSkgeworCQkJc3RyYnVmX2FkZGYobXNnLCAiJXNcdFx0YnJhbmNoICclcycgb2YgLlxuIiwKKwkJCQkgICAgb2lkX3RvX2hleCgmYnJhbmNoX2hlYWQpLCByZW1vdGUpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJCWlmIChzdGFydHNfd2l0aChmb3VuZF9yZWYsICJyZWZzL3RhZ3MvIikpIHsKKwkJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXHRcdHRhZyAnJXMnIG9mIC5cbiIsCisJCQkJICAgIG9pZF90b19oZXgoJmJyYW5jaF9oZWFkKSwgcmVtb3RlKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlpZiAoc3RhcnRzX3dpdGgoZm91bmRfcmVmLCAicmVmcy9yZW1vdGVzLyIpKSB7CisJCQlzdHJidWZfYWRkZihtc2csICIlc1x0XHRyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgb2YgLlxuIiwKKwkJCQkgICAgb2lkX3RvX2hleCgmYnJhbmNoX2hlYWQpLCByZW1vdGUpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQorCisJLyogU2VlIGlmIHJlbW90ZSBtYXRjaGVzIDxuYW1lPl5eXi4uIG9yIDxuYW1lPn48bnVtYmVyPiAqLworCWZvciAobGVuID0gMCwgcHRyID0gcmVtb3RlICsgc3RybGVuKHJlbW90ZSk7CisJICAgICByZW1vdGUgPCBwdHIgJiYgcHRyWy0xXSA9PSAnXic7CisJICAgICBwdHItLSkKKwkJbGVuKys7CisJaWYgKGxlbikKKwkJZWFybHkgPSAxOworCWVsc2UgeworCQllYXJseSA9IDA7CisJCXB0ciA9IHN0cnJjaHIocmVtb3RlLCAnficpOworCQlpZiAocHRyKSB7CisJCQlpbnQgc2Vlbl9ub256ZXJvID0gMDsKKworCQkJbGVuKys7IC8qIGNvdW50IH4gKi8KKwkJCXdoaWxlICgqKytwdHIgJiYgaXNkaWdpdCgqcHRyKSkgeworCQkJCXNlZW5fbm9uemVybyB8PSAoKnB0ciAhPSAnMCcpOworCQkJCWxlbisrOworCQkJfQorCQkJaWYgKCpwdHIpCisJCQkJbGVuID0gMDsgLyogbm90IC4uLn48bnVtYmVyPiAqLworCQkJZWxzZSBpZiAoc2Vlbl9ub256ZXJvKQorCQkJCWVhcmx5ID0gMTsKKwkJCWVsc2UgaWYgKGxlbiA9PSAxKQorCQkJCWVhcmx5ID0gMTsgLyogIm5hbWV+IiBpcyAibmFtZX4xIiEgKi8KKwkJfQorCX0KKwlpZiAobGVuKSB7CisJCXN0cnVjdCBzdHJidWYgdHJ1bmFtZSA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkZigmdHJ1bmFtZSwgInJlZnMvaGVhZHMvJXMiLCByZW1vdGUpOworCQlzdHJidWZfc2V0bGVuKCZ0cnVuYW1lLCB0cnVuYW1lLmxlbiAtIGxlbik7CisJCWlmIChyZWZfZXhpc3RzKHRydW5hbWUuYnVmKSkgeworCQkJc3RyYnVmX2FkZGYobXNnLAorCQkJCSAgICAiJXNcdFx0YnJhbmNoICclcyclcyBvZiAuXG4iLAorCQkJCSAgICBvaWRfdG9faGV4KCZyZW1vdGVfaGVhZC0+b2JqZWN0Lm9pZCksCisJCQkJICAgIHRydW5hbWUuYnVmICsgMTEsCisJCQkJICAgIChlYXJseSA/ICIgKGVhcmx5IHBhcnQpIiA6ICIiKSk7CisJCQlzdHJidWZfcmVsZWFzZSgmdHJ1bmFtZSk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJnRydW5hbWUpOworCX0KKworCWRlc2MgPSBtZXJnZV9yZW1vdGVfdXRpbChyZW1vdGVfaGVhZCk7CisJaWYgKGRlc2MgJiYgZGVzYy0+b2JqICYmIGRlc2MtPm9iai0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXHRcdCVzICclcydcbiIsCisJCQkgICAgb2lkX3RvX2hleCgmZGVzYy0+b2JqLT5vaWQpLAorCQkJICAgIHR5cGVfbmFtZShkZXNjLT5vYmotPnR5cGUpLAorCQkJICAgIHJlbW90ZSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlzdHJidWZfYWRkZihtc2csICIlc1x0XHRjb21taXQgJyVzJ1xuIiwKKwkJb2lkX3RvX2hleCgmcmVtb3RlX2hlYWQtPm9iamVjdC5vaWQpLCByZW1vdGUpOworY2xlYW51cDoKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9icmFuY2hfbWVyZ2Vfb3B0aW9ucyhjaGFyICpibW8pCit7CisJY29uc3QgY2hhciAqKmFyZ3Y7CisJaW50IGFyZ2M7CisKKwlpZiAoIWJtbykKKwkJcmV0dXJuOworCWFyZ2MgPSBzcGxpdF9jbWRsaW5lKGJtbywgJmFyZ3YpOworCWlmIChhcmdjIDwgMCkKKwkJZGllKF8oIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiKSwgYnJhbmNoLAorCQkgICAgXyhzcGxpdF9jbWRsaW5lX3N0cmVycm9yKGFyZ2MpKSk7CisJUkVBTExPQ19BUlJBWShhcmd2LCBhcmdjICsgMik7CisJTU9WRV9BUlJBWShhcmd2ICsgMSwgYXJndiwgYXJnYyArIDEpOworCWFyZ2MrKzsKKwlhcmd2WzBdID0gImJyYW5jaC4qLm1lcmdlb3B0aW9ucyI7CisJcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBidWlsdGluX21lcmdlX29wdGlvbnMsCisJCSAgICAgIGJ1aWx0aW5fbWVyZ2VfdXNhZ2UsIDApOworCWZyZWUoYXJndik7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X21lcmdlX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlpbnQgc3RhdHVzOworCWNvbnN0IGNoYXIgKnN0cjsKKworCWlmIChicmFuY2ggJiYKKwkgICAgc2tpcF9wcmVmaXgoaywgImJyYW5jaC4iLCAmc3RyKSAmJgorCSAgICBza2lwX3ByZWZpeChzdHIsIGJyYW5jaCwgJnN0cikgJiYKKwkgICAgIXN0cmNtcChzdHIsICIubWVyZ2VvcHRpb25zIikpIHsKKwkJZnJlZShicmFuY2hfbWVyZ2VvcHRpb25zKTsKKwkJYnJhbmNoX21lcmdlb3B0aW9ucyA9IHhzdHJkdXAodik7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKGssICJtZXJnZS5kaWZmc3RhdCIpIHx8ICFzdHJjbXAoaywgIm1lcmdlLnN0YXQiKSkKKwkJc2hvd19kaWZmc3RhdCA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwllbHNlIGlmICghc3RyY21wKGssICJtZXJnZS52ZXJpZnlzaWduYXR1cmVzIikpCisJCXZlcmlmeV9zaWduYXR1cmVzID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCWVsc2UgaWYgKCFzdHJjbXAoaywgInB1bGwudHdvaGVhZCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnB1bGxfdHdvaGVhZCwgaywgdik7CisJZWxzZSBpZiAoIXN0cmNtcChrLCAicHVsbC5vY3RvcHVzIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmcHVsbF9vY3RvcHVzLCBrLCB2KTsKKwllbHNlIGlmICghc3RyY21wKGssICJjb21taXQuY2xlYW51cCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmNsZWFudXBfYXJnLCBrLCB2KTsKKwllbHNlIGlmICghc3RyY21wKGssICJtZXJnZS5yZW5vcm1hbGl6ZSIpKQorCQlvcHRpb25fcmVub3JtYWxpemUgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJZWxzZSBpZiAoIXN0cmNtcChrLCAibWVyZ2UuZmYiKSkgeworCQlpbnQgYm9vbHZhbCA9IGdpdF9wYXJzZV9tYXliZV9ib29sKHYpOworCQlpZiAoMCA8PSBib29sdmFsKSB7CisJCQlmYXN0X2ZvcndhcmQgPSBib29sdmFsID8gRkZfQUxMT1cgOiBGRl9OTzsKKwkJfSBlbHNlIGlmICh2ICYmICFzdHJjbXAodiwgIm9ubHkiKSkgeworCQkJZmFzdF9mb3J3YXJkID0gRkZfT05MWTsKKwkJfSAvKiBkbyBub3QgYmFyZiBvbiB2YWx1ZXMgZnJvbSBmdXR1cmUgdmVyc2lvbnMgb2YgZ2l0ICovCisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChrLCAibWVyZ2UuZGVmYXVsdHRvdXBzdHJlYW0iKSkgeworCQlkZWZhdWx0X3RvX3Vwc3RyZWFtID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoaywgImNvbW1pdC5ncGdzaWduIikpIHsKKwkJc2lnbl9jb21taXQgPSBnaXRfY29uZmlnX2Jvb2woaywgdikgPyAiIiA6IE5VTEw7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChrLCAiZ3BnLm1pbnRydXN0bGV2ZWwiKSkgeworCQljaGVja190cnVzdF9sZXZlbCA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKGssICJtZXJnZS5hdXRvc3Rhc2giKSkgeworCQlhdXRvc3Rhc2ggPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0KKworCXN0YXR1cyA9IGZtdF9tZXJnZV9tc2dfY29uZmlnKGssIHYsIGNiKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCXN0YXR1cyA9IGdpdF9ncGdfY29uZmlnKGssIHYsIE5VTEwpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIGdpdF9kaWZmX3VpX2NvbmZpZyhrLCB2LCBjYik7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF90cmVlX3RyaXZpYWwoc3RydWN0IG9iamVjdF9pZCAqY29tbW9uLCBzdHJ1Y3Qgb2JqZWN0X2lkICpoZWFkLAorCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvbmUpCit7CisJaW50IGksIG5yX3RyZWVzID0gMDsKKwlzdHJ1Y3QgdHJlZSAqdHJlZXNbTUFYX1VOUEFDS19UUkVFU107CisJc3RydWN0IHRyZWVfZGVzYyB0W01BWF9VTlBBQ0tfVFJFRVNdOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuaGVhZF9pZHggPSAyOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy51cGRhdGUgPSAxOworCW9wdHMudmVyYm9zZV91cGRhdGUgPSAxOworCW9wdHMudHJpdmlhbF9tZXJnZXNfb25seSA9IDE7CisJb3B0cy5tZXJnZSA9IDE7CisJdHJlZXNbbnJfdHJlZXNdID0gcGFyc2VfdHJlZV9pbmRpcmVjdChjb21tb24pOworCWlmICghdHJlZXNbbnJfdHJlZXMrK10pCisJCXJldHVybiAtMTsKKwl0cmVlc1tucl90cmVlc10gPSBwYXJzZV90cmVlX2luZGlyZWN0KGhlYWQpOworCWlmICghdHJlZXNbbnJfdHJlZXMrK10pCisJCXJldHVybiAtMTsKKwl0cmVlc1tucl90cmVlc10gPSBwYXJzZV90cmVlX2luZGlyZWN0KG9uZSk7CisJaWYgKCF0cmVlc1tucl90cmVlcysrXSkKKwkJcmV0dXJuIC0xOworCW9wdHMuZm4gPSB0aHJlZXdheV9tZXJnZTsKKwljYWNoZV90cmVlX2ZyZWUoJmFjdGl2ZV9jYWNoZV90cmVlKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdHJlZXM7IGkrKykgeworCQlwYXJzZV90cmVlKHRyZWVzW2ldKTsKKwkJaW5pdF90cmVlX2Rlc2ModCtpLCB0cmVlc1tpXS0+YnVmZmVyLCB0cmVlc1tpXS0+c2l6ZSk7CisJfQorCWlmICh1bnBhY2tfdHJlZXMobnJfdHJlZXMsIHQsICZvcHRzKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV90cmVlX3RyaXZpYWwoc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWlmICh3cml0ZV9jYWNoZV9hc190cmVlKG9pZCwgMCwgTlVMTCkpCisJCWRpZShfKCJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIikpOworfQorCitzdGF0aWMgaW50IHRyeV9tZXJnZV9zdHJhdGVneShjb25zdCBjaGFyICpzdHJhdGVneSwgc3RydWN0IGNvbW1pdF9saXN0ICpjb21tb24sCisJCQkgICAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzLAorCQkJICAgICAgc3RydWN0IGNvbW1pdCAqaGVhZCkKK3sKKwljb25zdCBjaGFyICpoZWFkX2FyZyA9ICJIRUFEIjsKKworCWlmIChyZWZyZXNoX2FuZF93cml0ZV9jYWNoZShSRUZSRVNIX1FVSUVULCBTS0lQX0lGX1VOQ0hBTkdFRCwgMCkgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIpKTsKKworCWlmICghc3RyY21wKHN0cmF0ZWd5LCAicmVjdXJzaXZlIikgfHwgIXN0cmNtcChzdHJhdGVneSwgInN1YnRyZWUiKSkgeworCQlzdHJ1Y3QgbG9ja19maWxlIGxvY2sgPSBMT0NLX0lOSVQ7CisJCWludCBjbGVhbiwgeDsKKwkJc3RydWN0IGNvbW1pdCAqcmVzdWx0OworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJldmVyc2VkID0gTlVMTDsKKwkJc3RydWN0IG1lcmdlX29wdGlvbnMgbzsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpqOworCisJCWlmIChyZW1vdGVoZWFkcy0+bmV4dCkgeworCQkJZXJyb3IoXygiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIpKTsKKwkJCXJldHVybiAyOworCQl9CisKKwkJaW5pdF9tZXJnZV9vcHRpb25zKCZvLCB0aGVfcmVwb3NpdG9yeSk7CisJCWlmICghc3RyY21wKHN0cmF0ZWd5LCAic3VidHJlZSIpKQorCQkJby5zdWJ0cmVlX3NoaWZ0ID0gIiI7CisKKwkJby5yZW5vcm1hbGl6ZSA9IG9wdGlvbl9yZW5vcm1hbGl6ZTsKKwkJby5zaG93X3JlbmFtZV9wcm9ncmVzcyA9CisJCQlzaG93X3Byb2dyZXNzID09IC0xID8gaXNhdHR5KDIpIDogc2hvd19wcm9ncmVzczsKKworCQlmb3IgKHggPSAwOyB4IDwgeG9wdHNfbnI7IHgrKykKKwkJCWlmIChwYXJzZV9tZXJnZV9vcHQoJm8sIHhvcHRzW3hdKSkKKwkJCQlkaWUoXygiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIpLCB4b3B0c1t4XSk7CisKKwkJby5icmFuY2gxID0gaGVhZF9hcmc7CisJCW8uYnJhbmNoMiA9IG1lcmdlX3JlbW90ZV91dGlsKHJlbW90ZWhlYWRzLT5pdGVtKS0+bmFtZTsKKworCQlmb3IgKGogPSBjb21tb247IGo7IGogPSBqLT5uZXh0KQorCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGotPml0ZW0sICZyZXZlcnNlZCk7CisKKwkJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2ssIExPQ0tfRElFX09OX0VSUk9SKTsKKwkJY2xlYW4gPSBtZXJnZV9yZWN1cnNpdmUoJm8sIGhlYWQsCisJCQkJcmVtb3RlaGVhZHMtPml0ZW0sIHJldmVyc2VkLCAmcmVzdWx0KTsKKwkJaWYgKGNsZWFuIDwgMCkKKwkJCWV4aXQoMTI4KTsKKwkJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9jaywKKwkJCQkgICAgICAgQ09NTUlUX0xPQ0sgfCBTS0lQX0lGX1VOQ0hBTkdFRCkpCisJCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlICVzIiksIGdldF9pbmRleF9maWxlKCkpOworCQlyZXR1cm4gY2xlYW4gPyAwIDogMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gdHJ5X21lcmdlX2NvbW1hbmQodGhlX3JlcG9zaXRvcnksCisJCQkJCSBzdHJhdGVneSwgeG9wdHNfbnIsIHhvcHRzLAorCQkJCQkgY29tbW9uLCBoZWFkX2FyZywgcmVtb3RlaGVhZHMpOworCX0KK30KKworc3RhdGljIHZvaWQgY291bnRfZGlmZl9maWxlcyhzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgKmNvdW50ID0gZGF0YTsKKworCSgqY291bnQpICs9IHEtPm5yOworfQorCitzdGF0aWMgaW50IGNvdW50X3VubWVyZ2VkX2VudHJpZXModm9pZCkKK3sKKwlpbnQgaSwgcmV0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykKKwkJaWYgKGNlX3N0YWdlKGFjdGl2ZV9jYWNoZVtpXSkpCisJCQlyZXQrKzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9zdHJhdGVnaWVzKGNvbnN0IGNoYXIgKnN0cmluZywgdW5zaWduZWQgYXR0cikKK3sKKwlpbnQgaTsKKworCWlmIChzdHJpbmcpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCXN0cmluZ19saXN0X3NwbGl0KCZsaXN0LCBzdHJpbmcsICcgJywgLTEpOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZsaXN0KQorCQkJYXBwZW5kX3N0cmF0ZWd5KGdldF9zdHJhdGVneShpdGVtLT5zdHJpbmcpKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDApOworCQlyZXR1cm47CisJfQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbF9zdHJhdGVneSk7IGkrKykKKwkJaWYgKGFsbF9zdHJhdGVneVtpXS5hdHRyICYgYXR0cikKKwkJCWFwcGVuZF9zdHJhdGVneSgmYWxsX3N0cmF0ZWd5W2ldKTsKKworfQorCitzdGF0aWMgdm9pZCByZWFkX21lcmdlX21zZyhzdHJ1Y3Qgc3RyYnVmICptc2cpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aF9tZXJnZV9tc2codGhlX3JlcG9zaXRvcnkpOworCXN0cmJ1Zl9yZXNldChtc2cpOworCWlmIChzdHJidWZfcmVhZF9maWxlKG1zZywgZmlsZW5hbWUsIDApIDwgMCkKKwkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIpLCBmaWxlbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX21lcmdlX3N0YXRlKHN0cnVjdCBjb21taXRfbGlzdCAqKTsKK3N0YXRpYyB2b2lkIGFib3J0X2NvbW1pdChzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzLCBjb25zdCBjaGFyICplcnJfbXNnKQoreworCWlmIChlcnJfbXNnKQorCQllcnJvcigiJXMiLCBlcnJfbXNnKTsKKwlmcHJpbnRmKHN0ZGVyciwKKwkJXygiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIikpOworCXdyaXRlX21lcmdlX3N0YXRlKHJlbW90ZWhlYWRzKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgY29uc3QgY2hhciBtZXJnZV9lZGl0b3JfY29tbWVudFtdID0KK05fKCJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyAgICJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisgICAiXG4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgc2Npc3NvcnNfZWRpdG9yX2NvbW1lbnRbXSA9CitOXygiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIpOworCitzdGF0aWMgY29uc3QgY2hhciBub19zY2lzc29yc19lZGl0b3JfY29tbWVudFtdID0KK05fKCJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyAgICJ0aGUgY29tbWl0LlxuIik7CisKK3N0YXRpYyB2b2lkIHdyaXRlX21lcmdlX2hlYWRzKHN0cnVjdCBjb21taXRfbGlzdCAqKTsKK3N0YXRpYyB2b2lkIHByZXBhcmVfdG9fY29tbWl0KHN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlaGVhZHMpCit7CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICppbmRleF9maWxlID0gZ2V0X2luZGV4X2ZpbGUoKTsKKworCWlmICghbm9fdmVyaWZ5ICYmIHJ1bl9jb21taXRfaG9vaygwIDwgb3B0aW9uX2VkaXQsIGluZGV4X2ZpbGUsICJwcmUtbWVyZ2UtY29tbWl0IiwgTlVMTCkpCisJCWFib3J0X2NvbW1pdChyZW1vdGVoZWFkcywgTlVMTCk7CisJLyoKKwkgKiBSZS1yZWFkIHRoZSBpbmRleCBhcyBwcmUtbWVyZ2UtY29tbWl0IGhvb2sgY291bGQgaGF2ZSB1cGRhdGVkIGl0LAorCSAqIGFuZCB3cml0ZSBpdCBvdXQgYXMgYSB0cmVlLiAgV2UgbXVzdCBkbyB0aGlzIGJlZm9yZSB3ZSBpbnZva2UKKwkgKiB0aGUgZWRpdG9yIGFuZCBhZnRlciB3ZSBpbnZva2UgcnVuX3N0YXR1cyBhYm92ZS4KKwkgKi8KKwlpZiAoZmluZF9ob29rKCJwcmUtbWVyZ2UtY29tbWl0IikpCisJCWRpc2NhcmRfY2FjaGUoKTsKKwlyZWFkX2NhY2hlX2Zyb20oaW5kZXhfZmlsZSk7CisJc3RyYnVmX2FkZGJ1ZigmbXNnLCAmbWVyZ2VfbXNnKTsKKwlpZiAoc3F1YXNoKQorCQlCVUcoInRoZSBjb250cm9sIG11c3Qgbm90IHJlYWNoIGhlcmUgdW5kZXIgLS1zcXVhc2giKTsKKwlpZiAoMCA8IG9wdGlvbl9lZGl0KSB7CisJCXN0cmJ1Zl9hZGRjaCgmbXNnLCAnXG4nKTsKKwkJaWYgKGNsZWFudXBfbW9kZSA9PSBDT01NSVRfTVNHX0NMRUFOVVBfU0NJU1NPUlMpIHsKKwkJCXd0X3N0YXR1c19hcHBlbmRfY3V0X2xpbmUoJm1zZyk7CisJCQlzdHJidWZfY29tbWVudGVkX2FkZGYoJm1zZywgIlxuIik7CisJCX0KKwkJc3RyYnVmX2NvbW1lbnRlZF9hZGRmKCZtc2csIF8obWVyZ2VfZWRpdG9yX2NvbW1lbnQpKTsKKwkJc3RyYnVmX2NvbW1lbnRlZF9hZGRmKCZtc2csIF8oY2xlYW51cF9tb2RlID09IENPTU1JVF9NU0dfQ0xFQU5VUF9TQ0lTU09SUyA/CisJCQlzY2lzc29yc19lZGl0b3JfY29tbWVudCA6CisJCQlub19zY2lzc29yc19lZGl0b3JfY29tbWVudCksIGNvbW1lbnRfbGluZV9jaGFyKTsKKwl9CisJaWYgKHNpZ25vZmYpCisJCWFwcGVuZF9zaWdub2ZmKCZtc2csIGlnbm9yZV9ub25fdHJhaWxlcihtc2cuYnVmLCBtc2cubGVuKSwgMCk7CisJd3JpdGVfbWVyZ2VfaGVhZHMocmVtb3RlaGVhZHMpOworCXdyaXRlX2ZpbGVfYnVmKGdpdF9wYXRoX21lcmdlX21zZyh0aGVfcmVwb3NpdG9yeSksIG1zZy5idWYsIG1zZy5sZW4pOworCWlmIChydW5fY29tbWl0X2hvb2soMCA8IG9wdGlvbl9lZGl0LCBnZXRfaW5kZXhfZmlsZSgpLCAicHJlcGFyZS1jb21taXQtbXNnIiwKKwkJCSAgICBnaXRfcGF0aF9tZXJnZV9tc2codGhlX3JlcG9zaXRvcnkpLCAibWVyZ2UiLCBOVUxMKSkKKwkJYWJvcnRfY29tbWl0KHJlbW90ZWhlYWRzLCBOVUxMKTsKKwlpZiAoMCA8IG9wdGlvbl9lZGl0KSB7CisJCWlmIChsYXVuY2hfZWRpdG9yKGdpdF9wYXRoX21lcmdlX21zZyh0aGVfcmVwb3NpdG9yeSksIE5VTEwsIE5VTEwpKQorCQkJYWJvcnRfY29tbWl0KHJlbW90ZWhlYWRzLCBOVUxMKTsKKwl9CisKKwlpZiAoIW5vX3ZlcmlmeSAmJiBydW5fY29tbWl0X2hvb2soMCA8IG9wdGlvbl9lZGl0LCBnZXRfaW5kZXhfZmlsZSgpLAorCQkJCQkgICJjb21taXQtbXNnIiwKKwkJCQkJICBnaXRfcGF0aF9tZXJnZV9tc2codGhlX3JlcG9zaXRvcnkpLCBOVUxMKSkKKwkJYWJvcnRfY29tbWl0KHJlbW90ZWhlYWRzLCBOVUxMKTsKKworCXJlYWRfbWVyZ2VfbXNnKCZtc2cpOworCWNsZWFudXBfbWVzc2FnZSgmbXNnLCBjbGVhbnVwX21vZGUsIDApOworCWlmICghbXNnLmxlbikKKwkJYWJvcnRfY29tbWl0KHJlbW90ZWhlYWRzLCBfKCJFbXB0eSBjb21taXQgbWVzc2FnZS4iKSk7CisJc3RyYnVmX3JlbGVhc2UoJm1lcmdlX21zZyk7CisJc3RyYnVmX2FkZGJ1ZigmbWVyZ2VfbXNnLCAmbXNnKTsKKwlzdHJidWZfcmVsZWFzZSgmbXNnKTsKK30KKworc3RhdGljIGludCBtZXJnZV90cml2aWFsKHN0cnVjdCBjb21taXQgKmhlYWQsIHN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlaGVhZHMpCit7CisJc3RydWN0IG9iamVjdF9pZCByZXN1bHRfdHJlZSwgcmVzdWx0X2NvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsICoqcHB0ciA9ICZwYXJlbnRzOworCisJaWYgKHJlZnJlc2hfYW5kX3dyaXRlX2NhY2hlKFJFRlJFU0hfUVVJRVQsIFNLSVBfSUZfVU5DSEFOR0VELCAwKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJVbmFibGUgdG8gd3JpdGUgaW5kZXguIikpOworCisJd3JpdGVfdHJlZV90cml2aWFsKCZyZXN1bHRfdHJlZSk7CisJcHJpbnRmKF8oIldvbmRlcmZ1bC5cbiIpKTsKKwlwcHRyID0gY29tbWl0X2xpc3RfYXBwZW5kKGhlYWQsIHBwdHIpOworCXBwdHIgPSBjb21taXRfbGlzdF9hcHBlbmQocmVtb3RlaGVhZHMtPml0ZW0sIHBwdHIpOworCXByZXBhcmVfdG9fY29tbWl0KHJlbW90ZWhlYWRzKTsKKwlpZiAoY29tbWl0X3RyZWUobWVyZ2VfbXNnLmJ1ZiwgbWVyZ2VfbXNnLmxlbiwgJnJlc3VsdF90cmVlLCBwYXJlbnRzLAorCQkJJnJlc3VsdF9jb21taXQsIE5VTEwsIHNpZ25fY29tbWl0KSkKKwkJZGllKF8oImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IikpOworCWZpbmlzaChoZWFkLCByZW1vdGVoZWFkcywgJnJlc3VsdF9jb21taXQsICJJbi1pbmRleCBtZXJnZSIpOworCXJlbW92ZV9tZXJnZV9icmFuY2hfc3RhdGUodGhlX3JlcG9zaXRvcnkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbmlzaF9hdXRvbWVyZ2Uoc3RydWN0IGNvbW1pdCAqaGVhZCwKKwkJCSAgICBpbnQgaGVhZF9zdWJzdW1lZCwKKwkJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1vbiwKKwkJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzLAorCQkJICAgIHN0cnVjdCBvYmplY3RfaWQgKnJlc3VsdF90cmVlLAorCQkJICAgIGNvbnN0IGNoYXIgKnd0X3N0cmF0ZWd5KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHJlc3VsdF9jb21taXQ7CisKKwl3cml0ZV90cmVlX3RyaXZpYWwocmVzdWx0X3RyZWUpOworCWZyZWVfY29tbWl0X2xpc3QoY29tbW9uKTsKKwlwYXJlbnRzID0gcmVtb3RlaGVhZHM7CisJaWYgKCFoZWFkX3N1YnN1bWVkIHx8IGZhc3RfZm9yd2FyZCA9PSBGRl9OTykKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGhlYWQsICZwYXJlbnRzKTsKKwlwcmVwYXJlX3RvX2NvbW1pdChyZW1vdGVoZWFkcyk7CisJaWYgKGNvbW1pdF90cmVlKG1lcmdlX21zZy5idWYsIG1lcmdlX21zZy5sZW4sIHJlc3VsdF90cmVlLCBwYXJlbnRzLAorCQkJJnJlc3VsdF9jb21taXQsIE5VTEwsIHNpZ25fY29tbWl0KSkKKwkJZGllKF8oImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IikpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJNZXJnZSBtYWRlIGJ5IHRoZSAnJXMnIHN0cmF0ZWd5LiIsIHd0X3N0cmF0ZWd5KTsKKwlmaW5pc2goaGVhZCwgcmVtb3RlaGVhZHMsICZyZXN1bHRfY29tbWl0LCBidWYuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZW1vdmVfbWVyZ2VfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWdnZXN0X2NvbmZsaWN0cyh2b2lkKQoreworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCUZJTEUgKmZwOworCXN0cnVjdCBzdHJidWYgbXNnYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlmaWxlbmFtZSA9IGdpdF9wYXRoX21lcmdlX21zZyh0aGVfcmVwb3NpdG9yeSk7CisJZnAgPSB4Zm9wZW4oZmlsZW5hbWUsICJhIik7CisKKwkvKgorCSAqIFdlIGNhbid0IHVzZSBjbGVhbnVwX21vZGUgYmVjYXVzZSBpZiB3ZSdyZSBub3QgdXNpbmcgdGhlIGVkaXRvciwKKwkgKiBnZXRfY2xlYW51cF9tb2RlIHdpbGwgcmV0dXJuIENPTU1JVF9NU0dfQ0xFQU5VUF9TUEFDRSBpbnN0ZWFkLCBldmVuCisJICogdGhvdWdoIHRoZSBtZXNzYWdlIGlzIG1lYW50IHRvIGJlIHByb2Nlc3NlZCBsYXRlciBieSBnaXQtY29tbWl0LgorCSAqIFRodXMsIHdlIHdpbGwgZ2V0IHRoZSBjbGVhbnVwIG1vZGUgd2hpY2ggaXMgcmV0dXJuZWQgd2hlbiB3ZSBfYXJlXworCSAqIHVzaW5nIGFuIGVkaXRvci4KKwkgKi8KKwlhcHBlbmRfY29uZmxpY3RzX2hpbnQoJnRoZV9pbmRleCwgJm1zZ2J1ZiwKKwkJCSAgICAgIGdldF9jbGVhbnVwX21vZGUoY2xlYW51cF9hcmcsIDEpKTsKKwlmcHV0cyhtc2didWYuYnVmLCBmcCk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7CisJZmNsb3NlKGZwKTsKKwlyZXBvX3JlcmVyZSh0aGVfcmVwb3NpdG9yeSwgYWxsb3dfcmVyZXJlX2F1dG8pOworCXByaW50ZihfKCJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyAiCisJCQkiZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIpKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBldmFsdWF0ZV9yZXN1bHQodm9pZCkKK3sKKwlpbnQgY250ID0gMDsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCisJLyogQ2hlY2sgaG93IG1hbnkgZmlsZXMgZGlmZmVyLiAqLworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsICIiKTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgTlVMTCk7CisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCB8PQorCQlESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSBjb3VudF9kaWZmX2ZpbGVzOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gJmNudDsKKwlydW5fZGlmZl9maWxlcygmcmV2LCAwKTsKKworCS8qCisJICogQ2hlY2sgaG93IG1hbnkgdW5tZXJnZWQgZW50cmllcyBhcmUKKwkgKiB0aGVyZS4KKwkgKi8KKwljbnQgKz0gY291bnRfdW5tZXJnZWRfZW50cmllcygpOworCisJcmV0dXJuIGNudDsKK30KKworLyoKKyAqIFByZXRlbmQgYXMgaWYgdGhlIHVzZXIgdG9sZCB1cyB0byBtZXJnZSB3aXRoIHRoZSByZW1vdGUtdHJhY2tpbmcKKyAqIGJyYW5jaCB3ZSBoYXZlIGZvciB0aGUgdXBzdHJlYW0gb2YgdGhlIGN1cnJlbnQgYnJhbmNoCisgKi8KK3N0YXRpYyBpbnQgc2V0dXBfd2l0aF91cHN0cmVhbShjb25zdCBjaGFyICoqKmFyZ3YpCit7CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKwlpbnQgaTsKKwljb25zdCBjaGFyICoqYXJnczsKKworCWlmICghYnJhbmNoKQorCQlkaWUoXygiTm8gY3VycmVudCBicmFuY2guIikpOworCWlmICghYnJhbmNoLT5yZW1vdGVfbmFtZSkKKwkJZGllKF8oIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIpKTsKKwlpZiAoIWJyYW5jaC0+bWVyZ2VfbnIpCisJCWRpZShfKCJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iKSk7CisKKwlhcmdzID0geGNhbGxvYyhzdF9hZGQoYnJhbmNoLT5tZXJnZV9uciwgMSksIHNpemVvZihjaGFyICopKTsKKwlmb3IgKGkgPSAwOyBpIDwgYnJhbmNoLT5tZXJnZV9ucjsgaSsrKSB7CisJCWlmICghYnJhbmNoLT5tZXJnZVtpXS0+ZHN0KQorCQkJZGllKF8oIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiKSwKKwkJCSAgICBicmFuY2gtPm1lcmdlW2ldLT5zcmMsIGJyYW5jaC0+cmVtb3RlX25hbWUpOworCQlhcmdzW2ldID0gYnJhbmNoLT5tZXJnZVtpXS0+ZHN0OworCX0KKwlhcmdzW2ldID0gTlVMTDsKKwkqYXJndiA9IGFyZ3M7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX21lcmdlX2hlYWRzKHN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlaGVhZHMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpqOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlmb3IgKGogPSByZW1vdGVoZWFkczsgajsgaiA9IGotPm5leHQpIHsKKwkJc3RydWN0IG9iamVjdF9pZCAqb2lkOworCQlzdHJ1Y3QgY29tbWl0ICpjID0gai0+aXRlbTsKKwkJc3RydWN0IG1lcmdlX3JlbW90ZV9kZXNjICpkZXNjOworCisJCWRlc2MgPSBtZXJnZV9yZW1vdGVfdXRpbChjKTsKKwkJaWYgKGRlc2MgJiYgZGVzYy0+b2JqKSB7CisJCQlvaWQgPSAmZGVzYy0+b2JqLT5vaWQ7CisJCX0gZWxzZSB7CisJCQlvaWQgPSAmYy0+b2JqZWN0Lm9pZDsKKwkJfQorCQlzdHJidWZfYWRkZigmYnVmLCAiJXNcbiIsIG9pZF90b19oZXgob2lkKSk7CisJfQorCXdyaXRlX2ZpbGVfYnVmKGdpdF9wYXRoX21lcmdlX2hlYWQodGhlX3JlcG9zaXRvcnkpLCBidWYuYnVmLCBidWYubGVuKTsKKworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlpZiAoZmFzdF9mb3J3YXJkID09IEZGX05PKQorCQlzdHJidWZfYWRkc3RyKCZidWYsICJuby1mZiIpOworCXdyaXRlX2ZpbGVfYnVmKGdpdF9wYXRoX21lcmdlX21vZGUodGhlX3JlcG9zaXRvcnkpLCBidWYuYnVmLCBidWYubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfbWVyZ2Vfc3RhdGUoc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkcykKK3sKKwl3cml0ZV9tZXJnZV9oZWFkcyhyZW1vdGVoZWFkcyk7CisJc3RyYnVmX2FkZGNoKCZtZXJnZV9tc2csICdcbicpOworCXdyaXRlX2ZpbGVfYnVmKGdpdF9wYXRoX21lcmdlX21zZyh0aGVfcmVwb3NpdG9yeSksIG1lcmdlX21zZy5idWYsCisJCSAgICAgICBtZXJnZV9tc2cubGVuKTsKK30KKworc3RhdGljIGludCBkZWZhdWx0X2VkaXRfb3B0aW9uKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgbmFtZVtdID0gIkdJVF9NRVJHRV9BVVRPRURJVCI7CisJY29uc3QgY2hhciAqZSA9IGdldGVudihuYW1lKTsKKwlzdHJ1Y3Qgc3RhdCBzdF9zdGRpbiwgc3Rfc3Rkb3V0OworCisJaWYgKGhhdmVfbWVzc2FnZSkKKwkJLyogYW4gZXhwbGljaXQgLW0gbXNnIHdpdGhvdXQgLS1bbm8tXWVkaXQgKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAoZSkgeworCQlpbnQgdiA9IGdpdF9wYXJzZV9tYXliZV9ib29sKGUpOworCQlpZiAodiA8IDApCisJCQlkaWUoXygiQmFkIHZhbHVlICclcycgaW4gZW52aXJvbm1lbnQgJyVzJyIpLCBlLCBuYW1lKTsKKwkJcmV0dXJuIHY7CisJfQorCisJLyogVXNlIGVkaXRvciBpZiBzdGRpbiBhbmQgc3Rkb3V0IGFyZSB0aGUgc2FtZSBhbmQgaXMgYSB0dHkgKi8KKwlyZXR1cm4gKCFmc3RhdCgwLCAmc3Rfc3RkaW4pICYmCisJCSFmc3RhdCgxLCAmc3Rfc3Rkb3V0KSAmJgorCQlpc2F0dHkoMCkgJiYgaXNhdHR5KDEpICYmCisJCXN0X3N0ZGluLnN0X2RldiA9PSBzdF9zdGRvdXQuc3RfZGV2ICYmCisJCXN0X3N0ZGluLnN0X2lubyA9PSBzdF9zdGRvdXQuc3RfaW5vICYmCisJCXN0X3N0ZGluLnN0X21vZGUgPT0gc3Rfc3Rkb3V0LnN0X21vZGUpOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpyZWR1Y2VfcGFyZW50cyhzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdCwKKwkJCQkJICBpbnQgKmhlYWRfc3Vic3VtZWQsCisJCQkJCSAgc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkcykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsICoqcmVtb3RlczsKKworCS8qCisJICogSXMgdGhlIGN1cnJlbnQgSEVBRCByZWFjaGFibGUgZnJvbSBhbm90aGVyIGNvbW1pdCBiZWluZworCSAqIG1lcmdlZD8gIElmIHNvIHdlIGRvIG5vdCB3YW50IHRvIHJlY29yZCBpdCBhcyBhIHBhcmVudCBvZgorCSAqIHRoZSByZXN1bHRpbmcgbWVyZ2UsIHVubGVzcyAtLW5vLWZmIGlzIGdpdmVuLiAgV2Ugd2lsbCBmbGlwCisJICogdGhpcyB2YXJpYWJsZSB0byAwIHdoZW4gd2UgZmluZCBIRUFEIGFtb25nIHRoZSBpbmRlcGVuZGVudAorCSAqIHRpcHMgYmVpbmcgbWVyZ2VkLgorCSAqLworCSpoZWFkX3N1YnN1bWVkID0gMTsKKworCS8qIEZpbmQgd2hhdCBwYXJlbnRzIHRvIHJlY29yZCBieSBjaGVja2luZyBpbmRlcGVuZGVudCBvbmVzLiAqLworCXBhcmVudHMgPSByZWR1Y2VfaGVhZHMocmVtb3RlaGVhZHMpOworCWZyZWVfY29tbWl0X2xpc3QocmVtb3RlaGVhZHMpOworCisJcmVtb3RlaGVhZHMgPSBOVUxMOworCXJlbW90ZXMgPSAmcmVtb3RlaGVhZHM7CisJd2hpbGUgKHBhcmVudHMpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcG9wX2NvbW1pdCgmcGFyZW50cyk7CisJCWlmIChjb21taXQgPT0gaGVhZF9jb21taXQpCisJCQkqaGVhZF9zdWJzdW1lZCA9IDA7CisJCWVsc2UKKwkJCXJlbW90ZXMgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgcmVtb3RlcyktPm5leHQ7CisJfQorCXJldHVybiByZW1vdGVoZWFkczsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9tZXJnZV9tZXNzYWdlKHN0cnVjdCBzdHJidWYgKm1lcmdlX25hbWVzLCBzdHJ1Y3Qgc3RyYnVmICptZXJnZV9tc2cpCit7CisJc3RydWN0IGZtdF9tZXJnZV9tc2dfb3B0cyBvcHRzOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuYWRkX3RpdGxlID0gIWhhdmVfbWVzc2FnZTsKKwlvcHRzLnNob3J0bG9nX2xlbiA9IHNob3J0bG9nX2xlbjsKKwlvcHRzLmNyZWRpdF9wZW9wbGUgPSAoMCA8IG9wdGlvbl9lZGl0KTsKKworCWZtdF9tZXJnZV9tc2cobWVyZ2VfbmFtZXMsIG1lcmdlX21zZywgJm9wdHMpOworCWlmIChtZXJnZV9tc2ctPmxlbikKKwkJc3RyYnVmX3NldGxlbihtZXJnZV9tc2csIG1lcmdlX21zZy0+bGVuIC0gMSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9mZXRjaF9oZWFkKHN0cnVjdCBjb21taXRfbGlzdCAqKnJlbW90ZXMsIHN0cnVjdCBzdHJidWYgKm1lcmdlX25hbWVzKQoreworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWludCBmZCwgcG9zLCBucG9zOworCXN0cnVjdCBzdHJidWYgZmV0Y2hfaGVhZF9maWxlID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgdW5zaWduZWQgaGV4c3ogPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKworCWlmICghbWVyZ2VfbmFtZXMpCisJCW1lcmdlX25hbWVzID0gJmZldGNoX2hlYWRfZmlsZTsKKworCWZpbGVuYW1lID0gZ2l0X3BhdGhfZmV0Y2hfaGVhZCh0aGVfcmVwb3NpdG9yeSk7CisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciKSwgZmlsZW5hbWUpOworCisJaWYgKHN0cmJ1Zl9yZWFkKG1lcmdlX25hbWVzLCBmZCwgMCkgPCAwKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlYWQgJyVzJyIpLCBmaWxlbmFtZSk7CisJaWYgKGNsb3NlKGZkKSA8IDApCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgY2xvc2UgJyVzJyIpLCBmaWxlbmFtZSk7CisKKwlmb3IgKHBvcyA9IDA7IHBvcyA8IG1lcmdlX25hbWVzLT5sZW47IHBvcyA9IG5wb3MpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWNoYXIgKnB0cjsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJCXB0ciA9IHN0cmNocihtZXJnZV9uYW1lcy0+YnVmICsgcG9zLCAnXG4nKTsKKwkJaWYgKHB0cikKKwkJCW5wb3MgPSBwdHIgLSBtZXJnZV9uYW1lcy0+YnVmICsgMTsKKwkJZWxzZQorCQkJbnBvcyA9IG1lcmdlX25hbWVzLT5sZW47CisKKwkJaWYgKG5wb3MgLSBwb3MgPCBoZXhzeiArIDIgfHwKKwkJICAgIGdldF9vaWRfaGV4KG1lcmdlX25hbWVzLT5idWYgKyBwb3MsICZvaWQpKQorCQkJY29tbWl0ID0gTlVMTDsgLyogYmFkICovCisJCWVsc2UgaWYgKG1lbWNtcChtZXJnZV9uYW1lcy0+YnVmICsgcG9zICsgaGV4c3osICJcdFx0IiwgMikpCisJCQljb250aW51ZTsgLyogbm90LWZvci1tZXJnZSAqLworCQllbHNlIHsKKwkJCWNoYXIgc2F2ZWQgPSBtZXJnZV9uYW1lcy0+YnVmW3BvcyArIGhleHN6XTsKKwkJCW1lcmdlX25hbWVzLT5idWZbcG9zICsgaGV4c3pdID0gJ1wwJzsKKwkJCWNvbW1pdCA9IGdldF9tZXJnZV9wYXJlbnQobWVyZ2VfbmFtZXMtPmJ1ZiArIHBvcyk7CisJCQltZXJnZV9uYW1lcy0+YnVmW3BvcyArIGhleHN6XSA9IHNhdmVkOworCQl9CisJCWlmICghY29tbWl0KSB7CisJCQlpZiAocHRyKQorCQkJCSpwdHIgPSAnXDAnOworCQkJZGllKF8oIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIGluICVzOiAlcyIpLAorCQkJICAgIGZpbGVuYW1lLCBtZXJnZV9uYW1lcy0+YnVmICsgcG9zKTsKKwkJfQorCQlyZW1vdGVzID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHJlbW90ZXMpLT5uZXh0OworCX0KKworCWlmIChtZXJnZV9uYW1lcyA9PSAmZmV0Y2hfaGVhZF9maWxlKQorCQlzdHJidWZfcmVsZWFzZSgmZmV0Y2hfaGVhZF9maWxlKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqY29sbGVjdF9wYXJlbnRzKHN0cnVjdCBjb21taXQgKmhlYWRfY29tbWl0LAorCQkJCQkgICBpbnQgKmhlYWRfc3Vic3VtZWQsCisJCQkJCSAgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCQkJICAgc3RydWN0IHN0cmJ1ZiAqbWVyZ2VfbXNnKQoreworCWludCBpOworCXN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlaGVhZHMgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqKnJlbW90ZXMgPSAmcmVtb3RlaGVhZHM7CisJc3RydWN0IHN0cmJ1ZiBtZXJnZV9uYW1lcyA9IFNUUkJVRl9JTklULCAqYXV0b2dlbiA9IE5VTEw7CisKKwlpZiAobWVyZ2VfbXNnICYmICghaGF2ZV9tZXNzYWdlIHx8IHNob3J0bG9nX2xlbikpCisJCWF1dG9nZW4gPSAmbWVyZ2VfbmFtZXM7CisKKwlpZiAoaGVhZF9jb21taXQpCisJCXJlbW90ZXMgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGhlYWRfY29tbWl0LCByZW1vdGVzKS0+bmV4dDsKKworCWlmIChhcmdjID09IDEgJiYgIXN0cmNtcChhcmd2WzBdLCAiRkVUQ0hfSEVBRCIpKSB7CisJCWhhbmRsZV9mZXRjaF9oZWFkKHJlbW90ZXMsIGF1dG9nZW4pOworCQlyZW1vdGVoZWFkcyA9IHJlZHVjZV9wYXJlbnRzKGhlYWRfY29tbWl0LCBoZWFkX3N1YnN1bWVkLCByZW1vdGVoZWFkcyk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gZ2V0X21lcmdlX3BhcmVudChhcmd2W2ldKTsKKwkJCWlmICghY29tbWl0KQorCQkJCWhlbHBfdW5rbm93bl9yZWYoYXJndltpXSwgIm1lcmdlIiwKKwkJCQkJCSBfKCJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIpKTsKKwkJCXJlbW90ZXMgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgcmVtb3RlcyktPm5leHQ7CisJCX0KKwkJcmVtb3RlaGVhZHMgPSByZWR1Y2VfcGFyZW50cyhoZWFkX2NvbW1pdCwgaGVhZF9zdWJzdW1lZCwgcmVtb3RlaGVhZHMpOworCQlpZiAoYXV0b2dlbikgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCQkJZm9yIChwID0gcmVtb3RlaGVhZHM7IHA7IHAgPSBwLT5uZXh0KQorCQkJCW1lcmdlX25hbWUobWVyZ2VfcmVtb3RlX3V0aWwocC0+aXRlbSktPm5hbWUsIGF1dG9nZW4pOworCQl9CisJfQorCisJaWYgKGF1dG9nZW4pIHsKKwkJcHJlcGFyZV9tZXJnZV9tZXNzYWdlKGF1dG9nZW4sIG1lcmdlX21zZyk7CisJCXN0cmJ1Zl9yZWxlYXNlKGF1dG9nZW4pOworCX0KKworCXJldHVybiByZW1vdGVoZWFkczsKK30KKworc3RhdGljIGludCBtZXJnaW5nX2FfdGhyb3dhd2F5X3RhZyhzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJY2hhciAqdGFnX3JlZjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgaXNfdGhyb3dhd2F5X3RhZyA9IDA7CisKKwkvKiBBcmUgd2UgbWVyZ2luZyBhIHRhZz8gKi8KKwlpZiAoIW1lcmdlX3JlbW90ZV91dGlsKGNvbW1pdCkgfHwKKwkgICAgIW1lcmdlX3JlbW90ZV91dGlsKGNvbW1pdCktPm9iaiB8fAorCSAgICBtZXJnZV9yZW1vdGVfdXRpbChjb21taXQpLT5vYmotPnR5cGUgIT0gT0JKX1RBRykKKwkJcmV0dXJuIGlzX3Rocm93YXdheV90YWc7CisKKwkvKgorCSAqIE5vdyB3ZSBrbm93IHdlIGFyZSBtZXJnaW5nIGEgdGFnIG9iamVjdC4gIEFyZSB3ZSBkb3duc3RyZWFtCisJICogYW5kIGZvbGxvd2luZyB0aGUgdGFncyBmcm9tIHVwc3RyZWFtPyAgSWYgc28sIHdlIG11c3QgaGF2ZQorCSAqIHRoZSB0YWcgb2JqZWN0IHBvaW50ZWQgYXQgYnkgInJlZnMvdGFncy8kVCIgd2hlcmUgJFQgaXMgdGhlCisJICogdGFnbmFtZSByZWNvcmRlZCBpbiB0aGUgdGFnIG9iamVjdC4gIFdlIHdhbnQgdG8gYWxsb3cgc3VjaAorCSAqIGEgImp1c3QgdG8gY2F0Y2ggdXAiIG1lcmdlIHRvIGZhc3QtZm9yd2FyZC4KKwkgKgorCSAqIE90aGVyd2lzZSwgd2UgYXJlIHBsYXlpbmcgYW4gaW50ZWdyYXRvcidzIHJvbGUsIG1ha2luZyBhCisJICogbWVyZ2Ugd2l0aCBhIHRocm93LWF3YXkgdGFnIGZyb20gYSBjb250cmlidXRvciB3aXRoCisJICogc29tZXRoaW5nIGxpa2UgImdpdCBwdWxsICRjb250cmlidXRvciAkc2lnbmVkX3RhZyIuCisJICogV2Ugd2FudCB0byBmb3JiaWQgc3VjaCBhIG1lcmdlIGZyb20gZmFzdC1mb3J3YXJkaW5nCisJICogYnkgZGVmYXVsdDsgb3RoZXJ3aXNlIHdlIHdvdWxkIG5vdCBrZWVwIHRoZSBzaWduYXR1cmUKKwkgKiBhbnl3aGVyZS4KKwkgKi8KKwl0YWdfcmVmID0geHN0cmZtdCgicmVmcy90YWdzLyVzIiwKKwkJCSAgKChzdHJ1Y3QgdGFnICopbWVyZ2VfcmVtb3RlX3V0aWwoY29tbWl0KS0+b2JqKS0+dGFnKTsKKwlpZiAoIXJlYWRfcmVmKHRhZ19yZWYsICZvaWQpICYmCisJICAgIG9pZGVxKCZvaWQsICZtZXJnZV9yZW1vdGVfdXRpbChjb21taXQpLT5vYmotPm9pZCkpCisJCWlzX3Rocm93YXdheV90YWcgPSAwOworCWVsc2UKKwkJaXNfdGhyb3dhd2F5X3RhZyA9IDE7CisJZnJlZSh0YWdfcmVmKTsKKwlyZXR1cm4gaXNfdGhyb3dhd2F5X3RhZzsKK30KKworaW50IGNtZF9tZXJnZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHJlc3VsdF90cmVlLCBzdGFzaCwgaGVhZF9vaWQ7CisJc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaSwgcmV0ID0gMCwgaGVhZF9zdWJzdW1lZDsKKwlpbnQgYmVzdF9jbnQgPSAtMSwgbWVyZ2Vfd2FzX29rID0gMCwgYXV0b21lcmdlX3dhc19vayA9IDA7CisJc3RydWN0IGNvbW1pdF9saXN0ICpjb21tb24gPSBOVUxMOworCWNvbnN0IGNoYXIgKmJlc3Rfc3RyYXRlZ3kgPSBOVUxMLCAqd3Rfc3RyYXRlZ3kgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlaGVhZHMsICpwOworCXZvaWQgKmJyYW5jaF90b19mcmVlOworCWludCBvcmlnX2FyZ2MgPSBhcmdjOworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9tZXJnZV91c2FnZSwgYnVpbHRpbl9tZXJnZV9vcHRpb25zKTsKKworCS8qCisJICogQ2hlY2sgaWYgd2UgYXJlIF9ub3RfIG9uIGEgZGV0YWNoZWQgSEVBRCwgaS5lLiBpZiB0aGVyZSBpcyBhCisJICogY3VycmVudCBicmFuY2guCisJICovCisJYnJhbmNoID0gYnJhbmNoX3RvX2ZyZWUgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIDAsICZoZWFkX29pZCwgTlVMTCk7CisJaWYgKGJyYW5jaCkKKwkJc2tpcF9wcmVmaXgoYnJhbmNoLCAicmVmcy9oZWFkcy8iLCAmYnJhbmNoKTsKKworCWluaXRfZGlmZl91aV9kZWZhdWx0cygpOworCWdpdF9jb25maWcoZ2l0X21lcmdlX2NvbmZpZywgTlVMTCk7CisKKwlpZiAoIWJyYW5jaCB8fCBpc19udWxsX29pZCgmaGVhZF9vaWQpKQorCQloZWFkX2NvbW1pdCA9IE5VTEw7CisJZWxzZQorCQloZWFkX2NvbW1pdCA9IGxvb2t1cF9jb21taXRfb3JfZGllKCZoZWFkX29pZCwgIkhFQUQiKTsKKworCWlmIChicmFuY2hfbWVyZ2VvcHRpb25zKQorCQlwYXJzZV9icmFuY2hfbWVyZ2Vfb3B0aW9ucyhicmFuY2hfbWVyZ2VvcHRpb25zKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fbWVyZ2Vfb3B0aW9ucywKKwkJCWJ1aWx0aW5fbWVyZ2VfdXNhZ2UsIDApOworCWlmIChzaG9ydGxvZ19sZW4gPCAwKQorCQlzaG9ydGxvZ19sZW4gPSAobWVyZ2VfbG9nX2NvbmZpZyA+IDApID8gbWVyZ2VfbG9nX2NvbmZpZyA6IDA7CisKKwlpZiAodmVyYm9zaXR5IDwgMCAmJiBzaG93X3Byb2dyZXNzID09IC0xKQorCQlzaG93X3Byb2dyZXNzID0gMDsKKworCWlmIChhYm9ydF9jdXJyZW50X21lcmdlKSB7CisJCWludCBuYXJnYyA9IDI7CisJCWNvbnN0IGNoYXIgKm5hcmd2W10gPSB7InJlc2V0IiwgIi0tbWVyZ2UiLCBOVUxMfTsKKwkJc3RydWN0IHN0cmJ1ZiBzdGFzaF9vaWQgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAob3JpZ19hcmdjICE9IDIpCisJCQl1c2FnZV9tc2dfb3B0KF8oIi0tYWJvcnQgZXhwZWN0cyBubyBhcmd1bWVudHMiKSwKKwkJCSAgICAgIGJ1aWx0aW5fbWVyZ2VfdXNhZ2UsIGJ1aWx0aW5fbWVyZ2Vfb3B0aW9ucyk7CisKKwkJaWYgKCFmaWxlX2V4aXN0cyhnaXRfcGF0aF9tZXJnZV9oZWFkKHRoZV9yZXBvc2l0b3J5KSkpCisJCQlkaWUoXygiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIikpOworCisJCWlmIChyZWFkX29uZWxpbmVyKCZzdGFzaF9vaWQsIGdpdF9wYXRoX21lcmdlX2F1dG9zdGFzaCh0aGVfcmVwb3NpdG9yeSksCisJCSAgICBSRUFEX09ORUxJTkVSX1NLSVBfSUZfRU1QVFkpKQorCQkJdW5saW5rKGdpdF9wYXRoX21lcmdlX2F1dG9zdGFzaCh0aGVfcmVwb3NpdG9yeSkpOworCisJCS8qIEludm9rZSAnZ2l0IHJlc2V0IC0tbWVyZ2UnICovCisJCXJldCA9IGNtZF9yZXNldChuYXJnYywgbmFyZ3YsIHByZWZpeCk7CisKKwkJaWYgKHN0YXNoX29pZC5sZW4pCisJCQlhcHBseV9hdXRvc3Rhc2hfb2lkKHN0YXNoX29pZC5idWYpOworCisJCXN0cmJ1Zl9yZWxlYXNlKCZzdGFzaF9vaWQpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHF1aXRfY3VycmVudF9tZXJnZSkgeworCQlpZiAob3JpZ19hcmdjICE9IDIpCisJCQl1c2FnZV9tc2dfb3B0KF8oIi0tcXVpdCBleHBlY3RzIG5vIGFyZ3VtZW50cyIpLAorCQkJCSAgICAgIGJ1aWx0aW5fbWVyZ2VfdXNhZ2UsCisJCQkJICAgICAgYnVpbHRpbl9tZXJnZV9vcHRpb25zKTsKKworCQlyZW1vdmVfbWVyZ2VfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5KTsKKwkJZ290byBkb25lOworCX0KKworCWlmIChjb250aW51ZV9jdXJyZW50X21lcmdlKSB7CisJCWludCBuYXJnYyA9IDE7CisJCWNvbnN0IGNoYXIgKm5hcmd2W10gPSB7ImNvbW1pdCIsIE5VTEx9OworCisJCWlmIChvcmlnX2FyZ2MgIT0gMikKKwkJCXVzYWdlX21zZ19vcHQoXygiLS1jb250aW51ZSBleHBlY3RzIG5vIGFyZ3VtZW50cyIpLAorCQkJICAgICAgYnVpbHRpbl9tZXJnZV91c2FnZSwgYnVpbHRpbl9tZXJnZV9vcHRpb25zKTsKKworCQlpZiAoIWZpbGVfZXhpc3RzKGdpdF9wYXRoX21lcmdlX2hlYWQodGhlX3JlcG9zaXRvcnkpKSkKKwkJCWRpZShfKCJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iKSk7CisKKwkJLyogSW52b2tlICdnaXQgY29tbWl0JyAqLworCQlyZXQgPSBjbWRfY29tbWl0KG5hcmdjLCBuYXJndiwgcHJlZml4KTsKKwkJZ290byBkb25lOworCX0KKworCWlmIChyZWFkX2NhY2hlX3VubWVyZ2VkKCkpCisJCWRpZV9yZXNvbHZlX2NvbmZsaWN0KCJtZXJnZSIpOworCisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX21lcmdlX2hlYWQodGhlX3JlcG9zaXRvcnkpKSkgeworCQkvKgorCQkgKiBUaGVyZSBpcyBubyB1bm1lcmdlZCBlbnRyeSwgZG9uJ3QgYWR2aXNlICdnaXQKKwkJICogYWRkL3JtIDxmaWxlPicsIGp1c3QgJ2dpdCBjb21taXQnLgorCQkgKi8KKwkJaWYgKGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0KQorCQkJZGllKF8oIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorCQkJCSAgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIpKTsKKwkJZWxzZQorCQkJZGllKF8oIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIpKTsKKwl9CisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQodGhlX3JlcG9zaXRvcnkpKSkgeworCQlpZiAoYWR2aWNlX3Jlc29sdmVfY29uZmxpY3QpCisJCQlkaWUoXygiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisJCQkgICAgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIpKTsKKwkJZWxzZQorCQkJZGllKF8oIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIpKTsKKwl9CisJcmVzb2x2ZV91bmRvX2NsZWFyKCk7CisKKwlpZiAob3B0aW9uX2VkaXQgPCAwKQorCQlvcHRpb25fZWRpdCA9IGRlZmF1bHRfZWRpdF9vcHRpb24oKTsKKworCWNsZWFudXBfbW9kZSA9IGdldF9jbGVhbnVwX21vZGUoY2xlYW51cF9hcmcsIDAgPCBvcHRpb25fZWRpdCk7CisKKwlpZiAodmVyYm9zaXR5IDwgMCkKKwkJc2hvd19kaWZmc3RhdCA9IDA7CisKKwlpZiAoc3F1YXNoKSB7CisJCWlmIChmYXN0X2ZvcndhcmQgPT0gRkZfTk8pCisJCQlkaWUoXygiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iKSk7CisJCWlmIChvcHRpb25fY29tbWl0ID4gMCkKKwkJCWRpZShfKCJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLWNvbW1pdC4iKSk7CisJCS8qCisJCSAqIHNxdWFzaCBjYW4gbm93IHNpbGVudGx5IGRpc2FibGUgb3B0aW9uX2NvbW1pdCAtIHRoaXMgaXMgbm90CisJCSAqIGEgcHJvYmxlbSBhcyBpdCBpcyBvbmx5IG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQsIG5vdCBhIHVzZXIKKwkJICogc3VwcGxpZWQgb3B0aW9uLgorCQkgKi8KKwkJb3B0aW9uX2NvbW1pdCA9IDA7CisJfQorCisJaWYgKG9wdGlvbl9jb21taXQgPCAwKQorCQlvcHRpb25fY29tbWl0ID0gMTsKKworCWlmICghYXJnYykgeworCQlpZiAoZGVmYXVsdF90b191cHN0cmVhbSkKKwkJCWFyZ2MgPSBzZXR1cF93aXRoX3Vwc3RyZWFtKCZhcmd2KTsKKwkJZWxzZQorCQkJZGllKF8oIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIikpOworCX0gZWxzZSBpZiAoYXJnYyA9PSAxICYmICFzdHJjbXAoYXJndlswXSwgIi0iKSkgeworCQlhcmd2WzBdID0gIkB7LTF9IjsKKwl9CisKKwlpZiAoIWFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX21lcmdlX3VzYWdlLAorCQkJYnVpbHRpbl9tZXJnZV9vcHRpb25zKTsKKworCWlmICghaGVhZF9jb21taXQpIHsKKwkJLyoKKwkJICogSWYgdGhlIG1lcmdlZCBoZWFkIGlzIGEgdmFsaWQgb25lIHRoZXJlIGlzIG5vIHJlYXNvbgorCQkgKiB0byBmb3JiaWQgImdpdCBtZXJnZSIgaW50byBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybi4KKwkJICogV2UgZG8gdGhlIHNhbWUgZm9yICJnaXQgcHVsbCIuCisJCSAqLworCQlzdHJ1Y3Qgb2JqZWN0X2lkICpyZW1vdGVfaGVhZF9vaWQ7CisJCWlmIChzcXVhc2gpCisJCQlkaWUoXygiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiKSk7CisJCWlmIChmYXN0X2ZvcndhcmQgPT0gRkZfTk8pCisJCQlkaWUoXygiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvICIKKwkJCSAgICAiYW4gZW1wdHkgaGVhZCIpKTsKKwkJcmVtb3RlaGVhZHMgPSBjb2xsZWN0X3BhcmVudHMoaGVhZF9jb21taXQsICZoZWFkX3N1YnN1bWVkLAorCQkJCQkgICAgICBhcmdjLCBhcmd2LCBOVUxMKTsKKwkJaWYgKCFyZW1vdGVoZWFkcykKKwkJCWRpZShfKCIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIiksIGFyZ3ZbMF0pOworCQlpZiAocmVtb3RlaGVhZHMtPm5leHQpCisJCQlkaWUoXygiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIpKTsKKworCQlpZiAodmVyaWZ5X3NpZ25hdHVyZXMpCisJCQl2ZXJpZnlfbWVyZ2Vfc2lnbmF0dXJlKHJlbW90ZWhlYWRzLT5pdGVtLCB2ZXJib3NpdHksCisJCQkJCSAgICAgICBjaGVja190cnVzdF9sZXZlbCk7CisKKwkJcmVtb3RlX2hlYWRfb2lkID0gJnJlbW90ZWhlYWRzLT5pdGVtLT5vYmplY3Qub2lkOworCQlyZWFkX2VtcHR5KHJlbW90ZV9oZWFkX29pZCwgMCk7CisJCXVwZGF0ZV9yZWYoImluaXRpYWwgcHVsbCIsICJIRUFEIiwgcmVtb3RlX2hlYWRfb2lkLCBOVUxMLCAwLAorCQkJICAgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSAqIEFsbCB0aGUgcmVzdCBhcmUgdGhlIGNvbW1pdHMgYmVpbmcgbWVyZ2VkOyBwcmVwYXJlCisJICogdGhlIHN0YW5kYXJkIG1lcmdlIHN1bW1hcnkgbWVzc2FnZSB0byBiZSBhcHBlbmRlZAorCSAqIHRvIHRoZSBnaXZlbiBtZXNzYWdlLgorCSAqLworCXJlbW90ZWhlYWRzID0gY29sbGVjdF9wYXJlbnRzKGhlYWRfY29tbWl0LCAmaGVhZF9zdWJzdW1lZCwKKwkJCQkgICAgICBhcmdjLCBhcmd2LCAmbWVyZ2VfbXNnKTsKKworCWlmICghaGVhZF9jb21taXQgfHwgIWFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX21lcmdlX3VzYWdlLAorCQkJYnVpbHRpbl9tZXJnZV9vcHRpb25zKTsKKworCWlmICh2ZXJpZnlfc2lnbmF0dXJlcykgeworCQlmb3IgKHAgPSByZW1vdGVoZWFkczsgcDsgcCA9IHAtPm5leHQpIHsKKwkJCXZlcmlmeV9tZXJnZV9zaWduYXR1cmUocC0+aXRlbSwgdmVyYm9zaXR5LAorCQkJCQkgICAgICAgY2hlY2tfdHJ1c3RfbGV2ZWwpOworCQl9CisJfQorCisJc3RyYnVmX2FkZHN0cigmYnVmLCAibWVyZ2UiKTsKKwlmb3IgKHAgPSByZW1vdGVoZWFkczsgcDsgcCA9IHAtPm5leHQpCisJCXN0cmJ1Zl9hZGRmKCZidWYsICIgJXMiLCBtZXJnZV9yZW1vdGVfdXRpbChwLT5pdGVtKS0+bmFtZSk7CisJc2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIsIGJ1Zi5idWYsIDApOworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKworCWZvciAocCA9IHJlbW90ZWhlYWRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwLT5pdGVtOworCQlzdHJidWZfYWRkZigmYnVmLCAiR0lUSEVBRF8lcyIsCisJCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCXNldGVudihidWYuYnVmLCBtZXJnZV9yZW1vdGVfdXRpbChjb21taXQpLT5uYW1lLCAxKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlpZiAoZmFzdF9mb3J3YXJkICE9IEZGX09OTFkgJiYgbWVyZ2luZ19hX3Rocm93YXdheV90YWcoY29tbWl0KSkKKwkJCWZhc3RfZm9yd2FyZCA9IEZGX05POworCX0KKworCWlmICghdXNlX3N0cmF0ZWdpZXMpIHsKKwkJaWYgKCFyZW1vdGVoZWFkcykKKwkJCTsgLyogYWxyZWFkeSB1cC10by1kYXRlICovCisJCWVsc2UgaWYgKCFyZW1vdGVoZWFkcy0+bmV4dCkKKwkJCWFkZF9zdHJhdGVnaWVzKHB1bGxfdHdvaGVhZCwgREVGQVVMVF9UV09IRUFEKTsKKwkJZWxzZQorCQkJYWRkX3N0cmF0ZWdpZXMocHVsbF9vY3RvcHVzLCBERUZBVUxUX09DVE9QVVMpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB1c2Vfc3RyYXRlZ2llc19ucjsgaSsrKSB7CisJCWlmICh1c2Vfc3RyYXRlZ2llc1tpXS0+YXR0ciAmIE5PX0ZBU1RfRk9SV0FSRCkKKwkJCWZhc3RfZm9yd2FyZCA9IEZGX05POworCQlpZiAodXNlX3N0cmF0ZWdpZXNbaV0tPmF0dHIgJiBOT19UUklWSUFMKQorCQkJYWxsb3dfdHJpdmlhbCA9IDA7CisJfQorCisJaWYgKCFyZW1vdGVoZWFkcykKKwkJOyAvKiBhbHJlYWR5IHVwLXRvLWRhdGUgKi8KKwllbHNlIGlmICghcmVtb3RlaGVhZHMtPm5leHQpCisJCWNvbW1vbiA9IGdldF9tZXJnZV9iYXNlcyhoZWFkX2NvbW1pdCwgcmVtb3RlaGVhZHMtPml0ZW0pOworCWVsc2UgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSByZW1vdGVoZWFkczsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGhlYWRfY29tbWl0LCAmbGlzdCk7CisJCWNvbW1vbiA9IGdldF9vY3RvcHVzX21lcmdlX2Jhc2VzKGxpc3QpOworCQlmcmVlKGxpc3QpOworCX0KKworCXVwZGF0ZV9yZWYoInVwZGF0aW5nIE9SSUdfSEVBRCIsICJPUklHX0hFQUQiLAorCQkgICAmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsIE5VTEwsIDAsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCisJaWYgKHJlbW90ZWhlYWRzICYmICFjb21tb24pIHsKKwkJLyogTm8gY29tbW9uIGFuY2VzdG9ycyBmb3VuZC4gKi8KKwkJaWYgKCFhbGxvd191bnJlbGF0ZWRfaGlzdG9yaWVzKQorCQkJZGllKF8oInJlZnVzaW5nIHRvIG1lcmdlIHVucmVsYXRlZCBoaXN0b3JpZXMiKSk7CisJCS8qIG90aGVyd2lzZSwgd2UgbmVlZCBhIHJlYWwgbWVyZ2UuICovCisJfSBlbHNlIGlmICghcmVtb3RlaGVhZHMgfHwKKwkJICghcmVtb3RlaGVhZHMtPm5leHQgJiYgIWNvbW1vbi0+bmV4dCAmJgorCQkgIGNvbW1vbi0+aXRlbSA9PSByZW1vdGVoZWFkcy0+aXRlbSkpIHsKKwkJLyoKKwkJICogSWYgaGVhZCBjYW4gcmVhY2ggYWxsIHRoZSBtZXJnZSB0aGVuIHdlIGFyZSB1cCB0byBkYXRlLgorCQkgKiBidXQgZmlyc3QgdGhlIG1vc3QgY29tbW9uIGNhc2Ugb2YgbWVyZ2luZyBvbmUgcmVtb3RlLgorCQkgKi8KKwkJZmluaXNoX3VwX3RvX2RhdGUoXygiQWxyZWFkeSB1cCB0byBkYXRlLiIpKTsKKwkJZ290byBkb25lOworCX0gZWxzZSBpZiAoZmFzdF9mb3J3YXJkICE9IEZGX05PICYmICFyZW1vdGVoZWFkcy0+bmV4dCAmJgorCQkJIWNvbW1vbi0+bmV4dCAmJgorCQkJb2lkZXEoJmNvbW1vbi0+aXRlbS0+b2JqZWN0Lm9pZCwgJmhlYWRfY29tbWl0LT5vYmplY3Qub2lkKSkgeworCQkvKiBBZ2FpbiB0aGUgbW9zdCBjb21tb24gY2FzZSBvZiBtZXJnaW5nIG9uZSByZW1vdGUuICovCisJCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCQlpZiAodmVyYm9zaXR5ID49IDApIHsKKwkJCXByaW50ZihfKCJVcGRhdGluZyAlcy4uJXNcbiIpLAorCQkJICAgICAgIGZpbmRfdW5pcXVlX2FiYnJldigmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsCisJCQkJCQkgIERFRkFVTFRfQUJCUkVWKSwKKwkJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoJnJlbW90ZWhlYWRzLT5pdGVtLT5vYmplY3Qub2lkLAorCQkJCQkJICBERUZBVUxUX0FCQlJFVikpOworCQl9CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZywgIkZhc3QtZm9yd2FyZCIpOworCQlpZiAoaGF2ZV9tZXNzYWdlKQorCQkJc3RyYnVmX2FkZHN0cigmbXNnLAorCQkJCSIgKG5vIGNvbW1pdCBjcmVhdGVkOyAtbSBvcHRpb24gaWdub3JlZCkiKTsKKwkJY29tbWl0ID0gcmVtb3RlaGVhZHMtPml0ZW07CisJCWlmICghY29tbWl0KSB7CisJCQlyZXQgPSAxOworCQkJZ290byBkb25lOworCQl9CisKKwkJaWYgKGF1dG9zdGFzaCkKKwkJCWNyZWF0ZV9hdXRvc3Rhc2godGhlX3JlcG9zaXRvcnksCisJCQkJCSBnaXRfcGF0aF9tZXJnZV9hdXRvc3Rhc2godGhlX3JlcG9zaXRvcnkpLAorCQkJCQkgIm1lcmdlIik7CisJCWlmIChjaGVja291dF9mYXN0X2ZvcndhcmQodGhlX3JlcG9zaXRvcnksCisJCQkJCSAgJmhlYWRfY29tbWl0LT5vYmplY3Qub2lkLAorCQkJCQkgICZjb21taXQtPm9iamVjdC5vaWQsCisJCQkJCSAgb3ZlcndyaXRlX2lnbm9yZSkpIHsKKwkJCXJldCA9IDE7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlmaW5pc2goaGVhZF9jb21taXQsIHJlbW90ZWhlYWRzLCAmY29tbWl0LT5vYmplY3Qub2lkLCBtc2cuYnVmKTsKKwkJcmVtb3ZlX21lcmdlX2JyYW5jaF9zdGF0ZSh0aGVfcmVwb3NpdG9yeSk7CisJCWdvdG8gZG9uZTsKKwl9IGVsc2UgaWYgKCFyZW1vdGVoZWFkcy0+bmV4dCAmJiBjb21tb24tPm5leHQpCisJCTsKKwkJLyoKKwkJICogV2UgYXJlIG5vdCBkb2luZyBvY3RvcHVzIGFuZCBub3QgZmFzdC1mb3J3YXJkLiAgTmVlZAorCQkgKiBhIHJlYWwgbWVyZ2UuCisJCSAqLworCWVsc2UgaWYgKCFyZW1vdGVoZWFkcy0+bmV4dCAmJiAhY29tbW9uLT5uZXh0ICYmIG9wdGlvbl9jb21taXQpIHsKKwkJLyoKKwkJICogV2UgYXJlIG5vdCBkb2luZyBvY3RvcHVzLCBub3QgZmFzdC1mb3J3YXJkLCBhbmQgaGF2ZQorCQkgKiBvbmx5IG9uZSBjb21tb24uCisJCSAqLworCQlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOworCQlpZiAoYWxsb3dfdHJpdmlhbCAmJiBmYXN0X2ZvcndhcmQgIT0gRkZfT05MWSkgeworCQkJLyogU2VlIGlmIGl0IGlzIHJlYWxseSB0cml2aWFsLiAqLworCQkJZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX1NUUklDVCk7CisJCQlwcmludGYoXygiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iKSk7CisJCQlpZiAoIXJlYWRfdHJlZV90cml2aWFsKCZjb21tb24tPml0ZW0tPm9iamVjdC5vaWQsCisJCQkJCSAgICAgICAmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsCisJCQkJCSAgICAgICAmcmVtb3RlaGVhZHMtPml0ZW0tPm9iamVjdC5vaWQpKSB7CisJCQkJcmV0ID0gbWVyZ2VfdHJpdmlhbChoZWFkX2NvbW1pdCwgcmVtb3RlaGVhZHMpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCXByaW50ZihfKCJOb3BlLlxuIikpOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQW4gb2N0b3B1cy4gIElmIHdlIGNhbiByZWFjaCBhbGwgdGhlIHJlbW90ZSB3ZSBhcmUgdXAKKwkJICogdG8gZGF0ZS4KKwkJICovCisJCWludCB1cF90b19kYXRlID0gMTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpqOworCisJCWZvciAoaiA9IHJlbW90ZWhlYWRzOyBqOyBqID0gai0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpjb21tb25fb25lOworCisJCQkvKgorCQkJICogSGVyZSB3ZSAqaGF2ZSogdG8gY2FsY3VsYXRlIHRoZSBpbmRpdmlkdWFsCisJCQkgKiBtZXJnZV9iYXNlcyBhZ2Fpbiwgb3RoZXJ3aXNlICJnaXQgbWVyZ2UgSEVBRF4KKwkJCSAqIEhFQUReXiIgd291bGQgYmUgbWlzc2VkLgorCQkJICovCisJCQljb21tb25fb25lID0gZ2V0X21lcmdlX2Jhc2VzKGhlYWRfY29tbWl0LCBqLT5pdGVtKTsKKwkJCWlmICghb2lkZXEoJmNvbW1vbl9vbmUtPml0ZW0tPm9iamVjdC5vaWQsICZqLT5pdGVtLT5vYmplY3Qub2lkKSkgeworCQkJCXVwX3RvX2RhdGUgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICh1cF90b19kYXRlKSB7CisJCQlmaW5pc2hfdXBfdG9fZGF0ZShfKCJBbHJlYWR5IHVwIHRvIGRhdGUuIFllZWFoISIpKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCWlmIChmYXN0X2ZvcndhcmQgPT0gRkZfT05MWSkKKwkJZGllKF8oIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIpKTsKKworCWlmIChhdXRvc3Rhc2gpCisJCWNyZWF0ZV9hdXRvc3Rhc2godGhlX3JlcG9zaXRvcnksCisJCQkJIGdpdF9wYXRoX21lcmdlX2F1dG9zdGFzaCh0aGVfcmVwb3NpdG9yeSksCisJCQkJICJtZXJnZSIpOworCisJLyogV2UgYXJlIGdvaW5nIHRvIG1ha2UgYSBuZXcgY29tbWl0LiAqLworCWdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9TVFJJQ1QpOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCB3ZSBuZWVkIGEgcmVhbCBtZXJnZS4gIE5vIG1hdHRlciB3aGF0IHN0cmF0ZWd5CisJICogd2UgdXNlLCBpdCB3b3VsZCBvcGVyYXRlIG9uIHRoZSBpbmRleCwgcG9zc2libHkgYWZmZWN0aW5nIHRoZQorCSAqIHdvcmtpbmcgdHJlZSwgYW5kIHdoZW4gcmVzb2x2ZWQgY2xlYW5seSwgaGF2ZSB0aGUgZGVzaXJlZAorCSAqIHRyZWUgaW4gdGhlIGluZGV4IC0tIHRoaXMgbWVhbnMgdGhhdCB0aGUgaW5kZXggbXVzdCBiZSBpbgorCSAqIHN5bmMgd2l0aCB0aGUgaGVhZCBjb21taXQuICBUaGUgc3RyYXRlZ2llcyBhcmUgcmVzcG9uc2libGUKKwkgKiB0byBlbnN1cmUgdGhpcy4KKwkgKi8KKwlpZiAodXNlX3N0cmF0ZWdpZXNfbnIgPT0gMSB8fAorCSAgICAvKgorCSAgICAgKiBTdGFzaCBhd2F5IHRoZSBsb2NhbCBjaGFuZ2VzIHNvIHRoYXQgd2UgY2FuIHRyeSBtb3JlIHRoYW4gb25lLgorCSAgICAgKi8KKwkgICAgc2F2ZV9zdGF0ZSgmc3Rhc2gpKQorCQlvaWRjbHIoJnN0YXNoKTsKKworCWZvciAoaSA9IDA7ICFtZXJnZV93YXNfb2sgJiYgaSA8IHVzZV9zdHJhdGVnaWVzX25yOyBpKyspIHsKKwkJaW50IHJldCwgY250OworCQlpZiAoaSkgeworCQkJcHJpbnRmKF8oIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIikpOworCQkJcmVzdG9yZV9zdGF0ZSgmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsICZzdGFzaCk7CisJCX0KKwkJaWYgKHVzZV9zdHJhdGVnaWVzX25yICE9IDEpCisJCQlwcmludGYoXygiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iKSwKKwkJCQl1c2Vfc3RyYXRlZ2llc1tpXS0+bmFtZSk7CisJCS8qCisJCSAqIFJlbWVtYmVyIHdoaWNoIHN0cmF0ZWd5IGxlZnQgdGhlIHN0YXRlIGluIHRoZSB3b3JraW5nCisJCSAqIHRyZWUuCisJCSAqLworCQl3dF9zdHJhdGVneSA9IHVzZV9zdHJhdGVnaWVzW2ldLT5uYW1lOworCisJCXJldCA9IHRyeV9tZXJnZV9zdHJhdGVneSh1c2Vfc3RyYXRlZ2llc1tpXS0+bmFtZSwKKwkJCQkJIGNvbW1vbiwgcmVtb3RlaGVhZHMsCisJCQkJCSBoZWFkX2NvbW1pdCk7CisJCS8qCisJCSAqIFRoZSBiYWNrZW5kIGV4aXRzIHdpdGggMSB3aGVuIGNvbmZsaWN0cyBhcmUKKwkJICogbGVmdCB0byBiZSByZXNvbHZlZCwgd2l0aCAyIHdoZW4gaXQgZG9lcyBub3QKKwkJICogaGFuZGxlIHRoZSBnaXZlbiBtZXJnZSBhdCBhbGwuCisJCSAqLworCQlpZiAocmV0IDwgMikgeworCQkJaWYgKCFyZXQpIHsKKwkJCQlpZiAob3B0aW9uX2NvbW1pdCkgeworCQkJCQkvKiBBdXRvbWVyZ2Ugc3VjY2VlZGVkLiAqLworCQkJCQlhdXRvbWVyZ2Vfd2FzX29rID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW1lcmdlX3dhc19vayA9IDE7CisJCQl9CisJCQljbnQgPSBldmFsdWF0ZV9yZXN1bHQoKTsKKwkJCWlmIChiZXN0X2NudCA8PSAwIHx8IGNudCA8PSBiZXN0X2NudCkgeworCQkJCWJlc3Rfc3RyYXRlZ3kgPSB1c2Vfc3RyYXRlZ2llc1tpXS0+bmFtZTsKKwkJCQliZXN0X2NudCA9IGNudDsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogSWYgd2UgaGF2ZSBhIHJlc3VsdGluZyB0cmVlLCB0aGF0IG1lYW5zIHRoZSBzdHJhdGVneSBtb2R1bGUKKwkgKiBhdXRvIHJlc29sdmVkIHRoZSBtZXJnZSBjbGVhbmx5LgorCSAqLworCWlmIChhdXRvbWVyZ2Vfd2FzX29rKSB7CisJCXJldCA9IGZpbmlzaF9hdXRvbWVyZ2UoaGVhZF9jb21taXQsIGhlYWRfc3Vic3VtZWQsCisJCQkJICAgICAgIGNvbW1vbiwgcmVtb3RlaGVhZHMsCisJCQkJICAgICAgICZyZXN1bHRfdHJlZSwgd3Rfc3RyYXRlZ3kpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkgKiBQaWNrIHRoZSByZXN1bHQgZnJvbSB0aGUgYmVzdCBzdHJhdGVneSBhbmQgaGF2ZSB0aGUgdXNlciBmaXgKKwkgKiBpdCB1cC4KKwkgKi8KKwlpZiAoIWJlc3Rfc3RyYXRlZ3kpIHsKKwkJcmVzdG9yZV9zdGF0ZSgmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsICZzdGFzaCk7CisJCWlmICh1c2Vfc3RyYXRlZ2llc19uciA+IDEpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIpKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsIF8oIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIiksCisJCQkJdXNlX3N0cmF0ZWdpZXNbMF0tPm5hbWUpOworCQlyZXQgPSAyOworCQlnb3RvIGRvbmU7CisJfSBlbHNlIGlmIChiZXN0X3N0cmF0ZWd5ID09IHd0X3N0cmF0ZWd5KQorCQk7IC8qIFdlIGFscmVhZHkgaGF2ZSBpdHMgcmVzdWx0IGluIHRoZSB3b3JraW5nIHRyZWUuICovCisJZWxzZSB7CisJCXByaW50ZihfKCJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIpKTsKKwkJcmVzdG9yZV9zdGF0ZSgmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsICZzdGFzaCk7CisJCXByaW50ZihfKCJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIpLAorCQkJYmVzdF9zdHJhdGVneSk7CisJCXRyeV9tZXJnZV9zdHJhdGVneShiZXN0X3N0cmF0ZWd5LCBjb21tb24sIHJlbW90ZWhlYWRzLAorCQkJCSAgIGhlYWRfY29tbWl0KTsKKwl9CisKKwlpZiAoc3F1YXNoKSB7CisJCWZpbmlzaChoZWFkX2NvbW1pdCwgcmVtb3RlaGVhZHMsIE5VTEwsIE5VTEwpOworCisJCWdpdF90ZXN0X3dyaXRlX2NvbW1pdF9ncmFwaF9vcl9kaWUoKTsKKwl9IGVsc2UKKwkJd3JpdGVfbWVyZ2Vfc3RhdGUocmVtb3RlaGVhZHMpOworCisJaWYgKG1lcmdlX3dhc19vaykKKwkJZnByaW50ZihzdGRlcnIsIF8oIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7ICIKKwkJCSJzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIikpOworCWVsc2UKKwkJcmV0ID0gc3VnZ2VzdF9jb25mbGljdHMoKTsKKworZG9uZToKKwlmcmVlKGJyYW5jaF90b19mcmVlKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9ta3RhZy5jIGIvYnVpbHRpbi9ta3RhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ODJkM2EKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21rdGFnLmMKQEAgLTAsMCArMSwxNzkgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAicmVwbGFjZS1vYmplY3QuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKworLyoKKyAqIEEgc2lnbmF0dXJlIGZpbGUgaGFzIGEgdmVyeSBzaW1wbGUgZml4ZWQgZm9ybWF0OiBmb3VyIGxpbmVzCisgKiBvZiAib2JqZWN0IDxzaGExPiIgKyAidHlwZSA8dHlwZW5hbWU+IiArICJ0YWcgPHRhZ25hbWU+IiArCisgKiAidGFnZ2VyIDxjb21taXR0ZXI+IiwgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lLCBhIGZyZWUtZm9ybSB0YWcKKyAqIG1lc3NhZ2UgYW5kIGEgc2lnbmF0dXJlIGJsb2NrIHRoYXQgZ2l0IGl0c2VsZiBkb2Vzbid0IGNhcmUgYWJvdXQsCisgKiBidXQgdGhhdCBjYW4gYmUgdmVyaWZpZWQgd2l0aCBncGcgb3Igc2ltaWxhci4KKyAqCisgKiBUaGUgZmlyc3QgZm91ciBsaW5lcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBhdCBsZWFzdCA4MyBieXRlczoKKyAqICJvYmplY3QgPHNoYTE+XG4iIGlzIDQ4IGJ5dGVzLCAidHlwZSB0YWdcbiIgYXQgOSBieXRlcyBpcyB0aGUKKyAqIHNob3J0ZXN0IHBvc3NpYmxlIHR5cGUtbGluZSwgInRhZyAuXG4iIGF0IDYgYnl0ZXMgaXMgdGhlIHNob3J0ZXN0CisgKiBzaW5nbGUtY2hhcmFjdGVyLXRhZyBsaW5lLCBhbmQgInRhZ2dlciAuIDw+IDAgKzAwMDBcbiIgYXQgMjAgYnl0ZXMgaXMKKyAqIHRoZSBzaG9ydGVzdCBwb3NzaWJsZSB0YWdnZXItbGluZS4KKyAqLworCisvKgorICogV2UgcmVmdXNlIHRvIHRhZyBzb21ldGhpbmcgd2UgY2FuJ3QgdmVyaWZ5LiBKdXN0IGJlY2F1c2UuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKmV4cGVjdGVkX3R5cGUpCit7CisJaW50IHJldCA9IC0xOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdm9pZCAqYnVmZmVyID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCAmc2l6ZSk7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqcmVwbCA9IGxvb2t1cF9yZXBsYWNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKworCWlmIChidWZmZXIpIHsKKwkJaWYgKHR5cGUgPT0gdHlwZV9mcm9tX3N0cmluZyhleHBlY3RlZF90eXBlKSkgeworCQkJcmV0ID0gY2hlY2tfb2JqZWN0X3NpZ25hdHVyZSh0aGVfcmVwb3NpdG9yeSwgcmVwbCwKKwkJCQkJCSAgICAgYnVmZmVyLCBzaXplLAorCQkJCQkJICAgICBleHBlY3RlZF90eXBlKTsKKwkJfQorCQlmcmVlKGJ1ZmZlcik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X3RhZyhjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgdHlwZWxlbjsKKwljaGFyIHR5cGVbMjBdOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNvbnN0IGNoYXIgKm9iamVjdCwgKnR5cGVfbGluZSwgKnRhZ19saW5lLCAqdGFnZ2VyX2xpbmUsICpsYiwgKnJiLCAqcDsKKwlzaXplX3QgbGVuOworCisJaWYgKHNpemUgPCA4NCkKKwkJcmV0dXJuIGVycm9yKCJ3YW5uYSBmb29sIG1lID8geW91IG9idmlvdXNseSBnb3QgdGhlIHNpemUgd3JvbmcgISIpOworCisJYnVmZmVyW3NpemVdID0gMDsKKworCS8qIFZlcmlmeSBvYmplY3QgbGluZSAqLworCW9iamVjdCA9IGJ1ZmZlcjsKKwlpZiAobWVtY21wKG9iamVjdCwgIm9iamVjdCAiLCA3KSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJWQ6IGRvZXMgbm90IHN0YXJ0IHdpdGggXCJvYmplY3QgXCIiLCAwKTsKKworCWlmIChwYXJzZV9vaWRfaGV4KG9iamVjdCArIDcsICZvaWQsICZwKSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJWQ6IGNvdWxkIG5vdCBnZXQgU0hBMSBoYXNoIiwgNyk7CisKKwkvKiBWZXJpZnkgdHlwZSBsaW5lICovCisJdHlwZV9saW5lID0gcCArIDE7CisJaWYgKG1lbWNtcCh0eXBlX2xpbmUgLSAxLCAiXG50eXBlICIsIDYpKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlZDogY291bGQgbm90IGZpbmQgXCJcXG50eXBlIFwiIiwgNDcpOworCisJLyogVmVyaWZ5IHRhZy1saW5lICovCisJdGFnX2xpbmUgPSBzdHJjaHIodHlwZV9saW5lLCAnXG4nKTsKKwlpZiAoIXRhZ19saW5lKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlIlBSSXVNQVgiOiBjb3VsZCBub3QgZmluZCBuZXh0IFwiXFxuXCIiLAorCQkJCSh1aW50bWF4X3QpICh0eXBlX2xpbmUgLSBidWZmZXIpKTsKKwl0YWdfbGluZSsrOworCWlmIChtZW1jbXAodGFnX2xpbmUsICJ0YWcgIiwgNCkgfHwgdGFnX2xpbmVbNF0gPT0gJ1xuJykKKwkJcmV0dXJuIGVycm9yKCJjaGFyJSJQUkl1TUFYIjogbm8gXCJ0YWcgXCIgZm91bmQiLAorCQkJCSh1aW50bWF4X3QpICh0YWdfbGluZSAtIGJ1ZmZlcikpOworCisJLyogR2V0IHRoZSBhY3R1YWwgdHlwZSAqLworCXR5cGVsZW4gPSB0YWdfbGluZSAtIHR5cGVfbGluZSAtIHN0cmxlbigidHlwZSBcbiIpOworCWlmICh0eXBlbGVuID49IHNpemVvZih0eXBlKSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJSJQUkl1TUFYIjogdHlwZSB0b28gbG9uZyIsCisJCQkJKHVpbnRtYXhfdCkgKHR5cGVfbGluZSs1IC0gYnVmZmVyKSk7CisKKwltZW1jcHkodHlwZSwgdHlwZV9saW5lKzUsIHR5cGVsZW4pOworCXR5cGVbdHlwZWxlbl0gPSAwOworCisJLyogVmVyaWZ5IHRoYXQgdGhlIG9iamVjdCBtYXRjaGVzICovCisJaWYgKHZlcmlmeV9vYmplY3QoJm9pZCwgdHlwZSkpCisJCXJldHVybiBlcnJvcigiY2hhciVkOiBjb3VsZCBub3QgdmVyaWZ5IG9iamVjdCAlcyIsIDcsIG9pZF90b19oZXgoJm9pZCkpOworCisJLyogVmVyaWZ5IHRoZSB0YWctbmFtZTogd2UgZG9uJ3QgYWxsb3cgY29udHJvbCBjaGFyYWN0ZXJzIG9yIHNwYWNlcyBpbiBpdCAqLworCXRhZ19saW5lICs9IDQ7CisJZm9yICg7OykgeworCQl1bnNpZ25lZCBjaGFyIGMgPSAqdGFnX2xpbmUrKzsKKwkJaWYgKGMgPT0gJ1xuJykKKwkJCWJyZWFrOworCQlpZiAoYyA+ICcgJykKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gZXJyb3IoImNoYXIlIlBSSXVNQVgiOiBjb3VsZCBub3QgdmVyaWZ5IHRhZyBuYW1lIiwKKwkJCQkodWludG1heF90KSAodGFnX2xpbmUgLSBidWZmZXIpKTsKKwl9CisKKwkvKiBWZXJpZnkgdGhlIHRhZ2dlciBsaW5lICovCisJdGFnZ2VyX2xpbmUgPSB0YWdfbGluZTsKKworCWlmIChtZW1jbXAodGFnZ2VyX2xpbmUsICJ0YWdnZXIgIiwgNykpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IGNvdWxkIG5vdCBmaW5kIFwidGFnZ2VyIFwiIiwKKwkJCSh1aW50bWF4X3QpICh0YWdnZXJfbGluZSAtIGJ1ZmZlcikpOworCisJLyoKKwkgKiBDaGVjayBmb3IgY29ycmVjdCBmb3JtIGZvciBuYW1lIGFuZCBlbWFpbAorCSAqIGkuZS4gIiA8IiBmb2xsb3dlZCBieSAiPiAiIG9uIF90aGlzXyBsaW5lCisJICogTm8gYW5nbGUgYnJhY2tldHMgd2l0aGluIHRoZSBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgZmllbGRzLgorCSAqIE5vIHNwYWNlcyB3aXRoaW4gdGhlIGVtYWlsIGFkZHJlc3MgZmllbGQuCisJICovCisJdGFnZ2VyX2xpbmUgKz0gNzsKKwlpZiAoIShsYiA9IHN0cnN0cih0YWdnZXJfbGluZSwgIiA8IikpIHx8ICEocmIgPSBzdHJzdHIobGIrMiwgIj4gIikpIHx8CisJCXN0cnBicmsodGFnZ2VyX2xpbmUsICI8PlxuIikgIT0gbGIrMSB8fAorCQlzdHJwYnJrKGxiKzIsICI+PFxuICIpICE9IHJiKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlIlBSSXVNQVgiOiBtYWxmb3JtZWQgdGFnZ2VyIGZpZWxkIiwKKwkJCSh1aW50bWF4X3QpICh0YWdnZXJfbGluZSAtIGJ1ZmZlcikpOworCisJLyogQ2hlY2sgZm9yIGF1dGhvciBuYW1lLCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBzcGFjZSBpcyBhY2NlcHRhYmxlICovCisJaWYgKGxiID09IHRhZ2dlcl9saW5lKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlIlBSSXVNQVgiOiBtaXNzaW5nIHRhZ2dlciBuYW1lIiwKKwkJCSh1aW50bWF4X3QpICh0YWdnZXJfbGluZSAtIGJ1ZmZlcikpOworCisJLyogdGltZXN0YW1wLCAxIG9yIG1vcmUgZGlnaXRzIGZvbGxvd2VkIGJ5IHNwYWNlICovCisJdGFnZ2VyX2xpbmUgPSByYiArIDI7CisJaWYgKCEobGVuID0gc3Ryc3BuKHRhZ2dlcl9saW5lLCAiMDEyMzQ1Njc4OSIpKSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJSJQUkl1TUFYIjogbWlzc2luZyB0YWcgdGltZXN0YW1wIiwKKwkJCSh1aW50bWF4X3QpICh0YWdnZXJfbGluZSAtIGJ1ZmZlcikpOworCXRhZ2dlcl9saW5lICs9IGxlbjsKKwlpZiAoKnRhZ2dlcl9saW5lICE9ICcgJykKKwkJcmV0dXJuIGVycm9yKCJjaGFyJSJQUkl1TUFYIjogbWFsZm9ybWVkIHRhZyB0aW1lc3RhbXAiLAorCQkJKHVpbnRtYXhfdCkgKHRhZ2dlcl9saW5lIC0gYnVmZmVyKSk7CisJdGFnZ2VyX2xpbmUrKzsKKworCS8qIHRpbWV6b25lLCA1IGRpZ2l0cyBbKy1daGhtbSwgbWF4LiAxNDAwICovCisJaWYgKCEoKHRhZ2dlcl9saW5lWzBdID09ICcrJyB8fCB0YWdnZXJfbGluZVswXSA9PSAnLScpICYmCisJICAgICAgc3Ryc3BuKHRhZ2dlcl9saW5lKzEsICIwMTIzNDU2Nzg5IikgPT0gNCAmJgorCSAgICAgIHRhZ2dlcl9saW5lWzVdID09ICdcbicgJiYgYXRvaSh0YWdnZXJfbGluZSsxKSA8PSAxNDAwKSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJSJQUkl1TUFYIjogbWFsZm9ybWVkIHRhZyB0aW1lem9uZSIsCisJCQkodWludG1heF90KSAodGFnZ2VyX2xpbmUgLSBidWZmZXIpKTsKKwl0YWdnZXJfbGluZSArPSA2OworCisJLyogVmVyaWZ5IHRoZSBibGFuayBsaW5lIHNlcGFyYXRpbmcgdGhlIGhlYWRlciBmcm9tIHRoZSBib2R5ICovCisJaWYgKCp0YWdnZXJfbGluZSAhPSAnXG4nKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlIlBSSXVNQVgiOiB0cmFpbGluZyBnYXJiYWdlIGluIHRhZyBoZWFkZXIiLAorCQkJKHVpbnRtYXhfdCkgKHRhZ2dlcl9saW5lIC0gYnVmZmVyKSk7CisKKwkvKiBUaGUgYWN0dWFsIHN0dWZmIGFmdGVyd2FyZHMgd2UgZG9uJ3QgY2FyZSBhYm91dC4uICovCisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfbWt0YWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHJlc3VsdDsKKworCWlmIChhcmdjICE9IDEpCisJCXVzYWdlKCJnaXQgbWt0YWciKTsKKworCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCA0MDk2KSA8IDApIHsKKwkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIik7CisJfQorCisJLyogVmVyaWZ5IGl0IGZvciBzb21lIGJhc2ljIHNhbml0eTogaXQgbmVlZHMgdG8gc3RhcnQgd2l0aAorCSAgICJvYmplY3QgPHNoYTE+XG50eXBlXG50YWdnZXIgIiAqLworCWlmICh2ZXJpZnlfdGFnKGJ1Zi5idWYsIGJ1Zi5sZW4pIDwgMCkKKwkJZGllKCJpbnZhbGlkIHRhZyBzaWduYXR1cmUgZmlsZSIpOworCisJaWYgKHdyaXRlX29iamVjdF9maWxlKGJ1Zi5idWYsIGJ1Zi5sZW4sIHRhZ190eXBlLCAmcmVzdWx0KSA8IDApCisJCWRpZSgidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIik7CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KCZyZXN1bHQpKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWt0cmVlLmMgYi9idWlsdGluL21rdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MTk5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21rdHJlZS5jCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogR0lUIC0gdGhlIHN0dXBpZCBjb250ZW50IHRyYWNrZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIEp1bmlvIEMgSGFtYW5vLCAyMDA2LCAyMDA5CisgKi8KKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorCitzdGF0aWMgc3RydWN0IHRyZWVlbnQgeworCXVuc2lnbmVkIG1vZGU7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IGxlbjsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9ICoqZW50cmllczsKK3N0YXRpYyBpbnQgYWxsb2MsIHVzZWQ7CisKK3N0YXRpYyB2b2lkIGFwcGVuZF90b190cmVlKHVuc2lnbmVkIG1vZGUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgdHJlZWVudCAqZW50OworCXNpemVfdCBsZW4gPSBzdHJsZW4ocGF0aCk7CisJaWYgKHN0cmNocihwYXRoLCAnLycpKQorCQlkaWUoInBhdGggJXMgY29udGFpbnMgc2xhc2giLCBwYXRoKTsKKworCUZMRVhfQUxMT0NfTUVNKGVudCwgbmFtZSwgcGF0aCwgbGVuKTsKKwllbnQtPm1vZGUgPSBtb2RlOworCWVudC0+bGVuID0gbGVuOworCW9pZGNweSgmZW50LT5vaWQsIG9pZCk7CisKKwlBTExPQ19HUk9XKGVudHJpZXMsIHVzZWQgKyAxLCBhbGxvYyk7CisJZW50cmllc1t1c2VkKytdID0gZW50OworfQorCitzdGF0aWMgaW50IGVudF9jb21wYXJlKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwlzdHJ1Y3QgdHJlZWVudCAqYSA9ICooc3RydWN0IHRyZWVlbnQgKiopYV87CisJc3RydWN0IHRyZWVlbnQgKmIgPSAqKHN0cnVjdCB0cmVlZW50ICoqKWJfOworCXJldHVybiBiYXNlX25hbWVfY29tcGFyZShhLT5uYW1lLCBhLT5sZW4sIGEtPm1vZGUsCisJCQkJIGItPm5hbWUsIGItPmxlbiwgYi0+bW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3RyZWUoc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBzdHJidWYgYnVmOworCXNpemVfdCBzaXplOworCWludCBpOworCisJUVNPUlQoZW50cmllcywgdXNlZCwgZW50X2NvbXBhcmUpOworCWZvciAoc2l6ZSA9IGkgPSAwOyBpIDwgdXNlZDsgaSsrKQorCQlzaXplICs9IDMyICsgZW50cmllc1tpXS0+bGVuOworCisJc3RyYnVmX2luaXQoJmJ1Ziwgc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IHVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgdHJlZWVudCAqZW50ID0gZW50cmllc1tpXTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVvICVzJWMiLCBlbnQtPm1vZGUsIGVudC0+bmFtZSwgJ1wwJyk7CisJCXN0cmJ1Zl9hZGQoJmJ1ZiwgZW50LT5vaWQuaGFzaCwgdGhlX2hhc2hfYWxnby0+cmF3c3opOworCX0KKworCXdyaXRlX29iamVjdF9maWxlKGJ1Zi5idWYsIGJ1Zi5sZW4sIHRyZWVfdHlwZSwgb2lkKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKm1rdHJlZV91c2FnZVtdID0geworCU5fKCJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIiksCisJTlVMTAorfTsKKworc3RhdGljIHZvaWQgbWt0cmVlX2xpbmUoY2hhciAqYnVmLCBpbnQgbnVsX3Rlcm1fbGluZSwgaW50IGFsbG93X21pc3NpbmcpCit7CisJY2hhciAqcHRyLCAqbnRyOworCWNvbnN0IGNoYXIgKnA7CisJdW5zaWduZWQgbW9kZTsKKwllbnVtIG9iamVjdF90eXBlIG1vZGVfdHlwZTsgLyogb2JqZWN0IHR5cGUgZGVyaXZlZCBmcm9tIG1vZGUgKi8KKwllbnVtIG9iamVjdF90eXBlIG9ial90eXBlOyAvKiBvYmplY3QgdHlwZSBkZXJpdmVkIGZyb20gc2hhICovCisJY2hhciAqcGF0aCwgKnRvX2ZyZWUgPSBOVUxMOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJcHRyID0gYnVmOworCS8qCisJICogUmVhZCBub24tcmVjdXJzaXZlIGxzLXRyZWUgb3V0cHV0IGZvcm1hdDoKKwkgKiAgICAgbW9kZSBTUCB0eXBlIFNQIHNoYTEgVEFCIG5hbWUKKwkgKi8KKwltb2RlID0gc3RydG91bChwdHIsICZudHIsIDgpOworCWlmIChwdHIgPT0gbnRyIHx8ICFudHIgfHwgKm50ciAhPSAnICcpCisJCWRpZSgiaW5wdXQgZm9ybWF0IGVycm9yOiAlcyIsIGJ1Zik7CisJcHRyID0gbnRyICsgMTsgLyogdHlwZSAqLworCW50ciA9IHN0cmNocihwdHIsICcgJyk7CisJaWYgKCFudHIgfHwgcGFyc2Vfb2lkX2hleChudHIgKyAxLCAmb2lkLCAmcCkgfHwKKwkgICAgKnAgIT0gJ1x0JykKKwkJZGllKCJpbnB1dCBmb3JtYXQgZXJyb3I6ICVzIiwgYnVmKTsKKworCS8qIEl0IGlzIHBlcmZlY3RseSBub3JtYWwgaWYgd2UgZG8gbm90IGhhdmUgYSBjb21taXQgZnJvbSBhIHN1Ym1vZHVsZSAqLworCWlmIChTX0lTR0lUTElOSyhtb2RlKSkKKwkJYWxsb3dfbWlzc2luZyA9IDE7CisKKworCSpudHIrKyA9IDA7IC8qIG5vdyBhdCB0aGUgYmVnaW5uaW5nIG9mIFNIQTEgKi8KKworCXBhdGggPSAoY2hhciAqKXAgKyAxOyAgLyogYXQgdGhlIGJlZ2lubmluZyBvZiBuYW1lICovCisJaWYgKCFudWxfdGVybV9saW5lICYmIHBhdGhbMF0gPT0gJyInKSB7CisJCXN0cnVjdCBzdHJidWYgcF91cSA9IFNUUkJVRl9JTklUOworCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZwX3VxLCBwYXRoLCBOVUxMKSkKKwkJCWRpZSgiaW52YWxpZCBxdW90aW5nIik7CisJCXBhdGggPSB0b19mcmVlID0gc3RyYnVmX2RldGFjaCgmcF91cSwgTlVMTCk7CisJfQorCisJLyoKKwkgKiBPYmplY3QgdHlwZSBpcyByZWR1bmRhbnRseSBkZXJpdmFibGUgdGhyZWUgd2F5cy4KKwkgKiBUaGVzZSBzaG91bGQgYWxsIGFncmVlLgorCSAqLworCW1vZGVfdHlwZSA9IG9iamVjdF90eXBlKG1vZGUpOworCWlmIChtb2RlX3R5cGUgIT0gdHlwZV9mcm9tX3N0cmluZyhwdHIpKSB7CisJCWRpZSgiZW50cnkgJyVzJyBvYmplY3QgdHlwZSAoJXMpIGRvZXNuJ3QgbWF0Y2ggbW9kZSB0eXBlICglcykiLAorCQkJcGF0aCwgcHRyLCB0eXBlX25hbWUobW9kZV90eXBlKSk7CisJfQorCisJLyogQ2hlY2sgdGhlIHR5cGUgb2Ygb2JqZWN0IGlkZW50aWZpZWQgYnkgc2hhMSAqLworCW9ial90eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCAmb2lkLCBOVUxMKTsKKwlpZiAob2JqX3R5cGUgPCAwKSB7CisJCWlmIChhbGxvd19taXNzaW5nKSB7CisJCQk7IC8qIG5vIHByb2JsZW0gLSBtaXNzaW5nIG9iamVjdHMgYXJlIHByZXN1bWVkIHRvIGJlIG9mIHRoZSByaWdodCB0eXBlICovCisJCX0gZWxzZSB7CisJCQlkaWUoImVudHJ5ICclcycgb2JqZWN0ICVzIGlzIHVuYXZhaWxhYmxlIiwgcGF0aCwgb2lkX3RvX2hleCgmb2lkKSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAob2JqX3R5cGUgIT0gbW9kZV90eXBlKSB7CisJCQkvKgorCQkJICogVGhlIG9iamVjdCBleGlzdHMgYnV0IGlzIG9mIHRoZSB3cm9uZyB0eXBlLgorCQkJICogVGhpcyBpcyBhIHByb2JsZW0gcmVnYXJkbGVzcyBvZiBhbGxvd19taXNzaW5nCisJCQkgKiBiZWNhdXNlIHRoZSBuZXcgdHJlZSBlbnRyeSB3aWxsIG5ldmVyIGJlIGNvcnJlY3QuCisJCQkgKi8KKwkJCWRpZSgiZW50cnkgJyVzJyBvYmplY3QgJXMgaXMgYSAlcyBidXQgc3BlY2lmaWVkIHR5cGUgd2FzICglcykiLAorCQkJCXBhdGgsIG9pZF90b19oZXgoJm9pZCksIHR5cGVfbmFtZShvYmpfdHlwZSksIHR5cGVfbmFtZShtb2RlX3R5cGUpKTsKKwkJfQorCX0KKworCWFwcGVuZF90b190cmVlKG1vZGUsICZvaWQsIHBhdGgpOworCWZyZWUodG9fZnJlZSk7Cit9CisKK2ludCBjbWRfbWt0cmVlKGludCBhYywgY29uc3QgY2hhciAqKmF2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBudWxfdGVybV9saW5lID0gMDsKKwlpbnQgYWxsb3dfbWlzc2luZyA9IDA7CisJaW50IGlzX2JhdGNoX21vZGUgPSAwOworCWludCBnb3RfZW9mID0gMDsKKwlzdHJidWZfZ2V0bGluZV9mbiBnZXRsaW5lX2ZuOworCisJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25bXSA9IHsKKwkJT1BUX0JPT0woJ3onLCBOVUxMLCAmbnVsX3Rlcm1fbGluZSwgTl8oImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIikpLAorCQlPUFRfU0VUX0lOVCggMCAsICJtaXNzaW5nIiwgJmFsbG93X21pc3NpbmcsIE5fKCJhbGxvdyBtaXNzaW5nIG9iamVjdHMiKSwgMSksCisJCU9QVF9TRVRfSU5UKCAwICwgImJhdGNoIiwgJmlzX2JhdGNoX21vZGUsIE5fKCJhbGxvdyBjcmVhdGlvbiBvZiBtb3JlIHRoYW4gb25lIHRyZWUiKSwgMSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhYyA9IHBhcnNlX29wdGlvbnMoYWMsIGF2LCBwcmVmaXgsIG9wdGlvbiwgbWt0cmVlX3VzYWdlLCAwKTsKKwlnZXRsaW5lX2ZuID0gbnVsX3Rlcm1fbGluZSA/IHN0cmJ1Zl9nZXRsaW5lX251bCA6IHN0cmJ1Zl9nZXRsaW5lX2xmOworCisJd2hpbGUgKCFnb3RfZW9mKSB7CisJCXdoaWxlICgxKSB7CisJCQlpZiAoZ2V0bGluZV9mbigmc2IsIHN0ZGluKSA9PSBFT0YpIHsKKwkJCQlnb3RfZW9mID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzYi5idWZbMF0gPT0gJ1wwJykgeworCQkJCS8qIGVtcHR5IGxpbmVzIGRlbm90ZSB0cmVlIGJvdW5kYXJpZXMgaW4gYmF0Y2ggbW9kZSAqLworCQkJCWlmIChpc19iYXRjaF9tb2RlKQorCQkJCQlicmVhazsKKwkJCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogKGJsYW5rIGxpbmUgb25seSB2YWxpZCBpbiBiYXRjaCBtb2RlKSIpOworCQkJfQorCQkJbWt0cmVlX2xpbmUoc2IuYnVmLCBudWxfdGVybV9saW5lLCBhbGxvd19taXNzaW5nKTsKKwkJfQorCQlpZiAoaXNfYmF0Y2hfbW9kZSAmJiBnb3RfZW9mICYmIHVzZWQgPCAxKSB7CisJCQkvKgorCQkJICogRXhlY3V0aW9uIGdldHMgaGVyZSBpZiB0aGUgbGFzdCB0cmVlIGVudHJ5IGlzIHRlcm1pbmF0ZWQgd2l0aCBhCisJCQkgKiBuZXctbGluZS4gIFRoZSBmaW5hbCBuZXctbGluZSBoYXMgYmVlbiBtYWRlIG9wdGlvbmFsIHRvIGJlCisJCQkgKiBjb25zaXN0ZW50IHdpdGggdGhlIG9yaWdpbmFsIG5vbi1iYXRjaCBiZWhhdmlvdXIgb2YgbWt0cmVlLgorCQkJICovCisJCQk7IC8qIHNraXAgY3JlYXRpbmcgYW4gZW1wdHkgdHJlZSAqLworCQl9IGVsc2UgeworCQkJd3JpdGVfdHJlZSgmb2lkKTsKKwkJCXB1dHMob2lkX3RvX2hleCgmb2lkKSk7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfQorCQl1c2VkPTA7IC8qIHJlc2V0IHRyZWUgZW50cnkgYnVmZmVyIGZvciByZS11c2UgaW4gYmF0Y2ggbW9kZSAqLworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL211bHRpLXBhY2staW5kZXguYyBiL2J1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZjg4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL211bHRpLXBhY2staW5kZXguYwpAQCAtMCwwICsxLDcwIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgIm1pZHguaCIKKyNpbmNsdWRlICJ0cmFjZTIuaCIKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBidWlsdGluX211bHRpX3BhY2tfaW5kZXhfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG11bHRpLXBhY2staW5kZXggWzxvcHRpb25zPl0gKHdyaXRlfHZlcmlmeXxleHBpcmV8cmVwYWNrIC0tYmF0Y2gtc2l6ZT08c2l6ZT4pIiksCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBvcHRzX211bHRpX3BhY2tfaW5kZXggeworCWNvbnN0IGNoYXIgKm9iamVjdF9kaXI7CisJdW5zaWduZWQgbG9uZyBiYXRjaF9zaXplOworCWludCBwcm9ncmVzczsKK30gb3B0czsKKworaW50IGNtZF9tdWx0aV9wYWNrX2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCSBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJdW5zaWduZWQgZmxhZ3MgPSAwOworCisJc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9tdWx0aV9wYWNrX2luZGV4X29wdGlvbnNbXSA9IHsKKwkJT1BUX0ZJTEVOQU1FKDAsICJvYmplY3QtZGlyIiwgJm9wdHMub2JqZWN0X2RpciwKKwkJICBOXygib2JqZWN0IGRpcmVjdG9yeSBjb250YWluaW5nIHNldCBvZiBwYWNrZmlsZSBhbmQgcGFjay1pbmRleCBwYWlycyIpKSwKKwkJT1BUX0JPT0woMCwgInByb2dyZXNzIiwgJm9wdHMucHJvZ3Jlc3MsIE5fKCJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciKSksCisJCU9QVF9NQUdOSVRVREUoMCwgImJhdGNoLXNpemUiLCAmb3B0cy5iYXRjaF9zaXplLAorCQkgIE5fKCJkdXJpbmcgcmVwYWNrLCBjb2xsZWN0IHBhY2stZmlsZXMgb2Ygc21hbGxlciBzaXplIGludG8gYSBiYXRjaCB0aGF0IGlzIGxhcmdlciB0aGFuIHRoaXMgc2l6ZSIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlvcHRzLnByb2dyZXNzID0gaXNhdHR5KDIpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCSAgICAgYnVpbHRpbl9tdWx0aV9wYWNrX2luZGV4X29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fbXVsdGlfcGFja19pbmRleF91c2FnZSwgMCk7CisKKwlpZiAoIW9wdHMub2JqZWN0X2RpcikKKwkJb3B0cy5vYmplY3RfZGlyID0gZ2V0X29iamVjdF9kaXJlY3RvcnkoKTsKKwlpZiAob3B0cy5wcm9ncmVzcykKKwkJZmxhZ3MgfD0gTUlEWF9QUk9HUkVTUzsKKworCWlmIChhcmdjID09IDApCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX211bHRpX3BhY2tfaW5kZXhfdXNhZ2UsCisJCQkJICAgYnVpbHRpbl9tdWx0aV9wYWNrX2luZGV4X29wdGlvbnMpOworCisJaWYgKGFyZ2MgPiAxKSB7CisJCWRpZShfKCJ0b28gbWFueSBhcmd1bWVudHMiKSk7CisJCXJldHVybiAxOworCX0KKworCXRyYWNlMl9jbWRfbW9kZShhcmd2WzBdKTsKKworCWlmICghc3RyY21wKGFyZ3ZbMF0sICJyZXBhY2siKSkKKwkJcmV0dXJuIG1pZHhfcmVwYWNrKHRoZV9yZXBvc2l0b3J5LCBvcHRzLm9iamVjdF9kaXIsCisJCQkoc2l6ZV90KW9wdHMuYmF0Y2hfc2l6ZSwgZmxhZ3MpOworCWlmIChvcHRzLmJhdGNoX3NpemUpCisJCWRpZShfKCItLWJhdGNoLXNpemUgb3B0aW9uIGlzIG9ubHkgZm9yICdyZXBhY2snIHN1YmNvbW1hbmQiKSk7CisKKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAid3JpdGUiKSkKKwkJcmV0dXJuIHdyaXRlX21pZHhfZmlsZShvcHRzLm9iamVjdF9kaXIsIGZsYWdzKTsKKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAidmVyaWZ5IikpCisJCXJldHVybiB2ZXJpZnlfbWlkeF9maWxlKHRoZV9yZXBvc2l0b3J5LCBvcHRzLm9iamVjdF9kaXIsIGZsYWdzKTsKKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAiZXhwaXJlIikpCisJCXJldHVybiBleHBpcmVfbWlkeF9wYWNrcyh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyLCBmbGFncyk7CisKKwlkaWUoXygidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIiksIGFyZ3ZbMF0pOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tdi5jIGIvYnVpbHRpbi9tdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMTViYTcKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL212LmMKQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgKiAiZ2l0IG12IiBidWlsdGluIGNvbW1hbmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSm9oYW5uZXMgU2NoaW5kZWxpbgorICovCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX212X3VzYWdlW10gPSB7CisJTl8oImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IiksCisJTlVMTAorfTsKKworI2RlZmluZSBEVVBfQkFTRU5BTUUgMQorI2RlZmluZSBLRUVQX1RSQUlMSU5HX1NMQVNIIDIKKworc3RhdGljIGNvbnN0IGNoYXIgKippbnRlcm5hbF9wcmVmaXhfcGF0aHNwZWMoY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKipwYXRoc3BlYywKKwkJCQkJICAgICBpbnQgY291bnQsIHVuc2lnbmVkIGZsYWdzKQoreworCWludCBpOworCWNvbnN0IGNoYXIgKipyZXN1bHQ7CisJaW50IHByZWZpeGxlbiA9IHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMDsKKwlBTExPQ19BUlJBWShyZXN1bHQsIGNvdW50ICsgMSk7CisKKwkvKiBDcmVhdGUgYW4gaW50ZXJtZWRpYXRlIGNvcHkgb2YgdGhlIHBhdGhzcGVjIGJhc2VkIG9uIHRoZSBmbGFncyAqLworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWludCBsZW5ndGggPSBzdHJsZW4ocGF0aHNwZWNbaV0pOworCQlpbnQgdG9fY29weSA9IGxlbmd0aDsKKwkJY2hhciAqaXQ7CisJCXdoaWxlICghKGZsYWdzICYgS0VFUF9UUkFJTElOR19TTEFTSCkgJiYKKwkJICAgICAgIHRvX2NvcHkgPiAwICYmIGlzX2Rpcl9zZXAocGF0aHNwZWNbaV1bdG9fY29weSAtIDFdKSkKKwkJCXRvX2NvcHktLTsKKworCQlpdCA9IHhtZW1kdXB6KHBhdGhzcGVjW2ldLCB0b19jb3B5KTsKKwkJaWYgKGZsYWdzICYgRFVQX0JBU0VOQU1FKSB7CisJCQlyZXN1bHRbaV0gPSB4c3RyZHVwKGJhc2VuYW1lKGl0KSk7CisJCQlmcmVlKGl0KTsKKwkJfSBlbHNlIHsKKwkJCXJlc3VsdFtpXSA9IGl0OworCQl9CisJfQorCXJlc3VsdFtjb3VudF0gPSBOVUxMOworCisJLyogUHJlZml4IHRoZSBwYXRoc3BlYyBhbmQgZnJlZSB0aGUgb2xkIGludGVybWVkaWF0ZSBzdHJpbmdzICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJY29uc3QgY2hhciAqbWF0Y2ggPSBwcmVmaXhfcGF0aChwcmVmaXgsIHByZWZpeGxlbiwgcmVzdWx0W2ldKTsKKwkJZnJlZSgoY2hhciAqKSByZXN1bHRbaV0pOworCQlyZXN1bHRbaV0gPSBtYXRjaDsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYWRkX3NsYXNoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihwYXRoKTsKKwlpZiAocGF0aFtsZW4gLSAxXSAhPSAnLycpIHsKKwkJY2hhciAqd2l0aF9zbGFzaCA9IHhtYWxsb2Moc3RfYWRkKGxlbiwgMikpOworCQltZW1jcHkod2l0aF9zbGFzaCwgcGF0aCwgbGVuKTsKKwkJd2l0aF9zbGFzaFtsZW4rK10gPSAnLyc7CisJCXdpdGhfc2xhc2hbbGVuXSA9IDA7CisJCXJldHVybiB3aXRoX3NsYXNoOworCX0KKwlyZXR1cm4gcGF0aDsKK30KKworI2RlZmluZSBTVUJNT0RVTEVfV0lUSF9HSVRESVIgKChjb25zdCBjaGFyICopMSkKKworc3RhdGljIHZvaWQgcHJlcGFyZV9tb3ZlX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzcmMsIGludCBmaXJzdCwKKwkJCQkgICBjb25zdCBjaGFyICoqc3VibW9kdWxlX2dpdGZpbGUpCit7CisJc3RydWN0IHN0cmJ1ZiBzdWJtb2R1bGVfZG90Z2l0ID0gU1RSQlVGX0lOSVQ7CisJaWYgKCFTX0lTR0lUTElOSyhhY3RpdmVfY2FjaGVbZmlyc3RdLT5jZV9tb2RlKSkKKwkJZGllKF8oIkRpcmVjdG9yeSAlcyBpcyBpbiBpbmRleCBhbmQgbm8gc3VibW9kdWxlPyIpLCBzcmMpOworCWlmICghaXNfc3RhZ2luZ19naXRtb2R1bGVzX29rKCZ0aGVfaW5kZXgpKQorCQlkaWUoXygiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiKSk7CisJc3RyYnVmX2FkZGYoJnN1Ym1vZHVsZV9kb3RnaXQsICIlcy8uZ2l0Iiwgc3JjKTsKKwkqc3VibW9kdWxlX2dpdGZpbGUgPSByZWFkX2dpdGZpbGUoc3VibW9kdWxlX2RvdGdpdC5idWYpOworCWlmICgqc3VibW9kdWxlX2dpdGZpbGUpCisJCSpzdWJtb2R1bGVfZ2l0ZmlsZSA9IHhzdHJkdXAoKnN1Ym1vZHVsZV9naXRmaWxlKTsKKwllbHNlCisJCSpzdWJtb2R1bGVfZ2l0ZmlsZSA9IFNVQk1PRFVMRV9XSVRIX0dJVERJUjsKKwlzdHJidWZfcmVsZWFzZSgmc3VibW9kdWxlX2RvdGdpdCk7Cit9CisKK3N0YXRpYyBpbnQgaW5kZXhfcmFuZ2Vfb2Zfc2FtZV9kaXIoY29uc3QgY2hhciAqc3JjLCBpbnQgbGVuZ3RoLAorCQkJCSAgIGludCAqZmlyc3RfcCwgaW50ICpsYXN0X3ApCit7CisJY29uc3QgY2hhciAqc3JjX3dfc2xhc2ggPSBhZGRfc2xhc2goc3JjKTsKKwlpbnQgZmlyc3QsIGxhc3QsIGxlbl93X3NsYXNoID0gbGVuZ3RoICsgMTsKKworCWZpcnN0ID0gY2FjaGVfbmFtZV9wb3Moc3JjX3dfc2xhc2gsIGxlbl93X3NsYXNoKTsKKwlpZiAoZmlyc3QgPj0gMCkKKwkJZGllKF8oIiUuKnMgaXMgaW4gaW5kZXgiKSwgbGVuX3dfc2xhc2gsIHNyY193X3NsYXNoKTsKKworCWZpcnN0ID0gLTEgLSBmaXJzdDsKKwlmb3IgKGxhc3QgPSBmaXJzdDsgbGFzdCA8IGFjdGl2ZV9ucjsgbGFzdCsrKSB7CisJCWNvbnN0IGNoYXIgKnBhdGggPSBhY3RpdmVfY2FjaGVbbGFzdF0tPm5hbWU7CisJCWlmIChzdHJuY21wKHBhdGgsIHNyY193X3NsYXNoLCBsZW5fd19zbGFzaCkpCisJCQlicmVhazsKKwl9CisJaWYgKHNyY193X3NsYXNoICE9IHNyYykKKwkJZnJlZSgoY2hhciAqKXNyY193X3NsYXNoKTsKKwkqZmlyc3RfcCA9IGZpcnN0OworCSpsYXN0X3AgPSBsYXN0OworCXJldHVybiBsYXN0IC0gZmlyc3Q7Cit9CisKK2ludCBjbWRfbXYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGksIGZsYWdzLCBnaXRtb2R1bGVzX21vZGlmaWVkID0gMDsKKwlpbnQgdmVyYm9zZSA9IDAsIHNob3dfb25seSA9IDAsIGZvcmNlID0gMCwgaWdub3JlX2Vycm9ycyA9IDA7CisJc3RydWN0IG9wdGlvbiBidWlsdGluX212X29wdGlvbnNbXSA9IHsKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygiYmUgdmVyYm9zZSIpKSwKKwkJT1BUX19EUllfUlVOKCZzaG93X29ubHksIE5fKCJkcnkgcnVuIikpLAorCQlPUFRfX0ZPUkNFKCZmb3JjZSwgTl8oImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIpLAorCQkJICAgUEFSU0VfT1BUX05PQ09NUExFVEUpLAorCQlPUFRfQk9PTCgnaycsIE5VTEwsICZpZ25vcmVfZXJyb3JzLCBOXygic2tpcCBtb3ZlL3JlbmFtZSBlcnJvcnMiKSksCisJCU9QVF9FTkQoKSwKKwl9OworCWNvbnN0IGNoYXIgKipzb3VyY2UsICoqZGVzdGluYXRpb24sICoqZGVzdF9wYXRoLCAqKnN1Ym1vZHVsZV9naXRmaWxlOworCWVudW0gdXBkYXRlX21vZGUgeyBCT1RIID0gMCwgV09SS0lOR19ESVJFQ1RPUlksIElOREVYIH0gKm1vZGVzOworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCBzdHJpbmdfbGlzdCBzcmNfZm9yX2RzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGUgPSBMT0NLX0lOSVQ7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fbXZfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9tdl91c2FnZSwgMCk7CisJaWYgKC0tYXJnYyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX212X3VzYWdlLCBidWlsdGluX212X29wdGlvbnMpOworCisJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgTE9DS19ESUVfT05fRVJST1IpOworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJc291cmNlID0gaW50ZXJuYWxfcHJlZml4X3BhdGhzcGVjKHByZWZpeCwgYXJndiwgYXJnYywgMCk7CisJbW9kZXMgPSB4Y2FsbG9jKGFyZ2MsIHNpemVvZihlbnVtIHVwZGF0ZV9tb2RlKSk7CisJLyoKKwkgKiBLZWVwIHRyYWlsaW5nIHNsYXNoLCBuZWVkZWQgdG8gbGV0CisJICogImdpdCBtdiBmaWxlIG5vLXN1Y2gtZGlyLyIgZXJyb3Igb3V0LCBleGNlcHQgaW4gdGhlIGNhc2UKKwkgKiAiZ2l0IG12IGRpcmVjdG9yeSBuby1zdWNoLWRpci8iLgorCSAqLworCWZsYWdzID0gS0VFUF9UUkFJTElOR19TTEFTSDsKKwlpZiAoYXJnYyA9PSAxICYmIGlzX2RpcmVjdG9yeShhcmd2WzBdKSAmJiAhaXNfZGlyZWN0b3J5KGFyZ3ZbMV0pKQorCQlmbGFncyA9IDA7CisJZGVzdF9wYXRoID0gaW50ZXJuYWxfcHJlZml4X3BhdGhzcGVjKHByZWZpeCwgYXJndiArIGFyZ2MsIDEsIGZsYWdzKTsKKwlzdWJtb2R1bGVfZ2l0ZmlsZSA9IHhjYWxsb2MoYXJnYywgc2l6ZW9mKGNoYXIgKikpOworCisJaWYgKGRlc3RfcGF0aFswXVswXSA9PSAnXDAnKQorCQkvKiBzcGVjaWFsIGNhc2U6ICIuIiB3YXMgbm9ybWFsaXplZCB0byAiIiAqLworCQlkZXN0aW5hdGlvbiA9IGludGVybmFsX3ByZWZpeF9wYXRoc3BlYyhkZXN0X3BhdGhbMF0sIGFyZ3YsIGFyZ2MsIERVUF9CQVNFTkFNRSk7CisJZWxzZSBpZiAoIWxzdGF0KGRlc3RfcGF0aFswXSwgJnN0KSAmJgorCQkJU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQlkZXN0X3BhdGhbMF0gPSBhZGRfc2xhc2goZGVzdF9wYXRoWzBdKTsKKwkJZGVzdGluYXRpb24gPSBpbnRlcm5hbF9wcmVmaXhfcGF0aHNwZWMoZGVzdF9wYXRoWzBdLCBhcmd2LCBhcmdjLCBEVVBfQkFTRU5BTUUpOworCX0gZWxzZSB7CisJCWlmIChhcmdjICE9IDEpCisJCQlkaWUoXygiZGVzdGluYXRpb24gJyVzJyBpcyBub3QgYSBkaXJlY3RvcnkiKSwgZGVzdF9wYXRoWzBdKTsKKwkJZGVzdGluYXRpb24gPSBkZXN0X3BhdGg7CisJfQorCisJLyogQ2hlY2tpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnNyYyA9IHNvdXJjZVtpXSwgKmRzdCA9IGRlc3RpbmF0aW9uW2ldOworCQlpbnQgbGVuZ3RoLCBzcmNfaXNfZGlyOworCQljb25zdCBjaGFyICpiYWQgPSBOVUxMOworCisJCWlmIChzaG93X29ubHkpCisJCQlwcmludGYoXygiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIiksIHNyYywgZHN0KTsKKworCQlsZW5ndGggPSBzdHJsZW4oc3JjKTsKKwkJaWYgKGxzdGF0KHNyYywgJnN0KSA8IDApCisJCQliYWQgPSBfKCJiYWQgc291cmNlIik7CisJCWVsc2UgaWYgKCFzdHJuY21wKHNyYywgZHN0LCBsZW5ndGgpICYmCisJCQkJKGRzdFtsZW5ndGhdID09IDAgfHwgZHN0W2xlbmd0aF0gPT0gJy8nKSkgeworCQkJYmFkID0gXygiY2FuIG5vdCBtb3ZlIGRpcmVjdG9yeSBpbnRvIGl0c2VsZiIpOworCQl9IGVsc2UgaWYgKChzcmNfaXNfZGlyID0gU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCQkmJiBsc3RhdChkc3QsICZzdCkgPT0gMCkKKwkJCWJhZCA9IF8oImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiKTsKKwkJZWxzZSBpZiAoc3JjX2lzX2RpcikgeworCQkJaW50IGZpcnN0ID0gY2FjaGVfbmFtZV9wb3Moc3JjLCBsZW5ndGgpLCBsYXN0OworCisJCQlpZiAoZmlyc3QgPj0gMCkKKwkJCQlwcmVwYXJlX21vdmVfc3VibW9kdWxlKHNyYywgZmlyc3QsCisJCQkJCQkgICAgICAgc3VibW9kdWxlX2dpdGZpbGUgKyBpKTsKKwkJCWVsc2UgaWYgKGluZGV4X3JhbmdlX29mX3NhbWVfZGlyKHNyYywgbGVuZ3RoLAorCQkJCQkJCSAmZmlyc3QsICZsYXN0KSA8IDEpCisJCQkJYmFkID0gXygic291cmNlIGRpcmVjdG9yeSBpcyBlbXB0eSIpOworCQkJZWxzZSB7IC8qIGxhc3QgLSBmaXJzdCA+PSAxICovCisJCQkJaW50IGosIGRzdF9sZW4sIG47CisKKwkJCQltb2Rlc1tpXSA9IFdPUktJTkdfRElSRUNUT1JZOworCQkJCW4gPSBhcmdjICsgbGFzdCAtIGZpcnN0OworCQkJCVJFQUxMT0NfQVJSQVkoc291cmNlLCBuKTsKKwkJCQlSRUFMTE9DX0FSUkFZKGRlc3RpbmF0aW9uLCBuKTsKKwkJCQlSRUFMTE9DX0FSUkFZKG1vZGVzLCBuKTsKKwkJCQlSRUFMTE9DX0FSUkFZKHN1Ym1vZHVsZV9naXRmaWxlLCBuKTsKKworCQkJCWRzdCA9IGFkZF9zbGFzaChkc3QpOworCQkJCWRzdF9sZW4gPSBzdHJsZW4oZHN0KTsKKworCQkJCWZvciAoaiA9IDA7IGogPCBsYXN0IC0gZmlyc3Q7IGorKykgeworCQkJCQljb25zdCBjaGFyICpwYXRoID0gYWN0aXZlX2NhY2hlW2ZpcnN0ICsgal0tPm5hbWU7CisJCQkJCXNvdXJjZVthcmdjICsgal0gPSBwYXRoOworCQkJCQlkZXN0aW5hdGlvblthcmdjICsgal0gPQorCQkJCQkJcHJlZml4X3BhdGgoZHN0LCBkc3RfbGVuLCBwYXRoICsgbGVuZ3RoICsgMSk7CisJCQkJCW1vZGVzW2FyZ2MgKyBqXSA9IElOREVYOworCQkJCQlzdWJtb2R1bGVfZ2l0ZmlsZVthcmdjICsgal0gPSBOVUxMOworCQkJCX0KKwkJCQlhcmdjICs9IGxhc3QgLSBmaXJzdDsKKwkJCX0KKwkJfSBlbHNlIGlmIChjYWNoZV9uYW1lX3BvcyhzcmMsIGxlbmd0aCkgPCAwKQorCQkJYmFkID0gXygibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIpOworCQllbHNlIGlmIChsc3RhdChkc3QsICZzdCkgPT0gMCAmJgorCQkJICghaWdub3JlX2Nhc2UgfHwgc3RyY2FzZWNtcChzcmMsIGRzdCkpKSB7CisJCQliYWQgPSBfKCJkZXN0aW5hdGlvbiBleGlzdHMiKTsKKwkJCWlmIChmb3JjZSkgeworCQkJCS8qCisJCQkJICogb25seSBmaWxlcyBjYW4gb3ZlcndyaXRlIGVhY2ggb3RoZXI6CisJCQkJICogY2hlY2sgYm90aCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uCisJCQkJICovCisJCQkJaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkgfHwgU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQkJCQlpZiAodmVyYm9zZSkKKwkJCQkJCXdhcm5pbmcoXygib3ZlcndyaXRpbmcgJyVzJyIpLCBkc3QpOworCQkJCQliYWQgPSBOVUxMOworCQkJCX0gZWxzZQorCQkJCQliYWQgPSBfKCJDYW5ub3Qgb3ZlcndyaXRlIik7CisJCQl9CisJCX0gZWxzZSBpZiAoc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmc3JjX2Zvcl9kc3QsIGRzdCkpCisJCQliYWQgPSBfKCJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiKTsKKwkJZWxzZSBpZiAoaXNfZGlyX3NlcChkc3Rbc3RybGVuKGRzdCkgLSAxXSkpCisJCQliYWQgPSBfKCJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiKTsKKwkJZWxzZQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZzcmNfZm9yX2RzdCwgZHN0KTsKKworCQlpZiAoIWJhZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWlnbm9yZV9lcnJvcnMpCisJCQlkaWUoXygiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiKSwKKwkJCSAgICAgYmFkLCBzcmMsIGRzdCk7CisJCWlmICgtLWFyZ2MgPiAwKSB7CisJCQlpbnQgbiA9IGFyZ2MgLSBpOworCQkJbWVtbW92ZShzb3VyY2UgKyBpLCBzb3VyY2UgKyBpICsgMSwKKwkJCQluICogc2l6ZW9mKGNoYXIgKikpOworCQkJbWVtbW92ZShkZXN0aW5hdGlvbiArIGksIGRlc3RpbmF0aW9uICsgaSArIDEsCisJCQkJbiAqIHNpemVvZihjaGFyICopKTsKKwkJCW1lbW1vdmUobW9kZXMgKyBpLCBtb2RlcyArIGkgKyAxLAorCQkJCW4gKiBzaXplb2YoZW51bSB1cGRhdGVfbW9kZSkpOworCQkJbWVtbW92ZShzdWJtb2R1bGVfZ2l0ZmlsZSArIGksIHN1Ym1vZHVsZV9naXRmaWxlICsgaSArIDEsCisJCQkJbiAqIHNpemVvZihjaGFyICopKTsKKwkJCWktLTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqc3JjID0gc291cmNlW2ldLCAqZHN0ID0gZGVzdGluYXRpb25baV07CisJCWVudW0gdXBkYXRlX21vZGUgbW9kZSA9IG1vZGVzW2ldOworCQlpbnQgcG9zOworCQlpZiAoc2hvd19vbmx5IHx8IHZlcmJvc2UpCisJCQlwcmludGYoXygiUmVuYW1pbmcgJXMgdG8gJXNcbiIpLCBzcmMsIGRzdCk7CisJCWlmIChzaG93X29ubHkpCisJCQljb250aW51ZTsKKwkJaWYgKG1vZGUgIT0gSU5ERVggJiYgcmVuYW1lKHNyYywgZHN0KSA8IDApIHsKKwkJCWlmIChpZ25vcmVfZXJyb3JzKQorCQkJCWNvbnRpbnVlOworCQkJZGllX2Vycm5vKF8oInJlbmFtaW5nICclcycgZmFpbGVkIiksIHNyYyk7CisJCX0KKwkJaWYgKHN1Ym1vZHVsZV9naXRmaWxlW2ldKSB7CisJCQlpZiAoIXVwZGF0ZV9wYXRoX2luX2dpdG1vZHVsZXMoc3JjLCBkc3QpKQorCQkJCWdpdG1vZHVsZXNfbW9kaWZpZWQgPSAxOworCQkJaWYgKHN1Ym1vZHVsZV9naXRmaWxlW2ldICE9IFNVQk1PRFVMRV9XSVRIX0dJVERJUikKKwkJCQljb25uZWN0X3dvcmtfdHJlZV9hbmRfZ2l0X2Rpcihkc3QsCisJCQkJCQkJICAgICAgc3VibW9kdWxlX2dpdGZpbGVbaV0sCisJCQkJCQkJICAgICAgMSk7CisJCX0KKworCQlpZiAobW9kZSA9PSBXT1JLSU5HX0RJUkVDVE9SWSkKKwkJCWNvbnRpbnVlOworCisJCXBvcyA9IGNhY2hlX25hbWVfcG9zKHNyYywgc3RybGVuKHNyYykpOworCQlhc3NlcnQocG9zID49IDApOworCQlyZW5hbWVfY2FjaGVfZW50cnlfYXQocG9zLCBkc3QpOworCX0KKworCWlmIChnaXRtb2R1bGVzX21vZGlmaWVkKQorCQlzdGFnZV91cGRhdGVkX2dpdG1vZHVsZXMoJnRoZV9pbmRleCk7CisKKwlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZsb2NrX2ZpbGUsCisJCQkgICAgICAgQ09NTUlUX0xPQ0sgfCBTS0lQX0lGX1VOQ0hBTkdFRCkpCisJCWRpZShfKCJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbmFtZS1yZXYuYyBiL2J1aWx0aW4vbmFtZS1yZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWRjZDI1Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9uYW1lLXJldi5jCkBAIC0wLDAgKzEsNjM2IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicHJpby1xdWV1ZS5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKworLyoKKyAqIE9uZSBkYXkuICBTZWUgdGhlICduYW1lIGEgcmV2IHNob3J0bHkgYWZ0ZXIgZXBvY2gnIHRlc3QgaW4gdDYxMjAgd2hlbgorICogY2hhbmdpbmcgdGhpcyB2YWx1ZQorICovCisjZGVmaW5lIENVVE9GRl9EQVRFX1NMT1AgODY0MDAKKworc3RydWN0IHJldl9uYW1lIHsKKwljaGFyICp0aXBfbmFtZTsKKwl0aW1lc3RhbXBfdCB0YWdnZXJkYXRlOworCWludCBnZW5lcmF0aW9uOworCWludCBkaXN0YW5jZTsKKwlpbnQgZnJvbV90YWc7Cit9OworCitkZWZpbmVfY29tbWl0X3NsYWIoY29tbWl0X3Jldl9uYW1lLCBzdHJ1Y3QgcmV2X25hbWUpOworCitzdGF0aWMgdGltZXN0YW1wX3QgY3V0b2ZmID0gVElNRV9NQVg7CitzdGF0aWMgc3RydWN0IGNvbW1pdF9yZXZfbmFtZSByZXZfbmFtZXM7CisKKy8qIEhvdyBtYW55IGdlbmVyYXRpb25zIGFyZSBtYXhpbWFsbHkgcHJlZmVycmVkIG92ZXIgX29uZV8gbWVyZ2UgdHJhdmVyc2FsPyAqLworI2RlZmluZSBNRVJHRV9UUkFWRVJTQUxfV0VJR0hUIDY1NTM1CisKK3N0YXRpYyBpbnQgaXNfdmFsaWRfcmV2X25hbWUoY29uc3Qgc3RydWN0IHJldl9uYW1lICpuYW1lKQoreworCXJldHVybiBuYW1lICYmIChuYW1lLT5nZW5lcmF0aW9uIHx8IG5hbWUtPnRpcF9uYW1lKTsKK30KKworc3RhdGljIHN0cnVjdCByZXZfbmFtZSAqZ2V0X2NvbW1pdF9yZXZfbmFtZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IHJldl9uYW1lICpuYW1lID0gY29tbWl0X3Jldl9uYW1lX3BlZWsoJnJldl9uYW1lcywgY29tbWl0KTsKKworCXJldHVybiBpc192YWxpZF9yZXZfbmFtZShuYW1lKSA/IG5hbWUgOiBOVUxMOworfQorCitzdGF0aWMgaW50IGlzX2JldHRlcl9uYW1lKHN0cnVjdCByZXZfbmFtZSAqbmFtZSwKKwkJCSAgdGltZXN0YW1wX3QgdGFnZ2VyZGF0ZSwKKwkJCSAgaW50IGRpc3RhbmNlLAorCQkJICBpbnQgZnJvbV90YWcpCit7CisJLyoKKwkgKiBXaGVuIGNvbXBhcmluZyBuYW1lcyBiYXNlZCBvbiB0YWdzLCBwcmVmZXIgbmFtZXMKKwkgKiBiYXNlZCBvbiB0aGUgb2xkZXIgdGFnLCBldmVuIGlmIGl0IGlzIGZhcnRoZXIgYXdheS4KKwkgKi8KKwlpZiAoZnJvbV90YWcgJiYgbmFtZS0+ZnJvbV90YWcpCisJCXJldHVybiAobmFtZS0+dGFnZ2VyZGF0ZSA+IHRhZ2dlcmRhdGUgfHwKKwkJCShuYW1lLT50YWdnZXJkYXRlID09IHRhZ2dlcmRhdGUgJiYKKwkJCSBuYW1lLT5kaXN0YW5jZSA+IGRpc3RhbmNlKSk7CisKKwkvKgorCSAqIFdlIGtub3cgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpcyBhIG5vbi10YWcgYXQgdGhpcyBwb2ludC4KKwkgKiBmYXZvciBhIHRhZyBvdmVyIGEgbm9uLXRhZy4KKwkgKi8KKwlpZiAobmFtZS0+ZnJvbV90YWcgIT0gZnJvbV90YWcpCisJCXJldHVybiBmcm9tX3RhZzsKKworCS8qCisJICogV2UgYXJlIG5vdyBsb29raW5nIGF0IHR3byBub24tdGFncy4gIFRpZWJyZWFrIHRvIGZhdm9yCisJICogc2hvcnRlciBob3BzLgorCSAqLworCWlmIChuYW1lLT5kaXN0YW5jZSAhPSBkaXN0YW5jZSkKKwkJcmV0dXJuIG5hbWUtPmRpc3RhbmNlID4gZGlzdGFuY2U7CisKKwkvKiAuLi4gb3IgdGllYnJlYWsgdG8gZmF2b3Igb2xkZXIgZGF0ZSAqLworCWlmIChuYW1lLT50YWdnZXJkYXRlICE9IHRhZ2dlcmRhdGUpCisJCXJldHVybiBuYW1lLT50YWdnZXJkYXRlID4gdGFnZ2VyZGF0ZTsKKworCS8qIGtlZXAgdGhlIGN1cnJlbnQgb25lIGlmIHdlIGNhbm5vdCBkZWNpZGUgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZXZfbmFtZSAqY3JlYXRlX29yX3VwZGF0ZV9uYW1lKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkJICAgICAgdGltZXN0YW1wX3QgdGFnZ2VyZGF0ZSwKKwkJCQkJICAgICAgaW50IGdlbmVyYXRpb24sIGludCBkaXN0YW5jZSwKKwkJCQkJICAgICAgaW50IGZyb21fdGFnKQoreworCXN0cnVjdCByZXZfbmFtZSAqbmFtZSA9IGNvbW1pdF9yZXZfbmFtZV9hdCgmcmV2X25hbWVzLCBjb21taXQpOworCisJaWYgKGlzX3ZhbGlkX3Jldl9uYW1lKG5hbWUpKSB7CisJCWlmICghaXNfYmV0dGVyX25hbWUobmFtZSwgdGFnZ2VyZGF0ZSwgZGlzdGFuY2UsIGZyb21fdGFnKSkKKwkJCXJldHVybiBOVUxMOworCisJCS8qCisJCSAqIFRoaXMgc3RyaW5nIG1pZ2h0IHN0aWxsIGJlIHNoYXJlZCB3aXRoIGFuY2VzdG9ycworCQkgKiAoZ2VuZXJhdGlvbiA+IDApLiAgV2UgY2FuIHJlbGVhc2UgaXQgaGVyZSByZWdhcmRsZXNzLAorCQkgKiBiZWNhdXNlIHRoZSBuZXcgbmFtZSB0aGF0IGhhcyBqdXN0IHdvbiB3aWxsIGJlIGJldHRlcgorCQkgKiBmb3IgdGhlbSBhcyB3ZWxsLCBzbyBuYW1lX3JldigpIHdpbGwgcmVwbGFjZSB0aGVzZQorCQkgKiBzdGFsZSBwb2ludGVycyB3aGVuIGl0IHByb2Nlc3NlcyB0aGUgcGFyZW50cy4KKwkJICovCisJCWlmICghbmFtZS0+Z2VuZXJhdGlvbikKKwkJCWZyZWUobmFtZS0+dGlwX25hbWUpOworCX0KKworCW5hbWUtPnRhZ2dlcmRhdGUgPSB0YWdnZXJkYXRlOworCW5hbWUtPmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOworCW5hbWUtPmRpc3RhbmNlID0gZGlzdGFuY2U7CisJbmFtZS0+ZnJvbV90YWcgPSBmcm9tX3RhZzsKKworCXJldHVybiBuYW1lOworfQorCitzdGF0aWMgY2hhciAqZ2V0X3BhcmVudF9uYW1lKGNvbnN0IHN0cnVjdCByZXZfbmFtZSAqbmFtZSwgaW50IHBhcmVudF9udW1iZXIpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXNpemVfdCBsZW47CisKKwlzdHJpcF9zdWZmaXgobmFtZS0+dGlwX25hbWUsICJeMCIsICZsZW4pOworCWlmIChuYW1lLT5nZW5lcmF0aW9uID4gMCkgeworCQlzdHJidWZfZ3Jvdygmc2IsIGxlbiArCisJCQkgICAgMSArIGRlY2ltYWxfd2lkdGgobmFtZS0+Z2VuZXJhdGlvbikgKworCQkJICAgIDEgKyBkZWNpbWFsX3dpZHRoKHBhcmVudF9udW1iZXIpKTsKKwkJc3RyYnVmX2FkZGYoJnNiLCAiJS4qc34lZF4lZCIsIChpbnQpbGVuLCBuYW1lLT50aXBfbmFtZSwKKwkJCSAgICBuYW1lLT5nZW5lcmF0aW9uLCBwYXJlbnRfbnVtYmVyKTsKKwl9IGVsc2UgeworCQlzdHJidWZfZ3Jvdygmc2IsIGxlbiArCisJCQkgICAgMSArIGRlY2ltYWxfd2lkdGgocGFyZW50X251bWJlcikpOworCQlzdHJidWZfYWRkZigmc2IsICIlLipzXiVkIiwgKGludClsZW4sIG5hbWUtPnRpcF9uYW1lLAorCQkJICAgIHBhcmVudF9udW1iZXIpOworCX0KKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBuYW1lX3JldihzdHJ1Y3QgY29tbWl0ICpzdGFydF9jb21taXQsCisJCWNvbnN0IGNoYXIgKnRpcF9uYW1lLCB0aW1lc3RhbXBfdCB0YWdnZXJkYXRlLAorCQlpbnQgZnJvbV90YWcsIGludCBkZXJlZikKK3sKKwlzdHJ1Y3QgcHJpb19xdWV1ZSBxdWV1ZTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGNvbW1pdCAqKnBhcmVudHNfdG9fcXVldWUgPSBOVUxMOworCXNpemVfdCBwYXJlbnRzX3RvX3F1ZXVlX25yLCBwYXJlbnRzX3RvX3F1ZXVlX2FsbG9jID0gMDsKKwlzdHJ1Y3QgcmV2X25hbWUgKnN0YXJ0X25hbWU7CisKKwlwYXJzZV9jb21taXQoc3RhcnRfY29tbWl0KTsKKwlpZiAoc3RhcnRfY29tbWl0LT5kYXRlIDwgY3V0b2ZmKQorCQlyZXR1cm47CisKKwlzdGFydF9uYW1lID0gY3JlYXRlX29yX3VwZGF0ZV9uYW1lKHN0YXJ0X2NvbW1pdCwgdGFnZ2VyZGF0ZSwgMCwgMCwKKwkJCQkJICAgZnJvbV90YWcpOworCWlmICghc3RhcnRfbmFtZSkKKwkJcmV0dXJuOworCWlmIChkZXJlZikKKwkJc3RhcnRfbmFtZS0+dGlwX25hbWUgPSB4c3RyZm10KCIlc14wIiwgdGlwX25hbWUpOworCWVsc2UKKwkJc3RhcnRfbmFtZS0+dGlwX25hbWUgPSB4c3RyZHVwKHRpcF9uYW1lKTsKKworCW1lbXNldCgmcXVldWUsIDAsIHNpemVvZihxdWV1ZSkpOyAvKiBVc2UgdGhlIHByaW9fcXVldWUgYXMgTElGTyAqLworCXByaW9fcXVldWVfcHV0KCZxdWV1ZSwgc3RhcnRfY29tbWl0KTsKKworCXdoaWxlICgoY29tbWl0ID0gcHJpb19xdWV1ZV9nZXQoJnF1ZXVlKSkpIHsKKwkJc3RydWN0IHJldl9uYW1lICpuYW1lID0gZ2V0X2NvbW1pdF9yZXZfbmFtZShjb21taXQpOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJCWludCBwYXJlbnRfbnVtYmVyID0gMTsKKworCQlwYXJlbnRzX3RvX3F1ZXVlX25yID0gMDsKKworCQlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisJCQkJcGFyZW50czsKKwkJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dCwgcGFyZW50X251bWJlcisrKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwYXJlbnRzLT5pdGVtOworCQkJc3RydWN0IHJldl9uYW1lICpwYXJlbnRfbmFtZTsKKwkJCWludCBnZW5lcmF0aW9uLCBkaXN0YW5jZTsKKworCQkJcGFyc2VfY29tbWl0KHBhcmVudCk7CisJCQlpZiAocGFyZW50LT5kYXRlIDwgY3V0b2ZmKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAocGFyZW50X251bWJlciA+IDEpIHsKKwkJCQlnZW5lcmF0aW9uID0gMDsKKwkJCQlkaXN0YW5jZSA9IG5hbWUtPmRpc3RhbmNlICsgTUVSR0VfVFJBVkVSU0FMX1dFSUdIVDsKKwkJCX0gZWxzZSB7CisJCQkJZ2VuZXJhdGlvbiA9IG5hbWUtPmdlbmVyYXRpb24gKyAxOworCQkJCWRpc3RhbmNlID0gbmFtZS0+ZGlzdGFuY2UgKyAxOworCQkJfQorCisJCQlwYXJlbnRfbmFtZSA9IGNyZWF0ZV9vcl91cGRhdGVfbmFtZShwYXJlbnQsIHRhZ2dlcmRhdGUsCisJCQkJCQkJICAgIGdlbmVyYXRpb24sCisJCQkJCQkJICAgIGRpc3RhbmNlLCBmcm9tX3RhZyk7CisJCQlpZiAocGFyZW50X25hbWUpIHsKKwkJCQlpZiAocGFyZW50X251bWJlciA+IDEpCisJCQkJCXBhcmVudF9uYW1lLT50aXBfbmFtZSA9CisJCQkJCQlnZXRfcGFyZW50X25hbWUobmFtZSwKKwkJCQkJCQkJcGFyZW50X251bWJlcik7CisJCQkJZWxzZQorCQkJCQlwYXJlbnRfbmFtZS0+dGlwX25hbWUgPSBuYW1lLT50aXBfbmFtZTsKKwkJCQlBTExPQ19HUk9XKHBhcmVudHNfdG9fcXVldWUsCisJCQkJCSAgIHBhcmVudHNfdG9fcXVldWVfbnIgKyAxLAorCQkJCQkgICBwYXJlbnRzX3RvX3F1ZXVlX2FsbG9jKTsKKwkJCQlwYXJlbnRzX3RvX3F1ZXVlW3BhcmVudHNfdG9fcXVldWVfbnJdID0gcGFyZW50OworCQkJCXBhcmVudHNfdG9fcXVldWVfbnIrKzsKKwkJCX0KKwkJfQorCisJCS8qIFRoZSBmaXJzdCBwYXJlbnQgbXVzdCBjb21lIG91dCBmaXJzdCBmcm9tIHRoZSBwcmlvX3F1ZXVlICovCisJCXdoaWxlIChwYXJlbnRzX3RvX3F1ZXVlX25yKQorCQkJcHJpb19xdWV1ZV9wdXQoJnF1ZXVlLAorCQkJCSAgICAgICBwYXJlbnRzX3RvX3F1ZXVlWy0tcGFyZW50c190b19xdWV1ZV9ucl0pOworCX0KKworCWNsZWFyX3ByaW9fcXVldWUoJnF1ZXVlKTsKKwlmcmVlKHBhcmVudHNfdG9fcXVldWUpOworfQorCitzdGF0aWMgaW50IHN1YnBhdGhfbWF0Y2hlcyhjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmaWx0ZXIpCit7CisJY29uc3QgY2hhciAqc3VicGF0aCA9IHBhdGg7CisKKwl3aGlsZSAoc3VicGF0aCkgeworCQlpZiAoIXdpbGRtYXRjaChmaWx0ZXIsIHN1YnBhdGgsIDApKQorCQkJcmV0dXJuIHN1YnBhdGggLSBwYXRoOworCQlzdWJwYXRoID0gc3RyY2hyKHN1YnBhdGgsICcvJyk7CisJCWlmIChzdWJwYXRoKQorCQkJc3VicGF0aCsrOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpuYW1lX3JlZl9hYmJyZXYoY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IHNob3J0ZW5fdW5hbWJpZ3VvdXMpCit7CisJaWYgKHNob3J0ZW5fdW5hbWJpZ3VvdXMpCisJCXJlZm5hbWUgPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihyZWZuYW1lLCAwKTsKKwllbHNlIGlmIChza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy9oZWFkcy8iLCAmcmVmbmFtZSkpCisJCTsgLyogcmVmbmFtZSBhbHJlYWR5IGFkdmFuY2VkICovCisJZWxzZQorCQlza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy8iLCAmcmVmbmFtZSk7CisJcmV0dXJuIHJlZm5hbWU7Cit9CisKK3N0cnVjdCBuYW1lX3JlZl9kYXRhIHsKKwlpbnQgdGFnc19vbmx5OworCWludCBuYW1lX29ubHk7CisJc3RydWN0IHN0cmluZ19saXN0IHJlZl9maWx0ZXJzOworCXN0cnVjdCBzdHJpbmdfbGlzdCBleGNsdWRlX2ZpbHRlcnM7Cit9OworCitzdGF0aWMgc3RydWN0IHRpcF90YWJsZSB7CisJc3RydWN0IHRpcF90YWJsZV9lbnRyeSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljb25zdCBjaGFyICpyZWZuYW1lOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJCXRpbWVzdGFtcF90IHRhZ2dlcmRhdGU7CisJCXVuc2lnbmVkIGludCBmcm9tX3RhZzoxOworCQl1bnNpZ25lZCBpbnQgZGVyZWY6MTsKKwl9ICp0YWJsZTsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworCWludCBzb3J0ZWQ7Cit9IHRpcF90YWJsZTsKKworc3RhdGljIHZvaWQgYWRkX3RvX3RpcF90YWJsZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICAgIGludCBzaG9ydGVuX3VuYW1iaWd1b3VzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICAgIHRpbWVzdGFtcF90IHRhZ2dlcmRhdGUsIGludCBmcm9tX3RhZywgaW50IGRlcmVmKQoreworCXJlZm5hbWUgPSBuYW1lX3JlZl9hYmJyZXYocmVmbmFtZSwgc2hvcnRlbl91bmFtYmlndW91cyk7CisKKwlBTExPQ19HUk9XKHRpcF90YWJsZS50YWJsZSwgdGlwX3RhYmxlLm5yICsgMSwgdGlwX3RhYmxlLmFsbG9jKTsKKwlvaWRjcHkoJnRpcF90YWJsZS50YWJsZVt0aXBfdGFibGUubnJdLm9pZCwgb2lkKTsKKwl0aXBfdGFibGUudGFibGVbdGlwX3RhYmxlLm5yXS5yZWZuYW1lID0geHN0cmR1cChyZWZuYW1lKTsKKwl0aXBfdGFibGUudGFibGVbdGlwX3RhYmxlLm5yXS5jb21taXQgPSBjb21taXQ7CisJdGlwX3RhYmxlLnRhYmxlW3RpcF90YWJsZS5ucl0udGFnZ2VyZGF0ZSA9IHRhZ2dlcmRhdGU7CisJdGlwX3RhYmxlLnRhYmxlW3RpcF90YWJsZS5ucl0uZnJvbV90YWcgPSBmcm9tX3RhZzsKKwl0aXBfdGFibGUudGFibGVbdGlwX3RhYmxlLm5yXS5kZXJlZiA9IGRlcmVmOworCXRpcF90YWJsZS5ucisrOworCXRpcF90YWJsZS5zb3J0ZWQgPSAwOworfQorCitzdGF0aWMgaW50IHRpcGNtcChjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IHRpcF90YWJsZV9lbnRyeSAqYSA9IGFfLCAqYiA9IGJfOworCXJldHVybiBvaWRjbXAoJmEtPm9pZCwgJmItPm9pZCk7Cit9CisKK3N0YXRpYyBpbnQgY21wX2J5X3RhZ19hbmRfYWdlKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBzdHJ1Y3QgdGlwX3RhYmxlX2VudHJ5ICphID0gYV8sICpiID0gYl87CisJaW50IGNtcDsKKworCS8qIFByZWZlciB0YWdzLiAqLworCWNtcCA9IGItPmZyb21fdGFnIC0gYS0+ZnJvbV90YWc7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKworCS8qIE9sZGVyIGlzIGJldHRlci4gKi8KKwlpZiAoYS0+dGFnZ2VyZGF0ZSA8IGItPnRhZ2dlcmRhdGUpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gYS0+dGFnZ2VyZGF0ZSAhPSBiLT50YWdnZXJkYXRlOworfQorCitzdGF0aWMgaW50IG5hbWVfcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3QgKm8gPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJc3RydWN0IG5hbWVfcmVmX2RhdGEgKmRhdGEgPSBjYl9kYXRhOworCWludCBjYW5fYWJicmV2aWF0ZV9vdXRwdXQgPSBkYXRhLT50YWdzX29ubHkgJiYgZGF0YS0+bmFtZV9vbmx5OworCWludCBkZXJlZiA9IDA7CisJaW50IGZyb21fdGFnID0gMDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBOVUxMOworCXRpbWVzdGFtcF90IHRhZ2dlcmRhdGUgPSBUSU1FX01BWDsKKworCWlmIChkYXRhLT50YWdzX29ubHkgJiYgIXN0YXJ0c193aXRoKHBhdGgsICJyZWZzL3RhZ3MvIikpCisJCXJldHVybiAwOworCisJaWYgKGRhdGEtPmV4Y2x1ZGVfZmlsdGVycy5ucikgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZkYXRhLT5leGNsdWRlX2ZpbHRlcnMpIHsKKwkJCWlmIChzdWJwYXRoX21hdGNoZXMocGF0aCwgaXRlbS0+c3RyaW5nKSA+PSAwKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKGRhdGEtPnJlZl9maWx0ZXJzLm5yKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlpbnQgbWF0Y2hlZCA9IDA7CisKKwkJLyogU2VlIGlmIGFueSBvZiB0aGUgcGF0dGVybnMgbWF0Y2guICovCisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJmRhdGEtPnJlZl9maWx0ZXJzKSB7CisJCQkvKgorCQkJICogQ2hlY2sgYWxsIHBhdHRlcm5zIGV2ZW4gYWZ0ZXIgZmluZGluZyBhIG1hdGNoLCBzbworCQkJICogdGhhdCB3ZSBjYW4gc2VlIGlmIGEgbWF0Y2ggd2l0aCBhIHN1YnBhdGggZXhpc3RzLgorCQkJICogV2hlbiBhIHVzZXIgYXNrZWQgZm9yICdyZWZzL3RhZ3MvdionIGFuZCAndjEuKicsCisJCQkgKiBib3RoIG9mIHdoaWNoIG1hdGNoLCB0aGUgdXNlciBpcyBzaG93aW5nIGhlcgorCQkJICogd2lsbGluZ25lc3MgdG8gYWNjZXB0IGEgc2hvcnRlbmVkIG91dHB1dCBieSBoYXZpbmcKKwkJCSAqIHRoZSAndjEuKicgaW4gdGhlIGFjY2VwdGFibGUgcmVmbmFtZXMsIHNvIHdlCisJCQkgKiBzaG91bGRuJ3Qgc3RvcCB3aGVuIHNlZWluZyAncmVmcy90YWdzL3YxLjQnIG1hdGNoZXMKKwkJCSAqICdyZWZzL3RhZ3MvdionLiAgV2Ugc2hvdWxkIHNob3cgaXQgYXMgJ3YxLjQnLgorCQkJICovCisJCQlzd2l0Y2ggKHN1YnBhdGhfbWF0Y2hlcyhwYXRoLCBpdGVtLT5zdHJpbmcpKSB7CisJCQljYXNlIC0xOiAvKiBkaWQgbm90IG1hdGNoICovCisJCQkJYnJlYWs7CisJCQljYXNlIDA6IC8qIG1hdGNoZWQgZnVsbHkgKi8KKwkJCQltYXRjaGVkID0gMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6IC8qIG1hdGNoZWQgc3VicGF0aCAqLworCQkJCW1hdGNoZWQgPSAxOworCQkJCWNhbl9hYmJyZXZpYXRlX291dHB1dCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBJZiBub25lIG9mIHRoZSBwYXR0ZXJucyBtYXRjaGVkLCBzdG9wIG5vdyAqLworCQlpZiAoIW1hdGNoZWQpCisJCQlyZXR1cm4gMDsKKwl9CisKKwl3aGlsZSAobyAmJiBvLT50eXBlID09IE9CSl9UQUcpIHsKKwkJc3RydWN0IHRhZyAqdCA9IChzdHJ1Y3QgdGFnICopIG87CisJCWlmICghdC0+dGFnZ2VkKQorCQkJYnJlYWs7IC8qIGJyb2tlbiByZXBvc2l0b3J5ICovCisJCW8gPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZ0LT50YWdnZWQtPm9pZCk7CisJCWRlcmVmID0gMTsKKwkJdGFnZ2VyZGF0ZSA9IHQtPmRhdGU7CisJfQorCWlmIChvICYmIG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW87CisJCWZyb21fdGFnID0gc3RhcnRzX3dpdGgocGF0aCwgInJlZnMvdGFncy8iKTsKKwkJaWYgKHRhZ2dlcmRhdGUgPT0gVElNRV9NQVgpCisJCQl0YWdnZXJkYXRlID0gY29tbWl0LT5kYXRlOworCX0KKworCWFkZF90b190aXBfdGFibGUob2lkLCBwYXRoLCBjYW5fYWJicmV2aWF0ZV9vdXRwdXQsIGNvbW1pdCwgdGFnZ2VyZGF0ZSwKKwkJCSBmcm9tX3RhZywgZGVyZWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuYW1lX3RpcHModm9pZCkKK3sKKwlpbnQgaTsKKworCS8qCisJICogVHJ5IHRvIHNldCBiZXR0ZXIgbmFtZXMgZmlyc3QsIHNvIHRoYXQgd29yc2Ugb25lcyBzcHJlYWQKKwkgKiBsZXNzLgorCSAqLworCVFTT1JUKHRpcF90YWJsZS50YWJsZSwgdGlwX3RhYmxlLm5yLCBjbXBfYnlfdGFnX2FuZF9hZ2UpOworCWZvciAoaSA9IDA7IGkgPCB0aXBfdGFibGUubnI7IGkrKykgeworCQlzdHJ1Y3QgdGlwX3RhYmxlX2VudHJ5ICplID0gJnRpcF90YWJsZS50YWJsZVtpXTsKKwkJaWYgKGUtPmNvbW1pdCkgeworCQkJbmFtZV9yZXYoZS0+Y29tbWl0LCBlLT5yZWZuYW1lLCBlLT50YWdnZXJkYXRlLAorCQkJCSBlLT5mcm9tX3RhZywgZS0+ZGVyZWYpOworCQl9CisJfQorfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqbnRoX3RpcF90YWJsZV9lbnQoc2l6ZV90IGl4LCB2b2lkICp0YWJsZV8pCit7CisJc3RydWN0IHRpcF90YWJsZV9lbnRyeSAqdGFibGUgPSB0YWJsZV87CisJcmV0dXJuIHRhYmxlW2l4XS5vaWQuaGFzaDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9leGFjdF9yZWZfbWF0Y2goY29uc3Qgc3RydWN0IG9iamVjdCAqbykKK3sKKwlpbnQgZm91bmQ7CisKKwlpZiAoIXRpcF90YWJsZS50YWJsZSB8fCAhdGlwX3RhYmxlLm5yKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghdGlwX3RhYmxlLnNvcnRlZCkgeworCQlRU09SVCh0aXBfdGFibGUudGFibGUsIHRpcF90YWJsZS5uciwgdGlwY21wKTsKKwkJdGlwX3RhYmxlLnNvcnRlZCA9IDE7CisJfQorCisJZm91bmQgPSBzaGExX3BvcyhvLT5vaWQuaGFzaCwgdGlwX3RhYmxlLnRhYmxlLCB0aXBfdGFibGUubnIsCisJCQkgbnRoX3RpcF90YWJsZV9lbnQpOworCWlmICgwIDw9IGZvdW5kKQorCQlyZXR1cm4gdGlwX3RhYmxlLnRhYmxlW2ZvdW5kXS5yZWZuYW1lOworCXJldHVybiBOVUxMOworfQorCisvKiBtYXkgcmV0dXJuIGEgY29uc3RhbnQgc3RyaW5nIG9yIHVzZSAiYnVmIiBhcyBzY3JhdGNoIHNwYWNlICovCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3Jldl9uYW1lKGNvbnN0IHN0cnVjdCBvYmplY3QgKm8sIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlzdHJ1Y3QgcmV2X25hbWUgKm47CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqYzsKKworCWlmIChvLT50eXBlICE9IE9CSl9DT01NSVQpCisJCXJldHVybiBnZXRfZXhhY3RfcmVmX21hdGNoKG8pOworCWMgPSAoY29uc3Qgc3RydWN0IGNvbW1pdCAqKSBvOworCW4gPSBnZXRfY29tbWl0X3Jldl9uYW1lKGMpOworCWlmICghbikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIW4tPmdlbmVyYXRpb24pCisJCXJldHVybiBuLT50aXBfbmFtZTsKKwllbHNlIHsKKwkJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBuLT50aXBfbmFtZSk7CisJCXN0cmJ1Zl9zdHJpcF9zdWZmaXgoYnVmLCAiXjAiKTsKKwkJc3RyYnVmX2FkZGYoYnVmLCAifiVkIiwgbi0+Z2VuZXJhdGlvbik7CisJCXJldHVybiBidWYtPmJ1ZjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbmFtZShjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJCSAgICAgIGNvbnN0IGNoYXIgKmNhbGxlcl9uYW1lLAorCQkgICAgICBpbnQgYWx3YXlzLCBpbnQgYWxsb3dfdW5kZWZpbmVkLCBpbnQgbmFtZV9vbmx5KQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkID0gJm9iai0+b2lkOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIW5hbWVfb25seSkKKwkJcHJpbnRmKCIlcyAiLCBjYWxsZXJfbmFtZSA/IGNhbGxlcl9uYW1lIDogb2lkX3RvX2hleChvaWQpKTsKKwluYW1lID0gZ2V0X3Jldl9uYW1lKG9iaiwgJmJ1Zik7CisJaWYgKG5hbWUpCisJCXByaW50ZigiJXNcbiIsIG5hbWUpOworCWVsc2UgaWYgKGFsbG93X3VuZGVmaW5lZCkKKwkJcHJpbnRmKCJ1bmRlZmluZWRcbiIpOworCWVsc2UgaWYgKGFsd2F5cykKKwkJcHJpbnRmKCIlc1xuIiwgZmluZF91bmlxdWVfYWJicmV2KG9pZCwgREVGQVVMVF9BQkJSRVYpKTsKKwllbHNlCisJCWRpZSgiY2Fubm90IGRlc2NyaWJlICclcyciLCBvaWRfdG9faGV4KG9pZCkpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IG5hbWVfcmV2X3VzYWdlW10gPSB7CisJTl8oImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSA8Y29tbWl0Pi4uLiIpLAorCU5fKCJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1hbGwiKSwKKwlOXygiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tc3RkaW4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgdm9pZCBuYW1lX3Jldl9saW5lKGNoYXIgKnAsIHN0cnVjdCBuYW1lX3JlZl9kYXRhICpkYXRhKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGNvdW50ZXIgPSAwOworCWNoYXIgKnBfc3RhcnQ7CisJY29uc3QgdW5zaWduZWQgaGV4c3ogPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKworCWZvciAocF9zdGFydCA9IHA7ICpwOyBwKyspIHsKKyNkZWZpbmUgaXNoZXgoeCkgKGlzZGlnaXQoKHgpKSB8fCAoKHgpID49ICdhJyAmJiAoeCkgPD0gJ2YnKSkKKwkJaWYgKCFpc2hleCgqcCkpCisJCQljb3VudGVyID0gMDsKKwkJZWxzZSBpZiAoKytjb3VudGVyID09IGhleHN6ICYmCisJCQkgIWlzaGV4KCoocCsxKSkpIHsKKwkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQkJY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisJCQljaGFyIGMgPSAqKHArMSk7CisJCQlpbnQgcF9sZW4gPSBwIC0gcF9zdGFydCArIDE7CisKKwkJCWNvdW50ZXIgPSAwOworCisJCQkqKHArMSkgPSAwOworCQkJaWYgKCFnZXRfb2lkKHAgLSAoaGV4c3ogLSAxKSwgJm9pZCkpIHsKKwkJCQlzdHJ1Y3Qgb2JqZWN0ICpvID0KKwkJCQkJbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJCQkJaWYgKG8pCisJCQkJCW5hbWUgPSBnZXRfcmV2X25hbWUobywgJmJ1Zik7CisJCQl9CisJCQkqKHArMSkgPSBjOworCisJCQlpZiAoIW5hbWUpCisJCQkJY29udGludWU7CisKKwkJCWlmIChkYXRhLT5uYW1lX29ubHkpCisJCQkJcHJpbnRmKCIlLipzJXMiLCBwX2xlbiAtIGhleHN6LCBwX3N0YXJ0LCBuYW1lKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIiUuKnMgKCVzKSIsIHBfbGVuLCBwX3N0YXJ0LCBuYW1lKTsKKwkJCXBfc3RhcnQgPSBwICsgMTsKKwkJfQorCX0KKworCS8qIGZsdXNoICovCisJaWYgKHBfc3RhcnQgIT0gcCkKKwkJZndyaXRlKHBfc3RhcnQsIHAgLSBwX3N0YXJ0LCAxLCBzdGRvdXQpOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK2ludCBjbWRfbmFtZV9yZXYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG9iamVjdF9hcnJheSByZXZzID0gT0JKRUNUX0FSUkFZX0lOSVQ7CisJaW50IGFsbCA9IDAsIHRyYW5zZm9ybV9zdGRpbiA9IDAsIGFsbG93X3VuZGVmaW5lZCA9IDEsIGFsd2F5cyA9IDAsIHBlZWxfdGFnID0gMDsKKwlzdHJ1Y3QgbmFtZV9yZWZfZGF0YSBkYXRhID0geyAwLCAwLCBTVFJJTkdfTElTVF9JTklUX05PRFVQLCBTVFJJTkdfTElTVF9JTklUX05PRFVQIH07CisJc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CisJCU9QVF9CT09MKDAsICJuYW1lLW9ubHkiLCAmZGF0YS5uYW1lX29ubHksIE5fKCJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiKSksCisJCU9QVF9CT09MKDAsICJ0YWdzIiwgJmRhdGEudGFnc19vbmx5LCBOXygib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIikpLAorCQlPUFRfU1RSSU5HX0xJU1QoMCwgInJlZnMiLCAmZGF0YS5yZWZfZmlsdGVycywgTl8oInBhdHRlcm4iKSwKKwkJCQkgICBOXygib25seSB1c2UgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iKSksCisJCU9QVF9TVFJJTkdfTElTVCgwLCAiZXhjbHVkZSIsICZkYXRhLmV4Y2x1ZGVfZmlsdGVycywgTl8oInBhdHRlcm4iKSwKKwkJCQkgICBOXygiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IikpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfQk9PTCgwLCAiYWxsIiwgJmFsbCwgTl8oImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiKSksCisJCU9QVF9CT09MKDAsICJzdGRpbiIsICZ0cmFuc2Zvcm1fc3RkaW4sIE5fKCJyZWFkIGZyb20gc3RkaW4iKSksCisJCU9QVF9CT09MKDAsICJ1bmRlZmluZWQiLCAmYWxsb3dfdW5kZWZpbmVkLCBOXygiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIikpLAorCQlPUFRfQk9PTCgwLCAiYWx3YXlzIiwgICAgICZhbHdheXMsCisJCQkgICBOXygic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIikpLAorCQl7CisJCQkvKiBBIEhpZGRlbiBPUFRfQk9PTCAqLworCQkJT1BUSU9OX1NFVF9JTlQsIDAsICJwZWVsLXRhZyIsICZwZWVsX3RhZywgTlVMTCwKKwkJCU5fKCJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX0hJRERFTiwgTlVMTCwgMSwKKwkJfSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlpbml0X2NvbW1pdF9yZXZfbmFtZSgmcmV2X25hbWVzKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRzLCBuYW1lX3Jldl91c2FnZSwgMCk7CisJaWYgKGFsbCArIHRyYW5zZm9ybV9zdGRpbiArICEhYXJnYyA+IDEpIHsKKwkJZXJyb3IoIlNwZWNpZnkgZWl0aGVyIGEgbGlzdCwgb3IgLS1hbGwsIG5vdCBib3RoISIpOworCQl1c2FnZV93aXRoX29wdGlvbnMobmFtZV9yZXZfdXNhZ2UsIG9wdHMpOworCX0KKwlpZiAoYWxsIHx8IHRyYW5zZm9ybV9zdGRpbikKKwkJY3V0b2ZmID0gMDsKKworCWZvciAoOyBhcmdjOyBhcmdjLS0sIGFyZ3YrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0OworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwkJaWYgKGdldF9vaWQoKmFyZ3YsICZvaWQpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBnZXQgc2hhMSBmb3IgJXMuIFNraXBwaW5nLlxuIiwKKwkJCQkJKmFyZ3YpOworCQkJY29udGludWU7CisJCX0KKworCQljb21taXQgPSBOVUxMOworCQlvYmplY3QgPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvaWQpOworCQlpZiAob2JqZWN0KSB7CisJCQlzdHJ1Y3Qgb2JqZWN0ICpwZWVsZWQgPSBkZXJlZl90YWcodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJICBvYmplY3QsICphcmd2LCAwKTsKKwkJCWlmIChwZWVsZWQgJiYgcGVlbGVkLT50eXBlID09IE9CSl9DT01NSVQpCisJCQkJY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilwZWVsZWQ7CisJCX0KKworCQlpZiAoIW9iamVjdCkgeworCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgZ2V0IG9iamVjdCBmb3IgJXMuIFNraXBwaW5nLlxuIiwKKwkJCQkJKmFyZ3YpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY29tbWl0KSB7CisJCQlpZiAoY3V0b2ZmID4gY29tbWl0LT5kYXRlKQorCQkJCWN1dG9mZiA9IGNvbW1pdC0+ZGF0ZTsKKwkJfQorCisJCWlmIChwZWVsX3RhZykgeworCQkJaWYgKCFjb21taXQpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBnZXQgY29tbWl0IGZvciAlcy4gU2tpcHBpbmcuXG4iLAorCQkJCQkqYXJndik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlvYmplY3QgPSAoc3RydWN0IG9iamVjdCAqKWNvbW1pdDsKKwkJfQorCQlhZGRfb2JqZWN0X2FycmF5KG9iamVjdCwgKmFyZ3YsICZyZXZzKTsKKwl9CisKKwlpZiAoY3V0b2ZmKSB7CisJCS8qIGNoZWNrIGZvciB1bmRlZmxvdyAqLworCQlpZiAoY3V0b2ZmID4gVElNRV9NSU4gKyBDVVRPRkZfREFURV9TTE9QKQorCQkJY3V0b2ZmID0gY3V0b2ZmIC0gQ1VUT0ZGX0RBVEVfU0xPUDsKKwkJZWxzZQorCQkJY3V0b2ZmID0gVElNRV9NSU47CisJfQorCWZvcl9lYWNoX3JlZihuYW1lX3JlZiwgJmRhdGEpOworCW5hbWVfdGlwcygpOworCisJaWYgKHRyYW5zZm9ybV9zdGRpbikgeworCQljaGFyIGJ1ZmZlclsyMDQ4XTsKKworCQl3aGlsZSAoIWZlb2Yoc3RkaW4pKSB7CisJCQljaGFyICpwID0gZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RkaW4pOworCQkJaWYgKCFwKQorCQkJCWJyZWFrOworCQkJbmFtZV9yZXZfbGluZShwLCAmZGF0YSk7CisJCX0KKwl9IGVsc2UgaWYgKGFsbCkgeworCQlpbnQgaSwgbWF4OworCisJCW1heCA9IGdldF9tYXhfb2JqZWN0X2luZGV4KCk7CisJCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgeworCQkJc3RydWN0IG9iamVjdCAqb2JqID0gZ2V0X2luZGV4ZWRfb2JqZWN0KGkpOworCQkJaWYgKCFvYmogfHwgb2JqLT50eXBlICE9IE9CSl9DT01NSVQpCisJCQkJY29udGludWU7CisJCQlzaG93X25hbWUob2JqLCBOVUxMLAorCQkJCSAgYWx3YXlzLCBhbGxvd191bmRlZmluZWQsIGRhdGEubmFtZV9vbmx5KTsKKwkJfQorCX0gZWxzZSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgcmV2cy5ucjsgaSsrKQorCQkJc2hvd19uYW1lKHJldnMub2JqZWN0c1tpXS5pdGVtLCByZXZzLm9iamVjdHNbaV0ubmFtZSwKKwkJCQkgIGFsd2F5cywgYWxsb3dfdW5kZWZpbmVkLCBkYXRhLm5hbWVfb25seSk7CisJfQorCisJVU5MRUFLKHJldnMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9ub3Rlcy5jIGIvYnVpbHRpbi9ub3Rlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ODdjMDgKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL25vdGVzLmMKQEAgLTAsMCArMSwxMDM5IEBACisvKgorICogQnVpbHRpbiAiZ2l0IG5vdGVzIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBKb2hhbiBIZXJsYW5kIDxqb2hhbkBoZXJsYW5kLm5ldD4KKyAqCisgKiBCYXNlZCBvbiBnaXQtbm90ZXMuc2ggYnkgSm9oYW5uZXMgU2NoaW5kZWxpbiwKKyAqIGFuZCBidWlsdGluL3RhZy5jIGJ5IEtyaXN0aWFuIEjDuGdzYmVyZyBhbmQgQ2FybG9zIFJpY2EuCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgIm5vdGVzLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJwcmV0dHkuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgIm5vdGVzLW1lcmdlLmgiCisjaW5jbHVkZSAibm90ZXMtdXRpbHMuaCIKKyNpbmNsdWRlICJ3b3JrdHJlZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc191c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIpLAorCU5fKCJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0Pl0iKSwKKwlOXygiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5Pl0gPG5vdGVzLXJlZj4iKSwKKwlOXygiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIpLAorCU5fKCJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iKSwKKwlOXygiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iKSwKKwlOXygiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcHJ1bmUgWy1uXSBbLXZdIiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19saXN0X3VzYWdlW10gPSB7CisJTl8oImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X25vdGVzX2FkZF91c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19jb3B5X3VzYWdlW10gPSB7CisJTl8oImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iKSwKKwlOXygiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19hcHBlbmRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfZWRpdF91c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfc2hvd191c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgc2hvdyBbPG9iamVjdD5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfbWVyZ2VfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlcy1yZWY+IiksCisJTl8oImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wdGlvbnM+XSIpLAorCU5fKCJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X25vdGVzX3JlbW92ZV91c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWN0Pl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19wcnVuZV91c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19nZXRfcmVmX3VzYWdlW10gPSB7CisJTl8oImdpdCBub3RlcyBnZXQtcmVmIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgbm90ZV90ZW1wbGF0ZVtdID0KKwlOXygiV3JpdGUvZWRpdCB0aGUgbm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgb2JqZWN0OiIpOworCitzdHJ1Y3Qgbm90ZV9kYXRhIHsKKwlpbnQgZ2l2ZW47CisJaW50IHVzZV9lZGl0b3I7CisJY2hhciAqZWRpdF9wYXRoOworCXN0cnVjdCBzdHJidWYgYnVmOworfTsKKworc3RhdGljIHZvaWQgZnJlZV9ub3RlX2RhdGEoc3RydWN0IG5vdGVfZGF0YSAqZCkKK3sKKwlpZiAoZC0+ZWRpdF9wYXRoKSB7CisJCXVubGlua19vcl93YXJuKGQtPmVkaXRfcGF0aCk7CisJCWZyZWUoZC0+ZWRpdF9wYXRoKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmQtPmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgbGlzdF9lYWNoX25vdGUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2JqZWN0X29pZCwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbm90ZV9vaWQsIGNoYXIgKm5vdGVfcGF0aCwKKwkJdm9pZCAqY2JfZGF0YSkKK3sKKwlwcmludGYoIiVzICVzXG4iLCBvaWRfdG9faGV4KG5vdGVfb2lkKSwgb2lkX3RvX2hleChvYmplY3Rfb2lkKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfb2JqX3RvX2ZkKGludCBmZCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciAqYnVmID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKGJ1ZikgeworCQlpZiAoc2l6ZSkKKwkJCXdyaXRlX29yX2RpZShmZCwgYnVmLCBzaXplKTsKKwkJZnJlZShidWYpOworCX0KK30KKworc3RhdGljIHZvaWQgd3JpdGVfY29tbWVudGVkX29iamVjdChpbnQgZmQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9iamVjdCkKK3sKKwljb25zdCBjaGFyICpzaG93X2FyZ3NbNV0gPQorCQl7InNob3ciLCAiLS1zdGF0IiwgIi0tbm8tbm90ZXMiLCBvaWRfdG9faGV4KG9iamVjdCksIE5VTEx9OworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHNob3cgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGNidWYgPSBTVFJCVUZfSU5JVDsKKworCS8qIEludm9rZSAiZ2l0IHNob3cgLS1zdGF0IC0tbm8tbm90ZXMgJG9iamVjdCIgKi8KKwlzaG93LmFyZ3YgPSBzaG93X2FyZ3M7CisJc2hvdy5ub19zdGRpbiA9IDE7CisJc2hvdy5vdXQgPSAtMTsKKwlzaG93LmVyciA9IDA7CisJc2hvdy5naXRfY21kID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmc2hvdykpCisJCWRpZShfKCJ1bmFibGUgdG8gc3RhcnQgJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIpLAorCQkgICAgb2lkX3RvX2hleChvYmplY3QpKTsKKworCWlmIChzdHJidWZfcmVhZCgmYnVmLCBzaG93Lm91dCwgMCkgPCAwKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlYWQgJ3Nob3cnIG91dHB1dCIpKTsKKwlzdHJidWZfYWRkX2NvbW1lbnRlZF9saW5lcygmY2J1ZiwgYnVmLmJ1ZiwgYnVmLmxlbik7CisJd3JpdGVfb3JfZGllKGZkLCBjYnVmLmJ1ZiwgY2J1Zi5sZW4pOworCisJc3RyYnVmX3JlbGVhc2UoJmNidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZzaG93KSkKKwkJZGllKF8oImZhaWxlZCB0byBmaW5pc2ggJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIpLAorCQkgICAgb2lkX3RvX2hleChvYmplY3QpKTsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9ub3RlX2RhdGEoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2JqZWN0LCBzdHJ1Y3Qgbm90ZV9kYXRhICpkLAorCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfbm90ZSkKK3sKKwlpZiAoZC0+dXNlX2VkaXRvciB8fCAhZC0+Z2l2ZW4pIHsKKwkJaW50IGZkOworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCS8qIHdyaXRlIHRoZSB0ZW1wbGF0ZSBtZXNzYWdlIGJlZm9yZSBlZGl0aW5nOiAqLworCQlkLT5lZGl0X3BhdGggPSBnaXRfcGF0aGR1cCgiTk9URVNfRURJVE1TRyIpOworCQlmZCA9IG9wZW4oZC0+ZWRpdF9wYXRoLCBPX0NSRUFUIHwgT19UUlVOQyB8IE9fV1JPTkxZLCAwNjAwKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIpLCBkLT5lZGl0X3BhdGgpOworCisJCWlmIChkLT5naXZlbikKKwkJCXdyaXRlX29yX2RpZShmZCwgZC0+YnVmLmJ1ZiwgZC0+YnVmLmxlbik7CisJCWVsc2UgaWYgKG9sZF9ub3RlKQorCQkJY29weV9vYmpfdG9fZmQoZmQsIG9sZF9ub3RlKTsKKworCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKCZidWYsICJcbiIsIHN0cmxlbigiXG4iKSk7CisJCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKCZidWYsIF8obm90ZV90ZW1wbGF0ZSksIHN0cmxlbihfKG5vdGVfdGVtcGxhdGUpKSk7CisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwkJd3JpdGVfb3JfZGllKGZkLCBidWYuYnVmLCBidWYubGVuKTsKKworCQl3cml0ZV9jb21tZW50ZWRfb2JqZWN0KGZkLCBvYmplY3QpOworCisJCWNsb3NlKGZkKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmZC0+YnVmKTsKKworCQlpZiAobGF1bmNoX2VkaXRvcihkLT5lZGl0X3BhdGgsICZkLT5idWYsIE5VTEwpKSB7CisJCQlkaWUoXygicGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIikpOworCQl9CisJCXN0cmJ1Zl9zdHJpcHNwYWNlKCZkLT5idWYsIDEpOworCX0KK30KKworc3RhdGljIHZvaWQgd3JpdGVfbm90ZV9kYXRhKHN0cnVjdCBub3RlX2RhdGEgKmQsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpZiAod3JpdGVfb2JqZWN0X2ZpbGUoZC0+YnVmLmJ1ZiwgZC0+YnVmLmxlbiwgYmxvYl90eXBlLCBvaWQpKSB7CisJCWVycm9yKF8oInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIpKTsKKwkJaWYgKGQtPmVkaXRfcGF0aCkKKwkJCWVycm9yKF8oInRoZSBub3RlIGNvbnRlbnRzIGhhdmUgYmVlbiBsZWZ0IGluICVzIiksCisJCQkJZC0+ZWRpdF9wYXRoKTsKKwkJZXhpdCgxMjgpOworCX0KK30KKworc3RhdGljIGludCBwYXJzZV9tc2dfYXJnKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IG5vdGVfZGF0YSAqZCA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlzdHJidWZfZ3JvdygmZC0+YnVmLCBzdHJsZW4oYXJnKSArIDIpOworCWlmIChkLT5idWYubGVuKQorCQlzdHJidWZfYWRkY2goJmQtPmJ1ZiwgJ1xuJyk7CisJc3RyYnVmX2FkZHN0cigmZC0+YnVmLCBhcmcpOworCXN0cmJ1Zl9zdHJpcHNwYWNlKCZkLT5idWYsIDApOworCisJZC0+Z2l2ZW4gPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX2ZpbGVfYXJnKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IG5vdGVfZGF0YSAqZCA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlpZiAoZC0+YnVmLmxlbikKKwkJc3RyYnVmX2FkZGNoKCZkLT5idWYsICdcbicpOworCWlmICghc3RyY21wKGFyZywgIi0iKSkgeworCQlpZiAoc3RyYnVmX3JlYWQoJmQtPmJ1ZiwgMCwgMTAyNCkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNhbm5vdCByZWFkICclcyciKSwgYXJnKTsKKwl9IGVsc2UgaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmQtPmJ1ZiwgYXJnLCAxMDI0KSA8IDApCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciKSwgYXJnKTsKKwlzdHJidWZfc3RyaXBzcGFjZSgmZC0+YnVmLCAwKTsKKworCWQtPmdpdmVuID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9yZXVzZV9hcmcoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgbm90ZV9kYXRhICpkID0gb3B0LT52YWx1ZTsKKwljaGFyICpidWY7CisJc3RydWN0IG9iamVjdF9pZCBvYmplY3Q7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgbGVuOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJaWYgKGQtPmJ1Zi5sZW4pCisJCXN0cmJ1Zl9hZGRjaCgmZC0+YnVmLCAnXG4nKTsKKworCWlmIChnZXRfb2lkKGFyZywgJm9iamVjdCkpCisJCWRpZShfKCJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIpLCBhcmcpOworCWlmICghKGJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUoJm9iamVjdCwgJnR5cGUsICZsZW4pKSkKKwkJZGllKF8oImZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIpLCBhcmcpOworCWlmICh0eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUoYnVmKTsKKwkJZGllKF8oImNhbm5vdCByZWFkIG5vdGUgZGF0YSBmcm9tIG5vbi1ibG9iIG9iamVjdCAnJXMnLiIpLCBhcmcpOworCX0KKwlzdHJidWZfYWRkKCZkLT5idWYsIGJ1ZiwgbGVuKTsKKwlmcmVlKGJ1Zik7CisKKwlkLT5naXZlbiA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfcmVlZGl0X2FyZyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBub3RlX2RhdGEgKmQgPSBvcHQtPnZhbHVlOworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlkLT51c2VfZWRpdG9yID0gMTsKKwlyZXR1cm4gcGFyc2VfcmV1c2VfYXJnKG9wdCwgYXJnLCB1bnNldCk7Cit9CisKK3N0YXRpYyBpbnQgbm90ZXNfY29weV9mcm9tX3N0ZGluKGludCBmb3JjZSwgY29uc3QgY2hhciAqcmV3cml0ZV9jbWQpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMgPSBOVUxMOworCXN0cnVjdCBub3Rlc190cmVlICp0ID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKwljb25zdCBjaGFyICptc2cgPSAiTm90ZXMgYWRkZWQgYnkgJ2dpdCBub3RlcyBjb3B5JyI7CisKKwlpZiAocmV3cml0ZV9jbWQpIHsKKwkJYyA9IGluaXRfY29weV9ub3Rlc19mb3JfcmV3cml0ZShyZXdyaXRlX2NtZCk7CisJCWlmICghYykKKwkJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWluaXRfbm90ZXMoTlVMTCwgTlVMTCwgTlVMTCwgTk9URVNfSU5JVF9XUklUQUJMRSk7CisJCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOworCX0KKworCXdoaWxlIChzdHJidWZfZ2V0bGluZV9sZigmYnVmLCBzdGRpbikgIT0gRU9GKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgZnJvbV9vYmosIHRvX29iajsKKwkJc3RydWN0IHN0cmJ1ZiAqKnNwbGl0OworCQlpbnQgZXJyOworCisJCXNwbGl0ID0gc3RyYnVmX3NwbGl0KCZidWYsICcgJyk7CisJCWlmICghc3BsaXRbMF0gfHwgIXNwbGl0WzFdKQorCQkJZGllKF8oIm1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIpLCBidWYuYnVmKTsKKwkJc3RyYnVmX3J0cmltKHNwbGl0WzBdKTsKKwkJc3RyYnVmX3J0cmltKHNwbGl0WzFdKTsKKwkJaWYgKGdldF9vaWQoc3BsaXRbMF0tPmJ1ZiwgJmZyb21fb2JqKSkKKwkJCWRpZShfKCJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIpLCBzcGxpdFswXS0+YnVmKTsKKwkJaWYgKGdldF9vaWQoc3BsaXRbMV0tPmJ1ZiwgJnRvX29iaikpCisJCQlkaWUoXygiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgc3BsaXRbMV0tPmJ1Zik7CisKKwkJaWYgKHJld3JpdGVfY21kKQorCQkJZXJyID0gY29weV9ub3RlX2Zvcl9yZXdyaXRlKGMsICZmcm9tX29iaiwgJnRvX29iaik7CisJCWVsc2UKKwkJCWVyciA9IGNvcHlfbm90ZSh0LCAmZnJvbV9vYmosICZ0b19vYmosIGZvcmNlLAorCQkJCQljb21iaW5lX25vdGVzX292ZXJ3cml0ZSk7CisKKwkJaWYgKGVycikgeworCQkJZXJyb3IoXygiZmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciKSwKKwkJCSAgICAgIHNwbGl0WzBdLT5idWYsIHNwbGl0WzFdLT5idWYpOworCQkJcmV0ID0gMTsKKwkJfQorCisJCXN0cmJ1Zl9saXN0X2ZyZWUoc3BsaXQpOworCX0KKworCWlmICghcmV3cml0ZV9jbWQpIHsKKwkJY29tbWl0X25vdGVzKHRoZV9yZXBvc2l0b3J5LCB0LCBtc2cpOworCQlmcmVlX25vdGVzKHQpOworCX0gZWxzZSB7CisJCWZpbmlzaF9jb3B5X25vdGVzX2Zvcl9yZXdyaXRlKHRoZV9yZXBvc2l0b3J5LCBjLCBtc2cpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG5vdGVzX3RyZWUgKmluaXRfbm90ZXNfY2hlY2soY29uc3QgY2hhciAqc3ViY29tbWFuZCwKKwkJCQkJICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBub3Rlc190cmVlICp0OworCWNvbnN0IGNoYXIgKnJlZjsKKwlpbml0X25vdGVzKE5VTEwsIE5VTEwsIE5VTEwsIGZsYWdzKTsKKwl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKworCXJlZiA9IChmbGFncyAmIE5PVEVTX0lOSVRfV1JJVEFCTEUpID8gdC0+dXBkYXRlX3JlZiA6IHQtPnJlZjsKKwlpZiAoIXN0YXJ0c193aXRoKHJlZiwgInJlZnMvbm90ZXMvIikpCisJCS8qCisJCSAqIFRSQU5TTEFUT1JTOiB0aGUgZmlyc3QgJXMgd2lsbCBiZSByZXBsYWNlZCBieSBhIGdpdAorCQkgKiBub3RlcyBjb21tYW5kOiAnYWRkJywgJ21lcmdlJywgJ3JlbW92ZScsIGV0Yy4KKwkJICovCisJCWRpZShfKCJyZWZ1c2luZyB0byAlcyBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiKSwKKwkJICAgIHN1YmNvbW1hbmQsIHJlZik7CisJcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyBpbnQgbGlzdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9iamVjdDsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpub3RlOworCWludCByZXR2YWwgPSAtMTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpCisJfTsKKworCWlmIChhcmdjKQorCQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkJICAgICBnaXRfbm90ZXNfbGlzdF91c2FnZSwgMCk7CisKKwlpZiAoMSA8IGFyZ2MpIHsKKwkJZXJyb3IoXygidG9vIG1hbnkgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19saXN0X3VzYWdlLCBvcHRpb25zKTsKKwl9CisKKwl0ID0gaW5pdF9ub3Rlc19jaGVjaygibGlzdCIsIDApOworCWlmIChhcmdjKSB7CisJCWlmIChnZXRfb2lkKGFyZ3ZbMF0sICZvYmplY3QpKQorCQkJZGllKF8oImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIGFyZ3ZbMF0pOworCQlub3RlID0gZ2V0X25vdGUodCwgJm9iamVjdCk7CisJCWlmIChub3RlKSB7CisJCQlwdXRzKG9pZF90b19oZXgobm90ZSkpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlCisJCQlyZXR2YWwgPSBlcnJvcihfKCJubyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIiksCisJCQkJICAgICAgIG9pZF90b19oZXgoJm9iamVjdCkpOworCX0gZWxzZQorCQlyZXR2YWwgPSBmb3JfZWFjaF9ub3RlKHQsIDAsIGxpc3RfZWFjaF9ub3RlLCBOVUxMKTsKKworCWZyZWVfbm90ZXModCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBhcHBlbmRfZWRpdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CisKK3N0YXRpYyBpbnQgYWRkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBmb3JjZSA9IDAsIGFsbG93X2VtcHR5ID0gMDsKKwljb25zdCBjaGFyICpvYmplY3RfcmVmOworCXN0cnVjdCBub3Rlc190cmVlICp0OworCXN0cnVjdCBvYmplY3RfaWQgb2JqZWN0LCBuZXdfbm90ZTsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpub3RlOworCXN0cnVjdCBub3RlX2RhdGEgZCA9IHsgMCwgMCwgTlVMTCwgU1RSQlVGX0lOSVQgfTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0NBTExCQUNLX0YoJ20nLCAibWVzc2FnZSIsICZkLCBOXygibWVzc2FnZSIpLAorCQkJTl8oIm5vdGUgY29udGVudHMgYXMgYSBzdHJpbmciKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2VfbXNnX2FyZyksCisJCU9QVF9DQUxMQkFDS19GKCdGJywgImZpbGUiLCAmZCwgTl8oImZpbGUiKSwKKwkJCU5fKCJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9maWxlX2FyZyksCisJCU9QVF9DQUxMQkFDS19GKCdjJywgInJlZWRpdC1tZXNzYWdlIiwgJmQsIE5fKCJvYmplY3QiKSwKKwkJCU5fKCJyZXVzZSBhbmQgZWRpdCBzcGVjaWZpZWQgbm90ZSBvYmplY3QiKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2VfcmVlZGl0X2FyZyksCisJCU9QVF9DQUxMQkFDS19GKCdDJywgInJldXNlLW1lc3NhZ2UiLCAmZCwgTl8oIm9iamVjdCIpLAorCQkJTl8oInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9yZXVzZV9hcmcpLAorCQlPUFRfQk9PTCgwLCAiYWxsb3ctZW1wdHkiLCAmYWxsb3dfZW1wdHksCisJCQlOXygiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIikpLAorCQlPUFRfX0ZPUkNFKCZmb3JjZSwgTl8oInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiKSwgUEFSU0VfT1BUX05PQ09NUExFVEUpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBnaXRfbm90ZXNfYWRkX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisKKwlpZiAoMiA8IGFyZ2MpIHsKKwkJZXJyb3IoXygidG9vIG1hbnkgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19hZGRfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCW9iamVjdF9yZWYgPSBhcmdjID4gMSA/IGFyZ3ZbMV0gOiAiSEVBRCI7CisKKwlpZiAoZ2V0X29pZChvYmplY3RfcmVmLCAmb2JqZWN0KSkKKwkJZGllKF8oImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIG9iamVjdF9yZWYpOworCisJdCA9IGluaXRfbm90ZXNfY2hlY2soImFkZCIsIE5PVEVTX0lOSVRfV1JJVEFCTEUpOworCW5vdGUgPSBnZXRfbm90ZSh0LCAmb2JqZWN0KTsKKworCWlmIChub3RlKSB7CisJCWlmICghZm9yY2UpIHsKKwkJCWZyZWVfbm90ZXModCk7CisJCQlpZiAoZC5naXZlbikgeworCQkJCWZyZWVfbm90ZV9kYXRhKCZkKTsKKwkJCQlyZXR1cm4gZXJyb3IoXygiQ2Fubm90IGFkZCBub3Rlcy4gIgorCQkJCQkiRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gIgorCQkJCQkiVXNlICctZicgdG8gb3ZlcndyaXRlIGV4aXN0aW5nIG5vdGVzIiksCisJCQkJCW9pZF90b19oZXgoJm9iamVjdCkpOworCQkJfQorCQkJLyoKKwkJCSAqIFJlZGlyZWN0IHRvICJlZGl0IiBzdWJjb21tYW5kLgorCQkJICoKKwkJCSAqIFdlIG9ubHkgZW5kIHVwIGhlcmUgaWYgbm9uZSBvZiAtbS8tRi8tYy8tQyBvciAtZiBhcmUKKwkJCSAqIGdpdmVuLiBUaGUgb3JpZ2luYWwgYXJncyBhcmUgdGhlcmVmb3JlIHN0aWxsIGluCisJCQkgKiBhcmd2WzAtMV0uCisJCQkgKi8KKwkJCWFyZ3ZbMF0gPSAiZWRpdCI7CisJCQlyZXR1cm4gYXBwZW5kX2VkaXQoYXJnYywgYXJndiwgcHJlZml4KTsKKwkJfQorCQlmcHJpbnRmKHN0ZGVyciwgXygiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIiksCisJCQlvaWRfdG9faGV4KCZvYmplY3QpKTsKKwl9CisKKwlwcmVwYXJlX25vdGVfZGF0YSgmb2JqZWN0LCAmZCwgbm90ZSk7CisJaWYgKGQuYnVmLmxlbiB8fCBhbGxvd19lbXB0eSkgeworCQl3cml0ZV9ub3RlX2RhdGEoJmQsICZuZXdfbm90ZSk7CisJCWlmIChhZGRfbm90ZSh0LCAmb2JqZWN0LCAmbmV3X25vdGUsIGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlKSkKKwkJCUJVRygiY29tYmluZV9ub3Rlc19vdmVyd3JpdGUgZmFpbGVkIik7CisJCWNvbW1pdF9ub3Rlcyh0aGVfcmVwb3NpdG9yeSwgdCwKKwkJCSAgICAgIk5vdGVzIGFkZGVkIGJ5ICdnaXQgbm90ZXMgYWRkJyIpOworCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIpLAorCQkJb2lkX3RvX2hleCgmb2JqZWN0KSk7CisJCXJlbW92ZV9ub3RlKHQsIG9iamVjdC5oYXNoKTsKKwkJY29tbWl0X25vdGVzKHRoZV9yZXBvc2l0b3J5LCB0LAorCQkJICAgICAiTm90ZXMgcmVtb3ZlZCBieSAnZ2l0IG5vdGVzIGFkZCciKTsKKwl9CisKKwlmcmVlX25vdGVfZGF0YSgmZCk7CisJZnJlZV9ub3Rlcyh0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb3B5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCByZXR2YWwgPSAwLCBmb3JjZSA9IDAsIGZyb21fc3RkaW4gPSAwOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmZyb21fbm90ZSwgKm5vdGU7CisJY29uc3QgY2hhciAqb2JqZWN0X3JlZjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9iamVjdCwgZnJvbV9vYmo7CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJY29uc3QgY2hhciAqcmV3cml0ZV9jbWQgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX0ZPUkNFKCZmb3JjZSwgTl8oInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiKSwgUEFSU0VfT1BUX05PQ09NUExFVEUpLAorCQlPUFRfQk9PTCgwLCAic3RkaW4iLCAmZnJvbV9zdGRpbiwgTl8oInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIikpLAorCQlPUFRfU1RSSU5HKDAsICJmb3ItcmV3cml0ZSIsICZyZXdyaXRlX2NtZCwgTl8oImNvbW1hbmQiKSwKKwkJCSAgIE5fKCJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAiCisJCQkgICAgICAiLS1zdGRpbikiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF9ub3Rlc19jb3B5X3VzYWdlLAorCQkJICAgICAwKTsKKworCWlmIChmcm9tX3N0ZGluIHx8IHJld3JpdGVfY21kKSB7CisJCWlmIChhcmdjKSB7CisJCQllcnJvcihfKCJ0b28gbWFueSBwYXJhbWV0ZXJzIikpOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19jb3B5X3VzYWdlLCBvcHRpb25zKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBub3Rlc19jb3B5X2Zyb21fc3RkaW4oZm9yY2UsIHJld3JpdGVfY21kKTsKKwkJfQorCX0KKworCWlmIChhcmdjIDwgMSkgeworCQllcnJvcihfKCJ0b28gZmV3IHBhcmFtZXRlcnMiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfY29weV91c2FnZSwgb3B0aW9ucyk7CisJfQorCWlmICgyIDwgYXJnYykgeworCQllcnJvcihfKCJ0b28gbWFueSBwYXJhbWV0ZXJzIikpOworCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X25vdGVzX2NvcHlfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCWlmIChnZXRfb2lkKGFyZ3ZbMF0sICZmcm9tX29iaikpCisJCWRpZShfKCJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIpLCBhcmd2WzBdKTsKKworCW9iamVjdF9yZWYgPSAxIDwgYXJnYyA/IGFyZ3ZbMV0gOiAiSEVBRCI7CisKKwlpZiAoZ2V0X29pZChvYmplY3RfcmVmLCAmb2JqZWN0KSkKKwkJZGllKF8oImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIG9iamVjdF9yZWYpOworCisJdCA9IGluaXRfbm90ZXNfY2hlY2soImNvcHkiLCBOT1RFU19JTklUX1dSSVRBQkxFKTsKKwlub3RlID0gZ2V0X25vdGUodCwgJm9iamVjdCk7CisKKwlpZiAobm90ZSkgeworCQlpZiAoIWZvcmNlKSB7CisJCQlyZXR2YWwgPSBlcnJvcihfKCJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3RpbmcgIgorCQkJCSAgICAgICAibm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gIgorCQkJCSAgICAgICAib3ZlcndyaXRlIGV4aXN0aW5nIG5vdGVzIiksCisJCQkJICAgICAgIG9pZF90b19oZXgoJm9iamVjdCkpOworCQkJZ290byBvdXQ7CisJCX0KKwkJZnByaW50ZihzdGRlcnIsIF8oIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIpLAorCQkJb2lkX3RvX2hleCgmb2JqZWN0KSk7CisJfQorCisJZnJvbV9ub3RlID0gZ2V0X25vdGUodCwgJmZyb21fb2JqKTsKKwlpZiAoIWZyb21fbm90ZSkgeworCQlyZXR2YWwgPSBlcnJvcihfKCJtaXNzaW5nIG5vdGVzIG9uIHNvdXJjZSBvYmplY3QgJXMuIENhbm5vdCAiCisJCQkgICAgICAgImNvcHkuIiksIG9pZF90b19oZXgoJmZyb21fb2JqKSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChhZGRfbm90ZSh0LCAmb2JqZWN0LCBmcm9tX25vdGUsIGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlKSkKKwkJQlVHKCJjb21iaW5lX25vdGVzX292ZXJ3cml0ZSBmYWlsZWQiKTsKKwljb21taXRfbm90ZXModGhlX3JlcG9zaXRvcnksIHQsCisJCSAgICAgIk5vdGVzIGFkZGVkIGJ5ICdnaXQgbm90ZXMgY29weSciKTsKK291dDoKKwlmcmVlX25vdGVzKHQpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX2VkaXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGFsbG93X2VtcHR5ID0gMDsKKwljb25zdCBjaGFyICpvYmplY3RfcmVmOworCXN0cnVjdCBub3Rlc190cmVlICp0OworCXN0cnVjdCBvYmplY3RfaWQgb2JqZWN0LCBuZXdfbm90ZTsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpub3RlOworCWNoYXIgKmxvZ21zZzsKKwljb25zdCBjaGFyICogY29uc3QgKnVzYWdlOworCXN0cnVjdCBub3RlX2RhdGEgZCA9IHsgMCwgMCwgTlVMTCwgU1RSQlVGX0lOSVQgfTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0NBTExCQUNLX0YoJ20nLCAibWVzc2FnZSIsICZkLCBOXygibWVzc2FnZSIpLAorCQkJTl8oIm5vdGUgY29udGVudHMgYXMgYSBzdHJpbmciKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2VfbXNnX2FyZyksCisJCU9QVF9DQUxMQkFDS19GKCdGJywgImZpbGUiLCAmZCwgTl8oImZpbGUiKSwKKwkJCU5fKCJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9maWxlX2FyZyksCisJCU9QVF9DQUxMQkFDS19GKCdjJywgInJlZWRpdC1tZXNzYWdlIiwgJmQsIE5fKCJvYmplY3QiKSwKKwkJCU5fKCJyZXVzZSBhbmQgZWRpdCBzcGVjaWZpZWQgbm90ZSBvYmplY3QiKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2VfcmVlZGl0X2FyZyksCisJCU9QVF9DQUxMQkFDS19GKCdDJywgInJldXNlLW1lc3NhZ2UiLCAmZCwgTl8oIm9iamVjdCIpLAorCQkJTl8oInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9yZXVzZV9hcmcpLAorCQlPUFRfQk9PTCgwLCAiYWxsb3ctZW1wdHkiLCAmYWxsb3dfZW1wdHksCisJCQlOXygiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWludCBlZGl0ID0gIXN0cmNtcChhcmd2WzBdLCAiZWRpdCIpOworCisJdXNhZ2UgPSBlZGl0ID8gZ2l0X25vdGVzX2VkaXRfdXNhZ2UgOiBnaXRfbm90ZXNfYXBwZW5kX3VzYWdlOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKKworCWlmICgyIDwgYXJnYykgeworCQllcnJvcihfKCJ0b28gbWFueSBwYXJhbWV0ZXJzIikpOworCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2UsIG9wdGlvbnMpOworCX0KKworCWlmIChkLmdpdmVuICYmIGVkaXQpCisJCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCAiCisJCQkiZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKwkJCSJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIikpOworCisJb2JqZWN0X3JlZiA9IDEgPCBhcmdjID8gYXJndlsxXSA6ICJIRUFEIjsKKworCWlmIChnZXRfb2lkKG9iamVjdF9yZWYsICZvYmplY3QpKQorCQlkaWUoXygiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgb2JqZWN0X3JlZik7CisKKwl0ID0gaW5pdF9ub3Rlc19jaGVjayhhcmd2WzBdLCBOT1RFU19JTklUX1dSSVRBQkxFKTsKKwlub3RlID0gZ2V0X25vdGUodCwgJm9iamVjdCk7CisKKwlwcmVwYXJlX25vdGVfZGF0YSgmb2JqZWN0LCAmZCwgZWRpdCAmJiBub3RlID8gbm90ZSA6IE5VTEwpOworCisJaWYgKG5vdGUgJiYgIWVkaXQpIHsKKwkJLyogQXBwZW5kIGJ1ZiB0byBwcmV2aW91cyBub3RlIGNvbnRlbnRzICovCisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQljaGFyICpwcmV2X2J1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUobm90ZSwgJnR5cGUsICZzaXplKTsKKworCQlzdHJidWZfZ3JvdygmZC5idWYsIHNpemUgKyAxKTsKKwkJaWYgKGQuYnVmLmxlbiAmJiBwcmV2X2J1ZiAmJiBzaXplKQorCQkJc3RyYnVmX2luc2VydHN0cigmZC5idWYsIDAsICJcbiIpOworCQlpZiAocHJldl9idWYgJiYgc2l6ZSkKKwkJCXN0cmJ1Zl9pbnNlcnQoJmQuYnVmLCAwLCBwcmV2X2J1Ziwgc2l6ZSk7CisJCWZyZWUocHJldl9idWYpOworCX0KKworCWlmIChkLmJ1Zi5sZW4gfHwgYWxsb3dfZW1wdHkpIHsKKwkJd3JpdGVfbm90ZV9kYXRhKCZkLCAmbmV3X25vdGUpOworCQlpZiAoYWRkX25vdGUodCwgJm9iamVjdCwgJm5ld19ub3RlLCBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSkpCisJCQlCVUcoImNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlIGZhaWxlZCIpOworCQlsb2dtc2cgPSB4c3RyZm10KCJOb3RlcyBhZGRlZCBieSAnZ2l0IG5vdGVzICVzJyIsIGFyZ3ZbMF0pOworCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIpLAorCQkJb2lkX3RvX2hleCgmb2JqZWN0KSk7CisJCXJlbW92ZV9ub3RlKHQsIG9iamVjdC5oYXNoKTsKKwkJbG9nbXNnID0geHN0cmZtdCgiTm90ZXMgcmVtb3ZlZCBieSAnZ2l0IG5vdGVzICVzJyIsIGFyZ3ZbMF0pOworCX0KKwljb21taXRfbm90ZXModGhlX3JlcG9zaXRvcnksIHQsIGxvZ21zZyk7CisKKwlmcmVlKGxvZ21zZyk7CisJZnJlZV9ub3RlX2RhdGEoJmQpOworCWZyZWVfbm90ZXModCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvdyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpvYmplY3RfcmVmOworCXN0cnVjdCBub3Rlc190cmVlICp0OworCXN0cnVjdCBvYmplY3RfaWQgb2JqZWN0OworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5vdGU7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X25vdGVzX3Nob3dfdXNhZ2UsCisJCQkgICAgIDApOworCisJaWYgKDEgPCBhcmdjKSB7CisJCWVycm9yKF8oInRvbyBtYW55IHBhcmFtZXRlcnMiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfc2hvd191c2FnZSwgb3B0aW9ucyk7CisJfQorCisJb2JqZWN0X3JlZiA9IGFyZ2MgPyBhcmd2WzBdIDogIkhFQUQiOworCisJaWYgKGdldF9vaWQob2JqZWN0X3JlZiwgJm9iamVjdCkpCisJCWRpZShfKCJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIpLCBvYmplY3RfcmVmKTsKKworCXQgPSBpbml0X25vdGVzX2NoZWNrKCJzaG93IiwgMCk7CisJbm90ZSA9IGdldF9ub3RlKHQsICZvYmplY3QpOworCisJaWYgKCFub3RlKQorCQlyZXR2YWwgPSBlcnJvcihfKCJubyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIiksCisJCQkgICAgICAgb2lkX3RvX2hleCgmb2JqZWN0KSk7CisJZWxzZSB7CisJCWNvbnN0IGNoYXIgKnNob3dfYXJnc1szXSA9IHsic2hvdyIsIG9pZF90b19oZXgobm90ZSksIE5VTEx9OworCQlyZXR2YWwgPSBleGVjdl9naXRfY21kKHNob3dfYXJncyk7CisJfQorCWZyZWVfbm90ZXModCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBtZXJnZV9hYm9ydChzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbykKK3sKKwlpbnQgcmV0ID0gMDsKKworCS8qCisJICogUmVtb3ZlIC5naXQvTk9URVNfTUVSR0VfUEFSVElBTCBhbmQgLmdpdC9OT1RFU19NRVJHRV9SRUYsIGFuZCBjYWxsCisJICogbm90ZXNfbWVyZ2VfYWJvcnQoKSB0byByZW1vdmUgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS4KKwkgKi8KKworCWlmIChkZWxldGVfcmVmKE5VTEwsICJOT1RFU19NRVJHRV9QQVJUSUFMIiwgTlVMTCwgMCkpCisJCXJldCArPSBlcnJvcihfKCJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIikpOworCWlmIChkZWxldGVfcmVmKE5VTEwsICJOT1RFU19NRVJHRV9SRUYiLCBOVUxMLCBSRUZfTk9fREVSRUYpKQorCQlyZXQgKz0gZXJyb3IoXygiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUkVGIikpOworCWlmIChub3Rlc19tZXJnZV9hYm9ydChvKSkKKwkJcmV0ICs9IGVycm9yKF8oImZhaWxlZCB0byByZW1vdmUgJ2dpdCBub3RlcyBtZXJnZScgd29ya3RyZWUiKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtZXJnZV9jb21taXQoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8pCit7CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZCwgcGFyZW50X29pZDsKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdDsKKwlzdHJ1Y3QgY29tbWl0ICpwYXJ0aWFsOworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBwcmV0dHlfY3R4OworCXZvaWQgKmxvY2FsX3JlZl90b19mcmVlOworCWludCByZXQ7CisKKwkvKgorCSAqIFJlYWQgcGFydGlhbCBtZXJnZSByZXN1bHQgZnJvbSAuZ2l0L05PVEVTX01FUkdFX1BBUlRJQUwsCisJICogYW5kIHRhcmdldCBub3RlcyByZWYgZnJvbSAuZ2l0L05PVEVTX01FUkdFX1JFRi4KKwkgKi8KKworCWlmIChnZXRfb2lkKCJOT1RFU19NRVJHRV9QQVJUSUFMIiwgJm9pZCkpCisJCWRpZShfKCJmYWlsZWQgdG8gcmVhZCByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIpKTsKKwllbHNlIGlmICghKHBhcnRpYWwgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCkpKQorCQlkaWUoXygiY291bGQgbm90IGZpbmQgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iKSk7CisJZWxzZSBpZiAocGFyc2VfY29tbWl0KHBhcnRpYWwpKQorCQlkaWUoXygiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIikpOworCisJaWYgKHBhcnRpYWwtPnBhcmVudHMpCisJCW9pZGNweSgmcGFyZW50X29pZCwgJnBhcnRpYWwtPnBhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQpOworCWVsc2UKKwkJb2lkY2xyKCZwYXJlbnRfb2lkKTsKKworCXQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgbm90ZXNfdHJlZSkpOworCWluaXRfbm90ZXModCwgIk5PVEVTX01FUkdFX1BBUlRJQUwiLCBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSwgMCk7CisKKwlvLT5sb2NhbF9yZWYgPSBsb2NhbF9yZWZfdG9fZnJlZSA9CisJCXJlc29sdmVfcmVmZHVwKCJOT1RFU19NRVJHRV9SRUYiLCAwLCAmb2lkLCBOVUxMKTsKKwlpZiAoIW8tPmxvY2FsX3JlZikKKwkJZGllKF8oImZhaWxlZCB0byByZXNvbHZlIE5PVEVTX01FUkdFX1JFRiIpKTsKKworCWlmIChub3Rlc19tZXJnZV9jb21taXQobywgdCwgcGFydGlhbCwgJm9pZCkpCisJCWRpZShfKCJmYWlsZWQgdG8gZmluYWxpemUgbm90ZXMgbWVyZ2UiKSk7CisKKwkvKiBSZXVzZSBleGlzdGluZyBjb21taXQgbWVzc2FnZSBpbiByZWZsb2cgbWVzc2FnZSAqLworCW1lbXNldCgmcHJldHR5X2N0eCwgMCwgc2l6ZW9mKHByZXR0eV9jdHgpKTsKKwlmb3JtYXRfY29tbWl0X21lc3NhZ2UocGFydGlhbCwgIiVzIiwgJm1zZywgJnByZXR0eV9jdHgpOworCXN0cmJ1Zl90cmltKCZtc2cpOworCXN0cmJ1Zl9pbnNlcnRzdHIoJm1zZywgMCwgIm5vdGVzOiAiKTsKKwl1cGRhdGVfcmVmKG1zZy5idWYsIG8tPmxvY2FsX3JlZiwgJm9pZCwKKwkJICAgaXNfbnVsbF9vaWQoJnBhcmVudF9vaWQpID8gTlVMTCA6ICZwYXJlbnRfb2lkLAorCQkgICAwLCBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKworCWZyZWVfbm90ZXModCk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7CisJcmV0ID0gbWVyZ2VfYWJvcnQobyk7CisJZnJlZShsb2NhbF9yZWZfdG9fZnJlZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnaXRfY29uZmlnX2dldF9ub3Rlc19zdHJhdGVneShjb25zdCBjaGFyICprZXksCisJCQkJCSBlbnVtIG5vdGVzX21lcmdlX3N0cmF0ZWd5ICpzdHJhdGVneSkKK3sKKwljaGFyICp2YWx1ZTsKKworCWlmIChnaXRfY29uZmlnX2dldF9zdHJpbmcoa2V5LCAmdmFsdWUpKQorCQlyZXR1cm4gMTsKKwlpZiAocGFyc2Vfbm90ZXNfbWVyZ2Vfc3RyYXRlZ3kodmFsdWUsIHN0cmF0ZWd5KSkKKwkJZ2l0X2RpZV9jb25maWcoa2V5LCBfKCJ1bmtub3duIG5vdGVzIG1lcmdlIHN0cmF0ZWd5ICVzIiksIHZhbHVlKTsKKworCWZyZWUodmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lcmdlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgcmVtb3RlX3JlZiA9IFNUUkJVRl9JTklULCBtc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHJlc3VsdF9vaWQ7CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgbzsKKwlpbnQgZG9fbWVyZ2UgPSAwLCBkb19jb21taXQgPSAwLCBkb19hYm9ydCA9IDA7CisJaW50IHZlcmJvc2l0eSA9IDAsIHJlc3VsdDsKKwljb25zdCBjaGFyICpzdHJhdGVneSA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9HUk9VUChOXygiR2VuZXJhbCBvcHRpb25zIikpLAorCQlPUFRfX1ZFUkJPU0lUWSgmdmVyYm9zaXR5KSwKKwkJT1BUX0dST1VQKE5fKCJNZXJnZSBvcHRpb25zIikpLAorCQlPUFRfU1RSSU5HKCdzJywgInN0cmF0ZWd5IiwgJnN0cmF0ZWd5LCBOXygic3RyYXRlZ3kiKSwKKwkJCSAgIE5fKCJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgIgorCQkJICAgICAgIihtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vY2F0X3NvcnRfdW5pcSkiKSksCisJCU9QVF9HUk9VUChOXygiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIpKSwKKwkJT1BUX1NFVF9JTlRfRigwLCAiY29tbWl0IiwgJmRvX2NvbW1pdCwKKwkJCSAgICAgIE5fKCJmaW5hbGl6ZSBub3RlcyBtZXJnZSBieSBjb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIiksCisJCQkgICAgICAxLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfR1JPVVAoTl8oIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iKSksCisJCU9QVF9TRVRfSU5UX0YoMCwgImFib3J0IiwgJmRvX2Fib3J0LAorCQkJICAgICAgTl8oImFib3J0IG5vdGVzIG1lcmdlIiksCisJCQkgICAgICAxLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfbm90ZXNfbWVyZ2VfdXNhZ2UsIDApOworCisJaWYgKHN0cmF0ZWd5IHx8IGRvX2NvbW1pdCArIGRvX2Fib3J0ID09IDApCisJCWRvX21lcmdlID0gMTsKKwlpZiAoZG9fbWVyZ2UgKyBkb19jb21taXQgKyBkb19hYm9ydCAhPSAxKSB7CisJCWVycm9yKF8oImNhbm5vdCBtaXggLS1jb21taXQsIC0tYWJvcnQgb3IgLXMvLS1zdHJhdGVneSIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19tZXJnZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKGRvX21lcmdlICYmIGFyZ2MgIT0gMSkgeworCQllcnJvcihfKCJtdXN0IHNwZWNpZnkgYSBub3RlcyByZWYgdG8gbWVyZ2UiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfbWVyZ2VfdXNhZ2UsIG9wdGlvbnMpOworCX0gZWxzZSBpZiAoIWRvX21lcmdlICYmIGFyZ2MpIHsKKwkJZXJyb3IoXygidG9vIG1hbnkgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19tZXJnZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaW5pdF9ub3Rlc19tZXJnZV9vcHRpb25zKHRoZV9yZXBvc2l0b3J5LCAmbyk7CisJby52ZXJib3NpdHkgPSB2ZXJib3NpdHkgKyBOT1RFU19NRVJHRV9WRVJCT1NJVFlfREVGQVVMVDsKKworCWlmIChkb19hYm9ydCkKKwkJcmV0dXJuIG1lcmdlX2Fib3J0KCZvKTsKKwlpZiAoZG9fY29tbWl0KQorCQlyZXR1cm4gbWVyZ2VfY29tbWl0KCZvKTsKKworCW8ubG9jYWxfcmVmID0gZGVmYXVsdF9ub3Rlc19yZWYoKTsKKwlzdHJidWZfYWRkc3RyKCZyZW1vdGVfcmVmLCBhcmd2WzBdKTsKKwlleHBhbmRfbG9vc2Vfbm90ZXNfcmVmKCZyZW1vdGVfcmVmKTsKKwlvLnJlbW90ZV9yZWYgPSByZW1vdGVfcmVmLmJ1ZjsKKworCXQgPSBpbml0X25vdGVzX2NoZWNrKCJtZXJnZSIsIE5PVEVTX0lOSVRfV1JJVEFCTEUpOworCisJaWYgKHN0cmF0ZWd5KSB7CisJCWlmIChwYXJzZV9ub3Rlc19tZXJnZV9zdHJhdGVneShzdHJhdGVneSwgJm8uc3RyYXRlZ3kpKSB7CisJCQllcnJvcihfKCJ1bmtub3duIC1zLy0tc3RyYXRlZ3k6ICVzIiksIHN0cmF0ZWd5KTsKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfbWVyZ2VfdXNhZ2UsIG9wdGlvbnMpOworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBtZXJnZV9rZXkgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqc2hvcnRfcmVmID0gTlVMTDsKKworCQlpZiAoIXNraXBfcHJlZml4KG8ubG9jYWxfcmVmLCAicmVmcy9ub3Rlcy8iLCAmc2hvcnRfcmVmKSkKKwkJCUJVRygibG9jYWwgcmVmICVzIGlzIG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8iLAorCQkJICAgIG8ubG9jYWxfcmVmKTsKKworCQlzdHJidWZfYWRkZigmbWVyZ2Vfa2V5LCAibm90ZXMuJXMubWVyZ2VTdHJhdGVneSIsIHNob3J0X3JlZik7CisKKwkJaWYgKGdpdF9jb25maWdfZ2V0X25vdGVzX3N0cmF0ZWd5KG1lcmdlX2tleS5idWYsICZvLnN0cmF0ZWd5KSkKKwkJCWdpdF9jb25maWdfZ2V0X25vdGVzX3N0cmF0ZWd5KCJub3Rlcy5tZXJnZVN0cmF0ZWd5IiwgJm8uc3RyYXRlZ3kpOworCisJCXN0cmJ1Zl9yZWxlYXNlKCZtZXJnZV9rZXkpOworCX0KKworCXN0cmJ1Zl9hZGRmKCZtc2csICJub3RlczogTWVyZ2VkIG5vdGVzIGZyb20gJXMgaW50byAlcyIsCisJCSAgICByZW1vdGVfcmVmLmJ1ZiwgZGVmYXVsdF9ub3Rlc19yZWYoKSk7CisJc3RyYnVmX2FkZCgmKG8uY29tbWl0X21zZyksIG1zZy5idWYgKyA3LCBtc2cubGVuIC0gNyk7IC8qIHNraXAgIm5vdGVzOiAiICovCisKKwlyZXN1bHQgPSBub3Rlc19tZXJnZSgmbywgdCwgJnJlc3VsdF9vaWQpOworCisJaWYgKHJlc3VsdCA+PSAwKSAvKiBNZXJnZSByZXN1bHRlZCAodHJpdmlhbGx5KSBpbiByZXN1bHRfb2lkICovCisJCS8qIFVwZGF0ZSBkZWZhdWx0IG5vdGVzIHJlZiB3aXRoIG5ldyBjb21taXQgKi8KKwkJdXBkYXRlX3JlZihtc2cuYnVmLCBkZWZhdWx0X25vdGVzX3JlZigpLCAmcmVzdWx0X29pZCwgTlVMTCwgMCwKKwkJCSAgIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCWVsc2UgeyAvKiBNZXJnZSBoYXMgdW5yZXNvbHZlZCBjb25mbGljdHMgKi8KKwkJY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dDsKKwkJLyogVXBkYXRlIC5naXQvTk9URVNfTUVSR0VfUEFSVElBTCB3aXRoIHBhcnRpYWwgbWVyZ2UgcmVzdWx0ICovCisJCXVwZGF0ZV9yZWYobXNnLmJ1ZiwgIk5PVEVTX01FUkdFX1BBUlRJQUwiLCAmcmVzdWx0X29pZCwgTlVMTCwKKwkJCSAgIDAsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCQkvKiBTdG9yZSByZWYtdG8tYmUtdXBkYXRlZCBpbnRvIC5naXQvTk9URVNfTUVSR0VfUkVGICovCisJCXd0ID0gZmluZF9zaGFyZWRfc3ltcmVmKCJOT1RFU19NRVJHRV9SRUYiLCBkZWZhdWx0X25vdGVzX3JlZigpKTsKKwkJaWYgKHd0KQorCQkJZGllKF8oImEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIiksCisJCQkgICAgZGVmYXVsdF9ub3Rlc19yZWYoKSwgd3QtPnBhdGgpOworCQlpZiAoY3JlYXRlX3N5bXJlZigiTk9URVNfTUVSR0VfUkVGIiwgZGVmYXVsdF9ub3Rlc19yZWYoKSwgTlVMTCkpCisJCQlkaWUoXygiZmFpbGVkIHRvIHN0b3JlIGxpbmsgdG8gY3VycmVudCBub3RlcyByZWYgKCVzKSIpLAorCQkJICAgIGRlZmF1bHRfbm90ZXNfcmVmKCkpOworCQlmcHJpbnRmKHN0ZGVyciwgXygiQXV0b21hdGljIG5vdGVzIG1lcmdlIGZhaWxlZC4gRml4IGNvbmZsaWN0cyBpbiAlcyAiCisJCQkJICAiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsICIKKwkJCQkgICJvciBhYm9ydCB0aGUgbWVyZ2Ugd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnLlxuIiksCisJCQlnaXRfcGF0aChOT1RFU19NRVJHRV9XT1JLVFJFRSkpOworCX0KKworCWZyZWVfbm90ZXModCk7CisJc3RyYnVmX3JlbGVhc2UoJnJlbW90ZV9yZWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworCXJldHVybiByZXN1bHQgPCAwOyAvKiByZXR1cm4gbm9uLXplcm8gb24gY29uZmxpY3RzICovCit9CisKKyNkZWZpbmUgSUdOT1JFX01JU1NJTkcgMQorCitzdGF0aWMgaW50IHJlbW92ZV9vbmVfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgZmxhZykKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWlmIChnZXRfb2lkKG5hbWUsICZvaWQpKQorCQlyZXR1cm4gZXJyb3IoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgbmFtZSk7CisJc3RhdHVzID0gcmVtb3ZlX25vdGUodCwgb2lkLmhhc2gpOworCWlmIChzdGF0dXMpCisJCWZwcmludGYoc3RkZXJyLCBfKCJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIpLCBuYW1lKTsKKwllbHNlCisJCWZwcmludGYoc3RkZXJyLCBfKCJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIpLCBuYW1lKTsKKwlyZXR1cm4gKGZsYWcgJiBJR05PUkVfTUlTU0lORykgPyAwIDogc3RhdHVzOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9jbWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJdW5zaWduZWQgZmxhZyA9IDA7CisJaW50IGZyb21fc3RkaW4gPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQklUKDAsICJpZ25vcmUtbWlzc2luZyIsICZmbGFnLAorCQkJTl8oImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIpLAorCQkJSUdOT1JFX01JU1NJTkcpLAorCQlPUFRfQk9PTCgwLCAic3RkaW4iLCAmZnJvbV9zdGRpbiwKKwkJCSAgICBOXygicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiKSksCisJCU9QVF9FTkQoKQorCX07CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJaW50IHJldHZhbCA9IDA7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9ub3Rlc19yZW1vdmVfdXNhZ2UsIDApOworCisJdCA9IGluaXRfbm90ZXNfY2hlY2soInJlbW92ZSIsIE5PVEVTX0lOSVRfV1JJVEFCTEUpOworCisJaWYgKCFhcmdjICYmICFmcm9tX3N0ZGluKSB7CisJCXJldHZhbCA9IHJlbW92ZV9vbmVfbm90ZSh0LCAiSEVBRCIsIGZsYWcpOworCX0gZWxzZSB7CisJCXdoaWxlICgqYXJndikgeworCQkJcmV0dmFsIHw9IHJlbW92ZV9vbmVfbm90ZSh0LCAqYXJndiwgZmxhZyk7CisJCQlhcmd2Kys7CisJCX0KKwl9CisJaWYgKGZyb21fc3RkaW4pIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQl3aGlsZSAoc3RyYnVmX2dldHdob2xlbGluZSgmc2IsIHN0ZGluLCAnXG4nKSAhPSBFT0YpIHsKKwkJCXN0cmJ1Zl9ydHJpbSgmc2IpOworCQkJcmV0dmFsIHw9IHJlbW92ZV9vbmVfbm90ZSh0LCBzYi5idWYsIGZsYWcpOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJfQorCWlmICghcmV0dmFsKQorCQljb21taXRfbm90ZXModGhlX3JlcG9zaXRvcnksIHQsCisJCQkgICAgICJOb3RlcyByZW1vdmVkIGJ5ICdnaXQgbm90ZXMgcmVtb3ZlJyIpOworCWZyZWVfbm90ZXModCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBwcnVuZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdDsKKwlpbnQgc2hvd19vbmx5ID0gMCwgdmVyYm9zZSA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fRFJZX1JVTigmc2hvd19vbmx5LCBOXygiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IikpLAorCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJyZXBvcnQgcHJ1bmVkIG5vdGVzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBnaXRfbm90ZXNfcHJ1bmVfdXNhZ2UsCisJCQkgICAgIDApOworCisJaWYgKGFyZ2MpIHsKKwkJZXJyb3IoXygidG9vIG1hbnkgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19wcnVuZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJdCA9IGluaXRfbm90ZXNfY2hlY2soInBydW5lIiwgTk9URVNfSU5JVF9XUklUQUJMRSk7CisKKwlwcnVuZV9ub3Rlcyh0LCAodmVyYm9zZSA/IE5PVEVTX1BSVU5FX1ZFUkJPU0UgOiAwKSB8CisJCShzaG93X29ubHkgPyBOT1RFU19QUlVORV9WRVJCT1NFfE5PVEVTX1BSVU5FX0RSWVJVTiA6IDApICk7CisJaWYgKCFzaG93X29ubHkpCisJCWNvbW1pdF9ub3Rlcyh0aGVfcmVwb3NpdG9yeSwgdCwKKwkJCSAgICAgIk5vdGVzIHJlbW92ZWQgYnkgJ2dpdCBub3RlcyBwcnVuZSciKTsKKwlmcmVlX25vdGVzKHQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9yZWYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7IE9QVF9FTkQoKSB9OworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgZ2l0X25vdGVzX2dldF9yZWZfdXNhZ2UsIDApOworCisJaWYgKGFyZ2MpIHsKKwkJZXJyb3IoXygidG9vIG1hbnkgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19nZXRfcmVmX3VzYWdlLCBvcHRpb25zKTsKKwl9CisKKwlwdXRzKGRlZmF1bHRfbm90ZXNfcmVmKCkpOworCXJldHVybiAwOworfQorCitpbnQgY21kX25vdGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCByZXN1bHQ7CisJY29uc3QgY2hhciAqb3ZlcnJpZGVfbm90ZXNfcmVmID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAicmVmIiwgJm92ZXJyaWRlX25vdGVzX3JlZiwgTl8oIm5vdGVzLXJlZiIpLAorCQkJICAgTl8oInVzZSBub3RlcyBmcm9tIDxub3Rlcy1yZWY+IikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X25vdGVzX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKworCWlmIChvdmVycmlkZV9ub3Rlc19yZWYpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkc3RyKCZzYiwgb3ZlcnJpZGVfbm90ZXNfcmVmKTsKKwkJZXhwYW5kX25vdGVzX3JlZigmc2IpOworCQlzZXRlbnYoIkdJVF9OT1RFU19SRUYiLCBzYi5idWYsIDEpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCX0KKworCWlmIChhcmdjIDwgMSB8fCAhc3RyY21wKGFyZ3ZbMF0sICJsaXN0IikpCisJCXJlc3VsdCA9IGxpc3QoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJhZGQiKSkKKwkJcmVzdWx0ID0gYWRkKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiY29weSIpKQorCQlyZXN1bHQgPSBjb3B5KGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiYXBwZW5kIikgfHwgIXN0cmNtcChhcmd2WzBdLCAiZWRpdCIpKQorCQlyZXN1bHQgPSBhcHBlbmRfZWRpdChhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInNob3ciKSkKKwkJcmVzdWx0ID0gc2hvdyhhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgIm1lcmdlIikpCisJCXJlc3VsdCA9IG1lcmdlKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAicmVtb3ZlIikpCisJCXJlc3VsdCA9IHJlbW92ZV9jbWQoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJwcnVuZSIpKQorCQlyZXN1bHQgPSBwcnVuZShhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImdldC1yZWYiKSkKKwkJcmVzdWx0ID0gZ2V0X3JlZihhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgeworCQlyZXN1bHQgPSBlcnJvcihfKCJ1bmtub3duIHN1YmNvbW1hbmQ6ICVzIiksIGFyZ3ZbMF0pOworCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X25vdGVzX3VzYWdlLCBvcHRpb25zKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0ID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3BhY2stb2JqZWN0cy5jIGIvYnVpbHRpbi9wYWNrLW9iamVjdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWI0MzNhCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9wYWNrLW9iamVjdHMuYwpAQCAtMCwwICsxLDM2NjQgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAicGFjay1yZXZpbmRleC5oIgorI2luY2x1ZGUgImNzdW0tZmlsZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXIuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJwYWNrLW9iamVjdHMuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKyNpbmNsdWRlICJ0aHJlYWQtdXRpbHMuaCIKKyNpbmNsdWRlICJwYWNrLWJpdG1hcC5oIgorI2luY2x1ZGUgImRlbHRhLWlzbGFuZHMuaCIKKyNpbmNsdWRlICJyZWFjaGFibGUuaCIKKyNpbmNsdWRlICJvaWQtYXJyYXkuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAibGlzdC5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAibWlkeC5oIgorI2luY2x1ZGUgInRyYWNlMi5oIgorI2luY2x1ZGUgInNoYWxsb3cuaCIKKworI2RlZmluZSBJTl9QQUNLKG9iaikgb2VfaW5fcGFjaygmdG9fcGFjaywgb2JqKQorI2RlZmluZSBTSVpFKG9iaikgb2Vfc2l6ZSgmdG9fcGFjaywgb2JqKQorI2RlZmluZSBTRVRfU0laRShvYmosc2l6ZSkgb2Vfc2V0X3NpemUoJnRvX3BhY2ssIG9iaiwgc2l6ZSkKKyNkZWZpbmUgREVMVEFfU0laRShvYmopIG9lX2RlbHRhX3NpemUoJnRvX3BhY2ssIG9iaikKKyNkZWZpbmUgREVMVEEob2JqKSBvZV9kZWx0YSgmdG9fcGFjaywgb2JqKQorI2RlZmluZSBERUxUQV9DSElMRChvYmopIG9lX2RlbHRhX2NoaWxkKCZ0b19wYWNrLCBvYmopCisjZGVmaW5lIERFTFRBX1NJQkxJTkcob2JqKSBvZV9kZWx0YV9zaWJsaW5nKCZ0b19wYWNrLCBvYmopCisjZGVmaW5lIFNFVF9ERUxUQShvYmosIHZhbCkgb2Vfc2V0X2RlbHRhKCZ0b19wYWNrLCBvYmosIHZhbCkKKyNkZWZpbmUgU0VUX0RFTFRBX0VYVChvYmosIG9pZCkgb2Vfc2V0X2RlbHRhX2V4dCgmdG9fcGFjaywgb2JqLCBvaWQpCisjZGVmaW5lIFNFVF9ERUxUQV9TSVpFKG9iaiwgdmFsKSBvZV9zZXRfZGVsdGFfc2l6ZSgmdG9fcGFjaywgb2JqLCB2YWwpCisjZGVmaW5lIFNFVF9ERUxUQV9DSElMRChvYmosIHZhbCkgb2Vfc2V0X2RlbHRhX2NoaWxkKCZ0b19wYWNrLCBvYmosIHZhbCkKKyNkZWZpbmUgU0VUX0RFTFRBX1NJQkxJTkcob2JqLCB2YWwpIG9lX3NldF9kZWx0YV9zaWJsaW5nKCZ0b19wYWNrLCBvYmosIHZhbCkKKworc3RhdGljIGNvbnN0IGNoYXIgKnBhY2tfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+Li4uXSBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIpLAorCU5fKCJnaXQgcGFjay1vYmplY3RzIFs8b3B0aW9ucz4uLi5dIDxiYXNlLW5hbWU+IFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIiksCisJTlVMTAorfTsKKworLyoKKyAqIE9iamVjdHMgd2UgYXJlIGdvaW5nIHRvIHBhY2sgYXJlIGNvbGxlY3RlZCBpbiB0aGUgYHRvX3BhY2tgIHN0cnVjdHVyZS4KKyAqIEl0IGNvbnRhaW5zIGFuIGFycmF5IChkeW5hbWljYWxseSBleHBhbmRlZCkgb2YgdGhlIG9iamVjdCBkYXRhLCBhbmQgYSBtYXAKKyAqIHRoYXQgY2FuIHJlc29sdmUgU0hBMXMgdG8gdGhlaXIgcG9zaXRpb24gaW4gdGhlIGFycmF5LgorICovCitzdGF0aWMgc3RydWN0IHBhY2tpbmdfZGF0YSB0b19wYWNrOworCitzdGF0aWMgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqd3JpdHRlbl9saXN0Oworc3RhdGljIHVpbnQzMl90IG5yX3Jlc3VsdCwgbnJfd3JpdHRlbiwgbnJfc2VlbjsKK3N0YXRpYyBzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0Oworc3RhdGljIHVpbnQzMl90IHdyaXRlX2xheWVyOworCitzdGF0aWMgaW50IG5vbl9lbXB0eTsKK3N0YXRpYyBpbnQgcmV1c2VfZGVsdGEgPSAxLCByZXVzZV9vYmplY3QgPSAxOworc3RhdGljIGludCBrZWVwX3VucmVhY2hhYmxlLCB1bnBhY2tfdW5yZWFjaGFibGUsIGluY2x1ZGVfdGFnOworc3RhdGljIHRpbWVzdGFtcF90IHVucGFja191bnJlYWNoYWJsZV9leHBpcmF0aW9uOworc3RhdGljIGludCBwYWNrX2xvb3NlX3VucmVhY2hhYmxlOworc3RhdGljIGludCBsb2NhbDsKK3N0YXRpYyBpbnQgaGF2ZV9ub25fbG9jYWxfcGFja3M7CitzdGF0aWMgaW50IGluY3JlbWVudGFsOworc3RhdGljIGludCBpZ25vcmVfcGFja2VkX2tlZXBfb25fZGlzazsKK3N0YXRpYyBpbnQgaWdub3JlX3BhY2tlZF9rZWVwX2luX2NvcmU7CitzdGF0aWMgaW50IGFsbG93X29mc19kZWx0YTsKK3N0YXRpYyBzdHJ1Y3QgcGFja19pZHhfb3B0aW9uIHBhY2tfaWR4X29wdHM7CitzdGF0aWMgY29uc3QgY2hhciAqYmFzZV9uYW1lOworc3RhdGljIGludCBwcm9ncmVzcyA9IDE7CitzdGF0aWMgaW50IHdpbmRvdyA9IDEwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFja19zaXplX2xpbWl0Oworc3RhdGljIGludCBkZXB0aCA9IDUwOworc3RhdGljIGludCBkZWx0YV9zZWFyY2hfdGhyZWFkczsKK3N0YXRpYyBpbnQgcGFja190b19zdGRvdXQ7CitzdGF0aWMgaW50IHNwYXJzZTsKK3N0YXRpYyBpbnQgdGhpbjsKK3N0YXRpYyBpbnQgbnVtX3ByZWZlcnJlZF9iYXNlOworc3RhdGljIHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3Nfc3RhdGU7CisKK3N0YXRpYyBzdHJ1Y3QgcGFja2VkX2dpdCAqcmV1c2VfcGFja2ZpbGU7CitzdGF0aWMgdWludDMyX3QgcmV1c2VfcGFja2ZpbGVfb2JqZWN0czsKK3N0YXRpYyBzdHJ1Y3QgYml0bWFwICpyZXVzZV9wYWNrZmlsZV9iaXRtYXA7CisKK3N0YXRpYyBpbnQgdXNlX2JpdG1hcF9pbmRleF9kZWZhdWx0ID0gMTsKK3N0YXRpYyBpbnQgdXNlX2JpdG1hcF9pbmRleCA9IC0xOworc3RhdGljIGludCBhbGxvd19wYWNrX3JldXNlID0gMTsKK3N0YXRpYyBlbnVtIHsKKwlXUklURV9CSVRNQVBfRkFMU0UgPSAwLAorCVdSSVRFX0JJVE1BUF9RVUlFVCwKKwlXUklURV9CSVRNQVBfVFJVRSwKK30gd3JpdGVfYml0bWFwX2luZGV4Oworc3RhdGljIHVpbnQxNl90IHdyaXRlX2JpdG1hcF9vcHRpb25zID0gQklUTUFQX09QVF9IQVNIX0NBQ0hFOworCitzdGF0aWMgaW50IGV4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0czsKKworc3RhdGljIGludCB1c2VfZGVsdGFfaXNsYW5kczsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsdGFfY2FjaGVfc2l6ZSA9IDA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhfZGVsdGFfY2FjaGVfc2l6ZSA9IERFRkFVTFRfREVMVEFfQ0FDSEVfU0laRTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNhY2hlX21heF9zbWFsbF9kZWx0YV9zaXplID0gMTAwMDsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgd2luZG93X21lbW9yeV9saW1pdCA9IDA7CisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zIGZpbHRlcl9vcHRpb25zOworCitlbnVtIG1pc3NpbmdfYWN0aW9uIHsKKwlNQV9FUlJPUiA9IDAsICAgICAgLyogZmFpbCBpZiBhbnkgbWlzc2luZyBvYmplY3RzIGFyZSBlbmNvdW50ZXJlZCAqLworCU1BX0FMTE9XX0FOWSwgICAgICAvKiBzaWxlbnRseSBhbGxvdyBBTEwgbWlzc2luZyBvYmplY3RzICovCisJTUFfQUxMT1dfUFJPTUlTT1IsIC8qIHNpbGVudGx5IGFsbG93IGFsbCBtaXNzaW5nIFBST01JU09SIG9iamVjdHMgKi8KK307CitzdGF0aWMgZW51bSBtaXNzaW5nX2FjdGlvbiBhcmdfbWlzc2luZ19hY3Rpb247CitzdGF0aWMgc2hvd19vYmplY3RfZm4gZm5fc2hvd19vYmplY3Q7CisKKy8qCisgKiBzdGF0cworICovCitzdGF0aWMgdWludDMyX3Qgd3JpdHRlbiwgd3JpdHRlbl9kZWx0YTsKK3N0YXRpYyB1aW50MzJfdCByZXVzZWQsIHJldXNlZF9kZWx0YTsKKworLyoKKyAqIEluZGV4ZWQgY29tbWl0cworICovCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqKmluZGV4ZWRfY29tbWl0czsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5kZXhlZF9jb21taXRzX25yOworc3RhdGljIHVuc2lnbmVkIGludCBpbmRleGVkX2NvbW1pdHNfYWxsb2M7CisKK3N0YXRpYyB2b2lkIGluZGV4X2NvbW1pdF9mb3JfYml0bWFwKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpZiAoaW5kZXhlZF9jb21taXRzX25yID49IGluZGV4ZWRfY29tbWl0c19hbGxvYykgeworCQlpbmRleGVkX2NvbW1pdHNfYWxsb2MgPSAoaW5kZXhlZF9jb21taXRzX2FsbG9jICsgMzIpICogMjsKKwkJUkVBTExPQ19BUlJBWShpbmRleGVkX2NvbW1pdHMsIGluZGV4ZWRfY29tbWl0c19hbGxvYyk7CisJfQorCisJaW5kZXhlZF9jb21taXRzW2luZGV4ZWRfY29tbWl0c19ucisrXSA9IGNvbW1pdDsKK30KKworc3RhdGljIHZvaWQgKmdldF9kZWx0YShzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUsIGJhc2Vfc2l6ZSwgZGVsdGFfc2l6ZTsKKwl2b2lkICpidWYsICpiYXNlX2J1ZiwgKmRlbHRhX2J1ZjsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwlidWYgPSByZWFkX29iamVjdF9maWxlKCZlbnRyeS0+aWR4Lm9pZCwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZikKKwkJZGllKF8oInVuYWJsZSB0byByZWFkICVzIiksIG9pZF90b19oZXgoJmVudHJ5LT5pZHgub2lkKSk7CisJYmFzZV9idWYgPSByZWFkX29iamVjdF9maWxlKCZERUxUQShlbnRyeSktPmlkeC5vaWQsICZ0eXBlLAorCQkJCSAgICAmYmFzZV9zaXplKTsKKwlpZiAoIWJhc2VfYnVmKQorCQlkaWUoInVuYWJsZSB0byByZWFkICVzIiwKKwkJICAgIG9pZF90b19oZXgoJkRFTFRBKGVudHJ5KS0+aWR4Lm9pZCkpOworCWRlbHRhX2J1ZiA9IGRpZmZfZGVsdGEoYmFzZV9idWYsIGJhc2Vfc2l6ZSwKKwkJCSAgICAgICBidWYsIHNpemUsICZkZWx0YV9zaXplLCAwKTsKKwkvKgorCSAqIFdlIHN1Y2Nlc3NmdWxseSBjb21wdXRlZCB0aGlzIGRlbHRhIG9uY2UgYnV0IGRyb3BwZWQgaXQgZm9yCisJICogbWVtb3J5IHJlYXNvbnMuIFNvbWV0aGluZyBpcyB2ZXJ5IHdyb25nIGlmIHRoaXMgdGltZSB3ZQorCSAqIHJlY29tcHV0ZSBhbmQgY3JlYXRlIGEgZGlmZmVyZW50IGRlbHRhLgorCSAqLworCWlmICghZGVsdGFfYnVmIHx8IGRlbHRhX3NpemUgIT0gREVMVEFfU0laRShlbnRyeSkpCisJCUJVRygiZGVsdGEgc2l6ZSBjaGFuZ2VkIik7CisJZnJlZShidWYpOworCWZyZWUoYmFzZV9idWYpOworCXJldHVybiBkZWx0YV9idWY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRvX2NvbXByZXNzKHZvaWQgKipwcHRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCXZvaWQgKmluLCAqb3V0OworCXVuc2lnbmVkIGxvbmcgbWF4c2l6ZTsKKworCWdpdF9kZWZsYXRlX2luaXQoJnN0cmVhbSwgcGFja19jb21wcmVzc2lvbl9sZXZlbCk7CisJbWF4c2l6ZSA9IGdpdF9kZWZsYXRlX2JvdW5kKCZzdHJlYW0sIHNpemUpOworCisJaW4gPSAqcHB0cjsKKwlvdXQgPSB4bWFsbG9jKG1heHNpemUpOworCSpwcHRyID0gb3V0OworCisJc3RyZWFtLm5leHRfaW4gPSBpbjsKKwlzdHJlYW0uYXZhaWxfaW4gPSBzaXplOworCXN0cmVhbS5uZXh0X291dCA9IG91dDsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gbWF4c2l6ZTsKKwl3aGlsZSAoZ2l0X2RlZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpID09IFpfT0spCisJCTsgLyogbm90aGluZyAqLworCWdpdF9kZWZsYXRlX2VuZCgmc3RyZWFtKTsKKworCWZyZWUoaW4pOworCXJldHVybiBzdHJlYW0udG90YWxfb3V0OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB3cml0ZV9sYXJnZV9ibG9iX2RhdGEoc3RydWN0IGdpdF9pc3RyZWFtICpzdCwgc3RydWN0IGhhc2hmaWxlICpmLAorCQkJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCXVuc2lnbmVkIGNoYXIgaWJ1ZlsxMDI0ICogMTZdOworCXVuc2lnbmVkIGNoYXIgb2J1ZlsxMDI0ICogMTZdOworCXVuc2lnbmVkIGxvbmcgb2xlbiA9IDA7CisKKwlnaXRfZGVmbGF0ZV9pbml0KCZzdHJlYW0sIHBhY2tfY29tcHJlc3Npb25fbGV2ZWwpOworCisJZm9yICg7OykgeworCQlzc2l6ZV90IHJlYWRsZW47CisJCWludCB6cmV0ID0gWl9PSzsKKwkJcmVhZGxlbiA9IHJlYWRfaXN0cmVhbShzdCwgaWJ1Ziwgc2l6ZW9mKGlidWYpKTsKKwkJaWYgKHJlYWRsZW4gPT0gLTEpCisJCQlkaWUoXygidW5hYmxlIHRvIHJlYWQgJXMiKSwgb2lkX3RvX2hleChvaWQpKTsKKworCQlzdHJlYW0ubmV4dF9pbiA9IGlidWY7CisJCXN0cmVhbS5hdmFpbF9pbiA9IHJlYWRsZW47CisJCXdoaWxlICgoc3RyZWFtLmF2YWlsX2luIHx8IHJlYWRsZW4gPT0gMCkgJiYKKwkJICAgICAgICh6cmV0ID09IFpfT0sgfHwgenJldCA9PSBaX0JVRl9FUlJPUikpIHsKKwkJCXN0cmVhbS5uZXh0X291dCA9IG9idWY7CisJCQlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKG9idWYpOworCQkJenJldCA9IGdpdF9kZWZsYXRlKCZzdHJlYW0sIHJlYWRsZW4gPyAwIDogWl9GSU5JU0gpOworCQkJaGFzaHdyaXRlKGYsIG9idWYsIHN0cmVhbS5uZXh0X291dCAtIG9idWYpOworCQkJb2xlbiArPSBzdHJlYW0ubmV4dF9vdXQgLSBvYnVmOworCQl9CisJCWlmIChzdHJlYW0uYXZhaWxfaW4pCisJCQlkaWUoXygiZGVmbGF0ZSBlcnJvciAoJWQpIiksIHpyZXQpOworCQlpZiAocmVhZGxlbiA9PSAwKSB7CisJCQlpZiAoenJldCAhPSBaX1NUUkVBTV9FTkQpCisJCQkJZGllKF8oImRlZmxhdGUgZXJyb3IgKCVkKSIpLCB6cmV0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCWdpdF9kZWZsYXRlX2VuZCgmc3RyZWFtKTsKKwlyZXR1cm4gb2xlbjsKK30KKworLyoKKyAqIHdlIGFyZSBnb2luZyB0byByZXVzZSB0aGUgZXhpc3Rpbmcgb2JqZWN0IGRhdGEgYXMgaXMuICBtYWtlCisgKiBzdXJlIGl0IGlzIG5vdCBjb3JydXB0LgorICovCitzdGF0aWMgaW50IGNoZWNrX3BhY2tfaW5mbGF0ZShzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQlvZmZfdCBvZmZzZXQsCisJCW9mZl90IGxlbiwKKwkJdW5zaWduZWQgbG9uZyBleHBlY3QpCit7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCXVuc2lnbmVkIGNoYXIgZmFrZWJ1Zls0MDk2XSwgKmluOworCWludCBzdDsKKworCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7CisJZ2l0X2luZmxhdGVfaW5pdCgmc3RyZWFtKTsKKwlkbyB7CisJCWluID0gdXNlX3BhY2socCwgd19jdXJzLCBvZmZzZXQsICZzdHJlYW0uYXZhaWxfaW4pOworCQlzdHJlYW0ubmV4dF9pbiA9IGluOworCQlzdHJlYW0ubmV4dF9vdXQgPSBmYWtlYnVmOworCQlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGZha2VidWYpOworCQlzdCA9IGdpdF9pbmZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKTsKKwkJb2Zmc2V0ICs9IHN0cmVhbS5uZXh0X2luIC0gaW47CisJfSB3aGlsZSAoc3QgPT0gWl9PSyB8fCBzdCA9PSBaX0JVRl9FUlJPUik7CisJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCXJldHVybiAoc3QgPT0gWl9TVFJFQU1fRU5EICYmCisJCXN0cmVhbS50b3RhbF9vdXQgPT0gZXhwZWN0ICYmCisJCXN0cmVhbS50b3RhbF9pbiA9PSBsZW4pID8gMCA6IC0xOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3BhY2tfZGF0YShzdHJ1Y3QgaGFzaGZpbGUgKmYsCisJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQlzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCW9mZl90IG9mZnNldCwKKwkJb2ZmX3QgbGVuKQoreworCXVuc2lnbmVkIGNoYXIgKmluOworCXVuc2lnbmVkIGxvbmcgYXZhaWw7CisKKwl3aGlsZSAobGVuKSB7CisJCWluID0gdXNlX3BhY2socCwgd19jdXJzLCBvZmZzZXQsICZhdmFpbCk7CisJCWlmIChhdmFpbCA+IGxlbikKKwkJCWF2YWlsID0gKHVuc2lnbmVkIGxvbmcpbGVuOworCQloYXNod3JpdGUoZiwgaW4sIGF2YWlsKTsKKwkJb2Zmc2V0ICs9IGF2YWlsOworCQlsZW4gLT0gYXZhaWw7CisJfQorfQorCisvKiBSZXR1cm4gMCBpZiB3ZSB3aWxsIGJ1c3QgdGhlIHBhY2stc2l6ZSBsaW1pdCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgd3JpdGVfbm9fcmV1c2Vfb2JqZWN0KHN0cnVjdCBoYXNoZmlsZSAqZiwgc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnksCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGltaXQsIGludCB1c2FibGVfZGVsdGEpCit7CisJdW5zaWduZWQgbG9uZyBzaXplLCBkYXRhbGVuOworCXVuc2lnbmVkIGNoYXIgaGVhZGVyW01BWF9QQUNLX09CSkVDVF9IRUFERVJdLAorCQkgICAgICBkaGVhZGVyW01BWF9QQUNLX09CSkVDVF9IRUFERVJdOworCXVuc2lnbmVkIGhkcmxlbjsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdm9pZCAqYnVmOworCXN0cnVjdCBnaXRfaXN0cmVhbSAqc3QgPSBOVUxMOworCWNvbnN0IHVuc2lnbmVkIGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCisJaWYgKCF1c2FibGVfZGVsdGEpIHsKKwkJaWYgKG9lX3R5cGUoZW50cnkpID09IE9CSl9CTE9CICYmCisJCSAgICBvZV9zaXplX2dyZWF0ZXJfdGhhbigmdG9fcGFjaywgZW50cnksIGJpZ19maWxlX3RocmVzaG9sZCkgJiYKKwkJICAgIChzdCA9IG9wZW5faXN0cmVhbSh0aGVfcmVwb3NpdG9yeSwgJmVudHJ5LT5pZHgub2lkLCAmdHlwZSwKKwkJCQkgICAgICAgJnNpemUsIE5VTEwpKSAhPSBOVUxMKQorCQkJYnVmID0gTlVMTDsKKwkJZWxzZSB7CisJCQlidWYgPSByZWFkX29iamVjdF9maWxlKCZlbnRyeS0+aWR4Lm9pZCwgJnR5cGUsICZzaXplKTsKKwkJCWlmICghYnVmKQorCQkJCWRpZShfKCJ1bmFibGUgdG8gcmVhZCAlcyIpLAorCQkJCSAgICBvaWRfdG9faGV4KCZlbnRyeS0+aWR4Lm9pZCkpOworCQl9CisJCS8qCisJCSAqIG1ha2Ugc3VyZSBubyBjYWNoZWQgZGVsdGEgZGF0YSByZW1haW5zIGZyb20gYQorCQkgKiBwcmV2aW91cyBhdHRlbXB0IGJlZm9yZSBhIHBhY2sgc3BsaXQgb2NjdXJyZWQuCisJCSAqLworCQlGUkVFX0FORF9OVUxMKGVudHJ5LT5kZWx0YV9kYXRhKTsKKwkJZW50cnktPnpfZGVsdGFfc2l6ZSA9IDA7CisJfSBlbHNlIGlmIChlbnRyeS0+ZGVsdGFfZGF0YSkgeworCQlzaXplID0gREVMVEFfU0laRShlbnRyeSk7CisJCWJ1ZiA9IGVudHJ5LT5kZWx0YV9kYXRhOworCQllbnRyeS0+ZGVsdGFfZGF0YSA9IE5VTEw7CisJCXR5cGUgPSAoYWxsb3dfb2ZzX2RlbHRhICYmIERFTFRBKGVudHJ5KS0+aWR4Lm9mZnNldCkgPworCQkJT0JKX09GU19ERUxUQSA6IE9CSl9SRUZfREVMVEE7CisJfSBlbHNlIHsKKwkJYnVmID0gZ2V0X2RlbHRhKGVudHJ5KTsKKwkJc2l6ZSA9IERFTFRBX1NJWkUoZW50cnkpOworCQl0eXBlID0gKGFsbG93X29mc19kZWx0YSAmJiBERUxUQShlbnRyeSktPmlkeC5vZmZzZXQpID8KKwkJCU9CSl9PRlNfREVMVEEgOiBPQkpfUkVGX0RFTFRBOworCX0KKworCWlmIChzdCkJLyogbGFyZ2UgYmxvYiBjYXNlLCBqdXN0IGFzc3VtZSB3ZSBkb24ndCBjb21wcmVzcyB3ZWxsICovCisJCWRhdGFsZW4gPSBzaXplOworCWVsc2UgaWYgKGVudHJ5LT56X2RlbHRhX3NpemUpCisJCWRhdGFsZW4gPSBlbnRyeS0+el9kZWx0YV9zaXplOworCWVsc2UKKwkJZGF0YWxlbiA9IGRvX2NvbXByZXNzKCZidWYsIHNpemUpOworCisJLyoKKwkgKiBUaGUgb2JqZWN0IGhlYWRlciBpcyBhIGJ5dGUgb2YgJ3R5cGUnIGZvbGxvd2VkIGJ5IHplcm8gb3IKKwkgKiBtb3JlIGJ5dGVzIG9mIGxlbmd0aC4KKwkgKi8KKwloZHJsZW4gPSBlbmNvZGVfaW5fcGFja19vYmplY3RfaGVhZGVyKGhlYWRlciwgc2l6ZW9mKGhlYWRlciksCisJCQkJCSAgICAgIHR5cGUsIHNpemUpOworCisJaWYgKHR5cGUgPT0gT0JKX09GU19ERUxUQSkgeworCQkvKgorCQkgKiBEZWx0YXMgd2l0aCByZWxhdGl2ZSBiYXNlIGNvbnRhaW4gYW4gYWRkaXRpb25hbAorCQkgKiBlbmNvZGluZyBvZiB0aGUgcmVsYXRpdmUgb2Zmc2V0IGZvciB0aGUgZGVsdGEKKwkJICogYmFzZSBmcm9tIHRoaXMgb2JqZWN0J3MgcG9zaXRpb24gaW4gdGhlIHBhY2suCisJCSAqLworCQlvZmZfdCBvZnMgPSBlbnRyeS0+aWR4Lm9mZnNldCAtIERFTFRBKGVudHJ5KS0+aWR4Lm9mZnNldDsKKwkJdW5zaWduZWQgcG9zID0gc2l6ZW9mKGRoZWFkZXIpIC0gMTsKKwkJZGhlYWRlcltwb3NdID0gb2ZzICYgMTI3OworCQl3aGlsZSAob2ZzID4+PSA3KQorCQkJZGhlYWRlclstLXBvc10gPSAxMjggfCAoLS1vZnMgJiAxMjcpOworCQlpZiAobGltaXQgJiYgaGRybGVuICsgc2l6ZW9mKGRoZWFkZXIpIC0gcG9zICsgZGF0YWxlbiArIGhhc2hzeiA+PSBsaW1pdCkgeworCQkJaWYgKHN0KQorCQkJCWNsb3NlX2lzdHJlYW0oc3QpOworCQkJZnJlZShidWYpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaGFzaHdyaXRlKGYsIGhlYWRlciwgaGRybGVuKTsKKwkJaGFzaHdyaXRlKGYsIGRoZWFkZXIgKyBwb3MsIHNpemVvZihkaGVhZGVyKSAtIHBvcyk7CisJCWhkcmxlbiArPSBzaXplb2YoZGhlYWRlcikgLSBwb3M7CisJfSBlbHNlIGlmICh0eXBlID09IE9CSl9SRUZfREVMVEEpIHsKKwkJLyoKKwkJICogRGVsdGFzIHdpdGggYSBiYXNlIHJlZmVyZW5jZSBjb250YWluCisJCSAqIGFkZGl0aW9uYWwgYnl0ZXMgZm9yIHRoZSBiYXNlIG9iamVjdCBJRC4KKwkJICovCisJCWlmIChsaW1pdCAmJiBoZHJsZW4gKyBoYXNoc3ogKyBkYXRhbGVuICsgaGFzaHN6ID49IGxpbWl0KSB7CisJCQlpZiAoc3QpCisJCQkJY2xvc2VfaXN0cmVhbShzdCk7CisJCQlmcmVlKGJ1Zik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQloYXNod3JpdGUoZiwgaGVhZGVyLCBoZHJsZW4pOworCQloYXNod3JpdGUoZiwgREVMVEEoZW50cnkpLT5pZHgub2lkLmhhc2gsIGhhc2hzeik7CisJCWhkcmxlbiArPSBoYXNoc3o7CisJfSBlbHNlIHsKKwkJaWYgKGxpbWl0ICYmIGhkcmxlbiArIGRhdGFsZW4gKyBoYXNoc3ogPj0gbGltaXQpIHsKKwkJCWlmIChzdCkKKwkJCQljbG9zZV9pc3RyZWFtKHN0KTsKKwkJCWZyZWUoYnVmKTsKKwkJCXJldHVybiAwOworCQl9CisJCWhhc2h3cml0ZShmLCBoZWFkZXIsIGhkcmxlbik7CisJfQorCWlmIChzdCkgeworCQlkYXRhbGVuID0gd3JpdGVfbGFyZ2VfYmxvYl9kYXRhKHN0LCBmLCAmZW50cnktPmlkeC5vaWQpOworCQljbG9zZV9pc3RyZWFtKHN0KTsKKwl9IGVsc2UgeworCQloYXNod3JpdGUoZiwgYnVmLCBkYXRhbGVuKTsKKwkJZnJlZShidWYpOworCX0KKworCXJldHVybiBoZHJsZW4gKyBkYXRhbGVuOworfQorCisvKiBSZXR1cm4gMCBpZiB3ZSB3aWxsIGJ1c3QgdGhlIHBhY2stc2l6ZSBsaW1pdCAqLworc3RhdGljIG9mZl90IHdyaXRlX3JldXNlX29iamVjdChzdHJ1Y3QgaGFzaGZpbGUgKmYsIHN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5LAorCQkJCXVuc2lnbmVkIGxvbmcgbGltaXQsIGludCB1c2FibGVfZGVsdGEpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBJTl9QQUNLKGVudHJ5KTsKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndfY3VycyA9IE5VTEw7CisJc3RydWN0IHJldmluZGV4X2VudHJ5ICpyZXZpZHg7CisJb2ZmX3Qgb2Zmc2V0OworCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IG9lX3R5cGUoZW50cnkpOworCW9mZl90IGRhdGFsZW47CisJdW5zaWduZWQgY2hhciBoZWFkZXJbTUFYX1BBQ0tfT0JKRUNUX0hFQURFUl0sCisJCSAgICAgIGRoZWFkZXJbTUFYX1BBQ0tfT0JKRUNUX0hFQURFUl07CisJdW5zaWduZWQgaGRybGVuOworCWNvbnN0IHVuc2lnbmVkIGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCXVuc2lnbmVkIGxvbmcgZW50cnlfc2l6ZSA9IFNJWkUoZW50cnkpOworCisJaWYgKERFTFRBKGVudHJ5KSkKKwkJdHlwZSA9IChhbGxvd19vZnNfZGVsdGEgJiYgREVMVEEoZW50cnkpLT5pZHgub2Zmc2V0KSA/CisJCQlPQkpfT0ZTX0RFTFRBIDogT0JKX1JFRl9ERUxUQTsKKwloZHJsZW4gPSBlbmNvZGVfaW5fcGFja19vYmplY3RfaGVhZGVyKGhlYWRlciwgc2l6ZW9mKGhlYWRlciksCisJCQkJCSAgICAgIHR5cGUsIGVudHJ5X3NpemUpOworCisJb2Zmc2V0ID0gZW50cnktPmluX3BhY2tfb2Zmc2V0OworCXJldmlkeCA9IGZpbmRfcGFja19yZXZpbmRleChwLCBvZmZzZXQpOworCWRhdGFsZW4gPSByZXZpZHhbMV0ub2Zmc2V0IC0gb2Zmc2V0OworCWlmICghcGFja190b19zdGRvdXQgJiYgcC0+aW5kZXhfdmVyc2lvbiA+IDEgJiYKKwkgICAgY2hlY2tfcGFja19jcmMocCwgJndfY3Vycywgb2Zmc2V0LCBkYXRhbGVuLCByZXZpZHgtPm5yKSkgeworCQllcnJvcihfKCJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIiksCisJCSAgICAgIG9pZF90b19oZXgoJmVudHJ5LT5pZHgub2lkKSk7CisJCXVudXNlX3BhY2soJndfY3Vycyk7CisJCXJldHVybiB3cml0ZV9ub19yZXVzZV9vYmplY3QoZiwgZW50cnksIGxpbWl0LCB1c2FibGVfZGVsdGEpOworCX0KKworCW9mZnNldCArPSBlbnRyeS0+aW5fcGFja19oZWFkZXJfc2l6ZTsKKwlkYXRhbGVuIC09IGVudHJ5LT5pbl9wYWNrX2hlYWRlcl9zaXplOworCisJaWYgKCFwYWNrX3RvX3N0ZG91dCAmJiBwLT5pbmRleF92ZXJzaW9uID09IDEgJiYKKwkgICAgY2hlY2tfcGFja19pbmZsYXRlKHAsICZ3X2N1cnMsIG9mZnNldCwgZGF0YWxlbiwgZW50cnlfc2l6ZSkpIHsKKwkJZXJyb3IoXygiY29ycnVwdCBwYWNrZWQgb2JqZWN0IGZvciAlcyIpLAorCQkgICAgICBvaWRfdG9faGV4KCZlbnRyeS0+aWR4Lm9pZCkpOworCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCQlyZXR1cm4gd3JpdGVfbm9fcmV1c2Vfb2JqZWN0KGYsIGVudHJ5LCBsaW1pdCwgdXNhYmxlX2RlbHRhKTsKKwl9CisKKwlpZiAodHlwZSA9PSBPQkpfT0ZTX0RFTFRBKSB7CisJCW9mZl90IG9mcyA9IGVudHJ5LT5pZHgub2Zmc2V0IC0gREVMVEEoZW50cnkpLT5pZHgub2Zmc2V0OworCQl1bnNpZ25lZCBwb3MgPSBzaXplb2YoZGhlYWRlcikgLSAxOworCQlkaGVhZGVyW3Bvc10gPSBvZnMgJiAxMjc7CisJCXdoaWxlIChvZnMgPj49IDcpCisJCQlkaGVhZGVyWy0tcG9zXSA9IDEyOCB8ICgtLW9mcyAmIDEyNyk7CisJCWlmIChsaW1pdCAmJiBoZHJsZW4gKyBzaXplb2YoZGhlYWRlcikgLSBwb3MgKyBkYXRhbGVuICsgaGFzaHN6ID49IGxpbWl0KSB7CisJCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaGFzaHdyaXRlKGYsIGhlYWRlciwgaGRybGVuKTsKKwkJaGFzaHdyaXRlKGYsIGRoZWFkZXIgKyBwb3MsIHNpemVvZihkaGVhZGVyKSAtIHBvcyk7CisJCWhkcmxlbiArPSBzaXplb2YoZGhlYWRlcikgLSBwb3M7CisJCXJldXNlZF9kZWx0YSsrOworCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfUkVGX0RFTFRBKSB7CisJCWlmIChsaW1pdCAmJiBoZHJsZW4gKyBoYXNoc3ogKyBkYXRhbGVuICsgaGFzaHN6ID49IGxpbWl0KSB7CisJCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaGFzaHdyaXRlKGYsIGhlYWRlciwgaGRybGVuKTsKKwkJaGFzaHdyaXRlKGYsIERFTFRBKGVudHJ5KS0+aWR4Lm9pZC5oYXNoLCBoYXNoc3opOworCQloZHJsZW4gKz0gaGFzaHN6OworCQlyZXVzZWRfZGVsdGErKzsKKwl9IGVsc2UgeworCQlpZiAobGltaXQgJiYgaGRybGVuICsgZGF0YWxlbiArIGhhc2hzeiA+PSBsaW1pdCkgeworCQkJdW51c2VfcGFjaygmd19jdXJzKTsKKwkJCXJldHVybiAwOworCQl9CisJCWhhc2h3cml0ZShmLCBoZWFkZXIsIGhkcmxlbik7CisJfQorCWNvcHlfcGFja19kYXRhKGYsIHAsICZ3X2N1cnMsIG9mZnNldCwgZGF0YWxlbik7CisJdW51c2VfcGFjaygmd19jdXJzKTsKKwlyZXVzZWQrKzsKKwlyZXR1cm4gaGRybGVuICsgZGF0YWxlbjsKK30KKworLyogUmV0dXJuIDAgaWYgd2Ugd2lsbCBidXN0IHRoZSBwYWNrLXNpemUgbGltaXQgKi8KK3N0YXRpYyBvZmZfdCB3cml0ZV9vYmplY3Qoc3RydWN0IGhhc2hmaWxlICpmLAorCQkJICBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSwKKwkJCSAgb2ZmX3Qgd3JpdGVfb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgbGltaXQ7CisJb2ZmX3QgbGVuOworCWludCB1c2FibGVfZGVsdGEsIHRvX3JldXNlOworCisJaWYgKCFwYWNrX3RvX3N0ZG91dCkKKwkJY3JjMzJfYmVnaW4oZik7CisKKwkvKiBhcHBseSBzaXplIGxpbWl0IGlmIGxpbWl0ZWQgcGFja3NpemUgYW5kIG5vdCBmaXJzdCBvYmplY3QgKi8KKwlpZiAoIXBhY2tfc2l6ZV9saW1pdCB8fCAhbnJfd3JpdHRlbikKKwkJbGltaXQgPSAwOworCWVsc2UgaWYgKHBhY2tfc2l6ZV9saW1pdCA8PSB3cml0ZV9vZmZzZXQpCisJCS8qCisJCSAqIHRoZSBlYXJsaWVyIG9iamVjdCBkaWQgbm90IGZpdCB0aGUgbGltaXQ7IGF2b2lkCisJCSAqIG1pc3Rha2luZyB0aGlzIHdpdGggdW5saW1pdGVkIChpLmUuIGxpbWl0ID0gMCkuCisJCSAqLworCQlsaW1pdCA9IDE7CisJZWxzZQorCQlsaW1pdCA9IHBhY2tfc2l6ZV9saW1pdCAtIHdyaXRlX29mZnNldDsKKworCWlmICghREVMVEEoZW50cnkpKQorCQl1c2FibGVfZGVsdGEgPSAwOwkvKiBubyBkZWx0YSAqLworCWVsc2UgaWYgKCFwYWNrX3NpemVfbGltaXQpCisJICAgICAgIHVzYWJsZV9kZWx0YSA9IDE7CS8qIHVubGltaXRlZCBwYWNrZmlsZSAqLworCWVsc2UgaWYgKERFTFRBKGVudHJ5KS0+aWR4Lm9mZnNldCA9PSAob2ZmX3QpLTEpCisJCXVzYWJsZV9kZWx0YSA9IDA7CS8qIGJhc2Ugd2FzIHdyaXR0ZW4gdG8gYW5vdGhlciBwYWNrICovCisJZWxzZSBpZiAoREVMVEEoZW50cnkpLT5pZHgub2Zmc2V0KQorCQl1c2FibGVfZGVsdGEgPSAxOwkvKiBiYXNlIGFscmVhZHkgZXhpc3RzIGluIHRoaXMgcGFjayAqLworCWVsc2UKKwkJdXNhYmxlX2RlbHRhID0gMDsJLyogYmFzZSBjb3VsZCBlbmQgdXAgaW4gYW5vdGhlciBwYWNrICovCisKKwlpZiAoIXJldXNlX29iamVjdCkKKwkJdG9fcmV1c2UgPSAwOwkvKiBleHBsaWNpdCAqLworCWVsc2UgaWYgKCFJTl9QQUNLKGVudHJ5KSkKKwkJdG9fcmV1c2UgPSAwOwkvKiBjYW4ndCByZXVzZSB3aGF0IHdlIGRvbid0IGhhdmUgKi8KKwllbHNlIGlmIChvZV90eXBlKGVudHJ5KSA9PSBPQkpfUkVGX0RFTFRBIHx8CisJCSBvZV90eXBlKGVudHJ5KSA9PSBPQkpfT0ZTX0RFTFRBKQorCQkJCS8qIGNoZWNrX29iamVjdCgpIGRlY2lkZWQgaXQgZm9yIHVzIC4uLiAqLworCQl0b19yZXVzZSA9IHVzYWJsZV9kZWx0YTsKKwkJCQkvKiAuLi4gYnV0IHBhY2sgc3BsaXQgbWF5IG92ZXJyaWRlIHRoYXQgKi8KKwllbHNlIGlmIChvZV90eXBlKGVudHJ5KSAhPSBlbnRyeS0+aW5fcGFja190eXBlKQorCQl0b19yZXVzZSA9IDA7CS8qIHBhY2sgaGFzIGRlbHRhIHdoaWNoIGlzIHVudXNhYmxlICovCisJZWxzZSBpZiAoREVMVEEoZW50cnkpKQorCQl0b19yZXVzZSA9IDA7CS8qIHdlIHdhbnQgdG8gcGFjayBhZnJlc2ggKi8KKwllbHNlCisJCXRvX3JldXNlID0gMTsJLyogd2UgaGF2ZSBpdCBpbi1wYWNrIHVuZGVsdGlmaWVkLAorCQkJCSAqIGFuZCB3ZSBkbyBub3QgbmVlZCB0byBkZWx0aWZ5IGl0LgorCQkJCSAqLworCisJaWYgKCF0b19yZXVzZSkKKwkJbGVuID0gd3JpdGVfbm9fcmV1c2Vfb2JqZWN0KGYsIGVudHJ5LCBsaW1pdCwgdXNhYmxlX2RlbHRhKTsKKwllbHNlCisJCWxlbiA9IHdyaXRlX3JldXNlX29iamVjdChmLCBlbnRyeSwgbGltaXQsIHVzYWJsZV9kZWx0YSk7CisJaWYgKCFsZW4pCisJCXJldHVybiAwOworCisJaWYgKHVzYWJsZV9kZWx0YSkKKwkJd3JpdHRlbl9kZWx0YSsrOworCXdyaXR0ZW4rKzsKKwlpZiAoIXBhY2tfdG9fc3Rkb3V0KQorCQllbnRyeS0+aWR4LmNyYzMyID0gY3JjMzJfZW5kKGYpOworCXJldHVybiBsZW47Cit9CisKK2VudW0gd3JpdGVfb25lX3N0YXR1cyB7CisJV1JJVEVfT05FX1NLSVAgPSAtMSwgLyogYWxyZWFkeSB3cml0dGVuICovCisJV1JJVEVfT05FX0JSRUFLID0gMCwgLyogd3JpdGluZyB0aGlzIHdpbGwgYnVzdCB0aGUgbGltaXQ7IG5vdCB3cml0dGVuICovCisJV1JJVEVfT05FX1dSSVRURU4gPSAxLCAvKiBub3JtYWwgKi8KKwlXUklURV9PTkVfUkVDVVJTSVZFID0gMiAvKiBhbHJlYWR5IHNjaGVkdWxlZCB0byBiZSB3cml0dGVuICovCit9OworCitzdGF0aWMgZW51bSB3cml0ZV9vbmVfc3RhdHVzIHdyaXRlX29uZShzdHJ1Y3QgaGFzaGZpbGUgKmYsCisJCQkJICAgICAgIHN0cnVjdCBvYmplY3RfZW50cnkgKmUsCisJCQkJICAgICAgIG9mZl90ICpvZmZzZXQpCit7CisJb2ZmX3Qgc2l6ZTsKKwlpbnQgcmVjdXJzaW5nOworCisJLyoKKwkgKiB3ZSBzZXQgb2Zmc2V0IHRvIDEgKHdoaWNoIGlzIGFuIGltcG9zc2libGUgdmFsdWUpIHRvIG1hcmsKKwkgKiB0aGUgZmFjdCB0aGF0IHRoaXMgb2JqZWN0IGlzIGludm9sdmVkIGluICJ3cml0ZSBpdHMgYmFzZQorCSAqIGZpcnN0IGJlZm9yZSB3cml0aW5nIGEgZGVsdGlmaWVkIG9iamVjdCIgcmVjdXJzaW9uLgorCSAqLworCXJlY3Vyc2luZyA9IChlLT5pZHgub2Zmc2V0ID09IDEpOworCWlmIChyZWN1cnNpbmcpIHsKKwkJd2FybmluZyhfKCJyZWN1cnNpdmUgZGVsdGEgZGV0ZWN0ZWQgZm9yIG9iamVjdCAlcyIpLAorCQkJb2lkX3RvX2hleCgmZS0+aWR4Lm9pZCkpOworCQlyZXR1cm4gV1JJVEVfT05FX1JFQ1VSU0lWRTsKKwl9IGVsc2UgaWYgKGUtPmlkeC5vZmZzZXQgfHwgZS0+cHJlZmVycmVkX2Jhc2UpIHsKKwkJLyogb2Zmc2V0IGlzIG5vbiB6ZXJvIGlmIG9iamVjdCBpcyB3cml0dGVuIGFscmVhZHkuICovCisJCXJldHVybiBXUklURV9PTkVfU0tJUDsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgZGVsdGlmaWVkLCB3cml0ZSBvdXQgYmFzZSBvYmplY3QgZmlyc3QuICovCisJaWYgKERFTFRBKGUpKSB7CisJCWUtPmlkeC5vZmZzZXQgPSAxOyAvKiBub3cgcmVjdXJzZSAqLworCQlzd2l0Y2ggKHdyaXRlX29uZShmLCBERUxUQShlKSwgb2Zmc2V0KSkgeworCQljYXNlIFdSSVRFX09ORV9SRUNVUlNJVkU6CisJCQkvKiB3ZSBjYW5ub3QgZGVwZW5kIG9uIHRoaXMgb25lICovCisJCQlTRVRfREVMVEEoZSwgTlVMTCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQljYXNlIFdSSVRFX09ORV9CUkVBSzoKKwkJCWUtPmlkeC5vZmZzZXQgPSByZWN1cnNpbmc7CisJCQlyZXR1cm4gV1JJVEVfT05FX0JSRUFLOworCQl9CisJfQorCisJZS0+aWR4Lm9mZnNldCA9ICpvZmZzZXQ7CisJc2l6ZSA9IHdyaXRlX29iamVjdChmLCBlLCAqb2Zmc2V0KTsKKwlpZiAoIXNpemUpIHsKKwkJZS0+aWR4Lm9mZnNldCA9IHJlY3Vyc2luZzsKKwkJcmV0dXJuIFdSSVRFX09ORV9CUkVBSzsKKwl9CisJd3JpdHRlbl9saXN0W25yX3dyaXR0ZW4rK10gPSAmZS0+aWR4OworCisJLyogbWFrZSBzdXJlIG9mZl90IGlzIHN1ZmZpY2llbnRseSBsYXJnZSBub3QgdG8gd3JhcCAqLworCWlmIChzaWduZWRfYWRkX292ZXJmbG93cygqb2Zmc2V0LCBzaXplKSkKKwkJZGllKF8oInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiKSk7CisJKm9mZnNldCArPSBzaXplOworCXJldHVybiBXUklURV9PTkVfV1JJVFRFTjsKK30KKworc3RhdGljIGludCBtYXJrX3RhZ2dlZChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFnLAorCQkgICAgICAgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHBlZWxlZDsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSA9IHBhY2tsaXN0X2ZpbmQoJnRvX3BhY2ssIG9pZCk7CisKKwlpZiAoZW50cnkpCisJCWVudHJ5LT50YWdnZWQgPSAxOworCWlmICghcGVlbF9yZWYocGF0aCwgJnBlZWxlZCkpIHsKKwkJZW50cnkgPSBwYWNrbGlzdF9maW5kKCZ0b19wYWNrLCAmcGVlbGVkKTsKKwkJaWYgKGVudHJ5KQorCQkJZW50cnktPnRhZ2dlZCA9IDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX3RvX3dyaXRlX29yZGVyKHN0cnVjdCBvYmplY3RfZW50cnkgKip3bywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmVuZHAsCisJCQkgICAgICAgc3RydWN0IG9iamVjdF9lbnRyeSAqZSkKK3sKKwlpZiAoZS0+ZmlsbGVkIHx8IG9lX2xheWVyKCZ0b19wYWNrLCBlKSAhPSB3cml0ZV9sYXllcikKKwkJcmV0dXJuOworCXdvWygqZW5kcCkrK10gPSBlOworCWUtPmZpbGxlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9kZXNjZW5kYW50c190b193cml0ZV9vcmRlcihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqd28sCisJCQkJCSAgIHVuc2lnbmVkIGludCAqZW5kcCwKKwkJCQkJICAgc3RydWN0IG9iamVjdF9lbnRyeSAqZSkKK3sKKwlpbnQgYWRkX3RvX29yZGVyID0gMTsKKwl3aGlsZSAoZSkgeworCQlpZiAoYWRkX3RvX29yZGVyKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpzOworCQkJLyogYWRkIHRoaXMgbm9kZS4uLiAqLworCQkJYWRkX3RvX3dyaXRlX29yZGVyKHdvLCBlbmRwLCBlKTsKKwkJCS8qIGFsbCBpdHMgc2libGluZ3MuLi4gKi8KKwkJCWZvciAocyA9IERFTFRBX1NJQkxJTkcoZSk7IHM7IHMgPSBERUxUQV9TSUJMSU5HKHMpKSB7CisJCQkJYWRkX3RvX3dyaXRlX29yZGVyKHdvLCBlbmRwLCBzKTsKKwkJCX0KKwkJfQorCQkvKiBkcm9wIGRvd24gYSBsZXZlbCB0byBhZGQgbGVmdCBzdWJ0cmVlIG5vZGVzIGlmIHBvc3NpYmxlICovCisJCWlmIChERUxUQV9DSElMRChlKSkgeworCQkJYWRkX3RvX29yZGVyID0gMTsKKwkJCWUgPSBERUxUQV9DSElMRChlKTsKKwkJfSBlbHNlIHsKKwkJCWFkZF90b19vcmRlciA9IDA7CisJCQkvKiBvdXIgc2libGluZyBtaWdodCBoYXZlIHNvbWUgY2hpbGRyZW4sIGl0IGlzIG5leHQgKi8KKwkJCWlmIChERUxUQV9TSUJMSU5HKGUpKSB7CisJCQkJZSA9IERFTFRBX1NJQkxJTkcoZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiBnbyBiYWNrIHRvIG91ciBwYXJlbnQgbm9kZSAqLworCQkJZSA9IERFTFRBKGUpOworCQkJd2hpbGUgKGUgJiYgIURFTFRBX1NJQkxJTkcoZSkpIHsKKwkJCQkvKiB3ZSdyZSBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHN1YnRyZWUsIGtlZXAKKwkJCQkgKiBnb2luZyB1cCB1bnRpbCB3ZSBjYW4gZ28gcmlnaHQgYWdhaW4gKi8KKwkJCQllID0gREVMVEEoZSk7CisJCQl9CisJCQlpZiAoIWUpIHsKKwkJCQkvKiBkb25lLSB3ZSBoaXQgb3VyIG9yaWdpbmFsIHJvb3Qgbm9kZSAqLworCQkJCXJldHVybjsKKwkJCX0KKwkJCS8qIHBhc3MgaXQgb2ZmIHRvIHNpYmxpbmcgYXQgdGhpcyBsZXZlbCAqLworCQkJZSA9IERFTFRBX1NJQkxJTkcoZSk7CisJCX0KKwl9OworfQorCitzdGF0aWMgdm9pZCBhZGRfZmFtaWx5X3RvX3dyaXRlX29yZGVyKHN0cnVjdCBvYmplY3RfZW50cnkgKip3bywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgKmVuZHAsCisJCQkJICAgICAgc3RydWN0IG9iamVjdF9lbnRyeSAqZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpyb290OworCisJZm9yIChyb290ID0gZTsgREVMVEEocm9vdCk7IHJvb3QgPSBERUxUQShyb290KSkKKwkJOyAvKiBub3RoaW5nICovCisJYWRkX2Rlc2NlbmRhbnRzX3RvX3dyaXRlX29yZGVyKHdvLCBlbmRwLCByb290KTsKK30KKworc3RhdGljIHZvaWQgY29tcHV0ZV9sYXllcl9vcmRlcihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqd28sIHVuc2lnbmVkIGludCAqd29fZW5kKQoreworCXVuc2lnbmVkIGludCBpLCBsYXN0X3VudGFnZ2VkOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iamVjdHMgPSB0b19wYWNrLm9iamVjdHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgdG9fcGFjay5ucl9vYmplY3RzOyBpKyspIHsKKwkJaWYgKG9iamVjdHNbaV0udGFnZ2VkKQorCQkJYnJlYWs7CisJCWFkZF90b193cml0ZV9vcmRlcih3bywgd29fZW5kLCAmb2JqZWN0c1tpXSk7CisJfQorCWxhc3RfdW50YWdnZWQgPSBpOworCisJLyoKKwkgKiBUaGVuIGZpbGwgYWxsIHRoZSB0YWdnZWQgdGlwcy4KKwkgKi8KKwlmb3IgKDsgaSA8IHRvX3BhY2subnJfb2JqZWN0czsgaSsrKSB7CisJCWlmIChvYmplY3RzW2ldLnRhZ2dlZCkKKwkJCWFkZF90b193cml0ZV9vcmRlcih3bywgd29fZW5kLCAmb2JqZWN0c1tpXSk7CisJfQorCisJLyoKKwkgKiBBbmQgdGhlbiBhbGwgcmVtYWluaW5nIGNvbW1pdHMgYW5kIHRhZ3MuCisJICovCisJZm9yIChpID0gbGFzdF91bnRhZ2dlZDsgaSA8IHRvX3BhY2subnJfb2JqZWN0czsgaSsrKSB7CisJCWlmIChvZV90eXBlKCZvYmplY3RzW2ldKSAhPSBPQkpfQ09NTUlUICYmCisJCSAgICBvZV90eXBlKCZvYmplY3RzW2ldKSAhPSBPQkpfVEFHKQorCQkJY29udGludWU7CisJCWFkZF90b193cml0ZV9vcmRlcih3bywgd29fZW5kLCAmb2JqZWN0c1tpXSk7CisJfQorCisJLyoKKwkgKiBBbmQgdGhlbiBhbGwgdGhlIHRyZWVzLgorCSAqLworCWZvciAoaSA9IGxhc3RfdW50YWdnZWQ7IGkgPCB0b19wYWNrLm5yX29iamVjdHM7IGkrKykgeworCQlpZiAob2VfdHlwZSgmb2JqZWN0c1tpXSkgIT0gT0JKX1RSRUUpCisJCQljb250aW51ZTsKKwkJYWRkX3RvX3dyaXRlX29yZGVyKHdvLCB3b19lbmQsICZvYmplY3RzW2ldKTsKKwl9CisKKwkvKgorCSAqIEZpbmFsbHkgYWxsIHRoZSByZXN0IGluIHJlYWxseSB0aWdodCBvcmRlcgorCSAqLworCWZvciAoaSA9IGxhc3RfdW50YWdnZWQ7IGkgPCB0b19wYWNrLm5yX29iamVjdHM7IGkrKykgeworCQlpZiAoIW9iamVjdHNbaV0uZmlsbGVkICYmIG9lX2xheWVyKCZ0b19wYWNrLCAmb2JqZWN0c1tpXSkgPT0gd3JpdGVfbGF5ZXIpCisJCQlhZGRfZmFtaWx5X3RvX3dyaXRlX29yZGVyKHdvLCB3b19lbmQsICZvYmplY3RzW2ldKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqY29tcHV0ZV93cml0ZV9vcmRlcih2b2lkKQoreworCXVpbnQzMl90IG1heF9sYXllcnMgPSAxOworCXVuc2lnbmVkIGludCBpLCB3b19lbmQ7CisKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqd287CisJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqZWN0cyA9IHRvX3BhY2sub2JqZWN0czsKKworCWZvciAoaSA9IDA7IGkgPCB0b19wYWNrLm5yX29iamVjdHM7IGkrKykgeworCQlvYmplY3RzW2ldLnRhZ2dlZCA9IDA7CisJCW9iamVjdHNbaV0uZmlsbGVkID0gMDsKKwkJU0VUX0RFTFRBX0NISUxEKCZvYmplY3RzW2ldLCBOVUxMKTsKKwkJU0VUX0RFTFRBX1NJQkxJTkcoJm9iamVjdHNbaV0sIE5VTEwpOworCX0KKworCS8qCisJICogRnVsbHkgY29ubmVjdCBkZWx0YV9jaGlsZC9kZWx0YV9zaWJsaW5nIG5ldHdvcmsuCisJICogTWFrZSBzdXJlIGRlbHRhX3NpYmxpbmcgaXMgc29ydGVkIGluIHRoZSBvcmlnaW5hbAorCSAqIHJlY2VuY3kgb3JkZXIuCisJICovCisJZm9yIChpID0gdG9fcGFjay5ucl9vYmplY3RzOyBpID4gMDspIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqZSA9ICZvYmplY3RzWy0taV07CisJCWlmICghREVMVEEoZSkpCisJCQljb250aW51ZTsKKwkJLyogTWFyayBtZSBhcyB0aGUgZmlyc3QgY2hpbGQgKi8KKwkJZS0+ZGVsdGFfc2libGluZ19pZHggPSBERUxUQShlKS0+ZGVsdGFfY2hpbGRfaWR4OworCQlTRVRfREVMVEFfQ0hJTEQoREVMVEEoZSksIGUpOworCX0KKworCS8qCisJICogTWFyayBvYmplY3RzIHRoYXQgYXJlIGF0IHRoZSB0aXAgb2YgdGFncy4KKwkgKi8KKwlmb3JfZWFjaF90YWdfcmVmKG1hcmtfdGFnZ2VkLCBOVUxMKTsKKworCWlmICh1c2VfZGVsdGFfaXNsYW5kcykKKwkJbWF4X2xheWVycyA9IGNvbXB1dGVfcGFja19sYXllcnMoJnRvX3BhY2spOworCisJQUxMT0NfQVJSQVkod28sIHRvX3BhY2subnJfb2JqZWN0cyk7CisJd29fZW5kID0gMDsKKworCWZvciAoOyB3cml0ZV9sYXllciA8IG1heF9sYXllcnM7ICsrd3JpdGVfbGF5ZXIpCisJCWNvbXB1dGVfbGF5ZXJfb3JkZXIod28sICZ3b19lbmQpOworCisJaWYgKHdvX2VuZCAhPSB0b19wYWNrLm5yX29iamVjdHMpCisJCWRpZShfKCJvcmRlcmVkICV1IG9iamVjdHMsIGV4cGVjdGVkICUiUFJJdTMyKSwKKwkJICAgIHdvX2VuZCwgdG9fcGFjay5ucl9vYmplY3RzKTsKKworCXJldHVybiB3bzsKK30KKworCisvKgorICogQSByZXVzZWQgc2V0IG9mIG9iamVjdHMuIEFsbCBvYmplY3RzIGluIGEgY2h1bmsgaGF2ZSB0aGUgc2FtZQorICogcmVsYXRpdmUgcG9zaXRpb24gaW4gdGhlIG9yaWdpbmFsIHBhY2tmaWxlIGFuZCB0aGUgZ2VuZXJhdGVkCisgKiBwYWNrZmlsZS4KKyAqLworCitzdGF0aWMgc3RydWN0IHJldXNlZF9jaHVuayB7CisJLyogVGhlIG9mZnNldCBvZiB0aGUgZmlyc3Qgb2JqZWN0IG9mIHRoaXMgY2h1bmsgaW4gdGhlIG9yaWdpbmFsCisJICogcGFja2ZpbGUuICovCisJb2ZmX3Qgb3JpZ2luYWw7CisJLyogVGhlIG9mZnNldCBvZiB0aGUgZmlyc3Qgb2JqZWN0IG9mIHRoaXMgY2h1bmsgaW4gdGhlIGdlbmVyYXRlZAorCSAqIHBhY2tmaWxlIG1pbnVzICJvcmlnaW5hbCIuICovCisJb2ZmX3QgZGlmZmVyZW5jZTsKK30gKnJldXNlZF9jaHVua3M7CitzdGF0aWMgaW50IHJldXNlZF9jaHVua3NfbnI7CitzdGF0aWMgaW50IHJldXNlZF9jaHVua3NfYWxsb2M7CisKK3N0YXRpYyB2b2lkIHJlY29yZF9yZXVzZWRfb2JqZWN0KG9mZl90IHdoZXJlLCBvZmZfdCBvZmZzZXQpCit7CisJaWYgKHJldXNlZF9jaHVua3NfbnIgJiYgcmV1c2VkX2NodW5rc1tyZXVzZWRfY2h1bmtzX25yLTFdLmRpZmZlcmVuY2UgPT0gb2Zmc2V0KQorCQlyZXR1cm47CisKKwlBTExPQ19HUk9XKHJldXNlZF9jaHVua3MsIHJldXNlZF9jaHVua3NfbnIgKyAxLAorCQkgICByZXVzZWRfY2h1bmtzX2FsbG9jKTsKKwlyZXVzZWRfY2h1bmtzW3JldXNlZF9jaHVua3NfbnJdLm9yaWdpbmFsID0gd2hlcmU7CisJcmV1c2VkX2NodW5rc1tyZXVzZWRfY2h1bmtzX25yXS5kaWZmZXJlbmNlID0gb2Zmc2V0OworCXJldXNlZF9jaHVua3NfbnIrKzsKK30KKworLyoKKyAqIEJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgY2h1bmsgdGhhdCAid2hlcmUiIGlzIGluLiBOb3RlCisgKiB0aGF0IHdlJ3JlIG5vdCBsb29raW5nIGZvciBhbiBleGFjdCBtYXRjaCwganVzdCB0aGUgZmlyc3QKKyAqIGNodW5rIHRoYXQgY29udGFpbnMgaXQgKHdoaWNoIGltcGxpY2l0bHkgZW5kcyBhdCB0aGUgc3RhcnQKKyAqIG9mIHRoZSBuZXh0IGNodW5rLgorICovCitzdGF0aWMgb2ZmX3QgZmluZF9yZXVzZWRfb2Zmc2V0KG9mZl90IHdoZXJlKQoreworCWludCBsbyA9IDAsIGhpID0gcmV1c2VkX2NodW5rc19ucjsKKwl3aGlsZSAobG8gPCBoaSkgeworCQlpbnQgbWkgPSBsbyArICgoaGkgLSBsbykgLyAyKTsKKwkJaWYgKHdoZXJlID09IHJldXNlZF9jaHVua3NbbWldLm9yaWdpbmFsKQorCQkJcmV0dXJuIHJldXNlZF9jaHVua3NbbWldLmRpZmZlcmVuY2U7CisJCWlmICh3aGVyZSA8IHJldXNlZF9jaHVua3NbbWldLm9yaWdpbmFsKQorCQkJaGkgPSBtaTsKKwkJZWxzZQorCQkJbG8gPSBtaSArIDE7CisJfQorCisJLyoKKwkgKiBUaGUgZmlyc3QgY2h1bmsgc3RhcnRzIGF0IHplcm8sIHNvIHdlIGNhbid0IGhhdmUgZ29uZSBiZWxvdworCSAqIHRoZXJlLgorCSAqLworCWFzc2VydChsbyk7CisJcmV0dXJuIHJldXNlZF9jaHVua3NbbG8tMV0uZGlmZmVyZW5jZTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfcmV1c2VkX3BhY2tfb25lKHNpemVfdCBwb3MsIHN0cnVjdCBoYXNoZmlsZSAqb3V0LAorCQkJCSAgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzKQoreworCW9mZl90IG9mZnNldCwgbmV4dCwgY3VyOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlvZmZzZXQgPSByZXVzZV9wYWNrZmlsZS0+cmV2aW5kZXhbcG9zXS5vZmZzZXQ7CisJbmV4dCA9IHJldXNlX3BhY2tmaWxlLT5yZXZpbmRleFtwb3MgKyAxXS5vZmZzZXQ7CisKKwlyZWNvcmRfcmV1c2VkX29iamVjdChvZmZzZXQsIG9mZnNldCAtIGhhc2hmaWxlX3RvdGFsKG91dCkpOworCisJY3VyID0gb2Zmc2V0OworCXR5cGUgPSB1bnBhY2tfb2JqZWN0X2hlYWRlcihyZXVzZV9wYWNrZmlsZSwgd19jdXJzLCAmY3VyLCAmc2l6ZSk7CisJYXNzZXJ0KHR5cGUgPj0gMCk7CisKKwlpZiAodHlwZSA9PSBPQkpfT0ZTX0RFTFRBKSB7CisJCW9mZl90IGJhc2Vfb2Zmc2V0OworCQlvZmZfdCBmaXh1cDsKKworCQl1bnNpZ25lZCBjaGFyIGhlYWRlcltNQVhfUEFDS19PQkpFQ1RfSEVBREVSXTsKKwkJdW5zaWduZWQgbGVuOworCisJCWJhc2Vfb2Zmc2V0ID0gZ2V0X2RlbHRhX2Jhc2UocmV1c2VfcGFja2ZpbGUsIHdfY3VycywgJmN1ciwgdHlwZSwgb2Zmc2V0KTsKKwkJYXNzZXJ0KGJhc2Vfb2Zmc2V0ICE9IDApOworCisJCS8qIENvbnZlcnQgdG8gUkVGX0RFTFRBIGlmIHdlIG11c3QuLi4gKi8KKwkJaWYgKCFhbGxvd19vZnNfZGVsdGEpIHsKKwkJCWludCBiYXNlX3BvcyA9IGZpbmRfcmV2aW5kZXhfcG9zaXRpb24ocmV1c2VfcGFja2ZpbGUsIGJhc2Vfb2Zmc2V0KTsKKwkJCXN0cnVjdCBvYmplY3RfaWQgYmFzZV9vaWQ7CisKKwkJCW50aF9wYWNrZWRfb2JqZWN0X2lkKCZiYXNlX29pZCwgcmV1c2VfcGFja2ZpbGUsCisJCQkJCSAgICAgcmV1c2VfcGFja2ZpbGUtPnJldmluZGV4W2Jhc2VfcG9zXS5ucik7CisKKwkJCWxlbiA9IGVuY29kZV9pbl9wYWNrX29iamVjdF9oZWFkZXIoaGVhZGVyLCBzaXplb2YoaGVhZGVyKSwKKwkJCQkJCQkgICBPQkpfUkVGX0RFTFRBLCBzaXplKTsKKwkJCWhhc2h3cml0ZShvdXQsIGhlYWRlciwgbGVuKTsKKwkJCWhhc2h3cml0ZShvdXQsIGJhc2Vfb2lkLmhhc2gsIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKKwkJCWNvcHlfcGFja19kYXRhKG91dCwgcmV1c2VfcGFja2ZpbGUsIHdfY3VycywgY3VyLCBuZXh0IC0gY3VyKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIE90aGVyd2lzZSBzZWUgaWYgd2UgbmVlZCB0byByZXdyaXRlIHRoZSBvZmZzZXQuLi4gKi8KKwkJZml4dXAgPSBmaW5kX3JldXNlZF9vZmZzZXQob2Zmc2V0KSAtCisJCQlmaW5kX3JldXNlZF9vZmZzZXQoYmFzZV9vZmZzZXQpOworCQlpZiAoZml4dXApIHsKKwkJCXVuc2lnbmVkIGNoYXIgb2ZzX2hlYWRlclsxMF07CisJCQl1bnNpZ25lZCBpLCBvZnNfbGVuOworCQkJb2ZmX3Qgb2ZzID0gb2Zmc2V0IC0gYmFzZV9vZmZzZXQgLSBmaXh1cDsKKworCQkJbGVuID0gZW5jb2RlX2luX3BhY2tfb2JqZWN0X2hlYWRlcihoZWFkZXIsIHNpemVvZihoZWFkZXIpLAorCQkJCQkJCSAgIE9CSl9PRlNfREVMVEEsIHNpemUpOworCisJCQlpID0gc2l6ZW9mKG9mc19oZWFkZXIpIC0gMTsKKwkJCW9mc19oZWFkZXJbaV0gPSBvZnMgJiAxMjc7CisJCQl3aGlsZSAob2ZzID4+PSA3KQorCQkJCW9mc19oZWFkZXJbLS1pXSA9IDEyOCB8ICgtLW9mcyAmIDEyNyk7CisKKwkJCW9mc19sZW4gPSBzaXplb2Yob2ZzX2hlYWRlcikgLSBpOworCisJCQloYXNod3JpdGUob3V0LCBoZWFkZXIsIGxlbik7CisJCQloYXNod3JpdGUob3V0LCBvZnNfaGVhZGVyICsgc2l6ZW9mKG9mc19oZWFkZXIpIC0gb2ZzX2xlbiwgb2ZzX2xlbik7CisJCQljb3B5X3BhY2tfZGF0YShvdXQsIHJldXNlX3BhY2tmaWxlLCB3X2N1cnMsIGN1ciwgbmV4dCAtIGN1cik7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiAuLi5vdGhlcndpc2Ugd2UgaGF2ZSBubyBmaXh1cCwgYW5kIGNhbiB3cml0ZSBpdCB2ZXJiYXRpbSAqLworCX0KKworCWNvcHlfcGFja19kYXRhKG91dCwgcmV1c2VfcGFja2ZpbGUsIHdfY3Vycywgb2Zmc2V0LCBuZXh0IC0gb2Zmc2V0KTsKK30KKworc3RhdGljIHNpemVfdCB3cml0ZV9yZXVzZWRfcGFja192ZXJiYXRpbShzdHJ1Y3QgaGFzaGZpbGUgKm91dCwKKwkJCQkJIHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3VycykKK3sKKwlzaXplX3QgcG9zID0gMDsKKworCXdoaWxlIChwb3MgPCByZXVzZV9wYWNrZmlsZV9iaXRtYXAtPndvcmRfYWxsb2MgJiYKKwkJCXJldXNlX3BhY2tmaWxlX2JpdG1hcC0+d29yZHNbcG9zXSA9PSAoZXdvcmRfdCl+MCkKKwkJcG9zKys7CisKKwlpZiAocG9zKSB7CisJCW9mZl90IHRvX3dyaXRlOworCisJCXdyaXR0ZW4gPSAocG9zICogQklUU19JTl9FV09SRCk7CisJCXRvX3dyaXRlID0gcmV1c2VfcGFja2ZpbGUtPnJldmluZGV4W3dyaXR0ZW5dLm9mZnNldAorCQkJLSBzaXplb2Yoc3RydWN0IHBhY2tfaGVhZGVyKTsKKworCQkvKiBXZSdyZSByZWNvcmRpbmcgb25lIGNodW5rLCBub3Qgb25lIG9iamVjdC4gKi8KKwkJcmVjb3JkX3JldXNlZF9vYmplY3Qoc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlciksIDApOworCQloYXNoZmx1c2gob3V0KTsKKwkJY29weV9wYWNrX2RhdGEob3V0LCByZXVzZV9wYWNrZmlsZSwgd19jdXJzLAorCQkJc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlciksIHRvX3dyaXRlKTsKKworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzX3N0YXRlLCB3cml0dGVuKTsKKwl9CisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfcmV1c2VkX3BhY2soc3RydWN0IGhhc2hmaWxlICpmKQoreworCXNpemVfdCBpID0gMDsKKwl1aW50MzJfdCBvZmZzZXQ7CisJc3RydWN0IHBhY2tfd2luZG93ICp3X2N1cnMgPSBOVUxMOworCisJaWYgKGFsbG93X29mc19kZWx0YSkKKwkJaSA9IHdyaXRlX3JldXNlZF9wYWNrX3ZlcmJhdGltKGYsICZ3X2N1cnMpOworCisJZm9yICg7IGkgPCByZXVzZV9wYWNrZmlsZV9iaXRtYXAtPndvcmRfYWxsb2M7ICsraSkgeworCQlld29yZF90IHdvcmQgPSByZXVzZV9wYWNrZmlsZV9iaXRtYXAtPndvcmRzW2ldOworCQlzaXplX3QgcG9zID0gKGkgKiBCSVRTX0lOX0VXT1JEKTsKKworCQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IEJJVFNfSU5fRVdPUkQ7ICsrb2Zmc2V0KSB7CisJCQlpZiAoKHdvcmQgPj4gb2Zmc2V0KSA9PSAwKQorCQkJCWJyZWFrOworCisJCQlvZmZzZXQgKz0gZXdhaF9iaXRfY3R6NjQod29yZCA+PiBvZmZzZXQpOworCQkJd3JpdGVfcmV1c2VkX3BhY2tfb25lKHBvcyArIG9mZnNldCwgZiwgJndfY3Vycyk7CisJCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzX3N0YXRlLCArK3dyaXR0ZW4pOworCQl9CisJfQorCisJdW51c2VfcGFjaygmd19jdXJzKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgbm9fc3BsaXRfd2FybmluZ1tdID0gTl8oCisiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBwYWNrcyBhcmUgc3BsaXQgZHVlIHRvIHBhY2sucGFja1NpemVMaW1pdCIKKyk7CisKK3N0YXRpYyB2b2lkIHdyaXRlX3BhY2tfZmlsZSh2b2lkKQoreworCXVpbnQzMl90IGkgPSAwLCBqOworCXN0cnVjdCBoYXNoZmlsZSAqZjsKKwlvZmZfdCBvZmZzZXQ7CisJdWludDMyX3QgbnJfcmVtYWluaW5nID0gbnJfcmVzdWx0OworCXRpbWVfdCBsYXN0X210aW1lID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqd3JpdGVfb3JkZXI7CisKKwlpZiAocHJvZ3Jlc3MgPiBwYWNrX3RvX3N0ZG91dCkKKwkJcHJvZ3Jlc3Nfc3RhdGUgPSBzdGFydF9wcm9ncmVzcyhfKCJXcml0aW5nIG9iamVjdHMiKSwgbnJfcmVzdWx0KTsKKwlBTExPQ19BUlJBWSh3cml0dGVuX2xpc3QsIHRvX3BhY2subnJfb2JqZWN0cyk7CisJd3JpdGVfb3JkZXIgPSBjb21wdXRlX3dyaXRlX29yZGVyKCk7CisKKwlkbyB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljaGFyICpwYWNrX3RtcF9uYW1lID0gTlVMTDsKKworCQlpZiAocGFja190b19zdGRvdXQpCisJCQlmID0gaGFzaGZkX3Rocm91Z2hwdXQoMSwgIjxzdGRvdXQ+IiwgcHJvZ3Jlc3Nfc3RhdGUpOworCQllbHNlCisJCQlmID0gY3JlYXRlX3RtcF9wYWNrZmlsZSgmcGFja190bXBfbmFtZSk7CisKKwkJb2Zmc2V0ID0gd3JpdGVfcGFja19oZWFkZXIoZiwgbnJfcmVtYWluaW5nKTsKKworCQlpZiAocmV1c2VfcGFja2ZpbGUpIHsKKwkJCWFzc2VydChwYWNrX3RvX3N0ZG91dCk7CisJCQl3cml0ZV9yZXVzZWRfcGFjayhmKTsKKwkJCW9mZnNldCA9IGhhc2hmaWxlX3RvdGFsKGYpOworCQl9CisKKwkJbnJfd3JpdHRlbiA9IDA7CisJCWZvciAoOyBpIDwgdG9fcGFjay5ucl9vYmplY3RzOyBpKyspIHsKKwkJCXN0cnVjdCBvYmplY3RfZW50cnkgKmUgPSB3cml0ZV9vcmRlcltpXTsKKwkJCWlmICh3cml0ZV9vbmUoZiwgZSwgJm9mZnNldCkgPT0gV1JJVEVfT05FX0JSRUFLKQorCQkJCWJyZWFrOworCQkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzc19zdGF0ZSwgd3JpdHRlbik7CisJCX0KKworCQkvKgorCQkgKiBEaWQgd2Ugd3JpdGUgdGhlIHdyb25nICMgZW50cmllcyBpbiB0aGUgaGVhZGVyPworCQkgKiBJZiBzbywgcmV3cml0ZSBpdCBsaWtlIGluIGZhc3QtaW1wb3J0CisJCSAqLworCQlpZiAocGFja190b19zdGRvdXQpIHsKKwkJCWZpbmFsaXplX2hhc2hmaWxlKGYsIG9pZC5oYXNoLCBDU1VNX0hBU0hfSU5fU1RSRUFNIHwgQ1NVTV9DTE9TRSk7CisJCX0gZWxzZSBpZiAobnJfd3JpdHRlbiA9PSBucl9yZW1haW5pbmcpIHsKKwkJCWZpbmFsaXplX2hhc2hmaWxlKGYsIG9pZC5oYXNoLCBDU1VNX0hBU0hfSU5fU1RSRUFNIHwgQ1NVTV9GU1lOQyB8IENTVU1fQ0xPU0UpOworCQl9IGVsc2UgeworCQkJaW50IGZkID0gZmluYWxpemVfaGFzaGZpbGUoZiwgb2lkLmhhc2gsIDApOworCQkJZml4dXBfcGFja19oZWFkZXJfZm9vdGVyKGZkLCBvaWQuaGFzaCwgcGFja190bXBfbmFtZSwKKwkJCQkJCSBucl93cml0dGVuLCBvaWQuaGFzaCwgb2Zmc2V0KTsKKwkJCWNsb3NlKGZkKTsKKwkJCWlmICh3cml0ZV9iaXRtYXBfaW5kZXgpIHsKKwkJCQlpZiAod3JpdGVfYml0bWFwX2luZGV4ICE9IFdSSVRFX0JJVE1BUF9RVUlFVCkKKwkJCQkJd2FybmluZyhfKG5vX3NwbGl0X3dhcm5pbmcpKTsKKwkJCQl3cml0ZV9iaXRtYXBfaW5kZXggPSAwOworCQkJfQorCQl9CisKKwkJaWYgKCFwYWNrX3RvX3N0ZG91dCkgeworCQkJc3RydWN0IHN0YXQgc3Q7CisJCQlzdHJ1Y3Qgc3RyYnVmIHRtcG5hbWUgPSBTVFJCVUZfSU5JVDsKKworCQkJLyoKKwkJCSAqIFBhY2tzIGFyZSBydW50aW1lIGFjY2Vzc2VkIGluIHRoZWlyIG10aW1lCisJCQkgKiBvcmRlciBzaW5jZSBuZXdlciBwYWNrcyBhcmUgbW9yZSBsaWtlbHkgdG8gY29udGFpbgorCQkJICogeW91bmdlciBvYmplY3RzLiAgU28gaWYgd2UgYXJlIGNyZWF0aW5nIG11bHRpcGxlCisJCQkgKiBwYWNrcyB0aGVuIHdlIHNob3VsZCBtb2RpZnkgdGhlIG10aW1lIG9mIGxhdGVyIG9uZXMKKwkJCSAqIHRvIHByZXNlcnZlIHRoaXMgcHJvcGVydHkuCisJCQkgKi8KKwkJCWlmIChzdGF0KHBhY2tfdG1wX25hbWUsICZzdCkgPCAwKSB7CisJCQkJd2FybmluZ19lcnJubyhfKCJmYWlsZWQgdG8gc3RhdCAlcyIpLCBwYWNrX3RtcF9uYW1lKTsKKwkJCX0gZWxzZSBpZiAoIWxhc3RfbXRpbWUpIHsKKwkJCQlsYXN0X210aW1lID0gc3Quc3RfbXRpbWU7CisJCQl9IGVsc2UgeworCQkJCXN0cnVjdCB1dGltYnVmIHV0YjsKKwkJCQl1dGIuYWN0aW1lID0gc3Quc3RfYXRpbWU7CisJCQkJdXRiLm1vZHRpbWUgPSAtLWxhc3RfbXRpbWU7CisJCQkJaWYgKHV0aW1lKHBhY2tfdG1wX25hbWUsICZ1dGIpIDwgMCkKKwkJCQkJd2FybmluZ19lcnJubyhfKCJmYWlsZWQgdXRpbWUoKSBvbiAlcyIpLCBwYWNrX3RtcF9uYW1lKTsKKwkJCX0KKworCQkJc3RyYnVmX2FkZGYoJnRtcG5hbWUsICIlcy0iLCBiYXNlX25hbWUpOworCisJCQlpZiAod3JpdGVfYml0bWFwX2luZGV4KSB7CisJCQkJYml0bWFwX3dyaXRlcl9zZXRfY2hlY2tzdW0ob2lkLmhhc2gpOworCQkJCWJpdG1hcF93cml0ZXJfYnVpbGRfdHlwZV9pbmRleCgKKwkJCQkJJnRvX3BhY2ssIHdyaXR0ZW5fbGlzdCwgbnJfd3JpdHRlbik7CisJCQl9CisKKwkJCWZpbmlzaF90bXBfcGFja2ZpbGUoJnRtcG5hbWUsIHBhY2tfdG1wX25hbWUsCisJCQkJCSAgICB3cml0dGVuX2xpc3QsIG5yX3dyaXR0ZW4sCisJCQkJCSAgICAmcGFja19pZHhfb3B0cywgb2lkLmhhc2gpOworCisJCQlpZiAod3JpdGVfYml0bWFwX2luZGV4KSB7CisJCQkJc3RyYnVmX2FkZGYoJnRtcG5hbWUsICIlcy5iaXRtYXAiLCBvaWRfdG9faGV4KCZvaWQpKTsKKworCQkJCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzX3N0YXRlKTsKKworCQkJCWJpdG1hcF93cml0ZXJfc2hvd19wcm9ncmVzcyhwcm9ncmVzcyk7CisJCQkJYml0bWFwX3dyaXRlcl9yZXVzZV9iaXRtYXBzKCZ0b19wYWNrKTsKKwkJCQliaXRtYXBfd3JpdGVyX3NlbGVjdF9jb21taXRzKGluZGV4ZWRfY29tbWl0cywgaW5kZXhlZF9jb21taXRzX25yLCAtMSk7CisJCQkJYml0bWFwX3dyaXRlcl9idWlsZCgmdG9fcGFjayk7CisJCQkJYml0bWFwX3dyaXRlcl9maW5pc2god3JpdHRlbl9saXN0LCBucl93cml0dGVuLAorCQkJCQkJICAgICB0bXBuYW1lLmJ1Ziwgd3JpdGVfYml0bWFwX29wdGlvbnMpOworCQkJCXdyaXRlX2JpdG1hcF9pbmRleCA9IDA7CisJCQl9CisKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZ0bXBuYW1lKTsKKwkJCWZyZWUocGFja190bXBfbmFtZSk7CisJCQlwdXRzKG9pZF90b19oZXgoJm9pZCkpOworCQl9CisKKwkJLyogbWFyayB3cml0dGVuIG9iamVjdHMgYXMgd3JpdHRlbiB0byBwcmV2aW91cyBwYWNrICovCisJCWZvciAoaiA9IDA7IGogPCBucl93cml0dGVuOyBqKyspIHsKKwkJCXdyaXR0ZW5fbGlzdFtqXS0+b2Zmc2V0ID0gKG9mZl90KS0xOworCQl9CisJCW5yX3JlbWFpbmluZyAtPSBucl93cml0dGVuOworCX0gd2hpbGUgKG5yX3JlbWFpbmluZyAmJiBpIDwgdG9fcGFjay5ucl9vYmplY3RzKTsKKworCWZyZWUod3JpdHRlbl9saXN0KTsKKwlmcmVlKHdyaXRlX29yZGVyKTsKKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzc19zdGF0ZSk7CisJaWYgKHdyaXR0ZW4gIT0gbnJfcmVzdWx0KQorCQlkaWUoXygid3JvdGUgJSJQUkl1MzIiIG9iamVjdHMgd2hpbGUgZXhwZWN0aW5nICUiUFJJdTMyKSwKKwkJICAgIHdyaXR0ZW4sIG5yX3Jlc3VsdCk7CisJdHJhY2UyX2RhdGFfaW50bWF4KCJwYWNrLW9iamVjdHMiLCB0aGVfcmVwb3NpdG9yeSwKKwkJCSAgICJ3cml0ZV9wYWNrX2ZpbGUvd3JvdGUiLCBucl9yZXN1bHQpOworfQorCitzdGF0aWMgaW50IG5vX3RyeV9kZWx0YShjb25zdCBjaGFyICpwYXRoKQoreworCXN0YXRpYyBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2s7CisKKwlpZiAoIWNoZWNrKQorCQljaGVjayA9IGF0dHJfY2hlY2tfaW5pdGwoImRlbHRhIiwgTlVMTCk7CisJZ2l0X2NoZWNrX2F0dHIodGhlX3JlcG9zaXRvcnktPmluZGV4LCBwYXRoLCBjaGVjayk7CisJaWYgKEFUVFJfRkFMU0UoY2hlY2stPml0ZW1zWzBdLnZhbHVlKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXaGVuIGFkZGluZyBhbiBvYmplY3QsIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBhbHJlYWR5IGFkZGVkIGl0CisgKiB0byBvdXIgcGFja2luZyBsaXN0LiBJZiBzbywgd2UgY2FuIHNraXAuIEhvd2V2ZXIsIGlmIHdlIGFyZQorICogYmVpbmcgYXNrZWQgdG8gZXhjbHVkZWkgdCwgYnV0IHRoZSBwcmV2aW91cyBtZW50aW9uIHdhcyB0byBpbmNsdWRlCisgKiBpdCwgbWFrZSBzdXJlIHRvIGFkanVzdCBpdHMgZmxhZ3MgYW5kIHR3ZWFrIG91ciBudW1iZXJzIGFjY29yZGluZ2x5LgorICoKKyAqIEFzIGFuIG9wdGltaXphdGlvbiwgd2UgcGFzcyBvdXQgdGhlIGluZGV4IHBvc2l0aW9uIHdoZXJlIHdlIHdvdWxkIGhhdmUKKyAqIGZvdW5kIHRoZSBpdGVtLCBzaW5jZSB0aGF0IHNhdmVzIHVzIGZyb20gaGF2aW5nIHRvIGxvb2sgaXQgdXAgYWdhaW4gYQorICogZmV3IGxpbmVzIGxhdGVyIHdoZW4gd2Ugd2FudCB0byBhZGQgdGhlIG5ldyBlbnRyeS4KKyAqLworc3RhdGljIGludCBoYXZlX2R1cGxpY2F0ZV9lbnRyeShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJaW50IGV4Y2x1ZGUpCit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnk7CisKKwlpZiAocmV1c2VfcGFja2ZpbGVfYml0bWFwICYmCisJICAgIGJpdG1hcF93YWxrX2NvbnRhaW5zKGJpdG1hcF9naXQsIHJldXNlX3BhY2tmaWxlX2JpdG1hcCwgb2lkKSkKKwkJcmV0dXJuIDE7CisKKwllbnRyeSA9IHBhY2tsaXN0X2ZpbmQoJnRvX3BhY2ssIG9pZCk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZXhjbHVkZSkgeworCQlpZiAoIWVudHJ5LT5wcmVmZXJyZWRfYmFzZSkKKwkJCW5yX3Jlc3VsdC0tOworCQllbnRyeS0+cHJlZmVycmVkX2Jhc2UgPSAxOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHdhbnRfZm91bmRfb2JqZWN0KGludCBleGNsdWRlLCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwlpZiAoZXhjbHVkZSkKKwkJcmV0dXJuIDE7CisJaWYgKGluY3JlbWVudGFsKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogV2hlbiBhc2tlZCB0byBkbyAtLWxvY2FsIChkbyBub3QgaW5jbHVkZSBhbiBvYmplY3QgdGhhdCBhcHBlYXJzIGluIGEKKwkgKiBwYWNrIHdlIGJvcnJvdyBmcm9tIGVsc2V3aGVyZSkgb3IgLS1ob25vci1wYWNrLWtlZXAgKGRvIG5vdCBpbmNsdWRlCisJICogYW4gb2JqZWN0IHRoYXQgYXBwZWFycyBpbiBhIHBhY2sgbWFya2VkIHdpdGggLmtlZXApLCBmaW5kaW5nIGEgcGFjaworCSAqIHRoYXQgbWF0Y2hlcyB0aGUgY3JpdGVyaWEgaXMgc3VmZmljaWVudCBmb3IgdXMgdG8gZGVjaWRlIHRvIG9taXQgaXQuCisJICogSG93ZXZlciwgZXZlbiBpZiB0aGlzIHBhY2sgZG9lcyBub3Qgc2F0aXNmeSB0aGUgY3JpdGVyaWEsIHdlIG5lZWQgdG8KKwkgKiBtYWtlIHN1cmUgbm8gY29weSBvZiB0aGlzIG9iamVjdCBhcHBlYXJzIGluIF9hbnlfIHBhY2sgdGhhdCBtYWtlcyB1cworCSAqIHRvIG9taXQgdGhlIG9iamVjdCwgc28gd2UgbmVlZCB0byBjaGVjayBhbGwgdGhlIHBhY2tzLgorCSAqCisJICogV2UgY2FuIGhvd2V2ZXIgZmlyc3QgY2hlY2sgd2hldGhlciB0aGVzZSBvcHRpb25zIGNhbiBwb3NzaWJsZSBtYXR0ZXI7CisJICogaWYgdGhleSBkbyBub3QgbWF0dGVyIHdlIGtub3cgd2Ugd2FudCB0aGUgb2JqZWN0IGluIGdlbmVyYXRlZCBwYWNrLgorCSAqIE90aGVyd2lzZSwgd2Ugc2lnbmFsICItMSIgYXQgdGhlIGVuZCB0byB0ZWxsIHRoZSBjYWxsZXIgdGhhdCB3ZSBkbworCSAqIG5vdCBrbm93IGVpdGhlciB3YXksIGFuZCBpdCBuZWVkcyB0byBjaGVjayBtb3JlIHBhY2tzLgorCSAqLworCWlmICghaWdub3JlX3BhY2tlZF9rZWVwX29uX2Rpc2sgJiYKKwkgICAgIWlnbm9yZV9wYWNrZWRfa2VlcF9pbl9jb3JlICYmCisJICAgICghbG9jYWwgfHwgIWhhdmVfbm9uX2xvY2FsX3BhY2tzKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAobG9jYWwgJiYgIXAtPnBhY2tfbG9jYWwpCisJCXJldHVybiAwOworCWlmIChwLT5wYWNrX2xvY2FsICYmCisJICAgICgoaWdub3JlX3BhY2tlZF9rZWVwX29uX2Rpc2sgJiYgcC0+cGFja19rZWVwKSB8fAorCSAgICAgKGlnbm9yZV9wYWNrZWRfa2VlcF9pbl9jb3JlICYmIHAtPnBhY2tfa2VlcF9pbl9jb3JlKSkpCisJCXJldHVybiAwOworCisJLyogd2UgZG9uJ3Qga25vdyB5ZXQ7IGtlZXAgbG9va2luZyBmb3IgbW9yZSBwYWNrcyAqLworCXJldHVybiAtMTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgd2Ugd2FudCB0aGUgb2JqZWN0IGluIHRoZSBwYWNrIChlLmcuLCB3ZSBkbyBub3Qgd2FudAorICogb2JqZWN0cyBmb3VuZCBpbiBub24tbG9jYWwgc3RvcmVzIGlmIHRoZSAiLS1sb2NhbCIgb3B0aW9uIHdhcyB1c2VkKS4KKyAqCisgKiBJZiB0aGUgY2FsbGVyIGFscmVhZHkga25vd3MgYW4gZXhpc3RpbmcgcGFjayBpdCB3YW50cyB0byB0YWtlIHRoZSBvYmplY3QKKyAqIGZyb20sIHRoYXQgaXMgcGFzc2VkIGluICpmb3VuZF9wYWNrIGFuZCAqZm91bmRfb2Zmc2V0OyBvdGhlcndpc2UgdGhpcworICogZnVuY3Rpb24gZmluZHMgaWYgdGhlcmUgaXMgYW55IHBhY2sgdGhhdCBoYXMgdGhlIG9iamVjdCBhbmQgcmV0dXJucyB0aGUgcGFjaworICogYW5kIGl0cyBvZmZzZXQgaW4gdGhlc2UgdmFyaWFibGVzLgorICovCitzdGF0aWMgaW50IHdhbnRfb2JqZWN0X2luX3BhY2soY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgIGludCBleGNsdWRlLAorCQkJICAgICAgIHN0cnVjdCBwYWNrZWRfZ2l0ICoqZm91bmRfcGFjaywKKwkJCSAgICAgICBvZmZfdCAqZm91bmRfb2Zmc2V0KQoreworCWludCB3YW50OworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbTsKKworCWlmICghZXhjbHVkZSAmJiBsb2NhbCAmJiBoYXNfbG9vc2Vfb2JqZWN0X25vbmxvY2FsKG9pZCkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB3ZSBhbHJlYWR5IGtub3cgdGhlIHBhY2sgb2JqZWN0IGxpdmVzIGluLCBzdGFydCBjaGVja3MgZnJvbSB0aGF0CisJICogcGFjayAtIGluIHRoZSB1c3VhbCBjYXNlIHdoZW4gbmVpdGhlciAtLWxvY2FsIHdhcyBnaXZlbiBub3IgLmtlZXAgZmlsZXMKKwkgKiBhcmUgcHJlc2VudCB3ZSB3aWxsIGRldGVybWluZSB0aGUgYW5zd2VyIHJpZ2h0IG5vdy4KKwkgKi8KKwlpZiAoKmZvdW5kX3BhY2spIHsKKwkJd2FudCA9IHdhbnRfZm91bmRfb2JqZWN0KGV4Y2x1ZGUsICpmb3VuZF9wYWNrKTsKKwkJaWYgKHdhbnQgIT0gLTEpCisJCQlyZXR1cm4gd2FudDsKKwl9CisKKwlmb3IgKG0gPSBnZXRfbXVsdGlfcGFja19pbmRleCh0aGVfcmVwb3NpdG9yeSk7IG07IG0gPSBtLT5uZXh0KSB7CisJCXN0cnVjdCBwYWNrX2VudHJ5IGU7CisJCWlmIChmaWxsX21pZHhfZW50cnkodGhlX3JlcG9zaXRvcnksIG9pZCwgJmUsIG0pKSB7CisJCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGUucDsKKwkJCW9mZl90IG9mZnNldDsKKworCQkJaWYgKHAgPT0gKmZvdW5kX3BhY2spCisJCQkJb2Zmc2V0ID0gKmZvdW5kX29mZnNldDsKKwkJCWVsc2UKKwkJCQlvZmZzZXQgPSBmaW5kX3BhY2tfZW50cnlfb25lKG9pZC0+aGFzaCwgcCk7CisKKwkJCWlmIChvZmZzZXQpIHsKKwkJCQlpZiAoISpmb3VuZF9wYWNrKSB7CisJCQkJCWlmICghaXNfcGFja192YWxpZChwKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQkqZm91bmRfb2Zmc2V0ID0gb2Zmc2V0OworCQkJCQkqZm91bmRfcGFjayA9IHA7CisJCQkJfQorCQkJCXdhbnQgPSB3YW50X2ZvdW5kX29iamVjdChleGNsdWRlLCBwKTsKKwkJCQlpZiAod2FudCAhPSAtMSkKKwkJCQkJcmV0dXJuIHdhbnQ7CisJCQl9CisJCX0KKwl9CisKKwlsaXN0X2Zvcl9lYWNoKHBvcywgZ2V0X3BhY2tlZF9naXRfbXJ1KHRoZV9yZXBvc2l0b3J5KSkgeworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgcGFja2VkX2dpdCwgbXJ1KTsKKwkJb2ZmX3Qgb2Zmc2V0OworCisJCWlmIChwID09ICpmb3VuZF9wYWNrKQorCQkJb2Zmc2V0ID0gKmZvdW5kX29mZnNldDsKKwkJZWxzZQorCQkJb2Zmc2V0ID0gZmluZF9wYWNrX2VudHJ5X29uZShvaWQtPmhhc2gsIHApOworCisJCWlmIChvZmZzZXQpIHsKKwkJCWlmICghKmZvdW5kX3BhY2spIHsKKwkJCQlpZiAoIWlzX3BhY2tfdmFsaWQocCkpCisJCQkJCWNvbnRpbnVlOworCQkJCSpmb3VuZF9vZmZzZXQgPSBvZmZzZXQ7CisJCQkJKmZvdW5kX3BhY2sgPSBwOworCQkJfQorCQkJd2FudCA9IHdhbnRfZm91bmRfb2JqZWN0KGV4Y2x1ZGUsIHApOworCQkJaWYgKCFleGNsdWRlICYmIHdhbnQgPiAwKQorCQkJCWxpc3RfbW92ZSgmcC0+bXJ1LAorCQkJCQkgIGdldF9wYWNrZWRfZ2l0X21ydSh0aGVfcmVwb3NpdG9yeSkpOworCQkJaWYgKHdhbnQgIT0gLTEpCisJCQkJcmV0dXJuIHdhbnQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX29iamVjdF9lbnRyeShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJCXVpbnQzMl90IGhhc2gsCisJCQkJaW50IGV4Y2x1ZGUsCisJCQkJaW50IG5vX3RyeV9kZWx0YSwKKwkJCQlzdHJ1Y3QgcGFja2VkX2dpdCAqZm91bmRfcGFjaywKKwkJCQlvZmZfdCBmb3VuZF9vZmZzZXQpCit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnk7CisKKwllbnRyeSA9IHBhY2tsaXN0X2FsbG9jKCZ0b19wYWNrLCBvaWQpOworCWVudHJ5LT5oYXNoID0gaGFzaDsKKwlvZV9zZXRfdHlwZShlbnRyeSwgdHlwZSk7CisJaWYgKGV4Y2x1ZGUpCisJCWVudHJ5LT5wcmVmZXJyZWRfYmFzZSA9IDE7CisJZWxzZQorCQlucl9yZXN1bHQrKzsKKwlpZiAoZm91bmRfcGFjaykgeworCQlvZV9zZXRfaW5fcGFjaygmdG9fcGFjaywgZW50cnksIGZvdW5kX3BhY2spOworCQllbnRyeS0+aW5fcGFja19vZmZzZXQgPSBmb3VuZF9vZmZzZXQ7CisJfQorCisJZW50cnktPm5vX3RyeV9kZWx0YSA9IG5vX3RyeV9kZWx0YTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgbm9fY2xvc3VyZV93YXJuaW5nW10gPSBOXygKKyJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIGFzIHNvbWUgb2JqZWN0cyBhcmUgbm90IGJlaW5nIHBhY2tlZCIKKyk7CisKK3N0YXRpYyBpbnQgYWRkX29iamVjdF9lbnRyeShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgZXhjbHVkZSkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqZm91bmRfcGFjayA9IE5VTEw7CisJb2ZmX3QgZm91bmRfb2Zmc2V0ID0gMDsKKworCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3Nfc3RhdGUsICsrbnJfc2Vlbik7CisKKwlpZiAoaGF2ZV9kdXBsaWNhdGVfZW50cnkob2lkLCBleGNsdWRlKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXdhbnRfb2JqZWN0X2luX3BhY2sob2lkLCBleGNsdWRlLCAmZm91bmRfcGFjaywgJmZvdW5kX29mZnNldCkpIHsKKwkJLyogVGhlIHBhY2sgaXMgbWlzc2luZyBhbiBvYmplY3QsIHNvIGl0IHdpbGwgbm90IGhhdmUgY2xvc3VyZSAqLworCQlpZiAod3JpdGVfYml0bWFwX2luZGV4KSB7CisJCQlpZiAod3JpdGVfYml0bWFwX2luZGV4ICE9IFdSSVRFX0JJVE1BUF9RVUlFVCkKKwkJCQl3YXJuaW5nKF8obm9fY2xvc3VyZV93YXJuaW5nKSk7CisJCQl3cml0ZV9iaXRtYXBfaW5kZXggPSAwOworCQl9CisJCXJldHVybiAwOworCX0KKworCWNyZWF0ZV9vYmplY3RfZW50cnkob2lkLCB0eXBlLCBwYWNrX25hbWVfaGFzaChuYW1lKSwKKwkJCSAgICBleGNsdWRlLCBuYW1lICYmIG5vX3RyeV9kZWx0YShuYW1lKSwKKwkJCSAgICBmb3VuZF9wYWNrLCBmb3VuZF9vZmZzZXQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGFkZF9vYmplY3RfZW50cnlfZnJvbV9iaXRtYXAoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQllbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkJCWludCBmbGFncywgdWludDMyX3QgbmFtZV9oYXNoLAorCQkJCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjaywgb2ZmX3Qgb2Zmc2V0KQoreworCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3Nfc3RhdGUsICsrbnJfc2Vlbik7CisKKwlpZiAoaGF2ZV9kdXBsaWNhdGVfZW50cnkob2lkLCAwKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXdhbnRfb2JqZWN0X2luX3BhY2sob2lkLCAwLCAmcGFjaywgJm9mZnNldCkpCisJCXJldHVybiAwOworCisJY3JlYXRlX29iamVjdF9lbnRyeShvaWQsIHR5cGUsIG5hbWVfaGFzaCwgMCwgMCwgcGFjaywgb2Zmc2V0KTsKKwlyZXR1cm4gMTsKK30KKworc3RydWN0IHBiYXNlX3RyZWVfY2FjaGUgeworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCByZWY7CisJaW50IHRlbXBvcmFyeTsKKwl2b2lkICp0cmVlX2RhdGE7CisJdW5zaWduZWQgbG9uZyB0cmVlX3NpemU7Cit9OworCitzdGF0aWMgc3RydWN0IHBiYXNlX3RyZWVfY2FjaGUgKihwYmFzZV90cmVlX2NhY2hlWzI1Nl0pOworc3RhdGljIGludCBwYmFzZV90cmVlX2NhY2hlX2l4KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gb2lkLT5oYXNoWzBdICUgQVJSQVlfU0laRShwYmFzZV90cmVlX2NhY2hlKTsKK30KK3N0YXRpYyBpbnQgcGJhc2VfdHJlZV9jYWNoZV9peF9pbmNyKGludCBpeCkKK3sKKwlyZXR1cm4gKGl4KzEpICUgQVJSQVlfU0laRShwYmFzZV90cmVlX2NhY2hlKTsKK30KKworc3RhdGljIHN0cnVjdCBwYmFzZV90cmVlIHsKKwlzdHJ1Y3QgcGJhc2VfdHJlZSAqbmV4dDsKKwkvKiBUaGlzIGlzIGEgcGhvbnkgImNhY2hlIiBlbnRyeTsgd2UgYXJlIG5vdAorCSAqIGdvaW5nIHRvIGV2aWN0IGl0IG9yIGZpbmQgaXQgdGhyb3VnaCBfZ2V0KCkKKwkgKiBtZWNoYW5pc20gLS0gdGhpcyBpcyBmb3IgdGhlIHRvcGxldmVsIG5vZGUgdGhhdAorCSAqIHdvdWxkIGFsbW9zdCBhbHdheXMgY2hhbmdlIHdpdGggYW55IGNvbW1pdC4KKwkgKi8KKwlzdHJ1Y3QgcGJhc2VfdHJlZV9jYWNoZSBwY2FjaGU7Cit9ICpwYmFzZV90cmVlOworCitzdGF0aWMgc3RydWN0IHBiYXNlX3RyZWVfY2FjaGUgKnBiYXNlX3RyZWVfZ2V0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgcGJhc2VfdHJlZV9jYWNoZSAqZW50LCAqbmVudDsKKwl2b2lkICpkYXRhOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJaW50IG5laWdoOworCWludCBteV9peCA9IHBiYXNlX3RyZWVfY2FjaGVfaXgob2lkKTsKKwlpbnQgYXZhaWxhYmxlX2l4ID0gLTE7CisKKwkvKiBwYmFzZS10cmVlLWNhY2hlIGFjdHMgYXMgYSBsaW1pdGVkIGhhc2h0YWJsZS4KKwkgKiB5b3VyIG9iamVjdCB3aWxsIGJlIGZvdW5kIGF0IHlvdXIgaW5kZXggb3Igd2l0aGluIGEgZmV3CisJICogc2xvdHMgYWZ0ZXIgdGhhdCBzbG90IGlmIGl0IGlzIGNhY2hlZC4KKwkgKi8KKwlmb3IgKG5laWdoID0gMDsgbmVpZ2ggPCA4OyBuZWlnaCsrKSB7CisJCWVudCA9IHBiYXNlX3RyZWVfY2FjaGVbbXlfaXhdOworCQlpZiAoZW50ICYmIG9pZGVxKCZlbnQtPm9pZCwgb2lkKSkgeworCQkJZW50LT5yZWYrKzsKKwkJCXJldHVybiBlbnQ7CisJCX0KKwkJZWxzZSBpZiAoKChhdmFpbGFibGVfaXggPCAwKSAmJiAoIWVudCB8fCAhZW50LT5yZWYpKSB8fAorCQkJICgoMCA8PSBhdmFpbGFibGVfaXgpICYmCisJCQkgICghZW50ICYmIHBiYXNlX3RyZWVfY2FjaGVbYXZhaWxhYmxlX2l4XSkpKQorCQkJYXZhaWxhYmxlX2l4ID0gbXlfaXg7CisJCWlmICghZW50KQorCQkJYnJlYWs7CisJCW15X2l4ID0gcGJhc2VfdHJlZV9jYWNoZV9peF9pbmNyKG15X2l4KTsKKwl9CisKKwkvKiBEaWQgbm90IGZpbmQgb25lLiAgRWl0aGVyIHdlIGdvdCBhIGJvZ3VzIHJlcXVlc3Qgb3IKKwkgKiB3ZSBuZWVkIHRvIHJlYWQgYW5kIHBlcmhhcHMgY2FjaGUuCisJICovCisJZGF0YSA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHR5cGUgIT0gT0JKX1RSRUUpIHsKKwkJZnJlZShkYXRhKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogV2UgbmVlZCB0byBlaXRoZXIgY2FjaGUgb3IgcmV0dXJuIGEgdGhyb3dhd2F5IGNvcHkgKi8KKworCWlmIChhdmFpbGFibGVfaXggPCAwKQorCQllbnQgPSBOVUxMOworCWVsc2UgeworCQllbnQgPSBwYmFzZV90cmVlX2NhY2hlW2F2YWlsYWJsZV9peF07CisJCW15X2l4ID0gYXZhaWxhYmxlX2l4OworCX0KKworCWlmICghZW50KSB7CisJCW5lbnQgPSB4bWFsbG9jKHNpemVvZigqbmVudCkpOworCQluZW50LT50ZW1wb3JhcnkgPSAoYXZhaWxhYmxlX2l4IDwgMCk7CisJfQorCWVsc2UgeworCQkvKiBldmljdCBhbmQgcmV1c2UgKi8KKwkJZnJlZShlbnQtPnRyZWVfZGF0YSk7CisJCW5lbnQgPSBlbnQ7CisJfQorCW9pZGNweSgmbmVudC0+b2lkLCBvaWQpOworCW5lbnQtPnRyZWVfZGF0YSA9IGRhdGE7CisJbmVudC0+dHJlZV9zaXplID0gc2l6ZTsKKwluZW50LT5yZWYgPSAxOworCWlmICghbmVudC0+dGVtcG9yYXJ5KQorCQlwYmFzZV90cmVlX2NhY2hlW215X2l4XSA9IG5lbnQ7CisJcmV0dXJuIG5lbnQ7Cit9CisKK3N0YXRpYyB2b2lkIHBiYXNlX3RyZWVfcHV0KHN0cnVjdCBwYmFzZV90cmVlX2NhY2hlICpjYWNoZSkKK3sKKwlpZiAoIWNhY2hlLT50ZW1wb3JhcnkpIHsKKwkJY2FjaGUtPnJlZi0tOworCQlyZXR1cm47CisJfQorCWZyZWUoY2FjaGUtPnRyZWVfZGF0YSk7CisJZnJlZShjYWNoZSk7Cit9CisKK3N0YXRpYyBpbnQgbmFtZV9jbXBfbGVuKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgbmFtZVtpXSAmJiBuYW1lW2ldICE9ICdcbicgJiYgbmFtZVtpXSAhPSAnLyc7IGkrKykKKwkJOworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCBhZGRfcGJhc2Vfb2JqZWN0KHN0cnVjdCB0cmVlX2Rlc2MgKnRyZWUsCisJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgIGludCBjbXBsZW4sCisJCQkgICAgIGNvbnN0IGNoYXIgKmZ1bGxuYW1lKQoreworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCWludCBjbXA7CisKKwl3aGlsZSAodHJlZV9lbnRyeSh0cmVlLCZlbnRyeSkpIHsKKwkJaWYgKFNfSVNHSVRMSU5LKGVudHJ5Lm1vZGUpKQorCQkJY29udGludWU7CisJCWNtcCA9IHRyZWVfZW50cnlfbGVuKCZlbnRyeSkgIT0gY21wbGVuID8gMSA6CisJCSAgICAgIG1lbWNtcChuYW1lLCBlbnRyeS5wYXRoLCBjbXBsZW4pOworCQlpZiAoY21wID4gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoY21wIDwgMCkKKwkJCXJldHVybjsKKwkJaWYgKG5hbWVbY21wbGVuXSAhPSAnLycpIHsKKwkJCWFkZF9vYmplY3RfZW50cnkoJmVudHJ5Lm9pZCwKKwkJCQkJIG9iamVjdF90eXBlKGVudHJ5Lm1vZGUpLAorCQkJCQkgZnVsbG5hbWUsIDEpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChTX0lTRElSKGVudHJ5Lm1vZGUpKSB7CisJCQlzdHJ1Y3QgdHJlZV9kZXNjIHN1YjsKKwkJCXN0cnVjdCBwYmFzZV90cmVlX2NhY2hlICp0cmVlOworCQkJY29uc3QgY2hhciAqZG93biA9IG5hbWUrY21wbGVuKzE7CisJCQlpbnQgZG93bmxlbiA9IG5hbWVfY21wX2xlbihkb3duKTsKKworCQkJdHJlZSA9IHBiYXNlX3RyZWVfZ2V0KCZlbnRyeS5vaWQpOworCQkJaWYgKCF0cmVlKQorCQkJCXJldHVybjsKKwkJCWluaXRfdHJlZV9kZXNjKCZzdWIsIHRyZWUtPnRyZWVfZGF0YSwgdHJlZS0+dHJlZV9zaXplKTsKKworCQkJYWRkX3BiYXNlX29iamVjdCgmc3ViLCBkb3duLCBkb3dubGVuLCBmdWxsbmFtZSk7CisJCQlwYmFzZV90cmVlX3B1dCh0cmVlKTsKKwkJfQorCX0KK30KKworc3RhdGljIHVuc2lnbmVkICpkb25lX3BiYXNlX3BhdGhzOworc3RhdGljIGludCBkb25lX3BiYXNlX3BhdGhzX251bTsKK3N0YXRpYyBpbnQgZG9uZV9wYmFzZV9wYXRoc19hbGxvYzsKK3N0YXRpYyBpbnQgZG9uZV9wYmFzZV9wYXRoX3Bvcyh1bnNpZ25lZCBoYXNoKQoreworCWludCBsbyA9IDA7CisJaW50IGhpID0gZG9uZV9wYmFzZV9wYXRoc19udW07CisJd2hpbGUgKGxvIDwgaGkpIHsKKwkJaW50IG1pID0gbG8gKyAoaGkgLSBsbykgLyAyOworCQlpZiAoZG9uZV9wYmFzZV9wYXRoc1ttaV0gPT0gaGFzaCkKKwkJCXJldHVybiBtaTsKKwkJaWYgKGRvbmVfcGJhc2VfcGF0aHNbbWldIDwgaGFzaCkKKwkJCWhpID0gbWk7CisJCWVsc2UKKwkJCWxvID0gbWkgKyAxOworCX0KKwlyZXR1cm4gLWxvLTE7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcGJhc2VfcGF0aCh1bnNpZ25lZCBoYXNoKQoreworCWludCBwb3MgPSBkb25lX3BiYXNlX3BhdGhfcG9zKGhhc2gpOworCWlmICgwIDw9IHBvcykKKwkJcmV0dXJuIDE7CisJcG9zID0gLXBvcyAtIDE7CisJQUxMT0NfR1JPVyhkb25lX3BiYXNlX3BhdGhzLAorCQkgICBkb25lX3BiYXNlX3BhdGhzX251bSArIDEsCisJCSAgIGRvbmVfcGJhc2VfcGF0aHNfYWxsb2MpOworCWRvbmVfcGJhc2VfcGF0aHNfbnVtKys7CisJaWYgKHBvcyA8IGRvbmVfcGJhc2VfcGF0aHNfbnVtKQorCQlNT1ZFX0FSUkFZKGRvbmVfcGJhc2VfcGF0aHMgKyBwb3MgKyAxLCBkb25lX3BiYXNlX3BhdGhzICsgcG9zLAorCQkJICAgZG9uZV9wYmFzZV9wYXRoc19udW0gLSBwb3MgLSAxKTsKKwlkb25lX3BiYXNlX3BhdGhzW3Bvc10gPSBoYXNoOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZGRfcHJlZmVycmVkX2Jhc2Vfb2JqZWN0KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHBiYXNlX3RyZWUgKml0OworCWludCBjbXBsZW47CisJdW5zaWduZWQgaGFzaCA9IHBhY2tfbmFtZV9oYXNoKG5hbWUpOworCisJaWYgKCFudW1fcHJlZmVycmVkX2Jhc2UgfHwgY2hlY2tfcGJhc2VfcGF0aChoYXNoKSkKKwkJcmV0dXJuOworCisJY21wbGVuID0gbmFtZV9jbXBfbGVuKG5hbWUpOworCWZvciAoaXQgPSBwYmFzZV90cmVlOyBpdDsgaXQgPSBpdC0+bmV4dCkgeworCQlpZiAoY21wbGVuID09IDApIHsKKwkJCWFkZF9vYmplY3RfZW50cnkoJml0LT5wY2FjaGUub2lkLCBPQkpfVFJFRSwgTlVMTCwgMSk7CisJCX0KKwkJZWxzZSB7CisJCQlzdHJ1Y3QgdHJlZV9kZXNjIHRyZWU7CisJCQlpbml0X3RyZWVfZGVzYygmdHJlZSwgaXQtPnBjYWNoZS50cmVlX2RhdGEsIGl0LT5wY2FjaGUudHJlZV9zaXplKTsKKwkJCWFkZF9wYmFzZV9vYmplY3QoJnRyZWUsIG5hbWUsIGNtcGxlbiwgbmFtZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wcmVmZXJyZWRfYmFzZShzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IHBiYXNlX3RyZWUgKml0OworCXZvaWQgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXN0cnVjdCBvYmplY3RfaWQgdHJlZV9vaWQ7CisKKwlpZiAod2luZG93IDw9IG51bV9wcmVmZXJyZWRfYmFzZSsrKQorCQlyZXR1cm47CisKKwlkYXRhID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksIG9pZCwKKwkJCQkJICB0cmVlX3R5cGUsICZzaXplLCAmdHJlZV9vaWQpOworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJZm9yIChpdCA9IHBiYXNlX3RyZWU7IGl0OyBpdCA9IGl0LT5uZXh0KSB7CisJCWlmIChvaWRlcSgmaXQtPnBjYWNoZS5vaWQsICZ0cmVlX29pZCkpIHsKKwkJCWZyZWUoZGF0YSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpdCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCppdCkpOworCWl0LT5uZXh0ID0gcGJhc2VfdHJlZTsKKwlwYmFzZV90cmVlID0gaXQ7CisKKwlvaWRjcHkoJml0LT5wY2FjaGUub2lkLCAmdHJlZV9vaWQpOworCWl0LT5wY2FjaGUudHJlZV9kYXRhID0gZGF0YTsKKwlpdC0+cGNhY2hlLnRyZWVfc2l6ZSA9IHNpemU7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfcHJlZmVycmVkX2Jhc2Uodm9pZCkKK3sKKwlzdHJ1Y3QgcGJhc2VfdHJlZSAqaXQ7CisJdW5zaWduZWQgaTsKKworCWl0ID0gcGJhc2VfdHJlZTsKKwlwYmFzZV90cmVlID0gTlVMTDsKKwl3aGlsZSAoaXQpIHsKKwkJc3RydWN0IHBiYXNlX3RyZWUgKnRtcCA9IGl0OworCQlpdCA9IHRtcC0+bmV4dDsKKwkJZnJlZSh0bXAtPnBjYWNoZS50cmVlX2RhdGEpOworCQlmcmVlKHRtcCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGJhc2VfdHJlZV9jYWNoZSk7IGkrKykgeworCQlpZiAoIXBiYXNlX3RyZWVfY2FjaGVbaV0pCisJCQljb250aW51ZTsKKwkJZnJlZShwYmFzZV90cmVlX2NhY2hlW2ldLT50cmVlX2RhdGEpOworCQlGUkVFX0FORF9OVUxMKHBiYXNlX3RyZWVfY2FjaGVbaV0pOworCX0KKworCUZSRUVfQU5EX05VTEwoZG9uZV9wYmFzZV9wYXRocyk7CisJZG9uZV9wYmFzZV9wYXRoc19udW0gPSBkb25lX3BiYXNlX3BhdGhzX2FsbG9jID0gMDsKK30KKworLyoKKyAqIFJldHVybiAxIGlmZiB0aGUgb2JqZWN0IHNwZWNpZmllZCBieSAiZGVsdGEiIGNhbiBiZSBzZW50CisgKiBsaXRlcmFsbHkgYXMgYSBkZWx0YSBhZ2FpbnN0IHRoZSBiYXNlIGluICJiYXNlX3NoYTEiLiBJZgorICogc28sIHRoZW4gKmJhc2Vfb3V0IHdpbGwgcG9pbnQgdG8gdGhlIGVudHJ5IGluIG91ciBwYWNraW5nCisgKiBsaXN0LCBvciBOVUxMIGlmIHdlIG11c3QgdXNlIHRoZSBleHRlcm5hbC1iYXNlIGxpc3QuCisgKgorICogRGVwdGggdmFsdWUgZG9lcyBub3QgbWF0dGVyIC0gZmluZF9kZWx0YXMoKSB3aWxsCisgKiBuZXZlciBjb25zaWRlciByZXVzZWQgZGVsdGEgYXMgdGhlIGJhc2Ugb2JqZWN0IHRvCisgKiBkZWx0aWZ5IG90aGVyIG9iamVjdHMgYWdhaW5zdCwgaW4gb3JkZXIgdG8gYXZvaWQKKyAqIGNpcmN1bGFyIGRlbHRhcy4KKyAqLworc3RhdGljIGludCBjYW5fcmV1c2VfZGVsdGEoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYmFzZV9vaWQsCisJCQkgICBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpkZWx0YSwKKwkJCSAgIHN0cnVjdCBvYmplY3RfZW50cnkgKipiYXNlX291dCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpiYXNlOworCisJLyoKKwkgKiBGaXJzdCBzZWUgaWYgd2UncmUgYWxyZWFkeSBzZW5kaW5nIHRoZSBiYXNlIChvciBpdCdzIGV4cGxpY2l0bHkgaW4KKwkgKiBvdXIgImV4Y2x1ZGVkIiBsaXN0KS4KKwkgKi8KKwliYXNlID0gcGFja2xpc3RfZmluZCgmdG9fcGFjaywgYmFzZV9vaWQpOworCWlmIChiYXNlKSB7CisJCWlmICghaW5fc2FtZV9pc2xhbmQoJmRlbHRhLT5pZHgub2lkLCAmYmFzZS0+aWR4Lm9pZCkpCisJCQlyZXR1cm4gMDsKKwkJKmJhc2Vfb3V0ID0gYmFzZTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyoKKwkgKiBPdGhlcndpc2UsIHJlYWNoYWJpbGl0eSBiaXRtYXBzIG1heSB0ZWxsIHVzIGlmIHRoZSByZWNlaXZlciBoYXMgaXQsCisJICogZXZlbiBpZiBpdCB3YXMgYnVyaWVkIHRvbyBkZWVwIGluIGhpc3RvcnkgdG8gbWFrZSBpdCBpbnRvIHRoZQorCSAqIHBhY2tpbmcgbGlzdC4KKwkgKi8KKwlpZiAodGhpbiAmJiBiaXRtYXBfaGFzX29pZF9pbl91bmludGVyZXN0aW5nKGJpdG1hcF9naXQsIGJhc2Vfb2lkKSkgeworCQlpZiAodXNlX2RlbHRhX2lzbGFuZHMpIHsKKwkJCWlmICghaW5fc2FtZV9pc2xhbmQoJmRlbHRhLT5pZHgub2lkLCBiYXNlX29pZCkpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJKmJhc2Vfb3V0ID0gTlVMTDsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX29iamVjdChzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSkKK3sKKwl1bnNpZ25lZCBsb25nIGNhbm9uaWNhbF9zaXplOworCisJaWYgKElOX1BBQ0soZW50cnkpKSB7CisJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gSU5fUEFDSyhlbnRyeSk7CisJCXN0cnVjdCBwYWNrX3dpbmRvdyAqd19jdXJzID0gTlVMTDsKKwkJaW50IGhhdmVfYmFzZSA9IDA7CisJCXN0cnVjdCBvYmplY3RfaWQgYmFzZV9yZWY7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmJhc2VfZW50cnk7CisJCXVuc2lnbmVkIGxvbmcgdXNlZCwgdXNlZF8wOworCQl1bnNpZ25lZCBsb25nIGF2YWlsOworCQlvZmZfdCBvZnM7CisJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgYzsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQl1bnNpZ25lZCBsb25nIGluX3BhY2tfc2l6ZTsKKworCQlidWYgPSB1c2VfcGFjayhwLCAmd19jdXJzLCBlbnRyeS0+aW5fcGFja19vZmZzZXQsICZhdmFpbCk7CisKKwkJLyoKKwkJICogV2Ugd2FudCBpbl9wYWNrX3R5cGUgZXZlbiBpZiB3ZSBkbyBub3QgcmV1c2UgZGVsdGEKKwkJICogc2luY2Ugbm9uLWRlbHRhIHJlcHJlc2VudGF0aW9ucyBjb3VsZCBzdGlsbCBiZSByZXVzZWQuCisJCSAqLworCQl1c2VkID0gdW5wYWNrX29iamVjdF9oZWFkZXJfYnVmZmVyKGJ1ZiwgYXZhaWwsCisJCQkJCQkgICAmdHlwZSwKKwkJCQkJCSAgICZpbl9wYWNrX3NpemUpOworCQlpZiAodXNlZCA9PSAwKQorCQkJZ290byBnaXZlX3VwOworCisJCWlmICh0eXBlIDwgMCkKKwkJCUJVRygiaW52YWxpZCB0eXBlICVkIiwgdHlwZSk7CisJCWVudHJ5LT5pbl9wYWNrX3R5cGUgPSB0eXBlOworCisJCS8qCisJCSAqIERldGVybWluZSBpZiB0aGlzIGlzIGEgZGVsdGEgYW5kIGlmIHNvIHdoZXRoZXIgd2UgY2FuCisJCSAqIHJldXNlIGl0IG9yIG5vdC4gIE90aGVyd2lzZSBsZXQncyBmaW5kIG91dCBhcyBjaGVhcGx5IGFzCisJCSAqIHBvc3NpYmxlIHdoYXQgdGhlIGFjdHVhbCB0eXBlIGFuZCBzaXplIGZvciB0aGlzIG9iamVjdCBpcy4KKwkJICovCisJCXN3aXRjaCAoZW50cnktPmluX3BhY2tfdHlwZSkgeworCQlkZWZhdWx0OgorCQkJLyogTm90IGEgZGVsdGEgaGVuY2Ugd2UndmUgYWxyZWFkeSBnb3QgYWxsIHdlIG5lZWQuICovCisJCQlvZV9zZXRfdHlwZShlbnRyeSwgZW50cnktPmluX3BhY2tfdHlwZSk7CisJCQlTRVRfU0laRShlbnRyeSwgaW5fcGFja19zaXplKTsKKwkJCWVudHJ5LT5pbl9wYWNrX2hlYWRlcl9zaXplID0gdXNlZDsKKwkJCWlmIChvZV90eXBlKGVudHJ5KSA8IE9CSl9DT01NSVQgfHwgb2VfdHlwZShlbnRyeSkgPiBPQkpfQkxPQikKKwkJCQlnb3RvIGdpdmVfdXA7CisJCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCQkJcmV0dXJuOworCQljYXNlIE9CSl9SRUZfREVMVEE6CisJCQlpZiAocmV1c2VfZGVsdGEgJiYgIWVudHJ5LT5wcmVmZXJyZWRfYmFzZSkgeworCQkJCW9pZHJlYWQoJmJhc2VfcmVmLAorCQkJCQl1c2VfcGFjayhwLCAmd19jdXJzLAorCQkJCQkJIGVudHJ5LT5pbl9wYWNrX29mZnNldCArIHVzZWQsCisJCQkJCQkgTlVMTCkpOworCQkJCWhhdmVfYmFzZSA9IDE7CisJCQl9CisJCQllbnRyeS0+aW5fcGFja19oZWFkZXJfc2l6ZSA9IHVzZWQgKyB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKwkJCWJyZWFrOworCQljYXNlIE9CSl9PRlNfREVMVEE6CisJCQlidWYgPSB1c2VfcGFjayhwLCAmd19jdXJzLAorCQkJCSAgICAgICBlbnRyeS0+aW5fcGFja19vZmZzZXQgKyB1c2VkLCBOVUxMKTsKKwkJCXVzZWRfMCA9IDA7CisJCQljID0gYnVmW3VzZWRfMCsrXTsKKwkJCW9mcyA9IGMgJiAxMjc7CisJCQl3aGlsZSAoYyAmIDEyOCkgeworCQkJCW9mcyArPSAxOworCQkJCWlmICghb2ZzIHx8IE1TQihvZnMsIDcpKSB7CisJCQkJCWVycm9yKF8oImRlbHRhIGJhc2Ugb2Zmc2V0IG92ZXJmbG93IGluIHBhY2sgZm9yICVzIiksCisJCQkJCSAgICAgIG9pZF90b19oZXgoJmVudHJ5LT5pZHgub2lkKSk7CisJCQkJCWdvdG8gZ2l2ZV91cDsKKwkJCQl9CisJCQkJYyA9IGJ1Zlt1c2VkXzArK107CisJCQkJb2ZzID0gKG9mcyA8PCA3KSArIChjICYgMTI3KTsKKwkJCX0KKwkJCW9mcyA9IGVudHJ5LT5pbl9wYWNrX29mZnNldCAtIG9mczsKKwkJCWlmIChvZnMgPD0gMCB8fCBvZnMgPj0gZW50cnktPmluX3BhY2tfb2Zmc2V0KSB7CisJCQkJZXJyb3IoXygiZGVsdGEgYmFzZSBvZmZzZXQgb3V0IG9mIGJvdW5kIGZvciAlcyIpLAorCQkJCSAgICAgIG9pZF90b19oZXgoJmVudHJ5LT5pZHgub2lkKSk7CisJCQkJZ290byBnaXZlX3VwOworCQkJfQorCQkJaWYgKHJldXNlX2RlbHRhICYmICFlbnRyeS0+cHJlZmVycmVkX2Jhc2UpIHsKKwkJCQlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmlkeDsKKwkJCQlyZXZpZHggPSBmaW5kX3BhY2tfcmV2aW5kZXgocCwgb2ZzKTsKKwkJCQlpZiAoIXJldmlkeCkKKwkJCQkJZ290byBnaXZlX3VwOworCQkJCWlmICghbnRoX3BhY2tlZF9vYmplY3RfaWQoJmJhc2VfcmVmLCBwLCByZXZpZHgtPm5yKSkKKwkJCQkJaGF2ZV9iYXNlID0gMTsKKwkJCX0KKwkJCWVudHJ5LT5pbl9wYWNrX2hlYWRlcl9zaXplID0gdXNlZCArIHVzZWRfMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGhhdmVfYmFzZSAmJgorCQkgICAgY2FuX3JldXNlX2RlbHRhKCZiYXNlX3JlZiwgZW50cnksICZiYXNlX2VudHJ5KSkgeworCQkJb2Vfc2V0X3R5cGUoZW50cnksIGVudHJ5LT5pbl9wYWNrX3R5cGUpOworCQkJU0VUX1NJWkUoZW50cnksIGluX3BhY2tfc2l6ZSk7IC8qIGRlbHRhIHNpemUgKi8KKwkJCVNFVF9ERUxUQV9TSVpFKGVudHJ5LCBpbl9wYWNrX3NpemUpOworCisJCQlpZiAoYmFzZV9lbnRyeSkgeworCQkJCVNFVF9ERUxUQShlbnRyeSwgYmFzZV9lbnRyeSk7CisJCQkJZW50cnktPmRlbHRhX3NpYmxpbmdfaWR4ID0gYmFzZV9lbnRyeS0+ZGVsdGFfY2hpbGRfaWR4OworCQkJCVNFVF9ERUxUQV9DSElMRChiYXNlX2VudHJ5LCBlbnRyeSk7CisJCQl9IGVsc2UgeworCQkJCVNFVF9ERUxUQV9FWFQoZW50cnksICZiYXNlX3JlZik7CisJCQl9CisKKwkJCXVudXNlX3BhY2soJndfY3Vycyk7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAob2VfdHlwZShlbnRyeSkpIHsKKwkJCW9mZl90IGRlbHRhX3BvczsKKworCQkJLyoKKwkJCSAqIFRoaXMgbXVzdCBiZSBhIGRlbHRhIGFuZCB3ZSBhbHJlYWR5IGtub3cgd2hhdCB0aGUKKwkJCSAqIGZpbmFsIG9iamVjdCB0eXBlIGlzLiAgTGV0J3MgZXh0cmFjdCB0aGUgYWN0dWFsCisJCQkgKiBvYmplY3Qgc2l6ZSBmcm9tIHRoZSBkZWx0YSBoZWFkZXIuCisJCQkgKi8KKwkJCWRlbHRhX3BvcyA9IGVudHJ5LT5pbl9wYWNrX29mZnNldCArIGVudHJ5LT5pbl9wYWNrX2hlYWRlcl9zaXplOworCQkJY2Fub25pY2FsX3NpemUgPSBnZXRfc2l6ZV9mcm9tX2RlbHRhKHAsICZ3X2N1cnMsIGRlbHRhX3Bvcyk7CisJCQlpZiAoY2Fub25pY2FsX3NpemUgPT0gMCkKKwkJCQlnb3RvIGdpdmVfdXA7CisJCQlTRVRfU0laRShlbnRyeSwgY2Fub25pY2FsX3NpemUpOworCQkJdW51c2VfcGFjaygmd19jdXJzKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qCisJCSAqIE5vIGNob2ljZSBidXQgdG8gZmFsbCBiYWNrIHRvIHRoZSByZWN1cnNpdmUgZGVsdGEgd2FsaworCQkgKiB3aXRoIG9pZF9vYmplY3RfaW5mbygpIHRvIGZpbmQgYWJvdXQgdGhlIG9iamVjdCB0eXBlCisJCSAqIGF0IHRoaXMgcG9pbnQuLi4KKwkJICovCisJCWdpdmVfdXA6CisJCXVudXNlX3BhY2soJndfY3Vycyk7CisJfQorCisJb2Vfc2V0X3R5cGUoZW50cnksCisJCSAgICBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksICZlbnRyeS0+aWR4Lm9pZCwgJmNhbm9uaWNhbF9zaXplKSk7CisJaWYgKGVudHJ5LT50eXBlX3ZhbGlkKSB7CisJCVNFVF9TSVpFKGVudHJ5LCBjYW5vbmljYWxfc2l6ZSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQmFkIG9iamVjdCB0eXBlIGlzIGNoZWNrZWQgaW4gcHJlcGFyZV9wYWNrKCkuICBUaGlzIGlzCisJCSAqIHRvIHBlcm1pdCBhIG1pc3NpbmcgcHJlZmVycmVkIGJhc2Ugb2JqZWN0IHRvIGJlIGlnbm9yZWQKKwkJICogYXMgYSBwcmVmZXJyZWQgYmFzZS4gIERvaW5nIHNvIGNhbiByZXN1bHQgaW4gYSBsYXJnZXIKKwkJICogcGFjayBmaWxlLCBidXQgdGhlIHRyYW5zZmVyIHdpbGwgc3RpbGwgdGFrZSBwbGFjZS4KKwkJICovCisJfQorfQorCitzdGF0aWMgaW50IHBhY2tfb2Zmc2V0X3NvcnQoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQoreworCWNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmEgPSAqKHN0cnVjdCBvYmplY3RfZW50cnkgKiopX2E7CisJY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqYiA9ICooc3RydWN0IG9iamVjdF9lbnRyeSAqKilfYjsKKwljb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqYV9pbl9wYWNrID0gSU5fUEFDSyhhKTsKKwljb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqYl9pbl9wYWNrID0gSU5fUEFDSyhiKTsKKworCS8qIGF2b2lkIGZpbGVzeXN0ZW0gdHJhc2hpbmcgd2l0aCBsb29zZSBvYmplY3RzICovCisJaWYgKCFhX2luX3BhY2sgJiYgIWJfaW5fcGFjaykKKwkJcmV0dXJuIG9pZGNtcCgmYS0+aWR4Lm9pZCwgJmItPmlkeC5vaWQpOworCisJaWYgKGFfaW5fcGFjayA8IGJfaW5fcGFjaykKKwkJcmV0dXJuIC0xOworCWlmIChhX2luX3BhY2sgPiBiX2luX3BhY2spCisJCXJldHVybiAxOworCXJldHVybiBhLT5pbl9wYWNrX29mZnNldCA8IGItPmluX3BhY2tfb2Zmc2V0ID8gLTEgOgorCQkJKGEtPmluX3BhY2tfb2Zmc2V0ID4gYi0+aW5fcGFja19vZmZzZXQpOworfQorCisvKgorICogRHJvcCBhbiBvbi1kaXNrIGRlbHRhIHdlIHdlcmUgcGxhbm5pbmcgdG8gcmV1c2UuIE5haXZlbHksIHRoaXMgd291bGQKKyAqIGp1c3QgaW52b2x2ZSBibGFua2luZyBvdXQgdGhlICJkZWx0YSIgZmllbGQsIGJ1dCB3ZSBoYXZlIHRvIGRlYWwKKyAqIHdpdGggc29tZSBleHRyYSBib29rLWtlZXBpbmc6CisgKgorICogICAxLiBSZW1vdmluZyBvdXJzZWx2ZXMgZnJvbSB0aGUgZGVsdGFfc2libGluZyBsaW5rZWQgbGlzdC4KKyAqCisgKiAgIDIuIFVwZGF0aW5nIG91ciBzaXplL3R5cGUgdG8gdGhlIG5vbi1kZWx0YSByZXByZXNlbnRhdGlvbi4gVGhlc2Ugd2VyZQorICogICAgICBlaXRoZXIgbm90IHJlY29yZGVkIGluaXRpYWxseSAoc2l6ZSkgb3Igb3ZlcndyaXR0ZW4gd2l0aCB0aGUgZGVsdGEgdHlwZQorICogICAgICAodHlwZSkgd2hlbiBjaGVja19vYmplY3QoKSBkZWNpZGVkIHRvIHJldXNlIHRoZSBkZWx0YS4KKyAqCisgKiAgIDMuIFJlc2V0dGluZyBvdXIgZGVsdGEgZGVwdGgsIGFzIHdlIGFyZSBub3cgYSBiYXNlIG9iamVjdC4KKyAqLworc3RhdGljIHZvaWQgZHJvcF9yZXVzZWRfZGVsdGEoc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkpCit7CisJdW5zaWduZWQgKmlkeCA9ICZ0b19wYWNrLm9iamVjdHNbZW50cnktPmRlbHRhX2lkeCAtIDFdLmRlbHRhX2NoaWxkX2lkeDsKKwlzdHJ1Y3Qgb2JqZWN0X2luZm8gb2kgPSBPQkpFQ1RfSU5GT19JTklUOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwl3aGlsZSAoKmlkeCkgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZSA9ICZ0b19wYWNrLm9iamVjdHNbKmlkeCAtIDFdOworCisJCWlmIChvZSA9PSBlbnRyeSkKKwkJCSppZHggPSBvZS0+ZGVsdGFfc2libGluZ19pZHg7CisJCWVsc2UKKwkJCWlkeCA9ICZvZS0+ZGVsdGFfc2libGluZ19pZHg7CisJfQorCVNFVF9ERUxUQShlbnRyeSwgTlVMTCk7CisJZW50cnktPmRlcHRoID0gMDsKKworCW9pLnNpemVwID0gJnNpemU7CisJb2kudHlwZXAgPSAmdHlwZTsKKwlpZiAocGFja2VkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBJTl9QQUNLKGVudHJ5KSwgZW50cnktPmluX3BhY2tfb2Zmc2V0LCAmb2kpIDwgMCkgeworCQkvKgorCQkgKiBXZSBmYWlsZWQgdG8gZ2V0IHRoZSBpbmZvIGZyb20gdGhpcyBwYWNrIGZvciBzb21lIHJlYXNvbjsKKwkJICogZmFsbCBiYWNrIHRvIG9pZF9vYmplY3RfaW5mbywgd2hpY2ggbWF5IGZpbmQgYW5vdGhlciBjb3B5LgorCQkgKiBBbmQgaWYgdGhhdCBmYWlscywgdGhlIGVycm9yIHdpbGwgYmUgcmVjb3JkZWQgaW4gb2VfdHlwZShlbnRyeSkKKwkJICogYW5kIGRlYWx0IHdpdGggaW4gcHJlcGFyZV9wYWNrKCkuCisJCSAqLworCQlvZV9zZXRfdHlwZShlbnRyeSwKKwkJCSAgICBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksICZlbnRyeS0+aWR4Lm9pZCwgJnNpemUpKTsKKwl9IGVsc2UgeworCQlvZV9zZXRfdHlwZShlbnRyeSwgdHlwZSk7CisJfQorCVNFVF9TSVpFKGVudHJ5LCBzaXplKTsKK30KKworLyoKKyAqIEZvbGxvdyB0aGUgY2hhaW4gb2YgZGVsdGFzIGZyb20gdGhpcyBlbnRyeSBvbndhcmQsIHRocm93aW5nIGF3YXkgYW55IGxpbmtzCisgKiB0aGF0IGNhdXNlIHVzIHRvIGhpdCBhIGN5Y2xlIChhcyBkZXRlcm1pbmVkIGJ5IHRoZSBERlMgc3RhdGUgZmxhZ3MgaW4KKyAqIHRoZSBlbnRyaWVzKS4KKyAqCisgKiBXZSBhbHNvIGRldGVjdCB0b28tbG9uZyByZXVzZWQgY2hhaW5zIHRoYXQgd291bGQgdmlvbGF0ZSBvdXIgLS1kZXB0aAorICogbGltaXQuCisgKi8KK3N0YXRpYyB2b2lkIGJyZWFrX2RlbHRhX2NoYWlucyhzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSkKK3sKKwkvKgorCSAqIFRoZSBhY3R1YWwgZGVwdGggb2YgZWFjaCBvYmplY3Qgd2Ugd2lsbCB3cml0ZSBpcyBzdG9yZWQgYXMgYW4gaW50LAorCSAqIGFzIGl0IGNhbm5vdCBleGNlZWQgb3VyIGludCAiZGVwdGgiIGxpbWl0LiBCdXQgYmVmb3JlIHdlIGJyZWFrCisJICogY2hhbmdlcyBiYXNlZCBubyB0aGF0IGxpbWl0LCB3ZSBtYXkgcG90ZW50aWFsbHkgZ28gYXMgZGVlcCBhcyB0aGUKKwkgKiBudW1iZXIgb2Ygb2JqZWN0cywgd2hpY2ggaXMgZWxzZXdoZXJlIGJvdW5kZWQgdG8gYSB1aW50MzJfdC4KKwkgKi8KKwl1aW50MzJfdCB0b3RhbF9kZXB0aDsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpjdXIsICpuZXh0OworCisJZm9yIChjdXIgPSBlbnRyeSwgdG90YWxfZGVwdGggPSAwOworCSAgICAgY3VyOworCSAgICAgY3VyID0gREVMVEEoY3VyKSwgdG90YWxfZGVwdGgrKykgeworCQlpZiAoY3VyLT5kZnNfc3RhdGUgPT0gREZTX0RPTkUpIHsKKwkJCS8qCisJCQkgKiBXZSd2ZSBhbHJlYWR5IHNlZW4gdGhpcyBvYmplY3QgYW5kIGtub3cgaXQgaXNuJ3QKKwkJCSAqIHBhcnQgb2YgYSBjeWNsZS4gV2UgZG8gbmVlZCB0byBhcHBlbmQgaXRzIGRlcHRoCisJCQkgKiB0byBvdXIgY291bnQuCisJCQkgKi8KKwkJCXRvdGFsX2RlcHRoICs9IGN1ci0+ZGVwdGg7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFdlIGJyZWFrIGN5Y2xlcyBiZWZvcmUgbG9vcGluZywgc28gYW4gQUNUSVZFIHN0YXRlIChvciBhbnkKKwkJICogb3RoZXIgY3J1ZnQgd2hpY2ggbWFkZSBpdHMgd2F5IGludG8gdGhlIHN0YXRlIHZhcmlhYmxlKQorCQkgKiBpcyBhIGJ1Zy4KKwkJICovCisJCWlmIChjdXItPmRmc19zdGF0ZSAhPSBERlNfTk9ORSkKKwkJCUJVRygiY29uZnVzaW5nIGRlbHRhIGRmcyBzdGF0ZSBpbiBmaXJzdCBwYXNzOiAlZCIsCisJCQkgICAgY3VyLT5kZnNfc3RhdGUpOworCisJCS8qCisJCSAqIE5vdyB3ZSBrbm93IHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiB0aGUgb2JqZWN0LiBJZgorCQkgKiBpdCdzIG5vdCBhIGRlbHRhLCB3ZSdyZSBkb25lIHRyYXZlcnNpbmcsIGJ1dCB3ZSdsbCBtYXJrIGl0CisJCSAqIGRvbmUgdG8gc2F2ZSB0aW1lIG9uIGZ1dHVyZSB0cmF2ZXJzYWxzLgorCQkgKi8KKwkJaWYgKCFERUxUQShjdXIpKSB7CisJCQljdXItPmRmc19zdGF0ZSA9IERGU19ET05FOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBNYXJrIG91cnNlbHZlcyBhcyBhY3RpdmUgYW5kIHNlZSBpZiB0aGUgbmV4dCBzdGVwIGNhdXNlcworCQkgKiB1cyB0byBjeWNsZSB0byBhbm90aGVyIGFjdGl2ZSBvYmplY3QuIEl0J3MgaW1wb3J0YW50IHRvIGRvCisJCSAqIHRoaXMgX2JlZm9yZV8gd2UgbG9vcCwgYmVjYXVzZSBpdCBpbXBhY3RzIHdoZXJlIHdlIG1ha2UgdGhlCisJCSAqIGN1dCwgYW5kIHRodXMgaG93IG91ciB0b3RhbF9kZXB0aCBjb3VudGVyIHdvcmtzLgorCQkgKiBFLmcuLCBXZSBtYXkgc2VlIGEgcGFydGlhbCBsb29wIGxpa2U6CisJCSAqCisJCSAqICAgQSAtPiBCIC0+IEMgLT4gRCAtPiBCCisJCSAqCisJCSAqIEN1dHRpbmcgQi0+QyBicmVha3MgdGhlIGN5Y2xlLiBCdXQgbm93IHRoZSBkZXB0aCBvZiBBIGlzCisJCSAqIG9ubHkgMSwgYW5kIG91ciB0b3RhbF9kZXB0aCBjb3VudGVyIGlzIGF0IDMuIFRoZSBzaXplIG9mIHRoZQorCQkgKiBlcnJvciBpcyBhbHdheXMgb25lIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgY3ljbGUgd2UKKwkJICogYnJva2UuIENvbW1pdHMgQyBhbmQgRCB3ZXJlICJsb3N0IiBmcm9tIEEncyBjaGFpbi4KKwkJICoKKwkJICogSWYgd2UgaW5zdGVhZCBjdXQgRC0+QiwgdGhlbiB0aGUgZGVwdGggb2YgQSBpcyBjb3JyZWN0IGF0IDMuCisJCSAqIFdlIGtlZXAgYWxsIGNvbW1pdHMgaW4gdGhlIGNoYWluIHRoYXQgd2UgZXhhbWluZWQuCisJCSAqLworCQljdXItPmRmc19zdGF0ZSA9IERGU19BQ1RJVkU7CisJCWlmIChERUxUQShjdXIpLT5kZnNfc3RhdGUgPT0gREZTX0FDVElWRSkgeworCQkJZHJvcF9yZXVzZWRfZGVsdGEoY3VyKTsKKwkJCWN1ci0+ZGZzX3N0YXRlID0gREZTX0RPTkU7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogQW5kIG5vdyB0aGF0IHdlJ3ZlIGdvbmUgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbSBvZiB0aGUgY2hhaW4sIHdlCisJICogbmVlZCB0byBjbGVhciB0aGUgYWN0aXZlIGZsYWdzIGFuZCBzZXQgdGhlIGRlcHRoIGZpZWxkcyBhcworCSAqIGFwcHJvcHJpYXRlLiBVbmxpa2UgdGhlIGxvb3AgYWJvdmUsIHdoaWNoIGNhbiBxdWl0IHdoZW4gaXQgZHJvcHMgYQorCSAqIGRlbHRhLCB3ZSBuZWVkIHRvIGtlZXAgZ29pbmcgdG8gbG9vayBmb3IgbW9yZSBkZXB0aCBjdXRzLiBTbyB3ZSBuZWVkCisJICogYW4gZXh0cmEgIm5leHQiIHBvaW50ZXIgdG8ga2VlcCBnb2luZyBhZnRlciB3ZSByZXNldCBjdXItPmRlbHRhLgorCSAqLworCWZvciAoY3VyID0gZW50cnk7IGN1cjsgY3VyID0gbmV4dCkgeworCQluZXh0ID0gREVMVEEoY3VyKTsKKworCQkvKgorCQkgKiBXZSBzaG91bGQgaGF2ZSBhIGNoYWluIG9mIHplcm8gb3IgbW9yZSBBQ1RJVkUgc3RhdGVzIGRvd24gdG8KKwkJICogYSBmaW5hbCBET05FLiBXZSBjYW4gcXVpdCBhZnRlciB0aGUgRE9ORSwgYmVjYXVzZSBlaXRoZXIgaXQKKwkJICogaGFzIG5vIGJhc2VzLCBvciB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlbSBpbiBhIHByZXZpb3VzCisJCSAqIGNhbGwuCisJCSAqLworCQlpZiAoY3VyLT5kZnNfc3RhdGUgPT0gREZTX0RPTkUpCisJCQlicmVhazsKKwkJZWxzZSBpZiAoY3VyLT5kZnNfc3RhdGUgIT0gREZTX0FDVElWRSkKKwkJCUJVRygiY29uZnVzaW5nIGRlbHRhIGRmcyBzdGF0ZSBpbiBzZWNvbmQgcGFzczogJWQiLAorCQkJICAgIGN1ci0+ZGZzX3N0YXRlKTsKKworCQkvKgorCQkgKiBJZiB0aGUgdG90YWxfZGVwdGggaXMgbW9yZSB0aGFuIGRlcHRoLCB0aGVuIHdlIG5lZWQgdG8gc25pcAorCQkgKiB0aGUgY2hhaW4gaW50byB0d28gb3IgbW9yZSBzbWFsbGVyIGNoYWlucyB0aGF0IGRvbid0IGV4Y2VlZAorCQkgKiB0aGUgbWF4aW11bSBkZXB0aC4gTW9zdCBvZiB0aGUgcmVzdWx0aW5nIGNoYWlucyB3aWxsIGNvbnRhaW4KKwkJICogKGRlcHRoICsgMSkgZW50cmllcyAoaS5lLiwgZGVwdGggZGVsdGFzIHBsdXMgb25lIGJhc2UpLCBhbmQKKwkJICogdGhlIGxhc3QgY2hhaW4gKGkuZS4sIHRoZSBvbmUgY29udGFpbmluZyBlbnRyeSkgd2lsbCBjb250YWluCisJCSAqIHdoYXRldmVyIGVudHJpZXMgYXJlIGxlZnQgb3ZlciwgbmFtZWx5CisJCSAqICh0b3RhbF9kZXB0aCAlIChkZXB0aCArIDEpKSBvZiB0aGVtLgorCQkgKgorCQkgKiBTaW5jZSB3ZSBhcmUgaXRlcmF0aW5nIHRvd2FyZHMgZGVjcmVhc2luZyBkZXB0aCwgd2UgbmVlZCB0bworCQkgKiBkZWNyZW1lbnQgdG90YWxfZGVwdGggYXMgd2UgZ28sIGFuZCB3ZSBuZWVkIHRvIHdyaXRlIHRvIHRoZQorCQkgKiBlbnRyeSB3aGF0IGl0cyBmaW5hbCBkZXB0aCB3aWxsIGJlIGFmdGVyIGFsbCBvZiB0aGUKKwkJICogc25pcHBpbmcuIFNpbmNlIHdlJ3JlIHNuaXBwaW5nIGludG8gY2hhaW5zIG9mIGxlbmd0aCAoZGVwdGgKKwkJICogKyAxKSBlbnRyaWVzLCB0aGUgZmluYWwgZGVwdGggb2YgYW4gZW50cnkgd2lsbCBiZSBpdHMKKwkJICogb3JpZ2luYWwgZGVwdGggbW9kdWxvIChkZXB0aCArIDEpLiBBbnkgdGltZSB3ZSBlbmNvdW50ZXIgYW4KKwkJICogZW50cnkgd2hvc2UgZmluYWwgZGVwdGggaXMgc3VwcG9zZWQgdG8gYmUgemVybywgd2Ugc25pcCBpdAorCQkgKiBmcm9tIGl0cyBkZWx0YSBiYXNlLCB0aGVyZWJ5IG1ha2luZyBpdCBzby4KKwkJICovCisJCWN1ci0+ZGVwdGggPSAodG90YWxfZGVwdGgtLSkgJSAoZGVwdGggKyAxKTsKKwkJaWYgKCFjdXItPmRlcHRoKQorCQkJZHJvcF9yZXVzZWRfZGVsdGEoY3VyKTsKKworCQljdXItPmRmc19zdGF0ZSA9IERGU19ET05FOworCX0KK30KKworc3RhdGljIHZvaWQgZ2V0X29iamVjdF9kZXRhaWxzKHZvaWQpCit7CisJdWludDMyX3QgaTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqc29ydGVkX2J5X29mZnNldDsKKworCWlmIChwcm9ncmVzcykKKwkJcHJvZ3Jlc3Nfc3RhdGUgPSBzdGFydF9wcm9ncmVzcyhfKCJDb3VudGluZyBvYmplY3RzIiksCisJCQkJCQl0b19wYWNrLm5yX29iamVjdHMpOworCisJc29ydGVkX2J5X29mZnNldCA9IHhjYWxsb2ModG9fcGFjay5ucl9vYmplY3RzLCBzaXplb2Yoc3RydWN0IG9iamVjdF9lbnRyeSAqKSk7CisJZm9yIChpID0gMDsgaSA8IHRvX3BhY2subnJfb2JqZWN0czsgaSsrKQorCQlzb3J0ZWRfYnlfb2Zmc2V0W2ldID0gdG9fcGFjay5vYmplY3RzICsgaTsKKwlRU09SVChzb3J0ZWRfYnlfb2Zmc2V0LCB0b19wYWNrLm5yX29iamVjdHMsIHBhY2tfb2Zmc2V0X3NvcnQpOworCisJZm9yIChpID0gMDsgaSA8IHRvX3BhY2subnJfb2JqZWN0czsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5ID0gc29ydGVkX2J5X29mZnNldFtpXTsKKwkJY2hlY2tfb2JqZWN0KGVudHJ5KTsKKwkJaWYgKGVudHJ5LT50eXBlX3ZhbGlkICYmCisJCSAgICBvZV9zaXplX2dyZWF0ZXJfdGhhbigmdG9fcGFjaywgZW50cnksIGJpZ19maWxlX3RocmVzaG9sZCkpCisJCQllbnRyeS0+bm9fdHJ5X2RlbHRhID0gMTsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzc19zdGF0ZSwgaSArIDEpOworCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzc19zdGF0ZSk7CisKKwkvKgorCSAqIFRoaXMgbXVzdCBoYXBwZW4gaW4gYSBzZWNvbmQgcGFzcywgc2luY2Ugd2UgcmVseSBvbiB0aGUgZGVsdGEKKwkgKiBpbmZvcm1hdGlvbiBmb3IgdGhlIHdob2xlIGxpc3QgYmVpbmcgY29tcGxldGVkLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCB0b19wYWNrLm5yX29iamVjdHM7IGkrKykKKwkJYnJlYWtfZGVsdGFfY2hhaW5zKCZ0b19wYWNrLm9iamVjdHNbaV0pOworCisJZnJlZShzb3J0ZWRfYnlfb2Zmc2V0KTsKK30KKworLyoKKyAqIFdlIHNlYXJjaCBmb3IgZGVsdGFzIGluIGEgbGlzdCBzb3J0ZWQgYnkgdHlwZSwgYnkgZmlsZW5hbWUgaGFzaCwgYW5kIHRoZW4KKyAqIGJ5IHNpemUsIHNvIHRoYXQgd2Ugc2VlIHByb2dyZXNzaXZlbHkgc21hbGxlciBhbmQgc21hbGxlciBmaWxlcy4KKyAqIFRoYXQncyBiZWNhdXNlIHdlIHByZWZlciBkZWx0YXMgdG8gYmUgZnJvbSB0aGUgYmlnZ2VyIGZpbGUKKyAqIHRvIHRoZSBzbWFsbGVyIC0tIGRlbGV0ZXMgYXJlIHBvdGVudGlhbGx5IGNoZWFwZXIsIGJ1dCBwZXJoYXBzCisgKiBtb3JlIGltcG9ydGFudGx5LCB0aGUgYmlnZ2VyIGZpbGUgaXMgbGlrZWx5IHRoZSBtb3JlIHJlY2VudAorICogb25lLiAgVGhlIGRlZXBlc3QgZGVsdGFzIGFyZSB0aGVyZWZvcmUgdGhlIG9sZGVzdCBvYmplY3RzIHdoaWNoIGFyZQorICogbGVzcyBzdXNjZXB0aWJsZSB0byBiZSBhY2Nlc3NlZCBvZnRlbi4KKyAqLworc3RhdGljIGludCB0eXBlX3NpemVfc29ydChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqYSA9ICooc3RydWN0IG9iamVjdF9lbnRyeSAqKilfYTsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpiID0gKihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqKV9iOworCWNvbnN0IGVudW0gb2JqZWN0X3R5cGUgYV90eXBlID0gb2VfdHlwZShhKTsKKwljb25zdCBlbnVtIG9iamVjdF90eXBlIGJfdHlwZSA9IG9lX3R5cGUoYik7CisJY29uc3QgdW5zaWduZWQgbG9uZyBhX3NpemUgPSBTSVpFKGEpOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgYl9zaXplID0gU0laRShiKTsKKworCWlmIChhX3R5cGUgPiBiX3R5cGUpCisJCXJldHVybiAtMTsKKwlpZiAoYV90eXBlIDwgYl90eXBlKQorCQlyZXR1cm4gMTsKKwlpZiAoYS0+aGFzaCA+IGItPmhhc2gpCisJCXJldHVybiAtMTsKKwlpZiAoYS0+aGFzaCA8IGItPmhhc2gpCisJCXJldHVybiAxOworCWlmIChhLT5wcmVmZXJyZWRfYmFzZSA+IGItPnByZWZlcnJlZF9iYXNlKQorCQlyZXR1cm4gLTE7CisJaWYgKGEtPnByZWZlcnJlZF9iYXNlIDwgYi0+cHJlZmVycmVkX2Jhc2UpCisJCXJldHVybiAxOworCWlmICh1c2VfZGVsdGFfaXNsYW5kcykgeworCQljb25zdCBpbnQgaXNsYW5kX2NtcCA9IGlzbGFuZF9kZWx0YV9jbXAoJmEtPmlkeC5vaWQsICZiLT5pZHgub2lkKTsKKwkJaWYgKGlzbGFuZF9jbXApCisJCQlyZXR1cm4gaXNsYW5kX2NtcDsKKwl9CisJaWYgKGFfc2l6ZSA+IGJfc2l6ZSkKKwkJcmV0dXJuIC0xOworCWlmIChhX3NpemUgPCBiX3NpemUpCisJCXJldHVybiAxOworCXJldHVybiBhIDwgYiA/IC0xIDogKGEgPiBiKTsgIC8qIG5ld2VzdCBmaXJzdCAqLworfQorCitzdHJ1Y3QgdW5wYWNrZWQgeworCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5OworCXZvaWQgKmRhdGE7CisJc3RydWN0IGRlbHRhX2luZGV4ICppbmRleDsKKwl1bnNpZ25lZCBkZXB0aDsKK307CisKK3N0YXRpYyBpbnQgZGVsdGFfY2FjaGVhYmxlKHVuc2lnbmVkIGxvbmcgc3JjX3NpemUsIHVuc2lnbmVkIGxvbmcgdHJnX3NpemUsCisJCQkgICB1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUpCit7CisJaWYgKG1heF9kZWx0YV9jYWNoZV9zaXplICYmIGRlbHRhX2NhY2hlX3NpemUgKyBkZWx0YV9zaXplID4gbWF4X2RlbHRhX2NhY2hlX3NpemUpCisJCXJldHVybiAwOworCisJaWYgKGRlbHRhX3NpemUgPCBjYWNoZV9tYXhfc21hbGxfZGVsdGFfc2l6ZSkKKwkJcmV0dXJuIDE7CisKKwkvKiBjYWNoZSBkZWx0YSwgaWYgb2JqZWN0cyBhcmUgbGFyZ2UgZW5vdWdoIGNvbXBhcmVkIHRvIGRlbHRhIHNpemUgKi8KKwlpZiAoKHNyY19zaXplID4+IDIwKSArICh0cmdfc2l6ZSA+PiAyMSkgPiAoZGVsdGFfc2l6ZSA+PiAxMCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFByb3RlY3QgZGVsdGFfY2FjaGVfc2l6ZSAqLworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBjYWNoZV9tdXRleDsKKyNkZWZpbmUgY2FjaGVfbG9jaygpCQlwdGhyZWFkX211dGV4X2xvY2soJmNhY2hlX211dGV4KQorI2RlZmluZSBjYWNoZV91bmxvY2soKQkJcHRocmVhZF9tdXRleF91bmxvY2soJmNhY2hlX211dGV4KQorCisvKgorICogUHJvdGVjdCBvYmplY3QgbGlzdCBwYXJ0aXRpb25pbmcgKGUuZy4gc3RydWN0IHRocmVhZF9wYXJhbSkgYW5kCisgKiBwcm9ncmVzc19zdGF0ZQorICovCitzdGF0aWMgcHRocmVhZF9tdXRleF90IHByb2dyZXNzX211dGV4OworI2RlZmluZSBwcm9ncmVzc19sb2NrKCkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmcHJvZ3Jlc3NfbXV0ZXgpCisjZGVmaW5lIHByb2dyZXNzX3VubG9jaygpCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwcm9ncmVzc19tdXRleCkKKworLyoKKyAqIEFjY2VzcyB0byBzdHJ1Y3Qgb2JqZWN0X2VudHJ5IGlzIHVucHJvdGVjdGVkIHNpbmNlIGVhY2ggdGhyZWFkIG93bnMKKyAqIGEgcG9ydGlvbiBvZiB0aGUgbWFpbiBvYmplY3QgbGlzdC4gSnVzdCBkb24ndCBhY2Nlc3Mgb2JqZWN0IGVudHJpZXMKKyAqIGFoZWFkIGluIHRoZSBsaXN0IGJlY2F1c2UgdGhleSBjYW4gYmUgc3RvbGVuIGFuZCB3b3VsZCBuZWVkCisgKiBwcm9ncmVzc19tdXRleCBmb3IgcHJvdGVjdGlvbi4KKyAqLworCisvKgorICogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBvYmplY3Qgd2l0aG91dCBkb2luZyBhbnkgZGVsdGEKKyAqIHJlY29uc3RydWN0aW9uIChzbyBub24tZGVsdGFzIGFyZSB0cnVlIG9iamVjdCBzaXplcywgYnV0IGRlbHRhcworICogcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBkZWx0YSBkYXRhKS4KKyAqLwordW5zaWduZWQgbG9uZyBvZV9nZXRfc2l6ZV9zbG93KHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqZSkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndfY3VyczsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgdXNlZCwgYXZhaWwsIHNpemU7CisKKwlpZiAoZS0+dHlwZV8gIT0gT0JKX09GU19ERUxUQSAmJiBlLT50eXBlXyAhPSBPQkpfUkVGX0RFTFRBKSB7CisJCXBhY2tpbmdfZGF0YV9sb2NrKCZ0b19wYWNrKTsKKwkJaWYgKG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgJmUtPmlkeC5vaWQsICZzaXplKSA8IDApCisJCQlkaWUoXygidW5hYmxlIHRvIGdldCBzaXplIG9mICVzIiksCisJCQkgICAgb2lkX3RvX2hleCgmZS0+aWR4Lm9pZCkpOworCQlwYWNraW5nX2RhdGFfdW5sb2NrKCZ0b19wYWNrKTsKKwkJcmV0dXJuIHNpemU7CisJfQorCisJcCA9IG9lX2luX3BhY2socGFjaywgZSk7CisJaWYgKCFwKQorCQlCVUcoIndoZW4gZS0+dHlwZSBpcyBhIGRlbHRhLCBpdCBtdXN0IGJlbG9uZyB0byBhIHBhY2siKTsKKworCXBhY2tpbmdfZGF0YV9sb2NrKCZ0b19wYWNrKTsKKwl3X2N1cnMgPSBOVUxMOworCWJ1ZiA9IHVzZV9wYWNrKHAsICZ3X2N1cnMsIGUtPmluX3BhY2tfb2Zmc2V0LCAmYXZhaWwpOworCXVzZWQgPSB1bnBhY2tfb2JqZWN0X2hlYWRlcl9idWZmZXIoYnVmLCBhdmFpbCwgJnR5cGUsICZzaXplKTsKKwlpZiAodXNlZCA9PSAwKQorCQlkaWUoXygidW5hYmxlIHRvIHBhcnNlIG9iamVjdCBoZWFkZXIgb2YgJXMiKSwKKwkJICAgIG9pZF90b19oZXgoJmUtPmlkeC5vaWQpKTsKKworCXVudXNlX3BhY2soJndfY3Vycyk7CisJcGFja2luZ19kYXRhX3VubG9jaygmdG9fcGFjayk7CisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X2RlbHRhKHN0cnVjdCB1bnBhY2tlZCAqdHJnLCBzdHJ1Y3QgdW5wYWNrZWQgKnNyYywKKwkJICAgICB1bnNpZ25lZCBtYXhfZGVwdGgsIHVuc2lnbmVkIGxvbmcgKm1lbV91c2FnZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICp0cmdfZW50cnkgPSB0cmctPmVudHJ5OworCXN0cnVjdCBvYmplY3RfZW50cnkgKnNyY19lbnRyeSA9IHNyYy0+ZW50cnk7CisJdW5zaWduZWQgbG9uZyB0cmdfc2l6ZSwgc3JjX3NpemUsIGRlbHRhX3NpemUsIHNpemVkaWZmLCBtYXhfc2l6ZSwgc3o7CisJdW5zaWduZWQgcmVmX2RlcHRoOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpkZWx0YV9idWY7CisKKwkvKiBEb24ndCBib3RoZXIgZG9pbmcgZGlmZnMgYmV0d2VlbiBkaWZmZXJlbnQgdHlwZXMgKi8KKwlpZiAob2VfdHlwZSh0cmdfZW50cnkpICE9IG9lX3R5cGUoc3JjX2VudHJ5KSkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBXZSBkbyBub3QgYm90aGVyIHRvIHRyeSBhIGRlbHRhIHRoYXQgd2UgZGlzY2FyZGVkIG9uIGFuCisJICogZWFybGllciB0cnksIGJ1dCBvbmx5IHdoZW4gcmV1c2luZyBkZWx0YSBkYXRhLiAgTm90ZSB0aGF0CisJICogc3JjX2VudHJ5IHRoYXQgaXMgbWFya2VkIGFzIHRoZSBwcmVmZXJyZWRfYmFzZSBzaG91bGQgYWx3YXlzCisJICogYmUgY29uc2lkZXJlZCwgYXMgZXZlbiBpZiB3ZSBwcm9kdWNlIGEgc3Vib3B0aW1hbCBkZWx0YSBhZ2FpbnN0CisJICogaXQsIHdlIHdpbGwgc3RpbGwgc2F2ZSB0aGUgdHJhbnNmZXIgY29zdCwgYXMgd2UgYWxyZWFkeSBrbm93CisJICogdGhlIG90aGVyIHNpZGUgaGFzIGl0IGFuZCB3ZSB3b24ndCBzZW5kIHNyY19lbnRyeSBhdCBhbGwuCisJICovCisJaWYgKHJldXNlX2RlbHRhICYmIElOX1BBQ0sodHJnX2VudHJ5KSAmJgorCSAgICBJTl9QQUNLKHRyZ19lbnRyeSkgPT0gSU5fUEFDSyhzcmNfZW50cnkpICYmCisJICAgICFzcmNfZW50cnktPnByZWZlcnJlZF9iYXNlICYmCisJICAgIHRyZ19lbnRyeS0+aW5fcGFja190eXBlICE9IE9CSl9SRUZfREVMVEEgJiYKKwkgICAgdHJnX2VudHJ5LT5pbl9wYWNrX3R5cGUgIT0gT0JKX09GU19ERUxUQSkKKwkJcmV0dXJuIDA7CisKKwkvKiBMZXQncyBub3QgYnVzdCB0aGUgYWxsb3dlZCBkZXB0aC4gKi8KKwlpZiAoc3JjLT5kZXB0aCA+PSBtYXhfZGVwdGgpCisJCXJldHVybiAwOworCisJLyogTm93IHNvbWUgc2l6ZSBmaWx0ZXJpbmcgaGV1cmlzdGljcy4gKi8KKwl0cmdfc2l6ZSA9IFNJWkUodHJnX2VudHJ5KTsKKwlpZiAoIURFTFRBKHRyZ19lbnRyeSkpIHsKKwkJbWF4X3NpemUgPSB0cmdfc2l6ZS8yIC0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJCXJlZl9kZXB0aCA9IDE7CisJfSBlbHNlIHsKKwkJbWF4X3NpemUgPSBERUxUQV9TSVpFKHRyZ19lbnRyeSk7CisJCXJlZl9kZXB0aCA9IHRyZy0+ZGVwdGg7CisJfQorCW1heF9zaXplID0gKHVpbnQ2NF90KW1heF9zaXplICogKG1heF9kZXB0aCAtIHNyYy0+ZGVwdGgpIC8KKwkJCQkJCShtYXhfZGVwdGggLSByZWZfZGVwdGggKyAxKTsKKwlpZiAobWF4X3NpemUgPT0gMCkKKwkJcmV0dXJuIDA7CisJc3JjX3NpemUgPSBTSVpFKHNyY19lbnRyeSk7CisJc2l6ZWRpZmYgPSBzcmNfc2l6ZSA8IHRyZ19zaXplID8gdHJnX3NpemUgLSBzcmNfc2l6ZSA6IDA7CisJaWYgKHNpemVkaWZmID49IG1heF9zaXplKQorCQlyZXR1cm4gMDsKKwlpZiAodHJnX3NpemUgPCBzcmNfc2l6ZSAvIDMyKQorCQlyZXR1cm4gMDsKKworCWlmICghaW5fc2FtZV9pc2xhbmQoJnRyZy0+ZW50cnktPmlkeC5vaWQsICZzcmMtPmVudHJ5LT5pZHgub2lkKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBMb2FkIGRhdGEgaWYgbm90IGFscmVhZHkgZG9uZSAqLworCWlmICghdHJnLT5kYXRhKSB7CisJCXBhY2tpbmdfZGF0YV9sb2NrKCZ0b19wYWNrKTsKKwkJdHJnLT5kYXRhID0gcmVhZF9vYmplY3RfZmlsZSgmdHJnX2VudHJ5LT5pZHgub2lkLCAmdHlwZSwgJnN6KTsKKwkJcGFja2luZ19kYXRhX3VubG9jaygmdG9fcGFjayk7CisJCWlmICghdHJnLT5kYXRhKQorCQkJZGllKF8oIm9iamVjdCAlcyBjYW5ub3QgYmUgcmVhZCIpLAorCQkJICAgIG9pZF90b19oZXgoJnRyZ19lbnRyeS0+aWR4Lm9pZCkpOworCQlpZiAoc3ogIT0gdHJnX3NpemUpCisJCQlkaWUoXygib2JqZWN0ICVzIGluY29uc2lzdGVudCBvYmplY3QgbGVuZ3RoICglIlBSSXVNQVgiIHZzICUiUFJJdU1BWCIpIiksCisJCQkgICAgb2lkX3RvX2hleCgmdHJnX2VudHJ5LT5pZHgub2lkKSwgKHVpbnRtYXhfdClzeiwKKwkJCSAgICAodWludG1heF90KXRyZ19zaXplKTsKKwkJKm1lbV91c2FnZSArPSBzejsKKwl9CisJaWYgKCFzcmMtPmRhdGEpIHsKKwkJcGFja2luZ19kYXRhX2xvY2soJnRvX3BhY2spOworCQlzcmMtPmRhdGEgPSByZWFkX29iamVjdF9maWxlKCZzcmNfZW50cnktPmlkeC5vaWQsICZ0eXBlLCAmc3opOworCQlwYWNraW5nX2RhdGFfdW5sb2NrKCZ0b19wYWNrKTsKKwkJaWYgKCFzcmMtPmRhdGEpIHsKKwkJCWlmIChzcmNfZW50cnktPnByZWZlcnJlZF9iYXNlKSB7CisJCQkJc3RhdGljIGludCB3YXJuZWQgPSAwOworCQkJCWlmICghd2FybmVkKyspCisJCQkJCXdhcm5pbmcoXygib2JqZWN0ICVzIGNhbm5vdCBiZSByZWFkIiksCisJCQkJCQlvaWRfdG9faGV4KCZzcmNfZW50cnktPmlkeC5vaWQpKTsKKwkJCQkvKgorCQkJCSAqIFRob3NlIG9iamVjdHMgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUKKwkJCQkgKiByZXN1bHRpbmcgcGFjay4gIEJlIHJlc2lsaWVudCBhbmQgaWdub3JlCisJCQkJICogdGhlbSBpZiB0aGV5IGNhbid0IGJlIHJlYWQsIGluIGNhc2UgdGhlCisJCQkJICogcGFjayBjb3VsZCBiZSBjcmVhdGVkIG5ldmVydGhlbGVzcy4KKwkJCQkgKi8KKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWRpZShfKCJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiKSwKKwkJCSAgICBvaWRfdG9faGV4KCZzcmNfZW50cnktPmlkeC5vaWQpKTsKKwkJfQorCQlpZiAoc3ogIT0gc3JjX3NpemUpCisJCQlkaWUoXygib2JqZWN0ICVzIGluY29uc2lzdGVudCBvYmplY3QgbGVuZ3RoICglIlBSSXVNQVgiIHZzICUiUFJJdU1BWCIpIiksCisJCQkgICAgb2lkX3RvX2hleCgmc3JjX2VudHJ5LT5pZHgub2lkKSwgKHVpbnRtYXhfdClzeiwKKwkJCSAgICAodWludG1heF90KXNyY19zaXplKTsKKwkJKm1lbV91c2FnZSArPSBzejsKKwl9CisJaWYgKCFzcmMtPmluZGV4KSB7CisJCXNyYy0+aW5kZXggPSBjcmVhdGVfZGVsdGFfaW5kZXgoc3JjLT5kYXRhLCBzcmNfc2l6ZSk7CisJCWlmICghc3JjLT5pbmRleCkgeworCQkJc3RhdGljIGludCB3YXJuZWQgPSAwOworCQkJaWYgKCF3YXJuZWQrKykKKwkJCQl3YXJuaW5nKF8oInN1Ym9wdGltYWwgcGFjayAtIG91dCBvZiBtZW1vcnkiKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQkqbWVtX3VzYWdlICs9IHNpemVvZl9kZWx0YV9pbmRleChzcmMtPmluZGV4KTsKKwl9CisKKwlkZWx0YV9idWYgPSBjcmVhdGVfZGVsdGEoc3JjLT5pbmRleCwgdHJnLT5kYXRhLCB0cmdfc2l6ZSwgJmRlbHRhX3NpemUsIG1heF9zaXplKTsKKwlpZiAoIWRlbHRhX2J1ZikKKwkJcmV0dXJuIDA7CisKKwlpZiAoREVMVEEodHJnX2VudHJ5KSkgeworCQkvKiBQcmVmZXIgb25seSBzaGFsbG93ZXIgc2FtZS1zaXplZCBkZWx0YXMuICovCisJCWlmIChkZWx0YV9zaXplID09IERFTFRBX1NJWkUodHJnX2VudHJ5KSAmJgorCQkgICAgc3JjLT5kZXB0aCArIDEgPj0gdHJnLT5kZXB0aCkgeworCQkJZnJlZShkZWx0YV9idWYpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKgorCSAqIEhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBvdXRzaWRlIG9mIHRoZSBjYWNoZQorCSAqIGFjY291bnRpbmcgbG9jay4gIENvbXBpbGVyIHdpbGwgb3B0aW1pemUgdGhlIHN0cmFuZ2VuZXNzCisJICogYXdheSB3aGVuIE5PX1BUSFJFQURTIGlzIGRlZmluZWQuCisJICovCisJZnJlZSh0cmdfZW50cnktPmRlbHRhX2RhdGEpOworCWNhY2hlX2xvY2soKTsKKwlpZiAodHJnX2VudHJ5LT5kZWx0YV9kYXRhKSB7CisJCWRlbHRhX2NhY2hlX3NpemUgLT0gREVMVEFfU0laRSh0cmdfZW50cnkpOworCQl0cmdfZW50cnktPmRlbHRhX2RhdGEgPSBOVUxMOworCX0KKwlpZiAoZGVsdGFfY2FjaGVhYmxlKHNyY19zaXplLCB0cmdfc2l6ZSwgZGVsdGFfc2l6ZSkpIHsKKwkJZGVsdGFfY2FjaGVfc2l6ZSArPSBkZWx0YV9zaXplOworCQljYWNoZV91bmxvY2soKTsKKwkJdHJnX2VudHJ5LT5kZWx0YV9kYXRhID0geHJlYWxsb2MoZGVsdGFfYnVmLCBkZWx0YV9zaXplKTsKKwl9IGVsc2UgeworCQljYWNoZV91bmxvY2soKTsKKwkJZnJlZShkZWx0YV9idWYpOworCX0KKworCVNFVF9ERUxUQSh0cmdfZW50cnksIHNyY19lbnRyeSk7CisJU0VUX0RFTFRBX1NJWkUodHJnX2VudHJ5LCBkZWx0YV9zaXplKTsKKwl0cmctPmRlcHRoID0gc3JjLT5kZXB0aCArIDE7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjaGVja19kZWx0YV9saW1pdChzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICptZSwgdW5zaWduZWQgaW50IG4pCit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqY2hpbGQgPSBERUxUQV9DSElMRChtZSk7CisJdW5zaWduZWQgaW50IG0gPSBuOworCXdoaWxlIChjaGlsZCkgeworCQljb25zdCB1bnNpZ25lZCBpbnQgYyA9IGNoZWNrX2RlbHRhX2xpbWl0KGNoaWxkLCBuICsgMSk7CisJCWlmIChtIDwgYykKKwkJCW0gPSBjOworCQljaGlsZCA9IERFTFRBX1NJQkxJTkcoY2hpbGQpOworCX0KKwlyZXR1cm4gbTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJlZV91bnBhY2tlZChzdHJ1Y3QgdW5wYWNrZWQgKm4pCit7CisJdW5zaWduZWQgbG9uZyBmcmVlZF9tZW0gPSBzaXplb2ZfZGVsdGFfaW5kZXgobi0+aW5kZXgpOworCWZyZWVfZGVsdGFfaW5kZXgobi0+aW5kZXgpOworCW4tPmluZGV4ID0gTlVMTDsKKwlpZiAobi0+ZGF0YSkgeworCQlmcmVlZF9tZW0gKz0gU0laRShuLT5lbnRyeSk7CisJCUZSRUVfQU5EX05VTEwobi0+ZGF0YSk7CisJfQorCW4tPmVudHJ5ID0gTlVMTDsKKwluLT5kZXB0aCA9IDA7CisJcmV0dXJuIGZyZWVkX21lbTsKK30KKworc3RhdGljIHZvaWQgZmluZF9kZWx0YXMoc3RydWN0IG9iamVjdF9lbnRyeSAqKmxpc3QsIHVuc2lnbmVkICpsaXN0X3NpemUsCisJCQlpbnQgd2luZG93LCBpbnQgZGVwdGgsIHVuc2lnbmVkICpwcm9jZXNzZWQpCit7CisJdWludDMyX3QgaSwgaWR4ID0gMCwgY291bnQgPSAwOworCXN0cnVjdCB1bnBhY2tlZCAqYXJyYXk7CisJdW5zaWduZWQgbG9uZyBtZW1fdXNhZ2UgPSAwOworCisJYXJyYXkgPSB4Y2FsbG9jKHdpbmRvdywgc2l6ZW9mKHN0cnVjdCB1bnBhY2tlZCkpOworCisJZm9yICg7OykgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeTsKKwkJc3RydWN0IHVucGFja2VkICpuID0gYXJyYXkgKyBpZHg7CisJCWludCBqLCBtYXhfZGVwdGgsIGJlc3RfYmFzZSA9IC0xOworCisJCXByb2dyZXNzX2xvY2soKTsKKwkJaWYgKCEqbGlzdF9zaXplKSB7CisJCQlwcm9ncmVzc191bmxvY2soKTsKKwkJCWJyZWFrOworCQl9CisJCWVudHJ5ID0gKmxpc3QrKzsKKwkJKCpsaXN0X3NpemUpLS07CisJCWlmICghZW50cnktPnByZWZlcnJlZF9iYXNlKSB7CisJCQkoKnByb2Nlc3NlZCkrKzsKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3Nfc3RhdGUsICpwcm9jZXNzZWQpOworCQl9CisJCXByb2dyZXNzX3VubG9jaygpOworCisJCW1lbV91c2FnZSAtPSBmcmVlX3VucGFja2VkKG4pOworCQluLT5lbnRyeSA9IGVudHJ5OworCisJCXdoaWxlICh3aW5kb3dfbWVtb3J5X2xpbWl0ICYmCisJCSAgICAgICBtZW1fdXNhZ2UgPiB3aW5kb3dfbWVtb3J5X2xpbWl0ICYmCisJCSAgICAgICBjb3VudCA+IDEpIHsKKwkJCWNvbnN0IHVpbnQzMl90IHRhaWwgPSAoaWR4ICsgd2luZG93IC0gY291bnQpICUgd2luZG93OworCQkJbWVtX3VzYWdlIC09IGZyZWVfdW5wYWNrZWQoYXJyYXkgKyB0YWlsKTsKKwkJCWNvdW50LS07CisJCX0KKworCQkvKiBXZSBkbyBub3QgY29tcHV0ZSBkZWx0YSB0byAqY3JlYXRlKiBvYmplY3RzIHdlIGFyZSBub3QKKwkJICogZ29pbmcgdG8gcGFjay4KKwkJICovCisJCWlmIChlbnRyeS0+cHJlZmVycmVkX2Jhc2UpCisJCQlnb3RvIG5leHQ7CisKKwkJLyoKKwkJICogSWYgdGhlIGN1cnJlbnQgb2JqZWN0IGlzIGF0IHBhY2sgZWRnZSwgdGFrZSB0aGUgZGVwdGggdGhlCisJCSAqIG9iamVjdHMgdGhhdCBkZXBlbmQgb24gdGhlIGN1cnJlbnQgb2JqZWN0IGludG8gYWNjb3VudAorCQkgKiBvdGhlcndpc2UgdGhleSB3b3VsZCBiZWNvbWUgdG9vIGRlZXAuCisJCSAqLworCQltYXhfZGVwdGggPSBkZXB0aDsKKwkJaWYgKERFTFRBX0NISUxEKGVudHJ5KSkgeworCQkJbWF4X2RlcHRoIC09IGNoZWNrX2RlbHRhX2xpbWl0KGVudHJ5LCAwKTsKKwkJCWlmIChtYXhfZGVwdGggPD0gMCkKKwkJCQlnb3RvIG5leHQ7CisJCX0KKworCQlqID0gd2luZG93OworCQl3aGlsZSAoLS1qID4gMCkgeworCQkJaW50IHJldDsKKwkJCXVpbnQzMl90IG90aGVyX2lkeCA9IGlkeCArIGo7CisJCQlzdHJ1Y3QgdW5wYWNrZWQgKm07CisJCQlpZiAob3RoZXJfaWR4ID49IHdpbmRvdykKKwkJCQlvdGhlcl9pZHggLT0gd2luZG93OworCQkJbSA9IGFycmF5ICsgb3RoZXJfaWR4OworCQkJaWYgKCFtLT5lbnRyeSkKKwkJCQlicmVhazsKKwkJCXJldCA9IHRyeV9kZWx0YShuLCBtLCBtYXhfZGVwdGgsICZtZW1fdXNhZ2UpOworCQkJaWYgKHJldCA8IDApCisJCQkJYnJlYWs7CisJCQllbHNlIGlmIChyZXQgPiAwKQorCQkJCWJlc3RfYmFzZSA9IG90aGVyX2lkeDsKKwkJfQorCisJCS8qCisJCSAqIElmIHdlIGRlY2lkZWQgdG8gY2FjaGUgdGhlIGRlbHRhIGRhdGEsIHRoZW4gaXQgaXMgYmVzdAorCQkgKiB0byBjb21wcmVzcyBpdCByaWdodCBhd2F5LiAgRmlyc3QgYmVjYXVzZSB3ZSBoYXZlIHRvIGRvCisJCSAqIGl0IGFueXdheSwgYW5kIGRvaW5nIGl0IGhlcmUgd2hpbGUgd2UncmUgdGhyZWFkZWQgd2lsbAorCQkgKiBzYXZlIGEgbG90IG9mIHRpbWUgaW4gdGhlIG5vbiB0aHJlYWRlZCB3cml0ZSBwaGFzZSwKKwkJICogYXMgd2VsbCBhcyBhbGxvdyBmb3IgY2FjaGluZyBtb3JlIGRlbHRhcyB3aXRoaW4KKwkJICogdGhlIHNhbWUgY2FjaGUgc2l6ZSBsaW1pdC4KKwkJICogLi4uCisJCSAqIEJ1dCBvbmx5IGlmIG5vdCB3cml0aW5nIHRvIHN0ZG91dCwgc2luY2UgaW4gdGhhdCBjYXNlCisJCSAqIHRoZSBuZXR3b3JrIGlzIG1vc3QgbGlrZWx5IHRocm90dGxpbmcgd3JpdGVzIGFueXdheSwKKwkJICogYW5kIHRoZXJlZm9yZSBpdCBpcyBiZXN0IHRvIGdvIHRvIHRoZSB3cml0ZSBwaGFzZSBBU0FQCisJCSAqIGluc3RlYWQsIGFzIHdlIGNhbiBhZmZvcmQgc3BlbmRpbmcgbW9yZSB0aW1lIGNvbXByZXNzaW5nCisJCSAqIGJldHdlZW4gd3JpdGVzIGF0IHRoYXQgbW9tZW50LgorCQkgKi8KKwkJaWYgKGVudHJ5LT5kZWx0YV9kYXRhICYmICFwYWNrX3RvX3N0ZG91dCkgeworCQkJdW5zaWduZWQgbG9uZyBzaXplOworCisJCQlzaXplID0gZG9fY29tcHJlc3MoJmVudHJ5LT5kZWx0YV9kYXRhLCBERUxUQV9TSVpFKGVudHJ5KSk7CisJCQlpZiAoc2l6ZSA8ICgxVSA8PCBPRV9aX0RFTFRBX0JJVFMpKSB7CisJCQkJZW50cnktPnpfZGVsdGFfc2l6ZSA9IHNpemU7CisJCQkJY2FjaGVfbG9jaygpOworCQkJCWRlbHRhX2NhY2hlX3NpemUgLT0gREVMVEFfU0laRShlbnRyeSk7CisJCQkJZGVsdGFfY2FjaGVfc2l6ZSArPSBlbnRyeS0+el9kZWx0YV9zaXplOworCQkJCWNhY2hlX3VubG9jaygpOworCQkJfSBlbHNlIHsKKwkJCQlGUkVFX0FORF9OVUxMKGVudHJ5LT5kZWx0YV9kYXRhKTsKKwkJCQllbnRyeS0+el9kZWx0YV9zaXplID0gMDsKKwkJCX0KKwkJfQorCisJCS8qIGlmIHdlIG1hZGUgbiBhIGRlbHRhLCBhbmQgaWYgbiBpcyBhbHJlYWR5IGF0IG1heAorCQkgKiBkZXB0aCwgbGVhdmluZyBpdCBpbiB0aGUgd2luZG93IGlzIHBvaW50bGVzcy4gIHdlCisJCSAqIHNob3VsZCBldmljdCBpdCBmaXJzdC4KKwkJICovCisJCWlmIChERUxUQShlbnRyeSkgJiYgbWF4X2RlcHRoIDw9IG4tPmRlcHRoKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogTW92ZSB0aGUgYmVzdCBkZWx0YSBiYXNlIHVwIGluIHRoZSB3aW5kb3csIGFmdGVyIHRoZQorCQkgKiBjdXJyZW50bHkgZGVsdGlmaWVkIG9iamVjdCwgdG8ga2VlcCBpdCBsb25nZXIuICBJdCB3aWxsCisJCSAqIGJlIHRoZSBmaXJzdCBiYXNlIG9iamVjdCB0byBiZSBhdHRlbXB0ZWQgbmV4dC4KKwkJICovCisJCWlmIChERUxUQShlbnRyeSkpIHsKKwkJCXN0cnVjdCB1bnBhY2tlZCBzd2FwID0gYXJyYXlbYmVzdF9iYXNlXTsKKwkJCWludCBkaXN0ID0gKHdpbmRvdyArIGlkeCAtIGJlc3RfYmFzZSkgJSB3aW5kb3c7CisJCQlpbnQgZHN0ID0gYmVzdF9iYXNlOworCQkJd2hpbGUgKGRpc3QtLSkgeworCQkJCWludCBzcmMgPSAoZHN0ICsgMSkgJSB3aW5kb3c7CisJCQkJYXJyYXlbZHN0XSA9IGFycmF5W3NyY107CisJCQkJZHN0ID0gc3JjOworCQkJfQorCQkJYXJyYXlbZHN0XSA9IHN3YXA7CisJCX0KKworCQluZXh0OgorCQlpZHgrKzsKKwkJaWYgKGNvdW50ICsgMSA8IHdpbmRvdykKKwkJCWNvdW50Kys7CisJCWlmIChpZHggPj0gd2luZG93KQorCQkJaWR4ID0gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgd2luZG93OyArK2kpIHsKKwkJZnJlZV9kZWx0YV9pbmRleChhcnJheVtpXS5pbmRleCk7CisJCWZyZWUoYXJyYXlbaV0uZGF0YSk7CisJfQorCWZyZWUoYXJyYXkpOworfQorCisvKgorICogVGhlIG1haW4gb2JqZWN0IGxpc3QgaXMgc3BsaXQgaW50byBzbWFsbGVyIGxpc3RzLCBlYWNoIGlzIGhhbmRlZCB0bworICogb25lIHdvcmtlci4KKyAqCisgKiBUaGUgbWFpbiB0aHJlYWQgd2FpdHMgb24gdGhlIGNvbmRpdGlvbiB0aGF0IChhdCBsZWFzdCkgb25lIG9mIHRoZSB3b3JrZXJzCisgKiBoYXMgc3RvcHBlZCB3b3JraW5nICh3aGljaCBpcyBpbmRpY2F0ZWQgaW4gdGhlIC53b3JraW5nIG1lbWJlciBvZgorICogc3RydWN0IHRocmVhZF9wYXJhbXMpLgorICoKKyAqIFdoZW4gYSB3b3JrIHRocmVhZCBoYXMgY29tcGxldGVkIGl0cyB3b3JrLCBpdCBzZXRzIC53b3JraW5nIHRvIDAgYW5kCisgKiBzaWduYWxzIHRoZSBtYWluIHRocmVhZCBhbmQgd2FpdHMgb24gdGhlIGNvbmRpdGlvbiB0aGF0IC5kYXRhX3JlYWR5CisgKiBiZWNvbWVzIDEuCisgKgorICogVGhlIG1haW4gdGhyZWFkIHN0ZWFscyBoYWxmIG9mIHRoZSB3b3JrIGZyb20gdGhlIHdvcmtlciB0aGF0IGhhcworICogbW9zdCB3b3JrIGxlZnQgdG8gaGFuZCBpdCB0byB0aGUgaWRsZSB3b3JrZXIuCisgKi8KKworc3RydWN0IHRocmVhZF9wYXJhbXMgeworCXB0aHJlYWRfdCB0aHJlYWQ7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqKmxpc3Q7CisJdW5zaWduZWQgbGlzdF9zaXplOworCXVuc2lnbmVkIHJlbWFpbmluZzsKKwlpbnQgd2luZG93OworCWludCBkZXB0aDsKKwlpbnQgd29ya2luZzsKKwlpbnQgZGF0YV9yZWFkeTsKKwlwdGhyZWFkX211dGV4X3QgbXV0ZXg7CisJcHRocmVhZF9jb25kX3QgY29uZDsKKwl1bnNpZ25lZCAqcHJvY2Vzc2VkOworfTsKKworc3RhdGljIHB0aHJlYWRfY29uZF90IHByb2dyZXNzX2NvbmQ7CisKKy8qCisgKiBNdXRleCBhbmQgY29uZGl0aW9uYWwgdmFyaWFibGUgY2FuJ3QgYmUgc3RhdGljYWxseS1pbml0aWFsaXplZCBvbiBXaW5kb3dzLgorICovCitzdGF0aWMgdm9pZCBpbml0X3RocmVhZGVkX3NlYXJjaCh2b2lkKQoreworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmY2FjaGVfbXV0ZXgsIE5VTEwpOworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmcHJvZ3Jlc3NfbXV0ZXgsIE5VTEwpOworCXB0aHJlYWRfY29uZF9pbml0KCZwcm9ncmVzc19jb25kLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF90aHJlYWRlZF9zZWFyY2godm9pZCkKK3sKKwlwdGhyZWFkX2NvbmRfZGVzdHJveSgmcHJvZ3Jlc3NfY29uZCk7CisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZjYWNoZV9tdXRleCk7CisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZwcm9ncmVzc19tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkICp0aHJlYWRlZF9maW5kX2RlbHRhcyh2b2lkICphcmcpCit7CisJc3RydWN0IHRocmVhZF9wYXJhbXMgKm1lID0gYXJnOworCisJcHJvZ3Jlc3NfbG9jaygpOworCXdoaWxlIChtZS0+cmVtYWluaW5nKSB7CisJCXByb2dyZXNzX3VubG9jaygpOworCisJCWZpbmRfZGVsdGFzKG1lLT5saXN0LCAmbWUtPnJlbWFpbmluZywKKwkJCSAgICBtZS0+d2luZG93LCBtZS0+ZGVwdGgsIG1lLT5wcm9jZXNzZWQpOworCisJCXByb2dyZXNzX2xvY2soKTsKKwkJbWUtPndvcmtpbmcgPSAwOworCQlwdGhyZWFkX2NvbmRfc2lnbmFsKCZwcm9ncmVzc19jb25kKTsKKwkJcHJvZ3Jlc3NfdW5sb2NrKCk7CisKKwkJLyoKKwkJICogV2UgbXVzdCBub3Qgc2V0IC0+ZGF0YV9yZWFkeSBiZWZvcmUgd2Ugd2FpdCBvbiB0aGUKKwkJICogY29uZGl0aW9uIGJlY2F1c2UgdGhlIG1haW4gdGhyZWFkIG1heSBoYXZlIHNldCBpdCB0byAxCisJCSAqIGJlZm9yZSB3ZSBnZXQgaGVyZS4gSW4gb3JkZXIgdG8gYmUgc3VyZSB0aGF0IG5ldworCQkgKiB3b3JrIGlzIGF2YWlsYWJsZSBpZiB3ZSBzZWUgMSBpbiAtPmRhdGFfcmVhZHksIGl0CisJCSAqIHdhcyBpbml0aWFsaXplZCB0byAwIGJlZm9yZSB0aGlzIHRocmVhZCB3YXMgc3Bhd25lZAorCQkgKiBhbmQgd2UgcmVzZXQgaXQgdG8gMCByaWdodCBhd2F5LgorCQkgKi8KKwkJcHRocmVhZF9tdXRleF9sb2NrKCZtZS0+bXV0ZXgpOworCQl3aGlsZSAoIW1lLT5kYXRhX3JlYWR5KQorCQkJcHRocmVhZF9jb25kX3dhaXQoJm1lLT5jb25kLCAmbWUtPm11dGV4KTsKKwkJbWUtPmRhdGFfcmVhZHkgPSAwOworCQlwdGhyZWFkX211dGV4X3VubG9jaygmbWUtPm11dGV4KTsKKworCQlwcm9ncmVzc19sb2NrKCk7CisJfQorCXByb2dyZXNzX3VubG9jaygpOworCS8qIGxlYXZlIC0+d29ya2luZyAxIHNvIHRoYXQgdGhpcyBkb2Vzbid0IGdldCBtb3JlIHdvcmsgYXNzaWduZWQgKi8KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgbGxfZmluZF9kZWx0YXMoc3RydWN0IG9iamVjdF9lbnRyeSAqKmxpc3QsIHVuc2lnbmVkIGxpc3Rfc2l6ZSwKKwkJCSAgIGludCB3aW5kb3csIGludCBkZXB0aCwgdW5zaWduZWQgKnByb2Nlc3NlZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX3BhcmFtcyAqcDsKKwlpbnQgaSwgcmV0LCBhY3RpdmVfdGhyZWFkcyA9IDA7CisKKwlpbml0X3RocmVhZGVkX3NlYXJjaCgpOworCisJaWYgKGRlbHRhX3NlYXJjaF90aHJlYWRzIDw9IDEpIHsKKwkJZmluZF9kZWx0YXMobGlzdCwgJmxpc3Rfc2l6ZSwgd2luZG93LCBkZXB0aCwgcHJvY2Vzc2VkKTsKKwkJY2xlYW51cF90aHJlYWRlZF9zZWFyY2goKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocHJvZ3Jlc3MgPiBwYWNrX3RvX3N0ZG91dCkKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkRlbHRhIGNvbXByZXNzaW9uIHVzaW5nIHVwIHRvICVkIHRocmVhZHMiKSwKKwkJCSAgIGRlbHRhX3NlYXJjaF90aHJlYWRzKTsKKwlwID0geGNhbGxvYyhkZWx0YV9zZWFyY2hfdGhyZWFkcywgc2l6ZW9mKCpwKSk7CisKKwkvKiBQYXJ0aXRpb24gdGhlIHdvcmsgYW1vbmdzdCB3b3JrIHRocmVhZHMuICovCisJZm9yIChpID0gMDsgaSA8IGRlbHRhX3NlYXJjaF90aHJlYWRzOyBpKyspIHsKKwkJdW5zaWduZWQgc3ViX3NpemUgPSBsaXN0X3NpemUgLyAoZGVsdGFfc2VhcmNoX3RocmVhZHMgLSBpKTsKKworCQkvKiBkb24ndCB1c2UgdG9vIHNtYWxsIHNlZ21lbnRzIG9yIG5vIGRlbHRhcyB3aWxsIGJlIGZvdW5kICovCisJCWlmIChzdWJfc2l6ZSA8IDIqd2luZG93ICYmIGkrMSA8IGRlbHRhX3NlYXJjaF90aHJlYWRzKQorCQkJc3ViX3NpemUgPSAwOworCisJCXBbaV0ud2luZG93ID0gd2luZG93OworCQlwW2ldLmRlcHRoID0gZGVwdGg7CisJCXBbaV0ucHJvY2Vzc2VkID0gcHJvY2Vzc2VkOworCQlwW2ldLndvcmtpbmcgPSAxOworCQlwW2ldLmRhdGFfcmVhZHkgPSAwOworCisJCS8qIHRyeSB0byBzcGxpdCBjaHVua3Mgb24gInBhdGgiIGJvdW5kYXJpZXMgKi8KKwkJd2hpbGUgKHN1Yl9zaXplICYmIHN1Yl9zaXplIDwgbGlzdF9zaXplICYmCisJCSAgICAgICBsaXN0W3N1Yl9zaXplXS0+aGFzaCAmJgorCQkgICAgICAgbGlzdFtzdWJfc2l6ZV0tPmhhc2ggPT0gbGlzdFtzdWJfc2l6ZS0xXS0+aGFzaCkKKwkJCXN1Yl9zaXplKys7CisKKwkJcFtpXS5saXN0ID0gbGlzdDsKKwkJcFtpXS5saXN0X3NpemUgPSBzdWJfc2l6ZTsKKwkJcFtpXS5yZW1haW5pbmcgPSBzdWJfc2l6ZTsKKworCQlsaXN0ICs9IHN1Yl9zaXplOworCQlsaXN0X3NpemUgLT0gc3ViX3NpemU7CisJfQorCisJLyogU3RhcnQgd29yayB0aHJlYWRzLiAqLworCWZvciAoaSA9IDA7IGkgPCBkZWx0YV9zZWFyY2hfdGhyZWFkczsgaSsrKSB7CisJCWlmICghcFtpXS5saXN0X3NpemUpCisJCQljb250aW51ZTsKKwkJcHRocmVhZF9tdXRleF9pbml0KCZwW2ldLm11dGV4LCBOVUxMKTsKKwkJcHRocmVhZF9jb25kX2luaXQoJnBbaV0uY29uZCwgTlVMTCk7CisJCXJldCA9IHB0aHJlYWRfY3JlYXRlKCZwW2ldLnRocmVhZCwgTlVMTCwKKwkJCQkgICAgIHRocmVhZGVkX2ZpbmRfZGVsdGFzLCAmcFtpXSk7CisJCWlmIChyZXQpCisJCQlkaWUoXygidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIiksIHN0cmVycm9yKHJldCkpOworCQlhY3RpdmVfdGhyZWFkcysrOworCX0KKworCS8qCisJICogTm93IGxldCdzIHdhaXQgZm9yIHdvcmsgY29tcGxldGlvbi4gIEVhY2ggdGltZSBhIHRocmVhZCBpcyBkb25lCisJICogd2l0aCBpdHMgd29yaywgd2Ugc3RlYWwgaGFsZiBvZiB0aGUgcmVtYWluaW5nIHdvcmsgZnJvbSB0aGUKKwkgKiB0aHJlYWQgd2l0aCB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgdW5wcm9jZXNzZWQgb2JqZWN0cyBhbmQgZ2l2ZQorCSAqIGl0IHRvIHRoYXQgbmV3bHkgaWRsZSB0aHJlYWQuICBUaGlzIGVuc3VyZSBnb29kIGxvYWQgYmFsYW5jaW5nCisJICogdW50aWwgdGhlIHJlbWFpbmluZyBvYmplY3QgbGlzdCBzZWdtZW50cyBhcmUgc2ltcGx5IHRvbyBzaG9ydAorCSAqIHRvIGJlIHdvcnRoIHNwbGl0dGluZyBhbnltb3JlLgorCSAqLworCXdoaWxlIChhY3RpdmVfdGhyZWFkcykgeworCQlzdHJ1Y3QgdGhyZWFkX3BhcmFtcyAqdGFyZ2V0ID0gTlVMTDsKKwkJc3RydWN0IHRocmVhZF9wYXJhbXMgKnZpY3RpbSA9IE5VTEw7CisJCXVuc2lnbmVkIHN1Yl9zaXplID0gMDsKKworCQlwcm9ncmVzc19sb2NrKCk7CisJCWZvciAoOzspIHsKKwkJCWZvciAoaSA9IDA7ICF0YXJnZXQgJiYgaSA8IGRlbHRhX3NlYXJjaF90aHJlYWRzOyBpKyspCisJCQkJaWYgKCFwW2ldLndvcmtpbmcpCisJCQkJCXRhcmdldCA9ICZwW2ldOworCQkJaWYgKHRhcmdldCkKKwkJCQlicmVhazsKKwkJCXB0aHJlYWRfY29uZF93YWl0KCZwcm9ncmVzc19jb25kLCAmcHJvZ3Jlc3NfbXV0ZXgpOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IGRlbHRhX3NlYXJjaF90aHJlYWRzOyBpKyspCisJCQlpZiAocFtpXS5yZW1haW5pbmcgPiAyKndpbmRvdyAmJgorCQkJICAgICghdmljdGltIHx8IHZpY3RpbS0+cmVtYWluaW5nIDwgcFtpXS5yZW1haW5pbmcpKQorCQkJCXZpY3RpbSA9ICZwW2ldOworCQlpZiAodmljdGltKSB7CisJCQlzdWJfc2l6ZSA9IHZpY3RpbS0+cmVtYWluaW5nIC8gMjsKKwkJCWxpc3QgPSB2aWN0aW0tPmxpc3QgKyB2aWN0aW0tPmxpc3Rfc2l6ZSAtIHN1Yl9zaXplOworCQkJd2hpbGUgKHN1Yl9zaXplICYmIGxpc3RbMF0tPmhhc2ggJiYKKwkJCSAgICAgICBsaXN0WzBdLT5oYXNoID09IGxpc3RbLTFdLT5oYXNoKSB7CisJCQkJbGlzdCsrOworCQkJCXN1Yl9zaXplLS07CisJCQl9CisJCQlpZiAoIXN1Yl9zaXplKSB7CisJCQkJLyoKKwkJCQkgKiBJdCBpcyBwb3NzaWJsZSBmb3Igc29tZSAicGF0aHMiIHRvIGhhdmUKKwkJCQkgKiBzbyBtYW55IG9iamVjdHMgdGhhdCBubyBoYXNoIGJvdW5kYXJ5CisJCQkJICogbWlnaHQgYmUgZm91bmQuICBMZXQncyBqdXN0IHN0ZWFsIHRoZQorCQkJCSAqIGV4YWN0IGhhbGYgaW4gdGhhdCBjYXNlLgorCQkJCSAqLworCQkJCXN1Yl9zaXplID0gdmljdGltLT5yZW1haW5pbmcgLyAyOworCQkJCWxpc3QgLT0gc3ViX3NpemU7CisJCQl9CisJCQl0YXJnZXQtPmxpc3QgPSBsaXN0OworCQkJdmljdGltLT5saXN0X3NpemUgLT0gc3ViX3NpemU7CisJCQl2aWN0aW0tPnJlbWFpbmluZyAtPSBzdWJfc2l6ZTsKKwkJfQorCQl0YXJnZXQtPmxpc3Rfc2l6ZSA9IHN1Yl9zaXplOworCQl0YXJnZXQtPnJlbWFpbmluZyA9IHN1Yl9zaXplOworCQl0YXJnZXQtPndvcmtpbmcgPSAxOworCQlwcm9ncmVzc191bmxvY2soKTsKKworCQlwdGhyZWFkX211dGV4X2xvY2soJnRhcmdldC0+bXV0ZXgpOworCQl0YXJnZXQtPmRhdGFfcmVhZHkgPSAxOworCQlwdGhyZWFkX2NvbmRfc2lnbmFsKCZ0YXJnZXQtPmNvbmQpOworCQlwdGhyZWFkX211dGV4X3VubG9jaygmdGFyZ2V0LT5tdXRleCk7CisKKwkJaWYgKCFzdWJfc2l6ZSkgeworCQkJcHRocmVhZF9qb2luKHRhcmdldC0+dGhyZWFkLCBOVUxMKTsKKwkJCXB0aHJlYWRfY29uZF9kZXN0cm95KCZ0YXJnZXQtPmNvbmQpOworCQkJcHRocmVhZF9tdXRleF9kZXN0cm95KCZ0YXJnZXQtPm11dGV4KTsKKwkJCWFjdGl2ZV90aHJlYWRzLS07CisJCX0KKwl9CisJY2xlYW51cF90aHJlYWRlZF9zZWFyY2goKTsKKwlmcmVlKHApOworfQorCitzdGF0aWMgaW50IG9ial9pc19wYWNrZWQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXJldHVybiBwYWNrbGlzdF9maW5kKCZ0b19wYWNrLCBvaWQpIHx8CisJCShyZXVzZV9wYWNrZmlsZV9iaXRtYXAgJiYKKwkJIGJpdG1hcF93YWxrX2NvbnRhaW5zKGJpdG1hcF9naXQsIHJldXNlX3BhY2tmaWxlX2JpdG1hcCwgb2lkKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF90YWdfY2hhaW4oY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCB0YWcgKnRhZzsKKworCS8qCisJICogV2UgY2F0Y2ggZHVwbGljYXRlcyBhbHJlYWR5IGluIGFkZF9vYmplY3RfZW50cnkoKSwgYnV0IHdlJ2QKKwkgKiBwcmVmZXIgdG8gZG8gdGhpcyBleHRyYSBjaGVjayB0byBhdm9pZCBoYXZpbmcgdG8gcGFyc2UgdGhlCisJICogdGFnIGF0IGFsbCBpZiB3ZSBhbHJlYWR5IGtub3cgdGhhdCBpdCdzIGJlaW5nIHBhY2tlZCAoZS5nLiwgaWYKKwkgKiBpdCB3YXMgaW5jbHVkZWQgdmlhIGJpdG1hcHMsIHdlIHdvdWxkIG5vdCBoYXZlIHBhcnNlZCBpdAorCSAqIHByZXZpb3VzbHkpLgorCSAqLworCWlmIChvYmpfaXNfcGFja2VkKG9pZCkpCisJCXJldHVybjsKKworCXRhZyA9IGxvb2t1cF90YWcodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJd2hpbGUgKDEpIHsKKwkJaWYgKCF0YWcgfHwgcGFyc2VfdGFnKHRhZykgfHwgIXRhZy0+dGFnZ2VkKQorCQkJZGllKF8oInVuYWJsZSB0byBwYWNrIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGFnICVzIiksCisJCQkgICAgb2lkX3RvX2hleChvaWQpKTsKKworCQlhZGRfb2JqZWN0X2VudHJ5KCZ0YWctPm9iamVjdC5vaWQsIE9CSl9UQUcsIE5VTEwsIDApOworCisJCWlmICh0YWctPnRhZ2dlZC0+dHlwZSAhPSBPQkpfVEFHKQorCQkJcmV0dXJuOworCisJCXRhZyA9IChzdHJ1Y3QgdGFnICopdGFnLT50YWdnZWQ7CisJfQorfQorCitzdGF0aWMgaW50IGFkZF9yZWZfdGFnKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdF9pZCBwZWVsZWQ7CisKKwlpZiAoc3RhcnRzX3dpdGgocGF0aCwgInJlZnMvdGFncy8iKSAmJiAvKiBpcyBhIHRhZz8gKi8KKwkgICAgIXBlZWxfcmVmKHBhdGgsICZwZWVsZWQpICAgICYmIC8qIHBlZWxhYmxlPyAqLworCSAgICBvYmpfaXNfcGFja2VkKCZwZWVsZWQpKSAvKiBvYmplY3QgcGFja2VkPyAqLworCQlhZGRfdGFnX2NoYWluKG9pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfcGFjayhpbnQgd2luZG93LCBpbnQgZGVwdGgpCit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqKmRlbHRhX2xpc3Q7CisJdWludDMyX3QgaSwgbnJfZGVsdGFzOworCXVuc2lnbmVkIG47CisKKwlpZiAodXNlX2RlbHRhX2lzbGFuZHMpCisJCXJlc29sdmVfdHJlZV9pc2xhbmRzKHRoZV9yZXBvc2l0b3J5LCBwcm9ncmVzcywgJnRvX3BhY2spOworCisJZ2V0X29iamVjdF9kZXRhaWxzKCk7CisKKwkvKgorCSAqIElmIHdlJ3JlIGxvY2FsbHkgcmVwYWNraW5nIHRoZW4gd2UgbmVlZCB0byBiZSBkb3VibHkgY2FyZWZ1bAorCSAqIGZyb20gbm93IG9uIGluIG9yZGVyIHRvIG1ha2Ugc3VyZSBubyBzdGVhbHRoIGNvcnJ1cHRpb24gZ2V0cworCSAqIHByb3BhZ2F0ZWQgdG8gdGhlIG5ldyBwYWNrLiAgQ2xpZW50cyByZWNlaXZpbmcgc3RyZWFtZWQgcGFja3MKKwkgKiBzaG91bGQgdmFsaWRhdGUgZXZlcnl0aGluZyB0aGV5IGdldCBhbnl3YXkgc28gbm8gbmVlZCB0byBpbmN1cgorCSAqIHRoZSBhZGRpdGlvbmFsIGNvc3QgaGVyZSBpbiB0aGF0IGNhc2UuCisJICovCisJaWYgKCFwYWNrX3RvX3N0ZG91dCkKKwkJZG9fY2hlY2tfcGFja2VkX29iamVjdF9jcmMgPSAxOworCisJaWYgKCF0b19wYWNrLm5yX29iamVjdHMgfHwgIXdpbmRvdyB8fCAhZGVwdGgpCisJCXJldHVybjsKKworCUFMTE9DX0FSUkFZKGRlbHRhX2xpc3QsIHRvX3BhY2subnJfb2JqZWN0cyk7CisJbnJfZGVsdGFzID0gbiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgdG9fcGFjay5ucl9vYmplY3RzOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkgPSB0b19wYWNrLm9iamVjdHMgKyBpOworCisJCWlmIChERUxUQShlbnRyeSkpCisJCQkvKiBUaGlzIGhhcHBlbnMgaWYgd2UgZGVjaWRlZCB0byByZXVzZSBleGlzdGluZworCQkJICogZGVsdGEgZnJvbSBhIHBhY2suICAicmV1c2VfZGVsdGEgJiYiIGlzIGltcGxpZWQuCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCisJCWlmICghZW50cnktPnR5cGVfdmFsaWQgfHwKKwkJICAgIG9lX3NpemVfbGVzc190aGFuKCZ0b19wYWNrLCBlbnRyeSwgNTApKQorCQkJY29udGludWU7CisKKwkJaWYgKGVudHJ5LT5ub190cnlfZGVsdGEpCisJCQljb250aW51ZTsKKworCQlpZiAoIWVudHJ5LT5wcmVmZXJyZWRfYmFzZSkgeworCQkJbnJfZGVsdGFzKys7CisJCQlpZiAob2VfdHlwZShlbnRyeSkgPCAwKQorCQkJCWRpZShfKCJ1bmFibGUgdG8gZ2V0IHR5cGUgb2Ygb2JqZWN0ICVzIiksCisJCQkJICAgIG9pZF90b19oZXgoJmVudHJ5LT5pZHgub2lkKSk7CisJCX0gZWxzZSB7CisJCQlpZiAob2VfdHlwZShlbnRyeSkgPCAwKSB7CisJCQkJLyoKKwkJCQkgKiBUaGlzIG9iamVjdCBpcyBub3QgZm91bmQsIGJ1dCB3ZQorCQkJCSAqIGRvbid0IGhhdmUgdG8gaW5jbHVkZSBpdCBhbnl3YXkuCisJCQkJICovCisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlkZWx0YV9saXN0W24rK10gPSBlbnRyeTsKKwl9CisKKwlpZiAobnJfZGVsdGFzICYmIG4gPiAxKSB7CisJCXVuc2lnbmVkIG5yX2RvbmUgPSAwOworCisJCWlmIChwcm9ncmVzcykKKwkJCXByb2dyZXNzX3N0YXRlID0gc3RhcnRfcHJvZ3Jlc3MoXygiQ29tcHJlc3Npbmcgb2JqZWN0cyIpLAorCQkJCQkJCW5yX2RlbHRhcyk7CisJCVFTT1JUKGRlbHRhX2xpc3QsIG4sIHR5cGVfc2l6ZV9zb3J0KTsKKwkJbGxfZmluZF9kZWx0YXMoZGVsdGFfbGlzdCwgbiwgd2luZG93KzEsIGRlcHRoLCAmbnJfZG9uZSk7CisJCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzX3N0YXRlKTsKKwkJaWYgKG5yX2RvbmUgIT0gbnJfZGVsdGFzKQorCQkJZGllKF8oImluY29uc2lzdGVuY3kgd2l0aCBkZWx0YSBjb3VudCIpKTsKKwl9CisJZnJlZShkZWx0YV9saXN0KTsKK30KKworc3RhdGljIGludCBnaXRfcGFja19jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAoaywgInBhY2sud2luZG93IikpIHsKKwkJd2luZG93ID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAicGFjay53aW5kb3dtZW1vcnkiKSkgeworCQl3aW5kb3dfbWVtb3J5X2xpbWl0ID0gZ2l0X2NvbmZpZ191bG9uZyhrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJwYWNrLmRlcHRoIikpIHsKKwkJZGVwdGggPSBnaXRfY29uZmlnX2ludChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJwYWNrLmRlbHRhY2FjaGVzaXplIikpIHsKKwkJbWF4X2RlbHRhX2NhY2hlX3NpemUgPSBnaXRfY29uZmlnX2ludChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJwYWNrLmRlbHRhY2FjaGVsaW1pdCIpKSB7CisJCWNhY2hlX21heF9zbWFsbF9kZWx0YV9zaXplID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAicGFjay53cml0ZWJpdG1hcGhhc2hjYWNoZSIpKSB7CisJCWlmIChnaXRfY29uZmlnX2Jvb2woaywgdikpCisJCQl3cml0ZV9iaXRtYXBfb3B0aW9ucyB8PSBCSVRNQVBfT1BUX0hBU0hfQ0FDSEU7CisJCWVsc2UKKwkJCXdyaXRlX2JpdG1hcF9vcHRpb25zICY9IH5CSVRNQVBfT1BUX0hBU0hfQ0FDSEU7CisJfQorCWlmICghc3RyY21wKGssICJwYWNrLnVzZWJpdG1hcHMiKSkgeworCQl1c2VfYml0bWFwX2luZGV4X2RlZmF1bHQgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAicGFjay5hbGxvd3BhY2tyZXVzZSIpKSB7CisJCWFsbG93X3BhY2tfcmV1c2UgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAicGFjay50aHJlYWRzIikpIHsKKwkJZGVsdGFfc2VhcmNoX3RocmVhZHMgPSBnaXRfY29uZmlnX2ludChrLCB2KTsKKwkJaWYgKGRlbHRhX3NlYXJjaF90aHJlYWRzIDwgMCkKKwkJCWRpZShfKCJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIiksCisJCQkgICAgZGVsdGFfc2VhcmNoX3RocmVhZHMpOworCQlpZiAoIUhBVkVfVEhSRUFEUyAmJiBkZWx0YV9zZWFyY2hfdGhyZWFkcyAhPSAxKSB7CisJCQl3YXJuaW5nKF8oIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiKSwgayk7CisJCQlkZWx0YV9zZWFyY2hfdGhyZWFkcyA9IDA7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJwYWNrLmluZGV4dmVyc2lvbiIpKSB7CisJCXBhY2tfaWR4X29wdHMudmVyc2lvbiA9IGdpdF9jb25maWdfaW50KGssIHYpOworCQlpZiAocGFja19pZHhfb3B0cy52ZXJzaW9uID4gMikKKwkJCWRpZShfKCJiYWQgcGFjay5pbmRleHZlcnNpb249JSJQUkl1MzIpLAorCQkJICAgIHBhY2tfaWR4X29wdHMudmVyc2lvbik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKGssIHYsIGNiKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9vYmplY3RfbGlzdF9mcm9tX3N0ZGluKHZvaWQpCit7CisJY2hhciBsaW5lW0dJVF9NQVhfSEVYU1ogKyAxICsgUEFUSF9NQVggKyAyXTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljb25zdCBjaGFyICpwOworCisJZm9yICg7OykgeworCQlpZiAoIWZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgc3RkaW4pKSB7CisJCQlpZiAoZmVvZihzdGRpbikpCisJCQkJYnJlYWs7CisJCQlpZiAoIWZlcnJvcihzdGRpbikpCisJCQkJZGllKCJCVUc6IGZnZXRzIHJldHVybmVkIE5VTEwsIG5vdCBFT0YsIG5vdCBlcnJvciEiKTsKKwkJCWlmIChlcnJubyAhPSBFSU5UUikKKwkJCQlkaWVfZXJybm8oImZnZXRzIik7CisJCQljbGVhcmVycihzdGRpbik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobGluZVswXSA9PSAnLScpIHsKKwkJCWlmIChnZXRfb2lkX2hleChsaW5lKzEsICZvaWQpKQorCQkJCWRpZShfKCJleHBlY3RlZCBlZGdlIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4gJXMiKSwKKwkJCQkgICAgbGluZSk7CisJCQlhZGRfcHJlZmVycmVkX2Jhc2UoJm9pZCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocGFyc2Vfb2lkX2hleChsaW5lLCAmb2lkLCAmcCkpCisJCQlkaWUoXygiZXhwZWN0ZWQgb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiAlcyIpLCBsaW5lKTsKKworCQlhZGRfcHJlZmVycmVkX2Jhc2Vfb2JqZWN0KHAgKyAxKTsKKwkJYWRkX29iamVjdF9lbnRyeSgmb2lkLCBPQkpfTk9ORSwgcCArIDEsIDApOworCX0KK30KKworLyogUmVtZW1iZXIgdG8gdXBkYXRlIG9iamVjdCBmbGFnIGFsbG9jYXRpb24gaW4gb2JqZWN0LmggKi8KKyNkZWZpbmUgT0JKRUNUX0FEREVEICgxdTw8MjApCisKK3N0YXRpYyB2b2lkIHNob3dfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqZGF0YSkKK3sKKwlhZGRfb2JqZWN0X2VudHJ5KCZjb21taXQtPm9iamVjdC5vaWQsIE9CSl9DT01NSVQsIE5VTEwsIDApOworCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IE9CSkVDVF9BRERFRDsKKworCWlmICh3cml0ZV9iaXRtYXBfaW5kZXgpCisJCWluZGV4X2NvbW1pdF9mb3JfYml0bWFwKGNvbW1pdCk7CisKKwlpZiAodXNlX2RlbHRhX2lzbGFuZHMpCisJCXByb3BhZ2F0ZV9pc2xhbmRfbWFya3MoY29tbWl0KTsKK30KKworc3RhdGljIHZvaWQgc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKQoreworCWFkZF9wcmVmZXJyZWRfYmFzZV9vYmplY3QobmFtZSk7CisJYWRkX29iamVjdF9lbnRyeSgmb2JqLT5vaWQsIG9iai0+dHlwZSwgbmFtZSwgMCk7CisJb2JqLT5mbGFncyB8PSBPQkpFQ1RfQURERUQ7CisKKwlpZiAodXNlX2RlbHRhX2lzbGFuZHMpIHsKKwkJY29uc3QgY2hhciAqcDsKKwkJdW5zaWduZWQgZGVwdGg7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudDsKKworCQkvKiB0aGUgZW1wdHkgc3RyaW5nIGlzIGEgcm9vdCB0cmVlLCB3aGljaCBpcyBkZXB0aCAwICovCisJCWRlcHRoID0gKm5hbWUgPyAxIDogMDsKKwkJZm9yIChwID0gc3RyY2hyKG5hbWUsICcvJyk7IHA7IHAgPSBzdHJjaHIocCArIDEsICcvJykpCisJCQlkZXB0aCsrOworCisJCWVudCA9IHBhY2tsaXN0X2ZpbmQoJnRvX3BhY2ssICZvYmotPm9pZCk7CisJCWlmIChlbnQgJiYgZGVwdGggPiBvZV90cmVlX2RlcHRoKCZ0b19wYWNrLCBlbnQpKQorCQkJb2Vfc2V0X3RyZWVfZGVwdGgoJnRvX3BhY2ssIGVudCwgZGVwdGgpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19vYmplY3RfX21hX2FsbG93X2FueShzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpCit7CisJYXNzZXJ0KGFyZ19taXNzaW5nX2FjdGlvbiA9PSBNQV9BTExPV19BTlkpOworCisJLyoKKwkgKiBRdWlldGx5IGlnbm9yZSBBTEwgbWlzc2luZyBvYmplY3RzLiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2l0aAorCSAqIHN0YWdpbmcgdGhlbSBub3cgYW5kIGdldHRpbmcgYW4gb2RkIGVycm9yIGxhdGVyLgorCSAqLworCWlmICghaGFzX29iamVjdF9maWxlKCZvYmotPm9pZCkpCisJCXJldHVybjsKKworCXNob3dfb2JqZWN0KG9iaiwgbmFtZSwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfb2JqZWN0X19tYV9hbGxvd19wcm9taXNvcihzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpCit7CisJYXNzZXJ0KGFyZ19taXNzaW5nX2FjdGlvbiA9PSBNQV9BTExPV19QUk9NSVNPUik7CisKKwkvKgorCSAqIFF1aWV0bHkgaWdub3JlIEVYUEVDVEVEIG1pc3Npbmcgb2JqZWN0cy4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdpdGgKKwkgKiBzdGFnaW5nIHRoZW0gbm93IGFuZCBnZXR0aW5nIGFuIG9kZCBlcnJvciBsYXRlci4KKwkgKi8KKwlpZiAoIWhhc19vYmplY3RfZmlsZSgmb2JqLT5vaWQpICYmIGlzX3Byb21pc29yX29iamVjdCgmb2JqLT5vaWQpKQorCQlyZXR1cm47CisKKwlzaG93X29iamVjdChvYmosIG5hbWUsIGRhdGEpOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9taXNzaW5nX2FjdGlvbihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWFzc2VydChhcmcpOworCWFzc2VydCghdW5zZXQpOworCisJaWYgKCFzdHJjbXAoYXJnLCAiZXJyb3IiKSkgeworCQlhcmdfbWlzc2luZ19hY3Rpb24gPSBNQV9FUlJPUjsKKwkJZm5fc2hvd19vYmplY3QgPSBzaG93X29iamVjdDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAoYXJnLCAiYWxsb3ctYW55IikpIHsKKwkJYXJnX21pc3NpbmdfYWN0aW9uID0gTUFfQUxMT1dfQU5ZOworCQlmZXRjaF9pZl9taXNzaW5nID0gMDsKKwkJZm5fc2hvd19vYmplY3QgPSBzaG93X29iamVjdF9fbWFfYWxsb3dfYW55OworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcChhcmcsICJhbGxvdy1wcm9taXNvciIpKSB7CisJCWFyZ19taXNzaW5nX2FjdGlvbiA9IE1BX0FMTE9XX1BST01JU09SOworCQlmZXRjaF9pZl9taXNzaW5nID0gMDsKKwkJZm5fc2hvd19vYmplY3QgPSBzaG93X29iamVjdF9fbWFfYWxsb3dfcHJvbWlzb3I7CisJCXJldHVybiAwOworCX0KKworCWRpZShfKCJpbnZhbGlkIHZhbHVlIGZvciAtLW1pc3NpbmciKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZWRnZShzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJYWRkX3ByZWZlcnJlZF9iYXNlKCZjb21taXQtPm9iamVjdC5vaWQpOworfQorCitzdHJ1Y3QgaW5fcGFja19vYmplY3QgeworCW9mZl90IG9mZnNldDsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7Cit9OworCitzdHJ1Y3QgaW5fcGFjayB7CisJdW5zaWduZWQgaW50IGFsbG9jOworCXVuc2lnbmVkIGludCBucjsKKwlzdHJ1Y3QgaW5fcGFja19vYmplY3QgKmFycmF5OworfTsKKworc3RhdGljIHZvaWQgbWFya19pbl9wYWNrX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QsIHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBzdHJ1Y3QgaW5fcGFjayAqaW5fcGFjaykKK3sKKwlpbl9wYWNrLT5hcnJheVtpbl9wYWNrLT5ucl0ub2Zmc2V0ID0gZmluZF9wYWNrX2VudHJ5X29uZShvYmplY3QtPm9pZC5oYXNoLCBwKTsKKwlpbl9wYWNrLT5hcnJheVtpbl9wYWNrLT5ucl0ub2JqZWN0ID0gb2JqZWN0OworCWluX3BhY2stPm5yKys7Cit9CisKKy8qCisgKiBDb21wYXJlIHRoZSBvYmplY3RzIGluIHRoZSBvZmZzZXQgb3JkZXIsIGluIG9yZGVyIHRvIGVtdWxhdGUgdGhlCisgKiAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyIgb3V0cHV0IHRoYXQgcHJvZHVjZWQgdGhlIHBhY2sgb3JpZ2luYWxseS4KKyAqLworc3RhdGljIGludCBvZnNjbXAoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCBpbl9wYWNrX29iamVjdCAqYSA9IChzdHJ1Y3QgaW5fcGFja19vYmplY3QgKilhXzsKKwlzdHJ1Y3QgaW5fcGFja19vYmplY3QgKmIgPSAoc3RydWN0IGluX3BhY2tfb2JqZWN0ICopYl87CisKKwlpZiAoYS0+b2Zmc2V0IDwgYi0+b2Zmc2V0KQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoYS0+b2Zmc2V0ID4gYi0+b2Zmc2V0KQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiBvaWRjbXAoJmEtPm9iamVjdC0+b2lkLCAmYi0+b2JqZWN0LT5vaWQpOworfQorCitzdGF0aWMgdm9pZCBhZGRfb2JqZWN0c19pbl91bnBhY2tlZF9wYWNrcyh2b2lkKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCXN0cnVjdCBpbl9wYWNrIGluX3BhY2s7CisJdWludDMyX3QgaTsKKworCW1lbXNldCgmaW5fcGFjaywgMCwgc2l6ZW9mKGluX3BhY2spKTsKKworCWZvciAocCA9IGdldF9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnkpOyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJc3RydWN0IG9iamVjdCAqbzsKKworCQlpZiAoIXAtPnBhY2tfbG9jYWwgfHwgcC0+cGFja19rZWVwIHx8IHAtPnBhY2tfa2VlcF9pbl9jb3JlKQorCQkJY29udGludWU7CisJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCisJCQlkaWUoXygiY2Fubm90IG9wZW4gcGFjayBpbmRleCIpKTsKKworCQlBTExPQ19HUk9XKGluX3BhY2suYXJyYXksCisJCQkgICBpbl9wYWNrLm5yICsgcC0+bnVtX29iamVjdHMsCisJCQkgICBpbl9wYWNrLmFsbG9jKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgcC0+bnVtX29iamVjdHM7IGkrKykgeworCQkJbnRoX3BhY2tlZF9vYmplY3RfaWQoJm9pZCwgcCwgaSk7CisJCQlvID0gbG9va3VwX3Vua25vd25fb2JqZWN0KCZvaWQpOworCQkJaWYgKCEoby0+ZmxhZ3MgJiBPQkpFQ1RfQURERUQpKQorCQkJCW1hcmtfaW5fcGFja19vYmplY3QobywgcCwgJmluX3BhY2spOworCQkJby0+ZmxhZ3MgfD0gT0JKRUNUX0FEREVEOworCQl9CisJfQorCisJaWYgKGluX3BhY2subnIpIHsKKwkJUVNPUlQoaW5fcGFjay5hcnJheSwgaW5fcGFjay5uciwgb2ZzY21wKTsKKwkJZm9yIChpID0gMDsgaSA8IGluX3BhY2subnI7IGkrKykgeworCQkJc3RydWN0IG9iamVjdCAqbyA9IGluX3BhY2suYXJyYXlbaV0ub2JqZWN0OworCQkJYWRkX29iamVjdF9lbnRyeSgmby0+b2lkLCBvLT50eXBlLCAiIiwgMCk7CisJCX0KKwl9CisJZnJlZShpbl9wYWNrLmFycmF5KTsKK30KKworc3RhdGljIGludCBhZGRfbG9vc2Vfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICB2b2lkICpkYXRhKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgb2lkLCBOVUxMKTsKKworCWlmICh0eXBlIDwgMCkgeworCQl3YXJuaW5nKF8oImxvb3NlIG9iamVjdCBhdCAlcyBjb3VsZCBub3QgYmUgZXhhbWluZWQiKSwgcGF0aCk7CisJCXJldHVybiAwOworCX0KKworCWFkZF9vYmplY3RfZW50cnkob2lkLCB0eXBlLCAiIiwgMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXZSBhY3R1YWxseSBkb24ndCBldmVuIGhhdmUgdG8gd29ycnkgYWJvdXQgcmVhY2hhYmlsaXR5IGhlcmUuCisgKiBhZGRfb2JqZWN0X2VudHJ5IHdpbGwgd2VlZCBvdXQgZHVwbGljYXRlcywgc28gd2UganVzdCBhZGQgZXZlcnkKKyAqIGxvb3NlIG9iamVjdCB3ZSBmaW5kLgorICovCitzdGF0aWMgdm9pZCBhZGRfdW5yZWFjaGFibGVfbG9vc2Vfb2JqZWN0cyh2b2lkKQoreworCWZvcl9lYWNoX2xvb3NlX2ZpbGVfaW5fb2JqZGlyKGdldF9vYmplY3RfZGlyZWN0b3J5KCksCisJCQkJICAgICAgYWRkX2xvb3NlX29iamVjdCwKKwkJCQkgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGludCBoYXNfc2hhMV9wYWNrX2tlcHRfb3Jfbm9ubG9jYWwoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0YXRpYyBzdHJ1Y3QgcGFja2VkX2dpdCAqbGFzdF9mb3VuZCA9ICh2b2lkICopMTsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCXAgPSAobGFzdF9mb3VuZCAhPSAodm9pZCAqKTEpID8gbGFzdF9mb3VuZCA6CisJCQkJCWdldF9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnkpOworCisJd2hpbGUgKHApIHsKKwkJaWYgKCghcC0+cGFja19sb2NhbCB8fCBwLT5wYWNrX2tlZXAgfHwKKwkJCQlwLT5wYWNrX2tlZXBfaW5fY29yZSkgJiYKKwkJCWZpbmRfcGFja19lbnRyeV9vbmUob2lkLT5oYXNoLCBwKSkgeworCQkJbGFzdF9mb3VuZCA9IHA7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAocCA9PSBsYXN0X2ZvdW5kKQorCQkJcCA9IGdldF9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnkpOworCQllbHNlCisJCQlwID0gcC0+bmV4dDsKKwkJaWYgKHAgPT0gbGFzdF9mb3VuZCkKKwkJCXAgPSBwLT5uZXh0OworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFN0b3JlIGEgbGlzdCBvZiBzaGExcyB0aGF0IGFyZSBzaG91bGQgbm90IGJlIGRpc2NhcmRlZAorICogYmVjYXVzZSB0aGV5IGFyZSBlaXRoZXIgd3JpdHRlbiB0b28gcmVjZW50bHksIG9yIGFyZQorICogcmVhY2hhYmxlIGZyb20gYW5vdGhlciBvYmplY3QgdGhhdCB3YXMuCisgKgorICogVGhpcyBpcyBmaWxsZWQgYnkgZ2V0X29iamVjdF9saXN0LgorICovCitzdGF0aWMgc3RydWN0IG9pZF9hcnJheSByZWNlbnRfb2JqZWN0czsKKworc3RhdGljIGludCBsb29zZW5lZF9vYmplY3RfY2FuX2JlX2Rpc2NhcmRlZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJCSAgICB0aW1lc3RhbXBfdCBtdGltZSkKK3sKKwlpZiAoIXVucGFja191bnJlYWNoYWJsZV9leHBpcmF0aW9uKQorCQlyZXR1cm4gMDsKKwlpZiAobXRpbWUgPiB1bnBhY2tfdW5yZWFjaGFibGVfZXhwaXJhdGlvbikKKwkJcmV0dXJuIDA7CisJaWYgKG9pZF9hcnJheV9sb29rdXAoJnJlY2VudF9vYmplY3RzLCBvaWQpID49IDApCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBsb29zZW5fdW51c2VkX3BhY2tlZF9vYmplY3RzKHZvaWQpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJdWludDMyX3QgaTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCWZvciAocCA9IGdldF9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnkpOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAoIXAtPnBhY2tfbG9jYWwgfHwgcC0+cGFja19rZWVwIHx8IHAtPnBhY2tfa2VlcF9pbl9jb3JlKQorCQkJY29udGludWU7CisKKwkJaWYgKG9wZW5fcGFja19pbmRleChwKSkKKwkJCWRpZShfKCJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4IikpOworCisJCWZvciAoaSA9IDA7IGkgPCBwLT5udW1fb2JqZWN0czsgaSsrKSB7CisJCQludGhfcGFja2VkX29iamVjdF9pZCgmb2lkLCBwLCBpKTsKKwkJCWlmICghcGFja2xpc3RfZmluZCgmdG9fcGFjaywgJm9pZCkgJiYKKwkJCSAgICAhaGFzX3NoYTFfcGFja19rZXB0X29yX25vbmxvY2FsKCZvaWQpICYmCisJCQkgICAgIWxvb3NlbmVkX29iamVjdF9jYW5fYmVfZGlzY2FyZGVkKCZvaWQsIHAtPm10aW1lKSkKKwkJCQlpZiAoZm9yY2Vfb2JqZWN0X2xvb3NlKCZvaWQsIHAtPm10aW1lKSkKKwkJCQkJZGllKF8oInVuYWJsZSB0byBmb3JjZSBsb29zZSBvYmplY3QiKSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGlzIHRyYWNrcyBhbnkgb3B0aW9ucyB3aGljaCBwYWNrLXJldXNlIGNvZGUgZXhwZWN0cyB0byBiZSBvbiwgb3Igd2hpY2ggYQorICogcmVhZGVyIG9mIHRoZSBwYWNrIG1pZ2h0IG5vdCB1bmRlcnN0YW5kLCBhbmQgd2hpY2ggd291bGQgdGhlcmVmb3JlIHByZXZlbnQKKyAqIGJsaW5kIHJldXNlIG9mIHdoYXQgd2UgaGF2ZSBvbiBkaXNrLgorICovCitzdGF0aWMgaW50IHBhY2tfb3B0aW9uc19hbGxvd19yZXVzZSh2b2lkKQoreworCXJldHVybiBhbGxvd19wYWNrX3JldXNlICYmCisJICAgICAgIHBhY2tfdG9fc3Rkb3V0ICYmCisJICAgICAgICFpZ25vcmVfcGFja2VkX2tlZXBfb25fZGlzayAmJgorCSAgICAgICAhaWdub3JlX3BhY2tlZF9rZWVwX2luX2NvcmUgJiYKKwkgICAgICAgKCFsb2NhbCB8fCAhaGF2ZV9ub25fbG9jYWxfcGFja3MpICYmCisJICAgICAgICFpbmNyZW1lbnRhbDsKK30KKworc3RhdGljIGludCBnZXRfb2JqZWN0X2xpc3RfZnJvbV9iaXRtYXAoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCWlmICghKGJpdG1hcF9naXQgPSBwcmVwYXJlX2JpdG1hcF93YWxrKHJldnMsICZmaWx0ZXJfb3B0aW9ucykpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocGFja19vcHRpb25zX2FsbG93X3JldXNlKCkgJiYKKwkgICAgIXJldXNlX3BhcnRpYWxfcGFja2ZpbGVfZnJvbV9iaXRtYXAoCisJCQliaXRtYXBfZ2l0LAorCQkJJnJldXNlX3BhY2tmaWxlLAorCQkJJnJldXNlX3BhY2tmaWxlX29iamVjdHMsCisJCQkmcmV1c2VfcGFja2ZpbGVfYml0bWFwKSkgeworCQlhc3NlcnQocmV1c2VfcGFja2ZpbGVfb2JqZWN0cyk7CisJCW5yX3Jlc3VsdCArPSByZXVzZV9wYWNrZmlsZV9vYmplY3RzOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzX3N0YXRlLCBucl9yZXN1bHQpOworCX0KKworCXRyYXZlcnNlX2JpdG1hcF9jb21taXRfbGlzdChiaXRtYXBfZ2l0LCByZXZzLAorCQkJCSAgICAmYWRkX29iamVjdF9lbnRyeV9mcm9tX2JpdG1hcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlY29yZF9yZWNlbnRfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwKKwkJCQkgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgdm9pZCAqZGF0YSkKK3sKKwlvaWRfYXJyYXlfYXBwZW5kKCZyZWNlbnRfb2JqZWN0cywgJm9iai0+b2lkKTsKK30KKworc3RhdGljIHZvaWQgcmVjb3JkX3JlY2VudF9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpkYXRhKQoreworCW9pZF9hcnJheV9hcHBlbmQoJnJlY2VudF9vYmplY3RzLCAmY29tbWl0LT5vYmplY3Qub2lkKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X29iamVjdF9saXN0KGludCBhYywgY29uc3QgY2hhciAqKmF2KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgc19yX29wdCA9IHsKKwkJLmFsbG93X2V4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0cyA9IDEsCisJfTsKKwljaGFyIGxpbmVbMTAwMF07CisJaW50IGZsYWdzID0gMDsKKwlpbnQgc2F2ZV93YXJuaW5nOworCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldnMsIE5VTEwpOworCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CisJc2V0dXBfcmV2aXNpb25zKGFjLCBhdiwgJnJldnMsICZzX3Jfb3B0KTsKKworCS8qIG1ha2Ugc3VyZSBzaGFsbG93cyBhcmUgcmVhZCAqLworCWlzX3JlcG9zaXRvcnlfc2hhbGxvdyh0aGVfcmVwb3NpdG9yeSk7CisKKwlzYXZlX3dhcm5pbmcgPSB3YXJuX29uX29iamVjdF9yZWZuYW1lX2FtYmlndWl0eTsKKwl3YXJuX29uX29iamVjdF9yZWZuYW1lX2FtYmlndWl0eSA9IDA7CisKKwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbikgIT0gTlVMTCkgeworCQlpbnQgbGVuID0gc3RybGVuKGxpbmUpOworCQlpZiAobGVuICYmIGxpbmVbbGVuIC0gMV0gPT0gJ1xuJykKKwkJCWxpbmVbLS1sZW5dID0gMDsKKwkJaWYgKCFsZW4pCisJCQlicmVhazsKKwkJaWYgKCpsaW5lID09ICctJykgeworCQkJaWYgKCFzdHJjbXAobGluZSwgIi0tbm90IikpIHsKKwkJCQlmbGFncyBePSBVTklOVEVSRVNUSU5HOworCQkJCXdyaXRlX2JpdG1hcF9pbmRleCA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc3RhcnRzX3dpdGgobGluZSwgIi0tc2hhbGxvdyAiKSkgeworCQkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQkJCWlmIChnZXRfb2lkX2hleChsaW5lICsgMTAsICZvaWQpKQorCQkJCQlkaWUoIm5vdCBhbiBTSEEtMSAnJXMnIiwgbGluZSArIDEwKTsKKwkJCQlyZWdpc3Rlcl9zaGFsbG93KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwkJCQl1c2VfYml0bWFwX2luZGV4ID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWRpZShfKCJub3QgYSByZXYgJyVzJyIpLCBsaW5lKTsKKwkJfQorCQlpZiAoaGFuZGxlX3JldmlzaW9uX2FyZyhsaW5lLCAmcmV2cywgZmxhZ3MsIFJFVkFSR19DQU5OT1RfQkVfRklMRU5BTUUpKQorCQkJZGllKF8oImJhZCByZXZpc2lvbiAnJXMnIiksIGxpbmUpOworCX0KKworCXdhcm5fb25fb2JqZWN0X3JlZm5hbWVfYW1iaWd1aXR5ID0gc2F2ZV93YXJuaW5nOworCisJaWYgKHVzZV9iaXRtYXBfaW5kZXggJiYgIWdldF9vYmplY3RfbGlzdF9mcm9tX2JpdG1hcCgmcmV2cykpCisJCXJldHVybjsKKworCWlmICh1c2VfZGVsdGFfaXNsYW5kcykKKwkJbG9hZF9kZWx0YV9pc2xhbmRzKHRoZV9yZXBvc2l0b3J5LCBwcm9ncmVzcyk7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCW1hcmtfZWRnZXNfdW5pbnRlcmVzdGluZygmcmV2cywgc2hvd19lZGdlLCBzcGFyc2UpOworCisJaWYgKCFmbl9zaG93X29iamVjdCkKKwkJZm5fc2hvd19vYmplY3QgPSBzaG93X29iamVjdDsKKwl0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgmZmlsdGVyX29wdGlvbnMsICZyZXZzLAorCQkJCSAgICAgIHNob3dfY29tbWl0LCBmbl9zaG93X29iamVjdCwgTlVMTCwKKwkJCQkgICAgICBOVUxMKTsKKworCWlmICh1bnBhY2tfdW5yZWFjaGFibGVfZXhwaXJhdGlvbikgeworCQlyZXZzLmlnbm9yZV9taXNzaW5nX2xpbmtzID0gMTsKKwkJaWYgKGFkZF91bnNlZW5fcmVjZW50X29iamVjdHNfdG9fdHJhdmVyc2FsKCZyZXZzLAorCQkJCXVucGFja191bnJlYWNoYWJsZV9leHBpcmF0aW9uKSkKKwkJCWRpZShfKCJ1bmFibGUgdG8gYWRkIHJlY2VudCBvYmplY3RzIikpOworCQlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKKwkJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKwkJdHJhdmVyc2VfY29tbWl0X2xpc3QoJnJldnMsIHJlY29yZF9yZWNlbnRfY29tbWl0LAorCQkJCSAgICAgcmVjb3JkX3JlY2VudF9vYmplY3QsIE5VTEwpOworCX0KKworCWlmIChrZWVwX3VucmVhY2hhYmxlKQorCQlhZGRfb2JqZWN0c19pbl91bnBhY2tlZF9wYWNrcygpOworCWlmIChwYWNrX2xvb3NlX3VucmVhY2hhYmxlKQorCQlhZGRfdW5yZWFjaGFibGVfbG9vc2Vfb2JqZWN0cygpOworCWlmICh1bnBhY2tfdW5yZWFjaGFibGUpCisJCWxvb3Nlbl91bnVzZWRfcGFja2VkX29iamVjdHMoKTsKKworCW9pZF9hcnJheV9jbGVhcigmcmVjZW50X29iamVjdHMpOworfQorCitzdGF0aWMgdm9pZCBhZGRfZXh0cmFfa2VwdF9wYWNrcyhjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm5hbWVzKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCisJaWYgKCFuYW1lcy0+bnIpCisJCXJldHVybjsKKworCWZvciAocCA9IGdldF9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnkpOyBwOyBwID0gcC0+bmV4dCkgeworCQljb25zdCBjaGFyICpuYW1lID0gYmFzZW5hbWUocC0+cGFja19uYW1lKTsKKwkJaW50IGk7CisKKwkJaWYgKCFwLT5wYWNrX2xvY2FsKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IG5hbWVzLT5ucjsgaSsrKQorCQkJaWYgKCFmc3BhdGhjbXAobmFtZSwgbmFtZXMtPml0ZW1zW2ldLnN0cmluZykpCisJCQkJYnJlYWs7CisKKwkJaWYgKGkgPCBuYW1lcy0+bnIpIHsKKwkJCXAtPnBhY2tfa2VlcF9pbl9jb3JlID0gMTsKKwkJCWlnbm9yZV9wYWNrZWRfa2VlcF9pbl9jb3JlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9pbmRleF92ZXJzaW9uKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwljaGFyICpjOworCWNvbnN0IGNoYXIgKnZhbCA9IGFyZzsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKworCXBhY2tfaWR4X29wdHMudmVyc2lvbiA9IHN0cnRvdWwodmFsLCAmYywgMTApOworCWlmIChwYWNrX2lkeF9vcHRzLnZlcnNpb24gPiAyKQorCQlkaWUoXygidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIpLCB2YWwpOworCWlmICgqYyA9PSAnLCcgJiYgY1sxXSkKKwkJcGFja19pZHhfb3B0cy5vZmYzMl9saW1pdCA9IHN0cnRvdWwoYysxLCAmYywgMCk7CisJaWYgKCpjIHx8IHBhY2tfaWR4X29wdHMub2ZmMzJfbGltaXQgJiAweDgwMDAwMDAwKQorCQlkaWUoXygiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIpLCB2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV91bnBhY2tfdW5yZWFjaGFibGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpIHsKKwkJdW5wYWNrX3VucmVhY2hhYmxlID0gMDsKKwkJdW5wYWNrX3VucmVhY2hhYmxlX2V4cGlyYXRpb24gPSAwOworCX0KKwllbHNlIHsKKwkJdW5wYWNrX3VucmVhY2hhYmxlID0gMTsKKwkJaWYgKGFyZykKKwkJCXVucGFja191bnJlYWNoYWJsZV9leHBpcmF0aW9uID0gYXBwcm94aWRhdGUoYXJnKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfcGFja19vYmplY3RzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCB1c2VfaW50ZXJuYWxfcmV2X2xpc3QgPSAwOworCWludCBzaGFsbG93ID0gMDsKKwlpbnQgYWxsX3Byb2dyZXNzX2ltcGxpZWQgPSAwOworCXN0cnVjdCBhcmd2X2FycmF5IHJwID0gQVJHVl9BUlJBWV9JTklUOworCWludCByZXZfbGlzdF91bnBhY2tlZCA9IDAsIHJldl9saXN0X2FsbCA9IDAsIHJldl9saXN0X3JlZmxvZyA9IDA7CisJaW50IHJldl9saXN0X2luZGV4ID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qga2VlcF9wYWNrX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBvcHRpb24gcGFja19vYmplY3RzX29wdGlvbnNbXSA9IHsKKwkJT1BUX1NFVF9JTlQoJ3EnLCAicXVpZXQiLCAmcHJvZ3Jlc3MsCisJCQkgICAgTl8oImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIiksIDApLAorCQlPUFRfU0VUX0lOVCgwLCAicHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MsCisJCQkgICAgTl8oInNob3cgcHJvZ3Jlc3MgbWV0ZXIiKSwgMSksCisJCU9QVF9TRVRfSU5UKDAsICJhbGwtcHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MsCisJCQkgICAgTl8oInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIiksIDIpLAorCQlPUFRfQk9PTCgwLCAiYWxsLXByb2dyZXNzLWltcGxpZWQiLAorCQkJICZhbGxfcHJvZ3Jlc3NfaW1wbGllZCwKKwkJCSBOXygic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIikpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAiaW5kZXgtdmVyc2lvbiIsIE5VTEwsIE5fKCI8dmVyc2lvbj5bLDxvZmZzZXQ+XSIpLAorCQkgIE5fKCJ3cml0ZSB0aGUgcGFjayBpbmRleCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgaWR4IGZvcm1hdCB2ZXJzaW9uIiksCisJCSAgUEFSU0VfT1BUX05PTkVHLCBvcHRpb25fcGFyc2VfaW5kZXhfdmVyc2lvbiksCisJCU9QVF9NQUdOSVRVREUoMCwgIm1heC1wYWNrLXNpemUiLCAmcGFja19zaXplX2xpbWl0LAorCQkJICAgICAgTl8oIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiKSksCisJCU9QVF9CT09MKDAsICJsb2NhbCIsICZsb2NhbCwKKwkJCSBOXygiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIikpLAorCQlPUFRfQk9PTCgwLCAiaW5jcmVtZW50YWwiLCAmaW5jcmVtZW50YWwsCisJCQkgTl8oImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgIndpbmRvdyIsICZ3aW5kb3csCisJCQkgICAgTl8oImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiKSksCisJCU9QVF9NQUdOSVRVREUoMCwgIndpbmRvdy1tZW1vcnkiLCAmd2luZG93X21lbW9yeV9saW1pdCwKKwkJCSAgICAgIE5fKCJsaW1pdCBwYWNrIHdpbmRvdyBieSBtZW1vcnkgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGxpbWl0IikpLAorCQlPUFRfSU5URUdFUigwLCAiZGVwdGgiLCAmZGVwdGgsCisJCQkgICAgTl8oIm1heGltdW0gbGVuZ3RoIG9mIGRlbHRhIGNoYWluIGFsbG93ZWQgaW4gdGhlIHJlc3VsdGluZyBwYWNrIikpLAorCQlPUFRfQk9PTCgwLCAicmV1c2UtZGVsdGEiLCAmcmV1c2VfZGVsdGEsCisJCQkgTl8oInJldXNlIGV4aXN0aW5nIGRlbHRhcyIpKSwKKwkJT1BUX0JPT0woMCwgInJldXNlLW9iamVjdCIsICZyZXVzZV9vYmplY3QsCisJCQkgTl8oInJldXNlIGV4aXN0aW5nIG9iamVjdHMiKSksCisJCU9QVF9CT09MKDAsICJkZWx0YS1iYXNlLW9mZnNldCIsICZhbGxvd19vZnNfZGVsdGEsCisJCQkgTl8oInVzZSBPRlNfREVMVEEgb2JqZWN0cyIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgInRocmVhZHMiLCAmZGVsdGFfc2VhcmNoX3RocmVhZHMsCisJCQkgICAgTl8oInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiKSksCisJCU9QVF9CT09MKDAsICJub24tZW1wdHkiLCAmbm9uX2VtcHR5LAorCQkJIE5fKCJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IikpLAorCQlPUFRfQk9PTCgwLCAicmV2cyIsICZ1c2VfaW50ZXJuYWxfcmV2X2xpc3QsCisJCQkgTl8oInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiKSksCisJCU9QVF9TRVRfSU5UX0YoMCwgInVucGFja2VkIiwgJnJldl9saXN0X3VucGFja2VkLAorCQkJICAgICAgTl8oImxpbWl0IHRoZSBvYmplY3RzIHRvIHRob3NlIHRoYXQgYXJlIG5vdCB5ZXQgcGFja2VkIiksCisJCQkgICAgICAxLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfU0VUX0lOVF9GKDAsICJhbGwiLCAmcmV2X2xpc3RfYWxsLAorCQkJICAgICAgTl8oImluY2x1ZGUgb2JqZWN0cyByZWFjaGFibGUgZnJvbSBhbnkgcmVmZXJlbmNlIiksCisJCQkgICAgICAxLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfU0VUX0lOVF9GKDAsICJyZWZsb2ciLCAmcmV2X2xpc3RfcmVmbG9nLAorCQkJICAgICAgTl8oImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCBieSByZWZsb2cgZW50cmllcyIpLAorCQkJICAgICAgMSwgUEFSU0VfT1BUX05PTkVHKSwKKwkJT1BUX1NFVF9JTlRfRigwLCAiaW5kZXhlZC1vYmplY3RzIiwgJnJldl9saXN0X2luZGV4LAorCQkJICAgICAgTl8oImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiKSwKKwkJCSAgICAgIDEsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9CT09MKDAsICJzdGRvdXQiLCAmcGFja190b19zdGRvdXQsCisJCQkgTl8oIm91dHB1dCBwYWNrIHRvIHN0ZG91dCIpKSwKKwkJT1BUX0JPT0woMCwgImluY2x1ZGUtdGFnIiwgJmluY2x1ZGVfdGFnLAorCQkJIE5fKCJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiKSksCisJCU9QVF9CT09MKDAsICJrZWVwLXVucmVhY2hhYmxlIiwgJmtlZXBfdW5yZWFjaGFibGUsCisJCQkgTl8oImtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyIpKSwKKwkJT1BUX0JPT0woMCwgInBhY2stbG9vc2UtdW5yZWFjaGFibGUiLCAmcGFja19sb29zZV91bnJlYWNoYWJsZSwKKwkJCSBOXygicGFjayBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzIikpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAidW5wYWNrLXVucmVhY2hhYmxlIiwgTlVMTCwgTl8oInRpbWUiKSwKKwkJICBOXygidW5wYWNrIHVucmVhY2hhYmxlIG9iamVjdHMgbmV3ZXIgdGhhbiA8dGltZT4iKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBvcHRpb25fcGFyc2VfdW5wYWNrX3VucmVhY2hhYmxlKSwKKwkJT1BUX0JPT0woMCwgInNwYXJzZSIsICZzcGFyc2UsCisJCQkgTl8oInVzZSB0aGUgc3BhcnNlIHJlYWNoYWJpbGl0eSBhbGdvcml0aG0iKSksCisJCU9QVF9CT09MKDAsICJ0aGluIiwgJnRoaW4sCisJCQkgTl8oImNyZWF0ZSB0aGluIHBhY2tzIikpLAorCQlPUFRfQk9PTCgwLCAic2hhbGxvdyIsICZzaGFsbG93LAorCQkJIE5fKCJjcmVhdGUgcGFja3Mgc3VpdGFibGUgZm9yIHNoYWxsb3cgZmV0Y2hlcyIpKSwKKwkJT1BUX0JPT0woMCwgImhvbm9yLXBhY2sta2VlcCIsICZpZ25vcmVfcGFja2VkX2tlZXBfb25fZGlzaywKKwkJCSBOXygiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIpKSwKKwkJT1BUX1NUUklOR19MSVNUKDAsICJrZWVwLXBhY2siLCAma2VlcF9wYWNrX2xpc3QsIE5fKCJuYW1lIiksCisJCQkJTl8oImlnbm9yZSB0aGlzIHBhY2siKSksCisJCU9QVF9JTlRFR0VSKDAsICJjb21wcmVzc2lvbiIsICZwYWNrX2NvbXByZXNzaW9uX2xldmVsLAorCQkJICAgIE5fKCJwYWNrIGNvbXByZXNzaW9uIGxldmVsIikpLAorCQlPUFRfU0VUX0lOVCgwLCAia2VlcC10cnVlLXBhcmVudHMiLCAmZ3JhZnRzX3JlcGxhY2VfcGFyZW50cywKKwkJCSAgICBOXygiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiKSwgMCksCisJCU9QVF9CT09MKDAsICJ1c2UtYml0bWFwLWluZGV4IiwgJnVzZV9iaXRtYXBfaW5kZXgsCisJCQkgTl8oInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgIndyaXRlLWJpdG1hcC1pbmRleCIsICZ3cml0ZV9iaXRtYXBfaW5kZXgsCisJCQkgICAgTl8oIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiKSwKKwkJCSAgICBXUklURV9CSVRNQVBfVFJVRSksCisJCU9QVF9TRVRfSU5UX0YoMCwgIndyaXRlLWJpdG1hcC1pbmRleC1xdWlldCIsCisJCQkgICAgICAmd3JpdGVfYml0bWFwX2luZGV4LAorCQkJICAgICAgTl8oIndyaXRlIGEgYml0bWFwIGluZGV4IGlmIHBvc3NpYmxlIiksCisJCQkgICAgICBXUklURV9CSVRNQVBfUVVJRVQsIFBBUlNFX09QVF9ISURERU4pLAorCQlPUFRfUEFSU0VfTElTVF9PQkpFQ1RTX0ZJTFRFUigmZmlsdGVyX29wdGlvbnMpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAibWlzc2luZyIsIE5VTEwsIE5fKCJhY3Rpb24iKSwKKwkJICBOXygiaGFuZGxpbmcgZm9yIG1pc3Npbmcgb2JqZWN0cyIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCSAgb3B0aW9uX3BhcnNlX21pc3NpbmdfYWN0aW9uKSwKKwkJT1BUX0JPT0woMCwgImV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyIsICZleGNsdWRlX3Byb21pc29yX29iamVjdHMsCisJCQkgTl8oImRvIG5vdCBwYWNrIG9iamVjdHMgaW4gcHJvbWlzb3IgcGFja2ZpbGVzIikpLAorCQlPUFRfQk9PTCgwLCAiZGVsdGEtaXNsYW5kcyIsICZ1c2VfZGVsdGFfaXNsYW5kcywKKwkJCSBOXygicmVzcGVjdCBpc2xhbmRzIGR1cmluZyBkZWx0YSBjb21wcmVzc2lvbiIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlpZiAoREZTX05VTV9TVEFURVMgPiAoMSA8PCBPRV9ERlNfU1RBVEVfQklUUykpCisJCUJVRygidG9vIG1hbnkgZGZzIHN0YXRlcywgaW5jcmVhc2UgT0VfREZTX1NUQVRFX0JJVFMiKTsKKworCXJlYWRfcmVwbGFjZV9yZWZzID0gMDsKKworCXNwYXJzZSA9IGdpdF9lbnZfYm9vbCgiR0lUX1RFU1RfUEFDS19TUEFSU0UiLCAtMSk7CisJcHJlcGFyZV9yZXBvX3NldHRpbmdzKHRoZV9yZXBvc2l0b3J5KTsKKwlpZiAoc3BhcnNlIDwgMCkKKwkJc3BhcnNlID0gdGhlX3JlcG9zaXRvcnktPnNldHRpbmdzLnBhY2tfdXNlX3NwYXJzZTsKKworCXJlc2V0X3BhY2tfaWR4X29wdGlvbigmcGFja19pZHhfb3B0cyk7CisJZ2l0X2NvbmZpZyhnaXRfcGFja19jb25maWcsIE5VTEwpOworCisJcHJvZ3Jlc3MgPSBpc2F0dHkoMik7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBwYWNrX29iamVjdHNfb3B0aW9ucywKKwkJCSAgICAgcGFja191c2FnZSwgMCk7CisKKwlpZiAoYXJnYykgeworCQliYXNlX25hbWUgPSBhcmd2WzBdOworCQlhcmdjLS07CisJfQorCWlmIChwYWNrX3RvX3N0ZG91dCAhPSAhYmFzZV9uYW1lIHx8IGFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhwYWNrX3VzYWdlLCBwYWNrX29iamVjdHNfb3B0aW9ucyk7CisKKwlpZiAoZGVwdGggPj0gKDEgPDwgT0VfREVQVEhfQklUUykpIHsKKwkJd2FybmluZyhfKCJkZWx0YSBjaGFpbiBkZXB0aCAlZCBpcyB0b28gZGVlcCwgZm9yY2luZyAlZCIpLAorCQkJZGVwdGgsICgxIDw8IE9FX0RFUFRIX0JJVFMpIC0gMSk7CisJCWRlcHRoID0gKDEgPDwgT0VfREVQVEhfQklUUykgLSAxOworCX0KKwlpZiAoY2FjaGVfbWF4X3NtYWxsX2RlbHRhX3NpemUgPj0gKDFVIDw8IE9FX1pfREVMVEFfQklUUykpIHsKKwkJd2FybmluZyhfKCJwYWNrLmRlbHRhQ2FjaGVMaW1pdCBpcyB0b28gaGlnaCwgZm9yY2luZyAlZCIpLAorCQkJKDFVIDw8IE9FX1pfREVMVEFfQklUUykgLSAxKTsKKwkJY2FjaGVfbWF4X3NtYWxsX2RlbHRhX3NpemUgPSAoMVUgPDwgT0VfWl9ERUxUQV9CSVRTKSAtIDE7CisJfQorCisJYXJndl9hcnJheV9wdXNoKCZycCwgInBhY2stb2JqZWN0cyIpOworCWlmICh0aGluKSB7CisJCXVzZV9pbnRlcm5hbF9yZXZfbGlzdCA9IDE7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcnAsIHNoYWxsb3cKKwkJCQk/ICItLW9iamVjdHMtZWRnZS1hZ2dyZXNzaXZlIgorCQkJCTogIi0tb2JqZWN0cy1lZGdlIik7CisJfSBlbHNlCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcnAsICItLW9iamVjdHMiKTsKKworCWlmIChyZXZfbGlzdF9hbGwpIHsKKwkJdXNlX2ludGVybmFsX3Jldl9saXN0ID0gMTsKKwkJYXJndl9hcnJheV9wdXNoKCZycCwgIi0tYWxsIik7CisJfQorCWlmIChyZXZfbGlzdF9yZWZsb2cpIHsKKwkJdXNlX2ludGVybmFsX3Jldl9saXN0ID0gMTsKKwkJYXJndl9hcnJheV9wdXNoKCZycCwgIi0tcmVmbG9nIik7CisJfQorCWlmIChyZXZfbGlzdF9pbmRleCkgeworCQl1c2VfaW50ZXJuYWxfcmV2X2xpc3QgPSAxOworCQlhcmd2X2FycmF5X3B1c2goJnJwLCAiLS1pbmRleGVkLW9iamVjdHMiKTsKKwl9CisJaWYgKHJldl9saXN0X3VucGFja2VkKSB7CisJCXVzZV9pbnRlcm5hbF9yZXZfbGlzdCA9IDE7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcnAsICItLXVucGFja2VkIik7CisJfQorCisJaWYgKGV4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0cykgeworCQl1c2VfaW50ZXJuYWxfcmV2X2xpc3QgPSAxOworCQlmZXRjaF9pZl9taXNzaW5nID0gMDsKKwkJYXJndl9hcnJheV9wdXNoKCZycCwgIi0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIik7CisJfQorCWlmICh1bnBhY2tfdW5yZWFjaGFibGUgfHwga2VlcF91bnJlYWNoYWJsZSB8fCBwYWNrX2xvb3NlX3VucmVhY2hhYmxlKQorCQl1c2VfaW50ZXJuYWxfcmV2X2xpc3QgPSAxOworCisJaWYgKCFyZXVzZV9vYmplY3QpCisJCXJldXNlX2RlbHRhID0gMDsKKwlpZiAocGFja19jb21wcmVzc2lvbl9sZXZlbCA9PSAtMSkKKwkJcGFja19jb21wcmVzc2lvbl9sZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKKwllbHNlIGlmIChwYWNrX2NvbXByZXNzaW9uX2xldmVsIDwgMCB8fCBwYWNrX2NvbXByZXNzaW9uX2xldmVsID4gWl9CRVNUX0NPTVBSRVNTSU9OKQorCQlkaWUoXygiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiKSwgcGFja19jb21wcmVzc2lvbl9sZXZlbCk7CisKKwlpZiAoIWRlbHRhX3NlYXJjaF90aHJlYWRzKQkvKiAtLXRocmVhZHM9MCBtZWFucyBhdXRvZGV0ZWN0ICovCisJCWRlbHRhX3NlYXJjaF90aHJlYWRzID0gb25saW5lX2NwdXMoKTsKKworCWlmICghSEFWRV9USFJFQURTICYmIGRlbHRhX3NlYXJjaF90aHJlYWRzICE9IDEpCisJCXdhcm5pbmcoXygibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHMiKSk7CisJaWYgKCFwYWNrX3RvX3N0ZG91dCAmJiAhcGFja19zaXplX2xpbWl0KQorCQlwYWNrX3NpemVfbGltaXQgPSBwYWNrX3NpemVfbGltaXRfY2ZnOworCWlmIChwYWNrX3RvX3N0ZG91dCAmJiBwYWNrX3NpemVfbGltaXQpCisJCWRpZShfKCItLW1heC1wYWNrLXNpemUgY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYSBwYWNrIGZvciB0cmFuc2ZlciIpKTsKKwlpZiAocGFja19zaXplX2xpbWl0ICYmIHBhY2tfc2l6ZV9saW1pdCA8IDEwMjQqMTAyNCkgeworCQl3YXJuaW5nKF8oIm1pbmltdW0gcGFjayBzaXplIGxpbWl0IGlzIDEgTWlCIikpOworCQlwYWNrX3NpemVfbGltaXQgPSAxMDI0KjEwMjQ7CisJfQorCisJaWYgKCFwYWNrX3RvX3N0ZG91dCAmJiB0aGluKQorCQlkaWUoXygiLS10aGluIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGFuIGluZGV4YWJsZSBwYWNrIikpOworCisJaWYgKGtlZXBfdW5yZWFjaGFibGUgJiYgdW5wYWNrX3VucmVhY2hhYmxlKQorCQlkaWUoXygiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtLXVucGFjay11bnJlYWNoYWJsZSBhcmUgaW5jb21wYXRpYmxlIikpOworCWlmICghcmV2X2xpc3RfYWxsIHx8ICFyZXZfbGlzdF9yZWZsb2cgfHwgIXJldl9saXN0X2luZGV4KQorCQl1bnBhY2tfdW5yZWFjaGFibGVfZXhwaXJhdGlvbiA9IDA7CisKKwlpZiAoZmlsdGVyX29wdGlvbnMuY2hvaWNlKSB7CisJCWlmICghcGFja190b19zdGRvdXQpCisJCQlkaWUoXygiY2Fubm90IHVzZSAtLWZpbHRlciB3aXRob3V0IC0tc3Rkb3V0IikpOworCX0KKworCS8qCisJICogInNvZnQiIHJlYXNvbnMgbm90IHRvIHVzZSBiaXRtYXBzIC0gZm9yIG9uLWRpc2sgcmVwYWNrIGJ5IGRlZmF1bHQgd2Ugd2FudAorCSAqCisJICogLSB0byBwcm9kdWNlIGdvb2QgcGFjayAod2l0aCBiaXRtYXAgaW5kZXggbm90LXlldC1wYWNrZWQgb2JqZWN0cyBhcmUKKwkgKiAgIHBhY2tlZCBpbiBzdWJvcHRpbWFsIG9yZGVyKS4KKwkgKgorCSAqIC0gdG8gdXNlIG1vcmUgcm9idXN0IHBhY2stZ2VuZXJhdGlvbiBjb2RlcGF0aCAoYXZvaWRpbmcgcG9zc2libGUKKwkgKiAgIGJ1Z3MgaW4gYml0bWFwIGNvZGUgYW5kIHBvc3NpYmxlIGJpdG1hcCBpbmRleCBjb3JydXB0aW9uKS4KKwkgKi8KKwlpZiAoIXBhY2tfdG9fc3Rkb3V0KQorCQl1c2VfYml0bWFwX2luZGV4X2RlZmF1bHQgPSAwOworCisJaWYgKHVzZV9iaXRtYXBfaW5kZXggPCAwKQorCQl1c2VfYml0bWFwX2luZGV4ID0gdXNlX2JpdG1hcF9pbmRleF9kZWZhdWx0OworCisJLyogImhhcmQiIHJlYXNvbnMgbm90IHRvIHVzZSBiaXRtYXBzOyB0aGVzZSBqdXN0IHdvbid0IHdvcmsgYXQgYWxsICovCisJaWYgKCF1c2VfaW50ZXJuYWxfcmV2X2xpc3QgfHwgKCFwYWNrX3RvX3N0ZG91dCAmJiB3cml0ZV9iaXRtYXBfaW5kZXgpIHx8IGlzX3JlcG9zaXRvcnlfc2hhbGxvdyh0aGVfcmVwb3NpdG9yeSkpCisJCXVzZV9iaXRtYXBfaW5kZXggPSAwOworCisJaWYgKHBhY2tfdG9fc3Rkb3V0IHx8ICFyZXZfbGlzdF9hbGwpCisJCXdyaXRlX2JpdG1hcF9pbmRleCA9IDA7CisKKwlpZiAodXNlX2RlbHRhX2lzbGFuZHMpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcnAsICItLXRvcG8tb3JkZXIiKTsKKworCWlmIChwcm9ncmVzcyAmJiBhbGxfcHJvZ3Jlc3NfaW1wbGllZCkKKwkJcHJvZ3Jlc3MgPSAyOworCisJYWRkX2V4dHJhX2tlcHRfcGFja3MoJmtlZXBfcGFja19saXN0KTsKKwlpZiAoaWdub3JlX3BhY2tlZF9rZWVwX29uX2Rpc2spIHsKKwkJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJCWZvciAocCA9IGdldF9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnkpOyBwOyBwID0gcC0+bmV4dCkKKwkJCWlmIChwLT5wYWNrX2xvY2FsICYmIHAtPnBhY2tfa2VlcCkKKwkJCQlicmVhazsKKwkJaWYgKCFwKSAvKiBubyBrZWVwLWFibGUgcGFja3MgZm91bmQgKi8KKwkJCWlnbm9yZV9wYWNrZWRfa2VlcF9vbl9kaXNrID0gMDsKKwl9CisJaWYgKGxvY2FsKSB7CisJCS8qCisJCSAqIHVubGlrZSBpZ25vcmVfcGFja2VkX2tlZXBfb25fZGlzayBhYm92ZSwgd2UgZG8gbm90CisJCSAqIHdhbnQgdG8gdW5zZXQgImxvY2FsIiBiYXNlZCBvbiBsb29raW5nIGF0IHBhY2tzLCBhcworCQkgKiBpdCBhbHNvIGNvdmVycyBub24tbG9jYWwgb2JqZWN0cworCQkgKi8KKwkJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJCWZvciAocCA9IGdldF9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnkpOyBwOyBwID0gcC0+bmV4dCkgeworCQkJaWYgKCFwLT5wYWNrX2xvY2FsKSB7CisJCQkJaGF2ZV9ub25fbG9jYWxfcGFja3MgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJdHJhY2UyX3JlZ2lvbl9lbnRlcigicGFjay1vYmplY3RzIiwgImVudW1lcmF0ZS1vYmplY3RzIiwKKwkJCSAgICB0aGVfcmVwb3NpdG9yeSk7CisJcHJlcGFyZV9wYWNraW5nX2RhdGEodGhlX3JlcG9zaXRvcnksICZ0b19wYWNrKTsKKworCWlmIChwcm9ncmVzcykKKwkJcHJvZ3Jlc3Nfc3RhdGUgPSBzdGFydF9wcm9ncmVzcyhfKCJFbnVtZXJhdGluZyBvYmplY3RzIiksIDApOworCWlmICghdXNlX2ludGVybmFsX3Jldl9saXN0KQorCQlyZWFkX29iamVjdF9saXN0X2Zyb21fc3RkaW4oKTsKKwllbHNlIHsKKwkJZ2V0X29iamVjdF9saXN0KHJwLmFyZ2MsIHJwLmFyZ3YpOworCQlhcmd2X2FycmF5X2NsZWFyKCZycCk7CisJfQorCWNsZWFudXBfcHJlZmVycmVkX2Jhc2UoKTsKKwlpZiAoaW5jbHVkZV90YWcgJiYgbnJfcmVzdWx0KQorCQlmb3JfZWFjaF9yZWYoYWRkX3JlZl90YWcsIE5VTEwpOworCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzX3N0YXRlKTsKKwl0cmFjZTJfcmVnaW9uX2xlYXZlKCJwYWNrLW9iamVjdHMiLCAiZW51bWVyYXRlLW9iamVjdHMiLAorCQkJICAgIHRoZV9yZXBvc2l0b3J5KTsKKworCWlmIChub25fZW1wdHkgJiYgIW5yX3Jlc3VsdCkKKwkJcmV0dXJuIDA7CisJaWYgKG5yX3Jlc3VsdCkgeworCQl0cmFjZTJfcmVnaW9uX2VudGVyKCJwYWNrLW9iamVjdHMiLCAicHJlcGFyZS1wYWNrIiwKKwkJCQkgICAgdGhlX3JlcG9zaXRvcnkpOworCQlwcmVwYXJlX3BhY2sod2luZG93LCBkZXB0aCk7CisJCXRyYWNlMl9yZWdpb25fbGVhdmUoInBhY2stb2JqZWN0cyIsICJwcmVwYXJlLXBhY2siLAorCQkJCSAgICB0aGVfcmVwb3NpdG9yeSk7CisJfQorCisJdHJhY2UyX3JlZ2lvbl9lbnRlcigicGFjay1vYmplY3RzIiwgIndyaXRlLXBhY2stZmlsZSIsIHRoZV9yZXBvc2l0b3J5KTsKKwl3cml0ZV9wYWNrX2ZpbGUoKTsKKwl0cmFjZTJfcmVnaW9uX2xlYXZlKCJwYWNrLW9iamVjdHMiLCAid3JpdGUtcGFjay1maWxlIiwgdGhlX3JlcG9zaXRvcnkpOworCisJaWYgKHByb2dyZXNzKQorCQlmcHJpbnRmX2xuKHN0ZGVyciwKKwkJCSAgIF8oIlRvdGFsICUiUFJJdTMyIiAoZGVsdGEgJSJQUkl1MzIiKSwiCisJCQkgICAgICIgcmV1c2VkICUiUFJJdTMyIiAoZGVsdGEgJSJQUkl1MzIiKSwiCisJCQkgICAgICIgcGFjay1yZXVzZWQgJSJQUkl1MzIpLAorCQkJICAgd3JpdHRlbiwgd3JpdHRlbl9kZWx0YSwgcmV1c2VkLCByZXVzZWRfZGVsdGEsCisJCQkgICByZXVzZV9wYWNrZmlsZV9vYmplY3RzKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcGFjay1yZWR1bmRhbnQuYyBiL2J1aWx0aW4vcGFjay1yZWR1bmRhbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzhlMzQwCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9wYWNrLXJlZHVuZGFudC5jCkBAIC0wLDAgKzEsNjUzIEBACisvKgorKgorKiBDb3B5cmlnaHQgMjAwNSwgTHVrYXMgU2FuZHN0cm9tIDxsdWthc3NAZXRlay5jaGFsbWVycy5zZT4KKyoKKyogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIuCisqCisqLworCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorCisjZGVmaW5lIEJMS1NJWkUgNTEyCisKK3N0YXRpYyBjb25zdCBjaGFyIHBhY2tfcmVkdW5kYW50X3VzYWdlW10gPQorImdpdCBwYWNrLXJlZHVuZGFudCBbLS12ZXJib3NlXSBbLS1hbHQtb2RiXSAoLS1hbGwgfCA8ZmlsZW5hbWUucGFjaz4uLi4pIjsKKworc3RhdGljIGludCBsb2FkX2FsbF9wYWNrcywgdmVyYm9zZSwgYWx0X29kYjsKKworc3RydWN0IGxsaXN0X2l0ZW0geworCXN0cnVjdCBsbGlzdF9pdGVtICpuZXh0OworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKK307CitzdGF0aWMgc3RydWN0IGxsaXN0IHsKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqZnJvbnQ7CisJc3RydWN0IGxsaXN0X2l0ZW0gKmJhY2s7CisJc2l6ZV90IHNpemU7Cit9ICphbGxfb2JqZWN0czsgLyogYWxsIG9iamVjdHMgd2hpY2ggbXVzdCBiZSBwcmVzZW50IGluIGxvY2FsIHBhY2tmaWxlcyAqLworCitzdGF0aWMgc3RydWN0IHBhY2tfbGlzdCB7CisJc3RydWN0IHBhY2tfbGlzdCAqbmV4dDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjazsKKwlzdHJ1Y3QgbGxpc3QgKnVuaXF1ZV9vYmplY3RzOworCXN0cnVjdCBsbGlzdCAqcmVtYWluaW5nX29iamVjdHM7CisJc2l6ZV90IGFsbF9vYmplY3RzX3NpemU7Cit9ICpsb2NhbF9wYWNrcyA9IE5VTEwsICphbHRvZGJfcGFja3MgPSBOVUxMOworCitzdGF0aWMgc3RydWN0IGxsaXN0X2l0ZW0gKmZyZWVfbm9kZXM7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsbGlzdF9pdGVtX3B1dChzdHJ1Y3QgbGxpc3RfaXRlbSAqaXRlbSkKK3sKKwlpdGVtLT5uZXh0ID0gZnJlZV9ub2RlczsKKwlmcmVlX25vZGVzID0gaXRlbTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaXRlbSAqbGxpc3RfaXRlbV9nZXQodm9pZCkKK3sKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqbmV3X2l0ZW07CisJaWYgKCBmcmVlX25vZGVzICkgeworCQluZXdfaXRlbSA9IGZyZWVfbm9kZXM7CisJCWZyZWVfbm9kZXMgPSBmcmVlX25vZGVzLT5uZXh0OworCX0gZWxzZSB7CisJCWludCBpID0gMTsKKwkJQUxMT0NfQVJSQVkobmV3X2l0ZW0sIEJMS1NJWkUpOworCQlmb3IgKDsgaSA8IEJMS1NJWkU7IGkrKykKKwkJCWxsaXN0X2l0ZW1fcHV0KCZuZXdfaXRlbVtpXSk7CisJfQorCXJldHVybiBuZXdfaXRlbTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxsaXN0X2luaXQoc3RydWN0IGxsaXN0ICoqbGlzdCkKK3sKKwkqbGlzdCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBsbGlzdCkpOworCSgqbGlzdCktPmZyb250ID0gKCpsaXN0KS0+YmFjayA9IE5VTEw7CisJKCpsaXN0KS0+c2l6ZSA9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGxpc3QgKiBsbGlzdF9jb3B5KHN0cnVjdCBsbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgbGxpc3QgKnJldDsKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqbmV3X2l0ZW0sICpvbGRfaXRlbSwgKnByZXY7CisKKwlsbGlzdF9pbml0KCZyZXQpOworCisJaWYgKChyZXQtPnNpemUgPSBsaXN0LT5zaXplKSA9PSAwKQorCQlyZXR1cm4gcmV0OworCisJbmV3X2l0ZW0gPSByZXQtPmZyb250ID0gbGxpc3RfaXRlbV9nZXQoKTsKKwluZXdfaXRlbS0+b2lkID0gbGlzdC0+ZnJvbnQtPm9pZDsKKworCW9sZF9pdGVtID0gbGlzdC0+ZnJvbnQtPm5leHQ7CisJd2hpbGUgKG9sZF9pdGVtKSB7CisJCXByZXYgPSBuZXdfaXRlbTsKKwkJbmV3X2l0ZW0gPSBsbGlzdF9pdGVtX2dldCgpOworCQlwcmV2LT5uZXh0ID0gbmV3X2l0ZW07CisJCW5ld19pdGVtLT5vaWQgPSBvbGRfaXRlbS0+b2lkOworCQlvbGRfaXRlbSA9IG9sZF9pdGVtLT5uZXh0OworCX0KKwluZXdfaXRlbS0+bmV4dCA9IE5VTEw7CisJcmV0LT5iYWNrID0gbmV3X2l0ZW07CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9pdGVtICpsbGlzdF9pbnNlcnQoc3RydWN0IGxsaXN0ICpsaXN0LAorCQkJCQkgICAgICBzdHJ1Y3QgbGxpc3RfaXRlbSAqYWZ0ZXIsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqbmV3X2l0ZW0gPSBsbGlzdF9pdGVtX2dldCgpOworCW5ld19pdGVtLT5vaWQgPSBvaWQ7CisJbmV3X2l0ZW0tPm5leHQgPSBOVUxMOworCisJaWYgKGFmdGVyICE9IE5VTEwpIHsKKwkJbmV3X2l0ZW0tPm5leHQgPSBhZnRlci0+bmV4dDsKKwkJYWZ0ZXItPm5leHQgPSBuZXdfaXRlbTsKKwkJaWYgKGFmdGVyID09IGxpc3QtPmJhY2spCisJCQlsaXN0LT5iYWNrID0gbmV3X2l0ZW07CisJfSBlbHNlIHsvKiBpbnNlcnQgaW4gZnJvbnQgKi8KKwkJaWYgKGxpc3QtPnNpemUgPT0gMCkKKwkJCWxpc3QtPmJhY2sgPSBuZXdfaXRlbTsKKwkJZWxzZQorCQkJbmV3X2l0ZW0tPm5leHQgPSBsaXN0LT5mcm9udDsKKwkJbGlzdC0+ZnJvbnQgPSBuZXdfaXRlbTsKKwl9CisJbGlzdC0+c2l6ZSsrOworCXJldHVybiBuZXdfaXRlbTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaXRlbSAqbGxpc3RfaW5zZXJ0X2JhY2soc3RydWN0IGxsaXN0ICpsaXN0LAorCQkJCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXJldHVybiBsbGlzdF9pbnNlcnQobGlzdCwgbGlzdC0+YmFjaywgb2lkKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaXRlbSAqbGxpc3RfaW5zZXJ0X3NvcnRlZF91bmlxdWUoc3RydWN0IGxsaXN0ICpsaXN0LAorCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3QgbGxpc3RfaXRlbSAqaGludCkKK3sKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqcHJldiA9IE5VTEwsICpsOworCisJbCA9IChoaW50ID09IE5VTEwpID8gbGlzdC0+ZnJvbnQgOiBoaW50OworCXdoaWxlIChsKSB7CisJCWludCBjbXAgPSBvaWRjbXAobC0+b2lkLCBvaWQpOworCQlpZiAoY21wID4gMCkgeyAvKiB3ZSBpbnNlcnQgYmVmb3JlIHRoaXMgZW50cnkgKi8KKwkJCXJldHVybiBsbGlzdF9pbnNlcnQobGlzdCwgcHJldiwgb2lkKTsKKwkJfQorCQlpZiAoIWNtcCkgeyAvKiBhbHJlYWR5IGV4aXN0cyAqLworCQkJcmV0dXJuIGw7CisJCX0KKwkJcHJldiA9IGw7CisJCWwgPSBsLT5uZXh0OworCX0KKwkvKiBpbnNlcnQgYXQgdGhlIGVuZCAqLworCXJldHVybiBsbGlzdF9pbnNlcnRfYmFjayhsaXN0LCBvaWQpOworfQorCisvKiByZXR1cm5zIGEgcG9pbnRlciB0byBhbiBpdGVtIGluIGZyb250IG9mIHNoYTEgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2l0ZW0gKiBsbGlzdF9zb3J0ZWRfcmVtb3ZlKHN0cnVjdCBsbGlzdCAqbGlzdCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3QgbGxpc3RfaXRlbSAqaGludCkKK3sKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqcHJldiwgKmw7CisKK3JlZG9fZnJvbV9zdGFydDoKKwlsID0gKGhpbnQgPT0gTlVMTCkgPyBsaXN0LT5mcm9udCA6IGhpbnQ7CisJcHJldiA9IE5VTEw7CisJd2hpbGUgKGwpIHsKKwkJY29uc3QgaW50IGNtcCA9IG9pZGNtcChsLT5vaWQsIG9pZCk7CisJCWlmIChjbXAgPiAwKSAvKiBub3QgaW4gbGlzdCwgc2luY2Ugc29ydGVkICovCisJCQlyZXR1cm4gcHJldjsKKwkJaWYgKCFjbXApIHsgLyogZm91bmQgKi8KKwkJCWlmIChwcmV2ID09IE5VTEwpIHsKKwkJCQlpZiAoaGludCAhPSBOVUxMICYmIGhpbnQgIT0gbGlzdC0+ZnJvbnQpIHsKKwkJCQkJLyogd2UgZG9uJ3Qga25vdyB0aGUgcHJldmlvdXMgZWxlbWVudCAqLworCQkJCQloaW50ID0gTlVMTDsKKwkJCQkJZ290byByZWRvX2Zyb21fc3RhcnQ7CisJCQkJfQorCQkJCWxpc3QtPmZyb250ID0gbC0+bmV4dDsKKwkJCX0gZWxzZQorCQkJCXByZXYtPm5leHQgPSBsLT5uZXh0OworCQkJaWYgKGwgPT0gbGlzdC0+YmFjaykKKwkJCQlsaXN0LT5iYWNrID0gcHJldjsKKwkJCWxsaXN0X2l0ZW1fcHV0KGwpOworCQkJbGlzdC0+c2l6ZS0tOworCQkJcmV0dXJuIHByZXY7CisJCX0KKwkJcHJldiA9IGw7CisJCWwgPSBsLT5uZXh0OworCX0KKwlyZXR1cm4gcHJldjsKK30KKworLyogY29tcHV0ZXMgQVxCICovCitzdGF0aWMgdm9pZCBsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKHN0cnVjdCBsbGlzdCAqQSwKKwkJCQkgICAgIHN0cnVjdCBsbGlzdCAqQikKK3sKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqaGludCwgKmI7CisKKwloaW50ID0gTlVMTDsKKwliID0gQi0+ZnJvbnQ7CisKKwl3aGlsZSAoYikgeworCQloaW50ID0gbGxpc3Rfc29ydGVkX3JlbW92ZShBLCBiLT5vaWQsIGhpbnQpOworCQliID0gYi0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhY2tfbGlzdCAqIHBhY2tfbGlzdF9pbnNlcnQoc3RydWN0IHBhY2tfbGlzdCAqKnBsLAorCQkJCQkgICBzdHJ1Y3QgcGFja19saXN0ICplbnRyeSkKK3sKKwlzdHJ1Y3QgcGFja19saXN0ICpwID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBhY2tfbGlzdCkpOworCW1lbWNweShwLCBlbnRyeSwgc2l6ZW9mKHN0cnVjdCBwYWNrX2xpc3QpKTsKKwlwLT5uZXh0ID0gKnBsOworCSpwbCA9IHA7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHBhY2tfbGlzdF9zaXplKHN0cnVjdCBwYWNrX2xpc3QgKnBsKQoreworCXNpemVfdCByZXQgPSAwOworCXdoaWxlIChwbCkgeworCQlyZXQrKzsKKwkJcGwgPSBwbC0+bmV4dDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwYWNrX2xpc3QgKiBwYWNrX2xpc3RfZGlmZmVyZW5jZShjb25zdCBzdHJ1Y3QgcGFja19saXN0ICpBLAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBhY2tfbGlzdCAqQikKK3sKKwlzdHJ1Y3QgcGFja19saXN0ICpyZXQ7CisJY29uc3Qgc3RydWN0IHBhY2tfbGlzdCAqcGw7CisKKwlpZiAoQSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXBsID0gQjsKKwl3aGlsZSAocGwgIT0gTlVMTCkgeworCQlpZiAoQS0+cGFjayA9PSBwbC0+cGFjaykKKwkJCXJldHVybiBwYWNrX2xpc3RfZGlmZmVyZW5jZShBLT5uZXh0LCBCKTsKKwkJcGwgPSBwbC0+bmV4dDsKKwl9CisJcmV0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBhY2tfbGlzdCkpOworCW1lbWNweShyZXQsIEEsIHNpemVvZihzdHJ1Y3QgcGFja19saXN0KSk7CisJcmV0LT5uZXh0ID0gcGFja19saXN0X2RpZmZlcmVuY2UoQS0+bmV4dCwgQik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY21wX3R3b19wYWNrcyhzdHJ1Y3QgcGFja19saXN0ICpwMSwgc3RydWN0IHBhY2tfbGlzdCAqcDIpCit7CisJdW5zaWduZWQgbG9uZyBwMV9vZmYgPSAwLCBwMl9vZmYgPSAwLCBwMV9zdGVwLCBwMl9zdGVwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAxX2Jhc2UsICpwMl9iYXNlOworCXN0cnVjdCBsbGlzdF9pdGVtICpwMV9oaW50ID0gTlVMTCwgKnAyX2hpbnQgPSBOVUxMOworCWNvbnN0IHVuc2lnbmVkIGludCBoYXNoc3ogPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKworCWlmICghcDEtPnVuaXF1ZV9vYmplY3RzKQorCQlwMS0+dW5pcXVlX29iamVjdHMgPSBsbGlzdF9jb3B5KHAxLT5yZW1haW5pbmdfb2JqZWN0cyk7CisJaWYgKCFwMi0+dW5pcXVlX29iamVjdHMpCisJCXAyLT51bmlxdWVfb2JqZWN0cyA9IGxsaXN0X2NvcHkocDItPnJlbWFpbmluZ19vYmplY3RzKTsKKworCXAxX2Jhc2UgPSBwMS0+cGFjay0+aW5kZXhfZGF0YTsKKwlwMl9iYXNlID0gcDItPnBhY2stPmluZGV4X2RhdGE7CisJcDFfYmFzZSArPSAyNTYgKiA0ICsgKChwMS0+cGFjay0+aW5kZXhfdmVyc2lvbiA8IDIpID8gNCA6IDgpOworCXAyX2Jhc2UgKz0gMjU2ICogNCArICgocDItPnBhY2stPmluZGV4X3ZlcnNpb24gPCAyKSA/IDQgOiA4KTsKKwlwMV9zdGVwID0gaGFzaHN6ICsgKChwMS0+cGFjay0+aW5kZXhfdmVyc2lvbiA8IDIpID8gNCA6IDApOworCXAyX3N0ZXAgPSBoYXNoc3ogKyAoKHAyLT5wYWNrLT5pbmRleF92ZXJzaW9uIDwgMikgPyA0IDogMCk7CisKKwl3aGlsZSAocDFfb2ZmIDwgcDEtPnBhY2stPm51bV9vYmplY3RzICogcDFfc3RlcCAmJgorCSAgICAgICBwMl9vZmYgPCBwMi0+cGFjay0+bnVtX29iamVjdHMgKiBwMl9zdGVwKQorCXsKKwkJY29uc3QgaW50IGNtcCA9IGhhc2hjbXAocDFfYmFzZSArIHAxX29mZiwgcDJfYmFzZSArIHAyX29mZik7CisJCS8qIGNtcCB+IHAxIC0gcDIgKi8KKwkJaWYgKGNtcCA9PSAwKSB7CisJCQlwMV9oaW50ID0gbGxpc3Rfc29ydGVkX3JlbW92ZShwMS0+dW5pcXVlX29iamVjdHMsCisJCQkJCShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICopKHAxX2Jhc2UgKyBwMV9vZmYpLAorCQkJCQlwMV9oaW50KTsKKwkJCXAyX2hpbnQgPSBsbGlzdF9zb3J0ZWRfcmVtb3ZlKHAyLT51bmlxdWVfb2JqZWN0cywKKwkJCQkJKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKikocDFfYmFzZSArIHAxX29mZiksCisJCQkJCXAyX2hpbnQpOworCQkJcDFfb2ZmICs9IHAxX3N0ZXA7CisJCQlwMl9vZmYgKz0gcDJfc3RlcDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjbXAgPCAwKSB7IC8qIHAxIGhhcyB0aGUgb2JqZWN0LCBwMiBkb2Vzbid0ICovCisJCQlwMV9vZmYgKz0gcDFfc3RlcDsKKwkJfSBlbHNlIHsgLyogcDIgaGFzIHRoZSBvYmplY3QsIHAxIGRvZXNuJ3QgKi8KKwkJCXAyX29mZiArPSBwMl9zdGVwOworCQl9CisJfQorfQorCitzdGF0aWMgc2l6ZV90IHNpemVvZl91bmlvbihzdHJ1Y3QgcGFja2VkX2dpdCAqcDEsIHN0cnVjdCBwYWNrZWRfZ2l0ICpwMikKK3sKKwlzaXplX3QgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHAxX29mZiA9IDAsIHAyX29mZiA9IDAsIHAxX3N0ZXAsIHAyX3N0ZXA7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcDFfYmFzZSwgKnAyX2Jhc2U7CisJY29uc3QgdW5zaWduZWQgaW50IGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCisJcDFfYmFzZSA9IHAxLT5pbmRleF9kYXRhOworCXAyX2Jhc2UgPSBwMi0+aW5kZXhfZGF0YTsKKwlwMV9iYXNlICs9IDI1NiAqIDQgKyAoKHAxLT5pbmRleF92ZXJzaW9uIDwgMikgPyA0IDogOCk7CisJcDJfYmFzZSArPSAyNTYgKiA0ICsgKChwMi0+aW5kZXhfdmVyc2lvbiA8IDIpID8gNCA6IDgpOworCXAxX3N0ZXAgPSBoYXNoc3ogKyAoKHAxLT5pbmRleF92ZXJzaW9uIDwgMikgPyA0IDogMCk7CisJcDJfc3RlcCA9IGhhc2hzeiArICgocDItPmluZGV4X3ZlcnNpb24gPCAyKSA/IDQgOiAwKTsKKworCXdoaWxlIChwMV9vZmYgPCBwMS0+bnVtX29iamVjdHMgKiBwMV9zdGVwICYmCisJICAgICAgIHAyX29mZiA8IHAyLT5udW1fb2JqZWN0cyAqIHAyX3N0ZXApCisJeworCQlpbnQgY21wID0gaGFzaGNtcChwMV9iYXNlICsgcDFfb2ZmLCBwMl9iYXNlICsgcDJfb2ZmKTsKKwkJLyogY21wIH4gcDEgLSBwMiAqLworCQlpZiAoY21wID09IDApIHsKKwkJCXJldCsrOworCQkJcDFfb2ZmICs9IHAxX3N0ZXA7CisJCQlwMl9vZmYgKz0gcDJfc3RlcDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjbXAgPCAwKSB7IC8qIHAxIGhhcyB0aGUgb2JqZWN0LCBwMiBkb2Vzbid0ICovCisJCQlwMV9vZmYgKz0gcDFfc3RlcDsKKwkJfSBlbHNlIHsgLyogcDIgaGFzIHRoZSBvYmplY3QsIHAxIGRvZXNuJ3QgKi8KKwkJCXAyX29mZiArPSBwMl9zdGVwOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIGFub3RoZXIgTyhuXjIpIGZ1bmN0aW9uIC4uLiAqLworc3RhdGljIHNpemVfdCBnZXRfcGFja19yZWR1bmRhbmN5KHN0cnVjdCBwYWNrX2xpc3QgKnBsKQoreworCXN0cnVjdCBwYWNrX2xpc3QgKnN1YnNldDsKKwlzaXplX3QgcmV0ID0gMDsKKworCWlmIChwbCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgoc3Vic2V0ID0gcGwtPm5leHQpKSB7CisJCXdoaWxlIChzdWJzZXQpIHsKKwkJCXJldCArPSBzaXplb2ZfdW5pb24ocGwtPnBhY2ssIHN1YnNldC0+cGFjayk7CisJCQlzdWJzZXQgPSBzdWJzZXQtPm5leHQ7CisJCX0KKwkJcGwgPSBwbC0+bmV4dDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBvZmZfdCBwYWNrX3NldF9ieXRlY291bnQoc3RydWN0IHBhY2tfbGlzdCAqcGwpCit7CisJb2ZmX3QgcmV0ID0gMDsKKwl3aGlsZSAocGwpIHsKKwkJcmV0ICs9IHBsLT5wYWNrLT5wYWNrX3NpemU7CisJCXJldCArPSBwbC0+cGFjay0+aW5kZXhfc2l6ZTsKKwkJcGwgPSBwbC0+bmV4dDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbXBfcmVtYWluaW5nX29iamVjdHMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwlzdHJ1Y3QgcGFja19saXN0ICpwbF9hID0gKigoc3RydWN0IHBhY2tfbGlzdCAqKilhKTsKKwlzdHJ1Y3QgcGFja19saXN0ICpwbF9iID0gKigoc3RydWN0IHBhY2tfbGlzdCAqKiliKTsKKworCWlmIChwbF9hLT5yZW1haW5pbmdfb2JqZWN0cy0+c2l6ZSA9PSBwbF9iLT5yZW1haW5pbmdfb2JqZWN0cy0+c2l6ZSkgeworCQkvKiBoYXZlIHRoZSBzYW1lIHJlbWFpbmluZ19vYmplY3RzLCBiaWcgcGFjayBmaXJzdCAqLworCQlpZiAocGxfYS0+YWxsX29iamVjdHNfc2l6ZSA9PSBwbF9iLT5hbGxfb2JqZWN0c19zaXplKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYgKHBsX2EtPmFsbF9vYmplY3RzX3NpemUgPCBwbF9iLT5hbGxfb2JqZWN0c19zaXplKQorCQkJcmV0dXJuIDE7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKHBsX2EtPnJlbWFpbmluZ19vYmplY3RzLT5zaXplIDwgcGxfYi0+cmVtYWluaW5nX29iamVjdHMtPnNpemUpIHsKKwkJLyogc29ydCBieSByZW1haW5pbmcgb2JqZWN0cywgbW9yZSBvYmplY3RzIGZpcnN0ICovCisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJldHVybiAtMTsKKwl9Cit9CisKKy8qIFNvcnQgcGFja19saXN0LCBncmVhdGVyIHNpemUgb2YgcmVtYWluaW5nX29iamVjdHMgZmlyc3QgKi8KK3N0YXRpYyB2b2lkIHNvcnRfcGFja19saXN0KHN0cnVjdCBwYWNrX2xpc3QgKipwbCkKK3sKKwlzdHJ1Y3QgcGFja19saXN0ICoqYXJ5LCAqcDsKKwlpbnQgaTsKKwlzaXplX3QgbiA9IHBhY2tfbGlzdF9zaXplKCpwbCk7CisKKwlpZiAobiA8IDIpCisJCXJldHVybjsKKworCS8qIHByZXBhcmUgYW4gYXJyYXkgb2YgcGFja2VkX2xpc3QgZm9yIGVhc2llciBzb3J0aW5nICovCisJYXJ5ID0geGNhbGxvYyhuLCBzaXplb2Yoc3RydWN0IHBhY2tfbGlzdCAqKSk7CisJZm9yIChuID0gMCwgcCA9ICpwbDsgcDsgcCA9IHAtPm5leHQpCisJCWFyeVtuKytdID0gcDsKKworCVFTT1JUKGFyeSwgbiwgY21wX3JlbWFpbmluZ19vYmplY3RzKTsKKworCS8qIGxpbmsgdGhlbSBiYWNrIGFnYWluICovCisJZm9yIChpID0gMDsgaSA8IG4gLSAxOyBpKyspCisJCWFyeVtpXS0+bmV4dCA9IGFyeVtpICsgMV07CisJYXJ5W24gLSAxXS0+bmV4dCA9IE5VTEw7CisJKnBsID0gYXJ5WzBdOworCisJZnJlZShhcnkpOworfQorCisKK3N0YXRpYyB2b2lkIG1pbmltaXplKHN0cnVjdCBwYWNrX2xpc3QgKiptaW4pCit7CisJc3RydWN0IHBhY2tfbGlzdCAqcGwsICp1bmlxdWUgPSBOVUxMLCAqbm9uX3VuaXF1ZSA9IE5VTEw7CisJc3RydWN0IGxsaXN0ICptaXNzaW5nLCAqdW5pcXVlX3BhY2tfb2JqZWN0czsKKworCXBsID0gbG9jYWxfcGFja3M7CisJd2hpbGUgKHBsKSB7CisJCWlmIChwbC0+dW5pcXVlX29iamVjdHMtPnNpemUpCisJCQlwYWNrX2xpc3RfaW5zZXJ0KCZ1bmlxdWUsIHBsKTsKKwkJZWxzZQorCQkJcGFja19saXN0X2luc2VydCgmbm9uX3VuaXF1ZSwgcGwpOworCQlwbCA9IHBsLT5uZXh0OworCX0KKwkvKiBmaW5kIG91dCB3aGljaCBvYmplY3RzIGFyZSBtaXNzaW5nIGZyb20gdGhlIHNldCBvZiB1bmlxdWUgcGFja3MgKi8KKwltaXNzaW5nID0gbGxpc3RfY29weShhbGxfb2JqZWN0cyk7CisJcGwgPSB1bmlxdWU7CisJd2hpbGUgKHBsKSB7CisJCWxsaXN0X3NvcnRlZF9kaWZmZXJlbmNlX2lucGxhY2UobWlzc2luZywgcGwtPnJlbWFpbmluZ19vYmplY3RzKTsKKwkJcGwgPSBwbC0+bmV4dDsKKwl9CisKKwkqbWluID0gdW5pcXVlOworCisJLyogcmV0dXJuIGlmIHRoZXJlIGFyZSBubyBvYmplY3RzIG1pc3NpbmcgZnJvbSB0aGUgdW5pcXVlIHNldCAqLworCWlmIChtaXNzaW5nLT5zaXplID09IDApIHsKKwkJZnJlZShtaXNzaW5nKTsKKwkJcmV0dXJuOworCX0KKworCXVuaXF1ZV9wYWNrX29iamVjdHMgPSBsbGlzdF9jb3B5KGFsbF9vYmplY3RzKTsKKwlsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKHVuaXF1ZV9wYWNrX29iamVjdHMsIG1pc3NpbmcpOworCisJLyogcmVtb3ZlIHVuaXF1ZSBwYWNrIG9iamVjdHMgZnJvbSB0aGUgbm9uX3VuaXF1ZSBwYWNrcyAqLworCXBsID0gbm9uX3VuaXF1ZTsKKwl3aGlsZSAocGwpIHsKKwkJbGxpc3Rfc29ydGVkX2RpZmZlcmVuY2VfaW5wbGFjZShwbC0+cmVtYWluaW5nX29iamVjdHMsIHVuaXF1ZV9wYWNrX29iamVjdHMpOworCQlwbCA9IHBsLT5uZXh0OworCX0KKworCXdoaWxlIChub25fdW5pcXVlKSB7CisJCS8qIHNvcnQgdGhlIG5vbl91bmlxdWUgcGFja3MsIGdyZWF0ZXIgc2l6ZSBvZiByZW1haW5pbmdfb2JqZWN0cyBmaXJzdCAqLworCQlzb3J0X3BhY2tfbGlzdCgmbm9uX3VuaXF1ZSk7CisJCWlmIChub25fdW5pcXVlLT5yZW1haW5pbmdfb2JqZWN0cy0+c2l6ZSA9PSAwKQorCQkJYnJlYWs7CisKKwkJcGFja19saXN0X2luc2VydChtaW4sIG5vbl91bmlxdWUpOworCisJCWZvciAocGwgPSBub25fdW5pcXVlLT5uZXh0OyBwbCAmJiBwbC0+cmVtYWluaW5nX29iamVjdHMtPnNpemUgPiAwOyAgcGwgPSBwbC0+bmV4dCkKKwkJCWxsaXN0X3NvcnRlZF9kaWZmZXJlbmNlX2lucGxhY2UocGwtPnJlbWFpbmluZ19vYmplY3RzLCBub25fdW5pcXVlLT5yZW1haW5pbmdfb2JqZWN0cyk7CisKKwkJbm9uX3VuaXF1ZSA9IG5vbl91bmlxdWUtPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2FkX2FsbF9vYmplY3RzKHZvaWQpCit7CisJc3RydWN0IHBhY2tfbGlzdCAqcGwgPSBsb2NhbF9wYWNrczsKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqaGludCwgKmw7CisKKwlsbGlzdF9pbml0KCZhbGxfb2JqZWN0cyk7CisKKwl3aGlsZSAocGwpIHsKKwkJaGludCA9IE5VTEw7CisJCWwgPSBwbC0+cmVtYWluaW5nX29iamVjdHMtPmZyb250OworCQl3aGlsZSAobCkgeworCQkJaGludCA9IGxsaXN0X2luc2VydF9zb3J0ZWRfdW5pcXVlKGFsbF9vYmplY3RzLAorCQkJCQkJCSAgbC0+b2lkLCBoaW50KTsKKwkJCWwgPSBsLT5uZXh0OworCQl9CisJCXBsID0gcGwtPm5leHQ7CisJfQorCS8qIHJlbW92ZSBvYmplY3RzIHByZXNlbnQgaW4gcmVtb3RlIHBhY2tzICovCisJcGwgPSBhbHRvZGJfcGFja3M7CisJd2hpbGUgKHBsKSB7CisJCWxsaXN0X3NvcnRlZF9kaWZmZXJlbmNlX2lucGxhY2UoYWxsX29iamVjdHMsIHBsLT5yZW1haW5pbmdfb2JqZWN0cyk7CisJCXBsID0gcGwtPm5leHQ7CisJfQorfQorCisvKiB0aGlzIHNjYWxlcyBsaWtlIE8obl4yKSAqLworc3RhdGljIHZvaWQgY21wX2xvY2FsX3BhY2tzKHZvaWQpCit7CisJc3RydWN0IHBhY2tfbGlzdCAqc3Vic2V0LCAqcGwgPSBsb2NhbF9wYWNrczsKKworCXdoaWxlICgoc3Vic2V0ID0gcGwpKSB7CisJCXdoaWxlICgoc3Vic2V0ID0gc3Vic2V0LT5uZXh0KSkKKwkJCWNtcF90d29fcGFja3MocGwsIHN1YnNldCk7CisJCXBsID0gcGwtPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBzY2FuX2FsdF9vZGJfcGFja3Modm9pZCkKK3sKKwlzdHJ1Y3QgcGFja19saXN0ICpsb2NhbCwgKmFsdDsKKworCWFsdCA9IGFsdG9kYl9wYWNrczsKKwl3aGlsZSAoYWx0KSB7CisJCWxvY2FsID0gbG9jYWxfcGFja3M7CisJCXdoaWxlIChsb2NhbCkgeworCQkJbGxpc3Rfc29ydGVkX2RpZmZlcmVuY2VfaW5wbGFjZShsb2NhbC0+cmVtYWluaW5nX29iamVjdHMsCisJCQkJCQkJYWx0LT5yZW1haW5pbmdfb2JqZWN0cyk7CisJCQlsb2NhbCA9IGxvY2FsLT5uZXh0OworCQl9CisJCWFsdCA9IGFsdC0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFja19saXN0ICogYWRkX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJc3RydWN0IHBhY2tfbGlzdCBsOworCXVuc2lnbmVkIGxvbmcgb2ZmID0gMCwgc3RlcDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlOworCisJaWYgKCFwLT5wYWNrX2xvY2FsICYmICEoYWx0X29kYiB8fCB2ZXJib3NlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlsLnBhY2sgPSBwOworCWxsaXN0X2luaXQoJmwucmVtYWluaW5nX29iamVjdHMpOworCisJaWYgKG9wZW5fcGFja19pbmRleChwKSkKKwkJcmV0dXJuIE5VTEw7CisKKwliYXNlID0gcC0+aW5kZXhfZGF0YTsKKwliYXNlICs9IDI1NiAqIDQgKyAoKHAtPmluZGV4X3ZlcnNpb24gPCAyKSA/IDQgOiA4KTsKKwlzdGVwID0gdGhlX2hhc2hfYWxnby0+cmF3c3ogKyAoKHAtPmluZGV4X3ZlcnNpb24gPCAyKSA/IDQgOiAwKTsKKwl3aGlsZSAob2ZmIDwgcC0+bnVtX29iamVjdHMgKiBzdGVwKSB7CisJCWxsaXN0X2luc2VydF9iYWNrKGwucmVtYWluaW5nX29iamVjdHMsIChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICopKGJhc2UgKyBvZmYpKTsKKwkJb2ZmICs9IHN0ZXA7CisJfQorCWwuYWxsX29iamVjdHNfc2l6ZSA9IGwucmVtYWluaW5nX29iamVjdHMtPnNpemU7CisJbC51bmlxdWVfb2JqZWN0cyA9IE5VTEw7CisJaWYgKHAtPnBhY2tfbG9jYWwpCisJCXJldHVybiBwYWNrX2xpc3RfaW5zZXJ0KCZsb2NhbF9wYWNrcywgJmwpOworCWVsc2UKKwkJcmV0dXJuIHBhY2tfbGlzdF9pbnNlcnQoJmFsdG9kYl9wYWNrcywgJmwpOworfQorCitzdGF0aWMgc3RydWN0IHBhY2tfbGlzdCAqIGFkZF9wYWNrX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBnZXRfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5KTsKKworCWlmIChzdHJsZW4oZmlsZW5hbWUpIDwgNDApCisJCWRpZSgiQmFkIHBhY2sgZmlsZW5hbWU6ICVzIiwgZmlsZW5hbWUpOworCisJd2hpbGUgKHApIHsKKwkJaWYgKHN0cnN0cihwLT5wYWNrX25hbWUsIGZpbGVuYW1lKSkKKwkJCXJldHVybiBhZGRfcGFjayhwKTsKKwkJcCA9IHAtPm5leHQ7CisJfQorCWRpZSgiRmlsZW5hbWUgJXMgbm90IGZvdW5kIGluIHBhY2tlZF9naXQiLCBmaWxlbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfYWxsKHZvaWQpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBnZXRfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5KTsKKworCXdoaWxlIChwKSB7CisJCWFkZF9wYWNrKHApOworCQlwID0gcC0+bmV4dDsKKwl9Cit9CisKK2ludCBjbWRfcGFja19yZWR1bmRhbnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJc3RydWN0IHBhY2tfbGlzdCAqbWluID0gTlVMTCwgKnJlZCwgKnBsOworCXN0cnVjdCBsbGlzdCAqaWdub3JlOworCXN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwljaGFyIGJ1ZltHSVRfTUFYX0hFWFNaICsgMl07IC8qIGhleCBoYXNoICsgXG4gKyBcMCAqLworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZShwYWNrX3JlZHVuZGFudF91c2FnZSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWlmICghc3RyY21wKGFyZywgIi0tIikpIHsKKwkJCWkrKzsKKwkJCWJyZWFrOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tYWxsIikpIHsKKwkJCWxvYWRfYWxsX3BhY2tzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tdmVyYm9zZSIpKSB7CisJCQl2ZXJib3NlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tYWx0LW9kYiIpKSB7CisJCQlhbHRfb2RiID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgqYXJnID09ICctJykKKwkJCXVzYWdlKHBhY2tfcmVkdW5kYW50X3VzYWdlKTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJaWYgKGxvYWRfYWxsX3BhY2tzKQorCQlsb2FkX2FsbCgpOworCWVsc2UKKwkJd2hpbGUgKCooYXJndiArIGkpICE9IE5VTEwpCisJCQlhZGRfcGFja19maWxlKCooYXJndiArIGkrKykpOworCisJaWYgKGxvY2FsX3BhY2tzID09IE5VTEwpCisJCWRpZSgiWmVybyBwYWNrcyBmb3VuZCEiKTsKKworCWxvYWRfYWxsX29iamVjdHMoKTsKKworCWlmIChhbHRfb2RiKQorCQlzY2FuX2FsdF9vZGJfcGFja3MoKTsKKworCS8qIGlnbm9yZSBvYmplY3RzIGdpdmVuIG9uIHN0ZGluICovCisJbGxpc3RfaW5pdCgmaWdub3JlKTsKKwlpZiAoIWlzYXR0eSgwKSkgeworCQl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pKSB7CisJCQlvaWQgPSB4bWFsbG9jKHNpemVvZigqb2lkKSk7CisJCQlpZiAoZ2V0X29pZF9oZXgoYnVmLCBvaWQpKQorCQkJCWRpZSgiQmFkIG9iamVjdCBJRCBvbiBzdGRpbjogJXMiLCBidWYpOworCQkJbGxpc3RfaW5zZXJ0X3NvcnRlZF91bmlxdWUoaWdub3JlLCBvaWQsIE5VTEwpOworCQl9CisJfQorCWxsaXN0X3NvcnRlZF9kaWZmZXJlbmNlX2lucGxhY2UoYWxsX29iamVjdHMsIGlnbm9yZSk7CisJcGwgPSBsb2NhbF9wYWNrczsKKwl3aGlsZSAocGwpIHsKKwkJbGxpc3Rfc29ydGVkX2RpZmZlcmVuY2VfaW5wbGFjZShwbC0+cmVtYWluaW5nX29iamVjdHMsIGlnbm9yZSk7CisJCXBsID0gcGwtPm5leHQ7CisJfQorCisJY21wX2xvY2FsX3BhY2tzKCk7CisKKwltaW5pbWl6ZSgmbWluKTsKKworCWlmICh2ZXJib3NlKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVGhlcmUgYXJlICVsdSBwYWNrcyBhdmFpbGFibGUgaW4gYWx0LW9kYnMuXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpcGFja19saXN0X3NpemUoYWx0b2RiX3BhY2tzKSk7CisJCWZwcmludGYoc3RkZXJyLCAiVGhlIHNtYWxsZXN0IChieXRld2lzZSkgc2V0IG9mIHBhY2tzIGlzOlxuIik7CisJCXBsID0gbWluOworCQl3aGlsZSAocGwpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiXHQlc1xuIiwgcGwtPnBhY2stPnBhY2tfbmFtZSk7CisJCQlwbCA9IHBsLT5uZXh0OworCQl9CisJCWZwcmludGYoc3RkZXJyLCAiY29udGFpbmluZyAlbHUgZHVwbGljYXRlIG9iamVjdHMgIgorCQkJCSJ3aXRoIGEgdG90YWwgc2l6ZSBvZiAlbHVrYi5cbiIsCisJCQkodW5zaWduZWQgbG9uZylnZXRfcGFja19yZWR1bmRhbmN5KG1pbiksCisJCQkodW5zaWduZWQgbG9uZylwYWNrX3NldF9ieXRlY291bnQobWluKS8xMDI0KTsKKwkJZnByaW50ZihzdGRlcnIsICJBIHRvdGFsIG9mICVsdSB1bmlxdWUgb2JqZWN0cyB3ZXJlIGNvbnNpZGVyZWQuXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpYWxsX29iamVjdHMtPnNpemUpOworCQlmcHJpbnRmKHN0ZGVyciwgIlJlZHVuZGFudCBwYWNrcyAod2l0aCBpbmRleGVzKTpcbiIpOworCX0KKwlwbCA9IHJlZCA9IHBhY2tfbGlzdF9kaWZmZXJlbmNlKGxvY2FsX3BhY2tzLCBtaW4pOworCXdoaWxlIChwbCkgeworCQlwcmludGYoIiVzXG4lc1xuIiwKKwkJICAgICAgIHNoYTFfcGFja19pbmRleF9uYW1lKHBsLT5wYWNrLT5oYXNoKSwKKwkJICAgICAgIHBsLT5wYWNrLT5wYWNrX25hbWUpOworCQlwbCA9IHBsLT5uZXh0OworCX0KKwlpZiAodmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICIlbHVNQiBvZiByZWR1bmRhbnQgcGFja3MgaW4gdG90YWwuXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpcGFja19zZXRfYnl0ZWNvdW50KHJlZCkvKDEwMjQqMTAyNCkpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3BhY2stcmVmcy5jIGIvYnVpbHRpbi9wYWNrLXJlZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmJkNWMzCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9wYWNrLXJlZnMuYwpAQCAtMCwwICsxLDI0IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IHBhY2tfcmVmc191c2FnZVtdID0geworCU5fKCJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIiksCisJTlVMTAorfTsKKworaW50IGNtZF9wYWNrX3JlZnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gUEFDS19SRUZTX1BSVU5FOworCXN0cnVjdCBvcHRpb24gb3B0c1tdID0geworCQlPUFRfQklUKDAsICJhbGwiLCAgICZmbGFncywgTl8oInBhY2sgZXZlcnl0aGluZyIpLCBQQUNLX1JFRlNfQUxMKSwKKwkJT1BUX0JJVCgwLCAicHJ1bmUiLCAmZmxhZ3MsIE5fKCJwcnVuZSBsb29zZSByZWZzIChkZWZhdWx0KSIpLCBQQUNLX1JFRlNfUFJVTkUpLAorCQlPUFRfRU5EKCksCisJfTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJaWYgKHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRzLCBwYWNrX3JlZnNfdXNhZ2UsIDApKQorCQl1c2FnZV93aXRoX29wdGlvbnMocGFja19yZWZzX3VzYWdlLCBvcHRzKTsKKwlyZXR1cm4gcmVmc19wYWNrX3JlZnMoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwgZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9wYXRjaC1pZC5jIGIvYnVpbHRpbi9wYXRjaC1pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMmZmZmYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3BhdGNoLWlkLmMKQEAgLTAsMCArMSwxODAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisKK3N0YXRpYyB2b2lkIGZsdXNoX2N1cnJlbnRfaWQoaW50IHBhdGNobGVuLCBzdHJ1Y3Qgb2JqZWN0X2lkICppZCwgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0KQoreworCWlmIChwYXRjaGxlbikKKwkJcHJpbnRmKCIlcyAlc1xuIiwgb2lkX3RvX2hleChyZXN1bHQpLCBvaWRfdG9faGV4KGlkKSk7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX3NwYWNlKGNoYXIgKmxpbmUpCit7CisJY2hhciAqc3JjID0gbGluZTsKKwljaGFyICpkc3QgPSBsaW5lOworCXVuc2lnbmVkIGNoYXIgYzsKKworCXdoaWxlICgoYyA9ICpzcmMrKykgIT0gJ1wwJykgeworCQlpZiAoIWlzc3BhY2UoYykpCisJCQkqZHN0KysgPSBjOworCX0KKwlyZXR1cm4gZHN0IC0gbGluZTsKK30KKworc3RhdGljIGludCBzY2FuX2h1bmtfaGVhZGVyKGNvbnN0IGNoYXIgKnAsIGludCAqcF9iZWZvcmUsIGludCAqcF9hZnRlcikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBkaWdpdHNbXSA9ICIwMTIzNDU2Nzg5IjsKKwljb25zdCBjaGFyICpxLCAqcjsKKwlpbnQgbjsKKworCXEgPSBwICsgNDsKKwluID0gc3Ryc3BuKHEsIGRpZ2l0cyk7CisJaWYgKHFbbl0gPT0gJywnKSB7CisJCXEgKz0gbiArIDE7CisJCW4gPSBzdHJzcG4ocSwgZGlnaXRzKTsKKwl9CisJaWYgKG4gPT0gMCB8fCBxW25dICE9ICcgJyB8fCBxW24rMV0gIT0gJysnKQorCQlyZXR1cm4gMDsKKworCXIgPSBxICsgbiArIDI7CisJbiA9IHN0cnNwbihyLCBkaWdpdHMpOworCWlmIChyW25dID09ICcsJykgeworCQlyICs9IG4gKyAxOworCQluID0gc3Ryc3BuKHIsIGRpZ2l0cyk7CisJfQorCWlmIChuID09IDApCisJCXJldHVybiAwOworCisJKnBfYmVmb3JlID0gYXRvaShxKTsKKwkqcF9hZnRlciA9IGF0b2kocik7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X29uZV9wYXRjaGlkKHN0cnVjdCBvYmplY3RfaWQgKm5leHRfb2lkLCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHQsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICpsaW5lX2J1ZiwgaW50IHN0YWJsZSkKK3sKKwlpbnQgcGF0Y2hsZW4gPSAwLCBmb3VuZF9uZXh0ID0gMDsKKwlpbnQgYmVmb3JlID0gLTEsIGFmdGVyID0gLTE7CisJZ2l0X2hhc2hfY3R4IGN0eDsKKworCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJmN0eCk7CisJb2lkY2xyKHJlc3VsdCk7CisKKwl3aGlsZSAoc3RyYnVmX2dldHdob2xlbGluZShsaW5lX2J1Ziwgc3RkaW4sICdcbicpICE9IEVPRikgeworCQljaGFyICpsaW5lID0gbGluZV9idWYtPmJ1ZjsKKwkJY29uc3QgY2hhciAqcCA9IGxpbmU7CisJCWludCBsZW47CisKKwkJaWYgKCFza2lwX3ByZWZpeChsaW5lLCAiZGlmZi10cmVlICIsICZwKSAmJgorCQkgICAgIXNraXBfcHJlZml4KGxpbmUsICJjb21taXQgIiwgJnApICYmCisJCSAgICAhc2tpcF9wcmVmaXgobGluZSwgIkZyb20gIiwgJnApICYmCisJCSAgICBzdGFydHNfd2l0aChsaW5lLCAiXFwgIikgJiYgMTIgPCBzdHJsZW4obGluZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoIWdldF9vaWRfaGV4KHAsIG5leHRfb2lkKSkgeworCQkJZm91bmRfbmV4dCA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIElnbm9yZSBjb21taXQgY29tbWVudHMgKi8KKwkJaWYgKCFwYXRjaGxlbiAmJiAhc3RhcnRzX3dpdGgobGluZSwgImRpZmYgIikpCisJCQljb250aW51ZTsKKworCQkvKiBQYXJzaW5nIGRpZmYgaGVhZGVyPyAgKi8KKwkJaWYgKGJlZm9yZSA9PSAtMSkgeworCQkJaWYgKHN0YXJ0c193aXRoKGxpbmUsICJpbmRleCAiKSkKKwkJCQljb250aW51ZTsKKwkJCWVsc2UgaWYgKHN0YXJ0c193aXRoKGxpbmUsICItLS0gIikpCisJCQkJYmVmb3JlID0gYWZ0ZXIgPSAxOworCQkJZWxzZSBpZiAoIWlzYWxwaGEobGluZVswXSkpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBMb29raW5nIGZvciBhIHZhbGlkIGh1bmsgaGVhZGVyPyAgKi8KKwkJaWYgKGJlZm9yZSA9PSAwICYmIGFmdGVyID09IDApIHsKKwkJCWlmIChzdGFydHNfd2l0aChsaW5lLCAiQEAgLSIpKSB7CisJCQkJLyogUGFyc2UgbmV4dCBodW5rLCBidXQgaWdub3JlIGxpbmUgbnVtYmVycy4gICovCisJCQkJc2Nhbl9odW5rX2hlYWRlcihsaW5lLCAmYmVmb3JlLCAmYWZ0ZXIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBTcGxpdCBhdCB0aGUgZW5kIG9mIHRoZSBwYXRjaC4gICovCisJCQlpZiAoIXN0YXJ0c193aXRoKGxpbmUsICJkaWZmICIpKQorCQkJCWJyZWFrOworCisJCQkvKiBFbHNlIHdlJ3JlIHBhcnNpbmcgYW5vdGhlciBoZWFkZXIuICAqLworCQkJaWYgKHN0YWJsZSkKKwkJCQlmbHVzaF9vbmVfaHVuayhyZXN1bHQsICZjdHgpOworCQkJYmVmb3JlID0gYWZ0ZXIgPSAtMTsKKwkJfQorCisJCS8qIElmIHdlIGdldCBoZXJlLCB3ZSdyZSBpbnNpZGUgYSBodW5rLiAgKi8KKwkJaWYgKGxpbmVbMF0gPT0gJy0nIHx8IGxpbmVbMF0gPT0gJyAnKQorCQkJYmVmb3JlLS07CisJCWlmIChsaW5lWzBdID09ICcrJyB8fCBsaW5lWzBdID09ICcgJykKKwkJCWFmdGVyLS07CisKKwkJLyogQ29tcHV0ZSB0aGUgc2hhIHdpdGhvdXQgd2hpdGVzcGFjZSAqLworCQlsZW4gPSByZW1vdmVfc3BhY2UobGluZSk7CisJCXBhdGNobGVuICs9IGxlbjsKKwkJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjdHgsIGxpbmUsIGxlbik7CisJfQorCisJaWYgKCFmb3VuZF9uZXh0KQorCQlvaWRjbHIobmV4dF9vaWQpOworCisJZmx1c2hfb25lX2h1bmsocmVzdWx0LCAmY3R4KTsKKworCXJldHVybiBwYXRjaGxlbjsKK30KKworc3RhdGljIHZvaWQgZ2VuZXJhdGVfaWRfbGlzdChpbnQgc3RhYmxlKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkLCBuLCByZXN1bHQ7CisJaW50IHBhdGNobGVuOworCXN0cnVjdCBzdHJidWYgbGluZV9idWYgPSBTVFJCVUZfSU5JVDsKKworCW9pZGNscigmb2lkKTsKKwl3aGlsZSAoIWZlb2Yoc3RkaW4pKSB7CisJCXBhdGNobGVuID0gZ2V0X29uZV9wYXRjaGlkKCZuLCAmcmVzdWx0LCAmbGluZV9idWYsIHN0YWJsZSk7CisJCWZsdXNoX2N1cnJlbnRfaWQocGF0Y2hsZW4sICZvaWQsICZyZXN1bHQpOworCQlvaWRjcHkoJm9pZCwgJm4pOworCX0KKwlzdHJidWZfcmVsZWFzZSgmbGluZV9idWYpOworfQorCitzdGF0aWMgY29uc3QgY2hhciBwYXRjaF9pZF91c2FnZVtdID0gImdpdCBwYXRjaC1pZCBbLS1zdGFibGUgfCAtLXVuc3RhYmxlXSI7CisKK3N0YXRpYyBpbnQgZ2l0X3BhdGNoX2lkX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpbnQgKnN0YWJsZSA9IGNiOworCisJaWYgKCFzdHJjbXAodmFyLCAicGF0Y2hpZC5zdGFibGUiKSkgeworCQkqc3RhYmxlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworaW50IGNtZF9wYXRjaF9pZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgc3RhYmxlID0gLTE7CisKKwlnaXRfY29uZmlnKGdpdF9wYXRjaF9pZF9jb25maWcsICZzdGFibGUpOworCisJLyogSWYgbm90aGluZyBpcyBzZXQsIGRlZmF1bHQgdG8gdW5zdGFibGUuICovCisJaWYgKHN0YWJsZSA8IDApCisJCXN0YWJsZSA9IDA7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi0tc3RhYmxlIikpCisJCXN0YWJsZSA9IDE7CisJZWxzZSBpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi0tdW5zdGFibGUiKSkKKwkJc3RhYmxlID0gMDsKKwllbHNlIGlmIChhcmdjICE9IDEpCisJCXVzYWdlKHBhdGNoX2lkX3VzYWdlKTsKKworCWdlbmVyYXRlX2lkX2xpc3Qoc3RhYmxlKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcHJ1bmUtcGFja2VkLmMgYi9idWlsdGluL3BydW5lLXBhY2tlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YjkyODEKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3BydW5lLXBhY2tlZC5jCkBAIC0wLDAgKzEsMzEgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInBydW5lLXBhY2tlZC5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBydW5lX3BhY2tlZF91c2FnZVtdID0geworCU5fKCJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iKSwKKwlOVUxMCit9OworCitpbnQgY21kX3BydW5lX3BhY2tlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgb3B0cyA9IGlzYXR0eSgyKSA/IFBSVU5FX1BBQ0tFRF9WRVJCT1NFIDogMDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIHBydW5lX3BhY2tlZF9vcHRpb25zW10gPSB7CisJCU9QVF9CSVQoJ24nLCAiZHJ5LXJ1biIsICZvcHRzLCBOXygiZHJ5IHJ1biIpLAorCQkJUFJVTkVfUEFDS0VEX0RSWV9SVU4pLAorCQlPUFRfTkVHQklUKCdxJywgInF1aWV0IiwgJm9wdHMsIE5fKCJiZSBxdWlldCIpLAorCQkJICAgUFJVTkVfUEFDS0VEX1ZFUkJPU0UpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBwcnVuZV9wYWNrZWRfb3B0aW9ucywKKwkJCSAgICAgcHJ1bmVfcGFja2VkX3VzYWdlLCAwKTsKKworCWlmIChhcmdjID4gMCkKKwkJdXNhZ2VfbXNnX29wdChfKCJ0b28gbWFueSBhcmd1bWVudHMiKSwKKwkJCSAgICAgIHBydW5lX3BhY2tlZF91c2FnZSwKKwkJCSAgICAgIHBydW5lX3BhY2tlZF9vcHRpb25zKTsKKworCXBydW5lX3BhY2tlZF9vYmplY3RzKG9wdHMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9wcnVuZS5jIGIvYnVpbHRpbi9wcnVuZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzZhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3BydW5lLmMKQEAgLTAsMCArMSwxODkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJyZWFjaGFibGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJwcnVuZS1wYWNrZWQuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJzaGFsbG93LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJ1bmVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1wcm9ncmVzc10gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXSIpLAorCU5VTEwKK307CitzdGF0aWMgaW50IHNob3dfb25seTsKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyB0aW1lc3RhbXBfdCBleHBpcmU7CitzdGF0aWMgaW50IHNob3dfcHJvZ3Jlc3MgPSAtMTsKKworc3RhdGljIGludCBwcnVuZV90bXBfZmlsZShjb25zdCBjaGFyICpmdWxscGF0aCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpZiAobHN0YXQoZnVsbHBhdGgsICZzdCkpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHN0YXQgJyVzJyIsIGZ1bGxwYXRoKTsKKwlpZiAoc3Quc3RfbXRpbWUgPiBleHBpcmUpCisJCXJldHVybiAwOworCWlmIChzaG93X29ubHkgfHwgdmVyYm9zZSkKKwkJcHJpbnRmKCJSZW1vdmluZyBzdGFsZSB0ZW1wb3JhcnkgZmlsZSAlc1xuIiwgZnVsbHBhdGgpOworCWlmICghc2hvd19vbmx5KQorCQl1bmxpbmtfb3Jfd2FybihmdWxscGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZvcm1fcmVhY2hhYmlsaXR5X3RyYXZlcnNhbChzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RhdGljIGludCBpbml0aWFsaXplZDsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKKworCWlmIChpbml0aWFsaXplZCkKKwkJcmV0dXJuOworCisJaWYgKHNob3dfcHJvZ3Jlc3MpCisJCXByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcyhfKCJDaGVja2luZyBjb25uZWN0aXZpdHkiKSwgMCk7CisJbWFya19yZWFjaGFibGVfb2JqZWN0cyhyZXZzLCAxLCBleHBpcmUsIHByb2dyZXNzKTsKKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisJaW5pdGlhbGl6ZWQgPSAxOworfQorCitzdGF0aWMgaW50IGlzX29iamVjdF9yZWFjaGFibGUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgIHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwlwZXJmb3JtX3JlYWNoYWJpbGl0eV90cmF2ZXJzYWwocmV2cyk7CisKKwlvYmogPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCXJldHVybiBvYmogJiYgKG9iai0+ZmxhZ3MgJiBTRUVOKTsKK30KKworc3RhdGljIGludCBwcnVuZV9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpmdWxscGF0aCwKKwkJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gZGF0YTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChpc19vYmplY3RfcmVhY2hhYmxlKG9pZCwgcmV2cykpCisJCXJldHVybiAwOworCisJaWYgKGxzdGF0KGZ1bGxwYXRoLCAmc3QpKSB7CisJCS8qIHJlcG9ydCBlcnJvcnMsIGJ1dCBkbyBub3Qgc3RvcCBwcnVuaW5nICovCisJCWVycm9yKCJDb3VsZCBub3Qgc3RhdCAnJXMnIiwgZnVsbHBhdGgpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHN0LnN0X210aW1lID4gZXhwaXJlKQorCQlyZXR1cm4gMDsKKwlpZiAoc2hvd19vbmx5IHx8IHZlcmJvc2UpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBvaWQsCisJCQkJCQkJTlVMTCk7CisJCXByaW50ZigiJXMgJXNcbiIsIG9pZF90b19oZXgob2lkKSwKKwkJICAgICAgICh0eXBlID4gMCkgPyB0eXBlX25hbWUodHlwZSkgOiAidW5rbm93biIpOworCX0KKwlpZiAoIXNob3dfb25seSkKKwkJdW5saW5rX29yX3dhcm4oZnVsbHBhdGgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBydW5lX2NydWZ0KGNvbnN0IGNoYXIgKmJhc2VuYW1lLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpkYXRhKQoreworCWlmIChzdGFydHNfd2l0aChiYXNlbmFtZSwgInRtcF9vYmpfIikpCisJCXBydW5lX3RtcF9maWxlKHBhdGgpOworCWVsc2UKKwkJZnByaW50ZihzdGRlcnIsICJiYWQgc2hhMSBmaWxlOiAlc1xuIiwgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJ1bmVfc3ViZGlyKHVuc2lnbmVkIGludCBuciwgY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqZGF0YSkKK3sKKwlpZiAoIXNob3dfb25seSkKKwkJcm1kaXIocGF0aCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXcml0ZSBlcnJvcnMgKHBhcnRpY3VsYXJseSBvdXQgb2Ygc3BhY2UpIGNhbiByZXN1bHQgaW4KKyAqIGZhaWxlZCB0ZW1wb3JhcnkgcGFja3MgKGFuZCBtb3JlIHJhcmVseSBpbmRleGVzIGFuZCBvdGhlcgorICogZmlsZXMgYmVnaW5uaW5nIHdpdGggInRtcF8iKSBhY2N1bXVsYXRpbmcgaW4gdGhlIG9iamVjdAorICogYW5kIHRoZSBwYWNrIGRpcmVjdG9yaWVzLgorICovCitzdGF0aWMgdm9pZCByZW1vdmVfdGVtcG9yYXJ5X2ZpbGVzKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZGU7CisKKwlkaXIgPSBvcGVuZGlyKHBhdGgpOworCWlmICghZGlyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIG9wZW4gZGlyZWN0b3J5ICVzXG4iLCBwYXRoKTsKKwkJcmV0dXJuOworCX0KKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKQorCQlpZiAoc3RhcnRzX3dpdGgoZGUtPmRfbmFtZSwgInRtcF8iKSkKKwkJCXBydW5lX3RtcF9maWxlKG1rcGF0aCgiJXMvJXMiLCBwYXRoLCBkZS0+ZF9uYW1lKSk7CisJY2xvc2VkaXIoZGlyKTsKK30KKworaW50IGNtZF9wcnVuZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlpbnQgZXhjbHVkZV9wcm9taXNvcl9vYmplY3RzID0gMDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19EUllfUlVOKCZzaG93X29ubHksIE5fKCJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiKSksCisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIpKSwKKwkJT1BUX0JPT0woMCwgInByb2dyZXNzIiwgJnNob3dfcHJvZ3Jlc3MsIE5fKCJzaG93IHByb2dyZXNzIikpLAorCQlPUFRfRVhQSVJZX0RBVEUoMCwgImV4cGlyZSIsICZleHBpcmUsCisJCQkJTl8oImV4cGlyZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+IikpLAorCQlPUFRfQk9PTCgwLCAiZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIiwgJmV4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0cywKKwkJCSBOXygibGltaXQgdHJhdmVyc2FsIHRvIG9iamVjdHMgb3V0c2lkZSBwcm9taXNvciBwYWNrZmlsZXMiKSksCisJCU9QVF9FTkQoKQorCX07CisJY2hhciAqczsKKworCWV4cGlyZSA9IFRJTUVfTUFYOworCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CisJcmVhZF9yZXBsYWNlX3JlZnMgPSAwOworCXJlZl9wYXJhbm9pYSA9IDE7CisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldnMsIHByZWZpeCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHBydW5lX3VzYWdlLCAwKTsKKworCWlmIChyZXBvc2l0b3J5X2Zvcm1hdF9wcmVjaW91c19vYmplY3RzKQorCQlkaWUoXygiY2Fubm90IHBydW5lIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIikpOworCisJd2hpbGUgKGFyZ2MtLSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJY29uc3QgY2hhciAqbmFtZSA9ICphcmd2Kys7CisKKwkJaWYgKCFnZXRfb2lkKG5hbWUsICZvaWQpKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBwYXJzZV9vYmplY3Rfb3JfZGllKCZvaWQsCisJCQkJCQkJCSAgICBuYW1lKTsKKwkJCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2cywgb2JqZWN0LCAiIik7CisJCX0KKwkJZWxzZQorCQkJZGllKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIiwgbmFtZSk7CisJfQorCisJaWYgKHNob3dfcHJvZ3Jlc3MgPT0gLTEpCisJCXNob3dfcHJvZ3Jlc3MgPSBpc2F0dHkoMik7CisJaWYgKGV4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0cykgeworCQlmZXRjaF9pZl9taXNzaW5nID0gMDsKKwkJcmV2cy5leGNsdWRlX3Byb21pc29yX29iamVjdHMgPSAxOworCX0KKworCWZvcl9lYWNoX2xvb3NlX2ZpbGVfaW5fb2JqZGlyKGdldF9vYmplY3RfZGlyZWN0b3J5KCksIHBydW5lX29iamVjdCwKKwkJCQkgICAgICBwcnVuZV9jcnVmdCwgcHJ1bmVfc3ViZGlyLCAmcmV2cyk7CisKKwlwcnVuZV9wYWNrZWRfb2JqZWN0cyhzaG93X29ubHkgPyBQUlVORV9QQUNLRURfRFJZX1JVTiA6IDApOworCXJlbW92ZV90ZW1wb3JhcnlfZmlsZXMoZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CisJcyA9IG1rcGF0aGR1cCgiJXMvcGFjayIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCXJlbW92ZV90ZW1wb3JhcnlfZmlsZXMocyk7CisJZnJlZShzKTsKKworCWlmIChpc19yZXBvc2l0b3J5X3NoYWxsb3codGhlX3JlcG9zaXRvcnkpKSB7CisJCXBlcmZvcm1fcmVhY2hhYmlsaXR5X3RyYXZlcnNhbCgmcmV2cyk7CisJCXBydW5lX3NoYWxsb3coc2hvd19vbmx5ID8gUFJVTkVfU0hPV19PTkxZIDogMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3B1bGwuYyBiL2J1aWx0aW4vcHVsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZTU4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3B1bGwuYwpAQCAtMCwwICsxLDEwNTAgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgcHVsbCIKKyAqCisgKiBCYXNlZCBvbiBnaXQtcHVsbC5zaCBieSBKdW5pbyBDIEhhbWFubworICoKKyAqIEZldGNoIG9uZSBvciBtb3JlIHJlbW90ZSByZWZzIGFuZCBtZXJnZSBpdC90aGVtIGludG8gdGhlIGN1cnJlbnQgSEVBRC4KKyAqLworI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJvaWQtYXJyYXkuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJyZWJhc2UuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVmc3BlYy5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgInRlbXBmaWxlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJ3dC1zdGF0dXMuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJzZXF1ZW5jZXIuaCIKKworLyoqCisgKiBQYXJzZXMgdGhlIHZhbHVlIG9mIC0tcmViYXNlLiBJZiB2YWx1ZSBpcyBhIGZhbHNlIHZhbHVlLCByZXR1cm5zCisgKiBSRUJBU0VfRkFMU0UuIElmIHZhbHVlIGlzIGEgdHJ1ZSB2YWx1ZSwgcmV0dXJucyBSRUJBU0VfVFJVRS4gSWYgdmFsdWUgaXMKKyAqICJtZXJnZXMiLCByZXR1cm5zIFJFQkFTRV9NRVJHRVMuIElmIHZhbHVlIGlzICJwcmVzZXJ2ZSIsIHJldHVybnMKKyAqIFJFQkFTRV9QUkVTRVJWRS4gSWYgdmFsdWUgaXMgYSBpbnZhbGlkIHZhbHVlLCBkaWVzIHdpdGggYSBmYXRhbCBlcnJvciBpZgorICogZmF0YWwgaXMgdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybnMgUkVCQVNFX0lOVkFMSUQuCisgKi8KK3N0YXRpYyBlbnVtIHJlYmFzZV90eXBlIHBhcnNlX2NvbmZpZ19yZWJhc2UoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJaW50IGZhdGFsKQoreworCWVudW0gcmViYXNlX3R5cGUgdiA9IHJlYmFzZV9wYXJzZV92YWx1ZSh2YWx1ZSk7CisJaWYgKHYgIT0gUkVCQVNFX0lOVkFMSUQpCisJCXJldHVybiB2OworCisJaWYgKGZhdGFsKQorCQlkaWUoXygiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIiksIGtleSwgdmFsdWUpOworCWVsc2UKKwkJZXJyb3IoXygiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIiksIGtleSwgdmFsdWUpOworCisJcmV0dXJuIFJFQkFTRV9JTlZBTElEOworfQorCisvKioKKyAqIENhbGxiYWNrIGZvciAtLXJlYmFzZSwgd2hpY2ggcGFyc2VzIGFyZyB3aXRoIHBhcnNlX2NvbmZpZ19yZWJhc2UoKS4KKyAqLworc3RhdGljIGludCBwYXJzZV9vcHRfcmViYXNlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJZW51bSByZWJhc2VfdHlwZSAqdmFsdWUgPSBvcHQtPnZhbHVlOworCisJaWYgKGFyZykKKwkJKnZhbHVlID0gcGFyc2VfY29uZmlnX3JlYmFzZSgiLS1yZWJhc2UiLCBhcmcsIDApOworCWVsc2UKKwkJKnZhbHVlID0gdW5zZXQgPyBSRUJBU0VfRkFMU0UgOiBSRUJBU0VfVFJVRTsKKwlyZXR1cm4gKnZhbHVlID09IFJFQkFTRV9JTlZBTElEID8gLTEgOiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHB1bGxfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHB1bGwgWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iKSwKKwlOVUxMCit9OworCisvKiBTaGFyZWQgb3B0aW9ucyAqLworc3RhdGljIGludCBvcHRfdmVyYm9zaXR5Oworc3RhdGljIGNoYXIgKm9wdF9wcm9ncmVzczsKK3N0YXRpYyBpbnQgcmVjdXJzZV9zdWJtb2R1bGVzID0gUkVDVVJTRV9TVUJNT0RVTEVTX0RFRkFVTFQ7CisKKy8qIE9wdGlvbnMgcGFzc2VkIHRvIGdpdC1tZXJnZSBvciBnaXQtcmViYXNlICovCitzdGF0aWMgZW51bSByZWJhc2VfdHlwZSBvcHRfcmViYXNlID0gLTE7CitzdGF0aWMgY2hhciAqb3B0X2RpZmZzdGF0Oworc3RhdGljIGNoYXIgKm9wdF9sb2c7CitzdGF0aWMgY2hhciAqb3B0X3NpZ25vZmY7CitzdGF0aWMgY2hhciAqb3B0X3NxdWFzaDsKK3N0YXRpYyBjaGFyICpvcHRfY29tbWl0Oworc3RhdGljIGNoYXIgKm9wdF9lZGl0Oworc3RhdGljIGNoYXIgKmNsZWFudXBfYXJnOworc3RhdGljIGNoYXIgKm9wdF9mZjsKK3N0YXRpYyBjaGFyICpvcHRfdmVyaWZ5X3NpZ25hdHVyZXM7CitzdGF0aWMgaW50IG9wdF9hdXRvc3Rhc2ggPSAtMTsKK3N0YXRpYyBpbnQgY29uZmlnX2F1dG9zdGFzaDsKK3N0YXRpYyBpbnQgY2hlY2tfdHJ1c3RfbGV2ZWwgPSAxOworc3RhdGljIHN0cnVjdCBhcmd2X2FycmF5IG9wdF9zdHJhdGVnaWVzID0gQVJHVl9BUlJBWV9JTklUOworc3RhdGljIHN0cnVjdCBhcmd2X2FycmF5IG9wdF9zdHJhdGVneV9vcHRzID0gQVJHVl9BUlJBWV9JTklUOworc3RhdGljIGNoYXIgKm9wdF9ncGdfc2lnbjsKK3N0YXRpYyBpbnQgb3B0X2FsbG93X3VucmVsYXRlZF9oaXN0b3JpZXM7CisKKy8qIE9wdGlvbnMgcGFzc2VkIHRvIGdpdC1mZXRjaCAqLworc3RhdGljIGNoYXIgKm9wdF9hbGw7CitzdGF0aWMgY2hhciAqb3B0X2FwcGVuZDsKK3N0YXRpYyBjaGFyICpvcHRfdXBsb2FkX3BhY2s7CitzdGF0aWMgaW50IG9wdF9mb3JjZTsKK3N0YXRpYyBjaGFyICpvcHRfdGFnczsKK3N0YXRpYyBjaGFyICpvcHRfcHJ1bmU7CitzdGF0aWMgY2hhciAqbWF4X2NoaWxkcmVuOworc3RhdGljIGludCBvcHRfZHJ5X3J1bjsKK3N0YXRpYyBjaGFyICpvcHRfa2VlcDsKK3N0YXRpYyBjaGFyICpvcHRfZGVwdGg7CitzdGF0aWMgY2hhciAqb3B0X3Vuc2hhbGxvdzsKK3N0YXRpYyBjaGFyICpvcHRfdXBkYXRlX3NoYWxsb3c7CitzdGF0aWMgY2hhciAqb3B0X3JlZm1hcDsKK3N0YXRpYyBjaGFyICpvcHRfaXB2NDsKK3N0YXRpYyBjaGFyICpvcHRfaXB2NjsKK3N0YXRpYyBpbnQgb3B0X3Nob3dfZm9yY2VkX3VwZGF0ZXMgPSAtMTsKK3N0YXRpYyBjaGFyICpzZXRfdXBzdHJlYW07CitzdGF0aWMgc3RydWN0IGFyZ3ZfYXJyYXkgb3B0X2ZldGNoID0gQVJHVl9BUlJBWV9JTklUOworCitzdGF0aWMgc3RydWN0IG9wdGlvbiBwdWxsX29wdGlvbnNbXSA9IHsKKwkvKiBTaGFyZWQgb3B0aW9ucyAqLworCU9QVF9fVkVSQk9TSVRZKCZvcHRfdmVyYm9zaXR5KSwKKwlPUFRfUEFTU1RIUlUoMCwgInByb2dyZXNzIiwgJm9wdF9wcm9ncmVzcywgTlVMTCwKKwkJTl8oImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9DQUxMQkFDS19GKDAsICJyZWN1cnNlLXN1Ym1vZHVsZXMiLAorCQkgICAmcmVjdXJzZV9zdWJtb2R1bGVzLCBOXygib24tZGVtYW5kIiksCisJCSAgIE5fKCJjb250cm9sIGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIpLAorCQkgICBQQVJTRV9PUFRfT1BUQVJHLCBvcHRpb25fZmV0Y2hfcGFyc2VfcmVjdXJzZV9zdWJtb2R1bGVzKSwKKworCS8qIE9wdGlvbnMgcGFzc2VkIHRvIGdpdC1tZXJnZSBvciBnaXQtcmViYXNlICovCisJT1BUX0dST1VQKE5fKCJPcHRpb25zIHJlbGF0ZWQgdG8gbWVyZ2luZyIpKSwKKwlPUFRfQ0FMTEJBQ0tfRigncicsICJyZWJhc2UiLCAmb3B0X3JlYmFzZSwKKwkgICIoZmFsc2V8dHJ1ZXxtZXJnZXN8cHJlc2VydmV8aW50ZXJhY3RpdmUpIiwKKwkgIE5fKCJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciKSwKKwkgIFBBUlNFX09QVF9PUFRBUkcsIHBhcnNlX29wdF9yZWJhc2UpLAorCU9QVF9QQVNTVEhSVSgnbicsIE5VTEwsICZvcHRfZGlmZnN0YXQsIE5VTEwsCisJCU5fKCJkbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIiksCisJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRyksCisJT1BUX1BBU1NUSFJVKDAsICJzdGF0IiwgJm9wdF9kaWZmc3RhdCwgTlVMTCwKKwkJTl8oInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVSgwLCAic3VtbWFyeSIsICZvcHRfZGlmZnN0YXQsIE5VTEwsCisJCU5fKCIoc3lub255bSB0byAtLXN0YXQpIiksCisJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9ISURERU4pLAorCU9QVF9QQVNTVEhSVSgwLCAibG9nIiwgJm9wdF9sb2csIE5fKCJuIiksCisJCU5fKCJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiKSwKKwkJUEFSU0VfT1BUX09QVEFSRyksCisJT1BUX1BBU1NUSFJVKDAsICJzaWdub2ZmIiwgJm9wdF9zaWdub2ZmLCBOVUxMLAorCQlOXygiYWRkIFNpZ25lZC1vZmYtYnk6IiksCisJCVBBUlNFX09QVF9PUFRBUkcpLAorCU9QVF9QQVNTVEhSVSgwLCAic3F1YXNoIiwgJm9wdF9zcXVhc2gsIE5VTEwsCisJCU5fKCJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVSgwLCAiY29tbWl0IiwgJm9wdF9jb21taXQsIE5VTEwsCisJCU5fKCJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiKSwKKwkJUEFSU0VfT1BUX05PQVJHKSwKKwlPUFRfUEFTU1RIUlUoMCwgImVkaXQiLCAmb3B0X2VkaXQsIE5VTEwsCisJCU5fKCJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciKSwKKwkJUEFSU0VfT1BUX05PQVJHKSwKKwlPUFRfQ0xFQU5VUCgmY2xlYW51cF9hcmcpLAorCU9QVF9QQVNTVEhSVSgwLCAiZmYiLCAmb3B0X2ZmLCBOVUxMLAorCQlOXygiYWxsb3cgZmFzdC1mb3J3YXJkIiksCisJCVBBUlNFX09QVF9OT0FSRyksCisJT1BUX1BBU1NUSFJVKDAsICJmZi1vbmx5IiwgJm9wdF9mZiwgTlVMTCwKKwkJTl8oImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiKSwKKwkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHKSwKKwlPUFRfUEFTU1RIUlUoMCwgInZlcmlmeS1zaWduYXR1cmVzIiwgJm9wdF92ZXJpZnlfc2lnbmF0dXJlcywgTlVMTCwKKwkJTl8oInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9CT09MKDAsICJhdXRvc3Rhc2giLCAmb3B0X2F1dG9zdGFzaCwKKwkJTl8oImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIiKSksCisJT1BUX1BBU1NUSFJVX0FSR1YoJ3MnLCAic3RyYXRlZ3kiLCAmb3B0X3N0cmF0ZWdpZXMsIE5fKCJzdHJhdGVneSIpLAorCQlOXygibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIiksCisJCTApLAorCU9QVF9QQVNTVEhSVV9BUkdWKCdYJywgInN0cmF0ZWd5LW9wdGlvbiIsICZvcHRfc3RyYXRlZ3lfb3B0cywKKwkJTl8oIm9wdGlvbj12YWx1ZSIpLAorCQlOXygib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIpLAorCQkwKSwKKwlPUFRfUEFTU1RIUlUoJ1MnLCAiZ3BnLXNpZ24iLCAmb3B0X2dwZ19zaWduLCBOXygia2V5LWlkIiksCisJCU5fKCJHUEcgc2lnbiBjb21taXQiKSwKKwkJUEFSU0VfT1BUX09QVEFSRyksCisJT1BUX1NFVF9JTlQoMCwgImFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMiLAorCQkgICAgJm9wdF9hbGxvd191bnJlbGF0ZWRfaGlzdG9yaWVzLAorCQkgICAgTl8oImFsbG93IG1lcmdpbmcgdW5yZWxhdGVkIGhpc3RvcmllcyIpLCAxKSwKKworCS8qIE9wdGlvbnMgcGFzc2VkIHRvIGdpdC1mZXRjaCAqLworCU9QVF9HUk9VUChOXygiT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nIikpLAorCU9QVF9QQVNTVEhSVSgwLCAiYWxsIiwgJm9wdF9hbGwsIE5VTEwsCisJCU5fKCJmZXRjaCBmcm9tIGFsbCByZW1vdGVzIiksCisJCVBBUlNFX09QVF9OT0FSRyksCisJT1BUX1BBU1NUSFJVKCdhJywgImFwcGVuZCIsICZvcHRfYXBwZW5kLCBOVUxMLAorCQlOXygiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIiksCisJCVBBUlNFX09QVF9OT0FSRyksCisJT1BUX1BBU1NUSFJVKDAsICJ1cGxvYWQtcGFjayIsICZvcHRfdXBsb2FkX3BhY2ssIE5fKCJwYXRoIiksCisJCU5fKCJwYXRoIHRvIHVwbG9hZCBwYWNrIG9uIHJlbW90ZSBlbmQiKSwKKwkJMCksCisJT1BUX19GT1JDRSgmb3B0X2ZvcmNlLCBOXygiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIpLCAwKSwKKwlPUFRfUEFTU1RIUlUoJ3QnLCAidGFncyIsICZvcHRfdGFncywgTlVMTCwKKwkJTl8oImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiKSwKKwkJUEFSU0VfT1BUX05PQVJHKSwKKwlPUFRfUEFTU1RIUlUoJ3AnLCAicHJ1bmUiLCAmb3B0X3BydW5lLCBOVUxMLAorCQlOXygicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiKSwKKwkJUEFSU0VfT1BUX05PQVJHKSwKKwlPUFRfUEFTU1RIUlUoJ2onLCAiam9icyIsICZtYXhfY2hpbGRyZW4sIE5fKCJuIiksCisJCU5fKCJudW1iZXIgb2Ygc3VibW9kdWxlcyBwdWxsZWQgaW4gcGFyYWxsZWwiKSwKKwkJUEFSU0VfT1BUX09QVEFSRyksCisJT1BUX0JPT0woMCwgImRyeS1ydW4iLCAmb3B0X2RyeV9ydW4sCisJCU5fKCJkcnkgcnVuIikpLAorCU9QVF9QQVNTVEhSVSgnaycsICJrZWVwIiwgJm9wdF9rZWVwLCBOVUxMLAorCQlOXygia2VlcCBkb3dubG9hZGVkIHBhY2siKSwKKwkJUEFSU0VfT1BUX05PQVJHKSwKKwlPUFRfUEFTU1RIUlUoMCwgImRlcHRoIiwgJm9wdF9kZXB0aCwgTl8oImRlcHRoIiksCisJCU5fKCJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIiksCisJCTApLAorCU9QVF9QQVNTVEhSVV9BUkdWKDAsICJzaGFsbG93LXNpbmNlIiwgJm9wdF9mZXRjaCwgTl8oInRpbWUiKSwKKwkJTl8oImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aW1lIiksCisJCTApLAorCU9QVF9QQVNTVEhSVV9BUkdWKDAsICJzaGFsbG93LWV4Y2x1ZGUiLCAmb3B0X2ZldGNoLCBOXygicmV2aXNpb24iKSwKKwkJTl8oImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUsIGV4Y2x1ZGluZyByZXYiKSwKKwkJMCksCisJT1BUX1BBU1NUSFJVX0FSR1YoMCwgImRlZXBlbiIsICZvcHRfZmV0Y2gsIE5fKCJuIiksCisJCU5fKCJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIiksCisJCTApLAorCU9QVF9QQVNTVEhSVSgwLCAidW5zaGFsbG93IiwgJm9wdF91bnNoYWxsb3csIE5VTEwsCisJCU5fKCJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIpLAorCQlQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVSgwLCAidXBkYXRlLXNoYWxsb3ciLCAmb3B0X3VwZGF0ZV9zaGFsbG93LCBOVUxMLAorCQlOXygiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IiksCisJCVBBUlNFX09QVF9OT0FSRyksCisJT1BUX1BBU1NUSFJVKDAsICJyZWZtYXAiLCAmb3B0X3JlZm1hcCwgTl8oInJlZm1hcCIpLAorCQlOXygic3BlY2lmeSBmZXRjaCByZWZtYXAiKSwKKwkJUEFSU0VfT1BUX05PTkVHKSwKKwlPUFRfUEFTU1RIUlVfQVJHVignbycsICJzZXJ2ZXItb3B0aW9uIiwgJm9wdF9mZXRjaCwKKwkJTl8oInNlcnZlci1zcGVjaWZpYyIpLAorCQlOXygib3B0aW9uIHRvIHRyYW5zbWl0IiksCisJCTApLAorCU9QVF9QQVNTVEhSVSgnNCcsICAiaXB2NCIsICZvcHRfaXB2NCwgTlVMTCwKKwkJTl8oInVzZSBJUHY0IGFkZHJlc3NlcyBvbmx5IiksCisJCVBBUlNFX09QVF9OT0FSRyksCisJT1BUX1BBU1NUSFJVKCc2JywgICJpcHY2IiwgJm9wdF9pcHY2LCBOVUxMLAorCQlOXygidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiKSwKKwkJUEFSU0VfT1BUX05PQVJHKSwKKwlPUFRfUEFTU1RIUlVfQVJHVigwLCAibmVnb3RpYXRpb24tdGlwIiwgJm9wdF9mZXRjaCwgTl8oInJldmlzaW9uIiksCisJCU5fKCJyZXBvcnQgdGhhdCB3ZSBoYXZlIG9ubHkgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0aGlzIG9iamVjdCIpLAorCQkwKSwKKwlPUFRfQk9PTCgwLCAic2hvdy1mb3JjZWQtdXBkYXRlcyIsICZvcHRfc2hvd19mb3JjZWRfdXBkYXRlcywKKwkJIE5fKCJjaGVjayBmb3IgZm9yY2VkLXVwZGF0ZXMgb24gYWxsIHVwZGF0ZWQgYnJhbmNoZXMiKSksCisJT1BUX1BBU1NUSFJVKDAsICJzZXQtdXBzdHJlYW0iLCAmc2V0X3Vwc3RyZWFtLCBOVUxMLAorCQlOXygic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9mZXRjaCIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCisJT1BUX0VORCgpCit9OworCisvKioKKyAqIFB1c2hlcyAiLXEiIG9yICItdiIgc3dpdGNoZXMgaW50byBhcnIgdG8gbWF0Y2ggdGhlIG9wdF92ZXJib3NpdHkgbGV2ZWwuCisgKi8KK3N0YXRpYyB2b2lkIGFyZ3ZfcHVzaF92ZXJib3NpdHkoc3RydWN0IGFyZ3ZfYXJyYXkgKmFycikKK3sKKwlpbnQgdmVyYm9zaXR5OworCisJZm9yICh2ZXJib3NpdHkgPSBvcHRfdmVyYm9zaXR5OyB2ZXJib3NpdHkgPiAwOyB2ZXJib3NpdHktLSkKKwkJYXJndl9hcnJheV9wdXNoKGFyciwgIi12Iik7CisKKwlmb3IgKHZlcmJvc2l0eSA9IG9wdF92ZXJib3NpdHk7IHZlcmJvc2l0eSA8IDA7IHZlcmJvc2l0eSsrKQorCQlhcmd2X2FycmF5X3B1c2goYXJyLCAiLXEiKTsKK30KKworLyoqCisgKiBQdXNoZXMgIi1mIiBzd2l0Y2hlcyBpbnRvIGFyciB0byBtYXRjaCB0aGUgb3B0X2ZvcmNlIGxldmVsLgorICovCitzdGF0aWMgdm9pZCBhcmd2X3B1c2hfZm9yY2Uoc3RydWN0IGFyZ3ZfYXJyYXkgKmFycikKK3sKKwlpbnQgZm9yY2UgPSBvcHRfZm9yY2U7CisJd2hpbGUgKGZvcmNlLS0gPiAwKQorCQlhcmd2X2FycmF5X3B1c2goYXJyLCAiLWYiKTsKK30KKworLyoqCisgKiBTZXRzIHRoZSBHSVRfUkVGTE9HX0FDVElPTiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhcmd2CisgKi8KK3N0YXRpYyB2b2lkIHNldF9yZWZsb2dfbWVzc2FnZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKGkpCisJCQlzdHJidWZfYWRkY2goJm1zZywgJyAnKTsKKwkJc3RyYnVmX2FkZHN0cigmbXNnLCBhcmd2W2ldKTsKKwl9CisKKwlzZXRlbnYoIkdJVF9SRUZMT0dfQUNUSU9OIiwgbXNnLmJ1ZiwgMCk7CisKKwlzdHJidWZfcmVsZWFzZSgmbXNnKTsKK30KKworLyoqCisgKiBJZiBwdWxsLmZmIGlzIHVuc2V0LCByZXR1cm5zIE5VTEwuIElmIHB1bGwuZmYgaXMgInRydWUiLCByZXR1cm5zICItLWZmIi4gSWYKKyAqIHB1bGwuZmYgaXMgImZhbHNlIiwgcmV0dXJucyAiLS1uby1mZiIuIElmIHB1bGwuZmYgaXMgIm9ubHkiLCByZXR1cm5zCisgKiAiLS1mZi1vbmx5Ii4gT3RoZXJ3aXNlLCBpZiBwdWxsLmZmIGlzIHNldCB0byBhbiBpbnZhbGlkIHZhbHVlLCBkaWUgd2l0aCBhbgorICogZXJyb3IuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjb25maWdfZ2V0X2ZmKHZvaWQpCit7CisJY29uc3QgY2hhciAqdmFsdWU7CisKKwlpZiAoZ2l0X2NvbmZpZ19nZXRfdmFsdWUoInB1bGwuZmYiLCAmdmFsdWUpKQorCQlyZXR1cm4gTlVMTDsKKworCXN3aXRjaCAoZ2l0X3BhcnNlX21heWJlX2Jvb2wodmFsdWUpKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gIi0tbm8tZmYiOworCWNhc2UgMToKKwkJcmV0dXJuICItLWZmIjsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YWx1ZSwgIm9ubHkiKSkKKwkJcmV0dXJuICItLWZmLW9ubHkiOworCisJZGllKF8oIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIiksIHZhbHVlKTsKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgdmFsdWUgZm9yIC0tcmViYXNlLiBJdCBmaXJzdCBsb29rcyBmb3IgdGhlCisgKiB2YWx1ZSBvZiAiYnJhbmNoLiRjdXJyX2JyYW5jaC5yZWJhc2UiLCB3aGVyZSAkY3Vycl9icmFuY2ggaXMgdGhlIGN1cnJlbnQKKyAqIGJyYW5jaCwgYW5kIGlmIEhFQUQgaXMgZGV0YWNoZWQgb3IgdGhlIGNvbmZpZ3VyYXRpb24ga2V5IGRvZXMgbm90IGV4aXN0LAorICogbG9va3MgZm9yIHRoZSB2YWx1ZSBvZiAicHVsbC5yZWJhc2UiLiBJZiBib3RoIGNvbmZpZ3VyYXRpb24ga2V5cyBkbyBub3QKKyAqIGV4aXN0LCByZXR1cm5zIFJFQkFTRV9GQUxTRS4KKyAqLworc3RhdGljIGVudW0gcmViYXNlX3R5cGUgY29uZmlnX2dldF9yZWJhc2Uodm9pZCkKK3sKKwlzdHJ1Y3QgYnJhbmNoICpjdXJyX2JyYW5jaCA9IGJyYW5jaF9nZXQoIkhFQUQiKTsKKwljb25zdCBjaGFyICp2YWx1ZTsKKworCWlmIChjdXJyX2JyYW5jaCkgeworCQljaGFyICprZXkgPSB4c3RyZm10KCJicmFuY2guJXMucmViYXNlIiwgY3Vycl9icmFuY2gtPm5hbWUpOworCisJCWlmICghZ2l0X2NvbmZpZ19nZXRfdmFsdWUoa2V5LCAmdmFsdWUpKSB7CisJCQllbnVtIHJlYmFzZV90eXBlIHJldCA9IHBhcnNlX2NvbmZpZ19yZWJhc2Uoa2V5LCB2YWx1ZSwgMSk7CisJCQlmcmVlKGtleSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJZnJlZShrZXkpOworCX0KKworCWlmICghZ2l0X2NvbmZpZ19nZXRfdmFsdWUoInB1bGwucmViYXNlIiwgJnZhbHVlKSkKKwkJcmV0dXJuIHBhcnNlX2NvbmZpZ19yZWJhc2UoInB1bGwucmViYXNlIiwgdmFsdWUsIDEpOworCisJaWYgKG9wdF92ZXJib3NpdHkgPj0gMCAmJgorCSAgICAoIW9wdF9mZiB8fCBzdHJjbXAob3B0X2ZmLCAiLS1mZi1vbmx5IikpKSB7CisJCXdhcm5pbmcoXygiUHVsbGluZyB3aXRob3V0IHNwZWNpZnlpbmcgaG93IHRvIHJlY29uY2lsZSBkaXZlcmdlbnQgYnJhbmNoZXMgaXNcbiIKKwkJCSJkaXNjb3VyYWdlZC4gWW91IGNhbiBzcXVlbGNoIHRoaXMgbWVzc2FnZSBieSBydW5uaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nXG4iCisJCQkiY29tbWFuZHMgc29tZXRpbWUgYmVmb3JlIHlvdXIgbmV4dCBwdWxsOlxuIgorCQkJIlxuIgorCQkJIiAgZ2l0IGNvbmZpZyBwdWxsLnJlYmFzZSBmYWxzZSAgIyBtZXJnZSAodGhlIGRlZmF1bHQgc3RyYXRlZ3kpXG4iCisJCQkiICBnaXQgY29uZmlnIHB1bGwucmViYXNlIHRydWUgICAjIHJlYmFzZVxuIgorCQkJIiAgZ2l0IGNvbmZpZyBwdWxsLmZmIG9ubHkgICAgICAgIyBmYXN0LWZvcndhcmQgb25seVxuIgorCQkJIlxuIgorCQkJIllvdSBjYW4gcmVwbGFjZSBcImdpdCBjb25maWdcIiB3aXRoIFwiZ2l0IGNvbmZpZyAtLWdsb2JhbFwiIHRvIHNldCBhIGRlZmF1bHRcbiIKKwkJCSJwcmVmZXJlbmNlIGZvciBhbGwgcmVwb3NpdG9yaWVzLiBZb3UgY2FuIGFsc28gcGFzcyAtLXJlYmFzZSwgLS1uby1yZWJhc2UsXG4iCisJCQkib3IgLS1mZi1vbmx5IG9uIHRoZSBjb21tYW5kIGxpbmUgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyZWQgZGVmYXVsdCBwZXJcbiIKKwkJCSJpbnZvY2F0aW9uLlxuIikpOworCX0KKworCXJldHVybiBSRUJBU0VfRkFMU0U7Cit9CisKKy8qKgorICogUmVhZCBjb25maWcgdmFyaWFibGVzLgorICovCitzdGF0aWMgaW50IGdpdF9wdWxsX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKCFzdHJjbXAodmFyLCAicmViYXNlLmF1dG9zdGFzaCIpKSB7CisJCWNvbmZpZ19hdXRvc3Rhc2ggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcCh2YXIsICJzdWJtb2R1bGUucmVjdXJzZSIpKSB7CisJCXJlY3Vyc2Vfc3VibW9kdWxlcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSA/CisJCQlSRUNVUlNFX1NVQk1PRFVMRVNfT04gOiBSRUNVUlNFX1NVQk1PRFVMRVNfT0ZGOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodmFyLCAiZ3BnLm1pbnRydXN0bGV2ZWwiKSkgeworCQljaGVja190cnVzdF9sZXZlbCA9IDA7CisJfQorCisJc3RhdHVzID0gZ2l0X2dwZ19jb25maWcodmFyLCB2YWx1ZSwgY2IpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworLyoqCisgKiBBcHBlbmRzIG1lcmdlIGNhbmRpZGF0ZXMgZnJvbSBGRVRDSF9IRUFEIHRoYXQgYXJlIG5vdCBtYXJrZWQgbm90LWZvci1tZXJnZQorICogaW50byBtZXJnZV9oZWFkcy4KKyAqLworc3RhdGljIHZvaWQgZ2V0X21lcmdlX2hlYWRzKHN0cnVjdCBvaWRfYXJyYXkgKm1lcmdlX2hlYWRzKQoreworCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gZ2l0X3BhdGhfZmV0Y2hfaGVhZCh0aGVfcmVwb3NpdG9yeSk7CisJRklMRSAqZnA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJZnAgPSB4Zm9wZW4oZmlsZW5hbWUsICJyIik7CisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZzYiwgZnApICE9IEVPRikgeworCQljb25zdCBjaGFyICpwOworCQlpZiAocGFyc2Vfb2lkX2hleChzYi5idWYsICZvaWQsICZwKSkKKwkJCWNvbnRpbnVlOyAgLyogaW52YWxpZCBsaW5lOiBkb2VzIG5vdCBzdGFydCB3aXRoIG9iamVjdCBJRCAqLworCQlpZiAoc3RhcnRzX3dpdGgocCwgIlx0bm90LWZvci1tZXJnZVx0IikpCisJCQljb250aW51ZTsgIC8qIHJlZiBpcyBub3QtZm9yLW1lcmdlICovCisJCW9pZF9hcnJheV9hcHBlbmQobWVyZ2VfaGVhZHMsICZvaWQpOworCX0KKwlmY2xvc2UoZnApOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKKy8qKgorICogVXNlZCBieSBkaWVfbm9fbWVyZ2VfY2FuZGlkYXRlcygpIGFzIGEgZm9yX2VhY2hfcmVtb3RlKCkgY2FsbGJhY2sgdG8KKyAqIHJldHJpZXZlIHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgaWYgdGhlIHJlcG9zaXRvcnkgb25seSBoYXMgb25lIHJlbW90ZS4KKyAqLworc3RhdGljIGludCBnZXRfb25seV9yZW1vdGUoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpjYl9kYXRhKQoreworCWNvbnN0IGNoYXIgKipyZW1vdGVfbmFtZSA9IGNiX2RhdGE7CisKKwlpZiAoKnJlbW90ZV9uYW1lKQorCQlyZXR1cm4gLTE7CisKKwkqcmVtb3RlX25hbWUgPSByZW1vdGUtPm5hbWU7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogRGllcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSByZWFzb24gZm9yIHdoeSB0aGVyZSBhcmUgbm8gbWVyZ2UgY2FuZGlkYXRlczoKKyAqCisgKiAxLiBXZSBmZXRjaGVkIGZyb20gYSBzcGVjaWZpYyByZW1vdGUsIGFuZCBhIHJlZnNwZWMgd2FzIGdpdmVuLCBidXQgaXQgZW5kZWQKKyAqICAgIHVwIG5vdCBmZXRjaGluZyBhbnl0aGluZy4gVGhpcyBpcyB1c3VhbGx5IGJlY2F1c2UgdGhlIHVzZXIgcHJvdmlkZWQgYQorICogICAgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm8gbWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4KKyAqCisgKiAyLiBXZSBmZXRjaGVkIGZyb20gYSBub24tZGVmYXVsdCByZW1vdGUsIGJ1dCBkaWRuJ3Qgc3BlY2lmeSBhIGJyYW5jaCB0bworICogICAgbWVyZ2UuIFdlIGNhbid0IHVzZSB0aGUgY29uZmlndXJlZCBvbmUgYmVjYXVzZSBpdCBhcHBsaWVzIHRvIHRoZSBkZWZhdWx0CisgKiAgICByZW1vdGUsIHRodXMgdGhlIHVzZXIgbXVzdCBzcGVjaWZ5IHRoZSBicmFuY2hlcyB0byBtZXJnZS4KKyAqCisgKiAzLiBXZSBmZXRjaGVkIGZyb20gdGhlIGJyYW5jaCdzIG9yIHJlcG8ncyBkZWZhdWx0IHJlbW90ZSwgYnV0OgorICoKKyAqICAgIGEuIFdlIGFyZSBub3Qgb24gYSBicmFuY2gsIHNvIHRoZXJlIHdpbGwgbmV2ZXIgYmUgYSBjb25maWd1cmVkIGJyYW5jaCB0bworICogICAgICAgbWVyZ2Ugd2l0aC4KKyAqCisgKiAgICBiLiBXZSBhcmUgb24gYSBicmFuY2gsIGJ1dCB0aGVyZSBpcyBubyBjb25maWd1cmVkIGJyYW5jaCB0byBtZXJnZSB3aXRoLgorICoKKyAqIDQuIFdlIGZldGNoZWQgZnJvbSB0aGUgYnJhbmNoJ3Mgb3IgcmVwbydzIGRlZmF1bHQgcmVtb3RlLCBidXQgdGhlIGNvbmZpZ3VyZWQKKyAqICAgIGJyYW5jaCB0byBtZXJnZSBkaWRuJ3QgZ2V0IGZldGNoZWQuIChFaXRoZXIgaXQgZG9lc24ndCBleGlzdCwgb3Igd2Fzbid0CisgKiAgICBwYXJ0IG9mIHRoZSBjb25maWd1cmVkIGZldGNoIHJlZnNwZWMuKQorICovCitzdGF0aWMgdm9pZCBOT1JFVFVSTiBkaWVfbm9fbWVyZ2VfY2FuZGlkYXRlcyhjb25zdCBjaGFyICpyZXBvLCBjb25zdCBjaGFyICoqcmVmc3BlY3MpCit7CisJc3RydWN0IGJyYW5jaCAqY3Vycl9icmFuY2ggPSBicmFuY2hfZ2V0KCJIRUFEIik7CisJY29uc3QgY2hhciAqcmVtb3RlID0gY3Vycl9icmFuY2ggPyBjdXJyX2JyYW5jaC0+cmVtb3RlX25hbWUgOiBOVUxMOworCisJaWYgKCpyZWZzcGVjcykgeworCQlpZiAob3B0X3JlYmFzZSkKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJUaGVyZSBpcyBubyBjYW5kaWRhdGUgZm9yIHJlYmFzaW5nIGFnYWluc3QgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCBmZXRjaGVkLiIpKTsKKwkJZWxzZQorCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIlRoZXJlIGFyZSBubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iKSk7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisJCQkJCSJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIpKTsKKwl9IGVsc2UgaWYgKHJlcG8gJiYgY3Vycl9icmFuY2ggJiYgKCFyZW1vdGUgfHwgc3RyY21wKHJlcG8sIHJlbW90ZSkpKSB7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorCQkJImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisJCQkiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iKSwKKwkJCXJlcG8pOworCX0gZWxzZSBpZiAoIWN1cnJfYnJhbmNoKSB7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIikpOworCQlpZiAob3B0X3JlYmFzZSkKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuIikpOworCQllbHNlCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIG1lcmdlIHdpdGguIikpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIpKTsKKwkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgIiAgICBnaXQgcHVsbCAlcyAlcyIsIF8oIjxyZW1vdGU+IiksIF8oIjxicmFuY2g+IikpOworCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJfSBlbHNlIGlmICghY3Vycl9icmFuY2gtPm1lcmdlX25yKSB7CisJCWNvbnN0IGNoYXIgKnJlbW90ZV9uYW1lID0gTlVMTDsKKworCQlpZiAoZm9yX2VhY2hfcmVtb3RlKGdldF9vbmx5X3JlbW90ZSwgJnJlbW90ZV9uYW1lKSB8fCAhcmVtb3RlX25hbWUpCisJCQlyZW1vdGVfbmFtZSA9IF8oIjxyZW1vdGU+Iik7CisKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBicmFuY2guIikpOworCQlpZiAob3B0X3JlYmFzZSkKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuIikpOworCQllbHNlCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIG1lcmdlIHdpdGguIikpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIpKTsKKwkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgIiAgICBnaXQgcHVsbCAlcyAlcyIsIF8oIjxyZW1vdGU+IiksIF8oIjxicmFuY2g+IikpOworCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDoiKSk7CisJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy8lcyAlc1xuIiwKKwkJCQlyZW1vdGVfbmFtZSwgXygiPGJyYW5jaD4iKSwgY3Vycl9icmFuY2gtPm5hbWUpOworCX0gZWxzZQorCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorCQkJImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIpLAorCQkJKmN1cnJfYnJhbmNoLT5tZXJnZV9uYW1lKTsKKwlleGl0KDEpOworfQorCisvKioKKyAqIFBhcnNlcyBhcmd2IGludG8gWzxyZXBvPiBbPHJlZnNwZWNzPi4uLl1dLCByZXR1cm5pbmcgdGhlaXIgdmFsdWVzIGluIGByZXBvYAorICogYXMgYSBzdHJpbmcgYW5kIGByZWZzcGVjc2AgYXMgYSBudWxsLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncy4gSWYgYHJlcG9gCisgKiBpcyBub3QgcHJvdmlkZWQgaW4gYXJndiwgaXQgaXMgc2V0IHRvIE5VTEwuCisgKi8KK3N0YXRpYyB2b2lkIHBhcnNlX3JlcG9fcmVmc3BlY3MoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICoqcmVwbywKKwkJY29uc3QgY2hhciAqKipyZWZzcGVjcykKK3sKKwlpZiAoYXJnYyA+IDApIHsKKwkJKnJlcG8gPSAqYXJndisrOworCQlhcmdjLS07CisJfSBlbHNlCisJCSpyZXBvID0gTlVMTDsKKwkqcmVmc3BlY3MgPSBhcmd2OworfQorCisvKioKKyAqIFJ1bnMgZ2l0LWZldGNoLCByZXR1cm5pbmcgaXRzIGV4aXQgc3RhdHVzLiBgcmVwb2AgYW5kIGByZWZzcGVjc2AgYXJlIHRoZQorICogcmVwb3NpdG9yeSBhbmQgcmVmc3BlY3MgdG8gZmV0Y2gsIG9yIE5VTEwgaWYgdGhleSBhcmUgbm90IHByb3ZpZGVkLgorICovCitzdGF0aWMgaW50IHJ1bl9mZXRjaChjb25zdCBjaGFyICpyZXBvLCBjb25zdCBjaGFyICoqcmVmc3BlY3MpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlpbnQgcmV0OworCisJYXJndl9hcnJheV9wdXNobCgmYXJncywgImZldGNoIiwgIi0tdXBkYXRlLWhlYWQtb2siLCBOVUxMKTsKKworCS8qIFNoYXJlZCBvcHRpb25zICovCisJYXJndl9wdXNoX3ZlcmJvc2l0eSgmYXJncyk7CisJaWYgKG9wdF9wcm9ncmVzcykKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfcHJvZ3Jlc3MpOworCisJLyogT3B0aW9ucyBwYXNzZWQgdG8gZ2l0LWZldGNoICovCisJaWYgKG9wdF9hbGwpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2FsbCk7CisJaWYgKG9wdF9hcHBlbmQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2FwcGVuZCk7CisJaWYgKG9wdF91cGxvYWRfcGFjaykKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfdXBsb2FkX3BhY2spOworCWFyZ3ZfcHVzaF9mb3JjZSgmYXJncyk7CisJaWYgKG9wdF90YWdzKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF90YWdzKTsKKwlpZiAob3B0X3BydW5lKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF9wcnVuZSk7CisJaWYgKHJlY3Vyc2Vfc3VibW9kdWxlcyAhPSBSRUNVUlNFX1NVQk1PRFVMRVNfREVGQVVMVCkKKwkJc3dpdGNoIChyZWN1cnNlX3N1Ym1vZHVsZXMpIHsKKwkJY2FzZSBSRUNVUlNFX1NVQk1PRFVMRVNfT046CisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXJlY3Vyc2Utc3VibW9kdWxlcz1vbiIpOworCQkJYnJlYWs7CisJCWNhc2UgUkVDVVJTRV9TVUJNT0RVTEVTX09GRjoKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tcmVjdXJzZS1zdWJtb2R1bGVzPW5vIik7CisJCQlicmVhazsKKwkJY2FzZSBSRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EOgorCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygic3VibW9kdWxlIHJlY3Vyc2lvbiBvcHRpb24gbm90IHVuZGVyc3Rvb2QiKTsKKwkJfQorCWlmIChtYXhfY2hpbGRyZW4pCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgbWF4X2NoaWxkcmVuKTsKKwlpZiAob3B0X2RyeV9ydW4pCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tZHJ5LXJ1biIpOworCWlmIChvcHRfa2VlcCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfa2VlcCk7CisJaWYgKG9wdF9kZXB0aCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfZGVwdGgpOworCWlmIChvcHRfdW5zaGFsbG93KQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF91bnNoYWxsb3cpOworCWlmIChvcHRfdXBkYXRlX3NoYWxsb3cpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X3VwZGF0ZV9zaGFsbG93KTsKKwlpZiAob3B0X3JlZm1hcCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfcmVmbWFwKTsKKwlpZiAob3B0X2lwdjQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2lwdjQpOworCWlmIChvcHRfaXB2NikKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfaXB2Nik7CisJaWYgKG9wdF9zaG93X2ZvcmNlZF91cGRhdGVzID4gMCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1zaG93LWZvcmNlZC11cGRhdGVzIik7CisJZWxzZSBpZiAob3B0X3Nob3dfZm9yY2VkX3VwZGF0ZXMgPT0gMCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1uby1zaG93LWZvcmNlZC11cGRhdGVzIik7CisJaWYgKHNldF91cHN0cmVhbSkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBzZXRfdXBzdHJlYW0pOworCWFyZ3ZfYXJyYXlfcHVzaHYoJmFyZ3MsIG9wdF9mZXRjaC5hcmd2KTsKKworCWlmIChyZXBvKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgcmVwbyk7CisJCWFyZ3ZfYXJyYXlfcHVzaHYoJmFyZ3MsIHJlZnNwZWNzKTsKKwl9IGVsc2UgaWYgKCpyZWZzcGVjcykKKwkJQlVHKCJyZWZzcGVjcyB3aXRob3V0IHJlcG8/Iik7CisJcmV0ID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJncy5hcmd2LCBSVU5fR0lUX0NNRCk7CisJYXJndl9hcnJheV9jbGVhcigmYXJncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiAiUHVsbHMgaW50byB2b2lkIiBieSBicmFuY2hpbmcgb2ZmIG1lcmdlX2hlYWQuCisgKi8KK3N0YXRpYyBpbnQgcHVsbF9pbnRvX3ZvaWQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbWVyZ2VfaGVhZCwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY3Vycl9oZWFkKQoreworCWlmIChvcHRfdmVyaWZ5X3NpZ25hdHVyZXMpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXQodGhlX3JlcG9zaXRvcnksIG1lcmdlX2hlYWQpOworCQlpZiAoIWNvbW1pdCkKKwkJCWRpZShfKCJ1bmFibGUgdG8gYWNjZXNzIGNvbW1pdCAlcyIpLAorCQkJICAgIG9pZF90b19oZXgobWVyZ2VfaGVhZCkpOworCisJCXZlcmlmeV9tZXJnZV9zaWduYXR1cmUoY29tbWl0LCBvcHRfdmVyYm9zaXR5LAorCQkJCSAgICAgICBjaGVja190cnVzdF9sZXZlbCk7CisJfQorCisJLyoKKwkgKiBUd28td2F5IG1lcmdlOiB3ZSB0cmVhdCB0aGUgaW5kZXggYXMgYmFzZWQgb24gYW4gZW1wdHkgdHJlZSwKKwkgKiBhbmQgdHJ5IHRvIGZhc3QtZm9yd2FyZCB0byBIRUFELiBUaGlzIGVuc3VyZXMgd2Ugd2lsbCBub3QgbG9zZQorCSAqIGluZGV4L3dvcmt0cmVlIGNoYW5nZXMgdGhhdCB0aGUgdXNlciBhbHJlYWR5IG1hZGUgb24gdGhlIHVuYm9ybgorCSAqIGJyYW5jaC4KKwkgKi8KKwlpZiAoY2hlY2tvdXRfZmFzdF9mb3J3YXJkKHRoZV9yZXBvc2l0b3J5LAorCQkJCSAgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSwKKwkJCQkgIG1lcmdlX2hlYWQsIDApKQorCQlyZXR1cm4gMTsKKworCWlmICh1cGRhdGVfcmVmKCJpbml0aWFsIHB1bGwiLCAiSEVBRCIsIG1lcmdlX2hlYWQsIGN1cnJfaGVhZCwgMCwgVVBEQVRFX1JFRlNfRElFX09OX0VSUikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmViYXNlX3N1Ym1vZHVsZXModm9pZCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCWNwLmdpdF9jbWQgPSAxOworCWNwLm5vX3N0ZGluID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAic3VibW9kdWxlIiwgInVwZGF0ZSIsCisJCQkJICAgIi0tcmVjdXJzaXZlIiwgIi0tcmViYXNlIiwgTlVMTCk7CisJYXJndl9wdXNoX3ZlcmJvc2l0eSgmY3AuYXJncyk7CisKKwlyZXR1cm4gcnVuX2NvbW1hbmQoJmNwKTsKK30KKworc3RhdGljIGludCB1cGRhdGVfc3VibW9kdWxlcyh2b2lkKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJY3AuZ2l0X2NtZCA9IDE7CisJY3Aubm9fc3RkaW4gPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJzdWJtb2R1bGUiLCAidXBkYXRlIiwKKwkJCQkgICAiLS1yZWN1cnNpdmUiLCAiLS1jaGVja291dCIsIE5VTEwpOworCWFyZ3ZfcHVzaF92ZXJib3NpdHkoJmNwLmFyZ3MpOworCisJcmV0dXJuIHJ1bl9jb21tYW5kKCZjcCk7Cit9CisKKy8qKgorICogUnVucyBnaXQtbWVyZ2UsIHJldHVybmluZyBpdHMgZXhpdCBzdGF0dXMuCisgKi8KK3N0YXRpYyBpbnQgcnVuX21lcmdlKHZvaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCisJYXJndl9hcnJheV9wdXNobCgmYXJncywgIm1lcmdlIiwgTlVMTCk7CisKKwkvKiBTaGFyZWQgb3B0aW9ucyAqLworCWFyZ3ZfcHVzaF92ZXJib3NpdHkoJmFyZ3MpOworCWlmIChvcHRfcHJvZ3Jlc3MpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X3Byb2dyZXNzKTsKKworCS8qIE9wdGlvbnMgcGFzc2VkIHRvIGdpdC1tZXJnZSAqLworCWlmIChvcHRfZGlmZnN0YXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2RpZmZzdGF0KTsKKwlpZiAob3B0X2xvZykKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfbG9nKTsKKwlpZiAob3B0X3NpZ25vZmYpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X3NpZ25vZmYpOworCWlmIChvcHRfc3F1YXNoKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF9zcXVhc2gpOworCWlmIChvcHRfY29tbWl0KQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF9jb21taXQpOworCWlmIChvcHRfZWRpdCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfZWRpdCk7CisJaWYgKGNsZWFudXBfYXJnKQorCQlhcmd2X2FycmF5X3B1c2hmKCZhcmdzLCAiLS1jbGVhbnVwPSVzIiwgY2xlYW51cF9hcmcpOworCWlmIChvcHRfZmYpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2ZmKTsKKwlpZiAob3B0X3ZlcmlmeV9zaWduYXR1cmVzKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF92ZXJpZnlfc2lnbmF0dXJlcyk7CisJYXJndl9hcnJheV9wdXNodigmYXJncywgb3B0X3N0cmF0ZWdpZXMuYXJndik7CisJYXJndl9hcnJheV9wdXNodigmYXJncywgb3B0X3N0cmF0ZWd5X29wdHMuYXJndik7CisJaWYgKG9wdF9ncGdfc2lnbikKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfZ3BnX3NpZ24pOworCWlmIChvcHRfYXV0b3N0YXNoID09IDApCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tbm8tYXV0b3N0YXNoIik7CisJZWxzZSBpZiAob3B0X2F1dG9zdGFzaCA9PSAxKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLWF1dG9zdGFzaCIpOworCWlmIChvcHRfYWxsb3dfdW5yZWxhdGVkX2hpc3RvcmllcyA+IDApCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyIpOworCisJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiRkVUQ0hfSEVBRCIpOworCXJldCA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MuYXJndiwgUlVOX0dJVF9DTUQpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogUmV0dXJucyByZW1vdGUncyB1cHN0cmVhbSBicmFuY2ggZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4gSWYgcmVtb3RlIGlzIE5VTEwsCisgKiB0aGUgY3VycmVudCBicmFuY2gncyBjb25maWd1cmVkIGRlZmF1bHQgcmVtb3RlIGlzIHVzZWQuIFJldHVybnMgTlVMTCBpZgorICogYHJlbW90ZWAgZG9lcyBub3QgbmFtZSBhIHZhbGlkIHJlbW90ZSwgSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCwKKyAqIHJlbW90ZSBpcyBub3QgdGhlIGJyYW5jaCdzIGNvbmZpZ3VyZWQgcmVtb3RlIG9yIHRoZSBicmFuY2ggZG9lcyBub3QgaGF2ZSBhbnkKKyAqIGNvbmZpZ3VyZWQgdXBzdHJlYW0gYnJhbmNoLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3Vwc3RyZWFtX2JyYW5jaChjb25zdCBjaGFyICpyZW1vdGUpCit7CisJc3RydWN0IHJlbW90ZSAqcm07CisJc3RydWN0IGJyYW5jaCAqY3Vycl9icmFuY2g7CisJY29uc3QgY2hhciAqY3Vycl9icmFuY2hfcmVtb3RlOworCisJcm0gPSByZW1vdGVfZ2V0KHJlbW90ZSk7CisJaWYgKCFybSkKKwkJcmV0dXJuIE5VTEw7CisKKwljdXJyX2JyYW5jaCA9IGJyYW5jaF9nZXQoIkhFQUQiKTsKKwlpZiAoIWN1cnJfYnJhbmNoKQorCQlyZXR1cm4gTlVMTDsKKworCWN1cnJfYnJhbmNoX3JlbW90ZSA9IHJlbW90ZV9mb3JfYnJhbmNoKGN1cnJfYnJhbmNoLCBOVUxMKTsKKwlhc3NlcnQoY3Vycl9icmFuY2hfcmVtb3RlKTsKKworCWlmIChzdHJjbXAoY3Vycl9icmFuY2hfcmVtb3RlLCBybS0+bmFtZSkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGJyYW5jaF9nZXRfdXBzdHJlYW0oY3Vycl9icmFuY2gsIE5VTEwpOworfQorCisvKioKKyAqIERlcml2ZXMgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2ggZnJvbSB0aGUgcmVtb3RlIGFuZCByZWZzcGVjLgorICoKKyAqIEZJWE1FOiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoZSBkZWZhdWx0IG1hcHBpbmcgb2YKKyAqIHJlZnMvaGVhZHMvPGJyYW5jaF9uYW1lPiB0byByZWZzL3JlbW90ZXMvPHJlbW90ZV9uYW1lPi88YnJhbmNoX25hbWU+LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3RyYWNraW5nX2JyYW5jaChjb25zdCBjaGFyICpyZW1vdGUsIGNvbnN0IGNoYXIgKnJlZnNwZWMpCit7CisJc3RydWN0IHJlZnNwZWNfaXRlbSBzcGVjOworCWNvbnN0IGNoYXIgKnNwZWNfc3JjOworCWNvbnN0IGNoYXIgKm1lcmdlX2JyYW5jaDsKKworCXJlZnNwZWNfaXRlbV9pbml0X29yX2RpZSgmc3BlYywgcmVmc3BlYywgUkVGU1BFQ19GRVRDSCk7CisJc3BlY19zcmMgPSBzcGVjLnNyYzsKKwlpZiAoISpzcGVjX3NyYyB8fCAhc3RyY21wKHNwZWNfc3JjLCAiSEVBRCIpKQorCQlzcGVjX3NyYyA9ICJIRUFEIjsKKwllbHNlIGlmIChza2lwX3ByZWZpeChzcGVjX3NyYywgImhlYWRzLyIsICZzcGVjX3NyYykpCisJCTsKKwllbHNlIGlmIChza2lwX3ByZWZpeChzcGVjX3NyYywgInJlZnMvaGVhZHMvIiwgJnNwZWNfc3JjKSkKKwkJOworCWVsc2UgaWYgKHN0YXJ0c193aXRoKHNwZWNfc3JjLCAicmVmcy8iKSB8fAorCQlzdGFydHNfd2l0aChzcGVjX3NyYywgInRhZ3MvIikgfHwKKwkJc3RhcnRzX3dpdGgoc3BlY19zcmMsICJyZW1vdGVzLyIpKQorCQlzcGVjX3NyYyA9ICIiOworCisJaWYgKCpzcGVjX3NyYykgeworCQlpZiAoIXN0cmNtcChyZW1vdGUsICIuIikpCisJCQltZXJnZV9icmFuY2ggPSBta3BhdGgoInJlZnMvaGVhZHMvJXMiLCBzcGVjX3NyYyk7CisJCWVsc2UKKwkJCW1lcmdlX2JyYW5jaCA9IG1rcGF0aCgicmVmcy9yZW1vdGVzLyVzLyVzIiwgcmVtb3RlLCBzcGVjX3NyYyk7CisJfSBlbHNlCisJCW1lcmdlX2JyYW5jaCA9IE5VTEw7CisKKwlyZWZzcGVjX2l0ZW1fY2xlYXIoJnNwZWMpOworCXJldHVybiBtZXJnZV9icmFuY2g7Cit9CisKKy8qKgorICogR2l2ZW4gdGhlIHJlcG8gYW5kIHJlZnNwZWNzLCBzZXRzIGZvcmtfcG9pbnQgdG8gdGhlIHBvaW50IGF0IHdoaWNoIHRoZQorICogY3VycmVudCBicmFuY2ggZm9ya2VkIGZyb20gaXRzIHJlbW90ZS10cmFja2luZyBicmFuY2guIFJldHVybnMgMCBvbiBzdWNjZXNzLAorICogLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBnZXRfcmViYXNlX2ZvcmtfcG9pbnQoc3RydWN0IG9iamVjdF9pZCAqZm9ya19wb2ludCwgY29uc3QgY2hhciAqcmVwbywKKwkJY29uc3QgY2hhciAqcmVmc3BlYykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBicmFuY2ggKmN1cnJfYnJhbmNoOworCWNvbnN0IGNoYXIgKnJlbW90ZV9icmFuY2g7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJY3Vycl9icmFuY2ggPSBicmFuY2hfZ2V0KCJIRUFEIik7CisJaWYgKCFjdXJyX2JyYW5jaCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlZnNwZWMpCisJCXJlbW90ZV9icmFuY2ggPSBnZXRfdHJhY2tpbmdfYnJhbmNoKHJlcG8sIHJlZnNwZWMpOworCWVsc2UKKwkJcmVtb3RlX2JyYW5jaCA9IGdldF91cHN0cmVhbV9icmFuY2gocmVwbyk7CisKKwlpZiAoIXJlbW90ZV9icmFuY2gpCisJCXJldHVybiAtMTsKKworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJtZXJnZS1iYXNlIiwgIi0tZm9yay1wb2ludCIsCisJCQlyZW1vdGVfYnJhbmNoLCBjdXJyX2JyYW5jaC0+bmFtZSwgTlVMTCk7CisJY3Aubm9fc3RkaW4gPSAxOworCWNwLm5vX3N0ZGVyciA9IDE7CisJY3AuZ2l0X2NtZCA9IDE7CisKKwlyZXQgPSBjYXB0dXJlX2NvbW1hbmQoJmNwLCAmc2IsIEdJVF9NQVhfSEVYU1opOworCWlmIChyZXQpCisJCWdvdG8gY2xlYW51cDsKKworCXJldCA9IGdldF9vaWRfaGV4KHNiLmJ1ZiwgZm9ya19wb2ludCk7CisJaWYgKHJldCkKKwkJZ290byBjbGVhbnVwOworCitjbGVhbnVwOgorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldCA/IC0xIDogMDsKK30KKworLyoqCisgKiBTZXRzIG1lcmdlX2Jhc2UgdG8gdGhlIG9jdG9wdXMgbWVyZ2UgYmFzZSBvZiBjdXJyX2hlYWQsIG1lcmdlX2hlYWQgYW5kCisgKiBmb3JrX3BvaW50LiBSZXR1cm5zIDAgaWYgYSBtZXJnZSBiYXNlIGlzIGZvdW5kLCAxIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBnZXRfb2N0b3B1c19tZXJnZV9iYXNlKHN0cnVjdCBvYmplY3RfaWQgKm1lcmdlX2Jhc2UsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmN1cnJfaGVhZCwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbWVyZ2VfaGVhZCwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZm9ya19wb2ludCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJldnMgPSBOVUxMLCAqcmVzdWx0OworCisJY29tbWl0X2xpc3RfaW5zZXJ0KGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCBjdXJyX2hlYWQpLAorCQkJICAgJnJldnMpOworCWNvbW1pdF9saXN0X2luc2VydChsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgbWVyZ2VfaGVhZCksCisJCQkgICAmcmV2cyk7CisJaWYgKCFpc19udWxsX29pZChmb3JrX3BvaW50KSkKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCBmb3JrX3BvaW50KSwKKwkJCQkgICAmcmV2cyk7CisKKwlyZXN1bHQgPSBnZXRfb2N0b3B1c19tZXJnZV9iYXNlcyhyZXZzKTsKKwlmcmVlX2NvbW1pdF9saXN0KHJldnMpOworCXJlZHVjZV9oZWFkc19yZXBsYWNlKCZyZXN1bHQpOworCisJaWYgKCFyZXN1bHQpCisJCXJldHVybiAxOworCisJb2lkY3B5KG1lcmdlX2Jhc2UsICZyZXN1bHQtPml0ZW0tPm9iamVjdC5vaWQpOworCWZyZWVfY29tbWl0X2xpc3QocmVzdWx0KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBHaXZlbiB0aGUgY3VycmVudCBIRUFEIG9pZCwgdGhlIG1lcmdlIGhlYWQgcmV0dXJuZWQgZnJvbSBnaXQtZmV0Y2ggYW5kIHRoZQorICogZm9yayBwb2ludCBjYWxjdWxhdGVkIGJ5IGdldF9yZWJhc2VfZm9ya19wb2ludCgpLCBydW5zIGdpdC1yZWJhc2Ugd2l0aCB0aGUKKyAqIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBpdHMgZXhpdCBzdGF0dXMuCisgKi8KK3N0YXRpYyBpbnQgcnVuX3JlYmFzZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjdXJyX2hlYWQsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm1lcmdlX2hlYWQsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmZvcmtfcG9pbnQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9jdF9tZXJnZV9iYXNlOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwlpZiAoIWdldF9vY3RvcHVzX21lcmdlX2Jhc2UoJm9jdF9tZXJnZV9iYXNlLCBjdXJyX2hlYWQsIG1lcmdlX2hlYWQsIGZvcmtfcG9pbnQpKQorCQlpZiAoIWlzX251bGxfb2lkKGZvcmtfcG9pbnQpICYmIG9pZGVxKCZvY3RfbWVyZ2VfYmFzZSwgZm9ya19wb2ludCkpCisJCQlmb3JrX3BvaW50ID0gTlVMTDsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgInJlYmFzZSIpOworCisJLyogU2hhcmVkIG9wdGlvbnMgKi8KKwlhcmd2X3B1c2hfdmVyYm9zaXR5KCZhcmdzKTsKKworCS8qIE9wdGlvbnMgcGFzc2VkIHRvIGdpdC1yZWJhc2UgKi8KKwlpZiAob3B0X3JlYmFzZSA9PSBSRUJBU0VfTUVSR0VTKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXJlYmFzZS1tZXJnZXMiKTsKKwllbHNlIGlmIChvcHRfcmViYXNlID09IFJFQkFTRV9QUkVTRVJWRSkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1wcmVzZXJ2ZS1tZXJnZXMiKTsKKwllbHNlIGlmIChvcHRfcmViYXNlID09IFJFQkFTRV9JTlRFUkFDVElWRSkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1pbnRlcmFjdGl2ZSIpOworCWlmIChvcHRfZGlmZnN0YXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2RpZmZzdGF0KTsKKwlhcmd2X2FycmF5X3B1c2h2KCZhcmdzLCBvcHRfc3RyYXRlZ2llcy5hcmd2KTsKKwlhcmd2X2FycmF5X3B1c2h2KCZhcmdzLCBvcHRfc3RyYXRlZ3lfb3B0cy5hcmd2KTsKKwlpZiAob3B0X2dwZ19zaWduKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF9ncGdfc2lnbik7CisJaWYgKG9wdF9hdXRvc3Rhc2ggPT0gMCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1uby1hdXRvc3Rhc2giKTsKKwllbHNlIGlmIChvcHRfYXV0b3N0YXNoID09IDEpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tYXV0b3N0YXNoIik7CisJaWYgKG9wdF92ZXJpZnlfc2lnbmF0dXJlcyAmJgorCSAgICAhc3RyY21wKG9wdF92ZXJpZnlfc2lnbmF0dXJlcywgIi0tdmVyaWZ5LXNpZ25hdHVyZXMiKSkKKwkJd2FybmluZyhfKCJpZ25vcmluZyAtLXZlcmlmeS1zaWduYXR1cmVzIGZvciByZWJhc2UiKSk7CisKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLW9udG8iKTsKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9pZF90b19oZXgobWVyZ2VfaGVhZCkpOworCisJaWYgKGZvcmtfcG9pbnQgJiYgIWlzX251bGxfb2lkKGZvcmtfcG9pbnQpKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9pZF90b19oZXgoZm9ya19wb2ludCkpOworCWVsc2UKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvaWRfdG9faGV4KG1lcmdlX2hlYWQpKTsKKworCXJldCA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MuYXJndiwgUlVOX0dJVF9DTUQpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjbWRfcHVsbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpyZXBvLCAqKnJlZnNwZWNzOworCXN0cnVjdCBvaWRfYXJyYXkgbWVyZ2VfaGVhZHMgPSBPSURfQVJSQVlfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9yaWdfaGVhZCwgY3Vycl9oZWFkOworCXN0cnVjdCBvYmplY3RfaWQgcmViYXNlX2ZvcmtfcG9pbnQ7CisJaW50IGF1dG9zdGFzaDsKKworCWlmICghZ2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIpKQorCQlzZXRfcmVmbG9nX21lc3NhZ2UoYXJnYywgYXJndik7CisKKwlnaXRfY29uZmlnKGdpdF9wdWxsX2NvbmZpZywgTlVMTCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIHB1bGxfb3B0aW9ucywgcHVsbF91c2FnZSwgMCk7CisKKwlpZiAoY2xlYW51cF9hcmcpCisJCS8qCisJCSAqIHRoaXMgb25seSBjaGVja3MgdGhlIHZhbGlkaXR5IG9mIGNsZWFudXBfYXJnOyB3ZSBkb24ndCBuZWVkCisJCSAqIGEgdmFsaWQgdmFsdWUgZm9yIHVzZV9lZGl0b3IKKwkJICovCisJCWdldF9jbGVhbnVwX21vZGUoY2xlYW51cF9hcmcsIDApOworCisJcGFyc2VfcmVwb19yZWZzcGVjcyhhcmdjLCBhcmd2LCAmcmVwbywgJnJlZnNwZWNzKTsKKworCWlmICghb3B0X2ZmKQorCQlvcHRfZmYgPSB4c3RyZHVwX29yX251bGwoY29uZmlnX2dldF9mZigpKTsKKworCWlmIChvcHRfcmViYXNlIDwgMCkKKwkJb3B0X3JlYmFzZSA9IGNvbmZpZ19nZXRfcmViYXNlKCk7CisKKwlpZiAocmVhZF9jYWNoZV91bm1lcmdlZCgpKQorCQlkaWVfcmVzb2x2ZV9jb25mbGljdCgicHVsbCIpOworCisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX21lcmdlX2hlYWQodGhlX3JlcG9zaXRvcnkpKSkKKwkJZGllX2NvbmNsdWRlX21lcmdlKCk7CisKKwlpZiAoZ2V0X29pZCgiSEVBRCIsICZvcmlnX2hlYWQpKQorCQlvaWRjbHIoJm9yaWdfaGVhZCk7CisKKwlhdXRvc3Rhc2ggPSBjb25maWdfYXV0b3N0YXNoOworCWlmIChvcHRfcmViYXNlKSB7CisJCWlmIChvcHRfYXV0b3N0YXNoICE9IC0xKQorCQkJYXV0b3N0YXNoID0gb3B0X2F1dG9zdGFzaDsKKworCQlpZiAoaXNfbnVsbF9vaWQoJm9yaWdfaGVhZCkgJiYgIWlzX2NhY2hlX3VuYm9ybigpKQorCQkJZGllKF8oIlVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleC4iKSk7CisKKwkJaWYgKCFhdXRvc3Rhc2gpCisJCQlyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQlOXygicHVsbCB3aXRoIHJlYmFzZSIpLAorCQkJCV8oInBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iKSwgMSwgMCk7CisKKwkJaWYgKGdldF9yZWJhc2VfZm9ya19wb2ludCgmcmViYXNlX2ZvcmtfcG9pbnQsIHJlcG8sICpyZWZzcGVjcykpCisJCQlvaWRjbHIoJnJlYmFzZV9mb3JrX3BvaW50KTsKKwl9CisKKwlpZiAocnVuX2ZldGNoKHJlcG8sIHJlZnNwZWNzKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAob3B0X2RyeV9ydW4pCisJCXJldHVybiAwOworCisJaWYgKGdldF9vaWQoIkhFQUQiLCAmY3Vycl9oZWFkKSkKKwkJb2lkY2xyKCZjdXJyX2hlYWQpOworCisJaWYgKCFpc19udWxsX29pZCgmb3JpZ19oZWFkKSAmJiAhaXNfbnVsbF9vaWQoJmN1cnJfaGVhZCkgJiYKKwkJCSFvaWRlcSgmb3JpZ19oZWFkLCAmY3Vycl9oZWFkKSkgeworCQkvKgorCQkgKiBUaGUgZmV0Y2ggaW52b2x2ZWQgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoLgorCQkgKgorCQkgKiBUaGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXggZmlsZSBhcmUgc3RpbGwgYmFzZWQgb24KKwkJICogb3JpZ19oZWFkIGNvbW1pdCwgYnV0IHdlIGFyZSBtZXJnaW5nIGludG8gY3Vycl9oZWFkLgorCQkgKiBVcGRhdGUgdGhlIHdvcmtpbmcgdHJlZSB0byBtYXRjaCBjdXJyX2hlYWQuCisJCSAqLworCisJCXdhcm5pbmcoXygiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKwkJCSJmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorCQkJImNvbW1pdCAlcy4iKSwgb2lkX3RvX2hleCgmb3JpZ19oZWFkKSk7CisKKwkJaWYgKGNoZWNrb3V0X2Zhc3RfZm9yd2FyZCh0aGVfcmVwb3NpdG9yeSwgJm9yaWdfaGVhZCwKKwkJCQkJICAmY3Vycl9oZWFkLCAwKSkKKwkJCWRpZShfKCJDYW5ub3QgZmFzdC1mb3J3YXJkIHlvdXIgd29ya2luZyB0cmVlLlxuIgorCQkJCSJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisJCQkJIiQgZ2l0IGRpZmYgJXNcbiIKKwkJCQkib3V0cHV0LCBydW5cbiIKKwkJCQkiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisJCQkJInRvIHJlY292ZXIuIiksIG9pZF90b19oZXgoJm9yaWdfaGVhZCkpOworCX0KKworCWdldF9tZXJnZV9oZWFkcygmbWVyZ2VfaGVhZHMpOworCisJaWYgKCFtZXJnZV9oZWFkcy5ucikKKwkJZGllX25vX21lcmdlX2NhbmRpZGF0ZXMocmVwbywgcmVmc3BlY3MpOworCisJaWYgKGlzX251bGxfb2lkKCZvcmlnX2hlYWQpKSB7CisJCWlmIChtZXJnZV9oZWFkcy5uciA+IDEpCisJCQlkaWUoXygiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iKSk7CisJCXJldHVybiBwdWxsX2ludG9fdm9pZChtZXJnZV9oZWFkcy5vaWQsICZjdXJyX2hlYWQpOworCX0KKwlpZiAob3B0X3JlYmFzZSAmJiBtZXJnZV9oZWFkcy5uciA+IDEpCisJCWRpZShfKCJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIikpOworCisJaWYgKG9wdF9yZWJhc2UpIHsKKwkJaW50IHJldCA9IDA7CisJCWludCByYW5fZmYgPSAwOworCQlpZiAoKHJlY3Vyc2Vfc3VibW9kdWxlcyA9PSBSRUNVUlNFX1NVQk1PRFVMRVNfT04gfHwKKwkJICAgICByZWN1cnNlX3N1Ym1vZHVsZXMgPT0gUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORCkgJiYKKwkJICAgIHN1Ym1vZHVsZV90b3VjaGVzX2luX3JhbmdlKHRoZV9yZXBvc2l0b3J5LCAmcmViYXNlX2ZvcmtfcG9pbnQsICZjdXJyX2hlYWQpKQorCQkJZGllKF8oImNhbm5vdCByZWJhc2Ugd2l0aCBsb2NhbGx5IHJlY29yZGVkIHN1Ym1vZHVsZSBtb2RpZmljYXRpb25zIikpOworCQlpZiAoIWF1dG9zdGFzaCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gTlVMTDsKKwkJCXN0cnVjdCBjb21taXQgKm1lcmdlX2hlYWQsICpoZWFkOworCisJCQloZWFkID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksCisJCQkJCQkgICAgICAgJm9yaWdfaGVhZCk7CisJCQljb21taXRfbGlzdF9pbnNlcnQoaGVhZCwgJmxpc3QpOworCQkJbWVyZ2VfaGVhZCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSAgICAgJm1lcmdlX2hlYWRzLm9pZFswXSk7CisJCQlpZiAoaXNfZGVzY2VuZGFudF9vZihtZXJnZV9oZWFkLCBsaXN0KSkgeworCQkJCS8qIHdlIGNhbiBmYXN0LWZvcndhcmQgdGhpcyB3aXRob3V0IGludm9raW5nIHJlYmFzZSAqLworCQkJCW9wdF9mZiA9ICItLWZmLW9ubHkiOworCQkJCXJhbl9mZiA9IDE7CisJCQkJcmV0ID0gcnVuX21lcmdlKCk7CisJCQl9CisJCX0KKwkJaWYgKCFyYW5fZmYpCisJCQlyZXQgPSBydW5fcmViYXNlKCZjdXJyX2hlYWQsIG1lcmdlX2hlYWRzLm9pZCwgJnJlYmFzZV9mb3JrX3BvaW50KTsKKworCQlpZiAoIXJldCAmJiAocmVjdXJzZV9zdWJtb2R1bGVzID09IFJFQ1VSU0VfU1VCTU9EVUxFU19PTiB8fAorCQkJICAgICByZWN1cnNlX3N1Ym1vZHVsZXMgPT0gUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORCkpCisJCQlyZXQgPSByZWJhc2Vfc3VibW9kdWxlcygpOworCisJCXJldHVybiByZXQ7CisJfSBlbHNlIHsKKwkJaW50IHJldCA9IHJ1bl9tZXJnZSgpOworCQlpZiAoIXJldCAmJiAocmVjdXJzZV9zdWJtb2R1bGVzID09IFJFQ1VSU0VfU1VCTU9EVUxFU19PTiB8fAorCQkJICAgICByZWN1cnNlX3N1Ym1vZHVsZXMgPT0gUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORCkpCisJCQlyZXQgPSB1cGRhdGVfc3VibW9kdWxlcygpOworCQlyZXR1cm4gcmV0OworCX0KK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcHVzaC5jIGIvYnVpbHRpbi9wdXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM5NDA3OAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcHVzaC5jCkBAIC0wLDAgKzEsNjQ5IEBACisvKgorICogImdpdCBwdXNoIgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVmc3BlYy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUtY29uZmlnLmgiCisjaW5jbHVkZSAic2VuZC1wYWNrLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwdXNoX3VzYWdlW10gPSB7CisJTl8oImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIiksCisJTlVMTCwKK307CisKK3N0YXRpYyBpbnQgcHVzaF91c2VfY29sb3IgPSAtMTsKK3N0YXRpYyBjaGFyIHB1c2hfY29sb3JzW11bQ09MT1JfTUFYTEVOXSA9IHsKKwlHSVRfQ09MT1JfUkVTRVQsCisJR0lUX0NPTE9SX1JFRCwJLyogRVJST1IgKi8KK307CisKK2VudW0gY29sb3JfcHVzaCB7CisJUFVTSF9DT0xPUl9SRVNFVCA9IDAsCisJUFVTSF9DT0xPUl9FUlJPUiA9IDEKK307CisKK3N0YXRpYyBpbnQgcGFyc2VfcHVzaF9jb2xvcl9zbG90KGNvbnN0IGNoYXIgKnNsb3QpCit7CisJaWYgKCFzdHJjYXNlY21wKHNsb3QsICJyZXNldCIpKQorCQlyZXR1cm4gUFVTSF9DT0xPUl9SRVNFVDsKKwlpZiAoIXN0cmNhc2VjbXAoc2xvdCwgImVycm9yIikpCisJCXJldHVybiBQVVNIX0NPTE9SX0VSUk9SOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnB1c2hfZ2V0X2NvbG9yKGVudW0gY29sb3JfcHVzaCBpeCkKK3sKKwlpZiAod2FudF9jb2xvcl9zdGRlcnIocHVzaF91c2VfY29sb3IpKQorCQlyZXR1cm4gcHVzaF9jb2xvcnNbaXhdOworCXJldHVybiAiIjsKK30KKworc3RhdGljIGludCB0aGluID0gMTsKK3N0YXRpYyBpbnQgZGVsZXRlcmVmczsKK3N0YXRpYyBjb25zdCBjaGFyICpyZWNlaXZlcGFjazsKK3N0YXRpYyBpbnQgdmVyYm9zaXR5Oworc3RhdGljIGludCBwcm9ncmVzcyA9IC0xOworc3RhdGljIGludCByZWN1cnNlX3N1Ym1vZHVsZXMgPSBSRUNVUlNFX1NVQk1PRFVMRVNfREVGQVVMVDsKK3N0YXRpYyBlbnVtIHRyYW5zcG9ydF9mYW1pbHkgZmFtaWx5OworCitzdGF0aWMgc3RydWN0IHB1c2hfY2FzX29wdGlvbiBjYXM7CisKK3N0YXRpYyBzdHJ1Y3QgcmVmc3BlYyBycyA9IFJFRlNQRUNfSU5JVF9QVVNIOworCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IHB1c2hfb3B0aW9uc19jb25maWcgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworc3RhdGljIGNvbnN0IGNoYXIgKm1hcF9yZWZzcGVjKGNvbnN0IGNoYXIgKnJlZiwKKwkJCSAgICAgICBzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHN0cnVjdCByZWYgKmxvY2FsX3JlZnMpCit7CisJY29uc3QgY2hhciAqYnJhbmNoX25hbWU7CisJc3RydWN0IHJlZiAqbWF0Y2hlZCA9IE5VTEw7CisKKwkvKiBEb2VzICJyZWYiIHVuaXF1ZWx5IG5hbWUgb3VyIHJlZj8gKi8KKwlpZiAoY291bnRfcmVmc3BlY19tYXRjaChyZWYsIGxvY2FsX3JlZnMsICZtYXRjaGVkKSAhPSAxKQorCQlyZXR1cm4gcmVmOworCisJaWYgKHJlbW90ZS0+cHVzaC5ucikgeworCQlzdHJ1Y3QgcmVmc3BlY19pdGVtIHF1ZXJ5OworCQltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2Yoc3RydWN0IHJlZnNwZWNfaXRlbSkpOworCQlxdWVyeS5zcmMgPSBtYXRjaGVkLT5uYW1lOworCQlpZiAoIXF1ZXJ5X3JlZnNwZWNzKCZyZW1vdGUtPnB1c2gsICZxdWVyeSkgJiYgcXVlcnkuZHN0KSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzJXM6JXMiLAorCQkJCSAgICBxdWVyeS5mb3JjZSA/ICIrIiA6ICIiLAorCQkJCSAgICBxdWVyeS5zcmMsIHF1ZXJ5LmRzdCk7CisJCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwkJfQorCX0KKworCWlmIChwdXNoX2RlZmF1bHQgPT0gUFVTSF9ERUZBVUxUX1VQU1RSRUFNICYmCisJICAgIHNraXBfcHJlZml4KG1hdGNoZWQtPm5hbWUsICJyZWZzL2hlYWRzLyIsICZicmFuY2hfbmFtZSkpIHsKKwkJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChicmFuY2hfbmFtZSk7CisJCWlmIChicmFuY2gtPm1lcmdlX25yID09IDEgJiYgYnJhbmNoLT5tZXJnZVswXS0+c3JjKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzOiVzIiwKKwkJCQkgICAgcmVmLCBicmFuY2gtPm1lcmdlWzBdLT5zcmMpOworCQkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVmOworfQorCitzdGF0aWMgdm9pZCBzZXRfcmVmc3BlY3MoY29uc3QgY2hhciAqKnJlZnMsIGludCBuciwgY29uc3QgY2hhciAqcmVwbykKK3sKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGUgPSBOVUxMOworCXN0cnVjdCByZWYgKmxvY2FsX3JlZnMgPSBOVUxMOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcmVmID0gcmVmc1tpXTsKKwkJaWYgKCFzdHJjbXAoInRhZyIsIHJlZikpIHsKKwkJCXN0cnVjdCBzdHJidWYgdGFncmVmID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAobnIgPD0gKytpKQorCQkJCWRpZShfKCJ0YWcgc2hvcnRoYW5kIHdpdGhvdXQgPHRhZz4iKSk7CisJCQlyZWYgPSByZWZzW2ldOworCQkJaWYgKGRlbGV0ZXJlZnMpCisJCQkJc3RyYnVmX2FkZGYoJnRhZ3JlZiwgIjpyZWZzL3RhZ3MvJXMiLCByZWYpOworCQkJZWxzZQorCQkJCXN0cmJ1Zl9hZGRmKCZ0YWdyZWYsICJyZWZzL3RhZ3MvJXMiLCByZWYpOworCQkJcmVmID0gc3RyYnVmX2RldGFjaCgmdGFncmVmLCBOVUxMKTsKKwkJfSBlbHNlIGlmIChkZWxldGVyZWZzKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGRlbHJlZiA9IFNUUkJVRl9JTklUOworCQkJaWYgKHN0cmNocihyZWYsICc6JykpCisJCQkJZGllKF8oIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIikpOworCQkJc3RyYnVmX2FkZGYoJmRlbHJlZiwgIjolcyIsIHJlZik7CisJCQlyZWYgPSBzdHJidWZfZGV0YWNoKCZkZWxyZWYsIE5VTEwpOworCQl9IGVsc2UgaWYgKCFzdHJjaHIocmVmLCAnOicpKSB7CisJCQlpZiAoIXJlbW90ZSkgeworCQkJCS8qIGxhemlseSBncmFiIHJlbW90ZSBhbmQgbG9jYWxfcmVmcyAqLworCQkJCXJlbW90ZSA9IHJlbW90ZV9nZXQocmVwbyk7CisJCQkJbG9jYWxfcmVmcyA9IGdldF9sb2NhbF9oZWFkcygpOworCQkJfQorCQkJcmVmID0gbWFwX3JlZnNwZWMocmVmLCByZW1vdGUsIGxvY2FsX3JlZnMpOworCQl9CisJCXJlZnNwZWNfYXBwZW5kKCZycywgcmVmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHVzaF91cmxfb2ZfcmVtb3RlKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqKip1cmxfcCkKK3sKKwlpZiAocmVtb3RlLT5wdXNodXJsX25yKSB7CisJCSp1cmxfcCA9IHJlbW90ZS0+cHVzaHVybDsKKwkJcmV0dXJuIHJlbW90ZS0+cHVzaHVybF9ucjsKKwl9CisJKnVybF9wID0gcmVtb3RlLT51cmw7CisJcmV0dXJuIHJlbW90ZS0+dXJsX25yOworfQorCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBkaWVfcHVzaF9zaW1wbGUoc3RydWN0IGJyYW5jaCAqYnJhbmNoLAorCQkJCSAgICAgc3RydWN0IHJlbW90ZSAqcmVtb3RlKQoreworCS8qCisJICogVGhlcmUncyBubyBwb2ludCBpbiB1c2luZyBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZiBoZXJlLAorCSAqIGFzIHRoZSBhbWJpZ3VpdHkgd291bGQgYmUgb24gdGhlIHJlbW90ZSBzaWRlLCBub3Qgd2hhdAorCSAqIHdlIGhhdmUgbG9jYWxseS4gUGx1cywgdGhpcyBpcyBzdXBwb3NlZCB0byBiZSB0aGUgc2ltcGxlCisJICogbW9kZS4gSWYgdGhlIHVzZXIgaXMgZG9pbmcgc29tZXRoaW5nIGNyYXp5IGxpa2Ugc2V0dGluZworCSAqIHVwc3RyZWFtIHRvIGEgbm9uLWJyYW5jaCwgd2Ugc2hvdWxkIHByb2JhYmx5IGJlIHNob3dpbmcKKwkgKiB0aGVtIHRoZSBiaWcgdWdseSBmdWxseSBxdWFsaWZpZWQgcmVmLgorCSAqLworCWNvbnN0IGNoYXIgKmFkdmljZV9tYXliZSA9ICIiOworCWNvbnN0IGNoYXIgKnNob3J0X3Vwc3RyZWFtID0gYnJhbmNoLT5tZXJnZVswXS0+c3JjOworCisJc2tpcF9wcmVmaXgoc2hvcnRfdXBzdHJlYW0sICJyZWZzL2hlYWRzLyIsICZzaG9ydF91cHN0cmVhbSk7CisKKwkvKgorCSAqIERvbid0IHNob3cgYWR2aWNlIGZvciBwZW9wbGUgd2hvIGV4cGxpY2l0bHkgc2V0CisJICogcHVzaC5kZWZhdWx0LgorCSAqLworCWlmIChwdXNoX2RlZmF1bHQgPT0gUFVTSF9ERUZBVUxUX1VOU1BFQ0lGSUVEKQorCQlhZHZpY2VfbWF5YmUgPSBfKCJcbiIKKwkJCQkgIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCAiCisJCQkJICJzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIpOworCWRpZShfKCJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKwkgICAgICAidGhlIG5hbWUgb2YgeW91ciBjdXJyZW50IGJyYW5jaC4gIFRvIHB1c2ggdG8gdGhlIHVwc3RyZWFtIGJyYW5jaFxuIgorCSAgICAgICJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKwkgICAgICAiXG4iCisJICAgICAgIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisJICAgICAgIlxuIgorCSAgICAgICJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKwkgICAgICAiXG4iCisJICAgICAgIiAgICBnaXQgcHVzaCAlcyBIRUFEXG4iCisJICAgICAgIiVzIiksCisJICAgIHJlbW90ZS0+bmFtZSwgc2hvcnRfdXBzdHJlYW0sCisJICAgIHJlbW90ZS0+bmFtZSwgYWR2aWNlX21heWJlKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgbWVzc2FnZV9kZXRhY2hlZF9oZWFkX2RpZVtdID0KKwlOXygiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorCSAgICJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisJICAgInN0YXRlIG5vdywgdXNlXG4iCisJICAgIlxuIgorCSAgICIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIik7CisKK3N0YXRpYyB2b2lkIHNldHVwX3B1c2hfdXBzdHJlYW0oc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBzdHJ1Y3QgYnJhbmNoICpicmFuY2gsCisJCQkJaW50IHRyaWFuZ3VsYXIsIGludCBzaW1wbGUpCit7CisJc3RydWN0IHN0cmJ1ZiByZWZzcGVjID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIWJyYW5jaCkKKwkJZGllKF8obWVzc2FnZV9kZXRhY2hlZF9oZWFkX2RpZSksIHJlbW90ZS0+bmFtZSk7CisJaWYgKCFicmFuY2gtPm1lcmdlX25yIHx8ICFicmFuY2gtPm1lcmdlIHx8ICFicmFuY2gtPnJlbW90ZV9uYW1lKQorCQlkaWUoXygiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisJCSAgICAiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKwkJICAgICJcbiIKKwkJICAgICIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIpLAorCQkgICAgYnJhbmNoLT5uYW1lLAorCQkgICAgcmVtb3RlLT5uYW1lLAorCQkgICAgYnJhbmNoLT5uYW1lKTsKKwlpZiAoYnJhbmNoLT5tZXJnZV9uciAhPSAxKQorCQlkaWUoXygiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBtdWx0aXBsZSB1cHN0cmVhbSBicmFuY2hlcywgIgorCQkgICAgInJlZnVzaW5nIHRvIHB1c2guIiksIGJyYW5jaC0+bmFtZSk7CisJaWYgKHRyaWFuZ3VsYXIpCisJCWRpZShfKCJZb3UgYXJlIHB1c2hpbmcgdG8gcmVtb3RlICclcycsIHdoaWNoIGlzIG5vdCB0aGUgdXBzdHJlYW0gb2ZcbiIKKwkJICAgICAgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorCQkgICAgICAidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIiksCisJCSAgICByZW1vdGUtPm5hbWUsIGJyYW5jaC0+bmFtZSk7CisKKwlpZiAoc2ltcGxlKSB7CisJCS8qIEFkZGl0aW9uYWwgc2FmZXR5ICovCisJCWlmIChzdHJjbXAoYnJhbmNoLT5yZWZuYW1lLCBicmFuY2gtPm1lcmdlWzBdLT5zcmMpKQorCQkJZGllX3B1c2hfc2ltcGxlKGJyYW5jaCwgcmVtb3RlKTsKKwl9CisKKwlzdHJidWZfYWRkZigmcmVmc3BlYywgIiVzOiVzIiwgYnJhbmNoLT5yZWZuYW1lLCBicmFuY2gtPm1lcmdlWzBdLT5zcmMpOworCXJlZnNwZWNfYXBwZW5kKCZycywgcmVmc3BlYy5idWYpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9wdXNoX2N1cnJlbnQoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBzdHJ1Y3QgYnJhbmNoICpicmFuY2gpCit7CisJc3RydWN0IHN0cmJ1ZiByZWZzcGVjID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIWJyYW5jaCkKKwkJZGllKF8obWVzc2FnZV9kZXRhY2hlZF9oZWFkX2RpZSksIHJlbW90ZS0+bmFtZSk7CisJc3RyYnVmX2FkZGYoJnJlZnNwZWMsICIlczolcyIsIGJyYW5jaC0+cmVmbmFtZSwgYnJhbmNoLT5yZWZuYW1lKTsKKwlyZWZzcGVjX2FwcGVuZCgmcnMsIHJlZnNwZWMuYnVmKTsKK30KKworc3RhdGljIGludCBpc193b3JrZmxvd190cmlhbmd1bGFyKHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwlzdHJ1Y3QgcmVtb3RlICpmZXRjaF9yZW1vdGUgPSByZW1vdGVfZ2V0KE5VTEwpOworCXJldHVybiAoZmV0Y2hfcmVtb3RlICYmIGZldGNoX3JlbW90ZSAhPSByZW1vdGUpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9kZWZhdWx0X3B1c2hfcmVmc3BlY3Moc3RydWN0IHJlbW90ZSAqcmVtb3RlKQoreworCXN0cnVjdCBicmFuY2ggKmJyYW5jaCA9IGJyYW5jaF9nZXQoTlVMTCk7CisJaW50IHRyaWFuZ3VsYXIgPSBpc193b3JrZmxvd190cmlhbmd1bGFyKHJlbW90ZSk7CisKKwlzd2l0Y2ggKHB1c2hfZGVmYXVsdCkgeworCWRlZmF1bHQ6CisJY2FzZSBQVVNIX0RFRkFVTFRfTUFUQ0hJTkc6CisJCXJlZnNwZWNfYXBwZW5kKCZycywgIjoiKTsKKwkJYnJlYWs7CisKKwljYXNlIFBVU0hfREVGQVVMVF9VTlNQRUNJRklFRDoKKwljYXNlIFBVU0hfREVGQVVMVF9TSU1QTEU6CisJCWlmICh0cmlhbmd1bGFyKQorCQkJc2V0dXBfcHVzaF9jdXJyZW50KHJlbW90ZSwgYnJhbmNoKTsKKwkJZWxzZQorCQkJc2V0dXBfcHVzaF91cHN0cmVhbShyZW1vdGUsIGJyYW5jaCwgdHJpYW5ndWxhciwgMSk7CisJCWJyZWFrOworCisJY2FzZSBQVVNIX0RFRkFVTFRfVVBTVFJFQU06CisJCXNldHVwX3B1c2hfdXBzdHJlYW0ocmVtb3RlLCBicmFuY2gsIHRyaWFuZ3VsYXIsIDApOworCQlicmVhazsKKworCWNhc2UgUFVTSF9ERUZBVUxUX0NVUlJFTlQ6CisJCXNldHVwX3B1c2hfY3VycmVudChyZW1vdGUsIGJyYW5jaCk7CisJCWJyZWFrOworCisJY2FzZSBQVVNIX0RFRkFVTFRfTk9USElORzoKKwkJZGllKF8oIllvdSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVmc3BlY3MgdG8gcHVzaCwgYW5kICIKKwkJICAgICJwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIikpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIG1lc3NhZ2VfYWR2aWNlX3B1bGxfYmVmb3JlX3B1c2hbXSA9CisJTl8oIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKwkgICAiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gSW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLlxuIgorCSAgICInZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisJICAgIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIG1lc3NhZ2VfYWR2aWNlX2NoZWNrb3V0X3B1bGxfcHVzaFtdID0KKwlOXygiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorCSAgICJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisJICAgIihlLmcuICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKwkgICAiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgbWVzc2FnZV9hZHZpY2VfcmVmX2ZldGNoX2ZpcnN0W10gPQorCU5fKCJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgcmVtb3RlIGNvbnRhaW5zIHdvcmsgdGhhdCB5b3UgZG9cbiIKKwkgICAibm90IGhhdmUgbG9jYWxseS4gVGhpcyBpcyB1c3VhbGx5IGNhdXNlZCBieSBhbm90aGVyIHJlcG9zaXRvcnkgcHVzaGluZ1xuIgorCSAgICJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisJICAgIihlLmcuLCAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisJICAgIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIG1lc3NhZ2VfYWR2aWNlX3JlZl9hbHJlYWR5X2V4aXN0c1tdID0KKwlOXygiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIpOworCitzdGF0aWMgY29uc3QgY2hhciBtZXNzYWdlX2FkdmljZV9yZWZfbmVlZHNfZm9yY2VbXSA9CisJTl8oIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorCSAgICJvciB1cGRhdGUgYSByZW1vdGUgcmVmIHRvIG1ha2UgaXQgcG9pbnQgYXQgYSBub24tY29tbWl0IG9iamVjdCxcbiIKKwkgICAid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIpOworCitzdGF0aWMgdm9pZCBhZHZpc2VfcHVsbF9iZWZvcmVfcHVzaCh2b2lkKQoreworCWlmICghYWR2aWNlX3B1c2hfbm9uX2ZmX2N1cnJlbnQgfHwgIWFkdmljZV9wdXNoX3VwZGF0ZV9yZWplY3RlZCkKKwkJcmV0dXJuOworCWFkdmlzZShfKG1lc3NhZ2VfYWR2aWNlX3B1bGxfYmVmb3JlX3B1c2gpKTsKK30KKworc3RhdGljIHZvaWQgYWR2aXNlX2NoZWNrb3V0X3B1bGxfcHVzaCh2b2lkKQoreworCWlmICghYWR2aWNlX3B1c2hfbm9uX2ZmX21hdGNoaW5nIHx8ICFhZHZpY2VfcHVzaF91cGRhdGVfcmVqZWN0ZWQpCisJCXJldHVybjsKKwlhZHZpc2UoXyhtZXNzYWdlX2FkdmljZV9jaGVja291dF9wdWxsX3B1c2gpKTsKK30KKworc3RhdGljIHZvaWQgYWR2aXNlX3JlZl9hbHJlYWR5X2V4aXN0cyh2b2lkKQoreworCWlmICghYWR2aWNlX3B1c2hfYWxyZWFkeV9leGlzdHMgfHwgIWFkdmljZV9wdXNoX3VwZGF0ZV9yZWplY3RlZCkKKwkJcmV0dXJuOworCWFkdmlzZShfKG1lc3NhZ2VfYWR2aWNlX3JlZl9hbHJlYWR5X2V4aXN0cykpOworfQorCitzdGF0aWMgdm9pZCBhZHZpc2VfcmVmX2ZldGNoX2ZpcnN0KHZvaWQpCit7CisJaWYgKCFhZHZpY2VfcHVzaF9mZXRjaF9maXJzdCB8fCAhYWR2aWNlX3B1c2hfdXBkYXRlX3JlamVjdGVkKQorCQlyZXR1cm47CisJYWR2aXNlKF8obWVzc2FnZV9hZHZpY2VfcmVmX2ZldGNoX2ZpcnN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkdmlzZV9yZWZfbmVlZHNfZm9yY2Uodm9pZCkKK3sKKwlpZiAoIWFkdmljZV9wdXNoX25lZWRzX2ZvcmNlIHx8ICFhZHZpY2VfcHVzaF91cGRhdGVfcmVqZWN0ZWQpCisJCXJldHVybjsKKwlhZHZpc2UoXyhtZXNzYWdlX2FkdmljZV9yZWZfbmVlZHNfZm9yY2UpKTsKK30KKworc3RhdGljIGludCBwdXNoX3dpdGhfb3B0aW9ucyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCByZWZzcGVjICpycywKKwkJCSAgICAgaW50IGZsYWdzKQoreworCWludCBlcnI7CisJdW5zaWduZWQgaW50IHJlamVjdF9yZWFzb25zOworCWNoYXIgKmFub25fdXJsID0gdHJhbnNwb3J0X2Fub255bWl6ZV91cmwodHJhbnNwb3J0LT51cmwpOworCisJdHJhbnNwb3J0X3NldF92ZXJib3NpdHkodHJhbnNwb3J0LCB2ZXJib3NpdHksIHByb2dyZXNzKTsKKwl0cmFuc3BvcnQtPmZhbWlseSA9IGZhbWlseTsKKworCWlmIChyZWNlaXZlcGFjaykKKwkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LAorCQkJCSAgICAgVFJBTlNfT1BUX1JFQ0VJVkVQQUNLLCByZWNlaXZlcGFjayk7CisJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfVEhJTiwgdGhpbiA/ICJ5ZXMiIDogTlVMTCk7CisKKwlpZiAoIWlzX2VtcHR5X2NhcygmY2FzKSkgeworCQlpZiAoIXRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucykKKwkJCWRpZSgidW5kZXJseWluZyB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCAtLSVzIG9wdGlvbiIsCisJCQkgICAgQ0FTX09QVF9OQU1FKTsKKwkJdHJhbnNwb3J0LT5zbWFydF9vcHRpb25zLT5jYXMgPSAmY2FzOworCX0KKworCWlmICh2ZXJib3NpdHkgPiAwKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiUHVzaGluZyB0byAlc1xuIiksIGFub25fdXJsKTsKKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJwdXNoIiwgInRyYW5zcG9ydF9wdXNoIiwgdGhlX3JlcG9zaXRvcnkpOworCWVyciA9IHRyYW5zcG9ydF9wdXNoKHRoZV9yZXBvc2l0b3J5LCB0cmFuc3BvcnQsCisJCQkgICAgIHJzLCBmbGFncywgJnJlamVjdF9yZWFzb25zKTsKKwl0cmFjZTJfcmVnaW9uX2xlYXZlKCJwdXNoIiwgInRyYW5zcG9ydF9wdXNoIiwgdGhlX3JlcG9zaXRvcnkpOworCWlmIChlcnIgIT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgcHVzaF9nZXRfY29sb3IoUFVTSF9DT0xPUl9FUlJPUikpOworCQllcnJvcihfKCJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIpLCBhbm9uX3VybCk7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBwdXNoX2dldF9jb2xvcihQVVNIX0NPTE9SX1JFU0VUKSk7CisJfQorCisJZXJyIHw9IHRyYW5zcG9ydF9kaXNjb25uZWN0KHRyYW5zcG9ydCk7CisJZnJlZShhbm9uX3VybCk7CisJaWYgKCFlcnIpCisJCXJldHVybiAwOworCisJaWYgKHJlamVjdF9yZWFzb25zICYgUkVKRUNUX05PTl9GRl9IRUFEKSB7CisJCWFkdmlzZV9wdWxsX2JlZm9yZV9wdXNoKCk7CisJfSBlbHNlIGlmIChyZWplY3RfcmVhc29ucyAmIFJFSkVDVF9OT05fRkZfT1RIRVIpIHsKKwkJYWR2aXNlX2NoZWNrb3V0X3B1bGxfcHVzaCgpOworCX0gZWxzZSBpZiAocmVqZWN0X3JlYXNvbnMgJiBSRUpFQ1RfQUxSRUFEWV9FWElTVFMpIHsKKwkJYWR2aXNlX3JlZl9hbHJlYWR5X2V4aXN0cygpOworCX0gZWxzZSBpZiAocmVqZWN0X3JlYXNvbnMgJiBSRUpFQ1RfRkVUQ0hfRklSU1QpIHsKKwkJYWR2aXNlX3JlZl9mZXRjaF9maXJzdCgpOworCX0gZWxzZSBpZiAocmVqZWN0X3JlYXNvbnMgJiBSRUpFQ1RfTkVFRFNfRk9SQ0UpIHsKKwkJYWR2aXNlX3JlZl9uZWVkc19mb3JjZSgpOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRvX3B1c2goY29uc3QgY2hhciAqcmVwbywgaW50IGZsYWdzLAorCQkgICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnB1c2hfb3B0aW9ucywKKwkJICAgc3RydWN0IHJlbW90ZSAqcmVtb3RlKQoreworCWludCBpLCBlcnJzOworCWNvbnN0IGNoYXIgKip1cmw7CisJaW50IHVybF9ucjsKKwlzdHJ1Y3QgcmVmc3BlYyAqcHVzaF9yZWZzcGVjID0gJnJzOworCisJaWYgKHB1c2hfb3B0aW9ucy0+bnIpCisJCWZsYWdzIHw9IFRSQU5TUE9SVF9QVVNIX09QVElPTlM7CisKKwlpZiAoIXB1c2hfcmVmc3BlYy0+bnIgJiYgIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FMTCkpIHsKKwkJaWYgKHJlbW90ZS0+cHVzaC5ucikgeworCQkJcHVzaF9yZWZzcGVjID0gJnJlbW90ZS0+cHVzaDsKKwkJfSBlbHNlIGlmICghKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfTUlSUk9SKSkKKwkJCXNldHVwX2RlZmF1bHRfcHVzaF9yZWZzcGVjcyhyZW1vdGUpOworCX0KKwllcnJzID0gMDsKKwl1cmxfbnIgPSBwdXNoX3VybF9vZl9yZW1vdGUocmVtb3RlLCAmdXJsKTsKKwlpZiAodXJsX25yKSB7CisJCWZvciAoaSA9IDA7IGkgPCB1cmxfbnI7IGkrKykgeworCQkJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0ID0KKwkJCQl0cmFuc3BvcnRfZ2V0KHJlbW90ZSwgdXJsW2ldKTsKKwkJCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX09QVElPTlMpCisJCQkJdHJhbnNwb3J0LT5wdXNoX29wdGlvbnMgPSBwdXNoX29wdGlvbnM7CisJCQlpZiAocHVzaF93aXRoX29wdGlvbnModHJhbnNwb3J0LCBwdXNoX3JlZnNwZWMsIGZsYWdzKSkKKwkJCQllcnJzKys7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQgPQorCQkJdHJhbnNwb3J0X2dldChyZW1vdGUsIE5VTEwpOworCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9PUFRJT05TKQorCQkJdHJhbnNwb3J0LT5wdXNoX29wdGlvbnMgPSBwdXNoX29wdGlvbnM7CisJCWlmIChwdXNoX3dpdGhfb3B0aW9ucyh0cmFuc3BvcnQsIHB1c2hfcmVmc3BlYywgZmxhZ3MpKQorCQkJZXJycysrOworCX0KKwlyZXR1cm4gISFlcnJzOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWludCAqcmVjdXJzZV9zdWJtb2R1bGVzID0gb3B0LT52YWx1ZTsKKworCWlmICh1bnNldCkKKwkJKnJlY3Vyc2Vfc3VibW9kdWxlcyA9IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkY7CisJZWxzZQorCQkqcmVjdXJzZV9zdWJtb2R1bGVzID0gcGFyc2VfcHVzaF9yZWN1cnNlX3N1Ym1vZHVsZXNfYXJnKG9wdC0+bG9uZ19uYW1lLCBhcmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9wdXNoX2NlcnRfZmxhZ3MoaW50ICpmbGFncywgaW50IHYpCit7CisJc3dpdGNoICh2KSB7CisJY2FzZSBTRU5EX1BBQ0tfUFVTSF9DRVJUX05FVkVSOgorCQkqZmxhZ3MgJj0gfihUUkFOU1BPUlRfUFVTSF9DRVJUX0FMV0FZUyB8IFRSQU5TUE9SVF9QVVNIX0NFUlRfSUZfQVNLRUQpOworCQlicmVhazsKKwljYXNlIFNFTkRfUEFDS19QVVNIX0NFUlRfQUxXQVlTOgorCQkqZmxhZ3MgfD0gVFJBTlNQT1JUX1BVU0hfQ0VSVF9BTFdBWVM7CisJCSpmbGFncyAmPSB+VFJBTlNQT1JUX1BVU0hfQ0VSVF9JRl9BU0tFRDsKKwkJYnJlYWs7CisJY2FzZSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0lGX0FTS0VEOgorCQkqZmxhZ3MgfD0gVFJBTlNQT1JUX1BVU0hfQ0VSVF9JRl9BU0tFRDsKKwkJKmZsYWdzICY9IH5UUkFOU1BPUlRfUFVTSF9DRVJUX0FMV0FZUzsKKwkJYnJlYWs7CisJfQorfQorCisKK3N0YXRpYyBpbnQgZ2l0X3B1c2hfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQoreworCWNvbnN0IGNoYXIgKnNsb3RfbmFtZTsKKwlpbnQgKmZsYWdzID0gY2I7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IGdpdF9ncGdfY29uZmlnKGssIHYsIE5VTEwpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAoIXN0cmNtcChrLCAicHVzaC5mb2xsb3d0YWdzIikpIHsKKwkJaWYgKGdpdF9jb25maWdfYm9vbChrLCB2KSkKKwkJCSpmbGFncyB8PSBUUkFOU1BPUlRfUFVTSF9GT0xMT1dfVEFHUzsKKwkJZWxzZQorCQkJKmZsYWdzICY9IH5UUkFOU1BPUlRfUFVTSF9GT0xMT1dfVEFHUzsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKGssICJwdXNoLmdwZ3NpZ24iKSkgeworCQljb25zdCBjaGFyICp2YWx1ZTsKKwkJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSgicHVzaC5ncGdzaWduIiwgJnZhbHVlKSkgeworCQkJc3dpdGNoIChnaXRfcGFyc2VfbWF5YmVfYm9vbCh2YWx1ZSkpIHsKKwkJCWNhc2UgMDoKKwkJCQlzZXRfcHVzaF9jZXJ0X2ZsYWdzKGZsYWdzLCBTRU5EX1BBQ0tfUFVTSF9DRVJUX05FVkVSKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlzZXRfcHVzaF9jZXJ0X2ZsYWdzKGZsYWdzLCBTRU5EX1BBQ0tfUFVTSF9DRVJUX0FMV0FZUyk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImlmLWFza2VkIikpCisJCQkJCXNldF9wdXNoX2NlcnRfZmxhZ3MoZmxhZ3MsIFNFTkRfUEFDS19QVVNIX0NFUlRfSUZfQVNLRUQpOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIGVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciAnJXMnIiwgayk7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoaywgInB1c2gucmVjdXJzZXN1Ym1vZHVsZXMiKSkgeworCQljb25zdCBjaGFyICp2YWx1ZTsKKwkJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSgicHVzaC5yZWN1cnNlc3VibW9kdWxlcyIsICZ2YWx1ZSkpCisJCQlyZWN1cnNlX3N1Ym1vZHVsZXMgPSBwYXJzZV9wdXNoX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcoaywgdmFsdWUpOworCX0gZWxzZSBpZiAoIXN0cmNtcChrLCAic3VibW9kdWxlLnJlY3Vyc2UiKSkgeworCQlpbnQgdmFsID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpID8KKwkJCVJFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQgOiBSRUNVUlNFX1NVQk1PRFVMRVNfT0ZGOworCQlyZWN1cnNlX3N1Ym1vZHVsZXMgPSB2YWw7CisJfSBlbHNlIGlmICghc3RyY21wKGssICJwdXNoLnB1c2hvcHRpb24iKSkgeworCQlpZiAoIXYpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2woayk7CisJCWVsc2UKKwkJCWlmICghKnYpCisJCQkJc3RyaW5nX2xpc3RfY2xlYXIoJnB1c2hfb3B0aW9uc19jb25maWcsIDApOworCQkJZWxzZQorCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmcHVzaF9vcHRpb25zX2NvbmZpZywgdik7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChrLCAiY29sb3IucHVzaCIpKSB7CisJCXB1c2hfdXNlX2NvbG9yID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2woaywgdik7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoaywgImNvbG9yLnB1c2guIiwgJnNsb3RfbmFtZSkpIHsKKwkJaW50IHNsb3QgPSBwYXJzZV9wdXNoX2NvbG9yX3Nsb3Qoc2xvdF9uYW1lKTsKKwkJaWYgKHNsb3QgPCAwKQorCQkJcmV0dXJuIDA7CisJCWlmICghdikKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrKTsKKwkJcmV0dXJuIGNvbG9yX3BhcnNlKHYsIHB1c2hfY29sb3JzW3Nsb3RdKTsKKwl9CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKGssIHYsIE5VTEwpOworfQorCitpbnQgY21kX3B1c2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGZsYWdzID0gMDsKKwlpbnQgdGFncyA9IDA7CisJaW50IHB1c2hfY2VydCA9IC0xOworCWludCByYzsKKwljb25zdCBjaGFyICpyZXBvID0gTlVMTDsJLyogZGVmYXVsdCByZXBvc2l0b3J5ICovCisJc3RydWN0IHN0cmluZ19saXN0IHB1c2hfb3B0aW9uc19jbWRsaW5lID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0ICpwdXNoX29wdGlvbnM7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fVkVSQk9TSVRZKCZ2ZXJib3NpdHkpLAorCQlPUFRfU1RSSU5HKCAwICwgInJlcG8iLCAmcmVwbywgTl8oInJlcG9zaXRvcnkiKSwgTl8oInJlcG9zaXRvcnkiKSksCisJCU9QVF9CSVQoIDAgLCAiYWxsIiwgJmZsYWdzLCBOXygicHVzaCBhbGwgcmVmcyIpLCBUUkFOU1BPUlRfUFVTSF9BTEwpLAorCQlPUFRfQklUKCAwICwgIm1pcnJvciIsICZmbGFncywgTl8oIm1pcnJvciBhbGwgcmVmcyIpLAorCQkJICAgIChUUkFOU1BPUlRfUFVTSF9NSVJST1J8VFJBTlNQT1JUX1BVU0hfRk9SQ0UpKSwKKwkJT1BUX0JPT0woJ2QnLCAiZGVsZXRlIiwgJmRlbGV0ZXJlZnMsIE5fKCJkZWxldGUgcmVmcyIpKSwKKwkJT1BUX0JPT0woIDAgLCAidGFncyIsICZ0YWdzLCBOXygicHVzaCB0YWdzIChjYW4ndCBiZSB1c2VkIHdpdGggLS1hbGwgb3IgLS1taXJyb3IpIikpLAorCQlPUFRfQklUKCduJyAsICJkcnktcnVuIiwgJmZsYWdzLCBOXygiZHJ5IHJ1biIpLCBUUkFOU1BPUlRfUFVTSF9EUllfUlVOKSwKKwkJT1BUX0JJVCggMCwgICJwb3JjZWxhaW4iLCAmZmxhZ3MsIE5fKCJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIpLCBUUkFOU1BPUlRfUFVTSF9QT1JDRUxBSU4pLAorCQlPUFRfQklUKCdmJywgImZvcmNlIiwgJmZsYWdzLCBOXygiZm9yY2UgdXBkYXRlcyIpLCBUUkFOU1BPUlRfUFVTSF9GT1JDRSksCisJCU9QVF9DQUxMQkFDS19GKDAsIENBU19PUFRfTkFNRSwgJmNhcywgTl8oIjxyZWZuYW1lPjo8ZXhwZWN0PiIpLAorCQkJICAgICAgIE5fKCJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIpLAorCQkJICAgICAgIFBBUlNFX09QVF9PUFRBUkcgfCBQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQLCBwYXJzZW9wdF9wdXNoX2Nhc19vcHRpb24pLAorCQlPUFRfQ0FMTEJBQ0soMCwgInJlY3Vyc2Utc3VibW9kdWxlcyIsICZyZWN1cnNlX3N1Ym1vZHVsZXMsICIoY2hlY2t8b24tZGVtYW5kfG5vKSIsCisJCQkgICAgIE5fKCJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiKSwgb3B0aW9uX3BhcnNlX3JlY3Vyc2Vfc3VibW9kdWxlcyksCisJCU9QVF9CT09MX0YoIDAgLCAidGhpbiIsICZ0aGluLCBOXygidXNlIHRoaW4gcGFjayIpLCBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9TVFJJTkcoIDAgLCAicmVjZWl2ZS1wYWNrIiwgJnJlY2VpdmVwYWNrLCAicmVjZWl2ZS1wYWNrIiwgTl8oInJlY2VpdmUgcGFjayBwcm9ncmFtIikpLAorCQlPUFRfU1RSSU5HKCAwICwgImV4ZWMiLCAmcmVjZWl2ZXBhY2ssICJyZWNlaXZlLXBhY2siLCBOXygicmVjZWl2ZSBwYWNrIHByb2dyYW0iKSksCisJCU9QVF9CSVQoJ3UnLCAic2V0LXVwc3RyZWFtIiwgJmZsYWdzLCBOXygic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiKSwKKwkJCVRSQU5TUE9SVF9QVVNIX1NFVF9VUFNUUkVBTSksCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZwcm9ncmVzcywgTl8oImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIpKSwKKwkJT1BUX0JJVCgwLCAicHJ1bmUiLCAmZmxhZ3MsIE5fKCJwcnVuZSBsb2NhbGx5IHJlbW92ZWQgcmVmcyIpLAorCQkJVFJBTlNQT1JUX1BVU0hfUFJVTkUpLAorCQlPUFRfQklUKDAsICJuby12ZXJpZnkiLCAmZmxhZ3MsIE5fKCJieXBhc3MgcHJlLXB1c2ggaG9vayIpLCBUUkFOU1BPUlRfUFVTSF9OT19IT09LKSwKKwkJT1BUX0JJVCgwLCAiZm9sbG93LXRhZ3MiLCAmZmxhZ3MsIE5fKCJwdXNoIG1pc3NpbmcgYnV0IHJlbGV2YW50IHRhZ3MiKSwKKwkJCVRSQU5TUE9SVF9QVVNIX0ZPTExPV19UQUdTKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgInNpZ25lZCIsICZwdXNoX2NlcnQsICIoeWVzfG5vfGlmLWFza2VkKSIsIE5fKCJHUEcgc2lnbiB0aGUgcHVzaCIpLAorCQkJCVBBUlNFX09QVF9PUFRBUkcsIG9wdGlvbl9wYXJzZV9wdXNoX3NpZ25lZCksCisJCU9QVF9CSVQoMCwgImF0b21pYyIsICZmbGFncywgTl8oInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIiksIFRSQU5TUE9SVF9QVVNIX0FUT01JQyksCisJCU9QVF9TVFJJTkdfTElTVCgnbycsICJwdXNoLW9wdGlvbiIsICZwdXNoX29wdGlvbnNfY21kbGluZSwgTl8oInNlcnZlci1zcGVjaWZpYyIpLCBOXygib3B0aW9uIHRvIHRyYW5zbWl0IikpLAorCQlPUFRfU0VUX0lOVCgnNCcsICJpcHY0IiwgJmZhbWlseSwgTl8oInVzZSBJUHY0IGFkZHJlc3NlcyBvbmx5IiksCisJCQkJVFJBTlNQT1JUX0ZBTUlMWV9JUFY0KSwKKwkJT1BUX1NFVF9JTlQoJzYnLCAiaXB2NiIsICZmYW1pbHksIE5fKCJ1c2UgSVB2NiBhZGRyZXNzZXMgb25seSIpLAorCQkJCVRSQU5TUE9SVF9GQU1JTFlfSVBWNiksCisJCU9QVF9FTkQoKQorCX07CisKKwlwYWNrZXRfdHJhY2VfaWRlbnRpdHkoInB1c2giKTsKKwlnaXRfY29uZmlnKGdpdF9wdXNoX2NvbmZpZywgJmZsYWdzKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHB1c2hfdXNhZ2UsIDApOworCXB1c2hfb3B0aW9ucyA9IChwdXNoX29wdGlvbnNfY21kbGluZS5ucgorCQk/ICZwdXNoX29wdGlvbnNfY21kbGluZQorCQk6ICZwdXNoX29wdGlvbnNfY29uZmlnKTsKKwlzZXRfcHVzaF9jZXJ0X2ZsYWdzKCZmbGFncywgcHVzaF9jZXJ0KTsKKworCWlmIChkZWxldGVyZWZzICYmICh0YWdzIHx8IChmbGFncyAmIChUUkFOU1BPUlRfUFVTSF9BTEwgfCBUUkFOU1BPUlRfUFVTSF9NSVJST1IpKSkpCisJCWRpZShfKCItLWRlbGV0ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1taXJyb3IgYW5kIC0tdGFncyIpKTsKKwlpZiAoZGVsZXRlcmVmcyAmJiBhcmdjIDwgMikKKwkJZGllKF8oIi0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IGFueSByZWZzIikpOworCisJaWYgKHJlY3Vyc2Vfc3VibW9kdWxlcyA9PSBSRUNVUlNFX1NVQk1PRFVMRVNfQ0hFQ0spCisJCWZsYWdzIHw9IFRSQU5TUE9SVF9SRUNVUlNFX1NVQk1PRFVMRVNfQ0hFQ0s7CisJZWxzZSBpZiAocmVjdXJzZV9zdWJtb2R1bGVzID09IFJFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQpCisJCWZsYWdzIHw9IFRSQU5TUE9SVF9SRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EOworCWVsc2UgaWYgKHJlY3Vyc2Vfc3VibW9kdWxlcyA9PSBSRUNVUlNFX1NVQk1PRFVMRVNfT05MWSkKKwkJZmxhZ3MgfD0gVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19PTkxZOworCisJaWYgKHRhZ3MpCisJCXJlZnNwZWNfYXBwZW5kKCZycywgInJlZnMvdGFncy8qIik7CisKKwlpZiAoYXJnYyA+IDApIHsKKwkJcmVwbyA9IGFyZ3ZbMF07CisJCXNldF9yZWZzcGVjcyhhcmd2ICsgMSwgYXJnYyAtIDEsIHJlcG8pOworCX0KKworCXJlbW90ZSA9IHB1c2hyZW1vdGVfZ2V0KHJlcG8pOworCWlmICghcmVtb3RlKSB7CisJCWlmIChyZXBvKQorCQkJZGllKF8oImJhZCByZXBvc2l0b3J5ICclcyciKSwgcmVwbyk7CisJCWRpZShfKCJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisJCSAgICAiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlIHJlcG9zaXRvcnkgdXNpbmdcbiIKKwkJICAgICJcbiIKKwkJICAgICIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisJCSAgICAiXG4iCisJCSAgICAiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKwkJICAgICJcbiIKKwkJICAgICIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iKSk7CisJfQorCisJaWYgKHJlbW90ZS0+bWlycm9yKQorCQlmbGFncyB8PSAoVFJBTlNQT1JUX1BVU0hfTUlSUk9SfFRSQU5TUE9SVF9QVVNIX0ZPUkNFKTsKKworCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FMTCkgeworCQlpZiAodGFncykKKwkJCWRpZShfKCItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiKSk7CisJCWlmIChhcmdjID49IDIpCisJCQlkaWUoXygiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIpKTsKKwl9CisJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfTUlSUk9SKSB7CisJCWlmICh0YWdzKQorCQkJZGllKF8oIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIpKTsKKwkJaWYgKGFyZ2MgPj0gMikKKwkJCWRpZShfKCItLW1pcnJvciBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIikpOworCX0KKwlpZiAoKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfQUxMKSAmJiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9NSVJST1IpKQorCQlkaWUoXygiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiKSk7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIHB1c2hfb3B0aW9ucykKKwkJaWYgKHN0cmNocihpdGVtLT5zdHJpbmcsICdcbicpKQorCQkJZGllKF8oInB1c2ggb3B0aW9ucyBtdXN0IG5vdCBoYXZlIG5ldyBsaW5lIGNoYXJhY3RlcnMiKSk7CisKKwlyYyA9IGRvX3B1c2gocmVwbywgZmxhZ3MsIHB1c2hfb3B0aW9ucywgcmVtb3RlKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmcHVzaF9vcHRpb25zX2NtZGxpbmUsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZwdXNoX29wdGlvbnNfY29uZmlnLCAwKTsKKwlpZiAocmMgPT0gLTEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhwdXNoX3VzYWdlLCBvcHRpb25zKTsKKwllbHNlCisJCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmFuZ2UtZGlmZi5jIGIvYnVpbHRpbi9yYW5nZS1kaWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhhNDY3MAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmFuZ2UtZGlmZi5jCkBAIC0wLDAgKzEsOTIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicmFuZ2UtZGlmZi5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmFuZ2VfZGlmZl91c2FnZVtdID0geworTl8oImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtYmFzZT4uLjxvbGQtdGlwPiA8bmV3LWJhc2U+Li48bmV3LXRpcD4iKSwKK05fKCJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLXRpcD4uLi48bmV3LXRpcD4iKSwKK05fKCJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8YmFzZT4gPG9sZC10aXA+IDxuZXctdGlwPiIpLAorTlVMTAorfTsKKworaW50IGNtZF9yYW5nZV9kaWZmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBjcmVhdGlvbl9mYWN0b3IgPSBSQU5HRV9ESUZGX0NSRUFUSU9OX0ZBQ1RPUl9ERUZBVUxUOworCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZm9wdCA9IHsgTlVMTCB9OworCXN0cnVjdCBhcmd2X2FycmF5IG90aGVyX2FyZyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlpbnQgc2ltcGxlX2NvbG9yID0gLTE7CisJc3RydWN0IG9wdGlvbiByYW5nZV9kaWZmX29wdGlvbnNbXSA9IHsKKwkJT1BUX0lOVEVHRVIoMCwgImNyZWF0aW9uLWZhY3RvciIsICZjcmVhdGlvbl9mYWN0b3IsCisJCQkgICAgTl8oIlBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiKSksCisJCU9QVF9CT09MKDAsICJuby1kdWFsLWNvbG9yIiwgJnNpbXBsZV9jb2xvciwKKwkJCSAgICBOXygidXNlIHNpbXBsZSBkaWZmIGNvbG9ycyIpKSwKKwkJT1BUX1BBU1NUSFJVX0FSR1YoMCwgIm5vdGVzIiwgJm90aGVyX2FyZywKKwkJCQkgIE5fKCJub3RlcyIpLCBOXygicGFzc2VkIHRvICdnaXQgbG9nJyIpLAorCQkJCSAgUEFSU0VfT1BUX09QVEFSRyksCisJCU9QVF9FTkQoKQorCX07CisJc3RydWN0IG9wdGlvbiAqb3B0aW9uczsKKwlpbnQgcmVzID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIHJhbmdlMSA9IFNUUkJVRl9JTklULCByYW5nZTIgPSBTVFJCVUZfSU5JVDsKKworCWdpdF9jb25maWcoZ2l0X2RpZmZfdWlfY29uZmlnLCBOVUxMKTsKKworCXJlcG9fZGlmZl9zZXR1cCh0aGVfcmVwb3NpdG9yeSwgJmRpZmZvcHQpOworCisJb3B0aW9ucyA9IHBhcnNlX29wdGlvbnNfY29uY2F0KHJhbmdlX2RpZmZfb3B0aW9ucywgZGlmZm9wdC5wYXJzZW9wdHMpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9yYW5nZV9kaWZmX3VzYWdlLCAwKTsKKworCWRpZmZfc2V0dXBfZG9uZSgmZGlmZm9wdCk7CisKKwkvKiBmb3JjZSBjb2xvciB3aGVuIC0tZHVhbC1jb2xvciB3YXMgdXNlZCAqLworCWlmICghc2ltcGxlX2NvbG9yKQorCQlkaWZmb3B0LnVzZV9jb2xvciA9IDE7CisKKwlpZiAoYXJnYyA9PSAyKSB7CisJCWlmICghc3Ryc3RyKGFyZ3ZbMF0sICIuLiIpKQorCQkJZGllKF8oIm5vIC4uIGluIHJhbmdlOiAnJXMnIiksIGFyZ3ZbMF0pOworCQlzdHJidWZfYWRkc3RyKCZyYW5nZTEsIGFyZ3ZbMF0pOworCisJCWlmICghc3Ryc3RyKGFyZ3ZbMV0sICIuLiIpKQorCQkJZGllKF8oIm5vIC4uIGluIHJhbmdlOiAnJXMnIiksIGFyZ3ZbMV0pOworCQlzdHJidWZfYWRkc3RyKCZyYW5nZTIsIGFyZ3ZbMV0pOworCX0gZWxzZSBpZiAoYXJnYyA9PSAzKSB7CisJCXN0cmJ1Zl9hZGRmKCZyYW5nZTEsICIlcy4uJXMiLCBhcmd2WzBdLCBhcmd2WzFdKTsKKwkJc3RyYnVmX2FkZGYoJnJhbmdlMiwgIiVzLi4lcyIsIGFyZ3ZbMF0sIGFyZ3ZbMl0pOworCX0gZWxzZSBpZiAoYXJnYyA9PSAxKSB7CisJCWNvbnN0IGNoYXIgKmIgPSBzdHJzdHIoYXJndlswXSwgIi4uLiIpLCAqYSA9IGFyZ3ZbMF07CisJCWludCBhX2xlbjsKKworCQlpZiAoIWIpIHsKKwkJCWVycm9yKF8oInNpbmdsZSBhcmcgZm9ybWF0IG11c3QgYmUgc3ltbWV0cmljIHJhbmdlIikpOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmFuZ2VfZGlmZl91c2FnZSwgb3B0aW9ucyk7CisJCX0KKworCQlhX2xlbiA9IChpbnQpKGIgLSBhKTsKKwkJaWYgKCFhX2xlbikgeworCQkJYSA9ICJIRUFEIjsKKwkJCWFfbGVuID0gc3RybGVuKGEpOworCQl9CisJCWIgKz0gMzsKKwkJaWYgKCEqYikKKwkJCWIgPSAiSEVBRCI7CisJCXN0cmJ1Zl9hZGRmKCZyYW5nZTEsICIlcy4uJS4qcyIsIGIsIGFfbGVuLCBhKTsKKwkJc3RyYnVmX2FkZGYoJnJhbmdlMiwgIiUuKnMuLiVzIiwgYV9sZW4sIGEsIGIpOworCX0gZWxzZSB7CisJCWVycm9yKF8oIm5lZWQgdHdvIGNvbW1pdCByYW5nZXMiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JhbmdlX2RpZmZfdXNhZ2UsIG9wdGlvbnMpOworCX0KKwlGUkVFX0FORF9OVUxMKG9wdGlvbnMpOworCisJcmVzID0gc2hvd19yYW5nZV9kaWZmKHJhbmdlMS5idWYsIHJhbmdlMi5idWYsIGNyZWF0aW9uX2ZhY3RvciwKKwkJCSAgICAgIHNpbXBsZV9jb2xvciA8IDEsICZkaWZmb3B0LCAmb3RoZXJfYXJnKTsKKworCWFyZ3ZfYXJyYXlfY2xlYXIoJm90aGVyX2FyZyk7CisJc3RyYnVmX3JlbGVhc2UoJnJhbmdlMSk7CisJc3RyYnVmX3JlbGVhc2UoJnJhbmdlMik7CisKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZWFkLXRyZWUuYyBiL2J1aWx0aW4vcmVhZC10cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1ZTdiMAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmVhZC10cmVlLmMKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKworI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUtY29uZmlnLmgiCisKK3N0YXRpYyBpbnQgbnJfdHJlZXM7CitzdGF0aWMgaW50IHJlYWRfZW1wdHk7CitzdGF0aWMgc3RydWN0IHRyZWUgKnRyZWVzW01BWF9VTlBBQ0tfVFJFRVNdOworCitzdGF0aWMgaW50IGxpc3RfdHJlZShzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IHRyZWUgKnRyZWU7CisKKwlpZiAobnJfdHJlZXMgPj0gTUFYX1VOUEFDS19UUkVFUykKKwkJZGllKCJJIGNhbm5vdCByZWFkIG1vcmUgdGhhbiAlZCB0cmVlcyIsIE1BWF9VTlBBQ0tfVFJFRVMpOworCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KG9pZCk7CisJaWYgKCF0cmVlKQorCQlyZXR1cm4gLTE7CisJdHJlZXNbbnJfdHJlZXMrK10gPSB0cmVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlYWRfdHJlZV91c2FnZVtdID0geworCU5fKCJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pIFstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLWluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgaW5kZXhfb3V0cHV0X2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCSBpbnQgdW5zZXQpCit7CisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCXNldF9hbHRlcm5hdGVfaW5kZXhfb3V0cHV0KGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXhjbHVkZV9wZXJfZGlyZWN0b3J5X2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCSAgICBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcjsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm9wdHM7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlvcHRzID0gKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqKW9wdC0+dmFsdWU7CisKKwlpZiAob3B0cy0+ZGlyKQorCQlkaWUoIm1vcmUgdGhhbiBvbmUgLS1leGNsdWRlLXBlci1kaXJlY3RvcnkgZ2l2ZW4uIik7CisKKwlkaXIgPSB4Y2FsbG9jKDEsIHNpemVvZigqb3B0cy0+ZGlyKSk7CisJZGlyLT5mbGFncyB8PSBESVJfU0hPV19JR05PUkVEOworCWRpci0+ZXhjbHVkZV9wZXJfZGlyID0gYXJnOworCW9wdHMtPmRpciA9IGRpcjsKKwkvKiBXZSBkbyBub3QgbmVlZCB0byBub3Igd2FudCB0byBkbyByZWFkLWRpcmVjdG9yeQorCSAqIGhlcmU7IHdlIGFyZSBtZXJlbHkgaW50ZXJlc3RlZCBpbiByZXVzaW5nIHRoZQorCSAqIHBlciBkaXJlY3RvcnkgaWdub3JlIHN0YWNrIG1lY2hhbmlzbS4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVidWdfc3RhZ2UoY29uc3QgY2hhciAqbGFiZWwsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJcHJpbnRmKCIlcyAiLCBsYWJlbCk7CisJaWYgKCFjZSkKKwkJcHJpbnRmKCIobWlzc2luZylcbiIpOworCWVsc2UgaWYgKGNlID09IG8tPmRmX2NvbmZsaWN0X2VudHJ5KQorCQlwcmludGYoIihjb25mbGljdClcbiIpOworCWVsc2UKKwkJcHJpbnRmKCIlMDZvICMlZCAlcyAlLjhzXG4iLAorCQkgICAgICAgY2UtPmNlX21vZGUsIGNlX3N0YWdlKGNlKSwgY2UtPm5hbWUsCisJCSAgICAgICBvaWRfdG9faGV4KCZjZS0+b2lkKSk7Cit9CisKK3N0YXRpYyBpbnQgZGVidWdfbWVyZ2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnN0YWdlcywKKwkJICAgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlpbnQgaTsKKworCXByaW50ZigiKiAlZC13YXkgbWVyZ2VcbiIsIG8tPm1lcmdlX3NpemUpOworCWRlYnVnX3N0YWdlKCJpbmRleCIsIHN0YWdlc1swXSwgbyk7CisJZm9yIChpID0gMTsgaSA8PSBvLT5tZXJnZV9zaXplOyBpKyspIHsKKwkJY2hhciBidWZbMjRdOworCQl4c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImVudCMlZCIsIGkpOworCQlkZWJ1Z19zdGFnZShidWYsIHN0YWdlc1tpXSwgbyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9yZWFkX3RyZWVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgInN1Ym1vZHVsZS5yZWN1cnNlIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9zdWJtb2R1bGVfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitpbnQgY21kX3JlYWRfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmNtZF9wcmVmaXgpCit7CisJaW50IGksIHN0YWdlID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRbTUFYX1VOUEFDS19UUkVFU107CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJaW50IHByZWZpeF9zZXQgPSAwOworCXN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlID0gTE9DS19JTklUOworCWNvbnN0IHN0cnVjdCBvcHRpb24gcmVhZF90cmVlX29wdGlvbnNbXSA9IHsKKwkJT1BUX0NBTExCQUNLX0YoMCwgImluZGV4LW91dHB1dCIsIE5VTEwsIE5fKCJmaWxlIiksCisJCSAgTl8oIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iKSwKKwkJICBQQVJTRV9PUFRfTk9ORUcsIGluZGV4X291dHB1dF9jYiksCisJCU9QVF9CT09MKDAsICJlbXB0eSIsICZyZWFkX2VtcHR5LAorCQkJICAgIE5fKCJvbmx5IGVtcHR5IHRoZSBpbmRleCIpKSwKKwkJT1BUX19WRVJCT1NFKCZvcHRzLnZlcmJvc2VfdXBkYXRlLCBOXygiYmUgdmVyYm9zZSIpKSwKKwkJT1BUX0dST1VQKE5fKCJNZXJnaW5nIikpLAorCQlPUFRfQk9PTCgnbScsIE5VTEwsICZvcHRzLm1lcmdlLAorCQkJIE5fKCJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIikpLAorCQlPUFRfQk9PTCgwLCAidHJpdmlhbCIsICZvcHRzLnRyaXZpYWxfbWVyZ2VzX29ubHksCisJCQkgTl8oIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIpKSwKKwkJT1BUX0JPT0woMCwgImFnZ3Jlc3NpdmUiLCAmb3B0cy5hZ2dyZXNzaXZlLAorCQkJIE5fKCIzLXdheSBtZXJnZSBpbiBwcmVzZW5jZSBvZiBhZGRzIGFuZCByZW1vdmVzIikpLAorCQlPUFRfQk9PTCgwLCAicmVzZXQiLCAmb3B0cy5yZXNldCwKKwkJCSBOXygic2FtZSBhcyAtbSwgYnV0IGRpc2NhcmQgdW5tZXJnZWQgZW50cmllcyIpKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAwLCAicHJlZml4IiwgJm9wdHMucHJlZml4LCBOXygiPHN1YmRpcmVjdG9yeT4vIiksCisJCSAgTl8oInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIiksCisJCSAgUEFSU0VfT1BUX05PTkVHIH0sCisJCU9QVF9CT09MKCd1JywgTlVMTCwgJm9wdHMudXBkYXRlLAorCQkJIE5fKCJ1cGRhdGUgd29ya2luZyB0cmVlIHdpdGggbWVyZ2UgcmVzdWx0IikpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAiZXhjbHVkZS1wZXItZGlyZWN0b3J5IiwgJm9wdHMsCisJCSAgTl8oImdpdGlnbm9yZSIpLAorCQkgIE5fKCJhbGxvdyBleHBsaWNpdGx5IGlnbm9yZWQgZmlsZXMgdG8gYmUgb3ZlcndyaXR0ZW4iKSwKKwkJICBQQVJTRV9PUFRfTk9ORUcsIGV4Y2x1ZGVfcGVyX2RpcmVjdG9yeV9jYiksCisJCU9QVF9CT09MKCdpJywgTlVMTCwgJm9wdHMuaW5kZXhfb25seSwKKwkJCSBOXygiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIikpLAorCQlPUFRfX0RSWV9SVU4oJm9wdHMuZHJ5X3J1biwgTl8oImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIpKSwKKwkJT1BUX0JPT0woMCwgIm5vLXNwYXJzZS1jaGVja291dCIsICZvcHRzLnNraXBfc3BhcnNlX2NoZWNrb3V0LAorCQkJIE5fKCJza2lwIGFwcGx5aW5nIHNwYXJzZSBjaGVja291dCBmaWx0ZXIiKSksCisJCU9QVF9CT09MKDAsICJkZWJ1Zy11bnBhY2siLCAmb3B0cy5kZWJ1Z191bnBhY2ssCisJCQkgTl8oImRlYnVnIHVucGFjay10cmVlcyIpKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgInJlY3Vyc2Utc3VibW9kdWxlcyIsIE5VTEwsCisJCQkgICAgImNoZWNrb3V0IiwgImNvbnRyb2wgcmVjdXJzaXZlIHVwZGF0aW5nIG9mIHN1Ym1vZHVsZXMiLAorCQkJICAgIFBBUlNFX09QVF9PUFRBUkcsIG9wdGlvbl9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXNfd29ya3RyZWVfdXBkYXRlciksCisJCU9QVF9fUVVJRVQoJm9wdHMucXVpZXQsIE5fKCJzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gLTE7CisJb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKKworCWdpdF9jb25maWcoZ2l0X3JlYWRfdHJlZV9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgY21kX3ByZWZpeCwgcmVhZF90cmVlX29wdGlvbnMsCisJCQkgICAgIHJlYWRfdHJlZV91c2FnZSwgMCk7CisKKwlob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCBMT0NLX0RJRV9PTl9FUlJPUik7CisKKwlwcmVmaXhfc2V0ID0gb3B0cy5wcmVmaXggPyAxIDogMDsKKwlpZiAoMSA8IG9wdHMubWVyZ2UgKyBvcHRzLnJlc2V0ICsgcHJlZml4X3NldCkKKwkJZGllKCJXaGljaCBvbmU/IC1tLCAtLXJlc2V0LCBvciAtLXByZWZpeD8iKTsKKworCS8qCisJICogTkVFRFNXT1JLCisJICoKKwkgKiBUaGUgb2xkIGluZGV4IHNob3VsZCBiZSByZWFkIGFueXdheSBldmVuIGlmIHdlJ3JlIGdvaW5nIHRvCisJICogZGVzdHJveSBhbGwgaW5kZXggZW50cmllcyBiZWNhdXNlIHdlIHN0aWxsIG5lZWQgdG8gcHJlc2VydmUKKwkgKiBjZXJ0YWluIGluZm9ybWF0aW9uIHN1Y2ggYXMgaW5kZXggdmVyc2lvbiBvciBzcGxpdC1pbmRleAorCSAqIG1vZGUuCisJICovCisKKwlpZiAob3B0cy5yZXNldCB8fCBvcHRzLm1lcmdlIHx8IG9wdHMucHJlZml4KSB7CisJCWlmIChyZWFkX2NhY2hlX3VubWVyZ2VkKCkgJiYgKG9wdHMucHJlZml4IHx8IG9wdHMubWVyZ2UpKQorCQkJZGllKF8oIllvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IikpOworCQlzdGFnZSA9IG9wdHMubWVyZ2UgPSAxOworCX0KKwlyZXNvbHZlX3VuZG9fY2xlYXIoKTsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKworCQlpZiAoZ2V0X29pZChhcmcsICZvaWQpKQorCQkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIGFyZyk7CisJCWlmIChsaXN0X3RyZWUoJm9pZCkgPCAwKQorCQkJZGllKCJmYWlsZWQgdG8gdW5wYWNrIHRyZWUgb2JqZWN0ICVzIiwgYXJnKTsKKwkJc3RhZ2UrKzsKKwl9CisJaWYgKCFucl90cmVlcyAmJiAhcmVhZF9lbXB0eSAmJiAhb3B0cy5tZXJnZSkKKwkJd2FybmluZygicmVhZC10cmVlOiBlbXB0eWluZyB0aGUgaW5kZXggd2l0aCBubyBhcmd1bWVudHMgaXMgZGVwcmVjYXRlZDsgdXNlIC0tZW1wdHkiKTsKKwllbHNlIGlmIChucl90cmVlcyA+IDAgJiYgcmVhZF9lbXB0eSkKKwkJZGllKCJwYXNzaW5nIHRyZWVzIGFzIGFyZ3VtZW50cyBjb250cmFkaWN0cyAtLWVtcHR5Iik7CisKKwlpZiAoMSA8IG9wdHMuaW5kZXhfb25seSArIG9wdHMudXBkYXRlKQorCQlkaWUoIi11IGFuZCAtaSBhdCB0aGUgc2FtZSB0aW1lIG1ha2VzIG5vIHNlbnNlIik7CisJaWYgKChvcHRzLnVwZGF0ZSB8fCBvcHRzLmluZGV4X29ubHkpICYmICFvcHRzLm1lcmdlKQorCQlkaWUoIiVzIGlzIG1lYW5pbmdsZXNzIHdpdGhvdXQgLW0sIC0tcmVzZXQsIG9yIC0tcHJlZml4IiwKKwkJICAgIG9wdHMudXBkYXRlID8gIi11IiA6ICItaSIpOworCWlmICgob3B0cy5kaXIgJiYgIW9wdHMudXBkYXRlKSkKKwkJZGllKCItLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeSBpcyBtZWFuaW5nbGVzcyB1bmxlc3MgLXUiKTsKKwlpZiAob3B0cy5tZXJnZSAmJiAhb3B0cy5pbmRleF9vbmx5KQorCQlzZXR1cF93b3JrX3RyZWUoKTsKKworCWlmIChvcHRzLm1lcmdlKSB7CisJCXN3aXRjaCAoc3RhZ2UgLSAxKSB7CisJCWNhc2UgMDoKKwkJCWRpZSgieW91IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgdHJlZSB0byBtZXJnZSIpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCW9wdHMuZm4gPSBvcHRzLnByZWZpeCA/IGJpbmRfbWVyZ2UgOiBvbmV3YXlfbWVyZ2U7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJb3B0cy5mbiA9IHR3b3dheV9tZXJnZTsKKwkJCW9wdHMuaW5pdGlhbF9jaGVja291dCA9IGlzX2NhY2hlX3VuYm9ybigpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJZGVmYXVsdDoKKwkJCW9wdHMuZm4gPSB0aHJlZXdheV9tZXJnZTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHN0YWdlIC0gMSA+PSAzKQorCQkJb3B0cy5oZWFkX2lkeCA9IHN0YWdlIC0gMjsKKwkJZWxzZQorCQkJb3B0cy5oZWFkX2lkeCA9IDE7CisJfQorCisJaWYgKG9wdHMuZGVidWdfdW5wYWNrKQorCQlvcHRzLmZuID0gZGVidWdfbWVyZ2U7CisKKwljYWNoZV90cmVlX2ZyZWUoJmFjdGl2ZV9jYWNoZV90cmVlKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdHJlZXM7IGkrKykgeworCQlzdHJ1Y3QgdHJlZSAqdHJlZSA9IHRyZWVzW2ldOworCQlwYXJzZV90cmVlKHRyZWUpOworCQlpbml0X3RyZWVfZGVzYyh0K2ksIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisJfQorCWlmICh1bnBhY2tfdHJlZXMobnJfdHJlZXMsIHQsICZvcHRzKSkKKwkJcmV0dXJuIDEyODsKKworCWlmIChvcHRzLmRlYnVnX3VucGFjayB8fCBvcHRzLmRyeV9ydW4pCisJCXJldHVybiAwOyAvKiBkbyBub3Qgd3JpdGUgdGhlIGluZGV4IG91dCAqLworCisJLyoKKwkgKiBXaGVuIHJlYWRpbmcgb25seSBvbmUgdHJlZSAoZWl0aGVyIHRoZSBtb3N0IGJhc2ljIGZvcm0sCisJICogIi1tIGVudCIgb3IgIi0tcmVzZXQgZW50IiBmb3JtKSwgd2UgY2FuIG9idGFpbiBhIGZ1bGx5CisJICogdmFsaWQgY2FjaGUtdHJlZSBiZWNhdXNlIHRoZSBpbmRleCBtdXN0IG1hdGNoIGV4YWN0bHkKKwkgKiB3aGF0IGNhbWUgZnJvbSB0aGUgdHJlZS4KKwkgKi8KKwlpZiAobnJfdHJlZXMgPT0gMSAmJiAhb3B0cy5wcmVmaXgpCisJCXByaW1lX2NhY2hlX3RyZWUodGhlX3JlcG9zaXRvcnksCisJCQkJIHRoZV9yZXBvc2l0b3J5LT5pbmRleCwKKwkJCQkgdHJlZXNbMF0pOworCisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCWRpZSgidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlYmFzZS5jIGIvYnVpbHRpbi9yZWJhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2JhNzZhCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZWJhc2UuYwpAQCAtMCwwICsxLDIwODAgQEAKKy8qCisgKiAiZ2l0IHJlYmFzZSIgYnVpbHRpbiBjb21tYW5kCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE4IFByYXRpayBLYXJraQorICovCisKKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJ3dC1zdGF0dXMuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorI2luY2x1ZGUgInJlcmVyZS5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgInNlcXVlbmNlci5oIgorI2luY2x1ZGUgInJlYmFzZS1pbnRlcmFjdGl2ZS5oIgorI2luY2x1ZGUgInJlc2V0LmgiCisKKyNkZWZpbmUgREVGQVVMVF9SRUZMT0dfQUNUSU9OICJyZWJhc2UiCisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgYnVpbHRpbl9yZWJhc2VfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSAiCisJCSJbLS1vbnRvIDxuZXdiYXNlPiB8IC0ta2VlcC1iYXNlXSBbPHVwc3RyZWFtPiBbPGJyYW5jaD5dXSIpLAorCU5fKCJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XSAiCisJCSItLXJvb3QgWzxicmFuY2g+XSIpLAorCU5fKCJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iKSwKKwlOVUxMCit9OworCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhwYXRoX3NxdWFzaF9vbnRvLCAicmViYXNlLW1lcmdlL3NxdWFzaC1vbnRvIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHBhdGhfaW50ZXJhY3RpdmUsICJyZWJhc2UtbWVyZ2UvaW50ZXJhY3RpdmUiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoYXBwbHlfZGlyLCAicmViYXNlLWFwcGx5IikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKG1lcmdlX2RpciwgInJlYmFzZS1tZXJnZSIpCisKK2VudW0gcmViYXNlX3R5cGUgeworCVJFQkFTRV9VTlNQRUNJRklFRCA9IC0xLAorCVJFQkFTRV9BUFBMWSwKKwlSRUJBU0VfTUVSR0UsCisJUkVCQVNFX1BSRVNFUlZFX01FUkdFUworfTsKKworZW51bSBlbXB0eV90eXBlIHsKKwlFTVBUWV9VTlNQRUNJRklFRCA9IC0xLAorCUVNUFRZX0RST1AsCisJRU1QVFlfS0VFUCwKKwlFTVBUWV9BU0sKK307CisKK3N0cnVjdCByZWJhc2Vfb3B0aW9ucyB7CisJZW51bSByZWJhc2VfdHlwZSB0eXBlOworCWVudW0gZW1wdHlfdHlwZSBlbXB0eTsKKwljb25zdCBjaGFyICpkZWZhdWx0X2JhY2tlbmQ7CisJY29uc3QgY2hhciAqc3RhdGVfZGlyOworCXN0cnVjdCBjb21taXQgKnVwc3RyZWFtOworCWNvbnN0IGNoYXIgKnVwc3RyZWFtX25hbWU7CisJY29uc3QgY2hhciAqdXBzdHJlYW1fYXJnOworCWNoYXIgKmhlYWRfbmFtZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9yaWdfaGVhZDsKKwlzdHJ1Y3QgY29tbWl0ICpvbnRvOworCWNvbnN0IGNoYXIgKm9udG9fbmFtZTsKKwljb25zdCBjaGFyICpyZXZpc2lvbnM7CisJY29uc3QgY2hhciAqc3dpdGNoX3RvOworCWludCByb290LCByb290X3dpdGhfb250bzsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpzcXVhc2hfb250bzsKKwlzdHJ1Y3QgY29tbWl0ICpyZXN0cmljdF9yZXZpc2lvbjsKKwlpbnQgZG9udF9maW5pc2hfcmViYXNlOworCWVudW0geworCQlSRUJBU0VfTk9fUVVJRVQgPSAxPDwwLAorCQlSRUJBU0VfVkVSQk9TRSA9IDE8PDEsCisJCVJFQkFTRV9ESUZGU1RBVCA9IDE8PDIsCisJCVJFQkFTRV9GT1JDRSA9IDE8PDMsCisJCVJFQkFTRV9JTlRFUkFDVElWRV9FWFBMSUNJVCA9IDE8PDQsCisJfSBmbGFnczsKKwlzdHJ1Y3QgYXJndl9hcnJheSBnaXRfYW1fb3B0czsKKwljb25zdCBjaGFyICphY3Rpb247CisJaW50IHNpZ25vZmY7CisJaW50IGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlOworCWludCBrZWVwX2VtcHR5OworCWludCBhdXRvc3F1YXNoOworCWNoYXIgKmdwZ19zaWduX29wdDsKKwlpbnQgYXV0b3N0YXNoOworCWNoYXIgKmNtZDsKKwlpbnQgYWxsb3dfZW1wdHlfbWVzc2FnZTsKKwlpbnQgcmViYXNlX21lcmdlcywgcmViYXNlX2NvdXNpbnM7CisJY2hhciAqc3RyYXRlZ3ksICpzdHJhdGVneV9vcHRzOworCXN0cnVjdCBzdHJidWYgZ2l0X2Zvcm1hdF9wYXRjaF9vcHQ7CisJaW50IHJlc2NoZWR1bGVfZmFpbGVkX2V4ZWM7CisJaW50IHVzZV9sZWdhY3lfcmViYXNlOworCWludCByZWFwcGx5X2NoZXJyeV9waWNrczsKK307CisKKyNkZWZpbmUgUkVCQVNFX09QVElPTlNfSU5JVCB7CQkJICAJXAorCQkudHlwZSA9IFJFQkFTRV9VTlNQRUNJRklFRCwJICAJXAorCQkuZW1wdHkgPSBFTVBUWV9VTlNQRUNJRklFRCwJICAJXAorCQkua2VlcF9lbXB0eSA9IDEsCQkJXAorCQkuZGVmYXVsdF9iYWNrZW5kID0gIm1lcmdlIiwJICAJXAorCQkuZmxhZ3MgPSBSRUJBU0VfTk9fUVVJRVQsIAkJXAorCQkuZ2l0X2FtX29wdHMgPSBBUkdWX0FSUkFZX0lOSVQsCQlcCisJCS5naXRfZm9ybWF0X3BhdGNoX29wdCA9IFNUUkJVRl9JTklUCVwKKwl9CisKK3N0YXRpYyBzdHJ1Y3QgcmVwbGF5X29wdHMgZ2V0X3JlcGxheV9vcHRzKGNvbnN0IHN0cnVjdCByZWJhc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgcmVwbGF5X29wdHMgcmVwbGF5ID0gUkVQTEFZX09QVFNfSU5JVDsKKworCXJlcGxheS5hY3Rpb24gPSBSRVBMQVlfSU5URVJBQ1RJVkVfUkVCQVNFOworCXNlcXVlbmNlcl9pbml0X2NvbmZpZygmcmVwbGF5KTsKKworCXJlcGxheS5zaWdub2ZmID0gb3B0cy0+c2lnbm9mZjsKKwlyZXBsYXkuYWxsb3dfZmYgPSAhKG9wdHMtPmZsYWdzICYgUkVCQVNFX0ZPUkNFKTsKKwlpZiAob3B0cy0+YWxsb3dfcmVyZXJlX2F1dG91cGRhdGUpCisJCXJlcGxheS5hbGxvd19yZXJlcmVfYXV0byA9IG9wdHMtPmFsbG93X3JlcmVyZV9hdXRvdXBkYXRlOworCXJlcGxheS5hbGxvd19lbXB0eSA9IDE7CisJcmVwbGF5LmFsbG93X2VtcHR5X21lc3NhZ2UgPSBvcHRzLT5hbGxvd19lbXB0eV9tZXNzYWdlOworCXJlcGxheS5kcm9wX3JlZHVuZGFudF9jb21taXRzID0gKG9wdHMtPmVtcHR5ID09IEVNUFRZX0RST1ApOworCXJlcGxheS5rZWVwX3JlZHVuZGFudF9jb21taXRzID0gKG9wdHMtPmVtcHR5ID09IEVNUFRZX0tFRVApOworCXJlcGxheS5xdWlldCA9ICEob3B0cy0+ZmxhZ3MgJiBSRUJBU0VfTk9fUVVJRVQpOworCXJlcGxheS52ZXJib3NlID0gb3B0cy0+ZmxhZ3MgJiBSRUJBU0VfVkVSQk9TRTsKKwlyZXBsYXkucmVzY2hlZHVsZV9mYWlsZWRfZXhlYyA9IG9wdHMtPnJlc2NoZWR1bGVfZmFpbGVkX2V4ZWM7CisJcmVwbGF5LmdwZ19zaWduID0geHN0cmR1cF9vcl9udWxsKG9wdHMtPmdwZ19zaWduX29wdCk7CisJcmVwbGF5LnN0cmF0ZWd5ID0gb3B0cy0+c3RyYXRlZ3k7CisJaWYgKG9wdHMtPnN0cmF0ZWd5X29wdHMpCisJCXBhcnNlX3N0cmF0ZWd5X29wdHMoJnJlcGxheSwgb3B0cy0+c3RyYXRlZ3lfb3B0cyk7CisKKwlpZiAob3B0cy0+c3F1YXNoX29udG8pIHsKKwkJb2lkY3B5KCZyZXBsYXkuc3F1YXNoX29udG8sIG9wdHMtPnNxdWFzaF9vbnRvKTsKKwkJcmVwbGF5LmhhdmVfc3F1YXNoX29udG8gPSAxOworCX0KKworCXJldHVybiByZXBsYXk7Cit9CisKK2VudW0gYWN0aW9uIHsKKwlBQ1RJT05fTk9ORSA9IDAsCisJQUNUSU9OX0NPTlRJTlVFLAorCUFDVElPTl9TS0lQLAorCUFDVElPTl9BQk9SVCwKKwlBQ1RJT05fUVVJVCwKKwlBQ1RJT05fRURJVF9UT0RPLAorCUFDVElPTl9TSE9XX0NVUlJFTlRfUEFUQ0gsCisJQUNUSU9OX1NIT1JURU5fT0lEUywKKwlBQ1RJT05fRVhQQU5EX09JRFMsCisJQUNUSU9OX0NIRUNLX1RPRE9fTElTVCwKKwlBQ1RJT05fUkVBUlJBTkdFX1NRVUFTSCwKKwlBQ1RJT05fQUREX0VYRUMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICphY3Rpb25fbmFtZXNbXSA9IHsgInVuZGVmaW5lZCIsCisJCQkJICAgICAgImNvbnRpbnVlIiwKKwkJCQkgICAgICAic2tpcCIsCisJCQkJICAgICAgImFib3J0IiwKKwkJCQkgICAgICAicXVpdCIsCisJCQkJICAgICAgImVkaXRfdG9kbyIsCisJCQkJICAgICAgInNob3dfY3VycmVudF9wYXRjaCIgfTsKKworc3RhdGljIGludCBhZGRfZXhlY19jb21tYW5kcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNvbW1hbmRzKQoreworCWNvbnN0IGNoYXIgKnRvZG9fZmlsZSA9IHJlYmFzZV9wYXRoX3RvZG8oKTsKKwlzdHJ1Y3QgdG9kb19saXN0IHRvZG9fbGlzdCA9IFRPRE9fTElTVF9JTklUOworCWludCByZXM7CisKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmdG9kb19saXN0LmJ1ZiwgdG9kb19maWxlLCAwKSA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCAnJXMnLiIpLCB0b2RvX2ZpbGUpOworCisJaWYgKHRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcih0aGVfcmVwb3NpdG9yeSwgdG9kb19saXN0LmJ1Zi5idWYsCisJCQkJCSZ0b2RvX2xpc3QpKSB7CisJCXRvZG9fbGlzdF9yZWxlYXNlKCZ0b2RvX2xpc3QpOworCQlyZXR1cm4gZXJyb3IoXygidW51c2FibGUgdG9kbyBsaXN0OiAnJXMnIiksIHRvZG9fZmlsZSk7CisJfQorCisJdG9kb19saXN0X2FkZF9leGVjX2NvbW1hbmRzKCZ0b2RvX2xpc3QsIGNvbW1hbmRzKTsKKwlyZXMgPSB0b2RvX2xpc3Rfd3JpdGVfdG9fZmlsZSh0aGVfcmVwb3NpdG9yeSwgJnRvZG9fbGlzdCwKKwkJCQkgICAgICB0b2RvX2ZpbGUsIE5VTEwsIE5VTEwsIC0xLCAwKTsKKwl0b2RvX2xpc3RfcmVsZWFzZSgmdG9kb19saXN0KTsKKworCWlmIChyZXMpCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iKSwgdG9kb19maWxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFycmFuZ2Vfc3F1YXNoX2luX3RvZG9fZmlsZSh2b2lkKQoreworCWNvbnN0IGNoYXIgKnRvZG9fZmlsZSA9IHJlYmFzZV9wYXRoX3RvZG8oKTsKKwlzdHJ1Y3QgdG9kb19saXN0IHRvZG9fbGlzdCA9IFRPRE9fTElTVF9JTklUOworCWludCByZXMgPSAwOworCisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnRvZG9fbGlzdC5idWYsIHRvZG9fZmlsZSwgMCkgPCAwKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IHJlYWQgJyVzJy4iKSwgdG9kb19maWxlKTsKKwlpZiAodG9kb19saXN0X3BhcnNlX2luc25fYnVmZmVyKHRoZV9yZXBvc2l0b3J5LCB0b2RvX2xpc3QuYnVmLmJ1ZiwKKwkJCQkJJnRvZG9fbGlzdCkpIHsKKwkJdG9kb19saXN0X3JlbGVhc2UoJnRvZG9fbGlzdCk7CisJCXJldHVybiBlcnJvcihfKCJ1bnVzYWJsZSB0b2RvIGxpc3Q6ICclcyciKSwgdG9kb19maWxlKTsKKwl9CisKKwlyZXMgPSB0b2RvX2xpc3RfcmVhcnJhbmdlX3NxdWFzaCgmdG9kb19saXN0KTsKKwlpZiAoIXJlcykKKwkJcmVzID0gdG9kb19saXN0X3dyaXRlX3RvX2ZpbGUodGhlX3JlcG9zaXRvcnksICZ0b2RvX2xpc3QsCisJCQkJCSAgICAgIHRvZG9fZmlsZSwgTlVMTCwgTlVMTCwgLTEsIDApOworCisJdG9kb19saXN0X3JlbGVhc2UoJnRvZG9fbGlzdCk7CisKKwlpZiAocmVzKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IHdyaXRlICclcycuIiksIHRvZG9fZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJhbnNmb3JtX3RvZG9fZmlsZSh1bnNpZ25lZCBmbGFncykKK3sKKwljb25zdCBjaGFyICp0b2RvX2ZpbGUgPSByZWJhc2VfcGF0aF90b2RvKCk7CisJc3RydWN0IHRvZG9fbGlzdCB0b2RvX2xpc3QgPSBUT0RPX0xJU1RfSU5JVDsKKwlpbnQgcmVzOworCisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnRvZG9fbGlzdC5idWYsIHRvZG9fZmlsZSwgMCkgPCAwKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IHJlYWQgJyVzJy4iKSwgdG9kb19maWxlKTsKKworCWlmICh0b2RvX2xpc3RfcGFyc2VfaW5zbl9idWZmZXIodGhlX3JlcG9zaXRvcnksIHRvZG9fbGlzdC5idWYuYnVmLAorCQkJCQkmdG9kb19saXN0KSkgeworCQl0b2RvX2xpc3RfcmVsZWFzZSgmdG9kb19saXN0KTsKKwkJcmV0dXJuIGVycm9yKF8oInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIpLCB0b2RvX2ZpbGUpOworCX0KKworCXJlcyA9IHRvZG9fbGlzdF93cml0ZV90b19maWxlKHRoZV9yZXBvc2l0b3J5LCAmdG9kb19saXN0LCB0b2RvX2ZpbGUsCisJCQkJICAgICAgTlVMTCwgTlVMTCwgLTEsIGZsYWdzKTsKKwl0b2RvX2xpc3RfcmVsZWFzZSgmdG9kb19saXN0KTsKKworCWlmIChyZXMpCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iKSwgdG9kb19maWxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlZGl0X3RvZG9fZmlsZSh1bnNpZ25lZCBmbGFncykKK3sKKwljb25zdCBjaGFyICp0b2RvX2ZpbGUgPSByZWJhc2VfcGF0aF90b2RvKCk7CisJc3RydWN0IHRvZG9fbGlzdCB0b2RvX2xpc3QgPSBUT0RPX0xJU1RfSU5JVCwKKwkJbmV3X3RvZG8gPSBUT0RPX0xJU1RfSU5JVDsKKwlpbnQgcmVzID0gMDsKKworCWlmIChzdHJidWZfcmVhZF9maWxlKCZ0b2RvX2xpc3QuYnVmLCB0b2RvX2ZpbGUsIDApIDwgMCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkICclcycuIiksIHRvZG9fZmlsZSk7CisKKwlzdHJidWZfc3RyaXBzcGFjZSgmdG9kb19saXN0LmJ1ZiwgMSk7CisJcmVzID0gZWRpdF90b2RvX2xpc3QodGhlX3JlcG9zaXRvcnksICZ0b2RvX2xpc3QsICZuZXdfdG9kbywgTlVMTCwgTlVMTCwgZmxhZ3MpOworCWlmICghcmVzICYmIHRvZG9fbGlzdF93cml0ZV90b19maWxlKHRoZV9yZXBvc2l0b3J5LCAmbmV3X3RvZG8sIHRvZG9fZmlsZSwKKwkJCQkJICAgIE5VTEwsIE5VTEwsIC0xLCBmbGFncyAmIH4oVE9ET19MSVNUX1NIT1JURU5fSURTKSkpCisJCXJlcyA9IGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSAnJXMnIiksIHRvZG9fZmlsZSk7CisKKwl0b2RvX2xpc3RfcmVsZWFzZSgmdG9kb19saXN0KTsKKwl0b2RvX2xpc3RfcmVsZWFzZSgmbmV3X3RvZG8pOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBnZXRfcmV2aXNpb25fcmFuZ2VzKHN0cnVjdCBjb21taXQgKnVwc3RyZWFtLCBzdHJ1Y3QgY29tbWl0ICpvbnRvLAorCQkJICAgICAgIHN0cnVjdCBvYmplY3RfaWQgKm9yaWdfaGVhZCwgY29uc3QgY2hhciAqKmhlYWRfaGFzaCwKKwkJCSAgICAgICBjaGFyICoqcmV2aXNpb25zLCBjaGFyICoqc2hvcnRyZXZpc2lvbnMpCit7CisJc3RydWN0IGNvbW1pdCAqYmFzZV9yZXYgPSB1cHN0cmVhbSA/IHVwc3RyZWFtIDogb250bzsKKwljb25zdCBjaGFyICpzaG9ydGhlYWQ7CisKKwkqaGVhZF9oYXNoID0gZmluZF91bmlxdWVfYWJicmV2KG9yaWdfaGVhZCwgR0lUX01BWF9IRVhTWik7CisJKnJldmlzaW9ucyA9IHhzdHJmbXQoIiVzLi4uJXMiLCBvaWRfdG9faGV4KCZiYXNlX3Jldi0+b2JqZWN0Lm9pZCksCisJCQkJCQkgICAqaGVhZF9oYXNoKTsKKworCXNob3J0aGVhZCA9IGZpbmRfdW5pcXVlX2FiYnJldihvcmlnX2hlYWQsIERFRkFVTFRfQUJCUkVWKTsKKworCWlmICh1cHN0cmVhbSkgeworCQljb25zdCBjaGFyICpzaG9ydHJldjsKKworCQlzaG9ydHJldiA9IGZpbmRfdW5pcXVlX2FiYnJldigmYmFzZV9yZXYtPm9iamVjdC5vaWQsCisJCQkJCSAgICAgIERFRkFVTFRfQUJCUkVWKTsKKworCQkqc2hvcnRyZXZpc2lvbnMgPSB4c3RyZm10KCIlcy4uJXMiLCBzaG9ydHJldiwgc2hvcnRoZWFkKTsKKwl9IGVsc2UKKwkJKnNob3J0cmV2aXNpb25zID0geHN0cmR1cChzaG9ydGhlYWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9iYXNpY19zdGF0ZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIGNvbnN0IGNoYXIgKmhlYWRfbmFtZSwKKwkJCSAgICBzdHJ1Y3QgY29tbWl0ICpvbnRvLCBjb25zdCBjaGFyICpvcmlnX2hlYWQpCit7CisJRklMRSAqaW50ZXJhY3RpdmU7CisKKwlpZiAoIWlzX2RpcmVjdG9yeShtZXJnZV9kaXIoKSkgJiYgbWtkaXJfaW5fZ2l0ZGlyKG1lcmdlX2RpcigpKSkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIiksIG1lcmdlX2RpcigpKTsKKworCWRlbGV0ZV9yZWZsb2coIlJFQkFTRV9IRUFEIik7CisKKwlpbnRlcmFjdGl2ZSA9IGZvcGVuKHBhdGhfaW50ZXJhY3RpdmUoKSwgInciKTsKKwlpZiAoIWludGVyYWN0aXZlKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiKSk7CisJZmNsb3NlKGludGVyYWN0aXZlKTsKKworCXJldHVybiB3cml0ZV9iYXNpY19zdGF0ZShvcHRzLCBoZWFkX25hbWUsIG9udG8sIG9yaWdfaGVhZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNwbGl0X2V4ZWNfY29tbWFuZHMoY29uc3QgY2hhciAqY21kLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNvbW1hbmRzKQoreworCWlmIChjbWQgJiYgKmNtZCkgeworCQlzdHJpbmdfbGlzdF9zcGxpdChjb21tYW5kcywgY21kLCAnXG4nLCAtMSk7CisKKwkJLyogcmViYXNlLmMgYWRkcyBhIG5ldyBsaW5lIHRvIGNtZCBhZnRlciBldmVyeSBjb21tYW5kLAorCQkgKiBzbyBoZXJlIHRoZSBsYXN0IGNvbW1hbmQgaXMgYWx3YXlzIGVtcHR5ICovCisJCXN0cmluZ19saXN0X3JlbW92ZV9lbXB0eV9pdGVtcyhjb21tYW5kcywgMCk7CisJfQorfQorCitzdGF0aWMgaW50IGRvX2ludGVyYWN0aXZlX3JlYmFzZShzdHJ1Y3QgcmViYXNlX29wdGlvbnMgKm9wdHMsIHVuc2lnbmVkIGZsYWdzKQoreworCWludCByZXQ7CisJY29uc3QgY2hhciAqaGVhZF9oYXNoID0gTlVMTDsKKwljaGFyICpyZXZpc2lvbnMgPSBOVUxMLCAqc2hvcnRyZXZpc2lvbnMgPSBOVUxMOworCXN0cnVjdCBhcmd2X2FycmF5IG1ha2Vfc2NyaXB0X2FyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJc3RydWN0IHRvZG9fbGlzdCB0b2RvX2xpc3QgPSBUT0RPX0xJU1RfSU5JVDsKKwlzdHJ1Y3QgcmVwbGF5X29wdHMgcmVwbGF5ID0gZ2V0X3JlcGxheV9vcHRzKG9wdHMpOworCXN0cnVjdCBzdHJpbmdfbGlzdCBjb21tYW5kcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJaWYgKGdldF9yZXZpc2lvbl9yYW5nZXMob3B0cy0+dXBzdHJlYW0sIG9wdHMtPm9udG8sICZvcHRzLT5vcmlnX2hlYWQsCisJCQkJJmhlYWRfaGFzaCwgJnJldmlzaW9ucywgJnNob3J0cmV2aXNpb25zKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGluaXRfYmFzaWNfc3RhdGUoJnJlcGxheSwKKwkJCSAgICAgb3B0cy0+aGVhZF9uYW1lID8gb3B0cy0+aGVhZF9uYW1lIDogImRldGFjaGVkIEhFQUQiLAorCQkJICAgICBvcHRzLT5vbnRvLCBoZWFkX2hhc2gpKSB7CisJCWZyZWUocmV2aXNpb25zKTsKKwkJZnJlZShzaG9ydHJldmlzaW9ucyk7CisKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICghb3B0cy0+dXBzdHJlYW0gJiYgb3B0cy0+c3F1YXNoX29udG8pCisJCXdyaXRlX2ZpbGUocGF0aF9zcXVhc2hfb250bygpLCAiJXNcbiIsCisJCQkgICBvaWRfdG9faGV4KG9wdHMtPnNxdWFzaF9vbnRvKSk7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZtYWtlX3NjcmlwdF9hcmdzLCAiIiwgcmV2aXNpb25zLCBOVUxMKTsKKwlpZiAob3B0cy0+cmVzdHJpY3RfcmV2aXNpb24pCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJm1ha2Vfc2NyaXB0X2FyZ3MsICJeJXMiLAorCQkJCSBvaWRfdG9faGV4KCZvcHRzLT5yZXN0cmljdF9yZXZpc2lvbi0+b2JqZWN0Lm9pZCkpOworCisJcmV0ID0gc2VxdWVuY2VyX21ha2Vfc2NyaXB0KHRoZV9yZXBvc2l0b3J5LCAmdG9kb19saXN0LmJ1ZiwKKwkJCQkgICAgbWFrZV9zY3JpcHRfYXJncy5hcmdjLCBtYWtlX3NjcmlwdF9hcmdzLmFyZ3YsCisJCQkJICAgIGZsYWdzKTsKKworCWlmIChyZXQpCisJCWVycm9yKF8oImNvdWxkIG5vdCBnZW5lcmF0ZSB0b2RvIGxpc3QiKSk7CisJZWxzZSB7CisJCWRpc2NhcmRfY2FjaGUoKTsKKwkJaWYgKHRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcih0aGVfcmVwb3NpdG9yeSwgdG9kb19saXN0LmJ1Zi5idWYsCisJCQkJCQkmdG9kb19saXN0KSkKKwkJCUJVRygidW51c2FibGUgdG9kbyBsaXN0Iik7CisKKwkJc3BsaXRfZXhlY19jb21tYW5kcyhvcHRzLT5jbWQsICZjb21tYW5kcyk7CisJCXJldCA9IGNvbXBsZXRlX2FjdGlvbih0aGVfcmVwb3NpdG9yeSwgJnJlcGxheSwgZmxhZ3MsCisJCQlzaG9ydHJldmlzaW9ucywgb3B0cy0+b250b19uYW1lLCBvcHRzLT5vbnRvLCBoZWFkX2hhc2gsCisJCQkmY29tbWFuZHMsIG9wdHMtPmF1dG9zcXVhc2gsICZ0b2RvX2xpc3QpOworCX0KKworCXN0cmluZ19saXN0X2NsZWFyKCZjb21tYW5kcywgMCk7CisJZnJlZShyZXZpc2lvbnMpOworCWZyZWUoc2hvcnRyZXZpc2lvbnMpOworCXRvZG9fbGlzdF9yZWxlYXNlKCZ0b2RvX2xpc3QpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJm1ha2Vfc2NyaXB0X2FyZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBydW5fc2VxdWVuY2VyX3JlYmFzZShzdHJ1Y3QgcmViYXNlX29wdGlvbnMgKm9wdHMsCisJCQkJICBlbnVtIGFjdGlvbiBjb21tYW5kKQoreworCXVuc2lnbmVkIGZsYWdzID0gMDsKKwlpbnQgYWJicmV2aWF0ZV9jb21tYW5kcyA9IDAsIHJldCA9IDA7CisKKwlnaXRfY29uZmlnX2dldF9ib29sKCJyZWJhc2UuYWJicmV2aWF0ZWNvbW1hbmRzIiwgJmFiYnJldmlhdGVfY29tbWFuZHMpOworCisJZmxhZ3MgfD0gb3B0cy0+a2VlcF9lbXB0eSA/IFRPRE9fTElTVF9LRUVQX0VNUFRZIDogMDsKKwlmbGFncyB8PSBhYmJyZXZpYXRlX2NvbW1hbmRzID8gVE9ET19MSVNUX0FCQlJFVklBVEVfQ01EUyA6IDA7CisJZmxhZ3MgfD0gb3B0cy0+cmViYXNlX21lcmdlcyA/IFRPRE9fTElTVF9SRUJBU0VfTUVSR0VTIDogMDsKKwlmbGFncyB8PSBvcHRzLT5yZWJhc2VfY291c2lucyA+IDAgPyBUT0RPX0xJU1RfUkVCQVNFX0NPVVNJTlMgOiAwOworCWZsYWdzIHw9IG9wdHMtPnJvb3Rfd2l0aF9vbnRvID8gVE9ET19MSVNUX1JPT1RfV0lUSF9PTlRPIDogMDsKKwlmbGFncyB8PSBjb21tYW5kID09IEFDVElPTl9TSE9SVEVOX09JRFMgPyBUT0RPX0xJU1RfU0hPUlRFTl9JRFMgOiAwOworCWZsYWdzIHw9IG9wdHMtPnJlYXBwbHlfY2hlcnJ5X3BpY2tzID8gVE9ET19MSVNUX1JFQVBQTFlfQ0hFUlJZX1BJQ0tTIDogMDsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgQUNUSU9OX05PTkU6IHsKKwkJaWYgKCFvcHRzLT5vbnRvICYmICFvcHRzLT51cHN0cmVhbSkKKwkJCWRpZShfKCJhIGJhc2UgY29tbWl0IG11c3QgYmUgcHJvdmlkZWQgd2l0aCAtLXVwc3RyZWFtIG9yIC0tb250byIpKTsKKworCQlyZXQgPSBkb19pbnRlcmFjdGl2ZV9yZWJhc2Uob3B0cywgZmxhZ3MpOworCQlicmVhazsKKwl9CisJY2FzZSBBQ1RJT05fU0tJUDogeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWVyZ2VfcnIgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCQlyZXJlcmVfY2xlYXIodGhlX3JlcG9zaXRvcnksICZtZXJnZV9ycik7CisJfQorCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgQUNUSU9OX0NPTlRJTlVFOiB7CisJCXN0cnVjdCByZXBsYXlfb3B0cyByZXBsYXlfb3B0cyA9IGdldF9yZXBsYXlfb3B0cyhvcHRzKTsKKworCQlyZXQgPSBzZXF1ZW5jZXJfY29udGludWUodGhlX3JlcG9zaXRvcnksICZyZXBsYXlfb3B0cyk7CisJCWJyZWFrOworCX0KKwljYXNlIEFDVElPTl9FRElUX1RPRE86CisJCXJldCA9IGVkaXRfdG9kb19maWxlKGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBBQ1RJT05fU0hPV19DVVJSRU5UX1BBVENIOiB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNtZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQljbWQuZ2l0X2NtZCA9IDE7CisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNtZC5hcmdzLCAic2hvdyIsICJSRUJBU0VfSEVBRCIsICItLSIsIE5VTEwpOworCQlyZXQgPSBydW5fY29tbWFuZCgmY21kKTsKKworCQlicmVhazsKKwl9CisJY2FzZSBBQ1RJT05fU0hPUlRFTl9PSURTOgorCWNhc2UgQUNUSU9OX0VYUEFORF9PSURTOgorCQlyZXQgPSB0cmFuc2Zvcm1fdG9kb19maWxlKGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBBQ1RJT05fQ0hFQ0tfVE9ET19MSVNUOgorCQlyZXQgPSBjaGVja190b2RvX2xpc3RfZnJvbV9maWxlKHRoZV9yZXBvc2l0b3J5KTsKKwkJYnJlYWs7CisJY2FzZSBBQ1RJT05fUkVBUlJBTkdFX1NRVUFTSDoKKwkJcmV0ID0gcmVhcnJhbmdlX3NxdWFzaF9pbl90b2RvX2ZpbGUoKTsKKwkJYnJlYWs7CisJY2FzZSBBQ1RJT05fQUREX0VYRUM6IHsKKwkJc3RydWN0IHN0cmluZ19saXN0IGNvbW1hbmRzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwkJc3BsaXRfZXhlY19jb21tYW5kcyhvcHRzLT5jbWQsICZjb21tYW5kcyk7CisJCXJldCA9IGFkZF9leGVjX2NvbW1hbmRzKCZjb21tYW5kcyk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZjb21tYW5kcywgMCk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlCVUcoImludmFsaWQgY29tbWFuZCAnJWQnIiwgY29tbWFuZCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaW1wbHlfbWVyZ2Uoc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRzLCBjb25zdCBjaGFyICpvcHRpb24pOworc3RhdGljIGludCBwYXJzZV9vcHRfa2VlcF9lbXB0eShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCQlpbnQgdW5zZXQpCit7CisJc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRzID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisKKwlpbXBseV9tZXJnZShvcHRzLCB1bnNldCA/ICItLW5vLWtlZXAtZW1wdHkiIDogIi0ta2VlcC1lbXB0eSIpOworCW9wdHMtPmtlZXBfZW1wdHkgPSAhdW5zZXQ7CisJb3B0cy0+dHlwZSA9IFJFQkFTRV9NRVJHRTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlYmFzZV9pbnRlcmFjdGl2ZV91c2FnZVtdID0geworCU5fKCJnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSBbPG9wdGlvbnM+XSIpLAorCU5VTEwKK307CisKK2ludCBjbWRfcmViYXNlX19pbnRlcmFjdGl2ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmViYXNlX29wdGlvbnMgb3B0cyA9IFJFQkFTRV9PUFRJT05TX0lOSVQ7CisJc3RydWN0IG9iamVjdF9pZCBzcXVhc2hfb250byA9IG51bGxfb2lkOworCWVudW0gYWN0aW9uIGNvbW1hbmQgPSBBQ1RJT05fTk9ORTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX05FR0JJVCgwLCAiZmYiLCAmb3B0cy5mbGFncywgTl8oImFsbG93IGZhc3QtZm9yd2FyZCIpLAorCQkJICAgUkVCQVNFX0ZPUkNFKSwKKwkJT1BUX0NBTExCQUNLX0YoJ2snLCAia2VlcC1lbXB0eSIsICZvcHRpb25zLCBOVUxMLAorCQkJTl8oImtlZXAgY29tbWl0cyB3aGljaCBzdGFydCBlbXB0eSIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX0hJRERFTiwKKwkJCXBhcnNlX29wdF9rZWVwX2VtcHR5KSwKKwkJT1BUX0JPT0xfRigwLCAiYWxsb3ctZW1wdHktbWVzc2FnZSIsICZvcHRzLmFsbG93X2VtcHR5X21lc3NhZ2UsCisJCQkgICBOXygiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIiksCisJCQkgICBQQVJTRV9PUFRfSElEREVOKSwKKwkJT1BUX0JPT0woMCwgInJlYmFzZS1tZXJnZXMiLCAmb3B0cy5yZWJhc2VfbWVyZ2VzLCBOXygicmViYXNlIG1lcmdlIGNvbW1pdHMiKSksCisJCU9QVF9CT09MKDAsICJyZWJhc2UtY291c2lucyIsICZvcHRzLnJlYmFzZV9jb3VzaW5zLAorCQkJIE5fKCJrZWVwIG9yaWdpbmFsIGJyYW5jaCBwb2ludHMgb2YgY291c2lucyIpKSwKKwkJT1BUX0JPT0woMCwgImF1dG9zcXVhc2giLCAmb3B0cy5hdXRvc3F1YXNoLAorCQkJIE5fKCJtb3ZlIGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHNxdWFzaCEvZml4dXAhIikpLAorCQlPUFRfQk9PTCgwLCAic2lnbm9mZiIsICZvcHRzLnNpZ25vZmYsIE5fKCJzaWduIGNvbW1pdHMiKSksCisJCU9QVF9CSVQoJ3YnLCAidmVyYm9zZSIsICZvcHRzLmZsYWdzLAorCQkJTl8oImRpc3BsYXkgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iKSwKKwkJCVJFQkFTRV9OT19RVUlFVCB8IFJFQkFTRV9WRVJCT1NFIHwgUkVCQVNFX0RJRkZTVEFUKSwKKwkJT1BUX0NNRE1PREUoMCwgImNvbnRpbnVlIiwgJmNvbW1hbmQsIE5fKCJjb250aW51ZSByZWJhc2UiKSwKKwkJCSAgICBBQ1RJT05fQ09OVElOVUUpLAorCQlPUFRfQ01ETU9ERSgwLCAic2tpcCIsICZjb21tYW5kLCBOXygic2tpcCBjb21taXQiKSwgQUNUSU9OX1NLSVApLAorCQlPUFRfQ01ETU9ERSgwLCAiZWRpdC10b2RvIiwgJmNvbW1hbmQsIE5fKCJlZGl0IHRoZSB0b2RvIGxpc3QiKSwKKwkJCSAgICBBQ1RJT05fRURJVF9UT0RPKSwKKwkJT1BUX0NNRE1PREUoMCwgInNob3ctY3VycmVudC1wYXRjaCIsICZjb21tYW5kLCBOXygic2hvdyB0aGUgY3VycmVudCBwYXRjaCIpLAorCQkJICAgIEFDVElPTl9TSE9XX0NVUlJFTlRfUEFUQ0gpLAorCQlPUFRfQ01ETU9ERSgwLCAic2hvcnRlbi1pZHMiLCAmY29tbWFuZCwKKwkJCU5fKCJzaG9ydGVuIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIpLCBBQ1RJT05fU0hPUlRFTl9PSURTKSwKKwkJT1BUX0NNRE1PREUoMCwgImV4cGFuZC1pZHMiLCAmY29tbWFuZCwKKwkJCU5fKCJleHBhbmQgY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IiksIEFDVElPTl9FWFBBTkRfT0lEUyksCisJCU9QVF9DTURNT0RFKDAsICJjaGVjay10b2RvLWxpc3QiLCAmY29tbWFuZCwKKwkJCU5fKCJjaGVjayB0aGUgdG9kbyBsaXN0IiksIEFDVElPTl9DSEVDS19UT0RPX0xJU1QpLAorCQlPUFRfQ01ETU9ERSgwLCAicmVhcnJhbmdlLXNxdWFzaCIsICZjb21tYW5kLAorCQkJTl8oInJlYXJyYW5nZSBmaXh1cC9zcXVhc2ggbGluZXMiKSwgQUNUSU9OX1JFQVJSQU5HRV9TUVVBU0gpLAorCQlPUFRfQ01ETU9ERSgwLCAiYWRkLWV4ZWMtY29tbWFuZHMiLCAmY29tbWFuZCwKKwkJCU5fKCJpbnNlcnQgZXhlYyBjb21tYW5kcyBpbiB0b2RvIGxpc3QiKSwgQUNUSU9OX0FERF9FWEVDKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJvbnRvIiwgJm9wdHMub250bywgTl8oIm9udG8iKSwgTl8oIm9udG8iKSwKKwkJICBQQVJTRV9PUFRfTk9ORUcsIHBhcnNlX29wdF9jb21taXQsIDAgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJyZXN0cmljdC1yZXZpc2lvbiIsICZvcHRzLnJlc3RyaWN0X3JldmlzaW9uLAorCQkgIE5fKCJyZXN0cmljdC1yZXZpc2lvbiIpLCBOXygicmVzdHJpY3QgcmV2aXNpb24iKSwKKwkJICBQQVJTRV9PUFRfTk9ORUcsIHBhcnNlX29wdF9jb21taXQsIDAgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJzcXVhc2gtb250byIsICZzcXVhc2hfb250bywgTl8oInNxdWFzaC1vbnRvIiksCisJCSAgTl8oInNxdWFzaCBvbnRvIiksIFBBUlNFX09QVF9OT05FRywgcGFyc2Vfb3B0X29iamVjdF9pZCwgMCB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInVwc3RyZWFtIiwgJm9wdHMudXBzdHJlYW0sIE5fKCJ1cHN0cmVhbSIpLAorCQkgIE5fKCJ0aGUgdXBzdHJlYW0gY29tbWl0IiksIFBBUlNFX09QVF9OT05FRywgcGFyc2Vfb3B0X2NvbW1pdCwKKwkJICAwIH0sCisJCU9QVF9TVFJJTkcoMCwgImhlYWQtbmFtZSIsICZvcHRzLmhlYWRfbmFtZSwgTl8oImhlYWQtbmFtZSIpLCBOXygiaGVhZCBuYW1lIikpLAorCQl7IE9QVElPTl9TVFJJTkcsICdTJywgImdwZy1zaWduIiwgJm9wdHMuZ3BnX3NpZ25fb3B0LCBOXygia2V5LWlkIiksCisJCQlOXygiR1BHLXNpZ24gY29tbWl0cyIpLAorCQkJUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSAiIiB9LAorCQlPUFRfU1RSSU5HKDAsICJzdHJhdGVneSIsICZvcHRzLnN0cmF0ZWd5LCBOXygic3RyYXRlZ3kiKSwKKwkJCSAgIE5fKCJyZWJhc2Ugc3RyYXRlZ3kiKSksCisJCU9QVF9TVFJJTkcoMCwgInN0cmF0ZWd5LW9wdHMiLCAmb3B0cy5zdHJhdGVneV9vcHRzLCBOXygic3RyYXRlZ3ktb3B0cyIpLAorCQkJICAgTl8oInN0cmF0ZWd5IG9wdGlvbnMiKSksCisJCU9QVF9TVFJJTkcoMCwgInN3aXRjaC10byIsICZvcHRzLnN3aXRjaF90bywgTl8oInN3aXRjaC10byIpLAorCQkJICAgTl8oInRoZSBicmFuY2ggb3IgY29tbWl0IHRvIGNoZWNrb3V0IikpLAorCQlPUFRfU1RSSU5HKDAsICJvbnRvLW5hbWUiLCAmb3B0cy5vbnRvX25hbWUsIE5fKCJvbnRvLW5hbWUiKSwgTl8oIm9udG8gbmFtZSIpKSwKKwkJT1BUX1NUUklORygwLCAiY21kIiwgJm9wdHMuY21kLCBOXygiY21kIiksIE5fKCJ0aGUgY29tbWFuZCB0byBydW4iKSksCisJCU9QVF9SRVJFUkVfQVVUT1VQREFURSgmb3B0cy5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSksCisJCU9QVF9CT09MKDAsICJyZXNjaGVkdWxlLWZhaWxlZC1leGVjIiwgJm9wdHMucmVzY2hlZHVsZV9mYWlsZWRfZXhlYywKKwkJCSBOXygiYXV0b21hdGljYWxseSByZS1zY2hlZHVsZSBhbnkgYGV4ZWNgIHRoYXQgZmFpbHMiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlvcHRzLnJlYmFzZV9jb3VzaW5zID0gLTE7CisKKwlpZiAoYXJnYyA9PSAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZWJhc2VfaW50ZXJhY3RpdmVfdXNhZ2UsIG9wdGlvbnMpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJYnVpbHRpbl9yZWJhc2VfaW50ZXJhY3RpdmVfdXNhZ2UsIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKKworCWlmICghaXNfbnVsbF9vaWQoJnNxdWFzaF9vbnRvKSkKKwkJb3B0cy5zcXVhc2hfb250byA9ICZzcXVhc2hfb250bzsKKworCWlmIChvcHRzLnJlYmFzZV9jb3VzaW5zID49IDAgJiYgIW9wdHMucmViYXNlX21lcmdlcykKKwkJd2FybmluZyhfKCItLVtuby1dcmViYXNlLWNvdXNpbnMgaGFzIG5vIGVmZmVjdCB3aXRob3V0ICIKKwkJCSAgIi0tcmViYXNlLW1lcmdlcyIpKTsKKworCXJldHVybiAhIXJ1bl9zZXF1ZW5jZXJfcmViYXNlKCZvcHRzLCBjb21tYW5kKTsKK30KKworc3RhdGljIGludCBpc19tZXJnZShzdHJ1Y3QgcmViYXNlX29wdGlvbnMgKm9wdHMpCit7CisJcmV0dXJuIG9wdHMtPnR5cGUgPT0gUkVCQVNFX01FUkdFIHx8CisJCW9wdHMtPnR5cGUgPT0gUkVCQVNFX1BSRVNFUlZFX01FUkdFUzsKK30KKworc3RhdGljIHZvaWQgaW1wbHlfbWVyZ2Uoc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRzLCBjb25zdCBjaGFyICpvcHRpb24pCit7CisJc3dpdGNoIChvcHRzLT50eXBlKSB7CisJY2FzZSBSRUJBU0VfQVBQTFk6CisJCWRpZShfKCIlcyByZXF1aXJlcyB0aGUgbWVyZ2UgYmFja2VuZCIpLCBvcHRpb24pOworCQlicmVhazsKKwljYXNlIFJFQkFTRV9NRVJHRToKKwljYXNlIFJFQkFTRV9QUkVTRVJWRV9NRVJHRVM6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW9wdHMtPnR5cGUgPSBSRUJBU0VfTUVSR0U7IC8qIGltcGxpZWQgKi8KKwkJYnJlYWs7CisJfQorfQorCisvKiBSZXR1cm5zIHRoZSBmaWxlbmFtZSBwcmVmaXhlZCBieSB0aGUgc3RhdGVfZGlyICovCitzdGF0aWMgY29uc3QgY2hhciAqc3RhdGVfZGlyX3BhdGgoY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCByZWJhc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc3RhdGljIHNpemVfdCBwcmVmaXhfbGVuOworCisJaWYgKCFwcmVmaXhfbGVuKSB7CisJCXN0cmJ1Zl9hZGRmKCZwYXRoLCAiJXMvIiwgb3B0cy0+c3RhdGVfZGlyKTsKKwkJcHJlZml4X2xlbiA9IHBhdGgubGVuOworCX0KKworCXN0cmJ1Zl9zZXRsZW4oJnBhdGgsIHByZWZpeF9sZW4pOworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIGZpbGVuYW1lKTsKKwlyZXR1cm4gcGF0aC5idWY7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIHJlYmFzZSBvcHRpb25zIGZyb20gdGhlIHN0YXRlIGRpcmVjdG9yeS4gKi8KK3N0YXRpYyBpbnQgcmVhZF9iYXNpY19zdGF0ZShzdHJ1Y3QgcmViYXNlX29wdGlvbnMgKm9wdHMpCit7CisJc3RydWN0IHN0cmJ1ZiBoZWFkX25hbWUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJaWYgKCFyZWFkX29uZWxpbmVyKCZoZWFkX25hbWUsIHN0YXRlX2Rpcl9wYXRoKCJoZWFkLW5hbWUiLCBvcHRzKSwKKwkJCSAgIFJFQURfT05FTElORVJfV0FSTl9NSVNTSU5HKSB8fAorCSAgICAhcmVhZF9vbmVsaW5lcigmYnVmLCBzdGF0ZV9kaXJfcGF0aCgib250byIsIG9wdHMpLAorCQkJICAgUkVBRF9PTkVMSU5FUl9XQVJOX01JU1NJTkcpKQorCQlyZXR1cm4gLTE7CisJb3B0cy0+aGVhZF9uYW1lID0gc3RhcnRzX3dpdGgoaGVhZF9uYW1lLmJ1ZiwgInJlZnMvIikgPworCQl4c3RyZHVwKGhlYWRfbmFtZS5idWYpIDogTlVMTDsKKwlzdHJidWZfcmVsZWFzZSgmaGVhZF9uYW1lKTsKKwlpZiAoZ2V0X29pZChidWYuYnVmLCAmb2lkKSkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBnZXQgJ29udG8nOiAnJXMnIiksIGJ1Zi5idWYpOworCW9wdHMtPm9udG8gPSBsb29rdXBfY29tbWl0X29yX2RpZSgmb2lkLCBidWYuYnVmKTsKKworCS8qCisJICogV2UgYWx3YXlzIHdyaXRlIHRvIG9yaWctaGVhZCwgYnV0IGludGVyYWN0aXZlIHJlYmFzZSB1c2VkIHRvIHdyaXRlIHRvCisJICogaGVhZC4gRmFsbCBiYWNrIHRvIHJlYWRpbmcgZnJvbSBoZWFkIHRvIGNvdmVyIGZvciB0aGUgY2FzZSB0aGF0IHRoZQorCSAqIHVzZXIgdXBncmFkZWQgZ2l0IHdpdGggYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuCisJICovCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCWlmIChmaWxlX2V4aXN0cyhzdGF0ZV9kaXJfcGF0aCgib3JpZy1oZWFkIiwgb3B0cykpKSB7CisJCWlmICghcmVhZF9vbmVsaW5lcigmYnVmLCBzdGF0ZV9kaXJfcGF0aCgib3JpZy1oZWFkIiwgb3B0cyksCisJCQkJICAgUkVBRF9PTkVMSU5FUl9XQVJOX01JU1NJTkcpKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAoIXJlYWRfb25lbGluZXIoJmJ1Ziwgc3RhdGVfZGlyX3BhdGgoImhlYWQiLCBvcHRzKSwKKwkJCQkgIFJFQURfT05FTElORVJfV0FSTl9NSVNTSU5HKSkKKwkJcmV0dXJuIC0xOworCWlmIChnZXRfb2lkKGJ1Zi5idWYsICZvcHRzLT5vcmlnX2hlYWQpKQorCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCBvcmlnLWhlYWQ6ICclcyciKSwgYnVmLmJ1Zik7CisKKwlpZiAoZmlsZV9leGlzdHMoc3RhdGVfZGlyX3BhdGgoInF1aWV0Iiwgb3B0cykpKQorCQlvcHRzLT5mbGFncyAmPSB+UkVCQVNFX05PX1FVSUVUOworCWVsc2UKKwkJb3B0cy0+ZmxhZ3MgfD0gUkVCQVNFX05PX1FVSUVUOworCisJaWYgKGZpbGVfZXhpc3RzKHN0YXRlX2Rpcl9wYXRoKCJ2ZXJib3NlIiwgb3B0cykpKQorCQlvcHRzLT5mbGFncyB8PSBSRUJBU0VfVkVSQk9TRTsKKworCWlmIChmaWxlX2V4aXN0cyhzdGF0ZV9kaXJfcGF0aCgic2lnbm9mZiIsIG9wdHMpKSkgeworCQlvcHRzLT5zaWdub2ZmID0gMTsKKwkJb3B0cy0+ZmxhZ3MgfD0gUkVCQVNFX0ZPUkNFOworCX0KKworCWlmIChmaWxlX2V4aXN0cyhzdGF0ZV9kaXJfcGF0aCgiYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUiLCBvcHRzKSkpIHsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlpZiAoIXJlYWRfb25lbGluZXIoJmJ1Ziwgc3RhdGVfZGlyX3BhdGgoImFsbG93X3JlcmVyZV9hdXRvdXBkYXRlIiwgb3B0cyksCisJCQkJICAgUkVBRF9PTkVMSU5FUl9XQVJOX01JU1NJTkcpKQorCQkJcmV0dXJuIC0xOworCQlpZiAoIXN0cmNtcChidWYuYnVmLCAiLS1yZXJlcmUtYXV0b3VwZGF0ZSIpKQorCQkJb3B0cy0+YWxsb3dfcmVyZXJlX2F1dG91cGRhdGUgPSBSRVJFUkVfQVVUT1VQREFURTsKKwkJZWxzZSBpZiAoIXN0cmNtcChidWYuYnVmLCAiLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSIpKQorCQkJb3B0cy0+YWxsb3dfcmVyZXJlX2F1dG91cGRhdGUgPSBSRVJFUkVfTk9BVVRPVVBEQVRFOworCQllbHNlCisJCQl3YXJuaW5nKF8oImlnbm9yaW5nIGludmFsaWQgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU6ICIKKwkJCQkgICInJXMnIiksIGJ1Zi5idWYpOworCX0KKworCWlmIChmaWxlX2V4aXN0cyhzdGF0ZV9kaXJfcGF0aCgiZ3BnX3NpZ25fb3B0Iiwgb3B0cykpKSB7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJaWYgKCFyZWFkX29uZWxpbmVyKCZidWYsIHN0YXRlX2Rpcl9wYXRoKCJncGdfc2lnbl9vcHQiLCBvcHRzKSwKKwkJCQkgICBSRUFEX09ORUxJTkVSX1dBUk5fTUlTU0lORykpCisJCQlyZXR1cm4gLTE7CisJCWZyZWUob3B0cy0+Z3BnX3NpZ25fb3B0KTsKKwkJb3B0cy0+Z3BnX3NpZ25fb3B0ID0geHN0cmR1cChidWYuYnVmKTsKKwl9CisKKwlpZiAoZmlsZV9leGlzdHMoc3RhdGVfZGlyX3BhdGgoInN0cmF0ZWd5Iiwgb3B0cykpKSB7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJaWYgKCFyZWFkX29uZWxpbmVyKCZidWYsIHN0YXRlX2Rpcl9wYXRoKCJzdHJhdGVneSIsIG9wdHMpLAorCQkJCSAgIFJFQURfT05FTElORVJfV0FSTl9NSVNTSU5HKSkKKwkJCXJldHVybiAtMTsKKwkJZnJlZShvcHRzLT5zdHJhdGVneSk7CisJCW9wdHMtPnN0cmF0ZWd5ID0geHN0cmR1cChidWYuYnVmKTsKKwl9CisKKwlpZiAoZmlsZV9leGlzdHMoc3RhdGVfZGlyX3BhdGgoInN0cmF0ZWd5X29wdHMiLCBvcHRzKSkpIHsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlpZiAoIXJlYWRfb25lbGluZXIoJmJ1Ziwgc3RhdGVfZGlyX3BhdGgoInN0cmF0ZWd5X29wdHMiLCBvcHRzKSwKKwkJCQkgICBSRUFEX09ORUxJTkVSX1dBUk5fTUlTU0lORykpCisJCQlyZXR1cm4gLTE7CisJCWZyZWUob3B0cy0+c3RyYXRlZ3lfb3B0cyk7CisJCW9wdHMtPnN0cmF0ZWd5X29wdHMgPSB4c3RyZHVwKGJ1Zi5idWYpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmViYXNlX3dyaXRlX2Jhc2ljX3N0YXRlKHN0cnVjdCByZWJhc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwl3cml0ZV9maWxlKHN0YXRlX2Rpcl9wYXRoKCJoZWFkLW5hbWUiLCBvcHRzKSwgIiVzIiwKKwkJICAgb3B0cy0+aGVhZF9uYW1lID8gb3B0cy0+aGVhZF9uYW1lIDogImRldGFjaGVkIEhFQUQiKTsKKwl3cml0ZV9maWxlKHN0YXRlX2Rpcl9wYXRoKCJvbnRvIiwgb3B0cyksICIlcyIsCisJCSAgIG9wdHMtPm9udG8gPyBvaWRfdG9faGV4KCZvcHRzLT5vbnRvLT5vYmplY3Qub2lkKSA6ICIiKTsKKwl3cml0ZV9maWxlKHN0YXRlX2Rpcl9wYXRoKCJvcmlnLWhlYWQiLCBvcHRzKSwgIiVzIiwKKwkJICAgb2lkX3RvX2hleCgmb3B0cy0+b3JpZ19oZWFkKSk7CisJaWYgKCEob3B0cy0+ZmxhZ3MgJiBSRUJBU0VfTk9fUVVJRVQpKQorCQl3cml0ZV9maWxlKHN0YXRlX2Rpcl9wYXRoKCJxdWlldCIsIG9wdHMpLCAiJXMiLCAiIik7CisJaWYgKG9wdHMtPmZsYWdzICYgUkVCQVNFX1ZFUkJPU0UpCisJCXdyaXRlX2ZpbGUoc3RhdGVfZGlyX3BhdGgoInZlcmJvc2UiLCBvcHRzKSwgIiVzIiwgIiIpOworCWlmIChvcHRzLT5zdHJhdGVneSkKKwkJd3JpdGVfZmlsZShzdGF0ZV9kaXJfcGF0aCgic3RyYXRlZ3kiLCBvcHRzKSwgIiVzIiwKKwkJCSAgIG9wdHMtPnN0cmF0ZWd5KTsKKwlpZiAob3B0cy0+c3RyYXRlZ3lfb3B0cykKKwkJd3JpdGVfZmlsZShzdGF0ZV9kaXJfcGF0aCgic3RyYXRlZ3lfb3B0cyIsIG9wdHMpLCAiJXMiLAorCQkJICAgb3B0cy0+c3RyYXRlZ3lfb3B0cyk7CisJaWYgKG9wdHMtPmFsbG93X3JlcmVyZV9hdXRvdXBkYXRlID4gMCkKKwkJd3JpdGVfZmlsZShzdGF0ZV9kaXJfcGF0aCgiYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUiLCBvcHRzKSwKKwkJCSAgICItJXMtcmVyZXJlLWF1dG91cGRhdGUiLAorCQkJICAgb3B0cy0+YWxsb3dfcmVyZXJlX2F1dG91cGRhdGUgPT0gUkVSRVJFX0FVVE9VUERBVEUgPworCQkJCSIiIDogIi1ubyIpOworCWlmIChvcHRzLT5ncGdfc2lnbl9vcHQpCisJCXdyaXRlX2ZpbGUoc3RhdGVfZGlyX3BhdGgoImdwZ19zaWduX29wdCIsIG9wdHMpLCAiJXMiLAorCQkJICAgb3B0cy0+Z3BnX3NpZ25fb3B0KTsKKwlpZiAob3B0cy0+c2lnbm9mZikKKwkJd3JpdGVfZmlsZShzdGF0ZV9kaXJfcGF0aCgic2lnbm9mZiIsIG9wdHMpLCAiLS1zaWdub2ZmIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaW5pc2hfcmViYXNlKHN0cnVjdCByZWJhc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGRpciA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAwOworCisJZGVsZXRlX3JlZihOVUxMLCAiUkVCQVNFX0hFQUQiLCBOVUxMLCBSRUZfTk9fREVSRUYpOworCWFwcGx5X2F1dG9zdGFzaChzdGF0ZV9kaXJfcGF0aCgiYXV0b3N0YXNoIiwgb3B0cykpOworCWNsb3NlX29iamVjdF9zdG9yZSh0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cyk7CisJLyoKKwkgKiBXZSBpZ25vcmUgZXJyb3JzIGluICdnYyAtLWF1dG8nLCBzaW5jZSB0aGUKKwkgKiB1c2VyIHNob3VsZCBzZWUgdGhlbS4KKwkgKi8KKwlydW5fYXV0b19nYyghKG9wdHMtPmZsYWdzICYgKFJFQkFTRV9OT19RVUlFVHxSRUJBU0VfVkVSQk9TRSkpKTsKKwlpZiAob3B0cy0+dHlwZSA9PSBSRUJBU0VfTUVSR0UpIHsKKwkJc3RydWN0IHJlcGxheV9vcHRzIHJlcGxheSA9IFJFUExBWV9PUFRTX0lOSVQ7CisKKwkJcmVwbGF5LmFjdGlvbiA9IFJFUExBWV9JTlRFUkFDVElWRV9SRUJBU0U7CisJCXJldCA9IHNlcXVlbmNlcl9yZW1vdmVfc3RhdGUoJnJlcGxheSk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZHN0cigmZGlyLCBvcHRzLT5zdGF0ZV9kaXIpOworCQlpZiAocmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmZGlyLCAwKSkKKwkJCXJldCA9IGVycm9yKF8oImNvdWxkIG5vdCByZW1vdmUgJyVzJyIpLAorCQkJCSAgICBvcHRzLT5zdGF0ZV9kaXIpOworCQlzdHJidWZfcmVsZWFzZSgmZGlyKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqcGVlbF9jb21taXR0aXNoKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJaWYgKGdldF9vaWQobmFtZSwgJm9pZCkpCisJCXJldHVybiBOVUxMOworCW9iaiA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJcmV0dXJuIChzdHJ1Y3QgY29tbWl0ICopcGVlbF90b190eXBlKG5hbWUsIDAsIG9iaiwgT0JKX0NPTU1JVCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF92YXIoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQlzdHJidWZfYWRkZihidWYsICJ1bnNldCAlczsgIiwgbmFtZSk7CisJZWxzZSB7CisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzPSIsIG5hbWUpOworCQlzcV9xdW90ZV9idWYoYnVmLCB2YWx1ZSk7CisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiOyAiKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbW92ZV90b19vcmlnaW5hbF9icmFuY2goc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRzKQoreworCXN0cnVjdCBzdHJidWYgb3JpZ19oZWFkX3JlZmxvZyA9IFNUUkJVRl9JTklULCBoZWFkX3JlZmxvZyA9IFNUUkJVRl9JTklUOworCWludCByZXQ7CisKKwlpZiAoIW9wdHMtPmhlYWRfbmFtZSkKKwkJcmV0dXJuIDA7IC8qIG5vdGhpbmcgdG8gbW92ZSBiYWNrIHRvICovCisKKwlpZiAoIW9wdHMtPm9udG8pCisJCUJVRygibW92ZV90b19vcmlnaW5hbF9icmFuY2ggd2l0aG91dCBvbnRvIik7CisKKwlzdHJidWZfYWRkZigmb3JpZ19oZWFkX3JlZmxvZywgInJlYmFzZSBmaW5pc2hlZDogJXMgb250byAlcyIsCisJCSAgICBvcHRzLT5oZWFkX25hbWUsIG9pZF90b19oZXgoJm9wdHMtPm9udG8tPm9iamVjdC5vaWQpKTsKKwlzdHJidWZfYWRkZigmaGVhZF9yZWZsb2csICJyZWJhc2UgZmluaXNoZWQ6IHJldHVybmluZyB0byAlcyIsCisJCSAgICBvcHRzLT5oZWFkX25hbWUpOworCXJldCA9IHJlc2V0X2hlYWQodGhlX3JlcG9zaXRvcnksIE5VTEwsICIiLCBvcHRzLT5oZWFkX25hbWUsCisJCQkgUkVTRVRfSEVBRF9SRUZTX09OTFksCisJCQkgb3JpZ19oZWFkX3JlZmxvZy5idWYsIGhlYWRfcmVmbG9nLmJ1ZiwKKwkJCSBERUZBVUxUX1JFRkxPR19BQ1RJT04pOworCisJc3RyYnVmX3JlbGVhc2UoJm9yaWdfaGVhZF9yZWZsb2cpOworCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkX3JlZmxvZyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJlc29sdmVtc2cgPQorTl8oIlJlc29sdmUgYWxsIGNvbmZsaWN0cyBtYW51YWxseSwgbWFyayB0aGVtIGFzIHJlc29sdmVkIHdpdGhcbiIKKyJcImdpdCBhZGQvcm0gPGNvbmZsaWN0ZWRfZmlsZXM+XCIsIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiWW91IGNhbiBpbnN0ZWFkIHNraXAgdGhpcyBjb21taXQ6IHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIuXG4iCisiVG8gYWJvcnQgYW5kIGdldCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgXCJnaXQgcmViYXNlXCIsIHJ1biAiCisiXCJnaXQgcmViYXNlIC0tYWJvcnRcIi4iKTsKKworc3RhdGljIGludCBydW5fYW0oc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRzKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGFtID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGZvcm1hdF9wYXRjaCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHJldmlzaW9ucyA9IFNUUkJVRl9JTklUOworCWludCBzdGF0dXM7CisJY2hhciAqcmViYXNlZF9wYXRjaGVzOworCisJYW0uZ2l0X2NtZCA9IDE7CisJYXJndl9hcnJheV9wdXNoKCZhbS5hcmdzLCAiYW0iKTsKKworCWlmIChvcHRzLT5hY3Rpb24gJiYgIXN0cmNtcCgiY29udGludWUiLCBvcHRzLT5hY3Rpb24pKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmYW0uYXJncywgIi0tcmVzb2x2ZWQiKTsKKwkJYXJndl9hcnJheV9wdXNoZigmYW0uYXJncywgIi0tcmVzb2x2ZW1zZz0lcyIsIHJlc29sdmVtc2cpOworCQlpZiAob3B0cy0+Z3BnX3NpZ25fb3B0KQorCQkJYXJndl9hcnJheV9wdXNoKCZhbS5hcmdzLCBvcHRzLT5ncGdfc2lnbl9vcHQpOworCQlzdGF0dXMgPSBydW5fY29tbWFuZCgmYW0pOworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJuIHN0YXR1czsKKworCQlyZXR1cm4gbW92ZV90b19vcmlnaW5hbF9icmFuY2gob3B0cyk7CisJfQorCWlmIChvcHRzLT5hY3Rpb24gJiYgIXN0cmNtcCgic2tpcCIsIG9wdHMtPmFjdGlvbikpIHsKKwkJYXJndl9hcnJheV9wdXNoKCZhbS5hcmdzLCAiLS1za2lwIik7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmFtLmFyZ3MsICItLXJlc29sdmVtc2c9JXMiLCByZXNvbHZlbXNnKTsKKwkJc3RhdHVzID0gcnVuX2NvbW1hbmQoJmFtKTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiBzdGF0dXM7CisKKwkJcmV0dXJuIG1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoKG9wdHMpOworCX0KKwlpZiAob3B0cy0+YWN0aW9uICYmICFzdHJjbXAoInNob3ctY3VycmVudC1wYXRjaCIsIG9wdHMtPmFjdGlvbikpIHsKKwkJYXJndl9hcnJheV9wdXNoKCZhbS5hcmdzLCAiLS1zaG93LWN1cnJlbnQtcGF0Y2giKTsKKwkJcmV0dXJuIHJ1bl9jb21tYW5kKCZhbSk7CisJfQorCisJc3RyYnVmX2FkZGYoJnJldmlzaW9ucywgIiVzLi4uJXMiLAorCQkgICAgb2lkX3RvX2hleChvcHRzLT5yb290ID8KKwkJCSAgICAgICAvKiB0aGlzIGlzIG5vdyBlcXVpdmFsZW50IHRvICFvcHRzLT51cHN0cmVhbSAqLworCQkJICAgICAgICZvcHRzLT5vbnRvLT5vYmplY3Qub2lkIDoKKwkJCSAgICAgICAmb3B0cy0+dXBzdHJlYW0tPm9iamVjdC5vaWQpLAorCQkgICAgb2lkX3RvX2hleCgmb3B0cy0+b3JpZ19oZWFkKSk7CisKKwlyZWJhc2VkX3BhdGNoZXMgPSB4c3RyZHVwKGdpdF9wYXRoKCJyZWJhc2VkLXBhdGNoZXMiKSk7CisJZm9ybWF0X3BhdGNoLm91dCA9IG9wZW4ocmViYXNlZF9wYXRjaGVzLAorCQkJCU9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NjYpOworCWlmIChmb3JtYXRfcGF0Y2gub3V0IDwgMCkgeworCQlzdGF0dXMgPSBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiksCisJCQkJICAgICByZWJhc2VkX3BhdGNoZXMpOworCQlmcmVlKHJlYmFzZWRfcGF0Y2hlcyk7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFtLmFyZ3MpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWZvcm1hdF9wYXRjaC5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZmb3JtYXRfcGF0Y2guYXJncywgImZvcm1hdC1wYXRjaCIsICItayIsICItLXN0ZG91dCIsCisJCQkgIi0tZnVsbC1pbmRleCIsICItLWNoZXJyeS1waWNrIiwgIi0tcmlnaHQtb25seSIsCisJCQkgIi0tc3JjLXByZWZpeD1hLyIsICItLWRzdC1wcmVmaXg9Yi8iLCAiLS1uby1yZW5hbWVzIiwKKwkJCSAiLS1uby1jb3Zlci1sZXR0ZXIiLCAiLS1wcmV0dHk9bWJveHJkIiwgIi0tdG9wby1vcmRlciIsCisJCQkgIi0tbm8tYmFzZSIsIE5VTEwpOworCWlmIChvcHRzLT5naXRfZm9ybWF0X3BhdGNoX29wdC5sZW4pCisJCWFyZ3ZfYXJyYXlfc3BsaXQoJmZvcm1hdF9wYXRjaC5hcmdzLAorCQkJCSBvcHRzLT5naXRfZm9ybWF0X3BhdGNoX29wdC5idWYpOworCWFyZ3ZfYXJyYXlfcHVzaCgmZm9ybWF0X3BhdGNoLmFyZ3MsIHJldmlzaW9ucy5idWYpOworCWlmIChvcHRzLT5yZXN0cmljdF9yZXZpc2lvbikKKwkJYXJndl9hcnJheV9wdXNoZigmZm9ybWF0X3BhdGNoLmFyZ3MsICJeJXMiLAorCQkJCSBvaWRfdG9faGV4KCZvcHRzLT5yZXN0cmljdF9yZXZpc2lvbi0+b2JqZWN0Lm9pZCkpOworCisJc3RhdHVzID0gcnVuX2NvbW1hbmQoJmZvcm1hdF9wYXRjaCk7CisJaWYgKHN0YXR1cykgeworCQl1bmxpbmsocmViYXNlZF9wYXRjaGVzKTsKKwkJZnJlZShyZWJhc2VkX3BhdGNoZXMpOworCQlhcmd2X2FycmF5X2NsZWFyKCZhbS5hcmdzKTsKKworCQlyZXNldF9oZWFkKHRoZV9yZXBvc2l0b3J5LCAmb3B0cy0+b3JpZ19oZWFkLCAiY2hlY2tvdXQiLAorCQkJICAgb3B0cy0+aGVhZF9uYW1lLCAwLAorCQkJICAgIkhFQUQiLCBOVUxMLCBERUZBVUxUX1JFRkxPR19BQ1RJT04pOworCQllcnJvcihfKCJcbmdpdCBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSBwcmVwYXJpbmcgdGhlICIKKwkJCSJwYXRjaGVzIHRvIHJlcGxheVxuIgorCQkJInRoZXNlIHJldmlzaW9uczpcbiIKKwkJCSJcbiAgICAlc1xuXG4iCisJCQkiQXMgYSByZXN1bHQsIGdpdCBjYW5ub3QgcmViYXNlIHRoZW0uIiksCisJCSAgICAgIG9wdHMtPnJldmlzaW9ucyk7CisKKwkJc3RyYnVmX3JlbGVhc2UoJnJldmlzaW9ucyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZyZXZpc2lvbnMpOworCisJYW0uaW4gPSBvcGVuKHJlYmFzZWRfcGF0Y2hlcywgT19SRE9OTFkpOworCWlmIChhbS5pbiA8IDApIHsKKwkJc3RhdHVzID0gZXJyb3JfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIpLAorCQkJCSAgICAgcmViYXNlZF9wYXRjaGVzKTsKKwkJZnJlZShyZWJhc2VkX3BhdGNoZXMpOworCQlhcmd2X2FycmF5X2NsZWFyKCZhbS5hcmdzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlhcmd2X2FycmF5X3B1c2h2KCZhbS5hcmdzLCBvcHRzLT5naXRfYW1fb3B0cy5hcmd2KTsKKwlhcmd2X2FycmF5X3B1c2goJmFtLmFyZ3MsICItLXJlYmFzaW5nIik7CisJYXJndl9hcnJheV9wdXNoZigmYW0uYXJncywgIi0tcmVzb2x2ZW1zZz0lcyIsIHJlc29sdmVtc2cpOworCWFyZ3ZfYXJyYXlfcHVzaCgmYW0uYXJncywgIi0tcGF0Y2gtZm9ybWF0PW1ib3hyZCIpOworCWlmIChvcHRzLT5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSA9PSBSRVJFUkVfQVVUT1VQREFURSkKKwkJYXJndl9hcnJheV9wdXNoKCZhbS5hcmdzLCAiLS1yZXJlcmUtYXV0b3VwZGF0ZSIpOworCWVsc2UgaWYgKG9wdHMtPmFsbG93X3JlcmVyZV9hdXRvdXBkYXRlID09IFJFUkVSRV9OT0FVVE9VUERBVEUpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYW0uYXJncywgIi0tbm8tcmVyZXJlLWF1dG91cGRhdGUiKTsKKwlpZiAob3B0cy0+Z3BnX3NpZ25fb3B0KQorCQlhcmd2X2FycmF5X3B1c2goJmFtLmFyZ3MsIG9wdHMtPmdwZ19zaWduX29wdCk7CisJc3RhdHVzID0gcnVuX2NvbW1hbmQoJmFtKTsKKwl1bmxpbmsocmViYXNlZF9wYXRjaGVzKTsKKwlmcmVlKHJlYmFzZWRfcGF0Y2hlcyk7CisKKwlpZiAoIXN0YXR1cykgeworCQlyZXR1cm4gbW92ZV90b19vcmlnaW5hbF9icmFuY2gob3B0cyk7CisJfQorCisJaWYgKGlzX2RpcmVjdG9yeShvcHRzLT5zdGF0ZV9kaXIpKQorCQlyZWJhc2Vfd3JpdGVfYmFzaWNfc3RhdGUob3B0cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHJ1bl9zcGVjaWZpY19yZWJhc2Uoc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRzLCBlbnVtIGFjdGlvbiBhY3Rpb24pCit7CisJY29uc3QgY2hhciAqYXJndltdID0geyBOVUxMLCBOVUxMIH07CisJc3RydWN0IHN0cmJ1ZiBzY3JpcHRfc25pcHBldCA9IFNUUkJVRl9JTklULCBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc3RhdHVzOworCWNvbnN0IGNoYXIgKmJhY2tlbmQsICpiYWNrZW5kX2Z1bmM7CisKKwlpZiAob3B0cy0+dHlwZSA9PSBSRUJBU0VfTUVSR0UpIHsKKwkJLyogUnVuIHNlcXVlbmNlci1iYXNlZCByZWJhc2UgKi8KKwkJc2V0ZW52KCJHSVRfQ0hFUlJZX1BJQ0tfSEVMUCIsIHJlc29sdmVtc2csIDEpOworCQlpZiAoIShvcHRzLT5mbGFncyAmIFJFQkFTRV9JTlRFUkFDVElWRV9FWFBMSUNJVCkpIHsKKwkJCXNldGVudigiR0lUX1NFUVVFTkNFX0VESVRPUiIsICI6IiwgMSk7CisJCQlvcHRzLT5hdXRvc3F1YXNoID0gMDsKKwkJfQorCQlpZiAob3B0cy0+Z3BnX3NpZ25fb3B0KSB7CisJCQkvKiByZW1vdmUgdGhlIGxlYWRpbmcgIi1TIiAqLworCQkJY2hhciAqdG1wID0geHN0cmR1cChvcHRzLT5ncGdfc2lnbl9vcHQgKyAyKTsKKwkJCWZyZWUob3B0cy0+Z3BnX3NpZ25fb3B0KTsKKwkJCW9wdHMtPmdwZ19zaWduX29wdCA9IHRtcDsKKwkJfQorCisJCXN0YXR1cyA9IHJ1bl9zZXF1ZW5jZXJfcmViYXNlKG9wdHMsIGFjdGlvbik7CisJCWdvdG8gZmluaXNoZWRfcmViYXNlOworCX0KKworCWlmIChvcHRzLT50eXBlID09IFJFQkFTRV9BUFBMWSkgeworCQlzdGF0dXMgPSBydW5fYW0ob3B0cyk7CisJCWdvdG8gZmluaXNoZWRfcmViYXNlOworCX0KKworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAiR0lUX0RJUiIsIGFic29sdXRlX3BhdGgoZ2V0X2dpdF9kaXIoKSkpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAic3RhdGVfZGlyIiwgb3B0cy0+c3RhdGVfZGlyKTsKKworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAidXBzdHJlYW1fbmFtZSIsIG9wdHMtPnVwc3RyZWFtX25hbWUpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAidXBzdHJlYW0iLCBvcHRzLT51cHN0cmVhbSA/CisJCW9pZF90b19oZXgoJm9wdHMtPnVwc3RyZWFtLT5vYmplY3Qub2lkKSA6IE5VTEwpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAiaGVhZF9uYW1lIiwKKwkJb3B0cy0+aGVhZF9uYW1lID8gb3B0cy0+aGVhZF9uYW1lIDogImRldGFjaGVkIEhFQUQiKTsKKwlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgIm9yaWdfaGVhZCIsIG9pZF90b19oZXgoJm9wdHMtPm9yaWdfaGVhZCkpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAib250byIsIG9wdHMtPm9udG8gPworCQlvaWRfdG9faGV4KCZvcHRzLT5vbnRvLT5vYmplY3Qub2lkKSA6IE5VTEwpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAib250b19uYW1lIiwgb3B0cy0+b250b19uYW1lKTsKKwlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgInJldmlzaW9ucyIsIG9wdHMtPnJldmlzaW9ucyk7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJyZXN0cmljdF9yZXZpc2lvbiIsIG9wdHMtPnJlc3RyaWN0X3JldmlzaW9uID8KKwkJb2lkX3RvX2hleCgmb3B0cy0+cmVzdHJpY3RfcmV2aXNpb24tPm9iamVjdC5vaWQpIDogTlVMTCk7CisJc3FfcXVvdGVfYXJndl9wcmV0dHkoJmJ1Ziwgb3B0cy0+Z2l0X2FtX29wdHMuYXJndik7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJnaXRfYW1fb3B0IiwgYnVmLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJ2ZXJib3NlIiwKKwkJb3B0cy0+ZmxhZ3MgJiBSRUJBU0VfVkVSQk9TRSA/ICJ0IiA6ICIiKTsKKwlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgImRpZmZzdGF0IiwKKwkJb3B0cy0+ZmxhZ3MgJiBSRUJBU0VfRElGRlNUQVQgPyAidCIgOiAiIik7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJmb3JjZV9yZWJhc2UiLAorCQlvcHRzLT5mbGFncyAmIFJFQkFTRV9GT1JDRSA/ICJ0IiA6ICIiKTsKKwlpZiAob3B0cy0+c3dpdGNoX3RvKQorCQlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgInN3aXRjaF90byIsIG9wdHMtPnN3aXRjaF90byk7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJhY3Rpb24iLCBvcHRzLT5hY3Rpb24gPyBvcHRzLT5hY3Rpb24gOiAiIik7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJzaWdub2ZmIiwgb3B0cy0+c2lnbm9mZiA/ICItLXNpZ25vZmYiIDogIiIpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAiYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUiLAorCQlvcHRzLT5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSA/CisJCQlvcHRzLT5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSA9PSBSRVJFUkVfQVVUT1VQREFURSA/CisJCQkiLS1yZXJlcmUtYXV0b3VwZGF0ZSIgOiAiLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSIgOiAiIik7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJrZWVwX2VtcHR5Iiwgb3B0cy0+a2VlcF9lbXB0eSA/ICJ5ZXMiIDogIiIpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAiYXV0b3NxdWFzaCIsIG9wdHMtPmF1dG9zcXVhc2ggPyAidCIgOiAiIik7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJncGdfc2lnbl9vcHQiLCBvcHRzLT5ncGdfc2lnbl9vcHQpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAiY21kIiwgb3B0cy0+Y21kKTsKKwlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgImFsbG93X2VtcHR5X21lc3NhZ2UiLAorCQlvcHRzLT5hbGxvd19lbXB0eV9tZXNzYWdlID8gICItLWFsbG93LWVtcHR5LW1lc3NhZ2UiIDogIiIpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAicmViYXNlX21lcmdlcyIsCisJCW9wdHMtPnJlYmFzZV9tZXJnZXMgPyAidCIgOiAiIik7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJyZWJhc2VfY291c2lucyIsCisJCW9wdHMtPnJlYmFzZV9jb3VzaW5zID8gInQiIDogIiIpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAic3RyYXRlZ3kiLCBvcHRzLT5zdHJhdGVneSk7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJzdHJhdGVneV9vcHRzIiwgb3B0cy0+c3RyYXRlZ3lfb3B0cyk7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJyZWJhc2Vfcm9vdCIsIG9wdHMtPnJvb3QgPyAidCIgOiAiIik7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJzcXVhc2hfb250byIsCisJCW9wdHMtPnNxdWFzaF9vbnRvID8gb2lkX3RvX2hleChvcHRzLT5zcXVhc2hfb250bykgOiAiIik7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJnaXRfZm9ybWF0X3BhdGNoX29wdCIsCisJCW9wdHMtPmdpdF9mb3JtYXRfcGF0Y2hfb3B0LmJ1Zik7CisKKwlpZiAoaXNfbWVyZ2Uob3B0cykgJiYKKwkgICAgIShvcHRzLT5mbGFncyAmIFJFQkFTRV9JTlRFUkFDVElWRV9FWFBMSUNJVCkpIHsKKwkJc3RyYnVmX2FkZHN0cigmc2NyaXB0X3NuaXBwZXQsCisJCQkgICAgICAiR0lUX1NFUVVFTkNFX0VESVRPUj06OyBleHBvcnQgR0lUX1NFUVVFTkNFX0VESVRPUjsgIik7CisJCW9wdHMtPmF1dG9zcXVhc2ggPSAwOworCX0KKworCXN3aXRjaCAob3B0cy0+dHlwZSkgeworCWNhc2UgUkVCQVNFX1BSRVNFUlZFX01FUkdFUzoKKwkJYmFja2VuZCA9ICJnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMiOworCQliYWNrZW5kX2Z1bmMgPSAiZ2l0X3JlYmFzZV9fcHJlc2VydmVfbWVyZ2VzIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCJVbmhhbmRsZWQgcmViYXNlIHR5cGUgJWQiLCBvcHRzLT50eXBlKTsKKwkJYnJlYWs7CisJfQorCisJc3RyYnVmX2FkZGYoJnNjcmlwdF9zbmlwcGV0LAorCQkgICAgIi4gZ2l0LXNoLXNldHVwICYmIC4gJXMgJiYgJXMiLCBiYWNrZW5kLCBiYWNrZW5kX2Z1bmMpOworCWFyZ3ZbMF0gPSBzY3JpcHRfc25pcHBldC5idWY7CisKKwlzdGF0dXMgPSBydW5fY29tbWFuZF92X29wdChhcmd2LCBSVU5fVVNJTkdfU0hFTEwpOworZmluaXNoZWRfcmViYXNlOgorCWlmIChvcHRzLT5kb250X2ZpbmlzaF9yZWJhc2UpCisJCTsgLyogZG8gbm90aGluZyAqLworCWVsc2UgaWYgKG9wdHMtPnR5cGUgPT0gUkVCQVNFX01FUkdFKQorCQk7IC8qIG1lcmdlIGJhY2tlbmQgY2xlYW5zIHVwIGFmdGVyIGl0c2VsZiAqLworCWVsc2UgaWYgKHN0YXR1cyA9PSAwKSB7CisJCWlmICghZmlsZV9leGlzdHMoc3RhdGVfZGlyX3BhdGgoInN0b3BwZWQtc2hhIiwgb3B0cykpKQorCQkJZmluaXNoX3JlYmFzZShvcHRzKTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAyKSB7CisJCXN0cnVjdCBzdHJidWYgZGlyID0gU1RSQlVGX0lOSVQ7CisKKwkJYXBwbHlfYXV0b3N0YXNoKHN0YXRlX2Rpcl9wYXRoKCJhdXRvc3Rhc2giLCBvcHRzKSk7CisJCXN0cmJ1Zl9hZGRzdHIoJmRpciwgb3B0cy0+c3RhdGVfZGlyKTsKKwkJcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmZGlyLCAwKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmRpcik7CisJCWRpZSgiTm90aGluZyB0byBkbyIpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZzY3JpcHRfc25pcHBldCk7CisKKwlyZXR1cm4gc3RhdHVzID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IHJlYmFzZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmViYXNlX29wdGlvbnMgKm9wdHMgPSBkYXRhOworCisJaWYgKCFzdHJjbXAodmFyLCAicmViYXNlLnN0YXQiKSkgeworCQlpZiAoZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpKQorCQkJb3B0cy0+ZmxhZ3MgfD0gUkVCQVNFX0RJRkZTVEFUOworCQllbHNlCisJCQlvcHRzLT5mbGFncyAmPSB+UkVCQVNFX0RJRkZTVEFUOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJyZWJhc2UuYXV0b3NxdWFzaCIpKSB7CisJCW9wdHMtPmF1dG9zcXVhc2ggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvbW1pdC5ncGdzaWduIikpIHsKKwkJZnJlZShvcHRzLT5ncGdfc2lnbl9vcHQpOworCQlvcHRzLT5ncGdfc2lnbl9vcHQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkgPworCQkJeHN0cmR1cCgiLVMiKSA6IE5VTEw7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgInJlYmFzZS5hdXRvc3Rhc2giKSkgeworCQlvcHRzLT5hdXRvc3Rhc2ggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgInJlYmFzZS5yZXNjaGVkdWxlZmFpbGVkZXhlYyIpKSB7CisJCW9wdHMtPnJlc2NoZWR1bGVfZmFpbGVkX2V4ZWMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgInJlYmFzZS51c2VidWlsdGluIikpIHsKKwkJb3B0cy0+dXNlX2xlZ2FjeV9yZWJhc2UgPSAhZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJyZWJhc2UuYmFja2VuZCIpKSB7CisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmb3B0cy0+ZGVmYXVsdF9iYWNrZW5kLCB2YXIsIHZhbHVlKTsKKwl9CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGRhdGEpOworfQorCisvKgorICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21taXRzIGluIGZyb20uLnRvIGFyZSBsaW5lYXIsIGkuZS4gY29udGFpbgorICogbm8gbWVyZ2UgY29tbWl0cy4gVGhpcyBmdW5jdGlvbiAqZXhwZWN0cyogYGZyb21gIHRvIGJlIGFuIGFuY2VzdG9yIG9mCisgKiBgdG9gLgorICovCitzdGF0aWMgaW50IGlzX2xpbmVhcl9oaXN0b3J5KHN0cnVjdCBjb21taXQgKmZyb20sIHN0cnVjdCBjb21taXQgKnRvKQoreworCXdoaWxlICh0byAmJiB0byAhPSBmcm9tKSB7CisJCXBhcnNlX2NvbW1pdCh0byk7CisJCWlmICghdG8tPnBhcmVudHMpCisJCQlyZXR1cm4gMTsKKwkJaWYgKHRvLT5wYXJlbnRzLT5uZXh0KQorCQkJcmV0dXJuIDA7CisJCXRvID0gdG8tPnBhcmVudHMtPml0ZW07CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNhbl9mYXN0X2ZvcndhcmQoc3RydWN0IGNvbW1pdCAqb250bywgc3RydWN0IGNvbW1pdCAqdXBzdHJlYW0sCisJCQkgICAgc3RydWN0IGNvbW1pdCAqcmVzdHJpY3RfcmV2aXNpb24sCisJCQkgICAgc3RydWN0IG9iamVjdF9pZCAqaGVhZF9vaWQsIHN0cnVjdCBvYmplY3RfaWQgKm1lcmdlX2Jhc2UpCit7CisJc3RydWN0IGNvbW1pdCAqaGVhZCA9IGxvb2t1cF9jb21taXQodGhlX3JlcG9zaXRvcnksIGhlYWRfb2lkKTsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm1lcmdlX2Jhc2VzID0gTlVMTDsKKwlpbnQgcmVzID0gMDsKKworCWlmICghaGVhZCkKKwkJZ290byBkb25lOworCisJbWVyZ2VfYmFzZXMgPSBnZXRfbWVyZ2VfYmFzZXMob250bywgaGVhZCk7CisJaWYgKCFtZXJnZV9iYXNlcyB8fCBtZXJnZV9iYXNlcy0+bmV4dCkgeworCQlvaWRjcHkobWVyZ2VfYmFzZSwgJm51bGxfb2lkKTsKKwkJZ290byBkb25lOworCX0KKworCW9pZGNweShtZXJnZV9iYXNlLCAmbWVyZ2VfYmFzZXMtPml0ZW0tPm9iamVjdC5vaWQpOworCWlmICghb2lkZXEobWVyZ2VfYmFzZSwgJm9udG8tPm9iamVjdC5vaWQpKQorCQlnb3RvIGRvbmU7CisKKwlpZiAocmVzdHJpY3RfcmV2aXNpb24gJiYgIW9pZGVxKCZyZXN0cmljdF9yZXZpc2lvbi0+b2JqZWN0Lm9pZCwgbWVyZ2VfYmFzZSkpCisJCWdvdG8gZG9uZTsKKworCWlmICghdXBzdHJlYW0pCisJCWdvdG8gZG9uZTsKKworCWZyZWVfY29tbWl0X2xpc3QobWVyZ2VfYmFzZXMpOworCW1lcmdlX2Jhc2VzID0gZ2V0X21lcmdlX2Jhc2VzKHVwc3RyZWFtLCBoZWFkKTsKKwlpZiAoIW1lcmdlX2Jhc2VzIHx8IG1lcmdlX2Jhc2VzLT5uZXh0KQorCQlnb3RvIGRvbmU7CisKKwlpZiAoIW9pZGVxKCZvbnRvLT5vYmplY3Qub2lkLCAmbWVyZ2VfYmFzZXMtPml0ZW0tPm9iamVjdC5vaWQpKQorCQlnb3RvIGRvbmU7CisKKwlyZXMgPSAxOworCitkb25lOgorCWZyZWVfY29tbWl0X2xpc3QobWVyZ2VfYmFzZXMpOworCXJldHVybiByZXMgJiYgaXNfbGluZWFyX2hpc3Rvcnkob250bywgaGVhZCk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0X2FtKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRzID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCisJb3B0cy0+dHlwZSA9IFJFQkFTRV9BUFBMWTsKKworCXJldHVybiAwOworfQorCisvKiAtaSBmb2xsb3dlZCBieSAtbSBpcyBzdGlsbCAtaSAqLworc3RhdGljIGludCBwYXJzZV9vcHRfbWVyZ2UoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgcmViYXNlX29wdGlvbnMgKm9wdHMgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisKKwlpZiAoIWlzX21lcmdlKG9wdHMpKQorCQlvcHRzLT50eXBlID0gUkVCQVNFX01FUkdFOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC1pIGZvbGxvd2VkIGJ5IC1wIGlzIHN0aWxsIGV4cGxpY2l0bHkgaW50ZXJhY3RpdmUsIGJ1dCAtcCBhbG9uZSBpcyBub3QgKi8KK3N0YXRpYyBpbnQgcGFyc2Vfb3B0X2ludGVyYWN0aXZlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCSBpbnQgdW5zZXQpCit7CisJc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRzID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCisJb3B0cy0+dHlwZSA9IFJFQkFTRV9NRVJHRTsKKwlvcHRzLT5mbGFncyB8PSBSRUJBU0VfSU5URVJBQ1RJVkVfRVhQTElDSVQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gZW1wdHlfdHlwZSBwYXJzZV9lbXB0eV92YWx1ZShjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJkcm9wIikpCisJCXJldHVybiBFTVBUWV9EUk9QOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAia2VlcCIpKQorCQlyZXR1cm4gRU1QVFlfS0VFUDsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImFzayIpKQorCQlyZXR1cm4gRU1QVFlfQVNLOworCisJZGllKF8oInVucmVjb2duaXplZCBlbXB0eSB0eXBlICclcyc7IHZhbGlkIHZhbHVlcyBhcmUgXCJkcm9wXCIsIFwia2VlcFwiLCBhbmQgXCJhc2tcIi4iKSwgdmFsdWUpOworfQorCitzdGF0aWMgaW50IHBhcnNlX29wdF9lbXB0eShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCByZWJhc2Vfb3B0aW9ucyAqb3B0aW9ucyA9IG9wdC0+dmFsdWU7CisJZW51bSBlbXB0eV90eXBlIHZhbHVlID0gcGFyc2VfZW1wdHlfdmFsdWUoYXJnKTsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKworCW9wdGlvbnMtPmVtcHR5ID0gdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIE5PUkVUVVJOIGVycm9yX29uX21pc3NpbmdfZGVmYXVsdF91cHN0cmVhbSh2b2lkKQoreworCXN0cnVjdCBicmFuY2ggKmN1cnJlbnRfYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKworCXByaW50ZihfKCIlc1xuIgorCQkgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC5cbiIKKwkJICJTZWUgZ2l0LXJlYmFzZSgxKSBmb3IgZGV0YWlscy5cbiIKKwkJICJcbiIKKwkJICIgICAgZ2l0IHJlYmFzZSAnPGJyYW5jaD4nXG4iCisJCSAiXG4iKSwKKwkJY3VycmVudF9icmFuY2ggPyBfKCJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgIgorCQkJInRoZSBjdXJyZW50IGJyYW5jaC4iKSA6CisJCQlfKCJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIikpOworCisJaWYgKGN1cnJlbnRfYnJhbmNoKSB7CisJCWNvbnN0IGNoYXIgKnJlbW90ZSA9IGN1cnJlbnRfYnJhbmNoLT5yZW1vdGVfbmFtZTsKKworCQlpZiAoIXJlbW90ZSkKKwkJCXJlbW90ZSA9IF8oIjxyZW1vdGU+Iik7CisKKwkJcHJpbnRmKF8oIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyAiCisJCQkgImJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6XG4iCisJCQkgIlxuIgorCQkJICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorCQkJICJcbiIpLAorCQkgICAgICAgcmVtb3RlLCBjdXJyZW50X2JyYW5jaC0+bmFtZSk7CisJfQorCWV4aXQoMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9yZWZsb2dfYWN0aW9uKHN0cnVjdCByZWJhc2Vfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwljb25zdCBjaGFyICplbnY7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghaXNfbWVyZ2Uob3B0aW9ucykpCisJCXJldHVybjsKKworCWVudiA9IGdldGVudihHSVRfUkVGTE9HX0FDVElPTl9FTlZJUk9OTUVOVCk7CisJaWYgKGVudiAmJiBzdHJjbXAoInJlYmFzZSIsIGVudikpCisJCXJldHVybjsgLyogb25seSBvdmVycmlkZSBpdCBpZiBpdCBpcyAicmViYXNlIiAqLworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlYmFzZSAoJXMpIiwgb3B0aW9ucy0+YWN0aW9uKTsKKwlzZXRlbnYoR0lUX1JFRkxPR19BQ1RJT05fRU5WSVJPTk1FTlQsIGJ1Zi5idWYsIDEpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgaW50IGNoZWNrX2V4ZWNfY21kKGNvbnN0IGNoYXIgKmNtZCkKK3sKKwlpZiAoc3RyY2hyKGNtZCwgJ1xuJykpCisJCXJldHVybiBlcnJvcihfKCJleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIikpOworCisJLyogRG9lcyB0aGUgY29tbWFuZCBjb25zaXN0IHB1cmVseSBvZiB3aGl0ZXNwYWNlPyAqLworCWlmICghY21kW3N0cnNwbihjbWQsICIgXHRcclxmXHYiKV0pCisJCXJldHVybiBlcnJvcihfKCJlbXB0eSBleGVjIGNvbW1hbmQiKSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9yZWJhc2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJlYmFzZV9vcHRpb25zIG9wdGlvbnMgPSBSRUJBU0VfT1BUSU9OU19JTklUOworCWNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lOworCWludCByZXQsIGZsYWdzLCB0b3RhbF9hcmdjLCBpbl9wcm9ncmVzcyA9IDA7CisJaW50IGtlZXBfYmFzZSA9IDA7CisJaW50IG9rX3RvX3NraXBfcHJlX3JlYmFzZSA9IDA7CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHJldmlzaW9ucyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG9iamVjdF9pZCBtZXJnZV9iYXNlOworCWVudW0gYWN0aW9uIGFjdGlvbiA9IEFDVElPTl9OT05FOworCWNvbnN0IGNoYXIgKmdwZ19zaWduID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhlYyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJY29uc3QgY2hhciAqcmViYXNlX21lcmdlcyA9IE5VTEw7CisJaW50IGZvcmtfcG9pbnQgPSAtMTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3RyYXRlZ3lfb3B0aW9ucyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IG9iamVjdF9pZCBzcXVhc2hfb250bzsKKwljaGFyICpzcXVhc2hfb250b19uYW1lID0gTlVMTDsKKwlpbnQgcmVzY2hlZHVsZV9mYWlsZWRfZXhlYyA9IC0xOworCWludCBhbGxvd19wcmVlbXB0aXZlX2ZmID0gMTsKKwlzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fcmViYXNlX29wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAib250byIsICZvcHRpb25zLm9udG9fbmFtZSwKKwkJCSAgIE5fKCJyZXZpc2lvbiIpLAorCQkJICAgTl8oInJlYmFzZSBvbnRvIGdpdmVuIGJyYW5jaCBpbnN0ZWFkIG9mIHVwc3RyZWFtIikpLAorCQlPUFRfQk9PTCgwLCAia2VlcC1iYXNlIiwgJmtlZXBfYmFzZSwKKwkJCSBOXygidXNlIHRoZSBtZXJnZS1iYXNlIG9mIHVwc3RyZWFtIGFuZCBicmFuY2ggYXMgdGhlIGN1cnJlbnQgYmFzZSIpKSwKKwkJT1BUX0JPT0woMCwgIm5vLXZlcmlmeSIsICZva190b19za2lwX3ByZV9yZWJhc2UsCisJCQkgTl8oImFsbG93IHByZS1yZWJhc2UgaG9vayB0byBydW4iKSksCisJCU9QVF9ORUdCSVQoJ3EnLCAicXVpZXQiLCAmb3B0aW9ucy5mbGFncywKKwkJCSAgIE5fKCJiZSBxdWlldC4gaW1wbGllcyAtLW5vLXN0YXQiKSwKKwkJCSAgIFJFQkFTRV9OT19RVUlFVCB8IFJFQkFTRV9WRVJCT1NFIHwgUkVCQVNFX0RJRkZTVEFUKSwKKwkJT1BUX0JJVCgndicsICJ2ZXJib3NlIiwgJm9wdGlvbnMuZmxhZ3MsCisJCQlOXygiZGlzcGxheSBhIGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIpLAorCQkJUkVCQVNFX05PX1FVSUVUIHwgUkVCQVNFX1ZFUkJPU0UgfCBSRUJBU0VfRElGRlNUQVQpLAorCQl7T1BUSU9OX05FR0JJVCwgJ24nLCAibm8tc3RhdCIsICZvcHRpb25zLmZsYWdzLCBOVUxMLAorCQkJTl8oImRvIG5vdCBzaG93IGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIpLAorCQkJUEFSU0VfT1BUX05PQVJHLCBOVUxMLCBSRUJBU0VfRElGRlNUQVQgfSwKKwkJT1BUX0JPT0woMCwgInNpZ25vZmYiLCAmb3B0aW9ucy5zaWdub2ZmLAorCQkJIE5fKCJhZGQgYSBTaWduZWQtb2ZmLWJ5OiBsaW5lIHRvIGVhY2ggY29tbWl0IikpLAorCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAiaWdub3JlLXdoaXRlc3BhY2UiLCAmb3B0aW9ucy5naXRfYW1fb3B0cywKKwkJCQkgIE5VTEwsIE5fKCJwYXNzZWQgdG8gJ2dpdCBhbSciKSwKKwkJCQkgIFBBUlNFX09QVF9OT0FSRyksCisJCU9QVF9QQVNTVEhSVV9BUkdWKDAsICJjb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSIsCisJCQkJICAmb3B0aW9ucy5naXRfYW1fb3B0cywgTlVMTCwKKwkJCQkgIE5fKCJwYXNzZWQgdG8gJ2dpdCBhbSciKSwgUEFSU0VfT1BUX05PQVJHKSwKKwkJT1BUX1BBU1NUSFJVX0FSR1YoMCwgImlnbm9yZS1kYXRlIiwgJm9wdGlvbnMuZ2l0X2FtX29wdHMsIE5VTEwsCisJCQkJICBOXygicGFzc2VkIHRvICdnaXQgYW0nIiksIFBBUlNFX09QVF9OT0FSRyksCisJCU9QVF9QQVNTVEhSVV9BUkdWKCdDJywgTlVMTCwgJm9wdGlvbnMuZ2l0X2FtX29wdHMsIE5fKCJuIiksCisJCQkJICBOXygicGFzc2VkIHRvICdnaXQgYXBwbHknIiksIDApLAorCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAid2hpdGVzcGFjZSIsICZvcHRpb25zLmdpdF9hbV9vcHRzLAorCQkJCSAgTl8oImFjdGlvbiIpLCBOXygicGFzc2VkIHRvICdnaXQgYXBwbHknIiksIDApLAorCQlPUFRfQklUKCdmJywgImZvcmNlLXJlYmFzZSIsICZvcHRpb25zLmZsYWdzLAorCQkJTl8oImNoZXJyeS1waWNrIGFsbCBjb21taXRzLCBldmVuIGlmIHVuY2hhbmdlZCIpLAorCQkJUkVCQVNFX0ZPUkNFKSwKKwkJT1BUX0JJVCgwLCAibm8tZmYiLCAmb3B0aW9ucy5mbGFncywKKwkJCU5fKCJjaGVycnktcGljayBhbGwgY29tbWl0cywgZXZlbiBpZiB1bmNoYW5nZWQiKSwKKwkJCVJFQkFTRV9GT1JDRSksCisJCU9QVF9DTURNT0RFKDAsICJjb250aW51ZSIsICZhY3Rpb24sIE5fKCJjb250aW51ZSIpLAorCQkJICAgIEFDVElPTl9DT05USU5VRSksCisJCU9QVF9DTURNT0RFKDAsICJza2lwIiwgJmFjdGlvbiwKKwkJCSAgICBOXygic2tpcCBjdXJyZW50IHBhdGNoIGFuZCBjb250aW51ZSIpLCBBQ1RJT05fU0tJUCksCisJCU9QVF9DTURNT0RFKDAsICJhYm9ydCIsICZhY3Rpb24sCisJCQkgICAgTl8oImFib3J0IGFuZCBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCIpLAorCQkJICAgIEFDVElPTl9BQk9SVCksCisJCU9QVF9DTURNT0RFKDAsICJxdWl0IiwgJmFjdGlvbiwKKwkJCSAgICBOXygiYWJvcnQgYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcyIpLCBBQ1RJT05fUVVJVCksCisJCU9QVF9DTURNT0RFKDAsICJlZGl0LXRvZG8iLCAmYWN0aW9uLCBOXygiZWRpdCB0aGUgdG9kbyBsaXN0ICIKKwkJCSAgICAiZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZSIpLCBBQ1RJT05fRURJVF9UT0RPKSwKKwkJT1BUX0NNRE1PREUoMCwgInNob3ctY3VycmVudC1wYXRjaCIsICZhY3Rpb24sCisJCQkgICAgTl8oInNob3cgdGhlIHBhdGNoIGZpbGUgYmVpbmcgYXBwbGllZCBvciBtZXJnZWQiKSwKKwkJCSAgICBBQ1RJT05fU0hPV19DVVJSRU5UX1BBVENIKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgImFwcGx5IiwgJm9wdGlvbnMsIE5VTEwsCisJCQlOXygidXNlIGFwcGx5IHN0cmF0ZWdpZXMgdG8gcmViYXNlIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9vcHRfYW0pLAorCQlPUFRfQ0FMTEJBQ0tfRignbScsICJtZXJnZSIsICZvcHRpb25zLCBOVUxMLAorCQkJTl8oInVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9vcHRfbWVyZ2UpLAorCQlPUFRfQ0FMTEJBQ0tfRignaScsICJpbnRlcmFjdGl2ZSIsICZvcHRpb25zLCBOVUxMLAorCQkJTl8oImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9vcHRfaW50ZXJhY3RpdmUpLAorCQlPUFRfU0VUX0lOVF9GKCdwJywgInByZXNlcnZlLW1lcmdlcyIsICZvcHRpb25zLnR5cGUsCisJCQkgICAgICBOXygiKERFUFJFQ0FURUQpIHRyeSB0byByZWNyZWF0ZSBtZXJnZXMgaW5zdGVhZCBvZiAiCisJCQkJICJpZ25vcmluZyB0aGVtIiksCisJCQkgICAgICBSRUJBU0VfUFJFU0VSVkVfTUVSR0VTLCBQQVJTRV9PUFRfSElEREVOKSwKKwkJT1BUX1JFUkVSRV9BVVRPVVBEQVRFKCZvcHRpb25zLmFsbG93X3JlcmVyZV9hdXRvdXBkYXRlKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgImVtcHR5IiwgJm9wdGlvbnMsICJ7ZHJvcCxrZWVwLGFza30iLAorCQkJICAgICAgIE5fKCJob3cgdG8gaGFuZGxlIGNvbW1pdHMgdGhhdCBiZWNvbWUgZW1wdHkiKSwKKwkJCSAgICAgICBQQVJTRV9PUFRfTk9ORUcsIHBhcnNlX29wdF9lbXB0eSksCisJCU9QVF9DQUxMQkFDS19GKCdrJywgImtlZXAtZW1wdHkiLCAmb3B0aW9ucywgTlVMTCwKKwkJCU5fKCJrZWVwIGNvbW1pdHMgd2hpY2ggc3RhcnQgZW1wdHkiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9ISURERU4sCisJCQlwYXJzZV9vcHRfa2VlcF9lbXB0eSksCisJCU9QVF9CT09MKDAsICJhdXRvc3F1YXNoIiwgJm9wdGlvbnMuYXV0b3NxdWFzaCwKKwkJCSBOXygibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCAiCisJCQkgICAgInNxdWFzaCEvZml4dXAhIHVuZGVyIC1pIikpLAorCQl7IE9QVElPTl9TVFJJTkcsICdTJywgImdwZy1zaWduIiwgJmdwZ19zaWduLCBOXygia2V5LWlkIiksCisJCQlOXygiR1BHLXNpZ24gY29tbWl0cyIpLAorCQkJUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSAiIiB9LAorCQlPUFRfQVVUT1NUQVNIKCZvcHRpb25zLmF1dG9zdGFzaCksCisJCU9QVF9TVFJJTkdfTElTVCgneCcsICJleGVjIiwgJmV4ZWMsIE5fKCJleGVjIiksCisJCQkJTl8oImFkZCBleGVjIGxpbmVzIGFmdGVyIGVhY2ggY29tbWl0IG9mIHRoZSAiCisJCQkJICAgImVkaXRhYmxlIGxpc3QiKSksCisJCU9QVF9CT09MX0YoMCwgImFsbG93LWVtcHR5LW1lc3NhZ2UiLAorCQkJICAgJm9wdGlvbnMuYWxsb3dfZW1wdHlfbWVzc2FnZSwKKwkJCSAgIE5fKCJhbGxvdyByZWJhc2luZyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiKSwKKwkJCSAgIFBBUlNFX09QVF9ISURERU4pLAorCQl7T1BUSU9OX1NUUklORywgJ3InLCAicmViYXNlLW1lcmdlcyIsICZyZWJhc2VfbWVyZ2VzLAorCQkJTl8oIm1vZGUiKSwKKwkJCU5fKCJ0cnkgdG8gcmViYXNlIG1lcmdlcyBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZW0iKSwKKwkJCVBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdCkiIn0sCisJCU9QVF9CT09MKDAsICJmb3JrLXBvaW50IiwgJmZvcmtfcG9pbnQsCisJCQkgTl8oInVzZSAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIHRvIHJlZmluZSB1cHN0cmVhbSIpKSwKKwkJT1BUX1NUUklORygncycsICJzdHJhdGVneSIsICZvcHRpb25zLnN0cmF0ZWd5LAorCQkJICAgTl8oInN0cmF0ZWd5IiksIE5fKCJ1c2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5IikpLAorCQlPUFRfU1RSSU5HX0xJU1QoJ1gnLCAic3RyYXRlZ3ktb3B0aW9uIiwgJnN0cmF0ZWd5X29wdGlvbnMsCisJCQkJTl8oIm9wdGlvbiIpLAorCQkJCU5fKCJwYXNzIHRoZSBhcmd1bWVudCB0aHJvdWdoIHRvIHRoZSBtZXJnZSAiCisJCQkJICAgInN0cmF0ZWd5IikpLAorCQlPUFRfQk9PTCgwLCAicm9vdCIsICZvcHRpb25zLnJvb3QsCisJCQkgTl8oInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiKSksCisJCU9QVF9CT09MKDAsICJyZXNjaGVkdWxlLWZhaWxlZC1leGVjIiwKKwkJCSAmcmVzY2hlZHVsZV9mYWlsZWRfZXhlYywKKwkJCSBOXygiYXV0b21hdGljYWxseSByZS1zY2hlZHVsZSBhbnkgYGV4ZWNgIHRoYXQgZmFpbHMiKSksCisJCU9QVF9CT09MKDAsICJyZWFwcGx5LWNoZXJyeS1waWNrcyIsICZvcHRpb25zLnJlYXBwbHlfY2hlcnJ5X3BpY2tzLAorCQkJIE5fKCJhcHBseSBhbGwgY2hhbmdlcywgZXZlbiB0aG9zZSBhbHJlYWR5IHByZXNlbnQgdXBzdHJlYW0iKSksCisJCU9QVF9FTkQoKSwKKwl9OworCWludCBpOworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZWJhc2VfdXNhZ2UsCisJCQkJICAgYnVpbHRpbl9yZWJhc2Vfb3B0aW9ucyk7CisKKwlvcHRpb25zLmFsbG93X2VtcHR5X21lc3NhZ2UgPSAxOworCWdpdF9jb25maWcocmViYXNlX2NvbmZpZywgJm9wdGlvbnMpOworCS8qIG9wdGlvbnMuZ3BnX3NpZ25fb3B0IHdpbGwgYmUgZWl0aGVyICItUyIgb3IgTlVMTCAqLworCWdwZ19zaWduID0gb3B0aW9ucy5ncGdfc2lnbl9vcHQgPyAiIiA6IE5VTEw7CisJRlJFRV9BTkRfTlVMTChvcHRpb25zLmdwZ19zaWduX29wdCk7CisKKwlpZiAob3B0aW9ucy51c2VfbGVnYWN5X3JlYmFzZSB8fAorCSAgICAhZ2l0X2Vudl9ib29sKCJHSVRfVEVTVF9SRUJBU0VfVVNFX0JVSUxUSU4iLCAtMSkpCisJCXdhcm5pbmcoXygidGhlIHJlYmFzZS51c2VCdWlsdGluIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCFcbiIKKwkJCSAgIlNlZSBpdHMgZW50cnkgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIGRldGFpbHMuIikpOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy9hcHBseWluZyIsIGFwcGx5X2RpcigpKTsKKwlpZihmaWxlX2V4aXN0cyhidWYuYnVmKSkKKwkJZGllKF8oIkl0IGxvb2tzIGxpa2UgJ2dpdCBhbScgaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIikpOworCisJaWYgKGlzX2RpcmVjdG9yeShhcHBseV9kaXIoKSkpIHsKKwkJb3B0aW9ucy50eXBlID0gUkVCQVNFX0FQUExZOworCQlvcHRpb25zLnN0YXRlX2RpciA9IGFwcGx5X2RpcigpOworCX0gZWxzZSBpZiAoaXNfZGlyZWN0b3J5KG1lcmdlX2RpcigpKSkgeworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy9yZXdyaXR0ZW4iLCBtZXJnZV9kaXIoKSk7CisJCWlmIChpc19kaXJlY3RvcnkoYnVmLmJ1ZikpIHsKKwkJCW9wdGlvbnMudHlwZSA9IFJFQkFTRV9QUkVTRVJWRV9NRVJHRVM7CisJCQlvcHRpb25zLmZsYWdzIHw9IFJFQkFTRV9JTlRFUkFDVElWRV9FWFBMSUNJVDsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy9pbnRlcmFjdGl2ZSIsIG1lcmdlX2RpcigpKTsKKwkJCWlmKGZpbGVfZXhpc3RzKGJ1Zi5idWYpKSB7CisJCQkJb3B0aW9ucy50eXBlID0gUkVCQVNFX01FUkdFOworCQkJCW9wdGlvbnMuZmxhZ3MgfD0gUkVCQVNFX0lOVEVSQUNUSVZFX0VYUExJQ0lUOworCQkJfSBlbHNlCisJCQkJb3B0aW9ucy50eXBlID0gUkVCQVNFX01FUkdFOworCQl9CisJCW9wdGlvbnMuc3RhdGVfZGlyID0gbWVyZ2VfZGlyKCk7CisJfQorCisJaWYgKG9wdGlvbnMudHlwZSAhPSBSRUJBU0VfVU5TUEVDSUZJRUQpCisJCWluX3Byb2dyZXNzID0gMTsKKworCXRvdGFsX2FyZ2MgPSBhcmdjOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCSAgICAgYnVpbHRpbl9yZWJhc2Vfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9yZWJhc2VfdXNhZ2UsIDApOworCisJaWYgKGFjdGlvbiAhPSBBQ1RJT05fTk9ORSAmJiB0b3RhbF9hcmdjICE9IDIpIHsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmViYXNlX3VzYWdlLAorCQkJCSAgIGJ1aWx0aW5fcmViYXNlX29wdGlvbnMpOworCX0KKworCWlmIChhcmdjID4gMikKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmViYXNlX3VzYWdlLAorCQkJCSAgIGJ1aWx0aW5fcmViYXNlX29wdGlvbnMpOworCisJaWYgKG9wdGlvbnMudHlwZSA9PSBSRUJBU0VfUFJFU0VSVkVfTUVSR0VTKQorCQl3YXJuaW5nKF8oImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgaXMgZGVwcmVjYXRlZC4gIgorCQkJICAiVXNlIC0tcmViYXNlLW1lcmdlcyBpbnN0ZWFkLiIpKTsKKworCWlmIChrZWVwX2Jhc2UpIHsKKwkJaWYgKG9wdGlvbnMub250b19uYW1lKQorCQkJZGllKF8oImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1vbnRvJyIpKTsKKwkJaWYgKG9wdGlvbnMucm9vdCkKKwkJCWRpZShfKCJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tcm9vdCciKSk7CisJfQorCisJaWYgKG9wdGlvbnMucm9vdCAmJiBmb3JrX3BvaW50ID4gMCkKKwkJZGllKF8oImNhbm5vdCBjb21iaW5lICctLXJvb3QnIHdpdGggJy0tZm9yay1wb2ludCciKSk7CisKKwlpZiAoYWN0aW9uICE9IEFDVElPTl9OT05FICYmICFpbl9wcm9ncmVzcykKKwkJZGllKF8oIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iKSk7CisJc2V0ZW52KEdJVF9SRUZMT0dfQUNUSU9OX0VOVklST05NRU5ULCAicmViYXNlIiwgMCk7CisKKwlpZiAoYWN0aW9uID09IEFDVElPTl9FRElUX1RPRE8gJiYgIWlzX21lcmdlKCZvcHRpb25zKSkKKwkJZGllKF8oIlRoZSAtLWVkaXQtdG9kbyBhY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgIgorCQkgICAgICAiaW50ZXJhY3RpdmUgcmViYXNlLiIpKTsKKworCWlmICh0cmFjZTJfaXNfZW5hYmxlZCgpKSB7CisJCWlmIChpc19tZXJnZSgmb3B0aW9ucykpCisJCQl0cmFjZTJfY21kX21vZGUoImludGVyYWN0aXZlIik7CisJCWVsc2UgaWYgKGV4ZWMubnIpCisJCQl0cmFjZTJfY21kX21vZGUoImludGVyYWN0aXZlLWV4ZWMiKTsKKwkJZWxzZQorCQkJdHJhY2UyX2NtZF9tb2RlKGFjdGlvbl9uYW1lc1thY3Rpb25dKTsKKwl9CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQUNUSU9OX0NPTlRJTlVFOiB7CisJCXN0cnVjdCBvYmplY3RfaWQgaGVhZDsKKwkJc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGUgPSBMT0NLX0lOSVQ7CisJCWludCBmZDsKKworCQlvcHRpb25zLmFjdGlvbiA9ICJjb250aW51ZSI7CisJCXNldF9yZWZsb2dfYWN0aW9uKCZvcHRpb25zKTsKKworCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJaWYgKGdldF9vaWQoIkhFQUQiLCAmaGVhZCkpCisJCQlkaWUoXygiQ2Fubm90IHJlYWQgSEVBRCIpKTsKKworCQlmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIDApOworCQlpZiAocmVwb19yZWFkX2luZGV4KHRoZV9yZXBvc2l0b3J5KSA8IDApCisJCQlkaWUoXygiY291bGQgbm90IHJlYWQgaW5kZXgiKSk7CisJCXJlZnJlc2hfaW5kZXgodGhlX3JlcG9zaXRvcnktPmluZGV4LCBSRUZSRVNIX1FVSUVULCBOVUxMLCBOVUxMLAorCQkJICAgICAgTlVMTCk7CisJCWlmICgwIDw9IGZkKQorCQkJcmVwb191cGRhdGVfaW5kZXhfaWZfYWJsZSh0aGVfcmVwb3NpdG9yeSwgJmxvY2tfZmlsZSk7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9ja19maWxlKTsKKworCQlpZiAoaGFzX3Vuc3RhZ2VkX2NoYW5nZXModGhlX3JlcG9zaXRvcnksIDEpKSB7CisJCQlwdXRzKF8oIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlblxuIgorCQkJICAgICAgICJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJaWYgKHJlYWRfYmFzaWNfc3RhdGUoJm9wdGlvbnMpKQorCQkJZXhpdCgxKTsKKwkJZ290byBydW5fcmViYXNlOworCX0KKwljYXNlIEFDVElPTl9TS0lQOiB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBtZXJnZV9yciA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJCW9wdGlvbnMuYWN0aW9uID0gInNraXAiOworCQlzZXRfcmVmbG9nX2FjdGlvbigmb3B0aW9ucyk7CisKKwkJcmVyZXJlX2NsZWFyKHRoZV9yZXBvc2l0b3J5LCAmbWVyZ2VfcnIpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmbWVyZ2VfcnIsIDEpOworCisJCWlmIChyZXNldF9oZWFkKHRoZV9yZXBvc2l0b3J5LCBOVUxMLCAicmVzZXQiLCBOVUxMLCBSRVNFVF9IRUFEX0hBUkQsCisJCQkgICAgICAgTlVMTCwgTlVMTCwgREVGQVVMVF9SRUZMT0dfQUNUSU9OKSA8IDApCisJCQlkaWUoXygiY291bGQgbm90IGRpc2NhcmQgd29ya3RyZWUgY2hhbmdlcyIpKTsKKwkJcmVtb3ZlX2JyYW5jaF9zdGF0ZSh0aGVfcmVwb3NpdG9yeSwgMCk7CisJCWlmIChyZWFkX2Jhc2ljX3N0YXRlKCZvcHRpb25zKSkKKwkJCWV4aXQoMSk7CisJCWdvdG8gcnVuX3JlYmFzZTsKKwl9CisJY2FzZSBBQ1RJT05fQUJPUlQ6IHsKKwkJc3RydWN0IHN0cmluZ19saXN0IG1lcmdlX3JyID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJCW9wdGlvbnMuYWN0aW9uID0gImFib3J0IjsKKwkJc2V0X3JlZmxvZ19hY3Rpb24oJm9wdGlvbnMpOworCisJCXJlcmVyZV9jbGVhcih0aGVfcmVwb3NpdG9yeSwgJm1lcmdlX3JyKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJm1lcmdlX3JyLCAxKTsKKworCQlpZiAocmVhZF9iYXNpY19zdGF0ZSgmb3B0aW9ucykpCisJCQlleGl0KDEpOworCQlpZiAocmVzZXRfaGVhZCh0aGVfcmVwb3NpdG9yeSwgJm9wdGlvbnMub3JpZ19oZWFkLCAicmVzZXQiLAorCQkJICAgICAgIG9wdGlvbnMuaGVhZF9uYW1lLCBSRVNFVF9IRUFEX0hBUkQsCisJCQkgICAgICAgTlVMTCwgTlVMTCwgREVGQVVMVF9SRUZMT0dfQUNUSU9OKSA8IDApCisJCQlkaWUoXygiY291bGQgbm90IG1vdmUgYmFjayB0byAlcyIpLAorCQkJICAgIG9pZF90b19oZXgoJm9wdGlvbnMub3JpZ19oZWFkKSk7CisJCXJlbW92ZV9icmFuY2hfc3RhdGUodGhlX3JlcG9zaXRvcnksIDApOworCQlyZXQgPSAhIWZpbmlzaF9yZWJhc2UoJm9wdGlvbnMpOworCQlnb3RvIGNsZWFudXA7CisJfQorCWNhc2UgQUNUSU9OX1FVSVQ6IHsKKwkJc2F2ZV9hdXRvc3Rhc2goc3RhdGVfZGlyX3BhdGgoImF1dG9zdGFzaCIsICZvcHRpb25zKSk7CisJCWlmIChvcHRpb25zLnR5cGUgPT0gUkVCQVNFX01FUkdFKSB7CisJCQlzdHJ1Y3QgcmVwbGF5X29wdHMgcmVwbGF5ID0gUkVQTEFZX09QVFNfSU5JVDsKKworCQkJcmVwbGF5LmFjdGlvbiA9IFJFUExBWV9JTlRFUkFDVElWRV9SRUJBU0U7CisJCQlyZXQgPSAhIXNlcXVlbmNlcl9yZW1vdmVfc3RhdGUoJnJlcGxheSk7CisJCX0gZWxzZSB7CisJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQlzdHJidWZfYWRkc3RyKCZidWYsIG9wdGlvbnMuc3RhdGVfZGlyKTsKKwkJCXJldCA9ICEhcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmYnVmLCAwKTsKKwkJCWlmIChyZXQpCisJCQkJZXJyb3IoXygiY291bGQgbm90IHJlbW92ZSAnJXMnIiksCisJCQkJICAgICAgIG9wdGlvbnMuc3RhdGVfZGlyKTsKKwkJfQorCQlnb3RvIGNsZWFudXA7CisJfQorCWNhc2UgQUNUSU9OX0VESVRfVE9ETzoKKwkJb3B0aW9ucy5hY3Rpb24gPSAiZWRpdC10b2RvIjsKKwkJb3B0aW9ucy5kb250X2ZpbmlzaF9yZWJhc2UgPSAxOworCQlnb3RvIHJ1bl9yZWJhc2U7CisJY2FzZSBBQ1RJT05fU0hPV19DVVJSRU5UX1BBVENIOgorCQlvcHRpb25zLmFjdGlvbiA9ICJzaG93LWN1cnJlbnQtcGF0Y2giOworCQlvcHRpb25zLmRvbnRfZmluaXNoX3JlYmFzZSA9IDE7CisJCWdvdG8gcnVuX3JlYmFzZTsKKwljYXNlIEFDVElPTl9OT05FOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoImFjdGlvbjogJWQiLCBhY3Rpb24pOworCX0KKworCS8qIE1ha2Ugc3VyZSBubyByZWJhc2UgaXMgaW4gcHJvZ3Jlc3MgKi8KKwlpZiAoaW5fcHJvZ3Jlc3MpIHsKKwkJY29uc3QgY2hhciAqbGFzdF9zbGFzaCA9IHN0cnJjaHIob3B0aW9ucy5zdGF0ZV9kaXIsICcvJyk7CisJCWNvbnN0IGNoYXIgKnN0YXRlX2Rpcl9iYXNlID0KKwkJCWxhc3Rfc2xhc2ggPyBsYXN0X3NsYXNoICsgMSA6IG9wdGlvbnMuc3RhdGVfZGlyOworCQljb25zdCBjaGFyICpjbWRfbGl2ZV9yZWJhc2UgPQorCQkJImdpdCByZWJhc2UgKC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwKSI7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJtIC1mciBcIiVzXCIiLCBvcHRpb25zLnN0YXRlX2Rpcik7CisJCWRpZShfKCJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAlcyBkaXJlY3RvcnksIGFuZFxuIgorCQkgICAgICAiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgIgorCQkgICAgICAiSWYgdGhhdCBpcyB0aGVcbiIKKwkJICAgICAgImNhc2UsIHBsZWFzZSB0cnlcblx0JXNcbiIKKwkJICAgICAgIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2Vcblx0JXNcbiIKKwkJICAgICAgImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsICIKKwkJICAgICAgImhhdmUgc29tZXRoaW5nXG4iCisJCSAgICAgICJ2YWx1YWJsZSB0aGVyZS5cbiIpLAorCQkgICAgc3RhdGVfZGlyX2Jhc2UsIGNtZF9saXZlX3JlYmFzZSwgYnVmLmJ1Zik7CisJfQorCisJaWYgKChvcHRpb25zLmZsYWdzICYgUkVCQVNFX0lOVEVSQUNUSVZFX0VYUExJQ0lUKSB8fAorCSAgICAoYWN0aW9uICE9IEFDVElPTl9OT05FKSB8fAorCSAgICAoZXhlYy5uciA+IDApIHx8CisJICAgIG9wdGlvbnMuYXV0b3NxdWFzaCkgeworCQlhbGxvd19wcmVlbXB0aXZlX2ZmID0gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy5naXRfYW1fb3B0cy5hcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqb3B0aW9uID0gb3B0aW9ucy5naXRfYW1fb3B0cy5hcmd2W2ldLCAqcDsKKwkJaWYgKCFzdHJjbXAob3B0aW9uLCAiLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSIpIHx8CisJCSAgICAhc3RyY21wKG9wdGlvbiwgIi0taWdub3JlLWRhdGUiKSB8fAorCQkgICAgIXN0cmNtcChvcHRpb24sICItLXdoaXRlc3BhY2U9Zml4IikgfHwKKwkJICAgICFzdHJjbXAob3B0aW9uLCAiLS13aGl0ZXNwYWNlPXN0cmlwIikpCisJCQlhbGxvd19wcmVlbXB0aXZlX2ZmID0gMDsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgob3B0aW9uLCAiLUMiLCAmcCkpIHsKKwkJCXdoaWxlICgqcCkKKwkJCQlpZiAoIWlzZGlnaXQoKihwKyspKSkKKwkJCQkJZGllKF8oInN3aXRjaCBgQycgZXhwZWN0cyBhICIKKwkJCQkJICAgICAgIm51bWVyaWNhbCB2YWx1ZSIpKTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChvcHRpb24sICItLXdoaXRlc3BhY2U9IiwgJnApKSB7CisJCQlpZiAoKnAgJiYgc3RyY21wKHAsICJ3YXJuIikgJiYgc3RyY21wKHAsICJub3dhcm4iKSAmJgorCQkJICAgIHN0cmNtcChwLCAiZXJyb3IiKSAmJiBzdHJjbXAocCwgImVycm9yLWFsbCIpKQorCQkJCWRpZSgiSW52YWxpZCB3aGl0ZXNwYWNlIG9wdGlvbjogJyVzJyIsIHApOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IGV4ZWMubnI7IGkrKykKKwkJaWYgKGNoZWNrX2V4ZWNfY21kKGV4ZWMuaXRlbXNbaV0uc3RyaW5nKSkKKwkJCWV4aXQoMSk7CisKKwlpZiAoIShvcHRpb25zLmZsYWdzICYgUkVCQVNFX05PX1FVSUVUKSkKKwkJYXJndl9hcnJheV9wdXNoKCZvcHRpb25zLmdpdF9hbV9vcHRzLCAiLXEiKTsKKworCWlmIChvcHRpb25zLmVtcHR5ICE9IEVNUFRZX1VOU1BFQ0lGSUVEKQorCQlpbXBseV9tZXJnZSgmb3B0aW9ucywgIi0tZW1wdHkiKTsKKworCWlmIChvcHRpb25zLnJlYXBwbHlfY2hlcnJ5X3BpY2tzKQorCQlpbXBseV9tZXJnZSgmb3B0aW9ucywgIi0tcmVhcHBseS1jaGVycnktcGlja3MiKTsKKworCWlmIChncGdfc2lnbikKKwkJb3B0aW9ucy5ncGdfc2lnbl9vcHQgPSB4c3RyZm10KCItUyVzIiwgZ3BnX3NpZ24pOworCisJaWYgKGV4ZWMubnIpIHsKKwkJaW50IGk7CisKKwkJaW1wbHlfbWVyZ2UoJm9wdGlvbnMsICItLWV4ZWMiKTsKKworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCWZvciAoaSA9IDA7IGkgPCBleGVjLm5yOyBpKyspCisJCQlzdHJidWZfYWRkZigmYnVmLCAiZXhlYyAlc1xuIiwgZXhlYy5pdGVtc1tpXS5zdHJpbmcpOworCQlvcHRpb25zLmNtZCA9IHhzdHJkdXAoYnVmLmJ1Zik7CisJfQorCisJaWYgKHJlYmFzZV9tZXJnZXMpIHsKKwkJaWYgKCEqcmViYXNlX21lcmdlcykKKwkJCTsgLyogZGVmYXVsdCBtb2RlOyBkbyBub3RoaW5nICovCisJCWVsc2UgaWYgKCFzdHJjbXAoInJlYmFzZS1jb3VzaW5zIiwgcmViYXNlX21lcmdlcykpCisJCQlvcHRpb25zLnJlYmFzZV9jb3VzaW5zID0gMTsKKwkJZWxzZSBpZiAoc3RyY21wKCJuby1yZWJhc2UtY291c2lucyIsIHJlYmFzZV9tZXJnZXMpKQorCQkJZGllKF8oIlVua25vd24gbW9kZTogJXMiKSwgcmViYXNlX21lcmdlcyk7CisJCW9wdGlvbnMucmViYXNlX21lcmdlcyA9IDE7CisJCWltcGx5X21lcmdlKCZvcHRpb25zLCAiLS1yZWJhc2UtbWVyZ2VzIik7CisJfQorCisJaWYgKHN0cmF0ZWd5X29wdGlvbnMubnIpIHsKKwkJaW50IGk7CisKKwkJaWYgKCFvcHRpb25zLnN0cmF0ZWd5KQorCQkJb3B0aW9ucy5zdHJhdGVneSA9ICJyZWN1cnNpdmUiOworCisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJZm9yIChpID0gMDsgaSA8IHN0cmF0ZWd5X29wdGlvbnMubnI7IGkrKykKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICIgLS0lcyIsCisJCQkJICAgIHN0cmF0ZWd5X29wdGlvbnMuaXRlbXNbaV0uc3RyaW5nKTsKKwkJb3B0aW9ucy5zdHJhdGVneV9vcHRzID0geHN0cmR1cChidWYuYnVmKTsKKwl9CisKKwlpZiAob3B0aW9ucy5zdHJhdGVneSkgeworCQlvcHRpb25zLnN0cmF0ZWd5ID0geHN0cmR1cChvcHRpb25zLnN0cmF0ZWd5KTsKKwkJc3dpdGNoIChvcHRpb25zLnR5cGUpIHsKKwkJY2FzZSBSRUJBU0VfQVBQTFk6CisJCQlkaWUoXygiLS1zdHJhdGVneSByZXF1aXJlcyAtLW1lcmdlIG9yIC0taW50ZXJhY3RpdmUiKSk7CisJCWNhc2UgUkVCQVNFX01FUkdFOgorCQljYXNlIFJFQkFTRV9QUkVTRVJWRV9NRVJHRVM6CisJCQkvKiBjb21wYXRpYmxlICovCisJCQlicmVhazsKKwkJY2FzZSBSRUJBU0VfVU5TUEVDSUZJRUQ6CisJCQlvcHRpb25zLnR5cGUgPSBSRUJBU0VfTUVSR0U7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygidW5oYW5kbGVkIHJlYmFzZSB0eXBlICglZCkiLCBvcHRpb25zLnR5cGUpOworCQl9CisJfQorCisJaWYgKG9wdGlvbnMudHlwZSA9PSBSRUJBU0VfTUVSR0UpCisJCWltcGx5X21lcmdlKCZvcHRpb25zLCAiLS1tZXJnZSIpOworCisJaWYgKG9wdGlvbnMucm9vdCAmJiAhb3B0aW9ucy5vbnRvX25hbWUpCisJCWltcGx5X21lcmdlKCZvcHRpb25zLCAiLS1yb290IHdpdGhvdXQgLS1vbnRvIik7CisKKwlpZiAoaXNhdHR5KDIpICYmIG9wdGlvbnMuZmxhZ3MgJiBSRUJBU0VfTk9fUVVJRVQpCisJCXN0cmJ1Zl9hZGRzdHIoJm9wdGlvbnMuZ2l0X2Zvcm1hdF9wYXRjaF9vcHQsICIgLS1wcm9ncmVzcyIpOworCisJaWYgKG9wdGlvbnMuZ2l0X2FtX29wdHMuYXJnYyB8fCBvcHRpb25zLnR5cGUgPT0gUkVCQVNFX0FQUExZKSB7CisJCS8qIGFsbCBhbSBvcHRpb25zIGV4Y2VwdCAtcSBhcmUgY29tcGF0aWJsZSBvbmx5IHdpdGggLS1hcHBseSAqLworCQlmb3IgKGkgPSBvcHRpb25zLmdpdF9hbV9vcHRzLmFyZ2MgLSAxOyBpID49IDA7IGktLSkKKwkJCWlmIChzdHJjbXAob3B0aW9ucy5naXRfYW1fb3B0cy5hcmd2W2ldLCAiLXEiKSkKKwkJCQlicmVhazsKKworCQlpZiAoaSA+PSAwKSB7CisJCQlpZiAoaXNfbWVyZ2UoJm9wdGlvbnMpKQorCQkJCWRpZShfKCJjYW5ub3QgY29tYmluZSBhcHBseSBvcHRpb25zIHdpdGggIgorCQkJCSAgICAgICJtZXJnZSBvcHRpb25zIikpOworCQkJZWxzZQorCQkJCW9wdGlvbnMudHlwZSA9IFJFQkFTRV9BUFBMWTsKKwkJfQorCX0KKworCWlmIChvcHRpb25zLnR5cGUgPT0gUkVCQVNFX1VOU1BFQ0lGSUVEKSB7CisJCWlmICghc3RyY21wKG9wdGlvbnMuZGVmYXVsdF9iYWNrZW5kLCAibWVyZ2UiKSkKKwkJCWltcGx5X21lcmdlKCZvcHRpb25zLCAiLS1tZXJnZSIpOworCQllbHNlIGlmICghc3RyY21wKG9wdGlvbnMuZGVmYXVsdF9iYWNrZW5kLCAiYXBwbHkiKSkKKwkJCW9wdGlvbnMudHlwZSA9IFJFQkFTRV9BUFBMWTsKKwkJZWxzZQorCQkJZGllKF8oIlVua25vd24gcmViYXNlIGJhY2tlbmQ6ICVzIiksCisJCQkgICAgb3B0aW9ucy5kZWZhdWx0X2JhY2tlbmQpOworCX0KKworCXN3aXRjaCAob3B0aW9ucy50eXBlKSB7CisJY2FzZSBSRUJBU0VfTUVSR0U6CisJY2FzZSBSRUJBU0VfUFJFU0VSVkVfTUVSR0VTOgorCQlvcHRpb25zLnN0YXRlX2RpciA9IG1lcmdlX2RpcigpOworCQlicmVhazsKKwljYXNlIFJFQkFTRV9BUFBMWToKKwkJb3B0aW9ucy5zdGF0ZV9kaXIgPSBhcHBseV9kaXIoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCJvcHRpb25zLnR5cGUgd2FzIGp1c3Qgc2V0IGFib3ZlOyBzaG91bGQgYmUgdW5yZWFjaGFibGUuIik7CisJfQorCisJaWYgKG9wdGlvbnMuZW1wdHkgPT0gRU1QVFlfVU5TUEVDSUZJRUQpIHsKKwkJaWYgKG9wdGlvbnMuZmxhZ3MgJiBSRUJBU0VfSU5URVJBQ1RJVkVfRVhQTElDSVQpCisJCQlvcHRpb25zLmVtcHR5ID0gRU1QVFlfQVNLOworCQllbHNlIGlmIChleGVjLm5yID4gMCkKKwkJCW9wdGlvbnMuZW1wdHkgPSBFTVBUWV9LRUVQOworCQllbHNlCisJCQlvcHRpb25zLmVtcHR5ID0gRU1QVFlfRFJPUDsKKwl9CisJaWYgKHJlc2NoZWR1bGVfZmFpbGVkX2V4ZWMgPiAwICYmICFpc19tZXJnZSgmb3B0aW9ucykpCisJCWRpZShfKCItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMgcmVxdWlyZXMgIgorCQkgICAgICAiLS1leGVjIG9yIC0taW50ZXJhY3RpdmUiKSk7CisJaWYgKHJlc2NoZWR1bGVfZmFpbGVkX2V4ZWMgPj0gMCkKKwkJb3B0aW9ucy5yZXNjaGVkdWxlX2ZhaWxlZF9leGVjID0gcmVzY2hlZHVsZV9mYWlsZWRfZXhlYzsKKworCWlmIChvcHRpb25zLnNpZ25vZmYpIHsKKwkJaWYgKG9wdGlvbnMudHlwZSA9PSBSRUJBU0VfUFJFU0VSVkVfTUVSR0VTKQorCQkJZGllKCJjYW5ub3QgY29tYmluZSAnLS1zaWdub2ZmJyB3aXRoICIKKwkJCSAgICAiJy0tcHJlc2VydmUtbWVyZ2VzJyIpOworCQlhcmd2X2FycmF5X3B1c2goJm9wdGlvbnMuZ2l0X2FtX29wdHMsICItLXNpZ25vZmYiKTsKKwkJb3B0aW9ucy5mbGFncyB8PSBSRUJBU0VfRk9SQ0U7CisJfQorCisJaWYgKG9wdGlvbnMudHlwZSA9PSBSRUJBU0VfUFJFU0VSVkVfTUVSR0VTKSB7CisJCS8qCisJCSAqIE5vdGU6IGluY29tcGF0aWJpbGl0eSB3aXRoIC0tc2lnbm9mZiBoYW5kbGVkIGluIHNpZ25vZmYgYmxvY2sgYWJvdmUKKwkJICogTm90ZTogaW5jb21wYXRpYmlsaXR5IHdpdGggLS1pbnRlcmFjdGl2ZSBpcyBqdXN0IGEgc3Ryb25nIHdhcm5pbmc7CisJCSAqICAgICAgIGdpdC1yZWJhc2UudHh0IGNhdmVhdHMgd2l0aCAidW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyIKKwkJICovCisJCWlmIChvcHRpb25zLnJlYmFzZV9tZXJnZXMpCisJCQlkaWUoXygiY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICIKKwkJCSAgICAgICInLS1yZWJhc2UtbWVyZ2VzJyIpKTsKKworCQlpZiAob3B0aW9ucy5yZXNjaGVkdWxlX2ZhaWxlZF9leGVjKQorCQkJZGllKF8oImVycm9yOiBjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggIgorCQkJICAgICAgIictLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnIikpOworCX0KKworCWlmICghb3B0aW9ucy5yb290KSB7CisJCWlmIChhcmdjIDwgMSkgeworCQkJc3RydWN0IGJyYW5jaCAqYnJhbmNoOworCisJCQlicmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOworCQkJb3B0aW9ucy51cHN0cmVhbV9uYW1lID0gYnJhbmNoX2dldF91cHN0cmVhbShicmFuY2gsCisJCQkJCQkJCSAgICBOVUxMKTsKKwkJCWlmICghb3B0aW9ucy51cHN0cmVhbV9uYW1lKQorCQkJCWVycm9yX29uX21pc3NpbmdfZGVmYXVsdF91cHN0cmVhbSgpOworCQkJaWYgKGZvcmtfcG9pbnQgPCAwKQorCQkJCWZvcmtfcG9pbnQgPSAxOworCQl9IGVsc2UgeworCQkJb3B0aW9ucy51cHN0cmVhbV9uYW1lID0gYXJndlswXTsKKwkJCWFyZ2MtLTsKKwkJCWFyZ3YrKzsKKwkJCWlmICghc3RyY21wKG9wdGlvbnMudXBzdHJlYW1fbmFtZSwgIi0iKSkKKwkJCQlvcHRpb25zLnVwc3RyZWFtX25hbWUgPSAiQHstMX0iOworCQl9CisJCW9wdGlvbnMudXBzdHJlYW0gPSBwZWVsX2NvbW1pdHRpc2gob3B0aW9ucy51cHN0cmVhbV9uYW1lKTsKKwkJaWYgKCFvcHRpb25zLnVwc3RyZWFtKQorCQkJZGllKF8oImludmFsaWQgdXBzdHJlYW0gJyVzJyIpLCBvcHRpb25zLnVwc3RyZWFtX25hbWUpOworCQlvcHRpb25zLnVwc3RyZWFtX2FyZyA9IG9wdGlvbnMudXBzdHJlYW1fbmFtZTsKKwl9IGVsc2UgeworCQlpZiAoIW9wdGlvbnMub250b19uYW1lKSB7CisJCQlpZiAoY29tbWl0X3RyZWUoIiIsIDAsIHRoZV9oYXNoX2FsZ28tPmVtcHR5X3RyZWUsIE5VTEwsCisJCQkJCSZzcXVhc2hfb250bywgTlVMTCwgTlVMTCkgPCAwKQorCQkJCWRpZShfKCJDb3VsZCBub3QgY3JlYXRlIG5ldyByb290IGNvbW1pdCIpKTsKKwkJCW9wdGlvbnMuc3F1YXNoX29udG8gPSAmc3F1YXNoX29udG87CisJCQlvcHRpb25zLm9udG9fbmFtZSA9IHNxdWFzaF9vbnRvX25hbWUgPQorCQkJCXhzdHJkdXAob2lkX3RvX2hleCgmc3F1YXNoX29udG8pKTsKKwkJfSBlbHNlCisJCQlvcHRpb25zLnJvb3Rfd2l0aF9vbnRvID0gMTsKKworCQlvcHRpb25zLnVwc3RyZWFtX25hbWUgPSBOVUxMOworCQlvcHRpb25zLnVwc3RyZWFtID0gTlVMTDsKKwkJaWYgKGFyZ2MgPiAxKQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmViYXNlX3VzYWdlLAorCQkJCQkgICBidWlsdGluX3JlYmFzZV9vcHRpb25zKTsKKwkJb3B0aW9ucy51cHN0cmVhbV9hcmcgPSAiLS1yb290IjsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhlIGJyYW5jaCB0byByZWJhc2Ugb250byBpcyB2YWxpZC4gKi8KKwlpZiAoa2VlcF9iYXNlKSB7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBvcHRpb25zLnVwc3RyZWFtX25hbWUpOworCQlzdHJidWZfYWRkc3RyKCZidWYsICIuLi4iKTsKKwkJb3B0aW9ucy5vbnRvX25hbWUgPSB4c3RyZHVwKGJ1Zi5idWYpOworCX0gZWxzZSBpZiAoIW9wdGlvbnMub250b19uYW1lKQorCQlvcHRpb25zLm9udG9fbmFtZSA9IG9wdGlvbnMudXBzdHJlYW1fbmFtZTsKKwlpZiAoc3Ryc3RyKG9wdGlvbnMub250b19uYW1lLCAiLi4uIikpIHsKKwkJaWYgKGdldF9vaWRfbWIob3B0aW9ucy5vbnRvX25hbWUsICZtZXJnZV9iYXNlKSA8IDApIHsKKwkJCWlmIChrZWVwX2Jhc2UpCisJCQkJZGllKF8oIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSB3aXRoIGJyYW5jaCIpLAorCQkJCSAgICBvcHRpb25zLnVwc3RyZWFtX25hbWUpOworCQkJZWxzZQorCQkJCWRpZShfKCInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UiKSwKKwkJCQkgICAgb3B0aW9ucy5vbnRvX25hbWUpOworCQl9CisJCW9wdGlvbnMub250byA9IGxvb2t1cF9jb21taXRfb3JfZGllKCZtZXJnZV9iYXNlLAorCQkJCQkJICAgIG9wdGlvbnMub250b19uYW1lKTsKKwl9IGVsc2UgeworCQlvcHRpb25zLm9udG8gPSBwZWVsX2NvbW1pdHRpc2gob3B0aW9ucy5vbnRvX25hbWUpOworCQlpZiAoIW9wdGlvbnMub250bykKKwkJCWRpZShfKCJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdCAnJXMnIiksCisJCQkJb3B0aW9ucy5vbnRvX25hbWUpOworCX0KKworCS8qCisJICogSWYgdGhlIGJyYW5jaCB0byByZWJhc2UgaXMgZ2l2ZW4sIHRoYXQgaXMgdGhlIGJyYW5jaCB3ZSB3aWxsIHJlYmFzZQorCSAqIGJyYW5jaF9uYW1lIC0tIGJyYW5jaC9jb21taXQgYmVpbmcgcmViYXNlZCwgb3IKKwkgKiAJCSAgSEVBRCAoYWxyZWFkeSBkZXRhY2hlZCkKKwkgKiBvcmlnX2hlYWQgLS0gY29tbWl0IG9iamVjdCBuYW1lIG9mIHRpcCBvZiB0aGUgYnJhbmNoIGJlZm9yZSByZWJhc2luZworCSAqIGhlYWRfbmFtZSAtLSByZWZzL2hlYWRzLzx0aGF0LWJyYW5jaD4gb3IgTlVMTCAoZGV0YWNoZWQgSEVBRCkKKwkgKi8KKwlpZiAoYXJnYyA9PSAxKSB7CisJCS8qIElzIGl0ICJyZWJhc2Ugb3RoZXIgYnJhbmNobmFtZSIgb3IgInJlYmFzZSBvdGhlciBjb21taXQiPyAqLworCQlicmFuY2hfbmFtZSA9IGFyZ3ZbMF07CisJCW9wdGlvbnMuc3dpdGNoX3RvID0gYXJndlswXTsKKworCQkvKiBJcyBpdCBhIGxvY2FsIGJyYW5jaD8gKi8KKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkZigmYnVmLCAicmVmcy9oZWFkcy8lcyIsIGJyYW5jaF9uYW1lKTsKKwkJaWYgKCFyZWFkX3JlZihidWYuYnVmLCAmb3B0aW9ucy5vcmlnX2hlYWQpKSB7CisJCQlkaWVfaWZfY2hlY2tlZF9vdXQoYnVmLmJ1ZiwgMSk7CisJCQlvcHRpb25zLmhlYWRfbmFtZSA9IHhzdHJkdXAoYnVmLmJ1Zik7CisJCS8qIElmIG5vdCBpcyBpdCBhIHZhbGlkIHJlZiAoYnJhbmNoIG9yIGNvbW1pdCk/ICovCisJCX0gZWxzZSBpZiAoIWdldF9vaWQoYnJhbmNoX25hbWUsICZvcHRpb25zLm9yaWdfaGVhZCkpCisJCQlvcHRpb25zLmhlYWRfbmFtZSA9IE5VTEw7CisJCWVsc2UKKwkJCWRpZShfKCJmYXRhbDogbm8gc3VjaCBicmFuY2gvY29tbWl0ICclcyciKSwKKwkJCSAgICBicmFuY2hfbmFtZSk7CisJfSBlbHNlIGlmIChhcmdjID09IDApIHsKKwkJLyogRG8gbm90IG5lZWQgdG8gc3dpdGNoIGJyYW5jaGVzLCB3ZSBhcmUgYWxyZWFkeSBvbiBpdC4gKi8KKwkJb3B0aW9ucy5oZWFkX25hbWUgPQorCQkJeHN0cmR1cF9vcl9udWxsKHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIDAsIE5VTEwsCisJCQkJCSAmZmxhZ3MpKTsKKwkJaWYgKCFvcHRpb25zLmhlYWRfbmFtZSkKKwkJCWRpZShfKCJObyBzdWNoIHJlZjogJXMiKSwgIkhFQUQiKTsKKwkJaWYgKGZsYWdzICYgUkVGX0lTU1lNUkVGKSB7CisJCQlpZiAoIXNraXBfcHJlZml4KG9wdGlvbnMuaGVhZF9uYW1lLAorCQkJCQkgInJlZnMvaGVhZHMvIiwgJmJyYW5jaF9uYW1lKSkKKwkJCQlicmFuY2hfbmFtZSA9IG9wdGlvbnMuaGVhZF9uYW1lOworCisJCX0gZWxzZSB7CisJCQlGUkVFX0FORF9OVUxMKG9wdGlvbnMuaGVhZF9uYW1lKTsKKwkJCWJyYW5jaF9uYW1lID0gIkhFQUQiOworCQl9CisJCWlmIChnZXRfb2lkKCJIRUFEIiwgJm9wdGlvbnMub3JpZ19oZWFkKSkKKwkJCWRpZShfKCJDb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHRvIGEgcmV2aXNpb24iKSk7CisJfSBlbHNlCisJCUJVRygidW5leHBlY3RlZCBudW1iZXIgb2YgYXJndW1lbnRzIGxlZnQgdG8gcGFyc2UiKTsKKworCWlmIChmb3JrX3BvaW50ID4gMCkgeworCQlzdHJ1Y3QgY29tbWl0ICpoZWFkID0KKwkJCWxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJJm9wdGlvbnMub3JpZ19oZWFkKTsKKwkJb3B0aW9ucy5yZXN0cmljdF9yZXZpc2lvbiA9CisJCQlnZXRfZm9ya19wb2ludChvcHRpb25zLnVwc3RyZWFtX25hbWUsIGhlYWQpOworCX0KKworCWlmIChyZXBvX3JlYWRfaW5kZXgodGhlX3JlcG9zaXRvcnkpIDwgMCkKKwkJZGllKF8oImNvdWxkIG5vdCByZWFkIGluZGV4IikpOworCisJaWYgKG9wdGlvbnMuYXV0b3N0YXNoKSB7CisJCWNyZWF0ZV9hdXRvc3Rhc2godGhlX3JlcG9zaXRvcnksIHN0YXRlX2Rpcl9wYXRoKCJhdXRvc3Rhc2giLCAmb3B0aW9ucyksCisJCQkJIERFRkFVTFRfUkVGTE9HX0FDVElPTik7CisJfQorCisJaWYgKHJlcXVpcmVfY2xlYW5fd29ya190cmVlKHRoZV9yZXBvc2l0b3J5LCAicmViYXNlIiwKKwkJCQkgICAgXygiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIpLCAxLCAxKSkgeworCQlyZXQgPSAxOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBOb3cgd2UgYXJlIHJlYmFzaW5nIGNvbW1pdHMgdXBzdHJlYW0uLm9yaWdfaGVhZCAob3Igd2l0aCAtLXJvb3QsCisJICogZXZlcnl0aGluZyBsZWFkaW5nIHVwIHRvIG9yaWdfaGVhZCkgb24gdG9wIG9mIG9udG8uCisJICovCisKKwkvKgorCSAqIENoZWNrIGlmIHdlIGFyZSBhbHJlYWR5IGJhc2VkIG9uIG9udG8gd2l0aCBsaW5lYXIgaGlzdG9yeSwKKwkgKiBpbiB3aGljaCBjYXNlIHdlIGNvdWxkIGZhc3QtZm9yd2FyZCB3aXRob3V0IHJlcGxhY2luZyB0aGUgY29tbWl0cworCSAqIHdpdGggbmV3IGNvbW1pdHMgcmVjcmVhdGVkIGJ5IHJlcGxheWluZyB0aGVpciBjaGFuZ2VzLgorCSAqCisJICogTm90ZSB0aGF0IGNhbl9mYXN0X2ZvcndhcmQoKSBpbml0aWFsaXplcyBtZXJnZV9iYXNlLCBzbyB3ZSBoYXZlIHRvCisJICogY2FsbCBpdCBiZWZvcmUgY2hlY2tpbmcgYWxsb3dfcHJlZW1wdGl2ZV9mZi4KKwkgKi8KKwlpZiAoY2FuX2Zhc3RfZm9yd2FyZChvcHRpb25zLm9udG8sIG9wdGlvbnMudXBzdHJlYW0sIG9wdGlvbnMucmVzdHJpY3RfcmV2aXNpb24sCisJCSAgICAmb3B0aW9ucy5vcmlnX2hlYWQsICZtZXJnZV9iYXNlKSAmJgorCSAgICBhbGxvd19wcmVlbXB0aXZlX2ZmKSB7CisJCWludCBmbGFnOworCisJCWlmICghKG9wdGlvbnMuZmxhZ3MgJiBSRUJBU0VfRk9SQ0UpKSB7CisJCQkvKiBMYXppbHkgc3dpdGNoIHRvIHRoZSB0YXJnZXQgYnJhbmNoIGlmIG5lZWRlZC4uLiAqLworCQkJaWYgKG9wdGlvbnMuc3dpdGNoX3RvKSB7CisJCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJCXN0cmJ1Zl9hZGRmKCZidWYsICIlczogY2hlY2tvdXQgJXMiLAorCQkJCQkgICAgZ2V0ZW52KEdJVF9SRUZMT0dfQUNUSU9OX0VOVklST05NRU5UKSwKKwkJCQkJICAgIG9wdGlvbnMuc3dpdGNoX3RvKTsKKwkJCQlpZiAocmVzZXRfaGVhZCh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJICAgICAgICZvcHRpb25zLm9yaWdfaGVhZCwgImNoZWNrb3V0IiwKKwkJCQkJICAgICAgIG9wdGlvbnMuaGVhZF9uYW1lLAorCQkJCQkgICAgICAgUkVTRVRfSEVBRF9SVU5fUE9TVF9DSEVDS09VVF9IT09LLAorCQkJCQkgICAgICAgTlVMTCwgYnVmLmJ1ZiwKKwkJCQkJICAgICAgIERFRkFVTFRfUkVGTE9HX0FDVElPTikgPCAwKSB7CisJCQkJCXJldCA9ICEhZXJyb3IoXygiY291bGQgbm90IHN3aXRjaCB0byAiCisJCQkJCQkJIiVzIiksCisJCQkJCQkgICAgICBvcHRpb25zLnN3aXRjaF90byk7CisJCQkJCWdvdG8gY2xlYW51cDsKKwkJCQl9CisJCQl9CisKKwkJCWlmICghKG9wdGlvbnMuZmxhZ3MgJiBSRUJBU0VfTk9fUVVJRVQpKQorCQkJCTsgLyogYmUgcXVpZXQgKi8KKwkJCWVsc2UgaWYgKCFzdHJjbXAoYnJhbmNoX25hbWUsICJIRUFEIikgJiYKKwkJCQkgcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgMCwgTlVMTCwgJmZsYWcpKQorCQkJCXB1dHMoXygiSEVBRCBpcyB1cCB0byBkYXRlLiIpKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoXygiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZS5cbiIpLAorCQkJCSAgICAgICBicmFuY2hfbmFtZSk7CisJCQlyZXQgPSAhIWZpbmlzaF9yZWJhc2UoJm9wdGlvbnMpOworCQkJZ290byBjbGVhbnVwOworCQl9IGVsc2UgaWYgKCEob3B0aW9ucy5mbGFncyAmIFJFQkFTRV9OT19RVUlFVCkpCisJCQk7IC8qIGJlIHF1aWV0ICovCisJCWVsc2UgaWYgKCFzdHJjbXAoYnJhbmNoX25hbWUsICJIRUFEIikgJiYKKwkJCSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCBOVUxMLCAmZmxhZykpCisJCQlwdXRzKF8oIkhFQUQgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iKSk7CisJCWVsc2UKKwkJCXByaW50ZihfKCJDdXJyZW50IGJyYW5jaCAlcyBpcyB1cCB0byBkYXRlLCByZWJhc2UgIgorCQkJCSAiZm9yY2VkLlxuIiksIGJyYW5jaF9uYW1lKTsKKwl9CisKKwkvKiBJZiBhIGhvb2sgZXhpc3RzLCBnaXZlIGl0IGEgY2hhbmNlIHRvIGludGVycnVwdCovCisJaWYgKCFva190b19za2lwX3ByZV9yZWJhc2UgJiYKKwkgICAgcnVuX2hvb2tfbGUoTlVMTCwgInByZS1yZWJhc2UiLCBvcHRpb25zLnVwc3RyZWFtX2FyZywKKwkJCWFyZ2MgPyBhcmd2WzBdIDogTlVMTCwgTlVMTCkpCisJCWRpZShfKCJUaGUgcHJlLXJlYmFzZSBob29rIHJlZnVzZWQgdG8gcmViYXNlLiIpKTsKKworCWlmIChvcHRpb25zLmZsYWdzICYgUkVCQVNFX0RJRkZTVEFUKSB7CisJCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0czsKKworCQlpZiAob3B0aW9ucy5mbGFncyAmIFJFQkFTRV9WRVJCT1NFKSB7CisJCQlpZiAoaXNfbnVsbF9vaWQoJm1lcmdlX2Jhc2UpKQorCQkJCXByaW50ZihfKCJDaGFuZ2VzIHRvICVzOlxuIiksCisJCQkJICAgICAgIG9pZF90b19oZXgoJm9wdGlvbnMub250by0+b2JqZWN0Lm9pZCkpOworCQkJZWxzZQorCQkJCXByaW50ZihfKCJDaGFuZ2VzIGZyb20gJXMgdG8gJXM6XG4iKSwKKwkJCQkgICAgICAgb2lkX3RvX2hleCgmbWVyZ2VfYmFzZSksCisJCQkJICAgICAgIG9pZF90b19oZXgoJm9wdGlvbnMub250by0+b2JqZWN0Lm9pZCkpOworCQl9CisKKwkJLyogV2Ugd2FudCBjb2xvciAoaWYgc2V0KSwgYnV0IG5vIHBhZ2VyICovCisJCWRpZmZfc2V0dXAoJm9wdHMpOworCQlvcHRzLnN0YXRfd2lkdGggPSAtMTsgLyogdXNlIGZ1bGwgdGVybWluYWwgd2lkdGggKi8KKwkJb3B0cy5zdGF0X2dyYXBoX3dpZHRoID0gLTE7IC8qIHJlc3BlY3Qgc3RhdEdyYXBoV2lkdGggY29uZmlnICovCisJCW9wdHMub3V0cHV0X2Zvcm1hdCB8PQorCQkJRElGRl9GT1JNQVRfU1VNTUFSWSB8IERJRkZfRk9STUFUX0RJRkZTVEFUOworCQlvcHRzLmRldGVjdF9yZW5hbWUgPSBESUZGX0RFVEVDVF9SRU5BTUU7CisJCWRpZmZfc2V0dXBfZG9uZSgmb3B0cyk7CisJCWRpZmZfdHJlZV9vaWQoaXNfbnVsbF9vaWQoJm1lcmdlX2Jhc2UpID8KKwkJCSAgICAgIHRoZV9oYXNoX2FsZ28tPmVtcHR5X3RyZWUgOiAmbWVyZ2VfYmFzZSwKKwkJCSAgICAgICZvcHRpb25zLm9udG8tPm9iamVjdC5vaWQsICIiLCAmb3B0cyk7CisJCWRpZmZjb3JlX3N0ZCgmb3B0cyk7CisJCWRpZmZfZmx1c2goJm9wdHMpOworCX0KKworCWlmIChpc19tZXJnZSgmb3B0aW9ucykpCisJCWdvdG8gcnVuX3JlYmFzZTsKKworCS8qIERldGFjaCBIRUFEIGFuZCByZXNldCB0aGUgdHJlZSAqLworCWlmIChvcHRpb25zLmZsYWdzICYgUkVCQVNFX05PX1FVSUVUKQorCQlwcmludGYoXygiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mICIKKwkJCSAiaXQuLi5cbiIpKTsKKworCXN0cmJ1Zl9hZGRmKCZtc2csICIlczogY2hlY2tvdXQgJXMiLAorCQkgICAgZ2V0ZW52KEdJVF9SRUZMT0dfQUNUSU9OX0VOVklST05NRU5UKSwgb3B0aW9ucy5vbnRvX25hbWUpOworCWlmIChyZXNldF9oZWFkKHRoZV9yZXBvc2l0b3J5LCAmb3B0aW9ucy5vbnRvLT5vYmplY3Qub2lkLCAiY2hlY2tvdXQiLCBOVUxMLAorCQkgICAgICAgUkVTRVRfSEVBRF9ERVRBQ0ggfCBSRVNFVF9PUklHX0hFQUQgfAorCQkgICAgICAgUkVTRVRfSEVBRF9SVU5fUE9TVF9DSEVDS09VVF9IT09LLAorCQkgICAgICAgTlVMTCwgbXNnLmJ1ZiwgREVGQVVMVF9SRUZMT0dfQUNUSU9OKSkKKwkJZGllKF8oIkNvdWxkIG5vdCBkZXRhY2ggSEVBRCIpKTsKKwlzdHJidWZfcmVsZWFzZSgmbXNnKTsKKworCS8qCisJICogSWYgdGhlIG9udG8gaXMgYSBwcm9wZXIgZGVzY2VuZGFudCBvZiB0aGUgdGlwIG9mIHRoZSBicmFuY2gsIHRoZW4KKwkgKiB3ZSBqdXN0IGZhc3QtZm9yd2FyZGVkLgorCSAqLworCXN0cmJ1Zl9yZXNldCgmbXNnKTsKKwlpZiAob2lkZXEoJm1lcmdlX2Jhc2UsICZvcHRpb25zLm9yaWdfaGVhZCkpIHsKKwkJcHJpbnRmKF8oIkZhc3QtZm9yd2FyZGVkICVzIHRvICVzLlxuIiksCisJCQlicmFuY2hfbmFtZSwgb3B0aW9ucy5vbnRvX25hbWUpOworCQlzdHJidWZfYWRkZigmbXNnLCAicmViYXNlIGZpbmlzaGVkOiAlcyBvbnRvICVzIiwKKwkJCW9wdGlvbnMuaGVhZF9uYW1lID8gb3B0aW9ucy5oZWFkX25hbWUgOiAiZGV0YWNoZWQgSEVBRCIsCisJCQlvaWRfdG9faGV4KCZvcHRpb25zLm9udG8tPm9iamVjdC5vaWQpKTsKKwkJcmVzZXRfaGVhZCh0aGVfcmVwb3NpdG9yeSwgTlVMTCwgIkZhc3QtZm9yd2FyZGVkIiwgb3B0aW9ucy5oZWFkX25hbWUsCisJCQkgICBSRVNFVF9IRUFEX1JFRlNfT05MWSwgIkhFQUQiLCBtc2cuYnVmLAorCQkJICAgREVGQVVMVF9SRUZMT0dfQUNUSU9OKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm1zZyk7CisJCXJldCA9ICEhZmluaXNoX3JlYmFzZSgmb3B0aW9ucyk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlzdHJidWZfYWRkZigmcmV2aXNpb25zLCAiJXMuLiVzIiwKKwkJICAgIG9wdGlvbnMucm9vdCA/IG9pZF90b19oZXgoJm9wdGlvbnMub250by0+b2JqZWN0Lm9pZCkgOgorCQkgICAgKG9wdGlvbnMucmVzdHJpY3RfcmV2aXNpb24gPworCQkgICAgIG9pZF90b19oZXgoJm9wdGlvbnMucmVzdHJpY3RfcmV2aXNpb24tPm9iamVjdC5vaWQpIDoKKwkJICAgICBvaWRfdG9faGV4KCZvcHRpb25zLnVwc3RyZWFtLT5vYmplY3Qub2lkKSksCisJCSAgICBvaWRfdG9faGV4KCZvcHRpb25zLm9yaWdfaGVhZCkpOworCisJb3B0aW9ucy5yZXZpc2lvbnMgPSByZXZpc2lvbnMuYnVmOworCitydW5fcmViYXNlOgorCXJldCA9ICEhcnVuX3NwZWNpZmljX3JlYmFzZSgmb3B0aW9ucywgYWN0aW9uKTsKKworY2xlYW51cDoKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmcmV2aXNpb25zKTsKKwlmcmVlKG9wdGlvbnMuaGVhZF9uYW1lKTsKKwlmcmVlKG9wdGlvbnMuZ3BnX3NpZ25fb3B0KTsKKwlmcmVlKG9wdGlvbnMuY21kKTsKKwlmcmVlKHNxdWFzaF9vbnRvX25hbWUpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlY2VpdmUtcGFjay5jIGIvYnVpbHRpbi9yZWNlaXZlLXBhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTNkMGYwCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZWNlaXZlLXBhY2suYwpAQCAtMCwwICsxLDIwODMgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgIm9pZC1hcnJheS5oIgorI2luY2x1ZGUgImNvbm5lY3RlZC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAiZnNjay5oIgorI2luY2x1ZGUgInRtcC1vYmpkaXIuaCIKKyNpbmNsdWRlICJvaWRzZXQuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKyNpbmNsdWRlICJzaGFsbG93LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVjZWl2ZV9wYWNrX3VzYWdlW10gPSB7CisJTl8oImdpdCByZWNlaXZlLXBhY2sgPGdpdC1kaXI+IiksCisJTlVMTAorfTsKKworZW51bSBkZW55X2FjdGlvbiB7CisJREVOWV9VTkNPTkZJR1VSRUQsCisJREVOWV9JR05PUkUsCisJREVOWV9XQVJOLAorCURFTllfUkVGVVNFLAorCURFTllfVVBEQVRFX0lOU1RFQUQKK307CisKK3N0YXRpYyBpbnQgZGVueV9kZWxldGVzOworc3RhdGljIGludCBkZW55X25vbl9mYXN0X2ZvcndhcmRzOworc3RhdGljIGVudW0gZGVueV9hY3Rpb24gZGVueV9jdXJyZW50X2JyYW5jaCA9IERFTllfVU5DT05GSUdVUkVEOworc3RhdGljIGVudW0gZGVueV9hY3Rpb24gZGVueV9kZWxldGVfY3VycmVudCA9IERFTllfVU5DT05GSUdVUkVEOworc3RhdGljIGludCByZWNlaXZlX2ZzY2tfb2JqZWN0cyA9IC0xOworc3RhdGljIGludCB0cmFuc2Zlcl9mc2NrX29iamVjdHMgPSAtMTsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGZzY2tfbXNnX3R5cGVzID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgaW50IHJlY2VpdmVfdW5wYWNrX2xpbWl0ID0gLTE7CitzdGF0aWMgaW50IHRyYW5zZmVyX3VucGFja19saW1pdCA9IC0xOworc3RhdGljIGludCBhZHZlcnRpc2VfYXRvbWljX3B1c2ggPSAxOworc3RhdGljIGludCBhZHZlcnRpc2VfcHVzaF9vcHRpb25zOworc3RhdGljIGludCB1bnBhY2tfbGltaXQgPSAxMDA7CitzdGF0aWMgb2ZmX3QgbWF4X2lucHV0X3NpemU7CitzdGF0aWMgaW50IHJlcG9ydF9zdGF0dXM7CitzdGF0aWMgaW50IHVzZV9zaWRlYmFuZDsKK3N0YXRpYyBpbnQgdXNlX2F0b21pYzsKK3N0YXRpYyBpbnQgdXNlX3B1c2hfb3B0aW9uczsKK3N0YXRpYyBpbnQgcXVpZXQ7CitzdGF0aWMgaW50IHByZWZlcl9vZnNfZGVsdGEgPSAxOworc3RhdGljIGludCBhdXRvX3VwZGF0ZV9zZXJ2ZXJfaW5mbzsKK3N0YXRpYyBpbnQgYXV0b19nYyA9IDE7CitzdGF0aWMgaW50IHJlamVjdF90aGluOworc3RhdGljIGludCBzdGF0ZWxlc3NfcnBjOworc3RhdGljIGNvbnN0IGNoYXIgKnNlcnZpY2VfZGlyOworc3RhdGljIGNvbnN0IGNoYXIgKmhlYWRfbmFtZTsKK3N0YXRpYyB2b2lkICpoZWFkX25hbWVfdG9fZnJlZTsKK3N0YXRpYyBpbnQgc2VudF9jYXBhYmlsaXRpZXM7CitzdGF0aWMgaW50IHNoYWxsb3dfdXBkYXRlOworc3RhdGljIGNvbnN0IGNoYXIgKmFsdF9zaGFsbG93X2ZpbGU7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBwdXNoX2NlcnQgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2lkIHB1c2hfY2VydF9vaWQ7CitzdGF0aWMgc3RydWN0IHNpZ25hdHVyZV9jaGVjayBzaWdjaGVjazsKK3N0YXRpYyBjb25zdCBjaGFyICpwdXNoX2NlcnRfbm9uY2U7CitzdGF0aWMgY29uc3QgY2hhciAqY2VydF9ub25jZV9zZWVkOworCitzdGF0aWMgY29uc3QgY2hhciAqTk9OQ0VfVU5TT0xJQ0lURUQgPSAiVU5TT0xJQ0lURUQiOworc3RhdGljIGNvbnN0IGNoYXIgKk5PTkNFX0JBRCA9ICJCQUQiOworc3RhdGljIGNvbnN0IGNoYXIgKk5PTkNFX01JU1NJTkcgPSAiTUlTU0lORyI7CitzdGF0aWMgY29uc3QgY2hhciAqTk9OQ0VfT0sgPSAiT0siOworc3RhdGljIGNvbnN0IGNoYXIgKk5PTkNFX1NMT1AgPSAiU0xPUCI7CitzdGF0aWMgY29uc3QgY2hhciAqbm9uY2Vfc3RhdHVzOworc3RhdGljIGxvbmcgbm9uY2Vfc3RhbXBfc2xvcDsKK3N0YXRpYyB0aW1lc3RhbXBfdCBub25jZV9zdGFtcF9zbG9wX2xpbWl0Oworc3RhdGljIHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCitzdGF0aWMgZW51bSB7CisJS0VFUEFMSVZFX05FVkVSID0gMCwKKwlLRUVQQUxJVkVfQUZURVJfTlVMLAorCUtFRVBBTElWRV9BTFdBWVMKK30gdXNlX2tlZXBhbGl2ZTsKK3N0YXRpYyBpbnQga2VlcGFsaXZlX2luX3NlYyA9IDU7CisKK3N0YXRpYyBzdHJ1Y3QgdG1wX29iamRpciAqdG1wX29iamRpcjsKKworc3RhdGljIGVudW0gZGVueV9hY3Rpb24gcGFyc2VfZGVueV9hY3Rpb24oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAodmFsdWUpIHsKKwkJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAiaWdub3JlIikpCisJCQlyZXR1cm4gREVOWV9JR05PUkU7CisJCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgIndhcm4iKSkKKwkJCXJldHVybiBERU5ZX1dBUk47CisJCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgInJlZnVzZSIpKQorCQkJcmV0dXJuIERFTllfUkVGVVNFOworCQlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJ1cGRhdGVpbnN0ZWFkIikpCisJCQlyZXR1cm4gREVOWV9VUERBVEVfSU5TVEVBRDsKKwl9CisJaWYgKGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSkKKwkJcmV0dXJuIERFTllfUkVGVVNFOworCXJldHVybiBERU5ZX0lHTk9SRTsKK30KKworc3RhdGljIGludCByZWNlaXZlX3BhY2tfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWludCBzdGF0dXMgPSBwYXJzZV9oaWRlX3JlZnNfY29uZmlnKHZhciwgdmFsdWUsICJyZWNlaXZlIik7CisKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmRlbnlkZWxldGVzIikgPT0gMCkgeworCQlkZW55X2RlbGV0ZXMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5kZW55bm9uZmFzdGZvcndhcmRzIikgPT0gMCkgeworCQlkZW55X25vbl9mYXN0X2ZvcndhcmRzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUudW5wYWNrbGltaXQiKSA9PSAwKSB7CisJCXJlY2VpdmVfdW5wYWNrX2xpbWl0ID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAidHJhbnNmZXIudW5wYWNrbGltaXQiKSA9PSAwKSB7CisJCXRyYW5zZmVyX3VucGFja19saW1pdCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuZnNjay5za2lwbGlzdCIpID09IDApIHsKKwkJY29uc3QgY2hhciAqcGF0aDsKKworCQlpZiAoZ2l0X2NvbmZpZ19wYXRobmFtZSgmcGF0aCwgdmFyLCB2YWx1ZSkpCisJCQlyZXR1cm4gMTsKKwkJc3RyYnVmX2FkZGYoJmZzY2tfbXNnX3R5cGVzLCAiJWNza2lwbGlzdD0lcyIsCisJCQlmc2NrX21zZ190eXBlcy5sZW4gPyAnLCcgOiAnPScsIHBhdGgpOworCQlmcmVlKChjaGFyICopcGF0aCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChza2lwX3ByZWZpeCh2YXIsICJyZWNlaXZlLmZzY2suIiwgJnZhcikpIHsKKwkJaWYgKGlzX3ZhbGlkX21zZ190eXBlKHZhciwgdmFsdWUpKQorCQkJc3RyYnVmX2FkZGYoJmZzY2tfbXNnX3R5cGVzLCAiJWMlcz0lcyIsCisJCQkJZnNja19tc2dfdHlwZXMubGVuID8gJywnIDogJz0nLCB2YXIsIHZhbHVlKTsKKwkJZWxzZQorCQkJd2FybmluZygiU2tpcHBpbmcgdW5rbm93biBtc2cgaWQgJyVzJyIsIHZhcik7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5mc2Nrb2JqZWN0cyIpID09IDApIHsKKwkJcmVjZWl2ZV9mc2NrX29iamVjdHMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAidHJhbnNmZXIuZnNja29iamVjdHMiKSA9PSAwKSB7CisJCXRyYW5zZmVyX2ZzY2tfb2JqZWN0cyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAicmVjZWl2ZS5kZW55Y3VycmVudGJyYW5jaCIpKSB7CisJCWRlbnlfY3VycmVudF9icmFuY2ggPSBwYXJzZV9kZW55X2FjdGlvbih2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmRlbnlkZWxldGVjdXJyZW50IikgPT0gMCkgeworCQlkZW55X2RlbGV0ZV9jdXJyZW50ID0gcGFyc2VfZGVueV9hY3Rpb24odmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVwYWNrLnVzZWRlbHRhYmFzZW9mZnNldCIpID09IDApIHsKKwkJcHJlZmVyX29mc19kZWx0YSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLnVwZGF0ZXNlcnZlcmluZm8iKSA9PSAwKSB7CisJCWF1dG9fdXBkYXRlX3NlcnZlcl9pbmZvID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuYXV0b2djIikgPT0gMCkgeworCQlhdXRvX2djID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuc2hhbGxvd3VwZGF0ZSIpID09IDApIHsKKwkJc2hhbGxvd191cGRhdGUgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5jZXJ0bm9uY2VzZWVkIikgPT0gMCkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZjZXJ0X25vbmNlX3NlZWQsIHZhciwgdmFsdWUpOworCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmNlcnRub25jZXNsb3AiKSA9PSAwKSB7CisJCW5vbmNlX3N0YW1wX3Nsb3BfbGltaXQgPSBnaXRfY29uZmlnX3Vsb25nKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuYWR2ZXJ0aXNlYXRvbWljIikgPT0gMCkgeworCQlhZHZlcnRpc2VfYXRvbWljX3B1c2ggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5hZHZlcnRpc2VwdXNob3B0aW9ucyIpID09IDApIHsKKwkJYWR2ZXJ0aXNlX3B1c2hfb3B0aW9ucyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmtlZXBhbGl2ZSIpID09IDApIHsKKwkJa2VlcGFsaXZlX2luX3NlYyA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUubWF4aW5wdXRzaXplIikgPT0gMCkgeworCQltYXhfaW5wdXRfc2l6ZSA9IGdpdF9jb25maWdfaW50NjQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaWYgKHNlbnRfY2FwYWJpbGl0aWVzKSB7CisJCXBhY2tldF93cml0ZV9mbXQoMSwgIiVzICVzXG4iLCBvaWRfdG9faGV4KG9pZCksIHBhdGgpOworCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgY2FwID0gU1RSQlVGX0lOSVQ7CisKKwkJc3RyYnVmX2FkZHN0cigmY2FwLAorCQkJICAgICAgInJlcG9ydC1zdGF0dXMgZGVsZXRlLXJlZnMgc2lkZS1iYW5kLTY0ayBxdWlldCIpOworCQlpZiAoYWR2ZXJ0aXNlX2F0b21pY19wdXNoKQorCQkJc3RyYnVmX2FkZHN0cigmY2FwLCAiIGF0b21pYyIpOworCQlpZiAocHJlZmVyX29mc19kZWx0YSkKKwkJCXN0cmJ1Zl9hZGRzdHIoJmNhcCwgIiBvZnMtZGVsdGEiKTsKKwkJaWYgKHB1c2hfY2VydF9ub25jZSkKKwkJCXN0cmJ1Zl9hZGRmKCZjYXAsICIgcHVzaC1jZXJ0PSVzIiwgcHVzaF9jZXJ0X25vbmNlKTsKKwkJaWYgKGFkdmVydGlzZV9wdXNoX29wdGlvbnMpCisJCQlzdHJidWZfYWRkc3RyKCZjYXAsICIgcHVzaC1vcHRpb25zIik7CisJCXN0cmJ1Zl9hZGRmKCZjYXAsICIgYWdlbnQ9JXMiLCBnaXRfdXNlcl9hZ2VudF9zYW5pdGl6ZWQoKSk7CisJCXBhY2tldF93cml0ZV9mbXQoMSwgIiVzICVzJWMlc1xuIiwKKwkJCSAgICAgb2lkX3RvX2hleChvaWQpLCBwYXRoLCAwLCBjYXAuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmNhcCk7CisJCXNlbnRfY2FwYWJpbGl0aWVzID0gMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2hvd19yZWZfY2IoY29uc3QgY2hhciAqcGF0aF9mdWxsLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICBpbnQgZmxhZywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgb2lkc2V0ICpzZWVuID0gZGF0YTsKKwljb25zdCBjaGFyICpwYXRoID0gc3RyaXBfbmFtZXNwYWNlKHBhdGhfZnVsbCk7CisKKwlpZiAocmVmX2lzX2hpZGRlbihwYXRoLCBwYXRoX2Z1bGwpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQWR2ZXJ0aXNlIHJlZnMgb3V0c2lkZSBvdXIgY3VycmVudCBuYW1lc3BhY2UgYXMgIi5oYXZlIgorCSAqIHJlZnMsIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gdXNlIHRoZW0gdG8gbWluaW1pemUgZGF0YQorCSAqIHRyYW5zZmVyIGJ1dCB3aWxsIG90aGVyd2lzZSBpZ25vcmUgdGhlbS4KKwkgKi8KKwlpZiAoIXBhdGgpIHsKKwkJaWYgKG9pZHNldF9pbnNlcnQoc2Vlbiwgb2lkKSkKKwkJCXJldHVybiAwOworCQlwYXRoID0gIi5oYXZlIjsKKwl9IGVsc2UgeworCQlvaWRzZXRfaW5zZXJ0KHNlZW4sIG9pZCk7CisJfQorCXNob3dfcmVmKHBhdGgsIG9pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfb25lX2FsdGVybmF0ZV9yZWYoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG9pZHNldCAqc2VlbiA9IGRhdGE7CisKKwlpZiAob2lkc2V0X2luc2VydChzZWVuLCBvaWQpKQorCQlyZXR1cm47CisKKwlzaG93X3JlZigiLmhhdmUiLCBvaWQpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9oZWFkX2luZm8odm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IG9pZHNldCBzZWVuID0gT0lEU0VUX0lOSVQ7CisKKwlmb3JfZWFjaF9yZWYoc2hvd19yZWZfY2IsICZzZWVuKTsKKwlmb3JfZWFjaF9hbHRlcm5hdGVfcmVmKHNob3dfb25lX2FsdGVybmF0ZV9yZWYsICZzZWVuKTsKKwlvaWRzZXRfY2xlYXIoJnNlZW4pOworCWlmICghc2VudF9jYXBhYmlsaXRpZXMpCisJCXNob3dfcmVmKCJjYXBhYmlsaXRpZXNee30iLCAmbnVsbF9vaWQpOworCisJYWR2ZXJ0aXNlX3NoYWxsb3dfZ3JhZnRzKDEpOworCisJLyogRU9GICovCisJcGFja2V0X2ZsdXNoKDEpOworfQorCitzdHJ1Y3QgY29tbWFuZCB7CisJc3RydWN0IGNvbW1hbmQgKm5leHQ7CisJY29uc3QgY2hhciAqZXJyb3Jfc3RyaW5nOworCXVuc2lnbmVkIGludCBza2lwX3VwZGF0ZToxLAorCQkgICAgIGRpZF9ub3RfZXhpc3Q6MTsKKwlpbnQgaW5kZXg7CisJc3RydWN0IG9iamVjdF9pZCBvbGRfb2lkOworCXN0cnVjdCBvYmplY3RfaWQgbmV3X29pZDsKKwljaGFyIHJlZl9uYW1lW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCitzdGF0aWMgdm9pZCBycF9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitzdGF0aWMgdm9pZCBycF93YXJuaW5nKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworc3RhdGljIHZvaWQgcmVwb3J0X21lc3NhZ2UoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCWludCBzejsKKwljaGFyIG1zZ1s0MDk2XTsKKworCXN6ID0geHNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICIlcyIsIHByZWZpeCk7CisJc3ogKz0gdnNucHJpbnRmKG1zZyArIHN6LCBzaXplb2YobXNnKSAtIHN6LCBlcnIsIHBhcmFtcyk7CisJaWYgKHN6ID4gKHNpemVvZihtc2cpIC0gMSkpCisJCXN6ID0gc2l6ZW9mKG1zZykgLSAxOworCW1zZ1tzeisrXSA9ICdcbic7CisKKwlpZiAodXNlX3NpZGViYW5kKQorCQlzZW5kX3NpZGViYW5kKDEsIDIsIG1zZywgc3osIHVzZV9zaWRlYmFuZCk7CisJZWxzZQorCQl4d3JpdGUoMiwgbXNnLCBzeik7Cit9CisKK3N0YXRpYyB2b2lkIHJwX3dhcm5pbmcoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCXJlcG9ydF9tZXNzYWdlKCJ3YXJuaW5nOiAiLCBlcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKK3N0YXRpYyB2b2lkIHJwX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwlyZXBvcnRfbWVzc2FnZSgiZXJyb3I6ICIsIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKworc3RhdGljIGludCBjb3B5X3RvX3NpZGViYW5kKGludCBpbiwgaW50IG91dCwgdm9pZCAqYXJnKQoreworCWNoYXIgZGF0YVsxMjhdOworCWludCBrZWVwYWxpdmVfYWN0aXZlID0gMDsKKworCWlmIChrZWVwYWxpdmVfaW5fc2VjIDw9IDApCisJCXVzZV9rZWVwYWxpdmUgPSBLRUVQQUxJVkVfTkVWRVI7CisJaWYgKHVzZV9rZWVwYWxpdmUgPT0gS0VFUEFMSVZFX0FMV0FZUykKKwkJa2VlcGFsaXZlX2FjdGl2ZSA9IDE7CisKKwl3aGlsZSAoMSkgeworCQlzc2l6ZV90IHN6OworCisJCWlmIChrZWVwYWxpdmVfYWN0aXZlKSB7CisJCQlzdHJ1Y3QgcG9sbGZkIHBmZDsKKwkJCWludCByZXQ7CisKKwkJCXBmZC5mZCA9IGluOworCQkJcGZkLmV2ZW50cyA9IFBPTExJTjsKKwkJCXJldCA9IHBvbGwoJnBmZCwgMSwgMTAwMCAqIGtlZXBhbGl2ZV9pbl9zZWMpOworCisJCQlpZiAocmV0IDwgMCkgeworCQkJCWlmIChlcnJubyA9PSBFSU5UUikKKwkJCQkJY29udGludWU7CisJCQkJZWxzZQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAocmV0ID09IDApIHsKKwkJCQkvKiBubyBkYXRhOyBzZW5kIGEga2VlcGFsaXZlIHBhY2tldCAqLworCQkJCXN0YXRpYyBjb25zdCBjaGFyIGJ1ZltdID0gIjAwMDVcMSI7CisJCQkJd3JpdGVfb3JfZGllKDEsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwkJCQljb250aW51ZTsKKwkJCX0gLyogZWxzZSB0aGVyZSBpcyBhY3R1YWwgZGF0YSB0byByZWFkICovCisJCX0KKworCQlzeiA9IHhyZWFkKGluLCBkYXRhLCBzaXplb2YoZGF0YSkpOworCQlpZiAoc3ogPD0gMCkKKwkJCWJyZWFrOworCisJCWlmICh1c2Vfa2VlcGFsaXZlID09IEtFRVBBTElWRV9BRlRFUl9OVUwgJiYgIWtlZXBhbGl2ZV9hY3RpdmUpIHsKKwkJCWNvbnN0IGNoYXIgKnAgPSBtZW1jaHIoZGF0YSwgJ1wwJywgc3opOworCQkJaWYgKHApIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBOVUwgdGVsbHMgdXMgdG8gc3RhcnQgc2VuZGluZyBrZWVwYWxpdmVzLiBNYWtlCisJCQkJICogc3VyZSB3ZSBzZW5kIGFueSBvdGhlciBkYXRhIHdlIHJlYWQgYWxvbmcKKwkJCQkgKiB3aXRoIGl0LgorCQkJCSAqLworCQkJCWtlZXBhbGl2ZV9hY3RpdmUgPSAxOworCQkJCXNlbmRfc2lkZWJhbmQoMSwgMiwgZGF0YSwgcCAtIGRhdGEsIHVzZV9zaWRlYmFuZCk7CisJCQkJc2VuZF9zaWRlYmFuZCgxLCAyLCBwICsgMSwgc3ogLSAocCAtIGRhdGEgKyAxKSwgdXNlX3NpZGViYW5kKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIEVpdGhlciB3ZSdyZSBub3QgbG9va2luZyBmb3IgYSBOVUwgc2lnbmFsLCBvciB3ZSBkaWRuJ3Qgc2VlCisJCSAqIGl0IHlldDsganVzdCBwYXNzIGFsb25nIHRoZSBkYXRhLgorCQkgKi8KKwkJc2VuZF9zaWRlYmFuZCgxLCAyLCBkYXRhLCBzeiwgdXNlX3NpZGViYW5kKTsKKwl9CisJY2xvc2UoaW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBobWFjX2hhc2godW5zaWduZWQgY2hhciAqb3V0LAorCQkgICAgICBjb25zdCBjaGFyICprZXlfaW4sIHNpemVfdCBrZXlfbGVuLAorCQkgICAgICBjb25zdCBjaGFyICp0ZXh0LCBzaXplX3QgdGV4dF9sZW4pCit7CisJdW5zaWduZWQgY2hhciBrZXlbR0lUX01BWF9CTEtTWl07CisJdW5zaWduZWQgY2hhciBrX2lwYWRbR0lUX01BWF9CTEtTWl07CisJdW5zaWduZWQgY2hhciBrX29wYWRbR0lUX01BWF9CTEtTWl07CisJaW50IGk7CisJZ2l0X2hhc2hfY3R4IGN0eDsKKworCS8qIFJGQyAyMTA0IDIuICgxKSAqLworCW1lbXNldChrZXksICdcMCcsIEdJVF9NQVhfQkxLU1opOworCWlmICh0aGVfaGFzaF9hbGdvLT5ibGtzeiA8IGtleV9sZW4pIHsKKwkJdGhlX2hhc2hfYWxnby0+aW5pdF9mbigmY3R4KTsKKwkJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjdHgsIGtleV9pbiwga2V5X2xlbik7CisJCXRoZV9oYXNoX2FsZ28tPmZpbmFsX2ZuKGtleSwgJmN0eCk7CisJfSBlbHNlIHsKKwkJbWVtY3B5KGtleSwga2V5X2luLCBrZXlfbGVuKTsKKwl9CisKKwkvKiBSRkMgMjEwNCAyLiAoMikgJiAoNSkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGtleSk7IGkrKykgeworCQlrX2lwYWRbaV0gPSBrZXlbaV0gXiAweDM2OworCQlrX29wYWRbaV0gPSBrZXlbaV0gXiAweDVjOworCX0KKworCS8qIFJGQyAyMTA0IDIuICgzKSAmICg0KSAqLworCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJmN0eCk7CisJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjdHgsIGtfaXBhZCwgc2l6ZW9mKGtfaXBhZCkpOworCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmY3R4LCB0ZXh0LCB0ZXh0X2xlbik7CisJdGhlX2hhc2hfYWxnby0+ZmluYWxfZm4ob3V0LCAmY3R4KTsKKworCS8qIFJGQyAyMTA0IDIuICg2KSAmICg3KSAqLworCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJmN0eCk7CisJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjdHgsIGtfb3BhZCwgc2l6ZW9mKGtfb3BhZCkpOworCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmY3R4LCBvdXQsIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKKwl0aGVfaGFzaF9hbGdvLT5maW5hbF9mbihvdXQsICZjdHgpOworfQorCitzdGF0aWMgY2hhciAqcHJlcGFyZV9wdXNoX2NlcnRfbm9uY2UoY29uc3QgY2hhciAqcGF0aCwgdGltZXN0YW1wX3Qgc3RhbXApCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9SQVdTWl07CisKKwlzdHJidWZfYWRkZigmYnVmLCAiJXM6JSJQUkl0aW1lLCBwYXRoLCBzdGFtcCk7CisJaG1hY19oYXNoKGhhc2gsIGJ1Zi5idWYsIGJ1Zi5sZW4sIGNlcnRfbm9uY2Vfc2VlZCwgc3RybGVuKGNlcnRfbm9uY2Vfc2VlZCkpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJLyogUkZDIDIxMDQgNS4gSE1BQy1TSEExIG9yIEhNQUMtU0hBMjU2ICovCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiUiUFJJdGltZSItJS4qcyIsIHN0YW1wLCAoaW50KXRoZV9oYXNoX2FsZ28tPmhleHN6LCBoYXNoX3RvX2hleChoYXNoKSk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKKy8qCisgKiBORUVEU1dPUks6IHJldXNlIGZpbmRfY29tbWl0X2hlYWRlcigpIGZyb20gamsvY29tbWl0LWF1dGhvci1wYXJzaW5nCisgKiBhZnRlciBkcm9wcGluZyAiX2NvbW1pdCIgZnJvbSBpdHMgbmFtZSBhbmQgcG9zc2libHkgbW92aW5nIGl0IG91dAorICogb2YgY29tbWl0LmMKKyAqLworc3RhdGljIGNoYXIgKmZpbmRfaGVhZGVyKGNvbnN0IGNoYXIgKm1zZywgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqa2V5LAorCQkJIGNvbnN0IGNoYXIgKipuZXh0X2xpbmUpCit7CisJaW50IGtleV9sZW4gPSBzdHJsZW4oa2V5KTsKKwljb25zdCBjaGFyICpsaW5lID0gbXNnOworCisJd2hpbGUgKGxpbmUgJiYgbGluZSA8IG1zZyArIGxlbikgeworCQljb25zdCBjaGFyICplb2wgPSBzdHJjaHJudWwobGluZSwgJ1xuJyk7CisKKwkJaWYgKChtc2cgKyBsZW4gPD0gZW9sKSB8fCBsaW5lID09IGVvbCkKKwkJCXJldHVybiBOVUxMOworCQlpZiAobGluZSArIGtleV9sZW4gPCBlb2wgJiYKKwkJICAgICFtZW1jbXAobGluZSwga2V5LCBrZXlfbGVuKSAmJiBsaW5lW2tleV9sZW5dID09ICcgJykgeworCQkJaW50IG9mZnNldCA9IGtleV9sZW4gKyAxOworCQkJaWYgKG5leHRfbGluZSkKKwkJCQkqbmV4dF9saW5lID0gKmVvbCA/IGVvbCArIDEgOiBlb2w7CisJCQlyZXR1cm4geG1lbWR1cHoobGluZSArIG9mZnNldCwgKGVvbCAtIGxpbmUpIC0gb2Zmc2V0KTsKKwkJfQorCQlsaW5lID0gKmVvbCA/IGVvbCArIDEgOiBOVUxMOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFJldHVybiB6ZXJvIGlmIGEgYW5kIGIgYXJlIGVxdWFsIHVwIHRvIG4gYnl0ZXMgYW5kIG5vbnplcm8gaWYgdGhleSBhcmUgbm90LgorICogVGhpcyBvcGVyYXRpb24gaXMgZ3VhcmFudGVlZCB0byBydW4gaW4gY29uc3RhbnQgdGltZSB0byBhdm9pZCBsZWFraW5nIGRhdGEuCisgKi8KK3N0YXRpYyBpbnQgY29uc3RhbnRfbWVtZXF1YWwoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgc2l6ZV90IG4pCit7CisJaW50IHJlcyA9IDA7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlyZXMgfD0gYVtpXSBeIGJbaV07CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNoZWNrX25vbmNlKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwljaGFyICpub25jZSA9IGZpbmRfaGVhZGVyKGJ1ZiwgbGVuLCAibm9uY2UiLCBOVUxMKTsKKwl0aW1lc3RhbXBfdCBzdGFtcCwgb3N0YW1wOworCWNoYXIgKmJvaG1hYywgKmV4cGVjdCA9IE5VTEw7CisJY29uc3QgY2hhciAqcmV0dmFsID0gTk9OQ0VfQkFEOworCXNpemVfdCBub25jZWxlbjsKKworCWlmICghbm9uY2UpIHsKKwkJcmV0dmFsID0gTk9OQ0VfTUlTU0lORzsKKwkJZ290byBsZWF2ZTsKKwl9IGVsc2UgaWYgKCFwdXNoX2NlcnRfbm9uY2UpIHsKKwkJcmV0dmFsID0gTk9OQ0VfVU5TT0xJQ0lURUQ7CisJCWdvdG8gbGVhdmU7CisJfSBlbHNlIGlmICghc3RyY21wKHB1c2hfY2VydF9ub25jZSwgbm9uY2UpKSB7CisJCXJldHZhbCA9IE5PTkNFX09LOworCQlnb3RvIGxlYXZlOworCX0KKworCWlmICghc3RhdGVsZXNzX3JwYykgeworCQkvKiByZXR1cm5lZCBub25jZSBNVVNUIG1hdGNoIHdoYXQgd2UgZ2F2ZSBvdXQgZWFybGllciAqLworCQlyZXR2YWwgPSBOT05DRV9CQUQ7CisJCWdvdG8gbGVhdmU7CisJfQorCisJLyoKKwkgKiBJbiBzdGF0ZWxlc3MgbW9kZSwgd2UgbWF5IGJlIHJlY2VpdmluZyBhIG5vbmNlIGlzc3VlZCBieQorCSAqIGFub3RoZXIgaW5zdGFuY2Ugb2YgdGhlIHNlcnZlciB0aGF0IHNlcnZpbmcgdGhlIHNhbWUKKwkgKiByZXBvc2l0b3J5LCBhbmQgdGhlIHRpbWVzdGFtcHMgbWF5IG5vdCBtYXRjaCwgYnV0IHRoZQorCSAqIG5vbmNlLXNlZWQgYW5kIGRpciBzaG91bGQgbWF0Y2gsIHNvIHdlIGNhbiByZWNvbXB1dGUgYW5kCisJICogcmVwb3J0IHRoZSB0aW1lIHNsb3AuCisJICoKKwkgKiBJbiBhZGRpdGlvbiwgd2hlbiBhIG5vbmNlIGlzc3VlZCBieSBhbm90aGVyIGluc3RhbmNlIGhhcworCSAqIHRpbWVzdGFtcCB3aXRoaW4gcmVjZWl2ZS5jZXJ0bm9uY2VzbG9wIHNlY29uZHMsIHdlIHByZXRlbmQKKwkgKiBhcyBpZiB3ZSBpc3N1ZWQgdGhhdCBub25jZSB3aGVuIHJlcG9ydGluZyB0byB0aGUgaG9vay4KKwkgKi8KKworCS8qIG5vbmNlIGlzIGNvbmNhdCg8c2Vjb25kcy1zaW5jZS1lcG9jaD4sICItIiwgPGhtYWM+KSAqLworCWlmICgqbm9uY2UgPD0gJzAnIHx8ICc5JyA8ICpub25jZSkgeworCQlyZXR2YWwgPSBOT05DRV9CQUQ7CisJCWdvdG8gbGVhdmU7CisJfQorCXN0YW1wID0gcGFyc2VfdGltZXN0YW1wKG5vbmNlLCAmYm9obWFjLCAxMCk7CisJaWYgKGJvaG1hYyA9PSBub25jZSB8fCBib2htYWNbMF0gIT0gJy0nKSB7CisJCXJldHZhbCA9IE5PTkNFX0JBRDsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlub25jZWxlbiA9IHN0cmxlbihub25jZSk7CisJZXhwZWN0ID0gcHJlcGFyZV9wdXNoX2NlcnRfbm9uY2Uoc2VydmljZV9kaXIsIHN0YW1wKTsKKwlpZiAobm9uY2VsZW4gIT0gc3RybGVuKGV4cGVjdCkpIHsKKwkJLyogVGhpcyBpcyBub3QgZXZlbiB0aGUgcmlnaHQgc2l6ZS4gKi8KKwkJcmV0dmFsID0gTk9OQ0VfQkFEOworCQlnb3RvIGxlYXZlOworCX0KKwlpZiAoY29uc3RhbnRfbWVtZXF1YWwoZXhwZWN0LCBub25jZSwgbm9uY2VsZW4pKSB7CisJCS8qIE5vdCB3aGF0IHdlIHdvdWxkIGhhdmUgc2lnbmVkIGVhcmxpZXIgKi8KKwkJcmV0dmFsID0gTk9OQ0VfQkFEOworCQlnb3RvIGxlYXZlOworCX0KKworCS8qCisJICogQnkgaG93IG1hbnkgc2Vjb25kcyBpcyB0aGlzIG5vbmNlIHN0YWxlPyAgTmVnYXRpdmUgdmFsdWUKKwkgKiB3b3VsZCBtZWFuIGl0IHdhcyBpc3N1ZWQgYnkgYW5vdGhlciBzZXJ2ZXIgd2l0aCBpdHMgY2xvY2sKKwkgKiBza2V3ZWQgaW4gdGhlIGZ1dHVyZS4KKwkgKi8KKwlvc3RhbXAgPSBwYXJzZV90aW1lc3RhbXAocHVzaF9jZXJ0X25vbmNlLCBOVUxMLCAxMCk7CisJbm9uY2Vfc3RhbXBfc2xvcCA9IChsb25nKW9zdGFtcCAtIChsb25nKXN0YW1wOworCisJaWYgKG5vbmNlX3N0YW1wX3Nsb3BfbGltaXQgJiYKKwkgICAgbGFicyhub25jZV9zdGFtcF9zbG9wKSA8PSBub25jZV9zdGFtcF9zbG9wX2xpbWl0KSB7CisJCS8qCisJCSAqIFByZXRlbmQgYXMgaWYgdGhlIHJlY2VpdmVkIG5vbmNlICh3aGljaCBwYXNzZXMgdGhlCisJCSAqIEhNQUMgY2hlY2ssIHNvIGl0IGlzIG5vdCBhIGZvcmdlZCBieSB0aGlyZC1wYXJ0eSkKKwkJICogaXMgd2hhdCB3ZSBpc3N1ZWQuCisJCSAqLworCQlmcmVlKCh2b2lkICopcHVzaF9jZXJ0X25vbmNlKTsKKwkJcHVzaF9jZXJ0X25vbmNlID0geHN0cmR1cChub25jZSk7CisJCXJldHZhbCA9IE5PTkNFX09LOworCX0gZWxzZSB7CisJCXJldHZhbCA9IE5PTkNFX1NMT1A7CisJfQorCitsZWF2ZToKKwlmcmVlKG5vbmNlKTsKKwlmcmVlKGV4cGVjdCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFJldHVybiAxIGlmIHRoZXJlIGlzIG5vIHB1c2hfY2VydCBvciBpZiB0aGUgcHVzaCBvcHRpb25zIGluIHB1c2hfY2VydCBhcmUKKyAqIHRoZSBzYW1lIGFzIHRob3NlIGluIHRoZSBhcmd1bWVudDsgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfY2VydF9wdXNoX29wdGlvbnMoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpwdXNoX29wdGlvbnMpCit7CisJY29uc3QgY2hhciAqYnVmID0gcHVzaF9jZXJ0LmJ1ZjsKKwlpbnQgbGVuID0gcHVzaF9jZXJ0LmxlbjsKKworCWNoYXIgKm9wdGlvbjsKKwljb25zdCBjaGFyICpuZXh0X2xpbmU7CisJaW50IG9wdGlvbnNfc2VlbiA9IDA7CisKKwlpbnQgcmV0dmFsID0gMTsKKworCWlmICghbGVuKQorCQlyZXR1cm4gMTsKKworCXdoaWxlICgob3B0aW9uID0gZmluZF9oZWFkZXIoYnVmLCBsZW4sICJwdXNoLW9wdGlvbiIsICZuZXh0X2xpbmUpKSkgeworCQlsZW4gLT0gKG5leHRfbGluZSAtIGJ1Zik7CisJCWJ1ZiA9IG5leHRfbGluZTsKKwkJb3B0aW9uc19zZWVuKys7CisJCWlmIChvcHRpb25zX3NlZW4gPiBwdXNoX29wdGlvbnMtPm5yCisJCSAgICB8fCBzdHJjbXAob3B0aW9uLAorCQkJICAgICAgcHVzaF9vcHRpb25zLT5pdGVtc1tvcHRpb25zX3NlZW4gLSAxXS5zdHJpbmcpKSB7CisJCQlyZXR2YWwgPSAwOworCQkJZ290byBsZWF2ZTsKKwkJfQorCQlmcmVlKG9wdGlvbik7CisJfQorCisJaWYgKG9wdGlvbnNfc2VlbiAhPSBwdXNoX29wdGlvbnMtPm5yKQorCQlyZXR2YWwgPSAwOworCitsZWF2ZToKKwlmcmVlKG9wdGlvbik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9wdXNoX2NlcnRfc2hhMShzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqcHJvYykKK3sKKwlzdGF0aWMgaW50IGFscmVhZHlfZG9uZTsKKworCWlmICghcHVzaF9jZXJ0LmxlbikKKwkJcmV0dXJuOworCisJaWYgKCFhbHJlYWR5X2RvbmUpIHsKKwkJaW50IGJvZ3MgLyogYmVnaW5uaW5nX29mX2dwZ19zaWcgKi87CisKKwkJYWxyZWFkeV9kb25lID0gMTsKKwkJaWYgKHdyaXRlX29iamVjdF9maWxlKHB1c2hfY2VydC5idWYsIHB1c2hfY2VydC5sZW4sICJibG9iIiwKKwkJCQkgICAgICAmcHVzaF9jZXJ0X29pZCkpCisJCQlvaWRjbHIoJnB1c2hfY2VydF9vaWQpOworCisJCW1lbXNldCgmc2lnY2hlY2ssICdcMCcsIHNpemVvZihzaWdjaGVjaykpOworCisJCWJvZ3MgPSBwYXJzZV9zaWduYXR1cmUocHVzaF9jZXJ0LmJ1ZiwgcHVzaF9jZXJ0Lmxlbik7CisJCWNoZWNrX3NpZ25hdHVyZShwdXNoX2NlcnQuYnVmLCBib2dzLCBwdXNoX2NlcnQuYnVmICsgYm9ncywKKwkJCQlwdXNoX2NlcnQubGVuIC0gYm9ncywgJnNpZ2NoZWNrKTsKKworCQlub25jZV9zdGF0dXMgPSBjaGVja19ub25jZShwdXNoX2NlcnQuYnVmLCBib2dzKTsKKwl9CisJaWYgKCFpc19udWxsX29pZCgmcHVzaF9jZXJ0X29pZCkpIHsKKwkJYXJndl9hcnJheV9wdXNoZigmcHJvYy0+ZW52X2FycmF5LCAiR0lUX1BVU0hfQ0VSVD0lcyIsCisJCQkJIG9pZF90b19oZXgoJnB1c2hfY2VydF9vaWQpKTsKKwkJYXJndl9hcnJheV9wdXNoZigmcHJvYy0+ZW52X2FycmF5LCAiR0lUX1BVU0hfQ0VSVF9TSUdORVI9JXMiLAorCQkJCSBzaWdjaGVjay5zaWduZXIgPyBzaWdjaGVjay5zaWduZXIgOiAiIik7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJnByb2MtPmVudl9hcnJheSwgIkdJVF9QVVNIX0NFUlRfS0VZPSVzIiwKKwkJCQkgc2lnY2hlY2sua2V5ID8gc2lnY2hlY2sua2V5IDogIiIpOworCQlhcmd2X2FycmF5X3B1c2hmKCZwcm9jLT5lbnZfYXJyYXksICJHSVRfUFVTSF9DRVJUX1NUQVRVUz0lYyIsCisJCQkJIHNpZ2NoZWNrLnJlc3VsdCk7CisJCWlmIChwdXNoX2NlcnRfbm9uY2UpIHsKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJnByb2MtPmVudl9hcnJheSwKKwkJCQkJICJHSVRfUFVTSF9DRVJUX05PTkNFPSVzIiwKKwkJCQkJIHB1c2hfY2VydF9ub25jZSk7CisJCQlhcmd2X2FycmF5X3B1c2hmKCZwcm9jLT5lbnZfYXJyYXksCisJCQkJCSAiR0lUX1BVU0hfQ0VSVF9OT05DRV9TVEFUVVM9JXMiLAorCQkJCQkgbm9uY2Vfc3RhdHVzKTsKKwkJCWlmIChub25jZV9zdGF0dXMgPT0gTk9OQ0VfU0xPUCkKKwkJCQlhcmd2X2FycmF5X3B1c2hmKCZwcm9jLT5lbnZfYXJyYXksCisJCQkJCQkgIkdJVF9QVVNIX0NFUlRfTk9OQ0VfU0xPUD0lbGQiLAorCQkJCQkJIG5vbmNlX3N0YW1wX3Nsb3ApOworCQl9CisJfQorfQorCitzdHJ1Y3QgcmVjZWl2ZV9ob29rX2ZlZWRfc3RhdGUgeworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisJaW50IHNraXBfYnJva2VuOworCXN0cnVjdCBzdHJidWYgYnVmOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcHVzaF9vcHRpb25zOworfTsKKwordHlwZWRlZiBpbnQgKCpmZWVkX2ZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiosIHNpemVfdCAqKTsKK3N0YXRpYyBpbnQgcnVuX2FuZF9mZWVkX2hvb2soY29uc3QgY2hhciAqaG9va19uYW1lLCBmZWVkX2ZuIGZlZWQsCisJCQkgICAgIHN0cnVjdCByZWNlaXZlX2hvb2tfZmVlZF9zdGF0ZSAqZmVlZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBhc3luYyBtdXhlcjsKKwljb25zdCBjaGFyICphcmd2WzJdOworCWludCBjb2RlOworCisJYXJndlswXSA9IGZpbmRfaG9vayhob29rX25hbWUpOworCWlmICghYXJndlswXSkKKwkJcmV0dXJuIDA7CisKKwlhcmd2WzFdID0gTlVMTDsKKworCXByb2MuYXJndiA9IGFyZ3Y7CisJcHJvYy5pbiA9IC0xOworCXByb2Muc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisJcHJvYy50cmFjZTJfaG9va19uYW1lID0gaG9va19uYW1lOworCisJaWYgKGZlZWRfc3RhdGUtPnB1c2hfb3B0aW9ucykgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGZlZWRfc3RhdGUtPnB1c2hfb3B0aW9ucy0+bnI7IGkrKykKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJnByb2MuZW52X2FycmF5LAorCQkJCSJHSVRfUFVTSF9PUFRJT05fJWQ9JXMiLCBpLAorCQkJCWZlZWRfc3RhdGUtPnB1c2hfb3B0aW9ucy0+aXRlbXNbaV0uc3RyaW5nKTsKKwkJYXJndl9hcnJheV9wdXNoZigmcHJvYy5lbnZfYXJyYXksICJHSVRfUFVTSF9PUFRJT05fQ09VTlQ9JWQiLAorCQkJCSBmZWVkX3N0YXRlLT5wdXNoX29wdGlvbnMtPm5yKTsKKwl9IGVsc2UKKwkJYXJndl9hcnJheV9wdXNoZigmcHJvYy5lbnZfYXJyYXksICJHSVRfUFVTSF9PUFRJT05fQ09VTlQiKTsKKworCWlmICh0bXBfb2JqZGlyKQorCQlhcmd2X2FycmF5X3B1c2h2KCZwcm9jLmVudl9hcnJheSwgdG1wX29iamRpcl9lbnYodG1wX29iamRpcikpOworCisJaWYgKHVzZV9zaWRlYmFuZCkgeworCQltZW1zZXQoJm11eGVyLCAwLCBzaXplb2YobXV4ZXIpKTsKKwkJbXV4ZXIucHJvYyA9IGNvcHlfdG9fc2lkZWJhbmQ7CisJCW11eGVyLmluID0gLTE7CisJCWNvZGUgPSBzdGFydF9hc3luYygmbXV4ZXIpOworCQlpZiAoY29kZSkKKwkJCXJldHVybiBjb2RlOworCQlwcm9jLmVyciA9IG11eGVyLmluOworCX0KKworCXByZXBhcmVfcHVzaF9jZXJ0X3NoYTEoJnByb2MpOworCisJY29kZSA9IHN0YXJ0X2NvbW1hbmQoJnByb2MpOworCWlmIChjb2RlKSB7CisJCWlmICh1c2Vfc2lkZWJhbmQpCisJCQlmaW5pc2hfYXN5bmMoJm11eGVyKTsKKwkJcmV0dXJuIGNvZGU7CisJfQorCisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKworCXdoaWxlICgxKSB7CisJCWNvbnN0IGNoYXIgKmJ1ZjsKKwkJc2l6ZV90IG47CisJCWlmIChmZWVkKGZlZWRfc3RhdGUsICZidWYsICZuKSkKKwkJCWJyZWFrOworCQlpZiAod3JpdGVfaW5fZnVsbChwcm9jLmluLCBidWYsIG4pIDwgMCkKKwkJCWJyZWFrOworCX0KKwljbG9zZShwcm9jLmluKTsKKwlpZiAodXNlX3NpZGViYW5kKQorCQlmaW5pc2hfYXN5bmMoJm11eGVyKTsKKworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKworCXJldHVybiBmaW5pc2hfY29tbWFuZCgmcHJvYyk7Cit9CisKK3N0YXRpYyBpbnQgZmVlZF9yZWNlaXZlX2hvb2sodm9pZCAqc3RhdGVfLCBjb25zdCBjaGFyICoqYnVmcCwgc2l6ZV90ICpzaXplcCkKK3sKKwlzdHJ1Y3QgcmVjZWl2ZV9ob29rX2ZlZWRfc3RhdGUgKnN0YXRlID0gc3RhdGVfOworCXN0cnVjdCBjb21tYW5kICpjbWQgPSBzdGF0ZS0+Y21kOworCisJd2hpbGUgKGNtZCAmJgorCSAgICAgICBzdGF0ZS0+c2tpcF9icm9rZW4gJiYgKGNtZC0+ZXJyb3Jfc3RyaW5nIHx8IGNtZC0+ZGlkX25vdF9leGlzdCkpCisJCWNtZCA9IGNtZC0+bmV4dDsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC0xOyAvKiBFT0YgKi8KKwlzdHJidWZfcmVzZXQoJnN0YXRlLT5idWYpOworCXN0cmJ1Zl9hZGRmKCZzdGF0ZS0+YnVmLCAiJXMgJXMgJXNcbiIsCisJCSAgICBvaWRfdG9faGV4KCZjbWQtPm9sZF9vaWQpLCBvaWRfdG9faGV4KCZjbWQtPm5ld19vaWQpLAorCQkgICAgY21kLT5yZWZfbmFtZSk7CisJc3RhdGUtPmNtZCA9IGNtZC0+bmV4dDsKKwlpZiAoYnVmcCkgeworCQkqYnVmcCA9IHN0YXRlLT5idWYuYnVmOworCQkqc2l6ZXAgPSBzdGF0ZS0+YnVmLmxlbjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3JlY2VpdmVfaG9vayhzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMsCisJCQkgICAgY29uc3QgY2hhciAqaG9va19uYW1lLAorCQkJICAgIGludCBza2lwX2Jyb2tlbiwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnB1c2hfb3B0aW9ucykKK3sKKwlzdHJ1Y3QgcmVjZWl2ZV9ob29rX2ZlZWRfc3RhdGUgc3RhdGU7CisJaW50IHN0YXR1czsKKworCXN0cmJ1Zl9pbml0KCZzdGF0ZS5idWYsIDApOworCXN0YXRlLmNtZCA9IGNvbW1hbmRzOworCXN0YXRlLnNraXBfYnJva2VuID0gc2tpcF9icm9rZW47CisJaWYgKGZlZWRfcmVjZWl2ZV9ob29rKCZzdGF0ZSwgTlVMTCwgTlVMTCkpCisJCXJldHVybiAwOworCXN0YXRlLmNtZCA9IGNvbW1hbmRzOworCXN0YXRlLnB1c2hfb3B0aW9ucyA9IHB1c2hfb3B0aW9uczsKKwlzdGF0dXMgPSBydW5fYW5kX2ZlZWRfaG9vayhob29rX25hbWUsIGZlZWRfcmVjZWl2ZV9ob29rLCAmc3RhdGUpOworCXN0cmJ1Zl9yZWxlYXNlKCZzdGF0ZS5idWYpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3VwZGF0ZV9ob29rKHN0cnVjdCBjb21tYW5kICpjbWQpCit7CisJY29uc3QgY2hhciAqYXJndls1XTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCBjb2RlOworCisJYXJndlswXSA9IGZpbmRfaG9vaygidXBkYXRlIik7CisJaWYgKCFhcmd2WzBdKQorCQlyZXR1cm4gMDsKKworCWFyZ3ZbMV0gPSBjbWQtPnJlZl9uYW1lOworCWFyZ3ZbMl0gPSBvaWRfdG9faGV4KCZjbWQtPm9sZF9vaWQpOworCWFyZ3ZbM10gPSBvaWRfdG9faGV4KCZjbWQtPm5ld19vaWQpOworCWFyZ3ZbNF0gPSBOVUxMOworCisJcHJvYy5ub19zdGRpbiA9IDE7CisJcHJvYy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlwcm9jLmVyciA9IHVzZV9zaWRlYmFuZCA/IC0xIDogMDsKKwlwcm9jLmFyZ3YgPSBhcmd2OworCXByb2MudHJhY2UyX2hvb2tfbmFtZSA9ICJ1cGRhdGUiOworCisJY29kZSA9IHN0YXJ0X2NvbW1hbmQoJnByb2MpOworCWlmIChjb2RlKQorCQlyZXR1cm4gY29kZTsKKwlpZiAodXNlX3NpZGViYW5kKQorCQljb3B5X3RvX3NpZGViYW5kKHByb2MuZXJyLCAtMSwgTlVMTCk7CisJcmV0dXJuIGZpbmlzaF9jb21tYW5kKCZwcm9jKTsKK30KKworc3RhdGljIGNoYXIgKnJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueV9tc2cgPQorCU5fKCJCeSBkZWZhdWx0LCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2ggaW4gYSBub24tYmFyZSByZXBvc2l0b3J5XG4iCisJICAgImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisJICAgIndpdGggd2hhdCB5b3UgcHVzaGVkLCBhbmQgd2lsbCByZXF1aXJlICdnaXQgcmVzZXQgLS1oYXJkJyB0byBtYXRjaFxuIgorCSAgICJ0aGUgd29yayB0cmVlIHRvIEhFQUQuXG4iCisJICAgIlxuIgorCSAgICJZb3UgY2FuIHNldCB0aGUgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVcbiIKKwkgICAidG8gJ2lnbm9yZScgb3IgJ3dhcm4nIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBwdXNoaW5nIGludG9cbiIKKwkgICAiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisJICAgImFycmFuZ2VkIHRvIHVwZGF0ZSBpdHMgd29yayB0cmVlIHRvIG1hdGNoIHdoYXQgeW91IHB1c2hlZCBpbiBzb21lXG4iCisJICAgIm90aGVyIHdheS5cbiIKKwkgICAiXG4iCisJICAgIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2aW91ciwgc2V0XG4iCisJICAgIidyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvICdyZWZ1c2UnLiIpOworCitzdGF0aWMgdm9pZCByZWZ1c2VfdW5jb25maWd1cmVkX2Rlbnkodm9pZCkKK3sKKwlycF9lcnJvcigiJXMiLCBfKHJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueV9tc2cpKTsKK30KKworc3RhdGljIGNoYXIgKnJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueV9kZWxldGVfY3VycmVudF9tc2cgPQorCU5fKCJCeSBkZWZhdWx0LCBkZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggaXMgZGVuaWVkLCBiZWNhdXNlIHRoZSBuZXh0XG4iCisJICAgIidnaXQgY2xvbmUnIHdvbid0IHJlc3VsdCBpbiBhbnkgZmlsZSBjaGVja2VkIG91dCwgY2F1c2luZyBjb25mdXNpb24uXG4iCisJICAgIlxuIgorCSAgICJZb3UgY2FuIHNldCAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0b1xuIgorCSAgICInd2Fybicgb3IgJ2lnbm9yZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IGRlbGV0aW5nIHRoZVxuIgorCSAgICJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLlxuIgorCSAgICJcbiIKKwkgICAiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICdyZWZ1c2UnLiIpOworCitzdGF0aWMgdm9pZCByZWZ1c2VfdW5jb25maWd1cmVkX2RlbnlfZGVsZXRlX2N1cnJlbnQodm9pZCkKK3sKKwlycF9lcnJvcigiJXMiLCBfKHJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueV9kZWxldGVfY3VycmVudF9tc2cpKTsKK30KKworc3RhdGljIGludCBjb21tYW5kX3NpbmdsZXRvbl9pdGVyYXRvcih2b2lkICpjYl9kYXRhLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworc3RhdGljIGludCB1cGRhdGVfc2hhbGxvd19yZWYoc3RydWN0IGNvbW1hbmQgKmNtZCwgc3RydWN0IHNoYWxsb3dfaW5mbyAqc2kpCit7CisJc3RydWN0IHNoYWxsb3dfbG9jayBzaGFsbG93X2xvY2sgPSBTSEFMTE9XX0xPQ0tfSU5JVDsKKwlzdHJ1Y3Qgb2lkX2FycmF5IGV4dHJhID0gT0lEX0FSUkFZX0lOSVQ7CisJc3RydWN0IGNoZWNrX2Nvbm5lY3RlZF9vcHRpb25zIG9wdCA9IENIRUNLX0NPTk5FQ1RFRF9JTklUOworCXVpbnQzMl90IG1hc2sgPSAxIDw8IChjbWQtPmluZGV4ICUgMzIpOworCWludCBpOworCisJdHJhY2VfcHJpbnRmX2tleSgmdHJhY2Vfc2hhbGxvdywKKwkJCSAic2hhbGxvdzogdXBkYXRlX3NoYWxsb3dfcmVmICVzXG4iLCBjbWQtPnJlZl9uYW1lKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2ktPnNoYWxsb3ctPm5yOyBpKyspCisJCWlmIChzaS0+dXNlZF9zaGFsbG93W2ldICYmCisJCSAgICAoc2ktPnVzZWRfc2hhbGxvd1tpXVtjbWQtPmluZGV4IC8gMzJdICYgbWFzaykgJiYKKwkJICAgICFkZWxheWVkX3JlYWNoYWJpbGl0eV90ZXN0KHNpLCBpKSkKKwkJCW9pZF9hcnJheV9hcHBlbmQoJmV4dHJhLCAmc2ktPnNoYWxsb3ctPm9pZFtpXSk7CisKKwlvcHQuZW52ID0gdG1wX29iamRpcl9lbnYodG1wX29iamRpcik7CisJc2V0dXBfYWx0ZXJuYXRlX3NoYWxsb3coJnNoYWxsb3dfbG9jaywgJm9wdC5zaGFsbG93X2ZpbGUsICZleHRyYSk7CisJaWYgKGNoZWNrX2Nvbm5lY3RlZChjb21tYW5kX3NpbmdsZXRvbl9pdGVyYXRvciwgY21kLCAmb3B0KSkgeworCQlyb2xsYmFja19zaGFsbG93X2ZpbGUodGhlX3JlcG9zaXRvcnksICZzaGFsbG93X2xvY2spOworCQlvaWRfYXJyYXlfY2xlYXIoJmV4dHJhKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWNvbW1pdF9zaGFsbG93X2ZpbGUodGhlX3JlcG9zaXRvcnksICZzaGFsbG93X2xvY2spOworCisJLyoKKwkgKiBNYWtlIHN1cmUgc2V0dXBfYWx0ZXJuYXRlX3NoYWxsb3coKSBmb3IgdGhlIG5leHQgcmVmIGRvZXMKKwkgKiBub3QgbG9zZSB0aGVzZSBuZXcgcm9vdHMuLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBleHRyYS5ucjsgaSsrKQorCQlyZWdpc3Rlcl9zaGFsbG93KHRoZV9yZXBvc2l0b3J5LCAmZXh0cmEub2lkW2ldKTsKKworCXNpLT5zaGFsbG93X3JlZltjbWQtPmluZGV4XSA9IDA7CisJb2lkX2FycmF5X2NsZWFyKCZleHRyYSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBORUVEU1dPUks6IHdlIHNob3VsZCBjb25zb2xpZGF0ZSB2YXJpb3VzIGltcGxlbWVudGlvbnMgb2YgImFyZSB3ZQorICogb24gYW4gdW5ib3JuIGJyYW5jaD8iIHRlc3QgaW50byBvbmUsIGFuZCBtYWtlIHRoZSB1bmlmaWVkIG9uZSBtb3JlCisgKiByb2J1c3QuICFnZXRfc2hhMSgpIGJhc2VkIGNoZWNrIHVzZWQgaGVyZSBhbmQgZWxzZXdoZXJlIHdvdWxkIG5vdAorICogYWxsb3cgdXMgdG8gdGVsbCBhbiB1bmJvcm4gYnJhbmNoIGZyb20gY29ycnVwdCByZWYsIGZvciBleGFtcGxlLgorICogRm9yIHRoZSBwdXJwb3NlIG9mIGZpeGluZyAiZGVwbG95LXRvLXVwZGF0ZSBkb2VzIG5vdCB3b3JrIHdoZW4KKyAqIHB1c2hpbmcgaW50byBhbiBlbXB0eSByZXBvc2l0b3J5IiBpc3N1ZSwgdGhpcyBzaG91bGQgc3VmZmljZSBmb3IKKyAqIG5vdy4KKyAqLworc3RhdGljIGludCBoZWFkX2hhc19oaXN0b3J5KHZvaWQpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlyZXR1cm4gIWdldF9vaWQoIkhFQUQiLCAmb2lkKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnB1c2hfdG9fZGVwbG95KHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJICBzdHJ1Y3QgYXJndl9hcnJheSAqZW52LAorCQkJCSAgY29uc3QgY2hhciAqd29ya190cmVlKQoreworCWNvbnN0IGNoYXIgKnVwZGF0ZV9yZWZyZXNoW10gPSB7CisJCSJ1cGRhdGUtaW5kZXgiLCAiLXEiLCAiLS1pZ25vcmUtc3VibW9kdWxlcyIsICItLXJlZnJlc2giLCBOVUxMCisJfTsKKwljb25zdCBjaGFyICpkaWZmX2ZpbGVzW10gPSB7CisJCSJkaWZmLWZpbGVzIiwgIi0tcXVpZXQiLCAiLS1pZ25vcmUtc3VibW9kdWxlcyIsICItLSIsIE5VTEwKKwl9OworCWNvbnN0IGNoYXIgKmRpZmZfaW5kZXhbXSA9IHsKKwkJImRpZmYtaW5kZXgiLCAiLS1xdWlldCIsICItLWNhY2hlZCIsICItLWlnbm9yZS1zdWJtb2R1bGVzIiwKKwkJTlVMTCwgIi0tIiwgTlVMTAorCX07CisJY29uc3QgY2hhciAqcmVhZF90cmVlW10gPSB7CisJCSJyZWFkLXRyZWUiLCAiLXUiLCAiLW0iLCBOVUxMLCBOVUxMCisJfTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCWNoaWxkLmFyZ3YgPSB1cGRhdGVfcmVmcmVzaDsKKwljaGlsZC5lbnYgPSBlbnYtPmFyZ3Y7CisJY2hpbGQuZGlyID0gd29ya190cmVlOworCWNoaWxkLm5vX3N0ZGluID0gMTsKKwljaGlsZC5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwljaGlsZC5naXRfY21kID0gMTsKKwlpZiAocnVuX2NvbW1hbmQoJmNoaWxkKSkKKwkJcmV0dXJuICJVcC10by1kYXRlIGNoZWNrIGZhaWxlZCI7CisKKwkvKiBydW5fY29tbWFuZCgpIGRvZXMgbm90IGNsZWFuIHVwIGNvbXBsZXRlbHk7IHJlaW5pdGlhbGl6ZSAqLworCWNoaWxkX3Byb2Nlc3NfaW5pdCgmY2hpbGQpOworCWNoaWxkLmFyZ3YgPSBkaWZmX2ZpbGVzOworCWNoaWxkLmVudiA9IGVudi0+YXJndjsKKwljaGlsZC5kaXIgPSB3b3JrX3RyZWU7CisJY2hpbGQubm9fc3RkaW4gPSAxOworCWNoaWxkLnN0ZG91dF90b19zdGRlcnIgPSAxOworCWNoaWxkLmdpdF9jbWQgPSAxOworCWlmIChydW5fY29tbWFuZCgmY2hpbGQpKQorCQlyZXR1cm4gIldvcmtpbmcgZGlyZWN0b3J5IGhhcyB1bnN0YWdlZCBjaGFuZ2VzIjsKKworCS8qIGRpZmYtaW5kZXggd2l0aCBlaXRoZXIgSEVBRCBvciBhbiBlbXB0eSB0cmVlICovCisJZGlmZl9pbmRleFs0XSA9IGhlYWRfaGFzX2hpc3RvcnkoKSA/ICJIRUFEIiA6IGVtcHR5X3RyZWVfb2lkX2hleCgpOworCisJY2hpbGRfcHJvY2Vzc19pbml0KCZjaGlsZCk7CisJY2hpbGQuYXJndiA9IGRpZmZfaW5kZXg7CisJY2hpbGQuZW52ID0gZW52LT5hcmd2OworCWNoaWxkLm5vX3N0ZGluID0gMTsKKwljaGlsZC5ub19zdGRvdXQgPSAxOworCWNoaWxkLnN0ZG91dF90b19zdGRlcnIgPSAwOworCWNoaWxkLmdpdF9jbWQgPSAxOworCWlmIChydW5fY29tbWFuZCgmY2hpbGQpKQorCQlyZXR1cm4gIldvcmtpbmcgZGlyZWN0b3J5IGhhcyBzdGFnZWQgY2hhbmdlcyI7CisKKwlyZWFkX3RyZWVbM10gPSBoYXNoX3RvX2hleChzaGExKTsKKwljaGlsZF9wcm9jZXNzX2luaXQoJmNoaWxkKTsKKwljaGlsZC5hcmd2ID0gcmVhZF90cmVlOworCWNoaWxkLmVudiA9IGVudi0+YXJndjsKKwljaGlsZC5kaXIgPSB3b3JrX3RyZWU7CisJY2hpbGQubm9fc3RkaW4gPSAxOworCWNoaWxkLm5vX3N0ZG91dCA9IDE7CisJY2hpbGQuc3Rkb3V0X3RvX3N0ZGVyciA9IDA7CisJY2hpbGQuZ2l0X2NtZCA9IDE7CisJaWYgKHJ1bl9jb21tYW5kKCZjaGlsZCkpCisJCXJldHVybiAiQ291bGQgbm90IHVwZGF0ZSB3b3JraW5nIHRyZWUgdG8gbmV3IEhFQUQiOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwdXNoX3RvX2NoZWNrb3V0X2hvb2sgPSAicHVzaC10by1jaGVja291dCI7CisKK3N0YXRpYyBjb25zdCBjaGFyICpwdXNoX3RvX2NoZWNrb3V0KHVuc2lnbmVkIGNoYXIgKmhhc2gsCisJCQkJICAgIHN0cnVjdCBhcmd2X2FycmF5ICplbnYsCisJCQkJICAgIGNvbnN0IGNoYXIgKndvcmtfdHJlZSkKK3sKKwlhcmd2X2FycmF5X3B1c2hmKGVudiwgIkdJVF9XT1JLX1RSRUU9JXMiLCBhYnNvbHV0ZV9wYXRoKHdvcmtfdHJlZSkpOworCWlmIChydW5faG9va19sZShlbnYtPmFyZ3YsIHB1c2hfdG9fY2hlY2tvdXRfaG9vaywKKwkJCWhhc2hfdG9faGV4KGhhc2gpLCBOVUxMKSkKKwkJcmV0dXJuICJwdXNoLXRvLWNoZWNrb3V0IGhvb2sgZGVjbGluZWQiOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp1cGRhdGVfd29ya3RyZWUodW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3b3JrdHJlZSkKK3sKKwljb25zdCBjaGFyICpyZXR2YWwsICp3b3JrX3RyZWUsICpnaXRfZGlyID0gTlVMTDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBlbnYgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwlpZiAod29ya3RyZWUgJiYgd29ya3RyZWUtPnBhdGgpCisJCXdvcmtfdHJlZSA9IHdvcmt0cmVlLT5wYXRoOworCWVsc2UgaWYgKGdpdF93b3JrX3RyZWVfY2ZnKQorCQl3b3JrX3RyZWUgPSBnaXRfd29ya190cmVlX2NmZzsKKwllbHNlCisJCXdvcmtfdHJlZSA9ICIuLiI7CisKKwlpZiAoaXNfYmFyZV9yZXBvc2l0b3J5KCkpCisJCXJldHVybiAiZGVueUN1cnJlbnRCcmFuY2ggPSB1cGRhdGVJbnN0ZWFkIG5lZWRzIGEgd29ya3RyZWUiOworCWlmICh3b3JrdHJlZSkKKwkJZ2l0X2RpciA9IGdldF93b3JrdHJlZV9naXRfZGlyKHdvcmt0cmVlKTsKKwlpZiAoIWdpdF9kaXIpCisJCWdpdF9kaXIgPSBnZXRfZ2l0X2RpcigpOworCisJYXJndl9hcnJheV9wdXNoZigmZW52LCAiR0lUX0RJUj0lcyIsIGFic29sdXRlX3BhdGgoZ2l0X2RpcikpOworCisJaWYgKCFmaW5kX2hvb2socHVzaF90b19jaGVja291dF9ob29rKSkKKwkJcmV0dmFsID0gcHVzaF90b19kZXBsb3koc2hhMSwgJmVudiwgd29ya190cmVlKTsKKwllbHNlCisJCXJldHZhbCA9IHB1c2hfdG9fY2hlY2tvdXQoc2hhMSwgJmVudiwgd29ya190cmVlKTsKKworCWFyZ3ZfYXJyYXlfY2xlYXIoJmVudik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnVwZGF0ZShzdHJ1Y3QgY29tbWFuZCAqY21kLCBzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSkKK3sKKwljb25zdCBjaGFyICpuYW1lID0gY21kLT5yZWZfbmFtZTsKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWVzcGFjZWRfbmFtZV9idWYgPSBTVFJCVUZfSU5JVDsKKwlzdGF0aWMgY2hhciAqbmFtZXNwYWNlZF9uYW1lOworCWNvbnN0IGNoYXIgKnJldDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkID0gJmNtZC0+b2xkX29pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkID0gJmNtZC0+bmV3X29pZDsKKwlpbnQgZG9fdXBkYXRlX3dvcmt0cmVlID0gMDsKKwljb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKndvcmt0cmVlID0gaXNfYmFyZV9yZXBvc2l0b3J5KCkgPyBOVUxMIDogZmluZF9zaGFyZWRfc3ltcmVmKCJIRUFEIiwgbmFtZSk7CisKKwkvKiBvbmx5IHJlZnMvLi4uIGFyZSBhbGxvd2VkICovCisJaWYgKCFzdGFydHNfd2l0aChuYW1lLCAicmVmcy8iKSB8fCBjaGVja19yZWZuYW1lX2Zvcm1hdChuYW1lICsgNSwgMCkpIHsKKwkJcnBfZXJyb3IoInJlZnVzaW5nIHRvIGNyZWF0ZSBmdW5ueSByZWYgJyVzJyByZW1vdGVseSIsIG5hbWUpOworCQlyZXR1cm4gImZ1bm55IHJlZm5hbWUiOworCX0KKworCXN0cmJ1Zl9hZGRmKCZuYW1lc3BhY2VkX25hbWVfYnVmLCAiJXMlcyIsIGdldF9naXRfbmFtZXNwYWNlKCksIG5hbWUpOworCWZyZWUobmFtZXNwYWNlZF9uYW1lKTsKKwluYW1lc3BhY2VkX25hbWUgPSBzdHJidWZfZGV0YWNoKCZuYW1lc3BhY2VkX25hbWVfYnVmLCBOVUxMKTsKKworCWlmICh3b3JrdHJlZSkgeworCQlzd2l0Y2ggKGRlbnlfY3VycmVudF9icmFuY2gpIHsKKwkJY2FzZSBERU5ZX0lHTk9SRToKKwkJCWJyZWFrOworCQljYXNlIERFTllfV0FSTjoKKwkJCXJwX3dhcm5pbmcoInVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCIpOworCQkJYnJlYWs7CisJCWNhc2UgREVOWV9SRUZVU0U6CisJCWNhc2UgREVOWV9VTkNPTkZJR1VSRUQ6CisJCQlycF9lcnJvcigicmVmdXNpbmcgdG8gdXBkYXRlIGNoZWNrZWQgb3V0IGJyYW5jaDogJXMiLCBuYW1lKTsKKwkJCWlmIChkZW55X2N1cnJlbnRfYnJhbmNoID09IERFTllfVU5DT05GSUdVUkVEKQorCQkJCXJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueSgpOworCQkJcmV0dXJuICJicmFuY2ggaXMgY3VycmVudGx5IGNoZWNrZWQgb3V0IjsKKwkJY2FzZSBERU5ZX1VQREFURV9JTlNURUFEOgorCQkJLyogcGFzcyAtLSBsZXQgb3RoZXIgY2hlY2tzIGludGVydmVuZSBmaXJzdCAqLworCQkJZG9fdXBkYXRlX3dvcmt0cmVlID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFpc19udWxsX29pZChuZXdfb2lkKSAmJiAhaGFzX29iamVjdF9maWxlKG5ld19vaWQpKSB7CisJCWVycm9yKCJ1bnBhY2sgc2hvdWxkIGhhdmUgZ2VuZXJhdGVkICVzLCAiCisJCSAgICAgICJidXQgSSBjYW4ndCBmaW5kIGl0ISIsIG9pZF90b19oZXgobmV3X29pZCkpOworCQlyZXR1cm4gImJhZCBwYWNrIjsKKwl9CisKKwlpZiAoIWlzX251bGxfb2lkKG9sZF9vaWQpICYmIGlzX251bGxfb2lkKG5ld19vaWQpKSB7CisJCWlmIChkZW55X2RlbGV0ZXMgJiYgc3RhcnRzX3dpdGgobmFtZSwgInJlZnMvaGVhZHMvIikpIHsKKwkJCXJwX2Vycm9yKCJkZW55aW5nIHJlZiBkZWxldGlvbiBmb3IgJXMiLCBuYW1lKTsKKwkJCXJldHVybiAiZGVsZXRpb24gcHJvaGliaXRlZCI7CisJCX0KKworCQlpZiAod29ya3RyZWUgfHwgKGhlYWRfbmFtZSAmJiAhc3RyY21wKG5hbWVzcGFjZWRfbmFtZSwgaGVhZF9uYW1lKSkpIHsKKwkJCXN3aXRjaCAoZGVueV9kZWxldGVfY3VycmVudCkgeworCQkJY2FzZSBERU5ZX0lHTk9SRToKKwkJCQlicmVhazsKKwkJCWNhc2UgREVOWV9XQVJOOgorCQkJCXJwX3dhcm5pbmcoImRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBERU5ZX1JFRlVTRToKKwkJCWNhc2UgREVOWV9VTkNPTkZJR1VSRUQ6CisJCQljYXNlIERFTllfVVBEQVRFX0lOU1RFQUQ6CisJCQkJaWYgKGRlbnlfZGVsZXRlX2N1cnJlbnQgPT0gREVOWV9VTkNPTkZJR1VSRUQpCisJCQkJCXJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueV9kZWxldGVfY3VycmVudCgpOworCQkJCXJwX2Vycm9yKCJyZWZ1c2luZyB0byBkZWxldGUgdGhlIGN1cnJlbnQgYnJhbmNoOiAlcyIsIG5hbWUpOworCQkJCXJldHVybiAiZGVsZXRpb24gb2YgdGhlIGN1cnJlbnQgYnJhbmNoIHByb2hpYml0ZWQiOworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gIkludmFsaWQgZGVueURlbGV0ZUN1cnJlbnQgc2V0dGluZyI7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZGVueV9ub25fZmFzdF9mb3J3YXJkcyAmJiAhaXNfbnVsbF9vaWQobmV3X29pZCkgJiYKKwkgICAgIWlzX251bGxfb2lkKG9sZF9vaWQpICYmCisJICAgIHN0YXJ0c193aXRoKG5hbWUsICJyZWZzL2hlYWRzLyIpKSB7CisJCXN0cnVjdCBvYmplY3QgKm9sZF9vYmplY3QsICpuZXdfb2JqZWN0OworCQlzdHJ1Y3QgY29tbWl0ICpvbGRfY29tbWl0LCAqbmV3X2NvbW1pdDsKKworCQlvbGRfb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvbGRfb2lkKTsKKwkJbmV3X29iamVjdCA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgbmV3X29pZCk7CisKKwkJaWYgKCFvbGRfb2JqZWN0IHx8ICFuZXdfb2JqZWN0IHx8CisJCSAgICBvbGRfb2JqZWN0LT50eXBlICE9IE9CSl9DT01NSVQgfHwKKwkJICAgIG5ld19vYmplY3QtPnR5cGUgIT0gT0JKX0NPTU1JVCkgeworCQkJZXJyb3IoImJhZCBzaGExIG9iamVjdHMgZm9yICVzIiwgbmFtZSk7CisJCQlyZXR1cm4gImJhZCByZWYiOworCQl9CisJCW9sZF9jb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW9sZF9vYmplY3Q7CisJCW5ld19jb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW5ld19vYmplY3Q7CisJCWlmICghaW5fbWVyZ2VfYmFzZXMob2xkX2NvbW1pdCwgbmV3X2NvbW1pdCkpIHsKKwkJCXJwX2Vycm9yKCJkZW55aW5nIG5vbi1mYXN0LWZvcndhcmQgJXMiCisJCQkJICIgKHlvdSBzaG91bGQgcHVsbCBmaXJzdCkiLCBuYW1lKTsKKwkJCXJldHVybiAibm9uLWZhc3QtZm9yd2FyZCI7CisJCX0KKwl9CisJaWYgKHJ1bl91cGRhdGVfaG9vayhjbWQpKSB7CisJCXJwX2Vycm9yKCJob29rIGRlY2xpbmVkIHRvIHVwZGF0ZSAlcyIsIG5hbWUpOworCQlyZXR1cm4gImhvb2sgZGVjbGluZWQiOworCX0KKworCWlmIChkb191cGRhdGVfd29ya3RyZWUpIHsKKwkJcmV0ID0gdXBkYXRlX3dvcmt0cmVlKG5ld19vaWQtPmhhc2gsIGZpbmRfc2hhcmVkX3N5bXJlZigiSEVBRCIsIG5hbWUpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGlzX251bGxfb2lkKG5ld19vaWQpKSB7CisJCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJCWlmICghcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvbGRfb2lkKSkgeworCQkJb2xkX29pZCA9IE5VTEw7CisJCQlpZiAocmVmX2V4aXN0cyhuYW1lKSkgeworCQkJCXJwX3dhcm5pbmcoIkFsbG93aW5nIGRlbGV0aW9uIG9mIGNvcnJ1cHQgcmVmLiIpOworCQkJfSBlbHNlIHsKKwkJCQlycF93YXJuaW5nKCJEZWxldGluZyBhIG5vbi1leGlzdGVudCByZWYuIik7CisJCQkJY21kLT5kaWRfbm90X2V4aXN0ID0gMTsKKwkJCX0KKwkJfQorCQlpZiAocmVmX3RyYW5zYWN0aW9uX2RlbGV0ZSh0cmFuc2FjdGlvbiwKKwkJCQkJICAgbmFtZXNwYWNlZF9uYW1lLAorCQkJCQkgICBvbGRfb2lkLAorCQkJCQkgICAwLCAicHVzaCIsICZlcnIpKSB7CisJCQlycF9lcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQkJcmV0dXJuICJmYWlsZWQgdG8gZGVsZXRlIjsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwkJcmV0dXJuIE5VTEw7IC8qIGdvb2QgKi8KKwl9CisJZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJCWlmIChzaGFsbG93X3VwZGF0ZSAmJiBzaS0+c2hhbGxvd19yZWZbY21kLT5pbmRleF0gJiYKKwkJICAgIHVwZGF0ZV9zaGFsbG93X3JlZihjbWQsIHNpKSkKKwkJCXJldHVybiAic2hhbGxvdyBlcnJvciI7CisKKwkJaWYgKHJlZl90cmFuc2FjdGlvbl91cGRhdGUodHJhbnNhY3Rpb24sCisJCQkJCSAgIG5hbWVzcGFjZWRfbmFtZSwKKwkJCQkJICAgbmV3X29pZCwgb2xkX29pZCwKKwkJCQkJICAgMCwgInB1c2giLAorCQkJCQkgICAmZXJyKSkgeworCQkJcnBfZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKworCQkJcmV0dXJuICJmYWlsZWQgdG8gdXBkYXRlIHJlZiI7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisKKwkJcmV0dXJuIE5VTEw7IC8qIGdvb2QgKi8KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl91cGRhdGVfcG9zdF9ob29rKHN0cnVjdCBjb21tYW5kICpjb21tYW5kcykKK3sKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHByb2MgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqaG9vazsKKworCWhvb2sgPSBmaW5kX2hvb2soInBvc3QtdXBkYXRlIik7CisJaWYgKCFob29rKQorCQlyZXR1cm47CisKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlpZiAoY21kLT5lcnJvcl9zdHJpbmcgfHwgY21kLT5kaWRfbm90X2V4aXN0KQorCQkJY29udGludWU7CisJCWlmICghcHJvYy5hcmdzLmFyZ2MpCisJCQlhcmd2X2FycmF5X3B1c2goJnByb2MuYXJncywgaG9vayk7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcHJvYy5hcmdzLCBjbWQtPnJlZl9uYW1lKTsKKwl9CisJaWYgKCFwcm9jLmFyZ3MuYXJnYykKKwkJcmV0dXJuOworCisJcHJvYy5ub19zdGRpbiA9IDE7CisJcHJvYy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlwcm9jLmVyciA9IHVzZV9zaWRlYmFuZCA/IC0xIDogMDsKKwlwcm9jLnRyYWNlMl9ob29rX25hbWUgPSAicG9zdC11cGRhdGUiOworCisJaWYgKCFzdGFydF9jb21tYW5kKCZwcm9jKSkgeworCQlpZiAodXNlX3NpZGViYW5kKQorCQkJY29weV90b19zaWRlYmFuZChwcm9jLmVyciwgLTEsIE5VTEwpOworCQlmaW5pc2hfY29tbWFuZCgmcHJvYyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjaGVja19hbGlhc2VkX3VwZGF0ZV9pbnRlcm5hbChzdHJ1Y3QgY29tbWFuZCAqY21kLAorCQkJCQkgIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCQkJICBjb25zdCBjaGFyICpkc3RfbmFtZSwgaW50IGZsYWcpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IGNvbW1hbmQgKmRzdF9jbWQ7CisKKwlpZiAoIShmbGFnICYgUkVGX0lTU1lNUkVGKSkKKwkJcmV0dXJuOworCisJaWYgKCFkc3RfbmFtZSkgeworCQlycF9lcnJvcigicmVmdXNpbmcgdXBkYXRlIHRvIGJyb2tlbiBzeW1yZWYgJyVzJyIsIGNtZC0+cmVmX25hbWUpOworCQljbWQtPnNraXBfdXBkYXRlID0gMTsKKwkJY21kLT5lcnJvcl9zdHJpbmcgPSAiYnJva2VuIHN5bXJlZiI7CisJCXJldHVybjsKKwl9CisJZHN0X25hbWUgPSBzdHJpcF9uYW1lc3BhY2UoZHN0X25hbWUpOworCisJaWYgKChpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKGxpc3QsIGRzdF9uYW1lKSkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJY21kLT5za2lwX3VwZGF0ZSA9IDE7CisKKwlkc3RfY21kID0gKHN0cnVjdCBjb21tYW5kICopIGl0ZW0tPnV0aWw7CisKKwlpZiAob2lkZXEoJmNtZC0+b2xkX29pZCwgJmRzdF9jbWQtPm9sZF9vaWQpICYmCisJICAgIG9pZGVxKCZjbWQtPm5ld19vaWQsICZkc3RfY21kLT5uZXdfb2lkKSkKKwkJcmV0dXJuOworCisJZHN0X2NtZC0+c2tpcF91cGRhdGUgPSAxOworCisJcnBfZXJyb3IoInJlZnVzaW5nIGluY29uc2lzdGVudCB1cGRhdGUgYmV0d2VlbiBzeW1yZWYgJyVzJyAoJXMuLiVzKSBhbmQiCisJCSAiIGl0cyB0YXJnZXQgJyVzJyAoJXMuLiVzKSIsCisJCSBjbWQtPnJlZl9uYW1lLAorCQkgZmluZF91bmlxdWVfYWJicmV2KCZjbWQtPm9sZF9vaWQsIERFRkFVTFRfQUJCUkVWKSwKKwkJIGZpbmRfdW5pcXVlX2FiYnJldigmY21kLT5uZXdfb2lkLCBERUZBVUxUX0FCQlJFViksCisJCSBkc3RfY21kLT5yZWZfbmFtZSwKKwkJIGZpbmRfdW5pcXVlX2FiYnJldigmZHN0X2NtZC0+b2xkX29pZCwgREVGQVVMVF9BQkJSRVYpLAorCQkgZmluZF91bmlxdWVfYWJicmV2KCZkc3RfY21kLT5uZXdfb2lkLCBERUZBVUxUX0FCQlJFVikpOworCisJY21kLT5lcnJvcl9zdHJpbmcgPSBkc3RfY21kLT5lcnJvcl9zdHJpbmcgPQorCQkiaW5jb25zaXN0ZW50IGFsaWFzZWQgdXBkYXRlIjsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfYWxpYXNlZF91cGRhdGUoc3RydWN0IGNvbW1hbmQgKmNtZCwgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZHN0X25hbWU7CisJaW50IGZsYWc7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiJXMlcyIsIGdldF9naXRfbmFtZXNwYWNlKCksIGNtZC0+cmVmX25hbWUpOworCWRzdF9uYW1lID0gcmVzb2x2ZV9yZWZfdW5zYWZlKGJ1Zi5idWYsIDAsIE5VTEwsICZmbGFnKTsKKwljaGVja19hbGlhc2VkX3VwZGF0ZV9pbnRlcm5hbChjbWQsIGxpc3QsIGRzdF9uYW1lLCBmbGFnKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfYWxpYXNlZF91cGRhdGVzKHN0cnVjdCBjb21tYW5kICpjb21tYW5kcykKK3sKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCXN0cnVjdCBzdHJpbmdfbGlzdCByZWZfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJlZl9saXN0LCBjbWQtPnJlZl9uYW1lKTsKKwkJaXRlbS0+dXRpbCA9ICh2b2lkICopY21kOworCX0KKwlzdHJpbmdfbGlzdF9zb3J0KCZyZWZfbGlzdCk7CisKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlpZiAoIWNtZC0+ZXJyb3Jfc3RyaW5nKQorCQkJY2hlY2tfYWxpYXNlZF91cGRhdGUoY21kLCAmcmVmX2xpc3QpOworCX0KKworCXN0cmluZ19saXN0X2NsZWFyKCZyZWZfbGlzdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgY29tbWFuZF9zaW5nbGV0b25faXRlcmF0b3Iodm9pZCAqY2JfZGF0YSwgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBjb21tYW5kICoqY21kX2xpc3QgPSBjYl9kYXRhOworCXN0cnVjdCBjb21tYW5kICpjbWQgPSAqY21kX2xpc3Q7CisKKwlpZiAoIWNtZCB8fCBpc19udWxsX29pZCgmY21kLT5uZXdfb2lkKSkKKwkJcmV0dXJuIC0xOyAvKiBlbmQgb2YgbGlzdCAqLworCSpjbWRfbGlzdCA9IE5VTEw7IC8qIHRoaXMgcmV0dXJucyBvbmx5IG9uZSAqLworCW9pZGNweShvaWQsICZjbWQtPm5ld19vaWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfY29ubmVjdGl2aXR5X2Vycm9ycyhzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMsCisJCQkJICAgIHN0cnVjdCBzaGFsbG93X2luZm8gKnNpKQoreworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWFuZCAqc2luZ2xldG9uID0gY21kOworCQlzdHJ1Y3QgY2hlY2tfY29ubmVjdGVkX29wdGlvbnMgb3B0ID0gQ0hFQ0tfQ09OTkVDVEVEX0lOSVQ7CisKKwkJaWYgKHNoYWxsb3dfdXBkYXRlICYmIHNpLT5zaGFsbG93X3JlZltjbWQtPmluZGV4XSkKKwkJCS8qIHRvIGJlIGNoZWNrZWQgaW4gdXBkYXRlX3NoYWxsb3dfcmVmKCkgKi8KKwkJCWNvbnRpbnVlOworCisJCW9wdC5lbnYgPSB0bXBfb2JqZGlyX2Vudih0bXBfb2JqZGlyKTsKKwkJaWYgKCFjaGVja19jb25uZWN0ZWQoY29tbWFuZF9zaW5nbGV0b25faXRlcmF0b3IsICZzaW5nbGV0b24sCisJCQkJICAgICAmb3B0KSkKKwkJCWNvbnRpbnVlOworCisJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gIm1pc3NpbmcgbmVjZXNzYXJ5IG9iamVjdHMiOworCX0KK30KKworc3RydWN0IGl0ZXJhdGVfZGF0YSB7CisJc3RydWN0IGNvbW1hbmQgKmNtZHM7CisJc3RydWN0IHNoYWxsb3dfaW5mbyAqc2k7Cit9OworCitzdGF0aWMgaW50IGl0ZXJhdGVfcmVjZWl2ZV9jb21tYW5kX2xpc3Qodm9pZCAqY2JfZGF0YSwgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBpdGVyYXRlX2RhdGEgKmRhdGEgPSBjYl9kYXRhOworCXN0cnVjdCBjb21tYW5kICoqY21kX2xpc3QgPSAmZGF0YS0+Y21kczsKKwlzdHJ1Y3QgY29tbWFuZCAqY21kID0gKmNtZF9saXN0OworCisJZm9yICg7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCWlmIChzaGFsbG93X3VwZGF0ZSAmJiBkYXRhLT5zaS0+c2hhbGxvd19yZWZbY21kLT5pbmRleF0pCisJCQkvKiB0byBiZSBjaGVja2VkIGluIHVwZGF0ZV9zaGFsbG93X3JlZigpICovCisJCQljb250aW51ZTsKKwkJaWYgKCFpc19udWxsX29pZCgmY21kLT5uZXdfb2lkKSAmJiAhY21kLT5za2lwX3VwZGF0ZSkgeworCQkJb2lkY3B5KG9pZCwgJmNtZC0+bmV3X29pZCk7CisJCQkqY21kX2xpc3QgPSBjbWQtPm5leHQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwkqY21kX2xpc3QgPSBOVUxMOworCXJldHVybiAtMTsgLyogZW5kIG9mIGxpc3QgKi8KK30KKworc3RhdGljIHZvaWQgcmVqZWN0X3VwZGF0ZXNfdG9faGlkZGVuKHN0cnVjdCBjb21tYW5kICpjb21tYW5kcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlZm5hbWVfZnVsbCA9IFNUUkJVRl9JTklUOworCXNpemVfdCBwcmVmaXhfbGVuOworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisKKwlzdHJidWZfYWRkc3RyKCZyZWZuYW1lX2Z1bGwsIGdldF9naXRfbmFtZXNwYWNlKCkpOworCXByZWZpeF9sZW4gPSByZWZuYW1lX2Z1bGwubGVuOworCisJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKGNtZC0+ZXJyb3Jfc3RyaW5nKQorCQkJY29udGludWU7CisKKwkJc3RyYnVmX3NldGxlbigmcmVmbmFtZV9mdWxsLCBwcmVmaXhfbGVuKTsKKwkJc3RyYnVmX2FkZHN0cigmcmVmbmFtZV9mdWxsLCBjbWQtPnJlZl9uYW1lKTsKKworCQlpZiAoIXJlZl9pc19oaWRkZW4oY21kLT5yZWZfbmFtZSwgcmVmbmFtZV9mdWxsLmJ1ZikpCisJCQljb250aW51ZTsKKwkJaWYgKGlzX251bGxfb2lkKCZjbWQtPm5ld19vaWQpKQorCQkJY21kLT5lcnJvcl9zdHJpbmcgPSAiZGVueSBkZWxldGluZyBhIGhpZGRlbiByZWYiOworCQllbHNlCisJCQljbWQtPmVycm9yX3N0cmluZyA9ICJkZW55IHVwZGF0aW5nIGEgaGlkZGVuIHJlZiI7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnJlZm5hbWVfZnVsbCk7Cit9CisKK3N0YXRpYyBpbnQgc2hvdWxkX3Byb2Nlc3NfY21kKHN0cnVjdCBjb21tYW5kICpjbWQpCit7CisJcmV0dXJuICFjbWQtPmVycm9yX3N0cmluZyAmJiAhY21kLT5za2lwX3VwZGF0ZTsKK30KKworc3RhdGljIHZvaWQgd2Fybl9pZl9za2lwcGVkX2Nvbm5lY3Rpdml0eV9jaGVjayhzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMsCisJCQkJCSAgICAgICBzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSkKK3sKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCWludCBjaGVja2VkX2Nvbm5lY3Rpdml0eSA9IDE7CisKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlpZiAoc2hvdWxkX3Byb2Nlc3NfY21kKGNtZCkgJiYgc2ktPnNoYWxsb3dfcmVmW2NtZC0+aW5kZXhdKSB7CisJCQllcnJvcigiQlVHOiBjb25uZWN0aXZpdHkgY2hlY2sgaGFzIG5vdCBiZWVuIHJ1biBvbiByZWYgJXMiLAorCQkJICAgICAgY21kLT5yZWZfbmFtZSk7CisJCQljaGVja2VkX2Nvbm5lY3Rpdml0eSA9IDA7CisJCX0KKwl9CisJaWYgKCFjaGVja2VkX2Nvbm5lY3Rpdml0eSkKKwkJQlVHKCJjb25uZWN0aXZpdHkgY2hlY2sgc2tpcHBlZD8/PyIpOworfQorCitzdGF0aWMgdm9pZCBleGVjdXRlX2NvbW1hbmRzX25vbl9hdG9taWMoc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzLAorCQkJCQlzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSkKK3sKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlpZiAoIXNob3VsZF9wcm9jZXNzX2NtZChjbWQpKQorCQkJY29udGludWU7CisKKwkJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJCWlmICghdHJhbnNhY3Rpb24pIHsKKwkJCXJwX2Vycm9yKCIlcyIsIGVyci5idWYpOworCQkJc3RyYnVmX3Jlc2V0KCZlcnIpOworCQkJY21kLT5lcnJvcl9zdHJpbmcgPSAidHJhbnNhY3Rpb24gZmFpbGVkIHRvIHN0YXJ0IjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY21kLT5lcnJvcl9zdHJpbmcgPSB1cGRhdGUoY21kLCBzaSk7CisKKwkJaWYgKCFjbWQtPmVycm9yX3N0cmluZworCQkgICAgJiYgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpIHsKKwkJCXJwX2Vycm9yKCIlcyIsIGVyci5idWYpOworCQkJc3RyYnVmX3Jlc2V0KCZlcnIpOworCQkJY21kLT5lcnJvcl9zdHJpbmcgPSAiZmFpbGVkIHRvIHVwZGF0ZSByZWYiOworCQl9CisJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmVycik7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWN1dGVfY29tbWFuZHNfYXRvbWljKHN0cnVjdCBjb21tYW5kICpjb21tYW5kcywKKwkJCQkJc3RydWN0IHNoYWxsb3dfaW5mbyAqc2kpCit7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnJlcG9ydGVkX2Vycm9yID0gImF0b21pYyBwdXNoIGZhaWx1cmUiOworCisJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJaWYgKCF0cmFuc2FjdGlvbikgeworCQlycF9lcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJc3RyYnVmX3Jlc2V0KCZlcnIpOworCQlyZXBvcnRlZF9lcnJvciA9ICJ0cmFuc2FjdGlvbiBmYWlsZWQgdG8gc3RhcnQiOworCQlnb3RvIGZhaWx1cmU7CisJfQorCisJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKCFzaG91bGRfcHJvY2Vzc19jbWQoY21kKSkKKwkJCWNvbnRpbnVlOworCisJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gdXBkYXRlKGNtZCwgc2kpOworCisJCWlmIChjbWQtPmVycm9yX3N0cmluZykKKwkJCWdvdG8gZmFpbHVyZTsKKwl9CisKKwlpZiAocmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpIHsKKwkJcnBfZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCXJlcG9ydGVkX2Vycm9yID0gImF0b21pYyB0cmFuc2FjdGlvbiBmYWlsZWQiOworCQlnb3RvIGZhaWx1cmU7CisJfQorCWdvdG8gY2xlYW51cDsKKworZmFpbHVyZToKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkKKwkJaWYgKCFjbWQtPmVycm9yX3N0cmluZykKKwkJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gcmVwb3J0ZWRfZXJyb3I7CisKK2NsZWFudXA6CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworfQorCitzdGF0aWMgdm9pZCBleGVjdXRlX2NvbW1hbmRzKHN0cnVjdCBjb21tYW5kICpjb21tYW5kcywKKwkJCSAgICAgY29uc3QgY2hhciAqdW5wYWNrZXJfZXJyb3IsCisJCQkgICAgIHN0cnVjdCBzaGFsbG93X2luZm8gKnNpLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnB1c2hfb3B0aW9ucykKK3sKKwlzdHJ1Y3QgY2hlY2tfY29ubmVjdGVkX29wdGlvbnMgb3B0ID0gQ0hFQ0tfQ09OTkVDVEVEX0lOSVQ7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwlzdHJ1Y3QgaXRlcmF0ZV9kYXRhIGRhdGE7CisJc3RydWN0IGFzeW5jIG11eGVyOworCWludCBlcnJfZmQgPSAwOworCisJaWYgKHVucGFja2VyX2Vycm9yKSB7CisJCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KQorCQkJY21kLT5lcnJvcl9zdHJpbmcgPSAidW5wYWNrZXIgZXJyb3IiOworCQlyZXR1cm47CisJfQorCisJaWYgKHVzZV9zaWRlYmFuZCkgeworCQltZW1zZXQoJm11eGVyLCAwLCBzaXplb2YobXV4ZXIpKTsKKwkJbXV4ZXIucHJvYyA9IGNvcHlfdG9fc2lkZWJhbmQ7CisJCW11eGVyLmluID0gLTE7CisJCWlmICghc3RhcnRfYXN5bmMoJm11eGVyKSkKKwkJCWVycl9mZCA9IG11eGVyLmluOworCQkvKiAuLi5lbHNlLCBjb250aW51ZSB3aXRob3V0IHJlbGF5aW5nIHNpZGViYW5kICovCisJfQorCisJZGF0YS5jbWRzID0gY29tbWFuZHM7CisJZGF0YS5zaSA9IHNpOworCW9wdC5lcnJfZmQgPSBlcnJfZmQ7CisJb3B0LnByb2dyZXNzID0gZXJyX2ZkICYmICFxdWlldDsKKwlvcHQuZW52ID0gdG1wX29iamRpcl9lbnYodG1wX29iamRpcik7CisJaWYgKGNoZWNrX2Nvbm5lY3RlZChpdGVyYXRlX3JlY2VpdmVfY29tbWFuZF9saXN0LCAmZGF0YSwgJm9wdCkpCisJCXNldF9jb25uZWN0aXZpdHlfZXJyb3JzKGNvbW1hbmRzLCBzaSk7CisKKwlpZiAodXNlX3NpZGViYW5kKQorCQlmaW5pc2hfYXN5bmMoJm11eGVyKTsKKworCXJlamVjdF91cGRhdGVzX3RvX2hpZGRlbihjb21tYW5kcyk7CisKKwlpZiAocnVuX3JlY2VpdmVfaG9vayhjb21tYW5kcywgInByZS1yZWNlaXZlIiwgMCwgcHVzaF9vcHRpb25zKSkgeworCQlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQkJaWYgKCFjbWQtPmVycm9yX3N0cmluZykKKwkJCQljbWQtPmVycm9yX3N0cmluZyA9ICJwcmUtcmVjZWl2ZSBob29rIGRlY2xpbmVkIjsKKwkJfQorCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBOb3cgd2UnbGwgc3RhcnQgd3JpdGluZyBvdXQgcmVmcywgd2hpY2ggbWVhbnMgdGhlIG9iamVjdHMgbmVlZAorCSAqIHRvIGJlIGluIHRoZWlyIGZpbmFsIHBvc2l0aW9ucyBzbyB0aGF0IG90aGVyIHByb2Nlc3NlcyBjYW4gc2VlIHRoZW0uCisJICovCisJaWYgKHRtcF9vYmpkaXJfbWlncmF0ZSh0bXBfb2JqZGlyKSA8IDApIHsKKwkJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJCWlmICghY21kLT5lcnJvcl9zdHJpbmcpCisJCQkJY21kLT5lcnJvcl9zdHJpbmcgPSAidW5hYmxlIHRvIG1pZ3JhdGUgb2JqZWN0cyB0byBwZXJtYW5lbnQgc3RvcmFnZSI7CisJCX0KKwkJcmV0dXJuOworCX0KKwl0bXBfb2JqZGlyID0gTlVMTDsKKworCWNoZWNrX2FsaWFzZWRfdXBkYXRlcyhjb21tYW5kcyk7CisKKwlmcmVlKGhlYWRfbmFtZV90b19mcmVlKTsKKwloZWFkX25hbWUgPSBoZWFkX25hbWVfdG9fZnJlZSA9IHJlc29sdmVfcmVmZHVwKCJIRUFEIiwgMCwgTlVMTCwgTlVMTCk7CisKKwlpZiAodXNlX2F0b21pYykKKwkJZXhlY3V0ZV9jb21tYW5kc19hdG9taWMoY29tbWFuZHMsIHNpKTsKKwllbHNlCisJCWV4ZWN1dGVfY29tbWFuZHNfbm9uX2F0b21pYyhjb21tYW5kcywgc2kpOworCisJaWYgKHNoYWxsb3dfdXBkYXRlKQorCQl3YXJuX2lmX3NraXBwZWRfY29ubmVjdGl2aXR5X2NoZWNrKGNvbW1hbmRzLCBzaSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWFuZCAqKnF1ZXVlX2NvbW1hbmQoc3RydWN0IGNvbW1hbmQgKip0YWlsLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkJICAgICAgaW50IGxpbmVsZW4pCit7CisJc3RydWN0IG9iamVjdF9pZCBvbGRfb2lkLCBuZXdfb2lkOworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisJY29uc3QgY2hhciAqcmVmbmFtZTsKKwlpbnQgcmVmbGVuOworCWNvbnN0IGNoYXIgKnA7CisKKwlpZiAocGFyc2Vfb2lkX2hleChsaW5lLCAmb2xkX29pZCwgJnApIHx8CisJICAgICpwKysgIT0gJyAnIHx8CisJICAgIHBhcnNlX29pZF9oZXgocCwgJm5ld19vaWQsICZwKSB8fAorCSAgICAqcCsrICE9ICcgJykKKwkJZGllKCJwcm90b2NvbCBlcnJvcjogZXhwZWN0ZWQgb2xkL25ldy9yZWYsIGdvdCAnJXMnIiwgbGluZSk7CisKKwlyZWZuYW1lID0gcDsKKwlyZWZsZW4gPSBsaW5lbGVuIC0gKHAgLSBsaW5lKTsKKwlGTEVYX0FMTE9DX01FTShjbWQsIHJlZl9uYW1lLCByZWZuYW1lLCByZWZsZW4pOworCW9pZGNweSgmY21kLT5vbGRfb2lkLCAmb2xkX29pZCk7CisJb2lkY3B5KCZjbWQtPm5ld19vaWQsICZuZXdfb2lkKTsKKwkqdGFpbCA9IGNtZDsKKwlyZXR1cm4gJmNtZC0+bmV4dDsKK30KKworc3RhdGljIHZvaWQgcXVldWVfY29tbWFuZHNfZnJvbV9jZXJ0KHN0cnVjdCBjb21tYW5kICoqdGFpbCwKKwkJCQkgICAgIHN0cnVjdCBzdHJidWYgKnB1c2hfY2VydCkKK3sKKwljb25zdCBjaGFyICpib2MsICplb2M7CisKKwlpZiAoKnRhaWwpCisJCWRpZSgicHJvdG9jb2wgZXJyb3I6IGdvdCBib3RoIHB1c2ggY2VydGlmaWNhdGUgYW5kIHVuc2lnbmVkIGNvbW1hbmRzIik7CisKKwlib2MgPSBzdHJzdHIocHVzaF9jZXJ0LT5idWYsICJcblxuIik7CisJaWYgKCFib2MpCisJCWRpZSgibWFsZm9ybWVkIHB1c2ggY2VydGlmaWNhdGUgJS4qcyIsIDEwMCwgcHVzaF9jZXJ0LT5idWYpOworCWVsc2UKKwkJYm9jICs9IDI7CisJZW9jID0gcHVzaF9jZXJ0LT5idWYgKyBwYXJzZV9zaWduYXR1cmUocHVzaF9jZXJ0LT5idWYsIHB1c2hfY2VydC0+bGVuKTsKKworCXdoaWxlIChib2MgPCBlb2MpIHsKKwkJY29uc3QgY2hhciAqZW9sID0gbWVtY2hyKGJvYywgJ1xuJywgZW9jIC0gYm9jKTsKKwkJdGFpbCA9IHF1ZXVlX2NvbW1hbmQodGFpbCwgYm9jLCBlb2wgPyBlb2wgLSBib2MgOiBlb2MgLSBib2MpOworCQlib2MgPSBlb2wgPyBlb2wgKyAxIDogZW9jOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjb21tYW5kICpyZWFkX2hlYWRfaW5mbyhzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVhZGVyLAorCQkJCSAgICAgIHN0cnVjdCBvaWRfYXJyYXkgKnNoYWxsb3cpCit7CisJc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWFuZCAqKnAgPSAmY29tbWFuZHM7CisJZm9yICg7OykgeworCQlpbnQgbGluZWxlbjsKKworCQlpZiAocGFja2V0X3JlYWRlcl9yZWFkKHJlYWRlcikgIT0gUEFDS0VUX1JFQURfTk9STUFMKQorCQkJYnJlYWs7CisKKwkJaWYgKHJlYWRlci0+cGt0bGVuID4gOCAmJiBzdGFydHNfd2l0aChyZWFkZXItPmxpbmUsICJzaGFsbG93ICIpKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJCWlmIChnZXRfb2lkX2hleChyZWFkZXItPmxpbmUgKyA4LCAmb2lkKSkKKwkJCQlkaWUoInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGFsbG93IHNoYSwgZ290ICclcyciLAorCQkJCSAgICByZWFkZXItPmxpbmUgKyA4KTsKKwkJCW9pZF9hcnJheV9hcHBlbmQoc2hhbGxvdywgJm9pZCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWxpbmVsZW4gPSBzdHJsZW4ocmVhZGVyLT5saW5lKTsKKwkJaWYgKGxpbmVsZW4gPCByZWFkZXItPnBrdGxlbikgeworCQkJY29uc3QgY2hhciAqZmVhdHVyZV9saXN0ID0gcmVhZGVyLT5saW5lICsgbGluZWxlbiArIDE7CisJCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVfbGlzdCwgInJlcG9ydC1zdGF0dXMiKSkKKwkJCQlyZXBvcnRfc3RhdHVzID0gMTsKKwkJCWlmIChwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZV9saXN0LCAic2lkZS1iYW5kLTY0ayIpKQorCQkJCXVzZV9zaWRlYmFuZCA9IExBUkdFX1BBQ0tFVF9NQVg7CisJCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVfbGlzdCwgInF1aWV0IikpCisJCQkJcXVpZXQgPSAxOworCQkJaWYgKGFkdmVydGlzZV9hdG9taWNfcHVzaAorCQkJICAgICYmIHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlX2xpc3QsICJhdG9taWMiKSkKKwkJCQl1c2VfYXRvbWljID0gMTsKKwkJCWlmIChhZHZlcnRpc2VfcHVzaF9vcHRpb25zCisJCQkgICAgJiYgcGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVfbGlzdCwgInB1c2gtb3B0aW9ucyIpKQorCQkJCXVzZV9wdXNoX29wdGlvbnMgPSAxOworCQl9CisKKwkJaWYgKCFzdHJjbXAocmVhZGVyLT5saW5lLCAicHVzaC1jZXJ0IikpIHsKKwkJCWludCB0cnVlX2ZsdXNoID0gMDsKKwkJCWludCBzYXZlZF9vcHRpb25zID0gcmVhZGVyLT5vcHRpb25zOworCQkJcmVhZGVyLT5vcHRpb25zICY9IH5QQUNLRVRfUkVBRF9DSE9NUF9ORVdMSU5FOworCisJCQlmb3IgKDs7KSB7CisJCQkJcGFja2V0X3JlYWRlcl9yZWFkKHJlYWRlcik7CisJCQkJaWYgKHJlYWRlci0+c3RhdHVzID09IFBBQ0tFVF9SRUFEX0ZMVVNIKSB7CisJCQkJCXRydWVfZmx1c2ggPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKHJlYWRlci0+c3RhdHVzICE9IFBBQ0tFVF9SRUFEX05PUk1BTCkgeworCQkJCQlkaWUoInByb3RvY29sIGVycm9yOiBnb3QgYW4gdW5leHBlY3RlZCBwYWNrZXQiKTsKKwkJCQl9CisJCQkJaWYgKCFzdHJjbXAocmVhZGVyLT5saW5lLCAicHVzaC1jZXJ0LWVuZFxuIikpCisJCQkJCWJyZWFrOyAvKiBlbmQgb2YgY2VydCAqLworCQkJCXN0cmJ1Zl9hZGRzdHIoJnB1c2hfY2VydCwgcmVhZGVyLT5saW5lKTsKKwkJCX0KKwkJCXJlYWRlci0+b3B0aW9ucyA9IHNhdmVkX29wdGlvbnM7CisKKwkJCWlmICh0cnVlX2ZsdXNoKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKworCQlwID0gcXVldWVfY29tbWFuZChwLCByZWFkZXItPmxpbmUsIGxpbmVsZW4pOworCX0KKworCWlmIChwdXNoX2NlcnQubGVuKQorCQlxdWV1ZV9jb21tYW5kc19mcm9tX2NlcnQocCwgJnB1c2hfY2VydCk7CisKKwlyZXR1cm4gY29tbWFuZHM7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfcHVzaF9vcHRpb25zKHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZWFkZXIsCisJCQkgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm9wdGlvbnMpCit7CisJd2hpbGUgKDEpIHsKKwkJaWYgKHBhY2tldF9yZWFkZXJfcmVhZChyZWFkZXIpICE9IFBBQ0tFVF9SRUFEX05PUk1BTCkKKwkJCWJyZWFrOworCisJCXN0cmluZ19saXN0X2FwcGVuZChvcHRpb25zLCByZWFkZXItPmxpbmUpOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX3BhY2tfaGVhZGVyKHN0cnVjdCBwYWNrX2hlYWRlciAqaGRyKQoreworCXN3aXRjaCAocmVhZF9wYWNrX2hlYWRlcigwLCBoZHIpKSB7CisJY2FzZSBQSF9FUlJPUl9FT0Y6CisJCXJldHVybiAiZW9mIGJlZm9yZSBwYWNrIGhlYWRlciB3YXMgZnVsbHkgcmVhZCI7CisKKwljYXNlIFBIX0VSUk9SX1BBQ0tfU0lHTkFUVVJFOgorCQlyZXR1cm4gInByb3RvY29sIGVycm9yIChwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCBkZXRlY3RlZCkiOworCisJY2FzZSBQSF9FUlJPUl9QUk9UT0NPTDoKKwkJcmV0dXJuICJwcm90b2NvbCBlcnJvciAocGFjayB2ZXJzaW9uIHVuc3VwcG9ydGVkKSI7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gInVua25vd24gZXJyb3IgaW4gcGFyc2VfcGFja19oZWFkZXIiOworCisJY2FzZSAwOgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYWNrX2xvY2tmaWxlOworCitzdGF0aWMgdm9pZCBwdXNoX2hlYWRlcl9hcmcoc3RydWN0IGFyZ3ZfYXJyYXkgKmFyZ3MsIHN0cnVjdCBwYWNrX2hlYWRlciAqaGRyKQoreworCWFyZ3ZfYXJyYXlfcHVzaGYoYXJncywgIi0tcGFja19oZWFkZXI9JSJQUkl1MzIiLCUiUFJJdTMyLAorCQkJbnRvaGwoaGRyLT5oZHJfdmVyc2lvbiksIG50b2hsKGhkci0+aGRyX2VudHJpZXMpKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnVucGFjayhpbnQgZXJyX2ZkLCBzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSkKK3sKKwlzdHJ1Y3QgcGFja19oZWFkZXIgaGRyOworCWNvbnN0IGNoYXIgKmhkcl9lcnI7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlpbnQgZnNja19vYmplY3RzID0gKHJlY2VpdmVfZnNja19vYmplY3RzID49IDAKKwkJCSAgICA/IHJlY2VpdmVfZnNja19vYmplY3RzCisJCQkgICAgOiB0cmFuc2Zlcl9mc2NrX29iamVjdHMgPj0gMAorCQkJICAgID8gdHJhbnNmZXJfZnNja19vYmplY3RzCisJCQkgICAgOiAwKTsKKworCWhkcl9lcnIgPSBwYXJzZV9wYWNrX2hlYWRlcigmaGRyKTsKKwlpZiAoaGRyX2VycikgeworCQlpZiAoZXJyX2ZkID4gMCkKKwkJCWNsb3NlKGVycl9mZCk7CisJCXJldHVybiBoZHJfZXJyOworCX0KKworCWlmIChzaS0+bnJfb3VycyB8fCBzaS0+bnJfdGhlaXJzKSB7CisJCWFsdF9zaGFsbG93X2ZpbGUgPSBzZXR1cF90ZW1wb3Jhcnlfc2hhbGxvdyhzaS0+c2hhbGxvdyk7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgIi0tc2hhbGxvdy1maWxlIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgYWx0X3NoYWxsb3dfZmlsZSk7CisJfQorCisJdG1wX29iamRpciA9IHRtcF9vYmpkaXJfY3JlYXRlKCk7CisJaWYgKCF0bXBfb2JqZGlyKSB7CisJCWlmIChlcnJfZmQgPiAwKQorCQkJY2xvc2UoZXJyX2ZkKTsKKwkJcmV0dXJuICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBvYmplY3QgZGlyZWN0b3J5IjsKKwl9CisJY2hpbGQuZW52ID0gdG1wX29iamRpcl9lbnYodG1wX29iamRpcik7CisKKwkvKgorCSAqIE5vcm1hbGx5IHdlIGp1c3QgcGFzcyB0aGUgdG1wX29iamRpciBlbnZpcm9ubWVudCB0byB0aGUgY2hpbGQKKwkgKiBwcm9jZXNzZXMgdGhhdCBkbyB0aGUgaGVhdnkgbGlmdGluZywgYnV0IHdlIG1heSBuZWVkIHRvIHNlZSB0aGVzZQorCSAqIG9iamVjdHMgb3Vyc2VsdmVzIHRvIHNldCB1cCBzaGFsbG93IGluZm9ybWF0aW9uLgorCSAqLworCXRtcF9vYmpkaXJfYWRkX2FzX2FsdGVybmF0ZSh0bXBfb2JqZGlyKTsKKworCWlmIChudG9obChoZHIuaGRyX2VudHJpZXMpIDwgdW5wYWNrX2xpbWl0KSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgInVucGFjay1vYmplY3RzIik7CisJCXB1c2hfaGVhZGVyX2FyZygmY2hpbGQuYXJncywgJmhkcik7CisJCWlmIChxdWlldCkKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgIi1xIik7CisJCWlmIChmc2NrX29iamVjdHMpCisJCQlhcmd2X2FycmF5X3B1c2hmKCZjaGlsZC5hcmdzLCAiLS1zdHJpY3QlcyIsCisJCQkJZnNja19tc2dfdHlwZXMuYnVmKTsKKwkJaWYgKG1heF9pbnB1dF9zaXplKQorCQkJYXJndl9hcnJheV9wdXNoZigmY2hpbGQuYXJncywgIi0tbWF4LWlucHV0LXNpemU9JSJQUkl1TUFYLAorCQkJCSh1aW50bWF4X3QpbWF4X2lucHV0X3NpemUpOworCQljaGlsZC5ub19zdGRvdXQgPSAxOworCQljaGlsZC5lcnIgPSBlcnJfZmQ7CisJCWNoaWxkLmdpdF9jbWQgPSAxOworCQlzdGF0dXMgPSBydW5fY29tbWFuZCgmY2hpbGQpOworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJuICJ1bnBhY2stb2JqZWN0cyBhYm5vcm1hbCBleGl0IjsKKwl9IGVsc2UgeworCQljaGFyIGhvc3RuYW1lW0hPU1RfTkFNRV9NQVggKyAxXTsKKworCQlhcmd2X2FycmF5X3B1c2hsKCZjaGlsZC5hcmdzLCAiaW5kZXgtcGFjayIsICItLXN0ZGluIiwgTlVMTCk7CisJCXB1c2hfaGVhZGVyX2FyZygmY2hpbGQuYXJncywgJmhkcik7CisKKwkJaWYgKHhnZXRob3N0bmFtZShob3N0bmFtZSwgc2l6ZW9mKGhvc3RuYW1lKSkpCisJCQl4c25wcmludGYoaG9zdG5hbWUsIHNpemVvZihob3N0bmFtZSksICJsb2NhbGhvc3QiKTsKKwkJYXJndl9hcnJheV9wdXNoZigmY2hpbGQuYXJncywKKwkJCQkgIi0ta2VlcD1yZWNlaXZlLXBhY2sgJSJQUkl1TUFYIiBvbiAlcyIsCisJCQkJICh1aW50bWF4X3QpZ2V0cGlkKCksCisJCQkJIGhvc3RuYW1lKTsKKworCQlpZiAoIXF1aWV0ICYmIGVycl9mZCkKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgIi0tc2hvdy1yZXNvbHZpbmctcHJvZ3Jlc3MiKTsKKwkJaWYgKHVzZV9zaWRlYmFuZCkKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgIi0tcmVwb3J0LWVuZC1vZi1pbnB1dCIpOworCQlpZiAoZnNja19vYmplY3RzKQorCQkJYXJndl9hcnJheV9wdXNoZigmY2hpbGQuYXJncywgIi0tc3RyaWN0JXMiLAorCQkJCWZzY2tfbXNnX3R5cGVzLmJ1Zik7CisJCWlmICghcmVqZWN0X3RoaW4pCisJCQlhcmd2X2FycmF5X3B1c2goJmNoaWxkLmFyZ3MsICItLWZpeC10aGluIik7CisJCWlmIChtYXhfaW5wdXRfc2l6ZSkKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNoaWxkLmFyZ3MsICItLW1heC1pbnB1dC1zaXplPSUiUFJJdU1BWCwKKwkJCQkodWludG1heF90KW1heF9pbnB1dF9zaXplKTsKKwkJY2hpbGQub3V0ID0gLTE7CisJCWNoaWxkLmVyciA9IGVycl9mZDsKKwkJY2hpbGQuZ2l0X2NtZCA9IDE7CisJCXN0YXR1cyA9IHN0YXJ0X2NvbW1hbmQoJmNoaWxkKTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiAiaW5kZXgtcGFjayBmb3JrIGZhaWxlZCI7CisJCXBhY2tfbG9ja2ZpbGUgPSBpbmRleF9wYWNrX2xvY2tmaWxlKGNoaWxkLm91dCk7CisJCWNsb3NlKGNoaWxkLm91dCk7CisJCXN0YXR1cyA9IGZpbmlzaF9jb21tYW5kKCZjaGlsZCk7CisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gImluZGV4LXBhY2sgYWJub3JtYWwgZXhpdCI7CisJCXJlcHJlcGFyZV9wYWNrZWRfZ2l0KHRoZV9yZXBvc2l0b3J5KTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp1bnBhY2tfd2l0aF9zaWRlYmFuZChzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSkKK3sKKwlzdHJ1Y3QgYXN5bmMgbXV4ZXI7CisJY29uc3QgY2hhciAqcmV0OworCisJaWYgKCF1c2Vfc2lkZWJhbmQpCisJCXJldHVybiB1bnBhY2soMCwgc2kpOworCisJdXNlX2tlZXBhbGl2ZSA9IEtFRVBBTElWRV9BRlRFUl9OVUw7CisJbWVtc2V0KCZtdXhlciwgMCwgc2l6ZW9mKG11eGVyKSk7CisJbXV4ZXIucHJvYyA9IGNvcHlfdG9fc2lkZWJhbmQ7CisJbXV4ZXIuaW4gPSAtMTsKKwlpZiAoc3RhcnRfYXN5bmMoJm11eGVyKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXQgPSB1bnBhY2sobXV4ZXIuaW4sIHNpKTsKKworCWZpbmlzaF9hc3luYygmbXV4ZXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfc2hhbGxvd191cGRhdGUoc3RydWN0IHNoYWxsb3dfaW5mbyAqc2kpCit7CisJaW50IGksIGosIGssIGJpdG1hcF9zaXplID0gRElWX1JPVU5EX1VQKHNpLT5yZWYtPm5yLCAzMik7CisKKwlBTExPQ19BUlJBWShzaS0+dXNlZF9zaGFsbG93LCBzaS0+c2hhbGxvdy0+bnIpOworCWFzc2lnbl9zaGFsbG93X2NvbW1pdHNfdG9fcmVmcyhzaSwgc2ktPnVzZWRfc2hhbGxvdywgTlVMTCk7CisKKwlzaS0+bmVlZF9yZWFjaGFiaWxpdHlfdGVzdCA9CisJCXhjYWxsb2Moc2ktPnNoYWxsb3ctPm5yLCBzaXplb2YoKnNpLT5uZWVkX3JlYWNoYWJpbGl0eV90ZXN0KSk7CisJc2ktPnJlYWNoYWJsZSA9CisJCXhjYWxsb2Moc2ktPnNoYWxsb3ctPm5yLCBzaXplb2YoKnNpLT5yZWFjaGFibGUpKTsKKwlzaS0+c2hhbGxvd19yZWYgPSB4Y2FsbG9jKHNpLT5yZWYtPm5yLCBzaXplb2YoKnNpLT5zaGFsbG93X3JlZikpOworCisJZm9yIChpID0gMDsgaSA8IHNpLT5ucl9vdXJzOyBpKyspCisJCXNpLT5uZWVkX3JlYWNoYWJpbGl0eV90ZXN0W3NpLT5vdXJzW2ldXSA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2ktPnNoYWxsb3ctPm5yOyBpKyspIHsKKwkJaWYgKCFzaS0+dXNlZF9zaGFsbG93W2ldKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IDA7IGogPCBiaXRtYXBfc2l6ZTsgaisrKSB7CisJCQlpZiAoIXNpLT51c2VkX3NoYWxsb3dbaV1bal0pCisJCQkJY29udGludWU7CisJCQlzaS0+bmVlZF9yZWFjaGFiaWxpdHlfdGVzdFtpXSsrOworCQkJZm9yIChrID0gMDsgayA8IDMyOyBrKyspCisJCQkJaWYgKHNpLT51c2VkX3NoYWxsb3dbaV1bal0gJiAoMVUgPDwgaykpCisJCQkJCXNpLT5zaGFsbG93X3JlZltqICogMzIgKyBrXSsrOworCQl9CisKKwkJLyoKKwkJICogdHJ1ZSBmb3IgdGhvc2UgYXNzb2NpYXRlZCB3aXRoIHNvbWUgcmVmcyBhbmQgYmVsb25nCisJCSAqIGluICJvdXJzIiBsaXN0IGFrYSAic3RlcCA3IG5vdCBkb25lIHlldCIKKwkJICovCisJCXNpLT5uZWVkX3JlYWNoYWJpbGl0eV90ZXN0W2ldID0KKwkJCXNpLT5uZWVkX3JlYWNoYWJpbGl0eV90ZXN0W2ldID4gMTsKKwl9CisKKwkvKgorCSAqIGtlZXAgaG9va3MgaGFwcHkgYnkgZm9yY2luZyBhIHRlbXBvcmFyeSBzaGFsbG93IGZpbGUgdmlhCisJICogZW52IHZhcmlhYmxlIGJlY2F1c2Ugd2UgY2FuJ3QgYWRkIC0tc2hhbGxvdy1maWxlIHRvIGV2ZXJ5CisJICogY29tbWFuZC4gY2hlY2tfY29ubmVjdGVkKCkgd2lsbCBiZSBkb25lIHdpdGgKKwkgKiB0cnVlIC5naXQvc2hhbGxvdyB0aG91Z2guCisJICovCisJc2V0ZW52KEdJVF9TSEFMTE9XX0ZJTEVfRU5WSVJPTk1FTlQsIGFsdF9zaGFsbG93X2ZpbGUsIDEpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfc2hhbGxvd19pbmZvKHN0cnVjdCBjb21tYW5kICpjb21tYW5kcywKKwkJCQlzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSwKKwkJCQlzdHJ1Y3Qgb2lkX2FycmF5ICpyZWYpCit7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwlpbnQgKnJlZl9zdGF0dXM7CisJcmVtb3ZlX25vbmV4aXN0ZW50X3RoZWlyc19zaGFsbG93KHNpKTsKKwlpZiAoIXNpLT5ucl9vdXJzICYmICFzaS0+bnJfdGhlaXJzKSB7CisJCXNoYWxsb3dfdXBkYXRlID0gMDsKKwkJcmV0dXJuOworCX0KKworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCWlmIChpc19udWxsX29pZCgmY21kLT5uZXdfb2lkKSkKKwkJCWNvbnRpbnVlOworCQlvaWRfYXJyYXlfYXBwZW5kKHJlZiwgJmNtZC0+bmV3X29pZCk7CisJCWNtZC0+aW5kZXggPSByZWYtPm5yIC0gMTsKKwl9CisJc2ktPnJlZiA9IHJlZjsKKworCWlmIChzaGFsbG93X3VwZGF0ZSkgeworCQlwcmVwYXJlX3NoYWxsb3dfdXBkYXRlKHNpKTsKKwkJcmV0dXJuOworCX0KKworCUFMTE9DX0FSUkFZKHJlZl9zdGF0dXMsIHJlZi0+bnIpOworCWFzc2lnbl9zaGFsbG93X2NvbW1pdHNfdG9fcmVmcyhzaSwgTlVMTCwgcmVmX3N0YXR1cyk7CisJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKGlzX251bGxfb2lkKCZjbWQtPm5ld19vaWQpKQorCQkJY29udGludWU7CisJCWlmIChyZWZfc3RhdHVzW2NtZC0+aW5kZXhdKSB7CisJCQljbWQtPmVycm9yX3N0cmluZyA9ICJzaGFsbG93IHVwZGF0ZSBub3QgYWxsb3dlZCI7CisJCQljbWQtPnNraXBfdXBkYXRlID0gMTsKKwkJfQorCX0KKwlmcmVlKHJlZl9zdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCByZXBvcnQoc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzLCBjb25zdCBjaGFyICp1bnBhY2tfc3RhdHVzKQoreworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXBhY2tldF9idWZfd3JpdGUoJmJ1ZiwgInVucGFjayAlc1xuIiwKKwkJCSB1bnBhY2tfc3RhdHVzID8gdW5wYWNrX3N0YXR1cyA6ICJvayIpOworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCWlmICghY21kLT5lcnJvcl9zdHJpbmcpCisJCQlwYWNrZXRfYnVmX3dyaXRlKCZidWYsICJvayAlc1xuIiwKKwkJCQkJIGNtZC0+cmVmX25hbWUpOworCQllbHNlCisJCQlwYWNrZXRfYnVmX3dyaXRlKCZidWYsICJuZyAlcyAlc1xuIiwKKwkJCQkJIGNtZC0+cmVmX25hbWUsIGNtZC0+ZXJyb3Jfc3RyaW5nKTsKKwl9CisJcGFja2V0X2J1Zl9mbHVzaCgmYnVmKTsKKworCWlmICh1c2Vfc2lkZWJhbmQpCisJCXNlbmRfc2lkZWJhbmQoMSwgMSwgYnVmLmJ1ZiwgYnVmLmxlbiwgdXNlX3NpZGViYW5kKTsKKwllbHNlCisJCXdyaXRlX29yX2RpZSgxLCBidWYuYnVmLCBidWYubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIGludCBkZWxldGVfb25seShzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMpCit7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlpZiAoIWlzX251bGxfb2lkKCZjbWQtPm5ld19vaWQpKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitpbnQgY21kX3JlY2VpdmVfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgYWR2ZXJ0aXNlX3JlZnMgPSAwOworCXN0cnVjdCBjb21tYW5kICpjb21tYW5kczsKKwlzdHJ1Y3Qgb2lkX2FycmF5IHNoYWxsb3cgPSBPSURfQVJSQVlfSU5JVDsKKwlzdHJ1Y3Qgb2lkX2FycmF5IHJlZiA9IE9JRF9BUlJBWV9JTklUOworCXN0cnVjdCBzaGFsbG93X2luZm8gc2k7CisJc3RydWN0IHBhY2tldF9yZWFkZXIgcmVhZGVyOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygicXVpZXQiKSksCisJCU9QVF9ISURERU5fQk9PTCgwLCAic3RhdGVsZXNzLXJwYyIsICZzdGF0ZWxlc3NfcnBjLCBOVUxMKSwKKwkJT1BUX0hJRERFTl9CT09MKDAsICJhZHZlcnRpc2UtcmVmcyIsICZhZHZlcnRpc2VfcmVmcywgTlVMTCksCisJCU9QVF9ISURERU5fQk9PTCgwLCAicmVqZWN0LXRoaW4tcGFjay1mb3ItdGVzdGluZyIsICZyZWplY3RfdGhpbiwgTlVMTCksCisJCU9QVF9FTkQoKQorCX07CisKKwlwYWNrZXRfdHJhY2VfaWRlbnRpdHkoInJlY2VpdmUtcGFjayIpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCByZWNlaXZlX3BhY2tfdXNhZ2UsIDApOworCisJaWYgKGFyZ2MgPiAxKQorCQl1c2FnZV9tc2dfb3B0KF8oIlRvbyBtYW55IGFyZ3VtZW50cy4iKSwgcmVjZWl2ZV9wYWNrX3VzYWdlLCBvcHRpb25zKTsKKwlpZiAoYXJnYyA9PSAwKQorCQl1c2FnZV9tc2dfb3B0KF8oIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIiksIHJlY2VpdmVfcGFja191c2FnZSwgb3B0aW9ucyk7CisKKwlzZXJ2aWNlX2RpciA9IGFyZ3ZbMF07CisKKwlzZXR1cF9wYXRoKCk7CisKKwlpZiAoIWVudGVyX3JlcG8oc2VydmljZV9kaXIsIDApKQorCQlkaWUoIiclcycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgZ2l0IHJlcG9zaXRvcnkiLCBzZXJ2aWNlX2Rpcik7CisKKwlnaXRfY29uZmlnKHJlY2VpdmVfcGFja19jb25maWcsIE5VTEwpOworCWlmIChjZXJ0X25vbmNlX3NlZWQpCisJCXB1c2hfY2VydF9ub25jZSA9IHByZXBhcmVfcHVzaF9jZXJ0X25vbmNlKHNlcnZpY2VfZGlyLCB0aW1lKE5VTEwpKTsKKworCWlmICgwIDw9IHRyYW5zZmVyX3VucGFja19saW1pdCkKKwkJdW5wYWNrX2xpbWl0ID0gdHJhbnNmZXJfdW5wYWNrX2xpbWl0OworCWVsc2UgaWYgKDAgPD0gcmVjZWl2ZV91bnBhY2tfbGltaXQpCisJCXVucGFja19saW1pdCA9IHJlY2VpdmVfdW5wYWNrX2xpbWl0OworCisJc3dpdGNoIChkZXRlcm1pbmVfcHJvdG9jb2xfdmVyc2lvbl9zZXJ2ZXIoKSkgeworCWNhc2UgcHJvdG9jb2xfdjI6CisJCS8qCisJCSAqIHB1c2ggc3VwcG9ydCBmb3IgcHJvdG9jb2wgdjIgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIHlldCwKKwkJICogc28gaWdub3JlIHRoZSByZXF1ZXN0IHRvIHVzZSB2MiBhbmQgZmFsbGJhY2sgdG8gdXNpbmcgdjAuCisJCSAqLworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3YxOgorCQkvKgorCQkgKiB2MSBpcyBqdXN0IHRoZSBvcmlnaW5hbCBwcm90b2NvbCB3aXRoIGEgdmVyc2lvbiBzdHJpbmcsCisJCSAqIHNvIGp1c3QgZmFsbCB0aHJvdWdoIGFmdGVyIHdyaXRpbmcgdGhlIHZlcnNpb24gc3RyaW5nLgorCQkgKi8KKwkJaWYgKGFkdmVydGlzZV9yZWZzIHx8ICFzdGF0ZWxlc3NfcnBjKQorCQkJcGFja2V0X3dyaXRlX2ZtdCgxLCAidmVyc2lvbiAxXG4iKTsKKworCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgcHJvdG9jb2xfdjA6CisJCWJyZWFrOworCWNhc2UgcHJvdG9jb2xfdW5rbm93bl92ZXJzaW9uOgorCQlCVUcoInVua25vd24gcHJvdG9jb2wgdmVyc2lvbiIpOworCX0KKworCWlmIChhZHZlcnRpc2VfcmVmcyB8fCAhc3RhdGVsZXNzX3JwYykgeworCQl3cml0ZV9oZWFkX2luZm8oKTsKKwl9CisJaWYgKGFkdmVydGlzZV9yZWZzKQorCQlyZXR1cm4gMDsKKworCXBhY2tldF9yZWFkZXJfaW5pdCgmcmVhZGVyLCAwLCBOVUxMLCAwLAorCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSB8CisJCQkgICBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCk7CisKKwlpZiAoKGNvbW1hbmRzID0gcmVhZF9oZWFkX2luZm8oJnJlYWRlciwgJnNoYWxsb3cpKSAhPSBOVUxMKSB7CisJCWNvbnN0IGNoYXIgKnVucGFja19zdGF0dXMgPSBOVUxMOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcHVzaF9vcHRpb25zID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwkJaWYgKHVzZV9wdXNoX29wdGlvbnMpCisJCQlyZWFkX3B1c2hfb3B0aW9ucygmcmVhZGVyLCAmcHVzaF9vcHRpb25zKTsKKwkJaWYgKCFjaGVja19jZXJ0X3B1c2hfb3B0aW9ucygmcHVzaF9vcHRpb25zKSkgeworCQkJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwkJCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KQorCQkJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gImluY29uc2lzdGVudCBwdXNoIG9wdGlvbnMiOworCQl9CisKKwkJcHJlcGFyZV9zaGFsbG93X2luZm8oJnNpLCAmc2hhbGxvdyk7CisJCWlmICghc2kubnJfb3VycyAmJiAhc2kubnJfdGhlaXJzKQorCQkJc2hhbGxvd191cGRhdGUgPSAwOworCQlpZiAoIWRlbGV0ZV9vbmx5KGNvbW1hbmRzKSkgeworCQkJdW5wYWNrX3N0YXR1cyA9IHVucGFja193aXRoX3NpZGViYW5kKCZzaSk7CisJCQl1cGRhdGVfc2hhbGxvd19pbmZvKGNvbW1hbmRzLCAmc2ksICZyZWYpOworCQl9CisJCXVzZV9rZWVwYWxpdmUgPSBLRUVQQUxJVkVfQUxXQVlTOworCQlleGVjdXRlX2NvbW1hbmRzKGNvbW1hbmRzLCB1bnBhY2tfc3RhdHVzLCAmc2ksCisJCQkJICZwdXNoX29wdGlvbnMpOworCQlpZiAocGFja19sb2NrZmlsZSkKKwkJCXVubGlua19vcl93YXJuKHBhY2tfbG9ja2ZpbGUpOworCQlpZiAocmVwb3J0X3N0YXR1cykKKwkJCXJlcG9ydChjb21tYW5kcywgdW5wYWNrX3N0YXR1cyk7CisJCXJ1bl9yZWNlaXZlX2hvb2soY29tbWFuZHMsICJwb3N0LXJlY2VpdmUiLCAxLAorCQkJCSAmcHVzaF9vcHRpb25zKTsKKwkJcnVuX3VwZGF0ZV9wb3N0X2hvb2soY29tbWFuZHMpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmcHVzaF9vcHRpb25zLCAwKTsKKwkJaWYgKGF1dG9fZ2MpIHsKKwkJCWNvbnN0IGNoYXIgKmFyZ3ZfZ2NfYXV0b1tdID0geworCQkJCSJnYyIsICItLWF1dG8iLCAiLS1xdWlldCIsIE5VTEwsCisJCQl9OworCQkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcHJvYyA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQkJcHJvYy5ub19zdGRpbiA9IDE7CisJCQlwcm9jLnN0ZG91dF90b19zdGRlcnIgPSAxOworCQkJcHJvYy5lcnIgPSB1c2Vfc2lkZWJhbmQgPyAtMSA6IDA7CisJCQlwcm9jLmdpdF9jbWQgPSAxOworCQkJcHJvYy5hcmd2ID0gYXJndl9nY19hdXRvOworCisJCQljbG9zZV9vYmplY3Rfc3RvcmUodGhlX3JlcG9zaXRvcnktPm9iamVjdHMpOworCQkJaWYgKCFzdGFydF9jb21tYW5kKCZwcm9jKSkgeworCQkJCWlmICh1c2Vfc2lkZWJhbmQpCisJCQkJCWNvcHlfdG9fc2lkZWJhbmQocHJvYy5lcnIsIC0xLCBOVUxMKTsKKwkJCQlmaW5pc2hfY29tbWFuZCgmcHJvYyk7CisJCQl9CisJCX0KKwkJaWYgKGF1dG9fdXBkYXRlX3NlcnZlcl9pbmZvKQorCQkJdXBkYXRlX3NlcnZlcl9pbmZvKDApOworCQljbGVhcl9zaGFsbG93X2luZm8oJnNpKTsKKwl9CisJaWYgKHVzZV9zaWRlYmFuZCkKKwkJcGFja2V0X2ZsdXNoKDEpOworCW9pZF9hcnJheV9jbGVhcigmc2hhbGxvdyk7CisJb2lkX2FycmF5X2NsZWFyKCZyZWYpOworCWZyZWUoKHZvaWQgKilwdXNoX2NlcnRfbm9uY2UpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZWZsb2cuYyBiL2J1aWx0aW4vcmVmbG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlY2Y2ZAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmVmbG9nLmMKQEAgLTAsMCArMSw3ODkgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInJlYWNoYWJsZS5oIgorI2luY2x1ZGUgIndvcmt0cmVlLmgiCisKKy8qIE5FRURTV09SSzogc3dpdGNoIHRvIHVzaW5nIHBhcnNlX29wdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHJlZmxvZ19leHBpcmVfdXNhZ2VbXSA9CitOXygiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0aW1lPl0gIgorICAgIlstLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT5dICIKKyAgICJbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSAiCisgICAiWy0tdmVyYm9zZV0gWy0tYWxsXSA8cmVmcz4uLi4iKTsKK3N0YXRpYyBjb25zdCBjaGFyIHJlZmxvZ19kZWxldGVfdXNhZ2VbXSA9CitOXygiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSAiCisgICAiWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSA8cmVmcz4uLi4iKTsKK3N0YXRpYyBjb25zdCBjaGFyIHJlZmxvZ19leGlzdHNfdXNhZ2VbXSA9CitOXygiZ2l0IHJlZmxvZyBleGlzdHMgPHJlZj4iKTsKKworc3RhdGljIHRpbWVzdGFtcF90IGRlZmF1bHRfcmVmbG9nX2V4cGlyZTsKK3N0YXRpYyB0aW1lc3RhbXBfdCBkZWZhdWx0X3JlZmxvZ19leHBpcmVfdW5yZWFjaGFibGU7CisKK3N0cnVjdCBjbWRfcmVmbG9nX2V4cGlyZV9jYiB7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJaW50IHN0YWxlZml4OworCXRpbWVzdGFtcF90IGV4cGlyZV90b3RhbDsKKwl0aW1lc3RhbXBfdCBleHBpcmVfdW5yZWFjaGFibGU7CisJaW50IHJlY25vOworfTsKKworc3RydWN0IGV4cGlyZV9yZWZsb2dfcG9saWN5X2NiIHsKKwllbnVtIHsKKwkJVUVfTk9STUFMLAorCQlVRV9BTFdBWVMsCisJCVVFX0hFQUQKKwl9IHVucmVhY2hhYmxlX2V4cGlyZV9raW5kOworCXN0cnVjdCBjb21taXRfbGlzdCAqbWFya19saXN0OworCXVuc2lnbmVkIGxvbmcgbWFya19saW1pdDsKKwlzdHJ1Y3QgY21kX3JlZmxvZ19leHBpcmVfY2IgY21kOworCXN0cnVjdCBjb21taXQgKnRpcF9jb21taXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICp0aXBzOworfTsKKworc3RydWN0IGNvbGxlY3RlZF9yZWZsb2cgeworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNoYXIgcmVmbG9nW0ZMRVhfQVJSQVldOworfTsKKworc3RydWN0IGNvbGxlY3RfcmVmbG9nX2NiIHsKKwlzdHJ1Y3QgY29sbGVjdGVkX3JlZmxvZyAqKmU7CisJaW50IGFsbG9jOworCWludCBucjsKKwlzdHJ1Y3Qgd29ya3RyZWUgKnd0OworfTsKKworLyogUmVtZW1iZXIgdG8gdXBkYXRlIG9iamVjdCBmbGFnIGFsbG9jYXRpb24gaW4gb2JqZWN0LmggKi8KKyNkZWZpbmUgSU5DT01QTEVURQkoMXU8PDEwKQorI2RlZmluZSBTVFVEWUlORwkoMXU8PDExKQorI2RlZmluZSBSRUFDSEFCTEUJKDF1PDwxMikKKworc3RhdGljIGludCB0cmVlX2lzX2NvbXBsZXRlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJaW50IGNvbXBsZXRlOworCXN0cnVjdCB0cmVlICp0cmVlOworCisJdHJlZSA9IGxvb2t1cF90cmVlKHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCWlmICghdHJlZSkKKwkJcmV0dXJuIDA7CisJaWYgKHRyZWUtPm9iamVjdC5mbGFncyAmIFNFRU4pCisJCXJldHVybiAxOworCWlmICh0cmVlLT5vYmplY3QuZmxhZ3MgJiBJTkNPTVBMRVRFKQorCQlyZXR1cm4gMDsKKworCWlmICghdHJlZS0+YnVmZmVyKSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQl2b2lkICpkYXRhID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCAmc2l6ZSk7CisJCWlmICghZGF0YSkgeworCQkJdHJlZS0+b2JqZWN0LmZsYWdzIHw9IElOQ09NUExFVEU7CisJCQlyZXR1cm4gMDsKKwkJfQorCQl0cmVlLT5idWZmZXIgPSBkYXRhOworCQl0cmVlLT5zaXplID0gc2l6ZTsKKwl9CisJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisJY29tcGxldGUgPSAxOworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CisJCWlmICghaGFzX29iamVjdF9maWxlKCZlbnRyeS5vaWQpIHx8CisJCSAgICAoU19JU0RJUihlbnRyeS5tb2RlKSAmJiAhdHJlZV9pc19jb21wbGV0ZSgmZW50cnkub2lkKSkpIHsKKwkJCXRyZWUtPm9iamVjdC5mbGFncyB8PSBJTkNPTVBMRVRFOworCQkJY29tcGxldGUgPSAwOworCQl9CisJfQorCWZyZWVfdHJlZV9idWZmZXIodHJlZSk7CisKKwlpZiAoY29tcGxldGUpCisJCXRyZWUtPm9iamVjdC5mbGFncyB8PSBTRUVOOworCXJldHVybiBjb21wbGV0ZTsKK30KKworc3RhdGljIGludCBjb21taXRfaXNfY29tcGxldGUoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBvYmplY3RfYXJyYXkgc3R1ZHk7CisJc3RydWN0IG9iamVjdF9hcnJheSBmb3VuZDsKKwlpbnQgaXNfaW5jb21wbGV0ZSA9IDA7CisJaW50IGk7CisKKwkvKiBlYXJseSByZXR1cm4gKi8KKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTRUVOKQorCQlyZXR1cm4gMTsKKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBJTkNPTVBMRVRFKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIEZpbmQgYWxsIGNvbW1pdHMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBhcmUgbm90IG1hcmtlZCBhcworCSAqIFNFRU4uICBUaGVuIG1ha2Ugc3VyZSB0aGUgdHJlZXMgYW5kIGJsb2JzIGNvbnRhaW5lZCBhcmUKKwkgKiBjb21wbGV0ZS4gIEFmdGVyIHRoYXQsIG1hcmsgdGhlc2UgY29tbWl0cyBhbHNvIGFzIFNFRU4uCisJICogSWYgc29tZSBvZiB0aGUgb2JqZWN0cyB0aGF0IGFyZSBuZWVkZWQgdG8gY29tcGxldGUgdGhpcworCSAqIGNvbW1pdCBhcmUgbWlzc2luZywgbWFyayB0aGlzIGNvbW1pdCBhcyBJTkNPTVBMRVRFLgorCSAqLworCW1lbXNldCgmc3R1ZHksIDAsIHNpemVvZihzdHVkeSkpOworCW1lbXNldCgmZm91bmQsIDAsIHNpemVvZihmb3VuZCkpOworCWFkZF9vYmplY3RfYXJyYXkoJmNvbW1pdC0+b2JqZWN0LCBOVUxMLCAmc3R1ZHkpOworCWFkZF9vYmplY3RfYXJyYXkoJmNvbW1pdC0+b2JqZWN0LCBOVUxMLCAmZm91bmQpOworCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFNUVURZSU5HOworCXdoaWxlIChzdHVkeS5ucikgeworCQlzdHJ1Y3QgY29tbWl0ICpjOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudDsKKworCQljID0gKHN0cnVjdCBjb21taXQgKilvYmplY3RfYXJyYXlfcG9wKCZzdHVkeSk7CisJCWlmICghYy0+b2JqZWN0LnBhcnNlZCAmJiAhcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmYy0+b2JqZWN0Lm9pZCkpCisJCQljLT5vYmplY3QuZmxhZ3MgfD0gSU5DT01QTEVURTsKKworCQlpZiAoYy0+b2JqZWN0LmZsYWdzICYgSU5DT01QTEVURSkgeworCQkJaXNfaW5jb21wbGV0ZSA9IDE7CisJCQlicmVhazsKKwkJfQorCQllbHNlIGlmIChjLT5vYmplY3QuZmxhZ3MgJiBTRUVOKQorCQkJY29udGludWU7CisJCWZvciAocGFyZW50ID0gYy0+cGFyZW50czsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpIHsKKwkJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnQtPml0ZW07CisJCQlpZiAocC0+b2JqZWN0LmZsYWdzICYgU1RVRFlJTkcpCisJCQkJY29udGludWU7CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gU1RVRFlJTkc7CisJCQlhZGRfb2JqZWN0X2FycmF5KCZwLT5vYmplY3QsIE5VTEwsICZzdHVkeSk7CisJCQlhZGRfb2JqZWN0X2FycmF5KCZwLT5vYmplY3QsIE5VTEwsICZmb3VuZCk7CisJCX0KKwl9CisJaWYgKCFpc19pbmNvbXBsZXRlKSB7CisJCS8qCisJCSAqIG1ha2Ugc3VyZSBhbGwgY29tbWl0cyBpbiAiZm91bmQiIGFycmF5IGhhdmUgYWxsIHRoZQorCQkgKiBuZWNlc3Nhcnkgb2JqZWN0cy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBmb3VuZC5ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpjID0KKwkJCQkoc3RydWN0IGNvbW1pdCAqKWZvdW5kLm9iamVjdHNbaV0uaXRlbTsKKwkJCWlmICghdHJlZV9pc19jb21wbGV0ZShnZXRfY29tbWl0X3RyZWVfb2lkKGMpKSkgeworCQkJCWlzX2luY29tcGxldGUgPSAxOworCQkJCWMtPm9iamVjdC5mbGFncyB8PSBJTkNPTVBMRVRFOworCQkJfQorCQl9CisJCWlmICghaXNfaW5jb21wbGV0ZSkgeworCQkJLyogbWFyayBhbGwgZm91bmQgY29tbWl0cyBhcyBjb21wbGV0ZSwgaW93IFNFRU4gKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBmb3VuZC5ucjsgaSsrKQorCQkJCWZvdW5kLm9iamVjdHNbaV0uaXRlbS0+ZmxhZ3MgfD0gU0VFTjsKKwkJfQorCX0KKwkvKiBjbGVhciBmbGFncyBmcm9tIHRoZSBvYmplY3RzIHdlIHRyYXZlcnNlZCAqLworCWZvciAoaSA9IDA7IGkgPCBmb3VuZC5ucjsgaSsrKQorCQlmb3VuZC5vYmplY3RzW2ldLml0ZW0tPmZsYWdzICY9IH5TVFVEWUlORzsKKwlpZiAoaXNfaW5jb21wbGV0ZSkKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gSU5DT01QTEVURTsKKwllbHNlIHsKKwkJLyoKKwkJICogSWYgd2UgY29tZSBoZXJlLCB3ZSBoYXZlICgxKSB0cmF2ZXJzZWQgdGhlIGFuY2VzdHJ5IGNoYWluCisJCSAqIGZyb20gdGhlICJjb21taXQiIHVudGlsIHdlIHJlYWNoIFNFRU4gY29tbWl0cyAod2hpY2ggYXJlCisJCSAqIGtub3duIHRvIGJlIGNvbXBsZXRlKSwgYW5kICgyKSBtYWRlIHN1cmUgdGhhdCB0aGUgY29tbWl0cworCQkgKiBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGFib3ZlIHRyYXZlcnNhbCByZWZlciB0byB0cmVlcyB0aGF0CisJCSAqIGFyZSBjb21wbGV0ZS4gIFdoaWNoIG1lYW5zIHRoYXQgd2Uga25vdyAqYWxsKiB0aGUgY29tbWl0cworCQkgKiB3ZSBoYXZlIHNlZW4gZHVyaW5nIHRoaXMgcHJvY2VzcyBhcmUgY29tcGxldGUuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgZm91bmQubnI7IGkrKykKKwkJCWZvdW5kLm9iamVjdHNbaV0uaXRlbS0+ZmxhZ3MgfD0gU0VFTjsKKwl9CisJLyogZnJlZSBvYmplY3QgYXJyYXlzICovCisJb2JqZWN0X2FycmF5X2NsZWFyKCZzdHVkeSk7CisJb2JqZWN0X2FycmF5X2NsZWFyKCZmb3VuZCk7CisJcmV0dXJuICFpc19pbmNvbXBsZXRlOworfQorCitzdGF0aWMgaW50IGtlZXBfZW50cnkoc3RydWN0IGNvbW1pdCAqKml0LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJaWYgKGlzX251bGxfb2lkKG9pZCkpCisJCXJldHVybiAxOworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseSh0aGVfcmVwb3NpdG9yeSwgb2lkLCAxKTsKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGluIHRoaXMgY29tbWl0IGV4aXN0cy4KKwkgKgorCSAqIFdlIGhhdmUgd2Fsa2VkIGFsbCB0aGUgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0aGUgcmVmcworCSAqIGFuZCBjYWNoZSBlYXJsaWVyLiAgVGhlIGNvbW1pdHMgcmVhY2hhYmxlIGJ5IHRoaXMgY29tbWl0CisJICogbXVzdCBtZWV0IFNFRU4gY29tbWl0cyAtLSBhbmQgdGhlbiB3ZSBzaG91bGQgbWFyayB0aGVtIGFzCisJICogU0VFTiBhcyB3ZWxsLgorCSAqLworCWlmICghY29tbWl0X2lzX2NvbXBsZXRlKGNvbW1pdCkpCisJCXJldHVybiAwOworCSppdCA9IGNvbW1pdDsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFN0YXJ0aW5nIGZyb20gY29tbWl0cyBpbiB0aGUgY2ItPm1hcmtfbGlzdCwgbWFyayBjb21taXRzIHRoYXQgYXJlCisgKiByZWFjaGFibGUgZnJvbSB0aGVtLiAgU3RvcCB0aGUgdHJhdmVyc2FsIGF0IGNvbW1pdHMgb2xkZXIgdGhhbgorICogdGhlIGV4cGlyZV9saW1pdCBhbmQgcXVldWUgdGhlbSBiYWNrLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGNhbGwKKyAqIHVzIGFnYWluIHRvIHJlc3RhcnQgdGhlIHRyYXZlcnNhbCB3aXRoIGxvbmdlciBleHBpcmVfbGltaXQuCisgKi8KK3N0YXRpYyB2b2lkIG1hcmtfcmVhY2hhYmxlKHN0cnVjdCBleHBpcmVfcmVmbG9nX3BvbGljeV9jYiAqY2IpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwZW5kaW5nOworCXRpbWVzdGFtcF90IGV4cGlyZV9saW1pdCA9IGNiLT5tYXJrX2xpbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqbGVmdG92ZXIgPSBOVUxMOworCisJZm9yIChwZW5kaW5nID0gY2ItPm1hcmtfbGlzdDsgcGVuZGluZzsgcGVuZGluZyA9IHBlbmRpbmctPm5leHQpCisJCXBlbmRpbmctPml0ZW0tPm9iamVjdC5mbGFncyAmPSB+UkVBQ0hBQkxFOworCisJcGVuZGluZyA9IGNiLT5tYXJrX2xpc3Q7CisJd2hpbGUgKHBlbmRpbmcpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHBvcF9jb21taXQoJnBlbmRpbmcpOworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBSRUFDSEFCTEUpCisJCQljb250aW51ZTsKKwkJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQorCQkJY29udGludWU7CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFJFQUNIQUJMRTsKKwkJaWYgKGNvbW1pdC0+ZGF0ZSA8IGV4cGlyZV9saW1pdCkgeworCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgJmxlZnRvdmVyKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFJFQUNIQUJMRTsKKwkJcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOworCQl3aGlsZSAocGFyZW50KSB7CisJCQljb21taXQgPSBwYXJlbnQtPml0ZW07CisJCQlwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CisJCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBSRUFDSEFCTEUpCisJCQkJY29udGludWU7CisJCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCAmcGVuZGluZyk7CisJCX0KKwl9CisJY2ItPm1hcmtfbGlzdCA9IGxlZnRvdmVyOworfQorCitzdGF0aWMgaW50IHVucmVhY2hhYmxlKHN0cnVjdCBleHBpcmVfcmVmbG9nX3BvbGljeV9jYiAqY2IsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCS8qCisJICogV2UgbWF5IG9yIG1heSBub3QgaGF2ZSB0aGUgY29tbWl0IHlldCAtIGlmIG5vdCwgbG9vayBpdAorCSAqIHVwIHVzaW5nIHRoZSBzdXBwbGllZCBzaGExLgorCSAqLworCWlmICghY29tbWl0KSB7CisJCWlmIChpc19udWxsX29pZChvaWQpKQorCQkJcmV0dXJuIDA7CisKKwkJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LCBvaWQsCisJCQkJCQkJMSk7CisKKwkJLyogTm90IGEgY29tbWl0IC0tIGtlZXAgaXQgKi8KKwkJaWYgKCFjb21taXQpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBSZWFjaGFibGUgZnJvbSB0aGUgY3VycmVudCByZWY/ICBEb24ndCBwcnVuZS4gKi8KKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBSRUFDSEFCTEUpCisJCXJldHVybiAwOworCisJaWYgKGNiLT5tYXJrX2xpc3QgJiYgY2ItPm1hcmtfbGltaXQpIHsKKwkJY2ItPm1hcmtfbGltaXQgPSAwOyAvKiBkaWcgZG93biB0byB0aGUgcm9vdCAqLworCQltYXJrX3JlYWNoYWJsZShjYik7CisJfQorCisJcmV0dXJuICEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBSRUFDSEFCTEUpOworfQorCisvKgorICogUmV0dXJuIHRydWUgaWZmIHRoZSBzcGVjaWZpZWQgcmVmbG9nIGVudHJ5IHNob3VsZCBiZSBleHBpcmVkLgorICovCitzdGF0aWMgaW50IHNob3VsZF9leHBpcmVfcmVmbG9nX2VudChzdHJ1Y3Qgb2JqZWN0X2lkICpvb2lkLCBzdHJ1Y3Qgb2JqZWN0X2lkICpub2lkLAorCQkJCSAgICBjb25zdCBjaGFyICplbWFpbCwgdGltZXN0YW1wX3QgdGltZXN0YW1wLCBpbnQgdHosCisJCQkJICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGV4cGlyZV9yZWZsb2dfcG9saWN5X2NiICpjYiA9IGNiX2RhdGE7CisJc3RydWN0IGNvbW1pdCAqb2xkX2NvbW1pdCwgKm5ld19jb21taXQ7CisKKwlpZiAodGltZXN0YW1wIDwgY2ItPmNtZC5leHBpcmVfdG90YWwpCisJCXJldHVybiAxOworCisJb2xkX2NvbW1pdCA9IG5ld19jb21taXQgPSBOVUxMOworCWlmIChjYi0+Y21kLnN0YWxlZml4ICYmCisJICAgICgha2VlcF9lbnRyeSgmb2xkX2NvbW1pdCwgb29pZCkgfHwgIWtlZXBfZW50cnkoJm5ld19jb21taXQsIG5vaWQpKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAodGltZXN0YW1wIDwgY2ItPmNtZC5leHBpcmVfdW5yZWFjaGFibGUpIHsKKwkJaWYgKGNiLT51bnJlYWNoYWJsZV9leHBpcmVfa2luZCA9PSBVRV9BTFdBWVMpCisJCQlyZXR1cm4gMTsKKwkJaWYgKHVucmVhY2hhYmxlKGNiLCBvbGRfY29tbWl0LCBvb2lkKSB8fCB1bnJlYWNoYWJsZShjYiwgbmV3X2NvbW1pdCwgbm9pZCkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoY2ItPmNtZC5yZWNubyAmJiAtLShjYi0+Y21kLnJlY25vKSA9PSAwKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB1c2hfdGlwX3RvX2xpc3QoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0ID0gY2JfZGF0YTsKKwlzdHJ1Y3QgY29tbWl0ICp0aXBfY29tbWl0OworCWlmIChmbGFncyAmIFJFRl9JU1NZTVJFRikKKwkJcmV0dXJuIDA7CisJdGlwX2NvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseSh0aGVfcmVwb3NpdG9yeSwgb2lkLCAxKTsKKwlpZiAoIXRpcF9jb21taXQpCisJCXJldHVybiAwOworCWNvbW1pdF9saXN0X2luc2VydCh0aXBfY29tbWl0LCBsaXN0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19oZWFkKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJc3dpdGNoIChyZWZfdHlwZShyZWZuYW1lKSkgeworCWNhc2UgUkVGX1RZUEVfT1RIRVJfUFNFVURPUkVGOgorCWNhc2UgUkVGX1RZUEVfTUFJTl9QU0VVRE9SRUY6CisJCWlmIChwYXJzZV93b3JrdHJlZV9yZWYocmVmbmFtZSwgTlVMTCwgTlVMTCwgJnJlZm5hbWUpKQorCQkJQlVHKCJub3QgYSB3b3JrdHJlZSByZWY6ICVzIiwgcmVmbmFtZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gIXN0cmNtcChyZWZuYW1lLCAiSEVBRCIpOworfQorCitzdGF0aWMgdm9pZCByZWZsb2dfZXhwaXJ5X3ByZXBhcmUoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGV4cGlyZV9yZWZsb2dfcG9saWN5X2NiICpjYiA9IGNiX2RhdGE7CisKKwlpZiAoIWNiLT5jbWQuZXhwaXJlX3VucmVhY2hhYmxlIHx8IGlzX2hlYWQocmVmbmFtZSkpIHsKKwkJY2ItPnRpcF9jb21taXQgPSBOVUxMOworCQljYi0+dW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgPSBVRV9IRUFEOworCX0gZWxzZSB7CisJCWNiLT50aXBfY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCQlvaWQsIDEpOworCQlpZiAoIWNiLT50aXBfY29tbWl0KQorCQkJY2ItPnVucmVhY2hhYmxlX2V4cGlyZV9raW5kID0gVUVfQUxXQVlTOworCQllbHNlCisJCQljYi0+dW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgPSBVRV9OT1JNQUw7CisJfQorCisJaWYgKGNiLT5jbWQuZXhwaXJlX3VucmVhY2hhYmxlIDw9IGNiLT5jbWQuZXhwaXJlX3RvdGFsKQorCQljYi0+dW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgPSBVRV9BTFdBWVM7CisKKwljYi0+bWFya19saXN0ID0gTlVMTDsKKwljYi0+dGlwcyA9IE5VTEw7CisJaWYgKGNiLT51bnJlYWNoYWJsZV9leHBpcmVfa2luZCAhPSBVRV9BTFdBWVMpIHsKKwkJaWYgKGNiLT51bnJlYWNoYWJsZV9leHBpcmVfa2luZCA9PSBVRV9IRUFEKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmVsZW07CisKKwkJCWZvcl9lYWNoX3JlZihwdXNoX3RpcF90b19saXN0LCAmY2ItPnRpcHMpOworCQkJZm9yIChlbGVtID0gY2ItPnRpcHM7IGVsZW07IGVsZW0gPSBlbGVtLT5uZXh0KQorCQkJCWNvbW1pdF9saXN0X2luc2VydChlbGVtLT5pdGVtLCAmY2ItPm1hcmtfbGlzdCk7CisJCX0gZWxzZSB7CisJCQljb21taXRfbGlzdF9pbnNlcnQoY2ItPnRpcF9jb21taXQsICZjYi0+bWFya19saXN0KTsKKwkJfQorCQljYi0+bWFya19saW1pdCA9IGNiLT5jbWQuZXhwaXJlX3RvdGFsOworCQltYXJrX3JlYWNoYWJsZShjYik7CisJfQorfQorCitzdGF0aWMgdm9pZCByZWZsb2dfZXhwaXJ5X2NsZWFudXAodm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgZXhwaXJlX3JlZmxvZ19wb2xpY3lfY2IgKmNiID0gY2JfZGF0YTsKKworCWlmIChjYi0+dW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgIT0gVUVfQUxXQVlTKSB7CisJCWlmIChjYi0+dW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgPT0gVUVfSEVBRCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICplbGVtOworCQkJZm9yIChlbGVtID0gY2ItPnRpcHM7IGVsZW07IGVsZW0gPSBlbGVtLT5uZXh0KQorCQkJCWNsZWFyX2NvbW1pdF9tYXJrcyhlbGVtLT5pdGVtLCBSRUFDSEFCTEUpOworCQkJZnJlZV9jb21taXRfbGlzdChjYi0+dGlwcyk7CisJCX0gZWxzZSB7CisJCQljbGVhcl9jb21taXRfbWFya3MoY2ItPnRpcF9jb21taXQsIFJFQUNIQUJMRSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY29sbGVjdF9yZWZsb2coY29uc3QgY2hhciAqcmVmLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCB1bnVzZWQsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGNvbGxlY3RlZF9yZWZsb2cgKmU7CisJc3RydWN0IGNvbGxlY3RfcmVmbG9nX2NiICpjYiA9IGNiX2RhdGE7CisJc3RydWN0IHN0cmJ1ZiBuZXdyZWYgPSBTVFJCVUZfSU5JVDsKKworCS8qCisJICogQXZvaWQgY29sbGVjdGluZyB0aGUgc2FtZSBzaGFyZWQgcmVmIG11bHRpcGxlIHRpbWVzIGJlY2F1c2UKKwkgKiB0aGV5IGFyZSBhdmFpbGFibGUgdmlhIGFsbCB3b3JrdHJlZXMuCisJICovCisJaWYgKCFjYi0+d3QtPmlzX2N1cnJlbnQgJiYgcmVmX3R5cGUocmVmKSA9PSBSRUZfVFlQRV9OT1JNQUwpCisJCXJldHVybiAwOworCisJc3RyYnVmX3dvcmt0cmVlX3JlZihjYi0+d3QsICZuZXdyZWYsIHJlZik7CisJRkxFWF9BTExPQ19TVFIoZSwgcmVmbG9nLCBuZXdyZWYuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmbmV3cmVmKTsKKworCW9pZGNweSgmZS0+b2lkLCBvaWQpOworCUFMTE9DX0dST1coY2ItPmUsIGNiLT5uciArIDEsIGNiLT5hbGxvYyk7CisJY2ItPmVbY2ItPm5yKytdID0gZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZWZsb2dfZXhwaXJlX2NmZyB7CisJc3RydWN0IHJlZmxvZ19leHBpcmVfY2ZnICpuZXh0OworCXRpbWVzdGFtcF90IGV4cGlyZV90b3RhbDsKKwl0aW1lc3RhbXBfdCBleHBpcmVfdW5yZWFjaGFibGU7CisJY2hhciBwYXR0ZXJuW0ZMRVhfQVJSQVldOworfSAqcmVmbG9nX2V4cGlyZV9jZmcsICoqcmVmbG9nX2V4cGlyZV9jZmdfdGFpbDsKKworc3RhdGljIHN0cnVjdCByZWZsb2dfZXhwaXJlX2NmZyAqZmluZF9jZmdfZW50KGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHJlZmxvZ19leHBpcmVfY2ZnICplbnQ7CisKKwlpZiAoIXJlZmxvZ19leHBpcmVfY2ZnX3RhaWwpCisJCXJlZmxvZ19leHBpcmVfY2ZnX3RhaWwgPSAmcmVmbG9nX2V4cGlyZV9jZmc7CisKKwlmb3IgKGVudCA9IHJlZmxvZ19leHBpcmVfY2ZnOyBlbnQ7IGVudCA9IGVudC0+bmV4dCkKKwkJaWYgKCFzdHJuY21wKGVudC0+cGF0dGVybiwgcGF0dGVybiwgbGVuKSAmJgorCQkgICAgZW50LT5wYXR0ZXJuW2xlbl0gPT0gJ1wwJykKKwkJCXJldHVybiBlbnQ7CisKKwlGTEVYX0FMTE9DX01FTShlbnQsIHBhdHRlcm4sIHBhdHRlcm4sIGxlbik7CisJKnJlZmxvZ19leHBpcmVfY2ZnX3RhaWwgPSBlbnQ7CisJcmVmbG9nX2V4cGlyZV9jZmdfdGFpbCA9ICYoZW50LT5uZXh0KTsKKwlyZXR1cm4gZW50OworfQorCisvKiBleHBpcnkgdGltZXIgc2xvdCAqLworI2RlZmluZSBFWFBJUkVfVE9UQUwgICAwMQorI2RlZmluZSBFWFBJUkVfVU5SRUFDSCAwMgorCitzdGF0aWMgaW50IHJlZmxvZ19leHBpcmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWNvbnN0IGNoYXIgKnBhdHRlcm4sICprZXk7CisJc2l6ZV90IHBhdHRlcm5fbGVuOworCXRpbWVzdGFtcF90IGV4cGlyZTsKKwlpbnQgc2xvdDsKKwlzdHJ1Y3QgcmVmbG9nX2V4cGlyZV9jZmcgKmVudDsKKworCWlmIChwYXJzZV9jb25maWdfa2V5KHZhciwgImdjIiwgJnBhdHRlcm4sICZwYXR0ZXJuX2xlbiwgJmtleSkgPCAwKQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKKworCWlmICghc3RyY21wKGtleSwgInJlZmxvZ2V4cGlyZSIpKSB7CisJCXNsb3QgPSBFWFBJUkVfVE9UQUw7CisJCWlmIChnaXRfY29uZmlnX2V4cGlyeV9kYXRlKCZleHBpcmUsIHZhciwgdmFsdWUpKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJyZWZsb2dleHBpcmV1bnJlYWNoYWJsZSIpKSB7CisJCXNsb3QgPSBFWFBJUkVfVU5SRUFDSDsKKwkJaWYgKGdpdF9jb25maWdfZXhwaXJ5X2RhdGUoJmV4cGlyZSwgdmFyLCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlCisJCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworCisJaWYgKCFwYXR0ZXJuKSB7CisJCXN3aXRjaCAoc2xvdCkgeworCQljYXNlIEVYUElSRV9UT1RBTDoKKwkJCWRlZmF1bHRfcmVmbG9nX2V4cGlyZSA9IGV4cGlyZTsKKwkJCWJyZWFrOworCQljYXNlIEVYUElSRV9VTlJFQUNIOgorCQkJZGVmYXVsdF9yZWZsb2dfZXhwaXJlX3VucmVhY2hhYmxlID0gZXhwaXJlOworCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJZW50ID0gZmluZF9jZmdfZW50KHBhdHRlcm4sIHBhdHRlcm5fbGVuKTsKKwlpZiAoIWVudCkKKwkJcmV0dXJuIC0xOworCXN3aXRjaCAoc2xvdCkgeworCWNhc2UgRVhQSVJFX1RPVEFMOgorCQllbnQtPmV4cGlyZV90b3RhbCA9IGV4cGlyZTsKKwkJYnJlYWs7CisJY2FzZSBFWFBJUkVfVU5SRUFDSDoKKwkJZW50LT5leHBpcmVfdW5yZWFjaGFibGUgPSBleHBpcmU7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X3JlZmxvZ19leHBpcnlfcGFyYW0oc3RydWN0IGNtZF9yZWZsb2dfZXhwaXJlX2NiICpjYiwgaW50IHNsb3QsIGNvbnN0IGNoYXIgKnJlZikKK3sKKwlzdHJ1Y3QgcmVmbG9nX2V4cGlyZV9jZmcgKmVudDsKKworCWlmIChzbG90ID09IChFWFBJUkVfVE9UQUx8RVhQSVJFX1VOUkVBQ0gpKQorCQlyZXR1cm47IC8qIGJvdGggZ2l2ZW4gZXhwbGljaXRseSAtLSBub3RoaW5nIHRvIHR3ZWFrICovCisKKwlmb3IgKGVudCA9IHJlZmxvZ19leHBpcmVfY2ZnOyBlbnQ7IGVudCA9IGVudC0+bmV4dCkgeworCQlpZiAoIXdpbGRtYXRjaChlbnQtPnBhdHRlcm4sIHJlZiwgMCkpIHsKKwkJCWlmICghKHNsb3QgJiBFWFBJUkVfVE9UQUwpKQorCQkJCWNiLT5leHBpcmVfdG90YWwgPSBlbnQtPmV4cGlyZV90b3RhbDsKKwkJCWlmICghKHNsb3QgJiBFWFBJUkVfVU5SRUFDSCkpCisJCQkJY2ItPmV4cGlyZV91bnJlYWNoYWJsZSA9IGVudC0+ZXhwaXJlX3VucmVhY2hhYmxlOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB1bmNvbmZpZ3VyZWQsIG1ha2Ugc3Rhc2ggbmV2ZXIgZXhwaXJlCisJICovCisJaWYgKCFzdHJjbXAocmVmLCAicmVmcy9zdGFzaCIpKSB7CisJCWlmICghKHNsb3QgJiBFWFBJUkVfVE9UQUwpKQorCQkJY2ItPmV4cGlyZV90b3RhbCA9IDA7CisJCWlmICghKHNsb3QgJiBFWFBJUkVfVU5SRUFDSCkpCisJCQljYi0+ZXhwaXJlX3VucmVhY2hhYmxlID0gMDsKKwkJcmV0dXJuOworCX0KKworCS8qIE5vdGhpbmcgbWF0Y2hlZCAtLSB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgKi8KKwlpZiAoIShzbG90ICYgRVhQSVJFX1RPVEFMKSkKKwkJY2ItPmV4cGlyZV90b3RhbCA9IGRlZmF1bHRfcmVmbG9nX2V4cGlyZTsKKwlpZiAoIShzbG90ICYgRVhQSVJFX1VOUkVBQ0gpKQorCQljYi0+ZXhwaXJlX3VucmVhY2hhYmxlID0gZGVmYXVsdF9yZWZsb2dfZXhwaXJlX3VucmVhY2hhYmxlOworfQorCitzdGF0aWMgaW50IGNtZF9yZWZsb2dfZXhwaXJlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBleHBpcmVfcmVmbG9nX3BvbGljeV9jYiBjYjsKKwl0aW1lc3RhbXBfdCBub3cgPSB0aW1lKE5VTEwpOworCWludCBpLCBzdGF0dXMsIGRvX2FsbCwgYWxsX3dvcmt0cmVlcyA9IDE7CisJaW50IGV4cGxpY2l0X2V4cGlyeSA9IDA7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKworCWRlZmF1bHRfcmVmbG9nX2V4cGlyZV91bnJlYWNoYWJsZSA9IG5vdyAtIDMwICogMjQgKiAzNjAwOworCWRlZmF1bHRfcmVmbG9nX2V4cGlyZSA9IG5vdyAtIDkwICogMjQgKiAzNjAwOworCWdpdF9jb25maWcocmVmbG9nX2V4cGlyZV9jb25maWcsIE5VTEwpOworCisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKwlkb19hbGwgPSBzdGF0dXMgPSAwOworCW1lbXNldCgmY2IsIDAsIHNpemVvZihjYikpOworCisJY2IuY21kLmV4cGlyZV90b3RhbCA9IGRlZmF1bHRfcmVmbG9nX2V4cGlyZTsKKwljYi5jbWQuZXhwaXJlX3VucmVhY2hhYmxlID0gZGVmYXVsdF9yZWZsb2dfZXhwaXJlX3VucmVhY2hhYmxlOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCisJCWlmICghc3RyY21wKGFyZywgIi0tZHJ5LXJ1biIpIHx8ICFzdHJjbXAoYXJnLCAiLW4iKSkKKwkJCWZsYWdzIHw9IEVYUElSRV9SRUZMT0dTX0RSWV9SVU47CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIi0tZXhwaXJlPSIsICZhcmcpKSB7CisJCQlpZiAocGFyc2VfZXhwaXJ5X2RhdGUoYXJnLCAmY2IuY21kLmV4cGlyZV90b3RhbCkpCisJCQkJZGllKF8oIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIiksIGFyZyk7CisJCQlleHBsaWNpdF9leHBpcnkgfD0gRVhQSVJFX1RPVEFMOworCQl9CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIi0tZXhwaXJlLXVucmVhY2hhYmxlPSIsICZhcmcpKSB7CisJCQlpZiAocGFyc2VfZXhwaXJ5X2RhdGUoYXJnLCAmY2IuY21kLmV4cGlyZV91bnJlYWNoYWJsZSkpCisJCQkJZGllKF8oIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIiksIGFyZyk7CisJCQlleHBsaWNpdF9leHBpcnkgfD0gRVhQSVJFX1VOUkVBQ0g7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXN0YWxlLWZpeCIpKQorCQkJY2IuY21kLnN0YWxlZml4ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJld3JpdGUiKSkKKwkJCWZsYWdzIHw9IEVYUElSRV9SRUZMT0dTX1JFV1JJVEU7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS11cGRhdGVyZWYiKSkKKwkJCWZsYWdzIHw9IEVYUElSRV9SRUZMT0dTX1VQREFURV9SRUY7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1hbGwiKSkKKwkJCWRvX2FsbCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zaW5nbGUtd29ya3RyZWUiKSkKKwkJCWFsbF93b3JrdHJlZXMgPSAwOworCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tdmVyYm9zZSIpKQorCQkJZmxhZ3MgfD0gRVhQSVJFX1JFRkxPR1NfVkVSQk9TRTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQlpKys7CisJCQlicmVhazsKKwkJfQorCQllbHNlIGlmIChhcmdbMF0gPT0gJy0nKQorCQkJdXNhZ2UoXyhyZWZsb2dfZXhwaXJlX3VzYWdlKSk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogV2UgY2FuIHRydXN0IHRoZSBjb21taXRzIGFuZCBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHJlZnMKKwkgKiBldmVuIGluIG9sZGVyIHJlcG9zaXRvcnkuICBXZSBjYW5ub3QgdHJ1c3Qgd2hhdCdzIHJlYWNoYWJsZQorCSAqIGZyb20gcmVmbG9nIGlmIHRoZSByZXBvc2l0b3J5IHdhcyBwcnVuZWQgd2l0aCBvbGRlciBnaXQuCisJICovCisJaWYgKGNiLmNtZC5zdGFsZWZpeCkgeworCQlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmY2IuY21kLnJldnMsIHByZWZpeCk7CisJCWlmIChmbGFncyAmIEVYUElSRV9SRUZMT0dTX1ZFUkJPU0UpCisJCQlwcmludGYoXygiTWFya2luZyByZWFjaGFibGUgb2JqZWN0cy4uLiIpKTsKKwkJbWFya19yZWFjaGFibGVfb2JqZWN0cygmY2IuY21kLnJldnMsIDAsIDAsIE5VTEwpOworCQlpZiAoZmxhZ3MgJiBFWFBJUkVfUkVGTE9HU19WRVJCT1NFKQorCQkJcHV0Y2hhcignXG4nKTsKKwl9CisKKwlpZiAoZG9fYWxsKSB7CisJCXN0cnVjdCBjb2xsZWN0X3JlZmxvZ19jYiBjb2xsZWN0ZWQ7CisJCXN0cnVjdCB3b3JrdHJlZSAqKndvcmt0cmVlcywgKipwOworCQlpbnQgaTsKKworCQltZW1zZXQoJmNvbGxlY3RlZCwgMCwgc2l6ZW9mKGNvbGxlY3RlZCkpOworCQl3b3JrdHJlZXMgPSBnZXRfd29ya3RyZWVzKDApOworCQlmb3IgKHAgPSB3b3JrdHJlZXM7ICpwOyBwKyspIHsKKwkJCWlmICghYWxsX3dvcmt0cmVlcyAmJiAhKCpwKS0+aXNfY3VycmVudCkKKwkJCQljb250aW51ZTsKKwkJCWNvbGxlY3RlZC53dCA9ICpwOworCQkJcmVmc19mb3JfZWFjaF9yZWZsb2coZ2V0X3dvcmt0cmVlX3JlZl9zdG9yZSgqcCksCisJCQkJCSAgICAgY29sbGVjdF9yZWZsb2csICZjb2xsZWN0ZWQpOworCQl9CisJCWZyZWVfd29ya3RyZWVzKHdvcmt0cmVlcyk7CisJCWZvciAoaSA9IDA7IGkgPCBjb2xsZWN0ZWQubnI7IGkrKykgeworCQkJc3RydWN0IGNvbGxlY3RlZF9yZWZsb2cgKmUgPSBjb2xsZWN0ZWQuZVtpXTsKKwkJCXNldF9yZWZsb2dfZXhwaXJ5X3BhcmFtKCZjYi5jbWQsIGV4cGxpY2l0X2V4cGlyeSwgZS0+cmVmbG9nKTsKKwkJCXN0YXR1cyB8PSByZWZsb2dfZXhwaXJlKGUtPnJlZmxvZywgJmUtPm9pZCwgZmxhZ3MsCisJCQkJCQlyZWZsb2dfZXhwaXJ5X3ByZXBhcmUsCisJCQkJCQlzaG91bGRfZXhwaXJlX3JlZmxvZ19lbnQsCisJCQkJCQlyZWZsb2dfZXhwaXJ5X2NsZWFudXAsCisJCQkJCQkmY2IpOworCQkJZnJlZShlKTsKKwkJfQorCQlmcmVlKGNvbGxlY3RlZC5lKTsKKwl9CisKKwlmb3IgKDsgaSA8IGFyZ2M7IGkrKykgeworCQljaGFyICpyZWY7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlpZiAoIWR3aW1fbG9nKGFyZ3ZbaV0sIHN0cmxlbihhcmd2W2ldKSwgJm9pZCwgJnJlZikpIHsKKwkJCXN0YXR1cyB8PSBlcnJvcihfKCIlcyBwb2ludHMgbm93aGVyZSEiKSwgYXJndltpXSk7CisJCQljb250aW51ZTsKKwkJfQorCQlzZXRfcmVmbG9nX2V4cGlyeV9wYXJhbSgmY2IuY21kLCBleHBsaWNpdF9leHBpcnksIHJlZik7CisJCXN0YXR1cyB8PSByZWZsb2dfZXhwaXJlKHJlZiwgJm9pZCwgZmxhZ3MsCisJCQkJCXJlZmxvZ19leHBpcnlfcHJlcGFyZSwKKwkJCQkJc2hvdWxkX2V4cGlyZV9yZWZsb2dfZW50LAorCQkJCQlyZWZsb2dfZXhwaXJ5X2NsZWFudXAsCisJCQkJCSZjYik7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfcmVmbG9nX2VudChzdHJ1Y3Qgb2JqZWN0X2lkICpvb2lkLCBzdHJ1Y3Qgb2JqZWN0X2lkICpub2lkLAorCQljb25zdCBjaGFyICplbWFpbCwgdGltZXN0YW1wX3QgdGltZXN0YW1wLCBpbnQgdHosCisJCWNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGV4cGlyZV9yZWZsb2dfcG9saWN5X2NiICpjYiA9IGNiX2RhdGE7CisJaWYgKCFjYi0+Y21kLmV4cGlyZV90b3RhbCB8fCB0aW1lc3RhbXAgPCBjYi0+Y21kLmV4cGlyZV90b3RhbCkKKwkJY2ItPmNtZC5yZWNubysrOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtZF9yZWZsb2dfZGVsZXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBleHBpcmVfcmVmbG9nX3BvbGljeV9jYiBjYjsKKwlpbnQgaSwgc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCisJbWVtc2V0KCZjYiwgMCwgc2l6ZW9mKGNiKSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWlmICghc3RyY21wKGFyZywgIi0tZHJ5LXJ1biIpIHx8ICFzdHJjbXAoYXJnLCAiLW4iKSkKKwkJCWZsYWdzIHw9IEVYUElSRV9SRUZMT0dTX0RSWV9SVU47CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yZXdyaXRlIikpCisJCQlmbGFncyB8PSBFWFBJUkVfUkVGTE9HU19SRVdSSVRFOworCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tdXBkYXRlcmVmIikpCisJCQlmbGFncyB8PSBFWFBJUkVfUkVGTE9HU19VUERBVEVfUkVGOworCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tdmVyYm9zZSIpKQorCQkJZmxhZ3MgfD0gRVhQSVJFX1JFRkxPR1NfVkVSQk9TRTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQlpKys7CisJCQlicmVhazsKKwkJfQorCQllbHNlIGlmIChhcmdbMF0gPT0gJy0nKQorCQkJdXNhZ2UoXyhyZWZsb2dfZGVsZXRlX3VzYWdlKSk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCWlmIChhcmdjIC0gaSA8IDEpCisJCXJldHVybiBlcnJvcihfKCJubyByZWZsb2cgc3BlY2lmaWVkIHRvIGRlbGV0ZSIpKTsKKworCWZvciAoIDsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICpzcGVjID0gc3Ryc3RyKGFyZ3ZbaV0sICJAeyIpOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJY2hhciAqZXAsICpyZWY7CisJCWludCByZWNubzsKKworCQlpZiAoIXNwZWMpIHsKKwkJCXN0YXR1cyB8PSBlcnJvcihfKCJub3QgYSByZWZsb2c6ICVzIiksIGFyZ3ZbaV0pOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIWR3aW1fbG9nKGFyZ3ZbaV0sIHNwZWMgLSBhcmd2W2ldLCAmb2lkLCAmcmVmKSkgeworCQkJc3RhdHVzIHw9IGVycm9yKF8oIm5vIHJlZmxvZyBmb3IgJyVzJyIpLCBhcmd2W2ldKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmVjbm8gPSBzdHJ0b3VsKHNwZWMgKyAyLCAmZXAsIDEwKTsKKwkJaWYgKCplcCA9PSAnfScpIHsKKwkJCWNiLmNtZC5yZWNubyA9IC1yZWNubzsKKwkJCWZvcl9lYWNoX3JlZmxvZ19lbnQocmVmLCBjb3VudF9yZWZsb2dfZW50LCAmY2IpOworCQl9IGVsc2UgeworCQkJY2IuY21kLmV4cGlyZV90b3RhbCA9IGFwcHJveGlkYXRlKHNwZWMgKyAyKTsKKwkJCWZvcl9lYWNoX3JlZmxvZ19lbnQocmVmLCBjb3VudF9yZWZsb2dfZW50LCAmY2IpOworCQkJY2IuY21kLmV4cGlyZV90b3RhbCA9IDA7CisJCX0KKworCQlzdGF0dXMgfD0gcmVmbG9nX2V4cGlyZShyZWYsICZvaWQsIGZsYWdzLAorCQkJCQlyZWZsb2dfZXhwaXJ5X3ByZXBhcmUsCisJCQkJCXNob3VsZF9leHBpcmVfcmVmbG9nX2VudCwKKwkJCQkJcmVmbG9nX2V4cGlyeV9jbGVhbnVwLAorCQkJCQkmY2IpOworCQlmcmVlKHJlZik7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgY21kX3JlZmxvZ19leGlzdHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGksIHN0YXJ0ID0gMDsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgeworCQkJaSsrOworCQkJYnJlYWs7CisJCX0KKwkJZWxzZSBpZiAoYXJnWzBdID09ICctJykKKwkJCXVzYWdlKF8ocmVmbG9nX2V4aXN0c191c2FnZSkpOworCQllbHNlCisJCQlicmVhazsKKwl9CisKKwlzdGFydCA9IGk7CisKKwlpZiAoYXJnYyAtIHN0YXJ0ICE9IDEpCisJCXVzYWdlKF8ocmVmbG9nX2V4aXN0c191c2FnZSkpOworCisJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KGFyZ3Zbc3RhcnRdLCBSRUZOQU1FX0FMTE9XX09ORUxFVkVMKSkKKwkJZGllKF8oImludmFsaWQgcmVmIGZvcm1hdDogJXMiKSwgYXJndltzdGFydF0pOworCXJldHVybiAhcmVmbG9nX2V4aXN0cyhhcmd2W3N0YXJ0XSk7Cit9CisKKy8qCisgKiBtYWluICJyZWZsb2ciCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgcmVmbG9nX3VzYWdlW10gPQorTl8oImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iKTsKKworaW50IGNtZF9yZWZsb2coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlKF8ocmVmbG9nX3VzYWdlKSk7CisKKwkvKiBXaXRoIG5vIGNvbW1hbmQsIHdlIGRlZmF1bHQgdG8gc2hvd2luZyBpdC4gKi8KKwlpZiAoYXJnYyA8IDIgfHwgKmFyZ3ZbMV0gPT0gJy0nKQorCQlyZXR1cm4gY21kX2xvZ19yZWZsb2coYXJnYywgYXJndiwgcHJlZml4KTsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJzaG93IikpCisJCXJldHVybiBjbWRfbG9nX3JlZmxvZyhhcmdjIC0gMSwgYXJndiArIDEsIHByZWZpeCk7CisKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiZXhwaXJlIikpCisJCXJldHVybiBjbWRfcmVmbG9nX2V4cGlyZShhcmdjIC0gMSwgYXJndiArIDEsIHByZWZpeCk7CisKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiZGVsZXRlIikpCisJCXJldHVybiBjbWRfcmVmbG9nX2RlbGV0ZShhcmdjIC0gMSwgYXJndiArIDEsIHByZWZpeCk7CisKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiZXhpc3RzIikpCisJCXJldHVybiBjbWRfcmVmbG9nX2V4aXN0cyhhcmdjIC0gMSwgYXJndiArIDEsIHByZWZpeCk7CisKKwlyZXR1cm4gY21kX2xvZ19yZWZsb2coYXJnYywgYXJndiwgcHJlZml4KTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVtb3RlLWV4dC5jIGIvYnVpbHRpbi9yZW1vdGUtZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5MTI3YQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmVtb3RlLWV4dC5jCkBAIC0wLDAgKzEsMjAyIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdXNhZ2VfbXNnW10gPQorCSJnaXQgcmVtb3RlLWV4dCA8cmVtb3RlPiA8dXJsPiI7CisKKy8qCisgKiBVUkwgc3ludGF4OgorICoJJ2NvbW1hbmQgW2FyZzEgW2FyZzIgWy4uLl1dXScJSW52b2tlIGNvbW1hbmQgd2l0aCBnaXZlbiBhcmd1bWVudHMuCisgKglTcGVjaWFsIGNoYXJhY3RlcnM6CisgKgknJSAnOiBMaXRlcmFsIHNwYWNlIGluIGFyZ3VtZW50LgorICoJJyUlJzogTGl0ZXJhbCBwZXJjZW50IHNpZ24uCisgKgknJVMnOiBOYW1lIG9mIHNlcnZpY2UgKGdpdC11cGxvYWQtcGFjay9naXQtdXBsb2FkLWFyY2hpdmUvCisgKgkJZ2l0LXJlY2VpdmUtcGFjay4KKyAqCSclcyc6IFNhbWUgYXMgXHMsIGJ1dCB3aXRoIHBvc3NpYmxlIGdpdC0gcHJlZml4IHN0cmlwcGVkLgorICoJJyVHJzogT25seSBhbGxvd2VkIGFzIGZpcnN0ICdjaGFyYWN0ZXInIG9mIGFyZ3VtZW50LiBEbyBub3QgcGFzcyB0aGlzCisgKgkJQXJndW1lbnQgdG8gY29tbWFuZCwgaW5zdGVhZCBzZW5kIHRoaXMgYXMgbmFtZSBvZiByZXBvc2l0b3J5CisgKgkJaW4gaW4tbGluZSBnaXQ6Ly8tc3R5bGUgcmVxdWVzdCAoYWxzbyBhY3RpdmF0ZXMgc2VuZGluZyB0aGlzCisgKgkJc3R5bGUgb2YgcmVxdWVzdCkuCisgKgknJVYnOiBPbmx5IGFsbG93ZWQgYXMgZmlyc3QgJ2NoYXJhY3Rlcicgb2YgYXJndW1lbnQuIFVzZWQgaW4KKyAqCQljb25qdW5jdGlvbiB3aXRoICclRyc6IERvIG5vdCBwYXNzIHRoaXMgYXJndW1lbnQgdG8gY29tbWFuZCwKKyAqCQlpbnN0ZWFkIHNlbmQgdGhpcyBhcyB2aG9zdCBpbiBnaXQ6Ly8tc3R5bGUgcmVxdWVzdCAobm90ZTogZG9lcworICoJCW5vdCBhY3RpdmF0ZSBzZW5kaW5nIGdpdDovLyBzdHlsZSByZXF1ZXN0KS4KKyAqLworCitzdGF0aWMgY2hhciAqZ2l0X3JlcTsKK3N0YXRpYyBjaGFyICpnaXRfcmVxX3Zob3N0OworCitzdGF0aWMgY2hhciAqc3RyaXBfZXNjYXBlcyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnNlcnZpY2UsCisJY29uc3QgY2hhciAqKm5leHQpCit7CisJc2l6ZV90IHJwb3MgPSAwOworCWludCBlc2NhcGUgPSAwOworCWNoYXIgc3BlY2lhbCA9IDA7CisJY29uc3QgY2hhciAqc2VydmljZV9ub3ByZWZpeCA9IHNlcnZpY2U7CisJc3RydWN0IHN0cmJ1ZiByZXQgPSBTVFJCVUZfSU5JVDsKKworCXNraXBfcHJlZml4KHNlcnZpY2Vfbm9wcmVmaXgsICJnaXQtIiwgJnNlcnZpY2Vfbm9wcmVmaXgpOworCisJLyogUGFzcyB0aGUgc2VydmljZSB0byBjb21tYW5kLiAqLworCXNldGVudigiR0lUX0VYVF9TRVJWSUNFIiwgc2VydmljZSwgMSk7CisJc2V0ZW52KCJHSVRfRVhUX1NFUlZJQ0VfTk9QUkVGSVgiLCBzZXJ2aWNlX25vcHJlZml4LCAxKTsKKworCS8qIFNjYW4gdGhlIGxlbmd0aCBvZiBhcmd1bWVudC4gKi8KKwl3aGlsZSAoc3RyW3Jwb3NdICYmIChlc2NhcGUgfHwgc3RyW3Jwb3NdICE9ICcgJykpIHsKKwkJaWYgKGVzY2FwZSkgeworCQkJc3dpdGNoIChzdHJbcnBvc10pIHsKKwkJCWNhc2UgJyAnOgorCQkJY2FzZSAnJSc6CisJCQljYXNlICdzJzoKKwkJCWNhc2UgJ1MnOgorCQkJCWJyZWFrOworCQkJY2FzZSAnRyc6CisJCQljYXNlICdWJzoKKwkJCQlzcGVjaWFsID0gc3RyW3Jwb3NdOworCQkJCWlmIChycG9zID09IDEpCisJCQkJCWJyZWFrOworCQkJCS8qIGZhbGx0aHJvdWdoICovCisJCQlkZWZhdWx0OgorCQkJCWRpZSgiQmFkIHJlbW90ZS1leHQgcGxhY2Vob2xkZXIgJyUlJWMnLiIsCisJCQkJCXN0cltycG9zXSk7CisJCQl9CisJCQllc2NhcGUgPSAwOworCQl9IGVsc2UKKwkJCWVzY2FwZSA9IChzdHJbcnBvc10gPT0gJyUnKTsKKwkJcnBvcysrOworCX0KKwlpZiAoZXNjYXBlICYmICFzdHJbcnBvc10pCisJCWRpZSgicmVtb3RlLWV4dCBjb21tYW5kIGhhcyBpbmNvbXBsZXRlIHBsYWNlaG9sZGVyIik7CisJKm5leHQgPSBzdHIgKyBycG9zOworCWlmICgqKm5leHQgPT0gJyAnKQorCQkrKypuZXh0OwkvKiBTa2lwIG92ZXIgc3BhY2UgKi8KKworCS8qCisJICogRG8gdGhlIGFjdHVhbCBwbGFjZWhvbGRlciBzdWJzdGl0dXRpb24uIFRoZSBzdHJpbmcgd2lsbCBiZSBzaG9ydAorCSAqIGVub3VnaCBub3QgdG8gb3ZlcmZsb3cgaW50ZWdlcnMuCisJICovCisJcnBvcyA9IHNwZWNpYWwgPyAyIDogMDsJCS8qIFNraXAgZmlyc3QgMiBieXRlcyBpbiBzcGVjaWFscy4gKi8KKwllc2NhcGUgPSAwOworCXdoaWxlIChzdHJbcnBvc10gJiYgKGVzY2FwZSB8fCBzdHJbcnBvc10gIT0gJyAnKSkgeworCQlpZiAoZXNjYXBlKSB7CisJCQlzd2l0Y2ggKHN0cltycG9zXSkgeworCQkJY2FzZSAnICc6CisJCQljYXNlICclJzoKKwkJCQlzdHJidWZfYWRkY2goJnJldCwgc3RyW3Jwb3NdKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3MnOgorCQkJCXN0cmJ1Zl9hZGRzdHIoJnJldCwgc2VydmljZV9ub3ByZWZpeCk7CisJCQkJYnJlYWs7CisJCQljYXNlICdTJzoKKwkJCQlzdHJidWZfYWRkc3RyKCZyZXQsIHNlcnZpY2UpOworCQkJCWJyZWFrOworCQkJfQorCQkJZXNjYXBlID0gMDsKKwkJfSBlbHNlCisJCQlzd2l0Y2ggKHN0cltycG9zXSkgeworCQkJY2FzZSAnJSc6CisJCQkJZXNjYXBlID0gMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc3RyYnVmX2FkZGNoKCZyZXQsIHN0cltycG9zXSk7CisJCQkJYnJlYWs7CisJCQl9CisJCXJwb3MrKzsKKwl9CisJc3dpdGNoIChzcGVjaWFsKSB7CisJY2FzZSAnRyc6CisJCWdpdF9yZXEgPSBzdHJidWZfZGV0YWNoKCZyZXQsIE5VTEwpOworCQlyZXR1cm4gTlVMTDsKKwljYXNlICdWJzoKKwkJZ2l0X3JlcV92aG9zdCA9IHN0cmJ1Zl9kZXRhY2goJnJldCwgTlVMTCk7CisJCXJldHVybiBOVUxMOworCWRlZmF1bHQ6CisJCXJldHVybiBzdHJidWZfZGV0YWNoKCZyZXQsIE5VTEwpOworCX0KK30KKworc3RhdGljIHZvaWQgcGFyc2VfYXJndihzdHJ1Y3QgYXJndl9hcnJheSAqb3V0LCBjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKnNlcnZpY2UpCit7CisJd2hpbGUgKCphcmcpIHsKKwkJY2hhciAqZXhwYW5kZWQgPSBzdHJpcF9lc2NhcGVzKGFyZywgc2VydmljZSwgJmFyZyk7CisJCWlmIChleHBhbmRlZCkKKwkJCWFyZ3ZfYXJyYXlfcHVzaChvdXQsIGV4cGFuZGVkKTsKKwkJZnJlZShleHBhbmRlZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZW5kX2dpdF9yZXF1ZXN0KGludCBzdGRpbl9mZCwgY29uc3QgY2hhciAqc2VydiwgY29uc3QgY2hhciAqcmVwbywKKwljb25zdCBjaGFyICp2aG9zdCkKK3sKKwlpZiAoIXZob3N0KQorCQlwYWNrZXRfd3JpdGVfZm10KHN0ZGluX2ZkLCAiJXMgJXMlYyIsIHNlcnYsIHJlcG8sIDApOworCWVsc2UKKwkJcGFja2V0X3dyaXRlX2ZtdChzdGRpbl9mZCwgIiVzICVzJWNob3N0PSVzJWMiLCBzZXJ2LCByZXBvLCAwLAorCQkJICAgICB2aG9zdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcnVuX2NoaWxkKGNvbnN0IGNoYXIgKmFyZywgY29uc3QgY2hhciAqc2VydmljZSkKK3sKKwlpbnQgcjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCWNoaWxkLmluID0gLTE7CisJY2hpbGQub3V0ID0gLTE7CisJY2hpbGQuZXJyID0gMDsKKwlwYXJzZV9hcmd2KCZjaGlsZC5hcmdzLCBhcmcsIHNlcnZpY2UpOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNoaWxkKSA8IDApCisJCWRpZSgiQ2FuJ3QgcnVuIHNwZWNpZmllZCBjb21tYW5kIik7CisKKwlpZiAoZ2l0X3JlcSkKKwkJc2VuZF9naXRfcmVxdWVzdChjaGlsZC5pbiwgc2VydmljZSwgZ2l0X3JlcSwgZ2l0X3JlcV92aG9zdCk7CisKKwlyID0gYmlkaXJlY3Rpb25hbF90cmFuc2Zlcl9sb29wKGNoaWxkLm91dCwgY2hpbGQuaW4pOworCWlmICghcikKKwkJciA9IGZpbmlzaF9jb21tYW5kKCZjaGlsZCk7CisJZWxzZQorCQlmaW5pc2hfY29tbWFuZCgmY2hpbGQpOworCXJldHVybiByOworfQorCisjZGVmaW5lIE1BWENPTU1BTkQgNDA5NgorCitzdGF0aWMgaW50IGNvbW1hbmRfbG9vcChjb25zdCBjaGFyICpjaGlsZCkKK3sKKwljaGFyIGJ1ZmZlcltNQVhDT01NQU5EXTsKKworCXdoaWxlICgxKSB7CisJCXNpemVfdCBpOworCQlpZiAoIWZnZXRzKGJ1ZmZlciwgTUFYQ09NTUFORCAtIDEsIHN0ZGluKSkgeworCQkJaWYgKGZlcnJvcihzdGRpbikpCisJCQkJZGllKCJDb21tYW5kIGlucHV0IGVycm9yIik7CisJCQlleGl0KDApOworCQl9CisJCS8qIFN0cmlwIGVuZCBvZiBsaW5lIGNoYXJhY3RlcnMuICovCisJCWkgPSBzdHJsZW4oYnVmZmVyKTsKKwkJd2hpbGUgKGkgPiAwICYmIGlzc3BhY2UoYnVmZmVyW2kgLSAxXSkpCisJCQlidWZmZXJbLS1pXSA9IDA7CisKKwkJaWYgKCFzdHJjbXAoYnVmZmVyLCAiY2FwYWJpbGl0aWVzIikpIHsKKwkJCXByaW50ZigiKmNvbm5lY3RcblxuIik7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfSBlbHNlIGlmICghc3RybmNtcChidWZmZXIsICJjb25uZWN0ICIsIDgpKSB7CisJCQlwcmludGYoIlxuIik7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCXJldHVybiBydW5fY2hpbGQoY2hpbGQsIGJ1ZmZlciArIDgpOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJCYWQgY29tbWFuZCIpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9Cit9CisKK2ludCBjbWRfcmVtb3RlX2V4dChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpZiAoYXJnYyAhPSAzKQorCQl1c2FnZSh1c2FnZV9tc2cpOworCisJcmV0dXJuIGNvbW1hbmRfbG9vcChhcmd2WzJdKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVtb3RlLWZkLmMgYi9idWlsdGluL3JlbW90ZS1mZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZGZlMDcKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3JlbW90ZS1mZC5jCkBAIC0wLDAgKzEsODIgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHVzYWdlX21zZ1tdID0KKwkiZ2l0IHJlbW90ZS1mZCA8cmVtb3RlPiA8dXJsPiI7CisKKy8qCisgKiBVUkwgc3ludGF4OgorICoJJ2ZkOjo8aW5vdXRmZD5bLzxhbnl0aGluZz5dJwkJUmVhZC93cml0ZSBzb2NrZXQgcGFpcgorICoJCQkJCQk8aW5vdXRmZD4uCisgKgknZmQ6OjxpbmZkPiw8b3V0ZmQ+Wy88YW55dGhpbmc+XScJUmVhZCBwaXBlIDxpbmZkPiBhbmQgd3JpdGUKKyAqCQkJCQkJcGlwZSA8b3V0ZmQ+LgorICoJW2Zvb10gaW5kaWNhdGVzICdmb28nIGlzIG9wdGlvbmFsLiA8YW55dGhpbmc+IGlzIGFueSBzdHJpbmcuCisgKgorICogVGhlIGRhdGEgb3V0cHV0IHRvIDxvdXRmZD4vPGlub3V0ZmQ+IHNob3VsZCBiZSBwYXNzZWQgdW5tb2xlc3RlZCB0bworICogZ2l0LXJlY2VpdmUtcGFjay9naXQtdXBsb2FkLXBhY2svZ2l0LXVwbG9hZC1hcmNoaXZlIGFuZCBvdXRwdXQgb2YKKyAqIGdpdC1yZWNlaXZlLXBhY2svZ2l0LXVwbG9hZC1wYWNrL2dpdC11cGxvYWQtYXJjaGl2ZSBzaG91bGQgYmUgcGFzc2VkCisgKiB1bm1vbGVzdGVkIHRvIDxpbmZkPi88aW5vdXRmZD4uCisgKgorICovCisKKyNkZWZpbmUgTUFYQ09NTUFORCA0MDk2CisKK3N0YXRpYyB2b2lkIGNvbW1hbmRfbG9vcChpbnQgaW5wdXRfZmQsIGludCBvdXRwdXRfZmQpCit7CisJY2hhciBidWZmZXJbTUFYQ09NTUFORF07CisKKwl3aGlsZSAoMSkgeworCQlzaXplX3QgaTsKKwkJaWYgKCFmZ2V0cyhidWZmZXIsIE1BWENPTU1BTkQgLSAxLCBzdGRpbikpIHsKKwkJCWlmIChmZXJyb3Ioc3RkaW4pKQorCQkJCWRpZSgiSW5wdXQgZXJyb3IiKTsKKwkJCXJldHVybjsKKwkJfQorCQkvKiBTdHJpcCBlbmQgb2YgbGluZSBjaGFyYWN0ZXJzLiAqLworCQlpID0gc3RybGVuKGJ1ZmZlcik7CisJCXdoaWxlIChpID4gMCAmJiBpc3NwYWNlKGJ1ZmZlcltpIC0gMV0pKQorCQkJYnVmZmVyWy0taV0gPSAwOworCisJCWlmICghc3RyY21wKGJ1ZmZlciwgImNhcGFiaWxpdGllcyIpKSB7CisJCQlwcmludGYoIipjb25uZWN0XG5cbiIpOworCQkJZmZsdXNoKHN0ZG91dCk7CisJCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmZmVyLCAiY29ubmVjdCAiLCA4KSkgeworCQkJcHJpbnRmKCJcbiIpOworCQkJZmZsdXNoKHN0ZG91dCk7CisJCQlpZiAoYmlkaXJlY3Rpb25hbF90cmFuc2Zlcl9sb29wKGlucHV0X2ZkLAorCQkJCW91dHB1dF9mZCkpCisJCQkJZGllKCJDb3B5aW5nIGRhdGEgYmV0d2VlbiBmaWxlIGRlc2NyaXB0b3JzIGZhaWxlZCIpOworCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJZGllKCJCYWQgY29tbWFuZDogJXMiLCBidWZmZXIpOworCQl9CisJfQorfQorCitpbnQgY21kX3JlbW90ZV9mZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaW5wdXRfZmQgPSAtMTsKKwlpbnQgb3V0cHV0X2ZkID0gLTE7CisJY2hhciAqZW5kOworCisJaWYgKGFyZ2MgIT0gMykKKwkJdXNhZ2UodXNhZ2VfbXNnKTsKKworCWlucHV0X2ZkID0gKGludClzdHJ0b3VsKGFyZ3ZbMl0sICZlbmQsIDEwKTsKKworCWlmICgoZW5kID09IGFyZ3ZbMl0pIHx8ICgqZW5kICE9ICcsJyAmJiAqZW5kICE9ICcvJyAmJiAqZW5kKSkKKwkJZGllKCJCYWQgVVJMIHN5bnRheCIpOworCisJaWYgKCplbmQgPT0gJy8nIHx8ICEqZW5kKSB7CisJCW91dHB1dF9mZCA9IGlucHV0X2ZkOworCX0gZWxzZSB7CisJCWNoYXIgKmVuZDI7CisJCW91dHB1dF9mZCA9IChpbnQpc3RydG91bChlbmQgKyAxLCAmZW5kMiwgMTApOworCisJCWlmICgoZW5kMiA9PSBlbmQgKyAxKSB8fCAoKmVuZDIgIT0gJy8nICYmICplbmQyKSkKKwkJCWRpZSgiQmFkIFVSTCBzeW50YXgiKTsKKwl9CisKKwljb21tYW5kX2xvb3AoaW5wdXRfZmQsIG91dHB1dF9mZCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlbW90ZS5jIGIvYnVpbHRpbi9yZW1vdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODM3Nzk5Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZW1vdGUuYwpAQCAtMCwwICsxLDE3MjIgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJyZWJhc2UuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVmc3BlYy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV91c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iKSwKKwlOXygiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tbWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IiksCisJTl8oImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IiksCisJTl8oImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIpLAorCU5fKCJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIiksCisJTl8oImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPG5hbWU+IiksCisJTl8oImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iKSwKKwlOXygiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dIiksCisJTl8oImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIiksCisJTl8oImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxuYW1lPiIpLAorCU5fKCJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+IFs8b2xkdXJsPl0iKSwKKwlOXygiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIpLAorCU5fKCJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV9hZGRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlbW90ZSBhZGQgWzxvcHRpb25zPl0gPG5hbWU+IDx1cmw+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV9yZW5hbWVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3JtX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfc2V0aGVhZF91c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV9zZXRicmFuY2hlc191c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iKSwKKwlOXygiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbWU+IDxicmFuY2g+Li4uIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV9zaG93X3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3BydW5lX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV91cGRhdGVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcHRpb25zPl0gWzxncm91cD4gfCA8cmVtb3RlPl0uLi4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX2dldHVybF91c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bmFtZT4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3NldHVybF91c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+IFs8b2xkdXJsPl0iKSwKKwlOXygiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIpLAorCU5fKCJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IiksCisJTlVMTAorfTsKKworI2RlZmluZSBHRVRfUkVGX1NUQVRFUyAoMTw8MCkKKyNkZWZpbmUgR0VUX0hFQURfTkFNRVMgKDE8PDEpCisjZGVmaW5lIEdFVF9QVVNIX1JFRl9TVEFURVMgKDE8PDIpCisKK3N0YXRpYyBpbnQgdmVyYm9zZTsKKworc3RhdGljIGludCBmZXRjaF9yZW1vdGUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBjaGFyICphcmd2W10gPSB7ICJmZXRjaCIsIG5hbWUsIE5VTEwsIE5VTEwgfTsKKwlpZiAodmVyYm9zZSkgeworCQlhcmd2WzFdID0gIi12IjsKKwkJYXJndlsyXSA9IG5hbWU7CisJfQorCXByaW50Zl9sbihfKCJVcGRhdGluZyAlcyIpLCBuYW1lKTsKKwlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgUlVOX0dJVF9DTUQpKQorCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IGZldGNoICVzIiksIG5hbWUpOworCXJldHVybiAwOworfQorCitlbnVtIHsKKwlUQUdTX1VOU0VUID0gMCwKKwlUQUdTX0RFRkFVTFQgPSAxLAorCVRBR1NfU0VUID0gMgorfTsKKworI2RlZmluZSBNSVJST1JfTk9ORSAwCisjZGVmaW5lIE1JUlJPUl9GRVRDSCAxCisjZGVmaW5lIE1JUlJPUl9QVVNIIDIKKyNkZWZpbmUgTUlSUk9SX0JPVEggKE1JUlJPUl9GRVRDSHxNSVJST1JfUFVTSCkKKworc3RhdGljIHZvaWQgYWRkX2JyYW5jaChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKmJyYW5jaG5hbWUsCisJCSAgICAgICBjb25zdCBjaGFyICpyZW1vdGVuYW1lLCBpbnQgbWlycm9yLCBzdHJ1Y3Qgc3RyYnVmICp0bXApCit7CisJc3RyYnVmX3Jlc2V0KHRtcCk7CisJc3RyYnVmX2FkZGNoKHRtcCwgJysnKTsKKwlpZiAobWlycm9yKQorCQlzdHJidWZfYWRkZih0bXAsICJyZWZzLyVzOnJlZnMvJXMiLAorCQkJCWJyYW5jaG5hbWUsIGJyYW5jaG5hbWUpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYodG1wLCAicmVmcy9oZWFkcy8lczpyZWZzL3JlbW90ZXMvJXMvJXMiLAorCQkJCWJyYW5jaG5hbWUsIHJlbW90ZW5hbWUsIGJyYW5jaG5hbWUpOworCWdpdF9jb25maWdfc2V0X211bHRpdmFyKGtleSwgdG1wLT5idWYsICJeJCIsIDApOworfQorCitzdGF0aWMgY29uc3QgY2hhciBtaXJyb3JfYWR2aWNlW10gPQorTl8oIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisgICAiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIpOworCitzdGF0aWMgaW50IHBhcnNlX21pcnJvcl9vcHQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCBub3QpCit7CisJdW5zaWduZWQgKm1pcnJvciA9IG9wdC0+dmFsdWU7CisJaWYgKG5vdCkKKwkJKm1pcnJvciA9IE1JUlJPUl9OT05FOworCWVsc2UgaWYgKCFhcmcpIHsKKwkJd2FybmluZygiJXMiLCBfKG1pcnJvcl9hZHZpY2UpKTsKKwkJKm1pcnJvciA9IE1JUlJPUl9CT1RIOworCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgImZldGNoIikpCisJCSptaXJyb3IgPSBNSVJST1JfRkVUQ0g7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJwdXNoIikpCisJCSptaXJyb3IgPSBNSVJST1JfUFVTSDsKKwllbHNlCisJCXJldHVybiBlcnJvcihfKCJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiKSwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBmZXRjaCA9IDAsIGZldGNoX3RhZ3MgPSBUQUdTX0RFRkFVTFQ7CisJdW5zaWduZWQgbWlycm9yID0gTUlSUk9SX05PTkU7CisJc3RydWN0IHN0cmluZ19saXN0IHRyYWNrID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwljb25zdCBjaGFyICptYXN0ZXIgPSBOVUxMOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklULCBidWYyID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqbmFtZSwgKnVybDsKKwlpbnQgaTsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnZicsICJmZXRjaCIsICZmZXRjaCwgTl8oImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiKSksCisJCU9QVF9TRVRfSU5UKDAsICJ0YWdzIiwgJmZldGNoX3RhZ3MsCisJCQkgICAgTl8oImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciKSwKKwkJCSAgICBUQUdTX1NFVCksCisJCU9QVF9TRVRfSU5UKDAsIE5VTEwsICZmZXRjaF90YWdzLAorCQkJICAgIE5fKCJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiKSwgVEFHU19VTlNFVCksCisJCU9QVF9TVFJJTkdfTElTVCgndCcsICJ0cmFjayIsICZ0cmFjaywgTl8oImJyYW5jaCIpLAorCQkJCU5fKCJicmFuY2goZXMpIHRvIHRyYWNrIikpLAorCQlPUFRfU1RSSU5HKCdtJywgIm1hc3RlciIsICZtYXN0ZXIsIE5fKCJicmFuY2giKSwgTl8oIm1hc3RlciBicmFuY2giKSksCisJCU9QVF9DQUxMQkFDS19GKDAsICJtaXJyb3IiLCAmbWlycm9yLCAiKHB1c2h8ZmV0Y2gpIiwKKwkJCU5fKCJzZXQgdXAgcmVtb3RlIGFzIGEgbWlycm9yIHRvIHB1c2ggdG8gb3IgZmV0Y2ggZnJvbSIpLAorCQkJUEFSU0VfT1BUX09QVEFSRyB8IFBBUlNFX09QVF9DT01QX0FSRywgcGFyc2VfbWlycm9yX29wdCksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV9hZGRfdXNhZ2UsCisJCQkgICAgIDApOworCisJaWYgKGFyZ2MgIT0gMikKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmVtb3RlX2FkZF91c2FnZSwgb3B0aW9ucyk7CisKKwlpZiAobWlycm9yICYmIG1hc3RlcikKKwkJZGllKF8oInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiKSk7CisJaWYgKG1pcnJvciAmJiAhKG1pcnJvciAmIE1JUlJPUl9GRVRDSCkgJiYgdHJhY2subnIpCisJCWRpZShfKCJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIikpOworCisJbmFtZSA9IGFyZ3ZbMF07CisJdXJsID0gYXJndlsxXTsKKworCXJlbW90ZSA9IHJlbW90ZV9nZXQobmFtZSk7CisJaWYgKHJlbW90ZV9pc19jb25maWd1cmVkKHJlbW90ZSwgMSkpCisJCWRpZShfKCJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIiksIG5hbWUpOworCisJc3RyYnVmX2FkZGYoJmJ1ZjIsICJyZWZzL2hlYWRzL3Rlc3Q6cmVmcy9yZW1vdGVzLyVzL3Rlc3QiLCBuYW1lKTsKKwlpZiAoIXZhbGlkX2ZldGNoX3JlZnNwZWMoYnVmMi5idWYpKQorCQlkaWUoXygiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIpLCBuYW1lKTsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZW1vdGUuJXMudXJsIiwgbmFtZSk7CisJZ2l0X2NvbmZpZ19zZXQoYnVmLmJ1ZiwgdXJsKTsKKworCWlmICghbWlycm9yIHx8IG1pcnJvciAmIE1JUlJPUl9GRVRDSCkgeworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJyZW1vdGUuJXMuZmV0Y2giLCBuYW1lKTsKKwkJaWYgKHRyYWNrLm5yID09IDApCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnRyYWNrLCAiKiIpOworCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2subnI7IGkrKykgeworCQkJYWRkX2JyYW5jaChidWYuYnVmLCB0cmFjay5pdGVtc1tpXS5zdHJpbmcsCisJCQkJICAgbmFtZSwgbWlycm9yLCAmYnVmMik7CisJCX0KKwl9CisKKwlpZiAobWlycm9yICYgTUlSUk9SX1BVU0gpIHsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkZigmYnVmLCAicmVtb3RlLiVzLm1pcnJvciIsIG5hbWUpOworCQlnaXRfY29uZmlnX3NldChidWYuYnVmLCAidHJ1ZSIpOworCX0KKworCWlmIChmZXRjaF90YWdzICE9IFRBR1NfREVGQVVMVCkgeworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJyZW1vdGUuJXMudGFnb3B0IiwgbmFtZSk7CisJCWdpdF9jb25maWdfc2V0KGJ1Zi5idWYsCisJCQkgICAgICAgZmV0Y2hfdGFncyA9PSBUQUdTX1NFVCA/ICItLXRhZ3MiIDogIi0tbm8tdGFncyIpOworCX0KKworCWlmIChmZXRjaCAmJiBmZXRjaF9yZW1vdGUobmFtZSkpCisJCXJldHVybiAxOworCisJaWYgKG1hc3RlcikgeworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJyZWZzL3JlbW90ZXMvJXMvSEVBRCIsIG5hbWUpOworCisJCXN0cmJ1Zl9yZXNldCgmYnVmMik7CisJCXN0cmJ1Zl9hZGRmKCZidWYyLCAicmVmcy9yZW1vdGVzLyVzLyVzIiwgbmFtZSwgbWFzdGVyKTsKKworCQlpZiAoY3JlYXRlX3N5bXJlZihidWYuYnVmLCBidWYyLmJ1ZiwgInJlbW90ZSBhZGQiKSkKKwkJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3Qgc2V0dXAgbWFzdGVyICclcyciKSwgbWFzdGVyKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmMik7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnRyYWNrLCAwKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgYnJhbmNoX2luZm8geworCWNoYXIgKnJlbW90ZV9uYW1lOworCXN0cnVjdCBzdHJpbmdfbGlzdCBtZXJnZTsKKwllbnVtIHJlYmFzZV90eXBlIHJlYmFzZTsKKwljaGFyICpwdXNoX3JlbW90ZV9uYW1lOworfTsKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBicmFuY2hfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisKK3N0YXRpYyBjb25zdCBjaGFyICphYmJyZXZfcmVmKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlza2lwX3ByZWZpeChuYW1lLCBwcmVmaXgsICZuYW1lKTsKKwlyZXR1cm4gbmFtZTsKK30KKyNkZWZpbmUgYWJicmV2X2JyYW5jaChuYW1lKSBhYmJyZXZfcmVmKChuYW1lKSwgInJlZnMvaGVhZHMvIikKKworc3RhdGljIGludCBjb25maWdfcmVhZF9icmFuY2hlcyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwljb25zdCBjaGFyICpvcmlnX2tleSA9IGtleTsKKwljaGFyICpuYW1lOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCBicmFuY2hfaW5mbyAqaW5mbzsKKwllbnVtIHsgUkVNT1RFLCBNRVJHRSwgUkVCQVNFLCBQVVNIX1JFTU9URSB9IHR5cGU7CisJc2l6ZV90IGtleV9sZW47CisKKwlpZiAoIXN0YXJ0c193aXRoKGtleSwgImJyYW5jaC4iKSkKKwkJcmV0dXJuIDA7CisKKwlrZXkgKz0gc3RybGVuKCJicmFuY2guIik7CisJaWYgKHN0cmlwX3N1ZmZpeChrZXksICIucmVtb3RlIiwgJmtleV9sZW4pKQorCQl0eXBlID0gUkVNT1RFOworCWVsc2UgaWYgKHN0cmlwX3N1ZmZpeChrZXksICIubWVyZ2UiLCAma2V5X2xlbikpCisJCXR5cGUgPSBNRVJHRTsKKwllbHNlIGlmIChzdHJpcF9zdWZmaXgoa2V5LCAiLnJlYmFzZSIsICZrZXlfbGVuKSkKKwkJdHlwZSA9IFJFQkFTRTsKKwllbHNlIGlmIChzdHJpcF9zdWZmaXgoa2V5LCAiLnB1c2hyZW1vdGUiLCAma2V5X2xlbikpCisJCXR5cGUgPSBQVVNIX1JFTU9URTsKKwllbHNlCisJCXJldHVybiAwOworCW5hbWUgPSB4bWVtZHVweihrZXksIGtleV9sZW4pOworCisJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCgmYnJhbmNoX2xpc3QsIG5hbWUpOworCisJaWYgKCFpdGVtLT51dGlsKQorCQlpdGVtLT51dGlsID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGJyYW5jaF9pbmZvKSk7CisJaW5mbyA9IGl0ZW0tPnV0aWw7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBSRU1PVEU6CisJCWlmIChpbmZvLT5yZW1vdGVfbmFtZSkKKwkJCXdhcm5pbmcoXygibW9yZSB0aGFuIG9uZSAlcyIpLCBvcmlnX2tleSk7CisJCWluZm8tPnJlbW90ZV9uYW1lID0geHN0cmR1cCh2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgTUVSR0U6IHsKKwkJY2hhciAqc3BhY2UgPSBzdHJjaHIodmFsdWUsICcgJyk7CisJCXZhbHVlID0gYWJicmV2X2JyYW5jaCh2YWx1ZSk7CisJCXdoaWxlIChzcGFjZSkgeworCQkJY2hhciAqbWVyZ2U7CisJCQltZXJnZSA9IHhzdHJuZHVwKHZhbHVlLCBzcGFjZSAtIHZhbHVlKTsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmaW5mby0+bWVyZ2UsIG1lcmdlKTsKKwkJCXZhbHVlID0gYWJicmV2X2JyYW5jaChzcGFjZSArIDEpOworCQkJc3BhY2UgPSBzdHJjaHIodmFsdWUsICcgJyk7CisJCX0KKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZpbmZvLT5tZXJnZSwgeHN0cmR1cCh2YWx1ZSkpOworCQlicmVhazsKKwl9CisJY2FzZSBSRUJBU0U6CisJCS8qCisJCSAqIENvbnNpZGVyIGludmFsaWQgdmFsdWVzIGFzIGZhbHNlIGFuZCBjaGVjayB0aGUKKwkJICogdHJ1dGggdmFsdWUgd2l0aCA+PSBSRUJBU0VfVFJVRS4KKwkJICovCisJCWluZm8tPnJlYmFzZSA9IHJlYmFzZV9wYXJzZV92YWx1ZSh2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgUFVTSF9SRU1PVEU6CisJCWlmIChpbmZvLT5wdXNoX3JlbW90ZV9uYW1lKQorCQkJd2FybmluZyhfKCJtb3JlIHRoYW4gb25lICVzIiksIG9yaWdfa2V5KTsKKwkJaW5mby0+cHVzaF9yZW1vdGVfbmFtZSA9IHhzdHJkdXAodmFsdWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoInVuZXhwZWN0ZWQgdHlwZT0lZCIsIHR5cGUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWFkX2JyYW5jaGVzKHZvaWQpCit7CisJaWYgKGJyYW5jaF9saXN0Lm5yKQorCQlyZXR1cm47CisJZ2l0X2NvbmZpZyhjb25maWdfcmVhZF9icmFuY2hlcywgTlVMTCk7Cit9CisKK3N0cnVjdCByZWZfc3RhdGVzIHsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJc3RydWN0IHN0cmluZ19saXN0IG5ld19yZWZzLCBzdGFsZSwgdHJhY2tlZCwgaGVhZHMsIHB1c2g7CisJaW50IHF1ZXJpZWQ7Cit9OworCitzdGF0aWMgaW50IGdldF9yZWZfc3RhdGVzKGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzKQoreworCXN0cnVjdCByZWYgKmZldGNoX21hcCA9IE5VTEwsICoqdGFpbCA9ICZmZXRjaF9tYXA7CisJc3RydWN0IHJlZiAqcmVmLCAqc3RhbGVfcmVmczsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzdGF0ZXMtPnJlbW90ZS0+ZmV0Y2gubnI7IGkrKykKKwkJaWYgKGdldF9mZXRjaF9tYXAocmVtb3RlX3JlZnMsICZzdGF0ZXMtPnJlbW90ZS0+ZmV0Y2guaXRlbXNbaV0sICZ0YWlsLCAxKSkKKwkJCWRpZShfKCJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIpLAorCQkJCXN0YXRlcy0+cmVtb3RlLT5mZXRjaC5yYXdbaV0pOworCisJc3RhdGVzLT5uZXdfcmVmcy5zdHJkdXBfc3RyaW5ncyA9IDE7CisJc3RhdGVzLT50cmFja2VkLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlzdGF0ZXMtPnN0YWxlLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlmb3IgKHJlZiA9IGZldGNoX21hcDsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJaWYgKCFyZWYtPnBlZXJfcmVmIHx8ICFyZWZfZXhpc3RzKHJlZi0+cGVlcl9yZWYtPm5hbWUpKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPm5ld19yZWZzLCBhYmJyZXZfYnJhbmNoKHJlZi0+bmFtZSkpOworCQllbHNlCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+dHJhY2tlZCwgYWJicmV2X2JyYW5jaChyZWYtPm5hbWUpKTsKKwl9CisJc3RhbGVfcmVmcyA9IGdldF9zdGFsZV9oZWFkcygmc3RhdGVzLT5yZW1vdGUtPmZldGNoLCBmZXRjaF9tYXApOworCWZvciAocmVmID0gc3RhbGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPnN0YWxlLCBhYmJyZXZfYnJhbmNoKHJlZi0+bmFtZSkpOworCQlpdGVtLT51dGlsID0geHN0cmR1cChyZWYtPm5hbWUpOworCX0KKwlmcmVlX3JlZnMoc3RhbGVfcmVmcyk7CisJZnJlZV9yZWZzKGZldGNoX21hcCk7CisKKwlzdHJpbmdfbGlzdF9zb3J0KCZzdGF0ZXMtPm5ld19yZWZzKTsKKwlzdHJpbmdfbGlzdF9zb3J0KCZzdGF0ZXMtPnRyYWNrZWQpOworCXN0cmluZ19saXN0X3NvcnQoJnN0YXRlcy0+c3RhbGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwdXNoX2luZm8geworCWNoYXIgKmRlc3Q7CisJaW50IGZvcmNlZDsKKwllbnVtIHsKKwkJUFVTSF9TVEFUVVNfQ1JFQVRFID0gMCwKKwkJUFVTSF9TVEFUVVNfREVMRVRFLAorCQlQVVNIX1NUQVRVU19VUFRPREFURSwKKwkJUFVTSF9TVEFUVVNfRkFTVEZPUldBUkQsCisJCVBVU0hfU1RBVFVTX09VVE9GREFURSwKKwkJUFVTSF9TVEFUVVNfTk9UUVVFUklFRAorCX0gc3RhdHVzOworfTsKKworc3RhdGljIGludCBnZXRfcHVzaF9yZWZfc3RhdGVzKGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLAorCXN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMpCit7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlID0gc3RhdGVzLT5yZW1vdGU7CisJc3RydWN0IHJlZiAqcmVmLCAqbG9jYWxfcmVmcywgKnB1c2hfbWFwOworCWlmIChyZW1vdGUtPm1pcnJvcikKKwkJcmV0dXJuIDA7CisKKwlsb2NhbF9yZWZzID0gZ2V0X2xvY2FsX2hlYWRzKCk7CisJcHVzaF9tYXAgPSBjb3B5X3JlZl9saXN0KHJlbW90ZV9yZWZzKTsKKworCW1hdGNoX3B1c2hfcmVmcyhsb2NhbF9yZWZzLCAmcHVzaF9tYXAsICZyZW1vdGUtPnB1c2gsIE1BVENIX1JFRlNfTk9ORSk7CisKKwlzdGF0ZXMtPnB1c2guc3RyZHVwX3N0cmluZ3MgPSAxOworCWZvciAocmVmID0gcHVzaF9tYXA7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlzdHJ1Y3QgcHVzaF9pbmZvICppbmZvOworCisJCWlmICghcmVmLT5wZWVyX3JlZikKKwkJCWNvbnRpbnVlOworCQlvaWRjcHkoJnJlZi0+bmV3X29pZCwgJnJlZi0+cGVlcl9yZWYtPm5ld19vaWQpOworCisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+cHVzaCwKKwkJCQkJICBhYmJyZXZfYnJhbmNoKHJlZi0+cGVlcl9yZWYtPm5hbWUpKTsKKwkJaXRlbS0+dXRpbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwdXNoX2luZm8pKTsKKwkJaW5mbyA9IGl0ZW0tPnV0aWw7CisJCWluZm8tPmZvcmNlZCA9IHJlZi0+Zm9yY2U7CisJCWluZm8tPmRlc3QgPSB4c3RyZHVwKGFiYnJldl9icmFuY2gocmVmLT5uYW1lKSk7CisKKwkJaWYgKGlzX251bGxfb2lkKCZyZWYtPm5ld19vaWQpKSB7CisJCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19ERUxFVEU7CisJCX0gZWxzZSBpZiAob2lkZXEoJnJlZi0+b2xkX29pZCwgJnJlZi0+bmV3X29pZCkpCisJCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19VUFRPREFURTsKKwkJZWxzZSBpZiAoaXNfbnVsbF9vaWQoJnJlZi0+b2xkX29pZCkpCisJCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19DUkVBVEU7CisJCWVsc2UgaWYgKGhhc19vYmplY3RfZmlsZSgmcmVmLT5vbGRfb2lkKSAmJgorCQkJIHJlZl9uZXdlcigmcmVmLT5uZXdfb2lkLCAmcmVmLT5vbGRfb2lkKSkKKwkJCWluZm8tPnN0YXR1cyA9IFBVU0hfU1RBVFVTX0ZBU1RGT1JXQVJEOworCQllbHNlCisJCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19PVVRPRkRBVEU7CisJfQorCWZyZWVfcmVmcyhsb2NhbF9yZWZzKTsKKwlmcmVlX3JlZnMocHVzaF9tYXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9wdXNoX3JlZl9zdGF0ZXNfbm9xdWVyeShzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzKQoreworCWludCBpOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZSA9IHN0YXRlcy0+cmVtb3RlOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCBwdXNoX2luZm8gKmluZm87CisKKwlpZiAocmVtb3RlLT5taXJyb3IpCisJCXJldHVybiAwOworCisJc3RhdGVzLT5wdXNoLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlpZiAoIXJlbW90ZS0+cHVzaC5ucikgeworCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPnB1c2gsIF8oIihtYXRjaGluZykiKSk7CisJCWluZm8gPSBpdGVtLT51dGlsID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHB1c2hfaW5mbykpOworCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19OT1RRVUVSSUVEOworCQlpbmZvLT5kZXN0ID0geHN0cmR1cChpdGVtLT5zdHJpbmcpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3RlLT5wdXNoLm5yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHJlZnNwZWNfaXRlbSAqc3BlYyA9ICZyZW1vdGUtPnB1c2guaXRlbXNbaV07CisJCWlmIChzcGVjLT5tYXRjaGluZykKKwkJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+cHVzaCwgXygiKG1hdGNoaW5nKSIpKTsKKwkJZWxzZSBpZiAoc3RybGVuKHNwZWMtPnNyYykpCisJCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPnB1c2gsIHNwZWMtPnNyYyk7CisJCWVsc2UKKwkJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+cHVzaCwgXygiKGRlbGV0ZSkiKSk7CisKKwkJaW5mbyA9IGl0ZW0tPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcHVzaF9pbmZvKSk7CisJCWluZm8tPmZvcmNlZCA9IHNwZWMtPmZvcmNlOworCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19OT1RRVUVSSUVEOworCQlpbmZvLT5kZXN0ID0geHN0cmR1cChzcGVjLT5kc3QgPyBzcGVjLT5kc3QgOiBpdGVtLT5zdHJpbmcpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfaGVhZF9uYW1lcyhjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcykKK3sKKwlzdHJ1Y3QgcmVmICpyZWYsICptYXRjaGVzOworCXN0cnVjdCByZWYgKmZldGNoX21hcCA9IE5VTEwsICoqZmV0Y2hfbWFwX3RhaWwgPSAmZmV0Y2hfbWFwOworCXN0cnVjdCByZWZzcGVjX2l0ZW0gcmVmc3BlYzsKKworCXJlZnNwZWMuZm9yY2UgPSAwOworCXJlZnNwZWMucGF0dGVybiA9IDE7CisJcmVmc3BlYy5zcmMgPSByZWZzcGVjLmRzdCA9ICJyZWZzL2hlYWRzLyoiOworCXN0YXRlcy0+aGVhZHMuc3RyZHVwX3N0cmluZ3MgPSAxOworCWdldF9mZXRjaF9tYXAocmVtb3RlX3JlZnMsICZyZWZzcGVjLCAmZmV0Y2hfbWFwX3RhaWwsIDApOworCW1hdGNoZXMgPSBndWVzc19yZW1vdGVfaGVhZChmaW5kX3JlZl9ieV9uYW1lKHJlbW90ZV9yZWZzLCAiSEVBRCIpLAorCQkJCSAgICBmZXRjaF9tYXAsIDEpOworCWZvciAocmVmID0gbWF0Y2hlczsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmc3RhdGVzLT5oZWFkcywgYWJicmV2X2JyYW5jaChyZWYtPm5hbWUpKTsKKworCWZyZWVfcmVmcyhmZXRjaF9tYXApOworCWZyZWVfcmVmcyhtYXRjaGVzKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qga25vd25fcmVtb3RlIHsKKwlzdHJ1Y3Qga25vd25fcmVtb3RlICpuZXh0OworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKK307CisKK3N0cnVjdCBrbm93bl9yZW1vdGVzIHsKKwlzdHJ1Y3QgcmVtb3RlICp0b19kZWxldGU7CisJc3RydWN0IGtub3duX3JlbW90ZSAqbGlzdDsKK307CisKK3N0YXRpYyBpbnQgYWRkX2tub3duX3JlbW90ZShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGtub3duX3JlbW90ZXMgKmFsbCA9IGNiX2RhdGE7CisJc3RydWN0IGtub3duX3JlbW90ZSAqcjsKKworCWlmICghc3RyY21wKGFsbC0+dG9fZGVsZXRlLT5uYW1lLCByZW1vdGUtPm5hbWUpKQorCQlyZXR1cm4gMDsKKworCXIgPSB4bWFsbG9jKHNpemVvZigqcikpOworCXItPnJlbW90ZSA9IHJlbW90ZTsKKwlyLT5uZXh0ID0gYWxsLT5saXN0OworCWFsbC0+bGlzdCA9IHI7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBicmFuY2hlc19mb3JfcmVtb3RlIHsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJc3RydWN0IHN0cmluZ19saXN0ICpicmFuY2hlcywgKnNraXBwZWQ7CisJc3RydWN0IGtub3duX3JlbW90ZXMgKmtlZXA7Cit9OworCitzdGF0aWMgaW50IGFkZF9icmFuY2hfZm9yX3JlbW92YWwoY29uc3QgY2hhciAqcmVmbmFtZSwKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgYnJhbmNoZXNfZm9yX3JlbW90ZSAqYnJhbmNoZXMgPSBjYl9kYXRhOworCXN0cnVjdCByZWZzcGVjX2l0ZW0gcmVmc3BlYzsKKwlzdHJ1Y3Qga25vd25fcmVtb3RlICprcjsKKworCW1lbXNldCgmcmVmc3BlYywgMCwgc2l6ZW9mKHJlZnNwZWMpKTsKKwlyZWZzcGVjLmRzdCA9IChjaGFyICopcmVmbmFtZTsKKwlpZiAocmVtb3RlX2ZpbmRfdHJhY2tpbmcoYnJhbmNoZXMtPnJlbW90ZSwgJnJlZnNwZWMpKQorCQlyZXR1cm4gMDsKKworCS8qIGRvbid0IGRlbGV0ZSBhIGJyYW5jaCBpZiBhbm90aGVyIHJlbW90ZSBhbHNvIHVzZXMgaXQgKi8KKwlmb3IgKGtyID0gYnJhbmNoZXMtPmtlZXAtPmxpc3Q7IGtyOyBrciA9IGtyLT5uZXh0KSB7CisJCW1lbXNldCgmcmVmc3BlYywgMCwgc2l6ZW9mKHJlZnNwZWMpKTsKKwkJcmVmc3BlYy5kc3QgPSAoY2hhciAqKXJlZm5hbWU7CisJCWlmICghcmVtb3RlX2ZpbmRfdHJhY2tpbmcoa3ItPnJlbW90ZSwgJnJlZnNwZWMpKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogZG9uJ3QgZGVsZXRlIG5vbi1yZW1vdGUtdHJhY2tpbmcgcmVmcyAqLworCWlmICghc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSkgeworCQkvKiBhZHZpc2UgdXNlciBob3cgdG8gZGVsZXRlIGxvY2FsIGJyYW5jaGVzICovCisJCWlmIChzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJCXN0cmluZ19saXN0X2FwcGVuZChicmFuY2hlcy0+c2tpcHBlZCwKKwkJCQkJICAgYWJicmV2X2JyYW5jaChyZWZuYW1lKSk7CisJCS8qIHNpbGVudGx5IHNraXAgb3ZlciBvdGhlciBub24tcmVtb3RlIHJlZnMgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJc3RyaW5nX2xpc3RfYXBwZW5kKGJyYW5jaGVzLT5icmFuY2hlcywgcmVmbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlbmFtZV9pbmZvIHsKKwljb25zdCBjaGFyICpvbGRfbmFtZTsKKwljb25zdCBjaGFyICpuZXdfbmFtZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlbW90ZV9icmFuY2hlczsKK307CisKK3N0YXRpYyBpbnQgcmVhZF9yZW1vdGVfYnJhbmNoZXMoY29uc3QgY2hhciAqcmVmbmFtZSwKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcmVuYW1lX2luZm8gKnJlbmFtZSA9IGNiX2RhdGE7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlpbnQgZmxhZzsKKwljb25zdCBjaGFyICpzeW1yZWY7CisKKwlzdHJidWZfYWRkZigmYnVmLCAicmVmcy9yZW1vdGVzLyVzLyIsIHJlbmFtZS0+b2xkX25hbWUpOworCWlmIChzdGFydHNfd2l0aChyZWZuYW1lLCBidWYuYnVmKSkgeworCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKHJlbmFtZS0+cmVtb3RlX2JyYW5jaGVzLCByZWZuYW1lKTsKKwkJc3ltcmVmID0gcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZm5hbWUsIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCSAgICBOVUxMLCAmZmxhZyk7CisJCWlmIChzeW1yZWYgJiYgKGZsYWcgJiBSRUZfSVNTWU1SRUYpKQorCQkJaXRlbS0+dXRpbCA9IHhzdHJkdXAoc3ltcmVmKTsKKwkJZWxzZQorCQkJaXRlbS0+dXRpbCA9IE5VTEw7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWlncmF0ZV9maWxlKHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBpOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlbW90ZS4lcy51cmwiLCByZW1vdGUtPm5hbWUpOworCWZvciAoaSA9IDA7IGkgPCByZW1vdGUtPnVybF9ucjsgaSsrKQorCQlnaXRfY29uZmlnX3NldF9tdWx0aXZhcihidWYuYnVmLCByZW1vdGUtPnVybFtpXSwgIl4kIiwgMCk7CisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZW1vdGUuJXMucHVzaCIsIHJlbW90ZS0+bmFtZSk7CisJZm9yIChpID0gMDsgaSA8IHJlbW90ZS0+cHVzaC5yYXdfbnI7IGkrKykKKwkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoYnVmLmJ1ZiwgcmVtb3RlLT5wdXNoLnJhd1tpXSwgIl4kIiwgMCk7CisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZW1vdGUuJXMuZmV0Y2giLCByZW1vdGUtPm5hbWUpOworCWZvciAoaSA9IDA7IGkgPCByZW1vdGUtPmZldGNoLnJhd19ucjsgaSsrKQorCQlnaXRfY29uZmlnX3NldF9tdWx0aXZhcihidWYuYnVmLCByZW1vdGUtPmZldGNoLnJhd1tpXSwgIl4kIiwgMCk7CisJaWYgKHJlbW90ZS0+b3JpZ2luID09IFJFTU9URV9SRU1PVEVTKQorCQl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aCgicmVtb3Rlcy8lcyIsIHJlbW90ZS0+bmFtZSkpOworCWVsc2UgaWYgKHJlbW90ZS0+b3JpZ2luID09IFJFTU9URV9CUkFOQ0hFUykKKwkJdW5saW5rX29yX3dhcm4oZ2l0X3BhdGgoImJyYW5jaGVzLyVzIiwgcmVtb3RlLT5uYW1lKSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHB1c2hfZGVmYXVsdF9pbmZvCit7CisJY29uc3QgY2hhciAqb2xkX25hbWU7CisJZW51bSBjb25maWdfc2NvcGUgc2NvcGU7CisJc3RydWN0IHN0cmJ1ZiBvcmlnaW47CisJaW50IGxpbmVucjsKK307CisKK3N0YXRpYyBpbnQgY29uZmlnX3JlYWRfcHVzaF9kZWZhdWx0KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsCisJdm9pZCAqY2IpCit7CisJc3RydWN0IHB1c2hfZGVmYXVsdF9pbmZvKiBpbmZvID0gY2I7CisJaWYgKHN0cmNtcChrZXksICJyZW1vdGUucHVzaGRlZmF1bHQiKSB8fAorCSAgICAhdmFsdWUgfHwgc3RyY21wKHZhbHVlLCBpbmZvLT5vbGRfbmFtZSkpCisJCXJldHVybiAwOworCisJaW5mby0+c2NvcGUgPSBjdXJyZW50X2NvbmZpZ19zY29wZSgpOworCXN0cmJ1Zl9yZXNldCgmaW5mby0+b3JpZ2luKTsKKwlzdHJidWZfYWRkc3RyKCZpbmZvLT5vcmlnaW4sIGN1cnJlbnRfY29uZmlnX25hbWUoKSk7CisJaW5mby0+bGluZW5yID0gY3VycmVudF9jb25maWdfbGluZSgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9wdXNoX2RlZmF1bHQoY29uc3QgY2hhciogb2xkX25hbWUsIGNvbnN0IGNoYXIqIG5ld19uYW1lKQoreworCXN0cnVjdCBwdXNoX2RlZmF1bHRfaW5mbyBwdXNoX2RlZmF1bHQgPSB7CisJCW9sZF9uYW1lLCBDT05GSUdfU0NPUEVfVU5LTk9XTiwgU1RSQlVGX0lOSVQsIC0xIH07CisJZ2l0X2NvbmZpZyhjb25maWdfcmVhZF9wdXNoX2RlZmF1bHQsICZwdXNoX2RlZmF1bHQpOworCWlmIChwdXNoX2RlZmF1bHQuc2NvcGUgPj0gQ09ORklHX1NDT1BFX0NPTU1BTkQpCisJCTsgLyogcGFzcyAqLworCWVsc2UgaWYgKHB1c2hfZGVmYXVsdC5zY29wZSA+PSBDT05GSUdfU0NPUEVfTE9DQUwpIHsKKwkJaW50IHJlc3VsdCA9IGdpdF9jb25maWdfc2V0X2dlbnRseSgicmVtb3RlLnB1c2hEZWZhdWx0IiwKKwkJCQkJCSAgIG5ld19uYW1lKTsKKwkJaWYgKG5ld19uYW1lICYmIHJlc3VsdCAmJiByZXN1bHQgIT0gQ09ORklHX05PVEhJTkdfU0VUKQorCQkJZGllKF8oImNvdWxkIG5vdCBzZXQgJyVzJyIpLCAicmVtb3RlLnB1c2hEZWZhdWx0Iik7CisJCWVsc2UgaWYgKCFuZXdfbmFtZSAmJiByZXN1bHQgJiYgcmVzdWx0ICE9IENPTkZJR19OT1RISU5HX1NFVCkKKwkJCWRpZShfKCJjb3VsZCBub3QgdW5zZXQgJyVzJyIpLCAicmVtb3RlLnB1c2hEZWZhdWx0Iik7CisJfSBlbHNlIGlmIChwdXNoX2RlZmF1bHQuc2NvcGUgPj0gQ09ORklHX1NDT1BFX1NZU1RFTSkgeworCQkvKiB3YXJuICovCisJCXdhcm5pbmcoXygiVGhlICVzIGNvbmZpZ3VyYXRpb24gcmVtb3RlLnB1c2hEZWZhdWx0IGluOlxuIgorCQkJICAiXHQlczolZFxuIgorCQkJICAibm93IG5hbWVzIHRoZSBub24tZXhpc3RlbnQgcmVtb3RlICclcyciKSwKKwkJCWNvbmZpZ19zY29wZV9uYW1lKHB1c2hfZGVmYXVsdC5zY29wZSksCisJCQlwdXNoX2RlZmF1bHQub3JpZ2luLmJ1ZiwgcHVzaF9kZWZhdWx0LmxpbmVuciwKKwkJCW9sZF9uYW1lKTsKKwl9Cit9CisKKworc3RhdGljIGludCBtdihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CisJc3RydWN0IHJlbW90ZSAqb2xkcmVtb3RlLCAqbmV3cmVtb3RlOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQsIGJ1ZjIgPSBTVFJCVUZfSU5JVCwgYnVmMyA9IFNUUkJVRl9JTklULAorCQlvbGRfcmVtb3RlX2NvbnRleHQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVtb3RlX2JyYW5jaGVzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHJlbmFtZV9pbmZvIHJlbmFtZTsKKwlpbnQgaSwgcmVmc3BlY191cGRhdGVkID0gMDsKKworCWlmIChhcmdjICE9IDMpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9yZW5hbWVfdXNhZ2UsIG9wdGlvbnMpOworCisJcmVuYW1lLm9sZF9uYW1lID0gYXJndlsxXTsKKwlyZW5hbWUubmV3X25hbWUgPSBhcmd2WzJdOworCXJlbmFtZS5yZW1vdGVfYnJhbmNoZXMgPSAmcmVtb3RlX2JyYW5jaGVzOworCisJb2xkcmVtb3RlID0gcmVtb3RlX2dldChyZW5hbWUub2xkX25hbWUpOworCWlmICghcmVtb3RlX2lzX2NvbmZpZ3VyZWQob2xkcmVtb3RlLCAxKSkKKwkJZGllKF8oIk5vIHN1Y2ggcmVtb3RlOiAnJXMnIiksIHJlbmFtZS5vbGRfbmFtZSk7CisKKwlpZiAoIXN0cmNtcChyZW5hbWUub2xkX25hbWUsIHJlbmFtZS5uZXdfbmFtZSkgJiYgb2xkcmVtb3RlLT5vcmlnaW4gIT0gUkVNT1RFX0NPTkZJRykKKwkJcmV0dXJuIG1pZ3JhdGVfZmlsZShvbGRyZW1vdGUpOworCisJbmV3cmVtb3RlID0gcmVtb3RlX2dldChyZW5hbWUubmV3X25hbWUpOworCWlmIChyZW1vdGVfaXNfY29uZmlndXJlZChuZXdyZW1vdGUsIDEpKQorCQlkaWUoXygicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIpLCByZW5hbWUubmV3X25hbWUpOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlZnMvaGVhZHMvdGVzdDpyZWZzL3JlbW90ZXMvJXMvdGVzdCIsIHJlbmFtZS5uZXdfbmFtZSk7CisJaWYgKCF2YWxpZF9mZXRjaF9yZWZzcGVjKGJ1Zi5idWYpKQorCQlkaWUoXygiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIpLCByZW5hbWUubmV3X25hbWUpOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZW1vdGUuJXMiLCByZW5hbWUub2xkX25hbWUpOworCXN0cmJ1Zl9hZGRmKCZidWYyLCAicmVtb3RlLiVzIiwgcmVuYW1lLm5ld19uYW1lKTsKKwlpZiAoZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbihidWYuYnVmLCBidWYyLmJ1ZikgPCAxKQorCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciKSwKKwkJCQlidWYuYnVmLCBidWYyLmJ1Zik7CisKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlbW90ZS4lcy5mZXRjaCIsIHJlbmFtZS5uZXdfbmFtZSk7CisJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoYnVmLmJ1ZiwgTlVMTCwgTlVMTCwgMSk7CisJc3RyYnVmX2FkZGYoJm9sZF9yZW1vdGVfY29udGV4dCwgIjpyZWZzL3JlbW90ZXMvJXMvIiwgcmVuYW1lLm9sZF9uYW1lKTsKKwlmb3IgKGkgPSAwOyBpIDwgb2xkcmVtb3RlLT5mZXRjaC5yYXdfbnI7IGkrKykgeworCQljaGFyICpwdHI7CisKKwkJc3RyYnVmX3Jlc2V0KCZidWYyKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmMiwgb2xkcmVtb3RlLT5mZXRjaC5yYXdbaV0pOworCQlwdHIgPSBzdHJzdHIoYnVmMi5idWYsIG9sZF9yZW1vdGVfY29udGV4dC5idWYpOworCQlpZiAocHRyKSB7CisJCQlyZWZzcGVjX3VwZGF0ZWQgPSAxOworCQkJc3RyYnVmX3NwbGljZSgmYnVmMiwKKwkJCQkgICAgICBwdHItYnVmMi5idWYgKyBzdHJsZW4oIjpyZWZzL3JlbW90ZXMvIiksCisJCQkJICAgICAgc3RybGVuKHJlbmFtZS5vbGRfbmFtZSksIHJlbmFtZS5uZXdfbmFtZSwKKwkJCQkgICAgICBzdHJsZW4ocmVuYW1lLm5ld19uYW1lKSk7CisJCX0gZWxzZQorCQkJd2FybmluZyhfKCJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorCQkJCSAgIlx0JXNcbiIKKwkJCQkgICJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIpLAorCQkJCWJ1ZjIuYnVmKTsKKworCQlnaXRfY29uZmlnX3NldF9tdWx0aXZhcihidWYuYnVmLCBidWYyLmJ1ZiwgIl4kIiwgMCk7CisJfQorCisJcmVhZF9icmFuY2hlcygpOworCWZvciAoaSA9IDA7IGkgPCBicmFuY2hfbGlzdC5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gYnJhbmNoX2xpc3QuaXRlbXMgKyBpOworCQlzdHJ1Y3QgYnJhbmNoX2luZm8gKmluZm8gPSBpdGVtLT51dGlsOworCQlpZiAoaW5mby0+cmVtb3RlX25hbWUgJiYgIXN0cmNtcChpbmZvLT5yZW1vdGVfbmFtZSwgcmVuYW1lLm9sZF9uYW1lKSkgeworCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgImJyYW5jaC4lcy5yZW1vdGUiLCBpdGVtLT5zdHJpbmcpOworCQkJZ2l0X2NvbmZpZ19zZXQoYnVmLmJ1ZiwgcmVuYW1lLm5ld19uYW1lKTsKKwkJfQorCQlpZiAoaW5mby0+cHVzaF9yZW1vdGVfbmFtZSAmJiAhc3RyY21wKGluZm8tPnB1c2hfcmVtb3RlX25hbWUsIHJlbmFtZS5vbGRfbmFtZSkpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICJicmFuY2guJXMucHVzaHJlbW90ZSIsIGl0ZW0tPnN0cmluZyk7CisJCQlnaXRfY29uZmlnX3NldChidWYuYnVmLCByZW5hbWUubmV3X25hbWUpOworCQl9CisJfQorCisJaWYgKCFyZWZzcGVjX3VwZGF0ZWQpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBGaXJzdCByZW1vdmUgc3ltcmVmcywgdGhlbiByZW5hbWUgdGhlIHJlc3QsIGZpbmFsbHkgY3JlYXRlCisJICogdGhlIG5ldyBzeW1yZWZzLgorCSAqLworCWZvcl9lYWNoX3JlZihyZWFkX3JlbW90ZV9icmFuY2hlcywgJnJlbmFtZSk7CisJZm9yIChpID0gMDsgaSA8IHJlbW90ZV9icmFuY2hlcy5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gcmVtb3RlX2JyYW5jaGVzLml0ZW1zICsgaTsKKwkJaW50IGZsYWcgPSAwOworCisJCXJlYWRfcmVmX2Z1bGwoaXRlbS0+c3RyaW5nLCBSRVNPTFZFX1JFRl9SRUFESU5HLCBOVUxMLCAmZmxhZyk7CisJCWlmICghKGZsYWcgJiBSRUZfSVNTWU1SRUYpKQorCQkJY29udGludWU7CisJCWlmIChkZWxldGVfcmVmKE5VTEwsIGl0ZW0tPnN0cmluZywgTlVMTCwgUkVGX05PX0RFUkVGKSkKKwkJCWRpZShfKCJkZWxldGluZyAnJXMnIGZhaWxlZCIpLCBpdGVtLT5zdHJpbmcpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3RlX2JyYW5jaGVzLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSByZW1vdGVfYnJhbmNoZXMuaXRlbXMgKyBpOworCisJCWlmIChpdGVtLT51dGlsKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBpdGVtLT5zdHJpbmcpOworCQlzdHJidWZfc3BsaWNlKCZidWYsIHN0cmxlbigicmVmcy9yZW1vdGVzLyIpLCBzdHJsZW4ocmVuYW1lLm9sZF9uYW1lKSwKKwkJCQlyZW5hbWUubmV3X25hbWUsIHN0cmxlbihyZW5hbWUubmV3X25hbWUpKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYyKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZjIsICJyZW1vdGU6IHJlbmFtZWQgJXMgdG8gJXMiLAorCQkJCWl0ZW0tPnN0cmluZywgYnVmLmJ1Zik7CisJCWlmIChyZW5hbWVfcmVmKGl0ZW0tPnN0cmluZywgYnVmLmJ1ZiwgYnVmMi5idWYpKQorCQkJZGllKF8oInJlbmFtaW5nICclcycgZmFpbGVkIiksIGl0ZW0tPnN0cmluZyk7CisJfQorCWZvciAoaSA9IDA7IGkgPCByZW1vdGVfYnJhbmNoZXMubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IHJlbW90ZV9icmFuY2hlcy5pdGVtcyArIGk7CisKKwkJaWYgKCFpdGVtLT51dGlsKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBpdGVtLT5zdHJpbmcpOworCQlzdHJidWZfc3BsaWNlKCZidWYsIHN0cmxlbigicmVmcy9yZW1vdGVzLyIpLCBzdHJsZW4ocmVuYW1lLm9sZF9uYW1lKSwKKwkJCQlyZW5hbWUubmV3X25hbWUsIHN0cmxlbihyZW5hbWUubmV3X25hbWUpKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYyKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmMiwgaXRlbS0+dXRpbCk7CisJCXN0cmJ1Zl9zcGxpY2UoJmJ1ZjIsIHN0cmxlbigicmVmcy9yZW1vdGVzLyIpLCBzdHJsZW4ocmVuYW1lLm9sZF9uYW1lKSwKKwkJCQlyZW5hbWUubmV3X25hbWUsIHN0cmxlbihyZW5hbWUubmV3X25hbWUpKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYzKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZjMsICJyZW1vdGU6IHJlbmFtZWQgJXMgdG8gJXMiLAorCQkJCWl0ZW0tPnN0cmluZywgYnVmLmJ1Zik7CisJCWlmIChjcmVhdGVfc3ltcmVmKGJ1Zi5idWYsIGJ1ZjIuYnVmLCBidWYzLmJ1ZikpCisJCQlkaWUoXygiY3JlYXRpbmcgJyVzJyBmYWlsZWQiKSwgYnVmLmJ1Zik7CisJfQorCXN0cmluZ19saXN0X2NsZWFyKCZyZW1vdGVfYnJhbmNoZXMsIDEpOworCisJaGFuZGxlX3B1c2hfZGVmYXVsdChyZW5hbWUub2xkX25hbWUsIHJlbmFtZS5uZXdfbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBybShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGtub3duX3JlbW90ZXMga25vd25fcmVtb3RlcyA9IHsgTlVMTCwgTlVMTCB9OworCXN0cnVjdCBzdHJpbmdfbGlzdCBicmFuY2hlcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBza2lwcGVkID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IGJyYW5jaGVzX2Zvcl9yZW1vdGUgY2JfZGF0YTsKKwlpbnQgaSwgcmVzdWx0OworCisJbWVtc2V0KCZjYl9kYXRhLCAwLCBzaXplb2YoY2JfZGF0YSkpOworCWNiX2RhdGEuYnJhbmNoZXMgPSAmYnJhbmNoZXM7CisJY2JfZGF0YS5za2lwcGVkID0gJnNraXBwZWQ7CisJY2JfZGF0YS5rZWVwID0gJmtub3duX3JlbW90ZXM7CisKKwlpZiAoYXJnYyAhPSAyKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfcm1fdXNhZ2UsIG9wdGlvbnMpOworCisJcmVtb3RlID0gcmVtb3RlX2dldChhcmd2WzFdKTsKKwlpZiAoIXJlbW90ZV9pc19jb25maWd1cmVkKHJlbW90ZSwgMSkpCisJCWRpZShfKCJObyBzdWNoIHJlbW90ZTogJyVzJyIpLCBhcmd2WzFdKTsKKworCWtub3duX3JlbW90ZXMudG9fZGVsZXRlID0gcmVtb3RlOworCWZvcl9lYWNoX3JlbW90ZShhZGRfa25vd25fcmVtb3RlLCAma25vd25fcmVtb3Rlcyk7CisKKwlyZWFkX2JyYW5jaGVzKCk7CisJZm9yIChpID0gMDsgaSA8IGJyYW5jaF9saXN0Lm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSBicmFuY2hfbGlzdC5pdGVtcyArIGk7CisJCXN0cnVjdCBicmFuY2hfaW5mbyAqaW5mbyA9IGl0ZW0tPnV0aWw7CisJCWlmIChpbmZvLT5yZW1vdGVfbmFtZSAmJiAhc3RyY21wKGluZm8tPnJlbW90ZV9uYW1lLCByZW1vdGUtPm5hbWUpKSB7CisJCQljb25zdCBjaGFyICprZXlzW10gPSB7ICJyZW1vdGUiLCAibWVyZ2UiLCBOVUxMIH0sICoqazsKKwkJCWZvciAoayA9IGtleXM7ICprOyBrKyspIHsKKwkJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgImJyYW5jaC4lcy4lcyIsCisJCQkJCQlpdGVtLT5zdHJpbmcsICprKTsKKwkJCQlyZXN1bHQgPSBnaXRfY29uZmlnX3NldF9nZW50bHkoYnVmLmJ1ZiwgTlVMTCk7CisJCQkJaWYgKHJlc3VsdCAmJiByZXN1bHQgIT0gQ09ORklHX05PVEhJTkdfU0VUKQorCQkJCQlkaWUoXygiY291bGQgbm90IHVuc2V0ICclcyciKSwgYnVmLmJ1Zik7CisJCQl9CisJCX0KKwkJaWYgKGluZm8tPnB1c2hfcmVtb3RlX25hbWUgJiYgIXN0cmNtcChpbmZvLT5wdXNoX3JlbW90ZV9uYW1lLCByZW1vdGUtPm5hbWUpKSB7CisJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQlzdHJidWZfYWRkZigmYnVmLCAiYnJhbmNoLiVzLnB1c2hyZW1vdGUiLCBpdGVtLT5zdHJpbmcpOworCQkJcmVzdWx0ID0gZ2l0X2NvbmZpZ19zZXRfZ2VudGx5KGJ1Zi5idWYsIE5VTEwpOworCQkJaWYgKHJlc3VsdCAmJiByZXN1bHQgIT0gQ09ORklHX05PVEhJTkdfU0VUKQorCQkJCWRpZShfKCJjb3VsZCBub3QgdW5zZXQgJyVzJyIpLCBidWYuYnVmKTsKKwkJfQorCX0KKworCS8qCisJICogV2UgY2Fubm90IGp1c3QgcGFzcyBhIGZ1bmN0aW9uIHRvIGZvcl9lYWNoX3JlZigpIHdoaWNoIGRlbGV0ZXMKKwkgKiB0aGUgYnJhbmNoZXMgb25lIGJ5IG9uZSwgc2luY2UgZm9yX2VhY2hfcmVmKCkgcmVsaWVzIG9uIGNhY2hlZAorCSAqIHJlZnMsIHdoaWNoIGFyZSBpbnZhbGlkYXRlZCB3aGVuIGRlbGV0aW5nIGEgYnJhbmNoLgorCSAqLworCWNiX2RhdGEucmVtb3RlID0gcmVtb3RlOworCXJlc3VsdCA9IGZvcl9lYWNoX3JlZihhZGRfYnJhbmNoX2Zvcl9yZW1vdmFsLCAmY2JfZGF0YSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlpZiAoIXJlc3VsdCkKKwkJcmVzdWx0ID0gZGVsZXRlX3JlZnMoInJlbW90ZTogcmVtb3ZlIiwgJmJyYW5jaGVzLCBSRUZfTk9fREVSRUYpOworCXN0cmluZ19saXN0X2NsZWFyKCZicmFuY2hlcywgMCk7CisKKwlpZiAoc2tpcHBlZC5ucikgeworCQlmcHJpbnRmX2xuKHN0ZGVyciwKKwkJCSAgIFFfKCJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisJCQkgICAgICAidG8gZGVsZXRlIGl0LCB1c2U6IiwKKwkJCSAgICAgICJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisJCQkgICAgICAidG8gZGVsZXRlIHRoZW0sIHVzZToiLAorCQkJICAgICAgc2tpcHBlZC5ucikpOworCQlmb3IgKGkgPSAwOyBpIDwgc2tpcHBlZC5ucjsgaSsrKQorCQkJZnByaW50ZihzdGRlcnIsICIgIGdpdCBicmFuY2ggLWQgJXNcbiIsCisJCQkJc2tpcHBlZC5pdGVtc1tpXS5zdHJpbmcpOworCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmc2tpcHBlZCwgMCk7CisKKwlpZiAoIXJlc3VsdCkgeworCQlzdHJidWZfYWRkZigmYnVmLCAicmVtb3RlLiVzIiwgcmVtb3RlLT5uYW1lKTsKKwkJaWYgKGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb24oYnVmLmJ1ZiwgTlVMTCkgPCAxKQorCQkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIpLCBidWYuYnVmKTsKKworCQloYW5kbGVfcHVzaF9kZWZhdWx0KHJlbW90ZS0+bmFtZSwgTlVMTCk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfcHVzaF9pbmZvKHZvaWQgKnV0aWwsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlzdHJ1Y3QgcHVzaF9pbmZvICppbmZvID0gdXRpbDsKKwlmcmVlKGluZm8tPmRlc3QpOworCWZyZWUoaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcmVtb3RlX3JlZl9zdGF0ZXMoc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcykKK3sKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3RhdGVzLT5uZXdfcmVmcywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlcy0+c3RhbGUsIDEpOworCXN0cmluZ19saXN0X2NsZWFyKCZzdGF0ZXMtPnRyYWNrZWQsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZzdGF0ZXMtPmhlYWRzLCAwKTsKKwlzdHJpbmdfbGlzdF9jbGVhcl9mdW5jKCZzdGF0ZXMtPnB1c2gsIGNsZWFyX3B1c2hfaW5mbyk7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX3JlZl90b190cmFja2VkX2xpc3QoY29uc3QgY2hhciAqcmVmbmFtZSwKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmc3BlY19pdGVtIHJlZnNwZWM7CisKKwlpZiAoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpCisJCXJldHVybiAwOworCisJbWVtc2V0KCZyZWZzcGVjLCAwLCBzaXplb2YocmVmc3BlYykpOworCXJlZnNwZWMuZHN0ID0gKGNoYXIgKilyZWZuYW1lOworCWlmICghcmVtb3RlX2ZpbmRfdHJhY2tpbmcoc3RhdGVzLT5yZW1vdGUsICZyZWZzcGVjKSkKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPnRyYWNrZWQsIGFiYnJldl9icmFuY2gocmVmc3BlYy5zcmMpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9yZW1vdGVfcmVmX3N0YXRlcyhjb25zdCBjaGFyICpuYW1lLAorCQkJCSBzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzLAorCQkJCSBpbnQgcXVlcnkpCit7CisJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0OworCWNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzOworCisJc3RhdGVzLT5yZW1vdGUgPSByZW1vdGVfZ2V0KG5hbWUpOworCWlmICghc3RhdGVzLT5yZW1vdGUpCisJCXJldHVybiBlcnJvcihfKCJObyBzdWNoIHJlbW90ZTogJyVzJyIpLCBuYW1lKTsKKworCXJlYWRfYnJhbmNoZXMoKTsKKworCWlmIChxdWVyeSkgeworCQl0cmFuc3BvcnQgPSB0cmFuc3BvcnRfZ2V0KHN0YXRlcy0+cmVtb3RlLCBzdGF0ZXMtPnJlbW90ZS0+dXJsX25yID4gMCA/CisJCQlzdGF0ZXMtPnJlbW90ZS0+dXJsWzBdIDogTlVMTCk7CisJCXJlbW90ZV9yZWZzID0gdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyh0cmFuc3BvcnQsIE5VTEwpOworCQl0cmFuc3BvcnRfZGlzY29ubmVjdCh0cmFuc3BvcnQpOworCisJCXN0YXRlcy0+cXVlcmllZCA9IDE7CisJCWlmIChxdWVyeSAmIEdFVF9SRUZfU1RBVEVTKQorCQkJZ2V0X3JlZl9zdGF0ZXMocmVtb3RlX3JlZnMsIHN0YXRlcyk7CisJCWlmIChxdWVyeSAmIEdFVF9IRUFEX05BTUVTKQorCQkJZ2V0X2hlYWRfbmFtZXMocmVtb3RlX3JlZnMsIHN0YXRlcyk7CisJCWlmIChxdWVyeSAmIEdFVF9QVVNIX1JFRl9TVEFURVMpCisJCQlnZXRfcHVzaF9yZWZfc3RhdGVzKHJlbW90ZV9yZWZzLCBzdGF0ZXMpOworCX0gZWxzZSB7CisJCWZvcl9lYWNoX3JlZihhcHBlbmRfcmVmX3RvX3RyYWNrZWRfbGlzdCwgc3RhdGVzKTsKKwkJc3RyaW5nX2xpc3Rfc29ydCgmc3RhdGVzLT50cmFja2VkKTsKKwkJZ2V0X3B1c2hfcmVmX3N0YXRlc19ub3F1ZXJ5KHN0YXRlcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzaG93X2luZm8geworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdDsKKwlzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzOworCWludCB3aWR0aCwgd2lkdGgyOworCWludCBhbnlfcmViYXNlOworfTsKKworc3RhdGljIGludCBhZGRfcmVtb3RlX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hvd19pbmZvICppbmZvID0gY2JfZGF0YTsKKwlpbnQgbiA9IHN0cmxlbihpdGVtLT5zdHJpbmcpOworCWlmIChuID4gaW5mby0+d2lkdGgpCisJCWluZm8tPndpZHRoID0gbjsKKwlzdHJpbmdfbGlzdF9pbnNlcnQoaW5mby0+bGlzdCwgaXRlbS0+c3RyaW5nKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X3JlbW90ZV9pbmZvX2l0ZW0oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHNob3dfaW5mbyAqaW5mbyA9IGNiX2RhdGE7CisJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcyA9IGluZm8tPnN0YXRlczsKKwljb25zdCBjaGFyICpuYW1lID0gaXRlbS0+c3RyaW5nOworCisJaWYgKHN0YXRlcy0+cXVlcmllZCkgeworCQljb25zdCBjaGFyICpmbXQgPSAiJXMiOworCQljb25zdCBjaGFyICphcmcgPSAiIjsKKwkJaWYgKHN0cmluZ19saXN0X2hhc19zdHJpbmcoJnN0YXRlcy0+bmV3X3JlZnMsIG5hbWUpKSB7CisJCQlmbXQgPSBfKCIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiKTsKKwkJCWFyZyA9IHN0YXRlcy0+cmVtb3RlLT5uYW1lOworCQl9IGVsc2UgaWYgKHN0cmluZ19saXN0X2hhc19zdHJpbmcoJnN0YXRlcy0+dHJhY2tlZCwgbmFtZSkpCisJCQlhcmcgPSBfKCIgdHJhY2tlZCIpOworCQllbHNlIGlmIChzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZzdGF0ZXMtPnN0YWxlLCBuYW1lKSkKKwkJCWFyZyA9IF8oIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIik7CisJCWVsc2UKKwkJCWFyZyA9IF8oIiA/Pz8iKTsKKwkJcHJpbnRmKCIgICAgJS0qcyIsIGluZm8tPndpZHRoLCBuYW1lKTsKKwkJcHJpbnRmKGZtdCwgYXJnKTsKKwkJcHJpbnRmKCJcbiIpOworCX0gZWxzZQorCQlwcmludGYoIiAgICAlc1xuIiwgbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGRfbG9jYWxfdG9fc2hvd19pbmZvKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpicmFuY2hfaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hvd19pbmZvICpzaG93X2luZm8gPSBjYl9kYXRhOworCXN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMgPSBzaG93X2luZm8tPnN0YXRlczsKKwlzdHJ1Y3QgYnJhbmNoX2luZm8gKmJyYW5jaF9pbmZvID0gYnJhbmNoX2l0ZW0tPnV0aWw7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJaW50IG47CisKKwlpZiAoIWJyYW5jaF9pbmZvLT5tZXJnZS5uciB8fCAhYnJhbmNoX2luZm8tPnJlbW90ZV9uYW1lIHx8CisJICAgIHN0cmNtcChzdGF0ZXMtPnJlbW90ZS0+bmFtZSwgYnJhbmNoX2luZm8tPnJlbW90ZV9uYW1lKSkKKwkJcmV0dXJuIDA7CisJaWYgKChuID0gc3RybGVuKGJyYW5jaF9pdGVtLT5zdHJpbmcpKSA+IHNob3dfaW5mby0+d2lkdGgpCisJCXNob3dfaW5mby0+d2lkdGggPSBuOworCWlmIChicmFuY2hfaW5mby0+cmViYXNlID49IFJFQkFTRV9UUlVFKQorCQlzaG93X2luZm8tPmFueV9yZWJhc2UgPSAxOworCisJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChzaG93X2luZm8tPmxpc3QsIGJyYW5jaF9pdGVtLT5zdHJpbmcpOworCWl0ZW0tPnV0aWwgPSBicmFuY2hfaW5mbzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfbG9jYWxfaW5mb19pdGVtKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzaG93X2luZm8gKnNob3dfaW5mbyA9IGNiX2RhdGE7CisJc3RydWN0IGJyYW5jaF9pbmZvICpicmFuY2hfaW5mbyA9IGl0ZW0tPnV0aWw7CisJc3RydWN0IHN0cmluZ19saXN0ICptZXJnZSA9ICZicmFuY2hfaW5mby0+bWVyZ2U7CisJaW50IHdpZHRoID0gc2hvd19pbmZvLT53aWR0aCArIDQ7CisJaW50IGk7CisKKwlpZiAoYnJhbmNoX2luZm8tPnJlYmFzZSA+PSBSRUJBU0VfVFJVRSAmJiBicmFuY2hfaW5mby0+bWVyZ2UubnIgPiAxKSB7CisJCWVycm9yKF8oImludmFsaWQgYnJhbmNoLiVzLm1lcmdlOyBjYW5ub3QgcmViYXNlIG9udG8gPiAxIGJyYW5jaCIpLAorCQkJaXRlbS0+c3RyaW5nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJpbnRmKCIgICAgJS0qcyAiLCBzaG93X2luZm8tPndpZHRoLCBpdGVtLT5zdHJpbmcpOworCWlmIChicmFuY2hfaW5mby0+cmViYXNlID49IFJFQkFTRV9UUlVFKSB7CisJCWNvbnN0IGNoYXIgKm1zZzsKKwkJaWYgKGJyYW5jaF9pbmZvLT5yZWJhc2UgPT0gUkVCQVNFX0lOVEVSQUNUSVZFKQorCQkJbXNnID0gXygicmViYXNlcyBpbnRlcmFjdGl2ZWx5IG9udG8gcmVtb3RlICVzIik7CisJCWVsc2UgaWYgKGJyYW5jaF9pbmZvLT5yZWJhc2UgPT0gUkVCQVNFX01FUkdFUykKKwkJCW1zZyA9IF8oInJlYmFzZXMgaW50ZXJhY3RpdmVseSAod2l0aCBtZXJnZXMpIG9udG8gIgorCQkJCSJyZW1vdGUgJXMiKTsKKwkJZWxzZQorCQkJbXNnID0gXygicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIpOworCQlwcmludGZfbG4obXNnLCBtZXJnZS0+aXRlbXNbMF0uc3RyaW5nKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChzaG93X2luZm8tPmFueV9yZWJhc2UpIHsKKwkJcHJpbnRmX2xuKF8oIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiKSwgbWVyZ2UtPml0ZW1zWzBdLnN0cmluZyk7CisJCXdpZHRoKys7CisJfSBlbHNlIHsKKwkJcHJpbnRmX2xuKF8oIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIpLCBtZXJnZS0+aXRlbXNbMF0uc3RyaW5nKTsKKwl9CisJZm9yIChpID0gMTsgaSA8IG1lcmdlLT5ucjsgaSsrKQorCQlwcmludGYoXygiJS0qcyAgICBhbmQgd2l0aCByZW1vdGUgJXNcbiIpLCB3aWR0aCwgIiIsCisJCSAgICAgICBtZXJnZS0+aXRlbXNbaV0uc3RyaW5nKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9wdXNoX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcHVzaF9pdGVtLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzaG93X2luZm8gKnNob3dfaW5mbyA9IGNiX2RhdGE7CisJc3RydWN0IHB1c2hfaW5mbyAqcHVzaF9pbmZvID0gcHVzaF9pdGVtLT51dGlsOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWludCBuOworCWlmICgobiA9IHN0cmxlbihwdXNoX2l0ZW0tPnN0cmluZykpID4gc2hvd19pbmZvLT53aWR0aCkKKwkJc2hvd19pbmZvLT53aWR0aCA9IG47CisJaWYgKChuID0gc3RybGVuKHB1c2hfaW5mby0+ZGVzdCkpID4gc2hvd19pbmZvLT53aWR0aDIpCisJCXNob3dfaW5mby0+d2lkdGgyID0gbjsKKwlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKHNob3dfaW5mby0+bGlzdCwgcHVzaF9pdGVtLT5zdHJpbmcpOworCWl0ZW0tPnV0aWwgPSBwdXNoX2l0ZW0tPnV0aWw7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTb3J0aW5nIGNvbXBhcmlzb24gZm9yIGEgc3RyaW5nIGxpc3QgdGhhdCBoYXMgcHVzaF9pbmZvCisgKiBzdHJ1Y3RzIGluIGl0cyB1dGlsIGZpZWxkCisgKi8KK3N0YXRpYyBpbnQgY21wX3N0cmluZ193aXRoX3B1c2goY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQoreworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICphID0gdmE7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmIgPSB2YjsKKwljb25zdCBzdHJ1Y3QgcHVzaF9pbmZvICphX3B1c2ggPSBhLT51dGlsOworCWNvbnN0IHN0cnVjdCBwdXNoX2luZm8gKmJfcHVzaCA9IGItPnV0aWw7CisJaW50IGNtcCA9IHN0cmNtcChhLT5zdHJpbmcsIGItPnN0cmluZyk7CisJcmV0dXJuIGNtcCA/IGNtcCA6IHN0cmNtcChhX3B1c2gtPmRlc3QsIGJfcHVzaC0+ZGVzdCk7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19wdXNoX2luZm9faXRlbShzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hvd19pbmZvICpzaG93X2luZm8gPSBjYl9kYXRhOworCXN0cnVjdCBwdXNoX2luZm8gKnB1c2hfaW5mbyA9IGl0ZW0tPnV0aWw7CisJY29uc3QgY2hhciAqc3JjID0gaXRlbS0+c3RyaW5nLCAqc3RhdHVzID0gTlVMTDsKKworCXN3aXRjaCAocHVzaF9pbmZvLT5zdGF0dXMpIHsKKwljYXNlIFBVU0hfU1RBVFVTX0NSRUFURToKKwkJc3RhdHVzID0gXygiY3JlYXRlIik7CisJCWJyZWFrOworCWNhc2UgUFVTSF9TVEFUVVNfREVMRVRFOgorCQlzdGF0dXMgPSBfKCJkZWxldGUiKTsKKwkJc3JjID0gXygiKG5vbmUpIik7CisJCWJyZWFrOworCWNhc2UgUFVTSF9TVEFUVVNfVVBUT0RBVEU6CisJCXN0YXR1cyA9IF8oInVwIHRvIGRhdGUiKTsKKwkJYnJlYWs7CisJY2FzZSBQVVNIX1NUQVRVU19GQVNURk9SV0FSRDoKKwkJc3RhdHVzID0gXygiZmFzdC1mb3J3YXJkYWJsZSIpOworCQlicmVhazsKKwljYXNlIFBVU0hfU1RBVFVTX09VVE9GREFURToKKwkJc3RhdHVzID0gXygibG9jYWwgb3V0IG9mIGRhdGUiKTsKKwkJYnJlYWs7CisJY2FzZSBQVVNIX1NUQVRVU19OT1RRVUVSSUVEOgorCQlicmVhazsKKwl9CisJaWYgKHN0YXR1cykgeworCQlpZiAocHVzaF9pbmZvLT5mb3JjZWQpCisJCQlwcmludGZfbG4oXygiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIpLCBzaG93X2luZm8tPndpZHRoLCBzcmMsCisJCQkgICAgICAgc2hvd19pbmZvLT53aWR0aDIsIHB1c2hfaW5mby0+ZGVzdCwgc3RhdHVzKTsKKwkJZWxzZQorCQkJcHJpbnRmX2xuKF8oIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiKSwgc2hvd19pbmZvLT53aWR0aCwgc3JjLAorCQkJICAgICAgIHNob3dfaW5mby0+d2lkdGgyLCBwdXNoX2luZm8tPmRlc3QsIHN0YXR1cyk7CisJfSBlbHNlIHsKKwkJaWYgKHB1c2hfaW5mby0+Zm9yY2VkKQorCQkJcHJpbnRmX2xuKF8oIiAgICAlLSpzIGZvcmNlcyB0byAlcyIpLCBzaG93X2luZm8tPndpZHRoLCBzcmMsCisJCQkgICAgICAgcHVzaF9pbmZvLT5kZXN0KTsKKwkJZWxzZQorCQkJcHJpbnRmX2xuKF8oIiAgICAlLSpzIHB1c2hlcyB0byAlcyIpLCBzaG93X2luZm8tPndpZHRoLCBzcmMsCisJCQkgICAgICAgcHVzaF9pbmZvLT5kZXN0KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X29uZV9lbnRyeShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpsaXN0ID0gcHJpdjsKKwlzdHJ1Y3Qgc3RyYnVmIHVybF9idWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICoqdXJsOworCWludCBpLCB1cmxfbnI7CisKKwlpZiAocmVtb3RlLT51cmxfbnIgPiAwKSB7CisJCXN0cmJ1Zl9hZGRmKCZ1cmxfYnVmLCAiJXMgKGZldGNoKSIsIHJlbW90ZS0+dXJsWzBdKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHJlbW90ZS0+bmFtZSktPnV0aWwgPQorCQkJCXN0cmJ1Zl9kZXRhY2goJnVybF9idWYsIE5VTEwpOworCX0gZWxzZQorCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgcmVtb3RlLT5uYW1lKS0+dXRpbCA9IE5VTEw7CisJaWYgKHJlbW90ZS0+cHVzaHVybF9ucikgeworCQl1cmwgPSByZW1vdGUtPnB1c2h1cmw7CisJCXVybF9uciA9IHJlbW90ZS0+cHVzaHVybF9ucjsKKwl9IGVsc2UgeworCQl1cmwgPSByZW1vdGUtPnVybDsKKwkJdXJsX25yID0gcmVtb3RlLT51cmxfbnI7CisJfQorCWZvciAoaSA9IDA7IGkgPCB1cmxfbnI7IGkrKykKKwl7CisJCXN0cmJ1Zl9hZGRmKCZ1cmxfYnVmLCAiJXMgKHB1c2gpIiwgdXJsW2ldKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHJlbW90ZS0+bmFtZSktPnV0aWwgPQorCQkJCXN0cmJ1Zl9kZXRhY2goJnVybF9idWYsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfYWxsKHZvaWQpCit7CisJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWludCByZXN1bHQ7CisKKwlsaXN0LnN0cmR1cF9zdHJpbmdzID0gMTsKKwlyZXN1bHQgPSBmb3JfZWFjaF9yZW1vdGUoZ2V0X29uZV9lbnRyeSwgJmxpc3QpOworCisJaWYgKCFyZXN1bHQpIHsKKwkJaW50IGk7CisKKwkJc3RyaW5nX2xpc3Rfc29ydCgmbGlzdCk7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gbGlzdC5pdGVtcyArIGk7CisJCQlpZiAodmVyYm9zZSkKKwkJCQlwcmludGYoIiVzXHQlc1xuIiwgaXRlbS0+c3RyaW5nLAorCQkJCQlpdGVtLT51dGlsID8gKGNvbnN0IGNoYXIgKilpdGVtLT51dGlsIDogIiIpOworCQkJZWxzZSB7CisJCQkJaWYgKGkgJiYgIXN0cmNtcCgoaXRlbSAtIDEpLT5zdHJpbmcsIGl0ZW0tPnN0cmluZykpCisJCQkJCWNvbnRpbnVlOworCQkJCXByaW50ZigiJXNcbiIsIGl0ZW0tPnN0cmluZyk7CisJCQl9CisJCX0KKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDEpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc2hvdyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IG5vX3F1ZXJ5ID0gMCwgcmVzdWx0ID0gMCwgcXVlcnlfZmxhZyA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCduJywgTlVMTCwgJm5vX3F1ZXJ5LCBOXygiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiKSksCisJCU9QVF9FTkQoKQorCX07CisJc3RydWN0IHJlZl9zdGF0ZXMgc3RhdGVzOworCXN0cnVjdCBzdHJpbmdfbGlzdCBpbmZvX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzaG93X2luZm8gaW5mbzsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3Nob3dfdXNhZ2UsCisJCQkgICAgIDApOworCisJaWYgKGFyZ2MgPCAxKQorCQlyZXR1cm4gc2hvd19hbGwoKTsKKworCWlmICghbm9fcXVlcnkpCisJCXF1ZXJ5X2ZsYWcgPSAoR0VUX1JFRl9TVEFURVMgfCBHRVRfSEVBRF9OQU1FUyB8IEdFVF9QVVNIX1JFRl9TVEFURVMpOworCisJbWVtc2V0KCZzdGF0ZXMsIDAsIHNpemVvZihzdGF0ZXMpKTsKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJaW5mby5zdGF0ZXMgPSAmc3RhdGVzOworCWluZm8ubGlzdCA9ICZpbmZvX2xpc3Q7CisJZm9yICg7IGFyZ2M7IGFyZ2MtLSwgYXJndisrKSB7CisJCWludCBpOworCQljb25zdCBjaGFyICoqdXJsOworCQlpbnQgdXJsX25yOworCisJCWdldF9yZW1vdGVfcmVmX3N0YXRlcygqYXJndiwgJnN0YXRlcywgcXVlcnlfZmxhZyk7CisKKwkJcHJpbnRmX2xuKF8oIiogcmVtb3RlICVzIiksICphcmd2KTsKKwkJcHJpbnRmX2xuKF8oIiAgRmV0Y2ggVVJMOiAlcyIpLCBzdGF0ZXMucmVtb3RlLT51cmxfbnIgPiAwID8KKwkJICAgICAgIHN0YXRlcy5yZW1vdGUtPnVybFswXSA6IF8oIihubyBVUkwpIikpOworCQlpZiAoc3RhdGVzLnJlbW90ZS0+cHVzaHVybF9ucikgeworCQkJdXJsID0gc3RhdGVzLnJlbW90ZS0+cHVzaHVybDsKKwkJCXVybF9uciA9IHN0YXRlcy5yZW1vdGUtPnB1c2h1cmxfbnI7CisJCX0gZWxzZSB7CisJCQl1cmwgPSBzdGF0ZXMucmVtb3RlLT51cmw7CisJCQl1cmxfbnIgPSBzdGF0ZXMucmVtb3RlLT51cmxfbnI7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHVybF9ucjsgaSsrKQorCQkJLyoKKwkJCSAqIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gJzonIHNob3VsZCBhbGlnbgorCQkJICogd2l0aCB0aGUgb25lIGluICIgRmV0Y2ggVVJMOiAlcyIKKwkJCSAqIHRyYW5zbGF0aW9uLgorCQkJICovCisJCQlwcmludGZfbG4oXygiICBQdXNoICBVUkw6ICVzIiksIHVybFtpXSk7CisJCWlmICghaSkKKwkJCXByaW50Zl9sbihfKCIgIFB1c2ggIFVSTDogJXMiKSwgXygiKG5vIFVSTCkiKSk7CisJCWlmIChub19xdWVyeSkKKwkJCXByaW50Zl9sbihfKCIgIEhFQUQgYnJhbmNoOiAlcyIpLCBfKCIobm90IHF1ZXJpZWQpIikpOworCQllbHNlIGlmICghc3RhdGVzLmhlYWRzLm5yKQorCQkJcHJpbnRmX2xuKF8oIiAgSEVBRCBicmFuY2g6ICVzIiksIF8oIih1bmtub3duKSIpKTsKKwkJZWxzZSBpZiAoc3RhdGVzLmhlYWRzLm5yID09IDEpCisJCQlwcmludGZfbG4oXygiICBIRUFEIGJyYW5jaDogJXMiKSwgc3RhdGVzLmhlYWRzLml0ZW1zWzBdLnN0cmluZyk7CisJCWVsc2UgeworCQkJcHJpbnRmKF8oIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywiCisJCQkJICIgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIpKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBzdGF0ZXMuaGVhZHMubnI7IGkrKykKKwkJCQlwcmludGYoIiAgICAlc1xuIiwgc3RhdGVzLmhlYWRzLml0ZW1zW2ldLnN0cmluZyk7CisJCX0KKworCQkvKiByZW1vdGUgYnJhbmNoIGluZm8gKi8KKwkJaW5mby53aWR0aCA9IDA7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0KCZzdGF0ZXMubmV3X3JlZnMsIGFkZF9yZW1vdGVfdG9fc2hvd19pbmZvLCAmaW5mbyk7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0KCZzdGF0ZXMudHJhY2tlZCwgYWRkX3JlbW90ZV90b19zaG93X2luZm8sICZpbmZvKTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3QoJnN0YXRlcy5zdGFsZSwgYWRkX3JlbW90ZV90b19zaG93X2luZm8sICZpbmZvKTsKKwkJaWYgKGluZm8ubGlzdC0+bnIpCisJCQlwcmludGZfbG4oUV8oIiAgUmVtb3RlIGJyYW5jaDolcyIsCisJCQkJICAgICAiICBSZW1vdGUgYnJhbmNoZXM6JXMiLAorCQkJCSAgICAgaW5mby5saXN0LT5uciksCisJCQkJICBub19xdWVyeSA/IF8oIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIpIDogIiIpOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdChpbmZvLmxpc3QsIHNob3dfcmVtb3RlX2luZm9faXRlbSwgJmluZm8pOworCQlzdHJpbmdfbGlzdF9jbGVhcihpbmZvLmxpc3QsIDApOworCisJCS8qIGdpdCBwdWxsIGluZm8gKi8KKwkJaW5mby53aWR0aCA9IDA7CisJCWluZm8uYW55X3JlYmFzZSA9IDA7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0KCZicmFuY2hfbGlzdCwgYWRkX2xvY2FsX3RvX3Nob3dfaW5mbywgJmluZm8pOworCQlpZiAoaW5mby5saXN0LT5ucikKKwkJCXByaW50Zl9sbihRXygiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiLAorCQkJCSAgICAgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiLAorCQkJCSAgICAgaW5mby5saXN0LT5ucikpOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdChpbmZvLmxpc3QsIHNob3dfbG9jYWxfaW5mb19pdGVtLCAmaW5mbyk7CisJCXN0cmluZ19saXN0X2NsZWFyKGluZm8ubGlzdCwgMCk7CisKKwkJLyogZ2l0IHB1c2ggaW5mbyAqLworCQlpZiAoc3RhdGVzLnJlbW90ZS0+bWlycm9yKQorCQkJcHJpbnRmX2xuKF8oIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciKSk7CisKKwkJaW5mby53aWR0aCA9IGluZm8ud2lkdGgyID0gMDsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3QoJnN0YXRlcy5wdXNoLCBhZGRfcHVzaF90b19zaG93X2luZm8sICZpbmZvKTsKKwkJUVNPUlQoaW5mby5saXN0LT5pdGVtcywgaW5mby5saXN0LT5uciwgY21wX3N0cmluZ193aXRoX3B1c2gpOworCQlpZiAoaW5mby5saXN0LT5ucikKKwkJCXByaW50Zl9sbihRXygiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIsCisJCQkJICAgICAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiLAorCQkJCSAgICAgaW5mby5saXN0LT5uciksCisJCQkJICBub19xdWVyeSA/IF8oIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIpIDogIiIpOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdChpbmZvLmxpc3QsIHNob3dfcHVzaF9pbmZvX2l0ZW0sICZpbmZvKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoaW5mby5saXN0LCAwKTsKKworCQlmcmVlX3JlbW90ZV9yZWZfc3RhdGVzKCZzdGF0ZXMpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2hlYWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpLCBvcHRfYSA9IDAsIG9wdF9kID0gMCwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklULCBidWYyID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqaGVhZF9uYW1lID0gTlVMTDsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnYScsICJhdXRvIiwgJm9wdF9hLAorCQkJIE5fKCJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiKSksCisJCU9QVF9CT09MKCdkJywgImRlbGV0ZSIsICZvcHRfZCwKKwkJCSBOXygiZGVsZXRlIHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV9zZXRoZWFkX3VzYWdlLAorCQkJICAgICAwKTsKKwlpZiAoYXJnYykKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlZnMvcmVtb3Rlcy8lcy9IRUFEIiwgYXJndlswXSk7CisKKwlpZiAoIW9wdF9hICYmICFvcHRfZCAmJiBhcmdjID09IDIpIHsKKwkJaGVhZF9uYW1lID0geHN0cmR1cChhcmd2WzFdKTsKKwl9IGVsc2UgaWYgKG9wdF9hICYmICFvcHRfZCAmJiBhcmdjID09IDEpIHsKKwkJc3RydWN0IHJlZl9zdGF0ZXMgc3RhdGVzOworCQltZW1zZXQoJnN0YXRlcywgMCwgc2l6ZW9mKHN0YXRlcykpOworCQlnZXRfcmVtb3RlX3JlZl9zdGF0ZXMoYXJndlswXSwgJnN0YXRlcywgR0VUX0hFQURfTkFNRVMpOworCQlpZiAoIXN0YXRlcy5oZWFkcy5ucikKKwkJCXJlc3VsdCB8PSBlcnJvcihfKCJDYW5ub3QgZGV0ZXJtaW5lIHJlbW90ZSBIRUFEIikpOworCQllbHNlIGlmIChzdGF0ZXMuaGVhZHMubnIgPiAxKSB7CisJCQlyZXN1bHQgfD0gZXJyb3IoXygiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuICIKKwkJCQkJICAiUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIpKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBzdGF0ZXMuaGVhZHMubnI7IGkrKykKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgZ2l0IHJlbW90ZSBzZXQtaGVhZCAlcyAlc1xuIiwKKwkJCQkJYXJndlswXSwgc3RhdGVzLmhlYWRzLml0ZW1zW2ldLnN0cmluZyk7CisJCX0gZWxzZQorCQkJaGVhZF9uYW1lID0geHN0cmR1cChzdGF0ZXMuaGVhZHMuaXRlbXNbMF0uc3RyaW5nKTsKKwkJZnJlZV9yZW1vdGVfcmVmX3N0YXRlcygmc3RhdGVzKTsKKwl9IGVsc2UgaWYgKG9wdF9kICYmICFvcHRfYSAmJiBhcmdjID09IDEpIHsKKwkJaWYgKGRlbGV0ZV9yZWYoTlVMTCwgYnVmLmJ1ZiwgTlVMTCwgUkVGX05PX0RFUkVGKSkKKwkJCXJlc3VsdCB8PSBlcnJvcihfKCJDb3VsZCBub3QgZGVsZXRlICVzIiksIGJ1Zi5idWYpOworCX0gZWxzZQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfc2V0aGVhZF91c2FnZSwgb3B0aW9ucyk7CisKKwlpZiAoaGVhZF9uYW1lKSB7CisJCXN0cmJ1Zl9hZGRmKCZidWYyLCAicmVmcy9yZW1vdGVzLyVzLyVzIiwgYXJndlswXSwgaGVhZF9uYW1lKTsKKwkJLyogbWFrZSBzdXJlIGl0J3MgdmFsaWQgKi8KKwkJaWYgKCFyZWZfZXhpc3RzKGJ1ZjIuYnVmKSkKKwkJCXJlc3VsdCB8PSBlcnJvcihfKCJOb3QgYSB2YWxpZCByZWY6ICVzIiksIGJ1ZjIuYnVmKTsKKwkJZWxzZSBpZiAoY3JlYXRlX3N5bXJlZihidWYuYnVmLCBidWYyLmJ1ZiwgInJlbW90ZSBzZXQtaGVhZCIpKQorCQkJcmVzdWx0IHw9IGVycm9yKF8oIkNvdWxkIG5vdCBzZXR1cCAlcyIpLCBidWYuYnVmKTsKKwkJaWYgKG9wdF9hKQorCQkJcHJpbnRmKCIlcy9IRUFEIHNldCB0byAlc1xuIiwgYXJndlswXSwgaGVhZF9uYW1lKTsKKwkJZnJlZShoZWFkX25hbWUpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHBydW5lX3JlbW90ZShjb25zdCBjaGFyICpyZW1vdGUsIGludCBkcnlfcnVuKQoreworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCByZWZfc3RhdGVzIHN0YXRlczsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVmc190b19wcnVuZSA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJY29uc3QgY2hhciAqZGFuZ2xpbmdfbXNnID0gZHJ5X3J1bgorCQk/IF8oIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiKQorCQk6IF8oIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIpOworCisJbWVtc2V0KCZzdGF0ZXMsIDAsIHNpemVvZihzdGF0ZXMpKTsKKwlnZXRfcmVtb3RlX3JlZl9zdGF0ZXMocmVtb3RlLCAmc3RhdGVzLCBHRVRfUkVGX1NUQVRFUyk7CisKKwlpZiAoIXN0YXRlcy5zdGFsZS5ucikgeworCQlmcmVlX3JlbW90ZV9yZWZfc3RhdGVzKCZzdGF0ZXMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwcmludGZfbG4oXygiUHJ1bmluZyAlcyIpLCByZW1vdGUpOworCXByaW50Zl9sbihfKCJVUkw6ICVzIiksCisJCSAgc3RhdGVzLnJlbW90ZS0+dXJsX25yCisJCSAgPyBzdGF0ZXMucmVtb3RlLT51cmxbMF0KKwkJICA6IF8oIihubyBVUkwpIikpOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmc3RhdGVzLnN0YWxlKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJlZnNfdG9fcHJ1bmUsIGl0ZW0tPnV0aWwpOworCXN0cmluZ19saXN0X3NvcnQoJnJlZnNfdG9fcHJ1bmUpOworCisJaWYgKCFkcnlfcnVuKQorCQlyZXN1bHQgfD0gZGVsZXRlX3JlZnMoInJlbW90ZTogcHJ1bmUiLCAmcmVmc190b19wcnVuZSwgMCk7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZzdGF0ZXMuc3RhbGUpIHsKKwkJY29uc3QgY2hhciAqcmVmbmFtZSA9IGl0ZW0tPnV0aWw7CisKKwkJaWYgKGRyeV9ydW4pCisJCQlwcmludGZfbG4oXygiICogW3dvdWxkIHBydW5lXSAlcyIpLAorCQkJICAgICAgIGFiYnJldl9yZWYocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSk7CisJCWVsc2UKKwkJCXByaW50Zl9sbihfKCIgKiBbcHJ1bmVkXSAlcyIpLAorCQkJICAgICAgIGFiYnJldl9yZWYocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSk7CisJfQorCisJd2Fybl9kYW5nbGluZ19zeW1yZWZzKHN0ZG91dCwgZGFuZ2xpbmdfbXNnLCAmcmVmc190b19wcnVuZSk7CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmcmVmc190b19wcnVuZSwgMCk7CisJZnJlZV9yZW1vdGVfcmVmX3N0YXRlcygmc3RhdGVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHBydW5lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgZHJ5X3J1biA9IDAsIHJlc3VsdCA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fRFJZX1JVTigmZHJ5X3J1biwgTl8oImRyeSBydW4iKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV9wcnVuZV91c2FnZSwKKwkJCSAgICAgMCk7CisKKwlpZiAoYXJnYyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9wcnVuZV91c2FnZSwgb3B0aW9ucyk7CisKKwlmb3IgKDsgYXJnYzsgYXJnYy0tLCBhcmd2KyspCisJCXJlc3VsdCB8PSBwcnVuZV9yZW1vdGUoKmFyZ3YsIGRyeV9ydW4pOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBnZXRfcmVtb3RlX2RlZmF1bHQoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqcHJpdikKK3sKKwlpZiAoc3RyY21wKGtleSwgInJlbW90ZXMuZGVmYXVsdCIpID09IDApIHsKKwkJaW50ICpmb3VuZCA9IHByaXY7CisJCSpmb3VuZCA9IDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVwZGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGksIHBydW5lID0gLTE7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdwJywgInBydW5lIiwgJnBydW5lLAorCQkJIE5fKCJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIikpLAorCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCBhcmd2X2FycmF5IGZldGNoX2FyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisJaW50IGRlZmF1bHRfZGVmaW5lZCA9IDA7CisJaW50IHJldHZhbDsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3VwZGF0ZV91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjApOworCisJYXJndl9hcnJheV9wdXNoKCZmZXRjaF9hcmd2LCAiZmV0Y2giKTsKKworCWlmIChwcnVuZSAhPSAtMSkKKwkJYXJndl9hcnJheV9wdXNoKCZmZXRjaF9hcmd2LCBwcnVuZSA/ICItLXBydW5lIiA6ICItLW5vLXBydW5lIik7CisJaWYgKHZlcmJvc2UpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmZmV0Y2hfYXJndiwgIi12Iik7CisJYXJndl9hcnJheV9wdXNoKCZmZXRjaF9hcmd2LCAiLS1tdWx0aXBsZSIpOworCWlmIChhcmdjIDwgMikKKwkJYXJndl9hcnJheV9wdXNoKCZmZXRjaF9hcmd2LCAiZGVmYXVsdCIpOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaCgmZmV0Y2hfYXJndiwgYXJndltpXSk7CisKKwlpZiAoc3RyY21wKGZldGNoX2FyZ3YuYXJndltmZXRjaF9hcmd2LmFyZ2MtMV0sICJkZWZhdWx0IikgPT0gMCkgeworCQlnaXRfY29uZmlnKGdldF9yZW1vdGVfZGVmYXVsdCwgJmRlZmF1bHRfZGVmaW5lZCk7CisJCWlmICghZGVmYXVsdF9kZWZpbmVkKSB7CisJCQlhcmd2X2FycmF5X3BvcCgmZmV0Y2hfYXJndik7CisJCQlhcmd2X2FycmF5X3B1c2goJmZldGNoX2FyZ3YsICItLWFsbCIpOworCQl9CisJfQorCisJcmV0dmFsID0gcnVuX2NvbW1hbmRfdl9vcHQoZmV0Y2hfYXJndi5hcmd2LCBSVU5fR0lUX0NNRCk7CisJYXJndl9hcnJheV9jbGVhcigmZmV0Y2hfYXJndik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCByZW1vdmVfYWxsX2ZldGNoX3JlZnNwZWNzKGNvbnN0IGNoYXIgKmtleSkKK3sKKwlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfZ2VudGx5KGtleSwgTlVMTCwgTlVMTCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9icmFuY2hlcyhzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKipicmFuY2hlcywKKwkJCSBjb25zdCBjaGFyICprZXkpCit7CisJY29uc3QgY2hhciAqcmVtb3RlbmFtZSA9IHJlbW90ZS0+bmFtZTsKKwlpbnQgbWlycm9yID0gcmVtb3RlLT5taXJyb3I7CisJc3RydWN0IHN0cmJ1ZiByZWZzcGVjID0gU1RSQlVGX0lOSVQ7CisKKwlmb3IgKDsgKmJyYW5jaGVzOyBicmFuY2hlcysrKQorCQlhZGRfYnJhbmNoKGtleSwgKmJyYW5jaGVzLCByZW1vdGVuYW1lLCBtaXJyb3IsICZyZWZzcGVjKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWZzcGVjKTsKK30KKworc3RhdGljIGludCBzZXRfcmVtb3RlX2JyYW5jaGVzKGNvbnN0IGNoYXIgKnJlbW90ZW5hbWUsIGNvbnN0IGNoYXIgKipicmFuY2hlcywKKwkJCQlpbnQgYWRkX21vZGUpCit7CisJc3RydWN0IHN0cmJ1ZiBrZXkgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisKKwlzdHJidWZfYWRkZigma2V5LCAicmVtb3RlLiVzLmZldGNoIiwgcmVtb3RlbmFtZSk7CisKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KHJlbW90ZW5hbWUpOworCWlmICghcmVtb3RlX2lzX2NvbmZpZ3VyZWQocmVtb3RlLCAxKSkKKwkJZGllKF8oIk5vIHN1Y2ggcmVtb3RlICclcyciKSwgcmVtb3RlbmFtZSk7CisKKwlpZiAoIWFkZF9tb2RlICYmIHJlbW92ZV9hbGxfZmV0Y2hfcmVmc3BlY3Moa2V5LmJ1ZikpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmtleSk7CisJCXJldHVybiAxOworCX0KKwlhZGRfYnJhbmNoZXMocmVtb3RlLCBicmFuY2hlcywga2V5LmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgma2V5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfYnJhbmNoZXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBhZGRfbW9kZSA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdcMCcsICJhZGQiLCAmYWRkX21vZGUsIE5fKCJhZGQgYnJhbmNoIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9yZW1vdGVfc2V0YnJhbmNoZXNfdXNhZ2UsIDApOworCWlmIChhcmdjID09IDApIHsKKwkJZXJyb3IoXygibm8gcmVtb3RlIHNwZWNpZmllZCIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmVtb3RlX3NldGJyYW5jaGVzX3VzYWdlLCBvcHRpb25zKTsKKwl9CisJYXJndlthcmdjXSA9IE5VTEw7CisKKwlyZXR1cm4gc2V0X3JlbW90ZV9icmFuY2hlcyhhcmd2WzBdLCBhcmd2ICsgMSwgYWRkX21vZGUpOworfQorCitzdGF0aWMgaW50IGdldF91cmwoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpLCBwdXNoX21vZGUgPSAwLCBhbGxfbW9kZSA9IDA7CisJY29uc3QgY2hhciAqcmVtb3RlbmFtZSA9IE5VTEw7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCWNvbnN0IGNoYXIgKip1cmw7CisJaW50IHVybF9ucjsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woJ1wwJywgInB1c2giLCAmcHVzaF9tb2RlLAorCQkJIE5fKCJxdWVyeSBwdXNoIFVSTHMgcmF0aGVyIHRoYW4gZmV0Y2ggVVJMcyIpKSwKKwkJT1BUX0JPT0woJ1wwJywgImFsbCIsICZhbGxfbW9kZSwKKwkJCSBOXygicmV0dXJuIGFsbCBVUkxzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX2dldHVybF91c2FnZSwgMCk7CisKKwlpZiAoYXJnYyAhPSAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfZ2V0dXJsX3VzYWdlLCBvcHRpb25zKTsKKworCXJlbW90ZW5hbWUgPSBhcmd2WzBdOworCisJcmVtb3RlID0gcmVtb3RlX2dldChyZW1vdGVuYW1lKTsKKwlpZiAoIXJlbW90ZV9pc19jb25maWd1cmVkKHJlbW90ZSwgMSkpCisJCWRpZShfKCJObyBzdWNoIHJlbW90ZSAnJXMnIiksIHJlbW90ZW5hbWUpOworCisJdXJsX25yID0gMDsKKwlpZiAocHVzaF9tb2RlKSB7CisJCXVybCA9IHJlbW90ZS0+cHVzaHVybDsKKwkJdXJsX25yID0gcmVtb3RlLT5wdXNodXJsX25yOworCX0KKwkvKiBlbHNlIGZldGNoIG1vZGUgKi8KKworCS8qIFVzZSB0aGUgZmV0Y2ggVVJMIHdoZW4gbm8gcHVzaCBVUkxzIHdlcmUgZm91bmQgb3IgcmVxdWVzdGVkLiAqLworCWlmICghdXJsX25yKSB7CisJCXVybCA9IHJlbW90ZS0+dXJsOworCQl1cmxfbnIgPSByZW1vdGUtPnVybF9ucjsKKwl9CisKKwlpZiAoIXVybF9ucikKKwkJZGllKF8oIm5vIFVSTHMgY29uZmlndXJlZCBmb3IgcmVtb3RlICclcyciKSwgcmVtb3RlbmFtZSk7CisKKwlpZiAoYWxsX21vZGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVybF9ucjsgaSsrKQorCQkJcHJpbnRmX2xuKCIlcyIsIHVybFtpXSk7CisJfSBlbHNlIHsKKwkJcHJpbnRmX2xuKCIlcyIsICp1cmwpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF91cmwoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpLCBwdXNoX21vZGUgPSAwLCBhZGRfbW9kZSA9IDAsIGRlbGV0ZV9tb2RlID0gMDsKKwlpbnQgbWF0Y2hlcyA9IDAsIG5lZ2F0aXZlX21hdGNoZXMgPSAwOworCWNvbnN0IGNoYXIgKnJlbW90ZW5hbWUgPSBOVUxMOworCWNvbnN0IGNoYXIgKm5ld3VybCA9IE5VTEw7CisJY29uc3QgY2hhciAqb2xkdXJsID0gTlVMTDsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJcmVnZXhfdCBvbGRfcmVnZXg7CisJY29uc3QgY2hhciAqKnVybHNldDsKKwlpbnQgdXJsc2V0X25yOworCXN0cnVjdCBzdHJidWYgbmFtZV9idWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woJ1wwJywgInB1c2giLCAmcHVzaF9tb2RlLAorCQkJIE5fKCJtYW5pcHVsYXRlIHB1c2ggVVJMcyIpKSwKKwkJT1BUX0JPT0woJ1wwJywgImFkZCIsICZhZGRfbW9kZSwKKwkJCSBOXygiYWRkIFVSTCIpKSwKKwkJT1BUX0JPT0woJ1wwJywgImRlbGV0ZSIsICZkZWxldGVfbW9kZSwKKwkJCSAgICBOXygiZGVsZXRlIFVSTHMiKSksCisJCU9QVF9FTkQoKQorCX07CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfc2V0dXJsX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisKKwlpZiAoYWRkX21vZGUgJiYgZGVsZXRlX21vZGUpCisJCWRpZShfKCItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiKSk7CisKKwlpZiAoYXJnYyA8IDMgfHwgYXJnYyA+IDQgfHwgKChhZGRfbW9kZSB8fCBkZWxldGVfbW9kZSkgJiYgYXJnYyAhPSAzKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmVtb3RlX3NldHVybF91c2FnZSwgb3B0aW9ucyk7CisKKwlyZW1vdGVuYW1lID0gYXJndlsxXTsKKwluZXd1cmwgPSBhcmd2WzJdOworCWlmIChhcmdjID4gMykKKwkJb2xkdXJsID0gYXJndlszXTsKKworCWlmIChkZWxldGVfbW9kZSkKKwkJb2xkdXJsID0gbmV3dXJsOworCisJcmVtb3RlID0gcmVtb3RlX2dldChyZW1vdGVuYW1lKTsKKwlpZiAoIXJlbW90ZV9pc19jb25maWd1cmVkKHJlbW90ZSwgMSkpCisJCWRpZShfKCJObyBzdWNoIHJlbW90ZSAnJXMnIiksIHJlbW90ZW5hbWUpOworCisJaWYgKHB1c2hfbW9kZSkgeworCQlzdHJidWZfYWRkZigmbmFtZV9idWYsICJyZW1vdGUuJXMucHVzaHVybCIsIHJlbW90ZW5hbWUpOworCQl1cmxzZXQgPSByZW1vdGUtPnB1c2h1cmw7CisJCXVybHNldF9uciA9IHJlbW90ZS0+cHVzaHVybF9ucjsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZigmbmFtZV9idWYsICJyZW1vdGUuJXMudXJsIiwgcmVtb3RlbmFtZSk7CisJCXVybHNldCA9IHJlbW90ZS0+dXJsOworCQl1cmxzZXRfbnIgPSByZW1vdGUtPnVybF9ucjsKKwl9CisKKwkvKiBTcGVjaWFsIGNhc2VzIHRoYXQgYWRkIG5ldyBlbnRyeS4gKi8KKwlpZiAoKCFvbGR1cmwgJiYgIWRlbGV0ZV9tb2RlKSB8fCBhZGRfbW9kZSkgeworCQlpZiAoYWRkX21vZGUpCisJCQlnaXRfY29uZmlnX3NldF9tdWx0aXZhcihuYW1lX2J1Zi5idWYsIG5ld3VybCwKKwkJCQkJCSAgICAgICAiXiQiLCAwKTsKKwkJZWxzZQorCQkJZ2l0X2NvbmZpZ19zZXQobmFtZV9idWYuYnVmLCBuZXd1cmwpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBPbGQgVVJMIHNwZWNpZmllZC4gRGVtYW5kIHRoYXQgb25lIG1hdGNoZXMuICovCisJaWYgKHJlZ2NvbXAoJm9sZF9yZWdleCwgb2xkdXJsLCBSRUdfRVhURU5ERUQpKQorCQlkaWUoXygiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIiksIG9sZHVybCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdXJsc2V0X25yOyBpKyspCisJCWlmICghcmVnZXhlYygmb2xkX3JlZ2V4LCB1cmxzZXRbaV0sIDAsIE5VTEwsIDApKQorCQkJbWF0Y2hlcysrOworCQllbHNlCisJCQluZWdhdGl2ZV9tYXRjaGVzKys7CisJaWYgKCFkZWxldGVfbW9kZSAmJiAhbWF0Y2hlcykKKwkJZGllKF8oIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIpLCBvbGR1cmwpOworCWlmIChkZWxldGVfbW9kZSAmJiAhbmVnYXRpdmVfbWF0Y2hlcyAmJiAhcHVzaF9tb2RlKQorCQlkaWUoXygiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIikpOworCisJcmVnZnJlZSgmb2xkX3JlZ2V4KTsKKworCWlmICghZGVsZXRlX21vZGUpCisJCWdpdF9jb25maWdfc2V0X211bHRpdmFyKG5hbWVfYnVmLmJ1ZiwgbmV3dXJsLCBvbGR1cmwsIDApOworCWVsc2UKKwkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIobmFtZV9idWYuYnVmLCBOVUxMLCBvbGR1cmwsIDEpOworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lX2J1Zik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfcmVtb3RlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJiZSB2ZXJib3NlOyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYSBzdWJjb21tYW5kIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWludCByZXN1bHQ7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3VzYWdlLAorCQlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKworCWlmIChhcmdjIDwgMSkKKwkJcmVzdWx0ID0gc2hvd19hbGwoKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJhZGQiKSkKKwkJcmVzdWx0ID0gYWRkKGFyZ2MsIGFyZ3YpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInJlbmFtZSIpKQorCQlyZXN1bHQgPSBtdihhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJybSIpIHx8ICFzdHJjbXAoYXJndlswXSwgInJlbW92ZSIpKQorCQlyZXN1bHQgPSBybShhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJzZXQtaGVhZCIpKQorCQlyZXN1bHQgPSBzZXRfaGVhZChhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJzZXQtYnJhbmNoZXMiKSkKKwkJcmVzdWx0ID0gc2V0X2JyYW5jaGVzKGFyZ2MsIGFyZ3YpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImdldC11cmwiKSkKKwkJcmVzdWx0ID0gZ2V0X3VybChhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJzZXQtdXJsIikpCisJCXJlc3VsdCA9IHNldF91cmwoYXJnYywgYXJndik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAic2hvdyIpKQorCQlyZXN1bHQgPSBzaG93KGFyZ2MsIGFyZ3YpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInBydW5lIikpCisJCXJlc3VsdCA9IHBydW5lKGFyZ2MsIGFyZ3YpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInVwZGF0ZSIpKQorCQlyZXN1bHQgPSB1cGRhdGUoYXJnYywgYXJndik7CisJZWxzZSB7CisJCWVycm9yKF8oIlVua25vd24gc3ViY29tbWFuZDogJXMiKSwgYXJndlswXSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJcmV0dXJuIHJlc3VsdCA/IDEgOiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZXBhY2suYyBiL2J1aWx0aW4vcmVwYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYyODc3MwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmVwYWNrLmMKQEAgLTAsMCArMSw1ODIgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgIm1pZHguaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgInBydW5lLXBhY2tlZC5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInByb21pc29yLXJlbW90ZS5oIgorI2luY2x1ZGUgInNoYWxsb3cuaCIKKworc3RhdGljIGludCBkZWx0YV9iYXNlX29mZnNldCA9IDE7CitzdGF0aWMgaW50IHBhY2tfa2VwdF9vYmplY3RzID0gLTE7CitzdGF0aWMgaW50IHdyaXRlX2JpdG1hcHMgPSAtMTsKK3N0YXRpYyBpbnQgdXNlX2RlbHRhX2lzbGFuZHM7CitzdGF0aWMgY2hhciAqcGFja2RpciwgKnBhY2t0bXA7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBnaXRfcmVwYWNrX3VzYWdlW10gPSB7CisJTl8oImdpdCByZXBhY2sgWzxvcHRpb25zPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciBpbmNyZW1lbnRhbF9iaXRtYXBfY29uZmxpY3RfZXJyb3JbXSA9IE5fKAorIkluY3JlbWVudGFsIHJlcGFja3MgYXJlIGluY29tcGF0aWJsZSB3aXRoIGJpdG1hcCBpbmRleGVzLiAgVXNlXG4iCisiLS1uby13cml0ZS1iaXRtYXAtaW5kZXggb3IgZGlzYWJsZSB0aGUgcGFjay53cml0ZWJpdG1hcHMgY29uZmlndXJhdGlvbi4iCispOworCisKK3N0YXRpYyBpbnQgcmVwYWNrX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJyZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IikpIHsKKwkJZGVsdGFfYmFzZV9vZmZzZXQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJyZXBhY2sucGFja2tlcHRvYmplY3RzIikpIHsKKwkJcGFja19rZXB0X29iamVjdHMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJyZXBhY2sud3JpdGViaXRtYXBzIikgfHwKKwkgICAgIXN0cmNtcCh2YXIsICJwYWNrLndyaXRlYml0bWFwcyIpKSB7CisJCXdyaXRlX2JpdG1hcHMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJyZXBhY2sudXNlZGVsdGFpc2xhbmRzIikpIHsKKwkJdXNlX2RlbHRhX2lzbGFuZHMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworLyoKKyAqIFJlbW92ZSB0ZW1wb3JhcnkgJEdJVF9PQkpFQ1RfRElSRUNUT1JZL3BhY2svLnRtcC0kJC1wYWNrLSogZmlsZXMuCisgKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV90ZW1wb3JhcnlfZmlsZXModm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXNpemVfdCBkaXJsZW4sIHByZWZpeGxlbjsKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICplOworCisJZGlyID0gb3BlbmRpcihwYWNrZGlyKTsKKwlpZiAoIWRpcikKKwkJcmV0dXJuOworCisJLyogUG9pbnQgYXQgdGhlIHNsYXNoIGF0IHRoZSBlbmQgb2YgIi4uLi9vYmplY3RzL3BhY2svIiAqLworCWRpcmxlbiA9IHN0cmxlbihwYWNrZGlyKSArIDE7CisJc3RyYnVmX2FkZHN0cigmYnVmLCBwYWNrdG1wKTsKKwkvKiBIb2xkIHRoZSBsZW5ndGggb2YgICIudG1wLSVkLXBhY2stIiAqLworCXByZWZpeGxlbiA9IGJ1Zi5sZW4gLSBkaXJsZW47CisKKwl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpKSB7CisJCWlmIChzdHJuY21wKGUtPmRfbmFtZSwgYnVmLmJ1ZiArIGRpcmxlbiwgcHJlZml4bGVuKSkKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfc2V0bGVuKCZidWYsIGRpcmxlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZS0+ZF9uYW1lKTsKKwkJdW5saW5rKGJ1Zi5idWYpOworCX0KKwljbG9zZWRpcihkaXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfcGFja19vbl9zaWduYWwoaW50IHNpZ25vKQoreworCXJlbW92ZV90ZW1wb3JhcnlfZmlsZXMoKTsKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOworCXJhaXNlKHNpZ25vKTsKK30KKworLyoKKyAqIEFkZHMgYWxsIHBhY2tzIGhleCBzdHJpbmdzIHRvIHRoZSBmbmFtZSBsaXN0LCB3aGljaCBkbyBub3QKKyAqIGhhdmUgYSBjb3JyZXNwb25kaW5nIC5rZWVwIGZpbGUuIFRoZXNlIHBhY2tzIGFyZSBub3QgdG8KKyAqIGJlIGtlcHQgaWYgd2UgYXJlIGdvaW5nIHRvIHBhY2sgZXZlcnl0aGluZyBpbnRvIG9uZSBmaWxlLgorICovCitzdGF0aWMgdm9pZCBnZXRfbm9uX2tlcHRfcGFja19maWxlbmFtZXMoc3RydWN0IHN0cmluZ19saXN0ICpmbmFtZV9saXN0LAorCQkJCQljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmV4dHJhX2tlZXApCit7CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZTsKKwljaGFyICpmbmFtZTsKKworCWlmICghKGRpciA9IG9wZW5kaXIocGFja2RpcikpKQorCQlyZXR1cm47CisKKwl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJc2l6ZV90IGxlbjsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGV4dHJhX2tlZXAtPm5yOyBpKyspCisJCQlpZiAoIWZzcGF0aGNtcChlLT5kX25hbWUsIGV4dHJhX2tlZXAtPml0ZW1zW2ldLnN0cmluZykpCisJCQkJYnJlYWs7CisJCWlmIChleHRyYV9rZWVwLT5uciA+IDAgJiYgaSA8IGV4dHJhX2tlZXAtPm5yKQorCQkJY29udGludWU7CisKKwkJaWYgKCFzdHJpcF9zdWZmaXgoZS0+ZF9uYW1lLCAiLnBhY2siLCAmbGVuKSkKKwkJCWNvbnRpbnVlOworCisJCWZuYW1lID0geG1lbWR1cHooZS0+ZF9uYW1lLCBsZW4pOworCisJCWlmICghZmlsZV9leGlzdHMobWtwYXRoKCIlcy8lcy5rZWVwIiwgcGFja2RpciwgZm5hbWUpKSkKKwkJCXN0cmluZ19saXN0X2FwcGVuZF9ub2R1cChmbmFtZV9saXN0LCBmbmFtZSk7CisJCWVsc2UKKwkJCWZyZWUoZm5hbWUpOworCX0KKwljbG9zZWRpcihkaXIpOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfcmVkdW5kYW50X3BhY2soY29uc3QgY2hhciAqZGlyX25hbWUsIGNvbnN0IGNoYXIgKmJhc2VfbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy8lcy5wYWNrIiwgZGlyX25hbWUsIGJhc2VfbmFtZSk7CisJdW5saW5rX3BhY2tfcGF0aChidWYuYnVmLCAxKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RydWN0IHBhY2tfb2JqZWN0c19hcmdzIHsKKwljb25zdCBjaGFyICp3aW5kb3c7CisJY29uc3QgY2hhciAqd2luZG93X21lbW9yeTsKKwljb25zdCBjaGFyICpkZXB0aDsKKwljb25zdCBjaGFyICp0aHJlYWRzOworCWNvbnN0IGNoYXIgKm1heF9wYWNrX3NpemU7CisJaW50IG5vX3JldXNlX2RlbHRhOworCWludCBub19yZXVzZV9vYmplY3Q7CisJaW50IHF1aWV0OworCWludCBsb2NhbDsKK307CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfcGFja19vYmplY3RzKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQsCisJCQkJIGNvbnN0IHN0cnVjdCBwYWNrX29iamVjdHNfYXJncyAqYXJncykKK3sKKwlhcmd2X2FycmF5X3B1c2goJmNtZC0+YXJncywgInBhY2stb2JqZWN0cyIpOworCWlmIChhcmdzLT53aW5kb3cpCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNtZC0+YXJncywgIi0td2luZG93PSVzIiwgYXJncy0+d2luZG93KTsKKwlpZiAoYXJncy0+d2luZG93X21lbW9yeSkKKwkJYXJndl9hcnJheV9wdXNoZigmY21kLT5hcmdzLCAiLS13aW5kb3ctbWVtb3J5PSVzIiwgYXJncy0+d2luZG93X21lbW9yeSk7CisJaWYgKGFyZ3MtPmRlcHRoKQorCQlhcmd2X2FycmF5X3B1c2hmKCZjbWQtPmFyZ3MsICItLWRlcHRoPSVzIiwgYXJncy0+ZGVwdGgpOworCWlmIChhcmdzLT50aHJlYWRzKQorCQlhcmd2X2FycmF5X3B1c2hmKCZjbWQtPmFyZ3MsICItLXRocmVhZHM9JXMiLCBhcmdzLT50aHJlYWRzKTsKKwlpZiAoYXJncy0+bWF4X3BhY2tfc2l6ZSkKKwkJYXJndl9hcnJheV9wdXNoZigmY21kLT5hcmdzLCAiLS1tYXgtcGFjay1zaXplPSVzIiwgYXJncy0+bWF4X3BhY2tfc2l6ZSk7CisJaWYgKGFyZ3MtPm5vX3JldXNlX2RlbHRhKQorCQlhcmd2X2FycmF5X3B1c2hmKCZjbWQtPmFyZ3MsICItLW5vLXJldXNlLWRlbHRhIik7CisJaWYgKGFyZ3MtPm5vX3JldXNlX29iamVjdCkKKwkJYXJndl9hcnJheV9wdXNoZigmY21kLT5hcmdzLCAiLS1uby1yZXVzZS1vYmplY3QiKTsKKwlpZiAoYXJncy0+bG9jYWwpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLT5hcmdzLCAgIi0tbG9jYWwiKTsKKwlpZiAoYXJncy0+cXVpZXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLT5hcmdzLCAgIi0tcXVpZXQiKTsKKwlpZiAoZGVsdGFfYmFzZV9vZmZzZXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLT5hcmdzLCAgIi0tZGVsdGEtYmFzZS1vZmZzZXQiKTsKKwlhcmd2X2FycmF5X3B1c2goJmNtZC0+YXJncywgcGFja3RtcCk7CisJY21kLT5naXRfY21kID0gMTsKKwljbWQtPm91dCA9IC0xOworfQorCisvKgorICogV3JpdGUgb2lkIHRvIHRoZSBnaXZlbiBzdHJ1Y3QgY2hpbGRfcHJvY2VzcydzIHN0ZGluLCBzdGFydGluZyBpdCBmaXJzdCBpZgorICogbmVjZXNzYXJ5LgorICovCitzdGF0aWMgaW50IHdyaXRlX29pZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrLAorCQkgICAgIHVpbnQzMl90IHBvcywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kID0gZGF0YTsKKworCWlmIChjbWQtPmluID09IC0xKSB7CisJCWlmIChzdGFydF9jb21tYW5kKGNtZCkpCisJCQlkaWUoXygiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIpKTsKKwl9CisKKwl4d3JpdGUoY21kLT5pbiwgb2lkX3RvX2hleChvaWQpLCB0aGVfaGFzaF9hbGdvLT5oZXhzeik7CisJeHdyaXRlKGNtZC0+aW4sICJcbiIsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZXBhY2tfcHJvbWlzb3Jfb2JqZWN0cyhjb25zdCBzdHJ1Y3QgcGFja19vYmplY3RzX2FyZ3MgKmFyZ3MsCisJCQkJICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqbmFtZXMpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kID0gQ0hJTERfUFJPQ0VTU19JTklUOworCUZJTEUgKm91dDsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKworCXByZXBhcmVfcGFja19vYmplY3RzKCZjbWQsIGFyZ3MpOworCWNtZC5pbiA9IC0xOworCisJLyoKKwkgKiBORUVEU1dPUks6IEdpdmluZyBwYWNrLW9iamVjdHMgb25seSB0aGUgT0lEcyB3aXRob3V0IGFueSBvcmRlcmluZworCSAqIGhpbnRzIG1heSByZXN1bHQgaW4gc3Vib3B0aW1hbCBkZWx0YXMgaW4gdGhlIHJlc3VsdGluZyBwYWNrLiBTZWUgaWYKKwkgKiB0aGUgT0lEcyBjYW4gYmUgc2VudCB3aXRoIGZha2UgcGF0aHMgc3VjaCB0aGF0IHBhY2stb2JqZWN0cyBjYW4gdXNlIGEKKwkgKiB7dHlwZSAtPiBleGlzdGluZyBwYWNrIG9yZGVyfSBvcmRlcmluZyB3aGVuIGNvbXB1dGluZyBkZWx0YXMgaW5zdGVhZAorCSAqIG9mIGEge3R5cGUgLT4gc2l6ZX0gb3JkZXJpbmcsIHdoaWNoIG1heSBwcm9kdWNlIGJldHRlciBkZWx0YXMuCisJICovCisJZm9yX2VhY2hfcGFja2VkX29iamVjdCh3cml0ZV9vaWQsICZjbWQsCisJCQkgICAgICAgRk9SX0VBQ0hfT0JKRUNUX1BST01JU09SX09OTFkpOworCisJaWYgKGNtZC5pbiA9PSAtMSkKKwkJLyogTm8gcGFja2VkIG9iamVjdHM7IGNtZCB3YXMgbmV2ZXIgc3RhcnRlZCAqLworCQlyZXR1cm47CisKKwljbG9zZShjbWQuaW4pOworCisJb3V0ID0geGZkb3BlbihjbWQub3V0LCAiciIpOworCXdoaWxlIChzdHJidWZfZ2V0bGluZV9sZigmbGluZSwgb3V0KSAhPSBFT0YpIHsKKwkJY2hhciAqcHJvbWlzb3JfbmFtZTsKKwkJaW50IGZkOworCQlpZiAobGluZS5sZW4gIT0gdGhlX2hhc2hfYWxnby0+aGV4c3opCisJCQlkaWUoXygicmVwYWNrOiBFeHBlY3RpbmcgZnVsbCBoZXggb2JqZWN0IElEIGxpbmVzIG9ubHkgZnJvbSBwYWNrLW9iamVjdHMuIikpOworCQlzdHJpbmdfbGlzdF9hcHBlbmQobmFtZXMsIGxpbmUuYnVmKTsKKworCQkvKgorCQkgKiBwYWNrLW9iamVjdHMgY3JlYXRlcyB0aGUgLnBhY2sgYW5kIC5pZHggZmlsZXMsIGJ1dCBub3QgdGhlCisJCSAqIC5wcm9taXNvciBmaWxlLiBDcmVhdGUgdGhlIC5wcm9taXNvciBmaWxlLCB3aGljaCBpcyBlbXB0eS4KKwkJICoKKwkJICogTkVFRFNXT1JLOiBmZXRjaC1wYWNrIHNvbWV0aW1lcyBnZW5lcmF0ZXMgbm9uLWVtcHR5CisJCSAqIC5wcm9taXNvciBmaWxlcyBjb250YWluaW5nIHRoZSByZWYgbmFtZXMgYW5kIGFzc29jaWF0ZWQKKwkJICogaGFzaGVzIGF0IHRoZSBwb2ludCBvZiBnZW5lcmF0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nCisJCSAqIHBhY2tmaWxlLCBidXQgdGhpcyB3b3VsZCBub3QgcHJlc2VydmUgdGhlaXIgY29udGVudHMuIE1heWJlCisJCSAqIGNvbmNhdGVuYXRlIHRoZSBjb250ZW50cyBvZiBhbGwgLnByb21pc29yIGZpbGVzIGluc3RlYWQgb2YKKwkJICoganVzdCBjcmVhdGluZyBhIG5ldyBlbXB0eSBmaWxlLgorCQkgKi8KKwkJcHJvbWlzb3JfbmFtZSA9IG1rcGF0aGR1cCgiJXMtJXMucHJvbWlzb3IiLCBwYWNrdG1wLAorCQkJCQkgIGxpbmUuYnVmKTsKKwkJZmQgPSBvcGVuKHByb21pc29yX25hbWUsIE9fQ1JFQVR8T19FWENMfE9fV1JPTkxZLCAwNjAwKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gY3JlYXRlICclcyciKSwgcHJvbWlzb3JfbmFtZSk7CisJCWNsb3NlKGZkKTsKKwkJZnJlZShwcm9taXNvcl9uYW1lKTsKKwl9CisJZmNsb3NlKG91dCk7CisJaWYgKGZpbmlzaF9jb21tYW5kKCZjbWQpKQorCQlkaWUoXygiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiKSk7Cit9CisKKyNkZWZpbmUgQUxMX0lOVE9fT05FIDEKKyNkZWZpbmUgTE9PU0VOX1VOUkVBQ0hBQkxFIDIKKworaW50IGNtZF9yZXBhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJdW5zaWduZWQgb3B0aW9uYWw6MTsKKwl9IGV4dHNbXSA9IHsKKwkJeyIucGFjayJ9LAorCQl7Ii5pZHgifSwKKwkJeyIuYml0bWFwIiwgMX0sCisJCXsiLnByb21pc29yIiwgMX0sCisJfTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbWQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IHN0cmluZ19saXN0IG5hbWVzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IHJvbGxiYWNrID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhpc3RpbmdfcGFja3MgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaSwgZXh0LCByZXQsIGZhaWxlZDsKKwlGSUxFICpvdXQ7CisKKwkvKiB2YXJpYWJsZXMgdG8gYmUgZmlsbGVkIGJ5IG9wdGlvbiBwYXJzaW5nICovCisJaW50IHBhY2tfZXZlcnl0aGluZyA9IDA7CisJaW50IGRlbGV0ZV9yZWR1bmRhbnQgPSAwOworCWNvbnN0IGNoYXIgKnVucGFja191bnJlYWNoYWJsZSA9IE5VTEw7CisJaW50IGtlZXBfdW5yZWFjaGFibGUgPSAwOworCXN0cnVjdCBzdHJpbmdfbGlzdCBrZWVwX3BhY2tfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJaW50IG5vX3VwZGF0ZV9zZXJ2ZXJfaW5mbyA9IDA7CisJaW50IG1pZHhfY2xlYXJlZCA9IDA7CisJc3RydWN0IHBhY2tfb2JqZWN0c19hcmdzIHBvX2FyZ3MgPSB7TlVMTH07CisKKwlzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fcmVwYWNrX29wdGlvbnNbXSA9IHsKKwkJT1BUX0JJVCgnYScsIE5VTEwsICZwYWNrX2V2ZXJ5dGhpbmcsCisJCQkJTl8oInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIiksIEFMTF9JTlRPX09ORSksCisJCU9QVF9CSVQoJ0EnLCBOVUxMLCAmcGFja19ldmVyeXRoaW5nLAorCQkJCU5fKCJzYW1lIGFzIC1hLCBhbmQgdHVybiB1bnJlYWNoYWJsZSBvYmplY3RzIGxvb3NlIiksCisJCQkJICAgTE9PU0VOX1VOUkVBQ0hBQkxFIHwgQUxMX0lOVE9fT05FKSwKKwkJT1BUX0JPT0woJ2QnLCBOVUxMLCAmZGVsZXRlX3JlZHVuZGFudCwKKwkJCQlOXygicmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkIikpLAorCQlPUFRfQk9PTCgnZicsIE5VTEwsICZwb19hcmdzLm5vX3JldXNlX2RlbHRhLAorCQkJCU5fKCJwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cyIpKSwKKwkJT1BUX0JPT0woJ0YnLCBOVUxMLCAmcG9fYXJncy5ub19yZXVzZV9vYmplY3QsCisJCQkJTl8oInBhc3MgLS1uby1yZXVzZS1vYmplY3QgdG8gZ2l0LXBhY2stb2JqZWN0cyIpKSwKKwkJT1BUX0JPT0woJ24nLCBOVUxMLCAmbm9fdXBkYXRlX3NlcnZlcl9pbmZvLAorCQkJCU5fKCJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iKSksCisJCU9QVF9fUVVJRVQoJnBvX2FyZ3MucXVpZXQsIE5fKCJiZSBxdWlldCIpKSwKKwkJT1BUX0JPT0woJ2wnLCAibG9jYWwiLCAmcG9fYXJncy5sb2NhbCwKKwkJCQlOXygicGFzcyAtLWxvY2FsIHRvIGdpdC1wYWNrLW9iamVjdHMiKSksCisJCU9QVF9CT09MKCdiJywgIndyaXRlLWJpdG1hcC1pbmRleCIsICZ3cml0ZV9iaXRtYXBzLAorCQkJCU5fKCJ3cml0ZSBiaXRtYXAgaW5kZXgiKSksCisJCU9QVF9CT09MKCdpJywgImRlbHRhLWlzbGFuZHMiLCAmdXNlX2RlbHRhX2lzbGFuZHMsCisJCQkJTl8oInBhc3MgLS1kZWx0YS1pc2xhbmRzIHRvIGdpdC1wYWNrLW9iamVjdHMiKSksCisJCU9QVF9TVFJJTkcoMCwgInVucGFjay11bnJlYWNoYWJsZSIsICZ1bnBhY2tfdW5yZWFjaGFibGUsIE5fKCJhcHByb3hpZGF0ZSIpLAorCQkJCU5fKCJ3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzIikpLAorCQlPUFRfQk9PTCgnaycsICJrZWVwLXVucmVhY2hhYmxlIiwgJmtlZXBfdW5yZWFjaGFibGUsCisJCQkJTl8oIndpdGggLWEsIHJlcGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIikpLAorCQlPUFRfU1RSSU5HKDAsICJ3aW5kb3ciLCAmcG9fYXJncy53aW5kb3csIE5fKCJuIiksCisJCQkJTl8oInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIpKSwKKwkJT1BUX1NUUklORygwLCAid2luZG93LW1lbW9yeSIsICZwb19hcmdzLndpbmRvd19tZW1vcnksIE5fKCJieXRlcyIpLAorCQkJCU5fKCJzYW1lIGFzIHRoZSBhYm92ZSwgYnV0IGxpbWl0IG1lbW9yeSBzaXplIGluc3RlYWQgb2YgZW50cmllcyBjb3VudCIpKSwKKwkJT1BUX1NUUklORygwLCAiZGVwdGgiLCAmcG9fYXJncy5kZXB0aCwgTl8oIm4iKSwKKwkJCQlOXygibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIikpLAorCQlPUFRfU1RSSU5HKDAsICJ0aHJlYWRzIiwgJnBvX2FyZ3MudGhyZWFkcywgTl8oIm4iKSwKKwkJCQlOXygibGltaXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIikpLAorCQlPUFRfU1RSSU5HKDAsICJtYXgtcGFjay1zaXplIiwgJnBvX2FyZ3MubWF4X3BhY2tfc2l6ZSwgTl8oImJ5dGVzIiksCisJCQkJTl8oIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIikpLAorCQlPUFRfQk9PTCgwLCAicGFjay1rZXB0LW9iamVjdHMiLCAmcGFja19rZXB0X29iamVjdHMsCisJCQkJTl8oInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIikpLAorCQlPUFRfU1RSSU5HX0xJU1QoMCwgImtlZXAtcGFjayIsICZrZWVwX3BhY2tfbGlzdCwgTl8oIm5hbWUiKSwKKwkJCQlOXygiZG8gbm90IHJlcGFjayB0aGlzIHBhY2siKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKHJlcGFja19jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX3JlcGFja19vcHRpb25zLAorCQkJCWdpdF9yZXBhY2tfdXNhZ2UsIDApOworCisJaWYgKGRlbGV0ZV9yZWR1bmRhbnQgJiYgcmVwb3NpdG9yeV9mb3JtYXRfcHJlY2lvdXNfb2JqZWN0cykKKwkJZGllKF8oImNhbm5vdCBkZWxldGUgcGFja3MgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iKSk7CisKKwlpZiAoa2VlcF91bnJlYWNoYWJsZSAmJgorCSAgICAodW5wYWNrX3VucmVhY2hhYmxlIHx8IChwYWNrX2V2ZXJ5dGhpbmcgJiBMT09TRU5fVU5SRUFDSEFCTEUpKSkKKwkJZGllKF8oIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLUEgYXJlIGluY29tcGF0aWJsZSIpKTsKKworCWlmICh3cml0ZV9iaXRtYXBzIDwgMCkgeworCQlpZiAoIShwYWNrX2V2ZXJ5dGhpbmcgJiBBTExfSU5UT19PTkUpIHx8CisJCSAgICAhaXNfYmFyZV9yZXBvc2l0b3J5KCkpCisJCQl3cml0ZV9iaXRtYXBzID0gMDsKKwl9CisJaWYgKHBhY2tfa2VwdF9vYmplY3RzIDwgMCkKKwkJcGFja19rZXB0X29iamVjdHMgPSB3cml0ZV9iaXRtYXBzID4gMDsKKworCWlmICh3cml0ZV9iaXRtYXBzICYmICEocGFja19ldmVyeXRoaW5nICYgQUxMX0lOVE9fT05FKSkKKwkJZGllKF8oaW5jcmVtZW50YWxfYml0bWFwX2NvbmZsaWN0X2Vycm9yKSk7CisKKwlwYWNrZGlyID0gbWtwYXRoZHVwKCIlcy9wYWNrIiwgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CisJcGFja3RtcCA9IG1rcGF0aGR1cCgiJXMvLnRtcC0lZC1wYWNrIiwgcGFja2RpciwgKGludClnZXRwaWQoKSk7CisKKwlzaWdjaGFpbl9wdXNoX2NvbW1vbihyZW1vdmVfcGFja19vbl9zaWduYWwpOworCisJcHJlcGFyZV9wYWNrX29iamVjdHMoJmNtZCwgJnBvX2FyZ3MpOworCisJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0ta2VlcC10cnVlLXBhcmVudHMiKTsKKwlpZiAoIXBhY2tfa2VwdF9vYmplY3RzKQorCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1ob25vci1wYWNrLWtlZXAiKTsKKwlmb3IgKGkgPSAwOyBpIDwga2VlcF9wYWNrX2xpc3QubnI7IGkrKykKKwkJYXJndl9hcnJheV9wdXNoZigmY21kLmFyZ3MsICItLWtlZXAtcGFjaz0lcyIsCisJCQkJIGtlZXBfcGFja19saXN0Lml0ZW1zW2ldLnN0cmluZyk7CisJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tbm9uLWVtcHR5Iik7CisJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tYWxsIik7CisJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tcmVmbG9nIik7CisJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0taW5kZXhlZC1vYmplY3RzIik7CisJaWYgKGhhc19wcm9taXNvcl9yZW1vdGUoKSkKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIik7CisJaWYgKHdyaXRlX2JpdG1hcHMgPiAwKQorCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS13cml0ZS1iaXRtYXAtaW5kZXgiKTsKKwllbHNlIGlmICh3cml0ZV9iaXRtYXBzIDwgMCkKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0td3JpdGUtYml0bWFwLWluZGV4LXF1aWV0Iik7CisJaWYgKHVzZV9kZWx0YV9pc2xhbmRzKQorCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1kZWx0YS1pc2xhbmRzIik7CisKKwlpZiAocGFja19ldmVyeXRoaW5nICYgQUxMX0lOVE9fT05FKSB7CisJCWdldF9ub25fa2VwdF9wYWNrX2ZpbGVuYW1lcygmZXhpc3RpbmdfcGFja3MsICZrZWVwX3BhY2tfbGlzdCk7CisKKwkJcmVwYWNrX3Byb21pc29yX29iamVjdHMoJnBvX2FyZ3MsICZuYW1lcyk7CisKKwkJaWYgKGV4aXN0aW5nX3BhY2tzLm5yICYmIGRlbGV0ZV9yZWR1bmRhbnQpIHsKKwkJCWlmICh1bnBhY2tfdW5yZWFjaGFibGUpIHsKKwkJCQlhcmd2X2FycmF5X3B1c2hmKCZjbWQuYXJncywKKwkJCQkJCSItLXVucGFjay11bnJlYWNoYWJsZT0lcyIsCisJCQkJCQl1bnBhY2tfdW5yZWFjaGFibGUpOworCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmVudl9hcnJheSwgIkdJVF9SRUZfUEFSQU5PSUE9MSIpOworCQkJfSBlbHNlIGlmIChwYWNrX2V2ZXJ5dGhpbmcgJiBMT09TRU5fVU5SRUFDSEFCTEUpIHsKKwkJCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLAorCQkJCQkJIi0tdW5wYWNrLXVucmVhY2hhYmxlIik7CisJCQl9IGVsc2UgaWYgKGtlZXBfdW5yZWFjaGFibGUpIHsKKwkJCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1rZWVwLXVucmVhY2hhYmxlIik7CisJCQkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tcGFjay1sb29zZS11bnJlYWNoYWJsZSIpOworCQkJfSBlbHNlIHsKKwkJCQlhcmd2X2FycmF5X3B1c2goJmNtZC5lbnZfYXJyYXksICJHSVRfUkVGX1BBUkFOT0lBPTEiKTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLXVucGFja2VkIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLWluY3JlbWVudGFsIik7CisJfQorCisJY21kLm5vX3N0ZGluID0gMTsKKworCXJldCA9IHN0YXJ0X2NvbW1hbmQoJmNtZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW91dCA9IHhmZG9wZW4oY21kLm91dCwgInIiKTsKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmVfbGYoJmxpbmUsIG91dCkgIT0gRU9GKSB7CisJCWlmIChsaW5lLmxlbiAhPSB0aGVfaGFzaF9hbGdvLT5oZXhzeikKKwkJCWRpZShfKCJyZXBhY2s6IEV4cGVjdGluZyBmdWxsIGhleCBvYmplY3QgSUQgbGluZXMgb25seSBmcm9tIHBhY2stb2JqZWN0cy4iKSk7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmbmFtZXMsIGxpbmUuYnVmKTsKKwl9CisJZmNsb3NlKG91dCk7CisJcmV0ID0gZmluaXNoX2NvbW1hbmQoJmNtZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghbmFtZXMubnIgJiYgIXBvX2FyZ3MucXVpZXQpCisJCXByaW50Zl9sbihfKCJOb3RoaW5nIG5ldyB0byBwYWNrLiIpKTsKKworCWNsb3NlX29iamVjdF9zdG9yZSh0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cyk7CisKKwkvKgorCSAqIE9rIHdlIGhhdmUgcHJlcGFyZWQgYWxsIG5ldyBwYWNrZmlsZXMuCisJICogRmlyc3Qgc2VlIGlmIHRoZXJlIGFyZSBwYWNrcyBvZiB0aGUgc2FtZSBuYW1lIGFuZCBpZiBzbworCSAqIGlmIHdlIGNhbiBtb3ZlIHRoZW0gb3V0IG9mIHRoZSB3YXkgKHRoaXMgY2FuIGhhcHBlbiBpZiB3ZQorCSAqIHJlcGFja2VkIGltbWVkaWF0ZWx5IGFmdGVyIHBhY2tpbmcgZnVsbHkuCisJICovCisJZmFpbGVkID0gMDsKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZuYW1lcykgeworCQlmb3IgKGV4dCA9IDA7IGV4dCA8IEFSUkFZX1NJWkUoZXh0cyk7IGV4dCsrKSB7CisJCQljaGFyICpmbmFtZSwgKmZuYW1lX29sZDsKKworCQkJaWYgKCFtaWR4X2NsZWFyZWQpIHsKKwkJCQljbGVhcl9taWR4X2ZpbGUodGhlX3JlcG9zaXRvcnkpOworCQkJCW1pZHhfY2xlYXJlZCA9IDE7CisJCQl9CisKKwkJCWZuYW1lID0gbWtwYXRoZHVwKCIlcy9wYWNrLSVzJXMiLCBwYWNrZGlyLAorCQkJCQkJaXRlbS0+c3RyaW5nLCBleHRzW2V4dF0ubmFtZSk7CisJCQlpZiAoIWZpbGVfZXhpc3RzKGZuYW1lKSkgeworCQkJCWZyZWUoZm5hbWUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlmbmFtZV9vbGQgPSBta3BhdGhkdXAoIiVzL29sZC0lcyVzIiwgcGFja2RpciwKKwkJCQkJCWl0ZW0tPnN0cmluZywgZXh0c1tleHRdLm5hbWUpOworCQkJaWYgKGZpbGVfZXhpc3RzKGZuYW1lX29sZCkpCisJCQkJaWYgKHVubGluayhmbmFtZV9vbGQpKQorCQkJCQlmYWlsZWQgPSAxOworCisJCQlpZiAoIWZhaWxlZCAmJiByZW5hbWUoZm5hbWUsIGZuYW1lX29sZCkpIHsKKwkJCQlmcmVlKGZuYW1lKTsKKwkJCQlmcmVlKGZuYW1lX29sZCk7CisJCQkJZmFpbGVkID0gMTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyb2xsYmFjaywgZm5hbWUpOworCQkJCWZyZWUoZm5hbWVfb2xkKTsKKwkJCX0KKwkJfQorCQlpZiAoZmFpbGVkKQorCQkJYnJlYWs7CisJfQorCWlmIChmYWlsZWQpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0IHJvbGxiYWNrX2ZhaWx1cmUgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmcm9sbGJhY2spIHsKKwkJCWNoYXIgKmZuYW1lLCAqZm5hbWVfb2xkOworCQkJZm5hbWUgPSBta3BhdGhkdXAoIiVzLyVzIiwgcGFja2RpciwgaXRlbS0+c3RyaW5nKTsKKwkJCWZuYW1lX29sZCA9IG1rcGF0aGR1cCgiJXMvb2xkLSVzIiwgcGFja2RpciwgaXRlbS0+c3RyaW5nKTsKKwkJCWlmIChyZW5hbWUoZm5hbWVfb2xkLCBmbmFtZSkpCisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyb2xsYmFja19mYWlsdXJlLCBmbmFtZSk7CisJCQlmcmVlKGZuYW1lKTsKKwkJCWZyZWUoZm5hbWVfb2xkKTsKKwkJfQorCisJCWlmIChyb2xsYmFja19mYWlsdXJlLm5yKSB7CisJCQlpbnQgaTsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCV8oIldBUk5JTkc6IFNvbWUgcGFja3MgaW4gdXNlIGhhdmUgYmVlbiByZW5hbWVkIGJ5XG4iCisJCQkJICAiV0FSTklORzogcHJlZml4aW5nIG9sZC0gdG8gdGhlaXIgbmFtZSwgaW4gb3JkZXIgdG9cbiIKKwkJCQkgICJXQVJOSU5HOiByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlXG4iCisJCQkJICAiV0FSTklORzogZmlsZS4gIEJ1dCB0aGUgb3BlcmF0aW9uIGZhaWxlZCwgYW5kIHRoZVxuIgorCQkJCSAgIldBUk5JTkc6IGF0dGVtcHQgdG8gcmVuYW1lIHRoZW0gYmFjayB0byB0aGVpclxuIgorCQkJCSAgIldBUk5JTkc6IG9yaWdpbmFsIG5hbWVzIGFsc28gZmFpbGVkLlxuIgorCQkJCSAgIldBUk5JTkc6IFBsZWFzZSByZW5hbWUgdGhlbSBpbiAlcyBtYW51YWxseTpcbiIpLCBwYWNrZGlyKTsKKwkJCWZvciAoaSA9IDA7IGkgPCByb2xsYmFja19mYWlsdXJlLm5yOyBpKyspCisJCQkJZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiAgIG9sZC0lcyAtPiAlc1xuIiwKKwkJCQkJcm9sbGJhY2tfZmFpbHVyZS5pdGVtc1tpXS5zdHJpbmcsCisJCQkJCXJvbGxiYWNrX2ZhaWx1cmUuaXRlbXNbaV0uc3RyaW5nKTsKKwkJfQorCQlleGl0KDEpOworCX0KKworCS8qIE5vdyB0aGUgb25lcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXJlIG91dCBvZiB0aGUgd2F5Li4uICovCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmbmFtZXMpIHsKKwkJZm9yIChleHQgPSAwOyBleHQgPCBBUlJBWV9TSVpFKGV4dHMpOyBleHQrKykgeworCQkJY2hhciAqZm5hbWUsICpmbmFtZV9vbGQ7CisJCQlzdHJ1Y3Qgc3RhdCBzdGF0YnVmZmVyOworCQkJaW50IGV4aXN0cyA9IDA7CisJCQlmbmFtZSA9IG1rcGF0aGR1cCgiJXMvcGFjay0lcyVzIiwKKwkJCQkJcGFja2RpciwgaXRlbS0+c3RyaW5nLCBleHRzW2V4dF0ubmFtZSk7CisJCQlmbmFtZV9vbGQgPSBta3BhdGhkdXAoIiVzLSVzJXMiLAorCQkJCQlwYWNrdG1wLCBpdGVtLT5zdHJpbmcsIGV4dHNbZXh0XS5uYW1lKTsKKwkJCWlmICghc3RhdChmbmFtZV9vbGQsICZzdGF0YnVmZmVyKSkgeworCQkJCXN0YXRidWZmZXIuc3RfbW9kZSAmPSB+KFNfSVdVU1IgfCBTX0lXR1JQIHwgU19JV09USCk7CisJCQkJY2htb2QoZm5hbWVfb2xkLCBzdGF0YnVmZmVyLnN0X21vZGUpOworCQkJCWV4aXN0cyA9IDE7CisJCQl9CisJCQlpZiAoZXhpc3RzIHx8ICFleHRzW2V4dF0ub3B0aW9uYWwpIHsKKwkJCQlpZiAocmVuYW1lKGZuYW1lX29sZCwgZm5hbWUpKQorCQkJCQlkaWVfZXJybm8oXygicmVuYW1pbmcgJyVzJyBmYWlsZWQiKSwgZm5hbWVfb2xkKTsKKwkJCX0KKwkJCWZyZWUoZm5hbWUpOworCQkJZnJlZShmbmFtZV9vbGQpOworCQl9CisJfQorCisJLyogUmVtb3ZlIHRoZSAib2xkLSIgZmlsZXMgKi8KKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZuYW1lcykgeworCQlmb3IgKGV4dCA9IDA7IGV4dCA8IEFSUkFZX1NJWkUoZXh0cyk7IGV4dCsrKSB7CisJCQljaGFyICpmbmFtZTsKKwkJCWZuYW1lID0gbWtwYXRoZHVwKCIlcy9vbGQtJXMlcyIsCisJCQkJCSAgcGFja2RpciwKKwkJCQkJICBpdGVtLT5zdHJpbmcsCisJCQkJCSAgZXh0c1tleHRdLm5hbWUpOworCQkJaWYgKHJlbW92ZV9wYXRoKGZuYW1lKSkKKwkJCQl3YXJuaW5nKF8oImZhaWxlZCB0byByZW1vdmUgJyVzJyIpLCBmbmFtZSk7CisJCQlmcmVlKGZuYW1lKTsKKwkJfQorCX0KKworCS8qIEVuZCBvZiBwYWNrIHJlcGxhY2VtZW50LiAqLworCisJcmVwcmVwYXJlX3BhY2tlZF9naXQodGhlX3JlcG9zaXRvcnkpOworCisJaWYgKGRlbGV0ZV9yZWR1bmRhbnQpIHsKKwkJY29uc3QgaW50IGhleHN6ID0gdGhlX2hhc2hfYWxnby0+aGV4c3o7CisJCWludCBvcHRzID0gMDsKKwkJc3RyaW5nX2xpc3Rfc29ydCgmbmFtZXMpOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZleGlzdGluZ19wYWNrcykgeworCQkJY2hhciAqc2hhMTsKKwkJCXNpemVfdCBsZW4gPSBzdHJsZW4oaXRlbS0+c3RyaW5nKTsKKwkJCWlmIChsZW4gPCBoZXhzeikKKwkJCQljb250aW51ZTsKKwkJCXNoYTEgPSBpdGVtLT5zdHJpbmcgKyBsZW4gLSBoZXhzejsKKwkJCWlmICghc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmbmFtZXMsIHNoYTEpKQorCQkJCXJlbW92ZV9yZWR1bmRhbnRfcGFjayhwYWNrZGlyLCBpdGVtLT5zdHJpbmcpOworCQl9CisJCWlmICghcG9fYXJncy5xdWlldCAmJiBpc2F0dHkoMikpCisJCQlvcHRzIHw9IFBSVU5FX1BBQ0tFRF9WRVJCT1NFOworCQlwcnVuZV9wYWNrZWRfb2JqZWN0cyhvcHRzKTsKKworCQlpZiAoIWtlZXBfdW5yZWFjaGFibGUgJiYKKwkJICAgICghKHBhY2tfZXZlcnl0aGluZyAmIExPT1NFTl9VTlJFQUNIQUJMRSkgfHwKKwkJICAgICB1bnBhY2tfdW5yZWFjaGFibGUpICYmCisJCSAgICBpc19yZXBvc2l0b3J5X3NoYWxsb3codGhlX3JlcG9zaXRvcnkpKQorCQkJcHJ1bmVfc2hhbGxvdyhQUlVORV9RVUlDSyk7CisJfQorCisJaWYgKCFub191cGRhdGVfc2VydmVyX2luZm8pCisJCXVwZGF0ZV9zZXJ2ZXJfaW5mbygwKTsKKwlyZW1vdmVfdGVtcG9yYXJ5X2ZpbGVzKCk7CisKKwlpZiAoZ2l0X2Vudl9ib29sKEdJVF9URVNUX01VTFRJX1BBQ0tfSU5ERVgsIDApKQorCQl3cml0ZV9taWR4X2ZpbGUoZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwgMCk7CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmbmFtZXMsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZyb2xsYmFjaywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmV4aXN0aW5nX3BhY2tzLCAwKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVwbGFjZS5jIGIvYnVpbHRpbi9yZXBsYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2ZDE3YQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmVwbGFjZS5jCkBAIC0wLDAgKzEsNjI0IEBACisvKgorICogQnVpbHRpbiAiZ2l0IHJlcGxhY2UiCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IENocmlzdGlhbiBDb3VkZXIgPGNocmlzY29vbEB0dXhmYW1pbHkub3JnPgorICoKKyAqIEJhc2VkIG9uIGJ1aWx0aW4vdGFnLmMgYnkgS3Jpc3RpYW4gSMO4Z3NiZXJnIDxrcmhAcmVkaGF0LmNvbT4KKyAqIGFuZCBDYXJsb3MgUmljYSA8amFzYW1wbGVyQGdtYWlsLmNvbT4gdGhhdCB3YXMgaXRzZWxmIGJhc2VkIG9uCisgKiBnaXQtdGFnLnNoIGFuZCBta3RhZy5jIGJ5IExpbnVzIFRvcnZhbGRzLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgInRhZy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9yZXBsYWNlX3VzYWdlW10gPSB7CisJTl8oImdpdCByZXBsYWNlIFstZl0gPG9iamVjdD4gPHJlcGxhY2VtZW50PiIpLAorCU5fKCJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIpLAorCU5fKCJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXSIpLAorCU5fKCJnaXQgcmVwbGFjZSBbLWZdIC0tY29udmVydC1ncmFmdC1maWxlIiksCisJTl8oImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+Li4uIiksCisJTl8oImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXSIpLAorCU5VTEwKK307CisKK2VudW0gcmVwbGFjZV9mb3JtYXQgeworCVJFUExBQ0VfRk9STUFUX1NIT1JULAorCVJFUExBQ0VfRk9STUFUX01FRElVTSwKKwlSRVBMQUNFX0ZPUk1BVF9MT05HCit9OworCitzdHJ1Y3Qgc2hvd19kYXRhIHsKKwljb25zdCBjaGFyICpwYXR0ZXJuOworCWVudW0gcmVwbGFjZV9mb3JtYXQgZm9ybWF0OworfTsKKworc3RhdGljIGludCBzaG93X3JlZmVyZW5jZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hvd19kYXRhICpkYXRhID0gY2JfZGF0YTsKKworCWlmICghd2lsZG1hdGNoKGRhdGEtPnBhdHRlcm4sIHJlZm5hbWUsIDApKSB7CisJCWlmIChkYXRhLT5mb3JtYXQgPT0gUkVQTEFDRV9GT1JNQVRfU0hPUlQpCisJCQlwcmludGYoIiVzXG4iLCByZWZuYW1lKTsKKwkJZWxzZSBpZiAoZGF0YS0+Zm9ybWF0ID09IFJFUExBQ0VfRk9STUFUX01FRElVTSkKKwkJCXByaW50ZigiJXMgLT4gJXNcbiIsIHJlZm5hbWUsIG9pZF90b19oZXgob2lkKSk7CisJCWVsc2UgeyAvKiBkYXRhLT5mb3JtYXQgPT0gUkVQTEFDRV9GT1JNQVRfTE9ORyAqLworCQkJc3RydWN0IG9iamVjdF9pZCBvYmplY3Q7CisJCQllbnVtIG9iamVjdF90eXBlIG9ial90eXBlLCByZXBsX3R5cGU7CisKKwkJCWlmIChnZXRfb2lkKHJlZm5hbWUsICZvYmplY3QpKQorCQkJCXJldHVybiBlcnJvcihfKCJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmIiksIHJlZm5hbWUpOworCisJCQlvYmpfdHlwZSA9IG9pZF9vYmplY3RfaW5mbyhyLCAmb2JqZWN0LCBOVUxMKTsKKwkJCXJlcGxfdHlwZSA9IG9pZF9vYmplY3RfaW5mbyhyLCBvaWQsIE5VTEwpOworCisJCQlwcmludGYoIiVzICglcykgLT4gJXMgKCVzKVxuIiwgcmVmbmFtZSwgdHlwZV9uYW1lKG9ial90eXBlKSwKKwkJCSAgICAgICBvaWRfdG9faGV4KG9pZCksIHR5cGVfbmFtZShyZXBsX3R5cGUpKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpc3RfcmVwbGFjZV9yZWZzKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIgKmZvcm1hdCkKK3sKKwlzdHJ1Y3Qgc2hvd19kYXRhIGRhdGE7CisKKwlpZiAocGF0dGVybiA9PSBOVUxMKQorCQlwYXR0ZXJuID0gIioiOworCWRhdGEucGF0dGVybiA9IHBhdHRlcm47CisKKwlpZiAoZm9ybWF0ID09IE5VTEwgfHwgKmZvcm1hdCA9PSAnXDAnIHx8ICFzdHJjbXAoZm9ybWF0LCAic2hvcnQiKSkKKwkJZGF0YS5mb3JtYXQgPSBSRVBMQUNFX0ZPUk1BVF9TSE9SVDsKKwllbHNlIGlmICghc3RyY21wKGZvcm1hdCwgIm1lZGl1bSIpKQorCQlkYXRhLmZvcm1hdCA9IFJFUExBQ0VfRk9STUFUX01FRElVTTsKKwllbHNlIGlmICghc3RyY21wKGZvcm1hdCwgImxvbmciKSkKKwkJZGF0YS5mb3JtYXQgPSBSRVBMQUNFX0ZPUk1BVF9MT05HOworCS8qCisJICogUGxlYXNlIHVwZGF0ZSBfZ2l0X3JlcGxhY2UoKSBpbiBnaXQtY29tcGxldGlvbi5iYXNoIHdoZW4KKwkgKiB5b3UgYWRkIG5ldyBmb3JtYXQKKwkgKi8KKwllbHNlCisJCXJldHVybiBlcnJvcihfKCJpbnZhbGlkIHJlcGxhY2UgZm9ybWF0ICclcydcbiIKKwkJCSAgICAgICAidmFsaWQgZm9ybWF0cyBhcmUgJ3Nob3J0JywgJ21lZGl1bScgYW5kICdsb25nJyIpLAorCQkJICAgICBmb3JtYXQpOworCisJZm9yX2VhY2hfcmVwbGFjZV9yZWYodGhlX3JlcG9zaXRvcnksIHNob3dfcmVmZXJlbmNlLCAodm9pZCAqKSZkYXRhKTsKKworCXJldHVybiAwOworfQorCit0eXBlZGVmIGludCAoKmVhY2hfcmVwbGFjZV9uYW1lX2ZuKShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpyZWYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKK3N0YXRpYyBpbnQgZm9yX2VhY2hfcmVwbGFjZV9uYW1lKGNvbnN0IGNoYXIgKiphcmd2LCBlYWNoX3JlcGxhY2VfbmFtZV9mbiBmbikKK3sKKwljb25zdCBjaGFyICoqcCwgKmZ1bGxfaGV4OworCXN0cnVjdCBzdHJidWYgcmVmID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IGJhc2VfbGVuOworCWludCBoYWRfZXJyb3IgPSAwOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJc3RyYnVmX2FkZHN0cigmcmVmLCBnaXRfcmVwbGFjZV9yZWZfYmFzZSk7CisJYmFzZV9sZW4gPSByZWYubGVuOworCisJZm9yIChwID0gYXJndjsgKnA7IHArKykgeworCQlpZiAoZ2V0X29pZCgqcCwgJm9pZCkpIHsKKwkJCWVycm9yKCJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmIiwgKnApOworCQkJaGFkX2Vycm9yID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3RyYnVmX3NldGxlbigmcmVmLCBiYXNlX2xlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJnJlZiwgb2lkX3RvX2hleCgmb2lkKSk7CisJCWZ1bGxfaGV4ID0gcmVmLmJ1ZiArIGJhc2VfbGVuOworCisJCWlmIChyZWFkX3JlZihyZWYuYnVmLCAmb2lkKSkgeworCQkJZXJyb3IoXygicmVwbGFjZSByZWYgJyVzJyBub3QgZm91bmQiKSwgZnVsbF9oZXgpOworCQkJaGFkX2Vycm9yID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChmbihmdWxsX2hleCwgcmVmLmJ1ZiwgJm9pZCkpCisJCQloYWRfZXJyb3IgPSAxOworCX0KKwlzdHJidWZfcmVsZWFzZSgmcmVmKTsKKwlyZXR1cm4gaGFkX2Vycm9yOworfQorCitzdGF0aWMgaW50IGRlbGV0ZV9yZXBsYWNlX3JlZihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpyZWYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaWYgKGRlbGV0ZV9yZWYoTlVMTCwgcmVmLCBvaWQsIDApKQorCQlyZXR1cm4gMTsKKwlwcmludGZfbG4oXygiRGVsZXRlZCByZXBsYWNlIHJlZiAnJXMnIiksIG5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX3JlZl92YWxpZChzdHJ1Y3Qgb2JqZWN0X2lkICpvYmplY3QsCisJCQkgICAgc3RydWN0IG9iamVjdF9pZCAqcHJldiwKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpyZWYsCisJCQkgICAgaW50IGZvcmNlKQoreworCXN0cmJ1Zl9yZXNldChyZWYpOworCXN0cmJ1Zl9hZGRmKHJlZiwgIiVzJXMiLCBnaXRfcmVwbGFjZV9yZWZfYmFzZSwgb2lkX3RvX2hleChvYmplY3QpKTsKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVmLT5idWYsIDApKQorCQlyZXR1cm4gZXJyb3IoXygiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYgbmFtZSIpLCByZWYtPmJ1Zik7CisKKwlpZiAocmVhZF9yZWYocmVmLT5idWYsIHByZXYpKQorCQlvaWRjbHIocHJldik7CisJZWxzZSBpZiAoIWZvcmNlKQorCQlyZXR1cm4gZXJyb3IoXygicmVwbGFjZSByZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIpLCByZWYtPmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVwbGFjZV9vYmplY3Rfb2lkKGNvbnN0IGNoYXIgKm9iamVjdF9yZWYsCisJCQkgICAgICAgc3RydWN0IG9iamVjdF9pZCAqb2JqZWN0LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnJlcGxhY2VfcmVmLAorCQkJICAgICAgIHN0cnVjdCBvYmplY3RfaWQgKnJlcGwsCisJCQkgICAgICAgaW50IGZvcmNlKQoreworCXN0cnVjdCBvYmplY3RfaWQgcHJldjsKKwllbnVtIG9iamVjdF90eXBlIG9ial90eXBlLCByZXBsX3R5cGU7CisJc3RydWN0IHN0cmJ1ZiByZWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWludCByZXMgPSAwOworCisJb2JqX3R5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksIG9iamVjdCwgTlVMTCk7CisJcmVwbF90eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCByZXBsLCBOVUxMKTsKKwlpZiAoIWZvcmNlICYmIG9ial90eXBlICE9IHJlcGxfdHlwZSkKKwkJcmV0dXJuIGVycm9yKF8oIk9iamVjdHMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlLlxuIgorCQkJICAgICAgICInJXMnIHBvaW50cyB0byBhIHJlcGxhY2VkIG9iamVjdCBvZiB0eXBlICclcydcbiIKKwkJCSAgICAgICAid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgIgorCQkJICAgICAgICJ0eXBlICclcycuIiksCisJCQkgICAgIG9iamVjdF9yZWYsIHR5cGVfbmFtZShvYmpfdHlwZSksCisJCQkgICAgIHJlcGxhY2VfcmVmLCB0eXBlX25hbWUocmVwbF90eXBlKSk7CisKKwlpZiAoY2hlY2tfcmVmX3ZhbGlkKG9iamVjdCwgJnByZXYsICZyZWYsIGZvcmNlKSkgeworCQlzdHJidWZfcmVsZWFzZSgmcmVmKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXRyYW5zYWN0aW9uID0gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCZlcnIpOworCWlmICghdHJhbnNhY3Rpb24gfHwKKwkgICAgcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSh0cmFuc2FjdGlvbiwgcmVmLmJ1ZiwgcmVwbCwgJnByZXYsCisJCQkJICAgMCwgTlVMTCwgJmVycikgfHwKKwkgICAgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpCisJCXJlcyA9IGVycm9yKCIlcyIsIGVyci5idWYpOworCisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXN0cmJ1Zl9yZWxlYXNlKCZyZWYpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgcmVwbGFjZV9vYmplY3QoY29uc3QgY2hhciAqb2JqZWN0X3JlZiwgY29uc3QgY2hhciAqcmVwbGFjZV9yZWYsIGludCBmb3JjZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9iamVjdCwgcmVwbDsKKworCWlmIChnZXRfb2lkKG9iamVjdF9yZWYsICZvYmplY3QpKQorCQlyZXR1cm4gZXJyb3IoXygiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZiIpLAorCQkJICAgICBvYmplY3RfcmVmKTsKKwlpZiAoZ2V0X29pZChyZXBsYWNlX3JlZiwgJnJlcGwpKQorCQlyZXR1cm4gZXJyb3IoXygiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZiIpLAorCQkJICAgICByZXBsYWNlX3JlZik7CisKKwlyZXR1cm4gcmVwbGFjZV9vYmplY3Rfb2lkKG9iamVjdF9yZWYsICZvYmplY3QsIHJlcGxhY2VfcmVmLCAmcmVwbCwgZm9yY2UpOworfQorCisvKgorICogV3JpdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBvYmplY3QgbmFtZWQgYnkgInNoYTEiIHRvIHRoZSBmaWxlICJmaWxlbmFtZSIuCisgKiBJZiAicmF3IiBpcyB0cnVlLCB0aGVuIHRoZSBvYmplY3QncyByYXcgY29udGVudHMgYXJlIHByaW50ZWQgYWNjb3JkaW5nIHRvCisgKiAidHlwZSIuIE90aGVyd2lzZSwgd2UgcHJldHR5LXByaW50IHRoZSBjb250ZW50cyBmb3IgaHVtYW4gZWRpdGluZy4KKyAqLworc3RhdGljIGludCBleHBvcnRfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJICBpbnQgcmF3LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbWQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJaW50IGZkOworCisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHdyaXRpbmciKSwgZmlsZW5hbWUpOworCisJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tbm8tcmVwbGFjZS1vYmplY3RzIik7CisJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgImNhdC1maWxlIik7CisJaWYgKHJhdykKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgdHlwZV9uYW1lKHR5cGUpKTsKKwllbHNlCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItcCIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIG9pZF90b19oZXgob2lkKSk7CisJY21kLmdpdF9jbWQgPSAxOworCWNtZC5vdXQgPSBmZDsKKworCWlmIChydW5fY29tbWFuZCgmY21kKSkKKwkJcmV0dXJuIGVycm9yKF8oImNhdC1maWxlIHJlcG9ydGVkIGZhaWx1cmUiKSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWFkIGEgcHJldmlvdXNseS1leHBvcnRlZCAoYW5kIHBvc3NpYmx5IGVkaXRlZCkgb2JqZWN0IGJhY2sgZnJvbSAiZmlsZW5hbWUiLAorICogaW50ZXJwcmV0aW5nIGl0IGFzICJ0eXBlIiwgYW5kIHdyaXRpbmcgdGhlIHJlc3VsdCB0byB0aGUgb2JqZWN0IGRhdGFiYXNlLgorICogVGhlIHNoYTEgb2YgdGhlIHdyaXR0ZW4gb2JqZWN0IGlzIHJldHVybmVkIHZpYSBzaGExLgorICovCitzdGF0aWMgaW50IGltcG9ydF9vYmplY3Qoc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkgIGludCByYXcsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWludCBmZDsKKworCWZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJ1bmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIpLCBmaWxlbmFtZSk7CisKKwlpZiAoIXJhdyAmJiB0eXBlID09IE9CSl9UUkVFKSB7CisJCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgIm1rdHJlZSIsIE5VTEwgfTsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIHJlc3VsdCA9IFNUUkJVRl9JTklUOworCisJCWNtZC5hcmd2ID0gYXJndjsKKwkJY21kLmdpdF9jbWQgPSAxOworCQljbWQuaW4gPSBmZDsKKwkJY21kLm91dCA9IC0xOworCisJCWlmIChzdGFydF9jb21tYW5kKCZjbWQpKSB7CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIHNwYXduIG1rdHJlZSIpKTsKKwkJfQorCisJCWlmIChzdHJidWZfcmVhZCgmcmVzdWx0LCBjbWQub3V0LCB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDEpIDwgMCkgeworCQkJZXJyb3JfZXJybm8oXygidW5hYmxlIHRvIHJlYWQgZnJvbSBta3RyZWUiKSk7CisJCQljbG9zZShmZCk7CisJCQljbG9zZShjbWQub3V0KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQljbG9zZShjbWQub3V0KTsKKworCQlpZiAoZmluaXNoX2NvbW1hbmQoJmNtZCkpIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZyZXN1bHQpOworCQkJcmV0dXJuIGVycm9yKF8oIm1rdHJlZSByZXBvcnRlZCBmYWlsdXJlIikpOworCQl9CisJCWlmIChnZXRfb2lkX2hleChyZXN1bHQuYnVmLCBvaWQpIDwgMCkgeworCQkJc3RyYnVmX3JlbGVhc2UoJnJlc3VsdCk7CisJCQlyZXR1cm4gZXJyb3IoXygibWt0cmVlIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdCBuYW1lIikpOworCQl9CisKKwkJc3RyYnVmX3JlbGVhc2UoJnJlc3VsdCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWludCBmbGFncyA9IEhBU0hfRk9STUFUX0NIRUNLIHwgSEFTSF9XUklURV9PQkpFQ1Q7CisKKwkJaWYgKGZzdGF0KGZkLCAmc3QpIDwgMCkgeworCQkJZXJyb3JfZXJybm8oXygidW5hYmxlIHRvIGZzdGF0ICVzIiksIGZpbGVuYW1lKTsKKwkJCWNsb3NlKGZkKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoaW5kZXhfZmQodGhlX3JlcG9zaXRvcnktPmluZGV4LCBvaWQsIGZkLCAmc3QsIHR5cGUsIE5VTEwsIGZsYWdzKSA8IDApCisJCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIHdyaXRlIG9iamVjdCB0byBkYXRhYmFzZSIpKTsKKwkJLyogaW5kZXhfZmQgY2xvc2UoKXMgZmQgZm9yIHVzICovCisJfQorCisJLyoKKwkgKiBObyBuZWVkIHRvIGNsb3NlKGZkKSBoZXJlOyBib3RoIHJ1bi1jb21tYW5kIGFuZCBpbmRleC1mZAorCSAqIHdpbGwgaGF2ZSBkb25lIGl0IGZvciB1cy4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlZGl0X2FuZF9yZXBsYWNlKGNvbnN0IGNoYXIgKm9iamVjdF9yZWYsIGludCBmb3JjZSwgaW50IHJhdykKK3sKKwljaGFyICp0bXBmaWxlOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9sZF9vaWQsIG5ld19vaWQsIHByZXY7CisJc3RydWN0IHN0cmJ1ZiByZWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChnZXRfb2lkKG9iamVjdF9yZWYsICZvbGRfb2lkKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIpLCBvYmplY3RfcmVmKTsKKworCXR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksICZvbGRfb2lkLCBOVUxMKTsKKwlpZiAodHlwZSA8IDApCisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gZ2V0IG9iamVjdCB0eXBlIGZvciAlcyIpLAorCQkJICAgICBvaWRfdG9faGV4KCZvbGRfb2lkKSk7CisKKwlpZiAoY2hlY2tfcmVmX3ZhbGlkKCZvbGRfb2lkLCAmcHJldiwgJnJlZiwgZm9yY2UpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZyZWYpOworCQlyZXR1cm4gLTE7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZyZWYpOworCisJdG1wZmlsZSA9IGdpdF9wYXRoZHVwKCJSRVBMQUNFX0VESVRPQkoiKTsKKwlpZiAoZXhwb3J0X29iamVjdCgmb2xkX29pZCwgdHlwZSwgcmF3LCB0bXBmaWxlKSkgeworCQlmcmVlKHRtcGZpbGUpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChsYXVuY2hfZWRpdG9yKHRtcGZpbGUsIE5VTEwsIE5VTEwpIDwgMCkgeworCQlmcmVlKHRtcGZpbGUpOworCQlyZXR1cm4gZXJyb3IoXygiZWRpdGluZyBvYmplY3QgZmlsZSBmYWlsZWQiKSk7CisJfQorCWlmIChpbXBvcnRfb2JqZWN0KCZuZXdfb2lkLCB0eXBlLCByYXcsIHRtcGZpbGUpKSB7CisJCWZyZWUodG1wZmlsZSk7CisJCXJldHVybiAtMTsKKwl9CisJZnJlZSh0bXBmaWxlKTsKKworCWlmIChvaWRlcSgmb2xkX29pZCwgJm5ld19vaWQpKQorCQlyZXR1cm4gZXJyb3IoXygibmV3IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIpLCBvaWRfdG9faGV4KCZvbGRfb2lkKSk7CisKKwlyZXR1cm4gcmVwbGFjZV9vYmplY3Rfb2lkKG9iamVjdF9yZWYsICZvbGRfb2lkLCAicmVwbGFjZW1lbnQiLCAmbmV3X29pZCwgZm9yY2UpOworfQorCitzdGF0aWMgaW50IHJlcGxhY2VfcGFyZW50cyhzdHJ1Y3Qgc3RyYnVmICpidWYsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG5ld19wYXJlbnRzID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcGFyZW50X3N0YXJ0LCAqcGFyZW50X2VuZDsKKwlpbnQgaTsKKwljb25zdCB1bnNpZ25lZCBoZXhzeiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6OworCisJLyogZmluZCBleGlzdGluZyBwYXJlbnRzICovCisJcGFyZW50X3N0YXJ0ID0gYnVmLT5idWY7CisJcGFyZW50X3N0YXJ0ICs9IGhleHN6ICsgNjsgLyogInRyZWUgIiArICJoZXggc2hhMSIgKyAiXG4iICovCisJcGFyZW50X2VuZCA9IHBhcmVudF9zdGFydDsKKworCXdoaWxlIChzdGFydHNfd2l0aChwYXJlbnRfZW5kLCAicGFyZW50ICIpKQorCQlwYXJlbnRfZW5kICs9IGhleHN6ICsgODsgLyogInBhcmVudCAiICsgImhleCBzaGExIiArICJcbiIgKi8KKworCS8qIHByZXBhcmUgbmV3IHBhcmVudHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwkJaWYgKGdldF9vaWQoYXJndltpXSwgJm9pZCkgPCAwKSB7CisJCQlzdHJidWZfcmVsZWFzZSgmbmV3X3BhcmVudHMpOworCQkJcmV0dXJuIGVycm9yKF8oIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIiksCisJCQkJICAgICBhcmd2W2ldKTsKKwkJfQorCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJCWlmICghY29tbWl0KSB7CisJCQlzdHJidWZfcmVsZWFzZSgmbmV3X3BhcmVudHMpOworCQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSAlcyBhcyBhIGNvbW1pdCIpLCBhcmd2W2ldKTsKKwkJfQorCQlzdHJidWZfYWRkZigmbmV3X3BhcmVudHMsICJwYXJlbnQgJXNcbiIsIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCX0KKworCS8qIHJlcGxhY2UgZXhpc3RpbmcgcGFyZW50cyB3aXRoIG5ldyBvbmVzICovCisJc3RyYnVmX3NwbGljZShidWYsIHBhcmVudF9zdGFydCAtIGJ1Zi0+YnVmLCBwYXJlbnRfZW5kIC0gcGFyZW50X3N0YXJ0LAorCQkgICAgICBuZXdfcGFyZW50cy5idWYsIG5ld19wYXJlbnRzLmxlbik7CisKKwlzdHJidWZfcmVsZWFzZSgmbmV3X3BhcmVudHMpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgY2hlY2tfbWVyZ2V0YWdfZGF0YSB7CisJaW50IGFyZ2M7CisJY29uc3QgY2hhciAqKmFyZ3Y7Cit9OworCitzdGF0aWMgaW50IGNoZWNrX29uZV9tZXJnZXRhZyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICAgICAgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhLAorCQkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNoZWNrX21lcmdldGFnX2RhdGEgKm1lcmdldGFnX2RhdGEgPSAoc3RydWN0IGNoZWNrX21lcmdldGFnX2RhdGEgKilkYXRhOworCWNvbnN0IGNoYXIgKnJlZiA9IG1lcmdldGFnX2RhdGEtPmFyZ3ZbMF07CisJc3RydWN0IG9iamVjdF9pZCB0YWdfb2lkOworCXN0cnVjdCB0YWcgKnRhZzsKKwlpbnQgaTsKKworCWhhc2hfb2JqZWN0X2ZpbGUodGhlX2hhc2hfYWxnbywgZXh0cmEtPnZhbHVlLCBleHRyYS0+bGVuLAorCQkJIHR5cGVfbmFtZShPQkpfVEFHKSwgJnRhZ19vaWQpOworCXRhZyA9IGxvb2t1cF90YWcodGhlX3JlcG9zaXRvcnksICZ0YWdfb2lkKTsKKwlpZiAoIXRhZykKKwkJcmV0dXJuIGVycm9yKF8oImJhZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIpLCByZWYpOworCWlmIChwYXJzZV90YWdfYnVmZmVyKHRoZV9yZXBvc2l0b3J5LCB0YWcsIGV4dHJhLT52YWx1ZSwgZXh0cmEtPmxlbikpCisJCXJldHVybiBlcnJvcihfKCJtYWxmb3JtZWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciKSwgcmVmKTsKKworCS8qIGl0ZXJhdGUgb3ZlciBuZXcgcGFyZW50cyAqLworCWZvciAoaSA9IDE7IGkgPCBtZXJnZXRhZ19kYXRhLT5hcmdjOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWlmIChnZXRfb2lkKG1lcmdldGFnX2RhdGEtPmFyZ3ZbaV0sICZvaWQpIDwgMCkKKwkJCXJldHVybiBlcnJvcihfKCJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIpLAorCQkJCSAgICAgbWVyZ2V0YWdfZGF0YS0+YXJndltpXSk7CisJCWlmIChvaWRlcShnZXRfdGFnZ2VkX29pZCh0YWcpLCAmb2lkKSkKKwkJCXJldHVybiAwOyAvKiBmb3VuZCAqLworCX0KKworCXJldHVybiBlcnJvcihfKCJvcmlnaW5hbCBjb21taXQgJyVzJyBjb250YWlucyBtZXJnZXRhZyAnJXMnIHRoYXQgaXMgIgorCQkgICAgICAgImRpc2NhcmRlZDsgdXNlIC0tZWRpdCBpbnN0ZWFkIG9mIC0tZ3JhZnQiKSwgcmVmLAorCQkgICAgIG9pZF90b19oZXgoJnRhZ19vaWQpKTsKK30KKworc3RhdGljIGludCBjaGVja19tZXJnZXRhZ3Moc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGNoZWNrX21lcmdldGFnX2RhdGEgbWVyZ2V0YWdfZGF0YTsKKworCW1lcmdldGFnX2RhdGEuYXJnYyA9IGFyZ2M7CisJbWVyZ2V0YWdfZGF0YS5hcmd2ID0gYXJndjsKKwlyZXR1cm4gZm9yX2VhY2hfbWVyZ2V0YWcoY2hlY2tfb25lX21lcmdldGFnLCBjb21taXQsICZtZXJnZXRhZ19kYXRhKTsKK30KKworc3RhdGljIGludCBjcmVhdGVfZ3JhZnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBpbnQgZm9yY2UsIGludCBnZW50bGUpCit7CisJc3RydWN0IG9iamVjdF9pZCBvbGRfb2lkLCBuZXdfb2lkOworCWNvbnN0IGNoYXIgKm9sZF9yZWYgPSBhcmd2WzBdOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlpZiAoZ2V0X29pZChvbGRfcmVmLCAmb2xkX29pZCkgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcyciKSwgb2xkX3JlZik7CisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksICZvbGRfb2lkKTsKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSAlcyIpLCBvbGRfcmVmKTsKKworCWJ1ZmZlciA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgJnNpemUpOworCXN0cmJ1Zl9hZGQoJmJ1ZiwgYnVmZmVyLCBzaXplKTsKKwl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgYnVmZmVyKTsKKworCWlmIChyZXBsYWNlX3BhcmVudHMoJmJ1ZiwgYXJnYyAtIDEsICZhcmd2WzFdKSA8IDApIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocmVtb3ZlX3NpZ25hdHVyZSgmYnVmKSkgeworCQl3YXJuaW5nKF8oInRoZSBvcmlnaW5hbCBjb21taXQgJyVzJyBoYXMgYSBncGcgc2lnbmF0dXJlIiksIG9sZF9yZWYpOworCQl3YXJuaW5nKF8oInRoZSBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSByZXBsYWNlbWVudCBjb21taXQhIikpOworCX0KKworCWlmIChjaGVja19tZXJnZXRhZ3MoY29tbWl0LCBhcmdjLCBhcmd2KSkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICh3cml0ZV9vYmplY3RfZmlsZShidWYuYnVmLCBidWYubGVuLCBjb21taXRfdHlwZSwgJm5ld19vaWQpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHdyaXRlIHJlcGxhY2VtZW50IGNvbW1pdCBmb3I6ICclcyciKSwKKwkJCSAgICAgb2xkX3JlZik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlpZiAob2lkZXEoJmNvbW1pdC0+b2JqZWN0Lm9pZCwgJm5ld19vaWQpKSB7CisJCWlmIChnZW50bGUpIHsKKwkJCXdhcm5pbmcoXygiZ3JhZnQgZm9yICclcycgdW5uZWNlc3NhcnkiKSwKKwkJCQlvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiBlcnJvcihfKCJuZXcgY29tbWl0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIiksCisJCQkgICAgIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCX0KKworCXJldHVybiByZXBsYWNlX29iamVjdF9vaWQob2xkX3JlZiwgJmNvbW1pdC0+b2JqZWN0Lm9pZCwKKwkJCQkgICJyZXBsYWNlbWVudCIsICZuZXdfb2lkLCBmb3JjZSk7Cit9CisKK3N0YXRpYyBpbnQgY29udmVydF9ncmFmdF9maWxlKGludCBmb3JjZSkKK3sKKwljb25zdCBjaGFyICpncmFmdF9maWxlID0gZ2V0X2dyYWZ0X2ZpbGUodGhlX3JlcG9zaXRvcnkpOworCUZJTEUgKmZwID0gZm9wZW5fb3Jfd2FybihncmFmdF9maWxlLCAiciIpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQsIGVyciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwlpZiAoIWZwKQorCQlyZXR1cm4gLTE7CisKKwlhZHZpY2VfZ3JhZnRfZmlsZV9kZXByZWNhdGVkID0gMDsKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmJ1ZiwgZnApICE9IEVPRikgeworCQlpZiAoKmJ1Zi5idWYgPT0gJyMnKQorCQkJY29udGludWU7CisKKwkJYXJndl9hcnJheV9zcGxpdCgmYXJncywgYnVmLmJ1Zik7CisJCWlmIChhcmdzLmFyZ2MgJiYgY3JlYXRlX2dyYWZ0KGFyZ3MuYXJnYywgYXJncy5hcmd2LCBmb3JjZSwgMSkpCisJCQlzdHJidWZfYWRkZigmZXJyLCAiXG5cdCVzIiwgYnVmLmJ1Zik7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCX0KKwlmY2xvc2UoZnApOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlpZiAoIWVyci5sZW4pCisJCXJldHVybiB1bmxpbmtfb3Jfd2FybihncmFmdF9maWxlKTsKKworCXdhcm5pbmcoXygiY291bGQgbm90IGNvbnZlcnQgdGhlIGZvbGxvd2luZyBncmFmdChzKTpcbiVzIiksIGVyci5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCisJcmV0dXJuIC0xOworfQorCitpbnQgY21kX3JlcGxhY2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGZvcmNlID0gMDsKKwlpbnQgcmF3ID0gMDsKKwljb25zdCBjaGFyICpmb3JtYXQgPSBOVUxMOworCWVudW0geworCQlNT0RFX1VOU1BFQ0lGSUVEID0gMCwKKwkJTU9ERV9MSVNULAorCQlNT0RFX0RFTEVURSwKKwkJTU9ERV9FRElULAorCQlNT0RFX0dSQUZULAorCQlNT0RFX0NPTlZFUlRfR1JBRlRfRklMRSwKKwkJTU9ERV9SRVBMQUNFCisJfSBjbWRtb2RlID0gTU9ERV9VTlNQRUNJRklFRDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0NNRE1PREUoJ2wnLCAibGlzdCIsICZjbWRtb2RlLCBOXygibGlzdCByZXBsYWNlIHJlZnMiKSwgTU9ERV9MSVNUKSwKKwkJT1BUX0NNRE1PREUoJ2QnLCAiZGVsZXRlIiwgJmNtZG1vZGUsIE5fKCJkZWxldGUgcmVwbGFjZSByZWZzIiksIE1PREVfREVMRVRFKSwKKwkJT1BUX0NNRE1PREUoJ2UnLCAiZWRpdCIsICZjbWRtb2RlLCBOXygiZWRpdCBleGlzdGluZyBvYmplY3QiKSwgTU9ERV9FRElUKSwKKwkJT1BUX0NNRE1PREUoJ2cnLCAiZ3JhZnQiLCAmY21kbW9kZSwgTl8oImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiKSwgTU9ERV9HUkFGVCksCisJCU9QVF9DTURNT0RFKDAsICJjb252ZXJ0LWdyYWZ0LWZpbGUiLCAmY21kbW9kZSwgTl8oImNvbnZlcnQgZXhpc3RpbmcgZ3JhZnQgZmlsZSIpLCBNT0RFX0NPTlZFUlRfR1JBRlRfRklMRSksCisJCU9QVF9CT09MX0YoJ2YnLCAiZm9yY2UiLCAmZm9yY2UsIE5fKCJyZXBsYWNlIHRoZSByZWYgaWYgaXQgZXhpc3RzIiksCisJCQkgICBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9CT09MKDAsICJyYXciLCAmcmF3LCBOXygiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IikpLAorCQlPUFRfU1RSSU5HKDAsICJmb3JtYXQiLCAmZm9ybWF0LCBOXygiZm9ybWF0IiksIE5fKCJ1c2UgdGhpcyBmb3JtYXQiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlyZWFkX3JlcGxhY2VfcmVmcyA9IDA7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBnaXRfcmVwbGFjZV91c2FnZSwgMCk7CisKKwlpZiAoIWNtZG1vZGUpCisJCWNtZG1vZGUgPSBhcmdjID8gTU9ERV9SRVBMQUNFIDogTU9ERV9MSVNUOworCisJaWYgKGZvcm1hdCAmJiBjbWRtb2RlICE9IE1PREVfTElTVCkKKwkJdXNhZ2VfbXNnX29wdChfKCItLWZvcm1hdCBjYW5ub3QgYmUgdXNlZCB3aGVuIG5vdCBsaXN0aW5nIiksCisJCQkgICAgICBnaXRfcmVwbGFjZV91c2FnZSwgb3B0aW9ucyk7CisKKwlpZiAoZm9yY2UgJiYKKwkgICAgY21kbW9kZSAhPSBNT0RFX1JFUExBQ0UgJiYKKwkgICAgY21kbW9kZSAhPSBNT0RFX0VESVQgJiYKKwkgICAgY21kbW9kZSAhPSBNT0RFX0dSQUZUICYmCisJICAgIGNtZG1vZGUgIT0gTU9ERV9DT05WRVJUX0dSQUZUX0ZJTEUpCisJCXVzYWdlX21zZ19vcHQoXygiLWYgb25seSBtYWtlcyBzZW5zZSB3aGVuIHdyaXRpbmcgYSByZXBsYWNlbWVudCIpLAorCQkJICAgICAgZ2l0X3JlcGxhY2VfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKHJhdyAmJiBjbWRtb2RlICE9IE1PREVfRURJVCkKKwkJdXNhZ2VfbXNnX29wdChfKCItLXJhdyBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1lZGl0IiksCisJCQkgICAgICBnaXRfcmVwbGFjZV91c2FnZSwgb3B0aW9ucyk7CisKKwlzd2l0Y2ggKGNtZG1vZGUpIHsKKwljYXNlIE1PREVfREVMRVRFOgorCQlpZiAoYXJnYyA8IDEpCisJCQl1c2FnZV9tc2dfb3B0KF8oIi1kIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIpLAorCQkJCSAgICAgIGdpdF9yZXBsYWNlX3VzYWdlLCBvcHRpb25zKTsKKwkJcmV0dXJuIGZvcl9lYWNoX3JlcGxhY2VfbmFtZShhcmd2LCBkZWxldGVfcmVwbGFjZV9yZWYpOworCisJY2FzZSBNT0RFX1JFUExBQ0U6CisJCWlmIChhcmdjICE9IDIpCisJCQl1c2FnZV9tc2dfb3B0KF8oImJhZCBudW1iZXIgb2YgYXJndW1lbnRzIiksCisJCQkJICAgICAgZ2l0X3JlcGxhY2VfdXNhZ2UsIG9wdGlvbnMpOworCQlyZXR1cm4gcmVwbGFjZV9vYmplY3QoYXJndlswXSwgYXJndlsxXSwgZm9yY2UpOworCisJY2FzZSBNT0RFX0VESVQ6CisJCWlmIChhcmdjICE9IDEpCisJCQl1c2FnZV9tc2dfb3B0KF8oIi1lIG5lZWRzIGV4YWN0bHkgb25lIGFyZ3VtZW50IiksCisJCQkJICAgICAgZ2l0X3JlcGxhY2VfdXNhZ2UsIG9wdGlvbnMpOworCQlyZXR1cm4gZWRpdF9hbmRfcmVwbGFjZShhcmd2WzBdLCBmb3JjZSwgcmF3KTsKKworCWNhc2UgTU9ERV9HUkFGVDoKKwkJaWYgKGFyZ2MgPCAxKQorCQkJdXNhZ2VfbXNnX29wdChfKCItZyBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiKSwKKwkJCQkgICAgICBnaXRfcmVwbGFjZV91c2FnZSwgb3B0aW9ucyk7CisJCXJldHVybiBjcmVhdGVfZ3JhZnQoYXJnYywgYXJndiwgZm9yY2UsIDApOworCisJY2FzZSBNT0RFX0NPTlZFUlRfR1JBRlRfRklMRToKKwkJaWYgKGFyZ2MgIT0gMCkKKwkJCXVzYWdlX21zZ19vcHQoXygiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgdGFrZXMgbm8gYXJndW1lbnQiKSwKKwkJCQkgICAgICBnaXRfcmVwbGFjZV91c2FnZSwgb3B0aW9ucyk7CisJCXJldHVybiAhIWNvbnZlcnRfZ3JhZnRfZmlsZShmb3JjZSk7CisKKwljYXNlIE1PREVfTElTVDoKKwkJaWYgKGFyZ2MgPiAxKQorCQkJdXNhZ2VfbXNnX29wdChfKCJvbmx5IG9uZSBwYXR0ZXJuIGNhbiBiZSBnaXZlbiB3aXRoIC1sIiksCisJCQkJICAgICAgZ2l0X3JlcGxhY2VfdXNhZ2UsIG9wdGlvbnMpOworCQlyZXR1cm4gbGlzdF9yZXBsYWNlX3JlZnMoYXJndlswXSwgZm9ybWF0KTsKKworCWRlZmF1bHQ6CisJCUJVRygiaW52YWxpZCBjbWRtb2RlICVkIiwgKGludCljbWRtb2RlKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlcmVyZS5jIGIvYnVpbHRpbi9yZXJlcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDNiZTE3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZXJlcmUuYwpAQCAtMCwwICsxLDEyMCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJlcmVyZS5oIgorI2luY2x1ZGUgInhkaWZmL3hkaWZmLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZXJlcmVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBhdGg+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIpLAorCU5VTEwsCit9OworCitzdGF0aWMgaW50IG91dGYodm9pZCAqZHVtbXksIG1tYnVmZmVyX3QgKnB0ciwgaW50IG5idWYpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG5idWY7IGkrKykKKwkJaWYgKHdyaXRlX2luX2Z1bGwoMSwgcHRyW2ldLnB0ciwgcHRyW2ldLnNpemUpIDwgMCkKKwkJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX3R3byhjb25zdCBjaGFyICpmaWxlMSwgY29uc3QgY2hhciAqbGFiZWwxLAorCQljb25zdCBjaGFyICpmaWxlMiwgY29uc3QgY2hhciAqbGFiZWwyKQoreworCXhwcGFyYW1fdCB4cHA7CisJeGRlbWl0Y29uZl90IHhlY2ZnOworCXhkZW1pdGNiX3QgZWNiOworCW1tZmlsZV90IG1pbnVzLCBwbHVzOworCWludCByZXQ7CisKKwlpZiAocmVhZF9tbWZpbGUoJm1pbnVzLCBmaWxlMSkgfHwgcmVhZF9tbWZpbGUoJnBsdXMsIGZpbGUyKSkKKwkJcmV0dXJuIC0xOworCisJcHJpbnRmKCItLS0gYS8lc1xuKysrIGIvJXNcbiIsIGxhYmVsMSwgbGFiZWwyKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCXhwcC5mbGFncyA9IDA7CisJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJeGVjZmcuY3R4bGVuID0gMzsKKwllY2Iub3V0X2h1bmsgPSBOVUxMOworCWVjYi5vdXRfbGluZSA9IG91dGY7CisJcmV0ID0geGRpX2RpZmYoJm1pbnVzLCAmcGx1cywgJnhwcCwgJnhlY2ZnLCAmZWNiKTsKKworCWZyZWUobWludXMucHRyKTsKKwlmcmVlKHBsdXMucHRyKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY21kX3JlcmVyZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWVyZ2VfcnIgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlpbnQgaSwgYXV0b3VwZGF0ZSA9IC0xLCBmbGFncyA9IDA7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX1NFVF9JTlQoMCwgInJlcmVyZS1hdXRvdXBkYXRlIiwgJmF1dG91cGRhdGUsCisJCQlOXygicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiKSwgMSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCByZXJlcmVfdXNhZ2UsIDApOworCisJZ2l0X2NvbmZpZyhnaXRfeG1lcmdlX2NvbmZpZywgTlVMTCk7CisKKwlpZiAoYXV0b3VwZGF0ZSA9PSAxKQorCQlmbGFncyA9IFJFUkVSRV9BVVRPVVBEQVRFOworCWlmIChhdXRvdXBkYXRlID09IDApCisJCWZsYWdzID0gUkVSRVJFX05PQVVUT1VQREFURTsKKworCWlmIChhcmdjIDwgMSkKKwkJcmV0dXJuIHJlcG9fcmVyZXJlKHRoZV9yZXBvc2l0b3J5LCBmbGFncyk7CisKKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAiZm9yZ2V0IikpIHsKKwkJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCQlpZiAoYXJnYyA8IDIpCisJCQl3YXJuaW5nKF8oIidnaXQgcmVyZXJlIGZvcmdldCcgd2l0aG91dCBwYXRocyBpcyBkZXByZWNhdGVkIikpOworCQlwYXJzZV9wYXRoc3BlYygmcGF0aHNwZWMsIDAsIFBBVEhTUEVDX1BSRUZFUl9DV0QsCisJCQkgICAgICAgcHJlZml4LCBhcmd2ICsgMSk7CisJCXJldHVybiByZXJlcmVfZm9yZ2V0KHRoZV9yZXBvc2l0b3J5LCAmcGF0aHNwZWMpOworCX0KKworCWlmICghc3RyY21wKGFyZ3ZbMF0sICJjbGVhciIpKSB7CisJCXJlcmVyZV9jbGVhcih0aGVfcmVwb3NpdG9yeSwgJm1lcmdlX3JyKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImdjIikpCisJCXJlcmVyZV9nYyh0aGVfcmVwb3NpdG9yeSwgJm1lcmdlX3JyKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJzdGF0dXMiKSkgeworCQlpZiAoc2V0dXBfcmVyZXJlKHRoZV9yZXBvc2l0b3J5LCAmbWVyZ2VfcnIsCisJCQkJIGZsYWdzIHwgUkVSRVJFX1JFQURPTkxZKSA8IDApCisJCQlyZXR1cm4gMDsKKwkJZm9yIChpID0gMDsgaSA8IG1lcmdlX3JyLm5yOyBpKyspCisJCQlwcmludGYoIiVzXG4iLCBtZXJnZV9yci5pdGVtc1tpXS5zdHJpbmcpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAicmVtYWluaW5nIikpIHsKKwkJcmVyZXJlX3JlbWFpbmluZyh0aGVfcmVwb3NpdG9yeSwgJm1lcmdlX3JyKTsKKwkJZm9yIChpID0gMDsgaSA8IG1lcmdlX3JyLm5yOyBpKyspIHsKKwkJCWlmIChtZXJnZV9yci5pdGVtc1tpXS51dGlsICE9IFJFUkVSRV9SRVNPTFZFRCkKKwkJCQlwcmludGYoIiVzXG4iLCBtZXJnZV9yci5pdGVtc1tpXS5zdHJpbmcpOworCQkJZWxzZQorCQkJCS8qIHByZXBhcmUgZm9yIGxhdGVyIGNhbGwgdG8KKwkJCQkgKiBzdHJpbmdfbGlzdF9jbGVhcigpICovCisJCQkJbWVyZ2VfcnIuaXRlbXNbaV0udXRpbCA9IE5VTEw7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImRpZmYiKSkgeworCQlpZiAoc2V0dXBfcmVyZXJlKHRoZV9yZXBvc2l0b3J5LCAmbWVyZ2VfcnIsCisJCQkJIGZsYWdzIHwgUkVSRVJFX1JFQURPTkxZKSA8IDApCisJCQlyZXR1cm4gMDsKKwkJZm9yIChpID0gMDsgaSA8IG1lcmdlX3JyLm5yOyBpKyspIHsKKwkJCWNvbnN0IGNoYXIgKnBhdGggPSBtZXJnZV9yci5pdGVtc1tpXS5zdHJpbmc7CisJCQljb25zdCBzdHJ1Y3QgcmVyZXJlX2lkICppZCA9IG1lcmdlX3JyLml0ZW1zW2ldLnV0aWw7CisJCQlpZiAoZGlmZl90d28ocmVyZXJlX3BhdGgoaWQsICJwcmVpbWFnZSIpLCBwYXRoLCBwYXRoLCBwYXRoKSkKKwkJCQlkaWUoXygidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgZm9yICclcyciKSwgcmVyZXJlX3BhdGgoaWQsIE5VTEwpKTsKKwkJfQorCX0gZWxzZQorCQl1c2FnZV93aXRoX29wdGlvbnMocmVyZXJlX3VzYWdlLCBvcHRpb25zKTsKKworCXN0cmluZ19saXN0X2NsZWFyKCZtZXJnZV9yciwgMSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Jlc2V0LmMgYi9idWlsdGluL3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlNjlkNgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmVzZXQuYwpAQCAtMCwwICsxLDQ1NCBAQAorLyoKKyAqICJnaXQgcmVzZXQiIGJ1aWx0aW4gY29tbWFuZAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBDYXJsb3MgUmljYQorICoKKyAqIEJhc2VkIG9uIGdpdC1yZXNldC5zaCwgd2hpY2ggaXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgTGludXMgVG9ydmFsZHMgYW5kIEp1bmlvIEMgSGFtYW5vCisgKi8KKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInByZXR0eS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS1jb25maWcuaCIKKworI2RlZmluZSBSRUZSRVNIX0lOREVYX0RFTEFZX1dBUk5JTkdfSU5fTVMgKDIgKiAxMDAwKQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9yZXNldF91c2FnZVtdID0geworCU5fKCJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iKSwKKwlOXygiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLiIpLAorCU5fKCJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyZWUtaXNoPl0iKSwKKwlOXygiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRoc3BlYz4uLi5dIiksCisJTlVMTAorfTsKKworZW51bSByZXNldF90eXBlIHsgTUlYRUQsIFNPRlQsIEhBUkQsIE1FUkdFLCBLRUVQLCBOT05FIH07CitzdGF0aWMgY29uc3QgY2hhciAqcmVzZXRfdHlwZV9uYW1lc1tdID0geworCU5fKCJtaXhlZCIpLCBOXygic29mdCIpLCBOXygiaGFyZCIpLCBOXygibWVyZ2UiKSwgTl8oImtlZXAiKSwgTlVMTAorfTsKKworc3RhdGljIGlubGluZSBpbnQgaXNfbWVyZ2Uodm9pZCkKK3sKKwlyZXR1cm4gIWFjY2VzcyhnaXRfcGF0aF9tZXJnZV9oZWFkKHRoZV9yZXBvc2l0b3J5KSwgRl9PSyk7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXRfaW5kZXgoY29uc3QgY2hhciAqcmVmLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCByZXNldF90eXBlLCBpbnQgcXVpZXQpCit7CisJaW50IGksIG5yID0gMDsKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2NbMl07CisJc3RydWN0IHRyZWUgKnRyZWU7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJaW50IHJldCA9IC0xOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuaGVhZF9pZHggPSAxOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy5mbiA9IG9uZXdheV9tZXJnZTsKKwlvcHRzLm1lcmdlID0gMTsKKwlpbml0X2NoZWNrb3V0X21ldGFkYXRhKCZvcHRzLm1ldGEsIHJlZiwgb2lkLCBOVUxMKTsKKwlpZiAoIXF1aWV0KQorCQlvcHRzLnZlcmJvc2VfdXBkYXRlID0gMTsKKwlzd2l0Y2ggKHJlc2V0X3R5cGUpIHsKKwljYXNlIEtFRVA6CisJY2FzZSBNRVJHRToKKwkJb3B0cy51cGRhdGUgPSAxOworCQlicmVhazsKKwljYXNlIEhBUkQ6CisJCW9wdHMudXBkYXRlID0gMTsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlvcHRzLnJlc2V0ID0gMTsKKwl9CisKKwlyZWFkX2NhY2hlX3VubWVyZ2VkKCk7CisKKwlpZiAocmVzZXRfdHlwZSA9PSBLRUVQKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisJCWlmIChnZXRfb2lkKCJIRUFEIiwgJmhlYWRfb2lkKSkKKwkJCXJldHVybiBlcnJvcihfKCJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFELiIpKTsKKwkJaWYgKCFmaWxsX3RyZWVfZGVzY3JpcHRvcih0aGVfcmVwb3NpdG9yeSwgZGVzYyArIG5yLCAmaGVhZF9vaWQpKQorCQkJcmV0dXJuIGVycm9yKF8oIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgSEVBRC4iKSk7CisJCW5yKys7CisJCW9wdHMuZm4gPSB0d293YXlfbWVyZ2U7CisJfQorCisJaWYgKCFmaWxsX3RyZWVfZGVzY3JpcHRvcih0aGVfcmVwb3NpdG9yeSwgZGVzYyArIG5yLCBvaWQpKSB7CisJCWVycm9yKF8oIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIiksIG9pZF90b19oZXgob2lkKSk7CisJCWdvdG8gb3V0OworCX0KKwlucisrOworCisJaWYgKHVucGFja190cmVlcyhuciwgZGVzYywgJm9wdHMpKQorCQlnb3RvIG91dDsKKworCWlmIChyZXNldF90eXBlID09IE1JWEVEIHx8IHJlc2V0X3R5cGUgPT0gSEFSRCkgeworCQl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChvaWQpOworCQlwcmltZV9jYWNoZV90cmVlKHRoZV9yZXBvc2l0b3J5LCB0aGVfcmVwb3NpdG9yeS0+aW5kZXgsIHRyZWUpOworCX0KKworCXJldCA9IDA7CisKK291dDoKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKwkJZnJlZSgodm9pZCAqKWRlc2NbaV0uYnVmZmVyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwcmludF9uZXdfaGVhZF9saW5lKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJcHJpbnRmKF8oIkhFQUQgaXMgbm93IGF0ICVzIiksCisJCWZpbmRfdW5pcXVlX2FiYnJldigmY29tbWl0LT5vYmplY3Qub2lkLCBERUZBVUxUX0FCQlJFVikpOworCisJcHBfY29tbWl0X2Vhc3koQ01JVF9GTVRfT05FTElORSwgY29tbWl0LCAmYnVmKTsKKwlpZiAoYnVmLmxlbiA+IDApCisJCXByaW50ZigiICVzIiwgYnVmLmJ1Zik7CisJcHV0Y2hhcignXG4nKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2luZGV4X2Zyb21fZGlmZihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgaW50ZW50X3RvX2FkZCA9ICooaW50ICopZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUgPSBxLT5xdWV1ZVtpXS0+b25lOworCQlpbnQgaXNfbWlzc2luZyA9ICEob25lLT5tb2RlICYmICFpc19udWxsX29pZCgmb25lLT5vaWQpKTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCQlpZiAoaXNfbWlzc2luZyAmJiAhaW50ZW50X3RvX2FkZCkgeworCQkJcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShvbmUtPnBhdGgpOworCQkJY29udGludWU7CisJCX0KKworCQljZSA9IG1ha2VfY2FjaGVfZW50cnkoJnRoZV9pbmRleCwgb25lLT5tb2RlLCAmb25lLT5vaWQsIG9uZS0+cGF0aCwKKwkJCQkgICAgICAwLCAwKTsKKwkJaWYgKCFjZSkKKwkJCWRpZShfKCJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIiksCisJCQkgICAgb25lLT5wYXRoKTsKKwkJaWYgKGlzX21pc3NpbmcpIHsKKwkJCWNlLT5jZV9mbGFncyB8PSBDRV9JTlRFTlRfVE9fQUREOworCQkJc2V0X29iamVjdF9uYW1lX2Zvcl9pbnRlbnRfdG9fYWRkX2VudHJ5KGNlKTsKKwkJfQorCQlhZGRfY2FjaGVfZW50cnkoY2UsIEFERF9DQUNIRV9PS19UT19BREQgfCBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSk7CisJfQorfQorCitzdGF0aWMgaW50IHJlYWRfZnJvbV90cmVlKGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkgIHN0cnVjdCBvYmplY3RfaWQgKnRyZWVfb2lkLAorCQkJICBpbnQgaW50ZW50X3RvX2FkZCkKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIG9wdDsKKworCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CisJY29weV9wYXRoc3BlYygmb3B0LnBhdGhzcGVjLCBwYXRoc3BlYyk7CisJb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKwlvcHQuZm9ybWF0X2NhbGxiYWNrID0gdXBkYXRlX2luZGV4X2Zyb21fZGlmZjsKKwlvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSAmaW50ZW50X3RvX2FkZDsKKwlvcHQuZmxhZ3Mub3ZlcnJpZGVfc3VibW9kdWxlX2NvbmZpZyA9IDE7CisJb3B0LnJlcG8gPSB0aGVfcmVwb3NpdG9yeTsKKworCWlmIChkb19kaWZmX2NhY2hlKHRyZWVfb2lkLCAmb3B0KSkKKwkJcmV0dXJuIDE7CisJZGlmZmNvcmVfc3RkKCZvcHQpOworCWRpZmZfZmx1c2goJm9wdCk7CisJY2xlYXJfcGF0aHNwZWMoJm9wdC5wYXRoc3BlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X3JlZmxvZ19tZXNzYWdlKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICphY3Rpb24sCisJCQkgICAgICAgY29uc3QgY2hhciAqcmV2KQoreworCWNvbnN0IGNoYXIgKnJsYSA9IGdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKTsKKworCXN0cmJ1Zl9yZXNldChzYik7CisJaWYgKHJsYSkKKwkJc3RyYnVmX2FkZGYoc2IsICIlczogJXMiLCBybGEsIGFjdGlvbik7CisJZWxzZSBpZiAocmV2KQorCQlzdHJidWZfYWRkZihzYiwgInJlc2V0OiBtb3ZpbmcgdG8gJXMiLCByZXYpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoc2IsICJyZXNldDogJXMiLCBhY3Rpb24pOworfQorCitzdGF0aWMgdm9pZCBkaWVfaWZfdW5tZXJnZWRfY2FjaGUoaW50IHJlc2V0X3R5cGUpCit7CisJaWYgKGlzX21lcmdlKCkgfHwgdW5tZXJnZWRfY2FjaGUoKSkKKwkJZGllKF8oIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iKSwKKwkJICAgIF8ocmVzZXRfdHlwZV9uYW1lc1tyZXNldF90eXBlXSkpOworCit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2FyZ3Moc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJICAgICAgIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgICAgICBpbnQgcGF0Y2hfbW9kZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKipyZXZfcmV0KQoreworCWNvbnN0IGNoYXIgKnJldiA9ICJIRUFEIjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHVudXNlZDsKKwkvKgorCSAqIFBvc3NpYmxlIGFyZ3VtZW50cyBhcmU6CisJICoKKwkgKiBnaXQgcmVzZXQgWy1vcHRzXSBbPHJldj5dCisJICogZ2l0IHJlc2V0IFstb3B0c10gPHRyZWU+IFs8cGF0aHM+Li4uXQorCSAqIGdpdCByZXNldCBbLW9wdHNdIDx0cmVlPiAtLSBbPHBhdGhzPi4uLl0KKwkgKiBnaXQgcmVzZXQgWy1vcHRzXSAtLSBbPHBhdGhzPi4uLl0KKwkgKiBnaXQgcmVzZXQgWy1vcHRzXSA8cGF0aHM+Li4uCisJICoKKwkgKiBBdCB0aGlzIHBvaW50LCBhcmd2IHBvaW50cyBpbW1lZGlhdGVseSBhZnRlciBbLW9wdHNdLgorCSAqLworCisJaWYgKGFyZ3ZbMF0pIHsKKwkJaWYgKCFzdHJjbXAoYXJndlswXSwgIi0tIikpIHsKKwkJCWFyZ3YrKzsgLyogcmVzZXQgdG8gSEVBRCwgcG9zc2libHkgd2l0aCBwYXRocyAqLworCQl9IGVsc2UgaWYgKGFyZ3ZbMV0gJiYgIXN0cmNtcChhcmd2WzFdLCAiLS0iKSkgeworCQkJcmV2ID0gYXJndlswXTsKKwkJCWFyZ3YgKz0gMjsKKwkJfQorCQkvKgorCQkgKiBPdGhlcndpc2UsIGFyZ3ZbMF0gY291bGQgYmUgZWl0aGVyIDxyZXY+IG9yIDxwYXRocz4gYW5kCisJCSAqIGhhcyB0byBiZSB1bmFtYmlndW91cy4gSWYgdGhlcmUgaXMgYSBzaW5nbGUgYXJndW1lbnQsIGl0CisJCSAqIGNhbiBub3QgYmUgYSB0cmVlCisJCSAqLworCQllbHNlIGlmICgoIWFyZ3ZbMV0gJiYgIWdldF9vaWRfY29tbWl0dGlzaChhcmd2WzBdLCAmdW51c2VkKSkgfHwKKwkJCSAoYXJndlsxXSAmJiAhZ2V0X29pZF90cmVlaXNoKGFyZ3ZbMF0sICZ1bnVzZWQpKSkgeworCQkJLyoKKwkJCSAqIE9rLCBhcmd2WzBdIGxvb2tzIGxpa2UgYSBjb21taXQvdHJlZTsgaXQgc2hvdWxkIG5vdAorCQkJICogYmUgYSBmaWxlbmFtZS4KKwkJCSAqLworCQkJdmVyaWZ5X25vbl9maWxlbmFtZShwcmVmaXgsIGFyZ3ZbMF0pOworCQkJcmV2ID0gKmFyZ3YrKzsKKwkJfSBlbHNlIHsKKwkJCS8qIE90aGVyd2lzZSB3ZSB0cmVhdCB0aGlzIGFzIGEgZmlsZW5hbWUgKi8KKwkJCXZlcmlmeV9maWxlbmFtZShwcmVmaXgsIGFyZ3ZbMF0sIDEpOworCQl9CisJfQorCSpyZXZfcmV0ID0gcmV2OworCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZShfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CisKKwlwYXJzZV9wYXRoc3BlYyhwYXRoc3BlYywgMCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMIHwKKwkJICAgICAgIChwYXRjaF9tb2RlID8gUEFUSFNQRUNfUFJFRklYX09SSUdJTiA6IDApLAorCQkgICAgICAgcHJlZml4LCBhcmd2KTsKK30KKworc3RhdGljIGludCByZXNldF9yZWZzKGNvbnN0IGNoYXIgKnJldiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWludCB1cGRhdGVfcmVmX3N0YXR1czsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgKm9yaWcgPSBOVUxMLCBvaWRfb3JpZywKKwkJKm9sZF9vcmlnID0gTlVMTCwgb2lkX29sZF9vcmlnOworCisJaWYgKCFnZXRfb2lkKCJPUklHX0hFQUQiLCAmb2lkX29sZF9vcmlnKSkKKwkJb2xkX29yaWcgPSAmb2lkX29sZF9vcmlnOworCWlmICghZ2V0X29pZCgiSEVBRCIsICZvaWRfb3JpZykpIHsKKwkJb3JpZyA9ICZvaWRfb3JpZzsKKwkJc2V0X3JlZmxvZ19tZXNzYWdlKCZtc2csICJ1cGRhdGluZyBPUklHX0hFQUQiLCBOVUxMKTsKKwkJdXBkYXRlX3JlZihtc2cuYnVmLCAiT1JJR19IRUFEIiwgb3JpZywgb2xkX29yaWcsIDAsCisJCQkgICBVUERBVEVfUkVGU19NU0dfT05fRVJSKTsKKwl9IGVsc2UgaWYgKG9sZF9vcmlnKQorCQlkZWxldGVfcmVmKE5VTEwsICJPUklHX0hFQUQiLCBvbGRfb3JpZywgMCk7CisJc2V0X3JlZmxvZ19tZXNzYWdlKCZtc2csICJ1cGRhdGluZyBIRUFEIiwgcmV2KTsKKwl1cGRhdGVfcmVmX3N0YXR1cyA9IHVwZGF0ZV9yZWYobXNnLmJ1ZiwgIkhFQUQiLCBvaWQsIG9yaWcsIDAsCisJCQkJICAgICAgIFVQREFURV9SRUZTX01TR19PTl9FUlIpOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworCXJldHVybiB1cGRhdGVfcmVmX3N0YXR1czsKK30KKworc3RhdGljIGludCBnaXRfcmVzZXRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgInN1Ym1vZHVsZS5yZWN1cnNlIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9zdWJtb2R1bGVfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitpbnQgY21kX3Jlc2V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCByZXNldF90eXBlID0gTk9ORSwgdXBkYXRlX3JlZl9zdGF0dXMgPSAwLCBxdWlldCA9IDA7CisJaW50IHBhdGNoX21vZGUgPSAwLCBwYXRoc3BlY19maWxlX251bCA9IDAsIHVuYm9ybjsKKwljb25zdCBjaGFyICpyZXYsICpwYXRoc3BlY19mcm9tX2ZpbGUgPSBOVUxMOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlpbnQgaW50ZW50X3RvX2FkZCA9IDA7CisJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygiYmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycyIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgIm1peGVkIiwgJnJlc2V0X3R5cGUsCisJCQkJCQlOXygicmVzZXQgSEVBRCBhbmQgaW5kZXgiKSwgTUlYRUQpLAorCQlPUFRfU0VUX0lOVCgwLCAic29mdCIsICZyZXNldF90eXBlLCBOXygicmVzZXQgb25seSBIRUFEIiksIFNPRlQpLAorCQlPUFRfU0VUX0lOVCgwLCAiaGFyZCIsICZyZXNldF90eXBlLAorCQkJCU5fKCJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIiksIEhBUkQpLAorCQlPUFRfU0VUX0lOVCgwLCAibWVyZ2UiLCAmcmVzZXRfdHlwZSwKKwkJCQlOXygicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIpLCBNRVJHRSksCisJCU9QVF9TRVRfSU5UKDAsICJrZWVwIiwgJnJlc2V0X3R5cGUsCisJCQkJTl8oInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIpLCBLRUVQKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgInJlY3Vyc2Utc3VibW9kdWxlcyIsIE5VTEwsCisJCQkgICAgInJlc2V0IiwgImNvbnRyb2wgcmVjdXJzaXZlIHVwZGF0aW5nIG9mIHN1Ym1vZHVsZXMiLAorCQkJICAgIFBBUlNFX09QVF9PUFRBUkcsIG9wdGlvbl9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXNfd29ya3RyZWVfdXBkYXRlciksCisJCU9QVF9CT09MKCdwJywgInBhdGNoIiwgJnBhdGNoX21vZGUsIE5fKCJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIpKSwKKwkJT1BUX0JPT0woJ04nLCAiaW50ZW50LXRvLWFkZCIsICZpbnRlbnRfdG9fYWRkLAorCQkJCU5fKCJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIpKSwKKwkJT1BUX1BBVEhTUEVDX0ZST01fRklMRSgmcGF0aHNwZWNfZnJvbV9maWxlKSwKKwkJT1BUX1BBVEhTUEVDX0ZJTEVfTlVMKCZwYXRoc3BlY19maWxlX251bCksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF9yZXNldF9jb25maWcsIE5VTEwpOworCWdpdF9jb25maWdfZ2V0X2Jvb2woInJlc2V0LnF1aWV0IiwgJnF1aWV0KTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X3Jlc2V0X3VzYWdlLAorCQkJCQkJUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOworCXBhcnNlX2FyZ3MoJnBhdGhzcGVjLCBhcmd2LCBwcmVmaXgsIHBhdGNoX21vZGUsICZyZXYpOworCisJaWYgKHBhdGhzcGVjX2Zyb21fZmlsZSkgeworCQlpZiAocGF0Y2hfbW9kZSkKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXBhdGNoIikpOworCisJCWlmIChwYXRoc3BlYy5ucikKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiKSk7CisKKwkJcGFyc2VfcGF0aHNwZWNfZmlsZSgmcGF0aHNwZWMsIDAsCisJCQkJICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMLAorCQkJCSAgICBwcmVmaXgsIHBhdGhzcGVjX2Zyb21fZmlsZSwgcGF0aHNwZWNfZmlsZV9udWwpOworCX0gZWxzZSBpZiAocGF0aHNwZWNfZmlsZV9udWwpIHsKKwkJZGllKF8oIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWlyZXMgLS1wYXRoc3BlYy1mcm9tLWZpbGUiKSk7CisJfQorCisJdW5ib3JuID0gIXN0cmNtcChyZXYsICJIRUFEIikgJiYgZ2V0X29pZCgiSEVBRCIsICZvaWQpOworCWlmICh1bmJvcm4pIHsKKwkJLyogcmVzZXQgb24gdW5ib3JuIGJyYW5jaDogdHJlYXQgYXMgcmVzZXQgdG8gZW1wdHkgdHJlZSAqLworCQlvaWRjcHkoJm9pZCwgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSk7CisJfSBlbHNlIGlmICghcGF0aHNwZWMubnIgJiYgIXBhdGNoX21vZGUpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQlpZiAoZ2V0X29pZF9jb21taXR0aXNoKHJldiwgJm9pZCkpCisJCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIpLCByZXYpOworCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJCWlmICghY29tbWl0KQorCQkJZGllKF8oIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iKSwgcmV2KTsKKwkJb2lkY3B5KCZvaWQsICZjb21taXQtPm9iamVjdC5vaWQpOworCX0gZWxzZSB7CisJCXN0cnVjdCB0cmVlICp0cmVlOworCQlpZiAoZ2V0X29pZF90cmVlaXNoKHJldiwgJm9pZCkpCisJCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHRyZWUuIiksIHJldik7CisJCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KCZvaWQpOworCQlpZiAoIXRyZWUpCisJCQlkaWUoXygiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIpLCByZXYpOworCQlvaWRjcHkoJm9pZCwgJnRyZWUtPm9iamVjdC5vaWQpOworCX0KKworCWlmIChwYXRjaF9tb2RlKSB7CisJCWlmIChyZXNldF90eXBlICE9IE5PTkUpCisJCQlkaWUoXygiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IikpOworCQl0cmFjZTJfY21kX21vZGUoInBhdGNoLWludGVyYWN0aXZlIik7CisJCXJldHVybiBydW5fYWRkX2ludGVyYWN0aXZlKHJldiwgIi0tcGF0Y2g9cmVzZXQiLCAmcGF0aHNwZWMpOworCX0KKworCS8qIGdpdCByZXNldCB0cmVlIFstLV0gcGF0aHMuLi4gY2FuIGJlIHVzZWQgdG8KKwkgKiBsb2FkIGNob3NlbiBwYXRocyBmcm9tIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHdpdGhvdXQKKwkgKiBhZmZlY3RpbmcgdGhlIHdvcmtpbmcgdHJlZSBub3IgSEVBRC4gKi8KKwlpZiAocGF0aHNwZWMubnIpIHsKKwkJaWYgKHJlc2V0X3R5cGUgPT0gTUlYRUQpCisJCQl3YXJuaW5nKF8oIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIpKTsKKwkJZWxzZSBpZiAocmVzZXRfdHlwZSAhPSBOT05FKQorCQkJZGllKF8oIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIpLAorCQkJCQlfKHJlc2V0X3R5cGVfbmFtZXNbcmVzZXRfdHlwZV0pKTsKKwl9CisJaWYgKHJlc2V0X3R5cGUgPT0gTk9ORSkKKwkJcmVzZXRfdHlwZSA9IE1JWEVEOyAvKiBieSBkZWZhdWx0ICovCisKKwlpZiAocGF0aHNwZWMubnIpCisJCXRyYWNlMl9jbWRfbW9kZSgicGF0aCIpOworCWVsc2UKKwkJdHJhY2UyX2NtZF9tb2RlKHJlc2V0X3R5cGVfbmFtZXNbcmVzZXRfdHlwZV0pOworCisJaWYgKHJlc2V0X3R5cGUgIT0gU09GVCAmJiAocmVzZXRfdHlwZSAhPSBNSVhFRCB8fCBnZXRfZ2l0X3dvcmtfdHJlZSgpKSkKKwkJc2V0dXBfd29ya190cmVlKCk7CisKKwlpZiAocmVzZXRfdHlwZSA9PSBNSVhFRCAmJiBpc19iYXJlX3JlcG9zaXRvcnkoKSkKKwkJZGllKF8oIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IiksCisJCSAgICBfKHJlc2V0X3R5cGVfbmFtZXNbcmVzZXRfdHlwZV0pKTsKKworCWlmIChpbnRlbnRfdG9fYWRkICYmIHJlc2V0X3R5cGUgIT0gTUlYRUQpCisJCWRpZShfKCItTiBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1taXhlZCIpKTsKKworCS8qIFNvZnQgcmVzZXQgZG9lcyBub3QgdG91Y2ggdGhlIGluZGV4IGZpbGUgbm9yIHRoZSB3b3JraW5nIHRyZWUKKwkgKiBhdCBhbGwsIGJ1dCByZXF1aXJlcyB0aGVtIGluIGEgZ29vZCBvcmRlci4gIE90aGVyIHJlc2V0cyByZXNldAorCSAqIHRoZSBpbmRleCBmaWxlIHRvIHRoZSB0cmVlIG9iamVjdCB3ZSBhcmUgc3dpdGNoaW5nIHRvLiAqLworCWlmIChyZXNldF90eXBlID09IFNPRlQgfHwgcmVzZXRfdHlwZSA9PSBLRUVQKQorCQlkaWVfaWZfdW5tZXJnZWRfY2FjaGUocmVzZXRfdHlwZSk7CisKKwlpZiAocmVzZXRfdHlwZSAhPSBTT0ZUKSB7CisJCXN0cnVjdCBsb2NrX2ZpbGUgbG9jayA9IExPQ0tfSU5JVDsKKwkJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2ssIExPQ0tfRElFX09OX0VSUk9SKTsKKwkJaWYgKHJlc2V0X3R5cGUgPT0gTUlYRUQpIHsKKwkJCWludCBmbGFncyA9IHF1aWV0ID8gUkVGUkVTSF9RVUlFVCA6IFJFRlJFU0hfSU5fUE9SQ0VMQUlOOworCQkJaWYgKHJlYWRfZnJvbV90cmVlKCZwYXRoc3BlYywgJm9pZCwgaW50ZW50X3RvX2FkZCkpCisJCQkJcmV0dXJuIDE7CisJCQl0aGVfaW5kZXgudXBkYXRlZF9za2lwd29ya3RyZWUgPSAxOworCQkJaWYgKCFxdWlldCAmJiBnZXRfZ2l0X3dvcmtfdHJlZSgpKSB7CisJCQkJdWludDY0X3QgdF9iZWdpbiwgdF9kZWx0YV9pbl9tczsKKworCQkJCXRfYmVnaW4gPSBnZXRuYW5vdGltZSgpOworCQkJCXJlZnJlc2hfaW5kZXgoJnRoZV9pbmRleCwgZmxhZ3MsIE5VTEwsIE5VTEwsCisJCQkJCSAgICAgIF8oIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6IikpOworCQkJCXRfZGVsdGFfaW5fbXMgPSAoZ2V0bmFub3RpbWUoKSAtIHRfYmVnaW4pIC8gMTAwMDAwMDsKKwkJCQlpZiAoYWR2aWNlX3Jlc2V0X3F1aWV0X3dhcm5pbmcgJiYgdF9kZWx0YV9pbl9tcyA+IFJFRlJFU0hfSU5ERVhfREVMQVlfV0FSTklOR19JTl9NUykgeworCQkJCQlwcmludGYoXygiXG5JdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldC4gIFlvdSBjYW5cbiIKKwkJCQkJCSJ1c2UgJy0tcXVpZXQnIHRvIGF2b2lkIHRoaXMuICBTZXQgdGhlIGNvbmZpZyBzZXR0aW5nIHJlc2V0LnF1aWV0IHRvIHRydWVcbiIKKwkJCQkJCSJ0byBtYWtlIHRoaXMgdGhlIGRlZmF1bHQuXG4iKSwgdF9kZWx0YV9pbl9tcyAvIDEwMDAuMCk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJc3RydWN0IG9iamVjdF9pZCBkdW1teTsKKwkJCWNoYXIgKnJlZiA9IE5VTEw7CisJCQlpbnQgZXJyOworCisJCQlkd2ltX3JlZihyZXYsIHN0cmxlbihyZXYpLCAmZHVtbXksICZyZWYpOworCQkJaWYgKHJlZiAmJiAhc3RhcnRzX3dpdGgocmVmLCAicmVmcy8iKSkKKwkJCQlyZWYgPSBOVUxMOworCisJCQllcnIgPSByZXNldF9pbmRleChyZWYsICZvaWQsIHJlc2V0X3R5cGUsIHF1aWV0KTsKKwkJCWlmIChyZXNldF90eXBlID09IEtFRVAgJiYgIWVycikKKwkJCQllcnIgPSByZXNldF9pbmRleChyZWYsICZvaWQsIE1JWEVELCBxdWlldCk7CisJCQlpZiAoZXJyKQorCQkJCWRpZShfKCJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIpLCByZXYpOworCQkJZnJlZShyZWYpOworCQl9CisKKwkJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9jaywgQ09NTUlUX0xPQ0spKQorCQkJZGllKF8oIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iKSk7CisJfQorCisJaWYgKCFwYXRoc3BlYy5uciAmJiAhdW5ib3JuKSB7CisJCS8qIEFueSByZXNldHMgd2l0aG91dCBwYXRocyB1cGRhdGUgSEVBRCB0byB0aGUgaGVhZCBiZWluZworCQkgKiBzd2l0Y2hlZCB0bywgc2F2aW5nIHRoZSBwcmV2aW91cyBoZWFkIGluIE9SSUdfSEVBRCBiZWZvcmUuICovCisJCXVwZGF0ZV9yZWZfc3RhdHVzID0gcmVzZXRfcmVmcyhyZXYsICZvaWQpOworCisJCWlmIChyZXNldF90eXBlID09IEhBUkQgJiYgIXVwZGF0ZV9yZWZfc3RhdHVzICYmICFxdWlldCkKKwkJCXByaW50X25ld19oZWFkX2xpbmUobG9va3VwX2NvbW1pdF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksICZvaWQpKTsKKwl9CisJaWYgKCFwYXRoc3BlYy5ucikKKwkJcmVtb3ZlX2JyYW5jaF9zdGF0ZSh0aGVfcmVwb3NpdG9yeSwgMCk7CisKKwlyZXR1cm4gdXBkYXRlX3JlZl9zdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Jldi1saXN0LmMgYi9idWlsdGluL3Jldi1saXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUyMDExMQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmV2LWxpc3QuYwpAQCAtMCwwICsxLDY4NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLWZpbHRlci5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJwYWNrLWJpdG1hcC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImdyYXBoLmgiCisjaW5jbHVkZSAiYmlzZWN0LmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJyZWZsb2ctd2Fsay5oIgorI2luY2x1ZGUgIm9pZHNldC5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHJldl9saXN0X3VzYWdlW10gPQorImdpdCByZXYtbGlzdCBbT1BUSU9OXSA8Y29tbWl0LWlkPi4uLiBbIC0tIHBhdGhzLi4uIF1cbiIKKyIgIGxpbWl0aW5nIG91dHB1dDpcbiIKKyIgICAgLS1tYXgtY291bnQ9PG4+XG4iCisiICAgIC0tbWF4LWFnZT08ZXBvY2g+XG4iCisiICAgIC0tbWluLWFnZT08ZXBvY2g+XG4iCisiICAgIC0tc3BhcnNlXG4iCisiICAgIC0tbm8tbWVyZ2VzXG4iCisiICAgIC0tbWluLXBhcmVudHM9PG4+XG4iCisiICAgIC0tbm8tbWluLXBhcmVudHNcbiIKKyIgICAgLS1tYXgtcGFyZW50cz08bj5cbiIKKyIgICAgLS1uby1tYXgtcGFyZW50c1xuIgorIiAgICAtLXJlbW92ZS1lbXB0eVxuIgorIiAgICAtLWFsbFxuIgorIiAgICAtLWJyYW5jaGVzXG4iCisiICAgIC0tdGFnc1xuIgorIiAgICAtLXJlbW90ZXNcbiIKKyIgICAgLS1zdGRpblxuIgorIiAgICAtLXF1aWV0XG4iCisiICBvcmRlcmluZyBvdXRwdXQ6XG4iCisiICAgIC0tdG9wby1vcmRlclxuIgorIiAgICAtLWRhdGUtb3JkZXJcbiIKKyIgICAgLS1yZXZlcnNlXG4iCisiICBmb3JtYXR0aW5nIG91dHB1dDpcbiIKKyIgICAgLS1wYXJlbnRzXG4iCisiICAgIC0tY2hpbGRyZW5cbiIKKyIgICAgLS1vYmplY3RzIHwgLS1vYmplY3RzLWVkZ2VcbiIKKyIgICAgLS11bnBhY2tlZFxuIgorIiAgICAtLWhlYWRlciB8IC0tcHJldHR5XG4iCisiICAgIC0tW25vLV1vYmplY3QtbmFtZXNcbiIKKyIgICAgLS1hYmJyZXY9PG4+IHwgLS1uby1hYmJyZXZcbiIKKyIgICAgLS1hYmJyZXYtY29tbWl0XG4iCisiICAgIC0tbGVmdC1yaWdodFxuIgorIiAgICAtLWNvdW50XG4iCisiICBzcGVjaWFsIHB1cnBvc2U6XG4iCisiICAgIC0tYmlzZWN0XG4iCisiICAgIC0tYmlzZWN0LXZhcnNcbiIKKyIgICAgLS1iaXNlY3QtYWxsIgorOworCitzdGF0aWMgc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKK3N0YXRpYyB1bnNpZ25lZCBwcm9ncmVzc19jb3VudGVyOworCitzdGF0aWMgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyBmaWx0ZXJfb3B0aW9uczsKK3N0YXRpYyBzdHJ1Y3Qgb2lkc2V0IG9taXR0ZWRfb2JqZWN0czsKK3N0YXRpYyBpbnQgYXJnX3ByaW50X29taXR0ZWQ7IC8qIHByaW50IG9iamVjdHMgb21pdHRlZCBieSBmaWx0ZXIgKi8KKworc3RhdGljIHN0cnVjdCBvaWRzZXQgbWlzc2luZ19vYmplY3RzOworZW51bSBtaXNzaW5nX2FjdGlvbiB7CisJTUFfRVJST1IgPSAwLCAgICAvKiBmYWlsIGlmIGFueSBtaXNzaW5nIG9iamVjdHMgYXJlIGVuY291bnRlcmVkICovCisJTUFfQUxMT1dfQU5ZLCAgICAvKiBzaWxlbnRseSBhbGxvdyBBTEwgbWlzc2luZyBvYmplY3RzICovCisJTUFfUFJJTlQsICAgICAgICAvKiBwcmludCBBTEwgbWlzc2luZyBvYmplY3RzIGluIHNwZWNpYWwgc2VjdGlvbiAqLworCU1BX0FMTE9XX1BST01JU09SLCAvKiBzaWxlbnRseSBhbGxvdyBhbGwgbWlzc2luZyBQUk9NSVNPUiBvYmplY3RzICovCit9Oworc3RhdGljIGVudW0gbWlzc2luZ19hY3Rpb24gYXJnX21pc3NpbmdfYWN0aW9uOworCisvKiBkaXNwbGF5IG9ubHkgdGhlIG9pZCBvZiBlYWNoIG9iamVjdCBlbmNvdW50ZXJlZCAqLworc3RhdGljIGludCBhcmdfc2hvd19vYmplY3RfbmFtZXMgPSAxOworCisjZGVmaW5lIERFRkFVTFRfT0lEU0VUX1NJWkUgICAgICgxNioxMDI0KQorCitzdGF0aWMgdm9pZCBmaW5pc2hfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CitzdGF0aWMgdm9pZCBzaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJldl9saXN0X2luZm8gKmluZm8gPSBkYXRhOworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IGluZm8tPnJldnM7CisKKwlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCArK3Byb2dyZXNzX2NvdW50ZXIpOworCisJaWYgKGluZm8tPmZsYWdzICYgUkVWX0xJU1RfUVVJRVQpIHsKKwkJZmluaXNoX2NvbW1pdChjb21taXQpOworCQlyZXR1cm47CisJfQorCisJZ3JhcGhfc2hvd19jb21taXQocmV2cy0+Z3JhcGgpOworCisJaWYgKHJldnMtPmNvdW50KSB7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFBBVENIU0FNRSkKKwkJCXJldnMtPmNvdW50X3NhbWUrKzsKKwkJZWxzZSBpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkKKwkJCXJldnMtPmNvdW50X2xlZnQrKzsKKwkJZWxzZQorCQkJcmV2cy0+Y291bnRfcmlnaHQrKzsKKwkJZmluaXNoX2NvbW1pdChjb21taXQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGluZm8tPnNob3dfdGltZXN0YW1wKQorCQlwcmludGYoIiUiUFJJdGltZSIgIiwgY29tbWl0LT5kYXRlKTsKKwlpZiAoaW5mby0+aGVhZGVyX3ByZWZpeCkKKwkJZnB1dHMoaW5mby0+aGVhZGVyX3ByZWZpeCwgc3Rkb3V0KTsKKworCWlmICghcmV2cy0+Z3JhcGgpCisJCWZwdXRzKGdldF9yZXZpc2lvbl9tYXJrKHJldnMsIGNvbW1pdCksIHN0ZG91dCk7CisJaWYgKHJldnMtPmFiYnJldl9jb21taXQgJiYgcmV2cy0+YWJicmV2KQorCQlmcHV0cyhmaW5kX3VuaXF1ZV9hYmJyZXYoJmNvbW1pdC0+b2JqZWN0Lm9pZCwgcmV2cy0+YWJicmV2KSwKKwkJICAgICAgc3Rkb3V0KTsKKwllbHNlCisJCWZwdXRzKG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCksIHN0ZG91dCk7CisJaWYgKHJldnMtPnByaW50X3BhcmVudHMpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCQl3aGlsZSAocGFyZW50cykgeworCQkJcHJpbnRmKCIgJXMiLCBvaWRfdG9faGV4KCZwYXJlbnRzLT5pdGVtLT5vYmplY3Qub2lkKSk7CisJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJfQorCX0KKwlpZiAocmV2cy0+Y2hpbGRyZW4ubmFtZSkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNoaWxkcmVuOworCisJCWNoaWxkcmVuID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPmNoaWxkcmVuLCAmY29tbWl0LT5vYmplY3QpOworCQl3aGlsZSAoY2hpbGRyZW4pIHsKKwkJCXByaW50ZigiICVzIiwgb2lkX3RvX2hleCgmY2hpbGRyZW4tPml0ZW0tPm9iamVjdC5vaWQpKTsKKwkJCWNoaWxkcmVuID0gY2hpbGRyZW4tPm5leHQ7CisJCX0KKwl9CisJc2hvd19kZWNvcmF0aW9ucyhyZXZzLCBjb21taXQpOworCWlmIChyZXZzLT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUpCisJCXB1dGNoYXIoJyAnKTsKKwllbHNlCisJCXB1dGNoYXIoJ1xuJyk7CisKKwlpZiAocmV2cy0+dmVyYm9zZV9oZWFkZXIpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwkJY3R4LmFiYnJldiA9IHJldnMtPmFiYnJldjsKKwkJY3R4LmRhdGVfbW9kZSA9IHJldnMtPmRhdGVfbW9kZTsKKwkJY3R4LmRhdGVfbW9kZV9leHBsaWNpdCA9IHJldnMtPmRhdGVfbW9kZV9leHBsaWNpdDsKKwkJY3R4LmZtdCA9IHJldnMtPmNvbW1pdF9mb3JtYXQ7CisJCWN0eC5vdXRwdXRfZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOworCQljdHguY29sb3IgPSByZXZzLT5kaWZmb3B0LnVzZV9jb2xvcjsKKwkJcHJldHR5X3ByaW50X2NvbW1pdCgmY3R4LCBjb21taXQsICZidWYpOworCQlpZiAoYnVmLmxlbikgeworCQkJaWYgKHJldnMtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfT05FTElORSkKKwkJCQlncmFwaF9zaG93X29uZWxpbmUocmV2cy0+Z3JhcGgpOworCisJCQlncmFwaF9zaG93X2NvbW1pdF9tc2cocmV2cy0+Z3JhcGgsIHN0ZG91dCwgJmJ1Zik7CisKKwkJCS8qCisJCQkgKiBBZGQgYSBuZXdsaW5lIGFmdGVyIHRoZSBjb21taXQgbWVzc2FnZS4KKwkJCSAqCisJCQkgKiBVc3VhbGx5LCB0aGlzIG5ld2xpbmUgcHJvZHVjZXMgYSBibGFuaworCQkJICogcGFkZGluZyBsaW5lIGJldHdlZW4gZW50cmllcywgaW4gd2hpY2ggY2FzZQorCQkJICogd2UgbmVlZCB0byBhZGQgZ3JhcGggcGFkZGluZyBvbiB0aGlzIGxpbmUuCisJCQkgKgorCQkJICogSG93ZXZlciwgdGhlIGNvbW1pdCBtZXNzYWdlIG1heSBub3QgZW5kIGluIGEKKwkJCSAqIG5ld2xpbmUuICBJbiB0aGlzIGNhc2UgdGhlIG5ld2xpbmUgc2ltcGx5CisJCQkgKiBlbmRzIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLAorCQkJICogYW5kIHdlIGRvbid0IG5lZWQgYW55IGdyYXBoIG91dHB1dC4gIChUaGlzCisJCQkgKiBhbHdheXMgaGFwcGVucyB3aXRoIENNSVRfRk1UX09ORUxJTkUsIGFuZCBpdAorCQkJICogaGFwcGVucyB3aXRoIENNSVRfRk1UX1VTRVJGT1JNQVQgd2hlbiB0aGUKKwkJCSAqIGZvcm1hdCBkb2Vzbid0IGV4cGxpY2l0bHkgZW5kIGluIGEgbmV3bGluZS4pCisJCQkgKi8KKwkJCWlmIChidWYubGVuICYmIGJ1Zi5idWZbYnVmLmxlbiAtIDFdID09ICdcbicpCisJCQkJZ3JhcGhfc2hvd19wYWRkaW5nKHJldnMtPmdyYXBoKTsKKwkJCXB1dGNoYXIoaW5mby0+aGRyX3Rlcm1pbmF0aW9uKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgbWVzc2FnZSBidWZmZXIgaXMgZW1wdHksIGp1c3Qgc2hvdworCQkJICogdGhlIHJlc3Qgb2YgdGhlIGdyYXBoIG91dHB1dCBmb3IgdGhpcworCQkJICogY29tbWl0LgorCQkJICovCisJCQlpZiAoZ3JhcGhfc2hvd19yZW1haW5kZXIocmV2cy0+Z3JhcGgpKQorCQkJCXB1dGNoYXIoJ1xuJyk7CisJCQlpZiAocmV2cy0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKQorCQkJCXB1dGNoYXIoJ1xuJyk7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfSBlbHNlIHsKKwkJaWYgKGdyYXBoX3Nob3dfcmVtYWluZGVyKHJldnMtPmdyYXBoKSkKKwkJCXB1dGNoYXIoJ1xuJyk7CisJfQorCW1heWJlX2ZsdXNoX29yX2RpZShzdGRvdXQsICJzdGRvdXQiKTsKKwlmaW5pc2hfY29tbWl0KGNvbW1pdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWlmIChjb21taXQtPnBhcmVudHMpIHsKKwkJZnJlZV9jb21taXRfbGlzdChjb21taXQtPnBhcmVudHMpOworCQljb21taXQtPnBhcmVudHMgPSBOVUxMOworCX0KKwlmcmVlX2NvbW1pdF9idWZmZXIodGhlX3JlcG9zaXRvcnktPnBhcnNlZF9vYmplY3RzLAorCQkJICAgY29tbWl0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbmlzaF9vYmplY3RfX21hKHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwkvKgorCSAqIFdoZXRoZXIgb3Igbm90IHdlIHRyeSB0byBkeW5hbWljYWxseSBmZXRjaCBtaXNzaW5nIG9iamVjdHMKKwkgKiBmcm9tIHRoZSBzZXJ2ZXIsIHdlIGN1cnJlbnRseSBETyBOT1QgaGF2ZSB0aGUgb2JqZWN0LiAgV2UKKwkgKiBjYW4gZWl0aGVyIHByaW50LCBhbGxvdyAoaWdub3JlKSwgb3IgY29uZGl0aW9uYWxseSBhbGxvdworCSAqIChpZ25vcmUpIHRoZW0uCisJICovCisJc3dpdGNoIChhcmdfbWlzc2luZ19hY3Rpb24pIHsKKwljYXNlIE1BX0VSUk9SOgorCQlkaWUoIm1pc3NpbmcgJXMgb2JqZWN0ICclcyciLAorCQkgICAgdHlwZV9uYW1lKG9iai0+dHlwZSksIG9pZF90b19oZXgoJm9iai0+b2lkKSk7CisJCXJldHVybjsKKworCWNhc2UgTUFfQUxMT1dfQU5ZOgorCQlyZXR1cm47CisKKwljYXNlIE1BX1BSSU5UOgorCQlvaWRzZXRfaW5zZXJ0KCZtaXNzaW5nX29iamVjdHMsICZvYmotPm9pZCk7CisJCXJldHVybjsKKworCWNhc2UgTUFfQUxMT1dfUFJPTUlTT1I6CisJCWlmIChpc19wcm9taXNvcl9vYmplY3QoJm9iai0+b2lkKSkKKwkJCXJldHVybjsKKwkJZGllKCJ1bmV4cGVjdGVkIG1pc3NpbmcgJXMgb2JqZWN0ICclcyciLAorCQkgICAgdHlwZV9uYW1lKG9iai0+dHlwZSksIG9pZF90b19oZXgoJm9iai0+b2lkKSk7CisJCXJldHVybjsKKworCWRlZmF1bHQ6CisJCUJVRygidW5oYW5kbGVkIG1pc3NpbmdfYWN0aW9uIik7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZmluaXNoX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJldl9saXN0X2luZm8gKmluZm8gPSBjYl9kYXRhOworCWlmIChvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQodGhlX3JlcG9zaXRvcnksICZvYmotPm9pZCwgTlVMTCwgMCkgPCAwKSB7CisJCWZpbmlzaF9vYmplY3RfX21hKG9iaik7CisJCXJldHVybiAxOworCX0KKwlpZiAoaW5mby0+cmV2cy0+dmVyaWZ5X29iamVjdHMgJiYgIW9iai0+cGFyc2VkICYmIG9iai0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQlwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvYmotPm9pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcmV2X2xpc3RfaW5mbyAqaW5mbyA9IGNiX2RhdGE7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gaW5mby0+cmV2czsKKworCWlmIChmaW5pc2hfb2JqZWN0KG9iaiwgbmFtZSwgY2JfZGF0YSkpCisJCXJldHVybjsKKwlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCArK3Byb2dyZXNzX2NvdW50ZXIpOworCWlmIChpbmZvLT5mbGFncyAmIFJFVl9MSVNUX1FVSUVUKQorCQlyZXR1cm47CisKKwlpZiAocmV2cy0+Y291bnQpIHsKKwkJLyoKKwkJICogVGhlIG9iamVjdCBjb3VudCBpcyBhbHdheXMgYWNjdW11bGF0ZWQgaW4gdGhlIC5jb3VudF9yaWdodAorCQkgKiBmaWVsZCBmb3IgdHJhdmVyc2FsIHRoYXQgaXMgbm90IGEgbGVmdC1yaWdodCB0cmF2ZXJzYWwsCisJCSAqIGFuZCBjbWRfcmV2X2xpc3QoKSBtYWRlIHN1cmUgdGhhdCBhIC5jb3VudCByZXF1ZXN0IHRoYXQKKwkJICogd2FudHMgdG8gY291bnQgbm9uLWNvbW1pdCBvYmplY3RzLCB3aGljaCBpcyBoYW5kbGVkIGJ5CisJCSAqIHRoZSBzaG93X29iamVjdCgpIGNhbGxiYWNrLCBkb2VzIG5vdCBhc2sgZm9yIC5sZWZ0X3JpZ2h0LgorCQkgKi8KKwkJcmV2cy0+Y291bnRfcmlnaHQrKzsKKwkJcmV0dXJuOworCX0KKworCWlmIChhcmdfc2hvd19vYmplY3RfbmFtZXMpCisJCXNob3dfb2JqZWN0X3dpdGhfbmFtZShzdGRvdXQsIG9iaiwgbmFtZSk7CisJZWxzZQorCQlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2VkZ2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXByaW50ZigiLSVzXG4iLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfdmFyX3N0cihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbCkKK3sKKwlwcmludGYoIiVzPSclcydcbiIsIHZhciwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfdmFyX2ludChjb25zdCBjaGFyICp2YXIsIGludCB2YWwpCit7CisJcHJpbnRmKCIlcz0lZFxuIiwgdmFyLCB2YWwpOworfQorCitzdGF0aWMgaW50IHNob3dfYmlzZWN0X3ZhcnMoc3RydWN0IHJldl9saXN0X2luZm8gKmluZm8sIGludCByZWFjaGVzLCBpbnQgYWxsKQoreworCWludCBjbnQsIGZsYWdzID0gaW5mby0+ZmxhZ3M7CisJY2hhciBoZXhbR0lUX01BWF9IRVhTWiArIDFdID0gIiI7CisJc3RydWN0IGNvbW1pdF9saXN0ICp0cmllZDsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnMgPSBpbmZvLT5yZXZzOworCisJaWYgKCFyZXZzLT5jb21taXRzKQorCQlyZXR1cm4gMTsKKworCXJldnMtPmNvbW1pdHMgPSBmaWx0ZXJfc2tpcHBlZChyZXZzLT5jb21taXRzLCAmdHJpZWQsCisJCQkJICAgICAgIGZsYWdzICYgQklTRUNUX1NIT1dfQUxMLAorCQkJCSAgICAgICBOVUxMLCBOVUxMKTsKKworCS8qCisJICogcmV2cy0+Y29tbWl0cyBjYW4gcmVhY2ggInJlYWNoZXMiIGNvbW1pdHMgYW1vbmcKKwkgKiAiYWxsIiBjb21taXRzLiAgSWYgaXQgaXMgZ29vZCwgdGhlbiB0aGVyZSBhcmUKKwkgKiAoYWxsLXJlYWNoZXMpIGNvbW1pdHMgbGVmdCB0byBiZSBiaXNlY3RlZC4KKwkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgaXQgaXMgYmFkLCB0aGVuIHRoZSBzZXQKKwkgKiB0byBiaXNlY3QgaXMgInJlYWNoZXMiLgorCSAqIEEgYmlzZWN0IHNldCBvZiBzaXplIE4gaGFzIChOLTEpIGNvbW1pdHMgZnVydGhlcgorCSAqIHRvIHRlc3QsIGFzIHdlIGFscmVhZHkga25vdyBvbmUgYmFkIG9uZS4KKwkgKi8KKwljbnQgPSBhbGwgLSByZWFjaGVzOworCWlmIChjbnQgPCByZWFjaGVzKQorCQljbnQgPSByZWFjaGVzOworCisJaWYgKHJldnMtPmNvbW1pdHMpCisJCW9pZF90b19oZXhfcihoZXgsICZyZXZzLT5jb21taXRzLT5pdGVtLT5vYmplY3Qub2lkKTsKKworCWlmIChmbGFncyAmIEJJU0VDVF9TSE9XX0FMTCkgeworCQl0cmF2ZXJzZV9jb21taXRfbGlzdChyZXZzLCBzaG93X2NvbW1pdCwgc2hvd19vYmplY3QsIGluZm8pOworCQlwcmludGYoIi0tLS0tLVxuIik7CisJfQorCisJcHJpbnRfdmFyX3N0cigiYmlzZWN0X3JldiIsIGhleCk7CisJcHJpbnRfdmFyX2ludCgiYmlzZWN0X25yIiwgY250IC0gMSk7CisJcHJpbnRfdmFyX2ludCgiYmlzZWN0X2dvb2QiLCBhbGwgLSByZWFjaGVzIC0gMSk7CisJcHJpbnRfdmFyX2ludCgiYmlzZWN0X2JhZCIsIHJlYWNoZXMgLSAxKTsKKwlwcmludF92YXJfaW50KCJiaXNlY3RfYWxsIiwgYWxsKTsKKwlwcmludF92YXJfaW50KCJiaXNlY3Rfc3RlcHMiLCBlc3RpbWF0ZV9iaXNlY3Rfc3RlcHMoYWxsKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X29iamVjdF9mYXN0KAorCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwllbnVtIG9iamVjdF90eXBlIHR5cGUsCisJaW50IGV4Y2x1ZGUsCisJdWludDMyX3QgbmFtZV9oYXNoLAorCXN0cnVjdCBwYWNrZWRfZ2l0ICpmb3VuZF9wYWNrLAorCW9mZl90IGZvdW5kX29mZnNldCkKK3sKKwlmcHJpbnRmKHN0ZG91dCwgIiVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCBwYXJzZV9taXNzaW5nX2FjdGlvbl92YWx1ZShjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcCh2YWx1ZSwgImVycm9yIikpIHsKKwkJYXJnX21pc3NpbmdfYWN0aW9uID0gTUFfRVJST1I7CisJCXJldHVybiAxOworCX0KKworCWlmICghc3RyY21wKHZhbHVlLCAiYWxsb3ctYW55IikpIHsKKwkJYXJnX21pc3NpbmdfYWN0aW9uID0gTUFfQUxMT1dfQU5ZOworCQlmZXRjaF9pZl9taXNzaW5nID0gMDsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKCFzdHJjbXAodmFsdWUsICJwcmludCIpKSB7CisJCWFyZ19taXNzaW5nX2FjdGlvbiA9IE1BX1BSSU5UOworCQlmZXRjaF9pZl9taXNzaW5nID0gMDsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKCFzdHJjbXAodmFsdWUsICJhbGxvdy1wcm9taXNvciIpKSB7CisJCWFyZ19taXNzaW5nX2FjdGlvbiA9IE1BX0FMTE9XX1BST01JU09SOworCQlmZXRjaF9pZl9taXNzaW5nID0gMDsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X2JpdG1hcF9jb3VudChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyKQoreworCXVpbnQzMl90IGNvbW1pdF9jb3VudCA9IDAsCisJCSB0YWdfY291bnQgPSAwLAorCQkgdHJlZV9jb3VudCA9IDAsCisJCSBibG9iX2NvdW50ID0gMDsKKwlpbnQgbWF4X2NvdW50OworCXN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQ7CisKKwkvKiBUaGlzIGZ1bmN0aW9uIG9ubHkgaGFuZGxlcyBjb3VudGluZywgbm90IGdlbmVyYWwgdHJhdmVyc2FsLiAqLworCWlmICghcmV2cy0+Y291bnQpCisJCXJldHVybiAtMTsKKworCS8qCisJICogQSBiaXRtYXAgcmVzdWx0IGNhbid0IGtub3cgbGVmdC9yaWdodCwgZXRjLCBiZWNhdXNlIHdlIGRvbid0CisJICogYWN0dWFsbHkgdHJhdmVyc2UuCisJICovCisJaWYgKHJldnMtPmxlZnRfcmlnaHQgfHwgcmV2cy0+Y2hlcnJ5X21hcmspCisJCXJldHVybiAtMTsKKworCS8qCisJICogSWYgd2UncmUgY291bnRpbmcgcmVhY2hhYmxlIG9iamVjdHMsIHdlIGNhbid0IGhhbmRsZSBhIG1heCBjb3VudCBvZgorCSAqIGNvbW1pdHMgdG8gdHJhdmVyc2UsIHNpbmNlIHdlIGRvbid0IGtub3cgd2hpY2ggb2JqZWN0cyBnbyB3aXRoIHdoaWNoCisJICogY29tbWl0LgorCSAqLworCWlmIChyZXZzLT5tYXhfY291bnQgPj0gMCAmJgorCSAgICAocmV2cy0+dGFnX29iamVjdHMgfHwgcmV2cy0+dHJlZV9vYmplY3RzIHx8IHJldnMtPmJsb2Jfb2JqZWN0cykpCisJCXJldHVybiAtMTsKKworCS8qCisJICogVGhpcyBtdXN0IGJlIHNhdmVkIGJlZm9yZSBkb2luZyBhbnkgd2Fsa2luZywgc2luY2UgdGhlIHJldmlzaW9uCisJICogbWFjaGluZXJ5IHdpbGwgY291bnQgaXQgZG93biB0byB6ZXJvIHdoaWxlIHRyYXZlcnNpbmcuCisJICovCisJbWF4X2NvdW50ID0gcmV2cy0+bWF4X2NvdW50OworCisJYml0bWFwX2dpdCA9IHByZXBhcmVfYml0bWFwX3dhbGsocmV2cywgZmlsdGVyKTsKKwlpZiAoIWJpdG1hcF9naXQpCisJCXJldHVybiAtMTsKKworCWNvdW50X2JpdG1hcF9jb21taXRfbGlzdChiaXRtYXBfZ2l0LCAmY29tbWl0X2NvdW50LAorCQkJCSByZXZzLT50cmVlX29iamVjdHMgPyAmdHJlZV9jb3VudCA6IE5VTEwsCisJCQkJIHJldnMtPmJsb2Jfb2JqZWN0cyA/ICZibG9iX2NvdW50IDogTlVMTCwKKwkJCQkgcmV2cy0+dGFnX29iamVjdHMgPyAmdGFnX2NvdW50IDogTlVMTCk7CisJaWYgKG1heF9jb3VudCA+PSAwICYmIG1heF9jb3VudCA8IGNvbW1pdF9jb3VudCkKKwkJY29tbWl0X2NvdW50ID0gbWF4X2NvdW50OworCisJcHJpbnRmKCIlZFxuIiwgY29tbWl0X2NvdW50ICsgdHJlZV9jb3VudCArIGJsb2JfY291bnQgKyB0YWdfY291bnQpOworCWZyZWVfYml0bWFwX2luZGV4KGJpdG1hcF9naXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRyeV9iaXRtYXBfdHJhdmVyc2FsKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXIpCit7CisJc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdDsKKworCS8qCisJICogV2UgY2FuJ3QgdXNlIGEgYml0bWFwIHJlc3VsdCB3aXRoIGEgdHJhdmVyc2FsIGxpbWl0LCBzaW5jZSB0aGUgc2V0CisJICogb2YgY29tbWl0cyB3ZSdkIGdldCB3b3VsZCBiZSBlc3NlbnRpYWxseSByYW5kb20uCisJICovCisJaWYgKHJldnMtPm1heF9jb3VudCA+PSAwKQorCQlyZXR1cm4gLTE7CisKKwliaXRtYXBfZ2l0ID0gcHJlcGFyZV9iaXRtYXBfd2FsayhyZXZzLCBmaWx0ZXIpOworCWlmICghYml0bWFwX2dpdCkKKwkJcmV0dXJuIC0xOworCisJdHJhdmVyc2VfYml0bWFwX2NvbW1pdF9saXN0KGJpdG1hcF9naXQsIHJldnMsICZzaG93X29iamVjdF9mYXN0KTsKKwlmcmVlX2JpdG1hcF9pbmRleChiaXRtYXBfZ2l0KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9yZXZfbGlzdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3QgcmV2X2xpc3RfaW5mbyBpbmZvOworCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgc19yX29wdCA9IHsKKwkJLmFsbG93X2V4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0cyA9IDEsCisJfTsKKwlpbnQgaTsKKwlpbnQgYmlzZWN0X2xpc3QgPSAwOworCWludCBiaXNlY3Rfc2hvd192YXJzID0gMDsKKwlpbnQgYmlzZWN0X2ZpbmRfYWxsID0gMDsKKwlpbnQgdXNlX2JpdG1hcF9pbmRleCA9IDA7CisJY29uc3QgY2hhciAqc2hvd19wcm9ncmVzcyA9IE5VTEw7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlKHJldl9saXN0X3VzYWdlKTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2cywgcHJlZml4KTsKKwlyZXZzLmFiYnJldiA9IERFRkFVTFRfQUJCUkVWOworCXJldnMuY29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX1VOU1BFQ0lGSUVEOworCisJLyoKKwkgKiBTY2FuIHRoZSBhcmd1bWVudCBsaXN0IGJlZm9yZSBpbnZva2luZyBzZXR1cF9yZXZpc2lvbnMoKSwgc28gdGhhdCB3ZQorCSAqIGtub3cgaWYgZmV0Y2hfaWZfbWlzc2luZyBuZWVkcyB0byBiZSBzZXQgdG8gMC4KKwkgKgorCSAqICItLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyIgYWN0cyBhcyBhIHByZS1maWx0ZXIgb24gbWlzc2luZyBvYmplY3RzCisJICogYnkgbm90IGNyb3NzaW5nIHRoZSBib3VuZGFyeSBmcm9tIHJlYWxpemVkIG9iamVjdHMgdG8gcHJvbWlzb3IKKwkgKiBvYmplY3RzLgorCSAqCisJICogTGV0ICItLW1pc3NpbmciIHRvIGNvbmRpdGlvbmFsbHkgc2V0IGZldGNoX2lmX21pc3NpbmcuCisJICovCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQlpZiAoIXN0cmNtcChhcmcsICItLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyIpKSB7CisJCQlmZXRjaF9pZl9taXNzaW5nID0gMDsKKwkJCXJldnMuZXhjbHVkZV9wcm9taXNvcl9vYmplY3RzID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tbWlzc2luZz0iLCAmYXJnKSkgeworCQkJaWYgKHJldnMuZXhjbHVkZV9wcm9taXNvcl9vYmplY3RzKQorCQkJCWRpZShfKCJjYW5ub3QgY29tYmluZSAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBhbmQgLS1taXNzaW5nIikpOworCQkJaWYgKHBhcnNlX21pc3NpbmdfYWN0aW9uX3ZhbHVlKGFyZykpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoYXJnX21pc3NpbmdfYWN0aW9uKQorCQlyZXZzLmRvX25vdF9kaWVfb25fbWlzc2luZ190cmVlID0gMTsKKworCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldnMsICZzX3Jfb3B0KTsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKwlpbmZvLnJldnMgPSAmcmV2czsKKwlpZiAocmV2cy5iaXNlY3QpCisJCWJpc2VjdF9saXN0ID0gMTsKKworCWlmIChyZXZzLmRpZmZvcHQuZmxhZ3MucXVpY2spCisJCWluZm8uZmxhZ3MgfD0gUkVWX0xJU1RfUVVJRVQ7CisJZm9yIChpID0gMSA7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKworCQlpZiAoIXN0cmNtcChhcmcsICItLWhlYWRlciIpKSB7CisJCQlyZXZzLnZlcmJvc2VfaGVhZGVyID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tdGltZXN0YW1wIikpIHsKKwkJCWluZm8uc2hvd190aW1lc3RhbXAgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1iaXNlY3QiKSkgeworCQkJYmlzZWN0X2xpc3QgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1iaXNlY3QtYWxsIikpIHsKKwkJCWJpc2VjdF9saXN0ID0gMTsKKwkJCWJpc2VjdF9maW5kX2FsbCA9IDE7CisJCQlpbmZvLmZsYWdzIHw9IEJJU0VDVF9TSE9XX0FMTDsKKwkJCXJldnMuc2hvd19kZWNvcmF0aW9ucyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWJpc2VjdC12YXJzIikpIHsKKwkJCWJpc2VjdF9saXN0ID0gMTsKKwkJCWJpc2VjdF9zaG93X3ZhcnMgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS11c2UtYml0bWFwLWluZGV4IikpIHsKKwkJCXVzZV9iaXRtYXBfaW5kZXggPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS10ZXN0LWJpdG1hcCIpKSB7CisJCQl0ZXN0X2JpdG1hcF93YWxrKCZyZXZzKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLXByb2dyZXNzPSIsICZhcmcpKSB7CisJCQlzaG93X3Byb2dyZXNzID0gYXJnOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAoIi0tIiBDTF9BUkdfX0ZJTFRFUiAiPSIpLCAmYXJnKSkgeworCQkJcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcigmZmlsdGVyX29wdGlvbnMsIGFyZyk7CisJCQlpZiAoZmlsdGVyX29wdGlvbnMuY2hvaWNlICYmICFyZXZzLmJsb2Jfb2JqZWN0cykKKwkJCQlkaWUoXygib2JqZWN0IGZpbHRlcmluZyByZXF1aXJlcyAtLW9iamVjdHMiKSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICgiLS1uby0iIENMX0FSR19fRklMVEVSKSkpIHsKKwkJCWxpc3Rfb2JqZWN0c19maWx0ZXJfc2V0X25vX2ZpbHRlcigmZmlsdGVyX29wdGlvbnMpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1maWx0ZXItcHJpbnQtb21pdHRlZCIpKSB7CisJCQlhcmdfcHJpbnRfb21pdHRlZCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghc3RyY21wKGFyZywgIi0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIikpCisJCQljb250aW51ZTsgLyogYWxyZWFkeSBoYW5kbGVkIGFib3ZlICovCisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLW1pc3Npbmc9IiwgJmFyZykpCisJCQljb250aW51ZTsgLyogYWxyZWFkeSBoYW5kbGVkIGFib3ZlICovCisKKwkJaWYgKCFzdHJjbXAoYXJnLCAoIi0tbm8tb2JqZWN0LW5hbWVzIikpKSB7CisJCQlhcmdfc2hvd19vYmplY3RfbmFtZXMgPSAwOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXN0cmNtcChhcmcsICgiLS1vYmplY3QtbmFtZXMiKSkpIHsKKwkJCWFyZ19zaG93X29iamVjdF9uYW1lcyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCXVzYWdlKHJldl9saXN0X3VzYWdlKTsKKworCX0KKwlpZiAocmV2cy5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX1VOU1BFQ0lGSUVEKSB7CisJCS8qIFRoZSBjb21tYW5kIGxpbmUgaGFzIGEgLS1wcmV0dHkgICovCisJCWluZm8uaGRyX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKwkJaWYgKHJldnMuY29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKQorCQkJaW5mby5oZWFkZXJfcHJlZml4ID0gIiI7CisJCWVsc2UKKwkJCWluZm8uaGVhZGVyX3ByZWZpeCA9ICJjb21taXQgIjsKKwl9CisJZWxzZSBpZiAocmV2cy52ZXJib3NlX2hlYWRlcikKKwkJLyogT25seSAtLWhlYWRlciB3YXMgc3BlY2lmaWVkICovCisJCXJldnMuY29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX1JBVzsKKworCWlmICgoIXJldnMuY29tbWl0cyAmJiByZWZsb2dfd2Fsa19lbXB0eShyZXZzLnJlZmxvZ19pbmZvKSAmJgorCSAgICAgKCEocmV2cy50YWdfb2JqZWN0cyB8fCByZXZzLnRyZWVfb2JqZWN0cyB8fCByZXZzLmJsb2Jfb2JqZWN0cykgJiYKKwkgICAgICAhcmV2cy5wZW5kaW5nLm5yKSAmJgorCSAgICAgIXJldnMucmV2X2lucHV0X2dpdmVuICYmICFyZXZzLnJlYWRfZnJvbV9zdGRpbikgfHwKKwkgICAgcmV2cy5kaWZmKQorCQl1c2FnZShyZXZfbGlzdF91c2FnZSk7CisKKwlpZiAocmV2cy5zaG93X25vdGVzKQorCQlkaWUoXygicmV2LWxpc3QgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5IG9mIG5vdGVzIikpOworCisJaWYgKHJldnMuY291bnQgJiYKKwkgICAgKHJldnMudGFnX29iamVjdHMgfHwgcmV2cy50cmVlX29iamVjdHMgfHwgcmV2cy5ibG9iX29iamVjdHMpICYmCisJICAgIChyZXZzLmxlZnRfcmlnaHQgfHwgcmV2cy5jaGVycnlfbWFyaykpCisJCWRpZShfKCJtYXJrZWQgY291bnRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1vYmplY3RzIikpOworCisJc2F2ZV9jb21taXRfYnVmZmVyID0gKHJldnMudmVyYm9zZV9oZWFkZXIgfHwKKwkJCSAgICAgIHJldnMuZ3JlcF9maWx0ZXIucGF0dGVybl9saXN0IHx8CisJCQkgICAgICByZXZzLmdyZXBfZmlsdGVyLmhlYWRlcl9saXN0KTsKKwlpZiAoYmlzZWN0X2xpc3QpCisJCXJldnMubGltaXRlZCA9IDE7CisKKwlpZiAoc2hvd19wcm9ncmVzcykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKHNob3dfcHJvZ3Jlc3MsIDApOworCisJaWYgKHVzZV9iaXRtYXBfaW5kZXgpIHsKKwkJaWYgKCF0cnlfYml0bWFwX2NvdW50KCZyZXZzLCAmZmlsdGVyX29wdGlvbnMpKQorCQkJcmV0dXJuIDA7CisJCWlmICghdHJ5X2JpdG1hcF90cmF2ZXJzYWwoJnJldnMsICZmaWx0ZXJfb3B0aW9ucykpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKKwkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCWlmIChyZXZzLnRyZWVfb2JqZWN0cykKKwkJbWFya19lZGdlc191bmludGVyZXN0aW5nKCZyZXZzLCBzaG93X2VkZ2UsIDApOworCisJaWYgKGJpc2VjdF9saXN0KSB7CisJCWludCByZWFjaGVzLCBhbGw7CisKKwkJZmluZF9iaXNlY3Rpb24oJnJldnMuY29tbWl0cywgJnJlYWNoZXMsICZhbGwsIGJpc2VjdF9maW5kX2FsbCk7CisKKwkJaWYgKGJpc2VjdF9zaG93X3ZhcnMpCisJCQlyZXR1cm4gc2hvd19iaXNlY3RfdmFycygmaW5mbywgcmVhY2hlcywgYWxsKTsKKwl9CisKKwlpZiAoYXJnX3ByaW50X29taXR0ZWQpCisJCW9pZHNldF9pbml0KCZvbWl0dGVkX29iamVjdHMsIERFRkFVTFRfT0lEU0VUX1NJWkUpOworCWlmIChhcmdfbWlzc2luZ19hY3Rpb24gPT0gTUFfUFJJTlQpCisJCW9pZHNldF9pbml0KCZtaXNzaW5nX29iamVjdHMsIERFRkFVTFRfT0lEU0VUX1NJWkUpOworCisJdHJhdmVyc2VfY29tbWl0X2xpc3RfZmlsdGVyZWQoCisJCSZmaWx0ZXJfb3B0aW9ucywgJnJldnMsIHNob3dfY29tbWl0LCBzaG93X29iamVjdCwgJmluZm8sCisJCShhcmdfcHJpbnRfb21pdHRlZCA/ICZvbWl0dGVkX29iamVjdHMgOiBOVUxMKSk7CisKKwlpZiAoYXJnX3ByaW50X29taXR0ZWQpIHsKKwkJc3RydWN0IG9pZHNldF9pdGVyIGl0ZXI7CisJCXN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwkJb2lkc2V0X2l0ZXJfaW5pdCgmb21pdHRlZF9vYmplY3RzLCAmaXRlcik7CisJCXdoaWxlICgob2lkID0gb2lkc2V0X2l0ZXJfbmV4dCgmaXRlcikpKQorCQkJcHJpbnRmKCJ+JXNcbiIsIG9pZF90b19oZXgob2lkKSk7CisJCW9pZHNldF9jbGVhcigmb21pdHRlZF9vYmplY3RzKTsKKwl9CisJaWYgKGFyZ19taXNzaW5nX2FjdGlvbiA9PSBNQV9QUklOVCkgeworCQlzdHJ1Y3Qgb2lkc2V0X2l0ZXIgaXRlcjsKKwkJc3RydWN0IG9iamVjdF9pZCAqb2lkOworCQlvaWRzZXRfaXRlcl9pbml0KCZtaXNzaW5nX29iamVjdHMsICZpdGVyKTsKKwkJd2hpbGUgKChvaWQgPSBvaWRzZXRfaXRlcl9uZXh0KCZpdGVyKSkpCisJCQlwcmludGYoIj8lc1xuIiwgb2lkX3RvX2hleChvaWQpKTsKKwkJb2lkc2V0X2NsZWFyKCZtaXNzaW5nX29iamVjdHMpOworCX0KKworCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKworCWlmIChyZXZzLmNvdW50KSB7CisJCWlmIChyZXZzLmxlZnRfcmlnaHQgJiYgcmV2cy5jaGVycnlfbWFyaykKKwkJCXByaW50ZigiJWRcdCVkXHQlZFxuIiwgcmV2cy5jb3VudF9sZWZ0LCByZXZzLmNvdW50X3JpZ2h0LCByZXZzLmNvdW50X3NhbWUpOworCQllbHNlIGlmIChyZXZzLmxlZnRfcmlnaHQpCisJCQlwcmludGYoIiVkXHQlZFxuIiwgcmV2cy5jb3VudF9sZWZ0LCByZXZzLmNvdW50X3JpZ2h0KTsKKwkJZWxzZSBpZiAocmV2cy5jaGVycnlfbWFyaykKKwkJCXByaW50ZigiJWRcdCVkXG4iLCByZXZzLmNvdW50X2xlZnQgKyByZXZzLmNvdW50X3JpZ2h0LCByZXZzLmNvdW50X3NhbWUpOworCQllbHNlCisJCQlwcmludGYoIiVkXG4iLCByZXZzLmNvdW50X2xlZnQgKyByZXZzLmNvdW50X3JpZ2h0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmV2LXBhcnNlLmMgYi9idWlsdGluL3Jldi1wYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OWRkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3Jldi1wYXJzZS5jCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICogcmV2LXBhcnNlLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJzcGxpdC1pbmRleC5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorI2luY2x1ZGUgInNoYWxsb3cuaCIKKworI2RlZmluZSBET19SRVZTCQkxCisjZGVmaW5lIERPX05PUkVWCTIKKyNkZWZpbmUgRE9fRkxBR1MJNAorI2RlZmluZSBET19OT05GTEFHUwk4CitzdGF0aWMgaW50IGZpbHRlciA9IH4wOworCitzdGF0aWMgY29uc3QgY2hhciAqZGVmOworCisjZGVmaW5lIE5PUk1BTCAwCisjZGVmaW5lIFJFVkVSU0VEIDEKK3N0YXRpYyBpbnQgc2hvd190eXBlID0gTk9STUFMOworCisjZGVmaW5lIFNIT1dfU1lNQk9MSUNfQVNJUyAxCisjZGVmaW5lIFNIT1dfU1lNQk9MSUNfRlVMTCAyCitzdGF0aWMgaW50IHN5bWJvbGljOworc3RhdGljIGludCBhYmJyZXY7CitzdGF0aWMgaW50IGFiYnJldl9yZWY7CitzdGF0aWMgaW50IGFiYnJldl9yZWZfc3RyaWN0Oworc3RhdGljIGludCBvdXRwdXRfc3E7CisKK3N0YXRpYyBpbnQgc3R1Y2tfbG9uZzsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZl9leGNsdWRlczsKKworLyoKKyAqIFNvbWUgYXJndW1lbnRzIGFyZSByZWxldmFudCAicmV2aXNpb24iIGFyZ3VtZW50cywKKyAqIG90aGVycyBhcmUgYWJvdXQgb3V0cHV0IGZvcm1hdCBvciBvdGhlciBkZXRhaWxzLgorICogVGhpcyBzb3J0cyBpdCBhbGwgb3V0LgorICovCitzdGF0aWMgaW50IGlzX3Jldl9hcmd1bWVudChjb25zdCBjaGFyICphcmcpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKnJldl9hcmdzW10gPSB7CisJCSItLWFsbCIsCisJCSItLWJpc2VjdCIsCisJCSItLWRlbnNlIiwKKwkJIi0tYnJhbmNoZXM9IiwKKwkJIi0tYnJhbmNoZXMiLAorCQkiLS1oZWFkZXIiLAorCQkiLS1pZ25vcmUtbWlzc2luZyIsCisJCSItLW1heC1hZ2U9IiwKKwkJIi0tbWF4LWNvdW50PSIsCisJCSItLW1pbi1hZ2U9IiwKKwkJIi0tbm8tbWVyZ2VzIiwKKwkJIi0tbWluLXBhcmVudHM9IiwKKwkJIi0tbm8tbWluLXBhcmVudHMiLAorCQkiLS1tYXgtcGFyZW50cz0iLAorCQkiLS1uby1tYXgtcGFyZW50cyIsCisJCSItLW9iamVjdHMiLAorCQkiLS1vYmplY3RzLWVkZ2UiLAorCQkiLS1wYXJlbnRzIiwKKwkJIi0tcHJldHR5IiwKKwkJIi0tcmVtb3Rlcz0iLAorCQkiLS1yZW1vdGVzIiwKKwkJIi0tZ2xvYj0iLAorCQkiLS1zcGFyc2UiLAorCQkiLS10YWdzPSIsCisJCSItLXRhZ3MiLAorCQkiLS10b3BvLW9yZGVyIiwKKwkJIi0tZGF0ZS1vcmRlciIsCisJCSItLXVucGFja2VkIiwKKwkJTlVMTAorCX07CisJY29uc3QgY2hhciAqKnAgPSByZXZfYXJnczsKKworCS8qIGFjY2VwdCAtPGRpZ2l0PiwgbGlrZSB0cmFkaXRpb25hbCAiaGVhZCIgKi8KKwlpZiAoKCphcmcgPT0gJy0nKSAmJiBpc2RpZ2l0KGFyZ1sxXSkpCisJCXJldHVybiAxOworCisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpzdHIgPSAqcCsrOworCQlpbnQgbGVuOworCQlpZiAoIXN0cikKKwkJCXJldHVybiAwOworCQlsZW4gPSBzdHJsZW4oc3RyKTsKKwkJaWYgKCFzdHJjbXAoYXJnLCBzdHIpIHx8CisJCSAgICAoc3RyW2xlbi0xXSA9PSAnPScgJiYgIXN0cm5jbXAoYXJnLCBzdHIsIGxlbikpKQorCQkJcmV0dXJuIDE7CisJfQorfQorCisvKiBPdXRwdXQgYXJndW1lbnQgYXMgYSBzdHJpbmcsIGVpdGhlciBTUSBvciBub3JtYWwgKi8KK3N0YXRpYyB2b2lkIHNob3coY29uc3QgY2hhciAqYXJnKQoreworCWlmIChvdXRwdXRfc3EpIHsKKwkJaW50IHNxID0gJ1wnJywgY2g7CisKKwkJcHV0Y2hhcihzcSk7CisJCXdoaWxlICgoY2ggPSAqYXJnKyspKSB7CisJCQlpZiAoY2ggPT0gc3EpCisJCQkJZnB1dHMoIidcXCciLCBzdGRvdXQpOworCQkJcHV0Y2hhcihjaCk7CisJCX0KKwkJcHV0Y2hhcihzcSk7CisJCXB1dGNoYXIoJyAnKTsKKwl9CisJZWxzZQorCQlwdXRzKGFyZyk7Cit9CisKKy8qIExpa2Ugc2hvdygpLCBidXQgd2l0aCBhIG5lZ2F0aW9uIHByZWZpeCBhY2NvcmRpbmcgdG8gdHlwZSAqLworc3RhdGljIHZvaWQgc2hvd193aXRoX3R5cGUoaW50IHR5cGUsIGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAodHlwZSAhPSBzaG93X3R5cGUpCisJCXB1dGNoYXIoJ14nKTsKKwlzaG93KGFyZyk7Cit9CisKKy8qIE91dHB1dCBhIHJldmlzaW9uLCBvbmx5IGlmIGZpbHRlciBhbGxvd3MgaXQgKi8KK3N0YXRpYyB2b2lkIHNob3dfcmV2KGludCB0eXBlLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKCEoZmlsdGVyICYgRE9fUkVWUykpCisJCXJldHVybjsKKwlkZWYgPSBOVUxMOworCisJaWYgKChzeW1ib2xpYyB8fCBhYmJyZXZfcmVmKSAmJiBuYW1lKSB7CisJCWlmIChzeW1ib2xpYyA9PSBTSE9XX1NZTUJPTElDX0ZVTEwgfHwgYWJicmV2X3JlZikgeworCQkJc3RydWN0IG9iamVjdF9pZCBkaXNjYXJkOworCQkJY2hhciAqZnVsbDsKKworCQkJc3dpdGNoIChkd2ltX3JlZihuYW1lLCBzdHJsZW4obmFtZSksICZkaXNjYXJkLCAmZnVsbCkpIHsKKwkJCWNhc2UgMDoKKwkJCQkvKgorCQkJCSAqIE5vdCBmb3VuZCAtLSBub3QgYSByZWYuICBXZSBjb3VsZAorCQkJCSAqIGVtaXQgIm5hbWUiIGhlcmUsIGJ1dCBzeW1ib2xpYy1mdWxsCisJCQkJICogdXNlcnMgYXJlIGludGVyZXN0ZWQgaW4gZmluZGluZyB0aGUKKwkJCQkgKiByZWZzIHNwZWxsZWQgaW4gZnVsbCwgYW5kIHRoZXkgd291bGQKKwkJCQkgKiBuZWVkIHRvIGZpbHRlciBub24tcmVmcyBpZiB3ZSBkaWQgc28uCisJCQkJICovCisJCQkJYnJlYWs7CisJCQljYXNlIDE6IC8qIGhhcHB5ICovCisJCQkJaWYgKGFiYnJldl9yZWYpCisJCQkJCWZ1bGwgPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihmdWxsLAorCQkJCQkJYWJicmV2X3JlZl9zdHJpY3QpOworCQkJCXNob3dfd2l0aF90eXBlKHR5cGUsIGZ1bGwpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDogLyogYW1iaWd1b3VzICovCisJCQkJZXJyb3IoInJlZm5hbWUgJyVzJyBpcyBhbWJpZ3VvdXMiLCBuYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWZyZWUoZnVsbCk7CisJCX0gZWxzZSB7CisJCQlzaG93X3dpdGhfdHlwZSh0eXBlLCBuYW1lKTsKKwkJfQorCX0KKwllbHNlIGlmIChhYmJyZXYpCisJCXNob3dfd2l0aF90eXBlKHR5cGUsIGZpbmRfdW5pcXVlX2FiYnJldihvaWQsIGFiYnJldikpOworCWVsc2UKKwkJc2hvd193aXRoX3R5cGUodHlwZSwgb2lkX3RvX2hleChvaWQpKTsKK30KKworLyogT3V0cHV0IGEgZmxhZywgb25seSBpZiBmaWx0ZXIgYWxsb3dzIGl0LiAqLworc3RhdGljIGludCBzaG93X2ZsYWcoY29uc3QgY2hhciAqYXJnKQoreworCWlmICghKGZpbHRlciAmIERPX0ZMQUdTKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZpbHRlciAmIChpc19yZXZfYXJndW1lbnQoYXJnKSA/IERPX1JFVlMgOiBET19OT1JFVikpIHsKKwkJc2hvdyhhcmcpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19kZWZhdWx0KHZvaWQpCit7CisJY29uc3QgY2hhciAqcyA9IGRlZjsKKworCWlmIChzKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCWRlZiA9IE5VTEw7CisJCWlmICghZ2V0X29pZChzLCAmb2lkKSkgeworCQkJc2hvd19yZXYoTk9STUFMLCAmb2lkLCBzKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfcmVmZXJlbmNlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJaWYgKHJlZl9leGNsdWRlZChyZWZfZXhjbHVkZXMsIHJlZm5hbWUpKQorCQlyZXR1cm4gMDsKKwlzaG93X3JldihOT1JNQUwsIG9pZCwgcmVmbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW50aV9yZWZlcmVuY2UoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzaG93X3JldihSRVZFUlNFRCwgb2lkLCByZWZuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X2FiYnJldihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHZvaWQgKmNiX2RhdGEpCit7CisJc2hvd19yZXYoTk9STUFMLCBvaWQsIE5VTEwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaG93X2RhdGVzdHJpbmcoY29uc3QgY2hhciAqZmxhZywgY29uc3QgY2hhciAqZGF0ZXN0cikKK3sKKwljaGFyICpidWZmZXI7CisKKwkvKiBkYXRlIGhhbmRsaW5nIHJlcXVpcmVzIGJvdGggZmxhZ3MgYW5kIHJldnMgKi8KKwlpZiAoKGZpbHRlciAmIChET19GTEFHUyB8IERPX1JFVlMpKSAhPSAoRE9fRkxBR1MgfCBET19SRVZTKSkKKwkJcmV0dXJuOworCWJ1ZmZlciA9IHhzdHJmbXQoIiVzJSJQUkl0aW1lLCBmbGFnLCBhcHByb3hpZGF0ZShkYXRlc3RyKSk7CisJc2hvdyhidWZmZXIpOworCWZyZWUoYnVmZmVyKTsKK30KKworc3RhdGljIGludCBzaG93X2ZpbGUoY29uc3QgY2hhciAqYXJnLCBpbnQgb3V0cHV0X3ByZWZpeCkKK3sKKwlzaG93X2RlZmF1bHQoKTsKKwlpZiAoKGZpbHRlciAmIChET19OT05GTEFHU3xET19OT1JFVikpID09IChET19OT05GTEFHU3xET19OT1JFVikpIHsKKwkJaWYgKG91dHB1dF9wcmVmaXgpIHsKKwkJCWNvbnN0IGNoYXIgKnByZWZpeCA9IHN0YXJ0dXBfaW5mby0+cHJlZml4OworCQkJY2hhciAqZm5hbWUgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBhcmcpOworCQkJc2hvdyhmbmFtZSk7CisJCQlmcmVlKGZuYW1lKTsKKwkJfSBlbHNlCisJCQlzaG93KGFyZyk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnlfZGlmZmVyZW5jZShjb25zdCBjaGFyICphcmcpCit7CisJY2hhciAqZG90ZG90OworCXN0cnVjdCBvYmplY3RfaWQgc3RhcnRfb2lkOworCXN0cnVjdCBvYmplY3RfaWQgZW5kX29pZDsKKwljb25zdCBjaGFyICplbmQ7CisJY29uc3QgY2hhciAqc3RhcnQ7CisJaW50IHN5bW1ldHJpYzsKKwlzdGF0aWMgY29uc3QgY2hhciBoZWFkX2J5X2RlZmF1bHRbXSA9ICJIRUFEIjsKKworCWlmICghKGRvdGRvdCA9IHN0cnN0cihhcmcsICIuLiIpKSkKKwkJcmV0dXJuIDA7CisJZW5kID0gZG90ZG90ICsgMjsKKwlzdGFydCA9IGFyZzsKKwlzeW1tZXRyaWMgPSAoKmVuZCA9PSAnLicpOworCisJKmRvdGRvdCA9IDA7CisJZW5kICs9IHN5bW1ldHJpYzsKKworCWlmICghKmVuZCkKKwkJZW5kID0gaGVhZF9ieV9kZWZhdWx0OworCWlmIChkb3Rkb3QgPT0gYXJnKQorCQlzdGFydCA9IGhlYWRfYnlfZGVmYXVsdDsKKworCWlmIChzdGFydCA9PSBoZWFkX2J5X2RlZmF1bHQgJiYgZW5kID09IGhlYWRfYnlfZGVmYXVsdCAmJgorCSAgICAhc3ltbWV0cmljKSB7CisJCS8qCisJCSAqIEp1c3QgIi4uIj8gIFRoYXQgaXMgbm90IGEgcmFuZ2UgYnV0IHRoZQorCQkgKiBwYXRoc3BlYyBmb3IgdGhlIHBhcmVudCBkaXJlY3RvcnkuCisJCSAqLworCQkqZG90ZG90ID0gJy4nOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWdldF9vaWRfY29tbWl0dGlzaChzdGFydCwgJnN0YXJ0X29pZCkgJiYgIWdldF9vaWRfY29tbWl0dGlzaChlbmQsICZlbmRfb2lkKSkgeworCQlzaG93X3JldihOT1JNQUwsICZlbmRfb2lkLCBlbmQpOworCQlzaG93X3JldihzeW1tZXRyaWMgPyBOT1JNQUwgOiBSRVZFUlNFRCwgJnN0YXJ0X29pZCwgc3RhcnQpOworCQlpZiAoc3ltbWV0cmljKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmV4Y2x1ZGU7CisJCQlzdHJ1Y3QgY29tbWl0ICphLCAqYjsKKwkJCWEgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJnN0YXJ0X29pZCk7CisJCQliID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksICZlbmRfb2lkKTsKKwkJCWlmICghYSB8fCAhYikgeworCQkJCSpkb3Rkb3QgPSAnLic7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlleGNsdWRlID0gZ2V0X21lcmdlX2Jhc2VzKGEsIGIpOworCQkJd2hpbGUgKGV4Y2x1ZGUpIHsKKwkJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwb3BfY29tbWl0KCZleGNsdWRlKTsKKwkJCQlzaG93X3JldihSRVZFUlNFRCwgJmNvbW1pdC0+b2JqZWN0Lm9pZCwgTlVMTCk7CisJCQl9CisJCX0KKwkJKmRvdGRvdCA9ICcuJzsKKwkJcmV0dXJuIDE7CisJfQorCSpkb3Rkb3QgPSAnLic7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X3BhcmVudF9zaG9ydGhhbmRzKGNvbnN0IGNoYXIgKmFyZykKK3sKKwljaGFyICpkb3Rkb3Q7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwlpbnQgcGFyZW50X251bWJlcjsKKwlpbnQgaW5jbHVkZV9yZXYgPSAwOworCWludCBpbmNsdWRlX3BhcmVudHMgPSAwOworCWludCBleGNsdWRlX3BhcmVudCA9IDA7CisKKwlpZiAoKGRvdGRvdCA9IHN0cnN0cihhcmcsICJeISIpKSkgeworCQlpbmNsdWRlX3JldiA9IDE7CisJCWlmIChkb3Rkb3RbMl0pCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKChkb3Rkb3QgPSBzdHJzdHIoYXJnLCAiXkAiKSkpIHsKKwkJaW5jbHVkZV9wYXJlbnRzID0gMTsKKwkJaWYgKGRvdGRvdFsyXSkKKwkJCXJldHVybiAwOworCX0gZWxzZSBpZiAoKGRvdGRvdCA9IHN0cnN0cihhcmcsICJeLSIpKSkgeworCQlpbmNsdWRlX3JldiA9IDE7CisJCWV4Y2x1ZGVfcGFyZW50ID0gMTsKKworCQlpZiAoZG90ZG90WzJdKSB7CisJCQljaGFyICplbmQ7CisJCQlleGNsdWRlX3BhcmVudCA9IHN0cnRvdWwoZG90ZG90ICsgMiwgJmVuZCwgMTApOworCQkJaWYgKCplbmQgIT0gJ1wwJyB8fCAhZXhjbHVkZV9wYXJlbnQpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UKKwkJcmV0dXJuIDA7CisKKwkqZG90ZG90ID0gMDsKKwlpZiAoZ2V0X29pZF9jb21taXR0aXNoKGFyZywgJm9pZCkgfHwKKwkgICAgIShjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCkpKSB7CisJCSpkb3Rkb3QgPSAnXic7CisJCXJldHVybiAwOworCX0KKworCWlmIChleGNsdWRlX3BhcmVudCAmJgorCSAgICBleGNsdWRlX3BhcmVudCA+IGNvbW1pdF9saXN0X2NvdW50KGNvbW1pdC0+cGFyZW50cykpIHsKKwkJKmRvdGRvdCA9ICdeJzsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGluY2x1ZGVfcmV2KQorCQlzaG93X3JldihOT1JNQUwsICZvaWQsIGFyZyk7CisJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzLCBwYXJlbnRfbnVtYmVyID0gMTsKKwkgICAgIHBhcmVudHM7CisJICAgICBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCwgcGFyZW50X251bWJlcisrKSB7CisJCWNoYXIgKm5hbWUgPSBOVUxMOworCisJCWlmIChleGNsdWRlX3BhcmVudCAmJiBwYXJlbnRfbnVtYmVyICE9IGV4Y2x1ZGVfcGFyZW50KQorCQkJY29udGludWU7CisKKwkJaWYgKHN5bWJvbGljKQorCQkJbmFtZSA9IHhzdHJmbXQoIiVzXiVkIiwgYXJnLCBwYXJlbnRfbnVtYmVyKTsKKwkJc2hvd19yZXYoaW5jbHVkZV9wYXJlbnRzID8gTk9STUFMIDogUkVWRVJTRUQsCisJCQkgJnBhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQsIG5hbWUpOworCQlmcmVlKG5hbWUpOworCX0KKworCSpkb3Rkb3QgPSAnXic7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VvcHRfZHVtcChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvLCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpwYXJzZWQgPSBvLT52YWx1ZTsKKwlpZiAodW5zZXQpCisJCXN0cmJ1Zl9hZGRmKHBhcnNlZCwgIiAtLW5vLSVzIiwgby0+bG9uZ19uYW1lKTsKKwllbHNlIGlmIChvLT5zaG9ydF9uYW1lICYmIChvLT5sb25nX25hbWUgPT0gTlVMTCB8fCAhc3R1Y2tfbG9uZykpCisJCXN0cmJ1Zl9hZGRmKHBhcnNlZCwgIiAtJWMiLCBvLT5zaG9ydF9uYW1lKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKHBhcnNlZCwgIiAtLSVzIiwgby0+bG9uZ19uYW1lKTsKKwlpZiAoYXJnKSB7CisJCWlmICghc3R1Y2tfbG9uZykKKwkJCXN0cmJ1Zl9hZGRjaChwYXJzZWQsICcgJyk7CisJCWVsc2UgaWYgKG8tPmxvbmdfbmFtZSkKKwkJCXN0cmJ1Zl9hZGRjaChwYXJzZWQsICc9Jyk7CisJCXNxX3F1b3RlX2J1ZihwYXJzZWQsIGFyZyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2tpcHNwYWNlcyhjb25zdCBjaGFyICpzKQoreworCXdoaWxlIChpc3NwYWNlKCpzKSkKKwkJcysrOworCXJldHVybiBzOworfQorCitzdGF0aWMgY2hhciAqZmluZHNwYWNlKGNvbnN0IGNoYXIgKnMpCit7CisJZm9yICg7ICpzOyBzKyspCisJCWlmIChpc3NwYWNlKCpzKSkKKwkJCXJldHVybiAoY2hhciopczsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBjbWRfcGFyc2VvcHQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RhdGljIGludCBrZWVwX2Rhc2hkYXNoID0gMCwgc3RvcF9hdF9ub25fb3B0aW9uID0gMDsKKwlzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IHBhcnNlb3B0X3VzYWdlW10gPSB7CisJCU5fKCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iKSwKKwkJTlVMTAorCX07CisJc3RhdGljIHN0cnVjdCBvcHRpb24gcGFyc2VvcHRfb3B0c1tdID0geworCQlPUFRfQk9PTCgwLCAia2VlcC1kYXNoZGFzaCIsICZrZWVwX2Rhc2hkYXNoLAorCQkJCQlOXygia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIikpLAorCQlPUFRfQk9PTCgwLCAic3RvcC1hdC1ub24tb3B0aW9uIiwgJnN0b3BfYXRfbm9uX29wdGlvbiwKKwkJCQkJTl8oInN0b3AgcGFyc2luZyBhZnRlciB0aGUgIgorCQkJCQkgICAiZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIpKSwKKwkJT1BUX0JPT0woMCwgInN0dWNrLWxvbmciLCAmc3R1Y2tfbG9uZywKKwkJCQkJTl8oIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iKSksCisJCU9QVF9FTkQoKSwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ19jaGFycyA9ICIqPT8hIjsKKworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVCwgcGFyc2VkID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqKnVzYWdlID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uICpvcHRzID0gTlVMTDsKKwlpbnQgb25iID0gMCwgb3N6ID0gMCwgdW5iID0gMCwgdXN6ID0gMDsKKworCXN0cmJ1Zl9hZGRzdHIoJnBhcnNlZCwgInNldCAtLSIpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgcGFyc2VvcHRfb3B0cywgcGFyc2VvcHRfdXNhZ2UsCisJICAgICAgICAgICAgICAgICAgICAgUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOworCWlmIChhcmdjIDwgMSB8fCBzdHJjbXAoYXJndlswXSwgIi0tIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhwYXJzZW9wdF91c2FnZSwgcGFyc2VvcHRfb3B0cyk7CisKKwkvKiBnZXQgdGhlIHVzYWdlIHVwIHRvIHRoZSBmaXJzdCBsaW5lIHdpdGggYSAtLSBvbiBpdCAqLworCWZvciAoOzspIHsKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZzYiwgc3RkaW4pID09IEVPRikKKwkJCWRpZSgicHJlbWF0dXJlIGVuZCBvZiBpbnB1dCIpOworCQlBTExPQ19HUk9XKHVzYWdlLCB1bmIgKyAxLCB1c3opOworCQlpZiAoIXN0cmNtcCgiLS0iLCBzYi5idWYpKSB7CisJCQlpZiAodW5iIDwgMSkKKwkJCQlkaWUoIm5vIHVzYWdlIHN0cmluZyBnaXZlbiBiZWZvcmUgdGhlIGAtLScgc2VwYXJhdG9yIik7CisJCQl1c2FnZVt1bmJdID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCXVzYWdlW3VuYisrXSA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwl9CisKKwkvKiBwYXJzZTogKDxzaG9ydD58PHNob3J0Piw8bG9uZz58PGxvbmc+KVsqPT8hXSo8YXJnaGludD4/IFNQKyA8aGVscD4gKi8KKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJnNiLCBzdGRpbikgIT0gRU9GKSB7CisJCWNvbnN0IGNoYXIgKnM7CisJCWNoYXIgKmhlbHA7CisJCXN0cnVjdCBvcHRpb24gKm87CisKKwkJaWYgKCFzYi5sZW4pCisJCQljb250aW51ZTsKKworCQlBTExPQ19HUk9XKG9wdHMsIG9uYiArIDEsIG9zeik7CisJCW1lbXNldChvcHRzICsgb25iLCAwLCBzaXplb2Yob3B0c1tvbmJdKSk7CisKKwkJbyA9ICZvcHRzW29uYisrXTsKKwkJaGVscCA9IGZpbmRzcGFjZShzYi5idWYpOworCQlpZiAoIWhlbHAgfHwgc2IuYnVmID09IGhlbHApIHsKKwkJCW8tPnR5cGUgPSBPUFRJT05fR1JPVVA7CisJCQlvLT5oZWxwID0geHN0cmR1cChza2lwc3BhY2VzKHNiLmJ1ZikpOworCQkJY29udGludWU7CisJCX0KKworCQkqaGVscCA9ICdcMCc7CisKKwkJby0+dHlwZSA9IE9QVElPTl9DQUxMQkFDSzsKKwkJby0+aGVscCA9IHhzdHJkdXAoc2tpcHNwYWNlcyhoZWxwKzEpKTsKKwkJby0+dmFsdWUgPSAmcGFyc2VkOworCQlvLT5mbGFncyA9IFBBUlNFX09QVF9OT0FSRzsKKwkJby0+Y2FsbGJhY2sgPSAmcGFyc2VvcHRfZHVtcDsKKworCQkvKiBuYW1lKHMpICovCisJCXMgPSBzdHJwYnJrKHNiLmJ1ZiwgZmxhZ19jaGFycyk7CisJCWlmIChzID09IE5VTEwpCisJCQlzID0gaGVscDsKKworCQlpZiAocyAtIHNiLmJ1ZiA9PSAxKSAvKiBzaG9ydCBvcHRpb24gb25seSAqLworCQkJby0+c2hvcnRfbmFtZSA9ICpzYi5idWY7CisJCWVsc2UgaWYgKHNiLmJ1ZlsxXSAhPSAnLCcpIC8qIGxvbmcgb3B0aW9uIG9ubHkgKi8KKwkJCW8tPmxvbmdfbmFtZSA9IHhtZW1kdXB6KHNiLmJ1ZiwgcyAtIHNiLmJ1Zik7CisJCWVsc2UgeworCQkJby0+c2hvcnRfbmFtZSA9ICpzYi5idWY7CisJCQlvLT5sb25nX25hbWUgPSB4bWVtZHVweihzYi5idWYgKyAyLCBzIC0gc2IuYnVmIC0gMik7CisJCX0KKworCQkvKiBmbGFncyAqLworCQl3aGlsZSAocyA8IGhlbHApIHsKKwkJCXN3aXRjaCAoKnMrKykgeworCQkJY2FzZSAnPSc6CisJCQkJby0+ZmxhZ3MgJj0gflBBUlNFX09QVF9OT0FSRzsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJz8nOgorCQkJCW8tPmZsYWdzICY9IH5QQVJTRV9PUFRfTk9BUkc7CisJCQkJby0+ZmxhZ3MgfD0gUEFSU0VfT1BUX09QVEFSRzsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJyEnOgorCQkJCW8tPmZsYWdzIHw9IFBBUlNFX09QVF9OT05FRzsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJyonOgorCQkJCW8tPmZsYWdzIHw9IFBBUlNFX09QVF9ISURERU47CisJCQkJY29udGludWU7CisJCQl9CisJCQlzLS07CisJCQlicmVhazsKKwkJfQorCisJCWlmIChzIDwgaGVscCkKKwkJCW8tPmFyZ2ggPSB4bWVtZHVweihzLCBoZWxwIC0gcyk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwkvKiBwdXQgYW4gT1BUX0VORCgpICovCisJQUxMT0NfR1JPVyhvcHRzLCBvbmIgKyAxLCBvc3opOworCW1lbXNldChvcHRzICsgb25iLCAwLCBzaXplb2Yob3B0c1tvbmJdKSk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRzLCB1c2FnZSwKKwkJCShrZWVwX2Rhc2hkYXNoID8gUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggOiAwKSB8CisJCQkoc3RvcF9hdF9ub25fb3B0aW9uID8gUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTiA6IDApIHwKKwkJCVBBUlNFX09QVF9TSEVMTF9FVkFMKTsKKworCXN0cmJ1Zl9hZGRzdHIoJnBhcnNlZCwgIiAtLSIpOworCXNxX3F1b3RlX2FyZ3YoJnBhcnNlZCwgYXJndik7CisJcHV0cyhwYXJzZWQuYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbWRfc3FfcXVvdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoYXJnYykKKwkJc3FfcXVvdGVfYXJndigmYnVmLCBhcmd2KTsKKwlwcmludGYoIiVzXG4iLCBidWYuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaWVfbm9fc2luZ2xlX3JldihpbnQgcXVpZXQpCit7CisJaWYgKHF1aWV0KQorCQlleGl0KDEpOworCWVsc2UKKwkJZGllKCJOZWVkZWQgYSBzaW5nbGUgcmV2aXNpb24iKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9yZXZfcGFyc2VfdXNhZ2VbXSA9CitOXygiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisgICAiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisgICAiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorICAgIlxuIgorICAgIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iKTsKKworLyoKKyAqIFBhcnNlICJvcHQiIG9yICJvcHQ9PHZhbHVlPiIsIHNldHRpbmcgdmFsdWUgcmVzcGVjdGl2ZWx5IHRvIGVpdGhlcgorICogTlVMTCBvciB0aGUgc3RyaW5nIGFmdGVyICI9Ii4KKyAqLworc3RhdGljIGludCBvcHRfd2l0aF92YWx1ZShjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqKnZhbHVlKQoreworCWlmIChza2lwX3ByZWZpeChhcmcsIG9wdCwgJmFyZykpIHsKKwkJaWYgKCEqYXJnKSB7CisJCQkqdmFsdWUgPSBOVUxMOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKCphcmcrKyA9PSAnPScpIHsKKwkJCSp2YWx1ZSA9IGFyZzsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcmVmX29wdChjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaWYgKHBhdHRlcm4pCisJCWZvcl9lYWNoX2dsb2JfcmVmX2luKHNob3dfcmVmZXJlbmNlLCBwYXR0ZXJuLCBwcmVmaXgsIE5VTEwpOworCWVsc2UKKwkJZm9yX2VhY2hfcmVmX2luKHByZWZpeCwgc2hvd19yZWZlcmVuY2UsIE5VTEwpOworCWNsZWFyX3JlZl9leGNsdXNpb24oJnJlZl9leGNsdWRlcyk7Cit9CisKK2ludCBjbWRfcmV2X3BhcnNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCBhc19pcyA9IDAsIHZlcmlmeSA9IDAsIHF1aWV0ID0gMCwgcmV2c19jb3VudCA9IDAsIHR5cGUgPSAwOworCWludCBkaWRfcmVwb19zZXR1cCA9IDA7CisJaW50IGhhc19kYXNoZGFzaCA9IDA7CisJaW50IG91dHB1dF9wcmVmaXggPSAwOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CisJY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisJc3RydWN0IG9iamVjdF9jb250ZXh0IHVudXNlZDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGludCBoZXhzeiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6OworCisJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoIi0tcGFyc2VvcHQiLCBhcmd2WzFdKSkKKwkJcmV0dXJuIGNtZF9wYXJzZW9wdChhcmdjIC0gMSwgYXJndiArIDEsIHByZWZpeCk7CisKKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCgiLS1zcS1xdW90ZSIsIGFyZ3ZbMV0pKQorCQlyZXR1cm4gY21kX3NxX3F1b3RlKGFyZ2MgLSAyLCBhcmd2ICsgMik7CisKKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCgiLWgiLCBhcmd2WzFdKSkKKwkJdXNhZ2UoYnVpbHRpbl9yZXZfcGFyc2VfdXNhZ2UpOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS0iKSkgeworCQkJaGFzX2Rhc2hkYXNoID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogTm8gb3B0aW9uczsganVzdCByZXBvcnQgb24gd2hldGhlciB3ZSdyZSBpbiBhIGdpdCByZXBvIG9yIG5vdC4gKi8KKwlpZiAoYXJnYyA9PSAxKSB7CisJCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwkJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1sb2NhbC1lbnYtdmFycyIpKSB7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGxvY2FsX3JlcG9fZW52W2ldOyBpKyspCisJCQkJcHJpbnRmKCIlc1xuIiwgbG9jYWxfcmVwb19lbnZbaV0pOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1yZXNvbHZlLWdpdC1kaXIiKSkgeworCQkJY29uc3QgY2hhciAqZ2l0ZGlyID0gYXJndlsrK2ldOworCQkJaWYgKCFnaXRkaXIpCisJCQkJZGllKCItLXJlc29sdmUtZ2l0LWRpciByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworCQkJZ2l0ZGlyID0gcmVzb2x2ZV9naXRkaXIoZ2l0ZGlyKTsKKwkJCWlmICghZ2l0ZGlyKQorCQkJCWRpZSgibm90IGEgZ2l0ZGlyICclcyciLCBhcmd2W2ldKTsKKwkJCXB1dHMoZ2l0ZGlyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogVGhlIHJlc3Qgb2YgdGhlIG9wdGlvbnMgcmVxdWlyZSBhIGdpdCByZXBvc2l0b3J5LiAqLworCQlpZiAoIWRpZF9yZXBvX3NldHVwKSB7CisJCQlwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJCQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJCQlkaWRfcmVwb19zZXR1cCA9IDE7CisJCX0KKworCQlpZiAoIXN0cmNtcChhcmcsICItLWdpdC1wYXRoIikpIHsKKwkJCWlmICghYXJndltpICsgMV0pCisJCQkJZGllKCItLWdpdC1wYXRoIHJlcXVpcmVzIGFuIGFyZ3VtZW50Iik7CisJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQlwdXRzKHJlbGF0aXZlX3BhdGgoZ2l0X3BhdGgoIiVzIiwgYXJndltpICsgMV0pLAorCQkJCQkgICBwcmVmaXgsICZidWYpKTsKKwkJCWkrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChhc19pcykgeworCQkJaWYgKHNob3dfZmlsZShhcmcsIG91dHB1dF9wcmVmaXgpICYmIGFzX2lzIDwgMikKKwkJCQl2ZXJpZnlfZmlsZW5hbWUocHJlZml4LCBhcmcsIDApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCItbiIpKSB7CisJCQlpZiAoKytpID49IGFyZ2MpCisJCQkJZGllKCItbiByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworCQkJaWYgKChmaWx0ZXIgJiBET19GTEFHUykgJiYgKGZpbHRlciAmIERPX1JFVlMpKSB7CisJCQkJc2hvdyhhcmcpOworCQkJCXNob3coYXJndltpXSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLW4iKSkgeworCQkJaWYgKChmaWx0ZXIgJiBET19GTEFHUykgJiYgKGZpbHRlciAmIERPX1JFVlMpKQorCQkJCXNob3coYXJnKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQkJYXNfaXMgPSAyOworCQkJCS8qIFBhc3Mgb24gdGhlICItLSIgaWYgd2Ugc2hvdyBhbnl0aGluZyBidXQgZmlsZXMuLiAqLworCQkJCWlmIChmaWx0ZXIgJiAoRE9fRkxBR1MgfCBET19SRVZTKSkKKwkJCQkJc2hvd19maWxlKGFyZywgMCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWRlZmF1bHQiKSkgeworCQkJCWRlZiA9IGFyZ3ZbKytpXTsKKwkJCQlpZiAoIWRlZikKKwkJCQkJZGllKCItLWRlZmF1bHQgcmVxdWlyZXMgYW4gYXJndW1lbnQiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tcHJlZml4IikpIHsKKwkJCQlwcmVmaXggPSBhcmd2WysraV07CisJCQkJaWYgKCFwcmVmaXgpCisJCQkJCWRpZSgiLS1wcmVmaXggcmVxdWlyZXMgYW4gYXJndW1lbnQiKTsKKwkJCQlzdGFydHVwX2luZm8tPnByZWZpeCA9IHByZWZpeDsKKwkJCQlvdXRwdXRfcHJlZml4ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tcmV2cy1vbmx5IikpIHsKKwkJCQlmaWx0ZXIgJj0gfkRPX05PUkVWOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1yZXZzIikpIHsKKwkJCQlmaWx0ZXIgJj0gfkRPX1JFVlM7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWZsYWdzIikpIHsKKwkJCQlmaWx0ZXIgJj0gfkRPX05PTkZMQUdTOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1mbGFncyIpKSB7CisJCQkJZmlsdGVyICY9IH5ET19GTEFHUzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tdmVyaWZ5IikpIHsKKwkJCQlmaWx0ZXIgJj0gfihET19GTEFHU3xET19OT1JFVik7CisJCQkJdmVyaWZ5ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tcXVpZXQiKSB8fCAhc3RyY21wKGFyZywgIi1xIikpIHsKKwkJCQlxdWlldCA9IDE7CisJCQkJZmxhZ3MgfD0gR0VUX09JRF9RVUlFVExZOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKG9wdF93aXRoX3ZhbHVlKGFyZywgIi0tc2hvcnQiLCAmYXJnKSkgeworCQkJCWZpbHRlciAmPSB+KERPX0ZMQUdTfERPX05PUkVWKTsKKwkJCQl2ZXJpZnkgPSAxOworCQkJCWFiYnJldiA9IERFRkFVTFRfQUJCUkVWOworCQkJCWlmICghYXJnKQorCQkJCQljb250aW51ZTsKKwkJCQlhYmJyZXYgPSBzdHJ0b3VsKGFyZywgTlVMTCwgMTApOworCQkJCWlmIChhYmJyZXYgPCBNSU5JTVVNX0FCQlJFVikKKwkJCQkJYWJicmV2ID0gTUlOSU1VTV9BQkJSRVY7CisJCQkJZWxzZSBpZiAoaGV4c3ogPD0gYWJicmV2KQorCQkJCQlhYmJyZXYgPSBoZXhzejsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tc3EiKSkgeworCQkJCW91dHB1dF9zcSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLW5vdCIpKSB7CisJCQkJc2hvd190eXBlIF49IFJFVkVSU0VEOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zeW1ib2xpYyIpKSB7CisJCQkJc3ltYm9saWMgPSBTSE9XX1NZTUJPTElDX0FTSVM7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXN5bWJvbGljLWZ1bGwtbmFtZSIpKSB7CisJCQkJc3ltYm9saWMgPSBTSE9XX1NZTUJPTElDX0ZVTEw7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAob3B0X3dpdGhfdmFsdWUoYXJnLCAiLS1hYmJyZXYtcmVmIiwgJmFyZykpIHsKKwkJCQlhYmJyZXZfcmVmID0gMTsKKwkJCQlhYmJyZXZfcmVmX3N0cmljdCA9IHdhcm5fYW1iaWd1b3VzX3JlZnM7CisJCQkJaWYgKGFyZykgeworCQkJCQlpZiAoIXN0cmNtcChhcmcsICJzdHJpY3QiKSkKKwkJCQkJCWFiYnJldl9yZWZfc3RyaWN0ID0gMTsKKwkJCQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJsb29zZSIpKQorCQkJCQkJYWJicmV2X3JlZl9zdHJpY3QgPSAwOworCQkJCQllbHNlCisJCQkJCQlkaWUoInVua25vd24gbW9kZSBmb3IgLS1hYmJyZXYtcmVmOiAlcyIsCisJCQkJCQkgICAgYXJnKTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCQkJZm9yX2VhY2hfcmVmKHNob3dfcmVmZXJlbmNlLCBOVUxMKTsKKwkJCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZWZfZXhjbHVkZXMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tZGlzYW1iaWd1YXRlPSIsICZhcmcpKSB7CisJCQkJZm9yX2VhY2hfYWJicmV2KGFyZywgc2hvd19hYmJyZXYsIE5VTEwpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1iaXNlY3QiKSkgeworCQkJCWZvcl9lYWNoX2Z1bGxyZWZfaW4oInJlZnMvYmlzZWN0L2JhZCIsIHNob3dfcmVmZXJlbmNlLCBOVUxMLCAwKTsKKwkJCQlmb3JfZWFjaF9mdWxscmVmX2luKCJyZWZzL2Jpc2VjdC9nb29kIiwgYW50aV9yZWZlcmVuY2UsIE5VTEwsIDApOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKG9wdF93aXRoX3ZhbHVlKGFyZywgIi0tYnJhbmNoZXMiLCAmYXJnKSkgeworCQkJCWhhbmRsZV9yZWZfb3B0KGFyZywgInJlZnMvaGVhZHMvIik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAob3B0X3dpdGhfdmFsdWUoYXJnLCAiLS10YWdzIiwgJmFyZykpIHsKKwkJCQloYW5kbGVfcmVmX29wdChhcmcsICJyZWZzL3RhZ3MvIik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1nbG9iPSIsICZhcmcpKSB7CisJCQkJaGFuZGxlX3JlZl9vcHQoYXJnLCBOVUxMKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChvcHRfd2l0aF92YWx1ZShhcmcsICItLXJlbW90ZXMiLCAmYXJnKSkgeworCQkJCWhhbmRsZV9yZWZfb3B0KGFyZywgInJlZnMvcmVtb3Rlcy8iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWV4Y2x1ZGU9IiwgJmFyZykpIHsKKwkJCQlhZGRfcmVmX2V4Y2x1c2lvbigmcmVmX2V4Y2x1ZGVzLCBhcmcpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG93LXRvcGxldmVsIikpIHsKKwkJCQljb25zdCBjaGFyICp3b3JrX3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpOworCQkJCWlmICh3b3JrX3RyZWUpCisJCQkJCXB1dHMod29ya190cmVlKTsKKwkJCQllbHNlCisJCQkJCWRpZSgidGhpcyBvcGVyYXRpb24gbXVzdCBiZSBydW4gaW4gYSB3b3JrIHRyZWUiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tc2hvdy1zdXBlcnByb2plY3Qtd29ya2luZy10cmVlIikpIHsKKwkJCQlzdHJ1Y3Qgc3RyYnVmIHN1cGVycHJvamVjdCA9IFNUUkJVRl9JTklUOworCQkJCWlmIChnZXRfc3VwZXJwcm9qZWN0X3dvcmtpbmdfdHJlZSgmc3VwZXJwcm9qZWN0KSkKKwkJCQkJcHV0cyhzdXBlcnByb2plY3QuYnVmKTsKKwkJCQlzdHJidWZfcmVsZWFzZSgmc3VwZXJwcm9qZWN0KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tc2hvdy1wcmVmaXgiKSkgeworCQkJCWlmIChwcmVmaXgpCisJCQkJCXB1dHMocHJlZml4KTsKKwkJCQllbHNlCisJCQkJCXB1dGNoYXIoJ1xuJyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXNob3ctY2R1cCIpKSB7CisJCQkJY29uc3QgY2hhciAqcGZ4ID0gcHJlZml4OworCQkJCWlmICghaXNfaW5zaWRlX3dvcmtfdHJlZSgpKSB7CisJCQkJCWNvbnN0IGNoYXIgKndvcmtfdHJlZSA9CisJCQkJCQlnZXRfZ2l0X3dvcmtfdHJlZSgpOworCQkJCQlpZiAod29ya190cmVlKQorCQkJCQkJcHJpbnRmKCIlc1xuIiwgd29ya190cmVlKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXdoaWxlIChwZngpIHsKKwkJCQkJcGZ4ID0gc3RyY2hyKHBmeCwgJy8nKTsKKwkJCQkJaWYgKHBmeCkgeworCQkJCQkJcGZ4Kys7CisJCQkJCQlwcmludGYoIi4uLyIpOworCQkJCQl9CisJCQkJfQorCQkJCXB1dGNoYXIoJ1xuJyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWdpdC1kaXIiKSB8fAorCQkJICAgICFzdHJjbXAoYXJnLCAiLS1hYnNvbHV0ZS1naXQtZGlyIikpIHsKKwkJCQljb25zdCBjaGFyICpnaXRkaXIgPSBnZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCk7CisJCQkJY2hhciAqY3dkOworCQkJCWludCBsZW47CisJCQkJaWYgKGFyZ1syXSA9PSAnZycpIHsJLyogLS1naXQtZGlyICovCisJCQkJCWlmIChnaXRkaXIpIHsKKwkJCQkJCXB1dHMoZ2l0ZGlyKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCWlmICghcHJlZml4KSB7CisJCQkJCQlwdXRzKCIuZ2l0Iik7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CQkvKiAtLWFic29sdXRlLWdpdC1kaXIgKi8KKwkJCQkJaWYgKCFnaXRkaXIgJiYgIXByZWZpeCkKKwkJCQkJCWdpdGRpciA9ICIuZ2l0IjsKKwkJCQkJaWYgKGdpdGRpcikgeworCQkJCQkJc3RydWN0IHN0cmJ1ZiByZWFscGF0aCA9IFNUUkJVRl9JTklUOworCQkJCQkJc3RyYnVmX3JlYWxwYXRoKCZyZWFscGF0aCwgZ2l0ZGlyLCAxKTsKKwkJCQkJCXB1dHMocmVhbHBhdGguYnVmKTsKKwkJCQkJCXN0cmJ1Zl9yZWxlYXNlKCZyZWFscGF0aCk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0KKwkJCQljd2QgPSB4Z2V0Y3dkKCk7CisJCQkJbGVuID0gc3RybGVuKGN3ZCk7CisJCQkJcHJpbnRmKCIlcyVzLmdpdFxuIiwgY3dkLCBsZW4gJiYgY3dkW2xlbi0xXSAhPSAnLycgPyAiLyIgOiAiIik7CisJCQkJZnJlZShjd2QpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1naXQtY29tbW9uLWRpciIpKSB7CisJCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJCXB1dHMocmVsYXRpdmVfcGF0aChnZXRfZ2l0X2NvbW1vbl9kaXIoKSwKKwkJCQkJCSAgIHByZWZpeCwgJmJ1ZikpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1pcy1pbnNpZGUtZ2l0LWRpciIpKSB7CisJCQkJcHJpbnRmKCIlc1xuIiwgaXNfaW5zaWRlX2dpdF9kaXIoKSA/ICJ0cnVlIgorCQkJCQkJOiAiZmFsc2UiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0taXMtaW5zaWRlLXdvcmstdHJlZSIpKSB7CisJCQkJcHJpbnRmKCIlc1xuIiwgaXNfaW5zaWRlX3dvcmtfdHJlZSgpID8gInRydWUiCisJCQkJCQk6ICJmYWxzZSIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1pcy1iYXJlLXJlcG9zaXRvcnkiKSkgeworCQkJCXByaW50ZigiJXNcbiIsIGlzX2JhcmVfcmVwb3NpdG9yeSgpID8gInRydWUiCisJCQkJCQk6ICJmYWxzZSIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1pcy1zaGFsbG93LXJlcG9zaXRvcnkiKSkgeworCQkJCXByaW50ZigiJXNcbiIsCisJCQkJCQlpc19yZXBvc2l0b3J5X3NoYWxsb3codGhlX3JlcG9zaXRvcnkpID8gInRydWUiCisJCQkJCQk6ICJmYWxzZSIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zaGFyZWQtaW5kZXgtcGF0aCIpKSB7CisJCQkJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCQkJCWRpZShfKCJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiKSk7CisJCQkJaWYgKHRoZV9pbmRleC5zcGxpdF9pbmRleCkgeworCQkJCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSAmdGhlX2luZGV4LnNwbGl0X2luZGV4LT5iYXNlX29pZDsKKwkJCQkJY29uc3QgY2hhciAqcGF0aCA9IGdpdF9wYXRoKCJzaGFyZWRpbmRleC4lcyIsIG9pZF90b19oZXgob2lkKSk7CisJCQkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCQkJcHV0cyhyZWxhdGl2ZV9wYXRoKHBhdGgsIHByZWZpeCwgJmJ1ZikpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChza2lwX3ByZWZpeChhcmcsICItLXNpbmNlPSIsICZhcmcpKSB7CisJCQkJc2hvd19kYXRlc3RyaW5nKCItLW1heC1hZ2U9IiwgYXJnKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWFmdGVyPSIsICZhcmcpKSB7CisJCQkJc2hvd19kYXRlc3RyaW5nKCItLW1heC1hZ2U9IiwgYXJnKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWJlZm9yZT0iLCAmYXJnKSkgeworCQkJCXNob3dfZGF0ZXN0cmluZygiLS1taW4tYWdlPSIsIGFyZyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS11bnRpbD0iLCAmYXJnKSkgeworCQkJCXNob3dfZGF0ZXN0cmluZygiLS1taW4tYWdlPSIsIGFyZyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAob3B0X3dpdGhfdmFsdWUoYXJnLCAiLS1zaG93LW9iamVjdC1mb3JtYXQiLCAmYXJnKSkgeworCQkJCWNvbnN0IGNoYXIgKnZhbCA9IGFyZyA/IGFyZyA6ICJzdG9yYWdlIjsKKworCQkJCWlmIChzdHJjbXAodmFsLCAic3RvcmFnZSIpICYmCisJCQkJICAgIHN0cmNtcCh2YWwsICJpbnB1dCIpICYmCisJCQkJICAgIHN0cmNtcCh2YWwsICJvdXRwdXQiKSkKKwkJCQkJZGllKCJ1bmtub3duIG1vZGUgZm9yIC0tc2hvdy1vYmplY3QtZm9ybWF0OiAlcyIsCisJCQkJCSAgICBhcmcpOworCQkJCXB1dHModGhlX2hhc2hfYWxnby0+bmFtZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc2hvd19mbGFnKGFyZykgJiYgdmVyaWZ5KQorCQkJCWRpZV9ub19zaW5nbGVfcmV2KHF1aWV0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogTm90IGEgZmxhZyBhcmd1bWVudCAqLworCQlpZiAodHJ5X2RpZmZlcmVuY2UoYXJnKSkKKwkJCWNvbnRpbnVlOworCQlpZiAodHJ5X3BhcmVudF9zaG9ydGhhbmRzKGFyZykpCisJCQljb250aW51ZTsKKwkJbmFtZSA9IGFyZzsKKwkJdHlwZSA9IE5PUk1BTDsKKwkJaWYgKCphcmcgPT0gJ14nKSB7CisJCQluYW1lKys7CisJCQl0eXBlID0gUkVWRVJTRUQ7CisJCX0KKwkJaWYgKCFnZXRfb2lkX3dpdGhfY29udGV4dCh0aGVfcmVwb3NpdG9yeSwgbmFtZSwKKwkJCQkJICBmbGFncywgJm9pZCwgJnVudXNlZCkpIHsKKwkJCWlmICh2ZXJpZnkpCisJCQkJcmV2c19jb3VudCsrOworCQkJZWxzZQorCQkJCXNob3dfcmV2KHR5cGUsICZvaWQsIG5hbWUpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHZlcmlmeSkKKwkJCWRpZV9ub19zaW5nbGVfcmV2KHF1aWV0KTsKKwkJaWYgKGhhc19kYXNoZGFzaCkKKwkJCWRpZSgiYmFkIHJldmlzaW9uICclcyciLCBhcmcpOworCQlhc19pcyA9IDE7CisJCWlmICghc2hvd19maWxlKGFyZywgb3V0cHV0X3ByZWZpeCkpCisJCQljb250aW51ZTsKKwkJdmVyaWZ5X2ZpbGVuYW1lKHByZWZpeCwgYXJnLCAxKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJaWYgKHZlcmlmeSkgeworCQlpZiAocmV2c19jb3VudCA9PSAxKSB7CisJCQlzaG93X3Jldih0eXBlLCAmb2lkLCBuYW1lKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKHJldnNfY291bnQgPT0gMCAmJiBzaG93X2RlZmF1bHQoKSkKKwkJCXJldHVybiAwOworCQlkaWVfbm9fc2luZ2xlX3JldihxdWlldCk7CisJfSBlbHNlCisJCXNob3dfZGVmYXVsdCgpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZXZlcnQuYyBiL2J1aWx0aW4vcmV2ZXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxY2M1ZAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmV2ZXJ0LmMKQEAgLTAsMCArMSwyNDcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCisKKy8qCisgKiBUaGlzIGltcGxlbWVudHMgdGhlIGJ1aWx0aW5zIHJldmVydCBhbmQgY2hlcnJ5LXBpY2suCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyAqCisgKiBCYXNlZCBvbiBnaXQtcmV2ZXJ0LnNoLCB3aGljaCBpcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBMaW51cyBUb3J2YWxkcworICogQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZXZlcnRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJldmVydCBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iKSwKKwlOXygiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNoZXJyeV9waWNrX3VzYWdlW10gPSB7CisJTl8oImdpdCBjaGVycnktcGljayBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iKSwKKwlOXygiZ2l0IGNoZXJyeS1waWNrIDxzdWJjb21tYW5kPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICphY3Rpb25fbmFtZShjb25zdCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJcmV0dXJuIG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUkVWRVJUID8gInJldmVydCIgOiAiY2hlcnJ5LXBpY2siOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0ICpyZXZlcnRfb3JfY2hlcnJ5X3BpY2tfdXNhZ2Uoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXJldHVybiBvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1JFVkVSVCA/IHJldmVydF91c2FnZSA6IGNoZXJyeV9waWNrX3VzYWdlOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV94KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IHJlcGxheV9vcHRzICoqb3B0c19wdHIgPSBvcHQtPnZhbHVlOworCXN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cyA9ICpvcHRzX3B0cjsKKworCWlmICh1bnNldCkKKwkJcmV0dXJuIDA7CisKKwlBTExPQ19HUk9XKG9wdHMtPnhvcHRzLCBvcHRzLT54b3B0c19uciArIDEsIG9wdHMtPnhvcHRzX2FsbG9jKTsKKwlvcHRzLT54b3B0c1tvcHRzLT54b3B0c19ucisrXSA9IHhzdHJkdXAoYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfbShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCByZXBsYXlfb3B0cyAqcmVwbGF5ID0gb3B0LT52YWx1ZTsKKwljaGFyICplbmQ7CisKKwlpZiAodW5zZXQpIHsKKwkJcmVwbGF5LT5tYWlubGluZSA9IDA7CisJCXJldHVybiAwOworCX0KKworCXJlcGxheS0+bWFpbmxpbmUgPSBzdHJ0b2woYXJnLCAmZW5kLCAxMCk7CisJaWYgKCplbmQgfHwgcmVwbGF5LT5tYWlubGluZSA8PSAwKQorCQlyZXR1cm4gZXJyb3IoXygib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWJlciBncmVhdGVyIHRoYW4gemVybyIpLAorCQkJICAgICBvcHQtPmxvbmdfbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworTEFTVF9BUkdfTVVTVF9CRV9OVUxMCitzdGF0aWMgdm9pZCB2ZXJpZnlfb3B0X2NvbXBhdGlibGUoY29uc3QgY2hhciAqbWUsIGNvbnN0IGNoYXIgKmJhc2Vfb3B0LCAuLi4pCit7CisJY29uc3QgY2hhciAqdGhpc19vcHQ7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBiYXNlX29wdCk7CisJd2hpbGUgKCh0aGlzX29wdCA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKSkpIHsKKwkJaWYgKHZhX2FyZyhhcCwgaW50KSkKKwkJCWJyZWFrOworCX0KKwl2YV9lbmQoYXApOworCisJaWYgKHRoaXNfb3B0KQorCQlkaWUoXygiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiKSwgbWUsIHRoaXNfb3B0LCBiYXNlX29wdCk7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3NlcXVlbmNlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwljb25zdCBjaGFyICogY29uc3QgKiB1c2FnZV9zdHIgPSByZXZlcnRfb3JfY2hlcnJ5X3BpY2tfdXNhZ2Uob3B0cyk7CisJY29uc3QgY2hhciAqbWUgPSBhY3Rpb25fbmFtZShvcHRzKTsKKwljb25zdCBjaGFyICpjbGVhbnVwX2FyZyA9IE5VTEw7CisJaW50IGNtZCA9IDA7CisJc3RydWN0IG9wdGlvbiBiYXNlX29wdGlvbnNbXSA9IHsKKwkJT1BUX0NNRE1PREUoMCwgInF1aXQiLCAmY21kLCBOXygiZW5kIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIpLCAncScpLAorCQlPUFRfQ01ETU9ERSgwLCAiY29udGludWUiLCAmY21kLCBOXygicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIpLCAnYycpLAorCQlPUFRfQ01ETU9ERSgwLCAiYWJvcnQiLCAmY21kLCBOXygiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIpLCAnYScpLAorCQlPUFRfQ01ETU9ERSgwLCAic2tpcCIsICZjbWQsIE5fKCJza2lwIGN1cnJlbnQgY29tbWl0IGFuZCBjb250aW51ZSIpLCAncycpLAorCQlPUFRfQ0xFQU5VUCgmY2xlYW51cF9hcmcpLAorCQlPUFRfQk9PTCgnbicsICJuby1jb21taXQiLCAmb3B0cy0+bm9fY29tbWl0LCBOXygiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiKSksCisJCU9QVF9CT09MKCdlJywgImVkaXQiLCAmb3B0cy0+ZWRpdCwgTl8oImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIikpLAorCQlPUFRfTk9PUF9OT0FSRygncicsIE5VTEwpLAorCQlPUFRfQk9PTCgncycsICJzaWdub2ZmIiwgJm9wdHMtPnNpZ25vZmYsIE5fKCJhZGQgU2lnbmVkLW9mZi1ieToiKSksCisJCU9QVF9DQUxMQkFDSygnbScsICJtYWlubGluZSIsIG9wdHMsIE5fKCJwYXJlbnQtbnVtYmVyIiksCisJCQkgICAgIE5fKCJzZWxlY3QgbWFpbmxpbmUgcGFyZW50IiksIG9wdGlvbl9wYXJzZV9tKSwKKwkJT1BUX1JFUkVSRV9BVVRPVVBEQVRFKCZvcHRzLT5hbGxvd19yZXJlcmVfYXV0byksCisJCU9QVF9TVFJJTkcoMCwgInN0cmF0ZWd5IiwgJm9wdHMtPnN0cmF0ZWd5LCBOXygic3RyYXRlZ3kiKSwgTl8oIm1lcmdlIHN0cmF0ZWd5IikpLAorCQlPUFRfQ0FMTEJBQ0soJ1gnLCAic3RyYXRlZ3ktb3B0aW9uIiwgJm9wdHMsIE5fKCJvcHRpb24iKSwKKwkJCU5fKCJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IiksIG9wdGlvbl9wYXJzZV94KSwKKwkJeyBPUFRJT05fU1RSSU5HLCAnUycsICJncGctc2lnbiIsICZvcHRzLT5ncGdfc2lnbiwgTl8oImtleS1pZCIpLAorCQkgIE5fKCJHUEcgc2lnbiBjb21taXQiKSwgUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSAiIiB9LAorCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCBvcHRpb24gKm9wdGlvbnMgPSBiYXNlX29wdGlvbnM7CisKKwlpZiAob3B0cy0+YWN0aW9uID09IFJFUExBWV9QSUNLKSB7CisJCXN0cnVjdCBvcHRpb24gY3BfZXh0cmFbXSA9IHsKKwkJCU9QVF9CT09MKCd4JywgTlVMTCwgJm9wdHMtPnJlY29yZF9vcmlnaW4sIE5fKCJhcHBlbmQgY29tbWl0IG5hbWUiKSksCisJCQlPUFRfQk9PTCgwLCAiZmYiLCAmb3B0cy0+YWxsb3dfZmYsIE5fKCJhbGxvdyBmYXN0LWZvcndhcmQiKSksCisJCQlPUFRfQk9PTCgwLCAiYWxsb3ctZW1wdHkiLCAmb3B0cy0+YWxsb3dfZW1wdHksIE5fKCJwcmVzZXJ2ZSBpbml0aWFsbHkgZW1wdHkgY29tbWl0cyIpKSwKKwkJCU9QVF9CT09MKDAsICJhbGxvdy1lbXB0eS1tZXNzYWdlIiwgJm9wdHMtPmFsbG93X2VtcHR5X21lc3NhZ2UsIE5fKCJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiKSksCisJCQlPUFRfQk9PTCgwLCAia2VlcC1yZWR1bmRhbnQtY29tbWl0cyIsICZvcHRzLT5rZWVwX3JlZHVuZGFudF9jb21taXRzLCBOXygia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiKSksCisJCQlPUFRfRU5EKCksCisJCX07CisJCW9wdGlvbnMgPSBwYXJzZV9vcHRpb25zX2NvbmNhdChvcHRpb25zLCBjcF9leHRyYSk7CisJfQorCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgdXNhZ2Vfc3RyLAorCQkJUEFSU0VfT1BUX0tFRVBfQVJHVjAgfAorCQkJUEFSU0VfT1BUX0tFRVBfVU5LTk9XTik7CisKKwkvKiBpbXBsaWVzIGFsbG93X2VtcHR5ICovCisJaWYgKG9wdHMtPmtlZXBfcmVkdW5kYW50X2NvbW1pdHMpCisJCW9wdHMtPmFsbG93X2VtcHR5ID0gMTsKKworCWlmIChjbGVhbnVwX2FyZykgeworCQlvcHRzLT5kZWZhdWx0X21zZ19jbGVhbnVwID0gZ2V0X2NsZWFudXBfbW9kZShjbGVhbnVwX2FyZywgMSk7CisJCW9wdHMtPmV4cGxpY2l0X2NsZWFudXAgPSAxOworCX0KKworCS8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAqLworCWlmIChjbWQpIHsKKwkJY2hhciAqdGhpc19vcGVyYXRpb247CisJCWlmIChjbWQgPT0gJ3EnKQorCQkJdGhpc19vcGVyYXRpb24gPSAiLS1xdWl0IjsKKwkJZWxzZSBpZiAoY21kID09ICdjJykKKwkJCXRoaXNfb3BlcmF0aW9uID0gIi0tY29udGludWUiOworCQllbHNlIGlmIChjbWQgPT0gJ3MnKQorCQkJdGhpc19vcGVyYXRpb24gPSAiLS1za2lwIjsKKwkJZWxzZSB7CisJCQlhc3NlcnQoY21kID09ICdhJyk7CisJCQl0aGlzX29wZXJhdGlvbiA9ICItLWFib3J0IjsKKwkJfQorCisJCXZlcmlmeV9vcHRfY29tcGF0aWJsZShtZSwgdGhpc19vcGVyYXRpb24sCisJCQkJIi0tbm8tY29tbWl0Iiwgb3B0cy0+bm9fY29tbWl0LAorCQkJCSItLXNpZ25vZmYiLCBvcHRzLT5zaWdub2ZmLAorCQkJCSItLW1haW5saW5lIiwgb3B0cy0+bWFpbmxpbmUsCisJCQkJIi0tc3RyYXRlZ3kiLCBvcHRzLT5zdHJhdGVneSA/IDEgOiAwLAorCQkJCSItLXN0cmF0ZWd5LW9wdGlvbiIsIG9wdHMtPnhvcHRzID8gMSA6IDAsCisJCQkJIi14Iiwgb3B0cy0+cmVjb3JkX29yaWdpbiwKKwkJCQkiLS1mZiIsIG9wdHMtPmFsbG93X2ZmLAorCQkJCSItLXJlcmVyZS1hdXRvdXBkYXRlIiwgb3B0cy0+YWxsb3dfcmVyZXJlX2F1dG8gPT0gUkVSRVJFX0FVVE9VUERBVEUsCisJCQkJIi0tbm8tcmVyZXJlLWF1dG91cGRhdGUiLCBvcHRzLT5hbGxvd19yZXJlcmVfYXV0byA9PSBSRVJFUkVfTk9BVVRPVVBEQVRFLAorCQkJCU5VTEwpOworCX0KKworCWlmIChvcHRzLT5hbGxvd19mZikKKwkJdmVyaWZ5X29wdF9jb21wYXRpYmxlKG1lLCAiLS1mZiIsCisJCQkJIi0tc2lnbm9mZiIsIG9wdHMtPnNpZ25vZmYsCisJCQkJIi0tbm8tY29tbWl0Iiwgb3B0cy0+bm9fY29tbWl0LAorCQkJCSIteCIsIG9wdHMtPnJlY29yZF9vcmlnaW4sCisJCQkJIi0tZWRpdCIsIG9wdHMtPmVkaXQsCisJCQkJTlVMTCk7CisKKwlpZiAoY21kKSB7CisJCW9wdHMtPnJldnMgPSBOVUxMOworCX0gZWxzZSB7CisJCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgc19yX29wdDsKKwkJb3B0cy0+cmV2cyA9IHhtYWxsb2Moc2l6ZW9mKCpvcHRzLT5yZXZzKSk7CisJCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksIG9wdHMtPnJldnMsIE5VTEwpOworCQlvcHRzLT5yZXZzLT5ub193YWxrID0gUkVWSVNJT05fV0FMS19OT19XQUxLX1VOU09SVEVEOworCQlpZiAoYXJnYyA8IDIpCisJCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2Vfc3RyLCBvcHRpb25zKTsKKwkJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0iKSkKKwkJCWFyZ3ZbMV0gPSAiQHstMX0iOworCQltZW1zZXQoJnNfcl9vcHQsIDAsIHNpemVvZihzX3Jfb3B0KSk7CisJCXNfcl9vcHQuYXNzdW1lX2Rhc2hkYXNoID0gMTsKKwkJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCBvcHRzLT5yZXZzLCAmc19yX29wdCk7CisJfQorCisJaWYgKGFyZ2MgPiAxKQorCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2Vfc3RyLCBvcHRpb25zKTsKKworCS8qIFRoZXNlIG9wdGlvbiB2YWx1ZXMgd2lsbCBiZSBmcmVlKClkICovCisJb3B0cy0+Z3BnX3NpZ24gPSB4c3RyZHVwX29yX251bGwob3B0cy0+Z3BnX3NpZ24pOworCW9wdHMtPnN0cmF0ZWd5ID0geHN0cmR1cF9vcl9udWxsKG9wdHMtPnN0cmF0ZWd5KTsKKworCWlmIChjbWQgPT0gJ3EnKSB7CisJCWludCByZXQgPSBzZXF1ZW5jZXJfcmVtb3ZlX3N0YXRlKG9wdHMpOworCQlpZiAoIXJldCkKKwkJCXJlbW92ZV9icmFuY2hfc3RhdGUodGhlX3JlcG9zaXRvcnksIDApOworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoY21kID09ICdjJykKKwkJcmV0dXJuIHNlcXVlbmNlcl9jb250aW51ZSh0aGVfcmVwb3NpdG9yeSwgb3B0cyk7CisJaWYgKGNtZCA9PSAnYScpCisJCXJldHVybiBzZXF1ZW5jZXJfcm9sbGJhY2sodGhlX3JlcG9zaXRvcnksIG9wdHMpOworCWlmIChjbWQgPT0gJ3MnKQorCQlyZXR1cm4gc2VxdWVuY2VyX3NraXAodGhlX3JlcG9zaXRvcnksIG9wdHMpOworCXJldHVybiBzZXF1ZW5jZXJfcGlja19yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksIG9wdHMpOworfQorCitpbnQgY21kX3JldmVydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmVwbGF5X29wdHMgb3B0cyA9IFJFUExBWV9PUFRTX0lOSVQ7CisJaW50IHJlczsKKworCWlmIChpc2F0dHkoMCkpCisJCW9wdHMuZWRpdCA9IDE7CisJb3B0cy5hY3Rpb24gPSBSRVBMQVlfUkVWRVJUOworCXNlcXVlbmNlcl9pbml0X2NvbmZpZygmb3B0cyk7CisJcmVzID0gcnVuX3NlcXVlbmNlcihhcmdjLCBhcmd2LCAmb3B0cyk7CisJaWYgKHJlcyA8IDApCisJCWRpZShfKCJyZXZlcnQgZmFpbGVkIikpOworCXJldHVybiByZXM7Cit9CisKK2ludCBjbWRfY2hlcnJ5X3BpY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJlcGxheV9vcHRzIG9wdHMgPSBSRVBMQVlfT1BUU19JTklUOworCWludCByZXM7CisKKwlvcHRzLmFjdGlvbiA9IFJFUExBWV9QSUNLOworCXNlcXVlbmNlcl9pbml0X2NvbmZpZygmb3B0cyk7CisJcmVzID0gcnVuX3NlcXVlbmNlcihhcmdjLCBhcmd2LCAmb3B0cyk7CisJaWYgKHJlcyA8IDApCisJCWRpZShfKCJjaGVycnktcGljayBmYWlsZWQiKSk7CisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcm0uYyBiL2J1aWx0aW4vcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODU4NjMxCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9ybS5jCkBAIC0wLDAgKzEsNDA5IEBACisvKgorICogImdpdCBybSIgYnVpbHRpbiBjb21tYW5kCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcyAyMDA2CisgKi8KKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcm1fdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJtIFs8b3B0aW9ucz5dIFstLV0gPGZpbGU+Li4uIiksCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCB7CisJaW50IG5yLCBhbGxvYzsKKwlzdHJ1Y3QgeworCQljb25zdCBjaGFyICpuYW1lOworCQljaGFyIGlzX3N1Ym1vZHVsZTsKKwl9ICplbnRyeTsKK30gbGlzdDsKKworc3RhdGljIGludCBnZXRfb3Vyc19jYWNoZV9wb3MoY29uc3QgY2hhciAqcGF0aCwgaW50IHBvcykKK3sKKwlpbnQgaSA9IC1wb3MgLSAxOworCisJd2hpbGUgKChpIDwgYWN0aXZlX25yKSAmJiAhc3RyY21wKGFjdGl2ZV9jYWNoZVtpXS0+bmFtZSwgcGF0aCkpIHsKKwkJaWYgKGNlX3N0YWdlKGFjdGl2ZV9jYWNoZVtpXSkgPT0gMikKKwkJCXJldHVybiBpOworCQlpKys7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZXJyb3JfZmlsZXMoc3RydWN0IHN0cmluZ19saXN0ICpmaWxlc19saXN0LAorCQkJICAgICAgY29uc3QgY2hhciAqbWFpbl9tc2csCisJCQkgICAgICBjb25zdCBjaGFyICpoaW50c19tc2csCisJCQkgICAgICBpbnQgKmVycnMpCit7CisJaWYgKGZpbGVzX2xpc3QtPm5yKSB7CisJCWludCBpOworCQlzdHJ1Y3Qgc3RyYnVmIGVycl9tc2cgPSBTVFJCVUZfSU5JVDsKKworCQlzdHJidWZfYWRkc3RyKCZlcnJfbXNnLCBtYWluX21zZyk7CisJCWZvciAoaSA9IDA7IGkgPCBmaWxlc19saXN0LT5ucjsgaSsrKQorCQkJc3RyYnVmX2FkZGYoJmVycl9tc2csCisJCQkJICAgICJcbiAgICAlcyIsCisJCQkJICAgIGZpbGVzX2xpc3QtPml0ZW1zW2ldLnN0cmluZyk7CisJCWlmIChhZHZpY2Vfcm1faGludHMpCisJCQlzdHJidWZfYWRkc3RyKCZlcnJfbXNnLCBoaW50c19tc2cpOworCQkqZXJycyA9IGVycm9yKCIlcyIsIGVycl9tc2cuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycl9tc2cpOworCX0KK30KKworc3RhdGljIHZvaWQgc3VibW9kdWxlc19hYnNvcmJfZ2l0ZGlyX2lmX25lZWRlZCh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IGxpc3QuZW50cnlbaV0ubmFtZTsKKwkJaW50IHBvczsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCQlwb3MgPSBjYWNoZV9uYW1lX3BvcyhuYW1lLCBzdHJsZW4obmFtZSkpOworCQlpZiAocG9zIDwgMCkgeworCQkJcG9zID0gZ2V0X291cnNfY2FjaGVfcG9zKG5hbWUsIHBvcyk7CisJCQlpZiAocG9zIDwgMCkKKwkJCQljb250aW51ZTsKKwkJfQorCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCisJCWlmICghU19JU0dJVExJTksoY2UtPmNlX21vZGUpIHx8CisJCSAgICAhZmlsZV9leGlzdHMoY2UtPm5hbWUpIHx8CisJCSAgICBpc19lbXB0eV9kaXIobmFtZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoIXN1Ym1vZHVsZV91c2VzX2dpdGZpbGUobmFtZSkpCisJCQlhYnNvcmJfZ2l0X2Rpcl9pbnRvX3N1cGVycHJvamVjdChuYW1lLAorCQkJCUFCU09SQl9HSVRESVJfUkVDVVJTRV9TVUJNT0RVTEVTKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfbG9jYWxfbW9kKHN0cnVjdCBvYmplY3RfaWQgKmhlYWQsIGludCBpbmRleF9vbmx5KQoreworCS8qCisJICogSXRlbXMgaW4gbGlzdCBhcmUgYWxyZWFkeSBzb3J0ZWQgaW4gdGhlIGNhY2hlIG9yZGVyLAorCSAqIHNvIHdlIGNvdWxkIGRvIHRoaXMgYSBsb3QgbW9yZSBlZmZpY2llbnRseSBieSB1c2luZworCSAqIHRyZWVfZGVzYyBiYXNlZCB0cmF2ZXJzYWwgaWYgd2Ugd2FudGVkIHRvLCBidXQgSSBhbQorCSAqIGxhenksIGFuZCB3aG8gY2FyZXMgaWYgcmVtb3ZhbCBvZiBmaWxlcyBpcyBhIHRhZAorCSAqIHNsb3dlciB0aGFuIHRoZSB0aGVvcmV0aWNhbCBtYXhpbXVtIHNwZWVkPworCSAqLworCWludCBpLCBub19oZWFkOworCWludCBlcnJzID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZmlsZXNfc3RhZ2VkID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZmlsZXNfY2FjaGVkID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZmlsZXNfbG9jYWwgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJbm9faGVhZCA9IGlzX251bGxfb2lkKGhlYWQpOworCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWludCBwb3M7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBsaXN0LmVudHJ5W2ldLm5hbWU7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQl1bnNpZ25lZCBzaG9ydCBtb2RlOworCQlpbnQgbG9jYWxfY2hhbmdlcyA9IDA7CisJCWludCBzdGFnZWRfY2hhbmdlcyA9IDA7CisKKwkJcG9zID0gY2FjaGVfbmFtZV9wb3MobmFtZSwgc3RybGVuKG5hbWUpKTsKKwkJaWYgKHBvcyA8IDApIHsKKwkJCS8qCisJCQkgKiBTa2lwIHVubWVyZ2VkIGVudHJpZXMgZXhjZXB0IGZvciBwb3B1bGF0ZWQgc3VibW9kdWxlcworCQkJICogdGhhdCBjb3VsZCBsb3NlIGhpc3Rvcnkgd2hlbiByZW1vdmVkLgorCQkJICovCisJCQlwb3MgPSBnZXRfb3Vyc19jYWNoZV9wb3MobmFtZSwgcG9zKTsKKwkJCWlmIChwb3MgPCAwKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoIVNfSVNHSVRMSU5LKGFjdGl2ZV9jYWNoZVtwb3NdLT5jZV9tb2RlKSB8fAorCQkJICAgIGlzX2VtcHR5X2RpcihuYW1lKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCisJCWlmIChsc3RhdChjZS0+bmFtZSwgJnN0KSA8IDApIHsKKwkJCWlmICghaXNfbWlzc2luZ19maWxlX2Vycm9yKGVycm5vKSkKKwkJCQl3YXJuaW5nX2Vycm5vKF8oImZhaWxlZCB0byBzdGF0ICclcyciKSwgY2UtPm5hbWUpOworCQkJLyogSXQgYWxyZWFkeSB2YW5pc2hlZCBmcm9tIHRoZSB3b3JraW5nIHRyZWUgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCS8qIGlmIGEgZmlsZSB3YXMgcmVtb3ZlZCBhbmQgaXQgaXMgbm93IGEKKwkJCSAqIGRpcmVjdG9yeSwgdGhhdCBpcyB0aGUgc2FtZSBhcyBFTk9FTlQgYXMKKwkJCSAqIGZhciBhcyBnaXQgaXMgY29uY2VybmVkOyB3ZSBkbyBub3QgdHJhY2sKKwkJCSAqIGRpcmVjdG9yaWVzIHVubGVzcyB0aGV5IGFyZSBzdWJtb2R1bGVzLgorCQkJICovCisJCQlpZiAoIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqICJybSIgb2YgYSBwYXRoIHRoYXQgaGFzIGNoYW5nZXMgbmVlZCB0byBiZSB0cmVhdGVkCisJCSAqIGNhcmVmdWxseSBub3QgdG8gYWxsb3cgbG9zaW5nIGxvY2FsIGNoYW5nZXMKKwkJICogYWNjaWRlbnRhbGx5LiAgQSBsb2NhbCBjaGFuZ2UgY291bGQgYmUgKDEpIGZpbGUgaW4KKwkJICogd29yayB0cmVlIGlzIGRpZmZlcmVudCBzaW5jZSB0aGUgaW5kZXg7IGFuZC9vciAoMikKKwkJICogdGhlIHVzZXIgc3RhZ2VkIGEgY29udGVudCB0aGF0IGlzIGRpZmZlcmVudCBmcm9tCisJCSAqIHRoZSBjdXJyZW50IGNvbW1pdCBpbiB0aGUgaW5kZXguCisJCSAqCisJCSAqIEluIHN1Y2ggYSBjYXNlLCB5b3Ugd291bGQgbmVlZCB0byAtLWZvcmNlIHRoZQorCQkgKiByZW1vdmFsLiAgSG93ZXZlciwgInJtIC0tY2FjaGVkIiAocmVtb3ZlIG9ubHkgZnJvbQorCQkgKiB0aGUgaW5kZXgpIGlzIHNhZmUgaWYgdGhlIGluZGV4IG1hdGNoZXMgdGhlIGZpbGUgaW4KKwkJICogdGhlIHdvcmsgdHJlZSBvciB0aGUgSEVBRCBjb21taXQsIGFzIGl0IG1lYW5zIHRoYXQKKwkJICogdGhlIGNvbnRlbnQgYmVpbmcgcmVtb3ZlZCBpcyBhdmFpbGFibGUgZWxzZXdoZXJlLgorCQkgKi8KKworCQkvKgorCQkgKiBJcyB0aGUgaW5kZXggZGlmZmVyZW50IGZyb20gdGhlIGZpbGUgaW4gdGhlIHdvcmsgdHJlZT8KKwkJICogSWYgaXQncyBhIHN1Ym1vZHVsZSwgaXMgaXRzIHdvcmsgdHJlZSBtb2RpZmllZD8KKwkJICovCisJCWlmIChjZV9tYXRjaF9zdGF0KGNlLCAmc3QsIDApIHx8CisJCSAgICAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpICYmCisJCSAgICAgYmFkX3RvX3JlbW92ZV9zdWJtb2R1bGUoY2UtPm5hbWUsCisJCQkJU1VCTU9EVUxFX1JFTU9WQUxfRElFX09OX0VSUk9SIHwKKwkJCQlTVUJNT0RVTEVfUkVNT1ZBTF9JR05PUkVfSUdOT1JFRF9VTlRSQUNLRUQpKSkKKwkJCWxvY2FsX2NoYW5nZXMgPSAxOworCisJCS8qCisJCSAqIElzIHRoZSBpbmRleCBkaWZmZXJlbnQgZnJvbSB0aGUgSEVBRCBjb21taXQ/ICBCeQorCQkgKiBkZWZpbml0aW9uLCBiZWZvcmUgdGhlIHZlcnkgaW5pdGlhbCBjb21taXQsCisJCSAqIGFueXRoaW5nIHN0YWdlZCBpbiB0aGUgaW5kZXggaXMgdHJlYXRlZCBieSB0aGUgc2FtZQorCQkgKiB3YXkgYXMgY2hhbmdlZCBmcm9tIHRoZSBIRUFELgorCQkgKi8KKwkJaWYgKG5vX2hlYWQKKwkJICAgICB8fCBnZXRfdHJlZV9lbnRyeSh0aGVfcmVwb3NpdG9yeSwgaGVhZCwgbmFtZSwgJm9pZCwgJm1vZGUpCisJCSAgICAgfHwgY2UtPmNlX21vZGUgIT0gY3JlYXRlX2NlX21vZGUobW9kZSkKKwkJICAgICB8fCAhb2lkZXEoJmNlLT5vaWQsICZvaWQpKQorCQkJc3RhZ2VkX2NoYW5nZXMgPSAxOworCisJCS8qCisJCSAqIElmIHRoZSBpbmRleCBkb2VzIG5vdCBtYXRjaCB0aGUgZmlsZSBpbiB0aGUgd29yaworCQkgKiB0cmVlIGFuZCBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUgSEVBRCBjb21taXQKKwkJICogZWl0aGVyLCAoMSkgImdpdCBybSIgd2l0aG91dCAtLWNhY2hlZCBkZWZpbml0ZWx5CisJCSAqIHdpbGwgbG9zZSBpbmZvcm1hdGlvbjsgKDIpICJnaXQgcm0gLS1jYWNoZWQiIHdpbGwKKwkJICogbG9zZSBpbmZvcm1hdGlvbiB1bmxlc3MgaXQgaXMgYWJvdXQgcmVtb3ZpbmcgYW4KKwkJICogImludGVudCB0byBhZGQiIGVudHJ5LgorCQkgKi8KKwkJaWYgKGxvY2FsX2NoYW5nZXMgJiYgc3RhZ2VkX2NoYW5nZXMpIHsKKwkJCWlmICghaW5kZXhfb25seSB8fCAhY2VfaW50ZW50X3RvX2FkZChjZSkpCisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZmaWxlc19zdGFnZWQsIG5hbWUpOworCQl9CisJCWVsc2UgaWYgKCFpbmRleF9vbmx5KSB7CisJCQlpZiAoc3RhZ2VkX2NoYW5nZXMpCisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZmaWxlc19jYWNoZWQsIG5hbWUpOworCQkJaWYgKGxvY2FsX2NoYW5nZXMpCisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZmaWxlc19sb2NhbCwgbmFtZSk7CisJCX0KKwl9CisJcHJpbnRfZXJyb3JfZmlsZXMoJmZpbGVzX3N0YWdlZCwKKwkJCSAgUV8oInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50ICIKKwkJCSAgICAgImZyb20gYm90aCB0aGVcbmZpbGUgYW5kIHRoZSBIRUFEOiIsCisJCQkgICAgICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IgorCQkJICAgICAiIGZyb20gYm90aCB0aGVcbmZpbGUgYW5kIHRoZSBIRUFEOiIsCisJCQkgICAgIGZpbGVzX3N0YWdlZC5uciksCisJCQkgIF8oIlxuKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIpLAorCQkJICAmZXJycyk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmZpbGVzX3N0YWdlZCwgMCk7CisJcHJpbnRfZXJyb3JfZmlsZXMoJmZpbGVzX2NhY2hlZCwKKwkJCSAgUV8oInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyAiCisJCQkgICAgICJzdGFnZWQgaW4gdGhlIGluZGV4OiIsCisJCQkgICAgICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgY2hhbmdlcyAiCisJCQkgICAgICJzdGFnZWQgaW4gdGhlIGluZGV4OiIsIGZpbGVzX2NhY2hlZC5uciksCisJCQkgIF8oIlxuKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCIKKwkJCSAgICAiIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIiksCisJCQkgICZlcnJzKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZmlsZXNfY2FjaGVkLCAwKTsKKworCXByaW50X2Vycm9yX2ZpbGVzKCZmaWxlc19sb2NhbCwKKwkJCSAgUV8oInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoiLAorCQkJICAgICAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IiwKKwkJCSAgICAgZmlsZXNfbG9jYWwubnIpLAorCQkJICBfKCJcbih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwiCisJCQkgICAgIiBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIpLAorCQkJICAmZXJycyk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmZpbGVzX2xvY2FsLCAwKTsKKworCXJldHVybiBlcnJzOworfQorCitzdGF0aWMgaW50IHNob3dfb25seSA9IDAsIGZvcmNlID0gMCwgaW5kZXhfb25seSA9IDAsIHJlY3Vyc2l2ZSA9IDAsIHF1aWV0ID0gMDsKK3N0YXRpYyBpbnQgaWdub3JlX3VubWF0Y2ggPSAwLCBwYXRoc3BlY19maWxlX251bDsKK3N0YXRpYyBjaGFyICpwYXRoc3BlY19mcm9tX2ZpbGU7CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fcm1fb3B0aW9uc1tdID0geworCU9QVF9fRFJZX1JVTigmc2hvd19vbmx5LCBOXygiZHJ5IHJ1biIpKSwKKwlPUFRfX1FVSUVUKCZxdWlldCwgTl8oImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiKSksCisJT1BUX0JPT0woIDAgLCAiY2FjaGVkIiwgICAgICAgICAmaW5kZXhfb25seSwgTl8oIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IikpLAorCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygib3ZlcnJpZGUgdGhlIHVwLXRvLWRhdGUgY2hlY2siKSwgUEFSU0VfT1BUX05PQ09NUExFVEUpLAorCU9QVF9CT09MKCdyJywgTlVMTCwgICAgICAgICAgICAgJnJlY3Vyc2l2ZSwgIE5fKCJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIpKSwKKwlPUFRfQk9PTCggMCAsICJpZ25vcmUtdW5tYXRjaCIsICZpZ25vcmVfdW5tYXRjaCwKKwkJCQlOXygiZXhpdCB3aXRoIGEgemVybyBzdGF0dXMgZXZlbiBpZiBub3RoaW5nIG1hdGNoZWQiKSksCisJT1BUX1BBVEhTUEVDX0ZST01fRklMRSgmcGF0aHNwZWNfZnJvbV9maWxlKSwKKwlPUFRfUEFUSFNQRUNfRklMRV9OVUwoJnBhdGhzcGVjX2ZpbGVfbnVsKSwKKwlPUFRfRU5EKCksCit9OworCitpbnQgY21kX3JtKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlID0gTE9DS19JTklUOworCWludCBpOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwljaGFyICpzZWVuOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX3JtX29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fcm1fdXNhZ2UsIDApOworCisJcGFyc2VfcGF0aHNwZWMoJnBhdGhzcGVjLCAwLAorCQkgICAgICAgUEFUSFNQRUNfUFJFRkVSX0NXRCwKKwkJICAgICAgIHByZWZpeCwgYXJndik7CisKKwlpZiAocGF0aHNwZWNfZnJvbV9maWxlKSB7CisJCWlmIChwYXRoc3BlYy5ucikKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiKSk7CisKKwkJcGFyc2VfcGF0aHNwZWNfZmlsZSgmcGF0aHNwZWMsIDAsCisJCQkJICAgIFBBVEhTUEVDX1BSRUZFUl9DV0QsCisJCQkJICAgIHByZWZpeCwgcGF0aHNwZWNfZnJvbV9maWxlLCBwYXRoc3BlY19maWxlX251bCk7CisJfSBlbHNlIGlmIChwYXRoc3BlY19maWxlX251bCkgeworCQlkaWUoXygiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIpKTsKKwl9CisKKwlpZiAoIXBhdGhzcGVjLm5yKQorCQlkaWUoXygiTm8gcGF0aHNwZWMgd2FzIGdpdmVuLiBXaGljaCBmaWxlcyBzaG91bGQgSSByZW1vdmU/IikpOworCisJaWYgKCFpbmRleF9vbmx5KQorCQlzZXR1cF93b3JrX3RyZWUoKTsKKworCWhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIExPQ0tfRElFX09OX0VSUk9SKTsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCBSRUZSRVNIX1FVSUVUfFJFRlJFU0hfVU5NRVJHRUQsICZwYXRoc3BlYywgTlVMTCwgTlVMTCk7CisKKwlzZWVuID0geGNhbGxvYyhwYXRoc3BlYy5uciwgMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJaWYgKCFjZV9wYXRoX21hdGNoKCZ0aGVfaW5kZXgsIGNlLCAmcGF0aHNwZWMsIHNlZW4pKQorCQkJY29udGludWU7CisJCUFMTE9DX0dST1cobGlzdC5lbnRyeSwgbGlzdC5uciArIDEsIGxpc3QuYWxsb2MpOworCQlsaXN0LmVudHJ5W2xpc3QubnJdLm5hbWUgPSB4c3RyZHVwKGNlLT5uYW1lKTsKKwkJbGlzdC5lbnRyeVtsaXN0Lm5yXS5pc19zdWJtb2R1bGUgPSBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSk7CisJCWlmIChsaXN0LmVudHJ5W2xpc3QubnIrK10uaXNfc3VibW9kdWxlICYmCisJCSAgICAhaXNfc3RhZ2luZ19naXRtb2R1bGVzX29rKCZ0aGVfaW5kZXgpKQorCQkJZGllKF8oInBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIikpOworCX0KKworCWlmIChwYXRoc3BlYy5ucikgeworCQljb25zdCBjaGFyICpvcmlnaW5hbDsKKwkJaW50IHNlZW5fYW55ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IHBhdGhzcGVjLm5yOyBpKyspIHsKKwkJCW9yaWdpbmFsID0gcGF0aHNwZWMuaXRlbXNbaV0ub3JpZ2luYWw7CisJCQlpZiAoIXNlZW5baV0pIHsKKwkJCQlpZiAoIWlnbm9yZV91bm1hdGNoKSB7CisJCQkJCWRpZShfKCJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIiksCisJCQkJCSAgICBvcmlnaW5hbCk7CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc2Vlbl9hbnkgPSAxOworCQkJfQorCQkJaWYgKCFyZWN1cnNpdmUgJiYgc2VlbltpXSA9PSBNQVRDSEVEX1JFQ1VSU0lWRUxZKQorCQkJCWRpZShfKCJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIiksCisJCQkJICAgICpvcmlnaW5hbCA/IG9yaWdpbmFsIDogIi4iKTsKKwkJfQorCisJCWlmICghc2Vlbl9hbnkpCisJCQlleGl0KDApOworCX0KKworCWlmICghaW5kZXhfb25seSkKKwkJc3VibW9kdWxlc19hYnNvcmJfZ2l0ZGlyX2lmX25lZWRlZCgpOworCisJLyoKKwkgKiBJZiBub3QgZm9yY2VkLCB0aGUgZmlsZSwgdGhlIGluZGV4IGFuZCB0aGUgSEVBRCAoaWYgZXhpc3RzKQorCSAqIG11c3QgbWF0Y2g7IGJ1dCB0aGUgZmlsZSBjYW4gYWxyZWFkeSBiZWVuIHJlbW92ZWQsIHNpbmNlCisJICogdGhpcyBzZXF1ZW5jZSBpcyBhIG5hdHVyYWwgIm5vdmljZSIgd2F5OgorCSAqCisJICoJcm0gRjsgZ2l0IHJtIEYKKwkgKgorCSAqIEZ1cnRoZXIsIGlmIEhFQUQgY29tbWl0IGV4aXN0cywgImRpZmYtaW5kZXggLS1jYWNoZWQiIG11c3QKKwkgKiByZXBvcnQgbm8gY2hhbmdlcyB1bmxlc3MgZm9yY2VkLgorCSAqLworCWlmICghZm9yY2UpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWlmIChnZXRfb2lkKCJIRUFEIiwgJm9pZCkpCisJCQlvaWRjbHIoJm9pZCk7CisJCWlmIChjaGVja19sb2NhbF9tb2QoJm9pZCwgaW5kZXhfb25seSkpCisJCQlleGl0KDEpOworCX0KKworCS8qCisJICogRmlyc3QgcmVtb3ZlIHRoZSBuYW1lcyBmcm9tIHRoZSBpbmRleDogd2Ugd29uJ3QgY29tbWl0CisJICogdGhlIGluZGV4IHVubGVzcyBhbGwgb2YgdGhlbSBzdWNjZWVkLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aCA9IGxpc3QuZW50cnlbaV0ubmFtZTsKKwkJaWYgKCFxdWlldCkKKwkJCXByaW50Zigicm0gJyVzJ1xuIiwgcGF0aCk7CisKKwkJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCkpCisJCQlkaWUoXygiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIiksIHBhdGgpOworCX0KKworCWlmIChzaG93X29ubHkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBUaGVuLCB1bmxlc3Mgd2UgdXNlZCAiLS1jYWNoZWQiLCByZW1vdmUgdGhlIGZpbGVuYW1lcyBmcm9tCisJICogdGhlIHdvcmtzcGFjZS4gSWYgd2UgZmFpbCB0byByZW1vdmUgdGhlIGZpcnN0IG9uZSwgd2UKKwkgKiBhYm9ydCB0aGUgImdpdCBybSIgKGJ1dCBvbmNlIHdlJ3ZlIHN1Y2Nlc3NmdWxseSByZW1vdmVkCisJICogYW55IGZpbGUgYXQgYWxsLCB3ZSdsbCBnbyBhaGVhZCBhbmQgY29tbWl0IHRvIGl0IGFsbDoKKwkgKiBieSB0aGVuIHdlJ3ZlIGFscmVhZHkgY29tbWl0dGVkIG91cnNlbHZlcyBhbmQgY2FuJ3QgZmFpbAorCSAqIGluIHRoZSBtaWRkbGUpCisJICovCisJaWYgKCFpbmRleF9vbmx5KSB7CisJCWludCByZW1vdmVkID0gMCwgZ2l0bW9kdWxlc19tb2RpZmllZCA9IDA7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKKwkJCWNvbnN0IGNoYXIgKnBhdGggPSBsaXN0LmVudHJ5W2ldLm5hbWU7CisJCQlpZiAobGlzdC5lbnRyeVtpXS5pc19zdWJtb2R1bGUpIHsKKwkJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBwYXRoKTsKKwkJCQlpZiAocmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmYnVmLCAwKSkKKwkJCQkJZGllKF8oImNvdWxkIG5vdCByZW1vdmUgJyVzJyIpLCBwYXRoKTsKKworCQkJCXJlbW92ZWQgPSAxOworCQkJCWlmICghcmVtb3ZlX3BhdGhfZnJvbV9naXRtb2R1bGVzKHBhdGgpKQorCQkJCQlnaXRtb2R1bGVzX21vZGlmaWVkID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghcmVtb3ZlX3BhdGgocGF0aCkpIHsKKwkJCQlyZW1vdmVkID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghcmVtb3ZlZCkKKwkJCQlkaWVfZXJybm8oImdpdCBybTogJyVzJyIsIHBhdGgpOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlpZiAoZ2l0bW9kdWxlc19tb2RpZmllZCkKKwkJCXN0YWdlX3VwZGF0ZWRfZ2l0bW9kdWxlcygmdGhlX2luZGV4KTsKKwl9CisKKwlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZsb2NrX2ZpbGUsCisJCQkgICAgICAgQ09NTUlUX0xPQ0sgfCBTS0lQX0lGX1VOQ0hBTkdFRCkpCisJCWRpZShfKCJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vc2VuZC1wYWNrLmMgYi9idWlsdGluL3NlbmQtcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTYxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3NlbmQtcGFjay5jCkBAIC0wLDAgKzEsMzA5IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic2VuZC1wYWNrLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAib2lkLWFycmF5LmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImdldHRleHQuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNlbmRfcGFja191c2FnZVtdID0geworCU5fKCJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gIgorCSAgIlstLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gIgorCSAgIls8aG9zdD46XTxkaXJlY3Rvcnk+IFs8cmVmPi4uLl1cbiIKKwkgICIgIC0tYWxsIGFuZCBleHBsaWNpdCA8cmVmPiBzcGVjaWZpY2F0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIiksCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgYXJnczsKKworc3RhdGljIHZvaWQgcHJpbnRfaGVscGVyX3N0YXR1cyhzdHJ1Y3QgcmVmICpyZWYpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQljb25zdCBjaGFyICptc2cgPSBOVUxMOworCQljb25zdCBjaGFyICpyZXM7CisKKwkJc3dpdGNoKHJlZi0+c3RhdHVzKSB7CisJCWNhc2UgUkVGX1NUQVRVU19OT05FOgorCQkJcmVzID0gImVycm9yIjsKKwkJCW1zZyA9ICJubyBtYXRjaCI7CisJCQlicmVhazsKKworCQljYXNlIFJFRl9TVEFUVVNfT0s6CisJCQlyZXMgPSAib2siOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgorCQkJcmVzID0gIm9rIjsKKwkJCW1zZyA9ICJ1cCB0byBkYXRlIjsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQ6CisJCQlyZXMgPSAiZXJyb3IiOworCQkJbXNnID0gIm5vbi1mYXN0IGZvcndhcmQiOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9GRVRDSF9GSVJTVDoKKwkJCXJlcyA9ICJlcnJvciI7CisJCQltc2cgPSAiZmV0Y2ggZmlyc3QiOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9ORUVEU19GT1JDRToKKwkJCXJlcyA9ICJlcnJvciI7CisJCQltc2cgPSAibmVlZHMgZm9yY2UiOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9TVEFMRToKKwkJCXJlcyA9ICJlcnJvciI7CisJCQltc2cgPSAic3RhbGUgaW5mbyI7CisJCQlicmVhazsKKworCQljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX0FMUkVBRFlfRVhJU1RTOgorCQkJcmVzID0gImVycm9yIjsKKwkJCW1zZyA9ICJhbHJlYWR5IGV4aXN0cyI7CisJCQlicmVhazsKKworCQljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05PREVMRVRFOgorCQljYXNlIFJFRl9TVEFUVVNfUkVNT1RFX1JFSkVDVDoKKwkJCXJlcyA9ICJlcnJvciI7CisJCQlicmVhazsKKworCQljYXNlIFJFRl9TVEFUVVNfRVhQRUNUSU5HX1JFUE9SVDoKKwkJZGVmYXVsdDoKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkZigmYnVmLCAiJXMgJXMiLCByZXMsIHJlZi0+bmFtZSk7CisJCWlmIChyZWYtPnJlbW90ZV9zdGF0dXMpCisJCQltc2cgPSByZWYtPnJlbW90ZV9zdGF0dXM7CisJCWlmIChtc2cpIHsKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnICcpOworCQkJcXVvdGVfdHdvX2Nfc3R5bGUoJmJ1ZiwgIiIsIG1zZywgMCk7CisJCX0KKwkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCisJCXdyaXRlX29yX2RpZSgxLCBidWYuYnVmLCBidWYubGVuKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgc2VuZF9wYWNrX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlnaXRfZ3BnX2NvbmZpZyhrLCB2LCBOVUxMKTsKKworCWlmICghc3RyY21wKGssICJwdXNoLmdwZ3NpZ24iKSkgeworCQljb25zdCBjaGFyICp2YWx1ZTsKKwkJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSgicHVzaC5ncGdzaWduIiwgJnZhbHVlKSkgeworCQkJc3dpdGNoIChnaXRfcGFyc2VfbWF5YmVfYm9vbCh2YWx1ZSkpIHsKKwkJCWNhc2UgMDoKKwkJCQlhcmdzLnB1c2hfY2VydCA9IFNFTkRfUEFDS19QVVNIX0NFUlRfTkVWRVI7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJYXJncy5wdXNoX2NlcnQgPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0FMV0FZUzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHZhbHVlICYmICFzdHJjYXNlY21wKHZhbHVlLCAiaWYtYXNrZWQiKSkKKwkJCQkJYXJncy5wdXNoX2NlcnQgPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0lGX0FTS0VEOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIGVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciAnJXMnIiwgayk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyhrLCB2LCBjYik7Cit9CisKK2ludCBjbWRfc2VuZF9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZWZzcGVjIHJzID0gUkVGU1BFQ19JTklUX1BVU0g7CisJY29uc3QgY2hhciAqcmVtb3RlX25hbWUgPSBOVUxMOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZSA9IE5VTEw7CisJY29uc3QgY2hhciAqZGVzdCA9IE5VTEw7CisJaW50IGZkWzJdOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uOworCXN0cnVjdCBvaWRfYXJyYXkgZXh0cmFfaGF2ZSA9IE9JRF9BUlJBWV9JTklUOworCXN0cnVjdCBvaWRfYXJyYXkgc2hhbGxvdyA9IE9JRF9BUlJBWV9JTklUOworCXN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCAqbG9jYWxfcmVmczsKKwlpbnQgcmV0OworCWludCBoZWxwZXJfc3RhdHVzID0gMDsKKwlpbnQgc2VuZF9hbGwgPSAwOworCWludCB2ZXJib3NlID0gMDsKKwljb25zdCBjaGFyICpyZWNlaXZlcGFjayA9ICJnaXQtcmVjZWl2ZS1wYWNrIjsKKwl1bnNpZ25lZCBkcnlfcnVuID0gMDsKKwl1bnNpZ25lZCBzZW5kX21pcnJvciA9IDA7CisJdW5zaWduZWQgZm9yY2VfdXBkYXRlID0gMDsKKwl1bnNpZ25lZCBxdWlldCA9IDA7CisJaW50IHB1c2hfY2VydCA9IDA7CisJc3RydWN0IHN0cmluZ19saXN0IHB1c2hfb3B0aW9ucyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJdW5zaWduZWQgdXNlX3RoaW5fcGFjayA9IDA7CisJdW5zaWduZWQgYXRvbWljID0gMDsKKwl1bnNpZ25lZCBzdGF0ZWxlc3NfcnBjID0gMDsKKwlpbnQgZmxhZ3M7CisJdW5zaWduZWQgaW50IHJlamVjdF9yZWFzb25zOworCWludCBwcm9ncmVzcyA9IC0xOworCWludCBmcm9tX3N0ZGluID0gMDsKKwlzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uIGNhcyA9IHswfTsKKwlzdHJ1Y3QgcGFja2V0X3JlYWRlciByZWFkZXI7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19WRVJCT1NJVFkoJnZlcmJvc2UpLAorCQlPUFRfU1RSSU5HKDAsICJyZWNlaXZlLXBhY2siLCAmcmVjZWl2ZXBhY2ssICJyZWNlaXZlLXBhY2siLCBOXygicmVjZWl2ZSBwYWNrIHByb2dyYW0iKSksCisJCU9QVF9TVFJJTkcoMCwgImV4ZWMiLCAmcmVjZWl2ZXBhY2ssICJyZWNlaXZlLXBhY2siLCBOXygicmVjZWl2ZSBwYWNrIHByb2dyYW0iKSksCisJCU9QVF9TVFJJTkcoMCwgInJlbW90ZSIsICZyZW1vdGVfbmFtZSwgInJlbW90ZSIsIE5fKCJyZW1vdGUgbmFtZSIpKSwKKwkJT1BUX0JPT0woMCwgImFsbCIsICZzZW5kX2FsbCwgTl8oInB1c2ggYWxsIHJlZnMiKSksCisJCU9QVF9CT09MKCduJyAsICJkcnktcnVuIiwgJmRyeV9ydW4sIE5fKCJkcnkgcnVuIikpLAorCQlPUFRfQk9PTCgwLCAibWlycm9yIiwgJnNlbmRfbWlycm9yLCBOXygibWlycm9yIGFsbCByZWZzIikpLAorCQlPUFRfQk9PTCgnZicsICJmb3JjZSIsICZmb3JjZV91cGRhdGUsIE5fKCJmb3JjZSB1cGRhdGVzIikpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAic2lnbmVkIiwgJnB1c2hfY2VydCwgIih5ZXN8bm98aWYtYXNrZWQpIiwgTl8oIkdQRyBzaWduIHRoZSBwdXNoIiksCisJCSAgUEFSU0VfT1BUX09QVEFSRywgb3B0aW9uX3BhcnNlX3B1c2hfc2lnbmVkKSwKKwkJT1BUX1NUUklOR19MSVNUKDAsICJwdXNoLW9wdGlvbiIsICZwdXNoX29wdGlvbnMsCisJCQkJTl8oInNlcnZlci1zcGVjaWZpYyIpLAorCQkJCU5fKCJvcHRpb24gdG8gdHJhbnNtaXQiKSksCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZwcm9ncmVzcywgTl8oImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIpKSwKKwkJT1BUX0JPT0woMCwgInRoaW4iLCAmdXNlX3RoaW5fcGFjaywgTl8oInVzZSB0aGluIHBhY2siKSksCisJCU9QVF9CT09MKDAsICJhdG9taWMiLCAmYXRvbWljLCBOXygicmVxdWVzdCBhdG9taWMgdHJhbnNhY3Rpb24gb24gcmVtb3RlIHNpZGUiKSksCisJCU9QVF9CT09MKDAsICJzdGF0ZWxlc3MtcnBjIiwgJnN0YXRlbGVzc19ycGMsIE5fKCJ1c2Ugc3RhdGVsZXNzIFJQQyBwcm90b2NvbCIpKSwKKwkJT1BUX0JPT0woMCwgInN0ZGluIiwgJmZyb21fc3RkaW4sIE5fKCJyZWFkIHJlZnMgZnJvbSBzdGRpbiIpKSwKKwkJT1BUX0JPT0woMCwgImhlbHBlci1zdGF0dXMiLCAmaGVscGVyX3N0YXR1cywgTl8oInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiKSksCisJCU9QVF9DQUxMQkFDS19GKDAsIENBU19PUFRfTkFNRSwgJmNhcywgTl8oIjxyZWZuYW1lPjo8ZXhwZWN0PiIpLAorCQkgIE5fKCJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIpLAorCQkgIFBBUlNFX09QVF9PUFRBUkcsIHBhcnNlb3B0X3B1c2hfY2FzX29wdGlvbiksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKHNlbmRfcGFja19jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgc2VuZF9wYWNrX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyA+IDApIHsKKwkJZGVzdCA9IGFyZ3ZbMF07CisJCXJlZnNwZWNfYXBwZW5kbigmcnMsIGFyZ3YgKyAxLCBhcmdjIC0gMSk7CisJfQorCisJaWYgKCFkZXN0KQorCQl1c2FnZV93aXRoX29wdGlvbnMoc2VuZF9wYWNrX3VzYWdlLCBvcHRpb25zKTsKKworCWFyZ3MudmVyYm9zZSA9IHZlcmJvc2U7CisJYXJncy5kcnlfcnVuID0gZHJ5X3J1bjsKKwlhcmdzLnNlbmRfbWlycm9yID0gc2VuZF9taXJyb3I7CisJYXJncy5mb3JjZV91cGRhdGUgPSBmb3JjZV91cGRhdGU7CisJYXJncy5xdWlldCA9IHF1aWV0OworCWFyZ3MucHVzaF9jZXJ0ID0gcHVzaF9jZXJ0OworCWFyZ3MucHJvZ3Jlc3MgPSBwcm9ncmVzczsKKwlhcmdzLnVzZV90aGluX3BhY2sgPSB1c2VfdGhpbl9wYWNrOworCWFyZ3MuYXRvbWljID0gYXRvbWljOworCWFyZ3Muc3RhdGVsZXNzX3JwYyA9IHN0YXRlbGVzc19ycGM7CisJYXJncy5wdXNoX29wdGlvbnMgPSBwdXNoX29wdGlvbnMubnIgPyAmcHVzaF9vcHRpb25zIDogTlVMTDsKKworCWlmIChmcm9tX3N0ZGluKSB7CisJCWlmIChhcmdzLnN0YXRlbGVzc19ycGMpIHsKKwkJCWNvbnN0IGNoYXIgKmJ1ZjsKKwkJCXdoaWxlICgoYnVmID0gcGFja2V0X3JlYWRfbGluZSgwLCBOVUxMKSkpCisJCQkJcmVmc3BlY19hcHBlbmQoJnJzLCBidWYpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJCQl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmxpbmUsIHN0ZGluKSAhPSBFT0YpCisJCQkJcmVmc3BlY19hcHBlbmQoJnJzLCBsaW5lLmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJCX0KKwl9CisKKwkvKgorCSAqIC0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlOyBuZWl0aGVyIG1ha2VzIHNlbnNlCisJICogd2l0aCBhbnkgcmVmc3BlY3MuCisJICovCisJaWYgKChycy5uciA+IDAgJiYgKHNlbmRfYWxsIHx8IGFyZ3Muc2VuZF9taXJyb3IpKSB8fAorCSAgICAoc2VuZF9hbGwgJiYgYXJncy5zZW5kX21pcnJvcikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhzZW5kX3BhY2tfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKHJlbW90ZV9uYW1lKSB7CisJCXJlbW90ZSA9IHJlbW90ZV9nZXQocmVtb3RlX25hbWUpOworCQlpZiAoIXJlbW90ZV9oYXNfdXJsKHJlbW90ZSwgZGVzdCkpIHsKKwkJCWRpZSgiRGVzdGluYXRpb24gJXMgaXMgbm90IGEgdXJpIGZvciAlcyIsCisJCQkgICAgZGVzdCwgcmVtb3RlX25hbWUpOworCQl9CisJfQorCisJaWYgKHByb2dyZXNzID09IC0xKQorCQlwcm9ncmVzcyA9ICFhcmdzLnF1aWV0ICYmIGlzYXR0eSgyKTsKKwlhcmdzLnByb2dyZXNzID0gcHJvZ3Jlc3M7CisKKwlpZiAoYXJncy5zdGF0ZWxlc3NfcnBjKSB7CisJCWNvbm4gPSBOVUxMOworCQlmZFswXSA9IDA7CisJCWZkWzFdID0gMTsKKwl9IGVsc2UgeworCQljb25uID0gZ2l0X2Nvbm5lY3QoZmQsIGRlc3QsIHJlY2VpdmVwYWNrLAorCQkJYXJncy52ZXJib3NlID8gQ09OTkVDVF9WRVJCT1NFIDogMCk7CisJfQorCisJcGFja2V0X3JlYWRlcl9pbml0KCZyZWFkZXIsIGZkWzBdLCBOVUxMLCAwLAorCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSB8CisJCQkgICBQQUNLRVRfUkVBRF9HRU5UTEVfT05fRU9GIHwKKwkJCSAgIFBBQ0tFVF9SRUFEX0RJRV9PTl9FUlJfUEFDS0VUKTsKKworCXN3aXRjaCAoZGlzY292ZXJfdmVyc2lvbigmcmVhZGVyKSkgeworCWNhc2UgcHJvdG9jb2xfdjI6CisJCWRpZSgic3VwcG9ydCBmb3IgcHJvdG9jb2wgdjIgbm90IGltcGxlbWVudGVkIHlldCIpOworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3YxOgorCWNhc2UgcHJvdG9jb2xfdjA6CisJCWdldF9yZW1vdGVfaGVhZHMoJnJlYWRlciwgJnJlbW90ZV9yZWZzLCBSRUZfTk9STUFMLAorCQkJCSAmZXh0cmFfaGF2ZSwgJnNoYWxsb3cpOworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3Vua25vd25fdmVyc2lvbjoKKwkJQlVHKCJ1bmtub3duIHByb3RvY29sIHZlcnNpb24iKTsKKwl9CisKKwlsb2NhbF9yZWZzID0gZ2V0X2xvY2FsX2hlYWRzKCk7CisKKwlmbGFncyA9IE1BVENIX1JFRlNfTk9ORTsKKworCWlmIChzZW5kX2FsbCkKKwkJZmxhZ3MgfD0gTUFUQ0hfUkVGU19BTEw7CisJaWYgKGFyZ3Muc2VuZF9taXJyb3IpCisJCWZsYWdzIHw9IE1BVENIX1JFRlNfTUlSUk9SOworCisJLyogbWF0Y2ggdGhlbSB1cCAqLworCWlmIChtYXRjaF9wdXNoX3JlZnMobG9jYWxfcmVmcywgJnJlbW90ZV9yZWZzLCAmcnMsIGZsYWdzKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFpc19lbXB0eV9jYXMoJmNhcykpCisJCWFwcGx5X3B1c2hfY2FzKCZjYXMsIHJlbW90ZSwgcmVtb3RlX3JlZnMpOworCisJc2V0X3JlZl9zdGF0dXNfZm9yX3B1c2gocmVtb3RlX3JlZnMsIGFyZ3Muc2VuZF9taXJyb3IsCisJCWFyZ3MuZm9yY2VfdXBkYXRlKTsKKworCXJldCA9IHNlbmRfcGFjaygmYXJncywgZmQsIGNvbm4sIHJlbW90ZV9yZWZzLCAmZXh0cmFfaGF2ZSk7CisKKwlpZiAoaGVscGVyX3N0YXR1cykKKwkJcHJpbnRfaGVscGVyX3N0YXR1cyhyZW1vdGVfcmVmcyk7CisKKwljbG9zZShmZFsxXSk7CisJY2xvc2UoZmRbMF0pOworCisJcmV0IHw9IGZpbmlzaF9jb25uZWN0KGNvbm4pOworCisJaWYgKCFoZWxwZXJfc3RhdHVzKQorCQl0cmFuc3BvcnRfcHJpbnRfcHVzaF9zdGF0dXMoZGVzdCwgcmVtb3RlX3JlZnMsIGFyZ3MudmVyYm9zZSwgMCwgJnJlamVjdF9yZWFzb25zKTsKKworCWlmICghYXJncy5kcnlfcnVuICYmIHJlbW90ZSkgeworCQlzdHJ1Y3QgcmVmICpyZWY7CisJCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQkJdHJhbnNwb3J0X3VwZGF0ZV90cmFja2luZ19yZWYocmVtb3RlLCByZWYsIGFyZ3MudmVyYm9zZSk7CisJfQorCisJaWYgKCFyZXQgJiYgIXRyYW5zcG9ydF9yZWZzX3B1c2hlZChyZW1vdGVfcmVmcykpCisJCWZwcmludGYoc3RkZXJyLCAiRXZlcnl0aGluZyB1cC10by1kYXRlXG4iKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Nob3J0bG9nLmMgYi9idWlsdGluL3Nob3J0bG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1NmM1OAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vc2hvcnRsb2cuYwpAQCAtMCwwICsxLDM3OSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgIm1haWxtYXAuaCIKKyNpbmNsdWRlICJzaG9ydGxvZy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBzaG9ydGxvZ191c2FnZVtdID0geworCU5fKCJnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iKSwKKwlOXygiZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSIpLAorCU5VTEwKK307CisKKy8qCisgKiBUaGUgdXRpbCBmaWVsZCBvZiBvdXIgc3RyaW5nX2xpc3RfaXRlbXMgd2lsbCBjb250YWluIG9uZSBvZiB0d28gdGhpbmdzOgorICoKKyAqICAgLSBpZiAtLXN1bW1hcnkgaXMgbm90IGluIHVzZSwgaXQgd2lsbCBwb2ludCB0byBhIHN0cmluZyBsaXN0IG9mIHRoZQorICogICAgIG9uZWxpbmUgc3ViamVjdHMgYXNzaWduZWQgdG8gdGhpcyBhdXRob3IKKyAqCisgKiAgIC0gaWYgLS1zdW1tYXJ5IGlzIGluIHVzZSwgd2UgZG9uJ3QgbmVlZCB0aGF0IGxpc3Q7IHdlIG9ubHkgbmVlZCB0byBrbm93CisgKiAgICAgaXRzIHNpemUuIFNvIHdlIGFidXNlIHRoZSBwb2ludGVyIHNsb3QgdG8gc3RvcmUgb3VyIGludGVnZXIgY291bnRlci4KKyAqCisgKiAgVGhpcyBtYWNybyBhY2Nlc3NlcyB0aGUgbGF0dGVyLgorICovCisjZGVmaW5lIFVUSUxfVE9fSU5UKHgpICgoaW50cHRyX3QpKHgpLT51dGlsKQorCitzdGF0aWMgaW50IGNvbXBhcmVfYnlfY291bnRlcihjb25zdCB2b2lkICphMSwgY29uc3Qgdm9pZCAqYTIpCit7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmkxID0gYTEsICppMiA9IGEyOworCXJldHVybiBVVElMX1RPX0lOVChpMikgLSBVVElMX1RPX0lOVChpMSk7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9ieV9saXN0KGNvbnN0IHZvaWQgKmExLCBjb25zdCB2b2lkICphMikKK3sKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaTEgPSBhMSwgKmkyID0gYTI7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsMSA9IGkxLT51dGlsLCAqbDIgPSBpMi0+dXRpbDsKKworCWlmIChsMS0+bnIgPCBsMi0+bnIpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGwxLT5uciA9PSBsMi0+bnIpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfb25lX3JlY29yZChzdHJ1Y3Qgc2hvcnRsb2cgKmxvZywKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmF1dGhvciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm9uZWxpbmUpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZsb2ctPmxpc3QsIGF1dGhvcik7CisKKwlpZiAobG9nLT5zdW1tYXJ5KQorCQlpdGVtLT51dGlsID0gKHZvaWQgKikoVVRJTF9UT19JTlQoaXRlbSkgKyAxKTsKKwllbHNlIHsKKwkJY29uc3QgY2hhciAqZG90MyA9IGxvZy0+Y29tbW9uX3JlcG9fcHJlZml4OworCQljaGFyICpidWZmZXIsICpwOworCQlzdHJ1Y3Qgc3RyYnVmIHN1YmplY3QgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqZW9sOworCisJCS8qIFNraXAgYW55IGxlYWRpbmcgd2hpdGVzcGFjZSwgaW5jbHVkaW5nIGFueSBibGFuayBsaW5lcy4gKi8KKwkJd2hpbGUgKCpvbmVsaW5lICYmIGlzc3BhY2UoKm9uZWxpbmUpKQorCQkJb25lbGluZSsrOworCQllb2wgPSBzdHJjaHIob25lbGluZSwgJ1xuJyk7CisJCWlmICghZW9sKQorCQkJZW9sID0gb25lbGluZSArIHN0cmxlbihvbmVsaW5lKTsKKwkJaWYgKHN0YXJ0c193aXRoKG9uZWxpbmUsICJbUEFUQ0giKSkgeworCQkJY2hhciAqZW9iID0gc3RyY2hyKG9uZWxpbmUsICddJyk7CisJCQlpZiAoZW9iICYmICghZW9sIHx8IGVvYiA8IGVvbCkpCisJCQkJb25lbGluZSA9IGVvYiArIDE7CisJCX0KKwkJd2hpbGUgKCpvbmVsaW5lICYmIGlzc3BhY2UoKm9uZWxpbmUpICYmICpvbmVsaW5lICE9ICdcbicpCisJCQlvbmVsaW5lKys7CisJCWZvcm1hdF9zdWJqZWN0KCZzdWJqZWN0LCBvbmVsaW5lLCAiICIpOworCQlidWZmZXIgPSBzdHJidWZfZGV0YWNoKCZzdWJqZWN0LCBOVUxMKTsKKworCQlpZiAoZG90MykgeworCQkJaW50IGRvdDNsZW4gPSBzdHJsZW4oZG90Myk7CisJCQlpZiAoZG90M2xlbiA+IDUpIHsKKwkJCQl3aGlsZSAoKHAgPSBzdHJzdHIoYnVmZmVyLCBkb3QzKSkgIT0gTlVMTCkgeworCQkJCQlpbnQgdGFpbGxlbiA9IHN0cmxlbihwKSAtIGRvdDNsZW47CisJCQkJCW1lbWNweShwLCAiLy4uLi8iLCA1KTsKKwkJCQkJbWVtbW92ZShwICsgNSwgcCArIGRvdDNsZW4sIHRhaWxsZW4gKyAxKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoaXRlbS0+dXRpbCA9PSBOVUxMKQorCQkJaXRlbS0+dXRpbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdCkpOworCQlzdHJpbmdfbGlzdF9hcHBlbmQoaXRlbS0+dXRpbCwgYnVmZmVyKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfc3RkaW5fYXV0aG9yKHN0cnVjdCBzaG9ydGxvZyAqbG9nLAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqaW4pCit7CisJY29uc3QgY2hhciAqbWFpbGJ1ZiwgKm5hbWVidWY7CisJc2l6ZV90IG5hbWVsZW4sIG1haWxsZW47CisJc3RydWN0IGlkZW50X3NwbGl0IGlkZW50OworCisJaWYgKHNwbGl0X2lkZW50X2xpbmUoJmlkZW50LCBpbiwgc3RybGVuKGluKSkpCisJCXJldHVybiAtMTsKKworCW5hbWVidWYgPSBpZGVudC5uYW1lX2JlZ2luOworCW1haWxidWYgPSBpZGVudC5tYWlsX2JlZ2luOworCW5hbWVsZW4gPSBpZGVudC5uYW1lX2VuZCAtIGlkZW50Lm5hbWVfYmVnaW47CisJbWFpbGxlbiA9IGlkZW50Lm1haWxfZW5kIC0gaWRlbnQubWFpbF9iZWdpbjsKKworCW1hcF91c2VyKCZsb2ctPm1haWxtYXAsICZtYWlsYnVmLCAmbWFpbGxlbiwgJm5hbWVidWYsICZuYW1lbGVuKTsKKwlzdHJidWZfYWRkKG91dCwgbmFtZWJ1ZiwgbmFtZWxlbik7CisJaWYgKGxvZy0+ZW1haWwpCisJCXN0cmJ1Zl9hZGRmKG91dCwgIiA8JS4qcz4iLCAoaW50KW1haWxsZW4sIG1haWxidWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfZnJvbV9zdGRpbihzdHJ1Y3Qgc2hvcnRsb2cgKmxvZykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGF1dGhvciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgbWFwcGVkX2F1dGhvciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgb25lbGluZSA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBjb25zdCBjaGFyICphdXRob3JfbWF0Y2hbMl0gPSB7ICJBdXRob3I6ICIsICJhdXRob3IgIiB9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb21taXR0ZXJfbWF0Y2hbMl0gPSB7ICJDb21taXQ6ICIsICJjb21taXR0ZXIgIiB9OworCWNvbnN0IGNoYXIgKiptYXRjaDsKKworCW1hdGNoID0gbG9nLT5jb21taXR0ZXIgPyBjb21taXR0ZXJfbWF0Y2ggOiBhdXRob3JfbWF0Y2g7CisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZhdXRob3IsIHN0ZGluKSAhPSBFT0YpIHsKKwkJY29uc3QgY2hhciAqdjsKKwkJaWYgKCFza2lwX3ByZWZpeChhdXRob3IuYnVmLCBtYXRjaFswXSwgJnYpICYmCisJCSAgICAhc2tpcF9wcmVmaXgoYXV0aG9yLmJ1ZiwgbWF0Y2hbMV0sICZ2KSkKKwkJCWNvbnRpbnVlOworCQl3aGlsZSAoc3RyYnVmX2dldGxpbmVfbGYoJm9uZWxpbmUsIHN0ZGluKSAhPSBFT0YgJiYKKwkJICAgICAgIG9uZWxpbmUubGVuKQorCQkJOyAvKiBkaXNjYXJkIGhlYWRlcnMgKi8KKwkJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZvbmVsaW5lLCBzdGRpbikgIT0gRU9GICYmCisJCSAgICAgICAhb25lbGluZS5sZW4pCisJCQk7IC8qIGRpc2NhcmQgYmxhbmtzICovCisKKwkJc3RyYnVmX3Jlc2V0KCZtYXBwZWRfYXV0aG9yKTsKKwkJaWYgKHBhcnNlX3N0ZGluX2F1dGhvcihsb2csICZtYXBwZWRfYXV0aG9yLCB2KSA8IDApCisJCQljb250aW51ZTsKKworCQlpbnNlcnRfb25lX3JlY29yZChsb2csIG1hcHBlZF9hdXRob3IuYnVmLCBvbmVsaW5lLmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZhdXRob3IpOworCXN0cmJ1Zl9yZWxlYXNlKCZtYXBwZWRfYXV0aG9yKTsKKwlzdHJidWZfcmVsZWFzZSgmb25lbGluZSk7Cit9CisKK3ZvaWQgc2hvcnRsb2dfYWRkX2NvbW1pdChzdHJ1Y3Qgc2hvcnRsb2cgKmxvZywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBzdHJidWYgYXV0aG9yID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBvbmVsaW5lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwljb25zdCBjaGFyICpmbXQ7CisKKwljdHguZm10ID0gQ01JVF9GTVRfVVNFUkZPUk1BVDsKKwljdHguYWJicmV2ID0gbG9nLT5hYmJyZXY7CisJY3R4LnByaW50X2VtYWlsX3N1YmplY3QgPSAxOworCWN0eC5kYXRlX21vZGUudHlwZSA9IERBVEVfTk9STUFMOworCWN0eC5vdXRwdXRfZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOworCisJZm10ID0gbG9nLT5jb21taXR0ZXIgPworCQkobG9nLT5lbWFpbCA/ICIlY04gPCVjRT4iIDogIiVjTiIpIDoKKwkJKGxvZy0+ZW1haWwgPyAiJWFOIDwlYUU+IiA6ICIlYU4iKTsKKworCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsIGZtdCwgJmF1dGhvciwgJmN0eCk7CisJaWYgKCFsb2ctPnN1bW1hcnkpIHsKKwkJaWYgKGxvZy0+dXNlcl9mb3JtYXQpCisJCQlwcmV0dHlfcHJpbnRfY29tbWl0KCZjdHgsIGNvbW1pdCwgJm9uZWxpbmUpOworCQllbHNlCisJCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJXMiLCAmb25lbGluZSwgJmN0eCk7CisJfQorCisJaW5zZXJ0X29uZV9yZWNvcmQobG9nLCBhdXRob3IuYnVmLCBvbmVsaW5lLmxlbiA/IG9uZWxpbmUuYnVmIDogIjxub25lPiIpOworCisJc3RyYnVmX3JlbGVhc2UoJmF1dGhvcik7CisJc3RyYnVmX3JlbGVhc2UoJm9uZWxpbmUpOworfQorCitzdGF0aWMgdm9pZCBnZXRfZnJvbV9yZXYoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBzaG9ydGxvZyAqbG9nKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsocmV2KSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKHJldikpICE9IE5VTEwpCisJCXNob3J0bG9nX2FkZF9jb21taXQobG9nLCBjb21taXQpOworfQorCitzdGF0aWMgaW50IHBhcnNlX3VpbnQoY2hhciBjb25zdCAqKmFyZywgaW50IGNvbW1hLCBpbnQgZGVmdmFsKQoreworCXVuc2lnbmVkIGxvbmcgdWw7CisJaW50IHJldDsKKwljaGFyICplbmRwOworCisJdWwgPSBzdHJ0b3VsKCphcmcsICZlbmRwLCAxMCk7CisJaWYgKCplbmRwICYmICplbmRwICE9IGNvbW1hKQorCQlyZXR1cm4gLTE7CisJaWYgKHVsID4gSU5UX01BWCkKKwkJcmV0dXJuIC0xOworCXJldCA9ICphcmcgPT0gZW5kcCA/IGRlZnZhbCA6IChpbnQpdWw7CisJKmFyZyA9ICplbmRwID8gZW5kcCArIDEgOiBlbmRwOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHdyYXBfYXJnX3VzYWdlW10gPSAiLXdbPHdpZHRoPlssPGluZGVudDE+Wyw8aW5kZW50Mj5dXV0iOworI2RlZmluZSBERUZBVUxUX1dSQVBMRU4gNzYKKyNkZWZpbmUgREVGQVVMVF9JTkRFTlQxIDYKKyNkZWZpbmUgREVGQVVMVF9JTkRFTlQyIDkKKworc3RhdGljIGludCBwYXJzZV93cmFwX2FyZ3MoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgc2hvcnRsb2cgKmxvZyA9IG9wdC0+dmFsdWU7CisKKwlsb2ctPndyYXBfbGluZXMgPSAhdW5zZXQ7CisJaWYgKHVuc2V0KQorCQlyZXR1cm4gMDsKKwlpZiAoIWFyZykgeworCQlsb2ctPndyYXAgPSBERUZBVUxUX1dSQVBMRU47CisJCWxvZy0+aW4xID0gREVGQVVMVF9JTkRFTlQxOworCQlsb2ctPmluMiA9IERFRkFVTFRfSU5ERU5UMjsKKwkJcmV0dXJuIDA7CisJfQorCisJbG9nLT53cmFwID0gcGFyc2VfdWludCgmYXJnLCAnLCcsIERFRkFVTFRfV1JBUExFTik7CisJbG9nLT5pbjEgPSBwYXJzZV91aW50KCZhcmcsICcsJywgREVGQVVMVF9JTkRFTlQxKTsKKwlsb2ctPmluMiA9IHBhcnNlX3VpbnQoJmFyZywgJ1wwJywgREVGQVVMVF9JTkRFTlQyKTsKKwlpZiAobG9nLT53cmFwIDwgMCB8fCBsb2ctPmluMSA8IDAgfHwgbG9nLT5pbjIgPCAwKQorCQlyZXR1cm4gZXJyb3Iod3JhcF9hcmdfdXNhZ2UpOworCWlmIChsb2ctPndyYXAgJiYKKwkgICAgKChsb2ctPmluMSAmJiBsb2ctPndyYXAgPD0gbG9nLT5pbjEpIHx8CisJICAgICAobG9nLT5pbjIgJiYgbG9nLT53cmFwIDw9IGxvZy0+aW4yKSkpCisJCXJldHVybiBlcnJvcih3cmFwX2FyZ191c2FnZSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2hvcnRsb2dfaW5pdChzdHJ1Y3Qgc2hvcnRsb2cgKmxvZykKK3sKKwltZW1zZXQobG9nLCAwLCBzaXplb2YoKmxvZykpOworCisJcmVhZF9tYWlsbWFwKCZsb2ctPm1haWxtYXAsICZsb2ctPmNvbW1vbl9yZXBvX3ByZWZpeCk7CisKKwlsb2ctPmxpc3Quc3RyZHVwX3N0cmluZ3MgPSAxOworCWxvZy0+d3JhcCA9IERFRkFVTFRfV1JBUExFTjsKKwlsb2ctPmluMSA9IERFRkFVTFRfSU5ERU5UMTsKKwlsb2ctPmluMiA9IERFRkFVTFRfSU5ERU5UMjsKK30KKworaW50IGNtZF9zaG9ydGxvZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc2hvcnRsb2cgbG9nID0geyBTVFJJTkdfTElTVF9JTklUX05PRFVQIH07CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlpbnQgbm9uZ2l0ID0gIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5OworCisJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdjJywgImNvbW1pdHRlciIsICZsb2cuY29tbWl0dGVyLAorCQkJIE5fKCJHcm91cCBieSBjb21taXR0ZXIgcmF0aGVyIHRoYW4gYXV0aG9yIikpLAorCQlPUFRfQk9PTCgnbicsICJudW1iZXJlZCIsICZsb2cuc29ydF9ieV9udW1iZXIsCisJCQkgTl8oInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIpKSwKKwkJT1BUX0JPT0woJ3MnLCAic3VtbWFyeSIsICZsb2cuc3VtbWFyeSwKKwkJCSBOXygiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiKSksCisJCU9QVF9CT09MKCdlJywgImVtYWlsIiwgJmxvZy5lbWFpbCwKKwkJCSBOXygiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIpKSwKKwkJT1BUX0NBTExCQUNLX0YoJ3cnLCBOVUxMLCAmbG9nLCBOXygiPHc+Wyw8aTE+Wyw8aTI+XV0iKSwKKwkJCU5fKCJMaW5ld3JhcCBvdXRwdXQiKSwgUEFSU0VfT1BUX09QVEFSRywKKwkJCSZwYXJzZV93cmFwX2FyZ3MpLAorCQlPUFRfRU5EKCksCisJfTsKKworCXN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgY3R4OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCXNob3J0bG9nX2luaXQoJmxvZyk7CisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldiwgcHJlZml4KTsKKwlwYXJzZV9vcHRpb25zX3N0YXJ0KCZjdHgsIGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCB8IFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKKworCWZvciAoOzspIHsKKwkJc3dpdGNoIChwYXJzZV9vcHRpb25zX3N0ZXAoJmN0eCwgb3B0aW9ucywgc2hvcnRsb2dfdXNhZ2UpKSB7CisJCWNhc2UgUEFSU0VfT1BUX0hFTFA6CisJCWNhc2UgUEFSU0VfT1BUX0VSUk9SOgorCQkJZXhpdCgxMjkpOworCQljYXNlIFBBUlNFX09QVF9DT01QTEVURToKKwkJCWV4aXQoMCk7CisJCWNhc2UgUEFSU0VfT1BUX0RPTkU6CisJCQlnb3RvIHBhcnNlX2RvbmU7CisJCX0KKwkJcGFyc2VfcmV2aXNpb25fb3B0KCZyZXYsICZjdHgsIG9wdGlvbnMsIHNob3J0bG9nX3VzYWdlKTsKKwl9CitwYXJzZV9kb25lOgorCWFyZ2MgPSBwYXJzZV9vcHRpb25zX2VuZCgmY3R4KTsKKworCWlmIChub25naXQgJiYgYXJnYyA+IDEpIHsKKwkJZXJyb3IoXygidG9vIG1hbnkgYXJndW1lbnRzIGdpdmVuIG91dHNpZGUgcmVwb3NpdG9yeSIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHNob3J0bG9nX3VzYWdlLCBvcHRpb25zKTsKKwl9CisKKwlpZiAoc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsIE5VTEwpICE9IDEpIHsKKwkJZXJyb3IoXygidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIpLCBhcmd2WzFdKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHNob3J0bG9nX3VzYWdlLCBvcHRpb25zKTsKKwl9CisKKwlsb2cudXNlcl9mb3JtYXQgPSByZXYuY29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9VU0VSRk9STUFUOworCWxvZy5hYmJyZXYgPSByZXYuYWJicmV2OworCWxvZy5maWxlID0gcmV2LmRpZmZvcHQuZmlsZTsKKworCS8qIGFzc3VtZSBIRUFEIGlmIGZyb20gYSB0dHkgKi8KKwlpZiAoIW5vbmdpdCAmJiAhcmV2LnBlbmRpbmcubnIgJiYgaXNhdHR5KDApKQorCQlhZGRfaGVhZF90b19wZW5kaW5nKCZyZXYpOworCWlmIChyZXYucGVuZGluZy5uciA9PSAwKSB7CisJCWlmIChpc2F0dHkoMCkpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIpKTsKKwkJcmVhZF9mcm9tX3N0ZGluKCZsb2cpOworCX0KKwllbHNlCisJCWdldF9mcm9tX3JldigmcmV2LCAmbG9nKTsKKworCXNob3J0bG9nX291dHB1dCgmbG9nKTsKKwlpZiAobG9nLmZpbGUgIT0gc3Rkb3V0KQorCQlmY2xvc2UobG9nLmZpbGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZGRfd3JhcHBlZF9zaG9ydGxvZ19tc2coc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnMsCisJCQkJICAgICBjb25zdCBzdHJ1Y3Qgc2hvcnRsb2cgKmxvZykKK3sKKwlzdHJidWZfYWRkX3dyYXBwZWRfdGV4dChzYiwgcywgbG9nLT5pbjEsIGxvZy0+aW4yLCBsb2ctPndyYXApOworCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7Cit9CisKK3ZvaWQgc2hvcnRsb2dfb3V0cHV0KHN0cnVjdCBzaG9ydGxvZyAqbG9nKQoreworCWludCBpLCBqOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmIChsb2ctPnNvcnRfYnlfbnVtYmVyKQorCQlRU09SVChsb2ctPmxpc3QuaXRlbXMsIGxvZy0+bGlzdC5uciwKKwkJICAgICAgbG9nLT5zdW1tYXJ5ID8gY29tcGFyZV9ieV9jb3VudGVyIDogY29tcGFyZV9ieV9saXN0KTsKKwlmb3IgKGkgPSAwOyBpIDwgbG9nLT5saXN0Lm5yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSAmbG9nLT5saXN0Lml0ZW1zW2ldOworCQlpZiAobG9nLT5zdW1tYXJ5KSB7CisJCQlmcHJpbnRmKGxvZy0+ZmlsZSwgIiU2ZFx0JXNcbiIsCisJCQkJKGludClVVElMX1RPX0lOVChpdGVtKSwgaXRlbS0+c3RyaW5nKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdCAqb25lbGluZXMgPSBpdGVtLT51dGlsOworCQkJZnByaW50Zihsb2ctPmZpbGUsICIlcyAoJWQpOlxuIiwKKwkJCQlpdGVtLT5zdHJpbmcsIG9uZWxpbmVzLT5ucik7CisJCQlmb3IgKGogPSBvbmVsaW5lcy0+bnIgLSAxOyBqID49IDA7IGotLSkgeworCQkJCWNvbnN0IGNoYXIgKm1zZyA9IG9uZWxpbmVzLT5pdGVtc1tqXS5zdHJpbmc7CisKKwkJCQlpZiAobG9nLT53cmFwX2xpbmVzKSB7CisJCQkJCXN0cmJ1Zl9yZXNldCgmc2IpOworCQkJCQlhZGRfd3JhcHBlZF9zaG9ydGxvZ19tc2coJnNiLCBtc2csIGxvZyk7CisJCQkJCWZ3cml0ZShzYi5idWYsIHNiLmxlbiwgMSwgbG9nLT5maWxlKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQlmcHJpbnRmKGxvZy0+ZmlsZSwgIiAgICAgICVzXG4iLCBtc2cpOworCQkJfQorCQkJcHV0YygnXG4nLCBsb2ctPmZpbGUpOworCQkJb25lbGluZXMtPnN0cmR1cF9zdHJpbmdzID0gMTsKKwkJCXN0cmluZ19saXN0X2NsZWFyKG9uZWxpbmVzLCAwKTsKKwkJCWZyZWUob25lbGluZXMpOworCQl9CisKKwkJbG9nLT5saXN0Lml0ZW1zW2ldLnV0aWwgPSBOVUxMOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJbG9nLT5saXN0LnN0cmR1cF9zdHJpbmdzID0gMTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmbG9nLT5saXN0LCAxKTsKKwljbGVhcl9tYWlsbWFwKCZsb2ctPm1haWxtYXApOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zaG93LWJyYW5jaC5jIGIvYnVpbHRpbi9zaG93LWJyYW5jaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNTJlZTkKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3Nob3ctYnJhbmNoLmMKQEAgLTAsMCArMSw5NTQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInByZXR0eS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImNvbW1pdC1zbGFiLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyKiBzaG93X2JyYW5jaF91c2FnZVtdID0geworICAgIE5fKCJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyAgICAgICAiCQlbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyAgICAgICAiCQlbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisgICAgICAgIgkJWy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIpLAorICAgIE5fKCJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iKSwKKyAgICBOVUxMCit9OworCitzdGF0aWMgaW50IHNob3dicmFuY2hfdXNlX2NvbG9yID0gLTE7CisKK3N0YXRpYyBzdHJ1Y3QgYXJndl9hcnJheSBkZWZhdWx0X2FyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKy8qCisgKiBUT0RPOiBjb252ZXJ0IHRoaXMgdXNlIG9mIGNvbW1pdC0+b2JqZWN0LmZsYWdzIHRvIGNvbW1pdC1zbGFiCisgKiBpbnN0ZWFkIHRvIHN0b3JlIGEgcG9pbnRlciB0byByZWYgbmFtZSBkaXJlY3RseS4gVGhlbiB1c2UgdGhlIHNhbWUKKyAqIFVOSU5URVJFU1RJTkcgZGVmaW5pdGlvbiBmcm9tIHJldmlzaW9uLmggaGVyZS4KKyAqLworI2RlZmluZSBVTklOVEVSRVNUSU5HCTAxCisKKyNkZWZpbmUgUkVWX1NISUZUCSAyCisjZGVmaW5lIE1BWF9SRVZTCShGTEFHX0JJVFMgLSBSRVZfU0hJRlQpIC8qIHNob3VsZCBub3QgZXhjZWVkIGJpdHNfcGVyX2ludCAtIFJFVl9TSElGVCAqLworCisjZGVmaW5lIERFRkFVTFRfUkVGTE9HCTQKKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcl9jb2RlKGludCBpZHgpCit7CisJaWYgKHdhbnRfY29sb3Ioc2hvd2JyYW5jaF91c2VfY29sb3IpKQorCQlyZXR1cm4gY29sdW1uX2NvbG9yc19hbnNpW2lkeCAlIGNvbHVtbl9jb2xvcnNfYW5zaV9tYXhdOworCXJldHVybiAiIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcl9yZXNldF9jb2RlKHZvaWQpCit7CisJaWYgKHdhbnRfY29sb3Ioc2hvd2JyYW5jaF91c2VfY29sb3IpKQorCQlyZXR1cm4gR0lUX0NPTE9SX1JFU0VUOworCXJldHVybiAiIjsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmludGVyZXN0aW5nKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gY29tbWl0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IGNvbW1pdF9uYW1lIHsKKwljb25zdCBjaGFyICpoZWFkX25hbWU7IC8qIHdoaWNoIGhlYWQncyBhbmNlc3Rvcj8gKi8KKwlpbnQgZ2VuZXJhdGlvbjsgLyogaG93IG1hbnkgcGFyZW50cyBhd2F5IGZyb20gaGVhZF9uYW1lICovCit9OworCitkZWZpbmVfY29tbWl0X3NsYWIoY29tbWl0X25hbWVfc2xhYiwgc3RydWN0IGNvbW1pdF9uYW1lICopOworc3RhdGljIHN0cnVjdCBjb21taXRfbmFtZV9zbGFiIG5hbWVfc2xhYjsKKworc3RhdGljIHN0cnVjdCBjb21taXRfbmFtZSAqY29tbWl0X3RvX25hbWUoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXJldHVybiAqY29tbWl0X25hbWVfc2xhYl9hdCgmbmFtZV9zbGFiLCBjb21taXQpOworfQorCisKKy8qIE5hbWUgdGhlIGNvbW1pdCBhcyBudGggZ2VuZXJhdGlvbiBhbmNlc3RvciBvZiBoZWFkX25hbWU7CisgKiB3ZSBjb3VudCBvbmx5IHRoZSBmaXJzdC1wYXJlbnQgcmVsYXRpb25zaGlwIGZvciBuYW1pbmcgcHVycG9zZXMuCisgKi8KK3N0YXRpYyB2b2lkIG5hbWVfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgY29uc3QgY2hhciAqaGVhZF9uYW1lLCBpbnQgbnRoKQoreworCXN0cnVjdCBjb21taXRfbmFtZSAqbmFtZTsKKworCW5hbWUgPSAqY29tbWl0X25hbWVfc2xhYl9hdCgmbmFtZV9zbGFiLCBjb21taXQpOworCWlmICghbmFtZSkgeworCQluYW1lID0geG1hbGxvYyhzaXplb2YoKm5hbWUpKTsKKwkJKmNvbW1pdF9uYW1lX3NsYWJfYXQoJm5hbWVfc2xhYiwgY29tbWl0KSA9IG5hbWU7CisJfQorCW5hbWUtPmhlYWRfbmFtZSA9IGhlYWRfbmFtZTsKKwluYW1lLT5nZW5lcmF0aW9uID0gbnRoOworfQorCisvKiBQYXJlbnQgaXMgdGhlIGZpcnN0IHBhcmVudCBvZiB0aGUgY29tbWl0LiAgV2UgbWF5IG5hbWUgaXQKKyAqIGFzIChuKzEpdGggZ2VuZXJhdGlvbiBhbmNlc3RvciBvZiB0aGUgc2FtZSBoZWFkX25hbWUgYXMKKyAqIGNvbW1pdCBpcyBudGggZ2VuZXJhdGlvbiBhbmNlc3RvciBvZiwgaWYgdGhhdCBnZW5lcmF0aW9uCisgKiBudW1iZXIgaXMgYmV0dGVyIHRoYW4gdGhlIG5hbWUgaXQgYWxyZWFkeSBoYXMuCisgKi8KK3N0YXRpYyB2b2lkIG5hbWVfcGFyZW50KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdCAqcGFyZW50KQoreworCXN0cnVjdCBjb21taXRfbmFtZSAqY29tbWl0X25hbWUgPSBjb21taXRfdG9fbmFtZShjb21taXQpOworCXN0cnVjdCBjb21taXRfbmFtZSAqcGFyZW50X25hbWUgPSBjb21taXRfdG9fbmFtZShwYXJlbnQpOworCWlmICghY29tbWl0X25hbWUpCisJCXJldHVybjsKKwlpZiAoIXBhcmVudF9uYW1lIHx8CisJICAgIGNvbW1pdF9uYW1lLT5nZW5lcmF0aW9uICsgMSA8IHBhcmVudF9uYW1lLT5nZW5lcmF0aW9uKQorCQluYW1lX2NvbW1pdChwYXJlbnQsIGNvbW1pdF9uYW1lLT5oZWFkX25hbWUsCisJCQkgICAgY29tbWl0X25hbWUtPmdlbmVyYXRpb24gKyAxKTsKK30KKworc3RhdGljIGludCBuYW1lX2ZpcnN0X3BhcmVudF9jaGFpbihzdHJ1Y3QgY29tbWl0ICpjKQoreworCWludCBpID0gMDsKKwl3aGlsZSAoYykgeworCQlzdHJ1Y3QgY29tbWl0ICpwOworCQlpZiAoIWNvbW1pdF90b19uYW1lKGMpKQorCQkJYnJlYWs7CisJCWlmICghYy0+cGFyZW50cykKKwkJCWJyZWFrOworCQlwID0gYy0+cGFyZW50cy0+aXRlbTsKKwkJaWYgKCFjb21taXRfdG9fbmFtZShwKSkgeworCQkJbmFtZV9wYXJlbnQoYywgcCk7CisJCQlpKys7CisJCX0KKwkJZWxzZQorCQkJYnJlYWs7CisJCWMgPSBwOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHZvaWQgbmFtZV9jb21taXRzKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKKwkJCSBzdHJ1Y3QgY29tbWl0ICoqcmV2LAorCQkJIGNoYXIgKipyZWZfbmFtZSwKKwkJCSBpbnQgbnVtX3JldikKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNsOworCXN0cnVjdCBjb21taXQgKmM7CisJaW50IGk7CisKKwkvKiBGaXJzdCBnaXZlIG5hbWVzIHRvIHRoZSBnaXZlbiBoZWFkcyAqLworCWZvciAoY2wgPSBsaXN0OyBjbDsgY2wgPSBjbC0+bmV4dCkgeworCQljID0gY2wtPml0ZW07CisJCWlmIChjb21taXRfdG9fbmFtZShjKSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3JldjsgaSsrKSB7CisJCQlpZiAocmV2W2ldID09IGMpIHsKKwkJCQluYW1lX2NvbW1pdChjLCByZWZfbmFtZVtpXSwgMCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiBUaGVuIGNvbW1pdHMgb24gdGhlIGZpcnN0IHBhcmVudCBhbmNlc3RyeSBjaGFpbiAqLworCWRvIHsKKwkJaSA9IDA7CisJCWZvciAoY2wgPSBsaXN0OyBjbDsgY2wgPSBjbC0+bmV4dCkgeworCQkJaSArPSBuYW1lX2ZpcnN0X3BhcmVudF9jaGFpbihjbC0+aXRlbSk7CisJCX0KKwl9IHdoaWxlIChpKTsKKworCS8qIEZpbmFsbHksIGFueSB1bm5hbWVkIGNvbW1pdHMgKi8KKwlkbyB7CisJCWkgPSAwOworCQlmb3IgKGNsID0gbGlzdDsgY2w7IGNsID0gY2wtPm5leHQpIHsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwkJCXN0cnVjdCBjb21taXRfbmFtZSAqbjsKKwkJCWludCBudGg7CisJCQljID0gY2wtPml0ZW07CisJCQlpZiAoIWNvbW1pdF90b19uYW1lKGMpKQorCQkJCWNvbnRpbnVlOworCQkJbiA9IGNvbW1pdF90b19uYW1lKGMpOworCQkJcGFyZW50cyA9IGMtPnBhcmVudHM7CisJCQludGggPSAwOworCQkJd2hpbGUgKHBhcmVudHMpIHsKKwkJCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50cy0+aXRlbTsKKwkJCQlzdHJ1Y3Qgc3RyYnVmIG5ld25hbWUgPSBTVFJCVUZfSU5JVDsKKwkJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJCQludGgrKzsKKwkJCQlpZiAoY29tbWl0X3RvX25hbWUocCkpCisJCQkJCWNvbnRpbnVlOworCQkJCXN3aXRjaCAobi0+Z2VuZXJhdGlvbikgeworCQkJCWNhc2UgMDoKKwkJCQkJc3RyYnVmX2FkZHN0cigmbmV3bmFtZSwgbi0+aGVhZF9uYW1lKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxOgorCQkJCQlzdHJidWZfYWRkZigmbmV3bmFtZSwgIiVzXiIsIG4tPmhlYWRfbmFtZSk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXN0cmJ1Zl9hZGRmKCZuZXduYW1lLCAiJXN+JWQiLAorCQkJCQkJICAgIG4tPmhlYWRfbmFtZSwgbi0+Z2VuZXJhdGlvbik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAobnRoID09IDEpCisJCQkJCXN0cmJ1Zl9hZGRjaCgmbmV3bmFtZSwgJ14nKTsKKwkJCQllbHNlCisJCQkJCXN0cmJ1Zl9hZGRmKCZuZXduYW1lLCAiXiVkIiwgbnRoKTsKKwkJCQluYW1lX2NvbW1pdChwLCBzdHJidWZfZGV0YWNoKCZuZXduYW1lLCBOVUxMKSwgMCk7CisJCQkJaSsrOworCQkJCW5hbWVfZmlyc3RfcGFyZW50X2NoYWluKHApOworCQkJfQorCQl9CisJfSB3aGlsZSAoaSk7Cit9CisKK3N0YXRpYyBpbnQgbWFya19zZWVuKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdF9saXN0ICoqc2Vlbl9wKQoreworCWlmICghY29tbWl0LT5vYmplY3QuZmxhZ3MpIHsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgc2Vlbl9wKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBqb2luX3JldnMoc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdF9wLAorCQkgICAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKipzZWVuX3AsCisJCSAgICAgIGludCBudW1fcmV2LCBpbnQgZXh0cmEpCit7CisJaW50IGFsbF9tYXNrID0gKCgxdSA8PCAoUkVWX1NISUZUICsgbnVtX3JldikpIC0gMSk7CisJaW50IGFsbF9yZXZzID0gYWxsX21hc2sgJiB+KCgxdSA8PCBSRVZfU0hJRlQpIC0gMSk7CisKKwl3aGlsZSAoKmxpc3RfcCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJCWludCBzdGlsbF9pbnRlcmVzdGluZyA9ICEhaW50ZXJlc3RpbmcoKmxpc3RfcCk7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHBvcF9jb21taXQobGlzdF9wKTsKKwkJaW50IGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBhbGxfbWFzazsKKworCQlpZiAoIXN0aWxsX2ludGVyZXN0aW5nICYmIGV4dHJhIDw9IDApCisJCQlicmVhazsKKworCQltYXJrX3NlZW4oY29tbWl0LCBzZWVuX3ApOworCQlpZiAoKGZsYWdzICYgYWxsX3JldnMpID09IGFsbF9yZXZzKQorCQkJZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJcGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKKworCQl3aGlsZSAocGFyZW50cykgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudHMtPml0ZW07CisJCQlpbnQgdGhpc19mbGFnID0gcC0+b2JqZWN0LmZsYWdzOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCQlpZiAoKHRoaXNfZmxhZyAmIGZsYWdzKSA9PSBmbGFncykKKwkJCQljb250aW51ZTsKKwkJCXBhcnNlX2NvbW1pdChwKTsKKwkJCWlmIChtYXJrX3NlZW4ocCwgc2Vlbl9wKSAmJiAhc3RpbGxfaW50ZXJlc3RpbmcpCisJCQkJZXh0cmEtLTsKKwkJCXAtPm9iamVjdC5mbGFncyB8PSBmbGFnczsKKwkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKHAsIGxpc3RfcCk7CisJCX0KKwl9CisKKwkvKgorCSAqIFBvc3Rwcm9jZXNzIHRvIGNvbXBsZXRlIHdlbGwtcG9pc29uaW5nLgorCSAqCisJICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFsbCB0aGUgY29tbWl0cyB3ZSBoYXZlIHNlZW4gaW4KKwkgKiBzZWVuX3AgbGlzdC4gIE1hcmsgYW55dGhpbmcgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tCisJICogdW5pbnRlcmVzdGluZyBjb21taXRzIG5vdCBpbnRlcmVzdGluZy4KKwkgKi8KKwlmb3IgKDs7KSB7CisJCWludCBjaGFuZ2VkID0gMDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpzOworCQlmb3IgKHMgPSAqc2Vlbl9wOyBzOyBzID0gcy0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdCAqYyA9IHMtPml0ZW07CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisKKwkJCWlmICgoKGMtPm9iamVjdC5mbGFncyAmIGFsbF9yZXZzKSAhPSBhbGxfcmV2cykgJiYKKwkJCSAgICAhKGMtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBUaGUgY3VycmVudCBjb21taXQgaXMgZWl0aGVyIGEgbWVyZ2UgYmFzZSBvcgorCQkJICogYWxyZWFkeSB1bmludGVyZXN0aW5nIG9uZS4gIE1hcmsgaXRzIHBhcmVudHMKKwkJCSAqIGFzIHVuaW50ZXJlc3RpbmcgY29tbWl0cyBfb25seV8gaWYgdGhleSBhcmUKKwkJCSAqIGFscmVhZHkgcGFyc2VkLiAgTm8gcmVhc29uIHRvIGZpbmQgbmV3IG9uZXMKKwkJCSAqIGhlcmUuCisJCQkgKi8KKwkJCXBhcmVudHMgPSBjLT5wYXJlbnRzOworCQkJd2hpbGUgKHBhcmVudHMpIHsKKwkJCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50cy0+aXRlbTsKKwkJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkgeworCQkJCQlwLT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJCQkJY2hhbmdlZCA9IDE7CisJCQkJfQorCQkJfQorCQl9CisJCWlmICghY2hhbmdlZCkKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19vbmVfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IG5vX25hbWUpCit7CisJc3RydWN0IHN0cmJ1ZiBwcmV0dHkgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpwcmV0dHlfc3RyID0gIih1bmF2YWlsYWJsZSkiOworCXN0cnVjdCBjb21taXRfbmFtZSAqbmFtZSA9IGNvbW1pdF90b19uYW1lKGNvbW1pdCk7CisKKwlpZiAoY29tbWl0LT5vYmplY3QucGFyc2VkKSB7CisJCXBwX2NvbW1pdF9lYXN5KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgJnByZXR0eSk7CisJCXByZXR0eV9zdHIgPSBwcmV0dHkuYnVmOworCX0KKwlza2lwX3ByZWZpeChwcmV0dHlfc3RyLCAiW1BBVENIXSAiLCAmcHJldHR5X3N0cik7CisKKwlpZiAoIW5vX25hbWUpIHsKKwkJaWYgKG5hbWUgJiYgbmFtZS0+aGVhZF9uYW1lKSB7CisJCQlwcmludGYoIlslcyIsIG5hbWUtPmhlYWRfbmFtZSk7CisJCQlpZiAobmFtZS0+Z2VuZXJhdGlvbikgeworCQkJCWlmIChuYW1lLT5nZW5lcmF0aW9uID09IDEpCisJCQkJCXByaW50ZigiXiIpOworCQkJCWVsc2UKKwkJCQkJcHJpbnRmKCJ+JWQiLCBuYW1lLT5nZW5lcmF0aW9uKTsKKwkJCX0KKwkJCXByaW50ZigiXSAiKTsKKwkJfQorCQllbHNlCisJCQlwcmludGYoIlslc10gIiwKKwkJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoJmNvbW1pdC0+b2JqZWN0Lm9pZCwKKwkJCQkJCSAgREVGQVVMVF9BQkJSRVYpKTsKKwl9CisJcHV0cyhwcmV0dHlfc3RyKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJldHR5KTsKK30KKworc3RhdGljIGNoYXIgKnJlZl9uYW1lW01BWF9SRVZTICsgMV07CitzdGF0aWMgaW50IHJlZl9uYW1lX2NudDsKKworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfZGlnaXRfcHJlZml4KGNvbnN0IGNoYXIgKnMsIGludCAqdikKK3sKKwljb25zdCBjaGFyICpwOworCWludCB2ZXI7CisJY2hhciBjaDsKKworCWZvciAocCA9IHMsIHZlciA9IDA7CisJICAgICAnMCcgPD0gKGNoID0gKnApICYmIGNoIDw9ICc5JzsKKwkgICAgIHArKykKKwkJdmVyID0gdmVyICogMTAgKyBjaCAtICcwJzsKKwkqdiA9IHZlcjsKKwlyZXR1cm4gcDsKK30KKworCitzdGF0aWMgaW50IHZlcnNpb25fY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJd2hpbGUgKDEpIHsKKwkJaW50IHZhLCB2YjsKKworCQlhID0gZmluZF9kaWdpdF9wcmVmaXgoYSwgJnZhKTsKKwkJYiA9IGZpbmRfZGlnaXRfcHJlZml4KGIsICZ2Yik7CisJCWlmICh2YSAhPSB2YikKKwkJCXJldHVybiB2YSAtIHZiOworCisJCXdoaWxlICgxKSB7CisJCQlpbnQgY2EgPSAqYTsKKwkJCWludCBjYiA9ICpiOworCQkJaWYgKCcwJyA8PSBjYSAmJiBjYSA8PSAnOScpCisJCQkJY2EgPSAwOworCQkJaWYgKCcwJyA8PSBjYiAmJiBjYiA8PSAnOScpCisJCQkJY2IgPSAwOworCQkJaWYgKGNhICE9IGNiKQorCQkJCXJldHVybiBjYSAtIGNiOworCQkJaWYgKCFjYSkKKwkJCQlicmVhazsKKwkJCWErKzsKKwkJCWIrKzsKKwkJfQorCQlpZiAoISphICYmICEqYikKKwkJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBjb21wYXJlX3JlZl9uYW1lKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBjaGFyICogY29uc3QqYSA9IGFfLCAqIGNvbnN0KmIgPSBiXzsKKwlyZXR1cm4gdmVyc2lvbl9jbXAoKmEsICpiKTsKK30KKworc3RhdGljIHZvaWQgc29ydF9yZWZfcmFuZ2UoaW50IGJvdHRvbSwgaW50IHRvcCkKK3sKKwlRU09SVChyZWZfbmFtZSArIGJvdHRvbSwgdG9wIC0gYm90dG9tLCBjb21wYXJlX3JlZl9uYW1lKTsKK30KKworc3RhdGljIGludCBhcHBlbmRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgaW50IGFsbG93X2R1cHMpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSAgICAgICBvaWQsIDEpOworCWludCBpOworCisJaWYgKCFjb21taXQpCisJCXJldHVybiAwOworCisJaWYgKCFhbGxvd19kdXBzKSB7CisJCS8qIEF2b2lkIGFkZGluZyB0aGUgc2FtZSB0aGluZyB0d2ljZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcmVmX25hbWVfY250OyBpKyspCisJCQlpZiAoIXN0cmNtcChyZWZuYW1lLCByZWZfbmFtZVtpXSkpCisJCQkJcmV0dXJuIDA7CisJfQorCWlmIChNQVhfUkVWUyA8PSByZWZfbmFtZV9jbnQpIHsKKwkJd2FybmluZyhRXygiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZiIsCisJCQkgICAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZnMiLAorCQkJICAgTUFYX1JFVlMpLCByZWZuYW1lLCBNQVhfUkVWUyk7CisJCXJldHVybiAwOworCX0KKwlyZWZfbmFtZVtyZWZfbmFtZV9jbnQrK10gPSB4c3RyZHVwKHJlZm5hbWUpOworCXJlZl9uYW1lW3JlZl9uYW1lX2NudF0gPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwcGVuZF9oZWFkX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHRtcDsKKwlpbnQgb2ZzID0gMTE7CisJaWYgKCFzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJcmV0dXJuIDA7CisJLyogSWYgYm90aCBoZWFkcy9mb28gYW5kIHRhZ3MvZm9vIGV4aXN0cywgZ2V0X3NoYTEgd291bGQKKwkgKiBnZXQgY29uZnVzZWQuCisJICovCisJaWYgKGdldF9vaWQocmVmbmFtZSArIG9mcywgJnRtcCkgfHwgIW9pZGVxKCZ0bXAsIG9pZCkpCisJCW9mcyA9IDU7CisJcmV0dXJuIGFwcGVuZF9yZWYocmVmbmFtZSArIG9mcywgb2lkLCAwKTsKK30KKworc3RhdGljIGludCBhcHBlbmRfcmVtb3RlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3RfaWQgdG1wOworCWludCBvZnMgPSAxMzsKKwlpZiAoIXN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL3JlbW90ZXMvIikpCisJCXJldHVybiAwOworCS8qIElmIGJvdGggaGVhZHMvZm9vIGFuZCB0YWdzL2ZvbyBleGlzdHMsIGdldF9zaGExIHdvdWxkCisJICogZ2V0IGNvbmZ1c2VkLgorCSAqLworCWlmIChnZXRfb2lkKHJlZm5hbWUgKyBvZnMsICZ0bXApIHx8ICFvaWRlcSgmdG1wLCBvaWQpKQorCQlvZnMgPSA1OworCXJldHVybiBhcHBlbmRfcmVmKHJlZm5hbWUgKyBvZnMsIG9pZCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX3RhZ19yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlpZiAoIXN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL3RhZ3MvIikpCisJCXJldHVybiAwOworCXJldHVybiBhcHBlbmRfcmVmKHJlZm5hbWUgKyA1LCBvaWQsIDApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbWF0Y2hfcmVmX3BhdHRlcm4gPSBOVUxMOworc3RhdGljIGludCBtYXRjaF9yZWZfc2xhc2ggPSAwOworCitzdGF0aWMgaW50IGFwcGVuZF9tYXRjaGluZ19yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCS8qIHdlIHdhbnQgdG8gYWxsb3cgcGF0dGVybiBob2xkLzxhc3Rlcmlzaz4gdG8gc2hvdyBhbGwKKwkgKiBicmFuY2hlcyB1bmRlciByZWZzL2hlYWRzL2hvbGQvLCBhbmQgdjAuOTkuOT8gdG8gc2hvdworCSAqIHJlZnMvdGFncy92MC45OS45YSBhbmQgZnJpZW5kcy4KKwkgKi8KKwljb25zdCBjaGFyICp0YWlsOworCWludCBzbGFzaCA9IGNvdW50X3NsYXNoZXMocmVmbmFtZSk7CisJZm9yICh0YWlsID0gcmVmbmFtZTsgKnRhaWwgJiYgbWF0Y2hfcmVmX3NsYXNoIDwgc2xhc2g7ICkKKwkJaWYgKCp0YWlsKysgPT0gJy8nKQorCQkJc2xhc2gtLTsKKwlpZiAoISp0YWlsKQorCQlyZXR1cm4gMDsKKwlpZiAod2lsZG1hdGNoKG1hdGNoX3JlZl9wYXR0ZXJuLCB0YWlsLCAwKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL2hlYWRzLyIpKQorCQlyZXR1cm4gYXBwZW5kX2hlYWRfcmVmKHJlZm5hbWUsIG9pZCwgZmxhZywgY2JfZGF0YSk7CisJaWYgKHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL3RhZ3MvIikpCisJCXJldHVybiBhcHBlbmRfdGFnX3JlZihyZWZuYW1lLCBvaWQsIGZsYWcsIGNiX2RhdGEpOworCXJldHVybiBhcHBlbmRfcmVmKHJlZm5hbWUsIG9pZCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNuYXJmX3JlZnMoaW50IGhlYWQsIGludCByZW1vdGVzKQoreworCWlmIChoZWFkKSB7CisJCWludCBvcmlnX2NudCA9IHJlZl9uYW1lX2NudDsKKworCQlmb3JfZWFjaF9yZWYoYXBwZW5kX2hlYWRfcmVmLCBOVUxMKTsKKwkJc29ydF9yZWZfcmFuZ2Uob3JpZ19jbnQsIHJlZl9uYW1lX2NudCk7CisJfQorCWlmIChyZW1vdGVzKSB7CisJCWludCBvcmlnX2NudCA9IHJlZl9uYW1lX2NudDsKKworCQlmb3JfZWFjaF9yZWYoYXBwZW5kX3JlbW90ZV9yZWYsIE5VTEwpOworCQlzb3J0X3JlZl9yYW5nZShvcmlnX2NudCwgcmVmX25hbWVfY250KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmV2X2lzX2hlYWQoY29uc3QgY2hhciAqaGVhZCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmhlYWRfc2hhMSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpZiAoIWhlYWQgfHwgKGhlYWRfc2hhMSAmJiBzaGExICYmICFoYXNoZXEoaGVhZF9zaGExLCBzaGExKSkpCisJCXJldHVybiAwOworCXNraXBfcHJlZml4KGhlYWQsICJyZWZzL2hlYWRzLyIsICZoZWFkKTsKKwlpZiAoIXNraXBfcHJlZml4KG5hbWUsICJyZWZzL2hlYWRzLyIsICZuYW1lKSkKKwkJc2tpcF9wcmVmaXgobmFtZSwgImhlYWRzLyIsICZuYW1lKTsKKwlyZXR1cm4gIXN0cmNtcChoZWFkLCBuYW1lKTsKK30KKworc3RhdGljIGludCBzaG93X21lcmdlX2Jhc2Uoc3RydWN0IGNvbW1pdF9saXN0ICpzZWVuLCBpbnQgbnVtX3JldikKK3sKKwlpbnQgYWxsX21hc2sgPSAoKDF1IDw8IChSRVZfU0hJRlQgKyBudW1fcmV2KSkgLSAxKTsKKwlpbnQgYWxsX3JldnMgPSBhbGxfbWFzayAmIH4oKDF1IDw8IFJFVl9TSElGVCkgLSAxKTsKKwlpbnQgZXhpdF9zdGF0dXMgPSAxOworCisJd2hpbGUgKHNlZW4pIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcG9wX2NvbW1pdCgmc2Vlbik7CisJCWludCBmbGFncyA9IGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgYWxsX21hc2s7CisJCWlmICghKGZsYWdzICYgVU5JTlRFUkVTVElORykgJiYKKwkJICAgICgoZmxhZ3MgJiBhbGxfcmV2cykgPT0gYWxsX3JldnMpKSB7CisJCQlwdXRzKG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCQkJZXhpdF9zdGF0dXMgPSAwOworCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJfQorCX0KKwlyZXR1cm4gZXhpdF9zdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19pbmRlcGVuZGVudChzdHJ1Y3QgY29tbWl0ICoqcmV2LAorCQkJICAgIGludCBudW1fcmV2LAorCQkJICAgIHVuc2lnbmVkIGludCAqcmV2X21hc2spCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3JldjsgaSsrKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHJldltpXTsKKwkJdW5zaWduZWQgaW50IGZsYWcgPSByZXZfbWFza1tpXTsKKworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgPT0gZmxhZykKKwkJCXB1dHMob2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfb25lX3Jldihjb25zdCBjaGFyICphdikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHJldmtleTsKKwlpZiAoIWdldF9vaWQoYXYsICZyZXZrZXkpKSB7CisJCWFwcGVuZF9yZWYoYXYsICZyZXZrZXksIDApOworCQlyZXR1cm47CisJfQorCWlmIChzdHJwYnJrKGF2LCAiKj9bIikpIHsKKwkJLyogZ2xvYiBzdHlsZSBtYXRjaCAqLworCQlpbnQgc2F2ZWRfbWF0Y2hlcyA9IHJlZl9uYW1lX2NudDsKKworCQltYXRjaF9yZWZfcGF0dGVybiA9IGF2OworCQltYXRjaF9yZWZfc2xhc2ggPSBjb3VudF9zbGFzaGVzKGF2KTsKKwkJZm9yX2VhY2hfcmVmKGFwcGVuZF9tYXRjaGluZ19yZWYsIE5VTEwpOworCQlpZiAoc2F2ZWRfbWF0Y2hlcyA9PSByZWZfbmFtZV9jbnQgJiYKKwkJICAgIHJlZl9uYW1lX2NudCA8IE1BWF9SRVZTKQorCQkJZXJyb3IoXygibm8gbWF0Y2hpbmcgcmVmcyB3aXRoICVzIiksIGF2KTsKKwkJc29ydF9yZWZfcmFuZ2Uoc2F2ZWRfbWF0Y2hlcywgcmVmX25hbWVfY250KTsKKwkJcmV0dXJuOworCX0KKwlkaWUoImJhZCBzaGExIHJlZmVyZW5jZSAlcyIsIGF2KTsKK30KKworc3RhdGljIGludCBnaXRfc2hvd19icmFuY2hfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgInNob3dicmFuY2guZGVmYXVsdCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJLyoKKwkJICogZGVmYXVsdF9hcmcgaXMgbm93IHBhc3NlZCB0byBwYXJzZV9vcHRpb25zKCksIHNvIHdlIG5lZWQgdG8KKwkJICogbWltaWMgdGhlIHJlYWwgYXJndiBhIGJpdCBiZXR0ZXIuCisJCSAqLworCQlpZiAoIWRlZmF1bHRfYXJncy5hcmdjKQorCQkJYXJndl9hcnJheV9wdXNoKCZkZWZhdWx0X2FyZ3MsICJzaG93LWJyYW5jaCIpOworCQlhcmd2X2FycmF5X3B1c2goJmRlZmF1bHRfYXJncywgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5zaG93YnJhbmNoIikpIHsKKwkJc2hvd2JyYW5jaF91c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGdpdF9jb2xvcl9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBpbnQgb21pdF9pbl9kZW5zZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXQgKipyZXYsIGludCBuKQoreworCS8qIElmIHRoZSBjb21taXQgaXMgdGlwIG9mIHRoZSBuYW1lZCBicmFuY2hlcywgZG8gbm90CisJICogb21pdCBpdC4KKwkgKiBPdGhlcndpc2UsIGlmIGl0IGlzIGEgbWVyZ2UgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZQorCSAqIHRpcCwgaXQgaXMgbm90IHRoYXQgaW50ZXJlc3RpbmcuCisJICovCisJaW50IGksIGZsYWcsIGNvdW50OworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWlmIChyZXZbaV0gPT0gY29tbWl0KQorCQkJcmV0dXJuIDA7CisJZmxhZyA9IGNvbW1pdC0+b2JqZWN0LmZsYWdzOworCWZvciAoaSA9IGNvdW50ID0gMDsgaSA8IG47IGkrKykgeworCQlpZiAoZmxhZyAmICgxdSA8PCAoaSArIFJFVl9TSElGVCkpKQorCQkJY291bnQrKzsKKwl9CisJaWYgKGNvdW50ID09IDEpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlZmxvZyA9IDA7CisKK3N0YXRpYyBpbnQgcGFyc2VfcmVmbG9nX3BhcmFtKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgICAgaW50IHVuc2V0KQoreworCWNoYXIgKmVwOworCWNvbnN0IGNoYXIgKipiYXNlID0gKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZTsKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJaWYgKCFhcmcpCisJCWFyZyA9ICIiOworCXJlZmxvZyA9IHN0cnRvdWwoYXJnLCAmZXAsIDEwKTsKKwlpZiAoKmVwID09ICcsJykKKwkJKmJhc2UgPSBlcCArIDE7CisJZWxzZSBpZiAoKmVwKQorCQlyZXR1cm4gZXJyb3IoInVucmVjb2duaXplZCByZWZsb2cgcGFyYW0gJyVzJyIsIGFyZyk7CisJZWxzZQorCQkqYmFzZSA9IE5VTEw7CisJaWYgKHJlZmxvZyA8PSAwKQorCQlyZWZsb2cgPSBERUZBVUxUX1JFRkxPRzsKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9zaG93X2JyYW5jaChpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBjb21taXQgKnJldltNQVhfUkVWU10sICpjb21taXQ7CisJY2hhciAqcmVmbG9nX21zZ1tNQVhfUkVWU107CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gTlVMTCwgKnNlZW4gPSBOVUxMOworCXVuc2lnbmVkIGludCByZXZfbWFza1tNQVhfUkVWU107CisJaW50IG51bV9yZXYsIGksIGV4dHJhID0gMDsKKwlpbnQgYWxsX2hlYWRzID0gMCwgYWxsX3JlbW90ZXMgPSAwOworCWludCBhbGxfbWFzaywgYWxsX3JldnM7CisJZW51bSByZXZfc29ydF9vcmRlciBzb3J0X29yZGVyID0gUkVWX1NPUlRfSU5fR1JBUEhfT1JERVI7CisJY2hhciAqaGVhZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWRfb2lkOworCWludCBtZXJnZV9iYXNlID0gMDsKKwlpbnQgaW5kZXBlbmRlbnQgPSAwOworCWludCBub19uYW1lID0gMDsKKwlpbnQgc2hhMV9uYW1lID0gMDsKKwlpbnQgc2hvd25fbWVyZ2VfcG9pbnQgPSAwOworCWludCB3aXRoX2N1cnJlbnRfYnJhbmNoID0gMDsKKwlpbnQgaGVhZF9hdCA9IC0xOworCWludCB0b3BpY3MgPSAwOworCWludCBkZW5zZSA9IDE7CisJY29uc3QgY2hhciAqcmVmbG9nX2Jhc2UgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9zaG93X2JyYW5jaF9vcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdhJywgImFsbCIsICZhbGxfaGVhZHMsCisJCQkgTl8oInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIpKSwKKwkJT1BUX0JPT0woJ3InLCAicmVtb3RlcyIsICZhbGxfcmVtb3RlcywKKwkJCSBOXygic2hvdyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiKSksCisJCU9QVF9fQ09MT1IoJnNob3dicmFuY2hfdXNlX2NvbG9yLAorCQkJICAgIE5fKCJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIikpLAorCQl7IE9QVElPTl9JTlRFR0VSLCAwLCAibW9yZSIsICZleHRyYSwgTl8oIm4iKSwKKwkJCSAgICBOXygic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiKSwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpMSB9LAorCQlPUFRfU0VUX0lOVCgwLCAibGlzdCIsICZleHRyYSwgTl8oInN5bm9ueW0gdG8gbW9yZT0tMSIpLCAtMSksCisJCU9QVF9CT09MKDAsICJuby1uYW1lIiwgJm5vX25hbWUsIE5fKCJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIpKSwKKwkJT1BUX0JPT0woMCwgImN1cnJlbnQiLCAmd2l0aF9jdXJyZW50X2JyYW5jaCwKKwkJCSBOXygiaW5jbHVkZSB0aGUgY3VycmVudCBicmFuY2giKSksCisJCU9QVF9CT09MKDAsICJzaGExLW5hbWUiLCAmc2hhMV9uYW1lLAorCQkJIE5fKCJuYW1lIGNvbW1pdHMgd2l0aCB0aGVpciBvYmplY3QgbmFtZXMiKSksCisJCU9QVF9CT09MKDAsICJtZXJnZS1iYXNlIiwgJm1lcmdlX2Jhc2UsCisJCQkgTl8oInNob3cgcG9zc2libGUgbWVyZ2UgYmFzZXMiKSksCisJCU9QVF9CT09MKDAsICJpbmRlcGVuZGVudCIsICZpbmRlcGVuZGVudCwKKwkJCSAgICBOXygic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgInRvcG8tb3JkZXIiLCAmc29ydF9vcmRlciwKKwkJCSAgICBOXygic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIiksCisJCQkgICAgUkVWX1NPUlRfSU5fR1JBUEhfT1JERVIpLAorCQlPUFRfQk9PTCgwLCAidG9waWNzIiwgJnRvcGljcywKKwkJCSBOXygic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giKSksCisJCU9QVF9TRVRfSU5UKDAsICJzcGFyc2UiLCAmZGVuc2UsCisJCQkgICAgTl8oInNob3cgbWVyZ2VzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lIHRpcCIpLCAwKSwKKwkJT1BUX1NFVF9JTlQoMCwgImRhdGUtb3JkZXIiLCAmc29ydF9vcmRlciwKKwkJCSAgICBOXygidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyICIKKwkJCSAgICAgICAid2hlcmUgcG9zc2libGUiKSwKKwkJCSAgICBSRVZfU09SVF9CWV9DT01NSVRfREFURSksCisJCU9QVF9DQUxMQkFDS19GKCdnJywgInJlZmxvZyIsICZyZWZsb2dfYmFzZSwgTl8oIjxuPlssPGJhc2U+XSIpLAorCQkJICAgIE5fKCJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgIgorCQkJICAgICAgICJiYXNlIiksCisJCQkgICAgUEFSU0VfT1BUX09QVEFSRyB8IFBBUlNFX09QVF9OT05FRywKKwkJCSAgICBwYXJzZV9yZWZsb2dfcGFyYW0pLAorCQlPUFRfRU5EKCkKKwl9OworCisJaW5pdF9jb21taXRfbmFtZV9zbGFiKCZuYW1lX3NsYWIpOworCisJZ2l0X2NvbmZpZyhnaXRfc2hvd19icmFuY2hfY29uZmlnLCBOVUxMKTsKKworCS8qIElmIG5vdGhpbmcgaXMgc3BlY2lmaWVkLCB0cnkgdGhlIGRlZmF1bHQgZmlyc3QgKi8KKwlpZiAoYWMgPT0gMSAmJiBkZWZhdWx0X2FyZ3MuYXJnYykgeworCQlhYyA9IGRlZmF1bHRfYXJncy5hcmdjOworCQlhdiA9IGRlZmF1bHRfYXJncy5hcmd2OworCX0KKworCWFjID0gcGFyc2Vfb3B0aW9ucyhhYywgYXYsIHByZWZpeCwgYnVpbHRpbl9zaG93X2JyYW5jaF9vcHRpb25zLAorCQkJICAgc2hvd19icmFuY2hfdXNhZ2UsIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCWlmIChhbGxfaGVhZHMpCisJCWFsbF9yZW1vdGVzID0gMTsKKworCWlmIChleHRyYSB8fCByZWZsb2cpIHsKKwkJLyogImxpc3RpbmciIG1vZGUgaXMgaW5jb21wYXRpYmxlIHdpdGgKKwkJICogaW5kZXBlbmRlbnQgbm9yIG1lcmdlLWJhc2UgbW9kZXMuCisJCSAqLworCQlpZiAoaW5kZXBlbmRlbnQgfHwgbWVyZ2VfYmFzZSkKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhzaG93X2JyYW5jaF91c2FnZSwKKwkJCQkJICAgYnVpbHRpbl9zaG93X2JyYW5jaF9vcHRpb25zKTsKKwkJaWYgKHJlZmxvZyAmJiAoKDAgPCBleHRyYSkgfHwgYWxsX2hlYWRzIHx8IGFsbF9yZW1vdGVzKSkKKwkJCS8qCisJCQkgKiBBc2tpbmcgZm9yIC0tbW9yZSBpbiByZWZsb2cgbW9kZSBkb2VzIG5vdAorCQkJICogbWFrZSBzZW5zZS4gIC0tbGlzdCBpcyBPay4KKwkJCSAqCisJCQkgKiBBbHNvIC0tYWxsIGFuZCAtLXJlbW90ZXMgZG8gbm90IG1ha2Ugc2Vuc2UgZWl0aGVyLgorCQkJICovCisJCQlkaWUoXygiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgIgorCQkJICAgICAgIi0taW5kZXBlbmRlbnQgb3IgLS1tZXJnZS1iYXNlIikpOworCX0KKworCS8qIElmIG5vdGhpbmcgaXMgc3BlY2lmaWVkLCBzaG93IGFsbCBicmFuY2hlcyBieSBkZWZhdWx0ICovCisJaWYgKGFjIDw9IHRvcGljcyAmJiBhbGxfaGVhZHMgKyBhbGxfcmVtb3RlcyA9PSAwKQorCQlhbGxfaGVhZHMgPSAxOworCisJaWYgKHJlZmxvZykgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJY2hhciAqcmVmOworCQlpbnQgYmFzZSA9IDA7CisJCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CisKKwkJaWYgKGFjID09IDApIHsKKwkJCXN0YXRpYyBjb25zdCBjaGFyICpmYWtlX2F2WzJdOworCisJCQlmYWtlX2F2WzBdID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLAorCQkJCQkJICAgIFJFU09MVkVfUkVGX1JFQURJTkcsICZvaWQsCisJCQkJCQkgICAgTlVMTCk7CisJCQlmYWtlX2F2WzFdID0gTlVMTDsKKwkJCWF2ID0gZmFrZV9hdjsKKwkJCWFjID0gMTsKKwkJCWlmICghKmF2KQorCQkJCWRpZShfKCJubyBicmFuY2hlcyBnaXZlbiwgYW5kIEhFQUQgaXMgbm90IHZhbGlkIikpOworCQl9CisJCWlmIChhYyAhPSAxKQorCQkJZGllKF8oIi0tcmVmbG9nIG9wdGlvbiBuZWVkcyBvbmUgYnJhbmNoIG5hbWUiKSk7CisKKwkJaWYgKE1BWF9SRVZTIDwgcmVmbG9nKQorCQkJZGllKFFfKCJvbmx5ICVkIGVudHJ5IGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iLAorCQkJICAgICAgICJvbmx5ICVkIGVudHJpZXMgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIsCisJCQkgICAgICAgTUFYX1JFVlMpLCBNQVhfUkVWUyk7CisJCWlmICghZHdpbV9yZWYoKmF2LCBzdHJsZW4oKmF2KSwgJm9pZCwgJnJlZikpCisJCQlkaWUoXygibm8gc3VjaCByZWYgJXMiKSwgKmF2KTsKKworCQkvKiBIYXMgdGhlIGJhc2UgYmVlbiBzcGVjaWZpZWQ/ICovCisJCWlmIChyZWZsb2dfYmFzZSkgeworCQkJY2hhciAqZXA7CisJCQliYXNlID0gc3RydG91bChyZWZsb2dfYmFzZSwgJmVwLCAxMCk7CisJCQlpZiAoKmVwKSB7CisJCQkJLyogQWgsIHRoYXQgaXMgYSBkYXRlIHNwZWMuLi4gKi8KKwkJCQl0aW1lc3RhbXBfdCBhdDsKKwkJCQlhdCA9IGFwcHJveGlkYXRlKHJlZmxvZ19iYXNlKTsKKwkJCQlyZWFkX3JlZl9hdChnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLAorCQkJCQkgICAgcmVmLCBmbGFncywgYXQsIC0xLCAmb2lkLCBOVUxMLAorCQkJCQkgICAgTlVMTCwgTlVMTCwgJmJhc2UpOworCQkJfQorCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHJlZmxvZzsgaSsrKSB7CisJCQljaGFyICpsb2dtc2c7CisJCQljaGFyICpudGhfZGVzYzsKKwkJCWNvbnN0IGNoYXIgKm1zZzsKKwkJCXRpbWVzdGFtcF90IHRpbWVzdGFtcDsKKwkJCWludCB0ejsKKworCQkJaWYgKHJlYWRfcmVmX2F0KGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksCisJCQkJCXJlZiwgZmxhZ3MsIDAsIGJhc2UgKyBpLCAmb2lkLCAmbG9nbXNnLAorCQkJCQkmdGltZXN0YW1wLCAmdHosIE5VTEwpKSB7CisJCQkJcmVmbG9nID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW1zZyA9IHN0cmNocihsb2dtc2csICdcdCcpOworCQkJaWYgKCFtc2cpCisJCQkJbXNnID0gIihub25lKSI7CisJCQllbHNlCisJCQkJbXNnKys7CisJCQlyZWZsb2dfbXNnW2ldID0geHN0cmZtdCgiKCVzKSAlcyIsCisJCQkJCQlzaG93X2RhdGUodGltZXN0YW1wLCB0eiwKKwkJCQkJCQkgIERBVEVfTU9ERShSRUxBVElWRSkpLAorCQkJCQkJbXNnKTsKKwkJCWZyZWUobG9nbXNnKTsKKworCQkJbnRoX2Rlc2MgPSB4c3RyZm10KCIlc0B7JWR9IiwgKmF2LCBiYXNlK2kpOworCQkJYXBwZW5kX3JlZihudGhfZGVzYywgJm9pZCwgMSk7CisJCQlmcmVlKG50aF9kZXNjKTsKKwkJfQorCQlmcmVlKHJlZik7CisJfQorCWVsc2UgeworCQl3aGlsZSAoMCA8IGFjKSB7CisJCQlhcHBlbmRfb25lX3JldigqYXYpOworCQkJYWMtLTsgYXYrKzsKKwkJfQorCQlpZiAoYWxsX2hlYWRzICsgYWxsX3JlbW90ZXMpCisJCQlzbmFyZl9yZWZzKGFsbF9oZWFkcywgYWxsX3JlbW90ZXMpOworCX0KKworCWhlYWQgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkgICAgICAmaGVhZF9vaWQsIE5VTEwpOworCisJaWYgKHdpdGhfY3VycmVudF9icmFuY2ggJiYgaGVhZCkgeworCQlpbnQgaGFzX2hlYWQgPSAwOworCQlmb3IgKGkgPSAwOyAhaGFzX2hlYWQgJiYgaSA8IHJlZl9uYW1lX2NudDsgaSsrKSB7CisJCQkvKiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGFkZGluZyB0aGUgYnJhbmNoCisJCQkgKiBIRUFEIHBvaW50cyBhdC4KKwkJCSAqLworCQkJaWYgKHJldl9pc19oZWFkKGhlYWQsCisJCQkJCXJlZl9uYW1lW2ldLAorCQkJCQloZWFkX29pZC5oYXNoLCBOVUxMKSkKKwkJCQloYXNfaGVhZCsrOworCQl9CisJCWlmICghaGFzX2hlYWQpIHsKKwkJCWNvbnN0IGNoYXIgKm5hbWUgPSBoZWFkOworCQkJc2tpcF9wcmVmaXgobmFtZSwgInJlZnMvaGVhZHMvIiwgJm5hbWUpOworCQkJYXBwZW5kX29uZV9yZXYobmFtZSk7CisJCX0KKwl9CisKKwlpZiAoIXJlZl9uYW1lX2NudCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIk5vIHJldnMgdG8gYmUgc2hvd24uXG4iKTsKKwkJZXhpdCgwKTsKKwl9CisKKwlmb3IgKG51bV9yZXYgPSAwOyByZWZfbmFtZVtudW1fcmV2XTsgbnVtX3JldisrKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgcmV2a2V5OworCQl1bnNpZ25lZCBpbnQgZmxhZyA9IDF1IDw8IChudW1fcmV2ICsgUkVWX1NISUZUKTsKKworCQlpZiAoTUFYX1JFVlMgPD0gbnVtX3JldikKKwkJCWRpZShRXygiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2LiIsCisJCQkgICAgICAgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldnMuIiwKKwkJCSAgICAgICBNQVhfUkVWUyksIE1BWF9SRVZTKTsKKwkJaWYgKGdldF9vaWQocmVmX25hbWVbbnVtX3Jldl0sICZyZXZrZXkpKQorCQkJZGllKF8oIiclcycgaXMgbm90IGEgdmFsaWQgcmVmLiIpLCByZWZfbmFtZVtudW1fcmV2XSk7CisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCAmcmV2a2V5KTsKKwkJaWYgKCFjb21taXQpCisJCQlkaWUoXygiY2Fubm90IGZpbmQgY29tbWl0ICVzICglcykiKSwKKwkJCSAgICByZWZfbmFtZVtudW1fcmV2XSwgb2lkX3RvX2hleCgmcmV2a2V5KSk7CisJCXBhcnNlX2NvbW1pdChjb21taXQpOworCQltYXJrX3NlZW4oY29tbWl0LCAmc2Vlbik7CisKKwkJLyogcmV2IzAgdXNlcyBiaXQgUkVWX1NISUZULCByZXYjMSB1c2VzIGJpdCBSRVZfU0hJRlQrMSwKKwkJICogYW5kIHNvIG9uLiAgUkVWX1NISUZUIGJpdHMgZnJvbSBiaXQgMCBhcmUgdXNlZCBmb3IKKwkJICogaW50ZXJuYWwgYm9va2tlZXBpbmcuCisJCSAqLworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBmbGFnOworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgPT0gZmxhZykKKwkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKGNvbW1pdCwgJmxpc3QpOworCQlyZXZbbnVtX3Jldl0gPSBjb21taXQ7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1fcmV2OyBpKyspCisJCXJldl9tYXNrW2ldID0gcmV2W2ldLT5vYmplY3QuZmxhZ3M7CisKKwlpZiAoMCA8PSBleHRyYSkKKwkJam9pbl9yZXZzKCZsaXN0LCAmc2VlbiwgbnVtX3JldiwgZXh0cmEpOworCisJY29tbWl0X2xpc3Rfc29ydF9ieV9kYXRlKCZzZWVuKTsKKworCWlmIChtZXJnZV9iYXNlKQorCQlyZXR1cm4gc2hvd19tZXJnZV9iYXNlKHNlZW4sIG51bV9yZXYpOworCisJaWYgKGluZGVwZW5kZW50KQorCQlyZXR1cm4gc2hvd19pbmRlcGVuZGVudChyZXYsIG51bV9yZXYsIHJldl9tYXNrKTsKKworCS8qIFNob3cgbGlzdDsgLS1tb3JlPS0xIG1lYW5zIGxpc3Qtb25seSAqLworCWlmICgxIDwgbnVtX3JldiB8fCBleHRyYSA8IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9yZXY7IGkrKykgeworCQkJaW50IGo7CisJCQlpbnQgaXNfaGVhZCA9IHJldl9pc19oZWFkKGhlYWQsCisJCQkJCQkgIHJlZl9uYW1lW2ldLAorCQkJCQkJICBoZWFkX29pZC5oYXNoLAorCQkJCQkJICByZXZbaV0tPm9iamVjdC5vaWQuaGFzaCk7CisJCQlpZiAoZXh0cmEgPCAwKQorCQkJCXByaW50ZigiJWMgWyVzXSAiLAorCQkJCSAgICAgICBpc19oZWFkID8gJyonIDogJyAnLCByZWZfbmFtZVtpXSk7CisJCQllbHNlIHsKKwkJCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJCQlwdXRjaGFyKCcgJyk7CisJCQkJcHJpbnRmKCIlcyVjJXMgWyVzXSAiLAorCQkJCSAgICAgICBnZXRfY29sb3JfY29kZShpKSwKKwkJCQkgICAgICAgaXNfaGVhZCA/ICcqJyA6ICchJywKKwkJCQkgICAgICAgZ2V0X2NvbG9yX3Jlc2V0X2NvZGUoKSwgcmVmX25hbWVbaV0pOworCQkJfQorCisJCQlpZiAoIXJlZmxvZykgeworCQkJCS8qIGhlYWRlciBsaW5lcyBuZXZlciBuZWVkIG5hbWUgKi8KKwkJCQlzaG93X29uZV9jb21taXQocmV2W2ldLCAxKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlwdXRzKHJlZmxvZ19tc2dbaV0pOworCisJCQlpZiAoaXNfaGVhZCkKKwkJCQloZWFkX2F0ID0gaTsKKwkJfQorCQlpZiAoMCA8PSBleHRyYSkgeworCQkJZm9yIChpID0gMDsgaSA8IG51bV9yZXY7IGkrKykKKwkJCQlwdXRjaGFyKCctJyk7CisJCQlwdXRjaGFyKCdcbicpOworCQl9CisJfQorCWlmIChleHRyYSA8IDApCisJCWV4aXQoMCk7CisKKwkvKiBTb3J0IHRvcG9sb2dpY2FsbHkgKi8KKwlzb3J0X2luX3RvcG9sb2dpY2FsX29yZGVyKCZzZWVuLCBzb3J0X29yZGVyKTsKKworCS8qIEdpdmUgbmFtZXMgdG8gY29tbWl0cyAqLworCWlmICghc2hhMV9uYW1lICYmICFub19uYW1lKQorCQluYW1lX2NvbW1pdHMoc2VlbiwgcmV2LCByZWZfbmFtZSwgbnVtX3Jldik7CisKKwlhbGxfbWFzayA9ICgoMXUgPDwgKFJFVl9TSElGVCArIG51bV9yZXYpKSAtIDEpOworCWFsbF9yZXZzID0gYWxsX21hc2sgJiB+KCgxdSA8PCBSRVZfU0hJRlQpIC0gMSk7CisKKwl3aGlsZSAoc2VlbikgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwb3BfY29tbWl0KCZzZWVuKTsKKwkJaW50IHRoaXNfZmxhZyA9IGNvbW1pdC0+b2JqZWN0LmZsYWdzOworCQlpbnQgaXNfbWVyZ2VfcG9pbnQgPSAoKHRoaXNfZmxhZyAmIGFsbF9yZXZzKSA9PSBhbGxfcmV2cyk7CisKKwkJc2hvd25fbWVyZ2VfcG9pbnQgfD0gaXNfbWVyZ2VfcG9pbnQ7CisKKwkJaWYgKDEgPCBudW1fcmV2KSB7CisJCQlpbnQgaXNfbWVyZ2UgPSAhIShjb21taXQtPnBhcmVudHMgJiYKKwkJCQkJICBjb21taXQtPnBhcmVudHMtPm5leHQpOworCQkJaWYgKHRvcGljcyAmJgorCQkJICAgICFpc19tZXJnZV9wb2ludCAmJgorCQkJICAgICh0aGlzX2ZsYWcgJiAoMXUgPDwgUkVWX1NISUZUKSkpCisJCQkJY29udGludWU7CisJCQlpZiAoZGVuc2UgJiYgaXNfbWVyZ2UgJiYKKwkJCSAgICBvbWl0X2luX2RlbnNlKGNvbW1pdCwgcmV2LCBudW1fcmV2KSkKKwkJCQljb250aW51ZTsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1fcmV2OyBpKyspIHsKKwkJCQlpbnQgbWFyazsKKwkJCQlpZiAoISh0aGlzX2ZsYWcgJiAoMXUgPDwgKGkgKyBSRVZfU0hJRlQpKSkpCisJCQkJCW1hcmsgPSAnICc7CisJCQkJZWxzZSBpZiAoaXNfbWVyZ2UpCisJCQkJCW1hcmsgPSAnLSc7CisJCQkJZWxzZSBpZiAoaSA9PSBoZWFkX2F0KQorCQkJCQltYXJrID0gJyonOworCQkJCWVsc2UKKwkJCQkJbWFyayA9ICcrJzsKKwkJCQlwcmludGYoIiVzJWMlcyIsCisJCQkJICAgICAgIGdldF9jb2xvcl9jb2RlKGkpLAorCQkJCSAgICAgICBtYXJrLCBnZXRfY29sb3JfcmVzZXRfY29kZSgpKTsKKwkJCX0KKwkJCXB1dGNoYXIoJyAnKTsKKwkJfQorCQlzaG93X29uZV9jb21taXQoY29tbWl0LCBub19uYW1lKTsKKworCQlpZiAoc2hvd25fbWVyZ2VfcG9pbnQgJiYgLS1leHRyYSA8IDApCisJCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Nob3ctaW5kZXguYyBiL2J1aWx0aW4vc2hvdy1pbmRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MjZmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3Nob3ctaW5kZXguYwpAQCAtMCwwICsxLDg3IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFjay5oIgorCitzdGF0aWMgY29uc3QgY2hhciBzaG93X2luZGV4X3VzYWdlW10gPQorImdpdCBzaG93LWluZGV4IjsKKworaW50IGNtZF9zaG93X2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCXVuc2lnbmVkIG5yOworCXVuc2lnbmVkIGludCB2ZXJzaW9uOworCXN0YXRpYyB1bnNpZ25lZCBpbnQgdG9wX2luZGV4WzI1Nl07CisJY29uc3QgdW5zaWduZWQgaGFzaHN6ID0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisKKwlpZiAoYXJnYyAhPSAxKQorCQl1c2FnZShzaG93X2luZGV4X3VzYWdlKTsKKwlpZiAoZnJlYWQodG9wX2luZGV4LCAyICogNCwgMSwgc3RkaW4pICE9IDEpCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgaGVhZGVyIik7CisJaWYgKHRvcF9pbmRleFswXSA9PSBodG9ubChQQUNLX0lEWF9TSUdOQVRVUkUpKSB7CisJCXZlcnNpb24gPSBudG9obCh0b3BfaW5kZXhbMV0pOworCQlpZiAodmVyc2lvbiA8IDIgfHwgdmVyc2lvbiA+IDIpCisJCQlkaWUoInVua25vd24gaW5kZXggdmVyc2lvbiIpOworCQlpZiAoZnJlYWQodG9wX2luZGV4LCAyNTYgKiA0LCAxLCBzdGRpbikgIT0gMSkKKwkJCWRpZSgidW5hYmxlIHRvIHJlYWQgaW5kZXgiKTsKKwl9IGVsc2UgeworCQl2ZXJzaW9uID0gMTsKKwkJaWYgKGZyZWFkKCZ0b3BfaW5kZXhbMl0sIDI1NCAqIDQsIDEsIHN0ZGluKSAhPSAxKQorCQkJZGllKCJ1bmFibGUgdG8gcmVhZCBpbmRleCIpOworCX0KKwluciA9IDA7CisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCXVuc2lnbmVkIG4gPSBudG9obCh0b3BfaW5kZXhbaV0pOworCQlpZiAobiA8IG5yKQorCQkJZGllKCJjb3JydXB0IGluZGV4IGZpbGUiKTsKKwkJbnIgPSBuOworCX0KKwlpZiAodmVyc2lvbiA9PSAxKSB7CisJCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBlbnRyeVsoR0lUX01BWF9SQVdTWiArIDQpIC8gc2l6ZW9mKHVuc2lnbmVkIGludCldOworCisJCQlpZiAoZnJlYWQoZW50cnksIDQgKyBoYXNoc3osIDEsIHN0ZGluKSAhPSAxKQorCQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgZW50cnkgJXUvJXUiLCBpLCBucik7CisJCQlvZmZzZXQgPSBudG9obChlbnRyeVswXSk7CisJCQlwcmludGYoIiV1ICVzXG4iLCBvZmZzZXQsIGhhc2hfdG9faGV4KCh2b2lkICopKGVudHJ5KzEpKSk7CisJCX0KKwl9IGVsc2UgeworCQl1bnNpZ25lZCBvZmY2NF9uciA9IDA7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJCXVpbnQzMl90IGNyYzsKKwkJCXVpbnQzMl90IG9mZjsKKwkJfSAqZW50cmllczsKKwkJQUxMT0NfQVJSQVkoZW50cmllcywgbnIpOworCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKwkJCWlmIChmcmVhZChlbnRyaWVzW2ldLm9pZC5oYXNoLCBoYXNoc3osIDEsIHN0ZGluKSAhPSAxKQorCQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgc2hhMSAldS8ldSIsIGksIG5yKTsKKwkJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisJCQlpZiAoZnJlYWQoJmVudHJpZXNbaV0uY3JjLCA0LCAxLCBzdGRpbikgIT0gMSkKKwkJCQlkaWUoInVuYWJsZSB0byByZWFkIGNyYyAldS8ldSIsIGksIG5yKTsKKwkJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisJCQlpZiAoZnJlYWQoJmVudHJpZXNbaV0ub2ZmLCA0LCAxLCBzdGRpbikgIT0gMSkKKwkJCQlkaWUoInVuYWJsZSB0byByZWFkIDMyYiBvZmZzZXQgJXUvJXUiLCBpLCBucik7CisJCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCQl1aW50NjRfdCBvZmZzZXQ7CisJCQl1aW50MzJfdCBvZmYgPSBudG9obChlbnRyaWVzW2ldLm9mZik7CisJCQlpZiAoIShvZmYgJiAweDgwMDAwMDAwKSkgeworCQkJCW9mZnNldCA9IG9mZjsKKwkJCX0gZWxzZSB7CisJCQkJdWludDMyX3Qgb2ZmNjRbMl07CisJCQkJaWYgKChvZmYgJiAweDdmZmZmZmZmKSAhPSBvZmY2NF9ucikKKwkJCQkJZGllKCJpbmNvbnNpc3RlbnQgNjRiIG9mZnNldCBpbmRleCIpOworCQkJCWlmIChmcmVhZChvZmY2NCwgOCwgMSwgc3RkaW4pICE9IDEpCisJCQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgNjRiIG9mZnNldCAldSIsIG9mZjY0X25yKTsKKwkJCQlvZmZzZXQgPSAoKCh1aW50NjRfdCludG9obChvZmY2NFswXSkpIDw8IDMyKSB8CisJCQkJCQkgICAgIG50b2hsKG9mZjY0WzFdKTsKKwkJCQlvZmY2NF9ucisrOworCQkJfQorCQkJcHJpbnRmKCIlIiBQUkl1TUFYICIgJXMgKCUwOCJQUkl4MzIiKVxuIiwKKwkJCSAgICAgICAodWludG1heF90KSBvZmZzZXQsCisJCQkgICAgICAgb2lkX3RvX2hleCgmZW50cmllc1tpXS5vaWQpLAorCQkJICAgICAgIG50b2hsKGVudHJpZXNbaV0uY3JjKSk7CisJCX0KKwkJZnJlZShlbnRyaWVzKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Nob3ctcmVmLmMgYi9idWlsdGluL3Nob3ctcmVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU2MGI0YQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vc2hvdy1yZWYuYwpAQCAtMCwwICsxLDIyNiBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzaG93X3JlZl91c2FnZVtdID0geworCU5fKCJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLWhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0iKSwKKwlOXygiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgZGVyZWZfdGFncywgc2hvd19oZWFkLCB0YWdzX29ubHksIGhlYWRzX29ubHksIGZvdW5kX21hdGNoLCB2ZXJpZnksCisJICAgcXVpZXQsIGhhc2hfb25seSwgYWJicmV2LCBleGNsdWRlX2FyZzsKK3N0YXRpYyBjb25zdCBjaGFyICoqcGF0dGVybjsKK3N0YXRpYyBjb25zdCBjaGFyICpleGNsdWRlX2V4aXN0aW5nX2FyZzsKKworc3RhdGljIHZvaWQgc2hvd19vbmUoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWNvbnN0IGNoYXIgKmhleDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHBlZWxlZDsKKworCWlmICghaGFzX29iamVjdF9maWxlKG9pZCkpCisJCWRpZSgiZ2l0IHNob3ctcmVmOiBiYWQgcmVmICVzICglcykiLCByZWZuYW1lLAorCQkgICAgb2lkX3RvX2hleChvaWQpKTsKKworCWlmIChxdWlldCkKKwkJcmV0dXJuOworCisJaGV4ID0gZmluZF91bmlxdWVfYWJicmV2KG9pZCwgYWJicmV2KTsKKwlpZiAoaGFzaF9vbmx5KQorCQlwcmludGYoIiVzXG4iLCBoZXgpOworCWVsc2UKKwkJcHJpbnRmKCIlcyAlc1xuIiwgaGV4LCByZWZuYW1lKTsKKworCWlmICghZGVyZWZfdGFncykKKwkJcmV0dXJuOworCisJaWYgKCFwZWVsX3JlZihyZWZuYW1lLCAmcGVlbGVkKSkgeworCQloZXggPSBmaW5kX3VuaXF1ZV9hYmJyZXYoJnBlZWxlZCwgYWJicmV2KTsKKwkJcHJpbnRmKCIlcyAlc157fVxuIiwgaGV4LCByZWZuYW1lKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2hvd19yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgaW50IGZsYWcsIHZvaWQgKmNiZGF0YSkKK3sKKwlpZiAoc2hvd19oZWFkICYmICFzdHJjbXAocmVmbmFtZSwgIkhFQUQiKSkKKwkJZ290byBtYXRjaDsKKworCWlmICh0YWdzX29ubHkgfHwgaGVhZHNfb25seSkgeworCQlpbnQgbWF0Y2g7CisKKwkJbWF0Y2ggPSBoZWFkc19vbmx5ICYmIHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL2hlYWRzLyIpOworCQltYXRjaCB8PSB0YWdzX29ubHkgJiYgc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvdGFncy8iKTsKKwkJaWYgKCFtYXRjaCkKKwkJCXJldHVybiAwOworCX0KKwlpZiAocGF0dGVybikgeworCQlpbnQgcmVmbGVuID0gc3RybGVuKHJlZm5hbWUpOworCQljb25zdCBjaGFyICoqcCA9IHBhdHRlcm4sICptOworCQl3aGlsZSAoKG0gPSAqcCsrKSAhPSBOVUxMKSB7CisJCQlpbnQgbGVuID0gc3RybGVuKG0pOworCQkJaWYgKGxlbiA+IHJlZmxlbikKKwkJCQljb250aW51ZTsKKwkJCWlmIChtZW1jbXAobSwgcmVmbmFtZSArIHJlZmxlbiAtIGxlbiwgbGVuKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChsZW4gPT0gcmVmbGVuKQorCQkJCWdvdG8gbWF0Y2g7CisJCQlpZiAocmVmbmFtZVtyZWZsZW4gLSBsZW4gLSAxXSA9PSAnLycpCisJCQkJZ290byBtYXRjaDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKK21hdGNoOgorCWZvdW5kX21hdGNoKys7CisKKwlzaG93X29uZShyZWZuYW1lLCBvaWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2V4aXN0aW5nKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCWludCBmbGFnLCB2b2lkICpjYmRhdGEpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpsaXN0ID0gKHN0cnVjdCBzdHJpbmdfbGlzdCAqKWNiZGF0YTsKKwlzdHJpbmdfbGlzdF9pbnNlcnQobGlzdCwgcmVmbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZWFkICJeKD86PGFueXRoaW5nPlxzKT88cmVmbmFtZT4oPzpcXlx7XH0pPyQiIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAorICogYW5kCisgKiAoMSkgc3RyaXAgIl57fSIgYXQgdGhlIGVuZCBvZiBsaW5lIGlmIGFueTsKKyAqICgyKSBpZ25vcmUgaWYgbWF0Y2ggaXMgcHJvdmlkZWQgYW5kIGRvZXMgbm90IGhlYWQtbWF0Y2ggcmVmbmFtZTsKKyAqICgzKSB3YXJuIGlmIHJlZm5hbWUgaXMgbm90IGEgd2VsbC1mb3JtZWQgcmVmbmFtZSBhbmQgc2tpcDsKKyAqICg0KSBpZ25vcmUgaWYgcmVmbmFtZSBpcyBhIHJlZiB0aGF0IGV4aXN0cyBpbiB0aGUgbG9jYWwgcmVwb3NpdG9yeTsKKyAqICg1KSBvdGhlcndpc2Ugb3V0cHV0IHRoZSBsaW5lLgorICovCitzdGF0aWMgaW50IGV4Y2x1ZGVfZXhpc3RpbmcoY29uc3QgY2hhciAqbWF0Y2gpCit7CisJc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBleGlzdGluZ19yZWZzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJY2hhciBidWZbMTAyNF07CisJaW50IG1hdGNobGVuID0gbWF0Y2ggPyBzdHJsZW4obWF0Y2gpIDogMDsKKworCWZvcl9lYWNoX3JlZihhZGRfZXhpc3RpbmcsICZleGlzdGluZ19yZWZzKTsKKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pKSB7CisJCWNoYXIgKnJlZjsKKwkJaW50IGxlbiA9IHN0cmxlbihidWYpOworCisJCWlmIChsZW4gPiAwICYmIGJ1ZltsZW4gLSAxXSA9PSAnXG4nKQorCQkJYnVmWy0tbGVuXSA9ICdcMCc7CisJCWlmICgzIDw9IGxlbiAmJiAhc3RyY21wKGJ1ZiArIGxlbiAtIDMsICJee30iKSkgeworCQkJbGVuIC09IDM7CisJCQlidWZbbGVuXSA9ICdcMCc7CisJCX0KKwkJZm9yIChyZWYgPSBidWYgKyBsZW47IGJ1ZiA8IHJlZjsgcmVmLS0pCisJCQlpZiAoaXNzcGFjZShyZWZbLTFdKSkKKwkJCQlicmVhazsKKwkJaWYgKG1hdGNoKSB7CisJCQlpbnQgcmVmbGVuID0gYnVmICsgbGVuIC0gcmVmOworCQkJaWYgKHJlZmxlbiA8IG1hdGNobGVuKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHN0cm5jbXAocmVmLCBtYXRjaCwgbWF0Y2hsZW4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChyZWYsIDApKSB7CisJCQl3YXJuaW5nKCJyZWYgJyVzJyBpZ25vcmVkIiwgcmVmKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmZXhpc3RpbmdfcmVmcywgcmVmKSkgeworCQkJcHJpbnRmKCIlc1xuIiwgYnVmKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYXNoX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaGFzaF9vbmx5ID0gMTsKKwkvKiBVc2UgZnVsbCBsZW5ndGggU0hBMSBpZiBubyBhcmd1bWVudCAqLworCWlmICghYXJnKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcGFyc2Vfb3B0X2FiYnJldl9jYihvcHQsIGFyZywgdW5zZXQpOworfQorCitzdGF0aWMgaW50IGV4Y2x1ZGVfZXhpc3RpbmdfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkJICAgICBpbnQgdW5zZXQpCit7CisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCWV4Y2x1ZGVfYXJnID0gMTsKKwkqKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gc2hvd19yZWZfb3B0aW9uc1tdID0geworCU9QVF9CT09MKDAsICJ0YWdzIiwgJnRhZ3Nfb25seSwgTl8oIm9ubHkgc2hvdyB0YWdzIChjYW4gYmUgY29tYmluZWQgd2l0aCBoZWFkcykiKSksCisJT1BUX0JPT0woMCwgImhlYWRzIiwgJmhlYWRzX29ubHksIE5fKCJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIikpLAorCU9QVF9CT09MKDAsICJ2ZXJpZnkiLCAmdmVyaWZ5LCBOXygic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCAiCisJCSAgICAicmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiKSksCisJT1BUX0hJRERFTl9CT09MKCdoJywgTlVMTCwgJnNob3dfaGVhZCwKKwkJCU5fKCJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSwgZXZlbiBpZiBpdCB3b3VsZCBiZSBmaWx0ZXJlZCBvdXQiKSksCisJT1BUX0JPT0woMCwgImhlYWQiLCAmc2hvd19oZWFkLAorCSAgTl8oInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIpKSwKKwlPUFRfQk9PTCgnZCcsICJkZXJlZmVyZW5jZSIsICZkZXJlZl90YWdzLAorCQkgICAgTl8oImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIikpLAorCU9QVF9DQUxMQkFDS19GKCdzJywgImhhc2giLCAmYWJicmV2LCBOXygibiIpLAorCQkgICAgICAgTl8oIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIpLAorCQkgICAgICAgUEFSU0VfT1BUX09QVEFSRywgJmhhc2hfY2FsbGJhY2spLAorCU9QVF9fQUJCUkVWKCZhYmJyZXYpLAorCU9QVF9fUVVJRVQoJnF1aWV0LAorCQkgICBOXygiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiKSksCisJT1BUX0NBTExCQUNLX0YoMCwgImV4Y2x1ZGUtZXhpc3RpbmciLCAmZXhjbHVkZV9leGlzdGluZ19hcmcsCisJCSAgICAgICBOXygicGF0dGVybiIpLCBOXygic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIpLAorCQkgICAgICAgUEFSU0VfT1BUX09QVEFSRyB8IFBBUlNFX09QVF9OT05FRywgZXhjbHVkZV9leGlzdGluZ19jYWxsYmFjayksCisJT1BUX0VORCgpCit9OworCitpbnQgY21kX3Nob3dfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgc2hvd19yZWZfb3B0aW9ucywKKwkJCSAgICAgc2hvd19yZWZfdXNhZ2UsIDApOworCisJaWYgKGV4Y2x1ZGVfYXJnKQorCQlyZXR1cm4gZXhjbHVkZV9leGlzdGluZyhleGNsdWRlX2V4aXN0aW5nX2FyZyk7CisKKwlwYXR0ZXJuID0gYXJndjsKKwlpZiAoISpwYXR0ZXJuKQorCQlwYXR0ZXJuID0gTlVMTDsKKworCWlmICh2ZXJpZnkpIHsKKwkJaWYgKCFwYXR0ZXJuKQorCQkJZGllKCItLXZlcmlmeSByZXF1aXJlcyBhIHJlZmVyZW5jZSIpOworCQl3aGlsZSAoKnBhdHRlcm4pIHsKKwkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCQlpZiAoKHN0YXJ0c193aXRoKCpwYXR0ZXJuLCAicmVmcy8iKSB8fCAhc3RyY21wKCpwYXR0ZXJuLCAiSEVBRCIpKSAmJgorCQkJICAgICFyZWFkX3JlZigqcGF0dGVybiwgJm9pZCkpIHsKKwkJCQlzaG93X29uZSgqcGF0dGVybiwgJm9pZCk7CisJCQl9CisJCQllbHNlIGlmICghcXVpZXQpCisJCQkJZGllKCInJXMnIC0gbm90IGEgdmFsaWQgcmVmIiwgKnBhdHRlcm4pOworCQkJZWxzZQorCQkJCXJldHVybiAxOworCQkJcGF0dGVybisrOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChzaG93X2hlYWQpCisJCWhlYWRfcmVmKHNob3dfcmVmLCBOVUxMKTsKKwlmb3JfZWFjaF9yZWYoc2hvd19yZWYsIE5VTEwpOworCWlmICghZm91bmRfbWF0Y2gpIHsKKwkJaWYgKHZlcmlmeSAmJiAhcXVpZXQpCisJCQlkaWUoIk5vIG1hdGNoIik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmMgYi9idWlsdGluL3NwYXJzZS1jaGVja291dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZDA4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3NwYXJzZS1jaGVja291dC5jCkBAIC0wLDAgKzEsNjIwIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJ3dC1zdGF0dXMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqZW1wdHlfYmFzZSA9ICIiOworCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGJ1aWx0aW5fc3BhcnNlX2NoZWNrb3V0X3VzYWdlW10gPSB7CisJTl8oImdpdCBzcGFyc2UtY2hlY2tvdXQgKGluaXR8bGlzdHxzZXR8YWRkfHJlYXBwbHl8ZGlzYWJsZSkgPG9wdGlvbnM+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNoYXIgKmdldF9zcGFyc2VfY2hlY2tvdXRfZmlsZW5hbWUodm9pZCkKK3sKKwlyZXR1cm4gZ2l0X3BhdGhkdXAoImluZm8vc3BhcnNlLWNoZWNrb3V0Iik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3BhdHRlcm5zX3RvX2ZpbGUoRklMRSAqZnAsIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHBsLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBwYXRoX3BhdHRlcm4gKnAgPSBwbC0+cGF0dGVybnNbaV07CisKKwkJaWYgKHAtPmZsYWdzICYgUEFUVEVSTl9GTEFHX05FR0FUSVZFKQorCQkJZnByaW50ZihmcCwgIiEiKTsKKworCQlmcHJpbnRmKGZwLCAiJXMiLCBwLT5wYXR0ZXJuKTsKKworCQlpZiAocC0+ZmxhZ3MgJiBQQVRURVJOX0ZMQUdfTVVTVEJFRElSKQorCQkJZnByaW50ZihmcCwgIi8iKTsKKworCQlmcHJpbnRmKGZwLCAiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3BhcnNlX2NoZWNrb3V0X2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBwYXR0ZXJuX2xpc3QgcGw7CisJY2hhciAqc3BhcnNlX2ZpbGVuYW1lOworCWludCByZXM7CisKKwltZW1zZXQoJnBsLCAwLCBzaXplb2YocGwpKTsKKworCXBsLnVzZV9jb25lX3BhdHRlcm5zID0gY29yZV9zcGFyc2VfY2hlY2tvdXRfY29uZTsKKworCXNwYXJzZV9maWxlbmFtZSA9IGdldF9zcGFyc2VfY2hlY2tvdXRfZmlsZW5hbWUoKTsKKwlyZXMgPSBhZGRfcGF0dGVybnNfZnJvbV9maWxlX3RvX2xpc3Qoc3BhcnNlX2ZpbGVuYW1lLCAiIiwgMCwgJnBsLCBOVUxMKTsKKwlmcmVlKHNwYXJzZV9maWxlbmFtZSk7CisKKwlpZiAocmVzIDwgMCkgeworCQl3YXJuaW5nKF8oInRoaXMgd29ya3RyZWUgaXMgbm90IHNwYXJzZSAoc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IG5vdCBleGlzdCkiKSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChwbC51c2VfY29uZV9wYXR0ZXJucykgeworCQlpbnQgaTsKKwkJc3RydWN0IHBhdHRlcm5fZW50cnkgKnBlOworCQlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBzbCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJCWhhc2htYXBfZm9yX2VhY2hfZW50cnkoJnBsLnJlY3Vyc2l2ZV9oYXNobWFwLCAmaXRlciwgcGUsIGVudCkgeworCQkJLyogcGUtPnBhdHRlcm4gc3RhcnRzIHdpdGggIi8iLCBza2lwIGl0ICovCisJCQlzdHJpbmdfbGlzdF9pbnNlcnQoJnNsLCBwZS0+cGF0dGVybiArIDEpOworCQl9CisKKwkJc3RyaW5nX2xpc3Rfc29ydCgmc2wpOworCisJCWZvciAoaSA9IDA7IGkgPCBzbC5ucjsgaSsrKSB7CisJCQlxdW90ZV9jX3N0eWxlKHNsLml0ZW1zW2ldLnN0cmluZywgTlVMTCwgc3Rkb3V0LCAwKTsKKwkJCXByaW50ZigiXG4iKTsKKwkJfQorCisJCXJldHVybiAwOworCX0KKworCXdyaXRlX3BhdHRlcm5zX3RvX2ZpbGUoc3Rkb3V0LCAmcGwpOworCWNsZWFyX3BhdHRlcm5fbGlzdCgmcGwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX3dvcmtpbmdfZGlyZWN0b3J5KHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKQoreworCWVudW0gdXBkYXRlX3NwYXJzaXR5X3Jlc3VsdCByZXN1bHQ7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG87CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGUgPSBMT0NLX0lOSVQ7CisJc3RydWN0IHJlcG9zaXRvcnkgKnIgPSB0aGVfcmVwb3NpdG9yeTsKKworCW1lbXNldCgmbywgMCwgc2l6ZW9mKG8pKTsKKwlvLnZlcmJvc2VfdXBkYXRlID0gaXNhdHR5KDIpOworCW8udXBkYXRlID0gMTsKKwlvLmhlYWRfaWR4ID0gLTE7CisJby5zcmNfaW5kZXggPSByLT5pbmRleDsKKwlvLmRzdF9pbmRleCA9IHItPmluZGV4OworCW8uc2tpcF9zcGFyc2VfY2hlY2tvdXQgPSAwOworCW8ucGwgPSBwbDsKKworCXNldHVwX3dvcmtfdHJlZSgpOworCisJcmVwb19ob2xkX2xvY2tlZF9pbmRleChyLCAmbG9ja19maWxlLCBMT0NLX0RJRV9PTl9FUlJPUik7CisKKwlzZXR1cF91bnBhY2tfdHJlZXNfcG9yY2VsYWluKCZvLCAic3BhcnNlLWNoZWNrb3V0Iik7CisJcmVzdWx0ID0gdXBkYXRlX3NwYXJzaXR5KCZvKTsKKwljbGVhcl91bnBhY2tfdHJlZXNfcG9yY2VsYWluKCZvKTsKKworCWlmIChyZXN1bHQgPT0gVVBEQVRFX1NQQVJTSVRZX1dBUk5JTkdTKQorCQkvKgorCQkgKiBXZSBkb24ndCBkbyBhbnkgc3BlY2lhbCBoYW5kbGluZyBvZiB3YXJuaW5ncyBmcm9tIHVudHJhY2tlZAorCQkgKiBmaWxlcyBpbiB0aGUgd2F5IG9yIGRpcnR5IGVudHJpZXMgdGhhdCBjYW4ndCBiZSByZW1vdmVkLgorCQkgKi8KKwkJcmVzdWx0ID0gVVBEQVRFX1NQQVJTSVRZX1NVQ0NFU1M7CisJaWYgKHJlc3VsdCA9PSBVUERBVEVfU1BBUlNJVFlfU1VDQ0VTUykKKwkJd3JpdGVfbG9ja2VkX2luZGV4KHItPmluZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSyk7CisJZWxzZQorCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2tfZmlsZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgY2hhciAqZXNjYXBlZF9wYXR0ZXJuKGNoYXIgKnBhdHRlcm4pCit7CisJY2hhciAqcCA9IHBhdHRlcm47CisJc3RydWN0IHN0cmJ1ZiBmaW5hbCA9IFNUUkJVRl9JTklUOworCisJd2hpbGUgKCpwKSB7CisJCWlmIChpc19nbG9iX3NwZWNpYWwoKnApKQorCQkJc3RyYnVmX2FkZGNoKCZmaW5hbCwgJ1xcJyk7CisKKwkJc3RyYnVmX2FkZGNoKCZmaW5hbCwgKnApOworCQlwKys7CisJfQorCisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmZpbmFsLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfY29uZV90b19maWxlKEZJTEUgKmZwLCBzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcGF0dGVybl9lbnRyeSAqcGU7CisJc3RydWN0IGhhc2htYXBfaXRlciBpdGVyOworCXN0cnVjdCBzdHJpbmdfbGlzdCBzbCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJidWYgcGFyZW50X3BhdHRlcm4gPSBTVFJCVUZfSU5JVDsKKworCWhhc2htYXBfZm9yX2VhY2hfZW50cnkoJnBsLT5wYXJlbnRfaGFzaG1hcCwgJml0ZXIsIHBlLCBlbnQpIHsKKwkJaWYgKGhhc2htYXBfZ2V0X2VudHJ5KCZwbC0+cmVjdXJzaXZlX2hhc2htYXAsIHBlLCBlbnQsIE5VTEwpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFoYXNobWFwX2NvbnRhaW5zX3BhcmVudCgmcGwtPnJlY3Vyc2l2ZV9oYXNobWFwLAorCQkJCQkgICAgIHBlLT5wYXR0ZXJuLAorCQkJCQkgICAgICZwYXJlbnRfcGF0dGVybikpCisJCQlzdHJpbmdfbGlzdF9pbnNlcnQoJnNsLCBwZS0+cGF0dGVybik7CisJfQorCisJc3RyaW5nX2xpc3Rfc29ydCgmc2wpOworCXN0cmluZ19saXN0X3JlbW92ZV9kdXBsaWNhdGVzKCZzbCwgMCk7CisKKwlmcHJpbnRmKGZwLCAiLypcbiEvKi9cbiIpOworCisJZm9yIChpID0gMDsgaSA8IHNsLm5yOyBpKyspIHsKKwkJY2hhciAqcGF0dGVybiA9IGVzY2FwZWRfcGF0dGVybihzbC5pdGVtc1tpXS5zdHJpbmcpOworCisJCWlmIChzdHJsZW4ocGF0dGVybikpCisJCQlmcHJpbnRmKGZwLCAiJXMvXG4hJXMvKi9cbiIsIHBhdHRlcm4sIHBhdHRlcm4pOworCQlmcmVlKHBhdHRlcm4pOworCX0KKworCXN0cmluZ19saXN0X2NsZWFyKCZzbCwgMCk7CisKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KCZwbC0+cmVjdXJzaXZlX2hhc2htYXAsICZpdGVyLCBwZSwgZW50KSB7CisJCWlmICghaGFzaG1hcF9jb250YWluc19wYXJlbnQoJnBsLT5yZWN1cnNpdmVfaGFzaG1hcCwKKwkJCQkJICAgICBwZS0+cGF0dGVybiwKKwkJCQkJICAgICAmcGFyZW50X3BhdHRlcm4pKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZzbCwgcGUtPnBhdHRlcm4pOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZwYXJlbnRfcGF0dGVybik7CisKKwlzdHJpbmdfbGlzdF9zb3J0KCZzbCk7CisJc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXMoJnNsLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBzbC5ucjsgaSsrKSB7CisJCWNoYXIgKnBhdHRlcm4gPSBlc2NhcGVkX3BhdHRlcm4oc2wuaXRlbXNbaV0uc3RyaW5nKTsKKwkJZnByaW50ZihmcCwgIiVzL1xuIiwgcGF0dGVybik7CisJCWZyZWUocGF0dGVybik7CisJfQorfQorCitzdGF0aWMgaW50IHdyaXRlX3BhdHRlcm5zX2FuZF91cGRhdGUoc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwpCit7CisJY2hhciAqc3BhcnNlX2ZpbGVuYW1lOworCUZJTEUgKmZwOworCWludCBmZDsKKwlzdHJ1Y3QgbG9ja19maWxlIGxrID0gTE9DS19JTklUOworCWludCByZXN1bHQ7CisKKwlzcGFyc2VfZmlsZW5hbWUgPSBnZXRfc3BhcnNlX2NoZWNrb3V0X2ZpbGVuYW1lKCk7CisKKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhzcGFyc2VfZmlsZW5hbWUpKQorCQlkaWUoXygiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yIHNwYXJzZS1jaGVja291dCBmaWxlIikpOworCisJZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsaywgc3BhcnNlX2ZpbGVuYW1lLAorCQkJCSAgICAgIExPQ0tfRElFX09OX0VSUk9SKTsKKworCXJlc3VsdCA9IHVwZGF0ZV93b3JraW5nX2RpcmVjdG9yeShwbCk7CisJaWYgKHJlc3VsdCkgeworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxrKTsKKwkJZnJlZShzcGFyc2VfZmlsZW5hbWUpOworCQljbGVhcl9wYXR0ZXJuX2xpc3QocGwpOworCQl1cGRhdGVfd29ya2luZ19kaXJlY3RvcnkoTlVMTCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJZnAgPSB4ZmRvcGVuKGZkLCAidyIpOworCisJaWYgKGNvcmVfc3BhcnNlX2NoZWNrb3V0X2NvbmUpCisJCXdyaXRlX2NvbmVfdG9fZmlsZShmcCwgcGwpOworCWVsc2UKKwkJd3JpdGVfcGF0dGVybnNfdG9fZmlsZShmcCwgcGwpOworCisJZmZsdXNoKGZwKTsKKwljb21taXRfbG9ja19maWxlKCZsayk7CisKKwlmcmVlKHNwYXJzZV9maWxlbmFtZSk7CisJY2xlYXJfcGF0dGVybl9saXN0KHBsKTsKKworCXJldHVybiAwOworfQorCitlbnVtIHNwYXJzZV9jaGVja291dF9tb2RlIHsKKwlNT0RFX05PX1BBVFRFUk5TID0gMCwKKwlNT0RFX0FMTF9QQVRURVJOUyA9IDEsCisJTU9ERV9DT05FX1BBVFRFUk5TID0gMiwKK307CisKK3N0YXRpYyBpbnQgc2V0X2NvbmZpZyhlbnVtIHNwYXJzZV9jaGVja291dF9tb2RlIG1vZGUpCit7CisJY29uc3QgY2hhciAqY29uZmlnX3BhdGg7CisKKwlpZiAoZ2l0X2NvbmZpZ19zZXRfZ2VudGx5KCJleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIiwgInRydWUiKSkgeworCQllcnJvcihfKCJmYWlsZWQgdG8gc2V0IGV4dGVuc2lvbnMud29ya3RyZWVDb25maWcgc2V0dGluZyIpKTsKKwkJcmV0dXJuIDE7CisJfQorCisJY29uZmlnX3BhdGggPSBnaXRfcGF0aCgiY29uZmlnLndvcmt0cmVlIik7CisJZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkoY29uZmlnX3BhdGgsCisJCQkJICAgICAgImNvcmUuc3BhcnNlQ2hlY2tvdXQiLAorCQkJCSAgICAgIG1vZGUgPyAidHJ1ZSIgOiBOVUxMKTsKKworCWdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KGNvbmZpZ19wYXRoLAorCQkJCSAgICAgICJjb3JlLnNwYXJzZUNoZWNrb3V0Q29uZSIsCisJCQkJICAgICAgbW9kZSA9PSBNT0RFX0NPTkVfUEFUVEVSTlMgPyAidHJ1ZSIgOiBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGJ1aWx0aW5fc3BhcnNlX2NoZWNrb3V0X2luaXRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IFstLWNvbmVdIiksCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBzcGFyc2VfY2hlY2tvdXRfaW5pdF9vcHRzIHsKKwlpbnQgY29uZV9tb2RlOworfSBpbml0X29wdHM7CisKK3N0YXRpYyBpbnQgc3BhcnNlX2NoZWNrb3V0X2luaXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBwYXR0ZXJuX2xpc3QgcGw7CisJY2hhciAqc3BhcnNlX2ZpbGVuYW1lOworCWludCByZXM7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IG1vZGU7CisJc3RydWN0IHN0cmJ1ZiBwYXR0ZXJuID0gU1RSQlVGX0lOSVQ7CisKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX3NwYXJzZV9jaGVja291dF9pbml0X29wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woMCwgImNvbmUiLCAmaW5pdF9vcHRzLmNvbmVfbW9kZSwKKwkJCSBOXygiaW5pdGlhbGl6ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGluIGNvbmUgbW9kZSIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlyZXBvX3JlYWRfaW5kZXgodGhlX3JlcG9zaXRvcnkpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwKKwkJCSAgICAgYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfaW5pdF9vcHRpb25zLAorCQkJICAgICBidWlsdGluX3NwYXJzZV9jaGVja291dF9pbml0X3VzYWdlLCAwKTsKKworCWlmIChpbml0X29wdHMuY29uZV9tb2RlKSB7CisJCW1vZGUgPSBNT0RFX0NPTkVfUEFUVEVSTlM7CisJCWNvcmVfc3BhcnNlX2NoZWNrb3V0X2NvbmUgPSAxOworCX0gZWxzZQorCQltb2RlID0gTU9ERV9BTExfUEFUVEVSTlM7CisKKwlpZiAoc2V0X2NvbmZpZyhtb2RlKSkKKwkJcmV0dXJuIDE7CisKKwltZW1zZXQoJnBsLCAwLCBzaXplb2YocGwpKTsKKworCXNwYXJzZV9maWxlbmFtZSA9IGdldF9zcGFyc2VfY2hlY2tvdXRfZmlsZW5hbWUoKTsKKwlyZXMgPSBhZGRfcGF0dGVybnNfZnJvbV9maWxlX3RvX2xpc3Qoc3BhcnNlX2ZpbGVuYW1lLCAiIiwgMCwgJnBsLCBOVUxMKTsKKworCS8qIElmIHdlIGFscmVhZHkgaGF2ZSBhIHNwYXJzZS1jaGVja291dCBmaWxlLCB1c2UgaXQuICovCisJaWYgKHJlcyA+PSAwKSB7CisJCWZyZWUoc3BhcnNlX2ZpbGVuYW1lKTsKKwkJY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQgPSAxOworCQlyZXR1cm4gdXBkYXRlX3dvcmtpbmdfZGlyZWN0b3J5KE5VTEwpOworCX0KKworCWlmIChnZXRfb2lkKCJIRUFEIiwgJm9pZCkpIHsKKwkJRklMRSAqZnA7CisKKwkJLyogYXNzdW1lIHdlIGFyZSBpbiBhIGZyZXNoIHJlcG8sIGJ1dCB1cGRhdGUgdGhlIHNwYXJzZS1jaGVja291dCBmaWxlICovCisJCWZwID0geGZvcGVuKHNwYXJzZV9maWxlbmFtZSwgInciKTsKKwkJaWYgKCFmcCkKKwkJCWRpZShfKCJmYWlsZWQgdG8gb3BlbiAnJXMnIiksIHNwYXJzZV9maWxlbmFtZSk7CisKKwkJZnJlZShzcGFyc2VfZmlsZW5hbWUpOworCQlmcHJpbnRmKGZwLCAiLypcbiEvKi9cbiIpOworCQlmY2xvc2UoZnApOworCQlyZXR1cm4gMDsKKwl9CisKKwlzdHJidWZfYWRkc3RyKCZwYXR0ZXJuLCAiLyoiKTsKKwlhZGRfcGF0dGVybihzdHJidWZfZGV0YWNoKCZwYXR0ZXJuLCBOVUxMKSwgZW1wdHlfYmFzZSwgMCwgJnBsLCAwKTsKKwlzdHJidWZfYWRkc3RyKCZwYXR0ZXJuLCAiIS8qLyIpOworCWFkZF9wYXR0ZXJuKHN0cmJ1Zl9kZXRhY2goJnBhdHRlcm4sIE5VTEwpLCBlbXB0eV9iYXNlLCAwLCAmcGwsIDApOworCisJcmV0dXJuIHdyaXRlX3BhdHRlcm5zX2FuZF91cGRhdGUoJnBsKTsKK30KKworc3RhdGljIHZvaWQgaW5zZXJ0X3JlY3Vyc2l2ZV9wYXR0ZXJuKHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLCBzdHJ1Y3Qgc3RyYnVmICpwYXRoKQoreworCXN0cnVjdCBwYXR0ZXJuX2VudHJ5ICplID0geG1hbGxvYyhzaXplb2YoKmUpKTsKKwllLT5wYXR0ZXJubGVuID0gcGF0aC0+bGVuOworCWUtPnBhdHRlcm4gPSBzdHJidWZfZGV0YWNoKHBhdGgsIE5VTEwpOworCWhhc2htYXBfZW50cnlfaW5pdCgmZS0+ZW50LAorCQkJICAgaWdub3JlX2Nhc2UgPworCQkJICAgc3RyaWhhc2goZS0+cGF0dGVybikgOgorCQkJICAgc3RyaGFzaChlLT5wYXR0ZXJuKSk7CisKKwloYXNobWFwX2FkZCgmcGwtPnJlY3Vyc2l2ZV9oYXNobWFwLCAmZS0+ZW50KTsKKworCXdoaWxlIChlLT5wYXR0ZXJubGVuKSB7CisJCWNoYXIgKnNsYXNoID0gc3RycmNocihlLT5wYXR0ZXJuLCAnLycpOworCQljaGFyICpvbGRwYXR0ZXJuID0gZS0+cGF0dGVybjsKKwkJc2l6ZV90IG5ld2xlbjsKKworCQlpZiAoc2xhc2ggPT0gZS0+cGF0dGVybikKKwkJCWJyZWFrOworCisJCW5ld2xlbiA9IHNsYXNoIC0gZS0+cGF0dGVybjsKKwkJZSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYXR0ZXJuX2VudHJ5KSk7CisJCWUtPnBhdHRlcm5sZW4gPSBuZXdsZW47CisJCWUtPnBhdHRlcm4gPSB4c3RybmR1cChvbGRwYXR0ZXJuLCBuZXdsZW4pOworCQloYXNobWFwX2VudHJ5X2luaXQoJmUtPmVudCwKKwkJCQkgICBpZ25vcmVfY2FzZSA/CisJCQkJICAgc3RyaWhhc2goZS0+cGF0dGVybikgOgorCQkJCSAgIHN0cmhhc2goZS0+cGF0dGVybikpOworCisJCWlmICghaGFzaG1hcF9nZXRfZW50cnkoJnBsLT5wYXJlbnRfaGFzaG1hcCwgZSwgZW50LCBOVUxMKSkKKwkJCWhhc2htYXBfYWRkKCZwbC0+cGFyZW50X2hhc2htYXAsICZlLT5lbnQpOworCX0KK30KKworc3RhdGljIHZvaWQgc3RyYnVmX3RvX2NvbmVfcGF0dGVybihzdHJ1Y3Qgc3RyYnVmICpsaW5lLCBzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCkKK3sKKwlzdHJidWZfdHJpbShsaW5lKTsKKworCXN0cmJ1Zl90cmltX3RyYWlsaW5nX2Rpcl9zZXAobGluZSk7CisKKwlpZiAoc3RyYnVmX25vcm1hbGl6ZV9wYXRoKGxpbmUpKQorCQlkaWUoXygiY291bGQgbm90IG5vcm1hbGl6ZSBwYXRoICVzIiksIGxpbmUtPmJ1Zik7CisKKwlpZiAoIWxpbmUtPmxlbikKKwkJcmV0dXJuOworCisJaWYgKGxpbmUtPmJ1ZlswXSAhPSAnLycpCisJCXN0cmJ1Zl9pbnNlcnRzdHIobGluZSwgMCwgIi8iKTsKKworCWluc2VydF9yZWN1cnNpdmVfcGF0dGVybihwbCwgbGluZSk7Cit9CisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfc2V0X3VzYWdlW10gPSB7CisJTl8oImdpdCBzcGFyc2UtY2hlY2tvdXQgKHNldHxhZGQpICgtLXN0ZGluIHwgPHBhdHRlcm5zPikiKSwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IHNwYXJzZV9jaGVja291dF9zZXRfb3B0cyB7CisJaW50IHVzZV9zdGRpbjsKK30gc2V0X29wdHM7CisKK3N0YXRpYyB2b2lkIGFkZF9wYXR0ZXJuc19mcm9tX2lucHV0KHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLAorCQkJCSAgICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGk7CisJaWYgKGNvcmVfc3BhcnNlX2NoZWNrb3V0X2NvbmUpIHsKKwkJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwkJaGFzaG1hcF9pbml0KCZwbC0+cmVjdXJzaXZlX2hhc2htYXAsIHBsX2hhc2htYXBfY21wLCBOVUxMLCAwKTsKKwkJaGFzaG1hcF9pbml0KCZwbC0+cGFyZW50X2hhc2htYXAsIHBsX2hhc2htYXBfY21wLCBOVUxMLCAwKTsKKwkJcGwtPnVzZV9jb25lX3BhdHRlcm5zID0gMTsKKworCQlpZiAoc2V0X29wdHMudXNlX3N0ZGluKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHVucXVvdGVkID0gU1RSQlVGX0lOSVQ7CisJCQl3aGlsZSAoIXN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBzdGRpbikpIHsKKwkJCQlpZiAobGluZS5idWZbMF0gPT0gJyInKSB7CisJCQkJCXN0cmJ1Zl9yZXNldCgmdW5xdW90ZWQpOworCQkJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZ1bnF1b3RlZCwgbGluZS5idWYsIE5VTEwpKQorCQkJCQkJZGllKF8oInVuYWJsZSB0byB1bnF1b3RlIEMtc3R5bGUgc3RyaW5nICclcyciKSwKKwkJCQkJCWxpbmUuYnVmKTsKKworCQkJCQlzdHJidWZfc3dhcCgmdW5xdW90ZWQsICZsaW5lKTsKKwkJCQl9CisKKwkJCQlzdHJidWZfdG9fY29uZV9wYXR0ZXJuKCZsaW5lLCBwbCk7CisJCQl9CisKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZ1bnF1b3RlZCk7CisJCX0gZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCQkJc3RyYnVmX3NldGxlbigmbGluZSwgMCk7CisJCQkJc3RyYnVmX2FkZHN0cigmbGluZSwgYXJndltpXSk7CisJCQkJc3RyYnVmX3RvX2NvbmVfcGF0dGVybigmbGluZSwgcGwpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKHNldF9vcHRzLnVzZV9zdGRpbikgeworCQkJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwkJCXdoaWxlICghc3RyYnVmX2dldGxpbmUoJmxpbmUsIHN0ZGluKSkgeworCQkJCXNpemVfdCBsZW47CisJCQkJY2hhciAqYnVmID0gc3RyYnVmX2RldGFjaCgmbGluZSwgJmxlbik7CisJCQkJYWRkX3BhdHRlcm4oYnVmLCBlbXB0eV9iYXNlLCAwLCBwbCwgMCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQkJCWFkZF9wYXR0ZXJuKGFyZ3ZbaV0sIGVtcHR5X2Jhc2UsIDAsIHBsLCAwKTsKKwkJfQorCX0KK30KKworZW51bSBtb2RpZnlfdHlwZSB7CisJUkVQTEFDRSwKKwlBREQsCit9OworCitzdGF0aWMgdm9pZCBhZGRfcGF0dGVybnNfY29uZV9tb2RlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCQkgICBzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBwYXR0ZXJuX2VudHJ5ICpwZTsKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisJc3RydWN0IHBhdHRlcm5fbGlzdCBleGlzdGluZzsKKwljaGFyICpzcGFyc2VfZmlsZW5hbWUgPSBnZXRfc3BhcnNlX2NoZWNrb3V0X2ZpbGVuYW1lKCk7CisKKwlhZGRfcGF0dGVybnNfZnJvbV9pbnB1dChwbCwgYXJnYywgYXJndik7CisKKwltZW1zZXQoJmV4aXN0aW5nLCAwLCBzaXplb2YoZXhpc3RpbmcpKTsKKwlleGlzdGluZy51c2VfY29uZV9wYXR0ZXJucyA9IGNvcmVfc3BhcnNlX2NoZWNrb3V0X2NvbmU7CisKKwlpZiAoYWRkX3BhdHRlcm5zX2Zyb21fZmlsZV90b19saXN0KHNwYXJzZV9maWxlbmFtZSwgIiIsIDAsCisJCQkJCSAgICZleGlzdGluZywgTlVMTCkpCisJCWRpZShfKCJ1bmFibGUgdG8gbG9hZCBleGlzdGluZyBzcGFyc2UtY2hlY2tvdXQgcGF0dGVybnMiKSk7CisJZnJlZShzcGFyc2VfZmlsZW5hbWUpOworCisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeSgmZXhpc3RpbmcucmVjdXJzaXZlX2hhc2htYXAsICZpdGVyLCBwZSwgZW50KSB7CisJCWlmICghaGFzaG1hcF9jb250YWluc19wYXJlbnQoJnBsLT5yZWN1cnNpdmVfaGFzaG1hcCwKKwkJCQkJcGUtPnBhdHRlcm4sICZidWZmZXIpIHx8CisJCSAgICAhaGFzaG1hcF9jb250YWluc19wYXJlbnQoJnBsLT5wYXJlbnRfaGFzaG1hcCwKKwkJCQkJcGUtPnBhdHRlcm4sICZidWZmZXIpKSB7CisJCQlzdHJidWZfcmVzZXQoJmJ1ZmZlcik7CisJCQlzdHJidWZfYWRkc3RyKCZidWZmZXIsIHBlLT5wYXR0ZXJuKTsKKwkJCWluc2VydF9yZWN1cnNpdmVfcGF0dGVybihwbCwgJmJ1ZmZlcik7CisJCX0KKwl9CisKKwljbGVhcl9wYXR0ZXJuX2xpc3QoJmV4aXN0aW5nKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKK30KKworc3RhdGljIHZvaWQgYWRkX3BhdHRlcm5zX2xpdGVyYWwoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJCSBzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCkKK3sKKwljaGFyICpzcGFyc2VfZmlsZW5hbWUgPSBnZXRfc3BhcnNlX2NoZWNrb3V0X2ZpbGVuYW1lKCk7CisJaWYgKGFkZF9wYXR0ZXJuc19mcm9tX2ZpbGVfdG9fbGlzdChzcGFyc2VfZmlsZW5hbWUsICIiLCAwLAorCQkJCQkgICBwbCwgTlVMTCkpCisJCWRpZShfKCJ1bmFibGUgdG8gbG9hZCBleGlzdGluZyBzcGFyc2UtY2hlY2tvdXQgcGF0dGVybnMiKSk7CisJZnJlZShzcGFyc2VfZmlsZW5hbWUpOworCWFkZF9wYXR0ZXJuc19mcm9tX2lucHV0KHBsLCBhcmdjLCBhcmd2KTsKK30KKworc3RhdGljIGludCBtb2RpZnlfcGF0dGVybl9saXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgZW51bSBtb2RpZnlfdHlwZSBtKQoreworCWludCByZXN1bHQ7CisJaW50IGNoYW5nZWRfY29uZmlnID0gMDsKKwlzdHJ1Y3QgcGF0dGVybl9saXN0IHBsOworCW1lbXNldCgmcGwsIDAsIHNpemVvZihwbCkpOworCisJc3dpdGNoIChtKSB7CisJY2FzZSBBREQ6CisJCWlmIChjb3JlX3NwYXJzZV9jaGVja291dF9jb25lKQorCQkJYWRkX3BhdHRlcm5zX2NvbmVfbW9kZShhcmdjLCBhcmd2LCAmcGwpOworCQllbHNlCisJCQlhZGRfcGF0dGVybnNfbGl0ZXJhbChhcmdjLCBhcmd2LCAmcGwpOworCQlicmVhazsKKworCWNhc2UgUkVQTEFDRToKKwkJYWRkX3BhdHRlcm5zX2Zyb21faW5wdXQoJnBsLCBhcmdjLCBhcmd2KTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFjb3JlX2FwcGx5X3NwYXJzZV9jaGVja291dCkgeworCQlzZXRfY29uZmlnKE1PREVfQUxMX1BBVFRFUk5TKTsKKwkJY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQgPSAxOworCQljaGFuZ2VkX2NvbmZpZyA9IDE7CisJfQorCisJcmVzdWx0ID0gd3JpdGVfcGF0dGVybnNfYW5kX3VwZGF0ZSgmcGwpOworCisJaWYgKHJlc3VsdCAmJiBjaGFuZ2VkX2NvbmZpZykKKwkJc2V0X2NvbmZpZyhNT0RFX05PX1BBVFRFUk5TKTsKKworCWNsZWFyX3BhdHRlcm5fbGlzdCgmcGwpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc3BhcnNlX2NoZWNrb3V0X3NldChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgICBlbnVtIG1vZGlmeV90eXBlIG0pCit7CisJc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfc2V0X29wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woMCwgInN0ZGluIiwgJnNldF9vcHRzLnVzZV9zdGRpbiwKKwkJCSBOXygicmVhZCBwYXR0ZXJucyBmcm9tIHN0YW5kYXJkIGluIikpLAorCQlPUFRfRU5EKCksCisJfTsKKworCXJlcG9fcmVhZF9pbmRleCh0aGVfcmVwb3NpdG9yeSk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQkgICAgIGJ1aWx0aW5fc3BhcnNlX2NoZWNrb3V0X3NldF9vcHRpb25zLAorCQkJICAgICBidWlsdGluX3NwYXJzZV9jaGVja291dF9zZXRfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX1VOS05PV04pOworCisJcmV0dXJuIG1vZGlmeV9wYXR0ZXJuX2xpc3QoYXJnYywgYXJndiwgbSk7Cit9CisKK3N0YXRpYyBpbnQgc3BhcnNlX2NoZWNrb3V0X3JlYXBwbHkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXJlcG9fcmVhZF9pbmRleCh0aGVfcmVwb3NpdG9yeSk7CisJcmV0dXJuIHVwZGF0ZV93b3JraW5nX2RpcmVjdG9yeShOVUxMKTsKK30KKworc3RhdGljIGludCBzcGFyc2VfY2hlY2tvdXRfZGlzYWJsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHBhdHRlcm5fbGlzdCBwbDsKKwlzdHJ1Y3Qgc3RyYnVmIG1hdGNoX2FsbCA9IFNUUkJVRl9JTklUOworCisJcmVwb19yZWFkX2luZGV4KHRoZV9yZXBvc2l0b3J5KTsKKworCW1lbXNldCgmcGwsIDAsIHNpemVvZihwbCkpOworCWhhc2htYXBfaW5pdCgmcGwucmVjdXJzaXZlX2hhc2htYXAsIHBsX2hhc2htYXBfY21wLCBOVUxMLCAwKTsKKwloYXNobWFwX2luaXQoJnBsLnBhcmVudF9oYXNobWFwLCBwbF9oYXNobWFwX2NtcCwgTlVMTCwgMCk7CisJcGwudXNlX2NvbmVfcGF0dGVybnMgPSAwOworCWNvcmVfYXBwbHlfc3BhcnNlX2NoZWNrb3V0ID0gMTsKKworCXN0cmJ1Zl9hZGRzdHIoJm1hdGNoX2FsbCwgIi8qIik7CisJYWRkX3BhdHRlcm4oc3RyYnVmX2RldGFjaCgmbWF0Y2hfYWxsLCBOVUxMKSwgZW1wdHlfYmFzZSwgMCwgJnBsLCAwKTsKKworCWlmICh1cGRhdGVfd29ya2luZ19kaXJlY3RvcnkoJnBsKSkKKwkJZGllKF8oImVycm9yIHdoaWxlIHJlZnJlc2hpbmcgd29ya2luZyBkaXJlY3RvcnkiKSk7CisKKwljbGVhcl9wYXR0ZXJuX2xpc3QoJnBsKTsKKwlyZXR1cm4gc2V0X2NvbmZpZyhNT0RFX05PX1BBVFRFUk5TKTsKK30KKworaW50IGNtZF9zcGFyc2VfY2hlY2tvdXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCksCisJfTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fc3BhcnNlX2NoZWNrb3V0X3VzYWdlLAorCQkJCSAgIGJ1aWx0aW5fc3BhcnNlX2NoZWNrb3V0X29wdGlvbnMpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LAorCQkJICAgICBidWlsdGluX3NwYXJzZV9jaGVja291dF9vcHRpb25zLAorCQkJICAgICBidWlsdGluX3NwYXJzZV9jaGVja291dF91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlpZiAoYXJnYyA+IDApIHsKKwkJaWYgKCFzdHJjbXAoYXJndlswXSwgImxpc3QiKSkKKwkJCXJldHVybiBzcGFyc2VfY2hlY2tvdXRfbGlzdChhcmdjLCBhcmd2KTsKKwkJaWYgKCFzdHJjbXAoYXJndlswXSwgImluaXQiKSkKKwkJCXJldHVybiBzcGFyc2VfY2hlY2tvdXRfaW5pdChhcmdjLCBhcmd2KTsKKwkJaWYgKCFzdHJjbXAoYXJndlswXSwgInNldCIpKQorCQkJcmV0dXJuIHNwYXJzZV9jaGVja291dF9zZXQoYXJnYywgYXJndiwgcHJlZml4LCBSRVBMQUNFKTsKKwkJaWYgKCFzdHJjbXAoYXJndlswXSwgImFkZCIpKQorCQkJcmV0dXJuIHNwYXJzZV9jaGVja291dF9zZXQoYXJnYywgYXJndiwgcHJlZml4LCBBREQpOworCQlpZiAoIXN0cmNtcChhcmd2WzBdLCAicmVhcHBseSIpKQorCQkJcmV0dXJuIHNwYXJzZV9jaGVja291dF9yZWFwcGx5KGFyZ2MsIGFyZ3YpOworCQlpZiAoIXN0cmNtcChhcmd2WzBdLCAiZGlzYWJsZSIpKQorCQkJcmV0dXJuIHNwYXJzZV9jaGVja291dF9kaXNhYmxlKGFyZ2MsIGFyZ3YpOworCX0KKworCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3NwYXJzZV9jaGVja291dF91c2FnZSwKKwkJCSAgIGJ1aWx0aW5fc3BhcnNlX2NoZWNrb3V0X29wdGlvbnMpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zdGFzaC5jIGIvYnVpbHRpbi9zdGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNTJhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3N0YXNoLmMKQEAgLTAsMCArMSwxNjE1IEBACisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJtZXJnZS1yZWN1cnNpdmUuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJyZXJlcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorCisjZGVmaW5lIElOQ0xVREVfQUxMX0ZJTEVTIDIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfc3Rhc2hfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHN0YXNoIGxpc3QgWzxvcHRpb25zPl0iKSwKKwlOXygiZ2l0IHN0YXNoIHNob3cgWzxvcHRpb25zPl0gWzxzdGFzaD5dIiksCisJTl8oImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iKSwKKwlOXygiZ2l0IHN0YXNoICggcG9wIHwgYXBwbHkgKSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIpLAorCU5fKCJnaXQgc3Rhc2ggYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl0iKSwKKwlOXygiZ2l0IHN0YXNoIGNsZWFyIiksCisJTl8oImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKwkgICAiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XVxuIgorCSAgICIgICAgICAgICAgWy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPiBbLS1wYXRoc3BlYy1maWxlLW51bF1dXG4iCisJICAgIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iKSwKKwlOXygiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisJICAgIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPG1lc3NhZ2U+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3N0YXNoX2xpc3RfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHN0YXNoIGxpc3QgWzxvcHRpb25zPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9zdGFzaF9zaG93X3VzYWdlW10gPSB7CisJTl8oImdpdCBzdGFzaCBzaG93IFs8b3B0aW9ucz5dIFs8c3Rhc2g+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3N0YXNoX2Ryb3BfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3N0YXNoX3BvcF91c2FnZVtdID0geworCU5fKCJnaXQgc3Rhc2ggcG9wIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfc3Rhc2hfYXBwbHlfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfc3Rhc2hfYnJhbmNoX3VzYWdlW10gPSB7CisJTl8oImdpdCBzdGFzaCBicmFuY2ggPGJyYW5jaG5hbWU+IFs8c3Rhc2g+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3N0YXNoX2NsZWFyX3VzYWdlW10gPSB7CisJTl8oImdpdCBzdGFzaCBjbGVhciIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3N0YXNoX3N0b3JlX3VzYWdlW10gPSB7CisJTl8oImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfc3Rhc2hfcHVzaF91c2FnZVtdID0geworCU5fKCJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisJICAgIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl1cbiIKKwkgICAiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3N0YXNoX3NhdmVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisJICAgIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPG1lc3NhZ2U+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZWZfc3Rhc2ggPSAicmVmcy9zdGFzaCI7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBzdGFzaF9pbmRleF9wYXRoID0gU1RSQlVGX0lOSVQ7CisKKy8qCisgKiB3X2NvbW1pdCBpcyBzZXQgdG8gdGhlIGNvbW1pdCBjb250YWluaW5nIHRoZSB3b3JraW5nIHRyZWUKKyAqIGJfY29tbWl0IGlzIHNldCB0byB0aGUgYmFzZSBjb21taXQKKyAqIGlfY29tbWl0IGlzIHNldCB0byB0aGUgY29tbWl0IGNvbnRhaW5pbmcgdGhlIGluZGV4IHRyZWUKKyAqIHVfY29tbWl0IGlzIHNldCB0byB0aGUgY29tbWl0IGNvbnRhaW5pbmcgdGhlIHVudHJhY2tlZCBmaWxlcyB0cmVlCisgKiB3X3RyZWUgaXMgc2V0IHRvIHRoZSB3b3JraW5nIHRyZWUKKyAqIGJfdHJlZSBpcyBzZXQgdG8gdGhlIGJhc2UgdHJlZQorICogaV90cmVlIGlzIHNldCB0byB0aGUgaW5kZXggdHJlZQorICogdV90cmVlIGlzIHNldCB0byB0aGUgdW50cmFja2VkIGZpbGVzIHRyZWUKKyAqLworc3RydWN0IHN0YXNoX2luZm8geworCXN0cnVjdCBvYmplY3RfaWQgd19jb21taXQ7CisJc3RydWN0IG9iamVjdF9pZCBiX2NvbW1pdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGlfY29tbWl0OworCXN0cnVjdCBvYmplY3RfaWQgdV9jb21taXQ7CisJc3RydWN0IG9iamVjdF9pZCB3X3RyZWU7CisJc3RydWN0IG9iamVjdF9pZCBiX3RyZWU7CisJc3RydWN0IG9iamVjdF9pZCBpX3RyZWU7CisJc3RydWN0IG9iamVjdF9pZCB1X3RyZWU7CisJc3RydWN0IHN0cmJ1ZiByZXZpc2lvbjsKKwlpbnQgaXNfc3Rhc2hfcmVmOworCWludCBoYXNfdTsKK307CisKK3N0YXRpYyB2b2lkIGZyZWVfc3Rhc2hfaW5mbyhzdHJ1Y3Qgc3Rhc2hfaW5mbyAqaW5mbykKK3sKKwlzdHJidWZfcmVsZWFzZSgmaW5mby0+cmV2aXNpb24pOworfQorCitzdGF0aWMgdm9pZCBhc3NlcnRfc3Rhc2hfbGlrZShzdHJ1Y3Qgc3Rhc2hfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqcmV2aXNpb24pCit7CisJaWYgKGdldF9vaWRmKCZpbmZvLT5iX2NvbW1pdCwgIiVzXjEiLCByZXZpc2lvbikgfHwKKwkgICAgZ2V0X29pZGYoJmluZm8tPndfdHJlZSwgIiVzOiIsIHJldmlzaW9uKSB8fAorCSAgICBnZXRfb2lkZigmaW5mby0+Yl90cmVlLCAiJXNeMToiLCByZXZpc2lvbikgfHwKKwkgICAgZ2V0X29pZGYoJmluZm8tPmlfdHJlZSwgIiVzXjI6IiwgcmV2aXNpb24pKQorCQlkaWUoXygiJyVzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIpLCByZXZpc2lvbik7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3N0YXNoX2luZm8oc3RydWN0IHN0YXNoX2luZm8gKmluZm8sIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgcmV0OworCWNoYXIgKmVuZF9vZl9yZXY7CisJY2hhciAqZXhwYW5kZWRfcmVmOworCWNvbnN0IGNoYXIgKnJldmlzaW9uOworCWNvbnN0IGNoYXIgKmNvbW1pdCA9IE5VTEw7CisJc3RydWN0IG9iamVjdF9pZCBkdW1teTsKKwlzdHJ1Y3Qgc3RyYnVmIHN5bWJvbGljID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoYXJnYyA+IDEpIHsKKwkJaW50IGk7CisJCXN0cnVjdCBzdHJidWYgcmVmc19tc2cgPSBTVFJCVUZfSU5JVDsKKworCQlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQkJc3RyYnVmX2FkZGYoJnJlZnNfbXNnLCAiICclcyciLCBhcmd2W2ldKTsKKworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDolcyIpLAorCQkJICAgcmVmc19tc2cuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnJlZnNfbXNnKTsKKworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGFyZ2MgPT0gMSkKKwkJY29tbWl0ID0gYXJndlswXTsKKworCXN0cmJ1Zl9pbml0KCZpbmZvLT5yZXZpc2lvbiwgMCk7CisJaWYgKCFjb21taXQpIHsKKwkJaWYgKCFyZWZfZXhpc3RzKHJlZl9zdGFzaCkpIHsKKwkJCWZyZWVfc3Rhc2hfaW5mbyhpbmZvKTsKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJObyBzdGFzaCBlbnRyaWVzIGZvdW5kLiIpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCXN0cmJ1Zl9hZGRmKCZpbmZvLT5yZXZpc2lvbiwgIiVzQHswfSIsIHJlZl9zdGFzaCk7CisJfSBlbHNlIGlmIChzdHJzcG4oY29tbWl0LCAiMDEyMzQ1Njc4OSIpID09IHN0cmxlbihjb21taXQpKSB7CisJCXN0cmJ1Zl9hZGRmKCZpbmZvLT5yZXZpc2lvbiwgIiVzQHslc30iLCByZWZfc3Rhc2gsIGNvbW1pdCk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZHN0cigmaW5mby0+cmV2aXNpb24sIGNvbW1pdCk7CisJfQorCisJcmV2aXNpb24gPSBpbmZvLT5yZXZpc2lvbi5idWY7CisKKwlpZiAoZ2V0X29pZChyZXZpc2lvbiwgJmluZm8tPndfY29tbWl0KSkgeworCQllcnJvcihfKCIlcyBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiKSwgcmV2aXNpb24pOworCQlmcmVlX3N0YXNoX2luZm8oaW5mbyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlhc3NlcnRfc3Rhc2hfbGlrZShpbmZvLCByZXZpc2lvbik7CisKKwlpbmZvLT5oYXNfdSA9ICFnZXRfb2lkZigmaW5mby0+dV90cmVlLCAiJXNeMzoiLCByZXZpc2lvbik7CisKKwllbmRfb2ZfcmV2ID0gc3RyY2hybnVsKHJldmlzaW9uLCAnQCcpOworCXN0cmJ1Zl9hZGQoJnN5bWJvbGljLCByZXZpc2lvbiwgZW5kX29mX3JldiAtIHJldmlzaW9uKTsKKworCXJldCA9IGR3aW1fcmVmKHN5bWJvbGljLmJ1Ziwgc3ltYm9saWMubGVuLCAmZHVtbXksICZleHBhbmRlZF9yZWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzeW1ib2xpYyk7CisJc3dpdGNoIChyZXQpIHsKKwljYXNlIDA6IC8qIE5vdCBmb3VuZCwgYnV0IHZhbGlkIHJlZiAqLworCQlpbmZvLT5pc19zdGFzaF9yZWYgPSAwOworCQlicmVhazsKKwljYXNlIDE6CisJCWluZm8tPmlzX3N0YXNoX3JlZiA9ICFzdHJjbXAoZXhwYW5kZWRfcmVmLCByZWZfc3Rhc2gpOworCQlicmVhazsKKwlkZWZhdWx0OiAvKiBJbnZhbGlkIG9yIGFtYmlndW91cyAqLworCQlmcmVlX3N0YXNoX2luZm8oaW5mbyk7CisJfQorCisJZnJlZShleHBhbmRlZF9yZWYpOworCXJldHVybiAhKHJldCA9PSAwIHx8IHJldCA9PSAxKTsKK30KKworc3RhdGljIGludCBkb19jbGVhcl9zdGFzaCh2b2lkKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2JqOworCWlmIChnZXRfb2lkKHJlZl9zdGFzaCwgJm9iaikpCisJCXJldHVybiAwOworCisJcmV0dXJuIGRlbGV0ZV9yZWYoTlVMTCwgcmVmX3N0YXNoLCAmb2JqLCAwKTsKK30KKworc3RhdGljIGludCBjbGVhcl9zdGFzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgZ2l0X3N0YXNoX2NsZWFyX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKworCWlmIChhcmdjKQorCQlyZXR1cm4gZXJyb3IoXygiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyAiCisJCQkgICAgICAgInVuaW1wbGVtZW50ZWQiKSk7CisKKwlyZXR1cm4gZG9fY2xlYXJfc3Rhc2goKTsKK30KKworc3RhdGljIGludCByZXNldF90cmVlKHN0cnVjdCBvYmplY3RfaWQgKmlfdHJlZSwgaW50IHVwZGF0ZSwgaW50IHJlc2V0KQoreworCWludCBucl90cmVlcyA9IDE7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJc3RydWN0IHRyZWVfZGVzYyB0W01BWF9VTlBBQ0tfVFJFRVNdOworCXN0cnVjdCB0cmVlICp0cmVlOworCXN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlID0gTE9DS19JTklUOworCisJcmVhZF9jYWNoZV9wcmVsb2FkKE5VTEwpOworCWlmIChyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpKQorCQlyZXR1cm4gLTE7CisKKwlob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCBMT0NLX0RJRV9PTl9FUlJPUik7CisKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisKKwl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChpX3RyZWUpOworCWlmIChwYXJzZV90cmVlKHRyZWUpKQorCQlyZXR1cm4gLTE7CisKKwlpbml0X3RyZWVfZGVzYyh0LCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCisJb3B0cy5oZWFkX2lkeCA9IDE7CisJb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLm1lcmdlID0gMTsKKwlvcHRzLnJlc2V0ID0gcmVzZXQ7CisJb3B0cy51cGRhdGUgPSB1cGRhdGU7CisJb3B0cy5mbiA9IG9uZXdheV9tZXJnZTsKKworCWlmICh1bnBhY2tfdHJlZXMobnJfdHJlZXMsIHQsICZvcHRzKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX3RyZWVfYmluYXJ5KHN0cnVjdCBzdHJidWYgKm91dCwgc3RydWN0IG9iamVjdF9pZCAqd19jb21taXQpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqd19jb21taXRfaGV4ID0gb2lkX3RvX2hleCh3X2NvbW1pdCk7CisKKwkvKgorCSAqIERpZmYtdHJlZSB3b3VsZCBub3QgYmUgdmVyeSBoYXJkIHRvIHJlcGxhY2Ugd2l0aCBhIG5hdGl2ZSBmdW5jdGlvbiwKKwkgKiBob3dldmVyIGl0IHNob3VsZCBiZSBkb25lIHRvZ2V0aGVyIHdpdGggYXBwbHlfY2FjaGVkLgorCSAqLworCWNwLmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJkaWZmLXRyZWUiLCAiLS1iaW5hcnkiLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZjcC5hcmdzLCAiJXNeMl4uLiVzXjIiLCB3X2NvbW1pdF9oZXgsIHdfY29tbWl0X2hleCk7CisKKwlyZXR1cm4gcGlwZV9jb21tYW5kKCZjcCwgTlVMTCwgMCwgb3V0LCAwLCBOVUxMLCAwKTsKK30KKworc3RhdGljIGludCBhcHBseV9jYWNoZWQoc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJLyoKKwkgKiBBcHBseSBjdXJyZW50bHkgb25seSByZWFkcyBlaXRoZXIgZnJvbSBzdGRpbiBvciBhIGZpbGUsIHRodXMKKwkgKiBhcHBseV9hbGxfcGF0Y2hlcyB3b3VsZCBoYXZlIHRvIGJlIHVwZGF0ZWQgdG8gb3B0aW9uYWxseSB0YWtlIGEKKwkgKiBidWZmZXIuCisJICovCisJY3AuZ2l0X2NtZCA9IDE7CisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgImFwcGx5IiwgIi0tY2FjaGVkIiwgTlVMTCk7CisJcmV0dXJuIHBpcGVfY29tbWFuZCgmY3AsIG91dC0+YnVmLCBvdXQtPmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXRfaGVhZCh2b2lkKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJLyoKKwkgKiBSZXNldCBpcyBvdmVyYWxsIHF1aXRlIHNpbXBsZSwgaG93ZXZlciB0aGVyZSBpcyBubyBjdXJyZW50IHB1YmxpYworCSAqIEFQSSBmb3IgcmVzZXR0aW5nLgorCSAqLworCWNwLmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgInJlc2V0Iik7CisKKwlyZXR1cm4gcnVuX2NvbW1hbmQoJmNwKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2RpZmZfdG9fYnVmKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKKwkJCSAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkJICAgIHZvaWQgKmRhdGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJidWZfYWRkc3RyKGRhdGEsIHEtPnF1ZXVlW2ldLT5vbmUtPnBhdGgpOworCisJCS8qIE5VTC10ZXJtaW5hdGU6IHdpbGwgYmUgZmVkIHRvIHVwZGF0ZS1pbmRleCAteiAqLworCQlzdHJidWZfYWRkY2goZGF0YSwgJ1wwJyk7CisJfQorfQorCitzdGF0aWMgaW50IGdldF9uZXdseV9zdGFnZWQoc3RydWN0IHN0cmJ1ZiAqb3V0LCBzdHJ1Y3Qgb2JqZWN0X2lkICpjX3RyZWUpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqY190cmVlX2hleCA9IG9pZF90b19oZXgoY190cmVlKTsKKworCS8qCisJICogZGlmZi1pbmRleCBpcyB2ZXJ5IHNpbWlsYXIgdG8gZGlmZi10cmVlIGFib3ZlLCBhbmQgc2hvdWxkIGJlCisJICogY29udmVydGVkIHRvZ2V0aGVyIHdpdGggdXBkYXRlX2luZGV4LgorCSAqLworCWNwLmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJkaWZmLWluZGV4IiwgIi0tY2FjaGVkIiwgIi0tbmFtZS1vbmx5IiwKKwkJCSAiLS1kaWZmLWZpbHRlcj1BIiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBjX3RyZWVfaGV4KTsKKwlyZXR1cm4gcGlwZV9jb21tYW5kKCZjcCwgTlVMTCwgMCwgb3V0LCAwLCBOVUxMLCAwKTsKK30KKworc3RhdGljIGludCB1cGRhdGVfaW5kZXgoc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJLyoKKwkgKiBVcGRhdGUtaW5kZXggaXMgdmVyeSBjb21wbGljYXRlZCBhbmQgbWF5IG5lZWQgdG8gaGF2ZSBhIHB1YmxpYworCSAqIGZ1bmN0aW9uIGV4cG9zZWQgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoaXMgZm9ya2luZy4KKwkgKi8KKwljcC5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAidXBkYXRlLWluZGV4IiwgIi0tYWRkIiwgIi0tc3RkaW4iLCBOVUxMKTsKKwlyZXR1cm4gcGlwZV9jb21tYW5kKCZjcCwgb3V0LT5idWYsIG91dC0+bGVuLCBOVUxMLCAwLCBOVUxMLCAwKTsKK30KKworc3RhdGljIGludCByZXN0b3JlX3VudHJhY2tlZChzdHJ1Y3Qgb2JqZWN0X2lkICp1X3RyZWUpCit7CisJaW50IHJlczsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCS8qCisJICogV2UgbmVlZCB0byBydW4gcmVzdG9yZSBmaWxlcyBmcm9tIGEgZ2l2ZW4gaW5kZXgsIGJ1dCB3aXRob3V0CisJICogYWZmZWN0aW5nIHRoZSBjdXJyZW50IGluZGV4LCBzbyB3ZSB1c2UgR0lUX0lOREVYX0ZJTEUgd2l0aAorCSAqIHJ1bl9jb21tYW5kIHRvIGZvcmsgcHJvY2Vzc2VzIHRoYXQgd2lsbCBub3QgaW50ZXJmZXJlLgorCSAqLworCWNwLmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgInJlYWQtdHJlZSIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgb2lkX3RvX2hleCh1X3RyZWUpKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZjcC5lbnZfYXJyYXksICJHSVRfSU5ERVhfRklMRT0lcyIsCisJCQkgc3Rhc2hfaW5kZXhfcGF0aC5idWYpOworCWlmIChydW5fY29tbWFuZCgmY3ApKSB7CisJCXJlbW92ZV9wYXRoKHN0YXNoX2luZGV4X3BhdGguYnVmKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWNoaWxkX3Byb2Nlc3NfaW5pdCgmY3ApOworCWNwLmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJjaGVja291dC1pbmRleCIsICItLWFsbCIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmVudl9hcnJheSwgIkdJVF9JTkRFWF9GSUxFPSVzIiwKKwkJCSBzdGFzaF9pbmRleF9wYXRoLmJ1Zik7CisKKwlyZXMgPSBydW5fY29tbWFuZCgmY3ApOworCXJlbW92ZV9wYXRoKHN0YXNoX2luZGV4X3BhdGguYnVmKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGRvX2FwcGx5X3N0YXNoKGNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHN0YXNoX2luZm8gKmluZm8sCisJCQkgIGludCBpbmRleCwgaW50IHF1aWV0KQoreworCWludCByZXQ7CisJaW50IGhhc19pbmRleCA9IGluZGV4OworCXN0cnVjdCBtZXJnZV9vcHRpb25zIG87CisJc3RydWN0IG9iamVjdF9pZCBjX3RyZWU7CisJc3RydWN0IG9iamVjdF9pZCBpbmRleF90cmVlOworCXN0cnVjdCBjb21taXQgKnJlc3VsdDsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpiYXNlc1sxXTsKKworCXJlYWRfY2FjaGVfcHJlbG9hZChOVUxMKTsKKwlpZiAocmVmcmVzaF9hbmRfd3JpdGVfY2FjaGUoUkVGUkVTSF9RVUlFVCwgMCwgMCkpCisJCXJldHVybiAtMTsKKworCWlmICh3cml0ZV9jYWNoZV9hc190cmVlKCZjX3RyZWUsIDAsIE5VTEwpKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIikpOworCisJaWYgKGluZGV4KSB7CisJCWlmIChvaWRlcSgmaW5mby0+Yl90cmVlLCAmaW5mby0+aV90cmVlKSB8fAorCQkgICAgb2lkZXEoJmNfdHJlZSwgJmluZm8tPmlfdHJlZSkpIHsKKwkJCWhhc19pbmRleCA9IDA7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCisJCQlpZiAoZGlmZl90cmVlX2JpbmFyeSgmb3V0LCAmaW5mby0+d19jb21taXQpKSB7CisJCQkJc3RyYnVmX3JlbGVhc2UoJm91dCk7CisJCQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBnZW5lcmF0ZSBkaWZmICVzXiEuIiksCisJCQkJCSAgICAgb2lkX3RvX2hleCgmaW5mby0+d19jb21taXQpKTsKKwkJCX0KKworCQkJcmV0ID0gYXBwbHlfY2FjaGVkKCZvdXQpOworCQkJc3RyYnVmX3JlbGVhc2UoJm91dCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiBlcnJvcihfKCJjb25mbGljdHMgaW4gaW5kZXguIgorCQkJCQkgICAgICAgIlRyeSB3aXRob3V0IC0taW5kZXguIikpOworCisJCQlkaXNjYXJkX2NhY2hlKCk7CisJCQlyZWFkX2NhY2hlKCk7CisJCQlpZiAod3JpdGVfY2FjaGVfYXNfdHJlZSgmaW5kZXhfdHJlZSwgMCwgTlVMTCkpCisJCQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiKSk7CisKKwkJCXJlc2V0X2hlYWQoKTsKKwkJCWRpc2NhcmRfY2FjaGUoKTsKKwkJCXJlYWRfY2FjaGUoKTsKKwkJfQorCX0KKworCWlmIChpbmZvLT5oYXNfdSAmJiByZXN0b3JlX3VudHJhY2tlZCgmaW5mby0+dV90cmVlKSkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIikpOworCisJaW5pdF9tZXJnZV9vcHRpb25zKCZvLCB0aGVfcmVwb3NpdG9yeSk7CisKKwlvLmJyYW5jaDEgPSAiVXBkYXRlZCB1cHN0cmVhbSI7CisJby5icmFuY2gyID0gIlN0YXNoZWQgY2hhbmdlcyI7CisKKwlpZiAob2lkZXEoJmluZm8tPmJfdHJlZSwgJmNfdHJlZSkpCisJCW8uYnJhbmNoMSA9ICJWZXJzaW9uIHN0YXNoIHdhcyBiYXNlZCBvbiI7CisKKwlpZiAocXVpZXQpCisJCW8udmVyYm9zaXR5ID0gMDsKKworCWlmIChvLnZlcmJvc2l0eSA+PSAzKQorCQlwcmludGZfbG4oXygiTWVyZ2luZyAlcyB3aXRoICVzIiksIG8uYnJhbmNoMSwgby5icmFuY2gyKTsKKworCWJhc2VzWzBdID0gJmluZm8tPmJfdHJlZTsKKworCXJldCA9IG1lcmdlX3JlY3Vyc2l2ZV9nZW5lcmljKCZvLCAmY190cmVlLCAmaW5mby0+d190cmVlLCAxLCBiYXNlcywKKwkJCQkgICAgICAmcmVzdWx0KTsKKwlpZiAocmV0KSB7CisJCXJlcmVyZSgwKTsKKworCQlpZiAoaW5kZXgpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIikpOworCisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGhhc19pbmRleCkgeworCQlpZiAocmVzZXRfdHJlZSgmaW5kZXhfdHJlZSwgMCwgMCkpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoZ2V0X25ld2x5X3N0YWdlZCgmb3V0LCAmY190cmVlKSkgeworCQkJc3RyYnVmX3JlbGVhc2UoJm91dCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAocmVzZXRfdHJlZSgmY190cmVlLCAwLCAxKSkgeworCQkJc3RyYnVmX3JlbGVhc2UoJm91dCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlyZXQgPSB1cGRhdGVfaW5kZXgoJm91dCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC0xOworCisJCS8qIHJlYWQgYmFjayB0aGUgcmVzdWx0IG9mIHVwZGF0ZV9pbmRleCgpIGJhY2sgZnJvbSB0aGUgZGlzayAqLworCQlkaXNjYXJkX2NhY2hlKCk7CisJCXJlYWRfY2FjaGUoKTsKKwl9CisKKwlpZiAoIXF1aWV0KSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJCS8qCisJCSAqIFN0YXR1cyBpcyBxdWl0ZSBzaW1wbGUgYW5kIGNvdWxkIGJlIHJlcGxhY2VkIHdpdGggY2FsbHMgdG8KKwkJICogd3Rfc3RhdHVzIGluIHRoZSBmdXR1cmUsIGJ1dCBpdCBhZGRzIGNvbXBsZXhpdGllcyB3aGljaCBtYXkKKwkJICogcmVxdWlyZSBtb3JlIHRlc3RzLgorCQkgKi8KKwkJY3AuZ2l0X2NtZCA9IDE7CisJCWNwLmRpciA9IHByZWZpeDsKKwkJYXJndl9hcnJheV9wdXNoZigmY3AuZW52X2FycmF5LCBHSVRfV09SS19UUkVFX0VOVklST05NRU5UIj0lcyIsCisJCQkJIGFic29sdXRlX3BhdGgoZ2V0X2dpdF93b3JrX3RyZWUoKSkpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjcC5lbnZfYXJyYXksIEdJVF9ESVJfRU5WSVJPTk1FTlQiPSVzIiwKKwkJCQkgYWJzb2x1dGVfcGF0aChnZXRfZ2l0X2RpcigpKSk7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgInN0YXR1cyIpOworCQlydW5fY29tbWFuZCgmY3ApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwcGx5X3N0YXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCByZXQ7CisJaW50IHF1aWV0ID0gMDsKKwlpbnQgaW5kZXggPSAwOworCXN0cnVjdCBzdGFzaF9pbmZvIGluZm87CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygiYmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycyIpKSwKKwkJT1BUX0JPT0woMCwgImluZGV4IiwgJmluZGV4LAorCQkJIE5fKCJhdHRlbXB0IHRvIHJlY3JlYXRlIHRoZSBpbmRleCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgZ2l0X3N0YXNoX2FwcGx5X3VzYWdlLCAwKTsKKworCWlmIChnZXRfc3Rhc2hfaW5mbygmaW5mbywgYXJnYywgYXJndikpCisJCXJldHVybiAtMTsKKworCXJldCA9IGRvX2FwcGx5X3N0YXNoKHByZWZpeCwgJmluZm8sIGluZGV4LCBxdWlldCk7CisJZnJlZV9zdGFzaF9pbmZvKCZpbmZvKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRvX2Ryb3Bfc3Rhc2goc3RydWN0IHN0YXNoX2luZm8gKmluZm8sIGludCBxdWlldCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwX3JlZmxvZyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCS8qCisJICogcmVmbG9nIGRvZXMgbm90IHByb3ZpZGUgYSBzaW1wbGUgZnVuY3Rpb24gZm9yIGRlbGV0aW5nIHJlZnMuIE9uZSB3aWxsCisJICogbmVlZCB0byBiZSBhZGRlZCB0byBhdm9pZCBpbXBsZW1lbnRpbmcgdG9vIG11Y2ggcmVmbG9nIGNvZGUgaGVyZQorCSAqLworCisJY3BfcmVmbG9nLmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwX3JlZmxvZy5hcmdzLCAicmVmbG9nIiwgImRlbGV0ZSIsICItLXVwZGF0ZXJlZiIsCisJCQkgIi0tcmV3cml0ZSIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3BfcmVmbG9nLmFyZ3MsIGluZm8tPnJldmlzaW9uLmJ1Zik7CisJcmV0ID0gcnVuX2NvbW1hbmQoJmNwX3JlZmxvZyk7CisJaWYgKCFyZXQpIHsKKwkJaWYgKCFxdWlldCkKKwkJCXByaW50Zl9sbihfKCJEcm9wcGVkICVzICglcykiKSwgaW5mby0+cmV2aXNpb24uYnVmLAorCQkJCSAgb2lkX3RvX2hleCgmaW5mby0+d19jb21taXQpKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gZXJyb3IoXygiJXM6IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IiksCisJCQkgICAgIGluZm8tPnJldmlzaW9uLmJ1Zik7CisJfQorCisJLyoKKwkgKiBUaGlzIGNvdWxkIGVhc2lseSBiZSByZXBsYWNlZCBieSBnZXRfb2lkLCBidXQgY3VycmVudGx5IGl0IHdpbGwgdGhyb3cKKwkgKiBhIGZhdGFsIGVycm9yIHdoZW4gYSByZWZsb2cgaXMgZW1wdHksIHdoaWNoIHdlIGNhbiBub3QgcmVjb3ZlciBmcm9tLgorCSAqLworCWNwLmdpdF9jbWQgPSAxOworCS8qIEV2ZW4gdGhvdWdoIC0tcXVpZXQgaXMgc3BlY2lmaWVkLCByZXYtcGFyc2Ugc3RpbGwgb3V0cHV0cyB0aGUgaGFzaCAqLworCWNwLm5vX3N0ZG91dCA9IDE7CisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgInJldi1wYXJzZSIsICItLXZlcmlmeSIsICItLXF1aWV0IiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNoZigmY3AuYXJncywgIiVzQHswfSIsIHJlZl9zdGFzaCk7CisJcmV0ID0gcnVuX2NvbW1hbmQoJmNwKTsKKworCS8qIGRvX2NsZWFyX3N0YXNoIGlmIHdlIGp1c3QgZHJvcHBlZCB0aGUgbGFzdCBzdGFzaCBlbnRyeSAqLworCWlmIChyZXQpCisJCWRvX2NsZWFyX3N0YXNoKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXNzZXJ0X3N0YXNoX3JlZihzdHJ1Y3Qgc3Rhc2hfaW5mbyAqaW5mbykKK3sKKwlpZiAoIWluZm8tPmlzX3N0YXNoX3JlZikgeworCQllcnJvcihfKCInJXMnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIpLCBpbmZvLT5yZXZpc2lvbi5idWYpOworCQlmcmVlX3N0YXNoX2luZm8oaW5mbyk7CisJCWV4aXQoMSk7CisJfQorfQorCitzdGF0aWMgaW50IGRyb3Bfc3Rhc2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IHJldDsKKwlpbnQgcXVpZXQgPSAwOworCXN0cnVjdCBzdGFzaF9pbmZvIGluZm87CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygiYmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgZ2l0X3N0YXNoX2Ryb3BfdXNhZ2UsIDApOworCisJaWYgKGdldF9zdGFzaF9pbmZvKCZpbmZvLCBhcmdjLCBhcmd2KSkKKwkJcmV0dXJuIC0xOworCisJYXNzZXJ0X3N0YXNoX3JlZigmaW5mbyk7CisKKwlyZXQgPSBkb19kcm9wX3N0YXNoKCZpbmZvLCBxdWlldCk7CisJZnJlZV9zdGFzaF9pbmZvKCZpbmZvKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBvcF9zdGFzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgcmV0OworCWludCBpbmRleCA9IDA7CisJaW50IHF1aWV0ID0gMDsKKwlzdHJ1Y3Qgc3Rhc2hfaW5mbyBpbmZvOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX1FVSUVUKCZxdWlldCwgTl8oImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiKSksCisJCU9QVF9CT09MKDAsICJpbmRleCIsICZpbmRleCwKKwkJCSBOXygiYXR0ZW1wdCB0byByZWNyZWF0ZSB0aGUgaW5kZXgiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9zdGFzaF9wb3BfdXNhZ2UsIDApOworCisJaWYgKGdldF9zdGFzaF9pbmZvKCZpbmZvLCBhcmdjLCBhcmd2KSkKKwkJcmV0dXJuIC0xOworCisJYXNzZXJ0X3N0YXNoX3JlZigmaW5mbyk7CisJaWYgKChyZXQgPSBkb19hcHBseV9zdGFzaChwcmVmaXgsICZpbmZvLCBpbmRleCwgcXVpZXQpKSkKKwkJcHJpbnRmX2xuKF8oIlRoZSBzdGFzaCBlbnRyeSBpcyBrZXB0IGluIGNhc2UgIgorCQkJICAgICJ5b3UgbmVlZCBpdCBhZ2Fpbi4iKSk7CisJZWxzZQorCQlyZXQgPSBkb19kcm9wX3N0YXNoKCZpbmZvLCBxdWlldCk7CisKKwlmcmVlX3N0YXNoX2luZm8oJmluZm8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYnJhbmNoX3N0YXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCByZXQ7CisJY29uc3QgY2hhciAqYnJhbmNoID0gTlVMTDsKKwlzdHJ1Y3Qgc3Rhc2hfaW5mbyBpbmZvOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfc3Rhc2hfYnJhbmNoX3VzYWdlLCAwKTsKKworCWlmICghYXJnYykgeworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIikpOworCQlyZXR1cm4gLTE7CisJfQorCisJYnJhbmNoID0gYXJndlswXTsKKworCWlmIChnZXRfc3Rhc2hfaW5mbygmaW5mbywgYXJnYyAtIDEsIGFyZ3YgKyAxKSkKKwkJcmV0dXJuIC0xOworCisJY3AuZ2l0X2NtZCA9IDE7CisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgImNoZWNrb3V0IiwgIi1iIiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBicmFuY2gpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgb2lkX3RvX2hleCgmaW5mby5iX2NvbW1pdCkpOworCXJldCA9IHJ1bl9jb21tYW5kKCZjcCk7CisJaWYgKCFyZXQpCisJCXJldCA9IGRvX2FwcGx5X3N0YXNoKHByZWZpeCwgJmluZm8sIDEsIDApOworCWlmICghcmV0ICYmIGluZm8uaXNfc3Rhc2hfcmVmKQorCQlyZXQgPSBkb19kcm9wX3N0YXNoKCZpbmZvLCAwKTsKKworCWZyZWVfc3Rhc2hfaW5mbygmaW5mbyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxpc3Rfc3Rhc2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9zdGFzaF9saXN0X3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9VTktOT1dOKTsKKworCWlmICghcmVmX2V4aXN0cyhyZWZfc3Rhc2gpKQorCQlyZXR1cm4gMDsKKworCWNwLmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJsb2ciLCAiLS1mb3JtYXQ9JWdkOiAlZ3MiLCAiLWciLAorCQkJICItLWZpcnN0LXBhcmVudCIsICItbSIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaHYoJmNwLmFyZ3MsIGFyZ3YpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgcmVmX3N0YXNoKTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLSIpOworCXJldHVybiBydW5fY29tbWFuZCgmY3ApOworfQorCitzdGF0aWMgaW50IHNob3dfc3RhdCA9IDE7CitzdGF0aWMgaW50IHNob3dfcGF0Y2g7CitzdGF0aWMgaW50IHVzZV9sZWdhY3lfc3Rhc2g7CisKK3N0YXRpYyBpbnQgZ2l0X3N0YXNoX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJzdGFzaC5zaG93c3RhdCIpKSB7CisJCXNob3dfc3RhdCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgInN0YXNoLnNob3dwYXRjaCIpKSB7CisJCXNob3dfcGF0Y2ggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJzdGFzaC51c2VidWlsdGluIikpIHsKKwkJdXNlX2xlZ2FjeV9zdGFzaCA9ICFnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZ2l0X2RpZmZfYmFzaWNfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGludCBzaG93X3N0YXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCWludCByZXQgPSAwOworCXN0cnVjdCBzdGFzaF9pbmZvIGluZm87CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3QgYXJndl9hcnJheSBzdGFzaF9hcmdzID0gQVJHVl9BUlJBWV9JTklUOworCXN0cnVjdCBhcmd2X2FycmF5IHJldmlzaW9uX2FyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CisKKwlpbml0X2RpZmZfdWlfZGVmYXVsdHMoKTsKKwlnaXRfY29uZmlnKGdpdF9kaWZmX3VpX2NvbmZpZywgTlVMTCk7CisJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmcmV2aXNpb25fYXJncywgYXJndlswXSk7CisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoYXJndltpXVswXSAhPSAnLScpCisJCQlhcmd2X2FycmF5X3B1c2goJnN0YXNoX2FyZ3MsIGFyZ3ZbaV0pOworCQllbHNlCisJCQlhcmd2X2FycmF5X3B1c2goJnJldmlzaW9uX2FyZ3MsIGFyZ3ZbaV0pOworCX0KKworCXJldCA9IGdldF9zdGFzaF9pbmZvKCZpbmZvLCBzdGFzaF9hcmdzLmFyZ2MsIHN0YXNoX2FyZ3MuYXJndik7CisJYXJndl9hcnJheV9jbGVhcigmc3Rhc2hfYXJncyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBUaGUgY29uZmlnIHNldHRpbmdzIGFyZSBhcHBsaWVkIG9ubHkgaWYgdGhlcmUgYXJlIG5vdCBwYXNzZWQKKwkgKiBhbnkgb3B0aW9ucy4KKwkgKi8KKwlpZiAocmV2aXNpb25fYXJncy5hcmdjID09IDEpIHsKKwkJaWYgKHNob3dfc3RhdCkKKwkJCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9ESUZGU1RBVDsKKworCQlpZiAoc2hvd19wYXRjaCkKKwkJCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfUEFUQ0g7CisKKwkJaWYgKCFzaG93X3N0YXQgJiYgIXNob3dfcGF0Y2gpIHsKKwkJCWZyZWVfc3Rhc2hfaW5mbygmaW5mbyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMocmV2aXNpb25fYXJncy5hcmdjLCByZXZpc2lvbl9hcmdzLmFyZ3YsICZyZXYsIE5VTEwpOworCWlmIChhcmdjID4gMSkgeworCQlmcmVlX3N0YXNoX2luZm8oJmluZm8pOworCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X3N0YXNoX3Nob3dfdXNhZ2UsIG9wdGlvbnMpOworCX0KKwlpZiAoIXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpIHsKKwkJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOworCQlkaWZmX3NldHVwX2RvbmUoJnJldi5kaWZmb3B0KTsKKwl9CisKKwlyZXYuZGlmZm9wdC5mbGFncy5yZWN1cnNpdmUgPSAxOworCXNldHVwX2RpZmZfcGFnZXIoJnJldi5kaWZmb3B0KTsKKwlkaWZmX3RyZWVfb2lkKCZpbmZvLmJfY29tbWl0LCAmaW5mby53X2NvbW1pdCwgIiIsICZyZXYuZGlmZm9wdCk7CisJbG9nX3RyZWVfZGlmZl9mbHVzaCgmcmV2KTsKKworCWZyZWVfc3Rhc2hfaW5mbygmaW5mbyk7CisJcmV0dXJuIGRpZmZfcmVzdWx0X2NvZGUoJnJldi5kaWZmb3B0LCAwKTsKK30KKworc3RhdGljIGludCBkb19zdG9yZV9zdGFzaChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp3X2NvbW1pdCwgY29uc3QgY2hhciAqc3Rhc2hfbXNnLAorCQkJICBpbnQgcXVpZXQpCit7CisJaWYgKCFzdGFzaF9tc2cpCisJCXN0YXNoX21zZyA9ICJDcmVhdGVkIHZpYSBcImdpdCBzdGFzaCBzdG9yZVwiLiI7CisKKwlpZiAodXBkYXRlX3JlZihzdGFzaF9tc2csIHJlZl9zdGFzaCwgd19jb21taXQsIE5VTEwsCisJCSAgICAgICBSRUZfRk9SQ0VfQ1JFQVRFX1JFRkxPRywKKwkJICAgICAgIHF1aWV0ID8gVVBEQVRFX1JFRlNfUVVJRVRfT05fRVJSIDoKKwkJICAgICAgIFVQREFURV9SRUZTX01TR19PTl9FUlIpKSB7CisJCWlmICghcXVpZXQpIHsKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJDYW5ub3QgdXBkYXRlICVzIHdpdGggJXMiKSwKKwkJCQkgICByZWZfc3Rhc2gsIG9pZF90b19oZXgod19jb21taXQpKTsKKwkJfQorCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RvcmVfc3Rhc2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IHF1aWV0ID0gMDsKKwljb25zdCBjaGFyICpzdGFzaF9tc2cgPSBOVUxMOworCXN0cnVjdCBvYmplY3RfaWQgb2JqOworCXN0cnVjdCBvYmplY3RfY29udGV4dCBkdW1teTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJiZSBxdWlldCIpKSwKKwkJT1BUX1NUUklORygnbScsICJtZXNzYWdlIiwgJnN0YXNoX21zZywgIm1lc3NhZ2UiLAorCQkJICAgTl8oInN0YXNoIG1lc3NhZ2UiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9zdGFzaF9zdG9yZV91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTik7CisKKwlpZiAoYXJnYyAhPSAxKSB7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiXCJnaXQgc3Rhc2ggc3RvcmVcIiByZXF1aXJlcyBvbmUgIgorCQkJCQkgICAgICI8Y29tbWl0PiBhcmd1bWVudCIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChnZXRfb2lkX3dpdGhfY29udGV4dCh0aGVfcmVwb3NpdG9yeSwKKwkJCQkgYXJndlswXSwgcXVpZXQgPyBHRVRfT0lEX1FVSUVUTFkgOiAwLCAmb2JqLAorCQkJCSAmZHVtbXkpKSB7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ2Fubm90IHVwZGF0ZSAlcyB3aXRoICVzIiksCisJCQkJCSAgICAgcmVmX3N0YXNoLCBhcmd2WzBdKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiBkb19zdG9yZV9zdGFzaCgmb2JqLCBzdGFzaF9tc2csIHF1aWV0KTsKK30KKworc3RhdGljIHZvaWQgYWRkX3BhdGhzcGVjcyhzdHJ1Y3QgYXJndl9hcnJheSAqYXJncywKKwkJCSAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcykgeworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHBzLT5ucjsgaSsrKQorCQlhcmd2X2FycmF5X3B1c2goYXJncywgcHMtPml0ZW1zW2ldLm9yaWdpbmFsKTsKK30KKworLyoKKyAqIGB1bnRyYWNrZWRfZmlsZXNgIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIG5hbWVzIG9mIHVudHJhY2tlZCBmaWxlcy4KKyAqIFRoZSByZXR1cm4gdmFsdWUgaXM6CisgKgorICogPSAwIGlmIHRoZXJlIGFyZSBub3QgYW55IHVudHJhY2tlZCBmaWxlcworICogPiAwIGlmIHRoZXJlIGFyZSB1bnRyYWNrZWQgZmlsZXMKKyAqLworc3RhdGljIGludCBnZXRfdW50cmFja2VkX2ZpbGVzKGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsIGludCBpbmNsdWRlX3VudHJhY2tlZCwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICp1bnRyYWNrZWRfZmlsZXMpCit7CisJaW50IGk7CisJaW50IGZvdW5kID0gMDsKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CisKKwltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCWlmIChpbmNsdWRlX3VudHJhY2tlZCAhPSBJTkNMVURFX0FMTF9GSUxFUykKKwkJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoJmRpcik7CisKKwlmaWxsX2RpcmVjdG9yeSgmZGlyLCB0aGVfcmVwb3NpdG9yeS0+aW5kZXgsIHBzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLm5yOyBpKyspIHsKKwkJc3RydWN0IGRpcl9lbnRyeSAqZW50ID0gZGlyLmVudHJpZXNbaV07CisJCWZvdW5kKys7CisJCXN0cmJ1Zl9hZGRzdHIodW50cmFja2VkX2ZpbGVzLCBlbnQtPm5hbWUpOworCQkvKiBOVUwtdGVybWluYXRlOiB3aWxsIGJlIGZlZCB0byB1cGRhdGUtaW5kZXggLXogKi8KKwkJc3RyYnVmX2FkZGNoKHVudHJhY2tlZF9maWxlcywgJ1wwJyk7CisJCWZyZWUoZW50KTsKKwl9CisKKwlmcmVlKGRpci5lbnRyaWVzKTsKKwlmcmVlKGRpci5pZ25vcmVkKTsKKwljbGVhcl9kaXJlY3RvcnkoJmRpcik7CisJcmV0dXJuIGZvdW5kOworfQorCisvKgorICogVGhlIHJldHVybiB2YWx1ZSBvZiBgY2hlY2tfY2hhbmdlc190cmFja2VkX2ZpbGVzKClgIGNhbiBiZToKKyAqCisgKiA8IDAgaWYgdGhlcmUgd2FzIGFuIGVycm9yCisgKiA9IDAgaWYgdGhlcmUgYXJlIG5vIGNoYW5nZXMuCisgKiA+IDAgaWYgdGhlcmUgYXJlIGNoYW5nZXMuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfY2hhbmdlc190cmFja2VkX2ZpbGVzKGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBvYmplY3RfaWQgZHVtbXk7CisJaW50IHJldCA9IDA7CisKKwkvKiBObyBpbml0aWFsIGNvbW1pdC4gKi8KKwlpZiAoZ2V0X29pZCgiSEVBRCIsICZkdW1teSkpCisJCXJldHVybiAtMTsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKKwljb3B5X3BhdGhzcGVjKCZyZXYucHJ1bmVfZGF0YSwgcHMpOworCisJcmV2LmRpZmZvcHQuZmxhZ3MucXVpY2sgPSAxOworCXJldi5kaWZmb3B0LmZsYWdzLmlnbm9yZV9zdWJtb2R1bGVzID0gMTsKKwlyZXYuYWJicmV2ID0gMDsKKworCWFkZF9oZWFkX3RvX3BlbmRpbmcoJnJldik7CisJZGlmZl9zZXR1cF9kb25lKCZyZXYuZGlmZm9wdCk7CisKKwlyZXN1bHQgPSBydW5fZGlmZl9pbmRleCgmcmV2LCAxKTsKKwlpZiAoZGlmZl9yZXN1bHRfY29kZSgmcmV2LmRpZmZvcHQsIHJlc3VsdCkpIHsKKwkJcmV0ID0gMTsKKwkJZ290byBkb25lOworCX0KKworCW9iamVjdF9hcnJheV9jbGVhcigmcmV2LnBlbmRpbmcpOworCXJlc3VsdCA9IHJ1bl9kaWZmX2ZpbGVzKCZyZXYsIDApOworCWlmIChkaWZmX3Jlc3VsdF9jb2RlKCZyZXYuZGlmZm9wdCwgcmVzdWx0KSkgeworCQlyZXQgPSAxOworCQlnb3RvIGRvbmU7CisJfQorCitkb25lOgorCWNsZWFyX3BhdGhzcGVjKCZyZXYucHJ1bmVfZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoZSBmdW5jdGlvbiB3aWxsIGZpbGwgYHVudHJhY2tlZF9maWxlc2Agd2l0aCB0aGUgbmFtZXMgb2YgdW50cmFja2VkIGZpbGVzCisgKiBJdCB3aWxsIHJldHVybiAxIGlmIHRoZXJlIHdlcmUgYW55IGNoYW5nZXMgYW5kIDAgaWYgdGhlcmUgd2VyZSBub3QuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfY2hhbmdlcyhjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLCBpbnQgaW5jbHVkZV91bnRyYWNrZWQsCisJCQkgc3RydWN0IHN0cmJ1ZiAqdW50cmFja2VkX2ZpbGVzKQoreworCWludCByZXQgPSAwOworCWlmIChjaGVja19jaGFuZ2VzX3RyYWNrZWRfZmlsZXMocHMpKQorCQlyZXQgPSAxOworCisJaWYgKGluY2x1ZGVfdW50cmFja2VkICYmIGdldF91bnRyYWNrZWRfZmlsZXMocHMsIGluY2x1ZGVfdW50cmFja2VkLAorCQkJCQkJICAgICB1bnRyYWNrZWRfZmlsZXMpKQorCQlyZXQgPSAxOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzYXZlX3VudHJhY2tlZF9maWxlcyhzdHJ1Y3Qgc3Rhc2hfaW5mbyAqaW5mbywgc3RydWN0IHN0cmJ1ZiAqbXNnLAorCQkJCXN0cnVjdCBzdHJidWYgZmlsZXMpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHN0cmJ1ZiB1bnRyYWNrZWRfbXNnID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3BfdXBkX2luZGV4ID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBpbmRleF9zdGF0ZSBpc3RhdGUgPSB7IE5VTEwgfTsKKworCWNwX3VwZF9pbmRleC5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcF91cGRfaW5kZXguYXJncywgInVwZGF0ZS1pbmRleCIsICIteiIsICItLWFkZCIsCisJCQkgIi0tcmVtb3ZlIiwgIi0tc3RkaW4iLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZjcF91cGRfaW5kZXguZW52X2FycmF5LCAiR0lUX0lOREVYX0ZJTEU9JXMiLAorCQkJIHN0YXNoX2luZGV4X3BhdGguYnVmKTsKKworCXN0cmJ1Zl9hZGRmKCZ1bnRyYWNrZWRfbXNnLCAidW50cmFja2VkIGZpbGVzIG9uICVzXG4iLCBtc2ctPmJ1Zik7CisJaWYgKHBpcGVfY29tbWFuZCgmY3BfdXBkX2luZGV4LCBmaWxlcy5idWYsIGZpbGVzLmxlbiwgTlVMTCwgMCwKKwkJCSBOVUxMLCAwKSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWlmICh3cml0ZV9pbmRleF9hc190cmVlKCZpbmZvLT51X3RyZWUsICZpc3RhdGUsIHN0YXNoX2luZGV4X3BhdGguYnVmLCAwLAorCQkJCU5VTEwpKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGNvbW1pdF90cmVlKHVudHJhY2tlZF9tc2cuYnVmLCB1bnRyYWNrZWRfbXNnLmxlbiwKKwkJCSZpbmZvLT51X3RyZWUsIE5VTEwsICZpbmZvLT51X2NvbW1pdCwgTlVMTCwgTlVMTCkpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKK2RvbmU6CisJZGlzY2FyZF9pbmRleCgmaXN0YXRlKTsKKwlzdHJidWZfcmVsZWFzZSgmdW50cmFja2VkX21zZyk7CisJcmVtb3ZlX3BhdGgoc3Rhc2hfaW5kZXhfcGF0aC5idWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3Rhc2hfcGF0Y2goc3RydWN0IHN0YXNoX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICpvdXRfcGF0Y2gsIGludCBxdWlldCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcF9yZWFkX3RyZWUgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3BfZGlmZl90cmVlID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBpbmRleF9zdGF0ZSBpc3RhdGUgPSB7IE5VTEwgfTsKKwljaGFyICpvbGRfaW5kZXhfZW52ID0gTlVMTCwgKm9sZF9yZXBvX2luZGV4X2ZpbGU7CisKKwlyZW1vdmVfcGF0aChzdGFzaF9pbmRleF9wYXRoLmJ1Zik7CisKKwljcF9yZWFkX3RyZWUuZ2l0X2NtZCA9IDE7CisJYXJndl9hcnJheV9wdXNobCgmY3BfcmVhZF90cmVlLmFyZ3MsICJyZWFkLXRyZWUiLCAiSEVBRCIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwX3JlYWRfdHJlZS5lbnZfYXJyYXksICJHSVRfSU5ERVhfRklMRT0lcyIsCisJCQkgc3Rhc2hfaW5kZXhfcGF0aC5idWYpOworCWlmIChydW5fY29tbWFuZCgmY3BfcmVhZF90cmVlKSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCS8qIEZpbmQgb3V0IHdoYXQgdGhlIHVzZXIgd2FudHMuICovCisJb2xkX3JlcG9faW5kZXhfZmlsZSA9IHRoZV9yZXBvc2l0b3J5LT5pbmRleF9maWxlOworCXRoZV9yZXBvc2l0b3J5LT5pbmRleF9maWxlID0gc3Rhc2hfaW5kZXhfcGF0aC5idWY7CisJb2xkX2luZGV4X2VudiA9IHhzdHJkdXBfb3JfbnVsbChnZXRlbnYoSU5ERVhfRU5WSVJPTk1FTlQpKTsKKwlzZXRlbnYoSU5ERVhfRU5WSVJPTk1FTlQsIHRoZV9yZXBvc2l0b3J5LT5pbmRleF9maWxlLCAxKTsKKworCXJldCA9IHJ1bl9hZGRfaW50ZXJhY3RpdmUoTlVMTCwgIi0tcGF0Y2g9c3Rhc2giLCBwcyk7CisKKwl0aGVfcmVwb3NpdG9yeS0+aW5kZXhfZmlsZSA9IG9sZF9yZXBvX2luZGV4X2ZpbGU7CisJaWYgKG9sZF9pbmRleF9lbnYgJiYgKm9sZF9pbmRleF9lbnYpCisJCXNldGVudihJTkRFWF9FTlZJUk9OTUVOVCwgb2xkX2luZGV4X2VudiwgMSk7CisJZWxzZQorCQl1bnNldGVudihJTkRFWF9FTlZJUk9OTUVOVCk7CisJRlJFRV9BTkRfTlVMTChvbGRfaW5kZXhfZW52KTsKKworCS8qIFN0YXRlIG9mIHRoZSB3b3JraW5nIHRyZWUuICovCisJaWYgKHdyaXRlX2luZGV4X2FzX3RyZWUoJmluZm8tPndfdHJlZSwgJmlzdGF0ZSwgc3Rhc2hfaW5kZXhfcGF0aC5idWYsIDAsCisJCQkJTlVMTCkpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwljcF9kaWZmX3RyZWUuZ2l0X2NtZCA9IDE7CisJYXJndl9hcnJheV9wdXNobCgmY3BfZGlmZl90cmVlLmFyZ3MsICJkaWZmLXRyZWUiLCAiLXAiLCAiLVUxIiwgIkhFQUQiLAorCQkJIG9pZF90b19oZXgoJmluZm8tPndfdHJlZSksICItLSIsIE5VTEwpOworCWlmIChwaXBlX2NvbW1hbmQoJmNwX2RpZmZfdHJlZSwgTlVMTCwgMCwgb3V0X3BhdGNoLCAwLCBOVUxMLCAwKSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWlmICghb3V0X3BhdGNoLT5sZW4pIHsKKwkJaWYgKCFxdWlldCkKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJObyBjaGFuZ2VzIHNlbGVjdGVkIikpOworCQlyZXQgPSAxOworCX0KKworZG9uZToKKwlkaXNjYXJkX2luZGV4KCZpc3RhdGUpOworCXJlbW92ZV9wYXRoKHN0YXNoX2luZGV4X3BhdGguYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN0YXNoX3dvcmtpbmdfdHJlZShzdHJ1Y3Qgc3Rhc2hfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwX3VwZF9pbmRleCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGRpZmZfb3V0cHV0ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGluZGV4X3N0YXRlIGlzdGF0ZSA9IHsgTlVMTCB9OworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CisJY29weV9wYXRoc3BlYygmcmV2LnBydW5lX2RhdGEsIHBzKTsKKworCXNldF9hbHRlcm5hdGVfaW5kZXhfb3V0cHV0KHN0YXNoX2luZGV4X3BhdGguYnVmKTsKKwlpZiAocmVzZXRfdHJlZSgmaW5mby0+aV90cmVlLCAwLCAwKSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKwlzZXRfYWx0ZXJuYXRlX2luZGV4X291dHB1dChOVUxMKTsKKworCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSBhZGRfZGlmZl90b19idWY7CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSAmZGlmZl9vdXRwdXQ7CisKKwlpZiAocmVhZF9jYWNoZV9wcmVsb2FkKCZyZXYuZGlmZm9wdC5wYXRoc3BlYykgPCAwKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXYsIHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJmluZm8tPmJfY29tbWl0KSwKKwkJCSAgICIiKTsKKwlpZiAocnVuX2RpZmZfaW5kZXgoJnJldiwgMCkpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwljcF91cGRfaW5kZXguZ2l0X2NtZCA9IDE7CisJYXJndl9hcnJheV9wdXNobCgmY3BfdXBkX2luZGV4LmFyZ3MsICJ1cGRhdGUtaW5kZXgiLAorCQkJICItLWlnbm9yZS1za2lwLXdvcmt0cmVlLWVudHJpZXMiLAorCQkJICIteiIsICItLWFkZCIsICItLXJlbW92ZSIsICItLXN0ZGluIiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNoZigmY3BfdXBkX2luZGV4LmVudl9hcnJheSwgIkdJVF9JTkRFWF9GSUxFPSVzIiwKKwkJCSBzdGFzaF9pbmRleF9wYXRoLmJ1Zik7CisKKwlpZiAocGlwZV9jb21tYW5kKCZjcF91cGRfaW5kZXgsIGRpZmZfb3V0cHV0LmJ1ZiwgZGlmZl9vdXRwdXQubGVuLAorCQkJIE5VTEwsIDAsIE5VTEwsIDApKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHdyaXRlX2luZGV4X2FzX3RyZWUoJmluZm8tPndfdHJlZSwgJmlzdGF0ZSwgc3Rhc2hfaW5kZXhfcGF0aC5idWYsIDAsCisJCQkJTlVMTCkpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKK2RvbmU6CisJZGlzY2FyZF9pbmRleCgmaXN0YXRlKTsKKwlVTkxFQUsocmV2KTsKKwlvYmplY3RfYXJyYXlfY2xlYXIoJnJldi5wZW5kaW5nKTsKKwljbGVhcl9wYXRoc3BlYygmcmV2LnBydW5lX2RhdGEpOworCXN0cmJ1Zl9yZWxlYXNlKCZkaWZmX291dHB1dCk7CisJcmVtb3ZlX3BhdGgoc3Rhc2hfaW5kZXhfcGF0aC5idWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZG9fY3JlYXRlX3N0YXNoKGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsIHN0cnVjdCBzdHJidWYgKnN0YXNoX21zZ19idWYsCisJCQkgICBpbnQgaW5jbHVkZV91bnRyYWNrZWQsIGludCBwYXRjaF9tb2RlLAorCQkJICAgc3RydWN0IHN0YXNoX2luZm8gKmluZm8sIHN0cnVjdCBzdHJidWYgKnBhdGNoLAorCQkJICAgaW50IHF1aWV0KQoreworCWludCByZXQgPSAwOworCWludCBmbGFncyA9IDA7CisJaW50IHVudHJhY2tlZF9jb21taXRfb3B0aW9uID0gMDsKKwljb25zdCBjaGFyICpoZWFkX3Nob3J0X3NoYTEgPSBOVUxMOworCWNvbnN0IGNoYXIgKmJyYW5jaF9yZWYgPSBOVUxMOworCWNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lID0gIihubyBicmFuY2gpIjsKKwlzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgY29tbWl0X3RyZWVfbGFiZWwgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHVudHJhY2tlZF9maWxlcyA9IFNUUkJVRl9JTklUOworCisJcHJlcGFyZV9mYWxsYmFja19pZGVudCgiZ2l0IHN0YXNoIiwgImdpdEBzdGFzaCIpOworCisJcmVhZF9jYWNoZV9wcmVsb2FkKE5VTEwpOworCWlmIChyZWZyZXNoX2FuZF93cml0ZV9jYWNoZShSRUZSRVNIX1FVSUVULCAwLCAwKSA8IDApIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoZ2V0X29pZCgiSEVBRCIsICZpbmZvLT5iX2NvbW1pdCkpIHsKKwkJaWYgKCFxdWlldCkKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJZb3UgZG8gbm90IGhhdmUgIgorCQkJCQkgICAgICJ0aGUgaW5pdGlhbCBjb21taXQgeWV0IikpOworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0gZWxzZSB7CisJCWhlYWRfY29tbWl0ID0gbG9va3VwX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwgJmluZm8tPmJfY29tbWl0KTsKKwl9CisKKwlpZiAoIWNoZWNrX2NoYW5nZXMocHMsIGluY2x1ZGVfdW50cmFja2VkLCAmdW50cmFja2VkX2ZpbGVzKSkgeworCQlyZXQgPSAxOworCQlnb3RvIGRvbmU7CisJfQorCisJYnJhbmNoX3JlZiA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIDAsIE5VTEwsICZmbGFncyk7CisJaWYgKGZsYWdzICYgUkVGX0lTU1lNUkVGKQorCQlicmFuY2hfbmFtZSA9IHN0cnJjaHIoYnJhbmNoX3JlZiwgJy8nKSArIDE7CisJaGVhZF9zaG9ydF9zaGExID0gZmluZF91bmlxdWVfYWJicmV2KCZoZWFkX2NvbW1pdC0+b2JqZWN0Lm9pZCwKKwkJCQkJICAgICBERUZBVUxUX0FCQlJFVik7CisJc3RyYnVmX2FkZGYoJm1zZywgIiVzOiAlcyAiLCBicmFuY2hfbmFtZSwgaGVhZF9zaG9ydF9zaGExKTsKKwlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9PTkVMSU5FLCBoZWFkX2NvbW1pdCwgJm1zZyk7CisKKwlzdHJidWZfYWRkZigmY29tbWl0X3RyZWVfbGFiZWwsICJpbmRleCBvbiAlc1xuIiwgbXNnLmJ1Zik7CisJY29tbWl0X2xpc3RfaW5zZXJ0KGhlYWRfY29tbWl0LCAmcGFyZW50cyk7CisJaWYgKHdyaXRlX2NhY2hlX2FzX3RyZWUoJmluZm8tPmlfdHJlZSwgMCwgTlVMTCkgfHwKKwkgICAgY29tbWl0X3RyZWUoY29tbWl0X3RyZWVfbGFiZWwuYnVmLCBjb21taXRfdHJlZV9sYWJlbC5sZW4sCisJCQkmaW5mby0+aV90cmVlLCBwYXJlbnRzLCAmaW5mby0+aV9jb21taXQsIE5VTEwsIE5VTEwpKSB7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgIgorCQkJCQkgICAgICJpbmRleCBzdGF0ZSIpKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoaW5jbHVkZV91bnRyYWNrZWQpIHsKKwkJaWYgKHNhdmVfdW50cmFja2VkX2ZpbGVzKGluZm8sICZtc2csIHVudHJhY2tlZF9maWxlcykpIHsKKwkJCWlmICghcXVpZXQpCisJCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNhbm5vdCBzYXZlICIKKwkJCQkJCSAgICAgInRoZSB1bnRyYWNrZWQgZmlsZXMiKSk7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQl1bnRyYWNrZWRfY29tbWl0X29wdGlvbiA9IDE7CisJfQorCWlmIChwYXRjaF9tb2RlKSB7CisJCXJldCA9IHN0YXNoX3BhdGNoKGluZm8sIHBzLCBwYXRjaCwgcXVpZXQpOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKCFxdWlldCkKKwkJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgIgorCQkJCQkJICAgICAid29ya3RyZWUgc3RhdGUiKSk7CisJCQlnb3RvIGRvbmU7CisJCX0gZWxzZSBpZiAocmV0ID4gMCkgeworCQkJZ290byBkb25lOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHN0YXNoX3dvcmtpbmdfdHJlZShpbmZvLCBwcykpIHsKKwkJCWlmICghcXVpZXQpCisJCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50ICIKKwkJCQkJCSAgICAgIndvcmt0cmVlIHN0YXRlIikpOworCQkJcmV0ID0gLTE7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwlpZiAoIXN0YXNoX21zZ19idWYtPmxlbikKKwkJc3RyYnVmX2FkZGYoc3Rhc2hfbXNnX2J1ZiwgIldJUCBvbiAlcyIsIG1zZy5idWYpOworCWVsc2UKKwkJc3RyYnVmX2luc2VydGYoc3Rhc2hfbXNnX2J1ZiwgMCwgIk9uICVzOiAiLCBicmFuY2hfbmFtZSk7CisKKwkvKgorCSAqIGBwYXJlbnRzYCB3aWxsIGJlIGVtcHR5IGFmdGVyIGNhbGxpbmcgYGNvbW1pdF90cmVlKClgLCBzbyB0aGVyZSBpcworCSAqIG5vIG5lZWQgdG8gY2FsbCBgZnJlZV9jb21taXRfbGlzdCgpYAorCSAqLworCXBhcmVudHMgPSBOVUxMOworCWlmICh1bnRyYWNrZWRfY29tbWl0X29wdGlvbikKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGxvb2t1cF9jb21taXQodGhlX3JlcG9zaXRvcnksCisJCQkJCQkgJmluZm8tPnVfY29tbWl0KSwKKwkJCQkgICAmcGFyZW50cyk7CisJY29tbWl0X2xpc3RfaW5zZXJ0KGxvb2t1cF9jb21taXQodGhlX3JlcG9zaXRvcnksICZpbmZvLT5pX2NvbW1pdCksCisJCQkgICAmcGFyZW50cyk7CisJY29tbWl0X2xpc3RfaW5zZXJ0KGhlYWRfY29tbWl0LCAmcGFyZW50cyk7CisKKwlpZiAoY29tbWl0X3RyZWUoc3Rhc2hfbXNnX2J1Zi0+YnVmLCBzdGFzaF9tc2dfYnVmLT5sZW4sICZpbmZvLT53X3RyZWUsCisJCQlwYXJlbnRzLCAmaW5mby0+d19jb21taXQsIE5VTEwsIE5VTEwpKSB7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ2Fubm90IHJlY29yZCAiCisJCQkJCSAgICAgIndvcmtpbmcgdHJlZSBzdGF0ZSIpKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKK2RvbmU6CisJc3RyYnVmX3JlbGVhc2UoJmNvbW1pdF90cmVlX2xhYmVsKTsKKwlzdHJidWZfcmVsZWFzZSgmbXNnKTsKKwlzdHJidWZfcmVsZWFzZSgmdW50cmFja2VkX2ZpbGVzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9zdGFzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIHN0YXNoX21zZ19idWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3Rhc2hfaW5mbyBpbmZvOworCXN0cnVjdCBwYXRoc3BlYyBwczsKKworCS8qIFN0YXJ0aW5nIHdpdGggYXJndlsxXSwgc2luY2UgYXJndlswXSBpcyAiY3JlYXRlIiAqLworCXN0cmJ1Zl9qb2luX2FyZ3YoJnN0YXNoX21zZ19idWYsIGFyZ2MgLSAxLCArK2FyZ3YsICcgJyk7CisKKwltZW1zZXQoJnBzLCAwLCBzaXplb2YocHMpKTsKKwlpZiAoIWNoZWNrX2NoYW5nZXNfdHJhY2tlZF9maWxlcygmcHMpKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGRvX2NyZWF0ZV9zdGFzaCgmcHMsICZzdGFzaF9tc2dfYnVmLCAwLCAwLCAmaW5mbywKKwkJCSAgICAgIE5VTEwsIDApOworCWlmICghcmV0KQorCQlwcmludGZfbG4oIiVzIiwgb2lkX3RvX2hleCgmaW5mby53X2NvbW1pdCkpOworCisJc3RyYnVmX3JlbGVhc2UoJnN0YXNoX21zZ19idWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZG9fcHVzaF9zdGFzaChjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLCBjb25zdCBjaGFyICpzdGFzaF9tc2csIGludCBxdWlldCwKKwkJCSBpbnQga2VlcF9pbmRleCwgaW50IHBhdGNoX21vZGUsIGludCBpbmNsdWRlX3VudHJhY2tlZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc3Rhc2hfaW5mbyBpbmZvOworCXN0cnVjdCBzdHJidWYgcGF0Y2ggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHN0YXNoX21zZ19idWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHVudHJhY2tlZF9maWxlcyA9IFNUUkJVRl9JTklUOworCisJaWYgKHBhdGNoX21vZGUgJiYga2VlcF9pbmRleCA9PSAtMSkKKwkJa2VlcF9pbmRleCA9IDE7CisKKwlpZiAocGF0Y2hfbW9kZSAmJiBpbmNsdWRlX3VudHJhY2tlZCkgeworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ2FuJ3QgdXNlIC0tcGF0Y2ggYW5kIC0taW5jbHVkZS11bnRyYWNrZWQiCisJCQkJICAgICAiIG9yIC0tYWxsIGF0IHRoZSBzYW1lIHRpbWUiKSk7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJcmVhZF9jYWNoZV9wcmVsb2FkKE5VTEwpOworCWlmICghaW5jbHVkZV91bnRyYWNrZWQgJiYgcHMtPm5yKSB7CisJCWludCBpOworCQljaGFyICpwc19tYXRjaGVkID0geGNhbGxvYyhwcy0+bnIsIDEpOworCisJCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykKKwkJCWNlX3BhdGhfbWF0Y2goJnRoZV9pbmRleCwgYWN0aXZlX2NhY2hlW2ldLCBwcywKKwkJCQkgICAgICBwc19tYXRjaGVkKTsKKworCQlpZiAocmVwb3J0X3BhdGhfZXJyb3IocHNfbWF0Y2hlZCwgcHMpKSB7CisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiRGlkIHlvdSBmb3JnZXQgdG8gJ2dpdCBhZGQnPyIpKTsKKwkJCXJldCA9IC0xOworCQkJZnJlZShwc19tYXRjaGVkKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlmcmVlKHBzX21hdGNoZWQpOworCX0KKworCWlmIChyZWZyZXNoX2FuZF93cml0ZV9jYWNoZShSRUZSRVNIX1FVSUVULCAwLCAwKSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWlmICghY2hlY2tfY2hhbmdlcyhwcywgaW5jbHVkZV91bnRyYWNrZWQsICZ1bnRyYWNrZWRfZmlsZXMpKSB7CisJCWlmICghcXVpZXQpCisJCQlwcmludGZfbG4oXygiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIikpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCFyZWZsb2dfZXhpc3RzKHJlZl9zdGFzaCkgJiYgZG9fY2xlYXJfc3Rhc2goKSkgeworCQlyZXQgPSAtMTsKKwkJaWYgKCFxdWlldCkKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIpKTsKKwkJZ290byBkb25lOworCX0KKworCWlmIChzdGFzaF9tc2cpCisJCXN0cmJ1Zl9hZGRzdHIoJnN0YXNoX21zZ19idWYsIHN0YXNoX21zZyk7CisJaWYgKGRvX2NyZWF0ZV9zdGFzaChwcywgJnN0YXNoX21zZ19idWYsIGluY2x1ZGVfdW50cmFja2VkLCBwYXRjaF9tb2RlLAorCQkJICAgICZpbmZvLCAmcGF0Y2gsIHF1aWV0KSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWlmIChkb19zdG9yZV9zdGFzaCgmaW5mby53X2NvbW1pdCwgc3Rhc2hfbXNnX2J1Zi5idWYsIDEpKSB7CisJCXJldCA9IC0xOworCQlpZiAoIXF1aWV0KQorCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIpKTsKKwkJZ290byBkb25lOworCX0KKworCWlmICghcXVpZXQpCisJCXByaW50Zl9sbihfKCJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJXMiKSwKKwkJCSAgc3Rhc2hfbXNnX2J1Zi5idWYpOworCisJaWYgKCFwYXRjaF9tb2RlKSB7CisJCWlmIChpbmNsdWRlX3VudHJhY2tlZCAmJiAhcHMtPm5yKSB7CisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQkJY3AuZ2l0X2NtZCA9IDE7CisJCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAiY2xlYW4iLCAiLS1mb3JjZSIsCisJCQkJCSAiLS1xdWlldCIsICItZCIsIE5VTEwpOworCQkJaWYgKGluY2x1ZGVfdW50cmFja2VkID09IElOQ0xVREVfQUxMX0ZJTEVTKQorCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi14Iik7CisJCQlpZiAocnVuX2NvbW1hbmQoJmNwKSkgeworCQkJCXJldCA9IC0xOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfQorCQlkaXNjYXJkX2NhY2hlKCk7CisJCWlmIChwcy0+bnIpIHsKKwkJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwX2FkZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwkJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwX2RpZmYgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcF9hcHBseSA9IENISUxEX1BST0NFU1NfSU5JVDsKKwkJCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisKKwkJCWNwX2FkZC5naXRfY21kID0gMTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3BfYWRkLmFyZ3MsICJhZGQiKTsKKwkJCWlmICghaW5jbHVkZV91bnRyYWNrZWQpCisJCQkJYXJndl9hcnJheV9wdXNoKCZjcF9hZGQuYXJncywgIi11Iik7CisJCQlpZiAoaW5jbHVkZV91bnRyYWNrZWQgPT0gSU5DTFVERV9BTExfRklMRVMpCisJCQkJYXJndl9hcnJheV9wdXNoKCZjcF9hZGQuYXJncywgIi0tZm9yY2UiKTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3BfYWRkLmFyZ3MsICItLSIpOworCQkJYWRkX3BhdGhzcGVjcygmY3BfYWRkLmFyZ3MsIHBzKTsKKwkJCWlmIChydW5fY29tbWFuZCgmY3BfYWRkKSkgeworCQkJCXJldCA9IC0xOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKworCQkJY3BfZGlmZi5naXRfY21kID0gMTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwX2RpZmYuYXJncywgImRpZmYtaW5kZXgiLCAiLXAiLAorCQkJCQkgIi0tY2FjaGVkIiwgIi0tYmluYXJ5IiwgIkhFQUQiLCAiLS0iLAorCQkJCQkgTlVMTCk7CisJCQlhZGRfcGF0aHNwZWNzKCZjcF9kaWZmLmFyZ3MsIHBzKTsKKwkJCWlmIChwaXBlX2NvbW1hbmQoJmNwX2RpZmYsIE5VTEwsIDAsICZvdXQsIDAsIE5VTEwsIDApKSB7CisJCQkJcmV0ID0gLTE7CisJCQkJZ290byBkb25lOworCQkJfQorCisJCQljcF9hcHBseS5naXRfY21kID0gMTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwX2FwcGx5LmFyZ3MsICJhcHBseSIsICItLWluZGV4IiwKKwkJCQkJICItUiIsIE5VTEwpOworCQkJaWYgKHBpcGVfY29tbWFuZCgmY3BfYXBwbHksIG91dC5idWYsIG91dC5sZW4sIE5VTEwsIDAsCisJCQkJCSBOVUxMLCAwKSkgeworCQkJCXJldCA9IC0xOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQkJY3AuZ2l0X2NtZCA9IDE7CisJCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAicmVzZXQiLCAiLS1oYXJkIiwgIi1xIiwKKwkJCQkJICItLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyIsIE5VTEwpOworCQkJaWYgKHJ1bl9jb21tYW5kKCZjcCkpIHsKKwkJCQlyZXQgPSAtMTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCX0KKworCQlpZiAoa2VlcF9pbmRleCA9PSAxICYmICFpc19udWxsX29pZCgmaW5mby5pX3RyZWUpKSB7CisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQkJY3AuZ2l0X2NtZCA9IDE7CisJCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAiY2hlY2tvdXQiLCAiLS1uby1vdmVybGF5IiwKKwkJCQkJIG9pZF90b19oZXgoJmluZm8uaV90cmVlKSwgIi0tIiwgTlVMTCk7CisJCQlpZiAoIXBzLT5ucikKKwkJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICI6LyIpOworCQkJZWxzZQorCQkJCWFkZF9wYXRoc3BlY3MoJmNwLmFyZ3MsIHBzKTsKKwkJCWlmIChydW5fY29tbWFuZCgmY3ApKSB7CisJCQkJcmV0ID0gLTE7CisJCQkJZ290byBkb25lOworCQkJfQorCQl9CisJCWdvdG8gZG9uZTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQljcC5naXRfY21kID0gMTsKKwkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgImFwcGx5IiwgIi1SIiwgTlVMTCk7CisKKwkJaWYgKHBpcGVfY29tbWFuZCgmY3AsIHBhdGNoLmJ1ZiwgcGF0Y2gubGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkgeworCQkJaWYgKCFxdWlldCkKKwkJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ2Fubm90IHJlbW92ZSAiCisJCQkJCQkgICAgICJ3b3JrdHJlZSBjaGFuZ2VzIikpOworCQkJcmV0ID0gLTE7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlpZiAoa2VlcF9pbmRleCA8IDEpIHsKKwkJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJCQljcC5naXRfY21kID0gMTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJyZXNldCIsICItcSIsICItLSIsIE5VTEwpOworCQkJYWRkX3BhdGhzcGVjcygmY3AuYXJncywgcHMpOworCQkJaWYgKHJ1bl9jb21tYW5kKCZjcCkpIHsKKwkJCQlyZXQgPSAtMTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCX0KKwkJZ290byBkb25lOworCX0KKworZG9uZToKKwlzdHJidWZfcmVsZWFzZSgmc3Rhc2hfbXNnX2J1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwdXNoX3N0YXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkgICAgICBpbnQgcHVzaF9hc3N1bWVkKQoreworCWludCBmb3JjZV9hc3N1bWUgPSAwOworCWludCBrZWVwX2luZGV4ID0gLTE7CisJaW50IHBhdGNoX21vZGUgPSAwOworCWludCBpbmNsdWRlX3VudHJhY2tlZCA9IDA7CisJaW50IHF1aWV0ID0gMDsKKwlpbnQgcGF0aHNwZWNfZmlsZV9udWwgPSAwOworCWNvbnN0IGNoYXIgKnN0YXNoX21zZyA9IE5VTEw7CisJY29uc3QgY2hhciAqcGF0aHNwZWNfZnJvbV9maWxlID0gTlVMTDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcHM7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdrJywgImtlZXAtaW5kZXgiLCAma2VlcF9pbmRleCwKKwkJCSBOXygia2VlcCBpbmRleCIpKSwKKwkJT1BUX0JPT0woJ3AnLCAicGF0Y2giLCAmcGF0Y2hfbW9kZSwKKwkJCSBOXygic3Rhc2ggaW4gcGF0Y2ggbW9kZSIpKSwKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJxdWlldCBtb2RlIikpLAorCQlPUFRfQk9PTCgndScsICJpbmNsdWRlLXVudHJhY2tlZCIsICZpbmNsdWRlX3VudHJhY2tlZCwKKwkJCSBOXygiaW5jbHVkZSB1bnRyYWNrZWQgZmlsZXMgaW4gc3Rhc2giKSksCisJCU9QVF9TRVRfSU5UKCdhJywgImFsbCIsICZpbmNsdWRlX3VudHJhY2tlZCwKKwkJCSAgICBOXygiaW5jbHVkZSBpZ25vcmUgZmlsZXMiKSwgMiksCisJCU9QVF9TVFJJTkcoJ20nLCAibWVzc2FnZSIsICZzdGFzaF9tc2csIE5fKCJtZXNzYWdlIiksCisJCQkgICBOXygic3Rhc2ggbWVzc2FnZSIpKSwKKwkJT1BUX1BBVEhTUEVDX0ZST01fRklMRSgmcGF0aHNwZWNfZnJvbV9maWxlKSwKKwkJT1BUX1BBVEhTUEVDX0ZJTEVfTlVMKCZwYXRoc3BlY19maWxlX251bCksCisJCU9QVF9FTkQoKQorCX07CisKKwlpZiAoYXJnYykgeworCQlmb3JjZV9hc3N1bWUgPSAhc3RyY21wKGFyZ3ZbMF0sICItcCIpOworCQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkJICAgICBnaXRfc3Rhc2hfcHVzaF91c2FnZSwKKwkJCQkgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKKwl9CisKKwlpZiAoYXJnYykgeworCQlpZiAoIXN0cmNtcChhcmd2WzBdLCAiLS0iKSkgeworCQkJYXJnYy0tOworCQkJYXJndisrOworCQl9IGVsc2UgaWYgKHB1c2hfYXNzdW1lZCAmJiAhZm9yY2VfYXNzdW1lKSB7CisJCQlkaWUoInN1YmNvbW1hbmQgd2Fzbid0IHNwZWNpZmllZDsgJ3B1c2gnIGNhbid0IGJlIGFzc3VtZWQgZHVlIHRvIHVuZXhwZWN0ZWQgdG9rZW4gJyVzJyIsCisJCQkgICAgYXJndlswXSk7CisJCX0KKwl9CisKKwlwYXJzZV9wYXRoc3BlYygmcHMsIDAsIFBBVEhTUEVDX1BSRUZFUl9GVUxMIHwgUEFUSFNQRUNfUFJFRklYX09SSUdJTiwKKwkJICAgICAgIHByZWZpeCwgYXJndik7CisKKwlpZiAocGF0aHNwZWNfZnJvbV9maWxlKSB7CisJCWlmIChwYXRjaF9tb2RlKQorCQkJZGllKF8oIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giKSk7CisKKwkJaWYgKHBzLm5yKQorCQkJZGllKF8oIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIpKTsKKworCQlwYXJzZV9wYXRoc3BlY19maWxlKCZwcywgMCwKKwkJCQkgICAgUEFUSFNQRUNfUFJFRkVSX0ZVTEwgfCBQQVRIU1BFQ19QUkVGSVhfT1JJR0lOLAorCQkJCSAgICBwcmVmaXgsIHBhdGhzcGVjX2Zyb21fZmlsZSwgcGF0aHNwZWNfZmlsZV9udWwpOworCX0gZWxzZSBpZiAocGF0aHNwZWNfZmlsZV9udWwpIHsKKwkJZGllKF8oIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWlyZXMgLS1wYXRoc3BlYy1mcm9tLWZpbGUiKSk7CisJfQorCisJcmV0dXJuIGRvX3B1c2hfc3Rhc2goJnBzLCBzdGFzaF9tc2csIHF1aWV0LCBrZWVwX2luZGV4LCBwYXRjaF9tb2RlLAorCQkJICAgICBpbmNsdWRlX3VudHJhY2tlZCk7Cit9CisKK3N0YXRpYyBpbnQgc2F2ZV9zdGFzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQga2VlcF9pbmRleCA9IC0xOworCWludCBwYXRjaF9tb2RlID0gMDsKKwlpbnQgaW5jbHVkZV91bnRyYWNrZWQgPSAwOworCWludCBxdWlldCA9IDA7CisJaW50IHJldCA9IDA7CisJY29uc3QgY2hhciAqc3Rhc2hfbXNnID0gTlVMTDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcHM7CisJc3RydWN0IHN0cmJ1ZiBzdGFzaF9tc2dfYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdrJywgImtlZXAtaW5kZXgiLCAma2VlcF9pbmRleCwKKwkJCSBOXygia2VlcCBpbmRleCIpKSwKKwkJT1BUX0JPT0woJ3AnLCAicGF0Y2giLCAmcGF0Y2hfbW9kZSwKKwkJCSBOXygic3Rhc2ggaW4gcGF0Y2ggbW9kZSIpKSwKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJxdWlldCBtb2RlIikpLAorCQlPUFRfQk9PTCgndScsICJpbmNsdWRlLXVudHJhY2tlZCIsICZpbmNsdWRlX3VudHJhY2tlZCwKKwkJCSBOXygiaW5jbHVkZSB1bnRyYWNrZWQgZmlsZXMgaW4gc3Rhc2giKSksCisJCU9QVF9TRVRfSU5UKCdhJywgImFsbCIsICZpbmNsdWRlX3VudHJhY2tlZCwKKwkJCSAgICBOXygiaW5jbHVkZSBpZ25vcmUgZmlsZXMiKSwgMiksCisJCU9QVF9TVFJJTkcoJ20nLCAibWVzc2FnZSIsICZzdGFzaF9tc2csICJtZXNzYWdlIiwKKwkJCSAgIE5fKCJzdGFzaCBtZXNzYWdlIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfc3Rhc2hfc2F2ZV91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOworCisJaWYgKGFyZ2MpCisJCXN0YXNoX21zZyA9IHN0cmJ1Zl9qb2luX2FyZ3YoJnN0YXNoX21zZ19idWYsIGFyZ2MsIGFyZ3YsICcgJyk7CisKKwltZW1zZXQoJnBzLCAwLCBzaXplb2YocHMpKTsKKwlyZXQgPSBkb19wdXNoX3N0YXNoKCZwcywgc3Rhc2hfbXNnLCBxdWlldCwga2VlcF9pbmRleCwKKwkJCSAgICBwYXRjaF9tb2RlLCBpbmNsdWRlX3VudHJhY2tlZCk7CisKKwlzdHJidWZfcmVsZWFzZSgmc3Rhc2hfbXNnX2J1Zik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNtZF9zdGFzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlwaWRfdCBwaWQgPSBnZXRwaWQoKTsKKwljb25zdCBjaGFyICppbmRleF9maWxlOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X3N0YXNoX2NvbmZpZywgTlVMTCk7CisKKwlpZiAodXNlX2xlZ2FjeV9zdGFzaCB8fAorCSAgICAhZ2l0X2Vudl9ib29sKCJHSVRfVEVTVF9TVEFTSF9VU0VfQlVJTFRJTiIsIC0xKSkKKwkJd2FybmluZyhfKCJ0aGUgc3Rhc2gudXNlQnVpbHRpbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQhXG4iCisJCQkgICJTZWUgaXRzIGVudHJ5IGluICdnaXQgaGVscCBjb25maWcnIGZvciBkZXRhaWxzLiIpKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X3N0YXNoX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9VTktOT1dOIHwgUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOworCisJaW5kZXhfZmlsZSA9IGdldF9pbmRleF9maWxlKCk7CisJc3RyYnVmX2FkZGYoJnN0YXNoX2luZGV4X3BhdGgsICIlcy5zdGFzaC4lIiBQUkl1TUFYLCBpbmRleF9maWxlLAorCQkgICAgKHVpbnRtYXhfdClwaWQpOworCisJaWYgKCFhcmdjKQorCQlyZXR1cm4gISFwdXNoX3N0YXNoKDAsIE5VTEwsIHByZWZpeCwgMCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiYXBwbHkiKSkKKwkJcmV0dXJuICEhYXBwbHlfc3Rhc2goYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJjbGVhciIpKQorCQlyZXR1cm4gISFjbGVhcl9zdGFzaChhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImRyb3AiKSkKKwkJcmV0dXJuICEhZHJvcF9zdGFzaChhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInBvcCIpKQorCQlyZXR1cm4gISFwb3Bfc3Rhc2goYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJicmFuY2giKSkKKwkJcmV0dXJuICEhYnJhbmNoX3N0YXNoKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAibGlzdCIpKQorCQlyZXR1cm4gISFsaXN0X3N0YXNoKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAic2hvdyIpKQorCQlyZXR1cm4gISFzaG93X3N0YXNoKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAic3RvcmUiKSkKKwkJcmV0dXJuICEhc3RvcmVfc3Rhc2goYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJjcmVhdGUiKSkKKwkJcmV0dXJuICEhY3JlYXRlX3N0YXNoKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAicHVzaCIpKQorCQlyZXR1cm4gISFwdXNoX3N0YXNoKGFyZ2MsIGFyZ3YsIHByZWZpeCwgMCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAic2F2ZSIpKQorCQlyZXR1cm4gISFzYXZlX3N0YXNoKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoKmFyZ3ZbMF0gIT0gJy0nKQorCQl1c2FnZV9tc2dfb3B0KHhzdHJmbXQoXygidW5rbm93biBzdWJjb21tYW5kOiAlcyIpLCBhcmd2WzBdKSwKKwkJCSAgICAgIGdpdF9zdGFzaF91c2FnZSwgb3B0aW9ucyk7CisKKwkvKiBBc3N1bWUgJ3N0YXNoIHB1c2gnICovCisJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAicHVzaCIpOworCWFyZ3ZfYXJyYXlfcHVzaHYoJmFyZ3MsIGFyZ3YpOworCXJldHVybiAhIXB1c2hfc3Rhc2goYXJncy5hcmdjLCBhcmdzLmFyZ3YsIHByZWZpeCwgMSk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3N0cmlwc3BhY2UuYyBiL2J1aWx0aW4vc3RyaXBzcGFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzNlYjgKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3N0cmlwc3BhY2UuYwpAQCAtMCwwICsxLDY1IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitzdGF0aWMgdm9pZCBjb21tZW50X2xpbmVzKHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwljaGFyICptc2c7CisJc2l6ZV90IGxlbjsKKworCW1zZyA9IHN0cmJ1Zl9kZXRhY2goYnVmLCAmbGVuKTsKKwlzdHJidWZfYWRkX2NvbW1lbnRlZF9saW5lcyhidWYsIG1zZywgbGVuKTsKKwlmcmVlKG1zZyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3RyaXBzcGFjZV91c2FnZVtdID0geworCU5fKCJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIpLAorCU5fKCJnaXQgc3RyaXBzcGFjZSBbLWMgfCAtLWNvbW1lbnQtbGluZXNdIiksCisJTlVMTAorfTsKKworZW51bSBzdHJpcHNwYWNlX21vZGUgeworCVNUUklQX0RFRkFVTFQgPSAwLAorCVNUUklQX0NPTU1FTlRTLAorCUNPTU1FTlRfTElORVMKK307CisKK2ludCBjbWRfc3RyaXBzcGFjZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWVudW0gc3RyaXBzcGFjZV9tb2RlIG1vZGUgPSBTVFJJUF9ERUZBVUxUOworCWludCBub25naXQ7CisKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0NNRE1PREUoJ3MnLCAic3RyaXAtY29tbWVudHMiLCAmbW9kZSwKKwkJCSAgICBOXygic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIiksCisJCQkgICAgU1RSSVBfQ09NTUVOVFMpLAorCQlPUFRfQ01ETU9ERSgnYycsICJjb21tZW50LWxpbmVzIiwgJm1vZGUsCisJCQkgICAgTl8oInByZXBlbmQgY29tbWVudCBjaGFyYWN0ZXIgYW5kIHNwYWNlIHRvIGVhY2ggbGluZSIpLAorCQkJICAgIENPTU1FTlRfTElORVMpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBzdHJpcHNwYWNlX3VzYWdlLCAwKTsKKwlpZiAoYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHN0cmlwc3BhY2VfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKG1vZGUgPT0gU1RSSVBfQ09NTUVOVFMgfHwgbW9kZSA9PSBDT01NRU5UX0xJTkVTKSB7CisJCXNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOworCQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJfQorCisJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDEwMjQpIDwgMCkKKwkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCB0aGUgaW5wdXQiKTsKKworCWlmIChtb2RlID09IFNUUklQX0RFRkFVTFQgfHwgbW9kZSA9PSBTVFJJUF9DT01NRU5UUykKKwkJc3RyYnVmX3N0cmlwc3BhY2UoJmJ1ZiwgbW9kZSA9PSBTVFJJUF9DT01NRU5UUyk7CisJZWxzZQorCQljb21tZW50X2xpbmVzKCZidWYpOworCisJd3JpdGVfb3JfZGllKDEsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jIGIvYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YzAzZDIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmMKQEAgLTAsMCArMSwyMzMxIEBACisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUtY29uZmlnLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZWZzcGVjLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiYWR2aWNlLmgiCisKKyNkZWZpbmUgT1BUX1FVSUVUICgxIDw8IDApCisjZGVmaW5lIE9QVF9DQUNIRUQgKDEgPDwgMSkKKyNkZWZpbmUgT1BUX1JFQ1VSU0lWRSAoMSA8PCAyKQorI2RlZmluZSBPUFRfRk9SQ0UgKDEgPDwgMykKKwordHlwZWRlZiB2b2lkICgqZWFjaF9zdWJtb2R1bGVfZm4pKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqbGlzdF9pdGVtLAorCQkJCSAgdm9pZCAqY2JfZGF0YSk7CisKK3N0YXRpYyBjaGFyICpnZXRfZGVmYXVsdF9yZW1vdGUodm9pZCkKK3sKKwljaGFyICpkZXN0ID0gTlVMTCwgKnJldDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIDAsIE5VTEwsIE5VTEwpOworCisJaWYgKCFyZWZuYW1lKQorCQlkaWUoXygiTm8gc3VjaCByZWY6ICVzIiksICJIRUFEIik7CisKKwkvKiBkZXRhY2hlZCBIRUFEICovCisJaWYgKCFzdHJjbXAocmVmbmFtZSwgIkhFQUQiKSkKKwkJcmV0dXJuIHhzdHJkdXAoIm9yaWdpbiIpOworCisJaWYgKCFza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy9oZWFkcy8iLCAmcmVmbmFtZSkpCisJCWRpZShfKCJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiKSwgcmVmbmFtZSk7CisKKwlzdHJidWZfYWRkZigmc2IsICJicmFuY2guJXMucmVtb3RlIiwgcmVmbmFtZSk7CisJaWYgKGdpdF9jb25maWdfZ2V0X3N0cmluZyhzYi5idWYsICZkZXN0KSkKKwkJcmV0ID0geHN0cmR1cCgib3JpZ2luIik7CisJZWxzZQorCQlyZXQgPSBkZXN0OworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHByaW50X2RlZmF1bHRfcmVtb3RlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNoYXIgKnJlbW90ZTsKKworCWlmIChhcmdjICE9IDEpCisJCWRpZShfKCJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSB0YWtlcyBubyBhcmd1bWVudHMiKSk7CisKKwlyZW1vdGUgPSBnZXRfZGVmYXVsdF9yZW1vdGUoKTsKKwlpZiAocmVtb3RlKQorCQlwcmludGYoIiVzXG4iLCByZW1vdGUpOworCisJZnJlZShyZW1vdGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YXJ0c193aXRoX2RvdF9zbGFzaChjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuIHN0clswXSA9PSAnLicgJiYgaXNfZGlyX3NlcChzdHJbMV0pOworfQorCitzdGF0aWMgaW50IHN0YXJ0c193aXRoX2RvdF9kb3Rfc2xhc2goY29uc3QgY2hhciAqc3RyKQoreworCXJldHVybiBzdHJbMF0gPT0gJy4nICYmIHN0clsxXSA9PSAnLicgJiYgaXNfZGlyX3NlcChzdHJbMl0pOworfQorCisvKgorICogUmV0dXJucyAxIGlmIGl0IHdhcyB0aGUgbGFzdCBjaG9wIGJlZm9yZSAnOicuCisgKi8KK3N0YXRpYyBpbnQgY2hvcF9sYXN0X2RpcihjaGFyICoqcmVtb3RldXJsLCBpbnQgaXNfcmVsYXRpdmUpCit7CisJY2hhciAqcmZpbmQgPSBmaW5kX2xhc3RfZGlyX3NlcCgqcmVtb3RldXJsKTsKKwlpZiAocmZpbmQpIHsKKwkJKnJmaW5kID0gJ1wwJzsKKwkJcmV0dXJuIDA7CisJfQorCisJcmZpbmQgPSBzdHJyY2hyKCpyZW1vdGV1cmwsICc6Jyk7CisJaWYgKHJmaW5kKSB7CisJCSpyZmluZCA9ICdcMCc7CisJCXJldHVybiAxOworCX0KKworCWlmIChpc19yZWxhdGl2ZSB8fCAhc3RyY21wKCIuIiwgKnJlbW90ZXVybCkpCisJCWRpZShfKCJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICclcyciKSwKKwkJCSpyZW1vdGV1cmwpOworCisJZnJlZSgqcmVtb3RldXJsKTsKKwkqcmVtb3RldXJsID0geHN0cmR1cCgiLiIpOworCXJldHVybiAwOworfQorCisvKgorICogVGhlIGB1cmxgIGFyZ3VtZW50IGlzIHRoZSBVUkwgdGhhdCBuYXZpZ2F0ZXMgdG8gdGhlIHN1Ym1vZHVsZSBvcmlnaW4KKyAqIHJlcG8uIFdoZW4gcmVsYXRpdmUsIHRoaXMgVVJMIGlzIHJlbGF0aXZlIHRvIHRoZSBzdXBlcnByb2plY3Qgb3JpZ2luCisgKiBVUkwgcmVwby4gVGhlIGB1cF9wYXRoYCBhcmd1bWVudCwgaWYgc3BlY2lmaWVkLCBpcyB0aGUgcmVsYXRpdmUKKyAqIHBhdGggdGhhdCBuYXZpZ2F0ZXMgZnJvbSB0aGUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZSB0byB0aGUgc3VwZXJwcm9qZWN0CisgKiB3b3JraW5nIHRyZWUuIFJldHVybnMgdGhlIG9yaWdpbiBVUkwgb2YgdGhlIHN1Ym1vZHVsZS4KKyAqCisgKiBSZXR1cm4gZWl0aGVyIGFuIGFic29sdXRlIFVSTCBvciBmaWxlc3lzdGVtIHBhdGggKGlmIHRoZSBzdXBlcnByb2plY3QKKyAqIG9yaWdpbiBVUkwgaXMgYW4gYWJzb2x1dGUgVVJMIG9yIGZpbGVzeXN0ZW0gcGF0aCwgcmVzcGVjdGl2ZWx5KSBvciBhCisgKiByZWxhdGl2ZSBmaWxlIHN5c3RlbSBwYXRoIChpZiB0aGUgc3VwZXJwcm9qZWN0IG9yaWdpbiBVUkwgaXMgYSByZWxhdGl2ZQorICogZmlsZSBzeXN0ZW0gcGF0aCkuCisgKgorICogV2hlbiB0aGUgb3V0cHV0IGlzIGEgcmVsYXRpdmUgZmlsZSBzeXN0ZW0gcGF0aCwgdGhlIHBhdGggaXMgZWl0aGVyCisgKiByZWxhdGl2ZSB0byB0aGUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZSwgaWYgdXBfcGF0aCBpcyBzcGVjaWZpZWQsIG9yIHRvCisgKiB0aGUgc3VwZXJwcm9qZWN0IHdvcmtpbmcgdHJlZSBvdGhlcndpc2UuCisgKgorICogTkVFRFNXT1JLOiBUaGlzIHdvcmtzIGluY29ycmVjdGx5IG9uIHRoZSBkb21haW4gYW5kIHByb3RvY29sIHBhcnQuCisgKiByZW1vdGVfdXJsICAgICAgdXJsICAgICAgICAgICAgICBvdXRjb21lICAgICAgICAgIGV4cGVjdGF0aW9uCisgKiBodHRwOi8vYS5jb20vYiAgLi4vYyAgICAgICAgICAgICBodHRwOi8vYS5jb20vYyAgIGFzIGlzCisgKiBodHRwOi8vYS5jb20vYi8gLi4vYyAgICAgICAgICAgICBodHRwOi8vYS5jb20vYyAgIHNhbWUgYXMgcHJldmlvdXMgbGluZSwgYnV0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZSB0cmFpbGluZyBzbGFzaCBpbiB1cmwKKyAqIGh0dHA6Ly9hLmNvbS9iICAuLi8uLi9jICAgICAgICAgIGh0dHA6Ly9jICAgICAgICAgZXJyb3Igb3V0CisgKiBodHRwOi8vYS5jb20vYiAgLi4vLi4vLi4vYyAgICAgICBodHRwOi9jICAgICAgICAgIGVycm9yIG91dAorICogaHR0cDovL2EuY29tL2IgIC4uLy4uLy4uLy4uL2MgICAgaHR0cDpjICAgICAgICAgICBlcnJvciBvdXQKKyAqIGh0dHA6Ly9hLmNvbS9iICAuLi8uLi8uLi8uLi8uLi9jICAgIC46YyAgICAgICAgICAgZXJyb3Igb3V0CisgKiBORUVEU1dPUks6IEdpdmVuIGhvdyBjaG9wX2xhc3RfZGlyKCkgd29ya3MsIHRoaXMgZnVuY3Rpb24gaXMgYnJva2VuCisgKiB3aGVuIGEgbG9jYWwgcGFydCBoYXMgYSBjb2xvbiBpbiBpdHMgcGF0aCBjb21wb25lbnQsIHRvby4KKyAqLworc3RhdGljIGNoYXIgKnJlbGF0aXZlX3VybChjb25zdCBjaGFyICpyZW1vdGVfdXJsLAorCQkJCWNvbnN0IGNoYXIgKnVybCwKKwkJCQljb25zdCBjaGFyICp1cF9wYXRoKQoreworCWludCBpc19yZWxhdGl2ZSA9IDA7CisJaW50IGNvbG9uc2VwID0gMDsKKwljaGFyICpvdXQ7CisJY2hhciAqcmVtb3RldXJsID0geHN0cmR1cChyZW1vdGVfdXJsKTsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihyZW1vdGV1cmwpOworCisJaWYgKGlzX2Rpcl9zZXAocmVtb3RldXJsW2xlbi0xXSkpCisJCXJlbW90ZXVybFtsZW4tMV0gPSAnXDAnOworCisJaWYgKCF1cmxfaXNfbG9jYWxfbm90X3NzaChyZW1vdGV1cmwpIHx8IGlzX2Fic29sdXRlX3BhdGgocmVtb3RldXJsKSkKKwkJaXNfcmVsYXRpdmUgPSAwOworCWVsc2UgeworCQlpc19yZWxhdGl2ZSA9IDE7CisJCS8qCisJCSAqIFByZXBlbmQgYSAnLi8nIHRvIGVuc3VyZSBhbGwgcmVsYXRpdmUKKwkJICogcmVtb3RldXJscyBzdGFydCB3aXRoICcuLycgb3IgJy4uLycKKwkJICovCisJCWlmICghc3RhcnRzX3dpdGhfZG90X3NsYXNoKHJlbW90ZXVybCkgJiYKKwkJICAgICFzdGFydHNfd2l0aF9kb3RfZG90X3NsYXNoKHJlbW90ZXVybCkpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmc2IpOworCQkJc3RyYnVmX2FkZGYoJnNiLCAiLi8lcyIsIHJlbW90ZXVybCk7CisJCQlmcmVlKHJlbW90ZXVybCk7CisJCQlyZW1vdGV1cmwgPSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7CisJCX0KKwl9CisJLyoKKwkgKiBXaGVuIHRoZSB1cmwgc3RhcnRzIHdpdGggJy4uLycsIHJlbW92ZSB0aGF0IGFuZCB0aGUKKwkgKiBsYXN0IGRpcmVjdG9yeSBpbiByZW1vdGV1cmwuCisJICovCisJd2hpbGUgKHVybCkgeworCQlpZiAoc3RhcnRzX3dpdGhfZG90X2RvdF9zbGFzaCh1cmwpKSB7CisJCQl1cmwgKz0gMzsKKwkJCWNvbG9uc2VwIHw9IGNob3BfbGFzdF9kaXIoJnJlbW90ZXVybCwgaXNfcmVsYXRpdmUpOworCQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoX2RvdF9zbGFzaCh1cmwpKQorCQkJdXJsICs9IDI7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKwlzdHJidWZfcmVzZXQoJnNiKTsKKwlzdHJidWZfYWRkZigmc2IsICIlcyVzJXMiLCByZW1vdGV1cmwsIGNvbG9uc2VwID8gIjoiIDogIi8iLCB1cmwpOworCWlmIChlbmRzX3dpdGgodXJsLCAiLyIpKQorCQlzdHJidWZfc2V0bGVuKCZzYiwgc2IubGVuIC0gMSk7CisJZnJlZShyZW1vdGV1cmwpOworCisJaWYgKHN0YXJ0c193aXRoX2RvdF9zbGFzaChzYi5idWYpKQorCQlvdXQgPSB4c3RyZHVwKHNiLmJ1ZiArIDIpOworCWVsc2UKKwkJb3V0ID0geHN0cmR1cChzYi5idWYpOworCXN0cmJ1Zl9yZXNldCgmc2IpOworCisJaWYgKCF1cF9wYXRoIHx8ICFpc19yZWxhdGl2ZSkKKwkJcmV0dXJuIG91dDsKKworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzJXMiLCB1cF9wYXRoLCBvdXQpOworCWZyZWUob3V0KTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworfQorCitzdGF0aWMgaW50IHJlc29sdmVfcmVsYXRpdmVfdXJsKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNoYXIgKnJlbW90ZXVybCA9IE5VTEw7CisJY2hhciAqcmVtb3RlID0gZ2V0X2RlZmF1bHRfcmVtb3RlKCk7CisJY29uc3QgY2hhciAqdXBfcGF0aCA9IE5VTEw7CisJY2hhciAqcmVzOworCWNvbnN0IGNoYXIgKnVybDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoYXJnYyAhPSAyICYmIGFyZ2MgIT0gMykKKwkJZGllKCJyZXNvbHZlLXJlbGF0aXZlLXVybCBvbmx5IGFjY2VwdHMgb25lIG9yIHR3byBhcmd1bWVudHMiKTsKKworCXVybCA9IGFyZ3ZbMV07CisJc3RyYnVmX2FkZGYoJnNiLCAicmVtb3RlLiVzLnVybCIsIHJlbW90ZSk7CisJZnJlZShyZW1vdGUpOworCisJaWYgKGdpdF9jb25maWdfZ2V0X3N0cmluZyhzYi5idWYsICZyZW1vdGV1cmwpKQorCQkvKiB0aGUgcmVwb3NpdG9yeSBpcyBpdHMgb3duIGF1dGhvcml0YXRpdmUgdXBzdHJlYW0gKi8KKwkJcmVtb3RldXJsID0geGdldGN3ZCgpOworCisJaWYgKGFyZ2MgPT0gMykKKwkJdXBfcGF0aCA9IGFyZ3ZbMl07CisKKwlyZXMgPSByZWxhdGl2ZV91cmwocmVtb3RldXJsLCB1cmwsIHVwX3BhdGgpOworCXB1dHMocmVzKTsKKwlmcmVlKHJlcyk7CisJZnJlZShyZW1vdGV1cmwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlc29sdmVfcmVsYXRpdmVfdXJsX3Rlc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY2hhciAqcmVtb3RldXJsLCAqcmVzOworCWNvbnN0IGNoYXIgKnVwX3BhdGgsICp1cmw7CisKKwlpZiAoYXJnYyAhPSA0KQorCQlkaWUoInJlc29sdmUtcmVsYXRpdmUtdXJsLXRlc3Qgb25seSBhY2NlcHRzIHRocmVlIGFyZ3VtZW50czogPHVwX3BhdGg+IDxyZW1vdGV1cmw+IDx1cmw+Iik7CisKKwl1cF9wYXRoID0gYXJndlsxXTsKKwlyZW1vdGV1cmwgPSB4c3RyZHVwKGFyZ3ZbMl0pOworCXVybCA9IGFyZ3ZbM107CisKKwlpZiAoIXN0cmNtcCh1cF9wYXRoLCAiKG51bGwpIikpCisJCXVwX3BhdGggPSBOVUxMOworCisJcmVzID0gcmVsYXRpdmVfdXJsKHJlbW90ZXVybCwgdXJsLCB1cF9wYXRoKTsKKwlwdXRzKHJlcyk7CisJZnJlZShyZXMpOworCWZyZWUocmVtb3RldXJsKTsKKwlyZXR1cm4gMDsKK30KKworLyogdGhlIHJlc3VsdCBzaG91bGQgYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4gKi8KK3N0YXRpYyBjaGFyICpnZXRfc3VibW9kdWxlX2Rpc3BsYXlwYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpzdXBlcl9wcmVmaXggPSBnZXRfc3VwZXJfcHJlZml4KCk7CisKKwlpZiAocHJlZml4ICYmIHN1cGVyX3ByZWZpeCkgeworCQlCVUcoImNhbm5vdCBoYXZlIHByZWZpeCAnJXMnIGFuZCBzdXBlcnByZWZpeCAnJXMnIiwKKwkJICAgIHByZWZpeCwgc3VwZXJfcHJlZml4KTsKKwl9IGVsc2UgaWYgKHByZWZpeCkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCWNoYXIgKmRpc3BsYXlwYXRoID0geHN0cmR1cChyZWxhdGl2ZV9wYXRoKHBhdGgsIHByZWZpeCwgJnNiKSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCXJldHVybiBkaXNwbGF5cGF0aDsKKwl9IGVsc2UgaWYgKHN1cGVyX3ByZWZpeCkgeworCQlyZXR1cm4geHN0cmZtdCgiJXMlcyIsIHN1cGVyX3ByZWZpeCwgcGF0aCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHhzdHJkdXAocGF0aCk7CisJfQorfQorCitzdGF0aWMgY2hhciAqY29tcHV0ZV9yZXZfbmFtZShjb25zdCBjaGFyICpzdWJfcGF0aCwgY29uc3QgY2hhciogb2JqZWN0X2lkKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICoqKmQ7CisKKwlzdGF0aWMgY29uc3QgY2hhciAqZGVzY3JpYmVfYmFyZVtdID0geyBOVUxMIH07CisKKwlzdGF0aWMgY29uc3QgY2hhciAqZGVzY3JpYmVfdGFnc1tdID0geyAiLS10YWdzIiwgTlVMTCB9OworCisJc3RhdGljIGNvbnN0IGNoYXIgKmRlc2NyaWJlX2NvbnRhaW5zW10gPSB7ICItLWNvbnRhaW5zIiwgTlVMTCB9OworCisJc3RhdGljIGNvbnN0IGNoYXIgKmRlc2NyaWJlX2FsbF9hbHdheXNbXSA9IHsgIi0tYWxsIiwgIi0tYWx3YXlzIiwgTlVMTCB9OworCisJc3RhdGljIGNvbnN0IGNoYXIgKipkZXNjcmliZV9hcmd2W10gPSB7IGRlc2NyaWJlX2JhcmUsIGRlc2NyaWJlX3RhZ3MsCisJCQkJCQlkZXNjcmliZV9jb250YWlucywKKwkJCQkJCWRlc2NyaWJlX2FsbF9hbHdheXMsIE5VTEwgfTsKKworCWZvciAoZCA9IGRlc2NyaWJlX2FyZ3Y7ICpkOyBkKyspIHsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52KCZjcC5lbnZfYXJyYXkpOworCQljcC5kaXIgPSBzdWJfcGF0aDsKKwkJY3AuZ2l0X2NtZCA9IDE7CisJCWNwLm5vX3N0ZGVyciA9IDE7CisKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiZGVzY3JpYmUiKTsKKwkJYXJndl9hcnJheV9wdXNodigmY3AuYXJncywgKmQpOworCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIG9iamVjdF9pZCk7CisKKwkJaWYgKCFjYXB0dXJlX2NvbW1hbmQoJmNwLCAmc2IsIDApKSB7CisJCQlzdHJidWZfc3RyaXBfc3VmZml4KCZzYiwgIlxuIik7CisJCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IG1vZHVsZV9saXN0IHsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiplbnRyaWVzOworCWludCBhbGxvYywgbnI7Cit9OworI2RlZmluZSBNT0RVTEVfTElTVF9JTklUIHsgTlVMTCwgMCwgMCB9CisKK3N0YXRpYyBpbnQgbW9kdWxlX2xpc3RfY29tcHV0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCQkgICAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICAgIHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkgICAgICAgc3RydWN0IG1vZHVsZV9saXN0ICpsaXN0KQoreworCWludCBpLCByZXN1bHQgPSAwOworCWNoYXIgKnBzX21hdGNoZWQgPSBOVUxMOworCXBhcnNlX3BhdGhzcGVjKHBhdGhzcGVjLCAwLAorCQkgICAgICAgUEFUSFNQRUNfUFJFRkVSX0ZVTEwsCisJCSAgICAgICBwcmVmaXgsIGFyZ3YpOworCisJaWYgKHBhdGhzcGVjLT5ucikKKwkJcHNfbWF0Y2hlZCA9IHhjYWxsb2MocGF0aHNwZWMtPm5yLCAxKTsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisKKwkJaWYgKCFtYXRjaF9wYXRoc3BlYygmdGhlX2luZGV4LCBwYXRoc3BlYywgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLAorCQkJCSAgICAwLCBwc19tYXRjaGVkLCAxKSB8fAorCQkgICAgIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCWNvbnRpbnVlOworCisJCUFMTE9DX0dST1cobGlzdC0+ZW50cmllcywgbGlzdC0+bnIgKyAxLCBsaXN0LT5hbGxvYyk7CisJCWxpc3QtPmVudHJpZXNbbGlzdC0+bnIrK10gPSBjZTsKKwkJd2hpbGUgKGkgKyAxIDwgYWN0aXZlX25yICYmCisJCSAgICAgICAhc3RyY21wKGNlLT5uYW1lLCBhY3RpdmVfY2FjaGVbaSArIDFdLT5uYW1lKSkKKwkJCS8qCisJCQkgKiBTa2lwIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGluIGRpZmZlcmVudCBzdGFnZXMKKwkJCSAqIHRvIG1ha2Ugc3VyZSBhbiBlbnRyeSBpcyByZXR1cm5lZCBvbmx5IG9uY2UuCisJCQkgKi8KKwkJCWkrKzsKKwl9CisKKwlpZiAocHNfbWF0Y2hlZCAmJiByZXBvcnRfcGF0aF9lcnJvcihwc19tYXRjaGVkLCBwYXRoc3BlYykpCisJCXJlc3VsdCA9IC0xOworCisJZnJlZShwc19tYXRjaGVkKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIG1vZHVsZV9saXN0X2FjdGl2ZShzdHJ1Y3QgbW9kdWxlX2xpc3QgKmxpc3QpCit7CisJaW50IGk7CisJc3RydWN0IG1vZHVsZV9saXN0IGFjdGl2ZV9tb2R1bGVzID0gTU9EVUxFX0xJU1RfSU5JVDsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBsaXN0LT5lbnRyaWVzW2ldOworCisJCWlmICghaXNfc3VibW9kdWxlX2FjdGl2ZSh0aGVfcmVwb3NpdG9yeSwgY2UtPm5hbWUpKQorCQkJY29udGludWU7CisKKwkJQUxMT0NfR1JPVyhhY3RpdmVfbW9kdWxlcy5lbnRyaWVzLAorCQkJICAgYWN0aXZlX21vZHVsZXMubnIgKyAxLAorCQkJICAgYWN0aXZlX21vZHVsZXMuYWxsb2MpOworCQlhY3RpdmVfbW9kdWxlcy5lbnRyaWVzW2FjdGl2ZV9tb2R1bGVzLm5yKytdID0gY2U7CisJfQorCisJZnJlZShsaXN0LT5lbnRyaWVzKTsKKwkqbGlzdCA9IGFjdGl2ZV9tb2R1bGVzOworfQorCitzdGF0aWMgY2hhciAqZ2V0X3VwX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlmb3IgKGkgPSBjb3VudF9zbGFzaGVzKHBhdGgpOyBpOyBpLS0pCisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCAiLi4vIik7CisKKwkvKgorCSAqIENoZWNrIGlmICdwYXRoJyBlbmRzIHdpdGggc2xhc2ggb3Igbm90CisJICogZm9yIGhhdmluZyB0aGUgc2FtZSBvdXRwdXQgZm9yIGRpci9zdWJfZGlyCisJICogYW5kIGRpci9zdWJfZGlyLworCSAqLworCWlmICghaXNfZGlyX3NlcChwYXRoW3N0cmxlbihwYXRoKSAtIDFdKSkKKwkJc3RyYnVmX2FkZHN0cigmc2IsICIuLi8iKTsKKworCXJldHVybiBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgbW9kdWxlX2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCXN0cnVjdCBtb2R1bGVfbGlzdCBsaXN0ID0gTU9EVUxFX0xJU1RfSU5JVDsKKworCXN0cnVjdCBvcHRpb24gbW9kdWxlX2xpc3Rfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKDAsICJwcmVmaXgiLCAmcHJlZml4LAorCQkJICAgTl8oInBhdGgiKSwKKwkJCSAgIE5fKCJhbHRlcm5hdGl2ZSBhbmNob3IgZm9yIHJlbGF0aXZlIHBhdGhzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJY29uc3QgY2hhciAqY29uc3QgZ2l0X3N1Ym1vZHVsZV9oZWxwZXJfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIiksCisJCU5VTEwKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBtb2R1bGVfbGlzdF9vcHRpb25zLAorCQkJICAgICBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZSwgMCk7CisKKwlpZiAobW9kdWxlX2xpc3RfY29tcHV0ZShhcmdjLCBhcmd2LCBwcmVmaXgsICZwYXRoc3BlYywgJmxpc3QpIDwgMCkKKwkJcmV0dXJuIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC5ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBsaXN0LmVudHJpZXNbaV07CisKKwkJaWYgKGNlX3N0YWdlKGNlKSkKKwkJCXByaW50ZigiJTA2byAlcyBVXHQiLCBjZS0+Y2VfbW9kZSwgb2lkX3RvX2hleCgmbnVsbF9vaWQpKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlMDZvICVzICVkXHQiLCBjZS0+Y2VfbW9kZSwKKwkJCSAgICAgICBvaWRfdG9faGV4KCZjZS0+b2lkKSwgY2Vfc3RhZ2UoY2UpKTsKKworCQlmcHJpbnRmKHN0ZG91dCwgIiVzXG4iLCBjZS0+bmFtZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmb3JfZWFjaF9saXN0ZWRfc3VibW9kdWxlKGNvbnN0IHN0cnVjdCBtb2R1bGVfbGlzdCAqbGlzdCwKKwkJCQkgICAgICBlYWNoX3N1Ym1vZHVsZV9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykKKwkJZm4obGlzdC0+ZW50cmllc1tpXSwgY2JfZGF0YSk7Cit9CisKK3N0cnVjdCBmb3JlYWNoX2NiIHsKKwlpbnQgYXJnYzsKKwljb25zdCBjaGFyICoqYXJndjsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJaW50IHF1aWV0OworCWludCByZWN1cnNpdmU7Cit9OworI2RlZmluZSBGT1JFQUNIX0NCX0lOSVQgeyAwIH0KKworc3RhdGljIHZvaWQgcnVuY29tbWFuZF9pbl9zdWJtb2R1bGVfY2IoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpsaXN0X2l0ZW0sCisJCQkJICAgICAgIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGZvcmVhY2hfY2IgKmluZm8gPSBjYl9kYXRhOworCWNvbnN0IGNoYXIgKnBhdGggPSBsaXN0X2l0ZW0tPm5hbWU7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY2Vfb2lkID0gJmxpc3RfaXRlbS0+b2lkOworCisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNoYXIgKmRpc3BsYXlwYXRoOworCisJZGlzcGxheXBhdGggPSBnZXRfc3VibW9kdWxlX2Rpc3BsYXlwYXRoKHBhdGgsIGluZm8tPnByZWZpeCk7CisKKwlzdWIgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKHRoZV9yZXBvc2l0b3J5LCAmbnVsbF9vaWQsIHBhdGgpOworCisJaWYgKCFzdWIpCisJCWRpZShfKCJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcycgaW4gLmdpdG1vZHVsZXMiKSwKKwkJCWRpc3BsYXlwYXRoKTsKKworCWlmICghaXNfc3VibW9kdWxlX3BvcHVsYXRlZF9nZW50bHkocGF0aCwgTlVMTCkpCisJCWdvdG8gY2xlYW51cDsKKworCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52KCZjcC5lbnZfYXJyYXkpOworCisJLyoKKwkgKiBGb3IgdGhlIHB1cnBvc2Ugb2YgZXhlY3V0aW5nIDxjb21tYW5kPiBpbiB0aGUgc3VibW9kdWxlLAorCSAqIHNlcGFyYXRlIHNoZWxsIGlzIHVzZWQgZm9yIHRoZSBwdXJwb3NlIG9mIHJ1bm5pbmcgdGhlCisJICogY2hpbGQgcHJvY2Vzcy4KKwkgKi8KKwljcC51c2Vfc2hlbGwgPSAxOworCWNwLmRpciA9IHBhdGg7CisKKwkvKgorCSAqIE5FRURTV09SSzogdGhlIGNvbW1hbmQgY3VycmVudGx5IGhhcyBhY2Nlc3MgdG8gdGhlIHZhcmlhYmxlcyAkbmFtZSwKKwkgKiAkc21fcGF0aCwgJGRpc3BsYXlwYXRoLCAkc2hhMSBhbmQgJHRvcGxldmVsIG9ubHkgd2hlbiB0aGUgY29tbWFuZAorCSAqIGNvbnRhaW5zIGEgc2luZ2xlIGFyZ3VtZW50LiBUaGlzIGlzIGRvbmUgZm9yIG1haW50YWluaW5nIGEgZmFpdGhmdWwKKwkgKiB0cmFuc2xhdGlvbiBmcm9tIHNoZWxsIHNjcmlwdC4KKwkgKi8KKwlpZiAoaW5mby0+YXJnYyA9PSAxKSB7CisJCWNoYXIgKnRvcGxldmVsID0geGdldGN3ZCgpOworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJYXJndl9hcnJheV9wdXNoZigmY3AuZW52X2FycmF5LCAibmFtZT0lcyIsIHN1Yi0+bmFtZSk7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmVudl9hcnJheSwgInNtX3BhdGg9JXMiLCBwYXRoKTsKKwkJYXJndl9hcnJheV9wdXNoZigmY3AuZW52X2FycmF5LCAiZGlzcGxheXBhdGg9JXMiLCBkaXNwbGF5cGF0aCk7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmVudl9hcnJheSwgInNoYTE9JXMiLAorCQkJCW9pZF90b19oZXgoY2Vfb2lkKSk7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmVudl9hcnJheSwgInRvcGxldmVsPSVzIiwgdG9wbGV2ZWwpOworCisJCS8qCisJCSAqIFNpbmNlIHRoZSBwYXRoIHZhcmlhYmxlIHdhcyBhY2Nlc3NpYmxlIGZyb20gdGhlIHNjcmlwdAorCQkgKiBiZWZvcmUgcG9ydGluZywgaXQgaXMgYWxzbyBtYWRlIGF2YWlsYWJsZSBhZnRlciBwb3J0aW5nLgorCQkgKiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgIlBBVEgiIGhhcyBhIHZlcnkgc3BlY2lhbCBwdXJwb3NlCisJCSAqIG9uIHdpbmRvd3MuIEFuZCBzaW5jZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCisJCSAqIGNhc2UtaW5zZW5zaXRpdmUgaW4gd2luZG93cywgaXQgaW50ZXJmZXJlcyB3aXRoIHRoZQorCQkgKiBleGlzdGluZyBQQVRIIHZhcmlhYmxlLiBIZW5jZSwgdG8gYXZvaWQgdGhhdCwgd2UgZXhwb3NlCisJCSAqIHBhdGggdmlhIHRoZSBhcmdzIGFyZ3ZfYXJyYXkgYW5kIG5vdCB2aWEgZW52X2FycmF5LgorCQkgKi8KKwkJc3FfcXVvdGVfYnVmKCZzYiwgcGF0aCk7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmFyZ3MsICJwYXRoPSVzOyAlcyIsCisJCQkJIHNiLmJ1ZiwgaW5mby0+YXJndlswXSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCWZyZWUodG9wbGV2ZWwpOworCX0gZWxzZSB7CisJCWFyZ3ZfYXJyYXlfcHVzaHYoJmNwLmFyZ3MsIGluZm8tPmFyZ3YpOworCX0KKworCWlmICghaW5mby0+cXVpZXQpCisJCXByaW50ZihfKCJFbnRlcmluZyAnJXMnXG4iKSwgZGlzcGxheXBhdGgpOworCisJaWYgKGluZm8tPmFyZ3ZbMF0gJiYgcnVuX2NvbW1hbmQoJmNwKSkKKwkJZGllKF8oInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyBmb3IgJXNcbi4iKSwKKwkJCWRpc3BsYXlwYXRoKTsKKworCWlmIChpbmZvLT5yZWN1cnNpdmUpIHsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3ByID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJCWNwci5naXRfY21kID0gMTsKKwkJY3ByLmRpciA9IHBhdGg7CisJCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52KCZjcHIuZW52X2FycmF5KTsKKworCQlhcmd2X2FycmF5X3B1c2hsKCZjcHIuYXJncywgIi0tc3VwZXItcHJlZml4IiwgTlVMTCk7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwci5hcmdzLCAiJXMvIiwgZGlzcGxheXBhdGgpOworCQlhcmd2X2FycmF5X3B1c2hsKCZjcHIuYXJncywgInN1Ym1vZHVsZS0taGVscGVyIiwgImZvcmVhY2giLCAiLS1yZWN1cnNpdmUiLAorCQkJCU5VTEwpOworCisJCWlmIChpbmZvLT5xdWlldCkKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3ByLmFyZ3MsICItLXF1aWV0Iik7CisKKwkJYXJndl9hcnJheV9wdXNoKCZjcHIuYXJncywgIi0tIik7CisJCWFyZ3ZfYXJyYXlfcHVzaHYoJmNwci5hcmdzLCBpbmZvLT5hcmd2KTsKKworCQlpZiAocnVuX2NvbW1hbmQoJmNwcikpCisJCQlkaWUoXygicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIHdoaWxlICIKKwkJCQkicmVjdXJzaW5nIGluIHRoZSBuZXN0ZWQgc3VibW9kdWxlcyBvZiAlc1xuLiIpLAorCQkJCWRpc3BsYXlwYXRoKTsKKwl9CisKK2NsZWFudXA6CisJZnJlZShkaXNwbGF5cGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgbW9kdWxlX2ZvcmVhY2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGZvcmVhY2hfY2IgaW5mbyA9IEZPUkVBQ0hfQ0JfSU5JVDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJc3RydWN0IG1vZHVsZV9saXN0IGxpc3QgPSBNT0RVTEVfTElTVF9JTklUOworCisJc3RydWN0IG9wdGlvbiBtb2R1bGVfZm9yZWFjaF9vcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJmluZm8ucXVpZXQsIE5fKCJTdXBwcmVzcyBvdXRwdXQgb2YgZW50ZXJpbmcgZWFjaCBzdWJtb2R1bGUgY29tbWFuZCIpKSwKKwkJT1BUX0JPT0woMCwgInJlY3Vyc2l2ZSIsICZpbmZvLnJlY3Vyc2l2ZSwKKwkJCSBOXygiUmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJY29uc3QgY2hhciAqY29uc3QgZ2l0X3N1Ym1vZHVsZV9oZWxwZXJfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCBzdWJtb2R1bGUtLWhlbHBlciBmb3JlYWNoIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gPGNvbW1hbmQ+IiksCisJCU5VTEwKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBtb2R1bGVfZm9yZWFjaF9vcHRpb25zLAorCQkJICAgICBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZSwgMCk7CisKKwlpZiAobW9kdWxlX2xpc3RfY29tcHV0ZSgwLCBOVUxMLCBwcmVmaXgsICZwYXRoc3BlYywgJmxpc3QpIDwgMCkKKwkJcmV0dXJuIDE7CisKKwlpbmZvLmFyZ2MgPSBhcmdjOworCWluZm8uYXJndiA9IGFyZ3Y7CisJaW5mby5wcmVmaXggPSBwcmVmaXg7CisKKwlmb3JfZWFjaF9saXN0ZWRfc3VibW9kdWxlKCZsaXN0LCBydW5jb21tYW5kX2luX3N1Ym1vZHVsZV9jYiwgJmluZm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpjb21wdXRlX3N1Ym1vZHVsZV9jbG9uZV91cmwoY29uc3QgY2hhciAqcmVsX3VybCkKK3sKKwljaGFyICpyZW1vdGV1cmwsICpyZWx1cmw7CisJY2hhciAqcmVtb3RlID0gZ2V0X2RlZmF1bHRfcmVtb3RlKCk7CisJc3RydWN0IHN0cmJ1ZiByZW1vdGVzYiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJnJlbW90ZXNiLCAicmVtb3RlLiVzLnVybCIsIHJlbW90ZSk7CisJaWYgKGdpdF9jb25maWdfZ2V0X3N0cmluZyhyZW1vdGVzYi5idWYsICZyZW1vdGV1cmwpKSB7CisJCXdhcm5pbmcoXygiY291bGQgbm90IGxvb2sgdXAgY29uZmlndXJhdGlvbiAnJXMnLiBBc3N1bWluZyB0aGlzIHJlcG9zaXRvcnkgaXMgaXRzIG93biBhdXRob3JpdGF0aXZlIHVwc3RyZWFtLiIpLCByZW1vdGVzYi5idWYpOworCQlyZW1vdGV1cmwgPSB4Z2V0Y3dkKCk7CisJfQorCXJlbHVybCA9IHJlbGF0aXZlX3VybChyZW1vdGV1cmwsIHJlbF91cmwsIE5VTEwpOworCisJZnJlZShyZW1vdGUpOworCWZyZWUocmVtb3RldXJsKTsKKwlzdHJidWZfcmVsZWFzZSgmcmVtb3Rlc2IpOworCisJcmV0dXJuIHJlbHVybDsKK30KKworc3RydWN0IGluaXRfY2IgeworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OworCisjZGVmaW5lIElOSVRfQ0JfSU5JVCB7IE5VTEwsIDAgfQorCitzdGF0aWMgdm9pZCBpbml0X3N1Ym1vZHVsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljaGFyICp1cGQgPSBOVUxMLCAqdXJsID0gTlVMTCwgKmRpc3BsYXlwYXRoOworCisJZGlzcGxheXBhdGggPSBnZXRfc3VibW9kdWxlX2Rpc3BsYXlwYXRoKHBhdGgsIHByZWZpeCk7CisKKwlzdWIgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKHRoZV9yZXBvc2l0b3J5LCAmbnVsbF9vaWQsIHBhdGgpOworCisJaWYgKCFzdWIpCisJCWRpZShfKCJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcycgaW4gLmdpdG1vZHVsZXMiKSwKKwkJCWRpc3BsYXlwYXRoKTsKKworCS8qCisJICogTkVFRFNXT1JLOiBJbiBhIG11bHRpLXdvcmtpbmctdHJlZSB3b3JsZCwgdGhpcyBuZWVkcyB0byBiZQorCSAqIHNldCBpbiB0aGUgcGVyLXdvcmt0cmVlIGNvbmZpZy4KKwkgKgorCSAqIFNldCBhY3RpdmUgZmxhZyBmb3IgdGhlIHN1Ym1vZHVsZSBiZWluZyBpbml0aWFsaXplZAorCSAqLworCWlmICghaXNfc3VibW9kdWxlX2FjdGl2ZSh0aGVfcmVwb3NpdG9yeSwgcGF0aCkpIHsKKwkJc3RyYnVmX2FkZGYoJnNiLCAic3VibW9kdWxlLiVzLmFjdGl2ZSIsIHN1Yi0+bmFtZSk7CisJCWdpdF9jb25maWdfc2V0X2dlbnRseShzYi5idWYsICJ0cnVlIik7CisJCXN0cmJ1Zl9yZXNldCgmc2IpOworCX0KKworCS8qCisJICogQ29weSB1cmwgc2V0dGluZyB3aGVuIGl0IGlzIG5vdCBzZXQgeWV0LgorCSAqIFRvIGxvb2sgdXAgdGhlIHVybCBpbiAuZ2l0L2NvbmZpZywgd2UgbXVzdCBub3QgZmFsbCBiYWNrIHRvCisJICogLmdpdG1vZHVsZXMsIHNvIGxvb2sgaXQgdXAgZGlyZWN0bHkuCisJICovCisJc3RyYnVmX2FkZGYoJnNiLCAic3VibW9kdWxlLiVzLnVybCIsIHN1Yi0+bmFtZSk7CisJaWYgKGdpdF9jb25maWdfZ2V0X3N0cmluZyhzYi5idWYsICZ1cmwpKSB7CisJCWlmICghc3ViLT51cmwpCisJCQlkaWUoXygiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIiksCisJCQkJZGlzcGxheXBhdGgpOworCisJCXVybCA9IHhzdHJkdXAoc3ViLT51cmwpOworCisJCS8qIFBvc3NpYmx5IGEgdXJsIHJlbGF0aXZlIHRvIHBhcmVudCAqLworCQlpZiAoc3RhcnRzX3dpdGhfZG90X2RvdF9zbGFzaCh1cmwpIHx8CisJCSAgICBzdGFydHNfd2l0aF9kb3Rfc2xhc2godXJsKSkgeworCQkJY2hhciAqb2xkdXJsID0gdXJsOworCQkJdXJsID0gY29tcHV0ZV9zdWJtb2R1bGVfY2xvbmVfdXJsKG9sZHVybCk7CisJCQlmcmVlKG9sZHVybCk7CisJCX0KKworCQlpZiAoZ2l0X2NvbmZpZ19zZXRfZ2VudGx5KHNiLmJ1ZiwgdXJsKSkKKwkJCWRpZShfKCJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIiksCisJCQkgICAgZGlzcGxheXBhdGgpOworCQlpZiAoIShmbGFncyAmIE9QVF9RVUlFVCkpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJTdWJtb2R1bGUgJyVzJyAoJXMpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIiksCisJCQkJc3ViLT5uYW1lLCB1cmwsIGRpc3BsYXlwYXRoKTsKKwl9CisJc3RyYnVmX3Jlc2V0KCZzYik7CisKKwkvKiBDb3B5ICJ1cGRhdGUiIHNldHRpbmcgd2hlbiBpdCBpcyBub3Qgc2V0IHlldCAqLworCXN0cmJ1Zl9hZGRmKCZzYiwgInN1Ym1vZHVsZS4lcy51cGRhdGUiLCBzdWItPm5hbWUpOworCWlmIChnaXRfY29uZmlnX2dldF9zdHJpbmcoc2IuYnVmLCAmdXBkKSAmJgorCSAgICBzdWItPnVwZGF0ZV9zdHJhdGVneS50eXBlICE9IFNNX1VQREFURV9VTlNQRUNJRklFRCkgeworCQlpZiAoc3ViLT51cGRhdGVfc3RyYXRlZ3kudHlwZSA9PSBTTV9VUERBVEVfQ09NTUFORCkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIndhcm5pbmc6IGNvbW1hbmQgdXBkYXRlIG1vZGUgc3VnZ2VzdGVkIGZvciBzdWJtb2R1bGUgJyVzJ1xuIiksCisJCQkJc3ViLT5uYW1lKTsKKwkJCXVwZCA9IHhzdHJkdXAoIm5vbmUiKTsKKwkJfSBlbHNlCisJCQl1cGQgPSB4c3RyZHVwKHN1Ym1vZHVsZV9zdHJhdGVneV90b19zdHJpbmcoJnN1Yi0+dXBkYXRlX3N0cmF0ZWd5KSk7CisKKwkJaWYgKGdpdF9jb25maWdfc2V0X2dlbnRseShzYi5idWYsIHVwZCkpCisJCQlkaWUoXygiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIiksIGRpc3BsYXlwYXRoKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlmcmVlKGRpc3BsYXlwYXRoKTsKKwlmcmVlKHVybCk7CisJZnJlZSh1cGQpOworfQorCitzdGF0aWMgdm9pZCBpbml0X3N1Ym1vZHVsZV9jYihjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmxpc3RfaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgaW5pdF9jYiAqaW5mbyA9IGNiX2RhdGE7CisJaW5pdF9zdWJtb2R1bGUobGlzdF9pdGVtLT5uYW1lLCBpbmZvLT5wcmVmaXgsIGluZm8tPmZsYWdzKTsKK30KKworc3RhdGljIGludCBtb2R1bGVfaW5pdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgaW5pdF9jYiBpbmZvID0gSU5JVF9DQl9JTklUOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlzdHJ1Y3QgbW9kdWxlX2xpc3QgbGlzdCA9IE1PRFVMRV9MSVNUX0lOSVQ7CisJaW50IHF1aWV0ID0gMDsKKworCXN0cnVjdCBvcHRpb24gbW9kdWxlX2luaXRfb3B0aW9uc1tdID0geworCQlPUFRfX1FVSUVUKCZxdWlldCwgTl8oIlN1cHByZXNzIG91dHB1dCBmb3IgaW5pdGlhbGl6aW5nIGEgc3VibW9kdWxlIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJY29uc3QgY2hhciAqY29uc3QgZ2l0X3N1Ym1vZHVsZV9oZWxwZXJfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8b3B0aW9ucz5dIFs8cGF0aD5dIiksCisJCU5VTEwKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBtb2R1bGVfaW5pdF9vcHRpb25zLAorCQkJICAgICBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZSwgMCk7CisKKwlpZiAobW9kdWxlX2xpc3RfY29tcHV0ZShhcmdjLCBhcmd2LCBwcmVmaXgsICZwYXRoc3BlYywgJmxpc3QpIDwgMCkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBubyBwYXRoIGFyZ3MgYW5kIHN1Ym1vZHVsZS5hY3RpdmUgaXMgc2V0IHRoZW4sCisJICogYnkgZGVmYXVsdCwgb25seSBpbml0aWFsaXplICdhY3RpdmUnIG1vZHVsZXMuCisJICovCisJaWYgKCFhcmdjICYmIGdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpKCJzdWJtb2R1bGUuYWN0aXZlIikpCisJCW1vZHVsZV9saXN0X2FjdGl2ZSgmbGlzdCk7CisKKwlpbmZvLnByZWZpeCA9IHByZWZpeDsKKwlpZiAocXVpZXQpCisJCWluZm8uZmxhZ3MgfD0gT1BUX1FVSUVUOworCisJZm9yX2VhY2hfbGlzdGVkX3N1Ym1vZHVsZSgmbGlzdCwgaW5pdF9zdWJtb2R1bGVfY2IsICZpbmZvKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc3RhdHVzX2NiIHsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJdW5zaWduZWQgaW50IGZsYWdzOworfTsKKworI2RlZmluZSBTVEFUVVNfQ0JfSU5JVCB7IE5VTEwsIDAgfQorCitzdGF0aWMgdm9pZCBwcmludF9zdGF0dXModW5zaWduZWQgaW50IGZsYWdzLCBjaGFyIHN0YXRlLCBjb25zdCBjaGFyICpwYXRoLAorCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqZGlzcGxheXBhdGgpCit7CisJaWYgKGZsYWdzICYgT1BUX1FVSUVUKQorCQlyZXR1cm47CisKKwlwcmludGYoIiVjJXMgJXMiLCBzdGF0ZSwgb2lkX3RvX2hleChvaWQpLCBkaXNwbGF5cGF0aCk7CisKKwlpZiAoc3RhdGUgPT0gJyAnIHx8IHN0YXRlID09ICcrJykgeworCQljb25zdCBjaGFyICpuYW1lID0gY29tcHV0ZV9yZXZfbmFtZShwYXRoLCBvaWRfdG9faGV4KG9pZCkpOworCisJCWlmIChuYW1lKQorCQkJcHJpbnRmKCIgKCVzKSIsIG5hbWUpOworCX0KKworCXByaW50ZigiXG4iKTsKK30KKworc3RhdGljIGludCBoYW5kbGVfc3VibW9kdWxlX2hlYWRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFncywKKwkJCQkgICAgIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdF9pZCAqb3V0cHV0ID0gY2JfZGF0YTsKKwlpZiAob2lkKQorCQlvaWRjcHkob3V0cHV0LCBvaWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXR1c19zdWJtb2R1bGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY2Vfb2lkLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY2VfZmxhZ3MsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWNoYXIgKmRpc3BsYXlwYXRoOworCXN0cnVjdCBhcmd2X2FycmF5IGRpZmZfZmlsZXNfYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCWludCBkaWZmX2ZpbGVzX3Jlc3VsdDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmdpdF9kaXI7CisKKwlpZiAoIXN1Ym1vZHVsZV9mcm9tX3BhdGgodGhlX3JlcG9zaXRvcnksICZudWxsX29pZCwgcGF0aCkpCisJCWRpZShfKCJubyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJXMnIiksCisJCSAgICAgIHBhdGgpOworCisJZGlzcGxheXBhdGggPSBnZXRfc3VibW9kdWxlX2Rpc3BsYXlwYXRoKHBhdGgsIHByZWZpeCk7CisKKwlpZiAoKENFX1NUQUdFTUFTSyAmIGNlX2ZsYWdzKSA+PiBDRV9TVEFHRVNISUZUKSB7CisJCXByaW50X3N0YXR1cyhmbGFncywgJ1UnLCBwYXRoLCAmbnVsbF9vaWQsIGRpc3BsYXlwYXRoKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy8uZ2l0IiwgcGF0aCk7CisJZ2l0X2RpciA9IHJlYWRfZ2l0ZmlsZShidWYuYnVmKTsKKwlpZiAoIWdpdF9kaXIpCisJCWdpdF9kaXIgPSBidWYuYnVmOworCisJaWYgKCFpc19zdWJtb2R1bGVfYWN0aXZlKHRoZV9yZXBvc2l0b3J5LCBwYXRoKSB8fAorCSAgICAhaXNfZ2l0X2RpcmVjdG9yeShnaXRfZGlyKSkgeworCQlwcmludF9zdGF0dXMoZmxhZ3MsICctJywgcGF0aCwgY2Vfb2lkLCBkaXNwbGF5cGF0aCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlnb3RvIGNsZWFudXA7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJYXJndl9hcnJheV9wdXNobCgmZGlmZl9maWxlc19hcmdzLCAiZGlmZi1maWxlcyIsCisJCQkgIi0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkiLCAiLS1xdWlldCIsICItLSIsCisJCQkgcGF0aCwgTlVMTCk7CisKKwlnaXRfY29uZmlnKGdpdF9kaWZmX2Jhc2ljX2NvbmZpZywgTlVMTCk7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2LCBOVUxMKTsKKwlyZXYuYWJicmV2ID0gMDsKKwlkaWZmX2ZpbGVzX2FyZ3MuYXJnYyA9IHNldHVwX3JldmlzaW9ucyhkaWZmX2ZpbGVzX2FyZ3MuYXJnYywKKwkJCQkJICAgICAgIGRpZmZfZmlsZXNfYXJncy5hcmd2LAorCQkJCQkgICAgICAgJnJldiwgTlVMTCk7CisJZGlmZl9maWxlc19yZXN1bHQgPSBydW5fZGlmZl9maWxlcygmcmV2LCAwKTsKKworCWlmICghZGlmZl9yZXN1bHRfY29kZSgmcmV2LmRpZmZvcHQsIGRpZmZfZmlsZXNfcmVzdWx0KSkgeworCQlwcmludF9zdGF0dXMoZmxhZ3MsICcgJywgcGF0aCwgY2Vfb2lkLAorCQkJICAgICBkaXNwbGF5cGF0aCk7CisJfSBlbHNlIGlmICghKGZsYWdzICYgT1BUX0NBQ0hFRCkpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCByZWZfc3RvcmUgKnJlZnMgPSBnZXRfc3VibW9kdWxlX3JlZl9zdG9yZShwYXRoKTsKKworCQlpZiAoIXJlZnMpIHsKKwkJCXByaW50X3N0YXR1cyhmbGFncywgJy0nLCBwYXRoLCBjZV9vaWQsIGRpc3BsYXlwYXRoKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlpZiAocmVmc19oZWFkX3JlZihyZWZzLCBoYW5kbGVfc3VibW9kdWxlX2hlYWRfcmVmLCAmb2lkKSkKKwkJCWRpZShfKCJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHJlZiBpbnNpZGUgdGhlICIKKwkJCSAgICAgICJzdWJtb2R1bGUgJyVzJyIpLCBwYXRoKTsKKworCQlwcmludF9zdGF0dXMoZmxhZ3MsICcrJywgcGF0aCwgJm9pZCwgZGlzcGxheXBhdGgpOworCX0gZWxzZSB7CisJCXByaW50X3N0YXR1cyhmbGFncywgJysnLCBwYXRoLCBjZV9vaWQsIGRpc3BsYXlwYXRoKTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBPUFRfUkVDVVJTSVZFKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwciA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQljcHIuZ2l0X2NtZCA9IDE7CisJCWNwci5kaXIgPSBwYXRoOworCQlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3ByLmVudl9hcnJheSk7CisKKwkJYXJndl9hcnJheV9wdXNoKCZjcHIuYXJncywgIi0tc3VwZXItcHJlZml4Iik7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwci5hcmdzLCAiJXMvIiwgZGlzcGxheXBhdGgpOworCQlhcmd2X2FycmF5X3B1c2hsKCZjcHIuYXJncywgInN1Ym1vZHVsZS0taGVscGVyIiwgInN0YXR1cyIsCisJCQkJICItLXJlY3Vyc2l2ZSIsIE5VTEwpOworCisJCWlmIChmbGFncyAmIE9QVF9DQUNIRUQpCisJCQlhcmd2X2FycmF5X3B1c2goJmNwci5hcmdzLCAiLS1jYWNoZWQiKTsKKworCQlpZiAoZmxhZ3MgJiBPUFRfUVVJRVQpCisJCQlhcmd2X2FycmF5X3B1c2goJmNwci5hcmdzLCAiLS1xdWlldCIpOworCisJCWlmIChydW5fY29tbWFuZCgmY3ByKSkKKwkJCWRpZShfKCJmYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIiksIHBhdGgpOworCX0KKworY2xlYW51cDoKKwlhcmd2X2FycmF5X2NsZWFyKCZkaWZmX2ZpbGVzX2FyZ3MpOworCWZyZWUoZGlzcGxheXBhdGgpOworfQorCitzdGF0aWMgdm9pZCBzdGF0dXNfc3VibW9kdWxlX2NiKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqbGlzdF9pdGVtLAorCQkJCXZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0YXR1c19jYiAqaW5mbyA9IGNiX2RhdGE7CisJc3RhdHVzX3N1Ym1vZHVsZShsaXN0X2l0ZW0tPm5hbWUsICZsaXN0X2l0ZW0tPm9pZCwgbGlzdF9pdGVtLT5jZV9mbGFncywKKwkJCSBpbmZvLT5wcmVmaXgsIGluZm8tPmZsYWdzKTsKK30KKworc3RhdGljIGludCBtb2R1bGVfc3RhdHVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdGF0dXNfY2IgaW5mbyA9IFNUQVRVU19DQl9JTklUOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlzdHJ1Y3QgbW9kdWxlX2xpc3QgbGlzdCA9IE1PRFVMRV9MSVNUX0lOSVQ7CisJaW50IHF1aWV0ID0gMDsKKworCXN0cnVjdCBvcHRpb24gbW9kdWxlX3N0YXR1c19vcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygiU3VwcHJlc3Mgc3VibW9kdWxlIHN0YXR1cyBvdXRwdXQiKSksCisJCU9QVF9CSVQoMCwgImNhY2hlZCIsICZpbmZvLmZsYWdzLCBOXygiVXNlIGNvbW1pdCBzdG9yZWQgaW4gdGhlIGluZGV4IGluc3RlYWQgb2YgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIHN1Ym1vZHVsZSBIRUFEIiksIE9QVF9DQUNIRUQpLAorCQlPUFRfQklUKDAsICJyZWN1cnNpdmUiLCAmaW5mby5mbGFncywgTl8oInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIpLCBPUFRfUkVDVVJTSVZFKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWNvbnN0IGNoYXIgKmNvbnN0IGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlW10gPSB7CisJCU5fKCJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8cGF0aD4uLi5dIiksCisJCU5VTEwKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBtb2R1bGVfc3RhdHVzX29wdGlvbnMsCisJCQkgICAgIGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlLCAwKTsKKworCWlmIChtb2R1bGVfbGlzdF9jb21wdXRlKGFyZ2MsIGFyZ3YsIHByZWZpeCwgJnBhdGhzcGVjLCAmbGlzdCkgPCAwKQorCQlyZXR1cm4gMTsKKworCWluZm8ucHJlZml4ID0gcHJlZml4OworCWlmIChxdWlldCkKKwkJaW5mby5mbGFncyB8PSBPUFRfUVVJRVQ7CisKKwlmb3JfZWFjaF9saXN0ZWRfc3VibW9kdWxlKCZsaXN0LCBzdGF0dXNfc3VibW9kdWxlX2NiLCAmaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtb2R1bGVfbmFtZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWI7CisKKwlpZiAoYXJnYyAhPSAyKQorCQl1c2FnZShfKCJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8cGF0aD4iKSk7CisKKwlzdWIgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKHRoZV9yZXBvc2l0b3J5LCAmbnVsbF9vaWQsIGFyZ3ZbMV0pOworCisJaWYgKCFzdWIpCisJCWRpZShfKCJubyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJXMnIiksCisJCSAgICBhcmd2WzFdKTsKKworCXByaW50ZigiJXNcbiIsIHN1Yi0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHN5bmNfY2IgeworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OworCisjZGVmaW5lIFNZTkNfQ0JfSU5JVCB7IE5VTEwsIDAgfQorCitzdGF0aWMgdm9pZCBzeW5jX3N1Ym1vZHVsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViOworCWNoYXIgKnJlbW90ZV9rZXkgPSBOVUxMOworCWNoYXIgKnN1Yl9vcmlnaW5fdXJsLCAqc3VwZXJfY29uZmlnX3VybCwgKmRpc3BsYXlwYXRoOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljaGFyICpzdWJfY29uZmlnX3BhdGggPSBOVUxMOworCisJaWYgKCFpc19zdWJtb2R1bGVfYWN0aXZlKHRoZV9yZXBvc2l0b3J5LCBwYXRoKSkKKwkJcmV0dXJuOworCisJc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aCh0aGVfcmVwb3NpdG9yeSwgJm51bGxfb2lkLCBwYXRoKTsKKworCWlmIChzdWIgJiYgc3ViLT51cmwpIHsKKwkJaWYgKHN0YXJ0c193aXRoX2RvdF9kb3Rfc2xhc2goc3ViLT51cmwpIHx8CisJCSAgICBzdGFydHNfd2l0aF9kb3Rfc2xhc2goc3ViLT51cmwpKSB7CisJCQljaGFyICpyZW1vdGVfdXJsLCAqdXBfcGF0aDsKKwkJCWNoYXIgKnJlbW90ZSA9IGdldF9kZWZhdWx0X3JlbW90ZSgpOworCQkJc3RyYnVmX2FkZGYoJnNiLCAicmVtb3RlLiVzLnVybCIsIHJlbW90ZSk7CisKKwkJCWlmIChnaXRfY29uZmlnX2dldF9zdHJpbmcoc2IuYnVmLCAmcmVtb3RlX3VybCkpCisJCQkJcmVtb3RlX3VybCA9IHhnZXRjd2QoKTsKKworCQkJdXBfcGF0aCA9IGdldF91cF9wYXRoKHBhdGgpOworCQkJc3ViX29yaWdpbl91cmwgPSByZWxhdGl2ZV91cmwocmVtb3RlX3VybCwgc3ViLT51cmwsIHVwX3BhdGgpOworCQkJc3VwZXJfY29uZmlnX3VybCA9IHJlbGF0aXZlX3VybChyZW1vdGVfdXJsLCBzdWItPnVybCwgTlVMTCk7CisKKwkJCWZyZWUocmVtb3RlKTsKKwkJCWZyZWUodXBfcGF0aCk7CisJCQlmcmVlKHJlbW90ZV91cmwpOworCQl9IGVsc2UgeworCQkJc3ViX29yaWdpbl91cmwgPSB4c3RyZHVwKHN1Yi0+dXJsKTsKKwkJCXN1cGVyX2NvbmZpZ191cmwgPSB4c3RyZHVwKHN1Yi0+dXJsKTsKKwkJfQorCX0gZWxzZSB7CisJCXN1Yl9vcmlnaW5fdXJsID0geHN0cmR1cCgiIik7CisJCXN1cGVyX2NvbmZpZ191cmwgPSB4c3RyZHVwKCIiKTsKKwl9CisKKwlkaXNwbGF5cGF0aCA9IGdldF9zdWJtb2R1bGVfZGlzcGxheXBhdGgocGF0aCwgcHJlZml4KTsKKworCWlmICghKGZsYWdzICYgT1BUX1FVSUVUKSkKKwkJcHJpbnRmKF8oIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJyVzJ1xuIiksCisJCQkgZGlzcGxheXBhdGgpOworCisJc3RyYnVmX3Jlc2V0KCZzYik7CisJc3RyYnVmX2FkZGYoJnNiLCAic3VibW9kdWxlLiVzLnVybCIsIHN1Yi0+bmFtZSk7CisJaWYgKGdpdF9jb25maWdfc2V0X2dlbnRseShzYi5idWYsIHN1cGVyX2NvbmZpZ191cmwpKQorCQlkaWUoXygiZmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIpLAorCQkgICAgICBkaXNwbGF5cGF0aCk7CisKKwlpZiAoIWlzX3N1Ym1vZHVsZV9wb3B1bGF0ZWRfZ2VudGx5KHBhdGgsIE5VTEwpKQorCQlnb3RvIGNsZWFudXA7CisKKwlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3AuZW52X2FycmF5KTsKKwljcC5naXRfY21kID0gMTsKKwljcC5kaXIgPSBwYXRoOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJzdWJtb2R1bGUtLWhlbHBlciIsCisJCQkgInByaW50LWRlZmF1bHQtcmVtb3RlIiwgTlVMTCk7CisKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwlpZiAoY2FwdHVyZV9jb21tYW5kKCZjcCwgJnNiLCAwKSkKKwkJZGllKF8oImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIpLAorCQkgICAgICBwYXRoKTsKKworCXN0cmJ1Zl9zdHJpcF9zdWZmaXgoJnNiLCAiXG4iKTsKKwlyZW1vdGVfa2V5ID0geHN0cmZtdCgicmVtb3RlLiVzLnVybCIsIHNiLmJ1Zik7CisKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwlzdWJtb2R1bGVfdG9fZ2l0ZGlyKCZzYiwgcGF0aCk7CisJc3RyYnVmX2FkZHN0cigmc2IsICIvY29uZmlnIik7CisKKwlpZiAoZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkoc2IuYnVmLCByZW1vdGVfa2V5LCBzdWJfb3JpZ2luX3VybCkpCisJCWRpZShfKCJmYWlsZWQgdG8gdXBkYXRlIHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciKSwKKwkJICAgICAgcGF0aCk7CisKKwlpZiAoZmxhZ3MgJiBPUFRfUkVDVVJTSVZFKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwciA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQljcHIuZ2l0X2NtZCA9IDE7CisJCWNwci5kaXIgPSBwYXRoOworCQlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3ByLmVudl9hcnJheSk7CisKKwkJYXJndl9hcnJheV9wdXNoKCZjcHIuYXJncywgIi0tc3VwZXItcHJlZml4Iik7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwci5hcmdzLCAiJXMvIiwgZGlzcGxheXBhdGgpOworCQlhcmd2X2FycmF5X3B1c2hsKCZjcHIuYXJncywgInN1Ym1vZHVsZS0taGVscGVyIiwgInN5bmMiLAorCQkJCSAiLS1yZWN1cnNpdmUiLCBOVUxMKTsKKworCQlpZiAoZmxhZ3MgJiBPUFRfUVVJRVQpCisJCQlhcmd2X2FycmF5X3B1c2goJmNwci5hcmdzLCAiLS1xdWlldCIpOworCisJCWlmIChydW5fY29tbWFuZCgmY3ByKSkKKwkJCWRpZShfKCJmYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIiksCisJCQkgICAgICBwYXRoKTsKKwl9CisKK2NsZWFudXA6CisJZnJlZShzdXBlcl9jb25maWdfdXJsKTsKKwlmcmVlKHN1Yl9vcmlnaW5fdXJsKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWZyZWUocmVtb3RlX2tleSk7CisJZnJlZShkaXNwbGF5cGF0aCk7CisJZnJlZShzdWJfY29uZmlnX3BhdGgpOworfQorCitzdGF0aWMgdm9pZCBzeW5jX3N1Ym1vZHVsZV9jYihjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmxpc3RfaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3luY19jYiAqaW5mbyA9IGNiX2RhdGE7CisJc3luY19zdWJtb2R1bGUobGlzdF9pdGVtLT5uYW1lLCBpbmZvLT5wcmVmaXgsIGluZm8tPmZsYWdzKTsKK30KKworc3RhdGljIGludCBtb2R1bGVfc3luYyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3luY19jYiBpbmZvID0gU1lOQ19DQl9JTklUOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlzdHJ1Y3QgbW9kdWxlX2xpc3QgbGlzdCA9IE1PRFVMRV9MSVNUX0lOSVQ7CisJaW50IHF1aWV0ID0gMDsKKwlpbnQgcmVjdXJzaXZlID0gMDsKKworCXN0cnVjdCBvcHRpb24gbW9kdWxlX3N5bmNfb3B0aW9uc1tdID0geworCQlPUFRfX1FVSUVUKCZxdWlldCwgTl8oIlN1cHByZXNzIG91dHB1dCBvZiBzeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwiKSksCisJCU9QVF9CT09MKDAsICJyZWN1cnNpdmUiLCAmcmVjdXJzaXZlLAorCQkJTl8oIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWNvbnN0IGNoYXIgKmNvbnN0IGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlW10gPSB7CisJCU5fKCJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+XSIpLAorCQlOVUxMCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgbW9kdWxlX3N5bmNfb3B0aW9ucywKKwkJCSAgICAgZ2l0X3N1Ym1vZHVsZV9oZWxwZXJfdXNhZ2UsIDApOworCisJaWYgKG1vZHVsZV9saXN0X2NvbXB1dGUoYXJnYywgYXJndiwgcHJlZml4LCAmcGF0aHNwZWMsICZsaXN0KSA8IDApCisJCXJldHVybiAxOworCisJaW5mby5wcmVmaXggPSBwcmVmaXg7CisJaWYgKHF1aWV0KQorCQlpbmZvLmZsYWdzIHw9IE9QVF9RVUlFVDsKKwlpZiAocmVjdXJzaXZlKQorCQlpbmZvLmZsYWdzIHw9IE9QVF9SRUNVUlNJVkU7CisKKwlmb3JfZWFjaF9saXN0ZWRfc3VibW9kdWxlKCZsaXN0LCBzeW5jX3N1Ym1vZHVsZV9jYiwgJmluZm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkZWluaXRfY2IgeworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OworI2RlZmluZSBERUlOSVRfQ0JfSU5JVCB7IE5VTEwsIDAgfQorCitzdGF0aWMgdm9pZCBkZWluaXRfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKwljaGFyICpkaXNwbGF5cGF0aCA9IE5VTEw7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3BfY29uZmlnID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgc2JfY29uZmlnID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqc3ViX2dpdF9kaXIgPSB4c3RyZm10KCIlcy8uZ2l0IiwgcGF0aCk7CisKKwlzdWIgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKHRoZV9yZXBvc2l0b3J5LCAmbnVsbF9vaWQsIHBhdGgpOworCisJaWYgKCFzdWIgfHwgIXN1Yi0+bmFtZSkKKwkJZ290byBjbGVhbnVwOworCisJZGlzcGxheXBhdGggPSBnZXRfc3VibW9kdWxlX2Rpc3BsYXlwYXRoKHBhdGgsIHByZWZpeCk7CisKKwkvKiByZW1vdmUgdGhlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgKHVubGVzcyB0aGUgdXNlciBhbHJlYWR5IGRpZCBpdCkgKi8KKwlpZiAoaXNfZGlyZWN0b3J5KHBhdGgpKSB7CisJCXN0cnVjdCBzdHJidWYgc2Jfcm0gPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqZm9ybWF0OworCisJCS8qCisJCSAqIHByb3RlY3Qgc3VibW9kdWxlcyBjb250YWluaW5nIGEgLmdpdCBkaXJlY3RvcnkKKwkJICogTkVFRFNXT1JLOiBpbnN0ZWFkIG9mIGR5aW5nLCBhdXRvbWF0aWNhbGx5IGNhbGwKKwkJICogYWJzb3JiZ2l0ZGlycyBhbmQgKHBvc3NpYmx5KSB3YXJuLgorCQkgKi8KKwkJaWYgKGlzX2RpcmVjdG9yeShzdWJfZ2l0X2RpcikpCisJCQlkaWUoXygiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGEgLmdpdCAiCisJCQkgICAgICAiZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50ICIKKwkJCSAgICAgICJ0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiKSwKKwkJCSAgICBkaXNwbGF5cGF0aCk7CisKKwkJaWYgKCEoZmxhZ3MgJiBPUFRfRk9SQ0UpKSB7CisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcF9ybSA9IENISUxEX1BST0NFU1NfSU5JVDsKKwkJCWNwX3JtLmdpdF9jbWQgPSAxOworCQkJYXJndl9hcnJheV9wdXNobCgmY3Bfcm0uYXJncywgInJtIiwgIi1xbiIsCisJCQkJCSBwYXRoLCBOVUxMKTsKKworCQkJaWYgKHJ1bl9jb21tYW5kKCZjcF9ybSkpCisJCQkJZGllKF8oIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBsb2NhbCAiCisJCQkJICAgICAgIm1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvIGRpc2NhcmQgdGhlbSIpLAorCQkJCSAgICAgIGRpc3BsYXlwYXRoKTsKKwkJfQorCisJCXN0cmJ1Zl9hZGRzdHIoJnNiX3JtLCBwYXRoKTsKKworCQlpZiAoIXJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJnNiX3JtLCAwKSkKKwkJCWZvcm1hdCA9IF8oIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIpOworCQllbHNlCisJCQlmb3JtYXQgPSBfKCJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIik7CisKKwkJaWYgKCEoZmxhZ3MgJiBPUFRfUVVJRVQpKQorCQkJcHJpbnRmKGZvcm1hdCwgZGlzcGxheXBhdGgpOworCisJCXN1Ym1vZHVsZV91bnNldF9jb3JlX3dvcmt0cmVlKHN1Yik7CisKKwkJc3RyYnVmX3JlbGVhc2UoJnNiX3JtKTsKKwl9CisKKwlpZiAobWtkaXIocGF0aCwgMDc3NykpCisJCXByaW50ZihfKCJjb3VsZCBub3QgY3JlYXRlIGVtcHR5IHN1Ym1vZHVsZSBkaXJlY3RvcnkgJXMiKSwKKwkJICAgICAgZGlzcGxheXBhdGgpOworCisJY3BfY29uZmlnLmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwX2NvbmZpZy5hcmdzLCAiY29uZmlnIiwgIi0tZ2V0LXJlZ2V4cCIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwX2NvbmZpZy5hcmdzLCAic3VibW9kdWxlLiVzXFwuIiwgc3ViLT5uYW1lKTsKKworCS8qIHJlbW92ZSB0aGUgLmdpdC9jb25maWcgZW50cmllcyAodW5sZXNzIHRoZSB1c2VyIGFscmVhZHkgZGlkIGl0KSAqLworCWlmICghY2FwdHVyZV9jb21tYW5kKCZjcF9jb25maWcsICZzYl9jb25maWcsIDApICYmIHNiX2NvbmZpZy5sZW4pIHsKKwkJY2hhciAqc3ViX2tleSA9IHhzdHJmbXQoInN1Ym1vZHVsZS4lcyIsIHN1Yi0+bmFtZSk7CisJCS8qCisJCSAqIHJlbW92ZSB0aGUgd2hvbGUgc2VjdGlvbiBzbyB3ZSBoYXZlIGEgY2xlYW4gc3RhdGUgd2hlbgorCQkgKiB0aGUgdXNlciBsYXRlciBkZWNpZGVzIHRvIGluaXQgdGhpcyBzdWJtb2R1bGUgYWdhaW4KKwkJICovCisJCWdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25faW5fZmlsZShOVUxMLCBzdWJfa2V5LCBOVUxMKTsKKwkJaWYgKCEoZmxhZ3MgJiBPUFRfUVVJRVQpKQorCQkJcHJpbnRmKF8oIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIpLAorCQkJCSBzdWItPm5hbWUsIHN1Yi0+dXJsLCBkaXNwbGF5cGF0aCk7CisJCWZyZWUoc3ViX2tleSk7CisJfQorCitjbGVhbnVwOgorCWZyZWUoZGlzcGxheXBhdGgpOworCWZyZWUoc3ViX2dpdF9kaXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYl9jb25maWcpOworfQorCitzdGF0aWMgdm9pZCBkZWluaXRfc3VibW9kdWxlX2NiKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqbGlzdF9pdGVtLAorCQkJCXZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGRlaW5pdF9jYiAqaW5mbyA9IGNiX2RhdGE7CisJZGVpbml0X3N1Ym1vZHVsZShsaXN0X2l0ZW0tPm5hbWUsIGluZm8tPnByZWZpeCwgaW5mby0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG1vZHVsZV9kZWluaXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGRlaW5pdF9jYiBpbmZvID0gREVJTklUX0NCX0lOSVQ7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCXN0cnVjdCBtb2R1bGVfbGlzdCBsaXN0ID0gTU9EVUxFX0xJU1RfSU5JVDsKKwlpbnQgcXVpZXQgPSAwOworCWludCBmb3JjZSA9IDA7CisJaW50IGFsbCA9IDA7CisKKwlzdHJ1Y3Qgb3B0aW9uIG1vZHVsZV9kZWluaXRfb3B0aW9uc1tdID0geworCQlPUFRfX1FVSUVUKCZxdWlldCwgTl8oIlN1cHByZXNzIHN1Ym1vZHVsZSBzdGF0dXMgb3V0cHV0IikpLAorCQlPUFRfX0ZPUkNFKCZmb3JjZSwgTl8oIlJlbW92ZSBzdWJtb2R1bGUgd29ya2luZyB0cmVlcyBldmVuIGlmIHRoZXkgY29udGFpbiBsb2NhbCBjaGFuZ2VzIiksIDApLAorCQlPUFRfQk9PTCgwLCAiYWxsIiwgJmFsbCwgTl8oIlVucmVnaXN0ZXIgYWxsIHN1Ym1vZHVsZXMiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwljb25zdCBjaGFyICpjb25zdCBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZVtdID0geworCQlOXygiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzxwYXRoPi4uLl1dIiksCisJCU5VTEwKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBtb2R1bGVfZGVpbml0X29wdGlvbnMsCisJCQkgICAgIGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlLCAwKTsKKworCWlmIChhbGwgJiYgYXJnYykgeworCQllcnJvcigicGF0aHNwZWMgYW5kIC0tYWxsIGFyZSBpbmNvbXBhdGlibGUiKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlLAorCQkJCSAgIG1vZHVsZV9kZWluaXRfb3B0aW9ucyk7CisJfQorCisJaWYgKCFhcmdjICYmICFhbGwpCisJCWRpZShfKCJVc2UgJy0tYWxsJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGVpbml0aWFsaXplIGFsbCBzdWJtb2R1bGVzIikpOworCisJaWYgKG1vZHVsZV9saXN0X2NvbXB1dGUoYXJnYywgYXJndiwgcHJlZml4LCAmcGF0aHNwZWMsICZsaXN0KSA8IDApCisJCXJldHVybiAxOworCisJaW5mby5wcmVmaXggPSBwcmVmaXg7CisJaWYgKHF1aWV0KQorCQlpbmZvLmZsYWdzIHw9IE9QVF9RVUlFVDsKKwlpZiAoZm9yY2UpCisJCWluZm8uZmxhZ3MgfD0gT1BUX0ZPUkNFOworCisJZm9yX2VhY2hfbGlzdGVkX3N1Ym1vZHVsZSgmbGlzdCwgZGVpbml0X3N1Ym1vZHVsZV9jYiwgJmluZm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xvbmVfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmdpdGRpciwgY29uc3QgY2hhciAqdXJsLAorCQkJICAgY29uc3QgY2hhciAqZGVwdGgsIHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmZXJlbmNlLCBpbnQgZGlzc29jaWF0ZSwKKwkJCSAgIGludCBxdWlldCwgaW50IHByb2dyZXNzLCBpbnQgc2luZ2xlX2JyYW5jaCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgImNsb25lIik7CisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS1uby1jaGVja291dCIpOworCWlmIChxdWlldCkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS1xdWlldCIpOworCWlmIChwcm9ncmVzcykKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS1wcm9ncmVzcyIpOworCWlmIChkZXB0aCAmJiAqZGVwdGgpCisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICItLWRlcHRoIiwgZGVwdGgsIE5VTEwpOworCWlmIChyZWZlcmVuY2UtPm5yKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIHJlZmVyZW5jZSkKKwkJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICItLXJlZmVyZW5jZSIsCisJCQkJCSBpdGVtLT5zdHJpbmcsIE5VTEwpOworCX0KKwlpZiAoZGlzc29jaWF0ZSkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS1kaXNzb2NpYXRlIik7CisJaWYgKGdpdGRpciAmJiAqZ2l0ZGlyKQorCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAiLS1zZXBhcmF0ZS1naXQtZGlyIiwgZ2l0ZGlyLCBOVUxMKTsKKwlpZiAoc2luZ2xlX2JyYW5jaCA+PSAwKQorCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIHNpbmdsZV9icmFuY2ggPworCQkJCQkgICItLXNpbmdsZS1icmFuY2giIDoKKwkJCQkJICAiLS1uby1zaW5nbGUtYnJhbmNoIik7CisKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLSIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgdXJsKTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIHBhdGgpOworCisJY3AuZ2l0X2NtZCA9IDE7CisJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoJmNwLmVudl9hcnJheSk7CisJY3Aubm9fc3RkaW4gPSAxOworCisJcmV0dXJuIHJ1bl9jb21tYW5kKCZjcCk7Cit9CisKK3N0cnVjdCBzdWJtb2R1bGVfYWx0ZXJuYXRlX3NldHVwIHsKKwljb25zdCBjaGFyICpzdWJtb2R1bGVfbmFtZTsKKwllbnVtIFNVQk1PRFVMRV9BTFRFUk5BVEVfRVJST1JfTU9ERSB7CisJCVNVQk1PRFVMRV9BTFRFUk5BVEVfRVJST1JfRElFLAorCQlTVUJNT0RVTEVfQUxURVJOQVRFX0VSUk9SX0lORk8sCisJCVNVQk1PRFVMRV9BTFRFUk5BVEVfRVJST1JfSUdOT1JFCisJfSBlcnJvcl9tb2RlOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmZXJlbmNlOworfTsKKyNkZWZpbmUgU1VCTU9EVUxFX0FMVEVSTkFURV9TRVRVUF9JTklUIHsgTlVMTCwgXAorCVNVQk1PRFVMRV9BTFRFUk5BVEVfRVJST1JfSUdOT1JFLCBOVUxMIH0KKworc3RhdGljIGNvbnN0IGNoYXIgYWx0ZXJuYXRlX2Vycm9yX2FkdmljZVtdID0gTl8oCisiQW4gYWx0ZXJuYXRlIGNvbXB1dGVkIGZyb20gYSBzdXBlcnByb2plY3QncyBhbHRlcm5hdGUgaXMgaW52YWxpZC5cbiIKKyJUbyBhbGxvdyBHaXQgdG8gY2xvbmUgd2l0aG91dCBhbiBhbHRlcm5hdGUgaW4gc3VjaCBhIGNhc2UsIHNldFxuIgorInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IHRvICdpbmZvJyBvciwgZXF1aXZhbGVudGx5LCBjbG9uZSB3aXRoXG4iCisiJy0tcmVmZXJlbmNlLWlmLWFibGUnIGluc3RlYWQgb2YgJy0tcmVmZXJlbmNlJy4iCispOworCitzdGF0aWMgaW50IGFkZF9wb3NzaWJsZV9yZWZlcmVuY2VfZnJvbV9zdXBlcnByb2plY3QoCisJCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIsIHZvaWQgKnNhc19jYikKK3sKKwlzdHJ1Y3Qgc3VibW9kdWxlX2FsdGVybmF0ZV9zZXR1cCAqc2FzID0gc2FzX2NiOworCXNpemVfdCBsZW47CisKKwkvKgorCSAqIElmIHRoZSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIGlzIGFub3RoZXIgcmVwb3NpdG9yeSwgdHJ5IHRoZQorCSAqIHN0YW5kYXJkIGxheW91dCB3aXRoIC5naXQvKG1vZHVsZXMvPG5hbWU+KSsvb2JqZWN0cworCSAqLworCWlmIChzdHJpcF9zdWZmaXgob2RiLT5wYXRoLCAiL29iamVjdHMiLCAmbGVuKSkgeworCQljaGFyICpzbV9hbHRlcm5hdGU7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZCgmc2IsIG9kYi0+cGF0aCwgbGVuKTsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGVuZCB0aGUgbmV3IHBhdGggd2l0aCAnLycgdG8gbWFyayBpdCBhcyBhIGRpciwKKwkJICogb3RoZXJ3aXNlIGEgc3VibW9kdWxlIG5hbWUgY29udGFpbmluZyAnLycgd2lsbCBiZSBicm9rZW4KKwkJICogYXMgdGhlIGxhc3QgcGFydCBvZiBhIG1pc3Npbmcgc3VibW9kdWxlIHJlZmVyZW5jZSB3b3VsZAorCQkgKiBiZSB0YWtlbiBhcyBhIGZpbGUgbmFtZS4KKwkJICovCisJCXN0cmJ1Zl9hZGRmKCZzYiwgIi9tb2R1bGVzLyVzLyIsIHNhcy0+c3VibW9kdWxlX25hbWUpOworCisJCXNtX2FsdGVybmF0ZSA9IGNvbXB1dGVfYWx0ZXJuYXRlX3BhdGgoc2IuYnVmLCAmZXJyKTsKKwkJaWYgKHNtX2FsdGVybmF0ZSkgeworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKHNhcy0+cmVmZXJlbmNlLCB4c3RyZHVwKHNiLmJ1ZikpOworCQkJZnJlZShzbV9hbHRlcm5hdGUpOworCQl9IGVsc2UgeworCQkJc3dpdGNoIChzYXMtPmVycm9yX21vZGUpIHsKKwkJCWNhc2UgU1VCTU9EVUxFX0FMVEVSTkFURV9FUlJPUl9ESUU6CisJCQkJaWYgKGFkdmljZV9zdWJtb2R1bGVfYWx0ZXJuYXRlX2Vycm9yX3N0cmF0ZWd5X2RpZSkKKwkJCQkJYWR2aXNlKF8oYWx0ZXJuYXRlX2Vycm9yX2FkdmljZSkpOworCQkJCWRpZShfKCJzdWJtb2R1bGUgJyVzJyBjYW5ub3QgYWRkIGFsdGVybmF0ZTogJXMiKSwKKwkJCQkgICAgc2FzLT5zdWJtb2R1bGVfbmFtZSwgZXJyLmJ1Zik7CisJCQljYXNlIFNVQk1PRFVMRV9BTFRFUk5BVEVfRVJST1JfSU5GTzoKKwkJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygic3VibW9kdWxlICclcycgY2Fubm90IGFkZCBhbHRlcm5hdGU6ICVzIiksCisJCQkJCXNhcy0+c3VibW9kdWxlX25hbWUsIGVyci5idWYpOworCQkJY2FzZSBTVUJNT0RVTEVfQUxURVJOQVRFX0VSUk9SX0lHTk9SRToKKwkJCQk7IC8qIG5vdGhpbmcgKi8KKwkJCX0KKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3Bvc3NpYmxlX2FsdGVybmF0ZXMoY29uc3QgY2hhciAqc21fbmFtZSwKKwkJc3RydWN0IHN0cmluZ19saXN0ICpyZWZlcmVuY2UpCit7CisJY2hhciAqc21fYWx0ZXJuYXRlID0gTlVMTCwgKmVycm9yX3N0cmF0ZWd5ID0gTlVMTDsKKwlzdHJ1Y3Qgc3VibW9kdWxlX2FsdGVybmF0ZV9zZXR1cCBzYXMgPSBTVUJNT0RVTEVfQUxURVJOQVRFX1NFVFVQX0lOSVQ7CisKKwlnaXRfY29uZmlnX2dldF9zdHJpbmcoInN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiIsICZzbV9hbHRlcm5hdGUpOworCWlmICghc21fYWx0ZXJuYXRlKQorCQlyZXR1cm47CisKKwlnaXRfY29uZmlnX2dldF9zdHJpbmcoInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IiwgJmVycm9yX3N0cmF0ZWd5KTsKKworCWlmICghZXJyb3Jfc3RyYXRlZ3kpCisJCWVycm9yX3N0cmF0ZWd5ID0geHN0cmR1cCgiZGllIik7CisKKwlzYXMuc3VibW9kdWxlX25hbWUgPSBzbV9uYW1lOworCXNhcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CisJaWYgKCFzdHJjbXAoZXJyb3Jfc3RyYXRlZ3ksICJkaWUiKSkKKwkJc2FzLmVycm9yX21vZGUgPSBTVUJNT0RVTEVfQUxURVJOQVRFX0VSUk9SX0RJRTsKKwllbHNlIGlmICghc3RyY21wKGVycm9yX3N0cmF0ZWd5LCAiaW5mbyIpKQorCQlzYXMuZXJyb3JfbW9kZSA9IFNVQk1PRFVMRV9BTFRFUk5BVEVfRVJST1JfSU5GTzsKKwllbHNlIGlmICghc3RyY21wKGVycm9yX3N0cmF0ZWd5LCAiaWdub3JlIikpCisJCXNhcy5lcnJvcl9tb2RlID0gU1VCTU9EVUxFX0FMVEVSTkFURV9FUlJPUl9JR05PUkU7CisJZWxzZQorCQlkaWUoXygiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgaXMgbm90IHJlY29nbml6ZWQiKSwgZXJyb3Jfc3RyYXRlZ3kpOworCisJaWYgKCFzdHJjbXAoc21fYWx0ZXJuYXRlLCAic3VwZXJwcm9qZWN0IikpCisJCWZvcmVhY2hfYWx0X29kYihhZGRfcG9zc2libGVfcmVmZXJlbmNlX2Zyb21fc3VwZXJwcm9qZWN0LCAmc2FzKTsKKwllbHNlIGlmICghc3RyY21wKHNtX2FsdGVybmF0ZSwgIm5vIikpCisJCTsgLyogZG8gbm90aGluZyAqLworCWVsc2UKKwkJZGllKF8oIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBpcyBub3QgcmVjb2duaXplZCIpLCBzbV9hbHRlcm5hdGUpOworCisJZnJlZShzbV9hbHRlcm5hdGUpOworCWZyZWUoZXJyb3Jfc3RyYXRlZ3kpOworfQorCitzdGF0aWMgaW50IG1vZHVsZV9jbG9uZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpuYW1lID0gTlVMTCwgKnVybCA9IE5VTEwsICpkZXB0aCA9IE5VTEw7CisJaW50IHF1aWV0ID0gMDsKKwlpbnQgcHJvZ3Jlc3MgPSAwOworCWNoYXIgKnAsICpwYXRoID0gTlVMTCwgKnNtX2dpdGRpcjsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0IHJlZmVyZW5jZSA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJaW50IGRpc3NvY2lhdGUgPSAwLCByZXF1aXJlX2luaXQgPSAwOworCWNoYXIgKnNtX2FsdGVybmF0ZSA9IE5VTEwsICplcnJvcl9zdHJhdGVneSA9IE5VTEw7CisJaW50IHNpbmdsZV9icmFuY2ggPSAtMTsKKworCXN0cnVjdCBvcHRpb24gbW9kdWxlX2Nsb25lX29wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAicHJlZml4IiwgJnByZWZpeCwKKwkJCSAgIE5fKCJwYXRoIiksCisJCQkgICBOXygiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIpKSwKKwkJT1BUX1NUUklORygwLCAicGF0aCIsICZwYXRoLAorCQkJICAgTl8oInBhdGgiKSwKKwkJCSAgIE5fKCJ3aGVyZSB0aGUgbmV3IHN1Ym1vZHVsZSB3aWxsIGJlIGNsb25lZCB0byIpKSwKKwkJT1BUX1NUUklORygwLCAibmFtZSIsICZuYW1lLAorCQkJICAgTl8oInN0cmluZyIpLAorCQkJICAgTl8oIm5hbWUgb2YgdGhlIG5ldyBzdWJtb2R1bGUiKSksCisJCU9QVF9TVFJJTkcoMCwgInVybCIsICZ1cmwsCisJCQkgICBOXygic3RyaW5nIiksCisJCQkgICBOXygidXJsIHdoZXJlIHRvIGNsb25lIHRoZSBzdWJtb2R1bGUgZnJvbSIpKSwKKwkJT1BUX1NUUklOR19MSVNUKDAsICJyZWZlcmVuY2UiLCAmcmVmZXJlbmNlLAorCQkJICAgTl8oInJlcG8iKSwKKwkJCSAgIE5fKCJyZWZlcmVuY2UgcmVwb3NpdG9yeSIpKSwKKwkJT1BUX0JPT0woMCwgImRpc3NvY2lhdGUiLCAmZGlzc29jaWF0ZSwKKwkJCSAgIE5fKCJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIikpLAorCQlPUFRfU1RSSU5HKDAsICJkZXB0aCIsICZkZXB0aCwKKwkJCSAgIE5fKCJzdHJpbmciKSwKKwkJCSAgIE5fKCJkZXB0aCBmb3Igc2hhbGxvdyBjbG9uZXMiKSksCisJCU9QVF9fUVVJRVQoJnF1aWV0LCAiU3VwcHJlc3Mgb3V0cHV0IGZvciBjbG9uaW5nIGEgc3VibW9kdWxlIiksCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZwcm9ncmVzcywKKwkJCSAgIE5fKCJmb3JjZSBjbG9uaW5nIHByb2dyZXNzIikpLAorCQlPUFRfQk9PTCgwLCAicmVxdWlyZS1pbml0IiwgJnJlcXVpcmVfaW5pdCwKKwkJCSAgIE5fKCJkaXNhbGxvdyBjbG9uaW5nIGludG8gbm9uLWVtcHR5IGRpcmVjdG9yeSIpKSwKKwkJT1BUX0JPT0woMCwgInNpbmdsZS1icmFuY2giLCAmc2luZ2xlX2JyYW5jaCwKKwkJCSBOXygiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJY29uc3QgY2hhciAqY29uc3QgZ2l0X3N1Ym1vZHVsZV9oZWxwZXJfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbLS1xdWlldF0gIgorCQkgICAiWy0tcmVmZXJlbmNlIDxyZXBvc2l0b3J5Pl0gWy0tbmFtZSA8bmFtZT5dIFstLWRlcHRoIDxkZXB0aD5dICIKKwkJICAgIlstLXNpbmdsZS1icmFuY2hdICIKKwkJICAgIi0tdXJsIDx1cmw+IC0tcGF0aCA8cGF0aD4iKSwKKwkJTlVMTAorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG1vZHVsZV9jbG9uZV9vcHRpb25zLAorCQkJICAgICBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZSwgMCk7CisKKwlpZiAoYXJnYyB8fCAhdXJsIHx8ICFwYXRoIHx8ICEqcGF0aCkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlLAorCQkJCSAgIG1vZHVsZV9jbG9uZV9vcHRpb25zKTsKKworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzL21vZHVsZXMvJXMiLCBnZXRfZ2l0X2RpcigpLCBuYW1lKTsKKwlzbV9naXRkaXIgPSBhYnNvbHV0ZV9wYXRoZHVwKHNiLmJ1Zik7CisJc3RyYnVmX3Jlc2V0KCZzYik7CisKKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgocGF0aCkpIHsKKwkJc3RyYnVmX2FkZGYoJnNiLCAiJXMvJXMiLCBnZXRfZ2l0X3dvcmtfdHJlZSgpLCBwYXRoKTsKKwkJcGF0aCA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwl9IGVsc2UKKwkJcGF0aCA9IHhzdHJkdXAocGF0aCk7CisKKwlpZiAodmFsaWRhdGVfc3VibW9kdWxlX2dpdF9kaXIoc21fZ2l0ZGlyLCBuYW1lKSA8IDApCisJCWRpZShfKCJyZWZ1c2luZyB0byBjcmVhdGUvdXNlICclcycgaW4gYW5vdGhlciBzdWJtb2R1bGUncyAiCisJCQkiZ2l0IGRpciIpLCBzbV9naXRkaXIpOworCisJaWYgKCFmaWxlX2V4aXN0cyhzbV9naXRkaXIpKSB7CisJCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHNtX2dpdGRpcikgPCAwKQorCQkJZGllKF8oImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciKSwgc21fZ2l0ZGlyKTsKKworCQlwcmVwYXJlX3Bvc3NpYmxlX2FsdGVybmF0ZXMobmFtZSwgJnJlZmVyZW5jZSk7CisKKwkJaWYgKGNsb25lX3N1Ym1vZHVsZShwYXRoLCBzbV9naXRkaXIsIHVybCwgZGVwdGgsICZyZWZlcmVuY2UsIGRpc3NvY2lhdGUsCisJCQkJICAgIHF1aWV0LCBwcm9ncmVzcywgc2luZ2xlX2JyYW5jaCkpCisJCQlkaWUoXygiY2xvbmUgb2YgJyVzJyBpbnRvIHN1Ym1vZHVsZSBwYXRoICclcycgZmFpbGVkIiksCisJCQkgICAgdXJsLCBwYXRoKTsKKwl9IGVsc2UgeworCQlpZiAocmVxdWlyZV9pbml0ICYmICFhY2Nlc3MocGF0aCwgWF9PSykgJiYgIWlzX2VtcHR5X2RpcihwYXRoKSkKKwkJCWRpZShfKCJkaXJlY3Rvcnkgbm90IGVtcHR5OiAnJXMnIiksIHBhdGgpOworCQlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChwYXRoKSA8IDApCisJCQlkaWUoXygiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIpLCBwYXRoKTsKKwkJc3RyYnVmX2FkZGYoJnNiLCAiJXMvaW5kZXgiLCBzbV9naXRkaXIpOworCQl1bmxpbmtfb3Jfd2FybihzYi5idWYpOworCQlzdHJidWZfcmVzZXQoJnNiKTsKKwl9CisKKwljb25uZWN0X3dvcmtfdHJlZV9hbmRfZ2l0X2RpcihwYXRoLCBzbV9naXRkaXIsIDApOworCisJcCA9IGdpdF9wYXRoZHVwX3N1Ym1vZHVsZShwYXRoLCAiY29uZmlnIik7CisJaWYgKCFwKQorCQlkaWUoXygiY291bGQgbm90IGdldCBzdWJtb2R1bGUgZGlyZWN0b3J5IGZvciAnJXMnIiksIHBhdGgpOworCisJLyogc2V0dXAgYWx0ZXJuYXRlTG9jYXRpb24gYW5kIGFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgaW4gdGhlIGNsb25lZCBzdWJtb2R1bGUgaWYgbmVlZGVkICovCisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24iLCAmc21fYWx0ZXJuYXRlKTsKKwlpZiAoc21fYWx0ZXJuYXRlKQorCQlnaXRfY29uZmlnX3NldF9pbl9maWxlKHAsICJzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24iLAorCQkJCQkgICBzbV9hbHRlcm5hdGUpOworCWdpdF9jb25maWdfZ2V0X3N0cmluZygic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kiLCAmZXJyb3Jfc3RyYXRlZ3kpOworCWlmIChlcnJvcl9zdHJhdGVneSkKKwkJZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZShwLCAic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kiLAorCQkJCQkgICBlcnJvcl9zdHJhdGVneSk7CisKKwlmcmVlKHNtX2FsdGVybmF0ZSk7CisJZnJlZShlcnJvcl9zdHJhdGVneSk7CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWZyZWUoc21fZ2l0ZGlyKTsKKwlmcmVlKHBhdGgpOworCWZyZWUocCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRldGVybWluZV9zdWJtb2R1bGVfdXBkYXRlX3N0cmF0ZWd5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkJaW50IGp1c3RfY2xvbmVkLAorCQkJCQkJY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJCWNvbnN0IGNoYXIgKnVwZGF0ZSwKKwkJCQkJCXN0cnVjdCBzdWJtb2R1bGVfdXBkYXRlX3N0cmF0ZWd5ICpvdXQpCit7CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aChyLCAmbnVsbF9vaWQsIHBhdGgpOworCWNoYXIgKmtleTsKKwljb25zdCBjaGFyICp2YWw7CisKKwlrZXkgPSB4c3RyZm10KCJzdWJtb2R1bGUuJXMudXBkYXRlIiwgc3ViLT5uYW1lKTsKKworCWlmICh1cGRhdGUpIHsKKwkJaWYgKHBhcnNlX3N1Ym1vZHVsZV91cGRhdGVfc3RyYXRlZ3kodXBkYXRlLCBvdXQpIDwgMCkKKwkJCWRpZShfKCJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciKSwKKwkJCQl1cGRhdGUsIHBhdGgpOworCX0gZWxzZSBpZiAoIXJlcG9fY29uZmlnX2dldF9zdHJpbmdfY29uc3Qociwga2V5LCAmdmFsKSkgeworCQlpZiAocGFyc2Vfc3VibW9kdWxlX3VwZGF0ZV9zdHJhdGVneSh2YWwsIG91dCkgPCAwKQorCQkJZGllKF8oIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIiksCisJCQkJdmFsLCBwYXRoKTsKKwl9IGVsc2UgaWYgKHN1Yi0+dXBkYXRlX3N0cmF0ZWd5LnR5cGUgIT0gU01fVVBEQVRFX1VOU1BFQ0lGSUVEKSB7CisJCWlmIChzdWItPnVwZGF0ZV9zdHJhdGVneS50eXBlID09IFNNX1VQREFURV9DT01NQU5EKQorCQkJQlVHKCJob3cgZGlkIHdlIHJlYWQgdXBkYXRlID0gIWNvbW1hbmQgZnJvbSAuZ2l0bW9kdWxlcz8iKTsKKwkJb3V0LT50eXBlID0gc3ViLT51cGRhdGVfc3RyYXRlZ3kudHlwZTsKKwkJb3V0LT5jb21tYW5kID0gc3ViLT51cGRhdGVfc3RyYXRlZ3kuY29tbWFuZDsKKwl9IGVsc2UKKwkJb3V0LT50eXBlID0gU01fVVBEQVRFX0NIRUNLT1VUOworCisJaWYgKGp1c3RfY2xvbmVkICYmCisJICAgIChvdXQtPnR5cGUgPT0gU01fVVBEQVRFX01FUkdFIHx8CisJICAgICBvdXQtPnR5cGUgPT0gU01fVVBEQVRFX1JFQkFTRSB8fAorCSAgICAgb3V0LT50eXBlID09IFNNX1VQREFURV9OT05FKSkKKwkJb3V0LT50eXBlID0gU01fVVBEQVRFX0NIRUNLT1VUOworCisJZnJlZShrZXkpOworfQorCitzdGF0aWMgaW50IG1vZHVsZV91cGRhdGVfbW9kdWxlX21vZGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqcGF0aCwgKnVwZGF0ZSA9IE5VTEw7CisJaW50IGp1c3RfY2xvbmVkOworCXN0cnVjdCBzdWJtb2R1bGVfdXBkYXRlX3N0cmF0ZWd5IHVwZGF0ZV9zdHJhdGVneSA9IHsgLnR5cGUgPSBTTV9VUERBVEVfQ0hFQ0tPVVQgfTsKKworCWlmIChhcmdjIDwgMyB8fCBhcmdjID4gNCkKKwkJZGllKCJzdWJtb2R1bGUtLWhlbHBlciB1cGRhdGUtbW9kdWxlLWNsb25lIGV4cGVjdHMgPGp1c3QtY2xvbmVkPiA8cGF0aD4gWzx1cGRhdGU+XSIpOworCisJanVzdF9jbG9uZWQgPSBnaXRfY29uZmlnX2ludCgianVzdF9jbG9uZWQiLCBhcmd2WzFdKTsKKwlwYXRoID0gYXJndlsyXTsKKworCWlmIChhcmdjID09IDQpCisJCXVwZGF0ZSA9IGFyZ3ZbM107CisKKwlkZXRlcm1pbmVfc3VibW9kdWxlX3VwZGF0ZV9zdHJhdGVneSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJICAgIGp1c3RfY2xvbmVkLCBwYXRoLCB1cGRhdGUsCisJCQkJCSAgICAmdXBkYXRlX3N0cmF0ZWd5KTsKKwlmcHV0cyhzdWJtb2R1bGVfc3RyYXRlZ3lfdG9fc3RyaW5nKCZ1cGRhdGVfc3RyYXRlZ3kpLCBzdGRvdXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB1cGRhdGVfY2xvbmVfZGF0YSB7CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXVuc2lnbmVkIGp1c3RfY2xvbmVkOworfTsKKworc3RydWN0IHN1Ym1vZHVsZV91cGRhdGVfY2xvbmUgeworCS8qIGluZGV4IGludG8gJ2xpc3QnLCB0aGUgbGlzdCBvZiBzdWJtb2R1bGVzIHRvIGxvb2sgaW50byBmb3IgY2xvbmluZyAqLworCWludCBjdXJyZW50OworCXN0cnVjdCBtb2R1bGVfbGlzdCBsaXN0OworCXVuc2lnbmVkIHdhcm5faWZfdW5pbml0aWFsaXplZCA6IDE7CisKKwkvKiB1cGRhdGUgcGFyYW1ldGVyIHBhc3NlZCB2aWEgY29tbWFuZGxpbmUgKi8KKwlzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9zdHJhdGVneSB1cGRhdGU7CisKKwkvKiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgd2hpY2ggYXJlIHBhc3NlZCBvbiB0byB0aGUgY2hpbGRyZW4gKi8KKwlpbnQgcHJvZ3Jlc3M7CisJaW50IHF1aWV0OworCWludCByZWNvbW1lbmRfc2hhbGxvdzsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVmZXJlbmNlczsKKwlpbnQgZGlzc29jaWF0ZTsKKwl1bnNpZ25lZCByZXF1aXJlX2luaXQ7CisJY29uc3QgY2hhciAqZGVwdGg7CisJY29uc3QgY2hhciAqcmVjdXJzaXZlX3ByZWZpeDsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJaW50IHNpbmdsZV9icmFuY2g7CisKKwkvKiB0byBiZSBjb25zdW1lZCBieSBnaXQtc3VibW9kdWxlLnNoICovCisJc3RydWN0IHVwZGF0ZV9jbG9uZV9kYXRhICp1cGRhdGVfY2xvbmU7CisJaW50IHVwZGF0ZV9jbG9uZV9ucjsgaW50IHVwZGF0ZV9jbG9uZV9hbGxvYzsKKworCS8qIElmIHdlIHdhbnQgdG8gc3RvcCBhcyBmYXN0IGFzIHBvc3NpYmxlIGFuZCByZXR1cm4gYW4gZXJyb3IgKi8KKwl1bnNpZ25lZCBxdWlja3N0b3AgOiAxOworCisJLyogZmFpbGVkIGNsb25lcyB0byBiZSByZXRyaWVkIGFnYWluICovCisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICoqZmFpbGVkX2Nsb25lczsKKwlpbnQgZmFpbGVkX2Nsb25lc19uciwgZmFpbGVkX2Nsb25lc19hbGxvYzsKKworCWludCBtYXhfam9iczsKK307CisjZGVmaW5lIFNVQk1PRFVMRV9VUERBVEVfQ0xPTkVfSU5JVCB7IFwKKwkubGlzdCA9IE1PRFVMRV9MSVNUX0lOSVQsIFwKKwkudXBkYXRlID0gU1VCTU9EVUxFX1VQREFURV9TVFJBVEVHWV9JTklULCBcCisJLnJlY29tbWVuZF9zaGFsbG93ID0gLTEsIFwKKwkucmVmZXJlbmNlcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQLCBcCisJLnNpbmdsZV9icmFuY2ggPSAtMSwgXAorCS5tYXhfam9icyA9IDEsIFwKK30KKworCitzdGF0aWMgdm9pZCBuZXh0X3N1Ym1vZHVsZV93YXJuX21pc3Npbmcoc3RydWN0IHN1Ym1vZHVsZV91cGRhdGVfY2xvbmUgKnN1YywKKwkJc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICpkaXNwbGF5cGF0aCkKK3sKKwkvKgorCSAqIE9ubHkgbWVudGlvbiB1bmluaXRpYWxpemVkIHN1Ym1vZHVsZXMgd2hlbiB0aGVpcgorCSAqIHBhdGhzIGhhdmUgYmVlbiBzcGVjaWZpZWQuCisJICovCisJaWYgKHN1Yy0+d2Fybl9pZl91bmluaXRpYWxpemVkKSB7CisJCXN0cmJ1Zl9hZGRmKG91dCwKKwkJCV8oIlN1Ym1vZHVsZSBwYXRoICclcycgbm90IGluaXRpYWxpemVkIiksCisJCQlkaXNwbGF5cGF0aCk7CisJCXN0cmJ1Zl9hZGRjaChvdXQsICdcbicpOworCQlzdHJidWZfYWRkc3RyKG91dCwKKwkJCV8oIk1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IikpOworCQlzdHJidWZfYWRkY2gob3V0LCAnXG4nKTsKKwl9Cit9CisKKy8qKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgJ2NlJyBuZWVkcyB0byBiZSBjbG9uZWQuIElmIHNvLCBwcmVwYXJlIHRoZSAnY2hpbGQnIHRvCisgKiBydW4gdGhlIGNsb25lLiBSZXR1cm5zIDEgaWYgJ2NlJyBuZWVkcyB0byBiZSBjbG9uZWQsIDAgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHByZXBhcmVfdG9fY2xvbmVfbmV4dF9zdWJtb2R1bGUoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkJICAgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNoaWxkLAorCQkJCQkgICBzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9jbG9uZSAqc3VjLAorCQkJCQkgICBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViID0gTlVMTDsKKwljb25zdCBjaGFyICp1cmwgPSBOVUxMOworCWNvbnN0IGNoYXIgKnVwZGF0ZV9zdHJpbmc7CisJZW51bSBzdWJtb2R1bGVfdXBkYXRlX3R5cGUgdXBkYXRlX3R5cGU7CisJY2hhciAqa2V5OworCXN0cnVjdCBzdHJidWYgZGlzcGxheXBhdGhfc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZGlzcGxheXBhdGggPSBOVUxMOworCWludCBuZWVkc19jbG9uaW5nID0gMDsKKwlpbnQgbmVlZF9mcmVlX3VybCA9IDA7CisKKwlpZiAoY2Vfc3RhZ2UoY2UpKSB7CisJCWlmIChzdWMtPnJlY3Vyc2l2ZV9wcmVmaXgpCisJCQlzdHJidWZfYWRkZigmc2IsICIlcy8lcyIsIHN1Yy0+cmVjdXJzaXZlX3ByZWZpeCwgY2UtPm5hbWUpOworCQllbHNlCisJCQlzdHJidWZfYWRkc3RyKCZzYiwgY2UtPm5hbWUpOworCQlzdHJidWZfYWRkZihvdXQsIF8oIlNraXBwaW5nIHVubWVyZ2VkIHN1Ym1vZHVsZSAlcyIpLCBzYi5idWYpOworCQlzdHJidWZfYWRkY2gob3V0LCAnXG4nKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXN1YiA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgodGhlX3JlcG9zaXRvcnksICZudWxsX29pZCwgY2UtPm5hbWUpOworCisJaWYgKHN1Yy0+cmVjdXJzaXZlX3ByZWZpeCkKKwkJZGlzcGxheXBhdGggPSByZWxhdGl2ZV9wYXRoKHN1Yy0+cmVjdXJzaXZlX3ByZWZpeCwKKwkJCQkJICAgIGNlLT5uYW1lLCAmZGlzcGxheXBhdGhfc2IpOworCWVsc2UKKwkJZGlzcGxheXBhdGggPSBjZS0+bmFtZTsKKworCWlmICghc3ViKSB7CisJCW5leHRfc3VibW9kdWxlX3dhcm5fbWlzc2luZyhzdWMsIG91dCwgZGlzcGxheXBhdGgpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJa2V5ID0geHN0cmZtdCgic3VibW9kdWxlLiVzLnVwZGF0ZSIsIHN1Yi0+bmFtZSk7CisJaWYgKCFyZXBvX2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KHRoZV9yZXBvc2l0b3J5LCBrZXksICZ1cGRhdGVfc3RyaW5nKSkgeworCQl1cGRhdGVfdHlwZSA9IHBhcnNlX3N1Ym1vZHVsZV91cGRhdGVfdHlwZSh1cGRhdGVfc3RyaW5nKTsKKwl9IGVsc2UgeworCQl1cGRhdGVfdHlwZSA9IHN1Yi0+dXBkYXRlX3N0cmF0ZWd5LnR5cGU7CisJfQorCWZyZWUoa2V5KTsKKworCWlmIChzdWMtPnVwZGF0ZS50eXBlID09IFNNX1VQREFURV9OT05FCisJICAgIHx8IChzdWMtPnVwZGF0ZS50eXBlID09IFNNX1VQREFURV9VTlNQRUNJRklFRAorCQkmJiB1cGRhdGVfdHlwZSA9PSBTTV9VUERBVEVfTk9ORSkpIHsKKwkJc3RyYnVmX2FkZGYob3V0LCBfKCJTa2lwcGluZyBzdWJtb2R1bGUgJyVzJyIpLCBkaXNwbGF5cGF0aCk7CisJCXN0cmJ1Zl9hZGRjaChvdXQsICdcbicpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogQ2hlY2sgaWYgdGhlIHN1Ym1vZHVsZSBoYXMgYmVlbiBpbml0aWFsaXplZC4gKi8KKwlpZiAoIWlzX3N1Ym1vZHVsZV9hY3RpdmUodGhlX3JlcG9zaXRvcnksIGNlLT5uYW1lKSkgeworCQluZXh0X3N1Ym1vZHVsZV93YXJuX21pc3Npbmcoc3VjLCBvdXQsIGRpc3BsYXlwYXRoKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXN0cmJ1Zl9yZXNldCgmc2IpOworCXN0cmJ1Zl9hZGRmKCZzYiwgInN1Ym1vZHVsZS4lcy51cmwiLCBzdWItPm5hbWUpOworCWlmIChyZXBvX2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KHRoZV9yZXBvc2l0b3J5LCBzYi5idWYsICZ1cmwpKSB7CisJCWlmIChzdGFydHNfd2l0aF9kb3Rfc2xhc2goc3ViLT51cmwpIHx8CisJCSAgICBzdGFydHNfd2l0aF9kb3RfZG90X3NsYXNoKHN1Yi0+dXJsKSkgeworCQkJdXJsID0gY29tcHV0ZV9zdWJtb2R1bGVfY2xvbmVfdXJsKHN1Yi0+dXJsKTsKKwkJCW5lZWRfZnJlZV91cmwgPSAxOworCQl9IGVsc2UKKwkJCXVybCA9IHN1Yi0+dXJsOworCX0KKworCXN0cmJ1Zl9yZXNldCgmc2IpOworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzLy5naXQiLCBjZS0+bmFtZSk7CisJbmVlZHNfY2xvbmluZyA9ICFmaWxlX2V4aXN0cyhzYi5idWYpOworCisJQUxMT0NfR1JPVyhzdWMtPnVwZGF0ZV9jbG9uZSwgc3VjLT51cGRhdGVfY2xvbmVfbnIgKyAxLAorCQkgICBzdWMtPnVwZGF0ZV9jbG9uZV9hbGxvYyk7CisJb2lkY3B5KCZzdWMtPnVwZGF0ZV9jbG9uZVtzdWMtPnVwZGF0ZV9jbG9uZV9ucl0ub2lkLCAmY2UtPm9pZCk7CisJc3VjLT51cGRhdGVfY2xvbmVbc3VjLT51cGRhdGVfY2xvbmVfbnJdLmp1c3RfY2xvbmVkID0gbmVlZHNfY2xvbmluZzsKKwlzdWMtPnVwZGF0ZV9jbG9uZVtzdWMtPnVwZGF0ZV9jbG9uZV9ucl0uc3ViID0gc3ViOworCXN1Yy0+dXBkYXRlX2Nsb25lX25yKys7CisKKwlpZiAoIW5lZWRzX2Nsb25pbmcpCisJCWdvdG8gY2xlYW51cDsKKworCWNoaWxkLT5naXRfY21kID0gMTsKKwljaGlsZC0+bm9fc3RkaW4gPSAxOworCWNoaWxkLT5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwljaGlsZC0+ZXJyID0gLTE7CisJYXJndl9hcnJheV9wdXNoKCZjaGlsZC0+YXJncywgInN1Ym1vZHVsZS0taGVscGVyIik7CisJYXJndl9hcnJheV9wdXNoKCZjaGlsZC0+YXJncywgImNsb25lIik7CisJaWYgKHN1Yy0+cHJvZ3Jlc3MpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQtPmFyZ3MsICItLXByb2dyZXNzIik7CisJaWYgKHN1Yy0+cXVpZXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQtPmFyZ3MsICItLXF1aWV0Iik7CisJaWYgKHN1Yy0+cHJlZml4KQorCQlhcmd2X2FycmF5X3B1c2hsKCZjaGlsZC0+YXJncywgIi0tcHJlZml4Iiwgc3VjLT5wcmVmaXgsIE5VTEwpOworCWlmIChzdWMtPnJlY29tbWVuZF9zaGFsbG93ICYmIHN1Yi0+cmVjb21tZW5kX3NoYWxsb3cgPT0gMSkKKwkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC0+YXJncywgIi0tZGVwdGg9MSIpOworCWlmIChzdWMtPnJlcXVpcmVfaW5pdCkKKwkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC0+YXJncywgIi0tcmVxdWlyZS1pbml0Iik7CisJYXJndl9hcnJheV9wdXNobCgmY2hpbGQtPmFyZ3MsICItLXBhdGgiLCBzdWItPnBhdGgsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNoaWxkLT5hcmdzLCAiLS1uYW1lIiwgc3ViLT5uYW1lLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjaGlsZC0+YXJncywgIi0tdXJsIiwgdXJsLCBOVUxMKTsKKwlpZiAoc3VjLT5yZWZlcmVuY2VzLm5yKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZzdWMtPnJlZmVyZW5jZXMpCisJCQlhcmd2X2FycmF5X3B1c2hsKCZjaGlsZC0+YXJncywgIi0tcmVmZXJlbmNlIiwgaXRlbS0+c3RyaW5nLCBOVUxMKTsKKwl9CisJaWYgKHN1Yy0+ZGlzc29jaWF0ZSkKKwkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC0+YXJncywgIi0tZGlzc29jaWF0ZSIpOworCWlmIChzdWMtPmRlcHRoKQorCQlhcmd2X2FycmF5X3B1c2goJmNoaWxkLT5hcmdzLCBzdWMtPmRlcHRoKTsKKwlpZiAoc3VjLT5zaW5nbGVfYnJhbmNoID49IDApCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQtPmFyZ3MsIHN1Yy0+c2luZ2xlX2JyYW5jaCA/CisJCQkJCSAgICAgICItLXNpbmdsZS1icmFuY2giIDoKKwkJCQkJICAgICAgIi0tbm8tc2luZ2xlLWJyYW5jaCIpOworCitjbGVhbnVwOgorCXN0cmJ1Zl9yZXNldCgmZGlzcGxheXBhdGhfc2IpOworCXN0cmJ1Zl9yZXNldCgmc2IpOworCWlmIChuZWVkX2ZyZWVfdXJsKQorCQlmcmVlKCh2b2lkKil1cmwpOworCisJcmV0dXJuIG5lZWRzX2Nsb25pbmc7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX2Nsb25lX2dldF9uZXh0X3Rhc2soc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNoaWxkLAorCQkJCSAgICAgIHN0cnVjdCBzdHJidWYgKmVyciwKKwkJCQkgICAgICB2b2lkICpzdWNfY2IsCisJCQkJICAgICAgdm9pZCAqKmlkeF90YXNrX2NiKQoreworCXN0cnVjdCBzdWJtb2R1bGVfdXBkYXRlX2Nsb25lICpzdWMgPSBzdWNfY2I7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwlpbnQgaW5kZXg7CisKKwlmb3IgKDsgc3VjLT5jdXJyZW50IDwgc3VjLT5saXN0Lm5yOyBzdWMtPmN1cnJlbnQrKykgeworCQljZSA9IHN1Yy0+bGlzdC5lbnRyaWVzW3N1Yy0+Y3VycmVudF07CisJCWlmIChwcmVwYXJlX3RvX2Nsb25lX25leHRfc3VibW9kdWxlKGNlLCBjaGlsZCwgc3VjLCBlcnIpKSB7CisJCQlpbnQgKnAgPSB4bWFsbG9jKHNpemVvZigqcCkpOworCQkJKnAgPSBzdWMtPmN1cnJlbnQ7CisJCQkqaWR4X3Rhc2tfY2IgPSBwOworCQkJc3VjLT5jdXJyZW50Kys7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCS8qCisJICogVGhlIGxvb3AgYWJvdmUgdHJpZWQgY2xvbmluZyBlYWNoIHN1Ym1vZHVsZSBvbmNlLCBub3cgdHJ5IHRoZQorCSAqIHN0cmFnZ2xlcnMgYWdhaW4sIHdoaWNoIHdlIGNhbiBpbWFnaW5lIGFzIGFuIGV4dGVuc2lvbiBvZiB0aGUKKwkgKiBlbnRyeSBsaXN0LgorCSAqLworCWluZGV4ID0gc3VjLT5jdXJyZW50IC0gc3VjLT5saXN0Lm5yOworCWlmIChpbmRleCA8IHN1Yy0+ZmFpbGVkX2Nsb25lc19ucikgeworCQlpbnQgKnA7CisJCWNlID0gc3VjLT5mYWlsZWRfY2xvbmVzW2luZGV4XTsKKwkJaWYgKCFwcmVwYXJlX3RvX2Nsb25lX25leHRfc3VibW9kdWxlKGNlLCBjaGlsZCwgc3VjLCBlcnIpKSB7CisJCQlzdWMtPmN1cnJlbnQgKys7CisJCQlzdHJidWZfYWRkc3RyKGVyciwgIkJVRzogc3VibW9kdWxlIGNvbnNpZGVyZWQgZm9yICIKKwkJCQkJICAgImNsb25pbmcsIGRvZXNuJ3QgbmVlZCBjbG9uaW5nICIKKwkJCQkJICAgImFueSBtb3JlP1xuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlwID0geG1hbGxvYyhzaXplb2YoKnApKTsKKwkJKnAgPSBzdWMtPmN1cnJlbnQ7CisJCSppZHhfdGFza19jYiA9IHA7CisJCXN1Yy0+Y3VycmVudCArKzsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX2Nsb25lX3N0YXJ0X2ZhaWx1cmUoc3RydWN0IHN0cmJ1ZiAqZXJyLAorCQkJCSAgICAgIHZvaWQgKnN1Y19jYiwKKwkJCQkgICAgICB2b2lkICppZHhfdGFza19jYikKK3sKKwlzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9jbG9uZSAqc3VjID0gc3VjX2NiOworCXN1Yy0+cXVpY2tzdG9wID0gMTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB1cGRhdGVfY2xvbmVfdGFza19maW5pc2hlZChpbnQgcmVzdWx0LAorCQkJCSAgICAgIHN0cnVjdCBzdHJidWYgKmVyciwKKwkJCQkgICAgICB2b2lkICpzdWNfY2IsCisJCQkJICAgICAgdm9pZCAqaWR4X3Rhc2tfY2IpCit7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwlzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9jbG9uZSAqc3VjID0gc3VjX2NiOworCisJaW50ICppZHhQID0gaWR4X3Rhc2tfY2I7CisJaW50IGlkeCA9ICppZHhQOworCWZyZWUoaWR4UCk7CisKKwlpZiAoIXJlc3VsdCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaWR4IDwgc3VjLT5saXN0Lm5yKSB7CisJCWNlICA9IHN1Yy0+bGlzdC5lbnRyaWVzW2lkeF07CisJCXN0cmJ1Zl9hZGRmKGVyciwgXygiRmFpbGVkIHRvIGNsb25lICclcycuIFJldHJ5IHNjaGVkdWxlZCIpLAorCQkJICAgIGNlLT5uYW1lKTsKKwkJc3RyYnVmX2FkZGNoKGVyciwgJ1xuJyk7CisJCUFMTE9DX0dST1coc3VjLT5mYWlsZWRfY2xvbmVzLAorCQkJICAgc3VjLT5mYWlsZWRfY2xvbmVzX25yICsgMSwKKwkJCSAgIHN1Yy0+ZmFpbGVkX2Nsb25lc19hbGxvYyk7CisJCXN1Yy0+ZmFpbGVkX2Nsb25lc1tzdWMtPmZhaWxlZF9jbG9uZXNfbnIrK10gPSBjZTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWR4IC09IHN1Yy0+bGlzdC5ucjsKKwkJY2UgID0gc3VjLT5mYWlsZWRfY2xvbmVzW2lkeF07CisJCXN0cmJ1Zl9hZGRmKGVyciwgXygiRmFpbGVkIHRvIGNsb25lICclcycgYSBzZWNvbmQgdGltZSwgYWJvcnRpbmciKSwKKwkJCSAgICBjZS0+bmFtZSk7CisJCXN0cmJ1Zl9hZGRjaChlcnIsICdcbicpOworCQlzdWMtPnF1aWNrc3RvcCA9IDE7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF91cGRhdGVfY2xvbmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsCisJCQkJICAgdm9pZCAqY2IpCit7CisJaW50ICptYXhfam9icyA9IGNiOworCWlmICghc3RyY21wKHZhciwgInN1Ym1vZHVsZS5mZXRjaGpvYnMiKSkKKwkJKm1heF9qb2JzID0gcGFyc2Vfc3VibW9kdWxlX2ZldGNoam9icyh2YXIsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3N1Ym1vZHVsZShzdHJ1Y3QgdXBkYXRlX2Nsb25lX2RhdGEgKnVjZCkKK3sKKwlmcHJpbnRmKHN0ZG91dCwgImR1bW15ICVzICVkXHQlc1xuIiwKKwkJb2lkX3RvX2hleCgmdWNkLT5vaWQpLAorCQl1Y2QtPmp1c3RfY2xvbmVkLAorCQl1Y2QtPnN1Yi0+cGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX3N1Ym1vZHVsZXMoc3RydWN0IHN1Ym1vZHVsZV91cGRhdGVfY2xvbmUgKnN1YykKK3sKKwlpbnQgaTsKKworCXJ1bl9wcm9jZXNzZXNfcGFyYWxsZWxfdHIyKHN1Yy0+bWF4X2pvYnMsIHVwZGF0ZV9jbG9uZV9nZXRfbmV4dF90YXNrLAorCQkJCSAgIHVwZGF0ZV9jbG9uZV9zdGFydF9mYWlsdXJlLAorCQkJCSAgIHVwZGF0ZV9jbG9uZV90YXNrX2ZpbmlzaGVkLCBzdWMsICJzdWJtb2R1bGUiLAorCQkJCSAgICJwYXJhbGxlbC91cGRhdGUiKTsKKworCS8qCisJICogV2Ugc2F2ZWQgdGhlIG91dHB1dCBhbmQgcHV0IGl0IG91dCBhbGwgYXQgb25jZSBub3cuCisJICogVGhhdCBtZWFuczoKKwkgKiAtIHRoZSBsaXN0ZW5lciBkb2VzIG5vdCBoYXZlIHRvIGludGVybGVhdmUgdGhlaXIgKGNoZWNrb3V0KQorCSAqICAgd29yayB3aXRoIG91ciBmZXRjaGluZy4gIFRoZSB3cml0ZXMgaW52b2x2ZWQgaW4gYQorCSAqICAgY2hlY2tvdXQgaW52b2x2ZSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBzZXF1ZW50aWFsIEkvTy4KKwkgKiAtIHRoZSBsaXN0ZW5lciBjYW4gYXZvaWQgZG9pbmcgYW55IHdvcmsgaWYgZmV0Y2hpbmcgZmFpbGVkLgorCSAqLworCWlmIChzdWMtPnF1aWNrc3RvcCkKKwkJcmV0dXJuIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3VjLT51cGRhdGVfY2xvbmVfbnI7IGkrKykKKwkJdXBkYXRlX3N1Ym1vZHVsZSgmc3VjLT51cGRhdGVfY2xvbmVbaV0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX2Nsb25lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKnVwZGF0ZSA9IE5VTEw7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCXN0cnVjdCBzdWJtb2R1bGVfdXBkYXRlX2Nsb25lIHN1YyA9IFNVQk1PRFVMRV9VUERBVEVfQ0xPTkVfSU5JVDsKKworCXN0cnVjdCBvcHRpb24gbW9kdWxlX3VwZGF0ZV9jbG9uZV9vcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoMCwgInByZWZpeCIsICZwcmVmaXgsCisJCQkgICBOXygicGF0aCIpLAorCQkJICAgTl8oInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIikpLAorCQlPUFRfU1RSSU5HKDAsICJyZWN1cnNpdmUtcHJlZml4IiwgJnN1Yy5yZWN1cnNpdmVfcHJlZml4LAorCQkJICAgTl8oInBhdGgiKSwKKwkJCSAgIE5fKCJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSwgYWNyb3NzIG5lc3RlZCAiCisJCQkgICAgICAic3VibW9kdWxlIGJvdW5kYXJpZXMiKSksCisJCU9QVF9TVFJJTkcoMCwgInVwZGF0ZSIsICZ1cGRhdGUsCisJCQkgICBOXygic3RyaW5nIiksCisJCQkgICBOXygicmViYXNlLCBtZXJnZSwgY2hlY2tvdXQgb3Igbm9uZSIpKSwKKwkJT1BUX1NUUklOR19MSVNUKDAsICJyZWZlcmVuY2UiLCAmc3VjLnJlZmVyZW5jZXMsIE5fKCJyZXBvIiksCisJCQkgICBOXygicmVmZXJlbmNlIHJlcG9zaXRvcnkiKSksCisJCU9QVF9CT09MKDAsICJkaXNzb2NpYXRlIiwgJnN1Yy5kaXNzb2NpYXRlLAorCQkJICAgTl8oInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciKSksCisJCU9QVF9TVFJJTkcoMCwgImRlcHRoIiwgJnN1Yy5kZXB0aCwgIjxkZXB0aD4iLAorCQkJICAgTl8oIkNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgdHJ1bmNhdGVkIHRvIHRoZSAiCisJCQkgICAgICAic3BlY2lmaWVkIG51bWJlciBvZiByZXZpc2lvbnMiKSksCisJCU9QVF9JTlRFR0VSKCdqJywgImpvYnMiLCAmc3VjLm1heF9qb2JzLAorCQkJICAgIE5fKCJwYXJhbGxlbCBqb2JzIikpLAorCQlPUFRfQk9PTCgwLCAicmVjb21tZW5kLXNoYWxsb3ciLCAmc3VjLnJlY29tbWVuZF9zaGFsbG93LAorCQkJICAgIE5fKCJ3aGV0aGVyIHRoZSBpbml0aWFsIGNsb25lIHNob3VsZCBmb2xsb3cgdGhlIHNoYWxsb3cgcmVjb21tZW5kYXRpb24iKSksCisJCU9QVF9fUVVJRVQoJnN1Yy5xdWlldCwgTl8oImRvbid0IHByaW50IGNsb25pbmcgcHJvZ3Jlc3MiKSksCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZzdWMucHJvZ3Jlc3MsCisJCQkgICAgTl8oImZvcmNlIGNsb25pbmcgcHJvZ3Jlc3MiKSksCisJCU9QVF9CT09MKDAsICJyZXF1aXJlLWluaXQiLCAmc3VjLnJlcXVpcmVfaW5pdCwKKwkJCSAgIE5fKCJkaXNhbGxvdyBjbG9uaW5nIGludG8gbm9uLWVtcHR5IGRpcmVjdG9yeSIpKSwKKwkJT1BUX0JPT0woMCwgInNpbmdsZS1icmFuY2giLCAmc3VjLnNpbmdsZV9icmFuY2gsCisJCQkgTl8oImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWNvbnN0IGNoYXIgKmNvbnN0IGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlW10gPSB7CisJCU5fKCJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIiksCisJCU5VTEwKKwl9OworCXN1Yy5wcmVmaXggPSBwcmVmaXg7CisKKwl1cGRhdGVfY2xvbmVfY29uZmlnX2Zyb21fZ2l0bW9kdWxlcygmc3VjLm1heF9qb2JzKTsKKwlnaXRfY29uZmlnKGdpdF91cGRhdGVfY2xvbmVfY29uZmlnLCAmc3VjLm1heF9qb2JzKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgbW9kdWxlX3VwZGF0ZV9jbG9uZV9vcHRpb25zLAorCQkJICAgICBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZSwgMCk7CisKKwlpZiAodXBkYXRlKQorCQlpZiAocGFyc2Vfc3VibW9kdWxlX3VwZGF0ZV9zdHJhdGVneSh1cGRhdGUsICZzdWMudXBkYXRlKSA8IDApCisJCQlkaWUoXygiYmFkIHZhbHVlIGZvciB1cGRhdGUgcGFyYW1ldGVyIikpOworCisJaWYgKG1vZHVsZV9saXN0X2NvbXB1dGUoYXJnYywgYXJndiwgcHJlZml4LCAmcGF0aHNwZWMsICZzdWMubGlzdCkgPCAwKQorCQlyZXR1cm4gMTsKKworCWlmIChwYXRoc3BlYy5ucikKKwkJc3VjLndhcm5faWZfdW5pbml0aWFsaXplZCA9IDE7CisKKwlyZXR1cm4gdXBkYXRlX3N1Ym1vZHVsZXMoJnN1Yyk7Cit9CisKK3N0YXRpYyBpbnQgcmVzb2x2ZV9yZWxhdGl2ZV9wYXRoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpZiAoYXJnYyAhPSAzKQorCQlkaWUoInN1Ym1vZHVsZS0taGVscGVyIHJlbGF0aXZlLXBhdGggdGFrZXMgZXhhY3RseSAyIGFyZ3VtZW50cywgZ290ICVkIiwgYXJnYyk7CisKKwlwcmludGYoIiVzIiwgcmVsYXRpdmVfcGF0aChhcmd2WzFdLCBhcmd2WzJdLCAmc2IpKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcmVtb3RlX3N1Ym1vZHVsZV9icmFuY2goY29uc3QgY2hhciAqcGF0aCkKK3sKKwljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWI7CisJY29uc3QgY2hhciAqYnJhbmNoID0gTlVMTDsKKwljaGFyICprZXk7CisKKwlzdWIgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKHRoZV9yZXBvc2l0b3J5LCAmbnVsbF9vaWQsIHBhdGgpOworCWlmICghc3ViKQorCQlyZXR1cm4gTlVMTDsKKworCWtleSA9IHhzdHJmbXQoInN1Ym1vZHVsZS4lcy5icmFuY2giLCBzdWItPm5hbWUpOworCWlmIChyZXBvX2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KHRoZV9yZXBvc2l0b3J5LCBrZXksICZicmFuY2gpKQorCQlicmFuY2ggPSBzdWItPmJyYW5jaDsKKwlmcmVlKGtleSk7CisKKwlpZiAoIWJyYW5jaCkKKwkJcmV0dXJuICJtYXN0ZXIiOworCisJaWYgKCFzdHJjbXAoYnJhbmNoLCAiLiIpKSB7CisJCWNvbnN0IGNoYXIgKnJlZm5hbWUgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCBOVUxMLCBOVUxMKTsKKworCQlpZiAoIXJlZm5hbWUpCisJCQlkaWUoXygiTm8gc3VjaCByZWY6ICVzIiksICJIRUFEIik7CisKKwkJLyogZGV0YWNoZWQgSEVBRCAqLworCQlpZiAoIXN0cmNtcChyZWZuYW1lLCAiSEVBRCIpKQorCQkJZGllKF8oIlN1Ym1vZHVsZSAoJXMpIGJyYW5jaCBjb25maWd1cmVkIHRvIGluaGVyaXQgIgorCQkJICAgICAgImJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0IHRoZSBzdXBlcnByb2plY3QgIgorCQkJICAgICAgImlzIG5vdCBvbiBhbnkgYnJhbmNoIiksIHN1Yi0+bmFtZSk7CisKKwkJaWYgKCFza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy9oZWFkcy8iLCAmcmVmbmFtZSkpCisJCQlkaWUoXygiRXhwZWN0aW5nIGEgZnVsbCByZWYgbmFtZSwgZ290ICVzIiksIHJlZm5hbWUpOworCQlyZXR1cm4gcmVmbmFtZTsKKwl9CisKKwlyZXR1cm4gYnJhbmNoOworfQorCitzdGF0aWMgaW50IHJlc29sdmVfcmVtb3RlX3N1Ym1vZHVsZV9icmFuY2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQljb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqcmV0OworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpZiAoYXJnYyAhPSAyKQorCQlkaWUoInN1Ym1vZHVsZS0taGVscGVyIHJlbW90ZS1icmFuY2ggdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnRzLCBnb3QgJWQiLCBhcmdjKTsKKworCXJldCA9IHJlbW90ZV9zdWJtb2R1bGVfYnJhbmNoKGFyZ3ZbMV0pOworCWlmICghcmV0KQorCQlkaWUoInN1Ym1vZHVsZSAlcyBkb2Vzbid0IGV4aXN0IiwgYXJndlsxXSk7CisKKwlwcmludGYoIiVzIiwgcmV0KTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB1c2hfY2hlY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCWNvbnN0IGNoYXIgKnN1cGVycHJvamVjdF9oZWFkOworCWNoYXIgKmhlYWQ7CisJaW50IGRldGFjaGVkX2hlYWQgPSAwOworCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisKKwlpZiAoYXJnYyA8IDMpCisJCWRpZSgic3VibW9kdWxlLS1oZWxwZXIgcHVzaC1jaGVjayByZXF1aXJlcyBhdCBsZWFzdCAyIGFyZ3VtZW50cyIpOworCisJLyoKKwkgKiBzdXBlcnByb2plY3QncyByZXNvbHZlZCBoZWFkIHJlZi4KKwkgKiBpZiBIRUFEIHRoZW4gdGhlIHN1cGVycHJvamVjdCBpcyBpbiBhIGRldGFjaGVkIGhlYWQgc3RhdGUsIG90aGVyd2lzZQorCSAqIGl0IHdpbGwgYmUgdGhlIHJlc29sdmVkIGhlYWQgcmVmLgorCSAqLworCXN1cGVycHJvamVjdF9oZWFkID0gYXJndlsxXTsKKwlhcmd2Kys7CisJYXJnYy0tOworCS8qIEdldCB0aGUgc3VibW9kdWxlJ3MgaGVhZCByZWYgYW5kIGRldGVybWluZSBpZiBpdCBpcyBkZXRhY2hlZCAqLworCWhlYWQgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIDAsICZoZWFkX29pZCwgTlVMTCk7CisJaWYgKCFoZWFkKQorCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iKSk7CisJaWYgKCFzdHJjbXAoaGVhZCwgIkhFQUQiKSkKKwkJZGV0YWNoZWRfaGVhZCA9IDE7CisKKwkvKgorCSAqIFRoZSByZW1vdGUgbXVzdCBiZSBjb25maWd1cmVkLgorCSAqIFRoaXMgaXMgdG8gYXZvaWQgcHVzaGluZyB0byB0aGUgZXhhY3Qgc2FtZSBVUkwgYXMgdGhlIHBhcmVudC4KKwkgKi8KKwlyZW1vdGUgPSBwdXNocmVtb3RlX2dldChhcmd2WzFdKTsKKwlpZiAoIXJlbW90ZSB8fCByZW1vdGUtPm9yaWdpbiA9PSBSRU1PVEVfVU5DT05GSUdVUkVEKQorCQlkaWUoInJlbW90ZSAnJXMnIG5vdCBjb25maWd1cmVkIiwgYXJndlsxXSk7CisKKwkvKiBDaGVjayB0aGUgcmVmc3BlYyAqLworCWlmIChhcmdjID4gMikgeworCQlpbnQgaTsKKwkJc3RydWN0IHJlZiAqbG9jYWxfcmVmcyA9IGdldF9sb2NhbF9oZWFkcygpOworCQlzdHJ1Y3QgcmVmc3BlYyByZWZzcGVjID0gUkVGU1BFQ19JTklUX1BVU0g7CisKKwkJcmVmc3BlY19hcHBlbmRuKCZyZWZzcGVjLCBhcmd2ICsgMiwgYXJnYyAtIDIpOworCisJCWZvciAoaSA9IDA7IGkgPCByZWZzcGVjLm5yOyBpKyspIHsKKwkJCWNvbnN0IHN0cnVjdCByZWZzcGVjX2l0ZW0gKnJzID0gJnJlZnNwZWMuaXRlbXNbaV07CisKKwkJCWlmIChycy0+cGF0dGVybiB8fCBycy0+bWF0Y2hpbmcpCisJCQkJY29udGludWU7CisKKwkJCS8qIExIUyBtdXN0IG1hdGNoIGEgc2luZ2xlIHJlZiAqLworCQkJc3dpdGNoIChjb3VudF9yZWZzcGVjX21hdGNoKHJzLT5zcmMsIGxvY2FsX3JlZnMsIE5VTEwpKSB7CisJCQljYXNlIDE6CisJCQkJYnJlYWs7CisJCQljYXNlIDA6CisJCQkJLyoKKwkJCQkgKiBJZiBMSFMgbWF0Y2hlcyAnSEVBRCcgdGhlbiB3ZSBuZWVkIHRvIGVuc3VyZQorCQkJCSAqIHRoYXQgaXQgbWF0Y2hlcyB0aGUgc2FtZSBuYW1lZCBicmFuY2gKKwkJCQkgKiBjaGVja2VkIG91dCBpbiB0aGUgc3VwZXJwcm9qZWN0LgorCQkJCSAqLworCQkJCWlmICghc3RyY21wKHJzLT5zcmMsICJIRUFEIikpIHsKKwkJCQkJaWYgKCFkZXRhY2hlZF9oZWFkICYmCisJCQkJCSAgICAhc3RyY21wKGhlYWQsIHN1cGVycHJvamVjdF9oZWFkKSkKKwkJCQkJCWJyZWFrOworCQkJCQlkaWUoIkhFQUQgZG9lcyBub3QgbWF0Y2ggdGhlIG5hbWVkIGJyYW5jaCBpbiB0aGUgc3VwZXJwcm9qZWN0Iik7CisJCQkJfQorCQkJCS8qIGZhbGx0aHJvdWdoICovCisJCQlkZWZhdWx0OgorCQkJCWRpZSgic3JjIHJlZnNwZWMgJyVzJyBtdXN0IG5hbWUgYSByZWYiLAorCQkJCSAgICBycy0+c3JjKTsKKwkJCX0KKwkJfQorCQlyZWZzcGVjX2NsZWFyKCZyZWZzcGVjKTsKKwl9CisJZnJlZShoZWFkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVuc3VyZV9jb3JlX3dvcmt0cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKwljb25zdCBjaGFyICpwYXRoOworCWNoYXIgKmN3OworCXN0cnVjdCByZXBvc2l0b3J5IHN1YnJlcG87CisKKwlpZiAoYXJnYyAhPSAyKQorCQlCVUcoInN1Ym1vZHVsZS0taGVscGVyIGVuc3VyZS1jb3JlLXdvcmt0cmVlIDxwYXRoPiIpOworCisJcGF0aCA9IGFyZ3ZbMV07CisKKwlzdWIgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKHRoZV9yZXBvc2l0b3J5LCAmbnVsbF9vaWQsIHBhdGgpOworCWlmICghc3ViKQorCQlCVUcoIldlIGNvdWxkIGdldCB0aGUgc3VibW9kdWxlIGhhbmRsZSBiZWZvcmU/Iik7CisKKwlpZiAocmVwb19zdWJtb2R1bGVfaW5pdCgmc3VicmVwbywgdGhlX3JlcG9zaXRvcnksIHN1YikpCisJCWRpZShfKCJjb3VsZCBub3QgZ2V0IGEgcmVwb3NpdG9yeSBoYW5kbGUgZm9yIHN1Ym1vZHVsZSAnJXMnIiksIHBhdGgpOworCisJaWYgKCFyZXBvX2NvbmZpZ19nZXRfc3RyaW5nKCZzdWJyZXBvLCAiY29yZS53b3JrdHJlZSIsICZjdykpIHsKKwkJY2hhciAqY2ZnX2ZpbGUsICphYnNfcGF0aDsKKwkJY29uc3QgY2hhciAqcmVsX3BhdGg7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCQljZmdfZmlsZSA9IHJlcG9fZ2l0X3BhdGgoJnN1YnJlcG8sICJjb25maWciKTsKKworCQlhYnNfcGF0aCA9IGFic29sdXRlX3BhdGhkdXAocGF0aCk7CisJCXJlbF9wYXRoID0gcmVsYXRpdmVfcGF0aChhYnNfcGF0aCwgc3VicmVwby5naXRkaXIsICZzYik7CisKKwkJZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZShjZmdfZmlsZSwgImNvcmUud29ya3RyZWUiLCByZWxfcGF0aCk7CisKKwkJZnJlZShjZmdfZmlsZSk7CisJCWZyZWUoYWJzX3BhdGgpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFic29yYl9naXRfZGlycyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJc3RydWN0IG1vZHVsZV9saXN0IGxpc3QgPSBNT0RVTEVfTElTVF9JTklUOworCXVuc2lnbmVkIGZsYWdzID0gQUJTT1JCX0dJVERJUl9SRUNVUlNFX1NVQk1PRFVMRVM7CisKKwlzdHJ1Y3Qgb3B0aW9uIGVtYmVkX2dpdGRpcl9vcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoMCwgInByZWZpeCIsICZwcmVmaXgsCisJCQkgICBOXygicGF0aCIpLAorCQkJICAgTl8oInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIikpLAorCQlPUFRfQklUKDAsICItLXJlY3Vyc2l2ZSIsICZmbGFncywgTl8oInJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIiksCisJCQlBQlNPUkJfR0lURElSX1JFQ1VSU0VfU1VCTU9EVUxFUyksCisJCU9QVF9FTkQoKQorCX07CisKKwljb25zdCBjaGFyICpjb25zdCBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZVtdID0geworCQlOXygiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIpLAorCQlOVUxMCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgZW1iZWRfZ2l0ZGlyX29wdGlvbnMsCisJCQkgICAgIGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlLCAwKTsKKworCWlmIChtb2R1bGVfbGlzdF9jb21wdXRlKGFyZ2MsIGFyZ3YsIHByZWZpeCwgJnBhdGhzcGVjLCAmbGlzdCkgPCAwKQorCQlyZXR1cm4gMTsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspCisJCWFic29yYl9naXRfZGlyX2ludG9fc3VwZXJwcm9qZWN0KGxpc3QuZW50cmllc1tpXS0+bmFtZSwgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfYWN0aXZlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWlmIChhcmdjICE9IDIpCisJCWRpZSgic3VibW9kdWxlLS1oZWxwZXIgaXMtYWN0aXZlIHRha2VzIGV4YWN0bHkgMSBhcmd1bWVudCIpOworCisJcmV0dXJuICFpc19zdWJtb2R1bGVfYWN0aXZlKHRoZV9yZXBvc2l0b3J5LCBhcmd2WzFdKTsKK30KKworLyoKKyAqIEV4aXQgbm9uLXplcm8gaWYgYW55IG9mIHRoZSBzdWJtb2R1bGUgbmFtZXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSBpcworICogaW52YWxpZC4gSWYgbm8gbmFtZXMgYXJlIGdpdmVuLCBmaWx0ZXIgc3RkaW4gdG8gcHJpbnQgb25seSB2YWxpZCBuYW1lcworICogKHdoaWNoIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgdGVzdGluZykuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfbmFtZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpZiAoYXJnYyA+IDEpIHsKKwkJd2hpbGUgKCorK2FyZ3YpIHsKKwkJCWlmIChjaGVja19zdWJtb2R1bGVfbmFtZSgqYXJndikgPCAwKQorCQkJCXJldHVybiAxOworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZidWYsIHN0ZGluKSAhPSBFT0YpIHsKKwkJCWlmICghY2hlY2tfc3VibW9kdWxlX25hbWUoYnVmLmJ1ZikpCisJCQkJcHJpbnRmKCIlc1xuIiwgYnVmLmJ1Zik7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1vZHVsZV9jb25maWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJZW51bSB7CisJCUNIRUNLX1dSSVRFQUJMRSA9IDEsCisJCURPX1VOU0VUID0gMgorCX0gY29tbWFuZCA9IDA7CisKKwlzdHJ1Y3Qgb3B0aW9uIG1vZHVsZV9jb25maWdfb3B0aW9uc1tdID0geworCQlPUFRfQ01ETU9ERSgwLCAiY2hlY2std3JpdGVhYmxlIiwgJmNvbW1hbmQsCisJCQkgICAgTl8oImNoZWNrIGlmIGl0IGlzIHNhZmUgdG8gd3JpdGUgdG8gdGhlIC5naXRtb2R1bGVzIGZpbGUiKSwKKwkJCSAgICBDSEVDS19XUklURUFCTEUpLAorCQlPUFRfQ01ETU9ERSgwLCAidW5zZXQiLCAmY29tbWFuZCwKKwkJCSAgICBOXygidW5zZXQgdGhlIGNvbmZpZyBpbiB0aGUgLmdpdG1vZHVsZXMgZmlsZSIpLAorCQkJICAgIERPX1VOU0VUKSwKKwkJT1BUX0VORCgpCisJfTsKKwljb25zdCBjaGFyICpjb25zdCBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZVtdID0geworCQlOXygiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA8bmFtZT4gWzx2YWx1ZT5dIiksCisJCU5fKCJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IiksCisJCU5fKCJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIiksCisJCU5VTEwKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBtb2R1bGVfY29uZmlnX29wdGlvbnMsCisJCQkgICAgIGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlLCBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisKKwlpZiAoYXJnYyA9PSAxICYmIGNvbW1hbmQgPT0gQ0hFQ0tfV1JJVEVBQkxFKQorCQlyZXR1cm4gaXNfd3JpdGluZ19naXRtb2R1bGVzX29rKCkgPyAwIDogLTE7CisKKwkvKiBFcXVpdmFsZW50IHRvIEFDVElPTl9HRVQgaW4gYnVpbHRpbi9jb25maWcuYyAqLworCWlmIChhcmdjID09IDIgJiYgY29tbWFuZCAhPSBET19VTlNFVCkKKwkJcmV0dXJuIHByaW50X2NvbmZpZ19mcm9tX2dpdG1vZHVsZXModGhlX3JlcG9zaXRvcnksIGFyZ3ZbMV0pOworCisJLyogRXF1aXZhbGVudCB0byBBQ1RJT05fU0VUIGluIGJ1aWx0aW4vY29uZmlnLmMgKi8KKwlpZiAoYXJnYyA9PSAzIHx8IChhcmdjID09IDIgJiYgY29tbWFuZCA9PSBET19VTlNFVCkpIHsKKwkJY29uc3QgY2hhciAqdmFsdWUgPSAoYXJnYyA9PSAzKSA/IGFyZ3ZbMl0gOiBOVUxMOworCisJCWlmICghaXNfd3JpdGluZ19naXRtb2R1bGVzX29rKCkpCisJCQlkaWUoXygicGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGlzIGluIHRoZSB3b3JraW5nIHRyZWUiKSk7CisKKwkJcmV0dXJuIGNvbmZpZ19zZXRfaW5fZ2l0bW9kdWxlc19maWxlX2dlbnRseShhcmd2WzFdLCB2YWx1ZSk7CisJfQorCisJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlLCBtb2R1bGVfY29uZmlnX29wdGlvbnMpOworfQorCitzdGF0aWMgaW50IG1vZHVsZV9zZXRfdXJsKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBxdWlldCA9IDA7CisJY29uc3QgY2hhciAqbmV3dXJsOworCWNvbnN0IGNoYXIgKnBhdGg7CisJY2hhciAqY29uZmlnX25hbWU7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJTdXBwcmVzcyBvdXRwdXQgZm9yIHNldHRpbmcgdXJsIG9mIGEgc3VibW9kdWxlIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWNvbnN0IGNoYXIgKmNvbnN0IHVzYWdlW10gPSB7CisJCU5fKCJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc2V0LXVybCBbLS1xdWlldF0gPHBhdGg+IDxuZXd1cmw+IiksCisJCU5VTEwKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCB1c2FnZSwgMCk7CisKKwlpZiAoYXJnYyAhPSAyIHx8ICEocGF0aCA9IGFyZ3ZbMF0pIHx8ICEobmV3dXJsID0gYXJndlsxXSkpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZSwgb3B0aW9ucyk7CisKKwljb25maWdfbmFtZSA9IHhzdHJmbXQoInN1Ym1vZHVsZS4lcy51cmwiLCBwYXRoKTsKKworCWNvbmZpZ19zZXRfaW5fZ2l0bW9kdWxlc19maWxlX2dlbnRseShjb25maWdfbmFtZSwgbmV3dXJsKTsKKwlzeW5jX3N1Ym1vZHVsZShwYXRoLCBwcmVmaXgsIHF1aWV0ID8gT1BUX1FVSUVUIDogMCk7CisKKwlmcmVlKGNvbmZpZ19uYW1lKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFNVUFBPUlRfU1VQRVJfUFJFRklYICgxPDwwKQorCitzdHJ1Y3QgY21kX3N0cnVjdCB7CisJY29uc3QgY2hhciAqY21kOworCWludCAoKmZuKShpbnQsIGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKik7CisJdW5zaWduZWQgb3B0aW9uOworfTsKKworc3RhdGljIHN0cnVjdCBjbWRfc3RydWN0IGNvbW1hbmRzW10gPSB7CisJeyJsaXN0IiwgbW9kdWxlX2xpc3QsIDB9LAorCXsibmFtZSIsIG1vZHVsZV9uYW1lLCAwfSwKKwl7ImNsb25lIiwgbW9kdWxlX2Nsb25lLCAwfSwKKwl7InVwZGF0ZS1tb2R1bGUtbW9kZSIsIG1vZHVsZV91cGRhdGVfbW9kdWxlX21vZGUsIDB9LAorCXsidXBkYXRlLWNsb25lIiwgdXBkYXRlX2Nsb25lLCAwfSwKKwl7ImVuc3VyZS1jb3JlLXdvcmt0cmVlIiwgZW5zdXJlX2NvcmVfd29ya3RyZWUsIDB9LAorCXsicmVsYXRpdmUtcGF0aCIsIHJlc29sdmVfcmVsYXRpdmVfcGF0aCwgMH0sCisJeyJyZXNvbHZlLXJlbGF0aXZlLXVybCIsIHJlc29sdmVfcmVsYXRpdmVfdXJsLCAwfSwKKwl7InJlc29sdmUtcmVsYXRpdmUtdXJsLXRlc3QiLCByZXNvbHZlX3JlbGF0aXZlX3VybF90ZXN0LCAwfSwKKwl7ImZvcmVhY2giLCBtb2R1bGVfZm9yZWFjaCwgU1VQUE9SVF9TVVBFUl9QUkVGSVh9LAorCXsiaW5pdCIsIG1vZHVsZV9pbml0LCBTVVBQT1JUX1NVUEVSX1BSRUZJWH0sCisJeyJzdGF0dXMiLCBtb2R1bGVfc3RhdHVzLCBTVVBQT1JUX1NVUEVSX1BSRUZJWH0sCisJeyJwcmludC1kZWZhdWx0LXJlbW90ZSIsIHByaW50X2RlZmF1bHRfcmVtb3RlLCAwfSwKKwl7InN5bmMiLCBtb2R1bGVfc3luYywgU1VQUE9SVF9TVVBFUl9QUkVGSVh9LAorCXsiZGVpbml0IiwgbW9kdWxlX2RlaW5pdCwgMH0sCisJeyJyZW1vdGUtYnJhbmNoIiwgcmVzb2x2ZV9yZW1vdGVfc3VibW9kdWxlX2JyYW5jaCwgMH0sCisJeyJwdXNoLWNoZWNrIiwgcHVzaF9jaGVjaywgMH0sCisJeyJhYnNvcmItZ2l0LWRpcnMiLCBhYnNvcmJfZ2l0X2RpcnMsIFNVUFBPUlRfU1VQRVJfUFJFRklYfSwKKwl7ImlzLWFjdGl2ZSIsIGlzX2FjdGl2ZSwgMH0sCisJeyJjaGVjay1uYW1lIiwgY2hlY2tfbmFtZSwgMH0sCisJeyJjb25maWciLCBtb2R1bGVfY29uZmlnLCAwfSwKKwl7InNldC11cmwiLCBtb2R1bGVfc2V0X3VybCwgMH0sCit9OworCitpbnQgY21kX3N1Ym1vZHVsZV9faGVscGVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCWlmIChhcmdjIDwgMiB8fCAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZSgiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIDxjb21tYW5kPiIpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbWFuZHMpOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXJndlsxXSwgY29tbWFuZHNbaV0uY21kKSkgeworCQkJaWYgKGdldF9zdXBlcl9wcmVmaXgoKSAmJgorCQkJICAgICEoY29tbWFuZHNbaV0ub3B0aW9uICYgU1VQUE9SVF9TVVBFUl9QUkVGSVgpKQorCQkJCWRpZShfKCIlcyBkb2Vzbid0IHN1cHBvcnQgLS1zdXBlci1wcmVmaXgiKSwKKwkJCQkgICAgY29tbWFuZHNbaV0uY21kKTsKKwkJCXJldHVybiBjb21tYW5kc1tpXS5mbihhcmdjIC0gMSwgYXJndiArIDEsIHByZWZpeCk7CisJCX0KKwl9CisKKwlkaWUoXygiJyVzJyBpcyBub3QgYSB2YWxpZCBzdWJtb2R1bGUtLWhlbHBlciAiCisJICAgICAgInN1YmNvbW1hbmQiKSwgYXJndlsxXSk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3N5bWJvbGljLXJlZi5jIGIvYnVpbHRpbi9zeW1ib2xpYy1yZWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDIzN2YwCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9zeW1ib2xpYy1yZWYuYwpAQCAtMCwwICsxLDc4IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfc3ltYm9saWNfcmVmX3VzYWdlW10gPSB7CisJTl8oImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iKSwKKwlOXygiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgY2hlY2tfc3ltcmVmKGNvbnN0IGNoYXIgKkhFQUQsIGludCBxdWlldCwgaW50IHNob3J0ZW4sIGludCBwcmludCkKK3sKKwlpbnQgZmxhZzsKKwljb25zdCBjaGFyICpyZWZuYW1lID0gcmVzb2x2ZV9yZWZfdW5zYWZlKEhFQUQsIDAsIE5VTEwsICZmbGFnKTsKKworCWlmICghcmVmbmFtZSkKKwkJZGllKCJObyBzdWNoIHJlZjogJXMiLCBIRUFEKTsKKwllbHNlIGlmICghKGZsYWcgJiBSRUZfSVNTWU1SRUYpKSB7CisJCWlmICghcXVpZXQpCisJCQlkaWUoInJlZiAlcyBpcyBub3QgYSBzeW1ib2xpYyByZWYiLCBIRUFEKTsKKwkJZWxzZQorCQkJcmV0dXJuIDE7CisJfQorCWlmIChwcmludCkgeworCQlpZiAoc2hvcnRlbikKKwkJCXJlZm5hbWUgPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihyZWZuYW1lLCAwKTsKKwkJcHV0cyhyZWZuYW1lKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfc3ltYm9saWNfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBxdWlldCA9IDAsIGRlbGV0ZSA9IDAsIHNob3J0ZW4gPSAwLCByZXQgPSAwOworCWNvbnN0IGNoYXIgKm1zZyA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LAorCQkJTl8oInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiKSksCisJCU9QVF9CT09MKCdkJywgImRlbGV0ZSIsICZkZWxldGUsIE5fKCJkZWxldGUgc3ltYm9saWMgcmVmIikpLAorCQlPUFRfQk9PTCgwLCAic2hvcnQiLCAmc2hvcnRlbiwgTl8oInNob3J0ZW4gcmVmIG91dHB1dCIpKSwKKwkJT1BUX1NUUklORygnbScsIE5VTEwsICZtc2csIE5fKCJyZWFzb24iKSwgTl8oInJlYXNvbiBvZiB0aGUgdXBkYXRlIikpLAorCQlPUFRfRU5EKCksCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9zeW1ib2xpY19yZWZfdXNhZ2UsIDApOworCWlmIChtc2cgJiYgISptc2cpCisJCWRpZSgiUmVmdXNpbmcgdG8gcGVyZm9ybSB1cGRhdGUgd2l0aCBlbXB0eSBtZXNzYWdlIik7CisKKwlpZiAoZGVsZXRlKSB7CisJCWlmIChhcmdjICE9IDEpCisJCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X3N5bWJvbGljX3JlZl91c2FnZSwgb3B0aW9ucyk7CisJCXJldCA9IGNoZWNrX3N5bXJlZihhcmd2WzBdLCAxLCAwLCAwKTsKKwkJaWYgKHJldCkKKwkJCWRpZSgiQ2Fubm90IGRlbGV0ZSAlcywgbm90IGEgc3ltYm9saWMgcmVmIiwgYXJndlswXSk7CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICJIRUFEIikpCisJCQlkaWUoImRlbGV0aW5nICclcycgaXMgbm90IGFsbG93ZWQiLCBhcmd2WzBdKTsKKwkJcmV0dXJuIGRlbGV0ZV9yZWYoTlVMTCwgYXJndlswXSwgTlVMTCwgUkVGX05PX0RFUkVGKTsKKwl9CisKKwlzd2l0Y2ggKGFyZ2MpIHsKKwljYXNlIDE6CisJCXJldCA9IGNoZWNrX3N5bXJlZihhcmd2WzBdLCBxdWlldCwgc2hvcnRlbiwgMSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaWYgKCFzdHJjbXAoYXJndlswXSwgIkhFQUQiKSAmJgorCQkgICAgIXN0YXJ0c193aXRoKGFyZ3ZbMV0sICJyZWZzLyIpKQorCQkJZGllKCJSZWZ1c2luZyB0byBwb2ludCBIRUFEIG91dHNpZGUgb2YgcmVmcy8iKTsKKwkJcmV0ID0gISFjcmVhdGVfc3ltcmVmKGFyZ3ZbMF0sIGFyZ3ZbMV0sIG1zZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfc3ltYm9saWNfcmVmX3VzYWdlLCBvcHRpb25zKTsKKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdGFnLmMgYi9idWlsdGluL3RhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYmQ4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3RhZy5jCkBAIC0wLDAgKzEsNTk0IEBACisvKgorICogQnVpbHRpbiAiZ2l0IHRhZyIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgS3Jpc3RpYW4gSMO4Z3NiZXJnIDxrcmhAcmVkaGF0LmNvbT4sCisgKiAgICAgICAgICAgICAgICAgICAgQ2FybG9zIFJpY2EgPGphc2FtcGxlckBnbWFpbC5jb20+CisgKiBCYXNlZCBvbiBnaXQtdGFnLnNoIGFuZCBta3RhZy5jIGJ5IExpbnVzIFRvcnZhbGRzLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgIm9pZC1hcnJheS5oIgorI2luY2x1ZGUgImNvbHVtbi5oIgorI2luY2x1ZGUgInJlZi1maWx0ZXIuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfdGFnX3VzYWdlW10gPSB7CisJTl8oImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dXG4iCisJCSJcdFx0PHRhZ25hbWU+IFs8aGVhZD5dIiksCisJTl8oImdpdCB0YWcgLWQgPHRhZ25hbWU+Li4uIiksCisJTl8oImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLW5vLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1wb2ludHMtYXQgPG9iamVjdD5dXG4iCisJCSJcdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXSIpLAorCU5fKCJnaXQgdGFnIC12IFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZ25hbWU+Li4uIiksCisJTlVMTAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBjb2xvcHRzOworc3RhdGljIGludCBmb3JjZV9zaWduX2Fubm90YXRlOworc3RhdGljIGludCBjb25maWdfc2lnbl90YWcgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KKworc3RhdGljIGludCBsaXN0X3RhZ3Moc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IHJlZl9zb3J0aW5nICpzb3J0aW5nLAorCQkgICAgIHN0cnVjdCByZWZfZm9ybWF0ICpmb3JtYXQpCit7CisJc3RydWN0IHJlZl9hcnJheSBhcnJheTsKKwljaGFyICp0b19mcmVlID0gTlVMTDsKKwlpbnQgaTsKKworCW1lbXNldCgmYXJyYXksIDAsIHNpemVvZihhcnJheSkpOworCisJaWYgKGZpbHRlci0+bGluZXMgPT0gLTEpCisJCWZpbHRlci0+bGluZXMgPSAwOworCisJaWYgKCFmb3JtYXQtPmZvcm1hdCkgeworCQlpZiAoZmlsdGVyLT5saW5lcykgeworCQkJdG9fZnJlZSA9IHhzdHJmbXQoIiVzICUlKGNvbnRlbnRzOmxpbmVzPSVkKSIsCisJCQkJCSAgIiUoYWxpZ246MTUpJShyZWZuYW1lOmxzdHJpcD0yKSUoZW5kKSIsCisJCQkJCSAgZmlsdGVyLT5saW5lcyk7CisJCQlmb3JtYXQtPmZvcm1hdCA9IHRvX2ZyZWU7CisJCX0gZWxzZQorCQkJZm9ybWF0LT5mb3JtYXQgPSAiJShyZWZuYW1lOmxzdHJpcD0yKSI7CisJfQorCisJaWYgKHZlcmlmeV9yZWZfZm9ybWF0KGZvcm1hdCkpCisJCWRpZShfKCJ1bmFibGUgdG8gcGFyc2UgZm9ybWF0IHN0cmluZyIpKTsKKwlmaWx0ZXItPndpdGhfY29tbWl0X3RhZ19hbGdvID0gMTsKKwlmaWx0ZXJfcmVmcygmYXJyYXksIGZpbHRlciwgRklMVEVSX1JFRlNfVEFHUyk7CisJcmVmX2FycmF5X3NvcnQoc29ydGluZywgJmFycmF5KTsKKworCWZvciAoaSA9IDA7IGkgPCBhcnJheS5ucjsgaSsrKQorCQlzaG93X3JlZl9hcnJheV9pdGVtKGFycmF5Lml0ZW1zW2ldLCBmb3JtYXQpOworCXJlZl9hcnJheV9jbGVhcigmYXJyYXkpOworCWZyZWUodG9fZnJlZSk7CisKKwlyZXR1cm4gMDsKK30KKwordHlwZWRlZiBpbnQgKCplYWNoX3RhZ19uYW1lX2ZuKShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpyZWYsCisJCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCB2b2lkICpjYl9kYXRhKTsKKworc3RhdGljIGludCBmb3JfZWFjaF90YWdfbmFtZShjb25zdCBjaGFyICoqYXJndiwgZWFjaF90YWdfbmFtZV9mbiBmbiwKKwkJCSAgICAgY29uc3Qgdm9pZCAqY2JfZGF0YSkKK3sKKwljb25zdCBjaGFyICoqcDsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZiA9IFNUUkJVRl9JTklUOworCWludCBoYWRfZXJyb3IgPSAwOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJZm9yIChwID0gYXJndjsgKnA7IHArKykgeworCQlzdHJidWZfcmVzZXQoJnJlZik7CisJCXN0cmJ1Zl9hZGRmKCZyZWYsICJyZWZzL3RhZ3MvJXMiLCAqcCk7CisJCWlmIChyZWFkX3JlZihyZWYuYnVmLCAmb2lkKSkgeworCQkJZXJyb3IoXygidGFnICclcycgbm90IGZvdW5kLiIpLCAqcCk7CisJCQloYWRfZXJyb3IgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGZuKCpwLCByZWYuYnVmLCAmb2lkLCBjYl9kYXRhKSkKKwkJCWhhZF9lcnJvciA9IDE7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZyZWYpOworCXJldHVybiBoYWRfZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgZGVsZXRlX3RhZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpyZWYsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3Qgdm9pZCAqY2JfZGF0YSkKK3sKKwlpZiAoZGVsZXRlX3JlZihOVUxMLCByZWYsIG9pZCwgMCkpCisJCXJldHVybiAxOworCXByaW50ZihfKCJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iKSwgbmFtZSwKKwkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KG9pZCwgREVGQVVMVF9BQkJSRVYpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2ZXJpZnlfdGFnKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJlZiwKKwkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCB2b2lkICpjYl9kYXRhKQoreworCWludCBmbGFnczsKKwljb25zdCBzdHJ1Y3QgcmVmX2Zvcm1hdCAqZm9ybWF0ID0gY2JfZGF0YTsKKwlmbGFncyA9IEdQR19WRVJJRllfVkVSQk9TRTsKKworCWlmIChmb3JtYXQtPmZvcm1hdCkKKwkJZmxhZ3MgPSBHUEdfVkVSSUZZX09NSVRfU1RBVFVTOworCisJaWYgKGdwZ192ZXJpZnlfdGFnKG9pZCwgbmFtZSwgZmxhZ3MpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZm9ybWF0LT5mb3JtYXQpCisJCXByZXR0eV9wcmludF9yZWYobmFtZSwgb2lkLCBmb3JtYXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG9fc2lnbihzdHJ1Y3Qgc3RyYnVmICpidWZmZXIpCit7CisJcmV0dXJuIHNpZ25fYnVmZmVyKGJ1ZmZlciwgYnVmZmVyLCBnZXRfc2lnbmluZ19rZXkoKSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHRhZ190ZW1wbGF0ZVtdID0KKwlOXygiXG5Xcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiAgJXNcbiIKKwkiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZC5cbiIpOworCitzdGF0aWMgY29uc3QgY2hhciB0YWdfdGVtcGxhdGVfbm9jbGVhbnVwW10gPQorCU5fKCJcbldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuICAlc1xuIgorCSJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIgorCSIgeW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iKTsKKworc3RhdGljIGludCBnaXRfdGFnX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCByZWZfc29ydGluZyAqKnNvcnRpbmdfdGFpbCA9IChzdHJ1Y3QgcmVmX3NvcnRpbmcgKiopY2I7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJ0YWcuZ3Bnc2lnbiIpKSB7CisJCWNvbmZpZ19zaWduX3RhZyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAidGFnLnNvcnQiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXBhcnNlX3JlZl9zb3J0aW5nKHNvcnRpbmdfdGFpbCwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzdGF0dXMgPSBnaXRfZ3BnX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlpZiAoIXN0cmNtcCh2YXIsICJ0YWcuZm9yY2VzaWduYW5ub3RhdGVkIikpIHsKKwkJZm9yY2Vfc2lnbl9hbm5vdGF0ZSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0YXJ0c193aXRoKHZhciwgImNvbHVtbi4iKSkKKwkJcmV0dXJuIGdpdF9jb2x1bW5fY29uZmlnKHZhciwgdmFsdWUsICJ0YWciLCAmY29sb3B0cyk7CisJcmV0dXJuIGdpdF9jb2xvcl9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3RhZ19ib2R5KGludCBmZCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciAqYnVmLCAqc3A7CisKKwlidWYgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuOworCS8qIHNraXAgaGVhZGVyICovCisJc3AgPSBzdHJzdHIoYnVmLCAiXG5cbiIpOworCisJaWYgKCFzcCB8fCAhc2l6ZSB8fCB0eXBlICE9IE9CSl9UQUcpIHsKKwkJZnJlZShidWYpOworCQlyZXR1cm47CisJfQorCXNwICs9IDI7IC8qIHNraXAgdGhlIDIgTEZzICovCisJd3JpdGVfb3JfZGllKGZkLCBzcCwgcGFyc2Vfc2lnbmF0dXJlKHNwLCBidWYgKyBzaXplIC0gc3ApKTsKKworCWZyZWUoYnVmKTsKK30KKworc3RhdGljIGludCBidWlsZF90YWdfb2JqZWN0KHN0cnVjdCBzdHJidWYgKmJ1ZiwgaW50IHNpZ24sIHN0cnVjdCBvYmplY3RfaWQgKnJlc3VsdCkKK3sKKwlpZiAoc2lnbiAmJiBkb19zaWduKGJ1ZikgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIpKTsKKwlpZiAod3JpdGVfb2JqZWN0X2ZpbGUoYnVmLT5idWYsIGJ1Zi0+bGVuLCB0YWdfdHlwZSwgcmVzdWx0KSA8IDApCisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjcmVhdGVfdGFnX29wdGlvbnMgeworCXVuc2lnbmVkIGludCBtZXNzYWdlX2dpdmVuOjE7CisJdW5zaWduZWQgaW50IHVzZV9lZGl0b3I6MTsKKwl1bnNpZ25lZCBpbnQgc2lnbjsKKwllbnVtIHsKKwkJQ0xFQU5VUF9OT05FLAorCQlDTEVBTlVQX1NQQUNFLAorCQlDTEVBTlVQX0FMTAorCX0gY2xlYW51cF9tb2RlOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgbWVzc2FnZV9hZHZpY2VfbmVzdGVkX3RhZ1tdID0KKwlOXygiWW91IGhhdmUgY3JlYXRlZCBhIG5lc3RlZCB0YWcuIFRoZSBvYmplY3QgcmVmZXJyZWQgdG8gYnkgeW91ciBuZXcgdGFnIGlzXG4iCisJICAgImFscmVhZHkgYSB0YWcuIElmIHlvdSBtZWFudCB0byB0YWcgdGhlIG9iamVjdCB0aGF0IGl0IHBvaW50cyB0bywgdXNlOlxuIgorCSAgICJcbiIKKwkgICAiXHRnaXQgdGFnIC1mICVzICVzXnt9Iik7CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV90YWcoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2JqZWN0LCBjb25zdCBjaGFyICpvYmplY3RfcmVmLAorCQkgICAgICAgY29uc3QgY2hhciAqdGFnLAorCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLCBzdHJ1Y3QgY3JlYXRlX3RhZ19vcHRpb25zICpvcHQsCisJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpwcmV2LCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHQpCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXN0cnVjdCBzdHJidWYgaGVhZGVyID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcGF0aCA9IE5VTEw7CisKKwl0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBvYmplY3QsIE5VTEwpOworCWlmICh0eXBlIDw9IE9CSl9OT05FKQorCQlkaWUoXygiYmFkIG9iamVjdCB0eXBlLiIpKTsKKworCWlmICh0eXBlID09IE9CSl9UQUcpCisJCWFkdmlzZV9pZl9lbmFibGVkKEFEVklDRV9ORVNURURfVEFHLCBfKG1lc3NhZ2VfYWR2aWNlX25lc3RlZF90YWcpLAorCQkJCSAgdGFnLCBvYmplY3RfcmVmKTsKKworCXN0cmJ1Zl9hZGRmKCZoZWFkZXIsCisJCSAgICAib2JqZWN0ICVzXG4iCisJCSAgICAidHlwZSAlc1xuIgorCQkgICAgInRhZyAlc1xuIgorCQkgICAgInRhZ2dlciAlc1xuXG4iLAorCQkgICAgb2lkX3RvX2hleChvYmplY3QpLAorCQkgICAgdHlwZV9uYW1lKHR5cGUpLAorCQkgICAgdGFnLAorCQkgICAgZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX1NUUklDVCkpOworCisJaWYgKCFvcHQtPm1lc3NhZ2VfZ2l2ZW4gfHwgb3B0LT51c2VfZWRpdG9yKSB7CisJCWludCBmZDsKKworCQkvKiB3cml0ZSB0aGUgdGVtcGxhdGUgbWVzc2FnZSBiZWZvcmUgZWRpdGluZzogKi8KKwkJcGF0aCA9IGdpdF9wYXRoZHVwKCJUQUdfRURJVE1TRyIpOworCQlmZCA9IG9wZW4ocGF0aCwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSwgMDYwMCk7CisJCWlmIChmZCA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciKSwgcGF0aCk7CisKKwkJaWYgKG9wdC0+bWVzc2FnZV9naXZlbikgeworCQkJd3JpdGVfb3JfZGllKGZkLCBidWYtPmJ1ZiwgYnVmLT5sZW4pOworCQkJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJCX0gZWxzZSBpZiAoIWlzX251bGxfb2lkKHByZXYpKSB7CisJCQl3cml0ZV90YWdfYm9keShmZCwgcHJldik7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCQkJaWYgKG9wdC0+Y2xlYW51cF9tb2RlID09IENMRUFOVVBfQUxMKQorCQkJCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZigmYnVmLCBfKHRhZ190ZW1wbGF0ZSksIHRhZywgY29tbWVudF9saW5lX2NoYXIpOworCQkJZWxzZQorCQkJCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZigmYnVmLCBfKHRhZ190ZW1wbGF0ZV9ub2NsZWFudXApLCB0YWcsIGNvbW1lbnRfbGluZV9jaGFyKTsKKwkJCXdyaXRlX29yX2RpZShmZCwgYnVmLmJ1ZiwgYnVmLmxlbik7CisJCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJfQorCQljbG9zZShmZCk7CisKKwkJaWYgKGxhdW5jaF9lZGl0b3IocGF0aCwgYnVmLCBOVUxMKSkgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQlfKCJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iKSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCisJaWYgKG9wdC0+Y2xlYW51cF9tb2RlICE9IENMRUFOVVBfTk9ORSkKKwkJc3RyYnVmX3N0cmlwc3BhY2UoYnVmLCBvcHQtPmNsZWFudXBfbW9kZSA9PSBDTEVBTlVQX0FMTCk7CisKKwlpZiAoIW9wdC0+bWVzc2FnZV9naXZlbiAmJiAhYnVmLT5sZW4pCisJCWRpZShfKCJubyB0YWcgbWVzc2FnZT8iKSk7CisKKwlzdHJidWZfaW5zZXJ0KGJ1ZiwgMCwgaGVhZGVyLmJ1ZiwgaGVhZGVyLmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJmhlYWRlcik7CisKKwlpZiAoYnVpbGRfdGFnX29iamVjdChidWYsIG9wdC0+c2lnbiwgcmVzdWx0KSA8IDApIHsKKwkJaWYgKHBhdGgpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIpLAorCQkJCXBhdGgpOworCQlleGl0KDEyOCk7CisJfQorCWlmIChwYXRoKSB7CisJCXVubGlua19vcl93YXJuKHBhdGgpOworCQlmcmVlKHBhdGgpOworCX0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlX3JlZmxvZ19tc2coY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJc3RydWN0IGNvbW1pdCAqYzsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBzdWJqZWN0X2xlbiA9IDA7CisJY29uc3QgY2hhciAqc3ViamVjdF9zdGFydDsKKworCWNoYXIgKnJsYSA9IGdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKTsKKwlpZiAocmxhKSB7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHJsYSk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZHN0cihzYiwgInRhZzogdGFnZ2luZyAiKTsKKwkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KHNiLCBvaWQsIERFRkFVTFRfQUJCUkVWKTsKKwl9CisKKwlzdHJidWZfYWRkc3RyKHNiLCAiICgiKTsKKwl0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBvaWQsIE5VTEwpOworCXN3aXRjaCAodHlwZSkgeworCWRlZmF1bHQ6CisJCXN0cmJ1Zl9hZGRzdHIoc2IsICJvYmplY3Qgb2YgdW5rbm93biB0eXBlIik7CisJCWJyZWFrOworCWNhc2UgT0JKX0NPTU1JVDoKKwkJaWYgKChidWYgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnR5cGUsICZzaXplKSkgIT0gTlVMTCkgeworCQkJc3ViamVjdF9sZW4gPSBmaW5kX2NvbW1pdF9zdWJqZWN0KGJ1ZiwgJnN1YmplY3Rfc3RhcnQpOworCQkJc3RyYnVmX2luc2VydChzYiwgc2ItPmxlbiwgc3ViamVjdF9zdGFydCwgc3ViamVjdF9sZW4pOworCQl9IGVsc2UgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgImNvbW1pdCBvYmplY3QiKTsKKwkJfQorCQlmcmVlKGJ1Zik7CisKKwkJaWYgKChjID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksIG9pZCkpICE9IE5VTEwpCisJCQlzdHJidWZfYWRkZihzYiwgIiwgJXMiLCBzaG93X2RhdGUoYy0+ZGF0ZSwgMCwgREFURV9NT0RFKFNIT1JUKSkpOworCQlicmVhazsKKwljYXNlIE9CSl9UUkVFOgorCQlzdHJidWZfYWRkc3RyKHNiLCAidHJlZSBvYmplY3QiKTsKKwkJYnJlYWs7CisJY2FzZSBPQkpfQkxPQjoKKwkJc3RyYnVmX2FkZHN0cihzYiwgImJsb2Igb2JqZWN0Iik7CisJCWJyZWFrOworCWNhc2UgT0JKX1RBRzoKKwkJc3RyYnVmX2FkZHN0cihzYiwgIm90aGVyIHRhZyBvYmplY3QiKTsKKwkJYnJlYWs7CisJfQorCXN0cmJ1Zl9hZGRjaChzYiwgJyknKTsKK30KKworc3RydWN0IG1zZ19hcmcgeworCWludCBnaXZlbjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKK307CisKK3N0YXRpYyBpbnQgcGFyc2VfbXNnX2FyZyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBtc2dfYXJnICptc2cgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJaWYgKCFhcmcpCisJCXJldHVybiAtMTsKKwlpZiAobXNnLT5idWYubGVuKQorCQlzdHJidWZfYWRkc3RyKCYobXNnLT5idWYpLCAiXG5cbiIpOworCXN0cmJ1Zl9hZGRzdHIoJihtc2ctPmJ1ZiksIGFyZyk7CisJbXNnLT5naXZlbiA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RyYnVmX2NoZWNrX3RhZ19yZWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKG5hbWVbMF0gPT0gJy0nKQorCQlyZXR1cm4gLTE7CisKKwlzdHJidWZfcmVzZXQoc2IpOworCXN0cmJ1Zl9hZGRmKHNiLCAicmVmcy90YWdzLyVzIiwgbmFtZSk7CisKKwlyZXR1cm4gY2hlY2tfcmVmbmFtZV9mb3JtYXQoc2ItPmJ1ZiwgMCk7Cit9CisKK2ludCBjbWRfdGFnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiByZWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZmxvZ19tc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9iamVjdCwgcHJldjsKKwljb25zdCBjaGFyICpvYmplY3RfcmVmLCAqdGFnOworCXN0cnVjdCBjcmVhdGVfdGFnX29wdGlvbnMgb3B0OworCWNoYXIgKmNsZWFudXBfYXJnID0gTlVMTDsKKwlpbnQgY3JlYXRlX3JlZmxvZyA9IDA7CisJaW50IGFubm90YXRlID0gMCwgZm9yY2UgPSAwOworCWludCBjbWRtb2RlID0gMCwgY3JlYXRlX3RhZ19vYmplY3QgPSAwOworCWNvbnN0IGNoYXIgKm1zZ2ZpbGUgPSBOVUxMLCAqa2V5aWQgPSBOVUxMOworCXN0cnVjdCBtc2dfYXJnIG1zZyA9IHsgMCwgU1RSQlVGX0lOSVQgfTsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCByZWZfZmlsdGVyIGZpbHRlcjsKKwlzdGF0aWMgc3RydWN0IHJlZl9zb3J0aW5nICpzb3J0aW5nID0gTlVMTCwgKipzb3J0aW5nX3RhaWwgPSAmc29ydGluZzsKKwlzdHJ1Y3QgcmVmX2Zvcm1hdCBmb3JtYXQgPSBSRUZfRk9STUFUX0lOSVQ7CisJaW50IGljYXNlID0gMDsKKwlpbnQgZWRpdF9mbGFnID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0NNRE1PREUoJ2wnLCAibGlzdCIsICZjbWRtb2RlLCBOXygibGlzdCB0YWcgbmFtZXMiKSwgJ2wnKSwKKwkJeyBPUFRJT05fSU5URUdFUiwgJ24nLCBOVUxMLCAmZmlsdGVyLmxpbmVzLCBOXygibiIpLAorCQkJCU5fKCJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIpLAorCQkJCVBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIDEgfSwKKwkJT1BUX0NNRE1PREUoJ2QnLCAiZGVsZXRlIiwgJmNtZG1vZGUsIE5fKCJkZWxldGUgdGFncyIpLCAnZCcpLAorCQlPUFRfQ01ETU9ERSgndicsICJ2ZXJpZnkiLCAmY21kbW9kZSwgTl8oInZlcmlmeSB0YWdzIiksICd2JyksCisKKwkJT1BUX0dST1VQKE5fKCJUYWcgY3JlYXRpb24gb3B0aW9ucyIpKSwKKwkJT1BUX0JPT0woJ2EnLCAiYW5ub3RhdGUiLCAmYW5ub3RhdGUsCisJCQkJCU5fKCJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiKSksCisJCU9QVF9DQUxMQkFDS19GKCdtJywgIm1lc3NhZ2UiLCAmbXNnLCBOXygibWVzc2FnZSIpLAorCQkJICAgICAgIE5fKCJ0YWcgbWVzc2FnZSIpLCBQQVJTRV9PUFRfTk9ORUcsIHBhcnNlX21zZ19hcmcpLAorCQlPUFRfRklMRU5BTUUoJ0YnLCAiZmlsZSIsICZtc2dmaWxlLCBOXygicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIpKSwKKwkJT1BUX0JPT0woJ2UnLCAiZWRpdCIsICZlZGl0X2ZsYWcsIE5fKCJmb3JjZSBlZGl0IG9mIHRhZyBtZXNzYWdlIikpLAorCQlPUFRfQk9PTCgncycsICJzaWduIiwgJm9wdC5zaWduLCBOXygiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIpKSwKKwkJT1BUX0NMRUFOVVAoJmNsZWFudXBfYXJnKSwKKwkJT1BUX1NUUklORygndScsICJsb2NhbC11c2VyIiwgJmtleWlkLCBOXygia2V5LWlkIiksCisJCQkJCU5fKCJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIikpLAorCQlPUFRfX0ZPUkNFKCZmb3JjZSwgTl8oInJlcGxhY2UgdGhlIHRhZyBpZiBleGlzdHMiKSwgMCksCisJCU9QVF9CT09MKDAsICJjcmVhdGUtcmVmbG9nIiwgJmNyZWF0ZV9yZWZsb2csIE5fKCJjcmVhdGUgYSByZWZsb2ciKSksCisKKwkJT1BUX0dST1VQKE5fKCJUYWcgbGlzdGluZyBvcHRpb25zIikpLAorCQlPUFRfQ09MVU1OKDAsICJjb2x1bW4iLCAmY29sb3B0cywgTl8oInNob3cgdGFnIGxpc3QgaW4gY29sdW1ucyIpKSwKKwkJT1BUX0NPTlRBSU5TKCZmaWx0ZXIud2l0aF9jb21taXQsIE5fKCJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiKSksCisJCU9QVF9OT19DT05UQUlOUygmZmlsdGVyLm5vX2NvbW1pdCwgTl8oInByaW50IG9ubHkgdGFncyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX1dJVEgoJmZpbHRlci53aXRoX2NvbW1pdCwgTl8oInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX1dJVEhPVVQoJmZpbHRlci5ub19jb21taXQsIE5fKCJwcmludCBvbmx5IHRhZ3MgdGhhdCBkb24ndCBjb250YWluIHRoZSBjb21taXQiKSksCisJCU9QVF9NRVJHRUQoJmZpbHRlciwgTl8oInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBtZXJnZWQiKSksCisJCU9QVF9OT19NRVJHRUQoJmZpbHRlciwgTl8oInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIikpLAorCQlPUFRfUkVGX1NPUlQoc29ydGluZ190YWlsKSwKKwkJeworCQkJT1BUSU9OX0NBTExCQUNLLCAwLCAicG9pbnRzLWF0IiwgJmZpbHRlci5wb2ludHNfYXQsIE5fKCJvYmplY3QiKSwKKwkJCU5fKCJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIpLCBQQVJTRV9PUFRfTEFTVEFSR19ERUZBVUxULAorCQkJcGFyc2Vfb3B0X29iamVjdF9uYW1lLCAoaW50cHRyX3QpICJIRUFEIgorCQl9LAorCQlPUFRfU1RSSU5HKCAgMCAsICJmb3JtYXQiLCAmZm9ybWF0LmZvcm1hdCwgTl8oImZvcm1hdCIpLAorCQkJICAgTl8oImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiKSksCisJCU9QVF9fQ09MT1IoJmZvcm1hdC51c2VfY29sb3IsIE5fKCJyZXNwZWN0IGZvcm1hdCBjb2xvcnMiKSksCisJCU9QVF9CT09MKCdpJywgImlnbm9yZS1jYXNlIiwgJmljYXNlLCBOXygic29ydGluZyBhbmQgZmlsdGVyaW5nIGFyZSBjYXNlIGluc2Vuc2l0aXZlIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJc2V0dXBfcmVmX2ZpbHRlcl9wb3JjZWxhaW5fbXNnKCk7CisKKwlnaXRfY29uZmlnKGdpdF90YWdfY29uZmlnLCBzb3J0aW5nX3RhaWwpOworCisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwltZW1zZXQoJmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpOworCWZpbHRlci5saW5lcyA9IC0xOworCW9wdC5zaWduID0gLTE7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF90YWdfdXNhZ2UsIDApOworCisJaWYgKCFjbWRtb2RlKSB7CisJCWlmIChhcmdjID09IDApCisJCQljbWRtb2RlID0gJ2wnOworCQllbHNlIGlmIChmaWx0ZXIud2l0aF9jb21taXQgfHwgZmlsdGVyLm5vX2NvbW1pdCB8fAorCQkJIGZpbHRlci5wb2ludHNfYXQubnIgfHwgZmlsdGVyLm1lcmdlX2NvbW1pdCB8fAorCQkJIGZpbHRlci5saW5lcyAhPSAtMSkKKwkJCWNtZG1vZGUgPSAnbCc7CisJfQorCisJaWYgKGNtZG1vZGUgPT0gJ2wnKQorCQlzZXR1cF9hdXRvX3BhZ2VyKCJ0YWciLCAxKTsKKworCWlmIChvcHQuc2lnbiA9PSAtMSkKKwkJb3B0LnNpZ24gPSBjbWRtb2RlID8gMCA6IGNvbmZpZ19zaWduX3RhZyA+IDA7CisKKwlpZiAoa2V5aWQpIHsKKwkJb3B0LnNpZ24gPSAxOworCQlzZXRfc2lnbmluZ19rZXkoa2V5aWQpOworCX0KKwljcmVhdGVfdGFnX29iamVjdCA9IChvcHQuc2lnbiB8fCBhbm5vdGF0ZSB8fCBtc2cuZ2l2ZW4gfHwgbXNnZmlsZSk7CisKKwlpZiAoKGNyZWF0ZV90YWdfb2JqZWN0IHx8IGZvcmNlKSAmJiAoY21kbW9kZSAhPSAwKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF90YWdfdXNhZ2UsIG9wdGlvbnMpOworCisJZmluYWxpemVfY29sb3B0cygmY29sb3B0cywgLTEpOworCWlmIChjbWRtb2RlID09ICdsJyAmJiBmaWx0ZXIubGluZXMgIT0gLTEpIHsKKwkJaWYgKGV4cGxpY2l0bHlfZW5hYmxlX2NvbHVtbihjb2xvcHRzKSkKKwkJCWRpZShfKCItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIpKTsKKwkJY29sb3B0cyA9IDA7CisJfQorCWlmICghc29ydGluZykKKwkJc29ydGluZyA9IHJlZl9kZWZhdWx0X3NvcnRpbmcoKTsKKwlyZWZfc29ydGluZ19pY2FzZV9hbGwoc29ydGluZywgaWNhc2UpOworCWZpbHRlci5pZ25vcmVfY2FzZSA9IGljYXNlOworCWlmIChjbWRtb2RlID09ICdsJykgeworCQlpbnQgcmV0OworCQlpZiAoY29sdW1uX2FjdGl2ZShjb2xvcHRzKSkgeworCQkJc3RydWN0IGNvbHVtbl9vcHRpb25zIGNvcHRzOworCQkJbWVtc2V0KCZjb3B0cywgMCwgc2l6ZW9mKGNvcHRzKSk7CisJCQljb3B0cy5wYWRkaW5nID0gMjsKKwkJCXJ1bl9jb2x1bW5fZmlsdGVyKGNvbG9wdHMsICZjb3B0cyk7CisJCX0KKwkJZmlsdGVyLm5hbWVfcGF0dGVybnMgPSBhcmd2OworCQlyZXQgPSBsaXN0X3RhZ3MoJmZpbHRlciwgc29ydGluZywgJmZvcm1hdCk7CisJCWlmIChjb2x1bW5fYWN0aXZlKGNvbG9wdHMpKQorCQkJc3RvcF9jb2x1bW5fZmlsdGVyKCk7CisJCXJldHVybiByZXQ7CisJfQorCWlmIChmaWx0ZXIubGluZXMgIT0gLTEpCisJCWRpZShfKCItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIpKTsKKwlpZiAoZmlsdGVyLndpdGhfY29tbWl0KQorCQlkaWUoXygiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIpKTsKKwlpZiAoZmlsdGVyLm5vX2NvbW1pdCkKKwkJZGllKF8oIi0tbm8tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiKSk7CisJaWYgKGZpbHRlci5wb2ludHNfYXQubnIpCisJCWRpZShfKCItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIpKTsKKwlpZiAoZmlsdGVyLm1lcmdlX2NvbW1pdCkKKwkJZGllKF8oIi0tbWVyZ2VkIGFuZCAtLW5vLW1lcmdlZCBvcHRpb25zIGFyZSBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIikpOworCWlmIChjbWRtb2RlID09ICdkJykKKwkJcmV0dXJuIGZvcl9lYWNoX3RhZ19uYW1lKGFyZ3YsIGRlbGV0ZV90YWcsIE5VTEwpOworCWlmIChjbWRtb2RlID09ICd2JykgeworCQlpZiAoZm9ybWF0LmZvcm1hdCAmJiB2ZXJpZnlfcmVmX2Zvcm1hdCgmZm9ybWF0KSkKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfdGFnX3VzYWdlLCBvcHRpb25zKTsKKwkJcmV0dXJuIGZvcl9lYWNoX3RhZ19uYW1lKGFyZ3YsIHZlcmlmeV90YWcsICZmb3JtYXQpOworCX0KKworCWlmIChtc2cuZ2l2ZW4gfHwgbXNnZmlsZSkgeworCQlpZiAobXNnLmdpdmVuICYmIG1zZ2ZpbGUpCisJCQlkaWUoXygib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIikpOworCQlpZiAobXNnLmdpdmVuKQorCQkJc3RyYnVmX2FkZGJ1ZigmYnVmLCAmKG1zZy5idWYpKTsKKwkJZWxzZSB7CisJCQlpZiAoIXN0cmNtcChtc2dmaWxlLCAiLSIpKSB7CisJCQkJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDEwMjQpIDwgMCkKKwkJCQkJZGllX2Vycm5vKF8oImNhbm5vdCByZWFkICclcyciKSwgbXNnZmlsZSk7CisJCQl9IGVsc2UgeworCQkJCWlmIChzdHJidWZfcmVhZF9maWxlKCZidWYsIG1zZ2ZpbGUsIDEwMjQpIDwgMCkKKwkJCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIpLAorCQkJCQkJbXNnZmlsZSk7CisJCQl9CisJCX0KKwl9CisKKwl0YWcgPSBhcmd2WzBdOworCisJb2JqZWN0X3JlZiA9IGFyZ2MgPT0gMiA/IGFyZ3ZbMV0gOiAiSEVBRCI7CisJaWYgKGFyZ2MgPiAyKQorCQlkaWUoXygidG9vIG1hbnkgcGFyYW1zIikpOworCisJaWYgKGdldF9vaWQob2JqZWN0X3JlZiwgJm9iamVjdCkpCisJCWRpZShfKCJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIpLCBvYmplY3RfcmVmKTsKKworCWlmIChzdHJidWZfY2hlY2tfdGFnX3JlZigmcmVmLCB0YWcpKQorCQlkaWUoXygiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iKSwgdGFnKTsKKworCWlmIChyZWFkX3JlZihyZWYuYnVmLCAmcHJldikpCisJCW9pZGNscigmcHJldik7CisJZWxzZSBpZiAoIWZvcmNlKQorCQlkaWUoXygidGFnICclcycgYWxyZWFkeSBleGlzdHMiKSwgdGFnKTsKKworCW9wdC5tZXNzYWdlX2dpdmVuID0gbXNnLmdpdmVuIHx8IG1zZ2ZpbGU7CisJb3B0LnVzZV9lZGl0b3IgPSBlZGl0X2ZsYWc7CisKKwlpZiAoIWNsZWFudXBfYXJnIHx8ICFzdHJjbXAoY2xlYW51cF9hcmcsICJzdHJpcCIpKQorCQlvcHQuY2xlYW51cF9tb2RlID0gQ0xFQU5VUF9BTEw7CisJZWxzZSBpZiAoIXN0cmNtcChjbGVhbnVwX2FyZywgInZlcmJhdGltIikpCisJCW9wdC5jbGVhbnVwX21vZGUgPSBDTEVBTlVQX05PTkU7CisJZWxzZSBpZiAoIXN0cmNtcChjbGVhbnVwX2FyZywgIndoaXRlc3BhY2UiKSkKKwkJb3B0LmNsZWFudXBfbW9kZSA9IENMRUFOVVBfU1BBQ0U7CisJZWxzZQorCQlkaWUoXygiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiKSwgY2xlYW51cF9hcmcpOworCisJY3JlYXRlX3JlZmxvZ19tc2coJm9iamVjdCwgJnJlZmxvZ19tc2cpOworCisJaWYgKGNyZWF0ZV90YWdfb2JqZWN0KSB7CisJCWlmIChmb3JjZV9zaWduX2Fubm90YXRlICYmICFhbm5vdGF0ZSkKKwkJCW9wdC5zaWduID0gMTsKKwkJY3JlYXRlX3RhZygmb2JqZWN0LCBvYmplY3RfcmVmLCB0YWcsICZidWYsICZvcHQsICZwcmV2LCAmb2JqZWN0KTsKKwl9CisKKwl0cmFuc2FjdGlvbiA9IHJlZl90cmFuc2FjdGlvbl9iZWdpbigmZXJyKTsKKwlpZiAoIXRyYW5zYWN0aW9uIHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl91cGRhdGUodHJhbnNhY3Rpb24sIHJlZi5idWYsICZvYmplY3QsICZwcmV2LAorCQkJCSAgIGNyZWF0ZV9yZWZsb2cgPyBSRUZfRk9SQ0VfQ1JFQVRFX1JFRkxPRyA6IDAsCisJCQkJICAgcmVmbG9nX21zZy5idWYsICZlcnIpIHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sICZlcnIpKQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCWlmIChmb3JjZSAmJiAhaXNfbnVsbF9vaWQoJnByZXYpICYmICFvaWRlcSgmcHJldiwgJm9iamVjdCkpCisJCXByaW50ZihfKCJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iKSwgdGFnLAorCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KCZwcmV2LCBERUZBVUxUX0FCQlJFVikpOworCisJVU5MRUFLKGJ1Zik7CisJVU5MRUFLKHJlZik7CisJVU5MRUFLKHJlZmxvZ19tc2cpOworCVVOTEVBSyhtc2cpOworCVVOTEVBSyhlcnIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi91bnBhY2stZmlsZS5jIGIvYnVpbHRpbi91bnBhY2stZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NjUyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3VucGFjay1maWxlLmMKQEAgLTAsMCArMSwzOCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKworc3RhdGljIGNoYXIgKmNyZWF0ZV90ZW1wX2ZpbGUoc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0YXRpYyBjaGFyIHBhdGhbNTBdOworCXZvaWQgKmJ1ZjsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBmZDsKKworCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmIHx8IHR5cGUgIT0gT0JKX0JMT0IpCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgYmxvYiBvYmplY3QgJXMiLCBvaWRfdG9faGV4KG9pZCkpOworCisJeHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIi5tZXJnZV9maWxlX1hYWFhYWCIpOworCWZkID0geG1rc3RlbXAocGF0aCk7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1Ziwgc2l6ZSkgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSB0ZW1wLWZpbGUiKTsKKwljbG9zZShmZCk7CisJcmV0dXJuIHBhdGg7Cit9CisKK2ludCBjbWRfdW5wYWNrX2ZpbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlpZiAoYXJnYyAhPSAyIHx8ICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlKCJnaXQgdW5wYWNrLWZpbGUgPHNoYTE+Iik7CisJaWYgKGdldF9vaWQoYXJndlsxXSwgJm9pZCkpCisJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBhcmd2WzFdKTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCXB1dHMoY3JlYXRlX3RlbXBfZmlsZSgmb2lkKSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3VucGFjay1vYmplY3RzLmMgYi9idWlsdGluL3VucGFjay1vYmplY3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ0YTc1ZQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdW5wYWNrLW9iamVjdHMuYwpAQCAtMCwwICsxLDU5OSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJkZWNvcmF0ZS5oIgorI2luY2x1ZGUgImZzY2suaCIKKworc3RhdGljIGludCBkcnlfcnVuLCBxdWlldCwgcmVjb3ZlciwgaGFzX2Vycm9ycywgc3RyaWN0Oworc3RhdGljIGNvbnN0IGNoYXIgdW5wYWNrX3VzYWdlW10gPSAiZ2l0IHVucGFjay1vYmplY3RzIFstbl0gWy1xXSBbLXJdIFstLXN0cmljdF0iOworCisvKiBXZSBhbHdheXMgcmVhZCBpbiA0a0IgY2h1bmtzLiAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzQwOTZdOworc3RhdGljIHVuc2lnbmVkIGludCBvZmZzZXQsIGxlbjsKK3N0YXRpYyBvZmZfdCBjb25zdW1lZF9ieXRlczsKK3N0YXRpYyBvZmZfdCBtYXhfaW5wdXRfc2l6ZTsKK3N0YXRpYyBnaXRfaGFzaF9jdHggY3R4Oworc3RhdGljIHN0cnVjdCBmc2NrX29wdGlvbnMgZnNja19vcHRpb25zID0gRlNDS19PUFRJT05TX1NUUklDVDsKK3N0YXRpYyBzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOworCisvKgorICogV2hlbiBydW5uaW5nIHVuZGVyIC0tc3RyaWN0IG1vZGUsIG9iamVjdHMgd2hvc2UgcmVhY2hhYmlsaXR5IGFyZQorICogc3VzcGVjdCBhcmUga2VwdCBpbiBjb3JlIHdpdGhvdXQgZ2V0dGluZyB3cml0dGVuIGluIHRoZSBvYmplY3QKKyAqIHN0b3JlLgorICovCitzdHJ1Y3Qgb2JqX2J1ZmZlciB7CisJY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGVjb3JhdGlvbiBvYmpfZGVjb3JhdGU7CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqX2J1ZmZlciAqbG9va3VwX29iamVjdF9idWZmZXIoc3RydWN0IG9iamVjdCAqYmFzZSkKK3sKKwlyZXR1cm4gbG9va3VwX2RlY29yYXRpb24oJm9ial9kZWNvcmF0ZSwgYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9vYmplY3RfYnVmZmVyKHN0cnVjdCBvYmplY3QgKm9iamVjdCwgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IG9ial9idWZmZXIgKm9iajsKKwlvYmogPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgb2JqX2J1ZmZlcikpOworCW9iai0+YnVmZmVyID0gYnVmZmVyOworCW9iai0+c2l6ZSA9IHNpemU7CisJaWYgKGFkZF9kZWNvcmF0aW9uKCZvYmpfZGVjb3JhdGUsIG9iamVjdCwgb2JqKSkKKwkJZGllKCJvYmplY3QgJXMgdHJpZWQgdG8gYWRkIGJ1ZmZlciB0d2ljZSEiLCBvaWRfdG9faGV4KCZvYmplY3QtPm9pZCkpOworfQorCisvKgorICogTWFrZSBzdXJlIGF0IGxlYXN0ICJtaW4iIGJ5dGVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGJ1ZmZlciwgYW5kCisgKiByZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgKmZpbGwoaW50IG1pbikKK3sKKwlpZiAobWluIDw9IGxlbikKKwkJcmV0dXJuIGJ1ZmZlciArIG9mZnNldDsKKwlpZiAobWluID4gc2l6ZW9mKGJ1ZmZlcikpCisJCWRpZSgiY2Fubm90IGZpbGwgJWQgYnl0ZXMiLCBtaW4pOworCWlmIChvZmZzZXQpIHsKKwkJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjdHgsIGJ1ZmZlciwgb2Zmc2V0KTsKKwkJbWVtbW92ZShidWZmZXIsIGJ1ZmZlciArIG9mZnNldCwgbGVuKTsKKwkJb2Zmc2V0ID0gMDsKKwl9CisJZG8geworCQlzc2l6ZV90IHJldCA9IHhyZWFkKDAsIGJ1ZmZlciArIGxlbiwgc2l6ZW9mKGJ1ZmZlcikgLSBsZW4pOworCQlpZiAocmV0IDw9IDApIHsKKwkJCWlmICghcmV0KQorCQkJCWRpZSgiZWFybHkgRU9GIik7CisJCQlkaWVfZXJybm8oInJlYWQgZXJyb3Igb24gaW5wdXQiKTsKKwkJfQorCQlsZW4gKz0gcmV0OworCX0gd2hpbGUgKGxlbiA8IG1pbik7CisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIHZvaWQgdXNlKGludCBieXRlcykKK3sKKwlpZiAoYnl0ZXMgPiBsZW4pCisJCWRpZSgidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiKTsKKwlsZW4gLT0gYnl0ZXM7CisJb2Zmc2V0ICs9IGJ5dGVzOworCisJLyogbWFrZSBzdXJlIG9mZl90IGlzIHN1ZmZpY2llbnRseSBsYXJnZSBub3QgdG8gd3JhcCAqLworCWlmIChzaWduZWRfYWRkX292ZXJmbG93cyhjb25zdW1lZF9ieXRlcywgYnl0ZXMpKQorCQlkaWUoInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiKTsKKwljb25zdW1lZF9ieXRlcyArPSBieXRlczsKKwlpZiAobWF4X2lucHV0X3NpemUgJiYgY29uc3VtZWRfYnl0ZXMgPiBtYXhfaW5wdXRfc2l6ZSkKKwkJZGllKF8oInBhY2sgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZSIpKTsKKwlkaXNwbGF5X3Rocm91Z2hwdXQocHJvZ3Jlc3MsIGNvbnN1bWVkX2J5dGVzKTsKK30KKworc3RhdGljIHZvaWQgKmdldF9kYXRhKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJdm9pZCAqYnVmID0geG1hbGxvY3ooc2l6ZSk7CisKKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCisJc3RyZWFtLm5leHRfb3V0ID0gYnVmOworCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplOworCXN0cmVhbS5uZXh0X2luID0gZmlsbCgxKTsKKwlzdHJlYW0uYXZhaWxfaW4gPSBsZW47CisJZ2l0X2luZmxhdGVfaW5pdCgmc3RyZWFtKTsKKworCWZvciAoOzspIHsKKwkJaW50IHJldCA9IGdpdF9pbmZsYXRlKCZzdHJlYW0sIDApOworCQl1c2UobGVuIC0gc3RyZWFtLmF2YWlsX2luKTsKKwkJaWYgKHN0cmVhbS50b3RhbF9vdXQgPT0gc2l6ZSAmJiByZXQgPT0gWl9TVFJFQU1fRU5EKQorCQkJYnJlYWs7CisJCWlmIChyZXQgIT0gWl9PSykgeworCQkJZXJyb3IoImluZmxhdGUgcmV0dXJuZWQgJWQiLCByZXQpOworCQkJRlJFRV9BTkRfTlVMTChidWYpOworCQkJaWYgKCFyZWNvdmVyKQorCQkJCWV4aXQoMSk7CisJCQloYXNfZXJyb3JzID0gMTsKKwkJCWJyZWFrOworCQl9CisJCXN0cmVhbS5uZXh0X2luID0gZmlsbCgxKTsKKwkJc3RyZWFtLmF2YWlsX2luID0gbGVuOworCX0KKwlnaXRfaW5mbGF0ZV9lbmQoJnN0cmVhbSk7CisJcmV0dXJuIGJ1ZjsKK30KKworc3RydWN0IGRlbHRhX2luZm8geworCXN0cnVjdCBvYmplY3RfaWQgYmFzZV9vaWQ7CisJdW5zaWduZWQgbnI7CisJb2ZmX3QgYmFzZV9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXZvaWQgKmRlbHRhOworCXN0cnVjdCBkZWx0YV9pbmZvICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCBkZWx0YV9pbmZvICpkZWx0YV9saXN0OworCitzdGF0aWMgdm9pZCBhZGRfZGVsdGFfdG9fbGlzdCh1bnNpZ25lZCBuciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYmFzZV9vaWQsCisJCQkgICAgICBvZmZfdCBiYXNlX29mZnNldCwKKwkJCSAgICAgIHZvaWQgKmRlbHRhLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IGRlbHRhX2luZm8gKmluZm8gPSB4bWFsbG9jKHNpemVvZigqaW5mbykpOworCisJb2lkY3B5KCZpbmZvLT5iYXNlX29pZCwgYmFzZV9vaWQpOworCWluZm8tPmJhc2Vfb2Zmc2V0ID0gYmFzZV9vZmZzZXQ7CisJaW5mby0+c2l6ZSA9IHNpemU7CisJaW5mby0+ZGVsdGEgPSBkZWx0YTsKKwlpbmZvLT5uciA9IG5yOworCWluZm8tPm5leHQgPSBkZWx0YV9saXN0OworCWRlbHRhX2xpc3QgPSBpbmZvOworfQorCitzdHJ1Y3Qgb2JqX2luZm8geworCW9mZl90IG9mZnNldDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7Cit9OworCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworI2RlZmluZSBGTEFHX09QRU4gKDF1PDwyMCkKKyNkZWZpbmUgRkxBR19XUklUVEVOICgxdTw8MjEpCisKK3N0YXRpYyBzdHJ1Y3Qgb2JqX2luZm8gKm9ial9saXN0Oworc3RhdGljIHVuc2lnbmVkIG5yX29iamVjdHM7CisKKy8qCisgKiBDYWxsZWQgb25seSBmcm9tIGNoZWNrX29iamVjdCgpIGFmdGVyIGl0IHZlcmlmaWVkIHRoaXMgb2JqZWN0CisgKiBpcyBPay4KKyAqLworc3RhdGljIHZvaWQgd3JpdGVfY2FjaGVkX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCBvYmpfYnVmZmVyICpvYmpfYnVmKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJaWYgKHdyaXRlX29iamVjdF9maWxlKG9ial9idWYtPmJ1ZmZlciwgb2JqX2J1Zi0+c2l6ZSwKKwkJCSAgICAgIHR5cGVfbmFtZShvYmotPnR5cGUpLCAmb2lkKSA8IDApCisJCWRpZSgiZmFpbGVkIHRvIHdyaXRlIG9iamVjdCAlcyIsIG9pZF90b19oZXgoJm9iai0+b2lkKSk7CisJb2JqLT5mbGFncyB8PSBGTEFHX1dSSVRURU47Cit9CisKKy8qCisgKiBBdCB0aGUgdmVyeSBlbmQgb2YgdGhlIHByb2Nlc3NpbmcsIHdyaXRlX3Jlc3QoKSBzY2FucyB0aGUgb2JqZWN0cworICogdGhhdCBoYXZlIHJlYWNoYWJpbGl0eSByZXF1aXJlbWVudHMgYW5kIGNhbGxzIHRoaXMgZnVuY3Rpb24uCisgKiBWZXJpZnkgaXRzIHJlYWNoYWJpbGl0eSBhbmQgdmFsaWRpdHkgcmVjdXJzaXZlbHkgYW5kIHdyaXRlIGl0IG91dC4KKyAqLworc3RhdGljIGludCBjaGVja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlzdHJ1Y3Qgb2JqX2J1ZmZlciAqb2JqX2J1ZjsKKworCWlmICghb2JqKQorCQlyZXR1cm4gMTsKKworCWlmIChvYmotPmZsYWdzICYgRkxBR19XUklUVEVOKQorCQlyZXR1cm4gMDsKKworCWlmICh0eXBlICE9IE9CSl9BTlkgJiYgb2JqLT50eXBlICE9IHR5cGUpCisJCWRpZSgib2JqZWN0IHR5cGUgbWlzbWF0Y2giKTsKKworCWlmICghKG9iai0+ZmxhZ3MgJiBGTEFHX09QRU4pKSB7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJaW50IHR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksICZvYmotPm9pZCwgJnNpemUpOworCQlpZiAodHlwZSAhPSBvYmotPnR5cGUgfHwgdHlwZSA8PSAwKQorCQkJZGllKCJvYmplY3Qgb2YgdW5leHBlY3RlZCB0eXBlIik7CisJCW9iai0+ZmxhZ3MgfD0gRkxBR19XUklUVEVOOworCQlyZXR1cm4gMDsKKwl9CisKKwlvYmpfYnVmID0gbG9va3VwX29iamVjdF9idWZmZXIob2JqKTsKKwlpZiAoIW9ial9idWYpCisJCWRpZSgiV2hvb3BzISBDYW5ub3QgZmluZCBvYmplY3QgJyVzJyIsIG9pZF90b19oZXgoJm9iai0+b2lkKSk7CisJaWYgKGZzY2tfb2JqZWN0KG9iaiwgb2JqX2J1Zi0+YnVmZmVyLCBvYmpfYnVmLT5zaXplLCAmZnNja19vcHRpb25zKSkKKwkJZGllKCJmc2NrIGVycm9yIGluIHBhY2tlZCBvYmplY3QiKTsKKwlmc2NrX29wdGlvbnMud2FsayA9IGNoZWNrX29iamVjdDsKKwlpZiAoZnNja193YWxrKG9iaiwgTlVMTCwgJmZzY2tfb3B0aW9ucykpCisJCWRpZSgiRXJyb3Igb24gcmVhY2hhYmxlIG9iamVjdHMgb2YgJXMiLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCXdyaXRlX2NhY2hlZF9vYmplY3Qob2JqLCBvYmpfYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfcmVzdCh2b2lkKQoreworCXVuc2lnbmVkIGk7CisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQlpZiAob2JqX2xpc3RbaV0ub2JqKQorCQkJY2hlY2tfb2JqZWN0KG9ial9saXN0W2ldLm9iaiwgT0JKX0FOWSwgTlVMTCwgTlVMTCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRlZF9vYmplY3QodW5zaWduZWQgbnIsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJCSB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpOworCisvKgorICogV3JpdGUgb3V0IG5yLXRoIG9iamVjdCBmcm9tIHRoZSBsaXN0LCBub3cgd2Uga25vdyB0aGUgY29udGVudHMKKyAqIG9mIGl0LiAgVW5kZXIgLS1zdHJpY3QsIHRoaXMgYnVmZmVycyBzdHJ1Y3R1cmVkIG9iamVjdHMgaW4tY29yZSwKKyAqIHRvIGJlIGNoZWNrZWQgYXQgdGhlIGVuZC4KKyAqLworc3RhdGljIHZvaWQgd3JpdGVfb2JqZWN0KHVuc2lnbmVkIG5yLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKCFzdHJpY3QpIHsKKwkJaWYgKHdyaXRlX29iamVjdF9maWxlKGJ1Ziwgc2l6ZSwgdHlwZV9uYW1lKHR5cGUpLAorCQkJCSAgICAgICZvYmpfbGlzdFtucl0ub2lkKSA8IDApCisJCQlkaWUoImZhaWxlZCB0byB3cml0ZSBvYmplY3QiKTsKKwkJYWRkZWRfb2JqZWN0KG5yLCB0eXBlLCBidWYsIHNpemUpOworCQlmcmVlKGJ1Zik7CisJCW9ial9saXN0W25yXS5vYmogPSBOVUxMOworCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfQkxPQikgeworCQlzdHJ1Y3QgYmxvYiAqYmxvYjsKKwkJaWYgKHdyaXRlX29iamVjdF9maWxlKGJ1Ziwgc2l6ZSwgdHlwZV9uYW1lKHR5cGUpLAorCQkJCSAgICAgICZvYmpfbGlzdFtucl0ub2lkKSA8IDApCisJCQlkaWUoImZhaWxlZCB0byB3cml0ZSBvYmplY3QiKTsKKwkJYWRkZWRfb2JqZWN0KG5yLCB0eXBlLCBidWYsIHNpemUpOworCQlmcmVlKGJ1Zik7CisKKwkJYmxvYiA9IGxvb2t1cF9ibG9iKHRoZV9yZXBvc2l0b3J5LCAmb2JqX2xpc3RbbnJdLm9pZCk7CisJCWlmIChibG9iKQorCQkJYmxvYi0+b2JqZWN0LmZsYWdzIHw9IEZMQUdfV1JJVFRFTjsKKwkJZWxzZQorCQkJZGllKCJpbnZhbGlkIGJsb2Igb2JqZWN0Iik7CisJCW9ial9saXN0W25yXS5vYmogPSBOVUxMOworCX0gZWxzZSB7CisJCXN0cnVjdCBvYmplY3QgKm9iajsKKwkJaW50IGVhdGVuOworCQloYXNoX29iamVjdF9maWxlKHRoZV9oYXNoX2FsZ28sIGJ1Ziwgc2l6ZSwgdHlwZV9uYW1lKHR5cGUpLAorCQkJCSAmb2JqX2xpc3RbbnJdLm9pZCk7CisJCWFkZGVkX29iamVjdChuciwgdHlwZSwgYnVmLCBzaXplKTsKKwkJb2JqID0gcGFyc2Vfb2JqZWN0X2J1ZmZlcih0aGVfcmVwb3NpdG9yeSwgJm9ial9saXN0W25yXS5vaWQsCisJCQkJCSAgdHlwZSwgc2l6ZSwgYnVmLAorCQkJCQkgICZlYXRlbik7CisJCWlmICghb2JqKQorCQkJZGllKCJpbnZhbGlkICVzIiwgdHlwZV9uYW1lKHR5cGUpKTsKKwkJYWRkX29iamVjdF9idWZmZXIob2JqLCBidWYsIHNpemUpOworCQlvYmotPmZsYWdzIHw9IEZMQUdfT1BFTjsKKwkJb2JqX2xpc3RbbnJdLm9iaiA9IG9iajsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlc29sdmVfZGVsdGEodW5zaWduZWQgbnIsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJCSAgdm9pZCAqYmFzZSwgdW5zaWduZWQgbG9uZyBiYXNlX3NpemUsCisJCQkgIHZvaWQgKmRlbHRhLCB1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUpCit7CisJdm9pZCAqcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgcmVzdWx0X3NpemU7CisKKwlyZXN1bHQgPSBwYXRjaF9kZWx0YShiYXNlLCBiYXNlX3NpemUsCisJCQkgICAgIGRlbHRhLCBkZWx0YV9zaXplLAorCQkJICAgICAmcmVzdWx0X3NpemUpOworCWlmICghcmVzdWx0KQorCQlkaWUoImZhaWxlZCB0byBhcHBseSBkZWx0YSIpOworCWZyZWUoZGVsdGEpOworCXdyaXRlX29iamVjdChuciwgdHlwZSwgcmVzdWx0LCByZXN1bHRfc2l6ZSk7Cit9CisKKy8qCisgKiBXZSBub3cga25vdyB0aGUgY29udGVudHMgb2YgYW4gb2JqZWN0ICh3aGljaCBpcyBuci10aCBpbiB0aGUgcGFjayk7CisgKiByZXNvbHZlIGFsbCB0aGUgZGVsdGlmaWVkIG9iamVjdHMgdGhhdCBhcmUgYmFzZWQgb24gaXQuCisgKi8KK3N0YXRpYyB2b2lkIGFkZGVkX29iamVjdCh1bnNpZ25lZCBuciwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgZGVsdGFfaW5mbyAqKnAgPSAmZGVsdGFfbGlzdDsKKwlzdHJ1Y3QgZGVsdGFfaW5mbyAqaW5mbzsKKworCXdoaWxlICgoaW5mbyA9ICpwKSAhPSBOVUxMKSB7CisJCWlmIChvaWRlcSgmaW5mby0+YmFzZV9vaWQsICZvYmpfbGlzdFtucl0ub2lkKSB8fAorCQkgICAgaW5mby0+YmFzZV9vZmZzZXQgPT0gb2JqX2xpc3RbbnJdLm9mZnNldCkgeworCQkJKnAgPSBpbmZvLT5uZXh0OworCQkJcCA9ICZkZWx0YV9saXN0OworCQkJcmVzb2x2ZV9kZWx0YShpbmZvLT5uciwgdHlwZSwgZGF0YSwgc2l6ZSwKKwkJCQkgICAgICBpbmZvLT5kZWx0YSwgaW5mby0+c2l6ZSk7CisJCQlmcmVlKGluZm8pOworCQkJY29udGludWU7CisJCX0KKwkJcCA9ICZpbmZvLT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgdW5wYWNrX25vbl9kZWx0YV9lbnRyeShlbnVtIG9iamVjdF90eXBlIHR5cGUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICB1bnNpZ25lZCBucikKK3sKKwl2b2lkICpidWYgPSBnZXRfZGF0YShzaXplKTsKKworCWlmICghZHJ5X3J1biAmJiBidWYpCisJCXdyaXRlX29iamVjdChuciwgdHlwZSwgYnVmLCBzaXplKTsKKwllbHNlCisJCWZyZWUoYnVmKTsKK30KKworc3RhdGljIGludCByZXNvbHZlX2FnYWluc3RfaGVsZCh1bnNpZ25lZCBuciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYmFzZSwKKwkJCQl2b2lkICpkZWx0YV9kYXRhLCB1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCXN0cnVjdCBvYmpfYnVmZmVyICpvYmpfYnVmZmVyOworCW9iaiA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksIGJhc2UpOworCWlmICghb2JqKQorCQlyZXR1cm4gMDsKKwlvYmpfYnVmZmVyID0gbG9va3VwX29iamVjdF9idWZmZXIob2JqKTsKKwlpZiAoIW9ial9idWZmZXIpCisJCXJldHVybiAwOworCXJlc29sdmVfZGVsdGEobnIsIG9iai0+dHlwZSwgb2JqX2J1ZmZlci0+YnVmZmVyLAorCQkgICAgICBvYmpfYnVmZmVyLT5zaXplLCBkZWx0YV9kYXRhLCBkZWx0YV9zaXplKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgdW5wYWNrX2RlbHRhX2VudHJ5KGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgdW5zaWduZWQgbG9uZyBkZWx0YV9zaXplLAorCQkJICAgICAgIHVuc2lnbmVkIG5yKQoreworCXZvaWQgKmRlbHRhX2RhdGEsICpiYXNlOworCXVuc2lnbmVkIGxvbmcgYmFzZV9zaXplOworCXN0cnVjdCBvYmplY3RfaWQgYmFzZV9vaWQ7CisKKwlpZiAodHlwZSA9PSBPQkpfUkVGX0RFTFRBKSB7CisJCWhhc2hjcHkoYmFzZV9vaWQuaGFzaCwgZmlsbCh0aGVfaGFzaF9hbGdvLT5yYXdzeikpOworCQl1c2UodGhlX2hhc2hfYWxnby0+cmF3c3opOworCQlkZWx0YV9kYXRhID0gZ2V0X2RhdGEoZGVsdGFfc2l6ZSk7CisJCWlmIChkcnlfcnVuIHx8ICFkZWx0YV9kYXRhKSB7CisJCQlmcmVlKGRlbHRhX2RhdGEpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChoYXNfb2JqZWN0X2ZpbGUoJmJhc2Vfb2lkKSkKKwkJCTsgLyogT2sgd2UgaGF2ZSB0aGlzIG9uZSAqLworCQllbHNlIGlmIChyZXNvbHZlX2FnYWluc3RfaGVsZChuciwgJmJhc2Vfb2lkLAorCQkJCQkgICAgICBkZWx0YV9kYXRhLCBkZWx0YV9zaXplKSkKKwkJCXJldHVybjsgLyogd2UgYXJlIGRvbmUgKi8KKwkJZWxzZSB7CisJCQkvKiBjYW5ub3QgcmVzb2x2ZSB5ZXQgLS0tIHF1ZXVlIGl0ICovCisJCQlvaWRjbHIoJm9ial9saXN0W25yXS5vaWQpOworCQkJYWRkX2RlbHRhX3RvX2xpc3QobnIsICZiYXNlX29pZCwgMCwgZGVsdGFfZGF0YSwgZGVsdGFfc2l6ZSk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQl1bnNpZ25lZCBiYXNlX2ZvdW5kID0gMDsKKwkJdW5zaWduZWQgY2hhciAqcGFjaywgYzsKKwkJb2ZmX3QgYmFzZV9vZmZzZXQ7CisJCXVuc2lnbmVkIGxvLCBtaWQsIGhpOworCisJCXBhY2sgPSBmaWxsKDEpOworCQljID0gKnBhY2s7CisJCXVzZSgxKTsKKwkJYmFzZV9vZmZzZXQgPSBjICYgMTI3OworCQl3aGlsZSAoYyAmIDEyOCkgeworCQkJYmFzZV9vZmZzZXQgKz0gMTsKKwkJCWlmICghYmFzZV9vZmZzZXQgfHwgTVNCKGJhc2Vfb2Zmc2V0LCA3KSkKKwkJCQlkaWUoIm9mZnNldCB2YWx1ZSBvdmVyZmxvdyBmb3IgZGVsdGEgYmFzZSBvYmplY3QiKTsKKwkJCXBhY2sgPSBmaWxsKDEpOworCQkJYyA9ICpwYWNrOworCQkJdXNlKDEpOworCQkJYmFzZV9vZmZzZXQgPSAoYmFzZV9vZmZzZXQgPDwgNykgKyAoYyAmIDEyNyk7CisJCX0KKwkJYmFzZV9vZmZzZXQgPSBvYmpfbGlzdFtucl0ub2Zmc2V0IC0gYmFzZV9vZmZzZXQ7CisJCWlmIChiYXNlX29mZnNldCA8PSAwIHx8IGJhc2Vfb2Zmc2V0ID49IG9ial9saXN0W25yXS5vZmZzZXQpCisJCQlkaWUoIm9mZnNldCB2YWx1ZSBvdXQgb2YgYm91bmQgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0Iik7CisKKwkJZGVsdGFfZGF0YSA9IGdldF9kYXRhKGRlbHRhX3NpemUpOworCQlpZiAoZHJ5X3J1biB8fCAhZGVsdGFfZGF0YSkgeworCQkJZnJlZShkZWx0YV9kYXRhKTsKKwkJCXJldHVybjsKKwkJfQorCQlsbyA9IDA7CisJCWhpID0gbnI7CisJCXdoaWxlIChsbyA8IGhpKSB7CisJCQltaWQgPSBsbyArIChoaSAtIGxvKSAvIDI7CisJCQlpZiAoYmFzZV9vZmZzZXQgPCBvYmpfbGlzdFttaWRdLm9mZnNldCkgeworCQkJCWhpID0gbWlkOworCQkJfSBlbHNlIGlmIChiYXNlX29mZnNldCA+IG9ial9saXN0W21pZF0ub2Zmc2V0KSB7CisJCQkJbG8gPSBtaWQgKyAxOworCQkJfSBlbHNlIHsKKwkJCQlvaWRjcHkoJmJhc2Vfb2lkLCAmb2JqX2xpc3RbbWlkXS5vaWQpOworCQkJCWJhc2VfZm91bmQgPSAhaXNfbnVsbF9vaWQoJmJhc2Vfb2lkKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoIWJhc2VfZm91bmQpIHsKKwkJCS8qCisJCQkgKiBUaGUgZGVsdGEgYmFzZSBvYmplY3QgaXMgaXRzZWxmIGEgZGVsdGEgdGhhdAorCQkJICogaGFzIG5vdCBiZWVuIHJlc29sdmVkIHlldC4KKwkJCSAqLworCQkJb2lkY2xyKCZvYmpfbGlzdFtucl0ub2lkKTsKKwkJCWFkZF9kZWx0YV90b19saXN0KG5yLCAmbnVsbF9vaWQsIGJhc2Vfb2Zmc2V0LCBkZWx0YV9kYXRhLCBkZWx0YV9zaXplKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChyZXNvbHZlX2FnYWluc3RfaGVsZChuciwgJmJhc2Vfb2lkLCBkZWx0YV9kYXRhLCBkZWx0YV9zaXplKSkKKwkJcmV0dXJuOworCisJYmFzZSA9IHJlYWRfb2JqZWN0X2ZpbGUoJmJhc2Vfb2lkLCAmdHlwZSwgJmJhc2Vfc2l6ZSk7CisJaWYgKCFiYXNlKSB7CisJCWVycm9yKCJmYWlsZWQgdG8gcmVhZCBkZWx0YS1wYWNrIGJhc2Ugb2JqZWN0ICVzIiwKKwkJICAgICAgb2lkX3RvX2hleCgmYmFzZV9vaWQpKTsKKwkJaWYgKCFyZWNvdmVyKQorCQkJZXhpdCgxKTsKKwkJaGFzX2Vycm9ycyA9IDE7CisJCXJldHVybjsKKwl9CisJcmVzb2x2ZV9kZWx0YShuciwgdHlwZSwgYmFzZSwgYmFzZV9zaXplLCBkZWx0YV9kYXRhLCBkZWx0YV9zaXplKTsKKwlmcmVlKGJhc2UpOworfQorCitzdGF0aWMgdm9pZCB1bnBhY2tfb25lKHVuc2lnbmVkIG5yKQoreworCXVuc2lnbmVkIHNoaWZ0OworCXVuc2lnbmVkIGNoYXIgKnBhY2s7CisJdW5zaWduZWQgbG9uZyBzaXplLCBjOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCW9ial9saXN0W25yXS5vZmZzZXQgPSBjb25zdW1lZF9ieXRlczsKKworCXBhY2sgPSBmaWxsKDEpOworCWMgPSAqcGFjazsKKwl1c2UoMSk7CisJdHlwZSA9IChjID4+IDQpICYgNzsKKwlzaXplID0gKGMgJiAxNSk7CisJc2hpZnQgPSA0OworCXdoaWxlIChjICYgMHg4MCkgeworCQlwYWNrID0gZmlsbCgxKTsKKwkJYyA9ICpwYWNrOworCQl1c2UoMSk7CisJCXNpemUgKz0gKGMgJiAweDdmKSA8PCBzaGlmdDsKKwkJc2hpZnQgKz0gNzsKKwl9CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE9CSl9DT01NSVQ6CisJY2FzZSBPQkpfVFJFRToKKwljYXNlIE9CSl9CTE9COgorCWNhc2UgT0JKX1RBRzoKKwkJdW5wYWNrX25vbl9kZWx0YV9lbnRyeSh0eXBlLCBzaXplLCBucik7CisJCXJldHVybjsKKwljYXNlIE9CSl9SRUZfREVMVEE6CisJY2FzZSBPQkpfT0ZTX0RFTFRBOgorCQl1bnBhY2tfZGVsdGFfZW50cnkodHlwZSwgc2l6ZSwgbnIpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZXJyb3IoImJhZCBvYmplY3QgdHlwZSAlZCIsIHR5cGUpOworCQloYXNfZXJyb3JzID0gMTsKKwkJaWYgKHJlY292ZXIpCisJCQlyZXR1cm47CisJCWV4aXQoMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1bnBhY2tfYWxsKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IHBhY2tfaGVhZGVyICpoZHIgPSBmaWxsKHNpemVvZihzdHJ1Y3QgcGFja19oZWFkZXIpKTsKKworCW5yX29iamVjdHMgPSBudG9obChoZHItPmhkcl9lbnRyaWVzKTsKKworCWlmIChudG9obChoZHItPmhkcl9zaWduYXR1cmUpICE9IFBBQ0tfU0lHTkFUVVJFKQorCQlkaWUoImJhZCBwYWNrIGZpbGUiKTsKKwlpZiAoIXBhY2tfdmVyc2lvbl9vayhoZHItPmhkcl92ZXJzaW9uKSkKKwkJZGllKCJ1bmtub3duIHBhY2sgZmlsZSB2ZXJzaW9uICUiUFJJdTMyLAorCQkJbnRvaGwoaGRyLT5oZHJfdmVyc2lvbikpOworCXVzZShzaXplb2Yoc3RydWN0IHBhY2tfaGVhZGVyKSk7CisKKwlpZiAoIXF1aWV0KQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIlVucGFja2luZyBvYmplY3RzIiksIG5yX29iamVjdHMpOworCW9ial9saXN0ID0geGNhbGxvYyhucl9vYmplY3RzLCBzaXplb2YoKm9ial9saXN0KSk7CisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQl1bnBhY2tfb25lKGkpOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7CisJfQorCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKworCWlmIChkZWx0YV9saXN0KQorCQlkaWUoInVucmVzb2x2ZWQgZGVsdGFzIGxlZnQgYWZ0ZXIgdW5wYWNraW5nIik7Cit9CisKK2ludCBjbWRfdW5wYWNrX29iamVjdHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlyZWFkX3JlcGxhY2VfcmVmcyA9IDA7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlxdWlldCA9ICFpc2F0dHkoMik7CisKKwlmb3IgKGkgPSAxIDsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCisJCWlmICgqYXJnID09ICctJykgeworCQkJaWYgKCFzdHJjbXAoYXJnLCAiLW4iKSkgeworCQkJCWRyeV9ydW4gPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLXEiKSkgeworCQkJCXF1aWV0ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi1yIikpIHsKKwkJCQlyZWNvdmVyID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tc3RyaWN0IikpIHsKKwkJCQlzdHJpY3QgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tc3RyaWN0PSIsICZhcmcpKSB7CisJCQkJc3RyaWN0ID0gMTsKKwkJCQlmc2NrX3NldF9tc2dfdHlwZXMoJmZzY2tfb3B0aW9ucywgYXJnKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChzdGFydHNfd2l0aChhcmcsICItLXBhY2tfaGVhZGVyPSIpKSB7CisJCQkJc3RydWN0IHBhY2tfaGVhZGVyICpoZHI7CisJCQkJY2hhciAqYzsKKworCQkJCWhkciA9IChzdHJ1Y3QgcGFja19oZWFkZXIgKilidWZmZXI7CisJCQkJaGRyLT5oZHJfc2lnbmF0dXJlID0gaHRvbmwoUEFDS19TSUdOQVRVUkUpOworCQkJCWhkci0+aGRyX3ZlcnNpb24gPSBodG9ubChzdHJ0b3VsKGFyZyArIDE0LCAmYywgMTApKTsKKwkJCQlpZiAoKmMgIT0gJywnKQorCQkJCQlkaWUoImJhZCAlcyIsIGFyZyk7CisJCQkJaGRyLT5oZHJfZW50cmllcyA9IGh0b25sKHN0cnRvdWwoYyArIDEsICZjLCAxMCkpOworCQkJCWlmICgqYykKKwkJCQkJZGllKCJiYWQgJXMiLCBhcmcpOworCQkJCWxlbiA9IHNpemVvZigqaGRyKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChza2lwX3ByZWZpeChhcmcsICItLW1heC1pbnB1dC1zaXplPSIsICZhcmcpKSB7CisJCQkJbWF4X2lucHV0X3NpemUgPSBzdHJ0b3VtYXgoYXJnLCBOVUxMLCAxMCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQl1c2FnZSh1bnBhY2tfdXNhZ2UpOworCQl9CisKKwkJLyogV2UgZG9uJ3QgdGFrZSBhbnkgbm9uLWZsYWcgYXJndW1lbnRzIG5vdy4uIE1heWJlIHNvbWUgZGF5ICovCisJCXVzYWdlKHVucGFja191c2FnZSk7CisJfQorCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJmN0eCk7CisJdW5wYWNrX2FsbCgpOworCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmY3R4LCBidWZmZXIsIG9mZnNldCk7CisJdGhlX2hhc2hfYWxnby0+ZmluYWxfZm4ob2lkLmhhc2gsICZjdHgpOworCWlmIChzdHJpY3QpIHsKKwkJd3JpdGVfcmVzdCgpOworCQlpZiAoZnNja19maW5pc2goJmZzY2tfb3B0aW9ucykpCisJCQlkaWUoXygiZnNjayBlcnJvciBpbiBwYWNrIG9iamVjdHMiKSk7CisJfQorCWlmICghaGFzaGVxKGZpbGwodGhlX2hhc2hfYWxnby0+cmF3c3opLCBvaWQuaGFzaCkpCisJCWRpZSgiZmluYWwgc2hhMSBkaWQgbm90IG1hdGNoIik7CisJdXNlKHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKKworCS8qIFdyaXRlIHRoZSBsYXN0IHBhcnQgb2YgdGhlIGJ1ZmZlciB0byBzdGRvdXQgKi8KKwl3aGlsZSAobGVuKSB7CisJCWludCByZXQgPSB4d3JpdGUoMSwgYnVmZmVyICsgb2Zmc2V0LCBsZW4pOworCQlpZiAocmV0IDw9IDApCisJCQlicmVhazsKKwkJbGVuIC09IHJldDsKKwkJb2Zmc2V0ICs9IHJldDsKKwl9CisKKwkvKiBBbGwgZG9uZSAqLworCXJldHVybiBoYXNfZXJyb3JzOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi91cGRhdGUtaW5kZXguYyBiL2J1aWx0aW4vdXBkYXRlLWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkwODdiYwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdXBkYXRlLWluZGV4LmMKQEAgLTAsMCArMSwxMjQ1IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJzcGxpdC1pbmRleC5oIgorI2luY2x1ZGUgImZzbW9uaXRvci5oIgorCisvKgorICogRGVmYXVsdCB0byBub3QgYWxsb3dpbmcgY2hhbmdlcyB0byB0aGUgbGlzdCBvZiBmaWxlcy4gVGhlCisgKiB0b29sIGRvZXNuJ3QgYWN0dWFsbHkgY2FyZSwgYnV0IHRoaXMgbWFrZXMgaXQgaGFyZGVyIHRvIGFkZAorICogZmlsZXMgdG8gdGhlIHJldmlzaW9uIGNvbnRyb2wgYnkgbWlzdGFrZSBieSBkb2luZyBzb21ldGhpbmcKKyAqIGxpa2UgImdpdCB1cGRhdGUtaW5kZXggKiIgYW5kIHN1ZGRlbmx5IGhhdmluZyBhbGwgdGhlIG9iamVjdAorICogZmlsZXMgYmUgcmV2aXNpb24gY29udHJvbGxlZC4KKyAqLworc3RhdGljIGludCBhbGxvd19hZGQ7CitzdGF0aWMgaW50IGFsbG93X3JlbW92ZTsKK3N0YXRpYyBpbnQgYWxsb3dfcmVwbGFjZTsKK3N0YXRpYyBpbnQgaW5mb19vbmx5Oworc3RhdGljIGludCBmb3JjZV9yZW1vdmU7CitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgaW50IG1hcmtfdmFsaWRfb25seTsKK3N0YXRpYyBpbnQgbWFya19za2lwX3dvcmt0cmVlX29ubHk7CitzdGF0aWMgaW50IG1hcmtfZnNtb25pdG9yX29ubHk7CitzdGF0aWMgaW50IGlnbm9yZV9za2lwX3dvcmt0cmVlX2VudHJpZXM7CisjZGVmaW5lIE1BUktfRkxBRyAxCisjZGVmaW5lIFVOTUFSS19GTEFHIDIKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG10aW1lX2RpciA9IFNUUkJVRl9JTklUOworCisvKiBVbnRyYWNrZWQgY2FjaGUgbW9kZSAqLworZW51bSB1Y19tb2RlIHsKKwlVQ19VTlNQRUNJRklFRCA9IC0xLAorCVVDX0RJU0FCTEUgPSAwLAorCVVDX0VOQUJMRSwKKwlVQ19URVNULAorCVVDX0ZPUkNFCit9OworCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorc3RhdGljIHZvaWQgcmVwb3J0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgdnA7CisKKwlpZiAoIXZlcmJvc2UpCisJCXJldHVybjsKKworCXZhX3N0YXJ0KHZwLCBmbXQpOworCXZwcmludGYoZm10LCB2cCk7CisJcHV0Y2hhcignXG4nKTsKKwl2YV9lbmQodnApOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfdGVzdF9kaXJlY3Rvcnkodm9pZCkKK3sKKwlpZiAobXRpbWVfZGlyLmxlbikKKwkJcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmbXRpbWVfZGlyLCAwKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9tdGltZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwlzdHJidWZfYWRkZigmc2IsICIlcy8lcyIsIG10aW1lX2Rpci5idWYsIHBhdGgpOworCXJldHVybiBzYi5idWY7Cit9CisKK3N0YXRpYyB2b2lkIHhta2Rpcihjb25zdCBjaGFyICpwYXRoKQoreworCXBhdGggPSBnZXRfbXRpbWVfcGF0aChwYXRoKTsKKwlpZiAobWtkaXIocGF0aCwgMDcwMCkpCisJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIpLCBwYXRoKTsKK30KKworc3RhdGljIGludCB4c3RhdF9tdGltZV9kaXIoc3RydWN0IHN0YXQgKnN0KQoreworCWlmIChzdGF0KG10aW1lX2Rpci5idWYsIHN0KSkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBzdGF0ICVzIiksIG10aW1lX2Rpci5idWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGZkOworCXBhdGggPSBnZXRfbXRpbWVfcGF0aChwYXRoKTsKKwlmZCA9IG9wZW4ocGF0aCwgT19DUkVBVCB8IE9fUkRXUiwgMDY0NCk7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBjcmVhdGUgZmlsZSAlcyIpLCBwYXRoKTsKKwlyZXR1cm4gZmQ7Cit9CisKK3N0YXRpYyB2b2lkIHh1bmxpbmsoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlwYXRoID0gZ2V0X210aW1lX3BhdGgocGF0aCk7CisJaWYgKHVubGluayhwYXRoKSkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIpLCBwYXRoKTsKK30KKworc3RhdGljIHZvaWQgeHJtZGlyKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcGF0aCA9IGdldF9tdGltZV9wYXRoKHBhdGgpOworCWlmIChybWRpcihwYXRoKSkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIiksIHBhdGgpOworfQorCitzdGF0aWMgdm9pZCBhdm9pZF9yYWN5KHZvaWQpCit7CisJLyoKKwkgKiBub3QgdXNlIGlmIHdlIGNvdWxkIHVzbGVlcCgxMCkgaWYgVVNFX05TRUMgaXMgZGVmaW5lZC4gVGhlCisJICogZmllbGQgbnNlYyBjb3VsZCBiZSB0aGVyZSwgYnV0IHRoZSBPUyBjb3VsZCBjaG9vc2UgdG8KKwkgKiBpZ25vcmUgaXQ/CisJICovCisJc2xlZXAoMSk7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9pZl91bnRyYWNrZWRfY2FjaGVfaXNfc3VwcG9ydGVkKHZvaWQpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IHN0YXRfZGF0YSBiYXNlOworCWludCBmZCwgcmV0ID0gMDsKKwljaGFyICpjd2Q7CisKKwlzdHJidWZfYWRkc3RyKCZtdGltZV9kaXIsICJtdGltZS10ZXN0LVhYWFhYWCIpOworCWlmICghbWtkdGVtcChtdGltZV9kaXIuYnVmKSkKKwkJZGllX2Vycm5vKCJDb3VsZCBub3QgbWFrZSB0ZW1wb3JhcnkgZGlyZWN0b3J5Iik7CisKKwljd2QgPSB4Z2V0Y3dkKCk7CisJZnByaW50ZihzdGRlcnIsIF8oIlRlc3RpbmcgbXRpbWUgaW4gJyVzJyAiKSwgY3dkKTsKKwlmcmVlKGN3ZCk7CisKKwlhdGV4aXQocmVtb3ZlX3Rlc3RfZGlyZWN0b3J5KTsKKwl4c3RhdF9tdGltZV9kaXIoJnN0KTsKKwlmaWxsX3N0YXRfZGF0YSgmYmFzZSwgJnN0KTsKKwlmcHV0YygnLicsIHN0ZGVycik7CisKKwlhdm9pZF9yYWN5KCk7CisJZmQgPSBjcmVhdGVfZmlsZSgibmV3ZmlsZSIpOworCXhzdGF0X210aW1lX2Rpcigmc3QpOworCWlmICghbWF0Y2hfc3RhdF9kYXRhKCZiYXNlLCAmc3QpKSB7CisJCWNsb3NlKGZkKTsKKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsXygiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCAiCisJCQkJICAgICJjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGZpbGUiKSk7CisJCWdvdG8gZG9uZTsKKwl9CisJZmlsbF9zdGF0X2RhdGEoJmJhc2UsICZzdCk7CisJZnB1dGMoJy4nLCBzdGRlcnIpOworCisJYXZvaWRfcmFjeSgpOworCXhta2RpcigibmV3LWRpciIpOworCXhzdGF0X210aW1lX2Rpcigmc3QpOworCWlmICghbWF0Y2hfc3RhdF9kYXRhKCZiYXNlLCAmc3QpKSB7CisJCWNsb3NlKGZkKTsKKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlICIKKwkJCQkgICAgICJhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IikpOworCQlnb3RvIGRvbmU7CisJfQorCWZpbGxfc3RhdF9kYXRhKCZiYXNlLCAmc3QpOworCWZwdXRjKCcuJywgc3RkZXJyKTsKKworCWF2b2lkX3JhY3koKTsKKwl3cml0ZV9vcl9kaWUoZmQsICJkYXRhIiwgNCk7CisJY2xvc2UoZmQpOworCXhzdGF0X210aW1lX2Rpcigmc3QpOworCWlmIChtYXRjaF9zdGF0X2RhdGEoJmJhc2UsICZzdCkpIHsKKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyAiCisJCQkJICAgICAiYWZ0ZXIgdXBkYXRpbmcgYSBmaWxlIikpOworCQlnb3RvIGRvbmU7CisJfQorCWZwdXRjKCcuJywgc3RkZXJyKTsKKworCWF2b2lkX3JhY3koKTsKKwljbG9zZShjcmVhdGVfZmlsZSgibmV3LWRpci9uZXciKSk7CisJeHN0YXRfbXRpbWVfZGlyKCZzdCk7CisJaWYgKG1hdGNoX3N0YXRfZGF0YSgmYmFzZSwgJnN0KSkgeworCQlmcHV0YygnXG4nLCBzdGRlcnIpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyICIKKwkJCQkgICAgICJhZGRpbmcgYSBmaWxlIGluc2lkZSBzdWJkaXJlY3RvcnkiKSk7CisJCWdvdG8gZG9uZTsKKwl9CisJZnB1dGMoJy4nLCBzdGRlcnIpOworCisJYXZvaWRfcmFjeSgpOworCXh1bmxpbmsoIm5ld2ZpbGUiKTsKKwl4c3RhdF9tdGltZV9kaXIoJnN0KTsKKwlpZiAoIW1hdGNoX3N0YXRfZGF0YSgmYmFzZSwgJnN0KSkgeworCQlmcHV0YygnXG4nLCBzdGRlcnIpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCAiCisJCQkJICAgICAiY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZmlsZSIpKTsKKwkJZ290byBkb25lOworCX0KKwlmaWxsX3N0YXRfZGF0YSgmYmFzZSwgJnN0KTsKKwlmcHV0YygnLicsIHN0ZGVycik7CisKKwlhdm9pZF9yYWN5KCk7CisJeHVubGluaygibmV3LWRpci9uZXciKTsKKwl4cm1kaXIoIm5ldy1kaXIiKTsKKwl4c3RhdF9tdGltZV9kaXIoJnN0KTsKKwlpZiAoIW1hdGNoX3N0YXRfZGF0YSgmYmFzZSwgJnN0KSkgeworCQlmcHV0YygnXG4nLCBzdGRlcnIpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCAiCisJCQkJICAgICAiY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZGlyZWN0b3J5IikpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHJtZGlyKG10aW1lX2Rpci5idWYpKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGRlbGV0ZSBkaXJlY3RvcnkgJXMiKSwgbXRpbWVfZGlyLmJ1Zik7CisJZnByaW50Zl9sbihzdGRlcnIsIF8oIiBPSyIpKTsKKwlyZXQgPSAxOworCitkb25lOgorCXN0cmJ1Zl9yZWxlYXNlKCZtdGltZV9kaXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWFya19jZV9mbGFncyhjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZywgaW50IG1hcmspCit7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7CisJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIG5hbWVsZW4pOworCWlmICgwIDw9IHBvcykgeworCQltYXJrX2ZzbW9uaXRvcl9pbnZhbGlkKCZ0aGVfaW5kZXgsIGFjdGl2ZV9jYWNoZVtwb3NdKTsKKwkJaWYgKG1hcmspCisJCQlhY3RpdmVfY2FjaGVbcG9zXS0+Y2VfZmxhZ3MgfD0gZmxhZzsKKwkJZWxzZQorCQkJYWN0aXZlX2NhY2hlW3Bvc10tPmNlX2ZsYWdzICY9IH5mbGFnOworCQlhY3RpdmVfY2FjaGVbcG9zXS0+Y2VfZmxhZ3MgfD0gQ0VfVVBEQVRFX0lOX0JBU0U7CisJCWNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKCZ0aGVfaW5kZXgsIHBhdGgpOworCQlhY3RpdmVfY2FjaGVfY2hhbmdlZCB8PSBDRV9FTlRSWV9DSEFOR0VEOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9vbmVfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCWlmICghYWxsb3dfcmVtb3ZlKQorCQlyZXR1cm4gZXJyb3IoIiVzOiBkb2VzIG5vdCBleGlzdCBhbmQgLS1yZW1vdmUgbm90IHBhc3NlZCIsIHBhdGgpOworCWlmIChyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpKQorCQlyZXR1cm4gZXJyb3IoIiVzOiBjYW5ub3QgcmVtb3ZlIGZyb20gdGhlIGluZGV4IiwgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBIYW5kbGUgYSBwYXRoIHRoYXQgY291bGRuJ3QgYmUgbHN0YXQnZWQuIEl0J3MgZWl0aGVyOgorICogIC0gbWlzc2luZyBmaWxlIChFTk9FTlQgb3IgRU5PVERJUikuIFRoYXQncyBvayBpZiB3ZSdyZQorICogICAgc3VwcG9zZWQgdG8gYmUgcmVtb3ZpbmcgaXQgYW5kIHRoZSByZW1vdmFsIGFjdHVhbGx5CisgKiAgICBzdWNjZWVkcy4KKyAqICAtIHBlcm1pc3Npb24gZXJyb3IuIFRoYXQncyBuZXZlciBvay4KKyAqLworc3RhdGljIGludCBwcm9jZXNzX2xzdGF0X2Vycm9yKGNvbnN0IGNoYXIgKnBhdGgsIGludCBlcnIpCit7CisJaWYgKGlzX21pc3NpbmdfZmlsZV9lcnJvcihlcnIpKQorCQlyZXR1cm4gcmVtb3ZlX29uZV9wYXRoKHBhdGgpOworCXJldHVybiBlcnJvcigibHN0YXQoXCIlc1wiKTogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnIpKTsKK30KKworc3RhdGljIGludCBhZGRfb25lX3BhdGgoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwlpbnQgb3B0aW9uOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwkvKiBXYXMgdGhlIG9sZCBpbmRleCBlbnRyeSBhbHJlYWR5IHVwLXRvLWRhdGU/ICovCisJaWYgKG9sZCAmJiAhY2Vfc3RhZ2Uob2xkKSAmJiAhY2VfbWF0Y2hfc3RhdChvbGQsIHN0LCAwKSkKKwkJcmV0dXJuIDA7CisKKwljZSA9IG1ha2VfZW1wdHlfY2FjaGVfZW50cnkoJnRoZV9pbmRleCwgbGVuKTsKKwltZW1jcHkoY2UtPm5hbWUsIHBhdGgsIGxlbik7CisJY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKDApOworCWNlLT5jZV9uYW1lbGVuID0gbGVuOworCWZpbGxfc3RhdF9jYWNoZV9pbmZvKCZ0aGVfaW5kZXgsIGNlLCBzdCk7CisJY2UtPmNlX21vZGUgPSBjZV9tb2RlX2Zyb21fc3RhdChvbGQsIHN0LT5zdF9tb2RlKTsKKworCWlmIChpbmRleF9wYXRoKCZ0aGVfaW5kZXgsICZjZS0+b2lkLCBwYXRoLCBzdCwKKwkJICAgICAgIGluZm9fb25seSA/IDAgOiBIQVNIX1dSSVRFX09CSkVDVCkpIHsKKwkJZGlzY2FyZF9jYWNoZV9lbnRyeShjZSk7CisJCXJldHVybiAtMTsKKwl9CisJb3B0aW9uID0gYWxsb3dfYWRkID8gQUREX0NBQ0hFX09LX1RPX0FERCA6IDA7CisJb3B0aW9uIHw9IGFsbG93X3JlcGxhY2UgPyBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSA6IDA7CisJaWYgKGFkZF9jYWNoZV9lbnRyeShjZSwgb3B0aW9uKSkgeworCQlkaXNjYXJkX2NhY2hlX2VudHJ5KGNlKTsKKwkJcmV0dXJuIGVycm9yKCIlczogY2Fubm90IGFkZCB0byB0aGUgaW5kZXggLSBtaXNzaW5nIC0tYWRkIG9wdGlvbj8iLCBwYXRoKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBIYW5kbGUgYSBwYXRoIHRoYXQgd2FzIGEgZGlyZWN0b3J5LiBGb3VyIGNhc2VzOgorICoKKyAqICAtIGl0J3MgYWxyZWFkeSBhIGdpdGxpbmsgaW4gdGhlIGluZGV4LCBhbmQgd2Uga2VlcCBpdCB0aGF0CisgKiAgICB3YXksIGFuZCB1cGRhdGUgaXQgaWYgd2UgY2FuIChpZiB3ZSBjYW5ub3QgZmluZCB0aGUgSEVBRCwKKyAqICAgIHdlJ3JlIGdvaW5nIHRvIGtlZXAgaXQgdW5jaGFuZ2VkIGluIHRoZSBpbmRleCEpCisgKgorICogIC0gaXQncyBhICpmaWxlKiBpbiB0aGUgaW5kZXgsIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkIGJlCisgKiAgICByZW1vdmVkIGFzIGEgZmlsZSBpZiByZW1vdmFsIGlzIGFsbG93ZWQsIHNpbmNlIGl0IGRvZXNuJ3QKKyAqICAgIGV4aXN0IGFzIHN1Y2ggYW55IG1vcmUuIElmIHJlbW92YWwgaXNuJ3QgYWxsb3dlZCwgaXQncworICogICAgYW4gZXJyb3IuCisgKgorICogICAgKE5PVEUhIFRoaXMgaXMgb2xkIGFuZCBhcmd1YWJseSBmYWlybHkgc3RyYW5nZSBiZWhhdmlvdXIuCisgKiAgICBXZSBtaWdodCB3YW50IHRvIG1ha2UgdGhpcyBhbiBlcnJvciB1bmNvbmRpdGlvbmFsbHksIGFuZAorICogICAgdXNlICItLWZvcmNlLXJlbW92ZSIgaWYgeW91IGFjdHVhbGx5IHdhbnQgdG8gZm9yY2UgcmVtb3ZhbCkuCisgKgorICogIC0gaXQgdXNlZCB0byBleGlzdCBhcyBhIHN1YmRpcmVjdG9yeSAoaWUgbXVsdGlwbGUgZmlsZXMgd2l0aAorICogICAgdGhpcyBwYXJ0aWN1bGFyIHByZWZpeCkgaW4gdGhlIGluZGV4LCBpbiB3aGljaCBjYXNlIGl0J3Mgd3JvbmcKKyAqICAgIHRvIHRyeSB0byB1cGRhdGUgaXQgYXMgYSBkaXJlY3RvcnkuCisgKgorICogIC0gaXQgZG9lc24ndCBleGlzdCBhdCBhbGwgaW4gdGhlIGluZGV4LCBidXQgaXQgaXMgYSB2YWxpZAorICogICAgZ2l0IGRpcmVjdG9yeSwgYW5kIGl0IHNob3VsZCBiZSAqYWRkZWQqIGFzIGEgZ2l0bGluay4KKyAqLworc3RhdGljIGludCBwcm9jZXNzX2RpcmVjdG9yeShjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIGxlbik7CisKKwkvKiBFeGFjdCBtYXRjaDogZmlsZSBvciBleGlzdGluZyBnaXRsaW5rICovCisJaWYgKHBvcyA+PSAwKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkgeworCisJCQkvKiBEbyBub3RoaW5nIHRvIHRoZSBpbmRleCBpZiB0aGVyZSBpcyBubyBIRUFEISAqLworCQkJaWYgKHJlc29sdmVfZ2l0bGlua19yZWYocGF0aCwgIkhFQUQiLCAmb2lkKSA8IDApCisJCQkJcmV0dXJuIDA7CisKKwkJCXJldHVybiBhZGRfb25lX3BhdGgoY2UsIHBhdGgsIGxlbiwgc3QpOworCQl9CisJCS8qIFNob3VsZCB0aGlzIGJlIGFuIHVuY29uZGl0aW9uYWwgZXJyb3I/ICovCisJCXJldHVybiByZW1vdmVfb25lX3BhdGgocGF0aCk7CisJfQorCisJLyogSW5leGFjdCBtYXRjaDogaXMgdGhlcmUgcGVyaGFwcyBhIHN1YmRpcmVjdG9yeSBtYXRjaD8gKi8KKwlwb3MgPSAtcG9zLTE7CisJd2hpbGUgKHBvcyA8IGFjdGl2ZV9ucikgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3BvcysrXTsKKworCQlpZiAoc3RybmNtcChjZS0+bmFtZSwgcGF0aCwgbGVuKSkKKwkJCWJyZWFrOworCQlpZiAoY2UtPm5hbWVbbGVuXSA+ICcvJykKKwkJCWJyZWFrOworCQlpZiAoY2UtPm5hbWVbbGVuXSA8ICcvJykKKwkJCWNvbnRpbnVlOworCisJCS8qIFN1YmRpcmVjdG9yeSBtYXRjaCAtIGVycm9yIG91dCAqLworCQlyZXR1cm4gZXJyb3IoIiVzOiBpcyBhIGRpcmVjdG9yeSAtIGFkZCBpbmRpdmlkdWFsIGZpbGVzIGluc3RlYWQiLCBwYXRoKTsKKwl9CisKKwkvKiBObyBtYXRjaCAtIHNob3VsZCB3ZSBhZGQgaXQgYXMgYSBnaXRsaW5rPyAqLworCWlmICghcmVzb2x2ZV9naXRsaW5rX3JlZihwYXRoLCAiSEVBRCIsICZvaWQpKQorCQlyZXR1cm4gYWRkX29uZV9wYXRoKE5VTEwsIHBhdGgsIGxlbiwgc3QpOworCisJLyogRXJyb3Igb3V0LiAqLworCXJldHVybiBlcnJvcigiJXM6IGlzIGEgZGlyZWN0b3J5IC0gYWRkIGZpbGVzIGluc2lkZSBpbnN0ZWFkIiwgcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19wYXRoKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpzdCwgaW50IHN0YXRfZXJybm8pCit7CisJaW50IHBvcywgbGVuOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwlsZW4gPSBzdHJsZW4ocGF0aCk7CisJaWYgKGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChwYXRoLCBsZW4pKQorCQlyZXR1cm4gZXJyb3IoIiclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIsIHBhdGgpOworCisJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbGVuKTsKKwljZSA9IHBvcyA8IDAgPyBOVUxMIDogYWN0aXZlX2NhY2hlW3Bvc107CisJaWYgKGNlICYmIGNlX3NraXBfd29ya3RyZWUoY2UpKSB7CisJCS8qCisJCSAqIHdvcmtpbmcgZGlyZWN0b3J5IHZlcnNpb24gaXMgYXNzdW1lZCAiZ29vZCIKKwkJICogc28gdXBkYXRpbmcgaXQgZG9lcyBub3QgbWFrZSBzZW5zZS4KKwkJICogT24gdGhlIG90aGVyIGhhbmQsIHJlbW92aW5nIGl0IGZyb20gaW5kZXggc2hvdWxkIHdvcmsKKwkJICovCisJCWlmICghaWdub3JlX3NraXBfd29ya3RyZWVfZW50cmllcyAmJiBhbGxvd19yZW1vdmUgJiYKKwkJICAgIHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCkpCisJCQlyZXR1cm4gZXJyb3IoIiVzOiBjYW5ub3QgcmVtb3ZlIGZyb20gdGhlIGluZGV4IiwgcGF0aCk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogRmlyc3QgdGhpbmdzIGZpcnN0OiBnZXQgdGhlIHN0YXQgaW5mb3JtYXRpb24sIHRvIGRlY2lkZQorCSAqIHdoYXQgdG8gZG8gYWJvdXQgdGhlIHBhdGhuYW1lIQorCSAqLworCWlmIChzdGF0X2Vycm5vKQorCQlyZXR1cm4gcHJvY2Vzc19sc3RhdF9lcnJvcihwYXRoLCBzdGF0X2Vycm5vKTsKKworCWlmIChTX0lTRElSKHN0LT5zdF9tb2RlKSkKKwkJcmV0dXJuIHByb2Nlc3NfZGlyZWN0b3J5KHBhdGgsIGxlbiwgc3QpOworCisJcmV0dXJuIGFkZF9vbmVfcGF0aChjZSwgcGF0aCwgbGVuLCBzdCk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2NhY2hlaW5mbyh1bnNpZ25lZCBpbnQgbW9kZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJIGNvbnN0IGNoYXIgKnBhdGgsIGludCBzdGFnZSkKK3sKKwlpbnQgbGVuLCBvcHRpb247CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWlmICghdmVyaWZ5X3BhdGgocGF0aCwgbW9kZSkpCisJCXJldHVybiBlcnJvcigiSW52YWxpZCBwYXRoICclcyciLCBwYXRoKTsKKworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwljZSA9IG1ha2VfZW1wdHlfY2FjaGVfZW50cnkoJnRoZV9pbmRleCwgbGVuKTsKKworCW9pZGNweSgmY2UtPm9pZCwgb2lkKTsKKwltZW1jcHkoY2UtPm5hbWUsIHBhdGgsIGxlbik7CisJY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKHN0YWdlKTsKKwljZS0+Y2VfbmFtZWxlbiA9IGxlbjsKKwljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworCWlmIChhc3N1bWVfdW5jaGFuZ2VkKQorCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfVkFMSUQ7CisJb3B0aW9uID0gYWxsb3dfYWRkID8gQUREX0NBQ0hFX09LX1RPX0FERCA6IDA7CisJb3B0aW9uIHw9IGFsbG93X3JlcGxhY2UgPyBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSA6IDA7CisJaWYgKGFkZF9jYWNoZV9lbnRyeShjZSwgb3B0aW9uKSkKKwkJcmV0dXJuIGVycm9yKCIlczogY2Fubm90IGFkZCB0byB0aGUgaW5kZXggLSBtaXNzaW5nIC0tYWRkIG9wdGlvbj8iLAorCQkJICAgICBwYXRoKTsKKwlyZXBvcnQoImFkZCAnJXMnIiwgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNobW9kX3BhdGgoY2hhciBmbGlwLCBjb25zdCBjaGFyICpwYXRoKQoreworCWludCBwb3M7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCXBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIHN0cmxlbihwYXRoKSk7CisJaWYgKHBvcyA8IDApCisJCWdvdG8gZmFpbDsKKwljZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCWlmIChjaG1vZF9jYWNoZV9lbnRyeShjZSwgZmxpcCkgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlyZXBvcnQoImNobW9kICVjeCAnJXMnIiwgZmxpcCwgcGF0aCk7CisJcmV0dXJuOworIGZhaWw6CisJZGllKCJnaXQgdXBkYXRlLWluZGV4OiBjYW5ub3QgY2htb2QgJWN4ICclcyciLCBmbGlwLCBwYXRoKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX29uZShjb25zdCBjaGFyICpwYXRoKQoreworCWludCBzdGF0X2Vycm5vID0gMDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChtYXJrX3ZhbGlkX29ubHkgfHwgbWFya19za2lwX3dvcmt0cmVlX29ubHkgfHwgZm9yY2VfcmVtb3ZlIHx8CisJICAgIG1hcmtfZnNtb25pdG9yX29ubHkpCisJCXN0LnN0X21vZGUgPSAwOworCWVsc2UgaWYgKGxzdGF0KHBhdGgsICZzdCkgPCAwKSB7CisJCXN0LnN0X21vZGUgPSAwOworCQlzdGF0X2Vycm5vID0gZXJybm87CisJfSAvKiBlbHNlIHN0YXQgaXMgdmFsaWQgKi8KKworCWlmICghdmVyaWZ5X3BhdGgocGF0aCwgc3Quc3RfbW9kZSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJJZ25vcmluZyBwYXRoICVzXG4iLCBwYXRoKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobWFya192YWxpZF9vbmx5KSB7CisJCWlmIChtYXJrX2NlX2ZsYWdzKHBhdGgsIENFX1ZBTElELCBtYXJrX3ZhbGlkX29ubHkgPT0gTUFSS19GTEFHKSkKKwkJCWRpZSgiVW5hYmxlIHRvIG1hcmsgZmlsZSAlcyIsIHBhdGgpOworCQlyZXR1cm47CisJfQorCWlmIChtYXJrX3NraXBfd29ya3RyZWVfb25seSkgeworCQlpZiAobWFya19jZV9mbGFncyhwYXRoLCBDRV9TS0lQX1dPUktUUkVFLCBtYXJrX3NraXBfd29ya3RyZWVfb25seSA9PSBNQVJLX0ZMQUcpKQorCQkJZGllKCJVbmFibGUgdG8gbWFyayBmaWxlICVzIiwgcGF0aCk7CisJCXJldHVybjsKKwl9CisJaWYgKG1hcmtfZnNtb25pdG9yX29ubHkpIHsKKwkJaWYgKG1hcmtfY2VfZmxhZ3MocGF0aCwgQ0VfRlNNT05JVE9SX1ZBTElELCBtYXJrX2ZzbW9uaXRvcl9vbmx5ID09IE1BUktfRkxBRykpCisJCQlkaWUoIlVuYWJsZSB0byBtYXJrIGZpbGUgJXMiLCBwYXRoKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChmb3JjZV9yZW1vdmUpIHsKKwkJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCkpCisJCQlkaWUoImdpdCB1cGRhdGUtaW5kZXg6IHVuYWJsZSB0byByZW1vdmUgJXMiLCBwYXRoKTsKKwkJcmVwb3J0KCJyZW1vdmUgJyVzJyIsIHBhdGgpOworCQlyZXR1cm47CisJfQorCWlmIChwcm9jZXNzX3BhdGgocGF0aCwgJnN0LCBzdGF0X2Vycm5vKSkKKwkJZGllKCJVbmFibGUgdG8gcHJvY2VzcyBwYXRoICVzIiwgcGF0aCk7CisJcmVwb3J0KCJhZGQgJyVzJyIsIHBhdGgpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2luZGV4X2luZm8oaW50IG51bF90ZXJtX2xpbmUpCit7CisJY29uc3QgaW50IGhleHN6ID0gdGhlX2hhc2hfYWxnby0+aGV4c3o7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHVxID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2dldGxpbmVfZm4gZ2V0bGluZV9mbjsKKworCWdldGxpbmVfZm4gPSBudWxfdGVybV9saW5lID8gc3RyYnVmX2dldGxpbmVfbnVsIDogc3RyYnVmX2dldGxpbmVfbGY7CisJd2hpbGUgKGdldGxpbmVfZm4oJmJ1Ziwgc3RkaW4pICE9IEVPRikgeworCQljaGFyICpwdHIsICp0YWI7CisJCWNoYXIgKnBhdGhfbmFtZTsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXVuc2lnbmVkIGludCBtb2RlOworCQl1bnNpZ25lZCBsb25nIHVsOworCQlpbnQgc3RhZ2U7CisKKwkJLyogVGhpcyByZWFkcyBsaW5lcyBmb3JtYXR0ZWQgaW4gb25lIG9mIHRocmVlIGZvcm1hdHM6CisJCSAqCisJCSAqICgxKSBtb2RlICAgICAgICAgU1Agc2hhMSAgICAgICAgICBUQUIgcGF0aAorCQkgKiBUaGUgZmlyc3QgZm9ybWF0IGlzIHdoYXQgImdpdCBhcHBseSAtLWluZGV4LWluZm8iCisJCSAqIHJlcG9ydHMsIGFuZCB1c2VkIHRvIHJlY29uc3RydWN0IGEgcGFydGlhbCB0cmVlCisJCSAqIHRoYXQgaXMgdXNlZCBmb3IgcGhvbnkgbWVyZ2UgYmFzZSB0cmVlIHdoZW4gZmFsbGluZworCQkgKiBiYWNrIG9uIDMtd2F5IG1lcmdlLgorCQkgKgorCQkgKiAoMikgbW9kZSBTUCB0eXBlIFNQIHNoYTEgICAgICAgICAgVEFCIHBhdGgKKwkJICogVGhlIHNlY29uZCBmb3JtYXQgaXMgdG8gc3R1ZmYgImdpdCBscy10cmVlIiBvdXRwdXQKKwkJICogaW50byB0aGUgaW5kZXggZmlsZS4KKwkJICoKKwkJICogKDMpIG1vZGUgICAgICAgICBTUCBzaGExIFNQIHN0YWdlIFRBQiBwYXRoCisJCSAqIFRoaXMgZm9ybWF0IGlzIHRvIHB1dCBoaWdoZXIgb3JkZXIgc3RhZ2VzIGludG8gdGhlCisJCSAqIGluZGV4IGZpbGUgYW5kIG1hdGNoZXMgImdpdCBscy1maWxlcyAtLXN0YWdlIiBvdXRwdXQuCisJCSAqLworCQllcnJubyA9IDA7CisJCXVsID0gc3RydG91bChidWYuYnVmLCAmcHRyLCA4KTsKKwkJaWYgKHB0ciA9PSBidWYuYnVmIHx8ICpwdHIgIT0gJyAnCisJCSAgICB8fCBlcnJubyB8fCAodW5zaWduZWQgaW50KSB1bCAhPSB1bCkKKwkJCWdvdG8gYmFkX2xpbmU7CisJCW1vZGUgPSB1bDsKKworCQl0YWIgPSBzdHJjaHIocHRyLCAnXHQnKTsKKwkJaWYgKCF0YWIgfHwgdGFiIC0gcHRyIDwgaGV4c3ogKyAxKQorCQkJZ290byBiYWRfbGluZTsKKworCQlpZiAodGFiWy0yXSA9PSAnICcgJiYgJzAnIDw9IHRhYlstMV0gJiYgdGFiWy0xXSA8PSAnMycpIHsKKwkJCXN0YWdlID0gdGFiWy0xXSAtICcwJzsKKwkJCXB0ciA9IHRhYiArIDE7IC8qIHBvaW50IGF0IHRoZSBoZWFkIG9mIHBhdGggKi8KKwkJCXRhYiA9IHRhYiAtIDI7IC8qIHBvaW50IGF0IHRhaWwgb2Ygc2hhMSAqLworCQl9CisJCWVsc2UgeworCQkJc3RhZ2UgPSAwOworCQkJcHRyID0gdGFiICsgMTsgLyogcG9pbnQgYXQgdGhlIGhlYWQgb2YgcGF0aCAqLworCQl9CisKKwkJaWYgKGdldF9vaWRfaGV4KHRhYiAtIGhleHN6LCAmb2lkKSB8fAorCQkJdGFiWy0oaGV4c3ogKyAxKV0gIT0gJyAnKQorCQkJZ290byBiYWRfbGluZTsKKworCQlwYXRoX25hbWUgPSBwdHI7CisJCWlmICghbnVsX3Rlcm1fbGluZSAmJiBwYXRoX25hbWVbMF0gPT0gJyInKSB7CisJCQlzdHJidWZfcmVzZXQoJnVxKTsKKwkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnVxLCBwYXRoX25hbWUsIE5VTEwpKSB7CisJCQkJZGllKCJnaXQgdXBkYXRlLWluZGV4OiBiYWQgcXVvdGluZyBvZiBwYXRoIG5hbWUiKTsKKwkJCX0KKwkJCXBhdGhfbmFtZSA9IHVxLmJ1ZjsKKwkJfQorCisJCWlmICghdmVyaWZ5X3BhdGgocGF0aF9uYW1lLCBtb2RlKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJJZ25vcmluZyBwYXRoICVzXG4iLCBwYXRoX25hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIW1vZGUpIHsKKwkJCS8qIG1vZGUgPT0gMCBtZWFucyB0aGVyZSBpcyBubyBzdWNoIHBhdGggLS0gcmVtb3ZlICovCisJCQlpZiAocmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoX25hbWUpKQorCQkJCWRpZSgiZ2l0IHVwZGF0ZS1pbmRleDogdW5hYmxlIHRvIHJlbW92ZSAlcyIsCisJCQkJICAgIHB0cik7CisJCX0KKwkJZWxzZSB7CisJCQkvKiBtb2RlICcgJyBzaGExICdcdCcgbmFtZQorCQkJICogcHRyWy0xXSBwb2ludHMgYXQgdGFiLAorCQkJICogcHRyWy00MV0gaXMgYXQgdGhlIGJlZ2lubmluZyBvZiBzaGExCisJCQkgKi8KKwkJCXB0clstKGhleHN6ICsgMildID0gcHRyWy0xXSA9IDA7CisJCQlpZiAoYWRkX2NhY2hlaW5mbyhtb2RlLCAmb2lkLCBwYXRoX25hbWUsIHN0YWdlKSkKKwkJCQlkaWUoImdpdCB1cGRhdGUtaW5kZXg6IHVuYWJsZSB0byB1cGRhdGUgJXMiLAorCQkJCSAgICBwYXRoX25hbWUpOworCQl9CisJCWNvbnRpbnVlOworCisJYmFkX2xpbmU6CisJCWRpZSgibWFsZm9ybWVkIGluZGV4IGluZm8gJXMiLCBidWYuYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnVxKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1cGRhdGVfaW5kZXhfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIiksCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CitzdGF0aWMgc3RydWN0IG9iamVjdF9pZCBtZXJnZV9oZWFkX29pZDsKKworc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqcmVhZF9vbmVfZW50KGNvbnN0IGNoYXIgKndoaWNoLAorCQkJCQlzdHJ1Y3Qgb2JqZWN0X2lkICplbnQsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCWludCBuYW1lbGVuLCBpbnQgc3RhZ2UpCit7CisJdW5zaWduZWQgc2hvcnQgbW9kZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJaWYgKGdldF90cmVlX2VudHJ5KHRoZV9yZXBvc2l0b3J5LCBlbnQsIHBhdGgsICZvaWQsICZtb2RlKSkgeworCQlpZiAod2hpY2gpCisJCQllcnJvcigiJXM6IG5vdCBpbiAlcyBicmFuY2guIiwgcGF0aCwgd2hpY2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKG1vZGUgPT0gU19JRkRJUikgeworCQlpZiAod2hpY2gpCisJCQllcnJvcigiJXM6IG5vdCBhIGJsb2IgaW4gJXMgYnJhbmNoLiIsIHBhdGgsIHdoaWNoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWNlID0gbWFrZV9lbXB0eV9jYWNoZV9lbnRyeSgmdGhlX2luZGV4LCBuYW1lbGVuKTsKKworCW9pZGNweSgmY2UtPm9pZCwgJm9pZCk7CisJbWVtY3B5KGNlLT5uYW1lLCBwYXRoLCBuYW1lbGVuKTsKKwljZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3Moc3RhZ2UpOworCWNlLT5jZV9uYW1lbGVuID0gbmFtZWxlbjsKKwljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworCXJldHVybiBjZTsKK30KKworc3RhdGljIGludCB1bnJlc29sdmVfb25lKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7CisJaW50IHBvczsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlXzIgPSBOVUxMLCAqY2VfMyA9IE5VTEw7CisKKwkvKiBTZWUgaWYgdGhlcmUgaXMgc3VjaCBlbnRyeSBpbiB0aGUgaW5kZXguICovCisJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbmFtZWxlbik7CisJaWYgKDAgPD0gcG9zKSB7CisJCS8qIGFscmVhZHkgbWVyZ2VkICovCisJCXBvcyA9IHVubWVyZ2VfY2FjaGVfZW50cnlfYXQocG9zKTsKKwkJaWYgKHBvcyA8IGFjdGl2ZV9ucikgeworCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQkJaWYgKGNlX3N0YWdlKGNlKSAmJgorCQkJICAgIGNlX25hbWVsZW4oY2UpID09IG5hbWVsZW4gJiYKKwkJCSAgICAhbWVtY21wKGNlLT5uYW1lLCBwYXRoLCBuYW1lbGVuKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQkvKiBubyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb247IGZhbGwgYmFjayAqLworCX0gZWxzZSB7CisJCS8qIElmIHRoZXJlIGlzbid0LCBlaXRoZXIgaXQgaXMgdW5tZXJnZWQsIG9yCisJCSAqIHJlc29sdmVkIGFzICJyZW1vdmVkIiBieSBtaXN0YWtlLiAgV2UgZG8gbm90CisJCSAqIHdhbnQgdG8gZG8gYW55dGhpbmcgaW4gdGhlIGZvcm1lciBjYXNlLgorCQkgKi8KKwkJcG9zID0gLXBvcy0xOworCQlpZiAocG9zIDwgYWN0aXZlX25yKSB7CisJCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCQlpZiAoY2VfbmFtZWxlbihjZSkgPT0gbmFtZWxlbiAmJgorCQkJICAgICFtZW1jbXAoY2UtPm5hbWUsIHBhdGgsIG5hbWVsZW4pKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSIlczogc2tpcHBpbmcgc3RpbGwgdW5tZXJnZWQgcGF0aC5cbiIsCisJCQkJCXBhdGgpOworCQkJCWdvdG8gZnJlZV9yZXR1cm47CisJCQl9CisJCX0KKwl9CisKKwkvKiBHcmFiIGJsb2JzIGZyb20gZ2l2ZW4gcGF0aCBmcm9tIEhFQUQgYW5kIE1FUkdFX0hFQUQsCisJICogc3R1ZmYgSEVBRCB2ZXJzaW9uIGluIHN0YWdlICMyLAorCSAqIHN0dWZmIE1FUkdFX0hFQUQgdmVyc2lvbiBpbiBzdGFnZSAjMy4KKwkgKi8KKwljZV8yID0gcmVhZF9vbmVfZW50KCJvdXIiLCAmaGVhZF9vaWQsIHBhdGgsIG5hbWVsZW4sIDIpOworCWNlXzMgPSByZWFkX29uZV9lbnQoInRoZWlyIiwgJm1lcmdlX2hlYWRfb2lkLCBwYXRoLCBuYW1lbGVuLCAzKTsKKworCWlmICghY2VfMiB8fCAhY2VfMykgeworCQlyZXQgPSAtMTsKKwkJZ290byBmcmVlX3JldHVybjsKKwl9CisJaWYgKG9pZGVxKCZjZV8yLT5vaWQsICZjZV8zLT5vaWQpICYmCisJICAgIGNlXzItPmNlX21vZGUgPT0gY2VfMy0+Y2VfbW9kZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBpZGVudGljYWwgaW4gYm90aCwgc2tpcHBpbmcuXG4iLAorCQkJcGF0aCk7CisJCWdvdG8gZnJlZV9yZXR1cm47CisJfQorCisJcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKTsKKwlpZiAoYWRkX2NhY2hlX2VudHJ5KGNlXzIsIEFERF9DQUNIRV9PS19UT19BREQpKSB7CisJCWVycm9yKCIlczogY2Fubm90IGFkZCBvdXIgdmVyc2lvbiB0byB0aGUgaW5kZXguIiwgcGF0aCk7CisJCXJldCA9IC0xOworCQlnb3RvIGZyZWVfcmV0dXJuOworCX0KKwlpZiAoIWFkZF9jYWNoZV9lbnRyeShjZV8zLCBBRERfQ0FDSEVfT0tfVE9fQUREKSkKKwkJcmV0dXJuIDA7CisJZXJyb3IoIiVzOiBjYW5ub3QgYWRkIHRoZWlyIHZlcnNpb24gdG8gdGhlIGluZGV4LiIsIHBhdGgpOworCXJldCA9IC0xOworIGZyZWVfcmV0dXJuOgorCWRpc2NhcmRfY2FjaGVfZW50cnkoY2VfMik7CisJZGlzY2FyZF9jYWNoZV9lbnRyeShjZV8zKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZWFkX2hlYWRfcG9pbnRlcnModm9pZCkKK3sKKwlpZiAocmVhZF9yZWYoIkhFQUQiLCAmaGVhZF9vaWQpKQorCQlkaWUoIk5vIEhFQUQgLS0gbm8gaW5pdGlhbCBjb21taXQgeWV0PyIpOworCWlmIChyZWFkX3JlZigiTUVSR0VfSEVBRCIsICZtZXJnZV9oZWFkX29pZCkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJOb3QgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLlxuIik7CisJCWV4aXQoMCk7CisJfQorfQorCitzdGF0aWMgaW50IGRvX3VucmVzb2x2ZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwKKwkJCWNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHByZWZpeF9sZW5ndGgpCit7CisJaW50IGk7CisJaW50IGVyciA9IDA7CisKKwkvKiBSZWFkIEhFQUQgYW5kIE1FUkdFX0hFQUQ7IGlmIE1FUkdFX0hFQUQgZG9lcyBub3QgZXhpc3QsIHdlCisJICogYXJlIG5vdCBkb2luZyBhIG1lcmdlLCBzbyBleGl0IHdpdGggc3VjY2VzcyBzdGF0dXMuCisJICovCisJcmVhZF9oZWFkX3BvaW50ZXJzKCk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYWM7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhdltpXTsKKwkJY2hhciAqcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgYXJnKTsKKwkJZXJyIHw9IHVucmVzb2x2ZV9vbmUocCk7CisJCWZyZWUocCk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZG9fcmV1cGRhdGUoaW50IGFjLCBjb25zdCBjaGFyICoqYXYsCisJCSAgICAgICBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJLyogUmVhZCBIRUFEIGFuZCBydW4gdXBkYXRlLWluZGV4IG9uIHBhdGhzIHRoYXQgYXJlCisJICogbWVyZ2VkIGFuZCBhbHJlYWR5IGRpZmZlcmVudCBiZXR3ZWVuIGluZGV4IGFuZCBIRUFELgorCSAqLworCWludCBwb3M7CisJaW50IGhhc19oZWFkID0gMTsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisKKwlwYXJzZV9wYXRoc3BlYygmcGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfQ1dELAorCQkgICAgICAgcHJlZml4LCBhdiArIDEpOworCisJaWYgKHJlYWRfcmVmKCJIRUFEIiwgJmhlYWRfb2lkKSkKKwkJLyogSWYgdGhlcmUgaXMgbm8gSEVBRCwgdGhhdCBtZWFucyBpdCBpcyBhbiBpbml0aWFsCisJCSAqIGNvbW1pdC4gIFVwZGF0ZSBldmVyeXRoaW5nIGluIHRoZSBpbmRleC4KKwkJICovCisJCWhhc19oZWFkID0gMDsKKyByZWRvOgorCWZvciAocG9zID0gMDsgcG9zIDwgYWN0aXZlX25yOyBwb3MrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkID0gTlVMTDsKKwkJaW50IHNhdmVfbnI7CisJCWNoYXIgKnBhdGg7CisKKwkJaWYgKGNlX3N0YWdlKGNlKSB8fCAhY2VfcGF0aF9tYXRjaCgmdGhlX2luZGV4LCBjZSwgJnBhdGhzcGVjLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaGFzX2hlYWQpCisJCQlvbGQgPSByZWFkX29uZV9lbnQoTlVMTCwgJmhlYWRfb2lkLAorCQkJCQkgICBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIDApOworCQlpZiAob2xkICYmIGNlLT5jZV9tb2RlID09IG9sZC0+Y2VfbW9kZSAmJgorCQkgICAgb2lkZXEoJmNlLT5vaWQsICZvbGQtPm9pZCkpIHsKKwkJCWRpc2NhcmRfY2FjaGVfZW50cnkob2xkKTsKKwkJCWNvbnRpbnVlOyAvKiB1bmNoYW5nZWQgKi8KKwkJfQorCQkvKiBCZSBjYXJlZnVsLiAgVGhlIHdvcmtpbmcgdHJlZSBtYXkgbm90IGhhdmUgdGhlCisJCSAqIHBhdGggYW55bW9yZSwgaW4gd2hpY2ggY2FzZSwgdW5kZXIgJ2FsbG93X3JlbW92ZScsCisJCSAqIG9yIHdvcnNlIHlldCAnYWxsb3dfcmVwbGFjZScsIGFjdGl2ZV9uciBtYXkgZGVjcmVhc2UuCisJCSAqLworCQlzYXZlX25yID0gYWN0aXZlX25yOworCQlwYXRoID0geHN0cmR1cChjZS0+bmFtZSk7CisJCXVwZGF0ZV9vbmUocGF0aCk7CisJCWZyZWUocGF0aCk7CisJCWRpc2NhcmRfY2FjaGVfZW50cnkob2xkKTsKKwkJaWYgKHNhdmVfbnIgIT0gYWN0aXZlX25yKQorCQkJZ290byByZWRvOworCX0KKwljbGVhcl9wYXRoc3BlYygmcGF0aHNwZWMpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmVmcmVzaF9wYXJhbXMgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwlpbnQgKmhhc19lcnJvcnM7Cit9OworCitzdGF0aWMgaW50IHJlZnJlc2goc3RydWN0IHJlZnJlc2hfcGFyYW1zICpvLCB1bnNpZ25lZCBpbnQgZmxhZykKK3sKKwlzZXR1cF93b3JrX3RyZWUoKTsKKwlyZWFkX2NhY2hlKCk7CisJKm8tPmhhc19lcnJvcnMgfD0gcmVmcmVzaF9jYWNoZShvLT5mbGFncyB8IGZsYWcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlZnJlc2hfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCXJldHVybiByZWZyZXNoKG9wdC0+dmFsdWUsIDApOworfQorCitzdGF0aWMgaW50IHJlYWxseV9yZWZyZXNoX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJQlVHX09OX09QVF9BUkcoYXJnKTsKKwlyZXR1cm4gcmVmcmVzaChvcHQtPnZhbHVlLCBSRUZSRVNIX1JFQUxMWSk7Cit9CisKK3N0YXRpYyBpbnQgY2htb2RfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWNoYXIgKmZsaXAgPSBvcHQtPnZhbHVlOworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlpZiAoKGFyZ1swXSAhPSAnLScgJiYgYXJnWzBdICE9ICcrJykgfHwgYXJnWzFdICE9ICd4JyB8fCBhcmdbMl0pCisJCXJldHVybiBlcnJvcigib3B0aW9uICdjaG1vZCcgZXhwZWN0cyBcIit4XCIgb3IgXCIteFwiIik7CisJKmZsaXAgPSBhcmdbMF07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVzb2x2ZV91bmRvX2NsZWFyX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJQlVHX09OX09QVF9BUkcoYXJnKTsKKwlyZXNvbHZlX3VuZG9fY2xlYXIoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9uZXdfc3R5bGVfY2FjaGVpbmZvKGNvbnN0IGNoYXIgKmFyZywKKwkJCQkgICAgIHVuc2lnbmVkIGludCAqbW9kZSwKKwkJCQkgICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKipwYXRoKQoreworCXVuc2lnbmVkIGxvbmcgdWw7CisJY2hhciAqZW5kcDsKKwljb25zdCBjaGFyICpwOworCisJaWYgKCFhcmcpCisJCXJldHVybiAtMTsKKworCWVycm5vID0gMDsKKwl1bCA9IHN0cnRvdWwoYXJnLCAmZW5kcCwgOCk7CisJaWYgKGVycm5vIHx8IGVuZHAgPT0gYXJnIHx8ICplbmRwICE9ICcsJyB8fCAodW5zaWduZWQgaW50KSB1bCAhPSB1bCkKKwkJcmV0dXJuIC0xOyAvKiBub3QgYSBuZXctc3R5bGUgY2FjaGVpbmZvICovCisJKm1vZGUgPSB1bDsKKwllbmRwKys7CisJaWYgKHBhcnNlX29pZF9oZXgoZW5kcCwgb2lkLCAmcCkgfHwgKnAgIT0gJywnKQorCQlyZXR1cm4gLTE7CisJKnBhdGggPSBwICsgMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gcGFyc2Vfb3B0X3Jlc3VsdCBjYWNoZWluZm9fY2FsbGJhY2soCisJc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LCBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJdW5zaWduZWQgaW50IG1vZGU7CisJY29uc3QgY2hhciAqcGF0aDsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCisJaWYgKCFwYXJzZV9uZXdfc3R5bGVfY2FjaGVpbmZvKGN0eC0+YXJndlsxXSwgJm1vZGUsICZvaWQsICZwYXRoKSkgeworCQlpZiAoYWRkX2NhY2hlaW5mbyhtb2RlLCAmb2lkLCBwYXRoLCAwKSkKKwkJCWRpZSgiZ2l0IHVwZGF0ZS1pbmRleDogLS1jYWNoZWluZm8gY2Fubm90IGFkZCAlcyIsIHBhdGgpOworCQljdHgtPmFyZ3YrKzsKKwkJY3R4LT5hcmdjLS07CisJCXJldHVybiAwOworCX0KKwlpZiAoY3R4LT5hcmdjIDw9IDMpCisJCXJldHVybiBlcnJvcigib3B0aW9uICdjYWNoZWluZm8nIGV4cGVjdHMgPG1vZGU+LDxzaGExPiw8cGF0aD4iKTsKKwlpZiAoc3RydG91bF91aSgqKytjdHgtPmFyZ3YsIDgsICZtb2RlKSB8fAorCSAgICBnZXRfb2lkX2hleCgqKytjdHgtPmFyZ3YsICZvaWQpIHx8CisJICAgIGFkZF9jYWNoZWluZm8obW9kZSwgJm9pZCwgKisrY3R4LT5hcmd2LCAwKSkKKwkJZGllKCJnaXQgdXBkYXRlLWluZGV4OiAtLWNhY2hlaW5mbyBjYW5ub3QgYWRkICVzIiwgKmN0eC0+YXJndik7CisJY3R4LT5hcmdjIC09IDM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIHBhcnNlX29wdF9yZXN1bHQgc3RkaW5fY2FjaGVpbmZvX2NhbGxiYWNrKAorCXN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWludCAqbnVsX3Rlcm1fbGluZSA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJQlVHX09OX09QVF9BUkcoYXJnKTsKKworCWlmIChjdHgtPmFyZ2MgIT0gMSkKKwkJcmV0dXJuIGVycm9yKCJvcHRpb24gJyVzJyBtdXN0IGJlIHRoZSBsYXN0IGFyZ3VtZW50Iiwgb3B0LT5sb25nX25hbWUpOworCWFsbG93X2FkZCA9IGFsbG93X3JlcGxhY2UgPSBhbGxvd19yZW1vdmUgPSAxOworCXJlYWRfaW5kZXhfaW5mbygqbnVsX3Rlcm1fbGluZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIHBhcnNlX29wdF9yZXN1bHQgc3RkaW5fY2FsbGJhY2soCisJc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LCBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50ICpyZWFkX2Zyb21fc3RkaW4gPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisKKwlpZiAoY3R4LT5hcmdjICE9IDEpCisJCXJldHVybiBlcnJvcigib3B0aW9uICclcycgbXVzdCBiZSB0aGUgbGFzdCBhcmd1bWVudCIsIG9wdC0+bG9uZ19uYW1lKTsKKwkqcmVhZF9mcm9tX3N0ZGluID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gcGFyc2Vfb3B0X3Jlc3VsdCB1bnJlc29sdmVfY2FsbGJhY2soCisJc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LCBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50ICpoYXNfZXJyb3JzID0gb3B0LT52YWx1ZTsKKwljb25zdCBjaGFyICpwcmVmaXggPSBzdGFydHVwX2luZm8tPnByZWZpeDsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCisJLyogY29uc3VtZSByZW1haW5pbmcgYXJndW1lbnRzLiAqLworCSpoYXNfZXJyb3JzID0gZG9fdW5yZXNvbHZlKGN0eC0+YXJnYywgY3R4LT5hcmd2LAorCQkJCXByZWZpeCwgcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwKTsKKwlpZiAoKmhhc19lcnJvcnMpCisJCWFjdGl2ZV9jYWNoZV9jaGFuZ2VkID0gMDsKKworCWN0eC0+YXJndiArPSBjdHgtPmFyZ2MgLSAxOworCWN0eC0+YXJnYyA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIHBhcnNlX29wdF9yZXN1bHQgcmV1cGRhdGVfY2FsbGJhY2soCisJc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LCBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50ICpoYXNfZXJyb3JzID0gb3B0LT52YWx1ZTsKKwljb25zdCBjaGFyICpwcmVmaXggPSBzdGFydHVwX2luZm8tPnByZWZpeDsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCisJLyogY29uc3VtZSByZW1haW5pbmcgYXJndW1lbnRzLiAqLworCXNldHVwX3dvcmtfdHJlZSgpOworCSpoYXNfZXJyb3JzID0gZG9fcmV1cGRhdGUoY3R4LT5hcmdjLCBjdHgtPmFyZ3YsIHByZWZpeCk7CisJaWYgKCpoYXNfZXJyb3JzKQorCQlhY3RpdmVfY2FjaGVfY2hhbmdlZCA9IDA7CisKKwljdHgtPmFyZ3YgKz0gY3R4LT5hcmdjIC0gMTsKKwljdHgtPmFyZ2MgPSAxOworCXJldHVybiAwOworfQorCitpbnQgY21kX3VwZGF0ZV9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgbmV3ZmQsIGVudHJpZXMsIGhhc19lcnJvcnMgPSAwLCBudWxfdGVybV9saW5lID0gMDsKKwllbnVtIHVjX21vZGUgdW50cmFja2VkX2NhY2hlID0gVUNfVU5TUEVDSUZJRUQ7CisJaW50IHJlYWRfZnJvbV9zdGRpbiA9IDA7CisJaW50IHByZWZpeF9sZW5ndGggPSBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDA7CisJaW50IHByZWZlcnJlZF9pbmRleF9mb3JtYXQgPSAwOworCWNoYXIgc2V0X2V4ZWN1dGFibGVfYml0ID0gMDsKKwlzdHJ1Y3QgcmVmcmVzaF9wYXJhbXMgcmVmcmVzaF9hcmdzID0gezAsICZoYXNfZXJyb3JzfTsKKwlpbnQgbG9ja19lcnJvciA9IDA7CisJaW50IHNwbGl0X2luZGV4ID0gLTE7CisJaW50IGZvcmNlX3dyaXRlID0gMDsKKwlpbnQgZnNtb25pdG9yID0gLTE7CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGUgPSBMT0NLX0lOSVQ7CisJc3RydWN0IHBhcnNlX29wdF9jdHhfdCBjdHg7CisJc3RyYnVmX2dldGxpbmVfZm4gZ2V0bGluZV9mbjsKKwlpbnQgcGFyc2VvcHRfc3RhdGUgPSBQQVJTRV9PUFRfVU5LTk9XTjsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqciA9IHRoZV9yZXBvc2l0b3J5OworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQklUKCdxJywgTlVMTCwgJnJlZnJlc2hfYXJncy5mbGFncywKKwkJCU5fKCJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiKSwKKwkJCVJFRlJFU0hfUVVJRVQpLAorCQlPUFRfQklUKDAsICJpZ25vcmUtc3VibW9kdWxlcyIsICZyZWZyZXNoX2FyZ3MuZmxhZ3MsCisJCQlOXygicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiKSwKKwkJCVJFRlJFU0hfSUdOT1JFX1NVQk1PRFVMRVMpLAorCQlPUFRfU0VUX0lOVCgwLCAiYWRkIiwgJmFsbG93X2FkZCwKKwkJCU5fKCJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIpLCAxKSwKKwkJT1BUX1NFVF9JTlQoMCwgInJlcGxhY2UiLCAmYWxsb3dfcmVwbGFjZSwKKwkJCU5fKCJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIpLCAxKSwKKwkJT1BUX1NFVF9JTlQoMCwgInJlbW92ZSIsICZhbGxvd19yZW1vdmUsCisJCQlOXygibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIpLCAxKSwKKwkJT1BUX0JJVCgwLCAidW5tZXJnZWQiLCAmcmVmcmVzaF9hcmdzLmZsYWdzLAorCQkJTl8oInJlZnJlc2ggZXZlbiBpZiBpbmRleCBjb250YWlucyB1bm1lcmdlZCBlbnRyaWVzIiksCisJCQlSRUZSRVNIX1VOTUVSR0VEKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgInJlZnJlc2giLCAmcmVmcmVzaF9hcmdzLCBOVUxMLAorCQkJTl8oInJlZnJlc2ggc3RhdCBpbmZvcm1hdGlvbiIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLAorCQkJcmVmcmVzaF9jYWxsYmFjayksCisJCU9QVF9DQUxMQkFDS19GKDAsICJyZWFsbHktcmVmcmVzaCIsICZyZWZyZXNoX2FyZ3MsIE5VTEwsCisJCQlOXygibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsCisJCQlyZWFsbHlfcmVmcmVzaF9jYWxsYmFjayksCisJCXtPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0ssIDAsICJjYWNoZWluZm8iLCBOVUxMLAorCQkJTl8oIjxtb2RlPiw8b2JqZWN0Piw8cGF0aD4iKSwKKwkJCU5fKCJhZGQgdGhlIHNwZWNpZmllZCBlbnRyeSB0byB0aGUgaW5kZXgiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IC8qIGRpc2FsbG93IC0tY2FjaGVpbmZvPTxtb2RlPiBmb3JtICovCisJCQlQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQLAorCQkJTlVMTCwgMCwKKwkJCWNhY2hlaW5mb19jYWxsYmFja30sCisJCU9QVF9DQUxMQkFDS19GKDAsICJjaG1vZCIsICZzZXRfZXhlY3V0YWJsZV9iaXQsICIoK3wtKXgiLAorCQkJTl8oIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIiksCisJCQlQQVJTRV9PUFRfTk9ORUcsCisJCQljaG1vZF9jYWxsYmFjayksCisJCXtPUFRJT05fU0VUX0lOVCwgMCwgImFzc3VtZS11bmNoYW5nZWQiLCAmbWFya192YWxpZF9vbmx5LCBOVUxMLAorCQkJTl8oIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBOVUxMLCBNQVJLX0ZMQUd9LAorCQl7T1BUSU9OX1NFVF9JTlQsIDAsICJuby1hc3N1bWUtdW5jaGFuZ2VkIiwgJm1hcmtfdmFsaWRfb25seSwgTlVMTCwKKwkJCU5fKCJjbGVhciBhc3N1bWVkLXVuY2hhbmdlZCBiaXQiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgVU5NQVJLX0ZMQUd9LAorCQl7T1BUSU9OX1NFVF9JTlQsIDAsICJza2lwLXdvcmt0cmVlIiwgJm1hcmtfc2tpcF93b3JrdHJlZV9vbmx5LCBOVUxMLAorCQkJTl8oIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgTUFSS19GTEFHfSwKKwkJe09QVElPTl9TRVRfSU5ULCAwLCAibm8tc2tpcC13b3JrdHJlZSIsICZtYXJrX3NraXBfd29ya3RyZWVfb25seSwgTlVMTCwKKwkJCU5fKCJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBOVUxMLCBVTk1BUktfRkxBR30sCisJCU9QVF9CT09MKDAsICJpZ25vcmUtc2tpcC13b3JrdHJlZS1lbnRyaWVzIiwgJmlnbm9yZV9za2lwX3dvcmt0cmVlX2VudHJpZXMsCisJCQkgTl8oImRvIG5vdCB0b3VjaCBpbmRleC1vbmx5IGVudHJpZXMiKSksCisJCU9QVF9TRVRfSU5UKDAsICJpbmZvLW9ubHkiLCAmaW5mb19vbmx5LAorCQkJTl8oImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIiksIDEpLAorCQlPUFRfU0VUX0lOVCgwLCAiZm9yY2UtcmVtb3ZlIiwgJmZvcmNlX3JlbW92ZSwKKwkJCU5fKCJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIiksIDEpLAorCQlPUFRfQk9PTCgneicsIE5VTEwsICZudWxfdGVybV9saW5lLAorCQkJIE5fKCJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiKSksCisJCXtPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0ssIDAsICJzdGRpbiIsICZyZWFkX2Zyb21fc3RkaW4sIE5VTEwsCisJCQlOXygicmVhZCBsaXN0IG9mIHBhdGhzIHRvIGJlIHVwZGF0ZWQgZnJvbSBzdGFuZGFyZCBpbnB1dCIpLAorCQkJUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PQVJHLAorCQkJTlVMTCwgMCwgc3RkaW5fY2FsbGJhY2t9LAorCQl7T1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLLCAwLCAiaW5kZXgtaW5mbyIsICZudWxfdGVybV9saW5lLCBOVUxMLAorCQkJTl8oImFkZCBlbnRyaWVzIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGluZGV4IiksCisJCQlQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9BUkcsCisJCQlOVUxMLCAwLCBzdGRpbl9jYWNoZWluZm9fY2FsbGJhY2t9LAorCQl7T1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLLCAwLCAidW5yZXNvbHZlIiwgJmhhc19lcnJvcnMsIE5VTEwsCisJCQlOXygicmVwb3B1bGF0ZSBzdGFnZXMgIzIgYW5kICMzIGZvciB0aGUgbGlzdGVkIHBhdGhzIiksCisJCQlQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9BUkcsCisJCQlOVUxMLCAwLCB1bnJlc29sdmVfY2FsbGJhY2t9LAorCQl7T1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLLCAnZycsICJhZ2FpbiIsICZoYXNfZXJyb3JzLCBOVUxMLAorCQkJTl8oIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIiksCisJCQlQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9BUkcsCisJCQlOVUxMLCAwLCByZXVwZGF0ZV9jYWxsYmFja30sCisJCU9QVF9CSVQoMCwgImlnbm9yZS1taXNzaW5nIiwgJnJlZnJlc2hfYXJncy5mbGFncywKKwkJCU5fKCJpZ25vcmUgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIiksCisJCQlSRUZSRVNIX0lHTk9SRV9NSVNTSU5HKSwKKwkJT1BUX1NFVF9JTlQoMCwgInZlcmJvc2UiLCAmdmVyYm9zZSwKKwkJCU5fKCJyZXBvcnQgYWN0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQiKSwgMSksCisJCU9QVF9DQUxMQkFDS19GKDAsICJjbGVhci1yZXNvbHZlLXVuZG8iLCBOVUxMLCBOVUxMLAorCQkJTl8oIihmb3IgcG9yY2VsYWlucykgZm9yZ2V0IHNhdmVkIHVucmVzb2x2ZWQgY29uZmxpY3RzIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsCisJCQlyZXNvbHZlX3VuZG9fY2xlYXJfY2FsbGJhY2spLAorCQlPUFRfSU5URUdFUigwLCAiaW5kZXgtdmVyc2lvbiIsICZwcmVmZXJyZWRfaW5kZXhfZm9ybWF0LAorCQkJTl8oIndyaXRlIGluZGV4IGluIHRoaXMgZm9ybWF0IikpLAorCQlPUFRfQk9PTCgwLCAic3BsaXQtaW5kZXgiLCAmc3BsaXRfaW5kZXgsCisJCQlOXygiZW5hYmxlIG9yIGRpc2FibGUgc3BsaXQgaW5kZXgiKSksCisJCU9QVF9CT09MKDAsICJ1bnRyYWNrZWQtY2FjaGUiLCAmdW50cmFja2VkX2NhY2hlLAorCQkJTl8oImVuYWJsZS9kaXNhYmxlIHVudHJhY2tlZCBjYWNoZSIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgInRlc3QtdW50cmFja2VkLWNhY2hlIiwgJnVudHJhY2tlZF9jYWNoZSwKKwkJCSAgICBOXygidGVzdCBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyB1bnRyYWNrZWQgY2FjaGUiKSwgVUNfVEVTVCksCisJCU9QVF9TRVRfSU5UKDAsICJmb3JjZS11bnRyYWNrZWQtY2FjaGUiLCAmdW50cmFja2VkX2NhY2hlLAorCQkJICAgIE5fKCJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIpLCBVQ19GT1JDRSksCisJCU9QVF9TRVRfSU5UKDAsICJmb3JjZS13cml0ZS1pbmRleCIsICZmb3JjZV93cml0ZSwKKwkJCU5fKCJ3cml0ZSBvdXQgdGhlIGluZGV4IGV2ZW4gaWYgaXMgbm90IGZsYWdnZWQgYXMgY2hhbmdlZCIpLCAxKSwKKwkJT1BUX0JPT0woMCwgImZzbW9uaXRvciIsICZmc21vbml0b3IsCisJCQlOXygiZW5hYmxlIG9yIGRpc2FibGUgZmlsZSBzeXN0ZW0gbW9uaXRvciIpKSwKKwkJe09QVElPTl9TRVRfSU5ULCAwLCAiZnNtb25pdG9yLXZhbGlkIiwgJm1hcmtfZnNtb25pdG9yX29ubHksIE5VTEwsCisJCQlOXygibWFyayBmaWxlcyBhcyBmc21vbml0b3IgdmFsaWQiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgTUFSS19GTEFHfSwKKwkJe09QVElPTl9TRVRfSU5ULCAwLCAibm8tZnNtb25pdG9yLXZhbGlkIiwgJm1hcmtfZnNtb25pdG9yX29ubHksIE5VTEwsCisJCQlOXygiY2xlYXIgZnNtb25pdG9yIHZhbGlkIGJpdCIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBOVUxMLCBVTk1BUktfRkxBR30sCisJCU9QVF9FTkQoKQorCX07CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1cGRhdGVfaW5kZXhfdXNhZ2UsIG9wdGlvbnMpOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJLyogd2Ugd2lsbCBkaWFnbm9zZSBsYXRlciBpZiBpdCB0dXJucyBvdXQgdGhhdCB3ZSBuZWVkIHRvIHVwZGF0ZSBpdCAqLworCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMCk7CisJaWYgKG5ld2ZkIDwgMCkKKwkJbG9ja19lcnJvciA9IGVycm5vOworCisJZW50cmllcyA9IHJlYWRfY2FjaGUoKTsKKwlpZiAoZW50cmllcyA8IDApCisJCWRpZSgiY2FjaGUgY29ycnVwdGVkIik7CisKKwl0aGVfaW5kZXgudXBkYXRlZF9za2lwd29ya3RyZWUgPSAxOworCisJLyoKKwkgKiBDdXN0b20gY29weSBvZiBwYXJzZV9vcHRpb25zKCkgYmVjYXVzZSB3ZSB3YW50IHRvIGhhbmRsZQorCSAqIGZpbGVuYW1lIGFyZ3VtZW50cyBhcyB0aGV5IGNvbWUuCisJICovCisJcGFyc2Vfb3B0aW9uc19zdGFydCgmY3R4LCBhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQkgICAgb3B0aW9ucywgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisJd2hpbGUgKGN0eC5hcmdjKSB7CisJCWlmIChwYXJzZW9wdF9zdGF0ZSAhPSBQQVJTRV9PUFRfRE9ORSkKKwkJCXBhcnNlb3B0X3N0YXRlID0gcGFyc2Vfb3B0aW9uc19zdGVwKCZjdHgsIG9wdGlvbnMsCisJCQkJCQkJICAgIHVwZGF0ZV9pbmRleF91c2FnZSk7CisJCWlmICghY3R4LmFyZ2MpCisJCQlicmVhazsKKwkJc3dpdGNoIChwYXJzZW9wdF9zdGF0ZSkgeworCQljYXNlIFBBUlNFX09QVF9IRUxQOgorCQljYXNlIFBBUlNFX09QVF9FUlJPUjoKKwkJCWV4aXQoMTI5KTsKKwkJY2FzZSBQQVJTRV9PUFRfQ09NUExFVEU6CisJCQlleGl0KDApOworCQljYXNlIFBBUlNFX09QVF9OT05fT1BUSU9OOgorCQljYXNlIFBBUlNFX09QVF9ET05FOgorCQl7CisJCQljb25zdCBjaGFyICpwYXRoID0gY3R4LmFyZ3ZbMF07CisJCQljaGFyICpwOworCisJCQlzZXR1cF93b3JrX3RyZWUoKTsKKwkJCXAgPSBwcmVmaXhfcGF0aChwcmVmaXgsIHByZWZpeF9sZW5ndGgsIHBhdGgpOworCQkJdXBkYXRlX29uZShwKTsKKwkJCWlmIChzZXRfZXhlY3V0YWJsZV9iaXQpCisJCQkJY2htb2RfcGF0aChzZXRfZXhlY3V0YWJsZV9iaXQsIHApOworCQkJZnJlZShwKTsKKwkJCWN0eC5hcmdjLS07CisJCQljdHguYXJndisrOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBQQVJTRV9PUFRfVU5LTk9XTjoKKwkJCWlmIChjdHguYXJndlswXVsxXSA9PSAnLScpCisJCQkJZXJyb3IoInVua25vd24gb3B0aW9uICclcyciLCBjdHguYXJndlswXSArIDIpOworCQkJZWxzZQorCQkJCWVycm9yKCJ1bmtub3duIHN3aXRjaCAnJWMnIiwgKmN0eC5vcHQpOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVwZGF0ZV9pbmRleF91c2FnZSwgb3B0aW9ucyk7CisJCX0KKwl9CisJYXJnYyA9IHBhcnNlX29wdGlvbnNfZW5kKCZjdHgpOworCisJZ2V0bGluZV9mbiA9IG51bF90ZXJtX2xpbmUgPyBzdHJidWZfZ2V0bGluZV9udWwgOiBzdHJidWZfZ2V0bGluZV9sZjsKKwlpZiAocHJlZmVycmVkX2luZGV4X2Zvcm1hdCkgeworCQlpZiAocHJlZmVycmVkX2luZGV4X2Zvcm1hdCA8IElOREVYX0ZPUk1BVF9MQiB8fAorCQkgICAgSU5ERVhfRk9STUFUX1VCIDwgcHJlZmVycmVkX2luZGV4X2Zvcm1hdCkKKwkJCWRpZSgiaW5kZXgtdmVyc2lvbiAlZCBub3QgaW4gcmFuZ2U6ICVkLi4lZCIsCisJCQkgICAgcHJlZmVycmVkX2luZGV4X2Zvcm1hdCwKKwkJCSAgICBJTkRFWF9GT1JNQVRfTEIsIElOREVYX0ZPUk1BVF9VQik7CisKKwkJaWYgKHRoZV9pbmRleC52ZXJzaW9uICE9IHByZWZlcnJlZF9pbmRleF9mb3JtYXQpCisJCQlhY3RpdmVfY2FjaGVfY2hhbmdlZCB8PSBTT01FVEhJTkdfQ0hBTkdFRDsKKwkJdGhlX2luZGV4LnZlcnNpb24gPSBwcmVmZXJyZWRfaW5kZXhfZm9ybWF0OworCX0KKworCWlmIChyZWFkX2Zyb21fc3RkaW4pIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IHN0cmJ1ZiB1bnF1b3RlZCA9IFNUUkJVRl9JTklUOworCisJCXNldHVwX3dvcmtfdHJlZSgpOworCQl3aGlsZSAoZ2V0bGluZV9mbigmYnVmLCBzdGRpbikgIT0gRU9GKSB7CisJCQljaGFyICpwOworCQkJaWYgKCFudWxfdGVybV9saW5lICYmIGJ1Zi5idWZbMF0gPT0gJyInKSB7CisJCQkJc3RyYnVmX3Jlc2V0KCZ1bnF1b3RlZCk7CisJCQkJaWYgKHVucXVvdGVfY19zdHlsZSgmdW5xdW90ZWQsIGJ1Zi5idWYsIE5VTEwpKQorCQkJCQlkaWUoImxpbmUgaXMgYmFkbHkgcXVvdGVkIik7CisJCQkJc3RyYnVmX3N3YXAoJmJ1ZiwgJnVucXVvdGVkKTsKKwkJCX0KKwkJCXAgPSBwcmVmaXhfcGF0aChwcmVmaXgsIHByZWZpeF9sZW5ndGgsIGJ1Zi5idWYpOworCQkJdXBkYXRlX29uZShwKTsKKwkJCWlmIChzZXRfZXhlY3V0YWJsZV9iaXQpCisJCQkJY2htb2RfcGF0aChzZXRfZXhlY3V0YWJsZV9iaXQsIHApOworCQkJZnJlZShwKTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmdW5xdW90ZWQpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9CisKKwlpZiAoc3BsaXRfaW5kZXggPiAwKSB7CisJCWlmIChnaXRfY29uZmlnX2dldF9zcGxpdF9pbmRleCgpID09IDApCisJCQl3YXJuaW5nKF8oImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gZmFsc2U7ICIKKwkJCQkgICJyZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorCQkJCSAgImVuYWJsZSBzcGxpdCBpbmRleCIpKTsKKwkJaWYgKHRoZV9pbmRleC5zcGxpdF9pbmRleCkKKwkJCXRoZV9pbmRleC5jYWNoZV9jaGFuZ2VkIHw9IFNQTElUX0lOREVYX09SREVSRUQ7CisJCWVsc2UKKwkJCWFkZF9zcGxpdF9pbmRleCgmdGhlX2luZGV4KTsKKwl9IGVsc2UgaWYgKCFzcGxpdF9pbmRleCkgeworCQlpZiAoZ2l0X2NvbmZpZ19nZXRfc3BsaXRfaW5kZXgoKSA9PSAxKQorCQkJd2FybmluZyhfKCJjb3JlLnNwbGl0SW5kZXggaXMgc2V0IHRvIHRydWU7ICIKKwkJCQkgICJyZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorCQkJCSAgImRpc2FibGUgc3BsaXQgaW5kZXgiKSk7CisJCXJlbW92ZV9zcGxpdF9pbmRleCgmdGhlX2luZGV4KTsKKwl9CisKKwlwcmVwYXJlX3JlcG9fc2V0dGluZ3Mocik7CisJc3dpdGNoICh1bnRyYWNrZWRfY2FjaGUpIHsKKwljYXNlIFVDX1VOU1BFQ0lGSUVEOgorCQlicmVhazsKKwljYXNlIFVDX0RJU0FCTEU6CisJCWlmIChyLT5zZXR0aW5ncy5jb3JlX3VudHJhY2tlZF9jYWNoZSA9PSBVTlRSQUNLRURfQ0FDSEVfV1JJVEUpCisJCQl3YXJuaW5nKF8oImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIHRydWU7ICIKKwkJCQkgICJyZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorCQkJCSAgImRpc2FibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIpKTsKKwkJcmVtb3ZlX3VudHJhY2tlZF9jYWNoZSgmdGhlX2luZGV4KTsKKwkJcmVwb3J0KF8oIlVudHJhY2tlZCBjYWNoZSBkaXNhYmxlZCIpKTsKKwkJYnJlYWs7CisJY2FzZSBVQ19URVNUOgorCQlzZXR1cF93b3JrX3RyZWUoKTsKKwkJcmV0dXJuICF0ZXN0X2lmX3VudHJhY2tlZF9jYWNoZV9pc19zdXBwb3J0ZWQoKTsKKwljYXNlIFVDX0VOQUJMRToKKwljYXNlIFVDX0ZPUkNFOgorCQlpZiAoci0+c2V0dGluZ3MuY29yZV91bnRyYWNrZWRfY2FjaGUgPT0gVU5UUkFDS0VEX0NBQ0hFX1JFTU9WRSkKKwkJCXdhcm5pbmcoXygiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gZmFsc2U7ICIKKwkJCQkgICJyZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorCQkJCSAgImVuYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIikpOworCQlhZGRfdW50cmFja2VkX2NhY2hlKCZ0aGVfaW5kZXgpOworCQlyZXBvcnQoXygiVW50cmFja2VkIGNhY2hlIGVuYWJsZWQgZm9yICclcyciKSwgZ2V0X2dpdF93b3JrX3RyZWUoKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygiYmFkIHVudHJhY2tlZF9jYWNoZSB2YWx1ZTogJWQiLCB1bnRyYWNrZWRfY2FjaGUpOworCX0KKworCWlmIChmc21vbml0b3IgPiAwKSB7CisJCWlmIChnaXRfY29uZmlnX2dldF9mc21vbml0b3IoKSA9PSAwKQorCQkJd2FybmluZyhfKCJjb3JlLmZzbW9uaXRvciBpcyB1bnNldDsgIgorCQkJCSJzZXQgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKwkJCQkiZW5hYmxlIGZzbW9uaXRvciIpKTsKKwkJYWRkX2ZzbW9uaXRvcigmdGhlX2luZGV4KTsKKwkJcmVwb3J0KF8oImZzbW9uaXRvciBlbmFibGVkIikpOworCX0gZWxzZSBpZiAoIWZzbW9uaXRvcikgeworCQlpZiAoZ2l0X2NvbmZpZ19nZXRfZnNtb25pdG9yKCkgPT0gMSkKKwkJCXdhcm5pbmcoXygiY29yZS5mc21vbml0b3IgaXMgc2V0OyAiCisJCQkJInJlbW92ZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorCQkJCSJkaXNhYmxlIGZzbW9uaXRvciIpKTsKKwkJcmVtb3ZlX2ZzbW9uaXRvcigmdGhlX2luZGV4KTsKKwkJcmVwb3J0KF8oImZzbW9uaXRvciBkaXNhYmxlZCIpKTsKKwl9CisKKwlpZiAoYWN0aXZlX2NhY2hlX2NoYW5nZWQgfHwgZm9yY2Vfd3JpdGUpIHsKKwkJaWYgKG5ld2ZkIDwgMCkgeworCQkJaWYgKHJlZnJlc2hfYXJncy5mbGFncyAmIFJFRlJFU0hfUVVJRVQpCisJCQkJZXhpdCgxMjgpOworCQkJdW5hYmxlX3RvX2xvY2tfZGllKGdldF9pbmRleF9maWxlKCksIGxvY2tfZXJyb3IpOworCQl9CisJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmxvY2tfZmlsZSwgQ09NTUlUX0xPQ0spKQorCQkJZGllKCJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKTsKKwl9CisKKwlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2tfZmlsZSk7CisKKwlyZXR1cm4gaGFzX2Vycm9ycyA/IDEgOiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi91cGRhdGUtcmVmLmMgYi9idWlsdGluL3VwZGF0ZS1yZWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzRkZDlhNgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdXBkYXRlLXJlZi5jCkBAIC0wLDAgKzEsNTYwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfdXBkYXRlX3JlZl91c2FnZVtdID0geworCU5fKCJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iKSwKKwlOXygiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gICAgPHJlZm5hbWU+IDxuZXctdmFsPiBbPG9sZC12YWw+XSIpLAorCU5fKCJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtLXN0ZGluIFstel0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY2hhciBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXBkYXRlX2ZsYWdzOworc3RhdGljIHVuc2lnbmVkIGludCBkZWZhdWx0X2ZsYWdzOworc3RhdGljIHVuc2lnbmVkIGNyZWF0ZV9yZWZsb2dfZmxhZzsKK3N0YXRpYyBjb25zdCBjaGFyICptc2c7CisKKy8qCisgKiBQYXJzZSBvbmUgd2hpdGVzcGFjZS0gb3IgTlVMLXRlcm1pbmF0ZWQsIHBvc3NpYmx5IEMtcXVvdGVkIGFyZ3VtZW50CisgKiBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8gYXJnLiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdGVybWluYXRvci4KKyAqIERpZSBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBob3cgdGhlIGFyZ3VtZW50IGlzIEMtcXVvdGVkLiAgVGhpcworICogZnVuY3Rpb24gaXMgb25seSB1c2VkIGlmIG5vdCAtei4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2FyZyhjb25zdCBjaGFyICpuZXh0LCBzdHJ1Y3Qgc3RyYnVmICphcmcpCit7CisJaWYgKCpuZXh0ID09ICciJykgeworCQljb25zdCBjaGFyICpvcmlnID0gbmV4dDsKKworCQlpZiAodW5xdW90ZV9jX3N0eWxlKGFyZywgbmV4dCwgJm5leHQpKQorCQkJZGllKCJiYWRseSBxdW90ZWQgYXJndW1lbnQ6ICVzIiwgb3JpZyk7CisJCWlmICgqbmV4dCAmJiAhaXNzcGFjZSgqbmV4dCkpCisJCQlkaWUoInVuZXhwZWN0ZWQgY2hhcmFjdGVyIGFmdGVyIHF1b3RlZCBhcmd1bWVudDogJXMiLCBvcmlnKTsKKwl9IGVsc2UgeworCQl3aGlsZSAoKm5leHQgJiYgIWlzc3BhY2UoKm5leHQpKQorCQkJc3RyYnVmX2FkZGNoKGFyZywgKm5leHQrKyk7CisJfQorCisJcmV0dXJuIG5leHQ7Cit9CisKKy8qCisgKiBQYXJzZSB0aGUgcmVmZXJlbmNlIG5hbWUgaW1tZWRpYXRlbHkgYWZ0ZXIgImNvbW1hbmQgU1AiLiAgSWYgbm90CisgKiAteiwgdGhlbiBoYW5kbGUgQy1xdW90aW5nLiAgUmV0dXJuIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZAorICogc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIHJlZmVyZW5jZSwgb3IgTlVMTCBpZiB0aGVyZSB3YXMKKyAqIGFuIGVycm9yLiAgVXBkYXRlICpuZXh0IHRvIHBvaW50IGF0IHRoZSBjaGFyYWN0ZXIgdGhhdCB0ZXJtaW5hdGVzCisgKiB0aGUgYXJndW1lbnQuICBEaWUgaWYgQy1xdW90aW5nIGlzIG1hbGZvcm1lZCBvciB0aGUgcmVmZXJlbmNlIG5hbWUKKyAqIGlzIGludmFsaWQuCisgKi8KK3N0YXRpYyBjaGFyICpwYXJzZV9yZWZuYW1lKGNvbnN0IGNoYXIgKipuZXh0KQoreworCXN0cnVjdCBzdHJidWYgcmVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAobGluZV90ZXJtaW5hdGlvbikgeworCQkvKiBXaXRob3V0IC16LCB1c2UgdGhlIG5leHQgYXJndW1lbnQgKi8KKwkJKm5leHQgPSBwYXJzZV9hcmcoKm5leHQsICZyZWYpOworCX0gZWxzZSB7CisJCS8qIFdpdGggLXosIHVzZSBldmVyeXRoaW5nIHVwIHRvIHRoZSBuZXh0IE5VTCAqLworCQlzdHJidWZfYWRkc3RyKCZyZWYsICpuZXh0KTsKKwkJKm5leHQgKz0gcmVmLmxlbjsKKwl9CisKKwlpZiAoIXJlZi5sZW4pIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnJlZik7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChyZWYuYnVmLCBSRUZOQU1FX0FMTE9XX09ORUxFVkVMKSkKKwkJZGllKCJpbnZhbGlkIHJlZiBmb3JtYXQ6ICVzIiwgcmVmLmJ1Zik7CisKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmcmVmLCBOVUxMKTsKK30KKworLyoKKyAqIFRoZSB2YWx1ZSBiZWluZyBwYXJzZWQgaXMgPG9sZHZhbHVlPiAoYXMgb3Bwb3NlZCB0byA8bmV3dmFsdWU+OyB0aGUKKyAqIGRpZmZlcmVuY2UgYWZmZWN0cyB3aGljaCBlcnJvciBtZXNzYWdlcyBhcmUgZ2VuZXJhdGVkKToKKyAqLworI2RlZmluZSBQQVJTRV9TSEExX09MRCAweDAxCisKKy8qCisgKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGFjY2VwdCBhbiBlbXB0eSBzdHJpbmcgZm9yIHVwZGF0ZSdzCisgKiA8bmV3dmFsdWU+IGluIGJpbmFyeSBtb2RlIHRvIGJlIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyB6ZXJvcy4KKyAqLworI2RlZmluZSBQQVJTRV9TSEExX0FMTE9XX0VNUFRZIDB4MDIKKworLyoKKyAqIFBhcnNlIGFuIGFyZ3VtZW50IHNlcGFyYXRvciBmb2xsb3dlZCBieSB0aGUgbmV4dCBhcmd1bWVudCwgaWYgYW55LgorICogSWYgdGhlcmUgaXMgYW4gYXJndW1lbnQsIGNvbnZlcnQgaXQgdG8gYSBTSEEtMSwgd3JpdGUgaXQgdG8gc2hhMSwKKyAqIHNldCAqbmV4dCB0byBwb2ludCBhdCB0aGUgY2hhcmFjdGVyIHRlcm1pbmF0aW5nIHRoZSBhcmd1bWVudCwgYW5kCisgKiByZXR1cm4gMC4gIElmIHRoZXJlIGlzIG5vIGFyZ3VtZW50IGF0IGFsbCAobm90IGV2ZW4gdGhlIGVtcHR5CisgKiBzdHJpbmcpLCByZXR1cm4gMSBhbmQgbGVhdmUgKm5leHQgdW5jaGFuZ2VkLiAgSWYgdGhlIHZhbHVlIGlzCisgKiBwcm92aWRlZCBidXQgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFNIQS0xLCBkaWUuICBmbGFncyBjYW4KKyAqIGluY2x1ZGUgUEFSU0VfU0hBMV9PTEQgYW5kL29yIFBBUlNFX1NIQTFfQUxMT1dfRU1QVFkuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfbmV4dF9vaWQoY29uc3QgY2hhciAqKm5leHQsIGNvbnN0IGNoYXIgKmVuZCwKKwkJCSAgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICBjb25zdCBjaGFyICpjb21tYW5kLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN0cmJ1ZiBhcmcgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICgqbmV4dCA9PSBlbmQpCisJCWdvdG8gZW9mOworCisJaWYgKGxpbmVfdGVybWluYXRpb24pIHsKKwkJLyogV2l0aG91dCAteiwgY29uc3VtZSBTUCBhbmQgdXNlIG5leHQgYXJndW1lbnQgKi8KKwkJaWYgKCEqKm5leHQgfHwgKipuZXh0ID09IGxpbmVfdGVybWluYXRpb24pCisJCQlyZXR1cm4gMTsKKwkJaWYgKCoqbmV4dCAhPSAnICcpCisJCQlkaWUoIiVzICVzOiBleHBlY3RlZCBTUCBidXQgZ290OiAlcyIsCisJCQkgICAgY29tbWFuZCwgcmVmbmFtZSwgKm5leHQpOworCQkoKm5leHQpKys7CisJCSpuZXh0ID0gcGFyc2VfYXJnKCpuZXh0LCAmYXJnKTsKKwkJaWYgKGFyZy5sZW4pIHsKKwkJCWlmIChnZXRfb2lkKGFyZy5idWYsIG9pZCkpCisJCQkJZ290byBpbnZhbGlkOworCQl9IGVsc2UgeworCQkJLyogV2l0aG91dCAteiwgYW4gZW1wdHkgdmFsdWUgbWVhbnMgYWxsIHplcm9zOiAqLworCQkJb2lkY2xyKG9pZCk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBXaXRoIC16LCByZWFkIHRoZSBuZXh0IE5VTC10ZXJtaW5hdGVkIGxpbmUgKi8KKwkJaWYgKCoqbmV4dCkKKwkJCWRpZSgiJXMgJXM6IGV4cGVjdGVkIE5VTCBidXQgZ290OiAlcyIsCisJCQkgICAgY29tbWFuZCwgcmVmbmFtZSwgKm5leHQpOworCQkoKm5leHQpKys7CisJCWlmICgqbmV4dCA9PSBlbmQpCisJCQlnb3RvIGVvZjsKKwkJc3RyYnVmX2FkZHN0cigmYXJnLCAqbmV4dCk7CisJCSpuZXh0ICs9IGFyZy5sZW47CisKKwkJaWYgKGFyZy5sZW4pIHsKKwkJCWlmIChnZXRfb2lkKGFyZy5idWYsIG9pZCkpCisJCQkJZ290byBpbnZhbGlkOworCQl9IGVsc2UgaWYgKGZsYWdzICYgUEFSU0VfU0hBMV9BTExPV19FTVBUWSkgeworCQkJLyogV2l0aCAteiwgdHJlYXQgYW4gZW1wdHkgdmFsdWUgYXMgYWxsIHplcm9zOiAqLworCQkJd2FybmluZygiJXMgJXM6IG1pc3NpbmcgPG5ld3ZhbHVlPiwgdHJlYXRpbmcgYXMgemVybyIsCisJCQkJY29tbWFuZCwgcmVmbmFtZSk7CisJCQlvaWRjbHIob2lkKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBXaXRoIC16LCBhbiBlbXB0eSBub24tcmVxdWlyZWQgdmFsdWUgbWVhbnMKKwkJCSAqIHVuc3BlY2lmaWVkOgorCQkJICovCisJCQlyZXQgPSAxOworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmFyZyk7CisKKwlyZXR1cm4gcmV0OworCisgaW52YWxpZDoKKwlkaWUoZmxhZ3MgJiBQQVJTRV9TSEExX09MRCA/CisJICAgICIlcyAlczogaW52YWxpZCA8b2xkdmFsdWU+OiAlcyIgOgorCSAgICAiJXMgJXM6IGludmFsaWQgPG5ld3ZhbHVlPjogJXMiLAorCSAgICBjb21tYW5kLCByZWZuYW1lLCBhcmcuYnVmKTsKKworIGVvZjoKKwlkaWUoZmxhZ3MgJiBQQVJTRV9TSEExX09MRCA/CisJICAgICIlcyAlczogdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgd2hlbiByZWFkaW5nIDxvbGR2YWx1ZT4iIDoKKwkgICAgIiVzICVzOiB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHJlYWRpbmcgPG5ld3ZhbHVlPiIsCisJICAgIGNvbW1hbmQsIHJlZm5hbWUpOworfQorCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGZpdmUgcGFyc2VfY21kXyooKSBmdW5jdGlvbnMgcGFyc2UgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIGNvbW1hbmQuICBJbiBlYWNoIGNhc2UsIG5leHQgcG9pbnRzIGF0IHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZQorICogY29tbWFuZCBuYW1lIGFuZCB0aGUgZm9sbG93aW5nIHNwYWNlLiAgVGhleSBlYWNoIHJldHVybiBhIHBvaW50ZXIKKyAqIHRvIHRoZSBjaGFyYWN0ZXIgdGVybWluYXRpbmcgdGhlIGNvbW1hbmQsIGFuZCBkaWUgd2l0aCBhbgorICogZXhwbGFuYXRvcnkgbWVzc2FnZSBpZiB0aGVyZSBhcmUgYW55IHBhcnNpbmcgcHJvYmxlbXMuICBBbGwgb2YKKyAqIHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgZWl0aGVyIHRleHQgb3IgYmluYXJ5IGZvcm1hdCBpbnB1dCwKKyAqIGRlcGVuZGluZyBvbiBob3cgbGluZV90ZXJtaW5hdGlvbiBpcyBzZXQuCisgKi8KKworc3RhdGljIHZvaWQgcGFyc2VfY21kX3VwZGF0ZShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgICAgY29uc3QgY2hhciAqbmV4dCwgY29uc3QgY2hhciAqZW5kKQoreworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcmVmbmFtZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG5ld19vaWQsIG9sZF9vaWQ7CisJaW50IGhhdmVfb2xkOworCisJcmVmbmFtZSA9IHBhcnNlX3JlZm5hbWUoJm5leHQpOworCWlmICghcmVmbmFtZSkKKwkJZGllKCJ1cGRhdGU6IG1pc3NpbmcgPHJlZj4iKTsKKworCWlmIChwYXJzZV9uZXh0X29pZCgmbmV4dCwgZW5kLCAmbmV3X29pZCwgInVwZGF0ZSIsIHJlZm5hbWUsCisJCQkgICBQQVJTRV9TSEExX0FMTE9XX0VNUFRZKSkKKwkJZGllKCJ1cGRhdGUgJXM6IG1pc3NpbmcgPG5ld3ZhbHVlPiIsIHJlZm5hbWUpOworCisJaGF2ZV9vbGQgPSAhcGFyc2VfbmV4dF9vaWQoJm5leHQsIGVuZCwgJm9sZF9vaWQsICJ1cGRhdGUiLCByZWZuYW1lLAorCQkJCSAgIFBBUlNFX1NIQTFfT0xEKTsKKworCWlmICgqbmV4dCAhPSBsaW5lX3Rlcm1pbmF0aW9uKQorCQlkaWUoInVwZGF0ZSAlczogZXh0cmEgaW5wdXQ6ICVzIiwgcmVmbmFtZSwgbmV4dCk7CisKKwlpZiAocmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSh0cmFuc2FjdGlvbiwgcmVmbmFtZSwKKwkJCQkgICAmbmV3X29pZCwgaGF2ZV9vbGQgPyAmb2xkX29pZCA6IE5VTEwsCisJCQkJICAgdXBkYXRlX2ZsYWdzIHwgY3JlYXRlX3JlZmxvZ19mbGFnLAorCQkJCSAgIG1zZywgJmVycikpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKworCXVwZGF0ZV9mbGFncyA9IGRlZmF1bHRfZmxhZ3M7CisJZnJlZShyZWZuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfY21kX2NyZWF0ZShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgICAgY29uc3QgY2hhciAqbmV4dCwgY29uc3QgY2hhciAqZW5kKQoreworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcmVmbmFtZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG5ld19vaWQ7CisKKwlyZWZuYW1lID0gcGFyc2VfcmVmbmFtZSgmbmV4dCk7CisJaWYgKCFyZWZuYW1lKQorCQlkaWUoImNyZWF0ZTogbWlzc2luZyA8cmVmPiIpOworCisJaWYgKHBhcnNlX25leHRfb2lkKCZuZXh0LCBlbmQsICZuZXdfb2lkLCAiY3JlYXRlIiwgcmVmbmFtZSwgMCkpCisJCWRpZSgiY3JlYXRlICVzOiBtaXNzaW5nIDxuZXd2YWx1ZT4iLCByZWZuYW1lKTsKKworCWlmIChpc19udWxsX29pZCgmbmV3X29pZCkpCisJCWRpZSgiY3JlYXRlICVzOiB6ZXJvIDxuZXd2YWx1ZT4iLCByZWZuYW1lKTsKKworCWlmICgqbmV4dCAhPSBsaW5lX3Rlcm1pbmF0aW9uKQorCQlkaWUoImNyZWF0ZSAlczogZXh0cmEgaW5wdXQ6ICVzIiwgcmVmbmFtZSwgbmV4dCk7CisKKwlpZiAocmVmX3RyYW5zYWN0aW9uX2NyZWF0ZSh0cmFuc2FjdGlvbiwgcmVmbmFtZSwgJm5ld19vaWQsCisJCQkJICAgdXBkYXRlX2ZsYWdzIHwgY3JlYXRlX3JlZmxvZ19mbGFnLAorCQkJCSAgIG1zZywgJmVycikpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKworCXVwZGF0ZV9mbGFncyA9IGRlZmF1bHRfZmxhZ3M7CisJZnJlZShyZWZuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfY21kX2RlbGV0ZShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgICAgY29uc3QgY2hhciAqbmV4dCwgY29uc3QgY2hhciAqZW5kKQoreworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcmVmbmFtZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9sZF9vaWQ7CisJaW50IGhhdmVfb2xkOworCisJcmVmbmFtZSA9IHBhcnNlX3JlZm5hbWUoJm5leHQpOworCWlmICghcmVmbmFtZSkKKwkJZGllKCJkZWxldGU6IG1pc3NpbmcgPHJlZj4iKTsKKworCWlmIChwYXJzZV9uZXh0X29pZCgmbmV4dCwgZW5kLCAmb2xkX29pZCwgImRlbGV0ZSIsIHJlZm5hbWUsCisJCQkgICBQQVJTRV9TSEExX09MRCkpIHsKKwkJaGF2ZV9vbGQgPSAwOworCX0gZWxzZSB7CisJCWlmIChpc19udWxsX29pZCgmb2xkX29pZCkpCisJCQlkaWUoImRlbGV0ZSAlczogemVybyA8b2xkdmFsdWU+IiwgcmVmbmFtZSk7CisJCWhhdmVfb2xkID0gMTsKKwl9CisKKwlpZiAoKm5leHQgIT0gbGluZV90ZXJtaW5hdGlvbikKKwkJZGllKCJkZWxldGUgJXM6IGV4dHJhIGlucHV0OiAlcyIsIHJlZm5hbWUsIG5leHQpOworCisJaWYgKHJlZl90cmFuc2FjdGlvbl9kZWxldGUodHJhbnNhY3Rpb24sIHJlZm5hbWUsCisJCQkJICAgaGF2ZV9vbGQgPyAmb2xkX29pZCA6IE5VTEwsCisJCQkJICAgdXBkYXRlX2ZsYWdzLCBtc2csICZlcnIpKQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisKKwl1cGRhdGVfZmxhZ3MgPSBkZWZhdWx0X2ZsYWdzOworCWZyZWUocmVmbmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NtZF92ZXJpZnkoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICAgIGNvbnN0IGNoYXIgKm5leHQsIGNvbnN0IGNoYXIgKmVuZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWNoYXIgKnJlZm5hbWU7CisJc3RydWN0IG9iamVjdF9pZCBvbGRfb2lkOworCisJcmVmbmFtZSA9IHBhcnNlX3JlZm5hbWUoJm5leHQpOworCWlmICghcmVmbmFtZSkKKwkJZGllKCJ2ZXJpZnk6IG1pc3NpbmcgPHJlZj4iKTsKKworCWlmIChwYXJzZV9uZXh0X29pZCgmbmV4dCwgZW5kLCAmb2xkX29pZCwgInZlcmlmeSIsIHJlZm5hbWUsCisJCQkgICBQQVJTRV9TSEExX09MRCkpCisJCW9pZGNscigmb2xkX29pZCk7CisKKwlpZiAoKm5leHQgIT0gbGluZV90ZXJtaW5hdGlvbikKKwkJZGllKCJ2ZXJpZnkgJXM6IGV4dHJhIGlucHV0OiAlcyIsIHJlZm5hbWUsIG5leHQpOworCisJaWYgKHJlZl90cmFuc2FjdGlvbl92ZXJpZnkodHJhbnNhY3Rpb24sIHJlZm5hbWUsICZvbGRfb2lkLAorCQkJCSAgIHVwZGF0ZV9mbGFncywgJmVycikpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKworCXVwZGF0ZV9mbGFncyA9IGRlZmF1bHRfZmxhZ3M7CisJZnJlZShyZWZuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfY21kX29wdGlvbihzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgICAgY29uc3QgY2hhciAqbmV4dCwgY29uc3QgY2hhciAqZW5kKQoreworCWNvbnN0IGNoYXIgKnJlc3Q7CisJaWYgKHNraXBfcHJlZml4KG5leHQsICJuby1kZXJlZiIsICZyZXN0KSAmJiAqcmVzdCA9PSBsaW5lX3Rlcm1pbmF0aW9uKQorCQl1cGRhdGVfZmxhZ3MgfD0gUkVGX05PX0RFUkVGOworCWVsc2UKKwkJZGllKCJvcHRpb24gdW5rbm93bjogJXMiLCBuZXh0KTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfY21kX3N0YXJ0KHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgIGNvbnN0IGNoYXIgKm5leHQsIGNvbnN0IGNoYXIgKmVuZCkKK3sKKwlpZiAoKm5leHQgIT0gbGluZV90ZXJtaW5hdGlvbikKKwkJZGllKCJzdGFydDogZXh0cmEgaW5wdXQ6ICVzIiwgbmV4dCk7CisJcHV0cygic3RhcnQ6IG9rIik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NtZF9wcmVwYXJlKHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgICAgY29uc3QgY2hhciAqbmV4dCwgY29uc3QgY2hhciAqZW5kKQoreworCXN0cnVjdCBzdHJidWYgZXJyb3IgPSBTVFJCVUZfSU5JVDsKKwlpZiAoKm5leHQgIT0gbGluZV90ZXJtaW5hdGlvbikKKwkJZGllKCJwcmVwYXJlOiBleHRyYSBpbnB1dDogJXMiLCBuZXh0KTsKKwlpZiAocmVmX3RyYW5zYWN0aW9uX3ByZXBhcmUodHJhbnNhY3Rpb24sICZlcnJvcikpCisJCWRpZSgicHJlcGFyZTogJXMiLCBlcnJvci5idWYpOworCXB1dHMoInByZXBhcmU6IG9rIik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NtZF9hYm9ydChzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgICBjb25zdCBjaGFyICpuZXh0LCBjb25zdCBjaGFyICplbmQpCit7CisJc3RydWN0IHN0cmJ1ZiBlcnJvciA9IFNUUkJVRl9JTklUOworCWlmICgqbmV4dCAhPSBsaW5lX3Rlcm1pbmF0aW9uKQorCQlkaWUoImFib3J0OiBleHRyYSBpbnB1dDogJXMiLCBuZXh0KTsKKwlpZiAocmVmX3RyYW5zYWN0aW9uX2Fib3J0KHRyYW5zYWN0aW9uLCAmZXJyb3IpKQorCQlkaWUoImFib3J0OiAlcyIsIGVycm9yLmJ1Zik7CisJcHV0cygiYWJvcnQ6IG9rIik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NtZF9jb21taXQoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICAgIGNvbnN0IGNoYXIgKm5leHQsIGNvbnN0IGNoYXIgKmVuZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGVycm9yID0gU1RSQlVGX0lOSVQ7CisJaWYgKCpuZXh0ICE9IGxpbmVfdGVybWluYXRpb24pCisJCWRpZSgiY29tbWl0OiBleHRyYSBpbnB1dDogJXMiLCBuZXh0KTsKKwlpZiAocmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycm9yKSkKKwkJZGllKCJjb21taXQ6ICVzIiwgZXJyb3IuYnVmKTsKKwlwdXRzKCJjb21taXQ6IG9rIik7CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworfQorCitlbnVtIHVwZGF0ZV9yZWZzX3N0YXRlIHsKKwkvKiBOb24tdHJhbnNhY3Rpb25hbCBzdGF0ZSBvcGVuIGZvciB1cGRhdGVzLiAqLworCVVQREFURV9SRUZTX09QRU4sCisJLyogQSB0cmFuc2FjdGlvbiBoYXMgYmVlbiBzdGFydGVkLiAqLworCVVQREFURV9SRUZTX1NUQVJURUQsCisJLyogUmVmZXJlbmNlcyBhcmUgbG9ja2VkIGFuZCByZWFkeSBmb3IgY29tbWl0ICovCisJVVBEQVRFX1JFRlNfUFJFUEFSRUQsCisJLyogVHJhbnNhY3Rpb24gaGFzIGJlZW4gY29tbWl0dGVkIG9yIGNsb3NlZC4gKi8KKwlVUERBVEVfUkVGU19DTE9TRUQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBhcnNlX2NtZCB7CisJY29uc3QgY2hhciAqcHJlZml4OworCXZvaWQgKCpmbikoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisJdW5zaWduZWQgYXJnczsKKwllbnVtIHVwZGF0ZV9yZWZzX3N0YXRlIHN0YXRlOworfSBjb21tYW5kW10gPSB7CisJeyAidXBkYXRlIiwgIHBhcnNlX2NtZF91cGRhdGUsICAzLCBVUERBVEVfUkVGU19PUEVOIH0sCisJeyAiY3JlYXRlIiwgIHBhcnNlX2NtZF9jcmVhdGUsICAyLCBVUERBVEVfUkVGU19PUEVOIH0sCisJeyAiZGVsZXRlIiwgIHBhcnNlX2NtZF9kZWxldGUsICAyLCBVUERBVEVfUkVGU19PUEVOIH0sCisJeyAidmVyaWZ5IiwgIHBhcnNlX2NtZF92ZXJpZnksICAyLCBVUERBVEVfUkVGU19PUEVOIH0sCisJeyAib3B0aW9uIiwgIHBhcnNlX2NtZF9vcHRpb24sICAxLCBVUERBVEVfUkVGU19PUEVOIH0sCisJeyAic3RhcnQiLCAgIHBhcnNlX2NtZF9zdGFydCwgICAwLCBVUERBVEVfUkVGU19TVEFSVEVEIH0sCisJeyAicHJlcGFyZSIsIHBhcnNlX2NtZF9wcmVwYXJlLCAwLCBVUERBVEVfUkVGU19QUkVQQVJFRCB9LAorCXsgImFib3J0IiwgICBwYXJzZV9jbWRfYWJvcnQsICAgMCwgVVBEQVRFX1JFRlNfQ0xPU0VEIH0sCisJeyAiY29tbWl0IiwgIHBhcnNlX2NtZF9jb21taXQsICAwLCBVUERBVEVfUkVGU19DTE9TRUQgfSwKK307CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWZzX3N0ZGluKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBpbnB1dCA9IFNUUkJVRl9JTklULCBlcnIgPSBTVFJCVUZfSU5JVDsKKwllbnVtIHVwZGF0ZV9yZWZzX3N0YXRlIHN0YXRlID0gVVBEQVRFX1JFRlNfT1BFTjsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKwlpbnQgaSwgajsKKworCXRyYW5zYWN0aW9uID0gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCZlcnIpOworCWlmICghdHJhbnNhY3Rpb24pCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKworCS8qIFJlYWQgZWFjaCBsaW5lIGRpc3BhdGNoIGl0cyBjb21tYW5kICovCisJd2hpbGUgKCFzdHJidWZfZ2V0d2hvbGVsaW5lKCZpbnB1dCwgc3RkaW4sIGxpbmVfdGVybWluYXRpb24pKSB7CisJCWNvbnN0IHN0cnVjdCBwYXJzZV9jbWQgKmNtZCA9IE5VTEw7CisKKwkJaWYgKCppbnB1dC5idWYgPT0gbGluZV90ZXJtaW5hdGlvbikKKwkJCWRpZSgiZW1wdHkgY29tbWFuZCBpbiBpbnB1dCIpOworCQllbHNlIGlmIChpc3NwYWNlKCppbnB1dC5idWYpKQorCQkJZGllKCJ3aGl0ZXNwYWNlIGJlZm9yZSBjb21tYW5kOiAlcyIsIGlucHV0LmJ1Zik7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbWFuZCk7IGkrKykgeworCQkJY29uc3QgY2hhciAqcHJlZml4ID0gY29tbWFuZFtpXS5wcmVmaXg7CisJCQljaGFyIGM7CisKKwkJCWlmICghc3RhcnRzX3dpdGgoaW5wdXQuYnVmLCBwcmVmaXgpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogSWYgdGhlIGNvbW1hbmQgaGFzIGFyZ3VtZW50cywgdmVyaWZ5IHRoYXQgaXQncworCQkJICogZm9sbG93ZWQgYnkgYSBzcGFjZS4gT3RoZXJ3aXNlLCBpdCBzaGFsbCBiZSBmb2xsb3dlZAorCQkJICogYnkgYSBsaW5lIHRlcm1pbmF0b3IuCisJCQkgKi8KKwkJCWMgPSBjb21tYW5kW2ldLmFyZ3MgPyAnICcgOiBsaW5lX3Rlcm1pbmF0aW9uOworCQkJaWYgKGlucHV0LmJ1ZltzdHJsZW4ocHJlZml4KV0gIT0gYykKKwkJCQljb250aW51ZTsKKworCQkJY21kID0gJmNvbW1hbmRbaV07CisJCQlicmVhazsKKwkJfQorCQlpZiAoIWNtZCkKKwkJCWRpZSgidW5rbm93biBjb21tYW5kOiAlcyIsIGlucHV0LmJ1Zik7CisKKwkJLyoKKwkJICogUmVhZCBhZGRpdGlvbmFsIGFyZ3VtZW50cyBpZiBOVUwtdGVybWluYXRlZC4gRG8gbm90IHJhaXNlIGFuCisJCSAqIGVycm9yIGluIGNhc2UgdGhlcmUgaXMgYW4gZWFybHkgRU9GIHRvIGxldCB0aGUgY29tbWFuZAorCQkgKiBoYW5kbGUgbWlzc2luZyBhcmd1bWVudHMgd2l0aCBhIHByb3BlciBlcnJvciBtZXNzYWdlLgorCQkgKi8KKwkJZm9yIChqID0gMTsgbGluZV90ZXJtaW5hdGlvbiA9PSAnXDAnICYmIGogPCBjbWQtPmFyZ3M7IGorKykKKwkJCWlmIChzdHJidWZfYXBwZW5kd2hvbGVsaW5lKCZpbnB1dCwgc3RkaW4sIGxpbmVfdGVybWluYXRpb24pKQorCQkJCWJyZWFrOworCisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBVUERBVEVfUkVGU19PUEVOOgorCQljYXNlIFVQREFURV9SRUZTX1NUQVJURUQ6CisJCQkvKiBEbyBub3QgZG93bmdyYWRlIGEgdHJhbnNhY3Rpb24gdG8gYSBub24tdHJhbnNhY3Rpb24uICovCisJCQlpZiAoY21kLT5zdGF0ZSA+PSBzdGF0ZSkKKwkJCQlzdGF0ZSA9IGNtZC0+c3RhdGU7CisJCQlicmVhazsKKwkJY2FzZSBVUERBVEVfUkVGU19QUkVQQVJFRDoKKwkJCWlmIChjbWQtPnN0YXRlICE9IFVQREFURV9SRUZTX0NMT1NFRCkKKwkJCQlkaWUoInByZXBhcmVkIHRyYW5zYWN0aW9ucyBjYW4gb25seSBiZSBjbG9zZWQiKTsKKwkJCXN0YXRlID0gY21kLT5zdGF0ZTsKKwkJCWJyZWFrOworCQljYXNlIFVQREFURV9SRUZTX0NMT1NFRDoKKwkJCWRpZSgidHJhbnNhY3Rpb24gaXMgY2xvc2VkIik7CisJCQlicmVhazsKKwkJfQorCisJCWNtZC0+Zm4odHJhbnNhY3Rpb24sIGlucHV0LmJ1ZiArIHN0cmxlbihjbWQtPnByZWZpeCkgKyAhIWNtZC0+YXJncywKKwkJCWlucHV0LmJ1ZiArIGlucHV0Lmxlbik7CisJfQorCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgVVBEQVRFX1JFRlNfT1BFTjoKKwkJLyogQ29tbWl0IGJ5IGRlZmF1bHQgaWYgbm8gdHJhbnNhY3Rpb24gd2FzIHJlcXVlc3RlZC4gKi8KKwkJaWYgKHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sICZlcnIpKQorCQkJZGllKCIlcyIsIGVyci5idWYpOworCQlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJCWJyZWFrOworCWNhc2UgVVBEQVRFX1JFRlNfU1RBUlRFRDoKKwljYXNlIFVQREFURV9SRUZTX1BSRVBBUkVEOgorCQkvKiBJZiB1c2luZyBhIHRyYW5zYWN0aW9uLCB3ZSB3YW50IHRvIGFib3J0IGl0LiAqLworCQlpZiAocmVmX3RyYW5zYWN0aW9uX2Fib3J0KHRyYW5zYWN0aW9uLCAmZXJyKSkKKwkJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBVUERBVEVfUkVGU19DTE9TRUQ6CisJCS8qIE90aGVyd2lzZSBubyBuZWVkIHRvIGRvIGFueXRoaW5nLCB0aGUgdHJhbnNhY3Rpb24gd2FzIGNsb3NlZCBhbHJlYWR5LiAqLworCQlicmVhazsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlzdHJidWZfcmVsZWFzZSgmaW5wdXQpOworfQorCitpbnQgY21kX3VwZGF0ZV9yZWYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqcmVmbmFtZSwgKm9sZHZhbDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZCwgb2xkb2lkOworCWludCBkZWxldGUgPSAwLCBub19kZXJlZiA9IDAsIHJlYWRfc3RkaW4gPSAwLCBlbmRfbnVsbCA9IDA7CisJaW50IGNyZWF0ZV9yZWZsb2cgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKCAnbScsIE5VTEwsICZtc2csIE5fKCJyZWFzb24iKSwgTl8oInJlYXNvbiBvZiB0aGUgdXBkYXRlIikpLAorCQlPUFRfQk9PTCgnZCcsIE5VTEwsICZkZWxldGUsIE5fKCJkZWxldGUgdGhlIHJlZmVyZW5jZSIpKSwKKwkJT1BUX0JPT0woIDAgLCAibm8tZGVyZWYiLCAmbm9fZGVyZWYsCisJCQkJCU5fKCJ1cGRhdGUgPHJlZm5hbWU+IG5vdCB0aGUgb25lIGl0IHBvaW50cyB0byIpKSwKKwkJT1BUX0JPT0woJ3onLCBOVUxMLCAmZW5kX251bGwsIE5fKCJzdGRpbiBoYXMgTlVMLXRlcm1pbmF0ZWQgYXJndW1lbnRzIikpLAorCQlPUFRfQk9PTCggMCAsICJzdGRpbiIsICZyZWFkX3N0ZGluLCBOXygicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iKSksCisJCU9QVF9CT09MKCAwICwgImNyZWF0ZS1yZWZsb2ciLCAmY3JlYXRlX3JlZmxvZywgTl8oImNyZWF0ZSBhIHJlZmxvZyIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBnaXRfdXBkYXRlX3JlZl91c2FnZSwKKwkJCSAgICAgMCk7CisJaWYgKG1zZyAmJiAhKm1zZykKKwkJZGllKCJSZWZ1c2luZyB0byBwZXJmb3JtIHVwZGF0ZSB3aXRoIGVtcHR5IG1lc3NhZ2UuIik7CisKKwljcmVhdGVfcmVmbG9nX2ZsYWcgPSBjcmVhdGVfcmVmbG9nID8gUkVGX0ZPUkNFX0NSRUFURV9SRUZMT0cgOiAwOworCisJaWYgKG5vX2RlcmVmKSB7CisJCWRlZmF1bHRfZmxhZ3MgPSBSRUZfTk9fREVSRUY7CisJCXVwZGF0ZV9mbGFncyA9IGRlZmF1bHRfZmxhZ3M7CisJfQorCisJaWYgKHJlYWRfc3RkaW4pIHsKKwkJaWYgKGRlbGV0ZSB8fCBhcmdjID4gMCkKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfdXBkYXRlX3JlZl91c2FnZSwgb3B0aW9ucyk7CisJCWlmIChlbmRfbnVsbCkKKwkJCWxpbmVfdGVybWluYXRpb24gPSAnXDAnOworCQl1cGRhdGVfcmVmc19zdGRpbigpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZW5kX251bGwpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfdXBkYXRlX3JlZl91c2FnZSwgb3B0aW9ucyk7CisKKwlpZiAoZGVsZXRlKSB7CisJCWlmIChhcmdjIDwgMSB8fCBhcmdjID4gMikKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfdXBkYXRlX3JlZl91c2FnZSwgb3B0aW9ucyk7CisJCXJlZm5hbWUgPSBhcmd2WzBdOworCQlvbGR2YWwgPSBhcmd2WzFdOworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKnZhbHVlOworCQlpZiAoYXJnYyA8IDIgfHwgYXJnYyA+IDMpCisJCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X3VwZGF0ZV9yZWZfdXNhZ2UsIG9wdGlvbnMpOworCQlyZWZuYW1lID0gYXJndlswXTsKKwkJdmFsdWUgPSBhcmd2WzFdOworCQlvbGR2YWwgPSBhcmd2WzJdOworCQlpZiAoZ2V0X29pZCh2YWx1ZSwgJm9pZCkpCisJCQlkaWUoIiVzOiBub3QgYSB2YWxpZCBTSEExIiwgdmFsdWUpOworCX0KKworCWlmIChvbGR2YWwpIHsKKwkJaWYgKCEqb2xkdmFsKQorCQkJLyoKKwkJCSAqIFRoZSBlbXB0eSBzdHJpbmcgaW1wbGllcyB0aGF0IHRoZSByZWZlcmVuY2UKKwkJCSAqIG11c3Qgbm90IGFscmVhZHkgZXhpc3Q6CisJCQkgKi8KKwkJCW9pZGNscigmb2xkb2lkKTsKKwkJZWxzZSBpZiAoZ2V0X29pZChvbGR2YWwsICZvbGRvaWQpKQorCQkJZGllKCIlczogbm90IGEgdmFsaWQgb2xkIFNIQTEiLCBvbGR2YWwpOworCX0KKworCWlmIChkZWxldGUpCisJCS8qCisJCSAqIEZvciBwdXJwb3NlcyBvZiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2UgdHJlYXQKKwkJICogTlVMTF9TSEExIGFzICJkb24ndCBjYXJlIiBoZXJlOgorCQkgKi8KKwkJcmV0dXJuIGRlbGV0ZV9yZWYobXNnLCByZWZuYW1lLAorCQkJCSAgKG9sZHZhbCAmJiAhaXNfbnVsbF9vaWQoJm9sZG9pZCkpID8gJm9sZG9pZCA6IE5VTEwsCisJCQkJICBkZWZhdWx0X2ZsYWdzKTsKKwllbHNlCisJCXJldHVybiB1cGRhdGVfcmVmKG1zZywgcmVmbmFtZSwgJm9pZCwgb2xkdmFsID8gJm9sZG9pZCA6IE5VTEwsCisJCQkJICBkZWZhdWx0X2ZsYWdzIHwgY3JlYXRlX3JlZmxvZ19mbGFnLAorCQkJCSAgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jIGIvYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzIxYTM0Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYwpAQCAtMCwwICsxLDI2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVwZGF0ZV9zZXJ2ZXJfaW5mb191c2FnZVtdID0geworCU5fKCJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIpLAorCU5VTEwKK307CisKK2ludCBjbWRfdXBkYXRlX3NlcnZlcl9pbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBmb3JjZSA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIpLCAwKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIHVwZGF0ZV9zZXJ2ZXJfaW5mb191c2FnZSwgMCk7CisJaWYgKGFyZ2MgPiAwKQorCQl1c2FnZV93aXRoX29wdGlvbnModXBkYXRlX3NlcnZlcl9pbmZvX3VzYWdlLCBvcHRpb25zKTsKKworCXJldHVybiAhIXVwZGF0ZV9zZXJ2ZXJfaW5mbyhmb3JjZSk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3VwbG9hZC1hcmNoaXZlLmMgYi9idWlsdGluL3VwbG9hZC1hcmNoaXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4ODc5NwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdXBsb2FkLWFyY2hpdmUuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBGcmFuY2sgQnVpLUh1dQorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiYXJjaGl2ZS5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAic2lkZWJhbmQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdXBsb2FkX2FyY2hpdmVfdXNhZ2VbXSA9CisJImdpdCB1cGxvYWQtYXJjaGl2ZSA8cmVwbz4iOworCitzdGF0aWMgY29uc3QgY2hhciBkZWFkY2hpbGRbXSA9CisiZ2l0IHVwbG9hZC1hcmNoaXZlOiBhcmNoaXZlciBkaWVkIHdpdGggZXJyb3IiOworCisjZGVmaW5lIE1BWF9BUkdTICg2NCkKKworaW50IGNtZF91cGxvYWRfYXJjaGl2ZV93cml0ZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgc2VudF9hcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCWNvbnN0IGNoYXIgKmFyZ19jbWQgPSAiYXJndW1lbnQgIjsKKworCWlmIChhcmdjICE9IDIgfHwgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UodXBsb2FkX2FyY2hpdmVfdXNhZ2UpOworCisJaWYgKCFlbnRlcl9yZXBvKGFyZ3ZbMV0sIDApKQorCQlkaWUoIiclcycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgZ2l0IHJlcG9zaXRvcnkiLCBhcmd2WzFdKTsKKworCWluaXRfYXJjaGl2ZXJzKCk7CisKKwkvKiBwdXQgcmVjZWl2ZWQgb3B0aW9ucyBpbiBzZW50X2FyZ3ZbXSAqLworCWFyZ3ZfYXJyYXlfcHVzaCgmc2VudF9hcmd2LCAiZ2l0LXVwbG9hZC1hcmNoaXZlIik7CisJZm9yICg7OykgeworCQljaGFyICpidWYgPSBwYWNrZXRfcmVhZF9saW5lKDAsIE5VTEwpOworCQlpZiAoIWJ1ZikKKwkJCWJyZWFrOwkvKiBnb3QgYSBmbHVzaCAqLworCQlpZiAoc2VudF9hcmd2LmFyZ2MgPiBNQVhfQVJHUykKKwkJCWRpZSgiVG9vIG1hbnkgb3B0aW9ucyAoPiVkKSIsIE1BWF9BUkdTIC0gMSk7CisKKwkJaWYgKCFzdGFydHNfd2l0aChidWYsIGFyZ19jbWQpKQorCQkJZGllKCInYXJndW1lbnQnIHRva2VuIG9yIGZsdXNoIGV4cGVjdGVkIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmc2VudF9hcmd2LCBidWYgKyBzdHJsZW4oYXJnX2NtZCkpOworCX0KKworCS8qIHBhcnNlIGFsbCBvcHRpb25zIHNlbnQgYnkgdGhlIGNsaWVudCAqLworCXJldHVybiB3cml0ZV9hcmNoaXZlKHNlbnRfYXJndi5hcmdjLCBzZW50X2FyZ3YuYXJndiwgcHJlZml4LAorCQkJICAgICB0aGVfcmVwb3NpdG9yeSwgTlVMTCwgMSk7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCitzdGF0aWMgdm9pZCBlcnJvcl9jbG50KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJdmFfbGlzdCBwYXJhbXM7CisKKwl2YV9zdGFydChwYXJhbXMsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKCZidWYsIGZtdCwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlzZW5kX3NpZGViYW5kKDEsIDMsIGJ1Zi5idWYsIGJ1Zi5sZW4sIExBUkdFX1BBQ0tFVF9NQVgpOworCWRpZSgic2VudCBlcnJvciB0byB0aGUgY2xpZW50OiAlcyIsIGJ1Zi5idWYpOworfQorCitzdGF0aWMgc3NpemVfdCBwcm9jZXNzX2lucHV0KGludCBjaGlsZF9mZCwgaW50IGJhbmQpCit7CisJY2hhciBidWZbMTYzODRdOworCXNzaXplX3Qgc3ogPSByZWFkKGNoaWxkX2ZkLCBidWYsIHNpemVvZihidWYpKTsKKwlpZiAoc3ogPCAwKSB7CisJCWlmIChlcnJubyAhPSBFQUdBSU4gJiYgZXJybm8gIT0gRUlOVFIpCisJCQllcnJvcl9jbG50KCJyZWFkIGVycm9yOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIHN6OworCX0KKwlzZW5kX3NpZGViYW5kKDEsIGJhbmQsIGJ1Ziwgc3osIExBUkdFX1BBQ0tFVF9NQVgpOworCXJldHVybiBzejsKK30KKworaW50IGNtZF91cGxvYWRfYXJjaGl2ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyB3cml0ZXIgPSB7IGFyZ3YgfTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UodXBsb2FkX2FyY2hpdmVfdXNhZ2UpOworCisJLyoKKwkgKiBTZXQgdXAgc2lkZWJhbmQgc3VicHJvY2Vzcy4KKwkgKgorCSAqIFdlIChwYXJlbnQpIG1vbml0b3IgYW5kIHJlYWQgZnJvbSBjaGlsZCwgc2VuZGluZyBpdHMgZmQjMSBhbmQgZmQjMgorCSAqIG11bHRpcGxleGVkIG91dCB0byBvdXIgZmQjMS4gIElmIHRoZSBjaGlsZCBkaWVzLCB3ZSB0ZWxsIHRoZSBvdGhlcgorCSAqIGVuZCBvdmVyIGNoYW5uZWwgIzMuCisJICovCisJYXJndlswXSA9ICJ1cGxvYWQtYXJjaGl2ZS0td3JpdGVyIjsKKwl3cml0ZXIub3V0ID0gd3JpdGVyLmVyciA9IC0xOworCXdyaXRlci5naXRfY21kID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmd3JpdGVyKSkgeworCQlpbnQgZXJyID0gZXJybm87CisJCXBhY2tldF93cml0ZV9mbXQoMSwgIk5BQ0sgdW5hYmxlIHRvIHNwYXduIHN1YnByb2Nlc3NcbiIpOworCQlkaWUoInVwbG9hZC1hcmNoaXZlOiAlcyIsIHN0cmVycm9yKGVycikpOworCX0KKworCXBhY2tldF93cml0ZV9mbXQoMSwgIkFDS1xuIik7CisJcGFja2V0X2ZsdXNoKDEpOworCisJd2hpbGUgKDEpIHsKKwkJc3RydWN0IHBvbGxmZCBwZmRbMl07CisKKwkJcGZkWzBdLmZkID0gd3JpdGVyLm91dDsKKwkJcGZkWzBdLmV2ZW50cyA9IFBPTExJTjsKKwkJcGZkWzFdLmZkID0gd3JpdGVyLmVycjsKKwkJcGZkWzFdLmV2ZW50cyA9IFBPTExJTjsKKwkJaWYgKHBvbGwocGZkLCAyLCAtMSkgPCAwKSB7CisJCQlpZiAoZXJybm8gIT0gRUlOVFIpIHsKKwkJCQllcnJvcl9lcnJubygicG9sbCBmYWlsZWQgcmVzdW1pbmciKTsKKwkJCQlzbGVlcCgxKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChwZmRbMV0ucmV2ZW50cyAmIFBPTExJTikKKwkJCS8qIFN0YXR1cyBzdHJlYW0gcmVhZHkgKi8KKwkJCWlmIChwcm9jZXNzX2lucHV0KHBmZFsxXS5mZCwgMikpCisJCQkJY29udGludWU7CisJCWlmIChwZmRbMF0ucmV2ZW50cyAmIFBPTExJTikKKwkJCS8qIERhdGEgc3RyZWFtIHJlYWR5ICovCisJCQlpZiAocHJvY2Vzc19pbnB1dChwZmRbMF0uZmQsIDEpKQorCQkJCWNvbnRpbnVlOworCisJCWlmIChmaW5pc2hfY29tbWFuZCgmd3JpdGVyKSkKKwkJCWVycm9yX2NsbnQoIiVzIiwgZGVhZGNoaWxkKTsKKwkJcGFja2V0X2ZsdXNoKDEpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3VwbG9hZC1wYWNrLmMgYi9idWlsdGluL3VwbG9hZC1wYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhOGZhMgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdXBsb2FkLXBhY2suYwpAQCAtMCwwICsxLDc0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgInVwbG9hZC1wYWNrLmgiCisjaW5jbHVkZSAic2VydmUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1cGxvYWRfcGFja191c2FnZVtdID0geworCU5fKCJnaXQgdXBsb2FkLXBhY2sgWzxvcHRpb25zPl0gPGRpcj4iKSwKKwlOVUxMCit9OworCitpbnQgY21kX3VwbG9hZF9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKmRpcjsKKwlpbnQgc3RyaWN0ID0gMDsKKwlzdHJ1Y3QgdXBsb2FkX3BhY2tfb3B0aW9ucyBvcHRzID0geyAwIH07CisJc3RydWN0IHNlcnZlX29wdGlvbnMgc2VydmVfb3B0cyA9IFNFUlZFX09QVElPTlNfSU5JVDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woMCwgInN0YXRlbGVzcy1ycGMiLCAmb3B0cy5zdGF0ZWxlc3NfcnBjLAorCQkJIE5fKCJxdWl0IGFmdGVyIGEgc2luZ2xlIHJlcXVlc3QvcmVzcG9uc2UgZXhjaGFuZ2UiKSksCisJCU9QVF9CT09MKDAsICJhZHZlcnRpc2UtcmVmcyIsICZvcHRzLmFkdmVydGlzZV9yZWZzLAorCQkJIE5fKCJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGluaXRpYWwgcmVmIGFkdmVydGlzZW1lbnQiKSksCisJCU9QVF9CT09MKDAsICJzdHJpY3QiLCAmc3RyaWN0LAorCQkJIE5fKCJkbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkiKSksCisJCU9QVF9JTlRFR0VSKDAsICJ0aW1lb3V0IiwgJm9wdHMudGltZW91dCwKKwkJCSAgICBOXygiaW50ZXJydXB0IHRyYW5zZmVyIGFmdGVyIDxuPiBzZWNvbmRzIG9mIGluYWN0aXZpdHkiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlwYWNrZXRfdHJhY2VfaWRlbnRpdHkoInVwbG9hZC1wYWNrIik7CisJcmVhZF9yZXBsYWNlX3JlZnMgPSAwOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCB1cGxvYWRfcGFja191c2FnZSwgMCk7CisKKwlpZiAoYXJnYyAhPSAxKQorCQl1c2FnZV93aXRoX29wdGlvbnModXBsb2FkX3BhY2tfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKG9wdHMudGltZW91dCkKKwkJb3B0cy5kYWVtb25fbW9kZSA9IDE7CisKKwlzZXR1cF9wYXRoKCk7CisKKwlkaXIgPSBhcmd2WzBdOworCisJaWYgKCFlbnRlcl9yZXBvKGRpciwgc3RyaWN0KSkKKwkJZGllKCInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIGdpdCByZXBvc2l0b3J5IiwgZGlyKTsKKworCXN3aXRjaCAoZGV0ZXJtaW5lX3Byb3RvY29sX3ZlcnNpb25fc2VydmVyKCkpIHsKKwljYXNlIHByb3RvY29sX3YyOgorCQlzZXJ2ZV9vcHRzLmFkdmVydGlzZV9jYXBhYmlsaXRpZXMgPSBvcHRzLmFkdmVydGlzZV9yZWZzOworCQlzZXJ2ZV9vcHRzLnN0YXRlbGVzc19ycGMgPSBvcHRzLnN0YXRlbGVzc19ycGM7CisJCXNlcnZlKCZzZXJ2ZV9vcHRzKTsKKwkJYnJlYWs7CisJY2FzZSBwcm90b2NvbF92MToKKwkJLyoKKwkJICogdjEgaXMganVzdCB0aGUgb3JpZ2luYWwgcHJvdG9jb2wgd2l0aCBhIHZlcnNpb24gc3RyaW5nLAorCQkgKiBzbyBqdXN0IGZhbGwgdGhyb3VnaCBhZnRlciB3cml0aW5nIHRoZSB2ZXJzaW9uIHN0cmluZy4KKwkJICovCisJCWlmIChvcHRzLmFkdmVydGlzZV9yZWZzIHx8ICFvcHRzLnN0YXRlbGVzc19ycGMpCisJCQlwYWNrZXRfd3JpdGVfZm10KDEsICJ2ZXJzaW9uIDFcbiIpOworCisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBwcm90b2NvbF92MDoKKwkJdXBsb2FkX3BhY2soJm9wdHMpOworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3Vua25vd25fdmVyc2lvbjoKKwkJQlVHKCJ1bmtub3duIHByb3RvY29sIHZlcnNpb24iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdmFyLmMgYi9idWlsdGluL3Zhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNmY0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3Zhci5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIEVyaWMgQmllZGVybWFuLCAyMDA1CisgKi8KKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHZhcl91c2FnZVtdID0gImdpdCB2YXIgKC1sIHwgPHZhcmlhYmxlPikiOworCitzdGF0aWMgY29uc3QgY2hhciAqZWRpdG9yKGludCBmbGFnKQoreworCWNvbnN0IGNoYXIgKnBnbSA9IGdpdF9lZGl0b3IoKTsKKworCWlmICghcGdtICYmIGZsYWcgJiBJREVOVF9TVFJJQ1QpCisJCWRpZSgiVGVybWluYWwgaXMgZHVtYiwgYnV0IEVESVRPUiB1bnNldCIpOworCisJcmV0dXJuIHBnbTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhZ2VyKGludCBmbGFnKQoreworCWNvbnN0IGNoYXIgKnBnbSA9IGdpdF9wYWdlcigxKTsKKworCWlmICghcGdtKQorCQlwZ20gPSAiY2F0IjsKKwlyZXR1cm4gcGdtOworfQorCitzdHJ1Y3QgZ2l0X3ZhciB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICooKnJlYWQpKGludCk7Cit9Oworc3RhdGljIHN0cnVjdCBnaXRfdmFyIGdpdF92YXJzW10gPSB7CisJeyAiR0lUX0NPTU1JVFRFUl9JREVOVCIsIGdpdF9jb21taXR0ZXJfaW5mbyB9LAorCXsgIkdJVF9BVVRIT1JfSURFTlQiLCAgIGdpdF9hdXRob3JfaW5mbyB9LAorCXsgIkdJVF9FRElUT1IiLCBlZGl0b3IgfSwKKwl7ICJHSVRfUEFHRVIiLCBwYWdlciB9LAorCXsgIiIsIE5VTEwgfSwKK307CisKK3N0YXRpYyB2b2lkIGxpc3RfdmFycyh2b2lkKQoreworCXN0cnVjdCBnaXRfdmFyICpwdHI7CisJY29uc3QgY2hhciAqdmFsOworCisJZm9yIChwdHIgPSBnaXRfdmFyczsgcHRyLT5yZWFkOyBwdHIrKykKKwkJaWYgKCh2YWwgPSBwdHItPnJlYWQoMCkpKQorCQkJcHJpbnRmKCIlcz0lc1xuIiwgcHRyLT5uYW1lLCB2YWwpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcmVhZF92YXIoY29uc3QgY2hhciAqdmFyKQoreworCXN0cnVjdCBnaXRfdmFyICpwdHI7CisJY29uc3QgY2hhciAqdmFsOworCXZhbCA9IE5VTEw7CisJZm9yIChwdHIgPSBnaXRfdmFyczsgcHRyLT5yZWFkOyBwdHIrKykgeworCQlpZiAoc3RyY21wKHZhciwgcHRyLT5uYW1lKSA9PSAwKSB7CisJCQl2YWwgPSBwdHItPnJlYWQoSURFTlRfU1RSSUNUKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKHZhbHVlKQorCQlwcmludGYoIiVzPSVzXG4iLCB2YXIsIHZhbHVlKTsKKwllbHNlCisJCXByaW50ZigiJXNcbiIsIHZhcik7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK2ludCBjbWRfdmFyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKnZhbCA9IE5VTEw7CisJaWYgKGFyZ2MgIT0gMikKKwkJdXNhZ2UodmFyX3VzYWdlKTsKKworCWlmIChzdHJjbXAoYXJndlsxXSwgIi1sIikgPT0gMCkgeworCQlnaXRfY29uZmlnKHNob3dfY29uZmlnLCBOVUxMKTsKKwkJbGlzdF92YXJzKCk7CisJCXJldHVybiAwOworCX0KKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJdmFsID0gcmVhZF92YXIoYXJndlsxXSk7CisJaWYgKCF2YWwpCisJCXVzYWdlKHZhcl91c2FnZSk7CisKKwlwcmludGYoIiVzXG4iLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3ZlcmlmeS1jb21taXQuYyBiL2J1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYzY5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3ZlcmlmeS1jb21taXQuYwpAQCAtMCwwICsxLDkwIEBACisvKgorICogQnVpbHRpbiAiZ2l0IGNvbW1pdC1jb21taXQiCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1pY2hhZWwgSiBHcnViZXIgPGdpdEBkcm1pY2hhLndhcnBtYWlsLm5ldD4KKyAqCisgKiBCYXNlZCBvbiBnaXQtdmVyaWZ5LXRhZworICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2ZXJpZnlfY29tbWl0X3VzYWdlW10gPSB7CisJCU5fKCJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIiksCisJCU5VTEwKK307CisKK3N0YXRpYyBpbnQgcnVuX2dwZ192ZXJpZnkoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrIHNpZ25hdHVyZV9jaGVjazsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZzaWduYXR1cmVfY2hlY2ssIDAsIHNpemVvZihzaWduYXR1cmVfY2hlY2spKTsKKworCXJldCA9IGNoZWNrX2NvbW1pdF9zaWduYXR1cmUoY29tbWl0LCAmc2lnbmF0dXJlX2NoZWNrKTsKKwlwcmludF9zaWduYXR1cmVfYnVmZmVyKCZzaWduYXR1cmVfY2hlY2ssIGZsYWdzKTsKKworCXNpZ25hdHVyZV9jaGVja19jbGVhcigmc2lnbmF0dXJlX2NoZWNrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZlcmlmeV9jb21taXQoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IG9iamVjdCAqb2JqOworCisJaWYgKGdldF9vaWQobmFtZSwgJm9pZCkpCisJCXJldHVybiBlcnJvcigiY29tbWl0ICclcycgbm90IGZvdW5kLiIsIG5hbWUpOworCisJb2JqID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIGVycm9yKCIlczogdW5hYmxlIHRvIHJlYWQgZmlsZS4iLCBuYW1lKTsKKwlpZiAob2JqLT50eXBlICE9IE9CSl9DT01NSVQpCisJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCB2ZXJpZnkgYSBub24tY29tbWl0IG9iamVjdCBvZiB0eXBlICVzLiIsCisJCQkJbmFtZSwgdHlwZV9uYW1lKG9iai0+dHlwZSkpOworCisJcmV0dXJuIHJ1bl9ncGdfdmVyaWZ5KChzdHJ1Y3QgY29tbWl0ICopb2JqLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3ZlcmlmeV9jb21taXRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWludCBzdGF0dXMgPSBnaXRfZ3BnX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworaW50IGNtZF92ZXJpZnlfY29tbWl0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpID0gMSwgdmVyYm9zZSA9IDAsIGhhZF9lcnJvciA9IDA7CisJdW5zaWduZWQgZmxhZ3MgPSAwOworCWNvbnN0IHN0cnVjdCBvcHRpb24gdmVyaWZ5X2NvbW1pdF9vcHRpb25zW10gPSB7CisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oInByaW50IGNvbW1pdCBjb250ZW50cyIpKSwKKwkJT1BUX0JJVCgwLCAicmF3IiwgJmZsYWdzLCBOXygicHJpbnQgcmF3IGdwZyBzdGF0dXMgb3V0cHV0IiksIEdQR19WRVJJRllfUkFXKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X3ZlcmlmeV9jb21taXRfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgdmVyaWZ5X2NvbW1pdF9vcHRpb25zLAorCQkJICAgICB2ZXJpZnlfY29tbWl0X3VzYWdlLCBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisJaWYgKGFyZ2MgPD0gaSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHZlcmlmeV9jb21taXRfdXNhZ2UsIHZlcmlmeV9jb21taXRfb3B0aW9ucyk7CisKKwlpZiAodmVyYm9zZSkKKwkJZmxhZ3MgfD0gR1BHX1ZFUklGWV9WRVJCT1NFOworCisJLyogc29tZXRpbWVzIHRoZSBwcm9ncmFtIHdhcyB0ZXJtaW5hdGVkIGJlY2F1c2UgdGhpcyBzaWduYWwKKwkgKiB3YXMgcmVjZWl2ZWQgaW4gdGhlIHByb2Nlc3Mgb2Ygd3JpdGluZyB0aGUgZ3BnIGlucHV0OiAqLworCXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKKwl3aGlsZSAoaSA8IGFyZ2MpCisJCWlmICh2ZXJpZnlfY29tbWl0KGFyZ3ZbaSsrXSwgZmxhZ3MpKQorCQkJaGFkX2Vycm9yID0gMTsKKwlyZXR1cm4gaGFkX2Vycm9yOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi92ZXJpZnktcGFjay5jIGIvYnVpbHRpbi92ZXJpZnktcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYTFhNWMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3ZlcmlmeS1wYWNrLmMKQEAgLTAsMCArMSw4MyBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCisjZGVmaW5lIFZFUklGWV9QQUNLX1ZFUkJPU0UgMDEKKyNkZWZpbmUgVkVSSUZZX1BBQ0tfU1RBVF9PTkxZIDAyCisKK3N0YXRpYyBpbnQgdmVyaWZ5X29uZV9wYWNrKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBpbmRleF9wYWNrID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsiaW5kZXgtcGFjayIsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlzdHJ1Y3Qgc3RyYnVmIGFyZyA9IFNUUkJVRl9JTklUOworCWludCB2ZXJib3NlID0gZmxhZ3MgJiBWRVJJRllfUEFDS19WRVJCT1NFOworCWludCBzdGF0X29ubHkgPSBmbGFncyAmIFZFUklGWV9QQUNLX1NUQVRfT05MWTsKKwlpbnQgZXJyOworCisJaWYgKHN0YXRfb25seSkKKwkJYXJndlsxXSA9ICItLXZlcmlmeS1zdGF0LW9ubHkiOworCWVsc2UgaWYgKHZlcmJvc2UpCisJCWFyZ3ZbMV0gPSAiLS12ZXJpZnktc3RhdCI7CisJZWxzZQorCQlhcmd2WzFdID0gIi0tdmVyaWZ5IjsKKworCS8qCisJICogSW4gYWRkaXRpb24gdG8gImZvby5wYWNrIiB3ZSBhY2NlcHQgImZvby5pZHgiIGFuZCAiZm9vIjsKKwkgKiBub3JtYWxpemUgdGhlc2UgZm9ybXMgdG8gImZvby5wYWNrIiBmb3IgImluZGV4LXBhY2sgLS12ZXJpZnkiLgorCSAqLworCXN0cmJ1Zl9hZGRzdHIoJmFyZywgcGF0aCk7CisJaWYgKHN0cmJ1Zl9zdHJpcF9zdWZmaXgoJmFyZywgIi5pZHgiKSB8fAorCSAgICAhZW5kc193aXRoKGFyZy5idWYsICIucGFjayIpKQorCQlzdHJidWZfYWRkc3RyKCZhcmcsICIucGFjayIpOworCWFyZ3ZbMl0gPSBhcmcuYnVmOworCisJaW5kZXhfcGFjay5hcmd2ID0gYXJndjsKKwlpbmRleF9wYWNrLmdpdF9jbWQgPSAxOworCisJZXJyID0gcnVuX2NvbW1hbmQoJmluZGV4X3BhY2spOworCisJaWYgKHZlcmJvc2UgfHwgc3RhdF9vbmx5KSB7CisJCWlmIChlcnIpCisJCQlwcmludGYoIiVzOiBiYWRcbiIsIGFyZy5idWYpOworCQllbHNlIHsKKwkJCWlmICghc3RhdF9vbmx5KQorCQkJCXByaW50ZigiJXM6IG9rXG4iLCBhcmcuYnVmKTsKKwkJfQorCX0KKwlzdHJidWZfcmVsZWFzZSgmYXJnKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdmVyaWZ5X3BhY2tfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIpLAorCU5VTEwKK307CisKK2ludCBjbWRfdmVyaWZ5X3BhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKwlpbnQgaTsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIHZlcmlmeV9wYWNrX29wdGlvbnNbXSA9IHsKKwkJT1BUX0JJVCgndicsICJ2ZXJib3NlIiwgJmZsYWdzLCBOXygidmVyYm9zZSIpLAorCQkJVkVSSUZZX1BBQ0tfVkVSQk9TRSksCisJCU9QVF9CSVQoJ3MnLCAic3RhdC1vbmx5IiwgJmZsYWdzLCBOXygic2hvdyBzdGF0aXN0aWNzIG9ubHkiKSwKKwkJCVZFUklGWV9QQUNLX1NUQVRfT05MWSksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCB2ZXJpZnlfcGFja19vcHRpb25zLAorCQkJICAgICB2ZXJpZnlfcGFja191c2FnZSwgMCk7CisJaWYgKGFyZ2MgPCAxKQorCQl1c2FnZV93aXRoX29wdGlvbnModmVyaWZ5X3BhY2tfdXNhZ2UsIHZlcmlmeV9wYWNrX29wdGlvbnMpOworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKHZlcmlmeV9vbmVfcGFjayhhcmd2W2ldLCBmbGFncykpCisJCQllcnIgPSAxOworCX0KKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3ZlcmlmeS10YWcuYyBiL2J1aWx0aW4vdmVyaWZ5LXRhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NTEzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3ZlcmlmeS10YWcuYwpAQCAtMCwwICsxLDc3IEBACisvKgorICogQnVpbHRpbiAiZ2l0IHZlcmlmeS10YWciCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IENhcmxvcyBSaWNhIDxqYXNhbXBsZXJAZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIGdpdC12ZXJpZnktdGFnLnNoCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicmVmLWZpbHRlci5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZlcmlmeV90YWdfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLiIpLAorCQlOVUxMCit9OworCitzdGF0aWMgaW50IGdpdF92ZXJpZnlfdGFnX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpbnQgc3RhdHVzID0gZ2l0X2dwZ19jb25maWcodmFyLCB2YWx1ZSwgY2IpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK2ludCBjbWRfdmVyaWZ5X3RhZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSA9IDEsIHZlcmJvc2UgPSAwLCBoYWRfZXJyb3IgPSAwOworCXVuc2lnbmVkIGZsYWdzID0gMDsKKwlzdHJ1Y3QgcmVmX2Zvcm1hdCBmb3JtYXQgPSBSRUZfRk9STUFUX0lOSVQ7CisJY29uc3Qgc3RydWN0IG9wdGlvbiB2ZXJpZnlfdGFnX29wdGlvbnNbXSA9IHsKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygicHJpbnQgdGFnIGNvbnRlbnRzIikpLAorCQlPUFRfQklUKDAsICJyYXciLCAmZmxhZ3MsIE5fKCJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiKSwgR1BHX1ZFUklGWV9SQVcpLAorCQlPUFRfU1RSSU5HKDAsICJmb3JtYXQiLCAmZm9ybWF0LmZvcm1hdCwgTl8oImZvcm1hdCIpLCBOXygiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X3ZlcmlmeV90YWdfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgdmVyaWZ5X3RhZ19vcHRpb25zLAorCQkJICAgICB2ZXJpZnlfdGFnX3VzYWdlLCBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisJaWYgKGFyZ2MgPD0gaSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHZlcmlmeV90YWdfdXNhZ2UsIHZlcmlmeV90YWdfb3B0aW9ucyk7CisKKwlpZiAodmVyYm9zZSkKKwkJZmxhZ3MgfD0gR1BHX1ZFUklGWV9WRVJCT1NFOworCisJaWYgKGZvcm1hdC5mb3JtYXQpIHsKKwkJaWYgKHZlcmlmeV9yZWZfZm9ybWF0KCZmb3JtYXQpKQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHZlcmlmeV90YWdfdXNhZ2UsCisJCQkJCSAgIHZlcmlmeV90YWdfb3B0aW9ucyk7CisJCWZsYWdzIHw9IEdQR19WRVJJRllfT01JVF9TVEFUVVM7CisJfQorCisJd2hpbGUgKGkgPCBhcmdjKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljb25zdCBjaGFyICpuYW1lID0gYXJndltpKytdOworCisJCWlmIChnZXRfb2lkKG5hbWUsICZvaWQpKSB7CisJCQloYWRfZXJyb3IgPSAhIWVycm9yKCJ0YWcgJyVzJyBub3QgZm91bmQuIiwgbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChncGdfdmVyaWZ5X3RhZygmb2lkLCBuYW1lLCBmbGFncykpIHsKKwkJCWhhZF9lcnJvciA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChmb3JtYXQuZm9ybWF0KQorCQkJcHJldHR5X3ByaW50X3JlZihuYW1lLCAmb2lkLCAmZm9ybWF0KTsKKwl9CisJcmV0dXJuIGhhZF9lcnJvcjsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vd29ya3RyZWUuYyBiL2J1aWx0aW4vd29ya3RyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTlkYjM1Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi93b3JrdHJlZS5jCkBAIC0wLDAgKzEsOTgyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjaGVja291dC5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgIndvcmt0cmVlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgd29ya3RyZWVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gWzxjb21taXQtaXNoPl0iKSwKKwlOXygiZ2l0IHdvcmt0cmVlIGxpc3QgWzxvcHRpb25zPl0iKSwKKwlOXygiZ2l0IHdvcmt0cmVlIGxvY2sgWzxvcHRpb25zPl0gPHBhdGg+IiksCisJTl8oImdpdCB3b3JrdHJlZSBtb3ZlIDx3b3JrdHJlZT4gPG5ldy1wYXRoPiIpLAorCU5fKCJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHRpb25zPl0iKSwKKwlOXygiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPG9wdGlvbnM+XSA8d29ya3RyZWU+IiksCisJTl8oImdpdCB3b3JrdHJlZSB1bmxvY2sgPHBhdGg+IiksCisJTlVMTAorfTsKKworc3RydWN0IGFkZF9vcHRzIHsKKwlpbnQgZm9yY2U7CisJaW50IGRldGFjaDsKKwlpbnQgcXVpZXQ7CisJaW50IGNoZWNrb3V0OworCWludCBrZWVwX2xvY2tlZDsKK307CisKK3N0YXRpYyBpbnQgc2hvd19vbmx5Oworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCBndWVzc19yZW1vdGU7CitzdGF0aWMgdGltZXN0YW1wX3QgZXhwaXJlOworCitzdGF0aWMgaW50IGdpdF93b3JrdHJlZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAid29ya3RyZWUuZ3Vlc3NyZW1vdGUiKSkgeworCQlndWVzc19yZW1vdGUgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IGRlbGV0ZV9naXRfZGlyKGNvbnN0IGNoYXIgKmlkKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJc3RyYnVmX2FkZHN0cigmc2IsIGdpdF9jb21tb25fcGF0aCgid29ya3RyZWVzLyVzIiwgaWQpKTsKKwlyZXQgPSByZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZzYiwgMCk7CisJaWYgKHJldCA8IDAgJiYgZXJybm8gPT0gRU5PVERJUikKKwkJcmV0ID0gdW5saW5rKHNiLmJ1Zik7CisJaWYgKHJldCkKKwkJZXJyb3JfZXJybm8oXygiZmFpbGVkIHRvIGRlbGV0ZSAnJXMnIiksIHNiLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfd29ya3RyZWVzX2Rpcl9pZl9lbXB0eSh2b2lkKQoreworCXJtZGlyKGdpdF9wYXRoKCJ3b3JrdHJlZXMiKSk7IC8qIGlnbm9yZSBmYWlsZWQgcmVtb3ZhbCAqLworfQorCitzdGF0aWMgaW50IHBydW5lX3dvcmt0cmVlKGNvbnN0IGNoYXIgKmlkLCBzdHJ1Y3Qgc3RyYnVmICpyZWFzb24pCit7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhciAqcGF0aDsKKwlpbnQgZmQ7CisJc2l6ZV90IGxlbjsKKwlzc2l6ZV90IHJlYWRfcmVzdWx0OworCisJaWYgKCFpc19kaXJlY3RvcnkoZ2l0X3BhdGgoIndvcmt0cmVlcy8lcyIsIGlkKSkpIHsKKwkJc3RyYnVmX2FkZGYocmVhc29uLCBfKCJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIpLCBpZCk7CisJCXJldHVybiAxOworCX0KKwlpZiAoZmlsZV9leGlzdHMoZ2l0X3BhdGgoIndvcmt0cmVlcy8lcy9sb2NrZWQiLCBpZCkpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RhdChnaXRfcGF0aCgid29ya3RyZWVzLyVzL2dpdGRpciIsIGlkKSwgJnN0KSkgeworCQlzdHJidWZfYWRkZihyZWFzb24sIF8oIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QiKSwgaWQpOworCQlyZXR1cm4gMTsKKwl9CisJZmQgPSBvcGVuKGdpdF9wYXRoKCJ3b3JrdHJlZXMvJXMvZ2l0ZGlyIiwgaWQpLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQlzdHJidWZfYWRkZihyZWFzb24sIF8oIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIpLAorCQkJICAgIGlkLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gMTsKKwl9CisJbGVuID0geHNpemVfdChzdC5zdF9zaXplKTsKKwlwYXRoID0geG1hbGxvY3oobGVuKTsKKworCXJlYWRfcmVzdWx0ID0gcmVhZF9pbl9mdWxsKGZkLCBwYXRoLCBsZW4pOworCWlmIChyZWFkX3Jlc3VsdCA8IDApIHsKKwkJc3RyYnVmX2FkZGYocmVhc29uLCBfKCJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHVuYWJsZSB0byByZWFkIGdpdGRpciBmaWxlICglcykiKSwKKwkJCSAgICBpZCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJY2xvc2UoZmQpOworCQlmcmVlKHBhdGgpOworCQlyZXR1cm4gMTsKKwl9CisJY2xvc2UoZmQpOworCisJaWYgKHJlYWRfcmVzdWx0ICE9IGxlbikgeworCQlzdHJidWZfYWRkZihyZWFzb24sCisJCQkgICAgXygiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBzaG9ydCByZWFkIChleHBlY3RlZCAlIlBSSXVNQVgiIGJ5dGVzLCByZWFkICUiUFJJdU1BWCIpIiksCisJCQkgICAgaWQsICh1aW50bWF4X3QpbGVuLCAodWludG1heF90KXJlYWRfcmVzdWx0KTsKKwkJZnJlZShwYXRoKTsKKwkJcmV0dXJuIDE7CisJfQorCXdoaWxlIChsZW4gJiYgKHBhdGhbbGVuIC0gMV0gPT0gJ1xuJyB8fCBwYXRoW2xlbiAtIDFdID09ICdccicpKQorCQlsZW4tLTsKKwlpZiAoIWxlbikgeworCQlzdHJidWZfYWRkZihyZWFzb24sIF8oIlJlbW92aW5nIHdvcmt0cmVlcy8lczogaW52YWxpZCBnaXRkaXIgZmlsZSIpLCBpZCk7CisJCWZyZWUocGF0aCk7CisJCXJldHVybiAxOworCX0KKwlwYXRoW2xlbl0gPSAnXDAnOworCWlmICghZmlsZV9leGlzdHMocGF0aCkpIHsKKwkJZnJlZShwYXRoKTsKKwkJaWYgKHN0YXQoZ2l0X3BhdGgoIndvcmt0cmVlcy8lcy9pbmRleCIsIGlkKSwgJnN0KSB8fAorCQkgICAgc3Quc3RfbXRpbWUgPD0gZXhwaXJlKSB7CisJCQlzdHJidWZfYWRkZihyZWFzb24sIF8oIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgcG9pbnRzIHRvIG5vbi1leGlzdGVudCBsb2NhdGlvbiIpLCBpZCk7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAwOworCQl9CisJfQorCWZyZWUocGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBydW5lX3dvcmt0cmVlcyh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgcmVhc29uID0gU1RSQlVGX0lOSVQ7CisJRElSICpkaXIgPSBvcGVuZGlyKGdpdF9wYXRoKCJ3b3JrdHJlZXMiKSk7CisJc3RydWN0IGRpcmVudCAqZDsKKwlpZiAoIWRpcikKKwkJcmV0dXJuOworCXdoaWxlICgoZCA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlpZiAoaXNfZG90X29yX2RvdGRvdChkLT5kX25hbWUpKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9yZXNldCgmcmVhc29uKTsKKwkJaWYgKCFwcnVuZV93b3JrdHJlZShkLT5kX25hbWUsICZyZWFzb24pKQorCQkJY29udGludWU7CisJCWlmIChzaG93X29ubHkgfHwgdmVyYm9zZSkKKwkJCXByaW50ZigiJXNcbiIsIHJlYXNvbi5idWYpOworCQlpZiAoc2hvd19vbmx5KQorCQkJY29udGludWU7CisJCWRlbGV0ZV9naXRfZGlyKGQtPmRfbmFtZSk7CisJfQorCWNsb3NlZGlyKGRpcik7CisJaWYgKCFzaG93X29ubHkpCisJCWRlbGV0ZV93b3JrdHJlZXNfZGlyX2lmX2VtcHR5KCk7CisJc3RyYnVmX3JlbGVhc2UoJnJlYXNvbik7Cit9CisKK3N0YXRpYyBpbnQgcHJ1bmUoaW50IGFjLCBjb25zdCBjaGFyICoqYXYsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19EUllfUlVOKCZzaG93X29ubHksIE5fKCJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiKSksCisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIpKSwKKwkJT1BUX0VYUElSWV9EQVRFKDAsICJleHBpcmUiLCAmZXhwaXJlLAorCQkJCU5fKCJleHBpcmUgd29ya2luZyB0cmVlcyBvbGRlciB0aGFuIDx0aW1lPiIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWV4cGlyZSA9IFRJTUVfTUFYOworCWFjID0gcGFyc2Vfb3B0aW9ucyhhYywgYXYsIHByZWZpeCwgb3B0aW9ucywgd29ya3RyZWVfdXNhZ2UsIDApOworCWlmIChhYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHdvcmt0cmVlX3VzYWdlLCBvcHRpb25zKTsKKwlwcnVuZV93b3JrdHJlZXMoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgKmp1bmtfd29ya190cmVlOworc3RhdGljIGNoYXIgKmp1bmtfZ2l0X2RpcjsKK3N0YXRpYyBpbnQgaXNfanVuazsKK3N0YXRpYyBwaWRfdCBqdW5rX3BpZDsKKworc3RhdGljIHZvaWQgcmVtb3ZlX2p1bmsodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaWYgKCFpc19qdW5rIHx8IGdldHBpZCgpICE9IGp1bmtfcGlkKQorCQlyZXR1cm47CisJaWYgKGp1bmtfZ2l0X2RpcikgeworCQlzdHJidWZfYWRkc3RyKCZzYiwganVua19naXRfZGlyKTsKKwkJcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmc2IsIDApOworCQlzdHJidWZfcmVzZXQoJnNiKTsKKwl9CisJaWYgKGp1bmtfd29ya190cmVlKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBqdW5rX3dvcmtfdHJlZSk7CisJCXJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJnNiLCAwKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2p1bmtfb25fc2lnbmFsKGludCBzaWdubykKK3sKKwlyZW1vdmVfanVuaygpOworCXNpZ2NoYWluX3BvcChzaWdubyk7CisJcmFpc2Uoc2lnbm8pOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqd29ya3RyZWVfYmFzZW5hbWUoY29uc3QgY2hhciAqcGF0aCwgaW50ICpvbGVuKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGxlbjsKKworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwl3aGlsZSAobGVuICYmIGlzX2Rpcl9zZXAocGF0aFtsZW4gLSAxXSkpCisJCWxlbi0tOworCisJZm9yIChuYW1lID0gcGF0aCArIGxlbiAtIDE7IG5hbWUgPiBwYXRoOyBuYW1lLS0pCisJCWlmIChpc19kaXJfc2VwKCpuYW1lKSkgeworCQkJbmFtZSsrOworCQkJYnJlYWs7CisJCX0KKworCSpvbGVuID0gbGVuOworCXJldHVybiBuYW1lOworfQorCitzdGF0aWMgdm9pZCB2YWxpZGF0ZV93b3JrdHJlZV9hZGQoY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IGFkZF9vcHRzICpvcHRzKQoreworCXN0cnVjdCB3b3JrdHJlZSAqKndvcmt0cmVlczsKKwlzdHJ1Y3Qgd29ya3RyZWUgKnd0OworCWludCBsb2NrZWQ7CisKKwlpZiAoZmlsZV9leGlzdHMocGF0aCkgJiYgIWlzX2VtcHR5X2RpcihwYXRoKSkKKwkJZGllKF8oIiclcycgYWxyZWFkeSBleGlzdHMiKSwgcGF0aCk7CisKKwl3b3JrdHJlZXMgPSBnZXRfd29ya3RyZWVzKDApOworCXd0ID0gZmluZF93b3JrdHJlZV9ieV9wYXRoKHdvcmt0cmVlcywgcGF0aCk7CisJaWYgKCF3dCkKKwkJZ290byBkb25lOworCisJbG9ja2VkID0gISF3b3JrdHJlZV9sb2NrX3JlYXNvbih3dCk7CisJaWYgKCghbG9ja2VkICYmIG9wdHMtPmZvcmNlKSB8fCAobG9ja2VkICYmIG9wdHMtPmZvcmNlID4gMSkpIHsKKwkJaWYgKGRlbGV0ZV9naXRfZGlyKHd0LT5pZCkpCisJCSAgICBkaWUoXygidW5hYmxlIHRvIHJlLWFkZCB3b3JrdHJlZSAnJXMnIiksIHBhdGgpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGxvY2tlZCkKKwkJZGllKF8oIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBsb2NrZWQgd29ya3RyZWU7XG51c2UgJ2FkZCAtZiAtZicgdG8gb3ZlcnJpZGUsIG9yICd1bmxvY2snIGFuZCAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIiksIHBhdGgpOworCWVsc2UKKwkJZGllKF8oIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBhbHJlYWR5IHJlZ2lzdGVyZWQgd29ya3RyZWU7XG51c2UgJ2FkZCAtZicgdG8gb3ZlcnJpZGUsIG9yICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiKSwgcGF0aCk7CisKK2RvbmU6CisJZnJlZV93b3JrdHJlZXMod29ya3RyZWVzKTsKK30KKworc3RhdGljIGludCBhZGRfd29ya3RyZWUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCWNvbnN0IHN0cnVjdCBhZGRfb3B0cyAqb3B0cykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiX2dpdCA9IFNUUkJVRl9JTklULCBzYl9yZXBvID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklULCByZWFscGF0aCA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGFyZ3ZfYXJyYXkgY2hpbGRfZW52ID0gQVJHVl9BUlJBWV9JTklUOworCXVuc2lnbmVkIGludCBjb3VudGVyID0gMDsKKwlpbnQgbGVuLCByZXQ7CisJc3RydWN0IHN0cmJ1ZiBzeW1yZWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBOVUxMOworCWludCBpc19icmFuY2ggPSAwOworCXN0cnVjdCBzdHJidWYgc2JfbmFtZSA9IFNUUkJVRl9JTklUOworCisJdmFsaWRhdGVfd29ya3RyZWVfYWRkKHBhdGgsIG9wdHMpOworCisJLyogaXMgJ3JlZm5hbWUnIGEgYnJhbmNoIG9yIGNvbW1pdD8gKi8KKwlpZiAoIW9wdHMtPmRldGFjaCAmJiAhc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoJnN5bXJlZiwgcmVmbmFtZSkgJiYKKwkgICAgcmVmX2V4aXN0cyhzeW1yZWYuYnVmKSkgeworCQlpc19icmFuY2ggPSAxOworCQlpZiAoIW9wdHMtPmZvcmNlKQorCQkJZGllX2lmX2NoZWNrZWRfb3V0KHN5bXJlZi5idWYsIDApOworCX0KKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9ieV9uYW1lKHJlZm5hbWUpOworCWlmICghY29tbWl0KQorCQlkaWUoXygiaW52YWxpZCByZWZlcmVuY2U6ICVzIiksIHJlZm5hbWUpOworCisJbmFtZSA9IHdvcmt0cmVlX2Jhc2VuYW1lKHBhdGgsICZsZW4pOworCXN0cmJ1Zl9hZGQoJnNiLCBuYW1lLCBwYXRoICsgbGVuIC0gbmFtZSk7CisJc2FuaXRpemVfcmVmbmFtZV9jb21wb25lbnQoc2IuYnVmLCAmc2JfbmFtZSk7CisJaWYgKCFzYl9uYW1lLmxlbikKKwkJQlVHKCJIb3cgY29tZSAnJXMnIGJlY29tZXMgZW1wdHkgYWZ0ZXIgc2FuaXRpemF0aW9uPyIsIHNiLmJ1Zik7CisJc3RyYnVmX3Jlc2V0KCZzYik7CisJbmFtZSA9IHNiX25hbWUuYnVmOworCWdpdF9wYXRoX2J1Zigmc2JfcmVwbywgIndvcmt0cmVlcy8lcyIsIG5hbWUpOworCWxlbiA9IHNiX3JlcG8ubGVuOworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHNiX3JlcG8uYnVmKSkKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIiksCisJCQkgIHNiX3JlcG8uYnVmKTsKKworCXdoaWxlIChta2RpcihzYl9yZXBvLmJ1ZiwgMDc3NykpIHsKKwkJY291bnRlcisrOworCQlpZiAoKGVycm5vICE9IEVFWElTVCkgfHwgIWNvdW50ZXIgLyogb3ZlcmZsb3cgKi8pCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkgb2YgJyVzJyIpLAorCQkJCSAgc2JfcmVwby5idWYpOworCQlzdHJidWZfc2V0bGVuKCZzYl9yZXBvLCBsZW4pOworCQlzdHJidWZfYWRkZigmc2JfcmVwbywgIiVkIiwgY291bnRlcik7CisJfQorCW5hbWUgPSBzdHJyY2hyKHNiX3JlcG8uYnVmLCAnLycpICsgMTsKKworCWp1bmtfcGlkID0gZ2V0cGlkKCk7CisJYXRleGl0KHJlbW92ZV9qdW5rKTsKKwlzaWdjaGFpbl9wdXNoX2NvbW1vbihyZW1vdmVfanVua19vbl9zaWduYWwpOworCisJanVua19naXRfZGlyID0geHN0cmR1cChzYl9yZXBvLmJ1Zik7CisJaXNfanVuayA9IDE7CisKKwkvKgorCSAqIGxvY2sgdGhlIGluY29tcGxldGUgcmVwbyBzbyBwcnVuZSB3b24ndCBkZWxldGUgaXQsIHVubG9jaworCSAqIGFmdGVyIHRoZSBwcmVwYXJhdGlvbiBpcyBvdmVyLgorCSAqLworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzL2xvY2tlZCIsIHNiX3JlcG8uYnVmKTsKKwlpZiAoIW9wdHMtPmtlZXBfbG9ja2VkKQorCQl3cml0ZV9maWxlKHNiLmJ1ZiwgImluaXRpYWxpemluZyIpOworCWVsc2UKKwkJd3JpdGVfZmlsZShzYi5idWYsICJhZGRlZCB3aXRoIC0tbG9jayIpOworCisJc3RyYnVmX2FkZGYoJnNiX2dpdCwgIiVzLy5naXQiLCBwYXRoKTsKKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChzYl9naXQuYnVmKSkKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIiksCisJCQkgIHNiX2dpdC5idWYpOworCWp1bmtfd29ya190cmVlID0geHN0cmR1cChwYXRoKTsKKworCXN0cmJ1Zl9yZXNldCgmc2IpOworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzL2dpdGRpciIsIHNiX3JlcG8uYnVmKTsKKwlzdHJidWZfcmVhbHBhdGgoJnJlYWxwYXRoLCBzYl9naXQuYnVmLCAxKTsKKwl3cml0ZV9maWxlKHNiLmJ1ZiwgIiVzIiwgcmVhbHBhdGguYnVmKTsKKwlzdHJidWZfcmVhbHBhdGgoJnJlYWxwYXRoLCBnZXRfZ2l0X2NvbW1vbl9kaXIoKSwgMSk7CisJd3JpdGVfZmlsZShzYl9naXQuYnVmLCAiZ2l0ZGlyOiAlcy93b3JrdHJlZXMvJXMiLAorCQkgICByZWFscGF0aC5idWYsIG5hbWUpOworCS8qCisJICogVGhpcyBpcyB0byBrZWVwIHJlc29sdmVfcmVmKCkgaGFwcHkuIFdlIG5lZWQgYSB2YWxpZCBIRUFECisJICogb3IgaXNfZ2l0X2RpcmVjdG9yeSgpIHdpbGwgcmVqZWN0IHRoZSBkaXJlY3RvcnkuIEFueSB2YWx1ZSB3aGljaAorCSAqIGxvb2tzIGxpa2UgYW4gb2JqZWN0IElEIHdpbGwgZG8gc2luY2UgaXQgd2lsbCBiZSBpbW1lZGlhdGVseQorCSAqIHJlcGxhY2VkIGJ5IHRoZSBzeW1ib2xpYy1yZWYgb3IgdXBkYXRlLXJlZiBpbnZvY2F0aW9uIGluIHRoZSBuZXcKKwkgKiB3b3JrdHJlZS4KKwkgKi8KKwlzdHJidWZfcmVzZXQoJnNiKTsKKwlzdHJidWZfYWRkZigmc2IsICIlcy9IRUFEIiwgc2JfcmVwby5idWYpOworCXdyaXRlX2ZpbGUoc2IuYnVmLCAiJXMiLCBvaWRfdG9faGV4KCZudWxsX29pZCkpOworCXN0cmJ1Zl9yZXNldCgmc2IpOworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzL2NvbW1vbmRpciIsIHNiX3JlcG8uYnVmKTsKKwl3cml0ZV9maWxlKHNiLmJ1ZiwgIi4uLy4uIik7CisKKwlhcmd2X2FycmF5X3B1c2hmKCZjaGlsZF9lbnYsICIlcz0lcyIsIEdJVF9ESVJfRU5WSVJPTk1FTlQsIHNiX2dpdC5idWYpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNoaWxkX2VudiwgIiVzPSVzIiwgR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCwgcGF0aCk7CisJY3AuZ2l0X2NtZCA9IDE7CisKKwlpZiAoIWlzX2JyYW5jaCkKKwkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgInVwZGF0ZS1yZWYiLCAiSEVBRCIsCisJCQkJIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCksIE5VTEwpOworCWVsc2UgeworCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAic3ltYm9saWMtcmVmIiwgIkhFQUQiLAorCQkJCSBzeW1yZWYuYnVmLCBOVUxMKTsKKwkJaWYgKG9wdHMtPnF1aWV0KQorCQkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS1xdWlldCIpOworCX0KKworCWNwLmVudiA9IGNoaWxkX2Vudi5hcmd2OworCXJldCA9IHJ1bl9jb21tYW5kKCZjcCk7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCisJaWYgKG9wdHMtPmNoZWNrb3V0KSB7CisJCWNwLmFyZ3YgPSBOVUxMOworCQlhcmd2X2FycmF5X2NsZWFyKCZjcC5hcmdzKTsKKwkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgInJlc2V0IiwgIi0taGFyZCIsICItLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyIsIE5VTEwpOworCQlpZiAob3B0cy0+cXVpZXQpCisJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLXF1aWV0Iik7CisJCWNwLmVudiA9IGNoaWxkX2Vudi5hcmd2OworCQlyZXQgPSBydW5fY29tbWFuZCgmY3ApOworCQlpZiAocmV0KQorCQkJZ290byBkb25lOworCX0KKworCWlzX2p1bmsgPSAwOworCUZSRUVfQU5EX05VTEwoanVua193b3JrX3RyZWUpOworCUZSRUVfQU5EX05VTEwoanVua19naXRfZGlyKTsKKworZG9uZToKKwlpZiAocmV0IHx8ICFvcHRzLT5rZWVwX2xvY2tlZCkgeworCQlzdHJidWZfcmVzZXQoJnNiKTsKKwkJc3RyYnVmX2FkZGYoJnNiLCAiJXMvbG9ja2VkIiwgc2JfcmVwby5idWYpOworCQl1bmxpbmtfb3Jfd2FybihzYi5idWYpOworCX0KKworCS8qCisJICogSG9vayBmYWlsdXJlIGRvZXMgbm90IHdhcnJhbnQgd29ya3RyZWUgZGVsZXRpb24sIHNvIHJ1biBob29rIGFmdGVyCisJICogaXNfanVuayBpcyBjbGVhcmVkLCBidXQgZG8gcmV0dXJuIGFwcHJvcHJpYXRlIGNvZGUgd2hlbiBob29rIGZhaWxzLgorCSAqLworCWlmICghcmV0ICYmIG9wdHMtPmNoZWNrb3V0KSB7CisJCWNvbnN0IGNoYXIgKmhvb2sgPSBmaW5kX2hvb2soInBvc3QtY2hlY2tvdXQiKTsKKwkJaWYgKGhvb2spIHsKKwkJCWNvbnN0IGNoYXIgKmVudltdID0geyAiR0lUX0RJUiIsICJHSVRfV09SS19UUkVFIiwgTlVMTCB9OworCQkJY3AuZ2l0X2NtZCA9IDA7CisJCQljcC5ub19zdGRpbiA9IDE7CisJCQljcC5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwkJCWNwLmRpciA9IHBhdGg7CisJCQljcC5lbnYgPSBlbnY7CisJCQljcC5hcmd2ID0gTlVMTDsKKwkJCWNwLnRyYWNlMl9ob29rX25hbWUgPSAicG9zdC1jaGVja291dCI7CisJCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCBhYnNvbHV0ZV9wYXRoKGhvb2spLAorCQkJCQkgb2lkX3RvX2hleCgmbnVsbF9vaWQpLAorCQkJCQkgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSwKKwkJCQkJICIxIiwgTlVMTCk7CisJCQlyZXQgPSBydW5fY29tbWFuZCgmY3ApOworCQl9CisJfQorCisJYXJndl9hcnJheV9jbGVhcigmY2hpbGRfZW52KTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZzeW1yZWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYl9yZXBvKTsKKwlzdHJidWZfcmVsZWFzZSgmc2JfZ2l0KTsKKwlzdHJidWZfcmVsZWFzZSgmc2JfbmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJnJlYWxwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwcmludF9wcmVwYXJpbmdfd29ya3RyZWVfbGluZShpbnQgZGV0YWNoLAorCQkJCQkgIGNvbnN0IGNoYXIgKmJyYW5jaCwKKwkJCQkJICBjb25zdCBjaGFyICpuZXdfYnJhbmNoLAorCQkJCQkgIGludCBmb3JjZV9uZXdfYnJhbmNoKQoreworCWlmIChmb3JjZV9uZXdfYnJhbmNoKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUobmV3X2JyYW5jaCk7CisJCWlmICghY29tbWl0KQorCQkJcHJpbnRmX2xuKF8oIlByZXBhcmluZyB3b3JrdHJlZSAobmV3IGJyYW5jaCAnJXMnKSIpLCBuZXdfYnJhbmNoKTsKKwkJZWxzZQorCQkJcHJpbnRmX2xuKF8oIlByZXBhcmluZyB3b3JrdHJlZSAocmVzZXR0aW5nIGJyYW5jaCAnJXMnOyB3YXMgYXQgJXMpIiksCisJCQkJICBuZXdfYnJhbmNoLAorCQkJCSAgZmluZF91bmlxdWVfYWJicmV2KCZjb21taXQtPm9iamVjdC5vaWQsIERFRkFVTFRfQUJCUkVWKSk7CisJfSBlbHNlIGlmIChuZXdfYnJhbmNoKSB7CisJCXByaW50Zl9sbihfKCJQcmVwYXJpbmcgd29ya3RyZWUgKG5ldyBicmFuY2ggJyVzJykiKSwgbmV3X2JyYW5jaCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBzID0gU1RSQlVGX0lOSVQ7CisJCWlmICghZGV0YWNoICYmICFzdHJidWZfY2hlY2tfYnJhbmNoX3JlZigmcywgYnJhbmNoKSAmJgorCQkgICAgcmVmX2V4aXN0cyhzLmJ1ZikpCisJCQlwcmludGZfbG4oXygiUHJlcGFyaW5nIHdvcmt0cmVlIChjaGVja2luZyBvdXQgJyVzJykiKSwKKwkJCQkgIGJyYW5jaCk7CisJCWVsc2UgeworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShicmFuY2gpOworCQkJaWYgKCFjb21taXQpCisJCQkJZGllKF8oImludmFsaWQgcmVmZXJlbmNlOiAlcyIpLCBicmFuY2gpOworCQkJcHJpbnRmX2xuKF8oIlByZXBhcmluZyB3b3JrdHJlZSAoZGV0YWNoZWQgSEVBRCAlcykiKSwKKwkJCQkgIGZpbmRfdW5pcXVlX2FiYnJldigmY29tbWl0LT5vYmplY3Qub2lkLCBERUZBVUxUX0FCQlJFVikpOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZzKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpkd2ltX2JyYW5jaChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICoqbmV3X2JyYW5jaCkKK3sKKwlpbnQgbjsKKwljb25zdCBjaGFyICpzID0gd29ya3RyZWVfYmFzZW5hbWUocGF0aCwgJm4pOworCWNvbnN0IGNoYXIgKmJyYW5jaG5hbWUgPSB4c3RybmR1cChzLCBuKTsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZiA9IFNUUkJVRl9JTklUOworCisJVU5MRUFLKGJyYW5jaG5hbWUpOworCWlmICghc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoJnJlZiwgYnJhbmNobmFtZSkgJiYKKwkgICAgcmVmX2V4aXN0cyhyZWYuYnVmKSkgeworCQlzdHJidWZfcmVsZWFzZSgmcmVmKTsKKwkJcmV0dXJuIGJyYW5jaG5hbWU7CisJfQorCisJKm5ld19icmFuY2ggPSBicmFuY2huYW1lOworCWlmIChndWVzc19yZW1vdGUpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWNvbnN0IGNoYXIgKnJlbW90ZSA9CisJCQl1bmlxdWVfdHJhY2tpbmdfbmFtZSgqbmV3X2JyYW5jaCwgJm9pZCwgTlVMTCk7CisJCXJldHVybiByZW1vdGU7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGFkZChpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBhZGRfb3B0cyBvcHRzOworCWNvbnN0IGNoYXIgKm5ld19icmFuY2hfZm9yY2UgPSBOVUxMOworCWNoYXIgKnBhdGg7CisJY29uc3QgY2hhciAqYnJhbmNoOworCWNvbnN0IGNoYXIgKm5ld19icmFuY2ggPSBOVUxMOworCWNvbnN0IGNoYXIgKm9wdF90cmFjayA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fRk9SQ0UoJm9wdHMuZm9yY2UsCisJCQkgICBOXygiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIiksCisJCQkgICBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9TVFJJTkcoJ2InLCBOVUxMLCAmbmV3X2JyYW5jaCwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZSBhIG5ldyBicmFuY2giKSksCisJCU9QVF9TVFJJTkcoJ0InLCBOVUxMLCAmbmV3X2JyYW5jaF9mb3JjZSwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIpKSwKKwkJT1BUX0JPT0woMCwgImRldGFjaCIsICZvcHRzLmRldGFjaCwgTl8oImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIpKSwKKwkJT1BUX0JPT0woMCwgImNoZWNrb3V0IiwgJm9wdHMuY2hlY2tvdXQsIE5fKCJwb3B1bGF0ZSB0aGUgbmV3IHdvcmtpbmcgdHJlZSIpKSwKKwkJT1BUX0JPT0woMCwgImxvY2siLCAmb3B0cy5rZWVwX2xvY2tlZCwgTl8oImtlZXAgdGhlIG5ldyB3b3JraW5nIHRyZWUgbG9ja2VkIikpLAorCQlPUFRfX1FVSUVUKCZvcHRzLnF1aWV0LCBOXygic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCQlPUFRfUEFTU1RIUlUoMCwgInRyYWNrIiwgJm9wdF90cmFjaywgTlVMTCwKKwkJCSAgICAgTl8oInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LWJyYW5jaCgxKSkiKSwKKwkJCSAgICAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX09QVEFSRyksCisJCU9QVF9CT09MKDAsICJndWVzcy1yZW1vdGUiLCAmZ3Vlc3NfcmVtb3RlLAorCQkJIE5fKCJ0cnkgdG8gbWF0Y2ggdGhlIG5ldyBicmFuY2ggbmFtZSB3aXRoIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmNoZWNrb3V0ID0gMTsKKwlhYyA9IHBhcnNlX29wdGlvbnMoYWMsIGF2LCBwcmVmaXgsIG9wdGlvbnMsIHdvcmt0cmVlX3VzYWdlLCAwKTsKKwlpZiAoISFvcHRzLmRldGFjaCArICEhbmV3X2JyYW5jaCArICEhbmV3X2JyYW5jaF9mb3JjZSA+IDEpCisJCWRpZShfKCItYiwgLUIsIGFuZCAtLWRldGFjaCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIikpOworCWlmIChhYyA8IDEgfHwgYWMgPiAyKQorCQl1c2FnZV93aXRoX29wdGlvbnMod29ya3RyZWVfdXNhZ2UsIG9wdGlvbnMpOworCisJcGF0aCA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIGF2WzBdKTsKKwlicmFuY2ggPSBhYyA8IDIgPyAiSEVBRCIgOiBhdlsxXTsKKworCWlmICghc3RyY21wKGJyYW5jaCwgIi0iKSkKKwkJYnJhbmNoID0gIkB7LTF9IjsKKworCWlmIChuZXdfYnJhbmNoX2ZvcmNlKSB7CisJCXN0cnVjdCBzdHJidWYgc3ltcmVmID0gU1RSQlVGX0lOSVQ7CisKKwkJbmV3X2JyYW5jaCA9IG5ld19icmFuY2hfZm9yY2U7CisKKwkJaWYgKCFvcHRzLmZvcmNlICYmCisJCSAgICAhc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoJnN5bXJlZiwgbmV3X2JyYW5jaCkgJiYKKwkJICAgIHJlZl9leGlzdHMoc3ltcmVmLmJ1ZikpCisJCQlkaWVfaWZfY2hlY2tlZF9vdXQoc3ltcmVmLmJ1ZiwgMCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzeW1yZWYpOworCX0KKworCWlmIChhYyA8IDIgJiYgIW5ld19icmFuY2ggJiYgIW9wdHMuZGV0YWNoKSB7CisJCWNvbnN0IGNoYXIgKnMgPSBkd2ltX2JyYW5jaChwYXRoLCAmbmV3X2JyYW5jaCk7CisJCWlmIChzKQorCQkJYnJhbmNoID0gczsKKwl9CisKKwlpZiAoYWMgPT0gMiAmJiAhbmV3X2JyYW5jaCAmJiAhb3B0cy5kZXRhY2gpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkJY29uc3QgY2hhciAqcmVtb3RlOworCisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUoYnJhbmNoKTsKKwkJaWYgKCFjb21taXQpIHsKKwkJCXJlbW90ZSA9IHVuaXF1ZV90cmFja2luZ19uYW1lKGJyYW5jaCwgJm9pZCwgTlVMTCk7CisJCQlpZiAocmVtb3RlKSB7CisJCQkJbmV3X2JyYW5jaCA9IGJyYW5jaDsKKwkJCQlicmFuY2ggPSByZW1vdGU7CisJCQl9CisJCX0KKwl9CisJaWYgKCFvcHRzLnF1aWV0KQorCQlwcmludF9wcmVwYXJpbmdfd29ya3RyZWVfbGluZShvcHRzLmRldGFjaCwgYnJhbmNoLCBuZXdfYnJhbmNoLCAhIW5ld19icmFuY2hfZm9yY2UpOworCisJaWYgKG5ld19icmFuY2gpIHsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCWNwLmdpdF9jbWQgPSAxOworCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICJicmFuY2giKTsKKwkJaWYgKG5ld19icmFuY2hfZm9yY2UpCisJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLWZvcmNlIik7CisJCWlmIChvcHRzLnF1aWV0KQorCQkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS1xdWlldCIpOworCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIG5ld19icmFuY2gpOworCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIGJyYW5jaCk7CisJCWlmIChvcHRfdHJhY2spCisJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIG9wdF90cmFjayk7CisJCWlmIChydW5fY29tbWFuZCgmY3ApKQorCQkJcmV0dXJuIC0xOworCQlicmFuY2ggPSBuZXdfYnJhbmNoOworCX0gZWxzZSBpZiAob3B0X3RyYWNrKSB7CisJCWRpZShfKCItLVtuby1ddHJhY2sgY2FuIG9ubHkgYmUgdXNlZCBpZiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCIpKTsKKwl9CisKKwlVTkxFQUsocGF0aCk7CisJVU5MRUFLKG9wdHMpOworCXJldHVybiBhZGRfd29ya3RyZWUocGF0aCwgYnJhbmNoLCAmb3B0cyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfd29ya3RyZWVfcG9yY2VsYWluKHN0cnVjdCB3b3JrdHJlZSAqd3QpCit7CisJcHJpbnRmKCJ3b3JrdHJlZSAlc1xuIiwgd3QtPnBhdGgpOworCWlmICh3dC0+aXNfYmFyZSkKKwkJcHJpbnRmKCJiYXJlXG4iKTsKKwllbHNlIHsKKwkJcHJpbnRmKCJIRUFEICVzXG4iLCBvaWRfdG9faGV4KCZ3dC0+aGVhZF9vaWQpKTsKKwkJaWYgKHd0LT5pc19kZXRhY2hlZCkKKwkJCXByaW50ZigiZGV0YWNoZWRcbiIpOworCQllbHNlIGlmICh3dC0+aGVhZF9yZWYpCisJCQlwcmludGYoImJyYW5jaCAlc1xuIiwgd3QtPmhlYWRfcmVmKTsKKwl9CisJcHJpbnRmKCJcbiIpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3dvcmt0cmVlKHN0cnVjdCB3b3JrdHJlZSAqd3QsIGludCBwYXRoX21heGxlbiwgaW50IGFiYnJldl9sZW4pCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCBjdXJfcGF0aF9sZW4gPSBzdHJsZW4od3QtPnBhdGgpOworCWludCBwYXRoX2FkaiA9IGN1cl9wYXRoX2xlbiAtIHV0Zjhfc3Ryd2lkdGgod3QtPnBhdGgpOworCisJc3RyYnVmX2FkZGYoJnNiLCAiJS0qcyAiLCAxICsgcGF0aF9tYXhsZW4gKyBwYXRoX2Fkaiwgd3QtPnBhdGgpOworCWlmICh3dC0+aXNfYmFyZSkKKwkJc3RyYnVmX2FkZHN0cigmc2IsICIoYmFyZSkiKTsKKwllbHNlIHsKKwkJc3RyYnVmX2FkZGYoJnNiLCAiJS0qcyAiLCBhYmJyZXZfbGVuLAorCQkJCWZpbmRfdW5pcXVlX2FiYnJldigmd3QtPmhlYWRfb2lkLCBERUZBVUxUX0FCQlJFVikpOworCQlpZiAod3QtPmlzX2RldGFjaGVkKQorCQkJc3RyYnVmX2FkZHN0cigmc2IsICIoZGV0YWNoZWQgSEVBRCkiKTsKKwkJZWxzZSBpZiAod3QtPmhlYWRfcmVmKSB7CisJCQljaGFyICpyZWYgPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZih3dC0+aGVhZF9yZWYsIDApOworCQkJc3RyYnVmX2FkZGYoJnNiLCAiWyVzXSIsIHJlZik7CisJCQlmcmVlKHJlZik7CisJCX0gZWxzZQorCQkJc3RyYnVmX2FkZHN0cigmc2IsICIoZXJyb3IpIik7CisJfQorCXByaW50ZigiJXNcbiIsIHNiLmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgdm9pZCBtZWFzdXJlX3dpZHRocyhzdHJ1Y3Qgd29ya3RyZWUgKip3dCwgaW50ICphYmJyZXYsIGludCAqbWF4bGVuKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgd3RbaV07IGkrKykgeworCQlpbnQgc2hhMV9sZW47CisJCWludCBwYXRoX2xlbiA9IHN0cmxlbih3dFtpXS0+cGF0aCk7CisKKwkJaWYgKHBhdGhfbGVuID4gKm1heGxlbikKKwkJCSptYXhsZW4gPSBwYXRoX2xlbjsKKwkJc2hhMV9sZW4gPSBzdHJsZW4oZmluZF91bmlxdWVfYWJicmV2KCZ3dFtpXS0+aGVhZF9vaWQsICphYmJyZXYpKTsKKwkJaWYgKHNoYTFfbGVuID4gKmFiYnJldikKKwkJCSphYmJyZXYgPSBzaGExX2xlbjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbGlzdChpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBwb3JjZWxhaW4gPSAwOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKDAsICJwb3JjZWxhaW4iLCAmcG9yY2VsYWluLCBOXygibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhYyA9IHBhcnNlX29wdGlvbnMoYWMsIGF2LCBwcmVmaXgsIG9wdGlvbnMsIHdvcmt0cmVlX3VzYWdlLCAwKTsKKwlpZiAoYWMpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh3b3JrdHJlZV91c2FnZSwgb3B0aW9ucyk7CisJZWxzZSB7CisJCXN0cnVjdCB3b3JrdHJlZSAqKndvcmt0cmVlcyA9IGdldF93b3JrdHJlZXMoR1dUX1NPUlRfTElOS0VEKTsKKwkJaW50IHBhdGhfbWF4bGVuID0gMCwgYWJicmV2ID0gREVGQVVMVF9BQkJSRVYsIGk7CisKKwkJaWYgKCFwb3JjZWxhaW4pCisJCQltZWFzdXJlX3dpZHRocyh3b3JrdHJlZXMsICZhYmJyZXYsICZwYXRoX21heGxlbik7CisKKwkJZm9yIChpID0gMDsgd29ya3RyZWVzW2ldOyBpKyspIHsKKwkJCWlmIChwb3JjZWxhaW4pCisJCQkJc2hvd193b3JrdHJlZV9wb3JjZWxhaW4od29ya3RyZWVzW2ldKTsKKwkJCWVsc2UKKwkJCQlzaG93X3dvcmt0cmVlKHdvcmt0cmVlc1tpXSwgcGF0aF9tYXhsZW4sIGFiYnJldik7CisJCX0KKwkJZnJlZV93b3JrdHJlZXMod29ya3RyZWVzKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9ja193b3JrdHJlZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKnJlYXNvbiA9ICIiLCAqb2xkX3JlYXNvbjsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAicmVhc29uIiwgJnJlYXNvbiwgTl8oInN0cmluZyIpLAorCQkJICAgTl8oInJlYXNvbiBmb3IgbG9ja2luZyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlzdHJ1Y3Qgd29ya3RyZWUgKip3b3JrdHJlZXMsICp3dDsKKworCWFjID0gcGFyc2Vfb3B0aW9ucyhhYywgYXYsIHByZWZpeCwgb3B0aW9ucywgd29ya3RyZWVfdXNhZ2UsIDApOworCWlmIChhYyAhPSAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMod29ya3RyZWVfdXNhZ2UsIG9wdGlvbnMpOworCisJd29ya3RyZWVzID0gZ2V0X3dvcmt0cmVlcygwKTsKKwl3dCA9IGZpbmRfd29ya3RyZWUod29ya3RyZWVzLCBwcmVmaXgsIGF2WzBdKTsKKwlpZiAoIXd0KQorCQlkaWUoXygiJyVzJyBpcyBub3QgYSB3b3JraW5nIHRyZWUiKSwgYXZbMF0pOworCWlmIChpc19tYWluX3dvcmt0cmVlKHd0KSkKKwkJZGllKF8oIlRoZSBtYWluIHdvcmtpbmcgdHJlZSBjYW5ub3QgYmUgbG9ja2VkIG9yIHVubG9ja2VkIikpOworCisJb2xkX3JlYXNvbiA9IHdvcmt0cmVlX2xvY2tfcmVhc29uKHd0KTsKKwlpZiAob2xkX3JlYXNvbikgeworCQlpZiAoKm9sZF9yZWFzb24pCisJCQlkaWUoXygiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCwgcmVhc29uOiAlcyIpLAorCQkJICAgIGF2WzBdLCBvbGRfcmVhc29uKTsKKwkJZGllKF8oIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiKSwgYXZbMF0pOworCX0KKworCXdyaXRlX2ZpbGUoZ2l0X2NvbW1vbl9wYXRoKCJ3b3JrdHJlZXMvJXMvbG9ja2VkIiwgd3QtPmlkKSwKKwkJICAgIiVzIiwgcmVhc29uKTsKKwlmcmVlX3dvcmt0cmVlcyh3b3JrdHJlZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVubG9ja193b3JrdHJlZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCB3b3JrdHJlZSAqKndvcmt0cmVlcywgKnd0OworCWludCByZXQ7CisKKwlhYyA9IHBhcnNlX29wdGlvbnMoYWMsIGF2LCBwcmVmaXgsIG9wdGlvbnMsIHdvcmt0cmVlX3VzYWdlLCAwKTsKKwlpZiAoYWMgIT0gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHdvcmt0cmVlX3VzYWdlLCBvcHRpb25zKTsKKworCXdvcmt0cmVlcyA9IGdldF93b3JrdHJlZXMoMCk7CisJd3QgPSBmaW5kX3dvcmt0cmVlKHdvcmt0cmVlcywgcHJlZml4LCBhdlswXSk7CisJaWYgKCF3dCkKKwkJZGllKF8oIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIiksIGF2WzBdKTsKKwlpZiAoaXNfbWFpbl93b3JrdHJlZSh3dCkpCisJCWRpZShfKCJUaGUgbWFpbiB3b3JraW5nIHRyZWUgY2Fubm90IGJlIGxvY2tlZCBvciB1bmxvY2tlZCIpKTsKKwlpZiAoIXdvcmt0cmVlX2xvY2tfcmVhc29uKHd0KSkKKwkJZGllKF8oIiclcycgaXMgbm90IGxvY2tlZCIpLCBhdlswXSk7CisJcmV0ID0gdW5saW5rX29yX3dhcm4oZ2l0X2NvbW1vbl9wYXRoKCJ3b3JrdHJlZXMvJXMvbG9ja2VkIiwgd3QtPmlkKSk7CisJZnJlZV93b3JrdHJlZXMod29ya3RyZWVzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB2YWxpZGF0ZV9ub19zdWJtb2R1bGVzKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QpCit7CisJc3RydWN0IGluZGV4X3N0YXRlIGlzdGF0ZSA9IHsgTlVMTCB9OworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCWludCBpLCBmb3VuZF9zdWJtb2R1bGVzID0gMDsKKworCWlmIChpc19kaXJlY3Rvcnkod29ya3RyZWVfZ2l0X3BhdGgod3QsICJtb2R1bGVzIikpKSB7CisJCS8qCisJCSAqIFRoZXJlIGNvdWxkIGJlIGZhbHNlIHBvc2l0aXZlcywgZS5nLiB0aGUgIm1vZHVsZXMiCisJCSAqIGRpcmVjdG9yeSBleGlzdHMgYnV0IGlzIGVtcHR5LiBCdXQgaXQncyBhIHJhcmUgY2FzZSBhbmQKKwkJICogdGhpcyBzaW1wbGVyIGNoZWNrIGlzIHByb2JhYmx5IGdvb2QgZW5vdWdoIGZvciBub3cuCisJCSAqLworCQlmb3VuZF9zdWJtb2R1bGVzID0gMTsKKwl9IGVsc2UgaWYgKHJlYWRfaW5kZXhfZnJvbSgmaXN0YXRlLCB3b3JrdHJlZV9naXRfcGF0aCh3dCwgImluZGV4IiksCisJCQkJICAgZ2V0X3dvcmt0cmVlX2dpdF9kaXIod3QpKSA+IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS5jYWNoZV9ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLmNhY2hlW2ldOworCQkJaW50IGVycjsKKworCQkJaWYgKCFTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQkJY29udGludWU7CisKKwkJCXN0cmJ1Zl9yZXNldCgmcGF0aCk7CisJCQlzdHJidWZfYWRkZigmcGF0aCwgIiVzLyVzIiwgd3QtPnBhdGgsIGNlLT5uYW1lKTsKKwkJCWlmICghaXNfc3VibW9kdWxlX3BvcHVsYXRlZF9nZW50bHkocGF0aC5idWYsICZlcnIpKQorCQkJCWNvbnRpbnVlOworCisJCQlmb3VuZF9zdWJtb2R1bGVzID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWRpc2NhcmRfaW5kZXgoJmlzdGF0ZSk7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCisJaWYgKGZvdW5kX3N1Ym1vZHVsZXMpCisJCWRpZShfKCJ3b3JraW5nIHRyZWVzIGNvbnRhaW5pbmcgc3VibW9kdWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVtb3ZlZCIpKTsKK30KKworc3RhdGljIGludCBtb3ZlX3dvcmt0cmVlKGludCBhYywgY29uc3QgY2hhciAqKmF2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGZvcmNlID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19GT1JDRSgmZm9yY2UsCisJCQkgTl8oImZvcmNlIG1vdmUgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiKSwKKwkJCSBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9FTkQoKQorCX07CisJc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzLCAqd3Q7CisJc3RydWN0IHN0cmJ1ZiBkc3QgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGVycm1zZyA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7CisJY2hhciAqcGF0aDsKKworCWFjID0gcGFyc2Vfb3B0aW9ucyhhYywgYXYsIHByZWZpeCwgb3B0aW9ucywgd29ya3RyZWVfdXNhZ2UsIDApOworCWlmIChhYyAhPSAyKQorCQl1c2FnZV93aXRoX29wdGlvbnMod29ya3RyZWVfdXNhZ2UsIG9wdGlvbnMpOworCisJcGF0aCA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIGF2WzFdKTsKKwlzdHJidWZfYWRkc3RyKCZkc3QsIHBhdGgpOworCWZyZWUocGF0aCk7CisKKwl3b3JrdHJlZXMgPSBnZXRfd29ya3RyZWVzKDApOworCXd0ID0gZmluZF93b3JrdHJlZSh3b3JrdHJlZXMsIHByZWZpeCwgYXZbMF0pOworCWlmICghd3QpCisJCWRpZShfKCInJXMnIGlzIG5vdCBhIHdvcmtpbmcgdHJlZSIpLCBhdlswXSk7CisJaWYgKGlzX21haW5fd29ya3RyZWUod3QpKQorCQlkaWUoXygiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIiksIGF2WzBdKTsKKwlpZiAoaXNfZGlyZWN0b3J5KGRzdC5idWYpKSB7CisJCWNvbnN0IGNoYXIgKnNlcCA9IGZpbmRfbGFzdF9kaXJfc2VwKHd0LT5wYXRoKTsKKworCQlpZiAoIXNlcCkKKwkJCWRpZShfKCJjb3VsZCBub3QgZmlndXJlIG91dCBkZXN0aW5hdGlvbiBuYW1lIGZyb20gJyVzJyIpLAorCQkJICAgIHd0LT5wYXRoKTsKKwkJc3RyYnVmX3RyaW1fdHJhaWxpbmdfZGlyX3NlcCgmZHN0KTsKKwkJc3RyYnVmX2FkZHN0cigmZHN0LCBzZXApOworCX0KKwlpZiAoZmlsZV9leGlzdHMoZHN0LmJ1ZikpCisJCWRpZShfKCJ0YXJnZXQgJyVzJyBhbHJlYWR5IGV4aXN0cyIpLCBkc3QuYnVmKTsKKworCXZhbGlkYXRlX25vX3N1Ym1vZHVsZXMod3QpOworCisJaWYgKGZvcmNlIDwgMikKKwkJcmVhc29uID0gd29ya3RyZWVfbG9ja19yZWFzb24od3QpOworCWlmIChyZWFzb24pIHsKKwkJaWYgKCpyZWFzb24pCisJCQlkaWUoXygiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXNcbnVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IiksCisJCQkgICAgcmVhc29uKTsKKwkJZGllKF8oImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbnVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IikpOworCX0KKwlpZiAodmFsaWRhdGVfd29ya3RyZWUod3QsICZlcnJtc2csIDApKQorCQlkaWUoXygidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCBtb3ZlIHdvcmtpbmcgdHJlZTogJXMiKSwKKwkJICAgIGVycm1zZy5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnJtc2cpOworCisJaWYgKHJlbmFtZSh3dC0+cGF0aCwgZHN0LmJ1ZikgPT0gLTEpCisJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gbW92ZSAnJXMnIHRvICclcyciKSwgd3QtPnBhdGgsIGRzdC5idWYpOworCisJdXBkYXRlX3dvcmt0cmVlX2xvY2F0aW9uKHd0LCBkc3QuYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZkc3QpOworCWZyZWVfd29ya3RyZWVzKHdvcmt0cmVlcyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBOb3RlLCAiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiIgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgaXQncyBzYWZlIHRvCisgKiBkZWxldGUgYSB3aG9sZSB3b3JrdHJlZS4gImdpdCBzdGF0dXMiIGRvZXMgbm90IGlnbm9yZSB1c2VyCisgKiBjb25maWd1cmF0aW9uLCBzbyBpZiBhIG5vcm1hbCAiZ2l0IHN0YXR1cyIgc2hvd3MgImNsZWFuIiBmb3IgdGhlCisgKiB1c2VyLCB0aGVuIGl0J3Mgb2sgdG8gcmVtb3ZlIGl0LgorICoKKyAqIFRoaXMgYXNzdW1wdGlvbiBtYXkgYmUgYSBiYWQgb25lLiBXZSBtYXkgd2FudCB0byBpZ25vcmUKKyAqIChwb3RlbnRpYWxseSBiYWQpIHVzZXIgc2V0dGluZ3MgYW5kIG9ubHkgZGVsZXRlIGEgd29ya3RyZWUgd2hlbgorICogaXQncyBhYnNvbHV0ZWx5IHNhZmUgdG8gZG8gc28gZnJvbSBfb3VyXyBwb2ludCBvZiB2aWV3IGJlY2F1c2Ugd2UKKyAqIGtub3cgYmV0dGVyLgorICovCitzdGF0aWMgdm9pZCBjaGVja19jbGVhbl93b3JrdHJlZShzdHJ1Y3Qgd29ya3RyZWUgKnd0LAorCQkJCSBjb25zdCBjaGFyICpvcmlnaW5hbF9wYXRoKQoreworCXN0cnVjdCBhcmd2X2FycmF5IGNoaWxkX2VudiA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcDsKKwljaGFyIGJ1ZlsxXTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBVbnRpbCB3ZSBzb3J0IHRoaXMgb3V0LCBhbGwgc3VibW9kdWxlcyBhcmUgImRpcnR5IiBhbmQKKwkgKiB3aWxsIGFib3J0IHRoaXMgZnVuY3Rpb24uCisJICovCisJdmFsaWRhdGVfbm9fc3VibW9kdWxlcyh3dCk7CisKKwlhcmd2X2FycmF5X3B1c2hmKCZjaGlsZF9lbnYsICIlcz0lcy8uZ2l0IiwKKwkJCSBHSVRfRElSX0VOVklST05NRU5ULCB3dC0+cGF0aCk7CisJYXJndl9hcnJheV9wdXNoZigmY2hpbGRfZW52LCAiJXM9JXMiLAorCQkJIEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsIHd0LT5wYXRoKTsKKwltZW1zZXQoJmNwLCAwLCBzaXplb2YoY3ApKTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAic3RhdHVzIiwKKwkJCSAiLS1wb3JjZWxhaW4iLCAiLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lIiwKKwkJCSBOVUxMKTsKKwljcC5lbnYgPSBjaGlsZF9lbnYuYXJndjsKKwljcC5naXRfY21kID0gMTsKKwljcC5kaXIgPSB3dC0+cGF0aDsKKwljcC5vdXQgPSAtMTsKKwlyZXQgPSBzdGFydF9jb21tYW5kKCZjcCk7CisJaWYgKHJldCkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBydW4gJ2dpdCBzdGF0dXMnIG9uICclcyciKSwKKwkJCSAgb3JpZ2luYWxfcGF0aCk7CisJcmV0ID0geHJlYWQoY3Aub3V0LCBidWYsIHNpemVvZihidWYpKTsKKwlpZiAocmV0KQorCQlkaWUoXygiJyVzJyBjb250YWlucyBtb2RpZmllZCBvciB1bnRyYWNrZWQgZmlsZXMsIHVzZSAtLWZvcmNlIHRvIGRlbGV0ZSBpdCIpLAorCQkgICAgb3JpZ2luYWxfcGF0aCk7CisJY2xvc2UoY3Aub3V0KTsKKwlyZXQgPSBmaW5pc2hfY29tbWFuZCgmY3ApOworCWlmIChyZXQpCisJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIiksCisJCQkgIG9yaWdpbmFsX3BhdGgsIHJldCk7Cit9CisKK3N0YXRpYyBpbnQgZGVsZXRlX2dpdF93b3JrX3RyZWUoc3RydWN0IHdvcmt0cmVlICp3dCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisKKwlzdHJidWZfYWRkc3RyKCZzYiwgd3QtPnBhdGgpOworCWlmIChyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZzYiwgMCkpIHsKKwkJZXJyb3JfZXJybm8oXygiZmFpbGVkIHRvIGRlbGV0ZSAnJXMnIiksIHNiLmJ1Zik7CisJCXJldCA9IC0xOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX3dvcmt0cmVlKGludCBhYywgY29uc3QgY2hhciAqKmF2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGZvcmNlID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19GT1JDRSgmZm9yY2UsCisJCQkgTl8oImZvcmNlIHJlbW92YWwgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiKSwKKwkJCSBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9FTkQoKQorCX07CisJc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzLCAqd3Q7CisJc3RydWN0IHN0cmJ1ZiBlcnJtc2cgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpyZWFzb24gPSBOVUxMOworCWludCByZXQgPSAwOworCisJYWMgPSBwYXJzZV9vcHRpb25zKGFjLCBhdiwgcHJlZml4LCBvcHRpb25zLCB3b3JrdHJlZV91c2FnZSwgMCk7CisJaWYgKGFjICE9IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh3b3JrdHJlZV91c2FnZSwgb3B0aW9ucyk7CisKKwl3b3JrdHJlZXMgPSBnZXRfd29ya3RyZWVzKDApOworCXd0ID0gZmluZF93b3JrdHJlZSh3b3JrdHJlZXMsIHByZWZpeCwgYXZbMF0pOworCWlmICghd3QpCisJCWRpZShfKCInJXMnIGlzIG5vdCBhIHdvcmtpbmcgdHJlZSIpLCBhdlswXSk7CisJaWYgKGlzX21haW5fd29ya3RyZWUod3QpKQorCQlkaWUoXygiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIiksIGF2WzBdKTsKKwlpZiAoZm9yY2UgPCAyKQorCQlyZWFzb24gPSB3b3JrdHJlZV9sb2NrX3JlYXNvbih3dCk7CisJaWYgKHJlYXNvbikgeworCQlpZiAoKnJlYXNvbikKKwkJCWRpZShfKCJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG51c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IiksCisJCQkgICAgcmVhc29uKTsKKwkJZGllKF8oImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xudXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIpKTsKKwl9CisJaWYgKHZhbGlkYXRlX3dvcmt0cmVlKHd0LCAmZXJybXNnLCBXVF9WQUxJREFURV9XT1JLVFJFRV9NSVNTSU5HX09LKSkKKwkJZGllKF8oInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgcmVtb3ZlIHdvcmtpbmcgdHJlZTogJXMiKSwKKwkJICAgIGVycm1zZy5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnJtc2cpOworCisJaWYgKGZpbGVfZXhpc3RzKHd0LT5wYXRoKSkgeworCQlpZiAoIWZvcmNlKQorCQkJY2hlY2tfY2xlYW5fd29ya3RyZWUod3QsIGF2WzBdKTsKKworCQlyZXQgfD0gZGVsZXRlX2dpdF93b3JrX3RyZWUod3QpOworCX0KKwkvKgorCSAqIGNvbnRpbnVlIG9uIGV2ZW4gaWYgcmV0IGlzIG5vbi16ZXJvLCB0aGVyZSdzIG5vIGdvaW5nIGJhY2sKKwkgKiBmcm9tIGhlcmUuCisJICovCisJcmV0IHw9IGRlbGV0ZV9naXRfZGlyKHd0LT5pZCk7CisJZGVsZXRlX3dvcmt0cmVlc19kaXJfaWZfZW1wdHkoKTsKKworCWZyZWVfd29ya3RyZWVzKHdvcmt0cmVlcyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNtZF93b3JrdHJlZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfd29ya3RyZWVfY29uZmlnLCBOVUxMKTsKKworCWlmIChhYyA8IDIpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh3b3JrdHJlZV91c2FnZSwgb3B0aW9ucyk7CisJaWYgKCFwcmVmaXgpCisJCXByZWZpeCA9ICIiOworCWlmICghc3RyY21wKGF2WzFdLCAiYWRkIikpCisJCXJldHVybiBhZGQoYWMgLSAxLCBhdiArIDEsIHByZWZpeCk7CisJaWYgKCFzdHJjbXAoYXZbMV0sICJwcnVuZSIpKQorCQlyZXR1cm4gcHJ1bmUoYWMgLSAxLCBhdiArIDEsIHByZWZpeCk7CisJaWYgKCFzdHJjbXAoYXZbMV0sICJsaXN0IikpCisJCXJldHVybiBsaXN0KGFjIC0gMSwgYXYgKyAxLCBwcmVmaXgpOworCWlmICghc3RyY21wKGF2WzFdLCAibG9jayIpKQorCQlyZXR1cm4gbG9ja193b3JrdHJlZShhYyAtIDEsIGF2ICsgMSwgcHJlZml4KTsKKwlpZiAoIXN0cmNtcChhdlsxXSwgInVubG9jayIpKQorCQlyZXR1cm4gdW5sb2NrX3dvcmt0cmVlKGFjIC0gMSwgYXYgKyAxLCBwcmVmaXgpOworCWlmICghc3RyY21wKGF2WzFdLCAibW92ZSIpKQorCQlyZXR1cm4gbW92ZV93b3JrdHJlZShhYyAtIDEsIGF2ICsgMSwgcHJlZml4KTsKKwlpZiAoIXN0cmNtcChhdlsxXSwgInJlbW92ZSIpKQorCQlyZXR1cm4gcmVtb3ZlX3dvcmt0cmVlKGFjIC0gMSwgYXYgKyAxLCBwcmVmaXgpOworCXVzYWdlX3dpdGhfb3B0aW9ucyh3b3JrdHJlZV91c2FnZSwgb3B0aW9ucyk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3dyaXRlLXRyZWUuYyBiL2J1aWx0aW4vd3JpdGUtdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZDYxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3dyaXRlLXRyZWUuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB3cml0ZV90cmVlX3VzYWdlW10gPSB7CisJTl8oImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIiksCisJTlVMTAorfTsKKworaW50IGNtZF93cml0ZV90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqY21kX3ByZWZpeCkKK3sKKwlpbnQgZmxhZ3MgPSAwLCByZXQ7CisJY29uc3QgY2hhciAqdHJlZV9wcmVmaXggPSBOVUxMOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNvbnN0IGNoYXIgKm1lID0gImdpdC13cml0ZS10cmVlIjsKKwlzdHJ1Y3Qgb3B0aW9uIHdyaXRlX3RyZWVfb3B0aW9uc1tdID0geworCQlPUFRfQklUKDAsICJtaXNzaW5nLW9rIiwgJmZsYWdzLCBOXygiYWxsb3cgbWlzc2luZyBvYmplY3RzIiksCisJCQlXUklURV9UUkVFX01JU1NJTkdfT0spLAorCQlPUFRfU1RSSU5HKDAsICJwcmVmaXgiLCAmdHJlZV9wcmVmaXgsIE5fKCI8cHJlZml4Pi8iKSwKKwkJCSAgIE5fKCJ3cml0ZSB0cmVlIG9iamVjdCBmb3IgYSBzdWJkaXJlY3RvcnkgPHByZWZpeD4iKSksCisJCXsgT1BUSU9OX0JJVCwgMCwgImlnbm9yZS1jYWNoZS10cmVlIiwgJmZsYWdzLCBOVUxMLAorCQkgIE5fKCJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIiksCisJCSAgUEFSU0VfT1BUX0hJRERFTiB8IFBBUlNFX09QVF9OT0FSRywgTlVMTCwKKwkJICBXUklURV9UUkVFX0lHTk9SRV9DQUNIRV9UUkVFIH0sCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgY21kX3ByZWZpeCwgd3JpdGVfdHJlZV9vcHRpb25zLAorCQkJICAgICB3cml0ZV90cmVlX3VzYWdlLCAwKTsKKworCXJldCA9IHdyaXRlX2NhY2hlX2FzX3RyZWUoJm9pZCwgZmxhZ3MsIHRyZWVfcHJlZml4KTsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgMDoKKwkJcHJpbnRmKCIlc1xuIiwgb2lkX3RvX2hleCgmb2lkKSk7CisJCWJyZWFrOworCWNhc2UgV1JJVEVfVFJFRV9VTlJFQURBQkxFX0lOREVYOgorCQlkaWUoIiVzOiBlcnJvciByZWFkaW5nIHRoZSBpbmRleCIsIG1lKTsKKwkJYnJlYWs7CisJY2FzZSBXUklURV9UUkVFX1VOTUVSR0VEX0lOREVYOgorCQlkaWUoIiVzOiBlcnJvciBidWlsZGluZyB0cmVlcyIsIG1lKTsKKwkJYnJlYWs7CisJY2FzZSBXUklURV9UUkVFX1BSRUZJWF9FUlJPUjoKKwkJZGllKCIlczogcHJlZml4ICVzIG5vdCBmb3VuZCIsIG1lLCB0cmVlX3ByZWZpeCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVsay1jaGVja2luLmMgYi9idWxrLWNoZWNraW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODNhYWNiCi0tLSAvZGV2L251bGwKKysrIGIvYnVsay1jaGVja2luLmMKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1bGstY2hlY2tpbi5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjc3VtLWZpbGUuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKworc3RhdGljIHN0cnVjdCBidWxrX2NoZWNraW5fc3RhdGUgeworCXVuc2lnbmVkIHBsdWdnZWQ6MTsKKworCWNoYXIgKnBhY2tfdG1wX25hbWU7CisJc3RydWN0IGhhc2hmaWxlICpmOworCW9mZl90IG9mZnNldDsKKwlzdHJ1Y3QgcGFja19pZHhfb3B0aW9uIHBhY2tfaWR4X29wdHM7CisKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKip3cml0dGVuOworCXVpbnQzMl90IGFsbG9jX3dyaXR0ZW47CisJdWludDMyX3QgbnJfd3JpdHRlbjsKK30gc3RhdGU7CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9idWxrX2NoZWNraW4oc3RydWN0IGJ1bGtfY2hlY2tpbl9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IHN0cmJ1ZiBwYWNrbmFtZSA9IFNUUkJVRl9JTklUOworCWludCBpOworCisJaWYgKCFzdGF0ZS0+ZikKKwkJcmV0dXJuOworCisJaWYgKHN0YXRlLT5ucl93cml0dGVuID09IDApIHsKKwkJY2xvc2Uoc3RhdGUtPmYtPmZkKTsKKwkJdW5saW5rKHN0YXRlLT5wYWNrX3RtcF9uYW1lKTsKKwkJZ290byBjbGVhcl9leGl0OworCX0gZWxzZSBpZiAoc3RhdGUtPm5yX3dyaXR0ZW4gPT0gMSkgeworCQlmaW5hbGl6ZV9oYXNoZmlsZShzdGF0ZS0+Ziwgb2lkLmhhc2gsIENTVU1fSEFTSF9JTl9TVFJFQU0gfCBDU1VNX0ZTWU5DIHwgQ1NVTV9DTE9TRSk7CisJfSBlbHNlIHsKKwkJaW50IGZkID0gZmluYWxpemVfaGFzaGZpbGUoc3RhdGUtPmYsIG9pZC5oYXNoLCAwKTsKKwkJZml4dXBfcGFja19oZWFkZXJfZm9vdGVyKGZkLCBvaWQuaGFzaCwgc3RhdGUtPnBhY2tfdG1wX25hbWUsCisJCQkJCSBzdGF0ZS0+bnJfd3JpdHRlbiwgb2lkLmhhc2gsCisJCQkJCSBzdGF0ZS0+b2Zmc2V0KTsKKwkJY2xvc2UoZmQpOworCX0KKworCXN0cmJ1Zl9hZGRmKCZwYWNrbmFtZSwgIiVzL3BhY2svcGFjay0iLCBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwlmaW5pc2hfdG1wX3BhY2tmaWxlKCZwYWNrbmFtZSwgc3RhdGUtPnBhY2tfdG1wX25hbWUsCisJCQkgICAgc3RhdGUtPndyaXR0ZW4sIHN0YXRlLT5ucl93cml0dGVuLAorCQkJICAgICZzdGF0ZS0+cGFja19pZHhfb3B0cywgb2lkLmhhc2gpOworCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnJfd3JpdHRlbjsgaSsrKQorCQlmcmVlKHN0YXRlLT53cml0dGVuW2ldKTsKKworY2xlYXJfZXhpdDoKKwlmcmVlKHN0YXRlLT53cml0dGVuKTsKKwltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZwYWNrbmFtZSk7CisJLyogTWFrZSBvYmplY3RzIHdlIGp1c3Qgd3JvdGUgYXZhaWxhYmxlIHRvIG91cnNlbHZlcyAqLworCXJlcHJlcGFyZV9wYWNrZWRfZ2l0KHRoZV9yZXBvc2l0b3J5KTsKK30KKworc3RhdGljIGludCBhbHJlYWR5X3dyaXR0ZW4oc3RydWN0IGJ1bGtfY2hlY2tpbl9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpbnQgaTsKKworCS8qIFRoZSBvYmplY3QgbWF5IGFscmVhZHkgZXhpc3QgaW4gdGhlIHJlcG9zaXRvcnkgKi8KKwlpZiAoaGFzX29iamVjdF9maWxlKG9pZCkpCisJCXJldHVybiAxOworCisJLyogTWlnaHQgd2FudCB0byBrZWVwIHRoZSBsaXN0IHNvcnRlZCAqLworCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnJfd3JpdHRlbjsgaSsrKQorCQlpZiAob2lkZXEoJnN0YXRlLT53cml0dGVuW2ldLT5vaWQsIG9pZCkpCisJCQlyZXR1cm4gMTsKKworCS8qIFRoaXMgaXMgYSBuZXcgb2JqZWN0IHdlIG5lZWQgdG8ga2VlcCAqLworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCB0aGUgY29udGVudHMgZnJvbSBmZCBmb3Igc2l6ZSBieXRlcywgc3RyZWFtaW5nIGl0IHRvIHRoZQorICogcGFja2ZpbGUgaW4gc3RhdGUgd2hpbGUgdXBkYXRpbmcgdGhlIGhhc2ggaW4gY3R4LiBTaWduYWwgYSBmYWlsdXJlCisgKiBieSByZXR1cm5pbmcgYSBuZWdhdGl2ZSB2YWx1ZSB3aGVuIHRoZSByZXN1bHRpbmcgcGFjayB3b3VsZCBleGNlZWQKKyAqIHRoZSBwYWNrIHNpemUgbGltaXQgYW5kIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBvYmplY3QgaW4gdGhlIHBhY2ssCisgKiBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGRpc2NhcmQgd2hhdCB3ZSB3cm90ZSBmcm9tIHRoZSBjdXJyZW50IHBhY2sKKyAqIGJ5IHRydW5jYXRpbmcgaXQgYW5kIG9wZW5pbmcgYSBuZXcgb25lLiBUaGUgY2FsbGVyIHdpbGwgdGhlbiBjYWxsCisgKiB1cyBhZ2FpbiBhZnRlciByZXdpbmRpbmcgdGhlIGlucHV0IGZkLgorICoKKyAqIFRoZSBhbHJlYWR5X2hhc2hlZF90byBwb2ludGVyIGlzIGtlcHQgdW50b3VjaGVkIGJ5IHRoZSBjYWxsZXIgdG8KKyAqIG1ha2Ugc3VyZSB3ZSBkbyBub3QgaGFzaCB0aGUgc2FtZSBieXRlIHdoZW4gd2UgYXJlIGNhbGxlZAorICogYWdhaW4uIFRoaXMgd2F5LCB0aGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgdG8gY2hlY2twb2ludCBpdHMgaGFzaAorICogc3RhdHVzIGJlZm9yZSBjYWxsaW5nIHVzIGp1c3QgaW4gY2FzZSB3ZSBhc2sgaXQgdG8gY2FsbCB1cyBhZ2FpbgorICogd2l0aCBhIG5ldyBwYWNrLgorICovCitzdGF0aWMgaW50IHN0cmVhbV90b19wYWNrKHN0cnVjdCBidWxrX2NoZWNraW5fc3RhdGUgKnN0YXRlLAorCQkJICBnaXRfaGFzaF9jdHggKmN0eCwgb2ZmX3QgKmFscmVhZHlfaGFzaGVkX3RvLAorCQkJICBpbnQgZmQsIHNpemVfdCBzaXplLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkgIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzKQoreworCWdpdF96c3RyZWFtIHM7CisJdW5zaWduZWQgY2hhciBvYnVmWzE2Mzg0XTsKKwl1bnNpZ25lZCBoZHJsZW47CisJaW50IHN0YXR1cyA9IFpfT0s7CisJaW50IHdyaXRlX29iamVjdCA9IChmbGFncyAmIEhBU0hfV1JJVEVfT0JKRUNUKTsKKwlvZmZfdCBvZmZzZXQgPSAwOworCisJZ2l0X2RlZmxhdGVfaW5pdCgmcywgcGFja19jb21wcmVzc2lvbl9sZXZlbCk7CisKKwloZHJsZW4gPSBlbmNvZGVfaW5fcGFja19vYmplY3RfaGVhZGVyKG9idWYsIHNpemVvZihvYnVmKSwgdHlwZSwgc2l6ZSk7CisJcy5uZXh0X291dCA9IG9idWYgKyBoZHJsZW47CisJcy5hdmFpbF9vdXQgPSBzaXplb2Yob2J1ZikgLSBoZHJsZW47CisKKwl3aGlsZSAoc3RhdHVzICE9IFpfU1RSRUFNX0VORCkgeworCQl1bnNpZ25lZCBjaGFyIGlidWZbMTYzODRdOworCisJCWlmIChzaXplICYmICFzLmF2YWlsX2luKSB7CisJCQlzc2l6ZV90IHJzaXplID0gc2l6ZSA8IHNpemVvZihpYnVmKSA/IHNpemUgOiBzaXplb2YoaWJ1Zik7CisJCQlzc2l6ZV90IHJlYWRfcmVzdWx0ID0gcmVhZF9pbl9mdWxsKGZkLCBpYnVmLCByc2l6ZSk7CisJCQlpZiAocmVhZF9yZXN1bHQgPCAwKQorCQkJCWRpZV9lcnJubygiZmFpbGVkIHRvIHJlYWQgZnJvbSAnJXMnIiwgcGF0aCk7CisJCQlpZiAocmVhZF9yZXN1bHQgIT0gcnNpemUpCisJCQkJZGllKCJmYWlsZWQgdG8gcmVhZCAlZCBieXRlcyBmcm9tICclcyciLAorCQkJCSAgICAoaW50KXJzaXplLCBwYXRoKTsKKwkJCW9mZnNldCArPSByc2l6ZTsKKwkJCWlmICgqYWxyZWFkeV9oYXNoZWRfdG8gPCBvZmZzZXQpIHsKKwkJCQlzaXplX3QgaHNpemUgPSBvZmZzZXQgLSAqYWxyZWFkeV9oYXNoZWRfdG87CisJCQkJaWYgKHJzaXplIDwgaHNpemUpCisJCQkJCWhzaXplID0gcnNpemU7CisJCQkJaWYgKGhzaXplKQorCQkJCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oY3R4LCBpYnVmLCBoc2l6ZSk7CisJCQkJKmFscmVhZHlfaGFzaGVkX3RvID0gb2Zmc2V0OworCQkJfQorCQkJcy5uZXh0X2luID0gaWJ1ZjsKKwkJCXMuYXZhaWxfaW4gPSByc2l6ZTsKKwkJCXNpemUgLT0gcnNpemU7CisJCX0KKworCQlzdGF0dXMgPSBnaXRfZGVmbGF0ZSgmcywgc2l6ZSA/IDAgOiBaX0ZJTklTSCk7CisKKwkJaWYgKCFzLmF2YWlsX291dCB8fCBzdGF0dXMgPT0gWl9TVFJFQU1fRU5EKSB7CisJCQlpZiAod3JpdGVfb2JqZWN0KSB7CisJCQkJc2l6ZV90IHdyaXR0ZW4gPSBzLm5leHRfb3V0IC0gb2J1ZjsKKworCQkJCS8qIHdvdWxkIHdlIGJ1c3QgdGhlIHNpemUgbGltaXQ/ICovCisJCQkJaWYgKHN0YXRlLT5ucl93cml0dGVuICYmCisJCQkJICAgIHBhY2tfc2l6ZV9saW1pdF9jZmcgJiYKKwkJCQkgICAgcGFja19zaXplX2xpbWl0X2NmZyA8IHN0YXRlLT5vZmZzZXQgKyB3cml0dGVuKSB7CisJCQkJCWdpdF9kZWZsYXRlX2Fib3J0KCZzKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKworCQkJCWhhc2h3cml0ZShzdGF0ZS0+Ziwgb2J1Ziwgd3JpdHRlbik7CisJCQkJc3RhdGUtPm9mZnNldCArPSB3cml0dGVuOworCQkJfQorCQkJcy5uZXh0X291dCA9IG9idWY7CisJCQlzLmF2YWlsX291dCA9IHNpemVvZihvYnVmKTsKKwkJfQorCisJCXN3aXRjaCAoc3RhdHVzKSB7CisJCWNhc2UgWl9PSzoKKwkJY2FzZSBaX0JVRl9FUlJPUjoKKwkJY2FzZSBaX1NUUkVBTV9FTkQ6CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCWRpZSgidW5leHBlY3RlZCBkZWZsYXRlIGZhaWx1cmU6ICVkIiwgc3RhdHVzKTsKKwkJfQorCX0KKwlnaXRfZGVmbGF0ZV9lbmQoJnMpOworCXJldHVybiAwOworfQorCisvKiBMYXppbHkgY3JlYXRlIGJhY2tpbmcgcGFja2ZpbGUgZm9yIHRoZSBzdGF0ZSAqLworc3RhdGljIHZvaWQgcHJlcGFyZV90b19zdHJlYW0oc3RydWN0IGJ1bGtfY2hlY2tpbl9zdGF0ZSAqc3RhdGUsCisJCQkgICAgICB1bnNpZ25lZCBmbGFncykKK3sKKwlpZiAoIShmbGFncyAmIEhBU0hfV1JJVEVfT0JKRUNUKSB8fCBzdGF0ZS0+ZikKKwkJcmV0dXJuOworCisJc3RhdGUtPmYgPSBjcmVhdGVfdG1wX3BhY2tmaWxlKCZzdGF0ZS0+cGFja190bXBfbmFtZSk7CisJcmVzZXRfcGFja19pZHhfb3B0aW9uKCZzdGF0ZS0+cGFja19pZHhfb3B0cyk7CisKKwkvKiBQcmV0ZW5kIHdlIGFyZSBnb2luZyB0byB3cml0ZSBvbmx5IG9uZSBvYmplY3QgKi8KKwlzdGF0ZS0+b2Zmc2V0ID0gd3JpdGVfcGFja19oZWFkZXIoc3RhdGUtPmYsIDEpOworCWlmICghc3RhdGUtPm9mZnNldCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gd3JpdGUgcGFjayBoZWFkZXIiKTsKK30KKworc3RhdGljIGludCBkZWZsYXRlX3RvX3BhY2soc3RydWN0IGJ1bGtfY2hlY2tpbl9zdGF0ZSAqc3RhdGUsCisJCQkgICBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHRfb2lkLAorCQkJICAgaW50IGZkLCBzaXplX3Qgc2l6ZSwKKwkJCSAgIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgIHVuc2lnbmVkIGZsYWdzKQoreworCW9mZl90IHNlZWtiYWNrLCBhbHJlYWR5X2hhc2hlZF90bzsKKwlnaXRfaGFzaF9jdHggY3R4OworCXVuc2lnbmVkIGNoYXIgb2J1ZlsxNjM4NF07CisJdW5zaWduZWQgaGVhZGVyX2xlbjsKKwlzdHJ1Y3QgaGFzaGZpbGVfY2hlY2twb2ludCBjaGVja3BvaW50ID0gezB9OworCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqaWR4ID0gTlVMTDsKKworCXNlZWtiYWNrID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKKwlpZiAoc2Vla2JhY2sgPT0gKG9mZl90KSAtMSkKKwkJcmV0dXJuIGVycm9yKCJjYW5ub3QgZmluZCB0aGUgY3VycmVudCBvZmZzZXQiKTsKKworCWhlYWRlcl9sZW4gPSB4c25wcmludGYoKGNoYXIgKilvYnVmLCBzaXplb2Yob2J1ZiksICIlcyAlIiBQUkl1TUFYLAorCQkJICAgICAgIHR5cGVfbmFtZSh0eXBlKSwgKHVpbnRtYXhfdClzaXplKSArIDE7CisJdGhlX2hhc2hfYWxnby0+aW5pdF9mbigmY3R4KTsKKwl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmN0eCwgb2J1ZiwgaGVhZGVyX2xlbik7CisKKwkvKiBOb3RlOiBpZHggaXMgbm9uLU5VTEwgd2hlbiB3ZSBhcmUgd3JpdGluZyAqLworCWlmICgoZmxhZ3MgJiBIQVNIX1dSSVRFX09CSkVDVCkgIT0gMCkKKwkJaWR4ID0geGNhbGxvYygxLCBzaXplb2YoKmlkeCkpOworCisJYWxyZWFkeV9oYXNoZWRfdG8gPSAwOworCisJd2hpbGUgKDEpIHsKKwkJcHJlcGFyZV90b19zdHJlYW0oc3RhdGUsIGZsYWdzKTsKKwkJaWYgKGlkeCkgeworCQkJaGFzaGZpbGVfY2hlY2twb2ludChzdGF0ZS0+ZiwgJmNoZWNrcG9pbnQpOworCQkJaWR4LT5vZmZzZXQgPSBzdGF0ZS0+b2Zmc2V0OworCQkJY3JjMzJfYmVnaW4oc3RhdGUtPmYpOworCQl9CisJCWlmICghc3RyZWFtX3RvX3BhY2soc3RhdGUsICZjdHgsICZhbHJlYWR5X2hhc2hlZF90bywKKwkJCQkgICAgZmQsIHNpemUsIHR5cGUsIHBhdGgsIGZsYWdzKSkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBXcml0aW5nIHRoaXMgb2JqZWN0IHRvIHRoZSBjdXJyZW50IHBhY2sgd2lsbCBtYWtlCisJCSAqIGl0IHRvbyBiaWc7IHdlIG5lZWQgdG8gdHJ1bmNhdGUgaXQsIHN0YXJ0IGEgbmV3CisJCSAqIHBhY2ssIGFuZCB3cml0ZSBpbnRvIGl0LgorCQkgKi8KKwkJaWYgKCFpZHgpCisJCQlCVUcoInNob3VsZCBub3QgaGFwcGVuIik7CisJCWhhc2hmaWxlX3RydW5jYXRlKHN0YXRlLT5mLCAmY2hlY2twb2ludCk7CisJCXN0YXRlLT5vZmZzZXQgPSBjaGVja3BvaW50Lm9mZnNldDsKKwkJZmluaXNoX2J1bGtfY2hlY2tpbihzdGF0ZSk7CisJCWlmIChsc2VlayhmZCwgc2Vla2JhY2ssIFNFRUtfU0VUKSA9PSAob2ZmX3QpIC0xKQorCQkJcmV0dXJuIGVycm9yKCJjYW5ub3Qgc2VlayBiYWNrIik7CisJfQorCXRoZV9oYXNoX2FsZ28tPmZpbmFsX2ZuKHJlc3VsdF9vaWQtPmhhc2gsICZjdHgpOworCWlmICghaWR4KQorCQlyZXR1cm4gMDsKKworCWlkeC0+Y3JjMzIgPSBjcmMzMl9lbmQoc3RhdGUtPmYpOworCWlmIChhbHJlYWR5X3dyaXR0ZW4oc3RhdGUsIHJlc3VsdF9vaWQpKSB7CisJCWhhc2hmaWxlX3RydW5jYXRlKHN0YXRlLT5mLCAmY2hlY2twb2ludCk7CisJCXN0YXRlLT5vZmZzZXQgPSBjaGVja3BvaW50Lm9mZnNldDsKKwkJZnJlZShpZHgpOworCX0gZWxzZSB7CisJCW9pZGNweSgmaWR4LT5vaWQsIHJlc3VsdF9vaWQpOworCQlBTExPQ19HUk9XKHN0YXRlLT53cml0dGVuLAorCQkJICAgc3RhdGUtPm5yX3dyaXR0ZW4gKyAxLAorCQkJICAgc3RhdGUtPmFsbG9jX3dyaXR0ZW4pOworCQlzdGF0ZS0+d3JpdHRlbltzdGF0ZS0+bnJfd3JpdHRlbisrXSA9IGlkeDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBpbmRleF9idWxrX2NoZWNraW4oc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgICAgaW50IGZkLCBzaXplX3Qgc2l6ZSwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgZmxhZ3MpCit7CisJaW50IHN0YXR1cyA9IGRlZmxhdGVfdG9fcGFjaygmc3RhdGUsIG9pZCwgZmQsIHNpemUsIHR5cGUsCisJCQkJICAgICBwYXRoLCBmbGFncyk7CisJaWYgKCFzdGF0ZS5wbHVnZ2VkKQorCQlmaW5pc2hfYnVsa19jaGVja2luKCZzdGF0ZSk7CisJcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBwbHVnX2J1bGtfY2hlY2tpbih2b2lkKQoreworCXN0YXRlLnBsdWdnZWQgPSAxOworfQorCit2b2lkIHVucGx1Z19idWxrX2NoZWNraW4odm9pZCkKK3sKKwlzdGF0ZS5wbHVnZ2VkID0gMDsKKwlpZiAoc3RhdGUuZikKKwkJZmluaXNoX2J1bGtfY2hlY2tpbigmc3RhdGUpOworfQpkaWZmIC0tZ2l0IGEvYnVsay1jaGVja2luLmggYi9idWxrLWNoZWNraW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjZmM2RjCi0tLSAvZGV2L251bGwKKysrIGIvYnVsay1jaGVja2luLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4KKyAqLworI2lmbmRlZiBCVUxLX0NIRUNLSU5fSAorI2RlZmluZSBCVUxLX0NIRUNLSU5fSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKworaW50IGluZGV4X2J1bGtfY2hlY2tpbihzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICBpbnQgZmQsIHNpemVfdCBzaXplLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCSAgICAgICBjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBmbGFncyk7CisKK3ZvaWQgcGx1Z19idWxrX2NoZWNraW4odm9pZCk7Cit2b2lkIHVucGx1Z19idWxrX2NoZWNraW4odm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYnVuZGxlLmMgYi9idW5kbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQzOWUwCi0tLSAvZGV2L251bGwKKysrIGIvYnVuZGxlLmMKQEAgLTAsMCArMSw1MDYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiYnVuZGxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgYnVuZGxlX3NpZ25hdHVyZVtdID0gIiMgdjIgZ2l0IGJ1bmRsZVxuIjsKKworc3RhdGljIHZvaWQgYWRkX3RvX3JlZl9saXN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqbmFtZSwKKwkJc3RydWN0IHJlZl9saXN0ICpsaXN0KQoreworCUFMTE9DX0dST1cobGlzdC0+bGlzdCwgbGlzdC0+bnIgKyAxLCBsaXN0LT5hbGxvYyk7CisJb2lkY3B5KCZsaXN0LT5saXN0W2xpc3QtPm5yXS5vaWQsIG9pZCk7CisJbGlzdC0+bGlzdFtsaXN0LT5ucl0ubmFtZSA9IHhzdHJkdXAobmFtZSk7CisJbGlzdC0+bnIrKzsKK30KKworc3RhdGljIGludCBwYXJzZV9idW5kbGVfaGVhZGVyKGludCBmZCwgc3RydWN0IGJ1bmRsZV9oZWFkZXIgKmhlYWRlciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpyZXBvcnRfcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBzdGF0dXMgPSAwOworCisJLyogVGhlIGJ1bmRsZSBoZWFkZXIgYmVnaW5zIHdpdGggdGhlIHNpZ25hdHVyZSAqLworCWlmIChzdHJidWZfZ2V0d2hvbGVsaW5lX2ZkKCZidWYsIGZkLCAnXG4nKSB8fAorCSAgICBzdHJjbXAoYnVmLmJ1ZiwgYnVuZGxlX3NpZ25hdHVyZSkpIHsKKwkJaWYgKHJlcG9ydF9wYXRoKQorCQkJZXJyb3IoXygiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIpLAorCQkJICAgICAgcmVwb3J0X3BhdGgpOworCQlzdGF0dXMgPSAtMTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwkvKiBUaGUgYnVuZGxlIGhlYWRlciBlbmRzIHdpdGggYW4gZW1wdHkgbGluZSAqLworCXdoaWxlICghc3RyYnVmX2dldHdob2xlbGluZV9mZCgmYnVmLCBmZCwgJ1xuJykgJiYKKwkgICAgICAgYnVmLmxlbiAmJiBidWYuYnVmWzBdICE9ICdcbicpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWludCBpc19wcmVyZXEgPSAwOworCQljb25zdCBjaGFyICpwOworCisJCWlmICgqYnVmLmJ1ZiA9PSAnLScpIHsKKwkJCWlzX3ByZXJlcSA9IDE7CisJCQlzdHJidWZfcmVtb3ZlKCZidWYsIDAsIDEpOworCQl9CisJCXN0cmJ1Zl9ydHJpbSgmYnVmKTsKKworCQkvKgorCQkgKiBUaXAgbGluZXMgaGF2ZSBvYmplY3QgbmFtZSwgU1AsIGFuZCByZWZuYW1lLgorCQkgKiBQcmVyZXF1aXNpdGVzIGhhdmUgb2JqZWN0IG5hbWUgdGhhdCBpcyBvcHRpb25hbGx5CisJCSAqIGZvbGxvd2VkIGJ5IFNQIGFuZCBzdWJqZWN0IGxpbmUuCisJCSAqLworCQlpZiAocGFyc2Vfb2lkX2hleChidWYuYnVmLCAmb2lkLCAmcCkgfHwKKwkJICAgICgqcCAmJiAhaXNzcGFjZSgqcCkpIHx8CisJCSAgICAoIWlzX3ByZXJlcSAmJiAhKnApKSB7CisJCQlpZiAocmVwb3J0X3BhdGgpCisJCQkJZXJyb3IoXygidW5yZWNvZ25pemVkIGhlYWRlcjogJXMlcyAoJWQpIiksCisJCQkJICAgICAgKGlzX3ByZXJlcSA/ICItIiA6ICIiKSwgYnVmLmJ1ZiwgKGludClidWYubGVuKTsKKwkJCXN0YXR1cyA9IC0xOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlpZiAoaXNfcHJlcmVxKQorCQkJCWFkZF90b19yZWZfbGlzdCgmb2lkLCAiIiwgJmhlYWRlci0+cHJlcmVxdWlzaXRlcyk7CisJCQllbHNlCisJCQkJYWRkX3RvX3JlZl9saXN0KCZvaWQsIHAgKyAxLCAmaGVhZGVyLT5yZWZlcmVuY2VzKTsKKwkJfQorCX0KKworIGFib3J0OgorCWlmIChzdGF0dXMpIHsKKwkJY2xvc2UoZmQpOworCQlmZCA9IC0xOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gZmQ7Cit9CisKK2ludCByZWFkX2J1bmRsZV9oZWFkZXIoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGJ1bmRsZV9oZWFkZXIgKmhlYWRlcikKK3sKKwlpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKworCWlmIChmZCA8IDApCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIiksIHBhdGgpOworCXJldHVybiBwYXJzZV9idW5kbGVfaGVhZGVyKGZkLCBoZWFkZXIsIHBhdGgpOworfQorCitpbnQgaXNfYnVuZGxlKGNvbnN0IGNoYXIgKnBhdGgsIGludCBxdWlldCkKK3sKKwlzdHJ1Y3QgYnVuZGxlX2hlYWRlciBoZWFkZXI7CisJaW50IGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gMDsKKwltZW1zZXQoJmhlYWRlciwgMCwgc2l6ZW9mKGhlYWRlcikpOworCWZkID0gcGFyc2VfYnVuZGxlX2hlYWRlcihmZCwgJmhlYWRlciwgcXVpZXQgPyBOVUxMIDogcGF0aCk7CisJaWYgKGZkID49IDApCisJCWNsb3NlKGZkKTsKKwlyZXR1cm4gKGZkID49IDApOworfQorCitzdGF0aWMgaW50IGxpc3RfcmVmcyhzdHJ1Y3QgcmVmX2xpc3QgKnIsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCByLT5ucjsgaSsrKSB7CisJCWlmIChhcmdjID4gMSkgeworCQkJaW50IGo7CisJCQlmb3IgKGogPSAxOyBqIDwgYXJnYzsgaisrKQorCQkJCWlmICghc3RyY21wKHItPmxpc3RbaV0ubmFtZSwgYXJndltqXSkpCisJCQkJCWJyZWFrOworCQkJaWYgKGogPT0gYXJnYykKKwkJCQljb250aW51ZTsKKwkJfQorCQlwcmludGYoIiVzICVzXG4iLCBvaWRfdG9faGV4KCZyLT5saXN0W2ldLm9pZCksCisJCQkJci0+bGlzdFtpXS5uYW1lKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIFBSRVJFUV9NQVJLICgxdTw8MTYpCisKK2ludCB2ZXJpZnlfYnVuZGxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgIHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIsCisJCSAgaW50IHZlcmJvc2UpCit7CisJLyoKKwkgKiBEbyBmYXN0IGNoZWNrLCB0aGVuIGlmIGFueSBwcmVyZXFzIGFyZSBtaXNzaW5nIHRoZW4gZ28gbGluZSBieSBsaW5lCisJICogdG8gYmUgdmVyYm9zZSBhYm91dCB0aGUgZXJyb3JzCisJICovCisJc3RydWN0IHJlZl9saXN0ICpwID0gJmhlYWRlci0+cHJlcmVxdWlzaXRlczsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwljb25zdCBjaGFyICphcmd2W10gPSB7TlVMTCwgIi0tYWxsIiwgTlVMTH07CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWludCBpLCByZXQgPSAwLCByZXFfbnI7CisJY29uc3QgY2hhciAqbWVzc2FnZSA9IF8oIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6Iik7CisKKwlpZiAoIXIgfHwgIXItPm9iamVjdHMgfHwgIXItPm9iamVjdHMtPm9kYikKKwkJcmV0dXJuIGVycm9yKF8oIm5lZWQgYSByZXBvc2l0b3J5IHRvIHZlcmlmeSBhIGJ1bmRsZSIpKTsKKworCXJlcG9faW5pdF9yZXZpc2lvbnMociwgJnJldnMsIE5VTEwpOworCWZvciAoaSA9IDA7IGkgPCBwLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfbGlzdF9lbnRyeSAqZSA9IHAtPmxpc3QgKyBpOworCQlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHIsICZlLT5vaWQpOworCQlpZiAobykgeworCQkJby0+ZmxhZ3MgfD0gUFJFUkVRX01BUks7CisJCQlhZGRfcGVuZGluZ19vYmplY3QoJnJldnMsIG8sIGUtPm5hbWUpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCsrcmV0ID09IDEpCisJCQllcnJvcigiJXMiLCBtZXNzYWdlKTsKKwkJZXJyb3IoIiVzICVzIiwgb2lkX3RvX2hleCgmZS0+b2lkKSwgZS0+bmFtZSk7CisJfQorCWlmIChyZXZzLnBlbmRpbmcubnIgIT0gcC0+bnIpCisJCXJldHVybiByZXQ7CisJcmVxX25yID0gcmV2cy5wZW5kaW5nLm5yOworCXNldHVwX3JldmlzaW9ucygyLCBhcmd2LCAmcmV2cywgTlVMTCk7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCisJaSA9IHJlcV9ucjsKKwl3aGlsZSAoaSAmJiAoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXZzKSkpCisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFBSRVJFUV9NQVJLKQorCQkJaS0tOworCisJZm9yIChpID0gMDsgaSA8IHAtPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl9saXN0X2VudHJ5ICplID0gcC0+bGlzdCArIGk7CisJCXN0cnVjdCBvYmplY3QgKm8gPSBwYXJzZV9vYmplY3QociwgJmUtPm9pZCk7CisJCWFzc2VydChvKTsgLyogb3RoZXJ3aXNlIHdlJ2QgaGF2ZSByZXR1cm5lZCBlYXJseSAqLworCQlpZiAoby0+ZmxhZ3MgJiBTSE9XTikKKwkJCWNvbnRpbnVlOworCQlpZiAoKytyZXQgPT0gMSkKKwkJCWVycm9yKCIlcyIsIG1lc3NhZ2UpOworCQllcnJvcigiJXMgJXMiLCBvaWRfdG9faGV4KCZlLT5vaWQpLCBlLT5uYW1lKTsKKwl9CisKKwkvKiBDbGVhbiB1cCBvYmplY3RzIHVzZWQsIGFzIHRoZXkgd2lsbCBiZSByZXVzZWQuICovCisJZm9yIChpID0gMDsgaSA8IHAtPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl9saXN0X2VudHJ5ICplID0gcC0+bGlzdCArIGk7CisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyLCAmZS0+b2lkLCAxKTsKKwkJaWYgKGNvbW1pdCkKKwkJCWNsZWFyX2NvbW1pdF9tYXJrcyhjb21taXQsIEFMTF9SRVZfRkxBR1MpOworCX0KKworCWlmICh2ZXJib3NlKSB7CisJCXN0cnVjdCByZWZfbGlzdCAqcjsKKworCQlyID0gJmhlYWRlci0+cmVmZXJlbmNlczsKKwkJcHJpbnRmX2xuKFFfKCJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoaXMgcmVmOiIsCisJCQkgICAgICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoZXNlICVkIHJlZnM6IiwKKwkJCSAgICAgci0+bnIpLAorCQkJICByLT5ucik7CisJCWxpc3RfcmVmcyhyLCAwLCBOVUxMKTsKKwkJciA9ICZoZWFkZXItPnByZXJlcXVpc2l0ZXM7CisJCWlmICghci0+bnIpIHsKKwkJCXByaW50Zl9sbihfKCJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIpKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50Zl9sbihRXygiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZjoiLAorCQkJCSAgICAgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhlc2UgJWQgcmVmczoiLAorCQkJCSAgICAgci0+bnIpLAorCQkJCSAgci0+bnIpOworCQkJbGlzdF9yZWZzKHIsIDAsIE5VTEwpOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBsaXN0X2J1bmRsZV9yZWZzKHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlyZXR1cm4gbGlzdF9yZWZzKCZoZWFkZXItPnJlZmVyZW5jZXMsIGFyZ2MsIGFyZ3YpOworfQorCitzdGF0aWMgaW50IGlzX3RhZ19pbl9kYXRlX3JhbmdlKHN0cnVjdCBvYmplY3QgKnRhZywgc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciAqYnVmID0gTlVMTCwgKmxpbmUsICpsaW5lZW5kOworCXRpbWVzdGFtcF90IGRhdGU7CisJaW50IHJlc3VsdCA9IDE7CisKKwlpZiAocmV2cy0+bWF4X2FnZSA9PSAtMSAmJiByZXZzLT5taW5fYWdlID09IC0xKQorCQlnb3RvIG91dDsKKworCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUoJnRhZy0+b2lkLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlnb3RvIG91dDsKKwlsaW5lID0gbWVtbWVtKGJ1Ziwgc2l6ZSwgIlxudGFnZ2VyICIsIDgpOworCWlmICghbGluZSsrKQorCQlnb3RvIG91dDsKKwlsaW5lZW5kID0gbWVtY2hyKGxpbmUsICdcbicsIGJ1ZiArIHNpemUgLSBsaW5lKTsKKwlsaW5lID0gbWVtY2hyKGxpbmUsICc+JywgbGluZWVuZCA/IGxpbmVlbmQgLSBsaW5lIDogYnVmICsgc2l6ZSAtIGxpbmUpOworCWlmICghbGluZSsrKQorCQlnb3RvIG91dDsKKwlkYXRlID0gcGFyc2VfdGltZXN0YW1wKGxpbmUsIE5VTEwsIDEwKTsKKwlyZXN1bHQgPSAocmV2cy0+bWF4X2FnZSA9PSAtMSB8fCByZXZzLT5tYXhfYWdlIDwgZGF0ZSkgJiYKKwkJKHJldnMtPm1pbl9hZ2UgPT0gLTEgfHwgcmV2cy0+bWluX2FnZSA+IGRhdGUpOworb3V0OgorCWZyZWUoYnVmKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qIFdyaXRlIHRoZSBwYWNrIGRhdGEgdG8gYnVuZGxlX2ZkICovCitzdGF0aWMgaW50IHdyaXRlX3BhY2tfZGF0YShpbnQgYnVuZGxlX2ZkLCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBhcmd2X2FycmF5ICpwYWNrX29wdGlvbnMpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcGFja19vYmplY3RzID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCBpOworCisJYXJndl9hcnJheV9wdXNobCgmcGFja19vYmplY3RzLmFyZ3MsCisJCQkgInBhY2stb2JqZWN0cyIsCisJCQkgIi0tc3Rkb3V0IiwgIi0tdGhpbiIsICItLWRlbHRhLWJhc2Utb2Zmc2V0IiwKKwkJCSBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2h2KCZwYWNrX29iamVjdHMuYXJncywgcGFja19vcHRpb25zLT5hcmd2KTsKKwlwYWNrX29iamVjdHMuaW4gPSAtMTsKKwlwYWNrX29iamVjdHMub3V0ID0gYnVuZGxlX2ZkOworCXBhY2tfb2JqZWN0cy5naXRfY21kID0gMTsKKworCS8qCisJICogc3RhcnRfY29tbWFuZCgpIHdpbGwgY2xvc2Ugb3VyIGRlc2NyaXB0b3IgaWYgaXQncyA+MS4gRHVwbGljYXRlIGl0CisJICogdG8gYXZvaWQgc3VycHJpc2luZyB0aGUgY2FsbGVyLgorCSAqLworCWlmIChwYWNrX29iamVjdHMub3V0ID4gMSkgeworCQlwYWNrX29iamVjdHMub3V0ID0gZHVwKHBhY2tfb2JqZWN0cy5vdXQpOworCQlpZiAocGFja19vYmplY3RzLm91dCA8IDApIHsKKwkJCWVycm9yX2Vycm5vKF8oInVuYWJsZSB0byBkdXAgYnVuZGxlIGRlc2NyaXB0b3IiKSk7CisJCQljaGlsZF9wcm9jZXNzX2NsZWFyKCZwYWNrX29iamVjdHMpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJaWYgKHN0YXJ0X2NvbW1hbmQoJnBhY2tfb2JqZWN0cykpCisJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIikpOworCisJZm9yIChpID0gMDsgaSA8IHJldnMtPnBlbmRpbmcubnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0uaXRlbTsKKwkJaWYgKG9iamVjdC0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJd3JpdGVfb3JfZGllKHBhY2tfb2JqZWN0cy5pbiwgIl4iLCAxKTsKKwkJd3JpdGVfb3JfZGllKHBhY2tfb2JqZWN0cy5pbiwgb2lkX3RvX2hleCgmb2JqZWN0LT5vaWQpLCB0aGVfaGFzaF9hbGdvLT5oZXhzeik7CisJCXdyaXRlX29yX2RpZShwYWNrX29iamVjdHMuaW4sICJcbiIsIDEpOworCX0KKwljbG9zZShwYWNrX29iamVjdHMuaW4pOworCWlmIChmaW5pc2hfY29tbWFuZCgmcGFja19vYmplY3RzKSkKKwkJcmV0dXJuIGVycm9yKF8oInBhY2stb2JqZWN0cyBkaWVkIikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXB1dGVfYW5kX3dyaXRlX3ByZXJlcXVpc2l0ZXMoaW50IGJ1bmRsZV9mZCwKKwkJCQkJICAgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcmxzID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqcmxzX2ZvdXQ7CisJaW50IGk7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZybHMuYXJncywKKwkJCSAicmV2LWxpc3QiLCAiLS1ib3VuZGFyeSIsICItLXByZXR0eT1vbmVsaW5lIiwKKwkJCSBOVUxMKTsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorCQlhcmd2X2FycmF5X3B1c2goJnJscy5hcmdzLCBhcmd2W2ldKTsKKwlybHMub3V0ID0gLTE7CisJcmxzLmdpdF9jbWQgPSAxOworCWlmIChzdGFydF9jb21tYW5kKCZybHMpKQorCQlyZXR1cm4gLTE7CisJcmxzX2ZvdXQgPSB4ZmRvcGVuKHJscy5vdXQsICJyIik7CisJd2hpbGUgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoJmJ1ZiwgcmxzX2ZvdXQsICdcbicpICE9IEVPRikgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJaWYgKGJ1Zi5sZW4gPiAwICYmIGJ1Zi5idWZbMF0gPT0gJy0nKSB7CisJCQl3cml0ZV9vcl9kaWUoYnVuZGxlX2ZkLCBidWYuYnVmLCBidWYubGVuKTsKKwkJCWlmICghZ2V0X29pZF9oZXgoYnVmLmJ1ZiArIDEsICZvaWQpKSB7CisJCQkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gcGFyc2Vfb2JqZWN0X29yX2RpZSgmb2lkLAorCQkJCQkJCQkJICAgIGJ1Zi5idWYpOworCQkJCW9iamVjdC0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCBidWYuYnVmKTsKKwkJCX0KKwkJfSBlbHNlIGlmICghZ2V0X29pZF9oZXgoYnVmLmJ1ZiwgJm9pZCkpIHsKKwkJCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IHBhcnNlX29iamVjdF9vcl9kaWUoJm9pZCwKKwkJCQkJCQkJICAgIGJ1Zi5idWYpOworCQkJb2JqZWN0LT5mbGFncyB8PSBTSE9XTjsKKwkJfQorCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlmY2xvc2UocmxzX2ZvdXQpOworCWlmIChmaW5pc2hfY29tbWFuZCgmcmxzKSkKKwkJcmV0dXJuIGVycm9yKF8oInJldi1saXN0IGRpZWQiKSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXcml0ZSBvdXQgYnVuZGxlIHJlZnMgYmFzZWQgb24gdGhlIHRpcHMgYWxyZWFkeQorICogcGFyc2VkIGludG8gcmV2cy5wZW5kaW5nLiBBcyBhIHNpZGUgZWZmZWN0LCBtYXkKKyAqIG1hbmlwdWxhdGUgcmV2cy5wZW5kaW5nIHRvIGluY2x1ZGUgYWRkaXRpb25hbAorICogbmVjZXNzYXJ5IG9iamVjdHMgKGxpa2UgdGFncykuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlZnMgd3JpdHRlbiwgb3IgbmVnYXRpdmUKKyAqIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IHdyaXRlX2J1bmRsZV9yZWZzKGludCBidW5kbGVfZmQsIHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlpbnQgaTsKKwlpbnQgcmVmX2NvdW50ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCByZXZzLT5wZW5kaW5nLm5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZSA9IHJldnMtPnBlbmRpbmcub2JqZWN0cyArIGk7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljaGFyICpyZWY7CisJCWNvbnN0IGNoYXIgKmRpc3BsYXlfcmVmOworCQlpbnQgZmxhZzsKKworCQlpZiAoZS0+aXRlbS0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisJCWlmIChkd2ltX3JlZihlLT5uYW1lLCBzdHJsZW4oZS0+bmFtZSksICZvaWQsICZyZWYpICE9IDEpCisJCQlnb3RvIHNraXBfd3JpdGVfcmVmOworCQlpZiAocmVhZF9yZWZfZnVsbChlLT5uYW1lLCBSRVNPTFZFX1JFRl9SRUFESU5HLCAmb2lkLCAmZmxhZykpCisJCQlmbGFnID0gMDsKKwkJZGlzcGxheV9yZWYgPSAoZmxhZyAmIFJFRl9JU1NZTVJFRikgPyBlLT5uYW1lIDogcmVmOworCisJCWlmIChlLT5pdGVtLT50eXBlID09IE9CSl9UQUcgJiYKKwkJCQkhaXNfdGFnX2luX2RhdGVfcmFuZ2UoZS0+aXRlbSwgcmV2cykpIHsKKwkJCWUtPml0ZW0tPmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCQlnb3RvIHNraXBfd3JpdGVfcmVmOworCQl9CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSByZWZzIHdlIHdyb3RlIG91dCBpcyBjb3JyZWN0OyAtLW1heC1jb3VudCBhbmQKKwkJICogb3RoZXIgbGltaXRpbmcgb3B0aW9ucyBjb3VsZCBoYXZlIHByZXZlbnRlZCBhbGwgdGhlIHRpcHMKKwkJICogZnJvbSBnZXR0aW5nIG91dHB1dC4KKwkJICoKKwkJICogTm9uIGNvbW1pdCBvYmplY3RzIHN1Y2ggYXMgdGFncyBhbmQgYmxvYnMgZG8gbm90IGhhdmUKKwkJICogdGhpcyBpc3N1ZSBhcyB0aGV5IGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhvc2UgZXh0cmEKKwkJICogY29uc3RyYWludHMuCisJCSAqLworCQlpZiAoIShlLT5pdGVtLT5mbGFncyAmIFNIT1dOKSAmJiBlLT5pdGVtLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJCXdhcm5pbmcoXygicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiKSwKKwkJCQllLT5uYW1lKTsKKwkJCWdvdG8gc2tpcF93cml0ZV9yZWY7CisJCX0KKwkJLyoKKwkJICogSWYgeW91IHJ1biAiZ2l0IGJ1bmRsZSBjcmVhdGUgYm5kbCB2MS4wLi52Mi4wIiwgdGhlCisJCSAqIG5hbWUgb2YgdGhlIHBvc2l0aXZlIHJlZiBpcyAidjIuMCIgYnV0IHRoYXQgaXMgdGhlCisJCSAqIGNvbW1pdCB0aGF0IGlzIHJlZmVyZW5jZWQgYnkgdGhlIHRhZywgYW5kIG5vdCB0aGUgdGFnCisJCSAqIGl0c2VsZi4KKwkJICovCisJCWlmICghb2lkZXEoJm9pZCwgJmUtPml0ZW0tPm9pZCkpIHsKKwkJCS8qCisJCQkgKiBJcyB0aGlzIHRoZSBwb3NpdGl2ZSBlbmQgb2YgYSByYW5nZSBleHByZXNzZWQKKwkJCSAqIGluIHRlcm1zIG9mIGEgdGFnIChlLmcuIHYyLjAgZnJvbSB0aGUgcmFuZ2UKKwkJCSAqICJ2MS4wLi52Mi4wIik/CisJCQkgKi8KKwkJCXN0cnVjdCBjb21taXQgKm9uZSA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHJldnMtPnJlcG8sICZvaWQpOworCQkJc3RydWN0IG9iamVjdCAqb2JqOworCisJCQlpZiAoZS0+aXRlbSA9PSAmKG9uZS0+b2JqZWN0KSkgeworCQkJCS8qCisJCQkJICogTmVlZCB0byBpbmNsdWRlIGUtPm5hbWUgYXMgYW4KKwkJCQkgKiBpbmRlcGVuZGVudCByZWYgdG8gdGhlIHBhY2stb2JqZWN0cworCQkJCSAqIGlucHV0LCBzbyB0aGF0IHRoZSB0YWcgaXMgaW5jbHVkZWQKKwkJCQkgKiBpbiB0aGUgb3V0cHV0OyBvdGhlcndpc2Ugd2Ugd291bGQKKwkJCQkgKiBlbmQgdXAgdHJpZ2dlcmluZyAiZW1wdHkgYnVuZGxlIgorCQkJCSAqIGVycm9yLgorCQkJCSAqLworCQkJCW9iaiA9IHBhcnNlX29iamVjdF9vcl9kaWUoJm9pZCwgZS0+bmFtZSk7CisJCQkJb2JqLT5mbGFncyB8PSBTSE9XTjsKKwkJCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqLCBlLT5uYW1lKTsKKwkJCX0KKwkJCWdvdG8gc2tpcF93cml0ZV9yZWY7CisJCX0KKworCQlyZWZfY291bnQrKzsKKwkJd3JpdGVfb3JfZGllKGJ1bmRsZV9mZCwgb2lkX3RvX2hleCgmZS0+aXRlbS0+b2lkKSwgdGhlX2hhc2hfYWxnby0+aGV4c3opOworCQl3cml0ZV9vcl9kaWUoYnVuZGxlX2ZkLCAiICIsIDEpOworCQl3cml0ZV9vcl9kaWUoYnVuZGxlX2ZkLCBkaXNwbGF5X3JlZiwgc3RybGVuKGRpc3BsYXlfcmVmKSk7CisJCXdyaXRlX29yX2RpZShidW5kbGVfZmQsICJcbiIsIDEpOworIHNraXBfd3JpdGVfcmVmOgorCQlmcmVlKHJlZik7CisJfQorCisJLyogZW5kIGhlYWRlciAqLworCXdyaXRlX29yX2RpZShidW5kbGVfZmQsICJcbiIsIDEpOworCXJldHVybiByZWZfY291bnQ7Cit9CisKK2ludCBjcmVhdGVfYnVuZGxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpwYXRoLAorCQkgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgc3RydWN0IGFyZ3ZfYXJyYXkgKnBhY2tfb3B0aW9ucykKK3sKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2sgPSBMT0NLX0lOSVQ7CisJaW50IGJ1bmRsZV9mZCA9IC0xOworCWludCBidW5kbGVfdG9fc3Rkb3V0OworCWludCByZWZfY291bnQgPSAwOworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCisJYnVuZGxlX3RvX3N0ZG91dCA9ICFzdHJjbXAocGF0aCwgIi0iKTsKKwlpZiAoYnVuZGxlX3RvX3N0ZG91dCkKKwkJYnVuZGxlX2ZkID0gMTsKKwllbHNlCisJCWJ1bmRsZV9mZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmxvY2ssIHBhdGgsCisJCQkJCQkgICAgICBMT0NLX0RJRV9PTl9FUlJPUik7CisKKwkvKiB3cml0ZSBzaWduYXR1cmUgKi8KKwl3cml0ZV9vcl9kaWUoYnVuZGxlX2ZkLCBidW5kbGVfc2lnbmF0dXJlLCBzdHJsZW4oYnVuZGxlX3NpZ25hdHVyZSkpOworCisJLyogaW5pdCByZXZzIHRvIGxpc3Qgb2JqZWN0cyBmb3IgcGFjay1vYmplY3RzIGxhdGVyICovCisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKwlyZXBvX2luaXRfcmV2aXNpb25zKHIsICZyZXZzLCBOVUxMKTsKKworCS8qIHdyaXRlIHByZXJlcXVpc2l0ZXMgKi8KKwlpZiAoY29tcHV0ZV9hbmRfd3JpdGVfcHJlcmVxdWlzaXRlcyhidW5kbGVfZmQsICZyZXZzLCBhcmdjLCBhcmd2KSkKKwkJZ290byBlcnI7CisKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXZzLCBOVUxMKTsKKworCWlmIChhcmdjID4gMSkgeworCQllcnJvcihfKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIiksIGFyZ3ZbMV0pOworCQlnb3RvIGVycjsKKwl9CisKKwlvYmplY3RfYXJyYXlfcmVtb3ZlX2R1cGxpY2F0ZXMoJnJldnMucGVuZGluZyk7CisKKwlyZWZfY291bnQgPSB3cml0ZV9idW5kbGVfcmVmcyhidW5kbGVfZmQsICZyZXZzKTsKKwlpZiAoIXJlZl9jb3VudCkKKwkJZGllKF8oIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIikpOworCWVsc2UgaWYgKHJlZl9jb3VudCA8IDApCisJCWdvdG8gZXJyOworCisJLyogd3JpdGUgcGFjayAqLworCWlmICh3cml0ZV9wYWNrX2RhdGEoYnVuZGxlX2ZkLCAmcmV2cywgcGFja19vcHRpb25zKSkKKwkJZ290byBlcnI7CisKKwlpZiAoIWJ1bmRsZV90b19zdGRvdXQpIHsKKwkJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJmxvY2spKQorCQkJZGllX2Vycm5vKF8oImNhbm5vdCBjcmVhdGUgJyVzJyIpLCBwYXRoKTsKKwl9CisJcmV0dXJuIDA7CitlcnI6CisJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCB1bmJ1bmRsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGJ1bmRsZV9oZWFkZXIgKmhlYWRlciwKKwkgICAgIGludCBidW5kbGVfZmQsIGludCBmbGFncykKK3sKKwljb25zdCBjaGFyICphcmd2X2luZGV4X3BhY2tbXSA9IHsiaW5kZXgtcGFjayIsCisJCQkJCSAiLS1maXgtdGhpbiIsICItLXN0ZGluIiwgTlVMTCwgTlVMTH07CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgaXAgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwlpZiAoZmxhZ3MgJiBCVU5ETEVfVkVSQk9TRSkKKwkJYXJndl9pbmRleF9wYWNrWzNdID0gIi12IjsKKworCWlmICh2ZXJpZnlfYnVuZGxlKHIsIGhlYWRlciwgMCkpCisJCXJldHVybiAtMTsKKwlpcC5hcmd2ID0gYXJndl9pbmRleF9wYWNrOworCWlwLmluID0gYnVuZGxlX2ZkOworCWlwLm5vX3N0ZG91dCA9IDE7CisJaXAuZ2l0X2NtZCA9IDE7CisJaWYgKHJ1bl9jb21tYW5kKCZpcCkpCisJCXJldHVybiBlcnJvcihfKCJpbmRleC1wYWNrIGRpZWQiKSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idW5kbGUuaCBiL2J1bmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYWIwYzcKLS0tIC9kZXYvbnVsbAorKysgYi9idW5kbGUuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIEJVTkRMRV9ICisjZGVmaW5lIEJVTkRMRV9ICisKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKworc3RydWN0IHJlZl9saXN0IHsKKwl1bnNpZ25lZCBpbnQgbnIsIGFsbG9jOworCXN0cnVjdCByZWZfbGlzdF9lbnRyeSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljaGFyICpuYW1lOworCX0gKmxpc3Q7Cit9OworCitzdHJ1Y3QgYnVuZGxlX2hlYWRlciB7CisJc3RydWN0IHJlZl9saXN0IHByZXJlcXVpc2l0ZXM7CisJc3RydWN0IHJlZl9saXN0IHJlZmVyZW5jZXM7Cit9OworCitpbnQgaXNfYnVuZGxlKGNvbnN0IGNoYXIgKnBhdGgsIGludCBxdWlldCk7CitpbnQgcmVhZF9idW5kbGVfaGVhZGVyKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIpOworaW50IGNyZWF0ZV9idW5kbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBzdHJ1Y3QgYXJndl9hcnJheSAqcGFja19vcHRpb25zKTsKK2ludCB2ZXJpZnlfYnVuZGxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyLCBpbnQgdmVyYm9zZSk7CisjZGVmaW5lIEJVTkRMRV9WRVJCT1NFIDEKK2ludCB1bmJ1bmRsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGJ1bmRsZV9oZWFkZXIgKmhlYWRlciwKKwkgICAgIGludCBidW5kbGVfZmQsIGludCBmbGFncyk7CitpbnQgbGlzdF9idW5kbGVfcmVmcyhzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyLAorCQlpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NhY2hlLXRyZWUuYyBiL2NhY2hlLXRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTM3YTgwCi0tLSAvZGV2L251bGwKKysrIGIvY2FjaGUtdHJlZS5jCkBAIC0wLDAgKzEsODUxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicmVwbGFjZS1vYmplY3QuaCIKKyNpbmNsdWRlICJwcm9taXNvci1yZW1vdGUuaCIKKworI2lmbmRlZiBERUJVR19DQUNIRV9UUkVFCisjZGVmaW5lIERFQlVHX0NBQ0hFX1RSRUUgMAorI2VuZGlmCisKK3N0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlKHZvaWQpCit7CisJc3RydWN0IGNhY2hlX3RyZWUgKml0ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNhY2hlX3RyZWUpKTsKKwlpdC0+ZW50cnlfY291bnQgPSAtMTsKKwlyZXR1cm4gaXQ7Cit9CisKK3ZvaWQgY2FjaGVfdHJlZV9mcmVlKHN0cnVjdCBjYWNoZV90cmVlICoqaXRfcCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQgPSAqaXRfcDsKKworCWlmICghaXQpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgaXQtPnN1YnRyZWVfbnI7IGkrKykKKwkJaWYgKGl0LT5kb3duW2ldKSB7CisJCQljYWNoZV90cmVlX2ZyZWUoJml0LT5kb3duW2ldLT5jYWNoZV90cmVlKTsKKwkJCWZyZWUoaXQtPmRvd25baV0pOworCQl9CisJZnJlZShpdC0+ZG93bik7CisJZnJlZShpdCk7CisJKml0X3AgPSBOVUxMOworfQorCitzdGF0aWMgaW50IHN1YnRyZWVfbmFtZV9jbXAoY29uc3QgY2hhciAqb25lLCBpbnQgb25lbGVuLAorCQkJICAgIGNvbnN0IGNoYXIgKnR3bywgaW50IHR3b2xlbikKK3sKKwlpZiAob25lbGVuIDwgdHdvbGVuKQorCQlyZXR1cm4gLTE7CisJaWYgKHR3b2xlbiA8IG9uZWxlbikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIG1lbWNtcChvbmUsIHR3bywgb25lbGVuKTsKK30KKworc3RhdGljIGludCBzdWJ0cmVlX3BvcyhzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBwYXRobGVuKQoreworCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqKmRvd24gPSBpdC0+ZG93bjsKKwlpbnQgbG8sIGhpOworCWxvID0gMDsKKwloaSA9IGl0LT5zdWJ0cmVlX25yOworCXdoaWxlIChsbyA8IGhpKSB7CisJCWludCBtaSA9IGxvICsgKGhpIC0gbG8pIC8gMjsKKwkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICptZGwgPSBkb3duW21pXTsKKwkJaW50IGNtcCA9IHN1YnRyZWVfbmFtZV9jbXAocGF0aCwgcGF0aGxlbiwKKwkJCQkJICAgbWRsLT5uYW1lLCBtZGwtPm5hbWVsZW4pOworCQlpZiAoIWNtcCkKKwkJCXJldHVybiBtaTsKKwkJaWYgKGNtcCA8IDApCisJCQloaSA9IG1pOworCQllbHNlCisJCQlsbyA9IG1pICsgMTsKKwl9CisJcmV0dXJuIC1sby0xOworfQorCitzdGF0aWMgc3RydWN0IGNhY2hlX3RyZWVfc3ViICpmaW5kX3N1YnRyZWUoc3RydWN0IGNhY2hlX3RyZWUgKml0LAorCQkJCQkgICBjb25zdCBjaGFyICpwYXRoLAorCQkJCQkgICBpbnQgcGF0aGxlbiwKKwkJCQkJICAgaW50IGNyZWF0ZSkKK3sKKwlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKmRvd247CisJaW50IHBvcyA9IHN1YnRyZWVfcG9zKGl0LCBwYXRoLCBwYXRobGVuKTsKKwlpZiAoMCA8PSBwb3MpCisJCXJldHVybiBpdC0+ZG93bltwb3NdOworCWlmICghY3JlYXRlKQorCQlyZXR1cm4gTlVMTDsKKworCXBvcyA9IC1wb3MtMTsKKwlBTExPQ19HUk9XKGl0LT5kb3duLCBpdC0+c3VidHJlZV9uciArIDEsIGl0LT5zdWJ0cmVlX2FsbG9jKTsKKwlpdC0+c3VidHJlZV9ucisrOworCisJRkxFWF9BTExPQ19NRU0oZG93biwgbmFtZSwgcGF0aCwgcGF0aGxlbik7CisJZG93bi0+Y2FjaGVfdHJlZSA9IE5VTEw7CisJZG93bi0+bmFtZWxlbiA9IHBhdGhsZW47CisKKwlpZiAocG9zIDwgaXQtPnN1YnRyZWVfbnIpCisJCU1PVkVfQVJSQVkoaXQtPmRvd24gKyBwb3MgKyAxLCBpdC0+ZG93biArIHBvcywKKwkJCSAgIGl0LT5zdWJ0cmVlX25yIC0gcG9zIC0gMSk7CisJaXQtPmRvd25bcG9zXSA9IGRvd247CisJcmV0dXJuIGRvd247Cit9CisKK3N0cnVjdCBjYWNoZV90cmVlX3N1YiAqY2FjaGVfdHJlZV9zdWIoc3RydWN0IGNhY2hlX3RyZWUgKml0LCBjb25zdCBjaGFyICpwYXRoKQoreworCWludCBwYXRobGVuID0gc3RybGVuKHBhdGgpOworCXJldHVybiBmaW5kX3N1YnRyZWUoaXQsIHBhdGgsIHBhdGhsZW4sIDEpOworfQorCitzdGF0aWMgaW50IGRvX2ludmFsaWRhdGVfcGF0aChzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJLyogYS9iL2MKKwkgKiA9PT4gaW52YWxpZGF0ZSBzZWxmCisJICogPT0+IGZpbmQgImEiLCBoYXZlIGl0IGludmFsaWRhdGUgImIvYyIKKwkgKiBhCisJICogPT0+IGludmFsaWRhdGUgc2VsZgorCSAqID09PiBpZiAiYSIgZXhpc3RzIGFzIGEgc3VidHJlZSwgcmVtb3ZlIGl0LgorCSAqLworCWNvbnN0IGNoYXIgKnNsYXNoOworCWludCBuYW1lbGVuOworCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqZG93bjsKKworI2lmIERFQlVHX0NBQ0hFX1RSRUUKKwlmcHJpbnRmKHN0ZGVyciwgImNhY2hlLXRyZWUgaW52YWxpZGF0ZSA8JXM+XG4iLCBwYXRoKTsKKyNlbmRpZgorCisJaWYgKCFpdCkKKwkJcmV0dXJuIDA7CisJc2xhc2ggPSBzdHJjaHJudWwocGF0aCwgJy8nKTsKKwluYW1lbGVuID0gc2xhc2ggLSBwYXRoOworCWl0LT5lbnRyeV9jb3VudCA9IC0xOworCWlmICghKnNsYXNoKSB7CisJCWludCBwb3M7CisJCXBvcyA9IHN1YnRyZWVfcG9zKGl0LCBwYXRoLCBuYW1lbGVuKTsKKwkJaWYgKDAgPD0gcG9zKSB7CisJCQljYWNoZV90cmVlX2ZyZWUoJml0LT5kb3duW3Bvc10tPmNhY2hlX3RyZWUpOworCQkJZnJlZShpdC0+ZG93bltwb3NdKTsKKwkJCS8qIDAgMSAyIDMgNCA1CisJCQkgKiAgICAgICBeICAgICBec3VidHJlZV9uciA9IDYKKwkJCSAqICAgICAgIHBvcworCQkJICogbW92ZSA0IGFuZCA1IHVwIG9uZSBwbGFjZSAoMiBlbnRyaWVzKQorCQkJICogMiA9IDYgLSAzIC0gMSA9IHN1YnRyZWVfbnIgLSBwb3MgLSAxCisJCQkgKi8KKwkJCU1PVkVfQVJSQVkoaXQtPmRvd24gKyBwb3MsIGl0LT5kb3duICsgcG9zICsgMSwKKwkJCQkgICBpdC0+c3VidHJlZV9uciAtIHBvcyAtIDEpOworCQkJaXQtPnN1YnRyZWVfbnItLTsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisJZG93biA9IGZpbmRfc3VidHJlZShpdCwgcGF0aCwgbmFtZWxlbiwgMCk7CisJaWYgKGRvd24pCisJCWRvX2ludmFsaWRhdGVfcGF0aChkb3duLT5jYWNoZV90cmVlLCBzbGFzaCArIDEpOworCXJldHVybiAxOworfQorCit2b2lkIGNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoKQoreworCWlmIChkb19pbnZhbGlkYXRlX3BhdGgoaXN0YXRlLT5jYWNoZV90cmVlLCBwYXRoKSkKKwkJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IENBQ0hFX1RSRUVfQ0hBTkdFRDsKK30KKworc3RhdGljIGludCB2ZXJpZnlfY2FjaGUoc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGUsCisJCQlpbnQgZW50cmllcywgaW50IGZsYWdzKQoreworCWludCBpLCBmdW5ueTsKKwlpbnQgc2lsZW50ID0gZmxhZ3MgJiBXUklURV9UUkVFX1NJTEVOVDsKKworCS8qIFZlcmlmeSB0aGF0IHRoZSB0cmVlIGlzIG1lcmdlZCAqLworCWZ1bm55ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBjYWNoZVtpXTsKKwkJaWYgKGNlX3N0YWdlKGNlKSkgeworCQkJaWYgKHNpbGVudCkKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAoMTAgPCArK2Z1bm55KSB7CisJCQkJZnByaW50ZihzdGRlcnIsICIuLi5cbiIpOworCQkJCWJyZWFrOworCQkJfQorCQkJZnByaW50ZihzdGRlcnIsICIlczogdW5tZXJnZWQgKCVzKVxuIiwKKwkJCQljZS0+bmFtZSwgb2lkX3RvX2hleCgmY2UtPm9pZCkpOworCQl9CisJfQorCWlmIChmdW5ueSkKKwkJcmV0dXJuIC0xOworCisJLyogQWxzbyB2ZXJpZnkgdGhhdCB0aGUgY2FjaGUgZG9lcyBub3QgaGF2ZSBwYXRoIGFuZCBwYXRoL2ZpbGUKKwkgKiBhdCB0aGUgc2FtZSB0aW1lLiAgQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoZSBjYWNoZSBoYXMgb25seQorCSAqIHN0YWdlIDAgZW50cmllcy4KKwkgKi8KKwlmdW5ueSA9IDA7CisJZm9yIChpID0gMDsgaSA8IGVudHJpZXMgLSAxOyBpKyspIHsKKwkJLyogcGF0aC9maWxlIGFsd2F5cyBjb21lcyBhZnRlciBwYXRoIGJlY2F1c2Ugb2YgdGhlIHdheQorCQkgKiB0aGUgY2FjaGUgaXMgc29ydGVkLiAgQWxzbyBwYXRoIGNhbiBhcHBlYXIgb25seSBvbmNlLAorCQkgKiB3aGljaCBtZWFucyBjb25mbGljdGluZyBvbmUgd291bGQgaW1tZWRpYXRlbHkgZm9sbG93LgorCQkgKi8KKwkJY29uc3QgY2hhciAqdGhpc19uYW1lID0gY2FjaGVbaV0tPm5hbWU7CisJCWNvbnN0IGNoYXIgKm5leHRfbmFtZSA9IGNhY2hlW2krMV0tPm5hbWU7CisJCWludCB0aGlzX2xlbiA9IHN0cmxlbih0aGlzX25hbWUpOworCQlpZiAodGhpc19sZW4gPCBzdHJsZW4obmV4dF9uYW1lKSAmJgorCQkgICAgc3RybmNtcCh0aGlzX25hbWUsIG5leHRfbmFtZSwgdGhpc19sZW4pID09IDAgJiYKKwkJICAgIG5leHRfbmFtZVt0aGlzX2xlbl0gPT0gJy8nKSB7CisJCQlpZiAoMTAgPCArK2Z1bm55KSB7CisJCQkJZnByaW50ZihzdGRlcnIsICIuLi5cbiIpOworCQkJCWJyZWFrOworCQkJfQorCQkJZnByaW50ZihzdGRlcnIsICJZb3UgaGF2ZSBib3RoICVzIGFuZCAlc1xuIiwKKwkJCQl0aGlzX25hbWUsIG5leHRfbmFtZSk7CisJCX0KKwl9CisJaWYgKGZ1bm55KQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2NhcmRfdW51c2VkX3N1YnRyZWVzKHN0cnVjdCBjYWNoZV90cmVlICppdCkKK3sKKwlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKipkb3duID0gaXQtPmRvd247CisJaW50IG5yID0gaXQtPnN1YnRyZWVfbnI7CisJaW50IGRzdCwgc3JjOworCWZvciAoZHN0ID0gc3JjID0gMDsgc3JjIDwgbnI7IHNyYysrKSB7CisJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqcyA9IGRvd25bc3JjXTsKKwkJaWYgKHMtPnVzZWQpCisJCQlkb3duW2RzdCsrXSA9IHM7CisJCWVsc2UgeworCQkJY2FjaGVfdHJlZV9mcmVlKCZzLT5jYWNoZV90cmVlKTsKKwkJCWZyZWUocyk7CisJCQlpdC0+c3VidHJlZV9uci0tOworCQl9CisJfQorfQorCitpbnQgY2FjaGVfdHJlZV9mdWxseV92YWxpZChzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQpCit7CisJaW50IGk7CisJaWYgKCFpdCkKKwkJcmV0dXJuIDA7CisJaWYgKGl0LT5lbnRyeV9jb3VudCA8IDAgfHwgIWhhc19vYmplY3RfZmlsZSgmaXQtPm9pZCkpCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBpdC0+c3VidHJlZV9ucjsgaSsrKSB7CisJCWlmICghY2FjaGVfdHJlZV9mdWxseV92YWxpZChpdC0+ZG93bltpXS0+Y2FjaGVfdHJlZSkpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX29uZShzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsCisJCSAgICAgIHN0cnVjdCBjYWNoZV9lbnRyeSAqKmNhY2hlLAorCQkgICAgICBpbnQgZW50cmllcywKKwkJICAgICAgY29uc3QgY2hhciAqYmFzZSwKKwkJICAgICAgaW50IGJhc2VsZW4sCisJCSAgICAgIGludCAqc2tpcF9jb3VudCwKKwkJICAgICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgYnVmZmVyOworCWludCBtaXNzaW5nX29rID0gZmxhZ3MgJiBXUklURV9UUkVFX01JU1NJTkdfT0s7CisJaW50IGRyeXJ1biA9IGZsYWdzICYgV1JJVEVfVFJFRV9EUllfUlVOOworCWludCByZXBhaXIgPSBmbGFncyAmIFdSSVRFX1RSRUVfUkVQQUlSOworCWludCB0b19pbnZhbGlkYXRlID0gMDsKKwlpbnQgaTsKKworCWFzc2VydCghKGRyeXJ1biAmJiByZXBhaXIpKTsKKworCSpza2lwX2NvdW50ID0gMDsKKworCWlmICgwIDw9IGl0LT5lbnRyeV9jb3VudCAmJiBoYXNfb2JqZWN0X2ZpbGUoJml0LT5vaWQpKQorCQlyZXR1cm4gaXQtPmVudHJ5X2NvdW50OworCisJLyoKKwkgKiBXZSBmaXJzdCBzY2FuIGZvciBzdWJ0cmVlcyBhbmQgdXBkYXRlIHRoZW07IHdlIHN0YXJ0IGJ5CisJICogbWFya2luZyBleGlzdGluZyBzdWJ0cmVlcyAtLSB0aGUgb25lcyB0aGF0IGFyZSB1bm1hcmtlZAorCSAqIHNob3VsZCBub3QgYmUgaW4gdGhlIHJlc3VsdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaXQtPnN1YnRyZWVfbnI7IGkrKykKKwkJaXQtPmRvd25baV0tPnVzZWQgPSAwOworCisJLyoKKwkgKiBGaW5kIHRoZSBzdWJ0cmVlcyBhbmQgdXBkYXRlIHRoZW0uCisJICovCisJaSA9IDA7CisJd2hpbGUgKGkgPCBlbnRyaWVzKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBjYWNoZVtpXTsKKwkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpzdWI7CisJCWNvbnN0IGNoYXIgKnBhdGgsICpzbGFzaDsKKwkJaW50IHBhdGhsZW4sIHN1Ymxlbiwgc3ViY250LCBzdWJza2lwOworCisJCXBhdGggPSBjZS0+bmFtZTsKKwkJcGF0aGxlbiA9IGNlX25hbWVsZW4oY2UpOworCQlpZiAocGF0aGxlbiA8PSBiYXNlbGVuIHx8IG1lbWNtcChiYXNlLCBwYXRoLCBiYXNlbGVuKSkKKwkJCWJyZWFrOyAvKiBhdCB0aGUgZW5kIG9mIHRoaXMgbGV2ZWwgKi8KKworCQlzbGFzaCA9IHN0cmNocihwYXRoICsgYmFzZWxlbiwgJy8nKTsKKwkJaWYgKCFzbGFzaCkgeworCQkJaSsrOworCQkJY29udGludWU7CisJCX0KKwkJLyoKKwkJICogYS9iYmIvYyAoYmFzZSA9IGEvLCBzbGFzaCA9IC9jKQorCQkgKiA9PT4KKwkJICogcGF0aCtiYXNlbGVuID0gYmJiL2MsIHN1YmxlbiA9IDMKKwkJICovCisJCXN1YmxlbiA9IHNsYXNoIC0gKHBhdGggKyBiYXNlbGVuKTsKKwkJc3ViID0gZmluZF9zdWJ0cmVlKGl0LCBwYXRoICsgYmFzZWxlbiwgc3VibGVuLCAxKTsKKwkJaWYgKCFzdWItPmNhY2hlX3RyZWUpCisJCQlzdWItPmNhY2hlX3RyZWUgPSBjYWNoZV90cmVlKCk7CisJCXN1YmNudCA9IHVwZGF0ZV9vbmUoc3ViLT5jYWNoZV90cmVlLAorCQkJCSAgICBjYWNoZSArIGksIGVudHJpZXMgLSBpLAorCQkJCSAgICBwYXRoLAorCQkJCSAgICBiYXNlbGVuICsgc3VibGVuICsgMSwKKwkJCQkgICAgJnN1YnNraXAsCisJCQkJICAgIGZsYWdzKTsKKwkJaWYgKHN1YmNudCA8IDApCisJCQlyZXR1cm4gc3ViY250OworCQlpZiAoIXN1YmNudCkKKwkJCWRpZSgiaW5kZXggY2FjaGUtdHJlZSByZWNvcmRzIGVtcHR5IHN1Yi10cmVlIik7CisJCWkgKz0gc3ViY250OworCQlzdWItPmNvdW50ID0gc3ViY250OyAvKiB0byBiZSB1c2VkIGluIHRoZSBuZXh0IGxvb3AgKi8KKwkJKnNraXBfY291bnQgKz0gc3Vic2tpcDsKKwkJc3ViLT51c2VkID0gMTsKKwl9CisKKwlkaXNjYXJkX3VudXNlZF9zdWJ0cmVlcyhpdCk7CisKKwkvKgorCSAqIFRoZW4gd3JpdGUgb3V0IHRoZSB0cmVlIG9iamVjdCBmb3IgdGhpcyBsZXZlbC4KKwkgKi8KKwlzdHJidWZfaW5pdCgmYnVmZmVyLCA4MTkyKTsKKworCWkgPSAwOworCXdoaWxlIChpIDwgZW50cmllcykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gY2FjaGVbaV07CisJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqc3ViID0gTlVMTDsKKwkJY29uc3QgY2hhciAqcGF0aCwgKnNsYXNoOworCQlpbnQgcGF0aGxlbiwgZW50bGVuOworCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQ7CisJCXVuc2lnbmVkIG1vZGU7CisJCWludCBleHBlY3RlZF9taXNzaW5nID0gMDsKKwkJaW50IGNvbnRhaW5zX2l0YSA9IDA7CisJCWludCBjZV9taXNzaW5nX29rOworCisJCXBhdGggPSBjZS0+bmFtZTsKKwkJcGF0aGxlbiA9IGNlX25hbWVsZW4oY2UpOworCQlpZiAocGF0aGxlbiA8PSBiYXNlbGVuIHx8IG1lbWNtcChiYXNlLCBwYXRoLCBiYXNlbGVuKSkKKwkJCWJyZWFrOyAvKiBhdCB0aGUgZW5kIG9mIHRoaXMgbGV2ZWwgKi8KKworCQlzbGFzaCA9IHN0cmNocihwYXRoICsgYmFzZWxlbiwgJy8nKTsKKwkJaWYgKHNsYXNoKSB7CisJCQllbnRsZW4gPSBzbGFzaCAtIChwYXRoICsgYmFzZWxlbik7CisJCQlzdWIgPSBmaW5kX3N1YnRyZWUoaXQsIHBhdGggKyBiYXNlbGVuLCBlbnRsZW4sIDApOworCQkJaWYgKCFzdWIpCisJCQkJZGllKCJjYWNoZS10cmVlLmM6ICclLipzJyBpbiAnJXMnIG5vdCBmb3VuZCIsCisJCQkJICAgIGVudGxlbiwgcGF0aCArIGJhc2VsZW4sIHBhdGgpOworCQkJaSArPSBzdWItPmNvdW50OworCQkJb2lkID0gJnN1Yi0+Y2FjaGVfdHJlZS0+b2lkOworCQkJbW9kZSA9IFNfSUZESVI7CisJCQljb250YWluc19pdGEgPSBzdWItPmNhY2hlX3RyZWUtPmVudHJ5X2NvdW50IDwgMDsKKwkJCWlmIChjb250YWluc19pdGEpIHsKKwkJCQl0b19pbnZhbGlkYXRlID0gMTsKKwkJCQlleHBlY3RlZF9taXNzaW5nID0gMTsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCW9pZCA9ICZjZS0+b2lkOworCQkJbW9kZSA9IGNlLT5jZV9tb2RlOworCQkJZW50bGVuID0gcGF0aGxlbiAtIGJhc2VsZW47CisJCQlpKys7CisJCX0KKworCQljZV9taXNzaW5nX29rID0gbW9kZSA9PSBTX0lGR0lUTElOSyB8fCBtaXNzaW5nX29rIHx8CisJCQkoaGFzX3Byb21pc29yX3JlbW90ZSgpICYmCisJCQkgY2Vfc2tpcF93b3JrdHJlZShjZSkpOworCQlpZiAoaXNfbnVsbF9vaWQob2lkKSB8fAorCQkgICAgKCFjZV9taXNzaW5nX29rICYmICFoYXNfb2JqZWN0X2ZpbGUob2lkKSkpIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCQkJaWYgKGV4cGVjdGVkX21pc3NpbmcpCisJCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIG9iamVjdCAlMDZvICVzIGZvciAnJS4qcyciLAorCQkJCW1vZGUsIG9pZF90b19oZXgob2lkKSwgZW50bGVuK2Jhc2VsZW4sIHBhdGgpOworCQl9CisKKwkJLyoKKwkJICogQ0VfUkVNT1ZFIGVudHJpZXMgYXJlIHJlbW92ZWQgYmVmb3JlIHRoZSBpbmRleCBpcworCQkgKiB3cml0dGVuIHRvIGRpc2suIFNraXAgdGhlbSB0byByZW1haW4gY29uc2lzdGVudAorCQkgKiB3aXRoIHRoZSBmdXR1cmUgb24tZGlzayBpbmRleC4KKwkJICovCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9SRU1PVkUpIHsKKwkJCSpza2lwX2NvdW50ID0gKnNraXBfY291bnQgKyAxOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBDRV9JTlRFTlRfVE9fQUREIGVudHJpZXMgZXhpc3Qgb24gb24tZGlzayBpbmRleCBidXQKKwkJICogdGhleSBhcmUgbm90IHBhcnQgb2YgZ2VuZXJhdGVkIHRyZWVzLiBJbnZhbGlkYXRlIHVwCisJCSAqIHRvIHJvb3QgdG8gZm9yY2UgY2FjaGUtdHJlZSB1c2VycyB0byByZWFkIGVsc2V3aGVyZS4KKwkJICovCisJCWlmICghc3ViICYmIGNlX2ludGVudF90b19hZGQoY2UpKSB7CisJCQl0b19pbnZhbGlkYXRlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogInN1YiIgY2FuIGJlIGFuIGVtcHR5IHRyZWUgaWYgYWxsIHN1YmVudHJpZXMgYXJlIGktdC1hLgorCQkgKi8KKwkJaWYgKGNvbnRhaW5zX2l0YSAmJiBpc19lbXB0eV90cmVlX29pZChvaWQpKQorCQkJY29udGludWU7CisKKwkJc3RyYnVmX2dyb3coJmJ1ZmZlciwgZW50bGVuICsgMTAwKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZmZlciwgIiVvICUuKnMlYyIsIG1vZGUsIGVudGxlbiwgcGF0aCArIGJhc2VsZW4sICdcMCcpOworCQlzdHJidWZfYWRkKCZidWZmZXIsIG9pZC0+aGFzaCwgdGhlX2hhc2hfYWxnby0+cmF3c3opOworCisjaWYgREVCVUdfQ0FDSEVfVFJFRQorCQlmcHJpbnRmKHN0ZGVyciwgImNhY2hlLXRyZWUgdXBkYXRlLW9uZSAlbyAlLipzXG4iLAorCQkJbW9kZSwgZW50bGVuLCBwYXRoICsgYmFzZWxlbik7CisjZW5kaWYKKwl9CisKKwlpZiAocmVwYWlyKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQloYXNoX29iamVjdF9maWxlKHRoZV9oYXNoX2FsZ28sIGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4sCisJCQkJIHRyZWVfdHlwZSwgJm9pZCk7CisJCWlmIChoYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncygmb2lkLCBPQkpFQ1RfSU5GT19TS0lQX0ZFVENIX09CSkVDVCkpCisJCQlvaWRjcHkoJml0LT5vaWQsICZvaWQpOworCQllbHNlCisJCQl0b19pbnZhbGlkYXRlID0gMTsKKwl9IGVsc2UgaWYgKGRyeXJ1bikgeworCQloYXNoX29iamVjdF9maWxlKHRoZV9oYXNoX2FsZ28sIGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4sCisJCQkJIHRyZWVfdHlwZSwgJml0LT5vaWQpOworCX0gZWxzZSBpZiAod3JpdGVfb2JqZWN0X2ZpbGUoYnVmZmVyLmJ1ZiwgYnVmZmVyLmxlbiwgdHJlZV90eXBlLAorCQkJCSAgICAgJml0LT5vaWQpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJaXQtPmVudHJ5X2NvdW50ID0gdG9faW52YWxpZGF0ZSA/IC0xIDogaSAtICpza2lwX2NvdW50OworI2lmIERFQlVHX0NBQ0hFX1RSRUUKKwlmcHJpbnRmKHN0ZGVyciwgImNhY2hlLXRyZWUgdXBkYXRlLW9uZSAoJWQgZW50LCAlZCBzdWJ0cmVlKSAlc1xuIiwKKwkJaXQtPmVudHJ5X2NvdW50LCBpdC0+c3VidHJlZV9uciwKKwkJb2lkX3RvX2hleCgmaXQtPm9pZCkpOworI2VuZGlmCisJcmV0dXJuIGk7Cit9CisKK2ludCBjYWNoZV90cmVlX3VwZGF0ZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBjYWNoZV90cmVlICppdCA9IGlzdGF0ZS0+Y2FjaGVfdHJlZTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZSA9IGlzdGF0ZS0+Y2FjaGU7CisJaW50IGVudHJpZXMgPSBpc3RhdGUtPmNhY2hlX25yOworCWludCBza2lwLCBpID0gdmVyaWZ5X2NhY2hlKGNhY2hlLCBlbnRyaWVzLCBmbGFncyk7CisKKwlpZiAoaSkKKwkJcmV0dXJuIGk7CisJdHJhY2VfcGVyZm9ybWFuY2VfZW50ZXIoKTsKKwlpID0gdXBkYXRlX29uZShpdCwgY2FjaGUsIGVudHJpZXMsICIiLCAwLCAmc2tpcCwgZmxhZ3MpOworCXRyYWNlX3BlcmZvcm1hbmNlX2xlYXZlKCJjYWNoZV90cmVlX3VwZGF0ZSIpOworCWlmIChpIDwgMCkKKwkJcmV0dXJuIGk7CisJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IENBQ0hFX1RSRUVfQ0hBTkdFRDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfb25lKHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwgc3RydWN0IGNhY2hlX3RyZWUgKml0LAorCQkgICAgICBjb25zdCBjaGFyICpwYXRoLCBpbnQgcGF0aGxlbikKK3sKKwlpbnQgaTsKKworCS8qIE9uZSAiY2FjaGUtdHJlZSIgZW50cnkgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoKKwkgKiBwYXRoIChOVUwgdGVybWluYXRlZCkKKwkgKiBlbnRyeV9jb3VudCwgc3VidHJlZV9uciAoIiVkICVkXG4iKQorCSAqIHRyZWUtc2hhMSAobWlzc2luZyBpZiBpbnZhbGlkKQorCSAqIHN1YnRyZWVfbnIgImNhY2hlLXRyZWUiIGVudHJpZXMgZm9yIHN1YnRyZWVzLgorCSAqLworCXN0cmJ1Zl9ncm93KGJ1ZmZlciwgcGF0aGxlbiArIDEwMCk7CisJc3RyYnVmX2FkZChidWZmZXIsIHBhdGgsIHBhdGhsZW4pOworCXN0cmJ1Zl9hZGRmKGJ1ZmZlciwgIiVjJWQgJWRcbiIsIDAsIGl0LT5lbnRyeV9jb3VudCwgaXQtPnN1YnRyZWVfbnIpOworCisjaWYgREVCVUdfQ0FDSEVfVFJFRQorCWlmICgwIDw9IGl0LT5lbnRyeV9jb3VudCkKKwkJZnByaW50ZihzdGRlcnIsICJjYWNoZS10cmVlIDwlLipzPiAoJWQgZW50LCAlZCBzdWJ0cmVlKSAlc1xuIiwKKwkJCXBhdGhsZW4sIHBhdGgsIGl0LT5lbnRyeV9jb3VudCwgaXQtPnN1YnRyZWVfbnIsCisJCQlvaWRfdG9faGV4KCZpdC0+b2lkKSk7CisJZWxzZQorCQlmcHJpbnRmKHN0ZGVyciwgImNhY2hlLXRyZWUgPCUuKnM+ICglZCBzdWJ0cmVlKSBpbnZhbGlkXG4iLAorCQkJcGF0aGxlbiwgcGF0aCwgaXQtPnN1YnRyZWVfbnIpOworI2VuZGlmCisKKwlpZiAoMCA8PSBpdC0+ZW50cnlfY291bnQpIHsKKwkJc3RyYnVmX2FkZChidWZmZXIsIGl0LT5vaWQuaGFzaCwgdGhlX2hhc2hfYWxnby0+cmF3c3opOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgaXQtPnN1YnRyZWVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKmRvd24gPSBpdC0+ZG93bltpXTsKKwkJaWYgKGkpIHsKKwkJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqcHJldiA9IGl0LT5kb3duW2ktMV07CisJCQlpZiAoc3VidHJlZV9uYW1lX2NtcChkb3duLT5uYW1lLCBkb3duLT5uYW1lbGVuLAorCQkJCQkgICAgIHByZXYtPm5hbWUsIHByZXYtPm5hbWVsZW4pIDw9IDApCisJCQkJZGllKCJmYXRhbCAtIHVuc29ydGVkIGNhY2hlIHN1YnRyZWUiKTsKKwkJfQorCQl3cml0ZV9vbmUoYnVmZmVyLCBkb3duLT5jYWNoZV90cmVlLCBkb3duLT5uYW1lLCBkb3duLT5uYW1lbGVuKTsKKwl9Cit9CisKK3ZvaWQgY2FjaGVfdHJlZV93cml0ZShzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IGNhY2hlX3RyZWUgKnJvb3QpCit7CisJd3JpdGVfb25lKHNiLCByb290LCAiIiwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfdHJlZSAqcmVhZF9vbmUoY29uc3QgY2hhciAqKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyAqc2l6ZV9wKQoreworCWNvbnN0IGNoYXIgKmJ1ZiA9ICpidWZmZXI7CisJdW5zaWduZWQgbG9uZyBzaXplID0gKnNpemVfcDsKKwljb25zdCBjaGFyICpjcDsKKwljaGFyICplcDsKKwlzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQ7CisJaW50IGksIHN1YnRyZWVfbnI7CisJY29uc3QgdW5zaWduZWQgcmF3c3ogPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKworCWl0ID0gTlVMTDsKKwkvKiBza2lwIG5hbWUsIGJ1dCBtYWtlIHN1cmUgbmFtZSBleGlzdHMgKi8KKwl3aGlsZSAoc2l6ZSAmJiAqYnVmKSB7CisJCXNpemUtLTsKKwkJYnVmKys7CisJfQorCWlmICghc2l6ZSkKKwkJZ290byBmcmVlX3JldHVybjsKKwlidWYrKzsgc2l6ZS0tOworCWl0ID0gY2FjaGVfdHJlZSgpOworCisJY3AgPSBidWY7CisJaXQtPmVudHJ5X2NvdW50ID0gc3RydG9sKGNwLCAmZXAsIDEwKTsKKwlpZiAoY3AgPT0gZXApCisJCWdvdG8gZnJlZV9yZXR1cm47CisJY3AgPSBlcDsKKwlzdWJ0cmVlX25yID0gc3RydG9sKGNwLCAmZXAsIDEwKTsKKwlpZiAoY3AgPT0gZXApCisJCWdvdG8gZnJlZV9yZXR1cm47CisJd2hpbGUgKHNpemUgJiYgKmJ1ZiAmJiAqYnVmICE9ICdcbicpIHsKKwkJc2l6ZS0tOworCQlidWYrKzsKKwl9CisJaWYgKCFzaXplKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCWJ1ZisrOyBzaXplLS07CisJaWYgKDAgPD0gaXQtPmVudHJ5X2NvdW50KSB7CisJCWlmIChzaXplIDwgcmF3c3opCisJCQlnb3RvIGZyZWVfcmV0dXJuOworCQlvaWRyZWFkKCZpdC0+b2lkLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKWJ1Zik7CisJCWJ1ZiArPSByYXdzejsKKwkJc2l6ZSAtPSByYXdzejsKKwl9CisKKyNpZiBERUJVR19DQUNIRV9UUkVFCisJaWYgKDAgPD0gaXQtPmVudHJ5X2NvdW50KQorCQlmcHJpbnRmKHN0ZGVyciwgImNhY2hlLXRyZWUgPCVzPiAoJWQgZW50LCAlZCBzdWJ0cmVlKSAlc1xuIiwKKwkJCSpidWZmZXIsIGl0LT5lbnRyeV9jb3VudCwgc3VidHJlZV9uciwKKwkJCW9pZF90b19oZXgoJml0LT5vaWQpKTsKKwllbHNlCisJCWZwcmludGYoc3RkZXJyLCAiY2FjaGUtdHJlZSA8JXM+ICglZCBzdWJ0cmVlcykgaW52YWxpZFxuIiwKKwkJCSpidWZmZXIsIHN1YnRyZWVfbnIpOworI2VuZGlmCisKKwkvKgorCSAqIEp1c3QgYSBoZXVyaXN0aWMgLS0gd2UgZG8gbm90IGFkZCBkaXJlY3RvcmllcyB0aGF0IG9mdGVuIGJ1dAorCSAqIHdlIGRvIG5vdCB3YW50IHRvIGhhdmUgdG8gZXh0ZW5kIGl0IGltbWVkaWF0ZWx5IHdoZW4gd2UgZG8sCisJICogaGVuY2UgKzIuCisJICovCisJaXQtPnN1YnRyZWVfYWxsb2MgPSBzdWJ0cmVlX25yICsgMjsKKwlpdC0+ZG93biA9IHhjYWxsb2MoaXQtPnN1YnRyZWVfYWxsb2MsIHNpemVvZihzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKikpOworCWZvciAoaSA9IDA7IGkgPCBzdWJ0cmVlX25yOyBpKyspIHsKKwkJLyogcmVhZCBlYWNoIHN1YnRyZWUgKi8KKwkJc3RydWN0IGNhY2hlX3RyZWUgKnN1YjsKKwkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpzdWJ0cmVlOworCQljb25zdCBjaGFyICpuYW1lID0gYnVmOworCisJCXN1YiA9IHJlYWRfb25lKCZidWYsICZzaXplKTsKKwkJaWYgKCFzdWIpCisJCQlnb3RvIGZyZWVfcmV0dXJuOworCQlzdWJ0cmVlID0gY2FjaGVfdHJlZV9zdWIoaXQsIG5hbWUpOworCQlzdWJ0cmVlLT5jYWNoZV90cmVlID0gc3ViOworCX0KKwlpZiAoc3VidHJlZV9uciAhPSBpdC0+c3VidHJlZV9ucikKKwkJZGllKCJjYWNoZS10cmVlOiBpbnRlcm5hbCBlcnJvciIpOworCSpidWZmZXIgPSBidWY7CisJKnNpemVfcCA9IHNpemU7CisJcmV0dXJuIGl0OworCisgZnJlZV9yZXR1cm46CisJY2FjaGVfdHJlZV9mcmVlKCZpdCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlX3JlYWQoY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKGJ1ZmZlclswXSkKKwkJcmV0dXJuIE5VTEw7IC8qIG5vdCB0aGUgd2hvbGUgdHJlZSAqLworCXJldHVybiByZWFkX29uZSgmYnVmZmVyLCAmc2l6ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfdHJlZSAqY2FjaGVfdHJlZV9maW5kKHN0cnVjdCBjYWNoZV90cmVlICppdCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoIWl0KQorCQlyZXR1cm4gTlVMTDsKKwl3aGlsZSAoKnBhdGgpIHsKKwkJY29uc3QgY2hhciAqc2xhc2g7CisJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqc3ViOworCisJCXNsYXNoID0gc3RyY2hybnVsKHBhdGgsICcvJyk7CisJCS8qCisJCSAqIEJldHdlZW4gcGF0aCBhbmQgc2xhc2ggaXMgdGhlIG5hbWUgb2YgdGhlIHN1YnRyZWUKKwkJICogdG8gbG9vayBmb3IuCisJCSAqLworCQlzdWIgPSBmaW5kX3N1YnRyZWUoaXQsIHBhdGgsIHNsYXNoIC0gcGF0aCwgMCk7CisJCWlmICghc3ViKQorCQkJcmV0dXJuIE5VTEw7CisJCWl0ID0gc3ViLT5jYWNoZV90cmVlOworCisJCXBhdGggPSBzbGFzaDsKKwkJd2hpbGUgKCpwYXRoID09ICcvJykKKwkJCXBhdGgrKzsKKwl9CisJcmV0dXJuIGl0OworfQorCitzdGF0aWMgaW50IHdyaXRlX2luZGV4X2FzX3RyZWVfaW50ZXJuYWwoc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4X3N0YXRlLAorCQkJCQlpbnQgY2FjaGVfdHJlZV92YWxpZCwKKwkJCQkJaW50IGZsYWdzLAorCQkJCQljb25zdCBjaGFyICpwcmVmaXgpCit7CisJaWYgKGZsYWdzICYgV1JJVEVfVFJFRV9JR05PUkVfQ0FDSEVfVFJFRSkgeworCQljYWNoZV90cmVlX2ZyZWUoJmluZGV4X3N0YXRlLT5jYWNoZV90cmVlKTsKKwkJY2FjaGVfdHJlZV92YWxpZCA9IDA7CisJfQorCisJaWYgKCFpbmRleF9zdGF0ZS0+Y2FjaGVfdHJlZSkKKwkJaW5kZXhfc3RhdGUtPmNhY2hlX3RyZWUgPSBjYWNoZV90cmVlKCk7CisKKwlpZiAoIWNhY2hlX3RyZWVfdmFsaWQgJiYgY2FjaGVfdHJlZV91cGRhdGUoaW5kZXhfc3RhdGUsIGZsYWdzKSA8IDApCisJCXJldHVybiBXUklURV9UUkVFX1VOTUVSR0VEX0lOREVYOworCisJaWYgKHByZWZpeCkgeworCQlzdHJ1Y3QgY2FjaGVfdHJlZSAqc3VidHJlZTsKKwkJc3VidHJlZSA9IGNhY2hlX3RyZWVfZmluZChpbmRleF9zdGF0ZS0+Y2FjaGVfdHJlZSwgcHJlZml4KTsKKwkJaWYgKCFzdWJ0cmVlKQorCQkJcmV0dXJuIFdSSVRFX1RSRUVfUFJFRklYX0VSUk9SOworCQlvaWRjcHkob2lkLCAmc3VidHJlZS0+b2lkKTsKKwl9CisJZWxzZQorCQlvaWRjcHkob2lkLCAmaW5kZXhfc3RhdGUtPmNhY2hlX3RyZWUtPm9pZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHRyZWUqIHdyaXRlX2luX2NvcmVfaW5kZXhfYXNfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbykgeworCXN0cnVjdCBvYmplY3RfaWQgbzsKKwlpbnQgd2FzX3ZhbGlkLCByZXQ7CisKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4X3N0YXRlCT0gcmVwby0+aW5kZXg7CisJd2FzX3ZhbGlkID0gaW5kZXhfc3RhdGUtPmNhY2hlX3RyZWUgJiYKKwkJICAgIGNhY2hlX3RyZWVfZnVsbHlfdmFsaWQoaW5kZXhfc3RhdGUtPmNhY2hlX3RyZWUpOworCisJcmV0ID0gd3JpdGVfaW5kZXhfYXNfdHJlZV9pbnRlcm5hbCgmbywgaW5kZXhfc3RhdGUsIHdhc192YWxpZCwgMCwgTlVMTCk7CisJaWYgKHJldCA9PSBXUklURV9UUkVFX1VOTUVSR0VEX0lOREVYKSB7CisJCWludCBpOworCQlmcHJpbnRmKHN0ZGVyciwgIkJVRzogVGhlcmUgYXJlIHVubWVyZ2VkIGluZGV4IGVudHJpZXM6XG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IGluZGV4X3N0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXhfc3RhdGUtPmNhY2hlW2ldOworCQkJaWYgKGNlX3N0YWdlKGNlKSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkJVRzogJWQgJS4qc1xuIiwgY2Vfc3RhZ2UoY2UpLAorCQkJCQkoaW50KWNlX25hbWVsZW4oY2UpLCBjZS0+bmFtZSk7CisJCX0KKwkJQlVHKCJ1bm1lcmdlZCBpbmRleCBlbnRyaWVzIHdoZW4gd3JpdGluZyBpbm1lbW9yeSBpbmRleCIpOworCX0KKworCXJldHVybiBsb29rdXBfdHJlZShyZXBvLCAmaW5kZXhfc3RhdGUtPmNhY2hlX3RyZWUtPm9pZCk7Cit9CisKKworaW50IHdyaXRlX2luZGV4X2FzX3RyZWUoc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4X3N0YXRlLCBjb25zdCBjaGFyICppbmRleF9wYXRoLCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgZW50cmllcywgd2FzX3ZhbGlkOworCXN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlID0gTE9DS19JTklUOworCWludCByZXQ7CisKKwlob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2NrX2ZpbGUsIGluZGV4X3BhdGgsIExPQ0tfRElFX09OX0VSUk9SKTsKKworCWVudHJpZXMgPSByZWFkX2luZGV4X2Zyb20oaW5kZXhfc3RhdGUsIGluZGV4X3BhdGgsIGdldF9naXRfZGlyKCkpOworCWlmIChlbnRyaWVzIDwgMCkgeworCQlyZXQgPSBXUklURV9UUkVFX1VOUkVBREFCTEVfSU5ERVg7CisJCWdvdG8gb3V0OworCX0KKworCXdhc192YWxpZCA9ICEoZmxhZ3MgJiBXUklURV9UUkVFX0lHTk9SRV9DQUNIRV9UUkVFKSAmJgorCQkgICAgaW5kZXhfc3RhdGUtPmNhY2hlX3RyZWUgJiYKKwkJICAgIGNhY2hlX3RyZWVfZnVsbHlfdmFsaWQoaW5kZXhfc3RhdGUtPmNhY2hlX3RyZWUpOworCisJcmV0ID0gd3JpdGVfaW5kZXhfYXNfdHJlZV9pbnRlcm5hbChvaWQsIGluZGV4X3N0YXRlLCB3YXNfdmFsaWQsIGZsYWdzLAorCQkJCQkgICBwcmVmaXgpOworCWlmICghcmV0ICYmICF3YXNfdmFsaWQpIHsKKwkJd3JpdGVfbG9ja2VkX2luZGV4KGluZGV4X3N0YXRlLCAmbG9ja19maWxlLCBDT01NSVRfTE9DSyk7CisJCS8qIE5vdCBiZWluZyBhYmxlIHRvIHdyaXRlIGlzIGZpbmUgLS0gd2UgYXJlIG9ubHkgaW50ZXJlc3RlZAorCQkgKiBpbiB1cGRhdGluZyB0aGUgY2FjaGUtdHJlZSBwYXJ0LCBhbmQgaWYgdGhlIG5leHQgY2FsbGVyCisJCSAqIGVuZHMgdXAgdXNpbmcgdGhlIG9sZCBpbmRleCB3aXRoIHVudXBkYXRlZCBjYWNoZS10cmVlIHBhcnQKKwkJICogaXQgbWlzc2VzIHRoZSB3b3JrIHdlIGRpZCBoZXJlLCBidXQgdGhhdCBpcyBqdXN0IGEKKwkJICogcGVyZm9ybWFuY2UgcGVuYWx0eSBhbmQgbm90IGEgYmlnIGRlYWwuCisJCSAqLworCX0KKworb3V0OgorCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9ja19maWxlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwcmltZV9jYWNoZV90cmVlX3JlYyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgc3RydWN0IGNhY2hlX3RyZWUgKml0LAorCQkJCSBzdHJ1Y3QgdHJlZSAqdHJlZSkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJaW50IGNudDsKKworCW9pZGNweSgmaXQtPm9pZCwgJnRyZWUtPm9iamVjdC5vaWQpOworCWluaXRfdHJlZV9kZXNjKCZkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCWNudCA9IDA7CisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKKwkJaWYgKCFTX0lTRElSKGVudHJ5Lm1vZGUpKQorCQkJY250Kys7CisJCWVsc2UgeworCQkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpzdWI7CisJCQlzdHJ1Y3QgdHJlZSAqc3VidHJlZSA9IGxvb2t1cF90cmVlKHIsICZlbnRyeS5vaWQpOworCQkJaWYgKCFzdWJ0cmVlLT5vYmplY3QucGFyc2VkKQorCQkJCXBhcnNlX3RyZWUoc3VidHJlZSk7CisJCQlzdWIgPSBjYWNoZV90cmVlX3N1YihpdCwgZW50cnkucGF0aCk7CisJCQlzdWItPmNhY2hlX3RyZWUgPSBjYWNoZV90cmVlKCk7CisJCQlwcmltZV9jYWNoZV90cmVlX3JlYyhyLCBzdWItPmNhY2hlX3RyZWUsIHN1YnRyZWUpOworCQkJY250ICs9IHN1Yi0+Y2FjaGVfdHJlZS0+ZW50cnlfY291bnQ7CisJCX0KKwl9CisJaXQtPmVudHJ5X2NvdW50ID0gY250OworfQorCit2b2lkIHByaW1lX2NhY2hlX3RyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICAgICBzdHJ1Y3QgdHJlZSAqdHJlZSkKK3sKKwljYWNoZV90cmVlX2ZyZWUoJmlzdGF0ZS0+Y2FjaGVfdHJlZSk7CisJaXN0YXRlLT5jYWNoZV90cmVlID0gY2FjaGVfdHJlZSgpOworCXByaW1lX2NhY2hlX3RyZWVfcmVjKHIsIGlzdGF0ZS0+Y2FjaGVfdHJlZSwgdHJlZSk7CisJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IENBQ0hFX1RSRUVfQ0hBTkdFRDsKK30KKworLyoKKyAqIGZpbmQgdGhlIGNhY2hlX3RyZWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBsZXZlbCB3aXRob3V0CisgKiBleHBsb2RpbmcgdGhlIGZ1bGwgcGF0aCBpbnRvIHRleHR1YWwgZm9ybS4gIFRoZSByb290IG9mIHRoZQorICogY2FjaGUgdHJlZSBpcyBnaXZlbiBhcyAicm9vdCIsIGFuZCBvdXIgY3VycmVudCBsZXZlbCBpcyAiaW5mbyIuCisgKiAoMSkgV2hlbiBhdCByb290IGxldmVsLCBpbmZvLT5wcmV2IGlzIE5VTEwsIHNvIGl0IGlzICJyb290IiBpdHNlbGYuCisgKiAoMikgT3RoZXJ3aXNlLCBmaW5kIHRoZSBjYWNoZV90cmVlIHRoYXQgY29ycmVzcG9uZHMgdG8gb25lIGxldmVsCisgKiAgICAgYWJvdmUgdXMsIGFuZCBmaW5kIG91cnNlbHZlcyBpbiB0aGVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBjYWNoZV90cmVlICpmaW5kX2NhY2hlX3RyZWVfZnJvbV90cmF2ZXJzYWwoc3RydWN0IGNhY2hlX3RyZWUgKnJvb3QsCisJCQkJCQkJIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQoreworCXN0cnVjdCBjYWNoZV90cmVlICpvdXJfcGFyZW50OworCisJaWYgKCFpbmZvLT5wcmV2KQorCQlyZXR1cm4gcm9vdDsKKwlvdXJfcGFyZW50ID0gZmluZF9jYWNoZV90cmVlX2Zyb21fdHJhdmVyc2FsKHJvb3QsIGluZm8tPnByZXYpOworCXJldHVybiBjYWNoZV90cmVlX2ZpbmQob3VyX3BhcmVudCwgaW5mby0+bmFtZSk7Cit9CisKK2ludCBjYWNoZV90cmVlX21hdGNoZXNfdHJhdmVyc2FsKHN0cnVjdCBjYWNoZV90cmVlICpyb290LAorCQkJCSBzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50LAorCQkJCSBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQ7CisKKwlpdCA9IGZpbmRfY2FjaGVfdHJlZV9mcm9tX3RyYXZlcnNhbChyb290LCBpbmZvKTsKKwlpdCA9IGNhY2hlX3RyZWVfZmluZChpdCwgZW50LT5wYXRoKTsKKwlpZiAoaXQgJiYgaXQtPmVudHJ5X2NvdW50ID4gMCAmJiBvaWRlcSgmZW50LT5vaWQsICZpdC0+b2lkKSkKKwkJcmV0dXJuIGl0LT5lbnRyeV9jb3VudDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdmVyaWZ5X29uZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgICAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICAgICAgc3RydWN0IGNhY2hlX3RyZWUgKml0LAorCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqcGF0aCkKK3sKKwlpbnQgaSwgcG9zLCBsZW4gPSBwYXRoLT5sZW47CisJc3RydWN0IHN0cmJ1ZiB0cmVlX2J1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgbmV3X29pZDsKKworCWZvciAoaSA9IDA7IGkgPCBpdC0+c3VidHJlZV9ucjsgaSsrKSB7CisJCXN0cmJ1Zl9hZGRmKHBhdGgsICIlcy8iLCBpdC0+ZG93bltpXS0+bmFtZSk7CisJCXZlcmlmeV9vbmUociwgaXN0YXRlLCBpdC0+ZG93bltpXS0+Y2FjaGVfdHJlZSwgcGF0aCk7CisJCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgbGVuKTsKKwl9CisKKwlpZiAoaXQtPmVudHJ5X2NvdW50IDwgMCB8fAorCSAgICAvKiBubyB2ZXJpZmljYXRpb24gb24gdGVzdHMgKHQ3MDAzKSB0aGF0IHJlcGxhY2UgdHJlZXMgKi8KKwkgICAgbG9va3VwX3JlcGxhY2Vfb2JqZWN0KHIsICZpdC0+b2lkKSAhPSAmaXQtPm9pZCkKKwkJcmV0dXJuOworCisJaWYgKHBhdGgtPmxlbikgeworCQlwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIHBhdGgtPmJ1ZiwgcGF0aC0+bGVuKTsKKwkJcG9zID0gLXBvcyAtIDE7CisJfSBlbHNlIHsKKwkJcG9zID0gMDsKKwl9CisKKwlpID0gMDsKKwl3aGlsZSAoaSA8IGl0LT5lbnRyeV9jb3VudCkgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtwb3MgKyBpXTsKKwkJY29uc3QgY2hhciAqc2xhc2g7CisJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqc3ViID0gTlVMTDsKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkOworCQljb25zdCBjaGFyICpuYW1lOworCQl1bnNpZ25lZCBtb2RlOworCQlpbnQgZW50bGVuOworCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiAoQ0VfU1RBR0VNQVNLIHwgQ0VfSU5URU5UX1RPX0FERCB8IENFX1JFTU9WRSkpCisJCQlCVUcoIiVzIHdpdGggZmxhZ3MgMHgleCBzaG91bGQgbm90IGJlIGluIGNhY2hlLXRyZWUiLAorCQkJICAgIGNlLT5uYW1lLCBjZS0+Y2VfZmxhZ3MpOworCQluYW1lID0gY2UtPm5hbWUgKyBwYXRoLT5sZW47CisJCXNsYXNoID0gc3RyY2hyKG5hbWUsICcvJyk7CisJCWlmIChzbGFzaCkgeworCQkJZW50bGVuID0gc2xhc2ggLSBuYW1lOworCQkJc3ViID0gZmluZF9zdWJ0cmVlKGl0LCBjZS0+bmFtZSArIHBhdGgtPmxlbiwgZW50bGVuLCAwKTsKKwkJCWlmICghc3ViIHx8IHN1Yi0+Y2FjaGVfdHJlZS0+ZW50cnlfY291bnQgPCAwKQorCQkJCUJVRygiYmFkIHN1YnRyZWUgJyUuKnMnIiwgZW50bGVuLCBuYW1lKTsKKwkJCW9pZCA9ICZzdWItPmNhY2hlX3RyZWUtPm9pZDsKKwkJCW1vZGUgPSBTX0lGRElSOworCQkJaSArPSBzdWItPmNhY2hlX3RyZWUtPmVudHJ5X2NvdW50OworCQl9IGVsc2UgeworCQkJb2lkID0gJmNlLT5vaWQ7CisJCQltb2RlID0gY2UtPmNlX21vZGU7CisJCQllbnRsZW4gPSBjZV9uYW1lbGVuKGNlKSAtIHBhdGgtPmxlbjsKKwkJCWkrKzsKKwkJfQorCQlzdHJidWZfYWRkZigmdHJlZV9idWYsICIlbyAlLipzJWMiLCBtb2RlLCBlbnRsZW4sIG5hbWUsICdcMCcpOworCQlzdHJidWZfYWRkKCZ0cmVlX2J1Ziwgb2lkLT5oYXNoLCByLT5oYXNoX2FsZ28tPnJhd3N6KTsKKwl9CisJaGFzaF9vYmplY3RfZmlsZShyLT5oYXNoX2FsZ28sIHRyZWVfYnVmLmJ1ZiwgdHJlZV9idWYubGVuLCB0cmVlX3R5cGUsCisJCQkgJm5ld19vaWQpOworCWlmICghb2lkZXEoJm5ld19vaWQsICZpdC0+b2lkKSkKKwkJQlVHKCJjYWNoZS10cmVlIGZvciBwYXRoICUuKnMgZG9lcyBub3QgbWF0Y2guICIKKwkJICAgICJFeHBlY3RlZCAlcyBnb3QgJXMiLCBsZW4sIHBhdGgtPmJ1ZiwKKwkJICAgIG9pZF90b19oZXgoJm5ld19vaWQpLCBvaWRfdG9faGV4KCZpdC0+b2lkKSk7CisJc3RyYnVmX3NldGxlbihwYXRoLCBsZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZ0cmVlX2J1Zik7Cit9CisKK3ZvaWQgY2FjaGVfdHJlZV92ZXJpZnkoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCisJaWYgKCFpc3RhdGUtPmNhY2hlX3RyZWUpCisJCXJldHVybjsKKwl2ZXJpZnlfb25lKHIsIGlzdGF0ZSwgaXN0YXRlLT5jYWNoZV90cmVlLCAmcGF0aCk7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworfQpkaWZmIC0tZ2l0IGEvY2FjaGUtdHJlZS5oIGIvY2FjaGUtdHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOWJmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9jYWNoZS10cmVlLmgKQEAgLTAsMCArMSw2OSBAQAorI2lmbmRlZiBDQUNIRV9UUkVFX0gKKyNkZWZpbmUgQ0FDSEVfVFJFRV9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKworc3RydWN0IGNhY2hlX3RyZWU7CitzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgeworCXN0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlOworCWludCBjb3VudDsJCS8qIGludGVybmFsbHkgdXNlZCBieSB1cGRhdGVfb25lKCkgKi8KKwlpbnQgbmFtZWxlbjsKKwlpbnQgdXNlZDsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9OworCitzdHJ1Y3QgY2FjaGVfdHJlZSB7CisJaW50IGVudHJ5X2NvdW50OyAvKiBuZWdhdGl2ZSBtZWFucyAiaW52YWxpZCIgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgc3VidHJlZV9ucjsKKwlpbnQgc3VidHJlZV9hbGxvYzsKKwlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKipkb3duOworfTsKKworc3RydWN0IGNhY2hlX3RyZWUgKmNhY2hlX3RyZWUodm9pZCk7Cit2b2lkIGNhY2hlX3RyZWVfZnJlZShzdHJ1Y3QgY2FjaGVfdHJlZSAqKik7Cit2b2lkIGNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICopOworc3RydWN0IGNhY2hlX3RyZWVfc3ViICpjYWNoZV90cmVlX3N1YihzdHJ1Y3QgY2FjaGVfdHJlZSAqLCBjb25zdCBjaGFyICopOworCit2b2lkIGNhY2hlX3RyZWVfd3JpdGUoc3RydWN0IHN0cmJ1ZiAqLCBzdHJ1Y3QgY2FjaGVfdHJlZSAqcm9vdCk7CitzdHJ1Y3QgY2FjaGVfdHJlZSAqY2FjaGVfdHJlZV9yZWFkKGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworaW50IGNhY2hlX3RyZWVfZnVsbHlfdmFsaWQoc3RydWN0IGNhY2hlX3RyZWUgKik7CitpbnQgY2FjaGVfdHJlZV91cGRhdGUoc3RydWN0IGluZGV4X3N0YXRlICosIGludCk7Cit2b2lkIGNhY2hlX3RyZWVfdmVyaWZ5KHN0cnVjdCByZXBvc2l0b3J5ICosIHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKKworLyogYml0bWFza3MgdG8gd3JpdGVfaW5kZXhfYXNfdHJlZSBmbGFncyAqLworI2RlZmluZSBXUklURV9UUkVFX01JU1NJTkdfT0sgMQorI2RlZmluZSBXUklURV9UUkVFX0lHTk9SRV9DQUNIRV9UUkVFIDIKKyNkZWZpbmUgV1JJVEVfVFJFRV9EUllfUlVOIDQKKyNkZWZpbmUgV1JJVEVfVFJFRV9TSUxFTlQgOAorI2RlZmluZSBXUklURV9UUkVFX1JFUEFJUiAxNgorCisvKiBlcnJvciByZXR1cm4gY29kZXMgKi8KKyNkZWZpbmUgV1JJVEVfVFJFRV9VTlJFQURBQkxFX0lOREVYICgtMSkKKyNkZWZpbmUgV1JJVEVfVFJFRV9VTk1FUkdFRF9JTkRFWCAoLTIpCisjZGVmaW5lIFdSSVRFX1RSRUVfUFJFRklYX0VSUk9SICgtMykKKworc3RydWN0IHRyZWUqIHdyaXRlX2luX2NvcmVfaW5kZXhfYXNfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbyk7CitpbnQgd3JpdGVfaW5kZXhfYXNfdHJlZShzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXhfc3RhdGUsIGNvbnN0IGNoYXIgKmluZGV4X3BhdGgsIGludCBmbGFncywgY29uc3QgY2hhciAqcHJlZml4KTsKK3ZvaWQgcHJpbWVfY2FjaGVfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgc3RydWN0IHRyZWUgKik7CisKK2ludCBjYWNoZV90cmVlX21hdGNoZXNfdHJhdmVyc2FsKHN0cnVjdCBjYWNoZV90cmVlICosIHN0cnVjdCBuYW1lX2VudHJ5ICplbnQsIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKTsKKworI2lmZGVmIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKK3N0YXRpYyBpbmxpbmUgaW50IHdyaXRlX2NhY2hlX2FzX3RyZWUoc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlyZXR1cm4gd3JpdGVfaW5kZXhfYXNfdHJlZShvaWQsICZ0aGVfaW5kZXgsIGdldF9pbmRleF9maWxlKCksIGZsYWdzLCBwcmVmaXgpOworfQorCitzdGF0aWMgaW5saW5lIGludCB1cGRhdGVfbWFpbl9jYWNoZV90cmVlKGludCBmbGFncykKK3sKKwlpZiAoIXRoZV9pbmRleC5jYWNoZV90cmVlKQorCQl0aGVfaW5kZXguY2FjaGVfdHJlZSA9IGNhY2hlX3RyZWUoKTsKKwlyZXR1cm4gY2FjaGVfdHJlZV91cGRhdGUoJnRoZV9pbmRleCwgZmxhZ3MpOworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2FjaGUuaCBiL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYwNDg1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NhY2hlLmgKQEAgLTAsMCArMSwxOTY5IEBACisjaWZuZGVmIENBQ0hFX0gKKyNkZWZpbmUgQ0FDSEVfSAorCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgImxpc3QuaCIKKyNpbmNsdWRlICJhZHZpY2UuaCIKKyNpbmNsdWRlICJnZXR0ZXh0LmgiCisjaW5jbHVkZSAiY29udmVydC5oIgorI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAidHJhY2UyLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJwYWNrLXJldmluZGV4LmgiCisjaW5jbHVkZSAiaGFzaC5oIgorI2luY2x1ZGUgInBhdGguaCIKKyNpbmNsdWRlICJvaWQtYXJyYXkuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAibWVtLXBvb2wuaCIKKworI2luY2x1ZGUgPHpsaWIuaD4KK3R5cGVkZWYgc3RydWN0IGdpdF96c3RyZWFtIHsKKwl6X3N0cmVhbSB6OworCXVuc2lnbmVkIGxvbmcgYXZhaWxfaW47CisJdW5zaWduZWQgbG9uZyBhdmFpbF9vdXQ7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9pbjsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX291dDsKKwl1bnNpZ25lZCBjaGFyICpuZXh0X2luOworCXVuc2lnbmVkIGNoYXIgKm5leHRfb3V0OworfSBnaXRfenN0cmVhbTsKKwordm9pZCBnaXRfaW5mbGF0ZV9pbml0KGdpdF96c3RyZWFtICopOwordm9pZCBnaXRfaW5mbGF0ZV9pbml0X2d6aXBfb25seShnaXRfenN0cmVhbSAqKTsKK3ZvaWQgZ2l0X2luZmxhdGVfZW5kKGdpdF96c3RyZWFtICopOworaW50IGdpdF9pbmZsYXRlKGdpdF96c3RyZWFtICosIGludCBmbHVzaCk7CisKK3ZvaWQgZ2l0X2RlZmxhdGVfaW5pdChnaXRfenN0cmVhbSAqLCBpbnQgbGV2ZWwpOwordm9pZCBnaXRfZGVmbGF0ZV9pbml0X2d6aXAoZ2l0X3pzdHJlYW0gKiwgaW50IGxldmVsKTsKK3ZvaWQgZ2l0X2RlZmxhdGVfaW5pdF9yYXcoZ2l0X3pzdHJlYW0gKiwgaW50IGxldmVsKTsKK3ZvaWQgZ2l0X2RlZmxhdGVfZW5kKGdpdF96c3RyZWFtICopOworaW50IGdpdF9kZWZsYXRlX2Fib3J0KGdpdF96c3RyZWFtICopOworaW50IGdpdF9kZWZsYXRlX2VuZF9nZW50bHkoZ2l0X3pzdHJlYW0gKik7CitpbnQgZ2l0X2RlZmxhdGUoZ2l0X3pzdHJlYW0gKiwgaW50IGZsdXNoKTsKK3Vuc2lnbmVkIGxvbmcgZ2l0X2RlZmxhdGVfYm91bmQoZ2l0X3pzdHJlYW0gKiwgdW5zaWduZWQgbG9uZyk7CisKKyNpZiBkZWZpbmVkKERUX1VOS05PV04pICYmICFkZWZpbmVkKE5PX0RfVFlQRV9JTl9ESVJFTlQpCisjZGVmaW5lIERUWVBFKGRlKQkoKGRlKS0+ZF90eXBlKQorI2Vsc2UKKyN1bmRlZiBEVF9VTktOT1dOCisjdW5kZWYgRFRfRElSCisjdW5kZWYgRFRfUkVHCisjdW5kZWYgRFRfTE5LCisjZGVmaW5lIERUX1VOS05PV04JMAorI2RlZmluZSBEVF9ESVIJCTEKKyNkZWZpbmUgRFRfUkVHCQkyCisjZGVmaW5lIERUX0xOSwkJMworI2RlZmluZSBEVFlQRShkZSkJRFRfVU5LTk9XTgorI2VuZGlmCisKKy8qIHVua25vd24gbW9kZSAoaW1wb3NzaWJsZSBjb21iaW5hdGlvbiBTX0lGSUZPfFNfSUZDSFIpICovCisjZGVmaW5lIFNfSUZJTlZBTElEICAgICAwMDMwMDAwCisKKy8qCisgKiBBICJkaXJlY3RvcnkgbGluayIgaXMgYSBsaW5rIHRvIGFub3RoZXIgZ2l0IGRpcmVjdG9yeS4KKyAqCisgKiBUaGUgdmFsdWUgMDE2MDAwMCBpcyBub3Qgbm9ybWFsbHkgYSB2YWxpZCBtb2RlLCBhbmQKKyAqIGFsc28ganVzdCBoYXBwZW5zIHRvIGJlIFNfSUZESVIgKyBTX0lGTE5LCisgKi8KKyNkZWZpbmUgU19JRkdJVExJTksJMDE2MDAwMAorI2RlZmluZSBTX0lTR0lUTElOSyhtKQkoKChtKSAmIFNfSUZNVCkgPT0gU19JRkdJVExJTkspCisKKy8qCisgKiBTb21lIG1vZGUgYml0cyBhcmUgYWxzbyB1c2VkIGludGVybmFsbHkgZm9yIGNvbXB1dGF0aW9ucy4KKyAqCisgKiBUaGV5ICptdXN0KiBub3Qgb3ZlcmxhcCB3aXRoIGFueSB2YWxpZCBtb2RlcywgYW5kIHRoZXkgKm11c3QqIG5vdCBiZSBlbWl0dGVkCisgKiB0byBvdXRzaWRlIHdvcmxkIC0gaS5lLiBhcHBlYXIgb24gZGlzayBvciBuZXR3b3JrLiBJbiBvdGhlciB3b3JkcywgaXQncyBqdXN0CisgKiB0ZW1wb3JhcnkgZmllbGRzLCB3aGljaCB3ZSBpbnRlcm5hbGx5IHVzZSwgYnV0IHRoZXkgaGF2ZSB0byBzdGF5IGluLWhvdXNlLgorICoKKyAqICggc3VjaCBhcHByb2FjaCBpcyB2YWxpZCwgYXMgc3RhbmRhcmQgU19JRiogZml0cyBpbnRvIDE2IGJpdHMsIGFuZCBpbiBHaXQKKyAqICAgY29kZWJhc2UgbW9kZSBpcyBgdW5zaWduZWQgaW50YCB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIGF0IGxlYXN0IDMyIGJpdHMgKQorICovCisKKy8qIHVzZWQgaW50ZXJuYWxseSBpbiB0cmVlLWRpZmYgKi8KKyNkZWZpbmUgU19ESUZGVFJFRV9JRlhNSU5fTkVRCTB4ODAwMDAwMDAKKworCisvKgorICogSW50ZW5zaXZlIHJlc2VhcmNoIG92ZXIgdGhlIGNvdXJzZSBvZiBtYW55IHllYXJzIGhhcyBzaG93biB0aGF0CisgKiBwb3J0IDk0MTggaXMgdG90YWxseSB1bnVzZWQgYnkgYW55dGhpbmcgZWxzZS4gT3IKKyAqCisgKglZb3VyIHNlYXJjaCAtICJwb3J0IDk0MTgiIC0gZGlkIG5vdCBtYXRjaCBhbnkgZG9jdW1lbnRzLgorICoKKyAqIGFzIHd3dy5nb29nbGUuY29tIHB1dHMgaXQuCisgKgorICogVGhpcyBwb3J0IGhhcyBiZWVuIHByb3Blcmx5IGFzc2lnbmVkIGZvciBnaXQgdXNlIGJ5IElBTkE6CisgKiBnaXQgKEFzc2lnbmVkLTk0MTgpIFtJMDYtMDUwNzI4LTAwMDFdLgorICoKKyAqCWdpdCAgOTQxOC90Y3AgICBnaXQgcGFjayB0cmFuc2ZlciBzZXJ2aWNlCisgKglnaXQgIDk0MTgvdWRwICAgZ2l0IHBhY2sgdHJhbnNmZXIgc2VydmljZQorICoKKyAqIHdpdGggTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPiBhcyB0aGUgcG9pbnQgb2YKKyAqIGNvbnRhY3QuIFNlcHRlbWJlciAyMDA1LgorICoKKyAqIFNlZSBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3BvcnQtbnVtYmVycworICovCisjZGVmaW5lIERFRkFVTFRfR0lUX1BPUlQgOTQxOAorCisvKgorICogQmFzaWMgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgZGlyZWN0b3J5IGNhY2hlCisgKi8KKworI2RlZmluZSBDQUNIRV9TSUdOQVRVUkUgMHg0NDQ5NTI0MwkvKiAiRElSQyIgKi8KK3N0cnVjdCBjYWNoZV9oZWFkZXIgeworCXVpbnQzMl90IGhkcl9zaWduYXR1cmU7CisJdWludDMyX3QgaGRyX3ZlcnNpb247CisJdWludDMyX3QgaGRyX2VudHJpZXM7Cit9OworCisjZGVmaW5lIElOREVYX0ZPUk1BVF9MQiAyCisjZGVmaW5lIElOREVYX0ZPUk1BVF9VQiA0CisKKy8qCisgKiBUaGUgImNhY2hlX3RpbWUiIGlzIGp1c3QgdGhlIGxvdyAzMiBiaXRzIG9mIHRoZQorICogdGltZS4gSXQgZG9lc24ndCBtYXR0ZXIgaWYgaXQgb3ZlcmZsb3dzIC0gd2Ugb25seQorICogY2hlY2sgaXQgZm9yIGVxdWFsaXR5IGluIHRoZSAzMiBiaXRzIHdlIHNhdmUuCisgKi8KK3N0cnVjdCBjYWNoZV90aW1lIHsKKwl1aW50MzJfdCBzZWM7CisJdWludDMyX3QgbnNlYzsKK307CisKK3N0cnVjdCBzdGF0X2RhdGEgeworCXN0cnVjdCBjYWNoZV90aW1lIHNkX2N0aW1lOworCXN0cnVjdCBjYWNoZV90aW1lIHNkX210aW1lOworCXVuc2lnbmVkIGludCBzZF9kZXY7CisJdW5zaWduZWQgaW50IHNkX2lubzsKKwl1bnNpZ25lZCBpbnQgc2RfdWlkOworCXVuc2lnbmVkIGludCBzZF9naWQ7CisJdW5zaWduZWQgaW50IHNkX3NpemU7Cit9OworCitzdHJ1Y3QgY2FjaGVfZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwlzdHJ1Y3Qgc3RhdF9kYXRhIGNlX3N0YXRfZGF0YTsKKwl1bnNpZ25lZCBpbnQgY2VfbW9kZTsKKwl1bnNpZ25lZCBpbnQgY2VfZmxhZ3M7CisJdW5zaWduZWQgaW50IG1lbV9wb29sX2FsbG9jYXRlZDsKKwl1bnNpZ25lZCBpbnQgY2VfbmFtZWxlbjsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CS8qIGZvciBsaW5rIGV4dGVuc2lvbiAqLworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsgLyogbW9yZSAqLworfTsKKworI2RlZmluZSBDRV9TVEFHRU1BU0sgKDB4MzAwMCkKKyNkZWZpbmUgQ0VfRVhURU5ERUQgICgweDQwMDApCisjZGVmaW5lIENFX1ZBTElEICAgICAoMHg4MDAwKQorI2RlZmluZSBDRV9TVEFHRVNISUZUIDEyCisKKy8qCisgKiBSYW5nZSAweEZGRkYwRkZGIGluIGNlX2ZsYWdzIGlzIGRpdmlkZWQgaW50bworICogdHdvIHBhcnRzOiBpbi1tZW1vcnkgZmxhZ3MgYW5kIG9uLWRpc2sgb25lcy4KKyAqIEZsYWdzIGluIENFX0VYVEVOREVEX0ZMQUdTIHdpbGwgZ2V0IHNhdmVkIG9uLWRpc2sKKyAqIGlmIHlvdSB3YW50IHRvIHNhdmUgYSBuZXcgZmxhZywgYWRkIGl0IGluCisgKiBDRV9FWFRFTkRFRF9GTEFHUworICoKKyAqIEluLW1lbW9yeSBvbmx5IGZsYWdzCisgKi8KKyNkZWZpbmUgQ0VfVVBEQVRFICAgICAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIENFX1JFTU9WRSAgICAgICAgICAgICgxIDw8IDE3KQorI2RlZmluZSBDRV9VUFRPREFURSAgICAgICAgICAoMSA8PCAxOCkKKyNkZWZpbmUgQ0VfQURERUQgICAgICAgICAgICAgKDEgPDwgMTkpCisKKyNkZWZpbmUgQ0VfSEFTSEVEICAgICAgICAgICAgKDEgPDwgMjApCisjZGVmaW5lIENFX0ZTTU9OSVRPUl9WQUxJRCAgICgxIDw8IDIxKQorI2RlZmluZSBDRV9XVF9SRU1PVkUgICAgICAgICAoMSA8PCAyMikgLyogcmVtb3ZlIGluIHdvcmsgZGlyZWN0b3J5ICovCisjZGVmaW5lIENFX0NPTkZMSUNURUQgICAgICAgICgxIDw8IDIzKQorCisjZGVmaW5lIENFX1VOUEFDS0VEICAgICAgICAgICgxIDw8IDI0KQorI2RlZmluZSBDRV9ORVdfU0tJUF9XT1JLVFJFRSAoMSA8PCAyNSkKKworLyogdXNlZCB0byB0ZW1wb3JhcmlseSBtYXJrIHBhdGhzIG1hdGNoZWQgYnkgcGF0aHNwZWNzICovCisjZGVmaW5lIENFX01BVENIRUQgICAgICAgICAgICgxIDw8IDI2KQorCisjZGVmaW5lIENFX1VQREFURV9JTl9CQVNFICAgICgxIDw8IDI3KQorI2RlZmluZSBDRV9TVFJJUF9OQU1FICAgICAgICAoMSA8PCAyOCkKKworLyoKKyAqIEV4dGVuZGVkIG9uLWRpc2sgZmxhZ3MKKyAqLworI2RlZmluZSBDRV9JTlRFTlRfVE9fQUREICAgICAoMSA8PCAyOSkKKyNkZWZpbmUgQ0VfU0tJUF9XT1JLVFJFRSAgICAgKDEgPDwgMzApCisvKiBDRV9FWFRFTkRFRDIgaXMgZm9yIGZ1dHVyZSBleHRlbnNpb24gKi8KKyNkZWZpbmUgQ0VfRVhURU5ERUQyICAgICAgICAgKDFVIDw8IDMxKQorCisjZGVmaW5lIENFX0VYVEVOREVEX0ZMQUdTIChDRV9JTlRFTlRfVE9fQUREIHwgQ0VfU0tJUF9XT1JLVFJFRSkKKworLyoKKyAqIFNhZmVndWFyZCB0byBhdm9pZCBzYXZpbmcgd3JvbmcgZmxhZ3M6CisgKiAgLSBDRV9FWFRFTkRFRDIgd29uJ3QgZ2V0IHNhdmVkIHVudGlsIGl0cyBzZW1hbnRpYyBpcyBrbm93bgorICogIC0gQml0cyBpbiAweDAwMDBGRkZGIGhhdmUgYmVlbiBzYXZlZCBpbiBjZV9mbGFncyBhbHJlYWR5CisgKiAgLSBCaXRzIGluIDB4MDAzRjAwMDAgYXJlIGN1cnJlbnRseSBpbi1tZW1vcnkgZmxhZ3MKKyAqLworI2lmIENFX0VYVEVOREVEX0ZMQUdTICYgMHg4MDNGRkZGRgorI2Vycm9yICJDRV9FWFRFTkRFRF9GTEFHUyBvdXQgb2YgcmFuZ2UiCisjZW5kaWYKKworLyogRm9yd2FyZCBzdHJ1Y3R1cmUgZGVjbHMgKi8KK3N0cnVjdCBwYXRoc3BlYzsKK3N0cnVjdCBjaGlsZF9wcm9jZXNzOworc3RydWN0IHRyZWU7CisKKy8qCisgKiBDb3B5IHRoZSBzaGExIGFuZCBzdGF0IHN0YXRlIG9mIGEgY2FjaGUgZW50cnkgZnJvbSBvbmUgdG8KKyAqIGFub3RoZXIuIEJ1dCB3ZSBuZXZlciBjaGFuZ2UgdGhlIG5hbWUsIG9yIHRoZSBoYXNoIHN0YXRlIQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9jYWNoZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmRzdCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpzcmMpCit7CisJdW5zaWduZWQgaW50IHN0YXRlID0gZHN0LT5jZV9mbGFncyAmIENFX0hBU0hFRDsKKwlpbnQgbWVtX3Bvb2xfYWxsb2NhdGVkID0gZHN0LT5tZW1fcG9vbF9hbGxvY2F0ZWQ7CisKKwkvKiBEb24ndCBjb3B5IGhhc2ggY2hhaW4gYW5kIG5hbWUgKi8KKwltZW1jcHkoJmRzdC0+Y2Vfc3RhdF9kYXRhLCAmc3JjLT5jZV9zdGF0X2RhdGEsCisJCQlvZmZzZXRvZihzdHJ1Y3QgY2FjaGVfZW50cnksIG5hbWUpIC0KKwkJCW9mZnNldG9mKHN0cnVjdCBjYWNoZV9lbnRyeSwgY2Vfc3RhdF9kYXRhKSk7CisKKwkvKiBSZXN0b3JlIHRoZSBoYXNoIHN0YXRlICovCisJZHN0LT5jZV9mbGFncyA9IChkc3QtPmNlX2ZsYWdzICYgfkNFX0hBU0hFRCkgfCBzdGF0ZTsKKworCS8qIFJlc3RvcmUgdGhlIG1lbV9wb29sX2FsbG9jYXRlZCBmbGFnICovCisJZHN0LT5tZW1fcG9vbF9hbGxvY2F0ZWQgPSBtZW1fcG9vbF9hbGxvY2F0ZWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY3JlYXRlX2NlX2ZsYWdzKHVuc2lnbmVkIHN0YWdlKQoreworCXJldHVybiAoc3RhZ2UgPDwgQ0VfU1RBR0VTSElGVCk7Cit9CisKKyNkZWZpbmUgY2VfbmFtZWxlbihjZSkgKChjZSktPmNlX25hbWVsZW4pCisjZGVmaW5lIGNlX3NpemUoY2UpIGNhY2hlX2VudHJ5X3NpemUoY2VfbmFtZWxlbihjZSkpCisjZGVmaW5lIGNlX3N0YWdlKGNlKSAoKENFX1NUQUdFTUFTSyAmIChjZSktPmNlX2ZsYWdzKSA+PiBDRV9TVEFHRVNISUZUKQorI2RlZmluZSBjZV91cHRvZGF0ZShjZSkgKChjZSktPmNlX2ZsYWdzICYgQ0VfVVBUT0RBVEUpCisjZGVmaW5lIGNlX3NraXBfd29ya3RyZWUoY2UpICgoY2UpLT5jZV9mbGFncyAmIENFX1NLSVBfV09SS1RSRUUpCisjZGVmaW5lIGNlX21hcmtfdXB0b2RhdGUoY2UpICgoY2UpLT5jZV9mbGFncyB8PSBDRV9VUFRPREFURSkKKyNkZWZpbmUgY2VfaW50ZW50X3RvX2FkZChjZSkgKChjZSktPmNlX2ZsYWdzICYgQ0VfSU5URU5UX1RPX0FERCkKKworI2RlZmluZSBjZV9wZXJtaXNzaW9ucyhtb2RlKSAoKChtb2RlKSAmIDAxMDApID8gMDc1NSA6IDA2NDQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcmVhdGVfY2VfbW9kZSh1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlpZiAoU19JU0xOSyhtb2RlKSkKKwkJcmV0dXJuIFNfSUZMTks7CisJaWYgKFNfSVNESVIobW9kZSkgfHwgU19JU0dJVExJTksobW9kZSkpCisJCXJldHVybiBTX0lGR0lUTElOSzsKKwlyZXR1cm4gU19JRlJFRyB8IGNlX3Blcm1pc3Npb25zKG1vZGUpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2VfbW9kZV9mcm9tX3N0YXQoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlleHRlcm4gaW50IHRydXN0X2V4ZWN1dGFibGVfYml0LCBoYXNfc3ltbGlua3M7CisJaWYgKCFoYXNfc3ltbGlua3MgJiYgU19JU1JFRyhtb2RlKSAmJgorCSAgICBjZSAmJiBTX0lTTE5LKGNlLT5jZV9tb2RlKSkKKwkJcmV0dXJuIGNlLT5jZV9tb2RlOworCWlmICghdHJ1c3RfZXhlY3V0YWJsZV9iaXQgJiYgU19JU1JFRyhtb2RlKSkgeworCQlpZiAoY2UgJiYgU19JU1JFRyhjZS0+Y2VfbW9kZSkpCisJCQlyZXR1cm4gY2UtPmNlX21vZGU7CisJCXJldHVybiBjcmVhdGVfY2VfbW9kZSgwNjY2KTsKKwl9CisJcmV0dXJuIGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworfQorc3RhdGljIGlubGluZSBpbnQgY2VfdG9fZHR5cGUoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwl1bnNpZ25lZCBjZV9tb2RlID0gbnRvaGwoY2UtPmNlX21vZGUpOworCWlmIChTX0lTUkVHKGNlX21vZGUpKQorCQlyZXR1cm4gRFRfUkVHOworCWVsc2UgaWYgKFNfSVNESVIoY2VfbW9kZSkgfHwgU19JU0dJVExJTksoY2VfbW9kZSkpCisJCXJldHVybiBEVF9ESVI7CisJZWxzZSBpZiAoU19JU0xOSyhjZV9tb2RlKSkKKwkJcmV0dXJuIERUX0xOSzsKKwllbHNlCisJCXJldHVybiBEVF9VTktOT1dOOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2Fub25fbW9kZSh1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlpZiAoU19JU1JFRyhtb2RlKSkKKwkJcmV0dXJuIFNfSUZSRUcgfCBjZV9wZXJtaXNzaW9ucyhtb2RlKTsKKwlpZiAoU19JU0xOSyhtb2RlKSkKKwkJcmV0dXJuIFNfSUZMTks7CisJaWYgKFNfSVNESVIobW9kZSkpCisJCXJldHVybiBTX0lGRElSOworCXJldHVybiBTX0lGR0lUTElOSzsKK30KKworI2RlZmluZSBjYWNoZV9lbnRyeV9zaXplKGxlbikgKG9mZnNldG9mKHN0cnVjdCBjYWNoZV9lbnRyeSxuYW1lKSArIChsZW4pICsgMSkKKworI2RlZmluZSBTT01FVEhJTkdfQ0hBTkdFRAkoMSA8PCAwKSAvKiB1bmNsYXNzaWZpZWQgY2hhbmdlcyBnbyBoZXJlICovCisjZGVmaW5lIENFX0VOVFJZX0NIQU5HRUQJKDEgPDwgMSkKKyNkZWZpbmUgQ0VfRU5UUllfUkVNT1ZFRAkoMSA8PCAyKQorI2RlZmluZSBDRV9FTlRSWV9BRERFRAkJKDEgPDwgMykKKyNkZWZpbmUgUkVTT0xWRV9VTkRPX0NIQU5HRUQJKDEgPDwgNCkKKyNkZWZpbmUgQ0FDSEVfVFJFRV9DSEFOR0VECSgxIDw8IDUpCisjZGVmaW5lIFNQTElUX0lOREVYX09SREVSRUQJKDEgPDwgNikKKyNkZWZpbmUgVU5UUkFDS0VEX0NIQU5HRUQJKDEgPDwgNykKKyNkZWZpbmUgRlNNT05JVE9SX0NIQU5HRUQJKDEgPDwgOCkKKworc3RydWN0IHNwbGl0X2luZGV4Oworc3RydWN0IHVudHJhY2tlZF9jYWNoZTsKK3N0cnVjdCBwcm9ncmVzczsKKworc3RydWN0IGluZGV4X3N0YXRlIHsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZTsKKwl1bnNpZ25lZCBpbnQgdmVyc2lvbjsKKwl1bnNpZ25lZCBpbnQgY2FjaGVfbnIsIGNhY2hlX2FsbG9jLCBjYWNoZV9jaGFuZ2VkOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvOworCXN0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlOworCXN0cnVjdCBzcGxpdF9pbmRleCAqc3BsaXRfaW5kZXg7CisJc3RydWN0IGNhY2hlX3RpbWUgdGltZXN0YW1wOworCXVuc2lnbmVkIG5hbWVfaGFzaF9pbml0aWFsaXplZCA6IDEsCisJCSBpbml0aWFsaXplZCA6IDEsCisJCSBkcm9wX2NhY2hlX3RyZWUgOiAxLAorCQkgdXBkYXRlZF93b3JrZGlyIDogMSwKKwkJIHVwZGF0ZWRfc2tpcHdvcmt0cmVlIDogMSwKKwkJIGZzbW9uaXRvcl9oYXNfcnVuX29uY2UgOiAxOworCXN0cnVjdCBoYXNobWFwIG5hbWVfaGFzaDsKKwlzdHJ1Y3QgaGFzaG1hcCBkaXJfaGFzaDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1bnRyYWNrZWQ7CisJY2hhciAqZnNtb25pdG9yX2xhc3RfdXBkYXRlOworCXN0cnVjdCBld2FoX2JpdG1hcCAqZnNtb25pdG9yX2RpcnR5OworCXN0cnVjdCBtZW1fcG9vbCAqY2VfbWVtX3Bvb2w7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKK307CisKKy8qIE5hbWUgaGFzaGluZyAqLworaW50IHRlc3RfbGF6eV9pbml0X25hbWVfaGFzaChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgaW50IHRyeV90aHJlYWRlZCk7Cit2b2lkIGFkZF9uYW1lX2hhc2goc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpOwordm9pZCByZW1vdmVfbmFtZV9oYXNoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKTsKK3ZvaWQgZnJlZV9uYW1lX2hhc2goc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOworCisKKy8qIENhY2hlIGVudHJ5IGNyZWF0aW9uIGFuZCBjbGVhbnVwICovCisKKy8qCisgKiBDcmVhdGUgY2FjaGVfZW50cnkgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgc3BlY2lmaWVkIGluZGV4LiBDYWxsZXIKKyAqIGlzIHJlc3BvbnNpYmxlIGZvciBkaXNjYXJkaW5nIHRoZSBjYWNoZV9lbnRyeSB3aXRoCisgKiBgZGlzY2FyZF9jYWNoZV9lbnRyeWAuCisgKi8KK3N0cnVjdCBjYWNoZV9lbnRyeSAqbWFrZV9jYWNoZV9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBtb2RlLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgICAgIGludCBzdGFnZSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCByZWZyZXNoX29wdGlvbnMpOworCitzdHJ1Y3QgY2FjaGVfZW50cnkgKm1ha2VfZW1wdHlfY2FjaGVfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCSAgIHNpemVfdCBuYW1lX2xlbik7CisKKy8qCisgKiBDcmVhdGUgYSBjYWNoZV9lbnRyeSB0aGF0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSBhZGRlZCB0byBhbiBpbmRleC4KKyAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZGlzY2FyZGluZyB0aGUgY2FjaGVfZW50cnkKKyAqIHdpdGggYGRpc2NhcmRfY2FjaGVfZW50cnlgLgorICovCitzdHJ1Y3QgY2FjaGVfZW50cnkgKm1ha2VfdHJhbnNpZW50X2NhY2hlX2VudHJ5KHVuc2lnbmVkIGludCBtb2RlLAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJICAgICAgIGludCBzdGFnZSk7CisKK3N0cnVjdCBjYWNoZV9lbnRyeSAqbWFrZV9lbXB0eV90cmFuc2llbnRfY2FjaGVfZW50cnkoc2l6ZV90IG5hbWVfbGVuKTsKKworLyoKKyAqIERpc2NhcmQgY2FjaGUgZW50cnkuCisgKi8KK3ZvaWQgZGlzY2FyZF9jYWNoZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKTsKKworLyoKKyAqIENoZWNrIGNvbmZpZ3VyYXRpb24gaWYgd2Ugc2hvdWxkIHBlcmZvcm0gZXh0cmEgdmFsaWRhdGlvbiBvbiBjYWNoZQorICogZW50cmllcy4KKyAqLworaW50IHNob3VsZF92YWxpZGF0ZV9jYWNoZV9lbnRyaWVzKHZvaWQpOworCisvKgorICogRHVwbGljYXRlIGEgY2FjaGVfZW50cnkuIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIG5ldyBlbnRyeSBmcm9tIGEKKyAqIG1lbW9yeV9wb29sLiBUYWtlcyBpbnRvIGFjY291bnQgY2FjaGVfZW50cnkgZmllbGRzIHRoYXQgYXJlIG1lYW50CisgKiBmb3IgbWFuYWdpbmcgdGhlIHVuZGVybHlpbmcgbWVtb3J5IGFsbG9jYXRpb24gb2YgdGhlIGNhY2hlX2VudHJ5LgorICovCitzdHJ1Y3QgY2FjaGVfZW50cnkgKmR1cF9jYWNoZV9lbnRyeShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CisKKy8qCisgKiBWYWxpZGF0ZSB0aGUgY2FjaGUgZW50cmllcyBpbiB0aGUgaW5kZXguICBUaGlzIGlzIGFuIGludGVybmFsCisgKiBjb25zaXN0ZW5jeSBjaGVjayB0aGF0IHRoZSBjYWNoZV9lbnRyeSBzdHJ1Y3RzIGFyZSBhbGxvY2F0ZWQgZnJvbQorICogdGhlIGV4cGVjdGVkIG1lbW9yeSBwb29sLgorICovCit2b2lkIHZhbGlkYXRlX2NhY2hlX2VudHJpZXMoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOworCisjaWZkZWYgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworZXh0ZXJuIHN0cnVjdCBpbmRleF9zdGF0ZSB0aGVfaW5kZXg7CisKKyNkZWZpbmUgYWN0aXZlX2NhY2hlICh0aGVfaW5kZXguY2FjaGUpCisjZGVmaW5lIGFjdGl2ZV9uciAodGhlX2luZGV4LmNhY2hlX25yKQorI2RlZmluZSBhY3RpdmVfYWxsb2MgKHRoZV9pbmRleC5jYWNoZV9hbGxvYykKKyNkZWZpbmUgYWN0aXZlX2NhY2hlX2NoYW5nZWQgKHRoZV9pbmRleC5jYWNoZV9jaGFuZ2VkKQorI2RlZmluZSBhY3RpdmVfY2FjaGVfdHJlZSAodGhlX2luZGV4LmNhY2hlX3RyZWUpCisKKyNkZWZpbmUgcmVhZF9jYWNoZSgpIHJlcG9fcmVhZF9pbmRleCh0aGVfcmVwb3NpdG9yeSkKKyNkZWZpbmUgcmVhZF9jYWNoZV9mcm9tKHBhdGgpIHJlYWRfaW5kZXhfZnJvbSgmdGhlX2luZGV4LCAocGF0aCksIChnZXRfZ2l0X2RpcigpKSkKKyNkZWZpbmUgcmVhZF9jYWNoZV9wcmVsb2FkKHBhdGhzcGVjKSByZXBvX3JlYWRfaW5kZXhfcHJlbG9hZCh0aGVfcmVwb3NpdG9yeSwgKHBhdGhzcGVjKSwgMCkKKyNkZWZpbmUgaXNfY2FjaGVfdW5ib3JuKCkgaXNfaW5kZXhfdW5ib3JuKCZ0aGVfaW5kZXgpCisjZGVmaW5lIHJlYWRfY2FjaGVfdW5tZXJnZWQoKSByZXBvX3JlYWRfaW5kZXhfdW5tZXJnZWQodGhlX3JlcG9zaXRvcnkpCisjZGVmaW5lIGRpc2NhcmRfY2FjaGUoKSBkaXNjYXJkX2luZGV4KCZ0aGVfaW5kZXgpCisjZGVmaW5lIHVubWVyZ2VkX2NhY2hlKCkgdW5tZXJnZWRfaW5kZXgoJnRoZV9pbmRleCkKKyNkZWZpbmUgY2FjaGVfbmFtZV9wb3MobmFtZSwgbmFtZWxlbikgaW5kZXhfbmFtZV9wb3MoJnRoZV9pbmRleCwobmFtZSksKG5hbWVsZW4pKQorI2RlZmluZSBhZGRfY2FjaGVfZW50cnkoY2UsIG9wdGlvbikgYWRkX2luZGV4X2VudHJ5KCZ0aGVfaW5kZXgsIChjZSksIChvcHRpb24pKQorI2RlZmluZSByZW5hbWVfY2FjaGVfZW50cnlfYXQocG9zLCBuZXdfbmFtZSkgcmVuYW1lX2luZGV4X2VudHJ5X2F0KCZ0aGVfaW5kZXgsIChwb3MpLCAobmV3X25hbWUpKQorI2RlZmluZSByZW1vdmVfY2FjaGVfZW50cnlfYXQocG9zKSByZW1vdmVfaW5kZXhfZW50cnlfYXQoJnRoZV9pbmRleCwgKHBvcykpCisjZGVmaW5lIHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCkgcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleCgmdGhlX2luZGV4LCAocGF0aCkpCisjZGVmaW5lIGFkZF90b19jYWNoZShwYXRoLCBzdCwgZmxhZ3MpIGFkZF90b19pbmRleCgmdGhlX2luZGV4LCAocGF0aCksIChzdCksIChmbGFncykpCisjZGVmaW5lIGFkZF9maWxlX3RvX2NhY2hlKHBhdGgsIGZsYWdzKSBhZGRfZmlsZV90b19pbmRleCgmdGhlX2luZGV4LCAocGF0aCksIChmbGFncykpCisjZGVmaW5lIGNobW9kX2NhY2hlX2VudHJ5KGNlLCBmbGlwKSBjaG1vZF9pbmRleF9lbnRyeSgmdGhlX2luZGV4LCAoY2UpLCAoZmxpcCkpCisjZGVmaW5lIHJlZnJlc2hfY2FjaGUoZmxhZ3MpIHJlZnJlc2hfaW5kZXgoJnRoZV9pbmRleCwgKGZsYWdzKSwgTlVMTCwgTlVMTCwgTlVMTCkKKyNkZWZpbmUgcmVmcmVzaF9hbmRfd3JpdGVfY2FjaGUocmVmcmVzaF9mbGFncywgd3JpdGVfZmxhZ3MsIGdlbnRsZSkgcmVwb19yZWZyZXNoX2FuZF93cml0ZV9pbmRleCh0aGVfcmVwb3NpdG9yeSwgKHJlZnJlc2hfZmxhZ3MpLCAod3JpdGVfZmxhZ3MpLCAoZ2VudGxlKSwgTlVMTCwgTlVMTCwgTlVMTCkKKyNkZWZpbmUgY2VfbWF0Y2hfc3RhdChjZSwgc3QsIG9wdGlvbnMpIGllX21hdGNoX3N0YXQoJnRoZV9pbmRleCwgKGNlKSwgKHN0KSwgKG9wdGlvbnMpKQorI2RlZmluZSBjZV9tb2RpZmllZChjZSwgc3QsIG9wdGlvbnMpIGllX21vZGlmaWVkKCZ0aGVfaW5kZXgsIChjZSksIChzdCksIChvcHRpb25zKSkKKyNkZWZpbmUgY2FjaGVfZGlyX2V4aXN0cyhuYW1lLCBuYW1lbGVuKSBpbmRleF9kaXJfZXhpc3RzKCZ0aGVfaW5kZXgsIChuYW1lKSwgKG5hbWVsZW4pKQorI2RlZmluZSBjYWNoZV9maWxlX2V4aXN0cyhuYW1lLCBuYW1lbGVuLCBpZ25jYXNlKSBpbmRleF9maWxlX2V4aXN0cygmdGhlX2luZGV4LCAobmFtZSksIChuYW1lbGVuKSwgKGlnbmNhc2UpKQorI2RlZmluZSBjYWNoZV9uYW1lX2lzX290aGVyKG5hbWUsIG5hbWVsZW4pIGluZGV4X25hbWVfaXNfb3RoZXIoJnRoZV9pbmRleCwgKG5hbWUpLCAobmFtZWxlbikpCisjZGVmaW5lIHJlc29sdmVfdW5kb19jbGVhcigpIHJlc29sdmVfdW5kb19jbGVhcl9pbmRleCgmdGhlX2luZGV4KQorI2RlZmluZSB1bm1lcmdlX2NhY2hlX2VudHJ5X2F0KGF0KSB1bm1lcmdlX2luZGV4X2VudHJ5X2F0KCZ0aGVfaW5kZXgsIGF0KQorI2RlZmluZSB1bm1lcmdlX2NhY2hlKHBhdGhzcGVjKSB1bm1lcmdlX2luZGV4KCZ0aGVfaW5kZXgsIHBhdGhzcGVjKQorI2RlZmluZSByZWFkX2Jsb2JfZGF0YV9mcm9tX2NhY2hlKHBhdGgsIHN6KSByZWFkX2Jsb2JfZGF0YV9mcm9tX2luZGV4KCZ0aGVfaW5kZXgsIChwYXRoKSwgKHN6KSkKKyNkZWZpbmUgaG9sZF9sb2NrZWRfaW5kZXgobG9ja19maWxlLCBmbGFncykgcmVwb19ob2xkX2xvY2tlZF9pbmRleCh0aGVfcmVwb3NpdG9yeSwgKGxvY2tfZmlsZSksIChmbGFncykpCisjZW5kaWYKKworI2RlZmluZSBUWVBFX0JJVFMgMworCisvKgorICogVmFsdWVzIGluIHRoaXMgZW51bSAoZXhjZXB0IHRob3NlIG91dHNpZGUgdGhlIDMgYml0IHJhbmdlKSBhcmUgcGFydAorICogb2YgcGFjayBmaWxlIGZvcm1hdC4gU2VlIERvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stZm9ybWF0LnR4dAorICogZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KK2VudW0gb2JqZWN0X3R5cGUgeworCU9CSl9CQUQgPSAtMSwKKwlPQkpfTk9ORSA9IDAsCisJT0JKX0NPTU1JVCA9IDEsCisJT0JKX1RSRUUgPSAyLAorCU9CSl9CTE9CID0gMywKKwlPQkpfVEFHID0gNCwKKwkvKiA1IGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJT0JKX09GU19ERUxUQSA9IDYsCisJT0JKX1JFRl9ERUxUQSA9IDcsCisJT0JKX0FOWSwKKwlPQkpfTUFYCit9OworCitzdGF0aWMgaW5saW5lIGVudW0gb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGUodW5zaWduZWQgaW50IG1vZGUpCit7CisJcmV0dXJuIFNfSVNESVIobW9kZSkgPyBPQkpfVFJFRSA6CisJCVNfSVNHSVRMSU5LKG1vZGUpID8gT0JKX0NPTU1JVCA6CisJCU9CSl9CTE9COworfQorCisvKiBEb3VibGUtY2hlY2sgbG9jYWxfcmVwb19lbnYgYmVsb3cgaWYgeW91IGFkZCB0byB0aGlzIGxpc3QuICovCisjZGVmaW5lIEdJVF9ESVJfRU5WSVJPTk1FTlQgIkdJVF9ESVIiCisjZGVmaW5lIEdJVF9DT01NT05fRElSX0VOVklST05NRU5UICJHSVRfQ09NTU9OX0RJUiIKKyNkZWZpbmUgR0lUX05BTUVTUEFDRV9FTlZJUk9OTUVOVCAiR0lUX05BTUVTUEFDRSIKKyNkZWZpbmUgR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCAiR0lUX1dPUktfVFJFRSIKKyNkZWZpbmUgR0lUX1BSRUZJWF9FTlZJUk9OTUVOVCAiR0lUX1BSRUZJWCIKKyNkZWZpbmUgR0lUX1NVUEVSX1BSRUZJWF9FTlZJUk9OTUVOVCAiR0lUX0lOVEVSTkFMX1NVUEVSX1BSRUZJWCIKKyNkZWZpbmUgREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UICIuZ2l0IgorI2RlZmluZSBEQl9FTlZJUk9OTUVOVCAiR0lUX09CSkVDVF9ESVJFQ1RPUlkiCisjZGVmaW5lIElOREVYX0VOVklST05NRU5UICJHSVRfSU5ERVhfRklMRSIKKyNkZWZpbmUgR1JBRlRfRU5WSVJPTk1FTlQgIkdJVF9HUkFGVF9GSUxFIgorI2RlZmluZSBHSVRfU0hBTExPV19GSUxFX0VOVklST05NRU5UICJHSVRfU0hBTExPV19GSUxFIgorI2RlZmluZSBURU1QTEFURV9ESVJfRU5WSVJPTk1FTlQgIkdJVF9URU1QTEFURV9ESVIiCisjZGVmaW5lIENPTkZJR19FTlZJUk9OTUVOVCAiR0lUX0NPTkZJRyIKKyNkZWZpbmUgQ09ORklHX0RBVEFfRU5WSVJPTk1FTlQgIkdJVF9DT05GSUdfUEFSQU1FVEVSUyIKKyNkZWZpbmUgRVhFQ19QQVRIX0VOVklST05NRU5UICJHSVRfRVhFQ19QQVRIIgorI2RlZmluZSBDRUlMSU5HX0RJUkVDVE9SSUVTX0VOVklST05NRU5UICJHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyIKKyNkZWZpbmUgTk9fUkVQTEFDRV9PQkpFQ1RTX0VOVklST05NRU5UICJHSVRfTk9fUkVQTEFDRV9PQkpFQ1RTIgorI2RlZmluZSBHSVRfUkVQTEFDRV9SRUZfQkFTRV9FTlZJUk9OTUVOVCAiR0lUX1JFUExBQ0VfUkVGX0JBU0UiCisjZGVmaW5lIEdJVEFUVFJJQlVURVNfRklMRSAiLmdpdGF0dHJpYnV0ZXMiCisjZGVmaW5lIElORk9BVFRSSUJVVEVTX0ZJTEUgImluZm8vYXR0cmlidXRlcyIKKyNkZWZpbmUgQVRUUklCVVRFX01BQ1JPX1BSRUZJWCAiW2F0dHJdIgorI2RlZmluZSBHSVRNT0RVTEVTX0ZJTEUgIi5naXRtb2R1bGVzIgorI2RlZmluZSBHSVRNT0RVTEVTX0lOREVYICI6LmdpdG1vZHVsZXMiCisjZGVmaW5lIEdJVE1PRFVMRVNfSEVBRCAiSEVBRDouZ2l0bW9kdWxlcyIKKyNkZWZpbmUgR0lUX05PVEVTX1JFRl9FTlZJUk9OTUVOVCAiR0lUX05PVEVTX1JFRiIKKyNkZWZpbmUgR0lUX05PVEVTX0RFRkFVTFRfUkVGICJyZWZzL25vdGVzL2NvbW1pdHMiCisjZGVmaW5lIEdJVF9OT1RFU19ESVNQTEFZX1JFRl9FTlZJUk9OTUVOVCAiR0lUX05PVEVTX0RJU1BMQVlfUkVGIgorI2RlZmluZSBHSVRfTk9URVNfUkVXUklURV9SRUZfRU5WSVJPTk1FTlQgIkdJVF9OT1RFU19SRVdSSVRFX1JFRiIKKyNkZWZpbmUgR0lUX05PVEVTX1JFV1JJVEVfTU9ERV9FTlZJUk9OTUVOVCAiR0lUX05PVEVTX1JFV1JJVEVfTU9ERSIKKyNkZWZpbmUgR0lUX0xJVEVSQUxfUEFUSFNQRUNTX0VOVklST05NRU5UICJHSVRfTElURVJBTF9QQVRIU1BFQ1MiCisjZGVmaW5lIEdJVF9HTE9CX1BBVEhTUEVDU19FTlZJUk9OTUVOVCAiR0lUX0dMT0JfUEFUSFNQRUNTIgorI2RlZmluZSBHSVRfTk9HTE9CX1BBVEhTUEVDU19FTlZJUk9OTUVOVCAiR0lUX05PR0xPQl9QQVRIU1BFQ1MiCisjZGVmaW5lIEdJVF9JQ0FTRV9QQVRIU1BFQ1NfRU5WSVJPTk1FTlQgIkdJVF9JQ0FTRV9QQVRIU1BFQ1MiCisjZGVmaW5lIEdJVF9RVUFSQU5USU5FX0VOVklST05NRU5UICJHSVRfUVVBUkFOVElORV9QQVRIIgorI2RlZmluZSBHSVRfT1BUSU9OQUxfTE9DS1NfRU5WSVJPTk1FTlQgIkdJVF9PUFRJT05BTF9MT0NLUyIKKyNkZWZpbmUgR0lUX1RFWFRfRE9NQUlOX0RJUl9FTlZJUk9OTUVOVCAiR0lUX1RFWFRET01BSU5ESVIiCisKKy8qCisgKiBFbnZpcm9ubWVudCB2YXJpYWJsZSB1c2VkIGluIGhhbmRzaGFraW5nIHRoZSB3aXJlIHByb3RvY29sLgorICogQ29udGFpbnMgYSBjb2xvbiAnOicgc2VwYXJhdGVkIGxpc3Qgb2Yga2V5cyB3aXRoIG9wdGlvbmFsIHZhbHVlcworICogJ2tleVs9dmFsdWVdJy4gIFByZXNlbmNlIG9mIHVua25vd24ga2V5cyBhbmQgdmFsdWVzIG11c3QgYmUKKyAqIGlnbm9yZWQuCisgKi8KKyNkZWZpbmUgR0lUX1BST1RPQ09MX0VOVklST05NRU5UICJHSVRfUFJPVE9DT0wiCisvKiBIVFRQIGhlYWRlciB1c2VkIHRvIGhhbmRzaGFrZSB0aGUgd2lyZSBwcm90b2NvbCAqLworI2RlZmluZSBHSVRfUFJPVE9DT0xfSEVBREVSICJHaXQtUHJvdG9jb2wiCisKKy8qCisgKiBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gYSBib29sZWFuIGluZGljYXRpbmcKKyAqIHdoZXRoZXIgd2Ugc2hvdWxkIG9yIHNob3VsZCBub3QgdHJlYXQ6CisgKgorICogICBHSVRfRElSPWZvby5naXQgZ2l0IC4uLgorICoKKyAqIGFzIGlmIEdJVF9XT1JLX1RSRUU9LiB3YXMgZ2l2ZW4uIEl0J3Mgbm90IGV4cGVjdGVkIHRoYXQgdXNlcnMgd2lsbCBtYWtlIHVzZQorICogb2YgdGhpcywgYnV0IHdlIHVzZSBpdCBpbnRlcm5hbGx5IHRvIGNvbW11bmljYXRlIHRvIHN1Yi1wcm9jZXNzZXMgdGhhdCB3ZQorICogYXJlIGluIGEgYmFyZSByZXBvLiBJZiBub3Qgc2V0LCBkZWZhdWx0cyB0byB0cnVlLgorICovCisjZGVmaW5lIEdJVF9JTVBMSUNJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQgIkdJVF9JTVBMSUNJVF9XT1JLX1RSRUUiCisKKy8qCisgKiBSZXBvc2l0b3J5LWxvY2FsIEdJVF8qIGVudmlyb25tZW50IHZhcmlhYmxlczsgdGhlc2Ugd2lsbCBiZSBjbGVhcmVkCisgKiB3aGVuIGdpdCBzcGF3bnMgYSBzdWItcHJvY2VzcyB0aGF0IHJ1bnMgaW5zaWRlIGFub3RoZXIgcmVwb3NpdG9yeS4KKyAqIFRoZSBhcnJheSBpcyBOVUxMLXRlcm1pbmF0ZWQsIHdoaWNoIG1ha2VzIGl0IGVhc3kgdG8gcGFzcyBpbiB0aGUgImVudiIKKyAqIHBhcmFtZXRlciBvZiBhIHJ1bi1jb21tYW5kIGludm9jYXRpb24sIG9yIHRvIGRvIGEgc2ltcGxlIHdhbGsuCisgKi8KK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbG9jYWxfcmVwb19lbnZbXTsKKwordm9pZCBzZXR1cF9naXRfZW52KGNvbnN0IGNoYXIgKmdpdF9kaXIpOworCisvKgorICogUmV0dXJucyB0cnVlIGlmZiB3ZSBoYXZlIGEgY29uZmlndXJlZCBnaXQgcmVwb3NpdG9yeSAoZWl0aGVyIHZpYQorICogc2V0dXBfZ2l0X2RpcmVjdG9yeSwgb3IgaW4gdGhlIGVudmlyb25tZW50IHZpYSAkR0lUX0RJUikuCisgKi8KK2ludCBoYXZlX2dpdF9kaXIodm9pZCk7CisKK2V4dGVybiBpbnQgaXNfYmFyZV9yZXBvc2l0b3J5X2NmZzsKK2ludCBpc19iYXJlX3JlcG9zaXRvcnkodm9pZCk7CitpbnQgaXNfaW5zaWRlX2dpdF9kaXIodm9pZCk7CitleHRlcm4gY2hhciAqZ2l0X3dvcmtfdHJlZV9jZmc7CitpbnQgaXNfaW5zaWRlX3dvcmtfdHJlZSh2b2lkKTsKK2NvbnN0IGNoYXIgKmdldF9naXRfZGlyKHZvaWQpOworY29uc3QgY2hhciAqZ2V0X2dpdF9jb21tb25fZGlyKHZvaWQpOworY2hhciAqZ2V0X29iamVjdF9kaXJlY3Rvcnkodm9pZCk7CitjaGFyICpnZXRfaW5kZXhfZmlsZSh2b2lkKTsKK2NoYXIgKmdldF9ncmFmdF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKK3ZvaWQgc2V0X2dpdF9kaXIoY29uc3QgY2hhciAqcGF0aCwgaW50IG1ha2VfcmVhbHBhdGgpOworaW50IGdldF9jb21tb25fZGlyX25vZW52KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpnaXRkaXIpOworaW50IGdldF9jb21tb25fZGlyKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpnaXRkaXIpOworY29uc3QgY2hhciAqZ2V0X2dpdF9uYW1lc3BhY2Uodm9pZCk7Citjb25zdCBjaGFyICpzdHJpcF9uYW1lc3BhY2UoY29uc3QgY2hhciAqbmFtZXNwYWNlZF9yZWYpOworY29uc3QgY2hhciAqZ2V0X3N1cGVyX3ByZWZpeCh2b2lkKTsKK2NvbnN0IGNoYXIgKmdldF9naXRfd29ya190cmVlKHZvaWQpOworCisvKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIHBhdGggaXMgYSBnaXQgZGlyZWN0b3J5OyBub3RlIHRoYXQgdGhpcyBfanVzdF8KKyAqIGxvb2tzIGF0IHRoZSBkaXJlY3RvcnkgaXRzZWxmLiBJZiB5b3Ugd2FudCB0byBrbm93IHdoZXRoZXIgImZvby8uZ2l0IgorICogaXMgYSByZXBvc2l0b3J5LCB5b3UgbXVzdCBmZWVkIHRoYXQgcGF0aCwgbm90IGp1c3QgImZvbyIuCisgKi8KK2ludCBpc19naXRfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKnBhdGgpOworCisvKgorICogUmV0dXJuIDEgaWYgdGhlIGdpdmVuIHBhdGggaXMgdGhlIHJvb3Qgb2YgYSBnaXQgcmVwb3NpdG9yeSBvcgorICogc3VibW9kdWxlLCBlbHNlIDAuIFdpbGwgbm90IHJldHVybiAxIGZvciBiYXJlIHJlcG9zaXRvcmllcyB3aXRoIHRoZQorICogZXhjZXB0aW9uIG9mIGNyZWF0aW5nIGEgYmFyZSByZXBvc2l0b3J5IGluICJmb28vLmdpdCIgYW5kIGNhbGxpbmcKKyAqIGlzX2dpdF9yZXBvc2l0b3J5KCJmb28iKS4KKyAqCisgKiBJZiB3ZSBydW4gaW50byByZWFkIGVycm9ycywgd2UgZXJyIG9uIHRoZSBzaWRlIG9mIHNheWluZyAieWVzLCBpdCBpcyIsCisgKiBhcyB3ZSB1c3VhbGx5IGNvbnNpZGVyIHN1Yi1yZXBvcyBwcmVjaW91cywgYW5kIHdvdWxkIHByZWZlciB0byBlcnIgb24gdGhlCisgKiBzaWRlIG9mIG5vdCBkaXNydXB0aW5nIG9yIGRlbGV0aW5nIHRoZW0uCisgKi8KK2ludCBpc19ub25iYXJlX3JlcG9zaXRvcnlfZGlyKHN0cnVjdCBzdHJidWYgKnBhdGgpOworCisjZGVmaW5lIFJFQURfR0lURklMRV9FUlJfU1RBVF9GQUlMRUQgMQorI2RlZmluZSBSRUFEX0dJVEZJTEVfRVJSX05PVF9BX0ZJTEUgMgorI2RlZmluZSBSRUFEX0dJVEZJTEVfRVJSX09QRU5fRkFJTEVEIDMKKyNkZWZpbmUgUkVBRF9HSVRGSUxFX0VSUl9SRUFEX0ZBSUxFRCA0CisjZGVmaW5lIFJFQURfR0lURklMRV9FUlJfSU5WQUxJRF9GT1JNQVQgNQorI2RlZmluZSBSRUFEX0dJVEZJTEVfRVJSX05PX1BBVEggNgorI2RlZmluZSBSRUFEX0dJVEZJTEVfRVJSX05PVF9BX1JFUE8gNworI2RlZmluZSBSRUFEX0dJVEZJTEVfRVJSX1RPT19MQVJHRSA4Cit2b2lkIHJlYWRfZ2l0ZmlsZV9lcnJvcl9kaWUoaW50IGVycm9yX2NvZGUsIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmRpcik7Citjb25zdCBjaGFyICpyZWFkX2dpdGZpbGVfZ2VudGx5KGNvbnN0IGNoYXIgKnBhdGgsIGludCAqcmV0dXJuX2Vycm9yX2NvZGUpOworI2RlZmluZSByZWFkX2dpdGZpbGUocGF0aCkgcmVhZF9naXRmaWxlX2dlbnRseSgocGF0aCksIE5VTEwpCitjb25zdCBjaGFyICpyZXNvbHZlX2dpdGRpcl9nZW50bHkoY29uc3QgY2hhciAqc3VzcGVjdCwgaW50ICpyZXR1cm5fZXJyb3JfY29kZSk7CisjZGVmaW5lIHJlc29sdmVfZ2l0ZGlyKHBhdGgpIHJlc29sdmVfZ2l0ZGlyX2dlbnRseSgocGF0aCksIE5VTEwpCisKK3ZvaWQgc2V0X2dpdF93b3JrX3RyZWUoY29uc3QgY2hhciAqdHJlZSk7CisKKyNkZWZpbmUgQUxURVJOQVRFX0RCX0VOVklST05NRU5UICJHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUyIKKwordm9pZCBzZXR1cF93b3JrX3RyZWUodm9pZCk7CisvKgorICogRmluZCB0aGUgY29tbW9uZGlyIGFuZCBnaXRkaXIgb2YgdGhlIHJlcG9zaXRvcnkgdGhhdCBjb250YWlucyB0aGUgY3VycmVudAorICogd29ya2luZyBkaXJlY3RvcnksIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9yIG90aGVyIGdsb2JhbAorICogc3RhdGUuIFRoZSByZXN1bHQgaXMgYXBwZW5kZWQgdG8gY29tbW9uZGlyIGFuZCBnaXRkaXIuICBJZiB0aGUgZGlzY292ZXJlZAorICogZ2l0ZGlyIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB3b3JrdHJlZSwgdGhlbiAnY29tbW9uZGlyJyBhbmQgJ2dpdGRpcicgd2lsbAorICogYm90aCBoYXZlIHRoZSBzYW1lIHJlc3VsdCBhcHBlbmRlZCB0byB0aGUgYnVmZmVyLiAgVGhlIHJldHVybiB2YWx1ZSBpcworICogZWl0aGVyIDAgdXBvbiBzdWNjZXNzIGFuZCBub24temVybyBpZiBubyByZXBvc2l0b3J5IHdhcyBmb3VuZC4KKyAqLworaW50IGRpc2NvdmVyX2dpdF9kaXJlY3Rvcnkoc3RydWN0IHN0cmJ1ZiAqY29tbW9uZGlyLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZ2l0ZGlyKTsKK2NvbnN0IGNoYXIgKnNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KGludCAqKTsKK2NvbnN0IGNoYXIgKnNldHVwX2dpdF9kaXJlY3Rvcnkodm9pZCk7CitjaGFyICpwcmVmaXhfcGF0aChjb25zdCBjaGFyICpwcmVmaXgsIGludCBsZW4sIGNvbnN0IGNoYXIgKnBhdGgpOworY2hhciAqcHJlZml4X3BhdGhfZ2VudGx5KGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGxlbiwgaW50ICpyZW1haW5pbmcsIGNvbnN0IGNoYXIgKnBhdGgpOworCisvKgorICogQ29uY2F0ZW5hdGUgInByZWZpeCIgKGlmIGxlbiBpcyBub24temVybykgYW5kICJwYXRoIiwgd2l0aCBubworICogY29ubmVjdGluZyBjaGFyYWN0ZXJzIChzbyAicHJlZml4IiBzaG91bGQgZW5kIHdpdGggYSAiLyIpLgorICogVW5saWtlIHByZWZpeF9wYXRoLCB0aGlzIHNob3VsZCBiZSB1c2VkIGlmIHRoZSBuYW1lZCBmaWxlIGRvZXMKKyAqIG5vdCBoYXZlIHRvIGludGVyYWN0IHdpdGggaW5kZXggZW50cnk7IGkuZS4gbmFtZSBvZiBhIHJhbmRvbSBmaWxlCisgKiBvbiB0aGUgZmlsZXN5c3RlbS4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFsd2F5cyBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgKGV2ZW4gaWYgdGhlCisgKiBwcmVmaXggd2FzIGVtcHR5KS4KKyAqLworY2hhciAqcHJlZml4X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqcGF0aCk7CisKK2ludCBjaGVja19maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCB2ZXJpZnlfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LAorCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgaW50IGRpYWdub3NlX21pc3NwZWx0X3Jldik7Cit2b2lkIHZlcmlmeV9ub25fZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lKTsKK2ludCBwYXRoX2luc2lkZV9yZXBvKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqcGF0aCk7CisKKyNkZWZpbmUgSU5JVF9EQl9RVUlFVCAweDAwMDEKKyNkZWZpbmUgSU5JVF9EQl9FWElTVF9PSyAweDAwMDIKKworaW50IGluaXRfZGIoY29uc3QgY2hhciAqZ2l0X2RpciwgY29uc3QgY2hhciAqcmVhbF9naXRfZGlyLAorCSAgICBjb25zdCBjaGFyICp0ZW1wbGF0ZV9kaXIsIGludCBoYXNoX2FsZ28sCisJICAgIHVuc2lnbmVkIGludCBmbGFncyk7Cit2b2lkIGluaXRpYWxpemVfcmVwb3NpdG9yeV92ZXJzaW9uKGludCBoYXNoX2FsZ28pOworCit2b2lkIHNhbml0aXplX3N0ZGZkcyh2b2lkKTsKK2ludCBkYWVtb25pemUodm9pZCk7CisKKyNkZWZpbmUgYWxsb2NfbnIoeCkgKCgoeCkrMTYpKjMvMikKKworLyoqCisgKiBEeW5hbWljYWxseSBncm93aW5nIGFuIGFycmF5IHVzaW5nIHJlYWxsb2MoKSBpcyBlcnJvciBwcm9uZSBhbmQgYm9yaW5nLgorICoKKyAqIERlZmluZSB5b3VyIGFycmF5IHdpdGg6CisgKgorICogLSBhIHBvaW50ZXIgKGBpdGVtYCkgdGhhdCBwb2ludHMgYXQgdGhlIGFycmF5LCBpbml0aWFsaXplZCB0byBgTlVMTGAKKyAqICAgKGFsdGhvdWdoIHBsZWFzZSBuYW1lIHRoZSB2YXJpYWJsZSBiYXNlZCBvbiBpdHMgY29udGVudHMsIG5vdCBvbiBpdHMKKyAqICAgdHlwZSk7CisgKgorICogLSBhbiBpbnRlZ2VyIHZhcmlhYmxlIChgYWxsb2NgKSB0aGF0IGtlZXBzIHRyYWNrIG9mIGhvdyBiaWcgdGhlIGN1cnJlbnQKKyAqICAgYWxsb2NhdGlvbiBpcywgaW5pdGlhbGl6ZWQgdG8gYDBgOworICoKKyAqIC0gYW5vdGhlciBpbnRlZ2VyIHZhcmlhYmxlIChgbnJgKSB0byBrZWVwIHRyYWNrIG9mIGhvdyBtYW55IGVsZW1lbnRzIHRoZQorICogICBhcnJheSBjdXJyZW50bHkgaGFzLCBpbml0aWFsaXplZCB0byBgMGAuCisgKgorICogVGhlbiBiZWZvcmUgYWRkaW5nIGBuYHRoIGVsZW1lbnQgdG8gdGhlIGl0ZW0sIGNhbGwgYEFMTE9DX0dST1coaXRlbSwgbiwKKyAqIGFsbG9jKWAuICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYXJyYXkgY2FuIGhvbGQgYXQgbGVhc3QgYG5gIGVsZW1lbnRzIGJ5CisgKiBjYWxsaW5nIGByZWFsbG9jKDMpYCBhbmQgYWRqdXN0aW5nIGBhbGxvY2AgdmFyaWFibGUuCisgKgorICogLS0tLS0tLS0tLS0tCisgKiBzb21ldHlwZSAqaXRlbTsKKyAqIHNpemVfdCBucjsKKyAqIHNpemVfdCBhbGxvYworICoKKyAqIGZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorICogCWlmICh3ZSBsaWtlIGl0ZW1baV0gYWxyZWFkeSkKKyAqIAkJcmV0dXJuOworICoKKyAqIC8vIHdlIGRpZCBub3QgbGlrZSBhbnkgZXhpc3Rpbmcgb25lLCBzbyBhZGQgb25lCisgKiBBTExPQ19HUk9XKGl0ZW0sIG5yICsgMSwgYWxsb2MpOworICogaXRlbVtucisrXSA9IHZhbHVlIHlvdSBsaWtlOworICogLS0tLS0tLS0tLS0tCisgKgorICogWW91IGFyZSByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlIGBucmAgdmFyaWFibGUuCisgKgorICogSWYgeW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGFsbG9jYXRlIGV4cGxpY2l0bHkKKyAqIHRoZW4gdXNlIHRoZSBtYWNybyBgUkVBTExPQ19BUlJBWShpdGVtLCBhbGxvYylgIGluc3RlYWQgb2YgYEFMTE9DX0dST1dgLgorICoKKyAqIENvbnNpZGVyIHVzaW5nIEFMTE9DX0dST1dfQlkgaW5zdGVhZCBvZiBBTExPQ19HUk9XIGFzIGl0IGhhcyBzb21lCisgKiBhZGRlZCBuaWNldGllcy4KKyAqCisgKiBETyBOT1QgVVNFIGFueSBleHByZXNzaW9uIHdpdGggc2lkZS1lZmZlY3QgZm9yICd4JywgJ25yJywgb3IgJ2FsbG9jJy4KKyAqLworI2RlZmluZSBBTExPQ19HUk9XKHgsIG5yLCBhbGxvYykgXAorCWRvIHsgXAorCQlpZiAoKG5yKSA+IGFsbG9jKSB7IFwKKwkJCWlmIChhbGxvY19ucihhbGxvYykgPCAobnIpKSBcCisJCQkJYWxsb2MgPSAobnIpOyBcCisJCQllbHNlIFwKKwkJCQlhbGxvYyA9IGFsbG9jX25yKGFsbG9jKTsgXAorCQkJUkVBTExPQ19BUlJBWSh4LCBhbGxvYyk7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworLyoKKyAqIFNpbWlsYXIgdG8gQUxMT0NfR1JPVyBidXQgaGFuZGxlcyB1cGRhdGluZyBvZiB0aGUgbnIgdmFsdWUgYW5kCisgKiB6ZXJvaW5nIHRoZSBieXRlcyBvZiB0aGUgbmV3bHktZ3Jvd24gYXJyYXkgZWxlbWVudHMuCisgKgorICogRE8gTk9UIFVTRSBhbnkgZXhwcmVzc2lvbiB3aXRoIHNpZGUtZWZmZWN0IGZvciBhbnkgb2YgdGhlCisgKiBhcmd1bWVudHMuCisgKi8KKyNkZWZpbmUgQUxMT0NfR1JPV19CWSh4LCBuciwgaW5jcmVhc2UsIGFsbG9jKSBcCisJZG8geyBcCisJCWlmIChpbmNyZWFzZSkgeyBcCisJCQlzaXplX3QgbmV3X25yID0gbnIgKyAoaW5jcmVhc2UpOyBcCisJCQlpZiAobmV3X25yIDwgbnIpIFwKKwkJCQlCVUcoIm5lZ2F0aXZlIGdyb3d0aCBpbiBBTExPQ19HUk9XX0JZIik7IFwKKwkJCUFMTE9DX0dST1coeCwgbmV3X25yLCBhbGxvYyk7IFwKKwkJCW1lbXNldCgoeCkgKyBuciwgMCwgc2l6ZW9mKCooeCkpICogKGluY3JlYXNlKSk7IFwKKwkJCW5yID0gbmV3X25yOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisKKy8qIEluaXRpYWxpemUgYW5kIHVzZSB0aGUgY2FjaGUgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCBsb2NrX2ZpbGU7Cit2b2lkIHByZWxvYWRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppbmRleCwKKwkJICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJICAgdW5zaWduZWQgaW50IHJlZnJlc2hfZmxhZ3MpOworaW50IGRvX3JlYWRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgaW50IG11c3RfZXhpc3QpOyAvKiBmb3IgdGVzdHRpbmcgb25seSEgKi8KK2ludCByZWFkX2luZGV4X2Zyb20oc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgICBjb25zdCBjaGFyICpnaXRkaXIpOworaW50IGlzX2luZGV4X3VuYm9ybihzdHJ1Y3QgaW5kZXhfc3RhdGUgKik7CisKKy8qIEZvciB1c2Ugd2l0aCBgd3JpdGVfbG9ja2VkX2luZGV4KClgLiAqLworI2RlZmluZSBDT01NSVRfTE9DSwkJKDEgPDwgMCkKKyNkZWZpbmUgU0tJUF9JRl9VTkNIQU5HRUQJKDEgPDwgMSkKKworLyoKKyAqIFdyaXRlIHRoZSBpbmRleCB3aGlsZSBob2xkaW5nIGFuIGFscmVhZHktdGFrZW4gbG9jay4gQ2xvc2UgdGhlIGxvY2ssCisgKiBhbmQgaWYgYENPTU1JVF9MT0NLYCBpcyBnaXZlbiwgY29tbWl0IGl0LgorICoKKyAqIFVubGVzcyBhIHNwbGl0IGluZGV4IGlzIGluIHVzZSwgd3JpdGUgdGhlIGluZGV4IGludG8gdGhlIGxvY2tmaWxlLgorICoKKyAqIFdpdGggYSBzcGxpdCBpbmRleCwgd3JpdGUgdGhlIHNoYXJlZCBpbmRleCB0byBhIHRlbXBvcmFyeSBmaWxlLAorICogYWRqdXN0IGl0cyBwZXJtaXNzaW9ucyBhbmQgcmVuYW1lIGl0IGludG8gcGxhY2UsIHRoZW4gd3JpdGUgdGhlCisgKiBzcGxpdCBpbmRleCB0byB0aGUgbG9ja2ZpbGUuIElmIHRoZSB0ZW1wb3JhcnkgZmlsZSBmb3IgdGhlIHNoYXJlZAorICogaW5kZXggY2Fubm90IGJlIGNyZWF0ZWQsIGZhbGwgYmFjayB0byB0aGUgYmVoYXZpb3IgZGVzY3JpYmVkIGluCisgKiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLgorICoKKyAqIFdpdGggYENPTU1JVF9MT0NLYCwgdGhlIGxvY2sgaXMgYWx3YXlzIGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay4KKyAqIFdpdGhvdXQgaXQsIHRoZSBsb2NrIGlzIGNsb3NlZCwgYnV0IG5laXRoZXIgY29tbWl0dGVkIG5vciByb2xsZWQKKyAqIGJhY2suCisgKgorICogSWYgYFNLSVBfSUZfVU5DSEFOR0VEYCBpcyBnaXZlbiBhbmQgdGhlIGluZGV4IGlzIHVuY2hhbmdlZCwgbm90aGluZworICogaXMgd3JpdHRlbiAoYW5kIHRoZSBsb2NrIGlzIHJvbGxlZCBiYWNrIGlmIGBDT01NSVRfTE9DS2AgaXMgZ2l2ZW4pLgorICovCitpbnQgd3JpdGVfbG9ja2VkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBzdHJ1Y3QgbG9ja19maWxlICpsb2NrLCB1bnNpZ25lZCBmbGFncyk7CisKK2ludCBkaXNjYXJkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKK3ZvaWQgbW92ZV9pbmRleF9leHRlbnNpb25zKHN0cnVjdCBpbmRleF9zdGF0ZSAqZHN0LCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKnNyYyk7CitpbnQgdW5tZXJnZWRfaW5kZXgoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICopOworCisvKioKKyAqIFJldHVybnMgMSBpZiBpc3RhdGUgZGlmZmVycyBmcm9tIHRyZWUsIDAgb3RoZXJ3aXNlLiAgSWYgdHJlZSBpcyBOVUxMLAorICogY29tcGFyZXMgaXN0YXRlIHRvIEhFQUQuICBJZiB0cmVlIGlzIE5VTEwgYW5kIG9uIGFuIHVuYm9ybiBicmFuY2gsCisgKiByZXR1cm5zIDEgaWYgdGhlcmUgYXJlIGVudHJpZXMgaW4gaXN0YXRlLCAwIG90aGVyd2lzZS4gIElmIGFuIHN0cmJ1ZiBpcworICogcHJvdmlkZWQsIHRoZSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcyB0aGF0IGRpZmZlciB3aWxsIGJlIGFwcGVuZGVkCisgKiB0byBpdC4KKyAqLworaW50IHJlcG9faW5kZXhfaGFzX2NoYW5nZXMoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICBzdHJ1Y3QgdHJlZSAqdHJlZSwKKwkJCSAgIHN0cnVjdCBzdHJidWYgKnNiKTsKKworaW50IHZlcmlmeV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIG1vZGUpOworaW50IHN0cmNtcF9vZmZzZXQoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgKmZpcnN0X2NoYW5nZSk7CitpbnQgaW5kZXhfZGlyX2V4aXN0cyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pOwordm9pZCBhZGp1c3RfZGlybmFtZV9jYXNlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjaGFyICpuYW1lKTsKK3N0cnVjdCBjYWNoZV9lbnRyeSAqaW5kZXhfZmlsZV9leGlzdHMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBpbnQgaWduY2FzZSk7CisKKy8qCisgKiBTZWFyY2hlcyBmb3IgYW4gZW50cnkgZGVmaW5lZCBieSBuYW1lIGFuZCBuYW1lbGVuIGluIHRoZSBnaXZlbiBpbmRleC4KKyAqIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgcG9zaXRpdmUgKGluY2x1ZGluZyAwKSBpdCBpcyB0aGUgcG9zaXRpb24gb2YgYW4KKyAqIGV4YWN0IG1hdGNoLiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIG5lZ2F0aXZlLCB0aGUgbmVnYXRlZCB2YWx1ZSBtaW51cyAxCisgKiBpcyB0aGUgcG9zaXRpb24gd2hlcmUgdGhlIGVudHJ5IHdvdWxkIGJlIGluc2VydGVkLgorICogRXhhbXBsZTogVGhlIGN1cnJlbnQgaW5kZXggY29uc2lzdHMgb2YgdGhlc2UgZmlsZXMgYW5kIGl0cyBzdGFnZXM6CisgKgorICogICBiIzAsIGQjMCwgZiMxLCBmIzMKKyAqCisgKiBpbmRleF9uYW1lX3BvcygmaW5kZXgsICJhIiwgMSkgLT4gLTEKKyAqIGluZGV4X25hbWVfcG9zKCZpbmRleCwgImIiLCAxKSAtPiAgMAorICogaW5kZXhfbmFtZV9wb3MoJmluZGV4LCAiYyIsIDEpIC0+IC0yCisgKiBpbmRleF9uYW1lX3BvcygmaW5kZXgsICJkIiwgMSkgLT4gIDEKKyAqIGluZGV4X25hbWVfcG9zKCZpbmRleCwgImUiLCAxKSAtPiAtMworICogaW5kZXhfbmFtZV9wb3MoJmluZGV4LCAiZiIsIDEpIC0+IC0zCisgKiBpbmRleF9uYW1lX3BvcygmaW5kZXgsICJnIiwgMSkgLT4gLTUKKyAqLworaW50IGluZGV4X25hbWVfcG9zKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbik7CisKKy8qCisgKiBTb21lIGZ1bmN0aW9ucyByZXR1cm4gdGhlIG5lZ2F0aXZlIGNvbXBsZW1lbnQgb2YgYW4gaW5zZXJ0IHBvc2l0aW9uIHdoZW4gYQorICogcHJlY2lzZSBtYXRjaCB3YXMgbm90IGZvdW5kIGJ1dCBhIHBvc2l0aW9uIHdhcyBmb3VuZCB3aGVyZSB0aGUgZW50cnkgd291bGQKKyAqIG5lZWQgdG8gYmUgaW5zZXJ0ZWQuIFRoaXMgaGVscGVyIHByb3RlY3RzIHRoYXQgbG9naWMgZnJvbSBhbnkgaW50ZWdlcgorICogdW5kZXJmbG93LgorICovCitzdGF0aWMgaW5saW5lIGludCBpbmRleF9wb3NfdG9faW5zZXJ0X3Bvcyh1aW50bWF4X3QgcG9zKQoreworCWlmIChwb3MgPiBJTlRfTUFYKQorCQlkaWUoIm92ZXJmbG93OiAtMSAtICUiUFJJdU1BWCwgcG9zKTsKKwlyZXR1cm4gLTEgLSAoaW50KXBvczsKK30KKworI2RlZmluZSBBRERfQ0FDSEVfT0tfVE9fQUREIDEJCS8qIE9rIHRvIGFkZCAqLworI2RlZmluZSBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSAyCS8qIE9rIHRvIHJlcGxhY2UgZmlsZS9kaXJlY3RvcnkgKi8KKyNkZWZpbmUgQUREX0NBQ0hFX1NLSVBfREZDSEVDSyA0CS8qIE9rIHRvIHNraXAgREYgY29uZmxpY3QgY2hlY2tzICovCisjZGVmaW5lIEFERF9DQUNIRV9KVVNUX0FQUEVORCA4CQkvKiBBcHBlbmQgb25seTsgdHJlZS5jOjpyZWFkX3RyZWUoKSAqLworI2RlZmluZSBBRERfQ0FDSEVfTkVXX09OTFkgMTYJCS8qIERvIG5vdCByZXBsYWNlIGV4aXN0aW5nIG9uZXMgKi8KKyNkZWZpbmUgQUREX0NBQ0hFX0tFRVBfQ0FDSEVfVFJFRSAzMgkvKiBEbyBub3QgaW52YWxpZGF0ZSBjYWNoZS10cmVlICovCisjZGVmaW5lIEFERF9DQUNIRV9SRU5PUk1BTElaRSA2NCAgICAgICAgLyogUGFzcyBhbG9uZyBIQVNIX1JFTk9STUFMSVpFICovCitpbnQgYWRkX2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgb3B0aW9uKTsKK3ZvaWQgcmVuYW1lX2luZGV4X2VudHJ5X2F0KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBpbnQgcG9zLCBjb25zdCBjaGFyICpuZXdfbmFtZSk7CisKKy8qIFJlbW92ZSBlbnRyeSwgcmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG1vcmUgZW50cmllcyB0byBnby4gKi8KK2ludCByZW1vdmVfaW5kZXhfZW50cnlfYXQoc3RydWN0IGluZGV4X3N0YXRlICosIGludCBwb3MpOworCit2b2lkIHJlbW92ZV9tYXJrZWRfY2FjaGVfZW50cmllcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgaW50IGludmFsaWRhdGUpOworaW50IHJlbW92ZV9maWxlX2Zyb21faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKnBhdGgpOworI2RlZmluZSBBRERfQ0FDSEVfVkVSQk9TRSAxCisjZGVmaW5lIEFERF9DQUNIRV9QUkVURU5EIDIKKyNkZWZpbmUgQUREX0NBQ0hFX0lHTk9SRV9FUlJPUlMJNAorI2RlZmluZSBBRERfQ0FDSEVfSUdOT1JFX1JFTU9WQUwgOAorI2RlZmluZSBBRERfQ0FDSEVfSU5URU5UIDE2CisvKgorICogVGhlc2UgdHdvIGFyZSB1c2VkIHRvIGFkZCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgcGF0aAorICogdG8gdGhlIGluZGV4LCBtYXJraW5nIHRoZSB3b3JraW5nIHRyZWUgdXAtdG8tZGF0ZSBieSBzdG9yaW5nCisgKiB0aGUgY2FjaGVkIHN0YXQgaW5mbyBpbiB0aGUgcmVzdWx0aW5nIGNhY2hlIGVudHJ5LiAgQSBjYWxsZXIKKyAqIHRoYXQgaGFzIGFscmVhZHkgcnVuIGxzdGF0KDIpIG9uIHRoZSBwYXRoIGNhbiBjYWxsCisgKiBhZGRfdG9faW5kZXgoKSwgYW5kIGFsbCBvdGhlcnMgY2FuIGNhbGwgYWRkX2ZpbGVfdG9faW5kZXgoKTsKKyAqIHRoZSBsYXR0ZXIgd2lsbCBkbyBuZWNlc3NhcnkgbHN0YXQoMikgaW50ZXJuYWxseSBiZWZvcmUKKyAqIGNhbGxpbmcgdGhlIGZvcm1lci4KKyAqLworaW50IGFkZF90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKiwgaW50IGZsYWdzKTsKK2ludCBhZGRfZmlsZV90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzKTsKKworaW50IGNobW9kX2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjaGFyIGZsaXApOworaW50IGNlX3NhbWVfbmFtZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmEsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqYik7Cit2b2lkIHNldF9vYmplY3RfbmFtZV9mb3JfaW50ZW50X3RvX2FkZF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKTsKK2ludCBpbmRleF9uYW1lX2lzX290aGVyKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICosIGludCk7Cit2b2lkICpyZWFkX2Jsb2JfZGF0YV9mcm9tX2luZGV4KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcgKik7CisKKy8qIGRvIHN0YXQgY29tcGFyaXNvbiBldmVuIGlmIENFX1ZBTElEIGlzIHRydWUgKi8KKyNkZWZpbmUgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElECQkwMQorLyogZG8gbm90IGNoZWNrIHRoZSBjb250ZW50cyBidXQgcmVwb3J0IGRpcnR5IG9uIHJhY2lseS1jbGVhbiBlbnRyaWVzICovCisjZGVmaW5lIENFX01BVENIX1JBQ1lfSVNfRElSVFkJCTAyCisvKiBkbyBzdGF0IGNvbXBhcmlzb24gZXZlbiBpZiBDRV9TS0lQX1dPUktUUkVFIGlzIHRydWUgKi8KKyNkZWZpbmUgQ0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUUJMDQKKy8qIGlnbm9yZSBub24tZXhpc3RlbnQgZmlsZXMgZHVyaW5nIHN0YXQgdXBkYXRlICAqLworI2RlZmluZSBDRV9NQVRDSF9JR05PUkVfTUlTU0lORwkJMHgwOAorLyogZW5hYmxlIHN0YXQgcmVmcmVzaCAqLworI2RlZmluZSBDRV9NQVRDSF9SRUZSRVNICQkweDEwCisvKiBkb24ndCByZWZyZXNoX2ZzbW9uaXRvciBzdGF0ZSBvciBkbyBzdGF0IGNvbXBhcmlzb24gZXZlbiBpZiBDRV9GU01PTklUT1JfVkFMSUQgaXMgdHJ1ZSAqLworI2RlZmluZSBDRV9NQVRDSF9JR05PUkVfRlNNT05JVE9SIDBYMjAKK2ludCBpc19yYWN5X3RpbWVzdGFtcChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSk7CitpbnQgaWVfbWF0Y2hfc3RhdChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICosIHN0cnVjdCBzdGF0ICosIHVuc2lnbmVkIGludCk7CitpbnQgaWVfbW9kaWZpZWQoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqLCBzdHJ1Y3Qgc3RhdCAqLCB1bnNpZ25lZCBpbnQpOworCisjZGVmaW5lIEhBU0hfV1JJVEVfT0JKRUNUIDEKKyNkZWZpbmUgSEFTSF9GT1JNQVRfQ0hFQ0sgMgorI2RlZmluZSBIQVNIX1JFTk9STUFMSVpFICA0CitpbnQgaW5kZXhfZmQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc3QsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgZmxhZ3MpOworaW50IGluZGV4X3BhdGgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKnN0LCB1bnNpZ25lZCBmbGFncyk7CisKKy8qCisgKiBSZWNvcmQgdG8gc2QgdGhlIGRhdGEgZnJvbSBzdCB0aGF0IHdlIHVzZSB0byBjaGVjayB3aGV0aGVyIGEgZmlsZQorICogbWlnaHQgaGF2ZSBjaGFuZ2VkLgorICovCit2b2lkIGZpbGxfc3RhdF9kYXRhKHN0cnVjdCBzdGF0X2RhdGEgKnNkLCBzdHJ1Y3Qgc3RhdCAqc3QpOworCisvKgorICogUmV0dXJuIDAgaWYgc3QgaXMgY29uc2lzdGVudCB3aXRoIGEgZmlsZSBub3QgaGF2aW5nIGJlZW4gY2hhbmdlZAorICogc2luY2Ugc2Qgd2FzIGZpbGxlZC4gIElmIHRoZXJlIGFyZSBkaWZmZXJlbmNlcywgcmV0dXJuIGEKKyAqIGNvbWJpbmF0aW9uIG9mIE1USU1FX0NIQU5HRUQsIENUSU1FX0NIQU5HRUQsIE9XTkVSX0NIQU5HRUQsCisgKiBJTk9ERV9DSEFOR0VELCBhbmQgREFUQV9DSEFOR0VELgorICovCitpbnQgbWF0Y2hfc3RhdF9kYXRhKGNvbnN0IHN0cnVjdCBzdGF0X2RhdGEgKnNkLCBzdHJ1Y3Qgc3RhdCAqc3QpOworaW50IG1hdGNoX3N0YXRfZGF0YV9yYWN5KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJIGNvbnN0IHN0cnVjdCBzdGF0X2RhdGEgKnNkLCBzdHJ1Y3Qgc3RhdCAqc3QpOworCit2b2lkIGZpbGxfc3RhdF9jYWNoZV9pbmZvKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpOworCisjZGVmaW5lIFJFRlJFU0hfUkVBTExZCQkweDAwMDEJLyogaWdub3JlX3ZhbGlkICovCisjZGVmaW5lIFJFRlJFU0hfVU5NRVJHRUQJMHgwMDAyCS8qIGFsbG93IHVubWVyZ2VkICovCisjZGVmaW5lIFJFRlJFU0hfUVVJRVQJCTB4MDAwNAkvKiBiZSBxdWlldCBhYm91dCBpdCAqLworI2RlZmluZSBSRUZSRVNIX0lHTk9SRV9NSVNTSU5HCTB4MDAwOAkvKiBpZ25vcmUgbm9uLWV4aXN0ZW50ICovCisjZGVmaW5lIFJFRlJFU0hfSUdOT1JFX1NVQk1PRFVMRVMJMHgwMDEwCS8qIGlnbm9yZSBzdWJtb2R1bGVzICovCisjZGVmaW5lIFJFRlJFU0hfSU5fUE9SQ0VMQUlOCTB4MDAyMAkvKiB1c2VyIGZyaWVuZGx5IG91dHB1dCwgbm90ICJuZWVkcyB1cGRhdGUiICovCisjZGVmaW5lIFJFRlJFU0hfUFJPR1JFU1MJMHgwMDQwICAvKiBzaG93IHByb2dyZXNzIGJhciBpZiBzdGRlcnIgaXMgdHR5ICovCitpbnQgcmVmcmVzaF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgdW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLCBjaGFyICpzZWVuLCBjb25zdCBjaGFyICpoZWFkZXJfbXNnKTsKKy8qCisgKiBSZWZyZXNoIHRoZSBpbmRleCBhbmQgd3JpdGUgaXQgdG8gZGlzay4KKyAqCisgKiAncmVmcmVzaF9mbGFncycgaXMgcGFzc2VkIGRpcmVjdGx5IHRvICdyZWZyZXNoX2luZGV4KCknLCB3aGlsZQorICogJ0NPTU1JVF9MT0NLIHwgd3JpdGVfZmxhZ3MnIGlzIHBhc3NlZCB0byAnd3JpdGVfbG9ja2VkX2luZGV4KCknLCBzbworICogdGhlIGxvY2tmaWxlIGlzIGFsd2F5cyBlaXRoZXIgY29tbWl0dGVkIG9yIHJvbGxlZCBiYWNrLgorICoKKyAqIElmICdnZW50bGUnIGlzIHBhc3NlZCwgZXJyb3JzIGxvY2tpbmcgdGhlIGluZGV4IGFyZSBpZ25vcmVkLgorICoKKyAqIFJldHVybiAxIGlmIHJlZnJlc2hpbmcgdGhlIGluZGV4IHJldHVybnMgYW4gZXJyb3IsIC0xIGlmIHdyaXRpbmcKKyAqIHRoZSBpbmRleCB0byBkaXNrIGZhaWxzLCAwIG9uIHN1Y2Nlc3MuCisgKgorICogTm90ZSB0aGF0IGlmIHJlZnJlc2hpbmcgdGhlIGluZGV4IHJldHVybnMgYW4gZXJyb3IsIHdlIHN0aWxsIHdyaXRlCisgKiBvdXQgdGhlIGluZGV4ICh1bmxlc3MgbG9ja2luZyBmYWlscykuCisgKi8KK2ludCByZXBvX3JlZnJlc2hfYW5kX3dyaXRlX2luZGV4KHN0cnVjdCByZXBvc2l0b3J5KiwgdW5zaWduZWQgaW50IHJlZnJlc2hfZmxhZ3MsIHVuc2lnbmVkIGludCB3cml0ZV9mbGFncywgaW50IGdlbnRsZSwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICosIGNoYXIgKnNlZW4sIGNvbnN0IGNoYXIgKmhlYWRlcl9tc2cpOworCitzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlZnJlc2hfY2FjaGVfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICosIHN0cnVjdCBjYWNoZV9lbnRyeSAqLCB1bnNpZ25lZCBpbnQpOworCit2b2lkIHNldF9hbHRlcm5hdGVfaW5kZXhfb3V0cHV0KGNvbnN0IGNoYXIgKik7CisKK2V4dGVybiBpbnQgdmVyaWZ5X2luZGV4X2NoZWNrc3VtOworZXh0ZXJuIGludCB2ZXJpZnlfY2Vfb3JkZXI7CisKKy8qIEVudmlyb25tZW50IGJpdHMgZnJvbSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbSAqLworZXh0ZXJuIGludCB0cnVzdF9leGVjdXRhYmxlX2JpdDsKK2V4dGVybiBpbnQgdHJ1c3RfY3RpbWU7CitleHRlcm4gaW50IGNoZWNrX3N0YXQ7CitleHRlcm4gaW50IHF1b3RlX3BhdGhfZnVsbHk7CitleHRlcm4gaW50IGhhc19zeW1saW5rczsKK2V4dGVybiBpbnQgbWluaW11bV9hYmJyZXYsIGRlZmF1bHRfYWJicmV2OworZXh0ZXJuIGludCBpZ25vcmVfY2FzZTsKK2V4dGVybiBpbnQgYXNzdW1lX3VuY2hhbmdlZDsKK2V4dGVybiBpbnQgcHJlZmVyX3N5bWxpbmtfcmVmczsKK2V4dGVybiBpbnQgd2Fybl9hbWJpZ3VvdXNfcmVmczsKK2V4dGVybiBpbnQgd2Fybl9vbl9vYmplY3RfcmVmbmFtZV9hbWJpZ3VpdHk7CitleHRlcm4gY29uc3QgY2hhciAqYXBwbHlfZGVmYXVsdF93aGl0ZXNwYWNlOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFwcGx5X2RlZmF1bHRfaWdub3Jld2hpdGVzcGFjZTsKK2V4dGVybiBjb25zdCBjaGFyICpnaXRfYXR0cmlidXRlc19maWxlOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9ob29rc19wYXRoOworZXh0ZXJuIGludCB6bGliX2NvbXByZXNzaW9uX2xldmVsOworZXh0ZXJuIGludCBjb3JlX2NvbXByZXNzaW9uX2xldmVsOworZXh0ZXJuIGludCBwYWNrX2NvbXByZXNzaW9uX2xldmVsOworZXh0ZXJuIHNpemVfdCBwYWNrZWRfZ2l0X3dpbmRvd19zaXplOworZXh0ZXJuIHNpemVfdCBwYWNrZWRfZ2l0X2xpbWl0OworZXh0ZXJuIHNpemVfdCBkZWx0YV9iYXNlX2NhY2hlX2xpbWl0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYmlnX2ZpbGVfdGhyZXNob2xkOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGFja19zaXplX2xpbWl0X2NmZzsKKworLyoKKyAqIEFjY2Vzc29ycyBmb3IgdGhlIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSBjb25maWcgd2hpY2ggbGF6eS1sb2FkIHRoZSB2YWx1ZQorICogZnJvbSB0aGUgY29uZmlnIChpZiBub3QgYWxyZWFkeSBzZXQpLiBUaGUgInJlc2V0IiBmdW5jdGlvbiBjYW4gYmUKKyAqIHVzZWQgdG8gdW5zZXQgInNldCIgb3IgY2FjaGVkIHZhbHVlLCBtZWFuaW5nIHRoYXQgdGhlIHZhbHVlIHdpbGwgYmUgbG9hZGVkCisgKiBmcmVzaCBmcm9tIHRoZSBjb25maWcgZmlsZSBvbiB0aGUgbmV4dCBjYWxsIHRvIGdldF9zaGFyZWRfcmVwb3NpdG9yeSgpLgorICovCit2b2lkIHNldF9zaGFyZWRfcmVwb3NpdG9yeShpbnQgdmFsdWUpOworaW50IGdldF9zaGFyZWRfcmVwb3NpdG9yeSh2b2lkKTsKK3ZvaWQgcmVzZXRfc2hhcmVkX3JlcG9zaXRvcnkodm9pZCk7CisKKy8qCisgKiBEbyByZXBsYWNlIHJlZnMgbmVlZCB0byBiZSBjaGVja2VkIHRoaXMgcnVuPyAgVGhpcyB2YXJpYWJsZSBpcworICogaW5pdGlhbGl6ZWQgdG8gdHJ1ZSB1bmxlc3MgLS1uby1yZXBsYWNlLW9iamVjdCBpcyB1c2VkIG9yCisgKiAkR0lUX05PX1JFUExBQ0VfT0JKRUNUUyBpcyBzZXQsIGJ1dCBpcyBzZXQgdG8gZmFsc2UgYnkgc29tZQorICogY29tbWFuZHMgdGhhdCBkbyBub3Qgd2FudCByZXBsYWNlIHJlZmVyZW5jZXMgdG8gYmUgYWN0aXZlLgorICovCitleHRlcm4gaW50IHJlYWRfcmVwbGFjZV9yZWZzOworZXh0ZXJuIGNoYXIgKmdpdF9yZXBsYWNlX3JlZl9iYXNlOworCitleHRlcm4gaW50IGZzeW5jX29iamVjdF9maWxlczsKK2V4dGVybiBpbnQgY29yZV9wcmVsb2FkX2luZGV4OworZXh0ZXJuIGludCBwcmVjb21wb3NlZF91bmljb2RlOworZXh0ZXJuIGludCBwcm90ZWN0X2hmczsKK2V4dGVybiBpbnQgcHJvdGVjdF9udGZzOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvcmVfZnNtb25pdG9yOworCitleHRlcm4gaW50IGNvcmVfYXBwbHlfc3BhcnNlX2NoZWNrb3V0OworZXh0ZXJuIGludCBjb3JlX3NwYXJzZV9jaGVja291dF9jb25lOworCisvKgorICogSW5jbHVkZSBicm9rZW4gcmVmcyBpbiBhbGwgcmVmIGl0ZXJhdGlvbnMsIHdoaWNoIHdpbGwKKyAqIGdlbmVyYWxseSBjaG9rZSBkYW5nZXJvdXMgb3BlcmF0aW9ucyByYXRoZXIgdGhhbiBsZXR0aW5nCisgKiB0aGVtIHNpbGVudGx5IHByb2NlZWQgd2l0aG91dCB0YWtpbmcgdGhlIGJyb2tlbiByZWYgaW50bworICogYWNjb3VudC4KKyAqLworZXh0ZXJuIGludCByZWZfcGFyYW5vaWE7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBib29sZWFuIHZhbHVlIG9mICRHSVRfT1BUSU9OQUxfTE9DS1MgKG9yIHRoZSBkZWZhdWx0IHZhbHVlKS4KKyAqLworaW50IHVzZV9vcHRpb25hbF9sb2Nrcyh2b2lkKTsKKworLyoKKyAqIFRoZSBjaGFyYWN0ZXIgdGhhdCBiZWdpbnMgYSBjb21tZW50ZWQgbGluZSBpbiB1c2VyLWVkaXRhYmxlIGZpbGUKKyAqIHRoYXQgaXMgc3ViamVjdCB0byBzdHJpcHNwYWNlLgorICovCitleHRlcm4gY2hhciBjb21tZW50X2xpbmVfY2hhcjsKK2V4dGVybiBpbnQgYXV0b19jb21tZW50X2xpbmVfY2hhcjsKKworZW51bSBsb2dfcmVmc19jb25maWcgeworCUxPR19SRUZTX1VOU0VUID0gLTEsCisJTE9HX1JFRlNfTk9ORSA9IDAsCisJTE9HX1JFRlNfTk9STUFMLAorCUxPR19SRUZTX0FMV0FZUworfTsKK2V4dGVybiBlbnVtIGxvZ19yZWZzX2NvbmZpZyBsb2dfYWxsX3JlZl91cGRhdGVzOworCitlbnVtIHJlYmFzZV9zZXR1cF90eXBlIHsKKwlBVVRPUkVCQVNFX05FVkVSID0gMCwKKwlBVVRPUkVCQVNFX0xPQ0FMLAorCUFVVE9SRUJBU0VfUkVNT1RFLAorCUFVVE9SRUJBU0VfQUxXQVlTCit9OworCitlbnVtIHB1c2hfZGVmYXVsdF90eXBlIHsKKwlQVVNIX0RFRkFVTFRfTk9USElORyA9IDAsCisJUFVTSF9ERUZBVUxUX01BVENISU5HLAorCVBVU0hfREVGQVVMVF9TSU1QTEUsCisJUFVTSF9ERUZBVUxUX1VQU1RSRUFNLAorCVBVU0hfREVGQVVMVF9DVVJSRU5ULAorCVBVU0hfREVGQVVMVF9VTlNQRUNJRklFRAorfTsKKworZXh0ZXJuIGVudW0gcmViYXNlX3NldHVwX3R5cGUgYXV0b3JlYmFzZTsKK2V4dGVybiBlbnVtIHB1c2hfZGVmYXVsdF90eXBlIHB1c2hfZGVmYXVsdDsKKworZW51bSBvYmplY3RfY3JlYXRpb25fbW9kZSB7CisJT0JKRUNUX0NSRUFUSU9OX1VTRVNfSEFSRExJTktTID0gMCwKKwlPQkpFQ1RfQ1JFQVRJT05fVVNFU19SRU5BTUVTID0gMQorfTsKKworZXh0ZXJuIGVudW0gb2JqZWN0X2NyZWF0aW9uX21vZGUgb2JqZWN0X2NyZWF0aW9uX21vZGU7CisKK2V4dGVybiBjaGFyICpub3Rlc19yZWZfbmFtZTsKKworZXh0ZXJuIGludCBncmFmdHNfcmVwbGFjZV9wYXJlbnRzOworCisvKgorICogR0lUX1JFUE9fVkVSU0lPTiBpcyB0aGUgdmVyc2lvbiB3ZSB3cml0ZSBieSBkZWZhdWx0LiBUaGUKKyAqIF9SRUFEIHZhcmlhbnQgaXMgdGhlIGhpZ2hlc3QgbnVtYmVyIHdlIGtub3cgaG93IHRvCisgKiBoYW5kbGUuCisgKi8KKyNkZWZpbmUgR0lUX1JFUE9fVkVSU0lPTiAwCisjZGVmaW5lIEdJVF9SRVBPX1ZFUlNJT05fUkVBRCAxCitleHRlcm4gaW50IHJlcG9zaXRvcnlfZm9ybWF0X3ByZWNpb3VzX29iamVjdHM7CitleHRlcm4gaW50IHJlcG9zaXRvcnlfZm9ybWF0X3dvcmt0cmVlX2NvbmZpZzsKKworLyoKKyAqIFlvdSBfaGF2ZV8gdG8gaW5pdGlhbGl6ZSBhIGBzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXRgIHVzaW5nCisgKiBgPSBSRVBPU0lUT1JZX0ZPUk1BVF9JTklUYCBiZWZvcmUgY2FsbGluZyBgcmVhZF9yZXBvc2l0b3J5X2Zvcm1hdCgpYC4KKyAqLworc3RydWN0IHJlcG9zaXRvcnlfZm9ybWF0IHsKKwlpbnQgdmVyc2lvbjsKKwlpbnQgcHJlY2lvdXNfb2JqZWN0czsKKwljaGFyICpwYXJ0aWFsX2Nsb25lOyAvKiB2YWx1ZSBvZiBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAqLworCWludCB3b3JrdHJlZV9jb25maWc7CisJaW50IGlzX2JhcmU7CisJaW50IGhhc2hfYWxnbzsKKwljaGFyICp3b3JrX3RyZWU7CisJc3RydWN0IHN0cmluZ19saXN0IHVua25vd25fZXh0ZW5zaW9uczsKK307CisKKy8qCisgKiBBbHdheXMgdXNlIHRoaXMgdG8gaW5pdGlhbGl6ZSBhIGBzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXRgCisgKiB0byBhIHdlbGwtZGVmaW5lZCwgZGVmYXVsdCBzdGF0ZSBiZWZvcmUgY2FsbGluZworICogYHJlYWRfcmVwb3NpdG9yeSgpYC4KKyAqLworI2RlZmluZSBSRVBPU0lUT1JZX0ZPUk1BVF9JTklUIFwKK3sgXAorCS52ZXJzaW9uID0gLTEsIFwKKwkuaXNfYmFyZSA9IC0xLCBcCisJLmhhc2hfYWxnbyA9IEdJVF9IQVNIX1NIQTEsIFwKKwkudW5rbm93bl9leHRlbnNpb25zID0gU1RSSU5HX0xJU1RfSU5JVF9EVVAsIFwKK30KKworLyoKKyAqIFJlYWQgdGhlIHJlcG9zaXRvcnkgZm9ybWF0IGNoYXJhY3RlcmlzdGljcyBmcm9tIHRoZSBjb25maWcgZmlsZSAicGF0aCIgaW50bworICogImZvcm1hdCIgc3RydWN0LiBSZXR1cm5zIHRoZSBudW1lcmljIHZlcnNpb24uIE9uIGVycm9yLCBvciBpZiBubyB2ZXJzaW9uIGlzCisgKiBmb3VuZCBpbiB0aGUgY29uZmlndXJhdGlvbiwgLTEgaXMgcmV0dXJuZWQsIGZvcm1hdC0+dmVyc2lvbiBpcyBzZXQgdG8gLTEsCisgKiBhbmQgYWxsIG90aGVyIGZpZWxkcyBpbiB0aGUgc3RydWN0IGFyZSBzZXQgdG8gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbgorICogKFJFUE9TSVRPUllfRk9STUFUX0lOSVQpLiBBbHdheXMgaW5pdGlhbGl6ZSB0aGUgc3RydWN0IHVzaW5nCisgKiBSRVBPU0lUT1JZX0ZPUk1BVF9JTklUIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK2ludCByZWFkX3JlcG9zaXRvcnlfZm9ybWF0KHN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCAqZm9ybWF0LCBjb25zdCBjaGFyICpwYXRoKTsKKworLyoKKyAqIEZyZWUgdGhlIG1lbW9yeSBoZWxkIG9udG8gYnkgYGZvcm1hdGAsIGJ1dCBub3QgdGhlIHN0cnVjdCBpdHNlbGYuCisgKiAoTm8gbmVlZCB0byB1c2UgdGhpcyBhZnRlciBgcmVhZF9yZXBvc2l0b3J5X2Zvcm1hdCgpYCBmYWlscy4pCisgKi8KK3ZvaWQgY2xlYXJfcmVwb3NpdG9yeV9mb3JtYXQoc3RydWN0IHJlcG9zaXRvcnlfZm9ybWF0ICpmb3JtYXQpOworCisvKgorICogVmVyaWZ5IHRoYXQgdGhlIHJlcG9zaXRvcnkgZGVzY3JpYmVkIGJ5IHJlcG9zaXRvcnlfZm9ybWF0IGlzIHNvbWV0aGluZyB3ZQorICogY2FuIHJlYWQuIElmIGl0IGlzLCByZXR1cm4gMC4gT3RoZXJ3aXNlLCByZXR1cm4gLTEsIGFuZCAiZXJyIiB3aWxsIGRlc2NyaWJlCisgKiBhbnkgZXJyb3JzIGVuY291bnRlcmVkLgorICovCitpbnQgdmVyaWZ5X3JlcG9zaXRvcnlfZm9ybWF0KGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCAqZm9ybWF0LAorCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKgorICogQ2hlY2sgdGhlIHJlcG9zaXRvcnkgZm9ybWF0IHZlcnNpb24gaW4gdGhlIHBhdGggZm91bmQgaW4gZ2V0X2dpdF9kaXIoKSwKKyAqIGFuZCBkaWUgaWYgaXQgaXMgYSB2ZXJzaW9uIHdlIGRvbid0IHVuZGVyc3RhbmQuIEdlbmVyYWxseSBvbmUgd291bGQKKyAqIHNldF9naXRfZGlyKCkgYmVmb3JlIGNhbGxpbmcgdGhpcywgYW5kIHVzZSBpdCBvbmx5IGZvciAiYXJlIHdlIGluIGEgdmFsaWQKKyAqIHJlcG8/Ii4KKyAqCisgKiBJZiBzdWNjZXNzZnVsIGFuZCBmbXQgaXMgbm90IE5VTEwsIGZpbGwgZm10IHdpdGggZGF0YS4KKyAqLwordm9pZCBjaGVja19yZXBvc2l0b3J5X2Zvcm1hdChzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgKmZtdCk7CisKKyNkZWZpbmUgTVRJTUVfQ0hBTkdFRAkweDAwMDEKKyNkZWZpbmUgQ1RJTUVfQ0hBTkdFRAkweDAwMDIKKyNkZWZpbmUgT1dORVJfQ0hBTkdFRAkweDAwMDQKKyNkZWZpbmUgTU9ERV9DSEFOR0VEICAgIDB4MDAwOAorI2RlZmluZSBJTk9ERV9DSEFOR0VEICAgMHgwMDEwCisjZGVmaW5lIERBVEFfQ0hBTkdFRCAgICAweDAwMjAKKyNkZWZpbmUgVFlQRV9DSEFOR0VEICAgIDB4MDA0MAorCisvKgorICogUmV0dXJuIGFuIGFiYnJldmlhdGVkIHNoYTEgdW5pcXVlIHdpdGhpbiB0aGlzIHJlcG9zaXRvcnkncyBvYmplY3QgZGF0YWJhc2UuCisgKiBUaGUgcmVzdWx0IHdpbGwgYmUgYXQgbGVhc3QgYGxlbmAgY2hhcmFjdGVycyBsb25nLCBhbmQgd2lsbCBiZSBOVUwKKyAqIHRlcm1pbmF0ZWQuCisgKgorICogVGhlIG5vbi1gX3JgIHZlcnNpb24gcmV0dXJucyBhIHN0YXRpYyBidWZmZXIgd2hpY2ggcmVtYWlucyB2YWxpZCB1bnRpbCA0CisgKiBtb3JlIGNhbGxzIHRvIGZpbmRfdW5pcXVlX2FiYnJldiBhcmUgbWFkZS4KKyAqCisgKiBUaGUgYF9yYCB2YXJpYW50IHdyaXRlcyB0byBhIGJ1ZmZlciBzdXBwbGllZCBieSB0aGUgY2FsbGVyLCB3aGljaCBtdXN0IGJlIGF0CisgKiBsZWFzdCBgR0lUX01BWF9IRVhTWiArIDFgIGJ5dGVzLiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAqIHdyaXR0ZW4gKGV4Y2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3IpLgorICoKKyAqIE5vdGUgdGhhdCB3aGlsZSB0aGlzIHZlcnNpb24gYXZvaWRzIHRoZSBzdGF0aWMgYnVmZmVyLCBpdCBpcyBub3QgZnVsbHkKKyAqIHJlZW50cmFudCwgYXMgaXQgY2FsbHMgaW50byBvdGhlciBub24tcmVlbnRyYW50IGdpdCBjb2RlLgorICovCitjb25zdCBjaGFyICpyZXBvX2ZpbmRfdW5pcXVlX2FiYnJldihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgbGVuKTsKKyNkZWZpbmUgZmluZF91bmlxdWVfYWJicmV2KG9pZCwgbGVuKSByZXBvX2ZpbmRfdW5pcXVlX2FiYnJldih0aGVfcmVwb3NpdG9yeSwgb2lkLCBsZW4pCitpbnQgcmVwb19maW5kX3VuaXF1ZV9hYmJyZXZfcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY2hhciAqaGV4LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBsZW4pOworI2RlZmluZSBmaW5kX3VuaXF1ZV9hYmJyZXZfcihoZXgsIG9pZCwgbGVuKSByZXBvX2ZpbmRfdW5pcXVlX2FiYnJldl9yKHRoZV9yZXBvc2l0b3J5LCBoZXgsIG9pZCwgbGVuKQorCitleHRlcm4gY29uc3Qgc3RydWN0IG9iamVjdF9pZCBudWxsX29pZDsKKworc3RhdGljIGlubGluZSBpbnQgaGFzaGNtcChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGEyKQoreworCS8qCisJICogVGVhY2ggdGhlIGNvbXBpbGVyIHRoYXQgdGhlcmUgYXJlIG9ubHkgdHdvIHBvc3NpYmlsaXRpZXMgb2YgaGFzaCBzaXplCisJICogaGVyZSwgc28gdGhhdCBpdCBjYW4gb3B0aW1pemUgZm9yIHRoaXMgY2FzZSBhcyBtdWNoIGFzIHBvc3NpYmxlLgorCSAqLworCWlmICh0aGVfaGFzaF9hbGdvLT5yYXdzeiA9PSBHSVRfTUFYX1JBV1NaKQorCQlyZXR1cm4gbWVtY21wKHNoYTEsIHNoYTIsIEdJVF9NQVhfUkFXU1opOworCXJldHVybiBtZW1jbXAoc2hhMSwgc2hhMiwgR0lUX1NIQTFfUkFXU1opOworfQorCitzdGF0aWMgaW5saW5lIGludCBvaWRjbXAoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkMSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkMikKK3sKKwlyZXR1cm4gaGFzaGNtcChvaWQxLT5oYXNoLCBvaWQyLT5oYXNoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaGFzaGVxKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTIpCit7CisJLyoKKwkgKiBXZSB3cml0ZSB0aGlzIGhlcmUgaW5zdGVhZCBvZiBkZWZlcnJpbmcgdG8gaGFzaGNtcCBzbyB0aGF0IHRoZQorCSAqIGNvbXBpbGVyIGNhbiBwcm9wZXJseSBpbmxpbmUgaXQgYW5kIGF2b2lkIGNhbGxpbmcgbWVtY21wLgorCSAqLworCWlmICh0aGVfaGFzaF9hbGdvLT5yYXdzeiA9PSBHSVRfTUFYX1JBV1NaKQorCQlyZXR1cm4gIW1lbWNtcChzaGExLCBzaGEyLCBHSVRfTUFYX1JBV1NaKTsKKwlyZXR1cm4gIW1lbWNtcChzaGExLCBzaGEyLCBHSVRfU0hBMV9SQVdTWik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9pZGVxKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDEsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDIpCit7CisJcmV0dXJuIGhhc2hlcShvaWQxLT5oYXNoLCBvaWQyLT5oYXNoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfbnVsbF9vaWQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXJldHVybiBvaWRlcShvaWQsICZudWxsX29pZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYXNoY3B5KHVuc2lnbmVkIGNoYXIgKnNoYV9kc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYV9zcmMpCit7CisJbWVtY3B5KHNoYV9kc3QsIHNoYV9zcmMsIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9pZGNweShzdHJ1Y3Qgb2JqZWN0X2lkICpkc3QsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnNyYykKK3sKKwltZW1jcHkoZHN0LT5oYXNoLCBzcmMtPmhhc2gsIEdJVF9NQVhfUkFXU1opOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmplY3RfaWQgKm9pZGR1cChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpzcmMpCit7CisJc3RydWN0IG9iamVjdF9pZCAqZHN0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IG9iamVjdF9pZCkpOworCW9pZGNweShkc3QsIHNyYyk7CisJcmV0dXJuIGRzdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhhc2hjbHIodW5zaWduZWQgY2hhciAqaGFzaCkKK3sKKwltZW1zZXQoaGFzaCwgMCwgdGhlX2hhc2hfYWxnby0+cmF3c3opOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2lkY2xyKHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwltZW1zZXQob2lkLT5oYXNoLCAwLCBHSVRfTUFYX1JBV1NaKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9pZHJlYWQoc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoKQoreworCW1lbWNweShvaWQtPmhhc2gsIGhhc2gsIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfZW1wdHlfYmxvYl9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJcmV0dXJuIGhhc2hlcShzaGExLCB0aGVfaGFzaF9hbGdvLT5lbXB0eV9ibG9iLT5oYXNoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfZW1wdHlfYmxvYl9vaWQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXJldHVybiBvaWRlcShvaWQsIHRoZV9oYXNoX2FsZ28tPmVtcHR5X2Jsb2IpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19lbXB0eV90cmVlX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gaGFzaGVxKHNoYTEsIHRoZV9oYXNoX2FsZ28tPmVtcHR5X3RyZWUtPmhhc2gpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19lbXB0eV90cmVlX29pZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJcmV0dXJuIG9pZGVxKG9pZCwgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSk7Cit9CisKK2NvbnN0IGNoYXIgKmVtcHR5X3RyZWVfb2lkX2hleCh2b2lkKTsKK2NvbnN0IGNoYXIgKmVtcHR5X2Jsb2Jfb2lkX2hleCh2b2lkKTsKKworLyogc2V0IGRlZmF1bHQgcGVybWlzc2lvbnMgYnkgcGFzc2luZyBtb2RlIGFyZ3VtZW50cyB0byBvcGVuKDIpICovCitpbnQgZ2l0X21rc3RlbXBzX21vZGUoY2hhciAqcGF0dGVybiwgaW50IHN1ZmZpeF9sZW4sIGludCBtb2RlKTsKK2ludCBnaXRfbWtzdGVtcF9tb2RlKGNoYXIgKnBhdHRlcm4sIGludCBtb2RlKTsKKworLyoKKyAqIE5PVEUgTk9URSBOT1RFISEKKyAqCisgKiBQRVJNX1VNQVNLLCBPTERfUEVSTV9HUk9VUCBhbmQgT0xEX1BFUk1fRVZFUllCT0RZIGVudW1lcmF0aW9ucyBtdXN0CisgKiBub3QgYmUgY2hhbmdlZC4gT2xkIHJlcG9zaXRvcmllcyBoYXZlIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSB3cml0dGVuIGluCisgKiBudW1lcmljIGZvcm1hdCwgYW5kIHRoZXJlZm9yZSB0aGVzZSB2YWx1ZXMgYXJlIHByZXNlcnZlZCBmb3IgY29tcGF0aWJpbGl0eQorICogcmVhc29ucy4KKyAqLworZW51bSBzaGFyZWRyZXBvIHsKKwlQRVJNX1VNQVNLICAgICAgICAgID0gMCwKKwlPTERfUEVSTV9HUk9VUCAgICAgID0gMSwKKwlPTERfUEVSTV9FVkVSWUJPRFkgID0gMiwKKwlQRVJNX0dST1VQICAgICAgICAgID0gMDY2MCwKKwlQRVJNX0VWRVJZQk9EWSAgICAgID0gMDY2NAorfTsKK2ludCBnaXRfY29uZmlnX3Blcm0oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSk7CitpbnQgYWRqdXN0X3NoYXJlZF9wZXJtKGNvbnN0IGNoYXIgKnBhdGgpOworCisvKgorICogQ3JlYXRlIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgbmFtZWQgcGF0aCwgdXNpbmcgY2FyZSB0byBiZQorICogc29tZXdoYXQgc2FmZSBhZ2FpbnN0IHJhY2VzLiBSZXR1cm4gb25lIG9mIHRoZSBzY2xkX2Vycm9yIHZhbHVlcyB0bworICogaW5kaWNhdGUgc3VjY2Vzcy9mYWlsdXJlLiBPbiBlcnJvciwgc2V0IGVycm5vIHRvIGRlc2NyaWJlIHRoZQorICogcHJvYmxlbS4KKyAqCisgKiBTQ0xEX1ZBTklTSEVEIGluZGljYXRlcyB0aGF0IG9uZSBvZiB0aGUgYW5jZXN0b3IgZGlyZWN0b3JpZXMgb2YgdGhlCisgKiBwYXRoIGV4aXN0ZWQgYXQgb25lIHBvaW50IGR1cmluZyB0aGUgZnVuY3Rpb24gY2FsbCBhbmQgdGhlbgorICogc3VkZGVubHkgdmFuaXNoZWQsIHByb2JhYmx5IGJlY2F1c2UgYW5vdGhlciBwcm9jZXNzIHBydW5lZCB0aGUKKyAqIGRpcmVjdG9yeSB3aGlsZSB3ZSB3ZXJlIHdvcmtpbmcuICBUbyBiZSByb2J1c3QgYWdhaW5zdCB0aGlzIGtpbmQgb2YKKyAqIHJhY2UsIGNhbGxlcnMgbWlnaHQgd2FudCB0byB0cnkgaW52b2tpbmcgdGhlIGZ1bmN0aW9uIGFnYWluIHdoZW4gaXQKKyAqIHJldHVybnMgU0NMRF9WQU5JU0hFRC4KKyAqCisgKiBzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKCkgdGVtcG9yYXJpbHkgY2hhbmdlcyBwYXRoIHdoaWxlIGl0CisgKiBpcyB3b3JraW5nIGJ1dCByZXN0b3JlcyBpdCBiZWZvcmUgcmV0dXJuaW5nLgorICogc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdCgpIGRvZXNuJ3QgbW9kaWZ5IHBhdGgsIGV2ZW4KKyAqIHRlbXBvcmFyaWx5LgorICovCitlbnVtIHNjbGRfZXJyb3IgeworCVNDTERfT0sgPSAwLAorCVNDTERfRkFJTEVEID0gLTEsCisJU0NMRF9QRVJNUyA9IC0yLAorCVNDTERfRVhJU1RTID0gLTMsCisJU0NMRF9WQU5JU0hFRCA9IC00Cit9OworZW51bSBzY2xkX2Vycm9yIHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMoY2hhciAqcGF0aCk7CitlbnVtIHNjbGRfZXJyb3Igc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChjb25zdCBjaGFyICpwYXRoKTsKKworLyoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciByYWNlcHJvb2ZfY3JlYXRlX2ZpbGUoKS4gVGhpcyBmdW5jdGlvbiBpcworICogZXhwZWN0ZWQgdG8gZG8gc29tZXRoaW5nIHRoYXQgbWFrZXMgZGlybmFtZShwYXRoKSBwZXJtYW5lbnQgZGVzcGl0ZQorICogdGhlIGZhY3QgdGhhdCBvdGhlciBwcm9jZXNzZXMgbWlnaHQgYmUgY2xlYW5pbmcgdXAgZW1wdHkKKyAqIGRpcmVjdG9yaWVzIGF0IHRoZSBzYW1lIHRpbWUuIFVzdWFsbHkgaXQgd2lsbCBjcmVhdGUgYSBmaWxlIG5hbWVkCisgKiBwYXRoLCBidXQgYWx0ZXJuYXRpdmVseSBpdCBjb3VsZCBjcmVhdGUgYW5vdGhlciBmaWxlIGluIHRoYXQKKyAqIGRpcmVjdG9yeSwgb3IgZXZlbiBjaGRpcigpIGludG8gdGhhdCBkaXJlY3RvcnkuIFRoZSBmdW5jdGlvbiBzaG91bGQKKyAqIHJldHVybiAwIGlmIHRoZSBhY3Rpb24gd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIE9uIGVycm9yLCBpdAorICogc2hvdWxkIHJldHVybiBhIG5vbnplcm8gcmVzdWx0IGFuZCBzZXQgZXJybm8uCisgKiByYWNlcHJvb2ZfY3JlYXRlX2ZpbGUoKSB0cmVhdHMgdHdvIGVycm5vIHZhbHVlcyBzcGVjaWFsbHk6CisgKgorICogLSBFTk9FTlQgLS0gZGlybmFtZShwYXRoKSBkb2VzIG5vdCBleGlzdC4gSW4gdGhpcyBjYXNlLAorICogICAgICAgICAgICAgcmFjZXByb29mX2NyZWF0ZV9maWxlKCkgdHJpZXMgY3JlYXRpbmcgZGlybmFtZShwYXRoKQorICogICAgICAgICAgICAgKGFuZCBhbnkgcGFyZW50IGRpcmVjdG9yaWVzLCBpZiBuZWNlc3NhcnkpIGFuZCBjYWxscworICogICAgICAgICAgICAgdGhlIGZ1bmN0aW9uIGFnYWluLgorICoKKyAqIC0gRUlTRElSIC0tIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBhIGRpcmVjdG9yeS4gSW4gdGhpcworICogICAgICAgICAgICAgY2FzZSwgcmFjZXByb29mX2NyZWF0ZV9maWxlKCkgcmVtb3ZlcyB0aGUgZGlyZWN0b3J5IGlmCisgKiAgICAgICAgICAgICBpdCBpcyBlbXB0eSAoYW5kIHJlY3Vyc2l2ZWx5IGFueSBlbXB0eSBkaXJlY3RvcmllcyB0aGF0CisgKiAgICAgICAgICAgICBpdCBjb250YWlucykgYW5kIGNhbGxzIHRoZSBmdW5jdGlvbiBhZ2Fpbi4KKyAqCisgKiBBbnkgb3RoZXIgZXJybm8gY2F1c2VzIHJhY2Vwcm9vZl9jcmVhdGVfZmlsZSgpIHRvIGZhaWwgd2l0aCB0aGUKKyAqIGNhbGxiYWNrJ3MgcmV0dXJuIHZhbHVlIGFuZCBlcnJuby4KKyAqCisgKiBPYnZpb3VzbHksIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIE9LIHdpdGggYmVpbmcgY2FsbGVkIGFnYWluIGlmIGl0CisgKiBmYWlscyB3aXRoIEVOT0VOVCBvciBFSVNESVIuIEluIG90aGVyIHNjZW5hcmlvcyBpdCB3aWxsIG5vdCBiZQorICogY2FsbGVkIGFnYWluLgorICovCit0eXBlZGVmIGludCBjcmVhdGVfZmlsZV9mbihjb25zdCBjaGFyICpwYXRoLCB2b2lkICpjYik7CisKKy8qCisgKiBDcmVhdGUgYSBmaWxlIGluIGRpcm5hbWUocGF0aCkgYnkgY2FsbGluZyBmbiwgY3JlYXRpbmcgbGVhZGluZworICogZGlyZWN0b3JpZXMgaWYgbmVjZXNzYXJ5LiBSZXRyeSBhIGZldyB0aW1lcyBpbiBjYXNlIHdlIGFyZSByYWNpbmcKKyAqIHdpdGggYW5vdGhlciBwcm9jZXNzIHRoYXQgaXMgdHJ5aW5nIHRvIGNsZWFuIHVwIHRoZSBkaXJlY3RvcnkgdGhhdAorICogY29udGFpbnMgcGF0aC4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBjcmVhdGVfZmlsZV9mbiBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBSZXR1cm4gdGhlIHZhbHVlIGFuZCBzZXQgdGhlIGVycm5vIHRoYXQgcmVzdWx0ZWQgZnJvbSB0aGUgbW9zdAorICogcmVjZW50IGNhbGwgb2YgZm4uIGZuIGlzIGFsd2F5cyBjYWxsZWQgYXQgbGVhc3Qgb25jZSwgYW5kIHdpbGwgYmUKKyAqIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBpZiBpdCByZXR1cm5zIEVOT0VOVCBvciBFSVNESVIuCisgKi8KK2ludCByYWNlcHJvb2ZfY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY3JlYXRlX2ZpbGVfZm4gZm4sIHZvaWQgKmNiKTsKKworaW50IG1rZGlyX2luX2dpdGRpcihjb25zdCBjaGFyICpwYXRoKTsKK2NoYXIgKmV4cGFuZF91c2VyX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgaW50IHJlYWxfaG9tZSk7Citjb25zdCBjaGFyICplbnRlcl9yZXBvKGNvbnN0IGNoYXIgKnBhdGgsIGludCBzdHJpY3QpOworc3RhdGljIGlubGluZSBpbnQgaXNfYWJzb2x1dGVfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCXJldHVybiBpc19kaXJfc2VwKHBhdGhbMF0pIHx8IGhhc19kb3NfZHJpdmVfcHJlZml4KHBhdGgpOworfQoraW50IGlzX2RpcmVjdG9yeShjb25zdCBjaGFyICopOworY2hhciAqc3RyYnVmX3JlYWxwYXRoKHN0cnVjdCBzdHJidWYgKnJlc29sdmVkLCBjb25zdCBjaGFyICpwYXRoLAorCQkgICAgICBpbnQgZGllX29uX2Vycm9yKTsKK2NoYXIgKnJlYWxfcGF0aGR1cChjb25zdCBjaGFyICpwYXRoLCBpbnQgZGllX29uX2Vycm9yKTsKK2NvbnN0IGNoYXIgKmFic29sdXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CitjaGFyICphYnNvbHV0ZV9wYXRoZHVwKGNvbnN0IGNoYXIgKnBhdGgpOworY29uc3QgY2hhciAqcmVtb3ZlX2xlYWRpbmdfcGF0aChjb25zdCBjaGFyICppbiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2NvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgoY29uc3QgY2hhciAqaW4sIGNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHN0cmJ1ZiAqc2IpOworaW50IG5vcm1hbGl6ZV9wYXRoX2NvcHlfbGVuKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgKnByZWZpeF9sZW4pOworaW50IG5vcm1hbGl6ZV9wYXRoX2NvcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpOworaW50IGxvbmdlc3RfYW5jZXN0b3JfbGVuZ3RoKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdHJpbmdfbGlzdCAqcHJlZml4ZXMpOworY2hhciAqc3RyaXBfcGF0aF9zdWZmaXgoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3VmZml4KTsKK2ludCBkYWVtb25fYXZvaWRfYWxpYXMoY29uc3QgY2hhciAqcGF0aCk7CisKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgbWF0Y2ggdGhlaXIgaXNfaGZzX2RvdGdpdCgpIGNvdW50ZXJwYXJ0czsgc2VlIHV0ZjguaCBmb3IKKyAqIGRldGFpbHMuCisgKi8KK2ludCBpc19udGZzX2RvdGdpdChjb25zdCBjaGFyICpuYW1lKTsKK2ludCBpc19udGZzX2RvdGdpdG1vZHVsZXMoY29uc3QgY2hhciAqbmFtZSk7CitpbnQgaXNfbnRmc19kb3RnaXRpZ25vcmUoY29uc3QgY2hhciAqbmFtZSk7CitpbnQgaXNfbnRmc19kb3RnaXRhdHRyaWJ1dGVzKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKgorICogUmV0dXJucyB0cnVlIGlmZiAic3RyIiBjb3VsZCBiZSBjb25mdXNlZCBhcyBhIGNvbW1hbmQtbGluZSBvcHRpb24gd2hlbgorICogcGFzc2VkIHRvIGEgc3ViLXByb2dyYW0gbGlrZSAic3NoIi4gTm90ZSB0aGF0IHRoaXMgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aAorICogc2hlbGwtcXVvdGluZywgd2hpY2ggc2hvdWxkIGJlIGhhbmRsZWQgc2VwYXJhdGVseTsgd2UncmUgYXNzdW1pbmcgaGVyZSB0aGF0CisgKiB0aGUgc3RyaW5nIG1ha2VzIGl0IHZlcmJhdGltIHRvIHRoZSBzdWItcHJvZ3JhbS4KKyAqLworaW50IGxvb2tzX2xpa2VfY29tbWFuZF9saW5lX29wdGlvbihjb25zdCBjaGFyICpzdHIpOworCisvKioKKyAqIFJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZgorICogIiRYREdfQ09ORklHX0hPTUUvZ2l0LyRmaWxlbmFtZSIgaWYgJFhER19DT05GSUdfSE9NRSBpcyBub24tZW1wdHksIG90aGVyd2lzZQorICogIiRIT01FLy5jb25maWcvZ2l0LyRmaWxlbmFtZSIuIFJldHVybiBOVUxMIHVwb24gZXJyb3IuCisgKi8KK2NoYXIgKnhkZ19jb25maWdfaG9tZShjb25zdCBjaGFyICpmaWxlbmFtZSk7CisKKy8qKgorICogUmV0dXJuIGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyB3aXRoIHRoZSBldmFsdWF0aW9uIG9mCisgKiAiJFhER19DQUNIRV9IT01FL2dpdC8kZmlsZW5hbWUiIGlmICRYREdfQ0FDSEVfSE9NRSBpcyBub24tZW1wdHksIG90aGVyd2lzZQorICogIiRIT01FLy5jYWNoZS9naXQvJGZpbGVuYW1lIi4gUmV0dXJuIE5VTEwgdXBvbiBlcnJvci4KKyAqLworY2hhciAqeGRnX2NhY2hlX2hvbWUoY29uc3QgY2hhciAqZmlsZW5hbWUpOworCitpbnQgZ2l0X29wZW5fY2xvZXhlYyhjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpOworI2RlZmluZSBnaXRfb3BlbihuYW1lKSBnaXRfb3Blbl9jbG9leGVjKG5hbWUsIE9fUkRPTkxZKQoraW50IHVucGFja19sb29zZV9oZWFkZXIoZ2l0X3pzdHJlYW0gKnN0cmVhbSwgdW5zaWduZWQgY2hhciAqbWFwLCB1bnNpZ25lZCBsb25nIG1hcHNpemUsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBidWZzaXopOworaW50IHBhcnNlX2xvb3NlX2hlYWRlcihjb25zdCBjaGFyICpoZHIsIHVuc2lnbmVkIGxvbmcgKnNpemVwKTsKKworaW50IGNoZWNrX29iamVjdF9zaWduYXR1cmUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICp0eXBlKTsKKworaW50IGZpbmFsaXplX29iamVjdF9maWxlKGNvbnN0IGNoYXIgKnRtcGZpbGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKworLyogSGVscGVyIHRvIGNoZWNrIGFuZCAidG91Y2giIGEgZmlsZSAqLworaW50IGNoZWNrX2FuZF9mcmVzaGVuX2ZpbGUoY29uc3QgY2hhciAqZm4sIGludCBmcmVzaGVuKTsKKworZXh0ZXJuIGNvbnN0IHNpZ25lZCBjaGFyIGhleHZhbF90YWJsZVsyNTZdOworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaGV4dmFsKHVuc2lnbmVkIGNoYXIgYykKK3sKKwlyZXR1cm4gaGV4dmFsX3RhYmxlW2NdOworfQorCisvKgorICogQ29udmVydCB0d28gY29uc2VjdXRpdmUgaGV4YWRlY2ltYWwgZGlnaXRzIGludG8gYSBjaGFyLiAgUmV0dXJuIGEKKyAqIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLiAgRG9uJ3QgcnVuIG92ZXIgdGhlIGVuZCBvZiBzaG9ydCBzdHJpbmdzLgorICovCitzdGF0aWMgaW5saW5lIGludCBoZXgyY2hyKGNvbnN0IGNoYXIgKnMpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IGhleHZhbChzWzBdKTsKKwlyZXR1cm4gKHZhbCAmIH4weGYpID8gdmFsIDogKHZhbCA8PCA0KSB8IGhleHZhbChzWzFdKTsKK30KKworLyogQ29udmVydCB0by9mcm9tIGhleC9zaGExIHJlcHJlc2VudGF0aW9uICovCisjZGVmaW5lIE1JTklNVU1fQUJCUkVWIG1pbmltdW1fYWJicmV2CisjZGVmaW5lIERFRkFVTFRfQUJCUkVWIGRlZmF1bHRfYWJicmV2CisKKy8qIHVzZWQgd2hlbiB0aGUgY29kZSBkb2VzIG5vdCBrbm93IG9yIGNhcmUgd2hhdCB0aGUgZGVmYXVsdCBhYmJyZXYgaXMgKi8KKyNkZWZpbmUgRkFMTEJBQ0tfREVGQVVMVF9BQkJSRVYgNworCitzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgeworCXVuc2lnbmVkIHNob3J0IG1vZGU7CisJLyoKKwkgKiBzeW1saW5rX3BhdGggaXMgb25seSB1c2VkIGJ5IGdldF90cmVlX2VudHJ5X2ZvbGxvd19zeW1saW5rcywKKwkgKiBhbmQgb25seSBmb3Igc3ltbGlua3MgdGhhdCBwb2ludCBvdXRzaWRlIHRoZSByZXBvc2l0b3J5LgorCSAqLworCXN0cnVjdCBzdHJidWYgc3ltbGlua19wYXRoOworCS8qCisJICogSWYgR0VUX09JRF9SRUNPUkRfUEFUSCBpcyBzZXQsIHRoaXMgd2lsbCByZWNvcmQgcGF0aCAoaWYgYW55KQorCSAqIGZvdW5kIHdoZW4gcmVzb2x2aW5nIHRoZSBuYW1lLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorCSAqIHJlbGVhc2luZyB0aGUgbWVtb3J5LgorCSAqLworCWNoYXIgKnBhdGg7Cit9OworCisjZGVmaW5lIEdFVF9PSURfUVVJRVRMWSAgICAgICAgICAgMDEKKyNkZWZpbmUgR0VUX09JRF9DT01NSVQgICAgICAgICAgICAwMgorI2RlZmluZSBHRVRfT0lEX0NPTU1JVFRJU0ggICAgICAgIDA0CisjZGVmaW5lIEdFVF9PSURfVFJFRSAgICAgICAgICAgICAwMTAKKyNkZWZpbmUgR0VUX09JRF9UUkVFSVNIICAgICAgICAgIDAyMAorI2RlZmluZSBHRVRfT0lEX0JMT0IgICAgICAgICAgICAgMDQwCisjZGVmaW5lIEdFVF9PSURfRk9MTE9XX1NZTUxJTktTIDAxMDAKKyNkZWZpbmUgR0VUX09JRF9SRUNPUkRfUEFUSCAgICAgMDIwMAorI2RlZmluZSBHRVRfT0lEX09OTFlfVE9fRElFICAgIDA0MDAwCisKKyNkZWZpbmUgR0VUX09JRF9ESVNBTUJJR1VBVE9SUyBcCisJKEdFVF9PSURfQ09NTUlUIHwgR0VUX09JRF9DT01NSVRUSVNIIHwgXAorCUdFVF9PSURfVFJFRSB8IEdFVF9PSURfVFJFRUlTSCB8IFwKKwlHRVRfT0lEX0JMT0IpCisKK2VudW0gZ2V0X29pZF9yZXN1bHQgeworCUZPVU5EID0gMCwKKwlNSVNTSU5HX09CSkVDVCA9IC0xLCAvKiBUaGUgcmVxdWVzdGVkIG9iamVjdCBpcyBtaXNzaW5nICovCisJU0hPUlRfTkFNRV9BTUJJR1VPVVMgPSAtMiwKKwkvKiBUaGUgZm9sbG93aW5nIG9ubHkgYXBwbHkgd2hlbiBzeW1saW5rcyBhcmUgZm9sbG93ZWQgKi8KKwlEQU5HTElOR19TWU1MSU5LID0gLTQsIC8qCisJCQkJKiBUaGUgaW5pdGlhbCBzeW1saW5rIGlzIHRoZXJlLCBidXQKKwkJCQkqICh0cmFuc2l0aXZlbHkpIHBvaW50cyB0byBhIG1pc3NpbmcKKwkJCQkqIGluLXRyZWUgZmlsZQorCQkJCSovCisJU1lNTElOS19MT09QID0gLTUsCisJTk9UX0RJUiA9IC02LCAvKgorCQkgICAgICAgKiBTb21ld2hlcmUgYWxvbmcgdGhlIHN5bWxpbmsgY2hhaW4sIGEgcGF0aCBpcworCQkgICAgICAgKiByZXF1ZXN0ZWQgd2hpY2ggY29udGFpbnMgYSBmaWxlIGFzIGEKKwkJICAgICAgICogbm9uLWZpbmFsIGVsZW1lbnQuCisJCSAgICAgICAqLworfTsKKworaW50IHJlcG9fZ2V0X29pZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworaW50IGdldF9vaWRmKHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworaW50IHJlcG9fZ2V0X29pZF9jb21taXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKK2ludCByZXBvX2dldF9vaWRfY29tbWl0dGlzaChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworaW50IHJlcG9fZ2V0X29pZF90cmVlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CitpbnQgcmVwb19nZXRfb2lkX3RyZWVpc2goc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKK2ludCByZXBvX2dldF9vaWRfYmxvYihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworaW50IHJlcG9fZ2V0X29pZF9tYihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOwordm9pZCBtYXliZV9kaWVfb25fbWlzc3BlbHRfb2JqZWN0X25hbWUoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCk7CitlbnVtIGdldF9vaWRfcmVzdWx0IGdldF9vaWRfd2l0aF9jb250ZXh0KHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpzdHIsCisJCQkJCSB1bnNpZ25lZCBmbGFncywgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQkgc3RydWN0IG9iamVjdF9jb250ZXh0ICpvYyk7CisKKyNkZWZpbmUgZ2V0X29pZChzdHIsIG9pZCkJCXJlcG9fZ2V0X29pZCh0aGVfcmVwb3NpdG9yeSwgc3RyLCBvaWQpCisjZGVmaW5lIGdldF9vaWRfY29tbWl0KHN0ciwgb2lkKQlyZXBvX2dldF9vaWRfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCBzdHIsIG9pZCkKKyNkZWZpbmUgZ2V0X29pZF9jb21taXR0aXNoKHN0ciwgb2lkKQlyZXBvX2dldF9vaWRfY29tbWl0dGlzaCh0aGVfcmVwb3NpdG9yeSwgc3RyLCBvaWQpCisjZGVmaW5lIGdldF9vaWRfdHJlZShzdHIsIG9pZCkJCXJlcG9fZ2V0X29pZF90cmVlKHRoZV9yZXBvc2l0b3J5LCBzdHIsIG9pZCkKKyNkZWZpbmUgZ2V0X29pZF90cmVlaXNoKHN0ciwgb2lkKQlyZXBvX2dldF9vaWRfdHJlZWlzaCh0aGVfcmVwb3NpdG9yeSwgc3RyLCBvaWQpCisjZGVmaW5lIGdldF9vaWRfYmxvYihzdHIsIG9pZCkJCXJlcG9fZ2V0X29pZF9ibG9iKHRoZV9yZXBvc2l0b3J5LCBzdHIsIG9pZCkKKyNkZWZpbmUgZ2V0X29pZF9tYihzdHIsIG9pZCkgCQlyZXBvX2dldF9vaWRfbWIodGhlX3JlcG9zaXRvcnksIHN0ciwgb2lkKQorCit0eXBlZGVmIGludCBlYWNoX2FiYnJldl9mbihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHZvaWQgKik7CitpbnQgcmVwb19mb3JfZWFjaF9hYmJyZXYoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnByZWZpeCwgZWFjaF9hYmJyZXZfZm4sIHZvaWQgKik7CisjZGVmaW5lIGZvcl9lYWNoX2FiYnJldihwcmVmaXgsIGZuLCBkYXRhKSByZXBvX2Zvcl9lYWNoX2FiYnJldih0aGVfcmVwb3NpdG9yeSwgcHJlZml4LCBmbiwgZGF0YSkKKworaW50IHNldF9kaXNhbWJpZ3VhdGVfaGludF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSk7CisKKy8qCisgKiBUcnkgdG8gcmVhZCBhIFNIQTEgaW4gaGV4YWRlY2ltYWwgZm9ybWF0IGZyb20gdGhlIDQwIGNoYXJhY3RlcnMKKyAqIHN0YXJ0aW5nIGF0IGhleC4gIFdyaXRlIHRoZSAyMC1ieXRlIHJlc3VsdCB0byBzaGExIGluIGJpbmFyeSBmb3JtLgorICogUmV0dXJuIDAgb24gc3VjY2Vzcy4gIFJlYWRpbmcgc3RvcHMgaWYgYSBOVUwgaXMgZW5jb3VudGVyZWQgaW4gdGhlCisgKiBpbnB1dCwgc28gaXQgaXMgc2FmZSB0byBwYXNzIHRoaXMgZnVuY3Rpb24gYW4gYXJiaXRyYXJ5CisgKiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgorICovCitpbnQgZ2V0X3NoYTFfaGV4KGNvbnN0IGNoYXIgKmhleCwgdW5zaWduZWQgY2hhciAqc2hhMSk7CitpbnQgZ2V0X29pZF9oZXgoY29uc3QgY2hhciAqaGV4LCBzdHJ1Y3Qgb2JqZWN0X2lkICpzaGExKTsKKworLyogTGlrZSBnZXRfb2lkX2hleCwgYnV0IGZvciBhbiBhcmJpdHJhcnkgaGFzaCBhbGdvcml0aG0uICovCitpbnQgZ2V0X29pZF9oZXhfYWxnb3AoY29uc3QgY2hhciAqaGV4LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IHN0cnVjdCBnaXRfaGFzaF9hbGdvICphbGdvcCk7CisKKy8qCisgKiBSZWFkIGBsZW5gIHBhaXJzIG9mIGhleGFkZWNpbWFsIGRpZ2l0cyBmcm9tIGBoZXhgIGFuZCB3cml0ZSB0aGUKKyAqIHZhbHVlcyB0byBgYmluYXJ5YCBhcyBgbGVuYCBieXRlcy4gUmV0dXJuIDAgb24gc3VjY2Vzcywgb3IgLTEgaWYKKyAqIHRoZSBpbnB1dCBkb2VzIG5vdCBjb25zaXN0IG9mIGhleCBkaWdpdHMpLgorICovCitpbnQgaGV4X3RvX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJpbmFyeSwgY29uc3QgY2hhciAqaGV4LCBzaXplX3QgbGVuKTsKKworLyoKKyAqIENvbnZlcnQgYSBiaW5hcnkgaGFzaCBpbiAidW5zaWduZWQgY2hhciBbXSIgb3IgYW4gb2JqZWN0IG5hbWUgaW4KKyAqICJzdHJ1Y3Qgb2JqZWN0X2lkICoiIHRvIGl0cyBoZXggZXF1aXZhbGVudC4gVGhlIGBfcmAgdmFyaWFudCBpcyByZWVudHJhbnQsCisgKiBhbmQgd3JpdGVzIHRoZSBOVUwtdGVybWluYXRlZCBvdXRwdXQgdG8gdGhlIGJ1ZmZlciBgb3V0YCwgd2hpY2ggbXVzdCBiZSBhdAorICogbGVhc3QgYEdJVF9NQVhfSEVYU1ogKyAxYCBieXRlcywgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIG91dCBmb3IKKyAqIGNvbnZlbmllbmNlLgorICoKKyAqIFRoZSBub24tYF9yYCB2YXJpYW50IHJldHVybnMgYSBzdGF0aWMgYnVmZmVyLCBidXQgdXNlcyBhIHJpbmcgb2YgNAorICogYnVmZmVycywgbWFraW5nIGl0IHNhZmUgdG8gbWFrZSBtdWx0aXBsZSBjYWxscyBmb3IgYSBzaW5nbGUgc3RhdGVtZW50LCBsaWtlOgorICoKKyAqICAgcHJpbnRmKCIlcyAtPiAlcyIsIGhhc2hfdG9faGV4KG9uZSksIGhhc2hfdG9faGV4KHR3bykpOworICogICBwcmludGYoIiVzIC0+ICVzIiwgb2lkX3RvX2hleChvbmUpLCBvaWRfdG9faGV4KHR3bykpOworICovCitjaGFyICpoYXNoX3RvX2hleF9hbGdvcF9yKGNoYXIgKmJ1ZmZlciwgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKik7CitjaGFyICpvaWRfdG9faGV4X3IoY2hhciAqb3V0LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworY2hhciAqaGFzaF90b19oZXhfYWxnb3AoY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKik7CS8qIHN0YXRpYyBidWZmZXIgcmVzdWx0ISAqLworY2hhciAqaGFzaF90b19oZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCk7CQkJCQkJLyogc2FtZSBzdGF0aWMgYnVmZmVyICovCitjaGFyICpvaWRfdG9faGV4KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CQkJCQkJLyogc2FtZSBzdGF0aWMgYnVmZmVyICovCisKKy8qCisgKiBQYXJzZSBhIDQwLWNoYXJhY3RlciBoZXhhZGVjaW1hbCBvYmplY3QgSUQgc3RhcnRpbmcgZnJvbSBoZXgsIHVwZGF0aW5nIHRoZQorICogcG9pbnRlciBzcGVjaWZpZWQgYnkgZW5kIHdoZW4gcGFyc2luZyBzdG9wcy4gIFRoZSByZXN1bHRpbmcgb2JqZWN0IElEIGlzCisgKiBzdG9yZWQgaW4gb2lkLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuICBQYXJzaW5nIHdpbGwgc3RvcCBvbiB0aGUgZmlyc3QgTlVMIG9yCisgKiBvdGhlciBpbnZhbGlkIGNoYXJhY3Rlci4gIGVuZCBpcyBvbmx5IHVwZGF0ZWQgb24gc3VjY2Vzczsgb3RoZXJ3aXNlLCBpdCBpcworICogdW5tb2RpZmllZC4KKyAqLworaW50IHBhcnNlX29pZF9oZXgoY29uc3QgY2hhciAqaGV4LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKiplbmQpOworCisvKiBMaWtlIHBhcnNlX29pZF9oZXgsIGJ1dCBmb3IgYW4gYXJiaXRyYXJ5IGhhc2ggYWxnb3JpdGhtLiAqLworaW50IHBhcnNlX29pZF9oZXhfYWxnb3AoY29uc3QgY2hhciAqaGV4LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKiplbmQsCisJCQljb25zdCBzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyAqYWxnbyk7CisKKworLyoKKyAqIFRoZXNlIGZ1bmN0aW9ucyB3b3JrIGxpa2UgZ2V0X29pZF9oZXggYW5kIHBhcnNlX29pZF9oZXgsIGJ1dCB0aGV5IHdpbGwgcGFyc2UKKyAqIGEgaGV4IHZhbHVlIGZvciBhbnkgYWxnb3JpdGhtLiBUaGUgYWxnb3JpdGhtIGlzIGRldGVjdGVkIGJhc2VkIG9uIHRoZSBsZW5ndGgKKyAqIGFuZCB0aGUgYWxnb3JpdGhtIGluIHVzZSBpcyByZXR1cm5lZC4gSWYgdGhpcyBpcyBub3QgYSBoZXggb2JqZWN0IElEIGluIGFueQorICogYWxnb3JpdGhtLCByZXR1cm5zIEdJVF9IQVNIX1VOS05PV04uCisgKi8KK2ludCBnZXRfb2lkX2hleF9hbnkoY29uc3QgY2hhciAqaGV4LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworaW50IHBhcnNlX29pZF9oZXhfYW55KGNvbnN0IGNoYXIgKmhleCwgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICoqZW5kKTsKKworLyoKKyAqIFRoaXMgcmVhZHMgc2hvcnQtaGFuZCBzeW50YXggdGhhdCBub3Qgb25seSBldmFsdWF0ZXMgdG8gYSBjb21taXQKKyAqIG9iamVjdCBuYW1lLCBidXQgYWxzbyBjYW4gYWN0IGFzIGlmIHRoZSBlbmQgdXNlciBzcGVsbGVkIHRoZSBuYW1lCisgKiBvZiB0aGUgYnJhbmNoIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKyAqCisgKiAtICJAey1OfSIgZmluZHMgdGhlIG5hbWUgb2YgdGhlIE50aCBwcmV2aW91cyBicmFuY2ggd2Ugd2VyZSBvbiwgYW5kCisgKiAgIHBsYWNlcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIGluIHRoZSBnaXZlbiBidWYgYW5kIHJldHVybnMgdGhlCisgKiAgIG51bWJlciBvZiBjaGFyYWN0ZXJzIHBhcnNlZCBpZiBzdWNjZXNzZnVsLgorICoKKyAqIC0gIjxicmFuY2g+QHt1cHN0cmVhbX0iIGZpbmRzIHRoZSBuYW1lIG9mIHRoZSBvdGhlciByZWYgdGhhdAorICogICA8YnJhbmNoPiBpcyBjb25maWd1cmVkIHRvIG1lcmdlIHdpdGggKG1pc3NpbmcgPGJyYW5jaD4gZGVmYXVsdHMKKyAqICAgdG8gdGhlIGN1cnJlbnQgYnJhbmNoKSwgYW5kIHBsYWNlcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIGluIHRoZQorICogICBnaXZlbiBidWYgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHBhcnNlZCBpZgorICogICBzdWNjZXNzZnVsLgorICoKKyAqIElmIHRoZSBpbnB1dCBpcyBub3Qgb2YgdGhlIGFjY2VwdGVkIGZvcm1hdCwgaXQgcmV0dXJucyBhIG5lZ2F0aXZlCisgKiBudW1iZXIgdG8gc2lnbmFsIGFuIGVycm9yLgorICoKKyAqIElmIHRoZSBpbnB1dCB3YXMgb2sgYnV0IHRoZXJlIGFyZSBub3QgTiBicmFuY2ggc3dpdGNoZXMgaW4gdGhlCisgKiByZWZsb2csIGl0IHJldHVybnMgMC4KKyAqCisgKiBJZiAiYWxsb3dlZCIgaXMgbm9uLXplcm8sIGl0IGlzIGEgdHJlYXRlZCBhcyBhIGJpdGZpZWxkIG9mIGFsbG93YWJsZQorICogZXhwYW5zaW9uczogbG9jYWwgYnJhbmNoZXMgKCJyZWZzL2hlYWRzLyIpLCByZW1vdGUgYnJhbmNoZXMKKyAqICgicmVmcy9yZW1vdGVzLyIpLCBvciAiSEVBRCIuIElmIG5vICJhbGxvd2VkIiBiaXRzIGFyZSBzZXQsIGFueSBleHBhbnNpb24gaXMKKyAqIGFsbG93ZWQsIGV2ZW4gb25lcyB0byByZWZzIG91dHNpZGUgb2YgdGhvc2UgbmFtZXNwYWNlcy4KKyAqLworI2RlZmluZSBJTlRFUlBSRVRfQlJBTkNIX0xPQ0FMICgxPDwwKQorI2RlZmluZSBJTlRFUlBSRVRfQlJBTkNIX1JFTU9URSAoMTw8MSkKKyNkZWZpbmUgSU5URVJQUkVUX0JSQU5DSF9IRUFEICgxPDwyKQoraW50IHJlcG9faW50ZXJwcmV0X2JyYW5jaF9uYW1lKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkgICAgICAgdW5zaWduZWQgYWxsb3dlZCk7CisjZGVmaW5lIGludGVycHJldF9icmFuY2hfbmFtZShzdHIsIGxlbiwgYnVmLCBhbGxvd2VkKSBcCisJcmVwb19pbnRlcnByZXRfYnJhbmNoX25hbWUodGhlX3JlcG9zaXRvcnksIHN0ciwgbGVuLCBidWYsIGFsbG93ZWQpCisKK2ludCB2YWxpZGF0ZV9oZWFkcmVmKGNvbnN0IGNoYXIgKnJlZik7CisKK2ludCBiYXNlX25hbWVfY29tcGFyZShjb25zdCBjaGFyICpuYW1lMSwgaW50IGxlbjEsIGludCBtb2RlMSwgY29uc3QgY2hhciAqbmFtZTIsIGludCBsZW4yLCBpbnQgbW9kZTIpOworaW50IGRmX25hbWVfY29tcGFyZShjb25zdCBjaGFyICpuYW1lMSwgaW50IGxlbjEsIGludCBtb2RlMSwgY29uc3QgY2hhciAqbmFtZTIsIGludCBsZW4yLCBpbnQgbW9kZTIpOworaW50IG5hbWVfY29tcGFyZShjb25zdCBjaGFyICpuYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKm5hbWUyLCBzaXplX3QgbGVuMik7CitpbnQgY2FjaGVfbmFtZV9zdGFnZV9jb21wYXJlKGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMSwgaW50IHN0YWdlMSwgY29uc3QgY2hhciAqbmFtZTIsIGludCBsZW4yLCBpbnQgc3RhZ2UyKTsKKwordm9pZCAqcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgY29uc3QgY2hhciAqcmVxdWlyZWRfdHlwZSwKKwkJCQkgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCQkgc3RydWN0IG9iamVjdF9pZCAqb2lkX3JldCk7CisKK3N0cnVjdCBvYmplY3QgKnJlcG9fcGVlbF90b190eXBlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCQkgc3RydWN0IG9iamVjdCAqbywgZW51bSBvYmplY3RfdHlwZSk7CisjZGVmaW5lIHBlZWxfdG9fdHlwZShuYW1lLCBuYW1lbGVuLCBvYmosIHR5cGUpIFwKKwlyZXBvX3BlZWxfdG9fdHlwZSh0aGVfcmVwb3NpdG9yeSwgbmFtZSwgbmFtZWxlbiwgb2JqLCB0eXBlKQorCitlbnVtIGRhdGVfbW9kZV90eXBlIHsKKwlEQVRFX05PUk1BTCA9IDAsCisJREFURV9IVU1BTiwKKwlEQVRFX1JFTEFUSVZFLAorCURBVEVfU0hPUlQsCisJREFURV9JU084NjAxLAorCURBVEVfSVNPODYwMV9TVFJJQ1QsCisJREFURV9SRkMyODIyLAorCURBVEVfU1RSRlRJTUUsCisJREFURV9SQVcsCisJREFURV9VTklYCit9OworCitzdHJ1Y3QgZGF0ZV9tb2RlIHsKKwllbnVtIGRhdGVfbW9kZV90eXBlIHR5cGU7CisJY29uc3QgY2hhciAqc3RyZnRpbWVfZm10OworCWludCBsb2NhbDsKK307CisKKy8qCisgKiBDb252ZW5pZW5jZSBoZWxwZXIgZm9yIHBhc3NpbmcgYSBjb25zdGFudCB0eXBlLCBsaWtlOgorICoKKyAqICAgc2hvd19kYXRlKHQsIHR6LCBEQVRFX01PREUoTk9STUFMKSk7CisgKi8KKyNkZWZpbmUgREFURV9NT0RFKHQpIGRhdGVfbW9kZV9mcm9tX3R5cGUoREFURV8jI3QpCitzdHJ1Y3QgZGF0ZV9tb2RlICpkYXRlX21vZGVfZnJvbV90eXBlKGVudW0gZGF0ZV9tb2RlX3R5cGUgdHlwZSk7CisKK2NvbnN0IGNoYXIgKnNob3dfZGF0ZSh0aW1lc3RhbXBfdCB0aW1lLCBpbnQgdGltZXpvbmUsIGNvbnN0IHN0cnVjdCBkYXRlX21vZGUgKm1vZGUpOwordm9pZCBzaG93X2RhdGVfcmVsYXRpdmUodGltZXN0YW1wX3QgdGltZSwgc3RydWN0IHN0cmJ1ZiAqdGltZWJ1Zik7Cit2b2lkIHNob3dfZGF0ZV9odW1hbih0aW1lc3RhbXBfdCB0aW1lLCBpbnQgdHosIGNvbnN0IHN0cnVjdCB0aW1ldmFsICpub3csCisJCQlzdHJ1Y3Qgc3RyYnVmICp0aW1lYnVmKTsKK2ludCBwYXJzZV9kYXRlKGNvbnN0IGNoYXIgKmRhdGUsIHN0cnVjdCBzdHJidWYgKm91dCk7CitpbnQgcGFyc2VfZGF0ZV9iYXNpYyhjb25zdCBjaGFyICpkYXRlLCB0aW1lc3RhbXBfdCAqdGltZXN0YW1wLCBpbnQgKm9mZnNldCk7CitpbnQgcGFyc2VfZXhwaXJ5X2RhdGUoY29uc3QgY2hhciAqZGF0ZSwgdGltZXN0YW1wX3QgKnRpbWVzdGFtcCk7Cit2b2lkIGRhdGVzdGFtcChzdHJ1Y3Qgc3RyYnVmICpvdXQpOworI2RlZmluZSBhcHByb3hpZGF0ZShzKSBhcHByb3hpZGF0ZV9jYXJlZnVsKChzKSwgTlVMTCkKK3RpbWVzdGFtcF90IGFwcHJveGlkYXRlX2NhcmVmdWwoY29uc3QgY2hhciAqLCBpbnQgKik7Cit0aW1lc3RhbXBfdCBhcHByb3hpZGF0ZV9yZWxhdGl2ZShjb25zdCBjaGFyICpkYXRlKTsKK3ZvaWQgcGFyc2VfZGF0ZV9mb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0LCBzdHJ1Y3QgZGF0ZV9tb2RlICptb2RlKTsKK2ludCBkYXRlX292ZXJmbG93cyh0aW1lc3RhbXBfdCBkYXRlKTsKKworI2RlZmluZSBJREVOVF9TVFJJQ1QJICAgICAgIDEKKyNkZWZpbmUgSURFTlRfTk9fREFURQkgICAgICAgMgorI2RlZmluZSBJREVOVF9OT19OQU1FCSAgICAgICA0CisKK2VudW0gd2FudF9pZGVudCB7CisJV0FOVF9CTEFOS19JREVOVCwKKwlXQU5UX0FVVEhPUl9JREVOVCwKKwlXQU5UX0NPTU1JVFRFUl9JREVOVAorfTsKKworY29uc3QgY2hhciAqZ2l0X2F1dGhvcl9pbmZvKGludCk7Citjb25zdCBjaGFyICpnaXRfY29tbWl0dGVyX2luZm8oaW50KTsKK2NvbnN0IGNoYXIgKmZtdF9pZGVudChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICplbWFpbCwKKwkJICAgICAgZW51bSB3YW50X2lkZW50IHdob3NlX2lkZW50LAorCQkgICAgICBjb25zdCBjaGFyICpkYXRlX3N0ciwgaW50KTsKK2NvbnN0IGNoYXIgKmZtdF9uYW1lKGVudW0gd2FudF9pZGVudCk7Citjb25zdCBjaGFyICppZGVudF9kZWZhdWx0X25hbWUodm9pZCk7Citjb25zdCBjaGFyICppZGVudF9kZWZhdWx0X2VtYWlsKHZvaWQpOworY29uc3QgY2hhciAqZ2l0X2VkaXRvcih2b2lkKTsKK2NvbnN0IGNoYXIgKmdpdF9zZXF1ZW5jZV9lZGl0b3Iodm9pZCk7Citjb25zdCBjaGFyICpnaXRfcGFnZXIoaW50IHN0ZG91dF9pc190dHkpOworaW50IGlzX3Rlcm1pbmFsX2R1bWIodm9pZCk7CitpbnQgZ2l0X2lkZW50X2NvbmZpZyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKKy8qCisgKiBQcmVwYXJlIGFuIGlkZW50IHRvIGZhbGwgYmFjayBvbiBpZiB0aGUgdXNlciBkaWRuJ3QgY29uZmlndXJlIGl0LgorICovCit2b2lkIHByZXBhcmVfZmFsbGJhY2tfaWRlbnQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZW1haWwpOwordm9pZCByZXNldF9pZGVudF9kYXRlKHZvaWQpOworCitzdHJ1Y3QgaWRlbnRfc3BsaXQgeworCWNvbnN0IGNoYXIgKm5hbWVfYmVnaW47CisJY29uc3QgY2hhciAqbmFtZV9lbmQ7CisJY29uc3QgY2hhciAqbWFpbF9iZWdpbjsKKwljb25zdCBjaGFyICptYWlsX2VuZDsKKwljb25zdCBjaGFyICpkYXRlX2JlZ2luOworCWNvbnN0IGNoYXIgKmRhdGVfZW5kOworCWNvbnN0IGNoYXIgKnR6X2JlZ2luOworCWNvbnN0IGNoYXIgKnR6X2VuZDsKK307CisvKgorICogU2lnbmFscyBhbiBzdWNjZXNzIHdpdGggMCwgYnV0IHRpbWUgcGFydCBvZiB0aGUgcmVzdWx0IG1heSBiZSBOVUxMCisgKiBpZiB0aGUgaW5wdXQgbGFja3MgdGltZXN0YW1wIGFuZCB6b25lCisgKi8KK2ludCBzcGxpdF9pZGVudF9saW5lKHN0cnVjdCBpZGVudF9zcGxpdCAqLCBjb25zdCBjaGFyICosIGludCk7CisKKy8qCisgKiBMaWtlIHNob3dfZGF0ZSwgYnV0IHB1bGwgdGhlIHRpbWVzdGFtcCBhbmQgdHogcGFyYW1ldGVycyBmcm9tCisgKiB0aGUgaWRlbnRfc3BsaXQuIEl0IHdpbGwgYWxzbyBzYW5pdHktY2hlY2sgdGhlIHZhbHVlcyBhbmQgcHJvZHVjZQorICogYSB3ZWxsLWtub3duIHNlbnRpbmVsIGRhdGUgaWYgdGhleSBhcHBlYXIgYm9ndXMuCisgKi8KK2NvbnN0IGNoYXIgKnNob3dfaWRlbnRfZGF0ZShjb25zdCBzdHJ1Y3QgaWRlbnRfc3BsaXQgKmlkLAorCQkJICAgIGNvbnN0IHN0cnVjdCBkYXRlX21vZGUgKm1vZGUpOworCisvKgorICogQ29tcGFyZSBzcGxpdCBpZGVudHMgZm9yIGVxdWFsaXR5IG9yIHN0cmljdCBvcmRlcmluZy4gTm90ZSB0aGF0IHdlCisgKiBjb21wYXJlIG9ubHkgdGhlIGlkZW50IHBhcnQgb2YgdGhlIGxpbmUsIGlnbm9yaW5nIGFueSB0aW1lc3RhbXAuCisgKgorICogQmVjYXVzZSB0aGVyZSBhcmUgdHdvIGZpZWxkcywgd2UgbXVzdCBjaG9vc2Ugb25lIGFzIHRoZSBwcmltYXJ5IGtleTsgd2UKKyAqIGN1cnJlbnRseSBhcmJpdHJhcmlseSBwaWNrIHRoZSBlbWFpbC4KKyAqLworaW50IGlkZW50X2NtcChjb25zdCBzdHJ1Y3QgaWRlbnRfc3BsaXQgKiwgY29uc3Qgc3RydWN0IGlkZW50X3NwbGl0ICopOworCitzdHJ1Y3QgY2hlY2tvdXQgeworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlOworCWNvbnN0IGNoYXIgKmJhc2VfZGlyOworCWludCBiYXNlX2Rpcl9sZW47CisJc3RydWN0IGRlbGF5ZWRfY2hlY2tvdXQgKmRlbGF5ZWRfY2hlY2tvdXQ7CisJc3RydWN0IGNoZWNrb3V0X21ldGFkYXRhIG1ldGE7CisJdW5zaWduZWQgZm9yY2U6MSwKKwkJIHF1aWV0OjEsCisJCSBub3RfbmV3OjEsCisJCSBjbG9uZToxLAorCQkgcmVmcmVzaF9jYWNoZToxOworfTsKKyNkZWZpbmUgQ0hFQ0tPVVRfSU5JVCB7IE5VTEwsICIiIH0KKworI2RlZmluZSBURU1QT1JBUllfRklMRU5BTUVfTEVOR1RIIDI1CitpbnQgY2hlY2tvdXRfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgY2hhciAqdG9wYXRoLCBpbnQgKm5yX2NoZWNrb3V0cyk7Cit2b2lkIGVuYWJsZV9kZWxheWVkX2NoZWNrb3V0KHN0cnVjdCBjaGVja291dCAqc3RhdGUpOworaW50IGZpbmlzaF9kZWxheWVkX2NoZWNrb3V0KHN0cnVjdCBjaGVja291dCAqc3RhdGUsIGludCAqbnJfY2hlY2tvdXRzKTsKKy8qCisgKiBVbmxpbmsgdGhlIGxhc3QgY29tcG9uZW50IGFuZCBzY2hlZHVsZSB0aGUgbGVhZGluZyBkaXJlY3RvcmllcyBmb3IKKyAqIHJlbW92YWwsIHN1Y2ggdGhhdCBlbXB0eSBkaXJlY3RvcmllcyBnZXQgcmVtb3ZlZC4KKyAqLwordm9pZCB1bmxpbmtfZW50cnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSk7CisKK3N0cnVjdCBjYWNoZV9kZWYgeworCXN0cnVjdCBzdHJidWYgcGF0aDsKKwlpbnQgZmxhZ3M7CisJaW50IHRyYWNrX2ZsYWdzOworCWludCBwcmVmaXhfbGVuX3N0YXRfZnVuYzsKK307CisjZGVmaW5lIENBQ0hFX0RFRl9JTklUIHsgU1RSQlVGX0lOSVQsIDAsIDAsIDAgfQorc3RhdGljIGlubGluZSB2b2lkIGNhY2hlX2RlZl9jbGVhcihzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSkKK3sKKwlzdHJidWZfcmVsZWFzZSgmY2FjaGUtPnBhdGgpOworfQorCitpbnQgaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pOworaW50IHRocmVhZGVkX2hhc19zeW1saW5rX2xlYWRpbmdfcGF0aChzdHJ1Y3QgY2FjaGVfZGVmICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2ludCBjaGVja19sZWFkaW5nX3BhdGgoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbik7CitpbnQgaGFzX2RpcnNfb25seV9wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIGludCBwcmVmaXhfbGVuKTsKK3ZvaWQgc2NoZWR1bGVfZGlyX2Zvcl9yZW1vdmFsKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pOwordm9pZCByZW1vdmVfc2NoZWR1bGVkX2RpcnModm9pZCk7CisKK3N0cnVjdCBwYWNrX3dpbmRvdyB7CisJc3RydWN0IHBhY2tfd2luZG93ICpuZXh0OworCXVuc2lnbmVkIGNoYXIgKmJhc2U7CisJb2ZmX3Qgb2Zmc2V0OworCXNpemVfdCBsZW47CisJdW5zaWduZWQgaW50IGxhc3RfdXNlZDsKKwl1bnNpZ25lZCBpbnQgaW51c2VfY250OworfTsKKworc3RydWN0IHBhY2tfZW50cnkgeworCW9mZl90IG9mZnNldDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKK307CisKKy8qCisgKiBDcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSByb290ZWQgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSBkaXJlY3RvcnksIG9yCisgKiBkaWUgb24gZmFpbHVyZS4gVGhlIGZpbGVuYW1lIGlzIHRha2VuIGZyb20gInBhdHRlcm4iLCB3aGljaCBzaG91bGQgaGF2ZSB0aGUKKyAqIHVzdWFsICJYWFhYWFgiIHRyYWlsZXIsIGFuZCB0aGUgcmVzdWx0aW5nIGZpbGVuYW1lIGlzIHdyaXR0ZW4gaW50byB0aGUKKyAqICJ0ZW1wbGF0ZSIgYnVmZmVyLiBSZXR1cm5zIHRoZSBvcGVuIGRlc2NyaXB0b3IuCisgKi8KK2ludCBvZGJfbWtzdGVtcChzdHJ1Y3Qgc3RyYnVmICp0ZW1wX2ZpbGVuYW1lLCBjb25zdCBjaGFyICpwYXR0ZXJuKTsKKworLyoKKyAqIENyZWF0ZSBhIHBhY2sgLmtlZXAgZmlsZSBuYW1lZCAibmFtZSIgKHdoaWNoIHNob3VsZCBnZW5lcmFsbHkgYmUgdGhlIG91dHB1dAorICogb2Ygb2RiX3BhY2tfbmFtZSkuIFJldHVybnMgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbmVkIGZvciB3cml0aW5nLCBvciAtMSBvbgorICogZXJyb3IuCisgKi8KK2ludCBvZGJfcGFja19rZWVwKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKgorICogU2V0IHRoaXMgdG8gMCB0byBwcmV2ZW50IG9pZF9vYmplY3RfaW5mb19leHRlbmRlZCgpIGZyb20gZmV0Y2hpbmcgbWlzc2luZworICogYmxvYnMuIFRoaXMgaGFzIGEgZGlmZmVyZW5jZSBvbmx5IGlmIGV4dGVuc2lvbnMucGFydGlhbENsb25lIGlzIHNldC4KKyAqCisgKiBJdHMgZGVmYXVsdCB2YWx1ZSBpcyAxLgorICovCitleHRlcm4gaW50IGZldGNoX2lmX21pc3Npbmc7CisKKy8qIER1bWIgc2VydmVycyBzdXBwb3J0ICovCitpbnQgdXBkYXRlX3NlcnZlcl9pbmZvKGludCk7CisKK2NvbnN0IGNoYXIgKmdldF9sb2dfb3V0cHV0X2VuY29kaW5nKHZvaWQpOworY29uc3QgY2hhciAqZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2Rpbmcodm9pZCk7CisKKy8qCisgKiBUaGlzIGlzIGEgaGFjayBmb3IgdGVzdCBwcm9ncmFtcyBsaWtlIHRlc3QtZHVtcC11bnRyYWNrZWQtY2FjaGUgdG8KKyAqIGVuc3VyZSB0aGF0IHRoZXkgZG8gbm90IG1vZGlmeSB0aGUgdW50cmFja2VkIGNhY2hlIHdoZW4gcmVhZGluZyBpdC4KKyAqIERvIG5vdCB1c2UgaXQgb3RoZXJ3aXNlIQorICovCitleHRlcm4gaW50IGlnbm9yZV91bnRyYWNrZWRfY2FjaGVfY29uZmlnOworCitpbnQgY29tbWl0dGVyX2lkZW50X3N1ZmZpY2llbnRseV9naXZlbih2b2lkKTsKK2ludCBhdXRob3JfaWRlbnRfc3VmZmljaWVudGx5X2dpdmVuKHZvaWQpOworCitleHRlcm4gY29uc3QgY2hhciAqZ2l0X2NvbW1pdF9lbmNvZGluZzsKK2V4dGVybiBjb25zdCBjaGFyICpnaXRfbG9nX291dHB1dF9lbmNvZGluZzsKK2V4dGVybiBjb25zdCBjaGFyICpnaXRfbWFpbG1hcF9maWxlOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9tYWlsbWFwX2Jsb2I7CisKKy8qIElPIGhlbHBlciBmdW5jdGlvbnMgKi8KK3ZvaWQgbWF5YmVfZmx1c2hfb3JfZGllKEZJTEUgKiwgY29uc3QgY2hhciAqKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCit2b2lkIGZwcmludGZfb3JfZGllKEZJTEUgKiwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCisjZGVmaW5lIENPUFlfUkVBRF9FUlJPUiAoLTIpCisjZGVmaW5lIENPUFlfV1JJVEVfRVJST1IgKC0zKQoraW50IGNvcHlfZmQoaW50IGlmZCwgaW50IG9mZCk7CitpbnQgY29weV9maWxlKGNvbnN0IGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgbW9kZSk7CitpbnQgY29weV9maWxlX3dpdGhfdGltZShjb25zdCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50IG1vZGUpOworCit2b2lkIHdyaXRlX29yX2RpZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK3ZvaWQgZnN5bmNfb3JfZGllKGludCBmZCwgY29uc3QgY2hhciAqKTsKKworc3NpemVfdCByZWFkX2luX2Z1bGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7Citzc2l6ZV90IHdyaXRlX2luX2Z1bGwoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7Citzc2l6ZV90IHByZWFkX2luX2Z1bGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwgb2ZmX3Qgb2Zmc2V0KTsKKworc3RhdGljIGlubGluZSBzc2l6ZV90IHdyaXRlX3N0cl9pbl9mdWxsKGludCBmZCwgY29uc3QgY2hhciAqc3RyKQoreworCXJldHVybiB3cml0ZV9pbl9mdWxsKGZkLCBzdHIsIHN0cmxlbihzdHIpKTsKK30KKworLyoqCisgKiBPcGVuIChhbmQgdHJ1bmNhdGUpIHRoZSBmaWxlIGF0IHBhdGgsIHdyaXRlIHRoZSBjb250ZW50cyBvZiBidWYgdG8gaXQsCisgKiBhbmQgY2xvc2UgaXQuIERpZXMgaWYgYW55IGVycm9ycyBhcmUgZW5jb3VudGVyZWQuCisgKi8KK3ZvaWQgd3JpdGVfZmlsZV9idWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKKworLyoqCisgKiBMaWtlIHdyaXRlX2ZpbGVfYnVmKCksIGJ1dCBmb3JtYXQgdGhlIGNvbnRlbnRzIGludG8gYSBidWZmZXIgZmlyc3QuCisgKiBBZGRpdGlvbmFsbHksIHdyaXRlX2ZpbGUoKSB3aWxsIGFwcGVuZCBhIG5ld2xpbmUgaWYgb25lIGlzIG5vdCBhbHJlYWR5CisgKiBwcmVzZW50LCBtYWtpbmcgaXQgY29udmVuaWVudCB0byB3cml0ZSB0ZXh0IGZpbGVzOgorICoKKyAqICAgd3JpdGVfZmlsZShwYXRoLCAiY291bnRlcjogJWQiLCBjdHIpOworICovCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQordm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworLyogcGFnZXIuYyAqLwordm9pZCBzZXR1cF9wYWdlcih2b2lkKTsKK2ludCBwYWdlcl9pbl91c2Uodm9pZCk7CitleHRlcm4gaW50IHBhZ2VyX3VzZV9jb2xvcjsKK2ludCB0ZXJtX2NvbHVtbnModm9pZCk7Cit2b2lkIHRlcm1fY2xlYXJfbGluZSh2b2lkKTsKK2ludCBkZWNpbWFsX3dpZHRoKHVpbnRtYXhfdCk7CitpbnQgY2hlY2tfcGFnZXJfY29uZmlnKGNvbnN0IGNoYXIgKmNtZCk7Cit2b2lkIHByZXBhcmVfcGFnZXJfYXJncyhzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqLCBjb25zdCBjaGFyICpwYWdlcik7CisKK2V4dGVybiBjb25zdCBjaGFyICplZGl0b3JfcHJvZ3JhbTsKK2V4dGVybiBjb25zdCBjaGFyICphc2twYXNzX3Byb2dyYW07CitleHRlcm4gY29uc3QgY2hhciAqZXhjbHVkZXNfZmlsZTsKKworLyogYmFzZTg1ICovCitpbnQgZGVjb2RlXzg1KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqbGluZSwgaW50IGxpbmVsZW4pOwordm9pZCBlbmNvZGVfODUoY2hhciAqYnVmLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgYnl0ZXMpOworCisvKiBwa3QtbGluZS5jICovCit2b2lkIHBhY2tldF90cmFjZV9pZGVudGl0eShjb25zdCBjaGFyICpwcm9nKTsKKworLyogYWRkICovCisvKgorICogcmV0dXJuIDAgaWYgc3VjY2VzcywgMSAtIGlmIGFkZGl0aW9uIG9mIGEgZmlsZSBmYWlsZWQgYW5kCisgKiBBRERfRklMRVNfSUdOT1JFX0VSUk9SUyB3YXMgc3BlY2lmaWVkIGluIGZsYWdzCisgKi8KK2ludCBhZGRfZmlsZXNfdG9fY2FjaGUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLCBpbnQgZmxhZ3MpOworCisvKiBkaWZmLmMgKi8KK2V4dGVybiBpbnQgZGlmZl9hdXRvX3JlZnJlc2hfaW5kZXg7CisKKy8qIG1hdGNoLXRyZWVzLmMgKi8KK3ZvaWQgc2hpZnRfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiwgc3RydWN0IG9iamVjdF9pZCAqLCBpbnQpOwordm9pZCBzaGlmdF90cmVlX2J5KHN0cnVjdCByZXBvc2l0b3J5ICosIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqLCBzdHJ1Y3Qgb2JqZWN0X2lkICosIGNvbnN0IGNoYXIgKik7CisKKy8qCisgKiB3aGl0ZXNwYWNlIHJ1bGVzLgorICogdXNlZCBieSBib3RoIGRpZmYgYW5kIGFwcGx5CisgKiBsYXN0IHR3byBkaWdpdHMgYXJlIHRhYiB3aWR0aAorICovCisjZGVmaW5lIFdTX0JMQU5LX0FUX0VPTCAgICAgICAgIDAxMDAKKyNkZWZpbmUgV1NfU1BBQ0VfQkVGT1JFX1RBQiAgICAgMDIwMAorI2RlZmluZSBXU19JTkRFTlRfV0lUSF9OT05fVEFCICAwNDAwCisjZGVmaW5lIFdTX0NSX0FUX0VPTCAgICAgICAgICAgMDEwMDAKKyNkZWZpbmUgV1NfQkxBTktfQVRfRU9GICAgICAgICAwMjAwMAorI2RlZmluZSBXU19UQUJfSU5fSU5ERU5UICAgICAgIDA0MDAwCisjZGVmaW5lIFdTX1RSQUlMSU5HX1NQQUNFICAgICAgKFdTX0JMQU5LX0FUX0VPTHxXU19CTEFOS19BVF9FT0YpCisjZGVmaW5lIFdTX0RFRkFVTFRfUlVMRSAoV1NfVFJBSUxJTkdfU1BBQ0V8V1NfU1BBQ0VfQkVGT1JFX1RBQnw4KQorI2RlZmluZSBXU19UQUJfV0lEVEhfTUFTSyAgICAgICAgMDc3CisvKiBBbGwgV1NfKiAtLSB3aGVuIGV4dGVuZGVkLCBhZGFwdCBkaWZmLmMgZW1pdF9zeW1ib2wgKi8KKyNkZWZpbmUgV1NfUlVMRV9NQVNLICAgICAgICAgICAwNzc3NworZXh0ZXJuIHVuc2lnbmVkIHdoaXRlc3BhY2VfcnVsZV9jZmc7Cit1bnNpZ25lZCB3aGl0ZXNwYWNlX3J1bGUoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKik7Cit1bnNpZ25lZCBwYXJzZV93aGl0ZXNwYWNlX3J1bGUoY29uc3QgY2hhciAqKTsKK3Vuc2lnbmVkIHdzX2NoZWNrKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIHVuc2lnbmVkIHdzX3J1bGUpOwordm9pZCB3c19jaGVja19lbWl0KGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIHVuc2lnbmVkIHdzX3J1bGUsIEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqc2V0LCBjb25zdCBjaGFyICpyZXNldCwgY29uc3QgY2hhciAqd3MpOworY2hhciAqd2hpdGVzcGFjZV9lcnJvcl9zdHJpbmcodW5zaWduZWQgd3MpOwordm9pZCB3c19maXhfY29weShzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IGNoYXIgKiwgaW50LCB1bnNpZ25lZCwgaW50ICopOworaW50IHdzX2JsYW5rX2xpbmUoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSk7CisjZGVmaW5lIHdzX3RhYl93aWR0aChydWxlKSAgICAgKChydWxlKSAmIFdTX1RBQl9XSURUSF9NQVNLKQorCisvKiBscy1maWxlcyAqLwordm9pZCBvdmVybGF5X3RyZWVfb25faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICBjb25zdCBjaGFyICp0cmVlX25hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCk7CisKKy8qIHNldHVwLmMgKi8KK3N0cnVjdCBzdGFydHVwX2luZm8geworCWludCBoYXZlX3JlcG9zaXRvcnk7CisJY29uc3QgY2hhciAqcHJlZml4OworfTsKK2V4dGVybiBzdHJ1Y3Qgc3RhcnR1cF9pbmZvICpzdGFydHVwX2luZm87CisKKy8qIG1lcmdlLmMgKi8KK3N0cnVjdCBjb21taXRfbGlzdDsKK2ludCB0cnlfbWVyZ2VfY29tbWFuZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJY29uc3QgY2hhciAqc3RyYXRlZ3ksIHNpemVfdCB4b3B0c19uciwKKwkJY29uc3QgY2hhciAqKnhvcHRzLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1vbiwKKwkJY29uc3QgY2hhciAqaGVhZF9hcmcsIHN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3Rlcyk7CitpbnQgY2hlY2tvdXRfZmFzdF9mb3J3YXJkKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpmcm9tLAorCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0bywKKwkJCSAgaW50IG92ZXJ3cml0ZV9pZ25vcmUpOworCisKK2ludCBzYW5lX2V4ZWN2cChjb25zdCBjaGFyICpmaWxlLCBjaGFyICpjb25zdCBhcmd2W10pOworCisvKgorICogQSBzdHJ1Y3QgdG8gZW5jYXBzdWxhdGUgdGhlIGNvbmNlcHQgb2Ygd2hldGhlciBhIGZpbGUgaGFzIGNoYW5nZWQKKyAqIHNpbmNlIHdlIGxhc3QgY2hlY2tlZCBpdC4gVGhpcyB1c2VzIGNyaXRlcmlhIHNpbWlsYXIgdG8gdGhvc2UgdXNlZAorICogZm9yIHRoZSBpbmRleC4KKyAqLworc3RydWN0IHN0YXRfdmFsaWRpdHkgeworCXN0cnVjdCBzdGF0X2RhdGEgKnNkOworfTsKKwordm9pZCBzdGF0X3ZhbGlkaXR5X2NsZWFyKHN0cnVjdCBzdGF0X3ZhbGlkaXR5ICpzdik7CisKKy8qCisgKiBSZXR1cm5zIDEgaWYgdGhlIHBhdGggaXMgYSByZWd1bGFyIGZpbGUgKG9yIGEgc3ltbGluayB0byBhIHJlZ3VsYXIKKyAqIGZpbGUpIGFuZCBtYXRjaGVzIHRoZSBzYXZlZCBzdGF0X3ZhbGlkaXR5LCAwIG90aGVyd2lzZS4gIEEgbWlzc2luZworICogb3IgaW5hY2Nlc3NpYmxlIGZpbGUgaXMgY29uc2lkZXJlZCBhIG1hdGNoIGlmIHRoZSBzdHJ1Y3Qgd2FzIGp1c3QKKyAqIGluaXRpYWxpemVkLCBvciBpZiB0aGUgcHJldmlvdXMgdXBkYXRlIGZvdW5kIGFuIGluYWNjZXNzaWJsZSBmaWxlLgorICovCitpbnQgc3RhdF92YWxpZGl0eV9jaGVjayhzdHJ1Y3Qgc3RhdF92YWxpZGl0eSAqc3YsIGNvbnN0IGNoYXIgKnBhdGgpOworCisvKgorICogVXBkYXRlIHRoZSBzdGF0X3ZhbGlkaXR5IGZyb20gYSBmaWxlIG9wZW5lZCBhdCBkZXNjcmlwdG9yIGZkLiBJZgorICogdGhlIGZpbGUgaXMgbWlzc2luZywgaW5hY2Nlc3NpYmxlLCBvciBub3QgYSByZWd1bGFyIGZpbGUsIHRoZW4KKyAqIGZ1dHVyZSBjYWxscyB0byBzdGF0X3ZhbGlkaXR5X2NoZWNrIHdpbGwgbWF0Y2ggaWZmIG9uZSBvZiB0aG9zZQorICogY29uZGl0aW9ucyBjb250aW51ZXMgdG8gYmUgdHJ1ZS4KKyAqLwordm9pZCBzdGF0X3ZhbGlkaXR5X3VwZGF0ZShzdHJ1Y3Qgc3RhdF92YWxpZGl0eSAqc3YsIGludCBmZCk7CisKK2ludCB2ZXJzaW9uY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMik7Cit2b2lkIHNsZWVwX21pbGxpc2VjKGludCBtaWxsaXNlYyk7CisKKy8qCisgKiBDcmVhdGUgYSBkaXJlY3RvcnkgYW5kIChpZiBzaGFyZSBpcyBub256ZXJvKSBhZGp1c3QgaXRzIHBlcm1pc3Npb25zCisgKiBhY2NvcmRpbmcgdG8gdGhlIHNoYXJlZF9yZXBvc2l0b3J5IHNldHRpbmcuIE9ubHkgdXNlIHRoaXMgZm9yCisgKiBkaXJlY3RvcmllcyB1bmRlciAkR0lUX0RJUi4gIERvbid0IHVzZSBpdCBmb3Igd29ya2luZyB0cmVlCisgKiBkaXJlY3Rvcmllcy4KKyAqLwordm9pZCBzYWZlX2NyZWF0ZV9kaXIoY29uc3QgY2hhciAqZGlyLCBpbnQgc2hhcmUpOworCisvKgorICogU2hvdWxkIHdlIHByaW50IGFuIGVsbGlwc2lzIGFmdGVyIGFuIGFiYnJldmlhdGVkIFNIQS0xIHZhbHVlCisgKiB3aGVuIGRvaW5nIGRpZmYtcmF3IG91dHB1dCBvciBpbmRpY2F0aW5nIGEgZGV0YWNoZWQgSEVBRD8KKyAqLworaW50IHByaW50X3NoYTFfZWxsaXBzaXModm9pZCk7CisKKy8qIFJldHVybiAxIGlmIHRoZSBmaWxlIGlzIGVtcHR5IG9yIGRvZXMgbm90IGV4aXN0cywgMCBvdGhlcndpc2UuICovCitpbnQgaXNfZW1wdHlfb3JfbWlzc2luZ19maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKworI2VuZGlmIC8qIENBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2NoZGlyLW5vdGlmeS5jIGIvY2hkaXItbm90aWZ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY3ZjJjMgotLS0gL2Rldi9udWxsCisrKyBiL2NoZGlyLW5vdGlmeS5jCkBAIC0wLDAgKzEsOTMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNoZGlyLW5vdGlmeS5oIgorI2luY2x1ZGUgImxpc3QuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RydWN0IGNoZGlyX25vdGlmeV9lbnRyeSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljaGRpcl9ub3RpZnlfY2FsbGJhY2sgY2I7CisJdm9pZCAqZGF0YTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9Oworc3RhdGljIExJU1RfSEVBRChjaGRpcl9ub3RpZnlfZW50cmllcyk7CisKK3ZvaWQgY2hkaXJfbm90aWZ5X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICBjaGRpcl9ub3RpZnlfY2FsbGJhY2sgY2IsCisJCQkgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjaGRpcl9ub3RpZnlfZW50cnkgKmUgPSB4bWFsbG9jKHNpemVvZigqZSkpOworCWUtPm5hbWUgPSBuYW1lOworCWUtPmNiID0gY2I7CisJZS0+ZGF0YSA9IGRhdGE7CisJbGlzdF9hZGRfdGFpbCgmZS0+bGlzdCwgJmNoZGlyX25vdGlmeV9lbnRyaWVzKTsKK30KKworc3RhdGljIHZvaWQgcmVwYXJlbnRfY2IoY29uc3QgY2hhciAqbmFtZSwKKwkJCWNvbnN0IGNoYXIgKm9sZF9jd2QsCisJCQljb25zdCBjaGFyICpuZXdfY3dkLAorCQkJdm9pZCAqZGF0YSkKK3sKKwljaGFyICoqcGF0aCA9IGRhdGE7CisJY2hhciAqdG1wID0gKnBhdGg7CisKKwlpZiAoIXRtcCkKKwkJcmV0dXJuOworCisJKnBhdGggPSByZXBhcmVudF9yZWxhdGl2ZV9wYXRoKG9sZF9jd2QsIG5ld19jd2QsIHRtcCk7CisJZnJlZSh0bXApOworCisJaWYgKG5hbWUpIHsKKwkJdHJhY2VfcHJpbnRmX2tleSgmdHJhY2Vfc2V0dXBfa2V5LAorCQkJCSAic2V0dXA6IHJlcGFyZW50ICVzIHRvICclcyciLAorCQkJCSBuYW1lLCAqcGF0aCk7CisJfQorfQorCit2b2lkIGNoZGlyX25vdGlmeV9yZXBhcmVudChjb25zdCBjaGFyICpuYW1lLCBjaGFyICoqcGF0aCkKK3sKKwljaGRpcl9ub3RpZnlfcmVnaXN0ZXIobmFtZSwgcmVwYXJlbnRfY2IsIHBhdGgpOworfQorCitpbnQgY2hkaXJfbm90aWZ5KGNvbnN0IGNoYXIgKm5ld19jd2QpCit7CisJc3RydWN0IHN0cmJ1ZiBvbGRfY3dkID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCisJaWYgKHN0cmJ1Zl9nZXRjd2QoJm9sZF9jd2QpIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChjaGRpcihuZXdfY3dkKSA8IDApIHsKKwkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCXN0cmJ1Zl9yZWxlYXNlKCZvbGRfY3dkKTsKKwkJZXJybm8gPSBzYXZlZF9lcnJubzsKKwkJcmV0dXJuIC0xOworCX0KKworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX3NldHVwX2tleSwKKwkJCSAic2V0dXA6IGNoZGlyIGZyb20gJyVzJyB0byAnJXMnIiwKKwkJCSBvbGRfY3dkLmJ1ZiwgbmV3X2N3ZCk7CisKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJmNoZGlyX25vdGlmeV9lbnRyaWVzKSB7CisJCXN0cnVjdCBjaGRpcl9ub3RpZnlfZW50cnkgKmUgPQorCQkJbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBjaGRpcl9ub3RpZnlfZW50cnksIGxpc3QpOworCQllLT5jYihlLT5uYW1lLCBvbGRfY3dkLmJ1ZiwgbmV3X2N3ZCwgZS0+ZGF0YSk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJm9sZF9jd2QpOworCXJldHVybiAwOworfQorCitjaGFyICpyZXBhcmVudF9yZWxhdGl2ZV9wYXRoKGNvbnN0IGNoYXIgKm9sZF9jd2QsCisJCQkgICAgIGNvbnN0IGNoYXIgKm5ld19jd2QsCisJCQkgICAgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hhciAqcmV0LCAqZnVsbDsKKworCWlmIChpc19hYnNvbHV0ZV9wYXRoKHBhdGgpKQorCQlyZXR1cm4geHN0cmR1cChwYXRoKTsKKworCWZ1bGwgPSB4c3RyZm10KCIlcy8lcyIsIG9sZF9jd2QsIHBhdGgpOworCXJldCA9IHhzdHJkdXAocmVtb3ZlX2xlYWRpbmdfcGF0aChmdWxsLCBuZXdfY3dkKSk7CisJZnJlZShmdWxsKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9jaGRpci1ub3RpZnkuaCBiL2NoZGlyLW5vdGlmeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NmU0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9jaGRpci1ub3RpZnkuaApAQCAtMCwwICsxLDczIEBACisjaWZuZGVmIENIRElSX05PVElGWV9ICisjZGVmaW5lIENIRElSX05PVElGWV9ICisKKy8qCisgKiBBbiBBUEkgdG8gbGV0IGNvZGUgInN1YnNjcmliZSIgdG8gY2hhbmdlcyB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAqIFRoZSBnZW5lcmFsIGlkZWEgaXMgdGhhdCBzb21lIGNvZGUgYXNrcyB0byBiZSBub3RpZmllZCB3aGVuIHRoZSB3b3JraW5nCisgKiBkaXJlY3RvcnkgY2hhbmdlcywgYW5kIG90aGVyIGNvZGUgdGhhdCBjYWxscyBjaGRpciB1c2VzIGEgc3BlY2lhbCB3cmFwcGVyCisgKiB0aGF0IG5vdGlmaWVzIGV2ZXJ5b25lLgorICovCisKKy8qCisgKiBDYWxsZXJzIHdobyBuZWVkIHRvIGtub3cgYWJvdXQgY2hhbmdlcyBjYW4gZG86CisgKgorICogICB2b2lkIGZvbyhjb25zdCBjaGFyICpvbGRfcGF0aCwgY29uc3QgY2hhciAqbmV3X3BhdGgsIHZvaWQgKmRhdGEpCisgKiAgIHsKKyAqCXdhcm5pbmcoInN3aXRjaGVkIGZyb20gJXMgdG8gJXMhIiwgb2xkX3BhdGgsIG5ld19wYXRoKTsKKyAqICAgfQorICogICAuLi4KKyAqICAgY2hkaXJfbm90aWZ5X3JlZ2lzdGVyKCJkZXNjcmlwdGlvbiIsIGZvbywgZGF0YSk7CisgKgorICogSW4gcHJhY3RpY2UgbW9zdCBjYWxsZXJzIHdpbGwgd2FudCB0byBtb3ZlIGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgbmV3IHJvb3Q7CisgKiB0aGV5IGNhbiB1c2UgdGhlIHJlcGFyZW50X3JlbGF0aXZlX3BhdGgoKSBoZWxwZXIgZm9yIHRoYXQuIElmIHRoYXQncyBhbGwKKyAqIHlvdSdyZSBkb2luZywgeW91IGNhbiBhbHNvIHVzZSB0aGUgY29udmVuaWVuY2UgZnVuY3Rpb246CisgKgorICogICBjaGRpcl9ub3RpZnlfcmVwYXJlbnQoImRlc2NyaXB0aW9uIiwgJm15X3BhdGgpOworICoKKyAqIFdoZW5ldmVyIGEgY2hkaXIgZXZlbnQgb2NjdXJzLCB0aGF0IHdpbGwgdXBkYXRlIG15X3BhdGggKGlmIGl0J3MgcmVsYXRpdmUpCisgKiB0byBhZGp1c3QgZm9yIHRoZSBuZXcgY3dkIGJ5IGZyZWVpbmcgYW55IGV4aXN0aW5nIHN0cmluZyBhbmQgYWxsb2NhdGluZyBhCisgKiBuZXcgb25lLgorICoKKyAqIFJlZ2lzdGVyZWQgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZSBhZGRlZC4gTm90ZQorICogdGhhdCB0aGVyZSdzIGN1cnJlbnRseSBubyB3YXkgdG8gcmVtb3ZlIGEgZnVuY3Rpb24sIHNvIG1ha2Ugc3VyZSB0aGF0IHRoZQorICogZGF0YSBwYXJhbWV0ZXIgcmVtYWlucyB2YWxpZCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHByb2dyYW0uCisgKgorICogVGhlICJuYW1lIiBhcmd1bWVudCBpcyB1c2VkIG9ubHkgZm9yIHByaW50aW5nIHRyYWNlIG91dHB1dCBmcm9tCisgKiAkR0lUX1RSQUNFX1NFVFVQLiBJdCBtYXkgYmUgTlVMTCwgYnV0IGlmIG5vbi1OVUxMIHNob3VsZCBwb2ludCB0bworICogc3RvcmFnZSB3aGljaCBsYXN0cyBhcyBsb25nIGFzIHRoZSByZWdpc3RyYXRpb24gaXMgYWN0aXZlLgorICovCit0eXBlZGVmIHZvaWQgKCpjaGRpcl9ub3RpZnlfY2FsbGJhY2spKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICAgY29uc3QgY2hhciAqb2xkX2N3ZCwKKwkJCQkgICAgICBjb25zdCBjaGFyICpuZXdfY3dkLAorCQkJCSAgICAgIHZvaWQgKmRhdGEpOwordm9pZCBjaGRpcl9ub3RpZnlfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwgY2hkaXJfbm90aWZ5X2NhbGxiYWNrIGNiLCB2b2lkICpkYXRhKTsKK3ZvaWQgY2hkaXJfbm90aWZ5X3JlcGFyZW50KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKipwYXRoKTsKKworLyoKKyAqCisgKiBDYWxsZXJzIHRoYXQgd2FudCB0byBjaGRpcjoKKyAqCisgKiAgIGNoZGlyX25vdGlmeShuZXdfcGF0aCk7CisgKgorICogdG8gc3dpdGNoIHRvIHRoZSBuZXcgcGF0aCBhbmQgbm90aWZ5IGFueSBjYWxsYmFja3MuCisgKgorICogTm90ZSB0aGF0IHlvdSBkb24ndCBuZWVkIHRvIGNoZGlyX25vdGlmeSgpIGlmIHlvdSdyZSBqdXN0IHRlbXBvcmFyaWx5IG1vdmluZworICogdG8gYSBkaXJlY3RvcnkgYW5kIGJhY2ssIGFzIGxvbmcgYXMgeW91IGRvbid0IGNhbGwgYW55IHN1YnNjcmliZWQgY29kZSBpbgorICogYmV0d2VlbiAoYnV0IGl0IHNob3VsZCBiZSBzYWZlIHRvIGRvIHNvIGlmIHlvdSdyZSB1bnN1cmUpLgorICovCitpbnQgY2hkaXJfbm90aWZ5KGNvbnN0IGNoYXIgKm5ld19jd2QpOworCisvKgorICogUmVwYXJlbnQgYSByZWxhdGl2ZSBwYXRoIGZyb20gb2xkX3Jvb3QgdG8gbmV3X3Jvb3QuIEZvciBleGFtcGxlOgorICoKKyAqICAgcmVwYXJlbnRfcmVsYXRpdmVfcGF0aCgiL2EiLCAiL2EvYiIsICJiL3JlbCIpOworICoKKyAqIHdvdWxkIHJldHVybiB0aGUgKG5ld2x5IGFsbG9jYXRlZCkgc3RyaW5nICJyZWwiLiBOb3RlIHRoYXQgd2UgbWF5IHJldHVybiBhbgorICogYWJzb2x1dGUgcGF0aCBpbiBzb21lIGNhc2VzIChlLmcuLCBpZiB0aGUgcmVzdWx0aW5nIHBhdGggaXMgbm90IGluc2lkZQorICogbmV3X2N3ZCkuCisgKi8KK2NoYXIgKnJlcGFyZW50X3JlbGF0aXZlX3BhdGgoY29uc3QgY2hhciAqb2xkX2N3ZCwKKwkJCSAgICAgY29uc3QgY2hhciAqbmV3X2N3ZCwKKwkJCSAgICAgY29uc3QgY2hhciAqcGF0aCk7CisKKyNlbmRpZiAvKiBDSERJUl9OT1RJRllfSCAqLwpkaWZmIC0tZ2l0IGEvY2hlY2stYnVpbHRpbnMuc2ggYi9jaGVjay1idWlsdGlucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMGFhZjNhCi0tLSAvZGV2L251bGwKKysrIGIvY2hlY2stYnVpbHRpbnMuc2gKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisKK3sKKwljYXQgPDxcRU9GCitzYXlJdDoKKwkkKGZvcmVhY2ggYiwkKEJVSUxUX0lOUyksZWNobyBYWFggJChiOiRYPSkgWVlZOykKK0VPRgorCWNhdCBNYWtlZmlsZQorfSB8CittYWtlIC1mIC0gc2F5SXQgMj4vZGV2L251bGwgfAorc2VkIC1uIC1lICdzLy4qWFhYIFwoLipcKSBZWVkuKi9cMS9wJyB8Citzb3J0IHwKK3sKKyAgICBiYWQ9MAorICAgIHdoaWxlIHJlYWQgYnVpbHRpbgorICAgIGRvCisJYmFzZT0kKGV4cHIgIiRidWlsdGluIiA6ICdnaXQtXCguKlwpJykKKwl4PSQoc2VkIC1uZSAncy8uKnsgIickYmFzZSciLCBcKGNtZF9bXiwgXSpcKS4qLyckYmFzZScJXDEvcCcgZ2l0LmMpCisJaWYgdGVzdCAteiAiJHgiCisJdGhlbgorCQllY2hvICIkYmFzZSBpcyBidWlsdGluIGJ1dCBub3QgbGlzdGVkIGluIGdpdC5jIGNvbW1hbmQgbGlzdCIKKwkJYmFkPTEKKwlmaQorCWZvciBzZnggaW4gc2ggcGVybCBweQorCWRvCisJCWlmIHRlc3QgLWYgIiRidWlsdGluLiRzZngiCisJCXRoZW4KKwkJCWVjaG8gIiRiYXNlIGlzIGJ1aWx0aW4gYnV0ICRidWlsdGluLiRzZnggc3RpbGwgZXhpc3RzIgorCQkJYmFkPTEKKwkJZmkKKwlkb25lCisgICAgZG9uZQorICAgIGV4aXQgJGJhZAorfQpkaWZmIC0tZ2l0IGEvY2hlY2tfYmluZGlyIGIvY2hlY2tfYmluZGlyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyM2VhZGMKLS0tIC9kZXYvbnVsbAorKysgYi9jaGVja19iaW5kaXIKQEAgLTAsMCArMSwxMyBAQAorIyEvYmluL3NoCitiaW5kaXI9IiQxIgorZ2l0ZXhlY2Rpcj0iJDIiCitnaXRjbWQ9IiQzIgoraWYgdGVzdCAiJGJpbmRpciIgIT0gIiRnaXRleGVjZGlyIiAmJiB0ZXN0IC14ICIkZ2l0Y21kIgordGhlbgorCWVjaG8KKwllY2hvICIhISBZb3UgaGF2ZSBpbnN0YWxsZWQgZ2l0LSogY29tbWFuZHMgdG8gbmV3IGdpdGV4ZWNkaXIuIgorCWVjaG8gIiEhIE9sZCB2ZXJzaW9uIGdpdC0qIGNvbW1hbmRzIHN0aWxsIHJlbWFpbiBpbiBiaW5kaXIuIgorCWVjaG8gIiEhIE1peGluZyB0d28gdmVyc2lvbnMgb2YgR2l0IHdpbGwgbGVhZCB0byBwcm9ibGVtcy4iCisJZWNobyAiISEgUGxlYXNlIHJlbW92ZSBvbGQgdmVyc2lvbiBjb21tYW5kcyBpbiBiaW5kaXIgbm93LiIKKwllY2hvCitmaQpkaWZmIC0tZ2l0IGEvY2hlY2tvdXQuYyBiL2NoZWNrb3V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyZTlmOQotLS0gL2Rldi9udWxsCisrKyBiL2NoZWNrb3V0LmMKQEAgLTAsMCArMSw3MSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAicmVmc3BlYy5oIgorI2luY2x1ZGUgImNoZWNrb3V0LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisKK3N0cnVjdCB0cmFja2luZ19uYW1lX2RhdGEgeworCS8qIGNvbnN0ICovIGNoYXIgKnNyY19yZWY7CisJY2hhciAqZHN0X3JlZjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpkc3Rfb2lkOworCWludCBudW1fbWF0Y2hlczsKKwljb25zdCBjaGFyICpkZWZhdWx0X3JlbW90ZTsKKwljaGFyICpkZWZhdWx0X2RzdF9yZWY7CisJc3RydWN0IG9iamVjdF9pZCAqZGVmYXVsdF9kc3Rfb2lkOworfTsKKworI2RlZmluZSBUUkFDS0lOR19OQU1FX0RBVEFfSU5JVCB7IE5VTEwsIE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwgfQorCitzdGF0aWMgaW50IGNoZWNrX3RyYWNraW5nX25hbWUoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCB0cmFja2luZ19uYW1lX2RhdGEgKmNiID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmc3BlY19pdGVtIHF1ZXJ5OworCW1lbXNldCgmcXVlcnksIDAsIHNpemVvZihzdHJ1Y3QgcmVmc3BlY19pdGVtKSk7CisJcXVlcnkuc3JjID0gY2ItPnNyY19yZWY7CisJaWYgKHJlbW90ZV9maW5kX3RyYWNraW5nKHJlbW90ZSwgJnF1ZXJ5KSB8fAorCSAgICBnZXRfb2lkKHF1ZXJ5LmRzdCwgY2ItPmRzdF9vaWQpKSB7CisJCWZyZWUocXVlcnkuZHN0KTsKKwkJcmV0dXJuIDA7CisJfQorCWNiLT5udW1fbWF0Y2hlcysrOworCWlmIChjYi0+ZGVmYXVsdF9yZW1vdGUgJiYgIXN0cmNtcChyZW1vdGUtPm5hbWUsIGNiLT5kZWZhdWx0X3JlbW90ZSkpIHsKKwkJc3RydWN0IG9iamVjdF9pZCAqZHN0ID0geG1hbGxvYyhzaXplb2YoKmNiLT5kZWZhdWx0X2RzdF9vaWQpKTsKKwkJY2ItPmRlZmF1bHRfZHN0X3JlZiA9IHhzdHJkdXAocXVlcnkuZHN0KTsKKwkJb2lkY3B5KGRzdCwgY2ItPmRzdF9vaWQpOworCQljYi0+ZGVmYXVsdF9kc3Rfb2lkID0gZHN0OworCX0KKwlpZiAoY2ItPmRzdF9yZWYpIHsKKwkJZnJlZShxdWVyeS5kc3QpOworCQlyZXR1cm4gMDsKKwl9CisJY2ItPmRzdF9yZWYgPSBxdWVyeS5kc3Q7CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKnVuaXF1ZV90cmFja2luZ19uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgaW50ICpkd2ltX3JlbW90ZXNfbWF0Y2hlZCkKK3sKKwlzdHJ1Y3QgdHJhY2tpbmdfbmFtZV9kYXRhIGNiX2RhdGEgPSBUUkFDS0lOR19OQU1FX0RBVEFfSU5JVDsKKwljb25zdCBjaGFyICpkZWZhdWx0X3JlbW90ZSA9IE5VTEw7CisJaWYgKCFnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3QoImNoZWNrb3V0LmRlZmF1bHRyZW1vdGUiLCAmZGVmYXVsdF9yZW1vdGUpKQorCQljYl9kYXRhLmRlZmF1bHRfcmVtb3RlID0gZGVmYXVsdF9yZW1vdGU7CisJY2JfZGF0YS5zcmNfcmVmID0geHN0cmZtdCgicmVmcy9oZWFkcy8lcyIsIG5hbWUpOworCWNiX2RhdGEuZHN0X29pZCA9IG9pZDsKKwlmb3JfZWFjaF9yZW1vdGUoY2hlY2tfdHJhY2tpbmdfbmFtZSwgJmNiX2RhdGEpOworCWlmIChkd2ltX3JlbW90ZXNfbWF0Y2hlZCkKKwkJKmR3aW1fcmVtb3Rlc19tYXRjaGVkID0gY2JfZGF0YS5udW1fbWF0Y2hlczsKKwlmcmVlKGNiX2RhdGEuc3JjX3JlZik7CisJZnJlZSgoY2hhciAqKWRlZmF1bHRfcmVtb3RlKTsKKwlpZiAoY2JfZGF0YS5udW1fbWF0Y2hlcyA9PSAxKSB7CisJCWZyZWUoY2JfZGF0YS5kZWZhdWx0X2RzdF9yZWYpOworCQlmcmVlKGNiX2RhdGEuZGVmYXVsdF9kc3Rfb2lkKTsKKwkJcmV0dXJuIGNiX2RhdGEuZHN0X3JlZjsKKwl9CisJZnJlZShjYl9kYXRhLmRzdF9yZWYpOworCWlmIChjYl9kYXRhLmRlZmF1bHRfZHN0X3JlZikgeworCQlvaWRjcHkob2lkLCBjYl9kYXRhLmRlZmF1bHRfZHN0X29pZCk7CisJCWZyZWUoY2JfZGF0YS5kZWZhdWx0X2RzdF9vaWQpOworCQlyZXR1cm4gY2JfZGF0YS5kZWZhdWx0X2RzdF9yZWY7CisJfQorCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvY2hlY2tvdXQuaCBiL2NoZWNrb3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE1MjEzMwotLS0gL2Rldi9udWxsCisrKyBiL2NoZWNrb3V0LmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBDSEVDS09VVF9ICisjZGVmaW5lIENIRUNLT1VUX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisKKy8qCisgKiBDaGVjayBpZiB0aGUgYnJhbmNoIG5hbWUgdW5pcXVlbHkgbWF0Y2hlcyBhIGJyYW5jaCBuYW1lIG9uIGEgcmVtb3RlCisgKiB0cmFja2luZyBicmFuY2guICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBpZiBzdWNoIGEgYnJhbmNoCisgKiBleGlzdHMsIE5VTEwgb3RoZXJ3aXNlLgorICovCitjb25zdCBjaGFyICp1bmlxdWVfdHJhY2tpbmdfbmFtZShjb25zdCBjaGFyICpuYW1lLAorCQkJCSBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJIGludCAqZHdpbV9yZW1vdGVzX21hdGNoZWQpOworCisjZW5kaWYgLyogQ0hFQ0tPVVRfSCAqLwpkaWZmIC0tZ2l0IGEvY2kvY29uZmlnL2FsbG93LXJlZnMuc2FtcGxlIGIvY2kvY29uZmlnL2FsbG93LXJlZnMuc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxNTdmMTkKLS0tIC9kZXYvbnVsbAorKysgYi9jaS9jb25maWcvYWxsb3ctcmVmcy5zYW1wbGUKQEAgLTAsMCArMSwyNiBAQAorIyEvYmluL3NoCisjCisjIFNhbXBsZSBzY3JpcHQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBHaXRIdWIgQWN0aW9ucyBDSSBydW5zIG9uCisjIHBhcnRpY3VsYXIgcmVmcy4gQnkgZGVmYXVsdCwgQ0kgaXMgcnVuIGZvciBhbGwgYnJhbmNoZXMgcHVzaGVkIHRvCisjIEdpdEh1Yi4gWW91IGNhbiBvdmVycmlkZSB0aGlzIGJ5IGRyb3BwaW5nIHRoZSAiLnNhbXBsZSIgZnJvbSB0aGUgc2NyaXB0LAorIyBlZGl0aW5nIGl0LCBjb21taXR0aW5nLCBhbmQgcHVzaGluZyB0aGUgcmVzdWx0IHRvIHRoZSAiY2ktY29uZmlnIiBicmFuY2ggb2YKKyMgeW91ciByZXBvc2l0b3J5OgorIworIyAgIGdpdCBjaGVja291dCAtYiBjaS1jb25maWcKKyMgICBjcCBhbGxvdy1yZWZzLnNhbXBsZSBhbGxvdy1yZWZzCisjICAgJEVESVRPUiBhbGxvdy1yZWZzCisjICAgZ2l0IGNvbW1pdCAtYW0gImltcGxlbWVudCBteSBjaSBwcmVmZXJlbmNlcyIKKyMgICBnaXQgcHVzaAorIworIyBUaGlzIHNjcmlwdCB3aWxsIHRoZW4gYmUgcnVuIHdoZW4gYW55IHJlZnMgYXJlIHB1c2hlZCB0byB0aGF0IHJlcG9zaXRvcnkuIEl0CisjIGdldHMgdGhlIGZ1bGx5IHF1YWxpZmllZCByZWZuYW1lIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgYW5kIHNob3VsZCBleGl0IHdpdGgKKyMgc3VjY2VzcyBvbmx5IGZvciByZWZzIGZvciB3aGljaCB5b3Ugd2FudCB0byBydW4gQ0kuCisKK2Nhc2UgIiQxIiBpbgorIyBhbGxvdyBvbmUtb2ZmIHRlc3RzIGJ5IHB1c2hpbmcgdG8gImZvci1jaSIgb3IgImZvci1jaS9teWJyYW5jaCIKK3JlZnMvaGVhZHMvZm9yLWNpKikgdHJ1ZSA7OworIyBhbHdheXMgYnVpbGQgeW91ciBpbnRlZ3JhdGlvbiBicmFuY2gKK3JlZnMvaGVhZHMvbXktaW50ZWdyYXRpb24tYnJhbmNoKSB0cnVlIDs7CisjIGRvbid0IGJ1aWxkIGFueSBvdGhlciBicmFuY2hlcyBvciB0YWdzCisqKSBmYWxzZSA7OworZXNhYwpkaWZmIC0tZ2l0IGEvY2kvaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2ggYi9jaS9pbnN0YWxsLWRlcGVuZGVuY2llcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMjI5YTc3Ci0tLSAvZGV2L251bGwKKysrIGIvY2kvaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2gKQEAgLTAsMCArMSw5MiBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorIworIyBJbnN0YWxsIGRlcGVuZGVuY2llcyByZXF1aXJlZCB0byBidWlsZCBhbmQgdGVzdCBHaXQgb24gTGludXggYW5kIG1hY09TCisjCisKKy4gJHswJS8qfS9saWIuc2gKKworUDRXSEVOQ0U9aHR0cDovL2ZpbGVob3N0LnBlcmZvcmNlLmNvbS9wZXJmb3JjZS9yJExJTlVYX1A0X1ZFUlNJT04KK0xGU1dIRU5DRT1odHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2dpdC1sZnMvcmVsZWFzZXMvZG93bmxvYWQvdiRMSU5VWF9HSVRfTEZTX1ZFUlNJT04KK1VCVU5UVV9DT01NT05fUEtHUz0ibWFrZSBsaWJzc2wtZGV2IGxpYmN1cmw0LW9wZW5zc2wtZGV2IGxpYmV4cGF0LWRldgorIHRjbCB0ayBnZXR0ZXh0IHpsaWIxZy1kZXYgcGVybC1tb2R1bGVzIGxpYmVycm9yLXBlcmwgbGliYXV0aGVuLXNhc2wtcGVybAorIGxpYmVtYWlsLXZhbGlkLXBlcmwgbGliaW8tc29ja2V0LXNzbC1wZXJsIGxpYm5ldC1zbXRwLXNzbC1wZXJsIgorCitjYXNlICIkam9ibmFtZSIgaW4KK2xpbnV4LWNsYW5nfGxpbnV4LWdjYykKKwlzdWRvIGFwdC1hZGQtcmVwb3NpdG9yeSAteSAicHBhOnVidW50dS10b29sY2hhaW4tci90ZXN0IgorCXN1ZG8gYXB0LWdldCAtcSB1cGRhdGUKKwlzdWRvIGFwdC1nZXQgLXEgLXkgaW5zdGFsbCBsYW5ndWFnZS1wYWNrLWlzIGxpYnN2bi1wZXJsIGFwYWNoZTIgXAorCQkkVUJVTlRVX0NPTU1PTl9QS0dTCisJY2FzZSAiJGpvYm5hbWUiIGluCisJbGludXgtZ2NjKQorCQlzdWRvIGFwdC1nZXQgLXEgLXkgaW5zdGFsbCBnY2MtOAorCQk7OworCWVzYWMKKworCW1rZGlyIC0tcGFyZW50cyAiJFA0X1BBVEgiCisJcHVzaGQgIiRQNF9QQVRIIgorCQl3Z2V0IC0tcXVpZXQgIiRQNFdIRU5DRS9iaW4ubGludXgyNng4Nl82NC9wNGQiCisJCXdnZXQgLS1xdWlldCAiJFA0V0hFTkNFL2Jpbi5saW51eDI2eDg2XzY0L3A0IgorCQljaG1vZCB1K3ggcDRkCisJCWNobW9kIHUreCBwNAorCXBvcGQKKwlta2RpciAtLXBhcmVudHMgIiRHSVRfTEZTX1BBVEgiCisJcHVzaGQgIiRHSVRfTEZTX1BBVEgiCisJCXdnZXQgLS1xdWlldCAiJExGU1dIRU5DRS9naXQtbGZzLWxpbnV4LWFtZDY0LSRMSU5VWF9HSVRfTEZTX1ZFUlNJT04udGFyLmd6IgorCQl0YXIgLS1leHRyYWN0IC0tZ3VuemlwIC0tZmlsZSAiZ2l0LWxmcy1saW51eC1hbWQ2NC0kTElOVVhfR0lUX0xGU19WRVJTSU9OLnRhci5neiIKKwkJY3AgZ2l0LWxmcy0kTElOVVhfR0lUX0xGU19WRVJTSU9OL2dpdC1sZnMgLgorCXBvcGQKKwk7Oworb3N4LWNsYW5nfG9zeC1nY2MpCisJZXhwb3J0IEhPTUVCUkVXX05PX0FVVE9fVVBEQVRFPTEgSE9NRUJSRVdfTk9fSU5TVEFMTF9DTEVBTlVQPTEKKwkjIFVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IHRvIHJ1biBwZXJmIHRlc3RzOgorCSMgYnJldyBpbnN0YWxsIGdudS10aW1lCisJdGVzdCAteiAiJEJSRVdfSU5TVEFMTF9QQUNLQUdFUyIgfHwKKwlicmV3IGluc3RhbGwgJEJSRVdfSU5TVEFMTF9QQUNLQUdFUworCWJyZXcgbGluayAtLWZvcmNlIGdldHRleHQKKwlicmV3IGNhc2sgaW5zdGFsbCAtLW5vLXF1YXJhbnRpbmUgcGVyZm9yY2UgfHwgeworCQkjIFVwZGF0ZSB0aGUgZGVmaW5pdGlvbnMgYW5kIHRyeSBhZ2FpbgorCQljYXNrX3JlcG89IiQoYnJldyAtLXJlcG9zaXRvcnkpIi9MaWJyYXJ5L1RhcHMvaG9tZWJyZXcvaG9tZWJyZXctY2FzayAmJgorCQlnaXQgLUMgIiRjYXNrX3JlcG8iIHB1bGwgLS1uby1zdGF0ICYmCisJCWJyZXcgY2FzayBpbnN0YWxsIC0tbm8tcXVhcmFudGluZSBwZXJmb3JjZQorCX0gfHwKKwlicmV3IGluc3RhbGwgY2Fza3Jvb20vY2Fzay9wZXJmb3JjZQorCWNhc2UgIiRqb2JuYW1lIiBpbgorCW9zeC1nY2MpCisJCWJyZXcgaW5zdGFsbCBnY2NAOQorCQkjIEp1c3QgaW4gY2FzZSB0aGUgaW1hZ2UgaXMgdXBkYXRlZCB0byBjb250YWluIGdjY0A5CisJCSMgcHJlLWluc3RhbGxlZCBidXQgbm90IGxpbmtlZC4KKwkJYnJldyBsaW5rIGdjY0A5CisJCTs7CisJZXNhYworCTs7CitTdGF0aWNBbmFseXNpcykKKwlzdWRvIGFwdC1nZXQgLXEgdXBkYXRlCisJc3VkbyBhcHQtZ2V0IC1xIC15IGluc3RhbGwgY29jY2luZWxsZSBsaWJjdXJsNC1vcGVuc3NsLWRldiBsaWJzc2wtZGV2IFwKKwkJbGliZXhwYXQtZGV2IGdldHRleHQgbWFrZQorCTs7CitEb2N1bWVudGF0aW9uKQorCXN1ZG8gYXB0LWdldCAtcSB1cGRhdGUKKwlzdWRvIGFwdC1nZXQgLXEgLXkgaW5zdGFsbCBhc2NpaWRvYyB4bWx0byBkb2Nib29rLXhzbC1ucyBtYWtlCisKKwl0ZXN0IC1uICIkQUxSRUFEWV9IQVZFX0FTQ0lJRE9DVE9SIiB8fAorCXN1ZG8gZ2VtIGluc3RhbGwgLS12ZXJzaW9uIDEuNS44IGFzY2lpZG9jdG9yCisJOzsKK2xpbnV4LWdjYy00Ljh8R0VUVEVYVF9QT0lTT04pCisJc3VkbyBhcHQtZ2V0IC1xIHVwZGF0ZQorCXN1ZG8gYXB0LWdldCAtcSAteSBpbnN0YWxsICRVQlVOVFVfQ09NTU9OX1BLR1MKKwk7OworZXNhYworCitpZiB0eXBlIHA0ZCA+L2Rldi9udWxsICYmIHR5cGUgcDQgPi9kZXYvbnVsbAordGhlbgorCWVjaG8gIiQodHB1dCBzZXRhZiA2KVBlcmZvcmNlIFNlcnZlciBWZXJzaW9uJCh0cHV0IHNncjApIgorCXA0ZCAtViB8IGdyZXAgUmV2LgorCWVjaG8gIiQodHB1dCBzZXRhZiA2KVBlcmZvcmNlIENsaWVudCBWZXJzaW9uJCh0cHV0IHNncjApIgorCXA0IC1WIHwgZ3JlcCBSZXYuCitmaQoraWYgdHlwZSBnaXQtbGZzID4vZGV2L251bGwKK3RoZW4KKwllY2hvICIkKHRwdXQgc2V0YWYgNilHaXQtTEZTIFZlcnNpb24kKHRwdXQgc2dyMCkiCisJZ2l0LWxmcyB2ZXJzaW9uCitmaQpkaWZmIC0tZ2l0IGEvY2kvaW5zdGFsbC1kb2NrZXItZGVwZW5kZW5jaWVzLnNoIGIvY2kvaW5zdGFsbC1kb2NrZXItZGVwZW5kZW5jaWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI2YTY2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9jaS9pbnN0YWxsLWRvY2tlci1kZXBlbmRlbmNpZXMuc2gKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisjCisjIEluc3RhbGwgZGVwZW5kZW5jaWVzIHJlcXVpcmVkIHRvIGJ1aWxkIGFuZCB0ZXN0IEdpdCBpbnNpZGUgY29udGFpbmVyCisjCisKK2Nhc2UgIiRqb2JuYW1lIiBpbgorTGludXgzMikKKwlsaW51eDMyIC0tMzJiaXQgaTM4NiBzaCAtYyAnCisJCWFwdCB1cGRhdGUgPi9kZXYvbnVsbCAmJgorCQlhcHQgaW5zdGFsbCAteSBidWlsZC1lc3NlbnRpYWwgbGliY3VybDQtb3BlbnNzbC1kZXYgXAorCQkJbGlic3NsLWRldiBsaWJleHBhdC1kZXYgZ2V0dGV4dCBweXRob24gPi9kZXYvbnVsbAorCScKKwk7OworbGludXgtbXVzbCkKKwlhcGsgYWRkIC0tdXBkYXRlIGJ1aWxkLWJhc2UgY3VybC1kZXYgb3BlbnNzbC1kZXYgZXhwYXQtZGV2IGdldHRleHQgXAorCQlwY3JlMi1kZXYgcHl0aG9uMyBtdXNsLWxpYmludGwgcGVybC11dGlscyBuY3Vyc2VzID4vZGV2L251bGwKKwk7OworZXNhYwpkaWZmIC0tZ2l0IGEvY2kvbGliLnNoIGIvY2kvbGliLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmMjRjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9jaS9saWIuc2gKQEAgLTAsMCArMSwyMzMgQEAKKyMgTGlicmFyeSBvZiBmdW5jdGlvbnMgc2hhcmVkIGJ5IGFsbCBDSSBzY3JpcHRzCisKK3NraXBfYnJhbmNoX3RpcF93aXRoX3RhZyAoKSB7CisJIyBTb21ldGltZXMsIGEgYnJhbmNoIGlzIHB1c2hlZCBhdCB0aGUgc2FtZSB0aW1lIHRoZSB0YWcgdGhhdCBwb2ludHMKKwkjIGF0IHRoZSBzYW1lIGNvbW1pdCBhcyB0aGUgdGlwIG9mIHRoZSBicmFuY2ggaXMgcHVzaGVkLCBhbmQgYnVpbGRpbmcKKwkjIGJvdGggYXQgdGhlIHNhbWUgdGltZSBpcyBhIHdhc3RlLgorCSMKKwkjIFdoZW4gdGhlIGJ1aWxkIGlzIHRyaWdnZXJlZCBieSBhIHB1c2ggdG8gYSB0YWcsICRDSV9CUkFOQ0ggd2lsbAorCSMgaGF2ZSB0aGF0IHRhZ25hbWUsIGUuZy4gdjIuMTQuMC4gIExldCdzIHNlZSBpZiAkQ0lfQlJBTkNIIGlzCisJIyBleGFjdGx5IGF0IGEgdGFnLCBhbmQgaWYgc28sIGlmIGl0IGlzIGRpZmZlcmVudCBmcm9tICRDSV9CUkFOQ0guCisJIyBUaGF0IHdheSwgd2UgY2FuIHRlbGwgaWYgd2UgYXJlIGJ1aWxkaW5nIHRoZSB0aXAgb2YgYSBicmFuY2ggdGhhdAorCSMgaXMgdGFnZ2VkIGFuZCB3ZSBjYW4gc2tpcCB0aGUgYnVpbGQgYmVjYXVzZSB3ZSB3b24ndCBiZSBza2lwcGluZyBhCisJIyBidWlsZCBvZiBhIHRhZy4KKworCWlmIFRBRz0kKGdpdCBkZXNjcmliZSAtLWV4YWN0LW1hdGNoICIkQ0lfQlJBTkNIIiAyPi9kZXYvbnVsbCkgJiYKKwkJdGVzdCAiJFRBRyIgIT0gIiRDSV9CUkFOQ0giCisJdGhlbgorCQllY2hvICIkKHRwdXQgc2V0YWYgMilUaXAgb2YgJENJX0JSQU5DSCBpcyBleGFjdGx5IGF0ICRUQUckKHRwdXQgc2dyMCkiCisJCWV4aXQgMAorCWZpCit9CisKKyMgU2F2ZSBzb21lIGluZm8gYWJvdXQgdGhlIGN1cnJlbnQgY29tbWl0J3MgdHJlZSwgc28gd2UgY2FuIHNraXAgdGhlIGJ1aWxkCisjIGpvYiBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWUgdHJlZSBhZ2FpbiBhbmQgY2FuIHByb3ZpZGUgYSB1c2VmdWwgaW5mbworIyBtZXNzYWdlLgorc2F2ZV9nb29kX3RyZWUgKCkgeworCWVjaG8gIiQoZ2l0IHJldi1wYXJzZSAkQ0lfQ09NTUlUXnt0cmVlfSkgJENJX0NPTU1JVCAkQ0lfSk9CX05VTUJFUiAkQ0lfSk9CX0lEIiA+PiIkZ29vZF90cmVlc19maWxlIgorCSMgbGltaXQgdGhlIGZpbGUgc2l6ZQorCXRhaWwgLTEwMDAgIiRnb29kX3RyZWVzX2ZpbGUiID4iJGdvb2RfdHJlZXNfZmlsZSIudG1wCisJbXYgIiRnb29kX3RyZWVzX2ZpbGUiLnRtcCAiJGdvb2RfdHJlZXNfZmlsZSIKK30KKworIyBTa2lwIHRoZSBidWlsZCBqb2IgaWYgdGhlIHNhbWUgdHJlZSBoYXMgYWxyZWFkeSBiZWVuIGJ1aWx0IGFuZCB0ZXN0ZWQKKyMgc3VjY2Vzc2Z1bGx5IGJlZm9yZSAoZS5nLiBiZWNhdXNlIHRoZSBicmFuY2ggZ290IHJlYmFzZWQsIGNoYW5naW5nIG9ubHkKKyMgdGhlIGNvbW1pdCBtZXNzYWdlcykuCitza2lwX2dvb2RfdHJlZSAoKSB7CisJaWYgdGVzdCAiJFRSQVZJU19ERUJVR19NT0RFIiA9IHRydWUgfHwgdGVzdCB0cnVlID0gIiRHSVRIVUJfQUNUSU9OUyIKKwl0aGVuCisJCXJldHVybgorCWZpCisKKwlpZiAhIGdvb2RfdHJlZV9pbmZvPSIkKGdyZXAgIl4kKGdpdCByZXYtcGFyc2UgJENJX0NPTU1JVF57dHJlZX0pICIgIiRnb29kX3RyZWVzX2ZpbGUiKSIKKwl0aGVuCisJCSMgSGF2ZW4ndCBzZWVuIHRoaXMgdHJlZSB5ZXQsIG9yIG5vIGNhY2hlZCBnb29kIHRyZWVzIGZpbGUgeWV0LgorCQkjIENvbnRpbnVlIHRoZSBidWlsZCBqb2IuCisJCXJldHVybgorCWZpCisKKwllY2hvICIkZ29vZF90cmVlX2luZm8iIHwgeworCQlyZWFkIHRyZWUgcHJldl9nb29kX2NvbW1pdCBwcmV2X2dvb2Rfam9iX251bWJlciBwcmV2X2dvb2Rfam9iX2lkCisKKwkJaWYgdGVzdCAiJENJX0pPQl9JRCIgPSAiJHByZXZfZ29vZF9qb2JfaWQiCisJCXRoZW4KKwkJCWNhdCA8PC1FT0YKKwkJCSQodHB1dCBzZXRhZiAyKVNraXBwaW5nIGJ1aWxkIGpvYiBmb3IgY29tbWl0ICRDSV9DT01NSVQuJCh0cHV0IHNncjApCisJCQlUaGlzIGNvbW1pdCBoYXMgYWxyZWFkeSBiZWVuIGJ1aWx0IGFuZCB0ZXN0ZWQgc3VjY2Vzc2Z1bGx5IGJ5IHRoaXMgYnVpbGQgam9iLgorCQkJVG8gZm9yY2UgYSByZS1idWlsZCBkZWxldGUgdGhlIGJyYW5jaCdzIGNhY2hlIGFuZCB0aGVuIGhpdCAnUmVzdGFydCBqb2InLgorCQkJRU9GCisJCWVsc2UKKwkJCWNhdCA8PC1FT0YKKwkJCSQodHB1dCBzZXRhZiAyKVNraXBwaW5nIGJ1aWxkIGpvYiBmb3IgY29tbWl0ICRDSV9DT01NSVQuJCh0cHV0IHNncjApCisJCQlUaGlzIGNvbW1pdCdzIHRyZWUgaGFzIGFscmVhZHkgYmVlbiBidWlsdCBhbmQgdGVzdGVkIHN1Y2Nlc3NmdWxseSBpbiBidWlsZCBqb2IgJHByZXZfZ29vZF9qb2JfbnVtYmVyIGZvciBjb21taXQgJHByZXZfZ29vZF9jb21taXQuCisJCQlUaGUgbG9nIG9mIHRoYXQgYnVpbGQgam9iIGlzIGF2YWlsYWJsZSBhdCAkKHVybF9mb3Jfam9iX2lkICRwcmV2X2dvb2Rfam9iX2lkKQorCQkJVG8gZm9yY2UgYSByZS1idWlsZCBkZWxldGUgdGhlIGJyYW5jaCdzIGNhY2hlIGFuZCB0aGVuIGhpdCAnUmVzdGFydCBqb2InLgorCQkJRU9GCisJCWZpCisJfQorCisJZXhpdCAwCit9CisKK2NoZWNrX3VuaWdub3JlZF9idWlsZF9hcnRpZmFjdHMgKCkKK3sKKwkhIGdpdCBscy1maWxlcyAtLW90aGVyIC0tZXhjbHVkZS1zdGFuZGFyZCAtLWVycm9yLXVubWF0Y2ggXAorCQktLSAnOi8qJyAyPi9kZXYvbnVsbCB8fAorCXsKKwkJZWNobyAiJCh0cHV0IHNldGFmIDEpZXJyb3I6IGZvdW5kIHVuaWdub3JlZCBidWlsZCBhcnRpZmFjdHMkKHRwdXQgc2dyMCkiCisJCWZhbHNlCisJfQorfQorCisjIEdpdEh1YiBBY3Rpb24gZG9lc24ndCBzZXQgVEVSTSwgd2hpY2ggaXMgcmVxdWlyZWQgYnkgdHB1dAorZXhwb3J0IFRFUk09JHtURVJNOi1kdW1ifQorCisjIENsZWFyIE1BS0VGTEFHUyB0aGF0IG1heSBjb21lIGZyb20gdGhlIG91dHNpZGUgd29ybGQuCitleHBvcnQgTUFLRUZMQUdTPQorCisjIFNldCAnZXhpdCBvbiBlcnJvcicgZm9yIGFsbCBDSSBzY3JpcHRzIHRvIGxldCB0aGUgY2FsbGVyIGtub3cgdGhhdAorIyBzb21ldGhpbmcgd2VudCB3cm9uZy4KKyMgU2V0IHRyYWNpbmcgZXhlY3V0ZWQgY29tbWFuZHMsIHByaW1hcmlseSBzZXR0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcworIyBhbmQgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuCitzZXQgLWV4CisKK2lmIHRlc3QgdHJ1ZSA9ICIkVFJBVklTIgordGhlbgorCUNJX1RZUEU9dHJhdmlzCisJIyBXaGVuIGJ1aWxkaW5nIGEgUFIsIFRSQVZJU19CUkFOQ0ggcmVmZXJzIHRvIHRoZSAqdGFyZ2V0KiBicmFuY2guIE5vdAorCSMgd2hhdCB3ZSB3YW50IGhlcmUuIFdlIHdhbnQgdGhlIHNvdXJjZSBicmFuY2ggaW5zdGVhZC4KKwlDSV9CUkFOQ0g9IiR7VFJBVklTX1BVTExfUkVRVUVTVF9CUkFOQ0g6LSRUUkFWSVNfQlJBTkNIfSIKKwlDSV9DT01NSVQ9IiRUUkFWSVNfQ09NTUlUIgorCUNJX0pPQl9JRD0iJFRSQVZJU19KT0JfSUQiCisJQ0lfSk9CX05VTUJFUj0iJFRSQVZJU19KT0JfTlVNQkVSIgorCUNJX09TX05BTUU9IiRUUkFWSVNfT1NfTkFNRSIKKwlDSV9SRVBPX1NMVUc9IiRUUkFWSVNfUkVQT19TTFVHIgorCisJY2FjaGVfZGlyPSIkSE9NRS90cmF2aXMtY2FjaGUiCisKKwl1cmxfZm9yX2pvYl9pZCAoKSB7CisJCWVjaG8gImh0dHBzOi8vdHJhdmlzLWNpLm9yZy8kQ0lfUkVQT19TTFVHL2pvYnMvJDEiCisJfQorCisJQlJFV19JTlNUQUxMX1BBQ0tBR0VTPSJnaXQtbGZzIGdldHRleHQiCisJZXhwb3J0IEdJVF9QUk9WRV9PUFRTPSItLXRpbWVyIC0tam9icyAzIC0tc3RhdGU9ZmFpbGVkLHNsb3csc2F2ZSIKKwlleHBvcnQgR0lUX1RFU1RfT1BUUz0iLS12ZXJib3NlLWxvZyAteCAtLWltbWVkaWF0ZSIKKwlNQUtFRkxBR1M9IiRNQUtFRkxBR1MgLS1qb2JzPTIiCitlbGlmIHRlc3QgLW4gIiRTWVNURU1fQ09MTEVDVElPTlVSSSIgfHwgdGVzdCAtbiAiJFNZU1RFTV9UQVNLREVGSU5JVElPTlNVUkkiCit0aGVuCisJQ0lfVFlQRT1henVyZS1waXBlbGluZXMKKwkjIFdlIGFyZSBydW5uaW5nIGluIEF6dXJlIFBpcGVsaW5lcworCUNJX0JSQU5DSD0iJEJVSUxEX1NPVVJDRUJSQU5DSCIKKwlDSV9DT01NSVQ9IiRCVUlMRF9TT1VSQ0VWRVJTSU9OIgorCUNJX0pPQl9JRD0iJEJVSUxEX0JVSUxESUQiCisJQ0lfSk9CX05VTUJFUj0iJEJVSUxEX0JVSUxETlVNQkVSIgorCUNJX09TX05BTUU9IiQoZWNobyAiJEFHRU5UX09TIiB8IHRyIEEtWiBhLXopIgorCXRlc3QgZGFyd2luICE9ICIkQ0lfT1NfTkFNRSIgfHwgQ0lfT1NfTkFNRT1vc3gKKwlDSV9SRVBPX1NMVUc9IiQoZXhwciAiJEJVSUxEX1JFUE9TSVRPUllfVVJJIiA6ICcuKi9cKFteL10qL1teL10qXCkkJykiCisJQ0M9IiR7Q0M6LWdjY30iCisKKwkjIHVzZSBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgY2FjaGUgZGlyIChiZWNhdXNlIHRoZSBmaWxlIHNoYXJlIGlzIHNoYXJlZAorCSMgYW1vbmcgKmFsbCogcGhhc2VzKQorCWNhY2hlX2Rpcj0iJEhPTUUvdGVzdC1jYWNoZS8kU1lTVEVNX1BIQVNFTkFNRSIKKworCXVybF9mb3Jfam9iX2lkICgpIHsKKwkJZWNobyAiJFNZU1RFTV9UQVNLREVGSU5JVElPTlNVUkkkU1lTVEVNX1RFQU1QUk9KRUNUL19idWlsZC9yZXN1bHRzP2J1aWxkSWQ9JDEiCisJfQorCisJZXhwb3J0IEdJVF9QUk9WRV9PUFRTPSItLXRpbWVyIC0tam9icyAxMCAtLXN0YXRlPWZhaWxlZCxzbG93LHNhdmUiCisJZXhwb3J0IEdJVF9URVNUX09QVFM9Ii0tdmVyYm9zZS1sb2cgLXggLS13cml0ZS1qdW5pdC14bWwiCisJTUFLRUZMQUdTPSIkTUFLRUZMQUdTIC0tam9icz0xMCIKKwl0ZXN0IHdpbmRvd3NfbnQgIT0gIiRDSV9PU19OQU1FIiB8fAorCUdJVF9URVNUX09QVFM9Ii0tbm8tY2hhaW4tbGludCAtLW5vLWJpbi13cmFwcGVycyAkR0lUX1RFU1RfT1BUUyIKK2VsaWYgdGVzdCB0cnVlID0gIiRHSVRIVUJfQUNUSU9OUyIKK3RoZW4KKwlDSV9UWVBFPWdpdGh1Yi1hY3Rpb25zCisJQ0lfQlJBTkNIPSIkR0lUSFVCX1JFRiIKKwlDSV9DT01NSVQ9IiRHSVRIVUJfU0hBIgorCUNJX09TX05BTUU9IiQoZWNobyAiJFJVTk5FUl9PUyIgfCB0ciBBLVogYS16KSIKKwl0ZXN0IG1hY29zICE9ICIkQ0lfT1NfTkFNRSIgfHwgQ0lfT1NfTkFNRT1vc3gKKwlDSV9SRVBPX1NMVUc9IiRHSVRIVUJfUkVQT1NJVE9SWSIKKwlDSV9KT0JfSUQ9IiRHSVRIVUJfUlVOX0lEIgorCUNDPSIke0NDOi1nY2N9IgorCisJY2FjaGVfZGlyPSIkSE9NRS9ub25lIgorCisJZXhwb3J0IEdJVF9QUk9WRV9PUFRTPSItLXRpbWVyIC0tam9icyAxMCIKKwlleHBvcnQgR0lUX1RFU1RfT1BUUz0iLS12ZXJib3NlLWxvZyAteCIKKwlNQUtFRkxBR1M9IiRNQUtFRkxBR1MgLS1qb2JzPTEwIgorCXRlc3Qgd2luZG93cyAhPSAiJENJX09TX05BTUUiIHx8CisJR0lUX1RFU1RfT1BUUz0iLS1uby1jaGFpbi1saW50IC0tbm8tYmluLXdyYXBwZXJzICRHSVRfVEVTVF9PUFRTIgorZWxzZQorCWVjaG8gIkNvdWxkIG5vdCBpZGVudGlmeSBDSSB0eXBlIiA+JjIKKwllbnYgPiYyCisJZXhpdCAxCitmaQorCitnb29kX3RyZWVzX2ZpbGU9IiRjYWNoZV9kaXIvZ29vZC10cmVlcyIKKworbWtkaXIgLXAgIiRjYWNoZV9kaXIiCisKK3NraXBfYnJhbmNoX3RpcF93aXRoX3RhZworc2tpcF9nb29kX3RyZWUKKworaWYgdGVzdCAteiAiJGpvYm5hbWUiCit0aGVuCisJam9ibmFtZT0iJENJX09TX05BTUUtJENDIgorZmkKKworZXhwb3J0IERFVkVMT1BFUj0xCitleHBvcnQgREVGQVVMVF9URVNUX1RBUkdFVD1wcm92ZQorZXhwb3J0IEdJVF9URVNUX0NMT05FXzJHQj10cnVlCisKK2Nhc2UgIiRqb2JuYW1lIiBpbgorbGludXgtY2xhbmd8bGludXgtZ2NjKQorCWlmIFsgIiRqb2JuYW1lIiA9IGxpbnV4LWdjYyBdCisJdGhlbgorCQlleHBvcnQgQ0M9Z2NjLTgKKwkJTUFLRUZMQUdTPSIkTUFLRUZMQUdTIFBZVEhPTl9QQVRIPSQod2hpY2ggcHl0aG9uMykiCisJZWxzZQorCQlNQUtFRkxBR1M9IiRNQUtFRkxBR1MgUFlUSE9OX1BBVEg9JCh3aGljaCBweXRob24yKSIKKwlmaQorCisJZXhwb3J0IEdJVF9URVNUX0hUVFBEPXRydWUKKworCSMgVGhlIExpbnV4IGJ1aWxkIGluc3RhbGxzIHRoZSBkZWZpbmVkIGRlcGVuZGVuY3kgdmVyc2lvbnMgYmVsb3cuCisJIyBUaGUgT1MgWCBidWlsZCBpbnN0YWxscyBtdWNoIG1vcmUgcmVjZW50IHZlcnNpb25zLCB3aGljaGV2ZXIKKwkjIHdlcmUgcmVjb3JkZWQgaW4gdGhlIEhvbWVicmV3IGRhdGFiYXNlIHVwb24gY3JlYXRpbmcgdGhlIE9TIFgKKwkjIGltYWdlLgorCSMgS2VlcCB0aGF0IGluIG1pbmQgd2hlbiB5b3UgZW5jb3VudGVyIGEgYnJva2VuIE9TIFggYnVpbGQhCisJZXhwb3J0IExJTlVYX1A0X1ZFUlNJT049IjE2LjIiCisJZXhwb3J0IExJTlVYX0dJVF9MRlNfVkVSU0lPTj0iMS41LjIiCisKKwlQNF9QQVRIPSIkSE9NRS9jdXN0b20vcDQiCisJR0lUX0xGU19QQVRIPSIkSE9NRS9jdXN0b20vZ2l0LWxmcyIKKwlleHBvcnQgUEFUSD0iJEdJVF9MRlNfUEFUSDokUDRfUEFUSDokUEFUSCIKKwk7Oworb3N4LWNsYW5nfG9zeC1nY2MpCisJaWYgWyAiJGpvYm5hbWUiID0gb3N4LWdjYyBdCisJdGhlbgorCQlleHBvcnQgQ0M9Z2NjLTkKKwkJTUFLRUZMQUdTPSIkTUFLRUZMQUdTIFBZVEhPTl9QQVRIPSQod2hpY2ggcHl0aG9uMykiCisJZWxzZQorCQlNQUtFRkxBR1M9IiRNQUtFRkxBR1MgUFlUSE9OX1BBVEg9JCh3aGljaCBweXRob24yKSIKKwlmaQorCisJIyB0OTgxMCBvY2Nhc2lvbmFsbHkgZmFpbHMgb24gVHJhdmlzIENJIE9TIFgKKwkjIHQ5ODE2IG9jY2FzaW9uYWxseSBmYWlscyB3aXRoICJUQVAgb3V0IG9mIHNlcXVlbmNlIGVycm9ycyIgb24KKwkjIFRyYXZpcyBDSSBPUyBYCisJZXhwb3J0IEdJVF9TS0lQX1RFU1RTPSJ0OTgxMCB0OTgxNiIKKwk7OworR0VUVEVYVF9QT0lTT04pCisJZXhwb3J0IEdJVF9URVNUX0dFVFRFWFRfUE9JU09OPXRydWUKKwk7OworTGludXgzMikKKwlDQz1nY2MKKwk7OworbGludXgtbXVzbCkKKwlDQz1nY2MKKwlNQUtFRkxBR1M9IiRNQUtFRkxBR1MgUFlUSE9OX1BBVEg9L3Vzci9iaW4vcHl0aG9uMyBVU0VfTElCUENSRTI9WWVzIgorCU1BS0VGTEFHUz0iJE1BS0VGTEFHUyBOT19SRUdFWD1ZZXMgSUNPTlZfT01JVFNfQk9NPVllcyIKKwk7OworZXNhYworCitNQUtFRkxBR1M9IiRNQUtFRkxBR1MgQ0M9JHtDQzotY2N9IgpkaWZmIC0tZ2l0IGEvY2kvbWFrZS10ZXN0LWFydGlmYWN0cy5zaCBiL2NpL21ha2UtdGVzdC1hcnRpZmFjdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjQ2OTY3NAotLS0gL2Rldi9udWxsCisrKyBiL2NpL21ha2UtdGVzdC1hcnRpZmFjdHMuc2gKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCisjCisjIEJ1aWxkIEdpdCBhbmQgc3RvcmUgYXJ0aWZhY3RzIGZvciB0ZXN0aW5nCisjCisKK21rZGlyIC1wICIkMSIgIyBpbiBjYXNlIGNpL2xpYi5zaCBkZWNpZGVzIHRvIHF1aXQgZWFybHkKKworLiAkezAlLyp9L2xpYi5zaAorCittYWtlIGFydGlmYWN0cy10YXIgQVJUSUZBQ1RTX0RJUkVDVE9SWT0iJDEiCisKK2NoZWNrX3VuaWdub3JlZF9idWlsZF9hcnRpZmFjdHMKZGlmZiAtLWdpdCBhL2NpL21vdW50LWZpbGVzaGFyZS5zaCBiL2NpL21vdW50LWZpbGVzaGFyZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNmI1OGE4Ci0tLSAvZGV2L251bGwKKysrIGIvY2kvbW91bnQtZmlsZXNoYXJlLnNoCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorCitkaWUgKCkgeworCWVjaG8gIiQqIiA+JjIKKwlleGl0IDEKK30KKwordGVzdCAkIyA9IDQgfHwKK2RpZSAiVXNhZ2U6ICQwIDxzaGFyZT4gPHVzZXJuYW1lPiA8cGFzc3dvcmQ+IDxtb3VudHBvaW50PiIKKworbWtkaXIgLXAgIiQ0IiB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgJDQiCisKK2Nhc2UgIiQodW5hbWUgLXMpIiBpbgorTGludXgpCisJc3VkbyBtb3VudCAtdCBjaWZzIC1vIHZlcnM9My4wLHVzZXJuYW1lPSIkMiIscGFzc3dvcmQ9IiQzIixkaXJfbW9kZT0wNzc3LGZpbGVfbW9kZT0wNzc3LHNlcnZlcmlubyAiJDEiICIkNCIKKwk7OworRGFyd2luKQorCXBhc3M9IiQoZWNobyAiJDMiIHwgc2VkIC1lICdzL1wvLyUyRi9nJyAtZSAncy8rLyUyQi9nJykiICYmCisJbW91bnQgLXQgc21iZnMsc29mdCAic21iOi8vJDI6JHBhc3NAJHsxIy8vfSIgIiQ0IgorCTs7CisqKQorCWRpZSAiTm8gc3VwcG9ydCBmb3IgJCh1bmFtZSAtcykiCisJOzsKK2VzYWMgfHwKK2RpZSAiQ291bGQgbm90IG1vdW50ICQ0IgpkaWZmIC0tZ2l0IGEvY2kvcHJpbnQtdGVzdC1mYWlsdXJlcy5zaCBiL2NpL3ByaW50LXRlc3QtZmFpbHVyZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTJhOTgzYQotLS0gL2Rldi9udWxsCisrKyBiL2NpL3ByaW50LXRlc3QtZmFpbHVyZXMuc2gKQEAgLTAsMCArMSw5OCBAQAorIyEvYmluL3NoCisjCisjIFByaW50IG91dHB1dCBvZiBmYWlsaW5nIHRlc3RzCisjCisKKy4gJHswJS8qfS9saWIuc2gKKworIyBUcmFjaW5nIGV4ZWN1dGVkIGNvbW1hbmRzIHdvdWxkIHByb2R1Y2UgdG9vIG11Y2ggbm9pc2UgaW4gdGhlIGxvb3AgYmVsb3cuCitzZXQgK3gKKworY2QgdC8KKworaWYgISBscyB0ZXN0LXJlc3VsdHMvKi5leGl0ID4vZGV2L251bGwgMj4vZGV2L251bGwKK3RoZW4KKwllY2hvICJCdWlsZCBqb2IgZmFpbGVkIGJlZm9yZSB0aGUgdGVzdHMgY291bGQgaGF2ZSBiZWVuIHJ1biIKKwlleGl0CitmaQorCitjYXNlICIkam9ibmFtZSIgaW4KK29zeC1jbGFuZ3xvc3gtZ2NjKQorCSMgYmFzZTY0IGluIE9TWCBkb2Vzbid0IHdyYXAgaXRzIG91dHB1dCBhdCA3NiBjb2x1bW5zIGJ5CisJIyBkZWZhdWx0LCBidXQgcHJpbnRzIGEgc2luZ2xlLCB2ZXJ5IGxvbmcgbGluZS4KKwliYXNlNjRfb3B0cz0iLWIgNzYiCisJOzsKK2VzYWMKKworY29tYmluZWRfdHJhc2hfc2l6ZT0wCitmb3IgVEVTVF9FWElUIGluIHRlc3QtcmVzdWx0cy8qLmV4aXQKK2RvCisJaWYgWyAiJChjYXQgIiRURVNUX0VYSVQiKSIgIT0gIjAiIF0KKwl0aGVuCisJCVRFU1RfT1VUPSIke1RFU1RfRVhJVCVleGl0fW91dCIKKwkJZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCQllY2hvICIkKHRwdXQgc2V0YWYgMSkke1RFU1RfT1VUfS4uLiQodHB1dCBzZ3IwKSIKKwkJZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCQljYXQgIiR7VEVTVF9PVVR9IgorCisJCXRlc3RfbmFtZT0iJHtURVNUX0VYSVQlLmV4aXR9IgorCQl0ZXN0X25hbWU9IiR7dGVzdF9uYW1lIyMqL30iCisJCXRyYXNoX2Rpcj0idHJhc2ggZGlyZWN0b3J5LiR0ZXN0X25hbWUiCisJCWNhc2UgIiRDSV9UWVBFIiBpbgorCQl0cmF2aXMpCisJCQk7OworCQlhenVyZS1waXBlbGluZXMpCisJCQlta2RpciAtcCBmYWlsZWQtdGVzdC1hcnRpZmFjdHMKKwkJCW12ICIkdHJhc2hfZGlyIiBmYWlsZWQtdGVzdC1hcnRpZmFjdHMKKwkJCWNvbnRpbnVlCisJCQk7OworCQlnaXRodWItYWN0aW9ucykKKwkJCW1rZGlyIC1wIGZhaWxlZC10ZXN0LWFydGlmYWN0cworCQkJZWNobyAiOjpzZXQtZW52IG5hbWU9RkFJTEVEX1RFU1RfQVJUSUZBQ1RTOjp0L2ZhaWxlZC10ZXN0LWFydGlmYWN0cyIKKwkJCWNwICIke1RFU1RfRVhJVCUuZXhpdH0ub3V0IiBmYWlsZWQtdGVzdC1hcnRpZmFjdHMvCisJCQl0YXIgY3pmIGZhaWxlZC10ZXN0LWFydGlmYWN0cy8iJHRlc3RfbmFtZSIudHJhc2gudGFyLmd6ICIkdHJhc2hfZGlyIgorCQkJY29udGludWUKKwkJCTs7CisJCSopCisJCQllY2hvICJVbmhhbmRsZWQgQ0kgdHlwZTogJENJX1RZUEUiID4mMgorCQkJZXhpdCAxCisJCQk7OworCQllc2FjCisJCXRyYXNoX3Rnel9iNjQ9InRyYXNoLiR0ZXN0X25hbWUuYmFzZTY0IgorCQlpZiBbIC1kICIkdHJhc2hfZGlyIiBdCisJCXRoZW4KKwkJCXRhciBjenAgIiR0cmFzaF9kaXIiIHxiYXNlNjQgJGJhc2U2NF9vcHRzID4iJHRyYXNoX3Rnel9iNjQiCisKKwkJCXRyYXNoX3NpemU9JCh3YyAtYyA8IiR0cmFzaF90Z3pfYjY0IikKKwkJCWlmIFsgJHRyYXNoX3NpemUgLWd0IDEwNDg1NzYgXQorCQkJdGhlbgorCQkJCSMgbGFyZ2VyIHRoYW4gMU1CCisJCQkJZWNobyAiJCh0cHV0IHNldGFmIDEpRGlkbid0IGluY2x1ZGUgdGhlIHRyYXNoIGRpcmVjdG9yeSBvZiAnJHRlc3RfbmFtZScgaW4gdGhlIHRyYWNlIGxvZywgaXQncyB0b28gYmlnJCh0cHV0IHNncjApIgorCQkJCWNvbnRpbnVlCisJCQlmaQorCisJCQluZXdfY29tYmluZWRfdHJhc2hfc2l6ZT0kKCgkY29tYmluZWRfdHJhc2hfc2l6ZSArICR0cmFzaF9zaXplKSkKKwkJCWlmIFsgJG5ld19jb21iaW5lZF90cmFzaF9zaXplIC1ndCAxMDQ4NTc2IF0KKwkJCXRoZW4KKwkJCQllY2hvICIkKHRwdXQgc2V0YWYgMSlEaWRuJ3QgaW5jbHVkZSB0aGUgdHJhc2ggZGlyZWN0b3J5IG9mICckdGVzdF9uYW1lJyBpbiB0aGUgdHJhY2UgbG9nLCB0aGVyZSBpcyBwbGVudHkgb2YgdHJhc2ggaW4gdGhlcmUgYWxyZWFkeS4kKHRwdXQgc2dyMCkiCisJCQkJY29udGludWUKKwkJCWZpCisJCQljb21iaW5lZF90cmFzaF9zaXplPSRuZXdfY29tYmluZWRfdHJhc2hfc2l6ZQorCisJCQkjIERPIE5PVCBtb2RpZnkgdGhlc2UgdHdvICdlY2hvJy1lZCBzdHJpbmdzIGJlbG93CisJCQkjIHdpdGhvdXQgdXBkYXRpbmcgJ2NpL3V0aWwvZXh0cmFjdC10cmFzaC1kaXJzLnNoJworCQkJIyBhcyB3ZWxsLgorCQkJZWNobyAiJCh0cHV0IHNldGFmIDEpU3RhcnQgb2YgdHJhc2ggZGlyZWN0b3J5IG9mICckdGVzdF9uYW1lJzokKHRwdXQgc2dyMCkiCisJCQljYXQgIiR0cmFzaF90Z3pfYjY0IgorCQkJZWNobyAiJCh0cHV0IHNldGFmIDEpRW5kIG9mIHRyYXNoIGRpcmVjdG9yeSBvZiAnJHRlc3RfbmFtZSckKHRwdXQgc2dyMCkiCisJCWZpCisJZmkKK2RvbmUKKworaWYgWyAkY29tYmluZWRfdHJhc2hfc2l6ZSAtZ3QgMCBdCit0aGVuCisJZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCWVjaG8gIlRyYXNoIGRpcmVjdG9yaWVzIGVtYmVkZGVkIGluIHRoaXMgbG9nIGNhbiBiZSBleHRyYWN0ZWQgYnkgcnVubmluZzoiCisJZWNobworCWVjaG8gIiAgY3VybCBodHRwczovL2FwaS50cmF2aXMtY2kub3JnL3YzL2pvYi8kVFJBVklTX0pPQl9JRC9sb2cudHh0IHwuL2NpL3V0aWwvZXh0cmFjdC10cmFzaC1kaXJzLnNoIgorZmkKZGlmZiAtLWdpdCBhL2NpL3J1bi1idWlsZC1hbmQtdGVzdHMuc2ggYi9jaS9ydW4tYnVpbGQtYW5kLXRlc3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3ZTI1YWEKLS0tIC9kZXYvbnVsbAorKysgYi9jaS9ydW4tYnVpbGQtYW5kLXRlc3RzLnNoCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorIworIyBCdWlsZCBhbmQgdGVzdCBHaXQKKyMKKworLiAkezAlLyp9L2xpYi5zaAorCitjYXNlICIkQ0lfT1NfTkFNRSIgaW4KK3dpbmRvd3MqKSBjbWQgLy9jIG1rbGluayAvL2ogdFxcLnByb3ZlICIkKGN5Z3BhdGggLWF3ICIkY2FjaGVfZGlyLy5wcm92ZSIpIjs7CisqKSBsbiAtcyAiJGNhY2hlX2Rpci8ucHJvdmUiIHQvLnByb3ZlOzsKK2VzYWMKKworbWFrZQorY2FzZSAiJGpvYm5hbWUiIGluCitsaW51eC1nY2MpCisJbWFrZSB0ZXN0CisJZXhwb3J0IEdJVF9URVNUX1NQTElUX0lOREVYPXllcworCWV4cG9ydCBHSVRfVEVTVF9GVUxMX0lOX1BBQ0tfQVJSQVk9dHJ1ZQorCWV4cG9ydCBHSVRfVEVTVF9PRV9TSVpFPTEwCisJZXhwb3J0IEdJVF9URVNUX09FX0RFTFRBX1NJWkU9NQorCWV4cG9ydCBHSVRfVEVTVF9DT01NSVRfR1JBUEg9MQorCWV4cG9ydCBHSVRfVEVTVF9DT01NSVRfR1JBUEhfQ0hBTkdFRF9QQVRIUz0xCisJZXhwb3J0IEdJVF9URVNUX01VTFRJX1BBQ0tfSU5ERVg9MQorCWV4cG9ydCBHSVRfVEVTVF9BRERfSV9VU0VfQlVJTFRJTj0xCisJbWFrZSB0ZXN0CisJOzsKK2xpbnV4LWdjYy00LjgpCisJIyBEb24ndCBydW4gdGhlIHRlc3RzOyB3ZSBvbmx5IGNhcmUgYWJvdXQgd2hldGhlciBHaXQgY2FuIGJlCisJIyBidWlsdCB3aXRoIEdDQyA0LjgsIGFzIGl0IGVycm9ycyBvdXQgb24gc29tZSB1bmRlc2lyZWQgKEM5OSkKKwkjIGNvbnN0cnVjdHMgdGhhdCBuZXdlciBjb21waWxlcnMgc2VlbSB0byBxdWlldGx5IGFjY2VwdC4KKwk7OworKikKKwltYWtlIHRlc3QKKwk7OworZXNhYworCitjaGVja191bmlnbm9yZWRfYnVpbGRfYXJ0aWZhY3RzCisKK3NhdmVfZ29vZF90cmVlCmRpZmYgLS1naXQgYS9jaS9ydW4tZG9ja2VyLWJ1aWxkLnNoIGIvY2kvcnVuLWRvY2tlci1idWlsZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZDQ3YTVmCi0tLSAvZGV2L251bGwKKysrIGIvY2kvcnVuLWRvY2tlci1idWlsZC5zaApAQCAtMCwwICsxLDc1IEBACisjIS9iaW4vc2gKKyMKKyMgQnVpbGQgYW5kIHRlc3QgR2l0IGluc2lkZSBjb250YWluZXIKKyMKKyMgVXNhZ2U6CisjICAgcnVuLWRvY2tlci1idWlsZC5zaCA8aG9zdC11c2VyLWlkPgorIworCitzZXQgLWV4CisKK2lmIHRlc3QgJCMgLW5lIDEgfHwgdGVzdCAteiAiJDEiCit0aGVuCisJZWNobyA+JjIgInVzYWdlOiBydW4tZG9ja2VyLWJ1aWxkLnNoIDxob3N0LXVzZXItaWQ+IgorCWV4aXQgMQorZmkKKworY2FzZSAiJGpvYm5hbWUiIGluCitMaW51eDMyKQorCXN3aXRjaF9jbWQ9ImxpbnV4MzIgLS0zMmJpdCBpMzg2IgorCTs7CitsaW51eC1tdXNsKQorCXN3aXRjaF9jbWQ9CisJdXNlcmFkZCAoKSB7IGFkZHVzZXIgLUQgIiRAIjsgfQorCTs7CisqKQorCWV4aXQgMQorCTs7Citlc2FjCisKKyIkezAlLyp9L2luc3RhbGwtZG9ja2VyLWRlcGVuZGVuY2llcy5zaCIKKworIyBJZiB0aGlzIHNjcmlwdCBydW5zIGluc2lkZSBhIGRvY2tlciBjb250YWluZXIsIHRoZW4gYWxsIGNvbW1hbmRzIGFyZQorIyB1c3VhbGx5IGV4ZWN1dGVkIGFzIHJvb3QuIENvbnNlcXVlbnRseSwgdGhlIGhvc3QgdXNlciBtaWdodCBub3QgYmUKKyMgYWJsZSB0byBhY2Nlc3MgdGhlIHRlc3Qgb3V0cHV0IGZpbGVzLgorIyBJZiBhIG5vbiAwIGhvc3QgdXNlciBpZCBpcyBnaXZlbiwgdGhlbiBjcmVhdGUgYSB1c2VyICJjaSIgd2l0aCB0aGF0CisjIHVzZXIgaWQgdG8gbWFrZSBldmVyeXRoaW5nIGFjY2Vzc2libGUgdG8gdGhlIGhvc3QgdXNlci4KK0hPU1RfVUlEPSQxCitpZiB0ZXN0ICRIT1NUX1VJRCAtZXEgMAordGhlbgorCSMgSnVzdCBpbiBjYXNlIHNvbWVvbmUgZG9lcyB3YW50IHRvIHJ1biB0aGUgdGVzdCBzdWl0ZSBhcyByb290LgorCUNJX1VTRVI9cm9vdAorZWxzZQorCUNJX1VTRVI9Y2kKKwlpZiB0ZXN0ICIkKGlkIC11ICRDSV9VU0VSIDI+L2Rldi9udWxsKSIgPSAkSE9TVF9VSUQKKwl0aGVuCisJCWVjaG8gInVzZXIgJyRDSV9VU0VSJyBhbHJlYWR5IGV4aXN0cyB3aXRoIHRoZSByZXF1ZXN0ZWQgSUQgJEhPU1RfVUlEIgorCWVsc2UKKwkJdXNlcmFkZCAtdSAkSE9TVF9VSUQgJENJX1VTRVIKKwlmaQorCisJIyBEdWUgdG8gYSBidWcgdGhlIHRlc3Qgc3VpdGUgd2FzIHJ1biBhcyByb290IGluIHRoZSBwYXN0LCBzbworCSMgYSBwcm92ZSBzdGF0ZSBmaWxlIGNyZWF0ZWQgYmFjayB0aGVuIGlzIG9ubHkgYWNjZXNzaWJsZSBieQorCSMgcm9vdC4gIE5vdyB0aGF0IGJ1ZyBpcyBmaXhlZCwgdGhlIHRlc3Qgc3VpdGUgaXMgcnVuIGFzIGEKKwkjIHJlZ3VsYXIgdXNlciwgYnV0IHRoZSBwcm92ZSBzdGF0ZSBmaWxlIGNvbWluZyBmcm9tIFRyYXZpcworCSMgQ0kncyBjYWNoZSBtaWdodCBzdGlsbCBiZSBvd25lZCBieSByb290LgorCSMgTWFrZSBzdXJlIHRoYXQgdGhpcyB1c2VyIGhhcyByaWdodHMgdG8gYW55IGNhY2hlZCBmaWxlcywKKwkjIGluY2x1ZGluZyBhbiBleGlzdGluZyBwcm92ZSBzdGF0ZSBmaWxlLgorCXRlc3QgLW4gIiRjYWNoZV9kaXIiICYmIGNob3duIC1SICRIT1NUX1VJRDokSE9TVF9VSUQgIiRjYWNoZV9kaXIiCitmaQorCisjIEJ1aWxkIGFuZCB0ZXN0Citjb21tYW5kICRzd2l0Y2hfY21kIHN1IC1tIC1sICRDSV9VU0VSIC1jICIKKwlzZXQgLWV4CisJZXhwb3J0IERFVkVMT1BFUj0nJERFVkVMT1BFUicKKwlleHBvcnQgREVGQVVMVF9URVNUX1RBUkdFVD0nJERFRkFVTFRfVEVTVF9UQVJHRVQnCisJZXhwb3J0IEdJVF9QUk9WRV9PUFRTPSckR0lUX1BST1ZFX09QVFMnCisJZXhwb3J0IEdJVF9URVNUX09QVFM9JyRHSVRfVEVTVF9PUFRTJworCWV4cG9ydCBHSVRfVEVTVF9DTE9ORV8yR0I9JyRHSVRfVEVTVF9DTE9ORV8yR0InCisJZXhwb3J0IE1BS0VGTEFHUz0nJE1BS0VGTEFHUycKKwlleHBvcnQgY2FjaGVfZGlyPSckY2FjaGVfZGlyJworCWNkIC91c3Ivc3JjL2dpdAorCXRlc3QgLW4gJyRjYWNoZV9kaXInICYmIGxuIC1zICckY2FjaGVfZGlyLy5wcm92ZScgdC8ucHJvdmUKKwltYWtlCisJbWFrZSB0ZXN0CisiCmRpZmYgLS1naXQgYS9jaS9ydW4tZG9ja2VyLnNoIGIvY2kvcnVuLWRvY2tlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zN2ZhMzcyCi0tLSAvZGV2L251bGwKKysrIGIvY2kvcnVuLWRvY2tlci5zaApAQCAtMCwwICsxLDQ3IEBACisjIS9iaW4vc2gKKyMKKyMgRG93bmxvYWQgYW5kIHJ1biBEb2NrZXIgaW1hZ2UgdG8gYnVpbGQgYW5kIHRlc3QgR2l0CisjCisKKy4gJHswJS8qfS9saWIuc2gKKworY2FzZSAiJGpvYm5hbWUiIGluCitMaW51eDMyKQorCUNJX0NPTlRBSU5FUj0iZGFhbGQvdWJ1bnR1MzI6eGVuaWFsIgorCTs7CitsaW51eC1tdXNsKQorCUNJX0NPTlRBSU5FUj1hbHBpbmUKKwk7OworKikKKwlleGl0IDEKKwk7OworZXNhYworCitkb2NrZXIgcHVsbCAiJENJX0NPTlRBSU5FUiIKKworIyBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGRlYnVnIHRoZSBkb2NrZXIgYnVpbGQgbG9jYWxseToKKyMgPGhvc3QtdXNlci1pZD4gbXVzdCBiZSAwIGlmIHBvZG1hbiBpcyB1c2VkIGFzIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIGRvY2tlcgorIyAkIGRvY2tlciBydW4gLWl0diAiJHtQV0R9Oi91c3Ivc3JjL2dpdCIgLS1lbnRyeXBvaW50IC9iaW4vc2ggIiRDSV9DT05UQUlORVIiCisjIHJvb3RAY29udGFpbmVyOi8jIGV4cG9ydCBqb2JuYW1lPTxqb2JuYW1lPgorIyByb290QGNvbnRhaW5lcjovIyAvdXNyL3NyYy9naXQvY2kvcnVuLWRvY2tlci1idWlsZC5zaCA8aG9zdC11c2VyLWlkPgorCitjb250YWluZXJfY2FjaGVfZGlyPS90bXAvdHJhdmlzLWNhY2hlCisKK2RvY2tlciBydW4gXAorCS0taW50ZXJhY3RpdmUgXAorCS0tZW52IERFVkVMT1BFUiBcCisJLS1lbnYgREVGQVVMVF9URVNUX1RBUkdFVCBcCisJLS1lbnYgR0lUX1BST1ZFX09QVFMgXAorCS0tZW52IEdJVF9URVNUX09QVFMgXAorCS0tZW52IEdJVF9URVNUX0NMT05FXzJHQiBcCisJLS1lbnYgTUFLRUZMQUdTIFwKKwktLWVudiBqb2JuYW1lIFwKKwktLWVudiBjYWNoZV9kaXI9IiRjb250YWluZXJfY2FjaGVfZGlyIiBcCisJLS12b2x1bWUgIiR7UFdEfTovdXNyL3NyYy9naXQiIFwKKwktLXZvbHVtZSAiJGNhY2hlX2RpcjokY29udGFpbmVyX2NhY2hlX2RpciIgXAorCSIkQ0lfQ09OVEFJTkVSIiBcCisJL3Vzci9zcmMvZ2l0L2NpL3J1bi1kb2NrZXItYnVpbGQuc2ggJChpZCAtdSAkVVNFUikKKworY2hlY2tfdW5pZ25vcmVkX2J1aWxkX2FydGlmYWN0cworCitzYXZlX2dvb2RfdHJlZQpkaWZmIC0tZ2l0IGEvY2kvcnVuLXN0YXRpYy1hbmFseXNpcy5zaCBiL2NpL3J1bi1zdGF0aWMtYW5hbHlzaXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjViY2ViZAotLS0gL2Rldi9udWxsCisrKyBiL2NpL3J1bi1zdGF0aWMtYW5hbHlzaXMuc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisjCisjIFBlcmZvcm0gdmFyaW91cyBzdGF0aWMgY29kZSBhbmFseXNpcyBjaGVja3MKKyMKKworLiAkezAlLyp9L2xpYi5zaAorCittYWtlIGNvY2NpY2hlY2sKKworc2V0ICt4CisKK2ZhaWw9Citmb3IgY29jY2lfcGF0Y2ggaW4gY29udHJpYi9jb2NjaW5lbGxlLyoucGF0Y2gKK2RvCisJaWYgdGVzdCAtcyAiJGNvY2NpX3BhdGNoIgorCXRoZW4KKwkJZWNobyAiJCh0cHV0IHNldGFmIDEpQ29jY2luZWxsZSBzdWdnZXN0cyB0aGUgZm9sbG93aW5nIGNoYW5nZXMgaW4gJyRjb2NjaV9wYXRjaCc6JCh0cHV0IHNncjApIgorCQljYXQgIiRjb2NjaV9wYXRjaCIKKwkJZmFpbD1VbmZvcnR1bmF0ZWx5WWVzCisJZmkKK2RvbmUKKworaWYgdGVzdCAtbiAiJGZhaWwiCit0aGVuCisJZWNobyAiJCh0cHV0IHNldGFmIDEpZXJyb3I6IENvY2NpbmVsbGUgc3VnZ2VzdGVkIHNvbWUgY2hhbmdlcyQodHB1dCBzZ3IwKSIKKwlleGl0IDEKK2ZpCisKK21ha2UgaGRyLWNoZWNrIHx8CitleGl0IDEKKworc2F2ZV9nb29kX3RyZWUKZGlmZiAtLWdpdCBhL2NpL3J1bi10ZXN0LXNsaWNlLnNoIGIvY2kvcnVuLXRlc3Qtc2xpY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjhjMmMzMQotLS0gL2Rldi9udWxsCisrKyBiL2NpL3J1bi10ZXN0LXNsaWNlLnNoCkBAIC0wLDAgKzEsMTcgQEAKKyMhL2Jpbi9zaAorIworIyBUZXN0IEdpdCBpbiBwYXJhbGxlbAorIworCisuICR7MCUvKn0vbGliLnNoCisKK2Nhc2UgIiRDSV9PU19OQU1FIiBpbgord2luZG93cyopIGNtZCAvL2MgbWtsaW5rIC8vaiB0XFwucHJvdmUgIiQoY3lncGF0aCAtYXcgIiRjYWNoZV9kaXIvLnByb3ZlIikiOzsKKyopIGxuIC1zICIkY2FjaGVfZGlyLy5wcm92ZSIgdC8ucHJvdmU7OworZXNhYworCittYWtlIC0tcXVpZXQgLUMgdCBUPSIkKGNkIHQgJiYKKwkuL2hlbHBlci90ZXN0LXRvb2wgcGF0aC11dGlscyBzbGljZS10ZXN0cyAiJDEiICIkMiIgdFswLTldKi5zaCB8CisJdHIgJ1xuJyAnICcpIgorCitjaGVja191bmlnbm9yZWRfYnVpbGRfYXJ0aWZhY3RzCmRpZmYgLS1naXQgYS9jaS90ZXN0LWRvY3VtZW50YXRpb24uc2ggYi9jaS90ZXN0LWRvY3VtZW50YXRpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGU0MTg4OAotLS0gL2Rldi9udWxsCisrKyBiL2NpL3Rlc3QtZG9jdW1lbnRhdGlvbi5zaApAQCAtMCwwICsxLDQ1IEBACisjIS91c3IvYmluL2VudiBiYXNoCisjCisjIFBlcmZvcm0gc2FuaXR5IGNoZWNrcyBvbiBkb2N1bWVudGF0aW9uIGFuZCBidWlsZCBpdC4KKyMKKworLiAkezAlLyp9L2xpYi5zaAorCitmaWx0ZXJfbG9nICgpIHsKKwlzZWQgLWUgJy9eR0lUX1ZFUlNJT04gPSAvZCcgXAorCSAgICAtZSAiL2NvbnN0YW50IEdlbTo6Q29uZmlnTWFwIGlzIGRlcHJlY2F0ZWQvZCIgXAorCSAgICAtZSAnL14gICAgXCogbmV3IGFzY2lpZG9jIGZsYWdzJC9kJyBcCisJICAgIC1lICcvc3RyaXBwZWQgbmFtZXNwYWNlIGJlZm9yZSBwcm9jZXNzaW5nL2QnIFwKKwkgICAgLWUgJy9BdHRyaWJ1dGVkLipJRHMgZm9yIGVsZW1lbnQvZCcgXAorCSAgICAiJDEiCit9CisKK21ha2UgY2hlY2stYnVpbHRpbnMKK21ha2UgY2hlY2stZG9jcworCisjIEJ1aWxkIGRvY3Mgd2l0aCBBc2NpaURvYworbWFrZSBkb2MgPiA+KHRlZSBzdGRvdXQubG9nKSAyPiA+KHRlZSBzdGRlcnIucmF3ID4mMikKK2NhdCBzdGRlcnIucmF3CitmaWx0ZXJfbG9nIHN0ZGVyci5yYXcgPnN0ZGVyci5sb2cKK3Rlc3QgISAtcyBzdGRlcnIubG9nCit0ZXN0IC1zIERvY3VtZW50YXRpb24vZ2l0Lmh0bWwKK3Rlc3QgLXMgRG9jdW1lbnRhdGlvbi9naXQueG1sCit0ZXN0IC1zIERvY3VtZW50YXRpb24vZ2l0LjEKK2dyZXAgJzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iQXNjaWlEb2MgJyBEb2N1bWVudGF0aW9uL2dpdC5odG1sCisKK3JtIC1mIHN0ZG91dC5sb2cgc3RkZXJyLmxvZyBzdGRlcnIucmF3CitjaGVja191bmlnbm9yZWRfYnVpbGRfYXJ0aWZhY3RzCisKKyMgQnVpbGQgZG9jcyB3aXRoIEFzY2lpRG9jdG9yCittYWtlIGNsZWFuCittYWtlIFVTRV9BU0NJSURPQ1RPUj0xIGRvYyA+ID4odGVlIHN0ZG91dC5sb2cpIDI+ID4odGVlIHN0ZGVyci5yYXcgPiYyKQorY2F0IHN0ZGVyci5yYXcKK2ZpbHRlcl9sb2cgc3RkZXJyLnJhdyA+c3RkZXJyLmxvZwordGVzdCAhIC1zIHN0ZGVyci5sb2cKK3Rlc3QgLXMgRG9jdW1lbnRhdGlvbi9naXQuaHRtbAorZ3JlcCAnPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJBc2NpaWRvY3RvciAnIERvY3VtZW50YXRpb24vZ2l0Lmh0bWwKKworcm0gLWYgc3Rkb3V0LmxvZyBzdGRlcnIubG9nIHN0ZGVyci5yYXcKK2NoZWNrX3VuaWdub3JlZF9idWlsZF9hcnRpZmFjdHMKKworc2F2ZV9nb29kX3RyZWUKZGlmZiAtLWdpdCBhL2NpL3V0aWwvZXh0cmFjdC10cmFzaC1kaXJzLnNoIGIvY2kvdXRpbC9leHRyYWN0LXRyYXNoLWRpcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGU2N2JlYwotLS0gL2Rldi9udWxsCisrKyBiL2NpL3V0aWwvZXh0cmFjdC10cmFzaC1kaXJzLnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9zaAorCitlcnJvciAoKSB7CisJZWNobyA+JjIgImVycm9yOiAkQCIKKwlleGl0IDEKK30KKworZmluZF9lbWJlZGRlZF90cmFzaCAoKSB7CisJd2hpbGUgcmVhZCAtciBsaW5lCisJZG8KKwkJY2FzZSAiJGxpbmUiIGluCisJCSpTdGFydFwgb2ZcIHRyYXNoXCBkaXJlY3RvcnlcIG9mXCBcJ3RbMC05XVswLTldWzAtOV1bMC05XS0qXCc6KikKKwkJCXRlc3RfbmFtZT0iJHtsaW5lIypcJ30iCisJCQl0ZXN0X25hbWU9IiR7dGVzdF9uYW1lJVwnKn0iCisKKwkJCXJldHVybiAwCisJCWVzYWMKKwlkb25lCisKKwlyZXR1cm4gMQorfQorCitleHRyYWN0X2VtYmVkZGVkX3RyYXNoICgpIHsKKwl3aGlsZSByZWFkIC1yIGxpbmUKKwlkbworCQljYXNlICIkbGluZSIgaW4KKwkJKkVuZFwgb2ZcIHRyYXNoXCBkaXJlY3RvcnlcIG9mXCBcJyR0ZXN0X25hbWVcJyopCisJCQlyZXR1cm4KKwkJCTs7CisJCSopCisJCQlwcmludGYgJyVzXG4nICIkbGluZSIKKwkJCTs7CisJCWVzYWMKKwlkb25lCisKKwllcnJvciAidW5leHBlY3RlZCBlbmQgb2YgaW5wdXQiCit9CisKKyMgUmF3IGxvZ3MgZnJvbSBMaW51eCBidWlsZCBqb2JzIGhhdmUgQ1JMRiBsaW5lIGVuZGluZ3MsIHdoaWxlIE9TWAorIyBidWlsZCBqb2JzIG1vc3RseSBoYXZlIENSQ1JMRiwgZXhjZXB0IGFuIG9kZCBsaW5lIGV2ZXJ5IG5vdyBhbmQKKyMgdGhlbiB0aGF0IGhhcyBDUkNSQ1JMRi4gICdiYXNlNjQgLWQnIGZyb20gJ2NvcmV1dGlscycgZG9lc24ndCBsaWtlCisjIENScyBhbmQgY29tcGxhaW5zIGFib3V0ICJpbnZhbGlkIGlucHV0Iiwgc28gcmVtb3ZlIGFsbCBDUnMgYXQgdGhlCisjIGVuZCBvZiBsaW5lcy4KK3NlZCAtZSAncy9cciokLy8nIHwgXAord2hpbGUgZmluZF9lbWJlZGRlZF90cmFzaAorZG8KKwllY2hvICJFeHRyYWN0aW5nIHRyYXNoIGRpcmVjdG9yeSBvZiAnJHRlc3RfbmFtZSciCisKKwlleHRyYWN0X2VtYmVkZGVkX3RyYXNoIHxiYXNlNjQgLWQgfHRhciB4enAKK2RvbmUKZGlmZiAtLWdpdCBhL2NvbG9yLmMgYi9jb2xvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZjUyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xvci5jCkBAIC0wLDAgKzEsNDU4IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorCitzdGF0aWMgaW50IGdpdF91c2VfY29sb3JfZGVmYXVsdCA9IEdJVF9DT0xPUl9BVVRPOworaW50IGNvbG9yX3N0ZG91dF9pc190dHkgPSAtMTsKKworLyoKKyAqIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjb2x1bW4gY29sb3JzLgorICovCitjb25zdCBjaGFyICpjb2x1bW5fY29sb3JzX2Fuc2lbXSA9IHsKKwlHSVRfQ09MT1JfUkVELAorCUdJVF9DT0xPUl9HUkVFTiwKKwlHSVRfQ09MT1JfWUVMTE9XLAorCUdJVF9DT0xPUl9CTFVFLAorCUdJVF9DT0xPUl9NQUdFTlRBLAorCUdJVF9DT0xPUl9DWUFOLAorCUdJVF9DT0xPUl9CT0xEX1JFRCwKKwlHSVRfQ09MT1JfQk9MRF9HUkVFTiwKKwlHSVRfQ09MT1JfQk9MRF9ZRUxMT1csCisJR0lUX0NPTE9SX0JPTERfQkxVRSwKKwlHSVRfQ09MT1JfQk9MRF9NQUdFTlRBLAorCUdJVF9DT0xPUl9CT0xEX0NZQU4sCisJR0lUX0NPTE9SX1JFU0VULAorfTsKKworZW51bSB7CisJQ09MT1JfQkFDS0dST1VORF9PRkZTRVQgPSAxMCwKKwlDT0xPUl9GT1JFR1JPVU5EX0FOU0kgPSAzMCwKKwlDT0xPUl9GT1JFR1JPVU5EX1JHQiA9IDM4LAorCUNPTE9SX0ZPUkVHUk9VTkRfMjU2ID0gMzgsCisJQ09MT1JfRk9SRUdST1VORF9CUklHSFRfQU5TSSA9IDkwLAorfTsKKworLyogSWdub3JlIHRoZSBSRVNFVCBhdCB0aGUgZW5kIHdoZW4gZ2l2aW5nIHRoZSBzaXplICovCitjb25zdCBpbnQgY29sdW1uX2NvbG9yc19hbnNpX21heCA9IEFSUkFZX1NJWkUoY29sdW1uX2NvbG9yc19hbnNpKSAtIDE7CisKKy8qIEFuIGluZGl2aWR1YWwgZm9yZWdyb3VuZCBvciBiYWNrZ3JvdW5kIGNvbG9yLiAqLworc3RydWN0IGNvbG9yIHsKKwllbnVtIHsKKwkJQ09MT1JfVU5TUEVDSUZJRUQgPSAwLAorCQlDT0xPUl9OT1JNQUwsCisJCUNPTE9SX0FOU0ksIC8qIGJhc2ljIDAtNyBBTlNJIGNvbG9ycyAqLworCQlDT0xPUl8yNTYsCisJCUNPTE9SX1JHQgorCX0gdHlwZTsKKwkvKiBUaGUgbnVtZXJpYyB2YWx1ZSBmb3IgQU5TSSBhbmQgMjU2LWNvbG9yIG1vZGVzICovCisJdW5zaWduZWQgY2hhciB2YWx1ZTsKKwkvKiAyNC1iaXQgUkdCIGNvbG9yIHZhbHVlcyAqLworCXVuc2lnbmVkIGNoYXIgcmVkLCBncmVlbiwgYmx1ZTsKK307CisKKy8qCisgKiAid29yZCIgaXMgYSBidWZmZXIgb2YgbGVuZ3RoICJsZW4iOyBkb2VzIGl0IG1hdGNoIHRoZSBOVUwtdGVybWluYXRlZAorICogIm1hdGNoIiBleGFjdGx5PworICovCitzdGF0aWMgaW50IG1hdGNoX3dvcmQoY29uc3QgY2hhciAqd29yZCwgaW50IGxlbiwgY29uc3QgY2hhciAqbWF0Y2gpCit7CisJcmV0dXJuICFzdHJuY2FzZWNtcCh3b3JkLCBtYXRjaCwgbGVuKSAmJiAhbWF0Y2hbbGVuXTsKK30KKworc3RhdGljIGludCBnZXRfaGV4X2NvbG9yKGNvbnN0IGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwl2YWwgPSAoaGV4dmFsKGluWzBdKSA8PCA0KSB8IGhleHZhbChpblsxXSk7CisJaWYgKHZhbCAmIH4weGZmKQorCQlyZXR1cm4gLTE7CisJKm91dCA9IHZhbDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElmIGFuIEFOU0kgY29sb3IgaXMgcmVjb2duaXplZCBpbiAibmFtZSIsIGZpbGwgIm91dCIgYW5kIHJldHVybiAwLgorICogT3RoZXJ3aXNlLCBsZWF2ZSBvdXQgdW5jaGFuZ2VkIGFuZCByZXR1cm4gLTEuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfYW5zaV9jb2xvcihzdHJ1Y3QgY29sb3IgKm91dCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwkvKiBQb3NpdGlvbnMgaW4gYXJyYXkgbXVzdCBtYXRjaCBBTlNJIGNvbG9yIGNvZGVzICovCisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjb2xvcl9uYW1lc1tdID0geworCQkiYmxhY2siLCAicmVkIiwgImdyZWVuIiwgInllbGxvdyIsCisJCSJibHVlIiwgIm1hZ2VudGEiLCAiY3lhbiIsICJ3aGl0ZSIKKwl9OworCWludCBpOworCWludCBjb2xvcl9vZmZzZXQgPSBDT0xPUl9GT1JFR1JPVU5EX0FOU0k7CisKKwlpZiAoc3RybmNhc2VjbXAobmFtZSwgImJyaWdodCIsIDYpID09IDApIHsKKwkJY29sb3Jfb2Zmc2V0ID0gQ09MT1JfRk9SRUdST1VORF9CUklHSFRfQU5TSTsKKwkJbmFtZSArPSA2OworCQlsZW4gLT0gNjsKKwl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29sb3JfbmFtZXMpOyBpKyspIHsKKwkJaWYgKG1hdGNoX3dvcmQobmFtZSwgbGVuLCBjb2xvcl9uYW1lc1tpXSkpIHsKKwkJCW91dC0+dHlwZSA9IENPTE9SX0FOU0k7CisJCQlvdXQtPnZhbHVlID0gaSArIGNvbG9yX29mZnNldDsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBwYXJzZV9jb2xvcihzdHJ1Y3QgY29sb3IgKm91dCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwljaGFyICplbmQ7CisJbG9uZyB2YWw7CisKKwkvKiBGaXJzdCB0cnkgdGhlIHNwZWNpYWwgd29yZCAibm9ybWFsIi4uLiAqLworCWlmIChtYXRjaF93b3JkKG5hbWUsIGxlbiwgIm5vcm1hbCIpKSB7CisJCW91dC0+dHlwZSA9IENPTE9SX05PUk1BTDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVHJ5IGEgMjQtYml0IFJHQiB2YWx1ZSAqLworCWlmIChsZW4gPT0gNyAmJiBuYW1lWzBdID09ICcjJykgeworCQlpZiAoIWdldF9oZXhfY29sb3IobmFtZSArIDEsICZvdXQtPnJlZCkgJiYKKwkJICAgICFnZXRfaGV4X2NvbG9yKG5hbWUgKyAzLCAmb3V0LT5ncmVlbikgJiYKKwkJICAgICFnZXRfaGV4X2NvbG9yKG5hbWUgKyA1LCAmb3V0LT5ibHVlKSkgeworCQkJb3V0LT50eXBlID0gQ09MT1JfUkdCOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBUaGVuIHBpY2sgZnJvbSBvdXIgaHVtYW4tcmVhZGFibGUgY29sb3IgbmFtZXMuLi4gKi8KKwlpZiAocGFyc2VfYW5zaV9jb2xvcihvdXQsIG5hbWUsIGxlbikgPT0gMCkgeworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBbmQgZmluYWxseSB0cnkgYSBsaXRlcmFsIDI1Ni1jb2xvci1tb2RlIG51bWJlciAqLworCXZhbCA9IHN0cnRvbChuYW1lLCAmZW5kLCAxMCk7CisJaWYgKGVuZCAtIG5hbWUgPT0gbGVuKSB7CisJCS8qCisJCSAqIEFsbG93ICItMSIgYXMgYW4gYWxpYXMgZm9yICJub3JtYWwiLCBidXQgb3RoZXIgbmVnYXRpdmUKKwkJICogbnVtYmVycyBhcmUgYm9ndXMuCisJCSAqLworCQlpZiAodmFsIDwgLTEpCisJCQk7IC8qIGZhbGwgdGhyb3VnaCB0byBlcnJvciAqLworCQllbHNlIGlmICh2YWwgPCAwKSB7CisJCQlvdXQtPnR5cGUgPSBDT0xPUl9OT1JNQUw7CisJCQlyZXR1cm4gMDsKKwkJLyogUmV3cml0ZSAwLTcgYXMgbW9yZS1wb3J0YWJsZSBzdGFuZGFyZCBjb2xvcnMuICovCisJCX0gZWxzZSBpZiAodmFsIDwgOCkgeworCQkJb3V0LT50eXBlID0gQ09MT1JfQU5TSTsKKwkJCW91dC0+dmFsdWUgPSB2YWwgKyBDT0xPUl9GT1JFR1JPVU5EX0FOU0k7CisJCQlyZXR1cm4gMDsKKwkJLyogUmV3cml0ZSA4LTE1IGFzIG1vcmUtcG9ydGFibGUgYWl4dGVybSBjb2xvcnMuICovCisJCX0gZWxzZSBpZiAodmFsIDwgMTYpIHsKKwkJCW91dC0+dHlwZSA9IENPTE9SX0FOU0k7CisJCQlvdXQtPnZhbHVlID0gdmFsIC0gOCArIENPTE9SX0ZPUkVHUk9VTkRfQlJJR0hUX0FOU0k7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmICh2YWwgPCAyNTYpIHsKKwkJCW91dC0+dHlwZSA9IENPTE9SXzI1NjsKKwkJCW91dC0+dmFsdWUgPSB2YWw7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBwYXJzZV9hdHRyKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCXNpemVfdCBsZW47CisJCWludCB2YWwsIG5lZzsKKwl9IGF0dHJzW10gPSB7CisjZGVmaW5lIEFUVFIoeCwgdmFsLCBuZWcpIHsgKHgpLCBzaXplb2YoeCktMSwgKHZhbCksIChuZWcpIH0KKwkJQVRUUigiYm9sZCIsICAgICAgMSwgMjIpLAorCQlBVFRSKCJkaW0iLCAgICAgICAyLCAyMiksCisJCUFUVFIoIml0YWxpYyIsICAgIDMsIDIzKSwKKwkJQVRUUigidWwiLCAgICAgICAgNCwgMjQpLAorCQlBVFRSKCJibGluayIsICAgICA1LCAyNSksCisJCUFUVFIoInJldmVyc2UiLCAgIDcsIDI3KSwKKwkJQVRUUigic3RyaWtlIiwgICAgOSwgMjkpCisjdW5kZWYgQVRUUgorCX07CisJaW50IG5lZ2F0ZSA9IDA7CisJaW50IGk7CisKKwlpZiAoc2tpcF9wcmVmaXhfbWVtKG5hbWUsIGxlbiwgIm5vIiwgJm5hbWUsICZsZW4pKSB7CisJCXNraXBfcHJlZml4X21lbShuYW1lLCBsZW4sICItIiwgJm5hbWUsICZsZW4pOworCQluZWdhdGUgPSAxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0dHJzKTsgaSsrKSB7CisJCWlmIChhdHRyc1tpXS5sZW4gPT0gbGVuICYmICFtZW1jbXAoYXR0cnNbaV0ubmFtZSwgbmFtZSwgbGVuKSkKKwkJCXJldHVybiBuZWdhdGUgPyBhdHRyc1tpXS5uZWcgOiBhdHRyc1tpXS52YWw7CisJfQorCXJldHVybiAtMTsKK30KKworaW50IGNvbG9yX3BhcnNlKGNvbnN0IGNoYXIgKnZhbHVlLCBjaGFyICpkc3QpCit7CisJcmV0dXJuIGNvbG9yX3BhcnNlX21lbSh2YWx1ZSwgc3RybGVuKHZhbHVlKSwgZHN0KTsKK30KKworLyoKKyAqIFdyaXRlIHRoZSBBTlNJIGNvbG9yIGNvZGVzIGZvciAiYyIgdG8gIm91dCI7IHRoZSBzdHJpbmcgc2hvdWxkCisgKiBhbHJlYWR5IGhhdmUgdGhlIEFOU0kgZXNjYXBlIGNvZGUgaW4gaXQuICJvdXQiIHNob3VsZCBoYXZlIGVub3VnaAorICogc3BhY2UgaW4gaXQgdG8gZml0IGFueSBjb2xvci4KKyAqLworc3RhdGljIGNoYXIgKmNvbG9yX291dHB1dChjaGFyICpvdXQsIGludCBsZW4sIGNvbnN0IHN0cnVjdCBjb2xvciAqYywgaW50IGJhY2tncm91bmQpCit7CisJaW50IG9mZnNldCA9IDA7CisKKwlpZiAoYmFja2dyb3VuZCkKKwkJb2Zmc2V0ID0gQ09MT1JfQkFDS0dST1VORF9PRkZTRVQ7CisJc3dpdGNoIChjLT50eXBlKSB7CisJY2FzZSBDT0xPUl9VTlNQRUNJRklFRDoKKwljYXNlIENPTE9SX05PUk1BTDoKKwkJYnJlYWs7CisJY2FzZSBDT0xPUl9BTlNJOgorCQlvdXQgKz0geHNucHJpbnRmKG91dCwgbGVuLCAiJWQiLCBjLT52YWx1ZSArIG9mZnNldCk7CisJCWJyZWFrOworCWNhc2UgQ09MT1JfMjU2OgorCQlvdXQgKz0geHNucHJpbnRmKG91dCwgbGVuLCAiJWQ7NTslZCIsIENPTE9SX0ZPUkVHUk9VTkRfMjU2ICsgb2Zmc2V0LAorCQkJCSBjLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgQ09MT1JfUkdCOgorCQlvdXQgKz0geHNucHJpbnRmKG91dCwgbGVuLCAiJWQ7MjslZDslZDslZCIsCisJCQkJIENPTE9SX0ZPUkVHUk9VTkRfUkdCICsgb2Zmc2V0LAorCQkJCSBjLT5yZWQsIGMtPmdyZWVuLCBjLT5ibHVlKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgY29sb3JfZW1wdHkoY29uc3Qgc3RydWN0IGNvbG9yICpjKQoreworCXJldHVybiBjLT50eXBlIDw9IENPTE9SX05PUk1BTDsKK30KKworaW50IGNvbG9yX3BhcnNlX21lbShjb25zdCBjaGFyICp2YWx1ZSwgaW50IHZhbHVlX2xlbiwgY2hhciAqZHN0KQoreworCWNvbnN0IGNoYXIgKnB0ciA9IHZhbHVlOworCWludCBsZW4gPSB2YWx1ZV9sZW47CisJY2hhciAqZW5kID0gZHN0ICsgQ09MT1JfTUFYTEVOOworCXVuc2lnbmVkIGludCBhdHRyID0gMDsKKwlzdHJ1Y3QgY29sb3IgZmcgPSB7IENPTE9SX1VOU1BFQ0lGSUVEIH07CisJc3RydWN0IGNvbG9yIGJnID0geyBDT0xPUl9VTlNQRUNJRklFRCB9OworCisJd2hpbGUgKGxlbiA+IDAgJiYgaXNzcGFjZSgqcHRyKSkgeworCQlwdHIrKzsKKwkJbGVuLS07CisJfQorCisJaWYgKCFsZW4pIHsKKwkJZHN0WzBdID0gJ1wwJzsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJuY2FzZWNtcChwdHIsICJyZXNldCIsIGxlbikpIHsKKwkJeHNucHJpbnRmKGRzdCwgZW5kIC0gZHN0LCBHSVRfQ09MT1JfUkVTRVQpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBbZmcgW2JnXV0gW2F0dHJdLi4uICovCisJd2hpbGUgKGxlbiA+IDApIHsKKwkJY29uc3QgY2hhciAqd29yZCA9IHB0cjsKKwkJc3RydWN0IGNvbG9yIGMgPSB7IENPTE9SX1VOU1BFQ0lGSUVEIH07CisJCWludCB2YWwsIHdvcmRsZW4gPSAwOworCisJCXdoaWxlIChsZW4gPiAwICYmICFpc3NwYWNlKHdvcmRbd29yZGxlbl0pKSB7CisJCQl3b3JkbGVuKys7CisJCQlsZW4tLTsKKwkJfQorCisJCXB0ciA9IHdvcmQgKyB3b3JkbGVuOworCQl3aGlsZSAobGVuID4gMCAmJiBpc3NwYWNlKCpwdHIpKSB7CisJCQlwdHIrKzsKKwkJCWxlbi0tOworCQl9CisKKwkJaWYgKCFwYXJzZV9jb2xvcigmYywgd29yZCwgd29yZGxlbikpIHsKKwkJCWlmIChmZy50eXBlID09IENPTE9SX1VOU1BFQ0lGSUVEKSB7CisJCQkJZmcgPSBjOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGJnLnR5cGUgPT0gQ09MT1JfVU5TUEVDSUZJRUQpIHsKKwkJCQliZyA9IGM7CisJCQkJY29udGludWU7CisJCQl9CisJCQlnb3RvIGJhZDsKKwkJfQorCQl2YWwgPSBwYXJzZV9hdHRyKHdvcmQsIHdvcmRsZW4pOworCQlpZiAoMCA8PSB2YWwpCisJCQlhdHRyIHw9ICgxIDw8IHZhbCk7CisJCWVsc2UKKwkJCWdvdG8gYmFkOworCX0KKworI3VuZGVmIE9VVAorI2RlZmluZSBPVVQoeCkgZG8geyBcCisJaWYgKGRzdCA9PSBlbmQpIFwKKwkJQlVHKCJjb2xvciBwYXJzaW5nIHJhbiBvdXQgb2Ygc3BhY2UiKTsgXAorCSpkc3QrKyA9ICh4KTsgXAorfSB3aGlsZSgwKQorCisJaWYgKGF0dHIgfHwgIWNvbG9yX2VtcHR5KCZmZykgfHwgIWNvbG9yX2VtcHR5KCZiZykpIHsKKwkJaW50IHNlcCA9IDA7CisJCWludCBpOworCisJCU9VVCgnXDAzMycpOworCQlPVVQoJ1snKTsKKworCQlmb3IgKGkgPSAwOyBhdHRyOyBpKyspIHsKKwkJCXVuc2lnbmVkIGJpdCA9ICgxIDw8IGkpOworCQkJaWYgKCEoYXR0ciAmIGJpdCkpCisJCQkJY29udGludWU7CisJCQlhdHRyICY9IH5iaXQ7CisJCQlpZiAoc2VwKyspCisJCQkJT1VUKCc7Jyk7CisJCQlkc3QgKz0geHNucHJpbnRmKGRzdCwgZW5kIC0gZHN0LCAiJWQiLCBpKTsKKwkJfQorCQlpZiAoIWNvbG9yX2VtcHR5KCZmZykpIHsKKwkJCWlmIChzZXArKykKKwkJCQlPVVQoJzsnKTsKKwkJCWRzdCA9IGNvbG9yX291dHB1dChkc3QsIGVuZCAtIGRzdCwgJmZnLCAwKTsKKwkJfQorCQlpZiAoIWNvbG9yX2VtcHR5KCZiZykpIHsKKwkJCWlmIChzZXArKykKKwkJCQlPVVQoJzsnKTsKKwkJCWRzdCA9IGNvbG9yX291dHB1dChkc3QsIGVuZCAtIGRzdCwgJmJnLCAxKTsKKwkJfQorCQlPVVQoJ20nKTsKKwl9CisJT1VUKDApOworCXJldHVybiAwOworYmFkOgorCXJldHVybiBlcnJvcihfKCJpbnZhbGlkIGNvbG9yIHZhbHVlOiAlLipzIiksIHZhbHVlX2xlbiwgdmFsdWUpOworI3VuZGVmIE9VVAorfQorCitpbnQgZ2l0X2NvbmZpZ19jb2xvcmJvb2woY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAodmFsdWUpIHsKKwkJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAibmV2ZXIiKSkKKwkJCXJldHVybiAwOworCQlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJhbHdheXMiKSkKKwkJCXJldHVybiAxOworCQlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJhdXRvIikpCisJCQlyZXR1cm4gR0lUX0NPTE9SX0FVVE87CisJfQorCisJaWYgKCF2YXIpCisJCXJldHVybiAtMTsKKworCS8qIE1pc3Npbmcgb3IgZXhwbGljaXQgZmFsc2UgdG8gdHVybiBvZmYgY29sb3JpemF0aW9uICovCisJaWYgKCFnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkpCisJCXJldHVybiAwOworCisJLyogYW55IG5vcm1hbCB0cnV0aCB2YWx1ZSBkZWZhdWx0cyB0byAnYXV0bycgKi8KKwlyZXR1cm4gR0lUX0NPTE9SX0FVVE87Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfYXV0b19jb2xvcihpbnQgZmQpCit7CisJc3RhdGljIGludCBjb2xvcl9zdGRlcnJfaXNfdHR5ID0gLTE7CisJaW50ICppc190dHlfcCA9IGZkID09IDEgPyAmY29sb3Jfc3Rkb3V0X2lzX3R0eSA6ICZjb2xvcl9zdGRlcnJfaXNfdHR5OworCWlmICgqaXNfdHR5X3AgPCAwKQorCQkqaXNfdHR5X3AgPSBpc2F0dHkoZmQpOworCWlmICgqaXNfdHR5X3AgfHwgKGZkID09IDEgJiYgcGFnZXJfaW5fdXNlKCkgJiYgcGFnZXJfdXNlX2NvbG9yKSkgeworCQlpZiAoIWlzX3Rlcm1pbmFsX2R1bWIoKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHdhbnRfY29sb3JfZmQoaW50IGZkLCBpbnQgdmFyKQoreworCS8qCisJICogTkVFRFNXT1JLOiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1lcyB1c2VkIGZyb20gbXVsdGlwbGUgdGhyZWFkcywgYW5kCisJICogd2UgZW5kIHVwIHVzaW5nIHdhbnRfYXV0byByYWNpbHkuIFRoYXQgInNob3VsZCBub3QgbWF0dGVyIiBzaW5jZQorCSAqIHdlIGFsd2F5cyB3cml0ZSB0aGUgc2FtZSB2YWx1ZSwgYnV0IGl0J3Mgc3RpbGwgd3JvbmcuIFRoaXMgZnVuY3Rpb24KKwkgKiBpcyBsaXN0ZWQgaW4gLnRzYW4tc3VwcHJlc3Npb25zIGZvciB0aGUgdGltZSBiZWluZy4KKwkgKi8KKworCXN0YXRpYyBpbnQgd2FudF9hdXRvWzNdID0geyAtMSwgLTEsIC0xIH07CisKKwlpZiAoZmQgPCAxIHx8IGZkID49IEFSUkFZX1NJWkUod2FudF9hdXRvKSkKKwkJQlVHKCJmaWxlIGRlc2NyaXB0b3Igb3V0IG9mIHJhbmdlOiAlZCIsIGZkKTsKKworCWlmICh2YXIgPCAwKQorCQl2YXIgPSBnaXRfdXNlX2NvbG9yX2RlZmF1bHQ7CisKKwlpZiAodmFyID09IEdJVF9DT0xPUl9BVVRPKSB7CisJCWlmICh3YW50X2F1dG9bZmRdIDwgMCkKKwkJCXdhbnRfYXV0b1tmZF0gPSBjaGVja19hdXRvX2NvbG9yKGZkKTsKKwkJcmV0dXJuIHdhbnRfYXV0b1tmZF07CisJfQorCXJldHVybiB2YXI7Cit9CisKK2ludCBnaXRfY29sb3JfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImNvbG9yLnVpIikpIHsKKwkJZ2l0X3VzZV9jb2xvcl9kZWZhdWx0ID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZ2l0X2NvbG9yX2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmIChnaXRfY29sb3JfY29uZmlnKHZhciwgdmFsdWUsIGNiKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCit2b2lkIGNvbG9yX3ByaW50X3N0cmJ1ZihGSUxFICpmcCwgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiKQoreworCWlmICgqY29sb3IpCisJCWZwcmludGYoZnAsICIlcyIsIGNvbG9yKTsKKwlmcHJpbnRmKGZwLCAiJXMiLCBzYi0+YnVmKTsKKwlpZiAoKmNvbG9yKQorCQlmcHJpbnRmKGZwLCAiJXMiLCBHSVRfQ09MT1JfUkVTRVQpOworfQorCitzdGF0aWMgaW50IGNvbG9yX3ZmcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqZm10LAorCQl2YV9saXN0IGFyZ3MsIGNvbnN0IGNoYXIgKnRyYWlsKQoreworCWludCByID0gMDsKKworCWlmICgqY29sb3IpCisJCXIgKz0gZnByaW50ZihmcCwgIiVzIiwgY29sb3IpOworCXIgKz0gdmZwcmludGYoZnAsIGZtdCwgYXJncyk7CisJaWYgKCpjb2xvcikKKwkJciArPSBmcHJpbnRmKGZwLCAiJXMiLCBHSVRfQ09MT1JfUkVTRVQpOworCWlmICh0cmFpbCkKKwkJciArPSBmcHJpbnRmKGZwLCAiJXMiLCB0cmFpbCk7CisJcmV0dXJuIHI7Cit9CisKK2ludCBjb2xvcl9mcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWludCByOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJciA9IGNvbG9yX3ZmcHJpbnRmKGZwLCBjb2xvciwgZm10LCBhcmdzLCBOVUxMKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHI7Cit9CisKK2ludCBjb2xvcl9mcHJpbnRmX2xuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWludCByOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJciA9IGNvbG9yX3ZmcHJpbnRmKGZwLCBjb2xvciwgZm10LCBhcmdzLCAiXG4iKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHI7Cit9CisKK2ludCBjb2xvcl9pc19uaWwoY29uc3QgY2hhciAqYykKK3sKKwlyZXR1cm4gIXN0cmNtcChjLCAiTklMIik7Cit9CmRpZmYgLS1naXQgYS9jb2xvci5oIGIvY29sb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODg5NGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY29sb3IuaApAQCAtMCwwICsxLDEzMCBAQAorI2lmbmRlZiBDT0xPUl9ICisjZGVmaW5lIENPTE9SX0gKKworc3RydWN0IHN0cmJ1ZjsKKworLyoKKyAqIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBBTlNJIGNvbG9yIHNlcXVlbmNlIHdlIHdvdWxkIGdlbmVyYXRlOgorICogLSBsZWFkaW5nIEVTQyAnWycgICAgICAgICAgICAyCisgKiAtIGF0dHIgKyAnOycgICAgICAgICAgICAgICAgIDIgKiBudW1fYXR0ciAoZS5nLiAiMTsiKQorICogLSBuby1hdHRyICsgJzsnICAgICAgICAgICAgICAzICogbnVtX2F0dHIgKGUuZy4gIjIyOyIpCisgKiAtIGZnIGNvbG9yICsgJzsnICAgICAgICAgICAgIDE3IChlLmcuICIzODsyOzI1NTsyNTU7MjU1OyIpCisgKiAtIGJnIGNvbG9yICsgJzsnICAgICAgICAgICAgIDE3IChlLmcuICI0ODsyOzI1NTsyNTU7MjU1OyIpCisgKiAtIHRlcm1pbmF0aW5nICdtJyBOVUwgICAgICAgIDIKKyAqCisgKiBUaGUgYWJvdmUgb3ZlcmNvdW50cyBieSBvbmUgc2VtaWNvbG9uIGJ1dCBpdCBpcyBjbG9zZSBlbm91Z2guCisgKgorICogVGhlIHNwYWNlIGZvciBhdHRyaWJ1dGVzIGlzIGFsc28gc2xpZ2h0bHkgb3ZlcmFsbG9jYXRlZCwgYXMKKyAqIHRoZSBuZWdhdGlvbiBmb3Igc29tZSBhdHRyaWJ1dGVzIGlzIHRoZSBzYW1lIChlLmcuLCBub2JvbGQgYW5kIG5vZGltKS4KKyAqCisgKiBXZSBhbGxvY2F0ZSBzcGFjZSBmb3IgNyBhdHRyaWJ1dGVzLgorICovCisjZGVmaW5lIENPTE9SX01BWExFTiA3NQorCisjZGVmaW5lIEdJVF9DT0xPUl9OT1JNQUwJIiIKKyNkZWZpbmUgR0lUX0NPTE9SX1JFU0VUCQkiXDAzM1ttIgorI2RlZmluZSBHSVRfQ09MT1JfQk9MRAkJIlwwMzNbMW0iCisjZGVmaW5lIEdJVF9DT0xPUl9SRUQJCSJcMDMzWzMxbSIKKyNkZWZpbmUgR0lUX0NPTE9SX0dSRUVOCQkiXDAzM1szMm0iCisjZGVmaW5lIEdJVF9DT0xPUl9ZRUxMT1cJIlwwMzNbMzNtIgorI2RlZmluZSBHSVRfQ09MT1JfQkxVRQkJIlwwMzNbMzRtIgorI2RlZmluZSBHSVRfQ09MT1JfTUFHRU5UQQkiXDAzM1szNW0iCisjZGVmaW5lIEdJVF9DT0xPUl9DWUFOCQkiXDAzM1szNm0iCisjZGVmaW5lIEdJVF9DT0xPUl9CT0xEX1JFRAkiXDAzM1sxOzMxbSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JPTERfR1JFRU4JIlwwMzNbMTszMm0iCisjZGVmaW5lIEdJVF9DT0xPUl9CT0xEX1lFTExPVwkiXDAzM1sxOzMzbSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JPTERfQkxVRQkiXDAzM1sxOzM0bSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JPTERfTUFHRU5UQQkiXDAzM1sxOzM1bSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JPTERfQ1lBTgkiXDAzM1sxOzM2bSIKKyNkZWZpbmUgR0lUX0NPTE9SX0ZBSU5UX1JFRAkiXDAzM1syOzMxbSIKKyNkZWZpbmUgR0lUX0NPTE9SX0ZBSU5UX0dSRUVOCSJcMDMzWzI7MzJtIgorI2RlZmluZSBHSVRfQ09MT1JfRkFJTlRfWUVMTE9XCSJcMDMzWzI7MzNtIgorI2RlZmluZSBHSVRfQ09MT1JfRkFJTlRfQkxVRQkiXDAzM1syOzM0bSIKKyNkZWZpbmUgR0lUX0NPTE9SX0ZBSU5UX01BR0VOVEEJIlwwMzNbMjszNW0iCisjZGVmaW5lIEdJVF9DT0xPUl9GQUlOVF9DWUFOCSJcMDMzWzI7MzZtIgorI2RlZmluZSBHSVRfQ09MT1JfQkdfUkVECSJcMDMzWzQxbSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JHX0dSRUVOCSJcMDMzWzQybSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JHX1lFTExPVwkiXDAzM1s0M20iCisjZGVmaW5lIEdJVF9DT0xPUl9CR19CTFVFCSJcMDMzWzQ0bSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JHX01BR0VOVEEJIlwwMzNbNDVtIgorI2RlZmluZSBHSVRfQ09MT1JfQkdfQ1lBTgkiXDAzM1s0Nm0iCisjZGVmaW5lIEdJVF9DT0xPUl9GQUlOVAkJIlwwMzNbMm0iCisjZGVmaW5lIEdJVF9DT0xPUl9GQUlOVF9JVEFMSUMJIlwwMzNbMjszbSIKKyNkZWZpbmUgR0lUX0NPTE9SX1JFVkVSU0UJIlwwMzNbN20iCisKKy8qIEEgc3BlY2lhbCB2YWx1ZSBtZWFuaW5nICJubyBjb2xvciBzZWxlY3RlZCIgKi8KKyNkZWZpbmUgR0lUX0NPTE9SX05JTCAiTklMIgorCisvKgorICogVGhlIGZpcnN0IHRocmVlIGFyZSBjaG9zZW4gdG8gbWF0Y2ggY29tbW9uIHVzYWdlIGluIHRoZSBjb2RlLCBhbmQgd2hhdCBpcworICogcmV0dXJuZWQgZnJvbSBnaXRfY29uZmlnX2NvbG9yYm9vbC4gVGhlICJhdXRvIiB2YWx1ZSBjYW4gYmUgcmV0dXJuZWQgZnJvbQorICogY29uZmlnX2NvbG9yYm9vbCwgYW5kIHdpbGwgYmUgY29udmVydGVkIGJ5IHdhbnRfY29sb3IoKSBpbnRvIGVpdGhlciAwIG9yIDEuCisgKi8KKyNkZWZpbmUgR0lUX0NPTE9SX1VOS05PV04gLTEKKyNkZWZpbmUgR0lUX0NPTE9SX05FVkVSICAwCisjZGVmaW5lIEdJVF9DT0xPUl9BTFdBWVMgMQorI2RlZmluZSBHSVRfQ09MT1JfQVVUTyAgIDIKKworLyogQSBkZWZhdWx0IGxpc3Qgb2YgY29sb3JzIHRvIHVzZSBmb3IgY29tbWl0IGdyYXBocyBhbmQgc2hvdy1icmFuY2ggb3V0cHV0ICovCitleHRlcm4gY29uc3QgY2hhciAqY29sdW1uX2NvbG9yc19hbnNpW107CitleHRlcm4gY29uc3QgaW50IGNvbHVtbl9jb2xvcnNfYW5zaV9tYXg7CisKKy8qCisgKiBHZW5lcmFsbHkgdGhlIGNvbG9yIGNvZGUgd2lsbCBsYXppbHkgZmlndXJlIHRoaXMgb3V0IGl0c2VsZiwgYnV0CisgKiB0aGlzIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciBjYWxsZXJzIHRvIG92ZXJyaWRlIGF1dG9kZXRlY3Rpb24uCisgKi8KK2V4dGVybiBpbnQgY29sb3Jfc3Rkb3V0X2lzX3R0eTsKKworLyoKKyAqIFVzZSB0aGUgZmlyc3Qgb25lIGlmIHlvdSBuZWVkIG9ubHkgY29sb3IgY29uZmlnOyB0aGUgc2Vjb25kIGlzIGEgY29udmVuaWVuY2UKKyAqIGlmIHlvdSBhcmUganVzdCBnb2luZyB0byBjaGFuZ2UgdG8gZ2l0X2RlZmF1bHRfY29uZmlnLCB0b28uCisgKi8KK2ludCBnaXRfY29sb3JfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKK2ludCBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOworCisvKgorICogUGFyc2UgYSBjb25maWcgb3B0aW9uLCB3aGljaCBjYW4gYmUgYSBib29sZWFuIG9yIG9uZSBvZgorICogIm5ldmVyIiwgImF1dG8iLCAiYWx3YXlzIi4gUmV0dXJuIGEgY29uc3RhbnQgb2YKKyAqIEdJVF9DT0xPUl9ORVZFUiBmb3IgIm5ldmVyIiBvciBuZWdhdGl2ZSBib29sZWFuLAorICogR0lUX0NPTE9SX0FMV0FZUyBmb3IgImFsd2F5cyIgb3IgYSBwb3NpdGl2ZSBib29sZWFuLAorICogYW5kIEdJVF9DT0xPUl9BVVRPIGZvciAiYXV0byIuCisgKi8KK2ludCBnaXRfY29uZmlnX2NvbG9yYm9vbChjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKTsKKworLyoKKyAqIFJldHVybiBhIGJvb2xlYW4gd2hldGhlciB0byB1c2UgY29sb3IsIHdoZXJlIHRoZSBhcmd1bWVudCAndmFyJyBpcworICogb25lIG9mIEdJVF9DT0xPUl9VTktOT1dOLCBHSVRfQ09MT1JfTkVWRVIsIEdJVF9DT0xPUl9BTFdBWVMsIEdJVF9DT0xPUl9BVVRPLgorICovCitpbnQgd2FudF9jb2xvcl9mZChpbnQgZmQsIGludCB2YXIpOworI2RlZmluZSB3YW50X2NvbG9yKGNvbG9yYm9vbCkgd2FudF9jb2xvcl9mZCgxLCAoY29sb3Jib29sKSkKKyNkZWZpbmUgd2FudF9jb2xvcl9zdGRlcnIoY29sb3Jib29sKSB3YW50X2NvbG9yX2ZkKDIsIChjb2xvcmJvb2wpKQorCisvKgorICogVHJhbnNsYXRlIGEgR2l0IGNvbG9yIGZyb20gJ3ZhbHVlJyBpbnRvIGEgc3RyaW5nIHRoYXQgdGhlIHRlcm1pbmFsIGNhbgorICogaW50ZXJwcmV0IGFuZCBzdG9yZSBpdCBpbnRvICdkc3QnLiBUaGUgR2l0IGNvbG9yIHZhbHVlcyBhcmUgb2YgdGhlIGZvcm0KKyAqICJmb3JlZ3JvdW5kIFtiYWNrZ3JvdW5kXSBbYXR0cl0iIHdoZXJlIGZvcmUtIGFuZCBiYWNrZ3JvdW5kIGNhbiBiZSBhIGNvbG9yCisgKiBuYW1lICgicmVkIiksIGEgUkdCIGNvZGUgKCMweEZGMDAwMCkgb3IgYSAyNTYtY29sb3ItbW9kZSBmcm9tIHRoZSB0ZXJtaW5hbC4KKyAqLworaW50IGNvbG9yX3BhcnNlKGNvbnN0IGNoYXIgKnZhbHVlLCBjaGFyICpkc3QpOworaW50IGNvbG9yX3BhcnNlX21lbShjb25zdCBjaGFyICp2YWx1ZSwgaW50IGxlbiwgY2hhciAqZHN0KTsKKworLyoKKyAqIE91dHB1dCB0aGUgZm9ybWF0dGVkIHN0cmluZyBpbiB0aGUgc3BlY2lmaWVkIGNvbG9yIChhbmQgdGhlbiByZXNldCB0byBub3JtYWwKKyAqIGNvbG9yIHNvIHN1YnNlcXVlbnQgb3V0cHV0IGlzIHVuY29sb3JlZCkuIE9taXRzIHRoZSBjb2xvciBlbmNhcHN1bGF0aW9uIGlmCisgKiBgY29sb3JgIGlzIE5VTEwuIFRoZSBgY29sb3JfZnByaW50Zl9sbmAgcHJpbnRzIGEgbmV3IGxpbmUgYWZ0ZXIgcmVzZXR0aW5nCisgKiB0aGUgY29sb3IuICBUaGUgYGNvbG9yX3ByaW50X3N0cmJ1ZmAgcHJpbnRzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4KKyAqIHN0cmJ1ZiAoQlVHOiBidXQgb25seSB1cCB0byBpdHMgZmlyc3QgTlVMIGNoYXJhY3RlcikuCisgKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitpbnQgY29sb3JfZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitpbnQgY29sb3JfZnByaW50Zl9sbihGSUxFICpmcCwgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgY29sb3JfcHJpbnRfc3RyYnVmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc2IpOworCisvKgorICogQ2hlY2sgaWYgdGhlIGdpdmVuIGNvbG9yIGlzIEdJVF9DT0xPUl9OSUwgdGhhdCBtZWFucyAibm8gY29sb3Igc2VsZWN0ZWQiLgorICogVGhlIGNhbGxlciBuZWVkcyB0byByZXBsYWNlIHRoZSBjb2xvciB3aXRoIHRoZSBhY3R1YWwgZGVzaXJlZCBjb2xvci4KKyAqLworaW50IGNvbG9yX2lzX25pbChjb25zdCBjaGFyICpjb2xvcik7CisKKyNlbmRpZiAvKiBDT0xPUl9IICovCmRpZmYgLS1naXQgYS9jb2x1bW4uYyBiL2NvbHVtbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMzhlZWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2x1bW4uYwpAQCAtMCwwICsxLDQwNSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29sdW1uLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisKKyNkZWZpbmUgWFkyTElORUFSKGQsIHgsIHkpIChDT0xfTEFZT1VUKChkKS0+Y29sb3B0cykgPT0gQ09MX0NPTFVNTiA/IFwKKwkJCSAgICAoeCkgKiAoZCktPnJvd3MgKyAoeSkgOiBcCisJCQkgICAgKHkpICogKGQpLT5jb2xzICsgKHgpKQorCitzdHJ1Y3QgY29sdW1uX2RhdGEgeworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdDsKKwl1bnNpZ25lZCBpbnQgY29sb3B0czsKKwlzdHJ1Y3QgY29sdW1uX29wdGlvbnMgb3B0czsKKworCWludCByb3dzLCBjb2xzOworCWludCAqbGVuOwkJLyogY2VsbCBsZW5ndGggKi8KKwlpbnQgKndpZHRoOwkgICAgICAvKiBpbmRleCB0byB0aGUgbG9uZ2VzdCByb3cgaW4gY29sdW1uICovCit9OworCisvKiByZXR1cm4gbGVuZ3RoIG9mICdzJyBpbiBsZXR0ZXJzLCBBTlNJIGVzY2FwZXMgc3RyaXBwZWQgKi8KK3N0YXRpYyBpbnQgaXRlbV9sZW5ndGgoY29uc3QgY2hhciAqcykKK3sKKwlyZXR1cm4gdXRmOF9zdHJud2lkdGgocywgLTEsIDEpOworfQorCisvKgorICogQ2FsY3VsYXRlIGNlbGwgd2lkdGgsIHJvd3MgYW5kIGNvbHMgZm9yIGEgdGFibGUgb2YgZXF1YWwgY2VsbHMsIGdpdmVuCisgKiB0YWJsZSB3aWR0aCBhbmQgaG93IG1hbnkgc3BhY2VzIGJldHdlZW4gY2VsbHMuCisgKi8KK3N0YXRpYyB2b2lkIGxheW91dChzdHJ1Y3QgY29sdW1uX2RhdGEgKmRhdGEsIGludCAqd2lkdGgpCit7CisJaW50IGk7CisKKwkqd2lkdGggPSAwOworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5saXN0LT5ucjsgaSsrKQorCQlpZiAoKndpZHRoIDwgZGF0YS0+bGVuW2ldKQorCQkJKndpZHRoID0gZGF0YS0+bGVuW2ldOworCisJKndpZHRoICs9IGRhdGEtPm9wdHMucGFkZGluZzsKKworCWRhdGEtPmNvbHMgPSAoZGF0YS0+b3B0cy53aWR0aCAtIHN0cmxlbihkYXRhLT5vcHRzLmluZGVudCkpIC8gKndpZHRoOworCWlmIChkYXRhLT5jb2xzID09IDApCisJCWRhdGEtPmNvbHMgPSAxOworCisJZGF0YS0+cm93cyA9IERJVl9ST1VORF9VUChkYXRhLT5saXN0LT5uciwgZGF0YS0+Y29scyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVfY29sdW1uX3dpZHRoKHN0cnVjdCBjb2x1bW5fZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSwgeCwgeTsKKwlmb3IgKHggPSAwOyB4IDwgZGF0YS0+Y29sczsgeCsrKSB7CisJCWRhdGEtPndpZHRoW3hdID0gWFkyTElORUFSKGRhdGEsIHgsIDApOworCQlmb3IgKHkgPSAwOyB5IDwgZGF0YS0+cm93czsgeSsrKSB7CisJCQlpID0gWFkyTElORUFSKGRhdGEsIHgsIHkpOworCQkJaWYgKGkgPCBkYXRhLT5saXN0LT5uciAmJgorCQkJICAgIGRhdGEtPmxlbltkYXRhLT53aWR0aFt4XV0gPCBkYXRhLT5sZW5baV0pCisJCQkJZGF0YS0+d2lkdGhbeF0gPSBpOworCQl9CisJfQorfQorCisvKgorICogU2hyaW5rIGFsbCBjb2x1bW5zIGJ5IHNob3J0ZW5pbmcgdGhlbSBvbmUgcm93IGVhY2ggdGltZSAoYW5kIGFkZGluZworICogbW9yZSBjb2x1bW5zIGFsb25nIHRoZSB3YXkpLiBIb3BlZnVsbHkgdGhlIGxvbmdlc3QgY2VsbCB3aWxsIGJlCisgKiBtb3ZlZCB0byB0aGUgbmV4dCBjb2x1bW4sIGNvbHVtbiBpcyBzaHJ1bmsgc28gd2UgaGF2ZSBtb3JlIHNwYWNlCisgKiBmb3IgbmV3IGNvbHVtbnMuIFRoZSBwcm9jZXNzIGVuZHMgd2hlbiB0aGUgd2hvbGUgdGhpbmcgbm8gbG9uZ2VyCisgKiBmaXRzIGluIGRhdGEtPnRvdGFsX3dpZHRoLgorICovCitzdGF0aWMgdm9pZCBzaHJpbmtfY29sdW1ucyhzdHJ1Y3QgY29sdW1uX2RhdGEgKmRhdGEpCit7CisJUkVBTExPQ19BUlJBWShkYXRhLT53aWR0aCwgZGF0YS0+Y29scyk7CisJd2hpbGUgKGRhdGEtPnJvd3MgPiAxKSB7CisJCWludCB4LCB0b3RhbF93aWR0aCwgY29scywgcm93czsKKwkJcm93cyA9IGRhdGEtPnJvd3M7CisJCWNvbHMgPSBkYXRhLT5jb2xzOworCisJCWRhdGEtPnJvd3MtLTsKKwkJZGF0YS0+Y29scyA9IERJVl9ST1VORF9VUChkYXRhLT5saXN0LT5uciwgZGF0YS0+cm93cyk7CisJCWlmIChkYXRhLT5jb2xzICE9IGNvbHMpCisJCQlSRUFMTE9DX0FSUkFZKGRhdGEtPndpZHRoLCBkYXRhLT5jb2xzKTsKKwkJY29tcHV0ZV9jb2x1bW5fd2lkdGgoZGF0YSk7CisKKwkJdG90YWxfd2lkdGggPSBzdHJsZW4oZGF0YS0+b3B0cy5pbmRlbnQpOworCQlmb3IgKHggPSAwOyB4IDwgZGF0YS0+Y29sczsgeCsrKSB7CisJCQl0b3RhbF93aWR0aCArPSBkYXRhLT5sZW5bZGF0YS0+d2lkdGhbeF1dOworCQkJdG90YWxfd2lkdGggKz0gZGF0YS0+b3B0cy5wYWRkaW5nOworCQl9CisJCWlmICh0b3RhbF93aWR0aCA+IGRhdGEtPm9wdHMud2lkdGgpIHsKKwkJCWRhdGEtPnJvd3MgPSByb3dzOworCQkJZGF0YS0+Y29scyA9IGNvbHM7CisJCQlicmVhazsKKwkJfQorCX0KKwljb21wdXRlX2NvbHVtbl93aWR0aChkYXRhKTsKK30KKworLyogRGlzcGxheSB3aXRob3V0IGxheW91dCB3aGVuIG5vdCBlbmFibGVkICovCitzdGF0aWMgdm9pZCBkaXNwbGF5X3BsYWluKGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCSAgY29uc3QgY2hhciAqaW5kZW50LCBjb25zdCBjaGFyICpubCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQlwcmludGYoIiVzJXMlcyIsIGluZGVudCwgbGlzdC0+aXRlbXNbaV0uc3RyaW5nLCBubCk7Cit9CisKKy8qIFByaW50IGEgY2VsbCB0byBzdGRvdXQgd2l0aCBhbGwgbmVjZXNzYXJ5IGxlYWRpbmcvdHJhbGluZyBzcGFjZSAqLworc3RhdGljIGludCBkaXNwbGF5X2NlbGwoc3RydWN0IGNvbHVtbl9kYXRhICpkYXRhLCBpbnQgaW5pdGlhbF93aWR0aCwKKwkJCWNvbnN0IGNoYXIgKmVtcHR5X2NlbGwsIGludCB4LCBpbnQgeSkKK3sKKwlpbnQgaSwgbGVuLCBuZXdsaW5lOworCisJaSA9IFhZMkxJTkVBUihkYXRhLCB4LCB5KTsKKwlpZiAoaSA+PSBkYXRhLT5saXN0LT5ucikKKwkJcmV0dXJuIC0xOworCisJbGVuID0gZGF0YS0+bGVuW2ldOworCWlmIChkYXRhLT53aWR0aCAmJiBkYXRhLT5sZW5bZGF0YS0+d2lkdGhbeF1dIDwgaW5pdGlhbF93aWR0aCkgeworCQkvKgorCQkgKiBlbXB0eV9jZWxsIGhhcyBpbml0aWFsX3dpZHRoIGNoYXJzLCBpZiByZWFsIGNvbHVtbgorCQkgKiBpcyBuYXJyb3dlciwgaW5jcmVhc2UgbGVuIGEgYml0IHNvIHdlIGZpbGwgbGVzcworCQkgKiBzcGFjZS4KKwkJICovCisJCWxlbiArPSBpbml0aWFsX3dpZHRoIC0gZGF0YS0+bGVuW2RhdGEtPndpZHRoW3hdXTsKKwkJbGVuIC09IGRhdGEtPm9wdHMucGFkZGluZzsKKwl9CisKKwlpZiAoQ09MX0xBWU9VVChkYXRhLT5jb2xvcHRzKSA9PSBDT0xfQ09MVU1OKQorCQluZXdsaW5lID0gaSArIGRhdGEtPnJvd3MgPj0gZGF0YS0+bGlzdC0+bnI7CisJZWxzZQorCQluZXdsaW5lID0geCA9PSBkYXRhLT5jb2xzIC0gMSB8fCBpID09IGRhdGEtPmxpc3QtPm5yIC0gMTsKKworCXByaW50ZigiJXMlcyVzIiwKKwkgICAgICAgeCA9PSAwID8gZGF0YS0+b3B0cy5pbmRlbnQgOiAiIiwKKwkgICAgICAgZGF0YS0+bGlzdC0+aXRlbXNbaV0uc3RyaW5nLAorCSAgICAgICBuZXdsaW5lID8gZGF0YS0+b3B0cy5ubCA6IGVtcHR5X2NlbGwgKyBsZW4pOworCXJldHVybiAwOworfQorCisvKiBEaXNwbGF5IENPTF9DT0xVTU4gb3IgQ09MX1JPVyAqLworc3RhdGljIHZvaWQgZGlzcGxheV90YWJsZShjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsCisJCQkgIHVuc2lnbmVkIGludCBjb2xvcHRzLAorCQkJICBjb25zdCBzdHJ1Y3QgY29sdW1uX29wdGlvbnMgKm9wdHMpCit7CisJc3RydWN0IGNvbHVtbl9kYXRhIGRhdGE7CisJaW50IHgsIHksIGksIGluaXRpYWxfd2lkdGg7CisJY2hhciAqZW1wdHlfY2VsbDsKKworCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKwlkYXRhLmxpc3QgPSBsaXN0OworCWRhdGEuY29sb3B0cyA9IGNvbG9wdHM7CisJZGF0YS5vcHRzID0gKm9wdHM7CisKKwlBTExPQ19BUlJBWShkYXRhLmxlbiwgbGlzdC0+bnIpOworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQlkYXRhLmxlbltpXSA9IGl0ZW1fbGVuZ3RoKGxpc3QtPml0ZW1zW2ldLnN0cmluZyk7CisKKwlsYXlvdXQoJmRhdGEsICZpbml0aWFsX3dpZHRoKTsKKworCWlmIChjb2xvcHRzICYgQ09MX0RFTlNFKQorCQlzaHJpbmtfY29sdW1ucygmZGF0YSk7CisKKwllbXB0eV9jZWxsID0geG1hbGxvY3ooaW5pdGlhbF93aWR0aCk7CisJbWVtc2V0KGVtcHR5X2NlbGwsICcgJywgaW5pdGlhbF93aWR0aCk7CisJZm9yICh5ID0gMDsgeSA8IGRhdGEucm93czsgeSsrKSB7CisJCWZvciAoeCA9IDA7IHggPCBkYXRhLmNvbHM7IHgrKykKKwkJCWlmIChkaXNwbGF5X2NlbGwoJmRhdGEsIGluaXRpYWxfd2lkdGgsIGVtcHR5X2NlbGwsIHgsIHkpKQorCQkJCWJyZWFrOworCX0KKworCWZyZWUoZGF0YS5sZW4pOworCWZyZWUoZGF0YS53aWR0aCk7CisJZnJlZShlbXB0eV9jZWxsKTsKK30KKwordm9pZCBwcmludF9jb2x1bW5zKGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgdW5zaWduZWQgaW50IGNvbG9wdHMsCisJCSAgIGNvbnN0IHN0cnVjdCBjb2x1bW5fb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgY29sdW1uX29wdGlvbnMgbm9wdHM7CisKKwlpZiAoIWxpc3QtPm5yKQorCQlyZXR1cm47CisJYXNzZXJ0KChjb2xvcHRzICYgQ09MX0VOQUJMRV9NQVNLKSAhPSBDT0xfQVVUTyk7CisKKwltZW1zZXQoJm5vcHRzLCAwLCBzaXplb2Yobm9wdHMpKTsKKwlub3B0cy5pbmRlbnQgPSBvcHRzICYmIG9wdHMtPmluZGVudCA/IG9wdHMtPmluZGVudCA6ICIiOworCW5vcHRzLm5sID0gb3B0cyAmJiBvcHRzLT5ubCA/IG9wdHMtPm5sIDogIlxuIjsKKwlub3B0cy5wYWRkaW5nID0gb3B0cyA/IG9wdHMtPnBhZGRpbmcgOiAxOworCW5vcHRzLndpZHRoID0gb3B0cyAmJiBvcHRzLT53aWR0aCA/IG9wdHMtPndpZHRoIDogdGVybV9jb2x1bW5zKCkgLSAxOworCWlmICghY29sdW1uX2FjdGl2ZShjb2xvcHRzKSkgeworCQlkaXNwbGF5X3BsYWluKGxpc3QsICIiLCAiXG4iKTsKKwkJcmV0dXJuOworCX0KKwlzd2l0Y2ggKENPTF9MQVlPVVQoY29sb3B0cykpIHsKKwljYXNlIENPTF9QTEFJTjoKKwkJZGlzcGxheV9wbGFpbihsaXN0LCBub3B0cy5pbmRlbnQsIG5vcHRzLm5sKTsKKwkJYnJlYWs7CisJY2FzZSBDT0xfUk9XOgorCWNhc2UgQ09MX0NPTFVNTjoKKwkJZGlzcGxheV90YWJsZShsaXN0LCBjb2xvcHRzLCAmbm9wdHMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoImludmFsaWQgbGF5b3V0IG1vZGUgJWQiLCBDT0xfTEFZT1VUKGNvbG9wdHMpKTsKKwl9Cit9CisKK2ludCBmaW5hbGl6ZV9jb2xvcHRzKHVuc2lnbmVkIGludCAqY29sb3B0cywgaW50IHN0ZG91dF9pc190dHkpCit7CisJaWYgKCgqY29sb3B0cyAmIENPTF9FTkFCTEVfTUFTSykgPT0gQ09MX0FVVE8pIHsKKwkJaWYgKHN0ZG91dF9pc190dHkgPCAwKQorCQkJc3Rkb3V0X2lzX3R0eSA9IGlzYXR0eSgxKTsKKwkJKmNvbG9wdHMgJj0gfkNPTF9FTkFCTEVfTUFTSzsKKwkJaWYgKHN0ZG91dF9pc190dHkgfHwgcGFnZXJfaW5fdXNlKCkpCisJCQkqY29sb3B0cyB8PSBDT0xfRU5BQkxFRDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjb2xvcHQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IHZhbHVlOworCXVuc2lnbmVkIGludCBtYXNrOworfTsKKworI2RlZmluZSBMQVlPVVRfU0VUIDEKKyNkZWZpbmUgRU5BQkxFX1NFVCAyCisKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0aW9uKGNvbnN0IGNoYXIgKmFyZywgaW50IGxlbiwgdW5zaWduZWQgaW50ICpjb2xvcHRzLAorCQkJaW50ICpncm91cF9zZXQpCit7CisJc3RydWN0IGNvbG9wdCBvcHRzW10gPSB7CisJCXsgImFsd2F5cyIsIENPTF9FTkFCTEVELCAgQ09MX0VOQUJMRV9NQVNLIH0sCisJCXsgIm5ldmVyIiwgIENPTF9ESVNBQkxFRCwgQ09MX0VOQUJMRV9NQVNLIH0sCisJCXsgImF1dG8iLCAgIENPTF9BVVRPLCAgICAgQ09MX0VOQUJMRV9NQVNLIH0sCisJCXsgInBsYWluIiwgIENPTF9QTEFJTiwgICAgQ09MX0xBWU9VVF9NQVNLIH0sCisJCXsgImNvbHVtbiIsIENPTF9DT0xVTU4sICAgQ09MX0xBWU9VVF9NQVNLIH0sCisJCXsgInJvdyIsICAgIENPTF9ST1csICAgICAgQ09MX0xBWU9VVF9NQVNLIH0sCisJCXsgImRlbnNlIiwgIENPTF9ERU5TRSwgICAgMCB9LAorCX07CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvcHRzKTsgaSsrKSB7CisJCWludCBzZXQgPSAxLCBhcmdfbGVuID0gbGVuLCBuYW1lX2xlbjsKKwkJY29uc3QgY2hhciAqYXJnX3N0ciA9IGFyZzsKKworCQlpZiAoIW9wdHNbaV0ubWFzaykgeworCQkJaWYgKGFyZ19sZW4gPiAyICYmICFzdHJuY21wKGFyZ19zdHIsICJubyIsIDIpKSB7CisJCQkJYXJnX3N0ciArPSAyOworCQkJCWFyZ19sZW4gLT0gMjsKKwkJCQlzZXQgPSAwOworCQkJfQorCQl9CisKKwkJbmFtZV9sZW4gPSBzdHJsZW4ob3B0c1tpXS5uYW1lKTsKKwkJaWYgKGFyZ19sZW4gIT0gbmFtZV9sZW4gfHwKKwkJICAgIHN0cm5jbXAoYXJnX3N0ciwgb3B0c1tpXS5uYW1lLCBuYW1lX2xlbikpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKG9wdHNbaV0ubWFzaykgeworCQljYXNlIENPTF9FTkFCTEVfTUFTSzoKKwkJCSpncm91cF9zZXQgfD0gRU5BQkxFX1NFVDsKKwkJCWJyZWFrOworCQljYXNlIENPTF9MQVlPVVRfTUFTSzoKKwkJCSpncm91cF9zZXQgfD0gTEFZT1VUX1NFVDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKG9wdHNbaV0ubWFzaykKKwkJCSpjb2xvcHRzID0gKCpjb2xvcHRzICYgfm9wdHNbaV0ubWFzaykgfCBvcHRzW2ldLnZhbHVlOworCQllbHNlIHsKKwkJCWlmIChzZXQpCisJCQkJKmNvbG9wdHMgfD0gb3B0c1tpXS52YWx1ZTsKKwkJCWVsc2UKKwkJCQkqY29sb3B0cyAmPSB+b3B0c1tpXS52YWx1ZTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZXJyb3IoInVuc3VwcG9ydGVkIG9wdGlvbiAnJXMnIiwgYXJnKTsKK30KKworc3RhdGljIGludCBwYXJzZV9jb25maWcodW5zaWduZWQgaW50ICpjb2xvcHRzLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwljb25zdCBjaGFyICpzZXAgPSAiICwiOworCWludCBncm91cF9zZXQgPSAwOworCisJd2hpbGUgKCp2YWx1ZSkgeworCQlpbnQgbGVuID0gc3RyY3Nwbih2YWx1ZSwgc2VwKTsKKwkJaWYgKGxlbikgeworCQkJaWYgKHBhcnNlX29wdGlvbih2YWx1ZSwgbGVuLCBjb2xvcHRzLCAmZ3JvdXBfc2V0KSkKKwkJCQlyZXR1cm4gLTE7CisKKwkJCXZhbHVlICs9IGxlbjsKKwkJfQorCQl2YWx1ZSArPSBzdHJzcG4odmFsdWUsIHNlcCk7CisJfQorCS8qCisJICogSWYgbm9uZSBvZiAiYWx3YXlzIiwgIm5ldmVyIiwgYW5kICJhdXRvIiBpcyBzcGVjaWZpZWQsIHRoZW4gc2V0dGluZworCSAqIGxheW91dCBpbXBsaWVzICJhbHdheXMiLgorCSAqCisJICogQ3VycmVudCB2YWx1ZSBpbiBDT0xfRU5BQkxFX01BU0sgaXMgZGlzcmVnYXJkZWQuIFRoaXMgbWVhbnMgaWYKKwkgKiB5b3Ugc2V0IGNvbHVtbi51aSA9IGF1dG8gYW5kIHBhc3MgLS1jb2x1bW49cm93LCB0aGVuICJhdXRvIgorCSAqIHdpbGwgYmVjb21lICJhbHdheXMiLgorCSAqLworCWlmICgoZ3JvdXBfc2V0ICYgTEFZT1VUX1NFVCkgJiYgIShncm91cF9zZXQgJiBFTkFCTEVfU0VUKSkKKwkJKmNvbG9wdHMgPSAoKmNvbG9wdHMgJiB+Q09MX0VOQUJMRV9NQVNLKSB8IENPTF9FTkFCTEVEOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbHVtbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCSBjb25zdCBjaGFyICprZXksIHVuc2lnbmVkIGludCAqY29sb3B0cykKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwlpZiAocGFyc2VfY29uZmlnKGNvbG9wdHMsIHZhbHVlKSkKKwkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGNvbHVtbi4lcyBtb2RlICVzIiwga2V5LCB2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfY29sdW1uX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkgICAgICBjb25zdCBjaGFyICpjb21tYW5kLCB1bnNpZ25lZCBpbnQgKmNvbG9wdHMpCit7CisJY29uc3QgY2hhciAqaXQ7CisKKwlpZiAoIXNraXBfcHJlZml4KHZhciwgImNvbHVtbi4iLCAmaXQpKQorCQlyZXR1cm4gMDsKKworCWlmICghc3RyY21wKGl0LCAidWkiKSkKKwkJcmV0dXJuIGNvbHVtbl9jb25maWcodmFyLCB2YWx1ZSwgInVpIiwgY29sb3B0cyk7CisKKwlpZiAoY29tbWFuZCAmJiAhc3RyY21wKGl0LCBjb21tYW5kKSkKKwkJcmV0dXJuIGNvbHVtbl9jb25maWcodmFyLCB2YWx1ZSwgaXQsIGNvbG9wdHMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZW9wdF9jb2x1bW5fY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwl1bnNpZ25lZCBpbnQgKmNvbG9wdHMgPSBvcHQtPnZhbHVlOworCSpjb2xvcHRzIHw9IENPTF9QQVJTRU9QVDsKKwkqY29sb3B0cyAmPSB+Q09MX0VOQUJMRV9NQVNLOworCWlmICh1bnNldCkJCS8qIC0tbm8tY29sdW1uID09IG5ldmVyICovCisJCXJldHVybiAwOworCS8qIC0tY29sdW1uID09IGFsd2F5cyB1bmxlc3MgImFyZyIgc3RhdGVzIG90aGVyd2lzZSAqLworCSpjb2xvcHRzIHw9IENPTF9FTkFCTEVEOworCWlmIChhcmcpCisJCXJldHVybiBwYXJzZV9jb25maWcoY29sb3B0cywgYXJnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZkX291dCA9IC0xOworc3RhdGljIHN0cnVjdCBjaGlsZF9wcm9jZXNzIGNvbHVtbl9wcm9jZXNzID0gQ0hJTERfUFJPQ0VTU19JTklUOworCitpbnQgcnVuX2NvbHVtbl9maWx0ZXIoaW50IGNvbG9wdHMsIGNvbnN0IHN0cnVjdCBjb2x1bW5fb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSAqYXJndjsKKworCWlmIChmZF9vdXQgIT0gLTEpCisJCXJldHVybiAtMTsKKworCWNoaWxkX3Byb2Nlc3NfaW5pdCgmY29sdW1uX3Byb2Nlc3MpOworCWFyZ3YgPSAmY29sdW1uX3Byb2Nlc3MuYXJnczsKKworCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiY29sdW1uIik7CisJYXJndl9hcnJheV9wdXNoZihhcmd2LCAiLS1yYXctbW9kZT0lZCIsIGNvbG9wdHMpOworCWlmIChvcHRzICYmIG9wdHMtPndpZHRoKQorCQlhcmd2X2FycmF5X3B1c2hmKGFyZ3YsICItLXdpZHRoPSVkIiwgb3B0cy0+d2lkdGgpOworCWlmIChvcHRzICYmIG9wdHMtPmluZGVudCkKKwkJYXJndl9hcnJheV9wdXNoZihhcmd2LCAiLS1pbmRlbnQ9JXMiLCBvcHRzLT5pbmRlbnQpOworCWlmIChvcHRzICYmIG9wdHMtPnBhZGRpbmcpCisJCWFyZ3ZfYXJyYXlfcHVzaGYoYXJndiwgIi0tcGFkZGluZz0lZCIsIG9wdHMtPnBhZGRpbmcpOworCisJZmZsdXNoKHN0ZG91dCk7CisJY29sdW1uX3Byb2Nlc3MuaW4gPSAtMTsKKwljb2x1bW5fcHJvY2Vzcy5vdXQgPSBkdXAoMSk7CisJY29sdW1uX3Byb2Nlc3MuZ2l0X2NtZCA9IDE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmY29sdW1uX3Byb2Nlc3MpKQorCQlyZXR1cm4gLTI7CisKKwlmZF9vdXQgPSBkdXAoMSk7CisJY2xvc2UoMSk7CisJZHVwMihjb2x1bW5fcHJvY2Vzcy5pbiwgMSk7CisJY2xvc2UoY29sdW1uX3Byb2Nlc3MuaW4pOworCXJldHVybiAwOworfQorCitpbnQgc3RvcF9jb2x1bW5fZmlsdGVyKHZvaWQpCit7CisJaWYgKGZkX291dCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJZmZsdXNoKHN0ZG91dCk7CisJY2xvc2UoMSk7CisJZmluaXNoX2NvbW1hbmQoJmNvbHVtbl9wcm9jZXNzKTsKKwlkdXAyKGZkX291dCwgMSk7CisJY2xvc2UoZmRfb3V0KTsKKwlmZF9vdXQgPSAtMTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NvbHVtbi5oIGIvY29sdW1uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4Yzc0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbHVtbi5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgQ09MVU1OX0gKKyNkZWZpbmUgQ09MVU1OX0gKKworI2RlZmluZSBDT0xfTEFZT1VUX01BU0sgICAweDAwMEYKKyNkZWZpbmUgQ09MX0VOQUJMRV9NQVNLICAgMHgwMDMwICAgLyogYWx3YXlzLCBuZXZlciBvciBhdXRvICovCisjZGVmaW5lIENPTF9QQVJTRU9QVCAgICAgIDB4MDA0MCAgIC8qIC0tY29sdW1uIGlzIGdpdmVuIGZyb20gY21kbGluZSAqLworI2RlZmluZSBDT0xfREVOU0UgICAgICAgICAweDAwODAgICAvKiBTaHJpbmsgY29sdW1ucyB3aGVuIHBvc3NpYmxlLAorCQkJCSAgICAgIG1ha2luZyBzcGFjZSBmb3IgbW9yZSBjb2x1bW5zICovCisKKyNkZWZpbmUgQ09MX0RJU0FCTEVEICAgICAgMHgwMDAwICAgLyogbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lIENPTF9FTkFCTEVEICAgICAgIDB4MDAxMAorI2RlZmluZSBDT0xfQVVUTyAgICAgICAgICAweDAwMjAKKworI2RlZmluZSBDT0xfTEFZT1VUKGMpICgoYykgJiBDT0xfTEFZT1VUX01BU0spCisjZGVmaW5lIENPTF9DT0xVTU4gICAgICAgICAgICAgMCAgIC8qIEZpbGwgY29sdW1ucyBiZWZvcmUgcm93cyAqLworI2RlZmluZSBDT0xfUk9XICAgICAgICAgICAgICAgIDEgICAvKiBGaWxsIHJvd3MgYmVmb3JlIGNvbHVtbnMgKi8KKyNkZWZpbmUgQ09MX1BMQUlOICAgICAgICAgICAgIDE1ICAgLyogb25lIGNvbHVtbiAqLworCisjZGVmaW5lIGV4cGxpY2l0bHlfZW5hYmxlX2NvbHVtbihjKSBcCisJKCgoYykgJiBDT0xfUEFSU0VPUFQpICYmIGNvbHVtbl9hY3RpdmUoYykpCisKK3N0cnVjdCBjb2x1bW5fb3B0aW9ucyB7CisJaW50IHdpZHRoOworCWludCBwYWRkaW5nOworCWNvbnN0IGNoYXIgKmluZGVudDsKKwljb25zdCBjaGFyICpubDsKK307CisKK3N0cnVjdCBvcHRpb247CitpbnQgcGFyc2VvcHRfY29sdW1uX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworaW50IGdpdF9jb2x1bW5fY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsCisJCSAgICAgIGNvbnN0IGNoYXIgKmNvbW1hbmQsIHVuc2lnbmVkIGludCAqY29sb3B0cyk7CitpbnQgZmluYWxpemVfY29sb3B0cyh1bnNpZ25lZCBpbnQgKmNvbG9wdHMsIGludCBzdGRvdXRfaXNfdHR5KTsKK3N0YXRpYyBpbmxpbmUgaW50IGNvbHVtbl9hY3RpdmUodW5zaWduZWQgaW50IGNvbG9wdHMpCit7CisJcmV0dXJuIChjb2xvcHRzICYgQ09MX0VOQUJMRV9NQVNLKSA9PSBDT0xfRU5BQkxFRDsKK30KKworc3RydWN0IHN0cmluZ19saXN0Owordm9pZCBwcmludF9jb2x1bW5zKGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgdW5zaWduZWQgaW50IGNvbG9wdHMsCisJCSAgIGNvbnN0IHN0cnVjdCBjb2x1bW5fb3B0aW9ucyAqb3B0cyk7CisKK2ludCBydW5fY29sdW1uX2ZpbHRlcihpbnQgY29sb3B0cywgY29uc3Qgc3RydWN0IGNvbHVtbl9vcHRpb25zICopOworaW50IHN0b3BfY29sdW1uX2ZpbHRlcih2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21iaW5lLWRpZmYuYyBiL2NvbWJpbmUtZGlmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMmUwZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb21iaW5lLWRpZmYuYwpAQCAtMCwwICsxLDE2MTUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInhkaWZmL3htYWNyb3MuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorI2luY2x1ZGUgIm9pZC1hcnJheS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisKK3N0YXRpYyBpbnQgY29tcGFyZV9wYXRocyhjb25zdCBzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKm9uZSwKKwkJCSAgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bykKK3sKKwlpZiAoIVNfSVNESVIob25lLT5tb2RlKSAmJiAhU19JU0RJUih0d28tPm1vZGUpKQorCQlyZXR1cm4gc3RyY21wKG9uZS0+cGF0aCwgdHdvLT5wYXRoKTsKKworCXJldHVybiBiYXNlX25hbWVfY29tcGFyZShvbmUtPnBhdGgsIHN0cmxlbihvbmUtPnBhdGgpLCBvbmUtPm1vZGUsCisJCQkJIHR3by0+cGF0aCwgc3RybGVuKHR3by0+cGF0aCksIHR3by0+bW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgZmlsZW5hbWVfY2hhbmdlZChjaGFyIHN0YXR1cykKK3sKKwlyZXR1cm4gc3RhdHVzID09ICdSJyB8fCBzdGF0dXMgPT0gJ0MnOworfQorCitzdGF0aWMgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICppbnRlcnNlY3RfcGF0aHMoCisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpjdXJyLAorCWludCBuLAorCWludCBudW1fcGFyZW50LAorCWludCBjb21iaW5lZF9hbGxfcGF0aHMpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLCAqKnRhaWwgPSAmY3VycjsKKwlpbnQgaSwgaiwgY21wOworCisJaWYgKCFuKSB7CisJCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCQlpbnQgbGVuOworCQkJY29uc3QgY2hhciAqcGF0aDsKKwkJCWlmIChkaWZmX3VubW9kaWZpZWRfcGFpcihxLT5xdWV1ZVtpXSkpCisJCQkJY29udGludWU7CisJCQlwYXRoID0gcS0+cXVldWVbaV0tPnR3by0+cGF0aDsKKwkJCWxlbiA9IHN0cmxlbihwYXRoKTsKKwkJCXAgPSB4bWFsbG9jKGNvbWJpbmVfZGlmZl9wYXRoX3NpemUobnVtX3BhcmVudCwgbGVuKSk7CisJCQlwLT5wYXRoID0gKGNoYXIgKikgJihwLT5wYXJlbnRbbnVtX3BhcmVudF0pOworCQkJbWVtY3B5KHAtPnBhdGgsIHBhdGgsIGxlbik7CisJCQlwLT5wYXRoW2xlbl0gPSAwOworCQkJcC0+bmV4dCA9IE5VTEw7CisJCQltZW1zZXQocC0+cGFyZW50LCAwLAorCQkJICAgICAgIHNpemVvZihwLT5wYXJlbnRbMF0pICogbnVtX3BhcmVudCk7CisKKwkJCW9pZGNweSgmcC0+b2lkLCAmcS0+cXVldWVbaV0tPnR3by0+b2lkKTsKKwkJCXAtPm1vZGUgPSBxLT5xdWV1ZVtpXS0+dHdvLT5tb2RlOworCQkJb2lkY3B5KCZwLT5wYXJlbnRbbl0ub2lkLCAmcS0+cXVldWVbaV0tPm9uZS0+b2lkKTsKKwkJCXAtPnBhcmVudFtuXS5tb2RlID0gcS0+cXVldWVbaV0tPm9uZS0+bW9kZTsKKwkJCXAtPnBhcmVudFtuXS5zdGF0dXMgPSBxLT5xdWV1ZVtpXS0+c3RhdHVzOworCisJCQlpZiAoY29tYmluZWRfYWxsX3BhdGhzICYmCisJCQkgICAgZmlsZW5hbWVfY2hhbmdlZChwLT5wYXJlbnRbbl0uc3RhdHVzKSkgeworCQkJCXN0cmJ1Zl9pbml0KCZwLT5wYXJlbnRbbl0ucGF0aCwgMCk7CisJCQkJc3RyYnVmX2FkZHN0cigmcC0+cGFyZW50W25dLnBhdGgsCisJCQkJCSAgICAgIHEtPnF1ZXVlW2ldLT5vbmUtPnBhdGgpOworCQkJfQorCQkJKnRhaWwgPSBwOworCQkJdGFpbCA9ICZwLT5uZXh0OworCQl9CisJCXJldHVybiBjdXJyOworCX0KKworCS8qCisJICogcGF0aHMgaW4gY3VyciAobGlua2VkIGxpc3QpIGFuZCBxLT5xdWV1ZVtdIChhcnJheSkgYXJlCisJICogYm90aCBzb3J0ZWQgaW4gdGhlIHRyZWUgb3JkZXIuCisJICovCisJaSA9IDA7CisJd2hpbGUgKChwID0gKnRhaWwpICE9IE5VTEwpIHsKKwkJY21wID0gKChpID49IHEtPm5yKQorCQkgICAgICAgPyAtMSA6IGNvbXBhcmVfcGF0aHMocCwgcS0+cXVldWVbaV0tPnR3bykpOworCisJCWlmIChjbXAgPCAwKSB7CisJCQkvKiBwLT5wYXRoIG5vdCBpbiBxLT5xdWV1ZVtdOyBkcm9wIGl0ICovCisJCQkqdGFpbCA9IHAtPm5leHQ7CisJCQlmb3IgKGogPSAwOyBqIDwgbnVtX3BhcmVudDsgaisrKQorCQkJCWlmIChjb21iaW5lZF9hbGxfcGF0aHMgJiYKKwkJCQkgICAgZmlsZW5hbWVfY2hhbmdlZChwLT5wYXJlbnRbal0uc3RhdHVzKSkKKwkJCQkJc3RyYnVmX3JlbGVhc2UoJnAtPnBhcmVudFtqXS5wYXRoKTsKKwkJCWZyZWUocCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjbXAgPiAwKSB7CisJCQkvKiBxLT5xdWV1ZVtpXSBub3QgaW4gcC0+cGF0aDsgc2tpcCBpdCAqLworCQkJaSsrOworCQkJY29udGludWU7CisJCX0KKworCQlvaWRjcHkoJnAtPnBhcmVudFtuXS5vaWQsICZxLT5xdWV1ZVtpXS0+b25lLT5vaWQpOworCQlwLT5wYXJlbnRbbl0ubW9kZSA9IHEtPnF1ZXVlW2ldLT5vbmUtPm1vZGU7CisJCXAtPnBhcmVudFtuXS5zdGF0dXMgPSBxLT5xdWV1ZVtpXS0+c3RhdHVzOworCQlpZiAoY29tYmluZWRfYWxsX3BhdGhzICYmCisJCSAgICBmaWxlbmFtZV9jaGFuZ2VkKHAtPnBhcmVudFtuXS5zdGF0dXMpKQorCQkJc3RyYnVmX2FkZHN0cigmcC0+cGFyZW50W25dLnBhdGgsCisJCQkJICAgICAgcS0+cXVldWVbaV0tPm9uZS0+cGF0aCk7CisKKwkJdGFpbCA9ICZwLT5uZXh0OworCQlpKys7CisJfQorCXJldHVybiBjdXJyOworfQorCisvKiBMaW5lcyBsb3N0IGZyb20gcGFyZW50ICovCitzdHJ1Y3QgbGxpbmUgeworCXN0cnVjdCBsbGluZSAqbmV4dCwgKnByZXY7CisJaW50IGxlbjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9tYXA7CisJY2hhciBsaW5lW0ZMRVhfQVJSQVldOworfTsKKworLyogTGluZXMgbG9zdCBmcm9tIGN1cnJlbnQgcGFyZW50IChiZWZvcmUgY29hbGVzY2luZykgKi8KK3N0cnVjdCBwbG9zdCB7CisJc3RydWN0IGxsaW5lICpsb3N0X2hlYWQsICpsb3N0X3RhaWw7CisJaW50IGxlbjsKK307CisKKy8qIExpbmVzIHN1cnZpdmluZyBpbiB0aGUgbWVyZ2UgcmVzdWx0ICovCitzdHJ1Y3Qgc2xpbmUgeworCS8qIEFjY3VtdWxhdGVkIGFuZCBjb2FsZXNjZWQgbG9zdCBsaW5lcyAqLworCXN0cnVjdCBsbGluZSAqbG9zdDsKKwlpbnQgbGVubG9zdDsKKwlzdHJ1Y3QgcGxvc3QgcGxvc3Q7CisJY2hhciAqYm9sOworCWludCBsZW47CisJLyogYml0IDAgdXAgdG8gKE4tMSkgYXJlIG9uIGlmIHRoZSBwYXJlbnQgaGFzIHRoaXMgbGluZSAoaS5lLgorCSAqIHdlIGRpZCBub3QgY2hhbmdlIGl0KS4KKwkgKiBiaXQgTiBpcyB1c2VkIGZvciAiaW50ZXJlc3RpbmciIGxpbmVzLCBpbmNsdWRpbmcgY29udGV4dC4KKwkgKiBiaXQgKE4rMSkgaXMgdXNlZCBmb3IgImRvIG5vdCBzaG93IGRlbGV0aW9uIGJlZm9yZSB0aGlzIi4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWc7CisJdW5zaWduZWQgbG9uZyAqcF9sbm87Cit9OworCitzdGF0aWMgaW50IG1hdGNoX3N0cmluZ19zcGFjZXMoY29uc3QgY2hhciAqbGluZTEsIGludCBsZW4xLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmxpbmUyLCBpbnQgbGVuMiwKKwkJCSAgICAgICBsb25nIGZsYWdzKQoreworCWlmIChmbGFncyAmIFhERl9XSElURVNQQUNFX0ZMQUdTKSB7CisJCWZvciAoOyBsZW4xID4gMCAmJiBYRExfSVNTUEFDRShsaW5lMVtsZW4xIC0gMV0pOyBsZW4xLS0pOworCQlmb3IgKDsgbGVuMiA+IDAgJiYgWERMX0lTU1BBQ0UobGluZTJbbGVuMiAtIDFdKTsgbGVuMi0tKTsKKwl9CisKKwlpZiAoIShmbGFncyAmIChYREZfSUdOT1JFX1dISVRFU1BBQ0UgfCBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFKSkpCisJCXJldHVybiAobGVuMSA9PSBsZW4yICYmICFtZW1jbXAobGluZTEsIGxpbmUyLCBsZW4xKSk7CisKKwl3aGlsZSAobGVuMSA+IDAgJiYgbGVuMiA+IDApIHsKKwkJbGVuMS0tOworCQlsZW4yLS07CisJCWlmIChYRExfSVNTUEFDRShsaW5lMVtsZW4xXSkgfHwgWERMX0lTU1BBQ0UobGluZTJbbGVuMl0pKSB7CisJCQlpZiAoKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFX0NIQU5HRSkgJiYKKwkJCSAgICAoIVhETF9JU1NQQUNFKGxpbmUxW2xlbjFdKSB8fCAhWERMX0lTU1BBQ0UobGluZTJbbGVuMl0pKSkKKwkJCQlyZXR1cm4gMDsKKworCQkJZm9yICg7IGxlbjEgPiAwICYmIFhETF9JU1NQQUNFKGxpbmUxW2xlbjFdKTsgbGVuMS0tKTsKKwkJCWZvciAoOyBsZW4yID4gMCAmJiBYRExfSVNTUEFDRShsaW5lMltsZW4yXSk7IGxlbjItLSk7CisJCX0KKwkJaWYgKGxpbmUxW2xlbjFdICE9IGxpbmUyW2xlbjJdKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFKSB7CisJCS8qIENvbnN1bWUgcmVtYWluaW5nIHNwYWNlcyAqLworCQlmb3IgKDsgbGVuMSA+IDAgJiYgWERMX0lTU1BBQ0UobGluZTFbbGVuMSAtIDFdKTsgbGVuMS0tKTsKKwkJZm9yICg7IGxlbjIgPiAwICYmIFhETF9JU1NQQUNFKGxpbmUyW2xlbjIgLSAxXSk7IGxlbjItLSk7CisJfQorCisJLyogV2UgbWF0Y2hlZCBmdWxsIGxpbmUxIGFuZCBsaW5lMiAqLworCWlmICghbGVuMSAmJiAhbGVuMikKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworZW51bSBjb2FsZXNjZV9kaXJlY3Rpb24geyBNQVRDSCwgQkFTRSwgTkVXIH07CisKKy8qIENvYWxlc2NlIG5ldyBsaW5lcyBpbnRvIGJhc2UgYnkgZmluZGluZyBMQ1MgKi8KK3N0YXRpYyBzdHJ1Y3QgbGxpbmUgKmNvYWxlc2NlX2xpbmVzKHN0cnVjdCBsbGluZSAqYmFzZSwgaW50ICpsZW5iYXNlLAorCQkJCSAgICBzdHJ1Y3QgbGxpbmUgKm5ld2xpbmUsIGludCBsZW5uZXcsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50LCBsb25nIGZsYWdzKQoreworCWludCAqKmxjczsKKwllbnVtIGNvYWxlc2NlX2RpcmVjdGlvbiAqKmRpcmVjdGlvbnM7CisJc3RydWN0IGxsaW5lICpiYXNlZW5kLCAqbmV3ZW5kID0gTlVMTDsKKwlpbnQgaSwgaiwgb3JpZ2Jhc2VsZW4gPSAqbGVuYmFzZTsKKworCWlmIChuZXdsaW5lID09IE5VTEwpCisJCXJldHVybiBiYXNlOworCisJaWYgKGJhc2UgPT0gTlVMTCkgeworCQkqbGVuYmFzZSA9IGxlbm5ldzsKKwkJcmV0dXJuIG5ld2xpbmU7CisJfQorCisJLyoKKwkgKiBDb2FsZXNjZSBuZXcgbGluZXMgaW50byBiYXNlIGJ5IGZpbmRpbmcgdGhlIExDUworCSAqIC0gQ3JlYXRlIHRoZSB0YWJsZSB0byBydW4gZHluYW1pYyBwcm9ncmFtbWluZworCSAqIC0gQ29tcHV0ZSB0aGUgTENTCisJICogLSBUaGVuIHJldmVyc2UgcmVhZCB0aGUgZGlyZWN0aW9uIHN0cnVjdHVyZToKKwkgKiAgIC0gSWYgd2UgaGF2ZSBNQVRDSCwgYXNzaWduIHBhcmVudCB0byBiYXNlIGZsYWcsIGFuZCBjb25zdW1lCisJICogICBib3RoIGJhc2VlbmQgYW5kIG5ld2VuZAorCSAqICAgLSBFbHNlIGlmIHdlIGhhdmUgQkFTRSwgY29uc3VtZSBiYXNlZW5kCisJICogICAtIEVsc2UgaWYgd2UgaGF2ZSBORVcsIGluc2VydCBuZXdlbmQgbGxpbmUgaW50byBiYXNlIGFuZAorCSAqICAgY29uc3VtZSBuZXdlbmQKKwkgKi8KKwlsY3MgPSB4Y2FsbG9jKHN0X2FkZChvcmlnYmFzZWxlbiwgMSksIHNpemVvZihpbnQqKSk7CisJZGlyZWN0aW9ucyA9IHhjYWxsb2Moc3RfYWRkKG9yaWdiYXNlbGVuLCAxKSwgc2l6ZW9mKGVudW0gY29hbGVzY2VfZGlyZWN0aW9uKikpOworCWZvciAoaSA9IDA7IGkgPCBvcmlnYmFzZWxlbiArIDE7IGkrKykgeworCQlsY3NbaV0gPSB4Y2FsbG9jKHN0X2FkZChsZW5uZXcsIDEpLCBzaXplb2YoaW50KSk7CisJCWRpcmVjdGlvbnNbaV0gPSB4Y2FsbG9jKHN0X2FkZChsZW5uZXcsIDEpLCBzaXplb2YoZW51bSBjb2FsZXNjZV9kaXJlY3Rpb24pKTsKKwkJZGlyZWN0aW9uc1tpXVswXSA9IEJBU0U7CisJfQorCWZvciAoaiA9IDE7IGogPCBsZW5uZXcgKyAxOyBqKyspCisJCWRpcmVjdGlvbnNbMF1bal0gPSBORVc7CisKKwlmb3IgKGkgPSAxLCBiYXNlZW5kID0gYmFzZTsgaSA8IG9yaWdiYXNlbGVuICsgMTsgaSsrKSB7CisJCWZvciAoaiA9IDEsIG5ld2VuZCA9IG5ld2xpbmU7IGogPCBsZW5uZXcgKyAxOyBqKyspIHsKKwkJCWlmIChtYXRjaF9zdHJpbmdfc3BhY2VzKGJhc2VlbmQtPmxpbmUsIGJhc2VlbmQtPmxlbiwKKwkJCQkJCW5ld2VuZC0+bGluZSwgbmV3ZW5kLT5sZW4sIGZsYWdzKSkgeworCQkJCWxjc1tpXVtqXSA9IGxjc1tpIC0gMV1baiAtIDFdICsgMTsKKwkJCQlkaXJlY3Rpb25zW2ldW2pdID0gTUFUQ0g7CisJCQl9IGVsc2UgaWYgKGxjc1tpXVtqIC0gMV0gPj0gbGNzW2kgLSAxXVtqXSkgeworCQkJCWxjc1tpXVtqXSA9IGxjc1tpXVtqIC0gMV07CisJCQkJZGlyZWN0aW9uc1tpXVtqXSA9IE5FVzsKKwkJCX0gZWxzZSB7CisJCQkJbGNzW2ldW2pdID0gbGNzW2kgLSAxXVtqXTsKKwkJCQlkaXJlY3Rpb25zW2ldW2pdID0gQkFTRTsKKwkJCX0KKwkJCWlmIChuZXdlbmQtPm5leHQpCisJCQkJbmV3ZW5kID0gbmV3ZW5kLT5uZXh0OworCQl9CisJCWlmIChiYXNlZW5kLT5uZXh0KQorCQkJYmFzZWVuZCA9IGJhc2VlbmQtPm5leHQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG9yaWdiYXNlbGVuICsgMTsgaSsrKQorCQlmcmVlKGxjc1tpXSk7CisJZnJlZShsY3MpOworCisJLyogQXQgdGhpcyBwb2ludCwgYmFzZWVuZCBhbmQgbmV3ZW5kIHBvaW50IHRvIHRoZSBlbmQgb2YgZWFjaCBsaXN0cyAqLworCWktLTsKKwlqLS07CisJd2hpbGUgKGkgIT0gMCB8fCBqICE9IDApIHsKKwkJaWYgKGRpcmVjdGlvbnNbaV1bal0gPT0gTUFUQ0gpIHsKKwkJCWJhc2VlbmQtPnBhcmVudF9tYXAgfD0gMTw8cGFyZW50OworCQkJYmFzZWVuZCA9IGJhc2VlbmQtPnByZXY7CisJCQluZXdlbmQgPSBuZXdlbmQtPnByZXY7CisJCQlpLS07CisJCQlqLS07CisJCX0gZWxzZSBpZiAoZGlyZWN0aW9uc1tpXVtqXSA9PSBORVcpIHsKKwkJCXN0cnVjdCBsbGluZSAqbGxpbmU7CisKKwkJCWxsaW5lID0gbmV3ZW5kOworCQkJLyogUmVtb3ZlIGxsaW5lIGZyb20gbmV3IGxpc3QgYW5kIHVwZGF0ZSBuZXdlbmQgKi8KKwkJCWlmIChsbGluZS0+cHJldikKKwkJCQlsbGluZS0+cHJldi0+bmV4dCA9IGxsaW5lLT5uZXh0OworCQkJZWxzZQorCQkJCW5ld2xpbmUgPSBsbGluZS0+bmV4dDsKKwkJCWlmIChsbGluZS0+bmV4dCkKKwkJCQlsbGluZS0+bmV4dC0+cHJldiA9IGxsaW5lLT5wcmV2OworCisJCQluZXdlbmQgPSBsbGluZS0+cHJldjsKKwkJCWotLTsKKworCQkJLyogQWRkIGxsaW5lIHRvIGJhc2UgbGlzdCAqLworCQkJaWYgKGJhc2VlbmQpIHsKKwkJCQlsbGluZS0+bmV4dCA9IGJhc2VlbmQtPm5leHQ7CisJCQkJbGxpbmUtPnByZXYgPSBiYXNlZW5kOworCQkJCWlmIChsbGluZS0+cHJldikKKwkJCQkJbGxpbmUtPnByZXYtPm5leHQgPSBsbGluZTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCWxsaW5lLT5uZXh0ID0gYmFzZTsKKwkJCQliYXNlID0gbGxpbmU7CisJCQl9CisJCQkoKmxlbmJhc2UpKys7CisKKwkJCWlmIChsbGluZS0+bmV4dCkKKwkJCQlsbGluZS0+bmV4dC0+cHJldiA9IGxsaW5lOworCisJCX0gZWxzZSB7CisJCQliYXNlZW5kID0gYmFzZWVuZC0+cHJldjsKKwkJCWktLTsKKwkJfQorCX0KKworCW5ld2VuZCA9IG5ld2xpbmU7CisJd2hpbGUgKG5ld2VuZCkgeworCQlzdHJ1Y3QgbGxpbmUgKmxsaW5lID0gbmV3ZW5kOworCQluZXdlbmQgPSBuZXdlbmQtPm5leHQ7CisJCWZyZWUobGxpbmUpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBvcmlnYmFzZWxlbiArIDE7IGkrKykKKwkJZnJlZShkaXJlY3Rpb25zW2ldKTsKKwlmcmVlKGRpcmVjdGlvbnMpOworCisJcmV0dXJuIGJhc2U7Cit9CisKK3N0YXRpYyBjaGFyICpncmFiX2Jsb2Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHVuc2lnbmVkIGludCBtb2RlLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqc2l6ZSwgc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqdGV4dGNvbnYsCisJCSAgICAgICBjb25zdCBjaGFyICpwYXRoKQoreworCWNoYXIgKmJsb2I7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJaWYgKFNfSVNHSVRMSU5LKG1vZGUpKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJTdWJwcm9qZWN0IGNvbW1pdCAlc1xuIiwgb2lkX3RvX2hleChvaWQpKTsKKwkJKnNpemUgPSBidWYubGVuOworCQlibG9iID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwl9IGVsc2UgaWYgKGlzX251bGxfb2lkKG9pZCkpIHsKKwkJLyogZGVsZXRlZCBibG9iICovCisJCSpzaXplID0gMDsKKwkJcmV0dXJuIHhjYWxsb2MoMSwgMSk7CisJfSBlbHNlIGlmICh0ZXh0Y29udikgeworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGYgPSBhbGxvY19maWxlc3BlYyhwYXRoKTsKKwkJZmlsbF9maWxlc3BlYyhkZiwgb2lkLCAxLCBtb2RlKTsKKwkJKnNpemUgPSBmaWxsX3RleHRjb252KHIsIHRleHRjb252LCBkZiwgJmJsb2IpOworCQlmcmVlX2ZpbGVzcGVjKGRmKTsKKwl9IGVsc2UgeworCQlibG9iID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCBzaXplKTsKKwkJaWYgKHR5cGUgIT0gT0JKX0JMT0IpCisJCQlkaWUoIm9iamVjdCAnJXMnIGlzIG5vdCBhIGJsb2IhIiwgb2lkX3RvX2hleChvaWQpKTsKKwl9CisJcmV0dXJuIGJsb2I7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9sb3N0KHN0cnVjdCBzbGluZSAqc2xpbmUsIGludCBuLCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCXN0cnVjdCBsbGluZSAqbGxpbmU7CisJdW5zaWduZWQgbG9uZyB0aGlzX21hc2sgPSAoMVVMPDxuKTsKKwlpZiAobGluZVtsZW4tMV0gPT0gJ1xuJykKKwkJbGVuLS07CisKKwlGTEVYX0FMTE9DX01FTShsbGluZSwgbGluZSwgbGluZSwgbGVuKTsKKwlsbGluZS0+bGVuID0gbGVuOworCWxsaW5lLT5uZXh0ID0gTlVMTDsKKwlsbGluZS0+cHJldiA9IHNsaW5lLT5wbG9zdC5sb3N0X3RhaWw7CisJaWYgKGxsaW5lLT5wcmV2KQorCQlsbGluZS0+cHJldi0+bmV4dCA9IGxsaW5lOworCWVsc2UKKwkJc2xpbmUtPnBsb3N0Lmxvc3RfaGVhZCA9IGxsaW5lOworCXNsaW5lLT5wbG9zdC5sb3N0X3RhaWwgPSBsbGluZTsKKwlzbGluZS0+cGxvc3QubGVuKys7CisJbGxpbmUtPnBhcmVudF9tYXAgPSB0aGlzX21hc2s7Cit9CisKK3N0cnVjdCBjb21iaW5lX2RpZmZfc3RhdGUgeworCXVuc2lnbmVkIGludCBsbm87CisJaW50IG9iLCBvbiwgbmIsIG5uOworCXVuc2lnbmVkIGxvbmcgbm1hc2s7CisJaW50IG51bV9wYXJlbnQ7CisJaW50IG47CisJc3RydWN0IHNsaW5lICpzbGluZTsKKwlzdHJ1Y3Qgc2xpbmUgKmxvc3RfYnVja2V0OworfTsKKworc3RhdGljIHZvaWQgY29uc3VtZV9odW5rKHZvaWQgKnN0YXRlXywKKwkJCSBsb25nIG9iLCBsb25nIG9uLAorCQkJIGxvbmcgbmIsIGxvbmcgbm4sCisJCQkgY29uc3QgY2hhciAqZnVuY2xpbmUsIGxvbmcgZnVuY2xlbikKK3sKKwlzdHJ1Y3QgY29tYmluZV9kaWZmX3N0YXRlICpzdGF0ZSA9IHN0YXRlXzsKKworCXN0YXRlLT5vYiA9IG9iOworCXN0YXRlLT5vbiA9IG9uOworCXN0YXRlLT5uYiA9IG5iOworCXN0YXRlLT5ubiA9IG5uOworCXN0YXRlLT5sbm8gPSBzdGF0ZS0+bmI7CisJaWYgKHN0YXRlLT5ubiA9PSAwKSB7CisJCS8qIEBAIC1YLFkgK04sMCBAQCByZW1vdmVkIFkgbGluZXMKKwkJICogdGhhdCB3b3VsZCBoYXZlIGNvbWUgKmFmdGVyKiBsaW5lIE4KKwkJICogaW4gdGhlIHJlc3VsdC4gIE91ciBsb3N0IGJ1Y2tldHMgaGFuZworCQkgKiB0byB0aGUgbGluZSBhZnRlciB0aGUgcmVtb3ZlZCBsaW5lcywKKwkJICoKKwkJICogTm90ZSB0aGF0IHRoaXMgaXMgY29ycmVjdCBldmVuIHdoZW4gTiA9PSAwLAorCQkgKiBpbiB3aGljaCBjYXNlIHRoZSBodW5rIHJlbW92ZXMgdGhlIGZpcnN0CisJCSAqIGxpbmUgaW4gdGhlIGZpbGUuCisJCSAqLworCQlzdGF0ZS0+bG9zdF9idWNrZXQgPSAmc3RhdGUtPnNsaW5lW3N0YXRlLT5uYl07CisJCWlmICghc3RhdGUtPm5iKQorCQkJc3RhdGUtPm5iID0gMTsKKwl9IGVsc2UgeworCQlzdGF0ZS0+bG9zdF9idWNrZXQgPSAmc3RhdGUtPnNsaW5lW3N0YXRlLT5uYi0xXTsKKwl9CisJaWYgKCFzdGF0ZS0+c2xpbmVbc3RhdGUtPm5iLTFdLnBfbG5vKQorCQlzdGF0ZS0+c2xpbmVbc3RhdGUtPm5iLTFdLnBfbG5vID0KKwkJCXhjYWxsb2Moc3RhdGUtPm51bV9wYXJlbnQsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJc3RhdGUtPnNsaW5lW3N0YXRlLT5uYi0xXS5wX2xub1tzdGF0ZS0+bl0gPSBzdGF0ZS0+b2I7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnN1bWVfbGluZSh2b2lkICpzdGF0ZV8sIGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXN0cnVjdCBjb21iaW5lX2RpZmZfc3RhdGUgKnN0YXRlID0gc3RhdGVfOworCWlmICghc3RhdGUtPmxvc3RfYnVja2V0KQorCQlyZXR1cm47IC8qIG5vdCBpbiBhbnkgaHVuayB5ZXQgKi8KKwlzd2l0Y2ggKGxpbmVbMF0pIHsKKwljYXNlICctJzoKKwkJYXBwZW5kX2xvc3Qoc3RhdGUtPmxvc3RfYnVja2V0LCBzdGF0ZS0+biwgbGluZSsxLCBsZW4tMSk7CisJCWJyZWFrOworCWNhc2UgJysnOgorCQlzdGF0ZS0+c2xpbmVbc3RhdGUtPmxuby0xXS5mbGFnIHw9IHN0YXRlLT5ubWFzazsKKwkJc3RhdGUtPmxubysrOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbWJpbmVfZGlmZihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpwYXJlbnQsIHVuc2lnbmVkIGludCBtb2RlLAorCQkJIG1tZmlsZV90ICpyZXN1bHRfZmlsZSwKKwkJCSBzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCB1bnNpZ25lZCBpbnQgY250LCBpbnQgbiwKKwkJCSBpbnQgbnVtX3BhcmVudCwgaW50IHJlc3VsdF9kZWxldGVkLAorCQkJIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252LAorCQkJIGNvbnN0IGNoYXIgKnBhdGgsIGxvbmcgZmxhZ3MpCit7CisJdW5zaWduZWQgaW50IHBfbG5vLCBsbm87CisJdW5zaWduZWQgbG9uZyBubWFzayA9ICgxVUwgPDwgbik7CisJeHBwYXJhbV90IHhwcDsKKwl4ZGVtaXRjb25mX3QgeGVjZmc7CisJbW1maWxlX3QgcGFyZW50X2ZpbGU7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9zdGF0ZSBzdGF0ZTsKKwl1bnNpZ25lZCBsb25nIHN6OworCisJaWYgKHJlc3VsdF9kZWxldGVkKQorCQlyZXR1cm47IC8qIHJlc3VsdCBkZWxldGVkICovCisKKwlwYXJlbnRfZmlsZS5wdHIgPSBncmFiX2Jsb2IociwgcGFyZW50LCBtb2RlLCAmc3osIHRleHRjb252LCBwYXRoKTsKKwlwYXJlbnRfZmlsZS5zaXplID0gc3o7CisJbWVtc2V0KCZ4cHAsIDAsIHNpemVvZih4cHApKTsKKwl4cHAuZmxhZ3MgPSBmbGFnczsKKwltZW1zZXQoJnhlY2ZnLCAwLCBzaXplb2YoeGVjZmcpKTsKKwltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKTsKKwlzdGF0ZS5ubWFzayA9IG5tYXNrOworCXN0YXRlLnNsaW5lID0gc2xpbmU7CisJc3RhdGUubG5vID0gMTsKKwlzdGF0ZS5udW1fcGFyZW50ID0gbnVtX3BhcmVudDsKKwlzdGF0ZS5uID0gbjsKKworCWlmICh4ZGlfZGlmZl9vdXRmKCZwYXJlbnRfZmlsZSwgcmVzdWx0X2ZpbGUsIGNvbnN1bWVfaHVuaywKKwkJCSAgY29uc3VtZV9saW5lLCAmc3RhdGUsICZ4cHAsICZ4ZWNmZykpCisJCWRpZSgidW5hYmxlIHRvIGdlbmVyYXRlIGNvbWJpbmVkIGRpZmYgZm9yICVzIiwKKwkJICAgIG9pZF90b19oZXgocGFyZW50KSk7CisJZnJlZShwYXJlbnRfZmlsZS5wdHIpOworCisJLyogQXNzaWduIGxpbmUgbnVtYmVycyBmb3IgdGhpcyBwYXJlbnQuCisJICoKKwkgKiBzbGluZVtsbm9dLnBfbG5vW25dIHJlY29yZHMgdGhlIGZpcnN0IGxpbmUgbnVtYmVyCisJICogKGNvdW50aW5nIGZyb20gMSkgZm9yIHBhcmVudCBOIGlmIHRoZSBmaW5hbCBodW5rIGRpc3BsYXkKKwkgKiBzdGFydGVkIGJ5IHNob3dpbmcgc2xpbmVbbG5vXSAocG9zc2libHkgc2hvd2luZyB0aGUgbG9zdAorCSAqIGxpbmVzIGF0dGFjaGVkIHRvIGl0IGZpcnN0KS4KKwkgKi8KKwlmb3IgKGxubyA9IDAsICBwX2xubyA9IDE7IGxubyA8PSBjbnQ7IGxubysrKSB7CisJCXN0cnVjdCBsbGluZSAqbGw7CisJCXNsaW5lW2xub10ucF9sbm9bbl0gPSBwX2xubzsKKworCQkvKiBDb2FsZXNjZSBuZXcgbGluZXMgKi8KKwkJaWYgKHNsaW5lW2xub10ucGxvc3QubG9zdF9oZWFkKSB7CisJCQlzdHJ1Y3Qgc2xpbmUgKnNsID0gJnNsaW5lW2xub107CisJCQlzbC0+bG9zdCA9IGNvYWxlc2NlX2xpbmVzKHNsLT5sb3N0LCAmc2wtPmxlbmxvc3QsCisJCQkJCQkgIHNsLT5wbG9zdC5sb3N0X2hlYWQsCisJCQkJCQkgIHNsLT5wbG9zdC5sZW4sIG4sIGZsYWdzKTsKKwkJCXNsLT5wbG9zdC5sb3N0X2hlYWQgPSBzbC0+cGxvc3QubG9zdF90YWlsID0gTlVMTDsKKwkJCXNsLT5wbG9zdC5sZW4gPSAwOworCQl9CisKKwkJLyogSG93IG1hbnkgbGluZXMgd291bGQgdGhpcyBzbGluZSBhZHZhbmNlIHRoZSBwX2xubz8gKi8KKwkJbGwgPSBzbGluZVtsbm9dLmxvc3Q7CisJCXdoaWxlIChsbCkgeworCQkJaWYgKGxsLT5wYXJlbnRfbWFwICYgbm1hc2spCisJCQkJcF9sbm8rKzsgLyogJy0nIG1lYW5zIHBhcmVudCBoYWQgaXQgKi8KKwkJCWxsID0gbGwtPm5leHQ7CisJCX0KKwkJaWYgKGxubyA8IGNudCAmJiAhKHNsaW5lW2xub10uZmxhZyAmIG5tYXNrKSkKKwkJCXBfbG5vKys7IC8qIG5vICcrJyBtZWFucyBwYXJlbnQgaGFkIGl0ICovCisJfQorCXNsaW5lW2xub10ucF9sbm9bbl0gPSBwX2xubzsgLyogdHJhaWxlciAqLworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb250ZXh0ID0gMzsKK3N0YXRpYyBjaGFyIGNvbWJpbmVfbWFya2VyID0gJ0AnOworCitzdGF0aWMgaW50IGludGVyZXN0aW5nKHN0cnVjdCBzbGluZSAqc2xpbmUsIHVuc2lnbmVkIGxvbmcgYWxsX21hc2spCit7CisJLyogSWYgc29tZSBwYXJlbnRzIGxvc3QgbGluZXMgaGVyZSwgb3IgaWYgd2UgaGF2ZSBhZGRlZCB0bworCSAqIHNvbWUgcGFyZW50LCBpdCBpcyBpbnRlcmVzdGluZy4KKwkgKi8KKwlyZXR1cm4gKChzbGluZS0+ZmxhZyAmIGFsbF9tYXNrKSB8fCBzbGluZS0+bG9zdCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFkanVzdF9odW5rX3RhaWwoc3RydWN0IHNsaW5lICpzbGluZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFsbF9tYXNrLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaHVua19iZWdpbiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGkpCit7CisJLyogaSBwb2ludHMgYXQgdGhlIGZpcnN0IHVuaW50ZXJlc3RpbmcgbGluZS4gIElmIHRoZSBsYXN0IGxpbmUKKwkgKiBvZiB0aGUgaHVuayB3YXMgaW50ZXJlc3Rpbmcgb25seSBiZWNhdXNlIGl0IGhhcyBzb21lCisJICogZGVsZXRpb24sIHRoZW4gaXQgaXMgbm90IGFsbCB0aGF0IGludGVyZXN0aW5nIGZvciB0aGUKKwkgKiBwdXJwb3NlIG9mIGdpdmluZyB0cmFpbGluZyBjb250ZXh0IGxpbmVzLiAgVGhpcyBpcyBiZWNhdXNlCisJICogd2Ugb3V0cHV0ICctJyBsaW5lIGFuZCB0aGVuIHVubW9kaWZpZWQgc2xpbmVbaS0xXSBpdHNlbGYgaW4KKwkgKiB0aGF0IGNhc2Ugd2hpY2ggZ2l2ZXMgdXMgb25lIGV4dHJhIGNvbnRleHQgbGluZS4KKwkgKi8KKwlpZiAoKGh1bmtfYmVnaW4gKyAxIDw9IGkpICYmICEoc2xpbmVbaS0xXS5mbGFnICYgYWxsX21hc2spKQorCQlpLS07CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfbmV4dChzdHJ1Y3Qgc2xpbmUgKnNsaW5lLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbWFyaywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGksCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjbnQsCisJCQkgICAgICAgaW50IGxvb2tfZm9yX3VuaW50ZXJlc3RpbmcpCit7CisJLyogV2UgaGF2ZSBleGFtaW5lZCB1cCB0byBpLTEgYW5kIGFyZSBhYm91dCB0byBsb29rIGF0IGkuCisJICogRmluZCBuZXh0IGludGVyZXN0aW5nIG9yIHVuaW50ZXJlc3RpbmcgbGluZS4gIEhlcmUsCisJICogImludGVyZXN0aW5nIiBkb2VzIG5vdCBtZWFuIGludGVyZXN0aW5nKCksIGJ1dCBtYXJrZWQgYnkKKwkgKiB0aGUgZ2l2ZV9jb250ZXh0KCkgZnVuY3Rpb24gYmVsb3cgKGkuZS4gaXQgaW5jbHVkZXMgY29udGV4dAorCSAqIGxpbmVzIHRoYXQgYXJlIG5vdCBpbnRlcmVzdGluZyB0byBpbnRlcmVzdGluZygpIGZ1bmN0aW9uCisJICogdGhhdCBhcmUgc3Vycm91bmRlZCBieSBpbnRlcmVzdGluZygpIG9uZXMuCisJICovCisJd2hpbGUgKGkgPD0gY250KQorCQlpZiAobG9va19mb3JfdW5pbnRlcmVzdGluZworCQkgICAgPyAhKHNsaW5lW2ldLmZsYWcgJiBtYXJrKQorCQkgICAgOiAoc2xpbmVbaV0uZmxhZyAmIG1hcmspKQorCQkJcmV0dXJuIGk7CisJCWVsc2UKKwkJCWkrKzsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBnaXZlX2NvbnRleHQoc3RydWN0IHNsaW5lICpzbGluZSwgdW5zaWduZWQgbG9uZyBjbnQsIGludCBudW1fcGFyZW50KQoreworCXVuc2lnbmVkIGxvbmcgYWxsX21hc2sgPSAoMVVMPDxudW1fcGFyZW50KSAtIDE7CisJdW5zaWduZWQgbG9uZyBtYXJrID0gKDFVTDw8bnVtX3BhcmVudCk7CisJdW5zaWduZWQgbG9uZyBub19wcmVfZGVsZXRlID0gKDJVTDw8bnVtX3BhcmVudCk7CisJdW5zaWduZWQgbG9uZyBpOworCisJLyogVHdvIGdyb3VwcyBvZiBpbnRlcmVzdGluZyBsaW5lcyBtYXkgaGF2ZSBhIHNob3J0IGdhcCBvZgorCSAqIHVuaW50ZXJlc3RpbmcgbGluZXMuICBDb25uZWN0IHN1Y2ggZ3JvdXBzIHRvIGdpdmUgdGhlbSBhCisJICogYml0IG9mIGNvbnRleHQuCisJICoKKwkgKiBXZSBmaXJzdCBzdGFydCBmcm9tIHdoYXQgdGhlIGludGVyZXN0aW5nKCkgZnVuY3Rpb24gc2F5cywKKwkgKiBhbmQgbWFyayB0aGVtIHdpdGggIm1hcmsiLCBhbmQgcGFpbnQgY29udGV4dCBsaW5lcyB3aXRoIHRoZQorCSAqIG1hcmsuICBTbyBpbnRlcmVzdGluZygpIHdvdWxkIHN0aWxsIHNheSBmYWxzZSBmb3Igc3VjaCBjb250ZXh0CisJICogbGluZXMgYnV0IHRoZXkgYXJlIHRyZWF0ZWQgYXMgImludGVyZXN0aW5nIiBpbiB0aGUgZW5kLgorCSAqLworCWkgPSBmaW5kX25leHQoc2xpbmUsIG1hcmssIDAsIGNudCwgMCk7CisJaWYgKGNudCA8IGkpCisJCXJldHVybiAwOworCisJd2hpbGUgKGkgPD0gY250KSB7CisJCXVuc2lnbmVkIGxvbmcgaiA9IChjb250ZXh0IDwgaSkgPyAoaSAtIGNvbnRleHQpIDogMDsKKwkJdW5zaWduZWQgbG9uZyBrOworCisJCS8qIFBhaW50IGEgZmV3IGxpbmVzIGJlZm9yZSB0aGUgZmlyc3QgaW50ZXJlc3RpbmcgbGluZS4gKi8KKwkJd2hpbGUgKGogPCBpKSB7CisJCQlpZiAoIShzbGluZVtqXS5mbGFnICYgbWFyaykpCisJCQkJc2xpbmVbal0uZmxhZyB8PSBub19wcmVfZGVsZXRlOworCQkJc2xpbmVbaisrXS5mbGFnIHw9IG1hcms7CisJCX0KKworCWFnYWluOgorCQkvKiB3ZSBrbm93IHVwIHRvIGkgaXMgdG8gYmUgaW5jbHVkZWQuICB3aGVyZSBkb2VzIHRoZQorCQkgKiBuZXh0IHVuaW50ZXJlc3Rpbmcgb25lIHN0YXJ0PworCQkgKi8KKwkJaiA9IGZpbmRfbmV4dChzbGluZSwgbWFyaywgaSwgY250LCAxKTsKKwkJaWYgKGNudCA8IGopCisJCQlicmVhazsgLyogdGhlIHJlc3QgYXJlIGFsbCBpbnRlcmVzdGluZyAqLworCisJCS8qIGxvb2thaGVhZCBjb250ZXh0IGxpbmVzICovCisJCWsgPSBmaW5kX25leHQoc2xpbmUsIG1hcmssIGosIGNudCwgMCk7CisJCWogPSBhZGp1c3RfaHVua190YWlsKHNsaW5lLCBhbGxfbWFzaywgaSwgaik7CisKKwkJaWYgKGsgPCBqICsgY29udGV4dCkgeworCQkJLyogayBpcyBpbnRlcmVzdGluZyBhbmQgW2osaykgYXJlIG5vdCwgYnV0CisJCQkgKiBwYWludCB0aGVtIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIGdhcCBpcyBzbWFsbC4KKwkJCSAqLworCQkJd2hpbGUgKGogPCBrKQorCQkJCXNsaW5lW2orK10uZmxhZyB8PSBtYXJrOworCQkJaSA9IGs7CisJCQlnb3RvIGFnYWluOworCQl9CisKKwkJLyogaiBpcyB0aGUgZmlyc3QgdW5pbnRlcmVzdGluZyBsaW5lIGFuZCB0aGVyZSBpcworCQkgKiBubyBvdmVybGFwIGJleW9uZCBpdCB3aXRoaW4gY29udGV4dCBsaW5lcy4gIFBhaW50CisJCSAqIHRoZSB0cmFpbGluZyBlZGdlIGEgYml0LgorCQkgKi8KKwkJaSA9IGs7CisJCWsgPSAoaiArIGNvbnRleHQgPCBjbnQrMSkgPyBqICsgY29udGV4dCA6IGNudCsxOworCQl3aGlsZSAoaiA8IGspCisJCQlzbGluZVtqKytdLmZsYWcgfD0gbWFyazsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbWFrZV9odW5rcyhzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCB1bnNpZ25lZCBsb25nIGNudCwKKwkJICAgICAgIGludCBudW1fcGFyZW50LCBpbnQgZGVuc2UpCit7CisJdW5zaWduZWQgbG9uZyBhbGxfbWFzayA9ICgxVUw8PG51bV9wYXJlbnQpIC0gMTsKKwl1bnNpZ25lZCBsb25nIG1hcmsgPSAoMVVMPDxudW1fcGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGk7CisJaW50IGhhc19pbnRlcmVzdGluZyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDw9IGNudDsgaSsrKSB7CisJCWlmIChpbnRlcmVzdGluZygmc2xpbmVbaV0sIGFsbF9tYXNrKSkKKwkJCXNsaW5lW2ldLmZsYWcgfD0gbWFyazsKKwkJZWxzZQorCQkJc2xpbmVbaV0uZmxhZyAmPSB+bWFyazsKKwl9CisJaWYgKCFkZW5zZSkKKwkJcmV0dXJuIGdpdmVfY29udGV4dChzbGluZSwgY250LCBudW1fcGFyZW50KTsKKworCS8qIExvb2sgYXQgZWFjaCBodW5rLCBhbmQgaWYgd2UgaGF2ZSBjaGFuZ2VzIGZyb20gb25seSBvbmUKKwkgKiBwYXJlbnQsIG9yIHRoZSBjaGFuZ2VzIGFyZSB0aGUgc2FtZSBmcm9tIGFsbCBidXQgb25lCisJICogcGFyZW50LCBtYXJrIHRoYXQgdW5pbnRlcmVzdGluZy4KKwkgKi8KKwlpID0gMDsKKwl3aGlsZSAoaSA8PSBjbnQpIHsKKwkJdW5zaWduZWQgbG9uZyBqLCBodW5rX2JlZ2luLCBodW5rX2VuZDsKKwkJdW5zaWduZWQgbG9uZyBzYW1lX2RpZmY7CisJCXdoaWxlIChpIDw9IGNudCAmJiAhKHNsaW5lW2ldLmZsYWcgJiBtYXJrKSkKKwkJCWkrKzsKKwkJaWYgKGNudCA8IGkpCisJCQlicmVhazsgLyogTm8gbW9yZSBpbnRlcmVzdGluZyBodW5rcyAqLworCQlodW5rX2JlZ2luID0gaTsKKwkJZm9yIChqID0gaSArIDE7IGogPD0gY250OyBqKyspIHsKKwkJCWlmICghKHNsaW5lW2pdLmZsYWcgJiBtYXJrKSkgeworCQkJCS8qIExvb2sgYmV5b25kIHRoZSBlbmQgdG8gc2VlIGlmIHRoZXJlCisJCQkJICogaXMgYW4gaW50ZXJlc3RpbmcgbGluZSBhZnRlciB0aGlzCisJCQkJICogaHVuayB3aXRoaW4gY29udGV4dCBzcGFuLgorCQkJCSAqLworCQkJCXVuc2lnbmVkIGxvbmcgbGE7IC8qIGxvb2thaGVhZCAqLworCQkJCWludCBjb250aW4gPSAwOworCQkJCWxhID0gYWRqdXN0X2h1bmtfdGFpbChzbGluZSwgYWxsX21hc2ssCisJCQkJCQkgICAgIGh1bmtfYmVnaW4sIGopOworCQkJCWxhID0gKGxhICsgY29udGV4dCA8IGNudCArIDEpID8KKwkJCQkJKGxhICsgY29udGV4dCkgOiBjbnQgKyAxOworCQkJCXdoaWxlIChsYSAmJiBqIDw9IC0tbGEpIHsKKwkJCQkJaWYgKHNsaW5lW2xhXS5mbGFnICYgbWFyaykgeworCQkJCQkJY29udGluID0gMTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmICghY29udGluKQorCQkJCQlicmVhazsKKwkJCQlqID0gbGE7CisJCQl9CisJCX0KKwkJaHVua19lbmQgPSBqOworCisJCS8qIFtpLi5odW5rX2VuZCkgYXJlIGludGVyZXN0aW5nLiAgTm93IGlzIGl0IHJlYWxseQorCQkgKiBpbnRlcmVzdGluZz8gIFdlIGNoZWNrIGlmIHRoZXJlIGFyZSBvbmx5IHR3byB2ZXJzaW9ucworCQkgKiBhbmQgdGhlIHJlc3VsdCBtYXRjaGVzIG9uZSBvZiB0aGVtLiAgVGhhdCBpcywgd2UgbG9vaworCQkgKiBhdDoKKwkJICogICAoKykgbGluZSwgd2hpY2ggcmVjb3JkcyBsaW5lcyBhZGRlZCB0byB3aGljaCBwYXJlbnRzOworCQkgKiAgICAgICB0aGlzIGxpbmUgYXBwZWFycyBpbiB0aGUgcmVzdWx0LgorCQkgKiAgICgtKSBsaW5lLCB3aGljaCByZWNvcmRzIGZyb20gd2hhdCBwYXJlbnRzIHRoZSBsaW5lCisJCSAqICAgICAgIHdhcyByZW1vdmVkOyB0aGlzIGxpbmUgZG9lcyBub3QgYXBwZWFyIGluIHRoZSByZXN1bHQuCisJCSAqIHRoZW4gY2hlY2sgdGhlIHNldCBvZiBwYXJlbnRzIHRoZSByZXN1bHQgaGFzIGRpZmZlcmVuY2UKKwkJICogZnJvbSwgZnJvbSBhbGwgbGluZXMuICBJZiB0aGVyZSBhcmUgbGluZXMgdGhhdCBoYXMKKwkJICogZGlmZmVyZW50IHNldCBvZiBwYXJlbnRzIHRoYXQgdGhlIHJlc3VsdCBoYXMgZGlmZmVyZW5jZXMKKwkJICogZnJvbSwgdGhhdCBtZWFucyB3ZSBoYXZlIG1vcmUgdGhhbiB0d28gdmVyc2lvbnMuCisJCSAqCisJCSAqIEV2ZW4gd2hlbiB3ZSBoYXZlIG9ubHkgdHdvIHZlcnNpb25zLCBpZiB0aGUgcmVzdWx0IGRvZXMKKwkJICogbm90IG1hdGNoIGFueSBvZiB0aGUgcGFyZW50cywgdGhlIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkCisJCSAqIGludGVyZXN0aW5nLiAgSW4gc3VjaCBhIGNhc2UsIHdlIHdvdWxkIGhhdmUgYWxsICcrJyBsaW5lLgorCQkgKiBBZnRlciBwYXNzaW5nIHRoZSBhYm92ZSAidHdvIHZlcnNpb25zIiB0ZXN0LCB0aGF0IHdvdWxkCisJCSAqIGFwcGVhciBhcyAidGhlIHNhbWUgc2V0IG9mIHBhcmVudHMiIHRvIGJlICJhbGwgcGFyZW50cyIuCisJCSAqLworCQlzYW1lX2RpZmYgPSAwOworCQloYXNfaW50ZXJlc3RpbmcgPSAwOworCQlmb3IgKGogPSBpOyBqIDwgaHVua19lbmQgJiYgIWhhc19pbnRlcmVzdGluZzsgaisrKSB7CisJCQl1bnNpZ25lZCBsb25nIHRoaXNfZGlmZiA9IHNsaW5lW2pdLmZsYWcgJiBhbGxfbWFzazsKKwkJCXN0cnVjdCBsbGluZSAqbGwgPSBzbGluZVtqXS5sb3N0OworCQkJaWYgKHRoaXNfZGlmZikgeworCQkJCS8qIFRoaXMgaGFzIHNvbWUgY2hhbmdlcy4gIElzIGl0IHRoZQorCQkJCSAqIHNhbWUgYXMgb3RoZXJzPworCQkJCSAqLworCQkJCWlmICghc2FtZV9kaWZmKQorCQkJCQlzYW1lX2RpZmYgPSB0aGlzX2RpZmY7CisJCQkJZWxzZSBpZiAoc2FtZV9kaWZmICE9IHRoaXNfZGlmZikgeworCQkJCQloYXNfaW50ZXJlc3RpbmcgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQl3aGlsZSAobGwgJiYgIWhhc19pbnRlcmVzdGluZykgeworCQkJCS8qIExvc3QgdGhpcyBsaW5lIGZyb20gdGhlc2UgcGFyZW50czsKKwkJCQkgKiB3aG8gYXJlIHRoZXk/ICBBcmUgdGhleSB0aGUgc2FtZT8KKwkJCQkgKi8KKwkJCQl0aGlzX2RpZmYgPSBsbC0+cGFyZW50X21hcDsKKwkJCQlpZiAoIXNhbWVfZGlmZikKKwkJCQkJc2FtZV9kaWZmID0gdGhpc19kaWZmOworCQkJCWVsc2UgaWYgKHNhbWVfZGlmZiAhPSB0aGlzX2RpZmYpIHsKKwkJCQkJaGFzX2ludGVyZXN0aW5nID0gMTsKKwkJCQl9CisJCQkJbGwgPSBsbC0+bmV4dDsKKwkJCX0KKwkJfQorCisJCWlmICghaGFzX2ludGVyZXN0aW5nICYmIHNhbWVfZGlmZiAhPSBhbGxfbWFzaykgeworCQkJLyogVGhpcyBodW5rIGlzIG5vdCB0aGF0IGludGVyZXN0aW5nIGFmdGVyIGFsbCAqLworCQkJZm9yIChqID0gaHVua19iZWdpbjsgaiA8IGh1bmtfZW5kOyBqKyspCisJCQkJc2xpbmVbal0uZmxhZyAmPSB+bWFyazsKKwkJfQorCQlpID0gaHVua19lbmQ7CisJfQorCisJaGFzX2ludGVyZXN0aW5nID0gZ2l2ZV9jb250ZXh0KHNsaW5lLCBjbnQsIG51bV9wYXJlbnQpOworCXJldHVybiBoYXNfaW50ZXJlc3Rpbmc7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcGFyZW50X2xubyhzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCB1bnNpZ25lZCBsb25nIGwwLCB1bnNpZ25lZCBsb25nIGwxLCBpbnQgbiwgdW5zaWduZWQgbG9uZyBudWxsX2NvbnRleHQpCit7CisJbDAgPSBzbGluZVtsMF0ucF9sbm9bbl07CisJbDEgPSBzbGluZVtsMV0ucF9sbm9bbl07CisJcHJpbnRmKCIgLSVsdSwlbHUiLCBsMCwgbDEtbDAtbnVsbF9jb250ZXh0KTsKK30KKworc3RhdGljIGludCBodW5rX2NvbW1lbnRfbGluZShjb25zdCBjaGFyICpib2wpCit7CisJaW50IGNoOworCisJaWYgKCFib2wpCisJCXJldHVybiAwOworCWNoID0gKmJvbCAmIDB4ZmY7CisJcmV0dXJuIChpc2FscGhhKGNoKSB8fCBjaCA9PSAnXycgfHwgY2ggPT0gJyQnKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19saW5lX3RvX2VvbChjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCBjb25zdCBjaGFyICpyZXNldCkKK3sKKwlpbnQgc2F3X2NyX2F0X2VvbCA9IDA7CisJaWYgKGxlbiA8IDApCisJCWxlbiA9IHN0cmxlbihsaW5lKTsKKwlzYXdfY3JfYXRfZW9sID0gKGxlbiAmJiBsaW5lW2xlbi0xXSA9PSAnXHInKTsKKworCXByaW50ZigiJS4qcyVzJXNcbiIsIGxlbiAtIHNhd19jcl9hdF9lb2wsIGxpbmUsCisJICAgICAgIHJlc2V0LAorCSAgICAgICBzYXdfY3JfYXRfZW9sID8gIlxyIiA6ICIiKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9zbGluZShzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCBjb25zdCBjaGFyICpsaW5lX3ByZWZpeCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgY250LCBpbnQgbnVtX3BhcmVudCwKKwkJICAgICAgIGludCB1c2VfY29sb3IsIGludCByZXN1bHRfZGVsZXRlZCkKK3sKKwl1bnNpZ25lZCBsb25nIG1hcmsgPSAoMVVMPDxudW1fcGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIG5vX3ByZV9kZWxldGUgPSAoMlVMPDxudW1fcGFyZW50KTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGxubyA9IDA7CisJY29uc3QgY2hhciAqY19mcmFnID0gZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX0ZSQUdJTkZPKTsKKwljb25zdCBjaGFyICpjX2Z1bmMgPSBkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfRlVOQ0lORk8pOworCWNvbnN0IGNoYXIgKmNfbmV3ID0gZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX0ZJTEVfTkVXKTsKKwljb25zdCBjaGFyICpjX29sZCA9IGRpZmZfZ2V0X2NvbG9yKHVzZV9jb2xvciwgRElGRl9GSUxFX09MRCk7CisJY29uc3QgY2hhciAqY19jb250ZXh0ID0gZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX0NPTlRFWFQpOworCWNvbnN0IGNoYXIgKmNfcmVzZXQgPSBkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfUkVTRVQpOworCisJaWYgKHJlc3VsdF9kZWxldGVkKQorCQlyZXR1cm47IC8qIHJlc3VsdCBkZWxldGVkICovCisKKwl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBsb25nIGh1bmtfZW5kOworCQl1bnNpZ25lZCBsb25nIHJsaW5lczsKKwkJY29uc3QgY2hhciAqaHVua19jb21tZW50ID0gTlVMTDsKKwkJdW5zaWduZWQgbG9uZyBudWxsX2NvbnRleHQgPSAwOworCisJCXdoaWxlIChsbm8gPD0gY250ICYmICEoc2xpbmVbbG5vXS5mbGFnICYgbWFyaykpIHsKKwkJCWlmIChodW5rX2NvbW1lbnRfbGluZShzbGluZVtsbm9dLmJvbCkpCisJCQkJaHVua19jb21tZW50ID0gc2xpbmVbbG5vXS5ib2w7CisJCQlsbm8rKzsKKwkJfQorCQlpZiAoY250IDwgbG5vKQorCQkJYnJlYWs7CisJCWVsc2UgeworCQkJZm9yIChodW5rX2VuZCA9IGxubyArIDE7IGh1bmtfZW5kIDw9IGNudDsgaHVua19lbmQrKykKKwkJCQlpZiAoIShzbGluZVtodW5rX2VuZF0uZmxhZyAmIG1hcmspKQorCQkJCQlicmVhazsKKwkJfQorCQlybGluZXMgPSBodW5rX2VuZCAtIGxubzsKKwkJaWYgKGNudCA8IGh1bmtfZW5kKQorCQkJcmxpbmVzLS07IC8qIHBvaW50aW5nIGF0IHRoZSBsYXN0IGRlbGV0ZSBodW5rICovCisKKwkJaWYgKCFjb250ZXh0KSB7CisJCQkvKgorCQkJICogRXZlbiB3aGVuIHJ1bm5pbmcgd2l0aCAtLXVuaWZpZWQ9MCwgYWxsCisJCQkgKiBsaW5lcyBpbiB0aGUgaHVuayBuZWVkcyB0byBiZSBwcm9jZXNzZWQgaW4KKwkJCSAqIHRoZSBsb29wIGJlbG93IGluIG9yZGVyIHRvIHNob3cgdGhlCisJCQkgKiBkZWxldGlvbiByZWNvcmRlZCBpbiBsb3N0X2hlYWQuICBIb3dldmVyLAorCQkJICogd2UgZG8gbm90IHdhbnQgdG8gc2hvdyB0aGUgcmVzdWx0aW5nIGxpbmUKKwkJCSAqIHdpdGggYWxsIGJsYW5rIGNvbnRleHQgbWFya2VycyBpbiBzdWNoIGEKKwkJCSAqIGNhc2UuICBDb21wZW5zYXRlLgorCQkJICovCisJCQl1bnNpZ25lZCBsb25nIGo7CisJCQlmb3IgKGogPSBsbm87IGogPCBodW5rX2VuZDsgaisrKQorCQkJCWlmICghKHNsaW5lW2pdLmZsYWcgJiAobWFyay0xKSkpCisJCQkJCW51bGxfY29udGV4dCsrOworCQkJcmxpbmVzIC09IG51bGxfY29udGV4dDsKKwkJfQorCisJCXByaW50ZigiJXMlcyIsIGxpbmVfcHJlZml4LCBjX2ZyYWcpOworCQlmb3IgKGkgPSAwOyBpIDw9IG51bV9wYXJlbnQ7IGkrKykgcHV0Y2hhcihjb21iaW5lX21hcmtlcik7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspCisJCQlzaG93X3BhcmVudF9sbm8oc2xpbmUsIGxubywgaHVua19lbmQsIGksIG51bGxfY29udGV4dCk7CisJCXByaW50ZigiICslbHUsJWx1ICIsIGxubysxLCBybGluZXMpOworCQlmb3IgKGkgPSAwOyBpIDw9IG51bV9wYXJlbnQ7IGkrKykgcHV0Y2hhcihjb21iaW5lX21hcmtlcik7CisKKwkJaWYgKGh1bmtfY29tbWVudCkgeworCQkJaW50IGNvbW1lbnRfZW5kID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCA0MDsgaSsrKSB7CisJCQkJaW50IGNoID0gaHVua19jb21tZW50W2ldICYgMHhmZjsKKwkJCQlpZiAoIWNoIHx8IGNoID09ICdcbicpCisJCQkJCWJyZWFrOworCQkJCWlmICghaXNzcGFjZShjaCkpCisJCQkJICAgIGNvbW1lbnRfZW5kID0gaTsKKwkJCX0KKwkJCWlmIChjb21tZW50X2VuZCkKKwkJCQlwcmludGYoIiVzJXMgJXMlcyIsIGNfcmVzZXQsCisJCQkJCQkgICAgY19jb250ZXh0LCBjX3Jlc2V0LAorCQkJCQkJICAgIGNfZnVuYyk7CisJCQlmb3IgKGkgPSAwOyBpIDwgY29tbWVudF9lbmQ7IGkrKykKKwkJCQlwdXRjaGFyKGh1bmtfY29tbWVudFtpXSk7CisJCX0KKworCQlwcmludGYoIiVzXG4iLCBjX3Jlc2V0KTsKKwkJd2hpbGUgKGxubyA8IGh1bmtfZW5kKSB7CisJCQlzdHJ1Y3QgbGxpbmUgKmxsOworCQkJaW50IGo7CisJCQl1bnNpZ25lZCBsb25nIHBfbWFzazsKKwkJCXN0cnVjdCBzbGluZSAqc2wgPSAmc2xpbmVbbG5vKytdOworCQkJbGwgPSAoc2wtPmZsYWcgJiBub19wcmVfZGVsZXRlKSA/IE5VTEwgOiBzbC0+bG9zdDsKKwkJCXdoaWxlIChsbCkgeworCQkJCXByaW50ZigiJXMlcyIsIGxpbmVfcHJlZml4LCBjX29sZCk7CisJCQkJZm9yIChqID0gMDsgaiA8IG51bV9wYXJlbnQ7IGorKykgeworCQkJCQlpZiAobGwtPnBhcmVudF9tYXAgJiAoMVVMPDxqKSkKKwkJCQkJCXB1dGNoYXIoJy0nKTsKKwkJCQkJZWxzZQorCQkJCQkJcHV0Y2hhcignICcpOworCQkJCX0KKwkJCQlzaG93X2xpbmVfdG9fZW9sKGxsLT5saW5lLCAtMSwgY19yZXNldCk7CisJCQkJbGwgPSBsbC0+bmV4dDsKKwkJCX0KKwkJCWlmIChjbnQgPCBsbm8pCisJCQkJYnJlYWs7CisJCQlwX21hc2sgPSAxOworCQkJZnB1dHMobGluZV9wcmVmaXgsIHN0ZG91dCk7CisJCQlpZiAoIShzbC0+ZmxhZyAmIChtYXJrLTEpKSkgeworCQkJCS8qCisJCQkJICogVGhpcyBzbGluZSB3YXMgaGVyZSB0byBoYW5nIHRoZQorCQkJCSAqIGxvc3QgbGluZXMgaW4gZnJvbnQgb2YgaXQuCisJCQkJICovCisJCQkJaWYgKCFjb250ZXh0KQorCQkJCQljb250aW51ZTsKKwkJCQlmcHV0cyhjX2NvbnRleHQsIHN0ZG91dCk7CisJCQl9CisJCQllbHNlCisJCQkJZnB1dHMoY19uZXcsIHN0ZG91dCk7CisJCQlmb3IgKGogPSAwOyBqIDwgbnVtX3BhcmVudDsgaisrKSB7CisJCQkJaWYgKHBfbWFzayAmIHNsLT5mbGFnKQorCQkJCQlwdXRjaGFyKCcrJyk7CisJCQkJZWxzZQorCQkJCQlwdXRjaGFyKCcgJyk7CisJCQkJcF9tYXNrIDw8PSAxOworCQkJfQorCQkJc2hvd19saW5lX3RvX2VvbChzbC0+Ym9sLCBzbC0+bGVuLCBjX3Jlc2V0KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcmV1c2VfY29tYmluZV9kaWZmKHN0cnVjdCBzbGluZSAqc2xpbmUsIHVuc2lnbmVkIGxvbmcgY250LAorCQkJICAgICAgIGludCBpLCBpbnQgaikKK3sKKwkvKiBXZSBoYXZlIGFscmVhZHkgZXhhbWluZWQgcGFyZW50IGogYW5kIHdlIGtub3cgcGFyZW50IGkKKwkgKiBhbmQgcGFyZW50IGogYXJlIHRoZSBzYW1lLCBzbyByZXVzZSB0aGUgY29tYmluZWQgcmVzdWx0CisJICogb2YgcGFyZW50IGogZm9yIHBhcmVudCBpLgorCSAqLworCXVuc2lnbmVkIGxvbmcgbG5vLCBpbWFzaywgam1hc2s7CisJaW1hc2sgPSAoMVVMPDxpKTsKKwlqbWFzayA9ICgxVUw8PGopOworCisJZm9yIChsbm8gPSAwOyBsbm8gPD0gY250OyBsbm8rKykgeworCQlzdHJ1Y3QgbGxpbmUgKmxsID0gc2xpbmUtPmxvc3Q7CisJCXNsaW5lLT5wX2xub1tpXSA9IHNsaW5lLT5wX2xub1tqXTsKKwkJd2hpbGUgKGxsKSB7CisJCQlpZiAobGwtPnBhcmVudF9tYXAgJiBqbWFzaykKKwkJCQlsbC0+cGFyZW50X21hcCB8PSBpbWFzazsKKwkJCWxsID0gbGwtPm5leHQ7CisJCX0KKwkJaWYgKHNsaW5lLT5mbGFnICYgam1hc2spCisJCQlzbGluZS0+ZmxhZyB8PSBpbWFzazsKKwkJc2xpbmUrKzsKKwl9CisJLyogdGhlIG92ZXJhbGwgc2l6ZSBvZiB0aGUgZmlsZSAoc2xpbmVbY250XSkgKi8KKwlzbGluZS0+cF9sbm9baV0gPSBzbGluZS0+cF9sbm9bal07Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfcXVvdGVkX3BhdGgoY29uc3QgY2hhciAqaGVhZCwKKwkJCSAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICBjb25zdCBjaGFyICpsaW5lX3ByZWZpeCwKKwkJCSAgICAgY29uc3QgY2hhciAqY19tZXRhLCBjb25zdCBjaGFyICpjX3Jlc2V0KQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgbGluZV9wcmVmaXgpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgY19tZXRhKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIGhlYWQpOworCXF1b3RlX3R3b19jX3N0eWxlKCZidWYsIHByZWZpeCwgcGF0aCwgMCk7CisJc3RyYnVmX2FkZHN0cigmYnVmLCBjX3Jlc2V0KTsKKwlwdXRzKGJ1Zi5idWYpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2NvbWJpbmVkX2hlYWRlcihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKmVsZW0sCisJCQkJIGludCBudW1fcGFyZW50LAorCQkJCSBpbnQgZGVuc2UsCisJCQkJIHN0cnVjdCByZXZfaW5mbyAqcmV2LAorCQkJCSBjb25zdCBjaGFyICpsaW5lX3ByZWZpeCwKKwkJCQkgaW50IG1vZGVfZGlmZmVycywKKwkJCQkgaW50IHNob3dfZmlsZV9oZWFkZXIpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0ID0gJnJldi0+ZGlmZm9wdDsKKwlpbnQgYWJicmV2ID0gb3B0LT5mbGFncy5mdWxsX2luZGV4ID8gdGhlX2hhc2hfYWxnby0+aGV4c3ogOiBERUZBVUxUX0FCQlJFVjsKKwljb25zdCBjaGFyICphX3ByZWZpeCA9IG9wdC0+YV9wcmVmaXggPyBvcHQtPmFfcHJlZml4IDogImEvIjsKKwljb25zdCBjaGFyICpiX3ByZWZpeCA9IG9wdC0+Yl9wcmVmaXggPyBvcHQtPmJfcHJlZml4IDogImIvIjsKKwljb25zdCBjaGFyICpjX21ldGEgPSBkaWZmX2dldF9jb2xvcl9vcHQob3B0LCBESUZGX01FVEFJTkZPKTsKKwljb25zdCBjaGFyICpjX3Jlc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG9wdCwgRElGRl9SRVNFVCk7CisJY29uc3QgY2hhciAqYWJiOworCWludCBhZGRlZCA9IDA7CisJaW50IGRlbGV0ZWQgPSAwOworCWludCBpOworCisJaWYgKHJldi0+bG9naW5mbyAmJiAhcmV2LT5ub19jb21taXRfaWQpCisJCXNob3dfbG9nKHJldik7CisKKwlkdW1wX3F1b3RlZF9wYXRoKGRlbnNlID8gImRpZmYgLS1jYyAiIDogImRpZmYgLS1jb21iaW5lZCAiLAorCQkJICIiLCBlbGVtLT5wYXRoLCBsaW5lX3ByZWZpeCwgY19tZXRhLCBjX3Jlc2V0KTsKKwlwcmludGYoIiVzJXNpbmRleCAiLCBsaW5lX3ByZWZpeCwgY19tZXRhKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKSB7CisJCWFiYiA9IGZpbmRfdW5pcXVlX2FiYnJldigmZWxlbS0+cGFyZW50W2ldLm9pZCwKKwkJCQkJIGFiYnJldik7CisJCXByaW50ZigiJXMlcyIsIGkgPyAiLCIgOiAiIiwgYWJiKTsKKwl9CisJYWJiID0gZmluZF91bmlxdWVfYWJicmV2KCZlbGVtLT5vaWQsIGFiYnJldik7CisJcHJpbnRmKCIuLiVzJXNcbiIsIGFiYiwgY19yZXNldCk7CisKKwlpZiAobW9kZV9kaWZmZXJzKSB7CisJCWRlbGV0ZWQgPSAhZWxlbS0+bW9kZTsKKworCQkvKiBXZSBzYXkgaXQgd2FzIGFkZGVkIGlmIG5vYm9keSBoYWQgaXQgKi8KKwkJYWRkZWQgPSAhZGVsZXRlZDsKKwkJZm9yIChpID0gMDsgYWRkZWQgJiYgaSA8IG51bV9wYXJlbnQ7IGkrKykKKwkJCWlmIChlbGVtLT5wYXJlbnRbaV0uc3RhdHVzICE9CisJCQkgICAgRElGRl9TVEFUVVNfQURERUQpCisJCQkJYWRkZWQgPSAwOworCQlpZiAoYWRkZWQpCisJCQlwcmludGYoIiVzJXNuZXcgZmlsZSBtb2RlICUwNm8iLAorCQkJICAgICAgIGxpbmVfcHJlZml4LCBjX21ldGEsIGVsZW0tPm1vZGUpOworCQllbHNlIHsKKwkJCWlmIChkZWxldGVkKQorCQkJCXByaW50ZigiJXMlc2RlbGV0ZWQgZmlsZSAiLAorCQkJCSAgICAgICBsaW5lX3ByZWZpeCwgY19tZXRhKTsKKwkJCXByaW50ZigibW9kZSAiKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspIHsKKwkJCQlwcmludGYoIiVzJTA2byIsIGkgPyAiLCIgOiAiIiwKKwkJCQkgICAgICAgZWxlbS0+cGFyZW50W2ldLm1vZGUpOworCQkJfQorCQkJaWYgKGVsZW0tPm1vZGUpCisJCQkJcHJpbnRmKCIuLiUwNm8iLCBlbGVtLT5tb2RlKTsKKwkJfQorCQlwcmludGYoIiVzXG4iLCBjX3Jlc2V0KTsKKwl9CisKKwlpZiAoIXNob3dfZmlsZV9oZWFkZXIpCisJCXJldHVybjsKKworCWlmIChyZXYtPmNvbWJpbmVkX2FsbF9wYXRocykgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKSB7CisJCQljaGFyICpwYXRoID0gZmlsZW5hbWVfY2hhbmdlZChlbGVtLT5wYXJlbnRbaV0uc3RhdHVzKQorCQkJCT8gZWxlbS0+cGFyZW50W2ldLnBhdGguYnVmIDogZWxlbS0+cGF0aDsKKwkJCWlmIChlbGVtLT5wYXJlbnRbaV0uc3RhdHVzID09IERJRkZfU1RBVFVTX0FEREVEKQorCQkJCWR1bXBfcXVvdGVkX3BhdGgoIi0tLSAiLCAiIiwgIi9kZXYvbnVsbCIsCisJCQkJCQkgbGluZV9wcmVmaXgsIGNfbWV0YSwgY19yZXNldCk7CisJCQllbHNlCisJCQkJZHVtcF9xdW90ZWRfcGF0aCgiLS0tICIsIGFfcHJlZml4LCBwYXRoLAorCQkJCQkJIGxpbmVfcHJlZml4LCBjX21ldGEsIGNfcmVzZXQpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGFkZGVkKQorCQkJZHVtcF9xdW90ZWRfcGF0aCgiLS0tICIsICIiLCAiL2Rldi9udWxsIiwKKwkJCQkJIGxpbmVfcHJlZml4LCBjX21ldGEsIGNfcmVzZXQpOworCQllbHNlCisJCQlkdW1wX3F1b3RlZF9wYXRoKCItLS0gIiwgYV9wcmVmaXgsIGVsZW0tPnBhdGgsCisJCQkJCSBsaW5lX3ByZWZpeCwgY19tZXRhLCBjX3Jlc2V0KTsKKwl9CisJaWYgKGRlbGV0ZWQpCisJCWR1bXBfcXVvdGVkX3BhdGgoIisrKyAiLCAiIiwgIi9kZXYvbnVsbCIsCisJCQkJIGxpbmVfcHJlZml4LCBjX21ldGEsIGNfcmVzZXQpOworCWVsc2UKKwkJZHVtcF9xdW90ZWRfcGF0aCgiKysrICIsIGJfcHJlZml4LCBlbGVtLT5wYXRoLAorCQkJCSBsaW5lX3ByZWZpeCwgY19tZXRhLCBjX3Jlc2V0KTsKK30KKworc3RhdGljIHZvaWQgc2hvd19wYXRjaF9kaWZmKHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqZWxlbSwgaW50IG51bV9wYXJlbnQsCisJCQkgICAgaW50IGRlbnNlLCBpbnQgd29ya2luZ190cmVlX2ZpbGUsCisJCQkgICAgc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0ID0gJnJldi0+ZGlmZm9wdDsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdF9zaXplLCBjbnQsIGxubzsKKwlpbnQgcmVzdWx0X2RlbGV0ZWQgPSAwOworCWNoYXIgKnJlc3VsdCwgKmNwOworCXN0cnVjdCBzbGluZSAqc2xpbmU7IC8qIHN1cnZpdmVkIGxpbmVzICovCisJaW50IG1vZGVfZGlmZmVycyA9IDA7CisJaW50IGksIHNob3dfaHVua3M7CisJbW1maWxlX3QgcmVzdWx0X2ZpbGU7CisJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqdXNlcmRpZmY7CisJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqdGV4dGNvbnYgPSBOVUxMOworCWludCBpc19iaW5hcnk7CisJY29uc3QgY2hhciAqbGluZV9wcmVmaXggPSBkaWZmX2xpbmVfcHJlZml4KG9wdCk7CisKKwljb250ZXh0ID0gb3B0LT5jb250ZXh0OworCXVzZXJkaWZmID0gdXNlcmRpZmZfZmluZF9ieV9wYXRoKG9wdC0+cmVwby0+aW5kZXgsIGVsZW0tPnBhdGgpOworCWlmICghdXNlcmRpZmYpCisJCXVzZXJkaWZmID0gdXNlcmRpZmZfZmluZF9ieV9uYW1lKCJkZWZhdWx0Iik7CisJaWYgKG9wdC0+ZmxhZ3MuYWxsb3dfdGV4dGNvbnYpCisJCXRleHRjb252ID0gdXNlcmRpZmZfZ2V0X3RleHRjb252KG9wdC0+cmVwbywgdXNlcmRpZmYpOworCisJLyogUmVhZCB0aGUgcmVzdWx0IG9mIG1lcmdlIGZpcnN0ICovCisJaWYgKCF3b3JraW5nX3RyZWVfZmlsZSkKKwkJcmVzdWx0ID0gZ3JhYl9ibG9iKG9wdC0+cmVwbywgJmVsZW0tPm9pZCwgZWxlbS0+bW9kZSwgJnJlc3VsdF9zaXplLAorCQkJCSAgIHRleHRjb252LCBlbGVtLT5wYXRoKTsKKwllbHNlIHsKKwkJLyogVXNlZCBieSBkaWZmLXRyZWUgdG8gcmVhZCBmcm9tIHRoZSB3b3JraW5nIHRyZWUgKi8KKwkJc3RydWN0IHN0YXQgc3Q7CisJCWludCBmZCA9IC0xOworCisJCWlmIChsc3RhdChlbGVtLT5wYXRoLCAmc3QpIDwgMCkKKwkJCWdvdG8gZGVsZXRlZF9maWxlOworCisJCWlmIChTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZidWYsIGVsZW0tPnBhdGgsIHN0LnN0X3NpemUpIDwgMCkgeworCQkJCWVycm9yX2Vycm5vKCJyZWFkbGluayglcykiLCBlbGVtLT5wYXRoKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlyZXN1bHRfc2l6ZSA9IGJ1Zi5sZW47CisJCQlyZXN1bHQgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCQkJZWxlbS0+bW9kZSA9IGNhbm9uX21vZGUoc3Quc3RfbW9kZSk7CisJCX0gZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCQlpZiAocmVzb2x2ZV9naXRsaW5rX3JlZihlbGVtLT5wYXRoLCAiSEVBRCIsICZvaWQpIDwgMCkKKwkJCQlyZXN1bHQgPSBncmFiX2Jsb2Iob3B0LT5yZXBvLCAmZWxlbS0+b2lkLAorCQkJCQkJICAgZWxlbS0+bW9kZSwgJnJlc3VsdF9zaXplLAorCQkJCQkJICAgTlVMTCwgTlVMTCk7CisJCQllbHNlCisJCQkJcmVzdWx0ID0gZ3JhYl9ibG9iKG9wdC0+cmVwbywgJm9pZCwgZWxlbS0+bW9kZSwKKwkJCQkJCSAgICZyZXN1bHRfc2l6ZSwgTlVMTCwgTlVMTCk7CisJCX0gZWxzZSBpZiAodGV4dGNvbnYpIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkZiA9IGFsbG9jX2ZpbGVzcGVjKGVsZW0tPnBhdGgpOworCQkJZmlsbF9maWxlc3BlYyhkZiwgJm51bGxfb2lkLCAwLCBzdC5zdF9tb2RlKTsKKwkJCXJlc3VsdF9zaXplID0gZmlsbF90ZXh0Y29udihvcHQtPnJlcG8sIHRleHRjb252LCBkZiwgJnJlc3VsdCk7CisJCQlmcmVlX2ZpbGVzcGVjKGRmKTsKKwkJfSBlbHNlIGlmICgwIDw9IChmZCA9IG9wZW4oZWxlbS0+cGF0aCwgT19SRE9OTFkpKSkgeworCQkJc2l6ZV90IGxlbiA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisJCQlzc2l6ZV90IGRvbmU7CisJCQlpbnQgaXNfZmlsZSwgaTsKKworCQkJZWxlbS0+bW9kZSA9IGNhbm9uX21vZGUoc3Quc3RfbW9kZSk7CisJCQkvKiBpZiBzeW1saW5rcyBkb24ndCB3b3JrLCBhc3N1bWUgc3ltbGluayBpZiBhbGwgcGFyZW50cworCQkJICogYXJlIHN5bWxpbmtzCisJCQkgKi8KKwkJCWlzX2ZpbGUgPSBoYXNfc3ltbGlua3M7CisJCQlmb3IgKGkgPSAwOyAhaXNfZmlsZSAmJiBpIDwgbnVtX3BhcmVudDsgaSsrKQorCQkJCWlzX2ZpbGUgPSAhU19JU0xOSyhlbGVtLT5wYXJlbnRbaV0ubW9kZSk7CisJCQlpZiAoIWlzX2ZpbGUpCisJCQkJZWxlbS0+bW9kZSA9IGNhbm9uX21vZGUoU19JRkxOSyk7CisKKwkJCXJlc3VsdF9zaXplID0gbGVuOworCQkJcmVzdWx0ID0geG1hbGxvY3oobGVuKTsKKworCQkJZG9uZSA9IHJlYWRfaW5fZnVsbChmZCwgcmVzdWx0LCBsZW4pOworCQkJaWYgKGRvbmUgPCAwKQorCQkJCWRpZV9lcnJubygicmVhZCBlcnJvciAnJXMnIiwgZWxlbS0+cGF0aCk7CisJCQllbHNlIGlmIChkb25lIDwgbGVuKQorCQkJCWRpZSgiZWFybHkgRU9GICclcyciLCBlbGVtLT5wYXRoKTsKKworCQkJLyogSWYgbm90IGEgZmFrZSBzeW1saW5rLCBhcHBseSBmaWx0ZXJzLCBlLmcuIGF1dG9jcmxmICovCisJCQlpZiAoaXNfZmlsZSkgeworCQkJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkJCQlpZiAoY29udmVydF90b19naXQocmV2LT5kaWZmb3B0LnJlcG8tPmluZGV4LAorCQkJCQkJICAgZWxlbS0+cGF0aCwgcmVzdWx0LCBsZW4sICZidWYsIGdsb2JhbF9jb252X2ZsYWdzX2VvbCkpIHsKKwkJCQkJZnJlZShyZXN1bHQpOworCQkJCQlyZXN1bHQgPSBzdHJidWZfZGV0YWNoKCZidWYsICZsZW4pOworCQkJCQlyZXN1bHRfc2l6ZSA9IGxlbjsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCWRlbGV0ZWRfZmlsZToKKwkJCXJlc3VsdF9kZWxldGVkID0gMTsKKwkJCXJlc3VsdF9zaXplID0gMDsKKwkJCWVsZW0tPm1vZGUgPSAwOworCQkJcmVzdWx0ID0geGNhbGxvYygxLCAxKTsKKwkJfQorCisJCWlmICgwIDw9IGZkKQorCQkJY2xvc2UoZmQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspIHsKKwkJaWYgKGVsZW0tPnBhcmVudFtpXS5tb2RlICE9IGVsZW0tPm1vZGUpIHsKKwkJCW1vZGVfZGlmZmVycyA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICh0ZXh0Y29udikKKwkJaXNfYmluYXJ5ID0gMDsKKwllbHNlIGlmICh1c2VyZGlmZi0+YmluYXJ5ICE9IC0xKQorCQlpc19iaW5hcnkgPSB1c2VyZGlmZi0+YmluYXJ5OworCWVsc2UgeworCQlpc19iaW5hcnkgPSBidWZmZXJfaXNfYmluYXJ5KHJlc3VsdCwgcmVzdWx0X3NpemUpOworCQlmb3IgKGkgPSAwOyAhaXNfYmluYXJ5ICYmIGkgPCBudW1fcGFyZW50OyBpKyspIHsKKwkJCWNoYXIgKmJ1ZjsKKwkJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJCWJ1ZiA9IGdyYWJfYmxvYihvcHQtPnJlcG8sCisJCQkJCSZlbGVtLT5wYXJlbnRbaV0ub2lkLAorCQkJCQllbGVtLT5wYXJlbnRbaV0ubW9kZSwKKwkJCQkJJnNpemUsIE5VTEwsIE5VTEwpOworCQkJaWYgKGJ1ZmZlcl9pc19iaW5hcnkoYnVmLCBzaXplKSkKKwkJCQlpc19iaW5hcnkgPSAxOworCQkJZnJlZShidWYpOworCQl9CisJfQorCWlmIChpc19iaW5hcnkpIHsKKwkJc2hvd19jb21iaW5lZF9oZWFkZXIoZWxlbSwgbnVtX3BhcmVudCwgZGVuc2UsIHJldiwKKwkJCQkgICAgIGxpbmVfcHJlZml4LCBtb2RlX2RpZmZlcnMsIDApOworCQlwcmludGYoIkJpbmFyeSBmaWxlcyBkaWZmZXJcbiIpOworCQlmcmVlKHJlc3VsdCk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGNudCA9IDAsIGNwID0gcmVzdWx0OyBjcCA8IHJlc3VsdCArIHJlc3VsdF9zaXplOyBjcCsrKSB7CisJCWlmICgqY3AgPT0gJ1xuJykKKwkJCWNudCsrOworCX0KKwlpZiAocmVzdWx0X3NpemUgJiYgcmVzdWx0W3Jlc3VsdF9zaXplLTFdICE9ICdcbicpCisJCWNudCsrOyAvKiBpbmNvbXBsZXRlIGxpbmUgKi8KKworCXNsaW5lID0geGNhbGxvYyhzdF9hZGQoY250LCAyKSwgc2l6ZW9mKCpzbGluZSkpOworCXNsaW5lWzBdLmJvbCA9IHJlc3VsdDsKKwlmb3IgKGxubyA9IDAsIGNwID0gcmVzdWx0OyBjcCA8IHJlc3VsdCArIHJlc3VsdF9zaXplOyBjcCsrKSB7CisJCWlmICgqY3AgPT0gJ1xuJykgeworCQkJc2xpbmVbbG5vXS5sZW4gPSBjcCAtIHNsaW5lW2xub10uYm9sOworCQkJbG5vKys7CisJCQlpZiAobG5vIDwgY250KQorCQkJCXNsaW5lW2xub10uYm9sID0gY3AgKyAxOworCQl9CisJfQorCWlmIChyZXN1bHRfc2l6ZSAmJiByZXN1bHRbcmVzdWx0X3NpemUtMV0gIT0gJ1xuJykKKwkJc2xpbmVbY250LTFdLmxlbiA9IHJlc3VsdF9zaXplIC0gKHNsaW5lW2NudC0xXS5ib2wgLSByZXN1bHQpOworCisJcmVzdWx0X2ZpbGUucHRyID0gcmVzdWx0OworCXJlc3VsdF9maWxlLnNpemUgPSByZXN1bHRfc2l6ZTsKKworCS8qIEV2ZW4gcF9sbm9bY250KzFdIGlzIHZhbGlkIC0tIHRoYXQgaXMgZm9yIHRoZSBlbmQgbGluZSBudW1iZXIKKwkgKiBmb3IgZGVsZXRpb24gaHVuayBhdCB0aGUgZW5kLgorCSAqLworCXNsaW5lWzBdLnBfbG5vID0geGNhbGxvYyhzdF9tdWx0KHN0X2FkZChjbnQsIDIpLCBudW1fcGFyZW50KSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlmb3IgKGxubyA9IDA7IGxubyA8PSBjbnQ7IGxubysrKQorCQlzbGluZVtsbm8rMV0ucF9sbm8gPSBzbGluZVtsbm9dLnBfbG5vICsgbnVtX3BhcmVudDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspIHsKKwkJaW50IGo7CisJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKwkJCWlmIChvaWRlcSgmZWxlbS0+cGFyZW50W2ldLm9pZCwKKwkJCQkgICZlbGVtLT5wYXJlbnRbal0ub2lkKSkgeworCQkJCXJldXNlX2NvbWJpbmVfZGlmZihzbGluZSwgY250LCBpLCBqKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBqKQorCQkJY29tYmluZV9kaWZmKG9wdC0+cmVwbywKKwkJCQkgICAgICZlbGVtLT5wYXJlbnRbaV0ub2lkLAorCQkJCSAgICAgZWxlbS0+cGFyZW50W2ldLm1vZGUsCisJCQkJICAgICAmcmVzdWx0X2ZpbGUsIHNsaW5lLAorCQkJCSAgICAgY250LCBpLCBudW1fcGFyZW50LCByZXN1bHRfZGVsZXRlZCwKKwkJCQkgICAgIHRleHRjb252LCBlbGVtLT5wYXRoLCBvcHQtPnhkbF9vcHRzKTsKKwl9CisKKwlzaG93X2h1bmtzID0gbWFrZV9odW5rcyhzbGluZSwgY250LCBudW1fcGFyZW50LCBkZW5zZSk7CisKKwlpZiAoc2hvd19odW5rcyB8fCBtb2RlX2RpZmZlcnMgfHwgd29ya2luZ190cmVlX2ZpbGUpIHsKKwkJc2hvd19jb21iaW5lZF9oZWFkZXIoZWxlbSwgbnVtX3BhcmVudCwgZGVuc2UsIHJldiwKKwkJCQkgICAgIGxpbmVfcHJlZml4LCBtb2RlX2RpZmZlcnMsIDEpOworCQlkdW1wX3NsaW5lKHNsaW5lLCBsaW5lX3ByZWZpeCwgY250LCBudW1fcGFyZW50LAorCQkJICAgb3B0LT51c2VfY29sb3IsIHJlc3VsdF9kZWxldGVkKTsKKwl9CisJZnJlZShyZXN1bHQpOworCisJZm9yIChsbm8gPSAwOyBsbm8gPCBjbnQ7IGxubysrKSB7CisJCWlmIChzbGluZVtsbm9dLmxvc3QpIHsKKwkJCXN0cnVjdCBsbGluZSAqbGwgPSBzbGluZVtsbm9dLmxvc3Q7CisJCQl3aGlsZSAobGwpIHsKKwkJCQlzdHJ1Y3QgbGxpbmUgKnRtcCA9IGxsOworCQkJCWxsID0gbGwtPm5leHQ7CisJCQkJZnJlZSh0bXApOworCQkJfQorCQl9CisJfQorCWZyZWUoc2xpbmVbMF0ucF9sbm8pOworCWZyZWUoc2xpbmUpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3Jhd19kaWZmKHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcCwgaW50IG51bV9wYXJlbnQsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCA9ICZyZXYtPmRpZmZvcHQ7CisJaW50IGxpbmVfdGVybWluYXRpb24sIGludGVyX25hbWVfdGVybWluYXRpb24sIGk7CisJY29uc3QgY2hhciAqbGluZV9wcmVmaXggPSBkaWZmX2xpbmVfcHJlZml4KG9wdCk7CisKKwlsaW5lX3Rlcm1pbmF0aW9uID0gb3B0LT5saW5lX3Rlcm1pbmF0aW9uOworCWludGVyX25hbWVfdGVybWluYXRpb24gPSAnXHQnOworCWlmICghbGluZV90ZXJtaW5hdGlvbikKKwkJaW50ZXJfbmFtZV90ZXJtaW5hdGlvbiA9IDA7CisKKwlpZiAocmV2LT5sb2dpbmZvICYmICFyZXYtPm5vX2NvbW1pdF9pZCkKKwkJc2hvd19sb2cocmV2KTsKKworCisJaWYgKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX1JBVykgeworCQlwcmludGYoIiVzIiwgbGluZV9wcmVmaXgpOworCisJCS8qIEFzIG1hbnkgY29sb25zIGFzIHRoZXJlIGFyZSBwYXJlbnRzICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspCisJCQlwdXRjaGFyKCc6Jyk7CisKKwkJLyogU2hvdyB0aGUgbW9kZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykKKwkJCXByaW50ZigiJTA2byAiLCBwLT5wYXJlbnRbaV0ubW9kZSk7CisJCXByaW50ZigiJTA2byIsIHAtPm1vZGUpOworCisJCS8qIFNob3cgc2hhMSdzICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspCisJCQlwcmludGYoIiAlcyIsIGRpZmZfYWxpZ25lZF9hYmJyZXYoJnAtPnBhcmVudFtpXS5vaWQsCisJCQkJCQkJICBvcHQtPmFiYnJldikpOworCQlwcmludGYoIiAlcyAiLCBkaWZmX2FsaWduZWRfYWJicmV2KCZwLT5vaWQsIG9wdC0+YWJicmV2KSk7CisJfQorCisJaWYgKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIChESUZGX0ZPUk1BVF9SQVcgfCBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUykpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykKKwkJCXB1dGNoYXIocC0+cGFyZW50W2ldLnN0YXR1cyk7CisJCXB1dGNoYXIoaW50ZXJfbmFtZV90ZXJtaW5hdGlvbik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykKKwkJaWYgKHJldi0+Y29tYmluZWRfYWxsX3BhdGhzKSB7CisJCQlpZiAoZmlsZW5hbWVfY2hhbmdlZChwLT5wYXJlbnRbaV0uc3RhdHVzKSkKKwkJCQl3cml0ZV9uYW1lX3F1b3RlZChwLT5wYXJlbnRbaV0ucGF0aC5idWYsIHN0ZG91dCwKKwkJCQkJCSAgaW50ZXJfbmFtZV90ZXJtaW5hdGlvbik7CisJCQllbHNlCisJCQkJd3JpdGVfbmFtZV9xdW90ZWQocC0+cGF0aCwgc3Rkb3V0LAorCQkJCQkJICBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uKTsKKwkJfQorCXdyaXRlX25hbWVfcXVvdGVkKHAtPnBhdGgsIHN0ZG91dCwgbGluZV90ZXJtaW5hdGlvbik7Cit9CisKKy8qCisgKiBUaGUgcmVzdWx0IChwLT5lbGVtKSBpcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZWlyCisgKiBwYXJlbnRzIGFyZSB0eXBpY2FsbHkgZnJvbSBtdWx0aXBsZSBzdGFnZXMgZHVyaW5nIGEgbWVyZ2UKKyAqIChpLmUuIGRpZmYtZmlsZXMpIG9yIHRoZSBzdGF0ZSBpbiBIRUFEIGFuZCBpbiB0aGUgaW5kZXgKKyAqIChpLmUuIGRpZmYtaW5kZXgpLgorICovCit2b2lkIHNob3dfY29tYmluZWRfZGlmZihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnAsCisJCSAgICAgICBpbnQgbnVtX3BhcmVudCwKKwkJICAgICAgIGludCBkZW5zZSwKKwkJICAgICAgIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCA9ICZyZXYtPmRpZmZvcHQ7CisKKwlpZiAob3B0LT5vdXRwdXRfZm9ybWF0ICYgKERJRkZfRk9STUFUX1JBVyB8CisJCQkJICBESUZGX0ZPUk1BVF9OQU1FIHwKKwkJCQkgIERJRkZfRk9STUFUX05BTUVfU1RBVFVTKSkKKwkJc2hvd19yYXdfZGlmZihwLCBudW1fcGFyZW50LCByZXYpOworCWVsc2UgaWYgKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX1BBVENIKQorCQlzaG93X3BhdGNoX2RpZmYocCwgbnVtX3BhcmVudCwgZGVuc2UsIDEsIHJldik7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfY29tYmluZWRfcGFpcihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcikKK3sKKwlmcmVlKHBhaXItPnR3byk7CisJZnJlZShwYWlyKTsKK30KKworLyoKKyAqIEEgY29tYmluZV9kaWZmX3BhdGggZXhwcmVzc2VzIE4gcGFyZW50cyBvbiB0aGUgTEhTIGFnYWluc3QgMSBtZXJnZQorICogcmVzdWx0LiBTeW50aGVzaXplIGEgZGlmZl9maWxlcGFpciB0aGF0IGhhcyBOIGVudHJpZXMgb24gdGhlICJvbmUiCisgKiBzaWRlIGFuZCAxIGVudHJ5IG9uIHRoZSAidHdvIiBzaWRlLgorICoKKyAqIEluIHRoZSBmdXR1cmUsIHdlIG1pZ2h0IHdhbnQgdG8gYWRkIG1vcmUgZGF0YSB0byBjb21iaW5lX2RpZmZfcGF0aAorICogc28gdGhhdCB3ZSBjYW4gZmlsbCBmaWVsZHMgd2UgYXJlIGlnbm9yaW5nIChtb3N0IG5vdGFibHksIHNpemUpIGhlcmUsCisgKiBidXQgY3VycmVudGx5IG5vYm9keSB1c2VzIGl0LCBzbyB0aGlzIHNob3VsZCBzdWZmaWNlIGZvciBub3cuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqY29tYmluZWRfcGFpcihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnAsCisJCQkJCSAgIGludCBudW1fcGFyZW50KQoreworCWludCBpOworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpwb29sOworCisJcGFpciA9IHhtYWxsb2Moc2l6ZW9mKCpwYWlyKSk7CisJcG9vbCA9IHhjYWxsb2Moc3RfYWRkKG51bV9wYXJlbnQsIDEpLCBzaXplb2Yoc3RydWN0IGRpZmZfZmlsZXNwZWMpKTsKKwlwYWlyLT5vbmUgPSBwb29sICsgMTsKKwlwYWlyLT50d28gPSBwb29sOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykgeworCQlwYWlyLT5vbmVbaV0ucGF0aCA9IHAtPnBhdGg7CisJCXBhaXItPm9uZVtpXS5tb2RlID0gcC0+cGFyZW50W2ldLm1vZGU7CisJCW9pZGNweSgmcGFpci0+b25lW2ldLm9pZCwgJnAtPnBhcmVudFtpXS5vaWQpOworCQlwYWlyLT5vbmVbaV0ub2lkX3ZhbGlkID0gIWlzX251bGxfb2lkKCZwLT5wYXJlbnRbaV0ub2lkKTsKKwkJcGFpci0+b25lW2ldLmhhc19tb3JlX2VudHJpZXMgPSAxOworCX0KKwlwYWlyLT5vbmVbbnVtX3BhcmVudCAtIDFdLmhhc19tb3JlX2VudHJpZXMgPSAwOworCisJcGFpci0+dHdvLT5wYXRoID0gcC0+cGF0aDsKKwlwYWlyLT50d28tPm1vZGUgPSBwLT5tb2RlOworCW9pZGNweSgmcGFpci0+dHdvLT5vaWQsICZwLT5vaWQpOworCXBhaXItPnR3by0+b2lkX3ZhbGlkID0gIWlzX251bGxfb2lkKCZwLT5vaWQpOworCXJldHVybiBwYWlyOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfY29tYmluZWRfY2FsbGJhY2soc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LAorCQkJCSAgICAgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwYXRocywKKwkJCQkgICAgIGludCBudW1fcGFyZW50LAorCQkJCSAgICAgaW50IG51bV9wYXRocykKK3sKKwlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnA7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IHE7CisJaW50IGk7CisKKwlxLnF1ZXVlID0geGNhbGxvYyhudW1fcGF0aHMsIHNpemVvZihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKSk7CisJcS5hbGxvYyA9IG51bV9wYXRoczsKKwlxLm5yID0gbnVtX3BhdGhzOworCWZvciAoaSA9IDAsIHAgPSBwYXRoczsgcDsgcCA9IHAtPm5leHQpCisJCXEucXVldWVbaSsrXSA9IGNvbWJpbmVkX3BhaXIocCwgbnVtX3BhcmVudCk7CisJb3B0LT5mb3JtYXRfY2FsbGJhY2soJnEsIG9wdCwgb3B0LT5mb3JtYXRfY2FsbGJhY2tfZGF0YSk7CisJZm9yIChpID0gMDsgaSA8IG51bV9wYXRoczsgaSsrKQorCQlmcmVlX2NvbWJpbmVkX3BhaXIocS5xdWV1ZVtpXSk7CisJZnJlZShxLnF1ZXVlKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfcGF0aCh2b2lkICpvYmopCit7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwYXRoID0gKHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqKW9iajsKKworCXJldHVybiBwYXRoLT5wYXRoOworfQorCisvKgorICogRGlmZiBzdGF0IGZvcm1hdHMgd2hpY2ggd2UgYWx3YXlzIGNvbXB1dGUgc29sZWx5IGFnYWluc3QgdGhlIGZpcnN0IHBhcmVudC4KKyAqLworI2RlZmluZSBTVEFUX0ZPUk1BVF9NQVNLIChESUZGX0ZPUk1BVF9OVU1TVEFUIFwKKwkJCSAgfCBESUZGX0ZPUk1BVF9TSE9SVFNUQVQgXAorCQkJICB8IERJRkZfRk9STUFUX1NVTU1BUlkgXAorCQkJICB8IERJRkZfRk9STUFUX0RJUlNUQVQgXAorCQkJICB8IERJRkZfRk9STUFUX0RJRkZTVEFUKQorCisvKiBmaW5kIHNldCBvZiBwYXRocyB0aGF0IGV2ZXJ5IHBhcmVudCB0b3VjaGVzICovCitzdGF0aWMgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpmaW5kX3BhdGhzX2dlbmVyaWMoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCWNvbnN0IHN0cnVjdCBvaWRfYXJyYXkgKnBhcmVudHMsCisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LAorCWludCBjb21iaW5lZF9hbGxfcGF0aHMpCit7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwYXRocyA9IE5VTEw7CisJaW50IGksIG51bV9wYXJlbnQgPSBwYXJlbnRzLT5ucjsKKworCWludCBvdXRwdXRfZm9ybWF0ID0gb3B0LT5vdXRwdXRfZm9ybWF0OworCWNvbnN0IGNoYXIgKm9yZGVyZmlsZSA9IG9wdC0+b3JkZXJmaWxlOworCisJb3B0LT5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCS8qIHRlbGwgZGlmZl90cmVlIHRvIGVtaXQgcGF0aHMgaW4gc29ydGVkICg9dHJlZSkgb3JkZXIgKi8KKwlvcHQtPm9yZGVyZmlsZSA9IE5VTEw7CisKKwkvKiBEKEEsUDEuLi5QbikgPSBEKEEsUDEpIF4gLi4uIF4gRChBLFBuKSAgKHdydCBwYXRocykgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKSB7CisJCS8qCisJCSAqIHNob3cgc3RhdCBhZ2FpbnN0IHRoZSBmaXJzdCBwYXJlbnQgZXZlbiB3aGVuIGRvaW5nCisJCSAqIGNvbWJpbmVkIGRpZmYuCisJCSAqLworCQlpbnQgc3RhdF9vcHQgPSBvdXRwdXRfZm9ybWF0ICYgU1RBVF9GT1JNQVRfTUFTSzsKKwkJaWYgKGkgPT0gMCAmJiBzdGF0X29wdCkKKwkJCW9wdC0+b3V0cHV0X2Zvcm1hdCA9IHN0YXRfb3B0OworCQllbHNlCisJCQlvcHQtPm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisJCWRpZmZfdHJlZV9vaWQoJnBhcmVudHMtPm9pZFtpXSwgb2lkLCAiIiwgb3B0KTsKKwkJZGlmZmNvcmVfc3RkKG9wdCk7CisJCXBhdGhzID0gaW50ZXJzZWN0X3BhdGhzKHBhdGhzLCBpLCBudW1fcGFyZW50LAorCQkJCQljb21iaW5lZF9hbGxfcGF0aHMpOworCisJCS8qIGlmIHNob3dpbmcgZGlmZiwgc2hvdyBpdCBpbiByZXF1ZXN0ZWQgb3JkZXIgKi8KKwkJaWYgKG9wdC0+b3V0cHV0X2Zvcm1hdCAhPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQgJiYKKwkJICAgIG9yZGVyZmlsZSkgeworCQkJZGlmZmNvcmVfb3JkZXIob3JkZXJmaWxlKTsKKwkJfQorCisJCWRpZmZfZmx1c2gob3B0KTsKKwl9CisKKwlvcHQtPm91dHB1dF9mb3JtYXQgPSBvdXRwdXRfZm9ybWF0OworCW9wdC0+b3JkZXJmaWxlID0gb3JkZXJmaWxlOworCXJldHVybiBwYXRoczsKK30KKworCisvKgorICogZmluZCBzZXQgb2YgcGF0aHMgdGhhdCBldmVyeWJvZHkgdG91Y2hlcywgYXNzdW1pbmcgZGlmZiBpcyBydW4gd2l0aG91dAorICogcmVuYW1lL2NvcHkgZGV0ZWN0aW9uLCBldGMsIGNvbXBhcmluZyBhbGwgdHJlZXMgc2ltdWx0YW5lb3VzbHkgKD0gZmFzdGVyKS4KKyAqLworc3RhdGljIHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqZmluZF9wYXRoc19tdWx0aXRyZWUoCisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBzdHJ1Y3Qgb2lkX2FycmF5ICpwYXJlbnRzLAorCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlpbnQgaSwgbnBhcmVudCA9IHBhcmVudHMtPm5yOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKipwYXJlbnRzX29pZDsKKwlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggcGF0aHNfaGVhZDsKKwlzdHJ1Y3Qgc3RyYnVmIGJhc2U7CisKKwlBTExPQ19BUlJBWShwYXJlbnRzX29pZCwgbnBhcmVudCk7CisJZm9yIChpID0gMDsgaSA8IG5wYXJlbnQ7IGkrKykKKwkJcGFyZW50c19vaWRbaV0gPSAmcGFyZW50cy0+b2lkW2ldOworCisJLyogZmFrZSBsaXN0IGhlYWQsIHNvIHdvcmtlciBjYW4gYXNzdW1lIGl0IGlzIG5vbi1OVUxMICovCisJcGF0aHNfaGVhZC5uZXh0ID0gTlVMTDsKKworCXN0cmJ1Zl9pbml0KCZiYXNlLCBQQVRIX01BWCk7CisJZGlmZl90cmVlX3BhdGhzKCZwYXRoc19oZWFkLCBvaWQsIHBhcmVudHNfb2lkLCBucGFyZW50LCAmYmFzZSwgb3B0KTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZiYXNlKTsKKwlmcmVlKHBhcmVudHNfb2lkKTsKKwlyZXR1cm4gcGF0aHNfaGVhZC5uZXh0OworfQorCisKK3ZvaWQgZGlmZl90cmVlX2NvbWJpbmVkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCWNvbnN0IHN0cnVjdCBvaWRfYXJyYXkgKnBhcmVudHMsCisJCQlpbnQgZGVuc2UsCisJCQlzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQgPSAmcmV2LT5kaWZmb3B0OworCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZm9wdHM7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLCAqcGF0aHM7CisJaW50IGksIG51bV9wYXRocywgbmVlZHNlcCwgc2hvd19sb2dfZmlyc3QsIG51bV9wYXJlbnQgPSBwYXJlbnRzLT5ucjsKKwlpbnQgbmVlZF9nZW5lcmljX3BhdGhzY2FuOworCisJLyogbm90aGluZyB0byBkbywgaWYgbm8gcGFyZW50cyAqLworCWlmICghbnVtX3BhcmVudCkKKwkJcmV0dXJuOworCisJc2hvd19sb2dfZmlyc3QgPSAhIXJldi0+bG9naW5mbyAmJiAhcmV2LT5ub19jb21taXRfaWQ7CisJbmVlZHNlcCA9IDA7CisJaWYgKHNob3dfbG9nX2ZpcnN0KSB7CisJCXNob3dfbG9nKHJldik7CisKKwkJaWYgKHJldi0+dmVyYm9zZV9oZWFkZXIgJiYgb3B0LT5vdXRwdXRfZm9ybWF0ICYmCisJCSAgICBvcHQtPm91dHB1dF9mb3JtYXQgIT0gRElGRl9GT1JNQVRfTk9fT1VUUFVUICYmCisJCSAgICAhY29tbWl0X2Zvcm1hdF9pc19lbXB0eShyZXYtPmNvbW1pdF9mb3JtYXQpKQorCQkJcHJpbnRmKCIlcyVjIiwgZGlmZl9saW5lX3ByZWZpeChvcHQpLAorCQkJICAgICAgIG9wdC0+bGluZV90ZXJtaW5hdGlvbik7CisJfQorCisJZGlmZm9wdHMgPSAqb3B0OworCWNvcHlfcGF0aHNwZWMoJmRpZmZvcHRzLnBhdGhzcGVjLCAmb3B0LT5wYXRoc3BlYyk7CisJZGlmZm9wdHMuZmxhZ3MucmVjdXJzaXZlID0gMTsKKwlkaWZmb3B0cy5mbGFncy5hbGxvd19leHRlcm5hbCA9IDA7CisKKwkvKiBmaW5kIHNldCBvZiBwYXRocyB0aGF0IGV2ZXJ5Ym9keSB0b3VjaGVzCisJICoKKwkgKiBOT1RFCisJICoKKwkgKiBEaWZmY29yZSB0cmFuc2Zvcm1hdGlvbnMgYXJlIGJvdW5kIHRvIGRpZmZfZmlsZXNwZWMgYW5kIGxvZ2ljCisJICogY29tcGFyaW5nIHR3byBlbnRyaWVzIC0gaS5lLiB0aGV5IGRvIG5vdCBhcHBseSBkaXJlY3RseSB0byBjb21iaW5lCisJICogZGlmZi4KKwkgKgorCSAqIElmIHNvbWUgb2Ygc3VjaCB0cmFuc2Zvcm1hdGlvbnMgaXMgcmVxdWVzdGVkIC0gd2UgbGF1bmNoIGdlbmVyaWMKKwkgKiBwYXRoIHNjYW5uaW5nLCB3aGljaCB3b3JrcyBzaWduaWZpY2FudGx5IHNsb3dlciBjb21wYXJlZCB0bworCSAqIHNpbXVsdGFuZW91cyBhbGwtdHJlZXMtaW4tb25lLWdvIHNjYW4gaW4gZmluZF9wYXRoc19tdWx0aXRyZWUoKS4KKwkgKgorCSAqIFRPRE8gc29tZSBvZiB0aGUgZmlsdGVycyBjb3VsZCBiZSBwb3J0ZWQgdG8gd29yayBvbgorCSAqIGNvbWJpbmVfZGlmZl9wYXRocyAtIGkuZS4gYWxsIGZ1bmN0aW9uYWxpdHkgdGhhdCBza2lwcyBwYXRocywgc28gaW4KKwkgKiB0aGVvcnksIHdlIGNvdWxkIGVuZCB1cCBoYXZpbmcgb25seSBtdWx0aXRyZWUgcGF0aCBzY2FubmluZy4KKwkgKgorCSAqIE5PVEUgcGxlYXNlIGtlZXAgdGhpcyBzZW1hbnRpY2FsbHkgaW4gc3luYyB3aXRoIGRpZmZjb3JlX3N0ZCgpCisJICovCisJbmVlZF9nZW5lcmljX3BhdGhzY2FuID0gb3B0LT5za2lwX3N0YXRfdW5tYXRjaAl8fAorCQkJb3B0LT5mbGFncy5mb2xsb3dfcmVuYW1lcwl8fAorCQkJb3B0LT5icmVha19vcHQgIT0gLTEJfHwKKwkJCW9wdC0+ZGV0ZWN0X3JlbmFtZQl8fAorCQkJKG9wdC0+cGlja2F4ZV9vcHRzICYgRElGRl9QSUNLQVhFX0tJTkRTX01BU0spCXx8CisJCQlvcHQtPmZpbHRlcjsKKworCisJaWYgKG5lZWRfZ2VuZXJpY19wYXRoc2NhbikgeworCQkvKgorCQkgKiBOT1RFIGdlbmVyaWMgY2FzZSBhbHNvIGhhbmRsZXMgLS1zdGF0LCBhcyBpdCBjb21wdXRlcworCQkgKiBkaWZmKHNoYTEscGFyZW50X2kpIGZvciBhbGwgaSB0byBkbyB0aGUgam9iLCBzcGVjaWZpY2FsbHkKKwkJICogZm9yIHBhcmVudDAuCisJCSAqLworCQlwYXRocyA9IGZpbmRfcGF0aHNfZ2VuZXJpYyhvaWQsIHBhcmVudHMsICZkaWZmb3B0cywKKwkJCQkJICAgcmV2LT5jb21iaW5lZF9hbGxfcGF0aHMpOworCX0KKwllbHNlIHsKKwkJaW50IHN0YXRfb3B0OworCQlwYXRocyA9IGZpbmRfcGF0aHNfbXVsdGl0cmVlKG9pZCwgcGFyZW50cywgJmRpZmZvcHRzKTsKKworCQkvKgorCQkgKiBzaG93IHN0YXQgYWdhaW5zdCB0aGUgZmlyc3QgcGFyZW50IGV2ZW4KKwkJICogd2hlbiBkb2luZyBjb21iaW5lZCBkaWZmLgorCQkgKi8KKwkJc3RhdF9vcHQgPSBvcHQtPm91dHB1dF9mb3JtYXQgJiBTVEFUX0ZPUk1BVF9NQVNLOworCQlpZiAoc3RhdF9vcHQpIHsKKwkJCWRpZmZvcHRzLm91dHB1dF9mb3JtYXQgPSBzdGF0X29wdDsKKworCQkJZGlmZl90cmVlX29pZCgmcGFyZW50cy0+b2lkWzBdLCBvaWQsICIiLCAmZGlmZm9wdHMpOworCQkJZGlmZmNvcmVfc3RkKCZkaWZmb3B0cyk7CisJCQlpZiAob3B0LT5vcmRlcmZpbGUpCisJCQkJZGlmZmNvcmVfb3JkZXIob3B0LT5vcmRlcmZpbGUpOworCQkJZGlmZl9mbHVzaCgmZGlmZm9wdHMpOworCQl9CisJfQorCisJLyogZmluZCBvdXQgbnVtYmVyIG9mIHN1cnZpdmluZyBwYXRocyAqLworCWZvciAobnVtX3BhdGhzID0gMCwgcCA9IHBhdGhzOyBwOyBwID0gcC0+bmV4dCkKKwkJbnVtX3BhdGhzKys7CisKKwkvKiBvcmRlciBwYXRocyBhY2NvcmRpbmcgdG8gZGlmZmNvcmVfb3JkZXIgKi8KKwlpZiAob3B0LT5vcmRlcmZpbGUgJiYgbnVtX3BhdGhzKSB7CisJCXN0cnVjdCBvYmpfb3JkZXIgKm87CisKKwkJQUxMT0NfQVJSQVkobywgbnVtX3BhdGhzKTsKKwkJZm9yIChpID0gMCwgcCA9IHBhdGhzOyBwOyBwID0gcC0+bmV4dCwgaSsrKQorCQkJb1tpXS5vYmogPSBwOworCQlvcmRlcl9vYmplY3RzKG9wdC0+b3JkZXJmaWxlLCBwYXRoX3BhdGgsIG8sIG51bV9wYXRocyk7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fcGF0aHMgLSAxOyBpKyspIHsKKwkJCXAgPSBvW2ldLm9iajsKKwkJCXAtPm5leHQgPSBvW2krMV0ub2JqOworCQl9CisKKwkJcCA9IG9bbnVtX3BhdGhzLTFdLm9iajsKKwkJcC0+bmV4dCA9IE5VTEw7CisJCXBhdGhzID0gb1swXS5vYmo7CisJCWZyZWUobyk7CisJfQorCisKKwlpZiAobnVtX3BhdGhzKSB7CisJCWlmIChvcHQtPm91dHB1dF9mb3JtYXQgJiAoRElGRl9GT1JNQVRfUkFXIHwKKwkJCQkJICBESUZGX0ZPUk1BVF9OQU1FIHwKKwkJCQkJICBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUykpIHsKKwkJCWZvciAocCA9IHBhdGhzOyBwOyBwID0gcC0+bmV4dCkKKwkJCQlzaG93X3Jhd19kaWZmKHAsIG51bV9wYXJlbnQsIHJldik7CisJCQluZWVkc2VwID0gMTsKKwkJfQorCQllbHNlIGlmIChvcHQtPm91dHB1dF9mb3JtYXQgJiBTVEFUX0ZPUk1BVF9NQVNLKQorCQkJbmVlZHNlcCA9IDE7CisJCWVsc2UgaWYgKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NBTExCQUNLKQorCQkJaGFuZGxlX2NvbWJpbmVkX2NhbGxiYWNrKG9wdCwgcGF0aHMsIG51bV9wYXJlbnQsIG51bV9wYXRocyk7CisKKwkJaWYgKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX1BBVENIKSB7CisJCQlpZiAobmVlZHNlcCkKKwkJCQlwcmludGYoIiVzJWMiLCBkaWZmX2xpbmVfcHJlZml4KG9wdCksCisJCQkJICAgICAgIG9wdC0+bGluZV90ZXJtaW5hdGlvbik7CisJCQlmb3IgKHAgPSBwYXRoczsgcDsgcCA9IHAtPm5leHQpCisJCQkJc2hvd19wYXRjaF9kaWZmKHAsIG51bV9wYXJlbnQsIGRlbnNlLAorCQkJCQkJMCwgcmV2KTsKKwkJfQorCX0KKworCS8qIENsZWFuIHRoaW5ncyB1cCAqLworCXdoaWxlIChwYXRocykgeworCQlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnRtcCA9IHBhdGhzOworCQlwYXRocyA9IHBhdGhzLT5uZXh0OworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKQorCQkJaWYgKHJldi0+Y29tYmluZWRfYWxsX3BhdGhzICYmCisJCQkgICAgZmlsZW5hbWVfY2hhbmdlZCh0bXAtPnBhcmVudFtpXS5zdGF0dXMpKQorCQkJCXN0cmJ1Zl9yZWxlYXNlKCZ0bXAtPnBhcmVudFtpXS5wYXRoKTsKKwkJZnJlZSh0bXApOworCX0KKworCWNsZWFyX3BhdGhzcGVjKCZkaWZmb3B0cy5wYXRoc3BlYyk7Cit9CisKK3ZvaWQgZGlmZl90cmVlX2NvbWJpbmVkX21lcmdlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IGRlbnNlLAorCQkJICAgICAgc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQgPSBnZXRfc2F2ZWRfcGFyZW50cyhyZXYsIGNvbW1pdCk7CisJc3RydWN0IG9pZF9hcnJheSBwYXJlbnRzID0gT0lEX0FSUkFZX0lOSVQ7CisKKwl3aGlsZSAocGFyZW50KSB7CisJCW9pZF9hcnJheV9hcHBlbmQoJnBhcmVudHMsICZwYXJlbnQtPml0ZW0tPm9iamVjdC5vaWQpOworCQlwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CisJfQorCWRpZmZfdHJlZV9jb21iaW5lZCgmY29tbWl0LT5vYmplY3Qub2lkLCAmcGFyZW50cywgZGVuc2UsIHJldik7CisJb2lkX2FycmF5X2NsZWFyKCZwYXJlbnRzKTsKK30KZGlmZiAtLWdpdCBhL2NvbW1hbmQtbGlzdC50eHQgYi9jb21tYW5kLWxpc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NWU1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tYW5kLWxpc3QudHh0CkBAIC0wLDAgKzEsMjExIEBACisjIENvbW1hbmQgY2xhc3NpZmljYXRpb24gbGlzdAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWxsIHN1cHBvcnRlZCBjb21tYW5kcywgYnVpbHRpbiBvciBleHRlcm5hbCwgbXVzdCBiZSBkZXNjcmliZWQgaW4KKyMgaGVyZS4gVGhpcyBpbmZvIGlzIHVzZWQgdG8gbGlzdCBjb21tYW5kcyBpbiB2YXJpb3VzIHBsYWNlcy4gRWFjaAorIyBjb21tYW5kIGlzIG9uIG9uZSBsaW5lIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGF0dHJpYnV0ZXMuCisjCisjIFRoZSBmaXJzdCBhdHRyaWJ1dGUgZ3JvdXAgaXMgbWFuZGF0b3J5IGFuZCBpbmRpY2F0ZXMgdGhlIGNvbW1hbmQKKyMgdHlwZS4gVGhpcyBncm91cCBpbmNsdWRlczoKKyMKKyMgICBtYWlucG9yY2VsYWluCisjICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCisjICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworIyAgIGZvcmVpZ25zY21pbnRlcmZhY2UKKyMgICBwbHVtYmluZ21hbmlwdWxhdG9ycworIyAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworIyAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCisjICAgc3luY2hlbHBlcnMKKyMgICBwdXJlaGVscGVycworIworIyBUaGUgdHlwZSBuYW1lcyBhcmUgc2VsZiBleHBsYW5hdG9yeS4gQnV0IGlmIHlvdSB3YW50IHRvIHNlZSB3aGF0CisjIGNvbW1hbmQgYmVsb25ncyB0byB3aGF0IGdyb3VwIHRvIGdldCBhIGJldHRlciBwaWN0dXJlLCBoYXZlIGEgbG9vaworIyBhdCAiZ2l0IiBtYW4gcGFnZSwgIkdJVCBDT01NQU5EUyIgc2VjdGlvbi4KKyMKKyMgQ29tbWFuZHMgb2YgdHlwZSBtYWlucG9yY2VsYWluIGNhbiBhbHNvIG9wdGlvbmFsbHkgaGF2ZSBvbmUgb2YgdGhlc2UKKyMgYXR0cmlidXRlczoKKyMKKyMgICBpbml0CisjICAgd29ya3RyZWUKKyMgICBpbmZvCisjICAgaGlzdG9yeQorIyAgIHJlbW90ZQorIworIyBUaGVzZSBjb21tYW5kcyBhcmUgY29uc2lkZXJlZCAiY29tbW9uIiBhbmQgd2lsbCBzaG93IHVwIGluICJnaXQKKyMgaGVscCIgb3V0cHV0IGluIGdyb3Vwcy4gVW5jb21tb24gcG9yY2VsYWluIGNvbW1hbmRzIG11c3Qgbm90CisjIHNwZWNpZnkgYW55IG9mIHRoZXNlIGF0dHJpYnV0ZXMuCisjCisjICJjb21wbGV0ZSIgYXR0cmlidXRlIGlzIHVzZWQgdG8gbWFyayB0aGF0IHRoZSBjb21tYW5kIHNob3VsZCBiZQorIyBjb21wbGV0YWJsZSBieSBnaXQtY29tcGxldGlvbi5iYXNoLiBOb3RlIHRoYXQgYnkgZGVmYXVsdCwKKyMgbWFpbnBvcmNlbGFpbiBjb21tYW5kcyBhcmUgY29tcGxldGFibGUgc28geW91IGRvbid0IG5lZWQgdGhpcworIyBhdHRyaWJ1dGUuCisjCisjIEFzIHBhcnQgb2YgdGhlIEdpdCBtYW4gcGFnZSBsaXN0LCB0aGUgbWFuKDUvNykgZ3VpZGVzIGFyZSBhbHNvCisjIHNwZWNpZmllZCBoZXJlLCB3aGljaCBjYW4gb25seSBoYXZlICJndWlkZSIgYXR0cmlidXRlIGFuZCBub3RoaW5nCisjIGVsc2UuCisjCisjIyMgY29tbWFuZCBsaXN0IChkbyBub3QgY2hhbmdlIHRoaXMgbGluZSwgYWxzbyBkbyBub3QgY2hhbmdlIGFsaWdubWVudCkKKyMgY29tbWFuZCBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSBbY2F0ZWdvcnldIFtjYXRlZ29yeV0KK2dpdC1hZGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICB3b3JrdHJlZQorZ2l0LWFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1hbm5vdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtYXBwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMgICAgICAgICAgICBjb21wbGV0ZQorZ2l0LWFyY2hpbXBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKK2dpdC1hcmNoaXZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtYmlzZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaW5mbworZ2l0LWJsYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMgICAgICAgICAgY29tcGxldGUKK2dpdC1icmFuY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICBoaXN0b3J5CitnaXQtYnVncmVwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LWJ1bmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1jYXQtZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1jaGVjay1hdHRyICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LWNoZWNrLWlnbm9yZSAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtY2hlY2stbWFpbG1hcCAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1jaGVja291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtY2hlY2tvdXQtaW5kZXggICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1jaGVjay1yZWYtZm9ybWF0ICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LWNoZXJyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycyAgICAgICAgICBjb21wbGV0ZQorZ2l0LWNoZXJyeS1waWNrICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1jaXRvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtY2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWNsb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGluaXQKK2dpdC1jb2x1bW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LWNvbW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGhpc3RvcnkKK2dpdC1jb21taXQtZ3JhcGggICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LWNvbW1pdC10cmVlICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzICAgICAgICAgICBjb21wbGV0ZQorZ2l0LWNvdW50LW9iamVjdHMgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC1jcmVkZW50aWFsICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LWNyZWRlbnRpYWwtY2FjaGUgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtY3JlZGVudGlhbC1zdG9yZSAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1jdnNleHBvcnRjb21taXQgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtY3ZzaW1wb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbnNjbWludGVyZmFjZQorZ2l0LWN2c3NlcnZlciAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKK2dpdC1kYWVtb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGluZ3JlcG9zaXRvcmllcworZ2l0LWRlc2NyaWJlICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1kaWZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICBpbmZvCitnaXQtZGlmZi1maWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtZGlmZi1pbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtZGlmZi10cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtZGlmZnRvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycyAgICAgICAgICBjb21wbGV0ZQorZ2l0LWZhc3QtZXhwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeW1hbmlwdWxhdG9ycworZ2l0LWZhc3QtaW1wb3J0ICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeW1hbmlwdWxhdG9ycworZ2l0LWZldGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIHJlbW90ZQorZ2l0LWZldGNoLXBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCitnaXQtZmlsdGVyLWJyYW5jaCAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtZm10LW1lcmdlLW1zZyAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1mb3ItZWFjaC1yZWYgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1mb3JtYXQtcGF0Y2ggICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtZnNjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycyAgICAgICAgICBjb21wbGV0ZQorZ2l0LWdjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1nZXQtdGFyLWNvbW1pdC1pZCAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1ncmVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICBpbmZvCitnaXQtZ3VpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWhhc2gtb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtaGVscCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycyAgICAgICAgICBjb21wbGV0ZQorZ2l0LWh0dHAtYmFja2VuZCAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCitnaXQtaHR0cC1mZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hlbHBlcnMKK2dpdC1odHRwLXB1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGVscGVycworZ2l0LWltYXAtc2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKK2dpdC1pbmRleC1wYWNrICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LWluaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGluaXQKK2dpdC1pbnN0YXdlYiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzICAgICAgICAgIGNvbXBsZXRlCitnaXQtaW50ZXJwcmV0LXRyYWlsZXJzICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaW5mbworZ2l0LWxzLWZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LWxzLXJlbW90ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LWxzLXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LW1haWxpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtbWFpbHNwbGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1tZXJnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICBoaXN0b3J5CitnaXQtbWVyZ2UtYmFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtbWVyZ2UtZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1tZXJnZS1pbmRleCAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LW1lcmdlLW9uZS1maWxlICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtbWVyZ2V0b29sICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzICAgICAgICAgICBjb21wbGV0ZQorZ2l0LW1lcmdlLXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC1tdWx0aS1wYWNrLWluZGV4ICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LW1rdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtbWt0cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1tdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICB3b3JrdHJlZQorZ2l0LW5hbWUtcmV2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LW5vdGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1wNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtcGFjay1vYmplY3RzICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1wYWNrLXJlZHVuZGFudCAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1wYWNrLXJlZnMgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1wYXJzZS1yZW1vdGUgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGVscGVycworZ2l0LXBhdGNoLWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtcHJ1bmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtcHJ1bmUtcGFja2VkICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1wdWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICByZW1vdGUKK2dpdC1wdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICByZW1vdGUKK2dpdC1xdWlsdGltcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtcmFuZ2UtZGlmZiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LXJlYWQtdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtcmViYXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaGlzdG9yeQorZ2l0LXJlY2VpdmUtcGFjayAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoZWxwZXJzCitnaXQtcmVmbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzICAgICAgICAgICBjb21wbGV0ZQorZ2l0LXJlbW90ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeW1hbmlwdWxhdG9ycyAgICAgICAgICAgY29tcGxldGUKK2dpdC1yZXBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMgICAgICAgICAgIGNvbXBsZXRlCitnaXQtcmVwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzICAgICAgICAgICBjb21wbGV0ZQorZ2l0LXJlcXVlc3QtcHVsbCAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UgICAgICAgICAgICAgY29tcGxldGUKK2dpdC1yZXJlcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtcmVzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaGlzdG9yeQorZ2l0LXJlc3RvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIHdvcmt0cmVlCitnaXQtcmV2ZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LXJldi1saXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXJldi1wYXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIHdvcmt0cmVlCitnaXQtc2VuZC1lbWFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbnNjbWludGVyZmFjZSAgICAgICAgICAgICBjb21wbGV0ZQorZ2l0LXNlbmQtcGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCitnaXQtc2hlbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hlbHBlcnMKK2dpdC1zaG9ydGxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtc2hvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaW5mbworZ2l0LXNob3ctYnJhbmNoICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMgICAgICAgICAgY29tcGxldGUKK2dpdC1zaG93LWluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1zaG93LXJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1zaC1pMThuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LXNoLXNldHVwICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtc3BhcnNlLWNoZWNrb3V0ICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgd29ya3RyZWUKK2dpdC1zdGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtc3RhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZQorZ2l0LXN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGluZm8KK2dpdC1zdHJpcHNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LXN1Ym1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1zdm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtc3dpdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaGlzdG9yeQorZ2l0LXN5bWJvbGljLXJlZiAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaGlzdG9yeQorZ2l0LXVucGFjay1maWxlICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXVucGFjay1vYmplY3RzICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtdXBkYXRlLWluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC11cGRhdGUtcmVmICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyAgICAgICAgICAgICAgICAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCitnaXQtdXBsb2FkLWFyY2hpdmUgICAgICAgICAgICAgICAgICAgICAgc3luY2hlbHBlcnMKK2dpdC11cGxvYWQtcGFjayAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGVscGVycworZ2l0LXZhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXZlcmlmeS1jb21taXQgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC12ZXJpZnktcGFjayAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC12ZXJpZnktdGFnICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXR3ZWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LXdoYXRjaGFuZ2VkICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMgICAgICAgICAgY29tcGxldGUKK2dpdC13b3JrdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtd3JpdGUtdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdGF0dHJpYnV0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQorZ2l0Y2xpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCitnaXRjb3JlLXR1dG9yaWFsICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUKK2dpdGN2cy1taWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICBndWlkZQorZ2l0ZGlmZmNvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCitnaXRldmVyeWRheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUKK2dpdGdsb3NzYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQorZ2l0aG9va3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCitnaXRpZ25vcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUKK2dpdG1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQorZ2l0bmFtZXNwYWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCitnaXRyZXBvc2l0b3J5LWxheW91dCAgICAgICAgICAgICAgICAgICAgZ3VpZGUKK2dpdHJldmlzaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQorZ2l0c3VibW9kdWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCitnaXR0dXRvcmlhbC0yICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUKK2dpdHR1dG9yaWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQorZ2l0d29ya2Zsb3dzICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCmRpZmYgLS1naXQgYS9jb21taXQtZ3JhcGguYyBiL2NvbW1pdC1ncmFwaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDIwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21taXQtZ3JhcGguYwpAQCAtMCwwICsxLDIzNTkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJhbGxvYy5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJyZXBsYWNlLW9iamVjdC5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAiYmxvb20uaCIKKyNpbmNsdWRlICJjb21taXQtc2xhYi5oIgorI2luY2x1ZGUgInNoYWxsb3cuaCIKKwordm9pZCBnaXRfdGVzdF93cml0ZV9jb21taXRfZ3JhcGhfb3JfZGllKHZvaWQpCit7CisJaW50IGZsYWdzID0gMDsKKwlpZiAoIWdpdF9lbnZfYm9vbChHSVRfVEVTVF9DT01NSVRfR1JBUEgsIDApKQorCQlyZXR1cm47CisKKwlpZiAoZ2l0X2Vudl9ib29sKEdJVF9URVNUX0NPTU1JVF9HUkFQSF9DSEFOR0VEX1BBVEhTLCAwKSkKKwkJZmxhZ3MgPSBDT01NSVRfR1JBUEhfV1JJVEVfQkxPT01fRklMVEVSUzsKKworCWlmICh3cml0ZV9jb21taXRfZ3JhcGhfcmVhY2hhYmxlKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzLT5vZGIsCisJCQkJCSBmbGFncywgTlVMTCkpCisJCWRpZSgiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdC1ncmFwaCB1bmRlciBHSVRfVEVTVF9DT01NSVRfR1JBUEgiKTsKK30KKworI2RlZmluZSBHUkFQSF9TSUdOQVRVUkUgMHg0MzQ3NTA0OCAvKiAiQ0dQSCIgKi8KKyNkZWZpbmUgR1JBUEhfQ0hVTktJRF9PSURGQU5PVVQgMHg0ZjQ5NDQ0NiAvKiAiT0lERiIgKi8KKyNkZWZpbmUgR1JBUEhfQ0hVTktJRF9PSURMT09LVVAgMHg0ZjQ5NDQ0YyAvKiAiT0lETCIgKi8KKyNkZWZpbmUgR1JBUEhfQ0hVTktJRF9EQVRBIDB4NDM0NDQxNTQgLyogIkNEQVQiICovCisjZGVmaW5lIEdSQVBIX0NIVU5LSURfRVhUUkFFREdFUyAweDQ1NDQ0NzQ1IC8qICJFREdFIiAqLworI2RlZmluZSBHUkFQSF9DSFVOS0lEX0JMT09NSU5ERVhFUyAweDQyNDk0NDU4IC8qICJCSURYIiAqLworI2RlZmluZSBHUkFQSF9DSFVOS0lEX0JMT09NREFUQSAweDQyNDQ0MTU0IC8qICJCREFUIiAqLworI2RlZmluZSBHUkFQSF9DSFVOS0lEX0JBU0UgMHg0MjQxNTM0NSAvKiAiQkFTRSIgKi8KKyNkZWZpbmUgTUFYX05VTV9DSFVOS1MgNworCisjZGVmaW5lIEdSQVBIX0RBVEFfV0lEVEggKHRoZV9oYXNoX2FsZ28tPnJhd3N6ICsgMTYpCisKKyNkZWZpbmUgR1JBUEhfVkVSU0lPTl8xIDB4MQorI2RlZmluZSBHUkFQSF9WRVJTSU9OIEdSQVBIX1ZFUlNJT05fMQorCisjZGVmaW5lIEdSQVBIX0VYVFJBX0VER0VTX05FRURFRCAweDgwMDAwMDAwCisjZGVmaW5lIEdSQVBIX0VER0VfTEFTVF9NQVNLIDB4N2ZmZmZmZmYKKyNkZWZpbmUgR1JBUEhfUEFSRU5UX05PTkUgMHg3MDAwMDAwMAorCisjZGVmaW5lIEdSQVBIX0xBU1RfRURHRSAweDgwMDAwMDAwCisKKyNkZWZpbmUgR1JBUEhfSEVBREVSX1NJWkUgOAorI2RlZmluZSBHUkFQSF9GQU5PVVRfU0laRSAoNCAqIDI1NikKKyNkZWZpbmUgR1JBUEhfQ0hVTktMT09LVVBfV0lEVEggMTIKKyNkZWZpbmUgR1JBUEhfTUlOX1NJWkUgKEdSQVBIX0hFQURFUl9TSVpFICsgNCAqIEdSQVBIX0NIVU5LTE9PS1VQX1dJRFRIIFwKKwkJCSsgR1JBUEhfRkFOT1VUX1NJWkUgKyB0aGVfaGFzaF9hbGdvLT5yYXdzeikKKworLyogUmVtZW1iZXIgdG8gdXBkYXRlIG9iamVjdCBmbGFnIGFsbG9jYXRpb24gaW4gb2JqZWN0LmggKi8KKyNkZWZpbmUgUkVBQ0hBQkxFICAgICAgICgxdTw8MTUpCisKKy8qIEtlZXAgdHJhY2sgb2YgdGhlIG9yZGVyIGluIHdoaWNoIGNvbW1pdHMgYXJlIGFkZGVkIHRvIG91ciBsaXN0LiAqLworZGVmaW5lX2NvbW1pdF9zbGFiKGNvbW1pdF9wb3MsIGludCk7CitzdGF0aWMgc3RydWN0IGNvbW1pdF9wb3MgY29tbWl0X3BvcyA9IENPTU1JVF9TTEFCX0lOSVQoMSwgY29tbWl0X3Bvcyk7CisKK3N0YXRpYyB2b2lkIHNldF9jb21taXRfcG9zKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RhdGljIGludDMyX3QgbWF4X3BvczsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0KHIsIG9pZCk7CisKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgYmUgbGVuaWVudCAqLworCisJKmNvbW1pdF9wb3NfYXQoJmNvbW1pdF9wb3MsIGNvbW1pdCkgPSBtYXhfcG9zKys7Cit9CisKK3N0YXRpYyBpbnQgY29tbWl0X3Bvc19jbXAoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQoreworCWNvbnN0IHN0cnVjdCBjb21taXQgKmEgPSAqKGNvbnN0IHN0cnVjdCBjb21taXQgKiopdmE7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqYiA9ICooY29uc3Qgc3RydWN0IGNvbW1pdCAqKil2YjsKKwlyZXR1cm4gY29tbWl0X3Bvc19hdCgmY29tbWl0X3BvcywgYSkgLQorCSAgICAgICBjb21taXRfcG9zX2F0KCZjb21taXRfcG9zLCBiKTsKK30KKworc3RhdGljIGludCBjb21taXRfZ2VuX2NtcChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpCit7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqYSA9ICooY29uc3Qgc3RydWN0IGNvbW1pdCAqKil2YTsKKwljb25zdCBzdHJ1Y3QgY29tbWl0ICpiID0gKihjb25zdCBzdHJ1Y3QgY29tbWl0ICoqKXZiOworCisJLyogbG93ZXIgZ2VuZXJhdGlvbiBjb21taXRzIGZpcnN0ICovCisJaWYgKGEtPmdlbmVyYXRpb24gPCBiLT5nZW5lcmF0aW9uKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoYS0+Z2VuZXJhdGlvbiA+IGItPmdlbmVyYXRpb24pCisJCXJldHVybiAxOworCisJLyogdXNlIGRhdGUgYXMgYSBoZXVyaXN0aWMgd2hlbiBnZW5lcmF0aW9ucyBhcmUgZXF1YWwgKi8KKwlpZiAoYS0+ZGF0ZSA8IGItPmRhdGUpCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChhLT5kYXRlID4gYi0+ZGF0ZSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK2NoYXIgKmdldF9jb21taXRfZ3JhcGhfZmlsZW5hbWUoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9ial9kaXIpCit7CisJcmV0dXJuIHhzdHJmbXQoIiVzL2luZm8vY29tbWl0LWdyYXBoIiwgb2JqX2Rpci0+cGF0aCk7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfc3BsaXRfZ3JhcGhfZmlsZW5hbWUoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYiwKKwkJCQkgICAgICBjb25zdCBjaGFyICpvaWRfaGV4KQoreworCXJldHVybiB4c3RyZm10KCIlcy9pbmZvL2NvbW1pdC1ncmFwaHMvZ3JhcGgtJXMuZ3JhcGgiLCBvZGItPnBhdGgsCisJCSAgICAgICBvaWRfaGV4KTsKK30KKworc3RhdGljIGNoYXIgKmdldF9jaGFpbl9maWxlbmFtZShzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiKQoreworCXJldHVybiB4c3RyZm10KCIlcy9pbmZvL2NvbW1pdC1ncmFwaHMvY29tbWl0LWdyYXBoLWNoYWluIiwgb2RiLT5wYXRoKTsKK30KKworc3RhdGljIHVpbnQ4X3Qgb2lkX3ZlcnNpb24odm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfZ3JhcGggKmFsbG9jX2NvbW1pdF9ncmFwaCh2b2lkKQoreworCXN0cnVjdCBjb21taXRfZ3JhcGggKmcgPSB4Y2FsbG9jKDEsIHNpemVvZigqZykpOworCisJcmV0dXJuIGc7Cit9CisKK2V4dGVybiBpbnQgcmVhZF9yZXBsYWNlX3JlZnM7CisKK3N0YXRpYyBpbnQgY29tbWl0X2dyYXBoX2NvbXBhdGlibGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJaWYgKCFyLT5naXRkaXIpCisJCXJldHVybiAwOworCisJaWYgKHJlYWRfcmVwbGFjZV9yZWZzKSB7CisJCXByZXBhcmVfcmVwbGFjZV9vYmplY3Qocik7CisJCWlmIChoYXNobWFwX2dldF9zaXplKCZyLT5vYmplY3RzLT5yZXBsYWNlX21hcC0+bWFwKSkKKwkJCXJldHVybiAwOworCX0KKworCXByZXBhcmVfY29tbWl0X2dyYWZ0KHIpOworCWlmIChyLT5wYXJzZWRfb2JqZWN0cyAmJiByLT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzX25yKQorCQlyZXR1cm4gMDsKKwlpZiAoaXNfcmVwb3NpdG9yeV9zaGFsbG93KHIpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitpbnQgb3Blbl9jb21taXRfZ3JhcGgoY29uc3QgY2hhciAqZ3JhcGhfZmlsZSwgaW50ICpmZCwgc3RydWN0IHN0YXQgKnN0KQoreworCSpmZCA9IGdpdF9vcGVuKGdyYXBoX2ZpbGUpOworCWlmICgqZmQgPCAwKQorCQlyZXR1cm4gMDsKKwlpZiAoZnN0YXQoKmZkLCBzdCkpIHsKKwkJY2xvc2UoKmZkKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdHJ1Y3QgY29tbWl0X2dyYXBoICpsb2FkX2NvbW1pdF9ncmFwaF9vbmVfZmRfc3QoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc3QsCisJCQkJCQkgc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYikKK3sKKwl2b2lkICpncmFwaF9tYXA7CisJc2l6ZV90IGdyYXBoX3NpemU7CisJc3RydWN0IGNvbW1pdF9ncmFwaCAqcmV0OworCisJZ3JhcGhfc2l6ZSA9IHhzaXplX3Qoc3QtPnN0X3NpemUpOworCisJaWYgKGdyYXBoX3NpemUgPCBHUkFQSF9NSU5fU0laRSkgeworCQljbG9zZShmZCk7CisJCWVycm9yKF8oImNvbW1pdC1ncmFwaCBmaWxlIGlzIHRvbyBzbWFsbCIpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWdyYXBoX21hcCA9IHhtbWFwKE5VTEwsIGdyYXBoX3NpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKwljbG9zZShmZCk7CisJcmV0ID0gcGFyc2VfY29tbWl0X2dyYXBoKGdyYXBoX21hcCwgZ3JhcGhfc2l6ZSk7CisKKwlpZiAocmV0KQorCQlyZXQtPm9kYiA9IG9kYjsKKwllbHNlCisJCW11bm1hcChncmFwaF9tYXAsIGdyYXBoX3NpemUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2ZXJpZnlfY29tbWl0X2dyYXBoX2xpdGUoc3RydWN0IGNvbW1pdF9ncmFwaCAqZykKK3sKKwkvKgorCSAqIEJhc2ljIHZhbGlkYXRpb24gc2hhcmVkIGJldHdlZW4gcGFyc2VfY29tbWl0X2dyYXBoKCkKKwkgKiB3aGljaCdsbCBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUgZ3JhcGggaXMgdXNlZCwgYW5kIHRoZQorCSAqIG11Y2ggbW9yZSBleHBlbnNpdmUgdmVyaWZ5X2NvbW1pdF9ncmFwaCgpIHVzZWQgYnkKKwkgKiAiY29tbWl0LWdyYXBoIHZlcmlmeSIuCisJICoKKwkgKiBUaGVyZSBzaG91bGQgb25seSBiZSB2ZXJ5IGJhc2ljIGNoZWNrcyBoZXJlIHRvIGVuc3VyZSB0aGF0CisJICogd2UgZG9uJ3QgZS5nLiBzZWdmYXVsdCBpbiBmaWxsX2NvbW1pdF9pbl9ncmFwaCgpLCBidXQKKwkgKiBiZWNhdXNlIHRoaXMgaXMgYSB2ZXJ5IGhvdCBjb2RlcGF0aCBub3RoaW5nIHRoYXQgZS5nLiBsb29wcworCSAqIG92ZXIgZy0+bnVtX2NvbW1pdHMsIG9yIHJ1bnMgYSBjaGVja3N1bSBvbiB0aGUgY29tbWl0LWdyYXBoCisJICogaXRzZWxmLgorCSAqLworCWlmICghZy0+Y2h1bmtfb2lkX2Zhbm91dCkgeworCQllcnJvcigiY29tbWl0LWdyYXBoIGlzIG1pc3NpbmcgdGhlIE9JRCBGYW5vdXQgY2h1bmsiKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmICghZy0+Y2h1bmtfb2lkX2xvb2t1cCkgeworCQllcnJvcigiY29tbWl0LWdyYXBoIGlzIG1pc3NpbmcgdGhlIE9JRCBMb29rdXAgY2h1bmsiKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmICghZy0+Y2h1bmtfY29tbWl0X2RhdGEpIHsKKwkJZXJyb3IoImNvbW1pdC1ncmFwaCBpcyBtaXNzaW5nIHRoZSBDb21taXQgRGF0YSBjaHVuayIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNvbW1pdF9ncmFwaCAqcGFyc2VfY29tbWl0X2dyYXBoKHZvaWQgKmdyYXBoX21hcCwgc2l6ZV90IGdyYXBoX3NpemUpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgKmNodW5rX2xvb2t1cDsKKwl1aW50MzJfdCBpOworCXN0cnVjdCBjb21taXRfZ3JhcGggKmdyYXBoOworCXVpbnQ2NF90IGxhc3RfY2h1bmtfb2Zmc2V0OworCXVpbnQzMl90IGxhc3RfY2h1bmtfaWQ7CisJdWludDMyX3QgZ3JhcGhfc2lnbmF0dXJlOworCXVuc2lnbmVkIGNoYXIgZ3JhcGhfdmVyc2lvbiwgaGFzaF92ZXJzaW9uOworCisJaWYgKCFncmFwaF9tYXApCisJCXJldHVybiBOVUxMOworCisJaWYgKGdyYXBoX3NpemUgPCBHUkFQSF9NSU5fU0laRSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkYXRhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilncmFwaF9tYXA7CisKKwlncmFwaF9zaWduYXR1cmUgPSBnZXRfYmUzMihkYXRhKTsKKwlpZiAoZ3JhcGhfc2lnbmF0dXJlICE9IEdSQVBIX1NJR05BVFVSRSkgeworCQllcnJvcihfKCJjb21taXQtZ3JhcGggc2lnbmF0dXJlICVYIGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAlWCIpLAorCQkgICAgICBncmFwaF9zaWduYXR1cmUsIEdSQVBIX1NJR05BVFVSRSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWdyYXBoX3ZlcnNpb24gPSAqKHVuc2lnbmVkIGNoYXIqKShkYXRhICsgNCk7CisJaWYgKGdyYXBoX3ZlcnNpb24gIT0gR1JBUEhfVkVSU0lPTikgeworCQllcnJvcihfKCJjb21taXQtZ3JhcGggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIiksCisJCSAgICAgIGdyYXBoX3ZlcnNpb24sIEdSQVBIX1ZFUlNJT04pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwloYXNoX3ZlcnNpb24gPSAqKHVuc2lnbmVkIGNoYXIqKShkYXRhICsgNSk7CisJaWYgKGhhc2hfdmVyc2lvbiAhPSBvaWRfdmVyc2lvbigpKSB7CisJCWVycm9yKF8oImNvbW1pdC1ncmFwaCBoYXNoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIpLAorCQkgICAgICBoYXNoX3ZlcnNpb24sIG9pZF92ZXJzaW9uKCkpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlncmFwaCA9IGFsbG9jX2NvbW1pdF9ncmFwaCgpOworCisJZ3JhcGgtPmhhc2hfbGVuID0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJZ3JhcGgtPm51bV9jaHVua3MgPSAqKHVuc2lnbmVkIGNoYXIqKShkYXRhICsgNik7CisJZ3JhcGgtPmRhdGEgPSBncmFwaF9tYXA7CisJZ3JhcGgtPmRhdGFfbGVuID0gZ3JhcGhfc2l6ZTsKKworCWxhc3RfY2h1bmtfaWQgPSAwOworCWxhc3RfY2h1bmtfb2Zmc2V0ID0gODsKKwljaHVua19sb29rdXAgPSBkYXRhICsgODsKKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9jaHVua3M7IGkrKykgeworCQl1aW50MzJfdCBjaHVua19pZDsKKwkJdWludDY0X3QgY2h1bmtfb2Zmc2V0OworCQlpbnQgY2h1bmtfcmVwZWF0ZWQgPSAwOworCisJCWlmIChkYXRhICsgZ3JhcGhfc2l6ZSAtIGNodW5rX2xvb2t1cCA8CisJCSAgICBHUkFQSF9DSFVOS0xPT0tVUF9XSURUSCkgeworCQkJZXJyb3IoXygiY29tbWl0LWdyYXBoIGNodW5rIGxvb2t1cCB0YWJsZSBlbnRyeSBtaXNzaW5nOyBmaWxlIG1heSBiZSBpbmNvbXBsZXRlIikpOworCQkJZ290byBmcmVlX2FuZF9yZXR1cm47CisJCX0KKworCQljaHVua19pZCA9IGdldF9iZTMyKGNodW5rX2xvb2t1cCArIDApOworCQljaHVua19vZmZzZXQgPSBnZXRfYmU2NChjaHVua19sb29rdXAgKyA0KTsKKworCQljaHVua19sb29rdXAgKz0gR1JBUEhfQ0hVTktMT09LVVBfV0lEVEg7CisKKwkJaWYgKGNodW5rX29mZnNldCA+IGdyYXBoX3NpemUgLSB0aGVfaGFzaF9hbGdvLT5yYXdzeikgeworCQkJZXJyb3IoXygiY29tbWl0LWdyYXBoIGltcHJvcGVyIGNodW5rIG9mZnNldCAlMDh4JTA4eCIpLCAodWludDMyX3QpKGNodW5rX29mZnNldCA+PiAzMiksCisJCQkgICAgICAodWludDMyX3QpY2h1bmtfb2Zmc2V0KTsKKwkJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOworCQl9CisKKwkJc3dpdGNoIChjaHVua19pZCkgeworCQljYXNlIEdSQVBIX0NIVU5LSURfT0lERkFOT1VUOgorCQkJaWYgKGdyYXBoLT5jaHVua19vaWRfZmFub3V0KQorCQkJCWNodW5rX3JlcGVhdGVkID0gMTsKKwkJCWVsc2UKKwkJCQlncmFwaC0+Y2h1bmtfb2lkX2Zhbm91dCA9ICh1aW50MzJfdCopKGRhdGEgKyBjaHVua19vZmZzZXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBHUkFQSF9DSFVOS0lEX09JRExPT0tVUDoKKwkJCWlmIChncmFwaC0+Y2h1bmtfb2lkX2xvb2t1cCkKKwkJCQljaHVua19yZXBlYXRlZCA9IDE7CisJCQllbHNlCisJCQkJZ3JhcGgtPmNodW5rX29pZF9sb29rdXAgPSBkYXRhICsgY2h1bmtfb2Zmc2V0OworCQkJYnJlYWs7CisKKwkJY2FzZSBHUkFQSF9DSFVOS0lEX0RBVEE6CisJCQlpZiAoZ3JhcGgtPmNodW5rX2NvbW1pdF9kYXRhKQorCQkJCWNodW5rX3JlcGVhdGVkID0gMTsKKwkJCWVsc2UKKwkJCQlncmFwaC0+Y2h1bmtfY29tbWl0X2RhdGEgPSBkYXRhICsgY2h1bmtfb2Zmc2V0OworCQkJYnJlYWs7CisKKwkJY2FzZSBHUkFQSF9DSFVOS0lEX0VYVFJBRURHRVM6CisJCQlpZiAoZ3JhcGgtPmNodW5rX2V4dHJhX2VkZ2VzKQorCQkJCWNodW5rX3JlcGVhdGVkID0gMTsKKwkJCWVsc2UKKwkJCQlncmFwaC0+Y2h1bmtfZXh0cmFfZWRnZXMgPSBkYXRhICsgY2h1bmtfb2Zmc2V0OworCQkJYnJlYWs7CisKKwkJY2FzZSBHUkFQSF9DSFVOS0lEX0JBU0U6CisJCQlpZiAoZ3JhcGgtPmNodW5rX2Jhc2VfZ3JhcGhzKQorCQkJCWNodW5rX3JlcGVhdGVkID0gMTsKKwkJCWVsc2UKKwkJCQlncmFwaC0+Y2h1bmtfYmFzZV9ncmFwaHMgPSBkYXRhICsgY2h1bmtfb2Zmc2V0OworCQkJYnJlYWs7CisKKwkJY2FzZSBHUkFQSF9DSFVOS0lEX0JMT09NSU5ERVhFUzoKKwkJCWlmIChncmFwaC0+Y2h1bmtfYmxvb21faW5kZXhlcykKKwkJCQljaHVua19yZXBlYXRlZCA9IDE7CisJCQllbHNlCisJCQkJZ3JhcGgtPmNodW5rX2Jsb29tX2luZGV4ZXMgPSBkYXRhICsgY2h1bmtfb2Zmc2V0OworCQkJYnJlYWs7CisKKwkJY2FzZSBHUkFQSF9DSFVOS0lEX0JMT09NREFUQToKKwkJCWlmIChncmFwaC0+Y2h1bmtfYmxvb21fZGF0YSkKKwkJCQljaHVua19yZXBlYXRlZCA9IDE7CisJCQllbHNlIHsKKwkJCQl1aW50MzJfdCBoYXNoX3ZlcnNpb247CisJCQkJZ3JhcGgtPmNodW5rX2Jsb29tX2RhdGEgPSBkYXRhICsgY2h1bmtfb2Zmc2V0OworCQkJCWhhc2hfdmVyc2lvbiA9IGdldF9iZTMyKGRhdGEgKyBjaHVua19vZmZzZXQpOworCisJCQkJaWYgKGhhc2hfdmVyc2lvbiAhPSAxKQorCQkJCQlicmVhazsKKworCQkJCWdyYXBoLT5ibG9vbV9maWx0ZXJfc2V0dGluZ3MgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgYmxvb21fZmlsdGVyX3NldHRpbmdzKSk7CisJCQkJZ3JhcGgtPmJsb29tX2ZpbHRlcl9zZXR0aW5ncy0+aGFzaF92ZXJzaW9uID0gaGFzaF92ZXJzaW9uOworCQkJCWdyYXBoLT5ibG9vbV9maWx0ZXJfc2V0dGluZ3MtPm51bV9oYXNoZXMgPSBnZXRfYmUzMihkYXRhICsgY2h1bmtfb2Zmc2V0ICsgNCk7CisJCQkJZ3JhcGgtPmJsb29tX2ZpbHRlcl9zZXR0aW5ncy0+Yml0c19wZXJfZW50cnkgPSBnZXRfYmUzMihkYXRhICsgY2h1bmtfb2Zmc2V0ICsgOCk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCWlmIChjaHVua19yZXBlYXRlZCkgeworCQkJZXJyb3IoXygiY29tbWl0LWdyYXBoIGNodW5rIGlkICUwOHggYXBwZWFycyBtdWx0aXBsZSB0aW1lcyIpLCBjaHVua19pZCk7CisJCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKKwkJfQorCisJCWlmIChsYXN0X2NodW5rX2lkID09IEdSQVBIX0NIVU5LSURfT0lETE9PS1VQKQorCQl7CisJCQlncmFwaC0+bnVtX2NvbW1pdHMgPSAoY2h1bmtfb2Zmc2V0IC0gbGFzdF9jaHVua19vZmZzZXQpCisJCQkJCSAgICAgLyBncmFwaC0+aGFzaF9sZW47CisJCX0KKworCQlsYXN0X2NodW5rX2lkID0gY2h1bmtfaWQ7CisJCWxhc3RfY2h1bmtfb2Zmc2V0ID0gY2h1bmtfb2Zmc2V0OworCX0KKworCWlmIChncmFwaC0+Y2h1bmtfYmxvb21faW5kZXhlcyAmJiBncmFwaC0+Y2h1bmtfYmxvb21fZGF0YSkgeworCQlpbml0X2Jsb29tX2ZpbHRlcnMoKTsKKwl9IGVsc2UgeworCQkvKiBXZSBuZWVkIGJvdGggdGhlIGJsb29tIGNodW5rcyB0byBleGlzdCB0b2dldGhlci4gRWxzZSBpZ25vcmUgdGhlIGRhdGEgKi8KKwkJZ3JhcGgtPmNodW5rX2Jsb29tX2luZGV4ZXMgPSBOVUxMOworCQlncmFwaC0+Y2h1bmtfYmxvb21fZGF0YSA9IE5VTEw7CisJCUZSRUVfQU5EX05VTEwoZ3JhcGgtPmJsb29tX2ZpbHRlcl9zZXR0aW5ncyk7CisJfQorCisJaGFzaGNweShncmFwaC0+b2lkLmhhc2gsIGdyYXBoLT5kYXRhICsgZ3JhcGgtPmRhdGFfbGVuIC0gZ3JhcGgtPmhhc2hfbGVuKTsKKworCWlmICh2ZXJpZnlfY29tbWl0X2dyYXBoX2xpdGUoZ3JhcGgpKQorCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKKworCXJldHVybiBncmFwaDsKKworZnJlZV9hbmRfcmV0dXJuOgorCWZyZWUoZ3JhcGgtPmJsb29tX2ZpbHRlcl9zZXR0aW5ncyk7CisJZnJlZShncmFwaCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2dyYXBoICpsb2FkX2NvbW1pdF9ncmFwaF9vbmUoY29uc3QgY2hhciAqZ3JhcGhfZmlsZSwKKwkJCQkJCSAgc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYikKK3sKKworCXN0cnVjdCBzdGF0IHN0OworCWludCBmZDsKKwlzdHJ1Y3QgY29tbWl0X2dyYXBoICpnOworCWludCBvcGVuX29rID0gb3Blbl9jb21taXRfZ3JhcGgoZ3JhcGhfZmlsZSwgJmZkLCAmc3QpOworCisJaWYgKCFvcGVuX29rKQorCQlyZXR1cm4gTlVMTDsKKworCWcgPSBsb2FkX2NvbW1pdF9ncmFwaF9vbmVfZmRfc3QoZmQsICZzdCwgb2RiKTsKKworCWlmIChnKQorCQlnLT5maWxlbmFtZSA9IHhzdHJkdXAoZ3JhcGhfZmlsZSk7CisKKwlyZXR1cm4gZzsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfZ3JhcGggKmxvYWRfY29tbWl0X2dyYXBoX3YxKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkJIHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIpCit7CisJY2hhciAqZ3JhcGhfbmFtZSA9IGdldF9jb21taXRfZ3JhcGhfZmlsZW5hbWUob2RiKTsKKwlzdHJ1Y3QgY29tbWl0X2dyYXBoICpnID0gbG9hZF9jb21taXRfZ3JhcGhfb25lKGdyYXBoX25hbWUsIG9kYik7CisJZnJlZShncmFwaF9uYW1lKTsKKworCXJldHVybiBnOworfQorCitzdGF0aWMgaW50IGFkZF9ncmFwaF90b19jaGFpbihzdHJ1Y3QgY29tbWl0X2dyYXBoICpnLAorCQkJICAgICAgc3RydWN0IGNvbW1pdF9ncmFwaCAqY2hhaW4sCisJCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWRzLAorCQkJICAgICAgaW50IG4pCit7CisJc3RydWN0IGNvbW1pdF9ncmFwaCAqY3VyX2cgPSBjaGFpbjsKKworCWlmIChuICYmICFnLT5jaHVua19iYXNlX2dyYXBocykgeworCQl3YXJuaW5nKF8oImNvbW1pdC1ncmFwaCBoYXMgbm8gYmFzZSBncmFwaHMgY2h1bmsiKSk7CisJCXJldHVybiAwOworCX0KKworCXdoaWxlIChuKSB7CisJCW4tLTsKKworCQlpZiAoIWN1cl9nIHx8CisJCSAgICAhb2lkZXEoJm9pZHNbbl0sICZjdXJfZy0+b2lkKSB8fAorCQkgICAgIWhhc2hlcShvaWRzW25dLmhhc2gsIGctPmNodW5rX2Jhc2VfZ3JhcGhzICsgZy0+aGFzaF9sZW4gKiBuKSkgeworCQkJd2FybmluZyhfKCJjb21taXQtZ3JhcGggY2hhaW4gZG9lcyBub3QgbWF0Y2giKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWN1cl9nID0gY3VyX2ctPmJhc2VfZ3JhcGg7CisJfQorCisJZy0+YmFzZV9ncmFwaCA9IGNoYWluOworCisJaWYgKGNoYWluKQorCQlnLT5udW1fY29tbWl0c19pbl9iYXNlID0gY2hhaW4tPm51bV9jb21taXRzICsgY2hhaW4tPm51bV9jb21taXRzX2luX2Jhc2U7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfZ3JhcGggKmxvYWRfY29tbWl0X2dyYXBoX2NoYWluKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkJICAgIHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIpCit7CisJc3RydWN0IGNvbW1pdF9ncmFwaCAqZ3JhcGhfY2hhaW4gPSBOVUxMOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCBvYmplY3RfaWQgKm9pZHM7CisJaW50IGkgPSAwLCB2YWxpZCA9IDEsIGNvdW50OworCWNoYXIgKmNoYWluX25hbWUgPSBnZXRfY2hhaW5fZmlsZW5hbWUob2RiKTsKKwlGSUxFICpmcDsKKwlpbnQgc3RhdF9yZXM7CisKKwlmcCA9IGZvcGVuKGNoYWluX25hbWUsICJyIik7CisJc3RhdF9yZXMgPSBzdGF0KGNoYWluX25hbWUsICZzdCk7CisJZnJlZShjaGFpbl9uYW1lKTsKKworCWlmICghZnAgfHwKKwkgICAgc3RhdF9yZXMgfHwKKwkgICAgc3Quc3Rfc2l6ZSA8PSB0aGVfaGFzaF9hbGdvLT5oZXhzeikKKwkJcmV0dXJuIE5VTEw7CisKKwljb3VudCA9IHN0LnN0X3NpemUgLyAodGhlX2hhc2hfYWxnby0+aGV4c3ogKyAxKTsKKwlvaWRzID0geGNhbGxvYyhjb3VudCwgc2l6ZW9mKHN0cnVjdCBvYmplY3RfaWQpKTsKKworCXByZXBhcmVfYWx0X29kYihyKTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGI7CisKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZsaW5lLCBmcCkgPT0gRU9GKQorCQkJYnJlYWs7CisKKwkJaWYgKGdldF9vaWRfaGV4KGxpbmUuYnVmLCAmb2lkc1tpXSkpIHsKKwkJCXdhcm5pbmcoXygiaW52YWxpZCBjb21taXQtZ3JhcGggY2hhaW46IGxpbmUgJyVzJyBub3QgYSBoYXNoIiksCisJCQkJbGluZS5idWYpOworCQkJdmFsaWQgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQl2YWxpZCA9IDA7CisJCWZvciAob2RiID0gci0+b2JqZWN0cy0+b2RiOyBvZGI7IG9kYiA9IG9kYi0+bmV4dCkgeworCQkJY2hhciAqZ3JhcGhfbmFtZSA9IGdldF9zcGxpdF9ncmFwaF9maWxlbmFtZShvZGIsIGxpbmUuYnVmKTsKKwkJCXN0cnVjdCBjb21taXRfZ3JhcGggKmcgPSBsb2FkX2NvbW1pdF9ncmFwaF9vbmUoZ3JhcGhfbmFtZSwgb2RiKTsKKworCQkJZnJlZShncmFwaF9uYW1lKTsKKworCQkJaWYgKGcpIHsKKwkJCQlpZiAoYWRkX2dyYXBoX3RvX2NoYWluKGcsIGdyYXBoX2NoYWluLCBvaWRzLCBpKSkgeworCQkJCQlncmFwaF9jaGFpbiA9IGc7CisJCQkJCXZhbGlkID0gMTsKKwkJCQl9CisKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghdmFsaWQpIHsKKwkJCXdhcm5pbmcoXygidW5hYmxlIHRvIGZpbmQgYWxsIGNvbW1pdC1ncmFwaCBmaWxlcyIpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJZnJlZShvaWRzKTsKKwlmY2xvc2UoZnApOworCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKworCXJldHVybiBncmFwaF9jaGFpbjsKK30KKworc3RydWN0IGNvbW1pdF9ncmFwaCAqcmVhZF9jb21taXRfZ3JhcGhfb25lKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgICBzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiKQoreworCXN0cnVjdCBjb21taXRfZ3JhcGggKmcgPSBsb2FkX2NvbW1pdF9ncmFwaF92MShyLCBvZGIpOworCisJaWYgKCFnKQorCQlnID0gbG9hZF9jb21taXRfZ3JhcGhfY2hhaW4ociwgb2RiKTsKKworCXJldHVybiBnOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX2NvbW1pdF9ncmFwaF9vbmUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiKQoreworCisJaWYgKHItPm9iamVjdHMtPmNvbW1pdF9ncmFwaCkKKwkJcmV0dXJuOworCisJci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoID0gcmVhZF9jb21taXRfZ3JhcGhfb25lKHIsIG9kYik7Cit9CisKKy8qCisgKiBSZXR1cm4gMSBpZiBjb21taXRfZ3JhcGggaXMgbm9uLU5VTEwsIGFuZCAwIG90aGVyd2lzZS4KKyAqCisgKiBPbiB0aGUgZmlyc3QgaW52b2NhdGlvbiwgdGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBsb2FkIHRoZSBjb21taXQKKyAqIGdyYXBoIGlmIHRoZV9yZXBvc2l0b3J5IGlzIGNvbmZpZ3VyZWQgdG8gaGF2ZSBvbmUuCisgKi8KK3N0YXRpYyBpbnQgcHJlcGFyZV9jb21taXRfZ3JhcGgoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYjsKKworCS8qCisJICogVGhpcyBtdXN0IGNvbWUgYmVmb3JlIHRoZSAiYWxyZWFkeSBhdHRlbXB0ZWQ/IiBjaGVjayBiZWxvdywgYmVjYXVzZQorCSAqIHdlIHdhbnQgdG8gZGlzYWJsZSBldmVuIGFuIGFscmVhZHktbG9hZGVkIGdyYXBoIGZpbGUuCisJICovCisJaWYgKHItPmNvbW1pdF9ncmFwaF9kaXNhYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoX2F0dGVtcHRlZCkKKwkJcmV0dXJuICEhci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoOworCXItPm9iamVjdHMtPmNvbW1pdF9ncmFwaF9hdHRlbXB0ZWQgPSAxOworCisJaWYgKGdpdF9lbnZfYm9vbChHSVRfVEVTVF9DT01NSVRfR1JBUEhfRElFX09OX0xPQUQsIDApKQorCQlkaWUoImR5aW5nIGFzIHJlcXVlc3RlZCBieSB0aGUgJyVzJyB2YXJpYWJsZSBvbiBjb21taXQtZ3JhcGggbG9hZCEiLAorCQkgICAgR0lUX1RFU1RfQ09NTUlUX0dSQVBIX0RJRV9PTl9MT0FEKTsKKworCXByZXBhcmVfcmVwb19zZXR0aW5ncyhyKTsKKworCWlmICghZ2l0X2Vudl9ib29sKEdJVF9URVNUX0NPTU1JVF9HUkFQSCwgMCkgJiYKKwkgICAgci0+c2V0dGluZ3MuY29yZV9jb21taXRfZ3JhcGggIT0gMSkKKwkJLyoKKwkJICogVGhpcyByZXBvc2l0b3J5IGlzIG5vdCBjb25maWd1cmVkIHRvIHVzZSBjb21taXQgZ3JhcGhzLCBzbworCQkgKiBkbyBub3QgbG9hZCBvbmUuIChCdXQgcmVwb3J0IGNvbW1pdF9ncmFwaF9hdHRlbXB0ZWQgYW55d2F5CisJCSAqIHNvIHRoYXQgY29tbWl0IGdyYXBoIGxvYWRpbmcgaXMgbm90IGF0dGVtcHRlZCBhZ2FpbiBmb3IgdGhpcworCQkgKiByZXBvc2l0b3J5LikKKwkJICovCisJCXJldHVybiAwOworCisJaWYgKCFjb21taXRfZ3JhcGhfY29tcGF0aWJsZShyKSkKKwkJcmV0dXJuIDA7CisKKwlwcmVwYXJlX2FsdF9vZGIocik7CisJZm9yIChvZGIgPSByLT5vYmplY3RzLT5vZGI7CisJICAgICAhci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoICYmIG9kYjsKKwkgICAgIG9kYiA9IG9kYi0+bmV4dCkKKwkJcHJlcGFyZV9jb21taXRfZ3JhcGhfb25lKHIsIG9kYik7CisJcmV0dXJuICEhci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoOworfQorCitpbnQgZ2VuZXJhdGlvbl9udW1iZXJzX2VuYWJsZWQoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJdWludDMyX3QgZmlyc3RfZ2VuZXJhdGlvbjsKKwlzdHJ1Y3QgY29tbWl0X2dyYXBoICpnOworCWlmICghcHJlcGFyZV9jb21taXRfZ3JhcGgocikpCisJICAgICAgIHJldHVybiAwOworCisJZyA9IHItPm9iamVjdHMtPmNvbW1pdF9ncmFwaDsKKworCWlmICghZy0+bnVtX2NvbW1pdHMpCisJCXJldHVybiAwOworCisJZmlyc3RfZ2VuZXJhdGlvbiA9IGdldF9iZTMyKGctPmNodW5rX2NvbW1pdF9kYXRhICsKKwkJCQkgICAgZy0+aGFzaF9sZW4gKyA4KSA+PiAyOworCisJcmV0dXJuICEhZmlyc3RfZ2VuZXJhdGlvbjsKK30KKworc3RhdGljIHZvaWQgY2xvc2VfY29tbWl0X2dyYXBoX29uZShzdHJ1Y3QgY29tbWl0X2dyYXBoICpnKQoreworCWlmICghZykKKwkJcmV0dXJuOworCisJY2xvc2VfY29tbWl0X2dyYXBoX29uZShnLT5iYXNlX2dyYXBoKTsKKwlmcmVlX2NvbW1pdF9ncmFwaChnKTsKK30KKwordm9pZCBjbG9zZV9jb21taXRfZ3JhcGgoc3RydWN0IHJhd19vYmplY3Rfc3RvcmUgKm8pCit7CisJY2xvc2VfY29tbWl0X2dyYXBoX29uZShvLT5jb21taXRfZ3JhcGgpOworCW8tPmNvbW1pdF9ncmFwaCA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgYnNlYXJjaF9ncmFwaChzdHJ1Y3QgY29tbWl0X2dyYXBoICpnLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHVpbnQzMl90ICpwb3MpCit7CisJcmV0dXJuIGJzZWFyY2hfaGFzaChvaWQtPmhhc2gsIGctPmNodW5rX29pZF9mYW5vdXQsCisJCQkgICAgZy0+Y2h1bmtfb2lkX2xvb2t1cCwgZy0+aGFzaF9sZW4sIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfb2lkX2Zyb21fZ3JhcGgoc3RydWN0IGNvbW1pdF9ncmFwaCAqZywKKwkJCQl1aW50MzJfdCBwb3MsCisJCQkJc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXVpbnQzMl90IGxleF9pbmRleDsKKworCXdoaWxlIChnICYmIHBvcyA8IGctPm51bV9jb21taXRzX2luX2Jhc2UpCisJCWcgPSBnLT5iYXNlX2dyYXBoOworCisJaWYgKCFnKQorCQlCVUcoIk5VTEwgY29tbWl0LWdyYXBoIik7CisKKwlpZiAocG9zID49IGctPm51bV9jb21taXRzICsgZy0+bnVtX2NvbW1pdHNfaW5fYmFzZSkKKwkJZGllKF8oImludmFsaWQgY29tbWl0IHBvc2l0aW9uLiBjb21taXQtZ3JhcGggaXMgbGlrZWx5IGNvcnJ1cHQiKSk7CisKKwlsZXhfaW5kZXggPSBwb3MgLSBnLT5udW1fY29tbWl0c19pbl9iYXNlOworCisJaGFzaGNweShvaWQtPmhhc2gsIGctPmNodW5rX29pZF9sb29rdXAgKyBnLT5oYXNoX2xlbiAqIGxleF9pbmRleCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKippbnNlcnRfcGFyZW50X29yX2RpZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJCSBzdHJ1Y3QgY29tbWl0X2dyYXBoICpnLAorCQkJCQkJIHVpbnQzMl90IHBvcywKKwkJCQkJCSBzdHJ1Y3QgY29tbWl0X2xpc3QgKipwcHRyKQoreworCXN0cnVjdCBjb21taXQgKmM7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlpZiAocG9zID49IGctPm51bV9jb21taXRzICsgZy0+bnVtX2NvbW1pdHNfaW5fYmFzZSkKKwkJZGllKCJpbnZhbGlkIHBhcmVudCBwb3NpdGlvbiAlIlBSSXUzMiwgcG9zKTsKKworCWxvYWRfb2lkX2Zyb21fZ3JhcGgoZywgcG9zLCAmb2lkKTsKKwljID0gbG9va3VwX2NvbW1pdChyLCAmb2lkKTsKKwlpZiAoIWMpCisJCWRpZShfKCJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiKSwgb2lkX3RvX2hleCgmb2lkKSk7CisJYy0+Z3JhcGhfcG9zID0gcG9zOworCXJldHVybiAmY29tbWl0X2xpc3RfaW5zZXJ0KGMsIHBwdHIpLT5uZXh0OworfQorCitzdGF0aWMgdm9pZCBmaWxsX2NvbW1pdF9ncmFwaF9pbmZvKHN0cnVjdCBjb21taXQgKml0ZW0sIHN0cnVjdCBjb21taXRfZ3JhcGggKmcsIHVpbnQzMl90IHBvcykKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjb21taXRfZGF0YTsKKwl1aW50MzJfdCBsZXhfaW5kZXg7CisKKwl3aGlsZSAocG9zIDwgZy0+bnVtX2NvbW1pdHNfaW5fYmFzZSkKKwkJZyA9IGctPmJhc2VfZ3JhcGg7CisKKwlsZXhfaW5kZXggPSBwb3MgLSBnLT5udW1fY29tbWl0c19pbl9iYXNlOworCWNvbW1pdF9kYXRhID0gZy0+Y2h1bmtfY29tbWl0X2RhdGEgKyBHUkFQSF9EQVRBX1dJRFRIICogbGV4X2luZGV4OworCWl0ZW0tPmdyYXBoX3BvcyA9IHBvczsKKwlpdGVtLT5nZW5lcmF0aW9uID0gZ2V0X2JlMzIoY29tbWl0X2RhdGEgKyBnLT5oYXNoX2xlbiArIDgpID4+IDI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY29tbWl0X3RyZWUoc3RydWN0IGNvbW1pdCAqYywgc3RydWN0IHRyZWUgKnQpCit7CisJYy0+bWF5YmVfdHJlZSA9IHQ7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9jb21taXRfaW5fZ3JhcGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJc3RydWN0IGNvbW1pdCAqaXRlbSwKKwkJCQlzdHJ1Y3QgY29tbWl0X2dyYXBoICpnLCB1aW50MzJfdCBwb3MpCit7CisJdWludDMyX3QgZWRnZV92YWx1ZTsKKwl1aW50MzJfdCAqcGFyZW50X2RhdGFfcHRyOworCXVpbnQ2NF90IGRhdGVfbG93LCBkYXRlX2hpZ2g7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcHB0cjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjb21taXRfZGF0YTsKKwl1aW50MzJfdCBsZXhfaW5kZXg7CisKKwl3aGlsZSAocG9zIDwgZy0+bnVtX2NvbW1pdHNfaW5fYmFzZSkKKwkJZyA9IGctPmJhc2VfZ3JhcGg7CisKKwlpZiAocG9zID49IGctPm51bV9jb21taXRzICsgZy0+bnVtX2NvbW1pdHNfaW5fYmFzZSkKKwkJZGllKF8oImludmFsaWQgY29tbWl0IHBvc2l0aW9uLiBjb21taXQtZ3JhcGggaXMgbGlrZWx5IGNvcnJ1cHQiKSk7CisKKwkvKgorCSAqIFN0b3JlIHRoZSAiZnVsbCIgcG9zaXRpb24sIGJ1dCB0aGVuIHVzZSB0aGUKKwkgKiAibG9jYWwiIHBvc2l0aW9uIGZvciB0aGUgcmVzdCBvZiB0aGUgY2FsY3VsYXRpb24uCisJICovCisJaXRlbS0+Z3JhcGhfcG9zID0gcG9zOworCWxleF9pbmRleCA9IHBvcyAtIGctPm51bV9jb21taXRzX2luX2Jhc2U7CisKKwljb21taXRfZGF0YSA9IGctPmNodW5rX2NvbW1pdF9kYXRhICsgKGctPmhhc2hfbGVuICsgMTYpICogbGV4X2luZGV4OworCisJaXRlbS0+b2JqZWN0LnBhcnNlZCA9IDE7CisKKwlzZXRfY29tbWl0X3RyZWUoaXRlbSwgTlVMTCk7CisKKwlkYXRlX2hpZ2ggPSBnZXRfYmUzMihjb21taXRfZGF0YSArIGctPmhhc2hfbGVuICsgOCkgJiAweDM7CisJZGF0ZV9sb3cgPSBnZXRfYmUzMihjb21taXRfZGF0YSArIGctPmhhc2hfbGVuICsgMTIpOworCWl0ZW0tPmRhdGUgPSAodGltZXN0YW1wX3QpKChkYXRlX2hpZ2ggPDwgMzIpIHwgZGF0ZV9sb3cpOworCisJaXRlbS0+Z2VuZXJhdGlvbiA9IGdldF9iZTMyKGNvbW1pdF9kYXRhICsgZy0+aGFzaF9sZW4gKyA4KSA+PiAyOworCisJcHB0ciA9ICZpdGVtLT5wYXJlbnRzOworCisJZWRnZV92YWx1ZSA9IGdldF9iZTMyKGNvbW1pdF9kYXRhICsgZy0+aGFzaF9sZW4pOworCWlmIChlZGdlX3ZhbHVlID09IEdSQVBIX1BBUkVOVF9OT05FKQorCQlyZXR1cm4gMTsKKwlwcHRyID0gaW5zZXJ0X3BhcmVudF9vcl9kaWUociwgZywgZWRnZV92YWx1ZSwgcHB0cik7CisKKwllZGdlX3ZhbHVlID0gZ2V0X2JlMzIoY29tbWl0X2RhdGEgKyBnLT5oYXNoX2xlbiArIDQpOworCWlmIChlZGdlX3ZhbHVlID09IEdSQVBIX1BBUkVOVF9OT05FKQorCQlyZXR1cm4gMTsKKwlpZiAoIShlZGdlX3ZhbHVlICYgR1JBUEhfRVhUUkFfRURHRVNfTkVFREVEKSkgeworCQlwcHRyID0gaW5zZXJ0X3BhcmVudF9vcl9kaWUociwgZywgZWRnZV92YWx1ZSwgcHB0cik7CisJCXJldHVybiAxOworCX0KKworCXBhcmVudF9kYXRhX3B0ciA9ICh1aW50MzJfdCopKGctPmNodW5rX2V4dHJhX2VkZ2VzICsKKwkJCSAgNCAqICh1aW50NjRfdCkoZWRnZV92YWx1ZSAmIEdSQVBIX0VER0VfTEFTVF9NQVNLKSk7CisJZG8geworCQllZGdlX3ZhbHVlID0gZ2V0X2JlMzIocGFyZW50X2RhdGFfcHRyKTsKKwkJcHB0ciA9IGluc2VydF9wYXJlbnRfb3JfZGllKHIsIGcsCisJCQkJCSAgICBlZGdlX3ZhbHVlICYgR1JBUEhfRURHRV9MQVNUX01BU0ssCisJCQkJCSAgICBwcHRyKTsKKwkJcGFyZW50X2RhdGFfcHRyKys7CisJfSB3aGlsZSAoIShlZGdlX3ZhbHVlICYgR1JBUEhfTEFTVF9FREdFKSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmaW5kX2NvbW1pdF9pbl9ncmFwaChzdHJ1Y3QgY29tbWl0ICppdGVtLCBzdHJ1Y3QgY29tbWl0X2dyYXBoICpnLCB1aW50MzJfdCAqcG9zKQoreworCWlmIChpdGVtLT5ncmFwaF9wb3MgIT0gQ09NTUlUX05PVF9GUk9NX0dSQVBIKSB7CisJCSpwb3MgPSBpdGVtLT5ncmFwaF9wb3M7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXN0cnVjdCBjb21taXRfZ3JhcGggKmN1cl9nID0gZzsKKwkJdWludDMyX3QgbGV4X2luZGV4OworCisJCXdoaWxlIChjdXJfZyAmJiAhYnNlYXJjaF9ncmFwaChjdXJfZywgJihpdGVtLT5vYmplY3Qub2lkKSwgJmxleF9pbmRleCkpCisJCQljdXJfZyA9IGN1cl9nLT5iYXNlX2dyYXBoOworCisJCWlmIChjdXJfZykgeworCQkJKnBvcyA9IGxleF9pbmRleCArIGN1cl9nLT5udW1fY29tbWl0c19pbl9iYXNlOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfY29tbWl0X2luX2dyYXBoX29uZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgIHN0cnVjdCBjb21taXRfZ3JhcGggKmcsCisJCQkJICAgICBzdHJ1Y3QgY29tbWl0ICppdGVtKQoreworCXVpbnQzMl90IHBvczsKKworCWlmIChpdGVtLT5vYmplY3QucGFyc2VkKQorCQlyZXR1cm4gMTsKKworCWlmIChmaW5kX2NvbW1pdF9pbl9ncmFwaChpdGVtLCBnLCAmcG9zKSkKKwkJcmV0dXJuIGZpbGxfY29tbWl0X2luX2dyYXBoKHIsIGl0ZW0sIGcsIHBvcyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX2NvbW1pdF9pbl9ncmFwaChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGNvbW1pdCAqaXRlbSkKK3sKKwlpZiAoIXByZXBhcmVfY29tbWl0X2dyYXBoKHIpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcGFyc2VfY29tbWl0X2luX2dyYXBoX29uZShyLCByLT5vYmplY3RzLT5jb21taXRfZ3JhcGgsIGl0ZW0pOworfQorCit2b2lkIGxvYWRfY29tbWl0X2dyYXBoX2luZm8oc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXQgKml0ZW0pCit7CisJdWludDMyX3QgcG9zOworCWlmICghcHJlcGFyZV9jb21taXRfZ3JhcGgocikpCisJCXJldHVybjsKKwlpZiAoZmluZF9jb21taXRfaW5fZ3JhcGgoaXRlbSwgci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoLCAmcG9zKSkKKwkJZmlsbF9jb21taXRfZ3JhcGhfaW5mbyhpdGVtLCByLT5vYmplY3RzLT5jb21taXRfZ3JhcGgsIHBvcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJlZSAqbG9hZF90cmVlX2Zvcl9jb21taXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSBzdHJ1Y3QgY29tbWl0X2dyYXBoICpnLAorCQkJCQkgc3RydWN0IGNvbW1pdCAqYykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjb21taXRfZGF0YTsKKworCXdoaWxlIChjLT5ncmFwaF9wb3MgPCBnLT5udW1fY29tbWl0c19pbl9iYXNlKQorCQlnID0gZy0+YmFzZV9ncmFwaDsKKworCWNvbW1pdF9kYXRhID0gZy0+Y2h1bmtfY29tbWl0X2RhdGEgKworCQkJR1JBUEhfREFUQV9XSURUSCAqIChjLT5ncmFwaF9wb3MgLSBnLT5udW1fY29tbWl0c19pbl9iYXNlKTsKKworCWhhc2hjcHkob2lkLmhhc2gsIGNvbW1pdF9kYXRhKTsKKwlzZXRfY29tbWl0X3RyZWUoYywgbG9va3VwX3RyZWUociwgJm9pZCkpOworCisJcmV0dXJuIGMtPm1heWJlX3RyZWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJlZSAqZ2V0X2NvbW1pdF90cmVlX2luX2dyYXBoX29uZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJCSBzdHJ1Y3QgY29tbWl0X2dyYXBoICpnLAorCQkJCQkJIGNvbnN0IHN0cnVjdCBjb21taXQgKmMpCit7CisJaWYgKGMtPm1heWJlX3RyZWUpCisJCXJldHVybiBjLT5tYXliZV90cmVlOworCWlmIChjLT5ncmFwaF9wb3MgPT0gQ09NTUlUX05PVF9GUk9NX0dSQVBIKQorCQlCVUcoImdldF9jb21taXRfdHJlZV9pbl9ncmFwaF9vbmUgY2FsbGVkIGZyb20gbm9uLWNvbW1pdC1ncmFwaCBjb21taXQiKTsKKworCXJldHVybiBsb2FkX3RyZWVfZm9yX2NvbW1pdChyLCBnLCAoc3RydWN0IGNvbW1pdCAqKWMpOworfQorCitzdHJ1Y3QgdHJlZSAqZ2V0X2NvbW1pdF90cmVlX2luX2dyYXBoKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjKQoreworCXJldHVybiBnZXRfY29tbWl0X3RyZWVfaW5fZ3JhcGhfb25lKHIsIHItPm9iamVjdHMtPmNvbW1pdF9ncmFwaCwgYyk7Cit9CisKK3N0cnVjdCBwYWNrZWRfY29tbWl0X2xpc3QgeworCXN0cnVjdCBjb21taXQgKipsaXN0OworCWludCBucjsKKwlpbnQgYWxsb2M7Cit9OworCitzdHJ1Y3QgcGFja2VkX29pZF9saXN0IHsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpsaXN0OworCWludCBucjsKKwlpbnQgYWxsb2M7Cit9OworCitzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyOworCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGI7CisJY2hhciAqZ3JhcGhfbmFtZTsKKwlzdHJ1Y3QgcGFja2VkX29pZF9saXN0IG9pZHM7CisJc3RydWN0IHBhY2tlZF9jb21taXRfbGlzdCBjb21taXRzOworCWludCBudW1fZXh0cmFfZWRnZXM7CisJdW5zaWduZWQgbG9uZyBhcHByb3hfbnJfb2JqZWN0czsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOworCWludCBwcm9ncmVzc19kb25lOworCXVpbnQ2NF90IHByb2dyZXNzX2NudDsKKworCWNoYXIgKmJhc2VfZ3JhcGhfbmFtZTsKKwlpbnQgbnVtX2NvbW1pdF9ncmFwaHNfYmVmb3JlOworCWludCBudW1fY29tbWl0X2dyYXBoc19hZnRlcjsKKwljaGFyICoqY29tbWl0X2dyYXBoX2ZpbGVuYW1lc19iZWZvcmU7CisJY2hhciAqKmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYWZ0ZXI7CisJY2hhciAqKmNvbW1pdF9ncmFwaF9oYXNoX2FmdGVyOworCXVpbnQzMl90IG5ld19udW1fY29tbWl0c19pbl9iYXNlOworCXN0cnVjdCBjb21taXRfZ3JhcGggKm5ld19iYXNlX2dyYXBoOworCisJdW5zaWduZWQgYXBwZW5kOjEsCisJCSByZXBvcnRfcHJvZ3Jlc3M6MSwKKwkJIHNwbGl0OjEsCisJCSBjaGVja19vaWRzOjEsCisJCSBjaGFuZ2VkX3BhdGhzOjEsCisJCSBvcmRlcl9ieV9wYWNrOjE7CisKKwljb25zdCBzdHJ1Y3Qgc3BsaXRfY29tbWl0X2dyYXBoX29wdHMgKnNwbGl0X29wdHM7CisJc2l6ZV90IHRvdGFsX2Jsb29tX2ZpbHRlcl9kYXRhX3NpemU7Cit9OworCitzdGF0aWMgdm9pZCB3cml0ZV9ncmFwaF9jaHVua19mYW5vdXQoc3RydWN0IGhhc2hmaWxlICpmLAorCQkJCSAgICAgc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJaW50IGksIGNvdW50ID0gMDsKKwlzdHJ1Y3QgY29tbWl0ICoqbGlzdCA9IGN0eC0+Y29tbWl0cy5saXN0OworCisJLyoKKwkgKiBXcml0ZSB0aGUgZmlyc3QtbGV2ZWwgdGFibGUgKHRoZSBsaXN0IGlzIHNvcnRlZCwKKwkgKiBidXQgd2UgdXNlIGEgMjU2LWVudHJ5IGxvb2t1cCB0byBiZSBhYmxlIHRvIGF2b2lkCisJICogaGF2aW5nIHRvIGRvIGVpZ2h0IGV4dHJhIGJpbmFyeSBzZWFyY2ggaXRlcmF0aW9ucykuCisJICovCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCXdoaWxlIChjb3VudCA8IGN0eC0+Y29tbWl0cy5ucikgeworCQkJaWYgKCgqbGlzdCktPm9iamVjdC5vaWQuaGFzaFswXSAhPSBpKQorCQkJCWJyZWFrOworCQkJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCArK2N0eC0+cHJvZ3Jlc3NfY250KTsKKwkJCWNvdW50Kys7CisJCQlsaXN0Kys7CisJCX0KKworCQloYXNod3JpdGVfYmUzMihmLCBjb3VudCk7CisJfQorfQorCitzdGF0aWMgdm9pZCB3cml0ZV9ncmFwaF9jaHVua19vaWRzKHN0cnVjdCBoYXNoZmlsZSAqZiwgaW50IGhhc2hfbGVuLAorCQkJCSAgIHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBjb21taXQgKipsaXN0ID0gY3R4LT5jb21taXRzLmxpc3Q7CisJaW50IGNvdW50OworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IGN0eC0+Y29tbWl0cy5ucjsgY291bnQrKywgbGlzdCsrKSB7CisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgKytjdHgtPnByb2dyZXNzX2NudCk7CisJCWhhc2h3cml0ZShmLCAoKmxpc3QpLT5vYmplY3Qub2lkLmhhc2gsIChpbnQpaGFzaF9sZW4pOworCX0KK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1pdF90b19zaGExKHNpemVfdCBpbmRleCwgdm9pZCAqdGFibGUpCit7CisJc3RydWN0IGNvbW1pdCAqKmNvbW1pdHMgPSB0YWJsZTsKKwlyZXR1cm4gY29tbWl0c1tpbmRleF0tPm9iamVjdC5vaWQuaGFzaDsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfZ3JhcGhfY2h1bmtfZGF0YShzdHJ1Y3QgaGFzaGZpbGUgKmYsIGludCBoYXNoX2xlbiwKKwkJCQkgICBzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICoqbGlzdCA9IGN0eC0+Y29tbWl0cy5saXN0OworCXN0cnVjdCBjb21taXQgKipsYXN0ID0gY3R4LT5jb21taXRzLmxpc3QgKyBjdHgtPmNvbW1pdHMubnI7CisJdWludDMyX3QgbnVtX2V4dHJhX2VkZ2VzID0gMDsKKworCXdoaWxlIChsaXN0IDwgbGFzdCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudDsKKwkJc3RydWN0IG9iamVjdF9pZCAqdHJlZTsKKwkJaW50IGVkZ2VfdmFsdWU7CisJCXVpbnQzMl90IHBhY2tlZERhdGVbMl07CisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgKytjdHgtPnByb2dyZXNzX2NudCk7CisKKwkJaWYgKHBhcnNlX2NvbW1pdF9ub19ncmFwaCgqbGlzdCkpCisJCQlkaWUoXygidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIpLAorCQkJCW9pZF90b19oZXgoJigqbGlzdCktPm9iamVjdC5vaWQpKTsKKwkJdHJlZSA9IGdldF9jb21taXRfdHJlZV9vaWQoKmxpc3QpOworCQloYXNod3JpdGUoZiwgdHJlZS0+aGFzaCwgaGFzaF9sZW4pOworCisJCXBhcmVudCA9ICgqbGlzdCktPnBhcmVudHM7CisKKwkJaWYgKCFwYXJlbnQpCisJCQllZGdlX3ZhbHVlID0gR1JBUEhfUEFSRU5UX05PTkU7CisJCWVsc2UgeworCQkJZWRnZV92YWx1ZSA9IHNoYTFfcG9zKHBhcmVudC0+aXRlbS0+b2JqZWN0Lm9pZC5oYXNoLAorCQkJCQkgICAgICBjdHgtPmNvbW1pdHMubGlzdCwKKwkJCQkJICAgICAgY3R4LT5jb21taXRzLm5yLAorCQkJCQkgICAgICBjb21taXRfdG9fc2hhMSk7CisKKwkJCWlmIChlZGdlX3ZhbHVlID49IDApCisJCQkJZWRnZV92YWx1ZSArPSBjdHgtPm5ld19udW1fY29tbWl0c19pbl9iYXNlOworCQkJZWxzZSBpZiAoY3R4LT5uZXdfYmFzZV9ncmFwaCkgeworCQkJCXVpbnQzMl90IHBvczsKKwkJCQlpZiAoZmluZF9jb21taXRfaW5fZ3JhcGgocGFyZW50LT5pdGVtLAorCQkJCQkJCSBjdHgtPm5ld19iYXNlX2dyYXBoLAorCQkJCQkJCSAmcG9zKSkKKwkJCQkJZWRnZV92YWx1ZSA9IHBvczsKKwkJCX0KKworCQkJaWYgKGVkZ2VfdmFsdWUgPCAwKQorCQkJCUJVRygibWlzc2luZyBwYXJlbnQgJXMgZm9yIGNvbW1pdCAlcyIsCisJCQkJICAgIG9pZF90b19oZXgoJnBhcmVudC0+aXRlbS0+b2JqZWN0Lm9pZCksCisJCQkJICAgIG9pZF90b19oZXgoJigqbGlzdCktPm9iamVjdC5vaWQpKTsKKwkJfQorCisJCWhhc2h3cml0ZV9iZTMyKGYsIGVkZ2VfdmFsdWUpOworCisJCWlmIChwYXJlbnQpCisJCQlwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CisKKwkJaWYgKCFwYXJlbnQpCisJCQllZGdlX3ZhbHVlID0gR1JBUEhfUEFSRU5UX05PTkU7CisJCWVsc2UgaWYgKHBhcmVudC0+bmV4dCkKKwkJCWVkZ2VfdmFsdWUgPSBHUkFQSF9FWFRSQV9FREdFU19ORUVERUQgfCBudW1fZXh0cmFfZWRnZXM7CisJCWVsc2UgeworCQkJZWRnZV92YWx1ZSA9IHNoYTFfcG9zKHBhcmVudC0+aXRlbS0+b2JqZWN0Lm9pZC5oYXNoLAorCQkJCQkgICAgICBjdHgtPmNvbW1pdHMubGlzdCwKKwkJCQkJICAgICAgY3R4LT5jb21taXRzLm5yLAorCQkJCQkgICAgICBjb21taXRfdG9fc2hhMSk7CisKKwkJCWlmIChlZGdlX3ZhbHVlID49IDApCisJCQkJZWRnZV92YWx1ZSArPSBjdHgtPm5ld19udW1fY29tbWl0c19pbl9iYXNlOworCQkJZWxzZSBpZiAoY3R4LT5uZXdfYmFzZV9ncmFwaCkgeworCQkJCXVpbnQzMl90IHBvczsKKwkJCQlpZiAoZmluZF9jb21taXRfaW5fZ3JhcGgocGFyZW50LT5pdGVtLAorCQkJCQkJCSBjdHgtPm5ld19iYXNlX2dyYXBoLAorCQkJCQkJCSAmcG9zKSkKKwkJCQkJZWRnZV92YWx1ZSA9IHBvczsKKwkJCX0KKworCQkJaWYgKGVkZ2VfdmFsdWUgPCAwKQorCQkJCUJVRygibWlzc2luZyBwYXJlbnQgJXMgZm9yIGNvbW1pdCAlcyIsCisJCQkJICAgIG9pZF90b19oZXgoJnBhcmVudC0+aXRlbS0+b2JqZWN0Lm9pZCksCisJCQkJICAgIG9pZF90b19oZXgoJigqbGlzdCktPm9iamVjdC5vaWQpKTsKKwkJfQorCisJCWhhc2h3cml0ZV9iZTMyKGYsIGVkZ2VfdmFsdWUpOworCisJCWlmIChlZGdlX3ZhbHVlICYgR1JBUEhfRVhUUkFfRURHRVNfTkVFREVEKSB7CisJCQlkbyB7CisJCQkJbnVtX2V4dHJhX2VkZ2VzKys7CisJCQkJcGFyZW50ID0gcGFyZW50LT5uZXh0OworCQkJfSB3aGlsZSAocGFyZW50KTsKKwkJfQorCisJCWlmIChzaXplb2YoKCpsaXN0KS0+ZGF0ZSkgPiA0KQorCQkJcGFja2VkRGF0ZVswXSA9IGh0b25sKCgoKmxpc3QpLT5kYXRlID4+IDMyKSAmIDB4Myk7CisJCWVsc2UKKwkJCXBhY2tlZERhdGVbMF0gPSAwOworCisJCXBhY2tlZERhdGVbMF0gfD0gaHRvbmwoKCpsaXN0KS0+Z2VuZXJhdGlvbiA8PCAyKTsKKworCQlwYWNrZWREYXRlWzFdID0gaHRvbmwoKCpsaXN0KS0+ZGF0ZSk7CisJCWhhc2h3cml0ZShmLCBwYWNrZWREYXRlLCA4KTsKKworCQlsaXN0Kys7CisJfQorfQorCitzdGF0aWMgdm9pZCB3cml0ZV9ncmFwaF9jaHVua19leHRyYV9lZGdlcyhzdHJ1Y3QgaGFzaGZpbGUgKmYsCisJCQkJCSAgc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IGNvbW1pdCAqKmxpc3QgPSBjdHgtPmNvbW1pdHMubGlzdDsKKwlzdHJ1Y3QgY29tbWl0ICoqbGFzdCA9IGN0eC0+Y29tbWl0cy5saXN0ICsgY3R4LT5jb21taXRzLm5yOworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCisJd2hpbGUgKGxpc3QgPCBsYXN0KSB7CisJCWludCBudW1fcGFyZW50cyA9IDA7CisKKwkJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCArK2N0eC0+cHJvZ3Jlc3NfY250KTsKKworCQlmb3IgKHBhcmVudCA9ICgqbGlzdCktPnBhcmVudHM7IG51bV9wYXJlbnRzIDwgMyAmJiBwYXJlbnQ7CisJCSAgICAgcGFyZW50ID0gcGFyZW50LT5uZXh0KQorCQkJbnVtX3BhcmVudHMrKzsKKworCQlpZiAobnVtX3BhcmVudHMgPD0gMikgeworCQkJbGlzdCsrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBTaW5jZSBudW1fcGFyZW50cyA+IDIsIHRoaXMgaW5pdGlhbGl6ZXIgaXMgc2FmZS4gKi8KKwkJZm9yIChwYXJlbnQgPSAoKmxpc3QpLT5wYXJlbnRzLT5uZXh0OyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+bmV4dCkgeworCQkJaW50IGVkZ2VfdmFsdWUgPSBzaGExX3BvcyhwYXJlbnQtPml0ZW0tPm9iamVjdC5vaWQuaGFzaCwKKwkJCQkJCSAgY3R4LT5jb21taXRzLmxpc3QsCisJCQkJCQkgIGN0eC0+Y29tbWl0cy5uciwKKwkJCQkJCSAgY29tbWl0X3RvX3NoYTEpOworCisJCQlpZiAoZWRnZV92YWx1ZSA+PSAwKQorCQkJCWVkZ2VfdmFsdWUgKz0gY3R4LT5uZXdfbnVtX2NvbW1pdHNfaW5fYmFzZTsKKwkJCWVsc2UgaWYgKGN0eC0+bmV3X2Jhc2VfZ3JhcGgpIHsKKwkJCQl1aW50MzJfdCBwb3M7CisJCQkJaWYgKGZpbmRfY29tbWl0X2luX2dyYXBoKHBhcmVudC0+aXRlbSwKKwkJCQkJCQkgY3R4LT5uZXdfYmFzZV9ncmFwaCwKKwkJCQkJCQkgJnBvcykpCisJCQkJCWVkZ2VfdmFsdWUgPSBwb3M7CisJCQl9CisKKwkJCWlmIChlZGdlX3ZhbHVlIDwgMCkKKwkJCQlCVUcoIm1pc3NpbmcgcGFyZW50ICVzIGZvciBjb21taXQgJXMiLAorCQkJCSAgICBvaWRfdG9faGV4KCZwYXJlbnQtPml0ZW0tPm9iamVjdC5vaWQpLAorCQkJCSAgICBvaWRfdG9faGV4KCYoKmxpc3QpLT5vYmplY3Qub2lkKSk7CisJCQllbHNlIGlmICghcGFyZW50LT5uZXh0KQorCQkJCWVkZ2VfdmFsdWUgfD0gR1JBUEhfTEFTVF9FREdFOworCisJCQloYXNod3JpdGVfYmUzMihmLCBlZGdlX3ZhbHVlKTsKKwkJfQorCisJCWxpc3QrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2dyYXBoX2NodW5rX2Jsb29tX2luZGV4ZXMoc3RydWN0IGhhc2hmaWxlICpmLAorCQkJCQkgICAgc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IGNvbW1pdCAqKmxpc3QgPSBjdHgtPmNvbW1pdHMubGlzdDsKKwlzdHJ1Y3QgY29tbWl0ICoqbGFzdCA9IGN0eC0+Y29tbWl0cy5saXN0ICsgY3R4LT5jb21taXRzLm5yOworCXVpbnQzMl90IGN1cl9wb3MgPSAwOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCWludCBpID0gMDsKKworCWlmIChjdHgtPnJlcG9ydF9wcm9ncmVzcykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJXygiV3JpdGluZyBjaGFuZ2VkIHBhdGhzIEJsb29tIGZpbHRlcnMgaW5kZXgiKSwKKwkJCWN0eC0+Y29tbWl0cy5ucik7CisKKwl3aGlsZSAobGlzdCA8IGxhc3QpIHsKKwkJc3RydWN0IGJsb29tX2ZpbHRlciAqZmlsdGVyID0gZ2V0X2Jsb29tX2ZpbHRlcihjdHgtPnIsICpsaXN0LCAwKTsKKwkJY3VyX3BvcyArPSBmaWx0ZXItPmxlbjsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgKytpKTsKKwkJaGFzaHdyaXRlX2JlMzIoZiwgY3VyX3Bvcyk7CisJCWxpc3QrKzsKKwl9CisKKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2dyYXBoX2NodW5rX2Jsb29tX2RhdGEoc3RydWN0IGhhc2hmaWxlICpmLAorCQkJCQkgc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgsCisJCQkJCSBjb25zdCBzdHJ1Y3QgYmxvb21fZmlsdGVyX3NldHRpbmdzICpzZXR0aW5ncykKK3sKKwlzdHJ1Y3QgY29tbWl0ICoqbGlzdCA9IGN0eC0+Y29tbWl0cy5saXN0OworCXN0cnVjdCBjb21taXQgKipsYXN0ID0gY3R4LT5jb21taXRzLmxpc3QgKyBjdHgtPmNvbW1pdHMubnI7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CisJaW50IGkgPSAwOworCisJaWYgKGN0eC0+cmVwb3J0X3Byb2dyZXNzKQorCQlwcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoCisJCQlfKCJXcml0aW5nIGNoYW5nZWQgcGF0aHMgQmxvb20gZmlsdGVycyBkYXRhIiksCisJCQljdHgtPmNvbW1pdHMubnIpOworCisJaGFzaHdyaXRlX2JlMzIoZiwgc2V0dGluZ3MtPmhhc2hfdmVyc2lvbik7CisJaGFzaHdyaXRlX2JlMzIoZiwgc2V0dGluZ3MtPm51bV9oYXNoZXMpOworCWhhc2h3cml0ZV9iZTMyKGYsIHNldHRpbmdzLT5iaXRzX3Blcl9lbnRyeSk7CisKKwl3aGlsZSAobGlzdCA8IGxhc3QpIHsKKwkJc3RydWN0IGJsb29tX2ZpbHRlciAqZmlsdGVyID0gZ2V0X2Jsb29tX2ZpbHRlcihjdHgtPnIsICpsaXN0LCAwKTsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgKytpKTsKKwkJaGFzaHdyaXRlKGYsIGZpbHRlci0+ZGF0YSwgZmlsdGVyLT5sZW4gKiBzaXplb2YodW5zaWduZWQgY2hhcikpOworCQlsaXN0Kys7CisJfQorCisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW50IG9pZF9jb21wYXJlKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICphID0gKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKilfYTsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpiID0gKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKilfYjsKKwlyZXR1cm4gb2lkY21wKGEsIGIpOworfQorCitzdGF0aWMgaW50IGFkZF9wYWNrZWRfY29tbWl0cyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjaywKKwkJCSAgICAgIHVpbnQzMl90IHBvcywKKwkJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHggPSAoc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0KilkYXRhOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlvZmZfdCBvZmZzZXQgPSBudGhfcGFja2VkX29iamVjdF9vZmZzZXQocGFjaywgcG9zKTsKKwlzdHJ1Y3Qgb2JqZWN0X2luZm8gb2kgPSBPQkpFQ1RfSU5GT19JTklUOworCisJaWYgKGN0eC0+cHJvZ3Jlc3MpCisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgKytjdHgtPnByb2dyZXNzX2RvbmUpOworCisJb2kudHlwZXAgPSAmdHlwZTsKKwlpZiAocGFja2VkX29iamVjdF9pbmZvKGN0eC0+ciwgcGFjaywgb2Zmc2V0LCAmb2kpIDwgMCkKKwkJZGllKF8oInVuYWJsZSB0byBnZXQgdHlwZSBvZiBvYmplY3QgJXMiKSwgb2lkX3RvX2hleChvaWQpKTsKKworCWlmICh0eXBlICE9IE9CSl9DT01NSVQpCisJCXJldHVybiAwOworCisJQUxMT0NfR1JPVyhjdHgtPm9pZHMubGlzdCwgY3R4LT5vaWRzLm5yICsgMSwgY3R4LT5vaWRzLmFsbG9jKTsKKwlvaWRjcHkoJihjdHgtPm9pZHMubGlzdFtjdHgtPm9pZHMubnJdKSwgb2lkKTsKKwljdHgtPm9pZHMubnIrKzsKKworCXNldF9jb21taXRfcG9zKGN0eC0+ciwgb2lkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZGRfbWlzc2luZ19wYXJlbnRzKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisJZm9yIChwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5uZXh0KSB7CisJCWlmICghKHBhcmVudC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgUkVBQ0hBQkxFKSkgeworCQkJQUxMT0NfR1JPVyhjdHgtPm9pZHMubGlzdCwgY3R4LT5vaWRzLm5yICsgMSwgY3R4LT5vaWRzLmFsbG9jKTsKKwkJCW9pZGNweSgmY3R4LT5vaWRzLmxpc3RbY3R4LT5vaWRzLm5yXSwgJihwYXJlbnQtPml0ZW0tPm9iamVjdC5vaWQpKTsKKwkJCWN0eC0+b2lkcy5ucisrOworCQkJcGFyZW50LT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gUkVBQ0hBQkxFOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBjbG9zZV9yZWFjaGFibGUoc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJaW50IGk7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWVudW0gY29tbWl0X2dyYXBoX3NwbGl0X2ZsYWdzIGZsYWdzID0gY3R4LT5zcGxpdF9vcHRzID8KKwkJY3R4LT5zcGxpdF9vcHRzLT5mbGFncyA6IENPTU1JVF9HUkFQSF9TUExJVF9VTlNQRUNJRklFRDsKKworCWlmIChjdHgtPnJlcG9ydF9wcm9ncmVzcykKKwkJY3R4LT5wcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoCisJCQkJCV8oIkxvYWRpbmcga25vd24gY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiKSwKKwkJCQkJY3R4LT5vaWRzLm5yKTsKKwlmb3IgKGkgPSAwOyBpIDwgY3R4LT5vaWRzLm5yOyBpKyspIHsKKwkJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCBpICsgMSk7CisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXQoY3R4LT5yLCAmY3R4LT5vaWRzLmxpc3RbaV0pOworCQlpZiAoY29tbWl0KQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gUkVBQ0hBQkxFOworCX0KKwlzdG9wX3Byb2dyZXNzKCZjdHgtPnByb2dyZXNzKTsKKworCS8qCisJICogQXMgdGhpcyBsb29wIHJ1bnMsIGN0eC0+b2lkcy5uciBtYXkgZ3JvdywgYnV0IG5vdCBtb3JlCisJICogdGhhbiB0aGUgbnVtYmVyIG9mIG1pc3NpbmcgY29tbWl0cyBpbiB0aGUgcmVhY2hhYmxlCisJICogY2xvc3VyZS4KKwkgKi8KKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpCisJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJCQlfKCJFeHBhbmRpbmcgcmVhY2hhYmxlIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIiksCisJCQkJCTApOworCWZvciAoaSA9IDA7IGkgPCBjdHgtPm9pZHMubnI7IGkrKykgeworCQlkaXNwbGF5X3Byb2dyZXNzKGN0eC0+cHJvZ3Jlc3MsIGkgKyAxKTsKKwkJY29tbWl0ID0gbG9va3VwX2NvbW1pdChjdHgtPnIsICZjdHgtPm9pZHMubGlzdFtpXSk7CisKKwkJaWYgKCFjb21taXQpCisJCQljb250aW51ZTsKKwkJaWYgKGN0eC0+c3BsaXQpIHsKKwkJCWlmICgoIXBhcnNlX2NvbW1pdChjb21taXQpICYmCisJCQkgICAgIGNvbW1pdC0+Z3JhcGhfcG9zID09IENPTU1JVF9OT1RfRlJPTV9HUkFQSCkgfHwKKwkJCSAgICBmbGFncyA9PSBDT01NSVRfR1JBUEhfU1BMSVRfUkVQTEFDRSkKKwkJCQlhZGRfbWlzc2luZ19wYXJlbnRzKGN0eCwgY29tbWl0KTsKKwkJfSBlbHNlIGlmICghcGFyc2VfY29tbWl0X25vX2dyYXBoKGNvbW1pdCkpCisJCQlhZGRfbWlzc2luZ19wYXJlbnRzKGN0eCwgY29tbWl0KTsKKwl9CisJc3RvcF9wcm9ncmVzcygmY3R4LT5wcm9ncmVzcyk7CisKKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpCisJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJCQlfKCJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIiksCisJCQkJCWN0eC0+b2lkcy5ucik7CisJZm9yIChpID0gMDsgaSA8IGN0eC0+b2lkcy5ucjsgaSsrKSB7CisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgaSArIDEpOworCQljb21taXQgPSBsb29rdXBfY29tbWl0KGN0eC0+ciwgJmN0eC0+b2lkcy5saXN0W2ldKTsKKworCQlpZiAoY29tbWl0KQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgJj0gflJFQUNIQUJMRTsKKwl9CisJc3RvcF9wcm9ncmVzcygmY3R4LT5wcm9ncmVzcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVfZ2VuZXJhdGlvbl9udW1iZXJzKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQoreworCWludCBpOworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IE5VTEw7CisKKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpCisJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJCQlfKCJDb21wdXRpbmcgY29tbWl0IGdyYXBoIGdlbmVyYXRpb24gbnVtYmVycyIpLAorCQkJCQljdHgtPmNvbW1pdHMubnIpOworCWZvciAoaSA9IDA7IGkgPCBjdHgtPmNvbW1pdHMubnI7IGkrKykgeworCQlkaXNwbGF5X3Byb2dyZXNzKGN0eC0+cHJvZ3Jlc3MsIGkgKyAxKTsKKwkJaWYgKGN0eC0+Y29tbWl0cy5saXN0W2ldLT5nZW5lcmF0aW9uICE9IEdFTkVSQVRJT05fTlVNQkVSX0lORklOSVRZICYmCisJCSAgICBjdHgtPmNvbW1pdHMubGlzdFtpXS0+Z2VuZXJhdGlvbiAhPSBHRU5FUkFUSU9OX05VTUJFUl9aRVJPKQorCQkJY29udGludWU7CisKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGN0eC0+Y29tbWl0cy5saXN0W2ldLCAmbGlzdCk7CisJCXdoaWxlIChsaXN0KSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpjdXJyZW50ID0gbGlzdC0+aXRlbTsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCQkJaW50IGFsbF9wYXJlbnRzX2NvbXB1dGVkID0gMTsKKwkJCXVpbnQzMl90IG1heF9nZW5lcmF0aW9uID0gMDsKKworCQkJZm9yIChwYXJlbnQgPSBjdXJyZW50LT5wYXJlbnRzOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+bmV4dCkgeworCQkJCWlmIChwYXJlbnQtPml0ZW0tPmdlbmVyYXRpb24gPT0gR0VORVJBVElPTl9OVU1CRVJfSU5GSU5JVFkgfHwKKwkJCQkgICAgcGFyZW50LT5pdGVtLT5nZW5lcmF0aW9uID09IEdFTkVSQVRJT05fTlVNQkVSX1pFUk8pIHsKKwkJCQkJYWxsX3BhcmVudHNfY29tcHV0ZWQgPSAwOworCQkJCQljb21taXRfbGlzdF9pbnNlcnQocGFyZW50LT5pdGVtLCAmbGlzdCk7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSBpZiAocGFyZW50LT5pdGVtLT5nZW5lcmF0aW9uID4gbWF4X2dlbmVyYXRpb24pIHsKKwkJCQkJbWF4X2dlbmVyYXRpb24gPSBwYXJlbnQtPml0ZW0tPmdlbmVyYXRpb247CisJCQkJfQorCQkJfQorCisJCQlpZiAoYWxsX3BhcmVudHNfY29tcHV0ZWQpIHsKKwkJCQljdXJyZW50LT5nZW5lcmF0aW9uID0gbWF4X2dlbmVyYXRpb24gKyAxOworCQkJCXBvcF9jb21taXQoJmxpc3QpOworCisJCQkJaWYgKGN1cnJlbnQtPmdlbmVyYXRpb24gPiBHRU5FUkFUSU9OX05VTUJFUl9NQVgpCisJCQkJCWN1cnJlbnQtPmdlbmVyYXRpb24gPSBHRU5FUkFUSU9OX05VTUJFUl9NQVg7CisJCQl9CisJCX0KKwl9CisJc3RvcF9wcm9ncmVzcygmY3R4LT5wcm9ncmVzcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVfYmxvb21fZmlsdGVycyhzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0ICoqc29ydGVkX2NvbW1pdHM7CisKKwlpbml0X2Jsb29tX2ZpbHRlcnMoKTsKKworCWlmIChjdHgtPnJlcG9ydF9wcm9ncmVzcykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJXygiQ29tcHV0aW5nIGNvbW1pdCBjaGFuZ2VkIHBhdGhzIEJsb29tIGZpbHRlcnMiKSwKKwkJCWN0eC0+Y29tbWl0cy5ucik7CisKKwlBTExPQ19BUlJBWShzb3J0ZWRfY29tbWl0cywgY3R4LT5jb21taXRzLm5yKTsKKwlDT1BZX0FSUkFZKHNvcnRlZF9jb21taXRzLCBjdHgtPmNvbW1pdHMubGlzdCwgY3R4LT5jb21taXRzLm5yKTsKKworCWlmIChjdHgtPm9yZGVyX2J5X3BhY2spCisJCVFTT1JUKHNvcnRlZF9jb21taXRzLCBjdHgtPmNvbW1pdHMubnIsIGNvbW1pdF9wb3NfY21wKTsKKwllbHNlCisJCVFTT1JUKHNvcnRlZF9jb21taXRzLCBjdHgtPmNvbW1pdHMubnIsIGNvbW1pdF9nZW5fY21wKTsKKworCWZvciAoaSA9IDA7IGkgPCBjdHgtPmNvbW1pdHMubnI7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gc29ydGVkX2NvbW1pdHNbaV07CisJCXN0cnVjdCBibG9vbV9maWx0ZXIgKmZpbHRlciA9IGdldF9ibG9vbV9maWx0ZXIoY3R4LT5yLCBjLCAxKTsKKwkJY3R4LT50b3RhbF9ibG9vbV9maWx0ZXJfZGF0YV9zaXplICs9IHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIGZpbHRlci0+bGVuOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7CisJfQorCisJZnJlZShzb3J0ZWRfY29tbWl0cyk7CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW50IGFkZF9yZWZfdG9fc2V0KGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvaWRzZXQgKmNvbW1pdHMgPSAoc3RydWN0IG9pZHNldCAqKWNiX2RhdGE7CisKKwlvaWRzZXRfaW5zZXJ0KGNvbW1pdHMsIG9pZCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB3cml0ZV9jb21taXRfZ3JhcGhfcmVhY2hhYmxlKHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIsCisJCQkJIGVudW0gY29tbWl0X2dyYXBoX3dyaXRlX2ZsYWdzIGZsYWdzLAorCQkJCSBjb25zdCBzdHJ1Y3Qgc3BsaXRfY29tbWl0X2dyYXBoX29wdHMgKnNwbGl0X29wdHMpCit7CisJc3RydWN0IG9pZHNldCBjb21taXRzID0gT0lEU0VUX0lOSVQ7CisJaW50IHJlc3VsdDsKKworCWZvcl9lYWNoX3JlZihhZGRfcmVmX3RvX3NldCwgJmNvbW1pdHMpOworCXJlc3VsdCA9IHdyaXRlX2NvbW1pdF9ncmFwaChvZGIsIE5VTEwsICZjb21taXRzLAorCQkJCSAgICBmbGFncywgc3BsaXRfb3B0cyk7CisKKwlvaWRzZXRfY2xlYXIoJmNvbW1pdHMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9vaWRzX2Zyb21fcGFja3Moc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgsCisJCQkJc3RydWN0IHN0cmluZ19saXN0ICpwYWNrX2luZGV4ZXMpCit7CisJdWludDMyX3QgaTsKKwlzdHJ1Y3Qgc3RyYnVmIHByb2dyZXNzX3RpdGxlID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBwYWNrbmFtZSA9IFNUUkJVRl9JTklUOworCWludCBkaXJsZW47CisKKwlzdHJidWZfYWRkZigmcGFja25hbWUsICIlcy9wYWNrLyIsIGN0eC0+b2RiLT5wYXRoKTsKKwlkaXJsZW4gPSBwYWNrbmFtZS5sZW47CisJaWYgKGN0eC0+cmVwb3J0X3Byb2dyZXNzKSB7CisJCXN0cmJ1Zl9hZGRmKCZwcm9ncmVzc190aXRsZSwKKwkJCSAgICBRXygiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFjayIsCisJCQkgICAgICAgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2tzIiwKKwkJCSAgICAgICBwYWNrX2luZGV4ZXMtPm5yKSwKKwkJCSAgICBwYWNrX2luZGV4ZXMtPm5yKTsKKwkJY3R4LT5wcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MocHJvZ3Jlc3NfdGl0bGUuYnVmLCAwKTsKKwkJY3R4LT5wcm9ncmVzc19kb25lID0gMDsKKwl9CisJZm9yIChpID0gMDsgaSA8IHBhY2tfaW5kZXhlcy0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwkJc3RyYnVmX3NldGxlbigmcGFja25hbWUsIGRpcmxlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJnBhY2tuYW1lLCBwYWNrX2luZGV4ZXMtPml0ZW1zW2ldLnN0cmluZyk7CisJCXAgPSBhZGRfcGFja2VkX2dpdChwYWNrbmFtZS5idWYsIHBhY2tuYW1lLmxlbiwgMSk7CisJCWlmICghcCkgeworCQkJZXJyb3IoXygiZXJyb3IgYWRkaW5nIHBhY2sgJXMiKSwgcGFja25hbWUuYnVmKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAob3Blbl9wYWNrX2luZGV4KHApKSB7CisJCQllcnJvcihfKCJlcnJvciBvcGVuaW5nIGluZGV4IGZvciAlcyIpLCBwYWNrbmFtZS5idWYpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWZvcl9lYWNoX29iamVjdF9pbl9wYWNrKHAsIGFkZF9wYWNrZWRfY29tbWl0cywgY3R4LAorCQkJCQlGT1JfRUFDSF9PQkpFQ1RfUEFDS19PUkRFUik7CisJCWNsb3NlX3BhY2socCk7CisJCWZyZWUocCk7CisJfQorCisJc3RvcF9wcm9ncmVzcygmY3R4LT5wcm9ncmVzcyk7CisJc3RyYnVmX3JlbGVhc2UoJnByb2dyZXNzX3RpdGxlKTsKKwlzdHJidWZfcmVsZWFzZSgmcGFja25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9vaWRzX2Zyb21fY29tbWl0cyhzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCwKKwkJCQkgIHN0cnVjdCBvaWRzZXQgKmNvbW1pdHMpCit7CisJdWludDMyX3QgaSA9IDA7CisJc3RydWN0IHN0cmJ1ZiBwcm9ncmVzc190aXRsZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvaWRzZXRfaXRlciBpdGVyOworCXN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKworCWlmICghb2lkc2V0X3NpemUoY29tbWl0cykpCisJCXJldHVybiAwOworCisJaWYgKGN0eC0+cmVwb3J0X3Byb2dyZXNzKSB7CisJCXN0cmJ1Zl9hZGRmKCZwcm9ncmVzc190aXRsZSwKKwkJCSAgICBRXygiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiLAorCQkJICAgICAgICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBmcm9tICVkIHJlZnMiLAorCQkJICAgICAgIG9pZHNldF9zaXplKGNvbW1pdHMpKSwKKwkJCSAgICBvaWRzZXRfc2l6ZShjb21taXRzKSk7CisJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJCQlwcm9ncmVzc190aXRsZS5idWYsCisJCQkJCW9pZHNldF9zaXplKGNvbW1pdHMpKTsKKwl9CisKKwlvaWRzZXRfaXRlcl9pbml0KGNvbW1pdHMsICZpdGVyKTsKKwl3aGlsZSAoKG9pZCA9IG9pZHNldF9pdGVyX25leHQoJml0ZXIpKSkgeworCQlzdHJ1Y3QgY29tbWl0ICpyZXN1bHQ7CisKKwkJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCArK2kpOworCisJCXJlc3VsdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShjdHgtPnIsIG9pZCwgMSk7CisJCWlmIChyZXN1bHQpIHsKKwkJCUFMTE9DX0dST1coY3R4LT5vaWRzLmxpc3QsIGN0eC0+b2lkcy5uciArIDEsIGN0eC0+b2lkcy5hbGxvYyk7CisJCQlvaWRjcHkoJmN0eC0+b2lkcy5saXN0W2N0eC0+b2lkcy5ucl0sICYocmVzdWx0LT5vYmplY3Qub2lkKSk7CisJCQljdHgtPm9pZHMubnIrKzsKKwkJfSBlbHNlIGlmIChjdHgtPmNoZWNrX29pZHMpIHsKKwkJCWVycm9yKF8oImludmFsaWQgY29tbWl0IG9iamVjdCBpZDogJXMiKSwKKwkJCSAgICAgIG9pZF90b19oZXgob2lkKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlzdG9wX3Byb2dyZXNzKCZjdHgtPnByb2dyZXNzKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJvZ3Jlc3NfdGl0bGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfb2lkc19mcm9tX2FsbF9wYWNrcyhzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKK3sKKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpCisJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJXygiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggYW1vbmcgcGFja2VkIG9iamVjdHMiKSwKKwkJCWN0eC0+YXBwcm94X25yX29iamVjdHMpOworCWZvcl9lYWNoX3BhY2tlZF9vYmplY3QoYWRkX3BhY2tlZF9jb21taXRzLCBjdHgsCisJCQkgICAgICAgRk9SX0VBQ0hfT0JKRUNUX1BBQ0tfT1JERVIpOworCWlmIChjdHgtPnByb2dyZXNzX2RvbmUgPCBjdHgtPmFwcHJveF9ucl9vYmplY3RzKQorCQlkaXNwbGF5X3Byb2dyZXNzKGN0eC0+cHJvZ3Jlc3MsIGN0eC0+YXBwcm94X25yX29iamVjdHMpOworCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOworfQorCitzdGF0aWMgdWludDMyX3QgY291bnRfZGlzdGluY3RfY29tbWl0cyhzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKK3sKKwl1aW50MzJfdCBpLCBjb3VudF9kaXN0aW5jdCA9IDE7CisKKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpCisJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJXygiQ291bnRpbmcgZGlzdGluY3QgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiKSwKKwkJCWN0eC0+b2lkcy5ucik7CisJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCAwKTsgLyogVE9ETzogTWVhc3VyZSBRU09SVCgpIHByb2dyZXNzICovCisJUVNPUlQoY3R4LT5vaWRzLmxpc3QsIGN0eC0+b2lkcy5uciwgb2lkX2NvbXBhcmUpOworCisJZm9yIChpID0gMTsgaSA8IGN0eC0+b2lkcy5ucjsgaSsrKSB7CisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgaSArIDEpOworCQlpZiAoIW9pZGVxKCZjdHgtPm9pZHMubGlzdFtpIC0gMV0sICZjdHgtPm9pZHMubGlzdFtpXSkpIHsKKwkJCWlmIChjdHgtPnNwbGl0KSB7CisJCQkJc3RydWN0IGNvbW1pdCAqYyA9IGxvb2t1cF9jb21taXQoY3R4LT5yLCAmY3R4LT5vaWRzLmxpc3RbaV0pOworCisJCQkJaWYgKCFjIHx8IGMtPmdyYXBoX3BvcyAhPSBDT01NSVRfTk9UX0ZST01fR1JBUEgpCisJCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQljb3VudF9kaXN0aW5jdCsrOworCQl9CisJfQorCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOworCisJcmV0dXJuIGNvdW50X2Rpc3RpbmN0OworfQorCitzdGF0aWMgdm9pZCBjb3B5X29pZHNfdG9fY29tbWl0cyhzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKK3sKKwl1aW50MzJfdCBpOworCWVudW0gY29tbWl0X2dyYXBoX3NwbGl0X2ZsYWdzIGZsYWdzID0gY3R4LT5zcGxpdF9vcHRzID8KKwkJY3R4LT5zcGxpdF9vcHRzLT5mbGFncyA6IENPTU1JVF9HUkFQSF9TUExJVF9VTlNQRUNJRklFRDsKKworCWN0eC0+bnVtX2V4dHJhX2VkZ2VzID0gMDsKKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpCisJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJXygiRmluZGluZyBleHRyYSBlZGdlcyBpbiBjb21taXQgZ3JhcGgiKSwKKwkJCWN0eC0+b2lkcy5ucik7CisJZm9yIChpID0gMDsgaSA8IGN0eC0+b2lkcy5ucjsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBudW1fcGFyZW50czsKKworCQlkaXNwbGF5X3Byb2dyZXNzKGN0eC0+cHJvZ3Jlc3MsIGkgKyAxKTsKKwkJaWYgKGkgPiAwICYmIG9pZGVxKCZjdHgtPm9pZHMubGlzdFtpIC0gMV0sICZjdHgtPm9pZHMubGlzdFtpXSkpCisJCQljb250aW51ZTsKKworCQlBTExPQ19HUk9XKGN0eC0+Y29tbWl0cy5saXN0LCBjdHgtPmNvbW1pdHMubnIgKyAxLCBjdHgtPmNvbW1pdHMuYWxsb2MpOworCQljdHgtPmNvbW1pdHMubGlzdFtjdHgtPmNvbW1pdHMubnJdID0gbG9va3VwX2NvbW1pdChjdHgtPnIsICZjdHgtPm9pZHMubGlzdFtpXSk7CisKKwkJaWYgKGN0eC0+c3BsaXQgJiYgZmxhZ3MgIT0gQ09NTUlUX0dSQVBIX1NQTElUX1JFUExBQ0UgJiYKKwkJICAgIGN0eC0+Y29tbWl0cy5saXN0W2N0eC0+Y29tbWl0cy5ucl0tPmdyYXBoX3BvcyAhPSBDT01NSVRfTk9UX0ZST01fR1JBUEgpCisJCQljb250aW51ZTsKKworCQlpZiAoY3R4LT5zcGxpdCAmJiBmbGFncyA9PSBDT01NSVRfR1JBUEhfU1BMSVRfUkVQTEFDRSkKKwkJCXBhcnNlX2NvbW1pdChjdHgtPmNvbW1pdHMubGlzdFtjdHgtPmNvbW1pdHMubnJdKTsKKwkJZWxzZQorCQkJcGFyc2VfY29tbWl0X25vX2dyYXBoKGN0eC0+Y29tbWl0cy5saXN0W2N0eC0+Y29tbWl0cy5ucl0pOworCisJCW51bV9wYXJlbnRzID0gY29tbWl0X2xpc3RfY291bnQoY3R4LT5jb21taXRzLmxpc3RbY3R4LT5jb21taXRzLm5yXS0+cGFyZW50cyk7CisJCWlmIChudW1fcGFyZW50cyA+IDIpCisJCQljdHgtPm51bV9leHRyYV9lZGdlcyArPSBudW1fcGFyZW50cyAtIDE7CisKKwkJY3R4LT5jb21taXRzLm5yKys7CisJfQorCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW50IHdyaXRlX2dyYXBoX2NodW5rX2Jhc2VfMShzdHJ1Y3QgaGFzaGZpbGUgKmYsCisJCQkJICAgIHN0cnVjdCBjb21taXRfZ3JhcGggKmcpCit7CisJaW50IG51bSA9IDA7CisKKwlpZiAoIWcpCisJCXJldHVybiAwOworCisJbnVtID0gd3JpdGVfZ3JhcGhfY2h1bmtfYmFzZV8xKGYsIGctPmJhc2VfZ3JhcGgpOworCWhhc2h3cml0ZShmLCBnLT5vaWQuaGFzaCwgdGhlX2hhc2hfYWxnby0+cmF3c3opOworCXJldHVybiBudW0gKyAxOworfQorCitzdGF0aWMgaW50IHdyaXRlX2dyYXBoX2NodW5rX2Jhc2Uoc3RydWN0IGhhc2hmaWxlICpmLAorCQkJCSAgc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJaW50IG51bSA9IHdyaXRlX2dyYXBoX2NodW5rX2Jhc2VfMShmLCBjdHgtPm5ld19iYXNlX2dyYXBoKTsKKworCWlmIChudW0gIT0gY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAtIDEpIHsKKwkJZXJyb3IoXygiZmFpbGVkIHRvIHdyaXRlIGNvcnJlY3QgbnVtYmVyIG9mIGJhc2UgZ3JhcGggaWRzIikpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfY29tbWl0X2dyYXBoX2ZpbGUoc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJdWludDMyX3QgaTsKKwlpbnQgZmQ7CisJc3RydWN0IGhhc2hmaWxlICpmOworCXN0cnVjdCBsb2NrX2ZpbGUgbGsgPSBMT0NLX0lOSVQ7CisJdWludDMyX3QgY2h1bmtfaWRzW01BWF9OVU1fQ0hVTktTICsgMV07CisJdWludDY0X3QgY2h1bmtfb2Zmc2V0c1tNQVhfTlVNX0NIVU5LUyArIDFdOworCWNvbnN0IHVuc2lnbmVkIGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCXN0cnVjdCBzdHJidWYgcHJvZ3Jlc3NfdGl0bGUgPSBTVFJCVUZfSU5JVDsKKwlpbnQgbnVtX2NodW5rcyA9IDM7CisJc3RydWN0IG9iamVjdF9pZCBmaWxlX2hhc2g7CisJY29uc3Qgc3RydWN0IGJsb29tX2ZpbHRlcl9zZXR0aW5ncyBibG9vbV9zZXR0aW5ncyA9IERFRkFVTFRfQkxPT01fRklMVEVSX1NFVFRJTkdTOworCisJaWYgKGN0eC0+c3BsaXQpIHsKKwkJc3RydWN0IHN0cmJ1ZiB0bXBfZmlsZSA9IFNUUkJVRl9JTklUOworCisJCXN0cmJ1Zl9hZGRmKCZ0bXBfZmlsZSwKKwkJCSAgICAiJXMvaW5mby9jb21taXQtZ3JhcGhzL3RtcF9ncmFwaF9YWFhYWFgiLAorCQkJICAgIGN0eC0+b2RiLT5wYXRoKTsKKwkJY3R4LT5ncmFwaF9uYW1lID0gc3RyYnVmX2RldGFjaCgmdG1wX2ZpbGUsIE5VTEwpOworCX0gZWxzZSB7CisJCWN0eC0+Z3JhcGhfbmFtZSA9IGdldF9jb21taXRfZ3JhcGhfZmlsZW5hbWUoY3R4LT5vZGIpOworCX0KKworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGN0eC0+Z3JhcGhfbmFtZSkpIHsKKwkJVU5MRUFLKGN0eC0+Z3JhcGhfbmFtZSk7CisJCWVycm9yKF8oInVuYWJsZSB0byBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAlcyIpLAorCQkJY3R4LT5ncmFwaF9uYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChjdHgtPnNwbGl0KSB7CisJCWNoYXIgKmxvY2tfbmFtZSA9IGdldF9jaGFpbl9maWxlbmFtZShjdHgtPm9kYik7CisKKwkJaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZV9tb2RlKCZsaywgbG9ja19uYW1lLAorCQkJCQkgICAgICAgTE9DS19ESUVfT05fRVJST1IsIDA0NDQpOworCisJCWZkID0gZ2l0X21rc3RlbXBfbW9kZShjdHgtPmdyYXBoX25hbWUsIDA0NDQpOworCQlpZiAoZmQgPCAwKSB7CisJCQllcnJvcihfKCJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBncmFwaCBsYXllciIpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0oY3R4LT5ncmFwaF9uYW1lKSkgeworCQkJZXJyb3IoXygidW5hYmxlIHRvIGFkanVzdCBzaGFyZWQgcGVybWlzc2lvbnMgZm9yICclcyciKSwKKwkJCSAgICAgIGN0eC0+Z3JhcGhfbmFtZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlmID0gaGFzaGZkKGZkLCBjdHgtPmdyYXBoX25hbWUpOworCX0gZWxzZSB7CisJCWhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGVfbW9kZSgmbGssIGN0eC0+Z3JhcGhfbmFtZSwKKwkJCQkJICAgICAgIExPQ0tfRElFX09OX0VSUk9SLCAwNDQ0KTsKKwkJZmQgPSBsay50ZW1wZmlsZS0+ZmQ7CisJCWYgPSBoYXNoZmQobGsudGVtcGZpbGUtPmZkLCBsay50ZW1wZmlsZS0+ZmlsZW5hbWUuYnVmKTsKKwl9CisKKwljaHVua19pZHNbMF0gPSBHUkFQSF9DSFVOS0lEX09JREZBTk9VVDsKKwljaHVua19pZHNbMV0gPSBHUkFQSF9DSFVOS0lEX09JRExPT0tVUDsKKwljaHVua19pZHNbMl0gPSBHUkFQSF9DSFVOS0lEX0RBVEE7CisJaWYgKGN0eC0+bnVtX2V4dHJhX2VkZ2VzKSB7CisJCWNodW5rX2lkc1tudW1fY2h1bmtzXSA9IEdSQVBIX0NIVU5LSURfRVhUUkFFREdFUzsKKwkJbnVtX2NodW5rcysrOworCX0KKwlpZiAoY3R4LT5jaGFuZ2VkX3BhdGhzKSB7CisJCWNodW5rX2lkc1tudW1fY2h1bmtzXSA9IEdSQVBIX0NIVU5LSURfQkxPT01JTkRFWEVTOworCQludW1fY2h1bmtzKys7CisJCWNodW5rX2lkc1tudW1fY2h1bmtzXSA9IEdSQVBIX0NIVU5LSURfQkxPT01EQVRBOworCQludW1fY2h1bmtzKys7CisJfQorCWlmIChjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyID4gMSkgeworCQljaHVua19pZHNbbnVtX2NodW5rc10gPSBHUkFQSF9DSFVOS0lEX0JBU0U7CisJCW51bV9jaHVua3MrKzsKKwl9CisKKwljaHVua19pZHNbbnVtX2NodW5rc10gPSAwOworCisJY2h1bmtfb2Zmc2V0c1swXSA9IDggKyAobnVtX2NodW5rcyArIDEpICogR1JBUEhfQ0hVTktMT09LVVBfV0lEVEg7CisJY2h1bmtfb2Zmc2V0c1sxXSA9IGNodW5rX29mZnNldHNbMF0gKyBHUkFQSF9GQU5PVVRfU0laRTsKKwljaHVua19vZmZzZXRzWzJdID0gY2h1bmtfb2Zmc2V0c1sxXSArIGhhc2hzeiAqIGN0eC0+Y29tbWl0cy5ucjsKKwljaHVua19vZmZzZXRzWzNdID0gY2h1bmtfb2Zmc2V0c1syXSArIChoYXNoc3ogKyAxNikgKiBjdHgtPmNvbW1pdHMubnI7CisKKwludW1fY2h1bmtzID0gMzsKKwlpZiAoY3R4LT5udW1fZXh0cmFfZWRnZXMpIHsKKwkJY2h1bmtfb2Zmc2V0c1tudW1fY2h1bmtzICsgMV0gPSBjaHVua19vZmZzZXRzW251bV9jaHVua3NdICsKKwkJCQkJCTQgKiBjdHgtPm51bV9leHRyYV9lZGdlczsKKwkJbnVtX2NodW5rcysrOworCX0KKwlpZiAoY3R4LT5jaGFuZ2VkX3BhdGhzKSB7CisJCWNodW5rX29mZnNldHNbbnVtX2NodW5rcyArIDFdID0gY2h1bmtfb2Zmc2V0c1tudW1fY2h1bmtzXSArCisJCQkJCQlzaXplb2YodWludDMyX3QpICogY3R4LT5jb21taXRzLm5yOworCQludW1fY2h1bmtzKys7CisKKwkJY2h1bmtfb2Zmc2V0c1tudW1fY2h1bmtzICsgMV0gPSBjaHVua19vZmZzZXRzW251bV9jaHVua3NdICsKKwkJCQkJCXNpemVvZih1aW50MzJfdCkgKiAzICsgY3R4LT50b3RhbF9ibG9vbV9maWx0ZXJfZGF0YV9zaXplOworCQludW1fY2h1bmtzKys7CisJfQorCWlmIChjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyID4gMSkgeworCQljaHVua19vZmZzZXRzW251bV9jaHVua3MgKyAxXSA9IGNodW5rX29mZnNldHNbbnVtX2NodW5rc10gKworCQkJCQkJaGFzaHN6ICogKGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgLSAxKTsKKwkJbnVtX2NodW5rcysrOworCX0KKworCWhhc2h3cml0ZV9iZTMyKGYsIEdSQVBIX1NJR05BVFVSRSk7CisKKwloYXNod3JpdGVfdTgoZiwgR1JBUEhfVkVSU0lPTik7CisJaGFzaHdyaXRlX3U4KGYsIG9pZF92ZXJzaW9uKCkpOworCWhhc2h3cml0ZV91OChmLCBudW1fY2h1bmtzKTsKKwloYXNod3JpdGVfdTgoZiwgY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAtIDEpOworCisJZm9yIChpID0gMDsgaSA8PSBudW1fY2h1bmtzOyBpKyspIHsKKwkJdWludDMyX3QgY2h1bmtfd3JpdGVbM107CisKKwkJY2h1bmtfd3JpdGVbMF0gPSBodG9ubChjaHVua19pZHNbaV0pOworCQljaHVua193cml0ZVsxXSA9IGh0b25sKGNodW5rX29mZnNldHNbaV0gPj4gMzIpOworCQljaHVua193cml0ZVsyXSA9IGh0b25sKGNodW5rX29mZnNldHNbaV0gJiAweGZmZmZmZmZmKTsKKwkJaGFzaHdyaXRlKGYsIGNodW5rX3dyaXRlLCAxMik7CisJfQorCisJaWYgKGN0eC0+cmVwb3J0X3Byb2dyZXNzKSB7CisJCXN0cmJ1Zl9hZGRmKCZwcm9ncmVzc190aXRsZSwKKwkJCSAgICBRXygiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3MiLAorCQkJICAgICAgICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzc2VzIiwKKwkJCSAgICAgICBudW1fY2h1bmtzKSwKKwkJCSAgICBudW1fY2h1bmtzKTsKKwkJY3R4LT5wcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoCisJCQlwcm9ncmVzc190aXRsZS5idWYsCisJCQludW1fY2h1bmtzICogY3R4LT5jb21taXRzLm5yKTsKKwl9CisJd3JpdGVfZ3JhcGhfY2h1bmtfZmFub3V0KGYsIGN0eCk7CisJd3JpdGVfZ3JhcGhfY2h1bmtfb2lkcyhmLCBoYXNoc3osIGN0eCk7CisJd3JpdGVfZ3JhcGhfY2h1bmtfZGF0YShmLCBoYXNoc3osIGN0eCk7CisJaWYgKGN0eC0+bnVtX2V4dHJhX2VkZ2VzKQorCQl3cml0ZV9ncmFwaF9jaHVua19leHRyYV9lZGdlcyhmLCBjdHgpOworCWlmIChjdHgtPmNoYW5nZWRfcGF0aHMpIHsKKwkJd3JpdGVfZ3JhcGhfY2h1bmtfYmxvb21faW5kZXhlcyhmLCBjdHgpOworCQl3cml0ZV9ncmFwaF9jaHVua19ibG9vbV9kYXRhKGYsIGN0eCwgJmJsb29tX3NldHRpbmdzKTsKKwl9CisJaWYgKGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgPiAxICYmCisJICAgIHdyaXRlX2dyYXBoX2NodW5rX2Jhc2UoZiwgY3R4KSkgeworCQlyZXR1cm4gLTE7CisJfQorCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcm9ncmVzc190aXRsZSk7CisKKwlpZiAoY3R4LT5zcGxpdCAmJiBjdHgtPmJhc2VfZ3JhcGhfbmFtZSAmJiBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyID4gMSkgeworCQljaGFyICpuZXdfYmFzZV9oYXNoID0geHN0cmR1cChvaWRfdG9faGV4KCZjdHgtPm5ld19iYXNlX2dyYXBoLT5vaWQpKTsKKwkJY2hhciAqbmV3X2Jhc2VfbmFtZSA9IGdldF9zcGxpdF9ncmFwaF9maWxlbmFtZShjdHgtPm5ld19iYXNlX2dyYXBoLT5vZGIsIG5ld19iYXNlX2hhc2gpOworCisJCWZyZWUoY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2FmdGVyW2N0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgLSAyXSk7CisJCWZyZWUoY3R4LT5jb21taXRfZ3JhcGhfaGFzaF9hZnRlcltjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyIC0gMl0pOworCQljdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYWZ0ZXJbY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAtIDJdID0gbmV3X2Jhc2VfbmFtZTsKKwkJY3R4LT5jb21taXRfZ3JhcGhfaGFzaF9hZnRlcltjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyIC0gMl0gPSBuZXdfYmFzZV9oYXNoOworCX0KKworCWNsb3NlX2NvbW1pdF9ncmFwaChjdHgtPnItPm9iamVjdHMpOworCWZpbmFsaXplX2hhc2hmaWxlKGYsIGZpbGVfaGFzaC5oYXNoLCBDU1VNX0hBU0hfSU5fU1RSRUFNIHwgQ1NVTV9GU1lOQyk7CisKKwlpZiAoY3R4LT5zcGxpdCkgeworCQlGSUxFICpjaGFpbmYgPSBmZG9wZW5fbG9ja19maWxlKCZsaywgInciKTsKKwkJY2hhciAqZmluYWxfZ3JhcGhfbmFtZTsKKwkJaW50IHJlc3VsdDsKKworCQljbG9zZShmZCk7CisKKwkJaWYgKCFjaGFpbmYpIHsKKwkJCWVycm9yKF8oInVuYWJsZSB0byBvcGVuIGNvbW1pdC1ncmFwaCBjaGFpbiBmaWxlIikpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKGN0eC0+YmFzZV9ncmFwaF9uYW1lKSB7CisJCQljb25zdCBjaGFyICpkZXN0OworCQkJaW50IGlkeCA9IGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgLSAxOworCQkJaWYgKGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgPiAxKQorCQkJCWlkeC0tOworCisJCQlkZXN0ID0gY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2FmdGVyW2lkeF07CisKKwkJCWlmIChzdHJjbXAoY3R4LT5iYXNlX2dyYXBoX25hbWUsIGRlc3QpKSB7CisJCQkJcmVzdWx0ID0gcmVuYW1lKGN0eC0+YmFzZV9ncmFwaF9uYW1lLCBkZXN0KTsKKworCQkJCWlmIChyZXN1bHQpIHsKKwkJCQkJZXJyb3IoXygiZmFpbGVkIHRvIHJlbmFtZSBiYXNlIGNvbW1pdC1ncmFwaCBmaWxlIikpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJY2hhciAqZ3JhcGhfbmFtZSA9IGdldF9jb21taXRfZ3JhcGhfZmlsZW5hbWUoY3R4LT5vZGIpOworCQkJdW5saW5rKGdyYXBoX25hbWUpOworCQl9CisKKwkJY3R4LT5jb21taXRfZ3JhcGhfaGFzaF9hZnRlcltjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyIC0gMV0gPSB4c3RyZHVwKG9pZF90b19oZXgoJmZpbGVfaGFzaCkpOworCQlmaW5hbF9ncmFwaF9uYW1lID0gZ2V0X3NwbGl0X2dyYXBoX2ZpbGVuYW1lKGN0eC0+b2RiLAorCQkJCQljdHgtPmNvbW1pdF9ncmFwaF9oYXNoX2FmdGVyW2N0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgLSAxXSk7CisJCWN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19hZnRlcltjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyIC0gMV0gPSBmaW5hbF9ncmFwaF9uYW1lOworCisJCXJlc3VsdCA9IHJlbmFtZShjdHgtPmdyYXBoX25hbWUsIGZpbmFsX2dyYXBoX25hbWUpOworCisJCWZvciAoaSA9IDA7IGkgPCBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyOyBpKyspCisJCQlmcHJpbnRmKGxrLnRlbXBmaWxlLT5mcCwgIiVzXG4iLCBjdHgtPmNvbW1pdF9ncmFwaF9oYXNoX2FmdGVyW2ldKTsKKworCQlpZiAocmVzdWx0KSB7CisJCQllcnJvcihfKCJmYWlsZWQgdG8gcmVuYW1lIHRlbXBvcmFyeSBjb21taXQtZ3JhcGggZmlsZSIpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCWNvbW1pdF9sb2NrX2ZpbGUoJmxrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcGxpdF9ncmFwaF9tZXJnZV9zdHJhdGVneShzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2dyYXBoICpnOworCXVpbnQzMl90IG51bV9jb21taXRzOworCWVudW0gY29tbWl0X2dyYXBoX3NwbGl0X2ZsYWdzIGZsYWdzID0gQ09NTUlUX0dSQVBIX1NQTElUX1VOU1BFQ0lGSUVEOworCXVpbnQzMl90IGk7CisKKwlpbnQgbWF4X2NvbW1pdHMgPSAwOworCWludCBzaXplX211bHQgPSAyOworCisJaWYgKGN0eC0+c3BsaXRfb3B0cykgeworCQltYXhfY29tbWl0cyA9IGN0eC0+c3BsaXRfb3B0cy0+bWF4X2NvbW1pdHM7CisKKwkJaWYgKGN0eC0+c3BsaXRfb3B0cy0+c2l6ZV9tdWx0aXBsZSkKKwkJCXNpemVfbXVsdCA9IGN0eC0+c3BsaXRfb3B0cy0+c2l6ZV9tdWx0aXBsZTsKKworCQlmbGFncyA9IGN0eC0+c3BsaXRfb3B0cy0+ZmxhZ3M7CisJfQorCisJZyA9IGN0eC0+ci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoOworCW51bV9jb21taXRzID0gY3R4LT5jb21taXRzLm5yOworCWlmIChmbGFncyA9PSBDT01NSVRfR1JBUEhfU1BMSVRfUkVQTEFDRSkKKwkJY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciA9IDE7CisJZWxzZQorCQljdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyID0gY3R4LT5udW1fY29tbWl0X2dyYXBoc19iZWZvcmUgKyAxOworCisJaWYgKGZsYWdzICE9IENPTU1JVF9HUkFQSF9TUExJVF9NRVJHRV9QUk9ISUJJVEVEICYmCisJICAgIGZsYWdzICE9IENPTU1JVF9HUkFQSF9TUExJVF9SRVBMQUNFKSB7CisJCXdoaWxlIChnICYmIChnLT5udW1fY29tbWl0cyA8PSBzaXplX211bHQgKiBudW1fY29tbWl0cyB8fAorCQkJICAgIChtYXhfY29tbWl0cyAmJiBudW1fY29tbWl0cyA+IG1heF9jb21taXRzKSkpIHsKKwkJCWlmIChnLT5vZGIgIT0gY3R4LT5vZGIpCisJCQkJYnJlYWs7CisKKwkJCW51bV9jb21taXRzICs9IGctPm51bV9jb21taXRzOworCQkJZyA9IGctPmJhc2VfZ3JhcGg7CisKKwkJCWN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXItLTsKKwkJfQorCX0KKworCWlmIChmbGFncyAhPSBDT01NSVRfR1JBUEhfU1BMSVRfUkVQTEFDRSkKKwkJY3R4LT5uZXdfYmFzZV9ncmFwaCA9IGc7CisJZWxzZSBpZiAoY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAhPSAxKQorCQlCVUcoInNwbGl0X2dyYXBoX21lcmdlX3N0cmF0ZWd5OiBudW1fY29tbWl0X2dyYXBoc19hZnRlciAiCisJCSAgICAic2hvdWxkIGJlIDEgd2l0aCAtLXNwbGl0PXJlcGxhY2UiKTsKKworCWlmIChjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyID09IDIpIHsKKwkJY2hhciAqb2xkX2dyYXBoX25hbWUgPSBnZXRfY29tbWl0X2dyYXBoX2ZpbGVuYW1lKGctPm9kYik7CisKKwkJaWYgKCFzdHJjbXAoZy0+ZmlsZW5hbWUsIG9sZF9ncmFwaF9uYW1lKSAmJgorCQkgICAgZy0+b2RiICE9IGN0eC0+b2RiKSB7CisJCQljdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyID0gMTsKKwkJCWN0eC0+bmV3X2Jhc2VfZ3JhcGggPSBOVUxMOworCQl9CisKKwkJZnJlZShvbGRfZ3JhcGhfbmFtZSk7CisJfQorCisJQ0FMTE9DX0FSUkFZKGN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19hZnRlciwgY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlcik7CisJQ0FMTE9DX0FSUkFZKGN0eC0+Y29tbWl0X2dyYXBoX2hhc2hfYWZ0ZXIsIGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIpOworCisJZm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgJiYKKwkJICAgIGkgPCBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2JlZm9yZTsgaSsrKQorCQljdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYWZ0ZXJbaV0gPSB4c3RyZHVwKGN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19iZWZvcmVbaV0pOworCisJaSA9IGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYmVmb3JlIC0gMTsKKwlnID0gY3R4LT5yLT5vYmplY3RzLT5jb21taXRfZ3JhcGg7CisKKwl3aGlsZSAoZykgeworCQlpZiAoaSA8IGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIpCisJCQljdHgtPmNvbW1pdF9ncmFwaF9oYXNoX2FmdGVyW2ldID0geHN0cmR1cChvaWRfdG9faGV4KCZnLT5vaWQpKTsKKworCQlpLS07CisJCWcgPSBnLT5iYXNlX2dyYXBoOworCX0KK30KKworc3RhdGljIHZvaWQgbWVyZ2VfY29tbWl0X2dyYXBoKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4LAorCQkJICAgICAgIHN0cnVjdCBjb21taXRfZ3JhcGggKmcpCit7CisJdWludDMyX3QgaTsKKwl1aW50MzJfdCBvZmZzZXQgPSBnLT5udW1fY29tbWl0c19pbl9iYXNlOworCisJQUxMT0NfR1JPVyhjdHgtPmNvbW1pdHMubGlzdCwgY3R4LT5jb21taXRzLm5yICsgZy0+bnVtX2NvbW1pdHMsIGN0eC0+Y29tbWl0cy5hbGxvYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZy0+bnVtX2NvbW1pdHM7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJc3RydWN0IGNvbW1pdCAqcmVzdWx0OworCisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgaSArIDEpOworCisJCWxvYWRfb2lkX2Zyb21fZ3JhcGgoZywgaSArIG9mZnNldCwgJm9pZCk7CisKKwkJLyogb25seSBhZGQgY29tbWl0cyBpZiB0aGV5IHN0aWxsIGV4aXN0IGluIHRoZSByZXBvICovCisJCXJlc3VsdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShjdHgtPnIsICZvaWQsIDEpOworCisJCWlmIChyZXN1bHQpIHsKKwkJCWN0eC0+Y29tbWl0cy5saXN0W2N0eC0+Y29tbWl0cy5ucl0gPSByZXN1bHQ7CisJCQljdHgtPmNvbW1pdHMubnIrKzsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBjb21taXRfY29tcGFyZShjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqYSA9ICooY29uc3Qgc3RydWN0IGNvbW1pdCAqKilfYTsKKwljb25zdCBzdHJ1Y3QgY29tbWl0ICpiID0gKihjb25zdCBzdHJ1Y3QgY29tbWl0ICoqKV9iOworCXJldHVybiBvaWRjbXAoJmEtPm9iamVjdC5vaWQsICZiLT5vYmplY3Qub2lkKTsKK30KKworc3RhdGljIHZvaWQgc29ydF9hbmRfc2Nhbl9tZXJnZWRfY29tbWl0cyhzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKK3sKKwl1aW50MzJfdCBpOworCisJaWYgKGN0eC0+cmVwb3J0X3Byb2dyZXNzKQorCQljdHgtPnByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcygKKwkJCQkJXygiU2Nhbm5pbmcgbWVyZ2VkIGNvbW1pdHMiKSwKKwkJCQkJY3R4LT5jb21taXRzLm5yKTsKKworCVFTT1JUKGN0eC0+Y29tbWl0cy5saXN0LCBjdHgtPmNvbW1pdHMubnIsIGNvbW1pdF9jb21wYXJlKTsKKworCWN0eC0+bnVtX2V4dHJhX2VkZ2VzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgY3R4LT5jb21taXRzLm5yOyBpKyspIHsKKwkJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCBpKTsKKworCQlpZiAoaSAmJiBvaWRlcSgmY3R4LT5jb21taXRzLmxpc3RbaSAtIDFdLT5vYmplY3Qub2lkLAorCQkJICAmY3R4LT5jb21taXRzLmxpc3RbaV0tPm9iamVjdC5vaWQpKSB7CisJCQlkaWUoXygidW5leHBlY3RlZCBkdXBsaWNhdGUgY29tbWl0IGlkICVzIiksCisJCQkgICAgb2lkX3RvX2hleCgmY3R4LT5jb21taXRzLmxpc3RbaV0tPm9iamVjdC5vaWQpKTsKKwkJfSBlbHNlIHsKKwkJCXVuc2lnbmVkIGludCBudW1fcGFyZW50czsKKworCQkJbnVtX3BhcmVudHMgPSBjb21taXRfbGlzdF9jb3VudChjdHgtPmNvbW1pdHMubGlzdFtpXS0+cGFyZW50cyk7CisJCQlpZiAobnVtX3BhcmVudHMgPiAyKQorCQkJCWN0eC0+bnVtX2V4dHJhX2VkZ2VzICs9IG51bV9wYXJlbnRzIC0gMTsKKwkJfQorCX0KKworCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOworfQorCitzdGF0aWMgdm9pZCBtZXJnZV9jb21taXRfZ3JhcGhzKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBjb21taXRfZ3JhcGggKmcgPSBjdHgtPnItPm9iamVjdHMtPmNvbW1pdF9ncmFwaDsKKwl1aW50MzJfdCBjdXJyZW50X2dyYXBoX251bWJlciA9IGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYmVmb3JlOworCisJd2hpbGUgKGcgJiYgY3VycmVudF9ncmFwaF9udW1iZXIgPj0gY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlcikgeworCQljdXJyZW50X2dyYXBoX251bWJlci0tOworCisJCWlmIChjdHgtPnJlcG9ydF9wcm9ncmVzcykKKwkJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKF8oIk1lcmdpbmcgY29tbWl0LWdyYXBoIiksIDApOworCisJCW1lcmdlX2NvbW1pdF9ncmFwaChjdHgsIGcpOworCQlzdG9wX3Byb2dyZXNzKCZjdHgtPnByb2dyZXNzKTsKKworCQlnID0gZy0+YmFzZV9ncmFwaDsKKwl9CisKKwlpZiAoZykgeworCQljdHgtPm5ld19iYXNlX2dyYXBoID0gZzsKKwkJY3R4LT5uZXdfbnVtX2NvbW1pdHNfaW5fYmFzZSA9IGctPm51bV9jb21taXRzICsgZy0+bnVtX2NvbW1pdHNfaW5fYmFzZTsKKwl9CisKKwlpZiAoY3R4LT5uZXdfYmFzZV9ncmFwaCkKKwkJY3R4LT5iYXNlX2dyYXBoX25hbWUgPSB4c3RyZHVwKGN0eC0+bmV3X2Jhc2VfZ3JhcGgtPmZpbGVuYW1lKTsKKworCXNvcnRfYW5kX3NjYW5fbWVyZ2VkX2NvbW1pdHMoY3R4KTsKK30KKworc3RhdGljIHZvaWQgbWFya19jb21taXRfZ3JhcGhzKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQoreworCXVpbnQzMl90IGk7CisJdGltZV90IG5vdyA9IHRpbWUoTlVMTCk7CisKKwlmb3IgKGkgPSBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyIC0gMTsgaSA8IGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYmVmb3JlOyBpKyspIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCXN0cnVjdCB1dGltYnVmIHVwZGF0ZWRfdGltZTsKKworCQlzdGF0KGN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19iZWZvcmVbaV0sICZzdCk7CisKKwkJdXBkYXRlZF90aW1lLmFjdGltZSA9IHN0LnN0X2F0aW1lOworCQl1cGRhdGVkX3RpbWUubW9kdGltZSA9IG5vdzsKKwkJdXRpbWUoY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2JlZm9yZVtpXSwgJnVwZGF0ZWRfdGltZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBleHBpcmVfY29tbWl0X2dyYXBocyhzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlzaXplX3QgZGlybmFtZWxlbjsKKwl0aW1lc3RhbXBfdCBleHBpcmVfdGltZSA9IHRpbWUoTlVMTCk7CisKKwlpZiAoY3R4LT5zcGxpdF9vcHRzICYmIGN0eC0+c3BsaXRfb3B0cy0+ZXhwaXJlX3RpbWUpCisJCWV4cGlyZV90aW1lID0gY3R4LT5zcGxpdF9vcHRzLT5leHBpcmVfdGltZTsKKwlpZiAoIWN0eC0+c3BsaXQpIHsKKwkJY2hhciAqY2hhaW5fZmlsZV9uYW1lID0gZ2V0X2NoYWluX2ZpbGVuYW1lKGN0eC0+b2RiKTsKKwkJdW5saW5rKGNoYWluX2ZpbGVfbmFtZSk7CisJCWZyZWUoY2hhaW5fZmlsZV9uYW1lKTsKKwkJY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciA9IDA7CisJfQorCisJc3RyYnVmX2FkZHN0cigmcGF0aCwgY3R4LT5vZGItPnBhdGgpOworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsICIvaW5mby9jb21taXQtZ3JhcGhzIik7CisJZGlyID0gb3BlbmRpcihwYXRoLmJ1Zik7CisKKwlpZiAoIWRpcikKKwkJZ290byBvdXQ7CisKKwlzdHJidWZfYWRkY2goJnBhdGgsICcvJyk7CisJZGlybmFtZWxlbiA9IHBhdGgubGVuOworCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCXVpbnQzMl90IGksIGZvdW5kID0gMDsKKworCQlzdHJidWZfc2V0bGVuKCZwYXRoLCBkaXJuYW1lbGVuKTsKKwkJc3RyYnVmX2FkZHN0cigmcGF0aCwgZGUtPmRfbmFtZSk7CisKKwkJc3RhdChwYXRoLmJ1ZiwgJnN0KTsKKworCQlpZiAoc3Quc3RfbXRpbWUgPiBleHBpcmVfdGltZSkKKwkJCWNvbnRpbnVlOworCQlpZiAocGF0aC5sZW4gPCA2IHx8IHN0cmNtcChwYXRoLmJ1ZiArIHBhdGgubGVuIC0gNiwgIi5ncmFwaCIpKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXI7IGkrKykgeworCQkJaWYgKCFzdHJjbXAoY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2FmdGVyW2ldLAorCQkJCSAgICBwYXRoLmJ1ZikpIHsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoIWZvdW5kKQorCQkJdW5saW5rKHBhdGguYnVmKTsKKwl9CisKK291dDoKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7Cit9CisKK2ludCB3cml0ZV9jb21taXRfZ3JhcGgoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYiwKKwkJICAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqcGFja19pbmRleGVzLAorCQkgICAgICAgc3RydWN0IG9pZHNldCAqY29tbWl0cywKKwkJICAgICAgIGVudW0gY29tbWl0X2dyYXBoX3dyaXRlX2ZsYWdzIGZsYWdzLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHNwbGl0X2NvbW1pdF9ncmFwaF9vcHRzICpzcGxpdF9vcHRzKQoreworCXN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4OworCXVpbnQzMl90IGksIGNvdW50X2Rpc3RpbmN0ID0gMDsKKwlpbnQgcmVzID0gMDsKKwlpbnQgcmVwbGFjZSA9IDA7CisKKwlpZiAoIWNvbW1pdF9ncmFwaF9jb21wYXRpYmxlKHRoZV9yZXBvc2l0b3J5KSkKKwkJcmV0dXJuIDA7CisKKwljdHggPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQpKTsKKwljdHgtPnIgPSB0aGVfcmVwb3NpdG9yeTsKKwljdHgtPm9kYiA9IG9kYjsKKwljdHgtPmFwcGVuZCA9IGZsYWdzICYgQ09NTUlUX0dSQVBIX1dSSVRFX0FQUEVORCA/IDEgOiAwOworCWN0eC0+cmVwb3J0X3Byb2dyZXNzID0gZmxhZ3MgJiBDT01NSVRfR1JBUEhfV1JJVEVfUFJPR1JFU1MgPyAxIDogMDsKKwljdHgtPnNwbGl0ID0gZmxhZ3MgJiBDT01NSVRfR1JBUEhfV1JJVEVfU1BMSVQgPyAxIDogMDsKKwljdHgtPmNoZWNrX29pZHMgPSBmbGFncyAmIENPTU1JVF9HUkFQSF9XUklURV9DSEVDS19PSURTID8gMSA6IDA7CisJY3R4LT5zcGxpdF9vcHRzID0gc3BsaXRfb3B0czsKKwljdHgtPmNoYW5nZWRfcGF0aHMgPSBmbGFncyAmIENPTU1JVF9HUkFQSF9XUklURV9CTE9PTV9GSUxURVJTID8gMSA6IDA7CisJY3R4LT50b3RhbF9ibG9vbV9maWx0ZXJfZGF0YV9zaXplID0gMDsKKworCWlmIChjdHgtPnNwbGl0KSB7CisJCXN0cnVjdCBjb21taXRfZ3JhcGggKmc7CisJCXByZXBhcmVfY29tbWl0X2dyYXBoKGN0eC0+cik7CisKKwkJZyA9IGN0eC0+ci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoOworCisJCXdoaWxlIChnKSB7CisJCQljdHgtPm51bV9jb21taXRfZ3JhcGhzX2JlZm9yZSsrOworCQkJZyA9IGctPmJhc2VfZ3JhcGg7CisJCX0KKworCQlpZiAoY3R4LT5udW1fY29tbWl0X2dyYXBoc19iZWZvcmUpIHsKKwkJCUFMTE9DX0FSUkFZKGN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19iZWZvcmUsIGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYmVmb3JlKTsKKwkJCWkgPSBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2JlZm9yZTsKKwkJCWcgPSBjdHgtPnItPm9iamVjdHMtPmNvbW1pdF9ncmFwaDsKKworCQkJd2hpbGUgKGcpIHsKKwkJCQljdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYmVmb3JlWy0taV0gPSB4c3RyZHVwKGctPmZpbGVuYW1lKTsKKwkJCQlnID0gZy0+YmFzZV9ncmFwaDsKKwkJCX0KKwkJfQorCisJCWlmIChjdHgtPnNwbGl0X29wdHMpCisJCQlyZXBsYWNlID0gY3R4LT5zcGxpdF9vcHRzLT5mbGFncyAmIENPTU1JVF9HUkFQSF9TUExJVF9SRVBMQUNFOworCX0KKworCWN0eC0+YXBwcm94X25yX29iamVjdHMgPSBhcHByb3hpbWF0ZV9vYmplY3RfY291bnQoKTsKKwljdHgtPm9pZHMuYWxsb2MgPSBjdHgtPmFwcHJveF9ucl9vYmplY3RzIC8gMzI7CisKKwlpZiAoY3R4LT5zcGxpdCAmJiBzcGxpdF9vcHRzICYmIGN0eC0+b2lkcy5hbGxvYyA+IHNwbGl0X29wdHMtPm1heF9jb21taXRzKQorCQljdHgtPm9pZHMuYWxsb2MgPSBzcGxpdF9vcHRzLT5tYXhfY29tbWl0czsKKworCWlmIChjdHgtPmFwcGVuZCkgeworCQlwcmVwYXJlX2NvbW1pdF9ncmFwaF9vbmUoY3R4LT5yLCBjdHgtPm9kYik7CisJCWlmIChjdHgtPnItPm9iamVjdHMtPmNvbW1pdF9ncmFwaCkKKwkJCWN0eC0+b2lkcy5hbGxvYyArPSBjdHgtPnItPm9iamVjdHMtPmNvbW1pdF9ncmFwaC0+bnVtX2NvbW1pdHM7CisJfQorCisJaWYgKGN0eC0+b2lkcy5hbGxvYyA8IDEwMjQpCisJCWN0eC0+b2lkcy5hbGxvYyA9IDEwMjQ7CisJQUxMT0NfQVJSQVkoY3R4LT5vaWRzLmxpc3QsIGN0eC0+b2lkcy5hbGxvYyk7CisKKwlpZiAoY3R4LT5hcHBlbmQgJiYgY3R4LT5yLT5vYmplY3RzLT5jb21taXRfZ3JhcGgpIHsKKwkJc3RydWN0IGNvbW1pdF9ncmFwaCAqZyA9IGN0eC0+ci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoOworCQlmb3IgKGkgPSAwOyBpIDwgZy0+bnVtX2NvbW1pdHM7IGkrKykgeworCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCA9IGctPmNodW5rX29pZF9sb29rdXAgKyBnLT5oYXNoX2xlbiAqIGk7CisJCQloYXNoY3B5KGN0eC0+b2lkcy5saXN0W2N0eC0+b2lkcy5ucisrXS5oYXNoLCBoYXNoKTsKKwkJfQorCX0KKworCWlmIChwYWNrX2luZGV4ZXMpIHsKKwkJY3R4LT5vcmRlcl9ieV9wYWNrID0gMTsKKwkJaWYgKChyZXMgPSBmaWxsX29pZHNfZnJvbV9wYWNrcyhjdHgsIHBhY2tfaW5kZXhlcykpKQorCQkJZ290byBjbGVhbnVwOworCX0KKworCWlmIChjb21taXRzKSB7CisJCWlmICgocmVzID0gZmlsbF9vaWRzX2Zyb21fY29tbWl0cyhjdHgsIGNvbW1pdHMpKSkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoIXBhY2tfaW5kZXhlcyAmJiAhY29tbWl0cykgeworCQljdHgtPm9yZGVyX2J5X3BhY2sgPSAxOworCQlmaWxsX29pZHNfZnJvbV9hbGxfcGFja3MoY3R4KTsKKwl9CisKKwljbG9zZV9yZWFjaGFibGUoY3R4KTsKKworCWNvdW50X2Rpc3RpbmN0ID0gY291bnRfZGlzdGluY3RfY29tbWl0cyhjdHgpOworCisJaWYgKGNvdW50X2Rpc3RpbmN0ID49IEdSQVBIX0VER0VfTEFTVF9NQVNLKSB7CisJCWVycm9yKF8oInRoZSBjb21taXQgZ3JhcGggZm9ybWF0IGNhbm5vdCB3cml0ZSAlZCBjb21taXRzIiksIGNvdW50X2Rpc3RpbmN0KTsKKwkJcmVzID0gLTE7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwljdHgtPmNvbW1pdHMuYWxsb2MgPSBjb3VudF9kaXN0aW5jdDsKKwlBTExPQ19BUlJBWShjdHgtPmNvbW1pdHMubGlzdCwgY3R4LT5jb21taXRzLmFsbG9jKTsKKworCWNvcHlfb2lkc190b19jb21taXRzKGN0eCk7CisKKwlpZiAoY3R4LT5jb21taXRzLm5yID49IEdSQVBIX0VER0VfTEFTVF9NQVNLKSB7CisJCWVycm9yKF8oInRvbyBtYW55IGNvbW1pdHMgdG8gd3JpdGUgZ3JhcGgiKSk7CisJCXJlcyA9IC0xOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKCFjdHgtPmNvbW1pdHMubnIgJiYgIXJlcGxhY2UpCisJCWdvdG8gY2xlYW51cDsKKworCWlmIChjdHgtPnNwbGl0KSB7CisJCXNwbGl0X2dyYXBoX21lcmdlX3N0cmF0ZWd5KGN0eCk7CisKKwkJaWYgKCFyZXBsYWNlKQorCQkJbWVyZ2VfY29tbWl0X2dyYXBocyhjdHgpOworCX0gZWxzZQorCQljdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyID0gMTsKKworCWNvbXB1dGVfZ2VuZXJhdGlvbl9udW1iZXJzKGN0eCk7CisKKwlpZiAoY3R4LT5jaGFuZ2VkX3BhdGhzKQorCQljb21wdXRlX2Jsb29tX2ZpbHRlcnMoY3R4KTsKKworCXJlcyA9IHdyaXRlX2NvbW1pdF9ncmFwaF9maWxlKGN0eCk7CisKKwlpZiAoY3R4LT5zcGxpdCkKKwkJbWFya19jb21taXRfZ3JhcGhzKGN0eCk7CisKKwlleHBpcmVfY29tbWl0X2dyYXBocyhjdHgpOworCitjbGVhbnVwOgorCWZyZWUoY3R4LT5ncmFwaF9uYW1lKTsKKwlmcmVlKGN0eC0+Y29tbWl0cy5saXN0KTsKKwlmcmVlKGN0eC0+b2lkcy5saXN0KTsKKworCWlmIChjdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYWZ0ZXIpIHsKKwkJZm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXI7IGkrKykgeworCQkJZnJlZShjdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYWZ0ZXJbaV0pOworCQkJZnJlZShjdHgtPmNvbW1pdF9ncmFwaF9oYXNoX2FmdGVyW2ldKTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2JlZm9yZTsgaSsrKQorCQkJZnJlZShjdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYmVmb3JlW2ldKTsKKworCQlmcmVlKGN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19hZnRlcik7CisJCWZyZWUoY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2JlZm9yZSk7CisJCWZyZWUoY3R4LT5jb21taXRfZ3JhcGhfaGFzaF9hZnRlcik7CisJfQorCisJZnJlZShjdHgpOworCisJcmV0dXJuIHJlczsKK30KKworI2RlZmluZSBWRVJJRllfQ09NTUlUX0dSQVBIX0VSUk9SX0hBU0ggMgorc3RhdGljIGludCB2ZXJpZnlfY29tbWl0X2dyYXBoX2Vycm9yOworCitzdGF0aWMgdm9pZCBncmFwaF9yZXBvcnQoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZlcmlmeV9jb21taXRfZ3JhcGhfZXJyb3IgPSAxOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworCXZhX2VuZChhcCk7Cit9CisKKyNkZWZpbmUgR0VORVJBVElPTl9aRVJPX0VYSVNUUyAxCisjZGVmaW5lIEdFTkVSQVRJT05fTlVNQkVSX0VYSVNUUyAyCisKK2ludCB2ZXJpZnlfY29tbWl0X2dyYXBoKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgY29tbWl0X2dyYXBoICpnLCBpbnQgZmxhZ3MpCit7CisJdWludDMyX3QgaSwgY3VyX2Zhbm91dF9wb3MgPSAwOworCXN0cnVjdCBvYmplY3RfaWQgcHJldl9vaWQsIGN1cl9vaWQsIGNoZWNrc3VtOworCWludCBnZW5lcmF0aW9uX3plcm8gPSAwOworCXN0cnVjdCBoYXNoZmlsZSAqZjsKKwlpbnQgZGV2bnVsbDsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKKwlpbnQgbG9jYWxfZXJyb3IgPSAwOworCisJaWYgKCFnKSB7CisJCWdyYXBoX3JlcG9ydCgibm8gY29tbWl0LWdyYXBoIGZpbGUgbG9hZGVkIik7CisJCXJldHVybiAxOworCX0KKworCXZlcmlmeV9jb21taXRfZ3JhcGhfZXJyb3IgPSB2ZXJpZnlfY29tbWl0X2dyYXBoX2xpdGUoZyk7CisJaWYgKHZlcmlmeV9jb21taXRfZ3JhcGhfZXJyb3IpCisJCXJldHVybiB2ZXJpZnlfY29tbWl0X2dyYXBoX2Vycm9yOworCisJZGV2bnVsbCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fV1JPTkxZKTsKKwlmID0gaGFzaGZkKGRldm51bGwsIE5VTEwpOworCWhhc2h3cml0ZShmLCBnLT5kYXRhLCBnLT5kYXRhX2xlbiAtIGctPmhhc2hfbGVuKTsKKwlmaW5hbGl6ZV9oYXNoZmlsZShmLCBjaGVja3N1bS5oYXNoLCBDU1VNX0NMT1NFKTsKKwlpZiAoIWhhc2hlcShjaGVja3N1bS5oYXNoLCBnLT5kYXRhICsgZy0+ZGF0YV9sZW4gLSBnLT5oYXNoX2xlbikpIHsKKwkJZ3JhcGhfcmVwb3J0KF8oInRoZSBjb21taXQtZ3JhcGggZmlsZSBoYXMgaW5jb3JyZWN0IGNoZWNrc3VtIGFuZCBpcyBsaWtlbHkgY29ycnVwdCIpKTsKKwkJdmVyaWZ5X2NvbW1pdF9ncmFwaF9lcnJvciA9IFZFUklGWV9DT01NSVRfR1JBUEhfRVJST1JfSEFTSDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZy0+bnVtX2NvbW1pdHM7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0ICpncmFwaF9jb21taXQ7CisKKwkJaGFzaGNweShjdXJfb2lkLmhhc2gsIGctPmNodW5rX29pZF9sb29rdXAgKyBnLT5oYXNoX2xlbiAqIGkpOworCisJCWlmIChpICYmIG9pZGNtcCgmcHJldl9vaWQsICZjdXJfb2lkKSA+PSAwKQorCQkJZ3JhcGhfcmVwb3J0KF8oImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IE9JRCBvcmRlcjogJXMgdGhlbiAlcyIpLAorCQkJCSAgICAgb2lkX3RvX2hleCgmcHJldl9vaWQpLAorCQkJCSAgICAgb2lkX3RvX2hleCgmY3VyX29pZCkpOworCisJCW9pZGNweSgmcHJldl9vaWQsICZjdXJfb2lkKTsKKworCQl3aGlsZSAoY3VyX29pZC5oYXNoWzBdID4gY3VyX2Zhbm91dF9wb3MpIHsKKwkJCXVpbnQzMl90IGZhbm91dF92YWx1ZSA9IGdldF9iZTMyKGctPmNodW5rX29pZF9mYW5vdXQgKyBjdXJfZmFub3V0X3Bvcyk7CisKKwkJCWlmIChpICE9IGZhbm91dF92YWx1ZSkKKwkJCQlncmFwaF9yZXBvcnQoXygiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgZmFub3V0IHZhbHVlOiBmYW5vdXRbJWRdID0gJXUgIT0gJXUiKSwKKwkJCQkJICAgICBjdXJfZmFub3V0X3BvcywgZmFub3V0X3ZhbHVlLCBpKTsKKwkJCWN1cl9mYW5vdXRfcG9zKys7CisJCX0KKworCQlncmFwaF9jb21taXQgPSBsb29rdXBfY29tbWl0KHIsICZjdXJfb2lkKTsKKwkJaWYgKCFwYXJzZV9jb21taXRfaW5fZ3JhcGhfb25lKHIsIGcsIGdyYXBoX2NvbW1pdCkpCisJCQlncmFwaF9yZXBvcnQoXygiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIGNvbW1pdC1ncmFwaCIpLAorCQkJCSAgICAgb2lkX3RvX2hleCgmY3VyX29pZCkpOworCX0KKworCXdoaWxlIChjdXJfZmFub3V0X3BvcyA8IDI1NikgeworCQl1aW50MzJfdCBmYW5vdXRfdmFsdWUgPSBnZXRfYmUzMihnLT5jaHVua19vaWRfZmFub3V0ICsgY3VyX2Zhbm91dF9wb3MpOworCisJCWlmIChnLT5udW1fY29tbWl0cyAhPSBmYW5vdXRfdmFsdWUpCisJCQlncmFwaF9yZXBvcnQoXygiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgZmFub3V0IHZhbHVlOiBmYW5vdXRbJWRdID0gJXUgIT0gJXUiKSwKKwkJCQkgICAgIGN1cl9mYW5vdXRfcG9zLCBmYW5vdXRfdmFsdWUsIGkpOworCisJCWN1cl9mYW5vdXRfcG9zKys7CisJfQorCisJaWYgKHZlcmlmeV9jb21taXRfZ3JhcGhfZXJyb3IgJiB+VkVSSUZZX0NPTU1JVF9HUkFQSF9FUlJPUl9IQVNIKQorCQlyZXR1cm4gdmVyaWZ5X2NvbW1pdF9ncmFwaF9lcnJvcjsKKworCWlmIChmbGFncyAmIENPTU1JVF9HUkFQSF9XUklURV9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJWZXJpZnlpbmcgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiKSwKKwkJCQkJZy0+bnVtX2NvbW1pdHMpOworCisJZm9yIChpID0gMDsgaSA8IGctPm51bV9jb21taXRzOyBpKyspIHsKKwkJc3RydWN0IGNvbW1pdCAqZ3JhcGhfY29tbWl0LCAqb2RiX2NvbW1pdDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpncmFwaF9wYXJlbnRzLCAqb2RiX3BhcmVudHM7CisJCXVpbnQzMl90IG1heF9nZW5lcmF0aW9uID0gMDsKKworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7CisJCWhhc2hjcHkoY3VyX29pZC5oYXNoLCBnLT5jaHVua19vaWRfbG9va3VwICsgZy0+aGFzaF9sZW4gKiBpKTsKKworCQlncmFwaF9jb21taXQgPSBsb29rdXBfY29tbWl0KHIsICZjdXJfb2lkKTsKKwkJb2RiX2NvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopY3JlYXRlX29iamVjdChyLCAmY3VyX29pZCwgYWxsb2NfY29tbWl0X25vZGUocikpOworCQlpZiAocGFyc2VfY29tbWl0X2ludGVybmFsKG9kYl9jb21taXQsIDAsIDApKSB7CisJCQlncmFwaF9yZXBvcnQoXygiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIG9iamVjdCBkYXRhYmFzZSBmb3IgY29tbWl0LWdyYXBoIiksCisJCQkJICAgICBvaWRfdG9faGV4KCZjdXJfb2lkKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghb2lkZXEoJmdldF9jb21taXRfdHJlZV9pbl9ncmFwaF9vbmUociwgZywgZ3JhcGhfY29tbWl0KS0+b2JqZWN0Lm9pZCwKKwkJCSAgIGdldF9jb21taXRfdHJlZV9vaWQob2RiX2NvbW1pdCkpKQorCQkJZ3JhcGhfcmVwb3J0KF8oInJvb3QgdHJlZSBPSUQgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJXMgIT0gJXMiKSwKKwkJCQkgICAgIG9pZF90b19oZXgoJmN1cl9vaWQpLAorCQkJCSAgICAgb2lkX3RvX2hleChnZXRfY29tbWl0X3RyZWVfb2lkKGdyYXBoX2NvbW1pdCkpLAorCQkJCSAgICAgb2lkX3RvX2hleChnZXRfY29tbWl0X3RyZWVfb2lkKG9kYl9jb21taXQpKSk7CisKKwkJZ3JhcGhfcGFyZW50cyA9IGdyYXBoX2NvbW1pdC0+cGFyZW50czsKKwkJb2RiX3BhcmVudHMgPSBvZGJfY29tbWl0LT5wYXJlbnRzOworCisJCXdoaWxlIChncmFwaF9wYXJlbnRzKSB7CisJCQlpZiAob2RiX3BhcmVudHMgPT0gTlVMTCkgeworCQkJCWdyYXBoX3JlcG9ydChfKCJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyBpcyB0b28gbG9uZyIpLAorCQkJCQkgICAgIG9pZF90b19oZXgoJmN1cl9vaWQpKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogcGFyc2UgcGFyZW50IGluIGNhc2UgaXQgaXMgaW4gYSBiYXNlIGdyYXBoICovCisJCQlwYXJzZV9jb21taXRfaW5fZ3JhcGhfb25lKHIsIGcsIGdyYXBoX3BhcmVudHMtPml0ZW0pOworCisJCQlpZiAoIW9pZGVxKCZncmFwaF9wYXJlbnRzLT5pdGVtLT5vYmplY3Qub2lkLCAmb2RiX3BhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQpKQorCQkJCWdyYXBoX3JlcG9ydChfKCJjb21taXQtZ3JhcGggcGFyZW50IGZvciAlcyBpcyAlcyAhPSAlcyIpLAorCQkJCQkgICAgIG9pZF90b19oZXgoJmN1cl9vaWQpLAorCQkJCQkgICAgIG9pZF90b19oZXgoJmdyYXBoX3BhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQpLAorCQkJCQkgICAgIG9pZF90b19oZXgoJm9kYl9wYXJlbnRzLT5pdGVtLT5vYmplY3Qub2lkKSk7CisKKwkJCWlmIChncmFwaF9wYXJlbnRzLT5pdGVtLT5nZW5lcmF0aW9uID4gbWF4X2dlbmVyYXRpb24pCisJCQkJbWF4X2dlbmVyYXRpb24gPSBncmFwaF9wYXJlbnRzLT5pdGVtLT5nZW5lcmF0aW9uOworCisJCQlncmFwaF9wYXJlbnRzID0gZ3JhcGhfcGFyZW50cy0+bmV4dDsKKwkJCW9kYl9wYXJlbnRzID0gb2RiX3BhcmVudHMtPm5leHQ7CisJCX0KKworCQlpZiAob2RiX3BhcmVudHMgIT0gTlVMTCkKKwkJCWdyYXBoX3JlcG9ydChfKCJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyB0ZXJtaW5hdGVzIGVhcmx5IiksCisJCQkJICAgICBvaWRfdG9faGV4KCZjdXJfb2lkKSk7CisKKwkJaWYgKCFncmFwaF9jb21taXQtPmdlbmVyYXRpb24pIHsKKwkJCWlmIChnZW5lcmF0aW9uX3plcm8gPT0gR0VORVJBVElPTl9OVU1CRVJfRVhJU1RTKQorCQkJCWdyYXBoX3JlcG9ydChfKCJjb21taXQtZ3JhcGggaGFzIGdlbmVyYXRpb24gbnVtYmVyIHplcm8gZm9yIGNvbW1pdCAlcywgYnV0IG5vbi16ZXJvIGVsc2V3aGVyZSIpLAorCQkJCQkgICAgIG9pZF90b19oZXgoJmN1cl9vaWQpKTsKKwkJCWdlbmVyYXRpb25femVybyA9IEdFTkVSQVRJT05fWkVST19FWElTVFM7CisJCX0gZWxzZSBpZiAoZ2VuZXJhdGlvbl96ZXJvID09IEdFTkVSQVRJT05fWkVST19FWElTVFMpCisJCQlncmFwaF9yZXBvcnQoXygiY29tbWl0LWdyYXBoIGhhcyBub24temVybyBnZW5lcmF0aW9uIG51bWJlciBmb3IgY29tbWl0ICVzLCBidXQgemVybyBlbHNld2hlcmUiKSwKKwkJCQkgICAgIG9pZF90b19oZXgoJmN1cl9vaWQpKTsKKworCQlpZiAoZ2VuZXJhdGlvbl96ZXJvID09IEdFTkVSQVRJT05fWkVST19FWElTVFMpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZiBvbmUgb2Ygb3VyIHBhcmVudHMgaGFzIGdlbmVyYXRpb24gR0VORVJBVElPTl9OVU1CRVJfTUFYLCB0aGVuCisJCSAqIG91ciBnZW5lcmF0aW9uIGlzIGFsc28gR0VORVJBVElPTl9OVU1CRVJfTUFYLiBEZWNyZW1lbnQgdG8gYXZvaWQKKwkJICogZXh0cmEgbG9naWMgaW4gdGhlIGZvbGxvd2luZyBjb25kaXRpb24uCisJCSAqLworCQlpZiAobWF4X2dlbmVyYXRpb24gPT0gR0VORVJBVElPTl9OVU1CRVJfTUFYKQorCQkJbWF4X2dlbmVyYXRpb24tLTsKKworCQlpZiAoZ3JhcGhfY29tbWl0LT5nZW5lcmF0aW9uICE9IG1heF9nZW5lcmF0aW9uICsgMSkKKwkJCWdyYXBoX3JlcG9ydChfKCJjb21taXQtZ3JhcGggZ2VuZXJhdGlvbiBmb3IgY29tbWl0ICVzIGlzICV1ICE9ICV1IiksCisJCQkJICAgICBvaWRfdG9faGV4KCZjdXJfb2lkKSwKKwkJCQkgICAgIGdyYXBoX2NvbW1pdC0+Z2VuZXJhdGlvbiwKKwkJCQkgICAgIG1heF9nZW5lcmF0aW9uICsgMSk7CisKKwkJaWYgKGdyYXBoX2NvbW1pdC0+ZGF0ZSAhPSBvZGJfY29tbWl0LT5kYXRlKQorCQkJZ3JhcGhfcmVwb3J0KF8oImNvbW1pdCBkYXRlIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICUiUFJJdGltZSIgIT0gJSJQUkl0aW1lKSwKKwkJCQkgICAgIG9pZF90b19oZXgoJmN1cl9vaWQpLAorCQkJCSAgICAgZ3JhcGhfY29tbWl0LT5kYXRlLAorCQkJCSAgICAgb2RiX2NvbW1pdC0+ZGF0ZSk7CisJfQorCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKworCWxvY2FsX2Vycm9yID0gdmVyaWZ5X2NvbW1pdF9ncmFwaF9lcnJvcjsKKworCWlmICghKGZsYWdzICYgQ09NTUlUX0dSQVBIX1ZFUklGWV9TSEFMTE9XKSAmJiBnLT5iYXNlX2dyYXBoKQorCQlsb2NhbF9lcnJvciB8PSB2ZXJpZnlfY29tbWl0X2dyYXBoKHIsIGctPmJhc2VfZ3JhcGgsIGZsYWdzKTsKKworCXJldHVybiBsb2NhbF9lcnJvcjsKK30KKwordm9pZCBmcmVlX2NvbW1pdF9ncmFwaChzdHJ1Y3QgY29tbWl0X2dyYXBoICpnKQoreworCWlmICghZykKKwkJcmV0dXJuOworCWlmIChnLT5kYXRhKSB7CisJCW11bm1hcCgodm9pZCAqKWctPmRhdGEsIGctPmRhdGFfbGVuKTsKKwkJZy0+ZGF0YSA9IE5VTEw7CisJfQorCWZyZWUoZy0+ZmlsZW5hbWUpOworCWZyZWUoZy0+Ymxvb21fZmlsdGVyX3NldHRpbmdzKTsKKwlmcmVlKGcpOworfQorCit2b2lkIGRpc2FibGVfY29tbWl0X2dyYXBoKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXItPmNvbW1pdF9ncmFwaF9kaXNhYmxlZCA9IDE7Cit9CmRpZmYgLS1naXQgYS9jb21taXQtZ3JhcGguaCBiL2NvbW1pdC1ncmFwaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMTI3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21taXQtZ3JhcGguaApAQCAtMCwwICsxLDE0MCBAQAorI2lmbmRlZiBDT01NSVRfR1JBUEhfSAorI2RlZmluZSBDT01NSVRfR1JBUEhfSAorCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJvaWRzZXQuaCIKKworI2RlZmluZSBHSVRfVEVTVF9DT01NSVRfR1JBUEggIkdJVF9URVNUX0NPTU1JVF9HUkFQSCIKKyNkZWZpbmUgR0lUX1RFU1RfQ09NTUlUX0dSQVBIX0RJRV9PTl9MT0FEICJHSVRfVEVTVF9DT01NSVRfR1JBUEhfRElFX09OX0xPQUQiCisjZGVmaW5lIEdJVF9URVNUX0NPTU1JVF9HUkFQSF9DSEFOR0VEX1BBVEhTICJHSVRfVEVTVF9DT01NSVRfR1JBUEhfQ0hBTkdFRF9QQVRIUyIKKworLyoKKyAqIFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0byBlbmhhbmNlIGNvdmVyYWdlIG9mIHRoZSBjb21taXQtZ3JhcGgKKyAqIGZlYXR1cmUgaW4gdGhlIHRlc3Qgc3VpdGUgd2l0aCB0aGUgR0lUX1RFU1RfQ09NTUlUX0dSQVBIIGFuZAorICogR0lUX1RFU1RfQ09NTUlUX0dSQVBIX0NIQU5HRURfUEFUSFMgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBEbyBub3QKKyAqIGNhbGwgdGhpcyBtZXRob2Qgb3VzdGlkZSBvZiBhIGJ1aWx0aW4sIGFuZCBvbmx5IGlmIHlvdSBrbm93IHdoYXQKKyAqIHlvdSBhcmUgZG9pbmchCisgKi8KK3ZvaWQgZ2l0X3Rlc3Rfd3JpdGVfY29tbWl0X2dyYXBoX29yX2RpZSh2b2lkKTsKKworc3RydWN0IGNvbW1pdDsKK3N0cnVjdCBibG9vbV9maWx0ZXJfc2V0dGluZ3M7CisKK2NoYXIgKmdldF9jb21taXRfZ3JhcGhfZmlsZW5hbWUoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYik7CitpbnQgb3Blbl9jb21taXRfZ3JhcGgoY29uc3QgY2hhciAqZ3JhcGhfZmlsZSwgaW50ICpmZCwgc3RydWN0IHN0YXQgKnN0KTsKKworLyoKKyAqIEdpdmVuIGEgY29tbWl0IHN0cnVjdCwgdHJ5IHRvIGZpbGwgdGhlIGNvbW1pdCBzdHJ1Y3QgaW5mbywgaW5jbHVkaW5nOgorICogIDEuIHRyZWUgb2JqZWN0CisgKiAgMi4gZGF0ZQorICogIDMuIHBhcmVudHMuCisgKgorICogUmV0dXJucyAxIGlmIGFuZCBvbmx5IGlmIHRoZSBjb21taXQgd2FzIGZvdW5kIGluIHRoZSBwYWNrZWQgZ3JhcGguCisgKgorICogU2VlIHBhcnNlX2NvbW1pdF9idWZmZXIoKSBmb3IgdGhlIGZhbGxiYWNrIGFmdGVyIHRoaXMgY2FsbC4KKyAqLworaW50IHBhcnNlX2NvbW1pdF9pbl9ncmFwaChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGNvbW1pdCAqaXRlbSk7CisKKy8qCisgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIGxvYWRlZCBjb21taXQgY29udGVudHMgZnJvbSB0aGUgY29tbWl0IGJ1ZmZlciwKKyAqIGJ1dCB3ZSBhbHNvIHdhbnQgdG8gZW5zdXJlIHRoZSBjb21taXQtZ3JhcGggY29udGVudCBpcyBjb3JyZWN0bHkKKyAqIGNoZWNrZWQgYW5kIGZpbGxlZC4gRmlsbCB0aGUgZ3JhcGhfcG9zIGFuZCBnZW5lcmF0aW9uIG1lbWJlcnMgb2YKKyAqIHRoZSBnaXZlbiBjb21taXQuCisgKi8KK3ZvaWQgbG9hZF9jb21taXRfZ3JhcGhfaW5mbyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGNvbW1pdCAqaXRlbSk7CisKK3N0cnVjdCB0cmVlICpnZXRfY29tbWl0X3RyZWVfaW5fZ3JhcGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGNvbW1pdCAqYyk7CisKK3N0cnVjdCBjb21taXRfZ3JhcGggeworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE7CisJc2l6ZV90IGRhdGFfbGVuOworCisJdW5zaWduZWQgY2hhciBoYXNoX2xlbjsKKwl1bnNpZ25lZCBjaGFyIG51bV9jaHVua3M7CisJdWludDMyX3QgbnVtX2NvbW1pdHM7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY2hhciAqZmlsZW5hbWU7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYjsKKworCXVpbnQzMl90IG51bV9jb21taXRzX2luX2Jhc2U7CisJc3RydWN0IGNvbW1pdF9ncmFwaCAqYmFzZV9ncmFwaDsKKworCWNvbnN0IHVpbnQzMl90ICpjaHVua19vaWRfZmFub3V0OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNodW5rX29pZF9sb29rdXA7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY2h1bmtfY29tbWl0X2RhdGE7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY2h1bmtfZXh0cmFfZWRnZXM7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY2h1bmtfYmFzZV9ncmFwaHM7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY2h1bmtfYmxvb21faW5kZXhlczsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjaHVua19ibG9vbV9kYXRhOworCisJc3RydWN0IGJsb29tX2ZpbHRlcl9zZXR0aW5ncyAqYmxvb21fZmlsdGVyX3NldHRpbmdzOworfTsKKworc3RydWN0IGNvbW1pdF9ncmFwaCAqbG9hZF9jb21taXRfZ3JhcGhfb25lX2ZkX3N0KGludCBmZCwgc3RydWN0IHN0YXQgKnN0LAorCQkJCQkJIHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIpOworc3RydWN0IGNvbW1pdF9ncmFwaCAqcmVhZF9jb21taXRfZ3JhcGhfb25lKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgICBzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiKTsKK3N0cnVjdCBjb21taXRfZ3JhcGggKnBhcnNlX2NvbW1pdF9ncmFwaCh2b2lkICpncmFwaF9tYXAsIHNpemVfdCBncmFwaF9zaXplKTsKKworLyoKKyAqIFJldHVybiAxIGlmIGFuZCBvbmx5IGlmIHRoZSByZXBvc2l0b3J5IGhhcyBhIGNvbW1pdC1ncmFwaAorICogZmlsZSBhbmQgZ2VuZXJhdGlvbiBudW1iZXJzIGFyZSBjb21wdXRlZCBpbiB0aGF0IGZpbGUuCisgKi8KK2ludCBnZW5lcmF0aW9uX251bWJlcnNfZW5hYmxlZChzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisKK2VudW0gY29tbWl0X2dyYXBoX3dyaXRlX2ZsYWdzIHsKKwlDT01NSVRfR1JBUEhfV1JJVEVfQVBQRU5EICAgICA9ICgxIDw8IDApLAorCUNPTU1JVF9HUkFQSF9XUklURV9QUk9HUkVTUyAgID0gKDEgPDwgMSksCisJQ09NTUlUX0dSQVBIX1dSSVRFX1NQTElUICAgICAgPSAoMSA8PCAyKSwKKwkvKiBNYWtlIHN1cmUgdGhhdCBlYWNoIE9JRCBpbiB0aGUgaW5wdXQgaXMgYSB2YWxpZCBjb21taXQgT0lELiAqLworCUNPTU1JVF9HUkFQSF9XUklURV9DSEVDS19PSURTID0gKDEgPDwgMyksCisJQ09NTUlUX0dSQVBIX1dSSVRFX0JMT09NX0ZJTFRFUlMgPSAoMSA8PCA0KSwKK307CisKK2VudW0gY29tbWl0X2dyYXBoX3NwbGl0X2ZsYWdzIHsKKwlDT01NSVRfR1JBUEhfU1BMSVRfVU5TUEVDSUZJRUQgICAgICA9IDAsCisJQ09NTUlUX0dSQVBIX1NQTElUX01FUkdFX1BST0hJQklURUQgPSAxLAorCUNPTU1JVF9HUkFQSF9TUExJVF9SRVBMQUNFICAgICAgICAgID0gMgorfTsKKworc3RydWN0IHNwbGl0X2NvbW1pdF9ncmFwaF9vcHRzIHsKKwlpbnQgc2l6ZV9tdWx0aXBsZTsKKwlpbnQgbWF4X2NvbW1pdHM7CisJdGltZXN0YW1wX3QgZXhwaXJlX3RpbWU7CisJZW51bSBjb21taXRfZ3JhcGhfc3BsaXRfZmxhZ3MgZmxhZ3M7Cit9OworCisvKgorICogVGhlIHdyaXRlX2NvbW1pdF9ncmFwaCogbWV0aG9kcyByZXR1cm4gemVybyBvbiBzdWNjZXNzCisgKiBhbmQgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlLiBOb3RlIHRoYXQgaWYgdGhlIHJlcG9zaXRvcnkKKyAqIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIGNvbW1pdC1ncmFwaCBmZWF0dXJlLCB0aGVuIHRoZQorICogbWV0aG9kcyB3aWxsIHJldHVybiAwIHdpdGhvdXQgd3JpdGluZyBhIGNvbW1pdC1ncmFwaC4KKyAqLworaW50IHdyaXRlX2NvbW1pdF9ncmFwaF9yZWFjaGFibGUoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYiwKKwkJCQkgZW51bSBjb21taXRfZ3JhcGhfd3JpdGVfZmxhZ3MgZmxhZ3MsCisJCQkJIGNvbnN0IHN0cnVjdCBzcGxpdF9jb21taXRfZ3JhcGhfb3B0cyAqc3BsaXRfb3B0cyk7CitpbnQgd3JpdGVfY29tbWl0X2dyYXBoKHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIsCisJCSAgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBhY2tfaW5kZXhlcywKKwkJICAgICAgIHN0cnVjdCBvaWRzZXQgKmNvbW1pdHMsCisJCSAgICAgICBlbnVtIGNvbW1pdF9ncmFwaF93cml0ZV9mbGFncyBmbGFncywKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBzcGxpdF9jb21taXRfZ3JhcGhfb3B0cyAqc3BsaXRfb3B0cyk7CisKKyNkZWZpbmUgQ09NTUlUX0dSQVBIX1ZFUklGWV9TSEFMTE9XCSgxIDw8IDApCisKK2ludCB2ZXJpZnlfY29tbWl0X2dyYXBoKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgY29tbWl0X2dyYXBoICpnLCBpbnQgZmxhZ3MpOworCit2b2lkIGNsb3NlX2NvbW1pdF9ncmFwaChzdHJ1Y3QgcmF3X29iamVjdF9zdG9yZSAqKTsKK3ZvaWQgZnJlZV9jb21taXRfZ3JhcGgoc3RydWN0IGNvbW1pdF9ncmFwaCAqKTsKKworLyoKKyAqIERpc2FibGUgZnVydGhlciB1c2Ugb2YgdGhlIGNvbW1pdCBncmFwaCBpbiB0aGlzIHByb2Nlc3Mgd2hlbiBwYXJzaW5nIGEKKyAqICJzdHJ1Y3QgY29tbWl0Ii4KKyAqLwordm9pZCBkaXNhYmxlX2NvbW1pdF9ncmFwaChzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tbWl0LXJlYWNoLmMgYi9jb21taXQtcmVhY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2E3ZTcwCi0tLSAvZGV2L251bGwKKysrIGIvY29tbWl0LXJlYWNoLmMKQEAgLTAsMCArMSw3NzMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImNvbW1pdC1ncmFwaC5oIgorI2luY2x1ZGUgImRlY29yYXRlLmgiCisjaW5jbHVkZSAicHJpby1xdWV1ZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJyZWYtZmlsdGVyLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKworLyogUmVtZW1iZXIgdG8gdXBkYXRlIG9iamVjdCBmbGFnIGFsbG9jYXRpb24gaW4gb2JqZWN0LmggKi8KKyNkZWZpbmUgUEFSRU5UMQkJKDF1PDwxNikKKyNkZWZpbmUgUEFSRU5UMgkJKDF1PDwxNykKKyNkZWZpbmUgU1RBTEUJCSgxdTw8MTgpCisjZGVmaW5lIFJFU1VMVAkJKDF1PDwxOSkKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFsbF9mbGFncyA9IChQQVJFTlQxIHwgUEFSRU5UMiB8IFNUQUxFIHwgUkVTVUxUKTsKKworc3RhdGljIGludCBxdWV1ZV9oYXNfbm9uc3RhbGUoc3RydWN0IHByaW9fcXVldWUgKnF1ZXVlKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBxdWV1ZS0+YXJyYXlbaV0uZGF0YTsKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTVEFMRSkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGFsbCBpbnB1dCBjb21taXRzIGluIG9uZSBhbmQgdHdvc1tdIG11c3QgaGF2ZSBiZWVuIHBhcnNlZCEgKi8KK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhaW50X2Rvd25fdG9fY29tbW9uKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkJc3RydWN0IGNvbW1pdCAqb25lLCBpbnQgbiwKKwkJCQkJCXN0cnVjdCBjb21taXQgKip0d29zLAorCQkJCQkJaW50IG1pbl9nZW5lcmF0aW9uKQoreworCXN0cnVjdCBwcmlvX3F1ZXVlIHF1ZXVlID0geyBjb21wYXJlX2NvbW1pdHNfYnlfZ2VuX3RoZW5fY29tbWl0X2RhdGUgfTsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdCA9IE5VTEw7CisJaW50IGk7CisJdWludDMyX3QgbGFzdF9nZW4gPSBHRU5FUkFUSU9OX05VTUJFUl9JTkZJTklUWTsKKworCWlmICghbWluX2dlbmVyYXRpb24pCisJCXF1ZXVlLmNvbXBhcmUgPSBjb21wYXJlX2NvbW1pdHNfYnlfY29tbWl0X2RhdGU7CisKKwlvbmUtPm9iamVjdC5mbGFncyB8PSBQQVJFTlQxOworCWlmICghbikgeworCQljb21taXRfbGlzdF9hcHBlbmQob25lLCAmcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJcHJpb19xdWV1ZV9wdXQoJnF1ZXVlLCBvbmUpOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQl0d29zW2ldLT5vYmplY3QuZmxhZ3MgfD0gUEFSRU5UMjsKKwkJcHJpb19xdWV1ZV9wdXQoJnF1ZXVlLCB0d29zW2ldKTsKKwl9CisKKwl3aGlsZSAocXVldWVfaGFzX25vbnN0YWxlKCZxdWV1ZSkpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcHJpb19xdWV1ZV9nZXQoJnF1ZXVlKTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQlpbnQgZmxhZ3M7CisKKwkJaWYgKG1pbl9nZW5lcmF0aW9uICYmIGNvbW1pdC0+Z2VuZXJhdGlvbiA+IGxhc3RfZ2VuKQorCQkJQlVHKCJiYWQgZ2VuZXJhdGlvbiBza2lwICU4eCA+ICU4eCBhdCAlcyIsCisJCQkgICAgY29tbWl0LT5nZW5lcmF0aW9uLCBsYXN0X2dlbiwKKwkJCSAgICBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwkJbGFzdF9nZW4gPSBjb21taXQtPmdlbmVyYXRpb247CisKKwkJaWYgKGNvbW1pdC0+Z2VuZXJhdGlvbiA8IG1pbl9nZW5lcmF0aW9uKQorCQkJYnJlYWs7CisKKwkJZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFncyAmIChQQVJFTlQxIHwgUEFSRU5UMiB8IFNUQUxFKTsKKwkJaWYgKGZsYWdzID09IChQQVJFTlQxIHwgUEFSRU5UMikpIHsKKwkJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgUkVTVUxUKSkgeworCQkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFJFU1VMVDsKKwkJCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShjb21taXQsICZyZXN1bHQpOworCQkJfQorCQkJLyogTWFyayBwYXJlbnRzIG9mIGEgZm91bmQgbWVyZ2Ugc3RhbGUgKi8KKwkJCWZsYWdzIHw9IFNUQUxFOworCQl9CisJCXBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisJCXdoaWxlIChwYXJlbnRzKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50cy0+aXRlbTsKKwkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCQkJaWYgKChwLT5vYmplY3QuZmxhZ3MgJiBmbGFncykgPT0gZmxhZ3MpCisJCQkJY29udGludWU7CisJCQlpZiAocmVwb19wYXJzZV9jb21taXQociwgcCkpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gZmxhZ3M7CisJCQlwcmlvX3F1ZXVlX3B1dCgmcXVldWUsIHApOworCQl9CisJfQorCisJY2xlYXJfcHJpb19xdWV1ZSgmcXVldWUpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKm1lcmdlX2Jhc2VzX21hbnkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICBzdHJ1Y3QgY29tbWl0ICpvbmUsIGludCBuLAorCQkJCQkgICAgc3RydWN0IGNvbW1pdCAqKnR3b3MpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdCA9IE5VTEw7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChvbmUgPT0gdHdvc1tpXSkKKwkJCS8qCisJCQkgKiBXZSBkbyBub3QgbWFyayB0aGlzIGV2ZW4gd2l0aCBSRVNVTFQgc28gd2UgZG8gbm90CisJCQkgKiBoYXZlIHRvIGNsZWFuIGl0IHVwLgorCQkJICovCisJCQlyZXR1cm4gY29tbWl0X2xpc3RfaW5zZXJ0KG9uZSwgJnJlc3VsdCk7CisJfQorCisJaWYgKHJlcG9fcGFyc2VfY29tbWl0KHIsIG9uZSkpCisJCXJldHVybiBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaWYgKHJlcG9fcGFyc2VfY29tbWl0KHIsIHR3b3NbaV0pKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJbGlzdCA9IHBhaW50X2Rvd25fdG9fY29tbW9uKHIsIG9uZSwgbiwgdHdvcywgMCk7CisKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwb3BfY29tbWl0KCZsaXN0KTsKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTVEFMRSkpCisJCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShjb21taXQsICZyZXN1bHQpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9vY3RvcHVzX21lcmdlX2Jhc2VzKHN0cnVjdCBjb21taXRfbGlzdCAqaW4pCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICppLCAqaiwgKmssICpyZXQgPSBOVUxMOworCisJaWYgKCFpbikKKwkJcmV0dXJuIHJldDsKKworCWNvbW1pdF9saXN0X2luc2VydChpbi0+aXRlbSwgJnJldCk7CisKKwlmb3IgKGkgPSBpbi0+bmV4dDsgaTsgaSA9IGktPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpuZXdfY29tbWl0cyA9IE5VTEwsICplbmQgPSBOVUxMOworCisJCWZvciAoaiA9IHJldDsgajsgaiA9IGotPm5leHQpIHsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqYmFzZXM7CisJCQliYXNlcyA9IGdldF9tZXJnZV9iYXNlcyhpLT5pdGVtLCBqLT5pdGVtKTsKKwkJCWlmICghbmV3X2NvbW1pdHMpCisJCQkJbmV3X2NvbW1pdHMgPSBiYXNlczsKKwkJCWVsc2UKKwkJCQllbmQtPm5leHQgPSBiYXNlczsKKwkJCWZvciAoayA9IGJhc2VzOyBrOyBrID0gay0+bmV4dCkKKwkJCQllbmQgPSBrOworCQl9CisJCXJldCA9IG5ld19jb21taXRzOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJlbW92ZV9yZWR1bmRhbnQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXQgKiphcnJheSwgaW50IGNudCkKK3sKKwkvKgorCSAqIFNvbWUgY29tbWl0IGluIHRoZSBhcnJheSBtYXkgYmUgYW4gYW5jZXN0b3Igb2YKKwkgKiBhbm90aGVyIGNvbW1pdC4gIE1vdmUgc3VjaCBjb21taXQgdG8gdGhlIGVuZCBvZgorCSAqIHRoZSBhcnJheSwgYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgdGhhdAorCSAqIGFyZSBpbmRlcGVuZGVudCBmcm9tIGVhY2ggb3RoZXIuCisJICovCisJc3RydWN0IGNvbW1pdCAqKndvcms7CisJdW5zaWduZWQgY2hhciAqcmVkdW5kYW50OworCWludCAqZmlsbGVkX2luZGV4OworCWludCBpLCBqLCBmaWxsZWQ7CisKKwl3b3JrID0geGNhbGxvYyhjbnQsIHNpemVvZigqd29yaykpOworCXJlZHVuZGFudCA9IHhjYWxsb2MoY250LCAxKTsKKwlBTExPQ19BUlJBWShmaWxsZWRfaW5kZXgsIGNudCAtIDEpOworCisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorCQlyZXBvX3BhcnNlX2NvbW1pdChyLCBhcnJheVtpXSk7CisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqY29tbW9uOworCQl1aW50MzJfdCBtaW5fZ2VuZXJhdGlvbiA9IGFycmF5W2ldLT5nZW5lcmF0aW9uOworCisJCWlmIChyZWR1bmRhbnRbaV0pCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gZmlsbGVkID0gMDsgaiA8IGNudDsgaisrKSB7CisJCQlpZiAoaSA9PSBqIHx8IHJlZHVuZGFudFtqXSkKKwkJCQljb250aW51ZTsKKwkJCWZpbGxlZF9pbmRleFtmaWxsZWRdID0gajsKKwkJCXdvcmtbZmlsbGVkKytdID0gYXJyYXlbal07CisKKwkJCWlmIChhcnJheVtqXS0+Z2VuZXJhdGlvbiA8IG1pbl9nZW5lcmF0aW9uKQorCQkJCW1pbl9nZW5lcmF0aW9uID0gYXJyYXlbal0tPmdlbmVyYXRpb247CisJCX0KKwkJY29tbW9uID0gcGFpbnRfZG93bl90b19jb21tb24ociwgYXJyYXlbaV0sIGZpbGxlZCwKKwkJCQkJICAgICAgd29yaywgbWluX2dlbmVyYXRpb24pOworCQlpZiAoYXJyYXlbaV0tPm9iamVjdC5mbGFncyAmIFBBUkVOVDIpCisJCQlyZWR1bmRhbnRbaV0gPSAxOworCQlmb3IgKGogPSAwOyBqIDwgZmlsbGVkOyBqKyspCisJCQlpZiAod29ya1tqXS0+b2JqZWN0LmZsYWdzICYgUEFSRU5UMSkKKwkJCQlyZWR1bmRhbnRbZmlsbGVkX2luZGV4W2pdXSA9IDE7CisJCWNsZWFyX2NvbW1pdF9tYXJrcyhhcnJheVtpXSwgYWxsX2ZsYWdzKTsKKwkJY2xlYXJfY29tbWl0X21hcmtzX21hbnkoZmlsbGVkLCB3b3JrLCBhbGxfZmxhZ3MpOworCQlmcmVlX2NvbW1pdF9saXN0KGNvbW1vbik7CisJfQorCisJLyogTm93IGNvbGxlY3QgdGhlIHJlc3VsdCAqLworCUNPUFlfQVJSQVkod29yaywgYXJyYXksIGNudCk7CisJZm9yIChpID0gZmlsbGVkID0gMDsgaSA8IGNudDsgaSsrKQorCQlpZiAoIXJlZHVuZGFudFtpXSkKKwkJCWFycmF5W2ZpbGxlZCsrXSA9IHdvcmtbaV07CisJZm9yIChqID0gZmlsbGVkLCBpID0gMDsgaSA8IGNudDsgaSsrKQorCQlpZiAocmVkdW5kYW50W2ldKQorCQkJYXJyYXlbaisrXSA9IHdvcmtbaV07CisJZnJlZSh3b3JrKTsKKwlmcmVlKHJlZHVuZGFudCk7CisJZnJlZShmaWxsZWRfaW5kZXgpOworCXJldHVybiBmaWxsZWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9tZXJnZV9iYXNlc19tYW55XzAoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCQkgIHN0cnVjdCBjb21taXQgKm9uZSwKKwkJCQkJCSAgaW50IG4sCisJCQkJCQkgIHN0cnVjdCBjb21taXQgKip0d29zLAorCQkJCQkJICBpbnQgY2xlYW51cCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3Q7CisJc3RydWN0IGNvbW1pdCAqKnJzbHQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZXN1bHQ7CisJaW50IGNudCwgaTsKKworCXJlc3VsdCA9IG1lcmdlX2Jhc2VzX21hbnkociwgb25lLCBuLCB0d29zKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChvbmUgPT0gdHdvc1tpXSkKKwkJCXJldHVybiByZXN1bHQ7CisJfQorCWlmICghcmVzdWx0IHx8ICFyZXN1bHQtPm5leHQpIHsKKwkJaWYgKGNsZWFudXApIHsKKwkJCWNsZWFyX2NvbW1pdF9tYXJrcyhvbmUsIGFsbF9mbGFncyk7CisJCQljbGVhcl9jb21taXRfbWFya3NfbWFueShuLCB0d29zLCBhbGxfZmxhZ3MpOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyogVGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgKi8KKwljbnQgPSBjb21taXRfbGlzdF9jb3VudChyZXN1bHQpOworCXJzbHQgPSB4Y2FsbG9jKGNudCwgc2l6ZW9mKCpyc2x0KSk7CisJZm9yIChsaXN0ID0gcmVzdWx0LCBpID0gMDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCisJCXJzbHRbaSsrXSA9IGxpc3QtPml0ZW07CisJZnJlZV9jb21taXRfbGlzdChyZXN1bHQpOworCisJY2xlYXJfY29tbWl0X21hcmtzKG9uZSwgYWxsX2ZsYWdzKTsKKwljbGVhcl9jb21taXRfbWFya3NfbWFueShuLCB0d29zLCBhbGxfZmxhZ3MpOworCisJY250ID0gcmVtb3ZlX3JlZHVuZGFudChyLCByc2x0LCBjbnQpOworCXJlc3VsdCA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShyc2x0W2ldLCAmcmVzdWx0KTsKKwlmcmVlKHJzbHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0cnVjdCBjb21taXRfbGlzdCAqcmVwb19nZXRfbWVyZ2VfYmFzZXNfbWFueShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJICAgICAgc3RydWN0IGNvbW1pdCAqb25lLAorCQkJCQkgICAgICBpbnQgbiwKKwkJCQkJICAgICAgc3RydWN0IGNvbW1pdCAqKnR3b3MpCit7CisJcmV0dXJuIGdldF9tZXJnZV9iYXNlc19tYW55XzAociwgb25lLCBuLCB0d29zLCAxKTsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpyZXBvX2dldF9tZXJnZV9iYXNlc19tYW55X2RpcnR5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkJICAgIHN0cnVjdCBjb21taXQgKm9uZSwKKwkJCQkJCSAgICBpbnQgbiwKKwkJCQkJCSAgICBzdHJ1Y3QgY29tbWl0ICoqdHdvcykKK3sKKwlyZXR1cm4gZ2V0X21lcmdlX2Jhc2VzX21hbnlfMChyLCBvbmUsIG4sIHR3b3MsIDApOworfQorCitzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlcG9fZ2V0X21lcmdlX2Jhc2VzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgc3RydWN0IGNvbW1pdCAqb25lLAorCQkJCQkgc3RydWN0IGNvbW1pdCAqdHdvKQoreworCXJldHVybiBnZXRfbWVyZ2VfYmFzZXNfbWFueV8wKHIsIG9uZSwgMSwgJnR3bywgMSk7Cit9CisKKy8qCisgKiBJcyAiY29tbWl0IiBhIGRlc2NlbmRhbnQgb2Ygb25lIG9mIHRoZSBlbGVtZW50cyBvbiB0aGUgIndpdGhfY29tbWl0IiBsaXN0PworICovCitpbnQgaXNfZGVzY2VuZGFudF9vZihzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRfbGlzdCAqd2l0aF9jb21taXQpCit7CisJaWYgKCF3aXRoX2NvbW1pdCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoZ2VuZXJhdGlvbl9udW1iZXJzX2VuYWJsZWQodGhlX3JlcG9zaXRvcnkpKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqZnJvbV9saXN0ID0gTlVMTDsKKwkJaW50IHJlc3VsdDsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgJmZyb21fbGlzdCk7CisJCXJlc3VsdCA9IGNhbl9hbGxfZnJvbV9yZWFjaChmcm9tX2xpc3QsIHdpdGhfY29tbWl0LCAwKTsKKwkJZnJlZV9jb21taXRfbGlzdChmcm9tX2xpc3QpOworCQlyZXR1cm4gcmVzdWx0OworCX0gZWxzZSB7CisJCXdoaWxlICh3aXRoX2NvbW1pdCkgeworCQkJc3RydWN0IGNvbW1pdCAqb3RoZXI7CisKKwkJCW90aGVyID0gd2l0aF9jb21taXQtPml0ZW07CisJCQl3aXRoX2NvbW1pdCA9IHdpdGhfY29tbWl0LT5uZXh0OworCQkJaWYgKGluX21lcmdlX2Jhc2VzKG90aGVyLCBjb21taXQpKQorCQkJCXJldHVybiAxOworCQl9CisJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqIElzICJjb21taXQiIGFuIGFuY2VzdG9yIG9mIG9uZSBvZiB0aGUgInJlZmVyZW5jZXMiPworICovCitpbnQgcmVwb19pbl9tZXJnZV9iYXNlc19tYW55KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICAgIGludCBucl9yZWZlcmVuY2UsIHN0cnVjdCBjb21taXQgKipyZWZlcmVuY2UpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpiYXNlczsKKwlpbnQgcmV0ID0gMCwgaTsKKwl1aW50MzJfdCBtaW5fZ2VuZXJhdGlvbiA9IEdFTkVSQVRJT05fTlVNQkVSX0lORklOSVRZOworCisJaWYgKHJlcG9fcGFyc2VfY29tbWl0KHIsIGNvbW1pdCkpCisJCXJldHVybiByZXQ7CisJZm9yIChpID0gMDsgaSA8IG5yX3JlZmVyZW5jZTsgaSsrKSB7CisJCWlmIChyZXBvX3BhcnNlX2NvbW1pdChyLCByZWZlcmVuY2VbaV0pKQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKHJlZmVyZW5jZVtpXS0+Z2VuZXJhdGlvbiA8IG1pbl9nZW5lcmF0aW9uKQorCQkJbWluX2dlbmVyYXRpb24gPSByZWZlcmVuY2VbaV0tPmdlbmVyYXRpb247CisJfQorCisJaWYgKGNvbW1pdC0+Z2VuZXJhdGlvbiA+IG1pbl9nZW5lcmF0aW9uKQorCQlyZXR1cm4gcmV0OworCisJYmFzZXMgPSBwYWludF9kb3duX3RvX2NvbW1vbihyLCBjb21taXQsCisJCQkJICAgICBucl9yZWZlcmVuY2UsIHJlZmVyZW5jZSwKKwkJCQkgICAgIGNvbW1pdC0+Z2VuZXJhdGlvbik7CisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgUEFSRU5UMikKKwkJcmV0ID0gMTsKKwljbGVhcl9jb21taXRfbWFya3MoY29tbWl0LCBhbGxfZmxhZ3MpOworCWNsZWFyX2NvbW1pdF9tYXJrc19tYW55KG5yX3JlZmVyZW5jZSwgcmVmZXJlbmNlLCBhbGxfZmxhZ3MpOworCWZyZWVfY29tbWl0X2xpc3QoYmFzZXMpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJcyAiY29tbWl0IiBhbiBhbmNlc3RvciBvZiAoaS5lLiByZWFjaGFibGUgZnJvbSkgdGhlICJyZWZlcmVuY2UiPworICovCitpbnQgcmVwb19pbl9tZXJnZV9iYXNlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCXN0cnVjdCBjb21taXQgKnJlZmVyZW5jZSkKK3sKKwlyZXR1cm4gcmVwb19pbl9tZXJnZV9iYXNlc19tYW55KHIsIGNvbW1pdCwgMSwgJnJlZmVyZW5jZSk7Cit9CisKK3N0cnVjdCBjb21taXRfbGlzdCAqcmVkdWNlX2hlYWRzKHN0cnVjdCBjb21taXRfbGlzdCAqaGVhZHMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCXN0cnVjdCBjb21taXRfbGlzdCAqcmVzdWx0ID0gTlVMTCwgKip0YWlsID0gJnJlc3VsdDsKKwlzdHJ1Y3QgY29tbWl0ICoqYXJyYXk7CisJaW50IG51bV9oZWFkLCBpOworCisJaWYgKCFoZWFkcykKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBVbmlxdWlmeSAqLworCWZvciAocCA9IGhlYWRzOyBwOyBwID0gcC0+bmV4dCkKKwkJcC0+aXRlbS0+b2JqZWN0LmZsYWdzICY9IH5TVEFMRTsKKwlmb3IgKHAgPSBoZWFkcywgbnVtX2hlYWQgPSAwOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgU1RBTEUpCisJCQljb250aW51ZTsKKwkJcC0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFNUQUxFOworCQludW1faGVhZCsrOworCX0KKwlhcnJheSA9IHhjYWxsb2MobnVtX2hlYWQsIHNpemVvZigqYXJyYXkpKTsKKwlmb3IgKHAgPSBoZWFkcywgaSA9IDA7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBTVEFMRSkgeworCQkJYXJyYXlbaSsrXSA9IHAtPml0ZW07CisJCQlwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJj0gflNUQUxFOworCQl9CisJfQorCW51bV9oZWFkID0gcmVtb3ZlX3JlZHVuZGFudCh0aGVfcmVwb3NpdG9yeSwgYXJyYXksIG51bV9oZWFkKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2hlYWQ7IGkrKykKKwkJdGFpbCA9ICZjb21taXRfbGlzdF9pbnNlcnQoYXJyYXlbaV0sIHRhaWwpLT5uZXh0OworCWZyZWUoYXJyYXkpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgcmVkdWNlX2hlYWRzX3JlcGxhY2Uoc3RydWN0IGNvbW1pdF9saXN0ICoqaGVhZHMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZXN1bHQgPSByZWR1Y2VfaGVhZHMoKmhlYWRzKTsKKwlmcmVlX2NvbW1pdF9saXN0KCpoZWFkcyk7CisJKmhlYWRzID0gcmVzdWx0OworfQorCitpbnQgcmVmX25ld2VyKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQpCit7CisJc3RydWN0IG9iamVjdCAqbzsKKwlzdHJ1Y3QgY29tbWl0ICpvbGRfY29tbWl0LCAqbmV3X2NvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm9sZF9jb21taXRfbGlzdCA9IE5VTEw7CisKKwkvKgorCSAqIEJvdGggbmV3X2NvbW1pdCBhbmQgb2xkX2NvbW1pdCBtdXN0IGJlIGNvbW1pdC1pc2ggYW5kIG5ld19jb21taXQgaXMgZGVzY2VuZGFudCBvZgorCSAqIG9sZF9jb21taXQuICBPdGhlcndpc2Ugd2UgcmVxdWlyZSAtLWZvcmNlLgorCSAqLworCW8gPSBkZXJlZl90YWcodGhlX3JlcG9zaXRvcnksIHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2xkX29pZCksCisJCSAgICAgIE5VTEwsIDApOworCWlmICghbyB8fCBvLT50eXBlICE9IE9CSl9DT01NSVQpCisJCXJldHVybiAwOworCW9sZF9jb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKSBvOworCisJbyA9IGRlcmVmX3RhZyh0aGVfcmVwb3NpdG9yeSwgcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBuZXdfb2lkKSwKKwkJICAgICAgTlVMTCwgMCk7CisJaWYgKCFvIHx8IG8tPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIDA7CisJbmV3X2NvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopIG87CisKKwlpZiAocGFyc2VfY29tbWl0KG5ld19jb21taXQpIDwgMCkKKwkJcmV0dXJuIDA7CisKKwljb21taXRfbGlzdF9pbnNlcnQob2xkX2NvbW1pdCwgJm9sZF9jb21taXRfbGlzdCk7CisJcmV0dXJuIGlzX2Rlc2NlbmRhbnRfb2YobmV3X2NvbW1pdCwgb2xkX2NvbW1pdF9saXN0KTsKK30KKworLyoKKyAqIE1pbWlja2luZyB0aGUgcmVhbCBzdGFjaywgdGhpcyBzdGFjayBsaXZlcyBvbiB0aGUgaGVhcCwgYXZvaWRpbmcgc3RhY2sKKyAqIG92ZXJmbG93cy4KKyAqCisgKiBBdCBlYWNoIHJlY3Vyc2lvbiBzdGVwLCB0aGUgc3RhY2sgaXRlbXMgcG9pbnRzIHRvIHRoZSBjb21taXRzIHdob3NlCisgKiBhbmNlc3RvcnMgYXJlIHRvIGJlIGluc3BlY3RlZC4KKyAqLworc3RydWN0IGNvbnRhaW5zX3N0YWNrIHsKKwlpbnQgbnIsIGFsbG9jOworCXN0cnVjdCBjb250YWluc19zdGFja19lbnRyeSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCX0gKmNvbnRhaW5zX3N0YWNrOworfTsKKworc3RhdGljIGludCBpbl9jb21taXRfbGlzdChjb25zdCBzdHJ1Y3QgY29tbWl0X2xpc3QgKndhbnQsIHN0cnVjdCBjb21taXQgKmMpCit7CisJZm9yICg7IHdhbnQ7IHdhbnQgPSB3YW50LT5uZXh0KQorCQlpZiAob2lkZXEoJndhbnQtPml0ZW0tPm9iamVjdC5vaWQsICZjLT5vYmplY3Qub2lkKSkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogVGVzdCB3aGV0aGVyIHRoZSBjYW5kaWRhdGUgaXMgY29udGFpbmVkIGluIHRoZSBsaXN0LgorICogRG8gbm90IHJlY3Vyc2UgdG8gZmluZCBvdXQsIHRob3VnaCwgYnV0IHJldHVybiAtMSBpZiBpbmNvbmNsdXNpdmUuCisgKi8KK3N0YXRpYyBlbnVtIGNvbnRhaW5zX3Jlc3VsdCBjb250YWluc190ZXN0KHN0cnVjdCBjb21taXQgKmNhbmRpZGF0ZSwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgY29tbWl0X2xpc3QgKndhbnQsCisJCQkJCSAgc3RydWN0IGNvbnRhaW5zX2NhY2hlICpjYWNoZSwKKwkJCQkJICB1aW50MzJfdCBjdXRvZmYpCit7CisJZW51bSBjb250YWluc19yZXN1bHQgKmNhY2hlZCA9IGNvbnRhaW5zX2NhY2hlX2F0KGNhY2hlLCBjYW5kaWRhdGUpOworCisJLyogSWYgd2UgYWxyZWFkeSBoYXZlIHRoZSBhbnN3ZXIgY2FjaGVkLCByZXR1cm4gdGhhdC4gKi8KKwlpZiAoKmNhY2hlZCkKKwkJcmV0dXJuICpjYWNoZWQ7CisKKwkvKiBvciBhcmUgd2UgaXQ/ICovCisJaWYgKGluX2NvbW1pdF9saXN0KHdhbnQsIGNhbmRpZGF0ZSkpIHsKKwkJKmNhY2hlZCA9IENPTlRBSU5TX1lFUzsKKwkJcmV0dXJuIENPTlRBSU5TX1lFUzsKKwl9CisKKwkvKiBPdGhlcndpc2UsIHdlIGRvbid0IGtub3c7IHByZXBhcmUgdG8gcmVjdXJzZSAqLworCXBhcnNlX2NvbW1pdF9vcl9kaWUoY2FuZGlkYXRlKTsKKworCWlmIChjYW5kaWRhdGUtPmdlbmVyYXRpb24gPCBjdXRvZmYpCisJCXJldHVybiBDT05UQUlOU19OTzsKKworCXJldHVybiBDT05UQUlOU19VTktOT1dOOworfQorCitzdGF0aWMgdm9pZCBwdXNoX3RvX2NvbnRhaW5zX3N0YWNrKHN0cnVjdCBjb21taXQgKmNhbmRpZGF0ZSwgc3RydWN0IGNvbnRhaW5zX3N0YWNrICpjb250YWluc19zdGFjaykKK3sKKwlBTExPQ19HUk9XKGNvbnRhaW5zX3N0YWNrLT5jb250YWluc19zdGFjaywgY29udGFpbnNfc3RhY2stPm5yICsgMSwgY29udGFpbnNfc3RhY2stPmFsbG9jKTsKKwljb250YWluc19zdGFjay0+Y29udGFpbnNfc3RhY2tbY29udGFpbnNfc3RhY2stPm5yXS5jb21taXQgPSBjYW5kaWRhdGU7CisJY29udGFpbnNfc3RhY2stPmNvbnRhaW5zX3N0YWNrW2NvbnRhaW5zX3N0YWNrLT5ucisrXS5wYXJlbnRzID0gY2FuZGlkYXRlLT5wYXJlbnRzOworfQorCitzdGF0aWMgZW51bSBjb250YWluc19yZXN1bHQgY29udGFpbnNfdGFnX2FsZ28oc3RydWN0IGNvbW1pdCAqY2FuZGlkYXRlLAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0X2xpc3QgKndhbnQsCisJCQkJCSAgICAgIHN0cnVjdCBjb250YWluc19jYWNoZSAqY2FjaGUpCit7CisJc3RydWN0IGNvbnRhaW5zX3N0YWNrIGNvbnRhaW5zX3N0YWNrID0geyAwLCAwLCBOVUxMIH07CisJZW51bSBjb250YWluc19yZXN1bHQgcmVzdWx0OworCXVpbnQzMl90IGN1dG9mZiA9IEdFTkVSQVRJT05fTlVNQkVSX0lORklOSVRZOworCWNvbnN0IHN0cnVjdCBjb21taXRfbGlzdCAqcDsKKworCWZvciAocCA9IHdhbnQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmMgPSBwLT5pdGVtOworCQlsb2FkX2NvbW1pdF9ncmFwaF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBjKTsKKwkJaWYgKGMtPmdlbmVyYXRpb24gPCBjdXRvZmYpCisJCQljdXRvZmYgPSBjLT5nZW5lcmF0aW9uOworCX0KKworCXJlc3VsdCA9IGNvbnRhaW5zX3Rlc3QoY2FuZGlkYXRlLCB3YW50LCBjYWNoZSwgY3V0b2ZmKTsKKwlpZiAocmVzdWx0ICE9IENPTlRBSU5TX1VOS05PV04pCisJCXJldHVybiByZXN1bHQ7CisKKwlwdXNoX3RvX2NvbnRhaW5zX3N0YWNrKGNhbmRpZGF0ZSwgJmNvbnRhaW5zX3N0YWNrKTsKKwl3aGlsZSAoY29udGFpbnNfc3RhY2subnIpIHsKKwkJc3RydWN0IGNvbnRhaW5zX3N0YWNrX2VudHJ5ICplbnRyeSA9ICZjb250YWluc19zdGFjay5jb250YWluc19zdGFja1tjb250YWluc19zdGFjay5uciAtIDFdOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBlbnRyeS0+Y29tbWl0OworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBlbnRyeS0+cGFyZW50czsKKworCQlpZiAoIXBhcmVudHMpIHsKKwkJCSpjb250YWluc19jYWNoZV9hdChjYWNoZSwgY29tbWl0KSA9IENPTlRBSU5TX05POworCQkJY29udGFpbnNfc3RhY2subnItLTsKKwkJfQorCQkvKgorCQkgKiBJZiB3ZSBqdXN0IHBvcHBlZCB0aGUgc3RhY2ssIHBhcmVudHMtPml0ZW0gaGFzIGJlZW4gbWFya2VkLAorCQkgKiB0aGVyZWZvcmUgY29udGFpbnNfdGVzdCB3aWxsIHJldHVybiBhIG1lYW5pbmdmdWwgeWVzL25vLgorCQkgKi8KKwkJZWxzZSBzd2l0Y2ggKGNvbnRhaW5zX3Rlc3QocGFyZW50cy0+aXRlbSwgd2FudCwgY2FjaGUsIGN1dG9mZikpIHsKKwkJY2FzZSBDT05UQUlOU19ZRVM6CisJCQkqY29udGFpbnNfY2FjaGVfYXQoY2FjaGUsIGNvbW1pdCkgPSBDT05UQUlOU19ZRVM7CisJCQljb250YWluc19zdGFjay5uci0tOworCQkJYnJlYWs7CisJCWNhc2UgQ09OVEFJTlNfTk86CisJCQllbnRyeS0+cGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCQlicmVhazsKKwkJY2FzZSBDT05UQUlOU19VTktOT1dOOgorCQkJcHVzaF90b19jb250YWluc19zdGFjayhwYXJlbnRzLT5pdGVtLCAmY29udGFpbnNfc3RhY2spOworCQkJYnJlYWs7CisJCX0KKwl9CisJZnJlZShjb250YWluc19zdGFjay5jb250YWluc19zdGFjayk7CisJcmV0dXJuIGNvbnRhaW5zX3Rlc3QoY2FuZGlkYXRlLCB3YW50LCBjYWNoZSwgY3V0b2ZmKTsKK30KKworaW50IGNvbW1pdF9jb250YWlucyhzdHJ1Y3QgcmVmX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIHN0cnVjdCBjb250YWluc19jYWNoZSAqY2FjaGUpCit7CisJaWYgKGZpbHRlci0+d2l0aF9jb21taXRfdGFnX2FsZ28pCisJCXJldHVybiBjb250YWluc190YWdfYWxnbyhjb21taXQsIGxpc3QsIGNhY2hlKSA9PSBDT05UQUlOU19ZRVM7CisJcmV0dXJuIGlzX2Rlc2NlbmRhbnRfb2YoY29tbWl0LCBsaXN0KTsKK30KKworc3RhdGljIGludCBjb21wYXJlX2NvbW1pdHNfYnlfZ2VuKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwljb25zdCBzdHJ1Y3QgY29tbWl0ICphID0gKihjb25zdCBzdHJ1Y3QgY29tbWl0ICogY29uc3QgKilfYTsKKwljb25zdCBzdHJ1Y3QgY29tbWl0ICpiID0gKihjb25zdCBzdHJ1Y3QgY29tbWl0ICogY29uc3QgKilfYjsKKworCWlmIChhLT5nZW5lcmF0aW9uIDwgYi0+Z2VuZXJhdGlvbikKKwkJcmV0dXJuIC0xOworCWlmIChhLT5nZW5lcmF0aW9uID4gYi0+Z2VuZXJhdGlvbikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjYW5fYWxsX2Zyb21fcmVhY2hfd2l0aF9mbGFnKHN0cnVjdCBvYmplY3RfYXJyYXkgKmZyb20sCisJCQkJIHVuc2lnbmVkIGludCB3aXRoX2ZsYWcsCisJCQkJIHVuc2lnbmVkIGludCBhc3NpZ25fZmxhZywKKwkJCQkgdGltZV90IG1pbl9jb21taXRfZGF0ZSwKKwkJCQkgdWludDMyX3QgbWluX2dlbmVyYXRpb24pCit7CisJc3RydWN0IGNvbW1pdCAqKmxpc3QgPSBOVUxMOworCWludCBpOworCWludCBucl9jb21taXRzOworCWludCByZXN1bHQgPSAxOworCisJQUxMT0NfQVJSQVkobGlzdCwgZnJvbS0+bnIpOworCW5yX2NvbW1pdHMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBmcm9tLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKmZyb21fb25lID0gZnJvbS0+b2JqZWN0c1tpXS5pdGVtOworCisJCWlmICghZnJvbV9vbmUgfHwgZnJvbV9vbmUtPmZsYWdzICYgYXNzaWduX2ZsYWcpCisJCQljb250aW51ZTsKKworCQlmcm9tX29uZSA9IGRlcmVmX3RhZyh0aGVfcmVwb3NpdG9yeSwgZnJvbV9vbmUsCisJCQkJICAgICAiYSBmcm9tIG9iamVjdCIsIDApOworCQlpZiAoIWZyb21fb25lIHx8IGZyb21fb25lLT50eXBlICE9IE9CSl9DT01NSVQpIHsKKwkJCS8qCisJCQkgKiBubyB3YXkgdG8gdGVsbCBpZiB0aGlzIGlzIHJlYWNoYWJsZSBieQorCQkJICogbG9va2luZyBhdCB0aGUgYW5jZXN0cnkgY2hhaW4gYWxvbmUsIHNvCisJCQkgKiBsZWF2ZSBhIG5vdGUgdG8gb3Vyc2VsdmVzIG5vdCB0byB3b3JyeSBhYm91dAorCQkJICogdGhpcyBvYmplY3QgYW55bW9yZS4KKwkJCSAqLworCQkJZnJvbS0+b2JqZWN0c1tpXS5pdGVtLT5mbGFncyB8PSBhc3NpZ25fZmxhZzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbGlzdFtucl9jb21taXRzXSA9IChzdHJ1Y3QgY29tbWl0ICopZnJvbV9vbmU7CisJCWlmIChwYXJzZV9jb21taXQobGlzdFtucl9jb21taXRzXSkgfHwKKwkJICAgIGxpc3RbbnJfY29tbWl0c10tPmdlbmVyYXRpb24gPCBtaW5fZ2VuZXJhdGlvbikgeworCQkJcmVzdWx0ID0gMDsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCisJCW5yX2NvbW1pdHMrKzsKKwl9CisKKwlRU09SVChsaXN0LCBucl9jb21taXRzLCBjb21wYXJlX2NvbW1pdHNfYnlfZ2VuKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jb21taXRzOyBpKyspIHsKKwkJLyogREZTIGZyb20gbGlzdFtpXSAqLworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnN0YWNrID0gTlVMTDsKKworCQlsaXN0W2ldLT5vYmplY3QuZmxhZ3MgfD0gYXNzaWduX2ZsYWc7CisJCWNvbW1pdF9saXN0X2luc2VydChsaXN0W2ldLCAmc3RhY2spOworCisJCXdoaWxlIChzdGFjaykgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisKKwkJCWlmIChzdGFjay0+aXRlbS0+b2JqZWN0LmZsYWdzICYgKHdpdGhfZmxhZyB8IFJFU1VMVCkpIHsKKwkJCQlwb3BfY29tbWl0KCZzdGFjayk7CisJCQkJaWYgKHN0YWNrKQorCQkJCQlzdGFjay0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFJFU1VMVDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZm9yIChwYXJlbnQgPSBzdGFjay0+aXRlbS0+cGFyZW50czsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpIHsKKwkJCQlpZiAocGFyZW50LT5pdGVtLT5vYmplY3QuZmxhZ3MgJiAod2l0aF9mbGFnIHwgUkVTVUxUKSkKKwkJCQkJc3RhY2stPml0ZW0tPm9iamVjdC5mbGFncyB8PSBSRVNVTFQ7CisKKwkJCQlpZiAoIShwYXJlbnQtPml0ZW0tPm9iamVjdC5mbGFncyAmIGFzc2lnbl9mbGFnKSkgeworCQkJCQlwYXJlbnQtPml0ZW0tPm9iamVjdC5mbGFncyB8PSBhc3NpZ25fZmxhZzsKKworCQkJCQlpZiAocGFyc2VfY29tbWl0KHBhcmVudC0+aXRlbSkgfHwKKwkJCQkJICAgIHBhcmVudC0+aXRlbS0+ZGF0ZSA8IG1pbl9jb21taXRfZGF0ZSB8fAorCQkJCQkgICAgcGFyZW50LT5pdGVtLT5nZW5lcmF0aW9uIDwgbWluX2dlbmVyYXRpb24pCisJCQkJCQljb250aW51ZTsKKworCQkJCQljb21taXRfbGlzdF9pbnNlcnQocGFyZW50LT5pdGVtLCAmc3RhY2spOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmICghcGFyZW50KQorCQkJCXBvcF9jb21taXQoJnN0YWNrKTsKKwkJfQorCisJCWlmICghKGxpc3RbaV0tPm9iamVjdC5mbGFncyAmICh3aXRoX2ZsYWcgfCBSRVNVTFQpKSkgeworCQkJcmVzdWx0ID0gMDsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKworY2xlYW51cDoKKwljbGVhcl9jb21taXRfbWFya3NfbWFueShucl9jb21taXRzLCBsaXN0LCBSRVNVTFQgfCBhc3NpZ25fZmxhZyk7CisJZnJlZShsaXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBmcm9tLT5ucjsgaSsrKQorCQlmcm9tLT5vYmplY3RzW2ldLml0ZW0tPmZsYWdzICY9IH5hc3NpZ25fZmxhZzsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBjYW5fYWxsX2Zyb21fcmVhY2goc3RydWN0IGNvbW1pdF9saXN0ICpmcm9tLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKnRvLAorCQkgICAgICAgaW50IGN1dG9mZl9ieV9taW5fZGF0ZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IGZyb21fb2JqcyA9IE9CSkVDVF9BUlJBWV9JTklUOworCXRpbWVfdCBtaW5fY29tbWl0X2RhdGUgPSBjdXRvZmZfYnlfbWluX2RhdGUgPyBmcm9tLT5pdGVtLT5kYXRlIDogMDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmZyb21faXRlciA9IGZyb20sICp0b19pdGVyID0gdG87CisJaW50IHJlc3VsdDsKKwl1aW50MzJfdCBtaW5fZ2VuZXJhdGlvbiA9IEdFTkVSQVRJT05fTlVNQkVSX0lORklOSVRZOworCisJd2hpbGUgKGZyb21faXRlcikgeworCQlhZGRfb2JqZWN0X2FycmF5KCZmcm9tX2l0ZXItPml0ZW0tPm9iamVjdCwgTlVMTCwgJmZyb21fb2Jqcyk7CisKKwkJaWYgKCFwYXJzZV9jb21taXQoZnJvbV9pdGVyLT5pdGVtKSkgeworCQkJaWYgKGZyb21faXRlci0+aXRlbS0+ZGF0ZSA8IG1pbl9jb21taXRfZGF0ZSkKKwkJCQltaW5fY29tbWl0X2RhdGUgPSBmcm9tX2l0ZXItPml0ZW0tPmRhdGU7CisKKwkJCWlmIChmcm9tX2l0ZXItPml0ZW0tPmdlbmVyYXRpb24gPCBtaW5fZ2VuZXJhdGlvbikKKwkJCQltaW5fZ2VuZXJhdGlvbiA9IGZyb21faXRlci0+aXRlbS0+Z2VuZXJhdGlvbjsKKwkJfQorCisJCWZyb21faXRlciA9IGZyb21faXRlci0+bmV4dDsKKwl9CisKKwl3aGlsZSAodG9faXRlcikgeworCQlpZiAoIXBhcnNlX2NvbW1pdCh0b19pdGVyLT5pdGVtKSkgeworCQkJaWYgKHRvX2l0ZXItPml0ZW0tPmRhdGUgPCBtaW5fY29tbWl0X2RhdGUpCisJCQkJbWluX2NvbW1pdF9kYXRlID0gdG9faXRlci0+aXRlbS0+ZGF0ZTsKKworCQkJaWYgKHRvX2l0ZXItPml0ZW0tPmdlbmVyYXRpb24gPCBtaW5fZ2VuZXJhdGlvbikKKwkJCQltaW5fZ2VuZXJhdGlvbiA9IHRvX2l0ZXItPml0ZW0tPmdlbmVyYXRpb247CisJCX0KKworCQl0b19pdGVyLT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gUEFSRU5UMjsKKworCQl0b19pdGVyID0gdG9faXRlci0+bmV4dDsKKwl9CisKKwlyZXN1bHQgPSBjYW5fYWxsX2Zyb21fcmVhY2hfd2l0aF9mbGFnKCZmcm9tX29ianMsIFBBUkVOVDIsIFBBUkVOVDEsCisJCQkJCSAgICAgIG1pbl9jb21taXRfZGF0ZSwgbWluX2dlbmVyYXRpb24pOworCisJd2hpbGUgKGZyb20pIHsKKwkJY2xlYXJfY29tbWl0X21hcmtzKGZyb20tPml0ZW0sIFBBUkVOVDEpOworCQlmcm9tID0gZnJvbS0+bmV4dDsKKwl9CisKKwl3aGlsZSAodG8pIHsKKwkJY2xlYXJfY29tbWl0X21hcmtzKHRvLT5pdGVtLCBQQVJFTlQyKTsKKwkJdG8gPSB0by0+bmV4dDsKKwl9CisKKwlvYmplY3RfYXJyYXlfY2xlYXIoJmZyb21fb2Jqcyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfcmVhY2hhYmxlX3N1YnNldChzdHJ1Y3QgY29tbWl0ICoqZnJvbSwgaW50IG5yX2Zyb20sCisJCQkJCSBzdHJ1Y3QgY29tbWl0ICoqdG8sIGludCBucl90bywKKwkJCQkJIHVuc2lnbmVkIGludCByZWFjaGFibGVfZmxhZykKK3sKKwlzdHJ1Y3QgY29tbWl0ICoqaXRlbTsKKwlzdHJ1Y3QgY29tbWl0ICpjdXJyZW50OworCXN0cnVjdCBjb21taXRfbGlzdCAqZm91bmRfY29tbWl0cyA9IE5VTEw7CisJc3RydWN0IGNvbW1pdCAqKnRvX2xhc3QgPSB0byArIG5yX3RvOworCXN0cnVjdCBjb21taXQgKipmcm9tX2xhc3QgPSBmcm9tICsgbnJfZnJvbTsKKwl1aW50MzJfdCBtaW5fZ2VuZXJhdGlvbiA9IEdFTkVSQVRJT05fTlVNQkVSX0lORklOSVRZOworCWludCBudW1fdG9fZmluZCA9IDA7CisKKwlzdHJ1Y3QgcHJpb19xdWV1ZSBxdWV1ZSA9IHsgY29tcGFyZV9jb21taXRzX2J5X2dlbl90aGVuX2NvbW1pdF9kYXRlIH07CisKKwlmb3IgKGl0ZW0gPSB0bzsgaXRlbSA8IHRvX2xhc3Q7IGl0ZW0rKykgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gKml0ZW07CisKKwkJcGFyc2VfY29tbWl0KGMpOworCQlpZiAoYy0+Z2VuZXJhdGlvbiA8IG1pbl9nZW5lcmF0aW9uKQorCQkJbWluX2dlbmVyYXRpb24gPSBjLT5nZW5lcmF0aW9uOworCisJCWlmICghKGMtPm9iamVjdC5mbGFncyAmIFBBUkVOVDEpKSB7CisJCQljLT5vYmplY3QuZmxhZ3MgfD0gUEFSRU5UMTsKKwkJCW51bV90b19maW5kKys7CisJCX0KKwl9CisKKwlmb3IgKGl0ZW0gPSBmcm9tOyBpdGVtIDwgZnJvbV9sYXN0OyBpdGVtKyspIHsKKwkJc3RydWN0IGNvbW1pdCAqYyA9ICppdGVtOworCQlpZiAoIShjLT5vYmplY3QuZmxhZ3MgJiBQQVJFTlQyKSkgeworCQkJYy0+b2JqZWN0LmZsYWdzIHw9IFBBUkVOVDI7CisJCQlwYXJzZV9jb21taXQoYyk7CisKKwkJCXByaW9fcXVldWVfcHV0KCZxdWV1ZSwgKml0ZW0pOworCQl9CisJfQorCisJd2hpbGUgKG51bV90b19maW5kICYmIChjdXJyZW50ID0gcHJpb19xdWV1ZV9nZXQoJnF1ZXVlKSkgIT0gTlVMTCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisKKwkJaWYgKGN1cnJlbnQtPm9iamVjdC5mbGFncyAmIFBBUkVOVDEpIHsKKwkJCWN1cnJlbnQtPm9iamVjdC5mbGFncyAmPSB+UEFSRU5UMTsKKwkJCWN1cnJlbnQtPm9iamVjdC5mbGFncyB8PSByZWFjaGFibGVfZmxhZzsKKwkJCWNvbW1pdF9saXN0X2luc2VydChjdXJyZW50LCAmZm91bmRfY29tbWl0cyk7CisJCQludW1fdG9fZmluZC0tOworCQl9CisKKwkJZm9yIChwYXJlbnRzID0gY3VycmVudC0+cGFyZW50czsgcGFyZW50czsgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpIHsKKwkJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnRzLT5pdGVtOworCisJCQlwYXJzZV9jb21taXQocCk7CisKKwkJCWlmIChwLT5nZW5lcmF0aW9uIDwgbWluX2dlbmVyYXRpb24pCisJCQkJY29udGludWU7CisKKwkJCWlmIChwLT5vYmplY3QuZmxhZ3MgJiBQQVJFTlQyKQorCQkJCWNvbnRpbnVlOworCisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gUEFSRU5UMjsKKwkJCXByaW9fcXVldWVfcHV0KCZxdWV1ZSwgcCk7CisJCX0KKwl9CisKKwljbGVhcl9jb21taXRfbWFya3NfbWFueShucl90bywgdG8sIFBBUkVOVDEpOworCWNsZWFyX2NvbW1pdF9tYXJrc19tYW55KG5yX2Zyb20sIGZyb20sIFBBUkVOVDIpOworCisJcmV0dXJuIGZvdW5kX2NvbW1pdHM7Cit9CmRpZmYgLS1naXQgYS9jb21taXQtcmVhY2guaCBiL2NvbW1pdC1yZWFjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YTQzZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21taXQtcmVhY2guaApAQCAtMCwwICsxLDEwNSBAQAorI2lmbmRlZiBDT01NSVRfUkVBQ0hfSAorI2RlZmluZSBDT01NSVRfUkVBQ0hfSAorCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKworc3RydWN0IGNvbW1pdF9saXN0Oworc3RydWN0IHJlZl9maWx0ZXI7CitzdHJ1Y3Qgb2JqZWN0X2lkOworc3RydWN0IG9iamVjdF9hcnJheTsKKworc3RydWN0IGNvbW1pdF9saXN0ICpyZXBvX2dldF9tZXJnZV9iYXNlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJIHN0cnVjdCBjb21taXQgKnJldjEsCisJCQkJCSBzdHJ1Y3QgY29tbWl0ICpyZXYyKTsKK3N0cnVjdCBjb21taXRfbGlzdCAqcmVwb19nZXRfbWVyZ2VfYmFzZXNfbWFueShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJICAgICAgc3RydWN0IGNvbW1pdCAqb25lLCBpbnQgbiwKKwkJCQkJICAgICAgc3RydWN0IGNvbW1pdCAqKnR3b3MpOworLyogVG8gYmUgdXNlZCBvbmx5IHdoZW4gb2JqZWN0IGZsYWdzIGFmdGVyIHRoaXMgY2FsbCBubyBsb25nZXIgbWF0dGVyICovCitzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlcG9fZ2V0X21lcmdlX2Jhc2VzX21hbnlfZGlydHkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCQkgICAgc3RydWN0IGNvbW1pdCAqb25lLCBpbnQgbiwKKwkJCQkJCSAgICBzdHJ1Y3QgY29tbWl0ICoqdHdvcyk7CisjaWZuZGVmIE5PX1RIRV9SRVBPU0lUT1JZX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjZGVmaW5lIGdldF9tZXJnZV9iYXNlcyhyMSwgcjIpICAgICAgICAgICByZXBvX2dldF9tZXJnZV9iYXNlcyh0aGVfcmVwb3NpdG9yeSwgcjEsIHIyKQorI2RlZmluZSBnZXRfbWVyZ2VfYmFzZXNfbWFueShvbmUsIG4sIHR3bykgcmVwb19nZXRfbWVyZ2VfYmFzZXNfbWFueSh0aGVfcmVwb3NpdG9yeSwgb25lLCBuLCB0d28pCisjZGVmaW5lIGdldF9tZXJnZV9iYXNlc19tYW55X2RpcnR5KG9uZSwgbiwgdHdvcykgcmVwb19nZXRfbWVyZ2VfYmFzZXNfbWFueV9kaXJ0eSh0aGVfcmVwb3NpdG9yeSwgb25lLCBuLCB0d29zKQorI2VuZGlmCisKK3N0cnVjdCBjb21taXRfbGlzdCAqZ2V0X29jdG9wdXNfbWVyZ2VfYmFzZXMoc3RydWN0IGNvbW1pdF9saXN0ICppbik7CisKK2ludCBpc19kZXNjZW5kYW50X29mKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdF9saXN0ICp3aXRoX2NvbW1pdCk7CitpbnQgcmVwb19pbl9tZXJnZV9iYXNlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCXN0cnVjdCBjb21taXQgKnJlZmVyZW5jZSk7CitpbnQgcmVwb19pbl9tZXJnZV9iYXNlc19tYW55KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICAgIGludCBucl9yZWZlcmVuY2UsIHN0cnVjdCBjb21taXQgKipyZWZlcmVuY2UpOworI2lmbmRlZiBOT19USEVfUkVQT1NJVE9SWV9DT01QQVRJQklMSVRZX01BQ1JPUworI2RlZmluZSBpbl9tZXJnZV9iYXNlcyhjMSwgYzIpIHJlcG9faW5fbWVyZ2VfYmFzZXModGhlX3JlcG9zaXRvcnksIGMxLCBjMikKKyNkZWZpbmUgaW5fbWVyZ2VfYmFzZXNfbWFueShjMSwgbiwgY3MpIHJlcG9faW5fbWVyZ2VfYmFzZXNfbWFueSh0aGVfcmVwb3NpdG9yeSwgYzEsIG4sIGNzKQorI2VuZGlmCisKKy8qCisgKiBUYWtlcyBhIGxpc3Qgb2YgY29tbWl0cyBhbmQgcmV0dXJucyBhIG5ldyBsaXN0IHdoZXJlIHRob3NlCisgKiBoYXZlIGJlZW4gcmVtb3ZlZCB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gb3RoZXIgY29tbWl0cyBpbgorICogdGhlIGxpc3QuIEl0IGlzIHVzZWZ1bCBmb3IsIGUuZy4sIHJlZHVjaW5nIHRoZSBjb21taXRzCisgKiByYW5kb21seSB0aHJvd24gYXQgdGhlIGdpdC1tZXJnZSBjb21tYW5kIGFuZCByZW1vdmluZworICogcmVkdW5kYW50IGNvbW1pdHMgdGhhdCB0aGUgdXNlciBzaG91bGRuJ3QgaGF2ZSBnaXZlbiB0byBpdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRlc3Ryb3lzIHRoZSBTVEFMRSBiaXQgb2YgdGhlIGNvbW1pdCBvYmplY3RzJworICogZmxhZ3MuCisgKi8KK3N0cnVjdCBjb21taXRfbGlzdCAqcmVkdWNlX2hlYWRzKHN0cnVjdCBjb21taXRfbGlzdCAqaGVhZHMpOworCisvKgorICogTGlrZSBgcmVkdWNlX2hlYWRzKClgLCBleGNlcHQgaXQgcmVwbGFjZXMgdGhlIGxpc3QuIFVzZSB0aGlzCisgKiBpbnN0ZWFkIG9mIGBmb28gPSByZWR1Y2VfaGVhZHMoZm9vKTtgIHRvIGF2b2lkIG1lbW9yeSBsZWFrcy4KKyAqLwordm9pZCByZWR1Y2VfaGVhZHNfcmVwbGFjZShzdHJ1Y3QgY29tbWl0X2xpc3QgKipoZWFkcyk7CisKK2ludCByZWZfbmV3ZXIoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCk7CisKKy8qCisgKiBVbmtub3duIGhhcyB0byBiZSAiMCIgaGVyZSwgYmVjYXVzZSB0aGF0J3MgdGhlIGRlZmF1bHQgdmFsdWUgZm9yCisgKiBjb250YWluc19jYWNoZSBzbGFiIGVudHJpZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBhc3NpZ25lZC4KKyAqLworZW51bSBjb250YWluc19yZXN1bHQgeworCUNPTlRBSU5TX1VOS05PV04gPSAwLAorCUNPTlRBSU5TX05PLAorCUNPTlRBSU5TX1lFUworfTsKKworZGVmaW5lX2NvbW1pdF9zbGFiKGNvbnRhaW5zX2NhY2hlLCBlbnVtIGNvbnRhaW5zX3Jlc3VsdCk7CisKK2ludCBjb21taXRfY29udGFpbnMoc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkgICAgc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LCBzdHJ1Y3QgY29udGFpbnNfY2FjaGUgKmNhY2hlKTsKKworLyoKKyAqIERldGVybWluZSBpZiBldmVyeSBjb21taXQgaW4gJ2Zyb20nIGNhbiByZWFjaCBhdCBsZWFzdCBvbmUgY29tbWl0CisgKiB0aGF0IGlzIG1hcmtlZCB3aXRoICd3aXRoX2ZsYWcnLiBBcyB3ZSB0cmF2ZXJzZSwgdXNlICdhc3NpZ25fZmxhZycKKyAqIGFzIGEgbWFya2VyIGZvciBjb21taXRzIHRoYXQgYXJlIGFscmVhZHkgdmlzaXRlZC4gRG8gbm90IHdhbGsKKyAqIGNvbW1pdHMgd2l0aCBkYXRlIGJlbG93ICdtaW5fY29tbWl0X2RhdGUnIG9yIGdlbmVyYXRpb24gYmVsb3cKKyAqICdtaW5fZ2VuZXJhdGlvbicuCisgKi8KK2ludCBjYW5fYWxsX2Zyb21fcmVhY2hfd2l0aF9mbGFnKHN0cnVjdCBvYmplY3RfYXJyYXkgKmZyb20sCisJCQkJIHVuc2lnbmVkIGludCB3aXRoX2ZsYWcsCisJCQkJIHVuc2lnbmVkIGludCBhc3NpZ25fZmxhZywKKwkJCQkgdGltZV90IG1pbl9jb21taXRfZGF0ZSwKKwkJCQkgdWludDMyX3QgbWluX2dlbmVyYXRpb24pOworaW50IGNhbl9hbGxfZnJvbV9yZWFjaChzdHJ1Y3QgY29tbWl0X2xpc3QgKmZyb20sIHN0cnVjdCBjb21taXRfbGlzdCAqdG8sCisJCSAgICAgICBpbnQgY29tbWl0X2RhdGVfY3V0b2ZmKTsKKworCisvKgorICogUmV0dXJuIGEgbGlzdCBvZiBjb21taXRzIGNvbnRhaW5pbmcgdGhlIGNvbW1pdHMgaW4gdGhlICd0bycgYXJyYXkKKyAqIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIGF0IGxlYXN0IG9uZSBjb21taXQgaW4gdGhlICdmcm9tJyBhcnJheS4KKyAqIEFsc28gYWRkIHRoZSBnaXZlbiAnZmxhZycgdG8gZWFjaCBvZiB0aGUgY29tbWl0cyBpbiB0aGUgcmV0dXJuZWQgbGlzdC4KKyAqCisgKiBUaGlzIG1ldGhvZCB1c2VzIHRoZSBQQVJFTlQxIGFuZCBQQVJFTlQyIGZsYWdzIGR1cmluZyBpdHMgb3BlcmF0aW9uLAorICogc28gYmUgc3VyZSB0aGVzZSBmbGFncyBhcmUgbm90IHNldCBiZWZvcmUgY2FsbGluZyB0aGUgbWV0aG9kLgorICovCitzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9yZWFjaGFibGVfc3Vic2V0KHN0cnVjdCBjb21taXQgKipmcm9tLCBpbnQgbnJfZnJvbSwKKwkJCQkJIHN0cnVjdCBjb21taXQgKip0bywgaW50IG5yX3RvLAorCQkJCQkgdW5zaWduZWQgaW50IHJlYWNoYWJsZV9mbGFnKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21taXQtc2xhYi1kZWNsLmggYi9jb21taXQtc2xhYi1kZWNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZiZWQxNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1pdC1zbGFiLWRlY2wuaApAQCAtMCwwICsxLDQzIEBACisjaWZuZGVmIENPTU1JVF9TTEFCX0RFQ0xfSAorI2RlZmluZSBDT01NSVRfU0xBQl9ERUNMX0gKKworLyogYWxsb2NhdGUgfjUxMmtCIGF0IG9uY2UsIGFsbG93aW5nIGZvciBtYWxsb2Mgb3ZlcmhlYWQgKi8KKyNpZm5kZWYgQ09NTUlUX1NMQUJfU0laRQorI2RlZmluZSBDT01NSVRfU0xBQl9TSVpFICg1MTIqMTAyNC0zMikKKyNlbmRpZgorCisjZGVmaW5lIGRlY2xhcmVfY29tbWl0X3NsYWIoc2xhYm5hbWUsIGVsZW10eXBlKSAJCQlcCisJCQkJCQkJCQlcCitzdHJ1Y3Qgc2xhYm5hbWUgewkJCQkJCQlcCisJdW5zaWduZWQgc2xhYl9zaXplOwkJCQkJCVwKKwl1bnNpZ25lZCBzdHJpZGU7CQkJCQkJXAorCXVuc2lnbmVkIHNsYWJfY291bnQ7CQkJCQkJXAorCWVsZW10eXBlICoqc2xhYjsJCQkJCQlcCit9CisKKy8qCisgKiBTdGF0aWNhbGx5IGluaXRpYWxpemUgYSBjb21taXQgc2xhYiBuYW1lZCAidmFyIi4gTm90ZSB0aGF0IHRoaXMKKyAqIGV2YWx1YXRlcyAic3RyaWRlIiBtdWx0aXBsZSB0aW1lcyEgRXhhbXBsZToKKyAqCisgKiAgIHN0cnVjdCBpbmRlZ3JlZSBpbmRlZ3JlZXMgPSBDT01NSVRfU0xBQl9JTklUKDEsIGluZGVncmVlcyk7CisgKgorICovCisjZGVmaW5lIENPTU1JVF9TTEFCX0lOSVQoc3RyaWRlLCB2YXIpIHsgXAorCUNPTU1JVF9TTEFCX1NJWkUgLyBzaXplb2YoKiooKHZhcikuc2xhYikpIC8gKHN0cmlkZSksIFwKKwkoc3RyaWRlKSwgMCwgTlVMTCBcCit9CisKKyNkZWZpbmUgZGVjbGFyZV9jb21taXRfc2xhYl9wcm90b3R5cGVzKHNsYWJuYW1lLCBlbGVtdHlwZSkJCVwKKwkJCQkJCQkJCVwKK3ZvaWQgaW5pdF8gIyNzbGFibmFtZSMjIF93aXRoX3N0cmlkZShzdHJ1Y3Qgc2xhYm5hbWUgKnMsIHVuc2lnbmVkIHN0cmlkZSk7IFwKK3ZvaWQgaW5pdF8gIyNzbGFibmFtZShzdHJ1Y3Qgc2xhYm5hbWUgKnMpOwkJCQlcCit2b2lkIGNsZWFyXyAjI3NsYWJuYW1lKHN0cnVjdCBzbGFibmFtZSAqcyk7CQkJCVwKK2VsZW10eXBlICpzbGFibmFtZSMjIF9hdF9wZWVrKHN0cnVjdCBzbGFibmFtZSAqcywgY29uc3Qgc3RydWN0IGNvbW1pdCAqYywgaW50IGFkZF9pZl9taXNzaW5nKTsgXAorZWxlbXR5cGUgKnNsYWJuYW1lIyMgX2F0KHN0cnVjdCBzbGFibmFtZSAqcywgY29uc3Qgc3RydWN0IGNvbW1pdCAqYyk7CVwKK2VsZW10eXBlICpzbGFibmFtZSMjIF9wZWVrKHN0cnVjdCBzbGFibmFtZSAqcywgY29uc3Qgc3RydWN0IGNvbW1pdCAqYykKKworI2RlZmluZSBkZWZpbmVfc2hhcmVkX2NvbW1pdF9zbGFiKHNsYWJuYW1lLCBlbGVtdHlwZSkgXAorCWRlY2xhcmVfY29tbWl0X3NsYWIoc2xhYm5hbWUsIGVsZW10eXBlKTsgXAorCWRlY2xhcmVfY29tbWl0X3NsYWJfcHJvdG90eXBlcyhzbGFibmFtZSwgZWxlbXR5cGUpCisKKyNlbmRpZiAvKiBDT01NSVRfU0xBQl9ERUNMX0ggKi8KZGlmZiAtLWdpdCBhL2NvbW1pdC1zbGFiLWltcGwuaCBiL2NvbW1pdC1zbGFiLWltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzBlYjkxCi0tLSAvZGV2L251bGwKKysrIGIvY29tbWl0LXNsYWItaW1wbC5oCkBAIC0wLDAgKzEsOTQgQEAKKyNpZm5kZWYgQ09NTUlUX1NMQUJfSU1QTF9ICisjZGVmaW5lIENPTU1JVF9TTEFCX0lNUExfSAorCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKKyNkZWZpbmUgaW1wbGVtZW50X3N0YXRpY19jb21taXRfc2xhYihzbGFibmFtZSwgZWxlbXR5cGUpIFwKKwlpbXBsZW1lbnRfY29tbWl0X3NsYWIoc2xhYm5hbWUsIGVsZW10eXBlLCBNQVlCRV9VTlVTRUQgc3RhdGljKQorCisjZGVmaW5lIGltcGxlbWVudF9zaGFyZWRfY29tbWl0X3NsYWIoc2xhYm5hbWUsIGVsZW10eXBlKSBcCisJaW1wbGVtZW50X2NvbW1pdF9zbGFiKHNsYWJuYW1lLCBlbGVtdHlwZSwgKQorCisjZGVmaW5lIGltcGxlbWVudF9jb21taXRfc2xhYihzbGFibmFtZSwgZWxlbXR5cGUsIHNjb3BlKQkJXAorCQkJCQkJCQkJXAorc2NvcGUgdm9pZCBpbml0XyAjI3NsYWJuYW1lIyMgX3dpdGhfc3RyaWRlKHN0cnVjdCBzbGFibmFtZSAqcywJCVwKKwkJCQkJCSAgIHVuc2lnbmVkIHN0cmlkZSkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZWxlbV9zaXplOwkJCQkJCVwKKwlpZiAoIXN0cmlkZSkJCQkJCQkJXAorCQlzdHJpZGUgPSAxOwkJCQkJCVwKKwlzLT5zdHJpZGUgPSBzdHJpZGU7CQkJCQkJXAorCWVsZW1fc2l6ZSA9IHNpemVvZihlbGVtdHlwZSkgKiBzdHJpZGU7CQkJCVwKKwlzLT5zbGFiX3NpemUgPSBDT01NSVRfU0xBQl9TSVpFIC8gZWxlbV9zaXplOwkJCVwKKwlzLT5zbGFiX2NvdW50ID0gMDsJCQkJCQlcCisJcy0+c2xhYiA9IE5VTEw7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzY29wZSB2b2lkIGluaXRfICMjc2xhYm5hbWUoc3RydWN0IHNsYWJuYW1lICpzKQkJCQlcCit7CQkJCQkJCQkJXAorCWluaXRfICMjc2xhYm5hbWUjIyBfd2l0aF9zdHJpZGUocywgMSk7CQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzY29wZSB2b2lkIGNsZWFyXyAjI3NsYWJuYW1lKHN0cnVjdCBzbGFibmFtZSAqcykJCQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGludCBpOwkJCQkJCQlcCisJZm9yIChpID0gMDsgaSA8IHMtPnNsYWJfY291bnQ7IGkrKykJCQkJXAorCQlmcmVlKHMtPnNsYWJbaV0pOwkJCQkJXAorCXMtPnNsYWJfY291bnQgPSAwOwkJCQkJCVwKKwlGUkVFX0FORF9OVUxMKHMtPnNsYWIpOwkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzY29wZSBlbGVtdHlwZSAqc2xhYm5hbWUjIyBfYXRfcGVlayhzdHJ1Y3Qgc2xhYm5hbWUgKnMsCQkJXAorCQkJCQkJICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjLCBcCisJCQkJCQkgIGludCBhZGRfaWZfbWlzc2luZykgICBcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGludCBudGhfc2xhYiwgbnRoX3Nsb3Q7CQkJCVwKKwkJCQkJCQkJCVwKKwludGhfc2xhYiA9IGMtPmluZGV4IC8gcy0+c2xhYl9zaXplOwkJCQlcCisJbnRoX3Nsb3QgPSBjLT5pbmRleCAlIHMtPnNsYWJfc2l6ZTsJCQkJXAorCQkJCQkJCQkJXAorCWlmIChzLT5zbGFiX2NvdW50IDw9IG50aF9zbGFiKSB7CQkJCVwKKwkJdW5zaWduZWQgaW50IGk7CQkJCQkJXAorCQlpZiAoIWFkZF9pZl9taXNzaW5nKQkJCQkJXAorCQkJcmV0dXJuIE5VTEw7CQkJCQlcCisJCVJFQUxMT0NfQVJSQVkocy0+c2xhYiwgbnRoX3NsYWIgKyAxKTsJCQlcCisJCWZvciAoaSA9IHMtPnNsYWJfY291bnQ7IGkgPD0gbnRoX3NsYWI7IGkrKykJCVwKKwkJCXMtPnNsYWJbaV0gPSBOVUxMOwkJCQlcCisJCXMtPnNsYWJfY291bnQgPSBudGhfc2xhYiArIDE7CQkJCVwKKwl9CQkJCQkJCQlcCisJaWYgKCFzLT5zbGFiW250aF9zbGFiXSkgewkJCQkJXAorCQlpZiAoIWFkZF9pZl9taXNzaW5nKQkJCQkJXAorCQkJcmV0dXJuIE5VTEw7CQkJCQlcCisJCXMtPnNsYWJbbnRoX3NsYWJdID0geGNhbGxvYyhzLT5zbGFiX3NpemUsCQlcCisJCQkJCSAgICBzaXplb2YoKipzLT5zbGFiKSAqIHMtPnN0cmlkZSk7CQlcCisJfQkJCQkJCQkJXAorCXJldHVybiAmcy0+c2xhYltudGhfc2xhYl1bbnRoX3Nsb3QgKiBzLT5zdHJpZGVdOwkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3Njb3BlIGVsZW10eXBlICpzbGFibmFtZSMjIF9hdChzdHJ1Y3Qgc2xhYm5hbWUgKnMsCQkJXAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBjb21taXQgKmMpCVwKK3sJCQkJCQkJCQlcCisJcmV0dXJuIHNsYWJuYW1lIyNfYXRfcGVlayhzLCBjLCAxKTsJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3Njb3BlIGVsZW10eXBlICpzbGFibmFtZSMjIF9wZWVrKHN0cnVjdCBzbGFibmFtZSAqcywJCQlcCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGNvbW1pdCAqYykJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gc2xhYm5hbWUjI19hdF9wZWVrKHMsIGMsIDApOwkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RydWN0IHNsYWJuYW1lCisKKy8qCisgKiBOb3RlIHRoYXQgdGhpcyByZWR1bmRhbnQgZm9yd2FyZCBkZWNsYXJhdGlvbiBpcyByZXF1aXJlZAorICogdG8gYWxsb3cgYSB0ZXJtaW5hdGluZyBzZW1pY29sb24sIHdoaWNoIG1ha2VzIGluc3RhbnRpYXRpb25zIGxvb2sKKyAqIGxpa2UgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiAgSS5lLiwgdGhlIGV4cGFuc2lvbiBvZgorICoKKyAqICAgIGltcGxlbWVudF9jb21taXRfc2xhYihpbmRlZ3JlZSwgaW50LCBzdGF0aWMpOworICoKKyAqIGVuZHMgaW4gJ3N0cnVjdCBpbmRlZ3JlZTsnLiAgVGhpcyB3b3VsZCBvdGhlcndpc2UKKyAqIGJlIGEgc3ludGF4IGVycm9yIGFjY29yZGluZyAoYXQgbGVhc3QpIHRvIElTTyBDLiAgSXQncyBoYXJkIHRvCisgKiBjYXRjaCBiZWNhdXNlIEdDQyBzaWxlbnRseSBwYXJzZXMgaXQgYnkgZGVmYXVsdC4KKyAqLworCisjZW5kaWYJLyogQ09NTUlUX1NMQUJfSU1QTF9IICovCmRpZmYgLS1naXQgYS9jb21taXQtc2xhYi5oIGIvY29tbWl0LXNsYWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWIzZjI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbWl0LXNsYWIuaApAQCAtMCwwICsxLDU2IEBACisjaWZuZGVmIENPTU1JVF9TTEFCX0gKKyNkZWZpbmUgQ09NTUlUX1NMQUJfSAorCisjaW5jbHVkZSAiY29tbWl0LXNsYWItZGVjbC5oIgorI2luY2x1ZGUgImNvbW1pdC1zbGFiLWltcGwuaCIKKworLyoKKyAqIGRlZmluZV9jb21taXRfc2xhYihzbGFibmFtZSwgZWxlbXR5cGUpIGNyZWF0ZXMgYm9pbGVycGxhdGUgY29kZSB0byBkZWZpbmUKKyAqIGEgbmV3IHN0cnVjdCAoc3RydWN0IHNsYWJuYW1lKSB0aGF0IGlzIHVzZWQgdG8gYXNzb2NpYXRlIGEgcGllY2Ugb2YgZGF0YQorICogb2YgZWxlbXR5cGUgdG8gY29tbWl0cywgYW5kIGEgZmV3IGZ1bmN0aW9ucyB0byB1c2UgdGhhdCBzdHJ1Y3QuCisgKgorICogQWZ0ZXIgaW5jbHVkaW5nIHRoaXMgaGVhZGVyIGZpbGUsIHVzaW5nOgorICoKKyAqIGRlZmluZV9jb21taXRfc2xhYihpbmRlZ3JlZSwgaW50KTsKKyAqCisgKiB3aWxsIGxldCB5b3UgY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKyAqCisgKiAtIGludCAqaW5kZWdyZWVfYXQoc3RydWN0IGluZGVncmVlICosIHN0cnVjdCBjb21taXQgKik7CisgKgorICogICBUaGlzIGZ1bmN0aW9uIGxvY2F0ZXMgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb21taXQgaW4KKyAqICAgdGhlIGluZGVncmVlIHNsYWIsIGFuZCByZXR1cm5zIHRoZSBwb2ludGVyIHRvIGl0LiAgVGhlIGxvY2F0aW9uIHRvCisgKiAgIHN0b3JlIHRoZSBkYXRhIGlzIGFsbG9jYXRlZCBhcyBuZWNlc3NhcnkuCisgKgorICogLSBpbnQgKmluZGVncmVlX3BlZWsoc3RydWN0IGluZGVncmVlICosIHN0cnVjdCBjb21taXQgKik7CisgKgorICogICBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gaW5kZWdyZWVfYXQoKSwgYnV0IGl0IHdpbGwgcmV0dXJuIE5VTEwKKyAqICAgaWYgdGhlIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29tbWl0CisgKiAgIGhhcyBub3QgYmVlbiBhbGxvY2F0ZWQgeWV0LgorICogICBOb3RlIHRoYXQgdGhlIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBkYXRhIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuCisgKiAgIGFsbG9jYXRlZCBldmVuIGlmIG5vIGluZGVncmVlX2F0KCkgY2FsbCBoYXMgYmVlbiBtYWRlIGZvciB0aGF0IGNvbW1pdAorICogICB5ZXQ7IGluIHRoaXMgY2FzZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIGEKKyAqICAgemVyby1pbml0aWFsaXplZCBsb2NhdGlvbi4KKyAqCisgKiAtIHZvaWQgaW5pdF9pbmRlZ3JlZShzdHJ1Y3QgaW5kZWdyZWUgKik7CisgKiAgIHZvaWQgaW5pdF9pbmRlZ3JlZV93aXRoX3N0cmlkZShzdHJ1Y3QgaW5kZWdyZWUgKiwgaW50KTsKKyAqCisgKiAgIEluaXRpYWxpemVzIHRoZSBpbmRlZ3JlZSBzbGFiIHRoYXQgYXNzb2NpYXRlcyBhbiBhcnJheSBvZiBpbnRlZ2VycworICogICB0byBlYWNoIGNvbW1pdC4gJ3N0cmlkZScgc3BlY2lmaWVzIGhvdyBiaWcgZWFjaCBhcnJheSBpcy4gIFRoZSBzbGFiCisgKiAgIHRoYXQgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIHZhcmlhbnQgd2l0aG91dCAiX3dpdGhfc3RyaWRlIiBhc3NvY2lhdGVzCisgKiAgIGVhY2ggY29tbWl0IHdpdGggYW4gYXJyYXkgb2Ygb25lIGludGVnZXIuCisgKgorICogLSB2b2lkIGNsZWFyX2luZGVncmVlKHN0cnVjdCBpbmRlZ3JlZSAqKTsKKyAqCisgKiAgIEVtcHRpZXMgdGhlIHNsYWIuICBUaGUgc2xhYiBjYW4gYmUgcmV1c2VkIHdpdGggdGhlIHNhbWUgc3RyaWRlCisgKiAgIHdpdGhvdXQgY2FsbGluZyBpbml0X2luZGVncmVlKCkgYWdhaW4gb3IgY2FuIGJlIHJlY29uZmlndXJlZCB0byBhCisgKiAgIGRpZmZlcmVudCBzdHJpZGUgYnkgY2FsbGluZyBpbml0X2luZGVncmVlX3dpdGhfc3RyaWRlKCkuCisgKgorICogICBDYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIHRoZSBzbGFiIGZhbGxzIG91dCBvZiBzY29wZSB0byBhdm9pZAorICogICBsZWFraW5nIG1lbW9yeS4KKyAqLworCisjZGVmaW5lIGRlZmluZV9jb21taXRfc2xhYihzbGFibmFtZSwgZWxlbXR5cGUpIFwKKwlkZWNsYXJlX2NvbW1pdF9zbGFiKHNsYWJuYW1lLCBlbGVtdHlwZSk7IFwKKwlpbXBsZW1lbnRfc3RhdGljX2NvbW1pdF9zbGFiKHNsYWJuYW1lLCBlbGVtdHlwZSkKKworI2VuZGlmIC8qIENPTU1JVF9TTEFCX0ggKi8KZGlmZiAtLWdpdCBhL2NvbW1pdC5jIGIvY29tbWl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2ODZhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1pdC5jCkBAIC0wLDAgKzEsMTY0NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiY29tbWl0LWdyYXBoLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgIm5vdGVzLmgiCisjaW5jbHVkZSAiYWxsb2MuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibWVyZ2Vzb3J0LmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKyNpbmNsdWRlICJwcmlvLXF1ZXVlLmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKyNpbmNsdWRlICJ3dC1zdGF0dXMuaCIKKyNpbmNsdWRlICJhZHZpY2UuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJzaGFsbG93LmgiCisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqcmVhZF9jb21taXRfZXh0cmFfaGVhZGVyX2xpbmVzKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqKik7CisKK2ludCBzYXZlX2NvbW1pdF9idWZmZXIgPSAxOworCitjb25zdCBjaGFyICpjb21taXRfdHlwZSA9ICJjb21taXQiOworCitzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IHF1aWV0KQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGRlcmVmX3RhZyhyLAorCQkJCSAgICAgICBwYXJzZV9vYmplY3Qociwgb2lkKSwKKwkJCQkgICAgICAgTlVMTCwgMCk7CisKKwlpZiAoIW9iaikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIG9iamVjdF9hc190eXBlKHIsIG9iaiwgT0JKX0NPTU1JVCwgcXVpZXQpOworfQorCitzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXJldHVybiBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkociwgb2lkLCAwKTsKK30KKworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9vcl9kaWUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpyZWZfbmFtZSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJaWYgKCFjKQorCQlkaWUoXygiY291bGQgbm90IHBhcnNlICVzIiksIHJlZl9uYW1lKTsKKwlpZiAoIW9pZGVxKG9pZCwgJmMtPm9iamVjdC5vaWQpKSB7CisJCXdhcm5pbmcoXygiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIpLAorCQkJcmVmX25hbWUsIG9pZF90b19oZXgob2lkKSk7CisJfQorCXJldHVybiBjOworfQorCitzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChyLCBvaWQpOworCWlmICghb2JqKQorCQlyZXR1cm4gY3JlYXRlX29iamVjdChyLCBvaWQsIGFsbG9jX2NvbW1pdF9ub2RlKHIpKTsKKwlyZXR1cm4gb2JqZWN0X2FzX3R5cGUociwgb2JqLCBPQkpfQ09NTUlULCAwKTsKK30KKworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCWlmIChnZXRfb2lkX2NvbW1pdHRpc2gobmFtZSwgJm9pZCkpCisJCXJldHVybiBOVUxMOworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCXJldHVybiBOVUxMOworCXJldHVybiBjb21taXQ7Cit9CisKK3N0YXRpYyB0aW1lc3RhbXBfdCBwYXJzZV9jb21taXRfZGF0ZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKnRhaWwpCit7CisJY29uc3QgY2hhciAqZGF0ZXB0cjsKKworCWlmIChidWYgKyA2ID49IHRhaWwpCisJCXJldHVybiAwOworCWlmIChtZW1jbXAoYnVmLCAiYXV0aG9yIiwgNikpCisJCXJldHVybiAwOworCXdoaWxlIChidWYgPCB0YWlsICYmICpidWYrKyAhPSAnXG4nKQorCQkvKiBuYWRhICovOworCWlmIChidWYgKyA5ID49IHRhaWwpCisJCXJldHVybiAwOworCWlmIChtZW1jbXAoYnVmLCAiY29tbWl0dGVyIiwgOSkpCisJCXJldHVybiAwOworCXdoaWxlIChidWYgPCB0YWlsICYmICpidWYrKyAhPSAnPicpCisJCS8qIG5hZGEgKi87CisJaWYgKGJ1ZiA+PSB0YWlsKQorCQlyZXR1cm4gMDsKKwlkYXRlcHRyID0gYnVmOworCXdoaWxlIChidWYgPCB0YWlsICYmICpidWYrKyAhPSAnXG4nKQorCQkvKiBuYWRhICovOworCWlmIChidWYgPj0gdGFpbCkKKwkJcmV0dXJuIDA7CisJLyogZGF0ZXB0ciA8IGJ1ZiAmJiBidWZbLTFdID09ICdcbicsIHNvIHBhcnNpbmcgd2lsbCBzdG9wIGF0IGJ1Zi0xICovCisJcmV0dXJuIHBhcnNlX3RpbWVzdGFtcChkYXRlcHRyLCBOVUxMLCAxMCk7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb21taXRfZ3JhZnRfc2hhMV9hY2Nlc3Moc2l6ZV90IGluZGV4LCB2b2lkICp0YWJsZSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICoqY29tbWl0X2dyYWZ0X3RhYmxlID0gdGFibGU7CisJcmV0dXJuIGNvbW1pdF9ncmFmdF90YWJsZVtpbmRleF0tPm9pZC5oYXNoOworfQorCitpbnQgY29tbWl0X2dyYWZ0X3BvcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gc2hhMV9wb3Moc2hhMSwgci0+cGFyc2VkX29iamVjdHMtPmdyYWZ0cywKKwkJCXItPnBhcnNlZF9vYmplY3RzLT5ncmFmdHNfbnIsCisJCQljb21taXRfZ3JhZnRfc2hhMV9hY2Nlc3MpOworfQorCitpbnQgcmVnaXN0ZXJfY29tbWl0X2dyYWZ0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCwKKwkJCSAgaW50IGlnbm9yZV9kdXBzKQoreworCWludCBwb3MgPSBjb21taXRfZ3JhZnRfcG9zKHIsIGdyYWZ0LT5vaWQuaGFzaCk7CisKKwlpZiAoMCA8PSBwb3MpIHsKKwkJaWYgKGlnbm9yZV9kdXBzKQorCQkJZnJlZShncmFmdCk7CisJCWVsc2UgeworCQkJZnJlZShyLT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzW3Bvc10pOworCQkJci0+cGFyc2VkX29iamVjdHMtPmdyYWZ0c1twb3NdID0gZ3JhZnQ7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCXBvcyA9IC1wb3MgLSAxOworCUFMTE9DX0dST1coci0+cGFyc2VkX29iamVjdHMtPmdyYWZ0cywKKwkJICAgci0+cGFyc2VkX29iamVjdHMtPmdyYWZ0c19uciArIDEsCisJCSAgIHItPnBhcnNlZF9vYmplY3RzLT5ncmFmdHNfYWxsb2MpOworCXItPnBhcnNlZF9vYmplY3RzLT5ncmFmdHNfbnIrKzsKKwlpZiAocG9zIDwgci0+cGFyc2VkX29iamVjdHMtPmdyYWZ0c19ucikKKwkJbWVtbW92ZShyLT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzICsgcG9zICsgMSwKKwkJCXItPnBhcnNlZF9vYmplY3RzLT5ncmFmdHMgKyBwb3MsCisJCQkoci0+cGFyc2VkX29iamVjdHMtPmdyYWZ0c19uciAtIHBvcyAtIDEpICoKKwkJCXNpemVvZigqci0+cGFyc2VkX29iamVjdHMtPmdyYWZ0cykpOworCXItPnBhcnNlZF9vYmplY3RzLT5ncmFmdHNbcG9zXSA9IGdyYWZ0OworCXJldHVybiAwOworfQorCitzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpyZWFkX2dyYWZ0X2xpbmUoc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwkvKiBUaGUgZm9ybWF0IGlzIGp1c3QgIkNvbW1pdCBQYXJlbnQxIFBhcmVudDIgLi4uXG4iICovCisJaW50IGksIHBoYXNlOworCWNvbnN0IGNoYXIgKnRhaWwgPSBOVUxMOworCXN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0ID0gTlVMTDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGR1bW15X29pZCwgKm9pZDsKKworCXN0cmJ1Zl9ydHJpbShsaW5lKTsKKwlpZiAoIWxpbmUtPmxlbiB8fCBsaW5lLT5idWZbMF0gPT0gJyMnKQorCQlyZXR1cm4gTlVMTDsKKwkvKgorCSAqIHBoYXNlIDAgdmVyaWZpZXMgbGluZSwgY291bnRzIGhhc2hlcyBpbiBsaW5lIGFuZCBhbGxvY2F0ZXMgZ3JhZnQKKwkgKiBwaGFzZSAxIGZpbGxzIGdyYWZ0CisJICovCisJZm9yIChwaGFzZSA9IDA7IHBoYXNlIDwgMjsgcGhhc2UrKykgeworCQlvaWQgPSBncmFmdCA/ICZncmFmdC0+b2lkIDogJmR1bW15X29pZDsKKwkJaWYgKHBhcnNlX29pZF9oZXgobGluZS0+YnVmLCBvaWQsICZ0YWlsKSkKKwkJCWdvdG8gYmFkX2dyYWZ0X2RhdGE7CisJCWZvciAoaSA9IDA7ICp0YWlsICE9ICdcMCc7IGkrKykgeworCQkJb2lkID0gZ3JhZnQgPyAmZ3JhZnQtPnBhcmVudFtpXSA6ICZkdW1teV9vaWQ7CisJCQlpZiAoIWlzc3BhY2UoKnRhaWwrKykgfHwgcGFyc2Vfb2lkX2hleCh0YWlsLCBvaWQsICZ0YWlsKSkKKwkJCQlnb3RvIGJhZF9ncmFmdF9kYXRhOworCQl9CisJCWlmICghZ3JhZnQpIHsKKwkJCWdyYWZ0ID0geG1hbGxvYyhzdF9hZGQoc2l6ZW9mKCpncmFmdCksCisJCQkJCSAgICAgICBzdF9tdWx0KHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2lkKSwgaSkpKTsKKwkJCWdyYWZ0LT5ucl9wYXJlbnQgPSBpOworCQl9CisJfQorCXJldHVybiBncmFmdDsKKworYmFkX2dyYWZ0X2RhdGE6CisJZXJyb3IoImJhZCBncmFmdCBkYXRhOiAlcyIsIGxpbmUtPmJ1Zik7CisJYXNzZXJ0KCFncmFmdCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9ncmFmdF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpncmFmdF9maWxlKQoreworCUZJTEUgKmZwID0gZm9wZW5fb3Jfd2FybihncmFmdF9maWxlLCAiciIpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaWYgKCFmcCkKKwkJcmV0dXJuIC0xOworCWlmIChhZHZpY2VfZ3JhZnRfZmlsZV9kZXByZWNhdGVkKQorCQlhZHZpc2UoXygiU3VwcG9ydCBmb3IgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIGlzIGRlcHJlY2F0ZWRcbiIKKwkJCSAiYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBHaXQgdmVyc2lvbi5cbiIKKwkJCSAiXG4iCisJCQkgIlBsZWFzZSB1c2UgXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiXG4iCisJCQkgInRvIGNvbnZlcnQgdGhlIGdyYWZ0cyBpbnRvIHJlcGxhY2UgcmVmcy5cbiIKKwkJCSAiXG4iCisJCQkgIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisJCQkgIlwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiIikpOworCXdoaWxlICghc3RyYnVmX2dldHdob2xlbGluZSgmYnVmLCBmcCwgJ1xuJykpIHsKKwkJLyogVGhlIGZvcm1hdCBpcyBqdXN0ICJDb21taXQgUGFyZW50MSBQYXJlbnQyIC4uLlxuIiAqLworCQlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCA9IHJlYWRfZ3JhZnRfbGluZSgmYnVmKTsKKwkJaWYgKCFncmFmdCkKKwkJCWNvbnRpbnVlOworCQlpZiAocmVnaXN0ZXJfY29tbWl0X2dyYWZ0KHIsIGdyYWZ0LCAxKSkKKwkJCWVycm9yKCJkdXBsaWNhdGUgZ3JhZnQgZGF0YTogJXMiLCBidWYuYnVmKTsKKwl9CisJZmNsb3NlKGZwKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwcmVwYXJlX2NvbW1pdF9ncmFmdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwljaGFyICpncmFmdF9maWxlOworCisJaWYgKHItPnBhcnNlZF9vYmplY3RzLT5jb21taXRfZ3JhZnRfcHJlcGFyZWQpCisJCXJldHVybjsKKwlpZiAoIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQorCQlyZXR1cm47CisKKwlncmFmdF9maWxlID0gZ2V0X2dyYWZ0X2ZpbGUocik7CisJcmVhZF9ncmFmdF9maWxlKHIsIGdyYWZ0X2ZpbGUpOworCS8qIG1ha2Ugc3VyZSBzaGFsbG93cyBhcmUgcmVhZCAqLworCWlzX3JlcG9zaXRvcnlfc2hhbGxvdyhyKTsKKwlyLT5wYXJzZWRfb2JqZWN0cy0+Y29tbWl0X2dyYWZ0X3ByZXBhcmVkID0gMTsKK30KKworc3RydWN0IGNvbW1pdF9ncmFmdCAqbG9va3VwX2NvbW1pdF9ncmFmdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWludCBwb3M7CisJcHJlcGFyZV9jb21taXRfZ3JhZnQocik7CisJcG9zID0gY29tbWl0X2dyYWZ0X3BvcyhyLCBvaWQtPmhhc2gpOworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gci0+cGFyc2VkX29iamVjdHMtPmdyYWZ0c1twb3NdOworfQorCitpbnQgZm9yX2VhY2hfY29tbWl0X2dyYWZ0KGVhY2hfY29tbWl0X2dyYWZ0X2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCWludCBpLCByZXQ7CisJZm9yIChpID0gcmV0ID0gMDsgaSA8IHRoZV9yZXBvc2l0b3J5LT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzX25yICYmICFyZXQ7IGkrKykKKwkJcmV0ID0gZm4odGhlX3JlcG9zaXRvcnktPnBhcnNlZF9vYmplY3RzLT5ncmFmdHNbaV0sIGNiX2RhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBjb21taXRfYnVmZmVyIHsKKwl2b2lkICpidWZmZXI7CisJdW5zaWduZWQgbG9uZyBzaXplOworfTsKK2RlZmluZV9jb21taXRfc2xhYihidWZmZXJfc2xhYiwgc3RydWN0IGNvbW1pdF9idWZmZXIpOworCitzdHJ1Y3QgYnVmZmVyX3NsYWIgKmFsbG9jYXRlX2NvbW1pdF9idWZmZXJfc2xhYih2b2lkKQoreworCXN0cnVjdCBidWZmZXJfc2xhYiAqYnMgPSB4bWFsbG9jKHNpemVvZigqYnMpKTsKKwlpbml0X2J1ZmZlcl9zbGFiKGJzKTsKKwlyZXR1cm4gYnM7Cit9CisKK3ZvaWQgZnJlZV9jb21taXRfYnVmZmVyX3NsYWIoc3RydWN0IGJ1ZmZlcl9zbGFiICpicykKK3sKKwljbGVhcl9idWZmZXJfc2xhYihicyk7CisJZnJlZShicyk7Cit9CisKK3ZvaWQgc2V0X2NvbW1pdF9idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IGNvbW1pdF9idWZmZXIgKnYgPSBidWZmZXJfc2xhYl9hdCgKKwkJci0+cGFyc2VkX29iamVjdHMtPmJ1ZmZlcl9zbGFiLCBjb21taXQpOworCXYtPmJ1ZmZlciA9IGJ1ZmZlcjsKKwl2LT5zaXplID0gc2l6ZTsKK30KKworY29uc3Qgdm9pZCAqZ2V0X2NhY2hlZF9jb21taXRfYnVmZmVyKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHVuc2lnbmVkIGxvbmcgKnNpemVwKQoreworCXN0cnVjdCBjb21taXRfYnVmZmVyICp2ID0gYnVmZmVyX3NsYWJfcGVlaygKKwkJci0+cGFyc2VkX29iamVjdHMtPmJ1ZmZlcl9zbGFiLCBjb21taXQpOworCWlmICghdikgeworCQlpZiAoc2l6ZXApCisJCQkqc2l6ZXAgPSAwOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKHNpemVwKQorCQkqc2l6ZXAgPSB2LT5zaXplOworCXJldHVybiB2LT5idWZmZXI7Cit9CisKK2NvbnN0IHZvaWQgKnJlcG9fZ2V0X2NvbW1pdF9idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgKnNpemVwKQoreworCWNvbnN0IHZvaWQgKnJldCA9IGdldF9jYWNoZWRfY29tbWl0X2J1ZmZlcihyLCBjb21taXQsIHNpemVwKTsKKwlpZiAoIXJldCkgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJcmV0ID0gcmVwb19yZWFkX29iamVjdF9maWxlKHIsICZjb21taXQtPm9iamVjdC5vaWQsICZ0eXBlLCAmc2l6ZSk7CisJCWlmICghcmV0KQorCQkJZGllKCJjYW5ub3QgcmVhZCBjb21taXQgb2JqZWN0ICVzIiwKKwkJCSAgICBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwkJaWYgKHR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJCWRpZSgiZXhwZWN0ZWQgY29tbWl0IGZvciAlcywgZ290ICVzIiwKKwkJCSAgICBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpLCB0eXBlX25hbWUodHlwZSkpOworCQlpZiAoc2l6ZXApCisJCQkqc2l6ZXAgPSBzaXplOworCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJlcG9fdW51c2VfY29tbWl0X2J1ZmZlcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgY29tbWl0X2J1ZmZlciAqdiA9IGJ1ZmZlcl9zbGFiX3BlZWsoCisJCXItPnBhcnNlZF9vYmplY3RzLT5idWZmZXJfc2xhYiwgY29tbWl0KTsKKwlpZiAoISh2ICYmIHYtPmJ1ZmZlciA9PSBidWZmZXIpKQorCQlmcmVlKCh2b2lkICopYnVmZmVyKTsKK30KKwordm9pZCBmcmVlX2NvbW1pdF9idWZmZXIoc3RydWN0IHBhcnNlZF9vYmplY3RfcG9vbCAqcG9vbCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfYnVmZmVyICp2ID0gYnVmZmVyX3NsYWJfcGVlaygKKwkJcG9vbC0+YnVmZmVyX3NsYWIsIGNvbW1pdCk7CisJaWYgKHYpIHsKKwkJRlJFRV9BTkRfTlVMTCh2LT5idWZmZXIpOworCQl2LT5zaXplID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY29tbWl0X3RyZWUoc3RydWN0IGNvbW1pdCAqYywgc3RydWN0IHRyZWUgKnQpCit7CisJYy0+bWF5YmVfdHJlZSA9IHQ7Cit9CisKK3N0cnVjdCB0cmVlICpyZXBvX2dldF9jb21taXRfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpZiAoY29tbWl0LT5tYXliZV90cmVlIHx8ICFjb21taXQtPm9iamVjdC5wYXJzZWQpCisJCXJldHVybiBjb21taXQtPm1heWJlX3RyZWU7CisKKwlpZiAoY29tbWl0LT5ncmFwaF9wb3MgIT0gQ09NTUlUX05PVF9GUk9NX0dSQVBIKQorCQlyZXR1cm4gZ2V0X2NvbW1pdF90cmVlX2luX2dyYXBoKHIsIGNvbW1pdCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IG9iamVjdF9pZCAqZ2V0X2NvbW1pdF90cmVlX29pZChjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IHRyZWUgKnRyZWUgPSBnZXRfY29tbWl0X3RyZWUoY29tbWl0KTsKKwlyZXR1cm4gdHJlZSA/ICZ0cmVlLT5vYmplY3Qub2lkIDogTlVMTDsKK30KKwordm9pZCByZWxlYXNlX2NvbW1pdF9tZW1vcnkoc3RydWN0IHBhcnNlZF9vYmplY3RfcG9vbCAqcG9vbCwgc3RydWN0IGNvbW1pdCAqYykKK3sKKwlzZXRfY29tbWl0X3RyZWUoYywgTlVMTCk7CisJZnJlZV9jb21taXRfYnVmZmVyKHBvb2wsIGMpOworCWMtPmluZGV4ID0gMDsKKwlmcmVlX2NvbW1pdF9saXN0KGMtPnBhcmVudHMpOworCisJYy0+b2JqZWN0LnBhcnNlZCA9IDA7Cit9CisKK2NvbnN0IHZvaWQgKmRldGFjaF9jb21taXRfYnVmZmVyKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdW5zaWduZWQgbG9uZyAqc2l6ZXApCit7CisJc3RydWN0IGNvbW1pdF9idWZmZXIgKnYgPSBidWZmZXJfc2xhYl9wZWVrKAorCQl0aGVfcmVwb3NpdG9yeS0+cGFyc2VkX29iamVjdHMtPmJ1ZmZlcl9zbGFiLCBjb21taXQpOworCXZvaWQgKnJldDsKKworCWlmICghdikgeworCQlpZiAoc2l6ZXApCisJCQkqc2l6ZXAgPSAwOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0ID0gdi0+YnVmZmVyOworCWlmIChzaXplcCkKKwkJKnNpemVwID0gdi0+c2l6ZTsKKworCXYtPmJ1ZmZlciA9IE5VTEw7CisJdi0+c2l6ZSA9IDA7CisJcmV0dXJuIHJldDsKK30KKworaW50IHBhcnNlX2NvbW1pdF9idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXQgKml0ZW0sIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgY2hlY2tfZ3JhcGgpCit7CisJY29uc3QgY2hhciAqdGFpbCA9IGJ1ZmZlcjsKKwljb25zdCBjaGFyICpidWZwdHIgPSBidWZmZXI7CisJc3RydWN0IG9iamVjdF9pZCBwYXJlbnQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcHB0cjsKKwlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdDsKKwljb25zdCBpbnQgdHJlZV9lbnRyeV9sZW4gPSB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDU7CisJY29uc3QgaW50IHBhcmVudF9lbnRyeV9sZW4gPSB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDc7CisJc3RydWN0IHRyZWUgKnRyZWU7CisKKwlpZiAoaXRlbS0+b2JqZWN0LnBhcnNlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXRlbS0+cGFyZW50cykgeworCQkvKgorCQkgKiBQcmVzdW1hYmx5IHRoaXMgaXMgbGVmdG92ZXIgZnJvbSBhbiBlYXJsaWVyIGZhaWxlZCBwYXJzZTsKKwkJICogY2xlYXIgaXQgb3V0IGluIHByZXBhcmF0aW9uIGZvciB1cyByZS1wYXJzaW5nICh3ZSdsbCBoaXQgdGhlCisJCSAqIHNhbWUgZXJyb3IsIGJ1dCB0aGF0J3MgZ29vZCwgc2luY2UgaXQgbGV0cyBvdXIgY2FsbGVyIGtub3cKKwkJICogdGhlIHJlc3VsdCBjYW5ub3QgYmUgdHJ1c3RlZC4KKwkJICovCisJCWZyZWVfY29tbWl0X2xpc3QoaXRlbS0+cGFyZW50cyk7CisJCWl0ZW0tPnBhcmVudHMgPSBOVUxMOworCX0KKworCXRhaWwgKz0gc2l6ZTsKKwlpZiAodGFpbCA8PSBidWZwdHIgKyB0cmVlX2VudHJ5X2xlbiArIDEgfHwgbWVtY21wKGJ1ZnB0ciwgInRyZWUgIiwgNSkgfHwKKwkJCWJ1ZnB0clt0cmVlX2VudHJ5X2xlbl0gIT0gJ1xuJykKKwkJcmV0dXJuIGVycm9yKCJib2d1cyBjb21taXQgb2JqZWN0ICVzIiwgb2lkX3RvX2hleCgmaXRlbS0+b2JqZWN0Lm9pZCkpOworCWlmIChnZXRfb2lkX2hleChidWZwdHIgKyA1LCAmcGFyZW50KSA8IDApCisJCXJldHVybiBlcnJvcigiYmFkIHRyZWUgcG9pbnRlciBpbiBjb21taXQgJXMiLAorCQkJICAgICBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CisJdHJlZSA9IGxvb2t1cF90cmVlKHIsICZwYXJlbnQpOworCWlmICghdHJlZSkKKwkJcmV0dXJuIGVycm9yKCJiYWQgdHJlZSBwb2ludGVyICVzIGluIGNvbW1pdCAlcyIsCisJCQkgICAgIG9pZF90b19oZXgoJnBhcmVudCksCisJCQkgICAgIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKKwlzZXRfY29tbWl0X3RyZWUoaXRlbSwgdHJlZSk7CisJYnVmcHRyICs9IHRyZWVfZW50cnlfbGVuICsgMTsgLyogInRyZWUgIiArICJoZXggc2hhMSIgKyAiXG4iICovCisJcHB0ciA9ICZpdGVtLT5wYXJlbnRzOworCisJZ3JhZnQgPSBsb29rdXBfY29tbWl0X2dyYWZ0KHIsICZpdGVtLT5vYmplY3Qub2lkKTsKKwl3aGlsZSAoYnVmcHRyICsgcGFyZW50X2VudHJ5X2xlbiA8IHRhaWwgJiYgIW1lbWNtcChidWZwdHIsICJwYXJlbnQgIiwgNykpIHsKKwkJc3RydWN0IGNvbW1pdCAqbmV3X3BhcmVudDsKKworCQlpZiAodGFpbCA8PSBidWZwdHIgKyBwYXJlbnRfZW50cnlfbGVuICsgMSB8fAorCQkgICAgZ2V0X29pZF9oZXgoYnVmcHRyICsgNywgJnBhcmVudCkgfHwKKwkJICAgIGJ1ZnB0cltwYXJlbnRfZW50cnlfbGVuXSAhPSAnXG4nKQorCQkJcmV0dXJuIGVycm9yKCJiYWQgcGFyZW50cyBpbiBjb21taXQgJXMiLCBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CisJCWJ1ZnB0ciArPSBwYXJlbnRfZW50cnlfbGVuICsgMTsKKwkJLyoKKwkJICogVGhlIGNsb25lIGlzIHNoYWxsb3cgaWYgbnJfcGFyZW50IDwgMCwgYW5kIHdlIG11c3QKKwkJICogbm90IHRyYXZlcnNlIGl0cyByZWFsIHBhcmVudHMgZXZlbiB3aGVuIHdlIHVuaGlkZSB0aGVtLgorCQkgKi8KKwkJaWYgKGdyYWZ0ICYmIChncmFmdC0+bnJfcGFyZW50IDwgMCB8fCBncmFmdHNfcmVwbGFjZV9wYXJlbnRzKSkKKwkJCWNvbnRpbnVlOworCQluZXdfcGFyZW50ID0gbG9va3VwX2NvbW1pdChyLCAmcGFyZW50KTsKKwkJaWYgKCFuZXdfcGFyZW50KQorCQkJcmV0dXJuIGVycm9yKCJiYWQgcGFyZW50ICVzIGluIGNvbW1pdCAlcyIsCisJCQkJICAgICBvaWRfdG9faGV4KCZwYXJlbnQpLAorCQkJCSAgICAgb2lkX3RvX2hleCgmaXRlbS0+b2JqZWN0Lm9pZCkpOworCQlwcHRyID0gJmNvbW1pdF9saXN0X2luc2VydChuZXdfcGFyZW50LCBwcHRyKS0+bmV4dDsKKwl9CisJaWYgKGdyYWZ0KSB7CisJCWludCBpOworCQlzdHJ1Y3QgY29tbWl0ICpuZXdfcGFyZW50OworCQlmb3IgKGkgPSAwOyBpIDwgZ3JhZnQtPm5yX3BhcmVudDsgaSsrKSB7CisJCQluZXdfcGFyZW50ID0gbG9va3VwX2NvbW1pdChyLAorCQkJCQkJICAgJmdyYWZ0LT5wYXJlbnRbaV0pOworCQkJaWYgKCFuZXdfcGFyZW50KQorCQkJCXJldHVybiBlcnJvcigiYmFkIGdyYWZ0IHBhcmVudCAlcyBpbiBjb21taXQgJXMiLAorCQkJCQkgICAgIG9pZF90b19oZXgoJmdyYWZ0LT5wYXJlbnRbaV0pLAorCQkJCQkgICAgIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKKwkJCXBwdHIgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KG5ld19wYXJlbnQsIHBwdHIpLT5uZXh0OworCQl9CisJfQorCWl0ZW0tPmRhdGUgPSBwYXJzZV9jb21taXRfZGF0ZShidWZwdHIsIHRhaWwpOworCisJaWYgKGNoZWNrX2dyYXBoKQorCQlsb2FkX2NvbW1pdF9ncmFwaF9pbmZvKHIsIGl0ZW0pOworCisJaXRlbS0+b2JqZWN0LnBhcnNlZCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCByZXBvX3BhcnNlX2NvbW1pdF9pbnRlcm5hbChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgICBzdHJ1Y3QgY29tbWl0ICppdGVtLAorCQkJICAgICAgIGludCBxdWlldF9vbl9taXNzaW5nLAorCQkJICAgICAgIGludCB1c2VfY29tbWl0X2dyYXBoKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpidWZmZXI7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCByZXQ7CisKKwlpZiAoIWl0ZW0pCisJCXJldHVybiAtMTsKKwlpZiAoaXRlbS0+b2JqZWN0LnBhcnNlZCkKKwkJcmV0dXJuIDA7CisJaWYgKHVzZV9jb21taXRfZ3JhcGggJiYgcGFyc2VfY29tbWl0X2luX2dyYXBoKHIsIGl0ZW0pKQorCQlyZXR1cm4gMDsKKwlidWZmZXIgPSByZXBvX3JlYWRfb2JqZWN0X2ZpbGUociwgJml0ZW0tPm9iamVjdC5vaWQsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiBxdWlldF9vbl9taXNzaW5nID8gLTEgOgorCQkJZXJyb3IoIkNvdWxkIG5vdCByZWFkICVzIiwKKwkJCSAgICAgb2lkX3RvX2hleCgmaXRlbS0+b2JqZWN0Lm9pZCkpOworCWlmICh0eXBlICE9IE9CSl9DT01NSVQpIHsKKwkJZnJlZShidWZmZXIpOworCQlyZXR1cm4gZXJyb3IoIk9iamVjdCAlcyBub3QgYSBjb21taXQiLAorCQkJICAgICBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CisJfQorCisJcmV0ID0gcGFyc2VfY29tbWl0X2J1ZmZlcihyLCBpdGVtLCBidWZmZXIsIHNpemUsIDApOworCWlmIChzYXZlX2NvbW1pdF9idWZmZXIgJiYgIXJldCkgeworCQlzZXRfY29tbWl0X2J1ZmZlcihyLCBpdGVtLCBidWZmZXIsIHNpemUpOworCQlyZXR1cm4gMDsKKwl9CisJZnJlZShidWZmZXIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCByZXBvX3BhcnNlX2NvbW1pdF9nZW50bHkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgIHN0cnVjdCBjb21taXQgKml0ZW0sIGludCBxdWlldF9vbl9taXNzaW5nKQoreworCXJldHVybiByZXBvX3BhcnNlX2NvbW1pdF9pbnRlcm5hbChyLCBpdGVtLCBxdWlldF9vbl9taXNzaW5nLCAxKTsKK30KKwordm9pZCBwYXJzZV9jb21taXRfb3JfZGllKHN0cnVjdCBjb21taXQgKml0ZW0pCit7CisJaWYgKHBhcnNlX2NvbW1pdChpdGVtKSkKKwkJZGllKCJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIiwKKwkJICAgIGl0ZW0gPyBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSA6ICIobnVsbCkiKTsKK30KKworaW50IGZpbmRfY29tbWl0X3N1YmplY3QoY29uc3QgY2hhciAqY29tbWl0X2J1ZmZlciwgY29uc3QgY2hhciAqKnN1YmplY3QpCit7CisJY29uc3QgY2hhciAqZW9sOworCWNvbnN0IGNoYXIgKnAgPSBjb21taXRfYnVmZmVyOworCisJd2hpbGUgKCpwICYmICgqcCAhPSAnXG4nIHx8IHBbMV0gIT0gJ1xuJykpCisJCXArKzsKKwlpZiAoKnApIHsKKwkJcCA9IHNraXBfYmxhbmtfbGluZXMocCArIDIpOworCQllb2wgPSBzdHJjaHJudWwocCwgJ1xuJyk7CisJfSBlbHNlCisJCWVvbCA9IHA7CisKKwkqc3ViamVjdCA9IHA7CisKKwlyZXR1cm4gZW9sIC0gcDsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpjb21taXRfbGlzdF9pbnNlcnQoc3RydWN0IGNvbW1pdCAqaXRlbSwgc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdF9wKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbmV3X2xpc3QgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tbWl0X2xpc3QpKTsKKwluZXdfbGlzdC0+aXRlbSA9IGl0ZW07CisJbmV3X2xpc3QtPm5leHQgPSAqbGlzdF9wOworCSpsaXN0X3AgPSBuZXdfbGlzdDsKKwlyZXR1cm4gbmV3X2xpc3Q7Cit9CisKK3Vuc2lnbmVkIGNvbW1pdF9saXN0X2NvdW50KGNvbnN0IHN0cnVjdCBjb21taXRfbGlzdCAqbCkKK3sKKwl1bnNpZ25lZCBjID0gMDsKKwlmb3IgKDsgbDsgbCA9IGwtPm5leHQgKQorCQljKys7CisJcmV0dXJuIGM7Cit9CisKK3N0cnVjdCBjb21taXRfbGlzdCAqY29weV9jb21taXRfbGlzdChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpoZWFkID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwcCA9ICZoZWFkOworCXdoaWxlIChsaXN0KSB7CisJCXBwID0gY29tbWl0X2xpc3RfYXBwZW5kKGxpc3QtPml0ZW0sIHBwKTsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCXJldHVybiBoZWFkOworfQorCit2b2lkIGZyZWVfY29tbWl0X2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCXdoaWxlIChsaXN0KQorCQlwb3BfY29tbWl0KCZsaXN0KTsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICogY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUoc3RydWN0IGNvbW1pdCAqaXRlbSwgc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwcCA9IGxpc3Q7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCXdoaWxlICgocCA9ICpwcCkgIT0gTlVMTCkgeworCQlpZiAocC0+aXRlbS0+ZGF0ZSA8IGl0ZW0tPmRhdGUpIHsKKwkJCWJyZWFrOworCQl9CisJCXBwID0gJnAtPm5leHQ7CisJfQorCXJldHVybiBjb21taXRfbGlzdF9pbnNlcnQoaXRlbSwgcHApOworfQorCitzdGF0aWMgaW50IGNvbW1pdF9saXN0X2NvbXBhcmVfYnlfZGF0ZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCXRpbWVzdGFtcF90IGFfZGF0ZSA9ICgoY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICopYSktPml0ZW0tPmRhdGU7CisJdGltZXN0YW1wX3QgYl9kYXRlID0gKChjb25zdCBzdHJ1Y3QgY29tbWl0X2xpc3QgKiliKS0+aXRlbS0+ZGF0ZTsKKwlpZiAoYV9kYXRlIDwgYl9kYXRlKQorCQlyZXR1cm4gMTsKKwlpZiAoYV9kYXRlID4gYl9kYXRlKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpjb21taXRfbGlzdF9nZXRfbmV4dChjb25zdCB2b2lkICphKQoreworCXJldHVybiAoKGNvbnN0IHN0cnVjdCBjb21taXRfbGlzdCAqKWEpLT5uZXh0OworfQorCitzdGF0aWMgdm9pZCBjb21taXRfbGlzdF9zZXRfbmV4dCh2b2lkICphLCB2b2lkICpuZXh0KQoreworCSgoc3RydWN0IGNvbW1pdF9saXN0ICopYSktPm5leHQgPSBuZXh0OworfQorCit2b2lkIGNvbW1pdF9saXN0X3NvcnRfYnlfZGF0ZShzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0KQoreworCSpsaXN0ID0gbGxpc3RfbWVyZ2Vzb3J0KCpsaXN0LCBjb21taXRfbGlzdF9nZXRfbmV4dCwgY29tbWl0X2xpc3Rfc2V0X25leHQsCisJCQkJY29tbWl0X2xpc3RfY29tcGFyZV9ieV9kYXRlKTsKK30KKworc3RydWN0IGNvbW1pdCAqcG9wX21vc3RfcmVjZW50X2NvbW1pdChzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0LAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBtYXJrKQoreworCXN0cnVjdCBjb21taXQgKnJldCA9IHBvcF9jb21taXQobGlzdCk7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gcmV0LT5wYXJlbnRzOworCisJd2hpbGUgKHBhcmVudHMpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcGFyZW50cy0+aXRlbTsKKwkJaWYgKCFwYXJzZV9jb21taXQoY29tbWl0KSAmJiAhKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgbWFyaykpIHsKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IG1hcms7CisJCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShjb21taXQsIGxpc3QpOworCQl9CisJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9jb21taXRfbWFya3NfMShzdHJ1Y3QgY29tbWl0X2xpc3QgKipwbGlzdCwKKwkJCQkgc3RydWN0IGNvbW1pdCAqY29tbWl0LCB1bnNpZ25lZCBpbnQgbWFyaykKK3sKKwl3aGlsZSAoY29tbWl0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKworCQlpZiAoIShtYXJrICYgY29tbWl0LT5vYmplY3QuZmxhZ3MpKQorCQkJcmV0dXJuOworCisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH5tYXJrOworCisJCXBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisJCWlmICghcGFyZW50cykKKwkJCXJldHVybjsKKworCQl3aGlsZSAoKHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSkKKwkJCWNvbW1pdF9saXN0X2luc2VydChwYXJlbnRzLT5pdGVtLCBwbGlzdCk7CisKKwkJY29tbWl0ID0gY29tbWl0LT5wYXJlbnRzLT5pdGVtOworCX0KK30KKwordm9pZCBjbGVhcl9jb21taXRfbWFya3NfbWFueShpbnQgbnIsIHN0cnVjdCBjb21taXQgKipjb21taXQsIHVuc2lnbmVkIGludCBtYXJrKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IE5VTEw7CisKKwl3aGlsZSAobnItLSkgeworCQljbGVhcl9jb21taXRfbWFya3NfMSgmbGlzdCwgKmNvbW1pdCwgbWFyayk7CisJCWNvbW1pdCsrOworCX0KKwl3aGlsZSAobGlzdCkKKwkJY2xlYXJfY29tbWl0X21hcmtzXzEoJmxpc3QsIHBvcF9jb21taXQoJmxpc3QpLCBtYXJrKTsKK30KKwordm9pZCBjbGVhcl9jb21taXRfbWFya3Moc3RydWN0IGNvbW1pdCAqY29tbWl0LCB1bnNpZ25lZCBpbnQgbWFyaykKK3sKKwljbGVhcl9jb21taXRfbWFya3NfbWFueSgxLCAmY29tbWl0LCBtYXJrKTsKK30KKworc3RydWN0IGNvbW1pdCAqcG9wX2NvbW1pdChzdHJ1Y3QgY29tbWl0X2xpc3QgKipzdGFjaykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnRvcCA9ICpzdGFjazsKKwlzdHJ1Y3QgY29tbWl0ICppdGVtID0gdG9wID8gdG9wLT5pdGVtIDogTlVMTDsKKworCWlmICh0b3ApIHsKKwkJKnN0YWNrID0gdG9wLT5uZXh0OworCQlmcmVlKHRvcCk7CisJfQorCXJldHVybiBpdGVtOworfQorCisvKgorICogVG9wb2xvZ2ljYWwgc29ydCBzdXBwb3J0CisgKi8KKworLyogY291bnQgbnVtYmVyIG9mIGNoaWxkcmVuIHRoYXQgaGF2ZSBub3QgYmVlbiBlbWl0dGVkICovCitkZWZpbmVfY29tbWl0X3NsYWIoaW5kZWdyZWVfc2xhYiwgaW50KTsKKworZGVmaW5lX2NvbW1pdF9zbGFiKGF1dGhvcl9kYXRlX3NsYWIsIHRpbWVzdGFtcF90KTsKKwordm9pZCByZWNvcmRfYXV0aG9yX2RhdGUoc3RydWN0IGF1dGhvcl9kYXRlX3NsYWIgKmF1dGhvcl9kYXRlLAorCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWNvbnN0IGNoYXIgKmJ1ZmZlciA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgTlVMTCk7CisJc3RydWN0IGlkZW50X3NwbGl0IGlkZW50OworCWNvbnN0IGNoYXIgKmlkZW50X2xpbmU7CisJc2l6ZV90IGlkZW50X2xlbjsKKwljaGFyICpkYXRlX2VuZDsKKwl0aW1lc3RhbXBfdCBkYXRlOworCisJaWRlbnRfbGluZSA9IGZpbmRfY29tbWl0X2hlYWRlcihidWZmZXIsICJhdXRob3IiLCAmaWRlbnRfbGVuKTsKKwlpZiAoIWlkZW50X2xpbmUpCisJCWdvdG8gZmFpbF9leGl0OyAvKiBubyBhdXRob3IgbGluZSAqLworCWlmIChzcGxpdF9pZGVudF9saW5lKCZpZGVudCwgaWRlbnRfbGluZSwgaWRlbnRfbGVuKSB8fAorCSAgICAhaWRlbnQuZGF0ZV9iZWdpbiB8fCAhaWRlbnQuZGF0ZV9lbmQpCisJCWdvdG8gZmFpbF9leGl0OyAvKiBtYWxmb3JtZWQgImF1dGhvciIgbGluZSAqLworCisJZGF0ZSA9IHBhcnNlX3RpbWVzdGFtcChpZGVudC5kYXRlX2JlZ2luLCAmZGF0ZV9lbmQsIDEwKTsKKwlpZiAoZGF0ZV9lbmQgIT0gaWRlbnQuZGF0ZV9lbmQpCisJCWdvdG8gZmFpbF9leGl0OyAvKiBtYWxmb3JtZWQgZGF0ZSAqLworCSooYXV0aG9yX2RhdGVfc2xhYl9hdChhdXRob3JfZGF0ZSwgY29tbWl0KSkgPSBkYXRlOworCitmYWlsX2V4aXQ6CisJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIGJ1ZmZlcik7Cit9CisKK2ludCBjb21wYXJlX2NvbW1pdHNfYnlfYXV0aG9yX2RhdGUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfLAorCQkJCSAgIHZvaWQgKmNiX2RhdGEpCit7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqYSA9IGFfLCAqYiA9IGJfOworCXN0cnVjdCBhdXRob3JfZGF0ZV9zbGFiICphdXRob3JfZGF0ZSA9IGNiX2RhdGE7CisJdGltZXN0YW1wX3QgYV9kYXRlID0gKihhdXRob3JfZGF0ZV9zbGFiX2F0KGF1dGhvcl9kYXRlLCBhKSk7CisJdGltZXN0YW1wX3QgYl9kYXRlID0gKihhdXRob3JfZGF0ZV9zbGFiX2F0KGF1dGhvcl9kYXRlLCBiKSk7CisKKwkvKiBuZXdlciBjb21taXRzIHdpdGggbGFyZ2VyIGRhdGUgZmlyc3QgKi8KKwlpZiAoYV9kYXRlIDwgYl9kYXRlKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChhX2RhdGUgPiBiX2RhdGUpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNvbXBhcmVfY29tbWl0c19ieV9nZW5fdGhlbl9jb21taXRfZGF0ZShjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8sIHZvaWQgKnVudXNlZCkKK3sKKwljb25zdCBzdHJ1Y3QgY29tbWl0ICphID0gYV8sICpiID0gYl87CisKKwkvKiBuZXdlciBjb21taXRzIGZpcnN0ICovCisJaWYgKGEtPmdlbmVyYXRpb24gPCBiLT5nZW5lcmF0aW9uKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChhLT5nZW5lcmF0aW9uID4gYi0+Z2VuZXJhdGlvbikKKwkJcmV0dXJuIC0xOworCisJLyogdXNlIGRhdGUgYXMgYSBoZXVyaXN0aWMgd2hlbiBnZW5lcmF0aW9ucyBhcmUgZXF1YWwgKi8KKwlpZiAoYS0+ZGF0ZSA8IGItPmRhdGUpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGEtPmRhdGUgPiBiLT5kYXRlKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjb21wYXJlX2NvbW1pdHNfYnlfY29tbWl0X2RhdGUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfLCB2b2lkICp1bnVzZWQpCit7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqYSA9IGFfLCAqYiA9IGJfOworCS8qIG5ld2VyIGNvbW1pdHMgd2l0aCBsYXJnZXIgZGF0ZSBmaXJzdCAqLworCWlmIChhLT5kYXRlIDwgYi0+ZGF0ZSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoYS0+ZGF0ZSA+IGItPmRhdGUpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBlcmZvcm1zIGFuIGluLXBsYWNlIHRvcG9sb2dpY2FsIHNvcnQgb24gdGhlIGxpc3Qgc3VwcGxpZWQuCisgKi8KK3ZvaWQgc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcihzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0LCBlbnVtIHJldl9zb3J0X29yZGVyIHNvcnRfb3JkZXIpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpuZXh0LCAqb3JpZyA9ICpsaXN0OworCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwdHI7CisJc3RydWN0IGluZGVncmVlX3NsYWIgaW5kZWdyZWU7CisJc3RydWN0IHByaW9fcXVldWUgcXVldWU7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBhdXRob3JfZGF0ZV9zbGFiIGF1dGhvcl9kYXRlOworCisJaWYgKCFvcmlnKQorCQlyZXR1cm47CisJKmxpc3QgPSBOVUxMOworCisJaW5pdF9pbmRlZ3JlZV9zbGFiKCZpbmRlZ3JlZSk7CisJbWVtc2V0KCZxdWV1ZSwgJ1wwJywgc2l6ZW9mKHF1ZXVlKSk7CisKKwlzd2l0Y2ggKHNvcnRfb3JkZXIpIHsKKwlkZWZhdWx0OiAvKiBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUiAqLworCQlxdWV1ZS5jb21wYXJlID0gTlVMTDsKKwkJYnJlYWs7CisJY2FzZSBSRVZfU09SVF9CWV9DT01NSVRfREFURToKKwkJcXVldWUuY29tcGFyZSA9IGNvbXBhcmVfY29tbWl0c19ieV9jb21taXRfZGF0ZTsKKwkJYnJlYWs7CisJY2FzZSBSRVZfU09SVF9CWV9BVVRIT1JfREFURToKKwkJaW5pdF9hdXRob3JfZGF0ZV9zbGFiKCZhdXRob3JfZGF0ZSk7CisJCXF1ZXVlLmNvbXBhcmUgPSBjb21wYXJlX2NvbW1pdHNfYnlfYXV0aG9yX2RhdGU7CisJCXF1ZXVlLmNiX2RhdGEgPSAmYXV0aG9yX2RhdGU7CisJCWJyZWFrOworCX0KKworCS8qIE1hcmsgdGhlbSBhbmQgY2xlYXIgdGhlIGluZGVncmVlICovCisJZm9yIChuZXh0ID0gb3JpZzsgbmV4dDsgbmV4dCA9IG5leHQtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbmV4dC0+aXRlbTsKKwkJKihpbmRlZ3JlZV9zbGFiX2F0KCZpbmRlZ3JlZSwgY29tbWl0KSkgPSAxOworCQkvKiBhbHNvIHJlY29yZCB0aGUgYXV0aG9yIGRhdGVzLCBpZiBuZWVkZWQgKi8KKwkJaWYgKHNvcnRfb3JkZXIgPT0gUkVWX1NPUlRfQllfQVVUSE9SX0RBVEUpCisJCQlyZWNvcmRfYXV0aG9yX2RhdGUoJmF1dGhvcl9kYXRlLCBjb21taXQpOworCX0KKworCS8qIHVwZGF0ZSB0aGUgaW5kZWdyZWUgKi8KKwlmb3IgKG5leHQgPSBvcmlnOyBuZXh0OyBuZXh0ID0gbmV4dC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBuZXh0LT5pdGVtLT5wYXJlbnRzOworCQl3aGlsZSAocGFyZW50cykgeworCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwkJCWludCAqcGkgPSBpbmRlZ3JlZV9zbGFiX2F0KCZpbmRlZ3JlZSwgcGFyZW50KTsKKworCQkJaWYgKCpwaSkKKwkJCQkoKnBpKSsrOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCX0KKwl9CisKKwkvKgorCSAqIGZpbmQgdGhlIHRpcHMKKwkgKgorCSAqIHRpcHMgYXJlIG5vZGVzIG5vdCByZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgbm9kZSBpbiB0aGUgbGlzdAorCSAqCisJICogdGhlIHRpcHMgc2VydmUgYXMgYSBzdGFydGluZyBzZXQgZm9yIHRoZSB3b3JrIHF1ZXVlLgorCSAqLworCWZvciAobmV4dCA9IG9yaWc7IG5leHQ7IG5leHQgPSBuZXh0LT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IG5leHQtPml0ZW07CisKKwkJaWYgKCooaW5kZWdyZWVfc2xhYl9hdCgmaW5kZWdyZWUsIGNvbW1pdCkpID09IDEpCisJCQlwcmlvX3F1ZXVlX3B1dCgmcXVldWUsIGNvbW1pdCk7CisJfQorCisJLyoKKwkgKiBUaGlzIGlzIHVuZm9ydHVuYXRlOyB0aGUgaW5pdGlhbCB0aXBzIG5lZWQgdG8gYmUgc2hvd24KKwkgKiBpbiB0aGUgb3JkZXIgZ2l2ZW4gZnJvbSB0aGUgcmV2aXNpb24gdHJhdmVyc2FsIG1hY2hpbmVyeS4KKwkgKi8KKwlpZiAoc29ydF9vcmRlciA9PSBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUikKKwkJcHJpb19xdWV1ZV9yZXZlcnNlKCZxdWV1ZSk7CisKKwkvKiBXZSBubyBsb25nZXIgbmVlZCB0aGUgY29tbWl0IGxpc3QgKi8KKwlmcmVlX2NvbW1pdF9saXN0KG9yaWcpOworCisJcHB0ciA9IGxpc3Q7CisJKmxpc3QgPSBOVUxMOworCXdoaWxlICgoY29tbWl0ID0gcHJpb19xdWV1ZV9nZXQoJnF1ZXVlKSkgIT0gTlVMTCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisKKwkJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOyBwYXJlbnRzIDsgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpIHsKKwkJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHBhcmVudHMtPml0ZW07CisJCQlpbnQgKnBpID0gaW5kZWdyZWVfc2xhYl9hdCgmaW5kZWdyZWUsIHBhcmVudCk7CisKKwkJCWlmICghKnBpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogcGFyZW50cyBhcmUgb25seSBlbnF1ZXVlZCBmb3IgZW1pc3Npb24KKwkJCSAqIHdoZW4gYWxsIHRoZWlyIGNoaWxkcmVuIGhhdmUgYmVlbiBlbWl0dGVkIHRoZXJlYnkKKwkJCSAqIGd1YXJhbnRlZWluZyB0b3BvbG9naWNhbCBvcmRlci4KKwkJCSAqLworCQkJaWYgKC0tKCpwaSkgPT0gMSkKKwkJCQlwcmlvX3F1ZXVlX3B1dCgmcXVldWUsIHBhcmVudCk7CisJCX0KKwkJLyoKKwkJICogYWxsIGNoaWxkcmVuIG9mIGNvbW1pdCBoYXZlIGFscmVhZHkgYmVlbgorCQkgKiBlbWl0dGVkLiB3ZSBjYW4gZW1pdCBpdCBub3cuCisJCSAqLworCQkqKGluZGVncmVlX3NsYWJfYXQoJmluZGVncmVlLCBjb21taXQpKSA9IDA7CisKKwkJcHB0ciA9ICZjb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCBwcHRyKS0+bmV4dDsKKwl9CisKKwljbGVhcl9pbmRlZ3JlZV9zbGFiKCZpbmRlZ3JlZSk7CisJY2xlYXJfcHJpb19xdWV1ZSgmcXVldWUpOworCWlmIChzb3J0X29yZGVyID09IFJFVl9TT1JUX0JZX0FVVEhPUl9EQVRFKQorCQljbGVhcl9hdXRob3JfZGF0ZV9zbGFiKCZhdXRob3JfZGF0ZSk7Cit9CisKK3N0cnVjdCByZXZfY29sbGVjdCB7CisJc3RydWN0IGNvbW1pdCAqKmNvbW1pdDsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworCXVuc2lnbmVkIGludCBpbml0aWFsIDogMTsKK307CisKK3N0YXRpYyB2b2lkIGFkZF9vbmVfY29tbWl0KHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgc3RydWN0IHJldl9jb2xsZWN0ICpyZXZzKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCWlmIChpc19udWxsX29pZChvaWQpKQorCQlyZXR1cm47CisKKwljb21taXQgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCWlmICghY29tbWl0IHx8CisJICAgIChjb21taXQtPm9iamVjdC5mbGFncyAmIFRNUF9NQVJLKSB8fAorCSAgICBwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJcmV0dXJuOworCisJQUxMT0NfR1JPVyhyZXZzLT5jb21taXQsIHJldnMtPm5yICsgMSwgcmV2cy0+YWxsb2MpOworCXJldnMtPmNvbW1pdFtyZXZzLT5ucisrXSA9IGNvbW1pdDsKKwljb21taXQtPm9iamVjdC5mbGFncyB8PSBUTVBfTUFSSzsKK30KKworc3RhdGljIGludCBjb2xsZWN0X29uZV9yZWZsb2dfZW50KHN0cnVjdCBvYmplY3RfaWQgKm9vaWQsIHN0cnVjdCBvYmplY3RfaWQgKm5vaWQsCisJCQkJICBjb25zdCBjaGFyICppZGVudCwgdGltZXN0YW1wX3QgdGltZXN0YW1wLAorCQkJCSAgaW50IHR6LCBjb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYmRhdGEpCit7CisJc3RydWN0IHJldl9jb2xsZWN0ICpyZXZzID0gY2JkYXRhOworCisJaWYgKHJldnMtPmluaXRpYWwpIHsKKwkJcmV2cy0+aW5pdGlhbCA9IDA7CisJCWFkZF9vbmVfY29tbWl0KG9vaWQsIHJldnMpOworCX0KKwlhZGRfb25lX2NvbW1pdChub2lkLCByZXZzKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNvbW1pdCAqZ2V0X2ZvcmtfcG9pbnQoY29uc3QgY2hhciAqcmVmbmFtZSwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCByZXZfY29sbGVjdCByZXZzOworCXN0cnVjdCBjb21taXRfbGlzdCAqYmFzZXM7CisJaW50IGk7CisJc3RydWN0IGNvbW1pdCAqcmV0ID0gTlVMTDsKKwljaGFyICpmdWxsX3JlZm5hbWU7CisKKwlzd2l0Y2ggKGR3aW1fcmVmKHJlZm5hbWUsIHN0cmxlbihyZWZuYW1lKSwgJm9pZCwgJmZ1bGxfcmVmbmFtZSkpIHsKKwljYXNlIDA6CisJCWRpZSgiTm8gc3VjaCByZWY6ICclcyciLCByZWZuYW1lKTsKKwljYXNlIDE6CisJCWJyZWFrOyAvKiBnb29kICovCisJZGVmYXVsdDoKKwkJZGllKCJBbWJpZ3VvdXMgcmVmbmFtZTogJyVzJyIsIHJlZm5hbWUpOworCX0KKworCW1lbXNldCgmcmV2cywgMCwgc2l6ZW9mKHJldnMpKTsKKwlyZXZzLmluaXRpYWwgPSAxOworCWZvcl9lYWNoX3JlZmxvZ19lbnQoZnVsbF9yZWZuYW1lLCBjb2xsZWN0X29uZV9yZWZsb2dfZW50LCAmcmV2cyk7CisKKwlpZiAoIXJldnMubnIpCisJCWFkZF9vbmVfY29tbWl0KCZvaWQsICZyZXZzKTsKKworCWZvciAoaSA9IDA7IGkgPCByZXZzLm5yOyBpKyspCisJCXJldnMuY29tbWl0W2ldLT5vYmplY3QuZmxhZ3MgJj0gflRNUF9NQVJLOworCisJYmFzZXMgPSBnZXRfbWVyZ2VfYmFzZXNfbWFueShjb21taXQsIHJldnMubnIsIHJldnMuY29tbWl0KTsKKworCS8qCisJICogVGhlcmUgc2hvdWxkIGJlIG9uZSBhbmQgb25seSBvbmUgbWVyZ2UgYmFzZSwgd2hlbiB3ZSBmb3VuZAorCSAqIGEgY29tbW9uIGFuY2VzdG9yIGFtb25nIHJlZmxvZyBlbnRyaWVzLgorCSAqLworCWlmICghYmFzZXMgfHwgYmFzZXMtPm5leHQpCisJCWdvdG8gY2xlYW51cF9yZXR1cm47CisKKwkvKiBBbmQgdGhlIGZvdW5kIG9uZSBtdXN0IGJlIG9uZSBvZiB0aGUgcmVmbG9nIGVudHJpZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmV2cy5ucjsgaSsrKQorCQlpZiAoJmJhc2VzLT5pdGVtLT5vYmplY3QgPT0gJnJldnMuY29tbWl0W2ldLT5vYmplY3QpCisJCQlicmVhazsgLyogZm91bmQgKi8KKwlpZiAocmV2cy5uciA8PSBpKQorCQlnb3RvIGNsZWFudXBfcmV0dXJuOworCisJcmV0ID0gYmFzZXMtPml0ZW07CisKK2NsZWFudXBfcmV0dXJuOgorCWZyZWVfY29tbWl0X2xpc3QoYmFzZXMpOworCWZyZWUoZnVsbF9yZWZuYW1lKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSW5kZXhlZCBieSBoYXNoIGFsZ29yaXRobSBpZGVudGlmaWVyLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZ3BnX3NpZ19oZWFkZXJzW10gPSB7CisJTlVMTCwKKwkiZ3Bnc2lnIiwKKwkiZ3Bnc2lnLXNoYTI1NiIsCit9OworCitzdGF0aWMgaW50IGRvX3NpZ25fY29tbWl0KHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqa2V5aWQpCit7CisJc3RydWN0IHN0cmJ1ZiBzaWcgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaW5zcG9zLCBjb3B5cG9zOworCWNvbnN0IGNoYXIgKmVvaDsKKwljb25zdCBjaGFyICpncGdfc2lnX2hlYWRlciA9IGdwZ19zaWdfaGVhZGVyc1toYXNoX2FsZ29fYnlfcHRyKHRoZV9oYXNoX2FsZ28pXTsKKwlpbnQgZ3BnX3NpZ19oZWFkZXJfbGVuID0gc3RybGVuKGdwZ19zaWdfaGVhZGVyKTsKKworCS8qIGZpbmQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyICovCisJZW9oID0gc3Ryc3RyKGJ1Zi0+YnVmLCAiXG5cbiIpOworCWlmICghZW9oKQorCQlpbnNwb3MgPSBidWYtPmxlbjsKKwllbHNlCisJCWluc3BvcyA9IGVvaCAtIGJ1Zi0+YnVmICsgMTsKKworCWlmICgha2V5aWQgfHwgISprZXlpZCkKKwkJa2V5aWQgPSBnZXRfc2lnbmluZ19rZXkoKTsKKwlpZiAoc2lnbl9idWZmZXIoYnVmLCAmc2lnLCBrZXlpZCkpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnNpZyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGNvcHlwb3MgPSAwOyBzaWcuYnVmW2NvcHlwb3NdOyApIHsKKwkJY29uc3QgY2hhciAqYm9sID0gc2lnLmJ1ZiArIGNvcHlwb3M7CisJCWNvbnN0IGNoYXIgKmVvbCA9IHN0cmNocm51bChib2wsICdcbicpOworCQlpbnQgbGVuID0gKGVvbCAtIGJvbCkgKyAhISplb2w7CisKKwkJaWYgKCFjb3B5cG9zKSB7CisJCQlzdHJidWZfaW5zZXJ0KGJ1ZiwgaW5zcG9zLCBncGdfc2lnX2hlYWRlciwgZ3BnX3NpZ19oZWFkZXJfbGVuKTsKKwkJCWluc3BvcyArPSBncGdfc2lnX2hlYWRlcl9sZW47CisJCX0KKwkJc3RyYnVmX2luc2VydHN0cihidWYsIGluc3BvcysrLCAiICIpOworCQlzdHJidWZfaW5zZXJ0KGJ1ZiwgaW5zcG9zLCBib2wsIGxlbik7CisJCWluc3BvcyArPSBsZW47CisJCWNvcHlwb3MgKz0gbGVuOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2lnKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX3NpZ25lZF9jb21taXQoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJc3RydWN0IHN0cmJ1ZiAqcGF5bG9hZCwgc3RydWN0IHN0cmJ1ZiAqc2lnbmF0dXJlKQoreworCisJdW5zaWduZWQgbG9uZyBzaXplOworCWNvbnN0IGNoYXIgKmJ1ZmZlciA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgJnNpemUpOworCWludCBpbl9zaWduYXR1cmUsIHNhd19zaWduYXR1cmUgPSAtMTsKKwljb25zdCBjaGFyICpsaW5lLCAqdGFpbDsKKwljb25zdCBjaGFyICpncGdfc2lnX2hlYWRlciA9IGdwZ19zaWdfaGVhZGVyc1toYXNoX2FsZ29fYnlfcHRyKHRoZV9oYXNoX2FsZ28pXTsKKwlpbnQgZ3BnX3NpZ19oZWFkZXJfbGVuID0gc3RybGVuKGdwZ19zaWdfaGVhZGVyKTsKKworCWxpbmUgPSBidWZmZXI7CisJdGFpbCA9IGJ1ZmZlciArIHNpemU7CisJaW5fc2lnbmF0dXJlID0gMDsKKwlzYXdfc2lnbmF0dXJlID0gMDsKKwl3aGlsZSAobGluZSA8IHRhaWwpIHsKKwkJY29uc3QgY2hhciAqc2lnID0gTlVMTDsKKwkJY29uc3QgY2hhciAqbmV4dCA9IG1lbWNocihsaW5lLCAnXG4nLCB0YWlsIC0gbGluZSk7CisKKwkJbmV4dCA9IG5leHQgPyBuZXh0ICsgMSA6IHRhaWw7CisJCWlmIChpbl9zaWduYXR1cmUgJiYgbGluZVswXSA9PSAnICcpCisJCQlzaWcgPSBsaW5lICsgMTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgobGluZSwgZ3BnX3NpZ19oZWFkZXIpICYmCisJCQkgbGluZVtncGdfc2lnX2hlYWRlcl9sZW5dID09ICcgJykKKwkJCXNpZyA9IGxpbmUgKyBncGdfc2lnX2hlYWRlcl9sZW4gKyAxOworCQlpZiAoc2lnKSB7CisJCQlzdHJidWZfYWRkKHNpZ25hdHVyZSwgc2lnLCBuZXh0IC0gc2lnKTsKKwkJCXNhd19zaWduYXR1cmUgPSAxOworCQkJaW5fc2lnbmF0dXJlID0gMTsKKwkJfSBlbHNlIHsKKwkJCWlmICgqbGluZSA9PSAnXG4nKQorCQkJCS8qIGR1bXAgdGhlIHdob2xlIHJlbWFpbmRlciBvZiB0aGUgYnVmZmVyICovCisJCQkJbmV4dCA9IHRhaWw7CisJCQlzdHJidWZfYWRkKHBheWxvYWQsIGxpbmUsIG5leHQgLSBsaW5lKTsKKwkJCWluX3NpZ25hdHVyZSA9IDA7CisJCX0KKwkJbGluZSA9IG5leHQ7CisJfQorCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBidWZmZXIpOworCXJldHVybiBzYXdfc2lnbmF0dXJlOworfQorCitpbnQgcmVtb3ZlX3NpZ25hdHVyZShzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJY29uc3QgY2hhciAqbGluZSA9IGJ1Zi0+YnVmOworCWNvbnN0IGNoYXIgKnRhaWwgPSBidWYtPmJ1ZiArIGJ1Zi0+bGVuOworCWludCBpbl9zaWduYXR1cmUgPSAwOworCWNvbnN0IGNoYXIgKnNpZ19zdGFydCA9IE5VTEw7CisJY29uc3QgY2hhciAqc2lnX2VuZCA9IE5VTEw7CisKKwl3aGlsZSAobGluZSA8IHRhaWwpIHsKKwkJY29uc3QgY2hhciAqbmV4dCA9IG1lbWNocihsaW5lLCAnXG4nLCB0YWlsIC0gbGluZSk7CisJCW5leHQgPSBuZXh0ID8gbmV4dCArIDEgOiB0YWlsOworCisJCWlmIChpbl9zaWduYXR1cmUgJiYgbGluZVswXSA9PSAnICcpCisJCQlzaWdfZW5kID0gbmV4dDsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgobGluZSwgImdwZ3NpZyIpKSB7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDE7IGkgPCBHSVRfSEFTSF9OQUxHT1M7IGkrKykgeworCQkJCWNvbnN0IGNoYXIgKnA7CisJCQkJaWYgKHNraXBfcHJlZml4KGxpbmUsIGdwZ19zaWdfaGVhZGVyc1tpXSwgJnApICYmCisJCQkJICAgICpwID09ICcgJykgeworCQkJCQlzaWdfc3RhcnQgPSBsaW5lOworCQkJCQlzaWdfZW5kID0gbmV4dDsKKwkJCQkJaW5fc2lnbmF0dXJlID0gMTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoKmxpbmUgPT0gJ1xuJykKKwkJCQkvKiBkdW1wIHRoZSB3aG9sZSByZW1haW5kZXIgb2YgdGhlIGJ1ZmZlciAqLworCQkJCW5leHQgPSB0YWlsOworCQkJaW5fc2lnbmF0dXJlID0gMDsKKwkJfQorCQlsaW5lID0gbmV4dDsKKwl9CisKKwlpZiAoc2lnX3N0YXJ0KQorCQlzdHJidWZfcmVtb3ZlKGJ1Ziwgc2lnX3N0YXJ0IC0gYnVmLT5idWYsIHNpZ19lbmQgLSBzaWdfc3RhcnQpOworCisJcmV0dXJuIHNpZ19zdGFydCAhPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfc2lnbmVkX3RhZyhzdHJ1Y3QgY29tbWl0ICpwYXJlbnQsIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICoqKnRhaWwpCit7CisJc3RydWN0IG1lcmdlX3JlbW90ZV9kZXNjICpkZXNjOworCXN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICptZXJnZXRhZzsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplLCBsZW47CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJZGVzYyA9IG1lcmdlX3JlbW90ZV91dGlsKHBhcmVudCk7CisJaWYgKCFkZXNjIHx8ICFkZXNjLT5vYmopCisJCXJldHVybjsKKwlidWYgPSByZWFkX29iamVjdF9maWxlKCZkZXNjLT5vYmotPm9pZCwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZiB8fCB0eXBlICE9IE9CSl9UQUcpCisJCWdvdG8gZnJlZV9yZXR1cm47CisJbGVuID0gcGFyc2Vfc2lnbmF0dXJlKGJ1Ziwgc2l6ZSk7CisJaWYgKHNpemUgPT0gbGVuKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCS8qCisJICogV2UgY291bGQgdmVyaWZ5IHRoaXMgc2lnbmF0dXJlIGFuZCBlaXRoZXIgb21pdCB0aGUgdGFnIHdoZW4KKwkgKiBpdCBkb2VzIG5vdCB2YWxpZGF0ZSwgYnV0IHRoZSBpbnRlZ3JhdG9yIG1heSBub3QgaGF2ZSB0aGUKKwkgKiBwdWJsaWMga2V5IG9mIHRoZSBzaWduZXIgb2YgdGhlIHRhZyBoZSBpcyBtZXJnaW5nLCB3aGlsZSBhCisJICogbGF0ZXIgYXVkaXRvciBtYXkgaGF2ZSBpdCB3aGlsZSBhdWRpdGluZywgc28gbGV0J3Mgbm90IHJ1bgorCSAqIHZlcmlmeS1zaWduZWQtYnVmZmVyIGhlcmUgZm9yIG5vdy4uLgorCSAqCisJICogaWYgKHZlcmlmeV9zaWduZWRfYnVmZmVyKGJ1ZiwgbGVuLCBidWYgKyBsZW4sIHNpemUgLSBsZW4sIC4uLikpCisJICoJd2Fybigid2FybmluZzogc2lnbmVkIHRhZyB1bnZlcmlmaWVkLiIpOworCSAqLworCW1lcmdldGFnID0geGNhbGxvYygxLCBzaXplb2YoKm1lcmdldGFnKSk7CisJbWVyZ2V0YWctPmtleSA9IHhzdHJkdXAoIm1lcmdldGFnIik7CisJbWVyZ2V0YWctPnZhbHVlID0gYnVmOworCW1lcmdldGFnLT5sZW4gPSBzaXplOworCisJKip0YWlsID0gbWVyZ2V0YWc7CisJKnRhaWwgPSAmbWVyZ2V0YWctPm5leHQ7CisJcmV0dXJuOworCitmcmVlX3JldHVybjoKKwlmcmVlKGJ1Zik7Cit9CisKK2ludCBjaGVja19jb21taXRfc2lnbmF0dXJlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBheWxvYWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHNpZ25hdHVyZSA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAxOworCisJc2lnYy0+cmVzdWx0ID0gJ04nOworCisJaWYgKHBhcnNlX3NpZ25lZF9jb21taXQoY29tbWl0LCAmcGF5bG9hZCwgJnNpZ25hdHVyZSkgPD0gMCkKKwkJZ290byBvdXQ7CisJcmV0ID0gY2hlY2tfc2lnbmF0dXJlKHBheWxvYWQuYnVmLCBwYXlsb2FkLmxlbiwgc2lnbmF0dXJlLmJ1ZiwKKwkJc2lnbmF0dXJlLmxlbiwgc2lnYyk7CisKKyBvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJnBheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZzaWduYXR1cmUpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCB2ZXJpZnlfbWVyZ2Vfc2lnbmF0dXJlKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IHZlcmJvc2l0eSwKKwkJCSAgICBpbnQgY2hlY2tfdHJ1c3QpCit7CisJY2hhciBoZXhbR0lUX01BWF9IRVhTWiArIDFdOworCXN0cnVjdCBzaWduYXR1cmVfY2hlY2sgc2lnbmF0dXJlX2NoZWNrOworCWludCByZXQ7CisJbWVtc2V0KCZzaWduYXR1cmVfY2hlY2ssIDAsIHNpemVvZihzaWduYXR1cmVfY2hlY2spKTsKKworCXJldCA9IGNoZWNrX2NvbW1pdF9zaWduYXR1cmUoY29tbWl0LCAmc2lnbmF0dXJlX2NoZWNrKTsKKworCWZpbmRfdW5pcXVlX2FiYnJldl9yKGhleCwgJmNvbW1pdC0+b2JqZWN0Lm9pZCwgREVGQVVMVF9BQkJSRVYpOworCXN3aXRjaCAoc2lnbmF0dXJlX2NoZWNrLnJlc3VsdCkgeworCWNhc2UgJ0cnOgorCQlpZiAocmV0IHx8IChjaGVja190cnVzdCAmJiBzaWduYXR1cmVfY2hlY2sudHJ1c3RfbGV2ZWwgPCBUUlVTVF9NQVJHSU5BTCkpCisJCQlkaWUoXygiQ29tbWl0ICVzIGhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSwgIgorCQkJICAgICAgImFsbGVnZWRseSBieSAlcy4iKSwgaGV4LCBzaWduYXR1cmVfY2hlY2suc2lnbmVyKTsKKwkJYnJlYWs7CisJY2FzZSAnQic6CisJCWRpZShfKCJDb21taXQgJXMgaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUgIgorCQkgICAgICAiYWxsZWdlZGx5IGJ5ICVzLiIpLCBoZXgsIHNpZ25hdHVyZV9jaGVjay5zaWduZXIpOworCWRlZmF1bHQ6IC8qICdOJyAqLworCQlkaWUoXygiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlLiIpLCBoZXgpOworCX0KKwlpZiAodmVyYm9zaXR5ID49IDAgJiYgc2lnbmF0dXJlX2NoZWNrLnJlc3VsdCA9PSAnRycpCisJCXByaW50ZihfKCJDb21taXQgJXMgaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIGJ5ICVzXG4iKSwKKwkJICAgICAgIGhleCwgc2lnbmF0dXJlX2NoZWNrLnNpZ25lcik7CisKKwlzaWduYXR1cmVfY2hlY2tfY2xlYXIoJnNpZ25hdHVyZV9jaGVjayk7Cit9CisKK3ZvaWQgYXBwZW5kX21lcmdlX3RhZ19oZWFkZXJzKHN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cywKKwkJCSAgICAgIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICoqKnRhaWwpCit7CisJd2hpbGUgKHBhcmVudHMpIHsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwkJaGFuZGxlX3NpZ25lZF90YWcocGFyZW50LCB0YWlsKTsKKwkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfZXh0cmFfaGVhZGVyKHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwKKwkJCSAgICAgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhKQoreworCXN0cmJ1Zl9hZGRzdHIoYnVmZmVyLCBleHRyYS0+a2V5KTsKKwlpZiAoZXh0cmEtPmxlbikKKwkJc3RyYnVmX2FkZF9saW5lcyhidWZmZXIsICIgIiwgZXh0cmEtPnZhbHVlLCBleHRyYS0+bGVuKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRjaChidWZmZXIsICdcbicpOworfQorCitzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqcmVhZF9jb21taXRfZXh0cmFfaGVhZGVycyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJCQkgICAgICBjb25zdCBjaGFyICoqZXhjbHVkZSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwljb25zdCBjaGFyICpidWZmZXIgPSBnZXRfY29tbWl0X2J1ZmZlcihjb21taXQsICZzaXplKTsKKwlleHRyYSA9IHJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcl9saW5lcyhidWZmZXIsIHNpemUsIGV4Y2x1ZGUpOworCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBidWZmZXIpOworCXJldHVybiBleHRyYTsKK30KKworaW50IGZvcl9lYWNoX21lcmdldGFnKGVhY2hfbWVyZ2V0YWdfZm4gZm4sIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEsICp0b19mcmVlOworCWludCByZXMgPSAwOworCisJdG9fZnJlZSA9IHJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcnMoY29tbWl0LCBOVUxMKTsKKwlmb3IgKGV4dHJhID0gdG9fZnJlZTsgIXJlcyAmJiBleHRyYTsgZXh0cmEgPSBleHRyYS0+bmV4dCkgeworCQlpZiAoc3RyY21wKGV4dHJhLT5rZXksICJtZXJnZXRhZyIpKQorCQkJY29udGludWU7IC8qIG5vdCBhIG1lcmdlIHRhZyAqLworCQlyZXMgPSBmbihjb21taXQsIGV4dHJhLCBkYXRhKTsKKwl9CisJZnJlZV9jb21taXRfZXh0cmFfaGVhZGVycyh0b19mcmVlKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW5saW5lIGludCBzdGFuZGFyZF9oZWFkZXJfZmllbGQoY29uc3QgY2hhciAqZmllbGQsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuICgobGVuID09IDQgJiYgIW1lbWNtcChmaWVsZCwgInRyZWUiLCA0KSkgfHwKKwkJKGxlbiA9PSA2ICYmICFtZW1jbXAoZmllbGQsICJwYXJlbnQiLCA2KSkgfHwKKwkJKGxlbiA9PSA2ICYmICFtZW1jbXAoZmllbGQsICJhdXRob3IiLCA2KSkgfHwKKwkJKGxlbiA9PSA5ICYmICFtZW1jbXAoZmllbGQsICJjb21taXR0ZXIiLCA5KSkgfHwKKwkJKGxlbiA9PSA4ICYmICFtZW1jbXAoZmllbGQsICJlbmNvZGluZyIsIDgpKSk7Cit9CisKK3N0YXRpYyBpbnQgZXhjbHVkZWRfaGVhZGVyX2ZpZWxkKGNvbnN0IGNoYXIgKmZpZWxkLCBzaXplX3QgbGVuLCBjb25zdCBjaGFyICoqZXhjbHVkZSkKK3sKKwlpZiAoIWV4Y2x1ZGUpCisJCXJldHVybiAwOworCisJd2hpbGUgKCpleGNsdWRlKSB7CisJCXNpemVfdCB4bGVuID0gc3RybGVuKCpleGNsdWRlKTsKKwkJaWYgKGxlbiA9PSB4bGVuICYmICFtZW1jbXAoZmllbGQsICpleGNsdWRlLCB4bGVuKSkKKwkJCXJldHVybiAxOworCQlleGNsdWRlKys7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKnJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcl9saW5lcygKKwljb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLAorCWNvbnN0IGNoYXIgKipleGNsdWRlKQoreworCXN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpleHRyYSA9IE5VTEwsICoqdGFpbCA9ICZleHRyYSwgKml0ID0gTlVMTDsKKwljb25zdCBjaGFyICpsaW5lLCAqbmV4dCwgKmVvZiwgKmVvYjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJZm9yIChsaW5lID0gYnVmZmVyLCBlb2IgPSBsaW5lICsgc2l6ZTsKKwkgICAgIGxpbmUgPCBlb2IgJiYgKmxpbmUgIT0gJ1xuJzsKKwkgICAgIGxpbmUgPSBuZXh0KSB7CisJCW5leHQgPSBtZW1jaHIobGluZSwgJ1xuJywgZW9iIC0gbGluZSk7CisJCW5leHQgPSBuZXh0ID8gbmV4dCArIDEgOiBlb2I7CisJCWlmICgqbGluZSA9PSAnICcpIHsKKwkJCS8qIGNvbnRpbnVhdGlvbiAqLworCQkJaWYgKGl0KQorCQkJCXN0cmJ1Zl9hZGQoJmJ1ZiwgbGluZSArIDEsIG5leHQgLSAobGluZSArIDEpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChpdCkKKwkJCWl0LT52YWx1ZSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJml0LT5sZW4pOworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCWl0ID0gTlVMTDsKKworCQllb2YgPSBtZW1jaHIobGluZSwgJyAnLCBuZXh0IC0gbGluZSk7CisJCWlmICghZW9mKQorCQkJZW9mID0gbmV4dDsKKwkJZWxzZSBpZiAoc3RhbmRhcmRfaGVhZGVyX2ZpZWxkKGxpbmUsIGVvZiAtIGxpbmUpIHx8CisJCQkgZXhjbHVkZWRfaGVhZGVyX2ZpZWxkKGxpbmUsIGVvZiAtIGxpbmUsIGV4Y2x1ZGUpKQorCQkJY29udGludWU7CisKKwkJaXQgPSB4Y2FsbG9jKDEsIHNpemVvZigqaXQpKTsKKwkJaXQtPmtleSA9IHhtZW1kdXB6KGxpbmUsIGVvZi1saW5lKTsKKwkJKnRhaWwgPSBpdDsKKwkJdGFpbCA9ICZpdC0+bmV4dDsKKwkJaWYgKGVvZiArIDEgPCBuZXh0KQorCQkJc3RyYnVmX2FkZCgmYnVmLCBlb2YgKyAxLCBuZXh0IC0gKGVvZiArIDEpKTsKKwl9CisJaWYgKGl0KQorCQlpdC0+dmFsdWUgPSBzdHJidWZfZGV0YWNoKCZidWYsICZpdC0+bGVuKTsKKwlyZXR1cm4gZXh0cmE7Cit9CisKK3ZvaWQgZnJlZV9jb21taXRfZXh0cmFfaGVhZGVycyhzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEpCit7CisJd2hpbGUgKGV4dHJhKSB7CisJCXN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpuZXh0ID0gZXh0cmEtPm5leHQ7CisJCWZyZWUoZXh0cmEtPmtleSk7CisJCWZyZWUoZXh0cmEtPnZhbHVlKTsKKwkJZnJlZShleHRyYSk7CisJCWV4dHJhID0gbmV4dDsKKwl9Cit9CisKK2ludCBjb21taXRfdHJlZShjb25zdCBjaGFyICptc2csIHNpemVfdCBtc2dfbGVuLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlLAorCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsIHN0cnVjdCBvYmplY3RfaWQgKnJldCwKKwkJY29uc3QgY2hhciAqYXV0aG9yLCBjb25zdCBjaGFyICpzaWduX2NvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEgPSBOVUxMLCAqKnRhaWwgPSAmZXh0cmE7CisJaW50IHJlc3VsdDsKKworCWFwcGVuZF9tZXJnZV90YWdfaGVhZGVycyhwYXJlbnRzLCAmdGFpbCk7CisJcmVzdWx0ID0gY29tbWl0X3RyZWVfZXh0ZW5kZWQobXNnLCBtc2dfbGVuLCB0cmVlLCBwYXJlbnRzLCByZXQsCisJCQkJICAgICAgYXV0aG9yLCBzaWduX2NvbW1pdCwgZXh0cmEpOworCWZyZWVfY29tbWl0X2V4dHJhX2hlYWRlcnMoZXh0cmEpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9pbnZhbGlkX3V0ZjgoY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBvZmZzZXQgPSAwOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWF4X2NvZGVwb2ludFtdID0geworCQkweDdmLCAweDdmZiwgMHhmZmZmLCAweDEwZmZmZgorCX07CisKKwl3aGlsZSAobGVuKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9ICpidWYrKzsKKwkJaW50IGJ5dGVzLCBiYWRfb2Zmc2V0OworCQl1bnNpZ25lZCBpbnQgY29kZXBvaW50OworCQl1bnNpZ25lZCBpbnQgbWluX3ZhbCwgbWF4X3ZhbDsKKworCQlsZW4tLTsKKwkJb2Zmc2V0Kys7CisKKwkJLyogU2ltcGxlIFVTLUFTQ0lJPyBObyB3b3JyaWVzLiAqLworCQlpZiAoYyA8IDB4ODApCisJCQljb250aW51ZTsKKworCQliYWRfb2Zmc2V0ID0gb2Zmc2V0LTE7CisKKwkJLyoKKwkJICogQ291bnQgaG93IG1hbnkgbW9yZSBoaWdoIGJpdHMgc2V0OiB0aGF0J3MgaG93CisJCSAqIG1hbnkgbW9yZSBieXRlcyB0aGlzIHNlcXVlbmNlIHNob3VsZCBoYXZlLgorCQkgKi8KKwkJYnl0ZXMgPSAwOworCQl3aGlsZSAoYyAmIDB4NDApIHsKKwkJCWMgPDw9IDE7CisJCQlieXRlcysrOworCQl9CisKKwkJLyoKKwkJICogTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDMgbW9yZSBieXRlcy4gIExvbmdlciBzZXF1ZW5jZXMgcmVzdWx0IGluCisJCSAqIGNvZGVwb2ludHMgYmV5b25kIFUrMTBGRkZGLCB3aGljaCBhcmUgZ3VhcmFudGVlZCBuZXZlciB0byBleGlzdC4KKwkJICovCisJCWlmIChieXRlcyA8IDEgfHwgMyA8IGJ5dGVzKQorCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CisKKwkJLyogRG8gd2UgKmhhdmUqIHRoYXQgbWFueSBieXRlcz8gKi8KKwkJaWYgKGxlbiA8IGJ5dGVzKQorCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CisKKwkJLyoKKwkJICogUGxhY2UgdGhlIGVuY29kZWQgYml0cyBhdCB0aGUgYm90dG9tIG9mIHRoZSB2YWx1ZSBhbmQgY29tcHV0ZSB0aGUKKwkJICogdmFsaWQgcmFuZ2UuCisJCSAqLworCQljb2RlcG9pbnQgPSAoYyAmIDB4N2YpID4+IGJ5dGVzOworCQltaW5fdmFsID0gbWF4X2NvZGVwb2ludFtieXRlcy0xXSArIDE7CisJCW1heF92YWwgPSBtYXhfY29kZXBvaW50W2J5dGVzXTsKKworCQlvZmZzZXQgKz0gYnl0ZXM7CisJCWxlbiAtPSBieXRlczsKKworCQkvKiBBbmQgdmVyaWZ5IHRoYXQgdGhleSBhcmUgZ29vZCBjb250aW51YXRpb24gYnl0ZXMgKi8KKwkJZG8geworCQkJY29kZXBvaW50IDw8PSA2OworCQkJY29kZXBvaW50IHw9ICpidWYgJiAweDNmOworCQkJaWYgKCgqYnVmKysgJiAweGMwKSAhPSAweDgwKQorCQkJCXJldHVybiBiYWRfb2Zmc2V0OworCQl9IHdoaWxlICgtLWJ5dGVzKTsKKworCQkvKiBSZWplY3QgY29kZXBvaW50cyB0aGF0IGFyZSBvdXQgb2YgcmFuZ2UgZm9yIHRoZSBzZXF1ZW5jZSBsZW5ndGguICovCisJCWlmIChjb2RlcG9pbnQgPCBtaW5fdmFsIHx8IGNvZGVwb2ludCA+IG1heF92YWwpCisJCQlyZXR1cm4gYmFkX29mZnNldDsKKwkJLyogU3Vycm9nYXRlcyBhcmUgb25seSBmb3IgVVRGLTE2IGFuZCBjYW5ub3QgYmUgZW5jb2RlZCBpbiBVVEYtOC4gKi8KKwkJaWYgKChjb2RlcG9pbnQgJiAweDFmZjgwMCkgPT0gMHhkODAwKQorCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CisJCS8qIFUreHhGRkZFIGFuZCBVK3h4RkZGRiBhcmUgZ3VhcmFudGVlZCBub24tY2hhcmFjdGVycy4gKi8KKwkJaWYgKChjb2RlcG9pbnQgJiAweGZmZmUpID09IDB4ZmZmZSkKKwkJCXJldHVybiBiYWRfb2Zmc2V0OworCQkvKiBTbyBhcmUgYW55dGhpbmcgaW4gdGhlIHJhbmdlIFUrRkREMC4uVStGREVGLiAqLworCQlpZiAoY29kZXBvaW50ID49IDB4ZmRkMCAmJiBjb2RlcG9pbnQgPD0gMHhmZGVmKQorCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CisJfQorCXJldHVybiAtMTsKK30KKworLyoKKyAqIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGUgYnVmZmVyIGlzIGluIHByb3BlciB1dGY4IGZvcm1hdC4KKyAqCisgKiBJZiBpdCBpc24ndCwgaXQgYXNzdW1lcyBhbnkgbm9uLXV0ZjggY2hhcmFjdGVycyBhcmUgTGF0aW4xLAorICogYW5kIGRvZXMgdGhlIGNvbnZlcnNpb24uCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X3V0Zjgoc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWludCBvayA9IDE7CisJbG9uZyBwb3MgPSAwOworCisJZm9yICg7OykgeworCQlpbnQgYmFkOworCQl1bnNpZ25lZCBjaGFyIGM7CisJCXVuc2lnbmVkIGNoYXIgcmVwbGFjZVsyXTsKKworCQliYWQgPSBmaW5kX2ludmFsaWRfdXRmOChidWYtPmJ1ZiArIHBvcywgYnVmLT5sZW4gLSBwb3MpOworCQlpZiAoYmFkIDwgMCkKKwkJCXJldHVybiBvazsKKwkJcG9zICs9IGJhZDsKKwkJb2sgPSAwOworCQljID0gYnVmLT5idWZbcG9zXTsKKwkJc3RyYnVmX3JlbW92ZShidWYsIHBvcywgMSk7CisKKwkJLyogV2Uga25vdyAnYycgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMTI4LTI1NSAqLworCQlyZXBsYWNlWzBdID0gMHhjMCArIChjID4+IDYpOworCQlyZXBsYWNlWzFdID0gMHg4MCArIChjICYgMHgzZik7CisJCXN0cmJ1Zl9pbnNlcnQoYnVmLCBwb3MsIHJlcGxhY2UsIDIpOworCQlwb3MgKz0gMjsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGNvbW1pdF91dGY4X3dhcm5bXSA9CitOXygiV2FybmluZzogY29tbWl0IG1lc3NhZ2UgZGlkIG5vdCBjb25mb3JtIHRvIFVURi04LlxuIgorICAgIllvdSBtYXkgd2FudCB0byBhbWVuZCBpdCBhZnRlciBmaXhpbmcgdGhlIG1lc3NhZ2UsIG9yIHNldCB0aGUgY29uZmlnXG4iCisgICAidmFyaWFibGUgaTE4bi5jb21taXRlbmNvZGluZyB0byB0aGUgZW5jb2RpbmcgeW91ciBwcm9qZWN0IHVzZXMuXG4iKTsKKworaW50IGNvbW1pdF90cmVlX2V4dGVuZGVkKGNvbnN0IGNoYXIgKm1zZywgc2l6ZV90IG1zZ19sZW4sCisJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdHJlZSwKKwkJCSBzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsIHN0cnVjdCBvYmplY3RfaWQgKnJldCwKKwkJCSBjb25zdCBjaGFyICphdXRob3IsIGNvbnN0IGNoYXIgKnNpZ25fY29tbWl0LAorCQkJIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpleHRyYSkKK3sKKwlpbnQgcmVzdWx0OworCWludCBlbmNvZGluZ19pc191dGY4OworCXN0cnVjdCBzdHJidWYgYnVmZmVyOworCisJYXNzZXJ0X29pZF90eXBlKHRyZWUsIE9CSl9UUkVFKTsKKworCWlmIChtZW1jaHIobXNnLCAnXDAnLCBtc2dfbGVuKSkKKwkJcmV0dXJuIGVycm9yKCJhIE5VTCBieXRlIGluIGNvbW1pdCBsb2cgbWVzc2FnZSBub3QgYWxsb3dlZC4iKTsKKworCS8qIE5vdCBoYXZpbmcgaTE4bi5jb21taXRlbmNvZGluZyBpcyB0aGUgc2FtZSBhcyBoYXZpbmcgdXRmLTggKi8KKwllbmNvZGluZ19pc191dGY4ID0gaXNfZW5jb2RpbmdfdXRmOChnaXRfY29tbWl0X2VuY29kaW5nKTsKKworCXN0cmJ1Zl9pbml0KCZidWZmZXIsIDgxOTIpOyAvKiBzaG91bGQgYXZvaWQgcmVhbGxvY3MgZm9yIHRoZSBoZWFkZXJzICovCisJc3RyYnVmX2FkZGYoJmJ1ZmZlciwgInRyZWUgJXNcbiIsIG9pZF90b19oZXgodHJlZSkpOworCisJLyoKKwkgKiBOT1RFISBUaGlzIG9yZGVyaW5nIG1lYW5zIHRoYXQgdGhlIHNhbWUgZXhhY3QgdHJlZSBtZXJnZWQgd2l0aCBhCisJICogZGlmZmVyZW50IG9yZGVyIG9mIHBhcmVudHMgd2lsbCBiZSBhIF9kaWZmZXJlbnRfIGNoYW5nZXNldCBldmVuCisJICogaWYgZXZlcnl0aGluZyBlbHNlIHN0YXlzIHRoZSBzYW1lLgorCSAqLworCXdoaWxlIChwYXJlbnRzKSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHBvcF9jb21taXQoJnBhcmVudHMpOworCQlzdHJidWZfYWRkZigmYnVmZmVyLCAicGFyZW50ICVzXG4iLAorCQkJICAgIG9pZF90b19oZXgoJnBhcmVudC0+b2JqZWN0Lm9pZCkpOworCX0KKworCS8qIFBlcnNvbi9kYXRlIGluZm9ybWF0aW9uICovCisJaWYgKCFhdXRob3IpCisJCWF1dGhvciA9IGdpdF9hdXRob3JfaW5mbyhJREVOVF9TVFJJQ1QpOworCXN0cmJ1Zl9hZGRmKCZidWZmZXIsICJhdXRob3IgJXNcbiIsIGF1dGhvcik7CisJc3RyYnVmX2FkZGYoJmJ1ZmZlciwgImNvbW1pdHRlciAlc1xuIiwgZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX1NUUklDVCkpOworCWlmICghZW5jb2RpbmdfaXNfdXRmOCkKKwkJc3RyYnVmX2FkZGYoJmJ1ZmZlciwgImVuY29kaW5nICVzXG4iLCBnaXRfY29tbWl0X2VuY29kaW5nKTsKKworCXdoaWxlIChleHRyYSkgeworCQlhZGRfZXh0cmFfaGVhZGVyKCZidWZmZXIsIGV4dHJhKTsKKwkJZXh0cmEgPSBleHRyYS0+bmV4dDsKKwl9CisJc3RyYnVmX2FkZGNoKCZidWZmZXIsICdcbicpOworCisJLyogQW5kIGFkZCB0aGUgY29tbWVudCAqLworCXN0cmJ1Zl9hZGQoJmJ1ZmZlciwgbXNnLCBtc2dfbGVuKTsKKworCS8qIEFuZCBjaGVjayB0aGUgZW5jb2RpbmcgKi8KKwlpZiAoZW5jb2RpbmdfaXNfdXRmOCAmJiAhdmVyaWZ5X3V0ZjgoJmJ1ZmZlcikpCisJCWZwcmludGYoc3RkZXJyLCBfKGNvbW1pdF91dGY4X3dhcm4pKTsKKworCWlmIChzaWduX2NvbW1pdCAmJiBkb19zaWduX2NvbW1pdCgmYnVmZmVyLCBzaWduX2NvbW1pdCkpIHsKKwkJcmVzdWx0ID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCXJlc3VsdCA9IHdyaXRlX29iamVjdF9maWxlKGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4sIGNvbW1pdF90eXBlLCByZXQpOworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2RlZmluZV9jb21taXRfc2xhYihtZXJnZV9kZXNjX3NsYWIsIHN0cnVjdCBtZXJnZV9yZW1vdGVfZGVzYyAqKTsKK3N0YXRpYyBzdHJ1Y3QgbWVyZ2VfZGVzY19zbGFiIG1lcmdlX2Rlc2Nfc2xhYiA9IENPTU1JVF9TTEFCX0lOSVQoMSwgbWVyZ2VfZGVzY19zbGFiKTsKKworc3RydWN0IG1lcmdlX3JlbW90ZV9kZXNjICptZXJnZV9yZW1vdGVfdXRpbChzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJcmV0dXJuICptZXJnZV9kZXNjX3NsYWJfYXQoJm1lcmdlX2Rlc2Nfc2xhYiwgY29tbWl0KTsKK30KKwordm9pZCBzZXRfbWVyZ2VfcmVtb3RlX2Rlc2Moc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdCAqb2JqKQoreworCXN0cnVjdCBtZXJnZV9yZW1vdGVfZGVzYyAqZGVzYzsKKwlGTEVYX0FMTE9DX1NUUihkZXNjLCBuYW1lLCBuYW1lKTsKKwlkZXNjLT5vYmogPSBvYmo7CisJKm1lcmdlX2Rlc2Nfc2xhYl9hdCgmbWVyZ2VfZGVzY19zbGFiLCBjb21taXQpID0gZGVzYzsKK30KKworc3RydWN0IGNvbW1pdCAqZ2V0X21lcmdlX3BhcmVudChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvYmplY3QgKm9iajsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaWYgKGdldF9vaWQobmFtZSwgJm9pZCkpCisJCXJldHVybiBOVUxMOworCW9iaiA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilwZWVsX3RvX3R5cGUobmFtZSwgMCwgb2JqLCBPQkpfQ09NTUlUKTsKKwlpZiAoY29tbWl0ICYmICFtZXJnZV9yZW1vdGVfdXRpbChjb21taXQpKQorCQlzZXRfbWVyZ2VfcmVtb3RlX2Rlc2MoY29tbWl0LCBuYW1lLCBvYmopOworCXJldHVybiBjb21taXQ7Cit9CisKKy8qCisgKiBBcHBlbmQgYSBjb21taXQgdG8gdGhlIGVuZCBvZiB0aGUgY29tbWl0X2xpc3QuCisgKgorICogbmV4dCBzdGFydHMgYnkgcG9pbnRpbmcgdG8gdGhlIHZhcmlhYmxlIHRoYXQgaG9sZHMgdGhlIGhlYWQgb2YgYW4KKyAqIGVtcHR5IGNvbW1pdF9saXN0LCBhbmQgaXMgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgIm5leHQiIGZpZWxkIG9mCisgKiB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaXN0IGFzIG5ldyBjb21taXRzIGFyZSBhcHBlbmRlZC4KKyAqCisgKiBVc2FnZSBleGFtcGxlOgorICoKKyAqICAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3Q7CisgKiAgICAgc3RydWN0IGNvbW1pdF9saXN0ICoqbmV4dCA9ICZsaXN0OworICoKKyAqICAgICBuZXh0ID0gY29tbWl0X2xpc3RfYXBwZW5kKGMxLCBuZXh0KTsKKyAqICAgICBuZXh0ID0gY29tbWl0X2xpc3RfYXBwZW5kKGMyLCBuZXh0KTsKKyAqICAgICBhc3NlcnQoY29tbWl0X2xpc3RfY291bnQobGlzdCkgPT0gMik7CisgKiAgICAgcmV0dXJuIGxpc3Q7CisgKi8KK3N0cnVjdCBjb21taXRfbGlzdCAqKmNvbW1pdF9saXN0X2FwcGVuZChzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJCXN0cnVjdCBjb21taXRfbGlzdCAqKm5leHQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpuZXdfY29tbWl0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNvbW1pdF9saXN0KSk7CisJbmV3X2NvbW1pdC0+aXRlbSA9IGNvbW1pdDsKKwkqbmV4dCA9IG5ld19jb21taXQ7CisJbmV3X2NvbW1pdC0+bmV4dCA9IE5VTEw7CisJcmV0dXJuICZuZXdfY29tbWl0LT5uZXh0OworfQorCitjb25zdCBjaGFyICpmaW5kX2NvbW1pdF9oZWFkZXIoY29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFyICprZXksIHNpemVfdCAqb3V0X2xlbikKK3sKKwlpbnQga2V5X2xlbiA9IHN0cmxlbihrZXkpOworCWNvbnN0IGNoYXIgKmxpbmUgPSBtc2c7CisKKwl3aGlsZSAobGluZSkgeworCQljb25zdCBjaGFyICplb2wgPSBzdHJjaHJudWwobGluZSwgJ1xuJyk7CisKKwkJaWYgKGxpbmUgPT0gZW9sKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaWYgKGVvbCAtIGxpbmUgPiBrZXlfbGVuICYmCisJCSAgICAhc3RybmNtcChsaW5lLCBrZXksIGtleV9sZW4pICYmCisJCSAgICBsaW5lW2tleV9sZW5dID09ICcgJykgeworCQkJKm91dF9sZW4gPSBlb2wgLSBsaW5lIC0ga2V5X2xlbiAtIDE7CisJCQlyZXR1cm4gbGluZSArIGtleV9sZW4gKyAxOworCQl9CisJCWxpbmUgPSAqZW9sID8gZW9sICsgMSA6IE5VTEw7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogSW5zcGVjdCB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCBkZXRlcm1pbmUgdGhlIHRydWUgImVuZCIgb2YgdGhlIGxvZyBtZXNzYWdlLCBpbgorICogb3JkZXIgdG8gZmluZCB3aGVyZSB0byBwdXQgYSBuZXcgU2lnbmVkLW9mZi1ieTogbGluZS4gIElnbm9yZWQgYXJlCisgKiB0cmFpbGluZyBjb21tZW50IGxpbmVzIGFuZCBibGFuayBsaW5lcy4gIFRvIHN1cHBvcnQgImdpdCBjb21taXQgLXMKKyAqIC0tYW1lbmQiIG9uIGFuIGV4aXN0aW5nIGNvbW1pdCwgd2UgYWxzbyBpZ25vcmUgIkNvbmZsaWN0czoiLiAgVG8KKyAqIHN1cHBvcnQgImdpdCBjb21taXQgLXYiLCB3ZSB0cnVuY2F0ZSBhdCBjdXQgbGluZXMuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHRhaWwgdG8gaWdub3JlLCB0byBiZSBmZWQgYXMKKyAqIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIGFwcGVuZF9zaWdub2ZmKCkuCisgKi8KK3NpemVfdCBpZ25vcmVfbm9uX3RyYWlsZXIoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXNpemVfdCBib2MgPSAwOworCXNpemVfdCBib2wgPSAwOworCWludCBpbl9vbGRfY29uZmxpY3RzX2Jsb2NrID0gMDsKKwlzaXplX3QgY3V0b2ZmID0gd3Rfc3RhdHVzX2xvY2F0ZV9lbmQoYnVmLCBsZW4pOworCisJd2hpbGUgKGJvbCA8IGN1dG9mZikgeworCQljb25zdCBjaGFyICpuZXh0X2xpbmUgPSBtZW1jaHIoYnVmICsgYm9sLCAnXG4nLCBsZW4gLSBib2wpOworCisJCWlmICghbmV4dF9saW5lKQorCQkJbmV4dF9saW5lID0gYnVmICsgbGVuOworCQllbHNlCisJCQluZXh0X2xpbmUrKzsKKworCQlpZiAoYnVmW2JvbF0gPT0gY29tbWVudF9saW5lX2NoYXIgfHwgYnVmW2JvbF0gPT0gJ1xuJykgeworCQkJLyogaXMgdGhpcyB0aGUgZmlyc3Qgb2YgdGhlIHJ1biBvZiBjb21tZW50cz8gKi8KKwkJCWlmICghYm9jKQorCQkJCWJvYyA9IGJvbDsKKwkJCS8qIG90aGVyd2lzZSwgaXQgaXMganVzdCBjb250aW51aW5nICovCisJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoYnVmICsgYm9sLCAiQ29uZmxpY3RzOlxuIikpIHsKKwkJCWluX29sZF9jb25mbGljdHNfYmxvY2sgPSAxOworCQkJaWYgKCFib2MpCisJCQkJYm9jID0gYm9sOworCQl9IGVsc2UgaWYgKGluX29sZF9jb25mbGljdHNfYmxvY2sgJiYgYnVmW2JvbF0gPT0gJ1x0JykgeworCQkJOyAvKiBhIHBhdGhuYW1lIGluIHRoZSBjb25mbGljdHMgYmxvY2sgKi8KKwkJfSBlbHNlIGlmIChib2MpIHsKKwkJCS8qIHRoZSBwcmV2aW91cyB3YXMgbm90IHRyYWlsaW5nIGNvbW1lbnQgKi8KKwkJCWJvYyA9IDA7CisJCQlpbl9vbGRfY29uZmxpY3RzX2Jsb2NrID0gMDsKKwkJfQorCQlib2wgPSBuZXh0X2xpbmUgLSBidWY7CisJfQorCXJldHVybiBib2MgPyBsZW4gLSBib2MgOiBsZW4gLSBjdXRvZmY7Cit9CisKK2ludCBydW5fY29tbWl0X2hvb2soaW50IGVkaXRvcl9pc191c2VkLCBjb25zdCBjaGFyICppbmRleF9maWxlLAorCQkgICAgY29uc3QgY2hhciAqbmFtZSwgLi4uKQoreworCXN0cnVjdCBhcmd2X2FycmF5IGhvb2tfZW52ID0gQVJHVl9BUlJBWV9JTklUOworCXZhX2xpc3QgYXJnczsKKwlpbnQgcmV0OworCisJYXJndl9hcnJheV9wdXNoZigmaG9va19lbnYsICJHSVRfSU5ERVhfRklMRT0lcyIsIGluZGV4X2ZpbGUpOworCisJLyoKKwkgKiBMZXQgdGhlIGhvb2sga25vdyB0aGF0IG5vIGVkaXRvciB3aWxsIGJlIGxhdW5jaGVkLgorCSAqLworCWlmICghZWRpdG9yX2lzX3VzZWQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmaG9va19lbnYsICJHSVRfRURJVE9SPToiKTsKKworCXZhX3N0YXJ0KGFyZ3MsIG5hbWUpOworCXJldCA9IHJ1bl9ob29rX3ZlKGhvb2tfZW52LmFyZ3YsbmFtZSwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmhvb2tfZW52KTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9jb21taXQuaCBiL2NvbW1pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmRlYTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb21taXQuaApAQCAtMCwwICsxLDM2MSBAQAorI2lmbmRlZiBDT01NSVRfSAorI2RlZmluZSBDT01NSVRfSAorCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgImRlY29yYXRlLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicHJldHR5LmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKworI2RlZmluZSBDT01NSVRfTk9UX0ZST01fR1JBUEggMHhGRkZGRkZGRgorI2RlZmluZSBHRU5FUkFUSU9OX05VTUJFUl9JTkZJTklUWSAweEZGRkZGRkZGCisjZGVmaW5lIEdFTkVSQVRJT05fTlVNQkVSX01BWCAweDNGRkZGRkZGCisjZGVmaW5lIEdFTkVSQVRJT05fTlVNQkVSX1pFUk8gMAorCitzdHJ1Y3QgY29tbWl0X2xpc3QgeworCXN0cnVjdCBjb21taXQgKml0ZW07CisJc3RydWN0IGNvbW1pdF9saXN0ICpuZXh0OworfTsKKworLyoKKyAqIFRoZSBzaXplIG9mIHRoaXMgc3RydWN0IG1hdHRlcnMgaW4gZnVsbCByZXBvIHdhbGsgb3BlcmF0aW9ucyBsaWtlCisgKiAnZ2l0IGNsb25lJyBvciAnZ2l0IGdjJy4gQ29uc2lkZXIgdXNpbmcgY29tbWl0LXNsYWIgdG8gYXR0YWNoIGRhdGEKKyAqIHRvIGEgY29tbWl0IGluc3RlYWQgb2YgYWRkaW5nIG5ldyBmaWVsZHMgaGVyZS4KKyAqLworc3RydWN0IGNvbW1pdCB7CisJc3RydWN0IG9iamVjdCBvYmplY3Q7CisJdGltZXN0YW1wX3QgZGF0ZTsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisKKwkvKgorCSAqIElmIHRoZSBjb21taXQgaXMgbG9hZGVkIGZyb20gdGhlIGNvbW1pdC1ncmFwaCBmaWxlLCB0aGVuIHRoaXMKKwkgKiBtZW1iZXIgbWF5IGJlIE5VTEwuIE9ubHkgYWNjZXNzIGl0IHRocm91Z2ggcmVwb19nZXRfY29tbWl0X3RyZWUoKQorCSAqIG9yIGdldF9jb21taXRfdHJlZV9vaWQoKS4KKwkgKi8KKwlzdHJ1Y3QgdHJlZSAqbWF5YmVfdHJlZTsKKwl1aW50MzJfdCBncmFwaF9wb3M7CisJdWludDMyX3QgZ2VuZXJhdGlvbjsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7Cit9OworCitleHRlcm4gaW50IHNhdmVfY29tbWl0X2J1ZmZlcjsKK2V4dGVybiBjb25zdCBjaGFyICpjb21taXRfdHlwZTsKKworLyogV2hpbGUgd2UgY2FuIGRlY29yYXRlIGFueSBvYmplY3Qgd2l0aCBhIG5hbWUsIGl0J3Mgb25seSB1c2VkIGZvciBjb21taXRzLi4gKi8KK3N0cnVjdCBuYW1lX2RlY29yYXRpb24geworCXN0cnVjdCBuYW1lX2RlY29yYXRpb24gKm5leHQ7CisJaW50IHR5cGU7CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfTsKKworZW51bSBkZWNvcmF0aW9uX3R5cGUgeworCURFQ09SQVRJT05fTk9ORSA9IDAsCisJREVDT1JBVElPTl9SRUZfTE9DQUwsCisJREVDT1JBVElPTl9SRUZfUkVNT1RFLAorCURFQ09SQVRJT05fUkVGX1RBRywKKwlERUNPUkFUSU9OX1JFRl9TVEFTSCwKKwlERUNPUkFUSU9OX1JFRl9IRUFELAorCURFQ09SQVRJT05fR1JBRlRFRCwKK307CisKK3ZvaWQgYWRkX25hbWVfZGVjb3JhdGlvbihlbnVtIGRlY29yYXRpb25fdHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopOworY29uc3Qgc3RydWN0IG5hbWVfZGVjb3JhdGlvbiAqZ2V0X25hbWVfZGVjb3JhdGlvbihjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmopOworCitzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CitzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkJICAgICAgaW50IHF1aWV0KTsKK3N0cnVjdCBjb21taXQgKmxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qCisgKiBMb29rIHVwIG9iamVjdCBuYW1lZCBieSAib2lkIiwgZGVyZWZlcmVuY2UgdGFnIGFzIG5lY2Vzc2FyeSwKKyAqIGdldCBhIGNvbW1pdCBhbmQgcmV0dXJuIGl0LiBJZiAib2lkIiBkb2VzIG5vdCBkZXJlZmVyZW5jZSB0bworICogYSBjb21taXQsIHVzZSByZWZfbmFtZSB0byByZXBvcnQgYW4gZXJyb3IgYW5kIGRpZS4KKyAqLworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9vcl9kaWUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpyZWZfbmFtZSk7CisKK2ludCBwYXJzZV9jb21taXRfYnVmZmVyKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgY29tbWl0ICppdGVtLCBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IGNoZWNrX2dyYXBoKTsKK2ludCByZXBvX3BhcnNlX2NvbW1pdF9pbnRlcm5hbChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGNvbW1pdCAqaXRlbSwKKwkJCSAgICAgICBpbnQgcXVpZXRfb25fbWlzc2luZywgaW50IHVzZV9jb21taXRfZ3JhcGgpOworaW50IHJlcG9fcGFyc2VfY29tbWl0X2dlbnRseShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgc3RydWN0IGNvbW1pdCAqaXRlbSwKKwkJCSAgICAgaW50IHF1aWV0X29uX21pc3NpbmcpOworc3RhdGljIGlubGluZSBpbnQgcmVwb19wYXJzZV9jb21taXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXQgKml0ZW0pCit7CisJcmV0dXJuIHJlcG9fcGFyc2VfY29tbWl0X2dlbnRseShyLCBpdGVtLCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGFyc2VfY29tbWl0X25vX2dyYXBoKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlyZXR1cm4gcmVwb19wYXJzZV9jb21taXRfaW50ZXJuYWwodGhlX3JlcG9zaXRvcnksIGNvbW1pdCwgMCwgMCk7Cit9CisKKyNpZm5kZWYgTk9fVEhFX1JFUE9TSVRPUllfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNkZWZpbmUgcGFyc2VfY29tbWl0X2ludGVybmFsKGl0ZW0sIHF1aWV0LCB1c2UpIHJlcG9fcGFyc2VfY29tbWl0X2ludGVybmFsKHRoZV9yZXBvc2l0b3J5LCBpdGVtLCBxdWlldCwgdXNlKQorI2RlZmluZSBwYXJzZV9jb21taXRfZ2VudGx5KGl0ZW0sIHF1aWV0KSByZXBvX3BhcnNlX2NvbW1pdF9nZW50bHkodGhlX3JlcG9zaXRvcnksIGl0ZW0sIHF1aWV0KQorI2RlZmluZSBwYXJzZV9jb21taXQoaXRlbSkgcmVwb19wYXJzZV9jb21taXQodGhlX3JlcG9zaXRvcnksIGl0ZW0pCisjZW5kaWYKKwordm9pZCBwYXJzZV9jb21taXRfb3JfZGllKHN0cnVjdCBjb21taXQgKml0ZW0pOworCitzdHJ1Y3QgYnVmZmVyX3NsYWI7CitzdHJ1Y3QgYnVmZmVyX3NsYWIgKmFsbG9jYXRlX2NvbW1pdF9idWZmZXJfc2xhYih2b2lkKTsKK3ZvaWQgZnJlZV9jb21taXRfYnVmZmVyX3NsYWIoc3RydWN0IGJ1ZmZlcl9zbGFiICpicyk7CisKKy8qCisgKiBBc3NvY2lhdGUgYW4gb2JqZWN0IGJ1ZmZlciB3aXRoIHRoZSBjb21taXQuIFRoZSBvd25lcnNoaXAgb2YgdGhlCisgKiBtZW1vcnkgaXMgaGFuZGVkIG92ZXIgdG8gdGhlIGNvbW1pdCwgYW5kIG11c3QgYmUgZnJlZSgpLWFibGUuCisgKi8KK3ZvaWQgc2V0X2NvbW1pdF9idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXQgKiwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCisvKgorICogR2V0IGFueSBjYWNoZWQgb2JqZWN0IGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1pdC4gUmV0dXJucyBOVUxMCisgKiBpZiBub25lLiBUaGUgcmVzdWx0aW5nIG1lbW9yeSBzaG91bGQgbm90IGJlIGZyZWVkLgorICovCitjb25zdCB2b2lkICpnZXRfY2FjaGVkX2NvbW1pdF9idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKiwgY29uc3Qgc3RydWN0IGNvbW1pdCAqLCB1bnNpZ25lZCBsb25nICpzaXplKTsKKworLyoKKyAqIEdldCB0aGUgY29tbWl0J3Mgb2JqZWN0IGNvbnRlbnRzLCBlaXRoZXIgZnJvbSBjYWNoZSBvciBieSByZWFkaW5nIHRoZSBvYmplY3QKKyAqIGZyb20gZGlzay4gVGhlIHJlc3VsdGluZyBtZW1vcnkgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgYW5kIG11c3QgYmUgZ2l2ZW4KKyAqIHRvIHVudXNlX2NvbW1pdF9idWZmZXIgd2hlbiB0aGUgY2FsbGVyIGlzIGRvbmUuCisgKi8KK2NvbnN0IHZvaWQgKnJlcG9fZ2V0X2NvbW1pdF9idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgY29uc3Qgc3RydWN0IGNvbW1pdCAqLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgKnNpemUpOworI2lmbmRlZiBOT19USEVfUkVQT1NJVE9SWV9DT01QQVRJQklMSVRZX01BQ1JPUworI2RlZmluZSBnZXRfY29tbWl0X2J1ZmZlcihjLCBzKSByZXBvX2dldF9jb21taXRfYnVmZmVyKHRoZV9yZXBvc2l0b3J5LCBjLCBzKQorI2VuZGlmCisKKy8qCisgKiBUZWxsIHRoZSBjb21taXQgc3Vic3lzdGVtIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCBhIHBhcnRpY3VsYXIgY29tbWl0IGJ1ZmZlci4KKyAqIFRoZSBjb21taXQgYW5kIGJ1ZmZlciBzaG91bGQgYmUgdGhlIGlucHV0IGFuZCByZXR1cm4gdmFsdWUsIHJlc3BlY3RpdmVseSwKKyAqIGZyb20gYW4gZWFybGllciBjYWxsIHRvIGdldF9jb21taXRfYnVmZmVyLiAgVGhlIGJ1ZmZlciBtYXkgb3IgbWF5IG5vdCBiZQorICogZnJlZWQgYnkgdGhpcyBjYWxsOyBjYWxsZXJzIHNob3VsZCBub3QgYWNjZXNzIHRoZSBtZW1vcnkgYWZ0ZXJ3YXJkcy4KKyAqLwordm9pZCByZXBvX3VudXNlX2NvbW1pdF9idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0ICosCisJCQkgICAgICBjb25zdCB2b2lkICpidWZmZXIpOworI2lmbmRlZiBOT19USEVfUkVQT1NJVE9SWV9DT01QQVRJQklMSVRZX01BQ1JPUworI2RlZmluZSB1bnVzZV9jb21taXRfYnVmZmVyKGMsIGIpIHJlcG9fdW51c2VfY29tbWl0X2J1ZmZlcih0aGVfcmVwb3NpdG9yeSwgYywgYikKKyNlbmRpZgorCisvKgorICogRnJlZSBhbnkgY2FjaGVkIG9iamVjdCBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21taXQuCisgKi8KK3ZvaWQgZnJlZV9jb21taXRfYnVmZmVyKHN0cnVjdCBwYXJzZWRfb2JqZWN0X3Bvb2wgKnBvb2wsIHN0cnVjdCBjb21taXQgKik7CisKK3N0cnVjdCB0cmVlICpyZXBvX2dldF9jb21taXRfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICopOworI2RlZmluZSBnZXRfY29tbWl0X3RyZWUoYykgcmVwb19nZXRfY29tbWl0X3RyZWUodGhlX3JlcG9zaXRvcnksIGMpCitzdHJ1Y3Qgb2JqZWN0X2lkICpnZXRfY29tbWl0X3RyZWVfb2lkKGNvbnN0IHN0cnVjdCBjb21taXQgKik7CisKKy8qCisgKiBSZWxlYXNlIG1lbW9yeSByZWxhdGVkIHRvIGEgY29tbWl0LCBpbmNsdWRpbmcgdGhlIHBhcmVudCBsaXN0IGFuZAorICogYW55IGNhY2hlZCBvYmplY3QgYnVmZmVyLgorICovCit2b2lkIHJlbGVhc2VfY29tbWl0X21lbW9yeShzdHJ1Y3QgcGFyc2VkX29iamVjdF9wb29sICpwb29sLCBzdHJ1Y3QgY29tbWl0ICpjKTsKKworLyoKKyAqIERpc2Fzc29jaWF0ZSBhbnkgY2FjaGVkIG9iamVjdCBidWZmZXIgZnJvbSB0aGUgY29tbWl0LCBidXQgZG8gbm90IGZyZWUgaXQuCisgKiBUaGUgYnVmZmVyIChvciBOVUxMLCBpZiBub25lKSBpcyByZXR1cm5lZC4KKyAqLworY29uc3Qgdm9pZCAqZGV0YWNoX2NvbW1pdF9idWZmZXIoc3RydWN0IGNvbW1pdCAqLCB1bnNpZ25lZCBsb25nICpzaXplcCk7CisKKy8qIEZpbmQgYmVnaW5uaW5nIGFuZCBsZW5ndGggb2YgY29tbWl0IHN1YmplY3QuICovCitpbnQgZmluZF9jb21taXRfc3ViamVjdChjb25zdCBjaGFyICpjb21taXRfYnVmZmVyLCBjb25zdCBjaGFyICoqc3ViamVjdCk7CisKK3N0cnVjdCBjb21taXRfbGlzdCAqY29tbWl0X2xpc3RfaW5zZXJ0KHN0cnVjdCBjb21taXQgKml0ZW0sCisJCQkJCXN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpOworc3RydWN0IGNvbW1pdF9saXN0ICoqY29tbWl0X2xpc3RfYXBwZW5kKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkJc3RydWN0IGNvbW1pdF9saXN0ICoqbmV4dCk7Cit1bnNpZ25lZCBjb21taXRfbGlzdF9jb3VudChjb25zdCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmwpOworc3RydWN0IGNvbW1pdF9saXN0ICpjb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShzdHJ1Y3QgY29tbWl0ICppdGVtLAorCQkJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0KTsKK3ZvaWQgY29tbWl0X2xpc3Rfc29ydF9ieV9kYXRlKHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpOworCisvKiBTaGFsbG93IGNvcHkgb2YgdGhlIGlucHV0IGxpc3QgKi8KK3N0cnVjdCBjb21taXRfbGlzdCAqY29weV9jb21taXRfbGlzdChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpOworCit2b2lkIGZyZWVfY29tbWl0X2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KTsKKworc3RydWN0IHJldl9pbmZvOyAvKiBpbiByZXZpc2lvbi5oLCBpdCBjaXJjdWxhcmx5IHVzZXMgZW51bSBjbWl0X2ZtdCAqLworCitpbnQgaGFzX25vbl9hc2NpaShjb25zdCBjaGFyICp0ZXh0KTsKK2NvbnN0IGNoYXIgKmxvZ21zZ19yZWVuY29kZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICAgY2hhciAqKmNvbW1pdF9lbmNvZGluZywKKwkJCSAgICBjb25zdCBjaGFyICpvdXRwdXRfZW5jb2RpbmcpOworY29uc3QgY2hhciAqcmVwb19sb2dtc2dfcmVlbmNvZGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkgY2hhciAqKmNvbW1pdF9lbmNvZGluZywKKwkJCQkgY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nKTsKKyNpZm5kZWYgTk9fVEhFX1JFUE9TSVRPUllfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNkZWZpbmUgbG9nbXNnX3JlZW5jb2RlKGMsIGVuYywgb3V0KSByZXBvX2xvZ21zZ19yZWVuY29kZSh0aGVfcmVwb3NpdG9yeSwgYywgZW5jLCBvdXQpCisjZW5kaWYKKworY29uc3QgY2hhciAqc2tpcF9ibGFua19saW5lcyhjb25zdCBjaGFyICptc2cpOworCisvKiogUmVtb3ZlcyB0aGUgZmlyc3QgY29tbWl0IGZyb20gYSBsaXN0IHNvcnRlZCBieSBkYXRlLCBhbmQgYWRkcyBhbGwKKyAqIG9mIGl0cyBwYXJlbnRzLgorICoqLworc3RydWN0IGNvbW1pdCAqcG9wX21vc3RfcmVjZW50X2NvbW1pdChzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0LAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBtYXJrKTsKKworc3RydWN0IGNvbW1pdCAqcG9wX2NvbW1pdChzdHJ1Y3QgY29tbWl0X2xpc3QgKipzdGFjayk7CisKK3ZvaWQgY2xlYXJfY29tbWl0X21hcmtzKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdW5zaWduZWQgaW50IG1hcmspOwordm9pZCBjbGVhcl9jb21taXRfbWFya3NfbWFueShpbnQgbnIsIHN0cnVjdCBjb21taXQgKipjb21taXQsIHVuc2lnbmVkIGludCBtYXJrKTsKKworCitlbnVtIHJldl9zb3J0X29yZGVyIHsKKwlSRVZfU09SVF9JTl9HUkFQSF9PUkRFUiA9IDAsCisJUkVWX1NPUlRfQllfQ09NTUlUX0RBVEUsCisJUkVWX1NPUlRfQllfQVVUSE9SX0RBVEUKK307CisKKy8qCisgKiBQZXJmb3JtcyBhbiBpbi1wbGFjZSB0b3BvbG9naWNhbCBzb3J0IG9mIGxpc3Qgc3VwcGxpZWQuCisgKgorICogICBpbnZhcmlhbnQgb2YgcmVzdWx0aW5nIGxpc3QgaXM6CisgKiAgICAgIGEgcmVhY2hhYmxlIGZyb20gYiA9PiBvcmQoYikgPCBvcmQoYSkKKyAqICAgc29ydF9vcmRlciBmdXJ0aGVyIHNwZWNpZmllczoKKyAqICAgUkVWX1NPUlRfSU5fR1JBUEhfT1JERVI6IHRyeSB0byBzaG93IGEgY29tbWl0IG9uIGEgc2luZ2xlLXBhcmVudAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhaW4gdG9nZXRoZXIuCisgKiAgIFJFVl9TT1JUX0JZX0NPTU1JVF9EQVRFOiBzaG93IGVsaWdpYmxlIGNvbW1pdHMgaW4gY29tbWl0dGVyLWRhdGUgb3JkZXIuCisgKi8KK3ZvaWQgc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcihzdHJ1Y3QgY29tbWl0X2xpc3QgKiosIGVudW0gcmV2X3NvcnRfb3JkZXIpOworCitzdHJ1Y3QgY29tbWl0X2dyYWZ0IHsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgbnJfcGFyZW50OyAvKiA8IDAgaWYgc2hhbGxvdyBjb21taXQgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2lkIHBhcmVudFtGTEVYX0FSUkFZXTsgLyogbW9yZSAqLworfTsKK3R5cGVkZWYgaW50ICgqZWFjaF9jb21taXRfZ3JhZnRfZm4pKGNvbnN0IHN0cnVjdCBjb21taXRfZ3JhZnQgKiwgdm9pZCAqKTsKKworc3RydWN0IGNvbW1pdF9ncmFmdCAqcmVhZF9ncmFmdF9saW5lKHN0cnVjdCBzdHJidWYgKmxpbmUpOworLyogY29tbWl0X2dyYWZ0X3BvcyByZXR1cm5zIGFuIGluZGV4IGludG8gci0+cGFyc2VkX29iamVjdHMtPmdyYWZ0cy4gKi8KK2ludCBjb21taXRfZ3JhZnRfcG9zKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2ludCByZWdpc3Rlcl9jb21taXRfZ3JhZnQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXRfZ3JhZnQgKiwgaW50KTsKK3ZvaWQgcHJlcGFyZV9jb21taXRfZ3JhZnQoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworc3RydWN0IGNvbW1pdF9ncmFmdCAqbG9va3VwX2NvbW1pdF9ncmFmdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworc3RydWN0IGNvbW1pdCAqZ2V0X2ZvcmtfcG9pbnQoY29uc3QgY2hhciAqcmVmbmFtZSwgc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKKworLyogbGFyZ2VzdCBwb3NpdGl2ZSBudW1iZXIgYSBzaWduZWQgMzItYml0IGludGVnZXIgY2FuIGNvbnRhaW4gKi8KKyNkZWZpbmUgSU5GSU5JVEVfREVQVEggMHg3ZmZmZmZmZgorCitzdHJ1Y3Qgb2lkX2FycmF5Oworc3RydWN0IHJlZjsKK2ludCBmb3JfZWFjaF9jb21taXRfZ3JhZnQoZWFjaF9jb21taXRfZ3JhZnRfZm4sIHZvaWQgKik7CisKK2ludCBpbnRlcmFjdGl2ZV9hZGQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsIGludCBwYXRjaCk7CitpbnQgcnVuX2FkZF9pbnRlcmFjdGl2ZShjb25zdCBjaGFyICpyZXZpc2lvbiwgY29uc3QgY2hhciAqcGF0Y2hfbW9kZSwKKwkJCWNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpOworCitzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciB7CisJc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKm5leHQ7CisJY2hhciAqa2V5OworCWNoYXIgKnZhbHVlOworCXNpemVfdCBsZW47Cit9OworCit2b2lkIGFwcGVuZF9tZXJnZV90YWdfaGVhZGVycyhzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsCisJCQkgICAgICBzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqKip0YWlsKTsKKworaW50IGNvbW1pdF90cmVlKGNvbnN0IGNoYXIgKm1zZywgc2l6ZV90IG1zZ19sZW4sCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnRyZWUsCisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cywgc3RydWN0IG9iamVjdF9pZCAqcmV0LAorCQljb25zdCBjaGFyICphdXRob3IsIGNvbnN0IGNoYXIgKnNpZ25fY29tbWl0KTsKKworaW50IGNvbW1pdF90cmVlX2V4dGVuZGVkKGNvbnN0IGNoYXIgKm1zZywgc2l6ZV90IG1zZ19sZW4sCisJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdHJlZSwKKwkJCSBzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsCisJCQkgc3RydWN0IG9iamVjdF9pZCAqcmV0LCBjb25zdCBjaGFyICphdXRob3IsCisJCQkgY29uc3QgY2hhciAqc2lnbl9jb21taXQsCisJCQkgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKik7CisKK3N0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpyZWFkX2NvbW1pdF9leHRyYV9oZWFkZXJzKHN0cnVjdCBjb21taXQgKiwgY29uc3QgY2hhciAqKik7CisKK3ZvaWQgZnJlZV9jb21taXRfZXh0cmFfaGVhZGVycyhzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEpOworCisvKgorICogU2VhcmNoIHRoZSBjb21taXQgb2JqZWN0IGNvbnRlbnRzIGdpdmVuIGJ5ICJtc2ciIGZvciB0aGUgaGVhZGVyICJrZXkiLgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXIgY29udGVudHMsIG9yIE5VTEwuIFRoZSBsZW5ndGgKKyAqIG9mIHRoZSBoZWFkZXIsIHVwIHRvIHRoZSBmaXJzdCBuZXdsaW5lLCBpcyByZXR1cm5lZCB2aWEgb3V0X2xlbi4KKyAqCisgKiBOb3RlIHRoYXQgc29tZSBoZWFkZXJzIChsaWtlIG1lcmdldGFnKSBtYXkgYmUgbXVsdGktbGluZS4gSXQgaXMgdGhlIGNhbGxlcidzCisgKiByZXNwb25zaWJpbGl0eSB0byBwYXJzZSBmdXJ0aGVyIGluIHRoaXMgY2FzZSEKKyAqLworY29uc3QgY2hhciAqZmluZF9jb21taXRfaGVhZGVyKGNvbnN0IGNoYXIgKm1zZywgY29uc3QgY2hhciAqa2V5LAorCQkJICAgICAgIHNpemVfdCAqb3V0X2xlbik7CisKKy8qIEZpbmQgdGhlIGVuZCBvZiB0aGUgbG9nIG1lc3NhZ2UsIHRoZSByaWdodCBwbGFjZSBmb3IgYSBuZXcgdHJhaWxlci4gKi8KK3NpemVfdCBpZ25vcmVfbm9uX3RyYWlsZXIoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKKwordHlwZWRlZiBpbnQgKCplYWNoX21lcmdldGFnX2ZuKShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpleHRyYSwKKwkJCQl2b2lkICpjYl9kYXRhKTsKKworaW50IGZvcl9lYWNoX21lcmdldGFnKGVhY2hfbWVyZ2V0YWdfZm4gZm4sIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqZGF0YSk7CisKK3N0cnVjdCBtZXJnZV9yZW1vdGVfZGVzYyB7CisJc3RydWN0IG9iamVjdCAqb2JqOyAvKiB0aGUgbmFtZWQgb2JqZWN0LCBjb3VsZCBiZSBhIHRhZyAqLworCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsKK307CitzdHJ1Y3QgbWVyZ2VfcmVtb3RlX2Rlc2MgKm1lcmdlX3JlbW90ZV91dGlsKHN0cnVjdCBjb21taXQgKik7Cit2b2lkIHNldF9tZXJnZV9yZW1vdGVfZGVzYyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopOworCisvKgorICogR2l2ZW4gIm5hbWUiIGZyb20gdGhlIGNvbW1hbmQgbGluZSB0byBtZXJnZSwgZmluZCB0aGUgY29tbWl0IG9iamVjdAorICogYW5kIHJldHVybiBpdCwgd2hpbGUgc3RvcmluZyBtZXJnZV9yZW1vdGVfZGVzYyBpbiBpdHMgLT51dGlsIGZpZWxkLAorICogdG8gYWxsb3cgY2FsbGVycyB0byB0ZWxsIGlmIHdlIGFyZSB0b2xkIHRvIG1lcmdlIGEgdGFnLgorICovCitzdHJ1Y3QgY29tbWl0ICpnZXRfbWVyZ2VfcGFyZW50KGNvbnN0IGNoYXIgKm5hbWUpOworCitpbnQgcGFyc2Vfc2lnbmVkX2NvbW1pdChjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQlzdHJ1Y3Qgc3RyYnVmICptZXNzYWdlLCBzdHJ1Y3Qgc3RyYnVmICpzaWduYXR1cmUpOworaW50IHJlbW92ZV9zaWduYXR1cmUoc3RydWN0IHN0cmJ1ZiAqYnVmKTsKKworLyoKKyAqIENoZWNrIHRoZSBzaWduYXR1cmUgb2YgdGhlIGdpdmVuIGNvbW1pdC4gVGhlIHJlc3VsdCBvZiB0aGUgY2hlY2sgaXMgc3RvcmVkCisgKiBpbiBzaWctPmNoZWNrX3Jlc3VsdCwgJ0cnIGZvciBhIGdvb2Qgc2lnbmF0dXJlLCAnVScgZm9yIGEgZ29vZCBzaWduYXR1cmUKKyAqIGZyb20gYW4gdW50cnVzdGVkIHNpZ25lciwgJ0InIGZvciBhIGJhZCBzaWduYXR1cmUgYW5kICdOJyBmb3Igbm8gc2lnbmF0dXJlCisgKiBhdCBhbGwuICBUaGlzIG1heSBhbGxvY2F0ZSBtZW1vcnkgZm9yIHNpZy0+Z3BnX291dHB1dCwgc2lnLT5ncGdfc3RhdHVzLAorICogc2lnLT5zaWduZXIgYW5kIHNpZy0+a2V5LgorICovCitpbnQgY2hlY2tfY29tbWl0X3NpZ25hdHVyZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBzaWduYXR1cmVfY2hlY2sgKnNpZ2MpOworCisvKiByZWNvcmQgYXV0aG9yLWRhdGUgZm9yIGVhY2ggY29tbWl0IG9iamVjdCAqLworc3RydWN0IGF1dGhvcl9kYXRlX3NsYWI7Cit2b2lkIHJlY29yZF9hdXRob3JfZGF0ZShzdHJ1Y3QgYXV0aG9yX2RhdGVfc2xhYiAqYXV0aG9yX2RhdGUsCisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworCitpbnQgY29tcGFyZV9jb21taXRzX2J5X2F1dGhvcl9kYXRlKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXywgdm9pZCAqdW51c2VkKTsKKworLyoKKyAqIFZlcmlmeSBhIHNpbmdsZSBjb21taXQgd2l0aCBjaGVja19jb21taXRfc2lnbmF0dXJlKCkgYW5kIGRpZSgpIGlmIGl0IGlzIG5vdAorICogYSBnb29kIHNpZ25hdHVyZS4gVGhpcyBpc24ndCByZWFsbHkgc3VpdGFibGUgZm9yIGdlbmVyYWwgdXNlLCBidXQgaXMgYQorICogaGVscGVyIHRvIGltcGxlbWVudCBjb25zaXN0ZW50IGxvZ2ljIGZvciBwdWxsL21lcmdlIC0tdmVyaWZ5LXNpZ25hdHVyZXMuCisgKgorICogVGhlIGNoZWNrX3RydXN0IHBhcmFtZXRlciBpcyBtZWFudCBmb3IgYmFja3dhcmQtY29tcGF0aWJpbGl0eS4gIFRoZSBHUEcKKyAqIGludGVyZmFjZSB2ZXJpZmllcyBrZXkgdHJ1c3Qgd2l0aCBhIGRlZmF1bHQgdHJ1c3QgbGV2ZWwgdGhhdCBpcyBiZWxvdyB0aGUKKyAqIGRlZmF1bHQgdHJ1c3QgbGV2ZWwgZm9yIG1lcmdlIG9wZXJhdGlvbnMuICBJdHMgdmFsdWUgc2hvdWxkIGJlIG5vbi16ZXJvIGlmCisgKiB0aGUgdXNlciBoYXNuJ3Qgc2V0IGEgbWluaW11bSB0cnVzdCBsZXZlbCBleHBsaWNpdGx5IGluIHRoZWlyIGNvbmZpZ3VyYXRpb24uCisgKgorICogSWYgdGhlIHVzZXIgaGFzIHNldCBhIG1pbmltdW0gdHJ1c3QgbGV2ZWwsIHRoZW4gdGhhdCB2YWx1ZSBzaG91bGQgYmUgb2JleWVkCisgKiBhbmQgY2hlY2tfdHJ1c3Qgc2hvdWxkIGJlIHplcm8sIGV2ZW4gaWYgdGhlIGNvbmZpZ3VyZWQgdHJ1c3QgbGV2ZWwgaXMgYmVsb3cKKyAqIHRoZSBkZWZhdWx0IHRydXN0IGxldmVsIGZvciBtZXJnZXMuCisgKi8KK3ZvaWQgdmVyaWZ5X21lcmdlX3NpZ25hdHVyZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCB2ZXJib3NlLAorCQkJICAgIGludCBjaGVja190cnVzdCk7CisKK2ludCBjb21wYXJlX2NvbW1pdHNfYnlfY29tbWl0X2RhdGUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfLCB2b2lkICp1bnVzZWQpOworaW50IGNvbXBhcmVfY29tbWl0c19ieV9nZW5fdGhlbl9jb21taXRfZGF0ZShjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8sIHZvaWQgKnVudXNlZCk7CisKK0xBU1RfQVJHX01VU1RfQkVfTlVMTAoraW50IHJ1bl9jb21taXRfaG9vayhpbnQgZWRpdG9yX2lzX3VzZWQsIGNvbnN0IGNoYXIgKmluZGV4X2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIC4uLik7CisKKyNlbmRpZiAvKiBDT01NSVRfSCAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uLW1haW4uYyBiL2NvbW1vbi1tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlMjFkZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi1tYWluLmMKQEAgLTAsMCArMSw1NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisKKy8qCisgKiBNYW55IHBhcnRzIG9mIEdpdCBoYXZlIHN1YnByb2dyYW1zIGNvbW11bmljYXRlIHZpYSBwaXBlLCBleHBlY3QgdGhlCisgKiB1cHN0cmVhbSBvZiBhIHBpcGUgdG8gZGllIHdpdGggU0lHUElQRSB3aGVuIHRoZSBkb3duc3RyZWFtIG9mIGEKKyAqIHBpcGUgZG9lcyBub3QgbmVlZCB0byByZWFkIGFsbCB0aGF0IGlzIHdyaXR0ZW4uICBTb21lIHRoaXJkLXBhcnR5CisgKiBwcm9ncmFtcyB0aGF0IGlnbm9yZSBvciBibG9jayBTSUdQSVBFIGZvciB0aGVpciBvd24gcmVhc29uIGZvcmdldAorICogdG8gcmVzdG9yZSBTSUdQSVBFIGhhbmRsaW5nIHRvIHRoZSBkZWZhdWx0IGJlZm9yZSBzcGF3bmluZyBHaXQgYW5kCisgKiBicmVhayB0aGlzIGNhcmVmdWxseSBvcmNoZXN0cmF0ZWQgbWFjaGluZXJ5LgorICoKKyAqIFJlc3RvcmUgdGhlIHdheSBTSUdQSVBFIGlzIGhhbmRsZWQgdG8gZGVmYXVsdCwgd2hpY2ggaXMgd2hhdCB3ZQorICogZXhwZWN0LgorICovCitzdGF0aWMgdm9pZCByZXN0b3JlX3NpZ3BpcGVfdG9fZGVmYXVsdCh2b2lkKQoreworCXNpZ3NldF90IHVuYmxvY2s7CisKKwlzaWdlbXB0eXNldCgmdW5ibG9jayk7CisJc2lnYWRkc2V0KCZ1bmJsb2NrLCBTSUdQSVBFKTsKKwlzaWdwcm9jbWFzayhTSUdfVU5CTE9DSywgJnVuYmxvY2ssIE5VTEwpOworCXNpZ25hbChTSUdQSVBFLCBTSUdfREZMKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCByZXN1bHQ7CisKKwl0cmFjZTJfaW5pdGlhbGl6ZV9jbG9jaygpOworCisJLyoKKwkgKiBBbHdheXMgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIDAvMS8yIHRvIGF2b2lkIGNsb2JiZXJpbmcgZmlsZXMKKwkgKiBpbiBkaWUoKS4gIEl0IGFsc28gYXZvaWRzIG1lc3NpbmcgdXAgd2hlbiB0aGUgcGlwZXMgYXJlIGR1cCdlZAorCSAqIG9udG8gc3RkaW4vc3Rkb3V0L3N0ZGVyciBpbiB0aGUgY2hpbGQgcHJvY2Vzc2VzIHdlIHNwYXduLgorCSAqLworCXNhbml0aXplX3N0ZGZkcygpOworCXJlc3RvcmVfc2lncGlwZV90b19kZWZhdWx0KCk7CisKKwlnaXRfcmVzb2x2ZV9leGVjdXRhYmxlX2Rpcihhcmd2WzBdKTsKKworCWdpdF9zZXR1cF9nZXR0ZXh0KCk7CisKKwlpbml0aWFsaXplX3RoZV9yZXBvc2l0b3J5KCk7CisKKwlhdHRyX3N0YXJ0KCk7CisKKwl0cmFjZTJfaW5pdGlhbGl6ZSgpOworCXRyYWNlMl9jbWRfc3RhcnQoYXJndik7CisJdHJhY2UyX2NvbGxlY3RfcHJvY2Vzc19pbmZvKFRSQUNFMl9QUk9DRVNTX0lORk9fU1RBUlRVUCk7CisKKwlyZXN1bHQgPSBjbWRfbWFpbihhcmdjLCBhcmd2KTsKKworCXRyYWNlMl9jbWRfZXhpdChyZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9hY2Nlc3MuYyBiL2NvbXBhdC9hY2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWZkYTNlCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2FjY2Vzcy5jCkBAIC0wLDAgKzEsMzEgQEAKKyNkZWZpbmUgQ09NUEFUX0NPREVfQUNDRVNTCisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKKy8qIERvIHRoZSBzYW1lIHRoaW5nIGFjY2VzcygyKSBkb2VzLCBidXQgdXNlIHRoZSBlZmZlY3RpdmUgdWlkLAorICogYW5kIGRvbid0IG1ha2UgdGhlIG1pc3Rha2Ugb2YgdGVsbGluZyByb290IHRoYXQgYW55IGZpbGUgaXMKKyAqIGV4ZWN1dGFibGUuICBUaGlzIHZlcnNpb24gdXNlcyBzdGF0KDIpLgorICovCitpbnQgZ2l0X2FjY2Vzcyhjb25zdCBjaGFyICpwYXRoLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCS8qIGRvIG5vdCBpbnRlcmZlcmUgYSBub3JtYWwgdXNlciAqLworCWlmIChnZXRldWlkKCkpCisJCXJldHVybiBhY2Nlc3MocGF0aCwgbW9kZSk7CisKKwlpZiAoc3RhdChwYXRoLCAmc3QpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogUm9vdCBjYW4gcmVhZCBvciB3cml0ZSBhbnkgZmlsZS4gKi8KKwlpZiAoIShtb2RlICYgWF9PSykpCisJCXJldHVybiAwOworCisJLyogUm9vdCBjYW4gZXhlY3V0ZSBhbnkgZmlsZSB0aGF0IGhhcyBhbnkgb25lIG9mIHRoZSBleGVjdXRlCisJICogYml0cyBzZXQuCisJICovCisJaWYgKHN0LnN0X21vZGUgJiAoU19JWFVTUiB8IFNfSVhHUlAgfCBTX0lYT1RIKSkKKwkJcmV0dXJuIDA7CisKKwllcnJubyA9IEVBQ0NFUzsKKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvYXBwbGUtY29tbW9uLWNyeXB0by5oIGIvY29tcGF0L2FwcGxlLWNvbW1vbi1jcnlwdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTcyN2YzCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2FwcGxlLWNvbW1vbi1jcnlwdG8uaApAQCAtMCwwICsxLDk2IEBACisvKiBzdXBwcmVzcyBpbmNsdXNpb24gb2YgY29uZmxpY3Rpbmcgb3BlbnNzbCBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgT1BFTlNTTF9OT19NRDUKKyNkZWZpbmUgSEVBREVSX0hNQUNfSAorI2RlZmluZSBIRUFERVJfU0hBX0gKKyNpbmNsdWRlIDxDb21tb25DcnlwdG8vQ29tbW9uSE1BQy5oPgorI2RlZmluZSBFVlBfbWQ1KC4uLikga0NDSG1hY0FsZ01ENQorLyogQ0NIbWFjIGRvZXNuJ3QgdGFrZSBtZF9sZW4gYW5kIHRoZSByZXR1cm4gdHlwZSBpcyB2b2lkICovCisjZGVmaW5lIEhNQUMgZ2l0X0NDX0hNQUMKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqZ2l0X0NDX0hNQUMoQ0NIbWFjQWxnb3JpdGhtIGFsZywKKwkJY29uc3Qgdm9pZCAqa2V5LCBpbnQga2V5X2xlbiwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLAorCQl1bnNpZ25lZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICptZF9sZW4pCit7CisJQ0NIbWFjKGFsZywga2V5LCBrZXlfbGVuLCBkYXRhLCBkYXRhX2xlbiwgbWQpOworCXJldHVybiBtZDsKK30KKworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA3MAorI2RlZmluZSBBUFBMRV9MSU9OX09SX05FV0VSCisjaW5jbHVkZSA8U2VjdXJpdHkvU2VjdXJpdHkuaD4KKy8qIEFwcGxlJ3MgVFlQRV9CT09MIGNvbmZsaWN0cyB3aXRoIGNvbmZpZy5jICovCisjdW5kZWYgVFlQRV9CT09MCisjZW5kaWYKKworI2lmbmRlZiBTSEExX01BWF9CTE9DS19TSVpFCisjZXJyb3IgVXNpbmcgQXBwbGUgQ29tbW9uIENyeXB0byBsaWJyYXJ5IHJlcXVpcmVzIHNldHRpbmcgU0hBMV9NQVhfQkxPQ0tfU0laRQorI2VuZGlmCisKKyNpZmRlZiBBUFBMRV9MSU9OX09SX05FV0VSCisjZGVmaW5lIGdpdF9DQ19lcnJvcl9jaGVjayhwYXR0ZXJuLCBlcnIpIFwKKwlkbyB7IFwKKwkJaWYgKGVycikgeyBcCisJCQlkaWUocGF0dGVybiwgKGxvbmcpQ0ZFcnJvckdldENvZGUoZXJyKSk7IFwKKwkJfSBcCisJfSB3aGlsZSgwKQorCisjZGVmaW5lIEVWUF9FbmNvZGVCbG9jayBnaXRfQ0NfRVZQX0VuY29kZUJsb2NrCitzdGF0aWMgaW5saW5lIGludCBnaXRfQ0NfRVZQX0VuY29kZUJsb2NrKHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIGludCBpbmxlbikKK3sKKwlDRkVycm9yUmVmIGVycjsKKwlTZWNUcmFuc2Zvcm1SZWYgZW5jb2RlcjsKKwlDRkRhdGFSZWYgaW5wdXQsIG91dHB1dDsKKwlDRkluZGV4IGxlbmd0aDsKKworCWVuY29kZXIgPSBTZWNFbmNvZGVUcmFuc2Zvcm1DcmVhdGUoa1NlY0Jhc2U2NEVuY29kaW5nLCAmZXJyKTsKKwlnaXRfQ0NfZXJyb3JfY2hlY2soIlNlY0VuY29kZVRyYW5zZm9ybUNyZWF0ZSBmYWlsZWQ6ICVsZCIsIGVycik7CisKKwlpbnB1dCA9IENGRGF0YUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBpbiwgaW5sZW4pOworCVNlY1RyYW5zZm9ybVNldEF0dHJpYnV0ZShlbmNvZGVyLCBrU2VjVHJhbnNmb3JtSW5wdXRBdHRyaWJ1dGVOYW1lLAorCQkJaW5wdXQsICZlcnIpOworCWdpdF9DQ19lcnJvcl9jaGVjaygiU2VjVHJhbnNmb3JtU2V0QXR0cmlidXRlIGZhaWxlZDogJWxkIiwgZXJyKTsKKworCW91dHB1dCA9IFNlY1RyYW5zZm9ybUV4ZWN1dGUoZW5jb2RlciwgJmVycik7CisJZ2l0X0NDX2Vycm9yX2NoZWNrKCJTZWNUcmFuc2Zvcm1FeGVjdXRlIGZhaWxlZDogJWxkIiwgZXJyKTsKKworCWxlbmd0aCA9IENGRGF0YUdldExlbmd0aChvdXRwdXQpOworCUNGRGF0YUdldEJ5dGVzKG91dHB1dCwgQ0ZSYW5nZU1ha2UoMCwgbGVuZ3RoKSwgb3V0KTsKKworCUNGUmVsZWFzZShvdXRwdXQpOworCUNGUmVsZWFzZShpbnB1dCk7CisJQ0ZSZWxlYXNlKGVuY29kZXIpOworCisJcmV0dXJuIChpbnQpc3RybGVuKChjb25zdCBjaGFyICopb3V0KTsKK30KKworI2RlZmluZSBFVlBfRGVjb2RlQmxvY2sgZ2l0X0NDX0VWUF9EZWNvZGVCbG9jaworc3RhdGljIGludCBpbmxpbmUgZ2l0X0NDX0VWUF9EZWNvZGVCbG9jayh1bnNpZ25lZCBjaGFyICpvdXQsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgaW5sZW4pCit7CisJQ0ZFcnJvclJlZiBlcnI7CisJU2VjVHJhbnNmb3JtUmVmIGRlY29kZXI7CisJQ0ZEYXRhUmVmIGlucHV0LCBvdXRwdXQ7CisJQ0ZJbmRleCBsZW5ndGg7CisKKwlkZWNvZGVyID0gU2VjRGVjb2RlVHJhbnNmb3JtQ3JlYXRlKGtTZWNCYXNlNjRFbmNvZGluZywgJmVycik7CisJZ2l0X0NDX2Vycm9yX2NoZWNrKCJTZWNFbmNvZGVUcmFuc2Zvcm1DcmVhdGUgZmFpbGVkOiAlbGQiLCBlcnIpOworCisJaW5wdXQgPSBDRkRhdGFDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgaW4sIGlubGVuKTsKKwlTZWNUcmFuc2Zvcm1TZXRBdHRyaWJ1dGUoZGVjb2Rlciwga1NlY1RyYW5zZm9ybUlucHV0QXR0cmlidXRlTmFtZSwKKwkJCWlucHV0LCAmZXJyKTsKKwlnaXRfQ0NfZXJyb3JfY2hlY2soIlNlY1RyYW5zZm9ybVNldEF0dHJpYnV0ZSBmYWlsZWQ6ICVsZCIsIGVycik7CisKKwlvdXRwdXQgPSBTZWNUcmFuc2Zvcm1FeGVjdXRlKGRlY29kZXIsICZlcnIpOworCWdpdF9DQ19lcnJvcl9jaGVjaygiU2VjVHJhbnNmb3JtRXhlY3V0ZSBmYWlsZWQ6ICVsZCIsIGVycik7CisKKwlsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgob3V0cHV0KTsKKwlDRkRhdGFHZXRCeXRlcyhvdXRwdXQsIENGUmFuZ2VNYWtlKDAsIGxlbmd0aCksIG91dCk7CisKKwlDRlJlbGVhc2Uob3V0cHV0KTsKKwlDRlJlbGVhc2UoaW5wdXQpOworCUNGUmVsZWFzZShkZWNvZGVyKTsKKworCXJldHVybiAoaW50KXN0cmxlbigoY29uc3QgY2hhciAqKW91dCk7Cit9CisjZW5kaWYgLyogQVBQTEVfTElPTl9PUl9ORVdFUiAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L2Jhc2VuYW1lLmMgYi9jb21wYXQvYmFzZW5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmJkOTUzCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2Jhc2VuYW1lLmMKQEAgLTAsMCArMSw3MSBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgIi4uL3N0cmJ1Zi5oIgorCisvKiBBZGFwdGVkIGZyb20gbGliaWJlcnR5J3MgYmFzZW5hbWUuYy4gICovCitjaGFyICpnaXRiYXNlbmFtZSAoY2hhciAqcGF0aCkKK3sKKwljb25zdCBjaGFyICpiYXNlOworCisJaWYgKHBhdGgpCisJCXNraXBfZG9zX2RyaXZlX3ByZWZpeCgmcGF0aCk7CisKKwlpZiAoIXBhdGggfHwgISpwYXRoKQorCQlyZXR1cm4gIi4iOworCisJZm9yIChiYXNlID0gcGF0aDsgKnBhdGg7IHBhdGgrKykgeworCQlpZiAoIWlzX2Rpcl9zZXAoKnBhdGgpKQorCQkJY29udGludWU7CisJCWRvIHsKKwkJCXBhdGgrKzsKKwkJfSB3aGlsZSAoaXNfZGlyX3NlcCgqcGF0aCkpOworCQlpZiAoKnBhdGgpCisJCQliYXNlID0gcGF0aDsKKwkJZWxzZQorCQkJd2hpbGUgKC0tcGF0aCAhPSBiYXNlICYmIGlzX2Rpcl9zZXAoKnBhdGgpKQorCQkJCSpwYXRoID0gJ1wwJzsKKwl9CisJcmV0dXJuIChjaGFyICopYmFzZTsKK30KKworY2hhciAqZ2l0ZGlybmFtZShjaGFyICpwYXRoKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNoYXIgKnAgPSBwYXRoLCAqc2xhc2ggPSBOVUxMLCBjOworCWludCBkb3NfZHJpdmVfcHJlZml4OworCisJaWYgKCFwKQorCQlyZXR1cm4gIi4iOworCisJaWYgKChkb3NfZHJpdmVfcHJlZml4ID0gc2tpcF9kb3NfZHJpdmVfcHJlZml4KCZwKSkgJiYgISpwKQorCQlnb3RvIGRvdDsKKworCS8qCisJICogUE9TSVguMS0yMDAxIHNheXMgZGlybmFtZSgiLyIpIHNob3VsZCByZXR1cm4gIi8iLCBhbmQgZGlybmFtZSgiLy8iKQorCSAqIHNob3VsZCByZXR1cm4gIi8vIiwgYnV0IGRpcm5hbWUoIi8vLyIpIHNob3VsZCByZXR1cm4gIi8iIGFnYWluLgorCSAqLworCWlmIChpc19kaXJfc2VwKCpwKSkgeworCQlpZiAoIXBbMV0gfHwgKGlzX2Rpcl9zZXAocFsxXSkgJiYgIXBbMl0pKQorCQkJcmV0dXJuIHBhdGg7CisJCXNsYXNoID0gKytwOworCX0KKwl3aGlsZSAoKGMgPSAqKHArKykpKQorCQlpZiAoaXNfZGlyX3NlcChjKSkgeworCQkJY2hhciAqdGVudGF0aXZlID0gcCAtIDE7CisKKwkJCS8qIFBPU0lYLjEtMjAwMSBzYXlzIHRvIGlnbm9yZSB0cmFpbGluZyBzbGFzaGVzICovCisJCQl3aGlsZSAoaXNfZGlyX3NlcCgqcCkpCisJCQkJcCsrOworCQkJaWYgKCpwKQorCQkJCXNsYXNoID0gdGVudGF0aXZlOworCQl9CisKKwlpZiAoc2xhc2gpIHsKKwkJKnNsYXNoID0gJ1wwJzsKKwkJcmV0dXJuIHBhdGg7CisJfQorCitkb3Q6CisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICIlLipzLiIsIGRvc19kcml2ZV9wcmVmaXgsIHBhdGgpOworCXJldHVybiBidWYuYnVmOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L2Jzd2FwLmggYi9jb21wYXQvYnN3YXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGUyNTczCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2Jzd2FwLmgKQEAgLTAsMCArMSwyMTcgQEAKKyNpZm5kZWYgQ09NUEFUX0JTV0FQX0gKKyNkZWZpbmUgQ09NUEFUX0JTV0FQX0gKKworLyoKKyAqIExldCdzIG1ha2Ugc3VyZSB3ZSBhbHdheXMgaGF2ZSBhIHNhbmUgZGVmaW5pdGlvbiBmb3IgbnRvaGwoKS9odG9ubCgpLgorICogU29tZSBsaWJyYXJpZXMgZGVmaW5lIHRob3NlIGFzIGEgZnVuY3Rpb24gY2FsbCwganVzdCB0byBwZXJmb3JtIGJ5dGUKKyAqIHNoaWZ0aW5nLCBicmluZ2luZyBzaWduaWZpY2FudCBvdmVyaGVhZCB0byB3aGF0IHNob3VsZCBiZSBhIHNpbXBsZQorICogb3BlcmF0aW9uLgorICovCisKKy8qCisgKiBEZWZhdWx0IHZlcnNpb24gdGhhdCB0aGUgY29tcGlsZXIgb3VnaHQgdG8gb3B0aW1pemUgcHJvcGVybHkgd2l0aAorICogY29uc3RhbnQgdmFsdWVzLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGRlZmF1bHRfc3dhYjMyKHVpbnQzMl90IHZhbCkKK3sKKwlyZXR1cm4gKCgodmFsICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwKKwkJKCh2YWwgJiAweDAwZmYwMDAwKSA+PiAgOCkgfAorCQkoKHZhbCAmIDB4MDAwMGZmMDApIDw8ICA4KSB8CisJCSgodmFsICYgMHgwMDAwMDBmZikgPDwgMjQpKTsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRfdCBkZWZhdWx0X2Jzd2FwNjQodWludDY0X3QgdmFsKQoreworCXJldHVybiAoKCh2YWwgJiAodWludDY0X3QpMHgwMDAwMDAwMDAwMDAwMGZmVUxMKSA8PCA1NikgfAorCQkoKHZhbCAmICh1aW50NjRfdCkweDAwMDAwMDAwMDAwMGZmMDBVTEwpIDw8IDQwKSB8CisJCSgodmFsICYgKHVpbnQ2NF90KTB4MDAwMDAwMDAwMGZmMDAwMFVMTCkgPDwgMjQpIHwKKwkJKCh2YWwgJiAodWludDY0X3QpMHgwMDAwMDAwMGZmMDAwMDAwVUxMKSA8PCAgOCkgfAorCQkoKHZhbCAmICh1aW50NjRfdCkweDAwMDAwMGZmMDAwMDAwMDBVTEwpID4+ICA4KSB8CisJCSgodmFsICYgKHVpbnQ2NF90KTB4MDAwMGZmMDAwMDAwMDAwMFVMTCkgPj4gMjQpIHwKKwkJKCh2YWwgJiAodWludDY0X3QpMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfAorCQkoKHZhbCAmICh1aW50NjRfdCkweGZmMDAwMDAwMDAwMDAwMDBVTEwpID4+IDU2KSk7Cit9CisKKyN1bmRlZiBic3dhcDMyCisjdW5kZWYgYnN3YXA2NAorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpCisKKyNkZWZpbmUgYnN3YXAzMiBnaXRfYnN3YXAzMgorc3RhdGljIGlubGluZSB1aW50MzJfdCBnaXRfYnN3YXAzMih1aW50MzJfdCB4KQoreworCXVpbnQzMl90IHJlc3VsdDsKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoeCkpCisJCXJlc3VsdCA9IGRlZmF1bHRfc3dhYjMyKHgpOworCWVsc2UKKwkJX19hc21fXygiYnN3YXAgJTAiIDogIj1yIiAocmVzdWx0KSA6ICIwIiAoeCkpOworCXJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgYnN3YXA2NCBnaXRfYnN3YXA2NAorI2lmIGRlZmluZWQoX194ODZfNjRfXykKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgZ2l0X2Jzd2FwNjQodWludDY0X3QgeCkKK3sKKwl1aW50NjRfdCByZXN1bHQ7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHgpKQorCQlyZXN1bHQgPSBkZWZhdWx0X2Jzd2FwNjQoeCk7CisJZWxzZQorCQlfX2FzbV9fKCJic3dhcCAlcTAiIDogIj1yIiAocmVzdWx0KSA6ICIwIiAoeCkpOworCXJldHVybiByZXN1bHQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB1aW50NjRfdCBnaXRfYnN3YXA2NCh1aW50NjRfdCB4KQoreworCXVuaW9uIHsgdWludDY0X3QgaTY0OyB1aW50MzJfdCBpMzJbMl07IH0gdG1wLCByZXN1bHQ7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHgpKQorCQlyZXN1bHQuaTY0ID0gZGVmYXVsdF9ic3dhcDY0KHgpOworCWVsc2UgeworCQl0bXAuaTY0ID0geDsKKwkJcmVzdWx0LmkzMlswXSA9IGdpdF9ic3dhcDMyKHRtcC5pMzJbMV0pOworCQlyZXN1bHQuaTMyWzFdID0gZ2l0X2Jzd2FwMzIodG1wLmkzMlswXSk7CisJfQorCXJldHVybiByZXN1bHQuaTY0OworfQorI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIChkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX01fWDY0KSkKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIGJzd2FwMzIoeCkgX2J5dGVzd2FwX3Vsb25nKHgpCisjZGVmaW5lIGJzd2FwNjQoeCkgX2J5dGVzd2FwX3VpbnQ2NCh4KQorCisjZW5kaWYKKworI2lmIGRlZmluZWQoYnN3YXAzMikKKworI3VuZGVmIG50b2hsCisjdW5kZWYgaHRvbmwKKyNkZWZpbmUgbnRvaGwoeCkgYnN3YXAzMih4KQorI2RlZmluZSBodG9ubCh4KSBic3dhcDMyKHgpCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChic3dhcDY0KQorCisjdW5kZWYgbnRvaGxsCisjdW5kZWYgaHRvbmxsCisjZGVmaW5lIG50b2hsbCh4KSBic3dhcDY0KHgpCisjZGVmaW5lIGh0b25sbCh4KSBic3dhcDY0KHgpCisKKyNlbHNlCisKKyN1bmRlZiBudG9obGwKKyN1bmRlZiBodG9ubGwKKworI2lmIGRlZmluZWQoX19CWVRFX09SREVSKSAmJiBkZWZpbmVkKF9fTElUVExFX0VORElBTikgJiYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisKKyMgZGVmaW5lIEdJVF9CWVRFX09SREVSIF9fQllURV9PUkRFUgorIyBkZWZpbmUgR0lUX0xJVFRMRV9FTkRJQU4gX19MSVRUTEVfRU5ESUFOCisjIGRlZmluZSBHSVRfQklHX0VORElBTiBfX0JJR19FTkRJQU4KKworI2VsaWYgZGVmaW5lZChCWVRFX09SREVSKSAmJiBkZWZpbmVkKExJVFRMRV9FTkRJQU4pICYmIGRlZmluZWQoQklHX0VORElBTikKKworIyBkZWZpbmUgR0lUX0JZVEVfT1JERVIgQllURV9PUkRFUgorIyBkZWZpbmUgR0lUX0xJVFRMRV9FTkRJQU4gTElUVExFX0VORElBTgorIyBkZWZpbmUgR0lUX0JJR19FTkRJQU4gQklHX0VORElBTgorCisjZWxzZQorCisjIGRlZmluZSBHSVRfQklHX0VORElBTiA0MzIxCisjIGRlZmluZSBHSVRfTElUVExFX0VORElBTiAxMjM0CisKKyMgaWYgZGVmaW5lZChfQklHX0VORElBTikgJiYgIWRlZmluZWQoX0xJVFRMRV9FTkRJQU4pCisjICBkZWZpbmUgR0lUX0JZVEVfT1JERVIgR0lUX0JJR19FTkRJQU4KKyMgZWxpZiBkZWZpbmVkKF9MSVRUTEVfRU5ESUFOKSAmJiAhZGVmaW5lZChfQklHX0VORElBTikKKyMgIGRlZmluZSBHSVRfQllURV9PUkRFUiBHSVRfTElUVExFX0VORElBTgorIyBlbGlmIGRlZmluZWQoX19USFdfQklHX0VORElBTl9fKSAmJiAhZGVmaW5lZChfX1RIV19MSVRUTEVfRU5ESUFOX18pCisjICBkZWZpbmUgR0lUX0JZVEVfT1JERVIgR0lUX0JJR19FTkRJQU4KKyMgZWxpZiBkZWZpbmVkKF9fVEhXX0xJVFRMRV9FTkRJQU5fXykgJiYgIWRlZmluZWQoX19USFdfQklHX0VORElBTl9fKQorIyAgZGVmaW5lIEdJVF9CWVRFX09SREVSIEdJVF9MSVRUTEVfRU5ESUFOCisjIGVsc2UKKyMgIGVycm9yICJDYW5ub3QgZGV0ZXJtaW5lIGVuZGlhbm5lc3MiCisjIGVuZGlmCisKKyNlbmRpZgorCisjaWYgR0lUX0JZVEVfT1JERVIgPT0gR0lUX0JJR19FTkRJQU4KKyMgZGVmaW5lIG50b2hsbChuKSAobikKKyMgZGVmaW5lIGh0b25sbChuKSAobikKKyNlbHNlCisjIGRlZmluZSBudG9obGwobikgZGVmYXVsdF9ic3dhcDY0KG4pCisjIGRlZmluZSBodG9ubGwobikgZGVmYXVsdF9ic3dhcDY0KG4pCisjZW5kaWYKKworI2VuZGlmCisKKy8qCisgKiBQZXJmb3JtYW5jZSBtaWdodCBiZSBpbXByb3ZlZCBpZiB0aGUgQ1BVIGFyY2hpdGVjdHVyZSBpcyBPSyB3aXRoCisgKiB1bmFsaWduZWQgMzItYml0IGxvYWRzIGFuZCBhIGZhc3QgbnRvaGwoKSBpcyBhdmFpbGFibGUuCisgKiBPdGhlcndpc2UgZmFsbCBiYWNrIHRvIGJ5dGUgbG9hZHMgYW5kIHNoaWZ0cyB3aGljaCBpcyBwb3J0YWJsZSwKKyAqIGFuZCBpcyBmYXN0ZXIgb24gYXJjaGl0ZWN0dXJlcyB3aXRoIG1lbW9yeSBhbGlnbm1lbnQgaXNzdWVzLgorICovCisKKyNpZiAhZGVmaW5lZChOT19VTkFMSUdORURfTE9BRFMpICYmICggXAorICAgIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgXAorICAgIGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfTV9YNjQpIHx8IFwKKyAgICBkZWZpbmVkKF9fcHBjX18pIHx8IGRlZmluZWQoX19wcGM2NF9fKSB8fCBcCisgICAgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3Bvd2VycGM2NF9fKSB8fCBcCisgICAgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pKQorCisjZGVmaW5lIGdldF9iZTE2KHApCW50b2hzKCoodW5zaWduZWQgc2hvcnQgKikocCkpCisjZGVmaW5lIGdldF9iZTMyKHApCW50b2hsKCoodW5zaWduZWQgaW50ICopKHApKQorI2RlZmluZSBnZXRfYmU2NChwKQludG9obGwoKih1aW50NjRfdCAqKShwKSkKKyNkZWZpbmUgcHV0X2JlMzIocCwgdikJZG8geyAqKHVuc2lnbmVkIGludCAqKShwKSA9IGh0b25sKHYpOyB9IHdoaWxlICgwKQorI2RlZmluZSBwdXRfYmU2NChwLCB2KQlkbyB7ICoodWludDY0X3QgKikocCkgPSBodG9ubGwodik7IH0gd2hpbGUgKDApCisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgZ2V0X2JlMTYoY29uc3Qgdm9pZCAqcHRyKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBwdHI7CisJcmV0dXJuCSh1aW50MTZfdClwWzBdIDw8IDggfAorCQkodWludDE2X3QpcFsxXSA8PCAwOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGdldF9iZTMyKGNvbnN0IHZvaWQgKnB0cikKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gcHRyOworCXJldHVybgkodWludDMyX3QpcFswXSA8PCAyNCB8CisJCSh1aW50MzJfdClwWzFdIDw8IDE2IHwKKwkJKHVpbnQzMl90KXBbMl0gPDwgIDggfAorCQkodWludDMyX3QpcFszXSA8PCAgMDsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRfdCBnZXRfYmU2NChjb25zdCB2b2lkICpwdHIpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHB0cjsKKwlyZXR1cm4JKHVpbnQ2NF90KWdldF9iZTMyKCZwWzBdKSA8PCAzMiB8CisJCSh1aW50NjRfdClnZXRfYmUzMigmcFs0XSkgPDwgIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfYmUzMih2b2lkICpwdHIsIHVpbnQzMl90IHZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgKnAgPSBwdHI7CisJcFswXSA9IHZhbHVlID4+IDI0OworCXBbMV0gPSB2YWx1ZSA+PiAxNjsKKwlwWzJdID0gdmFsdWUgPj4gIDg7CisJcFszXSA9IHZhbHVlID4+ICAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2JlNjQodm9pZCAqcHRyLCB1aW50NjRfdCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpwID0gcHRyOworCXBbMF0gPSB2YWx1ZSA+PiA1NjsKKwlwWzFdID0gdmFsdWUgPj4gNDg7CisJcFsyXSA9IHZhbHVlID4+IDQwOworCXBbM10gPSB2YWx1ZSA+PiAzMjsKKwlwWzRdID0gdmFsdWUgPj4gMjQ7CisJcFs1XSA9IHZhbHVlID4+IDE2OworCXBbNl0gPSB2YWx1ZSA+PiAgODsKKwlwWzddID0gdmFsdWUgPj4gIDA7Cit9CisKKyNlbmRpZgorCisjZW5kaWYgLyogQ09NUEFUX0JTV0FQX0ggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC9jb21waWxlci5oIGIvY29tcGF0L2NvbXBpbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkYmI2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9jb21waWxlci5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgQ09NUElMRVJfSAorI2RlZmluZSBDT01QSUxFUl9ICisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworI2lmZGVmIF9fR0xJQkNfXworI2luY2x1ZGUgPGdudS9saWJjLXZlcnNpb24uaD4KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2NvbXBpbGVyX2luZm8oc3RydWN0IHN0cmJ1ZiAqaW5mbykKK3sKKwlpbnQgbGVuID0gaW5mby0+bGVuOworI2lmZGVmIF9fY2xhbmdfXworCXN0cmJ1Zl9hZGRmKGluZm8sICJjbGFuZzogJXNcbiIsIF9fY2xhbmdfdmVyc2lvbl9fKTsKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pCisJc3RyYnVmX2FkZGYoaW5mbywgImdudWM6ICVkLiVkXG4iLCBfX0dOVUNfXywgX19HTlVDX01JTk9SX18pOworI2VuZGlmCisKKyNpZmRlZiBfTVNDX1ZFUgorCXN0cmJ1Zl9hZGRmKGluZm8sICJNU1ZDIHZlcnNpb246ICUwMmQuJTAyZC4lMDVkXG4iLAorCQkgICAgX01TQ19WRVIgLyAxMDAsIF9NU0NfVkVSICUgMTAwLCBfTVNDX0ZVTExfVkVSICUgMTAwMDAwKTsKKyNlbmRpZgorCisJaWYgKGxlbiA9PSBpbmZvLT5sZW4pCisJCXN0cmJ1Zl9hZGRzdHIoaW5mbywgXygibm8gY29tcGlsZXIgaW5mb3JtYXRpb24gYXZhaWxhYmxlXG4iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbGliY19pbmZvKHN0cnVjdCBzdHJidWYgKmluZm8pCit7CisJaW50IGxlbiA9IGluZm8tPmxlbjsKKworI2lmZGVmIF9fR0xJQkNfXworCXN0cmJ1Zl9hZGRmKGluZm8sICJnbGliYzogJXNcbiIsIGdudV9nZXRfbGliY192ZXJzaW9uKCkpOworI2VuZGlmCisKKwlpZiAobGVuID09IGluZm8tPmxlbikKKwkJc3RyYnVmX2FkZHN0cihpbmZvLCBfKCJubyBsaWJjIGluZm9ybWF0aW9uIGF2YWlsYWJsZVxuIikpOworfQorCisjZW5kaWYgLyogQ09NUElMRVJfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L2ZpbGVuby5jIGIvY29tcGF0L2ZpbGVuby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODBlZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvZmlsZW5vLmMKQEAgLTAsMCArMSw3IEBACisjZGVmaW5lIENPTVBBVF9DT0RFX0ZJTEVOTworI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitpbnQgZ2l0X2ZpbGVubyhGSUxFICpzdHJlYW0pCit7CisJcmV0dXJuIGZpbGVubyhzdHJlYW0pOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L2ZvcGVuLmMgYi9jb21wYXQvZm9wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDdiM2U4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2ZvcGVuLmMKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqICBUaGUgb3JkZXIgb2YgdGhlIGZvbGxvd2luZyB0d28gbGluZXMgaXMgaW1wb3J0YW50LgorICoKKyAqICBTVVBQUkVTU19GT1BFTl9SRURFRklOSVRJT04gaXMgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIGdpdC1jb21wYXQtdXRpbC5oCisgKiAgdG8gYXZvaWQgdGhlIHJlZGVmaW5pdGlvbiBvZiBmb3BlbiB3aXRoaW4gZ2l0LWNvbXBhdC11dGlsLmguIFRoaXMgaXMKKyAqICBuZWNlc3Nhcnkgc2luY2UgZm9wZW4gaXMgYSBtYWNybyBvbiBzb21lIHBsYXRmb3JtcyB3aGljaCBtYXkgYmUgc2V0CisgKiAgYmFzZWQgb24gY29tcGlsZXIgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIG9uIEFJWCBmb3BlbiBpcyBzZXQgdG8gZm9wZW42NAorICogIHdoZW4gX0xBUkdFX0ZJTEVTIGlzIGRlZmluZWQuIFRoZSBwcmV2aW91cyB0ZWNobmlxdWUgb2YgbWVyZWx5IHVuZGVmaW5pbmcKKyAqICBmb3BlbiBhZnRlciBpbmNsdWRpbmcgZ2l0LWNvbXBhdC11dGlsLmggaXMgaW5hZGVxdWF0ZSBpbiB0aGlzIGNhc2UuCisgKi8KKyNkZWZpbmUgU1VQUFJFU1NfRk9QRU5fUkVERUZJTklUSU9OCisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK0ZJTEUgKmdpdF9mb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQoreworCUZJTEUgKmZwOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKG1vZGVbMF0gPT0gJ3cnIHx8IG1vZGVbMF0gPT0gJ2EnKQorCQlyZXR1cm4gZm9wZW4ocGF0aCwgbW9kZSk7CisKKwlpZiAoIShmcCA9IGZvcGVuKHBhdGgsIG1vZGUpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoZnN0YXQoZmlsZW5vKGZwKSwgJnN0KSkgeworCQlmY2xvc2UoZnApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQlmY2xvc2UoZnApOworCQllcnJubyA9IEVJU0RJUjsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGZwOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L2hzdHJlcnJvci5jIGIvY29tcGF0L2hzdHJlcnJvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NWEyZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvaHN0cmVycm9yLmMKQEAgLTAsMCArMSwyMSBAQAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKworY29uc3QgY2hhciAqZ2l0aHN0cmVycm9yKGludCBlcnIpCit7CisJc3RhdGljIGNoYXIgYnVmZmVyWzQ4XTsKKwlzd2l0Y2ggKGVycikKKwl7CisJY2FzZSBIT1NUX05PVF9GT1VORDoKKwkJcmV0dXJuICJBdXRob3JpdGF0aXZlIGFuc3dlcjogaG9zdCBub3QgZm91bmQiOworCWNhc2UgTk9fREFUQToKKwkJcmV0dXJuICJWYWxpZCBuYW1lLCBubyBkYXRhIHJlY29yZCBvZiByZXF1ZXN0ZWQgdHlwZSI7CisJY2FzZSBOT19SRUNPVkVSWToKKwkJcmV0dXJuICJOb24gcmVjb3ZlcmFibGUgZXJyb3JzLCBGT1JNRVJSLCBSRUZVU0VELCBOT1RJTVAiOworCWNhc2UgVFJZX0FHQUlOOgorCQlyZXR1cm4gIk5vbi1hdXRob3JpdGF0aXZlIFwiaG9zdCBub3QgZm91bmRcIiwgb3IgU0VSVkVSRkFJTCI7CisJfQorCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICJOYW1lIHJlc29sdXRpb24gZXJyb3IgJWQiLCBlcnIpOworCXJldHVybiBidWZmZXI7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvaW5ldF9udG9wLmMgYi9jb21wYXQvaW5ldF9udG9wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzMDcyNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9pbmV0X250b3AuYwpAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJTlRFUk5FVCBTT0ZUV0FSRSBDT05TT1JUSVVNIERJU0NMQUlNUworICogQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBJTlRFUk5FVCBTT0ZUV0FSRQorICogQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworI2lmbmRlZiBOU19JTkFERFJTWgorI2RlZmluZSBOU19JTkFERFJTWgk0CisjZW5kaWYKKyNpZm5kZWYgTlNfSU42QUREUlNaCisjZGVmaW5lIE5TX0lONkFERFJTWgkxNgorI2VuZGlmCisjaWZuZGVmIE5TX0lOVDE2U1oKKyNkZWZpbmUgTlNfSU5UMTZTWgkyCisjZW5kaWYKKworLyoKKyAqIFdBUk5JTkc6IERvbid0IGV2ZW4gY29uc2lkZXIgdHJ5aW5nIHRvIGNvbXBpbGUgdGhpcyBvbiBhIHN5c3RlbSB3aGVyZQorICogc2l6ZW9mKGludCkgPCA0LiAgc2l6ZW9mKGludCkgPiA0IGlzIGZpbmU7IGFsbCB0aGUgd29ybGQncyBub3QgYSBWQVguCisgKi8KKworLyogY29uc3QgY2hhciAqCisgKiBpbmV0X250b3A0KHNyYywgZHN0LCBzaXplKQorICoJZm9ybWF0IGFuIElQdjQgYWRkcmVzcworICogcmV0dXJuOgorICoJYGRzdCcgKGFzIGEgY29uc3QpCisgKiBub3RlczoKKyAqCSgxKSB1c2VzIG5vIHN0YXRpY3MKKyAqCSgyKSB0YWtlcyBhIHVfY2hhciogbm90IGFuIGluX2FkZHIgYXMgaW5wdXQKKyAqIGF1dGhvcjoKKyAqCVBhdWwgVml4aWUsIDE5OTYuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2luZXRfbnRvcDQoY29uc3QgdV9jaGFyICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgZm10W10gPSAiJXUuJXUuJXUuJXUiOworCWNoYXIgdG1wW3NpemVvZiAiMjU1LjI1NS4yNTUuMjU1Il07CisJaW50IG5wcmludGVkOworCisJbnByaW50ZWQgPSBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCBmbXQsIHNyY1swXSwgc3JjWzFdLCBzcmNbMl0sIHNyY1szXSk7CisJaWYgKG5wcmludGVkIDwgMCkKKwkJcmV0dXJuIChOVUxMKTsJLyogd2UgYXNzdW1lICJlcnJubyIgd2FzIHNldCBieSAic25wcmludGYoKSIgKi8KKwlpZiAoKHNpemVfdClucHJpbnRlZCA+PSBzaXplKSB7CisJCWVycm5vID0gRU5PU1BDOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlzdHJsY3B5KGRzdCwgdG1wLCBzaXplKTsKKwlyZXR1cm4gKGRzdCk7Cit9CisKKyNpZm5kZWYgTk9fSVBWNgorLyogY29uc3QgY2hhciAqCisgKiBpbmV0X250b3A2KHNyYywgZHN0LCBzaXplKQorICoJY29udmVydCBJUHY2IGJpbmFyeSBhZGRyZXNzIGludG8gcHJlc2VudGF0aW9uIChwcmludGFibGUpIGZvcm1hdAorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgoraW5ldF9udG9wNihjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKK3sKKwkvKgorCSAqIE5vdGUgdGhhdCBpbnQzMl90IGFuZCBpbnQxNl90IG5lZWQgb25seSBiZSAiYXQgbGVhc3QiIGxhcmdlIGVub3VnaAorCSAqIHRvIGNvbnRhaW4gYSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHNpemUuICBPbiBzb21lIHN5c3RlbXMsIGxpa2UKKwkgKiBDcmF5cywgdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcyBhbiBpbnRlZ2VyIHZhcmlhYmxlIHdpdGggMTYgYml0cy4KKwkgKiBLZWVwIHRoaXMgaW4gbWluZCBpZiB5b3UgdGhpbmsgdGhpcyBmdW5jdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGNvZGVkCisJICogdG8gdXNlIHBvaW50ZXIgb3ZlcmxheXMuICBBbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgorCSAqLworCWNoYXIgdG1wW3NpemVvZiAiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6MjU1LjI1NS4yNTUuMjU1Il0sICp0cDsKKwlzdHJ1Y3QgeyBpbnQgYmFzZSwgbGVuOyB9IGJlc3QsIGN1cjsKKwl1bnNpZ25lZCBpbnQgd29yZHNbTlNfSU42QUREUlNaIC8gTlNfSU5UMTZTWl07CisJaW50IGk7CisKKwkvKgorCSAqIFByZXByb2Nlc3M6CisJICoJQ29weSB0aGUgaW5wdXQgKGJ5dGV3aXNlKSBhcnJheSBpbnRvIGEgd29yZHdpc2UgYXJyYXkuCisJICoJRmluZCB0aGUgbG9uZ2VzdCBydW4gb2YgMHgwMCdzIGluIHNyY1tdIGZvciA6OiBzaG9ydGhhbmRpbmcuCisJICovCisJbWVtc2V0KHdvcmRzLCAnXDAnLCBzaXplb2Ygd29yZHMpOworCWZvciAoaSA9IDA7IGkgPCBOU19JTjZBRERSU1o7IGkrKykKKwkJd29yZHNbaSAvIDJdIHw9IChzcmNbaV0gPDwgKCgxIC0gKGkgJSAyKSkgPDwgMykpOworCWJlc3QuYmFzZSA9IC0xOworCWJlc3QubGVuID0gMDsKKwljdXIuYmFzZSA9IC0xOworCWN1ci5sZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCAoTlNfSU42QUREUlNaIC8gTlNfSU5UMTZTWik7IGkrKykgeworCQlpZiAod29yZHNbaV0gPT0gMCkgeworCQkJaWYgKGN1ci5iYXNlID09IC0xKQorCQkJCWN1ci5iYXNlID0gaSwgY3VyLmxlbiA9IDE7CisJCQllbHNlCisJCQkJY3VyLmxlbisrOworCQl9IGVsc2UgeworCQkJaWYgKGN1ci5iYXNlICE9IC0xKSB7CisJCQkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCisJCQkJCWJlc3QgPSBjdXI7CisJCQkJY3VyLmJhc2UgPSAtMTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoY3VyLmJhc2UgIT0gLTEpIHsKKwkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCisJCQliZXN0ID0gY3VyOworCX0KKwlpZiAoYmVzdC5iYXNlICE9IC0xICYmIGJlc3QubGVuIDwgMikKKwkJYmVzdC5iYXNlID0gLTE7CisKKwkvKgorCSAqIEZvcm1hdCB0aGUgcmVzdWx0LgorCSAqLworCXRwID0gdG1wOworCWZvciAoaSA9IDA7IGkgPCAoTlNfSU42QUREUlNaIC8gTlNfSU5UMTZTWik7IGkrKykgeworCQkvKiBBcmUgd2UgaW5zaWRlIHRoZSBiZXN0IHJ1biBvZiAweDAwJ3M/ICovCisJCWlmIChiZXN0LmJhc2UgIT0gLTEgJiYgaSA+PSBiZXN0LmJhc2UgJiYKKwkJICAgIGkgPCAoYmVzdC5iYXNlICsgYmVzdC5sZW4pKSB7CisJCQlpZiAoaSA9PSBiZXN0LmJhc2UpCisJCQkJKnRwKysgPSAnOic7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBBcmUgd2UgZm9sbG93aW5nIGFuIGluaXRpYWwgcnVuIG9mIDB4MDBzIG9yIGFueSByZWFsIGhleD8gKi8KKwkJaWYgKGkgIT0gMCkKKwkJCSp0cCsrID0gJzonOworCQkvKiBJcyB0aGlzIGFkZHJlc3MgYW4gZW5jYXBzdWxhdGVkIElQdjQ/ICovCisJCWlmIChpID09IDYgJiYgYmVzdC5iYXNlID09IDAgJiYKKwkJICAgIChiZXN0LmxlbiA9PSA2IHx8IChiZXN0LmxlbiA9PSA1ICYmIHdvcmRzWzVdID09IDB4ZmZmZikpKSB7CisJCQlpZiAoIWluZXRfbnRvcDQoc3JjKzEyLCB0cCwgc2l6ZW9mIHRtcCAtICh0cCAtIHRtcCkpKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl0cCArPSBzdHJsZW4odHApOworCQkJYnJlYWs7CisJCX0KKwkJdHAgKz0gc25wcmludGYodHAsIHNpemVvZiB0bXAgLSAodHAgLSB0bXApLCAiJXgiLCB3b3Jkc1tpXSk7CisJfQorCS8qIFdhcyBpdCBhIHRyYWlsaW5nIHJ1biBvZiAweDAwJ3M/ICovCisJaWYgKGJlc3QuYmFzZSAhPSAtMSAmJiAoYmVzdC5iYXNlICsgYmVzdC5sZW4pID09CisJICAgIChOU19JTjZBRERSU1ogLyBOU19JTlQxNlNaKSkKKwkJKnRwKysgPSAnOic7CisJKnRwKysgPSAnXDAnOworCisJLyoKKwkgKiBDaGVjayBmb3Igb3ZlcmZsb3csIGNvcHksIGFuZCB3ZSdyZSBkb25lLgorCSAqLworCWlmICgoc2l6ZV90KSh0cCAtIHRtcCkgPiBzaXplKSB7CisJCWVycm5vID0gRU5PU1BDOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlzdHJsY3B5KGRzdCwgdG1wLCBzaXplKTsKKwlyZXR1cm4gKGRzdCk7Cit9CisjZW5kaWYKKworLyogY2hhciAqCisgKiBpbmV0X250b3AoYWYsIHNyYywgZHN0LCBzaXplKQorICoJY29udmVydCBhIG5ldHdvcmsgZm9ybWF0IGFkZHJlc3MgdG8gcHJlc2VudGF0aW9uIGZvcm1hdC4KKyAqIHJldHVybjoKKyAqCXBvaW50ZXIgdG8gcHJlc2VudGF0aW9uIGZvcm1hdCBhZGRyZXNzIChgZHN0JyksIG9yIE5VTEwgKHNlZSBlcnJubykuCisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitjb25zdCBjaGFyICoKK2luZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKK3sKKwlzd2l0Y2ggKGFmKSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gKGluZXRfbnRvcDQoc3JjLCBkc3QsIHNpemUpKTsKKyNpZm5kZWYgTk9fSVBWNgorCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiAoaW5ldF9udG9wNihzcmMsIGRzdCwgc2l6ZSkpOworI2VuZGlmCisJZGVmYXVsdDoKKwkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9pbmV0X3B0b24uYyBiL2NvbXBhdC9pbmV0X3B0b24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjlhMGE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2luZXRfcHRvbi5jCkBAIC0wLDAgKzEsMjE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEgIEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJTlRFUk5FVCBTT0ZUV0FSRSBDT05TT1JUSVVNCisgKiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTAorICogSU5URVJORVQgU09GVFdBUkUgQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCisgKiBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HCisgKiBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAqIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworI2lmbmRlZiBOU19JTlQxNlNaCisjZGVmaW5lIE5TX0lOVDE2U1ogICAgICAgMgorI2VuZGlmCisKKyNpZm5kZWYgTlNfSU5BRERSU1oKKyNkZWZpbmUgTlNfSU5BRERSU1ogICAgICA0CisjZW5kaWYKKworI2lmbmRlZiBOU19JTjZBRERSU1oKKyNkZWZpbmUgTlNfSU42QUREUlNaICAgIDE2CisjZW5kaWYKKworLyoKKyAqIFdBUk5JTkc6IERvbid0IGV2ZW4gY29uc2lkZXIgdHJ5aW5nIHRvIGNvbXBpbGUgdGhpcyBvbiBhIHN5c3RlbSB3aGVyZQorICogc2l6ZW9mKGludCkgPCA0LiAgc2l6ZW9mKGludCkgPiA0IGlzIGZpbmU7IGFsbCB0aGUgd29ybGQncyBub3QgYSBWQVguCisgKi8KKworc3RhdGljIGludCBpbmV0X3B0b240KGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0KTsKKyNpZm5kZWYgTk9fSVBWNgorc3RhdGljIGludCBpbmV0X3B0b242KGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0KTsKKyNlbmRpZgorCisvKiBpbnQKKyAqIGluZXRfcHRvbjQoc3JjLCBkc3QpCisgKiAgICAgIGxpa2UgaW5ldF9hdG9uKCkgYnV0IHdpdGhvdXQgYWxsIHRoZSBoZXhhZGVjaW1hbCBhbmQgc2hvcnRoYW5kLgorICogcmV0dXJuOgorICogICAgICAxIGlmIGBzcmMnIGlzIGEgdmFsaWQgZG90dGVkIHF1YWQsIGVsc2UgMC4KKyAqIG5vdGljZToKKyAqICAgICAgZG9lcyBub3QgdG91Y2ggYGRzdCcgdW5sZXNzIGl0J3MgcmV0dXJuaW5nIDEuCisgKiBhdXRob3I6CisgKiAgICAgIFBhdWwgVml4aWUsIDE5OTYuCisgKi8KK3N0YXRpYyBpbnQKK2luZXRfcHRvbjQoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QpCit7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGRpZ2l0c1tdID0gIjAxMjM0NTY3ODkiOworICAgICAgICBpbnQgc2F3X2RpZ2l0LCBvY3RldHMsIGNoOworICAgICAgICB1bnNpZ25lZCBjaGFyIHRtcFtOU19JTkFERFJTWl0sICp0cDsKKworICAgICAgICBzYXdfZGlnaXQgPSAwOworICAgICAgICBvY3RldHMgPSAwOworICAgICAgICAqKHRwID0gdG1wKSA9IDA7CisgICAgICAgIHdoaWxlICgoY2ggPSAqc3JjKyspICE9ICdcMCcpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwY2g7CisKKyAgICAgICAgICAgICAgICBpZiAoKHBjaCA9IHN0cmNocihkaWdpdHMsIGNoKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ldyA9ICp0cCAqIDEwICsgKHBjaCAtIGRpZ2l0cyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXcgPiAyNTUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAqdHAgPSBuZXc7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISBzYXdfZGlnaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrb2N0ZXRzID4gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXdfZGlnaXQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJy4nICYmIHNhd19kaWdpdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9jdGV0cyA9PSA0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgICAgICAgICAgKisrdHAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgc2F3X2RpZ2l0ID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9jdGV0cyA8IDQpCisgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgbWVtY3B5KGRzdCwgdG1wLCBOU19JTkFERFJTWik7CisgICAgICAgIHJldHVybiAoMSk7Cit9CisKKy8qIGludAorICogaW5ldF9wdG9uNihzcmMsIGRzdCkKKyAqICAgICAgY29udmVydCBwcmVzZW50YXRpb24gbGV2ZWwgYWRkcmVzcyB0byBuZXR3b3JrIG9yZGVyIGJpbmFyeSBmb3JtLgorICogcmV0dXJuOgorICogICAgICAxIGlmIGBzcmMnIGlzIGEgdmFsaWQgW1JGQzE4ODQgMi4yXSBhZGRyZXNzLCBlbHNlIDAuCisgKiBub3RpY2U6CisgKiAgICAgICgxKSBkb2VzIG5vdCB0b3VjaCBgZHN0JyB1bmxlc3MgaXQncyByZXR1cm5pbmcgMS4KKyAqICAgICAgKDIpIDo6IGluIGEgZnVsbCBhZGRyZXNzIGlzIHNpbGVudGx5IGlnbm9yZWQuCisgKiBjcmVkaXQ6CisgKiAgICAgIGluc3BpcmVkIGJ5IE1hcmsgQW5kcmV3cy4KKyAqIGF1dGhvcjoKKyAqICAgICAgUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworCisjaWZuZGVmIE5PX0lQVjYKK3N0YXRpYyBpbnQKK2luZXRfcHRvbjYoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QpCit7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHhkaWdpdHNfbFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICB4ZGlnaXRzX3VbXSA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKKyAgICAgICAgdW5zaWduZWQgY2hhciB0bXBbTlNfSU42QUREUlNaXSwgKnRwLCAqZW5kcCwgKmNvbG9ucDsKKyAgICAgICAgY29uc3QgY2hhciAqeGRpZ2l0cywgKmN1cnRvazsKKyAgICAgICAgaW50IGNoLCBzYXdfeGRpZ2l0OworICAgICAgICB1bnNpZ25lZCBpbnQgdmFsOworCisgICAgICAgIG1lbXNldCgodHAgPSB0bXApLCAnXDAnLCBOU19JTjZBRERSU1opOworICAgICAgICBlbmRwID0gdHAgKyBOU19JTjZBRERSU1o7CisgICAgICAgIGNvbG9ucCA9IE5VTEw7CisgICAgICAgIC8qIExlYWRpbmcgOjogcmVxdWlyZXMgc29tZSBzcGVjaWFsIGhhbmRsaW5nLiAqLworICAgICAgICBpZiAoKnNyYyA9PSAnOicpCisgICAgICAgICAgICAgICAgaWYgKCorK3NyYyAhPSAnOicpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICBjdXJ0b2sgPSBzcmM7CisgICAgICAgIHNhd194ZGlnaXQgPSAwOworICAgICAgICB2YWwgPSAwOworICAgICAgICB3aGlsZSAoKGNoID0gKnNyYysrKSAhPSAnXDAnKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGNoOworCisgICAgICAgICAgICAgICAgaWYgKChwY2ggPSBzdHJjaHIoKHhkaWdpdHMgPSB4ZGlnaXRzX2wpLCBjaCkpID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICBwY2ggPSBzdHJjaHIoKHhkaWdpdHMgPSB4ZGlnaXRzX3UpLCBjaCk7CisgICAgICAgICAgICAgICAgaWYgKHBjaCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPDw9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgfD0gKHBjaCAtIHhkaWdpdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA+IDB4ZmZmZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhd194ZGlnaXQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnOicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnRvayA9IHNyYzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2F3X3hkaWdpdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sb25wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ucCA9IHRwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cCArIE5TX0lOVDE2U1ogPiBlbmRwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgICAgICAgICAgKnRwKysgPSAodW5zaWduZWQgY2hhcikgKHZhbCA+PiA4KSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgICAgICAgICAqdHArKyA9ICh1bnNpZ25lZCBjaGFyKSB2YWwgJiAweGZmOworICAgICAgICAgICAgICAgICAgICAgICAgc2F3X3hkaWdpdCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnLicgJiYgKCh0cCArIE5TX0lOQUREUlNaKSA8PSBlbmRwKSAmJgorICAgICAgICAgICAgICAgICAgICBpbmV0X3B0b240KGN1cnRvaywgdHApID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHAgKz0gTlNfSU5BRERSU1o7CisgICAgICAgICAgICAgICAgICAgICAgICBzYXdfeGRpZ2l0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLyogJ1wwJyB3YXMgc2VlbiBieSBpbmV0X3B0b240KCkuICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNhd194ZGlnaXQpIHsKKyAgICAgICAgICAgICAgICBpZiAodHAgKyBOU19JTlQxNlNaID4gZW5kcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgKnRwKysgPSAodW5zaWduZWQgY2hhcikgKHZhbCA+PiA4KSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgKnRwKysgPSAodW5zaWduZWQgY2hhcikgdmFsICYgMHhmZjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29sb25wICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFNpbmNlIHNvbWUgbWVtbW92ZSgpJ3MgZXJyb25lb3VzbHkgZmFpbCB0byBoYW5kbGUKKyAgICAgICAgICAgICAgICAgKiBvdmVybGFwcGluZyByZWdpb25zLCB3ZSdsbCBkbyB0aGUgc2hpZnQgYnkgaGFuZC4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbiA9IHRwIC0gY29sb25wOworICAgICAgICAgICAgICAgIGludCBpOworCisgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBbLSBpXSA9IGNvbG9ucFtuIC0gaV07CisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvbnBbbiAtIGldID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdHAgPSBlbmRwOworICAgICAgICB9CisgICAgICAgIGlmICh0cCAhPSBlbmRwKQorICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIG1lbWNweShkc3QsIHRtcCwgTlNfSU42QUREUlNaKTsKKyAgICAgICAgcmV0dXJuICgxKTsKK30KKyNlbmRpZgorCisvKiBpbnQKKyAqIGlzY19uZXRfcHRvbihhZiwgc3JjLCBkc3QpCisgKiAgICAgIGNvbnZlcnQgZnJvbSBwcmVzZW50YXRpb24gZm9ybWF0ICh3aGljaCB1c3VhbGx5IG1lYW5zIEFTQ0lJIHByaW50YWJsZSkKKyAqICAgICAgdG8gbmV0d29yayBmb3JtYXQgKHdoaWNoIGlzIHVzdWFsbHkgc29tZSBraW5kIG9mIGJpbmFyeSBmb3JtYXQpLgorICogcmV0dXJuOgorICogICAgICAxIGlmIHRoZSBhZGRyZXNzIHdhcyB2YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBhZGRyZXNzIGZhbWlseQorICogICAgICAwIGlmIHRoZSBhZGRyZXNzIHdhc24ndCB2YWxpZCAoYGRzdCcgaXMgdW50b3VjaGVkIGluIHRoaXMgY2FzZSkKKyAqICAgICAgLTEgaWYgc29tZSBvdGhlciBlcnJvciBvY2N1cnJlZCAoYGRzdCcgaXMgdW50b3VjaGVkIGluIHRoaXMgY2FzZSwgdG9vKQorICogYXV0aG9yOgorICogICAgICBQYXVsIFZpeGllLCAxOTk2LgorICovCitpbnQKK2luZXRfcHRvbihpbnQgYWYsIGNvbnN0IGNoYXIgKnNyYywgdm9pZCAqZHN0KQoreworICAgICAgICBzd2l0Y2ggKGFmKSB7CisgICAgICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gKGluZXRfcHRvbjQoc3JjLCBkc3QpKTsKKyNpZm5kZWYgTk9fSVBWNgorICAgICAgICBjYXNlIEFGX0lORVQ2OgorICAgICAgICAgICAgICAgIHJldHVybiAoaW5ldF9wdG9uNihzcmMsIGRzdCkpOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZXJybm8gPSBFQUZOT1NVUFBPUlQ7CisgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIH0KKyAgICAgICAgLyogTk9UUkVBQ0hFRCAqLworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L21lbW1lbS5jIGIvY29tcGF0L21lbW1lbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YmNiNDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbWVtbWVtLmMKQEAgLTAsMCArMSwzMiBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCit2b2lkICpnaXRtZW1tZW0oY29uc3Qgdm9pZCAqaGF5c3RhY2ssIHNpemVfdCBoYXlzdGFja19sZW4sCisgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbmVlZGxlLCBzaXplX3QgbmVlZGxlX2xlbikKK3sKKwljb25zdCBjaGFyICpiZWdpbiA9IGhheXN0YWNrOworCWNvbnN0IGNoYXIgKmxhc3RfcG9zc2libGUgPSBiZWdpbiArIGhheXN0YWNrX2xlbiAtIG5lZWRsZV9sZW47CisJY29uc3QgY2hhciAqdGFpbCA9IG5lZWRsZTsKKwljaGFyIHBvaW50OworCisJLyoKKwkgKiBUaGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZW1wdHkgc3RyaW5nIGlzIGRlZW1lZCB0byBvY2N1ciBhdAorCSAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZy4KKwkgKi8KKwlpZiAobmVlZGxlX2xlbiA9PSAwKQorCQlyZXR1cm4gKHZvaWQgKiliZWdpbjsKKworCS8qCisJICogU2FuaXR5IGNoZWNrLCBvdGhlcndpc2UgdGhlIGxvb3AgbWlnaHQgc2VhcmNoIHRocm91Z2ggdGhlIHdob2xlCisJICogbWVtb3J5LgorCSAqLworCWlmIChoYXlzdGFja19sZW4gPCBuZWVkbGVfbGVuKQorCQlyZXR1cm4gTlVMTDsKKworCXBvaW50ID0gKnRhaWwrKzsKKwlmb3IgKDsgYmVnaW4gPD0gbGFzdF9wb3NzaWJsZTsgYmVnaW4rKykgeworCQlpZiAoKmJlZ2luID09IHBvaW50ICYmICFtZW1jbXAoYmVnaW4gKyAxLCB0YWlsLCBuZWVkbGVfbGVuIC0gMSkpCisJCQlyZXR1cm4gKHZvaWQgKiliZWdpbjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9taW5ndy5jIGIvY29tcGF0L21pbmd3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlMGI2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9taW5ndy5jCkBAIC0wLDAgKzEsMjkwMCBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgIndpbjMyLmgiCisjaW5jbHVkZSA8Y29uaW8uaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgIi4uL3N0cmJ1Zi5oIgorI2luY2x1ZGUgIi4uL3J1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiLi4vY2FjaGUuaCIKKyNpbmNsdWRlICJ3aW4zMi9sYXp5bG9hZC5oIgorI2luY2x1ZGUgIi4uL2NvbmZpZy5oIgorI2luY2x1ZGUgImRpci5oIgorCisjZGVmaW5lIEhDQVNUKHR5cGUsIGhhbmRsZSkgKCh0eXBlKShpbnRwdHJfdCloYW5kbGUpCisKK3N0YXRpYyBjb25zdCBpbnQgZGVsYXlbXSA9IHsgMCwgMSwgMTAsIDIwLCA0MCB9OworCit2b2lkIG9wZW5faW5fZ2RiKHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWV4dGVybiBjaGFyICpfcGdtcHRyOworCisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgIm1pbnR0eSIsICJnZGIiLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZjcC5hcmdzLCAiLS1waWQ9JWQiLCBnZXRwaWQoKSk7CisJY3AuY2xlYW5fb25fZXhpdCA9IDE7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNwKSA8IDApCisJCWRpZV9lcnJubygiQ291bGQgbm90IHN0YXJ0IGdkYiIpOworCXNsZWVwKDEpOworfQorCitpbnQgZXJyX3dpbl90b19wb3NpeChEV09SRCB3aW5lcnIpCit7CisJaW50IGVycm9yID0gRU5PU1lTOworCXN3aXRjaCh3aW5lcnIpIHsKKwljYXNlIEVSUk9SX0FDQ0VTU19ERU5JRUQ6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0FDQ09VTlRfRElTQUJMRUQ6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0FDQ09VTlRfUkVTVFJJQ1RJT046IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0FMUkVBRFlfQVNTSUdORUQ6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfQUxSRUFEWV9FWElTVFM6IGVycm9yID0gRUVYSVNUOyBicmVhazsKKwljYXNlIEVSUk9SX0FSSVRITUVUSUNfT1ZFUkZMT1c6IGVycm9yID0gRVJBTkdFOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9DT01NQU5EOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfREVWSUNFOiBlcnJvciA9IEVOT0RFVjsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfRFJJVkVSX0xFVkVMOiBlcnJvciA9IEVOWElPOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9FWEVfRk9STUFUOiBlcnJvciA9IEVOT0VYRUM7IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX0ZPUk1BVDogZXJyb3IgPSBFTk9FWEVDOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9MRU5HVEg6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9QQVRITkFNRTogZXJyb3IgPSBFTk9FTlQ7IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX1BJUEU6IGVycm9yID0gRVBJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX1VOSVQ6IGVycm9yID0gRU5PREVWOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9VU0VSTkFNRTogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfQlJPS0VOX1BJUEU6IGVycm9yID0gRVBJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfQlVGRkVSX09WRVJGTE9XOiBlcnJvciA9IEVOQU1FVE9PTE9ORzsgYnJlYWs7CisJY2FzZSBFUlJPUl9CVVNZOiBlcnJvciA9IEVCVVNZOyBicmVhazsKKwljYXNlIEVSUk9SX0JVU1lfRFJJVkU6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQ6IGVycm9yID0gRU5PU1lTOyBicmVhazsKKwljYXNlIEVSUk9SX0NBTk5PVF9NQUtFOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9DQU5UT1BFTjogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfQ0FOVFJFQUQ6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX0NBTlRXUklURTogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfQ1JDOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9DVVJSRU5UX0RJUkVDVE9SWTogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfREVWSUNFX0lOX1VTRTogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9ERVZfTk9UX0VYSVNUOiBlcnJvciA9IEVOT0RFVjsgYnJlYWs7CisJY2FzZSBFUlJPUl9ESVJFQ1RPUlk6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0RJUl9OT1RfRU1QVFk6IGVycm9yID0gRU5PVEVNUFRZOyBicmVhazsKKwljYXNlIEVSUk9SX0RJU0tfQ0hBTkdFOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9ESVNLX0ZVTEw6IGVycm9yID0gRU5PU1BDOyBicmVhazsKKwljYXNlIEVSUk9SX0RSSVZFX0xPQ0tFRDogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9FTlZWQVJfTk9UX0ZPVU5EOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9FWEVfTUFSS0VEX0lOVkFMSUQ6IGVycm9yID0gRU5PRVhFQzsgYnJlYWs7CisJY2FzZSBFUlJPUl9GSUxFTkFNRV9FWENFRF9SQU5HRTogZXJyb3IgPSBFTkFNRVRPT0xPTkc7IGJyZWFrOworCWNhc2UgRVJST1JfRklMRV9FWElTVFM6IGVycm9yID0gRUVYSVNUOyBicmVhazsKKwljYXNlIEVSUk9SX0ZJTEVfSU5WQUxJRDogZXJyb3IgPSBFTk9ERVY7IGJyZWFrOworCWNhc2UgRVJST1JfRklMRV9OT1RfRk9VTkQ6IGVycm9yID0gRU5PRU5UOyBicmVhazsKKwljYXNlIEVSUk9SX0dFTl9GQUlMVVJFOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9IQU5ETEVfRElTS19GVUxMOiBlcnJvciA9IEVOT1NQQzsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSOiBlcnJvciA9IEVOT01FTTsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0FDQ0VTUzogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9BRERSRVNTOiBlcnJvciA9IEVGQVVMVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0JMT0NLOiBlcnJvciA9IEVGQVVMVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0RBVEE6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfRFJJVkU6IGVycm9yID0gRU5PREVWOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfRVhFX1NJR05BVFVSRTogZXJyb3IgPSBFTk9FWEVDOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfRkxBR1M6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfRlVOQ1RJT046IGVycm9yID0gRU5PU1lTOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfSEFORExFOiBlcnJvciA9IEVCQURGOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfTE9HT05fSE9VUlM6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfTkFNRTogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9PV05FUjogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9QQVJBTUVURVI6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfUEFTU1dPUkQ6IGVycm9yID0gRVBFUk07IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9QUklNQVJZX0dST1VQOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX1NJR05BTF9OVU1CRVI6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfVEFSR0VUX0hBTkRMRTogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9XT1JLU1RBVElPTjogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfSU9fREVWSUNFOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9JT19JTkNPTVBMRVRFOiBlcnJvciA9IEVJTlRSOyBicmVhazsKKwljYXNlIEVSUk9SX0xPQ0tFRDogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9MT0NLX1ZJT0xBVElPTjogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfTE9HT05fRkFJTFVSRTogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfTUFQUEVEX0FMSUdOTUVOVDogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfTUVUQV9FWFBBTlNJT05fVE9PX0xPTkc6IGVycm9yID0gRTJCSUc7IGJyZWFrOworCWNhc2UgRVJST1JfTU9SRV9EQVRBOiBlcnJvciA9IEVQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX05FR0FUSVZFX1NFRUs6IGVycm9yID0gRVNQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX05PQUNDRVNTOiBlcnJvciA9IEVGQVVMVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9OT05FX01BUFBFRDogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk6IGVycm9yID0gRU5PTUVNOyBicmVhazsKKwljYXNlIEVSUk9SX05PVF9SRUFEWTogZXJyb3IgPSBFQUdBSU47IGJyZWFrOworCWNhc2UgRVJST1JfTk9UX1NBTUVfREVWSUNFOiBlcnJvciA9IEVYREVWOyBicmVhazsKKwljYXNlIEVSUk9SX05PX0RBVEE6IGVycm9yID0gRVBJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfTk9fTU9SRV9TRUFSQ0hfSEFORExFUzogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfTk9fUFJPQ19TTE9UUzogZXJyb3IgPSBFQUdBSU47IGJyZWFrOworCWNhc2UgRVJST1JfTk9fU1VDSF9QUklWSUxFR0U6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX09QRU5fRkFJTEVEOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9PUEVOX0ZJTEVTOiBlcnJvciA9IEVCVVNZOyBicmVhazsKKwljYXNlIEVSUk9SX09QRVJBVElPTl9BQk9SVEVEOiBlcnJvciA9IEVJTlRSOyBicmVhazsKKwljYXNlIEVSUk9SX09VVE9GTUVNT1JZOiBlcnJvciA9IEVOT01FTTsgYnJlYWs7CisJY2FzZSBFUlJPUl9QQVNTV09SRF9FWFBJUkVEOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9QQVRIX0JVU1k6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfUEFUSF9OT1RfRk9VTkQ6IGVycm9yID0gRU5PRU5UOyBicmVhazsKKwljYXNlIEVSUk9SX1BJUEVfQlVTWTogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9QSVBFX0NPTk5FQ1RFRDogZXJyb3IgPSBFUElQRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9QSVBFX0xJU1RFTklORzogZXJyb3IgPSBFUElQRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9QSVBFX05PVF9DT05ORUNURUQ6IGVycm9yID0gRVBJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfUFJJVklMRUdFX05PVF9IRUxEOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9SRUFEX0ZBVUxUOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9TRUVLOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9TRUVLX09OX0RFVklDRTogZXJyb3IgPSBFU1BJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfU0hBUklOR19CVUZGRVJfRVhDRUVERUQ6IGVycm9yID0gRU5GSUxFOyBicmVhazsKKwljYXNlIEVSUk9SX1NIQVJJTkdfVklPTEFUSU9OOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9TVEFDS19PVkVSRkxPVzogZXJyb3IgPSBFTk9NRU07IGJyZWFrOworCWNhc2UgRVJST1JfU1VDQ0VTUzogQlVHKCJlcnJfd2luX3RvX3Bvc2l4KCkgY2FsbGVkIHdpdGhvdXQgYW4gZXJyb3IhIik7CisJY2FzZSBFUlJPUl9TV0FQRVJST1I6IGVycm9yID0gRU5PRU5UOyBicmVhazsKKwljYXNlIEVSUk9SX1RPT19NQU5ZX01PRFVMRVM6IGVycm9yID0gRU1GSUxFOyBicmVhazsKKwljYXNlIEVSUk9SX1RPT19NQU5ZX09QRU5fRklMRVM6IGVycm9yID0gRU1GSUxFOyBicmVhazsKKwljYXNlIEVSUk9SX1VOUkVDT0dOSVpFRF9NRURJQTogZXJyb3IgPSBFTlhJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9VTlJFQ09HTklaRURfVk9MVU1FOiBlcnJvciA9IEVOT0RFVjsgYnJlYWs7CisJY2FzZSBFUlJPUl9XQUlUX05PX0NISUxEUkVOOiBlcnJvciA9IEVDSElMRDsgYnJlYWs7CisJY2FzZSBFUlJPUl9XUklURV9GQVVMVDogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfV1JJVEVfUFJPVEVDVDogZXJyb3IgPSBFUk9GUzsgYnJlYWs7CisJfQorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfZmlsZV9pbl91c2VfZXJyb3IoRFdPUkQgZXJyY29kZSkKK3sKKwlzd2l0Y2ggKGVycmNvZGUpIHsKKwljYXNlIEVSUk9SX1NIQVJJTkdfVklPTEFUSU9OOgorCWNhc2UgRVJST1JfQUNDRVNTX0RFTklFRDoKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF95ZXNfbm9fYW5zd2VyKHZvaWQpCit7CisJY2hhciBhbnN3ZXJbMTAyNF07CisKKwlpZiAoZmdldHMoYW5zd2VyLCBzaXplb2YoYW5zd2VyKSwgc3RkaW4pKSB7CisJCXNpemVfdCBhbnN3ZXJfbGVuID0gc3RybGVuKGFuc3dlcik7CisJCWludCBnb3RfZnVsbF9saW5lID0gMCwgYzsKKworCQkvKiByZW1vdmUgdGhlIG5ld2xpbmUgKi8KKwkJaWYgKGFuc3dlcl9sZW4gPj0gMiAmJiBhbnN3ZXJbYW5zd2VyX2xlbi0yXSA9PSAnXHInKSB7CisJCQlhbnN3ZXJbYW5zd2VyX2xlbi0yXSA9ICdcMCc7CisJCQlnb3RfZnVsbF9saW5lID0gMTsKKwkJfSBlbHNlIGlmIChhbnN3ZXJfbGVuID49IDEgJiYgYW5zd2VyW2Fuc3dlcl9sZW4tMV0gPT0gJ1xuJykgeworCQkJYW5zd2VyW2Fuc3dlcl9sZW4tMV0gPSAnXDAnOworCQkJZ290X2Z1bGxfbGluZSA9IDE7CisJCX0KKwkJLyogZmx1c2ggdGhlIGJ1ZmZlciBpbiBjYXNlIHdlIGRpZCBub3QgZ2V0IHRoZSBmdWxsIGxpbmUgKi8KKwkJaWYgKCFnb3RfZnVsbF9saW5lKQorCQkJd2hpbGUgKChjID0gZ2V0Y2hhcigpKSAhPSBFT0YgJiYgYyAhPSAnXG4nKQorCQkJCTsKKwl9IGVsc2UKKwkJLyogd2UgY291bGQgbm90IHJlYWQsIHJldHVybiB0aGUKKwkJICogZGVmYXVsdCBhbnN3ZXIgd2hpY2ggaXMgbm8gKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAodG9sb3dlcihhbnN3ZXJbMF0pID09ICd5JyAmJiAhYW5zd2VyWzFdKQorCQlyZXR1cm4gMTsKKwlpZiAoIXN0cm5jYXNlY21wKGFuc3dlciwgInllcyIsIHNpemVvZihhbnN3ZXIpKSkKKwkJcmV0dXJuIDE7CisJaWYgKHRvbG93ZXIoYW5zd2VyWzBdKSA9PSAnbicgJiYgIWFuc3dlclsxXSkKKwkJcmV0dXJuIDA7CisJaWYgKCFzdHJuY2FzZWNtcChhbnN3ZXIsICJubyIsIHNpemVvZihhbnN3ZXIpKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBkaWQgbm90IGZpbmQgYW4gYW5zd2VyIHdlIHVuZGVyc3RhbmQgKi8KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgYXNrX3llc19ub19pZl9wb3NzaWJsZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwljaGFyIHF1ZXN0aW9uWzQwOTZdOworCWNvbnN0IGNoYXIgKnJldHJ5X2hvb2tbXSA9IHsgTlVMTCwgTlVMTCwgTlVMTCB9OworCXZhX2xpc3QgYXJnczsKKworCXZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisJdnNucHJpbnRmKHF1ZXN0aW9uLCBzaXplb2YocXVlc3Rpb24pLCBmb3JtYXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKworCWlmICgocmV0cnlfaG9va1swXSA9IG1pbmd3X2dldGVudigiR0lUX0FTS19ZRVNOTyIpKSkgeworCQlyZXRyeV9ob29rWzFdID0gcXVlc3Rpb247CisJCXJldHVybiAhcnVuX2NvbW1hbmRfdl9vcHQocmV0cnlfaG9vaywgMCk7CisJfQorCisJaWYgKCFpc2F0dHkoX2ZpbGVubyhzdGRpbikpIHx8ICFpc2F0dHkoX2ZpbGVubyhzdGRlcnIpKSkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoMSkgeworCQlpbnQgYW5zd2VyOworCQlmcHJpbnRmKHN0ZGVyciwgIiVzICh5L24pICIsIHF1ZXN0aW9uKTsKKworCQlpZiAoKGFuc3dlciA9IHJlYWRfeWVzX25vX2Fuc3dlcigpKSA+PSAwKQorCQkJcmV0dXJuIGFuc3dlcjsKKworCQlmcHJpbnRmKHN0ZGVyciwgIlNvcnJ5LCBJIGRpZCBub3QgdW5kZXJzdGFuZCB5b3VyIGFuc3dlci4gIgorCQkJCSJQbGVhc2UgdHlwZSAneScgb3IgJ24nXG4iKTsKKwl9Cit9CisKKy8qIFdpbmRvd3Mgb25seSAqLworZW51bSBoaWRlX2RvdGZpbGVzX3R5cGUgeworCUhJREVfRE9URklMRVNfRkFMU0UgPSAwLAorCUhJREVfRE9URklMRVNfVFJVRSwKKwlISURFX0RPVEZJTEVTX0RPVEdJVE9OTFkKK307CisKK3N0YXRpYyBpbnQgY29yZV9yZXN0cmljdF9pbmhlcml0ZWRfaGFuZGxlcyA9IC0xOworc3RhdGljIGVudW0gaGlkZV9kb3RmaWxlc190eXBlIGhpZGVfZG90ZmlsZXMgPSBISURFX0RPVEZJTEVTX0RPVEdJVE9OTFk7CitzdGF0aWMgY2hhciAqdW5zZXRfZW52aXJvbm1lbnRfdmFyaWFibGVzOworCitpbnQgbWluZ3dfY29yZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5oaWRlZG90ZmlsZXMiKSkgeworCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJkb3RnaXRvbmx5IikpCisJCQloaWRlX2RvdGZpbGVzID0gSElERV9ET1RGSUxFU19ET1RHSVRPTkxZOworCQllbHNlCisJCQloaWRlX2RvdGZpbGVzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnVuc2V0ZW52dmFycyIpKSB7CisJCWZyZWUodW5zZXRfZW52aXJvbm1lbnRfdmFyaWFibGVzKTsKKwkJdW5zZXRfZW52aXJvbm1lbnRfdmFyaWFibGVzID0geHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUucmVzdHJpY3Rpbmhlcml0ZWRoYW5kbGVzIikpIHsKKwkJaWYgKHZhbHVlICYmICFzdHJjYXNlY21wKHZhbHVlLCAiYXV0byIpKQorCQkJY29yZV9yZXN0cmljdF9pbmhlcml0ZWRfaGFuZGxlcyA9IC0xOworCQllbHNlCisJCQljb3JlX3Jlc3RyaWN0X2luaGVyaXRlZF9oYW5kbGVzID0KKwkJCQlnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCisvKiBOb3JtYWxpemVzIE5UIHBhdGhzIGFzIHJldHVybmVkIGJ5IHNvbWUgbG93LWxldmVsIEFQSXMuICovCitzdGF0aWMgd2NoYXJfdCAqbm9ybWFsaXplX250cGF0aCh3Y2hhcl90ICp3YnVmKQoreworCWludCBpOworCS8qIGZpeCBhYnNvbHV0ZSBwYXRoIHByZWZpeGVzICovCisJaWYgKHdidWZbMF0gPT0gJ1xcJykgeworCQkvKiBzdHJpcCBOVCBuYW1lc3BhY2UgcHJlZml4ZXMgKi8KKwkJaWYgKCF3Y3NuY21wKHdidWYsIEwiXFw/P1xcIiwgNCkgfHwKKwkJICAgICF3Y3NuY21wKHdidWYsIEwiXFxcXD9cXCIsIDQpKQorCQkJd2J1ZiArPSA0OworCQllbHNlIGlmICghd2NzbmljbXAod2J1ZiwgTCJcXERvc0RldmljZXNcXCIsIDEyKSkKKwkJCXdidWYgKz0gMTI7CisJCS8qIHJlcGxhY2UgcmVtYWluaW5nICcuLi5VTkNcJyB3aXRoICdcXCcgKi8KKwkJaWYgKCF3Y3NuaWNtcCh3YnVmLCBMIlVOQ1xcIiwgNCkpIHsKKwkJCXdidWYgKz0gMjsKKwkJCSp3YnVmID0gJ1xcJzsKKwkJfQorCX0KKwkvKiBjb252ZXJ0IGJhY2tzbGFzaGVzIHRvIHNsYXNoZXMgKi8KKwlmb3IgKGkgPSAwOyB3YnVmW2ldOyBpKyspCisJCWlmICh3YnVmW2ldID09ICdcXCcpCisJCQl3YnVmW2ldID0gJy8nOworCXJldHVybiB3YnVmOworfQorCitpbnQgbWluZ3dfdW5saW5rKGNvbnN0IGNoYXIgKnBhdGhuYW1lKQoreworCWludCByZXQsIHRyaWVzID0gMDsKKwl3Y2hhcl90IHdwYXRobmFtZVtNQVhfUEFUSF07CisJaWYgKHh1dGZ0b3djc19wYXRoKHdwYXRobmFtZSwgcGF0aG5hbWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogcmVhZC1vbmx5IGZpbGVzIGNhbm5vdCBiZSByZW1vdmVkICovCisJX3djaG1vZCh3cGF0aG5hbWUsIDA2NjYpOworCXdoaWxlICgocmV0ID0gX3d1bmxpbmsod3BhdGhuYW1lKSkgPT0gLTEgJiYgdHJpZXMgPCBBUlJBWV9TSVpFKGRlbGF5KSkgeworCQlpZiAoIWlzX2ZpbGVfaW5fdXNlX2Vycm9yKEdldExhc3RFcnJvcigpKSkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBXZSBhc3N1bWUgdGhhdCBzb21lIG90aGVyIHByb2Nlc3MgaGFkIHRoZSBzb3VyY2Ugb3IKKwkJICogZGVzdGluYXRpb24gZmlsZSBvcGVuIGF0IHRoZSB3cm9uZyBtb21lbnQgYW5kIHJldHJ5LgorCQkgKiBJbiBvcmRlciB0byBnaXZlIHRoZSBvdGhlciBwcm9jZXNzIGEgaGlnaGVyIGNoYW5jZSB0bworCQkgKiBjb21wbGV0ZSBpdHMgb3BlcmF0aW9uLCB3ZSBnaXZlIHVwIG91ciB0aW1lIHNsaWNlIG5vdy4KKwkJICogSWYgd2UgaGF2ZSB0byByZXRyeSBhZ2Fpbiwgd2UgZG8gc2xlZXAgYSBiaXQuCisJCSAqLworCQlTbGVlcChkZWxheVt0cmllc10pOworCQl0cmllcysrOworCX0KKwl3aGlsZSAocmV0ID09IC0xICYmIGlzX2ZpbGVfaW5fdXNlX2Vycm9yKEdldExhc3RFcnJvcigpKSAmJgorCSAgICAgICBhc2tfeWVzX25vX2lmX3Bvc3NpYmxlKCJVbmxpbmsgb2YgZmlsZSAnJXMnIGZhaWxlZC4gIgorCQkJIlNob3VsZCBJIHRyeSBhZ2Fpbj8iLCBwYXRobmFtZSkpCisJICAgICAgIHJldCA9IF93dW5saW5rKHdwYXRobmFtZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpc19kaXJfZW1wdHkoY29uc3Qgd2NoYXJfdCAqd3BhdGgpCit7CisJV0lOMzJfRklORF9EQVRBVyBmaW5kYnVmOworCUhBTkRMRSBoYW5kbGU7CisJd2NoYXJfdCB3YnVmW01BWF9QQVRIICsgMl07CisJd2NzY3B5KHdidWYsIHdwYXRoKTsKKwl3Y3NjYXQod2J1ZiwgTCJcXCoiKTsKKwloYW5kbGUgPSBGaW5kRmlyc3RGaWxlVyh3YnVmLCAmZmluZGJ1Zik7CisJaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwkJcmV0dXJuIEdldExhc3RFcnJvcigpID09IEVSUk9SX05PX01PUkVfRklMRVM7CisKKwl3aGlsZSAoIXdjc2NtcChmaW5kYnVmLmNGaWxlTmFtZSwgTCIuIikgfHwKKwkJCSF3Y3NjbXAoZmluZGJ1Zi5jRmlsZU5hbWUsIEwiLi4iKSkKKwkJaWYgKCFGaW5kTmV4dEZpbGVXKGhhbmRsZSwgJmZpbmRidWYpKSB7CisJCQlEV09SRCBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKwkJCUZpbmRDbG9zZShoYW5kbGUpOworCQkJcmV0dXJuIGVyciA9PSBFUlJPUl9OT19NT1JFX0ZJTEVTOworCQl9CisJRmluZENsb3NlKGhhbmRsZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBtaW5nd19ybWRpcihjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKwlpbnQgcmV0LCB0cmllcyA9IDA7CisJd2NoYXJfdCB3cGF0aG5hbWVbTUFYX1BBVEhdOworCWlmICh4dXRmdG93Y3NfcGF0aCh3cGF0aG5hbWUsIHBhdGhuYW1lKSA8IDApCisJCXJldHVybiAtMTsKKworCXdoaWxlICgocmV0ID0gX3dybWRpcih3cGF0aG5hbWUpKSA9PSAtMSAmJiB0cmllcyA8IEFSUkFZX1NJWkUoZGVsYXkpKSB7CisJCWlmICghaXNfZmlsZV9pbl91c2VfZXJyb3IoR2V0TGFzdEVycm9yKCkpKQorCQkJZXJybm8gPSBlcnJfd2luX3RvX3Bvc2l4KEdldExhc3RFcnJvcigpKTsKKwkJaWYgKGVycm5vICE9IEVBQ0NFUykKKwkJCWJyZWFrOworCQlpZiAoIWlzX2Rpcl9lbXB0eSh3cGF0aG5hbWUpKSB7CisJCQllcnJubyA9IEVOT1RFTVBUWTsKKwkJCWJyZWFrOworCQl9CisJCS8qCisJCSAqIFdlIGFzc3VtZSB0aGF0IHNvbWUgb3RoZXIgcHJvY2VzcyBoYWQgdGhlIHNvdXJjZSBvcgorCQkgKiBkZXN0aW5hdGlvbiBmaWxlIG9wZW4gYXQgdGhlIHdyb25nIG1vbWVudCBhbmQgcmV0cnkuCisJCSAqIEluIG9yZGVyIHRvIGdpdmUgdGhlIG90aGVyIHByb2Nlc3MgYSBoaWdoZXIgY2hhbmNlIHRvCisJCSAqIGNvbXBsZXRlIGl0cyBvcGVyYXRpb24sIHdlIGdpdmUgdXAgb3VyIHRpbWUgc2xpY2Ugbm93LgorCQkgKiBJZiB3ZSBoYXZlIHRvIHJldHJ5IGFnYWluLCB3ZSBkbyBzbGVlcCBhIGJpdC4KKwkJICovCisJCVNsZWVwKGRlbGF5W3RyaWVzXSk7CisJCXRyaWVzKys7CisJfQorCXdoaWxlIChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUFDQ0VTICYmIGlzX2ZpbGVfaW5fdXNlX2Vycm9yKEdldExhc3RFcnJvcigpKSAmJgorCSAgICAgICBhc2tfeWVzX25vX2lmX3Bvc3NpYmxlKCJEZWxldGlvbiBvZiBkaXJlY3RvcnkgJyVzJyBmYWlsZWQuICIKKwkJCSJTaG91bGQgSSB0cnkgYWdhaW4/IiwgcGF0aG5hbWUpKQorCSAgICAgICByZXQgPSBfd3JtZGlyKHdwYXRobmFtZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmVlZHNfaGlkaW5nKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqYmFzZW5hbWU7CisKKwlpZiAoaGlkZV9kb3RmaWxlcyA9PSBISURFX0RPVEZJTEVTX0ZBTFNFKQorCQlyZXR1cm4gMDsKKworCS8qIFdlIGNhbm5vdCB1c2UgYmFzZW5hbWUoKSwgYXMgaXQgd291bGQgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgKi8KKwl3aW4zMl9za2lwX2Rvc19kcml2ZV9wcmVmaXgoKGNoYXIgKiopJnBhdGgpOworCWlmICghKnBhdGgpCisJCXJldHVybiAwOworCisJZm9yIChiYXNlbmFtZSA9IHBhdGg7ICpwYXRoOyBwYXRoKyspCisJCWlmIChpc19kaXJfc2VwKCpwYXRoKSkgeworCQkJZG8geworCQkJCXBhdGgrKzsKKwkJCX0gd2hpbGUgKGlzX2Rpcl9zZXAoKnBhdGgpKTsKKwkJCS8qIGlnbm9yZSB0cmFpbGluZyBzbGFzaGVzICovCisJCQlpZiAoKnBhdGgpCisJCQkJYmFzZW5hbWUgPSBwYXRoOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisKKwlpZiAoaGlkZV9kb3RmaWxlcyA9PSBISURFX0RPVEZJTEVTX1RSVUUpCisJCXJldHVybiAqYmFzZW5hbWUgPT0gJy4nOworCisJYXNzZXJ0KGhpZGVfZG90ZmlsZXMgPT0gSElERV9ET1RGSUxFU19ET1RHSVRPTkxZKTsKKwlyZXR1cm4gIXN0cm5jYXNlY21wKCIuZ2l0IiwgYmFzZW5hbWUsIDQpICYmCisJCSghYmFzZW5hbWVbNF0gfHwgaXNfZGlyX3NlcChiYXNlbmFtZVs0XSkpOworfQorCitzdGF0aWMgaW50IHNldF9oaWRkZW5fZmxhZyhjb25zdCB3Y2hhcl90ICpwYXRoLCBpbnQgc2V0KQoreworCURXT1JEIG9yaWdpbmFsID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHBhdGgpLCBtb2RpZmllZDsKKwlpZiAoc2V0KQorCQltb2RpZmllZCA9IG9yaWdpbmFsIHwgRklMRV9BVFRSSUJVVEVfSElEREVOOworCWVsc2UKKwkJbW9kaWZpZWQgPSBvcmlnaW5hbCAmIH5GSUxFX0FUVFJJQlVURV9ISURERU47CisJaWYgKG9yaWdpbmFsID09IG1vZGlmaWVkIHx8IFNldEZpbGVBdHRyaWJ1dGVzVyhwYXRoLCBtb2RpZmllZCkpCisJCXJldHVybiAwOworCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJcmV0dXJuIC0xOworfQorCitpbnQgbWluZ3dfbWtkaXIoY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUpCit7CisJaW50IHJldDsKKwl3Y2hhcl90IHdwYXRoW01BWF9QQVRIXTsKKworCWlmICghaXNfdmFsaWRfd2luMzJfcGF0aChwYXRoLCAwKSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICh4dXRmdG93Y3NfcGF0aCh3cGF0aCwgcGF0aCkgPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0ID0gX3dta2Rpcih3cGF0aCk7CisJaWYgKCFyZXQgJiYgbmVlZHNfaGlkaW5nKHBhdGgpKQorCQlyZXR1cm4gc2V0X2hpZGRlbl9mbGFnKHdwYXRoLCAxKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ2FsbGluZyBDcmVhdGVGaWxlKCkgdXNpbmcgRklMRV9BUFBFTkRfREFUQSBhbmQgd2l0aG91dCBGSUxFX1dSSVRFX0RBVEEKKyAqIGlzIGRvY3VtZW50ZWQgaW4gWzFdIGFzIG9wZW5pbmcgYSB3cml0YWJsZSBmaWxlIGhhbmRsZSBpbiBhcHBlbmQgbW9kZS4KKyAqIChJdCBpcyBiZWxpZXZlZCB0aGF0KSB0aGlzIGlzIGF0b21pYyBzaW5jZSBpdCBpcyBtYWludGFpbmVkIGJ5IHRoZQorICoga2VybmVsIHVubGlrZSB0aGUgT19BUFBFTkQgZmxhZyB3aGljaCBpcyByYWNpbHkgbWFpbnRhaW5lZCBieSB0aGUgQ1JULgorICoKKyAqIFsxXSBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL2Rlc2t0b3AvZmlsZWlvL2ZpbGUtYWNjZXNzLXJpZ2h0cy1jb25zdGFudHMKKyAqCisgKiBUaGlzIHRyaWNrIGRvZXMgbm90IGFwcGVhciB0byB3b3JrIGZvciBuYW1lZCBwaXBlcy4gIEluc3RlYWQgaXQgY3JlYXRlcworICogYSBuYW1lZCBwaXBlIGNsaWVudCBoYW5kbGUgdGhhdCBjYW5ub3QgYmUgd3JpdHRlbiB0by4gIENhbGxlcnMgc2hvdWxkCisgKiBqdXN0IHVzZSB0aGUgcmVndWxhciBfd29wZW4oKSBmb3IgdGhlbS4gIChBbmQgc2luY2UgY2xpZW50IGhhbmRsZSBnZXRzCisgKiBib3VuZCB0byBhIHVuaXF1ZSBzZXJ2ZXIgaGFuZGxlLCBpdCBpc24ndCByZWFsbHkgYW4gaXNzdWUuKQorICovCitzdGF0aWMgaW50IG1pbmd3X29wZW5fYXBwZW5kKHdjaGFyX3QgY29uc3QgKndmaWxlbmFtZSwgaW50IG9mbGFncywgLi4uKQoreworCUhBTkRMRSBoYW5kbGU7CisJaW50IGZkOworCURXT1JEIGNyZWF0ZSA9IChvZmxhZ3MgJiBPX0NSRUFUKSA/IE9QRU5fQUxXQVlTIDogT1BFTl9FWElTVElORzsKKworCS8qIG9ubHkgdGhlc2UgZmxhZ3MgYXJlIHN1cHBvcnRlZCAqLworCWlmICgob2ZsYWdzICYgfk9fQ1JFQVQpICE9IChPX1dST05MWSB8IE9fQVBQRU5EKSkKKwkJcmV0dXJuIGVycm5vID0gRU5PU1lTLCAtMTsKKworCS8qCisJICogRklMRV9TSEFSRV9XUklURSBpcyByZXF1aXJlZCB0byBwZXJtaXQgY2hpbGQgcHJvY2Vzc2VzCisJICogdG8gYXBwZW5kIHRvIHRoZSBmaWxlLgorCSAqLworCWhhbmRsZSA9IENyZWF0ZUZpbGVXKHdmaWxlbmFtZSwgRklMRV9BUFBFTkRfREFUQSwKKwkJCUZJTEVfU0hBUkVfV1JJVEUgfCBGSUxFX1NIQVJFX1JFQUQsCisJCQlOVUxMLCBjcmVhdGUsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgTlVMTCk7CisJaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworCQlEV09SRCBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKworCQkvKgorCQkgKiBTb21lIG5ldHdvcmsgc3RvcmFnZSBzb2x1dGlvbnMgKGUuZy4gSXNpbG9uKSBtaWdodCByZXR1cm4KKwkJICogRVJST1JfSU5WQUxJRF9QQVJBTUVURVIgaW5zdGVhZCBvZiBleHBlY3RlZCBlcnJvcgorCQkgKiBFUlJPUl9QQVRIX05PVF9GT1VORCwgd2hpY2ggcmVzdWx0cyBpbiBhbiB1bmtub3duIGVycm9yLiBJZgorCQkgKiBzbywgbGV0J3MgdHVybiB0aGUgZXJyb3IgdG8gRVJST1JfUEFUSF9OT1RfRk9VTkQgaW5zdGVhZC4KKwkJICovCisJCWlmIChlcnIgPT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpCisJCQllcnIgPSBFUlJPUl9QQVRIX05PVF9GT1VORDsKKworCQllcnJubyA9IGVycl93aW5fdG9fcG9zaXgoZXJyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogTm8gT19BUFBFTkQgaGVyZSwgYmVjYXVzZSB0aGUgQ1JUIHVzZXMgaXQgb25seSB0byByZXNldCB0aGUKKwkgKiBmaWxlIHBvaW50ZXIgdG8gRU9GIGJlZm9yZSBlYWNoIHdyaXRlKCk7IGJ1dCB0aGF0IGlzIG5vdAorCSAqIG5lY2Vzc2FyeSAoYW5kIG1heSBsZWFkIHRvIHJhY2VzKSBmb3IgYSBmaWxlIGNyZWF0ZWQgd2l0aAorCSAqIEZJTEVfQVBQRU5EX0RBVEEuCisJICovCisJZmQgPSBfb3Blbl9vc2ZoYW5kbGUoKGludHB0cl90KWhhbmRsZSwgT19CSU5BUlkpOworCWlmIChmZCA8IDApCisJCUNsb3NlSGFuZGxlKGhhbmRsZSk7CisJcmV0dXJuIGZkOworfQorCisvKgorICogRG9lcyB0aGUgcGF0aG5hbWUgbWFwIHRvIHRoZSBsb2NhbCBuYW1lZCBwaXBlIGZpbGVzeXN0ZW0/CisgKiBUaGF0IGlzLCBkb2VzIGl0IGhhdmUgYSAiLy8uL3BpcGUvIiBwcmVmaXg/CisgKi8KK3N0YXRpYyBpbnQgaXNfbG9jYWxfbmFtZWRfcGlwZV9wYXRoKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXJldHVybiAoaXNfZGlyX3NlcChmaWxlbmFtZVswXSkgJiYKKwkJaXNfZGlyX3NlcChmaWxlbmFtZVsxXSkgJiYKKwkJZmlsZW5hbWVbMl0gPT0gJy4nICAmJgorCQlpc19kaXJfc2VwKGZpbGVuYW1lWzNdKSAmJgorCQkhc3RybmNhc2VjbXAoZmlsZW5hbWUrNCwgInBpcGUiLCA0KSAmJgorCQlpc19kaXJfc2VwKGZpbGVuYW1lWzhdKSAmJgorCQlmaWxlbmFtZVs5XSk7Cit9CisKK2ludCBtaW5nd19vcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG9mbGFncywgLi4uKQoreworCXR5cGVkZWYgaW50ICgqb3Blbl9mbl90KSh3Y2hhcl90IGNvbnN0ICp3ZmlsZW5hbWUsIGludCBvZmxhZ3MsIC4uLik7CisJdmFfbGlzdCBhcmdzOworCXVuc2lnbmVkIG1vZGU7CisJaW50IGZkLCBjcmVhdGUgPSAob2ZsYWdzICYgKE9fQ1JFQVQgfCBPX0VYQ0wpKSA9PSAoT19DUkVBVCB8IE9fRVhDTCk7CisJd2NoYXJfdCB3ZmlsZW5hbWVbTUFYX1BBVEhdOworCW9wZW5fZm5fdCBvcGVuX2ZuOworCisJdmFfc3RhcnQoYXJncywgb2ZsYWdzKTsKKwltb2RlID0gdmFfYXJnKGFyZ3MsIGludCk7CisJdmFfZW5kKGFyZ3MpOworCisJaWYgKCFpc192YWxpZF93aW4zMl9wYXRoKGZpbGVuYW1lLCAhY3JlYXRlKSkgeworCQllcnJubyA9IGNyZWF0ZSA/IEVJTlZBTCA6IEVOT0VOVDsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICgob2ZsYWdzICYgT19BUFBFTkQpICYmICFpc19sb2NhbF9uYW1lZF9waXBlX3BhdGgoZmlsZW5hbWUpKQorCQlvcGVuX2ZuID0gbWluZ3dfb3Blbl9hcHBlbmQ7CisJZWxzZQorCQlvcGVuX2ZuID0gX3dvcGVuOworCisJaWYgKGZpbGVuYW1lICYmICFzdHJjbXAoZmlsZW5hbWUsICIvZGV2L251bGwiKSkKKwkJd2NzY3B5KHdmaWxlbmFtZSwgTCJudWwiKTsKKwllbHNlIGlmICh4dXRmdG93Y3NfcGF0aCh3ZmlsZW5hbWUsIGZpbGVuYW1lKSA8IDApCisJCXJldHVybiAtMTsKKworCWZkID0gb3Blbl9mbih3ZmlsZW5hbWUsIG9mbGFncywgbW9kZSk7CisKKwlpZiAoZmQgPCAwICYmIChvZmxhZ3MgJiBPX0FDQ01PREUpICE9IE9fUkRPTkxZICYmIGVycm5vID09IEVBQ0NFUykgeworCQlEV09SRCBhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzVyh3ZmlsZW5hbWUpOworCQlpZiAoYXR0cnMgIT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMgJiYgKGF0dHJzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSkKKwkJCWVycm5vID0gRUlTRElSOworCX0KKwlpZiAoKG9mbGFncyAmIE9fQ1JFQVQpICYmIG5lZWRzX2hpZGluZyhmaWxlbmFtZSkpIHsKKwkJLyoKKwkJICogSW50ZXJuYWxseSwgX3dvcGVuKCkgdXNlcyB0aGUgQ3JlYXRlRmlsZSgpIEFQSSB3aGljaCBlcnJvcnMKKwkJICogb3V0IHdpdGggYW4gRVJST1JfQUNDRVNTX0RFTklFRCBpZiBDUkVBVEVfQUxXQVlTIHdhcworCQkgKiBzcGVjaWZpZWQgYW5kIGFuIGFscmVhZHkgZXhpc3RpbmcgZmlsZSdzIGF0dHJpYnV0ZXMgZG8gbm90CisJCSAqIG1hdGNoICpleGFjdGx5Ki4gQXMgdGhlcmUgaXMgbm8gbW9kZSBvciBmbGFnIHdlIGNhbiBzZXQgdGhhdAorCQkgKiB3b3VsZCBjb3JyZXNwb25kIHRvIEZJTEVfQVRUUklCVVRFX0hJRERFTiwgbGV0J3MganVzdCB0cnkKKwkJICogYWdhaW4gKndpdGhvdXQqIHRoZSBPX0NSRUFUIGZsYWcgKHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlCisJCSAqIENSRUFURV9BTFdBWVMgZmxhZyBvZiBDcmVhdGVGaWxlKCkpLgorCQkgKi8KKwkJaWYgKGZkIDwgMCAmJiBlcnJubyA9PSBFQUNDRVMpCisJCQlmZCA9IG9wZW5fZm4od2ZpbGVuYW1lLCBvZmxhZ3MgJiB+T19DUkVBVCwgbW9kZSk7CisJCWlmIChmZCA+PSAwICYmIHNldF9oaWRkZW5fZmxhZyh3ZmlsZW5hbWUsIDEpKQorCQkJd2FybmluZygiY291bGQgbm90IG1hcmsgJyVzJyBhcyBoaWRkZW4uIiwgZmlsZW5hbWUpOworCX0KKwlyZXR1cm4gZmQ7Cit9CisKK3N0YXRpYyBCT09MIFdJTkFQSSBjdHJsX2lnbm9yZShEV09SRCB0eXBlKQoreworCXJldHVybiBUUlVFOworfQorCisjdW5kZWYgZmdldGMKK2ludCBtaW5nd19mZ2V0YyhGSUxFICpzdHJlYW0pCit7CisJaW50IGNoOworCWlmICghaXNhdHR5KF9maWxlbm8oc3RyZWFtKSkpCisJCXJldHVybiBmZ2V0YyhzdHJlYW0pOworCisJU2V0Q29uc29sZUN0cmxIYW5kbGVyKGN0cmxfaWdub3JlLCBUUlVFKTsKKwl3aGlsZSAoMSkgeworCQljaCA9IGZnZXRjKHN0cmVhbSk7CisJCWlmIChjaCAhPSBFT0YgfHwgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfT1BFUkFUSU9OX0FCT1JURUQpCisJCQlicmVhazsKKworCQkvKiBDdHJsK0Mgd2FzIHByZXNzZWQsIHNpbXVsYXRlIFNJR0lOVCBhbmQgcmV0cnkgKi8KKwkJbWluZ3dfcmFpc2UoU0lHSU5UKTsKKwl9CisJU2V0Q29uc29sZUN0cmxIYW5kbGVyKGN0cmxfaWdub3JlLCBGQUxTRSk7CisJcmV0dXJuIGNoOworfQorCisjdW5kZWYgZm9wZW4KK0ZJTEUgKm1pbmd3X2ZvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqb3R5cGUpCit7CisJaW50IGhpZGUgPSBuZWVkc19oaWRpbmcoZmlsZW5hbWUpOworCUZJTEUgKmZpbGU7CisJd2NoYXJfdCB3ZmlsZW5hbWVbTUFYX1BBVEhdLCB3b3R5cGVbNF07CisJaWYgKGZpbGVuYW1lICYmICFzdHJjbXAoZmlsZW5hbWUsICIvZGV2L251bGwiKSkKKwkJd2NzY3B5KHdmaWxlbmFtZSwgTCJudWwiKTsKKwllbHNlIGlmICghaXNfdmFsaWRfd2luMzJfcGF0aChmaWxlbmFtZSwgMSkpIHsKKwkJaW50IGNyZWF0ZSA9IG90eXBlICYmIHN0cmNocihvdHlwZSwgJ3cnKTsKKwkJZXJybm8gPSBjcmVhdGUgPyBFSU5WQUwgOiBFTk9FTlQ7CisJCXJldHVybiBOVUxMOworCX0gZWxzZSBpZiAoeHV0ZnRvd2NzX3BhdGgod2ZpbGVuYW1lLCBmaWxlbmFtZSkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICh4dXRmdG93Y3Mod290eXBlLCBvdHlwZSwgQVJSQVlfU0laRSh3b3R5cGUpKSA8IDApCisJCXJldHVybiBOVUxMOworCisJaWYgKGhpZGUgJiYgIWFjY2VzcyhmaWxlbmFtZSwgRl9PSykgJiYgc2V0X2hpZGRlbl9mbGFnKHdmaWxlbmFtZSwgMCkpIHsKKwkJZXJyb3IoImNvdWxkIG5vdCB1bmhpZGUgJXMiLCBmaWxlbmFtZSk7CisJCXJldHVybiBOVUxMOworCX0KKwlmaWxlID0gX3dmb3Blbih3ZmlsZW5hbWUsIHdvdHlwZSk7CisJaWYgKCFmaWxlICYmIEdldExhc3RFcnJvcigpID09IEVSUk9SX0lOVkFMSURfTkFNRSkKKwkJZXJybm8gPSBFTk9FTlQ7CisJaWYgKGZpbGUgJiYgaGlkZSAmJiBzZXRfaGlkZGVuX2ZsYWcod2ZpbGVuYW1lLCAxKSkKKwkJd2FybmluZygiY291bGQgbm90IG1hcmsgJyVzJyBhcyBoaWRkZW4uIiwgZmlsZW5hbWUpOworCXJldHVybiBmaWxlOworfQorCitGSUxFICptaW5nd19mcmVvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqb3R5cGUsIEZJTEUgKnN0cmVhbSkKK3sKKwlpbnQgaGlkZSA9IG5lZWRzX2hpZGluZyhmaWxlbmFtZSk7CisJRklMRSAqZmlsZTsKKwl3Y2hhcl90IHdmaWxlbmFtZVtNQVhfUEFUSF0sIHdvdHlwZVs0XTsKKwlpZiAoZmlsZW5hbWUgJiYgIXN0cmNtcChmaWxlbmFtZSwgIi9kZXYvbnVsbCIpKQorCQl3Y3NjcHkod2ZpbGVuYW1lLCBMIm51bCIpOworCWVsc2UgaWYgKCFpc192YWxpZF93aW4zMl9wYXRoKGZpbGVuYW1lLCAxKSkgeworCQlpbnQgY3JlYXRlID0gb3R5cGUgJiYgc3RyY2hyKG90eXBlLCAndycpOworCQllcnJubyA9IGNyZWF0ZSA/IEVJTlZBTCA6IEVOT0VOVDsKKwkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIGlmICh4dXRmdG93Y3NfcGF0aCh3ZmlsZW5hbWUsIGZpbGVuYW1lKSA8IDApCisJCXJldHVybiBOVUxMOworCisJaWYgKHh1dGZ0b3djcyh3b3R5cGUsIG90eXBlLCBBUlJBWV9TSVpFKHdvdHlwZSkpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoaGlkZSAmJiAhYWNjZXNzKGZpbGVuYW1lLCBGX09LKSAmJiBzZXRfaGlkZGVuX2ZsYWcod2ZpbGVuYW1lLCAwKSkgeworCQllcnJvcigiY291bGQgbm90IHVuaGlkZSAlcyIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWZpbGUgPSBfd2ZyZW9wZW4od2ZpbGVuYW1lLCB3b3R5cGUsIHN0cmVhbSk7CisJaWYgKGZpbGUgJiYgaGlkZSAmJiBzZXRfaGlkZGVuX2ZsYWcod2ZpbGVuYW1lLCAxKSkKKwkJd2FybmluZygiY291bGQgbm90IG1hcmsgJyVzJyBhcyBoaWRkZW4uIiwgZmlsZW5hbWUpOworCXJldHVybiBmaWxlOworfQorCisjdW5kZWYgZmZsdXNoCitpbnQgbWluZ3dfZmZsdXNoKEZJTEUgKnN0cmVhbSkKK3sKKwlpbnQgcmV0ID0gZmZsdXNoKHN0cmVhbSk7CisKKwkvKgorCSAqIHdyaXRlKCkgaXMgdXNlZCBiZWhpbmQgdGhlIHNjZW5lcyBvZiBzdGRpbyBvdXRwdXQgZnVuY3Rpb25zLgorCSAqIFNpbmNlIGdpdCBjb2RlIGRvZXMgbm90IGNoZWNrIGZvciBlcnJvcnMgYWZ0ZXIgZWFjaCBzdGRpbyB3cml0ZQorCSAqIG9wZXJhdGlvbiwgaXQgY2FuIGhhcHBlbiB0aGF0IHdyaXRlKCkgaXMgY2FsbGVkIGJ5IGEgbGF0ZXIKKwkgKiBzdGRpbyBmdW5jdGlvbiBldmVuIGlmIGFuIGVhcmxpZXIgd3JpdGUoKSBjYWxsIGZhaWxlZC4gSW4gdGhlCisJICogY2FzZSBvZiBhIHBpcGUgd2hvc2UgcmVhZGFibGUgZW5kIHdhcyBjbG9zZWQsIG9ubHkgdGhlIGZpcnN0CisJICogY2FsbCB0byB3cml0ZSgpIHJlcG9ydHMgRVBJUEUgb24gV2luZG93cy4gU3Vic2VxdWVudCB3cml0ZSgpCisJICogY2FsbHMgcmVwb3J0IEVJTlZBTC4gSXQgaXMgaW1wb3NzaWJsZSB0byBub3RpY2Ugd2hldGhlciB0aGlzCisJICogZmZsdXNoIGludm9jYXRpb24gdHJpZ2dlcmVkIHN1Y2ggYSBjYXNlLCB0aGVyZWZvcmUsIHdlIGhhdmUgdG8KKwkgKiBjYXRjaCBhbGwgRUlOVkFMIGVycm9ycyB3aG9sZS1zYWxlLgorCSAqLworCWlmIChyZXQgJiYgZXJybm8gPT0gRUlOVkFMKQorCQllcnJubyA9IEVQSVBFOworCisJcmV0dXJuIHJldDsKK30KKworI3VuZGVmIHdyaXRlCitzc2l6ZV90IG1pbmd3X3dyaXRlKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXNzaXplX3QgcmVzdWx0ID0gd3JpdGUoZmQsIGJ1ZiwgbGVuKTsKKworCWlmIChyZXN1bHQgPCAwICYmIGVycm5vID09IEVJTlZBTCAmJiBidWYpIHsKKwkJLyogY2hlY2sgaWYgZmQgaXMgYSBwaXBlICovCisJCUhBTkRMRSBoID0gKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUoZmQpOworCQlpZiAoR2V0RmlsZVR5cGUoaCkgPT0gRklMRV9UWVBFX1BJUEUpCisJCQllcnJubyA9IEVQSVBFOworCQllbHNlCisJCQllcnJubyA9IEVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgbWluZ3dfYWNjZXNzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSkKK3sKKwl3Y2hhcl90IHdmaWxlbmFtZVtNQVhfUEFUSF07CisJaWYgKHh1dGZ0b3djc19wYXRoKHdmaWxlbmFtZSwgZmlsZW5hbWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCS8qIFhfT0sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgTVNWQ1JUIHZlcnNpb24gKi8KKwlyZXR1cm4gX3dhY2Nlc3Mod2ZpbGVuYW1lLCBtb2RlICYgflhfT0spOworfQorCitpbnQgbWluZ3dfY2hkaXIoY29uc3QgY2hhciAqZGlybmFtZSkKK3sKKwl3Y2hhcl90IHdkaXJuYW1lW01BWF9QQVRIXTsKKwlpZiAoeHV0ZnRvd2NzX3BhdGgod2Rpcm5hbWUsIGRpcm5hbWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBfd2NoZGlyKHdkaXJuYW1lKTsKK30KKworaW50IG1pbmd3X2NobW9kKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSkKK3sKKwl3Y2hhcl90IHdmaWxlbmFtZVtNQVhfUEFUSF07CisJaWYgKHh1dGZ0b3djc19wYXRoKHdmaWxlbmFtZSwgZmlsZW5hbWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBfd2NobW9kKHdmaWxlbmFtZSwgbW9kZSk7Cit9CisKKy8qCisgKiBUaGUgdW5pdCBvZiBGSUxFVElNRSBpcyAxMDAtbmFub3NlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxNjAxLCBVVEMuCisgKiBSZXR1cm5zIHRoZSAxMDAtbmFub3NlY29uZHMgKCJoZWt0byBuYW5vc2Vjb25kcyIpIHNpbmNlIHRoZSBlcG9jaC4KKyAqLworc3RhdGljIGlubGluZSBsb25nIGxvbmcgZmlsZXRpbWVfdG9faG5zZWMoY29uc3QgRklMRVRJTUUgKmZ0KQoreworCWxvbmcgbG9uZyB3aW5UaW1lID0gKChsb25nIGxvbmcpZnQtPmR3SGlnaERhdGVUaW1lIDw8IDMyKSArIGZ0LT5kd0xvd0RhdGVUaW1lOworCS8qIFdpbmRvd3MgdG8gVW5peCBFcG9jaCBjb252ZXJzaW9uICovCisJcmV0dXJuIHdpblRpbWUgLSAxMTY0NDQ3MzYwMDAwMDAwMDBMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGV0aW1lX3RvX3RpbWVzcGVjKGNvbnN0IEZJTEVUSU1FICpmdCwgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlsb25nIGxvbmcgaG5zZWMgPSBmaWxldGltZV90b19obnNlYyhmdCk7CisJdHMtPnR2X3NlYyA9ICh0aW1lX3QpKGhuc2VjIC8gMTAwMDAwMDApOworCXRzLT50dl9uc2VjID0gKGhuc2VjICUgMTAwMDAwMDApICogMTAwOworfQorCisvKioKKyAqIFZlcmlmaWVzIHRoYXQgc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcygpIHdvdWxkIHN1Y2NlZWQuCisgKi8KK3N0YXRpYyBpbnQgaGFzX3ZhbGlkX2RpcmVjdG9yeV9wcmVmaXgod2NoYXJfdCAqd2ZpbGVuYW1lKQoreworCWludCBuID0gd2NzbGVuKHdmaWxlbmFtZSk7CisKKwl3aGlsZSAobiA+IDApIHsKKwkJd2NoYXJfdCBjID0gd2ZpbGVuYW1lWy0tbl07CisJCURXT1JEIGF0dHJpYnV0ZXM7CisKKwkJaWYgKCFpc19kaXJfc2VwKGMpKQorCQkJY29udGludWU7CisKKwkJd2ZpbGVuYW1lW25dID0gTCdcMCc7CisJCWF0dHJpYnV0ZXMgPSBHZXRGaWxlQXR0cmlidXRlc1cod2ZpbGVuYW1lKTsKKwkJd2ZpbGVuYW1lW25dID0gYzsKKwkJaWYgKGF0dHJpYnV0ZXMgPT0gRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZIHx8CisJCQkJYXR0cmlidXRlcyA9PSBGSUxFX0FUVFJJQlVURV9ERVZJQ0UpCisJCQlyZXR1cm4gMTsKKwkJaWYgKGF0dHJpYnV0ZXMgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpCisJCQlzd2l0Y2ggKEdldExhc3RFcnJvcigpKSB7CisJCQljYXNlIEVSUk9SX1BBVEhfTk9UX0ZPVU5EOgorCQkJCWNvbnRpbnVlOworCQkJY2FzZSBFUlJPUl9GSUxFX05PVF9GT1VORDoKKwkJCQkvKiBUaGlzIGltcGxpZXMgcGFyZW50IGRpcmVjdG9yeSBleGlzdHMuICovCisJCQkJcmV0dXJuIDE7CisJCQl9CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworLyogV2Uga2VlcCB0aGUgZG9fbHN0YXQgY29kZSBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGF2b2lkIHJlY3Vyc2lvbi4KKyAqIFdoZW4gYSBwYXRoIGVuZHMgd2l0aCBhIHNsYXNoLCB0aGUgc3RhdCB3aWxsIGZhaWwgd2l0aCBFTk9FTlQuIEluCisgKiB0aGlzIGNhc2UsIHdlIHN0cmlwIHRoZSB0cmFpbGluZyBzbGFzaGVzIGFuZCBzdGF0IGFnYWluLgorICoKKyAqIElmIGZvbGxvdyBpcyB0cnVlIHRoZW4gYWN0IGxpa2Ugc3RhdCgpIGFuZCByZXBvcnQgb24gdGhlIGxpbmsKKyAqIHRhcmdldC4gT3RoZXJ3aXNlIHJlcG9ydCBvbiB0aGUgbGluayBpdHNlbGYuCisgKi8KK3N0YXRpYyBpbnQgZG9fbHN0YXQoaW50IGZvbGxvdywgY29uc3QgY2hhciAqZmlsZV9uYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworCVdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgZmRhdGE7CisJd2NoYXJfdCB3ZmlsZW5hbWVbTUFYX1BBVEhdOworCWlmICh4dXRmdG93Y3NfcGF0aCh3ZmlsZW5hbWUsIGZpbGVfbmFtZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeFcod2ZpbGVuYW1lLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZmZGF0YSkpIHsKKwkJYnVmLT5zdF9pbm8gPSAwOworCQlidWYtPnN0X2dpZCA9IDA7CisJCWJ1Zi0+c3RfdWlkID0gMDsKKwkJYnVmLT5zdF9ubGluayA9IDE7CisJCWJ1Zi0+c3RfbW9kZSA9IGZpbGVfYXR0cl90b19zdF9tb2RlKGZkYXRhLmR3RmlsZUF0dHJpYnV0ZXMpOworCQlidWYtPnN0X3NpemUgPSBmZGF0YS5uRmlsZVNpemVMb3cgfAorCQkJKCgob2ZmX3QpZmRhdGEubkZpbGVTaXplSGlnaCk8PDMyKTsKKwkJYnVmLT5zdF9kZXYgPSBidWYtPnN0X3JkZXYgPSAwOyAvKiBub3QgdXNlZCBieSBHaXQgKi8KKwkJZmlsZXRpbWVfdG9fdGltZXNwZWMoJihmZGF0YS5mdExhc3RBY2Nlc3NUaW1lKSwgJihidWYtPnN0X2F0aW0pKTsKKwkJZmlsZXRpbWVfdG9fdGltZXNwZWMoJihmZGF0YS5mdExhc3RXcml0ZVRpbWUpLCAmKGJ1Zi0+c3RfbXRpbSkpOworCQlmaWxldGltZV90b190aW1lc3BlYygmKGZkYXRhLmZ0Q3JlYXRpb25UaW1lKSwgJihidWYtPnN0X2N0aW0pKTsKKwkJaWYgKGZkYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UKSB7CisJCQlXSU4zMl9GSU5EX0RBVEFXIGZpbmRidWY7CisJCQlIQU5ETEUgaGFuZGxlID0gRmluZEZpcnN0RmlsZVcod2ZpbGVuYW1lLCAmZmluZGJ1Zik7CisJCQlpZiAoaGFuZGxlICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisJCQkJaWYgKChmaW5kYnVmLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UKSAmJgorCQkJCQkJKGZpbmRidWYuZHdSZXNlcnZlZDAgPT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSykpIHsKKwkJCQkJaWYgKGZvbGxvdykgeworCQkJCQkJY2hhciBidWZmZXJbTUFYSU1VTV9SRVBBUlNFX0RBVEFfQlVGRkVSX1NJWkVdOworCQkJCQkJYnVmLT5zdF9zaXplID0gcmVhZGxpbmsoZmlsZV9uYW1lLCBidWZmZXIsIE1BWElNVU1fUkVQQVJTRV9EQVRBX0JVRkZFUl9TSVpFKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWJ1Zi0+c3RfbW9kZSA9IFNfSUZMTks7CisJCQkJCX0KKwkJCQkJYnVmLT5zdF9tb2RlIHw9IFNfSVJFQUQ7CisJCQkJCWlmICghKGZpbmRidWYuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSkKKwkJCQkJCWJ1Zi0+c3RfbW9kZSB8PSBTX0lXUklURTsKKwkJCQl9CisJCQkJRmluZENsb3NlKGhhbmRsZSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCXN3aXRjaCAoR2V0TGFzdEVycm9yKCkpIHsKKwljYXNlIEVSUk9SX0FDQ0VTU19ERU5JRUQ6CisJY2FzZSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTjoKKwljYXNlIEVSUk9SX0xPQ0tfVklPTEFUSU9OOgorCWNhc2UgRVJST1JfU0hBUklOR19CVUZGRVJfRVhDRUVERUQ6CisJCWVycm5vID0gRUFDQ0VTOworCQlicmVhazsKKwljYXNlIEVSUk9SX0JVRkZFUl9PVkVSRkxPVzoKKwkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCWJyZWFrOworCWNhc2UgRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk6CisJCWVycm5vID0gRU5PTUVNOworCQlicmVhazsKKwljYXNlIEVSUk9SX1BBVEhfTk9UX0ZPVU5EOgorCQlpZiAoIWhhc192YWxpZF9kaXJlY3RvcnlfcHJlZml4KHdmaWxlbmFtZSkpIHsKKwkJCWVycm5vID0gRU5PVERJUjsKKwkJCWJyZWFrOworCQl9CisJCS8qIGZhbGx0aHJ1ICovCisJZGVmYXVsdDoKKwkJZXJybm8gPSBFTk9FTlQ7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qIFdlIHByb3ZpZGUgb3VyIG93biBsc3RhdC9mc3RhdCBmdW5jdGlvbnMsIHNpbmNlIHRoZSBwcm92aWRlZAorICogbHN0YXQvZnN0YXQgZnVuY3Rpb25zIGFyZSBzbyBzbG93LiBUaGVzZSBzdGF0IGZ1bmN0aW9ucyBhcmUKKyAqIHRhaWxvcmVkIGZvciBHaXQncyB1c2FnZSAocmVhZDogZmFzdCksIGFuZCBhcmUgbm90IG1lYW50IHRvIGJlCisgKiBjb21wbGV0ZS4gTm90ZSB0aGF0IEdpdCBzdGF0KClzIGFyZSByZWRpcmVjdGVkIHRvIG1pbmd3X2xzdGF0KCkKKyAqIHRvbywgc2luY2UgV2luZG93cyBkb2Vzbid0IHJlYWxseSBoYW5kbGUgc3ltbGlua3MgdGhhdCB3ZWxsLgorICovCitzdGF0aWMgaW50IGRvX3N0YXRfaW50ZXJuYWwoaW50IGZvbGxvdywgY29uc3QgY2hhciAqZmlsZV9uYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworCWludCBuYW1lbGVuOworCWNoYXIgYWx0X25hbWVbUEFUSF9NQVhdOworCisJaWYgKCFkb19sc3RhdChmb2xsb3csIGZpbGVfbmFtZSwgYnVmKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBpZiBmaWxlX25hbWUgZW5kZWQgaW4gYSAnLycsIFdpbmRvd3MgcmV0dXJuZWQgRU5PRU5UOworCSAqIHRyeSBhZ2FpbiB3aXRob3V0IHRyYWlsaW5nIHNsYXNoZXMKKwkgKi8KKwlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQlyZXR1cm4gLTE7CisKKwluYW1lbGVuID0gc3RybGVuKGZpbGVfbmFtZSk7CisJaWYgKG5hbWVsZW4gJiYgZmlsZV9uYW1lW25hbWVsZW4tMV0gIT0gJy8nKQorCQlyZXR1cm4gLTE7CisJd2hpbGUgKG5hbWVsZW4gJiYgZmlsZV9uYW1lW25hbWVsZW4tMV0gPT0gJy8nKQorCQktLW5hbWVsZW47CisJaWYgKCFuYW1lbGVuIHx8IG5hbWVsZW4gPj0gUEFUSF9NQVgpCisJCXJldHVybiAtMTsKKworCW1lbWNweShhbHRfbmFtZSwgZmlsZV9uYW1lLCBuYW1lbGVuKTsKKwlhbHRfbmFtZVtuYW1lbGVuXSA9IDA7CisJcmV0dXJuIGRvX2xzdGF0KGZvbGxvdywgYWx0X25hbWUsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2ZpbGVfaW5mb19ieV9oYW5kbGUoSEFORExFIGhuZCwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKwlCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiBmZGF0YTsKKworCWlmICghR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUoaG5kLCAmZmRhdGEpKSB7CisJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlidWYtPnN0X2lubyA9IDA7CisJYnVmLT5zdF9naWQgPSAwOworCWJ1Zi0+c3RfdWlkID0gMDsKKwlidWYtPnN0X25saW5rID0gMTsKKwlidWYtPnN0X21vZGUgPSBmaWxlX2F0dHJfdG9fc3RfbW9kZShmZGF0YS5kd0ZpbGVBdHRyaWJ1dGVzKTsKKwlidWYtPnN0X3NpemUgPSBmZGF0YS5uRmlsZVNpemVMb3cgfAorCQkoKChvZmZfdClmZGF0YS5uRmlsZVNpemVIaWdoKTw8MzIpOworCWJ1Zi0+c3RfZGV2ID0gYnVmLT5zdF9yZGV2ID0gMDsgLyogbm90IHVzZWQgYnkgR2l0ICovCisJZmlsZXRpbWVfdG9fdGltZXNwZWMoJihmZGF0YS5mdExhc3RBY2Nlc3NUaW1lKSwgJihidWYtPnN0X2F0aW0pKTsKKwlmaWxldGltZV90b190aW1lc3BlYygmKGZkYXRhLmZ0TGFzdFdyaXRlVGltZSksICYoYnVmLT5zdF9tdGltKSk7CisJZmlsZXRpbWVfdG9fdGltZXNwZWMoJihmZGF0YS5mdENyZWF0aW9uVGltZSksICYoYnVmLT5zdF9jdGltKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBtaW5nd19sc3RhdChjb25zdCBjaGFyICpmaWxlX25hbWUsIHN0cnVjdCBzdGF0ICpidWYpCit7CisJcmV0dXJuIGRvX3N0YXRfaW50ZXJuYWwoMCwgZmlsZV9uYW1lLCBidWYpOworfQoraW50IG1pbmd3X3N0YXQoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworCXJldHVybiBkb19zdGF0X2ludGVybmFsKDEsIGZpbGVfbmFtZSwgYnVmKTsKK30KKworaW50IG1pbmd3X2ZzdGF0KGludCBmZCwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKwlIQU5ETEUgZmggPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKKwlEV09SRCBhdmFpbCwgdHlwZSA9IEdldEZpbGVUeXBlKGZoKSAmIH5GSUxFX1RZUEVfUkVNT1RFOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBGSUxFX1RZUEVfRElTSzoKKwkJcmV0dXJuIGdldF9maWxlX2luZm9fYnlfaGFuZGxlKGZoLCBidWYpOworCisJY2FzZSBGSUxFX1RZUEVfQ0hBUjoKKwljYXNlIEZJTEVfVFlQRV9QSVBFOgorCQkvKiBpbml0aWFsaXplIHN0YXQgZmllbGRzICovCisJCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7CisJCWJ1Zi0+c3RfbmxpbmsgPSAxOworCisJCWlmICh0eXBlID09IEZJTEVfVFlQRV9DSEFSKSB7CisJCQlidWYtPnN0X21vZGUgPSBfU19JRkNIUjsKKwkJfSBlbHNlIHsKKwkJCWJ1Zi0+c3RfbW9kZSA9IF9TX0lGSUZPOworCQkJaWYgKFBlZWtOYW1lZFBpcGUoZmgsIE5VTEwsIDAsIE5VTEwsICZhdmFpbCwgTlVMTCkpCisJCQkJYnVmLT5zdF9zaXplID0gYXZhaWw7CisJCX0KKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gLTE7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZV90X3RvX2ZpbGV0aW1lKHRpbWVfdCB0LCBGSUxFVElNRSAqZnQpCit7CisJbG9uZyBsb25nIHdpblRpbWUgPSB0ICogMTAwMDAwMDBMTCArIDExNjQ0NDczNjAwMDAwMDAwMExMOworCWZ0LT5kd0xvd0RhdGVUaW1lID0gd2luVGltZTsKKwlmdC0+ZHdIaWdoRGF0ZVRpbWUgPSB3aW5UaW1lID4+IDMyOworfQorCitpbnQgbWluZ3dfdXRpbWUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3Qgc3RydWN0IHV0aW1idWYgKnRpbWVzKQoreworCUZJTEVUSU1FIG1mdCwgYWZ0OworCWludCBmaCwgcmM7CisJRFdPUkQgYXR0cnM7CisJd2NoYXJfdCB3ZmlsZW5hbWVbTUFYX1BBVEhdOworCWlmICh4dXRmdG93Y3NfcGF0aCh3ZmlsZW5hbWUsIGZpbGVfbmFtZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBtdXN0IGhhdmUgd3JpdGUgcGVybWlzc2lvbiAqLworCWF0dHJzID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHdmaWxlbmFtZSk7CisJaWYgKGF0dHJzICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTICYmCisJICAgIChhdHRycyAmIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSkgeworCQkvKiBpZ25vcmUgZXJyb3JzIGhlcmU7IG9wZW4oKSB3aWxsIHJlcG9ydCB0aGVtICovCisJCVNldEZpbGVBdHRyaWJ1dGVzVyh3ZmlsZW5hbWUsIGF0dHJzICYgfkZJTEVfQVRUUklCVVRFX1JFQURPTkxZKTsKKwl9CisKKwlpZiAoKGZoID0gX3dvcGVuKHdmaWxlbmFtZSwgT19SRFdSIHwgT19CSU5BUlkpKSA8IDApIHsKKwkJcmMgPSAtMTsKKwkJZ290byByZXZlcnRfYXR0cnM7CisJfQorCisJaWYgKHRpbWVzKSB7CisJCXRpbWVfdF90b19maWxldGltZSh0aW1lcy0+bW9kdGltZSwgJm1mdCk7CisJCXRpbWVfdF90b19maWxldGltZSh0aW1lcy0+YWN0aW1lLCAmYWZ0KTsKKwl9IGVsc2UgeworCQlHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmbWZ0KTsKKwkJYWZ0ID0gbWZ0OworCX0KKwlpZiAoIVNldEZpbGVUaW1lKChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmgpLCBOVUxMLCAmYWZ0LCAmbWZ0KSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmMgPSAtMTsKKwl9IGVsc2UKKwkJcmMgPSAwOworCWNsb3NlKGZoKTsKKworcmV2ZXJ0X2F0dHJzOgorCWlmIChhdHRycyAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUyAmJgorCSAgICAoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkpIHsKKwkJLyogaWdub3JlIGVycm9ycyBhZ2FpbiAqLworCQlTZXRGaWxlQXR0cmlidXRlc1cod2ZpbGVuYW1lLCBhdHRycyk7CisJfQorCXJldHVybiByYzsKK30KKworI3VuZGVmIHN0cmZ0aW1lCitzaXplX3QgbWluZ3dfc3RyZnRpbWUoY2hhciAqcywgc2l6ZV90IG1heCwKKwkJICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0gKnRtKQoreworCS8qIGEgcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgc3RyZnRpbWUgaW4gY2FzZSB3ZSBjYW4ndCBmaW5kIHRoZSBVQ1JUIHZlcnNpb24gKi8KKwlzdGF0aWMgc2l6ZV90ICgqZmFsbGJhY2spKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0bSAqKSA9IHN0cmZ0aW1lOworCXNpemVfdCByZXQ7CisJREVDTEFSRV9QUk9DX0FERFIodWNydGJhc2UuZGxsLCBzaXplX3QsIHN0cmZ0aW1lLCBjaGFyICosIHNpemVfdCwKKwkJY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0gKik7CisKKwlpZiAoSU5JVF9QUk9DX0FERFIoc3RyZnRpbWUpKQorCQlyZXQgPSBzdHJmdGltZShzLCBtYXgsIGZvcm1hdCwgdG0pOworCWVsc2UKKwkJcmV0ID0gZmFsbGJhY2socywgbWF4LCBmb3JtYXQsIHRtKTsKKworCWlmICghcmV0ICYmIGVycm5vID09IEVJTlZBTCkKKwkJZGllKCJpbnZhbGlkIHN0cmZ0aW1lIGZvcm1hdDogJyVzJyIsIGZvcm1hdCk7CisJcmV0dXJuIHJldDsKK30KKwordW5zaWduZWQgaW50IHNsZWVwICh1bnNpZ25lZCBpbnQgc2Vjb25kcykKK3sKKwlTbGVlcChzZWNvbmRzKjEwMDApOworCXJldHVybiAwOworfQorCitjaGFyICptaW5nd19ta3RlbXAoY2hhciAqdGVtcGxhdGUpCit7CisJd2NoYXJfdCB3dGVtcGxhdGVbTUFYX1BBVEhdOworCWlmICh4dXRmdG93Y3NfcGF0aCh3dGVtcGxhdGUsIHRlbXBsYXRlKSA8IDApCisJCXJldHVybiBOVUxMOworCWlmICghX3dta3RlbXAod3RlbXBsYXRlKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHh3Y3N0b3V0Zih0ZW1wbGF0ZSwgd3RlbXBsYXRlLCBzdHJsZW4odGVtcGxhdGUpICsgMSkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gdGVtcGxhdGU7Cit9CisKK2ludCBta3N0ZW1wKGNoYXIgKnRlbXBsYXRlKQoreworCWNoYXIgKmZpbGVuYW1lID0gbWt0ZW1wKHRlbXBsYXRlKTsKKwlpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBvcGVuKGZpbGVuYW1lLCBPX1JEV1IgfCBPX0NSRUFULCAwNjAwKTsKK30KKworaW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHZvaWQgKnR6KQoreworCUZJTEVUSU1FIGZ0OworCWxvbmcgbG9uZyBobnNlYzsKKworCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZmdCk7CisJaG5zZWMgPSBmaWxldGltZV90b19obnNlYygmZnQpOworCXR2LT50dl9zZWMgPSBobnNlYyAvIDEwMDAwMDAwOworCXR2LT50dl91c2VjID0gKGhuc2VjICUgMTAwMDAwMDApIC8gMTA7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwaXBlKGludCBmaWxlZGVzWzJdKQoreworCUhBTkRMRSBoWzJdOworCisJLyogdGhpcyBjcmVhdGVzIG5vbi1pbmhlcml0YWJsZSBoYW5kbGVzICovCisJaWYgKCFDcmVhdGVQaXBlKCZoWzBdLCAmaFsxXSwgTlVMTCwgODE5MikpIHsKKwkJZXJybm8gPSBlcnJfd2luX3RvX3Bvc2l4KEdldExhc3RFcnJvcigpKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmaWxlZGVzWzBdID0gX29wZW5fb3NmaGFuZGxlKEhDQVNUKGludCwgaFswXSksIE9fTk9JTkhFUklUKTsKKwlpZiAoZmlsZWRlc1swXSA8IDApIHsKKwkJQ2xvc2VIYW5kbGUoaFswXSk7CisJCUNsb3NlSGFuZGxlKGhbMV0pOworCQlyZXR1cm4gLTE7CisJfQorCWZpbGVkZXNbMV0gPSBfb3Blbl9vc2ZoYW5kbGUoSENBU1QoaW50LCBoWzFdKSwgT19OT0lOSEVSSVQpOworCWlmIChmaWxlZGVzWzFdIDwgMCkgeworCQljbG9zZShmaWxlZGVzWzBdKTsKKwkJQ2xvc2VIYW5kbGUoaFsxXSk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB0bSAqZ210aW1lX3IoY29uc3QgdGltZV90ICp0aW1lcCwgc3RydWN0IHRtICpyZXN1bHQpCit7CisJaWYgKGdtdGltZV9zKHJlc3VsdCwgdGltZXApID09IDApCisJCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCB0bSAqbG9jYWx0aW1lX3IoY29uc3QgdGltZV90ICp0aW1lcCwgc3RydWN0IHRtICpyZXN1bHQpCit7CisJaWYgKGxvY2FsdGltZV9zKHJlc3VsdCwgdGltZXApID09IDApCisJCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIE5VTEw7Cit9CisKK2NoYXIgKm1pbmd3X2dldGN3ZChjaGFyICpwb2ludGVyLCBpbnQgbGVuKQoreworCXdjaGFyX3QgY3dkW01BWF9QQVRIXSwgd3BvaW50ZXJbTUFYX1BBVEhdOworCURXT1JEIHJldCA9IEdldEN1cnJlbnREaXJlY3RvcnlXKEFSUkFZX1NJWkUoY3dkKSwgY3dkKTsKKworCWlmICghcmV0IHx8IHJldCA+PSBBUlJBWV9TSVpFKGN3ZCkpIHsKKwkJZXJybm8gPSByZXQgPyBFTkFNRVRPT0xPTkcgOiBlcnJfd2luX3RvX3Bvc2l4KEdldExhc3RFcnJvcigpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldCA9IEdldExvbmdQYXRoTmFtZVcoY3dkLCB3cG9pbnRlciwgQVJSQVlfU0laRSh3cG9pbnRlcikpOworCWlmICghcmV0ICYmIEdldExhc3RFcnJvcigpID09IEVSUk9SX0FDQ0VTU19ERU5JRUQpIHsKKwkJSEFORExFIGhuZCA9IENyZWF0ZUZpbGVXKGN3ZCwgMCwKKwkJCUZJTEVfU0hBUkVfUkVBRCB8IEZJTEVfU0hBUkVfV1JJVEUgfCBGSUxFX1NIQVJFX0RFTEVURSwgTlVMTCwKKwkJCU9QRU5fRVhJU1RJTkcsIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTLCBOVUxMKTsKKwkJaWYgKGhuZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwkJCXJldHVybiBOVUxMOworCQlyZXQgPSBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXKGhuZCwgd3BvaW50ZXIsIEFSUkFZX1NJWkUod3BvaW50ZXIpLCAwKTsKKwkJQ2xvc2VIYW5kbGUoaG5kKTsKKwkJaWYgKCFyZXQgfHwgcmV0ID49IEFSUkFZX1NJWkUod3BvaW50ZXIpKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmICh4d2NzdG91dGYocG9pbnRlciwgbm9ybWFsaXplX250cGF0aCh3cG9pbnRlciksIGxlbikgPCAwKQorCQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBwb2ludGVyOworCX0KKwlpZiAoIXJldCB8fCByZXQgPj0gQVJSQVlfU0laRSh3cG9pbnRlcikpCisJCXJldHVybiBOVUxMOworCWlmICh4d2NzdG91dGYocG9pbnRlciwgd3BvaW50ZXIsIGxlbikgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwljb252ZXJ0X3NsYXNoZXMocG9pbnRlcik7CisJcmV0dXJuIHBvaW50ZXI7Cit9CisKKy8qCisgKiBTZWUgIlBhcnNpbmcgQysrIENvbW1hbmQtTGluZSBBcmd1bWVudHMiIGF0IE1pY3Jvc29mdCdzIERvY3M6CisgKiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9jcHAvY3BwL3BhcnNpbmctY3BwLWNvbW1hbmQtbGluZS1hcmd1bWVudHMKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnF1b3RlX2FyZ19tc3ZjKGNvbnN0IGNoYXIgKmFyZykKK3sKKwkvKiBjb3VudCBjaGFycyB0byBxdW90ZSAqLworCWludCBsZW4gPSAwLCBuID0gMDsKKwlpbnQgZm9yY2VfcXVvdGVzID0gMDsKKwljaGFyICpxLCAqZDsKKwljb25zdCBjaGFyICpwID0gYXJnOworCWlmICghKnApIGZvcmNlX3F1b3RlcyA9IDE7CisJd2hpbGUgKCpwKSB7CisJCWlmIChpc3NwYWNlKCpwKSB8fCAqcCA9PSAnKicgfHwgKnAgPT0gJz8nIHx8ICpwID09ICd7JyB8fCAqcCA9PSAnXCcnKQorCQkJZm9yY2VfcXVvdGVzID0gMTsKKwkJZWxzZSBpZiAoKnAgPT0gJyInKQorCQkJbisrOworCQllbHNlIGlmICgqcCA9PSAnXFwnKSB7CisJCQlpbnQgY291bnQgPSAwOworCQkJd2hpbGUgKCpwID09ICdcXCcpIHsKKwkJCQljb3VudCsrOworCQkJCXArKzsKKwkJCQlsZW4rKzsKKwkJCX0KKwkJCWlmICgqcCA9PSAnIicgfHwgISpwKQorCQkJCW4gKz0gY291bnQqMiArIDE7CisJCQljb250aW51ZTsKKwkJfQorCQlsZW4rKzsKKwkJcCsrOworCX0KKwlpZiAoIWZvcmNlX3F1b3RlcyAmJiBuID09IDApCisJCXJldHVybiBhcmc7CisKKwkvKiBpbnNlcnQgXCB3aGVyZSBuZWNlc3NhcnkgKi8KKwlkID0gcSA9IHhtYWxsb2Moc3RfYWRkMyhsZW4sIG4sIDMpKTsKKwkqZCsrID0gJyInOworCXdoaWxlICgqYXJnKSB7CisJCWlmICgqYXJnID09ICciJykKKwkJCSpkKysgPSAnXFwnOworCQllbHNlIGlmICgqYXJnID09ICdcXCcpIHsKKwkJCWludCBjb3VudCA9IDA7CisJCQl3aGlsZSAoKmFyZyA9PSAnXFwnKSB7CisJCQkJY291bnQrKzsKKwkJCQkqZCsrID0gKmFyZysrOworCQkJfQorCQkJaWYgKCphcmcgPT0gJyInIHx8ICEqYXJnKSB7CisJCQkJd2hpbGUgKGNvdW50LS0gPiAwKQorCQkJCQkqZCsrID0gJ1xcJzsKKwkJCQkvKiBkb24ndCBlc2NhcGUgdGhlIHN1cnJvdW5kaW5nIGVuZCBxdW90ZSAqLworCQkJCWlmICghKmFyZykKKwkJCQkJYnJlYWs7CisJCQkJKmQrKyA9ICdcXCc7CisJCQl9CisJCX0KKwkJKmQrKyA9ICphcmcrKzsKKwl9CisJKmQrKyA9ICciJzsKKwkqZCsrID0gJ1wwJzsKKwlyZXR1cm4gcTsKK30KKworI2luY2x1ZGUgInF1b3RlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpxdW90ZV9hcmdfbXN5czIoY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcDIgPSBhcmcsICpwOworCisJZm9yIChwID0gYXJnOyAqcDsgcCsrKSB7CisJCWludCB3cyA9IGlzc3BhY2UoKnApOworCQlpZiAoIXdzICYmICpwICE9ICdcXCcgJiYgKnAgIT0gJyInICYmICpwICE9ICd7JyAmJiAqcCAhPSAnXCcnICYmCisJCSAgICAqcCAhPSAnPycgJiYgKnAgIT0gJyonICYmICpwICE9ICd+JykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWJ1Zi5sZW4pCisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJyInKTsKKwkJaWYgKHAgIT0gcDIpCisJCQlzdHJidWZfYWRkKCZidWYsIHAyLCBwIC0gcDIpOworCQlpZiAoKnAgPT0gJ1xcJyB8fCAqcCA9PSAnIicpCisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xcJyk7CisJCXAyID0gcDsKKwl9CisKKwlpZiAocCA9PSBhcmcpCisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnIicpOworCWVsc2UgaWYgKCFidWYubGVuKQorCQlyZXR1cm4gYXJnOworCWVsc2UKKwkJc3RyYnVmX2FkZCgmYnVmLCBwMiwgcCAtIHAyKTsKKworCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnIicpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIDApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfaW50ZXJwcmV0ZXIoY29uc3QgY2hhciAqY21kKQoreworCXN0YXRpYyBjaGFyIGJ1ZlsxMDBdOworCWNoYXIgKnAsICpvcHQ7CisJaW50IG4sIGZkOworCisJLyogZG9uJ3QgZXZlbiB0cnkgYSAuZXhlICovCisJbiA9IHN0cmxlbihjbWQpOworCWlmIChuID49IDQgJiYgIXN0cmNhc2VjbXAoY21kK24tNCwgIi5leGUiKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmZCA9IG9wZW4oY21kLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiktMSk7CisJY2xvc2UoZmQpOworCWlmIChuIDwgNCkJLyogYXQgbGVhc3QgJyMhL3gnIGFuZCBub3QgZXJyb3IgKi8KKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoYnVmWzBdICE9ICcjJyB8fCBidWZbMV0gIT0gJyEnKQorCQlyZXR1cm4gTlVMTDsKKwlidWZbbl0gPSAnXDAnOworCXAgPSBidWYgKyBzdHJjc3BuKGJ1ZiwgIlxyXG4iKTsKKwlpZiAoISpwKQorCQlyZXR1cm4gTlVMTDsKKworCSpwID0gJ1wwJzsKKwlpZiAoIShwID0gc3RycmNocihidWYrMiwgJy8nKSkgJiYgIShwID0gc3RycmNocihidWYrMiwgJ1xcJykpKQorCQlyZXR1cm4gTlVMTDsKKwkvKiBzdHJpcCBvcHRpb25zICovCisJaWYgKChvcHQgPSBzdHJjaHIocCsxLCAnICcpKSkKKwkJKm9wdCA9ICdcMCc7CisJcmV0dXJuIHArMTsKK30KKworLyoKKyAqIGV4ZV9vbmx5IG1lYW5zIHRoYXQgd2Ugb25seSB3YW50IHRvIGRldGVjdCAuZXhlIGZpbGVzLCBidXQgbm90IHNjcmlwdHMKKyAqICh3aGljaCBkbyBub3QgaGF2ZSBhbiBleHRlbnNpb24pCisgKi8KK3N0YXRpYyBjaGFyICpsb29rdXBfcHJvZyhjb25zdCBjaGFyICpkaXIsIGludCBkaXJsZW4sIGNvbnN0IGNoYXIgKmNtZCwKKwkJCSBpbnQgaXNleGUsIGludCBleGVfb25seSkKK3sKKwljaGFyIHBhdGhbTUFYX1BBVEhdOworCXdjaGFyX3Qgd3BhdGhbTUFYX1BBVEhdOworCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiUuKnNcXCVzLmV4ZSIsIGRpcmxlbiwgZGlyLCBjbWQpOworCisJaWYgKHh1dGZ0b3djc19wYXRoKHdwYXRoLCBwYXRoKSA8IDApCisJCXJldHVybiBOVUxMOworCisJaWYgKCFpc2V4ZSAmJiBfd2FjY2Vzcyh3cGF0aCwgRl9PSykgPT0gMCkKKwkJcmV0dXJuIHhzdHJkdXAocGF0aCk7CisJd3BhdGhbd2NzbGVuKHdwYXRoKS00XSA9ICdcMCc7CisJaWYgKCghZXhlX29ubHkgfHwgaXNleGUpICYmIF93YWNjZXNzKHdwYXRoLCBGX09LKSA9PSAwKSB7CisJCWlmICghKEdldEZpbGVBdHRyaWJ1dGVzVyh3cGF0aCkgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpKSB7CisJCQlwYXRoW3N0cmxlbihwYXRoKS00XSA9ICdcMCc7CisJCQlyZXR1cm4geHN0cmR1cChwYXRoKTsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIERldGVybWluZXMgdGhlIGFic29sdXRlIHBhdGggb2YgY21kIHVzaW5nIHRoZSBzcGxpdCBwYXRoIGluIHBhdGguCisgKiBJZiBjbWQgY29udGFpbnMgYSBzbGFzaCBvciBiYWNrc2xhc2gsIG5vIGxvb2t1cCBpcyBwZXJmb3JtZWQuCisgKi8KK3N0YXRpYyBjaGFyICpwYXRoX2xvb2t1cChjb25zdCBjaGFyICpjbWQsIGludCBleGVfb25seSkKK3sKKwljb25zdCBjaGFyICpwYXRoOworCWNoYXIgKnByb2cgPSBOVUxMOworCWludCBsZW4gPSBzdHJsZW4oY21kKTsKKwlpbnQgaXNleGUgPSBsZW4gPj0gNCAmJiAhc3RyY2FzZWNtcChjbWQrbGVuLTQsICIuZXhlIik7CisKKwlpZiAoc3RycGJyayhjbWQsICIvXFwiKSkKKwkJcmV0dXJuIHhzdHJkdXAoY21kKTsKKworCXBhdGggPSBtaW5nd19nZXRlbnYoIlBBVEgiKTsKKwlpZiAoIXBhdGgpCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKCFwcm9nKSB7CisJCWNvbnN0IGNoYXIgKnNlcCA9IHN0cmNocm51bChwYXRoLCAnOycpOworCQlpbnQgZGlybGVuID0gc2VwIC0gcGF0aDsKKwkJaWYgKGRpcmxlbikKKwkJCXByb2cgPSBsb29rdXBfcHJvZyhwYXRoLCBkaXJsZW4sIGNtZCwgaXNleGUsIGV4ZV9vbmx5KTsKKwkJaWYgKCEqc2VwKQorCQkJYnJlYWs7CisJCXBhdGggPSBzZXAgKyAxOworCX0KKworCXJldHVybiBwcm9nOworfQorCitzdGF0aWMgY29uc3Qgd2NoYXJfdCAqd2NzY2hybnVsKGNvbnN0IHdjaGFyX3QgKnMsIHdjaGFyX3QgYykKK3sKKwl3aGlsZSAoKnMgJiYgKnMgIT0gYykKKwkJcysrOworCXJldHVybiBzOworfQorCisvKiBDb21wYXJlIG9ubHkga2V5cyAqLworc3RhdGljIGludCB3ZW52Y21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJd2NoYXJfdCAqcCA9ICood2NoYXJfdCAqKilhLCAqcSA9ICood2NoYXJfdCAqKiliOworCXNpemVfdCBwX2xlbiwgcV9sZW47CisKKwkvKiBGaW5kIHRoZSBrZXlzICovCisJcF9sZW4gPSB3Y3NjaHJudWwocCwgTCc9JykgLSBwOworCXFfbGVuID0gd2NzY2hybnVsKHEsIEwnPScpIC0gcTsKKworCS8qIElmIHRoZSBsZW5ndGggZGlmZmVycywgaW5jbHVkZSB0aGUgc2hvcnRlciBrZXkncyBOVUwgKi8KKwlpZiAocF9sZW4gPCBxX2xlbikKKwkJcF9sZW4rKzsKKwllbHNlIGlmIChwX2xlbiA+IHFfbGVuKQorCQlwX2xlbiA9IHFfbGVuICsgMTsKKworCXJldHVybiBfd2NzbmljbXAocCwgcSwgcF9sZW4pOworfQorCisvKgorICogQnVpbGQgYW4gZW52aXJvbm1lbnQgYmxvY2sgY29tYmluaW5nIHRoZSBpbmhlcml0ZWQgZW52aXJvbm1lbnQKKyAqIG1lcmdlZCB3aXRoIHRoZSBnaXZlbiBsaXN0IG9mIHNldHRpbmdzLgorICoKKyAqIFZhbHVlcyBvZiB0aGUgZm9ybSAiS0VZPVZBTFVFIiBpbiBkZWx0YWVudiBvdmVycmlkZSBpbmhlcml0ZWQgdmFsdWVzLgorICogVmFsdWVzIG9mIHRoZSBmb3JtICJLRVkiIGluIGRlbHRhZW52IGRlbGV0ZSBpbmhlcml0ZWQgdmFsdWVzLgorICoKKyAqIE11bHRpcGxlIGVudHJpZXMgaW4gZGVsdGFlbnYgZm9yIHRoZSBzYW1lIGtleSBhcmUgZXhwbGljaXRseSBhbGxvd2VkLgorICoKKyAqIFdlIHJldHVybiBhIGNvbnRpZ3VvdXMgYmxvY2sgb2YgVU5JQ09ERSBzdHJpbmdzIHdpdGggYSBmaW5hbCB0cmFpbGluZworICogemVybyB3b3JkLgorICovCitzdGF0aWMgd2NoYXJfdCAqbWFrZV9lbnZpcm9ubWVudF9ibG9jayhjaGFyICoqZGVsdGFlbnYpCit7CisJd2NoYXJfdCAqd2VudiA9IEdldEVudmlyb25tZW50U3RyaW5nc1coKSwgKndkZWx0YWVudiwgKnJlc3VsdCwgKnA7CisJc2l6ZV90IHdsZW4sIHMsIGRlbHRhX3NpemUsIHNpemU7CisKKwl3Y2hhcl90ICoqYXJyYXkgPSBOVUxMOworCXNpemVfdCBhbGxvYyA9IDAsIG5yID0gMCwgaTsKKworCXNpemUgPSAxOyAvKiBmb3IgZXh0cmEgTlVMIGF0IHRoZSBlbmQgKi8KKworCS8qIElmIHRoZXJlIGlzIG5vIGRlbHRhZW52IHRvIGFwcGx5LCBzaW1wbHkgcmV0dXJuIGEgY29weS4gKi8KKwlpZiAoIWRlbHRhZW52IHx8ICEqZGVsdGFlbnYpIHsKKwkJZm9yIChwID0gd2VudjsgcCAmJiAqcDsgKSB7CisJCQlzaXplX3QgcyA9IHdjc2xlbihwKSArIDE7CisJCQlzaXplICs9IHM7CisJCQlwICs9IHM7CisJCX0KKworCQlBTExPQ19BUlJBWShyZXN1bHQsIHNpemUpOworCQlDT1BZX0FSUkFZKHJlc3VsdCwgd2Vudiwgc2l6ZSk7CisJCUZyZWVFbnZpcm9ubWVudFN0cmluZ3NXKHdlbnYpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qCisJICogSWYgdGhlcmUgaXMgYSBkZWx0YWVudiwgbGV0J3MgYWNjdW11bGF0ZSBhbGwga2V5cyBpbnRvIGBhcnJheWAsCisJICogc29ydCB0aGVtIHVzaW5nIHRoZSBzdGFibGUgZ2l0X3N0YWJsZV9xc29ydCgpIGFuZCB0aGVuIGNvcHksCisJICogc2tpcHBpbmcgZHVwbGljYXRlIGtleXMKKwkgKi8KKwlmb3IgKHAgPSB3ZW52OyBwICYmICpwOyApIHsKKwkJQUxMT0NfR1JPVyhhcnJheSwgbnIgKyAxLCBhbGxvYyk7CisJCXMgPSB3Y3NsZW4ocCkgKyAxOworCQlhcnJheVtucisrXSA9IHA7CisJCXAgKz0gczsKKwkJc2l6ZSArPSBzOworCX0KKworCS8qIChvdmVyLSlhc3Nlc3Mgc2l6ZSBuZWVkZWQgZm9yIHdjaGFyIHZlcnNpb24gb2YgZGVsdGFlbnYgKi8KKwlmb3IgKGRlbHRhX3NpemUgPSAwLCBpID0gMDsgZGVsdGFlbnZbaV07IGkrKykKKwkJZGVsdGFfc2l6ZSArPSBzdHJsZW4oZGVsdGFlbnZbaV0pICogMiArIDE7CisJQUxMT0NfQVJSQVkod2RlbHRhZW52LCBkZWx0YV9zaXplKTsKKworCS8qIGNvbnZlcnQgdGhlIGRlbHRhZW52LCBhcHBlbmRpbmcgdG8gYXJyYXkgKi8KKwlmb3IgKGkgPSAwLCBwID0gd2RlbHRhZW52OyBkZWx0YWVudltpXTsgaSsrKSB7CisJCUFMTE9DX0dST1coYXJyYXksIG5yICsgMSwgYWxsb2MpOworCQl3bGVuID0geHV0ZnRvd2NzKHAsIGRlbHRhZW52W2ldLCB3ZGVsdGFlbnYgKyBkZWx0YV9zaXplIC0gcCk7CisJCWFycmF5W25yKytdID0gcDsKKwkJcCArPSB3bGVuICsgMTsKKwl9CisKKwlnaXRfc3RhYmxlX3Fzb3J0KGFycmF5LCBuciwgc2l6ZW9mKCphcnJheSksIHdlbnZjbXApOworCUFMTE9DX0FSUkFZKHJlc3VsdCwgc2l6ZSArIGRlbHRhX3NpemUpOworCisJZm9yIChwID0gcmVzdWx0LCBpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJLyogU2tpcCBhbnkgZHVwbGljYXRlIGtleXM7IGxhc3Qgb25lIHdpbnMgKi8KKwkJd2hpbGUgKGkgKyAxIDwgbnIgJiYgIXdlbnZjbXAoYXJyYXkgKyBpLCBhcnJheSArIGkgKyAxKSkKKwkJICAgICAgIGkrKzsKKworCQkvKiBTa2lwICJ0byBkZWxldGUiIGVudHJ5ICovCisJCWlmICghd2NzY2hyKGFycmF5W2ldLCBMJz0nKSkKKwkJCWNvbnRpbnVlOworCisJCXNpemUgPSB3Y3NsZW4oYXJyYXlbaV0pICsgMTsKKwkJQ09QWV9BUlJBWShwLCBhcnJheVtpXSwgc2l6ZSk7CisJCXAgKz0gc2l6ZTsKKwl9CisJKnAgPSBMJ1wwJzsKKworCWZyZWUoYXJyYXkpOworCWZyZWUod2RlbHRhZW52KTsKKwlGcmVlRW52aXJvbm1lbnRTdHJpbmdzVyh3ZW52KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBkb191bnNldF9lbnZpcm9ubWVudF92YXJpYWJsZXModm9pZCkKK3sKKwlzdGF0aWMgaW50IGRvbmU7CisJY2hhciAqcCA9IHVuc2V0X2Vudmlyb25tZW50X3ZhcmlhYmxlczsKKworCWlmIChkb25lIHx8ICFwKQorCQlyZXR1cm47CisJZG9uZSA9IDE7CisKKwlmb3IgKDs7KSB7CisJCWNoYXIgKmNvbW1hID0gc3RyY2hyKHAsICcsJyk7CisKKwkJaWYgKGNvbW1hKQorCQkJKmNvbW1hID0gJ1wwJzsKKwkJdW5zZXRlbnYocCk7CisJCWlmICghY29tbWEpCisJCQlicmVhazsKKwkJcCA9IGNvbW1hICsgMTsKKwl9Cit9CisKK3N0cnVjdCBwaW5mb190IHsKKwlzdHJ1Y3QgcGluZm9fdCAqbmV4dDsKKwlwaWRfdCBwaWQ7CisJSEFORExFIHByb2M7Cit9Oworc3RhdGljIHN0cnVjdCBwaW5mb190ICpwaW5mbyA9IE5VTEw7CitDUklUSUNBTF9TRUNUSU9OIHBpbmZvX2NzOworCisvKiBVc2VkIHRvIG1hdGNoIGFuZCBjaG9tcCBvZmYgcGF0aCBjb21wb25lbnRzICovCitzdGF0aWMgaW5saW5lIGludCBtYXRjaF9sYXN0X3BhdGhfY29tcG9uZW50KGNvbnN0IGNoYXIgKnBhdGgsIHNpemVfdCAqbGVuLAorCQkJCQkgICAgY29uc3QgY2hhciAqY29tcG9uZW50KQoreworCXNpemVfdCBjb21wb25lbnRfbGVuID0gc3RybGVuKGNvbXBvbmVudCk7CisJaWYgKCpsZW4gPCBjb21wb25lbnRfbGVuICsgMSB8fAorCSAgICAhaXNfZGlyX3NlcChwYXRoWypsZW4gLSBjb21wb25lbnRfbGVuIC0gMV0pIHx8CisJICAgIGZzcGF0aG5jbXAocGF0aCArICpsZW4gLSBjb21wb25lbnRfbGVuLCBjb21wb25lbnQsIGNvbXBvbmVudF9sZW4pKQorCQlyZXR1cm4gMDsKKwkqbGVuIC09IGNvbXBvbmVudF9sZW4gKyAxOworCS8qIGNob21wIG9mZiByZXBlYXRlZCBkaXIgc2VwYXJhdG9ycyAqLworCXdoaWxlICgqbGVuID4gMCAmJiBpc19kaXJfc2VwKHBhdGhbKmxlbiAtIDFdKSkKKwkJKCpsZW4pLS07CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaXNfbXN5czJfc2goY29uc3QgY2hhciAqY21kKQoreworCWlmICghY21kKQorCQlyZXR1cm4gMDsKKworCWlmICghc3RyY21wKGNtZCwgInNoIikpIHsKKwkJc3RhdGljIGludCByZXQgPSAtMTsKKwkJY2hhciAqcDsKKworCQlpZiAocmV0ID49IDApCisJCQlyZXR1cm4gcmV0OworCisJCXAgPSBwYXRoX2xvb2t1cChjbWQsIDApOworCQlpZiAoIXApCisJCQlyZXQgPSAwOworCQllbHNlIHsKKwkJCXNpemVfdCBsZW4gPSBzdHJsZW4ocCk7CisKKwkJCXJldCA9IG1hdGNoX2xhc3RfcGF0aF9jb21wb25lbnQocCwgJmxlbiwgInNoLmV4ZSIpICYmCisJCQkJbWF0Y2hfbGFzdF9wYXRoX2NvbXBvbmVudChwLCAmbGVuLCAiYmluIikgJiYKKwkJCQltYXRjaF9sYXN0X3BhdGhfY29tcG9uZW50KHAsICZsZW4sICJ1c3IiKTsKKwkJCWZyZWUocCk7CisJCX0KKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoZW5kc193aXRoKGNtZCwgIlxcc2guZXhlIikpIHsKKwkJc3RhdGljIGNoYXIgKnNoOworCisJCWlmICghc2gpCisJCQlzaCA9IHBhdGhfbG9va3VwKCJzaCIsIDApOworCisJCXJldHVybiAhZnNwYXRoY21wKGNtZCwgc2gpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgcGlkX3QgbWluZ3dfc3Bhd252ZV9mZChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKiphcmd2LCBjaGFyICoqZGVsdGFlbnYsCisJCQkgICAgICBjb25zdCBjaGFyICpkaXIsCisJCQkgICAgICBpbnQgcHJlcGVuZF9jbWQsIGludCBmaGluLCBpbnQgZmhvdXQsIGludCBmaGVycikKK3sKKwlzdGF0aWMgaW50IHJlc3RyaWN0X2hhbmRsZV9pbmhlcml0YW5jZSA9IC0xOworCVNUQVJUVVBJTkZPRVhXIHNpOworCVBST0NFU1NfSU5GT1JNQVRJT04gcGk7CisJTFBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfTElTVCBhdHRyX2xpc3QgPSBOVUxMOworCUhBTkRMRSBzdGRoYW5kbGVzWzNdOworCURXT1JEIHN0ZGhhbmRsZXNfY291bnQgPSAwOworCVNJWkVfVCBzaXplOworCXN0cnVjdCBzdHJidWYgYXJnczsKKwl3Y2hhcl90IHdjbWRbTUFYX1BBVEhdLCB3ZGlyW01BWF9QQVRIXSwgKndhcmdzLCAqd2VudmJsayA9IE5VTEw7CisJdW5zaWduZWQgZmxhZ3MgPSBDUkVBVEVfVU5JQ09ERV9FTlZJUk9OTUVOVDsKKwlCT09MIHJldDsKKwlIQU5ETEUgY29uczsKKwljb25zdCBjaGFyICooKnF1b3RlX2FyZykoY29uc3QgY2hhciAqYXJnKSA9CisJCWlzX21zeXMyX3NoKGNtZCA/IGNtZCA6ICphcmd2KSA/CisJCXF1b3RlX2FyZ19tc3lzMiA6IHF1b3RlX2FyZ19tc3ZjOworCWNvbnN0IGNoYXIgKnN0cmFjZV9lbnY7CisKKwkvKiBNYWtlIHN1cmUgdG8gb3ZlcnJpZGUgcHJldmlvdXMgZXJyb3JzLCBpZiBhbnkgKi8KKwllcnJubyA9IDA7CisKKwlpZiAocmVzdHJpY3RfaGFuZGxlX2luaGVyaXRhbmNlIDwgMCkKKwkJcmVzdHJpY3RfaGFuZGxlX2luaGVyaXRhbmNlID0gY29yZV9yZXN0cmljdF9pbmhlcml0ZWRfaGFuZGxlczsKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgY29kZSB0byByZXN0cmljdCB3aGljaCBoYW5kbGVzIGFyZSBpbmhlcml0ZWQgc2VlbXMKKwkgKiB0byB3b3JrIHByb3Blcmx5IG9ubHkgb24gV2luZG93cyA3IGFuZCBsYXRlciwgc28gbGV0J3MgZGlzYWJsZSBpdAorCSAqIG9uIFdpbmRvd3MgVmlzdGEgYW5kIDIwMDguCisJICovCisJaWYgKHJlc3RyaWN0X2hhbmRsZV9pbmhlcml0YW5jZSA8IDApCisJCXJlc3RyaWN0X2hhbmRsZV9pbmhlcml0YW5jZSA9IEdldFZlcnNpb24oKSA+PiAxNiA+PSA3NjAxOworCisJZG9fdW5zZXRfZW52aXJvbm1lbnRfdmFyaWFibGVzKCk7CisKKwkvKiBEZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2UgYXJlIGFzc29jaWF0ZWQgdG8gYSBjb25zb2xlICovCisJY29ucyA9IENyZWF0ZUZpbGVXKEwiQ09OT1VUJCIsIEdFTkVSSUNfV1JJVEUsCisJCQlGSUxFX1NIQVJFX1dSSVRFLCBOVUxMLCBPUEVOX0VYSVNUSU5HLAorCQkJRklMRV9BVFRSSUJVVEVfTk9STUFMLCBOVUxMKTsKKwlpZiAoY29ucyA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworCQkvKiBUaGVyZSBpcyBubyBjb25zb2xlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHByb2Nlc3MuCisJCSAqIFNpbmNlIHRoZSBjaGlsZCBpcyBhIGNvbnNvbGUgcHJvY2VzcywgV2luZG93cworCQkgKiB3b3VsZCBub3JtYWxseSBjcmVhdGUgYSBjb25zb2xlIHdpbmRvdy4gQnV0CisJCSAqIHNpbmNlIHdlJ2xsIGJlIHJlZGlyZWN0aW5nIHN0ZCBzdHJlYW1zLCB3ZSBkbworCQkgKiBub3QgbmVlZCB0aGUgY29uc29sZS4KKwkJICogSXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSBERVRBQ0hFRF9QUk9DRVNTCisJCSAqIGluc3RlYWQgb2YgQ1JFQVRFX05PX1dJTkRPVyB0byBtYWtlIHNzaAorCQkgKiByZWNvZ25pemUgdGhhdCBpdCBoYXMgbm8gY29uc29sZS4KKwkJICovCisJCWZsYWdzIHw9IERFVEFDSEVEX1BST0NFU1M7CisJfSBlbHNlIHsKKwkJLyogVGhlcmUgaXMgYWxyZWFkeSBhIGNvbnNvbGUuIElmIHdlIHNwZWNpZmllZAorCQkgKiBERVRBQ0hFRF9QUk9DRVNTIGhlcmUsIHRvbywgV2luZG93cyB3b3VsZAorCQkgKiBkaXNhc3NvY2lhdGUgdGhlIGNoaWxkIGZyb20gdGhlIGNvbnNvbGUuCisJCSAqIFRoZSBzYW1lIGlzIHRydWUgZm9yIENSRUFURV9OT19XSU5ET1cuCisJCSAqIEdvIGZpZ3VyZSEKKwkJICovCisJCUNsb3NlSGFuZGxlKGNvbnMpOworCX0KKwltZW1zZXQoJnNpLCAwLCBzaXplb2Yoc2kpKTsKKwlzaS5TdGFydHVwSW5mby5jYiA9IHNpemVvZihzaSk7CisJc2kuU3RhcnR1cEluZm8uaFN0ZElucHV0ID0gd2luYW5zaV9nZXRfb3NmaGFuZGxlKGZoaW4pOworCXNpLlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQgPSB3aW5hbnNpX2dldF9vc2ZoYW5kbGUoZmhvdXQpOworCXNpLlN0YXJ0dXBJbmZvLmhTdGRFcnJvciA9IHdpbmFuc2lfZ2V0X29zZmhhbmRsZShmaGVycik7CisKKwkvKiBUaGUgbGlzdCBvZiBoYW5kbGVzIGNhbm5vdCBjb250YWluIGR1cGxpY2F0ZXMgKi8KKwlpZiAoc2kuU3RhcnR1cEluZm8uaFN0ZElucHV0ICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQorCQlzdGRoYW5kbGVzW3N0ZGhhbmRsZXNfY291bnQrK10gPSBzaS5TdGFydHVwSW5mby5oU3RkSW5wdXQ7CisJaWYgKHNpLlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUgJiYKKwkgICAgc2kuU3RhcnR1cEluZm8uaFN0ZE91dHB1dCAhPSBzaS5TdGFydHVwSW5mby5oU3RkSW5wdXQpCisJCXN0ZGhhbmRsZXNbc3RkaGFuZGxlc19jb3VudCsrXSA9IHNpLlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQ7CisJaWYgKHNpLlN0YXJ0dXBJbmZvLmhTdGRFcnJvciAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSAmJgorCSAgICBzaS5TdGFydHVwSW5mby5oU3RkRXJyb3IgIT0gc2kuU3RhcnR1cEluZm8uaFN0ZElucHV0ICYmCisJICAgIHNpLlN0YXJ0dXBJbmZvLmhTdGRFcnJvciAhPSBzaS5TdGFydHVwSW5mby5oU3RkT3V0cHV0KQorCQlzdGRoYW5kbGVzW3N0ZGhhbmRsZXNfY291bnQrK10gPSBzaS5TdGFydHVwSW5mby5oU3RkRXJyb3I7CisJaWYgKHN0ZGhhbmRsZXNfY291bnQpCisJCXNpLlN0YXJ0dXBJbmZvLmR3RmxhZ3MgfD0gU1RBUlRGX1VTRVNUREhBTkRMRVM7CisKKwlpZiAoKmFyZ3YgJiYgIXN0cmNtcChjbWQsICphcmd2KSkKKwkJd2NtZFswXSA9IEwnXDAnOworCWVsc2UgaWYgKHh1dGZ0b3djc19wYXRoKHdjbWQsIGNtZCkgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKGRpciAmJiB4dXRmdG93Y3NfcGF0aCh3ZGlyLCBkaXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogY29uY2F0ZW5hdGUgYXJndiwgcXVvdGluZyBhcmdzIGFzIHdlIGdvICovCisJc3RyYnVmX2luaXQoJmFyZ3MsIDApOworCWlmIChwcmVwZW5kX2NtZCkgeworCQljaGFyICpxdW90ZWQgPSAoY2hhciAqKXF1b3RlX2FyZyhjbWQpOworCQlzdHJidWZfYWRkc3RyKCZhcmdzLCBxdW90ZWQpOworCQlpZiAocXVvdGVkICE9IGNtZCkKKwkJCWZyZWUocXVvdGVkKTsKKwl9CisJZm9yICg7ICphcmd2OyBhcmd2KyspIHsKKwkJY2hhciAqcXVvdGVkID0gKGNoYXIgKilxdW90ZV9hcmcoKmFyZ3YpOworCQlpZiAoKmFyZ3MuYnVmKQorCQkJc3RyYnVmX2FkZGNoKCZhcmdzLCAnICcpOworCQlzdHJidWZfYWRkc3RyKCZhcmdzLCBxdW90ZWQpOworCQlpZiAocXVvdGVkICE9ICphcmd2KQorCQkJZnJlZShxdW90ZWQpOworCX0KKworCXN0cmFjZV9lbnYgPSBnZXRlbnYoIkdJVF9TVFJBQ0VfQ09NTUFORFMiKTsKKwlpZiAoc3RyYWNlX2VudikgeworCQljaGFyICpwID0gcGF0aF9sb29rdXAoInN0cmFjZS5leGUiLCAxKTsKKwkJaWYgKCFwKQorCQkJcmV0dXJuIGVycm9yKCJzdHJhY2Ugbm90IGZvdW5kISIpOworCQlpZiAoeHV0ZnRvd2NzX3BhdGgod2NtZCwgcCkgPCAwKSB7CisJCQlmcmVlKHApOworCQkJcmV0dXJuIC0xOworCQl9CisJCWZyZWUocCk7CisJCWlmICghc3RyY21wKCIxIiwgc3RyYWNlX2VudikgfHwKKwkJICAgICFzdHJjYXNlY21wKCJ5ZXMiLCBzdHJhY2VfZW52KSB8fAorCQkgICAgIXN0cmNhc2VjbXAoInRydWUiLCBzdHJhY2VfZW52KSkKKwkJCXN0cmJ1Zl9pbnNlcnQoJmFyZ3MsIDAsICJzdHJhY2UgIiwgNyk7CisJCWVsc2UgeworCQkJY29uc3QgY2hhciAqcXVvdGVkID0gcXVvdGVfYXJnKHN0cmFjZV9lbnYpOworCQkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICJzdHJhY2UgLW8gJXMgIiwgcXVvdGVkKTsKKwkJCWlmIChxdW90ZWQgIT0gc3RyYWNlX2VudikKKwkJCQlmcmVlKChjaGFyICopcXVvdGVkKTsKKwkJCXN0cmJ1Zl9pbnNlcnQoJmFyZ3MsIDAsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCQkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCX0KKwl9CisKKwlBTExPQ19BUlJBWSh3YXJncywgc3RfYWRkKHN0X211bHQoMiwgYXJncy5sZW4pLCAxKSk7CisJeHV0ZnRvd2NzKHdhcmdzLCBhcmdzLmJ1ZiwgMiAqIGFyZ3MubGVuICsgMSk7CisJc3RyYnVmX3JlbGVhc2UoJmFyZ3MpOworCisJd2VudmJsayA9IG1ha2VfZW52aXJvbm1lbnRfYmxvY2soZGVsdGFlbnYpOworCisJbWVtc2V0KCZwaSwgMCwgc2l6ZW9mKHBpKSk7CisJaWYgKHJlc3RyaWN0X2hhbmRsZV9pbmhlcml0YW5jZSAmJiBzdGRoYW5kbGVzX2NvdW50ICYmCisJICAgIChJbml0aWFsaXplUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3QoTlVMTCwgMSwgMCwgJnNpemUpIHx8CisJICAgICBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSAmJgorCSAgICAoYXR0cl9saXN0ID0gKExQUFJPQ19USFJFQURfQVRUUklCVVRFX0xJU1QpCisJCQkoSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksIDAsIHNpemUpKSkgJiYKKwkgICAgSW5pdGlhbGl6ZVByb2NUaHJlYWRBdHRyaWJ1dGVMaXN0KGF0dHJfbGlzdCwgMSwgMCwgJnNpemUpICYmCisJICAgIFVwZGF0ZVByb2NUaHJlYWRBdHRyaWJ1dGUoYXR0cl9saXN0LCAwLAorCQkJCSAgICAgIFBST0NfVEhSRUFEX0FUVFJJQlVURV9IQU5ETEVfTElTVCwKKwkJCQkgICAgICBzdGRoYW5kbGVzLAorCQkJCSAgICAgIHN0ZGhhbmRsZXNfY291bnQgKiBzaXplb2YoSEFORExFKSwKKwkJCQkgICAgICBOVUxMLCBOVUxMKSkgeworCQlzaS5scEF0dHJpYnV0ZUxpc3QgPSBhdHRyX2xpc3Q7CisJCWZsYWdzIHw9IEVYVEVOREVEX1NUQVJUVVBJTkZPX1BSRVNFTlQ7CisJfQorCisJcmV0ID0gQ3JlYXRlUHJvY2Vzc1coKndjbWQgPyB3Y21kIDogTlVMTCwgd2FyZ3MsIE5VTEwsIE5VTEwsCisJCQkgICAgIHN0ZGhhbmRsZXNfY291bnQgPyBUUlVFIDogRkFMU0UsCisJCQkgICAgIGZsYWdzLCB3ZW52YmxrLCBkaXIgPyB3ZGlyIDogTlVMTCwKKwkJCSAgICAgJnNpLlN0YXJ0dXBJbmZvLCAmcGkpOworCisJLyoKKwkgKiBPbiBXaW5kb3dzIDIwMDggUjIsIGl0IHNlZW1zIHRoYXQgc3BlY2lmeWluZyBjZXJ0YWluIHR5cGVzIG9mIGhhbmRsZXMKKwkgKiAoc3VjaCBhcyBGSUxFX1RZUEVfQ0hBUiBvciBGSUxFX1RZUEVfUElQRSkgd2lsbCBhbHdheXMgcHJvZHVjZSBhbgorCSAqIGVycm9yLiBSYXRoZXIgdGhhbiBwbGF5aW5nIGZpbmlja3kgYW5kIGZyYWdpbGUgZ2FtZXMsIGxldCdzIGp1c3QgdHJ5CisJICogdG8gZGV0ZWN0IHRoaXMgc2l0dWF0aW9uIGFuZCBzaW1wbHkgdHJ5IGFnYWluIHdpdGhvdXQgcmVzdHJpY3RpbmcgYW55CisJICogaGFuZGxlIGluaGVyaXRhbmNlLiBUaGlzIGlzIHN0aWxsIGJldHRlciB0aGFuIGZhaWxpbmcgdG8gY3JlYXRlCisJICogcHJvY2Vzc2VzLgorCSAqLworCWlmICghcmV0ICYmIHJlc3RyaWN0X2hhbmRsZV9pbmhlcml0YW5jZSAmJiBzdGRoYW5kbGVzX2NvdW50KSB7CisJCURXT1JEIGVyciA9IEdldExhc3RFcnJvcigpOworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCWlmIChlcnIgIT0gRVJST1JfTk9fU1lTVEVNX1JFU09VUkNFUyAmJgorCQkgICAgLyoKKwkJICAgICAqIE9uIFdpbmRvd3MgNyBhbmQgZWFybGllciwgaGFuZGxlcyBvbiBwaXBlcyBhbmQgY2hhcmFjdGVyCisJCSAgICAgKiBkZXZpY2VzIGFyZSBpbmhlcml0ZWQgYXV0b21hdGljYWxseSwgYW5kIGNhbm5vdCBiZQorCQkgICAgICogc3BlY2lmaWVkIGluIHRoZSB0aHJlYWQgaGFuZGxlIGxpc3QuIFJhdGhlciB0aGFuIHRyeWluZworCQkgICAgICogdG8gY2F0Y2ggZWFjaCBhbmQgZXZlcnkgY29ybmVyIGNhc2UgKGFuZCBydW5uaW5nIHRoZQorCQkgICAgICogY2hhbmNlIG9mICpzdGlsbCogZm9yZ2V0dGluZyBhIGZldyksIGxldCdzIGp1c3QgZmFsbAorCQkgICAgICogYmFjayB0byBjcmVhdGluZyB0aGUgcHJvY2VzcyB3aXRob3V0IHRyeWluZyB0byBsaW1pdCB0aGUKKwkJICAgICAqIGhhbmRsZSBpbmhlcml0YW5jZS4KKwkJICAgICAqLworCQkgICAgIShlcnIgPT0gRVJST1JfSU5WQUxJRF9QQVJBTUVURVIgJiYKKwkJICAgICAgR2V0VmVyc2lvbigpID4+IDE2IDwgOTIwMCkgJiYKKwkJICAgICFnZXRlbnYoIlNVUFBSRVNTX0hBTkRMRV9JTkhFUklUQU5DRV9XQVJOSU5HIikpIHsKKwkJCURXT1JEIGZsID0gMDsKKwkJCWludCBpOworCisJCQlzZXRlbnYoIlNVUFBSRVNTX0hBTkRMRV9JTkhFUklUQU5DRV9XQVJOSU5HIiwgIjEiLCAxKTsKKworCQkJZm9yIChpID0gMDsgaSA8IHN0ZGhhbmRsZXNfY291bnQ7IGkrKykgeworCQkJCUhBTkRMRSBoID0gc3RkaGFuZGxlc1tpXTsKKwkJCQlzdHJidWZfYWRkZigmYnVmLCAiaGFuZGxlICMlZDogJXAgKHR5cGUgJWx4LCAiCisJCQkJCSAgICAiaGFuZGxlIGluZm8gKCVkKSAlbHhcbiIsIGksIGgsCisJCQkJCSAgICBHZXRGaWxlVHlwZShoKSwKKwkJCQkJICAgIEdldEhhbmRsZUluZm9ybWF0aW9uKGgsICZmbCksCisJCQkJCSAgICBmbCk7CisJCQl9CisJCQlzdHJidWZfYWRkc3RyKCZidWYsICJcblRoaXMgaXMgYSBidWc7IHBsZWFzZSByZXBvcnQgaXQgIgorCQkJCSAgICAgICJhdFxuaHR0cHM6Ly9naXRodWIuY29tL2dpdC1mb3Itd2luZG93cy8iCisJCQkJICAgICAgImdpdC9pc3N1ZXMvbmV3XG5cbiIKKwkJCQkgICAgICAiVG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nLCBwbGVhc2Ugc2V0ICIKKwkJCQkgICAgICAidGhlIGVudmlyb25tZW50IHZhcmlhYmxlXG5cbiIKKwkJCQkgICAgICAiXHRTVVBQUkVTU19IQU5ETEVfSU5IRVJJVEFOQ0VfV0FSTklORz0xIgorCQkJCSAgICAgICJcbiIpOworCQl9CisJCXJlc3RyaWN0X2hhbmRsZV9pbmhlcml0YW5jZSA9IDA7CisJCWZsYWdzICY9IH5FWFRFTkRFRF9TVEFSVFVQSU5GT19QUkVTRU5UOworCQlyZXQgPSBDcmVhdGVQcm9jZXNzVygqd2NtZCA/IHdjbWQgOiBOVUxMLCB3YXJncywgTlVMTCwgTlVMTCwKKwkJCQkgICAgIFRSVUUsIGZsYWdzLCB3ZW52YmxrLCBkaXIgPyB3ZGlyIDogTlVMTCwKKwkJCQkgICAgICZzaS5TdGFydHVwSW5mbywgJnBpKTsKKwkJaWYgKCFyZXQpCisJCQllcnJubyA9IGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpOworCQlpZiAocmV0ICYmIGJ1Zi5sZW4pIHsKKwkJCXdhcm5pbmcoImZhaWxlZCB0byByZXN0cmljdCBmaWxlIGhhbmRsZXMgKCVsZClcblxuJXMiLAorCQkJCWVyciwgYnVmLmJ1Zik7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfSBlbHNlIGlmICghcmV0KQorCQllcnJubyA9IGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpOworCisJaWYgKHNpLmxwQXR0cmlidXRlTGlzdCkKKwkJRGVsZXRlUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3Qoc2kubHBBdHRyaWJ1dGVMaXN0KTsKKwlpZiAoYXR0cl9saXN0KQorCQlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLCAwLCBhdHRyX2xpc3QpOworCisJZnJlZSh3ZW52YmxrKTsKKwlmcmVlKHdhcmdzKTsKKworCWlmICghcmV0KQorCQlyZXR1cm4gLTE7CisKKwlDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKKworCS8qCisJICogVGhlIHByb2Nlc3MgSUQgaXMgdGhlIGh1bWFuLXJlYWRhYmxlIGlkZW50aWZpZXIgb2YgdGhlIHByb2Nlc3MKKwkgKiB0aGF0IHdlIHdhbnQgdG8gcHJlc2VudCBpbiBsb2cgYW5kIGVycm9yIG1lc3NhZ2VzLiBUaGUgaGFuZGxlCisJICogaXMgbm90IHVzZWZ1bCBmb3IgdGhpcyBwdXJwb3NlLiBCdXQgd2UgY2Fubm90IGNsb3NlIGl0LCBlaXRoZXIsCisJICogYmVjYXVzZSBpdCBpcyBub3QgcG9zc2libGUgdG8gdHVybiBhIHByb2Nlc3MgSUQgaW50byBhIHByb2Nlc3MKKwkgKiBoYW5kbGUgYWZ0ZXIgdGhlIHByb2Nlc3MgdGVybWluYXRlZC4KKwkgKiBLZWVwIHRoZSBoYW5kbGUgaW4gYSBsaXN0IGZvciB3YWl0cGlkLgorCSAqLworCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZwaW5mb19jcyk7CisJeworCQlzdHJ1Y3QgcGluZm9fdCAqaW5mbyA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwaW5mb190KSk7CisJCWluZm8tPnBpZCA9IHBpLmR3UHJvY2Vzc0lkOworCQlpbmZvLT5wcm9jID0gcGkuaFByb2Nlc3M7CisJCWluZm8tPm5leHQgPSBwaW5mbzsKKwkJcGluZm8gPSBpbmZvOworCX0KKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmcGluZm9fY3MpOworCisJcmV0dXJuIChwaWRfdClwaS5kd1Byb2Nlc3NJZDsKK30KKworc3RhdGljIHBpZF90IG1pbmd3X3NwYXdudihjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKiphcmd2LCBpbnQgcHJlcGVuZF9jbWQpCit7CisJcmV0dXJuIG1pbmd3X3NwYXdudmVfZmQoY21kLCBhcmd2LCBOVUxMLCBOVUxMLCBwcmVwZW5kX2NtZCwgMCwgMSwgMik7Cit9CisKK3BpZF90IG1pbmd3X3NwYXdudnBlKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqKmFyZ3YsIGNoYXIgKipkZWx0YWVudiwKKwkJICAgICBjb25zdCBjaGFyICpkaXIsCisJCSAgICAgaW50IGZoaW4sIGludCBmaG91dCwgaW50IGZoZXJyKQoreworCXBpZF90IHBpZDsKKwljaGFyICpwcm9nID0gcGF0aF9sb29rdXAoY21kLCAwKTsKKworCWlmICghcHJvZykgeworCQllcnJubyA9IEVOT0VOVDsKKwkJcGlkID0gLTE7CisJfQorCWVsc2UgeworCQljb25zdCBjaGFyICppbnRlcnByID0gcGFyc2VfaW50ZXJwcmV0ZXIocHJvZyk7CisKKwkJaWYgKGludGVycHIpIHsKKwkJCWNvbnN0IGNoYXIgKmFyZ3YwID0gYXJndlswXTsKKwkJCWNoYXIgKmlwcm9nID0gcGF0aF9sb29rdXAoaW50ZXJwciwgMSk7CisJCQlhcmd2WzBdID0gcHJvZzsKKwkJCWlmICghaXByb2cpIHsKKwkJCQllcnJubyA9IEVOT0VOVDsKKwkJCQlwaWQgPSAtMTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXBpZCA9IG1pbmd3X3NwYXdudmVfZmQoaXByb2csIGFyZ3YsIGRlbHRhZW52LCBkaXIsIDEsCisJCQkJCQkgICAgICAgZmhpbiwgZmhvdXQsIGZoZXJyKTsKKwkJCQlmcmVlKGlwcm9nKTsKKwkJCX0KKwkJCWFyZ3ZbMF0gPSBhcmd2MDsKKwkJfQorCQllbHNlCisJCQlwaWQgPSBtaW5nd19zcGF3bnZlX2ZkKHByb2csIGFyZ3YsIGRlbHRhZW52LCBkaXIsIDAsCisJCQkJCSAgICAgICBmaGluLCBmaG91dCwgZmhlcnIpOworCQlmcmVlKHByb2cpOworCX0KKwlyZXR1cm4gcGlkOworfQorCitzdGF0aWMgaW50IHRyeV9zaGVsbF9leGVjKGNvbnN0IGNoYXIgKmNtZCwgY2hhciAqY29uc3QgKmFyZ3YpCit7CisJY29uc3QgY2hhciAqaW50ZXJwciA9IHBhcnNlX2ludGVycHJldGVyKGNtZCk7CisJY2hhciAqcHJvZzsKKwlpbnQgcGlkID0gMDsKKworCWlmICghaW50ZXJwcikKKwkJcmV0dXJuIDA7CisJcHJvZyA9IHBhdGhfbG9va3VwKGludGVycHIsIDEpOworCWlmIChwcm9nKSB7CisJCWludCBleGVjX2lkOworCQlpbnQgYXJnYyA9IDA7CisjaWZuZGVmIF9NU0NfVkVSCisJCWNvbnN0CisjZW5kaWYKKwkJY2hhciAqKmFyZ3YyOworCQl3aGlsZSAoYXJndlthcmdjXSkgYXJnYysrOworCQlBTExPQ19BUlJBWShhcmd2MiwgYXJnYyArIDEpOworCQlhcmd2MlswXSA9IChjaGFyICopY21kOwkvKiBmdWxsIHBhdGggdG8gdGhlIHNjcmlwdCBmaWxlICovCisJCUNPUFlfQVJSQVkoJmFyZ3YyWzFdLCAmYXJndlsxXSwgYXJnYyk7CisJCWV4ZWNfaWQgPSB0cmFjZTJfZXhlYyhwcm9nLCBhcmd2Mik7CisJCXBpZCA9IG1pbmd3X3NwYXdudihwcm9nLCBhcmd2MiwgMSk7CisJCWlmIChwaWQgPj0gMCkgeworCQkJaW50IHN0YXR1czsKKwkJCWlmICh3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCkgPCAwKQorCQkJCXN0YXR1cyA9IDI1NTsKKwkJCXRyYWNlMl9leGVjX3Jlc3VsdChleGVjX2lkLCBzdGF0dXMpOworCQkJZXhpdChzdGF0dXMpOworCQl9CisJCXRyYWNlMl9leGVjX3Jlc3VsdChleGVjX2lkLCAtMSk7CisJCXBpZCA9IDE7CS8qIGluZGljYXRlIHRoYXQgd2UgdHJpZWQgYnV0IGZhaWxlZCAqLworCQlmcmVlKHByb2cpOworCQlmcmVlKGFyZ3YyKTsKKwl9CisJcmV0dXJuIHBpZDsKK30KKworaW50IG1pbmd3X2V4ZWN2KGNvbnN0IGNoYXIgKmNtZCwgY2hhciAqY29uc3QgKmFyZ3YpCit7CisJLyogY2hlY2sgaWYgZ2l0X2NvbW1hbmQgaXMgYSBzaGVsbCBzY3JpcHQgKi8KKwlpZiAoIXRyeV9zaGVsbF9leGVjKGNtZCwgYXJndikpIHsKKwkJaW50IHBpZCwgc3RhdHVzOworCQlpbnQgZXhlY19pZDsKKworCQlleGVjX2lkID0gdHJhY2UyX2V4ZWMoY21kLCAoY29uc3QgY2hhciAqKilhcmd2KTsKKwkJcGlkID0gbWluZ3dfc3Bhd252KGNtZCwgKGNvbnN0IGNoYXIgKiopYXJndiwgMCk7CisJCWlmIChwaWQgPCAwKSB7CisJCQl0cmFjZTJfZXhlY19yZXN1bHQoZXhlY19pZCwgLTEpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICh3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCkgPCAwKQorCQkJc3RhdHVzID0gMjU1OworCQl0cmFjZTJfZXhlY19yZXN1bHQoZXhlY19pZCwgc3RhdHVzKTsKKwkJZXhpdChzdGF0dXMpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK2ludCBtaW5nd19leGVjdnAoY29uc3QgY2hhciAqY21kLCBjaGFyICpjb25zdCAqYXJndikKK3sKKwljaGFyICpwcm9nID0gcGF0aF9sb29rdXAoY21kLCAwKTsKKworCWlmIChwcm9nKSB7CisJCW1pbmd3X2V4ZWN2KHByb2csIGFyZ3YpOworCQlmcmVlKHByb2cpOworCX0gZWxzZQorCQllcnJubyA9IEVOT0VOVDsKKworCXJldHVybiAtMTsKK30KKworaW50IG1pbmd3X2tpbGwocGlkX3QgcGlkLCBpbnQgc2lnKQoreworCWlmIChwaWQgPiAwICYmIHNpZyA9PSBTSUdURVJNKSB7CisJCUhBTkRMRSBoID0gT3BlblByb2Nlc3MoUFJPQ0VTU19URVJNSU5BVEUsIEZBTFNFLCBwaWQpOworCisJCWlmIChUZXJtaW5hdGVQcm9jZXNzKGgsIC0xKSkgeworCQkJQ2xvc2VIYW5kbGUoaCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJCUNsb3NlSGFuZGxlKGgpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIGlmIChwaWQgPiAwICYmIHNpZyA9PSAwKSB7CisJCUhBTkRMRSBoID0gT3BlblByb2Nlc3MoUFJPQ0VTU19RVUVSWV9JTkZPUk1BVElPTiwgRkFMU0UsIHBpZCk7CisJCWlmIChoKSB7CisJCQlDbG9zZUhhbmRsZShoKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJZXJybm8gPSBFSU5WQUw7CisJcmV0dXJuIC0xOworfQorCisvKgorICogVVRGLTggdmVyc2lvbnMgb2YgZ2V0ZW52KCksIHB1dGVudigpIGFuZCB1bnNldGVudigpLgorICogSW50ZXJuYWxseSwgdGhleSB1c2UgdGhlIENSVCdzIHN0b2NrIFVOSUNPREUgcm91dGluZXMKKyAqIHRvIGF2b2lkIGRhdGEgbG9zcy4KKyAqLworY2hhciAqbWluZ3dfZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpCit7CisjZGVmaW5lIEdFVEVOVl9NQVhfUkVUQUlOIDY0CisJc3RhdGljIGNoYXIgKnZhbHVlc1tHRVRFTlZfTUFYX1JFVEFJTl07CisJc3RhdGljIGludCB2YWx1ZV9jb3VudGVyOworCWludCBsZW5fa2V5LCBsZW5fdmFsdWU7CisJd2NoYXJfdCAqd19rZXk7CisJY2hhciAqdmFsdWU7CisJd2NoYXJfdCB3X3ZhbHVlWzMyNzY4XTsKKworCWlmICghbmFtZSB8fCAhKm5hbWUpCisJCXJldHVybiBOVUxMOworCisJbGVuX2tleSA9IHN0cmxlbihuYW1lKSArIDE7CisJLyogV2UgY2Fubm90IHVzZSB4Y2FsbG9jKCkgaGVyZSBiZWNhdXNlIHRoYXQgdXNlcyBnZXRlbnYoKSBpdHNlbGYgKi8KKwl3X2tleSA9IGNhbGxvYyhsZW5fa2V5LCBzaXplb2Yod2NoYXJfdCkpOworCWlmICghd19rZXkpCisJCWRpZSgiT3V0IG9mIG1lbW9yeSwgKHRyaWVkIHRvIGFsbG9jYXRlICV1IHdjaGFyX3QncykiLCBsZW5fa2V5KTsKKwl4dXRmdG93Y3Mod19rZXksIG5hbWUsIGxlbl9rZXkpOworCS8qIEdldEVudmlyb25tZW50VmFyaWFibGVXKCkgb25seSBzZXRzIHRoZSBsYXN0IGVycm9yIHVwb24gZmFpbHVyZSAqLworCVNldExhc3RFcnJvcihFUlJPUl9TVUNDRVNTKTsKKwlsZW5fdmFsdWUgPSBHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyh3X2tleSwgd192YWx1ZSwgQVJSQVlfU0laRSh3X3ZhbHVlKSk7CisJaWYgKCFsZW5fdmFsdWUgJiYgR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfRU5WVkFSX05PVF9GT1VORCkgeworCQlmcmVlKHdfa2V5KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWZyZWUod19rZXkpOworCisJbGVuX3ZhbHVlID0gbGVuX3ZhbHVlICogMyArIDE7CisJLyogV2UgY2Fubm90IHVzZSB4Y2FsbG9jKCkgaGVyZSBiZWNhdXNlIHRoYXQgdXNlcyBnZXRlbnYoKSBpdHNlbGYgKi8KKwl2YWx1ZSA9IGNhbGxvYyhsZW5fdmFsdWUsIHNpemVvZihjaGFyKSk7CisJaWYgKCF2YWx1ZSkKKwkJZGllKCJPdXQgb2YgbWVtb3J5LCAodHJpZWQgdG8gYWxsb2NhdGUgJXUgYnl0ZXMpIiwgbGVuX3ZhbHVlKTsKKwl4d2NzdG91dGYodmFsdWUsIHdfdmFsdWUsIGxlbl92YWx1ZSk7CisKKwkvKgorCSAqIFdlIHJldHVybiBgdmFsdWVgIHdoaWNoIGlzIGFuIGFsbG9jYXRlZCB2YWx1ZSBhbmQgdGhlIGNhbGxlciBpcyBOT1QKKwkgKiBleHBlY3RpbmcgdG8gaGF2ZSB0byBmcmVlIGl0LCBzbyB3ZSBrZWVwIGEgcm91bmQtcm9iaW4gYXJyYXksCisJICogaW52YWxpZGF0aW5nIHRoZSBidWZmZXIgYWZ0ZXIgR0VURU5WX01BWF9SRVRBSU4gZ2V0ZW52KCkgY2FsbHMuCisJICovCisJZnJlZSh2YWx1ZXNbdmFsdWVfY291bnRlcl0pOworCXZhbHVlc1t2YWx1ZV9jb3VudGVyKytdID0gdmFsdWU7CisJaWYgKHZhbHVlX2NvdW50ZXIgPj0gQVJSQVlfU0laRSh2YWx1ZXMpKQorCQl2YWx1ZV9jb3VudGVyID0gMDsKKworCXJldHVybiB2YWx1ZTsKK30KKworaW50IG1pbmd3X3B1dGVudihjb25zdCBjaGFyICpuYW1ldmFsdWUpCit7CisJaW50IHNpemU7CisJd2NoYXJfdCAqd2lkZSwgKmVxdWFsOworCUJPT0wgcmVzdWx0OworCisJaWYgKCFuYW1ldmFsdWUgfHwgISpuYW1ldmFsdWUpCisJCXJldHVybiAwOworCisJc2l6ZSA9IHN0cmxlbihuYW1ldmFsdWUpICogMiArIDE7CisJd2lkZSA9IGNhbGxvYyhzaXplLCBzaXplb2Yod2NoYXJfdCkpOworCWlmICghd2lkZSkKKwkJZGllKCJPdXQgb2YgbWVtb3J5LCAodHJpZWQgdG8gYWxsb2NhdGUgJXUgd2NoYXJfdCdzKSIsIHNpemUpOworCXh1dGZ0b3djcyh3aWRlLCBuYW1ldmFsdWUsIHNpemUpOworCWVxdWFsID0gd2NzY2hyKHdpZGUsIEwnPScpOworCWlmICghZXF1YWwpCisJCXJlc3VsdCA9IFNldEVudmlyb25tZW50VmFyaWFibGVXKHdpZGUsIE5VTEwpOworCWVsc2UgeworCQkqZXF1YWwgPSBMJ1wwJzsKKwkJcmVzdWx0ID0gU2V0RW52aXJvbm1lbnRWYXJpYWJsZVcod2lkZSwgZXF1YWwgKyAxKTsKKwl9CisJZnJlZSh3aWRlKTsKKworCWlmICghcmVzdWx0KQorCQllcnJubyA9IGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpOworCisJcmV0dXJuIHJlc3VsdCA/IDAgOiAtMTsKK30KKworc3RhdGljIHZvaWQgZW5zdXJlX3NvY2tldF9pbml0aWFsaXphdGlvbih2b2lkKQoreworCVdTQURBVEEgd3NhOworCXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworCisJaWYgKGluaXRpYWxpemVkKQorCQlyZXR1cm47CisKKwlpZiAoV1NBU3RhcnR1cChNQUtFV09SRCgyLDIpLCAmd3NhKSkKKwkJZGllKCJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3aW5zb2NrIHN1YnN5c3RlbSwgZXJyb3IgJWQiLAorCQkJV1NBR2V0TGFzdEVycm9yKCkpOworCisJYXRleGl0KCh2b2lkKCopKHZvaWQpKSBXU0FDbGVhbnVwKTsKKwlpbml0aWFsaXplZCA9IDE7Cit9CisKKyN1bmRlZiBnZXRob3N0bmFtZQoraW50IG1pbmd3X2dldGhvc3RuYW1lKGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKQoreworICAgIGVuc3VyZV9zb2NrZXRfaW5pdGlhbGl6YXRpb24oKTsKKyAgICByZXR1cm4gZ2V0aG9zdG5hbWUobmFtZSwgbmFtZWxlbik7Cit9CisKKyN1bmRlZiBnZXRob3N0YnluYW1lCitzdHJ1Y3QgaG9zdGVudCAqbWluZ3dfZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICpob3N0KQoreworCWVuc3VyZV9zb2NrZXRfaW5pdGlhbGl6YXRpb24oKTsKKwlyZXR1cm4gZ2V0aG9zdGJ5bmFtZShob3N0KTsKK30KKworI3VuZGVmIGdldGFkZHJpbmZvCitpbnQgbWluZ3dfZ2V0YWRkcmluZm8oY29uc3QgY2hhciAqbm9kZSwgY29uc3QgY2hhciAqc2VydmljZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywgc3RydWN0IGFkZHJpbmZvICoqcmVzKQoreworCWVuc3VyZV9zb2NrZXRfaW5pdGlhbGl6YXRpb24oKTsKKwlyZXR1cm4gZ2V0YWRkcmluZm8obm9kZSwgc2VydmljZSwgaGludHMsIHJlcyk7Cit9CisKK2ludCBtaW5nd19zb2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCkKK3sKKwlpbnQgc29ja2ZkOworCVNPQ0tFVCBzOworCisJZW5zdXJlX3NvY2tldF9pbml0aWFsaXphdGlvbigpOworCXMgPSBXU0FTb2NrZXQoZG9tYWluLCB0eXBlLCBwcm90b2NvbCwgTlVMTCwgMCwgMCk7CisJaWYgKHMgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKwkJLyoKKwkJICogV1NBR2V0TGFzdEVycm9yKCkgdmFsdWVzIGFyZSByZWd1bGFyIEJTRCBlcnJvciBjb2RlcworCQkgKiBiaWFzZWQgYnkgV1NBQkFTRUVSUi4KKwkJICogSG93ZXZlciwgc3RyZXJyb3IoKSBkb2VzIG5vdCBrbm93IGFib3V0IG5ldHdvcmtpbmcKKwkJICogc3BlY2lmaWMgZXJyb3JzLCB3aGljaCBhcmUgdmFsdWVzIGJlZ2lubmluZyBhdCAzOCBvciBzby4KKwkJICogVGhlcmVmb3JlLCB3ZSBjaG9vc2UgdG8gbGVhdmUgdGhlIGJpYXNlZCBlcnJvciBjb2RlCisJCSAqIGluIGVycm5vIHNvIHRoYXQgX2lmXyBzb21lb25lIGxvb2tzIHVwIHRoZSBjb2RlIHNvbWV3aGVyZSwKKwkJICogdGhlbiBpdCBpcyBhdCBsZWFzdCB0aGUgbnVtYmVyIHRoYXQgYXJlIHVzdWFsbHkgbGlzdGVkLgorCQkgKi8KKwkJZXJybm8gPSBXU0FHZXRMYXN0RXJyb3IoKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBjb252ZXJ0IGludG8gYSBmaWxlIGRlc2NyaXB0b3IgKi8KKwlpZiAoKHNvY2tmZCA9IF9vcGVuX29zZmhhbmRsZShzLCBPX1JEV1J8T19CSU5BUlkpKSA8IDApIHsKKwkJY2xvc2Vzb2NrZXQocyk7CisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIG1ha2UgYSBzb2NrZXQgZmlsZSBkZXNjcmlwdG9yOiAlcyIsCisJCQlzdHJlcnJvcihlcnJubykpOworCX0KKwlyZXR1cm4gc29ja2ZkOworfQorCisjdW5kZWYgY29ubmVjdAoraW50IG1pbmd3X2Nvbm5lY3QoaW50IHNvY2tmZCwgc3RydWN0IHNvY2thZGRyICpzYSwgc2l6ZV90IHN6KQoreworCVNPQ0tFVCBzID0gKFNPQ0tFVClfZ2V0X29zZmhhbmRsZShzb2NrZmQpOworCXJldHVybiBjb25uZWN0KHMsIHNhLCBzeik7Cit9CisKKyN1bmRlZiBiaW5kCitpbnQgbWluZ3dfYmluZChpbnQgc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzaXplX3Qgc3opCit7CisJU09DS0VUIHMgPSAoU09DS0VUKV9nZXRfb3NmaGFuZGxlKHNvY2tmZCk7CisJcmV0dXJuIGJpbmQocywgc2EsIHN6KTsKK30KKworI3VuZGVmIHNldHNvY2tvcHQKK2ludCBtaW5nd19zZXRzb2Nrb3B0KGludCBzb2NrZmQsIGludCBsdmwsIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJU09DS0VUIHMgPSAoU09DS0VUKV9nZXRfb3NmaGFuZGxlKHNvY2tmZCk7CisJcmV0dXJuIHNldHNvY2tvcHQocywgbHZsLCBvcHRuYW1lLCAoY29uc3QgY2hhciopb3B0dmFsLCBvcHRsZW4pOworfQorCisjdW5kZWYgc2h1dGRvd24KK2ludCBtaW5nd19zaHV0ZG93bihpbnQgc29ja2ZkLCBpbnQgaG93KQoreworCVNPQ0tFVCBzID0gKFNPQ0tFVClfZ2V0X29zZmhhbmRsZShzb2NrZmQpOworCXJldHVybiBzaHV0ZG93bihzLCBob3cpOworfQorCisjdW5kZWYgbGlzdGVuCitpbnQgbWluZ3dfbGlzdGVuKGludCBzb2NrZmQsIGludCBiYWNrbG9nKQoreworCVNPQ0tFVCBzID0gKFNPQ0tFVClfZ2V0X29zZmhhbmRsZShzb2NrZmQpOworCXJldHVybiBsaXN0ZW4ocywgYmFja2xvZyk7Cit9CisKKyN1bmRlZiBhY2NlcHQKK2ludCBtaW5nd19hY2NlcHQoaW50IHNvY2tmZDEsIHN0cnVjdCBzb2NrYWRkciAqc2EsIHNvY2tsZW5fdCAqc3opCit7CisJaW50IHNvY2tmZDI7CisKKwlTT0NLRVQgczEgPSAoU09DS0VUKV9nZXRfb3NmaGFuZGxlKHNvY2tmZDEpOworCVNPQ0tFVCBzMiA9IGFjY2VwdChzMSwgc2EsIHN6KTsKKworCS8qIGNvbnZlcnQgaW50byBhIGZpbGUgZGVzY3JpcHRvciAqLworCWlmICgoc29ja2ZkMiA9IF9vcGVuX29zZmhhbmRsZShzMiwgT19SRFdSfE9fQklOQVJZKSkgPCAwKSB7CisJCWludCBlcnIgPSBlcnJubzsKKwkJY2xvc2Vzb2NrZXQoczIpOworCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byBtYWtlIGEgc29ja2V0IGZpbGUgZGVzY3JpcHRvcjogJXMiLAorCQkJc3RyZXJyb3IoZXJyKSk7CisJfQorCXJldHVybiBzb2NrZmQyOworfQorCisjdW5kZWYgcmVuYW1lCitpbnQgbWluZ3dfcmVuYW1lKGNvbnN0IGNoYXIgKnBvbGQsIGNvbnN0IGNoYXIgKnBuZXcpCit7CisJRFdPUkQgYXR0cnMsIGdsZTsKKwlpbnQgdHJpZXMgPSAwOworCXdjaGFyX3Qgd3BvbGRbTUFYX1BBVEhdLCB3cG5ld1tNQVhfUEFUSF07CisJaWYgKHh1dGZ0b3djc19wYXRoKHdwb2xkLCBwb2xkKSA8IDAgfHwgeHV0ZnRvd2NzX3BhdGgod3BuZXcsIHBuZXcpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBUcnkgbmF0aXZlIHJlbmFtZSgpIGZpcnN0IHRvIGdldCBlcnJubyByaWdodC4KKwkgKiBJdCBpcyBiYXNlZCBvbiBNb3ZlRmlsZSgpLCB3aGljaCBjYW5ub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzLgorCSAqLworCWlmICghX3dyZW5hbWUod3BvbGQsIHdwbmV3KSkKKwkJcmV0dXJuIDA7CisJaWYgKGVycm5vICE9IEVFWElTVCkKKwkJcmV0dXJuIC0xOworcmVwZWF0OgorCWlmIChNb3ZlRmlsZUV4Vyh3cG9sZCwgd3BuZXcsIE1PVkVGSUxFX1JFUExBQ0VfRVhJU1RJTkcpKQorCQlyZXR1cm4gMDsKKwkvKiBUT0RPOiB0cmFuc2xhdGUgbW9yZSBlcnJvcnMgKi8KKwlnbGUgPSBHZXRMYXN0RXJyb3IoKTsKKwlpZiAoZ2xlID09IEVSUk9SX0FDQ0VTU19ERU5JRUQgJiYKKwkgICAgKGF0dHJzID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHdwbmV3KSkgIT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpIHsKKwkJaWYgKGF0dHJzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSB7CisJCQlEV09SRCBhdHRyc29sZCA9IEdldEZpbGVBdHRyaWJ1dGVzVyh3cG9sZCk7CisJCQlpZiAoYXR0cnNvbGQgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMgfHwKKwkJCSAgICAhKGF0dHJzb2xkICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSkKKwkJCQllcnJubyA9IEVJU0RJUjsKKwkJCWVsc2UgaWYgKCFfd3JtZGlyKHdwbmV3KSkKKwkJCQlnb3RvIHJlcGVhdDsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoKGF0dHJzICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpICYmCisJCSAgICBTZXRGaWxlQXR0cmlidXRlc1cod3BuZXcsIGF0dHJzICYgfkZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSkgeworCQkJaWYgKE1vdmVGaWxlRXhXKHdwb2xkLCB3cG5ldywgTU9WRUZJTEVfUkVQTEFDRV9FWElTVElORykpCisJCQkJcmV0dXJuIDA7CisJCQlnbGUgPSBHZXRMYXN0RXJyb3IoKTsKKwkJCS8qIHJldmVydCBmaWxlIGF0dHJpYnV0ZXMgb24gZmFpbHVyZSAqLworCQkJU2V0RmlsZUF0dHJpYnV0ZXNXKHdwbmV3LCBhdHRycyk7CisJCX0KKwl9CisJaWYgKHRyaWVzIDwgQVJSQVlfU0laRShkZWxheSkgJiYgZ2xlID09IEVSUk9SX0FDQ0VTU19ERU5JRUQpIHsKKwkJLyoKKwkJICogV2UgYXNzdW1lIHRoYXQgc29tZSBvdGhlciBwcm9jZXNzIGhhZCB0aGUgc291cmNlIG9yCisJCSAqIGRlc3RpbmF0aW9uIGZpbGUgb3BlbiBhdCB0aGUgd3JvbmcgbW9tZW50IGFuZCByZXRyeS4KKwkJICogSW4gb3JkZXIgdG8gZ2l2ZSB0aGUgb3RoZXIgcHJvY2VzcyBhIGhpZ2hlciBjaGFuY2UgdG8KKwkJICogY29tcGxldGUgaXRzIG9wZXJhdGlvbiwgd2UgZ2l2ZSB1cCBvdXIgdGltZSBzbGljZSBub3cuCisJCSAqIElmIHdlIGhhdmUgdG8gcmV0cnkgYWdhaW4sIHdlIGRvIHNsZWVwIGEgYml0LgorCQkgKi8KKwkJU2xlZXAoZGVsYXlbdHJpZXNdKTsKKwkJdHJpZXMrKzsKKwkJZ290byByZXBlYXQ7CisJfQorCWlmIChnbGUgPT0gRVJST1JfQUNDRVNTX0RFTklFRCAmJgorCSAgICAgICBhc2tfeWVzX25vX2lmX3Bvc3NpYmxlKCJSZW5hbWUgZnJvbSAnJXMnIHRvICclcycgZmFpbGVkLiAiCisJCSAgICAgICAiU2hvdWxkIEkgdHJ5IGFnYWluPyIsIHBvbGQsIHBuZXcpKQorCQlnb3RvIHJlcGVhdDsKKworCWVycm5vID0gRUFDQ0VTOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFnZXNpemUsIGJ1dAorICogdGhlIGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkuIElmIGZ1dHVyZSBXaW5kb3dzIHNwZWNpZmljIGdpdCBjb2RlCisgKiBuZWVkcyB0aGUgcmVhbCBnZXRwYWdlc2l6ZSBmdW5jdGlvbiwgd2UgbmVlZCB0byBmaW5kIGFub3RoZXIgc29sdXRpb24uCisgKi8KK2ludCBtaW5nd19nZXRwYWdlc2l6ZSh2b2lkKQoreworCVNZU1RFTV9JTkZPIHNpOworCUdldFN5c3RlbUluZm8oJnNpKTsKKwlyZXR1cm4gc2kuZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHk7Cit9CisKKy8qIFNlZSBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczcyNDQzNS5hc3B4ICovCitlbnVtIEVYVEVOREVEX05BTUVfRk9STUFUIHsKKwlOYW1lRGlzcGxheSA9IDMsCisJTmFtZVVzZXJQcmluY2lwYWwgPSA4Cit9OworCitzdGF0aWMgY2hhciAqZ2V0X2V4dGVuZGVkX3VzZXJfaW5mbyhlbnVtIEVYVEVOREVEX05BTUVfRk9STUFUIHR5cGUpCit7CisJREVDTEFSRV9QUk9DX0FERFIoc2VjdXIzMi5kbGwsIEJPT0wsIEdldFVzZXJOYW1lRXhXLAorCQllbnVtIEVYVEVOREVEX05BTUVfRk9STUFULCBMUENXU1RSLCBQVUxPTkcpOworCXN0YXRpYyB3Y2hhcl90IHdidWZmZXJbMTAyNF07CisJRFdPUkQgbGVuOworCisJaWYgKCFJTklUX1BST0NfQUREUihHZXRVc2VyTmFtZUV4VykpCisJCXJldHVybiBOVUxMOworCisJbGVuID0gQVJSQVlfU0laRSh3YnVmZmVyKTsKKwlpZiAoR2V0VXNlck5hbWVFeFcodHlwZSwgd2J1ZmZlciwgJmxlbikpIHsKKwkJY2hhciAqY29udmVydGVkID0geG1hbGxvYygobGVuICo9IDMpKTsKKwkJaWYgKHh3Y3N0b3V0Zihjb252ZXJ0ZWQsIHdidWZmZXIsIGxlbikgPj0gMCkKKwkJCXJldHVybiBjb252ZXJ0ZWQ7CisJCWZyZWUoY29udmVydGVkKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworY2hhciAqbWluZ3dfcXVlcnlfdXNlcl9lbWFpbCh2b2lkKQoreworCXJldHVybiBnZXRfZXh0ZW5kZWRfdXNlcl9pbmZvKE5hbWVVc2VyUHJpbmNpcGFsKTsKK30KKworc3RydWN0IHBhc3N3ZCAqZ2V0cHd1aWQoaW50IHVpZCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW5pdGlhbGl6ZWQ7CisJc3RhdGljIGNoYXIgdXNlcl9uYW1lWzEwMF07CisJc3RhdGljIHN0cnVjdCBwYXNzd2QgKnA7CisJd2NoYXJfdCBidWZbMTAwXTsKKwlEV09SRCBsZW47CisKKwlpZiAoaW5pdGlhbGl6ZWQpCisJCXJldHVybiBwOworCisJbGVuID0gQVJSQVlfU0laRShidWYpOworCWlmICghR2V0VXNlck5hbWVXKGJ1ZiwgJmxlbikpIHsKKwkJaW5pdGlhbGl6ZWQgPSAxOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoeHdjc3RvdXRmKHVzZXJfbmFtZSwgYnVmLCBzaXplb2YodXNlcl9uYW1lKSkgPCAwKSB7CisJCWluaXRpYWxpemVkID0gMTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcCA9IHhtYWxsb2Moc2l6ZW9mKCpwKSk7CisJcC0+cHdfbmFtZSA9IHVzZXJfbmFtZTsKKwlwLT5wd19nZWNvcyA9IGdldF9leHRlbmRlZF91c2VyX2luZm8oTmFtZURpc3BsYXkpOworCWlmICghcC0+cHdfZ2Vjb3MpCisJCXAtPnB3X2dlY29zID0gInVua25vd24iOworCXAtPnB3X2RpciA9IE5VTEw7CisKKwlpbml0aWFsaXplZCA9IDE7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBIQU5ETEUgdGltZXJfZXZlbnQ7CitzdGF0aWMgSEFORExFIHRpbWVyX3RocmVhZDsKK3N0YXRpYyBpbnQgdGltZXJfaW50ZXJ2YWw7CitzdGF0aWMgaW50IG9uZV9zaG90Oworc3RhdGljIHNpZ19oYW5kbGVyX3QgdGltZXJfZm4gPSBTSUdfREZMLCBzaWdpbnRfZm4gPSBTSUdfREZMOworCisvKiBUaGUgdGltZXIgd29ya3MgbGlrZSB0aGlzOgorICogVGhlIHRocmVhZCwgdGlja3RhY2soKSwgaXMgYSB0cml2aWFsIHJvdXRpbmUgdGhhdCBtb3N0IG9mIHRoZSB0aW1lCisgKiBvbmx5IHdhaXRzIHRvIHJlY2VpdmUgdGhlIHNpZ25hbCB0byB0ZXJtaW5hdGUuIFRoZSBtYWluIHRocmVhZCB0ZWxscworICogdGhlIHRocmVhZCB0byB0ZXJtaW5hdGUgYnkgc2V0dGluZyB0aGUgdGltZXJfZXZlbnQgdG8gdGhlIHNpZ25hbGxlZAorICogc3RhdGUuCisgKiBCdXQgdGlja3RhY2soKSBpbnRlcnJ1cHRzIHRoZSB3YWl0IHN0YXRlIGFmdGVyIHRoZSB0aW1lcidzIGludGVydmFsCisgKiBsZW5ndGggdG8gY2FsbCB0aGUgc2lnbmFsIGhhbmRsZXIuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIF9fc3RkY2FsbCB0aWNrdGFjayh2b2lkICpkdW1teSkKK3sKKwl3aGlsZSAoV2FpdEZvclNpbmdsZU9iamVjdCh0aW1lcl9ldmVudCwgdGltZXJfaW50ZXJ2YWwpID09IFdBSVRfVElNRU9VVCkgeworCQltaW5nd19yYWlzZShTSUdBTFJNKTsKKwkJaWYgKG9uZV9zaG90KQorCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YXJ0X3RpbWVyX3RocmVhZCh2b2lkKQoreworCXRpbWVyX2V2ZW50ID0gQ3JlYXRlRXZlbnQoTlVMTCwgRkFMU0UsIEZBTFNFLCBOVUxMKTsKKwlpZiAodGltZXJfZXZlbnQpIHsKKwkJdGltZXJfdGhyZWFkID0gKEhBTkRMRSkgX2JlZ2ludGhyZWFkZXgoTlVMTCwgMCwgdGlja3RhY2ssIE5VTEwsIDAsIE5VTEwpOworCQlpZiAoIXRpbWVyX3RocmVhZCApCisJCQlyZXR1cm4gZXJybm8gPSBFTk9NRU0sCisJCQkJZXJyb3IoImNhbm5vdCBzdGFydCB0aW1lciB0aHJlYWQiKTsKKwl9IGVsc2UKKwkJcmV0dXJuIGVycm5vID0gRU5PTUVNLAorCQkJZXJyb3IoImNhbm5vdCBhbGxvY2F0ZSByZXNvdXJjZXMgZm9yIHRpbWVyIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0b3BfdGltZXJfdGhyZWFkKHZvaWQpCit7CisJaWYgKHRpbWVyX2V2ZW50KQorCQlTZXRFdmVudCh0aW1lcl9ldmVudCk7CS8qIHRlbGwgdGhyZWFkIHRvIHRlcm1pbmF0ZSAqLworCWlmICh0aW1lcl90aHJlYWQpIHsKKwkJaW50IHJjID0gV2FpdEZvclNpbmdsZU9iamVjdCh0aW1lcl90aHJlYWQsIDEwMDAwKTsKKwkJaWYgKHJjID09IFdBSVRfVElNRU9VVCkKKwkJCWVycm9yKCJ0aW1lciB0aHJlYWQgZGlkIG5vdCB0ZXJtaW5hdGUgdGltZWx5Iik7CisJCWVsc2UgaWYgKHJjICE9IFdBSVRfT0JKRUNUXzApCisJCQllcnJvcigid2FpdGluZyBmb3IgdGltZXIgdGhyZWFkIGZhaWxlZDogJWx1IiwKKwkJCSAgICAgIEdldExhc3RFcnJvcigpKTsKKwkJQ2xvc2VIYW5kbGUodGltZXJfdGhyZWFkKTsKKwl9CisJaWYgKHRpbWVyX2V2ZW50KQorCQlDbG9zZUhhbmRsZSh0aW1lcl9ldmVudCk7CisJdGltZXJfZXZlbnQgPSBOVUxMOworCXRpbWVyX3RocmVhZCA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3RpbWV2YWxfZXEoY29uc3Qgc3RydWN0IHRpbWV2YWwgKmkxLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqaTIpCit7CisJcmV0dXJuIGkxLT50dl9zZWMgPT0gaTItPnR2X3NlYyAmJiBpMS0+dHZfdXNlYyA9PSBpMi0+dHZfdXNlYzsKK30KKworaW50IHNldGl0aW1lcihpbnQgdHlwZSwgc3RydWN0IGl0aW1lcnZhbCAqaW4sIHN0cnVjdCBpdGltZXJ2YWwgKm91dCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHRpbWV2YWwgemVybzsKKwlzdGF0aWMgaW50IGF0ZXhpdF9kb25lOworCisJaWYgKG91dCAhPSBOVUxMKQorCQlyZXR1cm4gZXJybm8gPSBFSU5WQUwsCisJCQllcnJvcigic2V0aXRpbWVyIHBhcmFtIDMgIT0gTlVMTCBub3QgaW1wbGVtZW50ZWQiKTsKKwlpZiAoIWlzX3RpbWV2YWxfZXEoJmluLT5pdF9pbnRlcnZhbCwgJnplcm8pICYmCisJICAgICFpc190aW1ldmFsX2VxKCZpbi0+aXRfaW50ZXJ2YWwsICZpbi0+aXRfdmFsdWUpKQorCQlyZXR1cm4gZXJybm8gPSBFSU5WQUwsCisJCQllcnJvcigic2V0aXRpbWVyOiBpdF9pbnRlcnZhbCBtdXN0IGJlIHplcm8gb3IgZXEgaXRfdmFsdWUiKTsKKworCWlmICh0aW1lcl90aHJlYWQpCisJCXN0b3BfdGltZXJfdGhyZWFkKCk7CisKKwlpZiAoaXNfdGltZXZhbF9lcSgmaW4tPml0X3ZhbHVlLCAmemVybykgJiYKKwkgICAgaXNfdGltZXZhbF9lcSgmaW4tPml0X2ludGVydmFsLCAmemVybykpCisJCXJldHVybiAwOworCisJdGltZXJfaW50ZXJ2YWwgPSBpbi0+aXRfdmFsdWUudHZfc2VjICogMTAwMCArIGluLT5pdF92YWx1ZS50dl91c2VjIC8gMTAwMDsKKwlvbmVfc2hvdCA9IGlzX3RpbWV2YWxfZXEoJmluLT5pdF9pbnRlcnZhbCwgJnplcm8pOworCWlmICghYXRleGl0X2RvbmUpIHsKKwkJYXRleGl0KHN0b3BfdGltZXJfdGhyZWFkKTsKKwkJYXRleGl0X2RvbmUgPSAxOworCX0KKwlyZXR1cm4gc3RhcnRfdGltZXJfdGhyZWFkKCk7Cit9CisKK2ludCBzaWdhY3Rpb24oaW50IHNpZywgc3RydWN0IHNpZ2FjdGlvbiAqaW4sIHN0cnVjdCBzaWdhY3Rpb24gKm91dCkKK3sKKwlpZiAoc2lnICE9IFNJR0FMUk0pCisJCXJldHVybiBlcnJubyA9IEVJTlZBTCwKKwkJCWVycm9yKCJzaWdhY3Rpb24gb25seSBpbXBsZW1lbnRlZCBmb3IgU0lHQUxSTSIpOworCWlmIChvdXQgIT0gTlVMTCkKKwkJcmV0dXJuIGVycm5vID0gRUlOVkFMLAorCQkJZXJyb3IoInNpZ2FjdGlvbjogcGFyYW0gMyAhPSBOVUxMIG5vdCBpbXBsZW1lbnRlZCIpOworCisJdGltZXJfZm4gPSBpbi0+c2FfaGFuZGxlcjsKKwlyZXR1cm4gMDsKK30KKworI3VuZGVmIHNpZ25hbAorc2lnX2hhbmRsZXJfdCBtaW5nd19zaWduYWwoaW50IHNpZywgc2lnX2hhbmRsZXJfdCBoYW5kbGVyKQoreworCXNpZ19oYW5kbGVyX3Qgb2xkOworCisJc3dpdGNoIChzaWcpIHsKKwljYXNlIFNJR0FMUk06CisJCW9sZCA9IHRpbWVyX2ZuOworCQl0aW1lcl9mbiA9IGhhbmRsZXI7CisJCWJyZWFrOworCisJY2FzZSBTSUdJTlQ6CisJCW9sZCA9IHNpZ2ludF9mbjsKKwkJc2lnaW50X2ZuID0gaGFuZGxlcjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gc2lnbmFsKHNpZywgaGFuZGxlcik7CisJfQorCisJcmV0dXJuIG9sZDsKK30KKworI3VuZGVmIHJhaXNlCitpbnQgbWluZ3dfcmFpc2UoaW50IHNpZykKK3sKKwlzd2l0Y2ggKHNpZykgeworCWNhc2UgU0lHQUxSTToKKwkJaWYgKHRpbWVyX2ZuID09IFNJR19ERkwpIHsKKwkJCWlmIChpc2F0dHkoU1RERVJSX0ZJTEVOTykpCisJCQkJZnB1dHMoIkFsYXJtIGNsb2NrXG4iLCBzdGRlcnIpOworCQkJZXhpdCgxMjggKyBTSUdBTFJNKTsKKwkJfSBlbHNlIGlmICh0aW1lcl9mbiAhPSBTSUdfSUdOKQorCQkJdGltZXJfZm4oU0lHQUxSTSk7CisJCXJldHVybiAwOworCisJY2FzZSBTSUdJTlQ6CisJCWlmIChzaWdpbnRfZm4gPT0gU0lHX0RGTCkKKwkJCWV4aXQoMTI4ICsgU0lHSU5UKTsKKwkJZWxzZSBpZiAoc2lnaW50X2ZuICE9IFNJR19JR04pCisJCQlzaWdpbnRfZm4oU0lHSU5UKTsKKwkJcmV0dXJuIDA7CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorCWNhc2UgU0lHSUxMOgorCWNhc2UgU0lHRlBFOgorCWNhc2UgU0lHU0VHVjoKKwljYXNlIFNJR1RFUk06CisJY2FzZSBTSUdCUkVBSzoKKwljYXNlIFNJR0FCUlQ6CisJY2FzZSBTSUdBQlJUX0NPTVBBVDoKKwkJLyoKKwkJICogVGhlIDxzaWduYWwuaD4gaGVhZGVyIGluIHRoZSBNUyBDIFJ1bnRpbWUgZGVmaW5lcyA4IHNpZ25hbHMKKwkJICogYXMgYmVpbmcgc3VwcG9ydGVkIG9uIHRoZSBwbGF0Zm9ybS4gQW55dGhpbmcgZWxzZSBjYXVzZXMgYW4KKwkJICogIkludmFsaWQgc2lnbmFsIG9yIGVycm9yIiAod2hpY2ggaW4gREVCVUcgYnVpbGRzIGNhdXNlcyB0aGUKKwkJICogQWJvcnQvUmV0cnkvSWdub3JlIGRpYWxvZykuIFdlIGJ5LXBhc3MgdGhlIENSVCBmb3IgdGhpbmdzIHdlCisJCSAqIGFscmVhZHkga25vdyB3aWxsIGZhaWwuCisJCSAqLworCQlyZXR1cm4gcmFpc2Uoc2lnKTsKKwlkZWZhdWx0OgorCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIC0xOworCisjZWxzZQorCisJZGVmYXVsdDoKKwkJcmV0dXJuIHJhaXNlKHNpZyk7CisKKyNlbmRpZgorCisJfQorfQorCitpbnQgbGluayhjb25zdCBjaGFyICpvbGRwYXRoLCBjb25zdCBjaGFyICpuZXdwYXRoKQoreworCXdjaGFyX3Qgd29sZHBhdGhbTUFYX1BBVEhdLCB3bmV3cGF0aFtNQVhfUEFUSF07CisJaWYgKHh1dGZ0b3djc19wYXRoKHdvbGRwYXRoLCBvbGRwYXRoKSA8IDAgfHwKKwkJeHV0ZnRvd2NzX3BhdGgod25ld3BhdGgsIG5ld3BhdGgpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFDcmVhdGVIYXJkTGlua1cod25ld3BhdGgsIHdvbGRwYXRoLCBOVUxMKSkgeworCQllcnJubyA9IGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitwaWRfdCB3YWl0cGlkKHBpZF90IHBpZCwgaW50ICpzdGF0dXMsIGludCBvcHRpb25zKQoreworCUhBTkRMRSBoID0gT3BlblByb2Nlc3MoU1lOQ0hST05JWkUgfCBQUk9DRVNTX1FVRVJZX0lORk9STUFUSU9OLAorCSAgICBGQUxTRSwgcGlkKTsKKwlpZiAoIWgpIHsKKwkJZXJybm8gPSBFQ0hJTEQ7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocGlkID4gMCAmJiBvcHRpb25zICYgV05PSEFORykgeworCQlpZiAoV0FJVF9PQkpFQ1RfMCAhPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGgsIDApKSB7CisJCQlDbG9zZUhhbmRsZShoKTsKKwkJCXJldHVybiAwOworCQl9CisJCW9wdGlvbnMgJj0gfldOT0hBTkc7CisJfQorCisJaWYgKG9wdGlvbnMgPT0gMCkgeworCQlzdHJ1Y3QgcGluZm9fdCAqKnBwaW5mbzsKKwkJaWYgKFdhaXRGb3JTaW5nbGVPYmplY3QoaCwgSU5GSU5JVEUpICE9IFdBSVRfT0JKRUNUXzApIHsKKwkJCUNsb3NlSGFuZGxlKGgpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoc3RhdHVzKQorCQkJR2V0RXhpdENvZGVQcm9jZXNzKGgsIChMUERXT1JEKXN0YXR1cyk7CisKKwkJRW50ZXJDcml0aWNhbFNlY3Rpb24oJnBpbmZvX2NzKTsKKworCQlwcGluZm8gPSAmcGluZm87CisJCXdoaWxlICgqcHBpbmZvKSB7CisJCQlzdHJ1Y3QgcGluZm9fdCAqaW5mbyA9ICpwcGluZm87CisJCQlpZiAoaW5mby0+cGlkID09IHBpZCkgeworCQkJCUNsb3NlSGFuZGxlKGluZm8tPnByb2MpOworCQkJCSpwcGluZm8gPSBpbmZvLT5uZXh0OworCQkJCWZyZWUoaW5mbyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlwcGluZm8gPSAmaW5mby0+bmV4dDsKKwkJfQorCisJCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZwaW5mb19jcyk7CisKKwkJQ2xvc2VIYW5kbGUoaCk7CisJCXJldHVybiBwaWQ7CisJfQorCUNsb3NlSGFuZGxlKGgpOworCisJZXJybm8gPSBFSU5WQUw7CisJcmV0dXJuIC0xOworfQorCitpbnQgeHV0ZnRvd2Nzbih3Y2hhcl90ICp3Y3MsIGNvbnN0IGNoYXIgKnV0ZnMsIHNpemVfdCB3Y3NsZW4sIGludCB1dGZsZW4pCit7CisJaW50IHVwb3MgPSAwLCB3cG9zID0gMDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICp1dGYgPSAoY29uc3QgdW5zaWduZWQgY2hhciopIHV0ZnM7CisJaWYgKCF1dGYgfHwgIXdjcyB8fCB3Y3NsZW4gPCAxKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCS8qIHJlc2VydmUgc3BhY2UgZm9yIFwwICovCisJd2NzbGVuLS07CisJaWYgKHV0ZmxlbiA8IDApCisJCXV0ZmxlbiA9IElOVF9NQVg7CisKKwl3aGlsZSAodXBvcyA8IHV0ZmxlbikgeworCQlpbnQgYyA9IHV0Zlt1cG9zKytdICYgMHhmZjsKKwkJaWYgKHV0ZmxlbiA9PSBJTlRfTUFYICYmIGMgPT0gMCkKKwkJCWJyZWFrOworCisJCWlmICh3cG9zID49IHdjc2xlbikgeworCQkJd2NzW3dwb3NdID0gMDsKKwkJCWVycm5vID0gRVJBTkdFOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKGMgPCAweDgwKSB7CisJCQkvKiBBU0NJSSAqLworCQkJd2NzW3dwb3MrK10gPSBjOworCQl9IGVsc2UgaWYgKGMgPj0gMHhjMiAmJiBjIDwgMHhlMCAmJiB1cG9zIDwgdXRmbGVuICYmCisJCQkJKHV0Zlt1cG9zXSAmIDB4YzApID09IDB4ODApIHsKKwkJCS8qIDItYnl0ZSB1dGYtOCAqLworCQkJYyA9ICgoYyAmIDB4MWYpIDw8IDYpOworCQkJYyB8PSAodXRmW3Vwb3MrK10gJiAweDNmKTsKKwkJCXdjc1t3cG9zKytdID0gYzsKKwkJfSBlbHNlIGlmIChjID49IDB4ZTAgJiYgYyA8IDB4ZjAgJiYgdXBvcyArIDEgPCB1dGZsZW4gJiYKKwkJCQkhKGMgPT0gMHhlMCAmJiB1dGZbdXBvc10gPCAweGEwKSAmJiAvKiBvdmVyLWxvbmcgZW5jb2RpbmcgKi8KKwkJCQkodXRmW3Vwb3NdICYgMHhjMCkgPT0gMHg4MCAmJgorCQkJCSh1dGZbdXBvcyArIDFdICYgMHhjMCkgPT0gMHg4MCkgeworCQkJLyogMy1ieXRlIHV0Zi04ICovCisJCQljID0gKChjICYgMHgwZikgPDwgMTIpOworCQkJYyB8PSAoKHV0Zlt1cG9zKytdICYgMHgzZikgPDwgNik7CisJCQljIHw9ICh1dGZbdXBvcysrXSAmIDB4M2YpOworCQkJd2NzW3dwb3MrK10gPSBjOworCQl9IGVsc2UgaWYgKGMgPj0gMHhmMCAmJiBjIDwgMHhmNSAmJiB1cG9zICsgMiA8IHV0ZmxlbiAmJgorCQkJCXdwb3MgKyAxIDwgd2NzbGVuICYmCisJCQkJIShjID09IDB4ZjAgJiYgdXRmW3Vwb3NdIDwgMHg5MCkgJiYgLyogb3Zlci1sb25nIGVuY29kaW5nICovCisJCQkJIShjID09IDB4ZjQgJiYgdXRmW3Vwb3NdID49IDB4OTApICYmIC8qID4gXHUxMGZmZmYgKi8KKwkJCQkodXRmW3Vwb3NdICYgMHhjMCkgPT0gMHg4MCAmJgorCQkJCSh1dGZbdXBvcyArIDFdICYgMHhjMCkgPT0gMHg4MCAmJgorCQkJCSh1dGZbdXBvcyArIDJdICYgMHhjMCkgPT0gMHg4MCkgeworCQkJLyogNC1ieXRlIHV0Zi04OiBjb252ZXJ0IHRvIFx1ZDh4eCBcdWRjeHggc3Vycm9nYXRlIHBhaXIgKi8KKwkJCWMgPSAoKGMgJiAweDA3KSA8PCAxOCk7CisJCQljIHw9ICgodXRmW3Vwb3MrK10gJiAweDNmKSA8PCAxMik7CisJCQljIHw9ICgodXRmW3Vwb3MrK10gJiAweDNmKSA8PCA2KTsKKwkJCWMgfD0gKHV0Zlt1cG9zKytdICYgMHgzZik7CisJCQljIC09IDB4MTAwMDA7CisJCQl3Y3Nbd3BvcysrXSA9IDB4ZDgwMCB8IChjID4+IDEwKTsKKwkJCXdjc1t3cG9zKytdID0gMHhkYzAwIHwgKGMgJiAweDNmZik7CisJCX0gZWxzZSBpZiAoYyA+PSAweGEwKSB7CisJCQkvKiBpbnZhbGlkIHV0Zi04IGJ5dGUsIHByaW50YWJsZSB1bmljb2RlIGNoYXI6IGNvbnZlcnQgMToxICovCisJCQl3Y3Nbd3BvcysrXSA9IGM7CisJCX0gZWxzZSB7CisJCQkvKiBpbnZhbGlkIHV0Zi04IGJ5dGUsIG5vbi1wcmludGFibGUgdW5pY29kZTogY29udmVydCB0byBoZXggKi8KKwkJCXN0YXRpYyBjb25zdCBjaGFyICpoZXggPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisJCQl3Y3Nbd3BvcysrXSA9IGhleFtjID4+IDRdOworCQkJaWYgKHdwb3MgPCB3Y3NsZW4pCisJCQkJd2NzW3dwb3MrK10gPSBoZXhbYyAmIDB4MGZdOworCQl9CisJfQorCXdjc1t3cG9zXSA9IDA7CisJcmV0dXJuIHdwb3M7Cit9CisKK2ludCB4d2NzdG91dGYoY2hhciAqdXRmLCBjb25zdCB3Y2hhcl90ICp3Y3MsIHNpemVfdCB1dGZsZW4pCit7CisJaWYgKCF3Y3MgfHwgIXV0ZiB8fCB1dGZsZW4gPCAxKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCXV0ZmxlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfVVRGOCwgMCwgd2NzLCAtMSwgdXRmLCB1dGZsZW4sIE5VTEwsIE5VTEwpOworCWlmICh1dGZsZW4pCisJCXJldHVybiB1dGZsZW4gLSAxOworCWVycm5vID0gRVJBTkdFOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfd2luZG93c19lbnZpcm9ubWVudCh2b2lkKQoreworCWNoYXIgKnRtcCA9IGdldGVudigiVE1QRElSIik7CisKKwkvKiBvbiBXaW5kb3dzIGl0IGlzIFRNUCBhbmQgVEVNUCAqLworCWlmICghdG1wKSB7CisJCWlmICghKHRtcCA9IGdldGVudigiVE1QIikpKQorCQkJdG1wID0gZ2V0ZW52KCJURU1QIik7CisJCWlmICh0bXApIHsKKwkJCXNldGVudigiVE1QRElSIiwgdG1wLCAxKTsKKwkJCXRtcCA9IGdldGVudigiVE1QRElSIik7CisJCX0KKwl9CisKKwlpZiAodG1wKSB7CisJCS8qCisJCSAqIENvbnZlcnQgYWxsIGRpciBzZXBhcmF0b3JzIHRvIGZvcndhcmQgc2xhc2hlcywKKwkJICogdG8gaGVscCBzaGVsbCBjb21tYW5kcyBjYWxsZWQgZnJvbSB0aGUgR2l0CisJCSAqIGV4ZWN1dGFibGUgKGJ5IG5vdCBtaXN0YWtpbmcgdGhlIGRpciBzZXBhcmF0b3JzCisJCSAqIGZvciBlc2NhcGUgY2hhcmFjdGVycykuCisJCSAqLworCQljb252ZXJ0X3NsYXNoZXModG1wKTsKKwl9CisKKwkvKiBzaW11bGF0ZSBURVJNIHRvIGVuYWJsZSBhdXRvLWNvbG9yIChzZWUgY29sb3IuYykgKi8KKwlpZiAoIWdldGVudigiVEVSTSIpKQorCQlzZXRlbnYoIlRFUk0iLCAiY3lnd2luIiwgMSk7CisKKwkvKiBjYWxjdWxhdGUgSE9NRSBpZiBub3Qgc2V0ICovCisJaWYgKCFnZXRlbnYoIkhPTUUiKSkgeworCQkvKgorCQkgKiB0cnkgJEhPTUVEUklWRSRIT01FUEFUSCAtIHRoZSBob21lIHNoYXJlIG1heSBiZSBhIG5ldHdvcmsKKwkJICogbG9jYXRpb24sIHRodXMgYWxzbyBjaGVjayBpZiB0aGUgcGF0aCBleGlzdHMgKGkuZS4gaXMgbm90CisJCSAqIGRpc2Nvbm5lY3RlZCkKKwkJICovCisJCWlmICgodG1wID0gZ2V0ZW52KCJIT01FRFJJVkUiKSkpIHsKKwkJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJidWZfYWRkc3RyKCZidWYsIHRtcCk7CisJCQlpZiAoKHRtcCA9IGdldGVudigiSE9NRVBBVEgiKSkpIHsKKwkJCQlzdHJidWZfYWRkc3RyKCZidWYsIHRtcCk7CisJCQkJaWYgKGlzX2RpcmVjdG9yeShidWYuYnVmKSkKKwkJCQkJc2V0ZW52KCJIT01FIiwgYnVmLmJ1ZiwgMSk7CisJCQkJZWxzZQorCQkJCQl0bXAgPSBOVUxMOyAvKiB1c2UgJFVTRVJQUk9GSUxFICovCisJCQl9CisJCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJfQorCQkvKiB1c2UgJFVTRVJQUk9GSUxFIGlmIHRoZSBob21lIHNoYXJlIGlzIG5vdCBhdmFpbGFibGUgKi8KKwkJaWYgKCF0bXAgJiYgKHRtcCA9IGdldGVudigiVVNFUlBST0ZJTEUiKSkpCisJCQlzZXRlbnYoIkhPTUUiLCB0bXAsIDEpOworCX0KK30KKworaW50IGlzX3ZhbGlkX3dpbjMyX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgaW50IGFsbG93X2xpdGVyYWxfbnVsKQoreworCWNvbnN0IGNoYXIgKnAgPSBwYXRoOworCWludCBwcmVjZWRpbmdfc3BhY2Vfb3JfcGVyaW9kID0gMCwgaSA9IDAsIHBlcmlvZHMgPSAwOworCisJaWYgKCFwcm90ZWN0X250ZnMpCisJCXJldHVybiAxOworCisJc2tpcF9kb3NfZHJpdmVfcHJlZml4KChjaGFyICoqKSZwYXRoKTsKKwlnb3RvIHNlZ21lbnRfc3RhcnQ7CisKKwlmb3IgKDs7KSB7CisJCWNoYXIgYyA9ICoocGF0aCsrKTsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ1wwJzoKKwkJY2FzZSAnLyc6IGNhc2UgJ1xcJzoKKwkJCS8qIGNhbm5vdCBlbmQgaW4gYCBgIG9yIGAuYCwgZXhjZXB0IGZvciBgLmAgYW5kIGAuLmAgKi8KKwkJCWlmIChwcmVjZWRpbmdfc3BhY2Vfb3JfcGVyaW9kICYmCisJCQkgICAgKGkgIT0gcGVyaW9kcyB8fCBwZXJpb2RzID4gMikpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoIWMpCisJCQkJcmV0dXJuIDE7CisKKwkJCWkgPSBwZXJpb2RzID0gcHJlY2VkaW5nX3NwYWNlX29yX3BlcmlvZCA9IDA7CisKK3NlZ21lbnRfc3RhcnQ6CisJCQlzd2l0Y2ggKCpwYXRoKSB7CisJCQljYXNlICdhJzogY2FzZSAnQSc6IC8qIEFVWCAqLworCQkJCWlmICgoKGMgPSBwYXRoWysraV0pICE9ICd1JyAmJiBjICE9ICdVJykgfHwKKwkJCQkgICAgKChjID0gcGF0aFsrK2ldKSAhPSAneCcgJiYgYyAhPSAnWCcpKSB7Citub3RfYV9yZXNlcnZlZF9uYW1lOgorCQkJCQlwYXRoICs9IGk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgJ2MnOiBjYXNlICdDJzoKKwkJCQkvKiBDT00xIC4uLiBDT005LCBDT04sIENPTklOJCwgQ09OT1VUJCAqLworCQkJCWlmICgoYyA9IHBhdGhbKytpXSkgIT0gJ28nICYmIGMgIT0gJ08nKQorCQkJCQlnb3RvIG5vdF9hX3Jlc2VydmVkX25hbWU7CisJCQkJYyA9IHBhdGhbKytpXTsKKwkJCQlpZiAoYyA9PSAnbScgfHwgYyA9PSAnTScpIHsgLyogQ09NMSAuLi4gQ09NOSAqLworCQkJCQljID0gcGF0aFsrK2ldOworCQkJCQlpZiAoYyA8ICcxJyB8fCBjID4gJzknKQorCQkJCQkJZ290byBub3RfYV9yZXNlcnZlZF9uYW1lOworCQkJCX0gZWxzZSBpZiAoYyA9PSAnbicgfHwgYyA9PSAnTicpIHsgLyogQ09OICovCisJCQkJCWMgPSBwYXRoW2kgKyAxXTsKKwkJCQkJaWYgKChjID09ICdpJyB8fCBjID09ICdJJykgJiYKKwkJCQkJICAgICgoYyA9IHBhdGhbaSArIDJdKSA9PSAnbicgfHwKKwkJCQkJICAgICBjID09ICdOJykgJiYKKwkJCQkJICAgIHBhdGhbaSArIDNdID09ICckJykKKwkJCQkJCWkgKz0gMzsgLyogQ09OSU4kICovCisJCQkJCWVsc2UgaWYgKChjID09ICdvJyB8fCBjID09ICdPJykgJiYKKwkJCQkJCSAoKGMgPSBwYXRoW2kgKyAyXSkgPT0gJ3UnIHx8CisJCQkJCQkgIGMgPT0gJ1UnKSAmJgorCQkJCQkJICgoYyA9IHBhdGhbaSArIDNdKSA9PSAndCcgfHwKKwkJCQkJCSAgYyA9PSAnVCcpICYmCisJCQkJCQkgcGF0aFtpICsgNF0gPT0gJyQnKQorCQkJCQkJaSArPSA0OyAvKiBDT05PVVQkICovCisJCQkJfSBlbHNlCisJCQkJCWdvdG8gbm90X2FfcmVzZXJ2ZWRfbmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2wnOiBjYXNlICdMJzogLyogTFBUPE4+ICovCisJCQkJaWYgKCgoYyA9IHBhdGhbKytpXSkgIT0gJ3AnICYmIGMgIT0gJ1AnKSB8fAorCQkJCSAgICAoKGMgPSBwYXRoWysraV0pICE9ICd0JyAmJiBjICE9ICdUJykgfHwKKwkJCQkgICAgIWlzZGlnaXQocGF0aFsrK2ldKSkKKwkJCQkJZ290byBub3RfYV9yZXNlcnZlZF9uYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAnbic6IGNhc2UgJ04nOiAvKiBOVUwgKi8KKwkJCQlpZiAoKChjID0gcGF0aFsrK2ldKSAhPSAndScgJiYgYyAhPSAnVScpIHx8CisJCQkJICAgICgoYyA9IHBhdGhbKytpXSkgIT0gJ2wnICYmIGMgIT0gJ0wnKSB8fAorCQkJCSAgICAoYWxsb3dfbGl0ZXJhbF9udWwgJiYKKwkJCQkgICAgICFwYXRoW2kgKyAxXSAmJiBwID09IHBhdGgpKQorCQkJCQlnb3RvIG5vdF9hX3Jlc2VydmVkX25hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdwJzogY2FzZSAnUCc6IC8qIFBSTiAqLworCQkJCWlmICgoKGMgPSBwYXRoWysraV0pICE9ICdyJyAmJiBjICE9ICdSJykgfHwKKwkJCQkgICAgKChjID0gcGF0aFsrK2ldKSAhPSAnbicgJiYgYyAhPSAnTicpKQorCQkJCQlnb3RvIG5vdF9hX3Jlc2VydmVkX25hbWU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKgorCQkJICogU28gZmFyLCB0aGlzIGxvb2tzIGxpa2UgYSByZXNlcnZlZCBuYW1lLiBMZXQncyBzZWUKKwkJCSAqIHdoZXRoZXIgaXQgYWN0dWFsbHkgaXMgb25lOiB0cmFpbGluZyBzcGFjZXMsIGEgZmlsZQorCQkJICogZXh0ZW5zaW9uLCBvciBhbiBOVEZTIEFsdGVybmF0ZSBEYXRhIFN0cmVhbSBkbyBub3QKKwkJCSAqIG1hdHRlciwgdGhlIG5hbWUgaXMgc3RpbGwgcmVzZXJ2ZWQgaWYgYW55IG9mIHRob3NlCisJCQkgKiBmb2xsb3cgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGFjdHVhbCBuYW1lLgorCQkJICovCisJCQlpKys7CisJCQlpZiAocGF0aFtpXSA9PSAnICcpIHsKKwkJCQlwcmVjZWRpbmdfc3BhY2Vfb3JfcGVyaW9kID0gMTsKKwkJCQl3aGlsZSAocGF0aFsrK2ldID09ICcgJykKKwkJCQkJOyAvKiBza2lwIGFsbCBzcGFjZXMgKi8KKwkJCX0KKworCQkJYyA9IHBhdGhbaV07CisJCQlpZiAoYyAmJiBjICE9ICcuJyAmJiBjICE9ICc6JyAmJiBjICE9ICcvJyAmJiBjICE9ICdcXCcpCisJCQkJZ290byBub3RfYV9yZXNlcnZlZF9uYW1lOworCisJCQkvKiBjb250YWlucyByZXNlcnZlZCBuYW1lICovCisJCQlyZXR1cm4gMDsKKwkJY2FzZSAnLic6CisJCQlwZXJpb2RzKys7CisJCQkvKiBmYWxsdGhydSAqLworCQljYXNlICcgJzoKKwkJCXByZWNlZGluZ19zcGFjZV9vcl9wZXJpb2QgPSAxOworCQkJaSsrOworCQkJY29udGludWU7CisJCWNhc2UgJzonOiAvKiBET1MgZHJpdmUgcHJlZml4IHdhcyBhbHJlYWR5IHNraXBwZWQgKi8KKwkJY2FzZSAnPCc6IGNhc2UgJz4nOiBjYXNlICciJzogY2FzZSAnfCc6IGNhc2UgJz8nOiBjYXNlICcqJzoKKwkJCS8qIGlsbGVnYWwgY2hhcmFjdGVyICovCisJCQlyZXR1cm4gMDsKKwkJZGVmYXVsdDoKKwkJCWlmIChjID4gJ1wwJyAmJiBjIDwgJ1x4MjAnKQorCQkJCS8qIGlsbGVnYWwgY2hhcmFjdGVyICovCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJcHJlY2VkaW5nX3NwYWNlX29yX3BlcmlvZCA9IDA7CisJCWkrKzsKKwl9Cit9CisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikKKy8qCisgKiBEaXNhYmxlIE1TVkNSVCBjb21tYW5kIGxpbmUgd2lsZGNhcmQgZXhwYW5zaW9uIChfX2dldG1haW5hcmdzIGNhbGxlZCBmcm9tCisgKiBtaW5ndyBzdGFydHVwIGNvZGUsIHNlZSBpbml0LmMgaW4gbWluZ3cgcnVudGltZSkuCisgKi8KK2ludCBfQ1JUX2dsb2IgPSAwOworI2VuZGlmCisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGRpZV9zdGFydHVwKHZvaWQpCit7CisJZnB1dHMoImZhdGFsOiBub3QgZW5vdWdoIG1lbW9yeSBmb3IgaW5pdGlhbGl6YXRpb24iLCBzdGRlcnIpOworCWV4aXQoMTI4KTsKK30KKworc3RhdGljIHZvaWQgKm1hbGxvY19zdGFydHVwKHNpemVfdCBzaXplKQoreworCXZvaWQgKnJlc3VsdCA9IG1hbGxvYyhzaXplKTsKKwlpZiAoIXJlc3VsdCkKKwkJZGllX3N0YXJ0dXAoKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgY2hhciAqd2NzdG91dGZkdXBfc3RhcnR1cChjaGFyICpidWZmZXIsIGNvbnN0IHdjaGFyX3QgKndjcywgc2l6ZV90IGxlbikKK3sKKwlsZW4gPSB4d2NzdG91dGYoYnVmZmVyLCB3Y3MsIGxlbikgKyAxOworCXJldHVybiBtZW1jcHkobWFsbG9jX3N0YXJ0dXAobGVuKSwgYnVmZmVyLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBtYXliZV9yZWRpcmVjdF9zdGRfaGFuZGxlKGNvbnN0IHdjaGFyX3QgKmtleSwgRFdPUkQgc3RkX2lkLCBpbnQgZmQsCisJCQkJICAgICAgRFdPUkQgZGVzaXJlZF9hY2Nlc3MsIERXT1JEIGZsYWdzKQoreworCURXT1JEIGNyZWF0ZV9mbGFnID0gZmQgPyBPUEVOX0FMV0FZUyA6IE9QRU5fRVhJU1RJTkc7CisJd2NoYXJfdCBidWZbTUFYX1BBVEhdOworCURXT1JEIG1heCA9IEFSUkFZX1NJWkUoYnVmKTsKKwlIQU5ETEUgaGFuZGxlOworCURXT1JEIHJldCA9IEdldEVudmlyb25tZW50VmFyaWFibGVXKGtleSwgYnVmLCBtYXgpOworCisJaWYgKCFyZXQgfHwgcmV0ID49IG1heCkKKwkJcmV0dXJuOworCisJLyogbWFrZSBzdXJlIHRoaXMgZG9lcyBub3QgbGVhayBpbnRvIGNoaWxkIHByb2Nlc3NlcyAqLworCVNldEVudmlyb25tZW50VmFyaWFibGVXKGtleSwgTlVMTCk7CisJaWYgKCF3Y3NjbXAoYnVmLCBMIm9mZiIpKSB7CisJCWNsb3NlKGZkKTsKKwkJaGFuZGxlID0gR2V0U3RkSGFuZGxlKHN0ZF9pZCk7CisJCWlmIChoYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCQlDbG9zZUhhbmRsZShoYW5kbGUpOworCQlyZXR1cm47CisJfQorCWlmIChzdGRfaWQgPT0gU1REX0VSUk9SX0hBTkRMRSAmJiAhd2NzY21wKGJ1ZiwgTCIyPiYxIikpIHsKKwkJaGFuZGxlID0gR2V0U3RkSGFuZGxlKFNURF9PVVRQVVRfSEFORExFKTsKKwkJaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworCQkJY2xvc2UoZmQpOworCQkJaGFuZGxlID0gR2V0U3RkSGFuZGxlKHN0ZF9pZCk7CisJCQlpZiAoaGFuZGxlICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQorCQkJCUNsb3NlSGFuZGxlKGhhbmRsZSk7CisJCX0gZWxzZSB7CisJCQlpbnQgbmV3X2ZkID0gX29wZW5fb3NmaGFuZGxlKChpbnRwdHJfdCloYW5kbGUsIE9fQklOQVJZKTsKKwkJCVNldFN0ZEhhbmRsZShzdGRfaWQsIGhhbmRsZSk7CisJCQlkdXAyKG5ld19mZCwgZmQpOworCQkJLyogZG8gKm5vdCogY2xvc2UgdGhlIG5ld19mZDogdGhhdCB3b3VsZCBjbG9zZSBzdGRvdXQgKi8KKwkJfQorCQlyZXR1cm47CisJfQorCWhhbmRsZSA9IENyZWF0ZUZpbGVXKGJ1ZiwgZGVzaXJlZF9hY2Nlc3MsIDAsIE5VTEwsIGNyZWF0ZV9mbGFnLAorCQkJICAgICBmbGFncywgTlVMTCk7CisJaWYgKGhhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworCQlpbnQgbmV3X2ZkID0gX29wZW5fb3NmaGFuZGxlKChpbnRwdHJfdCloYW5kbGUsIE9fQklOQVJZKTsKKwkJU2V0U3RkSGFuZGxlKHN0ZF9pZCwgaGFuZGxlKTsKKwkJZHVwMihuZXdfZmQsIGZkKTsKKwkJY2xvc2UobmV3X2ZkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1heWJlX3JlZGlyZWN0X3N0ZF9oYW5kbGVzKHZvaWQpCit7CisJbWF5YmVfcmVkaXJlY3Rfc3RkX2hhbmRsZShMIkdJVF9SRURJUkVDVF9TVERJTiIsIFNURF9JTlBVVF9IQU5ETEUsIDAsCisJCQkJICBHRU5FUklDX1JFQUQsIEZJTEVfQVRUUklCVVRFX05PUk1BTCk7CisJbWF5YmVfcmVkaXJlY3Rfc3RkX2hhbmRsZShMIkdJVF9SRURJUkVDVF9TVERPVVQiLCBTVERfT1VUUFVUX0hBTkRMRSwgMSwKKwkJCQkgIEdFTkVSSUNfV1JJVEUsIEZJTEVfQVRUUklCVVRFX05PUk1BTCk7CisJbWF5YmVfcmVkaXJlY3Rfc3RkX2hhbmRsZShMIkdJVF9SRURJUkVDVF9TVERFUlIiLCBTVERfRVJST1JfSEFORExFLCAyLAorCQkJCSAgR0VORVJJQ19XUklURSwgRklMRV9GTEFHX05PX0JVRkZFUklORyk7Cit9CisKKyNpZmRlZiBfTVNDX1ZFUgorI2lmZGVmIF9ERUJVRworI2luY2x1ZGUgPGNydGRiZy5oPgorI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIFdlIGltcGxlbWVudCB3bWFpbigpIGFuZCBjb21waWxlIHdpdGggLW11bmljb2RlLCB3aGljaCB3b3VsZAorICogbm9ybWFsbHkgaWdub3JlIG1haW4oKSwgYnV0IHdlIGNhbGwgdGhlIGxhdHRlciBmcm9tIHRoZSBmb3JtZXIKKyAqIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBub24tQVNDSUkgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMKKyAqIGFwcHJvcHJpYXRlbHkuCisgKgorICogVG8gYmUgbW9yZSBjb21wYXRpYmxlIHdpdGggdGhlIGNvcmUgZ2l0IGNvZGUsIHdlIGNvbnZlcnQKKyAqIGFyZ3YgaW50byBVVEY4IGFuZCBwYXNzIHRoZW0gZGlyZWN0bHkgdG8gbWFpbigpLgorICovCitpbnQgd21haW4oaW50IGFyZ2MsIGNvbnN0IHdjaGFyX3QgKip3YXJndikKK3sKKwlpbnQgaSwgbWF4bGVuLCBleGl0X3N0YXR1czsKKwljaGFyICpidWZmZXIsICoqc2F2ZTsKKwljb25zdCBjaGFyICoqYXJndjsKKworCXRyYWNlMl9pbml0aWFsaXplX2Nsb2NrKCk7CisKKyNpZmRlZiBfTVNDX1ZFUgorI2lmZGVmIF9ERUJVRworCV9DcnRTZXRSZXBvcnRNb2RlKF9DUlRfQVNTRVJULCBfQ1JUREJHX01PREVfREVCVUcpOworI2VuZGlmCisKKyNpZmRlZiBVU0VfTVNWQ19DUlREQkcKKwlfQ3J0U2V0RGJnRmxhZyhfQ1JUREJHX0FMTE9DX01FTV9ERiB8IF9DUlREQkdfTEVBS19DSEVDS19ERik7CisjZW5kaWYKKyNlbmRpZgorCisJbWF5YmVfcmVkaXJlY3Rfc3RkX2hhbmRsZXMoKTsKKworCS8qIGRldGVybWluZSBzaXplIG9mIGFyZ3YgYW5kIGVudmlyb24gY29udmVyc2lvbiBidWZmZXIgKi8KKwltYXhsZW4gPSB3Y3NsZW4od2FyZ3ZbMF0pOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisJCW1heGxlbiA9IG1heChtYXhsZW4sIHdjc2xlbih3YXJndltpXSkpOworCisJLyogYWxsb2NhdGUgYnVmZmVyICh3Y2hhcl90IGVuY29kZXMgdG8gbWF4IDMgVVRGLTggYnl0ZXMpICovCisJbWF4bGVuID0gMyAqIG1heGxlbiArIDE7CisJYnVmZmVyID0gbWFsbG9jX3N0YXJ0dXAobWF4bGVuKTsKKworCS8qCisJICogQ3JlYXRlIGEgVVRGLTggdmVyc2lvbiBvZiB3X2FyZ3YuIEFsc28gY3JlYXRlIGEgInNhdmUiIGNvcHkKKwkgKiB0byByZW1lbWJlciBhbGwgdGhlIHN0cmluZyBwb2ludGVycyBiZWNhdXNlIHBhcnNlX29wdGlvbnMoKQorCSAqIHdpbGwgcmVtb3ZlIGNsYWltZWQgaXRlbXMgZnJvbSB0aGUgYXJndiB0aGF0IHdlIHBhc3MgZG93bi4KKwkgKi8KKwlBTExPQ19BUlJBWShhcmd2LCBhcmdjICsgMSk7CisJQUxMT0NfQVJSQVkoc2F2ZSwgYXJnYyArIDEpOworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCWFyZ3ZbaV0gPSBzYXZlW2ldID0gd2NzdG91dGZkdXBfc3RhcnR1cChidWZmZXIsIHdhcmd2W2ldLCBtYXhsZW4pOworCWFyZ3ZbaV0gPSBzYXZlW2ldID0gTlVMTDsKKwlmcmVlKGJ1ZmZlcik7CisKKwkvKiBmaXggV2luZG93cyBzcGVjaWZpYyBlbnZpcm9ubWVudCBzZXR0aW5ncyAqLworCXNldHVwX3dpbmRvd3NfZW52aXJvbm1lbnQoKTsKKworCXVuc2V0X2Vudmlyb25tZW50X3ZhcmlhYmxlcyA9IHhzdHJkdXAoIlBFUkw1TElCIik7CisKKwkvKiBpbml0aWFsaXplIGNyaXRpY2FsIHNlY3Rpb24gZm9yIHdhaXRwaWQgcGluZm9fdCBsaXN0ICovCisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmcGluZm9fY3MpOworCisJLyogc2V0IHVwIGRlZmF1bHQgZmlsZSBtb2RlIGFuZCBmaWxlIG1vZGVzIGZvciBzdGRpbi9vdXQvZXJyICovCisJX2Ztb2RlID0gX09fQklOQVJZOworCV9zZXRtb2RlKF9maWxlbm8oc3RkaW4pLCBfT19CSU5BUlkpOworCV9zZXRtb2RlKF9maWxlbm8oc3Rkb3V0KSwgX09fQklOQVJZKTsKKwlfc2V0bW9kZShfZmlsZW5vKHN0ZGVyciksIF9PX0JJTkFSWSk7CisKKwkvKiBpbml0aWFsaXplIFVuaWNvZGUgY29uc29sZSAqLworCXdpbmFuc2lfaW5pdCgpOworCisJLyogaW52b2tlIHRoZSByZWFsIG1haW4oKSB1c2luZyBvdXIgdXRmOCB2ZXJzaW9uIG9mIGFyZ3YuICovCisJZXhpdF9zdGF0dXMgPSBtYWluKGFyZ2MsIGFyZ3YpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJZnJlZShzYXZlW2ldKTsKKwlmcmVlKHNhdmUpOworCWZyZWUoYXJndik7CisKKwlyZXR1cm4gZXhpdF9zdGF0dXM7Cit9CisKK2ludCB1bmFtZShzdHJ1Y3QgdXRzbmFtZSAqYnVmKQoreworCXVuc2lnbmVkIHYgPSAodW5zaWduZWQpR2V0VmVyc2lvbigpOworCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7CisJeHNucHJpbnRmKGJ1Zi0+c3lzbmFtZSwgc2l6ZW9mKGJ1Zi0+c3lzbmFtZSksICJXaW5kb3dzIik7CisJeHNucHJpbnRmKGJ1Zi0+cmVsZWFzZSwgc2l6ZW9mKGJ1Zi0+cmVsZWFzZSksCisJCSAiJXUuJXUiLCB2ICYgMHhmZiwgKHYgPj4gOCkgJiAweGZmKTsKKwkvKiBhc3N1bWluZyBOVCB2YXJpYW50cyBvbmx5Li4gKi8KKwl4c25wcmludGYoYnVmLT52ZXJzaW9uLCBzaXplb2YoYnVmLT52ZXJzaW9uKSwKKwkJICAiJXUiLCAodiA+PiAxNikgJiAweDdmZmYpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L21pbmd3LmggYi9jb21wYXQvbWluZ3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmZlODEwCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L21pbmd3LmgKQEAgLTAsMCArMSw2MTQgQEAKKyNpZmRlZiBfX01JTkdXNjRfVkVSU0lPTl9NQUpPUgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHdjaGFyLmg+Cit0eXBlZGVmIF9zaWdzZXRfdCBzaWdzZXRfdDsKKyNlbmRpZgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKworLyogTWluR1ctdzY0IHJlcG9ydHMgdG8gaGF2ZSBmbG9ja2ZpbGUsIGJ1dCBpdCBkb2VzIG5vdCBhY3R1YWxseSBoYXZlIGl0LiAqLworI2lmZGVmIF9fTUlOR1c2NF9WRVJTSU9OX01BSk9SCisjdW5kZWYgX1BPU0lYX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUworI2VuZGlmCisKK2ludCBtaW5nd19jb3JlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CisjZGVmaW5lIHBsYXRmb3JtX2NvcmVfY29uZmlnIG1pbmd3X2NvcmVfY29uZmlnCisKKy8qCisgKiB0aGluZ3MgdGhhdCBhcmUgbm90IGF2YWlsYWJsZSBpbiBoZWFkZXIgZmlsZXMKKyAqLworCit0eXBlZGVmIGludCB1aWRfdDsKK3R5cGVkZWYgaW50IHNvY2tsZW5fdDsKKyNpZm5kZWYgX19NSU5HVzY0X1ZFUlNJT05fTUFKT1IKK3R5cGVkZWYgaW50IHBpZF90OworI2RlZmluZSBoc3RyZXJyb3Igc3RyZXJyb3IKKyNlbmRpZgorCisjZGVmaW5lIFNfSUZMTksgICAgMDEyMDAwMCAvKiBTeW1ib2xpYyBsaW5rICovCisjZGVmaW5lIFNfSVNMTksoeCkgKCgoeCkgJiBTX0lGTVQpID09IFNfSUZMTkspCisjZGVmaW5lIFNfSVNTT0NLKHgpIDAKKworI2lmbmRlZiBTX0lSV1hHCisjZGVmaW5lIFNfSVJHUlAgMAorI2RlZmluZSBTX0lXR1JQIDAKKyNkZWZpbmUgU19JWEdSUCAwCisjZGVmaW5lIFNfSVJXWEcgKFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JWEdSUCkKKyNlbmRpZgorI2lmbmRlZiBTX0lSV1hPCisjZGVmaW5lIFNfSVJPVEggMAorI2RlZmluZSBTX0lXT1RIIDAKKyNkZWZpbmUgU19JWE9USCAwCisjZGVmaW5lIFNfSVJXWE8gKFNfSVJPVEggfCBTX0lXT1RIIHwgU19JWE9USCkKKyNlbmRpZgorCisjZGVmaW5lIFNfSVNVSUQgMDAwNDAwMAorI2RlZmluZSBTX0lTR0lEIDAwMDIwMDAKKyNkZWZpbmUgU19JU1ZUWCAwMDAxMDAwCisKKyNkZWZpbmUgV0lGRVhJVEVEKHgpIDEKKyNkZWZpbmUgV0lGU0lHTkFMRUQoeCkgMAorI2RlZmluZSBXRVhJVFNUQVRVUyh4KSAoKHgpICYgMHhmZikKKyNkZWZpbmUgV1RFUk1TSUcoeCkgU0lHVEVSTQorCisjaWZuZGVmIEVXT1VMREJMT0NLCisjZGVmaW5lIEVXT1VMREJMT0NLIEVBR0FJTgorI2VuZGlmCisjaWZuZGVmIEVMT09QCisjZGVmaW5lIEVMT09QIEVNTElOSworI2VuZGlmCisjZGVmaW5lIFNIVVRfV1IgU0RfU0VORAorCisjZGVmaW5lIFNJR0hVUCAxCisjZGVmaW5lIFNJR1FVSVQgMworI2RlZmluZSBTSUdLSUxMIDkKKyNkZWZpbmUgU0lHUElQRSAxMworI2RlZmluZSBTSUdBTFJNIDE0CisjZGVmaW5lIFNJR0NITEQgMTcKKworI2RlZmluZSBGX0dFVEZEIDEKKyNkZWZpbmUgRl9TRVRGRCAyCisjZGVmaW5lIEZEX0NMT0VYRUMgMHgxCisKKyNpZiAhZGVmaW5lZCBPX0NMT0VYRUMgJiYgZGVmaW5lZCBPX05PSU5IRVJJVAorI2RlZmluZSBPX0NMT0VYRUMJT19OT0lOSEVSSVQKKyNlbmRpZgorCisjaWZuZGVmIEVBRk5PU1VQUE9SVAorI2RlZmluZSBFQUZOT1NVUFBPUlQgV1NBRUFGTk9TVVBQT1JUCisjZW5kaWYKKyNpZm5kZWYgRUNPTk5BQk9SVEVECisjZGVmaW5lIEVDT05OQUJPUlRFRCBXU0FFQ09OTkFCT1JURUQKKyNlbmRpZgorI2lmbmRlZiBFTk9UU09DSworI2RlZmluZSBFTk9UU09DSyBXU0FFTk9UU09DSworI2VuZGlmCisKK3N0cnVjdCBwYXNzd2QgeworCWNoYXIgKnB3X25hbWU7CisJY2hhciAqcHdfZ2Vjb3M7CisJY2hhciAqcHdfZGlyOworfTsKKwordHlwZWRlZiB2b2lkIChfX2NkZWNsICpzaWdfaGFuZGxlcl90KShpbnQpOworc3RydWN0IHNpZ2FjdGlvbiB7CisJc2lnX2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCXVuc2lnbmVkIHNhX2ZsYWdzOworfTsKKyNkZWZpbmUgU0FfUkVTVEFSVCAwCisKK3N0cnVjdCBpdGltZXJ2YWwgeworCXN0cnVjdCB0aW1ldmFsIGl0X3ZhbHVlLCBpdF9pbnRlcnZhbDsKK307CisjZGVmaW5lIElUSU1FUl9SRUFMIDAKKworc3RydWN0IHV0c25hbWUgeworCWNoYXIgc3lzbmFtZVsxNl07CisJY2hhciBub2RlbmFtZVsxXTsKKwljaGFyIHJlbGVhc2VbMTZdOworCWNoYXIgdmVyc2lvblsxNl07CisJY2hhciBtYWNoaW5lWzFdOworfTsKKworLyoKKyAqIHNhbml0aXplIHByZXByb2Nlc3NvciBuYW1lc3BhY2UgcG9sbHV0ZWQgYnkgV2luZG93cyBoZWFkZXJzIGRlZmluaW5nCisgKiBtYWNyb3Mgd2hpY2ggY29sbGlkZSB3aXRoIGdpdCBsb2NhbCB2ZXJzaW9ucworICovCisjdW5kZWYgSEVMUF9DT01NQU5EIC8qIGZyb20gd2ludXNlci5oICovCisKKy8qCisgKiB0cml2aWFsIHN0dWJzCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgcmVhZGxpbmsoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6KQoreyBlcnJubyA9IEVOT1NZUzsgcmV0dXJuIC0xOyB9CitzdGF0aWMgaW5saW5lIGludCBzeW1saW5rKGNvbnN0IGNoYXIgKm9sZHBhdGgsIGNvbnN0IGNoYXIgKm5ld3BhdGgpCit7IGVycm5vID0gRU5PU1lTOyByZXR1cm4gLTE7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGZjaG1vZChpbnQgZmlsZGVzLCBtb2RlX3QgbW9kZSkKK3sgZXJybm8gPSBFTk9TWVM7IHJldHVybiAtMTsgfQorI2lmbmRlZiBfX01JTkdXNjRfVkVSU0lPTl9NQUpPUgorc3RhdGljIGlubGluZSBwaWRfdCBmb3JrKHZvaWQpCit7IGVycm5vID0gRU5PU1lTOyByZXR1cm4gLTE7IH0KKyNlbmRpZgorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWxhcm0odW5zaWduZWQgaW50IHNlY29uZHMpCit7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBmc3luYyhpbnQgZmQpCit7IHJldHVybiBfY29tbWl0KGZkKTsgfQorc3RhdGljIGlubGluZSB2b2lkIHN5bmModm9pZCkKK3t9CitzdGF0aWMgaW5saW5lIHVpZF90IGdldHVpZCh2b2lkKQoreyByZXR1cm4gMTsgfQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFzc3dkICpnZXRwd25hbShjb25zdCBjaGFyICpuYW1lKQoreyByZXR1cm4gTlVMTDsgfQorc3RhdGljIGlubGluZSBpbnQgZmNudGwoaW50IGZkLCBpbnQgY21kLCAuLi4pCit7CisJaWYgKGNtZCA9PSBGX0dFVEZEIHx8IGNtZCA9PSBGX1NFVEZEKQorCQlyZXR1cm4gMDsKKwllcnJubyA9IEVJTlZBTDsKKwlyZXR1cm4gLTE7Cit9CisKKyNkZWZpbmUgc2lnZW1wdHlzZXQoeCkgKHZvaWQpMAorc3RhdGljIGlubGluZSBpbnQgc2lnYWRkc2V0KHNpZ3NldF90ICpzZXQsIGludCBzaWdudW0pCit7IHJldHVybiAwOyB9CisjZGVmaW5lIFNJR19CTE9DSyAwCisjZGVmaW5lIFNJR19VTkJMT0NLIDAKK3N0YXRpYyBpbmxpbmUgaW50IHNpZ3Byb2NtYXNrKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpvbGRzZXQpCit7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHBpZF90IGdldHBwaWQodm9pZCkKK3sgcmV0dXJuIDE7IH0KK3N0YXRpYyBpbmxpbmUgcGlkX3QgZ2V0cGdpZChwaWRfdCBwaWQpCit7IHJldHVybiBwaWQgPT0gMCA/IGdldHBpZCgpIDogcGlkOyB9CitzdGF0aWMgaW5saW5lIHBpZF90IHRjZ2V0cGdycChpbnQgZmQpCit7IHJldHVybiBnZXRwaWQoKTsgfQorCisvKgorICogc2ltcGxlIGFkYXB0b3JzCisgKi8KKworaW50IG1pbmd3X21rZGlyKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlKTsKKyNkZWZpbmUgbWtkaXIgbWluZ3dfbWtkaXIKKworI2RlZmluZSBXTk9IQU5HIDEKK3BpZF90IHdhaXRwaWQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgaW50IG9wdGlvbnMpOworCisjZGVmaW5lIGtpbGwgbWluZ3dfa2lsbAoraW50IG1pbmd3X2tpbGwocGlkX3QgcGlkLCBpbnQgc2lnKTsKKworI2lmbmRlZiBOT19PUEVOU1NMCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KK3N0YXRpYyBpbmxpbmUgaW50IG1pbmd3X1NTTF9zZXRfZmQoU1NMICpzc2wsIGludCBmZCkKK3sKKwlyZXR1cm4gU1NMX3NldF9mZChzc2wsIF9nZXRfb3NmaGFuZGxlKGZkKSk7Cit9CisjZGVmaW5lIFNTTF9zZXRfZmQgbWluZ3dfU1NMX3NldF9mZAorCitzdGF0aWMgaW5saW5lIGludCBtaW5nd19TU0xfc2V0X3JmZChTU0wgKnNzbCwgaW50IGZkKQoreworCXJldHVybiBTU0xfc2V0X3JmZChzc2wsIF9nZXRfb3NmaGFuZGxlKGZkKSk7Cit9CisjZGVmaW5lIFNTTF9zZXRfcmZkIG1pbmd3X1NTTF9zZXRfcmZkCisKK3N0YXRpYyBpbmxpbmUgaW50IG1pbmd3X1NTTF9zZXRfd2ZkKFNTTCAqc3NsLCBpbnQgZmQpCit7CisJcmV0dXJuIFNTTF9zZXRfd2ZkKHNzbCwgX2dldF9vc2ZoYW5kbGUoZmQpKTsKK30KKyNkZWZpbmUgU1NMX3NldF93ZmQgbWluZ3dfU1NMX3NldF93ZmQKKyNlbmRpZgorCisvKgorICogaW1wbGVtZW50YXRpb25zIG9mIG1pc3NpbmcgZnVuY3Rpb25zCisgKi8KKworaW50IHBpcGUoaW50IGZpbGVkZXNbMl0pOwordW5zaWduZWQgaW50IHNsZWVwICh1bnNpZ25lZCBpbnQgc2Vjb25kcyk7CitpbnQgbWtzdGVtcChjaGFyICp0ZW1wbGF0ZSk7CitpbnQgZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgdm9pZCAqdHopOworI2lmbmRlZiBfX01JTkdXNjRfVkVSU0lPTl9NQUpPUgorc3RydWN0IHRtICpnbXRpbWVfcihjb25zdCB0aW1lX3QgKnRpbWVwLCBzdHJ1Y3QgdG0gKnJlc3VsdCk7CitzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCAqdGltZXAsIHN0cnVjdCB0bSAqcmVzdWx0KTsKKyNlbmRpZgoraW50IGdldHBhZ2VzaXplKHZvaWQpOwkvKiBkZWZpbmVkIGluIE1pbkdXJ3MgbGliZ2NjLmEgKi8KK3N0cnVjdCBwYXNzd2QgKmdldHB3dWlkKHVpZF90IHVpZCk7CitpbnQgc2V0aXRpbWVyKGludCB0eXBlLCBzdHJ1Y3QgaXRpbWVydmFsICppbiwgc3RydWN0IGl0aW1lcnZhbCAqb3V0KTsKK2ludCBzaWdhY3Rpb24oaW50IHNpZywgc3RydWN0IHNpZ2FjdGlvbiAqaW4sIHN0cnVjdCBzaWdhY3Rpb24gKm91dCk7CitpbnQgbGluayhjb25zdCBjaGFyICpvbGRwYXRoLCBjb25zdCBjaGFyICpuZXdwYXRoKTsKK2ludCB1bmFtZShzdHJ1Y3QgdXRzbmFtZSAqYnVmKTsKKworLyoKKyAqIHJlcGxhY2VtZW50cyBvZiBleGlzdGluZyBmdW5jdGlvbnMKKyAqLworCitpbnQgbWluZ3dfdW5saW5rKGNvbnN0IGNoYXIgKnBhdGhuYW1lKTsKKyNkZWZpbmUgdW5saW5rIG1pbmd3X3VubGluaworCitpbnQgbWluZ3dfcm1kaXIoY29uc3QgY2hhciAqcGF0aCk7CisjZGVmaW5lIHJtZGlyIG1pbmd3X3JtZGlyCisKK2ludCBtaW5nd19vcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG9mbGFncywgLi4uKTsKKyNkZWZpbmUgb3BlbiBtaW5nd19vcGVuCisKK2ludCBtaW5nd19mZ2V0YyhGSUxFICpzdHJlYW0pOworI2RlZmluZSBmZ2V0YyBtaW5nd19mZ2V0YworCitGSUxFICptaW5nd19mb3BlbiAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm90eXBlKTsKKyNkZWZpbmUgZm9wZW4gbWluZ3dfZm9wZW4KKworRklMRSAqbWluZ3dfZnJlb3BlbiAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm90eXBlLCBGSUxFICpzdHJlYW0pOworI2RlZmluZSBmcmVvcGVuIG1pbmd3X2ZyZW9wZW4KKworaW50IG1pbmd3X2ZmbHVzaChGSUxFICpzdHJlYW0pOworI2RlZmluZSBmZmx1c2ggbWluZ3dfZmZsdXNoCisKK3NzaXplX3QgbWluZ3dfd3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pOworI2RlZmluZSB3cml0ZSBtaW5nd193cml0ZQorCitpbnQgbWluZ3dfYWNjZXNzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSk7CisjdW5kZWYgYWNjZXNzCisjZGVmaW5lIGFjY2VzcyBtaW5nd19hY2Nlc3MKKworaW50IG1pbmd3X2NoZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpOworI2RlZmluZSBjaGRpciBtaW5nd19jaGRpcgorCitpbnQgbWluZ3dfY2htb2QoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBtb2RlKTsKKyNkZWZpbmUgY2htb2QgbWluZ3dfY2htb2QKKworY2hhciAqbWluZ3dfbWt0ZW1wKGNoYXIgKnRlbXBsYXRlKTsKKyNkZWZpbmUgbWt0ZW1wIG1pbmd3X21rdGVtcAorCitjaGFyICptaW5nd19nZXRjd2QoY2hhciAqcG9pbnRlciwgaW50IGxlbik7CisjZGVmaW5lIGdldGN3ZCBtaW5nd19nZXRjd2QKKworI2lmZGVmIE5PX1VOU0VURU5WCisjZXJyb3IgIk5PX1VOU0VURU5WIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBXaW5kb3dzLXNwZWNpZmljIHN0YXJ0dXAgY29kZSEiCisjZW5kaWYKKworLyoKKyAqIFdlIGJpbmQgKmVudigpIHJvdXRpbmVzIChldmVuIHRoZSBtaW5nd18gb25lcykgdG8gcHJpdmF0ZSBtaW5nd18gdmVyc2lvbnMuCisgKiBUaGVzZSB0YWxrIHRvIHRoZSBDUlQgdXNpbmcgVU5JQ09ERS93Y2hhcl90LCBidXQgbWFpbnRhaW4gdGhlIG9yaWdpbmFsCisgKiBuYXJyb3ctY2hhciBBUEkuCisgKgorICogTm90ZSB0aGF0IHRoZSBNU0NSVCBtYWludGFpbnMgYm90aCBBTlNJIChnZXRlbnYoKSkgYW5kIFVOSUNPREUgKF93Z2V0ZW52KCkpCisgKiByb3V0aW5lcyBhbmQgc3RvcmVzIGJvdGggdmVyc2lvbnMgb2YgZWFjaCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiBwYXJhbGxlbAorICogKGFuZCBzZWNyZXRseSB1cGRhdGVzIGJvdGggd2hlbiB5b3Ugc2V0IG9uZSBvciB0aGUgb3RoZXIpLCBidXQgaXQgdXNlcyBDUF9BQ1AKKyAqIHRvIGRvIHRoZSBjb252ZXJzaW9uIHJhdGhlciB0aGFuIENQX1VURjguCisgKgorICogU2luY2UgZXZlcnl0aGluZyBpbiB0aGUgZ2l0IGNvZGUgYmFzZSBpcyBVVEY4LCB3ZSBkZWZpbmUgdGhlIG1pbmd3XyByb3V0aW5lcworICogdG8gYWNjZXNzIHRoZSBDUlQgdXNpbmcgdGhlIFVOSUNPREUgcm91dGluZXMgYW5kIG1hbnVhbGx5IGNvbnZlcnQgdGhlbSB0bworICogVVRGOC4gIFRoaXMgYWxzbyBhdm9pZHMgcm91bmQtdHJpcCBwcm9ibGVtcy4KKyAqCisgKiBUaGlzIGFsc28gaGVscHMgd2l0aCBvdXIgbGlua2FnZSwgc2luY2UgIl93ZW52aXJvbiIgaXMgcHVibGljbHkgZXhwb3J0ZWQKKyAqIGZyb20gdGhlIENSVC4gIEJ1dCB0byBhY2Nlc3MgIl9lbnZpcm9uIiB3ZSB3b3VsZCBoYXZlIHRvIHN0YXRpY2FsbHkgbGluaworICogdG8gdGhlIENSVCAoL01UKS4KKyAqCisgKiBXZSByZXF1aXJlIE5PX1NFVEVOViAoYW5kIGxldCBnaXRzZXRlbnYoKSBjYWxsIG91ciBtaW5nd19wdXRlbnYpLgorICovCisjZGVmaW5lIGdldGVudiAgICAgICBtaW5nd19nZXRlbnYKKyNkZWZpbmUgcHV0ZW52ICAgICAgIG1pbmd3X3B1dGVudgorI2RlZmluZSB1bnNldGVudiAgICAgbWluZ3dfcHV0ZW52CitjaGFyICptaW5nd19nZXRlbnYoY29uc3QgY2hhciAqbmFtZSk7CitpbnQgICBtaW5nd19wdXRlbnYoY29uc3QgY2hhciAqbmFtZSk7CisKK2ludCBtaW5nd19nZXRob3N0bmFtZShjaGFyICpob3N0LCBpbnQgbmFtZWxlbik7CisjZGVmaW5lIGdldGhvc3RuYW1lIG1pbmd3X2dldGhvc3RuYW1lCisKK3N0cnVjdCBob3N0ZW50ICptaW5nd19nZXRob3N0YnluYW1lKGNvbnN0IGNoYXIgKmhvc3QpOworI2RlZmluZSBnZXRob3N0YnluYW1lIG1pbmd3X2dldGhvc3RieW5hbWUKKworaW50IG1pbmd3X2dldGFkZHJpbmZvKGNvbnN0IGNoYXIgKm5vZGUsIGNvbnN0IGNoYXIgKnNlcnZpY2UsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsIHN0cnVjdCBhZGRyaW5mbyAqKnJlcyk7CisjZGVmaW5lIGdldGFkZHJpbmZvIG1pbmd3X2dldGFkZHJpbmZvCisKK2ludCBtaW5nd19zb2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7CisjZGVmaW5lIHNvY2tldCBtaW5nd19zb2NrZXQKKworaW50IG1pbmd3X2Nvbm5lY3QoaW50IHNvY2tmZCwgc3RydWN0IHNvY2thZGRyICpzYSwgc2l6ZV90IHN6KTsKKyNkZWZpbmUgY29ubmVjdCBtaW5nd19jb25uZWN0CisKK2ludCBtaW5nd19iaW5kKGludCBzb2NrZmQsIHN0cnVjdCBzb2NrYWRkciAqc2EsIHNpemVfdCBzeik7CisjZGVmaW5lIGJpbmQgbWluZ3dfYmluZAorCitpbnQgbWluZ3dfc2V0c29ja29wdChpbnQgc29ja2ZkLCBpbnQgbHZsLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKKyNkZWZpbmUgc2V0c29ja29wdCBtaW5nd19zZXRzb2Nrb3B0CisKK2ludCBtaW5nd19zaHV0ZG93bihpbnQgc29ja2ZkLCBpbnQgaG93KTsKKyNkZWZpbmUgc2h1dGRvd24gbWluZ3dfc2h1dGRvd24KKworaW50IG1pbmd3X2xpc3RlbihpbnQgc29ja2ZkLCBpbnQgYmFja2xvZyk7CisjZGVmaW5lIGxpc3RlbiBtaW5nd19saXN0ZW4KKworaW50IG1pbmd3X2FjY2VwdChpbnQgc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzb2NrbGVuX3QgKnN6KTsKKyNkZWZpbmUgYWNjZXB0IG1pbmd3X2FjY2VwdAorCitpbnQgbWluZ3dfcmVuYW1lKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CisjZGVmaW5lIHJlbmFtZSBtaW5nd19yZW5hbWUKKworI2lmIGRlZmluZWQoVVNFX1dJTjMyX01NQVApIHx8IGRlZmluZWQoX01TQ19WRVIpCitpbnQgbWluZ3dfZ2V0cGFnZXNpemUodm9pZCk7CisjZGVmaW5lIGdldHBhZ2VzaXplIG1pbmd3X2dldHBhZ2VzaXplCisjZW5kaWYKKworc3RydWN0IHJsaW1pdCB7CisJdW5zaWduZWQgaW50IHJsaW1fY3VyOworfTsKKyNkZWZpbmUgUkxJTUlUX05PRklMRSAwCisKK3N0YXRpYyBpbmxpbmUgaW50IGdldHJsaW1pdChpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgKnJscCkKK3sKKwlpZiAocmVzb3VyY2UgIT0gUkxJTUlUX05PRklMRSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIC0xOworCX0KKworCXJscC0+cmxpbV9jdXIgPSAyMDQ4OworCXJldHVybiAwOworfQorCisvKgorICogVXNlIG1pbmd3IHNwZWNpZmljIHN0YXQoKS9sc3RhdCgpL2ZzdGF0KCkgaW1wbGVtZW50YXRpb25zIG9uIFdpbmRvd3MsCisgKiBpbmNsdWRpbmcgb3VyIG93biBzdHJ1Y3Qgc3RhdCB3aXRoIDY0IGJpdCBzdF9zaXplIGFuZCBuYW5vc2Vjb25kLXByZWNpc2lvbgorICogZmlsZSB0aW1lcy4KKyAqLworI2lmbmRlZiBfX01JTkdXNjRfVkVSU0lPTl9NQUpPUgorI2RlZmluZSBvZmZfdCBvZmY2NF90CisjZGVmaW5lIGxzZWVrIF9sc2Vla2k2NAorI2lmbmRlZiBfTVNDX1ZFUgorc3RydWN0IHRpbWVzcGVjIHsKKwl0aW1lX3QgdHZfc2VjOworCWxvbmcgdHZfbnNlYzsKK307CisjZW5kaWYKKyNlbmRpZgorCitzdHJ1Y3QgbWluZ3dfc3RhdCB7CisgICAgX2Rldl90IHN0X2RldjsKKyAgICBfaW5vX3Qgc3RfaW5vOworICAgIF9tb2RlX3Qgc3RfbW9kZTsKKyAgICBzaG9ydCBzdF9ubGluazsKKyAgICBzaG9ydCBzdF91aWQ7CisgICAgc2hvcnQgc3RfZ2lkOworICAgIF9kZXZfdCBzdF9yZGV2OworICAgIG9mZjY0X3Qgc3Rfc2l6ZTsKKyAgICBzdHJ1Y3QgdGltZXNwZWMgc3RfYXRpbTsKKyAgICBzdHJ1Y3QgdGltZXNwZWMgc3RfbXRpbTsKKyAgICBzdHJ1Y3QgdGltZXNwZWMgc3RfY3RpbTsKK307CisKKyNkZWZpbmUgc3RfYXRpbWUgc3RfYXRpbS50dl9zZWMKKyNkZWZpbmUgc3RfbXRpbWUgc3RfbXRpbS50dl9zZWMKKyNkZWZpbmUgc3RfY3RpbWUgc3RfY3RpbS50dl9zZWMKKworI2lmZGVmIHN0YXQKKyN1bmRlZiBzdGF0CisjZW5kaWYKKyNkZWZpbmUgc3RhdCBtaW5nd19zdGF0CitpbnQgbWluZ3dfbHN0YXQoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKTsKK2ludCBtaW5nd19zdGF0KGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgc3RydWN0IHN0YXQgKmJ1Zik7CitpbnQgbWluZ3dfZnN0YXQoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqYnVmKTsKKyNpZmRlZiBmc3RhdAorI3VuZGVmIGZzdGF0CisjZW5kaWYKKyNkZWZpbmUgZnN0YXQgbWluZ3dfZnN0YXQKKyNpZmRlZiBsc3RhdAorI3VuZGVmIGxzdGF0CisjZW5kaWYKKyNkZWZpbmUgbHN0YXQgbWluZ3dfbHN0YXQKKworCitpbnQgbWluZ3dfdXRpbWUoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBzdHJ1Y3QgdXRpbWJ1ZiAqdGltZXMpOworI2RlZmluZSB1dGltZSBtaW5nd191dGltZQorc2l6ZV90IG1pbmd3X3N0cmZ0aW1lKGNoYXIgKnMsIHNpemVfdCBtYXgsCisJCSAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgY29uc3Qgc3RydWN0IHRtICp0bSk7CisjZGVmaW5lIHN0cmZ0aW1lIG1pbmd3X3N0cmZ0aW1lCisKK3BpZF90IG1pbmd3X3NwYXdudnBlKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnYsCisJCSAgICAgY29uc3QgY2hhciAqZGlyLAorCQkgICAgIGludCBmaGluLCBpbnQgZmhvdXQsIGludCBmaGVycik7CitpbnQgbWluZ3dfZXhlY3ZwKGNvbnN0IGNoYXIgKmNtZCwgY2hhciAqY29uc3QgKmFyZ3YpOworI2RlZmluZSBleGVjdnAgbWluZ3dfZXhlY3ZwCitpbnQgbWluZ3dfZXhlY3YoY29uc3QgY2hhciAqY21kLCBjaGFyICpjb25zdCAqYXJndik7CisjZGVmaW5lIGV4ZWN2IG1pbmd3X2V4ZWN2CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdpdF9udG9obCh1bnNpZ25lZCBpbnQgeCkKK3sgcmV0dXJuICh1bnNpZ25lZCBpbnQpbnRvaGwoeCk7IH0KKyNkZWZpbmUgbnRvaGwgZ2l0X250b2hsCisKK3NpZ19oYW5kbGVyX3QgbWluZ3dfc2lnbmFsKGludCBzaWcsIHNpZ19oYW5kbGVyX3QgaGFuZGxlcik7CisjZGVmaW5lIHNpZ25hbCBtaW5nd19zaWduYWwKKworaW50IG1pbmd3X3JhaXNlKGludCBzaWcpOworI2RlZmluZSByYWlzZSBtaW5nd19yYWlzZQorCisvKgorICogQU5TSSBlbXVsYXRpb24gd3JhcHBlcnMKKyAqLworCitpbnQgd2luYW5zaV9pc2F0dHkoaW50IGZkKTsKKyNkZWZpbmUgaXNhdHR5IHdpbmFuc2lfaXNhdHR5CisKK2ludCB3aW5hbnNpX2R1cDIoaW50IG9sZGZkLCBpbnQgbmV3ZmQpOworI2RlZmluZSBkdXAyIHdpbmFuc2lfZHVwMgorCit2b2lkIHdpbmFuc2lfaW5pdCh2b2lkKTsKK0hBTkRMRSB3aW5hbnNpX2dldF9vc2ZoYW5kbGUoaW50IGZkKTsKKworLyoKKyAqIGdpdCBzcGVjaWZpYyBjb21wYXRpYmlsaXR5CisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGNvbnZlcnRfc2xhc2hlcyhjaGFyICpwYXRoKQoreworCWZvciAoOyAqcGF0aDsgcGF0aCsrKQorCQlpZiAoKnBhdGggPT0gJ1xcJykKKwkJCSpwYXRoID0gJy8nOworfQorI2RlZmluZSBQQVRIX1NFUCAnOycKK2NoYXIgKm1pbmd3X3F1ZXJ5X3VzZXJfZW1haWwodm9pZCk7CisjZGVmaW5lIHF1ZXJ5X3VzZXJfZW1haWwgbWluZ3dfcXVlcnlfdXNlcl9lbWFpbAorI2lmICFkZWZpbmVkKF9fTUlOR1c2NF9WRVJTSU9OX01BSk9SKSAmJiAoIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSIDwgMTgwMCkKKyNkZWZpbmUgUFJJdU1BWCAiSTY0dSIKKyNkZWZpbmUgUFJJZDY0ICJJNjRkIgorI2Vsc2UKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCisKKy8qKgorICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcGF0aCBpcyBhIHZhbGlkIG9uZSBvbiBXaW5kb3dzLgorICoKKyAqIEluIHBhcnRpY3VsYXIsIHBhdGggc2VnbWVudHMgYXJlIGRpc2FsbG93ZWQgd2hpY2gKKyAqCisgKiAtIGVuZCBpbiBhIHBlcmlvZCBvciBhIHNwYWNlIChleGNlcHQgdGhlIHNwZWNpYWwgZGlyZWN0b3JpZXMgYC5gIGFuZCBgLi5gKS4KKyAqCisgKiAtIGNvbnRhaW4gYW55IG9mIHRoZSByZXNlcnZlZCBjaGFyYWN0ZXJzLCBlLmcuIGA6YCwgYDtgLCBgKmAsIGV0YworICoKKyAqIC0gY29ycmVzcG9uZCB0byByZXNlcnZlZCBuYW1lcyAoc3VjaCBhcyBgQVVYYCwgYFBSTmAsIGV0YykKKyAqCisgKiBUaGUgYGFsbG93X2xpdGVyYWxfbnVsYCBwYXJhbWV0ZXIgY29udHJvbHMgd2hldGhlciB0aGUgcGF0aCBgTlVMYCBzaG91bGQKKyAqIGJlIGNvbnNpZGVyZWQgdmFsaWQgKHRoaXMgbWFrZXMgc2Vuc2UgZS5nLiBiZWZvcmUgb3BlbmluZyBmaWxlcywgYXMgaXQgaXMKKyAqIHBlcmZlY3RseSBsZWdpdGltYXRlIHRvIG9wZW4gYE5VTGAgb24gV2luZG93cywganVzdCBhcyBpdCBpcyB0byBvcGVuCisgKiBgL2Rldi9udWxsYCBvbiBVbml4L0xpbnV4KS4KKyAqCisgKiBSZXR1cm5zIDEgdXBvbiBzdWNjZXNzLCBvdGhlcndpc2UgMC4KKyAqLworaW50IGlzX3ZhbGlkX3dpbjMyX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgaW50IGFsbG93X2xpdGVyYWxfbnVsKTsKKyNkZWZpbmUgaXNfdmFsaWRfcGF0aChwYXRoKSBpc192YWxpZF93aW4zMl9wYXRoKHBhdGgsIDApCisKKy8qKgorICogQ29udmVydHMgVVRGLTggZW5jb2RlZCBzdHJpbmcgdG8gVVRGLTE2TEUuCisgKgorICogVG8gc3VwcG9ydCByZXBvc2l0b3JpZXMgd2l0aCBsZWdhY3ktZW5jb2RlZCBmaWxlIG5hbWVzLCBpbnZhbGlkIFVURi04IGJ5dGVzCisgKiAweGEwIC0gMHhmZiBhcmUgY29udmVydGVkIHRvIGNvcnJlc3BvbmRpbmcgcHJpbnRhYmxlIFVuaWNvZGUgY2hhcnMgXHUwMGEwIC0KKyAqIFx1MDBmZiwgYW5kIGludmFsaWQgVVRGLTggYnl0ZXMgMHg4MCAtIDB4OWYgKHdoaWNoIHdvdWxkIG1ha2Ugbm9uLXByaW50YWJsZQorICogVW5pY29kZSkgYXJlIGNvbnZlcnRlZCB0byBoZXgtY29kZS4KKyAqCisgKiBMZWFkLWJ5dGVzIG5vdCBmb2xsb3dlZCBieSBhbiBhcHByb3ByaWF0ZSBudW1iZXIgb2YgdHJhaWwtYnl0ZXMsIG92ZXItbG9uZworICogZW5jb2RpbmdzIGFuZCA0LWJ5dGUgZW5jb2RpbmdzID4gXHUxMGZmZmYgYXJlIGRldGVjdGVkIGFzIGludmFsaWQgVVRGLTguCisgKgorICogTWF4aW11bSBzcGFjZSByZXF1aXJlbWVudCBmb3IgdGhlIHRhcmdldCBidWZmZXIgaXMgdHdvIHdpZGUgY2hhcnMgcGVyIFVURi04CisgKiBjaGFyICgoKHN0cmxlbih1dGYpICogMikgKyAxKSBbKiBzaXplb2Yod2NoYXJfdCldKS4KKyAqCisgKiBUaGUgbWF4aW11bSBzcGFjZSBpcyBuZWVkZWQgb25seSBpZiB0aGUgZW50aXJlIGlucHV0IHN0cmluZyBjb25zaXN0cyBvZgorICogaW52YWxpZCBVVEYtOCBieXRlcyBpbiByYW5nZSAweDgwLTB4OWYsIGFzIHBlciB0aGUgZm9sbG93aW5nIHRhYmxlOgorICoKKyAqICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8IFVURi04IHwgVVRGLTE2IHwKKyAqICAgQ29kZSBwb2ludCAgfCAgVVRGLTggc2VxdWVuY2UgICB8IGJ5dGVzIHwgd29yZHMgIHwgcmF0aW8KKyAqIC0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tCisgKiAwMDAwMDAtMDAwMDdmIHwgMC03ZiAgICAgICAgICAgICAgfCAgIDEgICB8ICAgMSAgICB8ICAxCisgKiAwMDAwODAtMDAwN2ZmIHwgYzItZGYgKyA4MC1iZiAgICAgfCAgIDIgICB8ICAgMSAgICB8ICAwLjUKKyAqIDAwMDgwMC0wMGZmZmYgfCBlMC1lZiArIDIgKiA4MC1iZiB8ICAgMyAgIHwgICAxICAgIHwgIDAuMzMKKyAqIDAxMDAwMC0xMGZmZmYgfCBmMC1mNCArIDMgKiA4MC1iZiB8ICAgNCAgIHwgIDIgKGEpIHwgIDAuNQorICogaW52YWxpZCAgICAgICB8IDgwLTlmICAgICAgICAgICAgIHwgICAxICAgfCAgMiAoYikgfCAgMgorICogaW52YWxpZCAgICAgICB8IGEwLWZmICAgICAgICAgICAgIHwgICAxICAgfCAgIDEgICAgfCAgMQorICoKKyAqIChhKSBlbmNvZGVkIGFzIFVURi0xNiBzdXJyb2dhdGUgcGFpcgorICogKGIpIGVuY29kZWQgYXMgdHdvIGhleCBkaWdpdHMKKyAqCisgKiBOb3RlIHRoYXQsIHdoaWxlIHRoZSBVVEYtOCBlbmNvZGluZyBzY2hlbWUgY2FuIGJlIGV4dGVuZGVkIHRvIDUtYnl0ZSwgNi1ieXRlCisgKiBvciBldmVuIGluZGVmaW5pdGUtYnl0ZSBzZXF1ZW5jZXMsIHRoZSBsYXJnZXN0IHZhbGlkIGNvZGUgcG9pbnQgXHUxMGZmZmYKKyAqIGVuY29kZXMgYXMgb25seSA0IFVURi04IGJ5dGVzLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiB3Y3M6IHdpZGUgY2hhciB0YXJnZXQgYnVmZmVyCisgKiB1dGY6IHN0cmluZyB0byBjb252ZXJ0CisgKiB3Y3NsZW46IHNpemUgb2YgdGFyZ2V0IGJ1ZmZlciAoaW4gd2NoYXJfdCdzKQorICogdXRmbGVuOiBzaXplIG9mIHN0cmluZyB0byBjb252ZXJ0LCBvciAtMSBpZiAwLXRlcm1pbmF0ZWQKKyAqCisgKiBSZXR1cm5zOgorICogbGVuZ3RoIG9mIGNvbnZlcnRlZCBzdHJpbmcgKF93Y3NsZW4od2NzKSksIG9yIC0xIG9uIGZhaWx1cmUKKyAqCisgKiBFcnJvcnM6CisgKiBFSU5WQUw6IG9uZSBvZiB0aGUgaW5wdXQgcGFyYW1ldGVycyBpcyBpbnZhbGlkIChlLmcuIE5VTEwpCisgKiBFUkFOR0U6IHRoZSBvdXRwdXQgYnVmZmVyIGlzIHRvbyBzbWFsbAorICovCitpbnQgeHV0ZnRvd2Nzbih3Y2hhcl90ICp3Y3MsIGNvbnN0IGNoYXIgKnV0Ziwgc2l6ZV90IHdjc2xlbiwgaW50IHV0Zmxlbik7CisKKy8qKgorICogU2ltcGxpZmllZCB2YXJpYW50IG9mIHh1dGZ0b3djc24sIGFzc3VtZXMgaW5wdXQgc3RyaW5nIGlzIFwwLXRlcm1pbmF0ZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHh1dGZ0b3djcyh3Y2hhcl90ICp3Y3MsIGNvbnN0IGNoYXIgKnV0Ziwgc2l6ZV90IHdjc2xlbikKK3sKKwlyZXR1cm4geHV0ZnRvd2Nzbih3Y3MsIHV0Ziwgd2NzbGVuLCAtMSk7Cit9CisKKy8qKgorICogU2ltcGxpZmllZCBmaWxlIHN5c3RlbSBzcGVjaWZpYyB2YXJpYW50IG9mIHh1dGZ0b3djc24sIGFzc3VtZXMgb3V0cHV0CisgKiBidWZmZXIgc2l6ZSBpcyBNQVhfUEFUSCB3aWRlIGNoYXJzIGFuZCBpbnB1dCBzdHJpbmcgaXMgXDAtdGVybWluYXRlZCwKKyAqIGZhaWxzIHdpdGggRU5BTUVUT09MT05HIGlmIGlucHV0IHN0cmluZyBpcyB0b28gbG9uZy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgeHV0ZnRvd2NzX3BhdGgod2NoYXJfdCAqd2NzLCBjb25zdCBjaGFyICp1dGYpCit7CisJaW50IHJlc3VsdCA9IHh1dGZ0b3djc24od2NzLCB1dGYsIE1BWF9QQVRILCAtMSk7CisJaWYgKHJlc3VsdCA8IDAgJiYgZXJybm8gPT0gRVJBTkdFKQorCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIENvbnZlcnRzIFVURi0xNkxFIGVuY29kZWQgc3RyaW5nIHRvIFVURi04LgorICoKKyAqIE1heGltdW0gc3BhY2UgcmVxdWlyZW1lbnQgZm9yIHRoZSB0YXJnZXQgYnVmZmVyIGlzIHRocmVlIFVURi04IGNoYXJzIHBlcgorICogd2lkZSBjaGFyICgoX3djc2xlbih3Y3MpICogMykgKyAxKS4KKyAqCisgKiBUaGUgbWF4aW11bSBzcGFjZSBpcyBuZWVkZWQgb25seSBpZiB0aGUgZW50aXJlIGlucHV0IHN0cmluZyBjb25zaXN0cyBvZgorICogVVRGLTE2IHdvcmRzIGluIHJhbmdlIDB4MDgwMC0weGQ3ZmYgb3IgMHhlMDAwLTB4ZmZmZiAoaS5lLiBcdTA4MDAtXHVmZmZmCisgKiBtb2R1bG8gc3Vycm9nYXRlIHBhaXJzKSwgYXMgcGVyIHRoZSBmb2xsb3dpbmcgdGFibGU6CisgKgorICogICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8IFVURi0xNiB8IFVURi04IHwKKyAqICAgQ29kZSBwb2ludCAgfCAgVVRGLTE2IHNlcXVlbmNlICAgICAgfCB3b3JkcyAgfCBieXRlcyB8IHJhdGlvCisgKiAtLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0KKyAqIDAwMDAwMC0wMDAwN2YgfCAwMDAwLTAwN2YgICAgICAgICAgICAgfCAgIDEgICAgfCAgIDEgICB8ICAxCisgKiAwMDAwODAtMDAwN2ZmIHwgMDA4MC0wN2ZmICAgICAgICAgICAgIHwgICAxICAgIHwgICAyICAgfCAgMgorICogMDAwODAwLTAwZmZmZiB8IDA4MDAtZDdmZiAvIGUwMDAtZmZmZiB8ICAgMSAgICB8ICAgMyAgIHwgIDMKKyAqIDAxMDAwMC0xMGZmZmYgfCBkODAwLWRiZmYgKyBkYzAwLWRmZmYgfCAgIDIgICAgfCAgIDQgICB8ICAyCisgKgorICogTm90ZSB0aGF0IGludmFsaWQgY29kZSBwb2ludHMgPiAxMGZmZmYgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIFVURi0xNi4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICogdXRmOiB0YXJnZXQgYnVmZmVyCisgKiB3Y3M6IHdpZGUgc3RyaW5nIHRvIGNvbnZlcnQKKyAqIHV0Zmxlbjogc2l6ZSBvZiB0YXJnZXQgYnVmZmVyCisgKgorICogUmV0dXJuczoKKyAqIGxlbmd0aCBvZiBjb252ZXJ0ZWQgc3RyaW5nLCBvciAtMSBvbiBmYWlsdXJlCisgKgorICogRXJyb3JzOgorICogRUlOVkFMOiBvbmUgb2YgdGhlIGlucHV0IHBhcmFtZXRlcnMgaXMgaW52YWxpZCAoZS5nLiBOVUxMKQorICogRVJBTkdFOiB0aGUgb3V0cHV0IGJ1ZmZlciBpcyB0b28gc21hbGwKKyAqLworaW50IHh3Y3N0b3V0ZihjaGFyICp1dGYsIGNvbnN0IHdjaGFyX3QgKndjcywgc2l6ZV90IHV0Zmxlbik7CisKKy8qCisgKiBBIGNyaXRpY2FsIHNlY3Rpb24gdXNlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNwYXduCisgKiBmdW5jdGlvbnMgKG1pbmd3X3NwYXdudltwXWUoKSkgYW5kIHdhaXRwaWQoKS4gSW5pdGlhbGlzZWQgaW4KKyAqIHRoZSByZXBsYWNlbWVudCBtYWluKCkgbWFjcm8gYmVsb3cuCisgKi8KK2V4dGVybiBDUklUSUNBTF9TRUNUSU9OIHBpbmZvX2NzOworCisvKgorICogR2l0LCBsaWtlIG1vc3QgcG9ydGFibGUgQyBhcHBsaWNhdGlvbnMsIGltcGxlbWVudHMgYSBtYWluKCkgZnVuY3Rpb24uIE9uCisgKiBXaW5kb3dzLCB0aGlzIG1haW4oKSBmdW5jdGlvbiB3b3VsZCByZWNlaXZlIHBhcmFtZXRlcnMgZW5jb2RlZCBpbiB0aGUKKyAqIGN1cnJlbnQgbG9jYWxlLCBidXQgR2l0IGZvciBXaW5kb3dzIHdvdWxkIHByZWZlciBVVEYtOCBlbmNvZGVkICBwYXJhbWV0ZXJzLgorICoKKyAqIFRvIG1ha2UgdGhhdCBoYXBwZW4sIHdlIHN0aWxsIGRlY2xhcmUgbWFpbigpIGhlcmUsIGFuZCB0aGVuIGRlY2xhcmUgYW5kCisgKiBpbXBsZW1lbnQgd21haW4oKSAod2hpY2ggaXMgdGhlIFVuaWNvZGUgdmFyaWFudCBvZiBtYWluKCkpIGFuZCBjb21waWxlIHdpdGgKKyAqIC1tdW5pY29kZS4gVGhpcyB3bWFpbigpIGZ1bmN0aW9uIHJlZW5jb2RlcyB0aGUgcGFyYW1ldGVycyBmcm9tIFVURi0xNiB0bworICogVVRGLTggZm9ybWF0LCBzZXRzIHVwIGEgY291cGxlIG9mIG90aGVyIHRoaW5ncyBhcyByZXF1aXJlZCBvbiBXaW5kb3dzLCBhbmQKKyAqIHRoZW4gaGFuZHMgb2ZmIHRvIHRoZSBtYWluKCkgZnVuY3Rpb24uCisgKi8KK2ludCB3bWFpbihpbnQgYXJnYywgY29uc3Qgd2NoYXJfdCAqKndfYXJndik7CitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworCisvKgorICogRm9yIGRlYnVnZ2luZzogaWYgYSBwcm9ibGVtIG9jY3Vycywgc2F5LCBpbiBhIEdpdCBwcm9jZXNzIHRoYXQgaXMgc3Bhd25lZAorICogZnJvbSBhbm90aGVyIEdpdCBwcm9jZXNzIHdoaWNoIGluIHR1cm4gaXMgc3Bhd25lZCBmcm9tIHlldCBhbm90aGVyIEdpdAorICogcHJvY2VzcywgaXQgY2FuIGJlIHF1aXRlIGRhdW50aW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCBpcyBnb2luZyBvbi4KKyAqCisgKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gb3BlbiBhIG5ldyBNaW5UVFkgKHRoaXMgYXNzdW1lcyB5b3UgYXJlIGluIEdpdCBmb3IKKyAqIFdpbmRvd3MnIFNESykgd2l0aCBhIEdEQiB0aGF0IGF0dGFjaGVzIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MgcmlnaHQgYXdheS4KKyAqLworZXh0ZXJuIHZvaWQgb3Blbl9pbl9nZGIodm9pZCk7CisKKy8qCisgKiBVc2VkIGJ5IFB0aHJlYWQgQVBJIGltcGxlbWVudGF0aW9uIGZvciBXaW5kb3dzCisgKi8KK2ludCBlcnJfd2luX3RvX3Bvc2l4KERXT1JEIHdpbmVycik7CmRpZmYgLS1naXQgYS9jb21wYXQvbWtkaXIuYyBiL2NvbXBhdC9ta2Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMjUzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbWtkaXIuYwpAQCAtMCwwICsxLDI0IEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisjdW5kZWYgbWtkaXIKKworLyogZm9yIHBsYXRmb3JtcyB0aGF0IGNhbid0IGRlYWwgd2l0aCBhIHRyYWlsaW5nICcvJyAqLworaW50IGNvbXBhdF9ta2Rpcl93b190cmFpbGluZ19zbGFzaChjb25zdCBjaGFyICpkaXIsIG1vZGVfdCBtb2RlKQoreworCWludCByZXR2YWw7CisJY2hhciAqdG1wX2RpciA9IE5VTEw7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihkaXIpOworCisJaWYgKGxlbiAmJiBkaXJbbGVuLTFdID09ICcvJykgeworCQlpZiAoKHRtcF9kaXIgPSBzdHJkdXAoZGlyKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKwkJdG1wX2RpcltsZW4tMV0gPSAnXDAnOworCX0KKwllbHNlCisJCXRtcF9kaXIgPSAoY2hhciAqKWRpcjsKKworCXJldHZhbCA9IG1rZGlyKHRtcF9kaXIsIG1vZGUpOworCWlmICh0bXBfZGlyICE9IGRpcikKKwkJZnJlZSh0bXBfZGlyKTsKKworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvbWtkdGVtcC5jIGIvY29tcGF0L21rZHRlbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTM2MTE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L21rZHRlbXAuYwpAQCAtMCwwICsxLDggQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworY2hhciAqZ2l0bWtkdGVtcChjaGFyICp0ZW1wbGF0ZSkKK3sKKwlpZiAoISpta3RlbXAodGVtcGxhdGUpIHx8IG1rZGlyKHRlbXBsYXRlLCAwNzAwKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHRlbXBsYXRlOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L21tYXAuYyBiL2NvbXBhdC9tbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkMzEwMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9tbWFwLmMKQEAgLTAsMCArMSw0MCBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCit2b2lkICpnaXRfbW1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCwgaW50IHByb3QsIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpCit7CisJc2l6ZV90IG4gPSAwOworCisJaWYgKHN0YXJ0ICE9IE5VTEwgfHwgZmxhZ3MgIT0gTUFQX1BSSVZBVEUgfHwgcHJvdCAhPSBQUk9UX1JFQUQpCisJCWRpZSgiSW52YWxpZCB1c2FnZSBvZiBtbWFwIHdoZW4gYnVpbHQgd2l0aCBOT19NTUFQIik7CisKKwlzdGFydCA9IHhtYWxsb2MobGVuZ3RoKTsKKwlpZiAoc3RhcnQgPT0gTlVMTCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuIE1BUF9GQUlMRUQ7CisJfQorCisJd2hpbGUgKG4gPCBsZW5ndGgpIHsKKwkJc3NpemVfdCBjb3VudCA9IHhwcmVhZChmZCwgKGNoYXIgKilzdGFydCArIG4sIGxlbmd0aCAtIG4sIG9mZnNldCArIG4pOworCisJCWlmIChjb3VudCA9PSAwKSB7CisJCQltZW1zZXQoKGNoYXIgKilzdGFydCtuLCAwLCBsZW5ndGgtbik7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChjb3VudCA8IDApIHsKKwkJCWZyZWUoc3RhcnQpOworCQkJZXJybm8gPSBFQUNDRVM7CisJCQlyZXR1cm4gTUFQX0ZBSUxFRDsKKwkJfQorCisJCW4gKz0gY291bnQ7CisJfQorCisJcmV0dXJuIHN0YXJ0OworfQorCitpbnQgZ2l0X211bm1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCkKK3sKKwlmcmVlKHN0YXJ0KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9tc3ZjLmMgYi9jb21wYXQvbXN2Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxODQzZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbXN2Yy5jCkBAIC0wLDAgKzEsNiBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgIndpbjMyLmgiCisjaW5jbHVkZSA8Y29uaW8uaD4KKyNpbmNsdWRlICIuLi9zdHJidWYuaCIKKworI2luY2x1ZGUgIm1pbmd3LmMiCmRpZmYgLS1naXQgYS9jb21wYXQvbXN2Yy5oIGIvY29tcGF0L21zdmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDdhOGM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L21zdmMuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIF9fTVNWQ19fSEVBRAorI2RlZmluZSBfX01TVkNfX0hFQUQKKworI2luY2x1ZGUgPGRpcmVjdC5oPgorI2luY2x1ZGUgPHByb2Nlc3MuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxpby5oPgorCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDAxOCkgLyogc2lnbmVkL3Vuc2lnbmVkIGNvbXBhcmlzb24gKi8KKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjQ0KSAvKiB0eXBlIGNvbnZlcnNpb24sIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YSAqLworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwOTApIC8qICdmdW5jdGlvbicgOiBkaWZmZXJlbnQgJ2NvbnN0JyBxdWFsaWZpZXJzIChBTExPQ19HUk9XIGV0Yy4pKi8KKworLyogcG9ydGluZyBmdW5jdGlvbiAqLworI2RlZmluZSBpbmxpbmUgX19pbmxpbmUKKyNkZWZpbmUgX19pbmxpbmVfXyBfX2lubGluZQorI2RlZmluZSBfX2F0dHJpYnV0ZV9fKHgpCisjZGVmaW5lIHN0cmNhc2VjbXAgICBfc3RyaWNtcAorI2RlZmluZSBzdHJuY2FzZWNtcCAgX3N0cm5pY21wCisjZGVmaW5lIGZ0cnVuY2F0ZSAgICBfY2hzaXplCisjZGVmaW5lIHN0cnRvdWxsICAgICBfc3RydG91aTY0CisjZGVmaW5lIHN0cnRvbGwgICAgICBfc3RydG9pNjQKKworI3VuZGVmIEVSUk9SCisKKyNkZWZpbmUgZnRlbGxvIF9mdGVsbGk2NAorCit0eXBlZGVmIGludCBzaWdzZXRfdDsKKy8qIG9wZW4gZm9yIHJlYWRpbmcsIHdyaXRpbmcsIG9yIGJvdGggKG5vdCBpbiBmY250bC5oKSAqLworI2RlZmluZSBPX0FDQ01PREUgICAgIChfT19SRE9OTFkgfCBfT19XUk9OTFkgfCBfT19SRFdSKQorCisjaW5jbHVkZSAiY29tcGF0L21pbmd3LmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L25lZG1hbGxvYy9MaWNlbnNlLnR4dCBiL2NvbXBhdC9uZWRtYWxsb2MvTGljZW5zZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiN2NkOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9uZWRtYWxsb2MvTGljZW5zZS50eHQKQEAgLTAsMCArMSwyMyBAQAorQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieQordGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCitleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KK2RvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgorCitUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwordGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKK211c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQord29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CithIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKK0ZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL1JlYWRtZS50eHQgYi9jb21wYXQvbmVkbWFsbG9jL1JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjYmY1MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9uZWRtYWxsb2MvUmVhZG1lLnR4dApAQCAtMCwwICsxLDEzNiBAQAorbmVkYWxsb2MgdjEuMDUgMTV0aCBKdW5lIDIwMDg6CistPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0KKworYnkgTmlhbGwgRG91Z2xhcyAoaHR0cDovL3d3dy5uZWRwcm9kLmNvbS9wcm9ncmFtcy9wb3J0YWJsZS9uZWRtYWxsb2MvKQorCitFbmNsb3NlZCBpcyBuZWRhbGxvYywgYW4gYWx0ZXJuYXRpdmUgbWFsbG9jIGltcGxlbWVudGF0aW9uIGZvciBtdWx0aXBsZQordGhyZWFkcyB3aXRob3V0IGxvY2sgY29udGVudGlvbiBiYXNlZCBvbiBkbG1hbGxvYyB2Mi44LjQuIEl0IGlzIG1vcmUKK29yIGxlc3MgYSBuZXdlciBpbXBsZW1lbnRhdGlvbiBvZiBwdG1hbGxvYzIsIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IgaW4KK0xpbnV4ICh3aGljaCBpcyBiYXNlZCBvbiBkbG1hbGxvYyB2Mi43LjApIGJ1dCBhbHNvIGNvbnRhaW5zIGEgcGVyLXRocmVhZAorY2FjaGUgZm9yIG1heGltdW0gQ1BVIHNjYWxhYmlsaXR5LgorCitJdCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSB3aGljaCBiYXNpY2FsbHkgbWVhbnMKK3lvdSBjYW4gZG8gYW55dGhpbmcgeW91IGxpa2Ugd2l0aCBpdC4gVGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgbWFsbG9jLmMuaAorZmlsZSB3aGljaCByZW1haW5zIGNvcHlyaWdodCB0byBvdGhlcnMuCisKK0l0IGhhcyBiZWVuIHRlc3RlZCBvbiB3aW4zMiAoeDg2KSwgd2luNjQgKHg2NCksIExpbnV4ICh4NjQpLCBGcmVlQlNEICh4NjQpCithbmQgQXBwbGUgTWFjT1MgWCAoeDg2KS4gSXQgd29ya3MgdmVyeSB3ZWxsIG9uIGFsbCBvZiB0aGVzZSBhbmQgaXMgdmVyeQorc2lnbmlmaWNhbnRseSBmYXN0ZXIgdGhhbiB0aGUgc3lzdGVtIGFsbG9jYXRvciBvbiBhbGwgb2YgdGhlc2UgcGxhdGZvcm1zLgorCitCeSBsaXRlcmFsbHkgZHJvcHBpbmcgaW4gdGhpcyBhbGxvY2F0b3IgYXMgYSByZXBsYWNlbWVudCBmb3IgeW91ciBzeXN0ZW0KK2FsbG9jYXRvciwgeW91IGNhbiBzZWUgcmVhbCB3b3JsZCBpbXByb3ZlbWVudHMgb2YgdXAgdG8gdGhyZWUgdGltZXMgaW4gbm9ybWFsCitjb2RlIQorCitUbyB1c2U6CistPS09LT0tCitEcm9wIGluIG5lZG1hbGxvYy5oLCBuZWRtYWxsb2MuYyBhbmQgbWFsbG9jLmMuaCBpbnRvIHlvdXIgcHJvamVjdC4KK0NvbmZpZ3VyZSB1c2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGluIG5lZG1hbGxvYy5oLiBSdW4gYW5kIGVuam95LgorCitUbyB0ZXN0LCBjb21waWxlIHRlc3QuYy4gSXQgd2lsbCBydW4gYSBjb21wYXJpc29uIGJldHdlZW4geW91ciBzeXN0ZW0KK2FsbG9jYXRvciBhbmQgbmVkYWxsb2MgYW5kIHRlbGwgeW91IGhvdyBtdWNoIGZhc3RlciBuZWRhbGxvYyBpcy4gSXQgYWxzbworc2VydmVzIGFzIGFuIGV4YW1wbGUgb2YgdXNhZ2UuCisKK05vdGVzOgorLT0tPS09CitJZiB5b3Ugd2FudCB0aGUgdmVyeSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGFsbG9jYXRvciwgZ2V0IGl0IGZyb20gdGhlCitUbkZPWCBTVk4gcmVwb3NpdG9yeSBhdCBzdm46Ly9zdm4uYmVybGlvcy5kZS92aWV3Y3ZzL3RuZm94L3RydW5rL3NyYy9uZWRtYWxsb2MKKworQmVjYXVzZSBvZiBob3cgbmVkYWxsb2MgYWxsb2NhdGVzIGFuIG1zcGFjZSBwZXIgdGhyZWFkLCBpdCBjYW4gY2F1c2UKK3NldmVyZSBibG9hdGluZyBvZiBtZW1vcnkgdXNhZ2UgdW5kZXIgY2VydGFpbiBhbGxvY2F0aW9uIHBhdHRlcm5zLgorWW91IGNhbiBzdWJzdGFudGlhbGx5IHJlZHVjZSB0aGlzIHdhc3RhZ2UgYnkgc2V0dGluZyBNQVhUSFJFQURTSU5QT09MCitvciB0aGUgdGhyZWFkcyBwYXJhbWV0ZXIgdG8gbmVkY3JlYXRlcG9vbCgpIHRvIGEgZnJhY3Rpb24gb2YgdGhlIG51bWJlciBvZgordGhyZWFkcyB3aGljaCB3b3VsZCBub3JtYWxseSBiZSBpbiBhIHBvb2wgYXQgb25jZS4gVGhpcyB3aWxsIHJlZHVjZQorYmxvYXRpbmcgYXQgdGhlIGNvc3Qgb2YgYW4gaW5jcmVhc2UgaW4gbG9jayBjb250ZW50aW9uLiBJZiBhbGxvY2F0ZWQgc2l6ZQoraXMgbGVzcyB0aGFuIFRIUkVBRENBQ0hFTUFYLCBsb2NraW5nIGlzIGF2b2lkZWQgOTAtOTklIG9mIHRoZSB0aW1lIGFuZAoraWYgbW9zdCBvZiB5b3VyIGFsbG9jYXRpb25zIGFyZSBiZWxvdyB0aGlzIHZhbHVlLCB5b3UgY2FuIHNhZmVseSBzZXQKK01BWFRIUkVBRFNJTlBPT0wgdG8gb25lLgorCitZb3Ugd2lsbCBzdWZmZXIgbWVtb3J5IGxlYWthZ2UgdW5sZXNzIHlvdSBjYWxsIG5lZGRpc2FibGV0aHJlYWRjYWNoZSgpCitwZXIgcG9vbCBmb3IgZXZlcnkgdGhyZWFkIHdoaWNoIGV4aXRzLiBUaGlzIGlzIGJlY2F1c2UgbmVkYWxsb2MgY2Fubm90Citwb3J0YWJseSBrbm93IHdoZW4gYSB0aHJlYWQgZXhpdHMgYW5kIHRodXMgd2hlbiBpdHMgdGhyZWFkIGNhY2hlIGNhbgorYmUgcmV0dXJuZWQgZm9yIHVzZSBieSBvdGhlciBjb2RlLiBEb24ndCBmb3JnZXQgcG9vbCB6ZXJvLCB0aGUgc3lzdGVtIHBvb2wuCisKK0ZvciBDKysgdHlwZSBhbGxvY2F0aW9uIHBhdHRlcm5zICh3aGVyZSB0aGUgc2FtZSBzaXplcyBvZiBtZW1vcnkgYXJlCityZWd1bGFybHkgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZCBhcyBvYmplY3RzIGFyZSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQpLAordGhlIHRocmVhZGNhY2hlIGFsd2F5cyBiZW5lZml0cyBwZXJmb3JtYW5jZS4gSWYgaG93ZXZlciB5b3VyIGFsbG9jYXRpb24KK3BhdHRlcm5zIGFyZSBkaWZmZXJlbnQsIHNlYXJjaGluZyB0aGUgdGhyZWFkY2FjaGUgbWF5IHNpZ25pZmljYW50bHkgc2xvdworZG93biB5b3VyIGNvZGUgLSBhcyBhIHJ1bGUgb2YgdGh1bWIsIGlmIGNhY2hlIHV0aWxpc2F0aW9uIGlzIGJlbG93IDgwJQorKHNlZSB0aGUgc291cmNlIGZvciBuZWRkaXNhYmxldGhyZWFkY2FjaGUoKSBmb3IgaG93IHRvIGVuYWJsZSBkZWJ1ZworcHJpbnRpbmcgaW4gcmVsZWFzZSBtb2RlKSB0aGVuIHlvdSBzaG91bGQgZGlzYWJsZSB0aGUgdGhyZWFkIGNhY2hlIGZvcgordGhhdCB0aHJlYWQuIFlvdSBjYW4gY29tcGlsZSBvdXQgdGhlIHRocmVhZGNhY2hlIGNvZGUgYnkgc2V0dGluZworVEhSRUFEQ0FDSEVNQVggdG8gemVyby4KKworU3BlZWQgY29tcGFyaXNvbnM6CistPS09LT0tPS09LT0tPS09LT0KK1NlZSBCZW5jaG1hcmtzLnhscyBmb3IgZGV0YWlscy4KKworVGhlIGVuY2xvc2VkIHRlc3QuYyBjYW4gZG8gdHdvIHRoaW5nczogaXQgY2FuIGJlIGEgdG9ydHVyZSB0ZXN0IG9yIGEgc3BlZWQKK3Rlc3QuIFRoZSBzcGVlZCB0ZXN0IGlzIGRlc2lnbmVkIHRvIGJlIGEgcmVwcmVzZW50YXRpdmUgc3ludGhldGljCittZW1vcnkgYWxsb2NhdG9yIHRlc3QuIEl0IHdvcmtzIGJ5IHJhbmRvbWx5IG1peGluZyBhbGxvY2F0aW9ucyB3aXRoIGZyZWVzCit3aXRoIGhhbGYgb2YgdGhlIGFsbG9jYXRpb24gc2l6ZXMgYmVpbmcgYSB0d28gcG93ZXIgbXVsdGlwbGUgbGVzcyB0aGFuCis1MTIgYnl0ZXMgKHRvIG1pbWljIEMrKyBzdGFjayBpbnN0YW50aWF0ZWQgb2JqZWN0cykgYW5kIHRoZSBvdGhlciBoYWxmCitiZWluZyBhIHNpbXBsZSByYW5kb20gdmFsdWUgbGVzcyB0aGFuIDE2S2IuCisKK1RoZSByZWFsIHdvcmxkIGNvZGUgcmVzdWx0cyBhcmUgZnJvbSBUbidzIFRlc3RJTyBiZW5jaG1hcmsuIFRoaXMgaXMgYQoraGVhdmlseSBtdWx0aXRocmVhZGVkIGFuZCBtZW1vcnkgaW50ZW5zaXZlIGJlbmNobWFyayB3aXRoIGEgbG90IG9mIGJyYW5jaGluZworYW5kIG90aGVyIHN0dWZmIG1vZGVybiBwcm9jZXNzb3JzIGRvbid0IGxpa2Ugc28gbXVjaC4gQXMgeW91J2xsIG5vdGUsIHRoZQordGVzdCBkb2Vzbid0IHNob3cgdGhlIGJlbmVmaXRzIG9mIHRoZSB0aHJlYWRjYWNoZSBtb3N0bHkgZHVlIHRvIHRoZSBzYXR1cmF0aW9uCitvZiB0aGUgbWVtb3J5IGJ1cyBiZWluZyB0aGUgbGltaXRpbmcgZmFjdG9yLgorCitDaGFuZ2VMb2c6CistPS09LT0tPS09Cit2MS4wNSAxNXRoIEp1bmUgMjAwODoKKyAqIHsgMTA0MiB9IEFkZGVkIGVycm9yIGNoZWNrIGZvciBUTFNTRVQoKSBhbmQgVExTRlJFRSgpIG1hY3Jvcy4gVGhhbmtzIHRvCitNYXJrdXMgRWxmcmluZyBmb3IgcmVwb3J0aW5nIHRoaXMuCisgKiB7IDEwNDMgfSBGaXhlZCBhIHNlZ2ZhdWx0IHdoZW4gZnJlZWluZyBtZW1vcnkgYWxsb2NhdGVkIHVzaW5nCituZWRpbmRlcGVuZGVudF9jb21hbGxvYygpLiBUaGFua3MgdG8gUGF2ZWwgVm96ZW5pbGVrIGZvciByZXBvcnRpbmcgdGhpcy4KKwordjEuMDQgMTR0aCBKdWx5IDIwMDc6CisgKiBGaXhlZCBhIGJ1ZyB3aXRoIHRoZSBuZXcgb3B0aW1pc2VkIGltcGxlbWVudGF0aW9uIHRoYXQgZmFpbGVkIHRvIGxvY2sKK29uIGEgcmVhbGxvYyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuCisgKiBGaXhlZCBsYWNrIG9mIHRocmVhZCBzeW5jaHJvbmlzYXRpb24gaW4gSW5pdFBvb2woKSBjYXVzaW5nIHBvb2wgY29ycnVwdGlvbgorICogRml4ZWQgYSBtZW1vcnkgbGVhayBvZiB0aHJlYWQgY2FjaGUgY29udGVudHMgb24gZGlzYWJsaW5nLiBUaGFua3MgdG8gRWFybAorQ2hldyBmb3IgcmVwb3J0aW5nIHRoaXMuCisgKiBBZGRlZCBhIHNhbml0eSBjaGVjayBmb3IgZnJlZWQgYmxvY2tzIGJlaW5nIHZhbGlkLgorICogUmV3b3JrZWQgdGVzdC5jIGludG8gYmVpbmcgYSB0b3J0dXJlIHRlc3QuCisgKiBGaXhlZCBHQ0MgYXNzZW1ibGVyIG9wdGltaXNhdGlvbiBtaXNzcGVjaWZpY2F0aW9uCisKK3YxLjA0YWxwaGFfc3ZuOTE1IDd0aCBPY3RvYmVyIDIwMDY6CisgKiBGaXhlZCBmYWlsdXJlIHRvIHVubG9jayB0aHJlYWQgY2FjaGUgbGlzdCBpZiBhbGxvY2F0aW5nIGEgbmV3IGxpc3QgZmFpbGVkLgorVGhhbmtzIHRvIERtaXRyeSBDaGljaGtvdiBmb3IgcmVwb3J0aW5nIHRoaXMuIEZ1cnRoZXIgdGhhbmtzIHRvIEFsZWtzZXkgU2FuaW4uCisgKiBGaXhlZCByZWFsbG9jKDAsIDxzaXplPikgc2VnZmF1bHRpbmcuIFRoYW5rcyB0byBEbWl0cnkgQ2hpY2hrb3YgZm9yCityZXBvcnRpbmcgdGhpcy4KKyAqIE1hZGUgY29uZmlnIGRlZmluZXMgI2lmbmRlZiBzbyB0aGV5IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCitUaGFua3MgdG8gQWxla3NleSBTYW5pbiBmb3Igc3VnZ2VzdGluZyB0aGlzLgorICogRml4ZWQgZGVhZGxvY2sgaW4gbmVkcHJlYWxsb2MoKSBkdWUgdG8gdW5uZWNlc3NhcnkgbG9ja2luZyBvZiBwcmVmZXJyZWQKK3RocmVhZCBtc3BhY2Ugd2hlbiBtc3BhY2VfcmVhbGxvYygpIGFsd2F5cyB1c2VzIHRoZSBvcmlnaW5hbCBibG9jaydzIG1zcGFjZQorYW55d2F5LiBUaGFua3MgdG8gQWxla3NleSBTYW5pbiBmb3IgcmVwb3J0aW5nIHRoaXMuCisgKiBNYWRlIHNvbWUgc3BlZWQgaW1wcm92ZW1lbnRzIGJ5IGhhY2tpbmcgbXNwYWNlX21hbGxvYygpIHRvIG5vIGxvbmdlciBsb2NrCitpdHMgbXNwYWNlLCB0aHVzIGFsbG93aW5nIHRoZSByZWN1cnNpdmUgbXV0ZXggaW1wbGVtZW50YXRpb24gdG8gYmUgcmVtb3ZlZAord2l0aCBhbiBhc3NvY2lhdGVkIHNwZWVkIGluY3JlYXNlLiBUaGFua3MgdG8gQWxla3NleSBTYW5pbiBmb3Igc3VnZ2VzdGluZyB0aGlzLgorICogRml4ZWQgYSBidWcgd2hlcmUgYWxsb2NhdGluZyBtc3BhY2VzIG92ZXJyYW4gaXRzIG1heCBsaW1pdC4gVGhhbmtzIHRvCitBbGVrc2V5IFNhbmluIGZvciByZXBvcnRpbmcgdGhpcy4KKwordjEuMDMgMTB0aCBKdWx5IDIwMDY6CisgKiBGaXhlZCBtZW1vcnkgY29ycnVwdGlvbiBidWcgaW4gdGhyZWFkY2FjaGUgY29kZSB3aGljaCBvbmx5IGFwcGVhcmVkIHdpdGggPjQKK3RocmVhZHMgYW5kIGluIGhlYXZ5IHVzZSBvZiB0aGUgdGhyZWFkY2FjaGUuCisKK3YxLjAyIDE1dGggTWF5IDIwMDY6CisgKiBJbnRlZ3JhdGVkIGRsbWFsbG9jIHYyLjguNCwgZml4aW5nIHRoZSB3aW4zMiBtZW1vcnkgcmVsZWFzZSBwcm9ibGVtIGFuZAoraW1wcm92aW5nIHBlcmZvcm1hbmNlIHN0aWxsIGZ1cnRoZXIuIFNwZWVkIGlzIG5vdyB1cCB0byB0d2ljZSB0aGUgc3BlZWQgb2YgdjEuMDEKKyhhdmVyYWdlIGlzIDY3JSBmYXN0ZXIpLgorICogRml4ZWQgd2luMzIgY3JpdGljYWwgc2VjdGlvbiBpbXBsZW1lbnRhdGlvbi4gVGhhbmtzIHRvIFBhdmVsIEt1em5ldHNvdgorZm9yIHJlcG9ydGluZyB0aGlzLgorICogV2Fzbid0IGxvY2tpbmcgbXNwYWNlIGlmIGFsbCBtc3BhY2VzIHdlcmUgbG9ja2VkLiBUaGFua3MgdG8gUGF2ZWwgS3V6bmV0c292Citmb3IgcmVwb3J0aW5nIHRoaXMuCisgKiBBZGRlZCBBcHBsZSBNYWMgT1MgWCBzdXBwb3J0LgorCit2MS4wMSAyNHRoIEZlYnJ1YXJ5IDIwMDY6CisgKiBGaXhlZCBtdWx0aXByb2Nlc3NvciBzY2FsaW5nIHByb2JsZW1zIGJ5IHJlbW92aW5nIHNvdXJjZXMgb2YgY2FjaGUgc2xvc2hpbmcKKyAqIEVhcmwgQ2hldyA8ZWFybF9jaGV3IDxhdD4gYWdpbGVudCA8ZG90PiBjb20+IHNlbnQgcGF0Y2hlcyBmb3IgdGhlIGZvbGxvd2luZzoKKyAgIDEuIHNpemUyYmluaWR4KCkgd2Fzbid0IHdvcmtpbmcgZm9yIGRlZmF1bHQgY29kZSBwYXRoIChub24geDg2KQorICAgMi4gRml4ZWQgZmFpbHVyZSB0byByZWxlYXNlIG1zcGFjZSBsb2NrIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB3aGljaAorICAgICAgY2F1c2VkIGEgZGVhZGxvY2sKKwordjEuMDAgMXN0IEphbnVhcnkgMjAwNjoKKyAqIEZpcnN0IHJlbGVhc2UKZGlmZiAtLWdpdCBhL2NvbXBhdC9uZWRtYWxsb2MvbWFsbG9jLmMuaCBiL2NvbXBhdC9uZWRtYWxsb2MvbWFsbG9jLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTQ4NDVkCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9tYWxsb2MuYy5oCkBAIC0wLDAgKzEsNTc2MSBAQAorLyoKKyAgVGhpcyBpcyBhIHZlcnNpb24gKGFrYSBkbG1hbGxvYykgb2YgbWFsbG9jL2ZyZWUvcmVhbGxvYyB3cml0dGVuIGJ5CisgIERvdWcgTGVhIGFuZCByZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbiwgYXMgZXhwbGFpbmVkIGF0CisgIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL3B1YmxpY2RvbWFpbi4gIFNlbmQgcXVlc3Rpb25zLAorICBjb21tZW50cywgY29tcGxhaW50cywgcGVyZm9ybWFuY2UgZGF0YSwgZXRjIHRvIGRsQGNzLm9zd2Vnby5lZHUKKworKiBWZXJzaW9uIHByZS0yLjguNCBNb24gTm92IDI3IDExOjIyOjM3IDIwMDYgICAgKGRsIGF0IGdlZSkKKworICAgTm90ZTogVGhlcmUgbWF5IGJlIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGlzIG1hbGxvYyBvYnRhaW5hYmxlIGF0CisJICAgZnRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLmMKKwkgQ2hlY2sgYmVmb3JlIGluc3RhbGxpbmchCisKKyogUXVpY2tzdGFydAorCisgIFRoaXMgbGlicmFyeSBpcyBhbGwgaW4gb25lIGZpbGUgdG8gc2ltcGxpZnkgdGhlIG1vc3QgY29tbW9uIHVzYWdlOgorICBmdHAgaXQsIGNvbXBpbGUgaXQgKC1PMyksIGFuZCBsaW5rIGl0IGludG8gYW5vdGhlciBwcm9ncmFtLiBBbGwgb2YKKyAgdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zIGRlZmF1bHQgdG8gcmVhc29uYWJsZSB2YWx1ZXMgZm9yIHVzZSBvbgorICBtb3N0IHBsYXRmb3Jtcy4gIFlvdSBtaWdodCBsYXRlciB3YW50IHRvIHN0ZXAgdGhyb3VnaCB2YXJpb3VzCisgIGNvbXBpbGUtdGltZSBhbmQgZHluYW1pYyB0dW5pbmcgb3B0aW9ucy4KKworICBGb3IgY29udmVuaWVuY2UsIGFuIGluY2x1ZGUgZmlsZSBmb3IgY29kZSB1c2luZyB0aGlzIG1hbGxvYyBpcyBhdDoKKyAgICAgZnRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLTIuOC40LmgKKyAgWW91IGRvbid0IHJlYWxseSBuZWVkIHRoaXMgLmggZmlsZSB1bmxlc3MgeW91IGNhbGwgZnVuY3Rpb25zIG5vdAorICBkZWZpbmVkIGluIHlvdXIgc3lzdGVtIGluY2x1ZGUgZmlsZXMuICBUaGUgLmggZmlsZSBjb250YWlucyBvbmx5IHRoZQorICBleGNlcnB0cyBmcm9tIHRoaXMgZmlsZSBuZWVkZWQgZm9yIHVzaW5nIHRoaXMgbWFsbG9jIG9uIEFOU0kgQy9DKysKKyAgc3lzdGVtcywgc28gbG9uZyBhcyB5b3UgaGF2ZW4ndCBjaGFuZ2VkIGNvbXBpbGUtdGltZSBvcHRpb25zIGFib3V0CisgIG5hbWluZyBhbmQgdHVuaW5nIHBhcmFtZXRlcnMuICBJZiB5b3UgZG8sIHRoZW4geW91IGNhbiBjcmVhdGUgeW91cgorICBvd24gbWFsbG9jLmggdGhhdCBkb2VzIGluY2x1ZGUgYWxsIHNldHRpbmdzIGJ5IGN1dHRpbmcgYXQgdGhlIHBvaW50CisgIGluZGljYXRlZCBiZWxvdy4gTm90ZSB0aGF0IHlvdSBtYXkgYWxyZWFkeSBieSBkZWZhdWx0IGJlIHVzaW5nIGEgQworICBsaWJyYXJ5IGNvbnRhaW5pbmcgYSBtYWxsb2MgdGhhdCBpcyBiYXNlZCBvbiBzb21lIHZlcnNpb24gb2YgdGhpcworICBtYWxsb2MgKGZvciBleGFtcGxlIGluIGxpbnV4KS4gWW91IG1pZ2h0IHN0aWxsIHdhbnQgdG8gdXNlIHRoZSBvbmUKKyAgaW4gdGhpcyBmaWxlIHRvIGN1c3RvbWl6ZSBzZXR0aW5ncyBvciB0byBhdm9pZCBvdmVyaGVhZHMgYXNzb2NpYXRlZAorICB3aXRoIGxpYnJhcnkgdmVyc2lvbnMuCisKKyogVml0YWwgc3RhdGlzdGljczoKKworICBTdXBwb3J0ZWQgcG9pbnRlci9zaXplX3QgcmVwcmVzZW50YXRpb246ICAgICAgIDQgb3IgOCBieXRlcworICAgICAgIHNpemVfdCBNVVNUIGJlIGFuIHVuc2lnbmVkIHR5cGUgb2YgdGhlIHNhbWUgd2lkdGggYXMKKyAgICAgICBwb2ludGVycy4gKElmIHlvdSBhcmUgdXNpbmcgYW4gYW5jaWVudCBzeXN0ZW0gdGhhdCBkZWNsYXJlcworICAgICAgIHNpemVfdCBhcyBhIHNpZ25lZCB0eXBlLCBvciBuZWVkIGl0IHRvIGJlIGEgZGlmZmVyZW50IHdpZHRoCisgICAgICAgdGhhbiBwb2ludGVycywgeW91IGNhbiB1c2UgYSBwcmV2aW91cyByZWxlYXNlIG9mIHRoaXMgbWFsbG9jCisgICAgICAgKGUuZy4gMi43LjIpIHN1cHBvcnRpbmcgdGhlc2UuKQorCisgIEFsaWdubWVudDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCBieXRlcyAoZGVmYXVsdCkKKyAgICAgICBUaGlzIHN1ZmZpY2VzIGZvciBuZWFybHkgYWxsIGN1cnJlbnQgbWFjaGluZXMgYW5kIEMgY29tcGlsZXJzLgorICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgdG8gYmUgd2lkZXIgdGhhbiB0aGlzCisgICAgICAgaWYgbmVjZXNzYXJ5ICh1cCB0byAxMjhieXRlcyksIGF0IHRoZSBleHBlbnNlIG9mIHVzaW5nIG1vcmUgc3BhY2UuCisKKyAgTWluaW11bSBvdmVyaGVhZCBwZXIgYWxsb2NhdGVkIGNodW5rOiAgIDQgb3IgIDggYnl0ZXMgKGlmIDRieXRlIHNpemVzKQorCQkJCQkgIDggb3IgMTYgYnl0ZXMgKGlmIDhieXRlIHNpemVzKQorICAgICAgIEVhY2ggbWFsbG9jZWQgY2h1bmsgaGFzIGEgaGlkZGVuIHdvcmQgb2Ygb3ZlcmhlYWQgaG9sZGluZyBzaXplCisgICAgICAgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbiwgYW5kIGFkZGl0aW9uYWwgY3Jvc3MtY2hlY2sgd29yZAorICAgICAgIGlmIEZPT1RFUlMgaXMgZGVmaW5lZC4KKworICBNaW5pbXVtIGFsbG9jYXRlZCBzaXplOiA0LWJ5dGUgcHRyczogIDE2IGJ5dGVzICAgIChpbmNsdWRpbmcgb3ZlcmhlYWQpCisJCQkgIDgtYnl0ZSBwdHJzOiAgMzIgYnl0ZXMgICAgKGluY2x1ZGluZyBvdmVyaGVhZCkKKworICAgICAgIEV2ZW4gYSByZXF1ZXN0IGZvciB6ZXJvIGJ5dGVzIChpLmUuLCBtYWxsb2MoMCkpIHJldHVybnMgYQorICAgICAgIHBvaW50ZXIgdG8gc29tZXRoaW5nIG9mIHRoZSBtaW5pbXVtIGFsbG9jYXRhYmxlIHNpemUuCisgICAgICAgVGhlIG1heGltdW0gb3ZlcmhlYWQgd2FzdGFnZSAoaS5lLiwgbnVtYmVyIG9mIGV4dHJhIGJ5dGVzCisgICAgICAgYWxsb2NhdGVkIHRoYW4gd2VyZSByZXF1ZXN0ZWQgaW4gbWFsbG9jKSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwKKyAgICAgICB0byB0aGUgbWluaW11bSBzaXplLCBleGNlcHQgZm9yIHJlcXVlc3RzID49IG1tYXBfdGhyZXNob2xkIHRoYXQKKyAgICAgICBhcmUgc2VydmljZWQgdmlhIG1tYXAoKSwgd2hlcmUgdGhlIHdvcnN0IGNhc2Ugd2FzdGFnZSBpcyBhYm91dAorICAgICAgIDMyIGJ5dGVzIHBsdXMgdGhlIHJlbWFpbmRlciBmcm9tIGEgc3lzdGVtIHBhZ2UgKHRoZSBtaW5pbWFsCisgICAgICAgbW1hcCB1bml0KTsgdHlwaWNhbGx5IDQwOTYgb3IgODE5MiBieXRlcy4KKworICBTZWN1cml0eTogc3RhdGljLXNhZmU7IG9wdGlvbmFsbHkgbW9yZSBvciBsZXNzCisgICAgICAgVGhlICJzZWN1cml0eSIgb2YgbWFsbG9jIHJlZmVycyB0byB0aGUgYWJpbGl0eSBvZiBtYWxpY2lvdXMKKyAgICAgICBjb2RlIHRvIGFjY2VudHVhdGUgdGhlIGVmZmVjdHMgb2YgZXJyb3JzIChmb3IgZXhhbXBsZSwgZnJlZWluZworICAgICAgIHNwYWNlIHRoYXQgaXMgbm90IGN1cnJlbnRseSBtYWxsb2MnZWQgb3Igb3ZlcndyaXRpbmcgcGFzdCB0aGUKKyAgICAgICBlbmRzIG9mIGNodW5rcykgaW4gY29kZSB0aGF0IGNhbGxzIG1hbGxvYy4gIFRoaXMgbWFsbG9jCisgICAgICAgZ3VhcmFudGVlcyBub3QgdG8gbW9kaWZ5IGFueSBtZW1vcnkgbG9jYXRpb25zIGJlbG93IHRoZSBiYXNlIG9mCisgICAgICAgaGVhcCwgaS5lLiwgc3RhdGljIHZhcmlhYmxlcywgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2YgdXNhZ2UKKyAgICAgICBlcnJvcnMuICBUaGUgcm91dGluZXMgYWRkaXRpb25hbGx5IGRldGVjdCBtb3N0IGltcHJvcGVyIGZyZWVzCisgICAgICAgYW5kIHJlYWxsb2NzLiAgQWxsIHRoaXMgaG9sZHMgYXMgbG9uZyBhcyB0aGUgc3RhdGljIGJvb2trZWVwaW5nCisgICAgICAgZm9yIG1hbGxvYyBpdHNlbGYgaXMgbm90IGNvcnJ1cHRlZCBieSBzb21lIG90aGVyIG1lYW5zLiAgVGhpcworICAgICAgIGlzIG9ubHkgb25lIGFzcGVjdCBvZiBzZWN1cml0eSAtLSB0aGVzZSBjaGVja3MgZG8gbm90LCBhbmQKKyAgICAgICBjYW5ub3QsIGRldGVjdCBhbGwgcG9zc2libGUgcHJvZ3JhbW1pbmcgZXJyb3JzLgorCisgICAgICAgSWYgRk9PVEVSUyBpcyBkZWZpbmVkIG5vbnplcm8sIHRoZW4gZWFjaCBhbGxvY2F0ZWQgY2h1bmsKKyAgICAgICBjYXJyaWVzIGFuIGFkZGl0aW9uYWwgY2hlY2sgd29yZCB0byB2ZXJpZnkgdGhhdCBpdCB3YXMgbWFsbG9jZWQKKyAgICAgICBmcm9tIGl0cyBzcGFjZS4gIFRoZXNlIGNoZWNrIHdvcmRzIGFyZSB0aGUgc2FtZSB3aXRoaW4gZWFjaAorICAgICAgIGV4ZWN1dGlvbiBvZiBhIHByb2dyYW0gdXNpbmcgbWFsbG9jLCBidXQgZGlmZmVyIGFjcm9zcworICAgICAgIGV4ZWN1dGlvbnMsIHNvIGV4dGVybmFsbHkgY3JhZnRlZCBmYWtlIGNodW5rcyBjYW5ub3QgYmUKKyAgICAgICBmcmVlZC4gVGhpcyBpbXByb3ZlcyBzZWN1cml0eSBieSByZWplY3RpbmcgZnJlZXMvcmVhbGxvY3MgdGhhdAorICAgICAgIGNvdWxkIGNvcnJ1cHQgaGVhcCBtZW1vcnksIGluIGFkZGl0aW9uIHRvIHRoZSBjaGVja3MgcHJldmVudGluZworICAgICAgIHdyaXRlcyB0byBzdGF0aWNzIHRoYXQgYXJlIGFsd2F5cyBvbi4gIFRoaXMgbWF5IGZ1cnRoZXIgaW1wcm92ZQorICAgICAgIHNlY3VyaXR5IGF0IHRoZSBleHBlbnNlIG9mIHRpbWUgYW5kIHNwYWNlIG92ZXJoZWFkLiAgKE5vdGUgdGhhdAorICAgICAgIEZPT1RFUlMgbWF5IGFsc28gYmUgd29ydGggdXNpbmcgd2l0aCBNU1BBQ0VTLikKKworICAgICAgIEJ5IGRlZmF1bHQgZGV0ZWN0ZWQgZXJyb3JzIGNhdXNlIHRoZSBwcm9ncmFtIHRvIGFib3J0IChjYWxsaW5nCisgICAgICAgImFib3J0KCkiKS4gWW91IGNhbiBvdmVycmlkZSB0aGlzIHRvIGluc3RlYWQgcHJvY2VlZCBwYXN0CisgICAgICAgZXJyb3JzIGJ5IGRlZmluaW5nIFBST0NFRURfT05fRVJST1IuICBJbiB0aGlzIGNhc2UsIGEgYmFkIGZyZWUKKyAgICAgICBoYXMgbm8gZWZmZWN0LCBhbmQgYSBtYWxsb2MgdGhhdCBlbmNvdW50ZXJzIGEgYmFkIGFkZHJlc3MKKyAgICAgICBjYXVzZWQgYnkgdXNlciBvdmVyd3JpdGVzIHdpbGwgaWdub3JlIHRoZSBiYWQgYWRkcmVzcyBieQorICAgICAgIGRyb3BwaW5nIHBvaW50ZXJzIGFuZCBpbmRpY2VzIHRvIGFsbCBrbm93biBtZW1vcnkuIFRoaXMgbWF5CisgICAgICAgYmUgYXBwcm9wcmlhdGUgZm9yIHByb2dyYW1zIHRoYXQgc2hvdWxkIGNvbnRpbnVlIGlmIGF0IGFsbAorICAgICAgIHBvc3NpYmxlIGluIHRoZSBmYWNlIG9mIHByb2dyYW1taW5nIGVycm9ycywgYWx0aG91Z2ggdGhleSBtYXkKKyAgICAgICBydW4gb3V0IG9mIG1lbW9yeSBiZWNhdXNlIGRyb3BwZWQgbWVtb3J5IGlzIG5ldmVyIHJlY2xhaW1lZC4KKworICAgICAgIElmIHlvdSBkb24ndCBsaWtlIGVpdGhlciBvZiB0aGVzZSBvcHRpb25zLCB5b3UgY2FuIGRlZmluZQorICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OIGFuZCBVU0FHRV9FUlJPUl9BQ1RJT04gdG8gZG8gYW55dGhpbmcKKyAgICAgICBlbHNlLiBBbmQgaWYgeW91IGFyZSBzdXJlIHRoYXQgeW91ciBwcm9ncmFtIHVzaW5nIG1hbGxvYyBoYXMKKyAgICAgICBubyBlcnJvcnMgb3IgdnVsbmVyYWJpbGl0aWVzLCB5b3UgY2FuIGRlZmluZSBJTlNFQ1VSRSB0byAxLAorICAgICAgIHdoaWNoIG1pZ2h0IChvciBtaWdodCBub3QpIHByb3ZpZGUgYSBzbWFsbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KKworICBUaHJlYWQtc2FmZXR5OiBOT1QgdGhyZWFkLXNhZmUgdW5sZXNzIFVTRV9MT0NLUyBkZWZpbmVkCisgICAgICAgV2hlbiBVU0VfTE9DS1MgaXMgZGVmaW5lZCwgZWFjaCBwdWJsaWMgY2FsbCB0byBtYWxsb2MsIGZyZWUsCisgICAgICAgZXRjIGlzIHN1cnJvdW5kZWQgd2l0aCBlaXRoZXIgYSBwdGhyZWFkIG11dGV4IG9yIGEgd2luMzIKKyAgICAgICBzcGlubG9jayAoZGVwZW5kaW5nIG9uIFdJTjMyKS4gVGhpcyBpcyBub3QgZXNwZWNpYWxseSBmYXN0LCBhbmQKKyAgICAgICBjYW4gYmUgYSBtYWpvciBib3R0bGVuZWNrLiAgSXQgaXMgZGVzaWduZWQgb25seSB0byBwcm92aWRlCisgICAgICAgbWluaW1hbCBwcm90ZWN0aW9uIGluIGNvbmN1cnJlbnQgZW52aXJvbm1lbnRzLCBhbmQgdG8gcHJvdmlkZSBhCisgICAgICAgYmFzaXMgZm9yIGV4dGVuc2lvbnMuICBJZiB5b3UgYXJlIHVzaW5nIG1hbGxvYyBpbiBhIGNvbmN1cnJlbnQKKyAgICAgICBwcm9ncmFtLCBjb25zaWRlciBpbnN0ZWFkIHVzaW5nIG5lZG1hbGxvYworICAgICAgIChodHRwOi8vd3d3Lm5lZHByb2QuY29tL3Byb2dyYW1zL3BvcnRhYmxlL25lZG1hbGxvYy8pIG9yCisgICAgICAgcHRtYWxsb2MgKFNlZSBodHRwOi8vd3d3Lm1hbGxvYy5kZSksIHdoaWNoIGFyZSBkZXJpdmVkCisgICAgICAgZnJvbSB2ZXJzaW9ucyBvZiB0aGlzIG1hbGxvYy4KKworICBTeXN0ZW0gcmVxdWlyZW1lbnRzOiBBbnkgY29tYmluYXRpb24gb2YgTU9SRUNPUkUgYW5kL29yIE1NQVAvTVVOTUFQCisgICAgICAgVGhpcyBtYWxsb2MgY2FuIHVzZSB1bml4IHNicmsgb3IgYW55IGVtdWxhdGlvbiAoaW52b2tlZCB1c2luZworICAgICAgIHRoZSBDQUxMX01PUkVDT1JFIG1hY3JvKSBhbmQvb3IgbW1hcC9tdW5tYXAgb3IgYW55IGVtdWxhdGlvbgorICAgICAgIChpbnZva2VkIHVzaW5nIENBTExfTU1BUC9DQUxMX01VTk1BUCkgdG8gZ2V0IGFuZCByZWxlYXNlIHN5c3RlbQorICAgICAgIG1lbW9yeS4gIE9uIG1vc3QgdW5peCBzeXN0ZW1zLCBpdCB0ZW5kcyB0byB3b3JrIGJlc3QgaWYgYm90aAorICAgICAgIE1PUkVDT1JFIGFuZCBNTUFQIGFyZSBlbmFibGVkLiAgT24gV2luMzIsIGl0IHVzZXMgZW11bGF0aW9ucworICAgICAgIGJhc2VkIG9uIFZpcnR1YWxBbGxvYy4gSXQgYWxzbyB1c2VzIGNvbW1vbiBDIGxpYnJhcnkgZnVuY3Rpb25zCisgICAgICAgbGlrZSBtZW1zZXQuCisKKyAgQ29tcGxpYW5jZTogSSBiZWxpZXZlIGl0IGlzIGNvbXBsaWFudCB3aXRoIHRoZSBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9uCisgICAgICAgKFNlZSBodHRwOi8vd3d3LnVuaXgub3JnKS4gQWxzbyBTVklEL1hQRywgQU5TSSBDLCBhbmQgcHJvYmFibHkKKyAgICAgICBvdGhlcnMgYXMgd2VsbC4KKworKiBPdmVydmlldyBvZiBhbGdvcml0aG1zCisKKyAgVGhpcyBpcyBub3QgdGhlIGZhc3Rlc3QsIG1vc3Qgc3BhY2UtY29uc2VydmluZywgbW9zdCBwb3J0YWJsZSwgb3IKKyAgbW9zdCB0dW5hYmxlIG1hbGxvYyBldmVyIHdyaXR0ZW4uIEhvd2V2ZXIgaXQgaXMgYW1vbmcgdGhlIGZhc3Rlc3QKKyAgd2hpbGUgYWxzbyBiZWluZyBhbW9uZyB0aGUgbW9zdCBzcGFjZS1jb25zZXJ2aW5nLCBwb3J0YWJsZSBhbmQKKyAgdHVuYWJsZS4gIENvbnNpc3RlbnQgYmFsYW5jZSBhY3Jvc3MgdGhlc2UgZmFjdG9ycyByZXN1bHRzIGluIGEgZ29vZAorICBnZW5lcmFsLXB1cnBvc2UgYWxsb2NhdG9yIGZvciBtYWxsb2MtaW50ZW5zaXZlIHByb2dyYW1zLgorCisgIEluIG1vc3Qgd2F5cywgdGhpcyBtYWxsb2MgaXMgYSBiZXN0LWZpdCBhbGxvY2F0b3IuIEdlbmVyYWxseSwgaXQKKyAgY2hvb3NlcyB0aGUgYmVzdC1maXR0aW5nIGV4aXN0aW5nIGNodW5rIGZvciBhIHJlcXVlc3QsIHdpdGggdGllcworICBicm9rZW4gaW4gYXBwcm94aW1hdGVseSBsZWFzdC1yZWNlbnRseS11c2VkIG9yZGVyLiAoVGhpcyBzdHJhdGVneQorICBub3JtYWxseSBtYWludGFpbnMgbG93IGZyYWdtZW50YXRpb24uKSBIb3dldmVyLCBmb3IgcmVxdWVzdHMgbGVzcworICB0aGFuIDI1NmJ5dGVzLCBpdCBkZXZpYXRlcyBmcm9tIGJlc3QtZml0IHdoZW4gdGhlcmUgaXMgbm90IGFuCisgIGV4YWN0bHkgZml0dGluZyBhdmFpbGFibGUgY2h1bmsgYnkgcHJlZmVycmluZyB0byB1c2Ugc3BhY2UgYWRqYWNlbnQKKyAgdG8gdGhhdCB1c2VkIGZvciB0aGUgcHJldmlvdXMgc21hbGwgcmVxdWVzdCwgYXMgd2VsbCBhcyBieSBicmVha2luZworICB0aWVzIGluIGFwcHJveGltYXRlbHkgbW9zdC1yZWNlbnRseS11c2VkIG9yZGVyLiAoVGhlc2UgZW5oYW5jZQorICBsb2NhbGl0eSBvZiBzZXJpZXMgb2Ygc21hbGwgYWxsb2NhdGlvbnMuKSAgQW5kIGZvciB2ZXJ5IGxhcmdlIHJlcXVlc3RzCisgICg+PSAyNTZLYiBieSBkZWZhdWx0KSwgaXQgcmVsaWVzIG9uIHN5c3RlbSBtZW1vcnkgbWFwcGluZworICBmYWNpbGl0aWVzLCBpZiBzdXBwb3J0ZWQuICAoVGhpcyBoZWxwcyBhdm9pZCBjYXJyeWluZyBhcm91bmQgYW5kCisgIHBvc3NpYmx5IGZyYWdtZW50aW5nIG1lbW9yeSB1c2VkIG9ubHkgZm9yIGxhcmdlIGNodW5rcy4pCisKKyAgQWxsIG9wZXJhdGlvbnMgKGV4Y2VwdCBtYWxsb2Nfc3RhdHMgYW5kIG1hbGxpbmZvKSBoYXZlIGV4ZWN1dGlvbgorICB0aW1lcyB0aGF0IGFyZSBib3VuZGVkIGJ5IGEgY29uc3RhbnQgZmFjdG9yIG9mIHRoZSBudW1iZXIgb2YgYml0cyBpbgorICBhIHNpemVfdCwgbm90IGNvdW50aW5nIGFueSBjbGVhcmluZyBpbiBjYWxsb2Mgb3IgY29weWluZyBpbiByZWFsbG9jLAorICBvciBhY3Rpb25zIHN1cnJvdW5kaW5nIE1PUkVDT1JFIGFuZCBNTUFQIHRoYXQgaGF2ZSB0aW1lcworICBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBub24tY29udGlndW91cyByZWdpb25zIHJldHVybmVkIGJ5CisgIHN5c3RlbSBhbGxvY2F0aW9uIHJvdXRpbmVzLCB3aGljaCBpcyBvZnRlbiBqdXN0IDEuIEluIHJlYWwtdGltZQorICBhcHBsaWNhdGlvbnMsIHlvdSBjYW4gb3B0aW9uYWxseSBzdXBwcmVzcyBzZWdtZW50IHRyYXZlcnNhbHMgdXNpbmcKKyAgTk9fU0VHTUVOVF9UUkFWRVJTQUwsIHdoaWNoIGFzc3VyZXMgYm91bmRlZCBleGVjdXRpb24gZXZlbiB3aGVuCisgIHN5c3RlbSBhbGxvY2F0b3JzIHJldHVybiBub24tY29udGlndW91cyBzcGFjZXMsIGF0IHRoZSB0eXBpY2FsCisgIGV4cGVuc2Ugb2YgY2FycnlpbmcgYXJvdW5kIG1vcmUgbWVtb3J5IGFuZCBpbmNyZWFzZWQgZnJhZ21lbnRhdGlvbi4KKworICBUaGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHZlcnkgbW9kdWxhciBhbmQgc2VyaW91c2x5IG92ZXJ1c2VzCisgIG1hY3Jvcy4gUGVyaGFwcyBzb21lZGF5IGFsbCBDIGNvbXBpbGVycyB3aWxsIGRvIGFzIGdvb2QgYSBqb2IKKyAgaW5saW5pbmcgbW9kdWxhciBjb2RlIGFzIGNhbiBub3cgYmUgZG9uZSBieSBicnV0ZS1mb3JjZSBleHBhbnNpb24sCisgIGJ1dCBub3csIGVub3VnaCBvZiB0aGVtIHNlZW0gbm90IHRvLgorCisgIFNvbWUgY29tcGlsZXJzIGlzc3VlIGEgbG90IG9mIHdhcm5pbmdzIGFib3V0IGNvZGUgdGhhdCBpcworICBkZWFkL3VucmVhY2hhYmxlIG9ubHkgb24gc29tZSBwbGF0Zm9ybXMsIGFuZCBhbHNvIGFib3V0IGludGVudGlvbmFsCisgIHVzZXMgb2YgbmVnYXRpb24gb24gdW5zaWduZWQgdHlwZXMuIEFsbCBrbm93biBjYXNlcyBvZiBlYWNoIGNhbiBiZQorICBpZ25vcmVkLgorCisgIEZvciBhIGxvbmdlciBidXQgb3V0IG9mIGRhdGUgaGlnaC1sZXZlbCBkZXNjcmlwdGlvbiwgc2VlCisgICAgIGh0dHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9kbC9odG1sL21hbGxvYy5odG1sCisKKyogTVNQQUNFUworICBJZiBNU1BBQ0VTIGlzIGRlZmluZWQsIHRoZW4gaW4gYWRkaXRpb24gdG8gbWFsbG9jLCBmcmVlLCBldGMuLAorICB0aGlzIGZpbGUgYWxzbyBkZWZpbmVzIG1zcGFjZV9tYWxsb2MsIG1zcGFjZV9mcmVlLCBldGMuIFRoZXNlCisgIGFyZSB2ZXJzaW9ucyBvZiBtYWxsb2Mgcm91dGluZXMgdGhhdCB0YWtlIGFuICJtc3BhY2UiIGFyZ3VtZW50CisgIG9idGFpbmVkIHVzaW5nIGNyZWF0ZV9tc3BhY2UsIHRvIGNvbnRyb2wgYWxsIGludGVybmFsIGJvb2trZWVwaW5nLgorICBJZiBPTkxZX01TUEFDRVMgaXMgZGVmaW5lZCwgb25seSB0aGVzZSB2ZXJzaW9ucyBhcmUgY29tcGlsZWQuCisgIFNvIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0aGlzIGFsbG9jYXRvciBmb3Igb25seSBzb21lIGFsbG9jYXRpb25zLAorICBhbmQgeW91ciBzeXN0ZW0gbWFsbG9jIGZvciBvdGhlcnMsIHlvdSBjYW4gY29tcGlsZSB3aXRoCisgIE9OTFlfTVNQQUNFUyBhbmQgdGhlbiBkbyBzb21ldGhpbmcgbGlrZS4uLgorICAgIHN0YXRpYyBtc3BhY2UgbXltc3BhY2UgPSBjcmVhdGVfbXNwYWNlKDAsMCk7IC8vIGZvciBleGFtcGxlCisgICAgI2RlZmluZSBteW1hbGxvYyhieXRlcykgIG1zcGFjZV9tYWxsb2MobXltc3BhY2UsIGJ5dGVzKQorCisgIChOb3RlOiBJZiB5b3Ugb25seSBuZWVkIG9uZSBpbnN0YW5jZSBvZiBhbiBtc3BhY2UsIHlvdSBjYW4gaW5zdGVhZAorICB1c2UgIlVTRV9ETF9QUkVGSVgiIHRvIHJlbGFiZWwgdGhlIGdsb2JhbCBtYWxsb2MuKQorCisgIFlvdSBjYW4gc2ltaWxhcmx5IGNyZWF0ZSB0aHJlYWQtbG9jYWwgYWxsb2NhdG9ycyBieSBzdG9yaW5nCisgIG1zcGFjZXMgYXMgdGhyZWFkLWxvY2Fscy4gRm9yIGV4YW1wbGU6CisgICAgc3RhdGljIF9fdGhyZWFkIG1zcGFjZSB0bG1zID0gMDsKKyAgICB2b2lkKiAgdGxtYWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgICAgICBpZiAodGxtcyA9PSAwKSB0bG1zID0gY3JlYXRlX21zcGFjZSgwLCAwKTsKKyAgICAgIHJldHVybiBtc3BhY2VfbWFsbG9jKHRsbXMsIGJ5dGVzKTsKKyAgICB9CisgICAgdm9pZCAgdGxmcmVlKHZvaWQqIG1lbSkgeyBtc3BhY2VfZnJlZSh0bG1zLCBtZW0pOyB9CisKKyAgVW5sZXNzIEZPT1RFUlMgaXMgZGVmaW5lZCwgZWFjaCBtc3BhY2UgaXMgY29tcGxldGVseSBpbmRlcGVuZGVudC4KKyAgWW91IGNhbm5vdCBhbGxvY2F0ZSBmcm9tIG9uZSBhbmQgZnJlZSB0byBhbm90aGVyIChhbHRob3VnaAorICBjb25mb3JtYW5jZSBpcyBvbmx5IHdlYWtseSBjaGVja2VkLCBzbyB1c2FnZSBlcnJvcnMgYXJlIG5vdCBhbHdheXMKKyAgY2F1Z2h0KS4gSWYgRk9PVEVSUyBpcyBkZWZpbmVkLCB0aGVuIGVhY2ggY2h1bmsgY2FycmllcyBhcm91bmQgYSB0YWcKKyAgaW5kaWNhdGluZyBpdHMgb3JpZ2luYXRpbmcgbXNwYWNlLCBhbmQgZnJlZXMgYXJlIGRpcmVjdGVkIHRvIHRoZWlyCisgIG9yaWdpbmF0aW5nIHNwYWNlcy4KKworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENvbXBpbGUtdGltZSBvcHRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZSBjYXJlZnVsIGluIHNldHRpbmcgI2RlZmluZSB2YWx1ZXMgZm9yIG51bWVyaWNhbCBjb25zdGFudHMgb2YgdHlwZQorc2l6ZV90LiBPbiBzb21lIHN5c3RlbXMsIGxpdGVyYWwgdmFsdWVzIGFyZSBub3QgYXV0b21hdGljYWxseSBleHRlbmRlZAordG8gc2l6ZV90IHByZWNpc2lvbiB1bmxlc3MgdGhleSBhcmUgZXhwbGljaXRseSBjYXN0ZWQuIFlvdSBjYW4gYWxzbwordXNlIHRoZSBzeW1ib2xpYyB2YWx1ZXMgTUFYX1NJWkVfVCwgU0laRV9UX09ORSwgZXRjIGJlbG93LgorCitXSU4zMiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmaW5lZCBpZiBfV0lOMzIgZGVmaW5lZAorICBEZWZpbmluZyBXSU4zMiBzZXRzIHVwIGRlZmF1bHRzIGZvciBNUyBlbnZpcm9ubWVudCBhbmQgY29tcGlsZXJzLgorICBPdGhlcndpc2UgZGVmYXVsdHMgYXJlIGZvciB1bml4LiBCZXdhcmUgdGhhdCB0aGVyZSBzZWVtIHRvIGJlIHNvbWUKKyAgY2FzZXMgd2hlcmUgdGhpcyBtYWxsb2MgbWlnaHQgbm90IGJlIGEgcHVyZSBkcm9wLWluIHJlcGxhY2VtZW50IGZvcgorICBXaW4zMiBtYWxsb2M6IFJhbmRvbS1sb29raW5nIGZhaWx1cmVzIGZyb20gV2luMzIgR0RJIEFQSSdzIChlZzsKKyAgU2V0RElCaXRzKCkpIG1heSBiZSBkdWUgdG8gYnVncyBpbiBzb21lIHZpZGVvIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMKKyAgd2hlbiBwaXhlbCBidWZmZXJzIGFyZSBtYWxsb2MoKWVkLCBhbmQgdGhlIHJlZ2lvbiBzcGFucyBtb3JlIHRoYW4KKyAgb25lIFZpcnR1YWxBbGxvYygpZWQgcmVnaW9uLiBCZWNhdXNlIGRsbWFsbG9jIHVzZXMgYSBzbWFsbCAoNjRLYikKKyAgZGVmYXVsdCBncmFudWxhcml0eSwgcGl4ZWwgYnVmZmVycyBtYXkgc3RyYWRkbGUgdmlydHVhbCBhbGxvY2F0aW9uCisgIHJlZ2lvbnMgbW9yZSBvZnRlbiB0aGFuIHdoZW4gdXNpbmcgdGhlIE1pY3Jvc29mdCBhbGxvY2F0b3IuICBZb3UgY2FuCisgIGF2b2lkIHRoaXMgYnkgdXNpbmcgVmlydHVhbEFsbG9jKCkgYW5kIFZpcnR1YWxGcmVlKCkgZm9yIGFsbCBwaXhlbAorICBidWZmZXJzIHJhdGhlciB0aGFuIHVzaW5nIG1hbGxvYygpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsCisgIHJlY29tcGlsZSB0aGlzIG1hbGxvYyB3aXRoIGEgbGFyZ2VyIERFRkFVTFRfR1JBTlVMQVJJVFkuCisKK01BTExPQ19BTElHTk1FTlQgICAgICAgICBkZWZhdWx0OiAoc2l6ZV90KTgKKyAgQ29udHJvbHMgdGhlIG1pbmltdW0gYWxpZ25tZW50IGZvciBtYWxsb2MnZWQgY2h1bmtzLiAgSXQgbXVzdCBiZSBhCisgIHBvd2VyIG9mIHR3byBhbmQgYXQgbGVhc3QgOCwgZXZlbiBvbiBtYWNoaW5lcyBmb3Igd2hpY2ggc21hbGxlcgorICBhbGlnbm1lbnRzIHdvdWxkIHN1ZmZpY2UuIEl0IG1heSBiZSBkZWZpbmVkIGFzIGxhcmdlciB0aGFuIHRoaXMKKyAgdGhvdWdoLiBOb3RlIGhvd2V2ZXIgdGhhdCBjb2RlIGFuZCBkYXRhIHN0cnVjdHVyZXMgYXJlIG9wdGltaXplZCBmb3IKKyAgdGhlIGNhc2Ugb2YgOC1ieXRlIGFsaWdubWVudC4KKworTVNQQUNFUyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKQorICBJZiB0cnVlLCBjb21waWxlIGluIHN1cHBvcnQgZm9yIGluZGVwZW5kZW50IGFsbG9jYXRpb24gc3BhY2VzLgorICBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGlmIEhBVkVfTU1BUCBpcyB0cnVlLgorCitPTkxZX01TUEFDRVMgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCisgIElmIHRydWUsIG9ubHkgY29tcGlsZSBpbiBtc3BhY2UgdmVyc2lvbnMsIG5vdCByZWd1bGFyIHZlcnNpb25zLgorCitVU0VfTE9DS1MgICAgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCisgIENhdXNlcyBlYWNoIGNhbGwgdG8gZWFjaCBwdWJsaWMgcm91dGluZSB0byBiZSBzdXJyb3VuZGVkIHdpdGgKKyAgcHRocmVhZCBvciBXSU4zMiBtdXRleCBsb2NrL3VubG9jay4gKElmIHNldCB0cnVlLCB0aGlzIGNhbiBiZQorICBvdmVycmlkZGVuIG9uIGEgcGVyLW1zcGFjZSBiYXNpcyBmb3IgbXNwYWNlIHZlcnNpb25zLikgSWYgc2V0IHRvIGEKKyAgbm9uLXplcm8gdmFsdWUgb3RoZXIgdGhhbiAxLCBsb2NrcyBhcmUgdXNlZCwgYnV0IHRoZWlyCisgIGltcGxlbWVudGF0aW9uIGlzIGxlZnQgb3V0LCBzbyBsb2NrIGZ1bmN0aW9ucyBtdXN0IGJlIHN1cHBsaWVkIG1hbnVhbGx5LgorCitVU0VfU1BJTl9MT0NLUyAgICAgICAgICAgZGVmYXVsdDogMSBpZmYgVVNFX0xPQ0tTIGFuZCBvbiB4ODYgdXNpbmcgZ2NjIG9yIE1TQworICBJZiB0cnVlLCB1c2VzIGN1c3RvbSBzcGluIGxvY2tzIGZvciBsb2NraW5nLiBUaGlzIGlzIGN1cnJlbnRseQorICBzdXBwb3J0ZWQgb25seSBmb3IgeDg2IHBsYXRmb3JtcyB1c2luZyBnY2Mgb3IgcmVjZW50IE1TIGNvbXBpbGVycy4KKyAgT3RoZXJ3aXNlLCBwb3NpeCBsb2NrcyBvciB3aW4zMiBjcml0aWNhbCBzZWN0aW9ucyBhcmUgdXNlZC4KKworRk9PVEVSUyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgdHJ1ZSwgcHJvdmlkZSBleHRyYSBjaGVja2luZyBhbmQgZGlzcGF0Y2hpbmcgYnkgcGxhY2luZworICBpbmZvcm1hdGlvbiBpbiB0aGUgZm9vdGVycyBvZiBhbGxvY2F0ZWQgY2h1bmtzLiBUaGlzIGFkZHMKKyAgc3BhY2UgYW5kIHRpbWUgb3ZlcmhlYWQuCisKK0lOU0VDVVJFICAgICAgICAgICAgICAgICBkZWZhdWx0OiAwCisgIElmIHRydWUsIG9taXQgY2hlY2tzIGZvciB1c2FnZSBlcnJvcnMgYW5kIGhlYXAgc3BhY2Ugb3ZlcndyaXRlcy4KKworVVNFX0RMX1BSRUZJWCAgICAgICAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkCisgIENhdXNlcyBjb21waWxlciB0byBwcmVmaXggYWxsIHB1YmxpYyByb3V0aW5lcyB3aXRoIHRoZSBzdHJpbmcgJ2RsJy4KKyAgVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4geW91IG9ubHkgd2FudCB0byB1c2UgdGhpcyBtYWxsb2MgaW4gb25lIHBhcnQKKyAgb2YgYSBwcm9ncmFtLCB1c2luZyB5b3VyIHJlZ3VsYXIgc3lzdGVtIG1hbGxvYyBlbHNld2hlcmUuCisKK0FCT1JUICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGFzIGFib3J0KCkKKyAgRGVmaW5lcyBob3cgdG8gYWJvcnQgb24gZmFpbGVkIGNoZWNrcy4gIE9uIG1vc3Qgc3lzdGVtcywgYSBmYWlsZWQKKyAgY2hlY2sgY2Fubm90IGRpZSB3aXRoIGFuICJhc3NlcnQiIG9yIGV2ZW4gcHJpbnQgYW4gaW5mb3JtYXRpdmUKKyAgbWVzc2FnZSwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBwcmludCByb3V0aW5lcyBpbiB0dXJuIGNhbGwgbWFsbG9jLAorICB3aGljaCB3aWxsIGZhaWwgYWdhaW4uICBHZW5lcmFsbHksIHRoZSBiZXN0IHBvbGljeSBpcyB0byBzaW1wbHkgY2FsbAorICBhYm9ydCgpLiBJdCdzIG5vdCB2ZXJ5IHVzZWZ1bCB0byBkbyBtb3JlIHRoYW4gdGhpcyBiZWNhdXNlIG1hbnkKKyAgZXJyb3JzIGR1ZSB0byBvdmVyd3JpdGluZyB3aWxsIHNob3cgdXAgYXMgYWRkcmVzcyBmYXVsdHMgKG51bGwsIG9kZAorICBhZGRyZXNzZXMgZXRjKSByYXRoZXIgdGhhbiBtYWxsb2MtdHJpZ2dlcmVkIGNoZWNrcywgc28gd2lsbCBhbHNvCisgIGFib3J0LiAgQWxzbywgbW9zdCBjb21waWxlcnMga25vdyB0aGF0IGFib3J0KCkgZG9lcyBub3QgcmV0dXJuLCBzbworICBjYW4gYmV0dGVyIG9wdGltaXplIGNvZGUgY29uZGl0aW9uYWxseSBjYWxsaW5nIGl0LgorCitQUk9DRUVEX09OX0VSUk9SICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGFzIDAgKGZhbHNlKQorICBDb250cm9scyB3aGV0aGVyIGRldGVjdGVkIGJhZCBhZGRyZXNzZXMgY2F1c2UgdGhlbSB0byBieXBhc3NlZAorICByYXRoZXIgdGhhbiBhYm9ydGluZy4gSWYgc2V0LCBkZXRlY3RlZCBiYWQgYXJndW1lbnRzIHRvIGZyZWUgYW5kCisgIHJlYWxsb2MgYXJlIGlnbm9yZWQuIEFuZCBhbGwgYm9va2tlZXBpbmcgaW5mb3JtYXRpb24gaXMgemVyb2VkIG91dAorICB1cG9uIGEgZGV0ZWN0ZWQgb3ZlcndyaXRlIG9mIGZyZWVkIGhlYXAgc3BhY2UsIHRodXMgbG9zaW5nIHRoZQorICBhYmlsaXR5IHRvIGV2ZXIgcmV0dXJuIGl0IGZyb20gbWFsbG9jIGFnYWluLCBidXQgZW5hYmxpbmcgdGhlCisgIGFwcGxpY2F0aW9uIHRvIHByb2NlZWQuIElmIFBST0NFRURfT05fRVJST1IgaXMgZGVmaW5lZCwgdGhlCisgIHN0YXRpYyB2YXJpYWJsZSBtYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudCBpcyBjb21waWxlZCBpbgorICBhbmQgY2FuIGJlIGV4YW1pbmVkIHRvIHNlZSBpZiBlcnJvcnMgaGF2ZSBvY2N1cnJlZC4gVGhpcyBvcHRpb24KKyAgZ2VuZXJhdGVzIHNsb3dlciBjb2RlIHRoYW4gdGhlIGRlZmF1bHQgYWJvcnQgcG9saWN5LgorCitERUJVRyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQKKyAgVGhlIERFQlVHIHNldHRpbmcgaXMgbWFpbmx5IGludGVuZGVkIGZvciBwZW9wbGUgdHJ5aW5nIHRvIG1vZGlmeQorICB0aGlzIGNvZGUgb3IgZGlhZ25vc2UgcHJvYmxlbXMgd2hlbiBwb3J0aW5nIHRvIG5ldyBwbGF0Zm9ybXMuCisgIEhvd2V2ZXIsIGl0IG1heSBhbHNvIGJlIGFibGUgdG8gYmV0dGVyIGlzb2xhdGUgdXNlciBlcnJvcnMgdGhhbiBqdXN0CisgIHVzaW5nIHJ1bnRpbWUgY2hlY2tzLiAgVGhlIGFzc2VydGlvbnMgaW4gdGhlIGNoZWNrIHJvdXRpbmVzIHNwZWxsCisgIG91dCBpbiBtb3JlIGRldGFpbCB0aGUgYXNzdW1wdGlvbnMgYW5kIGludmFyaWFudHMgdW5kZXJseWluZyB0aGUKKyAgYWxnb3JpdGhtcy4gIFRoZSBjaGVja2luZyBpcyBmYWlybHkgZXh0ZW5zaXZlLCBhbmQgd2lsbCBzbG93IGRvd24KKyAgZXhlY3V0aW9uIG5vdGljZWFibHkuIENhbGxpbmcgbWFsbG9jX3N0YXRzIG9yIG1hbGxpbmZvIHdpdGggREVCVUcKKyAgc2V0IHdpbGwgYXR0ZW1wdCB0byBjaGVjayBldmVyeSBub24tbW1hcHBlZCBhbGxvY2F0ZWQgYW5kIGZyZWUgY2h1bmsKKyAgaW4gdGhlIGNvdXJzZSBvZiBjb21wdXRpbmcgdGhlIHN1bW1hcmllcy4KKworQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgICBkZWZhdWx0OiBkZWZpbmVkIGFzIDEgKHRydWUpCisgIERlYnVnZ2luZyBhc3NlcnRpb24gZmFpbHVyZXMgY2FuIGJlIG5lYXJseSBpbXBvc3NpYmxlIGlmIHlvdXIKKyAgdmVyc2lvbiBvZiB0aGUgYXNzZXJ0IG1hY3JvIGNhdXNlcyBtYWxsb2MgdG8gYmUgY2FsbGVkLCB3aGljaCB3aWxsCisgIGxlYWQgdG8gYSBjYXNjYWRlIG9mIGZ1cnRoZXIgZmFpbHVyZXMsIGJsb3dpbmcgdGhlIHJ1bnRpbWUgc3RhY2suCisgIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFIGNhdXNlIGFzc2VydGlvbnMgZmFpbHVyZXMgdG8gY2FsbCBhYm9ydCgpLAorICB3aGljaCB3aWxsIHVzdWFsbHkgbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLgorCitNQUxMT0NfRkFJTFVSRV9BQ1RJT04gICAgIGRlZmF1bHQ6IHNldHMgZXJybm8gdG8gRU5PTUVNLCBvciBuby1vcCBvbiB3aW4zMgorICBUaGUgYWN0aW9uIHRvIHRha2UgYmVmb3JlICJyZXR1cm4gMCIgd2hlbiBtYWxsb2MgZmFpbHMgdG8gYmUgYWJsZSB0bworICByZXR1cm4gbWVtb3J5IGJlY2F1c2UgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUuCisKK0hBVkVfTU9SRUNPUkUgICAgICAgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkgdW5sZXNzIHdpbjMyIG9yIE9OTFlfTVNQQUNFUworICBUcnVlIGlmIHRoaXMgc3lzdGVtIHN1cHBvcnRzIHNicmsgb3IgYW4gZW11bGF0aW9uIG9mIGl0LgorCitNT1JFQ09SRSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHNicmsKKyAgVGhlIG5hbWUgb2YgdGhlIHNicmstc3R5bGUgc3lzdGVtIHJvdXRpbmUgdG8gY2FsbCB0byBvYnRhaW4gbW9yZQorICBtZW1vcnkuICBTZWUgYmVsb3cgZm9yIGd1aWRhbmNlIG9uIHdyaXRpbmcgY3VzdG9tIE1PUkVDT1JFCisgIGZ1bmN0aW9ucy4gVGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IHRvIHNicmsvTU9SRUNPUkUgdmFyaWVzIGFjcm9zcworICBzeXN0ZW1zLiAgSXQgY2Fubm90IGJlIHNpemVfdCwgYmVjYXVzZSBpdCBzdXBwb3J0cyBuZWdhdGl2ZQorICBhcmd1bWVudHMsIHNvIGl0IGlzIG5vcm1hbGx5IHRoZSBzaWduZWQgdHlwZSBvZiB0aGUgc2FtZSB3aWR0aCBhcworICBzaXplX3QgKHNvbWV0aW1lcyBkZWNsYXJlZCBhcyAiaW50cHRyX3QiKS4gIEl0IGRvZXNuJ3QgbXVjaCBtYXR0ZXIKKyAgdGhvdWdoLiBJbnRlcm5hbGx5LCB3ZSBvbmx5IGNhbGwgaXQgd2l0aCBhcmd1bWVudHMgbGVzcyB0aGFuIGhhbGYKKyAgdGhlIG1heCB2YWx1ZSBvZiBhIHNpemVfdCwgd2hpY2ggc2hvdWxkIHdvcmsgYWNyb3NzIGFsbCByZWFzb25hYmxlCisgIHBvc3NpYmlsaXRpZXMsIGFsdGhvdWdoIHNvbWV0aW1lcyBnZW5lcmF0aW5nIGNvbXBpbGVyIHdhcm5pbmdzLgorCitNT1JFQ09SRV9DT05USUdVT1VTICAgICAgIGRlZmF1bHQ6IDEgKHRydWUpIGlmIEhBVkVfTU9SRUNPUkUKKyAgSWYgdHJ1ZSwgdGFrZSBhZHZhbnRhZ2Ugb2YgZmFjdCB0aGF0IGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFCisgIHdpdGggcG9zaXRpdmUgYXJndW1lbnRzIGFsd2F5cyByZXR1cm4gY29udGlndW91cyBpbmNyZWFzaW5nCisgIGFkZHJlc3Nlcy4gIFRoaXMgaXMgdHJ1ZSBvZiB1bml4IHNicmsuIEl0IGRvZXMgbm90IGh1cnQgdG9vIG11Y2ggdG8KKyAgc2V0IGl0IHRydWUgYW55d2F5LCBzaW5jZSBtYWxsb2MgY29wZXMgd2l0aCBub24tY29udGlndWl0aWVzLgorICBTZXR0aW5nIGl0IGZhbHNlIHdoZW4gZGVmaW5pdGVseSBub24tY29udGlndW91cyBzYXZlcyB0aW1lCisgIGFuZCBwb3NzaWJseSB3YXN0ZWQgc3BhY2UgaXQgd291bGQgdGFrZSB0byBkaXNjb3ZlciB0aGlzIHRob3VnaC4KKworTU9SRUNPUkVfQ0FOTk9UX1RSSU0gICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAorICBUcnVlIGlmIE1PUkVDT1JFIGNhbm5vdCByZWxlYXNlIHNwYWNlIGJhY2sgdG8gdGhlIHN5c3RlbSB3aGVuIGdpdmVuCisgIG5lZ2F0aXZlIGFyZ3VtZW50cy4gVGhpcyBpcyBnZW5lcmFsbHkgbmVjZXNzYXJ5IG9ubHkgaWYgeW91IGFyZQorICB1c2luZyBhIGhhbmQtY3JhZnRlZCBNT1JFQ09SRSBmdW5jdGlvbiB0aGF0IGNhbm5vdCBoYW5kbGUgbmVnYXRpdmUKKyAgYXJndW1lbnRzLgorCitOT19TRUdNRU5UX1RSQVZFUlNBTCAgICAgICBkZWZhdWx0OiAwCisgIElmIG5vbi16ZXJvLCBzdXBwcmVzc2VzIHRyYXZlcnNhbHMgb2YgbWVtb3J5IHNlZ21lbnRzCisgIHJldHVybmVkIGJ5IGVpdGhlciBNT1JFQ09SRSBvciBDQUxMX01NQVAuIFRoaXMgZGlzYWJsZXMKKyAgbWVyZ2luZyBvZiBzZWdtZW50cyB0aGF0IGFyZSBjb250aWd1b3VzLCBhbmQgc2VsZWN0aXZlbHkKKyAgcmVsZWFzaW5nIHRoZW0gdG8gdGhlIE9TIGlmIHVudXNlZCwgYnV0IGJvdW5kcyBleGVjdXRpb24gdGltZXMuCisKK0hBVkVfTU1BUCAgICAgICAgICAgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkKKyAgVHJ1ZSBpZiB0aGlzIHN5c3RlbSBzdXBwb3J0cyBtbWFwIG9yIGFuIGVtdWxhdGlvbiBvZiBpdC4gIElmIHNvLCBhbmQKKyAgSEFWRV9NT1JFQ09SRSBpcyBub3QgdHJ1ZSwgTU1BUCBpcyB1c2VkIGZvciBhbGwgc3lzdGVtCisgIGFsbG9jYXRpb24uIElmIHNldCBhbmQgSEFWRV9NT1JFQ09SRSBpcyB0cnVlIGFzIHdlbGwsIE1NQVAgaXMKKyAgcHJpbWFyaWx5IHVzZWQgdG8gZGlyZWN0bHkgYWxsb2NhdGUgdmVyeSBsYXJnZSBibG9ja3MuIEl0IGlzIGFsc28KKyAgdXNlZCBhcyBhIGJhY2t1cCBzdHJhdGVneSBpbiBjYXNlcyB3aGVyZSBNT1JFQ09SRSBmYWlscyB0byBwcm92aWRlCisgIHNwYWNlIGZyb20gc3lzdGVtLiBOb3RlOiBBIHNpbmdsZSBjYWxsIHRvIE1VTk1BUCBpcyBhc3N1bWVkIHRvIGJlCisgIGFibGUgdG8gdW5tYXAgbWVtb3J5IHRoYXQgbWF5IGhhdmUgYmUgYWxsb2NhdGVkIHVzaW5nIG11bHRpcGxlIGNhbGxzCisgIHRvIE1NQVAsIHNvIGxvbmcgYXMgdGhleSBhcmUgYWRqYWNlbnQuCisKK0hBVkVfTVJFTUFQICAgICAgICAgICAgICAgZGVmYXVsdDogMSBvbiBsaW51eCwgZWxzZSAwCisgIElmIHRydWUgcmVhbGxvYygpIHVzZXMgbXJlbWFwKCkgdG8gcmUtYWxsb2NhdGUgbGFyZ2UgYmxvY2tzIGFuZAorICBleHRlbmQgb3Igc2hyaW5rIGFsbG9jYXRpb24gc3BhY2VzLgorCitNTUFQX0NMRUFSUyAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgZXhjZXB0IG9uIFdJTkNFLgorICBUcnVlIGlmIG1tYXAgY2xlYXJzIG1lbW9yeSBzbyBjYWxsb2MgZG9lc24ndCBuZWVkIHRvLiBUaGlzIGlzIHRydWUKKyAgZm9yIHN0YW5kYXJkIHVuaXggbW1hcCB1c2luZyAvZGV2L3plcm8gYW5kIG9uIFdJTjMyIGV4Y2VwdCBmb3IgV0lOQ0UuCisKK1VTRV9CVUlMVElOX0ZGUyAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGkuZS4sIG5vdCB1c2VkKQorICBDYXVzZXMgbWFsbG9jIHRvIHVzZSB0aGUgYnVpbHRpbiBmZnMoKSBmdW5jdGlvbiB0byBjb21wdXRlIGluZGljZXMuCisgIFNvbWUgY29tcGlsZXJzIG1heSByZWNvZ25pemUgYW5kIGludHJpbnNpZnkgZmZzIHRvIGJlIGZhc3RlciB0aGFuIHRoZQorICBzdXBwbGllZCBDIHZlcnNpb24uIEFsc28sIHRoZSBjYXNlIG9mIHg4NiB1c2luZyBnY2MgaXMgc3BlY2lhbC1jYXNlZAorICB0byBhbiBhc20gaW5zdHJ1Y3Rpb24sIHNvIGlzIGFscmVhZHkgYXMgZmFzdCBhcyBpdCBjYW4gYmUsIGFuZCBzbworICB0aGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdC4gU2ltaWxhcmx5IGZvciBXaW4zMiB1bmRlciByZWNlbnQgTVMgY29tcGlsZXJzLgorICAoT24gbW9zdCB4ODZzLCB0aGUgYXNtIHZlcnNpb24gaXMgb25seSBzbGlnaHRseSBmYXN0ZXIgdGhhbiB0aGUgQyB2ZXJzaW9uLikKKworbWFsbG9jX2dldHBhZ2VzaXplICAgICAgICAgZGVmYXVsdDogZGVyaXZlIGZyb20gc3lzdGVtIGluY2x1ZGVzLCBvciA0MDk2LgorICBUaGUgc3lzdGVtIHBhZ2Ugc2l6ZS4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhpcyBtYWxsb2MgbWFuYWdlcworICBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtIGluIHBhZ2Utc2l6ZSB1bml0cy4gIFRoaXMgbWF5IGJlIChhbmQKKyAgdXN1YWxseSBpcykgYSBmdW5jdGlvbiByYXRoZXIgdGhhbiBhIGNvbnN0YW50LiBUaGlzIGlzIGlnbm9yZWQKKyAgaWYgV0lOMzIsIHdoZXJlIHBhZ2Ugc2l6ZSBpcyBkZXRlcm1pbmVkIHVzaW5nIGdldFN5c3RlbUluZm8gZHVyaW5nCisgIGluaXRpYWxpemF0aW9uLgorCitVU0VfREVWX1JBTkRPTSAgICAgICAgICAgICBkZWZhdWx0OiAwIChpLmUuLCBub3QgdXNlZCkKKyAgQ2F1c2VzIG1hbGxvYyB0byB1c2UgL2Rldi9yYW5kb20gdG8gaW5pdGlhbGl6ZSBzZWN1cmUgbWFnaWMgc2VlZCBmb3IKKyAgc3RhbXBpbmcgZm9vdGVycy4gT3RoZXJ3aXNlLCB0aGUgY3VycmVudCB0aW1lIGlzIHVzZWQuCisKK05PX01BTExJTkZPICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgZGVmaW5lZCwgZG9uJ3QgY29tcGlsZSAibWFsbGluZm8iLiBUaGlzIGNhbiBiZSBhIHNpbXBsZSB3YXkKKyAgb2YgZGVhbGluZyB3aXRoIG1pc21hdGNoZXMgYmV0d2VlbiBzeXN0ZW0gZGVjbGFyYXRpb25zIGFuZAorICB0aG9zZSBpbiB0aGlzIGZpbGUuCisKK01BTExJTkZPX0ZJRUxEX1RZUEUgICAgICAgIGRlZmF1bHQ6IHNpemVfdAorICBUaGUgdHlwZSBvZiB0aGUgZmllbGRzIGluIHRoZSBtYWxsaW5mbyBzdHJ1Y3QuIFRoaXMgd2FzIG9yaWdpbmFsbHkKKyAgZGVmaW5lZCBhcyAiaW50IiBpbiBTVklEIGV0YywgYnV0IGlzIG1vcmUgdXNlZnVsbHkgZGVmaW5lZCBhcworICBzaXplX3QuIFRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgaWYgIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggaXMgbm90IHNldAorCitSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgICAgZGVmYXVsdDogbm90IGRlZmluZWQKKyAgVGhpcyBzaG91bGQgYmUgc2V0IGlmIGEgY2FsbCB0byByZWFsbG9jIHdpdGggemVybyBieXRlcyBzaG91bGQKKyAgYmUgdGhlIHNhbWUgYXMgYSBjYWxsIHRvIGZyZWUuIFNvbWUgcGVvcGxlIHRoaW5rIGl0IHNob3VsZC4gT3RoZXJ3aXNlLAorICBzaW5jZSB0aGlzIG1hbGxvYyByZXR1cm5zIGEgdW5pcXVlIHBvaW50ZXIgZm9yIG1hbGxvYygwKSwgc28gZG9lcworICByZWFsbG9jKHAsIDApLgorCitMQUNLU19VTklTVERfSCwgTEFDS1NfRkNOVExfSCwgTEFDS1NfU1lTX1BBUkFNX0gsIExBQ0tTX1NZU19NTUFOX0gKK0xBQ0tTX1NUUklOR1NfSCwgTEFDS1NfU1RSSU5HX0gsIExBQ0tTX1NZU19UWVBFU19ILCAgTEFDS1NfRVJSTk9fSAorTEFDS1NfU1RETElCX0ggICAgICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQgdW5sZXNzIG9uIFdJTjMyCisgIERlZmluZSB0aGVzZSBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHRoZXNlIGhlYWRlciBmaWxlcy4KKyAgWW91IG1pZ2h0IG5lZWQgdG8gbWFudWFsbHkgaW5zZXJ0IHNvbWUgb2YgdGhlIGRlY2xhcmF0aW9ucyB0aGV5IHByb3ZpZGUuCisKK0RFRkFVTFRfR1JBTlVMQVJJVFkgICAgICAgIGRlZmF1bHQ6IHBhZ2Ugc2l6ZSBpZiBNT1JFQ09SRV9DT05USUdVT1VTLAorCQkJCXN5c3RlbV9pbmZvLmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5IGluIFdJTjMyLAorCQkJCW90aGVyd2lzZSA2NEsuCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9HUkFOVUxBUklUWSwgeCkKKyAgVGhlIHVuaXQgZm9yIGFsbG9jYXRpbmcgYW5kIGRlYWxsb2NhdGluZyBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLiAgT24KKyAgbW9zdCBzeXN0ZW1zIHdpdGggY29udGlndW91cyBNT1JFQ09SRSwgdGhlcmUgaXMgbm8gcmVhc29uIHRvCisgIG1ha2UgdGhpcyBtb3JlIHRoYW4gYSBwYWdlLiBIb3dldmVyLCBzeXN0ZW1zIHdpdGggTU1BUCB0ZW5kIHRvCisgIGVpdGhlciByZXF1aXJlIG9yIGVuY291cmFnZSBsYXJnZXIgZ3JhbnVsYXJpdGllcy4gIFlvdSBjYW4gaW5jcmVhc2UKKyAgdGhpcyB2YWx1ZSB0byBwcmV2ZW50IHN5c3RlbSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgc28KKyAgb2Z0ZW4sIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgc2xvdy4gIFRoZSB2YWx1ZSBtdXN0IGJlIGF0IGxlYXN0IG9uZQorICBwYWdlIGFuZCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiAgU2V0dGluZyB0byAwIGNhdXNlcyBpbml0aWFsaXphdGlvbgorICB0byBlaXRoZXIgcGFnZSBzaXplIG9yIHdpbjMyIHJlZ2lvbiBzaXplLiAgKE5vdGU6IEluIHByZXZpb3VzCisgIHZlcnNpb25zIG9mIG1hbGxvYywgdGhlIGVxdWl2YWxlbnQgb2YgdGhpcyBvcHRpb24gd2FzIGNhbGxlZAorICAiVE9QX1BBRCIpCisKK0RFRkFVTFRfVFJJTV9USFJFU0hPTEQgICAgZGVmYXVsdDogMk1CCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9UUklNX1RIUkVTSE9MRCwgeCkKKyAgVGhlIG1heGltdW0gYW1vdW50IG9mIHVudXNlZCB0b3AtbW9zdCBtZW1vcnkgdG8ga2VlcCBiZWZvcmUKKyAgcmVsZWFzaW5nIHZpYSBtYWxsb2NfdHJpbSBpbiBmcmVlKCkuICBBdXRvbWF0aWMgdHJpbW1pbmcgaXMgbWFpbmx5CisgIHVzZWZ1bCBpbiBsb25nLWxpdmVkIHByb2dyYW1zIHVzaW5nIGNvbnRpZ3VvdXMgTU9SRUNPUkUuICBCZWNhdXNlCisgIHRyaW1taW5nIHZpYSBzYnJrIGNhbiBiZSBzbG93IG9uIHNvbWUgc3lzdGVtcywgYW5kIGNhbiBzb21ldGltZXMgYmUKKyAgd2FzdGVmdWwgKGluIGNhc2VzIHdoZXJlIHByb2dyYW1zIGltbWVkaWF0ZWx5IGFmdGVyd2FyZCBhbGxvY2F0ZQorICBtb3JlIGxhcmdlIGNodW5rcykgdGhlIHZhbHVlIHNob3VsZCBiZSBoaWdoIGVub3VnaCBzbyB0aGF0IHlvdXIKKyAgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2Ugd291bGQgaW1wcm92ZSBieSByZWxlYXNpbmcgdGhpcyBtdWNoCisgIG1lbW9yeS4gIEFzIGEgcm91Z2ggZ3VpZGUsIHlvdSBtaWdodCBzZXQgdG8gYSB2YWx1ZSBjbG9zZSB0byB0aGUKKyAgYXZlcmFnZSBzaXplIG9mIGEgcHJvY2VzcyAocHJvZ3JhbSkgcnVubmluZyBvbiB5b3VyIHN5c3RlbS4KKyAgUmVsZWFzaW5nIHRoaXMgbXVjaCBtZW1vcnkgd291bGQgYWxsb3cgc3VjaCBhIHByb2Nlc3MgdG8gcnVuIGluCisgIG1lbW9yeS4gIEdlbmVyYWxseSwgaXQgaXMgd29ydGggdHVuaW5nIHRyaW0gdGhyZXNob2xkcyB3aGVuIGEKKyAgcHJvZ3JhbSB1bmRlcmdvZXMgcGhhc2VzIHdoZXJlIHNldmVyYWwgbGFyZ2UgY2h1bmtzIGFyZSBhbGxvY2F0ZWQKKyAgYW5kIHJlbGVhc2VkIGluIHdheXMgdGhhdCBjYW4gcmV1c2UgZWFjaCBvdGhlcidzIHN0b3JhZ2UsIHBlcmhhcHMKKyAgbWl4ZWQgd2l0aCBwaGFzZXMgd2hlcmUgdGhlcmUgYXJlIG5vIHN1Y2ggY2h1bmtzIGF0IGFsbC4gVGhlIHRyaW0KKyAgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gcGFnZSBzaXplIHRvIGhhdmUgYW55IHVzZWZ1bCBlZmZlY3QuICBUbworICBkaXNhYmxlIHRyaW1taW5nIGNvbXBsZXRlbHksIHlvdSBjYW4gc2V0IHRvIE1BWF9TSVpFX1QuIE5vdGUgdGhhdCB0aGUgdHJpY2sKKyAgc29tZSBwZW9wbGUgdXNlIG9mIG1hbGxvY2luZyBhIGh1Z2Ugc3BhY2UgYW5kIHRoZW4gZnJlZWluZyBpdCBhdAorICBwcm9ncmFtIHN0YXJ0dXAsIGluIGFuIGF0dGVtcHQgdG8gcmVzZXJ2ZSBzeXN0ZW0gbWVtb3J5LCBkb2Vzbid0CisgIGhhdmUgdGhlIGludGVuZGVkIGVmZmVjdCB1bmRlciBhdXRvbWF0aWMgdHJpbW1pbmcsIHNpbmNlIHRoYXQgbWVtb3J5CisgIHdpbGwgaW1tZWRpYXRlbHkgYmUgcmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4KKworREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAgICAgICBkZWZhdWx0OiAyNTZLCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9NTUFQX1RIUkVTSE9MRCwgeCkKKyAgVGhlIHJlcXVlc3Qgc2l6ZSB0aHJlc2hvbGQgZm9yIHVzaW5nIE1NQVAgdG8gZGlyZWN0bHkgc2VydmljZSBhCisgIHJlcXVlc3QuIFJlcXVlc3RzIG9mIGF0IGxlYXN0IHRoaXMgc2l6ZSB0aGF0IGNhbm5vdCBiZSBhbGxvY2F0ZWQKKyAgdXNpbmcgYWxyZWFkeS1leGlzdGluZyBzcGFjZSB3aWxsIGJlIHNlcnZpY2VkIHZpYSBtbWFwLiAgKElmIGVub3VnaAorICBub3JtYWwgZnJlZWQgc3BhY2UgYWxyZWFkeSBleGlzdHMgaXQgaXMgdXNlZCBpbnN0ZWFkLikgIFVzaW5nIG1tYXAKKyAgc2VncmVnYXRlcyByZWxhdGl2ZWx5IGxhcmdlIGNodW5rcyBvZiBtZW1vcnkgc28gdGhhdCB0aGV5IGNhbiBiZQorICBpbmRpdmlkdWFsbHkgb2J0YWluZWQgYW5kIHJlbGVhc2VkIGZyb20gdGhlIGhvc3Qgc3lzdGVtLiBBIHJlcXVlc3QKKyAgc2VydmljZWQgdGhyb3VnaCBtbWFwIGlzIG5ldmVyIHJldXNlZCBieSBhbnkgb3RoZXIgcmVxdWVzdCAoYXQgbGVhc3QKKyAgbm90IGRpcmVjdGx5OyB0aGUgc3lzdGVtIG1heSBqdXN0IHNvIGhhcHBlbiB0byByZW1hcCBzdWNjZXNzaXZlCisgIHJlcXVlc3RzIHRvIHRoZSBzYW1lIGxvY2F0aW9ucykuICBTZWdyZWdhdGluZyBzcGFjZSBpbiB0aGlzIHdheSBoYXMKKyAgdGhlIGJlbmVmaXRzIHRoYXQ6IE1tYXBwZWQgc3BhY2UgY2FuIGFsd2F5cyBiZSBpbmRpdmlkdWFsbHkgcmVsZWFzZWQKKyAgYmFjayB0byB0aGUgc3lzdGVtLCB3aGljaCBoZWxwcyBrZWVwIHRoZSBzeXN0ZW0gbGV2ZWwgbWVtb3J5IGRlbWFuZHMKKyAgb2YgYSBsb25nLWxpdmVkIHByb2dyYW0gbG93LiAgQWxzbywgbWFwcGVkIG1lbW9yeSBkb2Vzbid0IGJlY29tZQorICBgbG9ja2VkJyBiZXR3ZWVuIG90aGVyIGNodW5rcywgYXMgY2FuIGhhcHBlbiB3aXRoIG5vcm1hbGx5IGFsbG9jYXRlZAorICBjaHVua3MsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiB0cmltbWluZyB2aWEgbWFsbG9jX3RyaW0gd291bGQgbm90CisgIHJlbGVhc2UgdGhlbS4gIEhvd2V2ZXIsIGl0IGhhcyB0aGUgZGlzYWR2YW50YWdlIHRoYXQgdGhlIHNwYWNlCisgIGNhbm5vdCBiZSByZWNsYWltZWQsIGNvbnNvbGlkYXRlZCwgYW5kIHRoZW4gdXNlZCB0byBzZXJ2aWNlIGxhdGVyCisgIHJlcXVlc3RzLCBhcyBoYXBwZW5zIHdpdGggbm9ybWFsIGNodW5rcy4gIFRoZSBhZHZhbnRhZ2VzIG9mIG1tYXAKKyAgbmVhcmx5IGFsd2F5cyBvdXR3ZWlnaCBkaXNhZHZhbnRhZ2VzIGZvciAibGFyZ2UiIGNodW5rcywgYnV0IHRoZQorICB2YWx1ZSBvZiAibGFyZ2UiIG1heSB2YXJ5IGFjcm9zcyBzeXN0ZW1zLiAgVGhlIGRlZmF1bHQgaXMgYW4KKyAgZW1waXJpY2FsbHkgZGVyaXZlZCB2YWx1ZSB0aGF0IHdvcmtzIHdlbGwgaW4gbW9zdCBzeXN0ZW1zLiBZb3UgY2FuCisgIGRpc2FibGUgbW1hcCBieSBzZXR0aW5nIHRvIE1BWF9TSVpFX1QuCisKK01BWF9SRUxFQVNFX0NIRUNLX1JBVEUgICBkZWZhdWx0OiA0MDk1IHVubGVzcyBub3QgSEFWRV9NTUFQCisgIFRoZSBudW1iZXIgb2YgY29uc29saWRhdGVkIGZyZWVzIGJldHdlZW4gY2hlY2tzIHRvIHJlbGVhc2UKKyAgdW51c2VkIHNlZ21lbnRzIHdoZW4gZnJlZWluZy4gV2hlbiB1c2luZyBub24tY29udGlndW91cyBzZWdtZW50cywKKyAgZXNwZWNpYWxseSB3aXRoIG11bHRpcGxlIG1zcGFjZXMsIGNoZWNraW5nIG9ubHkgZm9yIHRvcG1vc3Qgc3BhY2UKKyAgZG9lc24ndCBhbHdheXMgc3VmZmljZSB0byB0cmlnZ2VyIHRyaW1taW5nLiBUbyBjb21wZW5zYXRlIGZvciB0aGlzLAorICBmcmVlKCkgd2lsbCwgd2l0aCBhIHBlcmlvZCBvZiBNQVhfUkVMRUFTRV9DSEVDS19SQVRFIChvciB0aGUKKyAgY3VycmVudCBudW1iZXIgb2Ygc2VnbWVudHMsIGlmIGdyZWF0ZXIpIHRyeSB0byByZWxlYXNlIHVudXNlZAorICBzZWdtZW50cyB0byB0aGUgT1Mgd2hlbiBmcmVlaW5nIGNodW5rcyB0aGF0IHJlc3VsdCBpbgorICBjb25zb2xpZGF0aW9uLiBUaGUgYmVzdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgYSBjb21wcm9taXNlCisgIGJldHdlZW4gc2xvd2luZyBkb3duIGZyZWVzIHdpdGggcmVsYXRpdmVseSBjb3N0bHkgY2hlY2tzIHRoYXQKKyAgcmFyZWx5IHRyaWdnZXIgdmVyc3VzIGhvbGRpbmcgb24gdG8gdW51c2VkIG1lbW9yeS4gVG8gZWZmZWN0aXZlbHkKKyAgZGlzYWJsZSwgc2V0IHRvIE1BWF9TSVpFX1QuIFRoaXMgbWF5IGxlYWQgdG8gYSB2ZXJ5IHNsaWdodCBzcGVlZAorICBpbXByb3ZlbWVudCBhdCB0aGUgZXhwZW5zZSBvZiBjYXJyeWluZyBhcm91bmQgbW9yZSBtZW1vcnkuCisqLworCisvKiBWZXJzaW9uIGlkZW50aWZpZXIgdG8gYWxsb3cgcGVvcGxlIHRvIHN1cHBvcnQgbXVsdGlwbGUgdmVyc2lvbnMgKi8KKyNpZm5kZWYgRExNQUxMT0NfVkVSU0lPTgorI2RlZmluZSBETE1BTExPQ19WRVJTSU9OIDIwODA0CisjZW5kaWYgLyogRExNQUxMT0NfVkVSU0lPTiAqLworCisjaWYgZGVmaW5lZChsaW51eCkKKyNkZWZpbmUgX0dOVV9TT1VSQ0UgMQorI2VuZGlmCisKKyNpZm5kZWYgV0lOMzIKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgV0lOMzIgMQorI2VuZGlmICAvKiBfV0lOMzIgKi8KKyNpZmRlZiBfV0lOMzJfV0NFCisjZGVmaW5lIExBQ0tTX0ZDTlRMX0gKKyNkZWZpbmUgV0lOMzIgMQorI2VuZGlmIC8qIF9XSU4zMl9XQ0UgKi8KKyNlbmRpZiAgLyogV0lOMzIgKi8KKyNpZmRlZiBXSU4zMgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjaWZuZGVmIF9XSU4zMl9XSU5OVAorI2RlZmluZSBfV0lOMzJfV0lOTlQgMHg0MDMKKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNkZWZpbmUgSEFWRV9NTUFQIDEKKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwCisjZGVmaW5lIExBQ0tTX1VOSVNURF9ICisjZGVmaW5lIExBQ0tTX1NZU19QQVJBTV9ICisjZGVmaW5lIExBQ0tTX1NZU19NTUFOX0gKKyNkZWZpbmUgTEFDS1NfU1RSSU5HX0gKKyNkZWZpbmUgTEFDS1NfU1RSSU5HU19ICisjZGVmaW5lIExBQ0tTX1NZU19UWVBFU19ICisjZGVmaW5lIExBQ0tTX0VSUk5PX0gKKyNpZm5kZWYgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCisjZGVmaW5lIE1BTExPQ19GQUlMVVJFX0FDVElPTgorI2VuZGlmIC8qIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLworI2lmZGVmIF9XSU4zMl9XQ0UgLyogV0lOQ0UgcmVwb3J0ZWRseSBkb2VzIG5vdCBjbGVhciAqLworI2RlZmluZSBNTUFQX0NMRUFSUyAwCisjZWxzZQorI2RlZmluZSBNTUFQX0NMRUFSUyAxCisjZW5kaWYgLyogX1dJTjMyX1dDRSAqLworI2VuZGlmICAvKiBXSU4zMiAqLworCisjaWYgZGVmaW5lZChEQVJXSU4pIHx8IGRlZmluZWQoX0RBUldJTikKKy8qIE1hYyBPU1ggZG9jcyBhZHZpc2Ugbm90IHRvIHVzZSBzYnJrOyBpdCBzZWVtcyBiZXR0ZXIgdG8gdXNlIG1tYXAgKi8KKyNpZm5kZWYgSEFWRV9NT1JFQ09SRQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNkZWZpbmUgSEFWRV9NTUFQIDEKKy8qIE9TWCBhbGxvY2F0b3JzIHByb3ZpZGUgMTYgYnl0ZSBhbGlnbm1lbnQgKi8KKyNpZm5kZWYgTUFMTE9DX0FMSUdOTUVOVAorI2RlZmluZSBNQUxMT0NfQUxJR05NRU5UICgoc2l6ZV90KTE2VSkKKyNlbmRpZgorI2VuZGlmICAvKiBIQVZFX01PUkVDT1JFICovCisjZW5kaWYgIC8qIERBUldJTiAqLworCisjaWZuZGVmIExBQ0tTX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAvKiBGb3Igc2l6ZV90ICovCisjZW5kaWYgIC8qIExBQ0tTX1NZU19UWVBFU19IICovCisKKy8qIFRoZSBtYXhpbXVtIHBvc3NpYmxlIHNpemVfdCB2YWx1ZSBoYXMgYWxsIGJpdHMgc2V0ICovCisjZGVmaW5lIE1BWF9TSVpFX1QgICAgICAgICAgICh+KHNpemVfdCkwKQorCisjaWZuZGVmIE9OTFlfTVNQQUNFUworI2RlZmluZSBPTkxZX01TUEFDRVMgMCAgICAgLyogZGVmaW5lIHRvIGEgdmFsdWUgKi8KKyNlbHNlCisjZGVmaW5lIE9OTFlfTVNQQUNFUyAxCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLworI2lmbmRlZiBNU1BBQ0VTCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIE1TUEFDRVMgMQorI2Vsc2UgICAvKiBPTkxZX01TUEFDRVMgKi8KKyNkZWZpbmUgTVNQQUNFUyAwCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLworI2VuZGlmICAvKiBNU1BBQ0VTICovCisjaWZuZGVmIE1BTExPQ19BTElHTk1FTlQKKyNkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCAoKHNpemVfdCk4VSkKKyNlbmRpZiAgLyogTUFMTE9DX0FMSUdOTUVOVCAqLworI2lmbmRlZiBGT09URVJTCisjZGVmaW5lIEZPT1RFUlMgMAorI2VuZGlmICAvKiBGT09URVJTICovCisjaWZuZGVmIEFCT1JUCisjZGVmaW5lIEFCT1JUICBhYm9ydCgpCisjZW5kaWYgIC8qIEFCT1JUICovCisjaWZuZGVmIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFCisjZGVmaW5lIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFIDEKKyNlbmRpZiAgLyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8KKyNpZm5kZWYgUFJPQ0VFRF9PTl9FUlJPUgorI2RlZmluZSBQUk9DRUVEX09OX0VSUk9SIDAKKyNlbmRpZiAgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworI2lmbmRlZiBVU0VfTE9DS1MKKyNkZWZpbmUgVVNFX0xPQ0tTIDAKKyNlbmRpZiAgLyogVVNFX0xPQ0tTICovCisjaWZuZGVmIFVTRV9TUElOX0xPQ0tTCisjaWYgVVNFX0xPQ0tTICYmIChkZWZpbmVkKF9fR05VQ19fKSAmJiAoKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpKSkgfHwgKGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzEwKQorI2RlZmluZSBVU0VfU1BJTl9MT0NLUyAxCisjZWxzZQorI2RlZmluZSBVU0VfU1BJTl9MT0NLUyAwCisjZW5kaWYgLyogVVNFX0xPQ0tTICYmIC4uLiAqLworI2VuZGlmIC8qIFVTRV9TUElOX0xPQ0tTICovCisjaWZuZGVmIElOU0VDVVJFCisjZGVmaW5lIElOU0VDVVJFIDAKKyNlbmRpZiAgLyogSU5TRUNVUkUgKi8KKyNpZm5kZWYgSEFWRV9NTUFQCisjZGVmaW5lIEhBVkVfTU1BUCAxCisjZW5kaWYgIC8qIEhBVkVfTU1BUCAqLworI2lmbmRlZiBNTUFQX0NMRUFSUworI2RlZmluZSBNTUFQX0NMRUFSUyAxCisjZW5kaWYgIC8qIE1NQVBfQ0xFQVJTICovCisjaWZuZGVmIEhBVkVfTVJFTUFQCisjaWZkZWYgbGludXgKKyNkZWZpbmUgSEFWRV9NUkVNQVAgMQorI2Vsc2UgICAvKiBsaW51eCAqLworI2RlZmluZSBIQVZFX01SRU1BUCAwCisjZW5kaWYgIC8qIGxpbnV4ICovCisjZW5kaWYgIC8qIEhBVkVfTVJFTUFQICovCisjaWZuZGVmIE1BTExPQ19GQUlMVVJFX0FDVElPTgorI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gIGVycm5vID0gRU5PTUVNOworI2VuZGlmICAvKiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gKi8KKyNpZm5kZWYgSEFWRV9NT1JFQ09SRQorI2lmIE9OTFlfTVNQQUNFUworI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNlbHNlICAgLyogT05MWV9NU1BBQ0VTICovCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMQorI2VuZGlmICAvKiBPTkxZX01TUEFDRVMgKi8KKyNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLworI2lmICFIQVZFX01PUkVDT1JFCisjZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMAorI2Vsc2UgICAvKiAhSEFWRV9NT1JFQ09SRSAqLworI2RlZmluZSBNT1JFQ09SRV9ERUZBVUxUIHNicmsKKyNpZm5kZWYgTU9SRUNPUkVfQ09OVElHVU9VUworI2RlZmluZSBNT1JFQ09SRV9DT05USUdVT1VTIDEKKyNlbmRpZiAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworI2VuZGlmICAvKiBIQVZFX01PUkVDT1JFICovCisjaWZuZGVmIERFRkFVTFRfR1JBTlVMQVJJVFkKKyNpZiAoTU9SRUNPUkVfQ09OVElHVU9VUyB8fCBkZWZpbmVkKFdJTjMyKSkKKyNkZWZpbmUgREVGQVVMVF9HUkFOVUxBUklUWSAoMCkgIC8qIDAgbWVhbnMgdG8gY29tcHV0ZSBpbiBpbml0X21wYXJhbXMgKi8KKyNlbHNlICAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgoc2l6ZV90KTY0VSAqIChzaXplX3QpMTAyNFUpCisjZW5kaWYgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyNlbmRpZiAgLyogREVGQVVMVF9HUkFOVUxBUklUWSAqLworI2lmbmRlZiBERUZBVUxUX1RSSU1fVEhSRVNIT0xECisjaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNCisjZGVmaW5lIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgKChzaXplX3QpMlUgKiAoc2l6ZV90KTEwMjRVICogKHNpemVfdCkxMDI0VSkKKyNlbHNlICAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCBNQVhfU0laRV9UCisjZW5kaWYgIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisjZW5kaWYgIC8qIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgKi8KKyNpZm5kZWYgREVGQVVMVF9NTUFQX1RIUkVTSE9MRAorI2lmIEhBVkVfTU1BUAorI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEICgoc2l6ZV90KTI1NlUgKiAoc2l6ZV90KTEwMjRVKQorI2Vsc2UgICAvKiBIQVZFX01NQVAgKi8KKyNkZWZpbmUgREVGQVVMVF9NTUFQX1RIUkVTSE9MRCBNQVhfU0laRV9UCisjZW5kaWYgIC8qIEhBVkVfTU1BUCAqLworI2VuZGlmICAvKiBERUZBVUxUX01NQVBfVEhSRVNIT0xEICovCisjaWZuZGVmIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUKKyNpZiBIQVZFX01NQVAKKyNkZWZpbmUgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSA0MDk1CisjZWxzZQorI2RlZmluZSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFIE1BWF9TSVpFX1QKKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKyNlbmRpZiAvKiBNQVhfUkVMRUFTRV9DSEVDS19SQVRFICovCisjaWZuZGVmIFVTRV9CVUlMVElOX0ZGUworI2RlZmluZSBVU0VfQlVJTFRJTl9GRlMgMAorI2VuZGlmICAvKiBVU0VfQlVJTFRJTl9GRlMgKi8KKyNpZm5kZWYgVVNFX0RFVl9SQU5ET00KKyNkZWZpbmUgVVNFX0RFVl9SQU5ET00gMAorI2VuZGlmICAvKiBVU0VfREVWX1JBTkRPTSAqLworI2lmbmRlZiBOT19NQUxMSU5GTworI2RlZmluZSBOT19NQUxMSU5GTyAwCisjZW5kaWYgIC8qIE5PX01BTExJTkZPICovCisjaWZuZGVmIE1BTExJTkZPX0ZJRUxEX1RZUEUKKyNkZWZpbmUgTUFMTElORk9fRklFTERfVFlQRSBzaXplX3QKKyNlbmRpZiAgLyogTUFMTElORk9fRklFTERfVFlQRSAqLworI2lmbmRlZiBOT19TRUdNRU5UX1RSQVZFUlNBTAorI2RlZmluZSBOT19TRUdNRU5UX1RSQVZFUlNBTCAwCisjZW5kaWYgLyogTk9fU0VHTUVOVF9UUkFWRVJTQUwgKi8KKworLyoKKyAgbWFsbG9wdCB0dW5pbmcgb3B0aW9ucy4gIFNWSUQvWFBHIGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbWV0ZXIKKyAgbnVtYmVycyBmb3IgbWFsbG9wdCwgbm9ybWFsbHkgZGVmaW5lZCBpbiBtYWxsb2MuaC4gIE5vbmUgb2YgdGhlc2UKKyAgYXJlIHVzZWQgaW4gdGhpcyBtYWxsb2MsIHNvIHNldHRpbmcgdGhlbSBoYXMgbm8gZWZmZWN0LiBCdXQgdGhpcworICBtYWxsb2MgZG9lcyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgb3B0aW9ucy4KKyovCisKKyNkZWZpbmUgTV9UUklNX1RIUkVTSE9MRCAgICAgKC0xKQorI2RlZmluZSBNX0dSQU5VTEFSSVRZICAgICAgICAoLTIpCisjZGVmaW5lIE1fTU1BUF9USFJFU0hPTEQgICAgICgtMykKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1hbGxpbmZvIGRlY2xhcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgVGhpcyB2ZXJzaW9uIG9mIG1hbGxvYyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgU1ZJRC9YUEcgbWFsbGluZm8KKyAgcm91dGluZSB0aGF0IHJldHVybnMgYSBzdHJ1Y3QgY29udGFpbmluZyB1c2FnZSBwcm9wZXJ0aWVzIGFuZAorICBzdGF0aXN0aWNzLiBJdCBzaG91bGQgd29yayBvbiBhbnkgc3lzdGVtIHRoYXQgaGFzIGEKKyAgL3Vzci9pbmNsdWRlL21hbGxvYy5oIGRlZmluaW5nIHN0cnVjdCBtYWxsaW5mby4gIFRoZSBtYWluCisgIGRlY2xhcmF0aW9uIG5lZWRlZCBpcyB0aGUgbWFsbGluZm8gc3RydWN0IHRoYXQgaXMgcmV0dXJuZWQgKGJ5LWNvcHkpCisgIGJ5IG1hbGxpbmZvKCkuICBUaGUgbWFsbG9pbmZvIHN0cnVjdCBjb250YWlucyBhIGJ1bmNoIG9mIGZpZWxkcyB0aGF0CisgIGFyZSBub3QgZXZlbiBtZWFuaW5nZnVsIGluIHRoaXMgdmVyc2lvbiBvZiBtYWxsb2MuICBUaGVzZSBmaWVsZHMgYXJlCisgIGFyZSBpbnN0ZWFkIGZpbGxlZCBieSBtYWxsaW5mbygpIHdpdGggb3RoZXIgbnVtYmVycyB0aGF0IG1pZ2h0IGJlIG9mCisgIGludGVyZXN0LgorCisgIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggc2hvdWxkIGJlIHNldCBpZiB5b3UgaGF2ZSBhCisgIC91c3IvaW5jbHVkZS9tYWxsb2MuaCBmaWxlIHRoYXQgaW5jbHVkZXMgYSBkZWNsYXJhdGlvbiBvZiBzdHJ1Y3QKKyAgbWFsbGluZm8uICBJZiBzbywgaXQgaXMgaW5jbHVkZWQ7IGVsc2UgYSBjb21wbGlhbnQgdmVyc2lvbiBpcworICBkZWNsYXJlZCBiZWxvdy4gIFRoZXNlIG11c3QgYmUgcHJlY2lzZWx5IHRoZSBzYW1lIGZvciBtYWxsaW5mbygpIHRvCisgIHdvcmsuICBUaGUgb3JpZ2luYWwgU1ZJRCB2ZXJzaW9uIG9mIHRoaXMgc3RydWN0LCBkZWZpbmVkIG9uIG1vc3QKKyAgc3lzdGVtcyB3aXRoIG1hbGxpbmZvLCBkZWNsYXJlcyBhbGwgZmllbGRzIGFzIGludHMuIEJ1dCBzb21lIG90aGVycworICBkZWZpbmUgYXMgdW5zaWduZWQgbG9uZy4gSWYgeW91ciBzeXN0ZW0gZGVmaW5lcyB0aGUgZmllbGRzIHVzaW5nIGEKKyAgdHlwZSBvZiBkaWZmZXJlbnQgd2lkdGggdGhhbiBsaXN0ZWQgaGVyZSwgeW91IE1VU1QgI2luY2x1ZGUgeW91cgorICBzeXN0ZW0gdmVyc2lvbiBhbmQgI2RlZmluZSBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ILgorKi8KKworLyogI2RlZmluZSBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisKKyNpZmRlZiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ICisjaW5jbHVkZSAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIgorI2Vsc2UgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworI2lmbmRlZiBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQKKyNkZWZpbmUgU1RSVUNUX01BTExJTkZPX0RFQ0xBUkVEIDEKK3N0cnVjdCBtYWxsaW5mbyB7CisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgYXJlbmE7ICAgIC8qIG5vbi1tbWFwcGVkIHNwYWNlIGFsbG9jYXRlZCBmcm9tIHN5c3RlbSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIG9yZGJsa3M7ICAvKiBudW1iZXIgb2YgZnJlZSBjaHVua3MgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBzbWJsa3M7ICAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBoYmxrczsgICAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBoYmxraGQ7ICAgLyogc3BhY2UgaW4gbW1hcHBlZCByZWdpb25zICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgdXNtYmxrczsgIC8qIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgZnNtYmxrczsgIC8qIGFsd2F5cyAwICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgdW9yZGJsa3M7IC8qIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGZvcmRibGtzOyAvKiB0b3RhbCBmcmVlIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUga2VlcGNvc3Q7IC8qIHJlbGVhc2FibGUgKHZpYSBtYWxsb2NfdHJpbSkgc3BhY2UgKi8KK307CisjZW5kaWYgLyogU1RSVUNUX01BTExJTkZPX0RFQ0xBUkVEICovCisjZW5kaWYgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKKy8qCisgIFRyeSB0byBwZXJzdWFkZSBjb21waWxlcnMgdG8gaW5saW5lLiBUaGUgbW9zdCBjcml0aWNhbCBmdW5jdGlvbnMgZm9yCisgIGlubGluaW5nIGFyZSBkZWZpbmVkIGFzIG1hY3Jvcywgc28gdGhlc2UgYXJlbid0IHVzZWQgZm9yIHRoZW0uCisqLworCisjaWZkZWYgX19NSU5HVzY0X1ZFUlNJT05fTUFKT1IKKyN1bmRlZiBGT1JDRUlOTElORQorI2VuZGlmCisjaWZuZGVmIEZPUkNFSU5MSU5FCisgICNpZiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBGT1JDRUlOTElORSBfX2lubGluZSBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpCisgICNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisgICAgI2RlZmluZSBGT1JDRUlOTElORSBfX2ZvcmNlaW5saW5lCisgICNlbmRpZgorI2VuZGlmCisjaWZuZGVmIE5PSU5MSU5FCisgICNpZiBkZWZpbmVkKF9fR05VQ19fKQorICAgICNkZWZpbmUgTk9JTkxJTkUgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKyAgI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIE5PSU5MSU5FIF9fZGVjbHNwZWMobm9pbmxpbmUpCisgICNlbHNlCisgICAgI2RlZmluZSBOT0lOTElORQorICAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2lmbmRlZiBGT1JDRUlOTElORQorICNkZWZpbmUgRk9SQ0VJTkxJTkUgaW5saW5lCisjZW5kaWYKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworI2lmbmRlZiBGT1JDRUlOTElORQorICNkZWZpbmUgRk9SQ0VJTkxJTkUKKyNlbmRpZgorCisjaWYgIU9OTFlfTVNQQUNFUworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIERlY2xhcmF0aW9ucyBvZiBwdWJsaWMgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIFVTRV9ETF9QUkVGSVgKKyNkZWZpbmUgZGxjYWxsb2MgICAgICAgICAgICAgICBjYWxsb2MKKyNkZWZpbmUgZGxmcmVlICAgICAgICAgICAgICAgICBmcmVlCisjZGVmaW5lIGRsbWFsbG9jICAgICAgICAgICAgICAgbWFsbG9jCisjZGVmaW5lIGRsbWVtYWxpZ24gICAgICAgICAgICAgbWVtYWxpZ24KKyNkZWZpbmUgZGxyZWFsbG9jICAgICAgICAgICAgICByZWFsbG9jCisjZGVmaW5lIGRsdmFsbG9jICAgICAgICAgICAgICAgdmFsbG9jCisjZGVmaW5lIGRscHZhbGxvYyAgICAgICAgICAgICAgcHZhbGxvYworI2RlZmluZSBkbG1hbGxpbmZvICAgICAgICAgICAgIG1hbGxpbmZvCisjZGVmaW5lIGRsbWFsbG9wdCAgICAgICAgICAgICAgbWFsbG9wdAorI2RlZmluZSBkbG1hbGxvY190cmltICAgICAgICAgIG1hbGxvY190cmltCisjZGVmaW5lIGRsbWFsbG9jX3N0YXRzICAgICAgICAgbWFsbG9jX3N0YXRzCisjZGVmaW5lIGRsbWFsbG9jX3VzYWJsZV9zaXplICAgbWFsbG9jX3VzYWJsZV9zaXplCisjZGVmaW5lIGRsbWFsbG9jX2Zvb3RwcmludCAgICAgbWFsbG9jX2Zvb3RwcmludAorI2RlZmluZSBkbG1hbGxvY19tYXhfZm9vdHByaW50IG1hbGxvY19tYXhfZm9vdHByaW50CisjZGVmaW5lIGRsaW5kZXBlbmRlbnRfY2FsbG9jICAgaW5kZXBlbmRlbnRfY2FsbG9jCisjZGVmaW5lIGRsaW5kZXBlbmRlbnRfY29tYWxsb2MgaW5kZXBlbmRlbnRfY29tYWxsb2MKKyNlbmRpZiAvKiBVU0VfRExfUFJFRklYICovCisKKworLyoKKyAgbWFsbG9jKHNpemVfdCBuKQorICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBhdCBsZWFzdCBuIGJ5dGVzLCBvcgorICBudWxsIGlmIG5vIHNwYWNlIGlzIGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZSBlcnJubyBpcyBzZXQgdG8gRU5PTUVNCisgIG9uIEFOU0kgQyBzeXN0ZW1zLgorCisgIElmIG4gaXMgemVybywgbWFsbG9jIHJldHVybnMgYSBtaW5pbXVtLXNpemVkIGNodW5rLiAoVGhlIG1pbmltdW0KKyAgc2l6ZSBpcyAxNiBieXRlcyBvbiBtb3N0IDMyYml0IHN5c3RlbXMsIGFuZCAzMiBieXRlcyBvbiA2NGJpdAorICBzeXN0ZW1zLikgIE5vdGUgdGhhdCBzaXplX3QgaXMgYW4gdW5zaWduZWQgdHlwZSwgc28gY2FsbHMgd2l0aAorICBhcmd1bWVudHMgdGhhdCB3b3VsZCBiZSBuZWdhdGl2ZSBpZiBzaWduZWQgYXJlIGludGVycHJldGVkIGFzCisgIHJlcXVlc3RzIGZvciBodWdlIGFtb3VudHMgb2Ygc3BhY2UsIHdoaWNoIHdpbGwgb2Z0ZW4gZmFpbC4gVGhlCisgIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlIG9mIG4gZGlmZmVycyBhY3Jvc3Mgc3lzdGVtcywgYnV0IGlzIGluIGFsbAorICBjYXNlcyBsZXNzIHRoYW4gdGhlIG1heGltdW0gcmVwcmVzZW50YWJsZSB2YWx1ZSBvZiBhIHNpemVfdC4KKyovCit2b2lkKiBkbG1hbGxvYyhzaXplX3QpOworCisvKgorICBmcmVlKHZvaWQqIHApCisgIFJlbGVhc2VzIHRoZSBjaHVuayBvZiBtZW1vcnkgcG9pbnRlZCB0byBieSBwLCB0aGF0IGhhZCBiZWVuIHByZXZpb3VzbHkKKyAgYWxsb2NhdGVkIHVzaW5nIG1hbGxvYyBvciBhIHJlbGF0ZWQgcm91dGluZSBzdWNoIGFzIHJlYWxsb2MuCisgIEl0IGhhcyBubyBlZmZlY3QgaWYgcCBpcyBudWxsLiBJZiBwIHdhcyBub3QgbWFsbG9jZWQgb3IgYWxyZWFkeQorICBmcmVlZCwgZnJlZShwKSB3aWxsIGJ5IGRlZmF1bHQgY2F1c2UgdGhlIGN1cnJlbnQgcHJvZ3JhbSB0byBhYm9ydC4KKyovCit2b2lkICBkbGZyZWUodm9pZCopOworCisvKgorICBjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUpOworICBSZXR1cm5zIGEgcG9pbnRlciB0byBuX2VsZW1lbnRzICogZWxlbWVudF9zaXplIGJ5dGVzLCB3aXRoIGFsbCBsb2NhdGlvbnMKKyAgc2V0IHRvIHplcm8uCisqLwordm9pZCogZGxjYWxsb2Moc2l6ZV90LCBzaXplX3QpOworCisvKgorICByZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBuKQorICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIGNodW5rIG9mIHNpemUgbiB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGRhdGEKKyAgYXMgZG9lcyBjaHVuayBwIHVwIHRvIHRoZSBtaW5pbXVtIG9mIChuLCBwJ3Mgc2l6ZSkgYnl0ZXMsIG9yIG51bGwKKyAgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLgorCisgIFRoZSByZXR1cm5lZCBwb2ludGVyIG1heSBvciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHAuIFRoZSBhbGdvcml0aG0KKyAgcHJlZmVycyBleHRlbmRpbmcgcCBpbiBtb3N0IGNhc2VzIHdoZW4gcG9zc2libGUsIG90aGVyd2lzZSBpdAorICBlbXBsb3lzIHRoZSBlcXVpdmFsZW50IG9mIGEgbWFsbG9jLWNvcHktZnJlZSBzZXF1ZW5jZS4KKworICBJZiBwIGlzIG51bGwsIHJlYWxsb2MgaXMgZXF1aXZhbGVudCB0byBtYWxsb2MuCisKKyAgSWYgc3BhY2UgaXMgbm90IGF2YWlsYWJsZSwgcmVhbGxvYyByZXR1cm5zIG51bGwsIGVycm5vIGlzIHNldCAoaWYgb24KKyAgQU5TSSkgYW5kIHAgaXMgTk9UIGZyZWVkLgorCisgIGlmIG4gaXMgZm9yIGZld2VyIGJ5dGVzIHRoYW4gYWxyZWFkeSBoZWxkIGJ5IHAsIHRoZSBuZXdseSB1bnVzZWQKKyAgc3BhY2UgaXMgbG9wcGVkIG9mZiBhbmQgZnJlZWQgaWYgcG9zc2libGUuICByZWFsbG9jIHdpdGggYSBzaXplCisgIGFyZ3VtZW50IG9mIHplcm8gKHJlKWFsbG9jYXRlcyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuCisKKyAgVGhlIG9sZCB1bml4IHJlYWxsb2MgY29udmVudGlvbiBvZiBhbGxvd2luZyB0aGUgbGFzdC1mcmVlJ2QgY2h1bmsKKyAgdG8gYmUgdXNlZCBhcyBhbiBhcmd1bWVudCB0byByZWFsbG9jIGlzIG5vdCBzdXBwb3J0ZWQuCisqLworCit2b2lkKiBkbHJlYWxsb2Modm9pZCosIHNpemVfdCk7CisKKy8qCisgIG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBuKTsKKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgY2h1bmsgb2YgbiBieXRlcywgYWxpZ25lZAorICBpbiBhY2NvcmQgd2l0aCB0aGUgYWxpZ25tZW50IGFyZ3VtZW50LgorCisgIFRoZSBhbGlnbm1lbnQgYXJndW1lbnQgc2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLiBJZiB0aGUgYXJndW1lbnQgaXMKKyAgbm90IGEgcG93ZXIgb2YgdHdvLCB0aGUgbmVhcmVzdCBncmVhdGVyIHBvd2VyIGlzIHVzZWQuCisgIDgtYnl0ZSBhbGlnbm1lbnQgaXMgZ3VhcmFudGVlZCBieSBub3JtYWwgbWFsbG9jIGNhbGxzLCBzbyBkb24ndAorICBib3RoZXIgY2FsbGluZyBtZW1hbGlnbiB3aXRoIGFuIGFyZ3VtZW50IG9mIDggb3IgbGVzcy4KKworICBPdmVycmVsaWFuY2Ugb24gbWVtYWxpZ24gaXMgYSBzdXJlIHdheSB0byBmcmFnbWVudCBzcGFjZS4KKyovCit2b2lkKiBkbG1lbWFsaWduKHNpemVfdCwgc2l6ZV90KTsKKworLyoKKyAgdmFsbG9jKHNpemVfdCBuKTsKKyAgRXF1aXZhbGVudCB0byBtZW1hbGlnbihwYWdlc2l6ZSwgbiksIHdoZXJlIHBhZ2VzaXplIGlzIHRoZSBwYWdlCisgIHNpemUgb2YgdGhlIHN5c3RlbS4gSWYgdGhlIHBhZ2VzaXplIGlzIHVua25vd24sIDQwOTYgaXMgdXNlZC4KKyovCit2b2lkKiBkbHZhbGxvYyhzaXplX3QpOworCisvKgorICBtYWxsb3B0KGludCBwYXJhbWV0ZXJfbnVtYmVyLCBpbnQgcGFyYW1ldGVyX3ZhbHVlKQorICBTZXRzIHR1bmFibGUgcGFyYW1ldGVycyBUaGUgZm9ybWF0IGlzIHRvIHByb3ZpZGUgYQorICAocGFyYW1ldGVyLW51bWJlciwgcGFyYW1ldGVyLXZhbHVlKSBwYWlyLiAgbWFsbG9wdCB0aGVuIHNldHMgdGhlCisgIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHRvIHRoZSBhcmd1bWVudCB2YWx1ZSBpZiBpdCBjYW4gKGkuZS4sIHNvCisgIGxvbmcgYXMgdGhlIHZhbHVlIGlzIG1lYW5pbmdmdWwpLCBhbmQgcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgZWxzZQorICAwLiAgVG8gd29ya2Fyb3VuZCB0aGUgZmFjdCB0aGF0IG1hbGxvcHQgaXMgc3BlY2lmaWVkIHRvIHVzZSBpbnQsCisgIG5vdCBzaXplX3QgcGFyYW1ldGVycywgdGhlIHZhbHVlIC0xIGlzIHNwZWNpYWxseSB0cmVhdGVkIGFzIHRoZQorICBtYXhpbXVtIHVuc2lnbmVkIHNpemVfdCB2YWx1ZS4KKworICBTVklEL1hQRy9BTlNJIGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbSBudW1iZXJzIGZvciBtYWxsb3B0LAorICBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZSBhcmUgdXNlIGluIHRoaXMgbWFsbG9jLAorICBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMgbWFsbG9jIGFsc28gc3VwcG9ydHMgb3RoZXIKKyAgb3B0aW9ucyBpbiBtYWxsb3B0LiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuICBCcmllZmx5LCBzdXBwb3J0ZWQKKyAgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93cyAobGlzdGVkIGRlZmF1bHRzIGFyZSBmb3IgInR5cGljYWwiCisgIGNvbmZpZ3VyYXRpb25zKS4KKworICBTeW1ib2wgICAgICAgICAgICBwYXJhbSAjICBkZWZhdWx0ICAgIGFsbG93ZWQgcGFyYW0gdmFsdWVzCisgIE1fVFJJTV9USFJFU0hPTEQgICAgIC0xICAgMioxMDI0KjEwMjQgICBhbnkgICAoLTEgZGlzYWJsZXMpCisgIE1fR1JBTlVMQVJJVFkgICAgICAgIC0yICAgICBwYWdlIHNpemUgICBhbnkgcG93ZXIgb2YgMiA+PSBwYWdlIHNpemUKKyAgTV9NTUFQX1RIUkVTSE9MRCAgICAgLTMgICAgICAyNTYqMTAyNCAgIGFueSAgIChvciAwIGlmIG5vIE1NQVAgc3VwcG9ydCkKKyovCitpbnQgZGxtYWxsb3B0KGludCwgaW50KTsKKworLyoKKyAgbWFsbG9jX2Zvb3RwcmludCgpOworICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLiAgVGhlIHRvdGFsCisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgYnkgbWFsbG9jLCByZWFsbG9jIGV0Yy4sIGlzIGxlc3MgdGhhbiB0aGlzCisgIHZhbHVlLiBVbmxpa2UgbWFsbGluZm8sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBvbmx5IGEgcHJlY29tcHV0ZWQKKyAgcmVzdWx0LCBzbyBjYW4gYmUgY2FsbGVkIGZyZXF1ZW50bHkgdG8gbW9uaXRvciBtZW1vcnkgY29uc3VtcHRpb24uCisgIEV2ZW4gaWYgbG9ja3MgYXJlIG90aGVyd2lzZSBkZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSB0aGVtLAorICBzbyByZXN1bHRzIG1pZ2h0IG5vdCBiZSB1cCB0byBkYXRlLgorKi8KK3NpemVfdCBkbG1hbGxvY19mb290cHJpbnQodm9pZCk7CisKKy8qCisgIG1hbGxvY19tYXhfZm9vdHByaW50KCk7CisgIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4gVGhpcworICB2YWx1ZSB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBjdXJyZW50IGZvb3RwcmludCBpZiBkZWFsbG9jYXRlZCBzcGFjZQorICBoYXMgYmVlbiByZWNsYWltZWQgYnkgdGhlIHN5c3RlbS4gVGhlIHBlYWsgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZAorICBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMgdmFsdWUuIFVubGlrZSBtYWxsaW5mbywKKyAgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZCByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQKKyAgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4gIEV2ZW4gaWYgbG9ja3MgYXJlCisgIG90aGVyd2lzZSBkZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSB0aGVtLCBzbyByZXN1bHRzIG1pZ2h0CisgIG5vdCBiZSB1cCB0byBkYXRlLgorKi8KK3NpemVfdCBkbG1hbGxvY19tYXhfZm9vdHByaW50KHZvaWQpOworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBtYWxsaW5mbygpCisgIFJldHVybnMgKGJ5IGNvcHkpIGEgc3RydWN0IGNvbnRhaW5pbmcgdmFyaW91cyBzdW1tYXJ5IHN0YXRpc3RpY3M6CisKKyAgYXJlbmE6ICAgICBjdXJyZW50IHRvdGFsIG5vbi1tbWFwcGVkIGJ5dGVzIGFsbG9jYXRlZCBmcm9tIHN5c3RlbQorICBvcmRibGtzOiAgIHRoZSBudW1iZXIgb2YgZnJlZSBjaHVua3MKKyAgc21ibGtzOiAgICBhbHdheXMgemVyby4KKyAgaGJsa3M6ICAgICBjdXJyZW50IG51bWJlciBvZiBtbWFwcGVkIHJlZ2lvbnMKKyAgaGJsa2hkOiAgICB0b3RhbCBieXRlcyBoZWxkIGluIG1tYXBwZWQgcmVnaW9ucworICB1c21ibGtzOiAgIHRoZSBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZS4gVGhpcyB3aWxsIGJlIGdyZWF0ZXIKKwkJdGhhbiBjdXJyZW50IHRvdGFsIGlmIHRyaW1taW5nIGhhcyBvY2N1cnJlZC4KKyAgZnNtYmxrczogICBhbHdheXMgemVybworICB1b3JkYmxrczogIGN1cnJlbnQgdG90YWwgYWxsb2NhdGVkIHNwYWNlIChub3JtYWwgb3IgbW1hcHBlZCkKKyAgZm9yZGJsa3M6ICB0b3RhbCBmcmVlIHNwYWNlCisgIGtlZXBjb3N0OiAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgaWRlYWxseSBiZSByZWxlYXNlZAorCSAgICAgICBiYWNrIHRvIHN5c3RlbSB2aWEgbWFsbG9jX3RyaW0uICgiaWRlYWxseSIgbWVhbnMgdGhhdAorCSAgICAgICBpdCBpZ25vcmVzIHBhZ2UgcmVzdHJpY3Rpb25zIGV0Yy4pCisKKyAgQmVjYXVzZSB0aGVzZSBmaWVsZHMgYXJlIGludHMsIGJ1dCBpbnRlcm5hbCBib29ra2VlcGluZyBtYXkKKyAgYmUga2VwdCBhcyBsb25ncywgdGhlIHJlcG9ydGVkIHZhbHVlcyBtYXkgd3JhcCBhcm91bmQgemVybyBhbmQKKyAgdGh1cyBiZSBpbmFjY3VyYXRlLgorKi8KK3N0cnVjdCBtYWxsaW5mbyBkbG1hbGxpbmZvKHZvaWQpOworI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKKy8qCisgIGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSwgdm9pZCogY2h1bmtzW10pOworCisgIGluZGVwZW5kZW50X2NhbGxvYyBpcyBzaW1pbGFyIHRvIGNhbGxvYywgYnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEKKyAgc2luZ2xlIGNsZWFyZWQgc3BhY2UsIGl0IHJldHVybnMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gbl9lbGVtZW50cworICBpbmRlcGVuZGVudCBlbGVtZW50cyB0aGF0IGNhbiBob2xkIGNvbnRlbnRzIG9mIHNpemUgZWxlbV9zaXplLCBlYWNoCisgIG9mIHdoaWNoIHN0YXJ0cyBvdXQgY2xlYXJlZCwgYW5kIGNhbiBiZSBpbmRlcGVuZGVudGx5IGZyZWVkLAorICByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFkamFjZW50bHkKKyAgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGggbXVsdGlwbGUgY2FsbG9jcyBvcgorICBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eSBpbiBzb21lCisgIGFwcGxpY2F0aW9ucy4KKworICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsLCB3aGljaCBpcworICBwcm9iYWJseSB0aGUgbW9zdCB0eXBpY2FsIHVzYWdlKS4gSWYgaXQgaXMgbnVsbCwgdGhlIHJldHVybmVkIGFycmF5CisgIGlzIGl0c2VsZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBhbHNvIGJlIGZyZWVkIHdoZW4gaXQgaXMKKyAgbm8gbG9uZ2VyIG5lZWRlZC4gT3RoZXJ3aXNlLCB0aGUgY2h1bmtzIGFycmF5IG11c3QgYmUgb2YgYXQgbGVhc3QKKyAgbl9lbGVtZW50cyBpbiBsZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZSBwb2ludGVycyB0byB0aGUKKyAgY2h1bmtzLgorCisgIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jYWxsb2MgcmV0dXJucyB0aGlzIHBvaW50ZXIgYXJyYXksIG9yCisgIG51bGwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiAgSWYgbl9lbGVtZW50cyBpcyB6ZXJvIGFuZCAiY2h1bmtzIgorICBpcyBudWxsLCBpdCByZXR1cm5zIGEgY2h1bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVtZW50cworICAod2hpY2ggc2hvdWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLgorCisgIEVhY2ggZWxlbWVudCBtdXN0IGJlIGluZGl2aWR1YWxseSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlcgorICBuZWVkZWQuIElmIHlvdSdkIGxpa2UgdG8gaW5zdGVhZCBiZSBhYmxlIHRvIGZyZWUgYWxsIGF0IG9uY2UsIHlvdQorICBzaG91bGQgaW5zdGVhZCB1c2UgcmVndWxhciBjYWxsb2MgYW5kIGFzc2lnbiBwb2ludGVycyBpbnRvIHRoaXMKKyAgc3BhY2UgdG8gcmVwcmVzZW50IGVsZW1lbnRzLiAgKEluIHRoaXMgY2FzZSB0aG91Z2gsIHlvdSBjYW5ub3QKKyAgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKKworICBpbmRlcGVuZGVudF9jYWxsb2Mgc2ltcGxpZmllcyBhbmQgc3BlZWRzIHVwIGltcGxlbWVudGF0aW9ucyBvZiBtYW55CisgIGtpbmRzIG9mIHBvb2xzLiAgSXQgbWF5IGFsc28gYmUgdXNlZnVsIHdoZW4gY29uc3RydWN0aW5nIGxhcmdlIGRhdGEKKyAgc3RydWN0dXJlcyB0aGF0IGluaXRpYWxseSBoYXZlIGEgZml4ZWQgbnVtYmVyIG9mIGZpeGVkLXNpemVkIG5vZGVzLAorICBidXQgdGhlIG51bWJlciBpcyBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lLCBhbmQgc29tZSBvZiB0aGUgbm9kZXMKKyAgbWF5IGxhdGVyIG5lZWQgdG8gYmUgZnJlZWQuIEZvciBleGFtcGxlOgorCisgIHN0cnVjdCBOb2RlIHsgaW50IGl0ZW07IHN0cnVjdCBOb2RlKiBuZXh0OyB9OworCisgIHN0cnVjdCBOb2RlKiBidWlsZF9saXN0KCkgeworICAgIHN0cnVjdCBOb2RlKiogcG9vbDsKKyAgICBpbnQgbiA9IHJlYWRfbnVtYmVyX29mX25vZGVzX25lZWRlZCgpOworICAgIGlmIChuIDw9IDApIHJldHVybiAwOworICAgIHBvb2wgPSAoc3RydWN0IE5vZGUqKikoaW5kZXBlbmRlbnRfY2FsbG9jKG4sIHNpemVvZihzdHJ1Y3QgTm9kZSksIDApOworICAgIGlmIChwb29sID09IDApIGRpZSgpOworICAgIC8vIG9yZ2FuaXplIGludG8gYSBsaW5rZWQgbGlzdC4uLgorICAgIHN0cnVjdCBOb2RlKiBmaXJzdCA9IHBvb2xbMF07CisgICAgZm9yIChpID0gMDsgaSA8IG4tMTsgKytpKQorICAgICAgcG9vbFtpXS0+bmV4dCA9IHBvb2xbaSsxXTsKKyAgICBmcmVlKHBvb2wpOyAgICAgLy8gQ2FuIG5vdyBmcmVlIHRoZSBhcnJheSAob3Igbm90LCBpZiBpdCBpcyBuZWVkZWQgbGF0ZXIpCisgICAgcmV0dXJuIGZpcnN0OworICB9CisqLwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCwgc2l6ZV90LCB2b2lkKiopOworCisvKgorICBpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IHNpemVzW10sIHZvaWQqIGNodW5rc1tdKTsKKworICBpbmRlcGVuZGVudF9jb21hbGxvYyBhbGxvY2F0ZXMsIGFsbCBhdCBvbmNlLCBhIHNldCBvZiBuX2VsZW1lbnRzCisgIGNodW5rcyB3aXRoIHNpemVzIGluZGljYXRlZCBpbiB0aGUgInNpemVzIiBhcnJheS4gICAgSXQgcmV0dXJucworICBhbiBhcnJheSBvZiBwb2ludGVycyB0byB0aGVzZSBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBjYW4gYmUKKyAgaW5kZXBlbmRlbnRseSBmcmVlZCwgcmVhbGxvYydlZCBldGMuIFRoZSBlbGVtZW50cyBhcmUgZ3VhcmFudGVlZCB0bworICBiZSBhZGphY2VudGx5IGFsbG9jYXRlZCAodGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBvY2N1ciB3aXRoCisgIG11bHRpcGxlIGNhbGxvY3Mgb3IgbWFsbG9jcyksIHdoaWNoIG1heSBhbHNvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHkKKyAgaW4gc29tZSBhcHBsaWNhdGlvbnMuCisKKyAgVGhlICJjaHVua3MiIGFyZ3VtZW50IGlzIG9wdGlvbmFsIChpLmUuLCBtYXkgYmUgbnVsbCkuIElmIGl0IGlzIG51bGwKKyAgdGhlIHJldHVybmVkIGFycmF5IGlzIGl0c2VsZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBhbHNvCisgIGJlIGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gT3RoZXJ3aXNlLCB0aGUgY2h1bmtzIGFycmF5CisgIG11c3QgYmUgb2YgYXQgbGVhc3Qgbl9lbGVtZW50cyBpbiBsZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZQorICBwb2ludGVycyB0byB0aGUgY2h1bmtzLgorCisgIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jb21hbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKKyAgbnVsbCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kIGNodW5rcyBpcworICBudWxsLCBpdCByZXR1cm5zIGEgY2h1bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVtZW50cworICAod2hpY2ggc2hvdWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLgorCisgIEVhY2ggZWxlbWVudCBtdXN0IGJlIGluZGl2aWR1YWxseSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlcgorICBuZWVkZWQuIElmIHlvdSdkIGxpa2UgdG8gaW5zdGVhZCBiZSBhYmxlIHRvIGZyZWUgYWxsIGF0IG9uY2UsIHlvdQorICBzaG91bGQgaW5zdGVhZCB1c2UgYSBzaW5nbGUgcmVndWxhciBtYWxsb2MsIGFuZCBhc3NpZ24gcG9pbnRlcnMgYXQKKyAgcGFydGljdWxhciBvZmZzZXRzIGluIHRoZSBhZ2dyZWdhdGUgc3BhY2UuIChJbiB0aGlzIGNhc2UgdGhvdWdoLCB5b3UKKyAgY2Fubm90IGluZGVwZW5kZW50bHkgZnJlZSBlbGVtZW50cy4pCisKKyAgaW5kZXBlbmRlbnRfY29tYWxsYWMgZGlmZmVycyBmcm9tIGluZGVwZW5kZW50X2NhbGxvYyBpbiB0aGF0IGVhY2gKKyAgZWxlbWVudCBtYXkgaGF2ZSBhIGRpZmZlcmVudCBzaXplLCBhbmQgYWxzbyB0aGF0IGl0IGRvZXMgbm90CisgIGF1dG9tYXRpY2FsbHkgY2xlYXIgZWxlbWVudHMuCisKKyAgaW5kZXBlbmRlbnRfY29tYWxsb2MgY2FuIGJlIHVzZWQgdG8gc3BlZWQgdXAgYWxsb2NhdGlvbiBpbiBjYXNlcworICB3aGVyZSBzZXZlcmFsIHN0cnVjdHMgb3Igb2JqZWN0cyBtdXN0IGFsd2F5cyBiZSBhbGxvY2F0ZWQgYXQgdGhlCisgIHNhbWUgdGltZS4gIEZvciBleGFtcGxlOgorCisgIHN0cnVjdCBIZWFkIHsgLi4uIH0KKyAgc3RydWN0IEZvb3QgeyAuLi4gfQorCisgIHZvaWQgc2VuZF9tZXNzYWdlKGNoYXIqIG1zZykgeworICAgIGludCBtc2dsZW4gPSBzdHJsZW4obXNnKTsKKyAgICBzaXplX3Qgc2l6ZXNbM10gPSB7IHNpemVvZihzdHJ1Y3QgSGVhZCksIG1zZ2xlbiwgc2l6ZW9mKHN0cnVjdCBGb290KSB9OworICAgIHZvaWQqIGNodW5rc1szXTsKKyAgICBpZiAoaW5kZXBlbmRlbnRfY29tYWxsb2MoMywgc2l6ZXMsIGNodW5rcykgPT0gMCkKKyAgICAgIGRpZSgpOworICAgIHN0cnVjdCBIZWFkKiBoZWFkID0gKHN0cnVjdCBIZWFkKikoY2h1bmtzWzBdKTsKKyAgICBjaGFyKiAgICAgICAgYm9keSA9IChjaGFyKikoY2h1bmtzWzFdKTsKKyAgICBzdHJ1Y3QgRm9vdCogZm9vdCA9IChzdHJ1Y3QgRm9vdCopKGNodW5rc1syXSk7CisgICAgLy8gLi4uCisgIH0KKworICBJbiBnZW5lcmFsIHRob3VnaCwgaW5kZXBlbmRlbnRfY29tYWxsb2MgaXMgd29ydGggdXNpbmcgb25seSBmb3IKKyAgbGFyZ2VyIHZhbHVlcyBvZiBuX2VsZW1lbnRzLiBGb3Igc21hbGwgdmFsdWVzLCB5b3UgcHJvYmFibHkgd29uJ3QKKyAgZGV0ZWN0IGVub3VnaCBkaWZmZXJlbmNlIGZyb20gc2VyaWVzIG9mIG1hbGxvYyBjYWxscyB0byBib3RoZXIuCisKKyAgT3ZlcnVzZSBvZiBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gaW5jcmVhc2Ugb3ZlcmFsbCBtZW1vcnkgdXNhZ2UsCisgIHNpbmNlIGl0IGNhbm5vdCByZXVzZSBleGlzdGluZyBub25jb250aWd1b3VzIHNtYWxsIGNodW5rcyB0aGF0CisgIG1pZ2h0IGJlIGF2YWlsYWJsZSBmb3Igc29tZSBvZiB0aGUgZWxlbWVudHMuCisqLwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90LCBzaXplX3QqLCB2b2lkKiopOworCisKKy8qCisgIHB2YWxsb2Moc2l6ZV90IG4pOworICBFcXVpdmFsZW50IHRvIHZhbGxvYyhtaW5pbXVtLXBhZ2UtdGhhdC1ob2xkcyhuKSksIHRoYXQgaXMsCisgIHJvdW5kIHVwIG4gdG8gbmVhcmVzdCBwYWdlc2l6ZS4KKyAqLwordm9pZCogIGRscHZhbGxvYyhzaXplX3QpOworCisvKgorICBtYWxsb2NfdHJpbShzaXplX3QgcGFkKTsKKworICBJZiBwb3NzaWJsZSwgZ2l2ZXMgbWVtb3J5IGJhY2sgdG8gdGhlIHN5c3RlbSAodmlhIG5lZ2F0aXZlIGFyZ3VtZW50cworICB0byBzYnJrKSBpZiB0aGVyZSBpcyB1bnVzZWQgbWVtb3J5IGF0IHRoZSBgaGlnaCcgZW5kIG9mIHRoZSBtYWxsb2MKKyAgcG9vbCBvciBpbiB1bnVzZWQgTU1BUCBzZWdtZW50cy4gWW91IGNhbiBjYWxsIHRoaXMgYWZ0ZXIgZnJlZWluZworICBsYXJnZSBibG9ja3Mgb2YgbWVtb3J5IHRvIHBvdGVudGlhbGx5IHJlZHVjZSB0aGUgc3lzdGVtLWxldmVsIG1lbW9yeQorICByZXF1aXJlbWVudHMgb2YgYSBwcm9ncmFtLiBIb3dldmVyLCBpdCBjYW5ub3QgZ3VhcmFudGVlIHRvIHJlZHVjZQorICBtZW1vcnkuIFVuZGVyIHNvbWUgYWxsb2NhdGlvbiBwYXR0ZXJucywgc29tZSBsYXJnZSBmcmVlIGJsb2NrcyBvZgorICBtZW1vcnkgd2lsbCBiZSBsb2NrZWQgYmV0d2VlbiB0d28gdXNlZCBjaHVua3MsIHNvIHRoZXkgY2Fubm90IGJlCisgIGdpdmVuIGJhY2sgdG8gdGhlIHN5c3RlbS4KKworICBUaGUgYHBhZCcgYXJndW1lbnQgdG8gbWFsbG9jX3RyaW0gcmVwcmVzZW50cyB0aGUgYW1vdW50IG9mIGZyZWUKKyAgdHJhaWxpbmcgc3BhY2UgdG8gbGVhdmUgdW50cmltbWVkLiBJZiB0aGlzIGFyZ3VtZW50IGlzIHplcm8sIG9ubHkKKyAgdGhlIG1pbmltdW0gYW1vdW50IG9mIG1lbW9yeSB0byBtYWludGFpbiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMKKyAgd2lsbCBiZSBsZWZ0LiBOb24temVybyBhcmd1bWVudHMgY2FuIGJlIHN1cHBsaWVkIHRvIG1haW50YWluIGVub3VnaAorICB0cmFpbGluZyBzcGFjZSB0byBzZXJ2aWNlIGZ1dHVyZSBleHBlY3RlZCBhbGxvY2F0aW9ucyB3aXRob3V0IGhhdmluZworICB0byByZS1vYnRhaW4gbWVtb3J5IGZyb20gdGhlIHN5c3RlbS4KKworICBNYWxsb2NfdHJpbSByZXR1cm5zIDEgaWYgaXQgYWN0dWFsbHkgcmVsZWFzZWQgYW55IG1lbW9yeSwgZWxzZSAwLgorKi8KK2ludCAgZGxtYWxsb2NfdHJpbShzaXplX3QpOworCisvKgorICBtYWxsb2Nfc3RhdHMoKTsKKyAgUHJpbnRzIG9uIHN0ZGVyciB0aGUgYW1vdW50IG9mIHNwYWNlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbSAoYm90aAorICB2aWEgc2JyayBhbmQgbW1hcCksIHRoZSBtYXhpbXVtIGFtb3VudCAod2hpY2ggbWF5IGJlIG1vcmUgdGhhbgorICBjdXJyZW50IGlmIG1hbGxvY190cmltIGFuZC9vciBtdW5tYXAgZ290IGNhbGxlZCksIGFuZCB0aGUgY3VycmVudAorICBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIHZpYSBtYWxsb2MgKG9yIHJlYWxsb2MsIGV0YykgYnV0IG5vdCB5ZXQKKyAgZnJlZWQuIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkLCBub3QgdGhlCisgIG51bWJlciByZXF1ZXN0ZWQuIEl0IHdpbGwgYmUgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQKKyAgYmVjYXVzZSBvZiBhbGlnbm1lbnQgYW5kIGJvb2trZWVwaW5nIG92ZXJoZWFkLiBCZWNhdXNlIGl0IGluY2x1ZGVzCisgIGFsaWdubWVudCB3YXN0YWdlIGFzIGJlaW5nIGluIHVzZSwgdGhpcyBmaWd1cmUgbWF5IGJlIGdyZWF0ZXIgdGhhbgorICB6ZXJvIGV2ZW4gd2hlbiBubyB1c2VyLWxldmVsIGNodW5rcyBhcmUgYWxsb2NhdGVkLgorCisgIFRoZSByZXBvcnRlZCBjdXJyZW50IGFuZCBtYXhpbXVtIHN5c3RlbSBtZW1vcnkgY2FuIGJlIGluYWNjdXJhdGUgaWYKKyAgYSBwcm9ncmFtIG1ha2VzIG90aGVyIGNhbGxzIHRvIHN5c3RlbSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMKKyAgKG5vcm1hbGx5IHNicmspIG91dHNpZGUgb2YgbWFsbG9jLgorCisgIG1hbGxvY19zdGF0cyBwcmludHMgb25seSB0aGUgbW9zdCBjb21tb25seSBpbnRlcmVzdGluZyBzdGF0aXN0aWNzLgorICBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIG1hbGxpbmZvLgorKi8KK3ZvaWQgIGRsbWFsbG9jX3N0YXRzKHZvaWQpOworCisjZW5kaWYgLyogT05MWV9NU1BBQ0VTICovCisKKy8qCisgIG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKiBwKTsKKworICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgeW91IGNhbiBhY3R1YWxseSB1c2UgaW4KKyAgYW4gYWxsb2NhdGVkIGNodW5rLCB3aGljaCBtYXkgYmUgbW9yZSB0aGFuIHlvdSByZXF1ZXN0ZWQgKGFsdGhvdWdoCisgIG9mdGVuIG5vdCkgZHVlIHRvIGFsaWdubWVudCBhbmQgbWluaW11bSBzaXplIGNvbnN0cmFpbnRzLgorICBZb3UgY2FuIHVzZSB0aGlzIG1hbnkgYnl0ZXMgd2l0aG91dCB3b3JyeWluZyBhYm91dAorICBvdmVyd3JpdGluZyBvdGhlciBhbGxvY2F0ZWQgb2JqZWN0cy4gVGhpcyBpcyBub3QgYSBwYXJ0aWN1bGFybHkgZ3JlYXQKKyAgcHJvZ3JhbW1pbmcgcHJhY3RpY2UuIG1hbGxvY191c2FibGVfc2l6ZSBjYW4gYmUgbW9yZSB1c2VmdWwgaW4KKyAgZGVidWdnaW5nIGFuZCBhc3NlcnRpb25zLCBmb3IgZXhhbXBsZToKKworICBwID0gbWFsbG9jKG4pOworICBhc3NlcnQobWFsbG9jX3VzYWJsZV9zaXplKHApID49IDI1Nik7CisqLworc2l6ZV90IGRsbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqKTsKKworCisjaWYgTVNQQUNFUworCisvKgorICBtc3BhY2UgaXMgYW4gb3BhcXVlIHR5cGUgcmVwcmVzZW50aW5nIGFuIGluZGVwZW5kZW50CisgIHJlZ2lvbiBvZiBzcGFjZSB0aGF0IHN1cHBvcnRzIG1zcGFjZV9tYWxsb2MsIGV0Yy4KKyovCit0eXBlZGVmIHZvaWQqIG1zcGFjZTsKKworLyoKKyAgY3JlYXRlX21zcGFjZSBjcmVhdGVzIGFuZCByZXR1cm5zIGEgbmV3IGluZGVwZW5kZW50IHNwYWNlIHdpdGggdGhlCisgIGdpdmVuIGluaXRpYWwgY2FwYWNpdHksIG9yLCBpZiAwLCB0aGUgZGVmYXVsdCBncmFudWxhcml0eSBzaXplLiAgSXQKKyAgcmV0dXJucyBudWxsIGlmIHRoZXJlIGlzIG5vIHN5c3RlbSBtZW1vcnkgYXZhaWxhYmxlIHRvIGNyZWF0ZSB0aGUKKyAgc3BhY2UuICBJZiBhcmd1bWVudCBsb2NrZWQgaXMgbm9uLXplcm8sIHRoZSBzcGFjZSB1c2VzIGEgc2VwYXJhdGUKKyAgbG9jayB0byBjb250cm9sIGFjY2Vzcy4gVGhlIGNhcGFjaXR5IG9mIHRoZSBzcGFjZSB3aWxsIGdyb3cKKyAgZHluYW1pY2FsbHkgYXMgbmVlZGVkIHRvIHNlcnZpY2UgbXNwYWNlX21hbGxvYyByZXF1ZXN0cy4gIFlvdSBjYW4KKyAgY29udHJvbCB0aGUgc2l6ZXMgb2YgaW5jcmVtZW50YWwgaW5jcmVhc2VzIG9mIHRoaXMgc3BhY2UgYnkKKyAgY29tcGlsaW5nIHdpdGggYSBkaWZmZXJlbnQgREVGQVVMVF9HUkFOVUxBUklUWSBvciBkeW5hbWljYWxseQorICBzZXR0aW5nIHdpdGggbWFsbG9wdChNX0dSQU5VTEFSSVRZLCB2YWx1ZSkuCisqLworbXNwYWNlIGNyZWF0ZV9tc3BhY2Uoc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKTsKKworLyoKKyAgZGVzdHJveV9tc3BhY2UgZGVzdHJveXMgdGhlIGdpdmVuIHNwYWNlLCBhbmQgYXR0ZW1wdHMgdG8gcmV0dXJuIGFsbAorICBvZiBpdHMgbWVtb3J5IGJhY2sgdG8gdGhlIHN5c3RlbSwgcmV0dXJuaW5nIHRoZSB0b3RhbCBudW1iZXIgb2YKKyAgYnl0ZXMgZnJlZWQuIEFmdGVyIGRlc3RydWN0aW9uLCB0aGUgcmVzdWx0cyBvZiBhY2Nlc3MgdG8gYWxsIG1lbW9yeQorICB1c2VkIGJ5IHRoZSBzcGFjZSBiZWNvbWUgdW5kZWZpbmVkLgorKi8KK3NpemVfdCBkZXN0cm95X21zcGFjZShtc3BhY2UgbXNwKTsKKworLyoKKyAgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UgdXNlcyB0aGUgbWVtb3J5IHN1cHBsaWVkIGFzIHRoZSBpbml0aWFsIGJhc2UKKyAgb2YgYSBuZXcgbXNwYWNlLiBQYXJ0IChsZXNzIHRoYW4gMTI4KnNpemVvZihzaXplX3QpIGJ5dGVzKSBvZiB0aGlzCisgIHNwYWNlIGlzIHVzZWQgZm9yIGJvb2trZWVwaW5nLCBzbyB0aGUgY2FwYWNpdHkgbXVzdCBiZSBhdCBsZWFzdCB0aGlzCisgIGxhcmdlLiAoT3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQuKSBXaGVuIHRoaXMgaW5pdGlhbCBzcGFjZSBpcworICBleGhhdXN0ZWQsIGFkZGl0aW9uYWwgbWVtb3J5IHdpbGwgYmUgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLgorICBEZXN0cm95aW5nIHRoaXMgc3BhY2Ugd2lsbCBkZWFsbG9jYXRlIGFsbCBhZGRpdGlvbmFsbHkgYWxsb2NhdGVkCisgIHNwYWNlIChpZiBwb3NzaWJsZSkgYnV0IG5vdCB0aGUgaW5pdGlhbCBiYXNlLgorKi8KK21zcGFjZSBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSh2b2lkKiBiYXNlLCBzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpOworCisvKgorICBtc3BhY2VfbW1hcF9sYXJnZV9jaHVua3MgY29udHJvbHMgd2hldGhlciByZXF1ZXN0cyBmb3IgbGFyZ2UgY2h1bmtzCisgIGFyZSBhbGxvY2F0ZWQgaW4gdGhlaXIgb3duIG1tYXBwZWQgcmVnaW9ucywgc2VwYXJhdGUgZnJvbSBvdGhlcnMgaW4KKyAgdGhpcyBtc3BhY2UuIEJ5IGRlZmF1bHQgdGhpcyBpcyBlbmFibGVkLCB3aGljaCByZWR1Y2VzCisgIGZyYWdtZW50YXRpb24uIEhvd2V2ZXIsIHN1Y2ggY2h1bmtzIGFyZSBub3QgbmVjZXNzYXJpbHkgcmVsZWFzZWQgdG8KKyAgdGhlIHN5c3RlbSB1cG9uIGRlc3Ryb3lfbXNwYWNlLiAgRGlzYWJsaW5nIGJ5IHNldHRpbmcgdG8gZmFsc2UgbWF5CisgIGluY3JlYXNlIGZyYWdtZW50YXRpb24sIGJ1dCBhdm9pZHMgbGVha2FnZSB3aGVuIHJlbHlpbmcgb24KKyAgZGVzdHJveV9tc3BhY2UgdG8gcmVsZWFzZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCB1c2luZyB0aGlzIHNwYWNlLgorKi8KK2ludCBtc3BhY2VfbW1hcF9sYXJnZV9jaHVua3MobXNwYWNlIG1zcCwgaW50IGVuYWJsZSk7CisKKworLyoKKyAgbXNwYWNlX21hbGxvYyBiZWhhdmVzIGFzIG1hbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCogbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfZnJlZSBiZWhhdmVzIGFzIGZyZWUsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX2ZyZWUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZC4KKyAgZnJlZSBtYXkgYmUgY2FsbGVkIGluc3RlYWQgb2YgbXNwYWNlX2ZyZWUgYmVjYXVzZSBmcmVlZCBjaHVua3MgZnJvbQorICBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcgc3BhY2VzLgorKi8KK3ZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCogbWVtKTsKKworLyoKKyAgbXNwYWNlX3JlYWxsb2MgYmVoYXZlcyBhcyByZWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKworICBJZiBjb21waWxlZCB3aXRoIEZPT1RFUlM9PTEsIG1zcGFjZV9yZWFsbG9jIGlzIG5vdCBhY3R1YWxseQorICBuZWVkZWQuICByZWFsbG9jIG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvZiBtc3BhY2VfcmVhbGxvYyBiZWNhdXNlCisgIHJlYWxsb2NlZCBjaHVua3MgZnJvbSBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcKKyAgc3BhY2VzLgorKi8KK3ZvaWQqIG1zcGFjZV9yZWFsbG9jKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSwgc2l6ZV90IG5ld3NpemUpOworCisvKgorICBtc3BhY2VfY2FsbG9jIGJlaGF2ZXMgYXMgY2FsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKTsKKworLyoKKyAgbXNwYWNlX21lbWFsaWduIGJlaGF2ZXMgYXMgbWVtYWxpZ24sIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqIG1zcGFjZV9tZW1hbGlnbihtc3BhY2UgbXNwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY2FsbG9jLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKwkJCQkgc2l6ZV90IGVsZW1fc2l6ZSwgdm9pZCogY2h1bmtzW10pOworCisvKgorICBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MgYmVoYXZlcyBhcyBpbmRlcGVuZGVudF9jb21hbGxvYywgYnV0CisgIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKwkJCQkgICBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pOworCisvKgorICBtc3BhY2VfZm9vdHByaW50KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlCisgIHN5c3RlbSBmb3IgdGhpcyBzcGFjZS4KKyovCitzaXplX3QgbXNwYWNlX2Zvb3RwcmludChtc3BhY2UgbXNwKTsKKworLyoKKyAgbXNwYWNlX21heF9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBwZWFrIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZQorICBzeXN0ZW0gZm9yIHRoaXMgc3BhY2UuCisqLworc2l6ZV90IG1zcGFjZV9tYXhfZm9vdHByaW50KG1zcGFjZSBtc3ApOworCisKKyNpZiAhTk9fTUFMTElORk8KKy8qCisgIG1zcGFjZV9tYWxsaW5mbyBiZWhhdmVzIGFzIG1hbGxpbmZvLCBidXQgcmVwb3J0cyBwcm9wZXJ0aWVzIG9mCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCitzdHJ1Y3QgbWFsbGluZm8gbXNwYWNlX21hbGxpbmZvKG1zcGFjZSBtc3ApOworI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKKy8qCisgIG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKiBwKSBiZWhhdmVzIHRoZSBzYW1lIGFzIG1hbGxvY191c2FibGVfc2l6ZTsKKyovCisgIHNpemVfdCBtc3BhY2VfdXNhYmxlX3NpemUodm9pZCogbWVtKTsKKworLyoKKyAgbXNwYWNlX21hbGxvY19zdGF0cyBiZWhhdmVzIGFzIG1hbGxvY19zdGF0cywgYnV0IHJlcG9ydHMKKyAgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApOworCisvKgorICBtc3BhY2VfdHJpbSBiZWhhdmVzIGFzIG1hbGxvY190cmltLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCitpbnQgbXNwYWNlX3RyaW0obXNwYWNlIG1zcCwgc2l6ZV90IHBhZCk7CisKKy8qCisgIEFuIGFsaWFzIGZvciBtYWxsb3B0LgorKi8KK2ludCBtc3BhY2VfbWFsbG9wdChpbnQsIGludCk7CisKKyNlbmRpZiAvKiBNU1BBQ0VTICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsgIC8qIGVuZCBvZiBleHRlcm4gIkMiICovCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyoKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFRvIG1ha2UgYSBmdWxseSBjdXN0b21pemFibGUgbWFsbG9jLmggaGVhZGVyIGZpbGUsIGN1dCBldmVyeXRoaW5nCisgIGFib3ZlIHRoaXMgbGluZSwgcHV0IGludG8gZmlsZSBtYWxsb2MuaCwgZWRpdCB0byBzdWl0LCBhbmQgI2luY2x1ZGUgaXQKKyAgb24gdGhlIG5leHQgbGluZSwgYXMgd2VsbCBhcyBpbiBwcm9ncmFtcyB0aGF0IHVzZSB0aGlzIG1hbGxvYy4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCisvKiAjaW5jbHVkZSAibWFsbG9jLmgiICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGludGVybmFsICNpbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBXSU4zMgorI2lmbmRlZiBfX0dOVUNfXworI3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlIDogNDE0NiApIC8qIG5vICJ1bnNpZ25lZCIgd2FybmluZ3MgKi8KKyNlbmRpZgorI2VuZGlmIC8qIFdJTjMyICovCisKKyNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAvKiBmb3IgcHJpbnRpbmcgaW4gbWFsbG9jX3N0YXRzICovCisKKyNpZm5kZWYgTEFDS1NfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+ICAgICAgIC8qIGZvciBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gKi8KKyNlbmRpZiAvKiBMQUNLU19FUlJOT19IICovCisjaWYgRk9PVEVSUworI2luY2x1ZGUgPHRpbWUuaD4gICAgICAgIC8qIGZvciBtYWdpYyBpbml0aWFsaXphdGlvbiAqLworI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyNpZm5kZWYgTEFDS1NfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4gICAgICAvKiBmb3IgYWJvcnQoKSAqLworI2VuZGlmIC8qIExBQ0tTX1NURExJQl9IICovCisjaWZkZWYgREVCVUcKKyNpZiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRQorI2RlZmluZSBhc3NlcnQoeCkgaWYoISh4KSkgQUJPUlQKKyNlbHNlIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYgLyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8KKyNlbHNlICAvKiBERUJVRyAqLworI2lmbmRlZiBhc3NlcnQKKyNkZWZpbmUgYXNzZXJ0KHgpCisjZW5kaWYKKyNkZWZpbmUgREVCVUcgMAorI2VuZGlmIC8qIERFQlVHICovCisjaWZuZGVmIExBQ0tTX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgLyogZm9yIG1lbXNldCBldGMgKi8KKyNlbmRpZiAgLyogTEFDS1NfU1RSSU5HX0ggKi8KKyNpZiBVU0VfQlVJTFRJTl9GRlMKKyNpZm5kZWYgTEFDS1NfU1RSSU5HU19ICisjaW5jbHVkZSA8c3RyaW5ncy5oPiAgICAgLyogZm9yIGZmcyAqLworI2VuZGlmIC8qIExBQ0tTX1NUUklOR1NfSCAqLworI2VuZGlmIC8qIFVTRV9CVUlMVElOX0ZGUyAqLworI2lmIEhBVkVfTU1BUAorI2lmbmRlZiBMQUNLU19TWVNfTU1BTl9ICisjaW5jbHVkZSA8c3lzL21tYW4uaD4gICAgLyogZm9yIG1tYXAgKi8KKyNlbmRpZiAvKiBMQUNLU19TWVNfTU1BTl9IICovCisjaWZuZGVmIExBQ0tTX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmIC8qIExBQ0tTX0ZDTlRMX0ggKi8KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKyNpZm5kZWYgTEFDS1NfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4gICAgIC8qIGZvciBzYnJrLCBzeXNjb25mICovCisjZWxzZSAvKiBMQUNLU19VTklTVERfSCAqLworI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX09wZW5CU0RfXykgJiYgIWRlZmluZWQoX19OZXRCU0RfXykKK2V4dGVybiB2b2lkKiAgICAgc2JyayhwdHJkaWZmX3QpOworI2VuZGlmIC8qIEZyZWVCU0QgZXRjICovCisjZW5kaWYgLyogTEFDS1NfVU5JU1REX0ggKi8KKworLyogRGVjbGFyYXRpb25zIGZvciBsb2NraW5nICovCisjaWYgVVNFX0xPQ0tTCisjaWZuZGVmIFdJTjMyCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2lmIGRlZmluZWQgKF9fU1ZSNCkgJiYgZGVmaW5lZCAoX19zdW4pICAvKiBzb2xhcmlzICovCisjaW5jbHVkZSA8dGhyZWFkLmg+CisjZW5kaWYgLyogc29sYXJpcyAqLworI2Vsc2UKKyNpZm5kZWYgX01fQU1ENjQKKy8qIFRoZXNlIGFyZSBhbHJlYWR5IGRlZmluZWQgb24gQU1ENjQgYnVpbGRzICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjaWZuZGVmIF9fTUlOR1czMl9fCitMT05HIF9fY2RlY2wgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKExPTkcgdm9sYXRpbGUgKkRlc3QsIExPTkcgRXhjaGFuZ2UsIExPTkcgQ29tcCk7CitMT05HIF9fY2RlY2wgX0ludGVybG9ja2VkRXhjaGFuZ2UoTE9ORyB2b2xhdGlsZSAqVGFyZ2V0LCBMT05HIFZhbHVlKTsKKyNlbmRpZgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKyNlbmRpZiAvKiBfTV9BTUQ2NCAqLworI2lmbmRlZiBfX01JTkdXMzJfXworI3ByYWdtYSBpbnRyaW5zaWMgKF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSkKKyNwcmFnbWEgaW50cmluc2ljIChfSW50ZXJsb2NrZWRFeGNoYW5nZSkKKyNlbHNlCisgIC8qIC0tWyBzdGFydCBHQ0MgY29tcGF0aWJpbGl0eSBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKiBDb21wYXRpYmlsaXR5IDxpbnRyaW5feDg2Lmg+IGhlYWRlciBmb3IgR0NDIC0tIEdDQyBlcXVpdmFsZW50cyBvZiBpbnRyaW5zaWMKKyAgICogTWljcm9zb2Z0IFZpc3VhbCBDKysgZnVuY3Rpb25zLiBPcmlnaW5hbGx5IGRldmVsb3BlZCBmb3IgdGhlIFJlYWN0T1MKKyAgICogKDxodHRwOi8vd3d3LnJlYWN0b3Mub3JnLz4pIGFuZCBUaW55S3JubCAoPGh0dHA6Ly93d3cudGlueWtybmwub3JnLz4pCisgICAqIHByb2plY3RzLgorICAgKgorICAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgS0pLOjpIeXBlcmlvbiA8aGFja2J1bm55QHJlYWN0b3MuY29tPgorICAgKgorICAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICAgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgICAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICAgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAgICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAgICoKKyAgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAgICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgICAqCisgICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgICAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICAgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAgICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICAgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICAgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgICovCisKKyAgLyoqKiBBdG9taWMgb3BlcmF0aW9ucyAqKiovCisgICNpZiAoX19HTlVDX18gKiAxMDAwMCArIF9fR05VQ19NSU5PUl9fICogMTAwICsgX19HTlVDX1BBVENITEVWRUxfXykgPiA0MDEwMAorICAgICN1bmRlZiBfUmVhZFdyaXRlQmFycmllcgorICAgICNkZWZpbmUgX1JlYWRXcml0ZUJhcnJpZXIoKSBfX3N5bmNfc3luY2hyb25pemUoKQorICAjZWxzZQorICAgIHN0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBsb25nIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCh2b2xhdGlsZSBsb25nICogY29uc3QgVGFyZ2V0LCBjb25zdCBsb25nIFZhbHVlKQorICAgIHsKKyAgICAgIGxvbmcgcmVzOworICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGclejAgJTIsICUwIiA6ICI9ZyIgKCooVGFyZ2V0KSksICI9ciIgKHJlcykgOiAiMSIgKFZhbHVlKSk7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBfTWVtb3J5QmFycmllcih2b2lkKQorICAgIHsKKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIiIDogOiA6ICJtZW1vcnkiKTsKKyAgICB9CisgICAgI2RlZmluZSBfUmVhZFdyaXRlQmFycmllcigpIF9NZW1vcnlCYXJyaWVyKCkKKyAgI2VuZGlmCisgIC8qIEJVR0JVRzogR0NDIG9ubHkgc3VwcG9ydHMgZnVsbCBiYXJyaWVycyAqLworICBzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgbG9uZyBfSW50ZXJsb2NrZWRFeGNoYW5nZSh2b2xhdGlsZSBsb25nICogY29uc3QgVGFyZ2V0LCBjb25zdCBsb25nIFZhbHVlKQorICB7CisgICAgLyogTk9URTogX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0IHdvdWxkIGJlIGFuIGFjcXVpcmUgYmFycmllciwgc28gd2UgZm9yY2UgYSBmdWxsIGJhcnJpZXIgKi8KKyAgICBfUmVhZFdyaXRlQmFycmllcigpOworICAgIHJldHVybiBfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXQoVGFyZ2V0LCBWYWx1ZSk7CisgIH0KKyAgLyogLS1bIGVuZCBHQ0MgY29tcGF0aWJpbGl0eSBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2VuZGlmCisjZGVmaW5lIGludGVybG9ja2VkY29tcGFyZWV4Y2hhbmdlIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZQorI2RlZmluZSBpbnRlcmxvY2tlZGV4Y2hhbmdlIF9JbnRlcmxvY2tlZEV4Y2hhbmdlCisjZW5kaWYgLyogV2luMzIgKi8KKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKworLyogRGVjbGFyYXRpb25zIGZvciBiaXQgc2Nhbm5pbmcgb24gd2luMzIgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMAorI2lmbmRlZiBCaXRTY2FuRm9yd2FyZAkvKiBUcnkgdG8gYXZvaWQgcHVsbGluZyBpbiBXaW5OVC5oICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCit1bnNpZ25lZCBjaGFyIF9CaXRTY2FuRm9yd2FyZCh1bnNpZ25lZCBsb25nICppbmRleCwgdW5zaWduZWQgbG9uZyBtYXNrKTsKK3Vuc2lnbmVkIGNoYXIgX0JpdFNjYW5SZXZlcnNlKHVuc2lnbmVkIGxvbmcgKmluZGV4LCB1bnNpZ25lZCBsb25nIG1hc2spOworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2RlZmluZSBCaXRTY2FuRm9yd2FyZCBfQml0U2NhbkZvcndhcmQKKyNkZWZpbmUgQml0U2NhblJldmVyc2UgX0JpdFNjYW5SZXZlcnNlCisjcHJhZ21hIGludHJpbnNpYyhfQml0U2NhbkZvcndhcmQpCisjcHJhZ21hIGludHJpbnNpYyhfQml0U2NhblJldmVyc2UpCisjZW5kaWYgLyogQml0U2NhbkZvcndhcmQgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMCAqLworCisjaWZuZGVmIFdJTjMyCisjaWZuZGVmIG1hbGxvY19nZXRwYWdlc2l6ZQorIyAgaWZkZWYgX1NDX1BBR0VTSVpFICAgICAgICAgLyogc29tZSBTVlI0IHN5c3RlbXMgb21pdCBhbiB1bmRlcnNjb3JlICovCisjICAgIGlmbmRlZiBfU0NfUEFHRV9TSVpFCisjICAgICAgZGVmaW5lIF9TQ19QQUdFX1NJWkUgX1NDX1BBR0VTSVpFCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZkZWYgX1NDX1BBR0VfU0laRQorIyAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIHN5c2NvbmYoX1NDX1BBR0VfU0laRSkKKyMgIGVsc2UKKyMgICAgaWYgZGVmaW5lZChCU0QpIHx8IGRlZmluZWQoREdVWCkgfHwgZGVmaW5lZChIQVZFX0dFVFBBR0VTSVpFKQorICAgICAgIGV4dGVybiBzaXplX3QgZ2V0cGFnZXNpemUoKTsKKyMgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIGdldHBhZ2VzaXplKCkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFdJTjMyIC8qIHVzZSBzdXBwbGllZCBlbXVsYXRpb24gb2YgZ2V0cGFnZXNpemUgKi8KKyMgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNpemUoKQorIyAgICAgIGVsc2UKKyMgICAgICAgIGlmbmRlZiBMQUNLU19TWVNfUEFSQU1fSAorIyAgICAgICAgICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgICAgICAgIGVuZGlmCisjICAgICAgICBpZmRlZiBFWEVDX1BBR0VTSVpFCisjICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgRVhFQ19QQUdFU0laRQorIyAgICAgICAgZWxzZQorIyAgICAgICAgICBpZmRlZiBOQlBHCisjICAgICAgICAgICAgaWZuZGVmIENMU0laRQorIyAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBOQlBHCisjICAgICAgICAgICAgZWxzZQorIyAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSAoTkJQRyAqIENMU0laRSkKKyMgICAgICAgICAgICBlbmRpZgorIyAgICAgICAgICBlbHNlCisjICAgICAgICAgICAgaWZkZWYgTkJQQworIyAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBOQlBDCisjICAgICAgICAgICAgZWxzZQorIyAgICAgICAgICAgICAgaWZkZWYgUEFHRVNJWkUKKyMgICAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBQQUdFU0laRQorIyAgICAgICAgICAgICAgZWxzZSAvKiBqdXN0IGd1ZXNzICovCisjICAgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKChzaXplX3QpNDA5NlUpCisjICAgICAgICAgICAgICBlbmRpZgorIyAgICAgICAgICAgIGVuZGlmCisjICAgICAgICAgIGVuZGlmCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYKKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gc2l6ZV90IGFuZCBhbGlnbm1lbnQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBUaGUgYnl0ZSBhbmQgYml0IHNpemUgb2YgYSBzaXplX3QgKi8KKyNkZWZpbmUgU0laRV9UX1NJWkUgICAgICAgICAoc2l6ZW9mKHNpemVfdCkpCisjZGVmaW5lIFNJWkVfVF9CSVRTSVpFICAgICAgKHNpemVvZihzaXplX3QpIDw8IDMpCisKKy8qIFNvbWUgY29uc3RhbnRzIGNvZXJjZWQgdG8gc2l6ZV90ICovCisvKiBBbm5veWluZyBidXQgbmVjZXNzYXJ5IHRvIGF2b2lkIGVycm9ycyBvbiBzb21lIHBsYXRmb3JtcyAqLworI2RlZmluZSBTSVpFX1RfWkVSTyAgICAgICAgICgoc2l6ZV90KTApCisjZGVmaW5lIFNJWkVfVF9PTkUgICAgICAgICAgKChzaXplX3QpMSkKKyNkZWZpbmUgU0laRV9UX1RXTyAgICAgICAgICAoKHNpemVfdCkyKQorI2RlZmluZSBTSVpFX1RfRk9VUiAgICAgICAgICgoc2l6ZV90KTQpCisjZGVmaW5lIFRXT19TSVpFX1RfU0laRVMgICAgKFNJWkVfVF9TSVpFPDwxKQorI2RlZmluZSBGT1VSX1NJWkVfVF9TSVpFUyAgIChTSVpFX1RfU0laRTw8MikKKyNkZWZpbmUgU0lYX1NJWkVfVF9TSVpFUyAgICAoRk9VUl9TSVpFX1RfU0laRVMrVFdPX1NJWkVfVF9TSVpFUykKKyNkZWZpbmUgSEFMRl9NQVhfU0laRV9UICAgICAoTUFYX1NJWkVfVCAvIDJVKQorCisvKiBUaGUgYml0IG1hc2sgdmFsdWUgY29ycmVzcG9uZGluZyB0byBNQUxMT0NfQUxJR05NRU5UICovCisjZGVmaW5lIENIVU5LX0FMSUdOX01BU0sgICAgKE1BTExPQ19BTElHTk1FTlQgLSBTSVpFX1RfT05FKQorCisvKiBUcnVlIGlmIGFkZHJlc3MgYSBoYXMgYWNjZXB0YWJsZSBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgaXNfYWxpZ25lZChBKSAgICAgICAoKChzaXplX3QpKChBKSkgJiAoQ0hVTktfQUxJR05fTUFTSykpID09IDApCisKKy8qIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gb2Zmc2V0IGFuIGFkZHJlc3MgdG8gYWxpZ24gaXQgKi8KKyNkZWZpbmUgYWxpZ25fb2Zmc2V0KEEpXAorICgoKChzaXplX3QpKEEpICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk/IDAgOlwKKyAgKChNQUxMT0NfQUxJR05NRU5UIC0gKChzaXplX3QpKEEpICYgQ0hVTktfQUxJR05fTUFTSykpICYgQ0hVTktfQUxJR05fTUFTSykpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1NQVAgcHJlbGltaW5hcmllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgICBJZiBIQVZFX01PUkVDT1JFIG9yIEhBVkVfTU1BUCBhcmUgZmFsc2UsIHdlIGp1c3QgZGVmaW5lIGNhbGxzIGFuZAorICAgY2hlY2tzIHRvIGZhaWwgc28gY29tcGlsZXIgb3B0aW1pemVyIGNhbiBkZWxldGUgY29kZSByYXRoZXIgdGhhbgorICAgdXNpbmcgc28gbWFueSAiI2lmInMuCisqLworCisKKy8qIE1PUkVDT1JFIGFuZCBNTUFQIG11c3QgcmV0dXJuIE1GQUlMIG9uIGZhaWx1cmUgKi8KKyNkZWZpbmUgTUZBSUwgICAgICAgICAgICAgICAgKCh2b2lkKikoTUFYX1NJWkVfVCkpCisjZGVmaW5lIENNRkFJTCAgICAgICAgICAgICAgICgoY2hhciopKE1GQUlMKSkgLyogZGVmaW5lZCBmb3IgY29udmVuaWVuY2UgKi8KKworI2lmIEhBVkVfTU1BUAorCisjaWZuZGVmIFdJTjMyCisjZGVmaW5lIE1VTk1BUF9ERUZBVUxUKGEsIHMpICBtdW5tYXAoKGEpLCAocykpCisjZGVmaW5lIE1NQVBfUFJPVCAgICAgICAgICAgIChQUk9UX1JFQUR8UFJPVF9XUklURSkKKyNpZiAhZGVmaW5lZChNQVBfQU5PTllNT1VTKSAmJiBkZWZpbmVkKE1BUF9BTk9OKQorI2RlZmluZSBNQVBfQU5PTllNT1VTICAgICAgICBNQVBfQU5PTgorI2VuZGlmIC8qIE1BUF9BTk9OICovCisjaWZkZWYgTUFQX0FOT05ZTU9VUworI2RlZmluZSBNTUFQX0ZMQUdTICAgICAgICAgICAoTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUykKKyNkZWZpbmUgTU1BUF9ERUZBVUxUKHMpICAgICAgIG1tYXAoMCwgKHMpLCBNTUFQX1BST1QsIE1NQVBfRkxBR1MsIC0xLCAwKQorI2Vsc2UgLyogTUFQX0FOT05ZTU9VUyAqLworLyoKKyAgIE5lYXJseSBhbGwgdmVyc2lvbnMgb2YgbW1hcCBzdXBwb3J0IE1BUF9BTk9OWU1PVVMsIHNvIHRoZSBmb2xsb3dpbmcKKyAgIGlzIHVubGlrZWx5IHRvIGJlIG5lZWRlZCwgYnV0IGlzIHN1cHBsaWVkIGp1c3QgaW4gY2FzZS4KKyovCisjZGVmaW5lIE1NQVBfRkxBR1MgICAgICAgICAgIChNQVBfUFJJVkFURSkKK3N0YXRpYyBpbnQgZGV2X3plcm9fZmQgPSAtMTsgLyogQ2FjaGVkIGZpbGUgZGVzY3JpcHRvciBmb3IgL2Rldi96ZXJvLiAqLworI2RlZmluZSBNTUFQX0RFRkFVTFQocykgKChkZXZfemVyb19mZCA8IDApID8gXAorCSAgIChkZXZfemVyb19mZCA9IG9wZW4oIi9kZXYvemVybyIsIE9fUkRXUiksIFwKKwkgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgZGV2X3plcm9fZmQsIDApKSA6IFwKKwkgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgZGV2X3plcm9fZmQsIDApKQorI2VuZGlmIC8qIE1BUF9BTk9OWU1PVVMgKi8KKworI2RlZmluZSBESVJFQ1RfTU1BUF9ERUZBVUxUKHMpIE1NQVBfREVGQVVMVChzKQorCisjZWxzZSAvKiBXSU4zMiAqLworCisvKiBXaW4zMiBNTUFQIHZpYSBWaXJ0dWFsQWxsb2MgKi8KK3N0YXRpYyBGT1JDRUlOTElORSB2b2lkKiB3aW4zMm1tYXAoc2l6ZV90IHNpemUpIHsKKyAgdm9pZCogcHRyID0gVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9SRVNFUlZFfE1FTV9DT01NSVQsIFBBR0VfUkVBRFdSSVRFKTsKKyAgcmV0dXJuIChwdHIgIT0gMCk/IHB0cjogTUZBSUw7Cit9CisKKy8qIEZvciBkaXJlY3QgTU1BUCwgdXNlIE1FTV9UT1BfRE9XTiB0byBtaW5pbWl6ZSBpbnRlcmZlcmVuY2UgKi8KK3N0YXRpYyBGT1JDRUlOTElORSB2b2lkKiB3aW4zMmRpcmVjdF9tbWFwKHNpemVfdCBzaXplKSB7CisgIHZvaWQqIHB0ciA9IFZpcnR1YWxBbGxvYygwLCBzaXplLCBNRU1fUkVTRVJWRXxNRU1fQ09NTUlUfE1FTV9UT1BfRE9XTiwKKwkJCSAgIFBBR0VfUkVBRFdSSVRFKTsKKyAgcmV0dXJuIChwdHIgIT0gMCk/IHB0cjogTUZBSUw7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgcmVsZWFzaW5nIGNvYWxlc2NlZCBzZWdtZW50cyAqLworc3RhdGljIEZPUkNFSU5MSU5FIGludCB3aW4zMm11bm1hcCh2b2lkKiBwdHIsIHNpemVfdCBzaXplKSB7CisgIE1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTiBtaW5mbzsKKyAgY2hhciogY3B0ciA9IChjaGFyKilwdHI7CisgIHdoaWxlIChzaXplKSB7CisgICAgaWYgKFZpcnR1YWxRdWVyeShjcHRyLCAmbWluZm8sIHNpemVvZihtaW5mbykpID09IDApCisgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG1pbmZvLkJhc2VBZGRyZXNzICE9IGNwdHIgfHwgbWluZm8uQWxsb2NhdGlvbkJhc2UgIT0gY3B0ciB8fAorCW1pbmZvLlN0YXRlICE9IE1FTV9DT01NSVQgfHwgbWluZm8uUmVnaW9uU2l6ZSA+IHNpemUpCisgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFZpcnR1YWxGcmVlKGNwdHIsIDAsIE1FTV9SRUxFQVNFKSA9PSAwKQorICAgICAgcmV0dXJuIC0xOworICAgIGNwdHIgKz0gbWluZm8uUmVnaW9uU2l6ZTsKKyAgICBzaXplIC09IG1pbmZvLlJlZ2lvblNpemU7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTU1BUF9ERUZBVUxUKHMpICAgICAgICAgICAgIHdpbjMybW1hcChzKQorI2RlZmluZSBNVU5NQVBfREVGQVVMVChhLCBzKSAgICAgICAgd2luMzJtdW5tYXAoKGEpLCAocykpCisjZGVmaW5lIERJUkVDVF9NTUFQX0RFRkFVTFQocykgICAgICB3aW4zMmRpcmVjdF9tbWFwKHMpCisjZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKworI2lmIEhBVkVfTVJFTUFQCisjaWZuZGVmIFdJTjMyCisjZGVmaW5lIE1SRU1BUF9ERUZBVUxUKGFkZHIsIG9zeiwgbnN6LCBtdikgbXJlbWFwKChhZGRyKSwgKG9zeiksIChuc3opLCAobXYpKQorI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogSEFWRV9NUkVNQVAgKi8KKworCisvKioKKyAqIERlZmluZSBDQUxMX01PUkVDT1JFCisgKi8KKyNpZiBIQVZFX01PUkVDT1JFCisgICAgI2lmZGVmIE1PUkVDT1JFCisJI2RlZmluZSBDQUxMX01PUkVDT1JFKFMpICAgIE1PUkVDT1JFKFMpCisgICAgI2Vsc2UgIC8qIE1PUkVDT1JFICovCisJI2RlZmluZSBDQUxMX01PUkVDT1JFKFMpICAgIE1PUkVDT1JFX0RFRkFVTFQoUykKKyAgICAjZW5kaWYgLyogTU9SRUNPUkUgKi8KKyNlbHNlICAvKiBIQVZFX01PUkVDT1JFICovCisgICAgI2RlZmluZSBDQUxMX01PUkVDT1JFKFMpICAgICAgICBNRkFJTAorI2VuZGlmIC8qIEhBVkVfTU9SRUNPUkUgKi8KKworLyoqCisgKiBEZWZpbmUgQ0FMTF9NTUFQL0NBTExfTVVOTUFQL0NBTExfRElSRUNUX01NQVAKKyAqLworI2lmIEhBVkVfTU1BUAorICAgICNkZWZpbmUgSVNfTU1BUFBFRF9CSVQgICAgICAgICAgKFNJWkVfVF9PTkUpCisgICAgI2RlZmluZSBVU0VfTU1BUF9CSVQgICAgICAgICAgICAoU0laRV9UX09ORSkKKworICAgICNpZmRlZiBNTUFQCisJI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgIE1NQVAocykKKyAgICAjZWxzZSAvKiBNTUFQICovCisJI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgIE1NQVBfREVGQVVMVChzKQorICAgICNlbmRpZiAvKiBNTUFQICovCisgICAgI2lmZGVmIE1VTk1BUAorCSNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICBNVU5NQVAoKGEpLCAocykpCisgICAgI2Vsc2UgLyogTVVOTUFQICovCisJI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgIE1VTk1BUF9ERUZBVUxUKChhKSwgKHMpKQorICAgICNlbmRpZiAvKiBNVU5NQVAgKi8KKyAgICAjaWZkZWYgRElSRUNUX01NQVAKKwkjZGVmaW5lIENBTExfRElSRUNUX01NQVAocykgRElSRUNUX01NQVAocykKKyAgICAjZWxzZSAvKiBESVJFQ1RfTU1BUCAqLworCSNkZWZpbmUgQ0FMTF9ESVJFQ1RfTU1BUChzKSBESVJFQ1RfTU1BUF9ERUZBVUxUKHMpCisgICAgI2VuZGlmIC8qIERJUkVDVF9NTUFQICovCisjZWxzZSAgLyogSEFWRV9NTUFQICovCisgICAgI2RlZmluZSBJU19NTUFQUEVEX0JJVCAgICAgICAgICAoU0laRV9UX1pFUk8pCisgICAgI2RlZmluZSBVU0VfTU1BUF9CSVQgICAgICAgICAgICAoU0laRV9UX1pFUk8pCisKKyAgICAjZGVmaW5lIE1NQVAocykgICAgICAgICAgICAgICAgIE1GQUlMCisgICAgI2RlZmluZSBNVU5NQVAoYSwgcykgICAgICAgICAgICAoLTEpCisgICAgI2RlZmluZSBESVJFQ1RfTU1BUChzKSAgICAgICAgICBNRkFJTAorICAgICNkZWZpbmUgQ0FMTF9ESVJFQ1RfTU1BUChzKSAgICAgRElSRUNUX01NQVAocykKKyAgICAjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgICAgIE1NQVAocykKKyAgICAjZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgICAgIE1VTk1BUCgoYSksIChzKSkKKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKworLyoqCisgKiBEZWZpbmUgQ0FMTF9NUkVNQVAKKyAqLworI2lmIEhBVkVfTU1BUCAmJiBIQVZFX01SRU1BUAorICAgICNpZmRlZiBNUkVNQVAKKwkjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgTVJFTUFQKChhZGRyKSwgKG9zeiksIChuc3opLCAobXYpKQorICAgICNlbHNlIC8qIE1SRU1BUCAqLworCSNkZWZpbmUgQ0FMTF9NUkVNQVAoYWRkciwgb3N6LCBuc3osIG12KSBNUkVNQVBfREVGQVVMVCgoYWRkciksIChvc3opLCAobnN6KSwgKG12KSkKKyAgICAjZW5kaWYgLyogTVJFTUFQICovCisjZWxzZSAgLyogSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQICovCisgICAgI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpICAgICBNRkFJTAorI2VuZGlmIC8qIEhBVkVfTU1BUCAmJiBIQVZFX01SRU1BUCAqLworCisvKiBtc3RhdGUgYml0IHNldCBpZiBjb250aWd1b3VzIG1vcmVjb3JlIGRpc2FibGVkIG9yIGZhaWxlZCAqLworI2RlZmluZSBVU0VfTk9OQ09OVElHVU9VU19CSVQgKDRVKQorCisvKiBzZWdtZW50IGJpdCBzZXQgaW4gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UgKi8KKyNkZWZpbmUgRVhURVJOX0JJVCAgICAgICAgICAgICg4VSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9jayBwcmVsaW1pbmFyaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBXaGVuIGxvY2tzIGFyZSBkZWZpbmVkLCB0aGVyZSBpcyBvbmUgZ2xvYmFsIGxvY2ssIHBsdXMKKyAgb25lIHBlci1tc3BhY2UgbG9jay4KKworICBUaGUgZ2xvYmFsIGxvY2tfZW5zdXJlcyB0aGF0IG1wYXJhbXMubWFnaWMgYW5kIG90aGVyIHVuaXF1ZQorICBtcGFyYW1zIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlLiBJdCBhbHNvIHByb3RlY3RzCisgIHNlcXVlbmNlcyBvZiBjYWxscyB0byBNT1JFQ09SRS4gIEluIG1hbnkgY2FzZXMgc3lzX2FsbG9jIHJlcXVpcmVzCisgIHR3byBjYWxscywgdGhhdCBzaG91bGQgbm90IGJlIGludGVybGVhdmVkIHdpdGggY2FsbHMgYnkgb3RoZXIKKyAgdGhyZWFkcy4gIFRoaXMgZG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IGRpcmVjdCBjYWxscyB0byBNT1JFQ09SRQorICBieSBvdGhlciB0aHJlYWRzIG5vdCB1c2luZyB0aGlzIGxvY2ssIHNvIHRoZXJlIGlzIHN0aWxsIGNvZGUgdG8KKyAgY29wZSB0aGUgYmVzdCB3ZSBjYW4gb24gaW50ZXJmZXJlbmNlLgorCisgIFBlci1tc3BhY2UgbG9ja3Mgc3Vycm91bmQgY2FsbHMgdG8gbWFsbG9jLCBmcmVlLCBldGMuICBUbyBlbmFibGUgdXNlCisgIGluIGxheWVyZWQgZXh0ZW5zaW9ucywgcGVyLW1zcGFjZSBsb2NrcyBhcmUgcmVlbnRyYW50LgorCisgIEJlY2F1c2UgbG9jay1wcm90ZWN0ZWQgcmVnaW9ucyBnZW5lcmFsbHkgaGF2ZSBib3VuZGVkIHRpbWVzLCBpdCBpcworICBPSyB0byB1c2UgdGhlIHN1cHBsaWVkIHNpbXBsZSBzcGlubG9ja3MgaW4gdGhlIGN1c3RvbSB2ZXJzaW9ucyBmb3IKKyAgeDg2LgorCisgIElmIFVTRV9MT0NLUyBpcyA+IDEsIHRoZSBkZWZpbml0aW9ucyBvZiBsb2NrIHJvdXRpbmVzIGhlcmUgYXJlCisgIGJ5cGFzc2VkLCBpbiB3aGljaCBjYXNlIHlvdSB3aWxsIG5lZWQgdG8gZGVmaW5lIGF0IGxlYXN0CisgIElOSVRJQUxfTE9DSywgQUNRVUlSRV9MT0NLLCBSRUxFQVNFX0xPQ0sgYW5kIHBvc3NpYmx5IFRSWV9MT0NLCisgICh3aGljaCBpcyBub3QgdXNlZCBpbiB0aGlzIG1hbGxvYywgYnV0IGNvbW1vbmx5IG5lZWRlZCBpbgorICBleHRlbnNpb25zLikKKyovCisKKyNpZiBVU0VfTE9DS1MgPT0gMQorCisjaWYgVVNFX1NQSU5fTE9DS1MKKyNpZm5kZWYgV0lOMzIKKworLyogQ3VzdG9tIHB0aHJlYWQtc3R5bGUgc3BpbiBsb2NrcyBvbiB4ODYgYW5kIHg2NCBmb3IgZ2NjICovCitzdHJ1Y3QgcHRocmVhZF9tbG9ja190IHsKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGw7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBjOworICB2b2xhdGlsZSBwdGhyZWFkX3QgdGhyZWFkaWQ7Cit9OworI2RlZmluZSBNTE9DS19UIHN0cnVjdCAgICAgICAgcHRocmVhZF9tbG9ja190CisjZGVmaW5lIENVUlJFTlRfVEhSRUFEICAgICAgICBwdGhyZWFkX3NlbGYoKQorI2RlZmluZSBJTklUSUFMX0xPQ0soc2wpICAgICAgKG1lbXNldChzbCwgMCwgc2l6ZW9mKE1MT0NLX1QpKSwgMCkKKyNkZWZpbmUgQUNRVUlSRV9MT0NLKHNsKSAgICAgIHB0aHJlYWRfYWNxdWlyZV9sb2NrKHNsKQorI2RlZmluZSBSRUxFQVNFX0xPQ0soc2wpICAgICAgcHRocmVhZF9yZWxlYXNlX2xvY2soc2wpCisjZGVmaW5lIFRSWV9MT0NLKHNsKSAgICAgICAgICBwdGhyZWFkX3RyeV9sb2NrKHNsKQorI2RlZmluZSBTUElOU19QRVJfWUlFTEQgICAgICAgNjMKKworc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IHsgMCwgMCwgMH07CisKK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgcHRocmVhZF9hY3F1aXJlX2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIGludCBzcGlucyA9IDA7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCogbHAgPSAmc2wtPmw7CisgIGZvciAoOzspIHsKKyAgICBpZiAoKmxwICE9IDApIHsKKyAgICAgIGlmIChzbC0+dGhyZWFkaWQgPT0gQ1VSUkVOVF9USFJFQUQpIHsKKwkrK3NsLT5jOworCXJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIHBsYWNlIGFyZ3MgdG8gY21weGNoZ2wgaW4gbG9jYWxzIHRvIGV2YWRlIG9kZGl0aWVzIGluIHNvbWUgZ2NjcyAqLworICAgICAgaW50IGNtcCA9IDA7CisgICAgICBpbnQgdmFsID0gMTsKKyAgICAgIGludCByZXQ7CisgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAgKCJsb2NrOyBjbXB4Y2hnbCAlMSwgJTIiCisJCQkgICAgIDogIj1hIiAocmV0KQorCQkJICAgICA6ICJyIiAodmFsKSwgIm0iICgqKGxwKSksICIwIihjbXApCisJCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOworICAgICAgaWYgKCFyZXQpIHsKKwlhc3NlcnQoIXNsLT50aHJlYWRpZCk7CisJc2wtPmMgPSAxOworCXNsLT50aHJlYWRpZCA9IENVUlJFTlRfVEhSRUFEOworCXJldHVybiAwOworICAgICAgfQorICAgICAgaWYgKCgrK3NwaW5zICYgU1BJTlNfUEVSX1lJRUxEKSA9PSAwKSB7CisjaWYgZGVmaW5lZCAoX19TVlI0KSAmJiBkZWZpbmVkIChfX3N1bikgLyogc29sYXJpcyAqLworCXRocl95aWVsZCgpOworI2Vsc2UKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCisJc2NoZWRfeWllbGQoKTsKKyNlbHNlICAvKiBuby1vcCB5aWVsZCBvbiB1bmtub3duIHN5c3RlbXMgKi8KKwk7CisjZW5kaWYgLyogX19saW51eF9fIHx8IF9fRnJlZUJTRF9fIHx8IF9fQVBQTEVfXyAqLworI2VuZGlmIC8qIHNvbGFyaXMgKi8KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQgcHRocmVhZF9yZWxlYXNlX2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIGFzc2VydChzbC0+bCAhPSAwKTsKKyAgYXNzZXJ0KHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCk7CisgIGlmICgtLXNsLT5jID09IDApIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQqIGxwID0gJnNsLT5sOworICAgIGludCBwcmV2ID0gMDsKKyAgICBpbnQgcmV0OworICAgIHNsLT50aHJlYWRpZCA9IDA7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyB4Y2hnbCAlMCwgJTEiCisJCQkgIDogIj1yIiAocmV0KQorCQkJICA6ICJtIiAoKihscCkpLCAiMCIocHJldikKKwkJCSAgOiAibWVtb3J5Iik7CisgIH0KK30KKworc3RhdGljIEZPUkNFSU5MSU5FIGludCBwdGhyZWFkX3RyeV9sb2NrIChNTE9DS19UICpzbCkgeworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQqIGxwID0gJnNsLT5sOworICBpZiAoKmxwICE9IDApIHsKKyAgICAgIGlmIChzbC0+dGhyZWFkaWQgPT0gQ1VSUkVOVF9USFJFQUQpIHsKKwkrK3NsLT5jOworCXJldHVybiAxOworICAgICAgfQorICB9CisgIGVsc2UgeworICAgIGludCBjbXAgPSAwOworICAgIGludCB2YWwgPSAxOworICAgIGludCByZXQ7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gICgibG9jazsgY21weGNoZ2wgJTEsICUyIgorCQkJICAgOiAiPWEiIChyZXQpCisJCQkgICA6ICJyIiAodmFsKSwgIm0iICgqKGxwKSksICIwIihjbXApCisJCQkgICA6ICJtZW1vcnkiLCAiY2MiKTsKKyAgICBpZiAoIXJldCkgeworICAgICAgYXNzZXJ0KCFzbC0+dGhyZWFkaWQpOworICAgICAgc2wtPmMgPSAxOworICAgICAgc2wtPnRocmVhZGlkID0gQ1VSUkVOVF9USFJFQUQ7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKworI2Vsc2UgLyogV0lOMzIgKi8KKy8qIEN1c3RvbSB3aW4zMi1zdHlsZSBzcGluIGxvY2tzIG9uIHg4NiBhbmQgeDY0IGZvciBNU0MgKi8KK3N0cnVjdCB3aW4zMl9tbG9ja190Cit7CisgIHZvbGF0aWxlIGxvbmcgbDsKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGM7CisgIHZvbGF0aWxlIGxvbmcgdGhyZWFkaWQ7Cit9OworCitzdGF0aWMgaW5saW5lIGludCByZXR1cm5fMChpbnQgaSkgeyByZXR1cm4gMDsgfQorI2RlZmluZSBNTE9DS19UICAgICAgICAgICAgICAgc3RydWN0IHdpbjMyX21sb2NrX3QKKyNkZWZpbmUgQ1VSUkVOVF9USFJFQUQgICAgICAgIHdpbjMyX2dldGN1cnJlbnR0aHJlYWRpZCgpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhzbCkgICAgICAobWVtc2V0KHNsLCAwLCBzaXplb2YoTUxPQ0tfVCkpLCByZXR1cm5fMCgwKSkKKyNkZWZpbmUgQUNRVUlSRV9MT0NLKHNsKSAgICAgIHdpbjMyX2FjcXVpcmVfbG9jayhzbCkKKyNkZWZpbmUgUkVMRUFTRV9MT0NLKHNsKSAgICAgIHdpbjMyX3JlbGVhc2VfbG9jayhzbCkKKyNkZWZpbmUgVFJZX0xPQ0soc2wpICAgICAgICAgIHdpbjMyX3RyeV9sb2NrKHNsKQorI2RlZmluZSBTUElOU19QRVJfWUlFTEQgICAgICAgNjMKKworc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IHsgMCwgMCwgMH07CisKK3N0YXRpYyBGT1JDRUlOTElORSBsb25nIHdpbjMyX2dldGN1cnJlbnR0aHJlYWRpZCh2b2lkKSB7CisjaWZkZWYgX01TQ19WRVIKKyNpZiBkZWZpbmVkKF9NX0lYODYpCisgIGxvbmcgKnRocmVhZHN0cnVjdD0obG9uZyAqKV9fcmVhZGZzZHdvcmQoMHgxOCk7CisgIGxvbmcgdGhyZWFkaWQ9dGhyZWFkc3RydWN0WzB4MjQvc2l6ZW9mKGxvbmcpXTsKKyAgcmV0dXJuIHRocmVhZGlkOworI2VsaWYgZGVmaW5lZChfTV9YNjQpCisgIC8qIHRvZG8gKi8KKyAgcmV0dXJuIEdldEN1cnJlbnRUaHJlYWRJZCgpOworI2Vsc2UKKyAgcmV0dXJuIEdldEN1cnJlbnRUaHJlYWRJZCgpOworI2VuZGlmCisjZWxzZQorICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7CisjZW5kaWYKK30KKworc3RhdGljIEZPUkNFSU5MSU5FIGludCB3aW4zMl9hY3F1aXJlX2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIGludCBzcGlucyA9IDA7CisgIGZvciAoOzspIHsKKyAgICBpZiAoc2wtPmwgIT0gMCkgeworICAgICAgaWYgKHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCkgeworCSsrc2wtPmM7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYgKCFpbnRlcmxvY2tlZGV4Y2hhbmdlKCZzbC0+bCwgMSkpIHsKKwlhc3NlcnQoIXNsLT50aHJlYWRpZCk7CisJCXNsLT5jPUNVUlJFTlRfVEhSRUFEOworCXNsLT50aHJlYWRpZCA9IENVUlJFTlRfVEhSRUFEOworCXNsLT5jID0gMTsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKCgrK3NwaW5zICYgU1BJTlNfUEVSX1lJRUxEKSA9PSAwKQorICAgICAgU2xlZXBFeCgwLCBGQUxTRSk7CisgIH0KK30KKworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQgd2luMzJfcmVsZWFzZV9sb2NrIChNTE9DS19UICpzbCkgeworICBhc3NlcnQoc2wtPnRocmVhZGlkID09IENVUlJFTlRfVEhSRUFEKTsKKyAgYXNzZXJ0KHNsLT5sICE9IDApOworICBpZiAoLS1zbC0+YyA9PSAwKSB7CisgICAgc2wtPnRocmVhZGlkID0gMDsKKyAgICBpbnRlcmxvY2tlZGV4Y2hhbmdlICgmc2wtPmwsIDApOworICB9Cit9CisKK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgd2luMzJfdHJ5X2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIGlmKHNsLT5sICE9IDApIHsKKyAgICAgIGlmIChzbC0+dGhyZWFkaWQgPT0gQ1VSUkVOVF9USFJFQUQpIHsKKwkrK3NsLT5jOworCXJldHVybiAxOworICAgICAgfQorICB9CisgIGVsc2UgeworICAgIGlmICghaW50ZXJsb2NrZWRleGNoYW5nZSgmc2wtPmwsIDEpKXsKKyAgICAgIGFzc2VydCghc2wtPnRocmVhZGlkKTsKKyAgICAgIHNsLT50aHJlYWRpZCA9IENVUlJFTlRfVEhSRUFEOworICAgICAgc2wtPmMgPSAxOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisjZW5kaWYgLyogV0lOMzIgKi8KKyNlbHNlIC8qIFVTRV9TUElOX0xPQ0tTICovCisKKyNpZm5kZWYgV0lOMzIKKy8qIHB0aHJlYWRzLWJhc2VkIGxvY2tzICovCisKKyNkZWZpbmUgTUxPQ0tfVCAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdAorI2RlZmluZSBDVVJSRU5UX1RIUkVBRCAgICAgICAgcHRocmVhZF9zZWxmKCkKKyNkZWZpbmUgSU5JVElBTF9MT0NLKHNsKSAgICAgIHB0aHJlYWRfaW5pdF9sb2NrKHNsKQorI2RlZmluZSBBQ1FVSVJFX0xPQ0soc2wpICAgICAgcHRocmVhZF9tdXRleF9sb2NrKHNsKQorI2RlZmluZSBSRUxFQVNFX0xPQ0soc2wpICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soc2wpCisjZGVmaW5lIFRSWV9MT0NLKHNsKSAgICAgICAgICAoIXB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhzbCkpCisKK3N0YXRpYyBNTE9DS19UIG1hbGxvY19nbG9iYWxfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCisvKiBDb3BlIHdpdGggb2xkLXN0eWxlIGxpbnV4IHJlY3Vyc2l2ZSBsb2NrIGluaXRpYWxpemF0aW9uIGJ5IGFkZGluZyAqLworLyogc2tpcHBlZCBpbnRlcm5hbCBkZWNsYXJhdGlvbiBmcm9tIHB0aHJlYWQuaCAqLworI2lmZGVmIGxpbnV4CisjaWZuZGVmIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFCitleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldGtpbmRfbnAgX19QICgocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLAorCQkJCQkgICBpbnQgX19raW5kKSk7CisjZGVmaW5lIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoeCx5KSBwdGhyZWFkX211dGV4YXR0cl9zZXRraW5kX25wKHgseSkKKyNlbmRpZgorI2VuZGlmCisKK3N0YXRpYyBpbnQgcHRocmVhZF9pbml0X2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgYXR0cjsKKyAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmF0dHIpKSByZXR1cm4gMTsKKyAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKSkgcmV0dXJuIDE7CisgIGlmIChwdGhyZWFkX211dGV4X2luaXQoc2wsICZhdHRyKSkgcmV0dXJuIDE7CisgIGlmIChwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZhdHRyKSkgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCisjZWxzZSAvKiBXSU4zMiAqLworLyogV2luMzIgY3JpdGljYWwgc2VjdGlvbnMgKi8KKyNkZWZpbmUgTUxPQ0tfVCAgICAgICAgICAgICAgIENSSVRJQ0FMX1NFQ1RJT04KKyNkZWZpbmUgQ1VSUkVOVF9USFJFQUQgICAgICAgIEdldEN1cnJlbnRUaHJlYWRJZCgpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhzKSAgICAgICAoIUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb25BbmRTcGluQ291bnQoKHMpLCAweDgwMDAwMDAwfDQwMDApKQorI2RlZmluZSBBQ1FVSVJFX0xPQ0socykgICAgICAgKEVudGVyQ3JpdGljYWxTZWN0aW9uKHMpLCAwKQorI2RlZmluZSBSRUxFQVNFX0xPQ0socykgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24ocykKKyNkZWZpbmUgVFJZX0xPQ0socykgICAgICAgICAgIFRyeUVudGVyQ3JpdGljYWxTZWN0aW9uKHMpCisjZGVmaW5lIE5FRURfR0xPQkFMX0xPQ0tfSU5JVAorCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4Oworc3RhdGljIHZvbGF0aWxlIGxvbmcgbWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXM7CisKKy8qIFVzZSBzcGluIGxvb3AgdG8gaW5pdGlhbGl6ZSBnbG9iYWwgbG9jayAqLworc3RhdGljIHZvaWQgaW5pdF9tYWxsb2NfZ2xvYmFsX211dGV4KCkgeworICBmb3IgKDs7KSB7CisgICAgbG9uZyBzdGF0ID0gbWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXM7CisgICAgaWYgKHN0YXQgPiAwKQorICAgICAgcmV0dXJuOworICAgIC8qIHRyYW5zaXRpb24gdG8gPCAwIHdoaWxlIGluaXRpYWxpemluZywgdGhlbiB0byA+IDApICovCisgICAgaWYgKHN0YXQgPT0gMCAmJgorCWludGVybG9ja2VkY29tcGFyZWV4Y2hhbmdlKCZtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1cywgLTEsIDApID09IDApIHsKKyAgICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJm1hbGxvY19nbG9iYWxfbXV0ZXgpOworICAgICAgaW50ZXJsb2NrZWRleGNoYW5nZSgmbWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXMsMSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIFNsZWVwRXgoMCwgRkFMU0UpOworICB9Cit9CisKKyNlbmRpZiAvKiBXSU4zMiAqLworI2VuZGlmIC8qIFVTRV9TUElOX0xPQ0tTICovCisjZW5kaWYgLyogVVNFX0xPQ0tTID09IDEgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVzZXItZGVmaW5lZCBsb2NrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIFVTRV9MT0NLUyA+IDEKKy8qIERlZmluZSB5b3VyIG93biBsb2NrIGltcGxlbWVudGF0aW9uIGhlcmUgKi8KKy8qICNkZWZpbmUgSU5JVElBTF9MT0NLKHNsKSAgLi4uICovCisvKiAjZGVmaW5lIEFDUVVJUkVfTE9DSyhzbCkgIC4uLiAqLworLyogI2RlZmluZSBSRUxFQVNFX0xPQ0soc2wpICAuLi4gKi8KKy8qICNkZWZpbmUgVFJZX0xPQ0soc2wpIC4uLiAqLworLyogc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IC4uLiAqLworI2VuZGlmIC8qIFVTRV9MT0NLUyA+IDEgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIExvY2stYmFzZWQgc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBVU0VfTE9DS1MKKyNkZWZpbmUgVVNFX0xPQ0tfQklUICAgICAgICAgICAgICAgKDJVKQorI2Vsc2UgIC8qIFVTRV9MT0NLUyAqLworI2RlZmluZSBVU0VfTE9DS19CSVQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhsKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisjaWYgVVNFX0xPQ0tTCisjZGVmaW5lIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCkgIEFDUVVJUkVfTE9DSygmbWFsbG9jX2dsb2JhbF9tdXRleCk7CisjZGVmaW5lIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCkgIFJFTEVBU0VfTE9DSygmbWFsbG9jX2dsb2JhbF9tdXRleCk7CisjZWxzZSAgLyogVVNFX0xPQ0tTICovCisjZGVmaW5lIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCkKKyNkZWZpbmUgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDaHVuayByZXByZXNlbnRhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIChUaGUgZm9sbG93aW5nIGluY2x1ZGVzIGxpZ2h0bHkgZWRpdGVkIGV4cGxhbmF0aW9ucyBieSBDb2xpbiBQbHVtYi4pCisKKyAgVGhlIG1hbGxvY19jaHVuayBkZWNsYXJhdGlvbiBiZWxvdyBpcyBtaXNsZWFkaW5nIChidXQgYWNjdXJhdGUgYW5kCisgIG5lY2Vzc2FyeSkuICBJdCBkZWNsYXJlcyBhICJ2aWV3IiBpbnRvIG1lbW9yeSBhbGxvd2luZyBhY2Nlc3MgdG8KKyAgbmVjZXNzYXJ5IGZpZWxkcyBhdCBrbm93biBvZmZzZXRzIGZyb20gYSBnaXZlbiBiYXNlLgorCisgIENodW5rcyBvZiBtZW1vcnkgYXJlIG1haW50YWluZWQgdXNpbmcgYSBgYm91bmRhcnkgdGFnJyBtZXRob2QgYXMKKyAgb3JpZ2luYWxseSBkZXNjcmliZWQgYnkgS251dGguICAoU2VlIHRoZSBwYXBlciBieSBQYXVsIFdpbHNvbgorICBmdHA6Ly9mdHAuY3MudXRleGFzLmVkdS9wdWIvZ2FyYmFnZS9hbGxvY3Nydi5wcyBmb3IgYSBzdXJ2ZXkgb2Ygc3VjaAorICB0ZWNobmlxdWVzLikgIFNpemVzIG9mIGZyZWUgY2h1bmtzIGFyZSBzdG9yZWQgYm90aCBpbiB0aGUgZnJvbnQgb2YKKyAgZWFjaCBjaHVuayBhbmQgYXQgdGhlIGVuZC4gIFRoaXMgbWFrZXMgY29uc29saWRhdGluZyBmcmFnbWVudGVkCisgIGNodW5rcyBpbnRvIGJpZ2dlciBjaHVua3MgZmFzdC4gIFRoZSBoZWFkIGZpZWxkcyBhbHNvIGhvbGQgYml0cworICByZXByZXNlbnRpbmcgd2hldGhlciBjaHVua3MgYXJlIGZyZWUgb3IgaW4gdXNlLgorCisgIEhlcmUgYXJlIHNvbWUgcGljdHVyZXMgdG8gbWFrZSBpdCBjbGVhcmVyLiAgVGhleSBhcmUgImV4cGxvZGVkIiB0bworICBzaG93IHRoYXQgdGhlIHN0YXRlIG9mIGEgY2h1bmsgY2FuIGJlIHRob3VnaHQgb2YgYXMgZXh0ZW5kaW5nIGZyb20KKyAgdGhlIGhpZ2ggMzEgYml0cyBvZiB0aGUgaGVhZCBmaWVsZCBvZiBpdHMgaGVhZGVyIHRocm91Z2ggdGhlCisgIHByZXZfZm9vdCBhbmQgUElOVVNFX0JJVCBiaXQgb2YgdGhlIGZvbGxvd2luZyBjaHVuayBoZWFkZXIuCisKKyAgQSBjaHVuayB0aGF0J3MgaW4gdXNlIGxvb2tzIGxpa2U6CisKKyAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICB8IFNpemUgb2YgcHJldmlvdXMgY2h1bmsgKGlmIFAgPSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8UHwKKwkgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDF8ICstKworICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKwkgKy0gICAgICBzaXplIC0gc2l6ZW9mKHNpemVfdCkgYXZhaWxhYmxlIHBheWxvYWQgYnl0ZXMgICAgICAgICAgLSsKKwkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyBjaHVuay0+ICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisJIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwxfAorICAgICAgIHwgU2l6ZSBvZiBuZXh0IGNodW5rIChtYXkgb3IgbWF5IG5vdCBiZSBpbiB1c2UpICAgICAgICAgICAgICAgfCArLSsKKyBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgICAgQW5kIGlmIGl0J3MgZnJlZSwgaXQgbG9va3MgbGlrZSB0aGlzOgorCisgICBjaHVuay0+ICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisJICAgfCBVc2VyIHBheWxvYWQgKG11c3QgYmUgaW4gdXNlLCBvciB3ZSB3b3VsZCBoYXZlIG1lcmdlZCEpICAgICAgIHwKKwkgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfFB8CisJIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwfCArLSsKKyAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJIHwgTmV4dCBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJIHwgUHJldiBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisJICstICAgICAgc2l6ZSAtIHNpemVvZihzdHJ1Y3QgY2h1bmspIHVudXNlZCBieXRlcyAgICAgICAgICAgICAgIC0rCisJIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSB8IFNpemUgb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8MHwKKyAgICAgICB8IFNpemUgb2YgbmV4dCBjaHVuayAobXVzdCBiZSBpbiB1c2UsIG9yIHdlIHdvdWxkIGhhdmUgbWVyZ2VkKXwgKy0rCisgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICstIFVzZXIgcGF5bG9hZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCQkJCQkJCQkgICAgIHwwfAorCQkJCQkJCQkgICAgICstKworICBOb3RlIHRoYXQgc2luY2Ugd2UgYWx3YXlzIG1lcmdlIGFkamFjZW50IGZyZWUgY2h1bmtzLCB0aGUgY2h1bmtzCisgIGFkamFjZW50IHRvIGEgZnJlZSBjaHVuayBtdXN0IGJlIGluIHVzZS4KKworICBHaXZlbiBhIHBvaW50ZXIgdG8gYSBjaHVuayAod2hpY2ggY2FuIGJlIGRlcml2ZWQgdHJpdmlhbGx5IGZyb20gdGhlCisgIHBheWxvYWQgcG9pbnRlcikgd2UgY2FuLCBpbiBPKDEpIHRpbWUsIGZpbmQgb3V0IHdoZXRoZXIgdGhlIGFkamFjZW50CisgIGNodW5rcyBhcmUgZnJlZSwgYW5kIGlmIHNvLCB1bmxpbmsgdGhlbSBmcm9tIHRoZSBsaXN0cyB0aGF0IHRoZXkKKyAgYXJlIG9uIGFuZCBtZXJnZSB0aGVtIHdpdGggdGhlIGN1cnJlbnQgY2h1bmsuCisKKyAgQ2h1bmtzIGFsd2F5cyBiZWdpbiBvbiBldmVuIHdvcmQgYm91bmRhcmllcywgc28gdGhlIG1lbSBwb3J0aW9uCisgICh3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgdXNlcikgaXMgYWxzbyBvbiBhbiBldmVuIHdvcmQgYm91bmRhcnksIGFuZAorICB0aHVzIGF0IGxlYXN0IGRvdWJsZS13b3JkIGFsaWduZWQuCisKKyAgVGhlIFAgKFBJTlVTRV9CSVQpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgbG93LW9yZGVyIGJpdCBvZiB0aGUKKyAgY2h1bmsgc2l6ZSAod2hpY2ggaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgdHdvIHdvcmRzKSwgaXMgYW4gaW4tdXNlCisgIGJpdCBmb3IgdGhlICpwcmV2aW91cyogY2h1bmsuICBJZiB0aGF0IGJpdCBpcyAqY2xlYXIqLCB0aGVuIHRoZQorICB3b3JkIGJlZm9yZSB0aGUgY3VycmVudCBjaHVuayBzaXplIGNvbnRhaW5zIHRoZSBwcmV2aW91cyBjaHVuaworICBzaXplLCBhbmQgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgZnJvbnQgb2YgdGhlIHByZXZpb3VzIGNodW5rLgorICBUaGUgdmVyeSBmaXJzdCBjaHVuayBhbGxvY2F0ZWQgYWx3YXlzIGhhcyB0aGlzIGJpdCBzZXQsIHByZXZlbnRpbmcKKyAgYWNjZXNzIHRvIG5vbi1leGlzdGVudCAob3Igbm9uLW93bmVkKSBtZW1vcnkuIElmIHBpbnVzZSBpcyBzZXQgZm9yCisgIGFueSBnaXZlbiBjaHVuaywgdGhlbiB5b3UgQ0FOTk9UIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUKKyAgcHJldmlvdXMgY2h1bmssIGFuZCBtaWdodCBldmVuIGdldCBhIG1lbW9yeSBhZGRyZXNzaW5nIGZhdWx0IHdoZW4KKyAgdHJ5aW5nIHRvIGRvIHNvLgorCisgIFRoZSBDIChDSU5VU0VfQklUKSBiaXQsIHN0b3JlZCBpbiB0aGUgdW51c2VkIHNlY29uZC1sb3dlc3QgYml0IG9mCisgIHRoZSBjaHVuayBzaXplIHJlZHVuZGFudGx5IHJlY29yZHMgd2hldGhlciB0aGUgY3VycmVudCBjaHVuayBpcworICBpbnVzZS4gVGhpcyByZWR1bmRhbmN5IGVuYWJsZXMgdXNhZ2UgY2hlY2tzIHdpdGhpbiBmcmVlIGFuZCByZWFsbG9jLAorICBhbmQgcmVkdWNlcyBpbmRpcmVjdGlvbiB3aGVuIGZyZWVpbmcgYW5kIGNvbnNvbGlkYXRpbmcgY2h1bmtzLgorCisgIEVhY2ggZnJlc2hseSBhbGxvY2F0ZWQgY2h1bmsgbXVzdCBoYXZlIGJvdGggY2ludXNlIGFuZCBwaW51c2Ugc2V0LgorICBUaGF0IGlzLCBlYWNoIGFsbG9jYXRlZCBjaHVuayBib3JkZXJzIGVpdGhlciBhIHByZXZpb3VzbHkgYWxsb2NhdGVkCisgIGFuZCBzdGlsbCBpbi11c2UgY2h1bmssIG9yIHRoZSBiYXNlIG9mIGl0cyBtZW1vcnkgYXJlbmEuIFRoaXMgaXMKKyAgZW5zdXJlZCBieSBtYWtpbmcgYWxsIGFsbG9jYXRpb25zIGZyb20gdGhlIGBsb3dlc3QnIHBhcnQgb2YgYW55CisgIGZvdW5kIGNodW5rLiAgRnVydGhlciwgbm8gZnJlZSBjaHVuayBwaHlzaWNhbGx5IGJvcmRlcnMgYW5vdGhlciBvbmUsCisgIHNvIGVhY2ggZnJlZSBjaHVuayBpcyBrbm93biB0byBiZSBwcmVjZWRlZCBhbmQgZm9sbG93ZWQgYnkgZWl0aGVyCisgIGludXNlIGNodW5rcyBvciB0aGUgZW5kcyBvZiBtZW1vcnkuCisKKyAgTm90ZSB0aGF0IHRoZSBgZm9vdCcgb2YgdGhlIGN1cnJlbnQgY2h1bmsgaXMgYWN0dWFsbHkgcmVwcmVzZW50ZWQKKyAgYXMgdGhlIHByZXZfZm9vdCBvZiB0aGUgTkVYVCBjaHVuay4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8KKyAgZGVhbCB3aXRoIGFsaWdubWVudHMgZXRjIGJ1dCBjYW4gYmUgdmVyeSBjb25mdXNpbmcgd2hlbiB0cnlpbmcKKyAgdG8gZXh0ZW5kIG9yIGFkYXB0IHRoaXMgY29kZS4KKworICBUaGUgZXhjZXB0aW9ucyB0byBhbGwgdGhpcyBhcmUKKworICAgICAxLiBUaGUgc3BlY2lhbCBjaHVuayBgdG9wJyBpcyB0aGUgdG9wLW1vc3QgYXZhaWxhYmxlIGNodW5rIChpLmUuLAorCXRoZSBvbmUgYm9yZGVyaW5nIHRoZSBlbmQgb2YgYXZhaWxhYmxlIG1lbW9yeSkuIEl0IGlzIHRyZWF0ZWQKKwlzcGVjaWFsbHkuICBUb3AgaXMgbmV2ZXIgaW5jbHVkZWQgaW4gYW55IGJpbiwgaXMgdXNlZCBvbmx5IGlmCisJbm8gb3RoZXIgY2h1bmsgaXMgYXZhaWxhYmxlLCBhbmQgaXMgcmVsZWFzZWQgYmFjayB0byB0aGUKKwlzeXN0ZW0gaWYgaXQgaXMgdmVyeSBsYXJnZSAoc2VlIE1fVFJJTV9USFJFU0hPTEQpLiAgSW4gZWZmZWN0LAorCXRoZSB0b3AgY2h1bmsgaXMgdHJlYXRlZCBhcyBsYXJnZXIgKGFuZCB0aHVzIGxlc3Mgd2VsbAorCWZpdHRpbmcpIHRoYW4gYW55IG90aGVyIGF2YWlsYWJsZSBjaHVuay4gIFRoZSB0b3AgY2h1bmsKKwlkb2Vzbid0IHVwZGF0ZSBpdHMgdHJhaWxpbmcgc2l6ZSBmaWVsZCBzaW5jZSB0aGVyZSBpcyBubyBuZXh0CisJY29udGlndW91cyBjaHVuayB0aGF0IHdvdWxkIGhhdmUgdG8gaW5kZXggb2ZmIGl0LiBIb3dldmVyLAorCXNwYWNlIGlzIHN0aWxsIGFsbG9jYXRlZCBmb3IgaXQgKFRPUF9GT09UX1NJWkUpIHRvIGVuYWJsZQorCXNlcGFyYXRpb24gb3IgbWVyZ2luZyB3aGVuIHNwYWNlIGlzIGV4dGVuZGVkLgorCisgICAgIDMuIENodW5rcyBhbGxvY2F0ZWQgdmlhIG1tYXAsIHdoaWNoIGhhdmUgdGhlIGxvd2VzdC1vcmRlciBiaXQKKwkoSVNfTU1BUFBFRF9CSVQpIHNldCBpbiB0aGVpciBwcmV2X2Zvb3QgZmllbGRzLCBhbmQgZG8gbm90IHNldAorCVBJTlVTRV9CSVQgaW4gdGhlaXIgaGVhZCBmaWVsZHMuICBCZWNhdXNlIHRoZXkgYXJlIGFsbG9jYXRlZAorCW9uZS1ieS1vbmUsIGVhY2ggbXVzdCBjYXJyeSBpdHMgb3duIHByZXZfZm9vdCBmaWVsZCwgd2hpY2ggaXMKKwlhbHNvIHVzZWQgdG8gaG9sZCB0aGUgb2Zmc2V0IHRoaXMgY2h1bmsgaGFzIHdpdGhpbiBpdHMgbW1hcHBlZAorCXJlZ2lvbiwgd2hpY2ggaXMgbmVlZGVkIHRvIHByZXNlcnZlIGFsaWdubWVudC4gRWFjaCBtbWFwcGVkCisJY2h1bmsgaXMgdHJhaWxlZCBieSB0aGUgZmlyc3QgdHdvIGZpZWxkcyBvZiBhIGZha2UgbmV4dC1jaHVuaworCWZvciBzYWtlIG9mIHVzYWdlIGNoZWNrcy4KKworKi8KKworc3RydWN0IG1hbGxvY19jaHVuayB7CisgIHNpemVfdCAgICAgICAgICAgICAgIHByZXZfZm9vdDsgIC8qIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgKGlmIGZyZWUpLiAgKi8KKyAgc2l6ZV90ICAgICAgICAgICAgICAgaGVhZDsgICAgICAgLyogU2l6ZSBhbmQgaW51c2UgYml0cy4gKi8KKyAgc3RydWN0IG1hbGxvY19jaHVuayogZmQ7ICAgICAgICAgLyogZG91YmxlIGxpbmtzIC0tIHVzZWQgb25seSBpZiBmcmVlLiAqLworICBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBiazsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayAgbWNodW5rOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBtY2h1bmtwdHI7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsqIHNiaW5wdHI7ICAvKiBUaGUgdHlwZSBvZiBiaW5zIG9mIGNodW5rcyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgYmluZGV4X3Q7ICAgICAgICAgLyogRGVzY3JpYmVkIGJlbG93ICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5tYXBfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsYWdfdDsgICAgICAgICAgIC8qIFRoZSB0eXBlIG9mIHZhcmlvdXMgYml0IGZsYWcgc2V0cyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIENodW5rcyBzaXplcyBhbmQgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIE1DSFVOS19TSVpFICAgICAgICAgKHNpemVvZihtY2h1bmspKQorCisjaWYgRk9PVEVSUworI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChUV09fU0laRV9UX1NJWkVTKQorI2Vsc2UgLyogRk9PVEVSUyAqLworI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChTSVpFX1RfU0laRSkKKyNlbmRpZiAvKiBGT09URVJTICovCisKKy8qIE1NYXBwZWQgY2h1bmtzIG5lZWQgYSBzZWNvbmQgd29yZCBvZiBvdmVyaGVhZCAuLi4gKi8KKyNkZWZpbmUgTU1BUF9DSFVOS19PVkVSSEVBRCAoVFdPX1NJWkVfVF9TSVpFUykKKy8qIC4uLiBhbmQgYWRkaXRpb25hbCBwYWRkaW5nIGZvciBmYWtlIG5leHQtY2h1bmsgYXQgZm9vdCAqLworI2RlZmluZSBNTUFQX0ZPT1RfUEFEICAgICAgIChGT1VSX1NJWkVfVF9TSVpFUykKKworLyogVGhlIHNtYWxsZXN0IHNpemUgd2UgY2FuIG1hbGxvYyBpcyBhbiBhbGlnbmVkIG1pbmltYWwgY2h1bmsgKi8KKyNkZWZpbmUgTUlOX0NIVU5LX1NJWkVcCisgICgoTUNIVU5LX1NJWkUgKyBDSFVOS19BTElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQorCisvKiBjb252ZXJzaW9uIGZyb20gbWFsbG9jIGhlYWRlcnMgdG8gdXNlciBwb2ludGVycywgYW5kIGJhY2sgKi8KKyNkZWZpbmUgY2h1bmsybWVtKHApICAgICAgICAoKHZvaWQqKSgoY2hhciopKHApICAgICAgICsgVFdPX1NJWkVfVF9TSVpFUykpCisjZGVmaW5lIG1lbTJjaHVuayhtZW0pICAgICAgKChtY2h1bmtwdHIpKChjaGFyKikobWVtKSAtIFRXT19TSVpFX1RfU0laRVMpKQorLyogY2h1bmsgYXNzb2NpYXRlZCB3aXRoIGFsaWduZWQgYWRkcmVzcyBBICovCisjZGVmaW5lIGFsaWduX2FzX2NodW5rKEEpICAgKG1jaHVua3B0cikoKEEpICsgYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShBKSkpCisKKy8qIEJvdW5kcyBvbiByZXF1ZXN0IChub3QgY2h1bmspIHNpemVzLiAqLworI2RlZmluZSBNQVhfUkVRVUVTVCAgICAgICAgICgoLU1JTl9DSFVOS19TSVpFKSA8PCAyKQorI2RlZmluZSBNSU5fUkVRVUVTVCAgICAgICAgIChNSU5fQ0hVTktfU0laRSAtIENIVU5LX09WRVJIRUFEIC0gU0laRV9UX09ORSkKKworLyogcGFkIHJlcXVlc3QgYnl0ZXMgaW50byBhIHVzYWJsZSBzaXplICovCisjZGVmaW5lIHBhZF9yZXF1ZXN0KHJlcSkgXAorICAgKCgocmVxKSArIENIVU5LX09WRVJIRUFEICsgQ0hVTktfQUxJR05fTUFTSykgJiB+Q0hVTktfQUxJR05fTUFTSykKKworLyogcGFkIHJlcXVlc3QsIGNoZWNraW5nIGZvciBtaW5pbXVtIChidXQgbm90IG1heGltdW0pICovCisjZGVmaW5lIHJlcXVlc3Qyc2l6ZShyZXEpIFwKKyAgKCgocmVxKSA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChyZXEpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIGhlYWQgYW5kIGZvb3QgZmllbGRzIC0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFRoZSBoZWFkIGZpZWxkIG9mIGEgY2h1bmsgaXMgb3InZWQgd2l0aCBQSU5VU0VfQklUIHdoZW4gcHJldmlvdXMKKyAgYWRqYWNlbnQgY2h1bmsgaW4gdXNlLCBhbmQgb3InZWQgd2l0aCBDSU5VU0VfQklUIGlmIHRoaXMgY2h1bmsgaXMgaW4KKyAgdXNlLiBJZiB0aGUgY2h1bmsgd2FzIG9idGFpbmVkIHdpdGggbW1hcCwgdGhlIHByZXZfZm9vdCBmaWVsZCBoYXMKKyAgSVNfTU1BUFBFRF9CSVQgc2V0LCBvdGhlcndpc2UgaG9sZGluZyB0aGUgb2Zmc2V0IG9mIHRoZSBiYXNlIG9mIHRoZQorICBtbWFwcGVkIHJlZ2lvbiB0byB0aGUgYmFzZSBvZiB0aGUgY2h1bmsuCisKKyAgRkxBRzRfQklUIGlzIG5vdCB1c2VkIGJ5IHRoaXMgbWFsbG9jLCBidXQgbWlnaHQgYmUgdXNlZnVsIGluIGV4dGVuc2lvbnMuCisqLworCisjZGVmaW5lIFBJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9PTkUpCisjZGVmaW5lIENJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9UV08pCisjZGVmaW5lIEZMQUc0X0JJVCAgICAgICAgICAgKFNJWkVfVF9GT1VSKQorI2RlZmluZSBJTlVTRV9CSVRTICAgICAgICAgIChQSU5VU0VfQklUfENJTlVTRV9CSVQpCisjZGVmaW5lIEZMQUdfQklUUyAgICAgICAgICAgKFBJTlVTRV9CSVR8Q0lOVVNFX0JJVHxGTEFHNF9CSVQpCisKKy8qIEhlYWQgdmFsdWUgZm9yIGZlbmNlcG9zdHMgKi8KKyNkZWZpbmUgRkVOQ0VQT1NUX0hFQUQgICAgICAoSU5VU0VfQklUU3xTSVpFX1RfU0laRSkKKworLyogZXh0cmFjdGlvbiBvZiBmaWVsZHMgZnJvbSBoZWFkIHdvcmRzICovCisjZGVmaW5lIGNpbnVzZShwKSAgICAgICAgICAgKChwKS0+aGVhZCAmIENJTlVTRV9CSVQpCisjZGVmaW5lIHBpbnVzZShwKSAgICAgICAgICAgKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpCisjZGVmaW5lIGNodW5rc2l6ZShwKSAgICAgICAgKChwKS0+aGVhZCAmIH4oRkxBR19CSVRTKSkKKworI2RlZmluZSBjbGVhcl9waW51c2UocCkgICAgICgocCktPmhlYWQgJj0gflBJTlVTRV9CSVQpCisjZGVmaW5lIGNsZWFyX2NpbnVzZShwKSAgICAgKChwKS0+aGVhZCAmPSB+Q0lOVVNFX0JJVCkKKworLyogVHJlYXQgc3BhY2UgYXQgcHRyICsvLSBvZmZzZXQgYXMgYSBjaHVuayAqLworI2RlZmluZSBjaHVua19wbHVzX29mZnNldChwLCBzKSAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpCisjZGVmaW5lIGNodW5rX21pbnVzX29mZnNldChwLCBzKSAoKG1jaHVua3B0cikoKChjaGFyKikocCkpIC0gKHMpKSkKKworLyogUHRyIHRvIG5leHQgb3IgcHJldmlvdXMgcGh5c2ljYWwgbWFsbG9jX2NodW5rLiAqLworI2RlZmluZSBuZXh0X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKikocCkpICsgKChwKS0+aGVhZCAmIH5GTEFHX0JJVFMpKSkKKyNkZWZpbmUgcHJldl9jaHVuayhwKSAoKG1jaHVua3B0cikoICgoY2hhciopKHApKSAtICgocCktPnByZXZfZm9vdCkgKSkKKworLyogZXh0cmFjdCBuZXh0IGNodW5rJ3MgcGludXNlIGJpdCAqLworI2RlZmluZSBuZXh0X3BpbnVzZShwKSAgKChuZXh0X2NodW5rKHApLT5oZWFkKSAmIFBJTlVTRV9CSVQpCisKKy8qIEdldC9zZXQgc2l6ZSBhdCBmb290ZXIgKi8KKyNkZWZpbmUgZ2V0X2Zvb3QocCwgcykgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QpCisjZGVmaW5lIHNldF9mb290KHAsIHMpICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290ID0gKHMpKQorCisvKiBTZXQgc2l6ZSwgcGludXNlIGJpdCwgYW5kIGZvb3QgKi8KKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVCksIHNldF9mb290KHAsIHMpKQorCisvKiBTZXQgc2l6ZSwgcGludXNlIGJpdCwgZm9vdCwgYW5kIGNsZWFyIG5leHQgcGludXNlICovCisjZGVmaW5lIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHMsIG4pXAorICAoY2xlYXJfcGludXNlKG4pLCBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcykpCisKKyNkZWZpbmUgaXNfbW1hcHBlZChwKVwKKyAgKCEoKHApLT5oZWFkICYgUElOVVNFX0JJVCkgJiYgKChwKS0+cHJldl9mb290ICYgSVNfTU1BUFBFRF9CSVQpKQorCisvKiBHZXQgdGhlIGludGVybmFsIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCBjaHVuayBwICovCisjZGVmaW5lIG92ZXJoZWFkX2ZvcihwKVwKKyAoaXNfbW1hcHBlZChwKT8gTU1BUF9DSFVOS19PVkVSSEVBRCA6IENIVU5LX09WRVJIRUFEKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBtYWxsb2NlZCBzcGFjZSBpcyBub3QgbmVjZXNzYXJpbHkgY2xlYXJlZCAqLworI2lmIE1NQVBfQ0xFQVJTCisjZGVmaW5lIGNhbGxvY19tdXN0X2NsZWFyKHApICghaXNfbW1hcHBlZChwKSkKKyNlbHNlIC8qIE1NQVBfQ0xFQVJTICovCisjZGVmaW5lIGNhbGxvY19tdXN0X2NsZWFyKHApICgxKQorI2VuZGlmIC8qIE1NQVBfQ0xFQVJTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3ZlcmxhaWQgZGF0YSBzdHJ1Y3R1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFdoZW4gY2h1bmtzIGFyZSBub3QgaW4gdXNlLCB0aGV5IGFyZSB0cmVhdGVkIGFzIG5vZGVzIG9mIGVpdGhlcgorICBsaXN0cyBvciB0cmVlcy4KKworICAiU21hbGwiICBjaHVua3MgYXJlIHN0b3JlZCBpbiBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3RzLCBhbmQgbG9vaworICBsaWtlIHRoaXM6CisKKyAgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAorICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBGb3J3YXJkIHBvaW50ZXIgdG8gbmV4dCBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBVbnVzZWQgc3BhY2UgKG1heSBiZSAwIGJ5dGVzIGxvbmcpICAgICAgICAgICAgICAgIC4KKwkgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKwkgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK25leHRjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGZvb3Q6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgIExhcmdlciBjaHVua3MgYXJlIGtlcHQgaW4gYSBmb3JtIG9mIGJpdHdpc2UgZGlnaXRhbCB0cmVlcyAoYWthCisgIHRyaWVzKSBrZXllZCBvbiBjaHVua3NpemVzLiAgQmVjYXVzZSBtYWxsb2NfdHJlZV9jaHVua3MgYXJlIG9ubHkgZm9yCisgIGZyZWUgY2h1bmtzIGdyZWF0ZXIgdGhhbiAyNTYgYnl0ZXMsIHRoZWlyIHNpemUgZG9lc24ndCBpbXBvc2UgYW55CisgIGNvbnN0cmFpbnRzIG9uIHVzZXIgY2h1bmsgc2l6ZXMuICBFYWNoIG5vZGUgbG9va3MgbGlrZToKKworICAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgaGVhZDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8CisgICAgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIEZvcndhcmQgcG9pbnRlciB0byBuZXh0IGNodW5rIG9mIHNhbWUgc2l6ZSAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIEJhY2sgcG9pbnRlciB0byBwcmV2aW91cyBjaHVuayBvZiBzYW1lIHNpemUgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gbGVmdCBjaGlsZCAoY2hpbGRbMF0pICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gcmlnaHQgY2hpbGQgKGNoaWxkWzFdKSAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gcGFyZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIGJpbiBpbmRleCBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFVudXNlZCBzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorCSAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgZm9vdDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgRWFjaCB0cmVlIGhvbGRpbmcgdHJlZW5vZGVzIGlzIGEgdHJlZSBvZiB1bmlxdWUgY2h1bmsgc2l6ZXMuICBDaHVua3MKKyAgb2YgdGhlIHNhbWUgc2l6ZSBhcmUgYXJyYW5nZWQgaW4gYSBjaXJjdWxhcmx5LWxpbmtlZCBsaXN0LCB3aXRoIG9ubHkKKyAgdGhlIG9sZGVzdCBjaHVuayAodGhlIG5leHQgdG8gYmUgdXNlZCwgaW4gb3VyIEZJRk8gb3JkZXJpbmcpCisgIGFjdHVhbGx5IGluIHRoZSB0cmVlLiAgKFRyZWUgbWVtYmVycyBhcmUgZGlzdGluZ3Vpc2hlZCBieSBhIG5vbi1udWxsCisgIHBhcmVudCBwb2ludGVyLikgIElmIGEgY2h1bmsgd2l0aCB0aGUgc2FtZSBzaXplIGFzIGFuIGV4aXN0aW5nIG5vZGUKKyAgaXMgaW5zZXJ0ZWQsIGl0IGlzIGxpbmtlZCBvZmYgdGhlIGV4aXN0aW5nIG5vZGUgdXNpbmcgcG9pbnRlcnMgdGhhdAorICB3b3JrIGluIHRoZSBzYW1lIHdheSBhcyBmZC9iayBwb2ludGVycyBvZiBzbWFsbCBjaHVua3MuCisKKyAgRWFjaCB0cmVlIGNvbnRhaW5zIGEgcG93ZXIgb2YgMiBzaXplZCByYW5nZSBvZiBjaHVuayBzaXplcyAodGhlCisgIHNtYWxsZXN0IGlzIDB4MTAwIDw9IHggPCAweDE4MCksIHdoaWNoIGlzIGRpdmlkZWQgaW4gaGFsZiBhdCBlYWNoCisgIHRyZWUgbGV2ZWwsIHdpdGggdGhlIGNodW5rcyBpbiB0aGUgc21hbGxlciBoYWxmIG9mIHRoZSByYW5nZSAoMHgxMDAKKyAgPD0geCA8IDB4MTQwIGZvciB0aGUgdG9wIG5vc2UpIGluIHRoZSBsZWZ0IHN1YnRyZWUgYW5kIHRoZSBsYXJnZXIKKyAgaGFsZiAoMHgxNDAgPD0geCA8IDB4MTgwKSBpbiB0aGUgcmlnaHQgc3VidHJlZS4gIFRoaXMgaXMsIG9mIGNvdXJzZSwKKyAgZG9uZSBieSBpbnNwZWN0aW5nIGluZGl2aWR1YWwgYml0cy4KKworICBVc2luZyB0aGVzZSBydWxlcywgZWFjaCBub2RlJ3MgbGVmdCBzdWJ0cmVlIGNvbnRhaW5zIGFsbCBzbWFsbGVyCisgIHNpemVzIHRoYW4gaXRzIHJpZ2h0IHN1YnRyZWUuICBIb3dldmVyLCB0aGUgbm9kZSBhdCB0aGUgcm9vdCBvZiBlYWNoCisgIHN1YnRyZWUgaGFzIG5vIHBhcnRpY3VsYXIgb3JkZXJpbmcgcmVsYXRpb25zaGlwIHRvIGVpdGhlci4gIChUaGUKKyAgZGl2aWRpbmcgbGluZSBiZXR3ZWVuIHRoZSBzdWJ0cmVlIHNpemVzIGlzIGJhc2VkIG9uIHRyaWUgcmVsYXRpb24uKQorICBJZiB3ZSByZW1vdmUgdGhlIGxhc3QgY2h1bmsgb2YgYSBnaXZlbiBzaXplIGZyb20gdGhlIGludGVyaW9yIG9mIHRoZQorICB0cmVlLCB3ZSBuZWVkIHRvIHJlcGxhY2UgaXQgd2l0aCBhIGxlYWYgbm9kZS4gIFRoZSB0cmVlIG9yZGVyaW5nCisgIHJ1bGVzIHBlcm1pdCBhIG5vZGUgdG8gYmUgcmVwbGFjZWQgYnkgYW55IGxlYWYgYmVsb3cgaXQuCisKKyAgVGhlIHNtYWxsZXN0IGNodW5rIGluIGEgdHJlZSAoYSBjb21tb24gb3BlcmF0aW9uIGluIGEgYmVzdC1maXQKKyAgYWxsb2NhdG9yKSBjYW4gYmUgZm91bmQgYnkgd2Fsa2luZyBhIHBhdGggdG8gdGhlIGxlZnRtb3N0IGxlYWYgaW4KKyAgdGhlIHRyZWUuICBVbmxpa2UgYSB1c3VhbCBiaW5hcnkgdHJlZSwgd2hlcmUgd2UgZm9sbG93IGxlZnQgY2hpbGQKKyAgcG9pbnRlcnMgdW50aWwgd2UgcmVhY2ggYSBudWxsLCBoZXJlIHdlIGZvbGxvdyB0aGUgcmlnaHQgY2hpbGQKKyAgcG9pbnRlciBhbnkgdGltZSB0aGUgbGVmdCBvbmUgaXMgbnVsbCwgdW50aWwgd2UgcmVhY2ggYSBsZWFmIHdpdGgKKyAgYm90aCBjaGlsZCBwb2ludGVycyBudWxsLiBUaGUgc21hbGxlc3QgY2h1bmsgaW4gdGhlIHRyZWUgd2lsbCBiZQorICBzb21ld2hlcmUgYWxvbmcgdGhhdCBwYXRoLgorCisgIFRoZSB3b3JzdCBjYXNlIG51bWJlciBvZiBzdGVwcyB0byBhZGQsIGZpbmQsIG9yIHJlbW92ZSBhIG5vZGUgaXMKKyAgYm91bmRlZCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgZGlmZmVyZW50aWF0aW5nIGNodW5rcyB3aXRoaW4KKyAgYmlucy4gVW5kZXIgY3VycmVudCBiaW4gY2FsY3VsYXRpb25zLCB0aGlzIHJhbmdlcyBmcm9tIDYgdXAgdG8gMjEKKyAgKGZvciAzMiBiaXQgc2l6ZXMpIG9yIHVwIHRvIDUzIChmb3IgNjQgYml0IHNpemVzKS4gVGhlIHR5cGljYWwgY2FzZQorICBpcyBvZiBjb3Vyc2UgbXVjaCBiZXR0ZXIuCisqLworCitzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgeworICAvKiBUaGUgZmlyc3QgZm91ciBmaWVsZHMgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggbWFsbG9jX2NodW5rICovCisgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgcHJldl9mb290OworICBzaXplX3QgICAgICAgICAgICAgICAgICAgIGhlYWQ7CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogZmQ7CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogYms7CisKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBjaGlsZFsyXTsKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBwYXJlbnQ7CisgIGJpbmRleF90ICAgICAgICAgICAgICAgICAgaW5kZXg7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayAgdGNodW5rOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIHRjaHVua3B0cjsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiB0YmlucHRyOyAvKiBUaGUgdHlwZSBvZiBiaW5zIG9mIHRyZWVzICovCisKKy8qIEEgbGl0dGxlIGhlbHBlciBtYWNybyBmb3IgdHJlZXMgKi8KKyNkZWZpbmUgbGVmdG1vc3RfY2hpbGQodCkgKCh0KS0+Y2hpbGRbMF0gIT0gMD8gKHQpLT5jaGlsZFswXSA6ICh0KS0+Y2hpbGRbMV0pCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNlZ21lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIEVhY2ggbWFsbG9jIHNwYWNlIG1heSBpbmNsdWRlIG5vbi1jb250aWd1b3VzIHNlZ21lbnRzLCBoZWxkIGluIGEKKyAgbGlzdCBoZWFkZWQgYnkgYW4gZW1iZWRkZWQgbWFsbG9jX3NlZ21lbnQgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUKKyAgdG9wLW1vc3Qgc3BhY2UuIFNlZ21lbnRzIGFsc28gaW5jbHVkZSBmbGFncyBob2xkaW5nIHByb3BlcnRpZXMgb2YKKyAgdGhlIHNwYWNlLiBMYXJnZSBjaHVua3MgdGhhdCBhcmUgZGlyZWN0bHkgYWxsb2NhdGVkIGJ5IG1tYXAgYXJlIG5vdAorICBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuIFRoZXkgYXJlIGluc3RlYWQgaW5kZXBlbmRlbnRseSBjcmVhdGVkIGFuZAorICBkZXN0cm95ZWQgd2l0aG91dCBvdGhlcndpc2Uga2VlcGluZyB0cmFjayBvZiB0aGVtLgorCisgIFNlZ21lbnQgbWFuYWdlbWVudCBtYWlubHkgY29tZXMgaW50byBwbGF5IGZvciBzcGFjZXMgYWxsb2NhdGVkIGJ5CisgIE1NQVAuICBBbnkgY2FsbCB0byBNTUFQIG1pZ2h0IG9yIG1pZ2h0IG5vdCByZXR1cm4gbWVtb3J5IHRoYXQgaXMKKyAgYWRqYWNlbnQgdG8gYW4gZXhpc3Rpbmcgc2VnbWVudC4gIE1PUkVDT1JFIG5vcm1hbGx5IGNvbnRpZ3VvdXNseQorICBleHRlbmRzIHRoZSBjdXJyZW50IHNwYWNlLCBzbyB0aGlzIHNwYWNlIGlzIGFsbW9zdCBhbHdheXMgYWRqYWNlbnQsCisgIHdoaWNoIGlzIHNpbXBsZXIgYW5kIGZhc3RlciB0byBkZWFsIHdpdGguIChUaGlzIGlzIHdoeSBNT1JFQ09SRSBpcworICB1c2VkIHByZWZlcmVudGlhbGx5IHRvIE1NQVAgd2hlbiBib3RoIGFyZSBhdmFpbGFibGUgLS0gc2VlCisgIHN5c19hbGxvYy4pICBXaGVuIGFsbG9jYXRpbmcgdXNpbmcgTU1BUCwgd2UgZG9uJ3QgdXNlIGFueSBvZiB0aGUKKyAgaGludGluZyBtZWNoYW5pc21zIChpbmNvbnNpc3RlbnRseSkgc3VwcG9ydGVkIGluIHZhcmlvdXMKKyAgaW1wbGVtZW50YXRpb25zIG9mIHVuaXggbW1hcCwgb3IgZGlzdGluZ3Vpc2ggcmVzZXJ2aW5nIGZyb20KKyAgY29tbWl0dGluZyBtZW1vcnkuIEluc3RlYWQsIHdlIGp1c3QgYXNrIGZvciBzcGFjZSwgYW5kIGV4cGxvaXQKKyAgY29udGlndWl0eSB3aGVuIHdlIGdldCBpdC4gIEl0IGlzIHByb2JhYmx5IHBvc3NpYmxlIHRvIGRvCisgIGJldHRlciB0aGFuIHRoaXMgb24gc29tZSBzeXN0ZW1zLCBidXQgbm8gZ2VuZXJhbCBzY2hlbWUgc2VlbXMKKyAgdG8gYmUgc2lnbmlmaWNhbnRseSBiZXR0ZXIuCisKKyAgTWFuYWdlbWVudCBlbnRhaWxzIGEgc2ltcGxlciB2YXJpYW50IG9mIHRoZSBjb25zb2xpZGF0aW9uIHNjaGVtZQorICB1c2VkIGZvciBjaHVua3MgdG8gcmVkdWNlIGZyYWdtZW50YXRpb24gLS0gbmV3IGFkamFjZW50IG1lbW9yeSBpcworICBub3JtYWxseSBwcmVwZW5kZWQgb3IgYXBwZW5kZWQgdG8gYW4gZXhpc3Rpbmcgc2VnbWVudC4gSG93ZXZlciwKKyAgdGhlcmUgYXJlIGxpbWl0YXRpb25zIGNvbXBhcmVkIHRvIGNodW5rIGNvbnNvbGlkYXRpb24gdGhhdCBtb3N0bHkKKyAgcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHNlZ21lbnQgcHJvY2Vzc2luZyBpcyByZWxhdGl2ZWx5IGluZnJlcXVlbnQKKyAgKG9jY3VycmluZyBvbmx5IHdoZW4gZ2V0dGluZyBtZW1vcnkgZnJvbSBzeXN0ZW0pIGFuZCB0aGF0IHdlCisgIGRvbid0IGV4cGVjdCB0byBoYXZlIGh1Z2UgbnVtYmVycyBvZiBzZWdtZW50czoKKworICAqIFNlZ21lbnRzIGFyZSBub3QgaW5kZXhlZCwgc28gdHJhdmVyc2FsIHJlcXVpcmVzIGxpbmVhciBzY2Fucy4gIChJdAorICAgIHdvdWxkIGJlIHBvc3NpYmxlIHRvIGluZGV4IHRoZXNlLCBidXQgaXMgbm90IHdvcnRoIHRoZSBleHRyYQorICAgIG92ZXJoZWFkIGFuZCBjb21wbGV4aXR5IGZvciBtb3N0IHByb2dyYW1zIG9uIG1vc3QgcGxhdGZvcm1zLikKKyAgKiBOZXcgc2VnbWVudHMgYXJlIG9ubHkgYXBwZW5kZWQgdG8gb2xkIG9uZXMgd2hlbiBob2xkaW5nIHRvcC1tb3N0CisgICAgbWVtb3J5OyBpZiB0aGV5IGNhbm5vdCBiZSBwcmVwZW5kZWQgdG8gb3RoZXJzLCB0aGV5IGFyZSBoZWxkIGluCisgICAgZGlmZmVyZW50IHNlZ21lbnRzLgorCisgIEV4Y2VwdCBmb3IgdGhlIHRvcC1tb3N0IHNlZ21lbnQgb2YgYW4gbXN0YXRlLCBlYWNoIHNlZ21lbnQgcmVjb3JkCisgIGlzIGtlcHQgYXQgdGhlIHRhaWwgb2YgaXRzIHNlZ21lbnQuIFNlZ21lbnRzIGFyZSBhZGRlZCBieSBwdXNoaW5nCisgIHNlZ21lbnQgcmVjb3JkcyBvbnRvIHRoZSBsaXN0IGhlYWRlZCBieSAmbXN0YXRlLnNlZyBmb3IgdGhlCisgIGNvbnRhaW5pbmcgbXN0YXRlLgorCisgIFNlZ21lbnQgZmxhZ3MgY29udHJvbCBhbGxvY2F0aW9uL21lcmdlL2RlYWxsb2NhdGlvbiBwb2xpY2llczoKKyAgKiBJZiBFWFRFUk5fQklUIHNldCwgdGhlbiB3ZSBkaWQgbm90IGFsbG9jYXRlIHRoaXMgc2VnbWVudCwKKyAgICBhbmQgc28gc2hvdWxkIG5vdCB0cnkgdG8gZGVhbGxvY2F0ZSBvciBtZXJnZSB3aXRoIG90aGVycy4KKyAgICAoVGhpcyBjdXJyZW50bHkgaG9sZHMgb25seSBmb3IgdGhlIGluaXRpYWwgc2VnbWVudCBwYXNzZWQKKyAgICBpbnRvIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlLikKKyAgKiBJZiBJU19NTUFQUEVEX0JJVCBzZXQsIHRoZSBzZWdtZW50IG1heSBiZSBtZXJnZWQgd2l0aAorICAgIG90aGVyIHN1cnJvdW5kaW5nIG1tYXBwZWQgc2VnbWVudHMgYW5kIHRyaW1tZWQvZGUtYWxsb2NhdGVkCisgICAgdXNpbmcgbXVubWFwLgorICAqIElmIG5laXRoZXIgYml0IGlzIHNldCwgdGhlbiB0aGUgc2VnbWVudCB3YXMgb2J0YWluZWQgdXNpbmcKKyAgICBNT1JFQ09SRSBzbyBjYW4gYmUgbWVyZ2VkIHdpdGggc3Vycm91bmRpbmcgTU9SRUNPUkUnZCBzZWdtZW50cworICAgIGFuZCBkZWFsbG9jYXRlZC90cmltbWVkIHVzaW5nIE1PUkVDT1JFIHdpdGggbmVnYXRpdmUgYXJndW1lbnRzLgorKi8KKworc3RydWN0IG1hbGxvY19zZWdtZW50IHsKKyAgY2hhciogICAgICAgIGJhc2U7ICAgICAgICAgICAgIC8qIGJhc2UgYWRkcmVzcyAqLworICBzaXplX3QgICAgICAgc2l6ZTsgICAgICAgICAgICAgLyogYWxsb2NhdGVkIHNpemUgKi8KKyAgc3RydWN0IG1hbGxvY19zZWdtZW50KiBuZXh0OyAgIC8qIHB0ciB0byBuZXh0IHNlZ21lbnQgKi8KKyAgZmxhZ190ICAgICAgIHNmbGFnczsgICAgICAgICAgIC8qIG1tYXAgYW5kIGV4dGVybiBmbGFnICovCit9OworCisjZGVmaW5lIGlzX21tYXBwZWRfc2VnbWVudChTKSAgKChTKS0+c2ZsYWdzICYgSVNfTU1BUFBFRF9CSVQpCisjZGVmaW5lIGlzX2V4dGVybl9zZWdtZW50KFMpICAgKChTKS0+c2ZsYWdzICYgRVhURVJOX0JJVCkKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQgIG1zZWdtZW50OwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQqIG1zZWdtZW50cHRyOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvY19zdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICAgQSBtYWxsb2Nfc3RhdGUgaG9sZHMgYWxsIG9mIHRoZSBib29ra2VlcGluZyBmb3IgYSBzcGFjZS4KKyAgIFRoZSBtYWluIGZpZWxkcyBhcmU6CisKKyAgVG9wCisgICAgVGhlIHRvcG1vc3QgY2h1bmsgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgc2VnbWVudC4gSXRzIHNpemUgaXMKKyAgICBjYWNoZWQgaW4gdG9wc2l6ZS4gIFRoZSBhY3R1YWwgc2l6ZSBvZiB0b3Btb3N0IHNwYWNlIGlzCisgICAgdG9wc2l6ZStUT1BfRk9PVF9TSVpFLCB3aGljaCBpbmNsdWRlcyBzcGFjZSByZXNlcnZlZCBmb3IgYWRkaW5nCisgICAgZmVuY2Vwb3N0cyBhbmQgc2VnbWVudCByZWNvcmRzIGlmIG5lY2Vzc2FyeSB3aGVuIGdldHRpbmcgbW9yZQorICAgIHNwYWNlIGZyb20gdGhlIHN5c3RlbS4gIFRoZSBzaXplIGF0IHdoaWNoIHRvIGF1dG90cmltIHRvcCBpcworICAgIGNhY2hlZCBmcm9tIG1wYXJhbXMgaW4gdHJpbV9jaGVjaywgZXhjZXB0IHRoYXQgaXQgaXMgZGlzYWJsZWQgaWYKKyAgICBhbiBhdXRvdHJpbSBmYWlscy4KKworICBEZXNpZ25hdGVkIHZpY3RpbSAoZHYpCisgICAgVGhpcyBpcyB0aGUgcHJlZmVycmVkIGNodW5rIGZvciBzZXJ2aWNpbmcgc21hbGwgcmVxdWVzdHMgdGhhdAorICAgIGRvbid0IGhhdmUgZXhhY3QgZml0cy4gIEl0IGlzIG5vcm1hbGx5IHRoZSBjaHVuayBzcGxpdCBvZmYgbW9zdAorICAgIHJlY2VudGx5IHRvIHNlcnZpY2UgYW5vdGhlciBzbWFsbCByZXF1ZXN0LiAgSXRzIHNpemUgaXMgY2FjaGVkIGluCisgICAgZHZzaXplLiBUaGUgbGluayBmaWVsZHMgb2YgdGhpcyBjaHVuayBhcmUgbm90IG1haW50YWluZWQgc2luY2UgaXQKKyAgICBpcyBub3Qga2VwdCBpbiBhIGJpbi4KKworICBTbWFsbEJpbnMKKyAgICBBbiBhcnJheSBvZiBiaW4gaGVhZGVycyBmb3IgZnJlZSBjaHVua3MuICBUaGVzZSBiaW5zIGhvbGQgY2h1bmtzCisgICAgd2l0aCBzaXplcyBsZXNzIHRoYW4gTUlOX0xBUkdFX1NJWkUgYnl0ZXMuIEVhY2ggYmluIGNvbnRhaW5zCisgICAgY2h1bmtzIG9mIGFsbCB0aGUgc2FtZSBzaXplLCBzcGFjZWQgOCBieXRlcyBhcGFydC4gIFRvIHNpbXBsaWZ5CisgICAgdXNlIGluIGRvdWJsZS1saW5rZWQgbGlzdHMsIGVhY2ggYmluIGhlYWRlciBhY3RzIGFzIGEgbWFsbG9jX2NodW5rCisgICAgcG9pbnRpbmcgdG8gdGhlIHJlYWwgZmlyc3Qgbm9kZSwgaWYgaXQgZXhpc3RzIChlbHNlIHBvaW50aW5nIHRvCisgICAgaXRzZWxmKS4gIFRoaXMgYXZvaWRzIHNwZWNpYWwtY2FzaW5nIGZvciBoZWFkZXJzLiAgQnV0IHRvIGF2b2lkCisgICAgd2FzdGUsIHdlIGFsbG9jYXRlIG9ubHkgdGhlIGZkL2JrIHBvaW50ZXJzIG9mIGJpbnMsIGFuZCB0aGVuIHVzZQorICAgIHJlcG9zaXRpb25pbmcgdHJpY2tzIHRvIHRyZWF0IHRoZXNlIGFzIHRoZSBmaWVsZHMgb2YgYSBjaHVuay4KKworICBUcmVlQmlucworICAgIFRyZWViaW5zIGFyZSBwb2ludGVycyB0byB0aGUgcm9vdHMgb2YgdHJlZXMgaG9sZGluZyBhIHJhbmdlIG9mCisgICAgc2l6ZXMuIFRoZXJlIGFyZSAyIGVxdWFsbHkgc3BhY2VkIHRyZWViaW5zIGZvciBlYWNoIHBvd2VyIG9mIHR3bworICAgIGZyb20gVFJFRV9TSElGVCB0byBUUkVFX1NISUZUKzE2LiBUaGUgbGFzdCBiaW4gaG9sZHMgYW55dGhpbmcKKyAgICBsYXJnZXIuCisKKyAgQmluIG1hcHMKKyAgICBUaGVyZSBpcyBvbmUgYml0IG1hcCBmb3Igc21hbGwgYmlucyAoInNtYWxsbWFwIikgYW5kIG9uZSBmb3IKKyAgICB0cmVlYmlucyAoInRyZWVtYXApLiAgRWFjaCBiaW4gc2V0cyBpdHMgYml0IHdoZW4gbm9uLWVtcHR5LCBhbmQKKyAgICBjbGVhcnMgdGhlIGJpdCB3aGVuIGVtcHR5LiAgQml0IG9wZXJhdGlvbnMgYXJlIHRoZW4gdXNlZCB0byBhdm9pZAorICAgIGJpbi1ieS1iaW4gc2VhcmNoaW5nIC0tIG5lYXJseSBhbGwgInNlYXJjaCIgaXMgZG9uZSB3aXRob3V0IGV2ZXIKKyAgICBsb29raW5nIGF0IGJpbnMgdGhhdCB3b24ndCBiZSBzZWxlY3RlZC4gIFRoZSBiaXQgbWFwcworICAgIGNvbnNlcnZhdGl2ZWx5IHVzZSAzMiBiaXRzIHBlciBtYXAgd29yZCwgZXZlbiBpZiBvbiA2NGJpdCBzeXN0ZW0uCisgICAgRm9yIGEgZ29vZCBkZXNjcmlwdGlvbiBvZiBzb21lIG9mIHRoZSBiaXQtYmFzZWQgdGVjaG5pcXVlcyB1c2VkCisgICAgaGVyZSwgc2VlIEhlbnJ5IFMuIFdhcnJlbiBKcidzIGJvb2sgIkhhY2tlcidzIERlbGlnaHQiIChhbmQKKyAgICBzdXBwbGVtZW50IGF0IGh0dHA6Ly9oYWNrZXJzZGVsaWdodC5vcmcvKS4gTWFueSBvZiB0aGVzZSBhcmUKKyAgICBpbnRlbmRlZCB0byByZWR1Y2UgdGhlIGJyYW5jaGluZXNzIG9mIHBhdGhzIHRocm91Z2ggbWFsbG9jIGV0YywgYXMKKyAgICB3ZWxsIGFzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIG1lbW9yeSBsb2NhdGlvbnMgcmVhZCBvciB3cml0dGVuLgorCisgIFNlZ21lbnRzCisgICAgQSBsaXN0IG9mIHNlZ21lbnRzIGhlYWRlZCBieSBhbiBlbWJlZGRlZCBtYWxsb2Nfc2VnbWVudCByZWNvcmQKKyAgICByZXByZXNlbnRpbmcgdGhlIGluaXRpYWwgc3BhY2UuCisKKyAgQWRkcmVzcyBjaGVjayBzdXBwb3J0CisgICAgVGhlIGxlYXN0X2FkZHIgZmllbGQgaXMgdGhlIGxlYXN0IGFkZHJlc3MgZXZlciBvYnRhaW5lZCBmcm9tCisgICAgTU9SRUNPUkUgb3IgTU1BUC4gQXR0ZW1wdGVkIGZyZWVzIGFuZCByZWFsbG9jcyBvZiBhbnkgYWRkcmVzcyBsZXNzCisgICAgdGhhbiB0aGlzIGFyZSB0cmFwcGVkICh1bmxlc3MgSU5TRUNVUkUgaXMgZGVmaW5lZCkuCisKKyAgTWFnaWMgdGFnCisgICAgQSBjcm9zcy1jaGVjayBmaWVsZCB0aGF0IHNob3VsZCBhbHdheXMgaG9sZCBzYW1lIHZhbHVlIGFzIG1wYXJhbXMubWFnaWMuCisKKyAgRmxhZ3MKKyAgICBCaXRzIHJlY29yZGluZyB3aGV0aGVyIHRvIHVzZSBNTUFQLCBsb2Nrcywgb3IgY29udGlndW91cyBNT1JFQ09SRQorCisgIFN0YXRpc3RpY3MKKyAgICBFYWNoIHNwYWNlIGtlZXBzIHRyYWNrIG9mIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeQorICAgIG9idGFpbmVkIHZpYSBNT1JFQ09SRSBvciBNTUFQLgorCisgIFRyaW0gc3VwcG9ydAorICAgIEZpZWxkcyBob2xkaW5nIHRoZSBhbW91bnQgb2YgdW51c2VkIHRvcG1vc3QgbWVtb3J5IHRoYXQgc2hvdWxkIHRyaWdnZXIKKyAgICB0aW1pbmcsIGFuZCBhIGNvdW50ZXIgdG8gZm9yY2UgcGVyaW9kaWMgc2Nhbm5pbmcgdG8gcmVsZWFzZSB1bnVzZWQKKyAgICBub24tdG9wbW9zdCBzZWdtZW50cy4KKworICBMb2NraW5nCisgICAgSWYgVVNFX0xPQ0tTIGlzIGRlZmluZWQsIHRoZSAibXV0ZXgiIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkCisgICAgYXJvdW5kIGV2ZXJ5IHB1YmxpYyBjYWxsIHVzaW5nIHRoaXMgbXNwYWNlLgorCisgIEV4dGVuc2lvbiBzdXBwb3J0CisgICAgQSB2b2lkKiBwb2ludGVyIGFuZCBhIHNpemVfdCBmaWVsZCB0aGF0IGNhbiBiZSB1c2VkIHRvIGhlbHAgaW1wbGVtZW50CisgICAgZXh0ZW5zaW9ucyB0byB0aGlzIG1hbGxvYy4KKyovCisKKy8qIEJpbiB0eXBlcywgd2lkdGhzIGFuZCBzaXplcyAqLworI2RlZmluZSBOU01BTExCSU5TICAgICAgICAoMzJVKQorI2RlZmluZSBOVFJFRUJJTlMgICAgICAgICAoMzJVKQorI2RlZmluZSBTTUFMTEJJTl9TSElGVCAgICAoM1UpCisjZGVmaW5lIFNNQUxMQklOX1dJRFRIICAgIChTSVpFX1RfT05FIDw8IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBUUkVFQklOX1NISUZUICAgICAoOFUpCisjZGVmaW5lIE1JTl9MQVJHRV9TSVpFICAgIChTSVpFX1RfT05FIDw8IFRSRUVCSU5fU0hJRlQpCisjZGVmaW5lIE1BWF9TTUFMTF9TSVpFICAgIChNSU5fTEFSR0VfU0laRSAtIFNJWkVfVF9PTkUpCisjZGVmaW5lIE1BWF9TTUFMTF9SRVFVRVNUIChNQVhfU01BTExfU0laRSAtIENIVU5LX0FMSUdOX01BU0sgLSBDSFVOS19PVkVSSEVBRCkKKworc3RydWN0IG1hbGxvY19zdGF0ZSB7CisgIGJpbm1hcF90ICAgc21hbGxtYXA7CisgIGJpbm1hcF90ICAgdHJlZW1hcDsKKyAgc2l6ZV90ICAgICBkdnNpemU7CisgIHNpemVfdCAgICAgdG9wc2l6ZTsKKyAgY2hhciogICAgICBsZWFzdF9hZGRyOworICBtY2h1bmtwdHIgIGR2OworICBtY2h1bmtwdHIgIHRvcDsKKyAgc2l6ZV90ICAgICB0cmltX2NoZWNrOworICBzaXplX3QgICAgIHJlbGVhc2VfY2hlY2tzOworICBzaXplX3QgICAgIG1hZ2ljOworICBtY2h1bmtwdHIgIHNtYWxsYmluc1soTlNNQUxMQklOUysxKSoyXTsKKyAgdGJpbnB0ciAgICB0cmVlYmluc1tOVFJFRUJJTlNdOworICBzaXplX3QgICAgIGZvb3RwcmludDsKKyAgc2l6ZV90ICAgICBtYXhfZm9vdHByaW50OworICBmbGFnX3QgICAgIG1mbGFnczsKKyNpZiBVU0VfTE9DS1MKKyAgTUxPQ0tfVCAgICBtdXRleDsgICAgIC8qIGxvY2F0ZSBsb2NrIGFtb25nIGZpZWxkcyB0aGF0IHJhcmVseSBjaGFuZ2UgKi8KKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKyAgbXNlZ21lbnQgICBzZWc7CisgIHZvaWQqICAgICAgZXh0cDsgICAgICAvKiBVbnVzZWQgYnV0IGF2YWlsYWJsZSBmb3IgZXh0ZW5zaW9ucyAqLworICBzaXplX3QgICAgIGV4dHM7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc3RhdGUqICAgIG1zdGF0ZTsKKworLyogLS0tLS0tLS0tLS0tLSBHbG9iYWwgbWFsbG9jX3N0YXRlIGFuZCBtYWxsb2NfcGFyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgbWFsbG9jX3BhcmFtcyBob2xkcyBnbG9iYWwgcHJvcGVydGllcywgaW5jbHVkaW5nIHRob3NlIHRoYXQgY2FuIGJlCisgIGR5bmFtaWNhbGx5IHNldCB1c2luZyBtYWxsb3B0LiBUaGVyZSBpcyBhIHNpbmdsZSBpbnN0YW5jZSwgbXBhcmFtcywKKyAgaW5pdGlhbGl6ZWQgaW4gaW5pdF9tcGFyYW1zLiBOb3RlIHRoYXQgdGhlIG5vbi16ZXJvbmVzcyBvZiAibWFnaWMiCisgIGFsc28gc2VydmVzIGFzIGFuIGluaXRpYWxpemF0aW9uIGZsYWcuCisqLworCitzdHJ1Y3QgbWFsbG9jX3BhcmFtcyB7CisgIHZvbGF0aWxlIHNpemVfdCBtYWdpYzsKKyAgc2l6ZV90IHBhZ2Vfc2l6ZTsKKyAgc2l6ZV90IGdyYW51bGFyaXR5OworICBzaXplX3QgbW1hcF90aHJlc2hvbGQ7CisgIHNpemVfdCB0cmltX3RocmVzaG9sZDsKKyAgZmxhZ190IGRlZmF1bHRfbWZsYWdzOworfTsKKworc3RhdGljIHN0cnVjdCBtYWxsb2NfcGFyYW1zIG1wYXJhbXM7CisKKy8qIEVuc3VyZSBtcGFyYW1zIGluaXRpYWxpemVkICovCisjZGVmaW5lIGVuc3VyZV9pbml0aWFsaXphdGlvbigpICgodm9pZCkobXBhcmFtcy5tYWdpYyAhPSAwIHx8IGluaXRfbXBhcmFtcygpKSkKKworI2lmICFPTkxZX01TUEFDRVMKKworLyogVGhlIGdsb2JhbCBtYWxsb2Nfc3RhdGUgdXNlZCBmb3IgYWxsIG5vbi0ibXNwYWNlIiBjYWxscyAqLworc3RhdGljIHN0cnVjdCBtYWxsb2Nfc3RhdGUgX2dtXzsKKyNkZWZpbmUgZ20gICAgICAgICAgICAgICAgICgmX2dtXykKKyNkZWZpbmUgaXNfZ2xvYmFsKE0pICAgICAgICgoTSkgPT0gJl9nbV8pCisKKyNlbmRpZiAvKiAhT05MWV9NU1BBQ0VTICovCisKKyNkZWZpbmUgaXNfaW5pdGlhbGl6ZWQoTSkgICgoTSktPnRvcCAhPSAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzeXN0ZW0gYWxsb2Mgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBPcGVyYXRpb25zIG9uIG1mbGFncyAqLworCisjZGVmaW5lIHVzZV9sb2NrKE0pICAgICAgICAgICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9MT0NLX0JJVCkKKyNkZWZpbmUgZW5hYmxlX2xvY2soTSkgICAgICAgICgoTSktPm1mbGFncyB8PSAgVVNFX0xPQ0tfQklUKQorI2RlZmluZSBkaXNhYmxlX2xvY2soTSkgICAgICAgKChNKS0+bWZsYWdzICY9IH5VU0VfTE9DS19CSVQpCisKKyNkZWZpbmUgdXNlX21tYXAoTSkgICAgICAgICAgICgoTSktPm1mbGFncyAmICAgVVNFX01NQVBfQklUKQorI2RlZmluZSBlbmFibGVfbW1hcChNKSAgICAgICAgKChNKS0+bWZsYWdzIHw9ICBVU0VfTU1BUF9CSVQpCisjZGVmaW5lIGRpc2FibGVfbW1hcChNKSAgICAgICAoKE0pLT5tZmxhZ3MgJj0gflVTRV9NTUFQX0JJVCkKKworI2RlZmluZSB1c2Vfbm9uY29udGlndW91cyhNKSAgKChNKS0+bWZsYWdzICYgICBVU0VfTk9OQ09OVElHVU9VU19CSVQpCisjZGVmaW5lIGRpc2FibGVfY29udGlndW91cyhNKSAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9OT05DT05USUdVT1VTX0JJVCkKKworI2RlZmluZSBzZXRfbG9jayhNLEwpXAorICgoTSktPm1mbGFncyA9IChMKT9cCisgICgoTSktPm1mbGFncyB8IFVTRV9MT0NLX0JJVCkgOlwKKyAgKChNKS0+bWZsYWdzICYgflVTRV9MT0NLX0JJVCkpCisKKy8qIHBhZ2UtYWxpZ24gYSBzaXplICovCisjZGVmaW5lIHBhZ2VfYWxpZ24oUylcCisgKCgoUykgKyAobXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkgJiB+KG1wYXJhbXMucGFnZV9zaXplIC0gU0laRV9UX09ORSkpCisKKy8qIGdyYW51bGFyaXR5LWFsaWduIGEgc2l6ZSAqLworI2RlZmluZSBncmFudWxhcml0eV9hbGlnbihTKVwKKyAgKCgoUykgKyAobXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKVwKKyAgICYgfihtcGFyYW1zLmdyYW51bGFyaXR5IC0gU0laRV9UX09ORSkpCisKKworLyogRm9yIG1tYXAsIHVzZSBncmFudWxhcml0eSBhbGlnbm1lbnQgb24gd2luZG93cywgZWxzZSBwYWdlLWFsaWduICovCisjaWZkZWYgV0lOMzIKKyNkZWZpbmUgbW1hcF9hbGlnbihTKSBncmFudWxhcml0eV9hbGlnbihTKQorI2Vsc2UKKyNkZWZpbmUgbW1hcF9hbGlnbihTKSBwYWdlX2FsaWduKFMpCisjZW5kaWYKKworLyogRm9yIHN5c19hbGxvYywgZW5vdWdoIHBhZGRpbmcgdG8gZW5zdXJlIGNhbiBtYWxsb2MgcmVxdWVzdCBvbiBzdWNjZXNzICovCisjZGVmaW5lIFNZU19BTExPQ19QQURESU5HIChUT1BfRk9PVF9TSVpFICsgTUFMTE9DX0FMSUdOTUVOVCkKKworI2RlZmluZSBpc19wYWdlX2FsaWduZWQoUylcCisgICAoKChzaXplX3QpKFMpICYgKG1wYXJhbXMucGFnZV9zaXplIC0gU0laRV9UX09ORSkpID09IDApCisjZGVmaW5lIGlzX2dyYW51bGFyaXR5X2FsaWduZWQoUylcCisgICAoKChzaXplX3QpKFMpICYgKG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSkgPT0gMCkKKworLyogIFRydWUgaWYgc2VnbWVudCBTIGhvbGRzIGFkZHJlc3MgQSAqLworI2RlZmluZSBzZWdtZW50X2hvbGRzKFMsIEEpXAorICAoKGNoYXIqKShBKSA+PSBTLT5iYXNlICYmIChjaGFyKikoQSkgPCBTLT5iYXNlICsgUy0+c2l6ZSkKKworLyogUmV0dXJuIHNlZ21lbnQgaG9sZGluZyBnaXZlbiBhZGRyZXNzICovCitzdGF0aWMgbXNlZ21lbnRwdHIgc2VnbWVudF9ob2xkaW5nKG1zdGF0ZSBtLCBjaGFyKiBhZGRyKSB7CisgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsKKyAgZm9yICg7OykgeworICAgIGlmIChhZGRyID49IHNwLT5iYXNlICYmIGFkZHIgPCBzcC0+YmFzZSArIHNwLT5zaXplKQorICAgICAgcmV0dXJuIHNwOworICAgIGlmICgoc3AgPSBzcC0+bmV4dCkgPT0gMCkKKyAgICAgIHJldHVybiAwOworICB9Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIHNlZ21lbnQgY29udGFpbnMgYSBzZWdtZW50IGxpbmsgKi8KK3N0YXRpYyBpbnQgaGFzX3NlZ21lbnRfbGluayhtc3RhdGUgbSwgbXNlZ21lbnRwdHIgc3MpIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICBmb3IgKDs7KSB7CisgICAgaWYgKChjaGFyKilzcCA+PSBzcy0+YmFzZSAmJiAoY2hhciopc3AgPCBzcy0+YmFzZSArIHNzLT5zaXplKQorICAgICAgcmV0dXJuIDE7CisgICAgaWYgKChzcCA9IHNwLT5uZXh0KSA9PSAwKQorICAgICAgcmV0dXJuIDA7CisgIH0KK30KKworI2lmbmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQorI2RlZmluZSBzaG91bGRfdHJpbShNLHMpICAoKHMpID4gKE0pLT50cmltX2NoZWNrKQorI2Vsc2UgIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisjZGVmaW5lIHNob3VsZF90cmltKE0scykgICgwKQorI2VuZGlmIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisKKy8qCisgIFRPUF9GT09UX1NJWkUgaXMgcGFkZGluZyBhdCB0aGUgZW5kIG9mIGEgc2VnbWVudCwgaW5jbHVkaW5nIHNwYWNlCisgIHRoYXQgbWF5IGJlIG5lZWRlZCB0byBwbGFjZSBzZWdtZW50IHJlY29yZHMgYW5kIGZlbmNlcG9zdHMgd2hlbiBuZXcKKyAgbm9uY29udGlndW91cyBzZWdtZW50cyBhcmUgYWRkZWQuCisqLworI2RlZmluZSBUT1BfRk9PVF9TSVpFXAorICAoYWxpZ25fb2Zmc2V0KGNodW5rMm1lbSgwKSkrcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCkpK01JTl9DSFVOS19TSVpFKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEhvb2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFBSRUFDVElPTiBzaG91bGQgYmUgZGVmaW5lZCB0byByZXR1cm4gMCBvbiBzdWNjZXNzLCBhbmQgbm9uemVybyBvbgorICBmYWlsdXJlLiBJZiB5b3UgYXJlIG5vdCB1c2luZyBsb2NraW5nLCB5b3UgY2FuIHJlZGVmaW5lIHRoZXNlIHRvIGRvCisgIGFueXRoaW5nIHlvdSBsaWtlLgorKi8KKworI2lmIFVTRV9MT0NLUworCisjZGVmaW5lIFBSRUFDVElPTihNKSAgKCh1c2VfbG9jayhNKSk/IEFDUVVJUkVfTE9DSygmKE0pLT5tdXRleCkgOiAwKQorI2RlZmluZSBQT1NUQUNUSU9OKE0pIHsgaWYgKHVzZV9sb2NrKE0pKSBSRUxFQVNFX0xPQ0soJihNKS0+bXV0ZXgpOyB9CisjZWxzZSAvKiBVU0VfTE9DS1MgKi8KKworI2lmbmRlZiBQUkVBQ1RJT04KKyNkZWZpbmUgUFJFQUNUSU9OKE0pICgwKQorI2VuZGlmICAvKiBQUkVBQ1RJT04gKi8KKworI2lmbmRlZiBQT1NUQUNUSU9OCisjZGVmaW5lIFBPU1RBQ1RJT04oTSkKKyNlbmRpZiAgLyogUE9TVEFDVElPTiAqLworCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKy8qCisgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OIGlzIHRyaWdnZXJlZCB1cG9uIGRldGVjdGVkIGJhZCBhZGRyZXNzZXMuCisgIFVTQUdFX0VSUk9SX0FDVElPTiBpcyB0cmlnZ2VyZWQgb24gZGV0ZWN0ZWQgYmFkIGZyZWVzIGFuZAorICByZWFsbG9jcy4gVGhlIGFyZ3VtZW50IHAgaXMgYW4gYWRkcmVzcyB0aGF0IG1pZ2h0IGhhdmUgdHJpZ2dlcmVkIHRoZQorICBmYXVsdC4gSXQgaXMgaWdub3JlZCBieSB0aGUgdHdvIHByZWRlZmluZWQgYWN0aW9ucywgYnV0IG1pZ2h0IGJlCisgIHVzZWZ1bCBpbiBjdXN0b20gYWN0aW9ucyB0aGF0IHRyeSB0byBoZWxwIGRpYWdub3NlIGVycm9ycy4KKyovCisKKyNpZiBQUk9DRUVEX09OX0VSUk9SCisKKy8qIEEgY291bnQgb2YgdGhlIG51bWJlciBvZiBjb3JydXB0aW9uIGVycm9ycyBjYXVzaW5nIHJlc2V0cyAqLworaW50IG1hbGxvY19jb3JydXB0aW9uX2Vycm9yX2NvdW50OworCisvKiBkZWZhdWx0IGNvcnJ1cHRpb24gYWN0aW9uICovCitzdGF0aWMgdm9pZCByZXNldF9vbl9lcnJvcihtc3RhdGUgbSk7CisKKyNkZWZpbmUgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSkgIHJlc2V0X29uX2Vycm9yKG0pCisjZGVmaW5lIFVTQUdFX0VSUk9SX0FDVElPTihtLCBwKQorCisjZWxzZSAvKiBQUk9DRUVEX09OX0VSUk9SICovCisKKyNpZm5kZWYgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04KKyNkZWZpbmUgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSkgQUJPUlQKKyNlbmRpZiAvKiBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiAqLworCisjaWZuZGVmIFVTQUdFX0VSUk9SX0FDVElPTgorI2RlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSxwKSBBQk9SVAorI2VuZGlmIC8qIFVTQUdFX0VSUk9SX0FDVElPTiAqLworCisjZW5kaWYgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1Z2dpbmcgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgISBERUJVRworCisjZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19pbnVzZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKQorI2RlZmluZSBjaGVja19tbWFwcGVkX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKE0pCisjZGVmaW5lIGNoZWNrX3RvcF9jaHVuayhNLFApCisKKyNlbHNlIC8qIERFQlVHICovCisjZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoTSxQKSAgICAgICBkb19jaGVja19mcmVlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfaW51c2VfY2h1bmsoTSxQKSAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfdG9wX2NodW5rKE0sUCkgICAgICAgIGRvX2NoZWNrX3RvcF9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKSBkb19jaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikKKyNkZWZpbmUgY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApICAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2Nfc3RhdGUoTSkgICAgICAgZG9fY2hlY2tfbWFsbG9jX3N0YXRlKE0pCisKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfYW55X2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RvcF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19tbWFwcGVkX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsobXN0YXRlIG0sIHZvaWQqIG1lbSwgc2l6ZV90IHMpOworc3RhdGljIHZvaWQgICBkb19jaGVja190cmVlKG1zdGF0ZSBtLCB0Y2h1bmtwdHIgdCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RyZWViaW4obXN0YXRlIG0sIGJpbmRleF90IGkpOworc3RhdGljIHZvaWQgICBkb19jaGVja19zbWFsbGJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21hbGxvY19zdGF0ZShtc3RhdGUgbSk7CitzdGF0aWMgaW50ICAgIGJpbl9maW5kKG1zdGF0ZSBtLCBtY2h1bmtwdHIgeCk7CitzdGF0aWMgc2l6ZV90IHRyYXZlcnNlX2FuZF9jaGVjayhtc3RhdGUgbSk7CisjZW5kaWYgLyogREVCVUcgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbmRleGluZyBCaW5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBpc19zbWFsbChzKSAgICAgICAgICgoKHMpID4+IFNNQUxMQklOX1NISUZUKSA8IE5TTUFMTEJJTlMpCisjZGVmaW5lIHNtYWxsX2luZGV4KHMpICAgICAgKChzKSAgPj4gU01BTExCSU5fU0hJRlQpCisjZGVmaW5lIHNtYWxsX2luZGV4MnNpemUoaSkgKChpKSAgPDwgU01BTExCSU5fU0hJRlQpCisjZGVmaW5lIE1JTl9TTUFMTF9JTkRFWCAgICAgKHNtYWxsX2luZGV4KE1JTl9DSFVOS19TSVpFKSkKKworLyogYWRkcmVzc2luZyBieSBpbmRleC4gU2VlIGFib3ZlIGFib3V0IHNtYWxsYmluIHJlcG9zaXRpb25pbmcgKi8KKyNkZWZpbmUgc21hbGxiaW5fYXQoTSwgaSkgICAoKHNiaW5wdHIpKChjaGFyKikmKChNKS0+c21hbGxiaW5zWyhpKTw8MV0pKSkKKyNkZWZpbmUgdHJlZWJpbl9hdChNLGkpICAgICAoJigoTSktPnRyZWViaW5zW2ldKSkKKworLyogYXNzaWduIHRyZWUgaW5kZXggZm9yIHNpemUgUyB0byB2YXJpYWJsZSBJLiBVc2UgeDg2IGFzbSBpZiBwb3NzaWJsZSAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgSztcCisgICAgX19hc21fXygiYnNybFx0JTEsICUwXG5cdCIgOiAiPXIiIChLKSA6ICJybSIgIChYKSk7XAorICAgIEkgPSAgKGJpbmRleF90KSgoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKSk7XAorICB9XAorfQorCisjZWxpZiBkZWZpbmVkIChfX0lOVEVMX0NPTVBJTEVSKQorI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCit7XAorICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCisgIGlmIChYID09IDApXAorICAgIEkgPSAwO1wKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCisgICAgSSA9IE5UUkVFQklOUy0xO1wKKyAgZWxzZSB7XAorICAgIHVuc2lnbmVkIGludCBLID0gX2JpdF9zY2FuX3JldmVyc2UgKFgpOyBcCisgICAgSSA9ICAoYmluZGV4X3QpKChLIDw8IDEpICsgKChTID4+IChLICsgKFRSRUVCSU5fU0hJRlQtMSkpICYgMSkpKTtcCisgIH1cCit9CisKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwCisjZGVmaW5lIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKVwKK3tcCisgIHNpemVfdCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wKKyAgaWYgKFggPT0gMClcCisgICAgSSA9IDA7XAorICBlbHNlIGlmIChYID4gMHhGRkZGKVwKKyAgICBJID0gTlRSRUVCSU5TLTE7XAorICBlbHNlIHtcCisgICAgdW5zaWduZWQgaW50IEs7XAorICAgIF9CaXRTY2FuUmV2ZXJzZSgoRFdPUkQgKikgJkssIFgpO1wKKyAgICBJID0gIChiaW5kZXhfdCkoKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSkpO1wKKyAgfVwKK30KKworI2Vsc2UgLyogR05VQyAqLworI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCit7XAorICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCisgIGlmIChYID09IDApXAorICAgIEkgPSAwO1wKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCisgICAgSSA9IE5UUkVFQklOUy0xO1wKKyAgZWxzZSB7XAorICAgIHVuc2lnbmVkIGludCBZID0gKHVuc2lnbmVkIGludClYO1wKKyAgICB1bnNpZ25lZCBpbnQgTiA9ICgoWSAtIDB4MTAwKSA+PiAxNikgJiA4O1wKKyAgICB1bnNpZ25lZCBpbnQgSyA9ICgoKFkgPDw9IE4pIC0gMHgxMDAwKSA+PiAxNikgJiA0O1wKKyAgICBOICs9IEs7XAorICAgIE4gKz0gSyA9ICgoKFkgPDw9IEspIC0gMHg0MDAwKSA+PiAxNikgJiAyO1wKKyAgICBLID0gMTQgLSBOICsgKChZIDw8PSBLKSA+PiAxNSk7XAorICAgIEkgPSAoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKTtcCisgIH1cCit9CisjZW5kaWYgLyogR05VQyAqLworCisvKiBCaXQgcmVwcmVzZW50aW5nIG1heGltdW0gcmVzb2x2ZWQgc2l6ZSBpbiBhIHRyZWViaW4gYXQgaSAqLworI2RlZmluZSBiaXRfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKGkgPT0gTlRSRUVCSU5TLTEpPyAoU0laRV9UX0JJVFNJWkUtMSkgOiAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKQorCisvKiBTaGlmdCBwbGFjaW5nIG1heGltdW0gcmVzb2x2ZWQgYml0IGluIGEgdHJlZWJpbiBhdCBpIGFzIHNpZ24gYml0ICovCisjZGVmaW5lIGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChpKSBcCisgICAoKGkgPT0gTlRSRUVCSU5TLTEpPyAwIDogXAorICAgICgoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkgLSAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKSkpCisKKy8qIFRoZSBzaXplIG9mIHRoZSBzbWFsbGVzdCBjaHVuayBoZWxkIGluIGJpbiB3aXRoIGluZGV4IGkgKi8KKyNkZWZpbmUgbWluc2l6ZV9mb3JfdHJlZV9pbmRleChpKSBcCisgICAoKFNJWkVfVF9PTkUgPDwgKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUKSkgfCAgXAorICAgKCgoc2l6ZV90KSgoaSkgJiBTSVpFX1RfT05FKSkgPDwgKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMSkpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIGJpbiBtYXBzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGJpdCBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGluZGV4ICovCisjZGVmaW5lIGlkeDJiaXQoaSkgICAgICAgICAgICAgICgoYmlubWFwX3QpKDEpIDw8IChpKSkKKworLyogTWFyay9DbGVhciBiaXRzIHdpdGggZ2l2ZW4gaW5kZXggKi8KKyNkZWZpbmUgbWFya19zbWFsbG1hcChNLGkpICAgICAgKChNKS0+c21hbGxtYXAgfD0gIGlkeDJiaXQoaSkpCisjZGVmaW5lIGNsZWFyX3NtYWxsbWFwKE0saSkgICAgICgoTSktPnNtYWxsbWFwICY9IH5pZHgyYml0KGkpKQorI2RlZmluZSBzbWFsbG1hcF9pc19tYXJrZWQoTSxpKSAoKE0pLT5zbWFsbG1hcCAmICAgaWR4MmJpdChpKSkKKworI2RlZmluZSBtYXJrX3RyZWVtYXAoTSxpKSAgICAgICAoKE0pLT50cmVlbWFwICB8PSAgaWR4MmJpdChpKSkKKyNkZWZpbmUgY2xlYXJfdHJlZW1hcChNLGkpICAgICAgKChNKS0+dHJlZW1hcCAgJj0gfmlkeDJiaXQoaSkpCisjZGVmaW5lIHRyZWVtYXBfaXNfbWFya2VkKE0saSkgICgoTSktPnRyZWVtYXAgICYgICBpZHgyYml0KGkpKQorCisvKiBpc29sYXRlIHRoZSBsZWFzdCBzZXQgYml0IG9mIGEgYml0bWFwICovCisjZGVmaW5lIGxlYXN0X2JpdCh4KSAgICAgICAgICgoeCkgJiAtKHgpKQorCisvKiBtYXNrIHdpdGggYWxsIGJpdHMgdG8gbGVmdCBvZiBsZWFzdCBiaXQgb2YgeCBvbiAqLworI2RlZmluZSBsZWZ0X2JpdHMoeCkgICAgICAgICAoKHg8PDEpIHwgLSh4PDwxKSkKKworLyogbWFzayB3aXRoIGFsbCBiaXRzIHRvIGxlZnQgb2Ygb3IgZXF1YWwgdG8gbGVhc3QgYml0IG9mIHggb24gKi8KKyNkZWZpbmUgc2FtZV9vcl9sZWZ0X2JpdHMoeCkgKCh4KSB8IC0oeCkpCisKKy8qIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gYml0LiBVc2UgeDg2IGFzbSBpZiBwb3NzaWJsZSAqLworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBKO1wKKyAgX19hc21fXygiYnNmbFx0JTEsICUwXG5cdCIgOiAiPXIiIChKKSA6ICJybSIgKFgpKTtcCisgIEkgPSAoYmluZGV4X3QpSjtcCit9CisKKyNlbGlmIGRlZmluZWQgKF9fSU5URUxfQ09NUElMRVIpCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBKO1wKKyAgSiA9IF9iaXRfc2Nhbl9mb3J3YXJkIChYKTsgXAorICBJID0gKGJpbmRleF90KUo7XAorfQorCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMAorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcCit7XAorICB1bnNpZ25lZCBpbnQgSjtcCisgIF9CaXRTY2FuRm9yd2FyZCgoRFdPUkQgKikgJkosIFgpO1wKKyAgSSA9IChiaW5kZXhfdClKO1wKK30KKworI2VsaWYgVVNFX0JVSUxUSU5fRkZTCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKSBJID0gZmZzKFgpLTEKKworI2Vsc2UKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IFkgPSBYIC0gMTtcCisgIHVuc2lnbmVkIGludCBLID0gWSA+PiAoMTYtNCkgJiAxNjtcCisgIHVuc2lnbmVkIGludCBOID0gSzsgICAgICAgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICg4LTMpICYgIDg7ICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoNC0yKSAmICA0OyAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDItMSkgJiAgMjsgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICgxLTApICYgIDE7ICBZID4+PSBLO1wKKyAgSSA9IChiaW5kZXhfdCkoTiArIFkpO1wKK30KKyNlbmRpZiAvKiBHTlVDICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUnVudGltZSBDaGVjayBTdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgRm9yIHNlY3VyaXR5LCB0aGUgbWFpbiBpbnZhcmlhbnQgaXMgdGhhdCBtYWxsb2MvZnJlZS9ldGMgbmV2ZXIKKyAgd3JpdGVzIHRvIGEgc3RhdGljIGFkZHJlc3Mgb3RoZXIgdGhhbiBtYWxsb2Nfc3RhdGUsIHVubGVzcyBzdGF0aWMKKyAgbWFsbG9jX3N0YXRlIGl0c2VsZiBoYXMgYmVlbiBjb3JydXB0ZWQsIHdoaWNoIGNhbm5vdCBvY2N1ciB2aWEKKyAgbWFsbG9jIChiZWNhdXNlIG9mIHRoZXNlIGNoZWNrcykuIEluIGVzc2VuY2UgdGhpcyBtZWFucyB0aGF0IHdlCisgIGJlbGlldmUgYWxsIHBvaW50ZXJzLCBzaXplcywgbWFwcyBldGMgaGVsZCBpbiBtYWxsb2Nfc3RhdGUsIGJ1dAorICBjaGVjayBhbGwgb2YgdGhvc2UgbGlua2VkIG9yIG9mZnNldHRlZCBmcm9tIG90aGVyIGVtYmVkZGVkIGRhdGEKKyAgc3RydWN0dXJlcy4gIFRoZXNlIGNoZWNrcyBhcmUgaW50ZXJzcGVyc2VkIHdpdGggbWFpbiBjb2RlIGluIGEgd2F5CisgIHRoYXQgdGVuZHMgdG8gbWluaW1pemUgdGhlaXIgcnVuLXRpbWUgY29zdC4KKworICBXaGVuIEZPT1RFUlMgaXMgZGVmaW5lZCwgaW4gYWRkaXRpb24gdG8gcmFuZ2UgY2hlY2tpbmcsIHdlIGFsc28KKyAgdmVyaWZ5IGZvb3RlciBmaWVsZHMgb2YgaW51c2UgY2h1bmtzLCB3aGljaCBjYW4gYmUgdXNlZCBndWFyYW50ZWUKKyAgdGhhdCB0aGUgbXN0YXRlIGNvbnRyb2xsaW5nIG1hbGxvYy9mcmVlIGlzIGludGFjdC4gIFRoaXMgaXMgYQorICBzdHJlYW1saW5lZCB2ZXJzaW9uIG9mIHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYnkgV2lsbGlhbSBSb2JlcnRzb24KKyAgZXQgYWwgaW4gIlJ1bi10aW1lIERldGVjdGlvbiBvZiBIZWFwLWJhc2VkIE92ZXJmbG93cyIgTElTQScwMworICBodHRwOi8vd3d3LnVzZW5peC5vcmcvZXZlbnRzL2xpc2EwMy90ZWNoL3JvYmVydHNvbi5odG1sIFRoZSBmb290ZXIKKyAgb2YgYW4gaW51c2UgY2h1bmsgaG9sZHMgdGhlIHhvciBvZiBpdHMgbXN0YXRlIGFuZCBhIHJhbmRvbSBzZWVkLAorICB0aGF0IGlzIGNoZWNrZWQgdXBvbiBjYWxscyB0byBmcmVlKCkgYW5kIHJlYWxsb2MoKS4gIFRoaXMgaXMKKyAgKHByb2JhYmxpc3RpY2FsbHkpIHVuZ3Vlc3NhYmxlIGZyb20gb3V0c2lkZSB0aGUgcHJvZ3JhbSwgYnV0IGNhbiBiZQorICBjb21wdXRlZCBieSBhbnkgY29kZSBzdWNjZXNzZnVsbHkgbWFsbG9jJ2luZyBhbnkgY2h1bmssIHNvIGRvZXMgbm90CisgIGl0c2VsZiBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBjb2RlIHRoYXQgaGFzIGFscmVhZHkgYnJva2VuCisgIHNlY3VyaXR5IHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4gIFVubGlrZSBSb2JlcnRzb24gZXQgYWwsIHdlCisgIGFsd2F5cyBkeW5hbWljYWxseSBjaGVjayBhZGRyZXNzZXMgb2YgYWxsIG9mZnNldCBjaHVua3MgKHByZXZpb3VzLAorICBuZXh0LCBldGMpLiBUaGlzIHR1cm5zIG91dCB0byBiZSBjaGVhcGVyIHRoYW4gcmVseWluZyBvbiBoYXNoZXMuCisqLworCisjaWYgIUlOU0VDVVJFCisvKiBDaGVjayBpZiBhZGRyZXNzIGEgaXMgYXQgbGVhc3QgYXMgaGlnaCBhcyBhbnkgZnJvbSBNT1JFQ09SRSBvciBNTUFQICovCisjZGVmaW5lIG9rX2FkZHJlc3MoTSwgYSkgKChjaGFyKikoYSkgPj0gKE0pLT5sZWFzdF9hZGRyKQorLyogQ2hlY2sgaWYgYWRkcmVzcyBvZiBuZXh0IGNodW5rIG4gaXMgaGlnaGVyIHRoYW4gYmFzZSBjaHVuayBwICovCisjZGVmaW5lIG9rX25leHQocCwgbikgICAgKChjaGFyKikocCkgPCAoY2hhciopKG4pKQorLyogQ2hlY2sgaWYgcCBoYXMgaXRzIGNpbnVzZSBiaXQgb24gKi8KKyNkZWZpbmUgb2tfY2ludXNlKHApICAgICBjaW51c2UocCkKKy8qIENoZWNrIGlmIHAgaGFzIGl0cyBwaW51c2UgYml0IG9uICovCisjZGVmaW5lIG9rX3BpbnVzZShwKSAgICAgcGludXNlKHApCisKKyNlbHNlIC8qICFJTlNFQ1VSRSAqLworI2RlZmluZSBva19hZGRyZXNzKE0sIGEpICgxKQorI2RlZmluZSBva19uZXh0KGIsIG4pICAgICgxKQorI2RlZmluZSBva19jaW51c2UocCkgICAgICgxKQorI2RlZmluZSBva19waW51c2UocCkgICAgICgxKQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLworCisjaWYgKEZPT1RFUlMgJiYgIUlOU0VDVVJFKQorLyogQ2hlY2sgaWYgKGFsbGVnZWQpIG1zdGF0ZSBtIGhhcyBleHBlY3RlZCBtYWdpYyBmaWVsZCAqLworI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgoTSktPm1hZ2ljID09IG1wYXJhbXMubWFnaWMpCisjZWxzZSAgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgxKQorI2VuZGlmIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKworCisvKiBJbiBnY2MsIHVzZSBfX2J1aWx0aW5fZXhwZWN0IHRvIG1pbmltaXplIGltcGFjdCBvZiBjaGVja3MgKi8KKyNpZiAhSU5TRUNVUkUKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCisjZGVmaW5lIFJUQ0hFQ0soZSkgIF9fYnVpbHRpbl9leHBlY3QoZSwgMSkKKyNlbHNlIC8qIEdOVUMgKi8KKyNkZWZpbmUgUlRDSEVDSyhlKSAgKGUpCisjZW5kaWYgLyogR05VQyAqLworI2Vsc2UgLyogIUlOU0VDVVJFICovCisjZGVmaW5lIFJUQ0hFQ0soZSkgICgxKQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLworCisvKiBtYWNyb3MgdG8gc2V0IHVwIGludXNlIGNodW5rcyB3aXRoIG9yIHdpdGhvdXQgZm9vdGVycyAqLworCisjaWYgIUZPT1RFUlMKKworI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpCisKKy8qIFNldCBjaW51c2UgYml0IGFuZCBwaW51c2UgYml0IG9mIG5leHQgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X2ludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9ICgoKHApLT5oZWFkICYgUElOVVNFX0JJVCl8c3xDSU5VU0VfQklUKSxcCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorCisvKiBTZXQgY2ludXNlIGFuZCBwaW51c2Ugb2YgdGhpcyBjaHVuayBhbmQgcGludXNlIG9mIG5leHQgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorCisvKiBTZXQgc2l6ZSwgY2ludXNlIGFuZCBwaW51c2UgYml0IG9mIHRoaXMgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkpCisKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKworLyogU2V0IGZvb3Qgb2YgaW51c2UgY2h1bmsgdG8gYmUgeG9yIG9mIG1zdGF0ZSBhbmQgc2VlZCAqLworI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpXAorICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290ID0gKChzaXplX3QpKE0pIF4gbXBhcmFtcy5tYWdpYykpCisKKyNkZWZpbmUgZ2V0X21zdGF0ZV9mb3IocClcCisgICgobXN0YXRlKSgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArXAorICAgIChjaHVua3NpemUocCkpKSktPnByZXZfZm9vdCBeIG1wYXJhbXMubWFnaWMpKQorCisjZGVmaW5lIHNldF9pbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpfHN8Q0lOVVNFX0JJVCksXAorICAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpLCBcCisgIG1hcmtfaW51c2VfZm9vdChNLHAscykpCisKKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICgoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCksXAorIG1hcmtfaW51c2VfZm9vdChNLHAscykpCisKKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXAorICBtYXJrX2ludXNlX2Zvb3QoTSwgcCwgcykpCisKKyNlbmRpZiAvKiAhRk9PVEVSUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNldHRpbmcgbXBhcmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbml0aWFsaXplIG1wYXJhbXMgKi8KK3N0YXRpYyBpbnQgaW5pdF9tcGFyYW1zKHZvaWQpIHsKKyNpZmRlZiBORUVEX0dMT0JBTF9MT0NLX0lOSVQKKyAgaWYgKG1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzIDw9IDApCisgICAgaW5pdF9tYWxsb2NfZ2xvYmFsX211dGV4KCk7CisjZW5kaWYKKworICBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOworICBpZiAobXBhcmFtcy5tYWdpYyA9PSAwKSB7CisgICAgc2l6ZV90IG1hZ2ljOworICAgIHNpemVfdCBwc2l6ZTsKKyAgICBzaXplX3QgZ3NpemU7CisKKyNpZm5kZWYgV0lOMzIKKyAgICBwc2l6ZSA9IG1hbGxvY19nZXRwYWdlc2l6ZTsKKyAgICBnc2l6ZSA9ICgoREVGQVVMVF9HUkFOVUxBUklUWSAhPSAwKT8gREVGQVVMVF9HUkFOVUxBUklUWSA6IHBzaXplKTsKKyNlbHNlIC8qIFdJTjMyICovCisgICAgeworICAgICAgU1lTVEVNX0lORk8gc3lzdGVtX2luZm87CisgICAgICBHZXRTeXN0ZW1JbmZvKCZzeXN0ZW1faW5mbyk7CisgICAgICBwc2l6ZSA9IHN5c3RlbV9pbmZvLmR3UGFnZVNpemU7CisgICAgICBnc2l6ZSA9ICgoREVGQVVMVF9HUkFOVUxBUklUWSAhPSAwKT8KKwkgICAgICAgREVGQVVMVF9HUkFOVUxBUklUWSA6IHN5c3RlbV9pbmZvLmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5KTsKKyAgICB9CisjZW5kaWYgLyogV0lOMzIgKi8KKworICAgIC8qIFNhbml0eS1jaGVjayBjb25maWd1cmF0aW9uOgorICAgICAgIHNpemVfdCBtdXN0IGJlIHVuc2lnbmVkIGFuZCBhcyB3aWRlIGFzIHBvaW50ZXIgdHlwZS4KKyAgICAgICBpbnRzIG11c3QgYmUgYXQgbGVhc3QgNCBieXRlcy4KKyAgICAgICBhbGlnbm1lbnQgbXVzdCBiZSBhdCBsZWFzdCA4LgorICAgICAgIEFsaWdubWVudCwgbWluIGNodW5rIHNpemUsIGFuZCBwYWdlIHNpemUgbXVzdCBhbGwgYmUgcG93ZXJzIG9mIDIuCisgICAgKi8KKyAgICBpZiAoKHNpemVvZihzaXplX3QpICE9IHNpemVvZihjaGFyKikpIHx8CisJKE1BWF9TSVpFX1QgPCBNSU5fQ0hVTktfU0laRSkgIHx8CisJKHNpemVvZihpbnQpIDwgNCkgIHx8CisJKE1BTExPQ19BTElHTk1FTlQgPCAoc2l6ZV90KThVKSB8fAorCSgoTUFMTE9DX0FMSUdOTUVOVCAmIChNQUxMT0NfQUxJR05NRU5ULVNJWkVfVF9PTkUpKSAhPSAwKSB8fAorCSgoTUNIVU5LX1NJWkUgICAgICAmIChNQ0hVTktfU0laRS1TSVpFX1RfT05FKSkgICAgICAhPSAwKSB8fAorCSgoZ3NpemUgICAgICAgICAgICAmIChnc2l6ZS1TSVpFX1RfT05FKSkgICAgICAgICAgICAhPSAwKSB8fAorCSgocHNpemUgICAgICAgICAgICAmIChwc2l6ZS1TSVpFX1RfT05FKSkgICAgICAgICAgICAhPSAwKSkKKyAgICAgIEFCT1JUOworCisgICAgbXBhcmFtcy5ncmFudWxhcml0eSA9IGdzaXplOworICAgIG1wYXJhbXMucGFnZV9zaXplID0gcHNpemU7CisgICAgbXBhcmFtcy5tbWFwX3RocmVzaG9sZCA9IERFRkFVTFRfTU1BUF9USFJFU0hPTEQ7CisgICAgbXBhcmFtcy50cmltX3RocmVzaG9sZCA9IERFRkFVTFRfVFJJTV9USFJFU0hPTEQ7CisjaWYgTU9SRUNPUkVfQ09OVElHVU9VUworICAgIG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3MgPSBVU0VfTE9DS19CSVR8VVNFX01NQVBfQklUOworI2Vsc2UgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyAgICBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzID0gVVNFX0xPQ0tfQklUfFVTRV9NTUFQX0JJVHxVU0VfTk9OQ09OVElHVU9VU19CSVQ7CisjZW5kaWYgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworCisjaWYgIU9OTFlfTVNQQUNFUworICAgIC8qIFNldCB1cCBsb2NrIGZvciBtYWluIG1hbGxvYyBhcmVhICovCisgICAgZ20tPm1mbGFncyA9IG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3M7CisgICAgKHZvaWQpSU5JVElBTF9MT0NLKCZnbS0+bXV0ZXgpOworI2VuZGlmCisKKyNpZiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpCisgICAgeworI2lmIFVTRV9ERVZfUkFORE9NCisgICAgICBpbnQgZmQ7CisgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZltzaXplb2Yoc2l6ZV90KV07CisgICAgICAvKiBUcnkgdG8gdXNlIC9kZXYvdXJhbmRvbSwgZWxzZSBmYWxsIGJhY2sgb24gdXNpbmcgdGltZSAqLworICAgICAgaWYgKChmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKSkgPj0gMCAmJgorCSAgcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPT0gc2l6ZW9mKGJ1ZikpIHsKKwltYWdpYyA9ICooKHNpemVfdCAqKSBidWYpOworCWNsb3NlKGZkKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBVU0VfREVWX1JBTkRPTSAqLworI2lmZGVmIFdJTjMyCisJbWFnaWMgPSAoc2l6ZV90KShHZXRUaWNrQ291bnQoKSBeIChzaXplX3QpMHg1NTU1NTU1NVUpOworI2Vsc2UKKyAgICAgIG1hZ2ljID0gKHNpemVfdCkodGltZSgwKSBeIChzaXplX3QpMHg1NTU1NTU1NVUpOworI2VuZGlmCisgICAgICBtYWdpYyB8PSAoc2l6ZV90KThVOyAgICAvKiBlbnN1cmUgbm9uemVybyAqLworICAgICAgbWFnaWMgJj0gfihzaXplX3QpN1U7ICAgLyogaW1wcm92ZSBjaGFuY2VzIG9mIGZhdWx0IGZvciBiYWQgdmFsdWVzICovCisgICAgfQorI2Vsc2UgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworICAgIG1hZ2ljID0gKHNpemVfdCkweDU4NTg1ODU4VTsKKyNlbmRpZiAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisKKyAgICBtcGFyYW1zLm1hZ2ljID0gbWFnaWM7CisgIH0KKworICBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworICByZXR1cm4gMTsKK30KKworLyogc3VwcG9ydCBmb3IgbWFsbG9wdCAqLworc3RhdGljIGludCBjaGFuZ2VfbXBhcmFtKGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkgeworICBzaXplX3QgdmFsID0gKHZhbHVlID09IC0xKT8gTUFYX1NJWkVfVCA6IChzaXplX3QpdmFsdWU7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBzd2l0Y2gocGFyYW1fbnVtYmVyKSB7CisgIGNhc2UgTV9UUklNX1RIUkVTSE9MRDoKKyAgICBtcGFyYW1zLnRyaW1fdGhyZXNob2xkID0gdmFsOworICAgIHJldHVybiAxOworICBjYXNlIE1fR1JBTlVMQVJJVFk6CisgICAgaWYgKHZhbCA+PSBtcGFyYW1zLnBhZ2Vfc2l6ZSAmJiAoKHZhbCAmICh2YWwtMSkpID09IDApKSB7CisgICAgICBtcGFyYW1zLmdyYW51bGFyaXR5ID0gdmFsOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHJldHVybiAwOworICBjYXNlIE1fTU1BUF9USFJFU0hPTEQ6CisgICAgbXBhcmFtcy5tbWFwX3RocmVzaG9sZCA9IHZhbDsKKyAgICByZXR1cm4gMTsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisjaWYgREVCVUcKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVidWdnaW5nIFN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgYW55IGNodW5rLCB3aGV0aGVyIGZyZWUsIGludXNlLCBtbWFwcGVkIGV0YyAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2FueV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiB0b3AgY2h1bmsgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3RvcF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIqKXApOworICBzaXplX3QgIHN6ID0gcC0+aGVhZCAmIH5JTlVTRV9CSVRTOyAvKiB0aGlyZC1sb3dlc3QgYml0IGNhbiBiZSBzZXQhICovCisgIGFzc2VydChzcCAhPSAwKTsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKKyAgYXNzZXJ0KHN6ID09IG0tPnRvcHNpemUpOworICBhc3NlcnQoc3ogPiAwKTsKKyAgYXNzZXJ0KHN6ID09ICgoc3AtPmJhc2UgKyBzcC0+c2l6ZSkgLSAoY2hhciopcCkgLSBUT1BfRk9PVF9TSVpFKTsKKyAgYXNzZXJ0KHBpbnVzZShwKSk7CisgIGFzc2VydCghcGludXNlKGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KSkpOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIChpbnVzZSkgbW1hcHBlZCBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIHNpemVfdCAgc3ogPSBjaHVua3NpemUocCk7CisgIHNpemVfdCBsZW4gPSAoc3ogKyAocC0+cHJldl9mb290ICYgfklTX01NQVBQRURfQklUKSArIE1NQVBfRk9PVF9QQUQpOworICBhc3NlcnQoaXNfbW1hcHBlZChwKSk7CisgIGFzc2VydCh1c2VfbW1hcChtKSk7CisgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOworICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7CisgIGFzc2VydCghaXNfc21hbGwoc3opKTsKKyAgYXNzZXJ0KChsZW4gJiAobXBhcmFtcy5wYWdlX3NpemUtU0laRV9UX09ORSkpID09IDApOworICBhc3NlcnQoY2h1bmtfcGx1c19vZmZzZXQocCwgc3opLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKTsKKyAgYXNzZXJ0KGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6K1NJWkVfVF9TSVpFKS0+aGVhZCA9PSAwKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBpbnVzZSBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2ludXNlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBkb19jaGVja19hbnlfY2h1bmsobSwgcCk7CisgIGFzc2VydChjaW51c2UocCkpOworICBhc3NlcnQobmV4dF9waW51c2UocCkpOworICAvKiBJZiBub3QgcGludXNlIGFuZCBub3QgbW1hcHBlZCwgcHJldmlvdXMgY2h1bmsgaGFzIE9LIG9mZnNldCAqLworICBhc3NlcnQoaXNfbW1hcHBlZChwKSB8fCBwaW51c2UocCkgfHwgbmV4dF9jaHVuayhwcmV2X2NodW5rKHApKSA9PSBwKTsKKyAgaWYgKGlzX21tYXBwZWQocCkpCisgICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBwKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBmcmVlIGNodW5rcyAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfZnJlZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgc2l6ZV90IHN6ID0gY2h1bmtzaXplKHApOworICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KTsKKyAgZG9fY2hlY2tfYW55X2NodW5rKG0sIHApOworICBhc3NlcnQoIWNpbnVzZShwKSk7CisgIGFzc2VydCghbmV4dF9waW51c2UocCkpOworICBhc3NlcnQgKCFpc19tbWFwcGVkKHApKTsKKyAgaWYgKHAgIT0gbS0+ZHYgJiYgcCAhPSBtLT50b3ApIHsKKyAgICBpZiAoc3ogPj0gTUlOX0NIVU5LX1NJWkUpIHsKKyAgICAgIGFzc2VydCgoc3ogJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKTsKKyAgICAgIGFzc2VydChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpOworICAgICAgYXNzZXJ0KG5leHQtPnByZXZfZm9vdCA9PSBzeik7CisgICAgICBhc3NlcnQocGludXNlKHApKTsKKyAgICAgIGFzc2VydCAobmV4dCA9PSBtLT50b3AgfHwgY2ludXNlKG5leHQpKTsKKyAgICAgIGFzc2VydChwLT5mZC0+YmsgPT0gcCk7CisgICAgICBhc3NlcnQocC0+YmstPmZkID09IHApOworICAgIH0KKyAgICBlbHNlICAvKiBtYXJrZXJzIGFyZSBhbHdheXMgb2Ygc2l6ZSBTSVpFX1RfU0laRSAqLworICAgICAgYXNzZXJ0KHN6ID09IFNJWkVfVF9TSVpFKTsKKyAgfQorfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIG1hbGxvY2VkIGNodW5rcyBhdCB0aGUgcG9pbnQgdGhleSBhcmUgbWFsbG9jZWQgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKG1zdGF0ZSBtLCB2b2lkKiBtZW0sIHNpemVfdCBzKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7CisgICAgc2l6ZV90IHN6ID0gcC0+aGVhZCAmIH4oUElOVVNFX0JJVHxDSU5VU0VfQklUKTsKKyAgICBkb19jaGVja19pbnVzZV9jaHVuayhtLCBwKTsKKyAgICBhc3NlcnQoKHN6ICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk7CisgICAgYXNzZXJ0KHN6ID49IE1JTl9DSFVOS19TSVpFKTsKKyAgICBhc3NlcnQoc3ogPj0gcyk7CisgICAgLyogdW5sZXNzIG1tYXBwZWQsIHNpemUgaXMgbGVzcyB0aGFuIE1JTl9DSFVOS19TSVpFIG1vcmUgdGhhbiByZXF1ZXN0ICovCisgICAgYXNzZXJ0KGlzX21tYXBwZWQocCkgfHwgc3ogPCAocyArIE1JTl9DSFVOS19TSVpFKSk7CisgIH0KK30KKworLyogQ2hlY2sgYSB0cmVlIGFuZCBpdHMgc3VidHJlZXMuICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfdHJlZShtc3RhdGUgbSwgdGNodW5rcHRyIHQpIHsKKyAgdGNodW5rcHRyIGhlYWQgPSAwOworICB0Y2h1bmtwdHIgdSA9IHQ7CisgIGJpbmRleF90IHRpbmRleCA9IHQtPmluZGV4OworICBzaXplX3QgdHNpemUgPSBjaHVua3NpemUodCk7CisgIGJpbmRleF90IGlkeDsKKyAgY29tcHV0ZV90cmVlX2luZGV4KHRzaXplLCBpZHgpOworICBhc3NlcnQodGluZGV4ID09IGlkeCk7CisgIGFzc2VydCh0c2l6ZSA+PSBNSU5fTEFSR0VfU0laRSk7CisgIGFzc2VydCh0c2l6ZSA+PSBtaW5zaXplX2Zvcl90cmVlX2luZGV4KGlkeCkpOworICBhc3NlcnQoKGlkeCA9PSBOVFJFRUJJTlMtMSkgfHwgKHRzaXplIDwgbWluc2l6ZV9mb3JfdHJlZV9pbmRleCgoaWR4KzEpKSkpOworCisgIGRvIHsgLyogdHJhdmVyc2UgdGhyb3VnaCBjaGFpbiBvZiBzYW1lLXNpemVkIG5vZGVzICovCisgICAgZG9fY2hlY2tfYW55X2NodW5rKG0sICgobWNodW5rcHRyKXUpKTsKKyAgICBhc3NlcnQodS0+aW5kZXggPT0gdGluZGV4KTsKKyAgICBhc3NlcnQoY2h1bmtzaXplKHUpID09IHRzaXplKTsKKyAgICBhc3NlcnQoIWNpbnVzZSh1KSk7CisgICAgYXNzZXJ0KCFuZXh0X3BpbnVzZSh1KSk7CisgICAgYXNzZXJ0KHUtPmZkLT5iayA9PSB1KTsKKyAgICBhc3NlcnQodS0+YmstPmZkID09IHUpOworICAgIGlmICh1LT5wYXJlbnQgPT0gMCkgeworICAgICAgYXNzZXJ0KHUtPmNoaWxkWzBdID09IDApOworICAgICAgYXNzZXJ0KHUtPmNoaWxkWzFdID09IDApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGFzc2VydChoZWFkID09IDApOyAvKiBvbmx5IG9uZSBub2RlIG9uIGNoYWluIGhhcyBwYXJlbnQgKi8KKyAgICAgIGhlYWQgPSB1OworICAgICAgYXNzZXJ0KHUtPnBhcmVudCAhPSB1KTsKKyAgICAgIGFzc2VydCAodS0+cGFyZW50LT5jaGlsZFswXSA9PSB1IHx8CisJICAgICAgdS0+cGFyZW50LT5jaGlsZFsxXSA9PSB1IHx8CisJICAgICAgKigodGJpbnB0ciopKHUtPnBhcmVudCkpID09IHUpOworICAgICAgaWYgKHUtPmNoaWxkWzBdICE9IDApIHsKKwlhc3NlcnQodS0+Y2hpbGRbMF0tPnBhcmVudCA9PSB1KTsKKwlhc3NlcnQodS0+Y2hpbGRbMF0gIT0gdSk7CisJZG9fY2hlY2tfdHJlZShtLCB1LT5jaGlsZFswXSk7CisgICAgICB9CisgICAgICBpZiAodS0+Y2hpbGRbMV0gIT0gMCkgeworCWFzc2VydCh1LT5jaGlsZFsxXS0+cGFyZW50ID09IHUpOworCWFzc2VydCh1LT5jaGlsZFsxXSAhPSB1KTsKKwlkb19jaGVja190cmVlKG0sIHUtPmNoaWxkWzFdKTsKKyAgICAgIH0KKyAgICAgIGlmICh1LT5jaGlsZFswXSAhPSAwICYmIHUtPmNoaWxkWzFdICE9IDApIHsKKwlhc3NlcnQoY2h1bmtzaXplKHUtPmNoaWxkWzBdKSA8IGNodW5rc2l6ZSh1LT5jaGlsZFsxXSkpOworICAgICAgfQorICAgIH0KKyAgICB1ID0gdS0+ZmQ7CisgIH0gd2hpbGUgKHUgIT0gdCk7CisgIGFzc2VydChoZWFkICE9IDApOworfQorCisvKiAgQ2hlY2sgYWxsIHRoZSBjaHVua3MgaW4gYSB0cmVlYmluLiAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3RyZWViaW4obXN0YXRlIG0sIGJpbmRleF90IGkpIHsKKyAgdGJpbnB0ciogdGIgPSB0cmVlYmluX2F0KG0sIGkpOworICB0Y2h1bmtwdHIgdCA9ICp0YjsKKyAgaW50IGVtcHR5ID0gKG0tPnRyZWVtYXAgJiAoMVUgPDwgaSkpID09IDA7CisgIGlmICh0ID09IDApCisgICAgYXNzZXJ0KGVtcHR5KTsKKyAgaWYgKCFlbXB0eSkKKyAgICBkb19jaGVja190cmVlKG0sIHQpOworfQorCisvKiAgQ2hlY2sgYWxsIHRoZSBjaHVua3MgaW4gYSBzbWFsbGJpbi4gICovCitzdGF0aWMgdm9pZCBkb19jaGVja19zbWFsbGJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSkgeworICBzYmlucHRyIGIgPSBzbWFsbGJpbl9hdChtLCBpKTsKKyAgbWNodW5rcHRyIHAgPSBiLT5iazsKKyAgdW5zaWduZWQgaW50IGVtcHR5ID0gKG0tPnNtYWxsbWFwICYgKDFVIDw8IGkpKSA9PSAwOworICBpZiAocCA9PSBiKQorICAgIGFzc2VydChlbXB0eSk7CisgIGlmICghZW1wdHkpIHsKKyAgICBmb3IgKDsgcCAhPSBiOyBwID0gcC0+YmspIHsKKyAgICAgIHNpemVfdCBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgbWNodW5rcHRyIHE7CisgICAgICAvKiBlYWNoIGNodW5rIGNsYWltcyB0byBiZSBmcmVlICovCisgICAgICBkb19jaGVja19mcmVlX2NodW5rKG0sIHApOworICAgICAgLyogY2h1bmsgYmVsb25ncyBpbiBiaW4gKi8KKyAgICAgIGFzc2VydChzbWFsbF9pbmRleChzaXplKSA9PSBpKTsKKyAgICAgIGFzc2VydChwLT5iayA9PSBiIHx8IGNodW5rc2l6ZShwLT5iaykgPT0gY2h1bmtzaXplKHApKTsKKyAgICAgIC8qIGNodW5rIGlzIGZvbGxvd2VkIGJ5IGFuIGludXNlIGNodW5rICovCisgICAgICBxID0gbmV4dF9jaHVuayhwKTsKKyAgICAgIGlmIChxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKQorCWRvX2NoZWNrX2ludXNlX2NodW5rKG0sIHEpOworICAgIH0KKyAgfQorfQorCisvKiBGaW5kIHggaW4gYSBiaW4uIFVzZWQgaW4gb3RoZXIgY2hlY2sgZnVuY3Rpb25zLiAqLworc3RhdGljIGludCBiaW5fZmluZChtc3RhdGUgbSwgbWNodW5rcHRyIHgpIHsKKyAgc2l6ZV90IHNpemUgPSBjaHVua3NpemUoeCk7CisgIGlmIChpc19zbWFsbChzaXplKSkgeworICAgIGJpbmRleF90IHNpZHggPSBzbWFsbF9pbmRleChzaXplKTsKKyAgICBzYmlucHRyIGIgPSBzbWFsbGJpbl9hdChtLCBzaWR4KTsKKyAgICBpZiAoc21hbGxtYXBfaXNfbWFya2VkKG0sIHNpZHgpKSB7CisgICAgICBtY2h1bmtwdHIgcCA9IGI7CisgICAgICBkbyB7CisJaWYgKHAgPT0geCkKKwkgIHJldHVybiAxOworICAgICAgfSB3aGlsZSAoKHAgPSBwLT5mZCkgIT0gYik7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGJpbmRleF90IHRpZHg7CisgICAgY29tcHV0ZV90cmVlX2luZGV4KHNpemUsIHRpZHgpOworICAgIGlmICh0cmVlbWFwX2lzX21hcmtlZChtLCB0aWR4KSkgeworICAgICAgdGNodW5rcHRyIHQgPSAqdHJlZWJpbl9hdChtLCB0aWR4KTsKKyAgICAgIHNpemVfdCBzaXplYml0cyA9IHNpemUgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KHRpZHgpOworICAgICAgd2hpbGUgKHQgIT0gMCAmJiBjaHVua3NpemUodCkgIT0gc2l6ZSkgeworCXQgPSB0LT5jaGlsZFsoc2l6ZWJpdHMgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdOworCXNpemViaXRzIDw8PSAxOworICAgICAgfQorICAgICAgaWYgKHQgIT0gMCkgeworCXRjaHVua3B0ciB1ID0gdDsKKwlkbyB7CisJICBpZiAodSA9PSAodGNodW5rcHRyKXgpCisJICAgIHJldHVybiAxOworCX0gd2hpbGUgKCh1ID0gdS0+ZmQpICE9IHQpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogVHJhdmVyc2UgZWFjaCBjaHVuayBhbmQgY2hlY2sgaXQ7IHJldHVybiB0b3RhbCAqLworc3RhdGljIHNpemVfdCB0cmF2ZXJzZV9hbmRfY2hlY2sobXN0YXRlIG0pIHsKKyAgc2l6ZV90IHN1bSA9IDA7CisgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgIHN1bSArPSBtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRTsKKyAgICB3aGlsZSAocyAhPSAwKSB7CisgICAgICBtY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworICAgICAgbWNodW5rcHRyIGxhc3RxID0gMDsKKyAgICAgIGFzc2VydChwaW51c2UocSkpOworICAgICAgd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYKKwkgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKwlzdW0gKz0gY2h1bmtzaXplKHEpOworCWlmIChjaW51c2UocSkpIHsKKwkgIGFzc2VydCghYmluX2ZpbmQobSwgcSkpOworCSAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcSk7CisJfQorCWVsc2UgeworCSAgYXNzZXJ0KHEgPT0gbS0+ZHYgfHwgYmluX2ZpbmQobSwgcSkpOworCSAgYXNzZXJ0KGxhc3RxID09IDAgfHwgY2ludXNlKGxhc3RxKSk7IC8qIE5vdCAyIGNvbnNlY3V0aXZlIGZyZWUgKi8KKwkgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobSwgcSk7CisJfQorCWxhc3RxID0gcTsKKwlxID0gbmV4dF9jaHVuayhxKTsKKyAgICAgIH0KKyAgICAgIHMgPSBzLT5uZXh0OworICAgIH0KKyAgfQorICByZXR1cm4gc3VtOworfQorCisvKiBDaGVjayBhbGwgcHJvcGVydGllcyBvZiBtYWxsb2Nfc3RhdGUuICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2Nfc3RhdGUobXN0YXRlIG0pIHsKKyAgYmluZGV4X3QgaTsKKyAgc2l6ZV90IHRvdGFsOworICAvKiBjaGVjayBiaW5zICovCisgIGZvciAoaSA9IDA7IGkgPCBOU01BTExCSU5TOyArK2kpCisgICAgZG9fY2hlY2tfc21hbGxiaW4obSwgaSk7CisgIGZvciAoaSA9IDA7IGkgPCBOVFJFRUJJTlM7ICsraSkKKyAgICBkb19jaGVja190cmVlYmluKG0sIGkpOworCisgIGlmIChtLT5kdnNpemUgIT0gMCkgeyAvKiBjaGVjayBkdiBjaHVuayAqLworICAgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBtLT5kdik7CisgICAgYXNzZXJ0KG0tPmR2c2l6ZSA9PSBjaHVua3NpemUobS0+ZHYpKTsKKyAgICBhc3NlcnQobS0+ZHZzaXplID49IE1JTl9DSFVOS19TSVpFKTsKKyAgICBhc3NlcnQoYmluX2ZpbmQobSwgbS0+ZHYpID09IDApOworICB9CisKKyAgaWYgKG0tPnRvcCAhPSAwKSB7ICAgLyogY2hlY2sgdG9wIGNodW5rICovCisgICAgZG9fY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgLyphc3NlcnQobS0+dG9wc2l6ZSA9PSBjaHVua3NpemUobS0+dG9wKSk7IHJlZHVuZGFudCAqLworICAgIGFzc2VydChtLT50b3BzaXplID4gMCk7CisgICAgYXNzZXJ0KGJpbl9maW5kKG0sIG0tPnRvcCkgPT0gMCk7CisgIH0KKworICB0b3RhbCA9IHRyYXZlcnNlX2FuZF9jaGVjayhtKTsKKyAgYXNzZXJ0KHRvdGFsIDw9IG0tPmZvb3RwcmludCk7CisgIGFzc2VydChtLT5mb290cHJpbnQgPD0gbS0+bWF4X2Zvb3RwcmludCk7Cit9CisjZW5kaWYgLyogREVCVUcgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RhdGlzdGljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICFOT19NQUxMSU5GTworc3RhdGljIHN0cnVjdCBtYWxsaW5mbyBpbnRlcm5hbF9tYWxsaW5mbyhtc3RhdGUgbSkgeworICBzdHJ1Y3QgbWFsbGluZm8gbm0gPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgY2hlY2tfbWFsbG9jX3N0YXRlKG0pOworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgc2l6ZV90IG5mcmVlID0gU0laRV9UX09ORTsgLyogdG9wIGFsd2F5cyBmcmVlICovCisgICAgICBzaXplX3QgbWZyZWUgPSBtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRTsKKyAgICAgIHNpemVfdCBzdW0gPSBtZnJlZTsKKyAgICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgICAgd2hpbGUgKHMgIT0gMCkgeworCW1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisJd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYKKwkgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgeworCSAgc2l6ZV90IHN6ID0gY2h1bmtzaXplKHEpOworCSAgc3VtICs9IHN6OworCSAgaWYgKCFjaW51c2UocSkpIHsKKwkgICAgbWZyZWUgKz0gc3o7CisJICAgICsrbmZyZWU7CisJICB9CisJICBxID0gbmV4dF9jaHVuayhxKTsKKwl9CisJcyA9IHMtPm5leHQ7CisgICAgICB9CisKKyAgICAgIG5tLmFyZW5hICAgID0gc3VtOworICAgICAgbm0ub3JkYmxrcyAgPSBuZnJlZTsKKyAgICAgIG5tLmhibGtoZCAgID0gbS0+Zm9vdHByaW50IC0gc3VtOworICAgICAgbm0udXNtYmxrcyAgPSBtLT5tYXhfZm9vdHByaW50OworICAgICAgbm0udW9yZGJsa3MgPSBtLT5mb290cHJpbnQgLSBtZnJlZTsKKyAgICAgIG5tLmZvcmRibGtzID0gbWZyZWU7CisgICAgICBubS5rZWVwY29zdCA9IG0tPnRvcHNpemU7CisgICAgfQorCisgICAgUE9TVEFDVElPTihtKTsKKyAgfQorICByZXR1cm4gbm07Cit9CisjZW5kaWYgLyogIU5PX01BTExJTkZPICovCisKK3N0YXRpYyB2b2lkIGludGVybmFsX21hbGxvY19zdGF0cyhtc3RhdGUgbSkgeworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgaWYgKCFQUkVBQ1RJT04obSkpIHsKKyAgICBzaXplX3QgbWF4ZnAgPSAwOworICAgIHNpemVfdCBmcCA9IDA7CisgICAgc2l6ZV90IHVzZWQgPSAwOworICAgIGNoZWNrX21hbGxvY19zdGF0ZShtKTsKKyAgICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgICAgbWF4ZnAgPSBtLT5tYXhfZm9vdHByaW50OworICAgICAgZnAgPSBtLT5mb290cHJpbnQ7CisgICAgICB1c2VkID0gZnAgLSAobS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkUpOworCisgICAgICB3aGlsZSAocyAhPSAwKSB7CisJbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsKKwl3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorCSAgICAgICBxICE9IG0tPnRvcCAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7CisJICBpZiAoIWNpbnVzZShxKSkKKwkgICAgdXNlZCAtPSBjaHVua3NpemUocSk7CisJICBxID0gbmV4dF9jaHVuayhxKTsKKwl9CisJcyA9IHMtPm5leHQ7CisgICAgICB9CisgICAgfQorCisgICAgZnByaW50ZihzdGRlcnIsICJtYXggc3lzdGVtIGJ5dGVzID0gJTEwbHVcbiIsICh1bnNpZ25lZCBsb25nKShtYXhmcCkpOworICAgIGZwcmludGYoc3RkZXJyLCAic3lzdGVtIGJ5dGVzICAgICA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykoZnApKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImluIHVzZSBieXRlcyAgICAgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKHVzZWQpKTsKKworICAgIFBPU1RBQ1RJT04obSk7CisgIH0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiBzbWFsbGJpbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgVmFyaW91cyBmb3JtcyBvZiBsaW5raW5nIGFuZCB1bmxpbmtpbmcgYXJlIGRlZmluZWQgYXMgbWFjcm9zLiAgRXZlbgorICB0aGUgb25lcyBmb3IgdHJlZXMsIHdoaWNoIGFyZSB2ZXJ5IGxvbmcgYnV0IGhhdmUgdmVyeSBzaG9ydCB0eXBpY2FsCisgIHBhdGhzLiAgVGhpcyBpcyB1Z2x5IGJ1dCByZWR1Y2VzIHJlbGlhbmNlIG9uIGlubGluaW5nIHN1cHBvcnQgb2YKKyAgY29tcGlsZXJzLgorKi8KKworLyogTGluayBhIGZyZWUgY2h1bmsgaW50byBhIHNtYWxsYmluICAqLworI2RlZmluZSBpbnNlcnRfc21hbGxfY2h1bmsoTSwgUCwgUykge1wKKyAgYmluZGV4X3QgSSAgPSBzbWFsbF9pbmRleChTKTtcCisgIG1jaHVua3B0ciBCID0gc21hbGxiaW5fYXQoTSwgSSk7XAorICBtY2h1bmtwdHIgRiA9IEI7XAorICBhc3NlcnQoUyA+PSBNSU5fQ0hVTktfU0laRSk7XAorICBpZiAoIXNtYWxsbWFwX2lzX21hcmtlZChNLCBJKSlcCisgICAgbWFya19zbWFsbG1hcChNLCBJKTtcCisgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBCLT5mZCkpKVwKKyAgICBGID0gQi0+ZmQ7XAorICBlbHNlIHtcCisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICB9XAorICBCLT5mZCA9IFA7XAorICBGLT5iayA9IFA7XAorICBQLT5mZCA9IEY7XAorICBQLT5iayA9IEI7XAorfQorCisvKiBVbmxpbmsgYSBjaHVuayBmcm9tIGEgc21hbGxiaW4gICovCisjZGVmaW5lIHVubGlua19zbWFsbF9jaHVuayhNLCBQLCBTKSB7XAorICBtY2h1bmtwdHIgRiA9IFAtPmZkO1wKKyAgbWNodW5rcHRyIEIgPSBQLT5iaztcCisgIGJpbmRleF90IEkgPSBzbWFsbF9pbmRleChTKTtcCisgIGFzc2VydChQICE9IEIpO1wKKyAgYXNzZXJ0KFAgIT0gRik7XAorICBhc3NlcnQoY2h1bmtzaXplKFApID09IHNtYWxsX2luZGV4MnNpemUoSSkpO1wKKyAgaWYgKEYgPT0gQilcCisgICAgY2xlYXJfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKChGID09IHNtYWxsYmluX2F0KE0sSSkgfHwgb2tfYWRkcmVzcyhNLCBGKSkgJiZcCisJCSAgIChCID09IHNtYWxsYmluX2F0KE0sSSkgfHwgb2tfYWRkcmVzcyhNLCBCKSkpKSB7XAorICAgIEYtPmJrID0gQjtcCisgICAgQi0+ZmQgPSBGO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKK30KKworLyogVW5saW5rIHRoZSBmaXJzdCBjaHVuayBmcm9tIGEgc21hbGxiaW4gKi8KKyNkZWZpbmUgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKE0sIEIsIFAsIEkpIHtcCisgIG1jaHVua3B0ciBGID0gUC0+ZmQ7XAorICBhc3NlcnQoUCAhPSBCKTtcCisgIGFzc2VydChQICE9IEYpO1wKKyAgYXNzZXJ0KGNodW5rc2l6ZShQKSA9PSBzbWFsbF9pbmRleDJzaXplKEkpKTtcCisgIGlmIChCID09IEYpXAorICAgIGNsZWFyX3NtYWxsbWFwKE0sIEkpO1wKKyAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEYpKSkge1wKKyAgICBCLT5mZCA9IEY7XAorICAgIEYtPmJrID0gQjtcCisgIH1cCisgIGVsc2Uge1wKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIH1cCit9CisKKworCisvKiBSZXBsYWNlIGR2IG5vZGUsIGJpbm5pbmcgdGhlIG9sZCBvbmUgKi8KKy8qIFVzZWQgb25seSB3aGVuIGR2c2l6ZSBrbm93biB0byBiZSBzbWFsbCAqLworI2RlZmluZSByZXBsYWNlX2R2KE0sIFAsIFMpIHtcCisgIHNpemVfdCBEVlMgPSBNLT5kdnNpemU7XAorICBpZiAoRFZTICE9IDApIHtcCisgICAgbWNodW5rcHRyIERWID0gTS0+ZHY7XAorICAgIGFzc2VydChpc19zbWFsbChEVlMpKTtcCisgICAgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIERWLCBEVlMpO1wKKyAgfVwKKyAgTS0+ZHZzaXplID0gUztcCisgIE0tPmR2ID0gUDtcCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiB0cmVlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEluc2VydCBjaHVuayBpbnRvIHRyZWUgKi8KKyNkZWZpbmUgaW5zZXJ0X2xhcmdlX2NodW5rKE0sIFgsIFMpIHtcCisgIHRiaW5wdHIqIEg7XAorICBiaW5kZXhfdCBJO1wKKyAgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpO1wKKyAgSCA9IHRyZWViaW5fYXQoTSwgSSk7XAorICBYLT5pbmRleCA9IEk7XAorICBYLT5jaGlsZFswXSA9IFgtPmNoaWxkWzFdID0gMDtcCisgIGlmICghdHJlZW1hcF9pc19tYXJrZWQoTSwgSSkpIHtcCisgICAgbWFya190cmVlbWFwKE0sIEkpO1wKKyAgICAqSCA9IFg7XAorICAgIFgtPnBhcmVudCA9ICh0Y2h1bmtwdHIpSDtcCisgICAgWC0+ZmQgPSBYLT5iayA9IFg7XAorICB9XAorICBlbHNlIHtcCisgICAgdGNodW5rcHRyIFQgPSAqSDtcCisgICAgc2l6ZV90IEsgPSBTIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChJKTtcCisgICAgZm9yICg7Oykge1wKKyAgICAgIGlmIChjaHVua3NpemUoVCkgIT0gUykge1wKKwl0Y2h1bmtwdHIqIEMgPSAmKFQtPmNoaWxkWyhLID4+IChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSkgJiAxXSk7XAorCUsgPDw9IDE7XAorCWlmICgqQyAhPSAwKVwKKwkgIFQgPSAqQztcCisJZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMpKSkge1wKKwkgICpDID0gWDtcCisJICBYLT5wYXJlbnQgPSBUO1wKKwkgIFgtPmZkID0gWC0+YmsgPSBYO1wKKwkgIGJyZWFrO1wKKwl9XAorCWVsc2Uge1wKKwkgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKwkgIGJyZWFrO1wKKwl9XAorICAgICAgfVwKKyAgICAgIGVsc2Uge1wKKwl0Y2h1bmtwdHIgRiA9IFQtPmZkO1wKKwlpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFQpICYmIG9rX2FkZHJlc3MoTSwgRikpKSB7XAorCSAgVC0+ZmQgPSBGLT5iayA9IFg7XAorCSAgWC0+ZmQgPSBGO1wKKwkgIFgtPmJrID0gVDtcCisJICBYLT5wYXJlbnQgPSAwO1wKKwkgIGJyZWFrO1wKKwl9XAorCWVsc2Uge1wKKwkgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKwkgIGJyZWFrO1wKKwl9XAorICAgICAgfVwKKyAgICB9XAorICB9XAorfQorCisvKgorICBVbmxpbmsgc3RlcHM6CisKKyAgMS4gSWYgeCBpcyBhIGNoYWluZWQgbm9kZSwgdW5saW5rIGl0IGZyb20gaXRzIHNhbWUtc2l6ZWQgZmQvYmsgbGlua3MKKyAgICAgYW5kIGNob29zZSBpdHMgYmsgbm9kZSBhcyBpdHMgcmVwbGFjZW1lbnQuCisgIDIuIElmIHggd2FzIHRoZSBsYXN0IG5vZGUgb2YgaXRzIHNpemUsIGJ1dCBub3QgYSBsZWFmIG5vZGUsIGl0IG11c3QKKyAgICAgYmUgcmVwbGFjZWQgd2l0aCBhIGxlYWYgbm9kZSAobm90IG1lcmVseSBvbmUgd2l0aCBhbiBvcGVuIGxlZnQgb3IKKyAgICAgcmlnaHQpLCB0byBtYWtlIHN1cmUgdGhhdCBsZWZ0cyBhbmQgcmlnaHRzIG9mIGRlc2NlbmRhbnRzCisgICAgIGNvcnJlc3BvbmQgcHJvcGVybHkgdG8gYml0IG1hc2tzLiAgV2UgdXNlIHRoZSByaWdodG1vc3QgZGVzY2VuZGFudAorICAgICBvZiB4LiAgV2UgY291bGQgdXNlIGFueSBvdGhlciBsZWFmLCBidXQgdGhpcyBpcyBlYXN5IHRvIGxvY2F0ZSBhbmQKKyAgICAgdGVuZHMgdG8gY291bnRlcmFjdCByZW1vdmFsIG9mIGxlZnRtb3N0cyBlbHNld2hlcmUsIGFuZCBzbyBrZWVwcworICAgICBwYXRocyBzaG9ydGVyIHRoYW4gbWluaW1hbGx5IGd1YXJhbnRlZWQuICBUaGlzIGRvZXNuJ3QgbG9vcCBtdWNoCisgICAgIGJlY2F1c2Ugb24gYXZlcmFnZSBhIG5vZGUgaW4gYSB0cmVlIGlzIG5lYXIgdGhlIGJvdHRvbS4KKyAgMy4gSWYgeCBpcyB0aGUgYmFzZSBvZiBhIGNoYWluIChpLmUuLCBoYXMgcGFyZW50IGxpbmtzKSByZWxpbmsKKyAgICAgeCdzIHBhcmVudCBhbmQgY2hpbGRyZW4gdG8geCdzIHJlcGxhY2VtZW50IChvciBudWxsIGlmIG5vbmUpLgorKi8KKworI2RlZmluZSB1bmxpbmtfbGFyZ2VfY2h1bmsoTSwgWCkge1wKKyAgdGNodW5rcHRyIFhQID0gWC0+cGFyZW50O1wKKyAgdGNodW5rcHRyIFI7XAorICBpZiAoWC0+YmsgIT0gWCkge1wKKyAgICB0Y2h1bmtwdHIgRiA9IFgtPmZkO1wKKyAgICBSID0gWC0+Yms7XAorICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgRikpKSB7XAorICAgICAgRi0+YmsgPSBSO1wKKyAgICAgIFItPmZkID0gRjtcCisgICAgfVwKKyAgICBlbHNlIHtcCisgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgfVwKKyAgfVwKKyAgZWxzZSB7XAorICAgIHRjaHVua3B0ciogUlA7XAorICAgIGlmICgoKFIgPSAqKFJQID0gJihYLT5jaGlsZFsxXSkpKSAhPSAwKSB8fFwKKwkoKFIgPSAqKFJQID0gJihYLT5jaGlsZFswXSkpKSAhPSAwKSkge1wKKyAgICAgIHRjaHVua3B0ciogQ1A7XAorICAgICAgd2hpbGUgKCgqKENQID0gJihSLT5jaGlsZFsxXSkpICE9IDApIHx8XAorCSAgICAgKCooQ1AgPSAmKFItPmNoaWxkWzBdKSkgIT0gMCkpIHtcCisJUiA9ICooUlAgPSBDUCk7XAorICAgICAgfVwKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgUlApKSlcCisJKlJQID0gMDtcCisgICAgICBlbHNlIHtcCisJQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgICAgfVwKKyAgICB9XAorICB9XAorICBpZiAoWFAgIT0gMCkge1wKKyAgICB0YmlucHRyKiBIID0gdHJlZWJpbl9hdChNLCBYLT5pbmRleCk7XAorICAgIGlmIChYID09ICpIKSB7XAorICAgICAgaWYgKCgqSCA9IFIpID09IDApIFwKKwljbGVhcl90cmVlbWFwKE0sIFgtPmluZGV4KTtcCisgICAgfVwKKyAgICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgWFApKSkge1wKKyAgICAgIGlmIChYUC0+Y2hpbGRbMF0gPT0gWCkgXAorCVhQLT5jaGlsZFswXSA9IFI7XAorICAgICAgZWxzZSBcCisJWFAtPmNoaWxkWzFdID0gUjtcCisgICAgfVwKKyAgICBlbHNlXAorICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgIGlmIChSICE9IDApIHtcCisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFIpKSkge1wKKwl0Y2h1bmtwdHIgQzAsIEMxO1wKKwlSLT5wYXJlbnQgPSBYUDtcCisJaWYgKChDMCA9IFgtPmNoaWxkWzBdKSAhPSAwKSB7XAorCSAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBDMCkpKSB7XAorCSAgICBSLT5jaGlsZFswXSA9IEMwO1wKKwkgICAgQzAtPnBhcmVudCA9IFI7XAorCSAgfVwKKwkgIGVsc2VcCisJICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKwl9XAorCWlmICgoQzEgPSBYLT5jaGlsZFsxXSkgIT0gMCkge1wKKwkgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQzEpKSkge1wKKwkgICAgUi0+Y2hpbGRbMV0gPSBDMTtcCisJICAgIEMxLT5wYXJlbnQgPSBSO1wKKwkgIH1cCisJICBlbHNlXAorCSAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisJfVwKKyAgICAgIH1cCisgICAgICBlbHNlXAorCUNPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICB9XAorICB9XAorfQorCisvKiBSZWxheXMgdG8gbGFyZ2UgdnMgc21hbGwgYmluIG9wZXJhdGlvbnMgKi8KKworI2RlZmluZSBpbnNlcnRfY2h1bmsoTSwgUCwgUylcCisgIGlmIChpc19zbWFsbChTKSkgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIFAsIFMpXAorICBlbHNlIHsgdGNodW5rcHRyIFRQID0gKHRjaHVua3B0cikoUCk7IGluc2VydF9sYXJnZV9jaHVuayhNLCBUUCwgUyk7IH0KKworI2RlZmluZSB1bmxpbmtfY2h1bmsoTSwgUCwgUylcCisgIGlmIChpc19zbWFsbChTKSkgdW5saW5rX3NtYWxsX2NodW5rKE0sIFAsIFMpXAorICBlbHNlIHsgdGNodW5rcHRyIFRQID0gKHRjaHVua3B0cikoUCk7IHVubGlua19sYXJnZV9jaHVuayhNLCBUUCk7IH0KKworCisvKiBSZWxheXMgdG8gaW50ZXJuYWwgY2FsbHMgdG8gbWFsbG9jL2ZyZWUgZnJvbSByZWFsbG9jLCBtZW1hbGlnbiBldGMgKi8KKworI2lmIE9OTFlfTVNQQUNFUworI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYikgbXNwYWNlX21hbGxvYyhtLCBiKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSkgbXNwYWNlX2ZyZWUobSxtZW0pOworI2Vsc2UgLyogT05MWV9NU1BBQ0VTICovCisjaWYgTVNQQUNFUworI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYilcCisgICAobSA9PSBnbSk/IGRsbWFsbG9jKGIpIDogbXNwYWNlX21hbGxvYyhtLCBiKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSlcCisgICBpZiAobSA9PSBnbSkgZGxmcmVlKG1lbSk7IGVsc2UgbXNwYWNlX2ZyZWUobSxtZW0pOworI2Vsc2UgLyogTVNQQUNFUyAqLworI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYikgZGxtYWxsb2MoYikKKyNkZWZpbmUgaW50ZXJuYWxfZnJlZShtLCBtZW0pIGRsZnJlZShtZW0pCisjZW5kaWYgLyogTVNQQUNFUyAqLworI2VuZGlmIC8qIE9OTFlfTVNQQUNFUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRGlyZWN0LW1tYXBwaW5nIGNodW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBEaXJlY3RseSBtbWFwcGVkIGNodW5rcyBhcmUgc2V0IHVwIHdpdGggYW4gb2Zmc2V0IHRvIHRoZSBzdGFydCBvZgorICB0aGUgbW1hcHBlZCByZWdpb24gc3RvcmVkIGluIHRoZSBwcmV2X2Zvb3QgZmllbGQgb2YgdGhlIGNodW5rLiBUaGlzCisgIGFsbG93cyByZWNvbnN0cnVjdGlvbiBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnQgdG8gTVVOTUFQIHdoZW4gZnJlZWQsCisgIGFuZCBhbHNvIGFsbG93cyBhZGp1c3RtZW50IG9mIHRoZSByZXR1cm5lZCBjaHVuayB0byBtZWV0IGFsaWdubWVudAorICByZXF1aXJlbWVudHMgKGVzcGVjaWFsbHkgaW4gbWVtYWxpZ24pLiAgVGhlcmUgaXMgYWxzbyBlbm91Z2ggc3BhY2UKKyAgYWxsb2NhdGVkIHRvIGhvbGQgYSBmYWtlIG5leHQgY2h1bmsgb2Ygc2l6ZSBTSVpFX1RfU0laRSB0byBtYWludGFpbgorICB0aGUgUElOVVNFIGJpdCBzbyBmcmVlcyBjYW4gYmUgY2hlY2tlZC4KKyovCisKKy8qIE1hbGxvYyB1c2luZyBtbWFwICovCitzdGF0aWMgdm9pZCogbW1hcF9hbGxvYyhtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIHNpemVfdCBtbXNpemUgPSBtbWFwX2FsaWduKG5iICsgU0lYX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOworICBpZiAobW1zaXplID4gbmIpIHsgICAgIC8qIENoZWNrIGZvciB3cmFwIGFyb3VuZCAwICovCisgICAgY2hhciogbW0gPSAoY2hhciopKENBTExfRElSRUNUX01NQVAobW1zaXplKSk7CisgICAgaWYgKG1tICE9IENNRkFJTCkgeworICAgICAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0obW0pKTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IG1tc2l6ZSAtIG9mZnNldCAtIE1NQVBfRk9PVF9QQUQ7CisgICAgICBtY2h1bmtwdHIgcCA9IChtY2h1bmtwdHIpKG1tICsgb2Zmc2V0KTsKKyAgICAgIHAtPnByZXZfZm9vdCA9IG9mZnNldCB8IElTX01NQVBQRURfQklUOworICAgICAgKHApLT5oZWFkID0gKHBzaXplfENJTlVTRV9CSVQpOworICAgICAgbWFya19pbnVzZV9mb290KG0sIHAsIHBzaXplKTsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKS0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUrU0laRV9UX1NJWkUpLT5oZWFkID0gMDsKKworICAgICAgaWYgKG1tIDwgbS0+bGVhc3RfYWRkcikKKwltLT5sZWFzdF9hZGRyID0gbW07CisgICAgICBpZiAoKG0tPmZvb3RwcmludCArPSBtbXNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKwltLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OworICAgICAgYXNzZXJ0KGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSk7CisgICAgICBjaGVja19tbWFwcGVkX2NodW5rKG0sIHApOworICAgICAgcmV0dXJuIGNodW5rMm1lbShwKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIFJlYWxsb2MgdXNpbmcgbW1hcCAqLworc3RhdGljIG1jaHVua3B0ciBtbWFwX3Jlc2l6ZShtc3RhdGUgbSwgbWNodW5rcHRyIG9sZHAsIHNpemVfdCBuYikgeworICBzaXplX3Qgb2xkc2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsKKyAgaWYgKGlzX3NtYWxsKG5iKSkgLyogQ2FuJ3Qgc2hyaW5rIG1tYXAgcmVnaW9ucyBiZWxvdyBzbWFsbCBzaXplICovCisgICAgcmV0dXJuIDA7CisgIC8qIEtlZXAgb2xkIGNodW5rIGlmIGJpZyBlbm91Z2ggYnV0IG5vdCB0b28gYmlnICovCisgIGlmIChvbGRzaXplID49IG5iICsgU0laRV9UX1NJWkUgJiYKKyAgICAgIChvbGRzaXplIC0gbmIpIDw9IChtcGFyYW1zLmdyYW51bGFyaXR5IDw8IDEpKQorICAgIHJldHVybiBvbGRwOworICBlbHNlIHsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gb2xkcC0+cHJldl9mb290ICYgfklTX01NQVBQRURfQklUOworICAgIHNpemVfdCBvbGRtbXNpemUgPSBvbGRzaXplICsgb2Zmc2V0ICsgTU1BUF9GT09UX1BBRDsKKyAgICBzaXplX3QgbmV3bW1zaXplID0gbW1hcF9hbGlnbihuYiArIFNJWF9TSVpFX1RfU0laRVMgKyBDSFVOS19BTElHTl9NQVNLKTsKKyAgICBjaGFyKiBjcCA9IChjaGFyKilDQUxMX01SRU1BUCgoY2hhciopb2xkcCAtIG9mZnNldCwKKwkJCQkgIG9sZG1tc2l6ZSwgbmV3bW1zaXplLCAxKTsKKyAgICBpZiAoY3AgIT0gQ01GQUlMKSB7CisgICAgICBtY2h1bmtwdHIgbmV3cCA9IChtY2h1bmtwdHIpKGNwICsgb2Zmc2V0KTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IG5ld21tc2l6ZSAtIG9mZnNldCAtIE1NQVBfRk9PVF9QQUQ7CisgICAgICBuZXdwLT5oZWFkID0gKHBzaXplfENJTlVTRV9CSVQpOworICAgICAgbWFya19pbnVzZV9mb290KG0sIG5ld3AsIHBzaXplKTsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIHBzaXplKS0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgcHNpemUrU0laRV9UX1NJWkUpLT5oZWFkID0gMDsKKworICAgICAgaWYgKGNwIDwgbS0+bGVhc3RfYWRkcikKKwltLT5sZWFzdF9hZGRyID0gY3A7CisgICAgICBpZiAoKG0tPmZvb3RwcmludCArPSBuZXdtbXNpemUgLSBvbGRtbXNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKwltLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OworICAgICAgY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBuZXdwKTsKKyAgICAgIHJldHVybiBuZXdwOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbXNwYWNlIG1hbmFnZW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSW5pdGlhbGl6ZSB0b3AgY2h1bmsgYW5kIGl0cyBzaXplICovCitzdGF0aWMgdm9pZCBpbml0X3RvcChtc3RhdGUgbSwgbWNodW5rcHRyIHAsIHNpemVfdCBwc2l6ZSkgeworICAvKiBFbnN1cmUgYWxpZ25tZW50ICovCisgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKHApKTsKKyAgcCA9IChtY2h1bmtwdHIpKChjaGFyKilwICsgb2Zmc2V0KTsKKyAgcHNpemUgLT0gb2Zmc2V0OworCisgIG0tPnRvcCA9IHA7CisgIG0tPnRvcHNpemUgPSBwc2l6ZTsKKyAgcC0+aGVhZCA9IHBzaXplIHwgUElOVVNFX0JJVDsKKyAgLyogc2V0IHNpemUgb2YgZmFrZSB0cmFpbGluZyBjaHVuayBob2xkaW5nIG92ZXJoZWFkIHNwYWNlIG9ubHkgb25jZSAqLworICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSktPmhlYWQgPSBUT1BfRk9PVF9TSVpFOworICBtLT50cmltX2NoZWNrID0gbXBhcmFtcy50cmltX3RocmVzaG9sZDsgLyogcmVzZXQgb24gZWFjaCB1cGRhdGUgKi8KK30KKworLyogSW5pdGlhbGl6ZSBiaW5zIGZvciBhIG5ldyBtc3RhdGUgdGhhdCBpcyBvdGhlcndpc2UgemVyb2VkIG91dCAqLworc3RhdGljIHZvaWQgaW5pdF9iaW5zKG1zdGF0ZSBtKSB7CisgIC8qIEVzdGFibGlzaCBjaXJjdWxhciBsaW5rcyBmb3Igc21hbGxiaW5zICovCisgIGJpbmRleF90IGk7CisgIGZvciAoaSA9IDA7IGkgPCBOU01BTExCSU5TOyArK2kpIHsKKyAgICBzYmlucHRyIGJpbiA9IHNtYWxsYmluX2F0KG0saSk7CisgICAgYmluLT5mZCA9IGJpbi0+YmsgPSBiaW47CisgIH0KK30KKworI2lmIFBST0NFRURfT05fRVJST1IKKworLyogZGVmYXVsdCBjb3JydXB0aW9uIGFjdGlvbiAqLworc3RhdGljIHZvaWQgcmVzZXRfb25fZXJyb3IobXN0YXRlIG0pIHsKKyAgaW50IGk7CisgICsrbWFsbG9jX2NvcnJ1cHRpb25fZXJyb3JfY291bnQ7CisgIC8qIFJlaW5pdGlhbGl6ZSBmaWVsZHMgdG8gZm9yZ2V0IGFib3V0IGFsbCBtZW1vcnkgKi8KKyAgbS0+c21hbGxiaW5zID0gbS0+dHJlZWJpbnMgPSAwOworICBtLT5kdnNpemUgPSBtLT50b3BzaXplID0gMDsKKyAgbS0+c2VnLmJhc2UgPSAwOworICBtLT5zZWcuc2l6ZSA9IDA7CisgIG0tPnNlZy5uZXh0ID0gMDsKKyAgbS0+dG9wID0gbS0+ZHYgPSAwOworICBmb3IgKGkgPSAwOyBpIDwgTlRSRUVCSU5TOyArK2kpCisgICAgKnRyZWViaW5fYXQobSwgaSkgPSAwOworICBpbml0X2JpbnMobSk7Cit9CisjZW5kaWYgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisvKiBBbGxvY2F0ZSBjaHVuayBhbmQgcHJlcGVuZCByZW1haW5kZXIgd2l0aCBjaHVuayBpbiBzdWNjZXNzb3IgYmFzZS4gKi8KK3N0YXRpYyB2b2lkKiBwcmVwZW5kX2FsbG9jKG1zdGF0ZSBtLCBjaGFyKiBuZXdiYXNlLCBjaGFyKiBvbGRiYXNlLAorCQkJICAgc2l6ZV90IG5iKSB7CisgIG1jaHVua3B0ciBwID0gYWxpZ25fYXNfY2h1bmsobmV3YmFzZSk7CisgIG1jaHVua3B0ciBvbGRmaXJzdCA9IGFsaWduX2FzX2NodW5rKG9sZGJhc2UpOworICBzaXplX3QgcHNpemUgPSAoY2hhciopb2xkZmlyc3QgLSAoY2hhciopcDsKKyAgbWNodW5rcHRyIHEgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgIHNpemVfdCBxc2l6ZSA9IHBzaXplIC0gbmI7CisgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgbmIpOworCisgIGFzc2VydCgoY2hhciopb2xkZmlyc3QgPiAoY2hhciopcSk7CisgIGFzc2VydChwaW51c2Uob2xkZmlyc3QpKTsKKyAgYXNzZXJ0KHFzaXplID49IE1JTl9DSFVOS19TSVpFKTsKKworICAvKiBjb25zb2xpZGF0ZSByZW1haW5kZXIgd2l0aCBmaXJzdCBjaHVuayBvZiBvbGQgYmFzZSAqLworICBpZiAob2xkZmlyc3QgPT0gbS0+dG9wKSB7CisgICAgc2l6ZV90IHRzaXplID0gbS0+dG9wc2l6ZSArPSBxc2l6ZTsKKyAgICBtLT50b3AgPSBxOworICAgIHEtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgY2hlY2tfdG9wX2NodW5rKG0sIHEpOworICB9CisgIGVsc2UgaWYgKG9sZGZpcnN0ID09IG0tPmR2KSB7CisgICAgc2l6ZV90IGRzaXplID0gbS0+ZHZzaXplICs9IHFzaXplOworICAgIG0tPmR2ID0gcTsKKyAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocSwgZHNpemUpOworICB9CisgIGVsc2UgeworICAgIGlmICghY2ludXNlKG9sZGZpcnN0KSkgeworICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG9sZGZpcnN0KTsKKyAgICAgIHVubGlua19jaHVuayhtLCBvbGRmaXJzdCwgbnNpemUpOworICAgICAgb2xkZmlyc3QgPSBjaHVua19wbHVzX29mZnNldChvbGRmaXJzdCwgbnNpemUpOworICAgICAgcXNpemUgKz0gbnNpemU7CisgICAgfQorICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHEsIHFzaXplLCBvbGRmaXJzdCk7CisgICAgaW5zZXJ0X2NodW5rKG0sIHEsIHFzaXplKTsKKyAgICBjaGVja19mcmVlX2NodW5rKG0sIHEpOworICB9CisKKyAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobSwgY2h1bmsybWVtKHApLCBuYik7CisgIHJldHVybiBjaHVuazJtZW0ocCk7Cit9CisKKy8qIEFkZCBhIHNlZ21lbnQgdG8gaG9sZCBhIG5ldyBub25jb250aWd1b3VzIHJlZ2lvbiAqLworc3RhdGljIHZvaWQgYWRkX3NlZ21lbnQobXN0YXRlIG0sIGNoYXIqIHRiYXNlLCBzaXplX3QgdHNpemUsIGZsYWdfdCBtbWFwcGVkKSB7CisgIC8qIERldGVybWluZSBsb2NhdGlvbnMgYW5kIHNpemVzIG9mIHNlZ21lbnQsIGZlbmNlcG9zdHMsIG9sZCB0b3AgKi8KKyAgY2hhciogb2xkX3RvcCA9IChjaGFyKiltLT50b3A7CisgIG1zZWdtZW50cHRyIG9sZHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIG9sZF90b3ApOworICBjaGFyKiBvbGRfZW5kID0gb2xkc3AtPmJhc2UgKyBvbGRzcC0+c2l6ZTsKKyAgc2l6ZV90IHNzaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCkpOworICBjaGFyKiByYXdzcCA9IG9sZF9lbmQgLSAoc3NpemUgKyBGT1VSX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOworICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShyYXdzcCkpOworICBjaGFyKiBhc3AgPSByYXdzcCArIG9mZnNldDsKKyAgY2hhciogY3NwID0gKGFzcCA8IChvbGRfdG9wICsgTUlOX0NIVU5LX1NJWkUpKT8gb2xkX3RvcCA6IGFzcDsKKyAgbWNodW5rcHRyIHNwID0gKG1jaHVua3B0ciljc3A7CisgIG1zZWdtZW50cHRyIHNzID0gKG1zZWdtZW50cHRyKShjaHVuazJtZW0oc3ApKTsKKyAgbWNodW5rcHRyIHRuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQoc3AsIHNzaXplKTsKKyAgbWNodW5rcHRyIHAgPSB0bmV4dDsKKyAgaW50IG5mZW5jZXMgPSAwOworCisgIC8qIHJlc2V0IHRvcCB0byBuZXcgc3BhY2UgKi8KKyAgaW5pdF90b3AobSwgKG1jaHVua3B0cil0YmFzZSwgdHNpemUgLSBUT1BfRk9PVF9TSVpFKTsKKworICAvKiBTZXQgdXAgc2VnbWVudCByZWNvcmQgKi8KKyAgYXNzZXJ0KGlzX2FsaWduZWQoc3MpKTsKKyAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBzcCwgc3NpemUpOworICAqc3MgPSBtLT5zZWc7IC8qIFB1c2ggY3VycmVudCByZWNvcmQgKi8KKyAgbS0+c2VnLmJhc2UgPSB0YmFzZTsKKyAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKKyAgbS0+c2VnLnNmbGFncyA9IG1tYXBwZWQ7CisgIG0tPnNlZy5uZXh0ID0gc3M7CisKKyAgLyogSW5zZXJ0IHRyYWlsaW5nIGZlbmNlcG9zdHMgKi8KKyAgZm9yICg7OykgeworICAgIG1jaHVua3B0ciBuZXh0cCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIFNJWkVfVF9TSVpFKTsKKyAgICBwLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7CisgICAgKytuZmVuY2VzOworICAgIGlmICgoY2hhciopKCYobmV4dHAtPmhlYWQpKSA8IG9sZF9lbmQpCisgICAgICBwID0gbmV4dHA7CisgICAgZWxzZQorICAgICAgYnJlYWs7CisgIH0KKyAgYXNzZXJ0KG5mZW5jZXMgPj0gMik7CisKKyAgLyogSW5zZXJ0IHRoZSByZXN0IG9mIG9sZCB0b3AgaW50byBhIGJpbiBhcyBhbiBvcmRpbmFyeSBmcmVlIGNodW5rICovCisgIGlmIChjc3AgIT0gb2xkX3RvcCkgeworICAgIG1jaHVua3B0ciBxID0gKG1jaHVua3B0cilvbGRfdG9wOworICAgIHNpemVfdCBwc2l6ZSA9IGNzcCAtIG9sZF90b3A7CisgICAgbWNodW5rcHRyIHRuID0gY2h1bmtfcGx1c19vZmZzZXQocSwgcHNpemUpOworICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHEsIHBzaXplLCB0bik7CisgICAgaW5zZXJ0X2NodW5rKG0sIHEsIHBzaXplKTsKKyAgfQorCisgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTeXN0ZW0gYWxsb2NhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBHZXQgbWVtb3J5IGZyb20gc3lzdGVtIHVzaW5nIE1PUkVDT1JFIG9yIE1NQVAgKi8KK3N0YXRpYyB2b2lkKiBzeXNfYWxsb2MobXN0YXRlIG0sIHNpemVfdCBuYikgeworICBjaGFyKiB0YmFzZSA9IENNRkFJTDsKKyAgc2l6ZV90IHRzaXplID0gMDsKKyAgZmxhZ190IG1tYXBfZmxhZyA9IDA7CisKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisKKyAgLyogRGlyZWN0bHkgbWFwIGxhcmdlIGNodW5rcyAqLworICBpZiAodXNlX21tYXAobSkgJiYgbmIgPj0gbXBhcmFtcy5tbWFwX3RocmVzaG9sZCkgeworICAgIHZvaWQqIG1lbSA9IG1tYXBfYWxsb2MobSwgbmIpOworICAgIGlmIChtZW0gIT0gMCkKKyAgICAgIHJldHVybiBtZW07CisgIH0KKworICAvKgorICAgIFRyeSBnZXR0aW5nIG1lbW9yeSBpbiBhbnkgb2YgdGhyZWUgd2F5cyAoaW4gbW9zdC1wcmVmZXJyZWQgdG8KKyAgICBsZWFzdC1wcmVmZXJyZWQgb3JkZXIpOgorICAgIDEuIEEgY2FsbCB0byBNT1JFQ09SRSB0aGF0IGNhbiBub3JtYWxseSBjb250aWd1b3VzbHkgZXh0ZW5kIG1lbW9yeS4KKyAgICAgICAoZGlzYWJsZWQgaWYgbm90IE1PUkVDT1JFX0NPTlRJR1VPVVMgb3Igbm90IEhBVkVfTU9SRUNPUkUgb3IKKyAgICAgICBtYWluIHNwYWNlIGlzIG1tYXBwZWQgb3IgYSBwcmV2aW91cyBjb250aWd1b3VzIGNhbGwgZmFpbGVkKQorICAgIDIuIEEgY2FsbCB0byBNTUFQIG5ldyBzcGFjZSAoZGlzYWJsZWQgaWYgbm90IEhBVkVfTU1BUCkuCisgICAgICAgTm90ZSB0aGF0IHVuZGVyIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBpZiBNT1JFQ09SRSBpcyB1bmFibGUgdG8KKyAgICAgICBmdWxmaWxsIGEgcmVxdWVzdCwgYW5kIEhBVkVfTU1BUCBpcyB0cnVlLCB0aGVuIG1tYXAgaXMKKyAgICAgICB1c2VkIGFzIGEgbm9uY29udGlndW91cyBzeXN0ZW0gYWxsb2NhdG9yLiBUaGlzIGlzIGEgdXNlZnVsIGJhY2t1cAorICAgICAgIHN0cmF0ZWd5IGZvciBzeXN0ZW1zIHdpdGggaG9sZXMgaW4gYWRkcmVzcyBzcGFjZXMgLS0gaW4gdGhpcyBjYXNlCisgICAgICAgc2JyayBjYW5ub3QgY29udGlndW91c2x5IGV4cGFuZCB0aGUgaGVhcCwgYnV0IG1tYXAgbWF5IGJlIGFibGUgdG8KKyAgICAgICBmaW5kIHNwYWNlLgorICAgIDMuIEEgY2FsbCB0byBNT1JFQ09SRSB0aGF0IGNhbm5vdCB1c3VhbGx5IGNvbnRpZ3VvdXNseSBleHRlbmQgbWVtb3J5LgorICAgICAgIChkaXNhYmxlZCBpZiBub3QgSEFWRV9NT1JFQ09SRSkKKworICAgSW4gYWxsIGNhc2VzLCB3ZSBuZWVkIHRvIHJlcXVlc3QgZW5vdWdoIGJ5dGVzIGZyb20gc3lzdGVtIHRvIGVuc3VyZQorICAgd2UgY2FuIG1hbGxvYyBuYiBieXRlcyB1cG9uIHN1Y2Nlc3MsIHNvIHBhZCB3aXRoIGVub3VnaCBzcGFjZSBmb3IKKyAgIHRvcF9mb290LCBwbHVzIGFsaWdubWVudC1wYWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGxvc2UgYnl0ZXMgaWYKKyAgIG5vdCBvbiBib3VuZGFyeSwgYW5kIHJvdW5kIHRoaXMgdXAgdG8gYSBncmFudWxhcml0eSB1bml0LgorICAqLworCisgIGlmIChNT1JFQ09SRV9DT05USUdVT1VTICYmICF1c2Vfbm9uY29udGlndW91cyhtKSkgeworICAgIGNoYXIqIGJyID0gQ01GQUlMOworICAgIG1zZWdtZW50cHRyIHNzID0gKG0tPnRvcCA9PSAwKT8gMCA6IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopbS0+dG9wKTsKKyAgICBzaXplX3QgYXNpemUgPSAwOworICAgIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisKKyAgICBpZiAoc3MgPT0gMCkgeyAgLyogRmlyc3QgdGltZSB0aHJvdWdoIG9yIHJlY292ZXJ5ICovCisgICAgICBjaGFyKiBiYXNlID0gKGNoYXIqKUNBTExfTU9SRUNPUkUoMCk7CisgICAgICBpZiAoYmFzZSAhPSBDTUZBSUwpIHsKKwlhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU1lTX0FMTE9DX1BBRERJTkcpOworCS8qIEFkanVzdCB0byBlbmQgb24gYSBwYWdlIGJvdW5kYXJ5ICovCisJaWYgKCFpc19wYWdlX2FsaWduZWQoYmFzZSkpCisJICBhc2l6ZSArPSAocGFnZV9hbGlnbigoc2l6ZV90KWJhc2UpIC0gKHNpemVfdCliYXNlKTsKKwkvKiBDYW4ndCBjYWxsIE1PUkVDT1JFIGlmIHNpemUgaXMgbmVnYXRpdmUgd2hlbiB0cmVhdGVkIGFzIHNpZ25lZCAqLworCWlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorCSAgICAoYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoYXNpemUpKSkgPT0gYmFzZSkgeworCSAgdGJhc2UgPSBiYXNlOworCSAgdHNpemUgPSBhc2l6ZTsKKwl9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogU3VidHJhY3Qgb3V0IGV4aXN0aW5nIGF2YWlsYWJsZSB0b3Agc3BhY2UgZnJvbSBNT1JFQ09SRSByZXF1ZXN0LiAqLworICAgICAgYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiAtIG0tPnRvcHNpemUgKyBTWVNfQUxMT0NfUEFERElORyk7CisgICAgICAvKiBVc2UgbWVtIGhlcmUgb25seSBpZiBpdCBkaWQgY29udGludW91c2x5IGV4dGVuZCBvbGQgc3BhY2UgKi8KKyAgICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorCSAgKGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKGFzaXplKSkpID09IHNzLT5iYXNlK3NzLT5zaXplKSB7CisJdGJhc2UgPSBicjsKKwl0c2l6ZSA9IGFzaXplOworICAgICAgfQorICAgIH0KKworICAgIGlmICh0YmFzZSA9PSBDTUZBSUwpIHsgICAgLyogQ29wZSB3aXRoIHBhcnRpYWwgZmFpbHVyZSAqLworICAgICAgaWYgKGJyICE9IENNRkFJTCkgeyAgICAvKiBUcnkgdG8gdXNlL2V4dGVuZCB0aGUgc3BhY2Ugd2UgZGlkIGdldCAqLworCWlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorCSAgICBhc2l6ZSA8IG5iICsgU1lTX0FMTE9DX1BBRERJTkcpIHsKKwkgIHNpemVfdCBlc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU1lTX0FMTE9DX1BBRERJTkcgLSBhc2l6ZSk7CisJICBpZiAoZXNpemUgPCBIQUxGX01BWF9TSVpFX1QpIHsKKwkgICAgY2hhciogZW5kID0gKGNoYXIqKUNBTExfTU9SRUNPUkUoZXNpemUpOworCSAgICBpZiAoZW5kICE9IENNRkFJTCkKKwkgICAgICBhc2l6ZSArPSBlc2l6ZTsKKwkgICAgZWxzZSB7ICAgICAgICAgICAgLyogQ2FuJ3QgdXNlOyB0cnkgdG8gcmVsZWFzZSAqLworCSAgICAgICh2b2lkKSBDQUxMX01PUkVDT1JFKC1hc2l6ZSk7CisJICAgICAgYnIgPSBDTUZBSUw7CisJICAgIH0KKwkgIH0KKwl9CisgICAgICB9CisgICAgICBpZiAoYnIgIT0gQ01GQUlMKSB7ICAgIC8qIFVzZSB0aGUgc3BhY2Ugd2UgZGlkIGdldCAqLworCXRiYXNlID0gYnI7CisJdHNpemUgPSBhc2l6ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKwlkaXNhYmxlX2NvbnRpZ3VvdXMobSk7IC8qIERvbid0IHRyeSBjb250aWd1b3VzIHBhdGggaW4gdGhlIGZ1dHVyZSAqLworICAgIH0KKworICAgIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisgIH0KKworICBpZiAoSEFWRV9NTUFQICYmIHRiYXNlID09IENNRkFJTCkgeyAgLyogVHJ5IE1NQVAgKi8KKyAgICBzaXplX3QgcnNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNZU19BTExPQ19QQURESU5HKTsKKyAgICBpZiAocnNpemUgPiBuYikgeyAvKiBGYWlsIGlmIHdyYXBzIGFyb3VuZCB6ZXJvICovCisgICAgICBjaGFyKiBtcCA9IChjaGFyKikoQ0FMTF9NTUFQKHJzaXplKSk7CisgICAgICBpZiAobXAgIT0gQ01GQUlMKSB7CisJdGJhc2UgPSBtcDsKKwl0c2l6ZSA9IHJzaXplOworCW1tYXBfZmxhZyA9IElTX01NQVBQRURfQklUOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChIQVZFX01PUkVDT1JFICYmIHRiYXNlID09IENNRkFJTCkgeyAvKiBUcnkgbm9uY29udGlndW91cyBNT1JFQ09SRSAqLworICAgIHNpemVfdCBhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU1lTX0FMTE9DX1BBRERJTkcpOworICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCkgeworICAgICAgY2hhciogYnIgPSBDTUZBSUw7CisgICAgICBjaGFyKiBlbmQgPSBDTUZBSUw7CisgICAgICBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOworICAgICAgYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoYXNpemUpKTsKKyAgICAgIGVuZCA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7CisgICAgICBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworICAgICAgaWYgKGJyICE9IENNRkFJTCAmJiBlbmQgIT0gQ01GQUlMICYmIGJyIDwgZW5kKSB7CisJc2l6ZV90IHNzaXplID0gZW5kIC0gYnI7CisJaWYgKHNzaXplID4gbmIgKyBUT1BfRk9PVF9TSVpFKSB7CisJICB0YmFzZSA9IGJyOworCSAgdHNpemUgPSBzc2l6ZTsKKwl9CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHRiYXNlICE9IENNRkFJTCkgeworCisgICAgaWYgKChtLT5mb290cHJpbnQgKz0gdHNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKyAgICAgIG0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisKKyAgICBpZiAoIWlzX2luaXRpYWxpemVkKG0pKSB7IC8qIGZpcnN0LXRpbWUgaW5pdGlhbGl6YXRpb24gKi8KKyAgICAgIG0tPnNlZy5iYXNlID0gbS0+bGVhc3RfYWRkciA9IHRiYXNlOworICAgICAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKKyAgICAgIG0tPnNlZy5zZmxhZ3MgPSBtbWFwX2ZsYWc7CisgICAgICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7CisgICAgICBtLT5yZWxlYXNlX2NoZWNrcyA9IE1BWF9SRUxFQVNFX0NIRUNLX1JBVEU7CisgICAgICBpbml0X2JpbnMobSk7CisjaWYgIU9OTFlfTVNQQUNFUworICAgICAgaWYgKGlzX2dsb2JhbChtKSkKKwlpbml0X3RvcChtLCAobWNodW5rcHRyKXRiYXNlLCB0c2l6ZSAtIFRPUF9GT09UX1NJWkUpOworICAgICAgZWxzZQorI2VuZGlmCisgICAgICB7CisJLyogT2Zmc2V0IHRvcCBieSBlbWJlZGRlZCBtYWxsb2Nfc3RhdGUgKi8KKwltY2h1bmtwdHIgbW4gPSBuZXh0X2NodW5rKG1lbTJjaHVuayhtKSk7CisJaW5pdF90b3AobSwgbW4sIChzaXplX3QpKCh0YmFzZSArIHRzaXplKSAtIChjaGFyKiltbikgLVRPUF9GT09UX1NJWkUpOworICAgICAgfQorICAgIH0KKworICAgIGVsc2UgeworICAgICAgLyogVHJ5IHRvIG1lcmdlIHdpdGggYW4gZXhpc3Rpbmcgc2VnbWVudCAqLworICAgICAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICAgICAgLyogT25seSBjb25zaWRlciBtb3N0IHJlY2VudCBzZWdtZW50IGlmIHRyYXZlcnNhbCBzdXBwcmVzc2VkICovCisgICAgICB3aGlsZSAoc3AgIT0gMCAmJiB0YmFzZSAhPSBzcC0+YmFzZSArIHNwLT5zaXplKQorCXNwID0gKE5PX1NFR01FTlRfVFJBVkVSU0FMKSA/IDAgOiBzcC0+bmV4dDsKKyAgICAgIGlmIChzcCAhPSAwICYmCisJICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisJICAoc3AtPnNmbGFncyAmIElTX01NQVBQRURfQklUKSA9PSBtbWFwX2ZsYWcgJiYKKwkgIHNlZ21lbnRfaG9sZHMoc3AsIG0tPnRvcCkpIHsgLyogYXBwZW5kICovCisJc3AtPnNpemUgKz0gdHNpemU7CisJaW5pdF90b3AobSwgbS0+dG9wLCBtLT50b3BzaXplICsgdHNpemUpOworICAgICAgfQorICAgICAgZWxzZSB7CisJaWYgKHRiYXNlIDwgbS0+bGVhc3RfYWRkcikKKwkgIG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKwlzcCA9ICZtLT5zZWc7CisJd2hpbGUgKHNwICE9IDAgJiYgc3AtPmJhc2UgIT0gdGJhc2UgKyB0c2l6ZSkKKwkgIHNwID0gKE5PX1NFR01FTlRfVFJBVkVSU0FMKSA/IDAgOiBzcC0+bmV4dDsKKwlpZiAoc3AgIT0gMCAmJgorCSAgICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisJICAgIChzcC0+c2ZsYWdzICYgSVNfTU1BUFBFRF9CSVQpID09IG1tYXBfZmxhZykgeworCSAgY2hhciogb2xkYmFzZSA9IHNwLT5iYXNlOworCSAgc3AtPmJhc2UgPSB0YmFzZTsKKwkgIHNwLT5zaXplICs9IHRzaXplOworCSAgcmV0dXJuIHByZXBlbmRfYWxsb2MobSwgdGJhc2UsIG9sZGJhc2UsIG5iKTsKKwl9CisJZWxzZQorCSAgYWRkX3NlZ21lbnQobSwgdGJhc2UsIHRzaXplLCBtbWFwX2ZsYWcpOworICAgICAgfQorICAgIH0KKworICAgIGlmIChuYiA8IG0tPnRvcHNpemUpIHsgLyogQWxsb2NhdGUgZnJvbSBuZXcgb3IgZXh0ZW5kZWQgdG9wIHNwYWNlICovCisgICAgICBzaXplX3QgcnNpemUgPSBtLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtLT50b3A7CisgICAgICBtY2h1bmtwdHIgciA9IG0tPnRvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIG5iKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobSwgY2h1bmsybWVtKHApLCBuYik7CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorCisgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBzeXN0ZW0gZGVhbGxvY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFVubWFwIGFuZCB1bmxpbmsgYW55IG1tYXBwZWQgc2VnbWVudHMgdGhhdCBkb24ndCBjb250YWluIHVzZWQgY2h1bmtzICovCitzdGF0aWMgc2l6ZV90IHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKG1zdGF0ZSBtKSB7CisgIHNpemVfdCByZWxlYXNlZCA9IDA7CisgIGludCBuc2VncyA9IDA7CisgIG1zZWdtZW50cHRyIHByZWQgPSAmbS0+c2VnOworICBtc2VnbWVudHB0ciBzcCA9IHByZWQtPm5leHQ7CisgIHdoaWxlIChzcCAhPSAwKSB7CisgICAgY2hhciogYmFzZSA9IHNwLT5iYXNlOworICAgIHNpemVfdCBzaXplID0gc3AtPnNpemU7CisgICAgbXNlZ21lbnRwdHIgbmV4dCA9IHNwLT5uZXh0OworICAgICsrbnNlZ3M7CisgICAgaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkgJiYgIWlzX2V4dGVybl9zZWdtZW50KHNwKSkgeworICAgICAgbWNodW5rcHRyIHAgPSBhbGlnbl9hc19jaHVuayhiYXNlKTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgIC8qIENhbiB1bm1hcCBpZiBmaXJzdCBjaHVuayBob2xkcyBlbnRpcmUgc2VnbWVudCBhbmQgbm90IHBpbm5lZCAqLworICAgICAgaWYgKCFjaW51c2UocCkgJiYgKGNoYXIqKXAgKyBwc2l6ZSA+PSBiYXNlICsgc2l6ZSAtIFRPUF9GT09UX1NJWkUpIHsKKwl0Y2h1bmtwdHIgdHAgPSAodGNodW5rcHRyKXA7CisJYXNzZXJ0KHNlZ21lbnRfaG9sZHMoc3AsIChjaGFyKilzcCkpOworCWlmIChwID09IG0tPmR2KSB7CisJICBtLT5kdiA9IDA7CisJICBtLT5kdnNpemUgPSAwOworCX0KKwllbHNlIHsKKwkgIHVubGlua19sYXJnZV9jaHVuayhtLCB0cCk7CisJfQorCWlmIChDQUxMX01VTk1BUChiYXNlLCBzaXplKSA9PSAwKSB7CisJICByZWxlYXNlZCArPSBzaXplOworCSAgbS0+Zm9vdHByaW50IC09IHNpemU7CisJICAvKiB1bmxpbmsgb2Jzb2xldGVkIHJlY29yZCAqLworCSAgc3AgPSBwcmVkOworCSAgc3AtPm5leHQgPSBuZXh0OworCX0KKwllbHNlIHsgLyogYmFjayBvdXQgaWYgY2Fubm90IHVubWFwICovCisJICBpbnNlcnRfbGFyZ2VfY2h1bmsobSwgdHAsIHBzaXplKTsKKwl9CisgICAgICB9CisgICAgfQorICAgIGlmIChOT19TRUdNRU5UX1RSQVZFUlNBTCkgLyogc2NhbiBvbmx5IGZpcnN0IHNlZ21lbnQgKi8KKyAgICAgIGJyZWFrOworICAgIHByZWQgPSBzcDsKKyAgICBzcCA9IG5leHQ7CisgIH0KKyAgLyogUmVzZXQgY2hlY2sgY291bnRlciAqLworICBtLT5yZWxlYXNlX2NoZWNrcyA9ICgobnNlZ3MgPiBNQVhfUkVMRUFTRV9DSEVDS19SQVRFKT8KKwkJICAgICAgIG5zZWdzIDogTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSk7CisgIHJldHVybiByZWxlYXNlZDsKK30KKworc3RhdGljIGludCBzeXNfdHJpbShtc3RhdGUgbSwgc2l6ZV90IHBhZCkgeworICBzaXplX3QgcmVsZWFzZWQgPSAwOworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgaWYgKHBhZCA8IE1BWF9SRVFVRVNUICYmIGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgcGFkICs9IFRPUF9GT09UX1NJWkU7IC8qIGVuc3VyZSBlbm91Z2ggcm9vbSBmb3Igc2VnbWVudCBvdmVyaGVhZCAqLworCisgICAgaWYgKG0tPnRvcHNpemUgPiBwYWQpIHsKKyAgICAgIC8qIFNocmluayB0b3Agc3BhY2UgaW4gZ3JhbnVsYXJpdHktc2l6ZSB1bml0cywga2VlcGluZyBhdCBsZWFzdCBvbmUgKi8KKyAgICAgIHNpemVfdCB1bml0ID0gbXBhcmFtcy5ncmFudWxhcml0eTsKKyAgICAgIHNpemVfdCBleHRyYSA9ICgobS0+dG9wc2l6ZSAtIHBhZCArICh1bml0IC0gU0laRV9UX09ORSkpIC8gdW5pdCAtCisJCSAgICAgIFNJWkVfVF9PTkUpICogdW5pdDsKKyAgICAgIG1zZWdtZW50cHRyIHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyKiltLT50b3ApOworCisgICAgICBpZiAoIWlzX2V4dGVybl9zZWdtZW50KHNwKSkgeworCWlmIChpc19tbWFwcGVkX3NlZ21lbnQoc3ApKSB7CisJICBpZiAoSEFWRV9NTUFQICYmCisJICAgICAgc3AtPnNpemUgPj0gZXh0cmEgJiYKKwkgICAgICAhaGFzX3NlZ21lbnRfbGluayhtLCBzcCkpIHsgLyogY2FuJ3Qgc2hyaW5rIGlmIHBpbm5lZCAqLworCSAgICBzaXplX3QgbmV3c2l6ZSA9IHNwLT5zaXplIC0gZXh0cmE7CisJICAgIC8qIFByZWZlciBtcmVtYXAsIGZhbGwgYmFjayB0byBtdW5tYXAgKi8KKwkgICAgaWYgKChDQUxMX01SRU1BUChzcC0+YmFzZSwgc3AtPnNpemUsIG5ld3NpemUsIDApICE9IE1GQUlMKSB8fAorCQkoQ0FMTF9NVU5NQVAoc3AtPmJhc2UgKyBuZXdzaXplLCBleHRyYSkgPT0gMCkpIHsKKwkgICAgICByZWxlYXNlZCA9IGV4dHJhOworCSAgICB9CisJICB9CisJfQorCWVsc2UgaWYgKEhBVkVfTU9SRUNPUkUpIHsKKwkgIGlmIChleHRyYSA+PSBIQUxGX01BWF9TSVpFX1QpIC8qIEF2b2lkIHdyYXBwaW5nIG5lZ2F0aXZlICovCisJICAgIGV4dHJhID0gKEhBTEZfTUFYX1NJWkVfVCkgKyBTSVpFX1RfT05FIC0gdW5pdDsKKwkgIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisJICB7CisJICAgIC8qIE1ha2Ugc3VyZSBlbmQgb2YgbWVtb3J5IGlzIHdoZXJlIHdlIGxhc3Qgc2V0IGl0LiAqLworCSAgICBjaGFyKiBvbGRfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOworCSAgICBpZiAob2xkX2JyID09IHNwLT5iYXNlICsgc3AtPnNpemUpIHsKKwkgICAgICBjaGFyKiByZWxfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoLWV4dHJhKSk7CisJICAgICAgY2hhciogbmV3X2JyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKDApKTsKKwkgICAgICBpZiAocmVsX2JyICE9IENNRkFJTCAmJiBuZXdfYnIgPCBvbGRfYnIpCisJCXJlbGVhc2VkID0gb2xkX2JyIC0gbmV3X2JyOworCSAgICB9CisJICB9CisJICBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworCX0KKyAgICAgIH0KKworICAgICAgaWYgKHJlbGVhc2VkICE9IDApIHsKKwlzcC0+c2l6ZSAtPSByZWxlYXNlZDsKKwltLT5mb290cHJpbnQgLT0gcmVsZWFzZWQ7CisJaW5pdF90b3AobSwgbS0+dG9wLCBtLT50b3BzaXplIC0gcmVsZWFzZWQpOworCWNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICAgICAgfQorICAgIH0KKworICAgIC8qIFVubWFwIGFueSB1bnVzZWQgbW1hcHBlZCBzZWdtZW50cyAqLworICAgIGlmIChIQVZFX01NQVApCisgICAgICByZWxlYXNlZCArPSByZWxlYXNlX3VudXNlZF9zZWdtZW50cyhtKTsKKworICAgIC8qIE9uIGZhaWx1cmUsIGRpc2FibGUgYXV0b3RyaW0gdG8gYXZvaWQgcmVwZWF0ZWQgZmFpbGVkIGZ1dHVyZSBjYWxscyAqLworICAgIGlmIChyZWxlYXNlZCA9PSAwICYmIG0tPnRvcHNpemUgPiBtLT50cmltX2NoZWNrKQorICAgICAgbS0+dHJpbV9jaGVjayA9IE1BWF9TSVpFX1Q7CisgIH0KKworICByZXR1cm4gKHJlbGVhc2VkICE9IDApPyAxIDogMDsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvYyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBhbGxvY2F0ZSBhIGxhcmdlIHJlcXVlc3QgZnJvbSB0aGUgYmVzdCBmaXR0aW5nIGNodW5rIGluIGEgdHJlZWJpbiAqLworc3RhdGljIHZvaWQqIHRtYWxsb2NfbGFyZ2UobXN0YXRlIG0sIHNpemVfdCBuYikgeworICB0Y2h1bmtwdHIgdiA9IDA7CisgIHNpemVfdCByc2l6ZSA9IC1uYjsgLyogVW5zaWduZWQgbmVnYXRpb24gKi8KKyAgdGNodW5rcHRyIHQ7CisgIGJpbmRleF90IGlkeDsKKyAgY29tcHV0ZV90cmVlX2luZGV4KG5iLCBpZHgpOworICBpZiAoKHQgPSAqdHJlZWJpbl9hdChtLCBpZHgpKSAhPSAwKSB7CisgICAgLyogVHJhdmVyc2UgdHJlZSBmb3IgdGhpcyBiaW4gbG9va2luZyBmb3Igbm9kZSB3aXRoIHNpemUgPT0gbmIgKi8KKyAgICBzaXplX3Qgc2l6ZWJpdHMgPSBuYiA8PCBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoaWR4KTsKKyAgICB0Y2h1bmtwdHIgcnN0ID0gMDsgIC8qIFRoZSBkZWVwZXN0IHVudGFrZW4gcmlnaHQgc3VidHJlZSAqLworICAgIGZvciAoOzspIHsKKyAgICAgIHRjaHVua3B0ciBydDsKKyAgICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7CisgICAgICBpZiAodHJlbSA8IHJzaXplKSB7CisJdiA9IHQ7CisJaWYgKChyc2l6ZSA9IHRyZW0pID09IDApCisJICBicmVhazsKKyAgICAgIH0KKyAgICAgIHJ0ID0gdC0+Y2hpbGRbMV07CisgICAgICB0ID0gdC0+Y2hpbGRbKHNpemViaXRzID4+IChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSkgJiAxXTsKKyAgICAgIGlmIChydCAhPSAwICYmIHJ0ICE9IHQpCisJcnN0ID0gcnQ7CisgICAgICBpZiAodCA9PSAwKSB7CisJdCA9IHJzdDsgLyogc2V0IHQgdG8gbGVhc3Qgc3VidHJlZSBob2xkaW5nIHNpemVzID4gbmIgKi8KKwlicmVhazsKKyAgICAgIH0KKyAgICAgIHNpemViaXRzIDw8PSAxOworICAgIH0KKyAgfQorICBpZiAodCA9PSAwICYmIHYgPT0gMCkgeyAvKiBzZXQgdCB0byByb290IG9mIG5leHQgbm9uLWVtcHR5IHRyZWViaW4gKi8KKyAgICBiaW5tYXBfdCBsZWZ0Yml0cyA9IGxlZnRfYml0cyhpZHgyYml0KGlkeCkpICYgbS0+dHJlZW1hcDsKKyAgICBpZiAobGVmdGJpdHMgIT0gMCkgeworICAgICAgYmluZGV4X3QgaTsKKyAgICAgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKyAgICAgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisgICAgICB0ID0gKnRyZWViaW5fYXQobSwgaSk7CisgICAgfQorICB9CisKKyAgd2hpbGUgKHQgIT0gMCkgeyAvKiBmaW5kIHNtYWxsZXN0IG9mIHRyZWUgb3Igc3VidHJlZSAqLworICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7CisgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworICAgICAgcnNpemUgPSB0cmVtOworICAgICAgdiA9IHQ7CisgICAgfQorICAgIHQgPSBsZWZ0bW9zdF9jaGlsZCh0KTsKKyAgfQorCisgIC8qICBJZiBkdiBpcyBhIGJldHRlciBmaXQsIHJldHVybiAwIHNvIG1hbGxvYyB3aWxsIHVzZSBpdCAqLworICBpZiAodiAhPSAwICYmIHJzaXplIDwgKHNpemVfdCkobS0+ZHZzaXplIC0gbmIpKSB7CisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCB2KSkpIHsgLyogc3BsaXQgKi8KKyAgICAgIG1jaHVua3B0ciByID0gY2h1bmtfcGx1c19vZmZzZXQodiwgbmIpOworICAgICAgYXNzZXJ0KGNodW5rc2l6ZSh2KSA9PSByc2l6ZSArIG5iKTsKKyAgICAgIGlmIChSVENIRUNLKG9rX25leHQodiwgcikpKSB7CisJdW5saW5rX2xhcmdlX2NodW5rKG0sIHYpOworCWlmIChyc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorCSAgc2V0X2ludXNlX2FuZF9waW51c2UobSwgdiwgKHJzaXplICsgbmIpKTsKKwllbHNlIHsKKwkgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgdiwgbmIpOworCSAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwkgIGluc2VydF9jaHVuayhtLCByLCByc2l6ZSk7CisJfQorCXJldHVybiBjaHVuazJtZW0odik7CisgICAgICB9CisgICAgfQorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pOworICB9CisgIHJldHVybiAwOworfQorCisvKiBhbGxvY2F0ZSBhIHNtYWxsIHJlcXVlc3QgZnJvbSB0aGUgYmVzdCBmaXR0aW5nIGNodW5rIGluIGEgdHJlZWJpbiAqLworc3RhdGljIHZvaWQqIHRtYWxsb2Nfc21hbGwobXN0YXRlIG0sIHNpemVfdCBuYikgeworICB0Y2h1bmtwdHIgdCwgdjsKKyAgc2l6ZV90IHJzaXplOworICBiaW5kZXhfdCBpOworICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChtLT50cmVlbWFwKTsKKyAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsKKyAgdiA9IHQgPSAqdHJlZWJpbl9hdChtLCBpKTsKKyAgcnNpemUgPSBjaHVua3NpemUodCkgLSBuYjsKKworICB3aGlsZSAoKHQgPSBsZWZ0bW9zdF9jaGlsZCh0KSkgIT0gMCkgeworICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7CisgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworICAgICAgcnNpemUgPSB0cmVtOworICAgICAgdiA9IHQ7CisgICAgfQorICB9CisKKyAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCB2KSkpIHsKKyAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsKKyAgICBhc3NlcnQoY2h1bmtzaXplKHYpID09IHJzaXplICsgbmIpOworICAgIGlmIChSVENIRUNLKG9rX25leHQodiwgcikpKSB7CisgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7CisgICAgICBpZiAocnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKwlzZXRfaW51c2VfYW5kX3BpbnVzZShtLCB2LCAocnNpemUgKyBuYikpOworICAgICAgZWxzZSB7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCB2LCBuYik7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwlyZXBsYWNlX2R2KG0sIHIsIHJzaXplKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBjaHVuazJtZW0odik7CisgICAgfQorICB9CisKKyAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSk7CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVhbGxvYyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCogaW50ZXJuYWxfcmVhbGxvYyhtc3RhdGUgbSwgdm9pZCogb2xkbWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKSB7CisgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICAgIHJldHVybiAwOworICB9CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgbWNodW5rcHRyIG9sZHAgPSBtZW0yY2h1bmsob2xkbWVtKTsKKyAgICBzaXplX3Qgb2xkc2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsKKyAgICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KG9sZHAsIG9sZHNpemUpOworICAgIG1jaHVua3B0ciBuZXdwID0gMDsKKyAgICB2b2lkKiBleHRyYSA9IDA7CisKKyAgICAvKiBUcnkgdG8gZWl0aGVyIHNocmluayBvciBleHRlbmQgaW50byB0b3AuIEVsc2UgbWFsbG9jLWNvcHktZnJlZSAqLworCisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCBvbGRwKSAmJiBva19jaW51c2Uob2xkcCkgJiYKKwkJb2tfbmV4dChvbGRwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisgICAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOworICAgICAgaWYgKGlzX21tYXBwZWQob2xkcCkpCisJbmV3cCA9IG1tYXBfcmVzaXplKG0sIG9sZHAsIG5iKTsKKyAgICAgIGVsc2UgaWYgKG9sZHNpemUgPj0gbmIpIHsgLyogYWxyZWFkeSBiaWcgZW5vdWdoICovCisJc2l6ZV90IHJzaXplID0gb2xkc2l6ZSAtIG5iOworCW5ld3AgPSBvbGRwOworCWlmIChyc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkgeworCSAgbWNodW5rcHRyIHJlbWFpbmRlciA9IGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIG5iKTsKKwkgIHNldF9pbnVzZShtLCBuZXdwLCBuYik7CisJICBzZXRfaW51c2UobSwgcmVtYWluZGVyLCByc2l6ZSk7CisJICBleHRyYSA9IGNodW5rMm1lbShyZW1haW5kZXIpOworCX0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG5leHQgPT0gbS0+dG9wICYmIG9sZHNpemUgKyBtLT50b3BzaXplID4gbmIpIHsKKwkvKiBFeHBhbmQgaW50byB0b3AgKi8KKwlzaXplX3QgbmV3c2l6ZSA9IG9sZHNpemUgKyBtLT50b3BzaXplOworCXNpemVfdCBuZXd0b3BzaXplID0gbmV3c2l6ZSAtIG5iOworCW1jaHVua3B0ciBuZXd0b3AgPSBjaHVua19wbHVzX29mZnNldChvbGRwLCBuYik7CisJc2V0X2ludXNlKG0sIG9sZHAsIG5iKTsKKwluZXd0b3AtPmhlYWQgPSBuZXd0b3BzaXplIHxQSU5VU0VfQklUOworCW0tPnRvcCA9IG5ld3RvcDsKKwltLT50b3BzaXplID0gbmV3dG9wc2l6ZTsKKwluZXdwID0gb2xkcDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsKKyAgICAgIFBPU1RBQ1RJT04obSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBQT1NUQUNUSU9OKG0pOworCisgICAgaWYgKG5ld3AgIT0gMCkgeworICAgICAgaWYgKGV4dHJhICE9IDApIHsKKwlpbnRlcm5hbF9mcmVlKG0sIGV4dHJhKTsKKyAgICAgIH0KKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG5ld3ApOworICAgICAgcmV0dXJuIGNodW5rMm1lbShuZXdwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB2b2lkKiBuZXdtZW0gPSBpbnRlcm5hbF9tYWxsb2MobSwgYnl0ZXMpOworICAgICAgaWYgKG5ld21lbSAhPSAwKSB7CisJc2l6ZV90IG9jID0gb2xkc2l6ZSAtIG92ZXJoZWFkX2ZvcihvbGRwKTsKKwltZW1jcHkobmV3bWVtLCBvbGRtZW0sIChvYyA8IGJ5dGVzKT8gb2MgOiBieXRlcyk7CisJaW50ZXJuYWxfZnJlZShtLCBvbGRtZW0pOworICAgICAgfQorICAgICAgcmV0dXJuIG5ld21lbTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtZW1hbGlnbiBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkKiBpbnRlcm5hbF9tZW1hbGlnbihtc3RhdGUgbSwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChhbGlnbm1lbnQgPD0gTUFMTE9DX0FMSUdOTUVOVCkgICAgLyogQ2FuIGp1c3QgdXNlIG1hbGxvYyAqLworICAgIHJldHVybiBpbnRlcm5hbF9tYWxsb2MobSwgYnl0ZXMpOworICBpZiAoYWxpZ25tZW50IDwgIE1JTl9DSFVOS19TSVpFKSAvKiBtdXN0IGJlIGF0IGxlYXN0IGEgbWluaW11bSBjaHVuayBzaXplICovCisgICAgYWxpZ25tZW50ID0gTUlOX0NIVU5LX1NJWkU7CisgIGlmICgoYWxpZ25tZW50ICYgKGFsaWdubWVudC1TSVpFX1RfT05FKSkgIT0gMCkgey8qIEVuc3VyZSBhIHBvd2VyIG9mIDIgKi8KKyAgICBzaXplX3QgYSA9IE1BTExPQ19BTElHTk1FTlQgPDwgMTsKKyAgICB3aGlsZSAoYSA8IGFsaWdubWVudCkgYSA8PD0gMTsKKyAgICBhbGlnbm1lbnQgPSBhOworICB9CisKKyAgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUIC0gYWxpZ25tZW50KSB7CisgICAgaWYgKG0gIT0gMCkgIHsgLyogVGVzdCBpc24ndCBuZWVkZWQgYnV0IGF2b2lkcyBjb21waWxlciB3YXJuaW5nICovCisgICAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgICAgfQorICB9CisgIGVsc2UgeworICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7CisgICAgc2l6ZV90IHJlcSA9IG5iICsgYWxpZ25tZW50ICsgTUlOX0NIVU5LX1NJWkUgLSBDSFVOS19PVkVSSEVBRDsKKyAgICBjaGFyKiBtZW0gPSAoY2hhciopaW50ZXJuYWxfbWFsbG9jKG0sIHJlcSk7CisgICAgaWYgKG1lbSAhPSAwKSB7CisgICAgICB2b2lkKiBsZWFkZXIgPSAwOworICAgICAgdm9pZCogdHJhaWxlciA9IDA7CisgICAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworCisgICAgICBpZiAoUFJFQUNUSU9OKG0pKSByZXR1cm4gMDsKKyAgICAgIGlmICgoKChzaXplX3QpKG1lbSkpICUgYWxpZ25tZW50KSAhPSAwKSB7IC8qIG1pc2FsaWduZWQgKi8KKwkvKgorCSAgRmluZCBhbiBhbGlnbmVkIHNwb3QgaW5zaWRlIGNodW5rLiAgU2luY2Ugd2UgbmVlZCB0byBnaXZlCisJICBiYWNrIGxlYWRpbmcgc3BhY2UgaW4gYSBjaHVuayBvZiBhdCBsZWFzdCBNSU5fQ0hVTktfU0laRSwgaWYKKwkgIHRoZSBmaXJzdCBjYWxjdWxhdGlvbiBwbGFjZXMgdXMgYXQgYSBzcG90IHdpdGggbGVzcyB0aGFuCisJICBNSU5fQ0hVTktfU0laRSBsZWFkZXIsIHdlIGNhbiBtb3ZlIHRvIHRoZSBuZXh0IGFsaWduZWQgc3BvdC4KKwkgIFdlJ3ZlIGFsbG9jYXRlZCBlbm91Z2ggdG90YWwgcm9vbSBzbyB0aGF0IHRoaXMgaXMgYWx3YXlzCisJICBwb3NzaWJsZS4KKwkqLworCWNoYXIqIGJyID0gKGNoYXIqKW1lbTJjaHVuaygoc2l6ZV90KSgoKHNpemVfdCkobWVtICsKKwkJCQkJCSAgICAgICBhbGlnbm1lbnQgLQorCQkJCQkJICAgICAgIFNJWkVfVF9PTkUpKSAmCisJCQkJCSAgICAgLWFsaWdubWVudCkpOworCWNoYXIqIHBvcyA9ICgoc2l6ZV90KShiciAtIChjaGFyKikocCkpID49IE1JTl9DSFVOS19TSVpFKT8KKwkgIGJyIDogYnIrYWxpZ25tZW50OworCW1jaHVua3B0ciBuZXdwID0gKG1jaHVua3B0cilwb3M7CisJc2l6ZV90IGxlYWRzaXplID0gcG9zIC0gKGNoYXIqKShwKTsKKwlzaXplX3QgbmV3c2l6ZSA9IGNodW5rc2l6ZShwKSAtIGxlYWRzaXplOworCisJaWYgKGlzX21tYXBwZWQocCkpIHsgLyogRm9yIG1tYXBwZWQgY2h1bmtzLCBqdXN0IGFkanVzdCBvZmZzZXQgKi8KKwkgIG5ld3AtPnByZXZfZm9vdCA9IHAtPnByZXZfZm9vdCArIGxlYWRzaXplOworCSAgbmV3cC0+aGVhZCA9IChuZXdzaXplfENJTlVTRV9CSVQpOworCX0KKwllbHNlIHsgLyogT3RoZXJ3aXNlLCBnaXZlIGJhY2sgbGVhZGVyLCB1c2UgdGhlIHJlc3QgKi8KKwkgIHNldF9pbnVzZShtLCBuZXdwLCBuZXdzaXplKTsKKwkgIHNldF9pbnVzZShtLCBwLCBsZWFkc2l6ZSk7CisJICBsZWFkZXIgPSBjaHVuazJtZW0ocCk7CisJfQorCXAgPSBuZXdwOworICAgICAgfQorCisgICAgICAvKiBHaXZlIGJhY2sgc3BhcmUgcm9vbSBhdCB0aGUgZW5kICovCisgICAgICBpZiAoIWlzX21tYXBwZWQocCkpIHsKKwlzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsKKwlpZiAoc2l6ZSA+IG5iICsgTUlOX0NIVU5LX1NJWkUpIHsKKwkgIHNpemVfdCByZW1haW5kZXJfc2l6ZSA9IHNpemUgLSBuYjsKKwkgIG1jaHVua3B0ciByZW1haW5kZXIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisJICBzZXRfaW51c2UobSwgcCwgbmIpOworCSAgc2V0X2ludXNlKG0sIHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUpOworCSAgdHJhaWxlciA9IGNodW5rMm1lbShyZW1haW5kZXIpOworCX0KKyAgICAgIH0KKworICAgICAgYXNzZXJ0IChjaHVua3NpemUocCkgPj0gbmIpOworICAgICAgYXNzZXJ0KCgoKHNpemVfdCkoY2h1bmsybWVtKHApKSkgJSBhbGlnbm1lbnQpID09IDApOworICAgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgcCk7CisgICAgICBQT1NUQUNUSU9OKG0pOworICAgICAgaWYgKGxlYWRlciAhPSAwKSB7CisJaW50ZXJuYWxfZnJlZShtLCBsZWFkZXIpOworICAgICAgfQorICAgICAgaWYgKHRyYWlsZXIgIT0gMCkgeworCWludGVybmFsX2ZyZWUobSwgdHJhaWxlcik7CisgICAgICB9CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbWFsbG9jL2NvYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQqKiBpYWxsb2MobXN0YXRlIG0sCisJCSAgICAgc2l6ZV90IG5fZWxlbWVudHMsCisJCSAgICAgc2l6ZV90KiBzaXplcywKKwkJICAgICBpbnQgb3B0cywKKwkJICAgICB2b2lkKiBjaHVua3NbXSkgeworICAvKgorICAgIFRoaXMgcHJvdmlkZXMgY29tbW9uIHN1cHBvcnQgZm9yIGluZGVwZW5kZW50X1ggcm91dGluZXMsIGhhbmRsaW5nCisgICAgYWxsIG9mIHRoZSBjb21iaW5hdGlvbnMgdGhhdCBjYW4gcmVzdWx0LgorCisgICAgVGhlIG9wdHMgYXJnIGhhczoKKyAgICBiaXQgMCBzZXQgaWYgYWxsIGVsZW1lbnRzIGFyZSBzYW1lIHNpemUgKHVzaW5nIHNpemVzWzBdKQorICAgIGJpdCAxIHNldCBpZiBlbGVtZW50cyBzaG91bGQgYmUgemVyb2VkCisgICovCisKKyAgc2l6ZV90ICAgIGVsZW1lbnRfc2l6ZTsgICAvKiBjaHVua3NpemUgb2YgZWFjaCBlbGVtZW50LCBpZiBhbGwgc2FtZSAqLworICBzaXplX3QgICAgY29udGVudHNfc2l6ZTsgIC8qIHRvdGFsIHNpemUgb2YgZWxlbWVudHMgKi8KKyAgc2l6ZV90ICAgIGFycmF5X3NpemU7ICAgICAvKiByZXF1ZXN0IHNpemUgb2YgcG9pbnRlciBhcnJheSAqLworICB2b2lkKiAgICAgbWVtOyAgICAgICAgICAgIC8qIG1hbGxvY2VkIGFnZ3JlZ2F0ZSBzcGFjZSAqLworICBtY2h1bmtwdHIgcDsgICAgICAgICAgICAgIC8qIGNvcnJlc3BvbmRpbmcgY2h1bmsgKi8KKyAgc2l6ZV90ICAgIHJlbWFpbmRlcl9zaXplOyAvKiByZW1haW5pbmcgYnl0ZXMgd2hpbGUgc3BsaXR0aW5nICovCisgIHZvaWQqKiAgICBtYXJyYXk7ICAgICAgICAgLyogZWl0aGVyICJjaHVua3MiIG9yIG1hbGxvY2VkIHB0ciBhcnJheSAqLworICBtY2h1bmtwdHIgYXJyYXlfY2h1bms7ICAgIC8qIGNodW5rIGZvciBtYWxsb2NlZCBwdHIgYXJyYXkgKi8KKyAgZmxhZ190ICAgIHdhc19lbmFibGVkOyAgICAvKiB0byBkaXNhYmxlIG1tYXAgKi8KKyAgc2l6ZV90ICAgIHNpemU7CisgIHNpemVfdCAgICBpOworCisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICAvKiBjb21wdXRlIGFycmF5IGxlbmd0aCwgaWYgbmVlZGVkICovCisgIGlmIChjaHVua3MgIT0gMCkgeworICAgIGlmIChuX2VsZW1lbnRzID09IDApCisgICAgICByZXR1cm4gY2h1bmtzOyAvKiBub3RoaW5nIHRvIGRvICovCisgICAgbWFycmF5ID0gY2h1bmtzOworICAgIGFycmF5X3NpemUgPSAwOworICB9CisgIGVsc2UgeworICAgIC8qIGlmIGVtcHR5IHJlcSwgbXVzdCBzdGlsbCByZXR1cm4gY2h1bmsgcmVwcmVzZW50aW5nIGVtcHR5IGFycmF5ICovCisgICAgaWYgKG5fZWxlbWVudHMgPT0gMCkKKyAgICAgIHJldHVybiAodm9pZCoqKWludGVybmFsX21hbGxvYyhtLCAwKTsKKyAgICBtYXJyYXkgPSAwOworICAgIGFycmF5X3NpemUgPSByZXF1ZXN0MnNpemUobl9lbGVtZW50cyAqIChzaXplb2Yodm9pZCopKSk7CisgIH0KKworICAvKiBjb21wdXRlIHRvdGFsIGVsZW1lbnQgc2l6ZSAqLworICBpZiAob3B0cyAmIDB4MSkgeyAvKiBhbGwtc2FtZS1zaXplICovCisgICAgZWxlbWVudF9zaXplID0gcmVxdWVzdDJzaXplKCpzaXplcyk7CisgICAgY29udGVudHNfc2l6ZSA9IG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemU7CisgIH0KKyAgZWxzZSB7IC8qIGFkZCB1cCBhbGwgdGhlIHNpemVzICovCisgICAgZWxlbWVudF9zaXplID0gMDsKKyAgICBjb250ZW50c19zaXplID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpICE9IG5fZWxlbWVudHM7ICsraSkKKyAgICAgIGNvbnRlbnRzX3NpemUgKz0gcmVxdWVzdDJzaXplKHNpemVzW2ldKTsKKyAgfQorCisgIHNpemUgPSBjb250ZW50c19zaXplICsgYXJyYXlfc2l6ZTsKKworICAvKgorICAgICBBbGxvY2F0ZSB0aGUgYWdncmVnYXRlIGNodW5rLiAgRmlyc3QgZGlzYWJsZSBkaXJlY3QtbW1hcHBpbmcgc28KKyAgICAgbWFsbG9jIHdvbid0IHVzZSBpdCwgc2luY2Ugd2Ugd291bGQgbm90IGJlIGFibGUgdG8gbGF0ZXIKKyAgICAgZnJlZS9yZWFsbG9jIHNwYWNlIGludGVybmFsIHRvIGEgc2VncmVnYXRlZCBtbWFwIHJlZ2lvbi4KKyAgKi8KKyAgd2FzX2VuYWJsZWQgPSB1c2VfbW1hcChtKTsKKyAgZGlzYWJsZV9tbWFwKG0pOworICBtZW0gPSBpbnRlcm5hbF9tYWxsb2MobSwgc2l6ZSAtIENIVU5LX09WRVJIRUFEKTsKKyAgaWYgKHdhc19lbmFibGVkKQorICAgIGVuYWJsZV9tbWFwKG0pOworICBpZiAobWVtID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKFBSRUFDVElPTihtKSkgcmV0dXJuIDA7CisgIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgcmVtYWluZGVyX3NpemUgPSBjaHVua3NpemUocCk7CisKKyAgYXNzZXJ0KCFpc19tbWFwcGVkKHApKTsKKworICBpZiAob3B0cyAmIDB4MikgeyAgICAgICAvKiBvcHRpb25hbGx5IGNsZWFyIHRoZSBlbGVtZW50cyAqLworICAgIG1lbXNldCgoc2l6ZV90KiltZW0sIDAsIHJlbWFpbmRlcl9zaXplIC0gU0laRV9UX1NJWkUgLSBhcnJheV9zaXplKTsKKyAgfQorCisgIC8qIElmIG5vdCBwcm92aWRlZCwgYWxsb2NhdGUgdGhlIHBvaW50ZXIgYXJyYXkgYXMgZmluYWwgcGFydCBvZiBjaHVuayAqLworICBpZiAobWFycmF5ID09IDApIHsKKyAgICBzaXplX3QgIGFycmF5X2NodW5rX3NpemU7CisgICAgYXJyYXlfY2h1bmsgPSBjaHVua19wbHVzX29mZnNldChwLCBjb250ZW50c19zaXplKTsKKyAgICBhcnJheV9jaHVua19zaXplID0gcmVtYWluZGVyX3NpemUgLSBjb250ZW50c19zaXplOworICAgIG1hcnJheSA9ICh2b2lkKiopIChjaHVuazJtZW0oYXJyYXlfY2h1bmspKTsKKyAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIGFycmF5X2NodW5rLCBhcnJheV9jaHVua19zaXplKTsKKyAgICByZW1haW5kZXJfc2l6ZSA9IGNvbnRlbnRzX3NpemU7CisgIH0KKworICAvKiBzcGxpdCBvdXQgZWxlbWVudHMgKi8KKyAgZm9yIChpID0gMDsgOyArK2kpIHsKKyAgICBtYXJyYXlbaV0gPSBjaHVuazJtZW0ocCk7CisgICAgaWYgKGkgIT0gbl9lbGVtZW50cy0xKSB7CisgICAgICBpZiAoZWxlbWVudF9zaXplICE9IDApCisJc2l6ZSA9IGVsZW1lbnRfc2l6ZTsKKyAgICAgIGVsc2UKKwlzaXplID0gcmVxdWVzdDJzaXplKHNpemVzW2ldKTsKKyAgICAgIHJlbWFpbmRlcl9zaXplIC09IHNpemU7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIHNpemUpOworICAgICAgcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHNpemUpOworICAgIH0KKyAgICBlbHNlIHsgLyogdGhlIGZpbmFsIGVsZW1lbnQgYWJzb3JicyBhbnkgb3ZlcmFsbG9jYXRpb24gc2xvcCAqLworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCByZW1haW5kZXJfc2l6ZSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworI2lmIERFQlVHCisgIGlmIChtYXJyYXkgIT0gY2h1bmtzKSB7CisgICAgLyogZmluYWwgZWxlbWVudCBtdXN0IGhhdmUgZXhhY3RseSBleGhhdXN0ZWQgY2h1bmsgKi8KKyAgICBpZiAoZWxlbWVudF9zaXplICE9IDApIHsKKyAgICAgIGFzc2VydChyZW1haW5kZXJfc2l6ZSA9PSBlbGVtZW50X3NpemUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGFzc2VydChyZW1haW5kZXJfc2l6ZSA9PSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pKTsKKyAgICB9CisgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbWVtMmNodW5rKG1hcnJheSkpOworICB9CisgIGZvciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQorICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG1lbTJjaHVuayhtYXJyYXlbaV0pKTsKKworI2VuZGlmIC8qIERFQlVHICovCisKKyAgUE9TVEFDVElPTihtKTsKKyAgcmV0dXJuIG1hcnJheTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwdWJsaWMgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgIU9OTFlfTVNQQUNFUworCit2b2lkKiBkbG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgLyoKKyAgICAgQmFzaWMgYWxnb3JpdGhtOgorICAgICBJZiBhIHNtYWxsIHJlcXVlc3QgKDwgMjU2IGJ5dGVzIG1pbnVzIHBlci1jaHVuayBvdmVyaGVhZCk6CisgICAgICAgMS4gSWYgb25lIGV4aXN0cywgdXNlIGEgcmVtYWluZGVybGVzcyBjaHVuayBpbiBhc3NvY2lhdGVkIHNtYWxsYmluLgorCSAgKFJlbWFpbmRlcmxlc3MgbWVhbnMgdGhhdCB0aGVyZSBhcmUgdG9vIGZldyBleGNlc3MgYnl0ZXMgdG8KKwkgIHJlcHJlc2VudCBhcyBhIGNodW5rLikKKyAgICAgICAyLiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIGR2IGNodW5rLCB3aGljaCBpcyBub3JtYWxseSB0aGUKKwkgIGNodW5rIGFkamFjZW50IHRvIHRoZSBvbmUgdXNlZCBmb3IgdGhlIG1vc3QgcmVjZW50IHNtYWxsIHJlcXVlc3QuCisgICAgICAgMy4gSWYgb25lIGV4aXN0cywgc3BsaXQgdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBjaHVuayBpbiBhIGJpbiwKKwkgIHNhdmluZyByZW1haW5kZXIgaW4gZHYuCisgICAgICAgNC4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSB0b3AgY2h1bmsuCisgICAgICAgNS4gSWYgYXZhaWxhYmxlLCBnZXQgbWVtb3J5IGZyb20gc3lzdGVtIGFuZCB1c2UgaXQKKyAgICAgT3RoZXJ3aXNlLCBmb3IgYSBsYXJnZSByZXF1ZXN0OgorICAgICAgIDEuIEZpbmQgdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBiaW5uZWQgY2h1bmsgdGhhdCBmaXRzLCBhbmQgdXNlIGl0CisJICBpZiBpdCBpcyBiZXR0ZXIgZml0dGluZyB0aGFuIGR2IGNodW5rLCBzcGxpdHRpbmcgaWYgbmVjZXNzYXJ5LgorICAgICAgIDIuIElmIGJldHRlciBmaXR0aW5nIHRoYW4gYW55IGJpbm5lZCBjaHVuaywgdXNlIHRoZSBkdiBjaHVuay4KKyAgICAgICAzLiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIHRvcCBjaHVuay4KKyAgICAgICA0LiBJZiByZXF1ZXN0IHNpemUgPj0gbW1hcCB0aHJlc2hvbGQsIHRyeSB0byBkaXJlY3RseSBtbWFwIHRoaXMgY2h1bmsuCisgICAgICAgNS4gSWYgYXZhaWxhYmxlLCBnZXQgbWVtb3J5IGZyb20gc3lzdGVtIGFuZCB1c2UgaXQKKworICAgICBUaGUgdWdseSBnb3RvJ3MgaGVyZSBlbnN1cmUgdGhhdCBwb3N0YWN0aW9uIG9jY3VycyBhbG9uZyBhbGwgcGF0aHMuCisgICovCisKKyNpZiBVU0VfTE9DS1MKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7IC8qIGluaXRpYWxpemUgaW4gc3lzX2FsbG9jIGlmIG5vdCB1c2luZyBsb2NrcyAqLworI2VuZGlmCisKKyAgaWYgKCFQUkVBQ1RJT04oZ20pKSB7CisgICAgdm9pZCogbWVtOworICAgIHNpemVfdCBuYjsKKyAgICBpZiAoYnl0ZXMgPD0gTUFYX1NNQUxMX1JFUVVFU1QpIHsKKyAgICAgIGJpbmRleF90IGlkeDsKKyAgICAgIGJpbm1hcF90IHNtYWxsYml0czsKKyAgICAgIG5iID0gKGJ5dGVzIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlkeCA9IHNtYWxsX2luZGV4KG5iKTsKKyAgICAgIHNtYWxsYml0cyA9IGdtLT5zbWFsbG1hcCA+PiBpZHg7CisKKyAgICAgIGlmICgoc21hbGxiaXRzICYgMHgzVSkgIT0gMCkgeyAvKiBSZW1haW5kZXJsZXNzIGZpdCB0byBhIHNtYWxsYmluLiAqLworCW1jaHVua3B0ciBiLCBwOworCWlkeCArPSB+c21hbGxiaXRzICYgMTsgICAgICAgLyogVXNlcyBuZXh0IGJpbiBpZiBpZHggZW1wdHkgKi8KKwliID0gc21hbGxiaW5fYXQoZ20sIGlkeCk7CisJcCA9IGItPmZkOworCWFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKwl1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoZ20sIGIsIHAsIGlkeCk7CisJc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisJbWVtID0gY2h1bmsybWVtKHApOworCWNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKwlnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKG5iID4gZ20tPmR2c2l6ZSkgeworCWlmIChzbWFsbGJpdHMgIT0gMCkgeyAvKiBVc2UgY2h1bmsgaW4gbmV4dCBub25lbXB0eSBzbWFsbGJpbiAqLworCSAgbWNodW5rcHRyIGIsIHAsIHI7CisJICBzaXplX3QgcnNpemU7CisJICBiaW5kZXhfdCBpOworCSAgYmlubWFwX3QgbGVmdGJpdHMgPSAoc21hbGxiaXRzIDw8IGlkeCkgJiBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKTsKKwkgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKwkgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisJICBiID0gc21hbGxiaW5fYXQoZ20sIGkpOworCSAgcCA9IGItPmZkOworCSAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGkpKTsKKwkgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhnbSwgYiwgcCwgaSk7CisJICByc2l6ZSA9IHNtYWxsX2luZGV4MnNpemUoaSkgLSBuYjsKKwkgIC8qIEZpdCBoZXJlIGNhbm5vdCBiZSByZW1haW5kZXJsZXNzIGlmIDRieXRlIHNpemVzICovCisJICBpZiAoU0laRV9UX1NJWkUgIT0gNCAmJiByc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorCSAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7CisJICBlbHNlIHsKKwkgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOworCSAgICByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworCSAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworCSAgICByZXBsYWNlX2R2KGdtLCByLCByc2l6ZSk7CisJICB9CisJICBtZW0gPSBjaHVuazJtZW0ocCk7CisJICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorCisJZWxzZSBpZiAoZ20tPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19zbWFsbChnbSwgbmIpKSAhPSAwKSB7CisJICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkKKyAgICAgIG5iID0gTUFYX1NJWkVfVDsgLyogVG9vIGJpZyB0byBhbGxvY2F0ZS4gRm9yY2UgZmFpbHVyZSAoaW4gc3lzIGFsbG9jKSAqLworICAgIGVsc2UgeworICAgICAgbmIgPSBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZiAoZ20tPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19sYXJnZShnbSwgbmIpKSAhPSAwKSB7CisJY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworCWdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmIgPD0gZ20tPmR2c2l6ZSkgeworICAgICAgc2l6ZV90IHJzaXplID0gZ20tPmR2c2l6ZSAtIG5iOworICAgICAgbWNodW5rcHRyIHAgPSBnbS0+ZHY7CisgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsgLyogc3BsaXQgZHYgKi8KKwltY2h1bmtwdHIgciA9IGdtLT5kdiA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKwlnbS0+ZHZzaXplID0gcnNpemU7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwlzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7CisgICAgICB9CisgICAgICBlbHNlIHsgLyogZXhoYXVzdCBkdiAqLworCXNpemVfdCBkdnMgPSBnbS0+ZHZzaXplOworCWdtLT5kdnNpemUgPSAwOworCWdtLT5kdiA9IDA7CisJc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIGR2cyk7CisgICAgICB9CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgZWxzZSBpZiAobmIgPCBnbS0+dG9wc2l6ZSkgeyAvKiBTcGxpdCB0b3AgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IGdtLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBnbS0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBnbS0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhnbSwgZ20tPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgbWVtID0gc3lzX2FsbG9jKGdtLCBuYik7CisKKyAgcG9zdGFjdGlvbjoKKyAgICBQT1NUQUNUSU9OKGdtKTsKKyAgICByZXR1cm4gbWVtOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGxmcmVlKHZvaWQqIG1lbSkgeworICAvKgorICAgICBDb25zb2xpZGF0ZSBmcmVlZCBjaHVua3Mgd2l0aCBwcmVjZWRpbmcgb3Igc3VjY2VlZGluZyBib3JkZXJpbmcKKyAgICAgZnJlZSBjaHVua3MsIGlmIHRoZXkgZXhpc3QsIGFuZCB0aGVuIHBsYWNlIGluIGEgYmluLiAgSW50ZXJtaXhlZAorICAgICB3aXRoIHNwZWNpYWwgY2FzZXMgZm9yIHRvcCwgZHYsIG1tYXBwZWQgY2h1bmtzLCBhbmQgdXNhZ2UgZXJyb3JzLgorICAqLworCisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhtZW0pOworI2lmIEZPT1RFUlMKKyAgICBtc3RhdGUgZm0gPSBnZXRfbXN0YXRlX2ZvcihwKTsKKyAgICBpZiAoIW9rX21hZ2ljKGZtKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZSAvKiBGT09URVJTICovCisjZGVmaW5lIGZtIGdtCisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIGlmICghUFJFQUNUSU9OKGZtKSkgeworICAgICAgY2hlY2tfaW51c2VfY2h1bmsoZm0sIHApOworICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcCkgJiYgb2tfY2ludXNlKHApKSkgeworCXNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKKwltY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKTsKKwlpZiAoIXBpbnVzZShwKSkgeworCSAgc2l6ZV90IHByZXZzaXplID0gcC0+cHJldl9mb290OworCSAgaWYgKChwcmV2c2l6ZSAmIElTX01NQVBQRURfQklUKSAhPSAwKSB7CisJICAgIHByZXZzaXplICY9IH5JU19NTUFQUEVEX0JJVDsKKwkgICAgcHNpemUgKz0gcHJldnNpemUgKyBNTUFQX0ZPT1RfUEFEOworCSAgICBpZiAoQ0FMTF9NVU5NQVAoKGNoYXIqKXAgLSBwcmV2c2l6ZSwgcHNpemUpID09IDApCisJICAgICAgZm0tPmZvb3RwcmludCAtPSBwc2l6ZTsKKwkgICAgZ290byBwb3N0YWN0aW9uOworCSAgfQorCSAgZWxzZSB7CisJICAgIG1jaHVua3B0ciBwcmV2ID0gY2h1bmtfbWludXNfb2Zmc2V0KHAsIHByZXZzaXplKTsKKwkgICAgcHNpemUgKz0gcHJldnNpemU7CisJICAgIHAgPSBwcmV2OworCSAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwcmV2KSkpIHsgLyogY29uc29saWRhdGUgYmFja3dhcmQgKi8KKwkgICAgICBpZiAocCAhPSBmbS0+ZHYpIHsKKwkJdW5saW5rX2NodW5rKGZtLCBwLCBwcmV2c2l6ZSk7CisJICAgICAgfQorCSAgICAgIGVsc2UgaWYgKChuZXh0LT5oZWFkICYgSU5VU0VfQklUUykgPT0gSU5VU0VfQklUUykgeworCQlmbS0+ZHZzaXplID0gcHNpemU7CisJCXNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKwkJZ290byBwb3N0YWN0aW9uOworCSAgICAgIH0KKwkgICAgfQorCSAgICBlbHNlCisJICAgICAgZ290byBlcnJvcmFjdGlvbjsKKwkgIH0KKwl9CisKKwlpZiAoUlRDSEVDSyhva19uZXh0KHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpIHsKKwkgIGlmICghY2ludXNlKG5leHQpKSB7ICAvKiBjb25zb2xpZGF0ZSBmb3J3YXJkICovCisJICAgIGlmIChuZXh0ID09IGZtLT50b3ApIHsKKwkgICAgICBzaXplX3QgdHNpemUgPSBmbS0+dG9wc2l6ZSArPSBwc2l6ZTsKKwkgICAgICBmbS0+dG9wID0gcDsKKwkgICAgICBwLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOworCSAgICAgIGlmIChwID09IGZtLT5kdikgeworCQlmbS0+ZHYgPSAwOworCQlmbS0+ZHZzaXplID0gMDsKKwkgICAgICB9CisJICAgICAgaWYgKHNob3VsZF90cmltKGZtLCB0c2l6ZSkpCisJCXN5c190cmltKGZtLCAwKTsKKwkgICAgICBnb3RvIHBvc3RhY3Rpb247CisJICAgIH0KKwkgICAgZWxzZSBpZiAobmV4dCA9PSBmbS0+ZHYpIHsKKwkgICAgICBzaXplX3QgZHNpemUgPSBmbS0+ZHZzaXplICs9IHBzaXplOworCSAgICAgIGZtLT5kdiA9IHA7CisJICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIGRzaXplKTsKKwkgICAgICBnb3RvIHBvc3RhY3Rpb247CisJICAgIH0KKwkgICAgZWxzZSB7CisJICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG5leHQpOworCSAgICAgIHBzaXplICs9IG5zaXplOworCSAgICAgIHVubGlua19jaHVuayhmbSwgbmV4dCwgbnNpemUpOworCSAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBwc2l6ZSk7CisJICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisJCWZtLT5kdnNpemUgPSBwc2l6ZTsKKwkJZ290byBwb3N0YWN0aW9uOworCSAgICAgIH0KKwkgICAgfQorCSAgfQorCSAgZWxzZQorCSAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisKKwkgIGlmIChpc19zbWFsbChwc2l6ZSkpIHsKKwkgICAgaW5zZXJ0X3NtYWxsX2NodW5rKGZtLCBwLCBwc2l6ZSk7CisJICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOworCSAgfQorCSAgZWxzZSB7CisJICAgIHRjaHVua3B0ciB0cCA9ICh0Y2h1bmtwdHIpcDsKKwkgICAgaW5zZXJ0X2xhcmdlX2NodW5rKGZtLCB0cCwgcHNpemUpOworCSAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKwkgICAgaWYgKC0tZm0tPnJlbGVhc2VfY2hlY2tzID09IDApCisJICAgICAgcmVsZWFzZV91bnVzZWRfc2VnbWVudHMoZm0pOworCSAgfQorCSAgZ290byBwb3N0YWN0aW9uOworCX0KKyAgICAgIH0KKyAgICBlcnJvcmFjdGlvbjoKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgcG9zdGFjdGlvbjoKKyAgICAgIFBPU1RBQ1RJT04oZm0pOworICAgIH0KKyAgfQorI2lmICFGT09URVJTCisjdW5kZWYgZm0KKyNlbmRpZiAvKiBGT09URVJTICovCit9CisKK3ZvaWQqIGRsY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKSB7CisgIHZvaWQqIG1lbTsKKyAgc2l6ZV90IHJlcSA9IDA7CisgIGlmIChuX2VsZW1lbnRzICE9IDApIHsKKyAgICByZXEgPSBuX2VsZW1lbnRzICogZWxlbV9zaXplOworICAgIGlmICgoKG5fZWxlbWVudHMgfCBlbGVtX3NpemUpICYgfihzaXplX3QpMHhmZmZmKSAmJgorCShyZXEgLyBuX2VsZW1lbnRzICE9IGVsZW1fc2l6ZSkpCisgICAgICByZXEgPSBNQVhfU0laRV9UOyAvKiBmb3JjZSBkb3duc3RyZWFtIGZhaWx1cmUgb24gb3ZlcmZsb3cgKi8KKyAgfQorICBtZW0gPSBkbG1hbGxvYyhyZXEpOworICBpZiAobWVtICE9IDAgJiYgY2FsbG9jX211c3RfY2xlYXIobWVtMmNodW5rKG1lbSkpKQorICAgIG1lbXNldChtZW0sIDAsIHJlcSk7CisgIHJldHVybiBtZW07Cit9CisKK3ZvaWQqIGRscmVhbGxvYyh2b2lkKiBvbGRtZW0sIHNpemVfdCBieXRlcykgeworICBpZiAob2xkbWVtID09IDApCisgICAgcmV0dXJuIGRsbWFsbG9jKGJ5dGVzKTsKKyNpZmRlZiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMKKyAgaWYgKGJ5dGVzID09IDApIHsKKyAgICBkbGZyZWUob2xkbWVtKTsKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmIC8qIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAqLworICBlbHNlIHsKKyNpZiAhIEZPT1RFUlMKKyAgICBtc3RhdGUgbSA9IGdtOworI2Vsc2UgLyogRk9PVEVSUyAqLworICAgIG1zdGF0ZSBtID0gZ2V0X21zdGF0ZV9mb3IobWVtMmNodW5rKG9sZG1lbSkpOworICAgIGlmICghb2tfbWFnaWMobSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtLCBvbGRtZW0pOworICAgICAgcmV0dXJuIDA7CisgICAgfQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICByZXR1cm4gaW50ZXJuYWxfcmVhbGxvYyhtLCBvbGRtZW0sIGJ5dGVzKTsKKyAgfQorfQorCit2b2lkKiBkbG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICByZXR1cm4gaW50ZXJuYWxfbWVtYWxpZ24oZ20sIGFsaWdubWVudCwgYnl0ZXMpOworfQorCit2b2lkKiogZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUsCisJCQkJIHZvaWQqIGNodW5rc1tdKSB7CisgIHNpemVfdCBzeiA9IGVsZW1fc2l6ZTsgLyogc2VydmVzIGFzIDEtZWxlbWVudCBhcnJheSAqLworICByZXR1cm4gaWFsbG9jKGdtLCBuX2VsZW1lbnRzLCAmc3osIDMsIGNodW5rcyk7Cit9CisKK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwKKwkJCQkgICB2b2lkKiBjaHVua3NbXSkgeworICByZXR1cm4gaWFsbG9jKGdtLCBuX2VsZW1lbnRzLCBzaXplcywgMCwgY2h1bmtzKTsKK30KKwordm9pZCogZGx2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc3o7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBwYWdlc3ogPSBtcGFyYW1zLnBhZ2Vfc2l6ZTsKKyAgcmV0dXJuIGRsbWVtYWxpZ24ocGFnZXN6LCBieXRlcyk7Cit9CisKK3ZvaWQqIGRscHZhbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgc2l6ZV90IHBhZ2VzejsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIHBhZ2VzeiA9IG1wYXJhbXMucGFnZV9zaXplOworICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIChieXRlcyArIHBhZ2VzeiAtIFNJWkVfVF9PTkUpICYgfihwYWdlc3ogLSBTSVpFX1RfT05FKSk7Cit9CisKK2ludCBkbG1hbGxvY190cmltKHNpemVfdCBwYWQpIHsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIGludCByZXN1bHQgPSAwOworICBpZiAoIVBSRUFDVElPTihnbSkpIHsKKyAgICByZXN1bHQgPSBzeXNfdHJpbShnbSwgcGFkKTsKKyAgICBQT1NUQUNUSU9OKGdtKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50KHZvaWQpIHsKKyAgcmV0dXJuIGdtLT5mb290cHJpbnQ7Cit9CisKK3NpemVfdCBkbG1hbGxvY19tYXhfZm9vdHByaW50KHZvaWQpIHsKKyAgcmV0dXJuIGdtLT5tYXhfZm9vdHByaW50OworfQorCisjaWYgIU5PX01BTExJTkZPCitzdHJ1Y3QgbWFsbGluZm8gZGxtYWxsaW5mbyh2b2lkKSB7CisgIHJldHVybiBpbnRlcm5hbF9tYWxsaW5mbyhnbSk7Cit9CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKwordm9pZCBkbG1hbGxvY19zdGF0cygpIHsKKyAgaW50ZXJuYWxfbWFsbG9jX3N0YXRzKGdtKTsKK30KKworaW50IGRsbWFsbG9wdChpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpIHsKKyAgcmV0dXJuIGNoYW5nZV9tcGFyYW0ocGFyYW1fbnVtYmVyLCB2YWx1ZSk7Cit9CisKKyNlbmRpZiAvKiAhT05MWV9NU1BBQ0VTICovCisKK3NpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKiBtZW0pIHsKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgICBpZiAoY2ludXNlKHApKQorICAgICAgcmV0dXJuIGNodW5rc2l6ZShwKSAtIG92ZXJoZWFkX2ZvcihwKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdXNlciBtc3BhY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIE1TUEFDRVMKKworc3RhdGljIG1zdGF0ZSBpbml0X3VzZXJfbXN0YXRlKGNoYXIqIHRiYXNlLCBzaXplX3QgdHNpemUpIHsKKyAgc2l6ZV90IG1zaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc3RhdGUpKTsKKyAgbWNodW5rcHRyIG1uOworICBtY2h1bmtwdHIgbXNwID0gYWxpZ25fYXNfY2h1bmsodGJhc2UpOworICBtc3RhdGUgbSA9IChtc3RhdGUpKGNodW5rMm1lbShtc3ApKTsKKyAgbWVtc2V0KG0sIDAsIG1zaXplKTsKKyAgKHZvaWQpSU5JVElBTF9MT0NLKCZtLT5tdXRleCk7CisgIG1zcC0+aGVhZCA9IChtc2l6ZXxQSU5VU0VfQklUfENJTlVTRV9CSVQpOworICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKyAgbS0+c2VnLnNpemUgPSBtLT5mb290cHJpbnQgPSBtLT5tYXhfZm9vdHByaW50ID0gdHNpemU7CisgIG0tPm1hZ2ljID0gbXBhcmFtcy5tYWdpYzsKKyAgbS0+cmVsZWFzZV9jaGVja3MgPSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFOworICBtLT5tZmxhZ3MgPSBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzOworICBtLT5leHRwID0gMDsKKyAgbS0+ZXh0cyA9IDA7CisgIGRpc2FibGVfY29udGlndW91cyhtKTsKKyAgaW5pdF9iaW5zKG0pOworICBtbiA9IG5leHRfY2h1bmsobWVtMmNodW5rKG0pKTsKKyAgaW5pdF90b3AobSwgbW4sIChzaXplX3QpKCh0YmFzZSArIHRzaXplKSAtIChjaGFyKiltbikgLSBUT1BfRk9PVF9TSVpFKTsKKyAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgIHJldHVybiBtOworfQorCittc3BhY2UgY3JlYXRlX21zcGFjZShzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpIHsKKyAgbXN0YXRlIG0gPSAwOworICBzaXplX3QgbXNpemU7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7CisgIGlmIChjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7CisgICAgc2l6ZV90IHJzID0gKChjYXBhY2l0eSA9PSAwKT8gbXBhcmFtcy5ncmFudWxhcml0eSA6CisJCSAoY2FwYWNpdHkgKyBUT1BfRk9PVF9TSVpFICsgbXNpemUpKTsKKyAgICBzaXplX3QgdHNpemUgPSBncmFudWxhcml0eV9hbGlnbihycyk7CisgICAgY2hhciogdGJhc2UgPSAoY2hhciopKENBTExfTU1BUCh0c2l6ZSkpOworICAgIGlmICh0YmFzZSAhPSBDTUZBSUwpIHsKKyAgICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKHRiYXNlLCB0c2l6ZSk7CisgICAgICBtLT5zZWcuc2ZsYWdzID0gSVNfTU1BUFBFRF9CSVQ7CisgICAgICBzZXRfbG9jayhtLCBsb2NrZWQpOworICAgIH0KKyAgfQorICByZXR1cm4gKG1zcGFjZSltOworfQorCittc3BhY2UgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2Uodm9pZCogYmFzZSwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKSB7CisgIG1zdGF0ZSBtID0gMDsKKyAgc2l6ZV90IG1zaXplOworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBpZiAoY2FwYWNpdHkgPiBtc2l6ZSArIFRPUF9GT09UX1NJWkUgJiYKKyAgICAgIGNhcGFjaXR5IDwgKHNpemVfdCkgLShtc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBtcGFyYW1zLnBhZ2Vfc2l6ZSkpIHsKKyAgICBtID0gaW5pdF91c2VyX21zdGF0ZSgoY2hhciopYmFzZSwgY2FwYWNpdHkpOworICAgIG0tPnNlZy5zZmxhZ3MgPSBFWFRFUk5fQklUOworICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CisgIH0KKyAgcmV0dXJuIChtc3BhY2UpbTsKK30KKworaW50IG1zcGFjZV9tbWFwX2xhcmdlX2NodW5rcyhtc3BhY2UgbXNwLCBpbnQgZW5hYmxlKSB7CisgIGludCByZXQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFQUkVBQ1RJT04obXMpKSB7CisgICAgaWYgKHVzZV9tbWFwKG1zKSkKKyAgICAgIHJldCA9IDE7CisgICAgaWYgKGVuYWJsZSkKKyAgICAgIGVuYWJsZV9tbWFwKG1zKTsKKyAgICBlbHNlCisgICAgICBkaXNhYmxlX21tYXAobXMpOworICAgIFBPU1RBQ1RJT04obXMpOworICB9CisgIHJldHVybiByZXQ7Cit9CisKK3NpemVfdCBkZXN0cm95X21zcGFjZShtc3BhY2UgbXNwKSB7CisgIHNpemVfdCBmcmVlZCA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgbXNlZ21lbnRwdHIgc3AgPSAmbXMtPnNlZzsKKyAgICB3aGlsZSAoc3AgIT0gMCkgeworICAgICAgY2hhciogYmFzZSA9IHNwLT5iYXNlOworICAgICAgc2l6ZV90IHNpemUgPSBzcC0+c2l6ZTsKKyAgICAgIGZsYWdfdCBmbGFnID0gc3AtPnNmbGFnczsKKyAgICAgIHNwID0gc3AtPm5leHQ7CisgICAgICBpZiAoKGZsYWcgJiBJU19NTUFQUEVEX0JJVCkgJiYgIShmbGFnICYgRVhURVJOX0JJVCkgJiYKKwkgIENBTExfTVVOTUFQKGJhc2UsIHNpemUpID09IDApCisJZnJlZWQgKz0gc2l6ZTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gZnJlZWQ7Cit9CisKKy8qCisgIG1zcGFjZSB2ZXJzaW9ucyBvZiByb3V0aW5lcyBhcmUgbmVhci1jbG9uZXMgb2YgdGhlIGdsb2JhbAorICB2ZXJzaW9ucy4gVGhpcyBpcyBub3Qgc28gbmljZSBidXQgYmV0dGVyIHRoYW4gdGhlIGFsdGVybmF0aXZlcy4KKyovCisKKwordm9pZCogbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoIVBSRUFDVElPTihtcykpIHsKKyAgICB2b2lkKiBtZW07CisgICAgc2l6ZV90IG5iOworICAgIGlmIChieXRlcyA8PSBNQVhfU01BTExfUkVRVUVTVCkgeworICAgICAgYmluZGV4X3QgaWR4OworICAgICAgYmlubWFwX3Qgc21hbGxiaXRzOworICAgICAgbmIgPSAoYnl0ZXMgPCBNSU5fUkVRVUVTVCk/IE1JTl9DSFVOS19TSVpFIDogcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWR4ID0gc21hbGxfaW5kZXgobmIpOworICAgICAgc21hbGxiaXRzID0gbXMtPnNtYWxsbWFwID4+IGlkeDsKKworICAgICAgaWYgKChzbWFsbGJpdHMgJiAweDNVKSAhPSAwKSB7IC8qIFJlbWFpbmRlcmxlc3MgZml0IHRvIGEgc21hbGxiaW4uICovCisJbWNodW5rcHRyIGIsIHA7CisJaWR4ICs9IH5zbWFsbGJpdHMgJiAxOyAgICAgICAvKiBVc2VzIG5leHQgYmluIGlmIGlkeCBlbXB0eSAqLworCWIgPSBzbWFsbGJpbl9hdChtcywgaWR4KTsKKwlwID0gYi0+ZmQ7CisJYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGlkeCkpOworCXVubGlua19maXJzdF9zbWFsbF9jaHVuayhtcywgYiwgcCwgaWR4KTsKKwlzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKwltZW0gPSBjaHVuazJtZW0ocCk7CisJY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworCWdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKworICAgICAgZWxzZSBpZiAobmIgPiBtcy0+ZHZzaXplKSB7CisJaWYgKHNtYWxsYml0cyAhPSAwKSB7IC8qIFVzZSBjaHVuayBpbiBuZXh0IG5vbmVtcHR5IHNtYWxsYmluICovCisJICBtY2h1bmtwdHIgYiwgcCwgcjsKKwkgIHNpemVfdCByc2l6ZTsKKwkgIGJpbmRleF90IGk7CisJICBiaW5tYXBfdCBsZWZ0Yml0cyA9IChzbWFsbGJpdHMgPDwgaWR4KSAmIGxlZnRfYml0cyhpZHgyYml0KGlkeCkpOworCSAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOworCSAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsKKwkgIGIgPSBzbWFsbGJpbl9hdChtcywgaSk7CisJICBwID0gYi0+ZmQ7CisJICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaSkpOworCSAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKG1zLCBiLCBwLCBpKTsKKwkgIHJzaXplID0gc21hbGxfaW5kZXgyc2l6ZShpKSAtIG5iOworCSAgLyogRml0IGhlcmUgY2Fubm90IGJlIHJlbWFpbmRlcmxlc3MgaWYgNGJ5dGUgc2l6ZXMgKi8KKwkgIGlmIChTSVpFX1RfU0laRSAhPSA0ICYmIHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisJICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG1zLCBwLCBzbWFsbF9pbmRleDJzaXplKGkpKTsKKwkgIGVsc2UgeworCSAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7CisJICAgIHIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisJICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisJICAgIHJlcGxhY2VfZHYobXMsIHIsIHJzaXplKTsKKwkgIH0KKwkgIG1lbSA9IGNodW5rMm1lbShwKTsKKwkgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKwkgIGdvdG8gcG9zdGFjdGlvbjsKKwl9CisKKwllbHNlIGlmIChtcy0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX3NtYWxsKG1zLCBuYikpICE9IDApIHsKKwkgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKwkgIGdvdG8gcG9zdGFjdGlvbjsKKwl9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKQorICAgICAgbmIgPSBNQVhfU0laRV9UOyAvKiBUb28gYmlnIHRvIGFsbG9jYXRlLiBGb3JjZSBmYWlsdXJlIChpbiBzeXMgYWxsb2MpICovCisgICAgZWxzZSB7CisgICAgICBuYiA9IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlmIChtcy0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX2xhcmdlKG1zLCBuYikpICE9IDApIHsKKwljaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisJZ290byBwb3N0YWN0aW9uOworICAgICAgfQorICAgIH0KKworICAgIGlmIChuYiA8PSBtcy0+ZHZzaXplKSB7CisgICAgICBzaXplX3QgcnNpemUgPSBtcy0+ZHZzaXplIC0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IG1zLT5kdjsKKyAgICAgIGlmIChyc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkgeyAvKiBzcGxpdCBkdiAqLworCW1jaHVua3B0ciByID0gbXMtPmR2ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworCW1zLT5kdnNpemUgPSByc2l6ZTsKKwlzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworCXNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeyAvKiBleGhhdXN0IGR2ICovCisJc2l6ZV90IGR2cyA9IG1zLT5kdnNpemU7CisJbXMtPmR2c2l6ZSA9IDA7CisJbXMtPmR2ID0gMDsKKwlzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgZHZzKTsKKyAgICAgIH0KKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBlbHNlIGlmIChuYiA8IG1zLT50b3BzaXplKSB7IC8qIFNwbGl0IHRvcCAqLworICAgICAgc2l6ZV90IHJzaXplID0gbXMtPnRvcHNpemUgLT0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IG1zLT50b3A7CisgICAgICBtY2h1bmtwdHIgciA9IG1zLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICByLT5oZWFkID0gcnNpemUgfCBQSU5VU0VfQklUOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOworICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgY2hlY2tfdG9wX2NodW5rKG1zLCBtcy0+dG9wKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBtZW0gPSBzeXNfYWxsb2MobXMsIG5iKTsKKworICBwb3N0YWN0aW9uOgorICAgIFBPU1RBQ1RJT04obXMpOworICAgIHJldHVybiBtZW07CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZCBtc3BhY2VfZnJlZShtc3BhY2UgbXNwLCB2b2lkKiBtZW0pIHsKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG1lbSk7CisjaWYgRk9PVEVSUworICAgIG1zdGF0ZSBmbSA9IGdldF9tc3RhdGVfZm9yKHApOworI2Vsc2UgLyogRk9PVEVSUyAqLworICAgIG1zdGF0ZSBmbSA9IChtc3RhdGUpbXNwOworI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICBpZiAoIW9rX21hZ2ljKGZtKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFQUkVBQ1RJT04oZm0pKSB7CisgICAgICBjaGVja19pbnVzZV9jaHVuayhmbSwgcCk7CisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwKSAmJiBva19jaW51c2UocCkpKSB7CisJc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworCW1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpOworCWlmICghcGludXNlKHApKSB7CisJICBzaXplX3QgcHJldnNpemUgPSBwLT5wcmV2X2Zvb3Q7CisJICBpZiAoKHByZXZzaXplICYgSVNfTU1BUFBFRF9CSVQpICE9IDApIHsKKwkgICAgcHJldnNpemUgJj0gfklTX01NQVBQRURfQklUOworCSAgICBwc2l6ZSArPSBwcmV2c2l6ZSArIE1NQVBfRk9PVF9QQUQ7CisJICAgIGlmIChDQUxMX01VTk1BUCgoY2hhciopcCAtIHByZXZzaXplLCBwc2l6ZSkgPT0gMCkKKwkgICAgICBmbS0+Zm9vdHByaW50IC09IHBzaXplOworCSAgICBnb3RvIHBvc3RhY3Rpb247CisJICB9CisJICBlbHNlIHsKKwkgICAgbWNodW5rcHRyIHByZXYgPSBjaHVua19taW51c19vZmZzZXQocCwgcHJldnNpemUpOworCSAgICBwc2l6ZSArPSBwcmV2c2l6ZTsKKwkgICAgcCA9IHByZXY7CisJICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHByZXYpKSkgeyAvKiBjb25zb2xpZGF0ZSBiYWNrd2FyZCAqLworCSAgICAgIGlmIChwICE9IGZtLT5kdikgeworCQl1bmxpbmtfY2h1bmsoZm0sIHAsIHByZXZzaXplKTsKKwkgICAgICB9CisJICAgICAgZWxzZSBpZiAoKG5leHQtPmhlYWQgJiBJTlVTRV9CSVRTKSA9PSBJTlVTRV9CSVRTKSB7CisJCWZtLT5kdnNpemUgPSBwc2l6ZTsKKwkJc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworCQlnb3RvIHBvc3RhY3Rpb247CisJICAgICAgfQorCSAgICB9CisJICAgIGVsc2UKKwkgICAgICBnb3RvIGVycm9yYWN0aW9uOworCSAgfQorCX0KKworCWlmIChSVENIRUNLKG9rX25leHQocCwgbmV4dCkgJiYgb2tfcGludXNlKG5leHQpKSkgeworCSAgaWYgKCFjaW51c2UobmV4dCkpIHsgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQgKi8KKwkgICAgaWYgKG5leHQgPT0gZm0tPnRvcCkgeworCSAgICAgIHNpemVfdCB0c2l6ZSA9IGZtLT50b3BzaXplICs9IHBzaXplOworCSAgICAgIGZtLT50b3AgPSBwOworCSAgICAgIHAtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7CisJICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisJCWZtLT5kdiA9IDA7CisJCWZtLT5kdnNpemUgPSAwOworCSAgICAgIH0KKwkgICAgICBpZiAoc2hvdWxkX3RyaW0oZm0sIHRzaXplKSkKKwkJc3lzX3RyaW0oZm0sIDApOworCSAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKwkgICAgfQorCSAgICBlbHNlIGlmIChuZXh0ID09IGZtLT5kdikgeworCSAgICAgIHNpemVfdCBkc2l6ZSA9IGZtLT5kdnNpemUgKz0gcHNpemU7CisJICAgICAgZm0tPmR2ID0gcDsKKwkgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgZHNpemUpOworCSAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUobmV4dCk7CisJICAgICAgcHNpemUgKz0gbnNpemU7CisJICAgICAgdW5saW5rX2NodW5rKGZtLCBuZXh0LCBuc2l6ZSk7CisJICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHBzaXplKTsKKwkgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKwkJZm0tPmR2c2l6ZSA9IHBzaXplOworCQlnb3RvIHBvc3RhY3Rpb247CisJICAgICAgfQorCSAgICB9CisJICB9CisJICBlbHNlCisJICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKworCSAgaWYgKGlzX3NtYWxsKHBzaXplKSkgeworCSAgICBpbnNlcnRfc21hbGxfY2h1bmsoZm0sIHAsIHBzaXplKTsKKwkgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisJICB9CisJICBlbHNlIHsKKwkgICAgdGNodW5rcHRyIHRwID0gKHRjaHVua3B0cilwOworCSAgICBpbnNlcnRfbGFyZ2VfY2h1bmsoZm0sIHRwLCBwc2l6ZSk7CisJICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOworCSAgICBpZiAoLS1mbS0+cmVsZWFzZV9jaGVja3MgPT0gMCkKKwkgICAgICByZWxlYXNlX3VudXNlZF9zZWdtZW50cyhmbSk7CisJICB9CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorICAgICAgfQorICAgIGVycm9yYWN0aW9uOgorICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKyAgICBwb3N0YWN0aW9uOgorICAgICAgUE9TVEFDVElPTihmbSk7CisgICAgfQorICB9Cit9CisKK3ZvaWQqIG1zcGFjZV9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKKyAgdm9pZCogbWVtOworICBzaXplX3QgcmVxID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAobl9lbGVtZW50cyAhPSAwKSB7CisgICAgcmVxID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsKKyAgICBpZiAoKChuX2VsZW1lbnRzIHwgZWxlbV9zaXplKSAmIH4oc2l6ZV90KTB4ZmZmZikgJiYKKwkocmVxIC8gbl9lbGVtZW50cyAhPSBlbGVtX3NpemUpKQorICAgICAgcmVxID0gTUFYX1NJWkVfVDsgLyogZm9yY2UgZG93bnN0cmVhbSBmYWlsdXJlIG9uIG92ZXJmbG93ICovCisgIH0KKyAgbWVtID0gaW50ZXJuYWxfbWFsbG9jKG1zLCByZXEpOworICBpZiAobWVtICE9IDAgJiYgY2FsbG9jX211c3RfY2xlYXIobWVtMmNodW5rKG1lbSkpKQorICAgIG1lbXNldChtZW0sIDAsIHJlcSk7CisgIHJldHVybiBtZW07Cit9CisKK3ZvaWQqIG1zcGFjZV9yZWFsbG9jKG1zcGFjZSBtc3AsIHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChvbGRtZW0gPT0gMCkKKyAgICByZXR1cm4gbXNwYWNlX21hbGxvYyhtc3AsIGJ5dGVzKTsKKyNpZmRlZiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMKKyAgaWYgKGJ5dGVzID09IDApIHsKKyAgICBtc3BhY2VfZnJlZShtc3AsIG9sZG1lbSk7CisgICAgcmV0dXJuIDA7CisgIH0KKyNlbmRpZiAvKiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgKi8KKyAgZWxzZSB7CisjaWYgRk9PVEVSUworICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhvbGRtZW0pOworICAgIG1zdGF0ZSBtcyA9IGdldF9tc3RhdGVfZm9yKHApOworI2Vsc2UgLyogRk9PVEVSUyAqLworICAgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gaW50ZXJuYWxfcmVhbGxvYyhtcywgb2xkbWVtLCBieXRlcyk7CisgIH0KK30KKwordm9pZCogbXNwYWNlX21lbWFsaWduKG1zcGFjZSBtc3AsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBpbnRlcm5hbF9tZW1hbGlnbihtcywgYWxpZ25tZW50LCBieXRlcyk7Cit9CisKK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorCQkJCSBzaXplX3QgZWxlbV9zaXplLCB2b2lkKiBjaHVua3NbXSkgeworICBzaXplX3Qgc3ogPSBlbGVtX3NpemU7IC8qIHNlcnZlcyBhcyAxLWVsZW1lbnQgYXJyYXkgKi8KKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gaWFsbG9jKG1zLCBuX2VsZW1lbnRzLCAmc3osIDMsIGNodW5rcyk7Cit9CisKK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisJCQkJICAgc2l6ZV90IHNpemVzW10sIHZvaWQqIGNodW5rc1tdKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIGlhbGxvYyhtcywgbl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7Cit9CisKK2ludCBtc3BhY2VfdHJpbShtc3BhY2UgbXNwLCBzaXplX3QgcGFkKSB7CisgIGludCByZXN1bHQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIGlmICghUFJFQUNUSU9OKG1zKSkgeworICAgICAgcmVzdWx0ID0gc3lzX3RyaW0obXMsIHBhZCk7CisgICAgICBQT1NUQUNUSU9OKG1zKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIG1zcGFjZV9tYWxsb2Nfc3RhdHMobXNwYWNlIG1zcCkgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIGludGVybmFsX21hbGxvY19zdGF0cyhtcyk7CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorfQorCitzaXplX3QgbXNwYWNlX2Zvb3RwcmludChtc3BhY2UgbXNwKSB7CisgIHNpemVfdCByZXN1bHQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIHJlc3VsdCA9IG1zLT5mb290cHJpbnQ7CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisKK3NpemVfdCBtc3BhY2VfbWF4X2Zvb3RwcmludChtc3BhY2UgbXNwKSB7CisgIHNpemVfdCByZXN1bHQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIHJlc3VsdCA9IG1zLT5tYXhfZm9vdHByaW50OworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisjaWYgIU5PX01BTExJTkZPCitzdHJ1Y3QgbWFsbGluZm8gbXNwYWNlX21hbGxpbmZvKG1zcGFjZSBtc3ApIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gaW50ZXJuYWxfbWFsbGluZm8obXMpOworfQorI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKK3NpemVfdCBtc3BhY2VfdXNhYmxlX3NpemUodm9pZCogbWVtKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7CisgICAgaWYgKGNpbnVzZShwKSkKKyAgICAgIHJldHVybiBjaHVua3NpemUocCkgLSBvdmVyaGVhZF9mb3IocCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBtc3BhY2VfbWFsbG9wdChpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpIHsKKyAgcmV0dXJuIGNoYW5nZV9tcGFyYW0ocGFyYW1fbnVtYmVyLCB2YWx1ZSk7Cit9CisKKyNlbmRpZiAvKiBNU1BBQ0VTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEFsdGVybmF0aXZlIE1PUkVDT1JFIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIEd1aWRlbGluZXMgZm9yIGNyZWF0aW5nIGEgY3VzdG9tIHZlcnNpb24gb2YgTU9SRUNPUkU6CisKKyAgKiBGb3IgYmVzdCBwZXJmb3JtYW5jZSwgTU9SRUNPUkUgc2hvdWxkIGFsbG9jYXRlIGluIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4KKyAgKiBNT1JFQ09SRSBtYXkgYWxsb2NhdGUgbW9yZSBtZW1vcnkgdGhhbiByZXF1ZXN0ZWQuIChPciBldmVuIGxlc3MsCisgICAgICBidXQgdGhpcyB3aWxsIHVzdWFsbHkgcmVzdWx0IGluIGEgbWFsbG9jIGZhaWx1cmUuKQorICAqIE1PUkVDT1JFIG11c3Qgbm90IGFsbG9jYXRlIG1lbW9yeSB3aGVuIGdpdmVuIGFyZ3VtZW50IHplcm8sIGJ1dAorICAgICAgaW5zdGVhZCByZXR1cm4gb25lIHBhc3QgdGhlIGVuZCBhZGRyZXNzIG9mIG1lbW9yeSBmcm9tIHByZXZpb3VzCisgICAgICBub256ZXJvIGNhbGwuCisgICogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFIHdpdGggcG9zaXRpdmUKKyAgICAgIGFyZ3VtZW50cyBzaG91bGQgcmV0dXJuIGluY3JlYXNpbmcgYWRkcmVzc2VzLCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgIHNwYWNlIGhhcyBiZWVuIGNvbnRpZ3VvdXNseSBleHRlbmRlZC4KKyAgKiBFdmVuIHRob3VnaCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRSBuZWVkIG5vdCByZXR1cm4gY29udGlndW91cworICAgICAgYWRkcmVzc2VzLCBpdCBtdXN0IGJlIE9LIGZvciBtYWxsb2MnZWQgY2h1bmtzIHRvIHNwYW4gbXVsdGlwbGUKKyAgICAgIHJlZ2lvbnMgaW4gdGhvc2UgY2FzZXMgd2hlcmUgdGhleSBkbyBoYXBwZW4gdG8gYmUgY29udGlndW91cy4KKyAgKiBNT1JFQ09SRSBuZWVkIG5vdCBoYW5kbGUgbmVnYXRpdmUgYXJndW1lbnRzIC0tIGl0IG1heSBpbnN0ZWFkCisgICAgICBqdXN0IHJldHVybiBNRkFJTCB3aGVuIGdpdmVuIG5lZ2F0aXZlIGFyZ3VtZW50cy4KKyAgICAgIE5lZ2F0aXZlIGFyZ3VtZW50cyBhcmUgYWx3YXlzIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4gTU9SRUNPUkUKKyAgICAgIG11c3Qgbm90IG1pc2ludGVycHJldCBuZWdhdGl2ZSBhcmdzIGFzIGxhcmdlIHBvc2l0aXZlIHVuc2lnbmVkCisgICAgICBhcmdzLiBZb3UgY2FuIHN1cHByZXNzIGFsbCBzdWNoIGNhbGxzIGZyb20gZXZlbiBvY2N1cnJpbmcgYnkgZGVmaW5pbmcKKyAgICAgIE1PUkVDT1JFX0NBTk5PVF9UUklNLAorCisgIEFzIGFuIGV4YW1wbGUgYWx0ZXJuYXRpdmUgTU9SRUNPUkUsIGhlcmUgaXMgYSBjdXN0b20gYWxsb2NhdG9yCisgIGtpbmRseSBjb250cmlidXRlZCBmb3IgcHJlLU9TWCBtYWNPUy4gIEl0IHVzZXMgdmlydHVhbGx5IGJ1dCBub3QKKyAgbmVjZXNzYXJpbHkgcGh5c2ljYWxseSBjb250aWd1b3VzIG5vbi1wYWdlZCBtZW1vcnkgKGxvY2tlZCBpbiwKKyAgcHJlc2VudCBhbmQgd29uJ3QgZ2V0IHN3YXBwZWQgb3V0KS4gIFlvdSBjYW4gdXNlIGl0IGJ5IHVuY29tbWVudGluZworICB0aGlzIHNlY3Rpb24sIGFkZGluZyBzb21lICNpbmNsdWRlcywgYW5kIHNldHRpbmcgdXAgdGhlIGFwcHJvcHJpYXRlCisgIGRlZmluZXMgYWJvdmU6CisKKyAgICAgICNkZWZpbmUgTU9SRUNPUkUgb3NNb3JlQ29yZQorCisgIFRoZXJlIGlzIGFsc28gYSBzaHV0ZG93biByb3V0aW5lIHRoYXQgc2hvdWxkIHNvbWVob3cgYmUgY2FsbGVkIGZvcgorICBjbGVhbnVwIHVwb24gcHJvZ3JhbSBleGl0LgorCisgICNkZWZpbmUgTUFYX1BPT0xfRU5UUklFUyAxMDAKKyAgI2RlZmluZSBNSU5JTVVNX01PUkVDT1JFX1NJWkUgICg2NCAqIDEwMjRVKQorICBzdGF0aWMgaW50IG5leHRfb3NfcG9vbDsKKyAgdm9pZCAqb3VyX29zX3Bvb2xzW01BWF9QT09MX0VOVFJJRVNdOworCisgIHZvaWQgKm9zTW9yZUNvcmUoaW50IHNpemUpCisgIHsKKyAgICB2b2lkICpwdHIgPSAwOworICAgIHN0YXRpYyB2b2lkICpzYnJrX3RvcCA9IDA7CisKKyAgICBpZiAoc2l6ZSA+IDApCisgICAgeworICAgICAgaWYgKHNpemUgPCBNSU5JTVVNX01PUkVDT1JFX1NJWkUpCisJIHNpemUgPSBNSU5JTVVNX01PUkVDT1JFX1NJWkU7CisgICAgICBpZiAoQ3VycmVudEV4ZWN1dGlvbkxldmVsKCkgPT0ga1Rhc2tMZXZlbCkKKwkgcHRyID0gUG9vbEFsbG9jYXRlUmVzaWRlbnQoc2l6ZSArIFJNX1BBR0VfU0laRSwgMCk7CisgICAgICBpZiAocHRyID09IDApCisgICAgICB7CisJcmV0dXJuICh2b2lkICopIE1GQUlMOworICAgICAgfQorICAgICAgLy8gc2F2ZSBwdHJzIHNvIHRoZXkgY2FuIGJlIGZyZWVkIGR1cmluZyBjbGVhbnVwCisgICAgICBvdXJfb3NfcG9vbHNbbmV4dF9vc19wb29sXSA9IHB0cjsKKyAgICAgIG5leHRfb3NfcG9vbCsrOworICAgICAgcHRyID0gKHZvaWQgKikgKCgoKHNpemVfdCkgcHRyKSArIFJNX1BBR0VfTUFTSykgJiB+Uk1fUEFHRV9NQVNLKTsKKyAgICAgIHNicmtfdG9wID0gKGNoYXIgKikgcHRyICsgc2l6ZTsKKyAgICAgIHJldHVybiBwdHI7CisgICAgfQorICAgIGVsc2UgaWYgKHNpemUgPCAwKQorICAgIHsKKyAgICAgIC8vIHdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHNocmluayBiZWhhdmlvcgorICAgICAgcmV0dXJuICh2b2lkICopIE1GQUlMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIHNicmtfdG9wOworICAgIH0KKyAgfQorCisgIC8vIGNsZWFudXAgYW55IGFsbG9jYXRlZCBtZW1vcnkgcG9vbHMKKyAgLy8gY2FsbGVkIGFzIGxhc3QgdGhpbmcgYmVmb3JlIHNodXR0aW5nIGRvd24gZHJpdmVyCisKKyAgdm9pZCBvc0NsZWFudXBNZW0odm9pZCkKKyAgeworICAgIHZvaWQgKipwdHI7CisKKyAgICBmb3IgKHB0ciA9IG91cl9vc19wb29sczsgcHRyIDwgJm91cl9vc19wb29sc1tNQVhfUE9PTF9FTlRSSUVTXTsgcHRyKyspCisgICAgICBpZiAoKnB0cikKKyAgICAgIHsKKwkgUG9vbERlYWxsb2NhdGUoKnB0cik7CisJICpwdHIgPSAwOworICAgICAgfQorICB9CisKKyovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hpc3Rvcnk6CisgICAgVjIuOC40IChub3QgeWV0IHJlbGVhc2VkKQorICAgICAgKiBBZGQgbXNwYWNlX21tYXBfbGFyZ2VfY2h1bmtzOyB0aGFua3MgdG8gSmVhbiBCcm91d2VycworICAgICAgKiBGaXggaW5zdWZmaWNpZW50IHN5c19hbGxvYyBwYWRkaW5nIHdoZW4gdXNpbmcgMTZieXRlIGFsaWdubWVudAorICAgICAgKiBGaXggYmFkIGVycm9yIGNoZWNrIGluIG1zcGFjZV9mb290cHJpbnQKKyAgICAgICogQWRhcHRhdGlvbnMgZm9yIHB0bWFsbG9jLCBjb3VydGVzeSBvZiBXb2xmcmFtIEdsb2dlci4KKyAgICAgICogUmVlbnRyYW50IHNwaW4gbG9ja3MsIGNvdXJ0ZXN5IG9mIEVhcmwgQ2hldyBhbmQgb3RoZXJzCisgICAgICAqIFdpbjMyIGltcHJvdmVtZW50cywgY291cnRlc3kgb2YgTmlhbGwgRG91Z2xhcyBhbmQgRWFybCBDaGV3CisgICAgICAqIEFkZCBOT19TRUdNRU5UX1RSQVZFUlNBTCBhbmQgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSBvcHRpb25zCisgICAgICAqIEV4dGVuc2lvbiBob29rIGluIG1hbGxvY19zdGF0ZQorICAgICAgKiBWYXJpb3VzIHNtYWxsIGFkanVzdG1lbnRzIHRvIHJlZHVjZSB3YXJuaW5ncyBvbiBzb21lIGNvbXBpbGVycworICAgICAgKiBWYXJpb3VzIGNvbmZpZ3VyYXRpb24gZXh0ZW5zaW9ucy9jaGFuZ2VzIGZvciBtb3JlIHBsYXRmb3Jtcy4gVGhhbmtzCisJIHRvIGFsbCB3aG8gY29udHJpYnV0ZWQgdGhlc2UuCisKKyAgICBWMi44LjMgVGh1IFNlcCAyMiAxMToxNjozMiAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWRkIG1heF9mb290cHJpbnQgZnVuY3Rpb25zCisgICAgICAqIEVuc3VyZSBhbGwgYXBwcm9wcmlhdGUgbGl0ZXJhbHMgYXJlIHNpemVfdAorICAgICAgKiBGaXggY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcHJvYmxlbSBmb3Igc29tZSAjZGVmaW5lIHNldHRpbmdzCisgICAgICAqIEF2b2lkIGNvbmNhdGVuYXRpbmcgc2VnbWVudHMgd2l0aCB0aGUgb25lIHByb3ZpZGVkCisJaW4gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UKKyAgICAgICogUmVuYW1lIHNvbWUgdmFyaWFibGVzIHRvIGF2b2lkIGNvbXBpbGVyIHNoYWRvd2luZyB3YXJuaW5ncworICAgICAgKiBVc2UgZXhwbGljaXQgbG9jayBpbml0aWFsaXphdGlvbi4KKyAgICAgICogQmV0dGVyIGhhbmRsaW5nIG9mIHNicmsgaW50ZXJmZXJlbmNlLgorICAgICAgKiBTaW1wbGlmeSBhbmQgZml4IHNlZ21lbnQgaW5zZXJ0aW9uLCB0cmltbWluZyBhbmQgbXNwYWNlX2Rlc3Ryb3kKKyAgICAgICogUmVpbnN0YXRlIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyBvcHRpb24gZnJvbSAyLjcueAorICAgICAgKiBUaGFua3MgZXNwZWNpYWxseSB0byBEZW5uaXMgRmxhbmFnYW4gZm9yIGhlbHAgb24gdGhlc2UuCisKKyAgICBWMi44LjIgU3VuIEp1biAxMiAxNjowMToxMCAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4IG1lbWFsaWduIGJyYWNlIGVycm9yLgorCisgICAgVjIuOC4xIFdlZCBKdW4gIDggMTY6MTE6NDYgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeCBpbXByb3BlciAjZW5kaWYgbmVzdGluZyBpbiBDKysKKyAgICAgICogQWRkIGV4cGxpY2l0IGNhc3RzIG5lZWRlZCBmb3IgQysrCisKKyAgICBWMi44LjAgTW9uIE1heSAzMCAxNDowOTowMiAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogVXNlIHRyZWVzIGZvciBsYXJnZSBiaW5zCisgICAgICAqIFN1cHBvcnQgbXNwYWNlcworICAgICAgKiBVc2Ugc2VnbWVudHMgdG8gdW5pZnkgc2Jyay1iYXNlZCBhbmQgbW1hcC1iYXNlZCBzeXN0ZW0gYWxsb2NhdGlvbiwKKwlyZW1vdmluZyBuZWVkIGZvciBlbXVsYXRpb24gb24gbW9zdCBwbGF0Zm9ybXMgd2l0aG91dCBzYnJrLgorICAgICAgKiBEZWZhdWx0IHNhZmV0eSBjaGVja3MKKyAgICAgICogT3B0aW9uYWwgZm9vdGVyIGNoZWNrcy4gVGhhbmtzIHRvIFdpbGxpYW0gUm9iZXJ0c29uIGZvciB0aGUgaWRlYS4KKyAgICAgICogSW50ZXJuYWwgY29kZSByZWZhY3RvcmluZworICAgICAgKiBJbmNvcnBvcmF0ZSBzdWdnZXN0aW9ucyBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgY2hhbmdlcy4KKwlUaGFua3MgdG8gRGVubmlzIEZsYW5hZ2FuLCBDb2xpbiBQbHVtYiwgTmlhbGwgRG91Z2xhcywKKwlBYXJvbiBCYWNobWFubiwgIEVtZXJ5IEJlcmdlciwgYW5kIG90aGVycy4KKyAgICAgICogU3BlZWQgdXAgbm9uLWZhc3RiaW4gcHJvY2Vzc2luZyBlbm91Z2ggdG8gcmVtb3ZlIGZhc3RiaW5zLgorICAgICAgKiBSZW1vdmUgdXNlbGVzcyBjZnJlZSgpIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIGFwcHMuCisgICAgICAqIFJlbW92ZSBpbnRlcm5hbCBtZW1jcHksIG1lbXNldC4gQ29tcGlsZXJzIGhhbmRsZSBidWlsdGlucyBiZXR0ZXIuCisgICAgICAqIFJlbW92ZSBzb21lIG9wdGlvbnMgdGhhdCBubyBvbmUgZXZlciB1c2VkIGFuZCByZW5hbWUgb3RoZXJzLgorCisgICAgVjIuNy4yIFNhdCBBdWcgMTcgMDk6MDc6MzAgMjAwMiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeCBtYWxsb2Nfc3RhdGUgYml0bWFwIGFycmF5IG1pc2RlY2xhcmF0aW9uCisKKyAgICBWMi43LjEgVGh1IEp1bCAyNSAxMDo1ODowMyAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWxsb3cgdHVuaW5nIG9mIEZJUlNUX1NPUlRFRF9CSU5fU0laRQorICAgICAgKiBVc2UgUFRSX1VJTlQgYXMgdHlwZSBmb3IgYWxsIHB0ci0+aW50IGNhc3RzLiBUaGFua3MgdG8gSm9obiBCZWxtb250ZS4KKyAgICAgICogQmV0dGVyIGRldGVjdGlvbiBhbmQgc3VwcG9ydCBmb3Igbm9uLWNvbnRpZ3VvdXNuZXNzIG9mIE1PUkVDT1JFLgorCVRoYW5rcyB0byBBbmRyZWFzIE11ZWxsZXIsIENvbmFsIFdhbHNoLCBhbmQgV29sZnJhbSBHbG9nZXIKKyAgICAgICogQnlwYXNzIG1vc3Qgb2YgbWFsbG9jIGlmIG5vIGZyZWVzLiBUaGFua3MgVG8gRW1lcnkgQmVyZ2VyLgorICAgICAgKiBGaXggZnJlZWluZyBvZiBvbGQgdG9wIG5vbi1jb250aWd1b3VzIGNodW5rIGltIHN5c21hbGxvYy4KKyAgICAgICogUmFpc2VkIGRlZmF1bHQgdHJpbSBhbmQgbWFwIHRocmVzaG9sZHMgdG8gMjU2Sy4KKyAgICAgICogRml4IG1tYXAtcmVsYXRlZCAjZGVmaW5lcy4gVGhhbmtzIHRvIEx1Ym9zIEx1bmFrLgorICAgICAgKiBGaXggY29weSBtYWNyb3M7IGFkZGVkIExBQ0tTX0ZDTlRMX0guIFRoYW5rcyB0byBOZWFsIFdhbGZpZWxkLgorICAgICAgKiBCcmFuY2gtZnJlZSBiaW4gY2FsY3VsYXRpb24KKyAgICAgICogRGVmYXVsdCB0cmltIGFuZCBtbWFwIHRocmVzaG9sZHMgbm93IDI1NksuCisKKyAgICBWMi43LjAgU3VuIE1hciAxMSAxNDoxNDowNiAyMDAxICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogSW50cm9kdWNlIGluZGVwZW5kZW50X2NvbWFsbG9jIGFuZCBpbmRlcGVuZGVudF9jYWxsb2MuCisJVGhhbmtzIHRvIE1pY2hhZWwgUGFjaG9zIGZvciBtb3RpdmF0aW9uIGFuZCBoZWxwLgorICAgICAgKiBNYWtlIG9wdGlvbmFsIC5oIGZpbGUgYXZhaWxhYmxlCisgICAgICAqIEFsbG93ID4gMkdCIHJlcXVlc3RzIG9uIDMyYml0IHN5c3RlbXMuCisgICAgICAqIG5ldyBXSU4zMiBzYnJrLCBtbWFwLCBtdW5tYXAsIGxvY2sgY29kZSBmcm9tIDxXYWx0ZXJAR2VOZVN5cy1lLmRlPi4KKwlUaGFua3MgYWxzbyB0byBBbmRyZWFzIE11ZWxsZXIgPGEubXVlbGxlciBhdCBwYXJhZGF0ZWMuZGU+LAorCWFuZCBBbm9ueW1vdXMuCisgICAgICAqIEFsbG93IG92ZXJyaWRlIG9mIE1BTExPQ19BTElHTk1FTlQgKFRoYW5rcyB0byBSdXVkIFdhaWogZm9yCisJaGVscGluZyB0ZXN0IHRoaXMuKQorICAgICAgKiBtZW1hbGlnbjogY2hlY2sgYWxpZ25tZW50IGFyZworICAgICAgKiByZWFsbG9jOiBkb24ndCB0cnkgdG8gc2hpZnQgY2h1bmtzIGJhY2t3YXJkcywgc2luY2UgdGhpcworCWxlYWRzIHRvICBtb3JlIGZyYWdtZW50YXRpb24gaW4gc29tZSBwcm9ncmFtcyBhbmQgZG9lc24ndAorCXNlZW0gdG8gaGVscCBpbiBhbnkgb3RoZXJzLgorICAgICAgKiBDb2xsZWN0IGFsbCBjYXNlcyBpbiBtYWxsb2MgcmVxdWlyaW5nIHN5c3RlbSBtZW1vcnkgaW50byBzeXNtYWxsb2MKKyAgICAgICogVXNlIG1tYXAgYXMgYmFja3VwIHRvIHNicmsKKyAgICAgICogUGxhY2UgYWxsIGludGVybmFsIHN0YXRlIGluIG1hbGxvY19zdGF0ZQorICAgICAgKiBJbnRyb2R1Y2UgZmFzdGJpbnMgKGFsdGhvdWdoIHNpbWlsYXIgdG8gMi41LjEpCisgICAgICAqIE1hbnkgbWlub3IgdHVuaW5ncyBhbmQgY29zbWV0aWMgaW1wcm92ZW1lbnRzCisgICAgICAqIEludHJvZHVjZSBVU0VfUFVCTElDX01BTExPQ19XUkFQUEVSUywgVVNFX01BTExPQ19MT0NLCisgICAgICAqIEludHJvZHVjZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04sIE1PUkVDT1JFX0NPTlRJR1VPVVMKKwlUaGFua3MgdG8gVG9ueSBFLiBCZW5uZXR0IDx0YmVubmV0dEBudmlkaWEuY29tPiBhbmQgb3RoZXJzLgorICAgICAgKiBJbmNsdWRlIGVycm5vLmggdG8gc3VwcG9ydCBkZWZhdWx0IGZhaWx1cmUgYWN0aW9uLgorCisgICAgVjIuNi42IFN1biBEZWMgIDUgMDc6NDI6MTkgMTk5OSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIHJldHVybiBudWxsIGZvciBuZWdhdGl2ZSBhcmd1bWVudHMKKyAgICAgICogQWRkZWQgU2V2ZXJhbCBXSU4zMiBjbGVhbnVwcyBmcm9tIE1hcnRpbiBDLiBGb25nIDxtY2ZvbmcgYXQgeWFob28uY29tPgorCSAqIEFkZCAnTEFDS1NfU1lTX1BBUkFNX0gnIGZvciB0aG9zZSBzeXN0ZW1zIHdpdGhvdXQgJ3N5cy9wYXJhbS5oJworCSAgKGUuZy4gV0lOMzIgcGxhdGZvcm1zKQorCSAqIENsZWFudXAgaGVhZGVyIGZpbGUgaW5jbHVzaW9uIGZvciBXSU4zMiBwbGF0Zm9ybXMKKwkgKiBDbGVhbnVwIGNvZGUgdG8gYXZvaWQgTWljcm9zb2Z0IFZpc3VhbCBDKysgY29tcGlsZXIgY29tcGxhaW50cworCSAqIEFkZCAnVVNFX0RMX1BSRUZJWCcgdG8gcXVpY2tseSBhbGxvdyBjby1leGlzdGVuY2Ugd2l0aCBleGlzdGluZworCSAgIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzCisJICogU2V0ICdtYWxsb2NfZ2V0cGFnZXNpemUnIGZvciBXSU4zMiBwbGF0Zm9ybXMgKG5lZWRzIG1vcmUgd29yaykKKwkgKiBVc2UgJ2Fzc2VydCcgcmF0aGVyIHRoYW4gJ0FTU0VSVCcgaW4gV0lOMzIgY29kZSB0byBjb25mb3JtIHRvCisJICAgdXNhZ2Ugb2YgJ2Fzc2VydCcgaW4gbm9uLVdJTjMyIGNvZGUKKwkgKiBJbXByb3ZlIFdJTjMyICdzYnJrKCknIGVtdWxhdGlvbidzICdmaW5kUmVnaW9uKCknIHJvdXRpbmUgdG8KKwkgICBhdm9pZCBpbmZpbml0ZSBsb29wCisgICAgICAqIEFsd2F5cyBjYWxsICdmUkVlKCknIHJhdGhlciB0aGFuICdmcmVlKCknCisKKyAgICBWMi42LjUgV2VkIEp1biAxNyAxNTo1NzozMSAxOTk4ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4ZWQgb3JkZXJpbmcgcHJvYmxlbSB3aXRoIGJvdW5kYXJ5LXN0YW1waW5nCisKKyAgICBWMi42LjMgU3VuIE1heSAxOSAwODoxNzo1OCAxOTk2ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWRkZWQgcHZhbGxvYywgYXMgcmVjb21tZW5kZWQgYnkgSC5KLiBMaXUKKyAgICAgICogQWRkZWQgNjRiaXQgcG9pbnRlciBzdXBwb3J0IG1haW5seSBmcm9tIFdvbGZyYW0gR2xvZ2VyCisgICAgICAqIEFkZGVkIGFub255bW91c2x5IGRvbmF0ZWQgV0lOMzIgc2JyayBlbXVsYXRpb24KKyAgICAgICogTWFsbG9jLCBjYWxsb2MsIGdldHBhZ2VzaXplOiBhZGQgb3B0aW1pemF0aW9ucyBmcm9tIFJheW1vbmQgTmlqc3NlbgorICAgICAgKiBtYWxsb2NfZXh0ZW5kX3RvcDogZml4IG1hc2sgZXJyb3IgdGhhdCBjYXVzZWQgd2FzdGFnZSBhZnRlcgorCWZvcmVpZ24gc2Jya3MKKyAgICAgICogQWRkIGxpbnV4IG1yZW1hcCBzdXBwb3J0IGNvZGUgZnJvbSBISiBMaXUKKworICAgIFYyLjYuMiBUdWUgRGVjICA1IDA2OjUyOjU1IDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBJbnRlZ3JhdGVkIG1vc3QgZG9jdW1lbnRhdGlvbiB3aXRoIHRoZSBjb2RlLgorICAgICAgKiBBZGQgc3VwcG9ydCBmb3IgbW1hcCwgd2l0aCBoZWxwIGZyb20KKwlXb2xmcmFtIEdsb2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgorICAgICAgKiBVc2UgbGFzdF9yZW1haW5kZXIgaW4gbW9yZSBjYXNlcy4KKyAgICAgICogUGFjayBiaW5zIHVzaW5nIGlkZWEgZnJvbSAgY29saW5Abnl4MTAuY3MuZHUuZWR1CisgICAgICAqIFVzZSBvcmRlcmVkIGJpbnMgaW5zdGVhZCBvZiBiZXN0LWZpdCB0aHJlc2hvbGQKKyAgICAgICogRWxpbWluYXRlIGJsb2NrLWxvY2FsIGRlY2xzIHRvIHNpbXBsaWZ5IHRyYWNpbmcgYW5kIGRlYnVnZ2luZy4KKyAgICAgICogU3VwcG9ydCBhbm90aGVyIGNhc2Ugb2YgcmVhbGxvYyB2aWEgbW92ZSBpbnRvIHRvcAorICAgICAgKiBGaXggZXJyb3Igb2NjdXJyaW5nIHdoZW4gaW5pdGlhbCBzYnJrX2Jhc2Ugbm90IHdvcmQtYWxpZ25lZC4KKyAgICAgICogUmVseSBvbiBwYWdlIHNpemUgZm9yIHVuaXRzIGluc3RlYWQgb2YgU0JSS19VTklUIHRvCisJYXZvaWQgc3VycHJpc2VzIGFib3V0IHNicmsgYWxpZ25tZW50IGNvbnZlbnRpb25zLgorICAgICAgKiBBZGQgbWFsbGluZm8sIG1hbGxvcHQuIFRoYW5rcyB0byBSYXltb25kIE5panNzZW4KKwkocmF5bW9uZEBlcy5lbGUudHVlLm5sKSBmb3IgdGhlIHN1Z2dlc3Rpb24uCisgICAgICAqIEFkZCBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSBhbmQgdG9wX3BhZCBtYWxsb3B0IHBhcmFtZXRlci4KKyAgICAgICogTW9yZSBwcmVjYXV0aW9ucyBmb3IgY2FzZXMgd2hlcmUgb3RoZXIgcm91dGluZXMgY2FsbCBzYnJrLAorCWNvdXJ0ZXN5IG9mIFdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuCisgICAgICAqIEFkZGVkIG1hY3JvcyBldGMuLCBhbGxvd2luZyB1c2UgaW4gbGludXggbGliYyBmcm9tCisJSC5KLiBMdSAoaGpsQGdudS5haS5taXQuZWR1KQorICAgICAgKiBJbnZlcnRlZCB0aGlzIGhpc3RvcnkgbGlzdAorCisgICAgVjIuNi4xIFNhdCBEZWMgIDIgMTQ6MTA6NTcgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIFJlLXR1bmVkIGFuZCBmaXhlZCB0byBiZWhhdmUgbW9yZSBuaWNlbHkgd2l0aCBWMi42LjAgY2hhbmdlcy4KKyAgICAgICogUmVtb3ZlZCBhbGwgcHJlYWxsb2NhdGlvbiBjb2RlIHNpbmNlIHVuZGVyIGN1cnJlbnQgc2NoZW1lCisJdGhlIHdvcmsgcmVxdWlyZWQgdG8gdW5kbyBiYWQgcHJlYWxsb2NhdGlvbnMgZXhjZWVkcworCXRoZSB3b3JrIHNhdmVkIGluIGdvb2QgY2FzZXMgZm9yIG1vc3QgdGVzdCBwcm9ncmFtcy4KKyAgICAgICogTm8gbG9uZ2VyIHVzZSByZXR1cm4gbGlzdCBvciB1bmNvbnNvbGlkYXRlZCBiaW5zIHNpbmNlCisJbm8gc2NoZW1lIHVzaW5nIHRoZW0gY29uc2lzdGVudGx5IG91dHBlcmZvcm1zIHRob3NlIHRoYXQgZG9uJ3QKKwlnaXZlbiBhYm92ZSBjaGFuZ2VzLgorICAgICAgKiBVc2UgYmVzdCBmaXQgZm9yIHZlcnkgbGFyZ2UgY2h1bmtzIHRvIHByZXZlbnQgc29tZSB3b3JzdC1jYXNlcy4KKyAgICAgICogQWRkZWQgc29tZSBzdXBwb3J0IGZvciBkZWJ1Z2dpbmcKKworICAgIFYyLjYuMCBTYXQgTm92ICA0IDA3OjA1OjIzIDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBSZW1vdmVkIGZvb3RlcnMgd2hlbiBjaHVua3MgYXJlIGluIHVzZS4gVGhhbmtzIHRvCisJUGF1bCBXaWxzb24gKHdpbHNvbkBjcy50ZXhhcy5lZHUpIGZvciB0aGUgc3VnZ2VzdGlvbi4KKworICAgIFYyLjUuNCBXZWQgTm92ICAxIDA3OjU0OjUxIDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBZGRlZCBtYWxsb2NfdHJpbSwgd2l0aCBoZWxwIGZyb20gV29sZnJhbSBHbG9nZXIKKwkod21nbG9ARGVudC5NRUQuVW5pLU11ZW5jaGVuLkRFKS4KKworICAgIFYyLjUuMyBUdWUgQXByIDI2IDEwOjE2OjAxIDE5OTQgIERvdWcgTGVhICAoZGwgYXQgZykKKworICAgIFYyLjUuMiBUdWUgQXByICA1IDE2OjIwOjQwIDE5OTQgIERvdWcgTGVhICAoZGwgYXQgZykKKyAgICAgICogcmVhbGxvYzogdHJ5IHRvIGV4cGFuZCBpbiBib3RoIGRpcmVjdGlvbnMKKyAgICAgICogbWFsbG9jOiBzd2FwIG9yZGVyIG9mIGNsZWFuLWJpbiBzdHJhdGVneTsKKyAgICAgICogcmVhbGxvYzogb25seSBjb25kaXRpb25hbGx5IGV4cGFuZCBiYWNrd2FyZHMKKyAgICAgICogVHJ5IG5vdCB0byBzY2F2ZW5nZSB1c2VkIGJpbnMKKyAgICAgICogVXNlIGJpbiBjb3VudHMgYXMgYSBndWlkZSB0byBwcmVhbGxvY2F0aW9uCisgICAgICAqIE9jY2FzaW9uYWxseSBiaW4gcmV0dXJuIGxpc3QgY2h1bmtzIGluIGZpcnN0IHNjYW4KKyAgICAgICogQWRkIGEgZmV3IG9wdGltaXphdGlvbnMgZnJvbSBjb2xpbkBueXgxMC5jcy5kdS5lZHUKKworICAgIFYyLjUuMSBTYXQgQXVnIDE0IDE1OjQwOjQzIDE5OTMgIERvdWcgTGVhICAoZGwgYXQgZykKKyAgICAgICogZmFzdGVyIGJpbiBjb21wdXRhdGlvbiAmIHNsaWdodGx5IGRpZmZlcmVudCBiaW5uaW5nCisgICAgICAqIG1lcmdlZCBhbGwgY29uc29saWRhdGlvbnMgdG8gb25lIHBhcnQgb2YgbWFsbG9jIHByb3BlcgorCSAoZWxpbWluYXRpbmcgb2xkIG1hbGxvY19maW5kX3NwYWNlICYgbWFsbG9jX2NsZWFuX2JpbikKKyAgICAgICogU2NhbiAyIHJldHVybnMgY2h1bmtzIChub3QganVzdCAxKQorICAgICAgKiBQcm9wYWdhdGUgZmFpbHVyZSBpbiByZWFsbG9jIGlmIG1hbGxvYyByZXR1cm5zIDAKKyAgICAgICogQWRkIHN0dWZmIHRvIGFsbG93IGNvbXBpbGF0aW9uIG9uIG5vbi1BTlNJIGNvbXBpbGVycworCSAgZnJvbSBrcHZAcmVzZWFyY2guYXR0LmNvbQorCisgICAgVjIuNSBTYXQgQXVnICA3IDA3OjQxOjU5IDE5OTMgIERvdWcgTGVhICAoZGwgYXQgZy5vc3dlZ28uZWR1KQorICAgICAgKiByZW1vdmVkIHBvdGVudGlhbCBmb3Igb2RkIGFkZHJlc3MgYWNjZXNzIGluIHByZXZfY2h1bmsKKyAgICAgICogcmVtb3ZlZCBkZXBlbmRlbmN5IG9uIGdldHBhZ2VzaXplLmgKKyAgICAgICogbWlzYyBjb3NtZXRpY3MgYW5kIGEgYml0IG1vcmUgaW50ZXJuYWwgZG9jdW1lbnRhdGlvbgorICAgICAgKiBhbnRpY29zbWV0aWNzOiBtYW5nbGVkIG5hbWVzIGluIG1hY3JvcyB0byBldmFkZSBkZWJ1Z2dlciBzdHJhbmdlbmVzcworICAgICAgKiB0ZXN0ZWQgb24gc3BhcmMsIGhwLTcwMCwgZGVjLW1pcHMsIHJzNjAwMAorCSAgd2l0aCBnY2MgJiBuYXRpdmUgY2MgKGhwLCBkZWMgb25seSkgYWxsb3dpbmcKKwkgIERldGxlZnMgJiBab3JuIGNvbXBhcmlzb24gc3R1ZHkgKGluIFNJR1BMQU4gTm90aWNlcy4pCisKKyAgICBUcmlhbCB2ZXJzaW9uIEZyaSBBdWcgMjggMTM6MTQ6MjkgMTk5MiAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCisgICAgICAqIEJhc2VkIGxvb3NlbHkgb24gbGliZysrLTEuMlggbWFsbG9jLiAoSXQgcmV0YWlucyBzb21lIG9mIHRoZSBvdmVyYWxsCisJIHN0cnVjdHVyZSBvZiBvbGQgdmVyc2lvbiwgIGJ1dCBtb3N0IGRldGFpbHMgZGlmZmVyLikKKworKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmMgYi9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYzMxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5jCkBAIC0wLDAgKzEsOTUzIEBACisvKiBBbHRlcm5hdGl2ZSBtYWxsb2MgaW1wbGVtZW50YXRpb24gZm9yIG11bHRpcGxlIHRocmVhZHMgd2l0aG91dAorbG9jayBjb250ZW50aW9uIGJhc2VkIG9uIGRsbWFsbG9jLiAoQykgMjAwNS0yMDA2IE5pYWxsIERvdWdsYXMKKworQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieQordGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCitleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KK2RvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgorCitUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwordGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKK211c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQord29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CithIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKK0ZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisqLworCisjaWZkZWYgX01TQ19WRVIKKy8qIEVuYWJsZSBmdWxsIGFsaWFzaW5nIG9uIE1TVkMgKi8KKy8qI3ByYWdtYSBvcHRpbWl6ZSgiYSIsIG9uKSovCisjZW5kaWYKKworLyojZGVmaW5lIEZVTExTQU5JVFlDSEVDS1MqLworCisjaW5jbHVkZSAibmVkbWFsbG9jLmgiCisjaWYgZGVmaW5lZChXSU4zMikKKyAjaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5kaWYKKyNkZWZpbmUgTVNQQUNFUyAxCisjZGVmaW5lIE9OTFlfTVNQQUNFUyAxCisjaWZuZGVmIFVTRV9MT0NLUworICNkZWZpbmUgVVNFX0xPQ0tTIDEKKyNlbmRpZgorI2RlZmluZSBGT09URVJTIDEgICAgICAgICAgIC8qIE5lZWQgdG8gZW5hYmxlIGZvb3RlcnMgc28gZnJlZXMgbG9jayB0aGUgcmlnaHQgbXNwYWNlICovCisjdW5kZWYgREVCVUcJCQkJLyogZGxtYWxsb2Mgd2FudHMgREVCVUcgZWl0aGVyIDAgb3IgMSAqLworI2lmZGVmIF9ERUJVRworICNkZWZpbmUgREVCVUcgMQorI2Vsc2UKKyAjZGVmaW5lIERFQlVHIDAKKyNlbmRpZgorI2lmZGVmIE5ERUJVRyAgICAgICAgICAgICAgIC8qIERpc2FibGUgYXNzZXJ0IGNoZWNraW5nIG9uIHJlbGVhc2UgYnVpbGRzICovCisgI3VuZGVmIERFQlVHCisjZW5kaWYKKy8qIFRoZSBkZWZhdWx0IG9mIDY0S2IgbWVhbnMgd2Ugc3BlbmQgdG9vIG11Y2ggdGltZSBrZXJuZWwtc2lkZSAqLworI2lmbmRlZiBERUZBVUxUX0dSQU5VTEFSSVRZCisjZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKDEqMTAyNCoxMDI0KQorI2VuZGlmCisvKiNkZWZpbmUgVVNFX1NQSU5fTE9DS1MgMCovCisKKworLyojZGVmaW5lIEZPUkNFSU5MSU5FKi8KKyNpbmNsdWRlICJtYWxsb2MuYy5oIgorI2lmZGVmIE5ERUJVRyAgICAgICAgICAgICAgIC8qIERpc2FibGUgYXNzZXJ0IGNoZWNraW5nIG9uIHJlbGVhc2UgYnVpbGRzICovCisgI3VuZGVmIERFQlVHCisjZW5kaWYKKworLyogVGhlIG1heGltdW0gY29uY3VycmVudCB0aHJlYWRzIGluIGEgcG9vbCBwb3NzaWJsZSAqLworI2lmbmRlZiBNQVhUSFJFQURTSU5QT09MCisjZGVmaW5lIE1BWFRIUkVBRFNJTlBPT0wgMTYKKyNlbmRpZgorLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZGNhY2hlcyB3aGljaCBjYW4gYmUgYWxsb2NhdGVkICovCisjaWZuZGVmIFRIUkVBRENBQ0hFTUFYQ0FDSEVTCisjZGVmaW5lIFRIUkVBRENBQ0hFTUFYQ0FDSEVTIDI1NgorI2VuZGlmCisvKiBUaGUgbWF4aW11bSBzaXplIHRvIGJlIGFsbG9jYXRlZCBmcm9tIHRoZSB0aHJlYWQgY2FjaGUgKi8KKyNpZm5kZWYgVEhSRUFEQ0FDSEVNQVgKKyNkZWZpbmUgVEhSRUFEQ0FDSEVNQVggODE5MgorI2VuZGlmCisjaWYgMAorLyogVGhlIG51bWJlciBvZiBjYWNoZSBlbnRyaWVzIGZvciBmaW5lciBncmFpbmVkIGJpbnMuIFRoaXMgaXMgKHRvcGJpdHBvcyhUSFJFQURDQUNIRU1BWCktNCkqMiAqLworI2RlZmluZSBUSFJFQURDQUNIRU1BWEJJTlMgKCgxMy00KSoyKQorI2Vsc2UKKy8qIFRoZSBudW1iZXIgb2YgY2FjaGUgZW50cmllcy4gVGhpcyBpcyAodG9wYml0cG9zKFRIUkVBRENBQ0hFTUFYKS00KSAqLworI2RlZmluZSBUSFJFQURDQUNIRU1BWEJJTlMgKDEzLTQpCisjZW5kaWYKKy8qIFBvaW50IGF0IHdoaWNoIHRoZSBmcmVlIHNwYWNlIGluIGEgdGhyZWFkIGNhY2hlIGlzIGdhcmJhZ2UgY29sbGVjdGVkICovCisjaWZuZGVmIFRIUkVBRENBQ0hFTUFYRlJFRVNQQUNFCisjZGVmaW5lIFRIUkVBRENBQ0hFTUFYRlJFRVNQQUNFICg1MTIqMTAyNCkKKyNlbmRpZgorCisKKyNpZmRlZiBXSU4zMgorICNkZWZpbmUgVExTVkFSCQkJRFdPUkQKKyAjZGVmaW5lIFRMU0FMTE9DKGspCSgqKGspPVRsc0FsbG9jKCksIFRMU19PVVRfT0ZfSU5ERVhFUz09KihrKSkKKyAjZGVmaW5lIFRMU0ZSRUUoaykJCSghVGxzRnJlZShrKSkKKyAjZGVmaW5lIFRMU0dFVChrKQkJVGxzR2V0VmFsdWUoaykKKyAjZGVmaW5lIFRMU1NFVChrLCBhKQkoIVRsc1NldFZhbHVlKGssIGEpKQorICNpZmRlZiBERUJVRworc3RhdGljIExQVk9JRCBDaGtlZFRsc0dldFZhbHVlKERXT1JEIGlkeCkKK3sKKwlMUFZPSUQgcmV0PVRsc0dldFZhbHVlKGlkeCk7CisJYXNzZXJ0KFNfT0s9PUdldExhc3RFcnJvcigpKTsKKwlyZXR1cm4gcmV0OworfQorICAjdW5kZWYgVExTR0VUCisgICNkZWZpbmUgVExTR0VUKGspIENoa2VkVGxzR2V0VmFsdWUoaykKKyAjZW5kaWYKKyNlbHNlCisgI2RlZmluZSBUTFNWQVIJCQlwdGhyZWFkX2tleV90CisgI2RlZmluZSBUTFNBTExPQyhrKQlwdGhyZWFkX2tleV9jcmVhdGUoaywgMCkKKyAjZGVmaW5lIFRMU0ZSRUUoaykJCXB0aHJlYWRfa2V5X2RlbGV0ZShrKQorICNkZWZpbmUgVExTR0VUKGspCQlwdGhyZWFkX2dldHNwZWNpZmljKGspCisgI2RlZmluZSBUTFNTRVQoaywgYSkJcHRocmVhZF9zZXRzcGVjaWZpYyhrLCBhKQorI2VuZGlmCisKKyNpZiAwCisvKiBPbmx5IGVuYWJsZSBpZiB0ZXN0aW5nIHdpdGggdmFsZ3JpbmQuIENhdXNlcyBtaXNvcGVyYXRpb24gKi8KKyNkZWZpbmUgbXNwYWNlX21hbGxvYyhwLCBzKSBtYWxsb2MocykKKyNkZWZpbmUgbXNwYWNlX3JlYWxsb2MocCwgbSwgcykgcmVhbGxvYyhtLCBzKQorI2RlZmluZSBtc3BhY2VfY2FsbG9jKHAsIG4sIHMpIGNhbGxvYyhuLCBzKQorI2RlZmluZSBtc3BhY2VfZnJlZShwLCBtKSBmcmVlKG0pCisjZW5kaWYKKworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyNpZiAhZGVmaW5lZChOT19ORURfTkFNRVNQQUNFKQorbmFtZXNwYWNlIG5lZGFsbG9jIHsKKyNlbHNlCitleHRlcm4gIkMiIHsKKyNlbmRpZgorI2VuZGlmCisKK3NpemVfdCBuZWRibGtzaXplKHZvaWQgKm1lbSkgVEhST1dTUEVDCit7CisjaWYgMAorCS8qIE9ubHkgZW5hYmxlIGlmIHRlc3Rpbmcgd2l0aCB2YWxncmluZC4gQ2F1c2VzIG1pc29wZXJhdGlvbiAqLworCXJldHVybiBUSFJFQURDQUNIRU1BWDsKKyNlbHNlCisJaWYobWVtKQorCXsKKwkJbWNodW5rcHRyIHA9bWVtMmNodW5rKG1lbSk7CisJCWFzc2VydChjaW51c2UocCkpOwkvKiBJZiB0aGlzIGZhaWxzLCBzb21lb25lIHRyaWVkIHRvIGZyZWUgYSBibG9jayB0d2ljZSAqLworCQlpZihjaW51c2UocCkpCisJCQlyZXR1cm4gY2h1bmtzaXplKHApLW92ZXJoZWFkX2ZvcihwKTsKKwl9CisJcmV0dXJuIDA7CisjZW5kaWYKK30KKwordm9pZCBuZWRzZXR2YWx1ZSh2b2lkICp2KSBUSFJPV1NQRUMJCQkJCXsgbmVkcHNldHZhbHVlKDAsIHYpOyB9Cit2b2lkICogbmVkbWFsbG9jKHNpemVfdCBzaXplKSBUSFJPV1NQRUMJCQkJeyByZXR1cm4gbmVkcG1hbGxvYygwLCBzaXplKTsgfQordm9pZCAqIG5lZGNhbGxvYyhzaXplX3Qgbm8sIHNpemVfdCBzaXplKSBUSFJPV1NQRUMJeyByZXR1cm4gbmVkcGNhbGxvYygwLCBubywgc2l6ZSk7IH0KK3ZvaWQgKiBuZWRyZWFsbG9jKHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQwl7IHJldHVybiBuZWRwcmVhbGxvYygwLCBtZW0sIHNpemUpOyB9Cit2b2lkICAgbmVkZnJlZSh2b2lkICptZW0pIFRIUk9XU1BFQwkJCQkJeyBuZWRwZnJlZSgwLCBtZW0pOyB9Cit2b2lkICogbmVkbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSBUSFJPV1NQRUMgeyByZXR1cm4gbmVkcG1lbWFsaWduKDAsIGFsaWdubWVudCwgYnl0ZXMpOyB9CisjaWYgIU5PX01BTExJTkZPCitzdHJ1Y3QgbWFsbGluZm8gbmVkbWFsbGluZm8odm9pZCkgVEhST1dTUEVDCQkJeyByZXR1cm4gbmVkcG1hbGxpbmZvKDApOyB9CisjZW5kaWYKK2ludCAgICBuZWRtYWxsb3B0KGludCBwYXJubywgaW50IHZhbHVlKSBUSFJPV1NQRUMJeyByZXR1cm4gbmVkcG1hbGxvcHQoMCwgcGFybm8sIHZhbHVlKTsgfQoraW50ICAgIG5lZG1hbGxvY190cmltKHNpemVfdCBwYWQpIFRIUk9XU1BFQwkJCXsgcmV0dXJuIG5lZHBtYWxsb2NfdHJpbSgwLCBwYWQpOyB9Cit2b2lkICAgbmVkbWFsbG9jX3N0YXRzKHZvaWQpIFRIUk9XU1BFQwkJCQkJeyBuZWRwbWFsbG9jX3N0YXRzKDApOyB9CitzaXplX3QgbmVkbWFsbG9jX2Zvb3RwcmludCh2b2lkKSBUSFJPV1NQRUMJCQkJeyByZXR1cm4gbmVkcG1hbGxvY19mb290cHJpbnQoMCk7IH0KK3ZvaWQgKipuZWRpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IGVsZW1zbm8sIHNpemVfdCBlbGVtc2l6ZSwgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDCXsgcmV0dXJuIG5lZHBpbmRlcGVuZGVudF9jYWxsb2MoMCwgZWxlbXNubywgZWxlbXNpemUsIGNodW5rcyk7IH0KK3ZvaWQgKipuZWRpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QgZWxlbXMsIHNpemVfdCAqc2l6ZXMsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQwl7IHJldHVybiBuZWRwaW5kZXBlbmRlbnRfY29tYWxsb2MoMCwgZWxlbXMsIHNpemVzLCBjaHVua3MpOyB9CisKK3N0cnVjdCB0aHJlYWRjYWNoZWJsa190OwordHlwZWRlZiBzdHJ1Y3QgdGhyZWFkY2FjaGVibGtfdCB0aHJlYWRjYWNoZWJsazsKK3N0cnVjdCB0aHJlYWRjYWNoZWJsa190Cit7CS8qIEtlZXAgbGVzcyB0aGFuIDE2IGJ5dGVzIG9uIDMyIGJpdCBzeXN0ZW1zIGFuZCAzMiBieXRlcyBvbiA2NCBiaXQgc3lzdGVtcyAqLworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl1bnNpZ25lZCBpbnQgbWFnaWM7CisjZW5kaWYKKwl1bnNpZ25lZCBpbnQgbGFzdFVzZWQsIHNpemU7CisJdGhyZWFkY2FjaGVibGsgKm5leHQsICpwcmV2OworfTsKK3R5cGVkZWYgc3RydWN0IHRocmVhZGNhY2hlX3QKK3sKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdW5zaWduZWQgaW50IG1hZ2ljMTsKKyNlbmRpZgorCWludCBteW1zcGFjZTsJCQkJCQkvKiBMYXN0IG1zcGFjZSBlbnRyeSB0aGlzIHRocmVhZCB1c2VkICovCisJbG9uZyB0aHJlYWRpZDsKKwl1bnNpZ25lZCBpbnQgbWFsbG9jcywgZnJlZXMsIHN1Y2Nlc3NlczsKKwlzaXplX3QgZnJlZUluQ2FjaGU7CQkJCQkvKiBIb3cgbXVjaCBmcmVlIHNwYWNlIGlzIHN0b3JlZCBpbiB0aGlzIGNhY2hlICovCisJdGhyZWFkY2FjaGVibGsgKmJpbnNbKFRIUkVBRENBQ0hFTUFYQklOUysxKSoyXTsKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdW5zaWduZWQgaW50IG1hZ2ljMjsKKyNlbmRpZgorfSB0aHJlYWRjYWNoZTsKK3N0cnVjdCBuZWRwb29sX3QKK3sKKwlNTE9DS19UIG11dGV4OworCXZvaWQgKnVzZXJ2YWx1ZTsKKwlpbnQgdGhyZWFkczsJCQkJCQkvKiBNYXggZW50cmllcyBpbiBtIHRvIHVzZSAqLworCXRocmVhZGNhY2hlICpjYWNoZXNbVEhSRUFEQ0FDSEVNQVhDQUNIRVNdOworCVRMU1ZBUiBteWNhY2hlOwkJCQkJCS8qIFRocmVhZCBjYWNoZSBmb3IgdGhpcyB0aHJlYWQuIDAgZm9yIHVuc2V0LCBuZWdhdGl2ZSBmb3IgdXNlIG1zcGFjZS0xIGRpcmVjdGx5LCBvdGhlcndpc2UgaXMgY2FjaGUtMSAqLworCW1zdGF0ZSBtW01BWFRIUkVBRFNJTlBPT0wrMV07CQkvKiBtc3BhY2UgZW50cmllcyBmb3IgdGhpcyBwb29sICovCit9Oworc3RhdGljIG5lZHBvb2wgc3lzcG9vbDsKKworc3RhdGljIEZPUkNFSU5MSU5FIHVuc2lnbmVkIGludCBzaXplMmJpbmlkeChzaXplX3QgX3NpemUpIFRIUk9XU1BFQworewkvKiA4PTEwMDAJMTY9MTAwMDAJMjA9MTAxMDAJMjQ9MTEwMDAJMzI9MTAwMDAwCTQ4PTExMDAwMAk0MDk2PTEwMDAwMDAwMDAwMDAgKi8KKwl1bnNpZ25lZCBpbnQgdG9wYml0LCBzaXplPSh1bnNpZ25lZCBpbnQpKF9zaXplPj40KTsKKwkvKiAxNj0xCQkyMD0xCTI0PTEJMzI9MTAJNDg9MTEJNjQ9MTAwCTk2PTExMAkxMjg9MTAwMAk0MDk2PTEwMDAwMDAwMCAqLworCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKwl0b3BiaXQgPSBzaXplb2Yoc2l6ZSkqX19DSEFSX0JJVF9fIC0gMSAtIF9fYnVpbHRpbl9jbHooc2l6ZSk7CisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMAorCXsKKwkgICAgdW5zaWduZWQgbG9uZyBic3JUb3BCaXQ7CisKKwkgICAgX0JpdFNjYW5SZXZlcnNlKCZic3JUb3BCaXQsIHNpemUpOworCisJICAgIHRvcGJpdCA9IGJzclRvcEJpdDsKKwl9CisjZWxzZQorI2lmIDAKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGFzSW50WzJdOworCQlkb3VibGUgYXNEb3VibGU7CisJfTsKKwlpbnQgbjsKKworCWFzRG91YmxlID0gKGRvdWJsZSlzaXplICsgMC41OworCXRvcGJpdCA9IChhc0ludFshRk9YX0JJR0VORElBTl0gPj4gMjApIC0gMTAyMzsKKyNlbHNlCisJeworCQl1bnNpZ25lZCBpbnQgeD1zaXplOworCQl4ID0geCB8ICh4ID4+IDEpOworCQl4ID0geCB8ICh4ID4+IDIpOworCQl4ID0geCB8ICh4ID4+IDQpOworCQl4ID0geCB8ICh4ID4+IDgpOworCQl4ID0geCB8ICh4ID4+MTYpOworCQl4ID0gfng7CisJCXggPSB4IC0gKCh4ID4+IDEpICYgMHg1NTU1NTU1NSk7CisJCXggPSAoeCAmIDB4MzMzMzMzMzMpICsgKCh4ID4+IDIpICYgMHgzMzMzMzMzMyk7CisJCXggPSAoeCArICh4ID4+IDQpKSAmIDB4MEYwRjBGMEY7CisJCXggPSB4ICsgKHggPDwgOCk7CisJCXggPSB4ICsgKHggPDwgMTYpOworCQl0b3BiaXQ9MzEgLSAoeCA+PiAyNCk7CisJfQorI2VuZGlmCisjZW5kaWYKKwlyZXR1cm4gdG9wYml0OworfQorCisKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCitzdGF0aWMgdm9pZCB0Y3Nhbml0eWNoZWNrKHRocmVhZGNhY2hlYmxrICoqcHRyKSBUSFJPV1NQRUMKK3sKKwlhc3NlcnQoKHB0clswXSAmJiBwdHJbMV0pIHx8ICghcHRyWzBdICYmICFwdHJbMV0pKTsKKwlpZihwdHJbMF0gJiYgcHRyWzFdKQorCXsKKwkJYXNzZXJ0KG5lZGJsa3NpemUocHRyWzBdKT49c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSk7CisJCWFzc2VydChuZWRibGtzaXplKHB0clsxXSk+PXNpemVvZih0aHJlYWRjYWNoZWJsaykpOworCQlhc3NlcnQoKih1bnNpZ25lZCBpbnQgKikgIk5FRE4iPT1wdHJbMF0tPm1hZ2ljKTsKKwkJYXNzZXJ0KCoodW5zaWduZWQgaW50ICopICJORUROIj09cHRyWzFdLT5tYWdpYyk7CisJCWFzc2VydCghcHRyWzBdLT5wcmV2KTsKKwkJYXNzZXJ0KCFwdHJbMV0tPm5leHQpOworCQlpZihwdHJbMF09PXB0clsxXSkKKwkJeworCQkJYXNzZXJ0KCFwdHJbMF0tPm5leHQpOworCQkJYXNzZXJ0KCFwdHJbMV0tPnByZXYpOworCQl9CisJfQorfQorc3RhdGljIHZvaWQgdGNmdWxsc2FuaXR5Y2hlY2sodGhyZWFkY2FjaGUgKnRjKSBUSFJPV1NQRUMKK3sKKwl0aHJlYWRjYWNoZWJsayAqKnRjYnB0cj10Yy0+YmluczsKKwlpbnQgbjsKKwlmb3Iobj0wOyBuPD1USFJFQURDQUNIRU1BWEJJTlM7IG4rKywgdGNicHRyKz0yKQorCXsKKwkJdGhyZWFkY2FjaGVibGsgKmIsICpvYj0wOworCQl0Y3Nhbml0eWNoZWNrKHRjYnB0cik7CisJCWZvcihiPXRjYnB0clswXTsgYjsgb2I9YiwgYj1iLT5uZXh0KQorCQl7CisJCQlhc3NlcnQoKih1bnNpZ25lZCBpbnQgKikgIk5FRE4iPT1iLT5tYWdpYyk7CisJCQlhc3NlcnQoIW9iIHx8IG9iLT5uZXh0PT1iKTsKKwkJCWFzc2VydCghb2IgfHwgYi0+cHJldj09b2IpOworCQl9CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBOT0lOTElORSB2b2lkIFJlbW92ZUNhY2hlRW50cmllcyhuZWRwb29sICpwLCB0aHJlYWRjYWNoZSAqdGMsIHVuc2lnbmVkIGludCBhZ2UpIFRIUk9XU1BFQworeworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKKwlpZih0Yy0+ZnJlZUluQ2FjaGUpCisJeworCQl0aHJlYWRjYWNoZWJsayAqKnRjYnB0cj10Yy0+YmluczsKKwkJaW50IG47CisJCWZvcihuPTA7IG48PVRIUkVBRENBQ0hFTUFYQklOUzsgbisrLCB0Y2JwdHIrPTIpCisJCXsKKwkJCXRocmVhZGNhY2hlYmxrICoqdGNiPXRjYnB0cisxOwkJLyogY29tZSBmcm9tIG9sZGVzdCBlbmQgb2YgbGlzdCAqLworCQkJLyp0Y3Nhbml0eWNoZWNrKHRjYnB0cik7Ki8KKwkJCWZvcig7ICp0Y2IgJiYgdGMtPmZyZWVzLSgqdGNiKS0+bGFzdFVzZWQ+PWFnZTsgKQorCQkJeworCQkJCXRocmVhZGNhY2hlYmxrICpmPSp0Y2I7CisJCQkJc2l6ZV90IGJsa3NpemU9Zi0+c2l6ZTsgLypuZWRibGtzaXplKGYpOyovCisJCQkJYXNzZXJ0KGJsa3NpemU8PW5lZGJsa3NpemUoZikpOworCQkJCWFzc2VydChibGtzaXplKTsKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJCQkJYXNzZXJ0KCoodW5zaWduZWQgaW50ICopICJORUROIj09KCp0Y2IpLT5tYWdpYyk7CisjZW5kaWYKKwkJCQkqdGNiPSgqdGNiKS0+cHJldjsKKwkJCQlpZigqdGNiKQorCQkJCQkoKnRjYiktPm5leHQ9MDsKKwkJCQllbHNlCisJCQkJCSp0Y2JwdHI9MDsKKwkJCQl0Yy0+ZnJlZUluQ2FjaGUtPWJsa3NpemU7CisJCQkJYXNzZXJ0KChsb25nKSB0Yy0+ZnJlZUluQ2FjaGU+PTApOworCQkJCW1zcGFjZV9mcmVlKDAsIGYpOworCQkJCS8qdGNzYW5pdHljaGVjayh0Y2JwdHIpOyovCisJCQl9CisJCX0KKwl9CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjZnVsbHNhbml0eWNoZWNrKHRjKTsKKyNlbmRpZgorfQorc3RhdGljIHZvaWQgRGVzdHJveUNhY2hlcyhuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlpZihwLT5jYWNoZXMpCisJeworCQl0aHJlYWRjYWNoZSAqdGM7CisJCWludCBuOworCQlmb3Iobj0wOyBuPFRIUkVBRENBQ0hFTUFYQ0FDSEVTOyBuKyspCisJCXsKKwkJCWlmKCh0Yz1wLT5jYWNoZXNbbl0pKQorCQkJeworCQkJCXRjLT5mcmVlcysrOworCQkJCVJlbW92ZUNhY2hlRW50cmllcyhwLCB0YywgMCk7CisJCQkJYXNzZXJ0KCF0Yy0+ZnJlZUluQ2FjaGUpOworCQkJCXRjLT5teW1zcGFjZT0tMTsKKwkJCQl0Yy0+dGhyZWFkaWQ9MDsKKwkJCQltc3BhY2VfZnJlZSgwLCB0Yyk7CisJCQkJcC0+Y2FjaGVzW25dPTA7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyBOT0lOTElORSB0aHJlYWRjYWNoZSAqQWxsb2NDYWNoZShuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwl0aHJlYWRjYWNoZSAqdGM9MDsKKwlpbnQgbiwgZW5kOworCUFDUVVJUkVfTE9DSygmcC0+bXV0ZXgpOworCWZvcihuPTA7IG48VEhSRUFEQ0FDSEVNQVhDQUNIRVMgJiYgcC0+Y2FjaGVzW25dOyBuKyspOworCWlmKFRIUkVBRENBQ0hFTUFYQ0FDSEVTPT1uKQorCXsJLyogTGlzdCBleGhhdXN0ZWQsIHNvIGRpc2FibGUgZm9yIHRoaXMgdGhyZWFkICovCisJCVJFTEVBU0VfTE9DSygmcC0+bXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisJdGM9cC0+Y2FjaGVzW25dPSh0aHJlYWRjYWNoZSAqKSBtc3BhY2VfY2FsbG9jKHAtPm1bMF0sIDEsIHNpemVvZih0aHJlYWRjYWNoZSkpOworCWlmKCF0YykKKwl7CisJCVJFTEVBU0VfTE9DSygmcC0+bXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjLT5tYWdpYzE9Kih1bnNpZ25lZCBpbnQgKikiTkVETUFMQzEiOworCXRjLT5tYWdpYzI9Kih1bnNpZ25lZCBpbnQgKikiTkVETUFMQzIiOworI2VuZGlmCisJdGMtPnRocmVhZGlkPShsb25nKShzaXplX3QpQ1VSUkVOVF9USFJFQUQ7CisJZm9yKGVuZD0wOyBwLT5tW2VuZF07IGVuZCsrKTsKKwl0Yy0+bXltc3BhY2U9dGMtPnRocmVhZGlkICUgZW5kOworCVJFTEVBU0VfTE9DSygmcC0+bXV0ZXgpOworCWlmKFRMU1NFVChwLT5teWNhY2hlLCAodm9pZCAqKShzaXplX3QpKG4rMSkpKSBhYm9ydCgpOworCXJldHVybiB0YzsKK30KKworc3RhdGljIHZvaWQgKnRocmVhZGNhY2hlX21hbGxvYyhuZWRwb29sICpwLCB0aHJlYWRjYWNoZSAqdGMsIHNpemVfdCAqc2l6ZSkgVEhST1dTUEVDCit7CisJdm9pZCAqcmV0PTA7CisJdW5zaWduZWQgaW50IGJlc3RzaXplOworCXVuc2lnbmVkIGludCBpZHg9c2l6ZTJiaW5pZHgoKnNpemUpOworCXNpemVfdCBibGtzaXplPTA7CisJdGhyZWFkY2FjaGVibGsgKmJsaywgKipiaW5zcHRyOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKKwkvKiBDYWxjdWxhdGUgYmVzdCBmaXQgYmluIHNpemUgKi8KKwliZXN0c2l6ZT0xPDwoaWR4KzQpOworI2lmIDAKKwkvKiBGaW5lciBncmFpbmVkIGJpbiBmaXQgKi8KKwlpZHg8PD0xOworCWlmKCpzaXplPmJlc3RzaXplKQorCXsKKwkJaWR4Kys7CisJCWJlc3RzaXplKz1iZXN0c2l6ZT4+MTsKKwl9CisJaWYoKnNpemU+YmVzdHNpemUpCisJeworCQlpZHgrKzsKKwkJYmVzdHNpemU9MTw8KDQrKGlkeD4+MSkpOworCX0KKyNlbHNlCisJaWYoKnNpemU+YmVzdHNpemUpCisJeworCQlpZHgrKzsKKwkJYmVzdHNpemU8PD0xOworCX0KKyNlbmRpZgorCWFzc2VydChiZXN0c2l6ZT49KnNpemUpOworCWlmKCpzaXplPGJlc3RzaXplKSAqc2l6ZT1iZXN0c2l6ZTsKKwlhc3NlcnQoKnNpemU8PVRIUkVBRENBQ0hFTUFYKTsKKwlhc3NlcnQoaWR4PD1USFJFQURDQUNIRU1BWEJJTlMpOworCWJpbnNwdHI9JnRjLT5iaW5zW2lkeCoyXTsKKwkvKiBUcnkgdG8gbWF0Y2ggY2xvc2UsIGJ1dCBtb3ZlIHVwIGEgYmluIGlmIG5lY2Vzc2FyeSAqLworCWJsaz0qYmluc3B0cjsKKwlpZighYmxrIHx8IGJsay0+c2l6ZTwqc2l6ZSkKKwl7CS8qIEJ1bXAgaXQgdXAgYSBiaW4gKi8KKwkJaWYoaWR4PFRIUkVBRENBQ0hFTUFYQklOUykKKwkJeworCQkJaWR4Kys7CisJCQliaW5zcHRyKz0yOworCQkJYmxrPSpiaW5zcHRyOworCQl9CisJfQorCWlmKGJsaykKKwl7CisJCWJsa3NpemU9YmxrLT5zaXplOyAvKm5lZGJsa3NpemUoYmxrKTsqLworCQlhc3NlcnQobmVkYmxrc2l6ZShibGspPj1ibGtzaXplKTsKKwkJYXNzZXJ0KGJsa3NpemU+PSpzaXplKTsKKwkJaWYoYmxrLT5uZXh0KQorCQkJYmxrLT5uZXh0LT5wcmV2PTA7CisJCSpiaW5zcHRyPWJsay0+bmV4dDsKKwkJaWYoISpiaW5zcHRyKQorCQkJYmluc3B0clsxXT0wOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwkJYmxrLT5tYWdpYz0wOworI2VuZGlmCisJCWFzc2VydChiaW5zcHRyWzBdIT1ibGsgJiYgYmluc3B0clsxXSE9YmxrKTsKKwkJYXNzZXJ0KG5lZGJsa3NpemUoYmxrKT49c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSAmJiBuZWRibGtzaXplKGJsayk8PVRIUkVBRENBQ0hFTUFYK0NIVU5LX09WRVJIRUFEKTsKKwkJLypwcmludGYoIm1hbGxvYzogJXAsICVwLCAlcCwgJWx1XG4iLCBwLCB0YywgYmxrLCAobG9uZykgc2l6ZSk7Ki8KKwkJcmV0PSh2b2lkICopIGJsazsKKwl9CisJKyt0Yy0+bWFsbG9jczsKKwlpZihyZXQpCisJeworCQlhc3NlcnQoYmxrc2l6ZT49KnNpemUpOworCQkrK3RjLT5zdWNjZXNzZXM7CisJCXRjLT5mcmVlSW5DYWNoZS09Ymxrc2l6ZTsKKwkJYXNzZXJ0KChsb25nKSB0Yy0+ZnJlZUluQ2FjaGU+PTApOworCX0KKyNpZiBkZWZpbmVkKERFQlVHKSAmJiAwCisJaWYoISh0Yy0+bWFsbG9jcyAmIDB4ZmZmKSkKKwl7CisJCXByaW50ZigiKioqIHRocmVhZGNhY2hlPSV1LCBtYWxsb2NzPSV1ICglZiksIGZyZWU9JXUgKCVmKSwgZnJlZUluQ2FjaGU9JXVcbiIsICh1bnNpZ25lZCBpbnQpIHRjLT50aHJlYWRpZCwgdGMtPm1hbGxvY3MsCisJCQkoZmxvYXQpIHRjLT5zdWNjZXNzZXMvdGMtPm1hbGxvY3MsIHRjLT5mcmVlcywgKGZsb2F0KSB0Yy0+c3VjY2Vzc2VzL3RjLT5mcmVlcywgKHVuc2lnbmVkIGludCkgdGMtPmZyZWVJbkNhY2hlKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNmdWxsc2FuaXR5Y2hlY2sodGMpOworI2VuZGlmCisJcmV0dXJuIHJldDsKK30KK3N0YXRpYyBOT0lOTElORSB2b2lkIFJlbGVhc2VGcmVlSW5DYWNoZShuZWRwb29sICpwLCB0aHJlYWRjYWNoZSAqdGMsIGludCBteW1zcGFjZSkgVEhST1dTUEVDCit7CisJdW5zaWduZWQgaW50IGFnZT1USFJFQURDQUNIRU1BWEZSRUVTUEFDRS84MTkyOworCS8qQUNRVUlSRV9MT0NLKCZwLT5tW215bXNwYWNlXS0+bXV0ZXgpOyovCisJd2hpbGUoYWdlICYmIHRjLT5mcmVlSW5DYWNoZT49VEhSRUFEQ0FDSEVNQVhGUkVFU1BBQ0UpCisJeworCQlSZW1vdmVDYWNoZUVudHJpZXMocCwgdGMsIGFnZSk7CisJCS8qcHJpbnRmKCIqKiogUmVtb3ZpbmcgY2FjaGUgZW50cmllcyBvbGRlciB0aGFuICV1ICgldSlcbiIsIGFnZSwgKHVuc2lnbmVkIGludCkgdGMtPmZyZWVJbkNhY2hlKTsqLworCQlhZ2U+Pj0xOworCX0KKwkvKlJFTEVBU0VfTE9DSygmcC0+bVtteW1zcGFjZV0tPm11dGV4KTsqLworfQorc3RhdGljIHZvaWQgdGhyZWFkY2FjaGVfZnJlZShuZWRwb29sICpwLCB0aHJlYWRjYWNoZSAqdGMsIGludCBteW1zcGFjZSwgdm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCit7CisJdW5zaWduZWQgaW50IGJlc3RzaXplOworCXVuc2lnbmVkIGludCBpZHg9c2l6ZTJiaW5pZHgoc2l6ZSk7CisJdGhyZWFkY2FjaGVibGsgKipiaW5zcHRyLCAqdGNrPSh0aHJlYWRjYWNoZWJsayAqKSBtZW07CisJYXNzZXJ0KHNpemU+PXNpemVvZih0aHJlYWRjYWNoZWJsaykgJiYgc2l6ZTw9VEhSRUFEQ0FDSEVNQVgrQ0hVTktfT1ZFUkhFQUQpOworI2lmZGVmIERFQlVHCisJewkvKiBNYWtlIHN1cmUgdGhpcyBpcyBhIHZhbGlkIG1lbW9yeSBibG9jayAqLworCSAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsobWVtKTsKKwkgICAgbXN0YXRlIGZtID0gZ2V0X21zdGF0ZV9mb3IocCk7CisJICAgIGlmICghb2tfbWFnaWMoZm0pKSB7CisJICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKwkgICAgICByZXR1cm47CisJICAgIH0KKwl9CisjZW5kaWYKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNmdWxsc2FuaXR5Y2hlY2sodGMpOworI2VuZGlmCisJLyogQ2FsY3VsYXRlIGJlc3QgZml0IGJpbiBzaXplICovCisJYmVzdHNpemU9MTw8KGlkeCs0KTsKKyNpZiAwCisJLyogRmluZXIgZ3JhaW5lZCBiaW4gZml0ICovCisJaWR4PDw9MTsKKwlpZihzaXplPmJlc3RzaXplKQorCXsKKwkJdW5zaWduZWQgaW50IGJpZ2dlcmJlc3RzaXplPWJlc3RzaXplK2Jlc3RzaXplPDwxOworCQlpZihzaXplPj1iaWdnZXJiZXN0c2l6ZSkKKwkJeworCQkJaWR4Kys7CisJCQliZXN0c2l6ZT1iaWdnZXJiZXN0c2l6ZTsKKwkJfQorCX0KKyNlbmRpZgorCWlmKGJlc3RzaXplIT1zaXplKQkvKiBkbG1hbGxvYyBjYW4gcm91bmQgdXAsIHNvIHdlIHJvdW5kIGRvd24gdG8gcHJlc2VydmUgaW5kZXhpbmcgKi8KKwkJc2l6ZT1iZXN0c2l6ZTsKKwliaW5zcHRyPSZ0Yy0+Ymluc1tpZHgqMl07CisJYXNzZXJ0KGlkeDw9VEhSRUFEQ0FDSEVNQVhCSU5TKTsKKwlpZih0Y2s9PSpiaW5zcHRyKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJBdHRlbXB0IHRvIGZyZWUgYWxyZWFkeSBmcmVlZCBtZW1vcnkgYmxvY2sgJXAgLSBhYm9ydGluZyFcbiIsIHRjayk7CisJCWFib3J0KCk7CisJfQorI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2stPm1hZ2ljPSoodW5zaWduZWQgaW50ICopICJORUROIjsKKyNlbmRpZgorCXRjay0+bGFzdFVzZWQ9Kyt0Yy0+ZnJlZXM7CisJdGNrLT5zaXplPSh1bnNpZ25lZCBpbnQpIHNpemU7CisJdGNrLT5uZXh0PSpiaW5zcHRyOworCXRjay0+cHJldj0wOworCWlmKHRjay0+bmV4dCkKKwkJdGNrLT5uZXh0LT5wcmV2PXRjazsKKwllbHNlCisJCWJpbnNwdHJbMV09dGNrOworCWFzc2VydCghKmJpbnNwdHIgfHwgKCpiaW5zcHRyKS0+c2l6ZT09dGNrLT5zaXplKTsKKwkqYmluc3B0cj10Y2s7CisJYXNzZXJ0KHRjaz09dGMtPmJpbnNbaWR4KjJdKTsKKwlhc3NlcnQodGMtPmJpbnNbaWR4KjIrMV09PXRjayB8fCBiaW5zcHRyWzBdLT5uZXh0LT5wcmV2PT10Y2spOworCS8qcHJpbnRmKCJmcmVlOiAlcCwgJXAsICVwLCAlbHVcbiIsIHAsIHRjLCBtZW0sIChsb25nKSBzaXplKTsqLworCXRjLT5mcmVlSW5DYWNoZSs9c2l6ZTsKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNmdWxsc2FuaXR5Y2hlY2sodGMpOworI2VuZGlmCisjaWYgMQorCWlmKHRjLT5mcmVlSW5DYWNoZT49VEhSRUFEQ0FDSEVNQVhGUkVFU1BBQ0UpCisJCVJlbGVhc2VGcmVlSW5DYWNoZShwLCB0YywgbXltc3BhY2UpOworI2VuZGlmCit9CisKKworCisKK3N0YXRpYyBOT0lOTElORSBpbnQgSW5pdFBvb2wobmVkcG9vbCAqcCwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgdGhyZWFkcykgVEhST1dTUEVDCit7CS8qIHRocmVhZHMgaXMgLTEgZm9yIHN5c3RlbSBwb29sICovCisJZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisJQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKwlpZihwLT50aHJlYWRzKSBnb3RvIGRvbmU7CisJaWYoSU5JVElBTF9MT0NLKCZwLT5tdXRleCkpIGdvdG8gZXJyOworCWlmKFRMU0FMTE9DKCZwLT5teWNhY2hlKSkgZ290byBlcnI7CisJaWYoIShwLT5tWzBdPShtc3RhdGUpIGNyZWF0ZV9tc3BhY2UoY2FwYWNpdHksIDEpKSkgZ290byBlcnI7CisJcC0+bVswXS0+ZXh0cD1wOworCXAtPnRocmVhZHM9KHRocmVhZHM8MSB8fCB0aHJlYWRzPk1BWFRIUkVBRFNJTlBPT0wpID8gTUFYVEhSRUFEU0lOUE9PTCA6IHRocmVhZHM7Citkb25lOgorCVJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisJcmV0dXJuIDE7CitlcnI6CisJaWYodGhyZWFkczwwKQorCQlhYm9ydCgpOwkJCS8qIElmIHlvdSBjYW4ndCBhbGxvY2F0ZSBmb3Igc3lzdGVtIHBvb2wsIHdlJ3JlIHNjcmV3ZWQgKi8KKwlEZXN0cm95Q2FjaGVzKHApOworCWlmKHAtPm1bMF0pCisJeworCQlkZXN0cm95X21zcGFjZShwLT5tWzBdKTsKKwkJcC0+bVswXT0wOworCX0KKwlpZihwLT5teWNhY2hlKQorCXsKKwkJaWYoVExTRlJFRShwLT5teWNhY2hlKSkgYWJvcnQoKTsKKwkJcC0+bXljYWNoZT0wOworCX0KKwlSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworCXJldHVybiAwOworfQorc3RhdGljIE5PSU5MSU5FIG1zdGF0ZSBGaW5kTVNwYWNlKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0YywgaW50ICpsYXN0VXNlZCwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQworewkvKiBHZXRzIGNhbGxlZCB3aGVuIHRocmVhZCdzIGxhc3QgdXNlZCBtc3BhY2UgaXMgaW4gdXNlLiBUaGUgc3RyYXRlZ3kKKwlpcyB0byBydW4gdGhyb3VnaCB0aGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIG1zcGFjZXMgbG9va2luZyBmb3IgYW4KKwl1bmxvY2tlZCBvbmUgYW5kIGlmIHdlIGZhaWwsIHdlIGNyZWF0ZSBhIG5ldyBvbmUgc28gbG9uZyBhcyB3ZSBkb24ndAorCWV4Y2VlZCBwLT50aHJlYWRzICovCisJaW50IG4sIGVuZDsKKwlmb3Iobj1lbmQ9Kmxhc3RVc2VkKzE7IHAtPm1bbl07IGVuZD0rK24pCisJeworCQlpZihUUllfTE9DSygmcC0+bVtuXS0+bXV0ZXgpKSBnb3RvIGZvdW5kOworCX0KKwlmb3Iobj0wOyBuPCpsYXN0VXNlZCAmJiBwLT5tW25dOyBuKyspCisJeworCQlpZihUUllfTE9DSygmcC0+bVtuXS0+bXV0ZXgpKSBnb3RvIGZvdW5kOworCX0KKwlpZihlbmQ8cC0+dGhyZWFkcykKKwl7CisJCW1zdGF0ZSB0ZW1wOworCQlpZighKHRlbXA9KG1zdGF0ZSkgY3JlYXRlX21zcGFjZShzaXplLCAxKSkpCisJCQlnb3RvIGJhZGV4aXQ7CisJCS8qIE5vdyB3ZSdyZSByZWFkeSB0byBtb2RpZnkgdGhlIGxpc3RzLCB3ZSBsb2NrICovCisJCUFDUVVJUkVfTE9DSygmcC0+bXV0ZXgpOworCQl3aGlsZShwLT5tW2VuZF0gJiYgZW5kPHAtPnRocmVhZHMpCisJCQllbmQrKzsKKwkJaWYoZW5kPj1wLT50aHJlYWRzKQorCQl7CS8qIERyYXQsIG11c3QgZGVzdHJveSBpdCBub3cgKi8KKwkJCVJFTEVBU0VfTE9DSygmcC0+bXV0ZXgpOworCQkJZGVzdHJveV9tc3BhY2UoKG1zcGFjZSkgdGVtcCk7CisJCQlnb3RvIGJhZGV4aXQ7CisJCX0KKwkJLyogV2UgcmVhbGx5IHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgZ29lcyBpbnRvIG1lbW9yeSBub3cgYnV0IHdlCisJCWhhdmUgdG8gYmUgY2FyZWZ1bCBvZiBicmVha2luZyBhbGlhc2luZyBydWxlcywgc28gd3JpdGUgaXQgdHdpY2UgKi8KKwkJeworCQkJdm9sYXRpbGUgc3RydWN0IG1hbGxvY19zdGF0ZSAqKl9tPSh2b2xhdGlsZSBzdHJ1Y3QgbWFsbG9jX3N0YXRlICoqKSAmcC0+bVtlbmRdOworCQkJKl9tPShwLT5tW2VuZF09dGVtcCk7CisJCX0KKwkJQUNRVUlSRV9MT0NLKCZwLT5tW2VuZF0tPm11dGV4KTsKKwkJLypwcmludGYoIkNyZWF0ZWQgbXNwYWNlIGlkeCAlZFxuIiwgZW5kKTsqLworCQlSRUxFQVNFX0xPQ0soJnAtPm11dGV4KTsKKwkJbj1lbmQ7CisJCWdvdG8gZm91bmQ7CisJfQorCS8qIExldCBpdCBsb2NrIG9uIHRoZSBsYXN0IG9uZSBpdCB1c2VkICovCitiYWRleGl0OgorCUFDUVVJUkVfTE9DSygmcC0+bVsqbGFzdFVzZWRdLT5tdXRleCk7CisJcmV0dXJuIHAtPm1bKmxhc3RVc2VkXTsKK2ZvdW5kOgorCSpsYXN0VXNlZD1uOworCWlmKHRjKQorCQl0Yy0+bXltc3BhY2U9bjsKKwllbHNlCisJeworCQlpZihUTFNTRVQocC0+bXljYWNoZSwgKHZvaWQgKikoc2l6ZV90KSgtKG4rMSkpKSkgYWJvcnQoKTsKKwl9CisJcmV0dXJuIHAtPm1bbl07Cit9CisKK25lZHBvb2wgKm5lZGNyZWF0ZXBvb2woc2l6ZV90IGNhcGFjaXR5LCBpbnQgdGhyZWFkcykgVEhST1dTUEVDCit7CisJbmVkcG9vbCAqcmV0OworCWlmKCEocmV0PShuZWRwb29sICopIG5lZHBjYWxsb2MoMCwgMSwgc2l6ZW9mKG5lZHBvb2wpKSkpIHJldHVybiAwOworCWlmKCFJbml0UG9vbChyZXQsIGNhcGFjaXR5LCB0aHJlYWRzKSkKKwl7CisJCW5lZHBmcmVlKDAsIHJldCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gcmV0OworfQordm9pZCBuZWRkZXN0cm95cG9vbChuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlpbnQgbjsKKwlBQ1FVSVJFX0xPQ0soJnAtPm11dGV4KTsKKwlEZXN0cm95Q2FjaGVzKHApOworCWZvcihuPTA7IHAtPm1bbl07IG4rKykKKwl7CisJCWRlc3Ryb3lfbXNwYWNlKHAtPm1bbl0pOworCQlwLT5tW25dPTA7CisJfQorCVJFTEVBU0VfTE9DSygmcC0+bXV0ZXgpOworCWlmKFRMU0ZSRUUocC0+bXljYWNoZSkpIGFib3J0KCk7CisJbmVkcGZyZWUoMCwgcCk7Cit9CisKK3ZvaWQgbmVkcHNldHZhbHVlKG5lZHBvb2wgKnAsIHZvaWQgKnYpIFRIUk9XU1BFQworeworCWlmKCFwKSB7IHA9JnN5c3Bvb2w7IGlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7IH0KKwlwLT51c2VydmFsdWU9djsKK30KK3ZvaWQgKm5lZGdldHZhbHVlKG5lZHBvb2wgKipwLCB2b2lkICptZW0pIFRIUk9XU1BFQworeworCW5lZHBvb2wgKm5wPTA7CisJbWNodW5rcHRyIG1jcD1tZW0yY2h1bmsobWVtKTsKKwltc3RhdGUgZm07CisJaWYoIShpc19hbGlnbmVkKGNodW5rMm1lbShtY3ApKSkgJiYgbWNwLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSByZXR1cm4gMDsKKwlpZighY2ludXNlKG1jcCkpIHJldHVybiAwOworCWlmKCFuZXh0X3BpbnVzZShtY3ApKSByZXR1cm4gMDsKKwlpZighaXNfbW1hcHBlZChtY3ApICYmICFwaW51c2UobWNwKSkKKwl7CisJCWlmKG5leHRfY2h1bmsocHJldl9jaHVuayhtY3ApKSE9bWNwKSByZXR1cm4gMDsKKwl9CisJZm09Z2V0X21zdGF0ZV9mb3IobWNwKTsKKwlpZighb2tfbWFnaWMoZm0pKSByZXR1cm4gMDsKKwlpZighb2tfYWRkcmVzcyhmbSwgbWNwKSkgcmV0dXJuIDA7CisJaWYoIWZtLT5leHRwKSByZXR1cm4gMDsKKwlucD0obmVkcG9vbCAqKSBmbS0+ZXh0cDsKKwlpZihwKSAqcD1ucDsKKwlyZXR1cm4gbnAtPnVzZXJ2YWx1ZTsKK30KKwordm9pZCBuZWRkaXNhYmxldGhyZWFkY2FjaGUobmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJaW50IG15Y2FjaGU7CisJaWYoIXApCisJeworCQlwPSZzeXNwb29sOworCQlpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOworCX0KKwlteWNhY2hlPShpbnQpKHNpemVfdCkgVExTR0VUKHAtPm15Y2FjaGUpOworCWlmKCFteWNhY2hlKQorCXsJLyogU2V0IHRvIG1zcGFjZSAwICovCisJCWlmKFRMU1NFVChwLT5teWNhY2hlLCAodm9pZCAqKS0xKSkgYWJvcnQoKTsKKwl9CisJZWxzZSBpZihteWNhY2hlPjApCisJewkvKiBTZXQgdG8gbGFzdCB1c2VkIG1zcGFjZSAqLworCQl0aHJlYWRjYWNoZSAqdGM9cC0+Y2FjaGVzW215Y2FjaGUtMV07CisjaWYgZGVmaW5lZChERUJVRykKKwkJcHJpbnRmKCJUaHJlYWRjYWNoZSB1dGlsaXNhdGlvbjogJWxmJSUgaW4gY2FjaGUgd2l0aCAlbGYlJSBsb3N0IHRvIG90aGVyIHRocmVhZHNcbiIsCisJCQkxMDAuMCp0Yy0+c3VjY2Vzc2VzL3RjLT5tYWxsb2NzLCAxMDAuMCooKGRvdWJsZSkgdGMtPm1hbGxvY3MtdGMtPmZyZWVzKS90Yy0+bWFsbG9jcyk7CisjZW5kaWYKKwkJaWYoVExTU0VUKHAtPm15Y2FjaGUsICh2b2lkICopKHNpemVfdCkoLXRjLT5teW1zcGFjZSkpKSBhYm9ydCgpOworCQl0Yy0+ZnJlZXMrKzsKKwkJUmVtb3ZlQ2FjaGVFbnRyaWVzKHAsIHRjLCAwKTsKKwkJYXNzZXJ0KCF0Yy0+ZnJlZUluQ2FjaGUpOworCQl0Yy0+bXltc3BhY2U9LTE7CisJCXRjLT50aHJlYWRpZD0wOworCQltc3BhY2VfZnJlZSgwLCBwLT5jYWNoZXNbbXljYWNoZS0xXSk7CisJCXAtPmNhY2hlc1tteWNhY2hlLTFdPTA7CisJfQorfQorCisjZGVmaW5lIEdFVE1TUEFDRShtLHAsdGMsbXMscyxhY3Rpb24pICAgICAgICAgICBcCisgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbXN0YXRlIG0gPSBHZXRNU3BhY2UoKHApLCh0YyksKG1zKSwocykpOyAgICBcCisgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUkVMRUFTRV9MT0NLKCZtLT5tdXRleCk7ICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKK3N0YXRpYyBGT1JDRUlOTElORSBtc3RhdGUgR2V0TVNwYWNlKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0YywgaW50IG15bXNwYWNlLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCit7CS8qIFJldHVybnMgYSBsb2NrZWQgYW5kIHJlYWR5IGZvciB1c2UgbXNwYWNlICovCisJbXN0YXRlIG09cC0+bVtteW1zcGFjZV07CisJYXNzZXJ0KG0pOworCWlmKCFUUllfTE9DSygmcC0+bVtteW1zcGFjZV0tPm11dGV4KSkgbT1GaW5kTVNwYWNlKHAsIHRjLCAmbXltc3BhY2UsIHNpemUpO1wKKwkvKmFzc2VydChJU19MT0NLRUQoJnAtPm1bbXltc3BhY2VdLT5tdXRleCkpOyovCisJcmV0dXJuIG07Cit9CitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCBHZXRUaHJlYWRDYWNoZShuZWRwb29sICoqcCwgdGhyZWFkY2FjaGUgKip0YywgaW50ICpteW1zcGFjZSwgc2l6ZV90ICpzaXplKSBUSFJPV1NQRUMKK3sKKwlpbnQgbXljYWNoZTsKKwlpZihzaXplICYmICpzaXplPHNpemVvZih0aHJlYWRjYWNoZWJsaykpICpzaXplPXNpemVvZih0aHJlYWRjYWNoZWJsayk7CisJaWYoISpwKQorCXsKKwkJKnA9JnN5c3Bvb2w7CisJCWlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7CisJfQorCW15Y2FjaGU9KGludCkoc2l6ZV90KSBUTFNHRVQoKCpwKS0+bXljYWNoZSk7CisJaWYobXljYWNoZT4wKQorCXsKKwkJKnRjPSgqcCktPmNhY2hlc1tteWNhY2hlLTFdOworCQkqbXltc3BhY2U9KCp0YyktPm15bXNwYWNlOworCX0KKwllbHNlIGlmKCFteWNhY2hlKQorCXsKKwkJKnRjPUFsbG9jQ2FjaGUoKnApOworCQlpZighKnRjKQorCQl7CS8qIERpc2FibGUgKi8KKwkJCWlmKFRMU1NFVCgoKnApLT5teWNhY2hlLCAodm9pZCAqKS0xKSkgYWJvcnQoKTsKKwkJCSpteW1zcGFjZT0wOworCQl9CisJCWVsc2UKKwkJCSpteW1zcGFjZT0oKnRjKS0+bXltc3BhY2U7CisJfQorCWVsc2UKKwl7CisJCSp0Yz0wOworCQkqbXltc3BhY2U9LW15Y2FjaGUtMTsKKwl9CisJYXNzZXJ0KCpteW1zcGFjZT49MCk7CisJYXNzZXJ0KChsb25nKShzaXplX3QpQ1VSUkVOVF9USFJFQUQ9PSgqdGMpLT50aHJlYWRpZCk7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCWlmKCp0YykKKwl7CisJCWlmKCoodW5zaWduZWQgaW50ICopIk5FRE1BTEMxIiE9KCp0YyktPm1hZ2ljMSB8fCAqKHVuc2lnbmVkIGludCAqKSJORURNQUxDMiIhPSgqdGMpLT5tYWdpYzIpCisJCXsKKwkJCWFib3J0KCk7CisJCX0KKwl9CisjZW5kaWYKK30KKwordm9pZCAqIG5lZHBtYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQworeworCXZvaWQgKnJldD0wOworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAmc2l6ZSk7CisjaWYgVEhSRUFEQ0FDSEVNQVgKKwlpZih0YyAmJiBzaXplPD1USFJFQURDQUNIRU1BWCkKKwl7CS8qIFVzZSB0aGUgdGhyZWFkIGNhY2hlICovCisJCXJldD10aHJlYWRjYWNoZV9tYWxsb2MocCwgdGMsICZzaXplKTsKKwl9CisjZW5kaWYKKwlpZighcmV0KQorCXsJLyogVXNlIHRoaXMgdGhyZWFkJ3MgbXNwYWNlICovCisJR0VUTVNQQUNFKG0sIHAsIHRjLCBteW1zcGFjZSwgc2l6ZSwKKwkJICByZXQ9bXNwYWNlX21hbGxvYyhtLCBzaXplKSk7CisJfQorCXJldHVybiByZXQ7Cit9Cit2b2lkICogbmVkcGNhbGxvYyhuZWRwb29sICpwLCBzaXplX3Qgbm8sIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sKKwlzaXplX3QgcnNpemU9c2l6ZSpubzsKKwl2b2lkICpyZXQ9MDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgJnJzaXplKTsKKyNpZiBUSFJFQURDQUNIRU1BWAorCWlmKHRjICYmIHJzaXplPD1USFJFQURDQUNIRU1BWCkKKwl7CS8qIFVzZSB0aGUgdGhyZWFkIGNhY2hlICovCisJCWlmKChyZXQ9dGhyZWFkY2FjaGVfbWFsbG9jKHAsIHRjLCAmcnNpemUpKSkKKwkJCW1lbXNldChyZXQsIDAsIHJzaXplKTsKKwl9CisjZW5kaWYKKwlpZighcmV0KQorCXsJLyogVXNlIHRoaXMgdGhyZWFkJ3MgbXNwYWNlICovCisJR0VUTVNQQUNFKG0sIHAsIHRjLCBteW1zcGFjZSwgcnNpemUsCisJCSAgcmV0PW1zcGFjZV9jYWxsb2MobSwgMSwgcnNpemUpKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgKiBuZWRwcmVhbGxvYyhuZWRwb29sICpwLCB2b2lkICptZW0sIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sKKwl2b2lkICpyZXQ9MDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCWlmKCFtZW0pIHJldHVybiBuZWRwbWFsbG9jKHAsIHNpemUpOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgJnNpemUpOworI2lmIFRIUkVBRENBQ0hFTUFYCisJaWYodGMgJiYgc2l6ZSAmJiBzaXplPD1USFJFQURDQUNIRU1BWCkKKwl7CS8qIFVzZSB0aGUgdGhyZWFkIGNhY2hlICovCisJCXNpemVfdCBtZW1zaXplPW5lZGJsa3NpemUobWVtKTsKKwkJYXNzZXJ0KG1lbXNpemUpOworCQlpZigocmV0PXRocmVhZGNhY2hlX21hbGxvYyhwLCB0YywgJnNpemUpKSkKKwkJeworCQkJbWVtY3B5KHJldCwgbWVtLCBtZW1zaXplPHNpemUgPyBtZW1zaXplIDogc2l6ZSk7CisJCQlpZihtZW1zaXplPD1USFJFQURDQUNIRU1BWCkKKwkJCQl0aHJlYWRjYWNoZV9mcmVlKHAsIHRjLCBteW1zcGFjZSwgbWVtLCBtZW1zaXplKTsKKwkJCWVsc2UKKwkJCQltc3BhY2VfZnJlZSgwLCBtZW0pOworCQl9CisJfQorI2VuZGlmCisJaWYoIXJldCkKKwl7CS8qIFJlYWxsb2NzIGFsd2F5cyBoYXBwZW4gaW4gdGhlIG1zcGFjZSB0aGV5IGhhcHBlbmVkIGluLCBzbyBza2lwCisJCWxvY2tpbmcgdGhlIHByZWZlcnJlZCBtc3BhY2UgZm9yIHRoaXMgdGhyZWFkICovCisJCXJldD1tc3BhY2VfcmVhbGxvYygwLCBtZW0sIHNpemUpOworCX0KKwlyZXR1cm4gcmV0OworfQordm9pZCAgIG5lZHBmcmVlKG5lZHBvb2wgKnAsIHZvaWQgKm1lbSkgVEhST1dTUEVDCit7CS8qIEZyZWVzIGFsd2F5cyBoYXBwZW4gaW4gdGhlIG1zcGFjZSB0aGV5IGhhcHBlbmVkIGluLCBzbyBza2lwCisJbG9ja2luZyB0aGUgcHJlZmVycmVkIG1zcGFjZSBmb3IgdGhpcyB0aHJlYWQgKi8KKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCXNpemVfdCBtZW1zaXplOworCWFzc2VydChtZW0pOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgMCk7CisjaWYgVEhSRUFEQ0FDSEVNQVgKKwltZW1zaXplPW5lZGJsa3NpemUobWVtKTsKKwlhc3NlcnQobWVtc2l6ZSk7CisJaWYobWVtICYmIHRjICYmIG1lbXNpemU8PShUSFJFQURDQUNIRU1BWCtDSFVOS19PVkVSSEVBRCkpCisJCXRocmVhZGNhY2hlX2ZyZWUocCwgdGMsIG15bXNwYWNlLCBtZW0sIG1lbXNpemUpOworCWVsc2UKKyNlbmRpZgorCQltc3BhY2VfZnJlZSgwLCBtZW0pOworfQordm9pZCAqIG5lZHBtZW1hbGlnbihuZWRwb29sICpwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIFRIUk9XU1BFQworeworCXZvaWQgKnJldDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgJmJ5dGVzKTsKKwl7CS8qIFVzZSB0aGlzIHRocmVhZCdzIG1zcGFjZSAqLworCUdFVE1TUEFDRShtLCBwLCB0YywgbXltc3BhY2UsIGJ5dGVzLAorCQkgIHJldD1tc3BhY2VfbWVtYWxpZ24obSwgYWxpZ25tZW50LCBieXRlcykpOworCX0KKwlyZXR1cm4gcmV0OworfQorI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIG5lZHBtYWxsaW5mbyhuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlpbnQgbjsKKwlzdHJ1Y3QgbWFsbGluZm8gcmV0PXswfTsKKwlpZighcCkgeyBwPSZzeXNwb29sOyBpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOyB9CisJZm9yKG49MDsgcC0+bVtuXTsgbisrKQorCXsKKwkJc3RydWN0IG1hbGxpbmZvIHQ9bXNwYWNlX21hbGxpbmZvKHAtPm1bbl0pOworCQlyZXQuYXJlbmErPXQuYXJlbmE7CisJCXJldC5vcmRibGtzKz10Lm9yZGJsa3M7CisJCXJldC5oYmxraGQrPXQuaGJsa2hkOworCQlyZXQudXNtYmxrcys9dC51c21ibGtzOworCQlyZXQudW9yZGJsa3MrPXQudW9yZGJsa3M7CisJCXJldC5mb3JkYmxrcys9dC5mb3JkYmxrczsKKwkJcmV0LmtlZXBjb3N0Kz10LmtlZXBjb3N0OworCX0KKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCitpbnQgICAgbmVkcG1hbGxvcHQobmVkcG9vbCAqcCwgaW50IHBhcm5vLCBpbnQgdmFsdWUpIFRIUk9XU1BFQworeworCXJldHVybiBtc3BhY2VfbWFsbG9wdChwYXJubywgdmFsdWUpOworfQoraW50ICAgIG5lZHBtYWxsb2NfdHJpbShuZWRwb29sICpwLCBzaXplX3QgcGFkKSBUSFJPV1NQRUMKK3sKKwlpbnQgbiwgcmV0PTA7CisJaWYoIXApIHsgcD0mc3lzcG9vbDsgaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsgfQorCWZvcihuPTA7IHAtPm1bbl07IG4rKykKKwl7CisJCXJldCs9bXNwYWNlX3RyaW0ocC0+bVtuXSwgcGFkKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgICBuZWRwbWFsbG9jX3N0YXRzKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCWludCBuOworCWlmKCFwKSB7IHA9JnN5c3Bvb2w7IGlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7IH0KKwlmb3Iobj0wOyBwLT5tW25dOyBuKyspCisJeworCQltc3BhY2VfbWFsbG9jX3N0YXRzKHAtPm1bbl0pOworCX0KK30KK3NpemVfdCBuZWRwbWFsbG9jX2Zvb3RwcmludChuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlzaXplX3QgcmV0PTA7CisJaW50IG47CisJaWYoIXApIHsgcD0mc3lzcG9vbDsgaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsgfQorCWZvcihuPTA7IHAtPm1bbl07IG4rKykKKwl7CisJCXJldCs9bXNwYWNlX2Zvb3RwcmludChwLT5tW25dKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgKipuZWRwaW5kZXBlbmRlbnRfY2FsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBlbGVtc25vLCBzaXplX3QgZWxlbXNpemUsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQworeworCXZvaWQgKipyZXQ7CisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsICZlbGVtc2l6ZSk7CisgICAgR0VUTVNQQUNFKG0sIHAsIHRjLCBteW1zcGFjZSwgZWxlbXNubyplbGVtc2l6ZSwKKwkgICAgICByZXQ9bXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtLCBlbGVtc25vLCBlbGVtc2l6ZSwgY2h1bmtzKSk7CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgKipuZWRwaW5kZXBlbmRlbnRfY29tYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IGVsZW1zLCBzaXplX3QgKnNpemVzLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUMKK3sKKwl2b2lkICoqcmV0OworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisJc2l6ZV90IGksICphZGp1c3RlZHNpemVzPShzaXplX3QgKikgYWxsb2NhKGVsZW1zKnNpemVvZihzaXplX3QpKTsKKwlpZighYWRqdXN0ZWRzaXplcykgcmV0dXJuIDA7CisJZm9yKGk9MDsgaTxlbGVtczsgaSsrKQorCQlhZGp1c3RlZHNpemVzW2ldPXNpemVzW2ldPHNpemVvZih0aHJlYWRjYWNoZWJsaykgPyBzaXplb2YodGhyZWFkY2FjaGVibGspIDogc2l6ZXNbaV07CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAwKTsKKwlHRVRNU1BBQ0UobSwgcCwgdGMsIG15bXNwYWNlLCAwLAorCSAgICAgIHJldD1tc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobSwgZWxlbXMsIGFkanVzdGVkc2l6ZXMsIGNodW5rcykpOworCXJldHVybiByZXQ7Cit9CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5oIGIvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTYwZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuaApAQCAtMCwwICsxLDE4MCBAQAorLyogbmVkYWxsb2MsIGFuIGFsdGVybmF0aXZlIG1hbGxvYyBpbXBsZW1lbnRhdGlvbiBmb3IgbXVsdGlwbGUgdGhyZWFkcyB3aXRob3V0Citsb2NrIGNvbnRlbnRpb24gYmFzZWQgb24gZGxtYWxsb2MgdjIuOC4zLiAoQykgMjAwNSBOaWFsbCBEb3VnbGFzCisKK0Jvb3N0IFNvZnR3YXJlIExpY2Vuc2UgLSBWZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKK3RoaXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKK1NvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCitkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKKworVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRpbmcKK3RoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCittdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKK2FsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUKK3dvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQorYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUgQkUgTElBQkxFCitGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKK0FSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorKi8KKworI2lmbmRlZiBORURNQUxMT0NfSAorI2RlZmluZSBORURNQUxMT0NfSAorCisKKy8qIFNlZSBtYWxsb2MuYy5oIGZvciB3aGF0IGVhY2ggZnVuY3Rpb24gZG9lcy4KKworUkVQTEFDRV9TWVNURU1fQUxMT0NBVE9SIGNhdXNlcyBuZWRhbGxvYydzIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgbWFsbG9jLAorZnJlZSBldGMuIGluc3RlYWQgb2YgbmVkbWFsbG9jLCBuZWRmcmVlIGV0Yy4gWW91IG1heSBvciBtYXkgbm90IHdhbnQgdGhpcy4KKworTk9fTkVEX05BTUVTUEFDRSBwcmV2ZW50cyB0aGUgZnVuY3Rpb25zIGZyb20gYmVpbmcgZGVmaW5lZCBpbiB0aGUgbmVkYWxsb2MKK25hbWVzcGFjZSB3aGVuIGluIEMrKyAodXNlcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSBpbnN0ZWFkKS4KKworRVhUU1BFQyBjYW4gYmUgZGVmaW5lZCB0byBiZSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgb3IKK19fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBvciB3aGF0ZXZlciB5b3UgbGlrZS4gSXQgZGVmYXVsdHMKK3RvIGV4dGVybi4KKworVVNFX0xPQ0tTIGNhbiBiZSAyIGlmIHlvdSB3YW50IHRvIGRlZmluZSB5b3VyIG93biBNTE9DS19ULCBJTklUSUFMX0xPQ0ssCitBQ1FVSVJFX0xPQ0ssIFJFTEVBU0VfTE9DSywgVFJZX0xPQ0ssIElTX0xPQ0tFRCBhbmQgTlVMTF9MT0NLX0lOSVRJQUxJWkVSLgorCisqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+ICAgLyogZm9yIHNpemVfdCAqLworCisjaWZuZGVmIEVYVFNQRUMKKyAjZGVmaW5lIEVYVFNQRUMgZXh0ZXJuCisjZW5kaWYKKworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xNDAwCisgI2RlZmluZSBNQUxMT0NBVFRSIF9fZGVjbHNwZWMocmVzdHJpY3QpCisjZW5kaWYKKyNpZmRlZiBfX0dOVUNfXworICNkZWZpbmUgTUFMTE9DQVRUUiBfX2F0dHJpYnV0ZV9fICgobWFsbG9jKSkKKyNlbmRpZgorI2lmbmRlZiBNQUxMT0NBVFRSCisgI2RlZmluZSBNQUxMT0NBVFRSCisjZW5kaWYKKworI2lmZGVmIFJFUExBQ0VfU1lTVEVNX0FMTE9DQVRPUgorICNkZWZpbmUgbmVkbWFsbG9jICAgICAgICAgICAgICAgbWFsbG9jCisgI2RlZmluZSBuZWRjYWxsb2MgICAgICAgICAgICAgICBjYWxsb2MKKyAjZGVmaW5lIG5lZHJlYWxsb2MgICAgICAgICAgICAgIHJlYWxsb2MKKyAjZGVmaW5lIG5lZGZyZWUgICAgICAgICAgICAgICAgIGZyZWUKKyAjZGVmaW5lIG5lZG1lbWFsaWduICAgICAgICAgICAgIG1lbWFsaWduCisgI2RlZmluZSBuZWRtYWxsaW5mbyAgICAgICAgICAgICBtYWxsaW5mbworICNkZWZpbmUgbmVkbWFsbG9wdCAgICAgICAgICAgICAgbWFsbG9wdAorICNkZWZpbmUgbmVkbWFsbG9jX3RyaW0gICAgICAgICAgbWFsbG9jX3RyaW0KKyAjZGVmaW5lIG5lZG1hbGxvY19zdGF0cyAgICAgICAgIG1hbGxvY19zdGF0cworICNkZWZpbmUgbmVkbWFsbG9jX2Zvb3RwcmludCAgICAgbWFsbG9jX2Zvb3RwcmludAorICNkZWZpbmUgbmVkaW5kZXBlbmRlbnRfY2FsbG9jICAgaW5kZXBlbmRlbnRfY2FsbG9jCisgI2RlZmluZSBuZWRpbmRlcGVuZGVudF9jb21hbGxvYyBpbmRlcGVuZGVudF9jb21hbGxvYworICNpZmRlZiBfTVNDX1ZFUgorICAjZGVmaW5lIG5lZGJsa3NpemUgICAgICAgICAgICAgIF9tc2l6ZQorICNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgTk9fTUFMTElORk8KKyNkZWZpbmUgTk9fTUFMTElORk8gMAorI2VuZGlmCisKKyNpZiAhTk9fTUFMTElORk8KK3N0cnVjdCBtYWxsaW5mbzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyAjaWYgIWRlZmluZWQoTk9fTkVEX05BTUVTUEFDRSkKK25hbWVzcGFjZSBuZWRhbGxvYyB7CisgI2Vsc2UKK2V4dGVybiAiQyIgeworICNlbmRpZgorICNkZWZpbmUgVEhST1dTUEVDIHRocm93KCkKKyNlbHNlCisgI2RlZmluZSBUSFJPV1NQRUMKKyNlbmRpZgorCisvKiBUaGVzZSBhcmUgdGhlIGdsb2JhbCBmdW5jdGlvbnMgKi8KKworLyogR2V0cyB0aGUgdXNhYmxlIHNpemUgb2YgYW4gYWxsb2NhdGVkIGJsb2NrLiBOb3RlIHRoaXMgd2lsbCBhbHdheXMgYmUgYmlnZ2VyIHRoYW4gd2hhdCB3YXMKK2Fza2VkIGZvciBkdWUgdG8gcm91bmRpbmcgZXRjLgorKi8KK0VYVFNQRUMgc2l6ZV90IG5lZGJsa3NpemUodm9pZCAqbWVtKSBUSFJPV1NQRUM7CisKK0VYVFNQRUMgdm9pZCBuZWRzZXR2YWx1ZSh2b2lkICp2KSBUSFJPV1NQRUM7CisKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkbWFsbG9jKHNpemVfdCBzaXplKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZGNhbGxvYyhzaXplX3Qgbm8sIHNpemVfdCBzaXplKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZHJlYWxsb2Modm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDOworRVhUU1BFQyB2b2lkICAgbmVkZnJlZSh2b2lkICptZW0pIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSBUSFJPV1NQRUM7CisjaWYgIU5PX01BTExJTkZPCitFWFRTUEVDIHN0cnVjdCBtYWxsaW5mbyBuZWRtYWxsaW5mbyh2b2lkKSBUSFJPV1NQRUM7CisjZW5kaWYKK0VYVFNQRUMgaW50ICAgIG5lZG1hbGxvcHQoaW50IHBhcm5vLCBpbnQgdmFsdWUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgaW50ICAgIG5lZG1hbGxvY190cmltKHNpemVfdCBwYWQpIFRIUk9XU1BFQzsKK0VYVFNQRUMgdm9pZCAgIG5lZG1hbGxvY19zdGF0cyh2b2lkKSBUSFJPV1NQRUM7CitFWFRTUEVDIHNpemVfdCBuZWRtYWxsb2NfZm9vdHByaW50KHZvaWQpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICoqbmVkaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBlbGVtc25vLCBzaXplX3QgZWxlbXNpemUsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICoqbmVkaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IGVsZW1zLCBzaXplX3QgKnNpemVzLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUM7CisKKy8qIFRoZXNlIGFyZSB0aGUgcG9vbCBmdW5jdGlvbnMgKi8KK3N0cnVjdCBuZWRwb29sX3Q7Cit0eXBlZGVmIHN0cnVjdCBuZWRwb29sX3QgbmVkcG9vbDsKKworLyogQ3JlYXRlcyBhIG1lbW9yeSBwb29sIGZvciB1c2Ugd2l0aCB0aGUgbmVkcCogZnVuY3Rpb25zIGJlbG93LgorQ2FwYWNpdHkgaXMgaG93IG11Y2ggdG8gYWxsb2NhdGUgaW1tZWRpYXRlbHkgKGlmIHlvdSBrbm93IHlvdSdsbCBiZSBhbGxvY2F0aW5nIGEgbG90CitvZiBtZW1vcnkgdmVyeSBzb29uKSB3aGljaCB5b3UgY2FuIGxlYXZlIGF0IHplcm8uIFRocmVhZHMgc3BlY2lmaWVzIGhvdyBtYW55IHRocmVhZHMKK3dpbGwgKm5vcm1hbGx5KiBiZSBhY2Nlc3NpbmcgdGhlIHBvb2wgY29uY3VycmVudGx5LiBTZXR0aW5nIHRoaXMgdG8gemVybyBtZWFucyBpdAorZXh0ZW5kcyBvbiBkZW1hbmQsIGJ1dCBiZSBjYXJlZnVsIG9mIHRoaXMgYXMgaXQgY2FuIHJhcGlkbHkgY29uc3VtZSBzeXN0ZW0gcmVzb3VyY2VzCit3aGVyZSBidXJzdHMgb2YgY29uY3VycmVudCB0aHJlYWRzIHVzZSBhIHBvb2wgYXQgb25jZS4KKyovCitFWFRTUEVDIE1BTExPQ0FUVFIgbmVkcG9vbCAqbmVkY3JlYXRlcG9vbChzaXplX3QgY2FwYWNpdHksIGludCB0aHJlYWRzKSBUSFJPV1NQRUM7CisKKy8qIERlc3Ryb3lzIGEgbWVtb3J5IHBvb2wgcHJldmlvdXNseSBjcmVhdGVkIGJ5IG5lZGNyZWF0ZXBvb2woKS4KKyovCitFWFRTUEVDIHZvaWQgbmVkZGVzdHJveXBvb2wobmVkcG9vbCAqcCkgVEhST1dTUEVDOworCisvKiBTZXRzIGEgdmFsdWUgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgcG9vbC4gWW91IGNhbiByZXRyaWV2ZSB0aGlzIHZhbHVlIGJ5IHBhc3NpbmcKK2FueSBtZW1vcnkgYmxvY2sgYWxsb2NhdGVkIGZyb20gdGhhdCBwb29sLgorKi8KK0VYVFNQRUMgdm9pZCBuZWRwc2V0dmFsdWUobmVkcG9vbCAqcCwgdm9pZCAqdikgVEhST1dTUEVDOworLyogR2V0cyBhIHByZXZpb3VzbHkgc2V0IHZhbHVlIHVzaW5nIG5lZHBzZXR2YWx1ZSgpIG9yIHplcm8gaWYgbWVtb3J5IGlzIHVua25vd24uCitPcHRpb25hbGx5IGNhbiBhbHNvIHJldHJpZXZlIHBvb2wuCisqLworRVhUU1BFQyB2b2lkICpuZWRnZXR2YWx1ZShuZWRwb29sICoqcCwgdm9pZCAqbWVtKSBUSFJPV1NQRUM7CisKKy8qIERpc2FibGVzIHRoZSB0aHJlYWQgY2FjaGUgZm9yIHRoZSBjYWxsaW5nIHRocmVhZCwgcmV0dXJuaW5nIGFueSBleGlzdGluZyBjYWNoZQorZGF0YSB0byB0aGUgY2VudHJhbCBwb29sLgorKi8KK0VYVFNQRUMgdm9pZCBuZWRkaXNhYmxldGhyZWFkY2FjaGUobmVkcG9vbCAqcCkgVEhST1dTUEVDOworCitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZHBtYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcGNhbGxvYyhuZWRwb29sICpwLCBzaXplX3Qgbm8sIHNpemVfdCBzaXplKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZHByZWFsbG9jKG5lZHBvb2wgKnAsIHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgdm9pZCAgIG5lZHBmcmVlKG5lZHBvb2wgKnAsIHZvaWQgKm1lbSkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRwbWVtYWxpZ24obmVkcG9vbCAqcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSBUSFJPV1NQRUM7CisjaWYgIU5PX01BTExJTkZPCitFWFRTUEVDIHN0cnVjdCBtYWxsaW5mbyBuZWRwbWFsbGluZm8obmVkcG9vbCAqcCkgVEhST1dTUEVDOworI2VuZGlmCitFWFRTUEVDIGludCAgICBuZWRwbWFsbG9wdChuZWRwb29sICpwLCBpbnQgcGFybm8sIGludCB2YWx1ZSkgVEhST1dTUEVDOworRVhUU1BFQyBpbnQgICAgbmVkcG1hbGxvY190cmltKG5lZHBvb2wgKnAsIHNpemVfdCBwYWQpIFRIUk9XU1BFQzsKK0VYVFNQRUMgdm9pZCAgIG5lZHBtYWxsb2Nfc3RhdHMobmVkcG9vbCAqcCkgVEhST1dTUEVDOworRVhUU1BFQyBzaXplX3QgbmVkcG1hbGxvY19mb290cHJpbnQobmVkcG9vbCAqcCkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKipuZWRwaW5kZXBlbmRlbnRfY2FsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBlbGVtc25vLCBzaXplX3QgZWxlbXNpemUsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICoqbmVkcGluZGVwZW5kZW50X2NvbWFsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBlbGVtcywgc2l6ZV90ICpzaXplcywgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDOworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisjdW5kZWYgTUFMTE9DQVRUUgorI3VuZGVmIEVYVFNQRUMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvb2JzdGFjay5jIGIvY29tcGF0L29ic3RhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2NkNWMxCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L29ic3RhY2suYwpAQCAtMCwwICsxLDQxMyBAQAorLyogb2JzdGFjay5jIC0gc3Vicm91dGluZXMgdXNlZCBpbXBsaWNpdGx5IGJ5IG9iamVjdCBzdGFjayBtYWNyb3MKKyAgIENvcHlyaWdodCAoQykgMTk4OCwgMTk4OSwgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NiwgMTk5NywgMTk5OCwKKyAgIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSA8Z2V0dGV4dC5oPgorI2luY2x1ZGUgIm9ic3RhY2suaCIKKworLyogTk9URSBCRUZPUkUgTU9ESUZZSU5HIFRISVMgRklMRTogVGhpcyB2ZXJzaW9uIG51bWJlciBtdXN0IGJlCisgICBpbmNyZW1lbnRlZCB3aGVuZXZlciBjYWxsZXJzIGNvbXBpbGVkIHVzaW5nIGFuIG9sZCBvYnN0YWNrLmggY2FuIG5vCisgICBsb25nZXIgcHJvcGVybHkgY2FsbCB0aGUgZnVuY3Rpb25zIGluIHRoaXMgb2JzdGFjay5jLiAgKi8KKyNkZWZpbmUgT0JTVEFDS19JTlRFUkZBQ0VfVkVSU0lPTiAxCisKKy8qIENvbW1lbnQgb3V0IGFsbCB0aGlzIGNvZGUgaWYgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5LCBhbmQgYXJlIG5vdAorICAgYWN0dWFsbHkgY29tcGlsaW5nIHRoZSBsaWJyYXJ5IGl0c2VsZiwgYW5kIHRoZSBpbnN0YWxsZWQgbGlicmFyeQorICAgc3VwcG9ydHMgdGhlIHNhbWUgbGlicmFyeSBpbnRlcmZhY2Ugd2UgZG8uICBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgR05VCisgICBDIExpYnJhcnksIGJ1dCBhbHNvIGluY2x1ZGVkIGluIG1hbnkgb3RoZXIgR05VIGRpc3RyaWJ1dGlvbnMuICBDb21waWxpbmcKKyAgIGFuZCBsaW5raW5nIGluIHRoaXMgY29kZSBpcyBhIHdhc3RlIHdoZW4gdXNpbmcgdGhlIEdOVSBDIGxpYnJhcnkKKyAgIChlc3BlY2lhbGx5IGlmIGl0IGlzIGEgc2hhcmVkIGxpYnJhcnkpLiAgUmF0aGVyIHRoYW4gaGF2aW5nIGV2ZXJ5IEdOVQorICAgcHJvZ3JhbSB1bmRlcnN0YW5kIGBjb25maWd1cmUgLS13aXRoLWdudS1saWJjJyBhbmQgb21pdCB0aGUgb2JqZWN0CisgICBmaWxlcywgaXQgaXMgc2ltcGxlciB0byBqdXN0IGRvIHRoaXMgaW4gdGhlIHNvdXJjZSBmb3IgZWFjaCBzdWNoIGZpbGUuICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4JCS8qIFJhbmRvbSB0aGluZyB0byBnZXQgX19HTlVfTElCUkFSWV9fLiAgKi8KKyNpZiAhZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIF9fR05VX0xJQlJBUllfXyAmJiBfX0dOVV9MSUJSQVJZX18gPiAxCisjIGluY2x1ZGUgPGdudS12ZXJzaW9ucy5oPgorIyBpZiBfR05VX09CU1RBQ0tfSU5URVJGQUNFX1ZFUlNJT04gPT0gT0JTVEFDS19JTlRFUkZBQ0VfVkVSU0lPTgorIyAgZGVmaW5lIEVMSURFX0NPREUKKyMgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZm5kZWYgRUxJREVfQ09ERQorCisKKyMgaWYgSEFWRV9JTlRUWVBFU19ICisjICBpbmNsdWRlIDxpbnR0eXBlcy5oPgorIyBlbmRpZgorIyBpZiBIQVZFX1NURElOVF9IIHx8IGRlZmluZWQgX0xJQkMKKyMgIGluY2x1ZGUgPHN0ZGludC5oPgorIyBlbmRpZgorCisvKiBEZXRlcm1pbmUgZGVmYXVsdCBhbGlnbm1lbnQuICAqLwordW5pb24gZm9vcm91bmQKK3sKKyAgdWludG1heF90IGk7CisgIGxvbmcgZG91YmxlIGQ7CisgIHZvaWQgKnA7Cit9Oworc3RydWN0IGZvb2FsaWduCit7CisgIGNoYXIgYzsKKyAgdW5pb24gZm9vcm91bmQgdTsKK307CisvKiBJZiBtYWxsb2Mgd2VyZSByZWFsbHkgc21hcnQsIGl0IHdvdWxkIHJvdW5kIGFkZHJlc3NlcyB0byBERUZBVUxUX0FMSUdOTUVOVC4KKyAgIEJ1dCBpbiBmYWN0IGl0IG1pZ2h0IGJlIGxlc3Mgc21hcnQgYW5kIHJvdW5kIGFkZHJlc3NlcyB0byBhcyBtdWNoIGFzCisgICBERUZBVUxUX1JPVU5ESU5HLiAgU28gd2UgcHJlcGFyZSBmb3IgaXQgdG8gZG8gdGhhdC4gICovCitlbnVtCisgIHsKKyAgICBERUZBVUxUX0FMSUdOTUVOVCA9IG9mZnNldG9mIChzdHJ1Y3QgZm9vYWxpZ24sIHUpLAorICAgIERFRkFVTFRfUk9VTkRJTkcgPSBzaXplb2YgKHVuaW9uIGZvb3JvdW5kKQorICB9OworCisvKiBXaGVuIHdlIGNvcHkgYSBsb25nIGJsb2NrIG9mIGRhdGEsIHRoaXMgaXMgdGhlIHVuaXQgdG8gZG8gaXQgd2l0aC4KKyAgIE9uIHNvbWUgbWFjaGluZXMsIGNvcHlpbmcgc3VjY2Vzc2l2ZSBpbnRzIGRvZXMgbm90IHdvcms7CisgICBpbiBzdWNoIGEgY2FzZSwgcmVkZWZpbmUgQ09QWUlOR19VTklUIHRvIGBsb25nJyAoaWYgdGhhdCB3b3JrcykKKyAgIG9yIGBjaGFyJyBhcyBhIGxhc3QgcmVzb3J0LiAgKi8KKyMgaWZuZGVmIENPUFlJTkdfVU5JVAorIyAgZGVmaW5lIENPUFlJTkdfVU5JVCBpbnQKKyMgZW5kaWYKKworCisvKiBUaGUgZnVuY3Rpb25zIGFsbG9jYXRpbmcgbW9yZSByb29tIGJ5IGNhbGxpbmcgYG9ic3RhY2tfY2h1bmtfYWxsb2MnCisgICBqdW1wIHRvIHRoZSBoYW5kbGVyIHBvaW50ZWQgdG8gYnkgYG9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXInLgorICAgVGhpcyBjYW4gYmUgc2V0IHRvIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIHdoaWNoIHNob3VsZCBlaXRoZXIKKyAgIGFib3J0IGdyYWNlZnVsbHkgb3IgdXNlIGxvbmdqdW1wIC0gYnV0IHNob3VsZG4ndCByZXR1cm4uICBUaGlzCisgICB2YXJpYWJsZSBieSBkZWZhdWx0IHBvaW50cyB0byB0aGUgaW50ZXJuYWwgZnVuY3Rpb24KKyAgIGBwcmludF9hbmRfYWJvcnQnLiAgKi8KK3N0YXRpYyB2b2lkIHByaW50X2FuZF9hYm9ydCAodm9pZCk7Cit2b2lkICgqb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlcikgKHZvaWQpID0gcHJpbnRfYW5kX2Fib3J0OworCisjIGlmZGVmIF9MSUJDCisjICBpZiBTSExJQl9DT01QQVQgKGxpYmMsIEdMSUJDXzJfMCwgR0xJQkNfMl8zXzQpCisvKiBBIGxvb29uZyB0aW1lIGFnbyAoYmVmb3JlIDE5OTQsIGFueXdheTsgd2UncmUgbm90IHN1cmUpIHRoaXMgZ2xvYmFsIHZhcmlhYmxlCisgICB3YXMgdXNlZCBieSBub24tR05VLUMgbWFjcm9zIHRvIGF2b2lkIG11bHRpcGxlIGV2YWx1YXRpb24uICBUaGUgR05VIEMKKyAgIGxpYnJhcnkgc3RpbGwgZXhwb3J0cyBpdCBiZWNhdXNlIHNvbWVib2R5IG1pZ2h0IHVzZSBpdC4gICovCitzdHJ1Y3Qgb2JzdGFjayAqX29ic3RhY2tfY29tcGF0OworY29tcGF0X3N5bWJvbCAobGliYywgX29ic3RhY2tfY29tcGF0LCBfb2JzdGFjaywgR0xJQkNfMl8wKTsKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIERlZmluZSBhIG1hY3JvIHRoYXQgZWl0aGVyIGNhbGxzIGZ1bmN0aW9ucyB3aXRoIHRoZSB0cmFkaXRpb25hbCBtYWxsb2MvZnJlZQorICAgY2FsbGluZyBpbnRlcmZhY2UsIG9yIGNhbGxzIGZ1bmN0aW9ucyB3aXRoIHRoZSBtbWFsbG9jL21mcmVlIGludGVyZmFjZQorICAgKHRoYXQgYWRkcyBhbiBleHRyYSBmaXJzdCBhcmd1bWVudCksIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB1c2VfZXh0cmFfYXJnLgorICAgRm9yIGZyZWUsIGRvIG5vdCB1c2UgPzosIHNpbmNlIHNvbWUgY29tcGlsZXJzLCBsaWtlIHRoZSBNSVBTIGNvbXBpbGVycywKKyAgIGRvIG5vdCBhbGxvdyAoZXhwcikgPyB2b2lkIDogdm9pZC4gICovCisKKyMgZGVmaW5lIENBTExfQ0hVTktGVU4oaCwgc2l6ZSkgXAorICAoKChoKSAtPiB1c2VfZXh0cmFfYXJnKSBcCisgICA/ICgqKGgpLT5jaHVua2Z1bi5leHRyYSkgKChoKS0+ZXh0cmFfYXJnLCAoc2l6ZSkpIFwKKyAgIDogKCooaCktPmNodW5rZnVuLnBsYWluKSAoKHNpemUpKSkKKworIyBkZWZpbmUgQ0FMTF9GUkVFRlVOKGgsIG9sZF9jaHVuaykgXAorICBkbyB7IFwKKyAgICBpZiAoKGgpIC0+IHVzZV9leHRyYV9hcmcpIFwKKyAgICAgICgqKGgpLT5mcmVlZnVuLmV4dHJhKSAoKGgpLT5leHRyYV9hcmcsIChvbGRfY2h1bmspKTsgXAorICAgIGVsc2UgXAorICAgICAgKCooaCktPmZyZWVmdW4ucGxhaW4pICgob2xkX2NodW5rKSk7IFwKKyAgfSB3aGlsZSAoMCkKKworDAorLyogSW5pdGlhbGl6ZSBhbiBvYnN0YWNrIEggZm9yIHVzZS4gIFNwZWNpZnkgY2h1bmsgc2l6ZSBTSVpFICgwIG1lYW5zIGRlZmF1bHQpLgorICAgT2JqZWN0cyBzdGFydCBvbiBtdWx0aXBsZXMgb2YgQUxJR05NRU5UICgwIG1lYW5zIHVzZSBkZWZhdWx0KS4KKyAgIENIVU5LRlVOIGlzIHRoZSBmdW5jdGlvbiB0byB1c2UgdG8gYWxsb2NhdGUgY2h1bmtzLAorICAgYW5kIEZSRUVGVU4gdGhlIGZ1bmN0aW9uIHRvIGZyZWUgdGhlbS4KKworICAgUmV0dXJuIG5vbnplcm8gaWYgc3VjY2Vzc2Z1bCwgY2FsbHMgb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlciBpZgorICAgYWxsb2NhdGlvbiBmYWlscy4gICovCisKK2ludAorX29ic3RhY2tfYmVnaW4gKHN0cnVjdCBvYnN0YWNrICpoLAorCQlpbnQgc2l6ZSwgaW50IGFsaWdubWVudCwKKwkJdm9pZCAqKCpjaHVua2Z1bikgKGxvbmcpLAorCQl2b2lkICgqZnJlZWZ1bikgKHZvaWQgKikpCit7CisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqY2h1bms7IC8qIHBvaW50cyB0byBuZXcgY2h1bmsgKi8KKworICBpZiAoYWxpZ25tZW50ID09IDApCisgICAgYWxpZ25tZW50ID0gREVGQVVMVF9BTElHTk1FTlQ7CisgIGlmIChzaXplID09IDApCisgICAgLyogRGVmYXVsdCBzaXplIGlzIHdoYXQgR05VIG1hbGxvYyBjYW4gZml0IGluIGEgNDA5Ni1ieXRlIGJsb2NrLiAgKi8KKyAgICB7CisgICAgICAvKiAxMiBpcyBzaXplb2YgKG1oZWFkKSBhbmQgNCBpcyBFWFRSQSBmcm9tIEdOVSBtYWxsb2MuCisJIFVzZSB0aGUgdmFsdWVzIGZvciByYW5nZSBjaGVja2luZywgYmVjYXVzZSBpZiByYW5nZSBjaGVja2luZyBpcyBvZmYsCisJIHRoZSBleHRyYSBieXRlcyB3b24ndCBiZSBtaXNzZWQgdGVycmlibHksIGJ1dCBpZiByYW5nZSBjaGVja2luZyBpcyBvbgorCSBhbmQgd2UgdXNlZCBhIGxhcmdlciByZXF1ZXN0LCBhIHdob2xlIGV4dHJhIDQwOTYgYnl0ZXMgd291bGQgYmUKKwkgYWxsb2NhdGVkLgorCisJIFRoZXNlIG51bWJlciBhcmUgaXJyZWxldmFudCB0byB0aGUgbmV3IEdOVSBtYWxsb2MuICBJIHN1c3BlY3QgaXQgaXMKKwkgbGVzcyBzZW5zaXRpdmUgdG8gdGhlIHNpemUgb2YgdGhlIHJlcXVlc3QuICAqLworICAgICAgaW50IGV4dHJhID0gKCgoKDEyICsgREVGQVVMVF9ST1VORElORyAtIDEpICYgfihERUZBVUxUX1JPVU5ESU5HIC0gMSkpCisJCSAgICArIDQgKyBERUZBVUxUX1JPVU5ESU5HIC0gMSkKKwkJICAgJiB+KERFRkFVTFRfUk9VTkRJTkcgLSAxKSk7CisgICAgICBzaXplID0gNDA5NiAtIGV4dHJhOworICAgIH0KKworICBoLT5jaHVua2Z1bi5wbGFpbiA9IGNodW5rZnVuOworICBoLT5mcmVlZnVuLnBsYWluID0gZnJlZWZ1bjsKKyAgaC0+Y2h1bmtfc2l6ZSA9IHNpemU7CisgIGgtPmFsaWdubWVudF9tYXNrID0gYWxpZ25tZW50IC0gMTsKKyAgaC0+dXNlX2V4dHJhX2FyZyA9IDA7CisKKyAgY2h1bmsgPSBoLT5jaHVuayA9IENBTExfQ0hVTktGVU4gKGgsIGggLT4gY2h1bmtfc2l6ZSk7CisgIGlmICghY2h1bmspCisgICAgKCpvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyKSAoKTsKKyAgaC0+bmV4dF9mcmVlID0gaC0+b2JqZWN0X2Jhc2UgPSBfX1BUUl9BTElHTiAoKGNoYXIgKikgY2h1bmssIGNodW5rLT5jb250ZW50cywKKwkJCQkJICAgICAgIGFsaWdubWVudCAtIDEpOworICBoLT5jaHVua19saW1pdCA9IGNodW5rLT5saW1pdAorICAgID0gKGNoYXIgKikgY2h1bmsgKyBoLT5jaHVua19zaXplOworICBjaHVuay0+cHJldiA9IE5VTEw7CisgIC8qIFRoZSBpbml0aWFsIGNodW5rIG5vdyBjb250YWlucyBubyBlbXB0eSBvYmplY3QuICAqLworICBoLT5tYXliZV9lbXB0eV9vYmplY3QgPSAwOworICBoLT5hbGxvY19mYWlsZWQgPSAwOworICByZXR1cm4gMTsKK30KKworaW50Citfb2JzdGFja19iZWdpbl8xIChzdHJ1Y3Qgb2JzdGFjayAqaCwgaW50IHNpemUsIGludCBhbGlnbm1lbnQsCisJCSAgdm9pZCAqKCpjaHVua2Z1bikgKHZvaWQgKiwgbG9uZyksCisJCSAgdm9pZCAoKmZyZWVmdW4pICh2b2lkICosIHZvaWQgKiksCisJCSAgdm9pZCAqYXJnKQoreworICByZWdpc3RlciBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKmNodW5rOyAvKiBwb2ludHMgdG8gbmV3IGNodW5rICovCisKKyAgaWYgKGFsaWdubWVudCA9PSAwKQorICAgIGFsaWdubWVudCA9IERFRkFVTFRfQUxJR05NRU5UOworICBpZiAoc2l6ZSA9PSAwKQorICAgIC8qIERlZmF1bHQgc2l6ZSBpcyB3aGF0IEdOVSBtYWxsb2MgY2FuIGZpdCBpbiBhIDQwOTYtYnl0ZSBibG9jay4gICovCisgICAgeworICAgICAgLyogMTIgaXMgc2l6ZW9mIChtaGVhZCkgYW5kIDQgaXMgRVhUUkEgZnJvbSBHTlUgbWFsbG9jLgorCSBVc2UgdGhlIHZhbHVlcyBmb3IgcmFuZ2UgY2hlY2tpbmcsIGJlY2F1c2UgaWYgcmFuZ2UgY2hlY2tpbmcgaXMgb2ZmLAorCSB0aGUgZXh0cmEgYnl0ZXMgd29uJ3QgYmUgbWlzc2VkIHRlcnJpYmx5LCBidXQgaWYgcmFuZ2UgY2hlY2tpbmcgaXMgb24KKwkgYW5kIHdlIHVzZWQgYSBsYXJnZXIgcmVxdWVzdCwgYSB3aG9sZSBleHRyYSA0MDk2IGJ5dGVzIHdvdWxkIGJlCisJIGFsbG9jYXRlZC4KKworCSBUaGVzZSBudW1iZXIgYXJlIGlycmVsZXZhbnQgdG8gdGhlIG5ldyBHTlUgbWFsbG9jLiAgSSBzdXNwZWN0IGl0IGlzCisJIGxlc3Mgc2Vuc2l0aXZlIHRvIHRoZSBzaXplIG9mIHRoZSByZXF1ZXN0LiAgKi8KKyAgICAgIGludCBleHRyYSA9ICgoKCgxMiArIERFRkFVTFRfUk9VTkRJTkcgLSAxKSAmIH4oREVGQVVMVF9ST1VORElORyAtIDEpKQorCQkgICAgKyA0ICsgREVGQVVMVF9ST1VORElORyAtIDEpCisJCSAgICYgfihERUZBVUxUX1JPVU5ESU5HIC0gMSkpOworICAgICAgc2l6ZSA9IDQwOTYgLSBleHRyYTsKKyAgICB9CisKKyAgaC0+Y2h1bmtmdW4uZXh0cmEgPSAoc3RydWN0IF9vYnN0YWNrX2NodW5rICogKCopKHZvaWQgKixsb25nKSkgY2h1bmtmdW47CisgIGgtPmZyZWVmdW4uZXh0cmEgPSAodm9pZCAoKikgKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopKSBmcmVlZnVuOworCisgIGgtPmNodW5rX3NpemUgPSBzaXplOworICBoLT5hbGlnbm1lbnRfbWFzayA9IGFsaWdubWVudCAtIDE7CisgIGgtPmV4dHJhX2FyZyA9IGFyZzsKKyAgaC0+dXNlX2V4dHJhX2FyZyA9IDE7CisKKyAgY2h1bmsgPSBoLT5jaHVuayA9IENBTExfQ0hVTktGVU4gKGgsIGggLT4gY2h1bmtfc2l6ZSk7CisgIGlmICghY2h1bmspCisgICAgKCpvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyKSAoKTsKKyAgaC0+bmV4dF9mcmVlID0gaC0+b2JqZWN0X2Jhc2UgPSBfX1BUUl9BTElHTiAoKGNoYXIgKikgY2h1bmssIGNodW5rLT5jb250ZW50cywKKwkJCQkJICAgICAgIGFsaWdubWVudCAtIDEpOworICBoLT5jaHVua19saW1pdCA9IGNodW5rLT5saW1pdAorICAgID0gKGNoYXIgKikgY2h1bmsgKyBoLT5jaHVua19zaXplOworICBjaHVuay0+cHJldiA9IE5VTEw7CisgIC8qIFRoZSBpbml0aWFsIGNodW5rIG5vdyBjb250YWlucyBubyBlbXB0eSBvYmplY3QuICAqLworICBoLT5tYXliZV9lbXB0eV9vYmplY3QgPSAwOworICBoLT5hbGxvY19mYWlsZWQgPSAwOworICByZXR1cm4gMTsKK30KKworLyogQWxsb2NhdGUgYSBuZXcgY3VycmVudCBjaHVuayBmb3IgdGhlIG9ic3RhY2sgKkgKKyAgIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgTEVOR1RIIGJ5dGVzIG5lZWQgdG8gYmUgYWRkZWQKKyAgIHRvIHRoZSBjdXJyZW50IG9iamVjdCwgb3IgYSBuZXcgb2JqZWN0IG9mIGxlbmd0aCBMRU5HVEggYWxsb2NhdGVkLgorICAgQ29waWVzIGFueSBwYXJ0aWFsIG9iamVjdCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9sZCBjaHVuaworICAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IG9uZS4gICovCisKK3ZvaWQKK19vYnN0YWNrX25ld2NodW5rIChzdHJ1Y3Qgb2JzdGFjayAqaCwgaW50IGxlbmd0aCkKK3sKKyAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rICpvbGRfY2h1bmsgPSBoLT5jaHVuazsKKyAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rICpuZXdfY2h1bms7CisgIHJlZ2lzdGVyIGxvbmcJbmV3X3NpemU7CisgIHJlZ2lzdGVyIGxvbmcgb2JqX3NpemUgPSBoLT5uZXh0X2ZyZWUgLSBoLT5vYmplY3RfYmFzZTsKKyAgcmVnaXN0ZXIgbG9uZyBpOworICBsb25nIGFscmVhZHk7CisgIGNoYXIgKm9iamVjdF9iYXNlOworCisgIC8qIENvbXB1dGUgc2l6ZSBmb3IgbmV3IGNodW5rLiAgKi8KKyAgbmV3X3NpemUgPSAob2JqX3NpemUgKyBsZW5ndGgpICsgKG9ial9zaXplID4+IDMpICsgaC0+YWxpZ25tZW50X21hc2sgKyAxMDA7CisgIGlmIChuZXdfc2l6ZSA8IGgtPmNodW5rX3NpemUpCisgICAgbmV3X3NpemUgPSBoLT5jaHVua19zaXplOworCisgIC8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBuZXcgY2h1bmsuICAqLworICBuZXdfY2h1bmsgPSBDQUxMX0NIVU5LRlVOIChoLCBuZXdfc2l6ZSk7CisgIGlmICghbmV3X2NodW5rKQorICAgICgqb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlcikgKCk7CisgIGgtPmNodW5rID0gbmV3X2NodW5rOworICBuZXdfY2h1bmstPnByZXYgPSBvbGRfY2h1bms7CisgIG5ld19jaHVuay0+bGltaXQgPSBoLT5jaHVua19saW1pdCA9IChjaGFyICopIG5ld19jaHVuayArIG5ld19zaXplOworCisgIC8qIENvbXB1dGUgYW4gYWxpZ25lZCBvYmplY3RfYmFzZSBpbiB0aGUgbmV3IGNodW5rICovCisgIG9iamVjdF9iYXNlID0KKyAgICBfX1BUUl9BTElHTiAoKGNoYXIgKikgbmV3X2NodW5rLCBuZXdfY2h1bmstPmNvbnRlbnRzLCBoLT5hbGlnbm1lbnRfbWFzayk7CisKKyAgLyogTW92ZSB0aGUgZXhpc3Rpbmcgb2JqZWN0IHRvIHRoZSBuZXcgY2h1bmsuCisgICAgIFdvcmQgYXQgYSB0aW1lIGlzIGZhc3QgYW5kIGlzIHNhZmUgaWYgdGhlIG9iamVjdAorICAgICBpcyBzdWZmaWNpZW50bHkgYWxpZ25lZC4gICovCisgIGlmIChoLT5hbGlnbm1lbnRfbWFzayArIDEgPj0gREVGQVVMVF9BTElHTk1FTlQpCisgICAgeworICAgICAgZm9yIChpID0gb2JqX3NpemUgLyBzaXplb2YgKENPUFlJTkdfVU5JVCkgLSAxOworCSAgIGkgPj0gMDsgaS0tKQorCSgoQ09QWUlOR19VTklUICopb2JqZWN0X2Jhc2UpW2ldCisJICA9ICgoQ09QWUlOR19VTklUICopaC0+b2JqZWN0X2Jhc2UpW2ldOworICAgICAgLyogV2UgdXNlZCB0byBjb3B5IHRoZSBvZGQgZmV3IHJlbWFpbmluZyBieXRlcyBhcyBvbmUgZXh0cmEgQ09QWUlOR19VTklULAorCSBidXQgdGhhdCBjYW4gY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5IG9uIGEgbWFjaGluZQorCSB3aGljaCBkb2VzIG5vdCBkbyBzdHJpY3QgYWxpZ25tZW50IGZvciBDT1BZSU5HX1VOSVRTLiAgKi8KKyAgICAgIGFscmVhZHkgPSBvYmpfc2l6ZSAvIHNpemVvZiAoQ09QWUlOR19VTklUKSAqIHNpemVvZiAoQ09QWUlOR19VTklUKTsKKyAgICB9CisgIGVsc2UKKyAgICBhbHJlYWR5ID0gMDsKKyAgLyogQ29weSByZW1haW5pbmcgYnl0ZXMgb25lIGJ5IG9uZS4gICovCisgIGZvciAoaSA9IGFscmVhZHk7IGkgPCBvYmpfc2l6ZTsgaSsrKQorICAgIG9iamVjdF9iYXNlW2ldID0gaC0+b2JqZWN0X2Jhc2VbaV07CisKKyAgLyogSWYgdGhlIG9iamVjdCBqdXN0IGNvcGllZCB3YXMgdGhlIG9ubHkgZGF0YSBpbiBPTERfQ0hVTkssCisgICAgIGZyZWUgdGhhdCBjaHVuayBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGNoYWluLgorICAgICBCdXQgbm90IGlmIHRoYXQgY2h1bmsgbWlnaHQgY29udGFpbiBhbiBlbXB0eSBvYmplY3QuICAqLworICBpZiAoISBoLT5tYXliZV9lbXB0eV9vYmplY3QKKyAgICAgICYmIChoLT5vYmplY3RfYmFzZQorCSAgPT0gX19QVFJfQUxJR04gKChjaGFyICopIG9sZF9jaHVuaywgb2xkX2NodW5rLT5jb250ZW50cywKKwkJCSAgaC0+YWxpZ25tZW50X21hc2spKSkKKyAgICB7CisgICAgICBuZXdfY2h1bmstPnByZXYgPSBvbGRfY2h1bmstPnByZXY7CisgICAgICBDQUxMX0ZSRUVGVU4gKGgsIG9sZF9jaHVuayk7CisgICAgfQorCisgIGgtPm9iamVjdF9iYXNlID0gb2JqZWN0X2Jhc2U7CisgIGgtPm5leHRfZnJlZSA9IGgtPm9iamVjdF9iYXNlICsgb2JqX3NpemU7CisgIC8qIFRoZSBuZXcgY2h1bmsgY2VydGFpbmx5IGNvbnRhaW5zIG5vIGVtcHR5IG9iamVjdCB5ZXQuICAqLworICBoLT5tYXliZV9lbXB0eV9vYmplY3QgPSAwOworfQorIyBpZmRlZiBfTElCQworbGliY19oaWRkZW5fZGVmIChfb2JzdGFja19uZXdjaHVuaykKKyMgZW5kaWYKKworLyogUmV0dXJuIG5vbnplcm8gaWYgb2JqZWN0IE9CSiBoYXMgYmVlbiBhbGxvY2F0ZWQgZnJvbSBvYnN0YWNrIEguCisgICBUaGlzIGlzIGhlcmUgZm9yIGRlYnVnZ2luZy4KKyAgIElmIHlvdSB1c2UgaXQgaW4gYSBwcm9ncmFtLCB5b3UgYXJlIHByb2JhYmx5IGxvc2luZy4gICovCisKKy8qIFN1cHByZXNzIC1XbWlzc2luZy1wcm90b3R5cGVzIHdhcm5pbmcuICBXZSBkb24ndCB3YW50IHRvIGRlY2xhcmUgdGhpcyBpbgorICAgb2JzdGFjay5oIGJlY2F1c2UgaXQgaXMganVzdCBmb3IgZGVidWdnaW5nLiAgKi8KK2ludCBfb2JzdGFja19hbGxvY2F0ZWRfcCAoc3RydWN0IG9ic3RhY2sgKmgsIHZvaWQgKm9iaik7CisKK2ludAorX29ic3RhY2tfYWxsb2NhdGVkX3AgKHN0cnVjdCBvYnN0YWNrICpoLCB2b2lkICpvYmopCit7CisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqbHA7CS8qIGJlbG93IGFkZHIgb2YgYW55IG9iamVjdHMgaW4gdGhpcyBjaHVuayAqLworICByZWdpc3RlciBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKnBscDsJLyogcG9pbnQgdG8gcHJldmlvdXMgY2h1bmsgaWYgYW55ICovCisKKyAgbHAgPSAoaCktPmNodW5rOworICAvKiBXZSB1c2UgPj0gcmF0aGVyIHRoYW4gPiBzaW5jZSB0aGUgb2JqZWN0IGNhbm5vdCBiZSBleGFjdGx5IGF0CisgICAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNodW5rIGJ1dCBtaWdodCBiZSBhbiBlbXB0eSBvYmplY3QgZXhhY3RseQorICAgICBhdCB0aGUgZW5kIG9mIGFuIGFkamFjZW50IGNodW5rLiAgKi8KKyAgd2hpbGUgKGxwICE9IE5VTEwgJiYgKCh2b2lkICopIGxwID49IG9iaiB8fCAodm9pZCAqKSAobHApLT5saW1pdCA8IG9iaikpCisgICAgeworICAgICAgcGxwID0gbHAtPnByZXY7CisgICAgICBscCA9IHBscDsKKyAgICB9CisgIHJldHVybiBscCAhPSBOVUxMOworfQorDAorLyogRnJlZSBvYmplY3RzIGluIG9ic3RhY2sgSCwgaW5jbHVkaW5nIE9CSiBhbmQgZXZlcnl0aGluZyBhbGxvY2F0ZQorICAgbW9yZSByZWNlbnRseSB0aGFuIE9CSi4gIElmIE9CSiBpcyB6ZXJvLCBmcmVlIGV2ZXJ5dGhpbmcgaW4gSC4gICovCisKKyMgdW5kZWYgb2JzdGFja19mcmVlCisKK3ZvaWQKK29ic3RhY2tfZnJlZSAoc3RydWN0IG9ic3RhY2sgKmgsIHZvaWQgKm9iaikKK3sKKyAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rICpscDsJLyogYmVsb3cgYWRkciBvZiBhbnkgb2JqZWN0cyBpbiB0aGlzIGNodW5rICovCisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqcGxwOwkvKiBwb2ludCB0byBwcmV2aW91cyBjaHVuayBpZiBhbnkgKi8KKworICBscCA9IGgtPmNodW5rOworICAvKiBXZSB1c2UgPj0gYmVjYXVzZSB0aGVyZSBjYW5ub3QgYmUgYW4gb2JqZWN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjaHVuay4KKyAgICAgQnV0IHRoZXJlIGNhbiBiZSBhbiBlbXB0eSBvYmplY3QgYXQgdGhhdCBhZGRyZXNzCisgICAgIGF0IHRoZSBlbmQgb2YgYW5vdGhlciBjaHVuay4gICovCisgIHdoaWxlIChscCAhPSBOVUxMICYmICgodm9pZCAqKSBscCA+PSBvYmogfHwgKHZvaWQgKikgKGxwKS0+bGltaXQgPCBvYmopKQorICAgIHsKKyAgICAgIHBscCA9IGxwLT5wcmV2OworICAgICAgQ0FMTF9GUkVFRlVOIChoLCBscCk7CisgICAgICBscCA9IHBscDsKKyAgICAgIC8qIElmIHdlIHN3aXRjaCBjaHVua3MsIHdlIGNhbid0IHRlbGwgd2hldGhlciB0aGUgbmV3IGN1cnJlbnQKKwkgY2h1bmsgY29udGFpbnMgYW4gZW1wdHkgb2JqZWN0LCBzbyBhc3N1bWUgdGhhdCBpdCBtYXkuICAqLworICAgICAgaC0+bWF5YmVfZW1wdHlfb2JqZWN0ID0gMTsKKyAgICB9CisgIGlmIChscCkKKyAgICB7CisgICAgICBoLT5vYmplY3RfYmFzZSA9IGgtPm5leHRfZnJlZSA9IChjaGFyICopIChvYmopOworICAgICAgaC0+Y2h1bmtfbGltaXQgPSBscC0+bGltaXQ7CisgICAgICBoLT5jaHVuayA9IGxwOworICAgIH0KKyAgZWxzZSBpZiAob2JqICE9IE5VTEwpCisgICAgLyogb2JqIGlzIG5vdCBpbiBhbnkgb2YgdGhlIGNodW5rcyEgKi8KKyAgICBhYm9ydCAoKTsKK30KKworIyBpZmRlZiBfTElCQworLyogT2xkZXIgdmVyc2lvbnMgb2YgbGliYyB1c2VkIGEgZnVuY3Rpb24gX29ic3RhY2tfZnJlZSBpbnRlbmRlZCB0byBiZQorICAgY2FsbGVkIGJ5IG5vbi1HQ0MgY29tcGlsZXJzLiAgKi8KK3N0cm9uZ19hbGlhcyAob2JzdGFja19mcmVlLCBfb2JzdGFja19mcmVlKQorIyBlbmRpZgorDAoraW50Citfb2JzdGFja19tZW1vcnlfdXNlZCAoc3RydWN0IG9ic3RhY2sgKmgpCit7CisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayogbHA7CisgIHJlZ2lzdGVyIGludCBuYnl0ZXMgPSAwOworCisgIGZvciAobHAgPSBoLT5jaHVuazsgbHAgIT0gTlVMTDsgbHAgPSBscC0+cHJldikKKyAgICB7CisgICAgICBuYnl0ZXMgKz0gbHAtPmxpbWl0IC0gKGNoYXIgKikgbHA7CisgICAgfQorICByZXR1cm4gbmJ5dGVzOworfQorDAorIyBpZmRlZiBfTElCQworIyAgaW5jbHVkZSA8bGliaW8vaW9saWJpby5oPgorIyBlbmRpZgorCisjIGlmbmRlZiBfX2F0dHJpYnV0ZV9fCisvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKyMgIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpCisjICAgZGVmaW5lIF9fYXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgIGVuZGlmCisjIGVuZGlmCisKK3N0YXRpYyB2b2lkCitwcmludF9hbmRfYWJvcnQgKHZvaWQpCit7CisgIC8qIERvbid0IGNoYW5nZSBhbnkgb2YgdGhlc2Ugc3RyaW5ncy4gIFllcywgaXQgd291bGQgYmUgcG9zc2libGUgdG8gYWRkCisgICAgIHRoZSBuZXdsaW5lIHRvIHRoZSBzdHJpbmcgYW5kIHVzZSBmcHV0cyBvciBzby4gIEJ1dCB0aGlzIG11c3Qgbm90CisgICAgIGhhcHBlbiBiZWNhdXNlIHRoZSAibWVtb3J5IGV4aGF1c3RlZCIgbWVzc2FnZSBhcHBlYXJzIGluIG90aGVyIHBsYWNlcworICAgICBsaWtlIHRoaXMgYW5kIHRoZSB0cmFuc2xhdGlvbiBzaG91bGQgYmUgcmV1c2VkIGluc3RlYWQgb2YgY3JlYXRpbmcKKyAgICAgYSB2ZXJ5IHNpbWlsYXIgc3RyaW5nIHdoaWNoIHJlcXVpcmVzIGEgc2VwYXJhdGUgdHJhbnNsYXRpb24uICAqLworIyBpZmRlZiBfTElCQworICAodm9pZCkgX19meHByaW50ZiAoTlVMTCwgIiVzXG4iLCBfKCJtZW1vcnkgZXhoYXVzdGVkIikpOworIyBlbHNlCisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBfKCJtZW1vcnkgZXhoYXVzdGVkIikpOworIyBlbmRpZgorICBleGl0ICgxKTsKK30KKworI2VuZGlmCS8qICFFTElERV9DT0RFICovCmRpZmYgLS1naXQgYS9jb21wYXQvb2JzdGFjay5oIGIvY29tcGF0L29ic3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTBhNDZkCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L29ic3RhY2suaApAQCAtMCwwICsxLDUxMSBAQAorLyogb2JzdGFjay5oIC0gb2JqZWN0IHN0YWNrIG1hY3JvcworICAgQ29weXJpZ2h0IChDKSAxOTg4LTE5OTQsMTk5Ni0xOTk5LDIwMDMsMjAwNCwyMDA1LDIwMDkKKwlGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFN1bW1hcnk6CisKK0FsbCB0aGUgYXBwYXJlbnQgZnVuY3Rpb25zIGRlZmluZWQgaGVyZSBhcmUgbWFjcm9zLiBUaGUgaWRlYQoraXMgdGhhdCB5b3Ugd291bGQgdXNlIHRoZXNlIHByZS10ZXN0ZWQgbWFjcm9zIHRvIHNvbHZlIGEKK3Zlcnkgc3BlY2lmaWMgc2V0IG9mIHByb2JsZW1zLCBhbmQgdGhleSB3b3VsZCBydW4gZmFzdC4KK0NhdXRpb246IG5vIHNpZGUtZWZmZWN0cyBpbiBhcmd1bWVudHMgcGxlYXNlISEgVGhleSBtYXkgYmUKK2V2YWx1YXRlZCBNQU5ZIHRpbWVzISEKKworVGhlc2UgbWFjcm9zIG9wZXJhdGUgYSBzdGFjayBvZiBvYmplY3RzLiAgRWFjaCBvYmplY3Qgc3RhcnRzIGxpZmUKK3NtYWxsLCBhbmQgbWF5IGdyb3cgdG8gbWF0dXJpdHkuICAoQ29uc2lkZXIgYnVpbGRpbmcgYSB3b3JkIHN5bGxhYmxlCitieSBzeWxsYWJsZS4pICBBbiBvYmplY3QgY2FuIG1vdmUgd2hpbGUgaXQgaXMgZ3Jvd2luZy4gIE9uY2UgaXQgaGFzCitiZWVuICJmaW5pc2hlZCIgaXQgbmV2ZXIgY2hhbmdlcyBhZGRyZXNzIGFnYWluLiAgU28gdGhlICJ0b3Agb2YgdGhlCitzdGFjayIgaXMgdHlwaWNhbGx5IGFuIGltbWF0dXJlIGdyb3dpbmcgb2JqZWN0LCB3aGlsZSB0aGUgcmVzdCBvZiB0aGUKK3N0YWNrIGlzIG9mIG1hdHVyZSwgZml4ZWQgc2l6ZSBhbmQgZml4ZWQgYWRkcmVzcyBvYmplY3RzLgorCitUaGVzZSByb3V0aW5lcyBncmFiIGxhcmdlIGNodW5rcyBvZiBtZW1vcnksIHVzaW5nIGEgZnVuY3Rpb24geW91CitzdXBwbHksIGNhbGxlZCBgb2JzdGFja19jaHVua19hbGxvYycuICBPbiBvY2Nhc2lvbiwgdGhleSBmcmVlIGNodW5rcywKK2J5IGNhbGxpbmcgYG9ic3RhY2tfY2h1bmtfZnJlZScuICBZb3UgbXVzdCBkZWZpbmUgdGhlbSBhbmQgZGVjbGFyZQordGhlbSBiZWZvcmUgdXNpbmcgYW55IG9ic3RhY2sgbWFjcm9zLgorCitFYWNoIGluZGVwZW5kZW50IHN0YWNrIGlzIHJlcHJlc2VudGVkIGJ5IGEgYHN0cnVjdCBvYnN0YWNrJy4KK0VhY2ggb2YgdGhlIG9ic3RhY2sgbWFjcm9zIGV4cGVjdHMgYSBwb2ludGVyIHRvIHN1Y2ggYSBzdHJ1Y3R1cmUKK2FzIHRoZSBmaXJzdCBhcmd1bWVudC4KKworT25lIG1vdGl2YXRpb24gZm9yIHRoaXMgcGFja2FnZSBpcyB0aGUgcHJvYmxlbSBvZiBncm93aW5nIGNoYXIgc3RyaW5ncworaW4gc3ltYm9sIHRhYmxlcy4gIFVubGVzcyB5b3UgYXJlICJmYXNjaXN0IHBpZyB3aXRoIGEgcmVhZC1vbmx5IG1pbmQiCistLUdvc3BlcidzIGltbW9ydGFsIHF1b3RlIGZyb20gSEFLTUVNIGl0ZW0gMTU0LCBvdXQgb2YgY29udGV4dC0teW91Cit3b3VsZCBub3QgbGlrZSB0byBwdXQgYW55IGFyYml0cmFyeSB1cHBlciBsaW1pdCBvbiB0aGUgbGVuZ3RoIG9mIHlvdXIKK3N5bWJvbHMuCisKK0luIHByYWN0aWNlIHRoaXMgb2Z0ZW4gbWVhbnMgeW91IHdpbGwgYnVpbGQgbWFueSBzaG9ydCBzeW1ib2xzIGFuZCBhCitmZXcgbG9uZyBzeW1ib2xzLiAgQXQgdGhlIHRpbWUgeW91IGFyZSByZWFkaW5nIGEgc3ltYm9sIHlvdSBkb24ndCBrbm93Citob3cgbG9uZyBpdCBpcy4gIE9uZSB0cmFkaXRpb25hbCBtZXRob2QgaXMgdG8gcmVhZCBhIHN5bWJvbCBpbnRvIGEKK2J1ZmZlciwgcmVhbGxvYygpYXRpbmcgdGhlIGJ1ZmZlciBldmVyeSB0aW1lIHlvdSB0cnkgdG8gcmVhZCBhIHN5bWJvbAordGhhdCBpcyBsb25nZXIgdGhhbiB0aGUgYnVmZmVyLiAgVGhpcyBpcyBiZWF1dCwgYnV0IHlvdSBzdGlsbCB3aWxsCit3YW50IHRvIGNvcHkgdGhlIHN5bWJvbCBmcm9tIHRoZSBidWZmZXIgdG8gYSBtb3JlIHBlcm1hbmVudAorc3ltYm9sLXRhYmxlIGVudHJ5IHNheSBhYm91dCBoYWxmIHRoZSB0aW1lLgorCitXaXRoIG9ic3RhY2tzLCB5b3UgY2FuIHdvcmsgZGlmZmVyZW50bHkuICBVc2Ugb25lIG9ic3RhY2sgZm9yIGFsbCBzeW1ib2wKK25hbWVzLiAgQXMgeW91IHJlYWQgYSBzeW1ib2wsIGdyb3cgdGhlIG5hbWUgaW4gdGhlIG9ic3RhY2sgZ3JhZHVhbGx5LgorV2hlbiB0aGUgbmFtZSBpcyBjb21wbGV0ZSwgZmluYWxpemUgaXQuICBUaGVuLCBpZiB0aGUgc3ltYm9sIGV4aXN0cyBhbHJlYWR5LAorZnJlZSB0aGUgbmV3bHkgcmVhZCBuYW1lLgorCitUaGUgd2F5IHdlIGRvIHRoaXMgaXMgdG8gdGFrZSBhIGxhcmdlIGNodW5rLCBhbGxvY2F0aW5nIG1lbW9yeSBmcm9tCitsb3cgYWRkcmVzc2VzLiAgV2hlbiB5b3Ugd2FudCB0byBidWlsZCBhIHN5bWJvbCBpbiB0aGUgY2h1bmsgeW91IGp1c3QKK2FkZCBjaGFycyBhYm92ZSB0aGUgY3VycmVudCAiaGlnaCB3YXRlciBtYXJrIiBpbiB0aGUgY2h1bmsuICBXaGVuIHlvdQoraGF2ZSBmaW5pc2hlZCBhZGRpbmcgY2hhcnMsIGJlY2F1c2UgeW91IGdvdCB0byB0aGUgZW5kIG9mIHRoZSBzeW1ib2wsCit5b3Uga25vdyBob3cgbG9uZyB0aGUgY2hhcnMgYXJlLCBhbmQgeW91IGNhbiBjcmVhdGUgYSBuZXcgb2JqZWN0LgorTW9zdGx5IHRoZSBjaGFycyB3aWxsIG5vdCBidXJzdCBvdmVyIHRoZSBoaWdoZXN0IGFkZHJlc3Mgb2YgdGhlIGNodW5rLAorYmVjYXVzZSB5b3Ugd291bGQgdHlwaWNhbGx5IGV4cGVjdCBhIGNodW5rIHRvIGJlIChzYXkpIDEwMCB0aW1lcyBhcworbG9uZyBhcyBhbiBhdmVyYWdlIG9iamVjdC4KKworSW4gY2FzZSB0aGF0IGlzbid0IGNsZWFyLCB3aGVuIHdlIGhhdmUgZW5vdWdoIGNoYXJzIHRvIG1ha2UgdXAKK3RoZSBvYmplY3QsIFRIRVkgQVJFIEFMUkVBRFkgQ09OVElHVU9VUyBJTiBUSEUgQ0hVTksgKGd1YXJhbnRlZWQpCitzbyB3ZSBqdXN0IHBvaW50IHRvIGl0IHdoZXJlIGl0IGxpZXMuICBObyBtb3Zpbmcgb2YgY2hhcnMgaXMKK25lZWRlZCBhbmQgdGhpcyBpcyB0aGUgc2Vjb25kIHdpbjogcG90ZW50aWFsbHkgbG9uZyBzdHJpbmdzIG5lZWQKK25ldmVyIGJlIGV4cGxpY2l0bHkgc2h1ZmZsZWQuIE9uY2UgYW4gb2JqZWN0IGlzIGZvcm1lZCwgaXQgZG9lcyBub3QKK2NoYW5nZSBpdHMgYWRkcmVzcyBkdXJpbmcgaXRzIGxpZmV0aW1lLgorCitXaGVuIHRoZSBjaGFycyBidXJzdCBvdmVyIGEgY2h1bmsgYm91bmRhcnksIHdlIGFsbG9jYXRlIGEgbGFyZ2VyCitjaHVuaywgYW5kIHRoZW4gY29weSB0aGUgcGFydGx5IGZvcm1lZCBvYmplY3QgZnJvbSB0aGUgZW5kIG9mIHRoZSBvbGQKK2NodW5rIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5ldyBsYXJnZXIgY2h1bmsuICBXZSB0aGVuIGNhcnJ5IG9uCithY2NyZWRpdGluZyBjaGFyYWN0ZXJzIHRvIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBhcyB3ZSBub3JtYWxseSB3b3VsZC4KKworQSBzcGVjaWFsIG1hY3JvIGlzIHByb3ZpZGVkIHRvIGFkZCBhIHNpbmdsZSBjaGFyIGF0IGEgdGltZSB0byBhCitncm93aW5nIG9iamVjdC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgcmVnaXN0ZXIgdmFyaWFibGVzLCB3aGljaAorYnJlYWsgdGhlIG9yZGluYXJ5ICdncm93dGgnIG1hY3JvLgorCitTdW1tYXJ5OgorCVdlIGFsbG9jYXRlIGxhcmdlIGNodW5rcy4KKwlXZSBjYXJ2ZSBvdXQgb25lIG9iamVjdCBhdCBhIHRpbWUgZnJvbSB0aGUgY3VycmVudCBjaHVuay4KKwlPbmNlIGNhcnZlZCwgYW4gb2JqZWN0IG5ldmVyIG1vdmVzLgorCVdlIGFyZSBmcmVlIHRvIGFwcGVuZCBkYXRhIG9mIGFueSBzaXplIHRvIHRoZSBjdXJyZW50bHkKKwkgIGdyb3dpbmcgb2JqZWN0LgorCUV4YWN0bHkgb25lIG9iamVjdCBpcyBncm93aW5nIGluIGFuIG9ic3RhY2sgYXQgYW55IG9uZSB0aW1lLgorCVlvdSBjYW4gcnVuIG9uZSBvYnN0YWNrIHBlciBjb250cm9sIGJsb2NrLgorCVlvdSBtYXkgaGF2ZSBhcyBtYW55IGNvbnRyb2wgYmxvY2tzIGFzIHlvdSBkYXJlLgorCUJlY2F1c2Ugb2YgdGhlIHdheSB3ZSBkbyBpdCwgeW91IGNhbiBgdW53aW5kJyBhbiBvYnN0YWNrCisJICBiYWNrIHRvIGEgcHJldmlvdXMgc3RhdGUuIChZb3UgbWF5IHJlbW92ZSBvYmplY3RzIG11Y2gKKwkgIGFzIHlvdSB3b3VsZCB3aXRoIGEgc3RhY2suKQorKi8KKworCisvKiBEb24ndCBkbyB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1vcmUgdGhhbiBvbmNlLiAgKi8KKworI2lmbmRlZiBfT0JTVEFDS19ICisjZGVmaW5lIF9PQlNUQUNLX0ggMQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisMCisvKiBXZSBuZWVkIHRoZSB0eXBlIG9mIGEgcG9pbnRlciBzdWJ0cmFjdGlvbi4gIElmIF9fUFRSRElGRl9UWVBFX18gaXMKKyAgIGRlZmluZWQsIGFzIHdpdGggR05VIEMsIHVzZSB0aGF0OyB0aGF0IHdheSB3ZSBkb24ndCBwb2xsdXRlIHRoZQorICAgbmFtZXNwYWNlIHdpdGggPHN0ZGRlZi5oPidzIHN5bWJvbHMuICBPdGhlcndpc2UsIGluY2x1ZGUgPHN0ZGRlZi5oPgorICAgYW5kIHVzZSBwdHJkaWZmX3QuICAqLworCisjaWZkZWYgX19QVFJESUZGX1RZUEVfXworIyBkZWZpbmUgUFRSX0lOVF9UWVBFIF9fUFRSRElGRl9UWVBFX18KKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorIyBkZWZpbmUgUFRSX0lOVF9UWVBFIHB0cmRpZmZfdAorI2VuZGlmCisKKy8qIElmIEIgaXMgdGhlIGJhc2Ugb2YgYW4gb2JqZWN0IGFkZHJlc3NlZCBieSBQLCByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgYWxpZ25pbmcgUCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiBBICsgMS4gIEIgYW5kIFAgbXVzdCBiZSBvZiB0eXBlCisgICBjaGFyICouICBBICsgMSBtdXN0IGJlIGEgcG93ZXIgb2YgMi4gICovCisKKyNkZWZpbmUgX19CUFRSX0FMSUdOKEIsIFAsIEEpICgoQikgKyAoKChQKSAtIChCKSArIChBKSkgJiB+KEEpKSkKKworLyogU2ltaWxhciB0byBfQlBUUl9BTElHTiAoQiwgUCwgQSksIGV4Y2VwdCBvcHRpbWl6ZSB0aGUgY29tbW9uIGNhc2UKKyAgIHdoZXJlIHBvaW50ZXJzIGNhbiBiZSBjb252ZXJ0ZWQgdG8gaW50ZWdlcnMsIGFsaWduZWQgYXMgaW50ZWdlcnMsCisgICBhbmQgY29udmVydGVkIGJhY2sgYWdhaW4uICBJZiBQVFJfSU5UX1RZUEUgaXMgbmFycm93ZXIgdGhhbiBhCisgICBwb2ludGVyIChlLmcuLCB0aGUgQVMvNDAwKSwgcGxheSBpdCBzYWZlIGFuZCBjb21wdXRlIHRoZSBhbGlnbm1lbnQKKyAgIHJlbGF0aXZlIHRvIEIuICBPdGhlcndpc2UsIHVzZSB0aGUgZmFzdGVyIHN0cmF0ZWd5IG9mIGNvbXB1dGluZyB0aGUKKyAgIGFsaWdubWVudCByZWxhdGl2ZSB0byAwLiAgKi8KKworI2RlZmluZSBfX1BUUl9BTElHTihCLCBQLCBBKQkJCQkJCSAgICBcCisgIChzaXplb2YgKFBUUl9JTlRfVFlQRSkgPCBzaXplb2Yodm9pZCAqKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgX19CUFRSX0FMSUdOKChCKSwgKFApLCAoQSkpIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICh2b2lkICopX19CUFRSX0FMSUdOKChQVFJfSU5UX1RZUEUpKHZvaWQgKikwLCAoUFRSX0lOVF9UWVBFKShQKSwgKEEpKSAgICAgICAgICAgIFwKKyAgKQorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3N0cnVjdCBfb2JzdGFja19jaHVuawkJLyogTGl2ZXMgYXQgZnJvbnQgb2YgZWFjaCBjaHVuay4gKi8KK3sKKyAgY2hhciAgKmxpbWl0OwkJCS8qIDEgcGFzdCBlbmQgb2YgdGhpcyBjaHVuayAqLworICBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKnByZXY7CS8qIGFkZHJlc3Mgb2YgcHJpb3IgY2h1bmsgb3IgTlVMTCAqLworICBjaGFyCWNvbnRlbnRzWzRdOwkJLyogb2JqZWN0cyBiZWdpbiBoZXJlICovCit9OworCitzdHJ1Y3Qgb2JzdGFjawkJLyogY29udHJvbCBjdXJyZW50IG9iamVjdCBpbiBjdXJyZW50IGNodW5rICovCit7CisgIGxvbmcJY2h1bmtfc2l6ZTsJCS8qIHByZWZlcnJlZCBzaXplIHRvIGFsbG9jYXRlIGNodW5rcyBpbiAqLworICBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKmNodW5rOwkvKiBhZGRyZXNzIG9mIGN1cnJlbnQgc3RydWN0IG9ic3RhY2tfY2h1bmsgKi8KKyAgY2hhcgkqb2JqZWN0X2Jhc2U7CQkvKiBhZGRyZXNzIG9mIG9iamVjdCB3ZSBhcmUgYnVpbGRpbmcgKi8KKyAgY2hhcgkqbmV4dF9mcmVlOwkJLyogd2hlcmUgdG8gYWRkIG5leHQgY2hhciB0byBjdXJyZW50IG9iamVjdCAqLworICBjaGFyCSpjaHVua19saW1pdDsJCS8qIGFkZHJlc3Mgb2YgY2hhciBhZnRlciBjdXJyZW50IGNodW5rICovCisgIHVuaW9uCisgIHsKKyAgICBQVFJfSU5UX1RZUEUgdGVtcGludDsKKyAgICB2b2lkICp0ZW1wcHRyOworICB9IHRlbXA7CQkJLyogVGVtcG9yYXJ5IGZvciBzb21lIG1hY3Jvcy4gICovCisgIGludCAgIGFsaWdubWVudF9tYXNrOwkJLyogTWFzayBvZiBhbGlnbm1lbnQgZm9yIGVhY2ggb2JqZWN0LiAqLworICAvKiBUaGVzZSBwcm90b3R5cGVzIHZhcnkgYmFzZWQgb24gYHVzZV9leHRyYV9hcmcnLiAqLworICB1bmlvbiB7CisgICAgdm9pZCAqKCpwbGFpbikgKGxvbmcpOworICAgIHN0cnVjdCBfb2JzdGFja19jaHVuayAqKCpleHRyYSkgKHZvaWQgKiwgbG9uZyk7CisgIH0gY2h1bmtmdW47CisgIHVuaW9uIHsKKyAgICB2b2lkICgqcGxhaW4pICh2b2lkICopOworICAgIHZvaWQgKCpleHRyYSkgKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopOworICB9IGZyZWVmdW47CisgIHZvaWQgKmV4dHJhX2FyZzsJCS8qIGZpcnN0IGFyZyBmb3IgY2h1bmsgYWxsb2MvZGVhbGxvYyBmdW5jcyAqLworICB1bnNpZ25lZCB1c2VfZXh0cmFfYXJnOjE7CS8qIGNodW5rIGFsbG9jL2RlYWxsb2MgZnVuY3MgdGFrZSBleHRyYSBhcmcgKi8KKyAgdW5zaWduZWQgbWF5YmVfZW1wdHlfb2JqZWN0OjE7LyogVGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBjdXJyZW50CisJCQkJICAgY2h1bmsgY29udGFpbnMgYSB6ZXJvLWxlbmd0aCBvYmplY3QuICBUaGlzCisJCQkJICAgcHJldmVudHMgZnJlZWluZyB0aGUgY2h1bmsgaWYgd2UgYWxsb2NhdGUKKwkJCQkgICBhIGJpZ2dlciBjaHVuayB0byByZXBsYWNlIGl0LiAqLworICB1bnNpZ25lZCBhbGxvY19mYWlsZWQ6MTsJLyogTm8gbG9uZ2VyIHVzZWQsIGFzIHdlIG5vdyBjYWxsIHRoZSBmYWlsZWQKKwkJCQkgICBoYW5kbGVyIG9uIGVycm9yLCBidXQgcmV0YWluZWQgZm9yIGJpbmFyeQorCQkJCSAgIGNvbXBhdGliaWxpdHkuICAqLworfTsKKworLyogRGVjbGFyZSB0aGUgZXh0ZXJuYWwgZnVuY3Rpb25zIHdlIHVzZTsgdGhleSBhcmUgaW4gb2JzdGFjay5jLiAgKi8KKworZXh0ZXJuIHZvaWQgX29ic3RhY2tfbmV3Y2h1bmsgKHN0cnVjdCBvYnN0YWNrICosIGludCk7CitleHRlcm4gaW50IF9vYnN0YWNrX2JlZ2luIChzdHJ1Y3Qgb2JzdGFjayAqLCBpbnQsIGludCwKKwkJCSAgICB2b2lkICooKikgKGxvbmcpLCB2b2lkICgqKSAodm9pZCAqKSk7CitleHRlcm4gaW50IF9vYnN0YWNrX2JlZ2luXzEgKHN0cnVjdCBvYnN0YWNrICosIGludCwgaW50LAorCQkJICAgICB2b2lkICooKikgKHZvaWQgKiwgbG9uZyksCisJCQkgICAgIHZvaWQgKCopICh2b2lkICosIHZvaWQgKiksIHZvaWQgKik7CitleHRlcm4gaW50IF9vYnN0YWNrX21lbW9yeV91c2VkIChzdHJ1Y3Qgb2JzdGFjayAqKTsKKwordm9pZCBvYnN0YWNrX2ZyZWUgKHN0cnVjdCBvYnN0YWNrICosIHZvaWQgKik7CisKKwwKKy8qIEVycm9yIGhhbmRsZXIgY2FsbGVkIHdoZW4gYG9ic3RhY2tfY2h1bmtfYWxsb2MnIGZhaWxlZCB0byBhbGxvY2F0ZQorICAgbW9yZSBtZW1vcnkuICBUaGlzIGNhbiBiZSBzZXQgdG8gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gd2hpY2gKKyAgIHNob3VsZCBlaXRoZXIgYWJvcnQgZ3JhY2VmdWxseSBvciB1c2UgbG9uZ2p1bXAgLSBidXQgc2hvdWxkbid0CisgICByZXR1cm4uICBUaGUgZGVmYXVsdCBhY3Rpb24gaXMgdG8gcHJpbnQgYSBtZXNzYWdlIGFuZCBhYm9ydC4gICovCitleHRlcm4gdm9pZCAoKm9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXIpICh2b2lkKTsKKwwKKy8qIFBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIG9iamVjdCBiZWluZyBhbGxvY2F0ZWQgb3IgdG8gYmUgYWxsb2NhdGVkIG5leHQuCisgICBOb3RlIHRoYXQgdGhpcyBtaWdodCBub3QgYmUgdGhlIGZpbmFsIGFkZHJlc3Mgb2YgdGhlIG9iamVjdAorICAgYmVjYXVzZSBhIG5ldyBjaHVuayBtaWdodCBiZSBuZWVkZWQgdG8gaG9sZCB0aGUgZmluYWwgc2l6ZS4gICovCisKKyNkZWZpbmUgb2JzdGFja19iYXNlKGgpICgodm9pZCAqKSAoaCktPm9iamVjdF9iYXNlKQorCisvKiBTaXplIGZvciBhbGxvY2F0aW5nIG9yZGluYXJ5IGNodW5rcy4gICovCisKKyNkZWZpbmUgb2JzdGFja19jaHVua19zaXplKGgpICgoaCktPmNodW5rX3NpemUpCisKKy8qIFBvaW50ZXIgdG8gbmV4dCBieXRlIG5vdCB5ZXQgYWxsb2NhdGVkIGluIGN1cnJlbnQgY2h1bmsuICAqLworCisjZGVmaW5lIG9ic3RhY2tfbmV4dF9mcmVlKGgpCSgoaCktPm5leHRfZnJlZSkKKworLyogTWFzayBzcGVjaWZ5aW5nIGxvdyBiaXRzIHRoYXQgc2hvdWxkIGJlIGNsZWFyIGluIGFkZHJlc3Mgb2YgYW4gb2JqZWN0LiAgKi8KKworI2RlZmluZSBvYnN0YWNrX2FsaWdubWVudF9tYXNrKGgpICgoaCktPmFsaWdubWVudF9tYXNrKQorCisvKiBUbyBwcmV2ZW50IHByb3RvdHlwZSB3YXJuaW5ncyBwcm92aWRlIGNvbXBsZXRlIGFyZ3VtZW50IGxpc3QuICAqLworI2RlZmluZSBvYnN0YWNrX2luaXQoaCkJCQkJCQlcCisgIF9vYnN0YWNrX2JlZ2luICgoaCksIDAsIDAsCQkJCQlcCisJCSAgKHZvaWQgKigqKSAobG9uZykpIG9ic3RhY2tfY2h1bmtfYWxsb2MsCVwKKwkJICAodm9pZCAoKikgKHZvaWQgKikpIG9ic3RhY2tfY2h1bmtfZnJlZSkKKworI2RlZmluZSBvYnN0YWNrX2JlZ2luKGgsIHNpemUpCQkJCQlcCisgIF9vYnN0YWNrX2JlZ2luICgoaCksIChzaXplKSwgMCwJCQkJXAorCQkgICh2b2lkICooKikgKGxvbmcpKSBvYnN0YWNrX2NodW5rX2FsbG9jLAlcCisJCSAgKHZvaWQgKCopICh2b2lkICopKSBvYnN0YWNrX2NodW5rX2ZyZWUpCisKKyNkZWZpbmUgb2JzdGFja19zcGVjaWZ5X2FsbG9jYXRpb24oaCwgc2l6ZSwgYWxpZ25tZW50LCBjaHVua2Z1biwgZnJlZWZ1bikgIFwKKyAgX29ic3RhY2tfYmVnaW4gKChoKSwgKHNpemUpLCAoYWxpZ25tZW50KSwJCQkJICAgXAorCQkgICh2b2lkICooKikgKGxvbmcpKSAoY2h1bmtmdW4pLAkJCSAgIFwKKwkJICAodm9pZCAoKikgKHZvaWQgKikpIChmcmVlZnVuKSkKKworI2RlZmluZSBvYnN0YWNrX3NwZWNpZnlfYWxsb2NhdGlvbl93aXRoX2FyZyhoLCBzaXplLCBhbGlnbm1lbnQsIGNodW5rZnVuLCBmcmVlZnVuLCBhcmcpIFwKKyAgX29ic3RhY2tfYmVnaW5fMSAoKGgpLCAoc2l6ZSksIChhbGlnbm1lbnQpLAkJCQlcCisJCSAgICAodm9pZCAqKCopICh2b2lkICosIGxvbmcpKSAoY2h1bmtmdW4pLAkJXAorCQkgICAgKHZvaWQgKCopICh2b2lkICosIHZvaWQgKikpIChmcmVlZnVuKSwgKGFyZykpCisKKyNkZWZpbmUgb2JzdGFja19jaHVua2Z1bihoLCBuZXdjaHVua2Z1bikgXAorICAoKGgpLT5jaHVua2Z1bi5leHRyYSA9IChzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKigqKSh2b2lkICosIGxvbmcpKSAobmV3Y2h1bmtmdW4pKQorCisjZGVmaW5lIG9ic3RhY2tfZnJlZWZ1bihoLCBuZXdmcmVlZnVuKSBcCisgICgoaCktPmZyZWVmdW4uZXh0cmEgPSAodm9pZCAoKikodm9pZCAqLCBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKikpIChuZXdmcmVlZnVuKSkKKworI2RlZmluZSBvYnN0YWNrXzFncm93X2Zhc3QoaCxhY2hhcikgKCooKGgpLT5uZXh0X2ZyZWUpKysgPSAoYWNoYXIpKQorCisjZGVmaW5lIG9ic3RhY2tfYmxhbmtfZmFzdChoLG4pICgoaCktPm5leHRfZnJlZSArPSAobikpCisKKyNkZWZpbmUgb2JzdGFja19tZW1vcnlfdXNlZChoKSBfb2JzdGFja19tZW1vcnlfdXNlZCAoaCkKKwwKKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmIGRlZmluZWQgX19TVERDX18gJiYgX19TVERDX18KKy8qIE5leHRTdGVwIDIuMCBjYyBpcyByZWFsbHkgZ2NjIDEuOTMgYnV0IGl0IGRlZmluZXMgX19HTlVDX18gPSAyIGFuZAorICAgZG9lcyBub3QgaW1wbGVtZW50IF9fZXh0ZW5zaW9uX18uICBCdXQgdGhhdCBjb21waWxlciBkb2Vzbid0IGRlZmluZQorICAgX19HTlVDX01JTk9SX18uICAqLworIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fTmVYVF9fICYmICFfX0dOVUNfTUlOT1JfXykKKyMgIGRlZmluZSBfX2V4dGVuc2lvbl9fCisjIGVuZGlmCisKKy8qIEZvciBHTlUgQywgaWYgbm90IC10cmFkaXRpb25hbCwKKyAgIHdlIGNhbiBkZWZpbmUgdGhlc2UgbWFjcm9zIHRvIGNvbXB1dGUgYWxsIGFyZ3Mgb25seSBvbmNlCisgICB3aXRob3V0IHVzaW5nIGEgZ2xvYmFsIHZhcmlhYmxlLgorICAgQWxzbywgd2UgY2FuIGF2b2lkIHVzaW5nIHRoZSBgdGVtcCcgc2xvdCwgdG8gbWFrZSBmYXN0ZXIgY29kZS4gICovCisKKyMgZGVmaW5lIG9ic3RhY2tfb2JqZWN0X3NpemUoT0JTVEFDSykJCQkJCVwKKyAgX19leHRlbnNpb25fXwkJCQkJCQkJXAorICAoeyBzdHJ1Y3Qgb2JzdGFjayBjb25zdCAqX19vID0gKE9CU1RBQ0spOwkJCQlcCisgICAgICh1bnNpZ25lZCkgKF9fby0+bmV4dF9mcmVlIC0gX19vLT5vYmplY3RfYmFzZSk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfcm9vbShPQlNUQUNLKQkJCQkJCVwKKyAgX19leHRlbnNpb25fXwkJCQkJCQkJXAorICAoeyBzdHJ1Y3Qgb2JzdGFjayBjb25zdCAqX19vID0gKE9CU1RBQ0spOwkJCQlcCisgICAgICh1bnNpZ25lZCkgKF9fby0+Y2h1bmtfbGltaXQgLSBfX28tPm5leHRfZnJlZSk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfbWFrZV9yb29tKE9CU1RBQ0ssbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAorICAgaWYgKF9fby0+Y2h1bmtfbGltaXQgLSBfX28tPm5leHRfZnJlZSA8IF9fbGVuKQkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4pOwkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfZW1wdHlfcChPQlNUQUNLKQkJCQkJXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisgICh7IHN0cnVjdCBvYnN0YWNrIGNvbnN0ICpfX28gPSAoT0JTVEFDSyk7CQkJCVwKKyAgICAgKF9fby0+Y2h1bmstPnByZXYgPT0gMAkJCQkJCVwKKyAgICAgICYmIF9fby0+bmV4dF9mcmVlID09IF9fUFRSX0FMSUdOICgoY2hhciAqKSBfX28tPmNodW5rLAkJXAorCQkJCQlfX28tPmNodW5rLT5jb250ZW50cywJCVwKKwkJCQkJX19vLT5hbGlnbm1lbnRfbWFzaykpOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2dyb3coT0JTVEFDSyx3aGVyZSxsZW5ndGgpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpbnQgX19sZW4gPSAobGVuZ3RoKTsJCQkJCQlcCisgICBpZiAoX19vLT5uZXh0X2ZyZWUgKyBfX2xlbiA+IF9fby0+Y2h1bmtfbGltaXQpCQkJXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBfX2xlbik7CQkJCQlcCisgICBtZW1jcHkgKF9fby0+bmV4dF9mcmVlLCB3aGVyZSwgX19sZW4pOwkJCQlcCisgICBfX28tPm5leHRfZnJlZSArPSBfX2xlbjsJCQkJCQlcCisgICAodm9pZCkgMDsgfSkKKworIyBkZWZpbmUgb2JzdGFja19ncm93MChPQlNUQUNLLHdoZXJlLGxlbmd0aCkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGludCBfX2xlbiA9IChsZW5ndGgpOwkJCQkJCVwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIF9fbGVuICsgMSA+IF9fby0+Y2h1bmtfbGltaXQpCQkJXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBfX2xlbiArIDEpOwkJCQlcCisgICBtZW1jcHkgKF9fby0+bmV4dF9mcmVlLCB3aGVyZSwgX19sZW4pOwkJCQlcCisgICBfX28tPm5leHRfZnJlZSArPSBfX2xlbjsJCQkJCQlcCisgICAqKF9fby0+bmV4dF9mcmVlKSsrID0gMDsJCQkJCQlcCisgICAodm9pZCkgMDsgfSkKKworIyBkZWZpbmUgb2JzdGFja18xZ3JvdyhPQlNUQUNLLGRhdHVtKQkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIDEgPiBfX28tPmNodW5rX2xpbWl0KQkJCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIDEpOwkJCQkJXAorICAgb2JzdGFja18xZ3Jvd19mYXN0IChfX28sIGRhdHVtKTsJCQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisvKiBUaGVzZSBhc3N1bWUgdGhhdCB0aGUgb2JzdGFjayBhbGlnbm1lbnQgaXMgZ29vZCBlbm91Z2ggZm9yIHBvaW50ZXJzCisgICBvciBpbnRzLCBhbmQgdGhhdCB0aGUgZGF0YSBhZGRlZCBzbyBmYXIgdG8gdGhlIGN1cnJlbnQgb2JqZWN0CisgICBzaGFyZXMgdGhhdCBtdWNoIGFsaWdubWVudC4gICovCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3coT0JTVEFDSyxkYXR1bSkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIHNpemVvZiAodm9pZCAqKSA+IF9fby0+Y2h1bmtfbGltaXQpCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIHNpemVvZiAodm9pZCAqKSk7CQkJCVwKKyAgIG9ic3RhY2tfcHRyX2dyb3dfZmFzdCAoX19vLCBkYXR1bSk7IH0pCQkJCVwKKworIyBkZWZpbmUgb2JzdGFja19pbnRfZ3JvdyhPQlNUQUNLLGRhdHVtKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgc2l6ZW9mIChpbnQpID4gX19vLT5jaHVua19saW1pdCkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgc2l6ZW9mIChpbnQpKTsJCQkJXAorICAgb2JzdGFja19pbnRfZ3Jvd19mYXN0IChfX28sIGRhdHVtKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19wdHJfZ3Jvd19mYXN0KE9CU1RBQ0ssYXB0cikJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbzEgPSAoT0JTVEFDSyk7CQkJCQlcCisgICAqKGNvbnN0IHZvaWQgKiopIF9fbzEtPm5leHRfZnJlZSA9IChhcHRyKTsJCQkJXAorICAgX19vMS0+bmV4dF9mcmVlICs9IHNpemVvZiAoY29uc3Qgdm9pZCAqKTsJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfaW50X2dyb3dfZmFzdChPQlNUQUNLLGFpbnQpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28xID0gKE9CU1RBQ0spOwkJCQkJXAorICAgKihpbnQgKikgX19vMS0+bmV4dF9mcmVlID0gKGFpbnQpOwkJCQkJXAorICAgX19vMS0+bmV4dF9mcmVlICs9IHNpemVvZiAoaW50KTsJCQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2JsYW5rKE9CU1RBQ0ssbGVuZ3RoKQkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGludCBfX2xlbiA9IChsZW5ndGgpOwkJCQkJCVwKKyAgIGlmIChfX28tPmNodW5rX2xpbWl0IC0gX19vLT5uZXh0X2ZyZWUgPCBfX2xlbikJCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIF9fbGVuKTsJCQkJCVwKKyAgIG9ic3RhY2tfYmxhbmtfZmFzdCAoX19vLCBfX2xlbik7CQkJCQlcCisgICAodm9pZCkgMDsgfSkKKworIyBkZWZpbmUgb2JzdGFja19hbGxvYyhPQlNUQUNLLGxlbmd0aCkJCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX2ggPSAoT0JTVEFDSyk7CQkJCQlcCisgICBvYnN0YWNrX2JsYW5rIChfX2gsIChsZW5ndGgpKTsJCQkJCVwKKyAgIG9ic3RhY2tfZmluaXNoIChfX2gpOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2NvcHkoT0JTVEFDSyx3aGVyZSxsZW5ndGgpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX2ggPSAoT0JTVEFDSyk7CQkJCQlcCisgICBvYnN0YWNrX2dyb3cgKF9faCwgKHdoZXJlKSwgKGxlbmd0aCkpOwkJCQlcCisgICBvYnN0YWNrX2ZpbmlzaCAoX19oKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19jb3B5MChPQlNUQUNLLHdoZXJlLGxlbmd0aCkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9faCA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIG9ic3RhY2tfZ3JvdzAgKF9faCwgKHdoZXJlKSwgKGxlbmd0aCkpOwkJCQlcCisgICBvYnN0YWNrX2ZpbmlzaCAoX19oKTsgfSkKKworLyogVGhlIGxvY2FsIHZhcmlhYmxlIGlzIG5hbWVkIF9fbzEgdG8gYXZvaWQgYSBuYW1lIGNvbmZsaWN0CisgICB3aGVuIG9ic3RhY2tfYmxhbmsgaXMgY2FsbGVkLiAgKi8KKyMgZGVmaW5lIG9ic3RhY2tfZmluaXNoKE9CU1RBQ0spCQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vMSA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIHZvaWQgKl9fdmFsdWUgPSAodm9pZCAqKSBfX28xLT5vYmplY3RfYmFzZTsJCQkJXAorICAgaWYgKF9fbzEtPm5leHRfZnJlZSA9PSBfX3ZhbHVlKQkJCQkJXAorICAgICBfX28xLT5tYXliZV9lbXB0eV9vYmplY3QgPSAxOwkJCQkJXAorICAgX19vMS0+bmV4dF9mcmVlCQkJCQkJCVwKKyAgICAgPSBfX1BUUl9BTElHTiAoX19vMS0+b2JqZWN0X2Jhc2UsIF9fbzEtPm5leHRfZnJlZSwJCQlcCisJCSAgICBfX28xLT5hbGlnbm1lbnRfbWFzayk7CQkJCVwKKyAgIGlmIChfX28xLT5uZXh0X2ZyZWUgLSAoY2hhciAqKV9fbzEtPmNodW5rCQkJCVwKKyAgICAgICA+IF9fbzEtPmNodW5rX2xpbWl0IC0gKGNoYXIgKilfX28xLT5jaHVuaykJCQlcCisgICAgIF9fbzEtPm5leHRfZnJlZSA9IF9fbzEtPmNodW5rX2xpbWl0OwkJCQlcCisgICBfX28xLT5vYmplY3RfYmFzZSA9IF9fbzEtPm5leHRfZnJlZTsJCQkJCVwKKyAgIF9fdmFsdWU7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfZnJlZShPQlNUQUNLLCBPQkopCQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgdm9pZCAqX19vYmogPSAoT0JKKTsJCQkJCQkJXAorICAgaWYgKF9fb2JqID4gKHZvaWQgKilfX28tPmNodW5rICYmIF9fb2JqIDwgKHZvaWQgKilfX28tPmNodW5rX2xpbWl0KSAgXAorICAgICBfX28tPm5leHRfZnJlZSA9IF9fby0+b2JqZWN0X2Jhc2UgPSAoY2hhciAqKV9fb2JqOwkJCVwKKyAgIGVsc2UgKG9ic3RhY2tfZnJlZSkgKF9fbywgX19vYmopOyB9KQorDAorI2Vsc2UgLyogbm90IF9fR05VQ19fIG9yIG5vdCBfX1NURENfXyAqLworCisjIGRlZmluZSBvYnN0YWNrX29iamVjdF9zaXplKGgpIFwKKyAodW5zaWduZWQpICgoaCktPm5leHRfZnJlZSAtIChoKS0+b2JqZWN0X2Jhc2UpCisKKyMgZGVmaW5lIG9ic3RhY2tfcm9vbShoKQkJXAorICh1bnNpZ25lZCkgKChoKS0+Y2h1bmtfbGltaXQgLSAoaCktPm5leHRfZnJlZSkKKworIyBkZWZpbmUgb2JzdGFja19lbXB0eV9wKGgpIFwKKyAoKGgpLT5jaHVuay0+cHJldiA9PSAwCQkJCQkJCVwKKyAgJiYgKGgpLT5uZXh0X2ZyZWUgPT0gX19QVFJfQUxJR04gKChjaGFyICopIChoKS0+Y2h1bmssCQlcCisJCQkJICAgIChoKS0+Y2h1bmstPmNvbnRlbnRzLAkJXAorCQkJCSAgICAoaCktPmFsaWdubWVudF9tYXNrKSkKKworLyogTm90ZSB0aGF0IHRoZSBjYWxsIHRvIF9vYnN0YWNrX25ld2NodW5rIGlzIGVuY2xvc2VkIGluICguLi4sIDApCisgICBzbyB0aGF0IHdlIGNhbiBhdm9pZCBoYXZpbmcgdm9pZCBleHByZXNzaW9ucworICAgaW4gdGhlIGFybXMgb2YgdGhlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uCisgICBDYXN0aW5nIHRoZSB0aGlyZCBvcGVyYW5kIHRvIHZvaWQgd2FzIHRyaWVkIGJlZm9yZSwKKyAgIGJ1dCBzb21lIGNvbXBpbGVycyB3b24ndCBhY2NlcHQgaXQuICAqLworCisjIGRlZmluZSBvYnN0YWNrX21ha2Vfcm9vbShoLGxlbmd0aCkJCQkJCVwKKyggKGgpLT50ZW1wLnRlbXBpbnQgPSAobGVuZ3RoKSwJCQkJCQlcCisgICgoKGgpLT5uZXh0X2ZyZWUgKyAoaCktPnRlbXAudGVtcGludCA+IChoKS0+Y2h1bmtfbGltaXQpCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCAoaCktPnRlbXAudGVtcGludCksIDApIDogMCkpCisKKyMgZGVmaW5lIG9ic3RhY2tfZ3JvdyhoLHdoZXJlLGxlbmd0aCkJCQkJCVwKKyggKGgpLT50ZW1wLnRlbXBpbnQgPSAobGVuZ3RoKSwJCQkJCQlcCisgICgoKGgpLT5uZXh0X2ZyZWUgKyAoaCktPnRlbXAudGVtcGludCA+IChoKS0+Y2h1bmtfbGltaXQpCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCAoaCktPnRlbXAudGVtcGludCksIDApIDogMCksCQlcCisgIG1lbWNweSAoKGgpLT5uZXh0X2ZyZWUsIHdoZXJlLCAoaCktPnRlbXAudGVtcGludCksCQkJXAorICAoaCktPm5leHRfZnJlZSArPSAoaCktPnRlbXAudGVtcGludCkKKworIyBkZWZpbmUgb2JzdGFja19ncm93MChoLHdoZXJlLGxlbmd0aCkJCQkJCVwKKyggKGgpLT50ZW1wLnRlbXBpbnQgPSAobGVuZ3RoKSwJCQkJCQlcCisgICgoKGgpLT5uZXh0X2ZyZWUgKyAoaCktPnRlbXAudGVtcGludCArIDEgPiAoaCktPmNodW5rX2xpbWl0KQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgKGgpLT50ZW1wLnRlbXBpbnQgKyAxKSwgMCkgOiAwKSwJCVwKKyAgbWVtY3B5ICgoaCktPm5leHRfZnJlZSwgd2hlcmUsIChoKS0+dGVtcC50ZW1waW50KSwJCQlcCisgIChoKS0+bmV4dF9mcmVlICs9IChoKS0+dGVtcC50ZW1waW50LAkJCQkJXAorICAqKChoKS0+bmV4dF9mcmVlKSsrID0gMCkKKworIyBkZWZpbmUgb2JzdGFja18xZ3JvdyhoLGRhdHVtKQkJCQkJCVwKKyggKCgoaCktPm5leHRfZnJlZSArIDEgPiAoaCktPmNodW5rX2xpbWl0KQkJCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCAxKSwgMCkgOiAwKSwJCQkJXAorICBvYnN0YWNrXzFncm93X2Zhc3QgKGgsIGRhdHVtKSkKKworIyBkZWZpbmUgb2JzdGFja19wdHJfZ3JvdyhoLGRhdHVtKQkJCQkJXAorKCAoKChoKS0+bmV4dF9mcmVlICsgc2l6ZW9mIChjaGFyICopID4gKGgpLT5jaHVua19saW1pdCkJCVwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIHNpemVvZiAoY2hhciAqKSksIDApIDogMCksCQlcCisgIG9ic3RhY2tfcHRyX2dyb3dfZmFzdCAoaCwgZGF0dW0pKQorCisjIGRlZmluZSBvYnN0YWNrX2ludF9ncm93KGgsZGF0dW0pCQkJCQlcCisoICgoKGgpLT5uZXh0X2ZyZWUgKyBzaXplb2YgKGludCkgPiAoaCktPmNodW5rX2xpbWl0KQkJCVwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIHNpemVvZiAoaW50KSksIDApIDogMCksCQkJXAorICBvYnN0YWNrX2ludF9ncm93X2Zhc3QgKGgsIGRhdHVtKSkKKworIyBkZWZpbmUgb2JzdGFja19wdHJfZ3Jvd19mYXN0KGgsYXB0cikJCQkJCVwKKyAgKCgoY29uc3Qgdm9pZCAqKikgKChoKS0+bmV4dF9mcmVlICs9IHNpemVvZiAodm9pZCAqKSkpWy0xXSA9IChhcHRyKSkKKworIyBkZWZpbmUgb2JzdGFja19pbnRfZ3Jvd19mYXN0KGgsYWludCkJCQkJCVwKKyAgKCgoaW50ICopICgoaCktPm5leHRfZnJlZSArPSBzaXplb2YgKGludCkpKVstMV0gPSAoYWludCkpCisKKyMgZGVmaW5lIG9ic3RhY2tfYmxhbmsoaCxsZW5ndGgpCQkJCQlcCisoIChoKS0+dGVtcC50ZW1waW50ID0gKGxlbmd0aCksCQkJCQkJXAorICAoKChoKS0+Y2h1bmtfbGltaXQgLSAoaCktPm5leHRfZnJlZSA8IChoKS0+dGVtcC50ZW1waW50KQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgKGgpLT50ZW1wLnRlbXBpbnQpLCAwKSA6IDApLAkJXAorICBvYnN0YWNrX2JsYW5rX2Zhc3QgKGgsIChoKS0+dGVtcC50ZW1waW50KSkKKworIyBkZWZpbmUgb2JzdGFja19hbGxvYyhoLGxlbmd0aCkJCQkJCVwKKyAob2JzdGFja19ibGFuayAoKGgpLCAobGVuZ3RoKSksIG9ic3RhY2tfZmluaXNoICgoaCkpKQorCisjIGRlZmluZSBvYnN0YWNrX2NvcHkoaCx3aGVyZSxsZW5ndGgpCQkJCQlcCisgKG9ic3RhY2tfZ3JvdyAoKGgpLCAod2hlcmUpLCAobGVuZ3RoKSksIG9ic3RhY2tfZmluaXNoICgoaCkpKQorCisjIGRlZmluZSBvYnN0YWNrX2NvcHkwKGgsd2hlcmUsbGVuZ3RoKQkJCQkJXAorIChvYnN0YWNrX2dyb3cwICgoaCksICh3aGVyZSksIChsZW5ndGgpKSwgb2JzdGFja19maW5pc2ggKChoKSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfZmluaXNoKGgpCQkJCQkJXAorKCAoKGgpLT5uZXh0X2ZyZWUgPT0gKGgpLT5vYmplY3RfYmFzZQkJCQkJXAorICAgPyAoKChoKS0+bWF5YmVfZW1wdHlfb2JqZWN0ID0gMSksIDApCQkJCQlcCisgICA6IDApLAkJCQkJCQkJXAorICAoaCktPnRlbXAudGVtcHB0ciA9IChoKS0+b2JqZWN0X2Jhc2UsCQkJCQlcCisgIChoKS0+bmV4dF9mcmVlCQkJCQkJCVwKKyAgICA9IF9fUFRSX0FMSUdOICgoaCktPm9iamVjdF9iYXNlLCAoaCktPm5leHRfZnJlZSwJCQlcCisJCSAgIChoKS0+YWxpZ25tZW50X21hc2spLAkJCQlcCisgICgoKGgpLT5uZXh0X2ZyZWUgLSAoY2hhciAqKSAoaCktPmNodW5rCQkJCVwKKyAgICA+IChoKS0+Y2h1bmtfbGltaXQgLSAoY2hhciAqKSAoaCktPmNodW5rKQkJCQlcCisgICA/ICgoaCktPm5leHRfZnJlZSA9IChoKS0+Y2h1bmtfbGltaXQpIDogMCksCQkJCVwKKyAgKGgpLT5vYmplY3RfYmFzZSA9IChoKS0+bmV4dF9mcmVlLAkJCQkJXAorICAoaCktPnRlbXAudGVtcHB0cikKKworIyBkZWZpbmUgb2JzdGFja19mcmVlKGgsb2JqKQkJCQkJCVwKKyggKGgpLT50ZW1wLnRlbXBpbnQgPSAoY2hhciAqKSAob2JqKSAtIChjaGFyICopIChoKS0+Y2h1bmssCQlcCisgICgoKChoKS0+dGVtcC50ZW1waW50ID4gMAkJCQkJCVwKKyAgICAmJiAoaCktPnRlbXAudGVtcGludCA8IChoKS0+Y2h1bmtfbGltaXQgLSAoY2hhciAqKSAoaCktPmNodW5rKSkJXAorICAgPyAocHRyZGlmZl90KSAoKGgpLT5uZXh0X2ZyZWUgPSAoaCktPm9iamVjdF9iYXNlCQkJCVwKKwkgICAgPSAoaCktPnRlbXAudGVtcGludCArIChjaGFyICopIChoKS0+Y2h1bmspCQkJXAorICAgOiAoKChvYnN0YWNrX2ZyZWUpICgoaCksIChoKS0+dGVtcC50ZW1waW50ICsgKGNoYXIgKikgKGgpLT5jaHVuayksIDApLCAwKSkpCisKKyNlbmRpZiAvKiBub3QgX19HTlVDX18gb3Igbm90IF9fU1REQ19fICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQkvKiBDKysgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogb2JzdGFjay5oICovCmRpZmYgLS1naXQgYS9jb21wYXQvcG9sbC9wb2xsLmMgYi9jb21wYXQvcG9sbC9wb2xsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhNmQyNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9wb2xsL3BvbGwuYwpAQCAtMCwwICsxLDYwOCBAQAorLyogRW11bGF0aW9uIGZvciBwb2xsKDIpCisgICBDb250cmlidXRlZCBieSBQYW9sbyBCb256aW5pLgorCisgICBDb3B5cmlnaHQgMjAwMS0yMDAzLCAyMDA2LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGdudWxpYi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBUbyBidW1wIHRoZSBtaW5pbXVtIFdpbmRvd3MgdmVyc2lvbiB0byBXaW5kb3dzIFZpc3RhICovCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKKy8qIFRlbGwgZ2NjIG5vdCB0byB3YXJuIGFib3V0IHRoZSAobmZkIDwgMCkgdGVzdHMsIGJlbG93LiAgKi8KKyNpZiAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKSB8fCA0IDwgX19HTlVDX18KKyMgcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdHlwZS1saW1pdHMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoV0lOMzIpCisjIGluY2x1ZGUgPG1hbGxvYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisjIGRlZmluZSBXSU4zMl9OQVRJVkUKKyMgaWYgZGVmaW5lZCAoX01TQ19WRVIpICYmICFkZWZpbmVkKF9XSU4zMl9XSU5OVCkKKyMgIGRlZmluZSBfV0lOMzJfV0lOTlQgMHgwNTAyCisjIGVuZGlmCisjIGluY2x1ZGUgPHdpbnNvY2syLmg+CisjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgaW5jbHVkZSA8aW8uaD4KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8Y29uaW8uaD4KKyNlbHNlCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyMgaWZuZGVmIE5PX1NZU19TRUxFQ1RfSAorIyAgaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorIyBlbmRpZgorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlICJwb2xsLmgiCisKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfRklMSU9fSAorIyBpbmNsdWRlIDxzeXMvZmlsaW8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8dGltZS5oPgorCisjaWZuZGVmIElORlRJTQorIyBkZWZpbmUgSU5GVElNICgtMSkKKyNlbmRpZgorCisvKiBCZU9TIGRvZXMgbm90IGhhdmUgTVNHX1BFRUsuICAqLworI2lmbmRlZiBNU0dfUEVFSworIyBkZWZpbmUgTVNHX1BFRUsgMAorI2VuZGlmCisKKyNpZmRlZiBXSU4zMl9OQVRJVkUKKworI2RlZmluZSBJc0NvbnNvbGVIYW5kbGUoaCkgKCgobG9uZykgKGludHB0cl90KSAoaCkgJiAzKSA9PSAzKQorCitzdGF0aWMgQk9PTAorSXNTb2NrZXRIYW5kbGUgKEhBTkRMRSBoKQoreworICBXU0FORVRXT1JLRVZFTlRTIGV2OworCisgIGlmIChJc0NvbnNvbGVIYW5kbGUgKGgpKQorICAgIHJldHVybiBGQUxTRTsKKworICAvKiBVbmRlciBXaW5lLCBpdCBzZWVtcyB0aGF0IGdldHNvY2tvcHQgcmV0dXJucyAwIGZvciBwaXBlcyB0b28uCisgICAgIFdTQUVudW1OZXR3b3JrRXZlbnRzIGluc3RlYWQgZGlzdGluZ3Vpc2hlcyB0aGUgdHdvIGNvcnJlY3RseS4gICovCisgIGV2LmxOZXR3b3JrRXZlbnRzID0gMHhERUFEQkVFRjsKKyAgV1NBRW51bU5ldHdvcmtFdmVudHMgKChTT0NLRVQpIGgsIE5VTEwsICZldik7CisgIHJldHVybiBldi5sTmV0d29ya0V2ZW50cyAhPSAweERFQURCRUVGOworfQorCisvKiBEZWNsYXJlIGRhdGEgc3RydWN0dXJlcyBmb3IgbnRkbGwgZnVuY3Rpb25zLiAgKi8KK3R5cGVkZWYgc3RydWN0IF9GSUxFX1BJUEVfTE9DQUxfSU5GT1JNQVRJT04geworICBVTE9ORyBOYW1lZFBpcGVUeXBlOworICBVTE9ORyBOYW1lZFBpcGVDb25maWd1cmF0aW9uOworICBVTE9ORyBNYXhpbXVtSW5zdGFuY2VzOworICBVTE9ORyBDdXJyZW50SW5zdGFuY2VzOworICBVTE9ORyBJbmJvdW5kUXVvdGE7CisgIFVMT05HIFJlYWREYXRhQXZhaWxhYmxlOworICBVTE9ORyBPdXRib3VuZFF1b3RhOworICBVTE9ORyBXcml0ZVF1b3RhQXZhaWxhYmxlOworICBVTE9ORyBOYW1lZFBpcGVTdGF0ZTsKKyAgVUxPTkcgTmFtZWRQaXBlRW5kOworfSBGSUxFX1BJUEVfTE9DQUxfSU5GT1JNQVRJT04sICpQRklMRV9QSVBFX0xPQ0FMX0lORk9STUFUSU9OOworCit0eXBlZGVmIHN0cnVjdCBfSU9fU1RBVFVTX0JMT0NLCit7CisgIHVuaW9uIHsKKyAgICBEV09SRCBTdGF0dXM7CisgICAgUFZPSUQgUG9pbnRlcjsKKyAgfSB1OworICBVTE9OR19QVFIgSW5mb3JtYXRpb247Cit9IElPX1NUQVRVU19CTE9DSywgKlBJT19TVEFUVVNfQkxPQ0s7CisKK3R5cGVkZWYgZW51bSBfRklMRV9JTkZPUk1BVElPTl9DTEFTUyB7CisgIEZpbGVQaXBlTG9jYWxJbmZvcm1hdGlvbiA9IDI0Cit9IEZJTEVfSU5GT1JNQVRJT05fQ0xBU1MsICpQRklMRV9JTkZPUk1BVElPTl9DTEFTUzsKKwordHlwZWRlZiBEV09SRCAoV0lOQVBJICpQTnRRdWVyeUluZm9ybWF0aW9uRmlsZSkKKwkgKEhBTkRMRSwgSU9fU1RBVFVTX0JMT0NLICosIFZPSUQgKiwgVUxPTkcsIEZJTEVfSU5GT1JNQVRJT05fQ0xBU1MpOworCisjIGlmbmRlZiBQSVBFX0JVRgorIyAgZGVmaW5lIFBJUEVfQlVGICAgICAgNTEyCisjIGVuZGlmCisKKy8qIENvbXB1dGUgcmV2ZW50cyB2YWx1ZXMgZm9yIGZpbGUgaGFuZGxlIEguICBJZiBzb21lIGV2ZW50cyBjYW5ub3QgaGFwcGVuCisgICBmb3IgdGhlIGhhbmRsZSwgZWxpbWluYXRlIHRoZW0gZnJvbSAqUF9TT1VHSFQuICAqLworCitzdGF0aWMgaW50Cit3aW4zMl9jb21wdXRlX3JldmVudHMgKEhBTkRMRSBoLCBpbnQgKnBfc291Z2h0KQoreworICBpbnQgaSwgcmV0LCBoYXBwZW5lZDsKKyAgSU5QVVRfUkVDT1JEICppcmJ1ZmZlcjsKKyAgRFdPUkQgYXZhaWwsIG5idWZmZXI7CisgIEJPT0wgYlJldDsKKworICBzd2l0Y2ggKEdldEZpbGVUeXBlIChoKSkKKyAgICB7CisgICAgY2FzZSBGSUxFX1RZUEVfUElQRToKKyAgICAgIGhhcHBlbmVkID0gMDsKKyAgICAgIGlmIChQZWVrTmFtZWRQaXBlIChoLCBOVUxMLCAwLCBOVUxMLCAmYXZhaWwsIE5VTEwpICE9IDApCisJeworCSAgaWYgKGF2YWlsKQorCSAgICBoYXBwZW5lZCB8PSAqcF9zb3VnaHQgJiAoUE9MTElOIHwgUE9MTFJETk9STSk7CisJfQorICAgICAgZWxzZSBpZiAoR2V0TGFzdEVycm9yICgpID09IEVSUk9SX0JST0tFTl9QSVBFKQorCWhhcHBlbmVkIHw9IFBPTExIVVA7CisKKyAgICAgIGVsc2UKKwl7CisJICAvKiBJdCB3YXMgdGhlIHdyaXRlLWVuZCBvZiB0aGUgcGlwZS4gVW5mb3J0dW5hdGVseSB0aGVyZSBpcyBubworCSAgICAgcmVsaWFibGUgd2F5IG9mIGtub3dpbmcgaWYgaXQgY2FuIGJlIHdyaXR0ZW4gd2l0aG91dCBibG9ja2luZy4KKwkgICAgIEp1c3Qgc2F5IHRoYXQgaXQncyBhbGwgZ29vZC4gKi8KKwkgICAgaGFwcGVuZWQgfD0gKnBfc291Z2h0ICYgKFBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTFdSQkFORCk7CisJfQorICAgICAgcmV0dXJuIGhhcHBlbmVkOworCisgICAgY2FzZSBGSUxFX1RZUEVfQ0hBUjoKKyAgICAgIHJldCA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKGgsIDApOworICAgICAgaWYgKCFJc0NvbnNvbGVIYW5kbGUgKGgpKQorCXJldHVybiByZXQgPT0gV0FJVF9PQkpFQ1RfMCA/ICpwX3NvdWdodCAmIH4oUE9MTFBSSSB8IFBPTExSREJBTkQpIDogMDsKKworICAgICAgbmJ1ZmZlciA9IGF2YWlsID0gMDsKKyAgICAgIGJSZXQgPSBHZXROdW1iZXJPZkNvbnNvbGVJbnB1dEV2ZW50cyAoaCwgJm5idWZmZXIpOworICAgICAgaWYgKGJSZXQpCisJeworCSAgLyogSW5wdXQgYnVmZmVyLiAgKi8KKwkgICpwX3NvdWdodCAmPSBQT0xMSU4gfCBQT0xMUkROT1JNOworCSAgaWYgKG5idWZmZXIgPT0gMCkKKwkgICAgcmV0dXJuIFBPTExIVVA7CisJICBpZiAoISpwX3NvdWdodCkKKwkgICAgcmV0dXJuIDA7CisKKwkgIGlyYnVmZmVyID0gKElOUFVUX1JFQ09SRCAqKSBhbGxvY2EgKG5idWZmZXIgKiBzaXplb2YgKElOUFVUX1JFQ09SRCkpOworCSAgYlJldCA9IFBlZWtDb25zb2xlSW5wdXQgKGgsIGlyYnVmZmVyLCBuYnVmZmVyLCAmYXZhaWwpOworCSAgaWYgKCFiUmV0IHx8IGF2YWlsID09IDApCisJICAgIHJldHVybiBQT0xMSFVQOworCisJICBmb3IgKGkgPSAwOyBpIDwgYXZhaWw7IGkrKykKKwkgICAgaWYgKGlyYnVmZmVyW2ldLkV2ZW50VHlwZSA9PSBLRVlfRVZFTlQpCisJICAgICAgcmV0dXJuICpwX3NvdWdodDsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBTY3JlZW4gYnVmZmVyLiAgKi8KKwkgICpwX3NvdWdodCAmPSBQT0xMT1VUIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQ7CisJICByZXR1cm4gKnBfc291Z2h0OworCX0KKworICAgIGRlZmF1bHQ6CisgICAgICByZXQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0IChoLCAwKTsKKyAgICAgIGlmIChyZXQgPT0gV0FJVF9PQkpFQ1RfMCkKKwlyZXR1cm4gKnBfc291Z2h0ICYgfihQT0xMUFJJIHwgUE9MTFJEQkFORCk7CisKKyAgICAgIHJldHVybiAqcF9zb3VnaHQgJiAoUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKTsKKyAgICB9Cit9CisKKy8qIENvbnZlcnQgZmRfc2V0cyByZXR1cm5lZCBieSBzZWxlY3QgaW50byByZXZlbnRzIHZhbHVlcy4gICovCisKK3N0YXRpYyBpbnQKK3dpbjMyX2NvbXB1dGVfcmV2ZW50c19zb2NrZXQgKFNPQ0tFVCBoLCBpbnQgc291Z2h0LCBsb25nIGxOZXR3b3JrRXZlbnRzKQoreworICBpbnQgaGFwcGVuZWQgPSAwOworCisgIGlmICgobE5ldHdvcmtFdmVudHMgJiAoRkRfUkVBRCB8IEZEX0FDQ0VQVCB8IEZEX0NMT1NFKSkgPT0gRkRfQUNDRVBUKQorICAgIGhhcHBlbmVkIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNKSAmIHNvdWdodDsKKworICBlbHNlIGlmIChsTmV0d29ya0V2ZW50cyAmIChGRF9SRUFEIHwgRkRfQUNDRVBUIHwgRkRfQ0xPU0UpKQorICAgIHsKKyAgICAgIGludCByLCBlcnJvcjsKKworICAgICAgY2hhciBkYXRhWzY0XTsKKyAgICAgIFdTQVNldExhc3RFcnJvciAoMCk7CisgICAgICByID0gcmVjdiAoaCwgZGF0YSwgc2l6ZW9mIChkYXRhKSwgTVNHX1BFRUspOworICAgICAgZXJyb3IgPSBXU0FHZXRMYXN0RXJyb3IgKCk7CisgICAgICBXU0FTZXRMYXN0RXJyb3IgKDApOworCisgICAgICBpZiAociA+IDAgfHwgZXJyb3IgPT0gV1NBRU5PVENPTk4pCisJaGFwcGVuZWQgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0pICYgc291Z2h0OworCisgICAgICAvKiBEaXN0aW5ndWlzaCBodW5nLXVwIHNvY2tldHMgZnJvbSBvdGhlciBlcnJvcnMuICAqLworICAgICAgZWxzZSBpZiAociA9PSAwIHx8IGVycm9yID09IFdTQUVTSFVURE9XTiB8fCBlcnJvciA9PSBXU0FFQ09OTlJFU0VUCisJICAgICAgIHx8IGVycm9yID09IFdTQUVDT05OQUJPUlRFRCB8fCBlcnJvciA9PSBXU0FFTkVUUkVTRVQpCisJaGFwcGVuZWQgfD0gUE9MTEhVUDsKKworICAgICAgZWxzZQorCWhhcHBlbmVkIHw9IFBPTExFUlI7CisgICAgfQorCisgIGlmIChsTmV0d29ya0V2ZW50cyAmIChGRF9XUklURSB8IEZEX0NPTk5FQ1QpKQorICAgIGhhcHBlbmVkIHw9IChQT0xMT1VUIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQpICYgc291Z2h0OworCisgIGlmIChsTmV0d29ya0V2ZW50cyAmIEZEX09PQikKKyAgICBoYXBwZW5lZCB8PSAoUE9MTFBSSSB8IFBPTExSREJBTkQpICYgc291Z2h0OworCisgIHJldHVybiBoYXBwZW5lZDsKK30KKworI2Vsc2UgLyogIU1pbkdXICovCisKKy8qIENvbnZlcnQgc2VsZWN0KDIpIHJldHVybmVkIGZkX3NldHMgaW50byBwb2xsKDIpIHJldmVudHMgdmFsdWVzLiAgKi8KK3N0YXRpYyBpbnQKK2NvbXB1dGVfcmV2ZW50cyAoaW50IGZkLCBpbnQgc291Z2h0LCBmZF9zZXQgKnJmZHMsIGZkX3NldCAqd2ZkcywgZmRfc2V0ICplZmRzKQoreworICBpbnQgaGFwcGVuZWQgPSAwOworICBpZiAoRkRfSVNTRVQgKGZkLCByZmRzKSkKKyAgICB7CisgICAgICBpbnQgcjsKKyAgICAgIGludCBzb2NrZXRfZXJybm87CisKKyMgaWYgZGVmaW5lZCBfX01BQ0hfXyAmJiBkZWZpbmVkIF9fQVBQTEVfXworICAgICAgLyogVGhlcmUgaXMgYSBidWcgaW4gTWFjIE9TIFggdGhhdCBjYXVzZXMgaXQgdG8gaWdub3JlIE1TR19QRUVLCisJIGZvciBzb21lIGtpbmRzIG9mIGRlc2NyaXB0b3JzLiAgRGV0ZWN0IGlmIHRoaXMgZGVzY3JpcHRvciBpcyBhCisJIGNvbm5lY3RlZCBzb2NrZXQsIGEgc2VydmVyIHNvY2tldCwgb3Igc29tZXRoaW5nIGVsc2UgdXNpbmcgYQorCSAwLWJ5dGUgcmVjdiwgYW5kIHVzZSBpb2N0bCgyKSB0byBkZXRlY3QgUE9MTEhVUC4gICovCisgICAgICByID0gcmVjdiAoZmQsIE5VTEwsIDAsIE1TR19QRUVLKTsKKyAgICAgIHNvY2tldF9lcnJubyA9IChyIDwgMCkgPyBlcnJubyA6IDA7CisgICAgICBpZiAociA9PSAwIHx8IHNvY2tldF9lcnJubyA9PSBFTk9UU09DSykKKwlpb2N0bCAoZmQsIEZJT05SRUFELCAmcik7CisjIGVsc2UKKyAgICAgIGNoYXIgZGF0YVs2NF07CisgICAgICByID0gcmVjdiAoZmQsIGRhdGEsIHNpemVvZiAoZGF0YSksIE1TR19QRUVLKTsKKyAgICAgIHNvY2tldF9lcnJubyA9IChyIDwgMCkgPyBlcnJubyA6IDA7CisjIGVuZGlmCisgICAgICBpZiAociA9PSAwKQorCWhhcHBlbmVkIHw9IFBPTExIVVA7CisKKyAgICAgIC8qIElmIHRoZSBldmVudCBoYXBwZW5lZCBvbiBhbiB1bmNvbm5lY3RlZCBzZXJ2ZXIgc29ja2V0LAorCSB0aGF0J3MgZmluZS4gKi8KKyAgICAgIGVsc2UgaWYgKHIgPiAwIHx8ICggLyogKHIgPT0gLTEpICYmICovIHNvY2tldF9lcnJubyA9PSBFTk9UQ09OTikpCisJaGFwcGVuZWQgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0pICYgc291Z2h0OworCisgICAgICAvKiBEaXN0aW5ndWlzaCBodW5nLXVwIHNvY2tldHMgZnJvbSBvdGhlciBlcnJvcnMuICAqLworICAgICAgZWxzZSBpZiAoc29ja2V0X2Vycm5vID09IEVTSFVURE9XTiB8fCBzb2NrZXRfZXJybm8gPT0gRUNPTk5SRVNFVAorCSAgICAgICB8fCBzb2NrZXRfZXJybm8gPT0gRUNPTk5BQk9SVEVEIHx8IHNvY2tldF9lcnJubyA9PSBFTkVUUkVTRVQpCisJaGFwcGVuZWQgfD0gUE9MTEhVUDsKKworICAgICAgLyogc29tZSBzeXN0ZW1zIGNhbid0IHVzZSByZWN2KCkgb24gbm9uLXNvY2tldCwgaW5jbHVkaW5nIEhQIE5vblN0b3AgKi8KKyAgICAgIGVsc2UgaWYgKC8qIChyID09IC0xKSAmJiAqLyBzb2NrZXRfZXJybm8gPT0gRU5PVFNPQ0spCisJaGFwcGVuZWQgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0pICYgc291Z2h0OworCisgICAgICBlbHNlCisJaGFwcGVuZWQgfD0gUE9MTEVSUjsKKyAgICB9CisKKyAgaWYgKEZEX0lTU0VUIChmZCwgd2ZkcykpCisgICAgaGFwcGVuZWQgfD0gKFBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTFdSQkFORCkgJiBzb3VnaHQ7CisKKyAgaWYgKEZEX0lTU0VUIChmZCwgZWZkcykpCisgICAgaGFwcGVuZWQgfD0gKFBPTExQUkkgfCBQT0xMUkRCQU5EKSAmIHNvdWdodDsKKworICByZXR1cm4gaGFwcGVuZWQ7Cit9CisjZW5kaWYgLyogIU1pbkdXICovCisKK2ludAorcG9sbCAoc3RydWN0IHBvbGxmZCAqcGZkLCBuZmRzX3QgbmZkLCBpbnQgdGltZW91dCkKK3sKKyNpZm5kZWYgV0lOMzJfTkFUSVZFCisgIGZkX3NldCByZmRzLCB3ZmRzLCBlZmRzOworICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgc3RydWN0IHRpbWV2YWwgKnB0djsKKyAgaW50IG1heGZkLCByYzsKKyAgbmZkc190IGk7CisKKyMgaWZkZWYgX1NDX09QRU5fTUFYCisgIHN0YXRpYyBpbnQgc2Nfb3Blbl9tYXggPSAtMTsKKworICBpZiAobmZkIDwgMAorICAgICAgfHwgKG5mZCA+IHNjX29wZW5fbWF4CisJICAmJiAoc2Nfb3Blbl9tYXggIT0gLTEKKwkgICAgICB8fCBuZmQgPiAoc2Nfb3Blbl9tYXggPSBzeXNjb25mIChfU0NfT1BFTl9NQVgpKSkpKQorICAgIHsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyMgZWxzZSAvKiAhX1NDX09QRU5fTUFYICovCisjICBpZmRlZiBPUEVOX01BWAorICBpZiAobmZkIDwgMCB8fCBuZmQgPiBPUEVOX01BWCkKKyAgICB7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisjICBlbmRpZiAvKiBPUEVOX01BWCAtLSBlbHNlLCBubyBjaGVjayBpcyBuZWVkZWQgKi8KKyMgZW5kaWYgLyogIV9TQ19PUEVOX01BWCAqLworCisgIC8qIEVGQVVMVCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCwgYnV0IGxldCdzIGRvIGl0IGluIHRoZQorICAgICBzaW1wbGVzdCBjYXNlLiAqLworICBpZiAoIXBmZCAmJiBuZmQpCisgICAgeworICAgICAgZXJybm8gPSBFRkFVTFQ7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIC8qIGNvbnZlcnQgdGltZW91dCBudW1iZXIgaW50byBhIHRpbWV2YWwgc3RydWN0dXJlICovCisgIGlmICh0aW1lb3V0ID09IDApCisgICAgeworICAgICAgcHR2ID0gJnR2OworICAgICAgcHR2LT50dl9zZWMgPSAwOworICAgICAgcHR2LT50dl91c2VjID0gMDsKKyAgICB9CisgIGVsc2UgaWYgKHRpbWVvdXQgPiAwKQorICAgIHsKKyAgICAgIHB0diA9ICZ0djsKKyAgICAgIHB0di0+dHZfc2VjID0gdGltZW91dCAvIDEwMDA7CisgICAgICBwdHYtPnR2X3VzZWMgPSAodGltZW91dCAlIDEwMDApICogMTAwMDsKKyAgICB9CisgIGVsc2UgaWYgKHRpbWVvdXQgPT0gSU5GVElNKQorICAgIC8qIHdhaXQgZm9yZXZlciAqLworICAgIHB0diA9IE5VTEw7CisgIGVsc2UKKyAgICB7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgLyogY3JlYXRlIGZkIHNldHMgYW5kIGRldGVybWluZSBtYXggZmQgKi8KKyAgbWF4ZmQgPSAtMTsKKyAgRkRfWkVSTyAoJnJmZHMpOworICBGRF9aRVJPICgmd2Zkcyk7CisgIEZEX1pFUk8gKCZlZmRzKTsKKyAgZm9yIChpID0gMDsgaSA8IG5mZDsgaSsrKQorICAgIHsKKyAgICAgIGlmIChwZmRbaV0uZmQgPCAwKQorCWNvbnRpbnVlOworCisgICAgICBpZiAocGZkW2ldLmV2ZW50cyAmIChQT0xMSU4gfCBQT0xMUkROT1JNKSkKKwlGRF9TRVQgKHBmZFtpXS5mZCwgJnJmZHMpOworCisgICAgICAvKiBzZWUgc2VsZWN0KDIpOiAidGhlIG9ubHkgZXhjZXB0aW9uYWwgY29uZGl0aW9uIGRldGVjdGFibGUKKwkgaXMgb3V0LW9mLWJhbmQgZGF0YSByZWNlaXZlZCBvbiBhIHNvY2tldCIsIGhlbmNlIHdlIHB1c2gKKwkgUE9MTFdSQkFORCBldmVudHMgb250byB3ZmRzIGluc3RlYWQgb2YgZWZkcy4gKi8KKyAgICAgIGlmIChwZmRbaV0uZXZlbnRzICYgKFBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTFdSQkFORCkpCisJRkRfU0VUIChwZmRbaV0uZmQsICZ3ZmRzKTsKKyAgICAgIGlmIChwZmRbaV0uZXZlbnRzICYgKFBPTExQUkkgfCBQT0xMUkRCQU5EKSkKKwlGRF9TRVQgKHBmZFtpXS5mZCwgJmVmZHMpOworICAgICAgaWYgKHBmZFtpXS5mZCA+PSBtYXhmZAorCSAgJiYgKHBmZFtpXS5ldmVudHMgJiAoUE9MTElOIHwgUE9MTE9VVCB8IFBPTExQUkkKKwkJCSAgICAgICB8IFBPTExSRE5PUk0gfCBQT0xMUkRCQU5ECisJCQkgICAgICAgfCBQT0xMV1JOT1JNIHwgUE9MTFdSQkFORCkpKQorCXsKKwkgIG1heGZkID0gcGZkW2ldLmZkOworCSAgaWYgKG1heGZkID4gRkRfU0VUU0laRSkKKwkgICAgeworCSAgICAgIGVycm5vID0gRU9WRVJGTE9XOworCSAgICAgIHJldHVybiAtMTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgLyogZXhhbWluZSBmZCBzZXRzICovCisgIHJjID0gc2VsZWN0IChtYXhmZCArIDEsICZyZmRzLCAmd2ZkcywgJmVmZHMsIHB0dik7CisgIGlmIChyYyA8IDApCisgICAgcmV0dXJuIHJjOworCisgIC8qIGVzdGFibGlzaCByZXN1bHRzICovCisgIHJjID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IG5mZDsgaSsrKQorICAgIGlmIChwZmRbaV0uZmQgPCAwKQorICAgICAgcGZkW2ldLnJldmVudHMgPSAwOworICAgIGVsc2UKKyAgICAgIHsKKwlpbnQgaGFwcGVuZWQgPSBjb21wdXRlX3JldmVudHMgKHBmZFtpXS5mZCwgcGZkW2ldLmV2ZW50cywKKwkJCQkJJnJmZHMsICZ3ZmRzLCAmZWZkcyk7CisJaWYgKGhhcHBlbmVkKQorCSAgeworCSAgICBwZmRbaV0ucmV2ZW50cyA9IGhhcHBlbmVkOworCSAgICByYysrOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgcGZkW2ldLnJldmVudHMgPSAwOworCSAgfQorICAgICAgfQorCisgIHJldHVybiByYzsKKyNlbHNlCisgIHN0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0djA7CisgIHN0YXRpYyBIQU5ETEUgaEV2ZW50OworICBXU0FORVRXT1JLRVZFTlRTIGV2OworICBIQU5ETEUgaCwgaGFuZGxlX2FycmF5W0ZEX1NFVFNJWkUgKyAyXTsKKyAgRFdPUkQgcmV0LCB3YWl0X3RpbWVvdXQsIG5oYW5kbGVzLCBvcmlnX3RpbWVvdXQgPSAwOworICBVTE9OR0xPTkcgc3RhcnQgPSAwOworICBmZF9zZXQgcmZkcywgd2ZkcywgeGZkczsKKyAgQk9PTCBwb2xsX2FnYWluOworICBNU0cgbXNnOworICBpbnQgcmMgPSAwOworICBuZmRzX3QgaTsKKworICBpZiAobmZkIDwgMCB8fCB0aW1lb3V0IDwgLTEpCisgICAgeworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmICh0aW1lb3V0ICE9IElORlRJTSkKKyAgICB7CisgICAgICBvcmlnX3RpbWVvdXQgPSB0aW1lb3V0OworICAgICAgc3RhcnQgPSBHZXRUaWNrQ291bnQ2NCgpOworICAgIH0KKworICBpZiAoIWhFdmVudCkKKyAgICBoRXZlbnQgPSBDcmVhdGVFdmVudCAoTlVMTCwgRkFMU0UsIEZBTFNFLCBOVUxMKTsKKworcmVzdGFydDoKKyAgaGFuZGxlX2FycmF5WzBdID0gaEV2ZW50OworICBuaGFuZGxlcyA9IDE7CisgIEZEX1pFUk8gKCZyZmRzKTsKKyAgRkRfWkVSTyAoJndmZHMpOworICBGRF9aRVJPICgmeGZkcyk7CisKKyAgLyogQ2xhc3NpZnkgc29ja2V0IGhhbmRsZXMgYW5kIGNyZWF0ZSBmZCBzZXRzLiAqLworICBmb3IgKGkgPSAwOyBpIDwgbmZkOyBpKyspCisgICAgeworICAgICAgaW50IHNvdWdodCA9IHBmZFtpXS5ldmVudHM7CisgICAgICBwZmRbaV0ucmV2ZW50cyA9IDA7CisgICAgICBpZiAocGZkW2ldLmZkIDwgMCkKKwljb250aW51ZTsKKyAgICAgIGlmICghKHNvdWdodCAmIChQT0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5ECisJCSAgICAgIHwgUE9MTFBSSSB8IFBPTExSREJBTkQpKSkKKwljb250aW51ZTsKKworICAgICAgaCA9IChIQU5ETEUpIF9nZXRfb3NmaGFuZGxlIChwZmRbaV0uZmQpOworICAgICAgYXNzZXJ0IChoICE9IE5VTEwpOworICAgICAgaWYgKElzU29ja2V0SGFuZGxlIChoKSkKKwl7CisJICBpbnQgcmVxdWVzdGVkID0gRkRfQ0xPU0U7CisKKwkgIC8qIHNlZSBhYm92ZTsgc29ja2V0IGhhbmRsZXMgYXJlIG1hcHBlZCBvbnRvIHNlbGVjdC4gICovCisJICBpZiAoc291Z2h0ICYgKFBPTExJTiB8IFBPTExSRE5PUk0pKQorCSAgICB7CisJICAgICAgcmVxdWVzdGVkIHw9IEZEX1JFQUQgfCBGRF9BQ0NFUFQ7CisJICAgICAgRkRfU0VUICgoU09DS0VUKSBoLCAmcmZkcyk7CisJICAgIH0KKwkgIGlmIChzb3VnaHQgJiAoUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKSkKKwkgICAgeworCSAgICAgIHJlcXVlc3RlZCB8PSBGRF9XUklURSB8IEZEX0NPTk5FQ1Q7CisJICAgICAgRkRfU0VUICgoU09DS0VUKSBoLCAmd2Zkcyk7CisJICAgIH0KKwkgIGlmIChzb3VnaHQgJiAoUE9MTFBSSSB8IFBPTExSREJBTkQpKQorCSAgICB7CisJICAgICAgcmVxdWVzdGVkIHw9IEZEX09PQjsKKwkgICAgICBGRF9TRVQgKChTT0NLRVQpIGgsICZ4ZmRzKTsKKwkgICAgfQorCisJICBpZiAocmVxdWVzdGVkKQorCSAgICBXU0FFdmVudFNlbGVjdCAoKFNPQ0tFVCkgaCwgaEV2ZW50LCByZXF1ZXN0ZWQpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBQb2xsIG5vdy4gIElmIHdlIGdldCBhbiBldmVudCwgZG8gbm90IHBvbGwgYWdhaW4uICBBbHNvLAorCSAgICAgc2NyZWVuIGJ1ZmZlciBoYW5kbGVzIGFyZSB3YWl0YWJsZSwgYW5kIHRoZXknbGwgYmxvY2sgdW50aWwKKwkgICAgIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZS4gIHdpbjMyX2NvbXB1dGVfcmV2ZW50cyBlbGltaW5hdGVzCisJICAgICBiaXRzIGZvciB0aGUgIndyb25nIiBkaXJlY3Rpb24uICovCisJICBwZmRbaV0ucmV2ZW50cyA9IHdpbjMyX2NvbXB1dGVfcmV2ZW50cyAoaCwgJnNvdWdodCk7CisJICBpZiAoc291Z2h0KQorCSAgICBoYW5kbGVfYXJyYXlbbmhhbmRsZXMrK10gPSBoOworCSAgaWYgKHBmZFtpXS5yZXZlbnRzKQorCSAgICB0aW1lb3V0ID0gMDsKKwl9CisgICAgfQorCisgIGlmIChzZWxlY3QgKDAsICZyZmRzLCAmd2ZkcywgJnhmZHMsICZ0djApID4gMCkKKyAgICB7CisgICAgICAvKiBEbyBNc2dXYWl0Rm9yTXVsdGlwbGVPYmplY3RzIGFueXdheSB0byBkaXNwYXRjaCBtZXNzYWdlcywgYnV0CisJIG5vIG5lZWQgdG8gY2FsbCBzZWxlY3QgYWdhaW4uICAqLworICAgICAgcG9sbF9hZ2FpbiA9IEZBTFNFOworICAgICAgd2FpdF90aW1lb3V0ID0gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwb2xsX2FnYWluID0gVFJVRTsKKyAgICAgIGlmICh0aW1lb3V0ID09IElORlRJTSkKKwl3YWl0X3RpbWVvdXQgPSBJTkZJTklURTsKKyAgICAgIGVsc2UKKwl3YWl0X3RpbWVvdXQgPSB0aW1lb3V0OworICAgIH0KKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIHJldCA9IE1zZ1dhaXRGb3JNdWx0aXBsZU9iamVjdHMgKG5oYW5kbGVzLCBoYW5kbGVfYXJyYXksIEZBTFNFLAorCQkJCSAgICAgICB3YWl0X3RpbWVvdXQsIFFTX0FMTElOUFVUKTsKKworICAgICAgaWYgKHJldCA9PSBXQUlUX09CSkVDVF8wICsgbmhhbmRsZXMpCisJeworCSAgLyogbmV3IGlucHV0IG9mIHNvbWUgb3RoZXIga2luZCAqLworCSAgQk9PTCBiUmV0OworCSAgd2hpbGUgKChiUmV0ID0gUGVla01lc3NhZ2UgKCZtc2csIE5VTEwsIDAsIDAsIFBNX1JFTU9WRSkpICE9IDApCisJICAgIHsKKwkgICAgICBUcmFuc2xhdGVNZXNzYWdlICgmbXNnKTsKKwkgICAgICBEaXNwYXRjaE1lc3NhZ2UgKCZtc2cpOworCSAgICB9CisJfQorICAgICAgZWxzZQorCWJyZWFrOworICAgIH0KKworICBpZiAocG9sbF9hZ2FpbikKKyAgICBzZWxlY3QgKDAsICZyZmRzLCAmd2ZkcywgJnhmZHMsICZ0djApOworCisgIC8qIFBsYWNlIGEgc2VudGluZWwgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkuICAqLworICBoYW5kbGVfYXJyYXlbbmhhbmRsZXNdID0gTlVMTDsKKyAgbmhhbmRsZXMgPSAxOworICBmb3IgKGkgPSAwOyBpIDwgbmZkOyBpKyspCisgICAgeworICAgICAgaW50IGhhcHBlbmVkOworCisgICAgICBpZiAocGZkW2ldLmZkIDwgMCkKKwljb250aW51ZTsKKyAgICAgIGlmICghKHBmZFtpXS5ldmVudHMgJiAoUE9MTElOIHwgUE9MTFJETk9STSB8CisJCQkgICAgIFBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTFdSQkFORCkpKQorCWNvbnRpbnVlOworCisgICAgICBoID0gKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUgKHBmZFtpXS5mZCk7CisgICAgICBpZiAoaCAhPSBoYW5kbGVfYXJyYXlbbmhhbmRsZXNdKQorCXsKKwkgIC8qIEl0J3MgYSBzb2NrZXQuICAqLworCSAgV1NBRW51bU5ldHdvcmtFdmVudHMgKChTT0NLRVQpIGgsIE5VTEwsICZldik7CisJICBXU0FFdmVudFNlbGVjdCAoKFNPQ0tFVCkgaCwgTlVMTCwgMCk7CisKKwkgIC8qIElmIHdlJ3JlIGx1Y2t5LCBXU0FFbnVtTmV0d29ya0V2ZW50cyBhbHJlYWR5IHByb3ZpZGVkIGEgd2F5CisJICAgICB0byBkaXN0aW5ndWlzaCBGRF9SRUFEIGFuZCBGRF9BQ0NFUFQ7IHRoaXMgc2F2ZXMgYSByZWN2IGxhdGVyLiAgKi8KKwkgIGlmIChGRF9JU1NFVCAoKFNPQ0tFVCkgaCwgJnJmZHMpCisJICAgICAgJiYgIShldi5sTmV0d29ya0V2ZW50cyAmIChGRF9SRUFEIHwgRkRfQUNDRVBUKSkpCisJICAgIGV2LmxOZXR3b3JrRXZlbnRzIHw9IEZEX1JFQUQgfCBGRF9BQ0NFUFQ7CisJICBpZiAoRkRfSVNTRVQgKChTT0NLRVQpIGgsICZ3ZmRzKSkKKwkgICAgZXYubE5ldHdvcmtFdmVudHMgfD0gRkRfV1JJVEUgfCBGRF9DT05ORUNUOworCSAgaWYgKEZEX0lTU0VUICgoU09DS0VUKSBoLCAmeGZkcykpCisJICAgIGV2LmxOZXR3b3JrRXZlbnRzIHw9IEZEX09PQjsKKworCSAgaGFwcGVuZWQgPSB3aW4zMl9jb21wdXRlX3JldmVudHNfc29ja2V0ICgoU09DS0VUKSBoLCBwZmRbaV0uZXZlbnRzLAorCQkJCQkJICAgZXYubE5ldHdvcmtFdmVudHMpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBOb3QgYSBzb2NrZXQuICAqLworCSAgaW50IHNvdWdodCA9IHBmZFtpXS5ldmVudHM7CisJICBoYXBwZW5lZCA9IHdpbjMyX2NvbXB1dGVfcmV2ZW50cyAoaCwgJnNvdWdodCk7CisJICBuaGFuZGxlcysrOworCX0KKworICAgICAgIGlmICgocGZkW2ldLnJldmVudHMgfD0gaGFwcGVuZWQpICE9IDApCisJcmMrKzsKKyAgICB9CisKKyAgaWYgKCFyYyAmJiBvcmlnX3RpbWVvdXQgJiYgdGltZW91dCAhPSBJTkZUSU0pCisgICAgeworICAgICAgVUxPTkdMT05HIGVsYXBzZWQgPSBHZXRUaWNrQ291bnQ2NCgpIC0gc3RhcnQ7CisgICAgICB0aW1lb3V0ID0gZWxhcHNlZCA+PSBvcmlnX3RpbWVvdXQgPyAwIDogKGludCkob3JpZ190aW1lb3V0IC0gZWxhcHNlZCk7CisgICAgfQorCisgIGlmICghcmMgJiYgdGltZW91dCkKKyAgICB7CisgICAgICBTbGVlcEV4ICgxLCBUUlVFKTsKKyAgICAgIGdvdG8gcmVzdGFydDsKKyAgICB9CisKKyAgcmV0dXJuIHJjOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9jb21wYXQvcG9sbC9wb2xsLmggYi9jb21wYXQvcG9sbC9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUxNTk3MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9wb2xsL3BvbGwuaApAQCAtMCwwICsxLDY3IEBACisvKiBIZWFkZXIgZm9yIHBvbGwoMikgZW11bGF0aW9uCisgICBDb250cmlidXRlZCBieSBQYW9sbyBCb256aW5pLgorCisgICBDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwMywgMjAwNywgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZ251bGliLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0dMX1BPTExfSAorI2RlZmluZSBfR0xfUE9MTF9ICisKKyNpZiBkZWZpbmVkKF9XSU4zMl9XSU5OVCkgJiYgX1dJTjMyX1dJTk5UID49IDB4NjAwCisvKiBWaXN0YSBoYXMgaXRzIG93biwgc29ja2V0LW9ubHkgcG9sbCgpICovCisjdW5kZWYgUE9MTElOCisjdW5kZWYgUE9MTFBSSQorI3VuZGVmIFBPTExPVVQKKyN1bmRlZiBQT0xMRVJSCisjdW5kZWYgUE9MTEhVUAorI3VuZGVmIFBPTExOVkFMCisjdW5kZWYgUE9MTFJETk9STQorI3VuZGVmIFBPTExSREJBTkQKKyN1bmRlZiBQT0xMV1JOT1JNCisjdW5kZWYgUE9MTFdSQkFORAorI2RlZmluZSBwb2xsZmQgY29tcGF0X3BvbGxmZAorI2VuZGlmCisKKy8qIGZha2UgYSBwb2xsKDIpIGVudmlyb25tZW50ICovCisjZGVmaW5lIFBPTExJTiAgICAgIDB4MDAwMSAgICAgIC8qIGFueSByZWFkYWJsZSBkYXRhIGF2YWlsYWJsZSAgICovCisjZGVmaW5lIFBPTExQUkkgICAgIDB4MDAwMiAgICAgIC8qIE9PQi9VcmdlbnQgcmVhZGFibGUgZGF0YSAgICAgICovCisjZGVmaW5lIFBPTExPVVQgICAgIDB4MDAwNCAgICAgIC8qIGZpbGUgZGVzY3JpcHRvciBpcyB3cml0ZWFibGUgICovCisjZGVmaW5lIFBPTExFUlIgICAgIDB4MDAwOCAgICAgIC8qIHNvbWUgcG9sbCBlcnJvciBvY2N1cnJlZCAgICAgICovCisjZGVmaW5lIFBPTExIVVAgICAgIDB4MDAxMCAgICAgIC8qIGZpbGUgZGVzY3JpcHRvciB3YXMgImh1bmcgdXAiICovCisjZGVmaW5lIFBPTExOVkFMICAgIDB4MDAyMCAgICAgIC8qIHJlcXVlc3RlZCBldmVudHMgImludmFsaWQiICAgICovCisjZGVmaW5lIFBPTExSRE5PUk0gIDB4MDA0MAorI2RlZmluZSBQT0xMUkRCQU5EICAweDAwODAKKyNkZWZpbmUgUE9MTFdSTk9STSAgMHgwMTAwCisjZGVmaW5lIFBPTExXUkJBTkQgIDB4MDIwMAorCitzdHJ1Y3QgcG9sbGZkCit7CisgIGludCBmZDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHdoaWNoIGZpbGUgZGVzY3JpcHRvciB0byBwb2xsICovCisgIHNob3J0IGV2ZW50czsgICAgICAgICAgICAgICAgIC8qIGV2ZW50cyB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAgICovCisgIHNob3J0IHJldmVudHM7ICAgICAgICAgICAgICAgIC8qIGV2ZW50cyBmb3VuZCBvbiByZXR1cm4gICAgICAgICovCit9OworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbmZkc190OworCitleHRlcm4gaW50IHBvbGwgKHN0cnVjdCBwb2xsZmQgKnBmZCwgbmZkc190IG5mZCwgaW50IHRpbWVvdXQpOworCisvKiBEZWZpbmUgSU5GVElNIG9ubHkgaWYgZG9pbmcgc28gY29uZm9ybXMgdG8gUE9TSVguICAqLworI2lmICFkZWZpbmVkIChfUE9TSVhfQ19TT1VSQ0UpICYmICFkZWZpbmVkIChfWE9QRU5fU09VUkNFKQorI2RlZmluZSBJTkZUSU0gKC0xKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xfUE9MTF9IICovCmRpZmYgLS1naXQgYS9jb21wYXQvcHJlYWQuYyBiL2NvbXBhdC9wcmVhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGNhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcHJlYWQuYwpAQCAtMCwwICsxLDE4IEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK3NzaXplX3QgZ2l0X3ByZWFkKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsIG9mZl90IG9mZnNldCkKK3sKKyAgICAgICAgb2ZmX3QgY3VycmVudF9vZmZzZXQ7CisgICAgICAgIHNzaXplX3QgcmM7CisKKyAgICAgICAgY3VycmVudF9vZmZzZXQgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpOworCisgICAgICAgIGlmIChsc2VlayhmZCwgb2Zmc2V0LCBTRUVLX1NFVCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICByYyA9IHJlYWRfaW5fZnVsbChmZCwgYnVmLCBjb3VudCk7CisKKyAgICAgICAgaWYgKGN1cnJlbnRfb2Zmc2V0ICE9IGxzZWVrKGZkLCBjdXJyZW50X29mZnNldCwgU0VFS19TRVQpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jIGIvY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNjI1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcHJlY29tcG9zZV91dGY4LmMKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb252ZXJ0cyBmaWxlbmFtZXMgZnJvbSBkZWNvbXBvc2VkIHVuaWNvZGUgaW50byBwcmVjb21wb3NlZCB1bmljb2RlLgorICogVXNlZCBvbiBNYWNPUyBYLgorICovCisKKyNkZWZpbmUgUFJFQ09NUE9TRV9VTklDT0RFX0MKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInByZWNvbXBvc2VfdXRmOC5oIgorCit0eXBlZGVmIGNoYXIgKmljb252X2licDsKK3N0YXRpYyBjb25zdCBjaGFyICpyZXBvX2VuY29kaW5nID0gIlVURi04IjsKK3N0YXRpYyBjb25zdCBjaGFyICpwYXRoX2VuY29kaW5nID0gIlVURi04LU1BQyI7CisKK3N0YXRpYyBzaXplX3QgaGFzX25vbl9hc2NpaShjb25zdCBjaGFyICpzLCBzaXplX3QgbWF4bGVuLCBzaXplX3QgKnN0cmxlbl9jKQoreworCWNvbnN0IHVpbnQ4X3QgKnB0ciA9IChjb25zdCB1aW50OF90ICopczsKKwlzaXplX3Qgc3RybGVuX2NoYXJzID0gMDsKKwlzaXplX3QgcmV0ID0gMDsKKworCWlmICghcHRyIHx8ICEqcHRyKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgqcHRyICYmIG1heGxlbikgeworCQlpZiAoKnB0ciAmIDB4ODApCisJCQlyZXQrKzsKKwkJc3RybGVuX2NoYXJzKys7CisJCXB0cisrOworCQltYXhsZW4tLTsKKwl9CisJaWYgKHN0cmxlbl9jKQorCQkqc3RybGVuX2MgPSBzdHJsZW5fY2hhcnM7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3ZvaWQgcHJvYmVfdXRmOF9wYXRobmFtZV9jb21wb3NpdGlvbih2b2lkKQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBjb25zdCBjaGFyICphdW1sX25mYyA9ICJceGMzXHhhNCI7CisJc3RhdGljIGNvbnN0IGNoYXIgKmF1bWxfbmZkID0gIlx4NjFceGNjXHg4OCI7CisJaW50IG91dHB1dF9mZDsKKwlpZiAocHJlY29tcG9zZWRfdW5pY29kZSAhPSAtMSkKKwkJcmV0dXJuOyAvKiBXZSBmb3VuZCBpdCBkZWZpbmVkIGluIHRoZSBnbG9iYWwgY29uZmlnLCByZXNwZWN0IGl0ICovCisJZ2l0X3BhdGhfYnVmKCZwYXRoLCAiJXMiLCBhdW1sX25mYyk7CisJb3V0cHV0X2ZkID0gb3BlbihwYXRoLmJ1ZiwgT19DUkVBVHxPX0VYQ0x8T19SRFdSLCAwNjAwKTsKKwlpZiAob3V0cHV0X2ZkID49IDApIHsKKwkJY2xvc2Uob3V0cHV0X2ZkKTsKKwkJZ2l0X3BhdGhfYnVmKCZwYXRoLCAiJXMiLCBhdW1sX25mZCk7CisJCXByZWNvbXBvc2VkX3VuaWNvZGUgPSBhY2Nlc3MocGF0aC5idWYsIFJfT0spID8gMCA6IDE7CisJCWdpdF9jb25maWdfc2V0KCJjb3JlLnByZWNvbXBvc2V1bmljb2RlIiwKKwkJCSAgICAgICBwcmVjb21wb3NlZF91bmljb2RlID8gInRydWUiIDogImZhbHNlIik7CisJCWdpdF9wYXRoX2J1ZigmcGF0aCwgIiVzIiwgYXVtbF9uZmMpOworCQlpZiAodW5saW5rKHBhdGguYnVmKSkKKwkJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gdW5saW5rICclcyciKSwgcGF0aC5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7Cit9CisKKwordm9pZCBwcmVjb21wb3NlX2FyZ3YoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpID0gMDsKKwljb25zdCBjaGFyICpvbGRhcmc7CisJY2hhciAqbmV3YXJnOworCWljb252X3QgaWNfcHJlY29tcG9zZTsKKworCWlmIChwcmVjb21wb3NlZF91bmljb2RlICE9IDEpCisJCXJldHVybjsKKworCWljX3ByZWNvbXBvc2UgPSBpY29udl9vcGVuKHJlcG9fZW5jb2RpbmcsIHBhdGhfZW5jb2RpbmcpOworCWlmIChpY19wcmVjb21wb3NlID09IChpY29udl90KSAtMSkKKwkJcmV0dXJuOworCisJd2hpbGUgKGkgPCBhcmdjKSB7CisJCXNpemVfdCBuYW1lbGVuOworCQlvbGRhcmcgPSBhcmd2W2ldOworCQlpZiAoaGFzX25vbl9hc2NpaShvbGRhcmcsIChzaXplX3QpLTEsICZuYW1lbGVuKSkgeworCQkJbmV3YXJnID0gcmVlbmNvZGVfc3RyaW5nX2ljb252KG9sZGFyZywgbmFtZWxlbiwgaWNfcHJlY29tcG9zZSwgMCwgTlVMTCk7CisJCQlpZiAobmV3YXJnKQorCQkJCWFyZ3ZbaV0gPSBuZXdhcmc7CisJCX0KKwkJaSsrOworCX0KKwlpY29udl9jbG9zZShpY19wcmVjb21wb3NlKTsKK30KKworCitQUkVDX0RJUiAqcHJlY29tcG9zZV91dGY4X29wZW5kaXIoY29uc3QgY2hhciAqZGlybmFtZSkKK3sKKwlQUkVDX0RJUiAqcHJlY19kaXIgPSB4bWFsbG9jKHNpemVvZihQUkVDX0RJUikpOworCXByZWNfZGlyLT5kaXJlbnRfbmZjID0geG1hbGxvYyhzaXplb2YoZGlyZW50X3ByZWNfcHN4KSk7CisJcHJlY19kaXItPmRpcmVudF9uZmMtPm1heF9uYW1lX2xlbiA9IHNpemVvZihwcmVjX2Rpci0+ZGlyZW50X25mYy0+ZF9uYW1lKTsKKworCXByZWNfZGlyLT5kaXJwID0gb3BlbmRpcihkaXJuYW1lKTsKKwlpZiAoIXByZWNfZGlyLT5kaXJwKSB7CisJCWZyZWUocHJlY19kaXItPmRpcmVudF9uZmMpOworCQlmcmVlKHByZWNfZGlyKTsKKwkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIHsKKwkJaW50IHJldF9lcnJubyA9IGVycm5vOworCQlwcmVjX2Rpci0+aWNfcHJlY29tcG9zZSA9IGljb252X29wZW4ocmVwb19lbmNvZGluZywgcGF0aF9lbmNvZGluZyk7CisJCS8qIGlmIGljb252X29wZW4oKSBmYWlscywgZGllKCkgaW4gcmVhZGRpcigpIGlmIG5lZWRlZCAqLworCQllcnJubyA9IHJldF9lcnJubzsKKwl9CisKKwlyZXR1cm4gcHJlY19kaXI7Cit9CisKK3N0cnVjdCBkaXJlbnRfcHJlY19wc3ggKnByZWNvbXBvc2VfdXRmOF9yZWFkZGlyKFBSRUNfRElSICpwcmVjX2RpcikKK3sKKwlzdHJ1Y3QgZGlyZW50ICpyZXM7CisJcmVzID0gcmVhZGRpcihwcmVjX2Rpci0+ZGlycCk7CisJaWYgKHJlcykgeworCQlzaXplX3QgbmFtZWxlbnogPSBzdHJsZW4ocmVzLT5kX25hbWUpICsgMTsgLyogXDAgKi8KKwkJc2l6ZV90IG5ld19tYXhsZW4gPSBuYW1lbGVuejsKKworCQlpbnQgcmV0X2Vycm5vID0gZXJybm87CisKKwkJaWYgKG5ld19tYXhsZW4gPiBwcmVjX2Rpci0+ZGlyZW50X25mYy0+bWF4X25hbWVfbGVuKSB7CisJCQlzaXplX3QgbmV3X2xlbiA9IHNpemVvZihkaXJlbnRfcHJlY19wc3gpICsgbmV3X21heGxlbiAtCisJCQkJc2l6ZW9mKHByZWNfZGlyLT5kaXJlbnRfbmZjLT5kX25hbWUpOworCisJCQlwcmVjX2Rpci0+ZGlyZW50X25mYyA9IHhyZWFsbG9jKHByZWNfZGlyLT5kaXJlbnRfbmZjLCBuZXdfbGVuKTsKKwkJCXByZWNfZGlyLT5kaXJlbnRfbmZjLT5tYXhfbmFtZV9sZW4gPSBuZXdfbWF4bGVuOworCQl9CisKKwkJcHJlY19kaXItPmRpcmVudF9uZmMtPmRfaW5vICA9IHJlcy0+ZF9pbm87CisJCXByZWNfZGlyLT5kaXJlbnRfbmZjLT5kX3R5cGUgPSByZXMtPmRfdHlwZTsKKworCQlpZiAoKHByZWNvbXBvc2VkX3VuaWNvZGUgPT0gMSkgJiYgaGFzX25vbl9hc2NpaShyZXMtPmRfbmFtZSwgKHNpemVfdCktMSwgTlVMTCkpIHsKKwkJCWlmIChwcmVjX2Rpci0+aWNfcHJlY29tcG9zZSA9PSAoaWNvbnZfdCktMSkgeworCQkJCWRpZSgiaWNvbnZfb3BlbiglcywlcykgZmFpbGVkLCBidXQgbmVlZGVkOlxuIgorCQkJCQkJIiAgICBwcmVjb21wb3NlZCB1bmljb2RlIGlzIG5vdCBzdXBwb3J0ZWQuXG4iCisJCQkJCQkiICAgIElmIHlvdSB3YW50IHRvIHVzZSBkZWNvbXBvc2VkIHVuaWNvZGUsIHJ1blxuIgorCQkJCQkJIiAgICBcImdpdCBjb25maWcgY29yZS5wcmVjb21wb3NldW5pY29kZSBmYWxzZVwiXG4iLAorCQkJCQkJcmVwb19lbmNvZGluZywgcGF0aF9lbmNvZGluZyk7CisJCQl9IGVsc2UgeworCQkJCWljb252X2licAljcCA9IChpY29udl9pYnApcmVzLT5kX25hbWU7CisJCQkJc2l6ZV90IGlubGVmdCA9IG5hbWVsZW56OworCQkJCWNoYXIgKm91dHBvcyA9ICZwcmVjX2Rpci0+ZGlyZW50X25mYy0+ZF9uYW1lWzBdOworCQkJCXNpemVfdCBvdXRzeiA9IHByZWNfZGlyLT5kaXJlbnRfbmZjLT5tYXhfbmFtZV9sZW47CisJCQkJZXJybm8gPSAwOworCQkJCWljb252KHByZWNfZGlyLT5pY19wcmVjb21wb3NlLCAmY3AsICZpbmxlZnQsICZvdXRwb3MsICZvdXRzeik7CisJCQkJaWYgKGVycm5vIHx8IGlubGVmdCkgeworCQkJCQkvKgorCQkJCQkgKiBpY29udigpIGZhaWxlZCBhbmQgZXJybm8gY291bGQgYmUgRTJCSUcsIEVJTFNFUSwgRUlOVkFMLCBFQkFERgorCQkJCQkgKiBNYWNPUyBYIGF2b2lkcyBpbGxlZ2FsIGJ5dGUgc2VxdWVuY2VzLgorCQkJCQkgKiBJZiB0aGV5IG9jY3VyIG9uIGEgbW91bnRlZCBkcml2ZSAoZS5nLiBORlMpIGl0IGlzIG5vdCB3b3J0aCB0bworCQkJCQkgKiBkaWUoKSBmb3IgdGhhdCwgYnV0IHJhdGhlciBsZXQgdGhlIHVzZXIgc2VlIHRoZSBvcmlnaW5hbCBuYW1lCisJCQkJCSovCisJCQkJCW5hbWVsZW56ID0gMDsgLyogdHJpZ2dlciBzdHJsY3B5ICovCisJCQkJfQorCQkJfQorCQl9IGVsc2UKKwkJCW5hbWVsZW56ID0gMDsKKworCQlpZiAoIW5hbWVsZW56KQorCQkJc3RybGNweShwcmVjX2Rpci0+ZGlyZW50X25mYy0+ZF9uYW1lLCByZXMtPmRfbmFtZSwKKwkJCQkJCQlwcmVjX2Rpci0+ZGlyZW50X25mYy0+bWF4X25hbWVfbGVuKTsKKworCQllcnJubyA9IHJldF9lcnJubzsKKwkJcmV0dXJuIHByZWNfZGlyLT5kaXJlbnRfbmZjOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworCitpbnQgcHJlY29tcG9zZV91dGY4X2Nsb3NlZGlyKFBSRUNfRElSICpwcmVjX2RpcikKK3sKKwlpbnQgcmV0X3ZhbHVlOworCWludCByZXRfZXJybm87CisJcmV0X3ZhbHVlID0gY2xvc2VkaXIocHJlY19kaXItPmRpcnApOworCXJldF9lcnJubyA9IGVycm5vOworCWlmIChwcmVjX2Rpci0+aWNfcHJlY29tcG9zZSAhPSAoaWNvbnZfdCktMSkKKwkJaWNvbnZfY2xvc2UocHJlY19kaXItPmljX3ByZWNvbXBvc2UpOworCWZyZWUocHJlY19kaXItPmRpcmVudF9uZmMpOworCWZyZWUocHJlY19kaXIpOworCWVycm5vID0gcmV0X2Vycm5vOworCXJldHVybiByZXRfdmFsdWU7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvcHJlY29tcG9zZV91dGY4LmggYi9jb21wYXQvcHJlY29tcG9zZV91dGY4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4NDNkMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9wcmVjb21wb3NlX3V0ZjguaApAQCAtMCwwICsxLDQ2IEBACisjaWZuZGVmIFBSRUNPTVBPU0VfVU5JQ09ERV9ICisjZGVmaW5lIFBSRUNPTVBPU0VfVU5JQ09ERV9ICisKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGljb252Lmg+CisKKwordHlwZWRlZiBzdHJ1Y3QgZGlyZW50X3ByZWNfcHN4IHsKKwlpbm9fdCBkX2lubzsgICAgICAgICAgICAvKiBQb3NpeCAqLworCXNpemVfdCBtYXhfbmFtZV9sZW47ICAgIC8qIFNlZSBiZWxvdyAqLworCXVuc2lnbmVkIGNoYXIgZF90eXBlOyAgIC8qIGF2YWlsYWJsZSBvbiBhbGwgc3lzdGVtcyBnaXQgcnVucyBvbiAqLworCisJLyoKKwkgKiBTZWUgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvZGlyZW50LmguaHRtbAorCSAqIE5BTUVfTUFYICsgMSBzaG91bGQgYmUgZW5vdWdoLCBidXQgc29tZSBzeXN0ZW1zIGhhdmUKKwkgKiBOQU1FX01BWD0yNTUgYW5kIHN0cmxlbihkX25hbWUpIG1heSByZXR1cm4gNTA4IG9yIDUxMAorCSAqIFNvbHV0aW9uOiBhbGxvY2F0ZSBtb3JlIHdoZW4gbmVlZGVkLCBzZWUgcHJlY29tcG9zZV91dGY4X3JlYWRkaXIoKQorCSAqLworCWNoYXIgICBkX25hbWVbTkFNRV9NQVgrMV07Cit9IGRpcmVudF9wcmVjX3BzeDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisJaWNvbnZfdCBpY19wcmVjb21wb3NlOworCURJUiAqZGlycDsKKwlzdHJ1Y3QgZGlyZW50X3ByZWNfcHN4ICpkaXJlbnRfbmZjOworfSBQUkVDX0RJUjsKKwordm9pZCBwcmVjb21wb3NlX2FyZ3YoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK3ZvaWQgcHJvYmVfdXRmOF9wYXRobmFtZV9jb21wb3NpdGlvbih2b2lkKTsKKworUFJFQ19ESVIgKnByZWNvbXBvc2VfdXRmOF9vcGVuZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpOworc3RydWN0IGRpcmVudF9wcmVjX3BzeCAqcHJlY29tcG9zZV91dGY4X3JlYWRkaXIoUFJFQ19ESVIgKmRpcnApOworaW50IHByZWNvbXBvc2VfdXRmOF9jbG9zZWRpcihQUkVDX0RJUiAqZGlycCk7CisKKyNpZm5kZWYgUFJFQ09NUE9TRV9VTklDT0RFX0MKKyNkZWZpbmUgZGlyZW50IGRpcmVudF9wcmVjX3BzeAorI2RlZmluZSBvcGVuZGlyKG4pIHByZWNvbXBvc2VfdXRmOF9vcGVuZGlyKG4pCisjZGVmaW5lIHJlYWRkaXIoZCkgcHJlY29tcG9zZV91dGY4X3JlYWRkaXIoZCkKKyNkZWZpbmUgY2xvc2VkaXIoZCkgcHJlY29tcG9zZV91dGY4X2Nsb3NlZGlyKGQpCisjZGVmaW5lIERJUiBQUkVDX0RJUgorI2VuZGlmIC8qIFBSRUNPTVBPU0VfVU5JQ09ERV9DICovCisKKyNlbmRpZiAvKiBQUkVDT01QT1NFX1VOSUNPREVfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3Fzb3J0X3MuYyBiL2NvbXBhdC9xc29ydF9zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkMWYwYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9xc29ydF9zLmMKQEAgLTAsMCArMSw2OSBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCisvKgorICogQSBtZXJnZSBzb3J0IGltcGxlbWVudGF0aW9uLCBzaW1wbGlmaWVkIGZyb20gdGhlIHFzb3J0IGltcGxlbWVudGF0aW9uCisgKiBieSBNaWtlIEhhZXJ0ZWwsIHdoaWNoIGlzIGEgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAqIEFkZGVkIGNvbnRleHQgcG9pbnRlciwgc2FmZXR5IGNoZWNrcyBhbmQgcmV0dXJuIHZhbHVlLgorICovCisKK3N0YXRpYyB2b2lkIG1zb3J0X3dpdGhfdG1wKHZvaWQgKmIsIHNpemVfdCBuLCBzaXplX3QgcywKKwkJCSAgIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHZvaWQgKiksCisJCQkgICBjaGFyICp0LCB2b2lkICpjdHgpCit7CisJY2hhciAqdG1wOworCWNoYXIgKmIxLCAqYjI7CisJc2l6ZV90IG4xLCBuMjsKKworCWlmIChuIDw9IDEpCisJCXJldHVybjsKKworCW4xID0gbiAvIDI7CisJbjIgPSBuIC0gbjE7CisJYjEgPSBiOworCWIyID0gKGNoYXIgKiliICsgKG4xICogcyk7CisKKwltc29ydF93aXRoX3RtcChiMSwgbjEsIHMsIGNtcCwgdCwgY3R4KTsKKwltc29ydF93aXRoX3RtcChiMiwgbjIsIHMsIGNtcCwgdCwgY3R4KTsKKworCXRtcCA9IHQ7CisKKwl3aGlsZSAobjEgPiAwICYmIG4yID4gMCkgeworCQlpZiAoY21wKGIxLCBiMiwgY3R4KSA8PSAwKSB7CisJCQltZW1jcHkodG1wLCBiMSwgcyk7CisJCQl0bXAgKz0gczsKKwkJCWIxICs9IHM7CisJCQktLW4xOworCQl9IGVsc2UgeworCQkJbWVtY3B5KHRtcCwgYjIsIHMpOworCQkJdG1wICs9IHM7CisJCQliMiArPSBzOworCQkJLS1uMjsKKwkJfQorCX0KKwlpZiAobjEgPiAwKQorCQltZW1jcHkodG1wLCBiMSwgbjEgKiBzKTsKKwltZW1jcHkoYiwgdCwgKG4gLSBuMikgKiBzKTsKK30KKworaW50IGdpdF9xc29ydF9zKHZvaWQgKmIsIHNpemVfdCBuLCBzaXplX3QgcywKKwkJaW50ICgqY21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqY3R4KQoreworCWNvbnN0IHNpemVfdCBzaXplID0gc3RfbXVsdChuLCBzKTsKKwljaGFyIGJ1ZlsxMDI0XTsKKworCWlmICghbikKKwkJcmV0dXJuIDA7CisJaWYgKCFiIHx8ICFjbXApCisJCXJldHVybiAtMTsKKworCWlmIChzaXplIDwgc2l6ZW9mKGJ1ZikpIHsKKwkJLyogVGhlIHRlbXBvcmFyeSBhcnJheSBmaXRzIG9uIHRoZSBzbWFsbCBvbi1zdGFjayBidWZmZXIuICovCisJCW1zb3J0X3dpdGhfdG1wKGIsIG4sIHMsIGNtcCwgYnVmLCBjdHgpOworCX0gZWxzZSB7CisJCS8qIEl0J3Mgc29tZXdoYXQgbGFyZ2UsIHNvIG1hbGxvYyBpdC4gICovCisJCWNoYXIgKnRtcCA9IHhtYWxsb2Moc2l6ZSk7CisJCW1zb3J0X3dpdGhfdG1wKGIsIG4sIHMsIGNtcCwgdG1wLCBjdHgpOworCQlmcmVlKHRtcCk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2NvbXAuYyBiL2NvbXBhdC9yZWdleC9yZWdjb21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiYzA5ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9yZWdleC9yZWdjb21wLmMKQEAgLTAsMCArMSwzODkxIEBACisvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDcsMjAwOSwyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBJc2FtdSBIYXNlZ2F3YSA8aXNhbXVAeWFtYXRvLmlibS5jb20+LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZiBkZWZpbmVkIF9fVEFOREVNCisgLyogVGhpcyBpcyBjdXJyZW50bHkgZHVwbGljYXRlZCBmcm9tIGdpdC1jb21wYXQtdXRpbHMuaCAqLworIyBpZmRlZiBOT19JTlRQVFJfVAorIHR5cGVkZWYgbG9uZyBpbnRwdHJfdDsKKyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludHB0cl90OworIyBlbmRpZgorI2VuZGlmCisKK3N0YXRpYyByZWdfZXJyY29kZV90IHJlX2NvbXBpbGVfaW50ZXJuYWwgKHJlZ2V4X3QgKnByZWcsIGNvbnN0IGNoYXIgKiBwYXR0ZXJuLAorCQkJCQkgIHNpemVfdCBsZW5ndGgsIHJlZ19zeW50YXhfdCBzeW50YXgpOworc3RhdGljIHZvaWQgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsCisJCQkJICAgICBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorCQkJCSAgICAgY2hhciAqZmFzdG1hcCk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBpbml0X2RmYSAocmVfZGZhX3QgKmRmYSwgc2l6ZV90IHBhdF9sZW4pOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgdm9pZCBmcmVlX2NoYXJzZXQgKHJlX2NoYXJzZXRfdCAqY3NldCk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyB2b2lkIGZyZWVfd29ya2FyZWFfY29tcGlsZSAocmVnZXhfdCAqcHJlZyk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjcmVhdGVfaW5pdGlhbF9zdGF0ZSAocmVfZGZhX3QgKmRmYSk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyB2b2lkIG9wdGltaXplX3V0ZjggKHJlX2RmYV90ICpkZmEpOworI2VuZGlmCitzdGF0aWMgcmVnX2VycmNvZGVfdCBhbmFseXplIChyZWdleF90ICpwcmVnKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IHByZW9yZGVyIChiaW5fdHJlZV90ICpyb290LAorCQkJICAgICAgIHJlZ19lcnJjb2RlX3QgKGZuICh2b2lkICosIGJpbl90cmVlX3QgKikpLAorCQkJICAgICAgIHZvaWQgKmV4dHJhKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IHBvc3RvcmRlciAoYmluX3RyZWVfdCAqcm9vdCwKKwkJCQlyZWdfZXJyY29kZV90IChmbiAodm9pZCAqLCBiaW5fdHJlZV90ICopKSwKKwkJCQl2b2lkICpleHRyYSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBvcHRpbWl6ZV9zdWJleHBzICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBsb3dlcl9zdWJleHBzICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgYmluX3RyZWVfdCAqbG93ZXJfc3ViZXhwIChyZWdfZXJyY29kZV90ICplcnIsIHJlZ2V4X3QgKnByZWcsCisJCQkJIGJpbl90cmVlX3QgKm5vZGUpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2FsY19maXJzdCAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2FsY19uZXh0ICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBsaW5rX25mYV9ub2RlcyAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpOworc3RhdGljIGludCBkdXBsaWNhdGVfbm9kZSAocmVfZGZhX3QgKmRmYSwgaW50IG9yZ19pZHgsIHVuc2lnbmVkIGludCBjb25zdHJhaW50KTsKK3N0YXRpYyBpbnQgc2VhcmNoX2R1cGxpY2F0ZWRfbm9kZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG9yZ19ub2RlLAorCQkJCSAgIHVuc2lnbmVkIGludCBjb25zdHJhaW50KTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNhbGNfZWNsb3N1cmUgKHJlX2RmYV90ICpkZmEpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2FsY19lY2xvc3VyZV9pdGVyIChyZV9ub2RlX3NldCAqbmV3X3NldCwgcmVfZGZhX3QgKmRmYSwKKwkJCQkJIGludCBub2RlLCBpbnQgcm9vdCk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjYWxjX2ludmVjbG9zdXJlIChyZV9kZmFfdCAqZGZhKTsKK3N0YXRpYyBpbnQgZmV0Y2hfbnVtYmVyIChyZV9zdHJpbmdfdCAqaW5wdXQsIHJlX3Rva2VuX3QgKnRva2VuLAorCQkJIHJlZ19zeW50YXhfdCBzeW50YXgpOworc3RhdGljIGludCBwZWVrX3Rva2VuIChyZV90b2tlbl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LAorCQkJcmVnX3N5bnRheF90IHN5bnRheCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgYmluX3RyZWVfdCAqcGFyc2UgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsCisJCQkgIHJlZ19zeW50YXhfdCBzeW50YXgsIHJlZ19lcnJjb2RlX3QgKmVycik7CitzdGF0aWMgYmluX3RyZWVfdCAqcGFyc2VfcmVnX2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywKKwkJCQkgIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3ludGF4LAorCQkJCSAgaW50IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycik7CitzdGF0aWMgYmluX3RyZWVfdCAqcGFyc2VfYnJhbmNoIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLAorCQkJCSByZV90b2tlbl90ICp0b2tlbiwgcmVnX3N5bnRheF90IHN5bnRheCwKKwkJCQkgaW50IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycik7CitzdGF0aWMgYmluX3RyZWVfdCAqcGFyc2VfZXhwcmVzc2lvbiAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywKKwkJCQkgICAgIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3ludGF4LAorCQkJCSAgICAgaW50IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycik7CitzdGF0aWMgYmluX3RyZWVfdCAqcGFyc2Vfc3ViX2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywKKwkJCQkgIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3ludGF4LAorCQkJCSAgaW50IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycik7CitzdGF0aWMgYmluX3RyZWVfdCAqcGFyc2VfZHVwX29wIChiaW5fdHJlZV90ICpkdXBfZWxlbSwgcmVfc3RyaW5nX3QgKnJlZ2V4cCwKKwkJCQkgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisJCQkJIHJlZ19zeW50YXhfdCBzeW50YXgsIHJlZ19lcnJjb2RlX3QgKmVycik7CitzdGF0aWMgYmluX3RyZWVfdCAqcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsCisJCQkJICAgICAgcmVfdG9rZW5fdCAqdG9rZW4sIHJlZ19zeW50YXhfdCBzeW50YXgsCisJCQkJICAgICAgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IHBhcnNlX2JyYWNrZXRfZWxlbWVudCAoYnJhY2tldF9lbGVtX3QgKmVsZW0sCisJCQkJCSAgICByZV9zdHJpbmdfdCAqcmVnZXhwLAorCQkJCQkgICAgcmVfdG9rZW5fdCAqdG9rZW4sIGludCB0b2tlbl9sZW4sCisJCQkJCSAgICByZV9kZmFfdCAqZGZhLAorCQkJCQkgICAgcmVnX3N5bnRheF90IHN5bnRheCwKKwkJCQkJICAgIGludCBhY2NlcHRfaHlwaGVuKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IHBhcnNlX2JyYWNrZXRfc3ltYm9sIChicmFja2V0X2VsZW1fdCAqZWxlbSwKKwkJCQkJICByZV9zdHJpbmdfdCAqcmVnZXhwLAorCQkJCQkgIHJlX3Rva2VuX3QgKnRva2VuKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIHJlZ19lcnJjb2RlX3QgYnVpbGRfZXF1aXZfY2xhc3MgKGJpdHNldF90IHNiY3NldCwKKwkJCQkJcmVfY2hhcnNldF90ICptYmNzZXQsCisJCQkJCWludCAqZXF1aXZfY2xhc3NfYWxsb2MsCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgYnVpbGRfY2hhcmNsYXNzIChSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywKKwkJCQkgICAgICBiaXRzZXRfdCBzYmNzZXQsCisJCQkJICAgICAgcmVfY2hhcnNldF90ICptYmNzZXQsCisJCQkJICAgICAgaW50ICpjaGFyX2NsYXNzX2FsbG9jLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmNsYXNzX25hbWUsCisJCQkJICAgICAgcmVnX3N5bnRheF90IHN5bnRheCk7CisjZWxzZSAgLyogbm90IFJFX0VOQUJMRV9JMThOICovCitzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF9lcXVpdl9jbGFzcyAoYml0c2V0X3Qgc2Jjc2V0LAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGJ1aWxkX2NoYXJjbGFzcyAoUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsCisJCQkJICAgICAgYml0c2V0X3Qgc2Jjc2V0LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmNsYXNzX25hbWUsCisJCQkJICAgICAgcmVnX3N5bnRheF90IHN5bnRheCk7CisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCitzdGF0aWMgYmluX3RyZWVfdCAqYnVpbGRfY2hhcmNsYXNzX29wIChyZV9kZmFfdCAqZGZhLAorCQkJCSAgICAgICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywKKwkJCQkgICAgICAgY29uc3QgY2hhciAqY2xhc3NfbmFtZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqZXh0cmEsCisJCQkJICAgICAgIGludCBub25fbWF0Y2gsIHJlZ19lcnJjb2RlX3QgKmVycik7CitzdGF0aWMgYmluX3RyZWVfdCAqY3JlYXRlX3RyZWUgKHJlX2RmYV90ICpkZmEsCisJCQkJYmluX3RyZWVfdCAqbGVmdCwgYmluX3RyZWVfdCAqcmlnaHQsCisJCQkJcmVfdG9rZW5fdHlwZV90IHR5cGUpOworc3RhdGljIGJpbl90cmVlX3QgKmNyZWF0ZV90b2tlbl90cmVlIChyZV9kZmFfdCAqZGZhLAorCQkJCSAgICAgIGJpbl90cmVlX3QgKmxlZnQsIGJpbl90cmVlX3QgKnJpZ2h0LAorCQkJCSAgICAgIGNvbnN0IHJlX3Rva2VuX3QgKnRva2VuKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpkdXBsaWNhdGVfdHJlZSAoY29uc3QgYmluX3RyZWVfdCAqc3JjLCByZV9kZmFfdCAqZGZhKTsKK3N0YXRpYyB2b2lkIGZyZWVfdG9rZW4gKHJlX3Rva2VuX3QgKm5vZGUpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgZnJlZV90cmVlICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBtYXJrX29wdF9zdWJleHAgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKKwwKKy8qIFRoaXMgdGFibGUgZ2l2ZXMgYW4gZXJyb3IgbWVzc2FnZSBmb3IgZWFjaCBvZiB0aGUgZXJyb3IgY29kZXMgbGlzdGVkCisgICBpbiByZWdleC5oLiAgT2J2aW91c2x5IHRoZSBvcmRlciBoZXJlIGhhcyB0byBiZSBzYW1lIGFzIHRoZXJlLgorICAgUE9TSVggZG9lc24ndCByZXF1aXJlIHRoYXQgd2UgZG8gYW55dGhpbmcgZm9yIFJFR19OT0VSUk9SLAorICAgYnV0IHdoeSBub3QgYmUgbmljZT8gICovCisKK2NvbnN0IGNoYXIgX19yZV9lcnJvcl9tc2dpZFtdIGF0dHJpYnV0ZV9oaWRkZW4gPQorICB7CisjZGVmaW5lIFJFR19OT0VSUk9SX0lEWAkwCisgICAgZ2V0dGV4dF9ub29wICgiU3VjY2VzcyIpCS8qIFJFR19OT0VSUk9SICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfTk9NQVRDSF9JRFggKFJFR19OT0VSUk9SX0lEWCArIHNpemVvZiAiU3VjY2VzcyIpCisgICAgZ2V0dGV4dF9ub29wICgiTm8gbWF0Y2giKQkvKiBSRUdfTk9NQVRDSCAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0JBRFBBVF9JRFgJKFJFR19OT01BVENIX0lEWCArIHNpemVvZiAiTm8gbWF0Y2giKQorICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIikgLyogUkVHX0JBRFBBVCAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VDT0xMQVRFX0lEWCAoUkVHX0JBRFBBVF9JRFggKyBzaXplb2YgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIikKKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGNvbGxhdGlvbiBjaGFyYWN0ZXIiKSAvKiBSRUdfRUNPTExBVEUgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FQ1RZUEVfSURYCShSRUdfRUNPTExBVEVfSURYICsgc2l6ZW9mICJJbnZhbGlkIGNvbGxhdGlvbiBjaGFyYWN0ZXIiKQorICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUiKSAvKiBSRUdfRUNUWVBFICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRUVTQ0FQRV9JRFgJKFJFR19FQ1RZUEVfSURYICsgc2l6ZW9mICJJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lIikKKyAgICBnZXR0ZXh0X25vb3AgKCJUcmFpbGluZyBiYWNrc2xhc2giKSAvKiBSRUdfRUVTQ0FQRSAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VTVUJSRUdfSURYCShSRUdfRUVTQ0FQRV9JRFggKyBzaXplb2YgIlRyYWlsaW5nIGJhY2tzbGFzaCIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBiYWNrIHJlZmVyZW5jZSIpIC8qIFJFR19FU1VCUkVHICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRUJSQUNLX0lEWAkoUkVHX0VTVUJSRUdfSURYICsgc2l6ZW9mICJJbnZhbGlkIGJhY2sgcmVmZXJlbmNlIikKKyAgICBnZXR0ZXh0X25vb3AgKCJVbm1hdGNoZWQgWyBvciBbXiIpCS8qIFJFR19FQlJBQ0sgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FUEFSRU5fSURYCShSRUdfRUJSQUNLX0lEWCArIHNpemVvZiAiVW5tYXRjaGVkIFsgb3IgW14iKQorICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCAoIG9yIFxcKCIpIC8qIFJFR19FUEFSRU4gKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FQlJBQ0VfSURYCShSRUdfRVBBUkVOX0lEWCArIHNpemVvZiAiVW5tYXRjaGVkICggb3IgXFwoIikKKyAgICBnZXR0ZXh0X25vb3AgKCJVbm1hdGNoZWQgXFx7IikgLyogUkVHX0VCUkFDRSAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0JBREJSX0lEWAkoUkVHX0VCUkFDRV9JRFggKyBzaXplb2YgIlVubWF0Y2hlZCBcXHsiKQorICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iKSAvKiBSRUdfQkFEQlIgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FUkFOR0VfSURYCShSRUdfQkFEQlJfSURYICsgc2l6ZW9mICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IikKKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIHJhbmdlIGVuZCIpCS8qIFJFR19FUkFOR0UgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FU1BBQ0VfSURYCShSRUdfRVJBTkdFX0lEWCArIHNpemVvZiAiSW52YWxpZCByYW5nZSBlbmQiKQorICAgIGdldHRleHRfbm9vcCAoIk1lbW9yeSBleGhhdXN0ZWQiKSAvKiBSRUdfRVNQQUNFICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfQkFEUlBUX0lEWAkoUkVHX0VTUEFDRV9JRFggKyBzaXplb2YgIk1lbW9yeSBleGhhdXN0ZWQiKQorICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgcHJlY2VkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiIpIC8qIFJFR19CQURSUFQgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FRU5EX0lEWAkoUkVHX0JBRFJQVF9JRFggKyBzaXplb2YgIkludmFsaWQgcHJlY2VkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiIpCisgICAgZ2V0dGV4dF9ub29wICgiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iKSAvKiBSRUdfRUVORCAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VTSVpFX0lEWAkoUkVHX0VFTkRfSURYICsgc2l6ZW9mICJQcmVtYXR1cmUgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIpCisgICAgZ2V0dGV4dF9ub29wICgiUmVndWxhciBleHByZXNzaW9uIHRvbyBiaWciKSAvKiBSRUdfRVNJWkUgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FUlBBUkVOX0lEWAkoUkVHX0VTSVpFX0lEWCArIHNpemVvZiAiUmVndWxhciBleHByZXNzaW9uIHRvbyBiaWciKQorICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCApIG9yIFxcKSIpIC8qIFJFR19FUlBBUkVOICovCisgIH07CisKK2NvbnN0IHNpemVfdCBfX3JlX2Vycm9yX21zZ2lkX2lkeFtdIGF0dHJpYnV0ZV9oaWRkZW4gPQorICB7CisgICAgUkVHX05PRVJST1JfSURYLAorICAgIFJFR19OT01BVENIX0lEWCwKKyAgICBSRUdfQkFEUEFUX0lEWCwKKyAgICBSRUdfRUNPTExBVEVfSURYLAorICAgIFJFR19FQ1RZUEVfSURYLAorICAgIFJFR19FRVNDQVBFX0lEWCwKKyAgICBSRUdfRVNVQlJFR19JRFgsCisgICAgUkVHX0VCUkFDS19JRFgsCisgICAgUkVHX0VQQVJFTl9JRFgsCisgICAgUkVHX0VCUkFDRV9JRFgsCisgICAgUkVHX0JBREJSX0lEWCwKKyAgICBSRUdfRVJBTkdFX0lEWCwKKyAgICBSRUdfRVNQQUNFX0lEWCwKKyAgICBSRUdfQkFEUlBUX0lEWCwKKyAgICBSRUdfRUVORF9JRFgsCisgICAgUkVHX0VTSVpFX0lEWCwKKyAgICBSRUdfRVJQQVJFTl9JRFgKKyAgfTsKKwwKKy8qIEVudHJ5IHBvaW50cyBmb3IgR05VIGNvZGUuICAqLworCisKKyNpZmRlZiBaT1NfVVNTCisKKy8qIEZvciBaT1MgVVNTIHdlIG11c3QgZGVmaW5lIGJ0b3djICovCisKK3djaGFyX3QgCitidG93YyAoaW50IGMpCit7CisgICB3Y2hhcl90IHd0bXBbMl07CisgICBjaGFyIHRtcFsyXTsKKworICAgdG1wWzBdID0gYzsKKyAgIHRtcFsxXSA9IDA7CisKKyAgIG1idG93YyAod3RtcCwgdG1wLCAxKTsKKyAgIHJldHVybiB3dG1wWzBdOworfQorI2VuZGlmCisKKy8qIHJlX2NvbXBpbGVfcGF0dGVybiBpcyB0aGUgR05VIHJlZ3VsYXIgZXhwcmVzc2lvbiBjb21waWxlcjogaXQKKyAgIGNvbXBpbGVzIFBBVFRFUk4gKG9mIGxlbmd0aCBMRU5HVEgpIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gQlVGUC4KKyAgIFJldHVybnMgMCBpZiB0aGUgcGF0dGVybiB3YXMgdmFsaWQsIG90aGVyd2lzZSBhbiBlcnJvciBzdHJpbmcuCisKKyAgIEFzc3VtZXMgdGhlIGBhbGxvY2F0ZWQnIChhbmQgcGVyaGFwcyBgYnVmZmVyJykgYW5kIGB0cmFuc2xhdGUnIGZpZWxkcworICAgYXJlIHNldCBpbiBCVUZQIG9uIGVudHJ5LiAgKi8KKworY29uc3QgY2hhciAqCityZV9jb21waWxlX3BhdHRlcm4gKGNvbnN0IGNoYXIgKnBhdHRlcm4sCisJCSAgICBzaXplX3QgbGVuZ3RoLAorCQkgICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKQoreworICByZWdfZXJyY29kZV90IHJldDsKKworICAvKiBBbmQgR05VIGNvZGUgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0byBnZXQgcmVnaXN0ZXIgaW5mb3JtYXRpb24KKyAgICAgYnkgcGFzc2luZyBudWxsIGZvciB0aGUgUkVHUyBhcmd1bWVudCB0byByZV9tYXRjaCwgZXRjLiwgbm90IGJ5CisgICAgIHNldHRpbmcgbm9fc3ViLCB1bmxlc3MgUkVfTk9fU1VCIGlzIHNldC4gICovCisgIGJ1ZnAtPm5vX3N1YiA9ICEhKHJlX3N5bnRheF9vcHRpb25zICYgUkVfTk9fU1VCKTsKKworICAvKiBNYXRjaCBhbmNob3JzIGF0IG5ld2xpbmUuICAqLworICBidWZwLT5uZXdsaW5lX2FuY2hvciA9IDE7CisKKyAgcmV0ID0gcmVfY29tcGlsZV9pbnRlcm5hbCAoYnVmcCwgcGF0dGVybiwgbGVuZ3RoLCByZV9zeW50YXhfb3B0aW9ucyk7CisKKyAgaWYgKCFyZXQpCisgICAgcmV0dXJuIE5VTEw7CisgIHJldHVybiBnZXR0ZXh0IChfX3JlX2Vycm9yX21zZ2lkICsgX19yZV9lcnJvcl9tc2dpZF9pZHhbKGludCkgcmV0XSk7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfY29tcGlsZV9wYXR0ZXJuLCByZV9jb21waWxlX3BhdHRlcm4pCisjZW5kaWYKKworLyogU2V0IGJ5IGByZV9zZXRfc3ludGF4JyB0byB0aGUgY3VycmVudCByZWdleHAgc3ludGF4IHRvIHJlY29nbml6ZS4gIENhbgorICAgYWxzbyBiZSBhc3NpZ25lZCB0byBhcmJpdHJhcmlseTogZWFjaCBwYXR0ZXJuIGJ1ZmZlciBzdG9yZXMgaXRzIG93bgorICAgc3ludGF4LCBzbyBpdCBjYW4gYmUgY2hhbmdlZCBiZXR3ZWVuIHJlZ2V4IGNvbXBpbGF0aW9ucy4gICovCisvKiBUaGlzIGhhcyBubyBpbml0aWFsaXplciBiZWNhdXNlIGluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBFbWFjcworICAgYmVjb21lIHJlYWQtb25seSBhZnRlciBkdW1waW5nLiAgKi8KK3JlZ19zeW50YXhfdCByZV9zeW50YXhfb3B0aW9uczsKKworCisvKiBTcGVjaWZ5IHRoZSBwcmVjaXNlIHN5bnRheCBvZiByZWdleHBzIGZvciBjb21waWxhdGlvbi4gIFRoaXMgcHJvdmlkZXMKKyAgIGZvciBjb21wYXRpYmlsaXR5IGZvciB2YXJpb3VzIHV0aWxpdGllcyB3aGljaCBoaXN0b3JpY2FsbHkgaGF2ZQorICAgZGlmZmVyZW50LCBpbmNvbXBhdGlibGUgc3ludGF4ZXMuCisKKyAgIFRoZSBhcmd1bWVudCBTWU5UQVggaXMgYSBiaXQgbWFzayBjb21wcmlzZWQgb2YgdGhlIHZhcmlvdXMgYml0cworICAgZGVmaW5lZCBpbiByZWdleC5oLiAgV2UgcmV0dXJuIHRoZSBvbGQgc3ludGF4LiAgKi8KKworcmVnX3N5bnRheF90CityZV9zZXRfc3ludGF4IChyZWdfc3ludGF4X3Qgc3ludGF4KQoreworICByZWdfc3ludGF4X3QgcmV0ID0gcmVfc3ludGF4X29wdGlvbnM7CisKKyAgcmVfc3ludGF4X29wdGlvbnMgPSBzeW50YXg7CisgIHJldHVybiByZXQ7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfc2V0X3N5bnRheCwgcmVfc2V0X3N5bnRheCkKKyNlbmRpZgorCitpbnQKK3JlX2NvbXBpbGVfZmFzdG1hcCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIGJ1ZnAtPmJ1ZmZlcjsKKyAgY2hhciAqZmFzdG1hcCA9IGJ1ZnAtPmZhc3RtYXA7CisKKyAgbWVtc2V0IChmYXN0bWFwLCAnXDAnLCBzaXplb2YgKGNoYXIpICogU0JDX01BWCk7CisgIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChidWZwLCBkZmEtPmluaXRfc3RhdGUsIGZhc3RtYXApOworICBpZiAoZGZhLT5pbml0X3N0YXRlICE9IGRmYS0+aW5pdF9zdGF0ZV93b3JkKQorICAgIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChidWZwLCBkZmEtPmluaXRfc3RhdGVfd29yZCwgZmFzdG1hcCk7CisgIGlmIChkZmEtPmluaXRfc3RhdGUgIT0gZGZhLT5pbml0X3N0YXRlX25sKQorICAgIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChidWZwLCBkZmEtPmluaXRfc3RhdGVfbmwsIGZhc3RtYXApOworICBpZiAoZGZhLT5pbml0X3N0YXRlICE9IGRmYS0+aW5pdF9zdGF0ZV9iZWdidWYpCisgICAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKGJ1ZnAsIGRmYS0+aW5pdF9zdGF0ZV9iZWdidWYsIGZhc3RtYXApOworICBidWZwLT5mYXN0bWFwX2FjY3VyYXRlID0gMTsKKyAgcmV0dXJuIDA7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfY29tcGlsZV9mYXN0bWFwLCByZV9jb21waWxlX2Zhc3RtYXApCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkCitfX2F0dHJpYnV0ZSAoKGFsd2F5c19pbmxpbmUpKQorcmVfc2V0X2Zhc3RtYXAgKGNoYXIgKmZhc3RtYXAsIGludCBpY2FzZSwgaW50IGNoKQoreworICBmYXN0bWFwW2NoXSA9IDE7CisgIGlmIChpY2FzZSkKKyAgICBmYXN0bWFwW3RvbG93ZXIgKGNoKV0gPSAxOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHJlX2NvbXBpbGVfZmFzdG1hcC4KKyAgIENvbXBpbGUgZmFzdG1hcCBmb3IgdGhlIGluaXRpYWxfc3RhdGUgSU5JVF9TVEFURS4gICovCisKK3N0YXRpYyB2b2lkCityZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwgY29uc3QgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZSwKKwkJCSBjaGFyICpmYXN0bWFwKQoreworICB2b2xhdGlsZSByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIGJ1ZnAtPmJ1ZmZlcjsKKyAgaW50IG5vZGVfY250OworICBpbnQgaWNhc2UgPSAoZGZhLT5tYl9jdXJfbWF4ID09IDEgJiYgKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSk7CisgIGZvciAobm9kZV9jbnQgPSAwOyBub2RlX2NudCA8IGluaXRfc3RhdGUtPm5vZGVzLm5lbGVtOyArK25vZGVfY250KQorICAgIHsKKyAgICAgIGludCBub2RlID0gaW5pdF9zdGF0ZS0+bm9kZXMuZWxlbXNbbm9kZV9jbnRdOworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW25vZGVdLnR5cGU7CisKKyAgICAgIGlmICh0eXBlID09IENIQVJBQ1RFUikKKwl7CisJICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsIGRmYS0+bm9kZXNbbm9kZV0ub3ByLmMpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICBpZiAoKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gcmVfbWFsbG9jICh1bnNpZ25lZCBjaGFyLCBkZmEtPm1iX2N1cl9tYXgpLCAqcDsKKwkgICAgICB3Y2hhcl90IHdjOworCSAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKworCSAgICAgIHAgPSBidWY7CisJICAgICAgKnArKyA9IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmM7CisJICAgICAgd2hpbGUgKCsrbm9kZSA8IGRmYS0+bm9kZXNfbGVuCisJCSAgICAgJiYgZGZhLT5ub2Rlc1tub2RlXS50eXBlID09IENIQVJBQ1RFUgorCQkgICAgICYmIGRmYS0+bm9kZXNbbm9kZV0ubWJfcGFydGlhbCkKKwkJKnArKyA9IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmM7CisJICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAoc3RhdGUpKTsKKwkgICAgICBpZiAoX19tYnJ0b3djICgmd2MsIChjb25zdCBjaGFyICopIGJ1ZiwgcCAtIGJ1ZiwKKwkJCSAgICAgJnN0YXRlKSA9PSBwIC0gYnVmCisJCSAgJiYgKF9fd2NydG9tYiAoKGNoYXIgKikgYnVmLCB0b3dsb3dlciAod2MpLCAmc3RhdGUpCisJCSAgICAgICE9IChzaXplX3QpIC0xKSkKKwkJcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIDAsIGJ1ZlswXSk7CisJICAgICAgcmVfZnJlZSAoYnVmKTsKKwkgICAgfQorI2VuZGlmCisJfQorICAgICAgZWxzZSBpZiAodHlwZSA9PSBTSU1QTEVfQlJBQ0tFVCkKKwl7CisJICBpbnQgaSwgY2g7CisJICBmb3IgKGkgPSAwLCBjaCA9IDA7IGkgPCBCSVRTRVRfV09SRFM7ICsraSkKKwkgICAgeworCSAgICAgIGludCBqOworCSAgICAgIGJpdHNldF93b3JkX3QgdyA9IGRmYS0+bm9kZXNbbm9kZV0ub3ByLnNiY3NldFtpXTsKKwkgICAgICBmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRfQklUUzsgKytqLCArK2NoKQorCQlpZiAodyAmICgoYml0c2V0X3dvcmRfdCkgMSA8PCBqKSkKKwkJICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsIGNoKTsKKwkgICAgfQorCX0KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgZWxzZSBpZiAodHlwZSA9PSBDT01QTEVYX0JSQUNLRVQpCisJeworCSAgcmVfY2hhcnNldF90ICpjc2V0ID0gZGZhLT5ub2Rlc1tub2RlXS5vcHIubWJjc2V0OworCSAgaW50IGk7CisKKyMgaWZkZWYgX0xJQkMKKwkgIC8qIFNlZSBpZiB3ZSBoYXZlIHRvIHRyeSBhbGwgYnl0ZXMgd2hpY2ggc3RhcnQgbXVsdGlwbGUgY29sbGF0aW9uCisJICAgICBlbGVtZW50cy4KKwkgICAgIGUuZy4gSW4gZGFfREssIHdlIHdhbnQgdG8gY2F0Y2ggJ2EnIHNpbmNlICJhYSIgaXMgYSB2YWxpZAorCQkgIGNvbGxhdGlvbiBlbGVtZW50LCBhbmQgZG9uJ3QgY2F0Y2ggJ2InIHNpbmNlICdiJyBpcworCQkgIHRoZSBvbmx5IGNvbGxhdGlvbiBlbGVtZW50IHdoaWNoIHN0YXJ0cyBmcm9tICdiJyAoYW5kCisJCSAgaXQgaXMgY2F1Z2h0IGJ5IFNJTVBMRV9CUkFDS0VUKS4gICovCisJICAgICAgaWYgKF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUykgIT0gMAorCQkgICYmIChjc2V0LT5uY29sbF9zeW1zIHx8IGNzZXQtPm5yYW5nZXMpKQorCQl7CisJCSAgY29uc3QgaW50MzJfdCAqdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorCQkgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1RBQkxFTUIpOworCQkgIGZvciAoaSA9IDA7IGkgPCBTQkNfTUFYOyArK2kpCisJCSAgICBpZiAodGFibGVbaV0gPCAwKQorCQkgICAgICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsIGkpOworCQl9CisjIGVuZGlmIC8qIF9MSUJDICovCisKKwkgIC8qIFNlZSBpZiB3ZSBoYXZlIHRvIHN0YXJ0IHRoZSBtYXRjaCBhdCBhbGwgbXVsdGlieXRlIGNoYXJhY3RlcnMsCisJICAgICBpLmUuIHdoZXJlIHdlIHdvdWxkIG5vdCBmaW5kIGFuIGludmFsaWQgc2VxdWVuY2UuICBUaGlzIG9ubHkKKwkgICAgIGFwcGxpZXMgdG8gbXVsdGlieXRlIGNoYXJhY3RlciBzZXRzOyBmb3Igc2luZ2xlIGJ5dGUgY2hhcmFjdGVyCisJICAgICBzZXRzLCB0aGUgU0lNUExFX0JSQUNLRVQgYWdhaW4gc3VmZmljZXMuICAqLworCSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEKKwkgICAgICAmJiAoY3NldC0+bmNoYXJfY2xhc3NlcyB8fCBjc2V0LT5ub25fbWF0Y2ggfHwgY3NldC0+bnJhbmdlcworIyBpZmRlZiBfTElCQworCQkgIHx8IGNzZXQtPm5lcXVpdl9jbGFzc2VzCisjIGVuZGlmIC8qIF9MSUJDICovCisJCSApKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgY2hhciBjID0gMDsKKwkgICAgICBkbworCQl7CisJCSAgbWJzdGF0ZV90IG1iczsKKwkJICBtZW1zZXQgKCZtYnMsIDAsIHNpemVvZiAobWJzKSk7CisJCSAgaWYgKF9fbWJydG93YyAoTlVMTCwgKGNoYXIgKikgJmMsIDEsICZtYnMpID09IChzaXplX3QpIC0yKQorCQkgICAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGZhbHNlLCAoaW50KSBjKTsKKwkJfQorCSAgICAgIHdoaWxlICgrK2MgIT0gMCk7CisJICAgIH0KKworCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogLi4uIEVsc2UgY2F0Y2ggYWxsIGJ5dGVzIHdoaWNoIGNhbiBzdGFydCB0aGUgbWJjaGFycy4gICovCisJICAgICAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5tYmNoYXJzOyArK2kpCisJCXsKKwkJICBjaGFyIGJ1ZlsyNTZdOworCQkgIG1ic3RhdGVfdCBzdGF0ZTsKKwkJICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChzdGF0ZSkpOworCQkgIGlmIChfX3djcnRvbWIgKGJ1ZiwgY3NldC0+bWJjaGFyc1tpXSwgJnN0YXRlKSAhPSAoc2l6ZV90KSAtMSkKKwkJICAgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgKih1bnNpZ25lZCBjaGFyICopIGJ1Zik7CisJCSAgaWYgKChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkgJiYgZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwkJICAgIHsKKwkJICAgICAgaWYgKF9fd2NydG9tYiAoYnVmLCB0b3dsb3dlciAoY3NldC0+bWJjaGFyc1tpXSksICZzdGF0ZSkKKwkJCSAgIT0gKHNpemVfdCkgLTEpCisJCQlyZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgZmFsc2UsICoodW5zaWduZWQgY2hhciAqKSBidWYpOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfUEVSSU9ECisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgICAgICAgfHwgdHlwZSA9PSBPUF9VVEY4X1BFUklPRAorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJICAgICAgIHx8IHR5cGUgPT0gRU5EX09GX1JFKQorCXsKKwkgIG1lbXNldCAoZmFzdG1hcCwgJ1wxJywgc2l6ZW9mIChjaGFyKSAqIFNCQ19NQVgpOworCSAgaWYgKHR5cGUgPT0gRU5EX09GX1JFKQorCSAgICBidWZwLT5jYW5fYmVfbnVsbCA9IDE7CisJICByZXR1cm47CisJfQorICAgIH0KK30KKwwKKy8qIEVudHJ5IHBvaW50IGZvciBQT1NJWCBjb2RlLiAgKi8KKy8qIHJlZ2NvbXAgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYXMgYSBzdHJpbmcgYW5kIGNvbXBpbGVzIGl0LgorCisgICBQUkVHIGlzIGEgcmVnZXhfdCAqLiAgV2UgZG8gbm90IGV4cGVjdCBhbnkgZmllbGRzIHRvIGJlIGluaXRpYWxpemVkLAorICAgc2luY2UgUE9TSVggc2F5cyB3ZSBzaG91bGRuJ3QuICBUaHVzLCB3ZSBzZXQKKworICAgICBgYnVmZmVyJyB0byB0aGUgY29tcGlsZWQgcGF0dGVybjsKKyAgICAgYHVzZWQnIHRvIHRoZSBsZW5ndGggb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm47CisgICAgIGBzeW50YXgnIHRvIFJFX1NZTlRBWF9QT1NJWF9FWFRFTkRFRCBpZiB0aGUKKyAgICAgICBSRUdfRVhURU5ERUQgYml0IGluIENGTEFHUyBpcyBzZXQ7IG90aGVyd2lzZSwgdG8KKyAgICAgICBSRV9TWU5UQVhfUE9TSVhfQkFTSUM7CisgICAgIGBuZXdsaW5lX2FuY2hvcicgdG8gUkVHX05FV0xJTkUgYmVpbmcgc2V0IGluIENGTEFHUzsKKyAgICAgYGZhc3RtYXAnIHRvIGFuIGFsbG9jYXRlZCBzcGFjZSBmb3IgdGhlIGZhc3RtYXA7CisgICAgIGBmYXN0bWFwX2FjY3VyYXRlJyB0byB6ZXJvOworICAgICBgcmVfbnN1YicgdG8gdGhlIG51bWJlciBvZiBzdWJleHByZXNzaW9ucyBpbiBQQVRURVJOLgorCisgICBQQVRURVJOIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBwYXR0ZXJuIHN0cmluZy4KKworICAgQ0ZMQUdTIGlzIGEgc2VyaWVzIG9mIGJpdHMgd2hpY2ggYWZmZWN0IGNvbXBpbGF0aW9uLgorCisgICAgIElmIFJFR19FWFRFTkRFRCBpcyBzZXQsIHdlIHVzZSBQT1NJWCBleHRlbmRlZCBzeW50YXg7IG90aGVyd2lzZSwgd2UKKyAgICAgdXNlIFBPU0lYIGJhc2ljIHN5bnRheC4KKworICAgICBJZiBSRUdfTkVXTElORSBpcyBzZXQsIHRoZW4gLiBhbmQgW14uLi5dIGRvbid0IG1hdGNoIG5ld2xpbmUuCisgICAgIEFsc28sIHJlZ2V4ZWMgd2lsbCB0cnkgYSBtYXRjaCBiZWdpbm5pbmcgYWZ0ZXIgZXZlcnkgbmV3bGluZS4KKworICAgICBJZiBSRUdfSUNBU0UgaXMgc2V0LCB0aGVuIHdlIGNvbnNpZGVycyB1cHBlci0gYW5kIGxvd2VyY2FzZQorICAgICB2ZXJzaW9ucyBvZiBsZXR0ZXJzIHRvIGJlIGVxdWl2YWxlbnQgd2hlbiBtYXRjaGluZy4KKworICAgICBJZiBSRUdfTk9TVUIgaXMgc2V0LCB0aGVuIHdoZW4gUFJFRyBpcyBwYXNzZWQgdG8gcmVnZXhlYywgdGhhdAorICAgICByb3V0aW5lIHdpbGwgcmVwb3J0IG9ubHkgc3VjY2VzcyBvciBmYWlsdXJlLCBhbmQgbm90aGluZyBhYm91dCB0aGUKKyAgICAgcmVnaXN0ZXJzLgorCisgICBJdCByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG5vbnplcm8gaWYgaXQgZG9lc24ndC4gIChTZWUgcmVnZXguaCBmb3IKKyAgIHRoZSByZXR1cm4gY29kZXMgYW5kIHRoZWlyIG1lYW5pbmdzLikgICovCisKK2ludAorcmVnY29tcCAocmVnZXhfdCAqX19yZXN0cmljdCBwcmVnLAorCSBjb25zdCBjaGFyICpfX3Jlc3RyaWN0IHBhdHRlcm4sCisJIGludCBjZmxhZ3MpCit7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworICByZWdfc3ludGF4X3Qgc3ludGF4ID0gKChjZmxhZ3MgJiBSRUdfRVhURU5ERUQpID8gUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVECisJCQkgOiBSRV9TWU5UQVhfUE9TSVhfQkFTSUMpOworCisgIHByZWctPmJ1ZmZlciA9IE5VTEw7CisgIHByZWctPmFsbG9jYXRlZCA9IDA7CisgIHByZWctPnVzZWQgPSAwOworCisgIC8qIFRyeSB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGZhc3RtYXAuICAqLworICBwcmVnLT5mYXN0bWFwID0gcmVfbWFsbG9jIChjaGFyLCBTQkNfTUFYKTsKKyAgaWYgKEJFIChwcmVnLT5mYXN0bWFwID09IE5VTEwsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworCisgIHN5bnRheCB8PSAoY2ZsYWdzICYgUkVHX0lDQVNFKSA/IFJFX0lDQVNFIDogMDsKKworICAvKiBJZiBSRUdfTkVXTElORSBpcyBzZXQsIG5ld2xpbmVzIGFyZSB0cmVhdGVkIGRpZmZlcmVudGx5LiAgKi8KKyAgaWYgKGNmbGFncyAmIFJFR19ORVdMSU5FKQorICAgIHsgLyogUkVHX05FV0xJTkUgaW1wbGllcyBuZWl0aGVyIC4gbm9yIFteLi4uXSBtYXRjaCBuZXdsaW5lLiAgKi8KKyAgICAgIHN5bnRheCAmPSB+UkVfRE9UX05FV0xJTkU7CisgICAgICBzeW50YXggfD0gUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FOworICAgICAgLyogSXQgYWxzbyBjaGFuZ2VzIHRoZSBtYXRjaGluZyBiZWhhdmlvci4gICovCisgICAgICBwcmVnLT5uZXdsaW5lX2FuY2hvciA9IDE7CisgICAgfQorICBlbHNlCisgICAgcHJlZy0+bmV3bGluZV9hbmNob3IgPSAwOworICBwcmVnLT5ub19zdWIgPSAhIShjZmxhZ3MgJiBSRUdfTk9TVUIpOworICBwcmVnLT50cmFuc2xhdGUgPSBOVUxMOworCisgIHJldCA9IHJlX2NvbXBpbGVfaW50ZXJuYWwgKHByZWcsIHBhdHRlcm4sIHN0cmxlbiAocGF0dGVybiksIHN5bnRheCk7CisKKyAgLyogUE9TSVggZG9lc24ndCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuIHVubWF0Y2hlZCBvcGVuLWdyb3VwIGFuZCBhbgorICAgICB1bm1hdGNoZWQgY2xvc2UtZ3JvdXA6IGJvdGggYXJlIFJFR19FUEFSRU4uICAqLworICBpZiAocmV0ID09IFJFR19FUlBBUkVOKQorICAgIHJldCA9IFJFR19FUEFSRU47CisKKyAgLyogV2UgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgcHJlZy0+ZmFzdG1hcCAhPSBOVUxMLiAgKi8KKyAgaWYgKEJFIChyZXQgPT0gUkVHX05PRVJST1IsIDEpKQorICAgIC8qIENvbXB1dGUgdGhlIGZhc3RtYXAgbm93LCBzaW5jZSByZWdleGVjIGNhbm5vdCBtb2RpZnkgdGhlIHBhdHRlcm4KKyAgICAgICBidWZmZXIuICBUaGlzIGZ1bmN0aW9uIG5ldmVyIGZhaWxzIGluIHRoaXMgaW1wbGVtZW50YXRpb24uICAqLworICAgICh2b2lkKSByZV9jb21waWxlX2Zhc3RtYXAgKHByZWcpOworICBlbHNlCisgICAgeworICAgICAgLyogU29tZSBlcnJvciBvY2N1cnJlZCB3aGlsZSBjb21waWxpbmcgdGhlIGV4cHJlc3Npb24uICAqLworICAgICAgcmVfZnJlZSAocHJlZy0+ZmFzdG1hcCk7CisgICAgICBwcmVnLT5mYXN0bWFwID0gTlVMTDsKKyAgICB9CisKKyAgcmV0dXJuIChpbnQpIHJldDsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZWdjb21wLCByZWdjb21wKQorI2VuZGlmCisKKy8qIFJldHVybnMgYSBtZXNzYWdlIGNvcnJlc3BvbmRpbmcgdG8gYW4gZXJyb3IgY29kZSwgRVJSQ09ERSwgcmV0dXJuZWQKKyAgIGZyb20gZWl0aGVyIHJlZ2NvbXAgb3IgcmVnZXhlYy4gICBXZSBkb24ndCB1c2UgUFJFRyBoZXJlLiAgKi8KKworc2l6ZV90CityZWdlcnJvcihpbnQgZXJyY29kZSwgY29uc3QgcmVnZXhfdCAqX19yZXN0cmljdCBwcmVnLAorCSBjaGFyICpfX3Jlc3RyaWN0IGVycmJ1Ziwgc2l6ZV90IGVycmJ1Zl9zaXplKQoreworICBjb25zdCBjaGFyICptc2c7CisgIHNpemVfdCBtc2dfc2l6ZTsKKworICBpZiAoQkUgKGVycmNvZGUgPCAwCisJICB8fCBlcnJjb2RlID49IChpbnQpIChzaXplb2YgKF9fcmVfZXJyb3JfbXNnaWRfaWR4KQorCQkJICAgICAgIC8gc2l6ZW9mIChfX3JlX2Vycm9yX21zZ2lkX2lkeFswXSkpLCAwKSkKKyAgICAvKiBPbmx5IGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IHRoZSByZXN0IG9mIHRoZSBjb2RlIHNob3VsZCBiZSBwYXNzZWQKKyAgICAgICB0byB0aGlzIHJvdXRpbmUuICBJZiB3ZSBhcmUgZ2l2ZW4gYW55dGhpbmcgZWxzZSwgb3IgaWYgb3RoZXIgcmVnZXgKKyAgICAgICBjb2RlIGdlbmVyYXRlcyBhbiBpbnZhbGlkIGVycm9yIGNvZGUsIHRoZW4gdGhlIHByb2dyYW0gaGFzIGEgYnVnLgorICAgICAgIER1bXAgY29yZSBzbyB3ZSBjYW4gZml4IGl0LiAgKi8KKyAgICBhYm9ydCAoKTsKKworICBtc2cgPSBnZXR0ZXh0IChfX3JlX2Vycm9yX21zZ2lkICsgX19yZV9lcnJvcl9tc2dpZF9pZHhbZXJyY29kZV0pOworCisgIG1zZ19zaXplID0gc3RybGVuIChtc2cpICsgMTsgLyogSW5jbHVkZXMgdGhlIG51bGwuICAqLworCisgIGlmIChCRSAoZXJyYnVmX3NpemUgIT0gMCwgMSkpCisgICAgeworICAgICAgaWYgKEJFIChtc2dfc2l6ZSA+IGVycmJ1Zl9zaXplLCAwKSkKKwl7CisJICBtZW1jcHkgKGVycmJ1ZiwgbXNnLCBlcnJidWZfc2l6ZSAtIDEpOworCSAgZXJyYnVmW2VycmJ1Zl9zaXplIC0gMV0gPSAwOworCX0KKyAgICAgIGVsc2UKKwltZW1jcHkgKGVycmJ1ZiwgbXNnLCBtc2dfc2l6ZSk7CisgICAgfQorCisgIHJldHVybiBtc2dfc2l6ZTsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZWdlcnJvciwgcmVnZXJyb3IpCisjZW5kaWYKKworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy8qIFRoaXMgc3RhdGljIGFycmF5IGlzIHVzZWQgZm9yIHRoZSBtYXAgdG8gc2luZ2xlLWJ5dGUgY2hhcmFjdGVycyB3aGVuCisgICBVVEYtOCBpcyB1c2VkLiAgT3RoZXJ3aXNlIHdlIHdvdWxkIGFsbG9jYXRlIG1lbW9yeSBqdXN0IHRvIGluaXRpYWxpemUKKyAgIGl0IHRoZSBzYW1lIGFsbCB0aGUgdGltZS4gIFVURi04IGlzIHRoZSBwcmVmZXJyZWQgZW5jb2Rpbmcgc28gdGhpcyBpcworICAgYSB3b3J0aHdoaWxlIG9wdGltaXphdGlvbi4gICovCisjaWYgX19HTlVDX18gPj0gMworc3RhdGljIGNvbnN0IGJpdHNldF90IHV0Zjhfc2JfbWFwID0geworICAvKiBTZXQgdGhlIGZpcnN0IDEyOCBiaXRzLiAgKi8KKyAgWzAgLi4uIDB4ODAgLyBCSVRTRVRfV09SRF9CSVRTIC0gMV0gPSBCSVRTRVRfV09SRF9NQVgKK307CisjZWxzZSAvKiAhIChfX0dOVUNfXyA+PSAzKSAqLworc3RhdGljIGJpdHNldF90IHV0Zjhfc2JfbWFwOworI2VuZGlmIC8qIF9fR05VQ19fID49IDMgKi8KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisKK3N0YXRpYyB2b2lkCitmcmVlX2RmYV9jb250ZW50IChyZV9kZmFfdCAqZGZhKQoreworICBpbnQgaSwgajsKKworICBpZiAoZGZhLT5ub2RlcykKKyAgICBmb3IgKGkgPSAwOyBpIDwgZGZhLT5ub2Rlc19sZW47ICsraSkKKyAgICAgIGZyZWVfdG9rZW4gKGRmYS0+bm9kZXMgKyBpKTsKKyAgcmVfZnJlZSAoZGZhLT5uZXh0cyk7CisgIGZvciAoaSA9IDA7IGkgPCBkZmEtPm5vZGVzX2xlbjsgKytpKQorICAgIHsKKyAgICAgIGlmIChkZmEtPmVjbG9zdXJlcyAhPSBOVUxMKQorCXJlX25vZGVfc2V0X2ZyZWUgKGRmYS0+ZWNsb3N1cmVzICsgaSk7CisgICAgICBpZiAoZGZhLT5pbnZlY2xvc3VyZXMgIT0gTlVMTCkKKwlyZV9ub2RlX3NldF9mcmVlIChkZmEtPmludmVjbG9zdXJlcyArIGkpOworICAgICAgaWYgKGRmYS0+ZWRlc3RzICE9IE5VTEwpCisJcmVfbm9kZV9zZXRfZnJlZSAoZGZhLT5lZGVzdHMgKyBpKTsKKyAgICB9CisgIHJlX2ZyZWUgKGRmYS0+ZWRlc3RzKTsKKyAgcmVfZnJlZSAoZGZhLT5lY2xvc3VyZXMpOworICByZV9mcmVlIChkZmEtPmludmVjbG9zdXJlcyk7CisgIHJlX2ZyZWUgKGRmYS0+bm9kZXMpOworCisgIGlmIChkZmEtPnN0YXRlX3RhYmxlKQorICAgIGZvciAoaSA9IDA7IGkgPD0gZGZhLT5zdGF0ZV9oYXNoX21hc2s7ICsraSkKKyAgICAgIHsKKwlzdHJ1Y3QgcmVfc3RhdGVfdGFibGVfZW50cnkgKmVudHJ5ID0gZGZhLT5zdGF0ZV90YWJsZSArIGk7CisJZm9yIChqID0gMDsgaiA8IGVudHJ5LT5udW07ICsraikKKwkgIHsKKwkgICAgcmVfZGZhc3RhdGVfdCAqc3RhdGUgPSBlbnRyeS0+YXJyYXlbal07CisJICAgIGZyZWVfc3RhdGUgKHN0YXRlKTsKKwkgIH0KKwlyZV9mcmVlIChlbnRyeS0+YXJyYXkpOworICAgICAgfQorICByZV9mcmVlIChkZmEtPnN0YXRlX3RhYmxlKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoZGZhLT5zYl9jaGFyICE9IHV0Zjhfc2JfbWFwKQorICAgIHJlX2ZyZWUgKGRmYS0+c2JfY2hhcik7CisjZW5kaWYKKyAgcmVfZnJlZSAoZGZhLT5zdWJleHBfbWFwKTsKKyNpZmRlZiBERUJVRworICByZV9mcmVlIChkZmEtPnJlX3N0cik7CisjZW5kaWYKKworICByZV9mcmVlIChkZmEpOworfQorCisKKy8qIEZyZWUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHNwYWNlIHVzZWQgYnkgUFJFRy4gICovCisKK3ZvaWQKK3JlZ2ZyZWUgKHJlZ2V4X3QgKnByZWcpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBpZiAoQkUgKGRmYSAhPSBOVUxMLCAxKSkKKyAgICBmcmVlX2RmYV9jb250ZW50IChkZmEpOworICBwcmVnLT5idWZmZXIgPSBOVUxMOworICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworCisgIHJlX2ZyZWUgKHByZWctPmZhc3RtYXApOworICBwcmVnLT5mYXN0bWFwID0gTlVMTDsKKworICByZV9mcmVlIChwcmVnLT50cmFuc2xhdGUpOworICBwcmVnLT50cmFuc2xhdGUgPSBOVUxMOworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlZ2ZyZWUsIHJlZ2ZyZWUpCisjZW5kaWYKKwwKKy8qIEVudHJ5IHBvaW50cyBjb21wYXRpYmxlIHdpdGggNC4yIEJTRCByZWdleCBsaWJyYXJ5LiAgV2UgZG9uJ3QgZGVmaW5lCisgICB0aGVtIHVubGVzcyBzcGVjaWZpY2FsbHkgcmVxdWVzdGVkLiAgKi8KKworI2lmIGRlZmluZWQgX1JFR0VYX1JFX0NPTVAgfHwgZGVmaW5lZCBfTElCQworCisvKiBCU0QgaGFzIG9uZSBhbmQgb25seSBvbmUgcGF0dGVybiBidWZmZXIuICAqLworc3RhdGljIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciByZV9jb21wX2J1ZjsKKworY2hhciAqCisjIGlmZGVmIF9MSUJDCisvKiBNYWtlIHRoZXNlIGRlZmluaXRpb25zIHdlYWsgaW4gbGliYywgc28gUE9TSVggcHJvZ3JhbXMgY2FuIHJlZGVmaW5lCisgICB0aGVzZSBuYW1lcyBpZiB0aGV5IGRvbid0IHVzZSBvdXIgZnVuY3Rpb25zLCBhbmQgc3RpbGwgdXNlCisgICByZWdjb21wL3JlZ2V4ZWMgYWJvdmUgd2l0aG91dCBsaW5rIGVycm9ycy4gICovCit3ZWFrX2Z1bmN0aW9uCisjIGVuZGlmCityZV9jb21wIChzKQorICAgICBjb25zdCBjaGFyICpzOworeworICByZWdfZXJyY29kZV90IHJldDsKKyAgY2hhciAqZmFzdG1hcDsKKworICBpZiAoIXMpCisgICAgeworICAgICAgaWYgKCFyZV9jb21wX2J1Zi5idWZmZXIpCisJcmV0dXJuIGdldHRleHQgKCJObyBwcmV2aW91cyByZWd1bGFyIGV4cHJlc3Npb24iKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBpZiAocmVfY29tcF9idWYuYnVmZmVyKQorICAgIHsKKyAgICAgIGZhc3RtYXAgPSByZV9jb21wX2J1Zi5mYXN0bWFwOworICAgICAgcmVfY29tcF9idWYuZmFzdG1hcCA9IE5VTEw7CisgICAgICBfX3JlZ2ZyZWUgKCZyZV9jb21wX2J1Zik7CisgICAgICBtZW1zZXQgKCZyZV9jb21wX2J1ZiwgJ1wwJywgc2l6ZW9mIChyZV9jb21wX2J1ZikpOworICAgICAgcmVfY29tcF9idWYuZmFzdG1hcCA9IGZhc3RtYXA7CisgICAgfQorCisgIGlmIChyZV9jb21wX2J1Zi5mYXN0bWFwID09IE5VTEwpCisgICAgeworICAgICAgcmVfY29tcF9idWYuZmFzdG1hcCA9IChjaGFyICopIG1hbGxvYyAoU0JDX01BWCk7CisgICAgICBpZiAocmVfY29tcF9idWYuZmFzdG1hcCA9PSBOVUxMKQorCXJldHVybiAoY2hhciAqKSBnZXR0ZXh0IChfX3JlX2Vycm9yX21zZ2lkCisJCQkJICsgX19yZV9lcnJvcl9tc2dpZF9pZHhbKGludCkgUkVHX0VTUEFDRV0pOworICAgIH0KKworICAvKiBTaW5jZSBgcmVfZXhlYycgYWx3YXlzIHBhc3NlcyBOVUxMIGZvciB0aGUgYHJlZ3MnIGFyZ3VtZW50LCB3ZQorICAgICBkb24ndCBuZWVkIHRvIGluaXRpYWxpemUgdGhlIHBhdHRlcm4gYnVmZmVyIGZpZWxkcyB3aGljaCBhZmZlY3QgaXQuICAqLworCisgIC8qIE1hdGNoIGFuY2hvcnMgYXQgbmV3bGluZXMuICAqLworICByZV9jb21wX2J1Zi5uZXdsaW5lX2FuY2hvciA9IDE7CisKKyAgcmV0ID0gcmVfY29tcGlsZV9pbnRlcm5hbCAoJnJlX2NvbXBfYnVmLCBzLCBzdHJsZW4gKHMpLCByZV9zeW50YXhfb3B0aW9ucyk7CisKKyAgaWYgKCFyZXQpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogWWVzLCB3ZSdyZSBkaXNjYXJkaW5nIGBjb25zdCcgaGVyZSBpZiAhSEFWRV9MSUJJTlRMLiAgKi8KKyAgcmV0dXJuIChjaGFyICopIGdldHRleHQgKF9fcmVfZXJyb3JfbXNnaWQgKyBfX3JlX2Vycm9yX21zZ2lkX2lkeFsoaW50KSByZXRdKTsKK30KKworI2lmZGVmIF9MSUJDCitsaWJjX2ZyZWVyZXNfZm4gKGZyZWVfbWVtKQoreworICBfX3JlZ2ZyZWUgKCZyZV9jb21wX2J1Zik7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9SRUdFWF9SRV9DT01QICovCisMCisvKiBJbnRlcm5hbCBlbnRyeSBwb2ludC4KKyAgIENvbXBpbGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBQQVRURVJOLCB3aG9zZSBsZW5ndGggaXMgTEVOR1RILgorICAgU1lOVEFYIGluZGljYXRlIHJlZ3VsYXIgZXhwcmVzc2lvbidzIHN5bnRheC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CityZV9jb21waWxlX2ludGVybmFsIChyZWdleF90ICpwcmVnLCBjb25zdCBjaGFyICogcGF0dGVybiwgc2l6ZV90IGxlbmd0aCwKKwkJICAgICByZWdfc3ludGF4X3Qgc3ludGF4KQoreworICByZWdfZXJyY29kZV90IGVyciA9IFJFR19OT0VSUk9SOworICByZV9kZmFfdCAqZGZhOworICByZV9zdHJpbmdfdCByZWdleHA7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgcGF0dGVybiBidWZmZXIuICAqLworICBwcmVnLT5mYXN0bWFwX2FjY3VyYXRlID0gMDsKKyAgcHJlZy0+c3ludGF4ID0gc3ludGF4OworICBwcmVnLT5ub3RfYm9sID0gcHJlZy0+bm90X2VvbCA9IDA7CisgIHByZWctPnVzZWQgPSAwOworICBwcmVnLT5yZV9uc3ViID0gMDsKKyAgcHJlZy0+Y2FuX2JlX251bGwgPSAwOworICBwcmVnLT5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfVU5BTExPQ0FURUQ7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgZGZhLiAgKi8KKyAgZGZhID0gKHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgaWYgKEJFIChwcmVnLT5hbGxvY2F0ZWQgPCBzaXplb2YgKHJlX2RmYV90KSwgMCkpCisgICAgeworICAgICAgLyogSWYgemVybyBhbGxvY2F0ZWQsIGJ1dCBidWZmZXIgaXMgbm9uLW51bGwsIHRyeSB0byByZWFsbG9jCisJIGVub3VnaCBzcGFjZS4gIFRoaXMgbG9zZXMgaWYgYnVmZmVyJ3MgYWRkcmVzcyBpcyBib2d1cywgYnV0CisJIHRoYXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4gIElmIC0+YnVmZmVyIGlzIE5VTEwgdGhpcworCSBpcyBhIHNpbXBsZSBhbGxvY2F0aW9uLiAgKi8KKyAgICAgIGRmYSA9IHJlX3JlYWxsb2MgKHByZWctPmJ1ZmZlciwgcmVfZGZhX3QsIDEpOworICAgICAgaWYgKGRmYSA9PSBOVUxMKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgcHJlZy0+YWxsb2NhdGVkID0gc2l6ZW9mIChyZV9kZmFfdCk7CisgICAgICBwcmVnLT5idWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSBkZmE7CisgICAgfQorICBwcmVnLT51c2VkID0gc2l6ZW9mIChyZV9kZmFfdCk7CisKKyAgZXJyID0gaW5pdF9kZmEgKGRmYSwgbGVuZ3RoKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHsKKyAgICAgIGZyZWVfZGZhX2NvbnRlbnQgKGRmYSk7CisgICAgICBwcmVnLT5idWZmZXIgPSBOVUxMOworICAgICAgcHJlZy0+YWxsb2NhdGVkID0gMDsKKyAgICAgIHJldHVybiBlcnI7CisgICAgfQorI2lmZGVmIERFQlVHCisgIC8qIE5vdGU6IGxlbmd0aCsxIHdpbGwgbm90IG92ZXJmbG93IHNpbmNlIGl0IGlzIGNoZWNrZWQgaW4gaW5pdF9kZmEuICAqLworICBkZmEtPnJlX3N0ciA9IHJlX21hbGxvYyAoY2hhciwgbGVuZ3RoICsgMSk7CisgIHN0cm5jcHkgKGRmYS0+cmVfc3RyLCBwYXR0ZXJuLCBsZW5ndGggKyAxKTsKKyNlbmRpZgorCisgIF9fbGliY19sb2NrX2luaXQgKGRmYS0+bG9jayk7CisKKyAgZXJyID0gcmVfc3RyaW5nX2NvbnN0cnVjdCAoJnJlZ2V4cCwgcGF0dGVybiwgbGVuZ3RoLCBwcmVnLT50cmFuc2xhdGUsCisJCQkgICAgIHN5bnRheCAmIFJFX0lDQVNFLCBkZmEpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgIHJlX2NvbXBpbGVfaW50ZXJuYWxfZnJlZV9yZXR1cm46CisgICAgICBmcmVlX3dvcmthcmVhX2NvbXBpbGUgKHByZWcpOworICAgICAgcmVfc3RyaW5nX2Rlc3RydWN0ICgmcmVnZXhwKTsKKyAgICAgIGZyZWVfZGZhX2NvbnRlbnQgKGRmYSk7CisgICAgICBwcmVnLT5idWZmZXIgPSBOVUxMOworICAgICAgcHJlZy0+YWxsb2NhdGVkID0gMDsKKyAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgIC8qIFBhcnNlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24sIGFuZCBidWlsZCBhIHN0cnVjdHVyZSB0cmVlLiAgKi8KKyAgcHJlZy0+cmVfbnN1YiA9IDA7CisgIGRmYS0+c3RyX3RyZWUgPSBwYXJzZSAoJnJlZ2V4cCwgcHJlZywgc3ludGF4LCAmZXJyKTsKKyAgaWYgKEJFIChkZmEtPnN0cl90cmVlID09IE5VTEwsIDApKQorICAgIGdvdG8gcmVfY29tcGlsZV9pbnRlcm5hbF9mcmVlX3JldHVybjsKKworICAvKiBBbmFseXplIHRoZSB0cmVlIGFuZCBjcmVhdGUgdGhlIG5mYS4gICovCisgIGVyciA9IGFuYWx5emUgKHByZWcpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgZ290byByZV9jb21waWxlX2ludGVybmFsX2ZyZWVfcmV0dXJuOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgLyogSWYgcG9zc2libGUsIGRvIHNlYXJjaGluZyBpbiBzaW5nbGUgYnl0ZSBlbmNvZGluZyB0byBzcGVlZCB0aGluZ3MgdXAuICAqLworICBpZiAoZGZhLT5pc191dGY4ICYmICEoc3ludGF4ICYgUkVfSUNBU0UpICYmIHByZWctPnRyYW5zbGF0ZSA9PSBOVUxMKQorICAgIG9wdGltaXplX3V0ZjggKGRmYSk7CisjZW5kaWYKKworICAvKiBUaGVuIGNyZWF0ZSB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZGZhLiAgKi8KKyAgZXJyID0gY3JlYXRlX2luaXRpYWxfc3RhdGUgKGRmYSk7CisKKyAgLyogUmVsZWFzZSB3b3JrIGFyZWFzLiAgKi8KKyAgZnJlZV93b3JrYXJlYV9jb21waWxlIChwcmVnKTsKKyAgcmVfc3RyaW5nX2Rlc3RydWN0ICgmcmVnZXhwKTsKKworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgZnJlZV9kZmFfY29udGVudCAoZGZhKTsKKyAgICAgIHByZWctPmJ1ZmZlciA9IE5VTEw7CisgICAgICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworICAgIH0KKworICByZXR1cm4gZXJyOworfQorCisvKiBJbml0aWFsaXplIERGQS4gIFdlIHVzZSB0aGUgbGVuZ3RoIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gUEFUX0xFTgorICAgYXMgdGhlIGluaXRpYWwgbGVuZ3RoIG9mIHNvbWUgYXJyYXlzLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2luaXRfZGZhIChyZV9kZmFfdCAqZGZhLCBzaXplX3QgcGF0X2xlbikKK3sKKyAgdW5zaWduZWQgaW50IHRhYmxlX3NpemU7CisjaWZuZGVmIF9MSUJDCisgIGNoYXIgKmNvZGVzZXRfbmFtZTsKKyNlbmRpZgorCisgIG1lbXNldCAoZGZhLCAnXDAnLCBzaXplb2YgKHJlX2RmYV90KSk7CisKKyAgLyogRm9yY2UgYWxsb2NhdGlvbiBvZiBzdHJfdHJlZV9zdG9yYWdlIHRoZSBmaXJzdCB0aW1lLiAgKi8KKyAgZGZhLT5zdHJfdHJlZV9zdG9yYWdlX2lkeCA9IEJJTl9UUkVFX1NUT1JBR0VfU0laRTsKKworICAvKiBBdm9pZCBvdmVyZmxvd3MuICAqLworICBpZiAocGF0X2xlbiA9PSBTSVpFX01BWCkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKworICBkZmEtPm5vZGVzX2FsbG9jID0gcGF0X2xlbiArIDE7CisgIGRmYS0+bm9kZXMgPSByZV9tYWxsb2MgKHJlX3Rva2VuX3QsIGRmYS0+bm9kZXNfYWxsb2MpOworCisgIC8qICB0YWJsZV9zaXplID0gMiBeIGNlaWwobG9nIHBhdF9sZW4pICovCisgIGZvciAodGFibGVfc2l6ZSA9IDE7IDsgdGFibGVfc2l6ZSA8PD0gMSkKKyAgICBpZiAodGFibGVfc2l6ZSA+IHBhdF9sZW4pCisgICAgICBicmVhazsKKworICBkZmEtPnN0YXRlX3RhYmxlID0gY2FsbG9jIChzaXplb2YgKHN0cnVjdCByZV9zdGF0ZV90YWJsZV9lbnRyeSksIHRhYmxlX3NpemUpOworICBkZmEtPnN0YXRlX2hhc2hfbWFzayA9IHRhYmxlX3NpemUgLSAxOworCisgIGRmYS0+bWJfY3VyX21heCA9IE1CX0NVUl9NQVg7CisjaWZkZWYgX0xJQkMKKyAgaWYgKGRmYS0+bWJfY3VyX21heCA9PSA2CisgICAgICAmJiBzdHJjbXAgKF9OTF9DVVJSRU5UIChMQ19DVFlQRSwgX05MX0NUWVBFX0NPREVTRVRfTkFNRSksICJVVEYtOCIpID09IDApCisgICAgZGZhLT5pc191dGY4ID0gMTsKKyAgZGZhLT5tYXBfbm90YXNjaWkgPSAoX05MX0NVUlJFTlRfV09SRCAoTENfQ1RZUEUsIF9OTF9DVFlQRV9NQVBfVE9fTk9OQVNDSUkpCisJCSAgICAgICAhPSAwKTsKKyNlbHNlCisjIGlmZGVmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorICBjb2Rlc2V0X25hbWUgPSBubF9sYW5naW5mbyAoQ09ERVNFVCk7CisjIGVsc2UKKyAgY29kZXNldF9uYW1lID0gZ2V0ZW52ICgiTENfQUxMIik7CisgIGlmIChjb2Rlc2V0X25hbWUgPT0gTlVMTCB8fCBjb2Rlc2V0X25hbWVbMF0gPT0gJ1wwJykKKyAgICBjb2Rlc2V0X25hbWUgPSBnZXRlbnYgKCJMQ19DVFlQRSIpOworICBpZiAoY29kZXNldF9uYW1lID09IE5VTEwgfHwgY29kZXNldF9uYW1lWzBdID09ICdcMCcpCisgICAgY29kZXNldF9uYW1lID0gZ2V0ZW52ICgiTEFORyIpOworICBpZiAoY29kZXNldF9uYW1lID09IE5VTEwpCisgICAgY29kZXNldF9uYW1lID0gIiI7CisgIGVsc2UgaWYgKHN0cmNociAoY29kZXNldF9uYW1lLCAnLicpICE9ICBOVUxMKQorICAgIGNvZGVzZXRfbmFtZSA9IHN0cmNociAoY29kZXNldF9uYW1lLCAnLicpICsgMTsKKyMgZW5kaWYKKworICAvKiBzdHJjYXNlY21wIGlzbid0IGEgc3RhbmRhcmQgaW50ZXJmYWNlLiBicnV0ZSBmb3JjZSBjaGVjayAqLworI2lmIDAKKyAgaWYgKHN0cmNhc2VjbXAgKGNvZGVzZXRfbmFtZSwgIlVURi04IikgPT0gMAorICAgICAgfHwgc3RyY2FzZWNtcCAoY29kZXNldF9uYW1lLCAiVVRGOCIpID09IDApCisgICAgZGZhLT5pc191dGY4ID0gMTsKKyNlbHNlCisgIGlmICggICAoY29kZXNldF9uYW1lWzBdID09ICdVJyB8fCBjb2Rlc2V0X25hbWVbMF0gPT0gJ3UnKQorICAgICAgJiYgKGNvZGVzZXRfbmFtZVsxXSA9PSAnVCcgfHwgY29kZXNldF9uYW1lWzFdID09ICd0JykKKyAgICAgICYmIChjb2Rlc2V0X25hbWVbMl0gPT0gJ0YnIHx8IGNvZGVzZXRfbmFtZVsyXSA9PSAnZicpCisgICAgICAmJiAoY29kZXNldF9uYW1lWzNdID09ICctJworICAgICAgICAgID8gY29kZXNldF9uYW1lWzRdID09ICc4JyAmJiBjb2Rlc2V0X25hbWVbNV0gPT0gJ1wwJworICAgICAgICAgIDogY29kZXNldF9uYW1lWzNdID09ICc4JyAmJiBjb2Rlc2V0X25hbWVbNF0gPT0gJ1wwJykpCisgICAgZGZhLT5pc191dGY4ID0gMTsKKyNlbmRpZgorCisgIC8qIFdlIGNoZWNrIGV4aGF1c3RpdmVseSBpbiB0aGUgbG9vcCBiZWxvdyBpZiB0aGlzIGNoYXJzZXQgaXMgYQorICAgICBzdXBlcnNldCBvZiBBU0NJSS4gICovCisgIGRmYS0+bWFwX25vdGFzY2lpID0gMDsKKyNlbmRpZgorCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisgICAgeworICAgICAgaWYgKGRmYS0+aXNfdXRmOCkKKyAgICAgICAgeworI2lmICFkZWZpbmVkKF9fR05VQ19fKSB8fCBfX0dOVUNfXyA8IDMKKwkgIHN0YXRpYyBzaG9ydCB1dGY4X3NiX21hcF9pbml0ZWQgPSAwOworCisJICBpZiAoISB1dGY4X3NiX21hcF9pbml0ZWQpCisJICAgIHsKKwkJaW50IGk7CisKKwkgIAl1dGY4X3NiX21hcF9pbml0ZWQgPSAwOworCQlmb3IgKGkgPSAwOyBpIDw9IDB4ODAgLyBCSVRTRVRfV09SRF9CSVRTIC0gMTsgaSsrKQorCQkgIHV0Zjhfc2JfbWFwW2ldID0gQklUU0VUX1dPUkRfTUFYOworCSAgICB9CisjZW5kaWYKKwkgIGRmYS0+c2JfY2hhciA9IChyZV9iaXRzZXRfcHRyX3QpIHV0Zjhfc2JfbWFwOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpbnQgaSwgaiwgY2g7CisKKwkgIGRmYS0+c2JfY2hhciA9IChyZV9iaXRzZXRfcHRyX3QpIGNhbGxvYyAoc2l6ZW9mIChiaXRzZXRfdCksIDEpOworCSAgaWYgKEJFIChkZmEtPnNiX2NoYXIgPT0gTlVMTCwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCisJICAvKiBTZXQgdGhlIGJpdHMgY29ycmVzcG9uZGluZyB0byBzaW5nbGUgYnl0ZSBjaGFycy4gICovCisJICBmb3IgKGkgPSAwLCBjaCA9IDA7IGkgPCBCSVRTRVRfV09SRFM7ICsraSkKKwkgICAgZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEX0JJVFM7ICsraiwgKytjaCkKKwkgICAgICB7CisJCXdpbnRfdCB3Y2ggPSBfX2J0b3djIChjaCk7CisJCWlmICh3Y2ggIT0gV0VPRikKKwkJICBkZmEtPnNiX2NoYXJbaV0gfD0gKGJpdHNldF93b3JkX3QpIDEgPDwgajsKKyMgaWZuZGVmIF9MSUJDCisJCWlmIChpc2FzY2lpIChjaCkgJiYgd2NoICE9IGNoKQorCQkgIGRmYS0+bWFwX25vdGFzY2lpID0gMTsKKyMgZW5kaWYKKwkgICAgICB9CisJfQorICAgIH0KKyNlbmRpZgorCisgIGlmIChCRSAoZGZhLT5ub2RlcyA9PSBOVUxMIHx8IGRmYS0+c3RhdGVfdGFibGUgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogSW5pdGlhbGl6ZSBXT1JEX0NIQVIgdGFibGUsIHdoaWNoIGluZGljYXRlIHdoaWNoIGNoYXJhY3RlciBpcworICAgIndvcmQiLiAgSW4gdGhpcyBjYXNlICJ3b3JkIiBtZWFucyB0aGF0IGl0IGlzIHRoZSB3b3JkIGNvbnN0cnVjdGlvbgorICAgY2hhcmFjdGVyIHVzZWQgYnkgc29tZSBvcGVyYXRvcnMgbGlrZSAiXDwiLCAiXD4iLCBldGMuICAqLworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK2luaXRfd29yZF9jaGFyIChyZV9kZmFfdCAqZGZhKQoreworICBpbnQgaSwgaiwgY2g7CisgIGRmYS0+d29yZF9vcHNfdXNlZCA9IDE7CisgIGZvciAoaSA9IDAsIGNoID0gMDsgaSA8IEJJVFNFVF9XT1JEUzsgKytpKQorICAgIGZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRF9CSVRTOyArK2osICsrY2gpCisgICAgICBpZiAoaXNhbG51bSAoY2gpIHx8IGNoID09ICdfJykKKwlkZmEtPndvcmRfY2hhcltpXSB8PSAoYml0c2V0X3dvcmRfdCkgMSA8PCBqOworfQorCisvKiBGcmVlIHRoZSB3b3JrIGFyZWEgd2hpY2ggYXJlIG9ubHkgdXNlZCB3aGlsZSBjb21waWxpbmcuICAqLworCitzdGF0aWMgdm9pZAorZnJlZV93b3JrYXJlYV9jb21waWxlIChyZWdleF90ICpwcmVnKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgYmluX3RyZWVfc3RvcmFnZV90ICpzdG9yYWdlLCAqbmV4dDsKKyAgZm9yIChzdG9yYWdlID0gZGZhLT5zdHJfdHJlZV9zdG9yYWdlOyBzdG9yYWdlOyBzdG9yYWdlID0gbmV4dCkKKyAgICB7CisgICAgICBuZXh0ID0gc3RvcmFnZS0+bmV4dDsKKyAgICAgIHJlX2ZyZWUgKHN0b3JhZ2UpOworICAgIH0KKyAgZGZhLT5zdHJfdHJlZV9zdG9yYWdlID0gTlVMTDsKKyAgZGZhLT5zdHJfdHJlZV9zdG9yYWdlX2lkeCA9IEJJTl9UUkVFX1NUT1JBR0VfU0laRTsKKyAgZGZhLT5zdHJfdHJlZSA9IE5VTEw7CisgIHJlX2ZyZWUgKGRmYS0+b3JnX2luZGljZXMpOworICBkZmEtPm9yZ19pbmRpY2VzID0gTlVMTDsKK30KKworLyogQ3JlYXRlIGluaXRpYWwgc3RhdGVzIGZvciBhbGwgY29udGV4dHMuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorY3JlYXRlX2luaXRpYWxfc3RhdGUgKHJlX2RmYV90ICpkZmEpCit7CisgIGludCBmaXJzdCwgaTsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIHJlX25vZGVfc2V0IGluaXRfbm9kZXM7CisKKyAgLyogSW5pdGlhbCBzdGF0ZXMgaGF2ZSB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIHRoZSBub2RlIHdoaWNoIGlzCisgICAgIHRoZSBmaXJzdCBub2RlIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uICAqLworICBmaXJzdCA9IGRmYS0+c3RyX3RyZWUtPmZpcnN0LT5ub2RlX2lkeDsKKyAgZGZhLT5pbml0X25vZGUgPSBmaXJzdDsKKyAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5ICgmaW5pdF9ub2RlcywgZGZhLT5lY2xvc3VyZXMgKyBmaXJzdCk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gZXJyOworCisgIC8qIFRoZSBiYWNrLXJlZmVyZW5jZXMgd2hpY2ggYXJlIGluIGluaXRpYWwgc3RhdGVzIGNhbiBlcHNpbG9uIHRyYW5zaXQsCisgICAgIHNpbmNlIGluIHRoaXMgY2FzZSBhbGwgb2YgdGhlIHN1YmV4cHJlc3Npb25zIGNhbiBiZSBudWxsLgorICAgICBUaGVuIHdlIGFkZCBlcHNpbG9uIGNsb3N1cmVzIG9mIHRoZSBub2RlcyB3aGljaCBhcmUgdGhlIG5leHQgbm9kZXMgb2YKKyAgICAgdGhlIGJhY2stcmVmZXJlbmNlcy4gICovCisgIGlmIChkZmEtPm5iYWNrcmVmID4gMCkKKyAgICBmb3IgKGkgPSAwOyBpIDwgaW5pdF9ub2Rlcy5uZWxlbTsgKytpKQorICAgICAgeworCWludCBub2RlX2lkeCA9IGluaXRfbm9kZXMuZWxlbXNbaV07CisJcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW25vZGVfaWR4XS50eXBlOworCisJaW50IGNsZXhwX2lkeDsKKwlpZiAodHlwZSAhPSBPUF9CQUNLX1JFRikKKwkgIGNvbnRpbnVlOworCWZvciAoY2xleHBfaWR4ID0gMDsgY2xleHBfaWR4IDwgaW5pdF9ub2Rlcy5uZWxlbTsgKytjbGV4cF9pZHgpCisJICB7CisJICAgIHJlX3Rva2VuX3QgKmNsZXhwX25vZGU7CisJICAgIGNsZXhwX25vZGUgPSBkZmEtPm5vZGVzICsgaW5pdF9ub2Rlcy5lbGVtc1tjbGV4cF9pZHhdOworCSAgICBpZiAoY2xleHBfbm9kZS0+dHlwZSA9PSBPUF9DTE9TRV9TVUJFWFAKKwkJJiYgY2xleHBfbm9kZS0+b3ByLmlkeCA9PSBkZmEtPm5vZGVzW25vZGVfaWR4XS5vcHIuaWR4KQorCSAgICAgIGJyZWFrOworCSAgfQorCWlmIChjbGV4cF9pZHggPT0gaW5pdF9ub2Rlcy5uZWxlbSkKKwkgIGNvbnRpbnVlOworCisJaWYgKHR5cGUgPT0gT1BfQkFDS19SRUYpCisJICB7CisJICAgIGludCBkZXN0X2lkeCA9IGRmYS0+ZWRlc3RzW25vZGVfaWR4XS5lbGVtc1swXTsKKwkgICAgaWYgKCFyZV9ub2RlX3NldF9jb250YWlucyAoJmluaXRfbm9kZXMsIGRlc3RfaWR4KSkKKwkgICAgICB7CisJCXJlZ19lcnJjb2RlX3QgZXJyID0gcmVfbm9kZV9zZXRfbWVyZ2UgKCZpbml0X25vZGVzLAorCQkJCQkJICAgICAgIGRmYS0+ZWNsb3N1cmVzCisJCQkJCQkgICAgICAgKyBkZXN0X2lkeCk7CisJCWlmIChlcnIgIT0gUkVHX05PRVJST1IpCisJCSAgcmV0dXJuIGVycjsKKwkJaSA9IDA7CisJICAgICAgfQorCSAgfQorICAgICAgfQorCisgIC8qIEl0IG11c3QgYmUgdGhlIGZpcnN0IHRpbWUgdG8gaW52b2tlIGFjcXVpcmVfc3RhdGUuICAqLworICBkZmEtPmluaXRfc3RhdGUgPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgJmluaXRfbm9kZXMsIDApOworICAvKiBXZSBkb24ndCBjaGVjayBFUlIgaGVyZSwgc2luY2UgdGhlIGluaXRpYWwgc3RhdGUgbXVzdCBub3QgYmUgTlVMTC4gICovCisgIGlmIChCRSAoZGZhLT5pbml0X3N0YXRlID09IE5VTEwsIDApKQorICAgIHJldHVybiBlcnI7CisgIGlmIChkZmEtPmluaXRfc3RhdGUtPmhhc19jb25zdHJhaW50KQorICAgIHsKKyAgICAgIGRmYS0+aW5pdF9zdGF0ZV93b3JkID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZpbml0X25vZGVzLAorCQkJCQkJICAgICAgIENPTlRFWFRfV09SRCk7CisgICAgICBkZmEtPmluaXRfc3RhdGVfbmwgPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgJmluaXRfbm9kZXMsCisJCQkJCQkgICAgIENPTlRFWFRfTkVXTElORSk7CisgICAgICBkZmEtPmluaXRfc3RhdGVfYmVnYnVmID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsCisJCQkJCQkJICZpbml0X25vZGVzLAorCQkJCQkJCSBDT05URVhUX05FV0xJTkUKKwkJCQkJCQkgfCBDT05URVhUX0JFR0JVRik7CisgICAgICBpZiAoQkUgKGRmYS0+aW5pdF9zdGF0ZV93b3JkID09IE5VTEwgfHwgZGZhLT5pbml0X3N0YXRlX25sID09IE5VTEwKKwkgICAgICB8fCBkZmEtPmluaXRfc3RhdGVfYmVnYnVmID09IE5VTEwsIDApKQorCXJldHVybiBlcnI7CisgICAgfQorICBlbHNlCisgICAgZGZhLT5pbml0X3N0YXRlX3dvcmQgPSBkZmEtPmluaXRfc3RhdGVfbmwKKyAgICAgID0gZGZhLT5pbml0X3N0YXRlX2JlZ2J1ZiA9IGRmYS0+aW5pdF9zdGF0ZTsKKworICByZV9ub2RlX3NldF9mcmVlICgmaW5pdF9ub2Rlcyk7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKwwKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLyogSWYgaXQgaXMgcG9zc2libGUgdG8gZG8gc2VhcmNoaW5nIGluIHNpbmdsZSBieXRlIGVuY29kaW5nIGluc3RlYWQgb2YgVVRGLTgKKyAgIHRvIHNwZWVkIHRoaW5ncyB1cCwgc2V0IGRmYS0+bWJfY3VyX21heCB0byAxLCBjbGVhciBpc191dGY4IGFuZCBjaGFuZ2UKKyAgIERGQSBub2RlcyB3aGVyZSBuZWVkZWQuICAqLworCitzdGF0aWMgdm9pZAorb3B0aW1pemVfdXRmOCAocmVfZGZhX3QgKmRmYSkKK3sKKyAgaW50IG5vZGUsIGksIG1iX2NoYXJzID0gMCwgaGFzX3BlcmlvZCA9IDA7CisKKyAgZm9yIChub2RlID0gMDsgbm9kZSA8IGRmYS0+bm9kZXNfbGVuOyArK25vZGUpCisgICAgc3dpdGNoIChkZmEtPm5vZGVzW25vZGVdLnR5cGUpCisgICAgICB7CisgICAgICBjYXNlIENIQVJBQ1RFUjoKKwlpZiAoZGZhLT5ub2Rlc1tub2RlXS5vcHIuYyA+PSAweDgwKQorCSAgbWJfY2hhcnMgPSAxOworCWJyZWFrOworICAgICAgY2FzZSBBTkNIT1I6CisJc3dpdGNoIChkZmEtPm5vZGVzW25vZGVdLm9wci5jdHhfdHlwZSkKKwkgIHsKKwkgIGNhc2UgTElORV9GSVJTVDoKKwkgIGNhc2UgTElORV9MQVNUOgorCSAgY2FzZSBCVUZfRklSU1Q6CisJICBjYXNlIEJVRl9MQVNUOgorCSAgICBicmVhazsKKwkgIGRlZmF1bHQ6CisJICAgIC8qIFdvcmQgYW5jaG9ycyBldGMuIGNhbm5vdCBiZSBoYW5kbGVkLiAgSXQncyBva2F5IHRvIHRlc3QKKwkgICAgICAgb3ByLmN0eF90eXBlIHNpbmNlIGNvbnN0cmFpbnRzIChmb3IgYWxsIERGQSBub2RlcykgYXJlCisJICAgICAgIGNyZWF0ZWQgYnkgT1Jpbmcgb25lIG9yIG1vcmUgb3ByLmN0eF90eXBlIHZhbHVlcy4gICovCisJICAgIHJldHVybjsKKwkgIH0KKwlicmVhazsKKyAgICAgIGNhc2UgT1BfUEVSSU9EOgorCWhhc19wZXJpb2QgPSAxOworCWJyZWFrOworICAgICAgY2FzZSBPUF9CQUNLX1JFRjoKKyAgICAgIGNhc2UgT1BfQUxUOgorICAgICAgY2FzZSBFTkRfT0ZfUkU6CisgICAgICBjYXNlIE9QX0RVUF9BU1RFUklTSzoKKyAgICAgIGNhc2UgT1BfT1BFTl9TVUJFWFA6CisgICAgICBjYXNlIE9QX0NMT1NFX1NVQkVYUDoKKwlicmVhazsKKyAgICAgIGNhc2UgQ09NUExFWF9CUkFDS0VUOgorCXJldHVybjsKKyAgICAgIGNhc2UgU0lNUExFX0JSQUNLRVQ6CisJLyogSnVzdCBkb3VibGUgY2hlY2suICBUaGUgbm9uLUFTQ0lJIHJhbmdlIHN0YXJ0cyBhdCAweDgwLiAgKi8KKwlhc3NlcnQgKDB4ODAgJSBCSVRTRVRfV09SRF9CSVRTID09IDApOworCWZvciAoaSA9IDB4ODAgLyBCSVRTRVRfV09SRF9CSVRTOyBpIDwgQklUU0VUX1dPUkRTOyArK2kpCisJICBpZiAoZGZhLT5ub2Rlc1tub2RlXS5vcHIuc2Jjc2V0W2ldKQorCSAgICByZXR1cm47CisJYnJlYWs7CisgICAgICBkZWZhdWx0OgorCWFib3J0ICgpOworICAgICAgfQorCisgIGlmIChtYl9jaGFycyB8fCBoYXNfcGVyaW9kKQorICAgIGZvciAobm9kZSA9IDA7IG5vZGUgPCBkZmEtPm5vZGVzX2xlbjsgKytub2RlKQorICAgICAgeworCWlmIChkZmEtPm5vZGVzW25vZGVdLnR5cGUgPT0gQ0hBUkFDVEVSCisJICAgICYmIGRmYS0+bm9kZXNbbm9kZV0ub3ByLmMgPj0gMHg4MCkKKwkgIGRmYS0+bm9kZXNbbm9kZV0ubWJfcGFydGlhbCA9IDA7CisJZWxzZSBpZiAoZGZhLT5ub2Rlc1tub2RlXS50eXBlID09IE9QX1BFUklPRCkKKwkgIGRmYS0+bm9kZXNbbm9kZV0udHlwZSA9IE9QX1VURjhfUEVSSU9EOworICAgICAgfQorCisgIC8qIFRoZSBzZWFyY2ggY2FuIGJlIGluIHNpbmdsZSBieXRlIGxvY2FsZS4gICovCisgIGRmYS0+bWJfY3VyX21heCA9IDE7CisgIGRmYS0+aXNfdXRmOCA9IDA7CisgIGRmYS0+aGFzX21iX25vZGUgPSBkZmEtPm5iYWNrcmVmID4gMCB8fCBoYXNfcGVyaW9kOworfQorI2VuZGlmCisMCisvKiBBbmFseXplIHRoZSBzdHJ1Y3R1cmUgdHJlZSwgYW5kIGNhbGN1bGF0ZSAiZmlyc3QiLCAibmV4dCIsICJlZGVzdCIsCisgICAiZWNsb3N1cmUiLCBhbmQgImludmVjbG9zdXJlIi4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CithbmFseXplIChyZWdleF90ICpwcmVnKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgcmVnX2VycmNvZGVfdCByZXQ7CisKKyAgLyogQWxsb2NhdGUgYXJyYXlzLiAgKi8KKyAgZGZhLT5uZXh0cyA9IHJlX21hbGxvYyAoaW50LCBkZmEtPm5vZGVzX2FsbG9jKTsKKyAgZGZhLT5vcmdfaW5kaWNlcyA9IHJlX21hbGxvYyAoaW50LCBkZmEtPm5vZGVzX2FsbG9jKTsKKyAgZGZhLT5lZGVzdHMgPSByZV9tYWxsb2MgKHJlX25vZGVfc2V0LCBkZmEtPm5vZGVzX2FsbG9jKTsKKyAgZGZhLT5lY2xvc3VyZXMgPSByZV9tYWxsb2MgKHJlX25vZGVfc2V0LCBkZmEtPm5vZGVzX2FsbG9jKTsKKyAgaWYgKEJFIChkZmEtPm5leHRzID09IE5VTEwgfHwgZGZhLT5vcmdfaW5kaWNlcyA9PSBOVUxMIHx8IGRmYS0+ZWRlc3RzID09IE5VTEwKKwkgIHx8IGRmYS0+ZWNsb3N1cmVzID09IE5VTEwsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworCisgIGRmYS0+c3ViZXhwX21hcCA9IHJlX21hbGxvYyAoaW50LCBwcmVnLT5yZV9uc3ViKTsKKyAgaWYgKGRmYS0+c3ViZXhwX21hcCAhPSBOVUxMKQorICAgIHsKKyAgICAgIGludCBpOworICAgICAgZm9yIChpID0gMDsgaSA8IHByZWctPnJlX25zdWI7IGkrKykKKwlkZmEtPnN1YmV4cF9tYXBbaV0gPSBpOworICAgICAgcHJlb3JkZXIgKGRmYS0+c3RyX3RyZWUsIG9wdGltaXplX3N1YmV4cHMsIGRmYSk7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJlZy0+cmVfbnN1YjsgaSsrKQorCWlmIChkZmEtPnN1YmV4cF9tYXBbaV0gIT0gaSkKKwkgIGJyZWFrOworICAgICAgaWYgKGkgPT0gcHJlZy0+cmVfbnN1YikKKwl7CisJICBmcmVlIChkZmEtPnN1YmV4cF9tYXApOworCSAgZGZhLT5zdWJleHBfbWFwID0gTlVMTDsKKwl9CisgICAgfQorCisgIHJldCA9IHBvc3RvcmRlciAoZGZhLT5zdHJfdHJlZSwgbG93ZXJfc3ViZXhwcywgcHJlZyk7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0OworICByZXQgPSBwb3N0b3JkZXIgKGRmYS0+c3RyX3RyZWUsIGNhbGNfZmlyc3QsIGRmYSk7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0OworICBwcmVvcmRlciAoZGZhLT5zdHJfdHJlZSwgY2FsY19uZXh0LCBkZmEpOworICByZXQgPSBwcmVvcmRlciAoZGZhLT5zdHJfdHJlZSwgbGlua19uZmFfbm9kZXMsIGRmYSk7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0OworICByZXQgPSBjYWxjX2VjbG9zdXJlIChkZmEpOworICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIHJldDsKKworICAvKiBXZSBvbmx5IG5lZWQgdGhpcyBkdXJpbmcgdGhlIHBydW5lX2ltcG9zc2libGVfbm9kZXMgcGFzcyBpbiByZWdleGVjLmM7CisgICAgIHNraXAgaXQgaWYgcF9pX24gd2lsbCBub3QgcnVuLCBhcyBjYWxjX2ludmVjbG9zdXJlIGNhbiBiZSBxdWFkcmF0aWMuICAqLworICBpZiAoKCFwcmVnLT5ub19zdWIgJiYgcHJlZy0+cmVfbnN1YiA+IDAgJiYgZGZhLT5oYXNfcGx1cmFsX21hdGNoKQorICAgICAgfHwgZGZhLT5uYmFja3JlZikKKyAgICB7CisgICAgICBkZmEtPmludmVjbG9zdXJlcyA9IHJlX21hbGxvYyAocmVfbm9kZV9zZXQsIGRmYS0+bm9kZXNfbGVuKTsKKyAgICAgIGlmIChCRSAoZGZhLT5pbnZlY2xvc3VyZXMgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICByZXQgPSBjYWxjX2ludmVjbG9zdXJlIChkZmEpOworICAgIH0KKworICByZXR1cm4gcmV0OworfQorCisvKiBPdXIgcGFyc2UgdHJlZXMgYXJlIHZlcnkgdW5iYWxhbmNlZCwgc28gd2UgY2Fubm90IHVzZSBhIHN0YWNrIHRvCisgICBpbXBsZW1lbnQgcGFyc2UgdHJlZSB2aXNpdHMuICBJbnN0ZWFkLCB3ZSB1c2UgcGFyZW50IHBvaW50ZXJzIGFuZAorICAgc29tZSBoYWlyeSBjb2RlIGluIHRoZXNlIHR3byBmdW5jdGlvbnMuICAqLworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3Bvc3RvcmRlciAoYmluX3RyZWVfdCAqcm9vdCwgcmVnX2VycmNvZGVfdCAoZm4gKHZvaWQgKiwgYmluX3RyZWVfdCAqKSksCisJICAgdm9pZCAqZXh0cmEpCit7CisgIGJpbl90cmVlX3QgKm5vZGUsICpwcmV2OworCisgIGZvciAobm9kZSA9IHJvb3Q7IDsgKQorICAgIHsKKyAgICAgIC8qIERlc2NlbmQgZG93biB0aGUgdHJlZSwgcHJlZmVyYWJseSB0byB0aGUgbGVmdCAob3IgdG8gdGhlIHJpZ2h0CisJIGlmIHRoYXQncyB0aGUgb25seSBjaGlsZCkuICAqLworICAgICAgd2hpbGUgKG5vZGUtPmxlZnQgfHwgbm9kZS0+cmlnaHQpCisJaWYgKG5vZGUtPmxlZnQpCisJICBub2RlID0gbm9kZS0+bGVmdDsKKwllbHNlCisJICBub2RlID0gbm9kZS0+cmlnaHQ7CisKKyAgICAgIGRvCisJeworCSAgcmVnX2VycmNvZGVfdCBlcnIgPSBmbiAoZXh0cmEsIG5vZGUpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gZXJyOworCSAgaWYgKG5vZGUtPnBhcmVudCA9PSBOVUxMKQorCSAgICByZXR1cm4gUkVHX05PRVJST1I7CisJICBwcmV2ID0gbm9kZTsKKwkgIG5vZGUgPSBub2RlLT5wYXJlbnQ7CisJfQorICAgICAgLyogR28gdXAgd2hpbGUgd2UgaGF2ZSBhIG5vZGUgdGhhdCBpcyByZWFjaGVkIGZyb20gdGhlIHJpZ2h0LiAgKi8KKyAgICAgIHdoaWxlIChub2RlLT5yaWdodCA9PSBwcmV2IHx8IG5vZGUtPnJpZ2h0ID09IE5VTEwpOworICAgICAgbm9kZSA9IG5vZGUtPnJpZ2h0OworICAgIH0KK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3ByZW9yZGVyIChiaW5fdHJlZV90ICpyb290LCByZWdfZXJyY29kZV90IChmbiAodm9pZCAqLCBiaW5fdHJlZV90ICopKSwKKwkgIHZvaWQgKmV4dHJhKQoreworICBiaW5fdHJlZV90ICpub2RlOworCisgIGZvciAobm9kZSA9IHJvb3Q7IDsgKQorICAgIHsKKyAgICAgIHJlZ19lcnJjb2RlX3QgZXJyID0gZm4gKGV4dHJhLCBub2RlKTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworCisgICAgICAvKiBHbyB0byB0aGUgbGVmdCBub2RlLCBvciB1cCBhbmQgdG8gdGhlIHJpZ2h0LiAgKi8KKyAgICAgIGlmIChub2RlLT5sZWZ0KQorCW5vZGUgPSBub2RlLT5sZWZ0OworICAgICAgZWxzZQorCXsKKwkgIGJpbl90cmVlX3QgKnByZXYgPSBOVUxMOworCSAgd2hpbGUgKG5vZGUtPnJpZ2h0ID09IHByZXYgfHwgbm9kZS0+cmlnaHQgPT0gTlVMTCkKKwkgICAgeworCSAgICAgIHByZXYgPSBub2RlOworCSAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnQ7CisJICAgICAgaWYgKCFub2RlKQorCQlyZXR1cm4gUkVHX05PRVJST1I7CisJICAgIH0KKwkgIG5vZGUgPSBub2RlLT5yaWdodDsKKwl9CisgICAgfQorfQorCisvKiBPcHRpbWl6YXRpb24gcGFzczogaWYgYSBTVUJFWFAgaXMgZW50aXJlbHkgY29udGFpbmVkLCBzdHJpcCBpdCBhbmQgdGVsbAorICAgcmVfc2VhcmNoX2ludGVybmFsIHRvIG1hcCB0aGUgaW5uZXIgb25lJ3Mgb3ByLmlkeCB0byB0aGlzIG9uZSdzLiAgQWRqdXN0CisgICBiYWNrcmVmZXJlbmNlcyBhcyB3ZWxsLiAgUmVxdWlyZXMgYSBwcmVvcmRlciB2aXNpdC4gICovCitzdGF0aWMgcmVnX2VycmNvZGVfdAorb3B0aW1pemVfc3ViZXhwcyAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgZXh0cmE7CisKKyAgaWYgKG5vZGUtPnRva2VuLnR5cGUgPT0gT1BfQkFDS19SRUYgJiYgZGZhLT5zdWJleHBfbWFwKQorICAgIHsKKyAgICAgIGludCBpZHggPSBub2RlLT50b2tlbi5vcHIuaWR4OworICAgICAgbm9kZS0+dG9rZW4ub3ByLmlkeCA9IGRmYS0+c3ViZXhwX21hcFtpZHhdOworICAgICAgZGZhLT51c2VkX2JrcmVmX21hcCB8PSAxIDw8IG5vZGUtPnRva2VuLm9wci5pZHg7CisgICAgfQorCisgIGVsc2UgaWYgKG5vZGUtPnRva2VuLnR5cGUgPT0gU1VCRVhQCisJICAgJiYgbm9kZS0+bGVmdCAmJiBub2RlLT5sZWZ0LT50b2tlbi50eXBlID09IFNVQkVYUCkKKyAgICB7CisgICAgICBpbnQgb3RoZXJfaWR4ID0gbm9kZS0+bGVmdC0+dG9rZW4ub3ByLmlkeDsKKworICAgICAgbm9kZS0+bGVmdCA9IG5vZGUtPmxlZnQtPmxlZnQ7CisgICAgICBpZiAobm9kZS0+bGVmdCkKKwlub2RlLT5sZWZ0LT5wYXJlbnQgPSBub2RlOworCisgICAgICBkZmEtPnN1YmV4cF9tYXBbb3RoZXJfaWR4XSA9IGRmYS0+c3ViZXhwX21hcFtub2RlLT50b2tlbi5vcHIuaWR4XTsKKyAgICAgIGlmIChvdGhlcl9pZHggPCBCSVRTRVRfV09SRF9CSVRTKQorCSAgZGZhLT51c2VkX2JrcmVmX21hcCAmPSB+KChiaXRzZXRfd29yZF90KSAxIDw8IG90aGVyX2lkeCk7CisgICAgfQorCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogTG93ZXJpbmcgcGFzczogVHVybiBlYWNoIFNVQkVYUCBub2RlIGludG8gdGhlIGFwcHJvcHJpYXRlIGNvbmNhdGVuYXRpb24KKyAgIG9mIE9QX09QRU5fU1VCRVhQLCB0aGUgYm9keSBvZiB0aGUgU1VCRVhQIChpZiBhbnkpIGFuZCBPUF9DTE9TRV9TVUJFWFAuICAqLworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2xvd2VyX3N1YmV4cHMgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKQoreworICByZWdleF90ICpwcmVnID0gKHJlZ2V4X3QgKikgZXh0cmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisKKyAgaWYgKG5vZGUtPmxlZnQgJiYgbm9kZS0+bGVmdC0+dG9rZW4udHlwZSA9PSBTVUJFWFApCisgICAgeworICAgICAgbm9kZS0+bGVmdCA9IGxvd2VyX3N1YmV4cCAoJmVyciwgcHJlZywgbm9kZS0+bGVmdCk7CisgICAgICBpZiAobm9kZS0+bGVmdCkKKwlub2RlLT5sZWZ0LT5wYXJlbnQgPSBub2RlOworICAgIH0KKyAgaWYgKG5vZGUtPnJpZ2h0ICYmIG5vZGUtPnJpZ2h0LT50b2tlbi50eXBlID09IFNVQkVYUCkKKyAgICB7CisgICAgICBub2RlLT5yaWdodCA9IGxvd2VyX3N1YmV4cCAoJmVyciwgcHJlZywgbm9kZS0+cmlnaHQpOworICAgICAgaWYgKG5vZGUtPnJpZ2h0KQorCW5vZGUtPnJpZ2h0LT5wYXJlbnQgPSBub2RlOworICAgIH0KKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgYmluX3RyZWVfdCAqCitsb3dlcl9zdWJleHAgKHJlZ19lcnJjb2RlX3QgKmVyciwgcmVnZXhfdCAqcHJlZywgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3QgKmJvZHkgPSBub2RlLT5sZWZ0OworICBiaW5fdHJlZV90ICpvcCwgKmNscywgKnRyZWUxLCAqdHJlZTsKKworICBpZiAocHJlZy0+bm9fc3ViCisgICAgICAvKiBXZSBkbyBub3Qgb3B0aW1pemUgZW1wdHkgc3ViZXhwcmVzc2lvbnMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIG1heQorCSBoYXZlIGJhZCBDT05DQVQgbm9kZXMgd2l0aCBOVUxMIGNoaWxkcmVuLiAgVGhpcyBpcyBvYnZpb3VzbHkgbm90CisJIHZlcnkgY29tbW9uLCBzbyB3ZSBkbyBub3QgbG9zZSBtdWNoLiAgQW4gZXhhbXBsZSB0aGF0IHRyaWdnZXJzCisJIHRoaXMgY2FzZSBpcyB0aGUgc2VkICJzY3JpcHQiIC9cKFwpL3guICAqLworICAgICAgJiYgbm9kZS0+bGVmdCAhPSBOVUxMCisgICAgICAmJiAobm9kZS0+dG9rZW4ub3ByLmlkeCA+PSBCSVRTRVRfV09SRF9CSVRTCisJICB8fCAhKGRmYS0+dXNlZF9ia3JlZl9tYXAKKwkgICAgICAgJiAoKGJpdHNldF93b3JkX3QpIDEgPDwgbm9kZS0+dG9rZW4ub3ByLmlkeCkpKSkKKyAgICByZXR1cm4gbm9kZS0+bGVmdDsKKworICAvKiBDb252ZXJ0IHRoZSBTVUJFWFAgbm9kZSB0byB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbgorICAgICBPUF9PUEVOX1NVQkVYUCwgdGhlIGNvbnRlbnRzLCBhbmQgYW4gT1BfQ0xPU0VfU1VCRVhQLiAgKi8KKyAgb3AgPSBjcmVhdGVfdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCBPUF9PUEVOX1NVQkVYUCk7CisgIGNscyA9IGNyZWF0ZV90cmVlIChkZmEsIE5VTEwsIE5VTEwsIE9QX0NMT1NFX1NVQkVYUCk7CisgIHRyZWUxID0gYm9keSA/IGNyZWF0ZV90cmVlIChkZmEsIGJvZHksIGNscywgQ09OQ0FUKSA6IGNsczsKKyAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIG9wLCB0cmVlMSwgQ09OQ0FUKTsKKyAgaWYgKEJFICh0cmVlID09IE5VTEwgfHwgdHJlZTEgPT0gTlVMTCB8fCBvcCA9PSBOVUxMIHx8IGNscyA9PSBOVUxMLCAwKSkKKyAgICB7CisgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBvcC0+dG9rZW4ub3ByLmlkeCA9IGNscy0+dG9rZW4ub3ByLmlkeCA9IG5vZGUtPnRva2VuLm9wci5pZHg7CisgIG9wLT50b2tlbi5vcHRfc3ViZXhwID0gY2xzLT50b2tlbi5vcHRfc3ViZXhwID0gbm9kZS0+dG9rZW4ub3B0X3N1YmV4cDsKKyAgcmV0dXJuIHRyZWU7Cit9CisKKy8qIFBhc3MgMSBpbiBidWlsZGluZyB0aGUgTkZBOiBjb21wdXRlIEZJUlNUIGFuZCBjcmVhdGUgdW5saW5rZWQgYXV0b21hdG9uCisgICBub2Rlcy4gIFJlcXVpcmVzIGEgcG9zdG9yZGVyIHZpc2l0LiAgKi8KK3N0YXRpYyByZWdfZXJyY29kZV90CitjYWxjX2ZpcnN0ICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBleHRyYTsKKyAgaWYgKG5vZGUtPnRva2VuLnR5cGUgPT0gQ09OQ0FUKQorICAgIHsKKyAgICAgIG5vZGUtPmZpcnN0ID0gbm9kZS0+bGVmdC0+Zmlyc3Q7CisgICAgICBub2RlLT5ub2RlX2lkeCA9IG5vZGUtPmxlZnQtPm5vZGVfaWR4OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG5vZGUtPmZpcnN0ID0gbm9kZTsKKyAgICAgIG5vZGUtPm5vZGVfaWR4ID0gcmVfZGZhX2FkZF9ub2RlIChkZmEsIG5vZGUtPnRva2VuKTsKKyAgICAgIGlmIChCRSAobm9kZS0+bm9kZV9pZHggPT0gLTEsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgaWYgKG5vZGUtPnRva2VuLnR5cGUgPT0gQU5DSE9SKQorCWRmYS0+bm9kZXNbbm9kZS0+bm9kZV9pZHhdLmNvbnN0cmFpbnQgPSBub2RlLT50b2tlbi5vcHIuY3R4X3R5cGU7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFBhc3MgMjogY29tcHV0ZSBORVhUIG9uIHRoZSB0cmVlLiAgUHJlb3JkZXIgdmlzaXQuICAqLworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2NhbGNfbmV4dCAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpCit7CisgIHN3aXRjaCAobm9kZS0+dG9rZW4udHlwZSkKKyAgICB7CisgICAgY2FzZSBPUF9EVVBfQVNURVJJU0s6CisgICAgICBub2RlLT5sZWZ0LT5uZXh0ID0gbm9kZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ09OQ0FUOgorICAgICAgbm9kZS0+bGVmdC0+bmV4dCA9IG5vZGUtPnJpZ2h0LT5maXJzdDsKKyAgICAgIG5vZGUtPnJpZ2h0LT5uZXh0ID0gbm9kZS0+bmV4dDsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBpZiAobm9kZS0+bGVmdCkKKwlub2RlLT5sZWZ0LT5uZXh0ID0gbm9kZS0+bmV4dDsKKyAgICAgIGlmIChub2RlLT5yaWdodCkKKwlub2RlLT5yaWdodC0+bmV4dCA9IG5vZGUtPm5leHQ7CisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogUGFzcyAzOiBsaW5rIGFsbCBERkEgbm9kZXMgdG8gdGhlaXIgTkVYVCBub2RlIChhbnkgb3JkZXIgd2lsbCBkbykuICAqLworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2xpbmtfbmZhX25vZGVzICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBleHRyYTsKKyAgaW50IGlkeCA9IG5vZGUtPm5vZGVfaWR4OworICByZWdfZXJyY29kZV90IGVyciA9IFJFR19OT0VSUk9SOworCisgIHN3aXRjaCAobm9kZS0+dG9rZW4udHlwZSkKKyAgICB7CisgICAgY2FzZSBDT05DQVQ6CisgICAgICBicmVhazsKKworICAgIGNhc2UgRU5EX09GX1JFOgorICAgICAgYXNzZXJ0IChub2RlLT5uZXh0ID09IE5VTEwpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0RVUF9BU1RFUklTSzoKKyAgICBjYXNlIE9QX0FMVDoKKyAgICAgIHsKKwlpbnQgbGVmdCwgcmlnaHQ7CisJZGZhLT5oYXNfcGx1cmFsX21hdGNoID0gMTsKKwlpZiAobm9kZS0+bGVmdCAhPSBOVUxMKQorCSAgbGVmdCA9IG5vZGUtPmxlZnQtPmZpcnN0LT5ub2RlX2lkeDsKKwllbHNlCisJICBsZWZ0ID0gbm9kZS0+bmV4dC0+bm9kZV9pZHg7CisJaWYgKG5vZGUtPnJpZ2h0ICE9IE5VTEwpCisJICByaWdodCA9IG5vZGUtPnJpZ2h0LT5maXJzdC0+bm9kZV9pZHg7CisJZWxzZQorCSAgcmlnaHQgPSBub2RlLT5uZXh0LT5ub2RlX2lkeDsKKwlhc3NlcnQgKGxlZnQgPiAtMSk7CisJYXNzZXJ0IChyaWdodCA+IC0xKTsKKwllcnIgPSByZV9ub2RlX3NldF9pbml0XzIgKGRmYS0+ZWRlc3RzICsgaWR4LCBsZWZ0LCByaWdodCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQU5DSE9SOgorICAgIGNhc2UgT1BfT1BFTl9TVUJFWFA6CisgICAgY2FzZSBPUF9DTE9TRV9TVUJFWFA6CisgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbml0XzEgKGRmYS0+ZWRlc3RzICsgaWR4LCBub2RlLT5uZXh0LT5ub2RlX2lkeCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgT1BfQkFDS19SRUY6CisgICAgICBkZmEtPm5leHRzW2lkeF0gPSBub2RlLT5uZXh0LT5ub2RlX2lkeDsKKyAgICAgIGlmIChub2RlLT50b2tlbi50eXBlID09IE9QX0JBQ0tfUkVGKQorCWVyciA9IHJlX25vZGVfc2V0X2luaXRfMSAoZGZhLT5lZGVzdHMgKyBpZHgsIGRmYS0+bmV4dHNbaWR4XSk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBhc3NlcnQgKCFJU19FUFNJTE9OX05PREUgKG5vZGUtPnRva2VuLnR5cGUpKTsKKyAgICAgIGRmYS0+bmV4dHNbaWR4XSA9IG5vZGUtPm5leHQtPm5vZGVfaWR4OworICAgICAgYnJlYWs7CisgICAgfQorCisgIHJldHVybiBlcnI7Cit9CisKKy8qIER1cGxpY2F0ZSB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIHRoZSBub2RlIFJPT1RfTk9ERS4KKyAgIE5vdGUgdGhhdCBkdXBsaWNhdGVkIG5vZGVzIGhhdmUgY29uc3RyYWludCBJTklUX0NPTlNUUkFJTlQgaW4gYWRkaXRpb24KKyAgIHRvIHRoZWlyIG93biBjb25zdHJhaW50LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitkdXBsaWNhdGVfbm9kZV9jbG9zdXJlIChyZV9kZmFfdCAqZGZhLCBpbnQgdG9wX29yZ19ub2RlLCBpbnQgdG9wX2Nsb25lX25vZGUsCisJCQlpbnQgcm9vdF9ub2RlLCB1bnNpZ25lZCBpbnQgaW5pdF9jb25zdHJhaW50KQoreworICBpbnQgb3JnX25vZGUsIGNsb25lX25vZGUsIHJldDsKKyAgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQgPSBpbml0X2NvbnN0cmFpbnQ7CisgIGZvciAob3JnX25vZGUgPSB0b3Bfb3JnX25vZGUsIGNsb25lX25vZGUgPSB0b3BfY2xvbmVfbm9kZTs7KQorICAgIHsKKyAgICAgIGludCBvcmdfZGVzdCwgY2xvbmVfZGVzdDsKKyAgICAgIGlmIChkZmEtPm5vZGVzW29yZ19ub2RlXS50eXBlID09IE9QX0JBQ0tfUkVGKQorCXsKKwkgIC8qIElmIHRoZSBiYWNrIHJlZmVyZW5jZSBlcHNpbG9uLXRyYW5zaXQsIGl0cyBkZXN0aW5hdGlvbiBtdXN0CisJICAgICBhbHNvIGhhdmUgdGhlIGNvbnN0cmFpbnQuICBUaGVuIGR1cGxpY2F0ZSB0aGUgZXBzaWxvbiBjbG9zdXJlCisJICAgICBvZiB0aGUgZGVzdGluYXRpb24gb2YgdGhlIGJhY2sgcmVmZXJlbmNlLCBhbmQgc3RvcmUgaXQgaW4KKwkgICAgIGVkZXN0cyBvZiB0aGUgYmFjayByZWZlcmVuY2UuICAqLworCSAgb3JnX2Rlc3QgPSBkZmEtPm5leHRzW29yZ19ub2RlXTsKKwkgIHJlX25vZGVfc2V0X2VtcHR5IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUpOworCSAgY2xvbmVfZGVzdCA9IGR1cGxpY2F0ZV9ub2RlIChkZmEsIG9yZ19kZXN0LCBjb25zdHJhaW50KTsKKwkgIGlmIChCRSAoY2xvbmVfZGVzdCA9PSAtMSwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCSAgZGZhLT5uZXh0c1tjbG9uZV9ub2RlXSA9IGRmYS0+bmV4dHNbb3JnX25vZGVdOworCSAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIGNsb25lX2Rlc3QpOworCSAgaWYgKEJFIChyZXQgPCAwLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAgZWxzZSBpZiAoZGZhLT5lZGVzdHNbb3JnX25vZGVdLm5lbGVtID09IDApCisJeworCSAgLyogSW4gY2FzZSBvZiB0aGUgbm9kZSBjYW4ndCBlcHNpbG9uLXRyYW5zaXQsIGRvbid0IGR1cGxpY2F0ZSB0aGUKKwkgICAgIGRlc3RpbmF0aW9uIGFuZCBzdG9yZSB0aGUgb3JpZ2luYWwgZGVzdGluYXRpb24gYXMgdGhlCisJICAgICBkZXN0aW5hdGlvbiBvZiB0aGUgbm9kZS4gICovCisJICBkZmEtPm5leHRzW2Nsb25lX25vZGVdID0gZGZhLT5uZXh0c1tvcmdfbm9kZV07CisJICBicmVhazsKKwl9CisgICAgICBlbHNlIGlmIChkZmEtPmVkZXN0c1tvcmdfbm9kZV0ubmVsZW0gPT0gMSkKKwl7CisJICAvKiBJbiBjYXNlIG9mIHRoZSBub2RlIGNhbiBlcHNpbG9uLXRyYW5zaXQsIGFuZCBpdCBoYXMgb25seSBvbmUKKwkgICAgIGRlc3RpbmF0aW9uLiAgKi8KKwkgIG9yZ19kZXN0ID0gZGZhLT5lZGVzdHNbb3JnX25vZGVdLmVsZW1zWzBdOworCSAgcmVfbm9kZV9zZXRfZW1wdHkgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSk7CisJICAvKiBJZiB0aGUgbm9kZSBpcyByb290X25vZGUgaXRzZWxmLCBpdCBtZWFucyB0aGUgZXBzaWxvbiBjbHNvdXJlCisJICAgICBoYXMgYSBsb29wLiAgIFRoZW4gdGllIGl0IHRvIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcm9vdF9ub2RlLiAgKi8KKwkgIGlmIChvcmdfbm9kZSA9PSByb290X25vZGUgJiYgY2xvbmVfbm9kZSAhPSBvcmdfbm9kZSkKKwkgICAgeworCSAgICAgIHJldCA9IHJlX25vZGVfc2V0X2luc2VydCAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlLCBvcmdfZGVzdCk7CisJICAgICAgaWYgKEJFIChyZXQgPCAwLCAwKSkKKwkJcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIC8qIEluIGNhc2Ugb2YgdGhlIG5vZGUgaGFzIGFub3RoZXIgY29uc3RyYWludCwgYWRkIGl0LiAgKi8KKwkgIGNvbnN0cmFpbnQgfD0gZGZhLT5ub2Rlc1tvcmdfbm9kZV0uY29uc3RyYWludDsKKwkgIGNsb25lX2Rlc3QgPSBkdXBsaWNhdGVfbm9kZSAoZGZhLCBvcmdfZGVzdCwgY29uc3RyYWludCk7CisJICBpZiAoQkUgKGNsb25lX2Rlc3QgPT0gLTEsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwkgIHJldCA9IHJlX25vZGVfc2V0X2luc2VydCAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlLCBjbG9uZV9kZXN0KTsKKwkgIGlmIChCRSAocmV0IDwgMCwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICAgIGVsc2UgLyogZGZhLT5lZGVzdHNbb3JnX25vZGVdLm5lbGVtID09IDIgKi8KKwl7CisJICAvKiBJbiBjYXNlIG9mIHRoZSBub2RlIGNhbiBlcHNpbG9uLXRyYW5zaXQsIGFuZCBpdCBoYXMgdHdvCisJICAgICBkZXN0aW5hdGlvbnMuIEluIHRoZSBiaW5fdHJlZV90IGFuZCBERkEsIHRoYXQncyAnfCcgYW5kICcqJy4gICAqLworCSAgb3JnX2Rlc3QgPSBkZmEtPmVkZXN0c1tvcmdfbm9kZV0uZWxlbXNbMF07CisJICByZV9ub2RlX3NldF9lbXB0eSAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlKTsKKwkgIC8qIFNlYXJjaCBmb3IgYSBkdXBsaWNhdGVkIG5vZGUgd2hpY2ggc2F0aXNmaWVzIHRoZSBjb25zdHJhaW50LiAgKi8KKwkgIGNsb25lX2Rlc3QgPSBzZWFyY2hfZHVwbGljYXRlZF9ub2RlIChkZmEsIG9yZ19kZXN0LCBjb25zdHJhaW50KTsKKwkgIGlmIChjbG9uZV9kZXN0ID09IC0xKQorCSAgICB7CisJICAgICAgLyogVGhlcmUgaXMgbm8gc3VjaCBkdXBsaWNhdGVkIG5vZGUsIGNyZWF0ZSBhIG5ldyBvbmUuICAqLworCSAgICAgIHJlZ19lcnJjb2RlX3QgZXJyOworCSAgICAgIGNsb25lX2Rlc3QgPSBkdXBsaWNhdGVfbm9kZSAoZGZhLCBvcmdfZGVzdCwgY29uc3RyYWludCk7CisJICAgICAgaWYgKEJFIChjbG9uZV9kZXN0ID09IC0xLCAwKSkKKwkJcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgICAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIGNsb25lX2Rlc3QpOworCSAgICAgIGlmIChCRSAocmV0IDwgMCwgMCkpCisJCXJldHVybiBSRUdfRVNQQUNFOworCSAgICAgIGVyciA9IGR1cGxpY2F0ZV9ub2RlX2Nsb3N1cmUgKGRmYSwgb3JnX2Rlc3QsIGNsb25lX2Rlc3QsCisJCQkJCSAgICByb290X25vZGUsIGNvbnN0cmFpbnQpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJcmV0dXJuIGVycjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogVGhlcmUgaXMgYSBkdXBsaWNhdGVkIG5vZGUgd2hpY2ggc2F0aXNmaWVzIHRoZSBjb25zdHJhaW50LAorCQkgdXNlIGl0IHRvIGF2b2lkIGluZmluaXRlIGxvb3AuICAqLworCSAgICAgIHJldCA9IHJlX25vZGVfc2V0X2luc2VydCAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlLCBjbG9uZV9kZXN0KTsKKwkgICAgICBpZiAoQkUgKHJldCA8IDAsIDApKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgfQorCisJICBvcmdfZGVzdCA9IGRmYS0+ZWRlc3RzW29yZ19ub2RlXS5lbGVtc1sxXTsKKwkgIGNsb25lX2Rlc3QgPSBkdXBsaWNhdGVfbm9kZSAoZGZhLCBvcmdfZGVzdCwgY29uc3RyYWludCk7CisJICBpZiAoQkUgKGNsb25lX2Rlc3QgPT0gLTEsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwkgIHJldCA9IHJlX25vZGVfc2V0X2luc2VydCAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlLCBjbG9uZV9kZXN0KTsKKwkgIGlmIChCRSAocmV0IDwgMCwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICAgIG9yZ19ub2RlID0gb3JnX2Rlc3Q7CisgICAgICBjbG9uZV9ub2RlID0gY2xvbmVfZGVzdDsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogU2VhcmNoIGZvciBhIG5vZGUgd2hpY2ggaXMgZHVwbGljYXRlZCBmcm9tIHRoZSBub2RlIE9SR19OT0RFLCBhbmQKKyAgIHNhdGlzZmllcyB0aGUgY29uc3RyYWludCBDT05TVFJBSU5ULiAgKi8KKworc3RhdGljIGludAorc2VhcmNoX2R1cGxpY2F0ZWRfbm9kZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG9yZ19ub2RlLAorCQkJdW5zaWduZWQgaW50IGNvbnN0cmFpbnQpCit7CisgIGludCBpZHg7CisgIGZvciAoaWR4ID0gZGZhLT5ub2Rlc19sZW4gLSAxOyBkZmEtPm5vZGVzW2lkeF0uZHVwbGljYXRlZCAmJiBpZHggPiAwOyAtLWlkeCkKKyAgICB7CisgICAgICBpZiAob3JnX25vZGUgPT0gZGZhLT5vcmdfaW5kaWNlc1tpZHhdCisJICAmJiBjb25zdHJhaW50ID09IGRmYS0+bm9kZXNbaWR4XS5jb25zdHJhaW50KQorCXJldHVybiBpZHg7IC8qIEZvdW5kLiAgKi8KKyAgICB9CisgIHJldHVybiAtMTsgLyogTm90IGZvdW5kLiAgKi8KK30KKworLyogRHVwbGljYXRlIHRoZSBub2RlIHdob3NlIGluZGV4IGlzIE9SR19JRFggYW5kIHNldCB0aGUgY29uc3RyYWludCBDT05TVFJBSU5ULgorICAgUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgbmV3IG5vZGUsIG9yIC0xIGlmIGluc3VmZmljaWVudCBzdG9yYWdlIGlzCisgICBhdmFpbGFibGUuICAqLworCitzdGF0aWMgaW50CitkdXBsaWNhdGVfbm9kZSAocmVfZGZhX3QgKmRmYSwgaW50IG9yZ19pZHgsIHVuc2lnbmVkIGludCBjb25zdHJhaW50KQoreworICBpbnQgZHVwX2lkeCA9IHJlX2RmYV9hZGRfbm9kZSAoZGZhLCBkZmEtPm5vZGVzW29yZ19pZHhdKTsKKyAgaWYgKEJFIChkdXBfaWR4ICE9IC0xLCAxKSkKKyAgICB7CisgICAgICBkZmEtPm5vZGVzW2R1cF9pZHhdLmNvbnN0cmFpbnQgPSBjb25zdHJhaW50OworICAgICAgZGZhLT5ub2Rlc1tkdXBfaWR4XS5jb25zdHJhaW50IHw9IGRmYS0+bm9kZXNbb3JnX2lkeF0uY29uc3RyYWludDsKKyAgICAgIGRmYS0+bm9kZXNbZHVwX2lkeF0uZHVwbGljYXRlZCA9IDE7CisKKyAgICAgIC8qIFN0b3JlIHRoZSBpbmRleCBvZiB0aGUgb3JpZ2luYWwgbm9kZS4gICovCisgICAgICBkZmEtPm9yZ19pbmRpY2VzW2R1cF9pZHhdID0gb3JnX2lkeDsKKyAgICB9CisgIHJldHVybiBkdXBfaWR4OworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAorY2FsY19pbnZlY2xvc3VyZSAocmVfZGZhX3QgKmRmYSkKK3sKKyAgaW50IHNyYywgaWR4LCByZXQ7CisgIGZvciAoaWR4ID0gMDsgaWR4IDwgZGZhLT5ub2Rlc19sZW47ICsraWR4KQorICAgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKGRmYS0+aW52ZWNsb3N1cmVzICsgaWR4KTsKKworICBmb3IgKHNyYyA9IDA7IHNyYyA8IGRmYS0+bm9kZXNfbGVuOyArK3NyYykKKyAgICB7CisgICAgICBpbnQgKmVsZW1zID0gZGZhLT5lY2xvc3VyZXNbc3JjXS5lbGVtczsKKyAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgZGZhLT5lY2xvc3VyZXNbc3JjXS5uZWxlbTsgKytpZHgpCisJeworCSAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0X2xhc3QgKGRmYS0+aW52ZWNsb3N1cmVzICsgZWxlbXNbaWR4XSwgc3JjKTsKKwkgIGlmIChCRSAocmV0ID09IC0xLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgIH0KKworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIENhbGN1bGF0ZSAiZWNsb3N1cmUiIGZvciBhbGwgdGhlIG5vZGUgaW4gREZBLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2NhbGNfZWNsb3N1cmUgKHJlX2RmYV90ICpkZmEpCit7CisgIGludCBub2RlX2lkeCwgaW5jb21wbGV0ZTsKKyNpZmRlZiBERUJVRworICBhc3NlcnQgKGRmYS0+bm9kZXNfbGVuID4gMCk7CisjZW5kaWYKKyAgaW5jb21wbGV0ZSA9IDA7CisgIC8qIEZvciBlYWNoIG5vZGVzLCBjYWxjdWxhdGUgZXBzaWxvbiBjbG9zdXJlLiAgKi8KKyAgZm9yIChub2RlX2lkeCA9IDA7IDsgKytub2RlX2lkeCkKKyAgICB7CisgICAgICByZWdfZXJyY29kZV90IGVycjsKKyAgICAgIHJlX25vZGVfc2V0IGVjbG9zdXJlX2VsZW07CisgICAgICBpZiAobm9kZV9pZHggPT0gZGZhLT5ub2Rlc19sZW4pCisJeworCSAgaWYgKCFpbmNvbXBsZXRlKQorCSAgICBicmVhazsKKwkgIGluY29tcGxldGUgPSAwOworCSAgbm9kZV9pZHggPSAwOworCX0KKworI2lmZGVmIERFQlVHCisgICAgICBhc3NlcnQgKGRmYS0+ZWNsb3N1cmVzW25vZGVfaWR4XS5uZWxlbSAhPSAtMSk7CisjZW5kaWYKKworICAgICAgLyogSWYgd2UgaGF2ZSBhbHJlYWR5IGNhbGN1bGF0ZWQsIHNraXAgaXQuICAqLworICAgICAgaWYgKGRmYS0+ZWNsb3N1cmVzW25vZGVfaWR4XS5uZWxlbSAhPSAwKQorCWNvbnRpbnVlOworICAgICAgLyogQ2FsY3VsYXRlIGVwc2lsb24gY2xvc3VyZSBvZiBgbm9kZV9pZHgnLiAgKi8KKyAgICAgIGVyciA9IGNhbGNfZWNsb3N1cmVfaXRlciAoJmVjbG9zdXJlX2VsZW0sIGRmYSwgbm9kZV9pZHgsIDEpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisKKyAgICAgIGlmIChkZmEtPmVjbG9zdXJlc1tub2RlX2lkeF0ubmVsZW0gPT0gMCkKKwl7CisJICBpbmNvbXBsZXRlID0gMTsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZlY2xvc3VyZV9lbGVtKTsKKwl9CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIENhbGN1bGF0ZSBlcHNpbG9uIGNsb3N1cmUgb2YgTk9ERS4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitjYWxjX2VjbG9zdXJlX2l0ZXIgKHJlX25vZGVfc2V0ICpuZXdfc2V0LCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZSwgaW50IHJvb3QpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgaTsKKyAgcmVfbm9kZV9zZXQgZWNsb3N1cmU7CisgIGludCByZXQ7CisgIGludCBpbmNvbXBsZXRlID0gMDsKKyAgZXJyID0gcmVfbm9kZV9zZXRfYWxsb2MgKCZlY2xvc3VyZSwgZGZhLT5lZGVzdHNbbm9kZV0ubmVsZW0gKyAxKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiBlcnI7CisKKyAgLyogVGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgY2FsY3VsYXRpbmcgdGhpcyBub2RlIG5vdy4KKyAgICAgV2UgcmVmZXJlbmNlIHRoaXMgdmFsdWUgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4gICovCisgIGRmYS0+ZWNsb3N1cmVzW25vZGVdLm5lbGVtID0gLTE7CisKKyAgLyogSWYgdGhlIGN1cnJlbnQgbm9kZSBoYXMgY29uc3RyYWludHMsIGR1cGxpY2F0ZSBhbGwgbm9kZXMKKyAgICAgc2luY2UgdGhleSBtdXN0IGluaGVyaXQgdGhlIGNvbnN0cmFpbnRzLiAgKi8KKyAgaWYgKGRmYS0+bm9kZXNbbm9kZV0uY29uc3RyYWludAorICAgICAgJiYgZGZhLT5lZGVzdHNbbm9kZV0ubmVsZW0KKyAgICAgICYmICFkZmEtPm5vZGVzW2RmYS0+ZWRlc3RzW25vZGVdLmVsZW1zWzBdXS5kdXBsaWNhdGVkKQorICAgIHsKKyAgICAgIGVyciA9IGR1cGxpY2F0ZV9ub2RlX2Nsb3N1cmUgKGRmYSwgbm9kZSwgbm9kZSwgbm9kZSwKKwkJCQkgICAgZGZhLT5ub2Rlc1tub2RlXS5jb25zdHJhaW50KTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworICAgIH0KKworICAvKiBFeHBhbmQgZWFjaCBlcHNpbG9uIGRlc3RpbmF0aW9uIG5vZGVzLiAgKi8KKyAgaWYgKElTX0VQU0lMT05fTk9ERShkZmEtPm5vZGVzW25vZGVdLnR5cGUpKQorICAgIGZvciAoaSA9IDA7IGkgPCBkZmEtPmVkZXN0c1tub2RlXS5uZWxlbTsgKytpKQorICAgICAgeworCXJlX25vZGVfc2V0IGVjbG9zdXJlX2VsZW07CisJaW50IGVkZXN0ID0gZGZhLT5lZGVzdHNbbm9kZV0uZWxlbXNbaV07CisJLyogSWYgY2FsY3VsYXRpbmcgdGhlIGVwc2lsb24gY2xvc3VyZSBvZiBgZWRlc3QnIGlzIGluIHByb2dyZXNzLAorCSAgIHJldHVybiBpbnRlcm1lZGlhdGUgcmVzdWx0LiAgKi8KKwlpZiAoZGZhLT5lY2xvc3VyZXNbZWRlc3RdLm5lbGVtID09IC0xKQorCSAgeworCSAgICBpbmNvbXBsZXRlID0gMTsKKwkgICAgY29udGludWU7CisJICB9CisJLyogSWYgd2UgaGF2ZW4ndCBjYWxjdWxhdGVkIHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgYGVkZXN0JyB5ZXQsCisJICAgY2FsY3VsYXRlIG5vdy4gT3RoZXJ3aXNlIHVzZSBjYWxjdWxhdGVkIGVwc2lsb24gY2xvc3VyZS4gICovCisJaWYgKGRmYS0+ZWNsb3N1cmVzW2VkZXN0XS5uZWxlbSA9PSAwKQorCSAgeworCSAgICBlcnIgPSBjYWxjX2VjbG9zdXJlX2l0ZXIgKCZlY2xvc3VyZV9lbGVtLCBkZmEsIGVkZXN0LCAwKTsKKwkgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICAgIHJldHVybiBlcnI7CisJICB9CisJZWxzZQorCSAgZWNsb3N1cmVfZWxlbSA9IGRmYS0+ZWNsb3N1cmVzW2VkZXN0XTsKKwkvKiBNZXJnZSB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIGBlZGVzdCcuICAqLworCWVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmZWNsb3N1cmUsICZlY2xvc3VyZV9lbGVtKTsKKwlpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICByZXR1cm4gZXJyOworCS8qIElmIHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgYGVkZXN0JyBpcyBpbmNvbXBsZXRlLAorCSAgIHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgdGhpcyBub2RlIGlzIGFsc28gaW5jb21wbGV0ZS4gICovCisJaWYgKGRmYS0+ZWNsb3N1cmVzW2VkZXN0XS5uZWxlbSA9PSAwKQorCSAgeworCSAgICBpbmNvbXBsZXRlID0gMTsKKwkgICAgcmVfbm9kZV9zZXRfZnJlZSAoJmVjbG9zdXJlX2VsZW0pOworCSAgfQorICAgICAgfQorCisgIC8qIEFuIGVwc2lsb24gY2xvc3VyZSBpbmNsdWRlcyBpdHNlbGYuICAqLworICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnQgKCZlY2xvc3VyZSwgbm9kZSk7CisgIGlmIChCRSAocmV0IDwgMCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgIGlmIChpbmNvbXBsZXRlICYmICFyb290KQorICAgIGRmYS0+ZWNsb3N1cmVzW25vZGVdLm5lbGVtID0gMDsKKyAgZWxzZQorICAgIGRmYS0+ZWNsb3N1cmVzW25vZGVdID0gZWNsb3N1cmU7CisgICpuZXdfc2V0ID0gZWNsb3N1cmU7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKwwKKy8qIEZ1bmN0aW9ucyBmb3IgdG9rZW4gd2hpY2ggYXJlIHVzZWQgaW4gdGhlIHBhcnNlci4gICovCisKKy8qIEZldGNoIGEgdG9rZW4gZnJvbSBJTlBVVC4KKyAgIFdlIG11c3Qgbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGluc2lkZSBicmFja2V0IGV4cHJlc3Npb25zLiAgKi8KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCitmZXRjaF90b2tlbiAocmVfdG9rZW5fdCAqcmVzdWx0LCByZV9zdHJpbmdfdCAqaW5wdXQsIHJlZ19zeW50YXhfdCBzeW50YXgpCit7CisgIHJlX3N0cmluZ19za2lwX2J5dGVzIChpbnB1dCwgcGVla190b2tlbiAocmVzdWx0LCBpbnB1dCwgc3ludGF4KSk7Cit9CisKKy8qIFBlZWsgYSB0b2tlbiBmcm9tIElOUFVULCBhbmQgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHRva2VuLgorICAgV2UgbXVzdCBub3QgdXNlIHRoaXMgZnVuY3Rpb24gaW5zaWRlIGJyYWNrZXQgZXhwcmVzc2lvbnMuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcGVla190b2tlbiAocmVfdG9rZW5fdCAqdG9rZW4sIHJlX3N0cmluZ190ICppbnB1dCwgcmVnX3N5bnRheF90IHN5bnRheCkKK3sKKyAgdW5zaWduZWQgY2hhciBjOworCisgIGlmIChyZV9zdHJpbmdfZW9pIChpbnB1dCkpCisgICAgeworICAgICAgdG9rZW4tPnR5cGUgPSBFTkRfT0ZfUkU7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgYyA9IHJlX3N0cmluZ19wZWVrX2J5dGUgKGlucHV0LCAwKTsKKyAgdG9rZW4tPm9wci5jID0gYzsKKworICB0b2tlbi0+d29yZF9jaGFyID0gMDsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICB0b2tlbi0+bWJfcGFydGlhbCA9IDA7CisgIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEgJiYKKyAgICAgICFyZV9zdHJpbmdfZmlyc3RfYnl0ZSAoaW5wdXQsIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkpKQorICAgIHsKKyAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworICAgICAgdG9rZW4tPm1iX3BhcnRpYWwgPSAxOworICAgICAgcmV0dXJuIDE7CisgICAgfQorI2VuZGlmCisgIGlmIChjID09ICdcXCcpCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciBjMjsKKyAgICAgIGlmIChyZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpICsgMSA+PSByZV9zdHJpbmdfbGVuZ3RoIChpbnB1dCkpCisJeworCSAgdG9rZW4tPnR5cGUgPSBCQUNLX1NMQVNIOworCSAgcmV0dXJuIDE7CisJfQorCisgICAgICBjMiA9IHJlX3N0cmluZ19wZWVrX2J5dGVfY2FzZSAoaW5wdXQsIDEpOworICAgICAgdG9rZW4tPm9wci5jID0gYzI7CisgICAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSkKKwl7CisJICB3aW50X3Qgd2MgPSByZV9zdHJpbmdfd2NoYXJfYXQgKGlucHV0LAorCQkJCQkgIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkgKyAxKTsKKwkgIHRva2VuLT53b3JkX2NoYXIgPSBJU19XSURFX1dPUkRfQ0hBUiAod2MpICE9IDA7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJdG9rZW4tPndvcmRfY2hhciA9IElTX1dPUkRfQ0hBUiAoYzIpICE9IDA7CisKKyAgICAgIHN3aXRjaCAoYzIpCisJeworCWNhc2UgJ3wnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpICYmICEoc3ludGF4ICYgUkVfTk9fQktfVkJBUikpCisJICAgIHRva2VuLT50eXBlID0gT1BfQUxUOworCSAgYnJlYWs7CisJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOgorCWNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fQktfUkVGUykpCisJICAgIHsKKwkgICAgICB0b2tlbi0+dHlwZSA9IE9QX0JBQ0tfUkVGOworCSAgICAgIHRva2VuLT5vcHIuaWR4ID0gYzIgLSAnMSc7CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgJzwnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHsKKwkgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gV09SRF9GSVJTVDsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnPic6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBXT1JEX0xBU1Q7CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgJ2InOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHsKKwkgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gV09SRF9ERUxJTTsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnQic6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBOT1RfV09SRF9ERUxJTTsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAndyc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9XT1JEOworCSAgYnJlYWs7CisJY2FzZSAnVyc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9OT1RXT1JEOworCSAgYnJlYWs7CisJY2FzZSAncyc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9TUEFDRTsKKwkgIGJyZWFrOworCWNhc2UgJ1MnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHRva2VuLT50eXBlID0gT1BfTk9UU1BBQ0U7CisJICBicmVhazsKKwljYXNlICdgJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5cGUgPSBBTkNIT1I7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IEJVRl9GSVJTVDsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnXCcnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHsKKwkgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gQlVGX0xBU1Q7CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgJygnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9PUEVOX1NVQkVYUDsKKwkgIGJyZWFrOworCWNhc2UgJyknOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9DTE9TRV9TVUJFWFA7CisJICBicmVhazsKKwljYXNlICcrJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX0xJTUlURURfT1BTKSAmJiAoc3ludGF4ICYgUkVfQktfUExVU19RTSkpCisJICAgIHRva2VuLT50eXBlID0gT1BfRFVQX1BMVVM7CisJICBicmVhazsKKwljYXNlICc/JzoKKwkgIGlmICghKHN5bnRheCAmIFJFX0xJTUlURURfT1BTKSAmJiAoc3ludGF4ICYgUkVfQktfUExVU19RTSkpCisJICAgIHRva2VuLT50eXBlID0gT1BfRFVQX1FVRVNUSU9OOworCSAgYnJlYWs7CisJY2FzZSAneyc6CisJICBpZiAoKHN5bnRheCAmIFJFX0lOVEVSVkFMUykgJiYgKCEoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKSkpCisJICAgIHRva2VuLT50eXBlID0gT1BfT1BFTl9EVVBfTlVNOworCSAgYnJlYWs7CisJY2FzZSAnfSc6CisJICBpZiAoKHN5bnRheCAmIFJFX0lOVEVSVkFMUykgJiYgKCEoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKSkpCisJICAgIHRva2VuLT50eXBlID0gT1BfQ0xPU0VfRFVQX05VTTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBicmVhazsKKwl9CisgICAgICByZXR1cm4gMjsKKyAgICB9CisKKyAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSkKKyAgICB7CisgICAgICB3aW50X3Qgd2MgPSByZV9zdHJpbmdfd2NoYXJfYXQgKGlucHV0LCByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpKTsKKyAgICAgIHRva2VuLT53b3JkX2NoYXIgPSBJU19XSURFX1dPUkRfQ0hBUiAod2MpICE9IDA7CisgICAgfQorICBlbHNlCisjZW5kaWYKKyAgICB0b2tlbi0+d29yZF9jaGFyID0gSVNfV09SRF9DSEFSICh0b2tlbi0+b3ByLmMpOworCisgIHN3aXRjaCAoYykKKyAgICB7CisgICAgY2FzZSAnXG4nOgorICAgICAgaWYgKHN5bnRheCAmIFJFX05FV0xJTkVfQUxUKQorCXRva2VuLT50eXBlID0gT1BfQUxUOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnfCc6CisgICAgICBpZiAoIShzeW50YXggJiBSRV9MSU1JVEVEX09QUykgJiYgKHN5bnRheCAmIFJFX05PX0JLX1ZCQVIpKQorCXRva2VuLT50eXBlID0gT1BfQUxUOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnKic6CisgICAgICB0b2tlbi0+dHlwZSA9IE9QX0RVUF9BU1RFUklTSzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJysnOgorICAgICAgaWYgKCEoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpICYmICEoc3ludGF4ICYgUkVfQktfUExVU19RTSkpCisJdG9rZW4tPnR5cGUgPSBPUF9EVVBfUExVUzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJz8nOgorICAgICAgaWYgKCEoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpICYmICEoc3ludGF4ICYgUkVfQktfUExVU19RTSkpCisJdG9rZW4tPnR5cGUgPSBPUF9EVVBfUVVFU1RJT047CisgICAgICBicmVhazsKKyAgICBjYXNlICd7JzoKKyAgICAgIGlmICgoc3ludGF4ICYgUkVfSU5URVJWQUxTKSAmJiAoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKSkKKwl0b2tlbi0+dHlwZSA9IE9QX09QRU5fRFVQX05VTTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ30nOgorICAgICAgaWYgKChzeW50YXggJiBSRV9JTlRFUlZBTFMpICYmIChzeW50YXggJiBSRV9OT19CS19CUkFDRVMpKQorCXRva2VuLT50eXBlID0gT1BfQ0xPU0VfRFVQX05VTTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJygnOgorICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUykKKwl0b2tlbi0+dHlwZSA9IE9QX09QRU5fU1VCRVhQOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnKSc6CisgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKQorCXRva2VuLT50eXBlID0gT1BfQ0xPU0VfU1VCRVhQOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnWyc6CisgICAgICB0b2tlbi0+dHlwZSA9IE9QX09QRU5fQlJBQ0tFVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJy4nOgorICAgICAgdG9rZW4tPnR5cGUgPSBPUF9QRVJJT0Q7CisgICAgICBicmVhazsKKyAgICBjYXNlICdeJzoKKyAgICAgIGlmICghKHN5bnRheCAmIChSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMgfCBSRV9DQVJFVF9BTkNIT1JTX0hFUkUpKSAmJgorCSAgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSAhPSAwKQorCXsKKwkgIGNoYXIgcHJldiA9IHJlX3N0cmluZ19wZWVrX2J5dGUgKGlucHV0LCAtMSk7CisJICBpZiAoIShzeW50YXggJiBSRV9ORVdMSU5FX0FMVCkgfHwgcHJldiAhPSAnXG4nKQorCSAgICBicmVhazsKKwl9CisgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKyAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBMSU5FX0ZJUlNUOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnJCc6CisgICAgICBpZiAoIShzeW50YXggJiBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMpICYmCisJICByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpICsgMSAhPSByZV9zdHJpbmdfbGVuZ3RoIChpbnB1dCkpCisJeworCSAgcmVfdG9rZW5fdCBuZXh0OworCSAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKGlucHV0LCAxKTsKKwkgIHBlZWtfdG9rZW4gKCZuZXh0LCBpbnB1dCwgc3ludGF4KTsKKwkgIHJlX3N0cmluZ19za2lwX2J5dGVzIChpbnB1dCwgLTEpOworCSAgaWYgKG5leHQudHlwZSAhPSBPUF9BTFQgJiYgbmV4dC50eXBlICE9IE9QX0NMT1NFX1NVQkVYUCkKKwkgICAgYnJlYWs7CisJfQorICAgICAgdG9rZW4tPnR5cGUgPSBBTkNIT1I7CisgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gTElORV9MQVNUOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIDE7Cit9CisKKy8qIFBlZWsgYSB0b2tlbiBmcm9tIElOUFVULCBhbmQgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHRva2VuLgorICAgV2UgbXVzdCBub3QgdXNlIHRoaXMgZnVuY3Rpb24gb3V0IG9mIGJyYWNrZXQgZXhwcmVzc2lvbnMuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcGVla190b2tlbl9icmFja2V0IChyZV90b2tlbl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LCByZWdfc3ludGF4X3Qgc3ludGF4KQoreworICB1bnNpZ25lZCBjaGFyIGM7CisgIGlmIChyZV9zdHJpbmdfZW9pIChpbnB1dCkpCisgICAgeworICAgICAgdG9rZW4tPnR5cGUgPSBFTkRfT0ZfUkU7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGMgPSByZV9zdHJpbmdfcGVla19ieXRlIChpbnB1dCwgMCk7CisgIHRva2VuLT5vcHIuYyA9IGM7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxICYmCisgICAgICAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKGlucHV0LCByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpKSkKKyAgICB7CisgICAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisgIGlmIChjID09ICdcXCcgJiYgKHN5bnRheCAmIFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMpCisgICAgICAmJiByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpICsgMSA8IHJlX3N0cmluZ19sZW5ndGggKGlucHV0KSkKKyAgICB7CisgICAgICAvKiBJbiB0aGlzIGNhc2UsICdcJyBlc2NhcGUgYSBjaGFyYWN0ZXIuICAqLworICAgICAgdW5zaWduZWQgY2hhciBjMjsKKyAgICAgIHJlX3N0cmluZ19za2lwX2J5dGVzIChpbnB1dCwgMSk7CisgICAgICBjMiA9IHJlX3N0cmluZ19wZWVrX2J5dGUgKGlucHV0LCAwKTsKKyAgICAgIHRva2VuLT5vcHIuYyA9IGMyOworICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIGlmIChjID09ICdbJykgLyogJ1snIGlzIGEgc3BlY2lhbCBjaGFyIGluIGEgYnJhY2tldCBleHBzLiAgKi8KKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIGMyOworICAgICAgaW50IHRva2VuX2xlbjsKKyAgICAgIGlmIChyZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpICsgMSA8IHJlX3N0cmluZ19sZW5ndGggKGlucHV0KSkKKwljMiA9IHJlX3N0cmluZ19wZWVrX2J5dGUgKGlucHV0LCAxKTsKKyAgICAgIGVsc2UKKwljMiA9IDA7CisgICAgICB0b2tlbi0+b3ByLmMgPSBjMjsKKyAgICAgIHRva2VuX2xlbiA9IDI7CisgICAgICBzd2l0Y2ggKGMyKQorCXsKKwljYXNlICcuJzoKKwkgIHRva2VuLT50eXBlID0gT1BfT1BFTl9DT0xMX0VMRU07CisJICBicmVhazsKKwljYXNlICc9JzoKKwkgIHRva2VuLT50eXBlID0gT1BfT1BFTl9FUVVJVl9DTEFTUzsKKwkgIGJyZWFrOworCWNhc2UgJzonOgorCSAgaWYgKHN5bnRheCAmIFJFX0NIQVJfQ0xBU1NFUykKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gT1BfT1BFTl9DSEFSX0NMQVNTOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAvKiBlbHNlIGZhbGwgdGhyb3VnaC4gICovCisJZGVmYXVsdDoKKwkgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworCSAgdG9rZW4tPm9wci5jID0gYzsKKwkgIHRva2VuX2xlbiA9IDE7CisJICBicmVhazsKKwl9CisgICAgICByZXR1cm4gdG9rZW5fbGVuOworICAgIH0KKyAgc3dpdGNoIChjKQorICAgIHsKKyAgICBjYXNlICctJzoKKyAgICAgIHRva2VuLT50eXBlID0gT1BfQ0hBUlNFVF9SQU5HRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ10nOgorICAgICAgdG9rZW4tPnR5cGUgPSBPUF9DTE9TRV9CUkFDS0VUOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnXic6CisgICAgICB0b2tlbi0+dHlwZSA9IE9QX05PTl9NQVRDSF9MSVNUOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworICAgIH0KKyAgcmV0dXJuIDE7Cit9CisMCisvKiBGdW5jdGlvbnMgZm9yIHBhcnNlci4gICovCisKKy8qIEVudHJ5IHBvaW50IG9mIHRoZSBwYXJzZXIuCisgICBQYXJzZSB0aGUgcmVndWxhciBleHByZXNzaW9uIFJFR0VYUCBhbmQgcmV0dXJuIHRoZSBzdHJ1Y3R1cmUgdHJlZS4KKyAgIElmIGFuIGVycm9yIGhhcyBvY2N1cnJlZCwgRVJSIGlzIHNldCBieSBlcnJvciBjb2RlLCBhbmQgcmV0dXJuIE5VTEwuCisgICBUaGlzIGZ1bmN0aW9uIGJ1aWxkIHRoZSBmb2xsb3dpbmcgdHJlZSwgZnJvbSByZWd1bGFyIGV4cHJlc3Npb24gPHJlZ19leHA+OgorCSAgIENBVAorCSAgIC8gXAorCSAgLyAgIFwKKyAgIDxyZWdfZXhwPiAgRU9SCisKKyAgIENBVCBtZWFucyBjb25jYXRlbmF0aW9uLgorICAgRU9SIG1lYW5zIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24uICAqLworCitzdGF0aWMgYmluX3RyZWVfdCAqCitwYXJzZSAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVnX3N5bnRheF90IHN5bnRheCwKKyAgICAgICByZWdfZXJyY29kZV90ICplcnIpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBiaW5fdHJlZV90ICp0cmVlLCAqZW9yLCAqcm9vdDsKKyAgcmVfdG9rZW5fdCBjdXJyZW50X3Rva2VuOworICBkZmEtPnN5bnRheCA9IHN5bnRheDsKKyAgZmV0Y2hfdG9rZW4gKCZjdXJyZW50X3Rva2VuLCByZWdleHAsIHN5bnRheCB8IFJFX0NBUkVUX0FOQ0hPUlNfSEVSRSk7CisgIHRyZWUgPSBwYXJzZV9yZWdfZXhwIChyZWdleHAsIHByZWcsICZjdXJyZW50X3Rva2VuLCBzeW50YXgsIDAsIGVycik7CisgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorICAgIHJldHVybiBOVUxMOworICBlb3IgPSBjcmVhdGVfdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCBFTkRfT0ZfUkUpOworICBpZiAodHJlZSAhPSBOVUxMKQorICAgIHJvb3QgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBlb3IsIENPTkNBVCk7CisgIGVsc2UKKyAgICByb290ID0gZW9yOworICBpZiAoQkUgKGVvciA9PSBOVUxMIHx8IHJvb3QgPT0gTlVMTCwgMCkpCisgICAgeworICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIHJldHVybiByb290OworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGJ1aWxkIHRoZSBmb2xsb3dpbmcgdHJlZSwgZnJvbSByZWd1bGFyIGV4cHJlc3Npb24KKyAgIDxicmFuY2gxPnw8YnJhbmNoMj46CisJICAgQUxUCisJICAgLyBcCisJICAvICAgXAorICAgPGJyYW5jaDE+IDxicmFuY2gyPgorCisgICBBTFQgbWVhbnMgYWx0ZXJuYXRpdmUsIHdoaWNoIHJlcHJlc2VudHMgdGhlIG9wZXJhdG9yIGB8Jy4gICovCisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK3BhcnNlX3JlZ19leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsIHJlX3Rva2VuX3QgKnRva2VuLAorCSAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LCBpbnQgbmVzdCwgcmVnX2VycmNvZGVfdCAqZXJyKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgYmluX3RyZWVfdCAqdHJlZSwgKmJyYW5jaCA9IE5VTEw7CisgIHRyZWUgPSBwYXJzZV9icmFuY2ggKHJlZ2V4cCwgcHJlZywgdG9rZW4sIHN5bnRheCwgbmVzdCwgZXJyKTsKKyAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SICYmIHRyZWUgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgd2hpbGUgKHRva2VuLT50eXBlID09IE9QX0FMVCkKKyAgICB7CisgICAgICBmZXRjaF90b2tlbiAodG9rZW4sIHJlZ2V4cCwgc3ludGF4IHwgUkVfQ0FSRVRfQU5DSE9SU19IRVJFKTsKKyAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBPUF9BTFQgJiYgdG9rZW4tPnR5cGUgIT0gRU5EX09GX1JFCisJICAmJiAobmVzdCA9PSAwIHx8IHRva2VuLT50eXBlICE9IE9QX0NMT1NFX1NVQkVYUCkpCisJeworCSAgYnJhbmNoID0gcGFyc2VfYnJhbmNoIChyZWdleHAsIHByZWcsIHRva2VuLCBzeW50YXgsIG5lc3QsIGVycik7CisJICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgYnJhbmNoID09IE5VTEwsIDApKQorCSAgICByZXR1cm4gTlVMTDsKKwl9CisgICAgICBlbHNlCisJYnJhbmNoID0gTlVMTDsKKyAgICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBicmFuY2gsIE9QX0FMVCk7CisgICAgICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisJeworCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgfQorICByZXR1cm4gdHJlZTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBidWlsZCB0aGUgZm9sbG93aW5nIHRyZWUsIGZyb20gcmVndWxhciBleHByZXNzaW9uCisgICA8ZXhwMT48ZXhwMj46CisJQ0FUCisJLyBcCisgICAgICAgLyAgIFwKKyAgIDxleHAxPiA8ZXhwMj4KKworICAgQ0FUIG1lYW5zIGNvbmNhdGVuYXRpb24uICAqLworCitzdGF0aWMgYmluX3RyZWVfdCAqCitwYXJzZV9icmFuY2ggKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsIHJlX3Rva2VuX3QgKnRva2VuLAorCSAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsIGludCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpCit7CisgIGJpbl90cmVlX3QgKnRyZWUsICpleHA7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICB0cmVlID0gcGFyc2VfZXhwcmVzc2lvbiAocmVnZXhwLCBwcmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0LCBlcnIpOworICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gTlVMTDsKKworICB3aGlsZSAodG9rZW4tPnR5cGUgIT0gT1BfQUxUICYmIHRva2VuLT50eXBlICE9IEVORF9PRl9SRQorCSAmJiAobmVzdCA9PSAwIHx8IHRva2VuLT50eXBlICE9IE9QX0NMT1NFX1NVQkVYUCkpCisgICAgeworICAgICAgZXhwID0gcGFyc2VfZXhwcmVzc2lvbiAocmVnZXhwLCBwcmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0LCBlcnIpOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SICYmIGV4cCA9PSBOVUxMLCAwKSkKKwl7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICBpZiAodHJlZSAhPSBOVUxMICYmIGV4cCAhPSBOVUxMKQorCXsKKwkgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBleHAsIENPTkNBVCk7CisJICBpZiAodHJlZSA9PSBOVUxMKQorCSAgICB7CisJICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmICh0cmVlID09IE5VTEwpCisJdHJlZSA9IGV4cDsKKyAgICAgIC8qIE90aGVyd2lzZSBleHAgPT0gTlVMTCwgd2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgbmV3IHRyZWUuICAqLworICAgIH0KKyAgcmV0dXJuIHRyZWU7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gYnVpbGQgdGhlIGZvbGxvd2luZyB0cmVlLCBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lvbiBhKjoKKwkgKgorCSB8CisJIGEKKyovCisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK3BhcnNlX2V4cHJlc3Npb24gKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsIHJlX3Rva2VuX3QgKnRva2VuLAorCQkgIHJlZ19zeW50YXhfdCBzeW50YXgsIGludCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBiaW5fdHJlZV90ICp0cmVlOworICBzd2l0Y2ggKHRva2VuLT50eXBlKQorICAgIHsKKyAgICBjYXNlIENIQVJBQ1RFUjoKKyAgICAgIHRyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisgICAgICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisJeworCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJICByZXR1cm4gTlVMTDsKKwl9CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorCXsKKwkgIHdoaWxlICghcmVfc3RyaW5nX2VvaSAocmVnZXhwKQorCQkgJiYgIXJlX3N0cmluZ19maXJzdF9ieXRlIChyZWdleHAsIHJlX3N0cmluZ19jdXJfaWR4IChyZWdleHApKSkKKwkgICAgeworCSAgICAgIGJpbl90cmVlX3QgKm1iY19yZW1haW47CisJICAgICAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisJICAgICAgbWJjX3JlbWFpbiA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKwkgICAgICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZSwgbWJjX3JlbWFpbiwgQ09OQ0FUKTsKKwkgICAgICBpZiAoQkUgKG1iY19yZW1haW4gPT0gTlVMTCB8fCB0cmVlID09IE5VTEwsIDApKQorCQl7CisJCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJCSAgcmV0dXJuIE5VTEw7CisJCX0KKwkgICAgfQorCX0KKyNlbmRpZgorICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9PUEVOX1NVQkVYUDoKKyAgICAgIHRyZWUgPSBwYXJzZV9zdWJfZXhwIChyZWdleHAsIHByZWcsIHRva2VuLCBzeW50YXgsIG5lc3QgKyAxLCBlcnIpOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SICYmIHRyZWUgPT0gTlVMTCwgMCkpCisJcmV0dXJuIE5VTEw7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QX09QRU5fQlJBQ0tFVDoKKyAgICAgIHRyZWUgPSBwYXJzZV9icmFja2V0X2V4cCAocmVnZXhwLCBkZmEsIHRva2VuLCBzeW50YXgsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfQkFDS19SRUY6CisgICAgICBpZiAoIUJFIChkZmEtPmNvbXBsZXRlZF9ia3JlZl9tYXAgJiAoMSA8PCB0b2tlbi0+b3ByLmlkeCksIDEpKQorCXsKKwkgICplcnIgPSBSRUdfRVNVQlJFRzsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIGRmYS0+dXNlZF9ia3JlZl9tYXAgfD0gMSA8PCB0b2tlbi0+b3ByLmlkeDsKKyAgICAgIHRyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisgICAgICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisJeworCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICArK2RmYS0+bmJhY2tyZWY7CisgICAgICBkZmEtPmhhc19tYl9ub2RlID0gMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfT1BFTl9EVVBfTlVNOgorICAgICAgaWYgKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5WQUxJRF9EVVApCisJeworCSAgKmVyciA9IFJFR19CQURSUFQ7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworICAgIGNhc2UgT1BfRFVQX0FTVEVSSVNLOgorICAgIGNhc2UgT1BfRFVQX1BMVVM6CisgICAgY2FzZSBPUF9EVVBfUVVFU1RJT046CisgICAgICBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTlZBTElEX09QUykKKwl7CisJICAqZXJyID0gUkVHX0JBRFJQVDsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5ERVBfT1BTKQorCXsKKwkgIGZldGNoX3Rva2VuICh0b2tlbiwgcmVnZXhwLCBzeW50YXgpOworCSAgcmV0dXJuIHBhcnNlX2V4cHJlc3Npb24gKHJlZ2V4cCwgcHJlZywgdG9rZW4sIHN5bnRheCwgbmVzdCwgZXJyKTsKKwl9CisgICAgICAvKiBlbHNlIGZhbGwgdGhyb3VnaCAgKi8KKyAgICBjYXNlIE9QX0NMT1NFX1NVQkVYUDoKKyAgICAgIGlmICgodG9rZW4tPnR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQKSAmJgorCSAgIShzeW50YXggJiBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEKSkKKwl7CisJICAqZXJyID0gUkVHX0VSUEFSRU47CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICAvKiBlbHNlIGZhbGwgdGhyb3VnaCAgKi8KKyAgICBjYXNlIE9QX0NMT1NFX0RVUF9OVU06CisgICAgICAvKiBXZSB0cmVhdCBpdCBhcyBhIG5vcm1hbCBjaGFyYWN0ZXIuICAqLworCisgICAgICAvKiBUaGVuIHdlIGNhbiB0aGVzZSBjaGFyYWN0ZXJzIGFzIG5vcm1hbCBjaGFyYWN0ZXJzLiAgKi8KKyAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworICAgICAgLyogbWJfcGFydGlhbCBhbmQgd29yZF9jaGFyIGJpdHMgc2hvdWxkIGJlIGluaXRpYWxpemVkIGFscmVhZHkKKwkgYnkgcGVla190b2tlbi4gICovCisgICAgICB0cmVlID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgdG9rZW4pOworICAgICAgaWYgKEJFICh0cmVlID09IE5VTEwsIDApKQorCXsKKwkgICplcnIgPSBSRUdfRVNQQUNFOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBBTkNIT1I6CisgICAgICBpZiAoKHRva2VuLT5vcHIuY3R4X3R5cGUKKwkgICAmIChXT1JEX0RFTElNIHwgTk9UX1dPUkRfREVMSU0gfCBXT1JEX0ZJUlNUIHwgV09SRF9MQVNUKSkKKwkgICYmIGRmYS0+d29yZF9vcHNfdXNlZCA9PSAwKQorCWluaXRfd29yZF9jaGFyIChkZmEpOworICAgICAgaWYgKHRva2VuLT5vcHIuY3R4X3R5cGUgPT0gV09SRF9ERUxJTQorCSAgfHwgdG9rZW4tPm9wci5jdHhfdHlwZSA9PSBOT1RfV09SRF9ERUxJTSkKKwl7CisJICBiaW5fdHJlZV90ICp0cmVlX2ZpcnN0LCAqdHJlZV9sYXN0OworCSAgaWYgKHRva2VuLT5vcHIuY3R4X3R5cGUgPT0gV09SRF9ERUxJTSkKKwkgICAgeworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBXT1JEX0ZJUlNUOworCSAgICAgIHRyZWVfZmlyc3QgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IFdPUkRfTEFTVDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IElOU0lERV9XT1JEOworCSAgICAgIHRyZWVfZmlyc3QgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IElOU0lERV9OT1RXT1JEOworCSAgICB9CisJICB0cmVlX2xhc3QgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisJICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZV9maXJzdCwgdHJlZV9sYXN0LCBPUF9BTFQpOworCSAgaWYgKEJFICh0cmVlX2ZpcnN0ID09IE5VTEwgfHwgdHJlZV9sYXN0ID09IE5VTEwgfHwgdHJlZSA9PSBOVUxMLCAwKSkKKwkgICAgeworCSAgICAgICplcnIgPSBSRUdfRVNQQUNFOworCSAgICAgIHJldHVybiBOVUxMOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIHRyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisJICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisJICAgIHsKKwkgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgICAgICByZXR1cm4gTlVMTDsKKwkgICAgfQorCX0KKyAgICAgIC8qIFdlIG11c3QgcmV0dXJuIGhlcmUsIHNpbmNlIEFOQ0hPUnMgY2FuJ3QgYmUgZm9sbG93ZWQKKwkgYnkgcmVwZXRpdGlvbiBvcGVyYXRvcnMuCisJIGVnLiBSRSJeKiIgaXMgaW52YWxpZCBvciAiPEFOQ0hPUiheKT48Q0hBUigqKT4iLAorCSAgICAgaXQgbXVzdCBub3QgYmUgIjxBTkNIT1IoXik+PFJFUEVBVCgqKT4iLiAgKi8KKyAgICAgIGZldGNoX3Rva2VuICh0b2tlbiwgcmVnZXhwLCBzeW50YXgpOworICAgICAgcmV0dXJuIHRyZWU7CisgICAgY2FzZSBPUF9QRVJJT0Q6CisgICAgICB0cmVlID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgdG9rZW4pOworICAgICAgaWYgKEJFICh0cmVlID09IE5VTEwsIDApKQorCXsKKwkgICplcnIgPSBSRUdfRVNQQUNFOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJZGZhLT5oYXNfbWJfbm9kZSA9IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QX1dPUkQ6CisgICAgY2FzZSBPUF9OT1RXT1JEOgorICAgICAgdHJlZSA9IGJ1aWxkX2NoYXJjbGFzc19vcCAoZGZhLCByZWdleHAtPnRyYW5zLAorCQkJCSAiYWxudW0iLAorCQkJCSAiXyIsCisJCQkJIHRva2VuLT50eXBlID09IE9QX05PVFdPUkQsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfU1BBQ0U6CisgICAgY2FzZSBPUF9OT1RTUEFDRToKKyAgICAgIHRyZWUgPSBidWlsZF9jaGFyY2xhc3Nfb3AgKGRmYSwgcmVnZXhwLT50cmFucywKKwkJCQkgInNwYWNlIiwKKwkJCQkgIiIsCisJCQkJIHRva2VuLT50eXBlID09IE9QX05PVFNQQUNFLCBlcnIpOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SICYmIHRyZWUgPT0gTlVMTCwgMCkpCisJcmV0dXJuIE5VTEw7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QX0FMVDoKKyAgICBjYXNlIEVORF9PRl9SRToKKyAgICAgIHJldHVybiBOVUxMOworICAgIGNhc2UgQkFDS19TTEFTSDoKKyAgICAgICplcnIgPSBSRUdfRUVTQ0FQRTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIGRlZmF1bHQ6CisgICAgICAvKiBNdXN0IG5vdCBoYXBwZW4/ICAqLworI2lmZGVmIERFQlVHCisgICAgICBhc3NlcnQgKDApOworI2VuZGlmCisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGZldGNoX3Rva2VuICh0b2tlbiwgcmVnZXhwLCBzeW50YXgpOworCisgIHdoaWxlICh0b2tlbi0+dHlwZSA9PSBPUF9EVVBfQVNURVJJU0sgfHwgdG9rZW4tPnR5cGUgPT0gT1BfRFVQX1BMVVMKKwkgfHwgdG9rZW4tPnR5cGUgPT0gT1BfRFVQX1FVRVNUSU9OIHx8IHRva2VuLT50eXBlID09IE9QX09QRU5fRFVQX05VTSkKKyAgICB7CisgICAgICB0cmVlID0gcGFyc2VfZHVwX29wICh0cmVlLCByZWdleHAsIGRmYSwgdG9rZW4sIHN5bnRheCwgZXJyKTsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorCXJldHVybiBOVUxMOworICAgICAgLyogSW4gQlJFIGNvbnNlY3V0aXZlIGR1cGxpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQuICAqLworICAgICAgaWYgKChzeW50YXggJiBSRV9DT05URVhUX0lOVkFMSURfRFVQKQorCSAgJiYgKHRva2VuLT50eXBlID09IE9QX0RVUF9BU1RFUklTSworCSAgICAgIHx8IHRva2VuLT50eXBlID09IE9QX09QRU5fRFVQX05VTSkpCisJeworCSAgKmVyciA9IFJFR19CQURSUFQ7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgfQorCisgIHJldHVybiB0cmVlOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGJ1aWxkIHRoZSBmb2xsb3dpbmcgdHJlZSwgZnJvbSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICg8cmVnX2V4cD4pOgorCSBTVUJFWFAKKwkgICAgfAorCTxyZWdfZXhwPgorKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2Vfc3ViX2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisJICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsIGludCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBiaW5fdHJlZV90ICp0cmVlOworICBzaXplX3QgY3VyX25zdWI7CisgIGN1cl9uc3ViID0gcHJlZy0+cmVfbnN1YisrOworCisgIGZldGNoX3Rva2VuICh0b2tlbiwgcmVnZXhwLCBzeW50YXggfCBSRV9DQVJFVF9BTkNIT1JTX0hFUkUpOworCisgIC8qIFRoZSBzdWJleHByZXNzaW9uIG1heSBiZSBhIG51bGwgc3RyaW5nLiAgKi8KKyAgaWYgKHRva2VuLT50eXBlID09IE9QX0NMT1NFX1NVQkVYUCkKKyAgICB0cmVlID0gTlVMTDsKKyAgZWxzZQorICAgIHsKKyAgICAgIHRyZWUgPSBwYXJzZV9yZWdfZXhwIChyZWdleHAsIHByZWcsIHRva2VuLCBzeW50YXgsIG5lc3QsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIgPT0gUkVHX05PRVJST1IgJiYgdG9rZW4tPnR5cGUgIT0gT1BfQ0xPU0VfU1VCRVhQLCAwKSkKKwkqZXJyID0gUkVHX0VQQVJFTjsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgIGlmIChjdXJfbnN1YiA8PSAnOScgLSAnMScpCisgICAgZGZhLT5jb21wbGV0ZWRfYmtyZWZfbWFwIHw9IDEgPDwgY3VyX25zdWI7CisKKyAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIE5VTEwsIFNVQkVYUCk7CisgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKyAgICB7CisgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgdHJlZS0+dG9rZW4ub3ByLmlkeCA9IGN1cl9uc3ViOworICByZXR1cm4gdHJlZTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBwYXJzZSByZXBldGl0aW9uIG9wZXJhdG9ycyBsaWtlICIqIiwgIisiLCAiezEsM30iIGV0Yy4gICovCisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK3BhcnNlX2R1cF9vcCAoYmluX3RyZWVfdCAqZWxlbSwgcmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwKKwkgICAgICByZV90b2tlbl90ICp0b2tlbiwgcmVnX3N5bnRheF90IHN5bnRheCwgcmVnX2VycmNvZGVfdCAqZXJyKQoreworICBiaW5fdHJlZV90ICp0cmVlID0gTlVMTCwgKm9sZF90cmVlID0gTlVMTDsKKyAgaW50IGksIHN0YXJ0LCBlbmQsIHN0YXJ0X2lkeCA9IHJlX3N0cmluZ19jdXJfaWR4IChyZWdleHApOworI2lmbmRlZiBSRV9UT0tFTl9JTklUX0JVRworICByZV90b2tlbl90IHN0YXJ0X3Rva2VuID0gKnRva2VuOworI2Vsc2UKKyAgcmVfdG9rZW5fdCBzdGFydF90b2tlbjsKKworICBtZW1jcHkgKCh2b2lkICopICZzdGFydF90b2tlbiwgKHZvaWQgKikgdG9rZW4sIHNpemVvZiBzdGFydF90b2tlbik7CisjZW5kaWYKKworICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9EVVBfTlVNKQorICAgIHsKKyAgICAgIGVuZCA9IDA7CisgICAgICBzdGFydCA9IGZldGNoX251bWJlciAocmVnZXhwLCB0b2tlbiwgc3ludGF4KTsKKyAgICAgIGlmIChzdGFydCA9PSAtMSkKKwl7CisJICBpZiAodG9rZW4tPnR5cGUgPT0gQ0hBUkFDVEVSICYmIHRva2VuLT5vcHIuYyA9PSAnLCcpCisJICAgIHN0YXJ0ID0gMDsgLyogV2UgdHJlYXQgInssbX0iIGFzICJ7MCxtfSIuICAqLworCSAgZWxzZQorCSAgICB7CisJICAgICAgKmVyciA9IFJFR19CQURCUjsgLyogPHJlPnt9IGlzIGludmFsaWQuICAqLworCSAgICAgIHJldHVybiBOVUxMOworCSAgICB9CisJfQorICAgICAgaWYgKEJFIChzdGFydCAhPSAtMiwgMSkpCisJeworCSAgLyogV2UgdHJlYXQgIntufSIgYXMgIntuLG59Ii4gICovCisJICBlbmQgPSAoKHRva2VuLT50eXBlID09IE9QX0NMT1NFX0RVUF9OVU0pID8gc3RhcnQKKwkJIDogKCh0b2tlbi0+dHlwZSA9PSBDSEFSQUNURVIgJiYgdG9rZW4tPm9wci5jID09ICcsJykKKwkJICAgID8gZmV0Y2hfbnVtYmVyIChyZWdleHAsIHRva2VuLCBzeW50YXgpIDogLTIpKTsKKwl9CisgICAgICBpZiAoQkUgKHN0YXJ0ID09IC0yIHx8IGVuZCA9PSAtMiwgMCkpCisJeworCSAgLyogSW52YWxpZCBzZXF1ZW5jZS4gICovCisJICBpZiAoQkUgKCEoc3ludGF4ICYgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQpLCAwKSkKKwkgICAgeworCSAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBFTkRfT0ZfUkUpCisJCSplcnIgPSBSRUdfRUJSQUNFOworCSAgICAgIGVsc2UKKwkJKmVyciA9IFJFR19CQURCUjsKKworCSAgICAgIHJldHVybiBOVUxMOworCSAgICB9CisKKwkgIC8qIElmIHRoZSBzeW50YXggYml0IGlzIHNldCwgcm9sbGJhY2suICAqLworCSAgcmVfc3RyaW5nX3NldF9pbmRleCAocmVnZXhwLCBzdGFydF9pZHgpOworCSAgKnRva2VuID0gc3RhcnRfdG9rZW47CisJICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKwkgIC8qIG1iX3BhcnRpYWwgYW5kIHdvcmRfY2hhciBiaXRzIHNob3VsZCBiZSBhbHJlYWR5IGluaXRpYWxpemVkIGJ5CisJICAgICBwZWVrX3Rva2VuLiAgKi8KKwkgIHJldHVybiBlbGVtOworCX0KKworICAgICAgaWYgKEJFICgoZW5kICE9IC0xICYmIHN0YXJ0ID4gZW5kKSB8fCB0b2tlbi0+dHlwZSAhPSBPUF9DTE9TRV9EVVBfTlVNLCAwKSkKKwl7CisJICAvKiBGaXJzdCBudW1iZXIgZ3JlYXRlciB0aGFuIHNlY29uZC4gICovCisJICAqZXJyID0gUkVHX0JBREJSOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHN0YXJ0ID0gKHRva2VuLT50eXBlID09IE9QX0RVUF9QTFVTKSA/IDEgOiAwOworICAgICAgZW5kID0gKHRva2VuLT50eXBlID09IE9QX0RVUF9RVUVTVElPTikgPyAxIDogLTE7CisgICAgfQorCisgIGZldGNoX3Rva2VuICh0b2tlbiwgcmVnZXhwLCBzeW50YXgpOworCisgIGlmIChCRSAoZWxlbSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgaWYgKEJFIChzdGFydCA9PSAwICYmIGVuZCA9PSAwLCAwKSkKKyAgICB7CisgICAgICBwb3N0b3JkZXIgKGVsZW0sIGZyZWVfdHJlZSwgTlVMTCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgLyogRXh0cmFjdCAiPHJlPntuLG19IiB0byAiPHJlPjxyZT4uLi48cmU+PHJlPnswLDxtLW4+fSIuICAqLworICBpZiAoQkUgKHN0YXJ0ID4gMCwgMCkpCisgICAgeworICAgICAgdHJlZSA9IGVsZW07CisgICAgICBmb3IgKGkgPSAyOyBpIDw9IHN0YXJ0OyArK2kpCisJeworCSAgZWxlbSA9IGR1cGxpY2F0ZV90cmVlIChlbGVtLCBkZmEpOworCSAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIGVsZW0sIENPTkNBVCk7CisJICBpZiAoQkUgKGVsZW0gPT0gTlVMTCB8fCB0cmVlID09IE5VTEwsIDApKQorCSAgICBnb3RvIHBhcnNlX2R1cF9vcF9lc3BhY2U7CisJfQorCisgICAgICBpZiAoc3RhcnQgPT0gZW5kKQorCXJldHVybiB0cmVlOworCisgICAgICAvKiBEdXBsaWNhdGUgRUxFTSBiZWZvcmUgaXQgaXMgbWFya2VkIG9wdGlvbmFsLiAgKi8KKyAgICAgIGVsZW0gPSBkdXBsaWNhdGVfdHJlZSAoZWxlbSwgZGZhKTsKKyAgICAgIG9sZF90cmVlID0gdHJlZTsKKyAgICB9CisgIGVsc2UKKyAgICBvbGRfdHJlZSA9IE5VTEw7CisKKyAgaWYgKGVsZW0tPnRva2VuLnR5cGUgPT0gU1VCRVhQKQorICAgIHBvc3RvcmRlciAoZWxlbSwgbWFya19vcHRfc3ViZXhwLCAodm9pZCAqKSAoaW50cHRyX3QpIGVsZW0tPnRva2VuLm9wci5pZHgpOworCisgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCBlbGVtLCBOVUxMLCAoZW5kID09IC0xID8gT1BfRFVQX0FTVEVSSVNLIDogT1BfQUxUKSk7CisgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKyAgICBnb3RvIHBhcnNlX2R1cF9vcF9lc3BhY2U7CisKKyAgLyogVGhpcyBsb29wIGlzIGFjdHVhbGx5IGV4ZWN1dGVkIG9ubHkgd2hlbiBlbmQgIT0gLTEsCisgICAgIHRvIHJld3JpdGUgPHJlPnswLG59IGFzICg8cmU+KDxyZT4uLi48cmU+Pyk/KT8uLi4gIFdlIGhhdmUKKyAgICAgYWxyZWFkeSBjcmVhdGVkIHRoZSBzdGFydCsxLXRoIGNvcHkuICAqLworICBmb3IgKGkgPSBzdGFydCArIDI7IGkgPD0gZW5kOyArK2kpCisgICAgeworICAgICAgZWxlbSA9IGR1cGxpY2F0ZV90cmVlIChlbGVtLCBkZmEpOworICAgICAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIGVsZW0sIENPTkNBVCk7CisgICAgICBpZiAoQkUgKGVsZW0gPT0gTlVMTCB8fCB0cmVlID09IE5VTEwsIDApKQorCWdvdG8gcGFyc2VfZHVwX29wX2VzcGFjZTsKKworICAgICAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIE5VTEwsIE9QX0FMVCk7CisgICAgICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisJZ290byBwYXJzZV9kdXBfb3BfZXNwYWNlOworICAgIH0KKworICBpZiAob2xkX3RyZWUpCisgICAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIG9sZF90cmVlLCB0cmVlLCBDT05DQVQpOworCisgIHJldHVybiB0cmVlOworCisgcGFyc2VfZHVwX29wX2VzcGFjZToKKyAgKmVyciA9IFJFR19FU1BBQ0U7CisgIHJldHVybiBOVUxMOworfQorCisvKiBTaXplIG9mIHRoZSBuYW1lcyBmb3IgY29sbGF0aW5nIHN5bWJvbC9lcXVpdmFsZW5jZV9jbGFzcy9jaGFyYWN0ZXJfY2xhc3MuCisgICBJJ20gbm90IHN1cmUsIGJ1dCBtYXliZSBlbm91Z2guICAqLworI2RlZmluZSBCUkFDS0VUX05BTUVfQlVGX1NJWkUgMzIKKworI2lmbmRlZiBfTElCQworICAvKiBMb2NhbCBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAgb25seSB1c2VkIGluIGNhc2Ugb2YgTk9UIF9MSUJDLgorICAgICBCdWlsZCB0aGUgcmFuZ2UgZXhwcmVzc2lvbiB3aGljaCBzdGFydHMgZnJvbSBTVEFSVF9FTEVNLCBhbmQgZW5kcworICAgICBhdCBFTkRfRUxFTS4gIFRoZSByZXN1bHQgYXJlIHdyaXR0ZW4gdG8gTUJDU0VUIGFuZCBTQkNTRVQuCisgICAgIFJBTkdFX0FMTE9DIGlzIHRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiBtYmNzZXQtPnJhbmdlX3N0YXJ0cywgYW5kCisgICAgIG1iY3NldC0+cmFuZ2VfZW5kcywgaXMgYSBwb2ludGVyIGFyZ3VtZW50IHNpbmNlIHdlIG1heQorICAgICB1cGRhdGUgaXQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KKyMgaWZkZWYgUkVfRU5BQkxFX0kxOE4KK2J1aWxkX3JhbmdlX2V4cCAoYml0c2V0X3Qgc2Jjc2V0LCByZV9jaGFyc2V0X3QgKm1iY3NldCwgaW50ICpyYW5nZV9hbGxvYywKKwkJIGJyYWNrZXRfZWxlbV90ICpzdGFydF9lbGVtLCBicmFja2V0X2VsZW1fdCAqZW5kX2VsZW0pCisjIGVsc2UgLyogbm90IFJFX0VOQUJMRV9JMThOICovCitidWlsZF9yYW5nZV9leHAgKGJpdHNldF90IHNiY3NldCwgYnJhY2tldF9lbGVtX3QgKnN0YXJ0X2VsZW0sCisJCSBicmFja2V0X2VsZW1fdCAqZW5kX2VsZW0pCisjIGVuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworeworICB1bnNpZ25lZCBpbnQgc3RhcnRfY2gsIGVuZF9jaDsKKyAgLyogRXF1aXZhbGVuY2UgQ2xhc3NlcyBhbmQgQ2hhcmFjdGVyIENsYXNzZXMgY2FuJ3QgYmUgYSByYW5nZSBzdGFydC9lbmQuICAqLworICBpZiAoQkUgKHN0YXJ0X2VsZW0tPnR5cGUgPT0gRVFVSVZfQ0xBU1MgfHwgc3RhcnRfZWxlbS0+dHlwZSA9PSBDSEFSX0NMQVNTCisJICB8fCBlbmRfZWxlbS0+dHlwZSA9PSBFUVVJVl9DTEFTUyB8fCBlbmRfZWxlbS0+dHlwZSA9PSBDSEFSX0NMQVNTLAorCSAgMCkpCisgICAgcmV0dXJuIFJFR19FUkFOR0U7CisKKyAgLyogV2UgY2FuIGhhbmRsZSBubyBtdWx0aSBjaGFyYWN0ZXIgY29sbGF0aW5nIGVsZW1lbnRzIHdpdGhvdXQgbGliYworICAgICBzdXBwb3J0LiAgKi8KKyAgaWYgKEJFICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTQorCSAgICYmIHN0cmxlbiAoKGNoYXIgKikgc3RhcnRfZWxlbS0+b3ByLm5hbWUpID4gMSkKKwkgIHx8IChlbmRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTQorCSAgICAgICYmIHN0cmxlbiAoKGNoYXIgKikgZW5kX2VsZW0tPm9wci5uYW1lKSA+IDEpLCAwKSkKKyAgICByZXR1cm4gUkVHX0VDT0xMQVRFOworCisjIGlmZGVmIFJFX0VOQUJMRV9JMThOCisgIHsKKyAgICB3Y2hhcl90IHdjOworICAgIHdpbnRfdCBzdGFydF93YzsKKyAgICB3aW50X3QgZW5kX3djOworICAgIHdjaGFyX3QgY21wX2J1Zls2XSA9IHtMJ1wwJywgTCdcMCcsIEwnXDAnLCBMJ1wwJywgTCdcMCcsIEwnXDAnfTsKKworICAgIHN0YXJ0X2NoID0gKChzdGFydF9lbGVtLT50eXBlID09IFNCX0NIQVIpID8gc3RhcnRfZWxlbS0+b3ByLmNoCisJCTogKChzdGFydF9lbGVtLT50eXBlID09IENPTExfU1lNKSA/IHN0YXJ0X2VsZW0tPm9wci5uYW1lWzBdCisJCSAgIDogMCkpOworICAgIGVuZF9jaCA9ICgoZW5kX2VsZW0tPnR5cGUgPT0gU0JfQ0hBUikgPyBlbmRfZWxlbS0+b3ByLmNoCisJICAgICAgOiAoKGVuZF9lbGVtLT50eXBlID09IENPTExfU1lNKSA/IGVuZF9lbGVtLT5vcHIubmFtZVswXQorCQkgOiAwKSk7CisjaWZkZWYgR0FXSworICAgIC8qCisgICAgICogRmVkb3JhIENvcmUgMiwgbWF5YmUgb3RoZXJzLCBoYXZlIGJyb2tlbiBgYnRvd2MnIHRoYXQgcmV0dXJucyAtMQorICAgICAqIGZvciBhbnkgdmFsdWUgPiAxMjcuIFNpZ2guIE5vdGUgdGhhdCBgc3RhcnRfY2gnIGFuZCBgZW5kX2NoJyBhcmUKKyAgICAgKiB1bnNpZ25lZCwgc28gd2UgZG9uJ3QgaGF2ZSBzaWduIGV4dGVuc2lvbiBwcm9ibGVtcy4KKyAgICAgKi8KKyAgICBzdGFydF93YyA9ICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSIHx8IHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pCisJCT8gc3RhcnRfY2ggOiBzdGFydF9lbGVtLT5vcHIud2NoKTsKKyAgICBlbmRfd2MgPSAoKGVuZF9lbGVtLT50eXBlID09IFNCX0NIQVIgfHwgZW5kX2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pCisJICAgICAgPyBlbmRfY2ggOiBlbmRfZWxlbS0+b3ByLndjaCk7CisjZWxzZQorICAgIHN0YXJ0X3djID0gKChzdGFydF9lbGVtLT50eXBlID09IFNCX0NIQVIgfHwgc3RhcnRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkKKwkJPyBfX2J0b3djIChzdGFydF9jaCkgOiBzdGFydF9lbGVtLT5vcHIud2NoKTsKKyAgICBlbmRfd2MgPSAoKGVuZF9lbGVtLT50eXBlID09IFNCX0NIQVIgfHwgZW5kX2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pCisJICAgICAgPyBfX2J0b3djIChlbmRfY2gpIDogZW5kX2VsZW0tPm9wci53Y2gpOworI2VuZGlmCisgICAgaWYgKHN0YXJ0X3djID09IFdFT0YgfHwgZW5kX3djID09IFdFT0YpCisgICAgICByZXR1cm4gUkVHX0VDT0xMQVRFOworICAgIGNtcF9idWZbMF0gPSBzdGFydF93YzsKKyAgICBjbXBfYnVmWzRdID0gZW5kX3djOworICAgIGlmICh3Y3Njb2xsIChjbXBfYnVmLCBjbXBfYnVmICsgNCkgPiAwKQorICAgICAgcmV0dXJuIFJFR19FUkFOR0U7CisKKyAgICAvKiBHb3QgdmFsaWQgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlcywgYWRkIHRoZW0gYXMgYSBuZXcgZW50cnkuCisgICAgICAgSG93ZXZlciwgZm9yICFfTElCQyB3ZSBoYXZlIG5vIGNvbGxhdGlvbiBlbGVtZW50czogaWYgdGhlCisgICAgICAgY2hhcmFjdGVyIHNldCBpcyBzaW5nbGUgYnl0ZSwgdGhlIHNpbmdsZSBieXRlIGNoYXJhY3RlciBzZXQKKyAgICAgICB0aGF0IHdlIGJ1aWxkIGJlbG93IHN1ZmZpY2VzLiAgcGFyc2VfYnJhY2tldF9leHAgcGFzc2VzCisgICAgICAgbm8gTUJDU0VUIGlmIGRmYS0+bWJfY3VyX21heCA9PSAxLiAgKi8KKyAgICBpZiAobWJjc2V0KQorICAgICAgeworCS8qIENoZWNrIHRoZSBzcGFjZSBvZiB0aGUgYXJyYXlzLiAgKi8KKwlpZiAoQkUgKCpyYW5nZV9hbGxvYyA9PSBtYmNzZXQtPm5yYW5nZXMsIDApKQorCSAgeworCSAgICAvKiBUaGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlLCBuZWVkIHJlYWxsb2MuICAqLworCSAgICB3Y2hhcl90ICpuZXdfYXJyYXlfc3RhcnQsICpuZXdfYXJyYXlfZW5kOworCSAgICBpbnQgbmV3X25yYW5nZXM7CisKKwkgICAgLyogKzEgaW4gY2FzZSBvZiBtYmNzZXQtPm5yYW5nZXMgaXMgMC4gICovCisJICAgIG5ld19ucmFuZ2VzID0gMiAqIG1iY3NldC0+bnJhbmdlcyArIDE7CisJICAgIC8qIFVzZSByZWFsbG9jIHNpbmNlIG1iY3NldC0+cmFuZ2Vfc3RhcnRzIGFuZCBtYmNzZXQtPnJhbmdlX2VuZHMKKwkgICAgICAgYXJlIE5VTEwgaWYgKnJhbmdlX2FsbG9jID09IDAuICAqLworCSAgICBuZXdfYXJyYXlfc3RhcnQgPSByZV9yZWFsbG9jIChtYmNzZXQtPnJhbmdlX3N0YXJ0cywgd2NoYXJfdCwKKwkJCQkJICBuZXdfbnJhbmdlcyk7CisJICAgIG5ld19hcnJheV9lbmQgPSByZV9yZWFsbG9jIChtYmNzZXQtPnJhbmdlX2VuZHMsIHdjaGFyX3QsCisJCQkJCW5ld19ucmFuZ2VzKTsKKworCSAgICBpZiAoQkUgKG5ld19hcnJheV9zdGFydCA9PSBOVUxMIHx8IG5ld19hcnJheV9lbmQgPT0gTlVMTCwgMCkpCisJICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKwkgICAgbWJjc2V0LT5yYW5nZV9zdGFydHMgPSBuZXdfYXJyYXlfc3RhcnQ7CisJICAgIG1iY3NldC0+cmFuZ2VfZW5kcyA9IG5ld19hcnJheV9lbmQ7CisJICAgICpyYW5nZV9hbGxvYyA9IG5ld19ucmFuZ2VzOworCSAgfQorCisJbWJjc2V0LT5yYW5nZV9zdGFydHNbbWJjc2V0LT5ucmFuZ2VzXSA9IHN0YXJ0X3djOworCW1iY3NldC0+cmFuZ2VfZW5kc1ttYmNzZXQtPm5yYW5nZXMrK10gPSBlbmRfd2M7CisgICAgICB9CisKKyAgICAvKiBCdWlsZCB0aGUgdGFibGUgZm9yIHNpbmdsZSBieXRlIGNoYXJhY3RlcnMuICAqLworICAgIGZvciAod2MgPSAwOyB3YyA8IFNCQ19NQVg7ICsrd2MpCisgICAgICB7CisJY21wX2J1ZlsyXSA9IHdjOworCWlmICh3Y3Njb2xsIChjbXBfYnVmLCBjbXBfYnVmICsgMikgPD0gMAorCSAgICAmJiB3Y3Njb2xsIChjbXBfYnVmICsgMiwgY21wX2J1ZiArIDQpIDw9IDApCisJICBiaXRzZXRfc2V0IChzYmNzZXQsIHdjKTsKKyAgICAgIH0KKyAgfQorIyBlbHNlIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICB7CisgICAgdW5zaWduZWQgaW50IGNoOworICAgIHN0YXJ0X2NoID0gKChzdGFydF9lbGVtLT50eXBlID09IFNCX0NIQVIgKSA/IHN0YXJ0X2VsZW0tPm9wci5jaAorCQk6ICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkgPyBzdGFydF9lbGVtLT5vcHIubmFtZVswXQorCQkgICA6IDApKTsKKyAgICBlbmRfY2ggPSAoKGVuZF9lbGVtLT50eXBlID09IFNCX0NIQVIgKSA/IGVuZF9lbGVtLT5vcHIuY2gKKwkgICAgICA6ICgoZW5kX2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pID8gZW5kX2VsZW0tPm9wci5uYW1lWzBdCisJCSA6IDApKTsKKyAgICBpZiAoc3RhcnRfY2ggPiBlbmRfY2gpCisgICAgICByZXR1cm4gUkVHX0VSQU5HRTsKKyAgICAvKiBCdWlsZCB0aGUgdGFibGUgZm9yIHNpbmdsZSBieXRlIGNoYXJhY3RlcnMuICAqLworICAgIGZvciAoY2ggPSAwOyBjaCA8IFNCQ19NQVg7ICsrY2gpCisgICAgICBpZiAoc3RhcnRfY2ggPD0gY2ggICYmIGNoIDw9IGVuZF9jaCkKKwliaXRzZXRfc2V0IChzYmNzZXQsIGNoKTsKKyAgfQorIyBlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorI2VuZGlmIC8qIG5vdCBfTElCQyAqLworCisjaWZuZGVmIF9MSUJDCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIG9ubHkgdXNlZCBpbiBjYXNlIG9mIE5PVCBfTElCQy4uCisgICBCdWlsZCB0aGUgY29sbGF0aW5nIGVsZW1lbnQgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgTkFNRS4KKyAgIFRoZSByZXN1bHQgYXJlIHdyaXR0ZW4gdG8gTUJDU0VUIGFuZCBTQkNTRVQuCisgICBDT0xMX1NZTV9BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5jb2xsX3N5bSwgaXMgYQorICAgcG9pbnRlciBhcmd1bWVudCBzaW5jZSB3ZSBtYXkgdXBkYXRlIGl0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCisjIGlmZGVmIFJFX0VOQUJMRV9JMThOCitidWlsZF9jb2xsYXRpbmdfc3ltYm9sIChiaXRzZXRfdCBzYmNzZXQsIHJlX2NoYXJzZXRfdCAqbWJjc2V0LAorCQkJaW50ICpjb2xsX3N5bV9hbGxvYywgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSkKKyMgZWxzZSAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK2J1aWxkX2NvbGxhdGluZ19zeW1ib2wgKGJpdHNldF90IHNiY3NldCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSkKKyMgZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCit7CisgIHNpemVfdCBuYW1lX2xlbiA9IHN0cmxlbiAoKGNvbnN0IGNoYXIgKikgbmFtZSk7CisgIGlmIChCRSAobmFtZV9sZW4gIT0gMSwgMCkpCisgICAgcmV0dXJuIFJFR19FQ09MTEFURTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGJpdHNldF9zZXQgKHNiY3NldCwgbmFtZVswXSk7CisgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisgICAgfQorfQorI2VuZGlmIC8qIG5vdCBfTElCQyAqLworCisvKiBUaGlzIGZ1bmN0aW9uIHBhcnNlIGJyYWNrZXQgZXhwcmVzc2lvbiBsaWtlICJbYWJjXSIsICJbYS1jXSIsCisgICAiW1suYS1hLl1dIiBldGMuICAqLworCitzdGF0aWMgYmluX3RyZWVfdCAqCitwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisJCSAgIHJlZ19zeW50YXhfdCBzeW50YXgsIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyNpZmRlZiBfTElCQworICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2xsc2VxbWI7CisgIGNvbnN0IGNoYXIgKmNvbGxzZXF3YzsKKyAgdWludDMyX3QgbnJ1bGVzOworICBpbnQzMl90IHRhYmxlX3NpemU7CisgIGNvbnN0IGludDMyX3QgKnN5bWJfdGFibGU7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhOworCisgIC8qIExvY2FsIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cCB1c2VkIGluIF9MSUJDIGVudmlyb25tZW50LgorICAgICBTZWVrIHRoZSBjb2xsYXRpbmcgc3ltYm9sIGVudHJ5IGNvcnJlc3BvbmRpbmdzIHRvIE5BTUUuCisgICAgIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIHN5bWJvbCBpbiB0aGUgU1lNQl9UQUJMRS4gICovCisKKyAgYXV0byBpbmxpbmUgaW50MzJfdAorICBfX2F0dHJpYnV0ZSAoKGFsd2F5c19pbmxpbmUpKQorICBzZWVrX2NvbGxhdGluZ19zeW1ib2xfZW50cnkgKG5hbWUsIG5hbWVfbGVuKQorCSBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lOworCSBzaXplX3QgbmFtZV9sZW47CisgICAgeworICAgICAgaW50MzJfdCBoYXNoID0gZWxlbV9oYXNoICgoY29uc3QgY2hhciAqKSBuYW1lLCBuYW1lX2xlbik7CisgICAgICBpbnQzMl90IGVsZW0gPSBoYXNoICUgdGFibGVfc2l6ZTsKKyAgICAgIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSAhPSAwKQorCXsKKwkgIGludDMyX3Qgc2Vjb25kID0gaGFzaCAlICh0YWJsZV9zaXplIC0gMikgKyAxOworCisJICBkbworCSAgICB7CisJICAgICAgLyogRmlyc3QgY29tcGFyZSB0aGUgaGFzaGluZyB2YWx1ZS4gICovCisJICAgICAgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dID09IGhhc2gKKwkJICAvKiBDb21wYXJlIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUuICAqLworCQkgICYmIG5hbWVfbGVuID09IGV4dHJhW3N5bWJfdGFibGVbMiAqIGVsZW0gKyAxXV0KKwkJICAvKiBDb21wYXJlIHRoZSBuYW1lLiAgKi8KKwkJICAmJiBtZW1jbXAgKG5hbWUsICZleHRyYVtzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV0gKyAxXSwKKwkJCSAgICAgbmFtZV9sZW4pID09IDApCisJCXsKKwkJICAvKiBZZXAsIHRoaXMgaXMgdGhlIGVudHJ5LiAgKi8KKwkJICBicmVhazsKKwkJfQorCisJICAgICAgLyogTmV4dCBlbnRyeS4gICovCisJICAgICAgZWxlbSArPSBzZWNvbmQ7CisJICAgIH0KKwkgIHdoaWxlIChzeW1iX3RhYmxlWzIgKiBlbGVtXSAhPSAwKTsKKwl9CisgICAgICByZXR1cm4gZWxlbTsKKyAgICB9CisKKyAgLyogTG9jYWwgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIHVzZWQgaW4gX0xJQkMgZW52aXJvbm1lbnQuCisgICAgIExvb2sgdXAgdGhlIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZSBvZiBCUl9FTEVNLgorICAgICBSZXR1cm4gdGhlIHZhbHVlIGlmIHN1Y2NlZWRlZCwgVUlOVF9NQVggb3RoZXJ3aXNlLiAgKi8KKworICBhdXRvIGlubGluZSB1bnNpZ25lZCBpbnQKKyAgX19hdHRyaWJ1dGUgKChhbHdheXNfaW5saW5lKSkKKyAgbG9va3VwX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1ZSAoYnJfZWxlbSkKKwkgYnJhY2tldF9lbGVtX3QgKmJyX2VsZW07CisgICAgeworICAgICAgaWYgKGJyX2VsZW0tPnR5cGUgPT0gU0JfQ0hBUikKKwl7CisJICAvKgorCSAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKwkgICovCisJICBpZiAobnJ1bGVzID09IDApCisJICAgIHJldHVybiBjb2xsc2VxbWJbYnJfZWxlbS0+b3ByLmNoXTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHdpbnRfdCB3YyA9IF9fYnRvd2MgKGJyX2VsZW0tPm9wci5jaCk7CisJICAgICAgcmV0dXJuIF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXF3Yywgd2MpOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoYnJfZWxlbS0+dHlwZSA9PSBNQl9DSEFSKQorCXsKKwkgIGlmIChucnVsZXMgIT0gMCkKKwkgICAgcmV0dXJuIF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXF3YywgYnJfZWxlbS0+b3ByLndjaCk7CisJfQorICAgICAgZWxzZSBpZiAoYnJfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkKKwl7CisJICBzaXplX3Qgc3ltX25hbWVfbGVuID0gc3RybGVuICgoY2hhciAqKSBicl9lbGVtLT5vcHIubmFtZSk7CisJICBpZiAobnJ1bGVzICE9IDApCisJICAgIHsKKwkgICAgICBpbnQzMl90IGVsZW0sIGlkeDsKKwkgICAgICBlbGVtID0gc2Vla19jb2xsYXRpbmdfc3ltYm9sX2VudHJ5IChicl9lbGVtLT5vcHIubmFtZSwKKwkJCQkJCSAgc3ltX25hbWVfbGVuKTsKKwkgICAgICBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCkKKwkJeworCQkgIC8qIFdlIGZvdW5kIHRoZSBlbnRyeS4gICovCisJCSAgaWR4ID0gc3ltYl90YWJsZVsyICogZWxlbSArIDFdOworCQkgIC8qIFNraXAgdGhlIG5hbWUgb2YgY29sbGF0aW5nIGVsZW1lbnQgbmFtZS4gICovCisJCSAgaWR4ICs9IDEgKyBleHRyYVtpZHhdOworCQkgIC8qIFNraXAgdGhlIGJ5dGUgc2VxdWVuY2Ugb2YgdGhlIGNvbGxhdGluZyBlbGVtZW50LiAgKi8KKwkJICBpZHggKz0gMSArIGV4dHJhW2lkeF07CisJCSAgLyogQWRqdXN0IGZvciB0aGUgYWxpZ25tZW50LiAgKi8KKwkJICBpZHggPSAoaWR4ICsgMykgJiB+MzsKKwkJICAvKiBTa2lwIHRoZSBtdWx0aWJ5dGUgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlLiAgKi8KKwkJICBpZHggKz0gc2l6ZW9mICh1bnNpZ25lZCBpbnQpOworCQkgIC8qIFNraXAgdGhlIHdpZGUgY2hhciBzZXF1ZW5jZSBvZiB0aGUgY29sbGF0aW5nIGVsZW1lbnQuICAqLworCQkgIGlkeCArPSBzaXplb2YgKHVuc2lnbmVkIGludCkgKgorCQkgICAgKDEgKyAqKHVuc2lnbmVkIGludCAqKSAoZXh0cmEgKyBpZHgpKTsKKwkJICAvKiBSZXR1cm4gdGhlIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZS4gICovCisJCSAgcmV0dXJuICoodW5zaWduZWQgaW50ICopIChleHRyYSArIGlkeCk7CisJCX0KKwkgICAgICBlbHNlIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSA9PSAwICYmIHN5bV9uYW1lX2xlbiA9PSAxKQorCQl7CisJCSAgLyogTm8gdmFsaWQgY2hhcmFjdGVyLiAgTWF0Y2ggaXQgYXMgYSBzaW5nbGUgYnl0ZQorCQkgICAgIGNoYXJhY3Rlci4gICovCisJCSAgcmV0dXJuIGNvbGxzZXFtYlticl9lbGVtLT5vcHIubmFtZVswXV07CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoc3ltX25hbWVfbGVuID09IDEpCisJICAgIHJldHVybiBjb2xsc2VxbWJbYnJfZWxlbS0+b3ByLm5hbWVbMF1dOworCX0KKyAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICB9CisKKyAgLyogTG9jYWwgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIHVzZWQgaW4gX0xJQkMgZW52aXJvbm1lbnQuCisgICAgIEJ1aWxkIHRoZSByYW5nZSBleHByZXNzaW9uIHdoaWNoIHN0YXJ0cyBmcm9tIFNUQVJUX0VMRU0sIGFuZCBlbmRzCisgICAgIGF0IEVORF9FTEVNLiAgVGhlIHJlc3VsdCBhcmUgd3JpdHRlbiB0byBNQkNTRVQgYW5kIFNCQ1NFVC4KKyAgICAgUkFOR0VfQUxMT0MgaXMgdGhlIGFsbG9jYXRlZCBzaXplIG9mIG1iY3NldC0+cmFuZ2Vfc3RhcnRzLCBhbmQKKyAgICAgbWJjc2V0LT5yYW5nZV9lbmRzLCBpcyBhIHBvaW50ZXIgYXJndW1lbnQgc2luY2Ugd2UgbWF5CisgICAgIHVwZGF0ZSBpdC4gICovCisKKyAgYXV0byBpbmxpbmUgcmVnX2VycmNvZGVfdAorICBfX2F0dHJpYnV0ZSAoKGFsd2F5c19pbmxpbmUpKQorICBidWlsZF9yYW5nZV9leHAgKHNiY3NldCwgbWJjc2V0LCByYW5nZV9hbGxvYywgc3RhcnRfZWxlbSwgZW5kX2VsZW0pCisJIHJlX2NoYXJzZXRfdCAqbWJjc2V0OworCSBpbnQgKnJhbmdlX2FsbG9jOworCSBiaXRzZXRfdCBzYmNzZXQ7CisJIGJyYWNrZXRfZWxlbV90ICpzdGFydF9lbGVtLCAqZW5kX2VsZW07CisgICAgeworICAgICAgdW5zaWduZWQgaW50IGNoOworICAgICAgdWludDMyX3Qgc3RhcnRfY29sbHNlcTsKKyAgICAgIHVpbnQzMl90IGVuZF9jb2xsc2VxOworCisgICAgICAvKiBFcXVpdmFsZW5jZSBDbGFzc2VzIGFuZCBDaGFyYWN0ZXIgQ2xhc3NlcyBjYW4ndCBiZSBhIHJhbmdlCisJIHN0YXJ0L2VuZC4gICovCisgICAgICBpZiAoQkUgKHN0YXJ0X2VsZW0tPnR5cGUgPT0gRVFVSVZfQ0xBU1MgfHwgc3RhcnRfZWxlbS0+dHlwZSA9PSBDSEFSX0NMQVNTCisJICAgICAgfHwgZW5kX2VsZW0tPnR5cGUgPT0gRVFVSVZfQ0xBU1MgfHwgZW5kX2VsZW0tPnR5cGUgPT0gQ0hBUl9DTEFTUywKKwkgICAgICAwKSkKKwlyZXR1cm4gUkVHX0VSQU5HRTsKKworICAgICAgc3RhcnRfY29sbHNlcSA9IGxvb2t1cF9jb2xsYXRpb25fc2VxdWVuY2VfdmFsdWUgKHN0YXJ0X2VsZW0pOworICAgICAgZW5kX2NvbGxzZXEgPSBsb29rdXBfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChlbmRfZWxlbSk7CisgICAgICAvKiBDaGVjayBzdGFydC9lbmQgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlcy4gICovCisgICAgICBpZiAoQkUgKHN0YXJ0X2NvbGxzZXEgPT0gVUlOVF9NQVggfHwgZW5kX2NvbGxzZXEgPT0gVUlOVF9NQVgsIDApKQorCXJldHVybiBSRUdfRUNPTExBVEU7CisgICAgICBpZiAoQkUgKChzeW50YXggJiBSRV9OT19FTVBUWV9SQU5HRVMpICYmIHN0YXJ0X2NvbGxzZXEgPiBlbmRfY29sbHNlcSwgMCkpCisJcmV0dXJuIFJFR19FUkFOR0U7CisKKyAgICAgIC8qIEdvdCB2YWxpZCBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWVzLCBhZGQgdGhlbSBhcyBhIG5ldyBlbnRyeS4KKwkgSG93ZXZlciwgaWYgd2UgaGF2ZSBubyBjb2xsYXRpb24gZWxlbWVudHMsIGFuZCB0aGUgY2hhcmFjdGVyIHNldAorCSBpcyBzaW5nbGUgYnl0ZSwgdGhlIHNpbmdsZSBieXRlIGNoYXJhY3RlciBzZXQgdGhhdCB3ZQorCSBidWlsZCBiZWxvdyBzdWZmaWNlcy4gKi8KKyAgICAgIGlmIChucnVsZXMgPiAwIHx8IGRmYS0+bWJfY3VyX21heCA+IDEpCisJeworCSAgLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworCSAgaWYgKEJFICgqcmFuZ2VfYWxsb2MgPT0gbWJjc2V0LT5ucmFuZ2VzLCAwKSkKKwkgICAgeworCSAgICAgIC8qIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UsIG5lZWQgcmVhbGxvYy4gICovCisJICAgICAgdWludDMyX3QgKm5ld19hcnJheV9zdGFydDsKKwkgICAgICB1aW50MzJfdCAqbmV3X2FycmF5X2VuZDsKKwkgICAgICBpbnQgbmV3X25yYW5nZXM7CisKKwkgICAgICAvKiArMSBpbiBjYXNlIG9mIG1iY3NldC0+bnJhbmdlcyBpcyAwLiAgKi8KKwkgICAgICBuZXdfbnJhbmdlcyA9IDIgKiBtYmNzZXQtPm5yYW5nZXMgKyAxOworCSAgICAgIG5ld19hcnJheV9zdGFydCA9IHJlX3JlYWxsb2MgKG1iY3NldC0+cmFuZ2Vfc3RhcnRzLCB1aW50MzJfdCwKKwkJCQkJICAgIG5ld19ucmFuZ2VzKTsKKwkgICAgICBuZXdfYXJyYXlfZW5kID0gcmVfcmVhbGxvYyAobWJjc2V0LT5yYW5nZV9lbmRzLCB1aW50MzJfdCwKKwkJCQkJICBuZXdfbnJhbmdlcyk7CisKKwkgICAgICBpZiAoQkUgKG5ld19hcnJheV9zdGFydCA9PSBOVUxMIHx8IG5ld19hcnJheV9lbmQgPT0gTlVMTCwgMCkpCisJCXJldHVybiBSRUdfRVNQQUNFOworCisJICAgICAgbWJjc2V0LT5yYW5nZV9zdGFydHMgPSBuZXdfYXJyYXlfc3RhcnQ7CisJICAgICAgbWJjc2V0LT5yYW5nZV9lbmRzID0gbmV3X2FycmF5X2VuZDsKKwkgICAgICAqcmFuZ2VfYWxsb2MgPSBuZXdfbnJhbmdlczsKKwkgICAgfQorCisJICBtYmNzZXQtPnJhbmdlX3N0YXJ0c1ttYmNzZXQtPm5yYW5nZXNdID0gc3RhcnRfY29sbHNlcTsKKwkgIG1iY3NldC0+cmFuZ2VfZW5kc1ttYmNzZXQtPm5yYW5nZXMrK10gPSBlbmRfY29sbHNlcTsKKwl9CisKKyAgICAgIC8qIEJ1aWxkIHRoZSB0YWJsZSBmb3Igc2luZ2xlIGJ5dGUgY2hhcmFjdGVycy4gICovCisgICAgICBmb3IgKGNoID0gMDsgY2ggPCBTQkNfTUFYOyBjaCsrKQorCXsKKwkgIHVpbnQzMl90IGNoX2NvbGxzZXE7CisJICAvKgorCSAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKwkgICovCisJICBpZiAobnJ1bGVzID09IDApCisJICAgIGNoX2NvbGxzZXEgPSBjb2xsc2VxbWJbY2hdOworCSAgZWxzZQorCSAgICBjaF9jb2xsc2VxID0gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCBfX2J0b3djIChjaCkpOworCSAgaWYgKHN0YXJ0X2NvbGxzZXEgPD0gY2hfY29sbHNlcSAmJiBjaF9jb2xsc2VxIDw9IGVuZF9jb2xsc2VxKQorCSAgICBiaXRzZXRfc2V0IChzYmNzZXQsIGNoKTsKKwl9CisgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisgICAgfQorCisgIC8qIExvY2FsIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cCB1c2VkIGluIF9MSUJDIGVudmlyb25tZW50LgorICAgICBCdWlsZCB0aGUgY29sbGF0aW5nIGVsZW1lbnQgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgTkFNRS4KKyAgICAgVGhlIHJlc3VsdCBhcmUgd3JpdHRlbiB0byBNQkNTRVQgYW5kIFNCQ1NFVC4KKyAgICAgQ09MTF9TWU1fQUxMT0MgaXMgdGhlIGFsbG9jYXRlZCBzaXplIG9mIG1iY3NldC0+Y29sbF9zeW0sIGlzIGEKKyAgICAgcG9pbnRlciBhcmd1bWVudCBzaW5jZSB3ZSBtYXkgdXBkYXRlIGl0LiAgKi8KKworICBhdXRvIGlubGluZSByZWdfZXJyY29kZV90CisgIF9fYXR0cmlidXRlICgoYWx3YXlzX2lubGluZSkpCisgIGJ1aWxkX2NvbGxhdGluZ19zeW1ib2wgKHNiY3NldCwgbWJjc2V0LCBjb2xsX3N5bV9hbGxvYywgbmFtZSkKKwkgcmVfY2hhcnNldF90ICptYmNzZXQ7CisJIGludCAqY29sbF9zeW1fYWxsb2M7CisJIGJpdHNldF90IHNiY3NldDsKKwkgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZTsKKyAgICB7CisgICAgICBpbnQzMl90IGVsZW0sIGlkeDsKKyAgICAgIHNpemVfdCBuYW1lX2xlbiA9IHN0cmxlbiAoKGNvbnN0IGNoYXIgKikgbmFtZSk7CisgICAgICBpZiAobnJ1bGVzICE9IDApCisJeworCSAgZWxlbSA9IHNlZWtfY29sbGF0aW5nX3N5bWJvbF9lbnRyeSAobmFtZSwgbmFtZV9sZW4pOworCSAgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dICE9IDApCisJICAgIHsKKwkgICAgICAvKiBXZSBmb3VuZCB0aGUgZW50cnkuICAqLworCSAgICAgIGlkeCA9IHN5bWJfdGFibGVbMiAqIGVsZW0gKyAxXTsKKwkgICAgICAvKiBTa2lwIHRoZSBuYW1lIG9mIGNvbGxhdGluZyBlbGVtZW50IG5hbWUuICAqLworCSAgICAgIGlkeCArPSAxICsgZXh0cmFbaWR4XTsKKwkgICAgfQorCSAgZWxzZSBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gPT0gMCAmJiBuYW1lX2xlbiA9PSAxKQorCSAgICB7CisJICAgICAgLyogTm8gdmFsaWQgY2hhcmFjdGVyLCB0cmVhdCBpdCBhcyBhIG5vcm1hbAorCQkgY2hhcmFjdGVyLiAgKi8KKwkgICAgICBiaXRzZXRfc2V0IChzYmNzZXQsIG5hbWVbMF0pOworCSAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKwkgICAgfQorCSAgZWxzZQorCSAgICByZXR1cm4gUkVHX0VDT0xMQVRFOworCisJICAvKiBHb3QgdmFsaWQgY29sbGF0aW9uIHNlcXVlbmNlLCBhZGQgaXQgYXMgYSBuZXcgZW50cnkuICAqLworCSAgLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworCSAgaWYgKEJFICgqY29sbF9zeW1fYWxsb2MgPT0gbWJjc2V0LT5uY29sbF9zeW1zLCAwKSkKKwkgICAgeworCSAgICAgIC8qIE5vdCBlbm91Z2gsIHJlYWxsb2MgaXQuICAqLworCSAgICAgIC8qICsxIGluIGNhc2Ugb2YgbWJjc2V0LT5uY29sbF9zeW1zIGlzIDAuICAqLworCSAgICAgIGludCBuZXdfY29sbF9zeW1fYWxsb2MgPSAyICogbWJjc2V0LT5uY29sbF9zeW1zICsgMTsKKwkgICAgICAvKiBVc2UgcmVhbGxvYyBzaW5jZSBtYmNzZXQtPmNvbGxfc3ltcyBpcyBOVUxMCisJCSBpZiAqYWxsb2MgPT0gMC4gICovCisJICAgICAgaW50MzJfdCAqbmV3X2NvbGxfc3ltcyA9IHJlX3JlYWxsb2MgKG1iY3NldC0+Y29sbF9zeW1zLCBpbnQzMl90LAorCQkJCQkJICAgbmV3X2NvbGxfc3ltX2FsbG9jKTsKKwkgICAgICBpZiAoQkUgKG5ld19jb2xsX3N5bXMgPT0gTlVMTCwgMCkpCisJCXJldHVybiBSRUdfRVNQQUNFOworCSAgICAgIG1iY3NldC0+Y29sbF9zeW1zID0gbmV3X2NvbGxfc3ltczsKKwkgICAgICAqY29sbF9zeW1fYWxsb2MgPSBuZXdfY29sbF9zeW1fYWxsb2M7CisJICAgIH0KKwkgIG1iY3NldC0+Y29sbF9zeW1zW21iY3NldC0+bmNvbGxfc3ltcysrXSA9IGlkeDsKKwkgIHJldHVybiBSRUdfTk9FUlJPUjsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKEJFIChuYW1lX2xlbiAhPSAxLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FQ09MTEFURTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGJpdHNldF9zZXQgKHNiY3NldCwgbmFtZVswXSk7CisJICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorCisgIHJlX3Rva2VuX3QgYnJfdG9rZW47CisgIHJlX2JpdHNldF9wdHJfdCBzYmNzZXQ7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgcmVfY2hhcnNldF90ICptYmNzZXQ7CisgIGludCBjb2xsX3N5bV9hbGxvYyA9IDAsIHJhbmdlX2FsbG9jID0gMCwgbWJjaGFyX2FsbG9jID0gMDsKKyAgaW50IGVxdWl2X2NsYXNzX2FsbG9jID0gMCwgY2hhcl9jbGFzc19hbGxvYyA9IDA7CisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgIGludCBub25fbWF0Y2ggPSAwOworICBiaW5fdHJlZV90ICp3b3JrX3RyZWU7CisgIGludCB0b2tlbl9sZW47CisgIGludCBmaXJzdF9yb3VuZCA9IDE7CisjaWZkZWYgX0xJQkMKKyAgY29sbHNlcW1iID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKyAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfQ09MTFNFUU1CKTsKKyAgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKyAgaWYgKG5ydWxlcykKKyAgICB7CisgICAgICAvKgorICAgICAgaWYgKE1CX0NVUl9NQVggPiAxKQorICAgICAgKi8KKyAgICAgIGNvbGxzZXF3YyA9IF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRV0MpOworICAgICAgdGFibGVfc2l6ZSA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1NZTUJfSEFTSF9TSVpFTUIpOworICAgICAgc3ltYl90YWJsZSA9IChjb25zdCBpbnQzMl90ICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorCQkJCQkJICBfTkxfQ09MTEFURV9TWU1CX1RBQkxFTUIpOworICAgICAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKwkJCQkJCSAgIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQik7CisgICAgfQorI2VuZGlmCisgIHNiY3NldCA9IChyZV9iaXRzZXRfcHRyX3QpIGNhbGxvYyAoc2l6ZW9mIChiaXRzZXRfdCksIDEpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIG1iY3NldCA9IChyZV9jaGFyc2V0X3QgKikgY2FsbG9jIChzaXplb2YgKHJlX2NoYXJzZXRfdCksIDEpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKEJFIChzYmNzZXQgPT0gTlVMTCB8fCBtYmNzZXQgPT0gTlVMTCwgMCkpCisjZWxzZQorICBpZiAoQkUgKHNiY3NldCA9PSBOVUxMLCAwKSkKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgIHsKKyAgICAgICplcnIgPSBSRUdfRVNQQUNFOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIHRva2VuX2xlbiA9IHBlZWtfdG9rZW5fYnJhY2tldCAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKyAgaWYgKEJFICh0b2tlbi0+dHlwZSA9PSBFTkRfT0ZfUkUsIDApKQorICAgIHsKKyAgICAgICplcnIgPSBSRUdfQkFEUEFUOworICAgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKyAgICB9CisgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9OT05fTUFUQ0hfTElTVCkKKyAgICB7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIG1iY3NldC0+bm9uX21hdGNoID0gMTsKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgICAgIG5vbl9tYXRjaCA9IDE7CisgICAgICBpZiAoc3ludGF4ICYgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FKQorCWJpdHNldF9zZXQgKHNiY3NldCwgJ1xuJyk7CisgICAgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhwLCB0b2tlbl9sZW4pOyAvKiBTa2lwIGEgdG9rZW4uICAqLworICAgICAgdG9rZW5fbGVuID0gcGVla190b2tlbl9icmFja2V0ICh0b2tlbiwgcmVnZXhwLCBzeW50YXgpOworICAgICAgaWYgKEJFICh0b2tlbi0+dHlwZSA9PSBFTkRfT0ZfUkUsIDApKQorCXsKKwkgICplcnIgPSBSRUdfQkFEUEFUOworCSAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwl9CisgICAgfQorCisgIC8qIFdlIHRyZWF0IHRoZSBmaXJzdCAnXScgYXMgYSBub3JtYWwgY2hhcmFjdGVyLiAgKi8KKyAgaWYgKHRva2VuLT50eXBlID09IE9QX0NMT1NFX0JSQUNLRVQpCisgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgYnJhY2tldF9lbGVtX3Qgc3RhcnRfZWxlbSwgZW5kX2VsZW07CisgICAgICB1bnNpZ25lZCBjaGFyIHN0YXJ0X25hbWVfYnVmW0JSQUNLRVRfTkFNRV9CVUZfU0laRV07CisgICAgICB1bnNpZ25lZCBjaGFyIGVuZF9uYW1lX2J1ZltCUkFDS0VUX05BTUVfQlVGX1NJWkVdOworICAgICAgcmVnX2VycmNvZGVfdCByZXQ7CisgICAgICBpbnQgdG9rZW5fbGVuMiA9IDAsIGlzX3JhbmdlX2V4cCA9IDA7CisgICAgICByZV90b2tlbl90IHRva2VuMjsKKworICAgICAgc3RhcnRfZWxlbS5vcHIubmFtZSA9IHN0YXJ0X25hbWVfYnVmOworICAgICAgcmV0ID0gcGFyc2VfYnJhY2tldF9lbGVtZW50ICgmc3RhcnRfZWxlbSwgcmVnZXhwLCB0b2tlbiwgdG9rZW5fbGVuLCBkZmEsCisJCQkJICAgc3ludGF4LCBmaXJzdF9yb3VuZCk7CisgICAgICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJeworCSAgKmVyciA9IHJldDsKKwkgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJfQorICAgICAgZmlyc3Rfcm91bmQgPSAwOworCisgICAgICAvKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5leHQgdG9rZW4uICBXZSBuZWVkIGl0IGluIGFueSBjYXNlLiAgKi8KKyAgICAgIHRva2VuX2xlbiA9IHBlZWtfdG9rZW5fYnJhY2tldCAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKworICAgICAgLyogRG8gbm90IGNoZWNrIGZvciByYW5nZXMgaWYgd2Uga25vdyB0aGV5IGFyZSBub3QgYWxsb3dlZC4gICovCisgICAgICBpZiAoc3RhcnRfZWxlbS50eXBlICE9IENIQVJfQ0xBU1MgJiYgc3RhcnRfZWxlbS50eXBlICE9IEVRVUlWX0NMQVNTKQorCXsKKwkgIGlmIChCRSAodG9rZW4tPnR5cGUgPT0gRU5EX09GX1JFLCAwKSkKKwkgICAgeworCSAgICAgICplcnIgPSBSRUdfRUJSQUNLOworCSAgICAgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJICAgIH0KKwkgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9DSEFSU0VUX1JBTkdFKQorCSAgICB7CisJICAgICAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgdG9rZW5fbGVuKTsgLyogU2tpcCAnLScuICAqLworCSAgICAgIHRva2VuX2xlbjIgPSBwZWVrX3Rva2VuX2JyYWNrZXQgKCZ0b2tlbjIsIHJlZ2V4cCwgc3ludGF4KTsKKwkgICAgICBpZiAoQkUgKHRva2VuMi50eXBlID09IEVORF9PRl9SRSwgMCkpCisJCXsKKwkJICAqZXJyID0gUkVHX0VCUkFDSzsKKwkJICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCQl9CisJICAgICAgaWYgKHRva2VuMi50eXBlID09IE9QX0NMT1NFX0JSQUNLRVQpCisJCXsKKwkJICAvKiBXZSB0cmVhdCB0aGUgbGFzdCAnLScgYXMgYSBub3JtYWwgY2hhcmFjdGVyLiAgKi8KKwkJICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhwLCAtdG9rZW5fbGVuKTsKKwkJICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKwkJfQorCSAgICAgIGVsc2UKKwkJaXNfcmFuZ2VfZXhwID0gMTsKKwkgICAgfQorCX0KKworICAgICAgaWYgKGlzX3JhbmdlX2V4cCA9PSAxKQorCXsKKwkgIGVuZF9lbGVtLm9wci5uYW1lID0gZW5kX25hbWVfYnVmOworCSAgcmV0ID0gcGFyc2VfYnJhY2tldF9lbGVtZW50ICgmZW5kX2VsZW0sIHJlZ2V4cCwgJnRva2VuMiwgdG9rZW5fbGVuMiwKKwkJCQkgICAgICAgZGZhLCBzeW50YXgsIDEpOworCSAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICB7CisJICAgICAgKmVyciA9IHJldDsKKwkgICAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCSAgICB9CisKKwkgIHRva2VuX2xlbiA9IHBlZWtfdG9rZW5fYnJhY2tldCAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKworI2lmZGVmIF9MSUJDCisJICAqZXJyID0gYnVpbGRfcmFuZ2VfZXhwIChzYmNzZXQsIG1iY3NldCwgJnJhbmdlX2FsbG9jLAorCQkJCSAgJnN0YXJ0X2VsZW0sICZlbmRfZWxlbSk7CisjZWxzZQorIyBpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgKmVyciA9IGJ1aWxkX3JhbmdlX2V4cCAoc2Jjc2V0LAorCQkJCSAgZGZhLT5tYl9jdXJfbWF4ID4gMSA/IG1iY3NldCA6IE5VTEwsCisJCQkJICAmcmFuZ2VfYWxsb2MsICZzdGFydF9lbGVtLCAmZW5kX2VsZW0pOworIyBlbHNlCisJICAqZXJyID0gYnVpbGRfcmFuZ2VfZXhwIChzYmNzZXQsICZzdGFydF9lbGVtLCAmZW5kX2VsZW0pOworIyBlbmRpZgorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBzd2l0Y2ggKHN0YXJ0X2VsZW0udHlwZSkKKwkgICAgeworCSAgICBjYXNlIFNCX0NIQVI6CisJICAgICAgYml0c2V0X3NldCAoc2Jjc2V0LCBzdGFydF9lbGVtLm9wci5jaCk7CisJICAgICAgYnJlYWs7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgICAgY2FzZSBNQl9DSEFSOgorCSAgICAgIC8qIENoZWNrIHdoZXRoZXIgdGhlIGFycmF5IGhhcyBlbm91Z2ggc3BhY2UuICAqLworCSAgICAgIGlmIChCRSAobWJjaGFyX2FsbG9jID09IG1iY3NldC0+bm1iY2hhcnMsIDApKQorCQl7CisJCSAgd2NoYXJfdCAqbmV3X21iY2hhcnM7CisJCSAgLyogTm90IGVub3VnaCwgcmVhbGxvYyBpdC4gICovCisJCSAgLyogKzEgaW4gY2FzZSBvZiBtYmNzZXQtPm5tYmNoYXJzIGlzIDAuICAqLworCQkgIG1iY2hhcl9hbGxvYyA9IDIgKiBtYmNzZXQtPm5tYmNoYXJzICsgMTsKKwkJICAvKiBVc2UgcmVhbGxvYyBzaW5jZSBhcnJheSBpcyBOVUxMIGlmICphbGxvYyA9PSAwLiAgKi8KKwkJICBuZXdfbWJjaGFycyA9IHJlX3JlYWxsb2MgKG1iY3NldC0+bWJjaGFycywgd2NoYXJfdCwKKwkJCQkJICAgIG1iY2hhcl9hbGxvYyk7CisJCSAgaWYgKEJFIChuZXdfbWJjaGFycyA9PSBOVUxMLCAwKSkKKwkJICAgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZXNwYWNlOworCQkgIG1iY3NldC0+bWJjaGFycyA9IG5ld19tYmNoYXJzOworCQl9CisJICAgICAgbWJjc2V0LT5tYmNoYXJzW21iY3NldC0+bm1iY2hhcnMrK10gPSBzdGFydF9lbGVtLm9wci53Y2g7CisJICAgICAgYnJlYWs7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkgICAgY2FzZSBFUVVJVl9DTEFTUzoKKwkgICAgICAqZXJyID0gYnVpbGRfZXF1aXZfY2xhc3MgKHNiY3NldCwKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCQkJCQltYmNzZXQsICZlcXVpdl9jbGFzc19hbGxvYywKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCQkJCQlzdGFydF9lbGVtLm9wci5uYW1lKTsKKwkgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIENPTExfU1lNOgorCSAgICAgICplcnIgPSBidWlsZF9jb2xsYXRpbmdfc3ltYm9sIChzYmNzZXQsCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkJCQkJICAgICBtYmNzZXQsICZjb2xsX3N5bV9hbGxvYywKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCQkJCQkgICAgIHN0YXJ0X2VsZW0ub3ByLm5hbWUpOworCSAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgQ0hBUl9DTEFTUzoKKwkgICAgICAqZXJyID0gYnVpbGRfY2hhcmNsYXNzIChyZWdleHAtPnRyYW5zLCBzYmNzZXQsCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkJCQkgICAgICBtYmNzZXQsICZjaGFyX2NsYXNzX2FsbG9jLAorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJCQkJICAgICAgKGNvbnN0IGNoYXIgKikgc3RhcnRfZWxlbS5vcHIubmFtZSwgc3ludGF4KTsKKwkgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCSAgICAgIGJyZWFrOworCSAgICBkZWZhdWx0OgorCSAgICAgIGFzc2VydCAoMCk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgICBpZiAoQkUgKHRva2VuLT50eXBlID09IEVORF9PRl9SRSwgMCkpCisJeworCSAgKmVyciA9IFJFR19FQlJBQ0s7CisJICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCX0KKyAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9DTE9TRV9CUkFDS0VUKQorCWJyZWFrOworICAgIH0KKworICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhwLCB0b2tlbl9sZW4pOyAvKiBTa2lwIGEgdG9rZW4uICAqLworCisgIC8qIElmIGl0IGlzIG5vbi1tYXRjaGluZyBsaXN0LiAgKi8KKyAgaWYgKG5vbl9tYXRjaCkKKyAgICBiaXRzZXRfbm90IChzYmNzZXQpOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgLyogRW5zdXJlIG9ubHkgc2luZ2xlIGJ5dGUgY2hhcmFjdGVycyBhcmUgc2V0LiAgKi8KKyAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisgICAgYml0c2V0X21hc2sgKHNiY3NldCwgZGZhLT5zYl9jaGFyKTsKKworICBpZiAobWJjc2V0LT5ubWJjaGFycyB8fCBtYmNzZXQtPm5jb2xsX3N5bXMgfHwgbWJjc2V0LT5uZXF1aXZfY2xhc3NlcworICAgICAgfHwgbWJjc2V0LT5ucmFuZ2VzIHx8IChkZmEtPm1iX2N1cl9tYXggPiAxICYmIChtYmNzZXQtPm5jaGFyX2NsYXNzZXMKKwkJCQkJCSAgICAgfHwgbWJjc2V0LT5ub25fbWF0Y2gpKSkKKyAgICB7CisgICAgICBiaW5fdHJlZV90ICptYmNfdHJlZTsKKyAgICAgIGludCBzYmNfaWR4OworICAgICAgLyogQnVpbGQgYSB0cmVlIGZvciBjb21wbGV4IGJyYWNrZXQuICAqLworICAgICAgZGZhLT5oYXNfbWJfbm9kZSA9IDE7CisgICAgICBicl90b2tlbi50eXBlID0gQ09NUExFWF9CUkFDS0VUOworICAgICAgYnJfdG9rZW4ub3ByLm1iY3NldCA9IG1iY3NldDsKKyAgICAgIG1iY190cmVlID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgJmJyX3Rva2VuKTsKKyAgICAgIGlmIChCRSAobWJjX3RyZWUgPT0gTlVMTCwgMCkpCisJZ290byBwYXJzZV9icmFja2V0X2V4cF9lc3BhY2U7CisgICAgICBmb3IgKHNiY19pZHggPSAwOyBzYmNfaWR4IDwgQklUU0VUX1dPUkRTOyArK3NiY19pZHgpCisJaWYgKHNiY3NldFtzYmNfaWR4XSkKKwkgIGJyZWFrOworICAgICAgLyogSWYgdGhlcmUgYXJlIG5vIGJpdHMgc2V0IGluIHNiY3NldCwgdGhlcmUgaXMgbm8gcG9pbnQKKwkgb2YgaGF2aW5nIGJvdGggU0lNUExFX0JSQUNLRVQgYW5kIENPTVBMRVhfQlJBQ0tFVC4gICovCisgICAgICBpZiAoc2JjX2lkeCA8IEJJVFNFVF9XT1JEUykKKwl7CisJICAvKiBCdWlsZCBhIHRyZWUgZm9yIHNpbXBsZSBicmFja2V0LiAgKi8KKwkgIGJyX3Rva2VuLnR5cGUgPSBTSU1QTEVfQlJBQ0tFVDsKKwkgIGJyX3Rva2VuLm9wci5zYmNzZXQgPSBzYmNzZXQ7CisJICB3b3JrX3RyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCAmYnJfdG9rZW4pOworCSAgaWYgKEJFICh3b3JrX3RyZWUgPT0gTlVMTCwgMCkpCisJICAgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZXNwYWNlOworCisJICAvKiBUaGVuIGpvaW4gdGhlbSBieSBBTFQgbm9kZS4gICovCisJICB3b3JrX3RyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB3b3JrX3RyZWUsIG1iY190cmVlLCBPUF9BTFQpOworCSAgaWYgKEJFICh3b3JrX3RyZWUgPT0gTlVMTCwgMCkpCisJICAgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZXNwYWNlOworCX0KKyAgICAgIGVsc2UKKwl7CisJICByZV9mcmVlIChzYmNzZXQpOworCSAgd29ya190cmVlID0gbWJjX3RyZWU7CisJfQorICAgIH0KKyAgZWxzZQorI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICAgIHsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgZnJlZV9jaGFyc2V0IChtYmNzZXQpOworI2VuZGlmCisgICAgICAvKiBCdWlsZCBhIHRyZWUgZm9yIHNpbXBsZSBicmFja2V0LiAgKi8KKyAgICAgIGJyX3Rva2VuLnR5cGUgPSBTSU1QTEVfQlJBQ0tFVDsKKyAgICAgIGJyX3Rva2VuLm9wci5zYmNzZXQgPSBzYmNzZXQ7CisgICAgICB3b3JrX3RyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCAmYnJfdG9rZW4pOworICAgICAgaWYgKEJFICh3b3JrX3RyZWUgPT0gTlVMTCwgMCkpCisJZ290byBwYXJzZV9icmFja2V0X2V4cF9lc3BhY2U7CisgICAgfQorICByZXR1cm4gd29ya190cmVlOworCisgcGFyc2VfYnJhY2tldF9leHBfZXNwYWNlOgorICAqZXJyID0gUkVHX0VTUEFDRTsKKyBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjoKKyAgcmVfZnJlZSAoc2Jjc2V0KTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBmcmVlX2NoYXJzZXQgKG1iY3NldCk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFBhcnNlIGFuIGVsZW1lbnQgaW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitwYXJzZV9icmFja2V0X2VsZW1lbnQgKGJyYWNrZXRfZWxlbV90ICplbGVtLCByZV9zdHJpbmdfdCAqcmVnZXhwLAorCQkgICAgICAgcmVfdG9rZW5fdCAqdG9rZW4sIGludCB0b2tlbl9sZW4sIHJlX2RmYV90ICpkZmEsCisJCSAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LCBpbnQgYWNjZXB0X2h5cGhlbikKK3sKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpbnQgY3VyX2NoYXJfc2l6ZTsKKyAgY3VyX2NoYXJfc2l6ZSA9IHJlX3N0cmluZ19jaGFyX3NpemVfYXQgKHJlZ2V4cCwgcmVfc3RyaW5nX2N1cl9pZHggKHJlZ2V4cCkpOworICBpZiAoY3VyX2NoYXJfc2l6ZSA+IDEpCisgICAgeworICAgICAgZWxlbS0+dHlwZSA9IE1CX0NIQVI7CisgICAgICBlbGVtLT5vcHIud2NoID0gcmVfc3RyaW5nX3djaGFyX2F0IChyZWdleHAsIHJlX3N0cmluZ19jdXJfaWR4IChyZWdleHApKTsKKyAgICAgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIGN1cl9jaGFyX3NpemUpOworICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhwLCB0b2tlbl9sZW4pOyAvKiBTa2lwIGEgdG9rZW4uICAqLworICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9DT0xMX0VMRU0gfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9DSEFSX0NMQVNTCisgICAgICB8fCB0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0VRVUlWX0NMQVNTKQorICAgIHJldHVybiBwYXJzZV9icmFja2V0X3N5bWJvbCAoZWxlbSwgcmVnZXhwLCB0b2tlbik7CisgIGlmIChCRSAodG9rZW4tPnR5cGUgPT0gT1BfQ0hBUlNFVF9SQU5HRSwgMCkgJiYgIWFjY2VwdF9oeXBoZW4pCisgICAgeworICAgICAgLyogQSAnLScgbXVzdCBvbmx5IGFwcGVhciBhcyBhbnl0aGluZyBidXQgYSByYW5nZSBpbmRpY2F0b3IgYmVmb3JlCisJIHRoZSBjbG9zaW5nIGJyYWNrZXQuICBFdmVyeXRoaW5nIGVsc2UgaXMgYW4gZXJyb3IuICAqLworICAgICAgcmVfdG9rZW5fdCB0b2tlbjI7CisgICAgICAodm9pZCkgcGVla190b2tlbl9icmFja2V0ICgmdG9rZW4yLCByZWdleHAsIHN5bnRheCk7CisgICAgICBpZiAodG9rZW4yLnR5cGUgIT0gT1BfQ0xPU0VfQlJBQ0tFVCkKKwkvKiBUaGUgYWN0dWFsIGVycm9yIHZhbHVlIGlzIG5vdCBzdGFuZGFyZGl6ZWQgc2luY2UgdGhpcyB3aG9sZQorCSAgIGNhc2UgaXMgdW5kZWZpbmVkLiAgQnV0IEVSQU5HRSBtYWtlcyBnb29kIHNlbnNlLiAgKi8KKwlyZXR1cm4gUkVHX0VSQU5HRTsKKyAgICB9CisgIGVsZW0tPnR5cGUgPSBTQl9DSEFSOworICBlbGVtLT5vcHIuY2ggPSB0b2tlbi0+b3ByLmM7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogUGFyc2UgYSBicmFja2V0IHN5bWJvbCBpbiB0aGUgYnJhY2tldCBleHByZXNzaW9uLiAgQnJhY2tldCBzeW1ib2xzIGFyZQorICAgc3VjaCBhcyBbOjxjaGFyYWN0ZXJfY2xhc3M+Ol0sIFsuPGNvbGxhdGluZ19lbGVtZW50Pi5dLCBhbmQKKyAgIFs9PGVxdWl2YWxlbnRfY2xhc3M+PV0uICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcGFyc2VfYnJhY2tldF9zeW1ib2wgKGJyYWNrZXRfZWxlbV90ICplbGVtLCByZV9zdHJpbmdfdCAqcmVnZXhwLAorCQkgICAgICByZV90b2tlbl90ICp0b2tlbikKK3sKKyAgdW5zaWduZWQgY2hhciBjaCwgZGVsaW0gPSB0b2tlbi0+b3ByLmM7CisgIGludCBpID0gMDsKKyAgaWYgKHJlX3N0cmluZ19lb2kocmVnZXhwKSkKKyAgICByZXR1cm4gUkVHX0VCUkFDSzsKKyAgZm9yICg7OyArK2kpCisgICAgeworICAgICAgaWYgKGkgPj0gQlJBQ0tFVF9OQU1FX0JVRl9TSVpFKQorCXJldHVybiBSRUdfRUJSQUNLOworICAgICAgaWYgKHRva2VuLT50eXBlID09IE9QX09QRU5fQ0hBUl9DTEFTUykKKwljaCA9IHJlX3N0cmluZ19mZXRjaF9ieXRlX2Nhc2UgKHJlZ2V4cCk7CisgICAgICBlbHNlCisJY2ggPSByZV9zdHJpbmdfZmV0Y2hfYnl0ZSAocmVnZXhwKTsKKyAgICAgIGlmIChyZV9zdHJpbmdfZW9pKHJlZ2V4cCkpCisJcmV0dXJuIFJFR19FQlJBQ0s7CisgICAgICBpZiAoY2ggPT0gZGVsaW0gJiYgcmVfc3RyaW5nX3BlZWtfYnl0ZSAocmVnZXhwLCAwKSA9PSAnXScpCisJYnJlYWs7CisgICAgICBlbGVtLT5vcHIubmFtZVtpXSA9IGNoOworICAgIH0KKyAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgMSk7CisgIGVsZW0tPm9wci5uYW1lW2ldID0gJ1wwJzsKKyAgc3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBPUF9PUEVOX0NPTExfRUxFTToKKyAgICAgIGVsZW0tPnR5cGUgPSBDT0xMX1NZTTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfT1BFTl9FUVVJVl9DTEFTUzoKKyAgICAgIGVsZW0tPnR5cGUgPSBFUVVJVl9DTEFTUzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfT1BFTl9DSEFSX0NMQVNTOgorICAgICAgZWxlbS0+dHlwZSA9IENIQVJfQ0xBU1M7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKyAgLyogSGVscGVyIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cC4KKyAgICAgQnVpbGQgdGhlIGVxdWl2YWxlbmNlIGNsYXNzIHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IE5BTUUuCisgICAgIFRoZSByZXN1bHQgYXJlIHdyaXR0ZW4gdG8gTUJDU0VUIGFuZCBTQkNTRVQuCisgICAgIEVRVUlWX0NMQVNTX0FMTE9DIGlzIHRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiBtYmNzZXQtPmVxdWl2X2NsYXNzZXMsCisgICAgIGlzIGEgcG9pbnRlciBhcmd1bWVudCBzaW5jZSB3ZSBtYXkgdXBkYXRlIGl0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorYnVpbGRfZXF1aXZfY2xhc3MgKGJpdHNldF90IHNiY3NldCwgcmVfY2hhcnNldF90ICptYmNzZXQsCisJCSAgIGludCAqZXF1aXZfY2xhc3NfYWxsb2MsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpCisjZWxzZSAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK2J1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpCisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCit7CisjaWZkZWYgX0xJQkMKKyAgdWludDMyX3QgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKyAgaWYgKG5ydWxlcyAhPSAwKQorICAgIHsKKyAgICAgIGNvbnN0IGludDMyX3QgKnRhYmxlLCAqaW5kaXJlY3Q7CisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp3ZWlnaHRzLCAqZXh0cmEsICpjcDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgY2hhcl9idWZbMl07CisgICAgICBpbnQzMl90IGlkeDEsIGlkeDI7CisgICAgICB1bnNpZ25lZCBpbnQgY2g7CisgICAgICBzaXplX3QgbGVuOworICAgICAgLyogVGhpcyAjaW5jbHVkZSBkZWZpbmVzIGEgbG9jYWwgZnVuY3Rpb24hICAqLworIyBpbmNsdWRlIDxsb2NhbGUvd2VpZ2h0Lmg+CisgICAgICAvKiBDYWxjdWxhdGUgdGhlIGluZGV4IGZvciBlcXVpdmFsZW5jZSBjbGFzcy4gICovCisgICAgICBjcCA9IG5hbWU7CisgICAgICB0YWJsZSA9IChjb25zdCBpbnQzMl90ICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9UQUJMRU1CKTsKKyAgICAgIHdlaWdodHMgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKwkJCQkJICAgICAgIF9OTF9DT0xMQVRFX1dFSUdIVE1CKTsKKyAgICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisJCQkJCQkgICBfTkxfQ09MTEFURV9FWFRSQU1CKTsKKyAgICAgIGluZGlyZWN0ID0gKGNvbnN0IGludDMyX3QgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisJCQkJCQlfTkxfQ09MTEFURV9JTkRJUkVDVE1CKTsKKyAgICAgIGlkeDEgPSBmaW5kaWR4ICgmY3ApOworICAgICAgaWYgKEJFIChpZHgxID09IDAgfHwgY3AgPCBuYW1lICsgc3RybGVuICgoY29uc3QgY2hhciAqKSBuYW1lKSwgMCkpCisJLyogVGhpcyBpc24ndCBhIHZhbGlkIGNoYXJhY3Rlci4gICovCisJcmV0dXJuIFJFR19FQ09MTEFURTsKKworICAgICAgLyogQnVpbGQgc2luZ2xlIGJ5dGUgbWF0Y2hpbmcgdGFibGUgZm9yIHRoaXMgZXF1aXZhbGVuY2UgY2xhc3MuICAqLworICAgICAgY2hhcl9idWZbMV0gPSAodW5zaWduZWQgY2hhcikgJ1wwJzsKKyAgICAgIGxlbiA9IHdlaWdodHNbaWR4MSAmIDB4ZmZmZmZmXTsKKyAgICAgIGZvciAoY2ggPSAwOyBjaCA8IFNCQ19NQVg7ICsrY2gpCisJeworCSAgY2hhcl9idWZbMF0gPSBjaDsKKwkgIGNwID0gY2hhcl9idWY7CisJICBpZHgyID0gZmluZGlkeCAoJmNwKTsKKy8qCisJICBpZHgyID0gdGFibGVbY2hdOworKi8KKwkgIGlmIChpZHgyID09IDApCisJICAgIC8qIFRoaXMgaXNuJ3QgYSB2YWxpZCBjaGFyYWN0ZXIuICAqLworCSAgICBjb250aW51ZTsKKwkgIC8qIENvbXBhcmUgb25seSBpZiB0aGUgbGVuZ3RoIG1hdGNoZXMgYW5kIHRoZSBjb2xsYXRpb24gcnVsZQorCSAgICAgaW5kZXggaXMgdGhlIHNhbWUuICAqLworCSAgaWYgKGxlbiA9PSB3ZWlnaHRzW2lkeDIgJiAweGZmZmZmZl0gJiYgKGlkeDEgPj4gMjQpID09IChpZHgyID4+IDI0KSkKKwkgICAgeworCSAgICAgIGludCBjbnQgPSAwOworCisJICAgICAgd2hpbGUgKGNudCA8PSBsZW4gJiYKKwkJICAgICB3ZWlnaHRzWyhpZHgxICYgMHhmZmZmZmYpICsgMSArIGNudF0KKwkJICAgICA9PSB3ZWlnaHRzWyhpZHgyICYgMHhmZmZmZmYpICsgMSArIGNudF0pCisJCSsrY250OworCisJICAgICAgaWYgKGNudCA+IGxlbikKKwkJYml0c2V0X3NldCAoc2Jjc2V0LCBjaCk7CisJICAgIH0KKwl9CisgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBhcnJheSBoYXMgZW5vdWdoIHNwYWNlLiAgKi8KKyAgICAgIGlmIChCRSAoKmVxdWl2X2NsYXNzX2FsbG9jID09IG1iY3NldC0+bmVxdWl2X2NsYXNzZXMsIDApKQorCXsKKwkgIC8qIE5vdCBlbm91Z2gsIHJlYWxsb2MgaXQuICAqLworCSAgLyogKzEgaW4gY2FzZSBvZiBtYmNzZXQtPm5lcXVpdl9jbGFzc2VzIGlzIDAuICAqLworCSAgaW50IG5ld19lcXVpdl9jbGFzc19hbGxvYyA9IDIgKiBtYmNzZXQtPm5lcXVpdl9jbGFzc2VzICsgMTsKKwkgIC8qIFVzZSByZWFsbG9jIHNpbmNlIHRoZSBhcnJheSBpcyBOVUxMIGlmICphbGxvYyA9PSAwLiAgKi8KKwkgIGludDMyX3QgKm5ld19lcXVpdl9jbGFzc2VzID0gcmVfcmVhbGxvYyAobWJjc2V0LT5lcXVpdl9jbGFzc2VzLAorCQkJCQkJICAgaW50MzJfdCwKKwkJCQkJCSAgIG5ld19lcXVpdl9jbGFzc19hbGxvYyk7CisJICBpZiAoQkUgKG5ld19lcXVpdl9jbGFzc2VzID09IE5VTEwsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwkgIG1iY3NldC0+ZXF1aXZfY2xhc3NlcyA9IG5ld19lcXVpdl9jbGFzc2VzOworCSAgKmVxdWl2X2NsYXNzX2FsbG9jID0gbmV3X2VxdWl2X2NsYXNzX2FsbG9jOworCX0KKyAgICAgIG1iY3NldC0+ZXF1aXZfY2xhc3Nlc1ttYmNzZXQtPm5lcXVpdl9jbGFzc2VzKytdID0gaWR4MTsKKyAgICB9CisgIGVsc2UKKyNlbmRpZiAvKiBfTElCQyAqLworICAgIHsKKyAgICAgIGlmIChCRSAoc3RybGVuICgoY29uc3QgY2hhciAqKSBuYW1lKSAhPSAxLCAwKSkKKwlyZXR1cm4gUkVHX0VDT0xMQVRFOworICAgICAgYml0c2V0X3NldCAoc2Jjc2V0LCAqbmFtZSk7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKyAgLyogSGVscGVyIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cC4KKyAgICAgQnVpbGQgdGhlIGNoYXJhY3RlciBjbGFzcyB3aGljaCBpcyByZXByZXNlbnRlZCBieSBOQU1FLgorICAgICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgICBDSEFSX0NMQVNTX0FMTE9DIGlzIHRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiBtYmNzZXQtPmNoYXJfY2xhc3NlcywKKyAgICAgaXMgYSBwb2ludGVyIGFyZ3VtZW50IHNpbmNlIHdlIG1heSB1cGRhdGUgaXQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCitidWlsZF9jaGFyY2xhc3MgKFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBiaXRzZXRfdCBzYmNzZXQsCisJCSByZV9jaGFyc2V0X3QgKm1iY3NldCwgaW50ICpjaGFyX2NsYXNzX2FsbG9jLAorCQkgY29uc3QgY2hhciAqY2xhc3NfbmFtZSwgcmVnX3N5bnRheF90IHN5bnRheCkKKyNlbHNlIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworYnVpbGRfY2hhcmNsYXNzIChSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgYml0c2V0X3Qgc2Jjc2V0LAorCQkgY29uc3QgY2hhciAqY2xhc3NfbmFtZSwgcmVnX3N5bnRheF90IHN5bnRheCkKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3sKKyAgaW50IGk7CisKKyAgLyogSW4gY2FzZSBvZiBSRUdfSUNBU0UgInVwcGVyIiBhbmQgImxvd2VyIiBtYXRjaCB0aGUgYm90aCBvZgorICAgICB1cHBlciBhbmQgbG93ZXIgY2FzZXMuICAqLworICBpZiAoKHN5bnRheCAmIFJFX0lDQVNFKQorICAgICAgJiYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgInVwcGVyIikgPT0gMCB8fCBzdHJjbXAgKGNsYXNzX25hbWUsICJsb3dlciIpID09IDApKQorICAgIGNsYXNzX25hbWUgPSAiYWxwaGEiOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworICBpZiAoQkUgKCpjaGFyX2NsYXNzX2FsbG9jID09IG1iY3NldC0+bmNoYXJfY2xhc3NlcywgMCkpCisgICAgeworICAgICAgLyogTm90IGVub3VnaCwgcmVhbGxvYyBpdC4gICovCisgICAgICAvKiArMSBpbiBjYXNlIG9mIG1iY3NldC0+bmNoYXJfY2xhc3NlcyBpcyAwLiAgKi8KKyAgICAgIGludCBuZXdfY2hhcl9jbGFzc19hbGxvYyA9IDIgKiBtYmNzZXQtPm5jaGFyX2NsYXNzZXMgKyAxOworICAgICAgLyogVXNlIHJlYWxsb2Mgc2luY2UgYXJyYXkgaXMgTlVMTCBpZiAqYWxsb2MgPT0gMC4gICovCisgICAgICB3Y3R5cGVfdCAqbmV3X2NoYXJfY2xhc3NlcyA9IHJlX3JlYWxsb2MgKG1iY3NldC0+Y2hhcl9jbGFzc2VzLCB3Y3R5cGVfdCwKKwkJCQkJICAgICAgIG5ld19jaGFyX2NsYXNzX2FsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2NoYXJfY2xhc3NlcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIG1iY3NldC0+Y2hhcl9jbGFzc2VzID0gbmV3X2NoYXJfY2xhc3NlczsKKyAgICAgICpjaGFyX2NsYXNzX2FsbG9jID0gbmV3X2NoYXJfY2xhc3NfYWxsb2M7CisgICAgfQorICBtYmNzZXQtPmNoYXJfY2xhc3Nlc1ttYmNzZXQtPm5jaGFyX2NsYXNzZXMrK10gPSBfX3djdHlwZSAoY2xhc3NfbmFtZSk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworI2RlZmluZSBCVUlMRF9DSEFSQ0xBU1NfTE9PUChjdHlwZV9mdW5jKQlcCisgIGRvIHsJCQkJCQlcCisgICAgaWYgKEJFICh0cmFucyAhPSBOVUxMLCAwKSkJCQlcCisgICAgICB7CQkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCBTQkNfTUFYOyArK2kpCQlcCisgIAkgIGlmIChjdHlwZV9mdW5jIChpKSkJCQlcCisJICAgIGJpdHNldF9zZXQgKHNiY3NldCwgdHJhbnNbaV0pOwlcCisgICAgICB9CQkJCQkJXAorICAgIGVsc2UJCQkJCVwKKyAgICAgIHsJCQkJCQlcCisJZm9yIChpID0gMDsgaSA8IFNCQ19NQVg7ICsraSkJCVwKKyAgCSAgaWYgKGN0eXBlX2Z1bmMgKGkpKQkJCVwKKwkgICAgYml0c2V0X3NldCAoc2Jjc2V0LCBpKTsJCVwKKyAgICAgIH0JCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyAgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImFsbnVtIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNhbG51bSk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImNudHJsIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNjbnRybCk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImxvd2VyIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNsb3dlcik7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgInNwYWNlIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNzcGFjZSk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImFscGhhIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNhbHBoYSk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImRpZ2l0IikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNkaWdpdCk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgInByaW50IikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNwcmludCk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgInVwcGVyIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXN1cHBlcik7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImJsYW5rIikgPT0gMCkKKyNpZm5kZWYgR0FXSworICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc2JsYW5rKTsKKyNlbHNlCisgICAgLyogc2VlIGNvbW1lbnRzIGFib3ZlICovCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzX2JsYW5rKTsKKyNlbmRpZgorICBlbHNlIGlmIChzdHJjbXAgKGNsYXNzX25hbWUsICJncmFwaCIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzZ3JhcGgpOworICBlbHNlIGlmIChzdHJjbXAgKGNsYXNzX25hbWUsICJwdW5jdCIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzcHVuY3QpOworICBlbHNlIGlmIChzdHJjbXAgKGNsYXNzX25hbWUsICJ4ZGlnaXQiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc3hkaWdpdCk7CisgIGVsc2UKKyAgICByZXR1cm4gUkVHX0VDVFlQRTsKKworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK2J1aWxkX2NoYXJjbGFzc19vcCAocmVfZGZhX3QgKmRmYSwgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsCisJCSAgICBjb25zdCBjaGFyICpjbGFzc19uYW1lLAorCQkgICAgY29uc3QgY2hhciAqZXh0cmEsIGludCBub25fbWF0Y2gsCisJCSAgICByZWdfZXJyY29kZV90ICplcnIpCit7CisgIHJlX2JpdHNldF9wdHJfdCBzYmNzZXQ7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgcmVfY2hhcnNldF90ICptYmNzZXQ7CisgIGludCBhbGxvYyA9IDA7CisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgIHJlZ19lcnJjb2RlX3QgcmV0OworICByZV90b2tlbl90IGJyX3Rva2VuOworICBiaW5fdHJlZV90ICp0cmVlOworCisgIHNiY3NldCA9IChyZV9iaXRzZXRfcHRyX3QpIGNhbGxvYyAoc2l6ZW9mIChiaXRzZXRfdCksIDEpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIG1iY3NldCA9IChyZV9jaGFyc2V0X3QgKikgY2FsbG9jIChzaXplb2YgKHJlX2NoYXJzZXRfdCksIDEpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoQkUgKHNiY3NldCA9PSBOVUxMIHx8IG1iY3NldCA9PSBOVUxMLCAwKSkKKyNlbHNlIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICBpZiAoQkUgKHNiY3NldCA9PSBOVUxMLCAwKSkKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgICB7CisgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBpZiAobm9uX21hdGNoKQorICAgIHsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgbWJjc2V0LT5ub25fbWF0Y2ggPSAxOworI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICAgIH0KKworICAvKiBXZSBkb24ndCBjYXJlIHRoZSBzeW50YXggaW4gdGhpcyBjYXNlLiAgKi8KKyAgcmV0ID0gYnVpbGRfY2hhcmNsYXNzICh0cmFucywgc2Jjc2V0LAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJCQkgbWJjc2V0LCAmYWxsb2MsCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkJCSBjbGFzc19uYW1lLCAwKTsKKworICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgcmVfZnJlZSAoc2Jjc2V0KTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgZnJlZV9jaGFyc2V0IChtYmNzZXQpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgICAqZXJyID0gcmV0OworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAvKiBcdyBtYXRjaCAnXycgYWxzby4gICovCisgIGZvciAoOyAqZXh0cmE7IGV4dHJhKyspCisgICAgYml0c2V0X3NldCAoc2Jjc2V0LCAqZXh0cmEpOworCisgIC8qIElmIGl0IGlzIG5vbi1tYXRjaGluZyBsaXN0LiAgKi8KKyAgaWYgKG5vbl9tYXRjaCkKKyAgICBiaXRzZXRfbm90IChzYmNzZXQpOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgLyogRW5zdXJlIG9ubHkgc2luZ2xlIGJ5dGUgY2hhcmFjdGVycyBhcmUgc2V0LiAgKi8KKyAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisgICAgYml0c2V0X21hc2sgKHNiY3NldCwgZGZhLT5zYl9jaGFyKTsKKyNlbmRpZgorCisgIC8qIEJ1aWxkIGEgdHJlZSBmb3Igc2ltcGxlIGJyYWNrZXQuICAqLworICBicl90b2tlbi50eXBlID0gU0lNUExFX0JSQUNLRVQ7CisgIGJyX3Rva2VuLm9wci5zYmNzZXQgPSBzYmNzZXQ7CisgIHRyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCAmYnJfdG9rZW4pOworICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisgICAgZ290byBidWlsZF93b3JkX29wX2VzcGFjZTsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorICAgIHsKKyAgICAgIGJpbl90cmVlX3QgKm1iY190cmVlOworICAgICAgLyogQnVpbGQgYSB0cmVlIGZvciBjb21wbGV4IGJyYWNrZXQuICAqLworICAgICAgYnJfdG9rZW4udHlwZSA9IENPTVBMRVhfQlJBQ0tFVDsKKyAgICAgIGJyX3Rva2VuLm9wci5tYmNzZXQgPSBtYmNzZXQ7CisgICAgICBkZmEtPmhhc19tYl9ub2RlID0gMTsKKyAgICAgIG1iY190cmVlID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgJmJyX3Rva2VuKTsKKyAgICAgIGlmIChCRSAobWJjX3RyZWUgPT0gTlVMTCwgMCkpCisJZ290byBidWlsZF93b3JkX29wX2VzcGFjZTsKKyAgICAgIC8qIFRoZW4gam9pbiB0aGVtIGJ5IEFMVCBub2RlLiAgKi8KKyAgICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBtYmNfdHJlZSwgT1BfQUxUKTsKKyAgICAgIGlmIChCRSAobWJjX3RyZWUgIT0gTlVMTCwgMSkpCisJcmV0dXJuIHRyZWU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZnJlZV9jaGFyc2V0IChtYmNzZXQpOworICAgICAgcmV0dXJuIHRyZWU7CisgICAgfQorI2Vsc2UgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgIHJldHVybiB0cmVlOworI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworCisgYnVpbGRfd29yZF9vcF9lc3BhY2U6CisgIHJlX2ZyZWUgKHNiY3NldCk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgZnJlZV9jaGFyc2V0IChtYmNzZXQpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICplcnIgPSBSRUdfRVNQQUNFOworICByZXR1cm4gTlVMTDsKK30KKworLyogVGhpcyBpcyBpbnRlbmRlZCBmb3IgdGhlIGV4cHJlc3Npb25zIGxpa2UgImF7MSwzfSIuCisgICBGZXRjaCBhIG51bWJlciBmcm9tIGBpbnB1dCcsIGFuZCByZXR1cm4gdGhlIG51bWJlci4KKyAgIFJldHVybiAtMSwgaWYgdGhlIG51bWJlciBmaWVsZCBpcyBlbXB0eSBsaWtlICJ7LDF9Ii4KKyAgIFJldHVybiAtMiwgaWYgYW4gZXJyb3IgaGFzIG9jY3VycmVkLiAgKi8KKworc3RhdGljIGludAorZmV0Y2hfbnVtYmVyIChyZV9zdHJpbmdfdCAqaW5wdXQsIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3ludGF4KQoreworICBpbnQgbnVtID0gLTE7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgZmV0Y2hfdG9rZW4gKHRva2VuLCBpbnB1dCwgc3ludGF4KTsKKyAgICAgIGMgPSB0b2tlbi0+b3ByLmM7CisgICAgICBpZiAoQkUgKHRva2VuLT50eXBlID09IEVORF9PRl9SRSwgMCkpCisJcmV0dXJuIC0yOworICAgICAgaWYgKHRva2VuLT50eXBlID09IE9QX0NMT1NFX0RVUF9OVU0gfHwgYyA9PSAnLCcpCisJYnJlYWs7CisgICAgICBudW0gPSAoKHRva2VuLT50eXBlICE9IENIQVJBQ1RFUiB8fCBjIDwgJzAnIHx8ICc5JyA8IGMgfHwgbnVtID09IC0yKQorCSAgICAgPyAtMiA6ICgobnVtID09IC0xKSA/IGMgLSAnMCcgOiBudW0gKiAxMCArIGMgLSAnMCcpKTsKKyAgICAgIG51bSA9IChudW0gPiBSRV9EVVBfTUFYKSA/IC0yIDogbnVtOworICAgIH0KKyAgcmV0dXJuIG51bTsKK30KKwwKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIHZvaWQKK2ZyZWVfY2hhcnNldCAocmVfY2hhcnNldF90ICpjc2V0KQoreworICByZV9mcmVlIChjc2V0LT5tYmNoYXJzKTsKKyMgaWZkZWYgX0xJQkMKKyAgcmVfZnJlZSAoY3NldC0+Y29sbF9zeW1zKTsKKyAgcmVfZnJlZSAoY3NldC0+ZXF1aXZfY2xhc3Nlcyk7CisgIHJlX2ZyZWUgKGNzZXQtPnJhbmdlX3N0YXJ0cyk7CisgIHJlX2ZyZWUgKGNzZXQtPnJhbmdlX2VuZHMpOworIyBlbmRpZgorICByZV9mcmVlIChjc2V0LT5jaGFyX2NsYXNzZXMpOworICByZV9mcmVlIChjc2V0KTsKK30KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworDAorLyogRnVuY3Rpb25zIGZvciBiaW5hcnkgdHJlZSBvcGVyYXRpb24uICAqLworCisvKiBDcmVhdGUgYSB0cmVlIG5vZGUuICAqLworCitzdGF0aWMgYmluX3RyZWVfdCAqCitjcmVhdGVfdHJlZSAocmVfZGZhX3QgKmRmYSwgYmluX3RyZWVfdCAqbGVmdCwgYmluX3RyZWVfdCAqcmlnaHQsCisJICAgICByZV90b2tlbl90eXBlX3QgdHlwZSkKK3sKKyAgcmVfdG9rZW5fdCB0OworICB0LnR5cGUgPSB0eXBlOworICByZXR1cm4gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgbGVmdCwgcmlnaHQsICZ0KTsKK30KKworc3RhdGljIGJpbl90cmVlX3QgKgorY3JlYXRlX3Rva2VuX3RyZWUgKHJlX2RmYV90ICpkZmEsIGJpbl90cmVlX3QgKmxlZnQsIGJpbl90cmVlX3QgKnJpZ2h0LAorCQkgICBjb25zdCByZV90b2tlbl90ICp0b2tlbikKK3sKKyAgYmluX3RyZWVfdCAqdHJlZTsKKyAgaWYgKEJFIChkZmEtPnN0cl90cmVlX3N0b3JhZ2VfaWR4ID09IEJJTl9UUkVFX1NUT1JBR0VfU0laRSwgMCkpCisgICAgeworICAgICAgYmluX3RyZWVfc3RvcmFnZV90ICpzdG9yYWdlID0gcmVfbWFsbG9jIChiaW5fdHJlZV9zdG9yYWdlX3QsIDEpOworCisgICAgICBpZiAoc3RvcmFnZSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworICAgICAgc3RvcmFnZS0+bmV4dCA9IGRmYS0+c3RyX3RyZWVfc3RvcmFnZTsKKyAgICAgIGRmYS0+c3RyX3RyZWVfc3RvcmFnZSA9IHN0b3JhZ2U7CisgICAgICBkZmEtPnN0cl90cmVlX3N0b3JhZ2VfaWR4ID0gMDsKKyAgICB9CisgIHRyZWUgPSAmZGZhLT5zdHJfdHJlZV9zdG9yYWdlLT5kYXRhW2RmYS0+c3RyX3RyZWVfc3RvcmFnZV9pZHgrK107CisKKyAgdHJlZS0+cGFyZW50ID0gTlVMTDsKKyAgdHJlZS0+bGVmdCA9IGxlZnQ7CisgIHRyZWUtPnJpZ2h0ID0gcmlnaHQ7CisgIHRyZWUtPnRva2VuID0gKnRva2VuOworICB0cmVlLT50b2tlbi5kdXBsaWNhdGVkID0gMDsKKyAgdHJlZS0+dG9rZW4ub3B0X3N1YmV4cCA9IDA7CisgIHRyZWUtPmZpcnN0ID0gTlVMTDsKKyAgdHJlZS0+bmV4dCA9IE5VTEw7CisgIHRyZWUtPm5vZGVfaWR4ID0gLTE7CisKKyAgaWYgKGxlZnQgIT0gTlVMTCkKKyAgICBsZWZ0LT5wYXJlbnQgPSB0cmVlOworICBpZiAocmlnaHQgIT0gTlVMTCkKKyAgICByaWdodC0+cGFyZW50ID0gdHJlZTsKKyAgcmV0dXJuIHRyZWU7Cit9CisKKy8qIE1hcmsgdGhlIHRyZWUgU1JDIGFzIGFuIG9wdGlvbmFsIHN1YmV4cHJlc3Npb24uCisgICBUbyBiZSBjYWxsZWQgZnJvbSBwcmVvcmRlciBvciBwb3N0b3JkZXIuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorbWFya19vcHRfc3ViZXhwICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgaW50IGlkeCA9IChpbnQpIChpbnRwdHJfdCkgZXh0cmE7CisgIGlmIChub2RlLT50b2tlbi50eXBlID09IFNVQkVYUCAmJiBub2RlLT50b2tlbi5vcHIuaWR4ID09IGlkeCkKKyAgICBub2RlLT50b2tlbi5vcHRfc3ViZXhwID0gMTsKKworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEZyZWUgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaW5zaWRlIE5PREUuICovCisKK3N0YXRpYyB2b2lkCitmcmVlX3Rva2VuIChyZV90b2tlbl90ICpub2RlKQoreworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChub2RlLT50eXBlID09IENPTVBMRVhfQlJBQ0tFVCAmJiBub2RlLT5kdXBsaWNhdGVkID09IDApCisgICAgZnJlZV9jaGFyc2V0IChub2RlLT5vcHIubWJjc2V0KTsKKyAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgaWYgKG5vZGUtPnR5cGUgPT0gU0lNUExFX0JSQUNLRVQgJiYgbm9kZS0+ZHVwbGljYXRlZCA9PSAwKQorICAgICAgcmVfZnJlZSAobm9kZS0+b3ByLnNiY3NldCk7Cit9CisKKy8qIFdvcmtlciBmdW5jdGlvbiBmb3IgdHJlZSB3YWxraW5nLiAgRnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpbnNpZGUgTk9ERQorICAgYW5kIGl0cyBjaGlsZHJlbi4gKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ZyZWVfdHJlZSAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpCit7CisgIGZyZWVfdG9rZW4gKCZub2RlLT50b2tlbik7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworCisvKiBEdXBsaWNhdGUgdGhlIG5vZGUgU1JDLCBhbmQgcmV0dXJuIG5ldyBub2RlLiAgVGhpcyBpcyBhIHByZW9yZGVyCisgICB2aXNpdCBzaW1pbGFyIHRvIHRoZSBvbmUgaW1wbGVtZW50ZWQgYnkgdGhlIGdlbmVyaWMgdmlzaXRvciwgYnV0CisgICB3ZSBuZWVkIG1vcmUgaW5mcmFzdHJ1Y3R1cmUgdG8gbWFpbnRhaW4gdHdvIHBhcmFsbGVsIHRyZWVzIC0tLSBzbywKKyAgIGl0J3MgZWFzaWVyIHRvIGR1cGxpY2F0ZS4gICovCisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK2R1cGxpY2F0ZV90cmVlIChjb25zdCBiaW5fdHJlZV90ICpyb290LCByZV9kZmFfdCAqZGZhKQoreworICBjb25zdCBiaW5fdHJlZV90ICpub2RlOworICBiaW5fdHJlZV90ICpkdXBfcm9vdDsKKyAgYmluX3RyZWVfdCAqKnBfbmV3ID0gJmR1cF9yb290LCAqZHVwX25vZGUgPSByb290LT5wYXJlbnQ7CisKKyAgZm9yIChub2RlID0gcm9vdDsgOyApCisgICAgeworICAgICAgLyogQ3JlYXRlIGEgbmV3IHRyZWUgYW5kIGxpbmsgaXQgYmFjayB0byB0aGUgY3VycmVudCBwYXJlbnQuICAqLworICAgICAgKnBfbmV3ID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgJm5vZGUtPnRva2VuKTsKKyAgICAgIGlmICgqcF9uZXcgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKyAgICAgICgqcF9uZXcpLT5wYXJlbnQgPSBkdXBfbm9kZTsKKyAgICAgICgqcF9uZXcpLT50b2tlbi5kdXBsaWNhdGVkID0gMTsKKyAgICAgIGR1cF9ub2RlID0gKnBfbmV3OworCisgICAgICAvKiBHbyB0byB0aGUgbGVmdCBub2RlLCBvciB1cCBhbmQgdG8gdGhlIHJpZ2h0LiAgKi8KKyAgICAgIGlmIChub2RlLT5sZWZ0KQorCXsKKwkgIG5vZGUgPSBub2RlLT5sZWZ0OworCSAgcF9uZXcgPSAmZHVwX25vZGUtPmxlZnQ7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNvbnN0IGJpbl90cmVlX3QgKnByZXYgPSBOVUxMOworCSAgd2hpbGUgKG5vZGUtPnJpZ2h0ID09IHByZXYgfHwgbm9kZS0+cmlnaHQgPT0gTlVMTCkKKwkgICAgeworCSAgICAgIHByZXYgPSBub2RlOworCSAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnQ7CisJICAgICAgZHVwX25vZGUgPSBkdXBfbm9kZS0+cGFyZW50OworCSAgICAgIGlmICghbm9kZSkKKwkJcmV0dXJuIGR1cF9yb290OworCSAgICB9CisJICBub2RlID0gbm9kZS0+cmlnaHQ7CisJICBwX25ldyA9ICZkdXBfbm9kZS0+cmlnaHQ7CisJfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdleC5jIGIvY29tcGF0L3JlZ2V4L3JlZ2V4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmNGE1ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9yZWdleC9yZWdleC5jCkBAIC0wLDAgKzEsODggQEAKKy8qIEV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhbmQgc2VhcmNoIGxpYnJhcnkuCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IElzYW11IEhhc2VnYXdhIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisvKiBNYWtlIHN1cmUgbm8gb25lIGNvbXBpbGVzIHRoaXMgY29kZSB3aXRoIGEgQysrIGNvbXBpbGVyLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworIyBlcnJvciAiVGhpcyBpcyBDIGNvZGUsIHVzZSBhIEMgY29tcGlsZXIiCisjZW5kaWYKKworI2lmZGVmIF9MSUJDCisvKiBXZSBoYXZlIHRvIGtlZXAgdGhlIG5hbWVzcGFjZSBjbGVhbi4gICovCisjIGRlZmluZSByZWdmcmVlKHByZWcpIF9fcmVnZnJlZSAocHJlZykKKyMgZGVmaW5lIHJlZ2V4ZWMocHIsIHN0LCBubSwgcG0sIGVmKSBfX3JlZ2V4ZWMgKHByLCBzdCwgbm0sIHBtLCBlZikKKyMgZGVmaW5lIHJlZ2NvbXAocHJlZywgcGF0dGVybiwgY2ZsYWdzKSBfX3JlZ2NvbXAgKHByZWcsIHBhdHRlcm4sIGNmbGFncykKKyMgZGVmaW5lIHJlZ2Vycm9yKGVycmNvZGUsIHByZWcsIGVycmJ1ZiwgZXJyYnVmX3NpemUpIFwKKwlfX3JlZ2Vycm9yKGVycmNvZGUsIHByZWcsIGVycmJ1ZiwgZXJyYnVmX3NpemUpCisjIGRlZmluZSByZV9zZXRfcmVnaXN0ZXJzKGJ1LCByZSwgbnUsIHN0LCBlbikgXAorCV9fcmVfc2V0X3JlZ2lzdGVycyAoYnUsIHJlLCBudSwgc3QsIGVuKQorIyBkZWZpbmUgcmVfbWF0Y2hfMihidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsIHBvcywgcmVncywgc3RvcCkgXAorCV9fcmVfbWF0Y2hfMiAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLCBwb3MsIHJlZ3MsIHN0b3ApCisjIGRlZmluZSByZV9tYXRjaChidWZwLCBzdHJpbmcsIHNpemUsIHBvcywgcmVncykgXAorCV9fcmVfbWF0Y2ggKGJ1ZnAsIHN0cmluZywgc2l6ZSwgcG9zLCByZWdzKQorIyBkZWZpbmUgcmVfc2VhcmNoKGJ1ZnAsIHN0cmluZywgc2l6ZSwgc3RhcnRwb3MsIHJhbmdlLCByZWdzKSBcCisJX19yZV9zZWFyY2ggKGJ1ZnAsIHN0cmluZywgc2l6ZSwgc3RhcnRwb3MsIHJhbmdlLCByZWdzKQorIyBkZWZpbmUgcmVfY29tcGlsZV9wYXR0ZXJuKHBhdHRlcm4sIGxlbmd0aCwgYnVmcCkgXAorCV9fcmVfY29tcGlsZV9wYXR0ZXJuIChwYXR0ZXJuLCBsZW5ndGgsIGJ1ZnApCisjIGRlZmluZSByZV9zZXRfc3ludGF4KHN5bnRheCkgX19yZV9zZXRfc3ludGF4IChzeW50YXgpCisjIGRlZmluZSByZV9zZWFyY2hfMihidWZwLCBzdDEsIHMxLCBzdDIsIHMyLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MsIHN0b3ApIFwKKwlfX3JlX3NlYXJjaF8yIChidWZwLCBzdDEsIHMxLCBzdDIsIHMyLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MsIHN0b3ApCisjIGRlZmluZSByZV9jb21waWxlX2Zhc3RtYXAoYnVmcCkgX19yZV9jb21waWxlX2Zhc3RtYXAgKGJ1ZnApCisKKyMgaW5jbHVkZSAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX01TQ19WRVIpCisjaW5jbHVkZSA8c3RkaW8uaD4gLyogZm9yIHNpemVfdCAqLworI2VuZGlmCisKKy8qIE9uIHNvbWUgc3lzdGVtcywgbGltaXRzLmggc2V0cyBSRV9EVVBfTUFYIHRvIGEgbG93ZXIgdmFsdWUgdGhhbgorICAgR05VIHJlZ2V4IGFsbG93cy4gIEluY2x1ZGUgaXQgYmVmb3JlIDxyZWdleC5oPiwgd2hpY2ggY29ycmVjdGx5CisgICAjdW5kZWZzIFJFX0RVUF9NQVggYW5kIHNldHMgaXQgdG8gdGhlIHJpZ2h0IHZhbHVlLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lmZGVmIEdBV0sKKyN1bmRlZiBhbGxvY2EKKyNkZWZpbmUgYWxsb2NhIGFsbG9jYV9pc19iYWRfeW91X3Nob3VsZF9uZXZlcl91c2VfaXQKKyNlbmRpZgorI2luY2x1ZGUgPHJlZ2V4Lmg+CisjaW5jbHVkZSAicmVnZXhfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgInJlZ2V4X2ludGVybmFsLmMiCisjaWZkZWYgR0FXSworI2RlZmluZSBib29sIGludAorI2RlZmluZSB0cnVlICgxKQorI2RlZmluZSBmYWxzZSAoMCkKKyNlbmRpZgorI2luY2x1ZGUgInJlZ2NvbXAuYyIKKyNpbmNsdWRlICJyZWdleGVjLmMiCisKKy8qIEJpbmFyeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgKi8KKyNpZiBfTElCQworIyBpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KKyMgaWYgU0hMSUJfQ09NUEFUIChsaWJjLCBHTElCQ18yXzAsIEdMSUJDXzJfMykKK2xpbmtfd2FybmluZyAocmVfbWF4X2ZhaWx1cmVzLCAidGhlICdyZV9tYXhfZmFpbHVyZXMnIHZhcmlhYmxlIGlzIG9ic29sZXRlIGFuZCB3aWxsIGdvIGF3YXkuIikKK2ludCByZV9tYXhfZmFpbHVyZXMgPSAyMDAwOworIyBlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvcmVnZXgvcmVnZXguaCBiL2NvbXBhdC9yZWdleC9yZWdleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMzQxMjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcmVnZXgvcmVnZXguaApAQCAtMCwwICsxLDU4NiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIERlZmluaXRpb25zIGZvciBkYXRhIHN0cnVjdHVyZXMgYW5kIHJvdXRpbmVzIGZvciB0aGUgcmVndWxhcgorICAgZXhwcmVzc2lvbiBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAxOTg1LDE5ODktOTMsMTk5NS05OCwyMDAwLDIwMDEsMjAwMiwyMDAzLDIwMDUsMjAwNiwyMDA4CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX1JFR0VYX0gKKyNkZWZpbmUgX1JFR0VYX0ggMQorCisjaWZkZWYgSEFWRV9TVERERUZfSAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2lmbmRlZiBfTElCQworI2RlZmluZSBfX1VTRV9HTlUJMQorI2VuZGlmCisKKy8qIEFsbG93IHRoZSB1c2UgaW4gQysrIGNvZGUuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIHJlZ2NvbXAgZ2l0X3JlZ2NvbXAKKyNkZWZpbmUgcmVnZXhlYyBnaXRfcmVnZXhlYworI2RlZmluZSByZWdlcnJvciBnaXRfcmVnZXJyb3IKKyNkZWZpbmUgcmVnZnJlZSBnaXRfcmVnZnJlZQorCisvKiBUaGUgZm9sbG93aW5nIHR3byB0eXBlcyBoYXZlIHRvIGJlIHNpZ25lZCBhbmQgdW5zaWduZWQgaW50ZWdlciB0eXBlCisgICB3aWRlIGVub3VnaCB0byBob2xkIGEgdmFsdWUgb2YgYSBwb2ludGVyLiAgRm9yIG1vc3QgQU5TSSBjb21waWxlcnMKKyAgIHB0cmRpZmZfdCBhbmQgc2l6ZV90IHNob3VsZCBiZSBsaWtlbHkgT0suICBTdGlsbCBzaXplIG9mIHRoZXNlIHR3bworICAgdHlwZXMgaXMgMiBmb3IgTWljcm9zb2Z0IEMuICBVZ2guLi4gKi8KK3R5cGVkZWYgbG9uZyBpbnQgc19yZWdfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgYWN0aXZlX3JlZ190OworCisvKiBUaGUgZm9sbG93aW5nIGJpdHMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSByZWdleHAgc3ludGF4IHdlCisgICByZWNvZ25pemUuICBUaGUgc2V0L25vdC1zZXQgbWVhbmluZ3MgYXJlIGNob3NlbiBzbyB0aGF0IEVtYWNzIHN5bnRheAorICAgcmVtYWlucyB0aGUgdmFsdWUgMC4gIFRoZSBiaXRzIGFyZSBnaXZlbiBpbiBhbHBoYWJldGljYWwgb3JkZXIsIGFuZAorICAgdGhlIGRlZmluaXRpb25zIHNoaWZ0ZWQgYnkgb25lIGZyb20gdGhlIHByZXZpb3VzIGJpdDsgdGh1cywgd2hlbiB3ZQorICAgYWRkIG9yIHJlbW92ZSBhIGJpdCwgb25seSBvbmUgb3RoZXIgZGVmaW5pdGlvbiBuZWVkIGNoYW5nZS4gICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHJlZ19zeW50YXhfdDsKKworI2lmZGVmIF9fVVNFX0dOVQorLyogSWYgdGhpcyBiaXQgaXMgbm90IHNldCwgdGhlbiBcIGluc2lkZSBhIGJyYWNrZXQgZXhwcmVzc2lvbiBpcyBsaXRlcmFsLgorICAgSWYgc2V0LCB0aGVuIHN1Y2ggYSBcIHF1b3RlcyB0aGUgZm9sbG93aW5nIGNoYXJhY3Rlci4gICovCisjIGRlZmluZSBSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTICgodW5zaWduZWQgbG9uZyBpbnQpIDEpCisKKy8qIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRoZW4gKyBhbmQgPyBhcmUgb3BlcmF0b3JzLCBhbmQgXCsgYW5kIFw/IGFyZQorICAgICBsaXRlcmFscy4KKyAgIElmIHNldCwgdGhlbiBcKyBhbmQgXD8gYXJlIG9wZXJhdG9ycyBhbmQgKyBhbmQgPyBhcmUgbGl0ZXJhbHMuICAqLworIyBkZWZpbmUgUkVfQktfUExVU19RTSAoUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gY2hhcmFjdGVyIGNsYXNzZXMgYXJlIHN1cHBvcnRlZC4gIFRoZXkgYXJlOgorICAgICBbOmFscGhhOl0sIFs6dXBwZXI6XSwgWzpsb3dlcjpdLCAgWzpkaWdpdDpdLCBbOmFsbnVtOl0sIFs6eGRpZ2l0Ol0sCisgICAgIFs6c3BhY2U6XSwgWzpwcmludDpdLCBbOnB1bmN0Ol0sIFs6Z3JhcGg6XSwgYW5kIFs6Y250cmw6XS4KKyAgIElmIG5vdCBzZXQsIHRoZW4gY2hhcmFjdGVyIGNsYXNzZXMgYXJlIG5vdCBzdXBwb3J0ZWQuICAqLworIyBkZWZpbmUgUkVfQ0hBUl9DTEFTU0VTIChSRV9CS19QTFVTX1FNIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBeIGFuZCAkIGFyZSBhbHdheXMgYW5jaG9ycyAob3V0c2lkZSBicmFja2V0CisgICAgIGV4cHJlc3Npb25zLCBvZiBjb3Vyc2UpLgorICAgSWYgdGhpcyBiaXQgaXMgbm90IHNldCwgdGhlbiBpdCBkZXBlbmRzOgorICAgICAgICBeICBpcyBhbiBhbmNob3IgaWYgaXQgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHJlZ3VsYXIKKyAgICAgICAgICAgZXhwcmVzc2lvbiBvciBhZnRlciBhbiBvcGVuLWdyb3VwIG9yIGFuIGFsdGVybmF0aW9uIG9wZXJhdG9yOworICAgICAgICAkICBpcyBhbiBhbmNob3IgaWYgaXQgaXMgYXQgdGhlIGVuZCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgb3IKKyAgICAgICAgICAgYmVmb3JlIGEgY2xvc2UtZ3JvdXAgb3IgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3IuCisKKyAgIFRoaXMgYml0IGNvdWxkIGJlIChyZSljb21iaW5lZCB3aXRoIFJFX0NPTlRFWFRfSU5ERVBfT1BTLCBiZWNhdXNlCisgICBQT1NJWCBkcmFmdCAxMS4yIHNheXMgdGhhdCAqIGV0Yy4gaW4gbGVhZGluZyBwb3NpdGlvbnMgaXMgdW5kZWZpbmVkLgorICAgV2UgYWxyZWFkeSBpbXBsZW1lbnRlZCBhIHByZXZpb3VzIGRyYWZ0IHdoaWNoIG1hZGUgdGhvc2UgY29uc3RydWN0cworICAgaW52YWxpZCwgdGhvdWdoLCBzbyB3ZSBoYXZlbid0IGNoYW5nZWQgdGhlIGNvZGUgYmFjay4gICovCisjIGRlZmluZSBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMgKFJFX0NIQVJfQ0xBU1NFUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBhbHdheXMgc3BlY2lhbAorICAgICByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgYXJlIGluIHRoZSBwYXR0ZXJuLgorICAgSWYgdGhpcyBiaXQgaXMgbm90IHNldCwgdGhlbiBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIHNwZWNpYWwgb25seSBpbgorICAgICBzb21lIGNvbnRleHRzOyBvdGhlcndpc2UgdGhleSBhcmUgb3JkaW5hcnkuICBTcGVjaWZpY2FsbHksCisgICAgICogKyA/IGFuZCBpbnRlcnZhbHMgYXJlIG9ubHkgc3BlY2lhbCB3aGVuIG5vdCBhZnRlciB0aGUgYmVnaW5uaW5nLAorICAgICBvcGVuLWdyb3VwLCBvciBhbHRlcm5hdGlvbiBvcGVyYXRvci4gICovCisjIGRlZmluZSBSRV9DT05URVhUX0lOREVQX09QUyAoUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiAqLCArLCA/LCBhbmQgeyBjYW5ub3QgYmUgZmlyc3QgaW4gYW4gcmUgb3IKKyAgICAgaW1tZWRpYXRlbHkgYWZ0ZXIgYW4gYWx0ZXJuYXRpb24gb3IgYmVnaW4tZ3JvdXAgb3BlcmF0b3IuICAqLworIyBkZWZpbmUgUkVfQ09OVEVYVF9JTlZBTElEX09QUyAoUkVfQ09OVEVYVF9JTkRFUF9PUFMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIC4gbWF0Y2hlcyBuZXdsaW5lLgorICAgSWYgbm90IHNldCwgdGhlbiBpdCBkb2Vzbid0LiAgKi8KKyMgZGVmaW5lIFJFX0RPVF9ORVdMSU5FIChSRV9DT05URVhUX0lOVkFMSURfT1BTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiAuIGRvZXNuJ3QgbWF0Y2ggTlVMLgorICAgSWYgbm90IHNldCwgdGhlbiBpdCBkb2VzLiAgKi8KKyMgZGVmaW5lIFJFX0RPVF9OT1RfTlVMTCAoUkVfRE9UX05FV0xJTkUgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCBub25tYXRjaGluZyBsaXN0cyBbXi4uLl0gZG8gbm90IG1hdGNoIG5ld2xpbmUuCisgICBJZiBub3Qgc2V0LCB0aGV5IGRvLiAgKi8KKyMgZGVmaW5lIFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSAoUkVfRE9UX05PVF9OVUxMIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgZWl0aGVyIFx7Li4uXH0gb3Igey4uLn0gZGVmaW5lcyBhbgorICAgICBpbnRlcnZhbCwgZGVwZW5kaW5nIG9uIFJFX05PX0JLX0JSQUNFUy4KKyAgIElmIG5vdCBzZXQsIFx7LCBcfSwgeywgYW5kIH0gYXJlIGxpdGVyYWxzLiAgKi8KKyMgZGVmaW5lIFJFX0lOVEVSVkFMUyAoUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgKywgPyBhbmQgfCBhcmVuJ3QgcmVjb2duaXplZCBhcyBvcGVyYXRvcnMuCisgICBJZiBub3Qgc2V0LCB0aGV5IGFyZS4gICovCisjIGRlZmluZSBSRV9MSU1JVEVEX09QUyAoUkVfSU5URVJWQUxTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgbmV3bGluZSBpcyBhbiBhbHRlcm5hdGlvbiBvcGVyYXRvci4KKyAgIElmIG5vdCBzZXQsIG5ld2xpbmUgaXMgbGl0ZXJhbC4gICovCisjIGRlZmluZSBSRV9ORVdMSU5FX0FMVCAoUkVfTElNSVRFRF9PUFMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGB7Li4ufScgZGVmaW5lcyBhbiBpbnRlcnZhbCwgYW5kIFx7IGFuZCBcfQorICAgICBhcmUgbGl0ZXJhbHMuCisgIElmIG5vdCBzZXQsIHRoZW4gYFx7Li4uXH0nIGRlZmluZXMgYW4gaW50ZXJ2YWwuICAqLworIyBkZWZpbmUgUkVfTk9fQktfQlJBQ0VTIChSRV9ORVdMSU5FX0FMVCA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsICguLi4pIGRlZmluZXMgYSBncm91cCwgYW5kIFwoIGFuZCBcKSBhcmUgbGl0ZXJhbHMuCisgICBJZiBub3Qgc2V0LCBcKC4uLlwpIGRlZmluZXMgYSBncm91cCwgYW5kICggYW5kICkgYXJlIGxpdGVyYWxzLiAgKi8KKyMgZGVmaW5lIFJFX05PX0JLX1BBUkVOUyAoUkVfTk9fQktfQlJBQ0VTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBcPGRpZ2l0PiBtYXRjaGVzIDxkaWdpdD4uCisgICBJZiBub3Qgc2V0LCB0aGVuIFw8ZGlnaXQ+IGlzIGEgYmFjay1yZWZlcmVuY2UuICAqLworIyBkZWZpbmUgUkVfTk9fQktfUkVGUyAoUkVfTk9fQktfUEFSRU5TIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiB8IGlzIGFuIGFsdGVybmF0aW9uIG9wZXJhdG9yLCBhbmQgXHwgaXMgbGl0ZXJhbC4KKyAgIElmIG5vdCBzZXQsIHRoZW4gXHwgaXMgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3IsIGFuZCB8IGlzIGxpdGVyYWwuICAqLworIyBkZWZpbmUgUkVfTk9fQktfVkJBUiAoUkVfTk9fQktfUkVGUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gYW4gZW5kaW5nIHJhbmdlIHBvaW50IGNvbGxhdGluZyBoaWdoZXIKKyAgICAgdGhhbiB0aGUgc3RhcnRpbmcgcmFuZ2UgcG9pbnQsIGFzIGluIFt6LWFdLCBpcyBpbnZhbGlkLgorICAgSWYgbm90IHNldCwgdGhlbiB3aGVuIGVuZGluZyByYW5nZSBwb2ludCBjb2xsYXRlcyBoaWdoZXIgdGhhbiB0aGUKKyAgICAgc3RhcnRpbmcgcmFuZ2UgcG9pbnQsIHRoZSByYW5nZSBpcyBpZ25vcmVkLiAgKi8KKyMgZGVmaW5lIFJFX05PX0VNUFRZX1JBTkdFUyAoUkVfTk9fQktfVkJBUiA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gYW4gdW5tYXRjaGVkICkgaXMgb3JkaW5hcnkuCisgICBJZiBub3Qgc2V0LCB0aGVuIGFuIHVubWF0Y2hlZCApIGlzIGludmFsaWQuICAqLworIyBkZWZpbmUgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCAoUkVfTk9fRU1QVFlfUkFOR0VTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgc3VjY2VlZCBhcyBzb29uIGFzIHdlIG1hdGNoIHRoZSB3aG9sZSBwYXR0ZXJuLAorICAgd2l0aG91dCBmdXJ0aGVyIGJhY2t0cmFja2luZy4gICovCisjIGRlZmluZSBSRV9OT19QT1NJWF9CQUNLVFJBQ0tJTkcgKFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCBkbyBub3QgcHJvY2VzcyB0aGUgR05VIHJlZ2V4IG9wZXJhdG9ycy4KKyAgIElmIG5vdCBzZXQsIHRoZW4gdGhlIEdOVSByZWdleCBvcGVyYXRvcnMgYXJlIHJlY29nbml6ZWQuICovCisjIGRlZmluZSBSRV9OT19HTlVfT1BTIChSRV9OT19QT1NJWF9CQUNLVFJBQ0tJTkcgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCBhIHN5bnRhY3RpY2FsbHkgaW52YWxpZCBpbnRlcnZhbCBpcyB0cmVhdGVkIGFzCisgICBhIHN0cmluZyBvZiBvcmRpbmFyeSBjaGFyYWN0ZXJzLiAgRm9yIGV4YW1wbGUsIHRoZSBFUkUgJ2F7MScgaXMKKyAgIHRyZWF0ZWQgYXMgJ2FcezEnLiAgKi8KKyMgZGVmaW5lIFJFX0lOVkFMSURfSU5URVJWQUxfT1JEIChSRV9OT19HTlVfT1BTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBpZ25vcmUgY2FzZSB3aGVuIG1hdGNoaW5nLgorICAgSWYgbm90IHNldCwgdGhlbiBjYXNlIGlzIHNpZ25pZmljYW50LiAgKi8KKyMgZGVmaW5lIFJFX0lDQVNFIChSRV9JTlZBTElEX0lOVEVSVkFMX09SRCA8PCAxKQorCisvKiBUaGlzIGJpdCBpcyB1c2VkIGludGVybmFsbHkgbGlrZSBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMgYnV0IG9ubHkKKyAgIGZvciBeLCBiZWNhdXNlIGl0IGlzIGRpZmZpY3VsdCB0byBzY2FuIHRoZSByZWdleCBiYWNrd2FyZHMgdG8gZmluZAorICAgd2hldGhlciBeIHNob3VsZCBiZSBzcGVjaWFsLiAgKi8KKyMgZGVmaW5lIFJFX0NBUkVUX0FOQ0hPUlNfSEVSRSAoUkVfSUNBU0UgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIFx7IGNhbm5vdCBiZSBmaXJzdCBpbiBhbiBicmUgb3IKKyAgIGltbWVkaWF0ZWx5IGFmdGVyIGFuIGFsdGVybmF0aW9uIG9yIGJlZ2luLWdyb3VwIG9wZXJhdG9yLiAgKi8KKyMgZGVmaW5lIFJFX0NPTlRFWFRfSU5WQUxJRF9EVVAgKFJFX0NBUkVUX0FOQ0hPUlNfSEVSRSA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gbm9fc3ViIHdpbGwgYmUgc2V0IHRvIDEgZHVyaW5nCisgICByZV9jb21waWxlX3BhdHRlcm4uICAqLworI2RlZmluZSBSRV9OT19TVUIgKFJFX0NPTlRFWFRfSU5WQUxJRF9EVVAgPDwgMSkKKyNlbmRpZgorCisvKiBUaGlzIGdsb2JhbCB2YXJpYWJsZSBkZWZpbmVzIHRoZSBwYXJ0aWN1bGFyIHJlZ2V4cCBzeW50YXggdG8gdXNlIChmb3IKKyAgIHNvbWUgaW50ZXJmYWNlcykuICBXaGVuIGEgcmVnZXhwIGlzIGNvbXBpbGVkLCB0aGUgc3ludGF4IHVzZWQgaXMKKyAgIHN0b3JlZCBpbiB0aGUgcGF0dGVybiBidWZmZXIsIHNvIGNoYW5naW5nIHRoaXMgZG9lcyBub3QgYWZmZWN0CisgICBhbHJlYWR5LWNvbXBpbGVkIHJlZ2V4cHMuICAqLworZXh0ZXJuIHJlZ19zeW50YXhfdCByZV9zeW50YXhfb3B0aW9uczsKKwwKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIERlZmluZSBjb21iaW5hdGlvbnMgb2YgdGhlIGFib3ZlIGJpdHMgZm9yIHRoZSBzdGFuZGFyZCBwb3NzaWJpbGl0aWVzLgorICAgKFRoZSBbW1sgY29tbWVudHMgZGVsaW1pdCB3aGF0IGdldHMgcHV0IGludG8gdGhlIFRleGluZm8gZmlsZSwgc28KKyAgIGRvbid0IGRlbGV0ZSB0aGVtISkgICovCisvKiBbW1tiZWdpbiBzeW50YXhlc11dXSAqLworI2RlZmluZSBSRV9TWU5UQVhfRU1BQ1MgMAorCisjZGVmaW5lIFJFX1NZTlRBWF9BV0sJCQkJCQkJXAorICAoUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUyAgIHwgUkVfRE9UX05PVF9OVUxMCQkJXAorICAgfCBSRV9OT19CS19QQVJFTlMgICAgICAgICAgICAgIHwgUkVfTk9fQktfUkVGUwkJCVwKKyAgIHwgUkVfTk9fQktfVkJBUiAgICAgICAgICAgICAgICB8IFJFX05PX0VNUFRZX1JBTkdFUwkJCVwKKyAgIHwgUkVfRE9UX05FV0xJTkUJCSAgfCBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMJCVwKKyAgIHwgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCB8IFJFX05PX0dOVV9PUFMpCisKKyNkZWZpbmUgUkVfU1lOVEFYX0dOVV9BV0sJCQkJCQlcCisgICgoUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVEIHwgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUwkJXAorICAgfCBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCkJCQkJCQlcCisgICAmIH4oUkVfRE9UX05PVF9OVUxMIHwgUkVfQ09OVEVYVF9JTkRFUF9PUFMJCQkJXAorICAgICAgIHwgUkVfQ09OVEVYVF9JTlZBTElEX09QUyApKQorCisjZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9BV0sJCQkJCQlcCisgIChSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQgfCBSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTCQlcCisgICB8IFJFX0lOVEVSVkFMUwkgICAgfCBSRV9OT19HTlVfT1BTCQkJCVwKKyAgIHwgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQpCisKKyNkZWZpbmUgUkVfU1lOVEFYX0dSRVAJCQkJCQkJXAorICAoUkVfQktfUExVU19RTSAgICAgICAgICAgICAgfCBSRV9DSEFSX0NMQVNTRVMJCQkJXAorICAgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgfCBSRV9JTlRFUlZBTFMJCQkJXAorICAgfCBSRV9ORVdMSU5FX0FMVCkKKworI2RlZmluZSBSRV9TWU5UQVhfRUdSRVAJCQkJCQkJXAorICAoUkVfQ0hBUl9DTEFTU0VTICAgICAgICB8IFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUwkJCVwKKyAgIHwgUkVfQ09OVEVYVF9JTkRFUF9PUFMgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUJCQlcCisgICB8IFJFX05FV0xJTkVfQUxUICAgICAgIHwgUkVfTk9fQktfUEFSRU5TCQkJCVwKKyAgIHwgUkVfTk9fQktfVkJBUikKKworI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfRUdSRVAJCQkJCQlcCisgIChSRV9TWU5UQVhfRUdSRVAgfCBSRV9JTlRFUlZBTFMgfCBSRV9OT19CS19CUkFDRVMJCQlcCisgICB8IFJFX0lOVkFMSURfSU5URVJWQUxfT1JEKQorCisvKiBQMTAwMy4yL0QxMS4yLCBzZWN0aW9uIDQuMjAuNy4xLCBsaW5lcyA1MDc4ZmYuICAqLworI2RlZmluZSBSRV9TWU5UQVhfRUQgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCisKKyNkZWZpbmUgUkVfU1lOVEFYX1NFRCBSRV9TWU5UQVhfUE9TSVhfQkFTSUMKKworLyogU3ludGF4IGJpdHMgY29tbW9uIHRvIGJvdGggYmFzaWMgYW5kIGV4dGVuZGVkIFBPU0lYIHJlZ2V4IHN5bnRheC4gICovCisjZGVmaW5lIF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OCQkJCQkJXAorICAoUkVfQ0hBUl9DTEFTU0VTIHwgUkVfRE9UX05FV0xJTkUgICAgICB8IFJFX0RPVF9OT1RfTlVMTAkJXAorICAgfCBSRV9JTlRFUlZBTFMgIHwgUkVfTk9fRU1QVFlfUkFOR0VTKQorCisjZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9CQVNJQwkJCQkJCVwKKyAgKF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OIHwgUkVfQktfUExVU19RTSB8IFJFX0NPTlRFWFRfSU5WQUxJRF9EVVApCisKKy8qIERpZmZlcnMgZnJvbSAuLi5fUE9TSVhfQkFTSUMgb25seSBpbiB0aGF0IFJFX0JLX1BMVVNfUU0gYmVjb21lcworICAgUkVfTElNSVRFRF9PUFMsIGkuZS4sIFw/IFwrIFx8IGFyZSBub3QgcmVjb2duaXplZC4gIEFjdHVhbGx5LCB0aGlzCisgICBpc24ndCBtaW5pbWFsLCBzaW5jZSBvdGhlciBvcGVyYXRvcnMsIHN1Y2ggYXMgXGAsIGFyZW4ndCBkaXNhYmxlZC4gICovCisjZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9NSU5JTUFMX0JBU0lDCQkJCQlcCisgIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiB8IFJFX0xJTUlURURfT1BTKQorCisjZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9FWFRFTkRFRAkJCQkJXAorICAoX1JFX1NZTlRBWF9QT1NJWF9DT01NT04gIHwgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTCQkJXAorICAgfCBSRV9DT05URVhUX0lOREVQX09QUyAgIHwgUkVfTk9fQktfQlJBQ0VTCQkJCVwKKyAgIHwgUkVfTk9fQktfUEFSRU5TICAgICAgICB8IFJFX05PX0JLX1ZCQVIJCQkJXAorICAgfCBSRV9DT05URVhUX0lOVkFMSURfT1BTIHwgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCkKKworLyogRGlmZmVycyBmcm9tIC4uLl9QT1NJWF9FWFRFTkRFRCBpbiB0aGF0IFJFX0NPTlRFWFRfSU5ERVBfT1BTIGlzCisgICByZW1vdmVkIGFuZCBSRV9OT19CS19SRUZTIGlzIGFkZGVkLiAgKi8KKyNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX01JTklNQUxfRVhURU5ERUQJCQkJXAorICAoX1JFX1NZTlRBWF9QT1NJWF9DT01NT04gIHwgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTCQkJXAorICAgfCBSRV9DT05URVhUX0lOVkFMSURfT1BTIHwgUkVfTk9fQktfQlJBQ0VTCQkJCVwKKyAgIHwgUkVfTk9fQktfUEFSRU5TICAgICAgICB8IFJFX05PX0JLX1JFRlMJCQkJXAorICAgfCBSRV9OT19CS19WQkFSCSAgICB8IFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpCisvKiBbW1tlbmQgc3ludGF4ZXNdXV0gKi8KKwwKKy8qIE1heGltdW0gbnVtYmVyIG9mIGR1cGxpY2F0ZXMgYW4gaW50ZXJ2YWwgY2FuIGFsbG93LiAgU29tZSBzeXN0ZW1zCisgICAoZXJyb25lb3VzbHkpIGRlZmluZSB0aGlzIGluIG90aGVyIGhlYWRlciBmaWxlcywgYnV0IHdlIHdhbnQgb3VyCisgICB2YWx1ZSwgc28gcmVtb3ZlIGFueSBwcmV2aW91cyBkZWZpbmUuICAqLworIyBpZmRlZiBSRV9EVVBfTUFYCisjICB1bmRlZiBSRV9EVVBfTUFYCisjIGVuZGlmCisvKiBJZiBzaXplb2YoaW50KSA9PSAyLCB0aGVuICgoMSA8PCAxNSkgLSAxKSBvdmVyZmxvd3MuICAqLworIyBkZWZpbmUgUkVfRFVQX01BWCAoMHg3ZmZmKQorI2VuZGlmCisKKworLyogUE9TSVggYGNmbGFncycgYml0cyAoaS5lLiwgaW5mb3JtYXRpb24gZm9yIGByZWdjb21wJykuICAqLworCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gdXNlIGV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBzeW50YXguCisgICBJZiBub3Qgc2V0LCB0aGVuIHVzZSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gc3ludGF4LiAgKi8KKyNkZWZpbmUgUkVHX0VYVEVOREVEIDEKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGlnbm9yZSBjYXNlIHdoZW4gbWF0Y2hpbmcuCisgICBJZiBub3Qgc2V0LCB0aGVuIGNhc2UgaXMgc2lnbmlmaWNhbnQuICAqLworI2RlZmluZSBSRUdfSUNBU0UgKFJFR19FWFRFTkRFRCA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gYW5jaG9ycyBkbyBub3QgbWF0Y2ggYXQgbmV3bGluZQorICAgICBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcuCisgICBJZiBub3Qgc2V0LCB0aGVuIGFuY2hvcnMgZG8gbWF0Y2ggYXQgbmV3bGluZXMuICAqLworI2RlZmluZSBSRUdfTkVXTElORSAoUkVHX0lDQVNFIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiByZXBvcnQgb25seSBzdWNjZXNzIG9yIGZhaWwgaW4gcmVnZXhlYy4KKyAgIElmIG5vdCBzZXQsIHRoZW4gcmV0dXJucyBkaWZmZXIgYmV0d2VlbiBub3QgbWF0Y2hpbmcgYW5kIGVycm9ycy4gICovCisjZGVmaW5lIFJFR19OT1NVQiAoUkVHX05FV0xJTkUgPDwgMSkKKworCisvKiBQT1NJWCBgZWZsYWdzJyBiaXRzIChpLmUuLCBpbmZvcm1hdGlvbiBmb3IgcmVnZXhlYykuICAqLworCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gdGhlIGJlZ2lubmluZy1vZi1saW5lIG9wZXJhdG9yIGRvZXNuJ3QgbWF0Y2gKKyAgICAgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIChwcmVzdW1hYmx5IGJlY2F1c2UgaXQncyBub3QgdGhlCisgICAgIGJlZ2lubmluZyBvZiBhIGxpbmUpLgorICAgSWYgbm90IHNldCwgdGhlbiB0aGUgYmVnaW5uaW5nLW9mLWxpbmUgb3BlcmF0b3IgZG9lcyBtYXRjaCB0aGUKKyAgICAgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuICAqLworI2RlZmluZSBSRUdfTk9UQk9MIDEKKworLyogTGlrZSBSRUdfTk9UQk9MLCBleGNlcHQgZm9yIHRoZSBlbmQtb2YtbGluZS4gICovCisjZGVmaW5lIFJFR19OT1RFT0wgKDEgPDwgMSkKKworLyogVXNlIFBNQVRDSFswXSB0byBkZWxpbWl0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBzZWFyY2ggaW4gdGhlCisgICBidWZmZXIuICAqLworI2RlZmluZSBSRUdfU1RBUlRFTkQgKDEgPDwgMikKKworCisvKiBJZiBhbnkgZXJyb3IgY29kZXMgYXJlIHJlbW92ZWQsIGNoYW5nZWQsIG9yIGFkZGVkLCB1cGRhdGUgdGhlCisgICBgcmVfZXJyb3JfbXNnJyB0YWJsZSBpbiByZWdleC5jLiAgKi8KK3R5cGVkZWYgZW51bQoreworI2lmIGRlZmluZWQgX1hPUEVOX1NPVVJDRSB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOMksKKyAgUkVHX0VOT1NZUyA9IC0xLAkvKiBUaGlzIHdpbGwgbmV2ZXIgaGFwcGVuIGZvciB0aGlzIGltcGxlbWVudGF0aW9uLiAgKi8KKyNlbmRpZgorCisgIFJFR19OT0VSUk9SID0gMCwJLyogU3VjY2Vzcy4gICovCisgIFJFR19OT01BVENILAkJLyogRGlkbid0IGZpbmQgYSBtYXRjaCAoZm9yIHJlZ2V4ZWMpLiAgKi8KKworICAvKiBQT1NJWCByZWdjb21wIHJldHVybiBlcnJvciBjb2Rlcy4gIChJbiB0aGUgb3JkZXIgbGlzdGVkIGluIHRoZQorICAgICBzdGFuZGFyZC4pICAqLworICBSRUdfQkFEUEFULAkJLyogSW52YWxpZCBwYXR0ZXJuLiAgKi8KKyAgUkVHX0VDT0xMQVRFLAkJLyogSW52YWxpZCBjb2xsYXRpbmcgZWxlbWVudC4gICovCisgIFJFR19FQ1RZUEUsCQkvKiBJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lLiAgKi8KKyAgUkVHX0VFU0NBUEUsCQkvKiBUcmFpbGluZyBiYWNrc2xhc2guICAqLworICBSRUdfRVNVQlJFRywJCS8qIEludmFsaWQgYmFjayByZWZlcmVuY2UuICAqLworICBSRUdfRUJSQUNLLAkJLyogVW5tYXRjaGVkIGxlZnQgYnJhY2tldC4gICovCisgIFJFR19FUEFSRU4sCQkvKiBQYXJlbnRoZXNpcyBpbWJhbGFuY2UuICAqLworICBSRUdfRUJSQUNFLAkJLyogVW5tYXRjaGVkIFx7LiAgKi8KKyAgUkVHX0JBREJSLAkJLyogSW52YWxpZCBjb250ZW50cyBvZiBce1x9LiAgKi8KKyAgUkVHX0VSQU5HRSwJCS8qIEludmFsaWQgcmFuZ2UgZW5kLiAgKi8KKyAgUkVHX0VTUEFDRSwJCS8qIFJhbiBvdXQgb2YgbWVtb3J5LiAgKi8KKyAgUkVHX0JBRFJQVCwJCS8qIE5vIHByZWNlZGluZyByZSBmb3IgcmVwZXRpdGlvbiBvcC4gICovCisKKyAgLyogRXJyb3IgY29kZXMgd2UndmUgYWRkZWQuICAqLworICBSRUdfRUVORCwJCS8qIFByZW1hdHVyZSBlbmQuICAqLworICBSRUdfRVNJWkUsCQkvKiBDb21waWxlZCBwYXR0ZXJuIGJpZ2dlciB0aGFuIDJeMTYgYnl0ZXMuICAqLworICBSRUdfRVJQQVJFTgkJLyogVW5tYXRjaGVkICkgb3IgXCk7IG5vdCByZXR1cm5lZCBmcm9tIHJlZ2NvbXAuICAqLworfSByZWdfZXJyY29kZV90OworDAorLyogVGhpcyBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgY29tcGlsZWQgcGF0dGVybi4gIEJlZm9yZSBjYWxsaW5nCisgICB0aGUgcGF0dGVybiBjb21waWxlciwgdGhlIGZpZWxkcyBgYnVmZmVyJywgYGFsbG9jYXRlZCcsIGBmYXN0bWFwJywKKyAgIGB0cmFuc2xhdGUnLCBhbmQgYG5vX3N1YicgY2FuIGJlIHNldC4gIEFmdGVyIHRoZSBwYXR0ZXJuIGhhcyBiZWVuCisgICBjb21waWxlZCwgdGhlIGByZV9uc3ViJyBmaWVsZCBpcyBhdmFpbGFibGUuICBBbGwgb3RoZXIgZmllbGRzIGFyZQorICAgcHJpdmF0ZSB0byB0aGUgcmVnZXggcm91dGluZXMuICAqLworCisjaWZuZGVmIFJFX1RSQU5TTEFURV9UWVBFCisjIGRlZmluZSBfX1JFX1RSQU5TTEFURV9UWVBFIHVuc2lnbmVkIGNoYXIgKgorIyBpZmRlZiBfX1VTRV9HTlUKKyMgIGRlZmluZSBSRV9UUkFOU0xBVEVfVFlQRSBfX1JFX1RSQU5TTEFURV9UWVBFCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgX19SRVBCX1BSRUZJWChuYW1lKSBuYW1lCisjZWxzZQorIyBkZWZpbmUgX19SRVBCX1BSRUZJWChuYW1lKSBfXyMjbmFtZQorI2VuZGlmCisKK3N0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlcgoreworICAvKiBTcGFjZSB0aGF0IGhvbGRzIHRoZSBjb21waWxlZCBwYXR0ZXJuLiAgSXQgaXMgZGVjbGFyZWQgYXMKKyAgICAgYHVuc2lnbmVkIGNoYXIgKicgYmVjYXVzZSBpdHMgZWxlbWVudHMgYXJlIHNvbWV0aW1lcyB1c2VkIGFzCisgICAgIGFycmF5IGluZGV4ZXMuICAqLworICB1bnNpZ25lZCBjaGFyICpfX1JFUEJfUFJFRklYKGJ1ZmZlcik7CisKKyAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHdoaWNoIGBidWZmZXInIHBvaW50cy4gICovCisgIHVuc2lnbmVkIGxvbmcgaW50IF9fUkVQQl9QUkVGSVgoYWxsb2NhdGVkKTsKKworICAvKiBOdW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgdXNlZCBpbiBgYnVmZmVyJy4gICovCisgIHVuc2lnbmVkIGxvbmcgaW50IF9fUkVQQl9QUkVGSVgodXNlZCk7CisKKyAgLyogU3ludGF4IHNldHRpbmcgd2l0aCB3aGljaCB0aGUgcGF0dGVybiB3YXMgY29tcGlsZWQuICAqLworICByZWdfc3ludGF4X3QgX19SRVBCX1BSRUZJWChzeW50YXgpOworCisgIC8qIFBvaW50ZXIgdG8gYSBmYXN0bWFwLCBpZiBhbnksIG90aGVyd2lzZSB6ZXJvLiAgcmVfc2VhcmNoIHVzZXMgdGhlCisgICAgIGZhc3RtYXAsIGlmIHRoZXJlIGlzIG9uZSwgdG8gc2tpcCBvdmVyIGltcG9zc2libGUgc3RhcnRpbmcgcG9pbnRzCisgICAgIGZvciBtYXRjaGVzLiAgKi8KKyAgY2hhciAqX19SRVBCX1BSRUZJWChmYXN0bWFwKTsKKworICAvKiBFaXRoZXIgYSB0cmFuc2xhdGUgdGFibGUgdG8gYXBwbHkgdG8gYWxsIGNoYXJhY3RlcnMgYmVmb3JlCisgICAgIGNvbXBhcmluZyB0aGVtLCBvciB6ZXJvIGZvciBubyB0cmFuc2xhdGlvbi4gIFRoZSB0cmFuc2xhdGlvbiBpcworICAgICBhcHBsaWVkIHRvIGEgcGF0dGVybiB3aGVuIGl0IGlzIGNvbXBpbGVkIGFuZCB0byBhIHN0cmluZyB3aGVuIGl0CisgICAgIGlzIG1hdGNoZWQuICAqLworICBfX1JFX1RSQU5TTEFURV9UWVBFIF9fUkVQQl9QUkVGSVgodHJhbnNsYXRlKTsKKworICAvKiBOdW1iZXIgb2Ygc3ViZXhwcmVzc2lvbnMgZm91bmQgYnkgdGhlIGNvbXBpbGVyLiAgKi8KKyAgc2l6ZV90IHJlX25zdWI7CisKKyAgLyogWmVybyBpZiB0aGlzIHBhdHRlcm4gY2Fubm90IG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcsIG9uZSBlbHNlLgorICAgICBXZWxsLCBpbiB0cnV0aCBpdCdzIHVzZWQgb25seSBpbiBgcmVfc2VhcmNoXzInLCB0byBzZWUgd2hldGhlciBvcgorICAgICBub3Qgd2Ugc2hvdWxkIHVzZSB0aGUgZmFzdG1hcCwgc28gd2UgZG9uJ3Qgc2V0IHRoaXMgYWJzb2x1dGVseQorICAgICBwZXJmZWN0bHk7IHNlZSBgcmVfY29tcGlsZV9mYXN0bWFwJyAodGhlIGBkdXBsaWNhdGUnIGNhc2UpLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChjYW5fYmVfbnVsbCkgOiAxOworCisgIC8qIElmIFJFR1NfVU5BTExPQ0FURUQsIGFsbG9jYXRlIHNwYWNlIGluIHRoZSBgcmVncycgc3RydWN0dXJlCisgICAgIGZvciBgbWF4IChSRV9OUkVHUywgcmVfbnN1YiArIDEpJyBncm91cHMuCisgICAgIElmIFJFR1NfUkVBTExPQ0FURSwgcmVhbGxvY2F0ZSBzcGFjZSBpZiBuZWNlc3NhcnkuCisgICAgIElmIFJFR1NfRklYRUQsIHVzZSB3aGF0J3MgdGhlcmUuICAqLworI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgUkVHU19VTkFMTE9DQVRFRCAwCisjIGRlZmluZSBSRUdTX1JFQUxMT0NBVEUgMQorIyBkZWZpbmUgUkVHU19GSVhFRCAyCisjZW5kaWYKKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChyZWdzX2FsbG9jYXRlZCkgOiAyOworCisgIC8qIFNldCB0byB6ZXJvIHdoZW4gYHJlZ2V4X2NvbXBpbGUnIGNvbXBpbGVzIGEgcGF0dGVybjsgc2V0IHRvIG9uZQorICAgICBieSBgcmVfY29tcGlsZV9mYXN0bWFwJyBpZiBpdCB1cGRhdGVzIHRoZSBmYXN0bWFwLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChmYXN0bWFwX2FjY3VyYXRlKSA6IDE7CisKKyAgLyogSWYgc2V0LCBgcmVfbWF0Y2hfMicgZG9lcyBub3QgcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0CisgICAgIHN1YmV4cHJlc3Npb25zLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChub19zdWIpIDogMTsKKworICAvKiBJZiBzZXQsIGEgYmVnaW5uaW5nLW9mLWxpbmUgYW5jaG9yIGRvZXNuJ3QgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc3RyaW5nLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChub3RfYm9sKSA6IDE7CisKKyAgLyogU2ltaWxhcmx5IGZvciBhbiBlbmQtb2YtbGluZSBhbmNob3IuICAqLworICB1bnNpZ25lZCBfX1JFUEJfUFJFRklYKG5vdF9lb2wpIDogMTsKKworICAvKiBJZiB0cnVlLCBhbiBhbmNob3IgYXQgYSBuZXdsaW5lIG1hdGNoZXMuICAqLworICB1bnNpZ25lZCBfX1JFUEJfUFJFRklYKG5ld2xpbmVfYW5jaG9yKSA6IDE7Cit9OworCit0eXBlZGVmIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciByZWdleF90OworDAorLyogVHlwZSBmb3IgYnl0ZSBvZmZzZXRzIHdpdGhpbiB0aGUgc3RyaW5nLiAgUE9TSVggbWFuZGF0ZXMgdGhpcy4gICovCit0eXBlZGVmIGludCByZWdvZmZfdDsKKworCisjaWZkZWYgX19VU0VfR05VCisvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgd2Ugc3RvcmUgcmVnaXN0ZXIgbWF0Y2ggZGF0YSBpbi4gIFNlZQorICAgcmVnZXgudGV4aW5mbyBmb3IgYSBmdWxsIGRlc2NyaXB0aW9uIG9mIHdoYXQgcmVnaXN0ZXJzIG1hdGNoLiAgKi8KK3N0cnVjdCByZV9yZWdpc3RlcnMKK3sKKyAgdW5zaWduZWQgbnVtX3JlZ3M7CisgIHJlZ29mZl90ICpzdGFydDsKKyAgcmVnb2ZmX3QgKmVuZDsKK307CisKKworLyogSWYgYHJlZ3NfYWxsb2NhdGVkJyBpcyBSRUdTX1VOQUxMT0NBVEVEIGluIHRoZSBwYXR0ZXJuIGJ1ZmZlciwKKyAgIGByZV9tYXRjaF8yJyByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGF0IGxlYXN0IHRoaXMgbWFueSByZWdpc3RlcnMKKyAgIHRoZSBmaXJzdCB0aW1lIGEgYHJlZ3MnIHN0cnVjdHVyZSBpcyBwYXNzZWQuICAqLworIyBpZm5kZWYgUkVfTlJFR1MKKyMgIGRlZmluZSBSRV9OUkVHUyAzMAorIyBlbmRpZgorI2VuZGlmCisKKworLyogUE9TSVggc3BlY2lmaWNhdGlvbiBmb3IgcmVnaXN0ZXJzLiAgQXNpZGUgZnJvbSB0aGUgZGlmZmVyZW50IG5hbWVzIHRoYW4KKyAgIGByZV9yZWdpc3RlcnMnLCBQT1NJWCB1c2VzIGFuIGFycmF5IG9mIHN0cnVjdHVyZXMsIGluc3RlYWQgb2YgYQorICAgc3RydWN0dXJlIG9mIGFycmF5cy4gICovCit0eXBlZGVmIHN0cnVjdAoreworICByZWdvZmZfdCBybV9zbzsgIC8qIEJ5dGUgb2Zmc2V0IGZyb20gc3RyaW5nJ3Mgc3RhcnQgdG8gc3Vic3RyaW5nJ3Mgc3RhcnQuICAqLworICByZWdvZmZfdCBybV9lbzsgIC8qIEJ5dGUgb2Zmc2V0IGZyb20gc3RyaW5nJ3Mgc3RhcnQgdG8gc3Vic3RyaW5nJ3MgZW5kLiAgKi8KK30gcmVnbWF0Y2hfdDsKKwwKKy8qIERlY2xhcmF0aW9ucyBmb3Igcm91dGluZXMuICAqLworCisjaWZkZWYgX19VU0VfR05VCisvKiBTZXRzIHRoZSBjdXJyZW50IGRlZmF1bHQgc3ludGF4IHRvIFNZTlRBWCwgYW5kIHJldHVybiB0aGUgb2xkIHN5bnRheC4KKyAgIFlvdSBjYW4gYWxzbyBzaW1wbHkgYXNzaWduIHRvIHRoZSBgcmVfc3ludGF4X29wdGlvbnMnIHZhcmlhYmxlLiAgKi8KK2V4dGVybiByZWdfc3ludGF4X3QgcmVfc2V0X3N5bnRheCAocmVnX3N5bnRheF90IF9fc3ludGF4KTsKKworLyogQ29tcGlsZSB0aGUgcmVndWxhciBleHByZXNzaW9uIFBBVFRFUk4sIHdpdGggbGVuZ3RoIExFTkdUSAorICAgYW5kIHN5bnRheCBnaXZlbiBieSB0aGUgZ2xvYmFsIGByZV9zeW50YXhfb3B0aW9ucycsIGludG8gdGhlIGJ1ZmZlcgorICAgQlVGRkVSLiAgUmV0dXJuIE5VTEwgaWYgc3VjY2Vzc2Z1bCwgYW5kIGFuIGVycm9yIHN0cmluZyBpZiBub3QuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKnJlX2NvbXBpbGVfcGF0dGVybiAoY29uc3QgY2hhciAqX19wYXR0ZXJuLCBzaXplX3QgX19sZW5ndGgsCisJCQkJICAgICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIpOworCisKKy8qIENvbXBpbGUgYSBmYXN0bWFwIGZvciB0aGUgY29tcGlsZWQgcGF0dGVybiBpbiBCVUZGRVI7IHVzZWQgdG8KKyAgIGFjY2VsZXJhdGUgc2VhcmNoZXMuICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsIGFuZCAtMiBpZiB3YXMgYW4KKyAgIGludGVybmFsIGVycm9yLiAgKi8KK2V4dGVybiBpbnQgcmVfY29tcGlsZV9mYXN0bWFwIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyKTsKKworCisvKiBTZWFyY2ggaW4gdGhlIHN0cmluZyBTVFJJTkcgKHdpdGggbGVuZ3RoIExFTkdUSCkgZm9yIHRoZSBwYXR0ZXJuCisgICBjb21waWxlZCBpbnRvIEJVRkZFUi4gIFN0YXJ0IHNlYXJjaGluZyBhdCBwb3NpdGlvbiBTVEFSVCwgZm9yIFJBTkdFCisgICBjaGFyYWN0ZXJzLiAgUmV0dXJuIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbWF0Y2gsIC0xIGZvciBubworICAgbWF0Y2gsIG9yIC0yIGZvciBhbiBpbnRlcm5hbCBlcnJvci4gIEFsc28gcmV0dXJuIHJlZ2lzdGVyCisgICBpbmZvcm1hdGlvbiBpbiBSRUdTIChpZiBSRUdTIGFuZCBCVUZGRVItPm5vX3N1YiBhcmUgbm9uemVybykuICAqLworZXh0ZXJuIGludCByZV9zZWFyY2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIsIGNvbnN0IGNoYXIgKl9fY3N0cmluZywKKwkJICAgICAgaW50IF9fbGVuZ3RoLCBpbnQgX19zdGFydCwgaW50IF9fcmFuZ2UsCisJCSAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKl9fcmVncyk7CisKKworLyogTGlrZSBgcmVfc2VhcmNoJywgYnV0IHNlYXJjaCBpbiB0aGUgY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxIGFuZAorICAgU1RSSU5HMi4gIEFsc28sIHN0b3Agc2VhcmNoaW5nIGF0IGluZGV4IFNUQVJUICsgU1RPUC4gICovCitleHRlcm4gaW50IHJlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkJY29uc3QgY2hhciAqX19zdHJpbmcxLCBpbnQgX19sZW5ndGgxLAorCQkJY29uc3QgY2hhciAqX19zdHJpbmcyLCBpbnQgX19sZW5ndGgyLCBpbnQgX19zdGFydCwKKwkJCWludCBfX3JhbmdlLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpfX3JlZ3MsIGludCBfX3N0b3ApOworCisKKy8qIExpa2UgYHJlX3NlYXJjaCcsIGJ1dCByZXR1cm4gaG93IG1hbnkgY2hhcmFjdGVycyBpbiBTVFJJTkcgdGhlIHJlZ2V4cAorICAgaW4gQlVGRkVSIG1hdGNoZWQsIHN0YXJ0aW5nIGF0IHBvc2l0aW9uIFNUQVJULiAgKi8KK2V4dGVybiBpbnQgcmVfbWF0Y2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIsIGNvbnN0IGNoYXIgKl9fY3N0cmluZywKKwkJICAgICBpbnQgX19sZW5ndGgsIGludCBfX3N0YXJ0LCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpfX3JlZ3MpOworCisKKy8qIFJlbGF0ZXMgdG8gYHJlX21hdGNoJyBhcyBgcmVfc2VhcmNoXzInIHJlbGF0ZXMgdG8gYHJlX3NlYXJjaCcuICAqLworZXh0ZXJuIGludCByZV9tYXRjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkgICAgICAgY29uc3QgY2hhciAqX19zdHJpbmcxLCBpbnQgX19sZW5ndGgxLAorCQkgICAgICAgY29uc3QgY2hhciAqX19zdHJpbmcyLCBpbnQgX19sZW5ndGgyLCBpbnQgX19zdGFydCwKKwkJICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKl9fcmVncywgaW50IF9fc3RvcCk7CisKKworLyogU2V0IFJFR1MgdG8gaG9sZCBOVU1fUkVHUyByZWdpc3RlcnMsIHN0b3JpbmcgdGhlbSBpbiBTVEFSVFMgYW5kCisgICBFTkRTLiAgU3Vic2VxdWVudCBtYXRjaGVzIHVzaW5nIEJVRkZFUiBhbmQgUkVHUyB3aWxsIHVzZSB0aGlzIG1lbW9yeQorICAgZm9yIHJlY29yZGluZyByZWdpc3RlciBpbmZvcm1hdGlvbi4gIFNUQVJUUyBhbmQgRU5EUyBtdXN0IGJlCisgICBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MsIGFuZCBtdXN0IGVhY2ggYmUgYXQgbGVhc3QgYE5VTV9SRUdTICogc2l6ZW9mCisgICAocmVnb2ZmX3QpJyBieXRlcyBsb25nLgorCisgICBJZiBOVU1fUkVHUyA9PSAwLCB0aGVuIHN1YnNlcXVlbnQgbWF0Y2hlcyBzaG91bGQgYWxsb2NhdGUgdGhlaXIgb3duCisgICByZWdpc3RlciBkYXRhLgorCisgICBVbmxlc3MgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBmaXJzdCBzZWFyY2ggb3IgbWF0Y2ggdXNpbmcKKyAgIFBBVFRFUk5fQlVGRkVSIHdpbGwgYWxsb2NhdGUgaXRzIG93biByZWdpc3RlciBkYXRhLCB3aXRob3V0CisgICBmcmVlaW5nIHRoZSBvbGQgZGF0YS4gICovCitleHRlcm4gdm9pZCByZV9zZXRfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkJICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqX19yZWdzLAorCQkJICAgICAgdW5zaWduZWQgaW50IF9fbnVtX3JlZ3MsCisJCQkgICAgICByZWdvZmZfdCAqX19zdGFydHMsIHJlZ29mZl90ICpfX2VuZHMpOworI2VuZGlmCS8qIFVzZSBHTlUgKi8KKworI2lmIGRlZmluZWQgX1JFR0VYX1JFX0NPTVAgfHwgKGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBfX1VTRV9CU0QpCisjIGlmbmRlZiBfQ1JBWQorLyogNC4yIGJzZCBjb21wYXRpYmlsaXR5LiAgKi8KK2V4dGVybiBjaGFyICpyZV9jb21wIChjb25zdCBjaGFyICopOworZXh0ZXJuIGludCByZV9leGVjIChjb25zdCBjaGFyICopOworIyBlbmRpZgorI2VuZGlmCisKKy8qIEdDQyAyLjk1IGFuZCBsYXRlciBoYXZlICJfX3Jlc3RyaWN0IjsgQzk5IGNvbXBpbGVycyBoYXZlCisgICAicmVzdHJpY3QiLCBhbmQgImNvbmZpZ3VyZSIgbWF5IGhhdmUgZGVmaW5lZCAicmVzdHJpY3QiLiAgKi8KKyNpZm5kZWYgX19yZXN0cmljdAorIyBpZiAhICgyIDwgX19HTlVDX18gfHwgKDIgPT0gX19HTlVDX18gJiYgOTUgPD0gX19HTlVDX01JTk9SX18pKQorIyAgaWYgZGVmaW5lZCByZXN0cmljdCB8fCAxOTk5MDFMIDw9IF9fU1REQ19WRVJTSU9OX18KKyMgICBkZWZpbmUgX19yZXN0cmljdCByZXN0cmljdAorIyAgZWxzZQorIyAgIGRlZmluZSBfX3Jlc3RyaWN0CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisvKiBnY2MgMy4xIGFuZCB1cCBzdXBwb3J0IHRoZSBbcmVzdHJpY3RdIHN5bnRheC4gICovCisjaWZuZGVmIF9fcmVzdHJpY3RfYXJyCisjIGlmIChfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMSkpIFwKKyAgICAgJiYgIWRlZmluZWQgX19HTlVHX18KKyMgIGRlZmluZSBfX3Jlc3RyaWN0X2FyciBfX3Jlc3RyaWN0CisjIGVsc2UKKyMgIGRlZmluZSBfX3Jlc3RyaWN0X2FycgorIyBlbmRpZgorI2VuZGlmCisKKy8qIFBPU0lYIGNvbXBhdGliaWxpdHkuICAqLworZXh0ZXJuIGludCByZWdjb21wIChyZWdleF90ICpfX3Jlc3RyaWN0IF9fcHJlZywKKwkJICAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXR0ZXJuLAorCQkgICAgaW50IF9fY2ZsYWdzKTsKKworZXh0ZXJuIGludCByZWdleGVjIChjb25zdCByZWdleF90ICpfX3Jlc3RyaWN0IF9fcHJlZywKKwkJICAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jc3RyaW5nLCBzaXplX3QgX19ubWF0Y2gsCisJCSAgICByZWdtYXRjaF90IF9fcG1hdGNoW19fcmVzdHJpY3RfYXJyXSwKKwkJICAgIGludCBfX2VmbGFncyk7CisKK2V4dGVybiBzaXplX3QgcmVnZXJyb3IgKGludCBfX2VycmNvZGUsIGNvbnN0IHJlZ2V4X3QgKl9fcmVzdHJpY3QgX19wcmVnLAorCQkJY2hhciAqX19yZXN0cmljdCBfX2VycmJ1Ziwgc2l6ZV90IF9fZXJyYnVmX3NpemUpOworCitleHRlcm4gdm9pZCByZWdmcmVlIChyZWdleF90ICpfX3ByZWcpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCS8qIEMrKyAqLworCisjZW5kaWYgLyogcmVnZXguaCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2V4X2ludGVybmFsLmMgYi9jb21wYXQvcmVnZXgvcmVnZXhfaW50ZXJuYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzUxY2YzCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2V4X2ludGVybmFsLmMKQEAgLTAsMCArMSwxNzQzIEBACisvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYsIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IElzYW11IEhhc2VnYXdhIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworc3RhdGljIHZvaWQgcmVfc3RyaW5nX2NvbnN0cnVjdF9jb21tb24gKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwKKwkJCQkJcmVfc3RyaW5nX3QgKnBzdHIsCisJCQkJCVJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBpbnQgaWNhc2UsCisJCQkJCWNvbnN0IHJlX2RmYV90ICpkZmEpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlX2RmYXN0YXRlX3QgKmNyZWF0ZV9jaV9uZXdzdGF0ZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkJICBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsCisJCQkJCSAgdW5zaWduZWQgaW50IGhhc2gpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlX2RmYXN0YXRlX3QgKmNyZWF0ZV9jZF9uZXdzdGF0ZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkJICBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsCisJCQkJCSAgdW5zaWduZWQgaW50IGNvbnRleHQsCisJCQkJCSAgdW5zaWduZWQgaW50IGhhc2gpIGludGVybmFsX2Z1bmN0aW9uOworCisjaWZkZWYgR0FXSworI3VuZGVmIE1BWAkvKiBzYWZldHkgKi8KK3N0YXRpYyBpbnQKK01BWChzaXplX3QgYSwgc2l6ZV90IGIpCit7CisJcmV0dXJuIChhID4gYiA/IGEgOiBiKTsKK30KKyNlbmRpZgorDAorLyogRnVuY3Rpb25zIGZvciBzdHJpbmcgb3BlcmF0aW9uLiAgKi8KKworLyogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZSB0aGUgYnVmZmVycy4gIEl0IGlzIG5lY2Vzc2FyeSB0byBjYWxsCisgICByZV9zdHJpbmdfcmVjb25zdHJ1Y3QgYmVmb3JlIHVzaW5nIHRoZSBvYmplY3QuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3N0cmluZ19hbGxvY2F0ZSAocmVfc3RyaW5nX3QgKnBzdHIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgaW50IGluaXRfbGVuLAorCQkgICAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsIGludCBpY2FzZSwgY29uc3QgcmVfZGZhX3QgKmRmYSkKK3sKKyAgcmVnX2VycmNvZGVfdCByZXQ7CisgIGludCBpbml0X2J1Zl9sZW47CisKKyAgLyogRW5zdXJlIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgZml0cyBpbnRvIHRoZSBidWZmZXJzLiAgKi8KKyAgaWYgKGluaXRfbGVuIDwgZGZhLT5tYl9jdXJfbWF4KQorICAgIGluaXRfbGVuID0gZGZhLT5tYl9jdXJfbWF4OworICBpbml0X2J1Zl9sZW4gPSAobGVuICsgMSA8IGluaXRfbGVuKSA/IGxlbiArIDE6IGluaXRfbGVuOworICByZV9zdHJpbmdfY29uc3RydWN0X2NvbW1vbiAoc3RyLCBsZW4sIHBzdHIsIHRyYW5zLCBpY2FzZSwgZGZhKTsKKworICByZXQgPSByZV9zdHJpbmdfcmVhbGxvY19idWZmZXJzIChwc3RyLCBpbml0X2J1Zl9sZW4pOworICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIHJldDsKKworICBwc3RyLT53b3JkX2NoYXIgPSBkZmEtPndvcmRfY2hhcjsKKyAgcHN0ci0+d29yZF9vcHNfdXNlZCA9IGRmYS0+d29yZF9vcHNfdXNlZDsKKyAgcHN0ci0+bWJzID0gcHN0ci0+bWJzX2FsbG9jYXRlZCA/IHBzdHItPm1icyA6ICh1bnNpZ25lZCBjaGFyICopIHN0cjsKKyAgcHN0ci0+dmFsaWRfbGVuID0gKHBzdHItPm1ic19hbGxvY2F0ZWQgfHwgZGZhLT5tYl9jdXJfbWF4ID4gMSkgPyAwIDogbGVuOworICBwc3RyLT52YWxpZF9yYXdfbGVuID0gcHN0ci0+dmFsaWRfbGVuOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGUgdGhlIGJ1ZmZlcnMsIGFuZCBpbml0aWFsaXplIHRoZW0uICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3N0cmluZ19jb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sCisJCSAgICAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsIGludCBpY2FzZSwgY29uc3QgcmVfZGZhX3QgKmRmYSkKK3sKKyAgcmVnX2VycmNvZGVfdCByZXQ7CisgIG1lbXNldCAocHN0ciwgJ1wwJywgc2l6ZW9mIChyZV9zdHJpbmdfdCkpOworICByZV9zdHJpbmdfY29uc3RydWN0X2NvbW1vbiAoc3RyLCBsZW4sIHBzdHIsIHRyYW5zLCBpY2FzZSwgZGZhKTsKKworICBpZiAobGVuID4gMCkKKyAgICB7CisgICAgICByZXQgPSByZV9zdHJpbmdfcmVhbGxvY19idWZmZXJzIChwc3RyLCBsZW4gKyAxKTsKKyAgICAgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gcmV0OworICAgIH0KKyAgcHN0ci0+bWJzID0gcHN0ci0+bWJzX2FsbG9jYXRlZCA/IHBzdHItPm1icyA6ICh1bnNpZ25lZCBjaGFyICopIHN0cjsKKworICBpZiAoaWNhc2UpCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwl7CisJICB3aGlsZSAoMSkKKwkgICAgeworCSAgICAgIHJldCA9IGJ1aWxkX3djc191cHBlcl9idWZmZXIgKHBzdHIpOworCSAgICAgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJcmV0dXJuIHJldDsKKwkgICAgICBpZiAocHN0ci0+dmFsaWRfcmF3X2xlbiA+PSBsZW4pCisJCWJyZWFrOworCSAgICAgIGlmIChwc3RyLT5idWZzX2xlbiA+IHBzdHItPnZhbGlkX2xlbiArIGRmYS0+bWJfY3VyX21heCkKKwkJYnJlYWs7CisJICAgICAgcmV0ID0gcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocHN0ciwgcHN0ci0+YnVmc19sZW4gKiAyKTsKKwkgICAgICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiByZXQ7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisJYnVpbGRfdXBwZXJfYnVmZmVyIChwc3RyKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorCWJ1aWxkX3djc19idWZmZXIgKHBzdHIpOworICAgICAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworCXsKKwkgIGlmICh0cmFucyAhPSBOVUxMKQorCSAgICByZV9zdHJpbmdfdHJhbnNsYXRlX2J1ZmZlciAocHN0cik7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBwc3RyLT52YWxpZF9sZW4gPSBwc3RyLT5idWZzX2xlbjsKKwkgICAgICBwc3RyLT52YWxpZF9yYXdfbGVuID0gcHN0ci0+YnVmc19sZW47CisJICAgIH0KKwl9CisgICAgfQorCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgcmVfc3RyaW5nX2FsbG9jYXRlLCBhbmQgcmVfc3RyaW5nX2NvbnN0cnVjdC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBuZXdfYnVmX2xlbikKK3sKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisgICAgeworICAgICAgd2ludF90ICpuZXdfd2NzOworCisgICAgICAvKiBBdm9pZCBvdmVyZmxvdyBpbiByZWFsbG9jLiAgKi8KKyAgICAgIGNvbnN0IHNpemVfdCBtYXhfb2JqZWN0X3NpemUgPSBNQVggKHNpemVvZiAod2ludF90KSwgc2l6ZW9mIChpbnQpKTsKKyAgICAgIGlmIChCRSAoU0laRV9NQVggLyBtYXhfb2JqZWN0X3NpemUgPCBuZXdfYnVmX2xlbiwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgICAgIG5ld193Y3MgPSByZV9yZWFsbG9jIChwc3RyLT53Y3MsIHdpbnRfdCwgbmV3X2J1Zl9sZW4pOworICAgICAgaWYgKEJFIChuZXdfd2NzID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgcHN0ci0+d2NzID0gbmV3X3djczsKKyAgICAgIGlmIChwc3RyLT5vZmZzZXRzICE9IE5VTEwpCisJeworCSAgaW50ICpuZXdfb2Zmc2V0cyA9IHJlX3JlYWxsb2MgKHBzdHItPm9mZnNldHMsIGludCwgbmV3X2J1Zl9sZW4pOworCSAgaWYgKEJFIChuZXdfb2Zmc2V0cyA9PSBOVUxMLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICBwc3RyLT5vZmZzZXRzID0gbmV3X29mZnNldHM7CisJfQorICAgIH0KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAgKi8KKyAgaWYgKHBzdHItPm1ic19hbGxvY2F0ZWQpCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciAqbmV3X21icyA9IHJlX3JlYWxsb2MgKHBzdHItPm1icywgdW5zaWduZWQgY2hhciwKKwkJCQkJICAgbmV3X2J1Zl9sZW4pOworICAgICAgaWYgKEJFIChuZXdfbWJzID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgcHN0ci0+bWJzID0gbmV3X21iczsKKyAgICB9CisgIHBzdHItPmJ1ZnNfbGVuID0gbmV3X2J1Zl9sZW47CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3N0cmluZ19jb25zdHJ1Y3RfY29tbW9uIChjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHJlX3N0cmluZ190ICpwc3RyLAorCQkJICAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBpbnQgaWNhc2UsCisJCQkgICAgY29uc3QgcmVfZGZhX3QgKmRmYSkKK3sKKyAgcHN0ci0+cmF3X21icyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0cjsKKyAgcHN0ci0+bGVuID0gbGVuOworICBwc3RyLT5yYXdfbGVuID0gbGVuOworICBwc3RyLT50cmFucyA9IHRyYW5zOworICBwc3RyLT5pY2FzZSA9IGljYXNlID8gMSA6IDA7CisgIHBzdHItPm1ic19hbGxvY2F0ZWQgPSAodHJhbnMgIT0gTlVMTCB8fCBpY2FzZSk7CisgIHBzdHItPm1iX2N1cl9tYXggPSBkZmEtPm1iX2N1cl9tYXg7CisgIHBzdHItPmlzX3V0ZjggPSBkZmEtPmlzX3V0Zjg7CisgIHBzdHItPm1hcF9ub3Rhc2NpaSA9IGRmYS0+bWFwX25vdGFzY2lpOworICBwc3RyLT5zdG9wID0gcHN0ci0+bGVuOworICBwc3RyLT5yYXdfc3RvcCA9IHBzdHItPnN0b3A7Cit9CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCisvKiBCdWlsZCB3aWRlIGNoYXJhY3RlciBidWZmZXIgUFNUUi0+V0NTLgorICAgSWYgdGhlIGJ5dGUgc2VxdWVuY2Ugb2YgdGhlIHN0cmluZyBhcmU6CisgICAgIDxtYjE+KDApLCA8bWIxPigxKSwgPG1iMj4oMCksIDxtYjI+KDEpLCA8c2IzPgorICAgVGhlbiB3aWRlIGNoYXJhY3RlciBidWZmZXIgd2lsbCBiZToKKyAgICAgPHdjMT4gICAsIFdFT0YgICAgLCA8d2MyPiAgICwgV0VPRiAgICAsIDx3YzM+CisgICBXZSB1c2UgV0VPRiBmb3IgcGFkZGluZywgdGhleSBpbmRpY2F0ZSB0aGF0IHRoZSBwb3NpdGlvbiBpc24ndAorICAgYSBmaXJzdCBieXRlIG9mIGEgbXVsdGlieXRlIGNoYXJhY3Rlci4KKworICAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gYXNzdW1lcyBQU1RSLT5WQUxJRF9MRU4gZWxlbWVudHMgYXJlIGFscmVhZHkKKyAgIGJ1aWx0IGFuZCBzdGFydHMgZnJvbSBQU1RSLT5WQUxJRF9MRU4uICAqLworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK2J1aWxkX3djc19idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQoreworI2lmZGVmIF9MSUJDCisgIHVuc2lnbmVkIGNoYXIgYnVmW01CX0xFTl9NQVhdOworICBhc3NlcnQgKE1CX0xFTl9NQVggPj0gcHN0ci0+bWJfY3VyX21heCk7CisjZWxzZQorICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisjZW5kaWYKKyAgbWJzdGF0ZV90IHByZXZfc3Q7CisgIGludCBieXRlX2lkeCwgZW5kX2lkeCwgcmVtYWluX2xlbjsKKyAgc2l6ZV90IG1iY2xlbjsKKworICAvKiBCdWlsZCB0aGUgYnVmZmVycyBmcm9tIHBzdHItPnZhbGlkX2xlbiB0byBlaXRoZXIgcHN0ci0+bGVuIG9yCisgICAgIHBzdHItPmJ1ZnNfbGVuLiAgKi8KKyAgZW5kX2lkeCA9IChwc3RyLT5idWZzX2xlbiA+IHBzdHItPmxlbikgPyBwc3RyLT5sZW4gOiBwc3RyLT5idWZzX2xlbjsKKyAgZm9yIChieXRlX2lkeCA9IHBzdHItPnZhbGlkX2xlbjsgYnl0ZV9pZHggPCBlbmRfaWR4OykKKyAgICB7CisgICAgICB3Y2hhcl90IHdjOworICAgICAgY29uc3QgY2hhciAqcDsKKworICAgICAgcmVtYWluX2xlbiA9IGVuZF9pZHggLSBieXRlX2lkeDsKKyAgICAgIHByZXZfc3QgPSBwc3RyLT5jdXJfc3RhdGU7CisgICAgICAvKiBBcHBseSB0aGUgdHJhbnNsYXRpb24gaWYgd2UgbmVlZC4gICovCisgICAgICBpZiAoQkUgKHBzdHItPnRyYW5zICE9IE5VTEwsIDApKQorCXsKKwkgIGludCBpLCBjaDsKKworCSAgZm9yIChpID0gMDsgaSA8IHBzdHItPm1iX2N1cl9tYXggJiYgaSA8IHJlbWFpbl9sZW47ICsraSkKKwkgICAgeworCSAgICAgIGNoID0gcHN0ci0+cmF3X21icyBbcHN0ci0+cmF3X21ic19pZHggKyBieXRlX2lkeCArIGldOworCSAgICAgIGJ1ZltpXSA9IHBzdHItPm1ic1tieXRlX2lkeCArIGldID0gcHN0ci0+dHJhbnNbY2hdOworCSAgICB9CisJICBwID0gKGNvbnN0IGNoYXIgKikgYnVmOworCX0KKyAgICAgIGVsc2UKKwlwID0gKGNvbnN0IGNoYXIgKikgcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHg7CisgICAgICBtYmNsZW4gPSBfX21icnRvd2MgKCZ3YywgcCwgcmVtYWluX2xlbiwgJnBzdHItPmN1cl9zdGF0ZSk7CisgICAgICBpZiAoQkUgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMiwgMCkpCisJeworCSAgLyogVGhlIGJ1ZmZlciBkb2Vzbid0IGhhdmUgZW5vdWdoIHNwYWNlLCBmaW5pc2ggdG8gYnVpbGQuICAqLworCSAgcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwkgIGJyZWFrOworCX0KKyAgICAgIGVsc2UgaWYgKEJFIChtYmNsZW4gPT0gKHNpemVfdCkgLTEgfHwgbWJjbGVuID09IDAsIDApKQorCXsKKwkgIC8qIFdlIHRyZWF0IHRoZXNlIGNhc2VzIGFzIGEgc2luZ2xlYnl0ZSBjaGFyYWN0ZXIuICAqLworCSAgbWJjbGVuID0gMTsKKwkgIHdjID0gKHdjaGFyX3QpIHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBieXRlX2lkeF07CisJICBpZiAoQkUgKHBzdHItPnRyYW5zICE9IE5VTEwsIDApKQorCSAgICB3YyA9IHBzdHItPnRyYW5zW3djXTsKKwkgIHBzdHItPmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJfQorCisgICAgICAvKiBXcml0ZSB3aWRlIGNoYXJhY3RlciBhbmQgcGFkZGluZy4gICovCisgICAgICBwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSB3YzsKKyAgICAgIC8qIFdyaXRlIHBhZGRpbmdzLiAgKi8KKyAgICAgIGZvciAocmVtYWluX2xlbiA9IGJ5dGVfaWR4ICsgbWJjbGVuIC0gMTsgYnl0ZV9pZHggPCByZW1haW5fbGVuIDspCisJcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gV0VPRjsKKyAgICB9CisgIHBzdHItPnZhbGlkX2xlbiA9IGJ5dGVfaWR4OworICBwc3RyLT52YWxpZF9yYXdfbGVuID0gYnl0ZV9pZHg7Cit9CisKKy8qIEJ1aWxkIHdpZGUgY2hhcmFjdGVyIGJ1ZmZlciBQU1RSLT5XQ1MgbGlrZSBidWlsZF93Y3NfYnVmZmVyLAorICAgYnV0IGZvciBSRUdfSUNBU0UuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2J1aWxkX3djc191cHBlcl9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQoreworICBtYnN0YXRlX3QgcHJldl9zdDsKKyAgaW50IHNyY19pZHgsIGJ5dGVfaWR4LCBlbmRfaWR4LCByZW1haW5fbGVuOworICBzaXplX3QgbWJjbGVuOworI2lmZGVmIF9MSUJDCisgIGNoYXIgYnVmW01CX0xFTl9NQVhdOworICBhc3NlcnQgKE1CX0xFTl9NQVggPj0gcHN0ci0+bWJfY3VyX21heCk7CisjZWxzZQorICBjaGFyIGJ1Zls2NF07CisjZW5kaWYKKworICBieXRlX2lkeCA9IHBzdHItPnZhbGlkX2xlbjsKKyAgZW5kX2lkeCA9IChwc3RyLT5idWZzX2xlbiA+IHBzdHItPmxlbikgPyBwc3RyLT5sZW4gOiBwc3RyLT5idWZzX2xlbjsKKworICAvKiBUaGUgZm9sbG93aW5nIG9wdGltaXphdGlvbiBhc3N1bWVzIHRoYXQgQVNDSUkgY2hhcmFjdGVycyBjYW4gYmUKKyAgICAgbWFwcGVkIHRvIHdpZGUgY2hhcmFjdGVycyB3aXRoIGEgc2ltcGxlIGNhc3QuICAqLworICBpZiAoISBwc3RyLT5tYXBfbm90YXNjaWkgJiYgcHN0ci0+dHJhbnMgPT0gTlVMTCAmJiAhcHN0ci0+b2Zmc2V0c19uZWVkZWQpCisgICAgeworICAgICAgd2hpbGUgKGJ5dGVfaWR4IDwgZW5kX2lkeCkKKwl7CisJICB3Y2hhcl90IHdjOworCisJICBpZiAoaXNhc2NpaSAocHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIGJ5dGVfaWR4XSkKKwkgICAgICAmJiBtYnNpbml0ICgmcHN0ci0+Y3VyX3N0YXRlKSkKKwkgICAgeworCSAgICAgIC8qIEluIGNhc2Ugb2YgYSBzaW5nbGVieXRlIGNoYXJhY3Rlci4gICovCisJICAgICAgcHN0ci0+bWJzW2J5dGVfaWR4XQorCQk9IHRvdXBwZXIgKHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBieXRlX2lkeF0pOworCSAgICAgIC8qIFRoZSBuZXh0IHN0ZXAgdXNlcyB0aGUgYXNzdW1wdGlvbiB0aGF0IHdjaGFyX3QgaXMgZW5jb2RlZAorCQkgQVNDSUktc2FmZTogYWxsIEFTQ0lJIHZhbHVlcyBjYW4gYmUgY29udmVydGVkIGxpa2UgdGhpcy4gICovCisJICAgICAgcHN0ci0+d2NzW2J5dGVfaWR4XSA9ICh3Y2hhcl90KSBwc3RyLT5tYnNbYnl0ZV9pZHhdOworCSAgICAgICsrYnl0ZV9pZHg7CisJICAgICAgY29udGludWU7CisJICAgIH0KKworCSAgcmVtYWluX2xlbiA9IGVuZF9pZHggLSBieXRlX2lkeDsKKwkgIHByZXZfc3QgPSBwc3RyLT5jdXJfc3RhdGU7CisJICBtYmNsZW4gPSBfX21icnRvd2MgKCZ3YywKKwkJCSAgICAgICgoY29uc3QgY2hhciAqKSBwc3RyLT5yYXdfbWJzICsgcHN0ci0+cmF3X21ic19pZHgKKwkJCSAgICAgICArIGJ5dGVfaWR4KSwgcmVtYWluX2xlbiwgJnBzdHItPmN1cl9zdGF0ZSk7CisJICBpZiAoQkUgKG1iY2xlbiArIDIgPiAyLCAxKSkKKwkgICAgeworCSAgICAgIHdjaGFyX3Qgd2N1ID0gd2M7CisJICAgICAgaWYgKGlzd2xvd2VyICh3YykpCisJCXsKKwkJICBzaXplX3QgbWJjZGxlbjsKKworCQkgIHdjdSA9IHRvd3VwcGVyICh3Yyk7CisJCSAgbWJjZGxlbiA9IHdjcnRvbWIgKGJ1Ziwgd2N1LCAmcHJldl9zdCk7CisJCSAgaWYgKEJFIChtYmNsZW4gPT0gbWJjZGxlbiwgMSkpCisJCSAgICBtZW1jcHkgKHBzdHItPm1icyArIGJ5dGVfaWR4LCBidWYsIG1iY2xlbik7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBzcmNfaWR4ID0gYnl0ZV9pZHg7CisJCSAgICAgIGdvdG8gb2Zmc2V0c19uZWVkZWQ7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCW1lbWNweSAocHN0ci0+bWJzICsgYnl0ZV9pZHgsCisJCQlwc3RyLT5yYXdfbWJzICsgcHN0ci0+cmF3X21ic19pZHggKyBieXRlX2lkeCwgbWJjbGVuKTsKKwkgICAgICBwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSB3Y3U7CisJICAgICAgLyogV3JpdGUgcGFkZGluZ3MuICAqLworCSAgICAgIGZvciAocmVtYWluX2xlbiA9IGJ5dGVfaWR4ICsgbWJjbGVuIC0gMTsgYnl0ZV9pZHggPCByZW1haW5fbGVuIDspCisJCXBzdHItPndjc1tieXRlX2lkeCsrXSA9IFdFT0Y7CisJICAgIH0KKwkgIGVsc2UgaWYgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSB8fCBtYmNsZW4gPT0gMCkKKwkgICAgeworCSAgICAgIC8qIEl0IGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIG9yICdcMCcuICBKdXN0IHVzZSB0aGUgYnl0ZS4gICovCisJICAgICAgaW50IGNoID0gcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIGJ5dGVfaWR4XTsKKwkgICAgICBwc3RyLT5tYnNbYnl0ZV9pZHhdID0gY2g7CisJICAgICAgLyogQW5kIGFsc28gY2FzdCBpdCB0byB3aWRlIGNoYXIuICAqLworCSAgICAgIHBzdHItPndjc1tieXRlX2lkeCsrXSA9ICh3Y2hhcl90KSBjaDsKKwkgICAgICBpZiAoQkUgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSwgMCkpCisJCXBzdHItPmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIFRoZSBidWZmZXIgZG9lc24ndCBoYXZlIGVub3VnaCBzcGFjZSwgZmluaXNoIHRvIGJ1aWxkLiAgKi8KKwkgICAgICBwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAgICAgcHN0ci0+dmFsaWRfbGVuID0gYnl0ZV9pZHg7CisgICAgICBwc3RyLT52YWxpZF9yYXdfbGVuID0gYnl0ZV9pZHg7CisgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisgICAgfQorICBlbHNlCisgICAgZm9yIChzcmNfaWR4ID0gcHN0ci0+dmFsaWRfcmF3X2xlbjsgYnl0ZV9pZHggPCBlbmRfaWR4OykKKyAgICAgIHsKKwl3Y2hhcl90IHdjOworCWNvbnN0IGNoYXIgKnA7CisgICAgICBvZmZzZXRzX25lZWRlZDoKKwlyZW1haW5fbGVuID0gZW5kX2lkeCAtIGJ5dGVfaWR4OworCXByZXZfc3QgPSBwc3RyLT5jdXJfc3RhdGU7CisJaWYgKEJFIChwc3RyLT50cmFucyAhPSBOVUxMLCAwKSkKKwkgIHsKKwkgICAgaW50IGksIGNoOworCisJICAgIGZvciAoaSA9IDA7IGkgPCBwc3RyLT5tYl9jdXJfbWF4ICYmIGkgPCByZW1haW5fbGVuOyArK2kpCisJICAgICAgeworCQljaCA9IHBzdHItPnJhd19tYnMgW3BzdHItPnJhd19tYnNfaWR4ICsgc3JjX2lkeCArIGldOworCQlidWZbaV0gPSBwc3RyLT50cmFuc1tjaF07CisJICAgICAgfQorCSAgICBwID0gKGNvbnN0IGNoYXIgKikgYnVmOworCSAgfQorCWVsc2UKKwkgIHAgPSAoY29uc3QgY2hhciAqKSBwc3RyLT5yYXdfbWJzICsgcHN0ci0+cmF3X21ic19pZHggKyBzcmNfaWR4OworCW1iY2xlbiA9IF9fbWJydG93YyAoJndjLCBwLCByZW1haW5fbGVuLCAmcHN0ci0+Y3VyX3N0YXRlKTsKKwlpZiAoQkUgKG1iY2xlbiArIDIgPiAyLCAxKSkKKwkgIHsKKwkgICAgd2NoYXJfdCB3Y3UgPSB3YzsKKwkgICAgaWYgKGlzd2xvd2VyICh3YykpCisJICAgICAgeworCQlzaXplX3QgbWJjZGxlbjsKKworCQl3Y3UgPSB0b3d1cHBlciAod2MpOworCQltYmNkbGVuID0gd2NydG9tYiAoKGNoYXIgKikgYnVmLCB3Y3UsICZwcmV2X3N0KTsKKwkJaWYgKEJFIChtYmNsZW4gPT0gbWJjZGxlbiwgMSkpCisJCSAgbWVtY3B5IChwc3RyLT5tYnMgKyBieXRlX2lkeCwgYnVmLCBtYmNsZW4pOworCQllbHNlIGlmIChtYmNkbGVuICE9IChzaXplX3QpIC0xKQorCQkgIHsKKwkJICAgIHNpemVfdCBpOworCisJCSAgICBpZiAoYnl0ZV9pZHggKyBtYmNkbGVuID4gcHN0ci0+YnVmc19sZW4pCisJCSAgICAgIHsKKwkJCXBzdHItPmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJCQlicmVhazsKKwkJICAgICAgfQorCisJCSAgICBpZiAocHN0ci0+b2Zmc2V0cyA9PSBOVUxMKQorCQkgICAgICB7CisJCQlwc3RyLT5vZmZzZXRzID0gcmVfbWFsbG9jIChpbnQsIHBzdHItPmJ1ZnNfbGVuKTsKKworCQkJaWYgKHBzdHItPm9mZnNldHMgPT0gTlVMTCkKKwkJCSAgcmV0dXJuIFJFR19FU1BBQ0U7CisJCSAgICAgIH0KKwkJICAgIGlmICghcHN0ci0+b2Zmc2V0c19uZWVkZWQpCisJCSAgICAgIHsKKwkJCWZvciAoaSA9IDA7IGkgPCAoc2l6ZV90KSBieXRlX2lkeDsgKytpKQorCQkJICBwc3RyLT5vZmZzZXRzW2ldID0gaTsKKwkJCXBzdHItPm9mZnNldHNfbmVlZGVkID0gMTsKKwkJICAgICAgfQorCisJCSAgICBtZW1jcHkgKHBzdHItPm1icyArIGJ5dGVfaWR4LCBidWYsIG1iY2RsZW4pOworCQkgICAgcHN0ci0+d2NzW2J5dGVfaWR4XSA9IHdjdTsKKwkJICAgIHBzdHItPm9mZnNldHNbYnl0ZV9pZHhdID0gc3JjX2lkeDsKKwkJICAgIGZvciAoaSA9IDE7IGkgPCBtYmNkbGVuOyArK2kpCisJCSAgICAgIHsKKwkJCXBzdHItPm9mZnNldHNbYnl0ZV9pZHggKyBpXQorCQkJICA9IHNyY19pZHggKyAoaSA8IG1iY2xlbiA/IGkgOiBtYmNsZW4gLSAxKTsKKwkJCXBzdHItPndjc1tieXRlX2lkeCArIGldID0gV0VPRjsKKwkJICAgICAgfQorCQkgICAgcHN0ci0+bGVuICs9IG1iY2RsZW4gLSBtYmNsZW47CisJCSAgICBpZiAocHN0ci0+cmF3X3N0b3AgPiBzcmNfaWR4KQorCQkgICAgICBwc3RyLT5zdG9wICs9IG1iY2RsZW4gLSBtYmNsZW47CisJCSAgICBlbmRfaWR4ID0gKHBzdHItPmJ1ZnNfbGVuID4gcHN0ci0+bGVuKQorCQkJICAgICAgPyBwc3RyLT5sZW4gOiBwc3RyLT5idWZzX2xlbjsKKwkJICAgIGJ5dGVfaWR4ICs9IG1iY2RsZW47CisJCSAgICBzcmNfaWR4ICs9IG1iY2xlbjsKKwkJICAgIGNvbnRpbnVlOworCQkgIH0KKwkJZWxzZQorCQkgIG1lbWNweSAocHN0ci0+bWJzICsgYnl0ZV9pZHgsIHAsIG1iY2xlbik7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgbWVtY3B5IChwc3RyLT5tYnMgKyBieXRlX2lkeCwgcCwgbWJjbGVuKTsKKworCSAgICBpZiAoQkUgKHBzdHItPm9mZnNldHNfbmVlZGVkICE9IDAsIDApKQorCSAgICAgIHsKKwkJc2l6ZV90IGk7CisJCWZvciAoaSA9IDA7IGkgPCBtYmNsZW47ICsraSkKKwkJICBwc3RyLT5vZmZzZXRzW2J5dGVfaWR4ICsgaV0gPSBzcmNfaWR4ICsgaTsKKwkgICAgICB9CisJICAgIHNyY19pZHggKz0gbWJjbGVuOworCisJICAgIHBzdHItPndjc1tieXRlX2lkeCsrXSA9IHdjdTsKKwkgICAgLyogV3JpdGUgcGFkZGluZ3MuICAqLworCSAgICBmb3IgKHJlbWFpbl9sZW4gPSBieXRlX2lkeCArIG1iY2xlbiAtIDE7IGJ5dGVfaWR4IDwgcmVtYWluX2xlbiA7KQorCSAgICAgIHBzdHItPndjc1tieXRlX2lkeCsrXSA9IFdFT0Y7CisJICB9CisJZWxzZSBpZiAobWJjbGVuID09IChzaXplX3QpIC0xIHx8IG1iY2xlbiA9PSAwKQorCSAgeworCSAgICAvKiBJdCBpcyBhbiBpbnZhbGlkIGNoYXJhY3RlciBvciAnXDAnLiAgSnVzdCB1c2UgdGhlIGJ5dGUuICAqLworCSAgICBpbnQgY2ggPSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgc3JjX2lkeF07CisKKwkgICAgaWYgKEJFIChwc3RyLT50cmFucyAhPSBOVUxMLCAwKSkKKwkgICAgICBjaCA9IHBzdHItPnRyYW5zIFtjaF07CisJICAgIHBzdHItPm1ic1tieXRlX2lkeF0gPSBjaDsKKworCSAgICBpZiAoQkUgKHBzdHItPm9mZnNldHNfbmVlZGVkICE9IDAsIDApKQorCSAgICAgIHBzdHItPm9mZnNldHNbYnl0ZV9pZHhdID0gc3JjX2lkeDsKKwkgICAgKytzcmNfaWR4OworCisJICAgIC8qIEFuZCBhbHNvIGNhc3QgaXQgdG8gd2lkZSBjaGFyLiAgKi8KKwkgICAgcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gKHdjaGFyX3QpIGNoOworCSAgICBpZiAoQkUgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSwgMCkpCisJICAgICAgcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIC8qIFRoZSBidWZmZXIgZG9lc24ndCBoYXZlIGVub3VnaCBzcGFjZSwgZmluaXNoIHRvIGJ1aWxkLiAgKi8KKwkgICAgcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwkgICAgYnJlYWs7CisJICB9CisgICAgICB9CisgIHBzdHItPnZhbGlkX2xlbiA9IGJ5dGVfaWR4OworICBwc3RyLT52YWxpZF9yYXdfbGVuID0gc3JjX2lkeDsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBTa2lwIGNoYXJhY3RlcnMgdW50aWwgdGhlIGluZGV4IGJlY29tZXMgZ3JlYXRlciB0aGFuIE5FV19SQVdfSURYLgorICAgUmV0dXJuIHRoZSBpbmRleC4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfc2tpcF9jaGFycyAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBuZXdfcmF3X2lkeCwgd2ludF90ICpsYXN0X3djKQoreworICBtYnN0YXRlX3QgcHJldl9zdDsKKyAgaW50IHJhd2J1Zl9pZHg7CisgIHNpemVfdCBtYmNsZW47CisgIHdpbnRfdCB3YyA9IFdFT0Y7CisKKyAgLyogU2tpcCB0aGUgY2hhcmFjdGVycyB3aGljaCBhcmUgbm90IG5lY2Vzc2FyeSB0byBjaGVjay4gICovCisgIGZvciAocmF3YnVmX2lkeCA9IHBzdHItPnJhd19tYnNfaWR4ICsgcHN0ci0+dmFsaWRfcmF3X2xlbjsKKyAgICAgICByYXdidWZfaWR4IDwgbmV3X3Jhd19pZHg7KQorICAgIHsKKyAgICAgIHdjaGFyX3Qgd2MyOworICAgICAgaW50IHJlbWFpbl9sZW4gPSBwc3RyLT5sZW4gLSByYXdidWZfaWR4OworICAgICAgcHJldl9zdCA9IHBzdHItPmN1cl9zdGF0ZTsKKyAgICAgIG1iY2xlbiA9IF9fbWJydG93YyAoJndjMiwgKGNvbnN0IGNoYXIgKikgcHN0ci0+cmF3X21icyArIHJhd2J1Zl9pZHgsCisJCQkgIHJlbWFpbl9sZW4sICZwc3RyLT5jdXJfc3RhdGUpOworICAgICAgaWYgKEJFIChtYmNsZW4gPT0gKHNpemVfdCkgLTIgfHwgbWJjbGVuID09IChzaXplX3QpIC0xIHx8IG1iY2xlbiA9PSAwLCAwKSkKKwl7CisJICAvKiBXZSB0cmVhdCB0aGVzZSBjYXNlcyBhcyBhIHNpbmdsZSBieXRlIGNoYXJhY3Rlci4gICovCisJICBpZiAobWJjbGVuID09IDAgfHwgcmVtYWluX2xlbiA9PSAwKQorCSAgICB3YyA9IEwnXDAnOworCSAgZWxzZQorCSAgICB3YyA9ICoodW5zaWduZWQgY2hhciAqKSAocHN0ci0+cmF3X21icyArIHJhd2J1Zl9pZHgpOworCSAgbWJjbGVuID0gMTsKKwkgIHBzdHItPmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJfQorICAgICAgZWxzZQorCXdjID0gKHdpbnRfdCkgd2MyOworICAgICAgLyogVGhlbiBwcm9jZWVkIHRoZSBuZXh0IGNoYXJhY3Rlci4gICovCisgICAgICByYXdidWZfaWR4ICs9IG1iY2xlbjsKKyAgICB9CisgICpsYXN0X3djID0gKHdpbnRfdCkgd2M7CisgIHJldHVybiByYXdidWZfaWR4OworfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworCisvKiBCdWlsZCB0aGUgYnVmZmVyIFBTVFItPk1CUywgYW5kIGFwcGx5IHRoZSB0cmFuc2xhdGlvbiBpZiB3ZSBuZWVkLgorICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGNhc2Ugb2YgUkVHX0lDQVNFLiAgKi8KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCitidWlsZF91cHBlcl9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQoreworICBpbnQgY2hhcl9pZHgsIGVuZF9pZHg7CisgIGVuZF9pZHggPSAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT5sZW4pID8gcHN0ci0+bGVuIDogcHN0ci0+YnVmc19sZW47CisKKyAgZm9yIChjaGFyX2lkeCA9IHBzdHItPnZhbGlkX2xlbjsgY2hhcl9pZHggPCBlbmRfaWR4OyArK2NoYXJfaWR4KQorICAgIHsKKyAgICAgIGludCBjaCA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBjaGFyX2lkeF07CisgICAgICBpZiAoQkUgKHBzdHItPnRyYW5zICE9IE5VTEwsIDApKQorCWNoID0gcHN0ci0+dHJhbnNbY2hdOworICAgICAgaWYgKGlzbG93ZXIgKGNoKSkKKwlwc3RyLT5tYnNbY2hhcl9pZHhdID0gdG91cHBlciAoY2gpOworICAgICAgZWxzZQorCXBzdHItPm1ic1tjaGFyX2lkeF0gPSBjaDsKKyAgICB9CisgIHBzdHItPnZhbGlkX2xlbiA9IGNoYXJfaWR4OworICBwc3RyLT52YWxpZF9yYXdfbGVuID0gY2hhcl9pZHg7Cit9CisKKy8qIEFwcGx5IFRSQU5TIHRvIHRoZSBidWZmZXIgaW4gUFNUUi4gICovCisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX3RyYW5zbGF0ZV9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQoreworICBpbnQgYnVmX2lkeCwgZW5kX2lkeDsKKyAgZW5kX2lkeCA9IChwc3RyLT5idWZzX2xlbiA+IHBzdHItPmxlbikgPyBwc3RyLT5sZW4gOiBwc3RyLT5idWZzX2xlbjsKKworICBmb3IgKGJ1Zl9pZHggPSBwc3RyLT52YWxpZF9sZW47IGJ1Zl9pZHggPCBlbmRfaWR4OyArK2J1Zl9pZHgpCisgICAgeworICAgICAgaW50IGNoID0gcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIGJ1Zl9pZHhdOworICAgICAgcHN0ci0+bWJzW2J1Zl9pZHhdID0gcHN0ci0+dHJhbnNbY2hdOworICAgIH0KKworICBwc3RyLT52YWxpZF9sZW4gPSBidWZfaWR4OworICBwc3RyLT52YWxpZF9yYXdfbGVuID0gYnVmX2lkeDsKK30KKworLyogVGhpcyBmdW5jdGlvbiByZS1jb25zdHJ1Y3QgdGhlIGJ1ZmZlcnMuCisgICBDb25jcmV0ZWx5LCBjb252ZXJ0IHRvIHdpZGUgY2hhcmFjdGVyIGluIGNhc2Ugb2YgcHN0ci0+bWJfY3VyX21heCA+IDEsCisgICBjb252ZXJ0IHRvIHVwcGVyIGNhc2UgaW4gY2FzZSBvZiBSRUdfSUNBU0UsIGFwcGx5IHRyYW5zbGF0aW9uLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4LCBpbnQgZWZsYWdzKQoreworICBpbnQgb2Zmc2V0ID0gaWR4IC0gcHN0ci0+cmF3X21ic19pZHg7CisgIGlmIChCRSAob2Zmc2V0IDwgMCwgMCkpCisgICAgeworICAgICAgLyogUmVzZXQgYnVmZmVyLiAgKi8KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorCW1lbXNldCAoJnBzdHItPmN1cl9zdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgICAgcHN0ci0+bGVuID0gcHN0ci0+cmF3X2xlbjsKKyAgICAgIHBzdHItPnN0b3AgPSBwc3RyLT5yYXdfc3RvcDsKKyAgICAgIHBzdHItPnZhbGlkX2xlbiA9IDA7CisgICAgICBwc3RyLT5yYXdfbWJzX2lkeCA9IDA7CisgICAgICBwc3RyLT52YWxpZF9yYXdfbGVuID0gMDsKKyAgICAgIHBzdHItPm9mZnNldHNfbmVlZGVkID0gMDsKKyAgICAgIHBzdHItPnRpcF9jb250ZXh0ID0gKChlZmxhZ3MgJiBSRUdfTk9UQk9MKSA/IENPTlRFWFRfQkVHQlVGCisJCQkgICA6IENPTlRFWFRfTkVXTElORSB8IENPTlRFWFRfQkVHQlVGKTsKKyAgICAgIGlmICghcHN0ci0+bWJzX2FsbG9jYXRlZCkKKwlwc3RyLT5tYnMgPSAodW5zaWduZWQgY2hhciAqKSBwc3RyLT5yYXdfbWJzOworICAgICAgb2Zmc2V0ID0gaWR4OworICAgIH0KKworICBpZiAoQkUgKG9mZnNldCAhPSAwLCAxKSkKKyAgICB7CisgICAgICAvKiBTaG91bGQgdGhlIGFscmVhZHkgY2hlY2tlZCBjaGFyYWN0ZXJzIGJlIGtlcHQ/ICAqLworICAgICAgaWYgKEJFIChvZmZzZXQgPCBwc3RyLT52YWxpZF9yYXdfbGVuLCAxKSkKKwl7CisJICAvKiBZZXMsIG1vdmUgdGhlbSB0byB0aGUgZnJvbnQgb2YgdGhlIGJ1ZmZlci4gICovCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgIGlmIChCRSAocHN0ci0+b2Zmc2V0c19uZWVkZWQsIDApKQorCSAgICB7CisJICAgICAgaW50IGxvdyA9IDAsIGhpZ2ggPSBwc3RyLT52YWxpZF9sZW4sIG1pZDsKKwkgICAgICBkbworCQl7CisJCSAgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKKwkJICBpZiAocHN0ci0+b2Zmc2V0c1ttaWRdID4gb2Zmc2V0KQorCQkgICAgaGlnaCA9IG1pZDsKKwkJICBlbHNlIGlmIChwc3RyLT5vZmZzZXRzW21pZF0gPCBvZmZzZXQpCisJCSAgICBsb3cgPSBtaWQgKyAxOworCQkgIGVsc2UKKwkJICAgIGJyZWFrOworCQl9CisJICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpOworCSAgICAgIGlmIChwc3RyLT5vZmZzZXRzW21pZF0gPCBvZmZzZXQpCisJCSsrbWlkOworCSAgICAgIHBzdHItPnRpcF9jb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKHBzdHIsIG1pZCAtIDEsCisJCQkJCQkJZWZsYWdzKTsKKwkgICAgICAvKiBUaGlzIGNhbiBiZSBxdWl0ZSBjb21wbGljYXRlZCwgc28gaGFuZGxlIHNwZWNpYWxseQorCQkgb25seSB0aGUgY29tbW9uIGFuZCBlYXN5IGNhc2Ugd2hlcmUgdGhlIGNoYXJhY3RlciB3aXRoCisJCSBkaWZmZXJlbnQgbGVuZ3RoIHJlcHJlc2VudGF0aW9uIG9mIGxvd2VyIGFuZCB1cHBlcgorCQkgY2FzZSBpcyBwcmVzZW50IGF0IG9yIGFmdGVyIG9mZnNldC4gICovCisJICAgICAgaWYgKHBzdHItPnZhbGlkX2xlbiA+IG9mZnNldAorCQkgICYmIG1pZCA9PSBvZmZzZXQgJiYgcHN0ci0+b2Zmc2V0c1ttaWRdID09IG9mZnNldCkKKwkJeworCQkgIG1lbW1vdmUgKHBzdHItPndjcywgcHN0ci0+d2NzICsgb2Zmc2V0LAorCQkJICAgKHBzdHItPnZhbGlkX2xlbiAtIG9mZnNldCkgKiBzaXplb2YgKHdpbnRfdCkpOworCQkgIG1lbW1vdmUgKHBzdHItPm1icywgcHN0ci0+bWJzICsgb2Zmc2V0LCBwc3RyLT52YWxpZF9sZW4gLSBvZmZzZXQpOworCQkgIHBzdHItPnZhbGlkX2xlbiAtPSBvZmZzZXQ7CisJCSAgcHN0ci0+dmFsaWRfcmF3X2xlbiAtPSBvZmZzZXQ7CisJCSAgZm9yIChsb3cgPSAwOyBsb3cgPCBwc3RyLT52YWxpZF9sZW47IGxvdysrKQorCQkgICAgcHN0ci0+b2Zmc2V0c1tsb3ddID0gcHN0ci0+b2Zmc2V0c1tsb3cgKyBvZmZzZXRdIC0gb2Zmc2V0OworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgLyogT3RoZXJ3aXNlLCBqdXN0IGZpbmQgb3V0IGhvdyBsb25nIHRoZSBwYXJ0aWFsIG11bHRpYnl0ZQorCQkgICAgIGNoYXJhY3RlciBhdCBvZmZzZXQgaXMgYW5kIGZpbGwgaXQgd2l0aCBXRU9GLzI1NS4gICovCisJCSAgcHN0ci0+bGVuID0gcHN0ci0+cmF3X2xlbiAtIGlkeCArIG9mZnNldDsKKwkJICBwc3RyLT5zdG9wID0gcHN0ci0+cmF3X3N0b3AgLSBpZHggKyBvZmZzZXQ7CisJCSAgcHN0ci0+b2Zmc2V0c19uZWVkZWQgPSAwOworCQkgIHdoaWxlIChtaWQgPiAwICYmIHBzdHItPm9mZnNldHNbbWlkIC0gMV0gPT0gb2Zmc2V0KQorCQkgICAgLS1taWQ7CisJCSAgd2hpbGUgKG1pZCA8IHBzdHItPnZhbGlkX2xlbikKKwkJICAgIGlmIChwc3RyLT53Y3NbbWlkXSAhPSBXRU9GKQorCQkgICAgICBicmVhazsKKwkJICAgIGVsc2UKKwkJICAgICAgKyttaWQ7CisJCSAgaWYgKG1pZCA9PSBwc3RyLT52YWxpZF9sZW4pCisJCSAgICBwc3RyLT52YWxpZF9sZW4gPSAwOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgcHN0ci0+dmFsaWRfbGVuID0gcHN0ci0+b2Zmc2V0c1ttaWRdIC0gb2Zmc2V0OworCQkgICAgICBpZiAocHN0ci0+dmFsaWRfbGVuKQorCQkJeworCQkJICBmb3IgKGxvdyA9IDA7IGxvdyA8IHBzdHItPnZhbGlkX2xlbjsgKytsb3cpCisJCQkgICAgcHN0ci0+d2NzW2xvd10gPSBXRU9GOworCQkJICBtZW1zZXQgKHBzdHItPm1icywgMjU1LCBwc3RyLT52YWxpZF9sZW4pOworCQkJfQorCQkgICAgfQorCQkgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSBwc3RyLT52YWxpZF9sZW47CisJCX0KKwkgICAgfQorCSAgZWxzZQorI2VuZGlmCisJICAgIHsKKwkgICAgICBwc3RyLT50aXBfY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0IChwc3RyLCBvZmZzZXQgLSAxLAorCQkJCQkJCWVmbGFncyk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisJCW1lbW1vdmUgKHBzdHItPndjcywgcHN0ci0+d2NzICsgb2Zmc2V0LAorCQkJIChwc3RyLT52YWxpZF9sZW4gLSBvZmZzZXQpICogc2l6ZW9mICh3aW50X3QpKTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCSAgICAgIGlmIChCRSAocHN0ci0+bWJzX2FsbG9jYXRlZCwgMCkpCisJCW1lbW1vdmUgKHBzdHItPm1icywgcHN0ci0+bWJzICsgb2Zmc2V0LAorCQkJIHBzdHItPnZhbGlkX2xlbiAtIG9mZnNldCk7CisJICAgICAgcHN0ci0+dmFsaWRfbGVuIC09IG9mZnNldDsKKwkgICAgICBwc3RyLT52YWxpZF9yYXdfbGVuIC09IG9mZnNldDsKKyNpZiBERUJVRworCSAgICAgIGFzc2VydCAocHN0ci0+dmFsaWRfbGVuID4gMCk7CisjZW5kaWYKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgIC8qIE5vLCBza2lwIGFsbCBjaGFyYWN0ZXJzIHVudGlsIElEWC4gICovCisJICBpbnQgcHJldl92YWxpZF9sZW4gPSBwc3RyLT52YWxpZF9sZW47CisKKwkgIGlmIChCRSAocHN0ci0+b2Zmc2V0c19uZWVkZWQsIDApKQorCSAgICB7CisJICAgICAgcHN0ci0+bGVuID0gcHN0ci0+cmF3X2xlbiAtIGlkeCArIG9mZnNldDsKKwkgICAgICBwc3RyLT5zdG9wID0gcHN0ci0+cmF3X3N0b3AgLSBpZHggKyBvZmZzZXQ7CisJICAgICAgcHN0ci0+b2Zmc2V0c19uZWVkZWQgPSAwOworCSAgICB9CisjZW5kaWYKKwkgIHBzdHItPnZhbGlkX2xlbiA9IDA7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKwkgICAgeworCSAgICAgIGludCB3Y3NfaWR4OworCSAgICAgIHdpbnRfdCB3YyA9IFdFT0Y7CisKKwkgICAgICBpZiAocHN0ci0+aXNfdXRmOCkKKwkJeworCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJhdywgKnAsICplbmQ7CisKKwkJICAvKiBTcGVjaWFsIGNhc2UgVVRGLTguICBNdWx0aS1ieXRlIGNoYXJzIHN0YXJ0IHdpdGggYW55CisJCSAgICAgYnl0ZSBvdGhlciB0aGFuIDB4ODAgLSAweGJmLiAgKi8KKwkJICByYXcgPSBwc3RyLT5yYXdfbWJzICsgcHN0ci0+cmF3X21ic19pZHg7CisJCSAgZW5kID0gcmF3ICsgKG9mZnNldCAtIHBzdHItPm1iX2N1cl9tYXgpOworCQkgIGlmIChlbmQgPCBwc3RyLT5yYXdfbWJzKQorCQkgICAgZW5kID0gcHN0ci0+cmF3X21iczsKKwkJICBwID0gcmF3ICsgb2Zmc2V0IC0gMTsKKyNpZmRlZiBfTElCQworCQkgIC8qIFdlIGtub3cgdGhlIHdjaGFyX3QgZW5jb2RpbmcgaXMgVUNTNCwgc28gZm9yIHRoZSBzaW1wbGUKKwkJICAgICBjYXNlLCBBU0NJSSBjaGFyYWN0ZXJzLCBza2lwIHRoZSBjb252ZXJzaW9uIHN0ZXAuICAqLworCQkgIGlmIChpc2FzY2lpICgqcCkgJiYgQkUgKHBzdHItPnRyYW5zID09IE5VTEwsIDEpKQorCQkgICAgeworCQkgICAgICBtZW1zZXQgKCZwc3RyLT5jdXJfc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisJCSAgICAgIC8qIHBzdHItPnZhbGlkX2xlbiA9IDA7ICovCisJCSAgICAgIHdjID0gKHdjaGFyX3QpICpwOworCQkgICAgfQorCQkgIGVsc2UKKyNlbmRpZgorCQkgICAgZm9yICg7IHAgPj0gZW5kOyAtLXApCisJCSAgICAgIGlmICgoKnAgJiAweGMwKSAhPSAweDgwKQorCQkJeworCQkJICBtYnN0YXRlX3QgY3VyX3N0YXRlOworCQkJICB3Y2hhcl90IHdjMjsKKwkJCSAgaW50IG1sZW4gPSByYXcgKyBwc3RyLT5sZW4gLSBwOworCQkJICB1bnNpZ25lZCBjaGFyIGJ1Zls2XTsKKwkJCSAgc2l6ZV90IG1iY2xlbjsKKworCQkJICBpZiAoQkUgKHBzdHItPnRyYW5zICE9IE5VTEwsIDApKQorCQkJICAgIHsKKwkJCSAgICAgIGludCBpID0gbWxlbiA8IDYgPyBtbGVuIDogNjsKKwkJCSAgICAgIHdoaWxlICgtLWkgPj0gMCkKKwkJCQlidWZbaV0gPSBwc3RyLT50cmFuc1twW2ldXTsKKwkJCSAgICB9CisJCQkgIC8qIFhYWCBEb24ndCB1c2UgbWJydG93Yywgd2Uga25vdyB3aGljaCBjb252ZXJzaW9uCisJCQkgICAgIHRvIHVzZSAoVVRGLTggLT4gVUNTNCkuICAqLworCQkJICBtZW1zZXQgKCZjdXJfc3RhdGUsIDAsIHNpemVvZiAoY3VyX3N0YXRlKSk7CisJCQkgIG1iY2xlbiA9IF9fbWJydG93YyAoJndjMiwgKGNvbnN0IGNoYXIgKikgcCwgbWxlbiwKKwkJCQkJICAgICAgJmN1cl9zdGF0ZSk7CisJCQkgIGlmIChyYXcgKyBvZmZzZXQgLSBwIDw9IG1iY2xlbgorCQkJICAgICAgJiYgbWJjbGVuIDwgKHNpemVfdCkgLTIpCisJCQkgICAgeworCQkJICAgICAgbWVtc2V0ICgmcHN0ci0+Y3VyX3N0YXRlLCAnXDAnLAorCQkJCSAgICAgIHNpemVvZiAobWJzdGF0ZV90KSk7CisJCQkgICAgICBwc3RyLT52YWxpZF9sZW4gPSBtYmNsZW4gLSAocmF3ICsgb2Zmc2V0IC0gcCk7CisJCQkgICAgICB3YyA9IHdjMjsKKwkJCSAgICB9CisJCQkgIGJyZWFrOworCQkJfQorCQl9CisKKwkgICAgICBpZiAod2MgPT0gV0VPRikKKwkJcHN0ci0+dmFsaWRfbGVuID0gcmVfc3RyaW5nX3NraXBfY2hhcnMgKHBzdHIsIGlkeCwgJndjKSAtIGlkeDsKKwkgICAgICBpZiAod2MgPT0gV0VPRikKKwkJcHN0ci0+dGlwX2NvbnRleHQKKwkJICA9IHJlX3N0cmluZ19jb250ZXh0X2F0IChwc3RyLCBwcmV2X3ZhbGlkX2xlbiAtIDEsIGVmbGFncyk7CisJICAgICAgZWxzZQorCQlwc3RyLT50aXBfY29udGV4dCA9ICgoQkUgKHBzdHItPndvcmRfb3BzX3VzZWQgIT0gMCwgMCkKKwkJCQkgICAgICAmJiBJU19XSURFX1dPUkRfQ0hBUiAod2MpKQorCQkJCSAgICAgPyBDT05URVhUX1dPUkQKKwkJCQkgICAgIDogKChJU19XSURFX05FV0xJTkUgKHdjKQorCQkJCQkgJiYgcHN0ci0+bmV3bGluZV9hbmNob3IpCisJCQkJCT8gQ09OVEVYVF9ORVdMSU5FIDogMCkpOworCSAgICAgIGlmIChCRSAocHN0ci0+dmFsaWRfbGVuLCAwKSkKKwkJeworCQkgIGZvciAod2NzX2lkeCA9IDA7IHdjc19pZHggPCBwc3RyLT52YWxpZF9sZW47ICsrd2NzX2lkeCkKKwkJICAgIHBzdHItPndjc1t3Y3NfaWR4XSA9IFdFT0Y7CisJCSAgaWYgKHBzdHItPm1ic19hbGxvY2F0ZWQpCisJCSAgICBtZW1zZXQgKHBzdHItPm1icywgMjU1LCBwc3RyLT52YWxpZF9sZW4pOworCQl9CisJICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IHBzdHItPnZhbGlkX2xlbjsKKwkgICAgfQorCSAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJICAgIHsKKwkgICAgICBpbnQgYyA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBvZmZzZXQgLSAxXTsKKwkgICAgICBwc3RyLT52YWxpZF9yYXdfbGVuID0gMDsKKwkgICAgICBpZiAocHN0ci0+dHJhbnMpCisJCWMgPSBwc3RyLT50cmFuc1tjXTsKKwkgICAgICBwc3RyLT50aXBfY29udGV4dCA9IChiaXRzZXRfY29udGFpbiAocHN0ci0+d29yZF9jaGFyLCBjKQorCQkJCSAgID8gQ09OVEVYVF9XT1JECisJCQkJICAgOiAoKElTX05FV0xJTkUgKGMpICYmIHBzdHItPm5ld2xpbmVfYW5jaG9yKQorCQkJCSAgICAgID8gQ09OVEVYVF9ORVdMSU5FIDogMCkpOworCSAgICB9CisJfQorICAgICAgaWYgKCFCRSAocHN0ci0+bWJzX2FsbG9jYXRlZCwgMCkpCisJcHN0ci0+bWJzICs9IG9mZnNldDsKKyAgICB9CisgIHBzdHItPnJhd19tYnNfaWR4ID0gaWR4OworICBwc3RyLT5sZW4gLT0gb2Zmc2V0OworICBwc3RyLT5zdG9wIC09IG9mZnNldDsKKworICAvKiBUaGVuIGJ1aWxkIHRoZSBidWZmZXJzLiAgKi8KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisgICAgeworICAgICAgaWYgKHBzdHItPmljYXNlKQorCXsKKwkgIHJlZ19lcnJjb2RlX3QgcmV0ID0gYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocHN0cik7CisJICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiByZXQ7CisJfQorICAgICAgZWxzZQorCWJ1aWxkX3djc19idWZmZXIgKHBzdHIpOworICAgIH0KKyAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgaWYgKEJFIChwc3RyLT5tYnNfYWxsb2NhdGVkLCAwKSkKKyAgICAgIHsKKwlpZiAocHN0ci0+aWNhc2UpCisJICBidWlsZF91cHBlcl9idWZmZXIgKHBzdHIpOworCWVsc2UgaWYgKHBzdHItPnRyYW5zICE9IE5VTEwpCisJICByZV9zdHJpbmdfdHJhbnNsYXRlX2J1ZmZlciAocHN0cik7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcHN0ci0+dmFsaWRfbGVuID0gcHN0ci0+bGVuOworCisgIHBzdHItPmN1cl9pZHggPSAwOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyCitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfc3RyaW5nX3BlZWtfYnl0ZV9jYXNlIChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCkKK3sKKyAgaW50IGNoLCBvZmY7CisKKyAgLyogSGFuZGxlIHRoZSBjb21tb24gKGVhc2llc3QpIGNhc2VzIGZpcnN0LiAgKi8KKyAgaWYgKEJFICghcHN0ci0+bWJzX2FsbG9jYXRlZCwgMSkpCisgICAgcmV0dXJuIHJlX3N0cmluZ19wZWVrX2J5dGUgKHBzdHIsIGlkeCk7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEKKyAgICAgICYmICEgcmVfc3RyaW5nX2lzX3NpbmdsZV9ieXRlX2NoYXIgKHBzdHIsIHBzdHItPmN1cl9pZHggKyBpZHgpKQorICAgIHJldHVybiByZV9zdHJpbmdfcGVla19ieXRlIChwc3RyLCBpZHgpOworI2VuZGlmCisKKyAgb2ZmID0gcHN0ci0+Y3VyX2lkeCArIGlkeDsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAocHN0ci0+b2Zmc2V0c19uZWVkZWQpCisgICAgb2ZmID0gcHN0ci0+b2Zmc2V0c1tvZmZdOworI2VuZGlmCisKKyAgY2ggPSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgb2ZmXTsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIC8qIEVuc3VyZSB0aGF0IGUuZy4gZm9yIHRyX1RSLlVURi04IEJBQ0tTTEFTSCBET1RMRVNTIFNNQUxMIExFVFRFUiBJCisgICAgIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBDQVBJVEFMIExFVFRFUiBJIGluc3RlYWQgb2YgZmlyc3QgYnl0ZSBvZgorICAgICBET1RMRVNTIFNNQUxMIExFVFRFUiBJLiAgVGhlIGxhdHRlciB3b3VsZCBjb25mdXNlIHRoZSBwYXJzZXIsCisgICAgIHNpbmNlIHBlZWtfYnl0ZV9jYXNlIGRvZXNuJ3QgYWR2YW5jZSBjdXJfaWR4IGluIGFueSB3YXkuICAqLworICBpZiAocHN0ci0+b2Zmc2V0c19uZWVkZWQgJiYgIWlzYXNjaWkgKGNoKSkKKyAgICByZXR1cm4gcmVfc3RyaW5nX3BlZWtfYnl0ZSAocHN0ciwgaWR4KTsKKyNlbmRpZgorCisgIHJldHVybiBjaDsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIKK2ludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlICgocHVyZSkpCityZV9zdHJpbmdfZmV0Y2hfYnl0ZV9jYXNlIChyZV9zdHJpbmdfdCAqcHN0cikKK3sKKyAgaWYgKEJFICghcHN0ci0+bWJzX2FsbG9jYXRlZCwgMSkpCisgICAgcmV0dXJuIHJlX3N0cmluZ19mZXRjaF9ieXRlIChwc3RyKTsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChwc3RyLT5vZmZzZXRzX25lZWRlZCkKKyAgICB7CisgICAgICBpbnQgb2ZmLCBjaDsKKworICAgICAgLyogRm9yIHRyX1RSLlVURi04IFtbOmlzbG93ZXI6XV0gdGhlcmUgaXMKKwkgW1s6IENBUElUQUwgTEVUVEVSIEkgV0lUSCBET1QgbG93ZXI6XV0gaW4gbWJzLiAgU2tpcAorCSBpbiB0aGF0IGNhc2UgdGhlIHdob2xlIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGFuZCByZXR1cm4KKwkgdGhlIG9yaWdpbmFsIGxldHRlci4gIE9uIHRoZSBvdGhlciBzaWRlLCB3aXRoCisJIFtbOiBET1RMRVNTIFNNQUxMIExFVFRFUiBJIHJldHVybiBbWzpJLCBhcyBkb2luZworCSBhbnl0aGluZyBlbHNlIHdvdWxkIGNvbXBsaWNhdGUgdGhpbmdzIHRvbyBtdWNoLiAgKi8KKworICAgICAgaWYgKCFyZV9zdHJpbmdfZmlyc3RfYnl0ZSAocHN0ciwgcHN0ci0+Y3VyX2lkeCkpCisJcmV0dXJuIHJlX3N0cmluZ19mZXRjaF9ieXRlIChwc3RyKTsKKworICAgICAgb2ZmID0gcHN0ci0+b2Zmc2V0c1twc3RyLT5jdXJfaWR4XTsKKyAgICAgIGNoID0gcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIG9mZl07CisKKyAgICAgIGlmICghIGlzYXNjaWkgKGNoKSkKKwlyZXR1cm4gcmVfc3RyaW5nX2ZldGNoX2J5dGUgKHBzdHIpOworCisgICAgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocHN0ciwKKwkJCSAgICByZV9zdHJpbmdfY2hhcl9zaXplX2F0IChwc3RyLCBwc3RyLT5jdXJfaWR4KSk7CisgICAgICByZXR1cm4gY2g7CisgICAgfQorI2VuZGlmCisKKyAgcmV0dXJuIHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBwc3RyLT5jdXJfaWR4KytdOworfQorCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3N0cmluZ19kZXN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIpCit7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgcmVfZnJlZSAocHN0ci0+d2NzKTsKKyAgcmVfZnJlZSAocHN0ci0+b2Zmc2V0cyk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisgIGlmIChwc3RyLT5tYnNfYWxsb2NhdGVkKQorICAgIHJlX2ZyZWUgKHBzdHItPm1icyk7Cit9CisKKy8qIFJldHVybiB0aGUgY29udGV4dCBhdCBJRFggaW4gSU5QVVQuICAqLworCitzdGF0aWMgdW5zaWduZWQgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX2NvbnRleHRfYXQgKGNvbnN0IHJlX3N0cmluZ190ICppbnB1dCwgaW50IGlkeCwgaW50IGVmbGFncykKK3sKKyAgaW50IGM7CisgIGlmIChCRSAoaWR4IDwgMCwgMCkpCisgICAgLyogSW4gdGhpcyBjYXNlLCB3ZSB1c2UgdGhlIHZhbHVlIHN0b3JlZCBpbiBpbnB1dC0+dGlwX2NvbnRleHQsCisgICAgICAgc2luY2Ugd2UgY2FuJ3Qga25vdyB0aGUgY2hhcmFjdGVyIGluIGlucHV0LT5tYnNbLTFdIGhlcmUuICAqLworICAgIHJldHVybiBpbnB1dC0+dGlwX2NvbnRleHQ7CisgIGlmIChCRSAoaWR4ID09IGlucHV0LT5sZW4sIDApKQorICAgIHJldHVybiAoKGVmbGFncyAmIFJFR19OT1RFT0wpID8gQ09OVEVYVF9FTkRCVUYKKwkgICAgOiBDT05URVhUX05FV0xJTkUgfCBDT05URVhUX0VOREJVRik7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSkKKyAgICB7CisgICAgICB3aW50X3Qgd2M7CisgICAgICBpbnQgd2NfaWR4ID0gaWR4OworICAgICAgd2hpbGUoaW5wdXQtPndjc1t3Y19pZHhdID09IFdFT0YpCisJeworI2lmZGVmIERFQlVHCisJICAvKiBJdCBtdXN0IG5vdCBoYXBwZW4uICAqLworCSAgYXNzZXJ0ICh3Y19pZHggPj0gMCk7CisjZW5kaWYKKwkgIC0td2NfaWR4OworCSAgaWYgKHdjX2lkeCA8IDApCisJICAgIHJldHVybiBpbnB1dC0+dGlwX2NvbnRleHQ7CisJfQorICAgICAgd2MgPSBpbnB1dC0+d2NzW3djX2lkeF07CisgICAgICBpZiAoQkUgKGlucHV0LT53b3JkX29wc191c2VkICE9IDAsIDApICYmIElTX1dJREVfV09SRF9DSEFSICh3YykpCisJcmV0dXJuIENPTlRFWFRfV09SRDsKKyAgICAgIHJldHVybiAoSVNfV0lERV9ORVdMSU5FICh3YykgJiYgaW5wdXQtPm5ld2xpbmVfYW5jaG9yCisJICAgICAgPyBDT05URVhUX05FV0xJTkUgOiAwKTsKKyAgICB9CisgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIGMgPSByZV9zdHJpbmdfYnl0ZV9hdCAoaW5wdXQsIGlkeCk7CisgICAgICBpZiAoYml0c2V0X2NvbnRhaW4gKGlucHV0LT53b3JkX2NoYXIsIGMpKQorCXJldHVybiBDT05URVhUX1dPUkQ7CisgICAgICByZXR1cm4gSVNfTkVXTElORSAoYykgJiYgaW5wdXQtPm5ld2xpbmVfYW5jaG9yID8gQ09OVEVYVF9ORVdMSU5FIDogMDsKKyAgICB9Cit9CisMCisvKiBGdW5jdGlvbnMgZm9yIHNldCBvcGVyYXRpb24uICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X2FsbG9jIChyZV9ub2RlX3NldCAqc2V0LCBpbnQgc2l6ZSkKK3sKKyAgLyoKKyAgICogQURSOiB2YWxncmluZCBzYXlzIHNpemUgY2FuIGJlIDAsIHdoaWNoIHRoZW4gZG9lc24ndAorICAgKiBmcmVlIHRoZSBibG9jayBvZiBzaXplIDAuICBIYXJ1bXBoLiBUaGlzIHNlZW1zCisgICAqIHRvIHdvcmsgb2ssIHRob3VnaC4KKyAgICovCisgIGlmIChzaXplID09IDApCisgICAgeworICAgICAgIG1lbXNldChzZXQsIDAsIHNpemVvZigqc2V0KSk7CisgICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KKyAgc2V0LT5hbGxvYyA9IHNpemU7CisgIHNldC0+bmVsZW0gPSAwOworICBzZXQtPmVsZW1zID0gcmVfbWFsbG9jIChpbnQsIHNpemUpOworICBpZiAoQkUgKHNldC0+ZWxlbXMgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9pbml0XzEgKHJlX25vZGVfc2V0ICpzZXQsIGludCBlbGVtKQoreworICBzZXQtPmFsbG9jID0gMTsKKyAgc2V0LT5uZWxlbSA9IDE7CisgIHNldC0+ZWxlbXMgPSByZV9tYWxsb2MgKGludCwgMSk7CisgIGlmIChCRSAoc2V0LT5lbGVtcyA9PSBOVUxMLCAwKSkKKyAgICB7CisgICAgICBzZXQtPmFsbG9jID0gc2V0LT5uZWxlbSA9IDA7CisgICAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgICB9CisgIHNldC0+ZWxlbXNbMF0gPSBlbGVtOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfaW5pdF8yIChyZV9ub2RlX3NldCAqc2V0LCBpbnQgZWxlbTEsIGludCBlbGVtMikKK3sKKyAgc2V0LT5hbGxvYyA9IDI7CisgIHNldC0+ZWxlbXMgPSByZV9tYWxsb2MgKGludCwgMik7CisgIGlmIChCRSAoc2V0LT5lbGVtcyA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgaWYgKGVsZW0xID09IGVsZW0yKQorICAgIHsKKyAgICAgIHNldC0+bmVsZW0gPSAxOworICAgICAgc2V0LT5lbGVtc1swXSA9IGVsZW0xOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHNldC0+bmVsZW0gPSAyOworICAgICAgaWYgKGVsZW0xIDwgZWxlbTIpCisJeworCSAgc2V0LT5lbGVtc1swXSA9IGVsZW0xOworCSAgc2V0LT5lbGVtc1sxXSA9IGVsZW0yOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBzZXQtPmVsZW1zWzBdID0gZWxlbTI7CisJICBzZXQtPmVsZW1zWzFdID0gZWxlbTE7CisJfQorICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X2luaXRfY29weSAocmVfbm9kZV9zZXQgKmRlc3QsIGNvbnN0IHJlX25vZGVfc2V0ICpzcmMpCit7CisgIGRlc3QtPm5lbGVtID0gc3JjLT5uZWxlbTsKKyAgaWYgKHNyYy0+bmVsZW0gPiAwKQorICAgIHsKKyAgICAgIGRlc3QtPmFsbG9jID0gZGVzdC0+bmVsZW07CisgICAgICBkZXN0LT5lbGVtcyA9IHJlX21hbGxvYyAoaW50LCBkZXN0LT5hbGxvYyk7CisgICAgICBpZiAoQkUgKGRlc3QtPmVsZW1zID09IE5VTEwsIDApKQorCXsKKwkgIGRlc3QtPmFsbG9jID0gZGVzdC0+bmVsZW0gPSAwOworCSAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAgbWVtY3B5IChkZXN0LT5lbGVtcywgc3JjLT5lbGVtcywgc3JjLT5uZWxlbSAqIHNpemVvZiAoaW50KSk7CisgICAgfQorICBlbHNlCisgICAgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoZGVzdCk7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHNldHMgU1JDMSBhbmQgU1JDMi4gQW5kIG1lcmdlIGl0IHRvCisgICBERVNULiBSZXR1cm4gdmFsdWUgaW5kaWNhdGUgdGhlIGVycm9yIGNvZGUgb3IgUkVHX05PRVJST1IgaWYgc3VjY2VlZGVkLgorICAgTm90ZTogV2UgYXNzdW1lIGRlc3QtPmVsZW1zIGlzIE5VTEwsIHdoZW4gZGVzdC0+YWxsb2MgaXMgMC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfYWRkX2ludGVyc2VjdCAocmVfbm9kZV9zZXQgKmRlc3QsIGNvbnN0IHJlX25vZGVfc2V0ICpzcmMxLAorCQkJICAgY29uc3QgcmVfbm9kZV9zZXQgKnNyYzIpCit7CisgIGludCBpMSwgaTIsIGlzLCBpZCwgZGVsdGEsIHNiYXNlOworICBpZiAoc3JjMS0+bmVsZW0gPT0gMCB8fCBzcmMyLT5uZWxlbSA9PSAwKQorICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKworICAvKiBXZSBuZWVkIGRlc3QtPm5lbGVtICsgMiAqIGVsZW1zX2luX2ludGVyc2VjdGlvbjsgdGhpcyBpcyBhCisgICAgIGNvbnNlcnZhdGl2ZSBlc3RpbWF0ZS4gICovCisgIGlmIChzcmMxLT5uZWxlbSArIHNyYzItPm5lbGVtICsgZGVzdC0+bmVsZW0gPiBkZXN0LT5hbGxvYykKKyAgICB7CisgICAgICBpbnQgbmV3X2FsbG9jID0gc3JjMS0+bmVsZW0gKyBzcmMyLT5uZWxlbSArIGRlc3QtPmFsbG9jOworICAgICAgaW50ICpuZXdfZWxlbXMgPSByZV9yZWFsbG9jIChkZXN0LT5lbGVtcywgaW50LCBuZXdfYWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfZWxlbXMgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBkZXN0LT5lbGVtcyA9IG5ld19lbGVtczsKKyAgICAgIGRlc3QtPmFsbG9jID0gbmV3X2FsbG9jOworICAgIH0KKworICAvKiBGaW5kIHRoZSBpdGVtcyBpbiB0aGUgaW50ZXJzZWN0aW9uIG9mIFNSQzEgYW5kIFNSQzIsIGFuZCBjb3B5CisgICAgIGludG8gdGhlIHRvcCBvZiBERVNUIHRob3NlIHRoYXQgYXJlIG5vdCBhbHJlYWR5IGluIERFU1QgaXRzZWxmLiAgKi8KKyAgc2Jhc2UgPSBkZXN0LT5uZWxlbSArIHNyYzEtPm5lbGVtICsgc3JjMi0+bmVsZW07CisgIGkxID0gc3JjMS0+bmVsZW0gLSAxOworICBpMiA9IHNyYzItPm5lbGVtIC0gMTsKKyAgaWQgPSBkZXN0LT5uZWxlbSAtIDE7CisgIGZvciAoOzspCisgICAgeworICAgICAgaWYgKHNyYzEtPmVsZW1zW2kxXSA9PSBzcmMyLT5lbGVtc1tpMl0pCisJeworCSAgLyogVHJ5IHRvIGZpbmQgdGhlIGl0ZW0gaW4gREVTVC4gIE1heWJlIHdlIGNvdWxkIGJpbmFyeSBzZWFyY2g/ICAqLworCSAgd2hpbGUgKGlkID49IDAgJiYgZGVzdC0+ZWxlbXNbaWRdID4gc3JjMS0+ZWxlbXNbaTFdKQorCSAgICAtLWlkOworCisJICBpZiAoaWQgPCAwIHx8IGRlc3QtPmVsZW1zW2lkXSAhPSBzcmMxLT5lbGVtc1tpMV0pCisJICAgIGRlc3QtPmVsZW1zWy0tc2Jhc2VdID0gc3JjMS0+ZWxlbXNbaTFdOworCisJICBpZiAoLS1pMSA8IDAgfHwgLS1pMiA8IDApCisJICAgIGJyZWFrOworCX0KKworICAgICAgLyogTG93ZXIgdGhlIGhpZ2hlc3Qgb2YgdGhlIHR3byBpdGVtcy4gICovCisgICAgICBlbHNlIGlmIChzcmMxLT5lbGVtc1tpMV0gPCBzcmMyLT5lbGVtc1tpMl0pCisJeworCSAgaWYgKC0taTIgPCAwKQorCSAgICBicmVhazsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKC0taTEgPCAwKQorCSAgICBicmVhazsKKwl9CisgICAgfQorCisgIGlkID0gZGVzdC0+bmVsZW0gLSAxOworICBpcyA9IGRlc3QtPm5lbGVtICsgc3JjMS0+bmVsZW0gKyBzcmMyLT5uZWxlbSAtIDE7CisgIGRlbHRhID0gaXMgLSBzYmFzZSArIDE7CisKKyAgLyogTm93IGNvcHkuICBXaGVuIERFTFRBIGJlY29tZXMgemVybywgdGhlIHJlbWFpbmluZworICAgICBERVNUIGVsZW1lbnRzIGFyZSBhbHJlYWR5IGluIHBsYWNlOyB0aGlzIGlzIG1vcmUgb3IKKyAgICAgbGVzcyB0aGUgc2FtZSBsb29wIHRoYXQgaXMgaW4gcmVfbm9kZV9zZXRfbWVyZ2UuICAqLworICBkZXN0LT5uZWxlbSArPSBkZWx0YTsKKyAgaWYgKGRlbHRhID4gMCAmJiBpZCA+PSAwKQorICAgIGZvciAoOzspCisgICAgICB7CisJaWYgKGRlc3QtPmVsZW1zW2lzXSA+IGRlc3QtPmVsZW1zW2lkXSkKKwkgIHsKKwkgICAgLyogQ29weSBmcm9tIHRoZSB0b3AuICAqLworCSAgICBkZXN0LT5lbGVtc1tpZCArIGRlbHRhLS1dID0gZGVzdC0+ZWxlbXNbaXMtLV07CisJICAgIGlmIChkZWx0YSA9PSAwKQorCSAgICAgIGJyZWFrOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgLyogU2xpZGUgZnJvbSB0aGUgYm90dG9tLiAgKi8KKwkgICAgZGVzdC0+ZWxlbXNbaWQgKyBkZWx0YV0gPSBkZXN0LT5lbGVtc1tpZF07CisJICAgIGlmICgtLWlkIDwgMCkKKwkgICAgICBicmVhazsKKwkgIH0KKyAgICAgIH0KKworICAvKiBDb3B5IHJlbWFpbmluZyBTUkMgZWxlbWVudHMuICAqLworICBtZW1jcHkgKGRlc3QtPmVsZW1zLCBkZXN0LT5lbGVtcyArIHNiYXNlLCBkZWx0YSAqIHNpemVvZiAoaW50KSk7CisKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBDYWxjdWxhdGUgdGhlIHVuaW9uIHNldCBvZiB0aGUgc2V0cyBTUkMxIGFuZCBTUkMyLiBBbmQgc3RvcmUgaXQgdG8KKyAgIERFU1QuIFJldHVybiB2YWx1ZSBpbmRpY2F0ZSB0aGUgZXJyb3IgY29kZSBvciBSRUdfTk9FUlJPUiBpZiBzdWNjZWVkZWQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X2luaXRfdW5pb24gKHJlX25vZGVfc2V0ICpkZXN0LCBjb25zdCByZV9ub2RlX3NldCAqc3JjMSwKKwkJCWNvbnN0IHJlX25vZGVfc2V0ICpzcmMyKQoreworICBpbnQgaTEsIGkyLCBpZDsKKyAgaWYgKHNyYzEgIT0gTlVMTCAmJiBzcmMxLT5uZWxlbSA+IDAgJiYgc3JjMiAhPSBOVUxMICYmIHNyYzItPm5lbGVtID4gMCkKKyAgICB7CisgICAgICBkZXN0LT5hbGxvYyA9IHNyYzEtPm5lbGVtICsgc3JjMi0+bmVsZW07CisgICAgICBkZXN0LT5lbGVtcyA9IHJlX21hbGxvYyAoaW50LCBkZXN0LT5hbGxvYyk7CisgICAgICBpZiAoQkUgKGRlc3QtPmVsZW1zID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChzcmMxICE9IE5VTEwgJiYgc3JjMS0+bmVsZW0gPiAwKQorCXJldHVybiByZV9ub2RlX3NldF9pbml0X2NvcHkgKGRlc3QsIHNyYzEpOworICAgICAgZWxzZSBpZiAoc3JjMiAhPSBOVUxMICYmIHNyYzItPm5lbGVtID4gMCkKKwlyZXR1cm4gcmVfbm9kZV9zZXRfaW5pdF9jb3B5IChkZXN0LCBzcmMyKTsKKyAgICAgIGVsc2UKKwlyZV9ub2RlX3NldF9pbml0X2VtcHR5IChkZXN0KTsKKyAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgICB9CisgIGZvciAoaTEgPSBpMiA9IGlkID0gMCA7IGkxIDwgc3JjMS0+bmVsZW0gJiYgaTIgPCBzcmMyLT5uZWxlbSA7KQorICAgIHsKKyAgICAgIGlmIChzcmMxLT5lbGVtc1tpMV0gPiBzcmMyLT5lbGVtc1tpMl0pCisJeworCSAgZGVzdC0+ZWxlbXNbaWQrK10gPSBzcmMyLT5lbGVtc1tpMisrXTsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIGlmIChzcmMxLT5lbGVtc1tpMV0gPT0gc3JjMi0+ZWxlbXNbaTJdKQorCSsraTI7CisgICAgICBkZXN0LT5lbGVtc1tpZCsrXSA9IHNyYzEtPmVsZW1zW2kxKytdOworICAgIH0KKyAgaWYgKGkxIDwgc3JjMS0+bmVsZW0pCisgICAgeworICAgICAgbWVtY3B5IChkZXN0LT5lbGVtcyArIGlkLCBzcmMxLT5lbGVtcyArIGkxLAorCSAgICAgKHNyYzEtPm5lbGVtIC0gaTEpICogc2l6ZW9mIChpbnQpKTsKKyAgICAgIGlkICs9IHNyYzEtPm5lbGVtIC0gaTE7CisgICAgfQorICBlbHNlIGlmIChpMiA8IHNyYzItPm5lbGVtKQorICAgIHsKKyAgICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMgKyBpZCwgc3JjMi0+ZWxlbXMgKyBpMiwKKwkgICAgIChzcmMyLT5uZWxlbSAtIGkyKSAqIHNpemVvZiAoaW50KSk7CisgICAgICBpZCArPSBzcmMyLT5uZWxlbSAtIGkyOworICAgIH0KKyAgZGVzdC0+bmVsZW0gPSBpZDsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBDYWxjdWxhdGUgdGhlIHVuaW9uIHNldCBvZiB0aGUgc2V0cyBERVNUIGFuZCBTUkMuIEFuZCBzdG9yZSBpdCB0bworICAgREVTVC4gUmV0dXJuIHZhbHVlIGluZGljYXRlIHRoZSBlcnJvciBjb2RlIG9yIFJFR19OT0VSUk9SIGlmIHN1Y2NlZWRlZC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfbWVyZ2UgKHJlX25vZGVfc2V0ICpkZXN0LCBjb25zdCByZV9ub2RlX3NldCAqc3JjKQoreworICBpbnQgaXMsIGlkLCBzYmFzZSwgZGVsdGE7CisgIGlmIChzcmMgPT0gTlVMTCB8fCBzcmMtPm5lbGVtID09IDApCisgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICBpZiAoZGVzdC0+YWxsb2MgPCAyICogc3JjLT5uZWxlbSArIGRlc3QtPm5lbGVtKQorICAgIHsKKyAgICAgIGludCBuZXdfYWxsb2MgPSAyICogKHNyYy0+bmVsZW0gKyBkZXN0LT5hbGxvYyk7CisgICAgICBpbnQgKm5ld19idWZmZXIgPSByZV9yZWFsbG9jIChkZXN0LT5lbGVtcywgaW50LCBuZXdfYWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfYnVmZmVyID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgZGVzdC0+ZWxlbXMgPSBuZXdfYnVmZmVyOworICAgICAgZGVzdC0+YWxsb2MgPSBuZXdfYWxsb2M7CisgICAgfQorCisgIGlmIChCRSAoZGVzdC0+bmVsZW0gPT0gMCwgMCkpCisgICAgeworICAgICAgZGVzdC0+bmVsZW0gPSBzcmMtPm5lbGVtOworICAgICAgbWVtY3B5IChkZXN0LT5lbGVtcywgc3JjLT5lbGVtcywgc3JjLT5uZWxlbSAqIHNpemVvZiAoaW50KSk7CisgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisgICAgfQorCisgIC8qIENvcHkgaW50byB0aGUgdG9wIG9mIERFU1QgdGhlIGl0ZW1zIG9mIFNSQyB0aGF0IGFyZSBub3QKKyAgICAgZm91bmQgaW4gREVTVC4gIE1heWJlIHdlIGNvdWxkIGJpbmFyeSBzZWFyY2ggaW4gREVTVD8gICovCisgIGZvciAoc2Jhc2UgPSBkZXN0LT5uZWxlbSArIDIgKiBzcmMtPm5lbGVtLAorICAgICAgIGlzID0gc3JjLT5uZWxlbSAtIDEsIGlkID0gZGVzdC0+bmVsZW0gLSAxOyBpcyA+PSAwICYmIGlkID49IDA7ICkKKyAgICB7CisgICAgICBpZiAoZGVzdC0+ZWxlbXNbaWRdID09IHNyYy0+ZWxlbXNbaXNdKQorCWlzLS0sIGlkLS07CisgICAgICBlbHNlIGlmIChkZXN0LT5lbGVtc1tpZF0gPCBzcmMtPmVsZW1zW2lzXSkKKwlkZXN0LT5lbGVtc1stLXNiYXNlXSA9IHNyYy0+ZWxlbXNbaXMtLV07CisgICAgICBlbHNlIC8qIGlmIChkZXN0LT5lbGVtc1tpZF0gPiBzcmMtPmVsZW1zW2lzXSkgKi8KKwktLWlkOworICAgIH0KKworICBpZiAoaXMgPj0gMCkKKyAgICB7CisgICAgICAvKiBJZiBERVNUIGlzIGV4aGF1c3RlZCwgdGhlIHJlbWFpbmluZyBpdGVtcyBvZiBTUkMgbXVzdCBiZSB1bmlxdWUuICAqLworICAgICAgc2Jhc2UgLT0gaXMgKyAxOworICAgICAgbWVtY3B5IChkZXN0LT5lbGVtcyArIHNiYXNlLCBzcmMtPmVsZW1zLCAoaXMgKyAxKSAqIHNpemVvZiAoaW50KSk7CisgICAgfQorCisgIGlkID0gZGVzdC0+bmVsZW0gLSAxOworICBpcyA9IGRlc3QtPm5lbGVtICsgMiAqIHNyYy0+bmVsZW0gLSAxOworICBkZWx0YSA9IGlzIC0gc2Jhc2UgKyAxOworICBpZiAoZGVsdGEgPT0gMCkKKyAgICByZXR1cm4gUkVHX05PRVJST1I7CisKKyAgLyogTm93IGNvcHkuICBXaGVuIERFTFRBIGJlY29tZXMgemVybywgdGhlIHJlbWFpbmluZworICAgICBERVNUIGVsZW1lbnRzIGFyZSBhbHJlYWR5IGluIHBsYWNlLiAgKi8KKyAgZGVzdC0+bmVsZW0gKz0gZGVsdGE7CisgIGZvciAoOzspCisgICAgeworICAgICAgaWYgKGRlc3QtPmVsZW1zW2lzXSA+IGRlc3QtPmVsZW1zW2lkXSkKKwl7CisJICAvKiBDb3B5IGZyb20gdGhlIHRvcC4gICovCisJICBkZXN0LT5lbGVtc1tpZCArIGRlbHRhLS1dID0gZGVzdC0+ZWxlbXNbaXMtLV07CisJICBpZiAoZGVsdGEgPT0gMCkKKwkgICAgYnJlYWs7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFNsaWRlIGZyb20gdGhlIGJvdHRvbS4gICovCisJICBkZXN0LT5lbGVtc1tpZCArIGRlbHRhXSA9IGRlc3QtPmVsZW1zW2lkXTsKKwkgIGlmICgtLWlkIDwgMCkKKwkgICAgeworCSAgICAgIC8qIENvcHkgcmVtYWluaW5nIFNSQyBlbGVtZW50cy4gICovCisJICAgICAgbWVtY3B5IChkZXN0LT5lbGVtcywgZGVzdC0+ZWxlbXMgKyBzYmFzZSwKKwkJICAgICAgZGVsdGEgKiBzaXplb2YgKGludCkpOworCSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAgIH0KKworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEluc2VydCB0aGUgbmV3IGVsZW1lbnQgRUxFTSB0byB0aGUgcmVfbm9kZV9zZXQqIFNFVC4KKyAgIFNFVCBzaG91bGQgbm90IGFscmVhZHkgaGF2ZSBFTEVNLgorICAgcmV0dXJuIC0xIGlmIGFuIGVycm9yIGhhcyBvY2N1cnJlZCwgcmV0dXJuIDEgb3RoZXJ3aXNlLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X2luc2VydCAocmVfbm9kZV9zZXQgKnNldCwgaW50IGVsZW0pCit7CisgIGludCBpZHg7CisgIC8qIEluIGNhc2UgdGhlIHNldCBpcyBlbXB0eS4gICovCisgIGlmIChzZXQtPmFsbG9jID09IDApCisgICAgeworICAgICAgaWYgKEJFIChyZV9ub2RlX3NldF9pbml0XzEgKHNldCwgZWxlbSkgPT0gUkVHX05PRVJST1IsIDEpKQorCXJldHVybiAxOworICAgICAgZWxzZQorCXJldHVybiAtMTsKKyAgICB9CisKKyAgaWYgKEJFIChzZXQtPm5lbGVtLCAwKSA9PSAwKQorICAgIHsKKyAgICAgIC8qIFdlIGFscmVhZHkgZ3VhcmFudGVlZCBhYm92ZSB0aGF0IHNldC0+YWxsb2MgIT0gMC4gICovCisgICAgICBzZXQtPmVsZW1zWzBdID0gZWxlbTsKKyAgICAgICsrc2V0LT5uZWxlbTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAvKiBSZWFsbG9jIGlmIHdlIG5lZWQuICAqLworICBpZiAoc2V0LT5hbGxvYyA9PSBzZXQtPm5lbGVtKQorICAgIHsKKyAgICAgIGludCAqbmV3X2VsZW1zOworICAgICAgc2V0LT5hbGxvYyA9IHNldC0+YWxsb2MgKiAyOworICAgICAgbmV3X2VsZW1zID0gcmVfcmVhbGxvYyAoc2V0LT5lbGVtcywgaW50LCBzZXQtPmFsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2VsZW1zID09IE5VTEwsIDApKQorCXJldHVybiAtMTsKKyAgICAgIHNldC0+ZWxlbXMgPSBuZXdfZWxlbXM7CisgICAgfQorCisgIC8qIE1vdmUgdGhlIGVsZW1lbnRzIHdoaWNoIGZvbGxvd3MgdGhlIG5ldyBlbGVtZW50LiAgVGVzdCB0aGUKKyAgICAgZmlyc3QgZWxlbWVudCBzZXBhcmF0ZWx5IHRvIHNraXAgYSBjaGVjayBpbiB0aGUgaW5uZXIgbG9vcC4gICovCisgIGlmIChlbGVtIDwgc2V0LT5lbGVtc1swXSkKKyAgICB7CisgICAgICBpZHggPSAwOworICAgICAgZm9yIChpZHggPSBzZXQtPm5lbGVtOyBpZHggPiAwOyBpZHgtLSkKKwlzZXQtPmVsZW1zW2lkeF0gPSBzZXQtPmVsZW1zW2lkeCAtIDFdOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZvciAoaWR4ID0gc2V0LT5uZWxlbTsgc2V0LT5lbGVtc1tpZHggLSAxXSA+IGVsZW07IGlkeC0tKQorCXNldC0+ZWxlbXNbaWR4XSA9IHNldC0+ZWxlbXNbaWR4IC0gMV07CisgICAgfQorCisgIC8qIEluc2VydCB0aGUgbmV3IGVsZW1lbnQuICAqLworICBzZXQtPmVsZW1zW2lkeF0gPSBlbGVtOworICArK3NldC0+bmVsZW07CisgIHJldHVybiAxOworfQorCisvKiBJbnNlcnQgdGhlIG5ldyBlbGVtZW50IEVMRU0gdG8gdGhlIHJlX25vZGVfc2V0KiBTRVQuCisgICBTRVQgc2hvdWxkIG5vdCBhbHJlYWR5IGhhdmUgYW55IGVsZW1lbnQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEVMRU0uCisgICBSZXR1cm4gLTEgaWYgYW4gZXJyb3IgaGFzIG9jY3VycmVkLCByZXR1cm4gMSBvdGhlcndpc2UuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfaW5zZXJ0X2xhc3QgKHJlX25vZGVfc2V0ICpzZXQsIGludCBlbGVtKQoreworICAvKiBSZWFsbG9jIGlmIHdlIG5lZWQuICAqLworICBpZiAoc2V0LT5hbGxvYyA9PSBzZXQtPm5lbGVtKQorICAgIHsKKyAgICAgIGludCAqbmV3X2VsZW1zOworICAgICAgc2V0LT5hbGxvYyA9IChzZXQtPmFsbG9jICsgMSkgKiAyOworICAgICAgbmV3X2VsZW1zID0gcmVfcmVhbGxvYyAoc2V0LT5lbGVtcywgaW50LCBzZXQtPmFsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2VsZW1zID09IE5VTEwsIDApKQorCXJldHVybiAtMTsKKyAgICAgIHNldC0+ZWxlbXMgPSBuZXdfZWxlbXM7CisgICAgfQorCisgIC8qIEluc2VydCB0aGUgbmV3IGVsZW1lbnQuICAqLworICBzZXQtPmVsZW1zW3NldC0+bmVsZW0rK10gPSBlbGVtOworICByZXR1cm4gMTsKK30KKworLyogQ29tcGFyZSB0d28gbm9kZSBzZXRzIFNFVDEgYW5kIFNFVDIuCisgICByZXR1cm4gMSBpZiBTRVQxIGFuZCBTRVQyIGFyZSBlcXVpdmFsZW50LCByZXR1cm4gMCBvdGhlcndpc2UuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfbm9kZV9zZXRfY29tcGFyZSAoY29uc3QgcmVfbm9kZV9zZXQgKnNldDEsIGNvbnN0IHJlX25vZGVfc2V0ICpzZXQyKQoreworICBpbnQgaTsKKyAgaWYgKHNldDEgPT0gTlVMTCB8fCBzZXQyID09IE5VTEwgfHwgc2V0MS0+bmVsZW0gIT0gc2V0Mi0+bmVsZW0pCisgICAgcmV0dXJuIDA7CisgIGZvciAoaSA9IHNldDEtPm5lbGVtIDsgLS1pID49IDAgOyApCisgICAgaWYgKHNldDEtPmVsZW1zW2ldICE9IHNldDItPmVsZW1zW2ldKQorICAgICAgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCisvKiBSZXR1cm4gKGlkeCArIDEpIGlmIFNFVCBjb250YWlucyB0aGUgZWxlbWVudCBFTEVNLCByZXR1cm4gMCBvdGhlcndpc2UuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfbm9kZV9zZXRfY29udGFpbnMgKGNvbnN0IHJlX25vZGVfc2V0ICpzZXQsIGludCBlbGVtKQoreworICB1bnNpZ25lZCBpbnQgaWR4LCByaWdodCwgbWlkOworICBpZiAoc2V0LT5uZWxlbSA8PSAwKQorICAgIHJldHVybiAwOworCisgIC8qIEJpbmFyeSBzZWFyY2ggdGhlIGVsZW1lbnQuICAqLworICBpZHggPSAwOworICByaWdodCA9IHNldC0+bmVsZW0gLSAxOworICB3aGlsZSAoaWR4IDwgcmlnaHQpCisgICAgeworICAgICAgbWlkID0gaWR4ICsgKHJpZ2h0IC0gaWR4KSAvIDI7CisgICAgICBpZiAoc2V0LT5lbGVtc1ttaWRdIDwgZWxlbSkKKwlpZHggPSBtaWQgKyAxOworICAgICAgZWxzZQorCXJpZ2h0ID0gbWlkOworICAgIH0KKyAgcmV0dXJuIHNldC0+ZWxlbXNbaWR4XSA9PSBlbGVtID8gaWR4ICsgMSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfcmVtb3ZlX2F0IChyZV9ub2RlX3NldCAqc2V0LCBpbnQgaWR4KQoreworICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc2V0LT5uZWxlbSkKKyAgICByZXR1cm47CisgIC0tc2V0LT5uZWxlbTsKKyAgZm9yICg7IGlkeCA8IHNldC0+bmVsZW07IGlkeCsrKQorICAgIHNldC0+ZWxlbXNbaWR4XSA9IHNldC0+ZWxlbXNbaWR4ICsgMV07Cit9CisMCisKKy8qIEFkZCB0aGUgdG9rZW4gVE9LRU4gdG8gZGZhLT5ub2RlcywgYW5kIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIHRva2VuLgorICAgT3IgcmV0dXJuIC0xLCBpZiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfZGZhX2FkZF9ub2RlIChyZV9kZmFfdCAqZGZhLCByZV90b2tlbl90IHRva2VuKQoreworICBpZiAoQkUgKGRmYS0+bm9kZXNfbGVuID49IGRmYS0+bm9kZXNfYWxsb2MsIDApKQorICAgIHsKKyAgICAgIHNpemVfdCBuZXdfbm9kZXNfYWxsb2MgPSBkZmEtPm5vZGVzX2FsbG9jICogMjsKKyAgICAgIGludCAqbmV3X25leHRzLCAqbmV3X2luZGljZXM7CisgICAgICByZV9ub2RlX3NldCAqbmV3X2VkZXN0cywgKm5ld19lY2xvc3VyZXM7CisgICAgICByZV90b2tlbl90ICpuZXdfbm9kZXM7CisKKyAgICAgIC8qIEF2b2lkIG92ZXJmbG93cyBpbiByZWFsbG9jLiAgKi8KKyAgICAgIGNvbnN0IHNpemVfdCBtYXhfb2JqZWN0X3NpemUgPSBNQVggKHNpemVvZiAocmVfdG9rZW5fdCksCisJCQkJCSAgTUFYIChzaXplb2YgKHJlX25vZGVfc2V0KSwKKwkJCQkJICAgICAgIHNpemVvZiAoaW50KSkpOworICAgICAgaWYgKEJFIChTSVpFX01BWCAvIG1heF9vYmplY3Rfc2l6ZSA8IG5ld19ub2Rlc19hbGxvYywgMCkpCisJcmV0dXJuIC0xOworCisgICAgICBuZXdfbm9kZXMgPSByZV9yZWFsbG9jIChkZmEtPm5vZGVzLCByZV90b2tlbl90LCBuZXdfbm9kZXNfYWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfbm9kZXMgPT0gTlVMTCwgMCkpCisJcmV0dXJuIC0xOworICAgICAgZGZhLT5ub2RlcyA9IG5ld19ub2RlczsKKyAgICAgIG5ld19uZXh0cyA9IHJlX3JlYWxsb2MgKGRmYS0+bmV4dHMsIGludCwgbmV3X25vZGVzX2FsbG9jKTsKKyAgICAgIG5ld19pbmRpY2VzID0gcmVfcmVhbGxvYyAoZGZhLT5vcmdfaW5kaWNlcywgaW50LCBuZXdfbm9kZXNfYWxsb2MpOworICAgICAgbmV3X2VkZXN0cyA9IHJlX3JlYWxsb2MgKGRmYS0+ZWRlc3RzLCByZV9ub2RlX3NldCwgbmV3X25vZGVzX2FsbG9jKTsKKyAgICAgIG5ld19lY2xvc3VyZXMgPSByZV9yZWFsbG9jIChkZmEtPmVjbG9zdXJlcywgcmVfbm9kZV9zZXQsIG5ld19ub2Rlc19hbGxvYyk7CisgICAgICBpZiAoQkUgKG5ld19uZXh0cyA9PSBOVUxMIHx8IG5ld19pbmRpY2VzID09IE5VTEwKKwkgICAgICB8fCBuZXdfZWRlc3RzID09IE5VTEwgfHwgbmV3X2VjbG9zdXJlcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gLTE7CisgICAgICBkZmEtPm5leHRzID0gbmV3X25leHRzOworICAgICAgZGZhLT5vcmdfaW5kaWNlcyA9IG5ld19pbmRpY2VzOworICAgICAgZGZhLT5lZGVzdHMgPSBuZXdfZWRlc3RzOworICAgICAgZGZhLT5lY2xvc3VyZXMgPSBuZXdfZWNsb3N1cmVzOworICAgICAgZGZhLT5ub2Rlc19hbGxvYyA9IG5ld19ub2Rlc19hbGxvYzsKKyAgICB9CisgIGRmYS0+bm9kZXNbZGZhLT5ub2Rlc19sZW5dID0gdG9rZW47CisgIGRmYS0+bm9kZXNbZGZhLT5ub2Rlc19sZW5dLmNvbnN0cmFpbnQgPSAwOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGRmYS0+bm9kZXNbZGZhLT5ub2Rlc19sZW5dLmFjY2VwdF9tYiA9CisgICAgKHRva2VuLnR5cGUgPT0gT1BfUEVSSU9EICYmIGRmYS0+bWJfY3VyX21heCA+IDEpIHx8IHRva2VuLnR5cGUgPT0gQ09NUExFWF9CUkFDS0VUOworI2VuZGlmCisgIGRmYS0+bmV4dHNbZGZhLT5ub2Rlc19sZW5dID0gLTE7CisgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKGRmYS0+ZWRlc3RzICsgZGZhLT5ub2Rlc19sZW4pOworICByZV9ub2RlX3NldF9pbml0X2VtcHR5IChkZmEtPmVjbG9zdXJlcyArIGRmYS0+bm9kZXNfbGVuKTsKKyAgcmV0dXJuIGRmYS0+bm9kZXNfbGVuKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorY2FsY19zdGF0ZV9oYXNoIChjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsIHVuc2lnbmVkIGludCBjb250ZXh0KQoreworICB1bnNpZ25lZCBpbnQgaGFzaCA9IG5vZGVzLT5uZWxlbSArIGNvbnRleHQ7CisgIGludCBpOworICBmb3IgKGkgPSAwIDsgaSA8IG5vZGVzLT5uZWxlbSA7IGkrKykKKyAgICBoYXNoICs9IG5vZGVzLT5lbGVtc1tpXTsKKyAgcmV0dXJuIGhhc2g7Cit9CisKKy8qIFNlYXJjaCBmb3IgdGhlIHN0YXRlIHdob3NlIG5vZGVfc2V0IGlzIGVxdWl2YWxlbnQgdG8gTk9ERVMuCisgICBSZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXRlLCBpZiB3ZSBmb3VuZCBpdCBpbiB0aGUgREZBLgorICAgT3RoZXJ3aXNlIGNyZWF0ZSB0aGUgbmV3IG9uZSBhbmQgcmV0dXJuIGl0LiAgSW4gY2FzZSBvZiBhbiBlcnJvcgorICAgcmV0dXJuIE5VTEwgYW5kIHNldCB0aGUgZXJyb3IgY29kZSBpbiBFUlIuCisgICBOb3RlOiAtIFdlIGFzc3VtZSBOVUxMIGFzIHRoZSBpbnZhbGlkIHN0YXRlLCB0aGVuIGl0IGlzIHBvc3NpYmxlIHRoYXQKKwkgICByZXR1cm4gdmFsdWUgaXMgTlVMTCBhbmQgRVJSIGlzIFJFR19OT0VSUk9SLgorCSAtIFdlIG5ldmVyIHJldHVybiBub24tTlVMTCB2YWx1ZSBpbiBjYXNlIG9mIGFueSBlcnJvcnMsIGl0IGlzIGZvcgorCSAgIG9wdGltaXphdGlvbi4gICovCisKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK2ludGVybmFsX2Z1bmN0aW9uCityZV9hY3F1aXJlX3N0YXRlIChyZWdfZXJyY29kZV90ICplcnIsIGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzKQoreworICB1bnNpZ25lZCBpbnQgaGFzaDsKKyAgcmVfZGZhc3RhdGVfdCAqbmV3X3N0YXRlOworICBzdHJ1Y3QgcmVfc3RhdGVfdGFibGVfZW50cnkgKnNwb3Q7CisgIGludCBpOworICBpZiAoQkUgKG5vZGVzLT5uZWxlbSA9PSAwLCAwKSkKKyAgICB7CisgICAgICAqZXJyID0gUkVHX05PRVJST1I7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGhhc2ggPSBjYWxjX3N0YXRlX2hhc2ggKG5vZGVzLCAwKTsKKyAgc3BvdCA9IGRmYS0+c3RhdGVfdGFibGUgKyAoaGFzaCAmIGRmYS0+c3RhdGVfaGFzaF9tYXNrKTsKKworICBmb3IgKGkgPSAwIDsgaSA8IHNwb3QtPm51bSA7IGkrKykKKyAgICB7CisgICAgICByZV9kZmFzdGF0ZV90ICpzdGF0ZSA9IHNwb3QtPmFycmF5W2ldOworICAgICAgaWYgKGhhc2ggIT0gc3RhdGUtPmhhc2gpCisJY29udGludWU7CisgICAgICBpZiAocmVfbm9kZV9zZXRfY29tcGFyZSAoJnN0YXRlLT5ub2Rlcywgbm9kZXMpKQorCXJldHVybiBzdGF0ZTsKKyAgICB9CisKKyAgLyogVGhlcmUgYXJlIG5vIGFwcHJvcHJpYXRlIHN0YXRlIGluIHRoZSBkZmEsIGNyZWF0ZSB0aGUgbmV3IG9uZS4gICovCisgIG5ld19zdGF0ZSA9IGNyZWF0ZV9jaV9uZXdzdGF0ZSAoZGZhLCBub2RlcywgaGFzaCk7CisgIGlmIChCRSAobmV3X3N0YXRlID09IE5VTEwsIDApKQorICAgICplcnIgPSBSRUdfRVNQQUNFOworCisgIHJldHVybiBuZXdfc3RhdGU7Cit9CisKKy8qIFNlYXJjaCBmb3IgdGhlIHN0YXRlIHdob3NlIG5vZGVfc2V0IGlzIGVxdWl2YWxlbnQgdG8gTk9ERVMgYW5kCisgICB3aG9zZSBjb250ZXh0IGlzIGVxdWl2YWxlbnQgdG8gQ09OVEVYVC4KKyAgIFJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgc3RhdGUsIGlmIHdlIGZvdW5kIGl0IGluIHRoZSBERkEuCisgICBPdGhlcndpc2UgY3JlYXRlIHRoZSBuZXcgb25lIGFuZCByZXR1cm4gaXQuICBJbiBjYXNlIG9mIGFuIGVycm9yCisgICByZXR1cm4gTlVMTCBhbmQgc2V0IHRoZSBlcnJvciBjb2RlIGluIEVSUi4KKyAgIE5vdGU6IC0gV2UgYXNzdW1lIE5VTEwgYXMgdGhlIGludmFsaWQgc3RhdGUsIHRoZW4gaXQgaXMgcG9zc2libGUgdGhhdAorCSAgIHJldHVybiB2YWx1ZSBpcyBOVUxMIGFuZCBFUlIgaXMgUkVHX05PRVJST1IuCisJIC0gV2UgbmV2ZXIgcmV0dXJuIG5vbi1OVUxMIHZhbHVlIGluIGNhc2Ugb2YgYW55IGVycm9ycywgaXQgaXMgZm9yCisJICAgb3B0aW1pemF0aW9uLiAgKi8KKworc3RhdGljIHJlX2RmYXN0YXRlX3QgKgoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAocmVnX2VycmNvZGVfdCAqZXJyLCBjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJICBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsIHVuc2lnbmVkIGludCBjb250ZXh0KQoreworICB1bnNpZ25lZCBpbnQgaGFzaDsKKyAgcmVfZGZhc3RhdGVfdCAqbmV3X3N0YXRlOworICBzdHJ1Y3QgcmVfc3RhdGVfdGFibGVfZW50cnkgKnNwb3Q7CisgIGludCBpOworICBpZiAobm9kZXMtPm5lbGVtID09IDApCisgICAgeworICAgICAgKmVyciA9IFJFR19OT0VSUk9SOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBoYXNoID0gY2FsY19zdGF0ZV9oYXNoIChub2RlcywgY29udGV4dCk7CisgIHNwb3QgPSBkZmEtPnN0YXRlX3RhYmxlICsgKGhhc2ggJiBkZmEtPnN0YXRlX2hhc2hfbWFzayk7CisKKyAgZm9yIChpID0gMCA7IGkgPCBzcG90LT5udW0gOyBpKyspCisgICAgeworICAgICAgcmVfZGZhc3RhdGVfdCAqc3RhdGUgPSBzcG90LT5hcnJheVtpXTsKKyAgICAgIGlmIChzdGF0ZS0+aGFzaCA9PSBoYXNoCisJICAmJiBzdGF0ZS0+Y29udGV4dCA9PSBjb250ZXh0CisJICAmJiByZV9ub2RlX3NldF9jb21wYXJlIChzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMsIG5vZGVzKSkKKwlyZXR1cm4gc3RhdGU7CisgICAgfQorICAvKiBUaGVyZSBhcmUgbm8gYXBwcm9wcmlhdGUgc3RhdGUgaW4gYGRmYScsIGNyZWF0ZSB0aGUgbmV3IG9uZS4gICovCisgIG5ld19zdGF0ZSA9IGNyZWF0ZV9jZF9uZXdzdGF0ZSAoZGZhLCBub2RlcywgY29udGV4dCwgaGFzaCk7CisgIGlmIChCRSAobmV3X3N0YXRlID09IE5VTEwsIDApKQorICAgICplcnIgPSBSRUdfRVNQQUNFOworCisgIHJldHVybiBuZXdfc3RhdGU7Cit9CisKKy8qIEZpbmlzaCBpbml0aWFsaXphdGlvbiBvZiB0aGUgbmV3IHN0YXRlIE5FV1NUQVRFLCBhbmQgdXNpbmcgaXRzIGhhc2ggdmFsdWUKKyAgIEhBU0ggcHV0IGluIHRoZSBhcHByb3ByaWF0ZSBidWNrZXQgb2YgREZBJ3Mgc3RhdGUgdGFibGUuICBSZXR1cm4gdmFsdWUKKyAgIGluZGljYXRlcyB0aGUgZXJyb3IgY29kZSBpZiBmYWlsZWQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcmVnaXN0ZXJfc3RhdGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX2RmYXN0YXRlX3QgKm5ld3N0YXRlLAorCQl1bnNpZ25lZCBpbnQgaGFzaCkKK3sKKyAgc3RydWN0IHJlX3N0YXRlX3RhYmxlX2VudHJ5ICpzcG90OworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IGk7CisKKyAgbmV3c3RhdGUtPmhhc2ggPSBoYXNoOworICBlcnIgPSByZV9ub2RlX3NldF9hbGxvYyAoJm5ld3N0YXRlLT5ub25fZXBzX25vZGVzLCBuZXdzdGF0ZS0+bm9kZXMubmVsZW0pOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgIGZvciAoaSA9IDA7IGkgPCBuZXdzdGF0ZS0+bm9kZXMubmVsZW07IGkrKykKKyAgICB7CisgICAgICBpbnQgZWxlbSA9IG5ld3N0YXRlLT5ub2Rlcy5lbGVtc1tpXTsKKyAgICAgIGlmICghSVNfRVBTSUxPTl9OT0RFIChkZmEtPm5vZGVzW2VsZW1dLnR5cGUpKQorCWlmIChyZV9ub2RlX3NldF9pbnNlcnRfbGFzdCAoJm5ld3N0YXRlLT5ub25fZXBzX25vZGVzLCBlbGVtKSA8IDApCisJICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgICB9CisKKyAgc3BvdCA9IGRmYS0+c3RhdGVfdGFibGUgKyAoaGFzaCAmIGRmYS0+c3RhdGVfaGFzaF9tYXNrKTsKKyAgaWYgKEJFIChzcG90LT5hbGxvYyA8PSBzcG90LT5udW0sIDApKQorICAgIHsKKyAgICAgIGludCBuZXdfYWxsb2MgPSAyICogc3BvdC0+bnVtICsgMjsKKyAgICAgIHJlX2RmYXN0YXRlX3QgKipuZXdfYXJyYXkgPSByZV9yZWFsbG9jIChzcG90LT5hcnJheSwgcmVfZGZhc3RhdGVfdCAqLAorCQkJCQkgICAgICBuZXdfYWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfYXJyYXkgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBzcG90LT5hcnJheSA9IG5ld19hcnJheTsKKyAgICAgIHNwb3QtPmFsbG9jID0gbmV3X2FsbG9jOworICAgIH0KKyAgc3BvdC0+YXJyYXlbc3BvdC0+bnVtKytdID0gbmV3c3RhdGU7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHZvaWQKK2ZyZWVfc3RhdGUgKHJlX2RmYXN0YXRlX3QgKnN0YXRlKQoreworICByZV9ub2RlX3NldF9mcmVlICgmc3RhdGUtPm5vbl9lcHNfbm9kZXMpOworICByZV9ub2RlX3NldF9mcmVlICgmc3RhdGUtPmludmVjbG9zdXJlKTsKKyAgaWYgKHN0YXRlLT5lbnRyYW5jZV9ub2RlcyAhPSAmc3RhdGUtPm5vZGVzKQorICAgIHsKKyAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKHN0YXRlLT5lbnRyYW5jZV9ub2Rlcyk7CisgICAgICByZV9mcmVlIChzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMpOworICAgIH0KKyAgcmVfbm9kZV9zZXRfZnJlZSAoJnN0YXRlLT5ub2Rlcyk7CisgIHJlX2ZyZWUgKHN0YXRlLT53b3JkX3RydGFibGUpOworICByZV9mcmVlIChzdGF0ZS0+dHJ0YWJsZSk7CisgIHJlX2ZyZWUgKHN0YXRlKTsKK30KKworLyogQ3JlYXRlIHRoZSBuZXcgc3RhdGUgd2hpY2ggaXMgaW5kZXBlbmRlbnQgb2YgY29udGV4dHMuCisgICBSZXR1cm4gdGhlIG5ldyBzdGF0ZSBpZiBzdWNjZWVkZWQsIG90aGVyd2lzZSByZXR1cm4gTlVMTC4gICovCisKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK2ludGVybmFsX2Z1bmN0aW9uCitjcmVhdGVfY2lfbmV3c3RhdGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcywKKwkJICAgIHVuc2lnbmVkIGludCBoYXNoKQoreworICBpbnQgaTsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIHJlX2RmYXN0YXRlX3QgKm5ld3N0YXRlOworCisgIG5ld3N0YXRlID0gKHJlX2RmYXN0YXRlX3QgKikgY2FsbG9jIChzaXplb2YgKHJlX2RmYXN0YXRlX3QpLCAxKTsKKyAgaWYgKEJFIChuZXdzdGF0ZSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5ICgmbmV3c3RhdGUtPm5vZGVzLCBub2Rlcyk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgICByZV9mcmVlIChuZXdzdGF0ZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgbmV3c3RhdGUtPmVudHJhbmNlX25vZGVzID0gJm5ld3N0YXRlLT5ub2RlczsKKyAgZm9yIChpID0gMCA7IGkgPCBub2Rlcy0+bmVsZW0gOyBpKyspCisgICAgeworICAgICAgcmVfdG9rZW5fdCAqbm9kZSA9IGRmYS0+bm9kZXMgKyBub2Rlcy0+ZWxlbXNbaV07CisgICAgICByZV90b2tlbl90eXBlX3QgdHlwZSA9IG5vZGUtPnR5cGU7CisgICAgICBpZiAodHlwZSA9PSBDSEFSQUNURVIgJiYgIW5vZGUtPmNvbnN0cmFpbnQpCisJY29udGludWU7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIG5ld3N0YXRlLT5hY2NlcHRfbWIgfD0gbm9kZS0+YWNjZXB0X21iOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKyAgICAgIC8qIElmIHRoZSBzdGF0ZSBoYXMgdGhlIGhhbHQgbm9kZSwgdGhlIHN0YXRlIGlzIGEgaGFsdCBzdGF0ZS4gICovCisgICAgICBpZiAodHlwZSA9PSBFTkRfT0ZfUkUpCisJbmV3c3RhdGUtPmhhbHQgPSAxOworICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9CQUNLX1JFRikKKwluZXdzdGF0ZS0+aGFzX2JhY2tyZWYgPSAxOworICAgICAgZWxzZSBpZiAodHlwZSA9PSBBTkNIT1IgfHwgbm9kZS0+Y29uc3RyYWludCkKKwluZXdzdGF0ZS0+aGFzX2NvbnN0cmFpbnQgPSAxOworICAgIH0KKyAgZXJyID0gcmVnaXN0ZXJfc3RhdGUgKGRmYSwgbmV3c3RhdGUsIGhhc2gpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgZnJlZV9zdGF0ZSAobmV3c3RhdGUpOworICAgICAgbmV3c3RhdGUgPSBOVUxMOworICAgIH0KKyAgcmV0dXJuIG5ld3N0YXRlOworfQorCisvKiBDcmVhdGUgdGhlIG5ldyBzdGF0ZSB3aGljaCBpcyBkZXBlbmQgb24gdGhlIGNvbnRleHQgQ09OVEVYVC4KKyAgIFJldHVybiB0aGUgbmV3IHN0YXRlIGlmIHN1Y2NlZWRlZCwgb3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKworc3RhdGljIHJlX2RmYXN0YXRlX3QgKgoraW50ZXJuYWxfZnVuY3Rpb24KK2NyZWF0ZV9jZF9uZXdzdGF0ZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAorCQkgICAgdW5zaWduZWQgaW50IGNvbnRleHQsIHVuc2lnbmVkIGludCBoYXNoKQoreworICBpbnQgaSwgbmN0eF9ub2RlcyA9IDA7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICByZV9kZmFzdGF0ZV90ICpuZXdzdGF0ZTsKKworICBuZXdzdGF0ZSA9IChyZV9kZmFzdGF0ZV90ICopIGNhbGxvYyAoc2l6ZW9mIChyZV9kZmFzdGF0ZV90KSwgMSk7CisgIGlmIChCRSAobmV3c3RhdGUgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIE5VTEw7CisgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfY29weSAoJm5ld3N0YXRlLT5ub2Rlcywgbm9kZXMpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgcmVfZnJlZSAobmV3c3RhdGUpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIG5ld3N0YXRlLT5jb250ZXh0ID0gY29udGV4dDsKKyAgbmV3c3RhdGUtPmVudHJhbmNlX25vZGVzID0gJm5ld3N0YXRlLT5ub2RlczsKKworICBmb3IgKGkgPSAwIDsgaSA8IG5vZGVzLT5uZWxlbSA7IGkrKykKKyAgICB7CisgICAgICByZV90b2tlbl90ICpub2RlID0gZGZhLT5ub2RlcyArIG5vZGVzLT5lbGVtc1tpXTsKKyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gbm9kZS0+dHlwZTsKKyAgICAgIHVuc2lnbmVkIGludCBjb25zdHJhaW50ID0gbm9kZS0+Y29uc3RyYWludDsKKworICAgICAgaWYgKHR5cGUgPT0gQ0hBUkFDVEVSICYmICFjb25zdHJhaW50KQorCWNvbnRpbnVlOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBuZXdzdGF0ZS0+YWNjZXB0X21iIHw9IG5vZGUtPmFjY2VwdF9tYjsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisgICAgICAvKiBJZiB0aGUgc3RhdGUgaGFzIHRoZSBoYWx0IG5vZGUsIHRoZSBzdGF0ZSBpcyBhIGhhbHQgc3RhdGUuICAqLworICAgICAgaWYgKHR5cGUgPT0gRU5EX09GX1JFKQorCW5ld3N0YXRlLT5oYWx0ID0gMTsKKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfQkFDS19SRUYpCisJbmV3c3RhdGUtPmhhc19iYWNrcmVmID0gMTsKKworICAgICAgaWYgKGNvbnN0cmFpbnQpCisJeworCSAgaWYgKG5ld3N0YXRlLT5lbnRyYW5jZV9ub2RlcyA9PSAmbmV3c3RhdGUtPm5vZGVzKQorCSAgICB7CisJICAgICAgbmV3c3RhdGUtPmVudHJhbmNlX25vZGVzID0gcmVfbWFsbG9jIChyZV9ub2RlX3NldCwgMSk7CisJICAgICAgaWYgKEJFIChuZXdzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMgPT0gTlVMTCwgMCkpCisJCXsKKwkJICBmcmVlX3N0YXRlIChuZXdzdGF0ZSk7CisJCSAgcmV0dXJuIE5VTEw7CisJCX0KKwkgICAgICBpZiAocmVfbm9kZV9zZXRfaW5pdF9jb3B5IChuZXdzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMsIG5vZGVzKQorCQkgICE9IFJFR19OT0VSUk9SKQorCQlyZXR1cm4gTlVMTDsKKwkgICAgICBuY3R4X25vZGVzID0gMDsKKwkgICAgICBuZXdzdGF0ZS0+aGFzX2NvbnN0cmFpbnQgPSAxOworCSAgICB9CisKKwkgIGlmIChOT1RfU0FUSVNGWV9QUkVWX0NPTlNUUkFJTlQgKGNvbnN0cmFpbnQsY29udGV4dCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9yZW1vdmVfYXQgKCZuZXdzdGF0ZS0+bm9kZXMsIGkgLSBuY3R4X25vZGVzKTsKKwkgICAgICArK25jdHhfbm9kZXM7CisJICAgIH0KKwl9CisgICAgfQorICBlcnIgPSByZWdpc3Rlcl9zdGF0ZSAoZGZhLCBuZXdzdGF0ZSwgaGFzaCk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgICBmcmVlX3N0YXRlIChuZXdzdGF0ZSk7CisgICAgICBuZXdzdGF0ZSA9IE5VTEw7CisgICAgfQorICByZXR1cm4gIG5ld3N0YXRlOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2V4X2ludGVybmFsLmggYi9jb21wYXQvcmVnZXgvcmVnZXhfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmFkOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2V4X2ludGVybmFsLmgKQEAgLTAsMCArMSw4MDggQEAKKy8qIEV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhbmQgc2VhcmNoIGxpYnJhcnkuCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSwgMjAwNywgMjAwOCwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgSXNhbXUgSGFzZWdhd2EgPGlzYW11QHlhbWF0by5pYm0uY29tPi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9SRUdFWF9JTlRFUk5BTF9ICisjZGVmaW5lIF9SRUdFWF9JTlRFUk5BTF9IIDEKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQgSEFWRV9MQU5HSU5GT19IIHx8IGRlZmluZWQgSEFWRV9MQU5HSU5GT19DT0RFU0VUIHx8IGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyNlbmRpZgorI2lmIGRlZmluZWQgSEFWRV9MT0NBTEVfSCB8fCBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPGxvY2FsZS5oPgorI2VuZGlmCisjaWYgZGVmaW5lZCBIQVZFX1dDSEFSX0ggfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDx3Y2hhci5oPgorI2VuZGlmIC8qIEhBVkVfV0NIQVJfSCB8fCBfTElCQyAqLworI2lmIGRlZmluZWQgSEFWRV9XQ1RZUEVfSCB8fCBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPHdjdHlwZS5oPgorI2VuZGlmIC8qIEhBVkVfV0NUWVBFX0ggfHwgX0xJQkMgKi8KKyNpZiBkZWZpbmVkIEhBVkVfU1REQk9PTF9IIHx8IGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8c3RkYm9vbC5oPgorI2VuZGlmIC8qIEhBVkVfU1REQk9PTF9IIHx8IF9MSUJDICovCisjaWYgIWRlZmluZWQoWk9TX1VTUykKKyNpZiBkZWZpbmVkIEhBVkVfU1RESU5UX0ggfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZiAvKiBIQVZFX1NURElOVF9IIHx8IF9MSUJDICovCisjZW5kaWYgLyogIVpPU19VU1MgKi8KKyNpZiBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisjZWxzZQorIyBkZWZpbmUgX19saWJjX2xvY2tfZGVmaW5lKENMQVNTLE5BTUUpCisjIGRlZmluZSBfX2xpYmNfbG9ja19pbml0KE5BTUUpIGRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIF9fbGliY19sb2NrX2xvY2soTkFNRSkgZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrKE5BTUUpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZuZGVmIEdBV0sKKy8qIEluIGNhc2UgdGhhdCB0aGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBpc2JsYW5rKCkuICAqLworI2lmICFkZWZpbmVkIF9MSUJDICYmICFkZWZpbmVkIEhBVkVfSVNCTEFOSyAmJiAhZGVmaW5lZCBpc2JsYW5rCisjIGRlZmluZSBpc2JsYW5rKGNoKSAoKGNoKSA9PSAnICcgfHwgKGNoKSA9PSAnXHQnKQorI2VuZGlmCisjZWxzZSAvKiBHQVdLICovCisvKgorICogVGhpcyBpcyBhIGZyZWFraW5nIG1lc3MuIE9uIGdsaWJjIHN5c3RlbXMgeW91IGhhdmUgdG8gZGVmaW5lCisgKiBhIG1hZ2ljIGNvbnN0YW50IHRvIGdldCBpc2JsYW5rKCkgb3V0IG9mIDxjdHlwZS5oPiwgc2luY2UgaXQncworICogYSBDOTkgZnVuY3Rpb24uICBUbyBoZWNrIHdpdGggYWxsIHRoYXQgYW5kIGJvcnJvdyBhIHBhZ2UgZnJvbQorICogZGZhLmMncyBib29rLgorICovCisKK3N0YXRpYyBpbnQKK2lzX2JsYW5rIChpbnQgYykKK3sKKyAgIHJldHVybiAoYyA9PSAnICcgfHwgYyA9PSAnXHQnKTsKK30KKyNlbmRpZiAvKiBHQVdLICovCisKKyNpZmRlZiBfTElCQworIyBpZm5kZWYgX1JFX0RFRklORV9MT0NBTEVfRlVOQ1RJT05TCisjICBkZWZpbmUgX1JFX0RFRklORV9MT0NBTEVfRlVOQ1RJT05TIDEKKyMgICBpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorIyAgIGluY2x1ZGUgPGxvY2FsZS9lbGVtLWhhc2guaD4KKyMgICBpbmNsdWRlIDxsb2NhbGUvY29sbC1sb29rdXAuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGlzIGlzIGZvciBvdGhlciBHTlUgZGlzdHJpYnV0aW9ucyB3aXRoIGludGVybmF0aW9uYWxpemVkIG1lc3NhZ2VzLiAgKi8KKyNpZiAoSEFWRV9MSUJJTlRMX0ggJiYgRU5BQkxFX05MUykgfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisjIGlmZGVmIF9MSUJDCisjICB1bmRlZiBnZXR0ZXh0CisjICBkZWZpbmUgZ2V0dGV4dChtc2dpZCkgXAorICBJTlRVU0UoX19kY2dldHRleHQpIChfbGliY19pbnRsX2RvbWFpbm5hbWUsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisjZW5kaWYKKworI2lmbmRlZiBnZXR0ZXh0X25vb3AKKy8qIFRoaXMgZGVmaW5lIGlzIHNvIHhnZXR0ZXh0IGNhbiBmaW5kIHRoZSBpbnRlcm5hdGlvbmFsaXphYmxlCisgICBzdHJpbmdzLiAgKi8KKyMgZGVmaW5lIGdldHRleHRfbm9vcChTdHJpbmcpIFN0cmluZworI2VuZGlmCisKKy8qIEZvciBsb3NlciBzeXN0ZW1zIHdpdGhvdXQgdGhlIGRlZmluaXRpb24uICAqLworI2lmbmRlZiBTSVpFX01BWAorIyBkZWZpbmUgU0laRV9NQVggKChzaXplX3QpIC0xKQorI2VuZGlmCisKKyNpZm5kZWYgTk9fTUJTVVBQT1JUCisjaW5jbHVkZSAibWJzdXBwb3J0LmgiIC8qIGdhd2sgKi8KKyNlbmRpZgorI2lmbmRlZiBNQl9DVVJfTUFYCisjZGVmaW5lIE1CX0NVUl9NQVggMQorI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBNQlNfU1VQUE9SVCkgfHwgX0xJQkMKKyMgZGVmaW5lIFJFX0VOQUJMRV9JMThOCisjZW5kaWYKKworI2lmIF9fR05VQ19fID49IDMKKyMgZGVmaW5lIEJFKGV4cHIsIHZhbCkgX19idWlsdGluX2V4cGVjdCAoZXhwciwgdmFsKQorI2Vsc2UKKyMgZGVmaW5lIEJFKGV4cHIsIHZhbCkgKGV4cHIpCisjIGlmZGVmIGlubGluZQorIyB1bmRlZiBpbmxpbmUKKyMgZW5kaWYKKyMgZGVmaW5lIGlubGluZQorI2VuZGlmCisKKy8qIE51bWJlciBvZiBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIuICAqLworI2RlZmluZSBTQkNfTUFYIDI1NgorCisjZGVmaW5lIENPTExfRUxFTV9MRU5fTUFYIDgKKworLyogVGhlIGNoYXJhY3RlciB3aGljaCByZXByZXNlbnRzIG5ld2xpbmUuICAqLworI2RlZmluZSBORVdMSU5FX0NIQVIgJ1xuJworI2RlZmluZSBXSURFX05FV0xJTkVfQ0hBUiBMJ1xuJworCisvKiBSZW5hbWUgdG8gc3RhbmRhcmQgQVBJIGZvciB1c2luZyBvdXQgb2YgZ2xpYmMuICAqLworI2lmbmRlZiBfTElCQworIyBpZmRlZiBfX3djdHlwZQorIyB1bmRlZiBfX3djdHlwZQorIyBlbmRpZgorIyBkZWZpbmUgX193Y3R5cGUgd2N0eXBlCisjIGlmZGVmIF9faXN3Y3R5cGUKKyMgdW5kZWYgX19pc3djdHlwZQorIyBlbmRpZgorIyBkZWZpbmUgX19pc3djdHlwZSBpc3djdHlwZQorIyBkZWZpbmUgX19idG93YyBidG93YworIyBkZWZpbmUgX19tYnJ0b3djIG1icnRvd2MKKyN1bmRlZiBfX21lbXBjcHkJLyogR0FXSyAqLworIyBkZWZpbmUgX19tZW1wY3B5IG1lbXBjcHkKKyMgZGVmaW5lIF9fd2NydG9tYiB3Y3J0b21iCisjIGRlZmluZSBfX3JlZ2ZyZWUgcmVnZnJlZQorIyBkZWZpbmUgYXR0cmlidXRlX2hpZGRlbgorI2VuZGlmIC8qIG5vdCBfTElCQyAqLworCisjaWZkZWYgX19HTlVDX18KKyMgZGVmaW5lIF9fYXR0cmlidXRlKGFyZykgX19hdHRyaWJ1dGVfXyAoYXJnKQorI2Vsc2UKKyMgZGVmaW5lIF9fYXR0cmlidXRlKGFyZykKKyNlbmRpZgorCitleHRlcm4gY29uc3QgY2hhciBfX3JlX2Vycm9yX21zZ2lkW10gYXR0cmlidXRlX2hpZGRlbjsKK2V4dGVybiBjb25zdCBzaXplX3QgX19yZV9lcnJvcl9tc2dpZF9pZHhbXSBhdHRyaWJ1dGVfaGlkZGVuOworCisvKiBBbiBpbnRlZ2VyIHVzZWQgdG8gcmVwcmVzZW50IGEgc2V0IG9mIGJpdHMuICBJdCBtdXN0IGJlIHVuc2lnbmVkLAorICAgYW5kIG11c3QgYmUgYXQgbGVhc3QgYXMgd2lkZSBhcyB1bnNpZ25lZCBpbnQuICAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBiaXRzZXRfd29yZF90OworLyogQWxsIGJpdHMgc2V0IGluIGEgYml0c2V0X3dvcmRfdC4gICovCisjZGVmaW5lIEJJVFNFVF9XT1JEX01BWCBVTE9OR19NQVgKKy8qIE51bWJlciBvZiBiaXRzIGluIGEgYml0c2V0X3dvcmRfdC4gICovCisjZGVmaW5lIEJJVFNFVF9XT1JEX0JJVFMgKHNpemVvZiAoYml0c2V0X3dvcmRfdCkgKiBDSEFSX0JJVCkKKy8qIE51bWJlciBvZiBiaXRzZXRfd29yZF90IGluIGEgYml0X3NldC4gICovCisjZGVmaW5lIEJJVFNFVF9XT1JEUyAoU0JDX01BWCAvIEJJVFNFVF9XT1JEX0JJVFMpCit0eXBlZGVmIGJpdHNldF93b3JkX3QgYml0c2V0X3RbQklUU0VUX1dPUkRTXTsKK3R5cGVkZWYgYml0c2V0X3dvcmRfdCAqcmVfYml0c2V0X3B0cl90OwordHlwZWRlZiBjb25zdCBiaXRzZXRfd29yZF90ICpyZV9jb25zdF9iaXRzZXRfcHRyX3Q7CisKKyNkZWZpbmUgYml0c2V0X3NldChzZXQsaSkgXAorICAoc2V0W2kgLyBCSVRTRVRfV09SRF9CSVRTXSB8PSAoYml0c2V0X3dvcmRfdCkgMSA8PCBpICUgQklUU0VUX1dPUkRfQklUUykKKyNkZWZpbmUgYml0c2V0X2NsZWFyKHNldCxpKSBcCisgIChzZXRbaSAvIEJJVFNFVF9XT1JEX0JJVFNdICY9IH4oKGJpdHNldF93b3JkX3QpIDEgPDwgaSAlIEJJVFNFVF9XT1JEX0JJVFMpKQorI2RlZmluZSBiaXRzZXRfY29udGFpbihzZXQsaSkgXAorICAoc2V0W2kgLyBCSVRTRVRfV09SRF9CSVRTXSAmICgoYml0c2V0X3dvcmRfdCkgMSA8PCBpICUgQklUU0VUX1dPUkRfQklUUykpCisjZGVmaW5lIGJpdHNldF9lbXB0eShzZXQpIG1lbXNldCAoc2V0LCAnXDAnLCBzaXplb2YgKGJpdHNldF90KSkKKyNkZWZpbmUgYml0c2V0X3NldF9hbGwoc2V0KSBtZW1zZXQgKHNldCwgJ1x4ZmYnLCBzaXplb2YgKGJpdHNldF90KSkKKyNkZWZpbmUgYml0c2V0X2NvcHkoZGVzdCxzcmMpIG1lbWNweSAoZGVzdCwgc3JjLCBzaXplb2YgKGJpdHNldF90KSkKKworI2RlZmluZSBQUkVWX1dPUkRfQ09OU1RSQUlOVCAweDAwMDEKKyNkZWZpbmUgUFJFVl9OT1RXT1JEX0NPTlNUUkFJTlQgMHgwMDAyCisjZGVmaW5lIE5FWFRfV09SRF9DT05TVFJBSU5UIDB4MDAwNAorI2RlZmluZSBORVhUX05PVFdPUkRfQ09OU1RSQUlOVCAweDAwMDgKKyNkZWZpbmUgUFJFVl9ORVdMSU5FX0NPTlNUUkFJTlQgMHgwMDEwCisjZGVmaW5lIE5FWFRfTkVXTElORV9DT05TVFJBSU5UIDB4MDAyMAorI2RlZmluZSBQUkVWX0JFR0JVRl9DT05TVFJBSU5UIDB4MDA0MAorI2RlZmluZSBORVhUX0VOREJVRl9DT05TVFJBSU5UIDB4MDA4MAorI2RlZmluZSBXT1JEX0RFTElNX0NPTlNUUkFJTlQgMHgwMTAwCisjZGVmaW5lIE5PVF9XT1JEX0RFTElNX0NPTlNUUkFJTlQgMHgwMjAwCisKK3R5cGVkZWYgZW51bQoreworICBJTlNJREVfV09SRCA9IFBSRVZfV09SRF9DT05TVFJBSU5UIHwgTkVYVF9XT1JEX0NPTlNUUkFJTlQsCisgIFdPUkRfRklSU1QgPSBQUkVWX05PVFdPUkRfQ09OU1RSQUlOVCB8IE5FWFRfV09SRF9DT05TVFJBSU5ULAorICBXT1JEX0xBU1QgPSBQUkVWX1dPUkRfQ09OU1RSQUlOVCB8IE5FWFRfTk9UV09SRF9DT05TVFJBSU5ULAorICBJTlNJREVfTk9UV09SRCA9IFBSRVZfTk9UV09SRF9DT05TVFJBSU5UIHwgTkVYVF9OT1RXT1JEX0NPTlNUUkFJTlQsCisgIExJTkVfRklSU1QgPSBQUkVWX05FV0xJTkVfQ09OU1RSQUlOVCwKKyAgTElORV9MQVNUID0gTkVYVF9ORVdMSU5FX0NPTlNUUkFJTlQsCisgIEJVRl9GSVJTVCA9IFBSRVZfQkVHQlVGX0NPTlNUUkFJTlQsCisgIEJVRl9MQVNUID0gTkVYVF9FTkRCVUZfQ09OU1RSQUlOVCwKKyAgV09SRF9ERUxJTSA9IFdPUkRfREVMSU1fQ09OU1RSQUlOVCwKKyAgTk9UX1dPUkRfREVMSU0gPSBOT1RfV09SRF9ERUxJTV9DT05TVFJBSU5UCit9IHJlX2NvbnRleHRfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IGFsbG9jOworICBpbnQgbmVsZW07CisgIGludCAqZWxlbXM7Cit9IHJlX25vZGVfc2V0OworCit0eXBlZGVmIGVudW0KK3sKKyAgTk9OX1RZUEUgPSAwLAorCisgIC8qIE5vZGUgdHlwZSwgVGhlc2UgYXJlIHVzZWQgYnkgdG9rZW4sIG5vZGUsIHRyZWUuICAqLworICBDSEFSQUNURVIgPSAxLAorICBFTkRfT0ZfUkUgPSAyLAorICBTSU1QTEVfQlJBQ0tFVCA9IDMsCisgIE9QX0JBQ0tfUkVGID0gNCwKKyAgT1BfUEVSSU9EID0gNSwKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBDT01QTEVYX0JSQUNLRVQgPSA2LAorICBPUF9VVEY4X1BFUklPRCA9IDcsCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworICAvKiBXZSBkZWZpbmUgRVBTSUxPTl9CSVQgYXMgYSBtYWNybyBzbyB0aGF0IE9QX09QRU5fU1VCRVhQIGlzIHVzZWQKKyAgICAgd2hlbiB0aGUgZGVidWdnZXIgc2hvd3MgdmFsdWVzIG9mIHRoaXMgZW51bSB0eXBlLiAgKi8KKyNkZWZpbmUgRVBTSUxPTl9CSVQgOAorICBPUF9PUEVOX1NVQkVYUCA9IEVQU0lMT05fQklUIHwgMCwKKyAgT1BfQ0xPU0VfU1VCRVhQID0gRVBTSUxPTl9CSVQgfCAxLAorICBPUF9BTFQgPSBFUFNJTE9OX0JJVCB8IDIsCisgIE9QX0RVUF9BU1RFUklTSyA9IEVQU0lMT05fQklUIHwgMywKKyAgQU5DSE9SID0gRVBTSUxPTl9CSVQgfCA0LAorCisgIC8qIFRyZWUgdHlwZSwgdGhlc2UgYXJlIHVzZWQgb25seSBieSB0cmVlLiAqLworICBDT05DQVQgPSAxNiwKKyAgU1VCRVhQID0gMTcsCisKKyAgLyogVG9rZW4gdHlwZSwgdGhlc2UgYXJlIHVzZWQgb25seSBieSB0b2tlbi4gICovCisgIE9QX0RVUF9QTFVTID0gMTgsCisgIE9QX0RVUF9RVUVTVElPTiwKKyAgT1BfT1BFTl9CUkFDS0VULAorICBPUF9DTE9TRV9CUkFDS0VULAorICBPUF9DSEFSU0VUX1JBTkdFLAorICBPUF9PUEVOX0RVUF9OVU0sCisgIE9QX0NMT1NFX0RVUF9OVU0sCisgIE9QX05PTl9NQVRDSF9MSVNULAorICBPUF9PUEVOX0NPTExfRUxFTSwKKyAgT1BfQ0xPU0VfQ09MTF9FTEVNLAorICBPUF9PUEVOX0VRVUlWX0NMQVNTLAorICBPUF9DTE9TRV9FUVVJVl9DTEFTUywKKyAgT1BfT1BFTl9DSEFSX0NMQVNTLAorICBPUF9DTE9TRV9DSEFSX0NMQVNTLAorICBPUF9XT1JELAorICBPUF9OT1RXT1JELAorICBPUF9TUEFDRSwKKyAgT1BfTk9UU1BBQ0UsCisgIEJBQ0tfU0xBU0gKKworfSByZV90b2tlbl90eXBlX3Q7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgLyogTXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLworICB3Y2hhcl90ICptYmNoYXJzOworCisgIC8qIENvbGxhdGluZyBzeW1ib2xzLiAgKi8KKyMgaWZkZWYgX0xJQkMKKyAgaW50MzJfdCAqY29sbF9zeW1zOworIyBlbmRpZgorCisgIC8qIEVxdWl2YWxlbmNlIGNsYXNzZXMuICovCisjIGlmZGVmIF9MSUJDCisgIGludDMyX3QgKmVxdWl2X2NsYXNzZXM7CisjIGVuZGlmCisKKyAgLyogUmFuZ2UgZXhwcmVzc2lvbnMuICovCisjIGlmZGVmIF9MSUJDCisgIHVpbnQzMl90ICpyYW5nZV9zdGFydHM7CisgIHVpbnQzMl90ICpyYW5nZV9lbmRzOworIyBlbHNlIC8qIG5vdCBfTElCQyAqLworICB3Y2hhcl90ICpyYW5nZV9zdGFydHM7CisgIHdjaGFyX3QgKnJhbmdlX2VuZHM7CisjIGVuZGlmIC8qIG5vdCBfTElCQyAqLworCisgIC8qIENoYXJhY3RlciBjbGFzc2VzLiAqLworICB3Y3R5cGVfdCAqY2hhcl9jbGFzc2VzOworCisgIC8qIElmIHRoaXMgY2hhcmFjdGVyIHNldCBpcyB0aGUgbm9uLW1hdGNoaW5nIGxpc3QuICAqLworICB1bnNpZ25lZCBpbnQgbm9uX21hdGNoIDogMTsKKworICAvKiAjIG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLiAgKi8KKyAgaW50IG5tYmNoYXJzOworCisgIC8qICMgb2YgY29sbGF0aW5nIHN5bWJvbHMuICAqLworICBpbnQgbmNvbGxfc3ltczsKKworICAvKiAjIG9mIGVxdWl2YWxlbmNlIGNsYXNzZXMuICovCisgIGludCBuZXF1aXZfY2xhc3NlczsKKworICAvKiAjIG9mIHJhbmdlIGV4cHJlc3Npb25zLiAqLworICBpbnQgbnJhbmdlczsKKworICAvKiAjIG9mIGNoYXJhY3RlciBjbGFzc2VzLiAqLworICBpbnQgbmNoYXJfY2xhc3NlczsKK30gcmVfY2hhcnNldF90OworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHVuaW9uCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIGM7CQkvKiBmb3IgQ0hBUkFDVEVSICovCisgICAgcmVfYml0c2V0X3B0cl90IHNiY3NldDsJLyogZm9yIFNJTVBMRV9CUkFDS0VUICovCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICByZV9jaGFyc2V0X3QgKm1iY3NldDsJLyogZm9yIENPTVBMRVhfQlJBQ0tFVCAqLworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgaW50IGlkeDsJCQkvKiBmb3IgQkFDS19SRUYgKi8KKyAgICByZV9jb250ZXh0X3R5cGUgY3R4X3R5cGU7CS8qIGZvciBBTkNIT1IgKi8KKyAgfSBvcHI7CisjaWYgX19HTlVDX18gPj0gMgorICByZV90b2tlbl90eXBlX3QgdHlwZSA6IDg7CisjZWxzZQorICByZV90b2tlbl90eXBlX3QgdHlwZTsKKyNlbmRpZgorICB1bnNpZ25lZCBpbnQgY29uc3RyYWludCA6IDEwOwkvKiBjb250ZXh0IGNvbnN0cmFpbnQgKi8KKyAgdW5zaWduZWQgaW50IGR1cGxpY2F0ZWQgOiAxOworICB1bnNpZ25lZCBpbnQgb3B0X3N1YmV4cCA6IDE7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgdW5zaWduZWQgaW50IGFjY2VwdF9tYiA6IDE7CisgIC8qIFRoZXNlIDIgYml0cyBjYW4gYmUgbW92ZWQgaW50byB0aGUgdW5pb24gaWYgbmVlZGVkIChlLmcuIGlmIHJ1bm5pbmcgb3V0CisgICAgIG9mIGJpdHM7IG1vdmUgb3ByLmMgdG8gb3ByLmMuYyBhbmQgbW92ZSB0aGUgZmxhZ3MgdG8gb3ByLmMuZmxhZ3MpLiAgKi8KKyAgdW5zaWduZWQgaW50IG1iX3BhcnRpYWwgOiAxOworI2VuZGlmCisgIHVuc2lnbmVkIGludCB3b3JkX2NoYXIgOiAxOworfSByZV90b2tlbl90OworCisjZGVmaW5lIElTX0VQU0lMT05fTk9ERSh0eXBlKSAoKHR5cGUpICYgRVBTSUxPTl9CSVQpCisKK3N0cnVjdCByZV9zdHJpbmdfdAoreworICAvKiBJbmRpY2F0ZSB0aGUgcmF3IGJ1ZmZlciB3aGljaCBpcyB0aGUgb3JpZ2luYWwgc3RyaW5nIHBhc3NlZCBhcyBhbgorICAgICBhcmd1bWVudCBvZiByZWdleGVjKCksIHJlX3NlYXJjaCgpLCBldGMuLiAgKi8KKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcmF3X21iczsKKyAgLyogU3RvcmUgdGhlIG11bHRpYnl0ZSBzdHJpbmcuICBJbiBjYXNlIG9mICJjYXNlIGluc2Vuc2l0aXZlIG1vZGUiIGxpa2UKKyAgICAgUkVHX0lDQVNFLCB1cHBlciBjYXNlcyBvZiB0aGUgc3RyaW5nIGFyZSBzdG9yZWQsIG90aGVyd2lzZSBNQlMgcG9pbnRzCisgICAgIHRoZSBzYW1lIGFkZHJlc3MgdGhhdCBSQVdfTUJTIHBvaW50cy4gICovCisgIHVuc2lnbmVkIGNoYXIgKm1iczsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAvKiBTdG9yZSB0aGUgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nIHdoaWNoIGlzIGNvcnJlc3BvbmRpbmcgdG8gTUJTLiAgKi8KKyAgd2ludF90ICp3Y3M7CisgIGludCAqb2Zmc2V0czsKKyAgbWJzdGF0ZV90IGN1cl9zdGF0ZTsKKyNlbmRpZgorICAvKiBJbmRleCBpbiBSQVdfTUJTLiAgRWFjaCBjaGFyYWN0ZXIgbWJzW2ldIGNvcnJlc3BvbmRzIHRvCisgICAgIHJhd19tYnNbcmF3X21ic19pZHggKyBpXS4gICovCisgIGludCByYXdfbWJzX2lkeDsKKyAgLyogVGhlIGxlbmd0aCBvZiB0aGUgdmFsaWQgY2hhcmFjdGVycyBpbiB0aGUgYnVmZmVycy4gICovCisgIGludCB2YWxpZF9sZW47CisgIC8qIFRoZSBjb3JyZXNwb25kaW5nIG51bWJlciBvZiBieXRlcyBpbiByYXdfbWJzIGFycmF5LiAgKi8KKyAgaW50IHZhbGlkX3Jhd19sZW47CisgIC8qIFRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlcnMgTUJTIGFuZCBXQ1MuICAqLworICBpbnQgYnVmc19sZW47CisgIC8qIFRoZSBpbmRleCBpbiBNQlMsIHdoaWNoIGlzIHVwZGF0ZWQgYnkgcmVfc3RyaW5nX2ZldGNoX2J5dGUuICAqLworICBpbnQgY3VyX2lkeDsKKyAgLyogbGVuZ3RoIG9mIFJBV19NQlMgYXJyYXkuICAqLworICBpbnQgcmF3X2xlbjsKKyAgLyogVGhpcyBpcyBSQVdfTEVOIC0gUkFXX01CU19JRFggKyBWQUxJRF9MRU4gLSBWQUxJRF9SQVdfTEVOLiAgKi8KKyAgaW50IGxlbjsKKyAgLyogRW5kIG9mIHRoZSBidWZmZXIgbWF5IGJlIHNob3J0ZXIgdGhhbiBpdHMgbGVuZ3RoIGluIHRoZSBjYXNlcyBzdWNoCisgICAgIGFzIHJlX21hdGNoXzIsIHJlX3NlYXJjaF8yLiAgVGhlbiwgd2UgdXNlIFNUT1AgZm9yIGVuZCBvZiB0aGUgYnVmZmVyCisgICAgIGluc3RlYWQgb2YgTEVOLiAgKi8KKyAgaW50IHJhd19zdG9wOworICAvKiBUaGlzIGlzIFJBV19TVE9QIC0gUkFXX01CU19JRFggYWRqdXN0ZWQgdGhyb3VnaCBPRkZTRVRTLiAgKi8KKyAgaW50IHN0b3A7CisKKyAgLyogVGhlIGNvbnRleHQgb2YgbWJzWzBdLiAgV2Ugc3RvcmUgdGhlIGNvbnRleHQgaW5kZXBlbmRlbnRseSwgc2luY2UKKyAgICAgdGhlIGNvbnRleHQgb2YgbWJzWzBdIG1heSBiZSBkaWZmZXJlbnQgZnJvbSByYXdfbWJzWzBdLCB3aGljaCBpcworICAgICB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dCBzdHJpbmcuICAqLworICB1bnNpZ25lZCBpbnQgdGlwX2NvbnRleHQ7CisgIC8qIFRoZSB0cmFuc2xhdGlvbiBwYXNzZWQgYXMgYSBwYXJ0IG9mIGFuIGFyZ3VtZW50IG9mIHJlX2NvbXBpbGVfcGF0dGVybi4gICovCisgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zOworICAvKiBDb3B5IG9mIHJlX2RmYV90J3Mgd29yZF9jaGFyLiAgKi8KKyAgcmVfY29uc3RfYml0c2V0X3B0cl90IHdvcmRfY2hhcjsKKyAgLyogMSBpZiBSRUdfSUNBU0UuICAqLworICB1bnNpZ25lZCBjaGFyIGljYXNlOworICB1bnNpZ25lZCBjaGFyIGlzX3V0Zjg7CisgIHVuc2lnbmVkIGNoYXIgbWFwX25vdGFzY2lpOworICB1bnNpZ25lZCBjaGFyIG1ic19hbGxvY2F0ZWQ7CisgIHVuc2lnbmVkIGNoYXIgb2Zmc2V0c19uZWVkZWQ7CisgIHVuc2lnbmVkIGNoYXIgbmV3bGluZV9hbmNob3I7CisgIHVuc2lnbmVkIGNoYXIgd29yZF9vcHNfdXNlZDsKKyAgaW50IG1iX2N1cl9tYXg7Cit9OwordHlwZWRlZiBzdHJ1Y3QgcmVfc3RyaW5nX3QgcmVfc3RyaW5nX3Q7CisKKworc3RydWN0IHJlX2RmYV90OwordHlwZWRlZiBzdHJ1Y3QgcmVfZGZhX3QgcmVfZGZhX3Q7CisKKyNpZm5kZWYgX0xJQkMKKyMgaWZkZWYgX19pMzg2X18KKyMgIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbiAgIF9fYXR0cmlidXRlICgocmVncGFybSAoMyksIHN0ZGNhbGwpKQorIyBlbHNlCisjICBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIE5PVF9JTl9saWJjCitzdGF0aWMgcmVnX2VycmNvZGVfdCByZV9zdHJpbmdfcmVhbGxvY19idWZmZXJzIChyZV9zdHJpbmdfdCAqcHN0ciwKKwkJCQkJCWludCBuZXdfYnVmX2xlbikKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisjIGlmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgdm9pZCBidWlsZF93Y3NfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKKyAgaW50ZXJuYWxfZnVuY3Rpb247CisjIGVuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCitzdGF0aWMgdm9pZCBidWlsZF91cHBlcl9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyB2b2lkIHJlX3N0cmluZ190cmFuc2xhdGVfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgdW5zaWduZWQgaW50IHJlX3N0cmluZ19jb250ZXh0X2F0IChjb25zdCByZV9zdHJpbmdfdCAqaW5wdXQsIGludCBpZHgsCisJCQkJCSAgaW50IGVmbGFncykKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGUgKChwdXJlKSk7CisjZW5kaWYKKyNkZWZpbmUgcmVfc3RyaW5nX3BlZWtfYnl0ZShwc3RyLCBvZmZzZXQpIFwKKyAgKChwc3RyKS0+bWJzWyhwc3RyKS0+Y3VyX2lkeCArIG9mZnNldF0pCisjZGVmaW5lIHJlX3N0cmluZ19mZXRjaF9ieXRlKHBzdHIpIFwKKyAgKChwc3RyKS0+bWJzWyhwc3RyKS0+Y3VyX2lkeCsrXSkKKyNkZWZpbmUgcmVfc3RyaW5nX2ZpcnN0X2J5dGUocHN0ciwgaWR4KSBcCisgICgoaWR4KSA9PSAocHN0ciktPnZhbGlkX2xlbiB8fCAocHN0ciktPndjc1tpZHhdICE9IFdFT0YpCisjZGVmaW5lIHJlX3N0cmluZ19pc19zaW5nbGVfYnl0ZV9jaGFyKHBzdHIsIGlkeCkgXAorICAoKHBzdHIpLT53Y3NbaWR4XSAhPSBXRU9GICYmICgocHN0ciktPnZhbGlkX2xlbiA9PSAoaWR4KSArIDEgXAorCQkJCXx8IChwc3RyKS0+d2NzWyhpZHgpICsgMV0gIT0gV0VPRikpCisjZGVmaW5lIHJlX3N0cmluZ19lb2kocHN0cikgKChwc3RyKS0+c3RvcCA8PSAocHN0ciktPmN1cl9pZHgpCisjZGVmaW5lIHJlX3N0cmluZ19jdXJfaWR4KHBzdHIpICgocHN0ciktPmN1cl9pZHgpCisjZGVmaW5lIHJlX3N0cmluZ19nZXRfYnVmZmVyKHBzdHIpICgocHN0ciktPm1icykKKyNkZWZpbmUgcmVfc3RyaW5nX2xlbmd0aChwc3RyKSAoKHBzdHIpLT5sZW4pCisjZGVmaW5lIHJlX3N0cmluZ19ieXRlX2F0KHBzdHIsaWR4KSAoKHBzdHIpLT5tYnNbaWR4XSkKKyNkZWZpbmUgcmVfc3RyaW5nX3NraXBfYnl0ZXMocHN0cixpZHgpICgocHN0ciktPmN1cl9pZHggKz0gKGlkeCkpCisjZGVmaW5lIHJlX3N0cmluZ19zZXRfaW5kZXgocHN0cixpZHgpICgocHN0ciktPmN1cl9pZHggPSAoaWR4KSkKKworI2lmbmRlZiBfTElCQworIyBpZiBIQVZFX0FMTE9DQQorIyAgaWYgKF9NU0NfVkVSKQorIyAgIGluY2x1ZGUgPG1hbGxvYy5oPgorIyAgIGRlZmluZSBfX2xpYmNfdXNlX2FsbG9jYShuKSAwCisjICBlbHNlCisjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisvKiBUaGUgT1MgdXN1YWxseSBndWFyYW50ZWVzIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCisgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5CisgICBhbGxvY2F0ZSBhbnl0aGluZyBsYXJnZXIgdGhhbiA0MDk2IGJ5dGVzLiAgQWxzbyBjYXJlIGZvciB0aGUgcG9zc2liaWxpdHkKKyAgIG9mIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLworIyAgZGVmaW5lIF9fbGliY191c2VfYWxsb2NhKG4pICgobikgPCA0MDMyKQorIyAgZW5kaWYKKyMgZWxzZQorLyogYWxsb2NhIGlzIGltcGxlbWVudGVkIHdpdGggbWFsbG9jLCBzbyBqdXN0IHVzZSBtYWxsb2MuICAqLworIyAgZGVmaW5lIF9fbGliY191c2VfYWxsb2NhKG4pIDAKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIHJlX21hbGxvYyh0LG4pICgodCAqKSBtYWxsb2MgKChuKSAqIHNpemVvZiAodCkpKQorLyogU3VuT1MgNC4xLnggcmVhbGxvYyBkb2Vzbid0IGFjY2VwdCBudWxsIHBvaW50ZXJzOiBwcmUtU3RhbmRhcmQgQy4gU2lnaC4gKi8KKyNkZWZpbmUgcmVfcmVhbGxvYyhwLHQsbikgKChwICE9IE5VTEwpID8gKHQgKikgcmVhbGxvYyAocCwobikqc2l6ZW9mKHQpKSA6ICh0ICopIGNhbGxvYyhuLHNpemVvZih0KSkpCisjZGVmaW5lIHJlX2ZyZWUocCkgZnJlZSAocCkKKworc3RydWN0IGJpbl90cmVlX3QKK3sKKyAgc3RydWN0IGJpbl90cmVlX3QgKnBhcmVudDsKKyAgc3RydWN0IGJpbl90cmVlX3QgKmxlZnQ7CisgIHN0cnVjdCBiaW5fdHJlZV90ICpyaWdodDsKKyAgc3RydWN0IGJpbl90cmVlX3QgKmZpcnN0OworICBzdHJ1Y3QgYmluX3RyZWVfdCAqbmV4dDsKKworICByZV90b2tlbl90IHRva2VuOworCisgIC8qIGBub2RlX2lkeCcgaXMgdGhlIGluZGV4IGluIGRmYS0+bm9kZXMsIGlmIGB0eXBlJyA9PSAwLgorICAgICBPdGhlcndpc2UgYHR5cGUnIGluZGljYXRlIHRoZSB0eXBlIG9mIHRoaXMgbm9kZS4gICovCisgIGludCBub2RlX2lkeDsKK307Cit0eXBlZGVmIHN0cnVjdCBiaW5fdHJlZV90IGJpbl90cmVlX3Q7CisKKyNkZWZpbmUgQklOX1RSRUVfU1RPUkFHRV9TSVpFIFwKKyAgKCgxMDI0IC0gc2l6ZW9mICh2b2lkICopKSAvIHNpemVvZiAoYmluX3RyZWVfdCkpCisKK3N0cnVjdCBiaW5fdHJlZV9zdG9yYWdlX3QKK3sKKyAgc3RydWN0IGJpbl90cmVlX3N0b3JhZ2VfdCAqbmV4dDsKKyAgYmluX3RyZWVfdCBkYXRhW0JJTl9UUkVFX1NUT1JBR0VfU0laRV07Cit9OwordHlwZWRlZiBzdHJ1Y3QgYmluX3RyZWVfc3RvcmFnZV90IGJpbl90cmVlX3N0b3JhZ2VfdDsKKworI2RlZmluZSBDT05URVhUX1dPUkQgMQorI2RlZmluZSBDT05URVhUX05FV0xJTkUgKENPTlRFWFRfV09SRCA8PCAxKQorI2RlZmluZSBDT05URVhUX0JFR0JVRiAoQ09OVEVYVF9ORVdMSU5FIDw8IDEpCisjZGVmaW5lIENPTlRFWFRfRU5EQlVGIChDT05URVhUX0JFR0JVRiA8PCAxKQorCisjZGVmaW5lIElTX1dPUkRfQ09OVEVYVChjKSAoKGMpICYgQ09OVEVYVF9XT1JEKQorI2RlZmluZSBJU19ORVdMSU5FX0NPTlRFWFQoYykgKChjKSAmIENPTlRFWFRfTkVXTElORSkKKyNkZWZpbmUgSVNfQkVHQlVGX0NPTlRFWFQoYykgKChjKSAmIENPTlRFWFRfQkVHQlVGKQorI2RlZmluZSBJU19FTkRCVUZfQ09OVEVYVChjKSAoKGMpICYgQ09OVEVYVF9FTkRCVUYpCisjZGVmaW5lIElTX09SRElOQVJZX0NPTlRFWFQoYykgKChjKSA9PSAwKQorCisjZGVmaW5lIElTX1dPUkRfQ0hBUihjaCkgKGlzYWxudW0gKGNoKSB8fCAoY2gpID09ICdfJykKKyNkZWZpbmUgSVNfTkVXTElORShjaCkgKChjaCkgPT0gTkVXTElORV9DSEFSKQorI2RlZmluZSBJU19XSURFX1dPUkRfQ0hBUihjaCkgKGlzd2FsbnVtIChjaCkgfHwgKGNoKSA9PSBMJ18nKQorI2RlZmluZSBJU19XSURFX05FV0xJTkUoY2gpICgoY2gpID09IFdJREVfTkVXTElORV9DSEFSKQorCisjZGVmaW5lIE5PVF9TQVRJU0ZZX1BSRVZfQ09OU1RSQUlOVChjb25zdHJhaW50LGNvbnRleHQpIFwKKyAoKCgoY29uc3RyYWludCkgJiBQUkVWX1dPUkRfQ09OU1RSQUlOVCkgJiYgIUlTX1dPUkRfQ09OVEVYVCAoY29udGV4dCkpIFwKKyAgfHwgKChjb25zdHJhaW50ICYgUFJFVl9OT1RXT1JEX0NPTlNUUkFJTlQpICYmIElTX1dPUkRfQ09OVEVYVCAoY29udGV4dCkpIFwKKyAgfHwgKChjb25zdHJhaW50ICYgUFJFVl9ORVdMSU5FX0NPTlNUUkFJTlQpICYmICFJU19ORVdMSU5FX0NPTlRFWFQgKGNvbnRleHQpKVwKKyAgfHwgKChjb25zdHJhaW50ICYgUFJFVl9CRUdCVUZfQ09OU1RSQUlOVCkgJiYgIUlTX0JFR0JVRl9DT05URVhUIChjb250ZXh0KSkpCisKKyNkZWZpbmUgTk9UX1NBVElTRllfTkVYVF9DT05TVFJBSU5UKGNvbnN0cmFpbnQsY29udGV4dCkgXAorICgoKChjb25zdHJhaW50KSAmIE5FWFRfV09SRF9DT05TVFJBSU5UKSAmJiAhSVNfV09SRF9DT05URVhUIChjb250ZXh0KSkgXAorICB8fCAoKChjb25zdHJhaW50KSAmIE5FWFRfTk9UV09SRF9DT05TVFJBSU5UKSAmJiBJU19XT1JEX0NPTlRFWFQgKGNvbnRleHQpKSBcCisgIHx8ICgoKGNvbnN0cmFpbnQpICYgTkVYVF9ORVdMSU5FX0NPTlNUUkFJTlQpICYmICFJU19ORVdMSU5FX0NPTlRFWFQgKGNvbnRleHQpKSBcCisgIHx8ICgoKGNvbnN0cmFpbnQpICYgTkVYVF9FTkRCVUZfQ09OU1RSQUlOVCkgJiYgIUlTX0VOREJVRl9DT05URVhUIChjb250ZXh0KSkpCisKK3N0cnVjdCByZV9kZmFzdGF0ZV90Cit7CisgIHVuc2lnbmVkIGludCBoYXNoOworICByZV9ub2RlX3NldCBub2RlczsKKyAgcmVfbm9kZV9zZXQgbm9uX2Vwc19ub2RlczsKKyAgcmVfbm9kZV9zZXQgaW52ZWNsb3N1cmU7CisgIHJlX25vZGVfc2V0ICplbnRyYW5jZV9ub2RlczsKKyAgc3RydWN0IHJlX2RmYXN0YXRlX3QgKip0cnRhYmxlLCAqKndvcmRfdHJ0YWJsZTsKKyAgdW5zaWduZWQgaW50IGNvbnRleHQgOiA0OworICB1bnNpZ25lZCBpbnQgaGFsdCA6IDE7CisgIC8qIElmIHRoaXMgc3RhdGUgY2FuIGFjY2VwdCBgbXVsdGkgYnl0ZScuCisgICAgIE5vdGUgdGhhdCB3ZSByZWZlciB0byBtdWx0aWJ5dGUgY2hhcmFjdGVycywgYW5kIG11bHRpIGNoYXJhY3RlcgorICAgICBjb2xsYXRpbmcgZWxlbWVudHMgYXMgYG11bHRpIGJ5dGUnLiAgKi8KKyAgdW5zaWduZWQgaW50IGFjY2VwdF9tYiA6IDE7CisgIC8qIElmIHRoaXMgc3RhdGUgaGFzIGJhY2tyZWZlcmVuY2Ugbm9kZShzKS4gICovCisgIHVuc2lnbmVkIGludCBoYXNfYmFja3JlZiA6IDE7CisgIHVuc2lnbmVkIGludCBoYXNfY29uc3RyYWludCA6IDE7Cit9OwordHlwZWRlZiBzdHJ1Y3QgcmVfZGZhc3RhdGVfdCByZV9kZmFzdGF0ZV90OworCitzdHJ1Y3QgcmVfc3RhdGVfdGFibGVfZW50cnkKK3sKKyAgaW50IG51bTsKKyAgaW50IGFsbG9jOworICByZV9kZmFzdGF0ZV90ICoqYXJyYXk7Cit9OworCisvKiBBcnJheSB0eXBlIHVzZWQgaW4gcmVfc3ViX21hdGNoX2xhc3RfdCBhbmQgcmVfc3ViX21hdGNoX3RvcF90LiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IG5leHRfaWR4OworICBpbnQgYWxsb2M7CisgIHJlX2RmYXN0YXRlX3QgKiphcnJheTsKK30gc3RhdGVfYXJyYXlfdDsKKworLyogU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vZGUgTk9ERSB3aG9zZSB0eXBlIGlzIE9QX0NMT1NFX1NVQkVYUC4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGludCBub2RlOworICBpbnQgc3RyX2lkeDsgLyogVGhlIHBvc2l0aW9uIE5PREUgbWF0Y2ggYXQuICAqLworICBzdGF0ZV9hcnJheV90IHBhdGg7Cit9IHJlX3N1Yl9tYXRjaF9sYXN0X3Q7CisKKy8qIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBub2RlIE5PREUgd2hvc2UgdHlwZSBpcyBPUF9PUEVOX1NVQkVYUC4KKyAgIEFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9kZSwgd2hvc2UgdHlwZSBpcyBPUF9DTE9TRV9TVUJFWFAsCisgICBjb3JyZXNwb25kaW5nIHRvIE5PREUgaXMgc3RvcmVkIGluIExBU1RTLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IHN0cl9pZHg7CisgIGludCBub2RlOworICBzdGF0ZV9hcnJheV90ICpwYXRoOworICBpbnQgYWxhc3RzOyAvKiBBbGxvY2F0aW9uIHNpemUgb2YgTEFTVFMuICAqLworICBpbnQgbmxhc3RzOyAvKiBUaGUgbnVtYmVyIG9mIExBU1RTLiAgKi8KKyAgcmVfc3ViX21hdGNoX2xhc3RfdCAqKmxhc3RzOworfSByZV9zdWJfbWF0Y2hfdG9wX3Q7CisKK3N0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5Cit7CisgIGludCBub2RlOworICBpbnQgc3RyX2lkeDsKKyAgaW50IHN1YmV4cF9mcm9tOworICBpbnQgc3ViZXhwX3RvOworICBjaGFyIG1vcmU7CisgIGNoYXIgdW51c2VkOworICB1bnNpZ25lZCBzaG9ydCBpbnQgZXBzX3JlYWNoYWJsZV9zdWJleHBzX21hcDsKK307CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIFRoZSBzdHJpbmcgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGlucHV0IHN0cmluZy4gICovCisgIHJlX3N0cmluZ190IGlucHV0OworI2lmIGRlZmluZWQgX0xJQkMgfHwgKGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmE7CisjZWxzZQorICBjb25zdCByZV9kZmFfdCAqZGZhOworI2VuZGlmCisgIC8qIEVGTEFHUyBvZiB0aGUgYXJndW1lbnQgb2YgcmVnZXhlYy4gICovCisgIGludCBlZmxhZ3M7CisgIC8qIFdoZXJlIHRoZSBtYXRjaGluZyBlbmRzLiAgKi8KKyAgaW50IG1hdGNoX2xhc3Q7CisgIGludCBsYXN0X25vZGU7CisgIC8qIFRoZSBzdGF0ZSBsb2cgdXNlZCBieSB0aGUgbWF0Y2hlci4gICovCisgIHJlX2RmYXN0YXRlX3QgKipzdGF0ZV9sb2c7CisgIGludCBzdGF0ZV9sb2dfdG9wOworICAvKiBCYWNrIHJlZmVyZW5jZSBjYWNoZS4gICovCisgIGludCBuYmtyZWZfZW50czsKKyAgaW50IGFia3JlZl9lbnRzOworICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqYmtyZWZfZW50czsKKyAgaW50IG1heF9tYl9lbGVtX2xlbjsKKyAgaW50IG5zdWJfdG9wczsKKyAgaW50IGFzdWJfdG9wczsKKyAgcmVfc3ViX21hdGNoX3RvcF90ICoqc3ViX3RvcHM7Cit9IHJlX21hdGNoX2NvbnRleHRfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgcmVfZGZhc3RhdGVfdCAqKnNpZnRlZF9zdGF0ZXM7CisgIHJlX2RmYXN0YXRlX3QgKipsaW1pdGVkX3N0YXRlczsKKyAgaW50IGxhc3Rfbm9kZTsKKyAgaW50IGxhc3Rfc3RyX2lkeDsKKyAgcmVfbm9kZV9zZXQgbGltaXRzOworfSByZV9zaWZ0X2NvbnRleHRfdDsKKworc3RydWN0IHJlX2ZhaWxfc3RhY2tfZW50X3QKK3sKKyAgaW50IGlkeDsKKyAgaW50IG5vZGU7CisgIHJlZ21hdGNoX3QgKnJlZ3M7CisgIHJlX25vZGVfc2V0IGVwc192aWFfbm9kZXM7Cit9OworCitzdHJ1Y3QgcmVfZmFpbF9zdGFja190Cit7CisgIGludCBudW07CisgIGludCBhbGxvYzsKKyAgc3RydWN0IHJlX2ZhaWxfc3RhY2tfZW50X3QgKnN0YWNrOworfTsKKworc3RydWN0IHJlX2RmYV90Cit7CisgIHJlX3Rva2VuX3QgKm5vZGVzOworICBzaXplX3Qgbm9kZXNfYWxsb2M7CisgIHNpemVfdCBub2Rlc19sZW47CisgIGludCAqbmV4dHM7CisgIGludCAqb3JnX2luZGljZXM7CisgIHJlX25vZGVfc2V0ICplZGVzdHM7CisgIHJlX25vZGVfc2V0ICplY2xvc3VyZXM7CisgIHJlX25vZGVfc2V0ICppbnZlY2xvc3VyZXM7CisgIHN0cnVjdCByZV9zdGF0ZV90YWJsZV9lbnRyeSAqc3RhdGVfdGFibGU7CisgIHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGU7CisgIHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGVfd29yZDsKKyAgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZV9ubDsKKyAgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZV9iZWdidWY7CisgIGJpbl90cmVlX3QgKnN0cl90cmVlOworICBiaW5fdHJlZV9zdG9yYWdlX3QgKnN0cl90cmVlX3N0b3JhZ2U7CisgIHJlX2JpdHNldF9wdHJfdCBzYl9jaGFyOworICBpbnQgc3RyX3RyZWVfc3RvcmFnZV9pZHg7CisKKyAgLyogbnVtYmVyIG9mIHN1YmV4cHJlc3Npb25zIGByZV9uc3ViJyBpcyBpbiByZWdleF90LiAgKi8KKyAgdW5zaWduZWQgaW50IHN0YXRlX2hhc2hfbWFzazsKKyAgaW50IGluaXRfbm9kZTsKKyAgaW50IG5iYWNrcmVmOyAvKiBUaGUgbnVtYmVyIG9mIGJhY2tyZWZlcmVuY2UgaW4gdGhpcyBkZmEuICAqLworCisgIC8qIEJpdG1hcCBleHByZXNzaW5nIHdoaWNoIGJhY2tyZWZlcmVuY2UgaXMgdXNlZC4gICovCisgIGJpdHNldF93b3JkX3QgdXNlZF9ia3JlZl9tYXA7CisgIGJpdHNldF93b3JkX3QgY29tcGxldGVkX2JrcmVmX21hcDsKKworICB1bnNpZ25lZCBpbnQgaGFzX3BsdXJhbF9tYXRjaCA6IDE7CisgIC8qIElmIHRoaXMgZGZhIGhhcyAibXVsdGlieXRlIG5vZGUiLCB3aGljaCBpcyBhIGJhY2tyZWZlcmVuY2Ugb3IKKyAgICAgYSBub2RlIHdoaWNoIGNhbiBhY2NlcHQgbXVsdGlieXRlIGNoYXJhY3RlciBvciBtdWx0aSBjaGFyYWN0ZXIKKyAgICAgY29sbGF0aW5nIGVsZW1lbnQuICAqLworICB1bnNpZ25lZCBpbnQgaGFzX21iX25vZGUgOiAxOworICB1bnNpZ25lZCBpbnQgaXNfdXRmOCA6IDE7CisgIHVuc2lnbmVkIGludCBtYXBfbm90YXNjaWkgOiAxOworICB1bnNpZ25lZCBpbnQgd29yZF9vcHNfdXNlZCA6IDE7CisgIGludCBtYl9jdXJfbWF4OworICBiaXRzZXRfdCB3b3JkX2NoYXI7CisgIHJlZ19zeW50YXhfdCBzeW50YXg7CisgIGludCAqc3ViZXhwX21hcDsKKyNpZmRlZiBERUJVRworICBjaGFyKiByZV9zdHI7CisjZW5kaWYKKyNpZiBkZWZpbmVkIF9MSUJDCisgIF9fbGliY19sb2NrX2RlZmluZSAoLCBsb2NrKQorI2VuZGlmCit9OworCisjZGVmaW5lIHJlX25vZGVfc2V0X2luaXRfZW1wdHkoc2V0KSBtZW1zZXQgKHNldCwgJ1wwJywgc2l6ZW9mIChyZV9ub2RlX3NldCkpCisjZGVmaW5lIHJlX25vZGVfc2V0X3JlbW92ZShzZXQsaWQpIFwKKyAgKHJlX25vZGVfc2V0X3JlbW92ZV9hdCAoc2V0LCByZV9ub2RlX3NldF9jb250YWlucyAoc2V0LCBpZCkgLSAxKSkKKyNkZWZpbmUgcmVfbm9kZV9zZXRfZW1wdHkocCkgKChwKS0+bmVsZW0gPSAwKQorI2RlZmluZSByZV9ub2RlX3NldF9mcmVlKHNldCkgcmVfZnJlZSAoKHNldCktPmVsZW1zKQorDAorCit0eXBlZGVmIGVudW0KK3sKKyAgU0JfQ0hBUiwKKyAgTUJfQ0hBUiwKKyAgRVFVSVZfQ0xBU1MsCisgIENPTExfU1lNLAorICBDSEFSX0NMQVNTCit9IGJyYWNrZXRfZWxlbV90eXBlOworCit0eXBlZGVmIHN0cnVjdAoreworICBicmFja2V0X2VsZW1fdHlwZSB0eXBlOworICB1bmlvbgorICB7CisgICAgdW5zaWduZWQgY2hhciBjaDsKKyAgICB1bnNpZ25lZCBjaGFyICpuYW1lOworICAgIHdjaGFyX3Qgd2NoOworICB9IG9wcjsKK30gYnJhY2tldF9lbGVtX3Q7CisKKworLyogSW5saW5lIGZ1bmN0aW9ucyBmb3IgYml0c2V0IG9wZXJhdGlvbi4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdHNldF9ub3QgKGJpdHNldF90IHNldCkKK3sKKyAgaW50IGJpdHNldF9pOworICBmb3IgKGJpdHNldF9pID0gMDsgYml0c2V0X2kgPCBCSVRTRVRfV09SRFM7ICsrYml0c2V0X2kpCisgICAgc2V0W2JpdHNldF9pXSA9IH5zZXRbYml0c2V0X2ldOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdHNldF9tZXJnZSAoYml0c2V0X3QgZGVzdCwgY29uc3QgYml0c2V0X3Qgc3JjKQoreworICBpbnQgYml0c2V0X2k7CisgIGZvciAoYml0c2V0X2kgPSAwOyBiaXRzZXRfaSA8IEJJVFNFVF9XT1JEUzsgKytiaXRzZXRfaSkKKyAgICBkZXN0W2JpdHNldF9pXSB8PSBzcmNbYml0c2V0X2ldOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdHNldF9tYXNrIChiaXRzZXRfdCBkZXN0LCBjb25zdCBiaXRzZXRfdCBzcmMpCit7CisgIGludCBiaXRzZXRfaTsKKyAgZm9yIChiaXRzZXRfaSA9IDA7IGJpdHNldF9pIDwgQklUU0VUX1dPUkRTOyArK2JpdHNldF9pKQorICAgIGRlc3RbYml0c2V0X2ldICY9IHNyY1tiaXRzZXRfaV07Cit9CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLyogSW5saW5lIGZ1bmN0aW9ucyBmb3IgcmVfc3RyaW5nLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfc3RyaW5nX2NoYXJfc2l6ZV9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgpCit7CisgIGludCBieXRlX2lkeDsKKyAgaWYgKHBzdHItPm1iX2N1cl9tYXggPT0gMSkKKyAgICByZXR1cm4gMTsKKyAgZm9yIChieXRlX2lkeCA9IDE7IGlkeCArIGJ5dGVfaWR4IDwgcHN0ci0+dmFsaWRfbGVuOyArK2J5dGVfaWR4KQorICAgIGlmIChwc3RyLT53Y3NbaWR4ICsgYnl0ZV9pZHhdICE9IFdFT0YpCisgICAgICBicmVhazsKKyAgcmV0dXJuIGJ5dGVfaWR4OworfQorCitzdGF0aWMgaW5saW5lIHdpbnRfdAoraW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGUgKChwdXJlKSkKK3JlX3N0cmluZ193Y2hhcl9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgpCit7CisgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID09IDEpCisgICAgcmV0dXJuICh3aW50X3QpIHBzdHItPm1ic1tpZHhdOworICByZXR1cm4gKHdpbnRfdCkgcHN0ci0+d2NzW2lkeF07Cit9CisKKyMgaWZuZGVmIE5PVF9JTl9saWJjCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfc3RyaW5nX2VsZW1fc2l6ZV9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgpCit7CisjICBpZmRlZiBfTElCQworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwLCAqZXh0cmE7CisgIGNvbnN0IGludDMyX3QgKnRhYmxlLCAqaW5kaXJlY3Q7CisgIGludDMyX3QgdG1wOworIyAgIGluY2x1ZGUgPGxvY2FsZS93ZWlnaHQuaD4KKyAgdWludF9mYXN0MzJfdCBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworCisgIGlmIChucnVsZXMgIT0gMCkKKyAgICB7CisgICAgICB0YWJsZSA9IChjb25zdCBpbnQzMl90ICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9UQUJMRU1CKTsKKyAgICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfRVhUUkFNQik7CisgICAgICBpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorCQkJCQkJX05MX0NPTExBVEVfSU5ESVJFQ1RNQik7CisgICAgICBwID0gcHN0ci0+bWJzICsgaWR4OworICAgICAgdG1wID0gZmluZGlkeCAoJnApOworICAgICAgcmV0dXJuIHAgLSBwc3RyLT5tYnMgLSBpZHg7CisgICAgfQorICBlbHNlCisjICBlbmRpZiAvKiBfTElCQyAqLworICAgIHJldHVybiAxOworfQorIyBlbmRpZgorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKyNlbmRpZiAvKiAgX1JFR0VYX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdleGVjLmMgYi9jb21wYXQvcmVnZXgvcmVnZXhlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MzU4YWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcmVnZXgvcmVnZXhlYy5jCkBAIC0wLDAgKzEsNDM2OCBAQAorLyogRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGFuZCBzZWFyY2ggbGlicmFyeS4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA1LCAyMDA3LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBJc2FtdSBIYXNlZ2F3YSA8aXNhbXVAeWFtYXRvLmlibS5jb20+LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90IG1hdGNoX2N0eF9pbml0IChyZV9tYXRjaF9jb250ZXh0X3QgKmNhY2hlLCBpbnQgZWZsYWdzLAorCQkJCSAgICAgaW50IG4pIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHZvaWQgbWF0Y2hfY3R4X2NsZWFuIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHZvaWQgbWF0Y2hfY3R4X2ZyZWUgKHJlX21hdGNoX2NvbnRleHRfdCAqY2FjaGUpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgbWF0Y2hfY3R4X2FkZF9lbnRyeSAocmVfbWF0Y2hfY29udGV4dF90ICpjYWNoZSwgaW50IG5vZGUsCisJCQkJCSAgaW50IHN0cl9pZHgsIGludCBmcm9tLCBpbnQgdG8pCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGludCBzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBzdHJfaWR4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IG1hdGNoX2N0eF9hZGRfc3VidG9wIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBub2RlLAorCQkJCQkgICBpbnQgc3RyX2lkeCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVfc3ViX21hdGNoX2xhc3RfdCAqIG1hdGNoX2N0eF9hZGRfc3VibGFzdCAocmVfc3ViX21hdGNoX3RvcF90ICpzdWJ0b3AsCisJCQkJCQkgICBpbnQgbm9kZSwgaW50IHN0cl9pZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHZvaWQgc2lmdF9jdHhfaW5pdCAocmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsIHJlX2RmYXN0YXRlX3QgKipzaWZ0ZWRfc3RzLAorCQkJICAgcmVfZGZhc3RhdGVfdCAqKmxpbWl0ZWRfc3RzLCBpbnQgbGFzdF9ub2RlLAorCQkJICAgaW50IGxhc3Rfc3RyX2lkeCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCByZV9zZWFyY2hfaW50ZXJuYWwgKGNvbnN0IHJlZ2V4X3QgKnByZWcsCisJCQkJCSBjb25zdCBjaGFyICpzdHJpbmcsIGludCBsZW5ndGgsCisJCQkJCSBpbnQgc3RhcnQsIGludCByYW5nZSwgaW50IHN0b3AsCisJCQkJCSBzaXplX3Qgbm1hdGNoLCByZWdtYXRjaF90IHBtYXRjaFtdLAorCQkJCQkgaW50IGVmbGFncyk7CitzdGF0aWMgaW50IHJlX3NlYXJjaF8yX3N0dWIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKwkJCSAgICAgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IGxlbmd0aDEsCisJCQkgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBsZW5ndGgyLAorCQkJICAgICBpbnQgc3RhcnQsIGludCByYW5nZSwgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywKKwkJCSAgICAgaW50IHN0b3AsIGludCByZXRfbGVuKTsKK3N0YXRpYyBpbnQgcmVfc2VhcmNoX3N0dWIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKwkJCSAgIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGxlbmd0aCwgaW50IHN0YXJ0LAorCQkJICAgaW50IHJhbmdlLCBpbnQgc3RvcCwgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywKKwkJCSAgIGludCByZXRfbGVuKTsKK3N0YXRpYyB1bnNpZ25lZCByZV9jb3B5X3JlZ3MgKHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIHJlZ21hdGNoX3QgKnBtYXRjaCwKKwkJCSAgICAgIGludCBucmVncywgaW50IHJlZ3NfYWxsb2NhdGVkKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IHBydW5lX2ltcG9zc2libGVfbm9kZXMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCk7CitzdGF0aWMgaW50IGNoZWNrX21hdGNoaW5nIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBmbF9sb25nZXN0X21hdGNoLAorCQkJICAgaW50ICpwX21hdGNoX2ZpcnN0KSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBpbnQgY2hlY2tfaGFsdF9zdGF0ZV9jb250ZXh0IChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgICBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwgaW50IGlkeCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgdm9pZCB1cGRhdGVfcmVncyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgcmVnbWF0Y2hfdCAqcG1hdGNoLAorCQkJIHJlZ21hdGNoX3QgKnByZXZfaWR4X21hdGNoLCBpbnQgY3VyX25vZGUsCisJCQkgaW50IGN1cl9pZHgsIGludCBubWF0Y2gpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcHVzaF9mYWlsX3N0YWNrIChzdHJ1Y3QgcmVfZmFpbF9zdGFja190ICpmcywKKwkJCQkgICAgICBpbnQgc3RyX2lkeCwgaW50IGRlc3Rfbm9kZSwgaW50IG5yZWdzLAorCQkJCSAgICAgIHJlZ21hdGNoX3QgKnJlZ3MsCisJCQkJICAgICAgcmVfbm9kZV9zZXQgKmVwc192aWFfbm9kZXMpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3Qgc2V0X3JlZ3MgKGNvbnN0IHJlZ2V4X3QgKnByZWcsCisJCQkgICAgICAgY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJICAgICAgIHNpemVfdCBubWF0Y2gsIHJlZ21hdGNoX3QgKnBtYXRjaCwKKwkJCSAgICAgICBpbnQgZmxfYmFja3RyYWNrKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGZyZWVfZmFpbF9zdGFja19yZXR1cm4gKHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgKmZzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgaW50IHNpZnRfc3RhdGVzX2l0ZXJfbWIgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQlyZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwKKwkJCQlpbnQgbm9kZV9pZHgsIGludCBzdHJfaWR4LCBpbnQgbWF4X3N0cl9pZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCitzdGF0aWMgcmVnX2VycmNvZGVfdCBzaWZ0X3N0YXRlc19iYWNrd2FyZCAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkgICByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF9zaWZ0ZWRfc3RhdGVzIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCSAgcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsIGludCBzdHJfaWR4LAorCQkJCQkgIHJlX25vZGVfc2V0ICpjdXJfZGVzdCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCB1cGRhdGVfY3VyX3NpZnRlZF9zdGF0ZSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkgICAgICByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwKKwkJCQkJICAgICAgaW50IHN0cl9pZHgsCisJCQkJCSAgICAgIHJlX25vZGVfc2V0ICpkZXN0X25vZGVzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGFkZF9lcHNpbG9uX3NyY19ub2RlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkJICAgIHJlX25vZGVfc2V0ICpkZXN0X25vZGVzLAorCQkJCQkgICAgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXMpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGludCBjaGVja19kc3RfbGltaXRzIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkgICAgIHJlX25vZGVfc2V0ICpsaW1pdHMsCisJCQkgICAgIGludCBkc3Rfbm9kZSwgaW50IGRzdF9pZHgsIGludCBzcmNfbm9kZSwKKwkJCSAgICAgaW50IHNyY19pZHgpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGludCBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zXzEgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJaW50IGJvdW5kYXJpZXMsIGludCBzdWJleHBfaWR4LAorCQkJCQlpbnQgZnJvbV9ub2RlLCBpbnQgYmtyZWZfaWR4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBpbnQgY2hlY2tfZHN0X2xpbWl0c19jYWxjX3BvcyAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCSAgICAgIGludCBsaW1pdCwgaW50IHN1YmV4cF9pZHgsCisJCQkJICAgICAgaW50IG5vZGUsIGludCBzdHJfaWR4LAorCQkJCSAgICAgIGludCBia3JlZl9pZHgpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2hlY2tfc3ViZXhwX2xpbWl0cyAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkJICByZV9ub2RlX3NldCAqZGVzdF9ub2RlcywKKwkJCQkJICBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlcywKKwkJCQkJICByZV9ub2RlX3NldCAqbGltaXRzLAorCQkJCQkgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICpia3JlZl9lbnRzLAorCQkJCQkgIGludCBzdHJfaWR4KSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IHNpZnRfc3RhdGVzX2JrcmVmIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCXJlX3NpZnRfY29udGV4dF90ICpzY3R4LAorCQkJCQlpbnQgc3RyX2lkeCwgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXMpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgbWVyZ2Vfc3RhdGVfYXJyYXkgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCXJlX2RmYXN0YXRlX3QgKipkc3QsCisJCQkJCXJlX2RmYXN0YXRlX3QgKipzcmMsIGludCBudW0pCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlX2RmYXN0YXRlX3QgKmZpbmRfcmVjb3Zlcl9zdGF0ZSAocmVnX2VycmNvZGVfdCAqZXJyLAorCQkJCQkgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4KSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICp0cmFuc2l0X3N0YXRlIChyZWdfZXJyY29kZV90ICplcnIsCisJCQkJICAgICByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgICByZV9kZmFzdGF0ZV90ICpzdGF0ZSkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqbWVyZ2Vfc3RhdGVfd2l0aF9sb2cgKHJlZ19lcnJjb2RlX3QgKmVyciwKKwkJCQkJICAgIHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJICAgIHJlX2RmYXN0YXRlX3QgKm5leHRfc3RhdGUpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2hlY2tfc3ViZXhwX21hdGNoaW5nX3RvcCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkJcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywKKwkJCQkJCWludCBzdHJfaWR4KSBpbnRlcm5hbF9mdW5jdGlvbjsKKyNpZiAwCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqdHJhbnNpdF9zdGF0ZV9zYiAocmVnX2VycmNvZGVfdCAqZXJyLAorCQkJCQlyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCXJlX2RmYXN0YXRlX3QgKnBzdGF0ZSkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisjZW5kaWYKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIHJlZ19lcnJjb2RlX3QgdHJhbnNpdF9zdGF0ZV9tYiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCSAgICAgICByZV9kZmFzdGF0ZV90ICpwc3RhdGUpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCitzdGF0aWMgcmVnX2VycmNvZGVfdCB0cmFuc2l0X3N0YXRlX2JrcmVmIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGdldF9zdWJleHAgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkgaW50IGJrcmVmX25vZGUsIGludCBia3JlZl9zdHJfaWR4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGdldF9zdWJleHBfc3ViIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgICBjb25zdCByZV9zdWJfbWF0Y2hfdG9wX3QgKnN1Yl90b3AsCisJCQkJICAgICByZV9zdWJfbWF0Y2hfbGFzdF90ICpzdWJfbGFzdCwKKwkJCQkgICAgIGludCBia3JlZl9ub2RlLCBpbnQgYmtyZWZfc3RyKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBpbnQgZmluZF9zdWJleHBfbm9kZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAorCQkJICAgICBpbnQgc3ViZXhwX2lkeCwgaW50IHR5cGUpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2hlY2tfYXJyaXZhbCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCSAgICBzdGF0ZV9hcnJheV90ICpwYXRoLCBpbnQgdG9wX25vZGUsCisJCQkJICAgIGludCB0b3Bfc3RyLCBpbnQgbGFzdF9ub2RlLCBpbnQgbGFzdF9zdHIsCisJCQkJICAgIGludCB0eXBlKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNoZWNrX2Fycml2YWxfYWRkX25leHRfbm9kZXMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJCSAgIGludCBzdHJfaWR4LAorCQkJCQkJICAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywKKwkJCQkJCSAgIHJlX25vZGVfc2V0ICpuZXh0X25vZGVzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNoZWNrX2Fycml2YWxfZXhwYW5kX2VjbCAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkJICAgICAgIHJlX25vZGVfc2V0ICpjdXJfbm9kZXMsCisJCQkJCSAgICAgICBpbnQgZXhfc3ViZXhwLCBpbnQgdHlwZSkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjaGVja19hcnJpdmFsX2V4cGFuZF9lY2xfc3ViIChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJCQkJICAgcmVfbm9kZV9zZXQgKmRzdF9ub2RlcywKKwkJCQkJCSAgIGludCB0YXJnZXQsIGludCBleF9zdWJleHAsCisJCQkJCQkgICBpbnQgdHlwZSkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBleHBhbmRfYmtyZWZfY2FjaGUgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJIHJlX25vZGVfc2V0ICpjdXJfbm9kZXMsIGludCBjdXJfc3RyLAorCQkJCQkgaW50IHN1YmV4cF9udW0sIGludCB0eXBlKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBpbnQgYnVpbGRfdHJ0YWJsZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCSAgcmVfZGZhc3RhdGVfdCAqc3RhdGUpIGludGVybmFsX2Z1bmN0aW9uOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgaW50IGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisJCQkJICAgIGNvbnN0IHJlX3N0cmluZ190ICppbnB1dCwgaW50IGlkeCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisjIGlmZGVmIF9MSUJDCitzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChjb25zdCB1bnNpZ25lZCBjaGFyICptYnMsCisJCQkJCQkgICBzaXplX3QgbmFtZV9sZW4pCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworIyBlbmRpZiAvKiBfTElCQyAqLworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCitzdGF0aWMgaW50IGdyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzIChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJCSAgICAgICBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwKKwkJCQkgICAgICAgcmVfbm9kZV9zZXQgKnN0YXRlc19ub2RlLAorCQkJCSAgICAgICBiaXRzZXRfdCAqc3RhdGVzX2NoKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBpbnQgY2hlY2tfbm9kZV9hY2NlcHQgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCSAgICAgIGNvbnN0IHJlX3Rva2VuX3QgKm5vZGUsIGludCBpZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgZXh0ZW5kX2J1ZmZlcnMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisMCisvKiBFbnRyeSBwb2ludCBmb3IgUE9TSVggY29kZS4gICovCisKKy8qIHJlZ2V4ZWMgc2VhcmNoZXMgZm9yIGEgZ2l2ZW4gcGF0dGVybiwgc3BlY2lmaWVkIGJ5IFBSRUcsIGluIHRoZQorICAgc3RyaW5nIFNUUklORy4KKworICAgSWYgTk1BVENIIGlzIHplcm8gb3IgUkVHX05PU1VCIHdhcyBzZXQgaW4gdGhlIGNmbGFncyBhcmd1bWVudCB0bworICAgYHJlZ2NvbXAnLCB3ZSBpZ25vcmUgUE1BVENILiAgT3RoZXJ3aXNlLCB3ZSBhc3N1bWUgUE1BVENIIGhhcyBhdAorICAgbGVhc3QgTk1BVENIIGVsZW1lbnRzLCBhbmQgd2Ugc2V0IHRoZW0gdG8gdGhlIG9mZnNldHMgb2YgdGhlCisgICBjb3JyZXNwb25kaW5nIG1hdGNoZWQgc3Vic3RyaW5ncy4KKworICAgRUZMQUdTIHNwZWNpZmllcyBgZXhlY3V0aW9uIGZsYWdzJyB3aGljaCBhZmZlY3QgbWF0Y2hpbmc6IGlmCisgICBSRUdfTk9UQk9MIGlzIHNldCwgdGhlbiBeIGRvZXMgbm90IG1hdGNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICBzdHJpbmc7IGlmIFJFR19OT1RFT0wgaXMgc2V0LCB0aGVuICQgZG9lcyBub3QgbWF0Y2ggYXQgdGhlIGVuZC4KKworICAgV2UgcmV0dXJuIDAgaWYgd2UgZmluZCBhIG1hdGNoIGFuZCBSRUdfTk9NQVRDSCBpZiBub3QuICAqLworCitpbnQKK3JlZ2V4ZWMgKAorCWNvbnN0IHJlZ2V4X3QgKl9fcmVzdHJpY3QgcHJlZywKKwljb25zdCBjaGFyICpfX3Jlc3RyaWN0IHN0cmluZywKKwlzaXplX3Qgbm1hdGNoLAorCXJlZ21hdGNoX3QgcG1hdGNoW10sCisJaW50IGVmbGFncykKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBzdGFydCwgbGVuZ3RoOworCisgIGlmIChlZmxhZ3MgJiB+KFJFR19OT1RCT0wgfCBSRUdfTk9URU9MIHwgUkVHX1NUQVJURU5EKSkKKyAgICByZXR1cm4gUkVHX0JBRFBBVDsKKworICBpZiAoZWZsYWdzICYgUkVHX1NUQVJURU5EKQorICAgIHsKKyAgICAgIHN0YXJ0ID0gcG1hdGNoWzBdLnJtX3NvOworICAgICAgbGVuZ3RoID0gcG1hdGNoWzBdLnJtX2VvOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHN0YXJ0ID0gMDsKKyAgICAgIGxlbmd0aCA9IHN0cmxlbiAoc3RyaW5nKTsKKyAgICB9CisKKyAgX19saWJjX2xvY2tfbG9jayAoZGZhLT5sb2NrKTsKKyAgaWYgKHByZWctPm5vX3N1YikKKyAgICBlcnIgPSByZV9zZWFyY2hfaW50ZXJuYWwgKHByZWcsIHN0cmluZywgbGVuZ3RoLCBzdGFydCwgbGVuZ3RoIC0gc3RhcnQsCisJCQkgICAgICBsZW5ndGgsIDAsIE5VTEwsIGVmbGFncyk7CisgIGVsc2UKKyAgICBlcnIgPSByZV9zZWFyY2hfaW50ZXJuYWwgKHByZWcsIHN0cmluZywgbGVuZ3RoLCBzdGFydCwgbGVuZ3RoIC0gc3RhcnQsCisJCQkgICAgICBsZW5ndGgsIG5tYXRjaCwgcG1hdGNoLCBlZmxhZ3MpOworICBfX2xpYmNfbG9ja191bmxvY2sgKGRmYS0+bG9jayk7CisgIHJldHVybiBlcnIgIT0gUkVHX05PRVJST1I7Cit9CisKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KK3ZlcnNpb25lZF9zeW1ib2wgKGxpYmMsIF9fcmVnZXhlYywgcmVnZXhlYywgR0xJQkNfMl8zXzQpOworCisjIGlmIFNITElCX0NPTVBBVCAobGliYywgR0xJQkNfMl8wLCBHTElCQ18yXzNfNCkKK19fdHlwZW9mX18gKF9fcmVnZXhlYykgX19jb21wYXRfcmVnZXhlYzsKKworaW50CithdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorX19jb21wYXRfcmVnZXhlYyAoY29uc3QgcmVnZXhfdCAqX19yZXN0cmljdCBwcmVnLAorCQkgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3Qgc3RyaW5nLCBzaXplX3Qgbm1hdGNoLAorCQkgIHJlZ21hdGNoX3QgcG1hdGNoW10sIGludCBlZmxhZ3MpCit7CisgIHJldHVybiByZWdleGVjIChwcmVnLCBzdHJpbmcsIG5tYXRjaCwgcG1hdGNoLAorCQkgIGVmbGFncyAmIChSRUdfTk9UQk9MIHwgUkVHX05PVEVPTCkpOworfQorY29tcGF0X3N5bWJvbCAobGliYywgX19jb21wYXRfcmVnZXhlYywgcmVnZXhlYywgR0xJQkNfMl8wKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBFbnRyeSBwb2ludHMgZm9yIEdOVSBjb2RlLiAgKi8KKworLyogcmVfbWF0Y2gsIHJlX3NlYXJjaCwgcmVfbWF0Y2hfMiwgcmVfc2VhcmNoXzIKKworICAgVGhlIGZvcm1lciB0d28gZnVuY3Rpb25zIG9wZXJhdGUgb24gU1RSSU5HIHdpdGggbGVuZ3RoIExFTkdUSCwKKyAgIHdoaWxlIHRoZSBsYXRlciB0d28gb3BlcmF0ZSBvbiBjb25jYXRlbmF0aW9uIG9mIFNUUklORzEgYW5kIFNUUklORzIKKyAgIHdpdGggbGVuZ3RocyBMRU5HVEgxIGFuZCBMRU5HVEgyLCByZXNwZWN0aXZlbHkuCisKKyAgIHJlX21hdGNoKCkgbWF0Y2hlcyB0aGUgY29tcGlsZWQgcGF0dGVybiBpbiBCVUZQIGFnYWluc3QgdGhlIHN0cmluZywKKyAgIHN0YXJ0aW5nIGF0IGluZGV4IFNUQVJULgorCisgICByZV9zZWFyY2goKSBmaXJzdCB0cmllcyBtYXRjaGluZyBhdCBpbmRleCBTVEFSVCwgdGhlbiBpdCB0cmllcyB0byBtYXRjaAorICAgc3RhcnRpbmcgZnJvbSBpbmRleCBTVEFSVCArIDEsIGFuZCBzbyBvbi4gIFRoZSBsYXN0IHN0YXJ0IHBvc2l0aW9uIHRyaWVkCisgICBpcyBTVEFSVCArIFJBTkdFLiAgKFRodXMgUkFOR0UgPSAwIGZvcmNlcyByZV9zZWFyY2ggdG8gb3BlcmF0ZSB0aGUgc2FtZQorICAgd2F5IGFzIHJlX21hdGNoKCkuKQorCisgICBUaGUgcGFyYW1ldGVyIFNUT1Agb2YgcmVfe21hdGNoLHNlYXJjaH1fMiBzcGVjaWZpZXMgdGhhdCBubyBtYXRjaCBleGNlZWRpbmcKKyAgIHRoZSBmaXJzdCBTVE9QIGNoYXJhY3RlcnMgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZ3Mgc2hvdWxkIGJlCisgICBjb25jZXJuZWQuCisKKyAgIElmIFJFR1MgaXMgbm90IE5VTEwsIGFuZCBCVUZQLT5ub19zdWIgaXMgbm90IHNldCwgdGhlIG9mZnNldHMgb2YgdGhlIG1hdGNoCisgICBhbmQgYWxsIGdyb3VwcyBpcyBzdHJvZWQgaW4gUkVHUy4gIChGb3IgdGhlICJfMiIgdmFyaWFudHMsIHRoZSBvZmZzZXRzIGFyZQorICAgY29tcHV0ZWQgcmVsYXRpdmUgdG8gdGhlIGNvbmNhdGVuYXRpb24sIG5vdCByZWxhdGl2ZSB0byB0aGUgaW5kaXZpZHVhbAorICAgc3RyaW5ncy4pCisKKyAgIE9uIHN1Y2Nlc3MsIHJlX21hdGNoKiBmdW5jdGlvbnMgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoLCByZV9zZWFyY2gqCisgICByZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2guICBSZXR1cm4gdmFsdWUgLTEgbWVhbnMgbm8KKyAgIG1hdGNoIHdhcyBmb3VuZCBhbmQgLTIgaW5kaWNhdGVzIGFuIGludGVybmFsIGVycm9yLiAgKi8KKworaW50CityZV9tYXRjaCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorCSAgY29uc3QgY2hhciAqc3RyaW5nLAorCSAgaW50IGxlbmd0aCwKKwkgIGludCBzdGFydCwKKwkgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MpCit7CisgIHJldHVybiByZV9zZWFyY2hfc3R1YiAoYnVmcCwgc3RyaW5nLCBsZW5ndGgsIHN0YXJ0LCAwLCBsZW5ndGgsIHJlZ3MsIDEpOworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlX21hdGNoLCByZV9tYXRjaCkKKyNlbmRpZgorCitpbnQKK3JlX3NlYXJjaCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorCSAgIGNvbnN0IGNoYXIgKnN0cmluZywKKwkgICBpbnQgbGVuZ3RoLCBpbnQgc3RhcnQsIGludCByYW5nZSwKKwkgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzKQoreworICByZXR1cm4gcmVfc2VhcmNoX3N0dWIgKGJ1ZnAsIHN0cmluZywgbGVuZ3RoLCBzdGFydCwgcmFuZ2UsIGxlbmd0aCwgcmVncywgMCk7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfc2VhcmNoLCByZV9zZWFyY2gpCisjZW5kaWYKKworaW50CityZV9tYXRjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJICAgIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBsZW5ndGgxLAorCSAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgbGVuZ3RoMiwgaW50IHN0YXJ0LAorCSAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgc3RvcCkKK3sKKyAgcmV0dXJuIHJlX3NlYXJjaF8yX3N0dWIgKGJ1ZnAsIHN0cmluZzEsIGxlbmd0aDEsIHN0cmluZzIsIGxlbmd0aDIsCisJCQkgICBzdGFydCwgMCwgcmVncywgc3RvcCwgMSk7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfbWF0Y2hfMiwgcmVfbWF0Y2hfMikKKyNlbmRpZgorCitpbnQKK3JlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJICAgICBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgbGVuZ3RoMSwKKwkgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBsZW5ndGgyLCBpbnQgc3RhcnQsCisJICAgICBpbnQgcmFuZ2UsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsICBpbnQgc3RvcCkKK3sKKyAgcmV0dXJuIHJlX3NlYXJjaF8yX3N0dWIgKGJ1ZnAsIHN0cmluZzEsIGxlbmd0aDEsIHN0cmluZzIsIGxlbmd0aDIsCisJCQkgICBzdGFydCwgcmFuZ2UsIHJlZ3MsIHN0b3AsIDApOworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlX3NlYXJjaF8yLCByZV9zZWFyY2hfMikKKyNlbmRpZgorCitzdGF0aWMgaW50CityZV9zZWFyY2hfMl9zdHViIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJCSAgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IGxlbmd0aDEsCisJCSAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IGxlbmd0aDIsIGludCBzdGFydCwKKwkJICBpbnQgcmFuZ2UsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisJCSAgaW50IHN0b3AsIGludCByZXRfbGVuKQoreworICBjb25zdCBjaGFyICpzdHI7CisgIGludCBydmFsOworICBpbnQgbGVuID0gbGVuZ3RoMSArIGxlbmd0aDI7CisgIGludCBmcmVlX3N0ciA9IDA7CisKKyAgaWYgKEJFIChsZW5ndGgxIDwgMCB8fCBsZW5ndGgyIDwgMCB8fCBzdG9wIDwgMCwgMCkpCisgICAgcmV0dXJuIC0yOworCisgIC8qIENvbmNhdGVuYXRlIHRoZSBzdHJpbmdzLiAgKi8KKyAgaWYgKGxlbmd0aDIgPiAwKQorICAgIGlmIChsZW5ndGgxID4gMCkKKyAgICAgIHsKKwljaGFyICpzID0gcmVfbWFsbG9jIChjaGFyLCBsZW4pOworCisJaWYgKEJFIChzID09IE5VTEwsIDApKQorCSAgcmV0dXJuIC0yOworCW1lbWNweSAocywgc3RyaW5nMSwgbGVuZ3RoMSk7CisJbWVtY3B5IChzICsgbGVuZ3RoMSwgc3RyaW5nMiwgbGVuZ3RoMik7CisJc3RyID0gczsKKwlmcmVlX3N0ciA9IDE7CisgICAgICB9CisgICAgZWxzZQorICAgICAgc3RyID0gc3RyaW5nMjsKKyAgZWxzZQorICAgIHN0ciA9IHN0cmluZzE7CisKKyAgcnZhbCA9IHJlX3NlYXJjaF9zdHViIChidWZwLCBzdHIsIGxlbiwgc3RhcnQsIHJhbmdlLCBzdG9wLCByZWdzLCByZXRfbGVuKTsKKyAgaWYgKGZyZWVfc3RyKQorICAgIHJlX2ZyZWUgKChjaGFyICopIHN0cik7CisgIHJldHVybiBydmFsOworfQorCisvKiBUaGUgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgdGhvc2Ugb2YgcmVfc2VhcmNoLgorICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzOgorICAgSWYgUkVUX0xFTiBpcyBub256ZXJvIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoIGlzIHJldHVybmVkIChyZV9tYXRjaCBzdHlsZSk7CisgICBvdGhlcndpc2UgdGhlIHBvc2l0aW9uIG9mIHRoZSBtYXRjaCBpcyByZXR1cm5lZC4gICovCisKK3N0YXRpYyBpbnQKK3JlX3NlYXJjaF9zdHViIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJCWNvbnN0IGNoYXIgKnN0cmluZywgaW50IGxlbmd0aCwgaW50IHN0YXJ0LAorCQlpbnQgcmFuZ2UsIGludCBzdG9wLAorCQlzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgcmV0X2xlbikKK3sKKyAgcmVnX2VycmNvZGVfdCByZXN1bHQ7CisgIHJlZ21hdGNoX3QgKnBtYXRjaDsKKyAgaW50IG5yZWdzLCBydmFsOworICBpbnQgZWZsYWdzID0gMDsKKworICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlLiAgKi8KKyAgaWYgKEJFIChzdGFydCA8IDAgfHwgc3RhcnQgPiBsZW5ndGgsIDApKQorICAgIHJldHVybiAtMTsKKyAgaWYgKEJFIChzdGFydCArIHJhbmdlID4gbGVuZ3RoLCAwKSkKKyAgICByYW5nZSA9IGxlbmd0aCAtIHN0YXJ0OworICBlbHNlIGlmIChCRSAoc3RhcnQgKyByYW5nZSA8IDAsIDApKQorICAgIHJhbmdlID0gLXN0YXJ0OworCisgIF9fbGliY19sb2NrX2xvY2sgKGRmYS0+bG9jayk7CisKKyAgZWZsYWdzIHw9IChidWZwLT5ub3RfYm9sKSA/IFJFR19OT1RCT0wgOiAwOworICBlZmxhZ3MgfD0gKGJ1ZnAtPm5vdF9lb2wpID8gUkVHX05PVEVPTCA6IDA7CisKKyAgLyogQ29tcGlsZSBmYXN0bWFwIGlmIHdlIGhhdmVuJ3QgeWV0LiAgKi8KKyAgaWYgKHJhbmdlID4gMCAmJiBidWZwLT5mYXN0bWFwICE9IE5VTEwgJiYgIWJ1ZnAtPmZhc3RtYXBfYWNjdXJhdGUpCisgICAgcmVfY29tcGlsZV9mYXN0bWFwIChidWZwKTsKKworICBpZiAoQkUgKGJ1ZnAtPm5vX3N1YiwgMCkpCisgICAgcmVncyA9IE5VTEw7CisKKyAgLyogV2UgbmVlZCBhdCBsZWFzdCAxIHJlZ2lzdGVyLiAgKi8KKyAgaWYgKHJlZ3MgPT0gTlVMTCkKKyAgICBucmVncyA9IDE7CisgIGVsc2UgaWYgKEJFIChidWZwLT5yZWdzX2FsbG9jYXRlZCA9PSBSRUdTX0ZJWEVEICYmCisJICAgICAgIHJlZ3MtPm51bV9yZWdzIDwgYnVmcC0+cmVfbnN1YiArIDEsIDApKQorICAgIHsKKyAgICAgIG5yZWdzID0gcmVncy0+bnVtX3JlZ3M7CisgICAgICBpZiAoQkUgKG5yZWdzIDwgMSwgMCkpCisJeworCSAgLyogTm90aGluZyBjYW4gYmUgY29waWVkIHRvIHJlZ3MuICAqLworCSAgcmVncyA9IE5VTEw7CisJICBucmVncyA9IDE7CisJfQorICAgIH0KKyAgZWxzZQorICAgIG5yZWdzID0gYnVmcC0+cmVfbnN1YiArIDE7CisgIHBtYXRjaCA9IHJlX21hbGxvYyAocmVnbWF0Y2hfdCwgbnJlZ3MpOworICBpZiAoQkUgKHBtYXRjaCA9PSBOVUxMLCAwKSkKKyAgICB7CisgICAgICBydmFsID0gLTI7CisgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgcmVzdWx0ID0gcmVfc2VhcmNoX2ludGVybmFsIChidWZwLCBzdHJpbmcsIGxlbmd0aCwgc3RhcnQsIHJhbmdlLCBzdG9wLAorCQkJICAgICAgIG5yZWdzLCBwbWF0Y2gsIGVmbGFncyk7CisKKyAgcnZhbCA9IDA7CisKKyAgLyogSSBob3BlIHdlIG5lZWRuJ3QgZmlsbCB0aGVpciByZWdzIHdpdGggLTEncyB3aGVuIG5vIG1hdGNoIHdhcyBmb3VuZC4gICovCisgIGlmIChyZXN1bHQgIT0gUkVHX05PRVJST1IpCisgICAgcnZhbCA9IC0xOworICBlbHNlIGlmIChyZWdzICE9IE5VTEwpCisgICAgeworICAgICAgLyogSWYgY2FsbGVyIHdhbnRzIHJlZ2lzdGVyIGNvbnRlbnRzIGRhdGEgYmFjaywgY29weSB0aGVtLiAgKi8KKyAgICAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gcmVfY29weV9yZWdzIChyZWdzLCBwbWF0Y2gsIG5yZWdzLAorCQkJCQkgICBidWZwLT5yZWdzX2FsbG9jYXRlZCk7CisgICAgICBpZiAoQkUgKGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID09IFJFR1NfVU5BTExPQ0FURUQsIDApKQorCXJ2YWwgPSAtMjsKKyAgICB9CisKKyAgaWYgKEJFIChydmFsID09IDAsIDEpKQorICAgIHsKKyAgICAgIGlmIChyZXRfbGVuKQorCXsKKwkgIGFzc2VydCAocG1hdGNoWzBdLnJtX3NvID09IHN0YXJ0KTsKKwkgIHJ2YWwgPSBwbWF0Y2hbMF0ucm1fZW8gLSBzdGFydDsKKwl9CisgICAgICBlbHNlCisJcnZhbCA9IHBtYXRjaFswXS5ybV9zbzsKKyAgICB9CisgIHJlX2ZyZWUgKHBtYXRjaCk7Cisgb3V0OgorICBfX2xpYmNfbG9ja191bmxvY2sgKGRmYS0+bG9jayk7CisgIHJldHVybiBydmFsOworfQorCitzdGF0aWMgdW5zaWduZWQKK3JlX2NvcHlfcmVncyAoc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywKKwkgICAgICByZWdtYXRjaF90ICpwbWF0Y2gsCisJICAgICAgaW50IG5yZWdzLCBpbnQgcmVnc19hbGxvY2F0ZWQpCit7CisgIGludCBydmFsID0gUkVHU19SRUFMTE9DQVRFOworICBpbnQgaTsKKyAgaW50IG5lZWRfcmVncyA9IG5yZWdzICsgMTsKKyAgLyogV2UgbmVlZCBvbmUgZXh0cmEgZWxlbWVudCBiZXlvbmQgYG51bV9yZWdzJyBmb3IgdGhlIGAtMScgbWFya2VyIEdOVSBjb2RlCisgICAgIHVzZXMuICAqLworCisgIC8qIEhhdmUgdGhlIHJlZ2lzdGVyIGRhdGEgYXJyYXlzIGJlZW4gYWxsb2NhdGVkPyAgKi8KKyAgaWYgKHJlZ3NfYWxsb2NhdGVkID09IFJFR1NfVU5BTExPQ0FURUQpCisgICAgeyAvKiBOby4gIFNvIGFsbG9jYXRlIHRoZW0gd2l0aCBtYWxsb2MuICAqLworICAgICAgcmVncy0+c3RhcnQgPSByZV9tYWxsb2MgKHJlZ29mZl90LCBuZWVkX3JlZ3MpOworICAgICAgaWYgKEJFIChyZWdzLT5zdGFydCA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHU19VTkFMTE9DQVRFRDsKKyAgICAgIHJlZ3MtPmVuZCA9IHJlX21hbGxvYyAocmVnb2ZmX3QsIG5lZWRfcmVncyk7CisgICAgICBpZiAoQkUgKHJlZ3MtPmVuZCA9PSBOVUxMLCAwKSkKKwl7CisJICByZV9mcmVlIChyZWdzLT5zdGFydCk7CisJICByZXR1cm4gUkVHU19VTkFMTE9DQVRFRDsKKwl9CisgICAgICByZWdzLT5udW1fcmVncyA9IG5lZWRfcmVnczsKKyAgICB9CisgIGVsc2UgaWYgKHJlZ3NfYWxsb2NhdGVkID09IFJFR1NfUkVBTExPQ0FURSkKKyAgICB7IC8qIFllcy4gIElmIHdlIG5lZWQgbW9yZSBlbGVtZW50cyB0aGFuIHdlcmUgYWxyZWFkeQorCSBhbGxvY2F0ZWQsIHJlYWxsb2NhdGUgdGhlbS4gIElmIHdlIG5lZWQgZmV3ZXIsIGp1c3QKKwkgbGVhdmUgaXQgYWxvbmUuICAqLworICAgICAgaWYgKEJFIChuZWVkX3JlZ3MgPiByZWdzLT5udW1fcmVncywgMCkpCisJeworCSAgcmVnb2ZmX3QgKm5ld19zdGFydCA9IHJlX3JlYWxsb2MgKHJlZ3MtPnN0YXJ0LCByZWdvZmZfdCwgbmVlZF9yZWdzKTsKKwkgIHJlZ29mZl90ICpuZXdfZW5kOworCSAgaWYgKEJFIChuZXdfc3RhcnQgPT0gTlVMTCwgMCkpCisJICAgIHJldHVybiBSRUdTX1VOQUxMT0NBVEVEOworCSAgbmV3X2VuZCA9IHJlX3JlYWxsb2MgKHJlZ3MtPmVuZCwgcmVnb2ZmX3QsIG5lZWRfcmVncyk7CisJICBpZiAoQkUgKG5ld19lbmQgPT0gTlVMTCwgMCkpCisJICAgIHsKKwkgICAgICByZV9mcmVlIChuZXdfc3RhcnQpOworCSAgICAgIHJldHVybiBSRUdTX1VOQUxMT0NBVEVEOworCSAgICB9CisJICByZWdzLT5zdGFydCA9IG5ld19zdGFydDsKKwkgIHJlZ3MtPmVuZCA9IG5ld19lbmQ7CisJICByZWdzLT5udW1fcmVncyA9IG5lZWRfcmVnczsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgYXNzZXJ0IChyZWdzX2FsbG9jYXRlZCA9PSBSRUdTX0ZJWEVEKTsKKyAgICAgIC8qIFRoaXMgZnVuY3Rpb24gbWF5IG5vdCBiZSBjYWxsZWQgd2l0aCBSRUdTX0ZJWEVEIGFuZCBucmVncyB0b28gYmlnLiAgKi8KKyAgICAgIGFzc2VydCAocmVncy0+bnVtX3JlZ3MgPj0gbnJlZ3MpOworICAgICAgcnZhbCA9IFJFR1NfRklYRUQ7CisgICAgfQorCisgIC8qIENvcHkgdGhlIHJlZ3MuICAqLworICBmb3IgKGkgPSAwOyBpIDwgbnJlZ3M7ICsraSkKKyAgICB7CisgICAgICByZWdzLT5zdGFydFtpXSA9IHBtYXRjaFtpXS5ybV9zbzsKKyAgICAgIHJlZ3MtPmVuZFtpXSA9IHBtYXRjaFtpXS5ybV9lbzsKKyAgICB9CisgIGZvciAoIDsgaSA8IHJlZ3MtPm51bV9yZWdzOyArK2kpCisgICAgcmVncy0+c3RhcnRbaV0gPSByZWdzLT5lbmRbaV0gPSAtMTsKKworICByZXR1cm4gcnZhbDsKK30KKworLyogU2V0IFJFR1MgdG8gaG9sZCBOVU1fUkVHUyByZWdpc3RlcnMsIHN0b3JpbmcgdGhlbSBpbiBTVEFSVFMgYW5kCisgICBFTkRTLiAgU3Vic2VxdWVudCBtYXRjaGVzIHVzaW5nIFBBVFRFUk5fQlVGRkVSIGFuZCBSRUdTIHdpbGwgdXNlCisgICB0aGlzIG1lbW9yeSBmb3IgcmVjb3JkaW5nIHJlZ2lzdGVyIGluZm9ybWF0aW9uLiAgU1RBUlRTIGFuZCBFTkRTCisgICBtdXN0IGJlIGFsbG9jYXRlZCB1c2luZyB0aGUgbWFsbG9jIGxpYnJhcnkgcm91dGluZSwgYW5kIG11c3QgZWFjaAorICAgYmUgYXQgbGVhc3QgTlVNX1JFR1MgKiBzaXplb2YgKHJlZ29mZl90KSBieXRlcyBsb25nLgorCisgICBJZiBOVU1fUkVHUyA9PSAwLCB0aGVuIHN1YnNlcXVlbnQgbWF0Y2hlcyBzaG91bGQgYWxsb2NhdGUgdGhlaXIgb3duCisgICByZWdpc3RlciBkYXRhLgorCisgICBVbmxlc3MgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBmaXJzdCBzZWFyY2ggb3IgbWF0Y2ggdXNpbmcKKyAgIFBBVFRFUk5fQlVGRkVSIHdpbGwgYWxsb2NhdGUgaXRzIG93biByZWdpc3RlciBkYXRhLCB3aXRob3V0CisgICBmcmVlaW5nIHRoZSBvbGQgZGF0YS4gICovCisKK3ZvaWQKK3JlX3NldF9yZWdpc3RlcnMgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKwkJICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorCQkgIHVuc2lnbmVkIG51bV9yZWdzLAorCQkgIHJlZ29mZl90ICpzdGFydHMsCisJCSAgcmVnb2ZmX3QgKmVuZHMpCit7CisgIGlmIChudW1fcmVncykKKyAgICB7CisgICAgICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfUkVBTExPQ0FURTsKKyAgICAgIHJlZ3MtPm51bV9yZWdzID0gbnVtX3JlZ3M7CisgICAgICByZWdzLT5zdGFydCA9IHN0YXJ0czsKKyAgICAgIHJlZ3MtPmVuZCA9IGVuZHM7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSBSRUdTX1VOQUxMT0NBVEVEOworICAgICAgcmVncy0+bnVtX3JlZ3MgPSAwOworICAgICAgcmVncy0+c3RhcnQgPSByZWdzLT5lbmQgPSAocmVnb2ZmX3QgKikgMDsKKyAgICB9Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfc2V0X3JlZ2lzdGVycywgcmVfc2V0X3JlZ2lzdGVycykKKyNlbmRpZgorDAorLyogRW50cnkgcG9pbnRzIGNvbXBhdGlibGUgd2l0aCA0LjIgQlNEIHJlZ2V4IGxpYnJhcnkuICBXZSBkb24ndCBkZWZpbmUKKyAgIHRoZW0gdW5sZXNzIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQuICAqLworCisjaWYgZGVmaW5lZCBfUkVHRVhfUkVfQ09NUCB8fCBkZWZpbmVkIF9MSUJDCitpbnQKKyMgaWZkZWYgX0xJQkMKK3dlYWtfZnVuY3Rpb24KKyMgZW5kaWYKK3JlX2V4ZWMgKHMpCisgICAgIGNvbnN0IGNoYXIgKnM7Cit7CisgIHJldHVybiAwID09IHJlZ2V4ZWMgKCZyZV9jb21wX2J1ZiwgcywgMCwgTlVMTCwgMCk7Cit9CisjZW5kaWYgLyogX1JFR0VYX1JFX0NPTVAgKi8KKwwKKy8qIEludGVybmFsIGVudHJ5IHBvaW50LiAgKi8KKworLyogU2VhcmNoZXMgZm9yIGEgY29tcGlsZWQgcGF0dGVybiBQUkVHIGluIHRoZSBzdHJpbmcgU1RSSU5HLCB3aG9zZQorICAgbGVuZ3RoIGlzIExFTkdUSC4gIE5NQVRDSCwgUE1BVENILCBhbmQgRUZMQUdTIGhhdmUgdGhlIHNhbWUKKyAgIG1pbmdpbmdzIHdpdGggcmVnZXhlYy4gIFNUQVJULCBhbmQgUkFOR0UgaGF2ZSB0aGUgc2FtZSBtZWFuaW5ncworICAgd2l0aCByZV9zZWFyY2guCisgICBSZXR1cm4gUkVHX05PRVJST1IgaWYgd2UgZmluZCBhIG1hdGNoLCBhbmQgUkVHX05PTUFUQ0ggaWYgbm90LAorICAgb3RoZXJ3aXNlIHJldHVybiB0aGUgZXJyb3IgY29kZS4KKyAgIE5vdGU6IFdlIGFzc3VtZSBmcm9udCBlbmQgZnVuY3Rpb25zIGFscmVhZHkgY2hlY2sgcmFuZ2VzLgorICAgKFNUQVJUICsgUkFOR0UgPj0gMCAmJiBTVEFSVCArIFJBTkdFIDw9IExFTkdUSCkgICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CityZV9zZWFyY2hfaW50ZXJuYWwgKGNvbnN0IHJlZ2V4X3QgKnByZWcsCisJCSAgICBjb25zdCBjaGFyICpzdHJpbmcsCisJCSAgICBpbnQgbGVuZ3RoLCBpbnQgc3RhcnQsIGludCByYW5nZSwgaW50IHN0b3AsCisJCSAgICBzaXplX3Qgbm1hdGNoLCByZWdtYXRjaF90IHBtYXRjaFtdLAorCQkgICAgaW50IGVmbGFncykKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGNvbnN0IHJlX2RmYV90ICpkZmEgPSAoY29uc3QgcmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBpbnQgbGVmdF9saW0sIHJpZ2h0X2xpbSwgaW5jcjsKKyAgaW50IGZsX2xvbmdlc3RfbWF0Y2gsIG1hdGNoX2ZpcnN0LCBtYXRjaF9raW5kLCBtYXRjaF9sYXN0ID0gLTE7CisgIGludCBleHRyYV9ubWF0Y2g7CisgIGludCBzYiwgY2g7CisjaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKyAgcmVfbWF0Y2hfY29udGV4dF90IG1jdHggPSB7IC5kZmEgPSBkZmEgfTsKKyNlbHNlCisgIHJlX21hdGNoX2NvbnRleHRfdCBtY3R4OworI2VuZGlmCisgIGNoYXIgKmZhc3RtYXAgPSAocHJlZy0+ZmFzdG1hcCAhPSBOVUxMICYmIHByZWctPmZhc3RtYXBfYWNjdXJhdGUKKwkJICAgJiYgcmFuZ2UgJiYgIXByZWctPmNhbl9iZV9udWxsKSA/IHByZWctPmZhc3RtYXAgOiBOVUxMOworICBSRV9UUkFOU0xBVEVfVFlQRSB0ID0gcHJlZy0+dHJhbnNsYXRlOworCisjaWYgIShkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKSkKKyAgbWVtc2V0ICgmbWN0eCwgJ1wwJywgc2l6ZW9mIChyZV9tYXRjaF9jb250ZXh0X3QpKTsKKyAgbWN0eC5kZmEgPSBkZmE7CisjZW5kaWYKKworICBleHRyYV9ubWF0Y2ggPSAobm1hdGNoID4gcHJlZy0+cmVfbnN1YikgPyBubWF0Y2ggLSAocHJlZy0+cmVfbnN1YiArIDEpIDogMDsKKyAgbm1hdGNoIC09IGV4dHJhX25tYXRjaDsKKworICAvKiBDaGVjayBpZiB0aGUgREZBIGhhdmVuJ3QgYmVlbiBjb21waWxlZC4gICovCisgIGlmIChCRSAocHJlZy0+dXNlZCA9PSAwIHx8IGRmYS0+aW5pdF9zdGF0ZSA9PSBOVUxMCisJICB8fCBkZmEtPmluaXRfc3RhdGVfd29yZCA9PSBOVUxMIHx8IGRmYS0+aW5pdF9zdGF0ZV9ubCA9PSBOVUxMCisJICB8fCBkZmEtPmluaXRfc3RhdGVfYmVnYnVmID09IE5VTEwsIDApKQorICAgIHJldHVybiBSRUdfTk9NQVRDSDsKKworI2lmZGVmIERFQlVHCisgIC8qIFdlIGFzc3VtZSBmcm9udC1lbmQgZnVuY3Rpb25zIGFscmVhZHkgY2hlY2sgdGhlbS4gICovCisgIGFzc2VydCAoc3RhcnQgKyByYW5nZSA+PSAwICYmIHN0YXJ0ICsgcmFuZ2UgPD0gbGVuZ3RoKTsKKyNlbmRpZgorCisgIC8qIElmIGluaXRpYWwgc3RhdGVzIHdpdGggbm9uLWJlZ2J1ZiBjb250ZXh0cyBoYXZlIG5vIGVsZW1lbnRzLAorICAgICB0aGUgcmVnZXggbXVzdCBiZSBhbmNob3JlZC4gIElmIHByZWctPm5ld2xpbmVfYW5jaG9yIGlzIHNldCwKKyAgICAgd2UnbGwgbmV2ZXIgdXNlIGluaXRfc3RhdGVfbmwsIHNvIGRvIG5vdCBjaGVjayBpdC4gICovCisgIGlmIChkZmEtPmluaXRfc3RhdGUtPm5vZGVzLm5lbGVtID09IDAKKyAgICAgICYmIGRmYS0+aW5pdF9zdGF0ZV93b3JkLT5ub2Rlcy5uZWxlbSA9PSAwCisgICAgICAmJiAoZGZhLT5pbml0X3N0YXRlX25sLT5ub2Rlcy5uZWxlbSA9PSAwCisJICB8fCAhcHJlZy0+bmV3bGluZV9hbmNob3IpKQorICAgIHsKKyAgICAgIGlmIChzdGFydCAhPSAwICYmIHN0YXJ0ICsgcmFuZ2UgIT0gMCkKKwlyZXR1cm4gUkVHX05PTUFUQ0g7CisgICAgICBzdGFydCA9IHJhbmdlID0gMDsKKyAgICB9CisKKyAgLyogV2UgbXVzdCBjaGVjayB0aGUgbG9uZ2VzdCBtYXRjaGluZywgaWYgbm1hdGNoID4gMC4gICovCisgIGZsX2xvbmdlc3RfbWF0Y2ggPSAobm1hdGNoICE9IDAgfHwgZGZhLT5uYmFja3JlZik7CisKKyAgZXJyID0gcmVfc3RyaW5nX2FsbG9jYXRlICgmbWN0eC5pbnB1dCwgc3RyaW5nLCBsZW5ndGgsIGRmYS0+bm9kZXNfbGVuICsgMSwKKwkJCSAgICBwcmVnLT50cmFuc2xhdGUsIHByZWctPnN5bnRheCAmIFJFX0lDQVNFLCBkZmEpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgZ290byBmcmVlX3JldHVybjsKKyAgbWN0eC5pbnB1dC5zdG9wID0gc3RvcDsKKyAgbWN0eC5pbnB1dC5yYXdfc3RvcCA9IHN0b3A7CisgIG1jdHguaW5wdXQubmV3bGluZV9hbmNob3IgPSBwcmVnLT5uZXdsaW5lX2FuY2hvcjsKKworICBlcnIgPSBtYXRjaF9jdHhfaW5pdCAoJm1jdHgsIGVmbGFncywgZGZhLT5uYmFja3JlZiAqIDIpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgZ290byBmcmVlX3JldHVybjsKKworICAvKiBXZSB3aWxsIGxvZyBhbGwgdGhlIERGQSBzdGF0ZXMgdGhyb3VnaCB3aGljaCB0aGUgZGZhIHBhc3MsCisgICAgIGlmIG5tYXRjaCA+IDEsIG9yIHRoaXMgZGZhIGhhcyAibXVsdGlieXRlIG5vZGUiLCB3aGljaCBpcyBhCisgICAgIGJhY2stcmVmZXJlbmNlIG9yIGEgbm9kZSB3aGljaCBjYW4gYWNjZXB0IG11bHRpYnl0ZSBjaGFyYWN0ZXIgb3IKKyAgICAgbXVsdGkgY2hhcmFjdGVyIGNvbGxhdGluZyBlbGVtZW50LiAgKi8KKyAgaWYgKG5tYXRjaCA+IDEgfHwgZGZhLT5oYXNfbWJfbm9kZSkKKyAgICB7CisgICAgICAvKiBBdm9pZCBvdmVyZmxvdy4gICovCisgICAgICBpZiAoQkUgKFNJWkVfTUFYIC8gc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopIDw9IG1jdHguaW5wdXQuYnVmc19sZW4sIDApKQorCXsKKwkgIGVyciA9IFJFR19FU1BBQ0U7CisJICBnb3RvIGZyZWVfcmV0dXJuOworCX0KKworICAgICAgbWN0eC5zdGF0ZV9sb2cgPSByZV9tYWxsb2MgKHJlX2RmYXN0YXRlX3QgKiwgbWN0eC5pbnB1dC5idWZzX2xlbiArIDEpOworICAgICAgaWYgKEJFIChtY3R4LnN0YXRlX2xvZyA9PSBOVUxMLCAwKSkKKwl7CisJICBlcnIgPSBSRUdfRVNQQUNFOworCSAgZ290byBmcmVlX3JldHVybjsKKwl9CisgICAgfQorICBlbHNlCisgICAgbWN0eC5zdGF0ZV9sb2cgPSBOVUxMOworCisgIG1hdGNoX2ZpcnN0ID0gc3RhcnQ7CisgIG1jdHguaW5wdXQudGlwX2NvbnRleHQgPSAoZWZsYWdzICYgUkVHX05PVEJPTCkgPyBDT05URVhUX0JFR0JVRgorCQkJICAgOiBDT05URVhUX05FV0xJTkUgfCBDT05URVhUX0JFR0JVRjsKKworICAvKiBDaGVjayBpbmNyZW1lbnRhbGx5IHdoZXRoZXIgb2Ygbm90IHRoZSBpbnB1dCBzdHJpbmcgbWF0Y2guICAqLworICBpbmNyID0gKHJhbmdlIDwgMCkgPyAtMSA6IDE7CisgIGxlZnRfbGltID0gKHJhbmdlIDwgMCkgPyBzdGFydCArIHJhbmdlIDogc3RhcnQ7CisgIHJpZ2h0X2xpbSA9IChyYW5nZSA8IDApID8gc3RhcnQgOiBzdGFydCArIHJhbmdlOworICBzYiA9IGRmYS0+bWJfY3VyX21heCA9PSAxOworICBtYXRjaF9raW5kID0KKyAgICAoZmFzdG1hcAorICAgICA/ICgoc2IgfHwgIShwcmVnLT5zeW50YXggJiBSRV9JQ0FTRSB8fCB0KSA/IDQgOiAwKQorCXwgKHJhbmdlID49IDAgPyAyIDogMCkKKwl8ICh0ICE9IE5VTEwgPyAxIDogMCkpCisgICAgIDogOCk7CisKKyAgZm9yICg7OyBtYXRjaF9maXJzdCArPSBpbmNyKQorICAgIHsKKyAgICAgIGVyciA9IFJFR19OT01BVENIOworICAgICAgaWYgKG1hdGNoX2ZpcnN0IDwgbGVmdF9saW0gfHwgcmlnaHRfbGltIDwgbWF0Y2hfZmlyc3QpCisJZ290byBmcmVlX3JldHVybjsKKworICAgICAgLyogQWR2YW5jZSBhcyByYXBpZGx5IGFzIHBvc3NpYmxlIHRocm91Z2ggdGhlIHN0cmluZywgdW50aWwgd2UKKwkgZmluZCBhIHBsYXVzaWJsZSBwbGFjZSB0byBzdGFydCBtYXRjaGluZy4gIFRoaXMgbWF5IGJlIGRvbmUKKwkgd2l0aCB2YXJ5aW5nIGVmZmljaWVuY3ksIHNvIHRoZXJlIGFyZSB2YXJpb3VzIHBvc3NpYmlsaXRpZXM6CisJIG9ubHkgdGhlIG1vc3QgY29tbW9uIG9mIHRoZW0gYXJlIHNwZWNpYWxpemVkLCBpbiBvcmRlciB0bworCSBzYXZlIG9uIGNvZGUgc2l6ZS4gIFdlIHVzZSBhIHN3aXRjaCBzdGF0ZW1lbnQgZm9yIHNwZWVkLiAgKi8KKyAgICAgIHN3aXRjaCAobWF0Y2hfa2luZCkKKwl7CisJY2FzZSA4OgorCSAgLyogTm8gZmFzdG1hcC4gICovCisJICBicmVhazsKKworCWNhc2UgNzoKKwkgIC8qIEZhc3RtYXAgd2l0aCBzaW5nbGUtYnl0ZSB0cmFuc2xhdGlvbiwgbWF0Y2ggZm9yd2FyZC4gICovCisJICB3aGlsZSAoQkUgKG1hdGNoX2ZpcnN0IDwgcmlnaHRfbGltLCAxKQorCQkgJiYgIWZhc3RtYXBbdFsodW5zaWduZWQgY2hhcikgc3RyaW5nW21hdGNoX2ZpcnN0XV1dKQorCSAgICArK21hdGNoX2ZpcnN0OworCSAgZ290byBmb3J3YXJkX21hdGNoX2ZvdW5kX3N0YXJ0X29yX3JlYWNoZWRfZW5kOworCisJY2FzZSA2OgorCSAgLyogRmFzdG1hcCB3aXRob3V0IHRyYW5zbGF0aW9uLCBtYXRjaCBmb3J3YXJkLiAgKi8KKwkgIHdoaWxlIChCRSAobWF0Y2hfZmlyc3QgPCByaWdodF9saW0sIDEpCisJCSAmJiAhZmFzdG1hcFsodW5zaWduZWQgY2hhcikgc3RyaW5nW21hdGNoX2ZpcnN0XV0pCisJICAgICsrbWF0Y2hfZmlyc3Q7CisKKwlmb3J3YXJkX21hdGNoX2ZvdW5kX3N0YXJ0X29yX3JlYWNoZWRfZW5kOgorCSAgaWYgKEJFIChtYXRjaF9maXJzdCA9PSByaWdodF9saW0sIDApKQorCSAgICB7CisJICAgICAgY2ggPSBtYXRjaF9maXJzdCA+PSBsZW5ndGgKKwkJICAgICAgID8gMCA6ICh1bnNpZ25lZCBjaGFyKSBzdHJpbmdbbWF0Y2hfZmlyc3RdOworCSAgICAgIGlmICghZmFzdG1hcFt0ID8gdFtjaF0gOiBjaF0pCisJCWdvdG8gZnJlZV9yZXR1cm47CisJICAgIH0KKwkgIGJyZWFrOworCisJY2FzZSA0OgorCWNhc2UgNToKKwkgIC8qIEZhc3RtYXAgd2l0aG91dCBtdWx0aS1ieXRlIHRyYW5zbGF0aW9uLCBtYXRjaCBiYWNrd2FyZHMuICAqLworCSAgd2hpbGUgKG1hdGNoX2ZpcnN0ID49IGxlZnRfbGltKQorCSAgICB7CisJICAgICAgY2ggPSBtYXRjaF9maXJzdCA+PSBsZW5ndGgKKwkJICAgICAgID8gMCA6ICh1bnNpZ25lZCBjaGFyKSBzdHJpbmdbbWF0Y2hfZmlyc3RdOworCSAgICAgIGlmIChmYXN0bWFwW3QgPyB0W2NoXSA6IGNoXSkKKwkJYnJlYWs7CisJICAgICAgLS1tYXRjaF9maXJzdDsKKwkgICAgfQorCSAgaWYgKG1hdGNoX2ZpcnN0IDwgbGVmdF9saW0pCisJICAgIGdvdG8gZnJlZV9yZXR1cm47CisJICBicmVhazsKKworCWRlZmF1bHQ6CisJICAvKiBJbiB0aGlzIGNhc2UsIHdlIGNhbid0IGRldGVybWluZSBlYXNpbHkgdGhlIGN1cnJlbnQgYnl0ZSwKKwkgICAgIHNpbmNlIGl0IG1pZ2h0IGJlIGEgY29tcG9uZW50IGJ5dGUgb2YgYSBtdWx0aWJ5dGUKKwkgICAgIGNoYXJhY3Rlci4gIFRoZW4gd2UgdXNlIHRoZSBjb25zdHJ1Y3RlZCBidWZmZXIgaW5zdGVhZC4gICovCisJICBmb3IgKDs7KQorCSAgICB7CisJICAgICAgLyogSWYgTUFUQ0hfRklSU1QgaXMgb3V0IG9mIHRoZSB2YWxpZCByYW5nZSwgcmVjb25zdHJ1Y3QgdGhlCisJCSBidWZmZXJzLiAgKi8KKwkgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gbWF0Y2hfZmlyc3QgLSBtY3R4LmlucHV0LnJhd19tYnNfaWR4OworCSAgICAgIGlmIChCRSAob2Zmc2V0ID49ICh1bnNpZ25lZCBpbnQpIG1jdHguaW5wdXQudmFsaWRfcmF3X2xlbiwgMCkpCisJCXsKKwkJICBlcnIgPSByZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKCZtY3R4LmlucHV0LCBtYXRjaF9maXJzdCwKKwkJCQkJICAgICAgIGVmbGFncyk7CisJCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQkgICAgZ290byBmcmVlX3JldHVybjsKKworCQkgIG9mZnNldCA9IG1hdGNoX2ZpcnN0IC0gbWN0eC5pbnB1dC5yYXdfbWJzX2lkeDsKKwkJfQorCSAgICAgIC8qIElmIE1BVENIX0ZJUlNUIGlzIG91dCBvZiB0aGUgYnVmZmVyLCBsZWF2ZSBpdCBhcyAnXDAnLgorCQkgTm90ZSB0aGF0IE1BVENIX0ZJUlNUIG11c3Qgbm90IGJlIHNtYWxsZXIgdGhhbiAwLiAgKi8KKwkgICAgICBjaCA9IChtYXRjaF9maXJzdCA+PSBsZW5ndGgKKwkJICAgID8gMCA6IHJlX3N0cmluZ19ieXRlX2F0ICgmbWN0eC5pbnB1dCwgb2Zmc2V0KSk7CisJICAgICAgaWYgKGZhc3RtYXBbY2hdKQorCQlicmVhazsKKwkgICAgICBtYXRjaF9maXJzdCArPSBpbmNyOworCSAgICAgIGlmIChtYXRjaF9maXJzdCA8IGxlZnRfbGltIHx8IG1hdGNoX2ZpcnN0ID4gcmlnaHRfbGltKQorCQl7CisJCSAgZXJyID0gUkVHX05PTUFUQ0g7CisJCSAgZ290byBmcmVlX3JldHVybjsKKwkJfQorCSAgICB9CisJICBicmVhazsKKwl9CisKKyAgICAgIC8qIFJlY29uc3RydWN0IHRoZSBidWZmZXJzIHNvIHRoYXQgdGhlIG1hdGNoZXIgY2FuIGFzc3VtZSB0aGF0CisJIHRoZSBtYXRjaGluZyBzdGFydHMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIuICAqLworICAgICAgZXJyID0gcmVfc3RyaW5nX3JlY29uc3RydWN0ICgmbWN0eC5pbnB1dCwgbWF0Y2hfZmlyc3QsIGVmbGFncyk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJZ290byBmcmVlX3JldHVybjsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgIC8qIERvbid0IGNvbnNpZGVyIHRoaXMgY2hhciBhcyBhIHBvc3NpYmxlIG1hdGNoIHN0YXJ0IGlmIGl0IHBhcnQsCisJeWV0IGlzbid0IHRoZSBoZWFkLCBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLworICAgICAgaWYgKCFzYiAmJiAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKCZtY3R4LmlucHV0LCAwKSkKKwljb250aW51ZTsKKyNlbmRpZgorCisgICAgICAvKiBJdCBzZWVtcyB0byBiZSBhcHByb3ByaWF0ZSBvbmUsIHRoZW4gdXNlIHRoZSBtYXRjaGVyLiAgKi8KKyAgICAgIC8qIFdlIGFzc3VtZSB0aGF0IHRoZSBtYXRjaGluZyBzdGFydHMgZnJvbSAwLiAgKi8KKyAgICAgIG1jdHguc3RhdGVfbG9nX3RvcCA9IG1jdHgubmJrcmVmX2VudHMgPSBtY3R4Lm1heF9tYl9lbGVtX2xlbiA9IDA7CisgICAgICBtYXRjaF9sYXN0ID0gY2hlY2tfbWF0Y2hpbmcgKCZtY3R4LCBmbF9sb25nZXN0X21hdGNoLAorCQkJCSAgIHJhbmdlID49IDAgPyAmbWF0Y2hfZmlyc3QgOiBOVUxMKTsKKyAgICAgIGlmIChtYXRjaF9sYXN0ICE9IC0xKQorCXsKKwkgIGlmIChCRSAobWF0Y2hfbGFzdCA9PSAtMiwgMCkpCisJICAgIHsKKwkgICAgICBlcnIgPSBSRUdfRVNQQUNFOworCSAgICAgIGdvdG8gZnJlZV9yZXR1cm47CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIG1jdHgubWF0Y2hfbGFzdCA9IG1hdGNoX2xhc3Q7CisJICAgICAgaWYgKCghcHJlZy0+bm9fc3ViICYmIG5tYXRjaCA+IDEpIHx8IGRmYS0+bmJhY2tyZWYpCisJCXsKKwkJICByZV9kZmFzdGF0ZV90ICpwc3RhdGUgPSBtY3R4LnN0YXRlX2xvZ1ttYXRjaF9sYXN0XTsKKwkJICBtY3R4Lmxhc3Rfbm9kZSA9IGNoZWNrX2hhbHRfc3RhdGVfY29udGV4dCAoJm1jdHgsIHBzdGF0ZSwKKwkJCQkJCQkgICAgIG1hdGNoX2xhc3QpOworCQl9CisJICAgICAgaWYgKCghcHJlZy0+bm9fc3ViICYmIG5tYXRjaCA+IDEgJiYgZGZhLT5oYXNfcGx1cmFsX21hdGNoKQorCQkgIHx8IGRmYS0+bmJhY2tyZWYpCisJCXsKKwkJICBlcnIgPSBwcnVuZV9pbXBvc3NpYmxlX25vZGVzICgmbWN0eCk7CisJCSAgaWYgKGVyciA9PSBSRUdfTk9FUlJPUikKKwkJICAgIGJyZWFrOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT01BVENILCAwKSkKKwkJICAgIGdvdG8gZnJlZV9yZXR1cm47CisJCSAgbWF0Y2hfbGFzdCA9IC0xOworCQl9CisJICAgICAgZWxzZQorCQlicmVhazsgLyogV2UgZm91bmQgYSBtYXRjaC4gICovCisJICAgIH0KKwl9CisKKyAgICAgIG1hdGNoX2N0eF9jbGVhbiAoJm1jdHgpOworICAgIH0KKworI2lmZGVmIERFQlVHCisgIGFzc2VydCAobWF0Y2hfbGFzdCAhPSAtMSk7CisgIGFzc2VydCAoZXJyID09IFJFR19OT0VSUk9SKTsKKyNlbmRpZgorCisgIC8qIFNldCBwbWF0Y2hbXSBpZiB3ZSBuZWVkLiAgKi8KKyAgaWYgKG5tYXRjaCA+IDApCisgICAgeworICAgICAgaW50IHJlZ19pZHg7CisKKyAgICAgIC8qIEluaXRpYWxpemUgcmVnaXN0ZXJzLiAgKi8KKyAgICAgIGZvciAocmVnX2lkeCA9IDE7IHJlZ19pZHggPCBubWF0Y2g7ICsrcmVnX2lkeCkKKwlwbWF0Y2hbcmVnX2lkeF0ucm1fc28gPSBwbWF0Y2hbcmVnX2lkeF0ucm1fZW8gPSAtMTsKKworICAgICAgLyogU2V0IHRoZSBwb2ludHMgd2hlcmUgbWF0Y2hpbmcgc3RhcnQvZW5kLiAgKi8KKyAgICAgIHBtYXRjaFswXS5ybV9zbyA9IDA7CisgICAgICBwbWF0Y2hbMF0ucm1fZW8gPSBtY3R4Lm1hdGNoX2xhc3Q7CisKKyAgICAgIGlmICghcHJlZy0+bm9fc3ViICYmIG5tYXRjaCA+IDEpCisJeworCSAgZXJyID0gc2V0X3JlZ3MgKHByZWcsICZtY3R4LCBubWF0Y2gsIHBtYXRjaCwKKwkJCSAgZGZhLT5oYXNfcGx1cmFsX21hdGNoICYmIGRmYS0+bmJhY2tyZWYgPiAwKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBmcmVlX3JldHVybjsKKwl9CisKKyAgICAgIC8qIEF0IGxhc3QsIGFkZCB0aGUgb2Zmc2V0IHRvIHRoZSBlYWNoIHJlZ2lzdGVycywgc2luY2Ugd2Ugc2xpZGVkCisJIHRoZSBidWZmZXJzIHNvIHRoYXQgd2UgY291bGQgYXNzdW1lIHRoYXQgdGhlIG1hdGNoaW5nIHN0YXJ0cworCSBmcm9tIDAuICAqLworICAgICAgZm9yIChyZWdfaWR4ID0gMDsgcmVnX2lkeCA8IG5tYXRjaDsgKytyZWdfaWR4KQorCWlmIChwbWF0Y2hbcmVnX2lkeF0ucm1fc28gIT0gLTEpCisJICB7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgICAgaWYgKEJFIChtY3R4LmlucHV0Lm9mZnNldHNfbmVlZGVkICE9IDAsIDApKQorCSAgICAgIHsKKwkJcG1hdGNoW3JlZ19pZHhdLnJtX3NvID0KKwkJICAocG1hdGNoW3JlZ19pZHhdLnJtX3NvID09IG1jdHguaW5wdXQudmFsaWRfbGVuCisJCSAgID8gbWN0eC5pbnB1dC52YWxpZF9yYXdfbGVuCisJCSAgIDogbWN0eC5pbnB1dC5vZmZzZXRzW3BtYXRjaFtyZWdfaWR4XS5ybV9zb10pOworCQlwbWF0Y2hbcmVnX2lkeF0ucm1fZW8gPQorCQkgIChwbWF0Y2hbcmVnX2lkeF0ucm1fZW8gPT0gbWN0eC5pbnB1dC52YWxpZF9sZW4KKwkJICAgPyBtY3R4LmlucHV0LnZhbGlkX3Jhd19sZW4KKwkJICAgOiBtY3R4LmlucHV0Lm9mZnNldHNbcG1hdGNoW3JlZ19pZHhdLnJtX2VvXSk7CisJICAgICAgfQorI2Vsc2UKKwkgICAgYXNzZXJ0IChtY3R4LmlucHV0Lm9mZnNldHNfbmVlZGVkID09IDApOworI2VuZGlmCisJICAgIHBtYXRjaFtyZWdfaWR4XS5ybV9zbyArPSBtYXRjaF9maXJzdDsKKwkgICAgcG1hdGNoW3JlZ19pZHhdLnJtX2VvICs9IG1hdGNoX2ZpcnN0OworCSAgfQorICAgICAgZm9yIChyZWdfaWR4ID0gMDsgcmVnX2lkeCA8IGV4dHJhX25tYXRjaDsgKytyZWdfaWR4KQorCXsKKwkgIHBtYXRjaFtubWF0Y2ggKyByZWdfaWR4XS5ybV9zbyA9IC0xOworCSAgcG1hdGNoW25tYXRjaCArIHJlZ19pZHhdLnJtX2VvID0gLTE7CisJfQorCisgICAgICBpZiAoZGZhLT5zdWJleHBfbWFwKQorCWZvciAocmVnX2lkeCA9IDA7IHJlZ19pZHggKyAxIDwgbm1hdGNoOyByZWdfaWR4KyspCisJICBpZiAoZGZhLT5zdWJleHBfbWFwW3JlZ19pZHhdICE9IHJlZ19pZHgpCisJICAgIHsKKwkgICAgICBwbWF0Y2hbcmVnX2lkeCArIDFdLnJtX3NvCisJCT0gcG1hdGNoW2RmYS0+c3ViZXhwX21hcFtyZWdfaWR4XSArIDFdLnJtX3NvOworCSAgICAgIHBtYXRjaFtyZWdfaWR4ICsgMV0ucm1fZW8KKwkJPSBwbWF0Y2hbZGZhLT5zdWJleHBfbWFwW3JlZ19pZHhdICsgMV0ucm1fZW87CisJICAgIH0KKyAgICB9CisKKyBmcmVlX3JldHVybjoKKyAgcmVfZnJlZSAobWN0eC5zdGF0ZV9sb2cpOworICBpZiAoZGZhLT5uYmFja3JlZikKKyAgICBtYXRjaF9jdHhfZnJlZSAoJm1jdHgpOworICByZV9zdHJpbmdfZGVzdHJ1Y3QgKCZtY3R4LmlucHV0KTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3BydW5lX2ltcG9zc2libGVfbm9kZXMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgaW50IGhhbHRfbm9kZSwgbWF0Y2hfbGFzdDsKKyAgcmVnX2VycmNvZGVfdCByZXQ7CisgIHJlX2RmYXN0YXRlX3QgKipzaWZ0ZWRfc3RhdGVzOworICByZV9kZmFzdGF0ZV90ICoqbGltX3N0YXRlcyA9IE5VTEw7CisgIHJlX3NpZnRfY29udGV4dF90IHNjdHg7CisjaWZkZWYgREVCVUcKKyAgYXNzZXJ0IChtY3R4LT5zdGF0ZV9sb2cgIT0gTlVMTCk7CisjZW5kaWYKKyAgbWF0Y2hfbGFzdCA9IG1jdHgtPm1hdGNoX2xhc3Q7CisgIGhhbHRfbm9kZSA9IG1jdHgtPmxhc3Rfbm9kZTsKKworICAvKiBBdm9pZCBvdmVyZmxvdy4gICovCisgIGlmIChCRSAoU0laRV9NQVggLyBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikgPD0gbWF0Y2hfbGFzdCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgc2lmdGVkX3N0YXRlcyA9IHJlX21hbGxvYyAocmVfZGZhc3RhdGVfdCAqLCBtYXRjaF9sYXN0ICsgMSk7CisgIGlmIChCRSAoc2lmdGVkX3N0YXRlcyA9PSBOVUxMLCAwKSkKKyAgICB7CisgICAgICByZXQgPSBSRUdfRVNQQUNFOworICAgICAgZ290byBmcmVlX3JldHVybjsKKyAgICB9CisgIGlmIChkZmEtPm5iYWNrcmVmKQorICAgIHsKKyAgICAgIGxpbV9zdGF0ZXMgPSByZV9tYWxsb2MgKHJlX2RmYXN0YXRlX3QgKiwgbWF0Y2hfbGFzdCArIDEpOworICAgICAgaWYgKEJFIChsaW1fc3RhdGVzID09IE5VTEwsIDApKQorCXsKKwkgIHJldCA9IFJFR19FU1BBQ0U7CisJICBnb3RvIGZyZWVfcmV0dXJuOworCX0KKyAgICAgIHdoaWxlICgxKQorCXsKKwkgIG1lbXNldCAobGltX3N0YXRlcywgJ1wwJywKKwkJICBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikgKiAobWF0Y2hfbGFzdCArIDEpKTsKKwkgIHNpZnRfY3R4X2luaXQgKCZzY3R4LCBzaWZ0ZWRfc3RhdGVzLCBsaW1fc3RhdGVzLCBoYWx0X25vZGUsCisJCQkgbWF0Y2hfbGFzdCk7CisJICByZXQgPSBzaWZ0X3N0YXRlc19iYWNrd2FyZCAobWN0eCwgJnNjdHgpOworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJnNjdHgubGltaXRzKTsKKwkgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgICBnb3RvIGZyZWVfcmV0dXJuOworCSAgaWYgKHNpZnRlZF9zdGF0ZXNbMF0gIT0gTlVMTCB8fCBsaW1fc3RhdGVzWzBdICE9IE5VTEwpCisJICAgIGJyZWFrOworCSAgZG8KKwkgICAgeworCSAgICAgIC0tbWF0Y2hfbGFzdDsKKwkgICAgICBpZiAobWF0Y2hfbGFzdCA8IDApCisJCXsKKwkJICByZXQgPSBSRUdfTk9NQVRDSDsKKwkJICBnb3RvIGZyZWVfcmV0dXJuOworCQl9CisJICAgIH0gd2hpbGUgKG1jdHgtPnN0YXRlX2xvZ1ttYXRjaF9sYXN0XSA9PSBOVUxMCisJCSAgICAgfHwgIW1jdHgtPnN0YXRlX2xvZ1ttYXRjaF9sYXN0XS0+aGFsdCk7CisJICBoYWx0X25vZGUgPSBjaGVja19oYWx0X3N0YXRlX2NvbnRleHQgKG1jdHgsCisJCQkJCQltY3R4LT5zdGF0ZV9sb2dbbWF0Y2hfbGFzdF0sCisJCQkJCQltYXRjaF9sYXN0KTsKKwl9CisgICAgICByZXQgPSBtZXJnZV9zdGF0ZV9hcnJheSAoZGZhLCBzaWZ0ZWRfc3RhdGVzLCBsaW1fc3RhdGVzLAorCQkJICAgICAgIG1hdGNoX2xhc3QgKyAxKTsKKyAgICAgIHJlX2ZyZWUgKGxpbV9zdGF0ZXMpOworICAgICAgbGltX3N0YXRlcyA9IE5VTEw7CisgICAgICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJZ290byBmcmVlX3JldHVybjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBzaWZ0X2N0eF9pbml0ICgmc2N0eCwgc2lmdGVkX3N0YXRlcywgbGltX3N0YXRlcywgaGFsdF9ub2RlLCBtYXRjaF9sYXN0KTsKKyAgICAgIHJldCA9IHNpZnRfc3RhdGVzX2JhY2t3YXJkIChtY3R4LCAmc2N0eCk7CisgICAgICByZV9ub2RlX3NldF9mcmVlICgmc2N0eC5saW1pdHMpOworICAgICAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorCWdvdG8gZnJlZV9yZXR1cm47CisgICAgICBpZiAoc2lmdGVkX3N0YXRlc1swXSA9PSBOVUxMKQorCXsKKwkgIHJldCA9IFJFR19OT01BVENIOworCSAgZ290byBmcmVlX3JldHVybjsKKwl9CisgICAgfQorICByZV9mcmVlIChtY3R4LT5zdGF0ZV9sb2cpOworICBtY3R4LT5zdGF0ZV9sb2cgPSBzaWZ0ZWRfc3RhdGVzOworICBzaWZ0ZWRfc3RhdGVzID0gTlVMTDsKKyAgbWN0eC0+bGFzdF9ub2RlID0gaGFsdF9ub2RlOworICBtY3R4LT5tYXRjaF9sYXN0ID0gbWF0Y2hfbGFzdDsKKyAgcmV0ID0gUkVHX05PRVJST1I7CisgZnJlZV9yZXR1cm46CisgIHJlX2ZyZWUgKHNpZnRlZF9zdGF0ZXMpOworICByZV9mcmVlIChsaW1fc3RhdGVzKTsKKyAgcmV0dXJuIHJldDsKK30KKworLyogQWNxdWlyZSBhbiBpbml0aWFsIHN0YXRlIGFuZCByZXR1cm4gaXQuCisgICBXZSBtdXN0IHNlbGVjdCBhcHByb3ByaWF0ZSBpbml0aWFsIHN0YXRlIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCwKKyAgIHNpbmNlIGluaXRpYWwgc3RhdGVzIG1heSBoYXZlIGNvbnN0cmFpbnRzIGxpa2UgIlw8IiwgIl4iLCBldGMuLiAgKi8KKworc3RhdGljIGlubGluZSByZV9kZmFzdGF0ZV90ICoKK19fYXR0cmlidXRlICgoYWx3YXlzX2lubGluZSkpIGludGVybmFsX2Z1bmN0aW9uCithY3F1aXJlX2luaXRfc3RhdGVfY29udGV4dCAocmVnX2VycmNvZGVfdCAqZXJyLCBjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkgICAgaW50IGlkeCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgaWYgKGRmYS0+aW5pdF9zdGF0ZS0+aGFzX2NvbnN0cmFpbnQpCisgICAgeworICAgICAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisgICAgICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgaWR4IC0gMSwgbWN0eC0+ZWZsYWdzKTsKKyAgICAgIGlmIChJU19XT1JEX0NPTlRFWFQgKGNvbnRleHQpKQorCXJldHVybiBkZmEtPmluaXRfc3RhdGVfd29yZDsKKyAgICAgIGVsc2UgaWYgKElTX09SRElOQVJZX0NPTlRFWFQgKGNvbnRleHQpKQorCXJldHVybiBkZmEtPmluaXRfc3RhdGU7CisgICAgICBlbHNlIGlmIChJU19CRUdCVUZfQ09OVEVYVCAoY29udGV4dCkgJiYgSVNfTkVXTElORV9DT05URVhUIChjb250ZXh0KSkKKwlyZXR1cm4gZGZhLT5pbml0X3N0YXRlX2JlZ2J1ZjsKKyAgICAgIGVsc2UgaWYgKElTX05FV0xJTkVfQ09OVEVYVCAoY29udGV4dCkpCisJcmV0dXJuIGRmYS0+aW5pdF9zdGF0ZV9ubDsKKyAgICAgIGVsc2UgaWYgKElTX0JFR0JVRl9DT05URVhUIChjb250ZXh0KSkKKwl7CisJICAvKiBJdCBpcyByZWxhdGl2ZWx5IHJhcmUgY2FzZSwgdGhlbiBjYWxjdWxhdGUgb24gZGVtYW5kLiAgKi8KKwkgIHJldHVybiByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKGVyciwgZGZhLAorCQkJCQkgICBkZmEtPmluaXRfc3RhdGUtPmVudHJhbmNlX25vZGVzLAorCQkJCQkgICBjb250ZXh0KTsKKwl9CisgICAgICBlbHNlCisJLyogTXVzdCBub3QgaGFwcGVuPyAgKi8KKwlyZXR1cm4gZGZhLT5pbml0X3N0YXRlOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBkZmEtPmluaXRfc3RhdGU7Cit9CisKKy8qIENoZWNrIHdoZXRoZXIgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBpbnB1dCBzdHJpbmcgSU5QVVQgb3Igbm90LAorICAgYW5kIHJldHVybiB0aGUgaW5kZXggd2hlcmUgdGhlIG1hdGNoaW5nIGVuZCwgcmV0dXJuIC0xIGlmIG5vdCBtYXRjaCwKKyAgIG9yIHJldHVybiAtMiBpbiBjYXNlIG9mIGFuIGVycm9yLgorICAgRkxfTE9OR0VTVF9NQVRDSCBtZWFucyB3ZSB3YW50IHRoZSBQT1NJWCBsb25nZXN0IG1hdGNoaW5nLgorICAgSWYgUF9NQVRDSF9GSVJTVCBpcyBub3QgTlVMTCwgYW5kIHRoZSBtYXRjaCBmYWlscywgaXQgaXMgc2V0IHRvIHRoZQorICAgbmV4dCBwbGFjZSB3aGVyZSB3ZSBtYXkgd2FudCB0byB0cnkgbWF0Y2hpbmcuCisgICBOb3RlIHRoYXQgdGhlIG1hdGNoZXIgYXNzdW1lIHRoYXQgdGhlIG1hdGNoaW5nIHN0YXJ0cyBmcm9tIHRoZSBjdXJyZW50CisgICBpbmRleCBvZiB0aGUgYnVmZmVyLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX21hdGNoaW5nIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBmbF9sb25nZXN0X21hdGNoLAorCQlpbnQgKnBfbWF0Y2hfZmlyc3QpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgbWF0Y2ggPSAwOworICBpbnQgbWF0Y2hfbGFzdCA9IC0xOworICBpbnQgY3VyX3N0cl9pZHggPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KTsKKyAgcmVfZGZhc3RhdGVfdCAqY3VyX3N0YXRlOworICBpbnQgYXRfaW5pdF9zdGF0ZSA9IHBfbWF0Y2hfZmlyc3QgIT0gTlVMTDsKKyAgaW50IG5leHRfc3RhcnRfaWR4ID0gY3VyX3N0cl9pZHg7CisKKyAgZXJyID0gUkVHX05PRVJST1I7CisgIGN1cl9zdGF0ZSA9IGFjcXVpcmVfaW5pdF9zdGF0ZV9jb250ZXh0ICgmZXJyLCBtY3R4LCBjdXJfc3RyX2lkeCk7CisgIC8qIEFuIGluaXRpYWwgc3RhdGUgbXVzdCBub3QgYmUgTlVMTCAoaW52YWxpZCkuICAqLworICBpZiAoQkUgKGN1cl9zdGF0ZSA9PSBOVUxMLCAwKSkKKyAgICB7CisgICAgICBhc3NlcnQgKGVyciA9PSBSRUdfRVNQQUNFKTsKKyAgICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgaWYgKG1jdHgtPnN0YXRlX2xvZyAhPSBOVUxMKQorICAgIHsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZ1tjdXJfc3RyX2lkeF0gPSBjdXJfc3RhdGU7CisKKyAgICAgIC8qIENoZWNrIE9QX09QRU5fU1VCRVhQIGluIHRoZSBpbml0aWFsIHN0YXRlIGluIGNhc2UgdGhhdCB3ZSB1c2UgdGhlbQorCSBsYXRlci4gIEUuZy4gUHJvY2Vzc2luZyBiYWNrIHJlZmVyZW5jZXMuICAqLworICAgICAgaWYgKEJFIChkZmEtPm5iYWNrcmVmLCAwKSkKKwl7CisJICBhdF9pbml0X3N0YXRlID0gMDsKKwkgIGVyciA9IGNoZWNrX3N1YmV4cF9tYXRjaGluZ190b3AgKG1jdHgsICZjdXJfc3RhdGUtPm5vZGVzLCAwKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKworCSAgaWYgKGN1cl9zdGF0ZS0+aGFzX2JhY2tyZWYpCisJICAgIHsKKwkgICAgICBlcnIgPSB0cmFuc2l0X3N0YXRlX2JrcmVmIChtY3R4LCAmY3VyX3N0YXRlLT5ub2Rlcyk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlyZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgIH0KKworICAvKiBJZiB0aGUgUkUgYWNjZXB0cyBOVUxMIHN0cmluZy4gICovCisgIGlmIChCRSAoY3VyX3N0YXRlLT5oYWx0LCAwKSkKKyAgICB7CisgICAgICBpZiAoIWN1cl9zdGF0ZS0+aGFzX2NvbnN0cmFpbnQKKwkgIHx8IGNoZWNrX2hhbHRfc3RhdGVfY29udGV4dCAobWN0eCwgY3VyX3N0YXRlLCBjdXJfc3RyX2lkeCkpCisJeworCSAgaWYgKCFmbF9sb25nZXN0X21hdGNoKQorCSAgICByZXR1cm4gY3VyX3N0cl9pZHg7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBtYXRjaF9sYXN0ID0gY3VyX3N0cl9pZHg7CisJICAgICAgbWF0Y2ggPSAxOworCSAgICB9CisJfQorICAgIH0KKworICB3aGlsZSAoIXJlX3N0cmluZ19lb2kgKCZtY3R4LT5pbnB1dCkpCisgICAgeworICAgICAgcmVfZGZhc3RhdGVfdCAqb2xkX3N0YXRlID0gY3VyX3N0YXRlOworICAgICAgaW50IG5leHRfY2hhcl9pZHggPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KSArIDE7CisKKyAgICAgIGlmIChCRSAobmV4dF9jaGFyX2lkeCA+PSBtY3R4LT5pbnB1dC5idWZzX2xlbiwgMCkKKwkgIHx8IChCRSAobmV4dF9jaGFyX2lkeCA+PSBtY3R4LT5pbnB1dC52YWxpZF9sZW4sIDApCisJICAgICAgJiYgbWN0eC0+aW5wdXQudmFsaWRfbGVuIDwgbWN0eC0+aW5wdXQubGVuKSkKKwl7CisJICBlcnIgPSBleHRlbmRfYnVmZmVycyAobWN0eCk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICBhc3NlcnQgKGVyciA9PSBSRUdfRVNQQUNFKTsKKwkgICAgICByZXR1cm4gLTI7CisJICAgIH0KKwl9CisKKyAgICAgIGN1cl9zdGF0ZSA9IHRyYW5zaXRfc3RhdGUgKCZlcnIsIG1jdHgsIGN1cl9zdGF0ZSk7CisgICAgICBpZiAobWN0eC0+c3RhdGVfbG9nICE9IE5VTEwpCisJY3VyX3N0YXRlID0gbWVyZ2Vfc3RhdGVfd2l0aF9sb2cgKCZlcnIsIG1jdHgsIGN1cl9zdGF0ZSk7CisKKyAgICAgIGlmIChjdXJfc3RhdGUgPT0gTlVMTCkKKwl7CisJICAvKiBSZWFjaGVkIHRoZSBpbnZhbGlkIHN0YXRlIG9yIGFuIGVycm9yLiAgVHJ5IHRvIHJlY292ZXIgYSB2YWxpZAorCSAgICAgc3RhdGUgdXNpbmcgdGhlIHN0YXRlIGxvZywgaWYgYXZhaWxhYmxlIGFuZCBpZiB3ZSBoYXZlIG5vdAorCSAgICAgYWxyZWFkeSBmb3VuZCBhIHZhbGlkIChldmVuIGlmIG5vdCB0aGUgbG9uZ2VzdCkgbWF0Y2guICAqLworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gLTI7CisKKwkgIGlmIChtY3R4LT5zdGF0ZV9sb2cgPT0gTlVMTAorCSAgICAgIHx8IChtYXRjaCAmJiAhZmxfbG9uZ2VzdF9tYXRjaCkKKwkgICAgICB8fCAoY3VyX3N0YXRlID0gZmluZF9yZWNvdmVyX3N0YXRlICgmZXJyLCBtY3R4KSkgPT0gTlVMTCkKKwkgICAgYnJlYWs7CisJfQorCisgICAgICBpZiAoQkUgKGF0X2luaXRfc3RhdGUsIDApKQorCXsKKwkgIGlmIChvbGRfc3RhdGUgPT0gY3VyX3N0YXRlKQorCSAgICBuZXh0X3N0YXJ0X2lkeCA9IG5leHRfY2hhcl9pZHg7CisJICBlbHNlCisJICAgIGF0X2luaXRfc3RhdGUgPSAwOworCX0KKworICAgICAgaWYgKGN1cl9zdGF0ZS0+aGFsdCkKKwl7CisJICAvKiBSZWFjaGVkIGEgaGFsdCBzdGF0ZS4KKwkgICAgIENoZWNrIHRoZSBoYWx0IHN0YXRlIGNhbiBzYXRpc2Z5IHRoZSBjdXJyZW50IGNvbnRleHQuICAqLworCSAgaWYgKCFjdXJfc3RhdGUtPmhhc19jb25zdHJhaW50CisJICAgICAgfHwgY2hlY2tfaGFsdF9zdGF0ZV9jb250ZXh0IChtY3R4LCBjdXJfc3RhdGUsCisJCQkJCSAgIHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpKSkKKwkgICAgeworCSAgICAgIC8qIFdlIGZvdW5kIGFuIGFwcHJvcHJpYXRlIGhhbHQgc3RhdGUuICAqLworCSAgICAgIG1hdGNoX2xhc3QgPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KTsKKwkgICAgICBtYXRjaCA9IDE7CisKKwkgICAgICAvKiBXZSBmb3VuZCBhIG1hdGNoLCBkbyBub3QgbW9kaWZ5IG1hdGNoX2ZpcnN0IGJlbG93LiAgKi8KKwkgICAgICBwX21hdGNoX2ZpcnN0ID0gTlVMTDsKKwkgICAgICBpZiAoIWZsX2xvbmdlc3RfbWF0Y2gpCisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKworICBpZiAocF9tYXRjaF9maXJzdCkKKyAgICAqcF9tYXRjaF9maXJzdCArPSBuZXh0X3N0YXJ0X2lkeDsKKworICByZXR1cm4gbWF0Y2hfbGFzdDsKK30KKworLyogQ2hlY2sgTk9ERSBtYXRjaCB0aGUgY3VycmVudCBjb250ZXh0LiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX2hhbHRfbm9kZV9jb250ZXh0IChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZSwgdW5zaWduZWQgaW50IGNvbnRleHQpCit7CisgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gZGZhLT5ub2Rlc1tub2RlXS50eXBlOworICB1bnNpZ25lZCBpbnQgY29uc3RyYWludCA9IGRmYS0+bm9kZXNbbm9kZV0uY29uc3RyYWludDsKKyAgaWYgKHR5cGUgIT0gRU5EX09GX1JFKQorICAgIHJldHVybiAwOworICBpZiAoIWNvbnN0cmFpbnQpCisgICAgcmV0dXJuIDE7CisgIGlmIChOT1RfU0FUSVNGWV9ORVhUX0NPTlNUUkFJTlQgKGNvbnN0cmFpbnQsIGNvbnRleHQpKQorICAgIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworLyogQ2hlY2sgdGhlIGhhbHQgc3RhdGUgU1RBVEUgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGV4dC4KKyAgIFJldHVybiAwIGlmIG5vdCBtYXRjaCwgaWYgdGhlIG5vZGUsIFNUQVRFIGhhcywgaXMgYSBoYWx0IG5vZGUgYW5kCisgICBtYXRjaCB0aGUgY29udGV4dCwgcmV0dXJuIHRoZSBub2RlLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX2hhbHRfc3RhdGVfY29udGV4dCAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJICBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwgaW50IGlkeCkKK3sKKyAgaW50IGk7CisgIHVuc2lnbmVkIGludCBjb250ZXh0OworI2lmZGVmIERFQlVHCisgIGFzc2VydCAoc3RhdGUtPmhhbHQpOworI2VuZGlmCisgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBpZHgsIG1jdHgtPmVmbGFncyk7CisgIGZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bm9kZXMubmVsZW07ICsraSkKKyAgICBpZiAoY2hlY2tfaGFsdF9ub2RlX2NvbnRleHQgKG1jdHgtPmRmYSwgc3RhdGUtPm5vZGVzLmVsZW1zW2ldLCBjb250ZXh0KSkKKyAgICAgIHJldHVybiBzdGF0ZS0+bm9kZXMuZWxlbXNbaV07CisgIHJldHVybiAwOworfQorCisvKiBDb21wdXRlIHRoZSBuZXh0IG5vZGUgdG8gd2hpY2ggIk5GQSIgdHJhbnNpdCBmcm9tIE5PREUoIk5GQSIgaXMgYSBORkEKKyAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIERGQSkuCisgICBSZXR1cm4gdGhlIGRlc3RpbmF0aW9uIG5vZGUsIGFuZCB1cGRhdGUgRVBTX1ZJQV9OT0RFUywgcmV0dXJuIC0xIGluIGNhc2UKKyAgIG9mIGVycm9ycy4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitwcm9jZWVkX25leHRfbm9kZSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbnJlZ3MsIHJlZ21hdGNoX3QgKnJlZ3MsCisJCSAgIGludCAqcGlkeCwgaW50IG5vZGUsIHJlX25vZGVfc2V0ICplcHNfdmlhX25vZGVzLAorCQkgICBzdHJ1Y3QgcmVfZmFpbF9zdGFja190ICpmcykKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgaW50IGksIGVycjsKKyAgaWYgKElTX0VQU0lMT05fTk9ERSAoZGZhLT5ub2Rlc1tub2RlXS50eXBlKSkKKyAgICB7CisgICAgICByZV9ub2RlX3NldCAqY3VyX25vZGVzID0gJm1jdHgtPnN0YXRlX2xvZ1sqcGlkeF0tPm5vZGVzOworICAgICAgcmVfbm9kZV9zZXQgKmVkZXN0cyA9ICZkZmEtPmVkZXN0c1tub2RlXTsKKyAgICAgIGludCBkZXN0X25vZGU7CisgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbnNlcnQgKGVwc192aWFfbm9kZXMsIG5vZGUpOworICAgICAgaWYgKEJFIChlcnIgPCAwLCAwKSkKKwlyZXR1cm4gLTI7CisgICAgICAvKiBQaWNrIHVwIGEgdmFsaWQgZGVzdGluYXRpb24sIG9yIHJldHVybiAtMSBpZiBub25lIGlzIGZvdW5kLiAgKi8KKyAgICAgIGZvciAoZGVzdF9ub2RlID0gLTEsIGkgPSAwOyBpIDwgZWRlc3RzLT5uZWxlbTsgKytpKQorCXsKKwkgIGludCBjYW5kaWRhdGUgPSBlZGVzdHMtPmVsZW1zW2ldOworCSAgaWYgKCFyZV9ub2RlX3NldF9jb250YWlucyAoY3VyX25vZGVzLCBjYW5kaWRhdGUpKQorCSAgICBjb250aW51ZTsKKwkgIGlmIChkZXN0X25vZGUgPT0gLTEpCisJICAgIGRlc3Rfbm9kZSA9IGNhbmRpZGF0ZTsKKworCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogSW4gb3JkZXIgdG8gYXZvaWQgaW5maW5pdGUgbG9vcCBsaWtlICIoYSopKiIsIHJldHVybiB0aGUgc2Vjb25kCisJCSBlcHNpbG9uLXRyYW5zaXRpb24gaWYgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IGNvbnNpZGVyZWQuICAqLworCSAgICAgIGlmIChyZV9ub2RlX3NldF9jb250YWlucyAoZXBzX3ZpYV9ub2RlcywgZGVzdF9ub2RlKSkKKwkJcmV0dXJuIGNhbmRpZGF0ZTsKKworCSAgICAgIC8qIE90aGVyd2lzZSwgcHVzaCB0aGUgc2Vjb25kIGVwc2lsb24tdHJhbnNpdGlvbiBvbiB0aGUgZmFpbCBzdGFjay4gICovCisJICAgICAgZWxzZSBpZiAoZnMgIT0gTlVMTAorCQkgICAgICAgJiYgcHVzaF9mYWlsX3N0YWNrIChmcywgKnBpZHgsIGNhbmRpZGF0ZSwgbnJlZ3MsIHJlZ3MsCisJCQkJCSAgIGVwc192aWFfbm9kZXMpKQorCQlyZXR1cm4gLTI7CisKKwkgICAgICAvKiBXZSBrbm93IHdlIGFyZSBnb2luZyB0byBleGl0LiAgKi8KKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBkZXN0X25vZGU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaW50IG5hY2NlcHRlZCA9IDA7CisgICAgICByZV90b2tlbl90eXBlX3QgdHlwZSA9IGRmYS0+bm9kZXNbbm9kZV0udHlwZTsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAoZGZhLT5ub2Rlc1tub2RlXS5hY2NlcHRfbWIpCisJbmFjY2VwdGVkID0gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGRmYSwgbm9kZSwgJm1jdHgtPmlucHV0LCAqcGlkeCk7CisgICAgICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICAgIGlmICh0eXBlID09IE9QX0JBQ0tfUkVGKQorCXsKKwkgIGludCBzdWJleHBfaWR4ID0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuaWR4ICsgMTsKKwkgIG5hY2NlcHRlZCA9IHJlZ3Nbc3ViZXhwX2lkeF0ucm1fZW8gLSByZWdzW3N1YmV4cF9pZHhdLnJtX3NvOworCSAgaWYgKGZzICE9IE5VTEwpCisJICAgIHsKKwkgICAgICBpZiAocmVnc1tzdWJleHBfaWR4XS5ybV9zbyA9PSAtMSB8fCByZWdzW3N1YmV4cF9pZHhdLnJtX2VvID09IC0xKQorCQlyZXR1cm4gLTE7CisJICAgICAgZWxzZSBpZiAobmFjY2VwdGVkKQorCQl7CisJCSAgY2hhciAqYnVmID0gKGNoYXIgKikgcmVfc3RyaW5nX2dldF9idWZmZXIgKCZtY3R4LT5pbnB1dCk7CisJCSAgaWYgKG1lbWNtcCAoYnVmICsgcmVnc1tzdWJleHBfaWR4XS5ybV9zbywgYnVmICsgKnBpZHgsCisJCQkgICAgICBuYWNjZXB0ZWQpICE9IDApCisJCSAgICByZXR1cm4gLTE7CisJCX0KKwkgICAgfQorCisJICBpZiAobmFjY2VwdGVkID09IDApCisJICAgIHsKKwkgICAgICBpbnQgZGVzdF9ub2RlOworCSAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luc2VydCAoZXBzX3ZpYV9ub2Rlcywgbm9kZSk7CisJICAgICAgaWYgKEJFIChlcnIgPCAwLCAwKSkKKwkJcmV0dXJuIC0yOworCSAgICAgIGRlc3Rfbm9kZSA9IGRmYS0+ZWRlc3RzW25vZGVdLmVsZW1zWzBdOworCSAgICAgIGlmIChyZV9ub2RlX3NldF9jb250YWlucyAoJm1jdHgtPnN0YXRlX2xvZ1sqcGlkeF0tPm5vZGVzLAorCQkJCQlkZXN0X25vZGUpKQorCQlyZXR1cm4gZGVzdF9ub2RlOworCSAgICB9CisJfQorCisgICAgICBpZiAobmFjY2VwdGVkICE9IDAKKwkgIHx8IGNoZWNrX25vZGVfYWNjZXB0IChtY3R4LCBkZmEtPm5vZGVzICsgbm9kZSwgKnBpZHgpKQorCXsKKwkgIGludCBkZXN0X25vZGUgPSBkZmEtPm5leHRzW25vZGVdOworCSAgKnBpZHggPSAobmFjY2VwdGVkID09IDApID8gKnBpZHggKyAxIDogKnBpZHggKyBuYWNjZXB0ZWQ7CisJICBpZiAoZnMgJiYgKCpwaWR4ID4gbWN0eC0+bWF0Y2hfbGFzdCB8fCBtY3R4LT5zdGF0ZV9sb2dbKnBpZHhdID09IE5VTEwKKwkJICAgICB8fCAhcmVfbm9kZV9zZXRfY29udGFpbnMgKCZtY3R4LT5zdGF0ZV9sb2dbKnBpZHhdLT5ub2RlcywKKwkJCQkJICAgICAgIGRlc3Rfbm9kZSkpKQorCSAgICByZXR1cm4gLTE7CisJICByZV9ub2RlX3NldF9lbXB0eSAoZXBzX3ZpYV9ub2Rlcyk7CisJICByZXR1cm4gZGVzdF9ub2RlOworCX0KKyAgICB9CisgIHJldHVybiAtMTsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitwdXNoX2ZhaWxfc3RhY2sgKHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgKmZzLCBpbnQgc3RyX2lkeCwgaW50IGRlc3Rfbm9kZSwKKwkJIGludCBucmVncywgcmVnbWF0Y2hfdCAqcmVncywgcmVfbm9kZV9zZXQgKmVwc192aWFfbm9kZXMpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgbnVtID0gZnMtPm51bSsrOworICBpZiAoZnMtPm51bSA9PSBmcy0+YWxsb2MpCisgICAgeworICAgICAgc3RydWN0IHJlX2ZhaWxfc3RhY2tfZW50X3QgKm5ld19hcnJheTsKKyAgICAgIG5ld19hcnJheSA9IHJlYWxsb2MgKGZzLT5zdGFjaywgKHNpemVvZiAoc3RydWN0IHJlX2ZhaWxfc3RhY2tfZW50X3QpCisJCQkJICAgICAgICogZnMtPmFsbG9jICogMikpOworICAgICAgaWYgKG5ld19hcnJheSA9PSBOVUxMKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgZnMtPmFsbG9jICo9IDI7CisgICAgICBmcy0+c3RhY2sgPSBuZXdfYXJyYXk7CisgICAgfQorICBmcy0+c3RhY2tbbnVtXS5pZHggPSBzdHJfaWR4OworICBmcy0+c3RhY2tbbnVtXS5ub2RlID0gZGVzdF9ub2RlOworICBmcy0+c3RhY2tbbnVtXS5yZWdzID0gcmVfbWFsbG9jIChyZWdtYXRjaF90LCBucmVncyk7CisgIGlmIChmcy0+c3RhY2tbbnVtXS5yZWdzID09IE5VTEwpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgIG1lbWNweSAoZnMtPnN0YWNrW251bV0ucmVncywgcmVncywgc2l6ZW9mIChyZWdtYXRjaF90KSAqIG5yZWdzKTsKKyAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5ICgmZnMtPnN0YWNrW251bV0uZXBzX3ZpYV9ub2RlcywgZXBzX3ZpYV9ub2Rlcyk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitwb3BfZmFpbF9zdGFjayAoc3RydWN0IHJlX2ZhaWxfc3RhY2tfdCAqZnMsIGludCAqcGlkeCwgaW50IG5yZWdzLAorCQlyZWdtYXRjaF90ICpyZWdzLCByZV9ub2RlX3NldCAqZXBzX3ZpYV9ub2RlcykKK3sKKyAgaW50IG51bSA9IC0tZnMtPm51bTsKKyAgYXNzZXJ0IChudW0gPj0gMCk7CisgICpwaWR4ID0gZnMtPnN0YWNrW251bV0uaWR4OworICBtZW1jcHkgKHJlZ3MsIGZzLT5zdGFja1tudW1dLnJlZ3MsIHNpemVvZiAocmVnbWF0Y2hfdCkgKiBucmVncyk7CisgIHJlX25vZGVfc2V0X2ZyZWUgKGVwc192aWFfbm9kZXMpOworICByZV9mcmVlIChmcy0+c3RhY2tbbnVtXS5yZWdzKTsKKyAgKmVwc192aWFfbm9kZXMgPSBmcy0+c3RhY2tbbnVtXS5lcHNfdmlhX25vZGVzOworICByZXR1cm4gZnMtPnN0YWNrW251bV0ubm9kZTsKK30KKworLyogU2V0IHRoZSBwb3NpdGlvbnMgd2hlcmUgdGhlIHN1YmV4cHJlc3Npb25zIGFyZSBzdGFydHMvZW5kcyB0byByZWdpc3RlcnMKKyAgIFBNQVRDSC4KKyAgIE5vdGU6IFdlIGFzc3VtZSB0aGF0IHBtYXRjaFswXSBpcyBhbHJlYWR5IHNldCwgYW5kCisgICBwbWF0Y2hbaV0ucm1fc28gPT0gcG1hdGNoW2ldLnJtX2VvID09IC0xIGZvciAwIDwgaSA8IG5tYXRjaC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorc2V0X3JlZ3MgKGNvbnN0IHJlZ2V4X3QgKnByZWcsIGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgc2l6ZV90IG5tYXRjaCwKKwkgIHJlZ21hdGNoX3QgKnBtYXRjaCwgaW50IGZsX2JhY2t0cmFjaykKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmRmYSA9IChjb25zdCByZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGludCBpZHgsIGN1cl9ub2RlOworICByZV9ub2RlX3NldCBlcHNfdmlhX25vZGVzOworICBzdHJ1Y3QgcmVfZmFpbF9zdGFja190ICpmczsKKyAgc3RydWN0IHJlX2ZhaWxfc3RhY2tfdCBmc19ib2R5ID0geyAwLCAyLCBOVUxMIH07CisgIHJlZ21hdGNoX3QgKnByZXZfaWR4X21hdGNoOworICBpbnQgcHJldl9pZHhfbWF0Y2hfbWFsbG9jZWQgPSAwOworCisjaWZkZWYgREVCVUcKKyAgYXNzZXJ0IChubWF0Y2ggPiAxKTsKKyAgYXNzZXJ0IChtY3R4LT5zdGF0ZV9sb2cgIT0gTlVMTCk7CisjZW5kaWYKKyAgaWYgKGZsX2JhY2t0cmFjaykKKyAgICB7CisgICAgICBmcyA9ICZmc19ib2R5OworICAgICAgZnMtPnN0YWNrID0gcmVfbWFsbG9jIChzdHJ1Y3QgcmVfZmFpbF9zdGFja19lbnRfdCwgZnMtPmFsbG9jKTsKKyAgICAgIGlmIChmcy0+c3RhY2sgPT0gTlVMTCkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICB9CisgIGVsc2UKKyAgICBmcyA9IE5VTEw7CisKKyAgY3VyX25vZGUgPSBkZmEtPmluaXRfbm9kZTsKKyAgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoJmVwc192aWFfbm9kZXMpOworCisjaWZkZWYgSEFWRV9BTExPQ0EKKyAgaWYgKF9fbGliY191c2VfYWxsb2NhIChubWF0Y2ggKiBzaXplb2YgKHJlZ21hdGNoX3QpKSkKKyAgICBwcmV2X2lkeF9tYXRjaCA9IChyZWdtYXRjaF90ICopIGFsbG9jYSAobm1hdGNoICogc2l6ZW9mIChyZWdtYXRjaF90KSk7CisgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIHByZXZfaWR4X21hdGNoID0gcmVfbWFsbG9jIChyZWdtYXRjaF90LCBubWF0Y2gpOworICAgICAgaWYgKHByZXZfaWR4X21hdGNoID09IE5VTEwpCisJeworCSAgZnJlZV9mYWlsX3N0YWNrX3JldHVybiAoZnMpOworCSAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAgcHJldl9pZHhfbWF0Y2hfbWFsbG9jZWQgPSAxOworICAgIH0KKyAgbWVtY3B5IChwcmV2X2lkeF9tYXRjaCwgcG1hdGNoLCBzaXplb2YgKHJlZ21hdGNoX3QpICogbm1hdGNoKTsKKworICBmb3IgKGlkeCA9IHBtYXRjaFswXS5ybV9zbzsgaWR4IDw9IHBtYXRjaFswXS5ybV9lbyA7KQorICAgIHsKKyAgICAgIHVwZGF0ZV9yZWdzIChkZmEsIHBtYXRjaCwgcHJldl9pZHhfbWF0Y2gsIGN1cl9ub2RlLCBpZHgsIG5tYXRjaCk7CisKKyAgICAgIGlmIChpZHggPT0gcG1hdGNoWzBdLnJtX2VvICYmIGN1cl9ub2RlID09IG1jdHgtPmxhc3Rfbm9kZSkKKwl7CisJICBpbnQgcmVnX2lkeDsKKwkgIGlmIChmcykKKwkgICAgeworCSAgICAgIGZvciAocmVnX2lkeCA9IDA7IHJlZ19pZHggPCBubWF0Y2g7ICsrcmVnX2lkeCkKKwkJaWYgKHBtYXRjaFtyZWdfaWR4XS5ybV9zbyA+IC0xICYmIHBtYXRjaFtyZWdfaWR4XS5ybV9lbyA9PSAtMSkKKwkJICBicmVhazsKKwkgICAgICBpZiAocmVnX2lkeCA9PSBubWF0Y2gpCisJCXsKKwkJICByZV9ub2RlX3NldF9mcmVlICgmZXBzX3ZpYV9ub2Rlcyk7CisJCSAgaWYgKHByZXZfaWR4X21hdGNoX21hbGxvY2VkKQorCQkgICAgcmVfZnJlZSAocHJldl9pZHhfbWF0Y2gpOworCQkgIHJldHVybiBmcmVlX2ZhaWxfc3RhY2tfcmV0dXJuIChmcyk7CisJCX0KKwkgICAgICBjdXJfbm9kZSA9IHBvcF9mYWlsX3N0YWNrIChmcywgJmlkeCwgbm1hdGNoLCBwbWF0Y2gsCisJCQkJCSAmZXBzX3ZpYV9ub2Rlcyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZlcHNfdmlhX25vZGVzKTsKKwkgICAgICBpZiAocHJldl9pZHhfbWF0Y2hfbWFsbG9jZWQpCisJCXJlX2ZyZWUgKHByZXZfaWR4X21hdGNoKTsKKwkgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFByb2NlZWQgdG8gbmV4dCBub2RlLiAgKi8KKyAgICAgIGN1cl9ub2RlID0gcHJvY2VlZF9uZXh0X25vZGUgKG1jdHgsIG5tYXRjaCwgcG1hdGNoLCAmaWR4LCBjdXJfbm9kZSwKKwkJCQkgICAgJmVwc192aWFfbm9kZXMsIGZzKTsKKworICAgICAgaWYgKEJFIChjdXJfbm9kZSA8IDAsIDApKQorCXsKKwkgIGlmIChCRSAoY3VyX25vZGUgPT0gLTIsIDApKQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJmVwc192aWFfbm9kZXMpOworCSAgICAgIGlmIChwcmV2X2lkeF9tYXRjaF9tYWxsb2NlZCkKKwkJcmVfZnJlZSAocHJldl9pZHhfbWF0Y2gpOworCSAgICAgIGZyZWVfZmFpbF9zdGFja19yZXR1cm4gKGZzKTsKKwkgICAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgfQorCSAgaWYgKGZzKQorCSAgICBjdXJfbm9kZSA9IHBvcF9mYWlsX3N0YWNrIChmcywgJmlkeCwgbm1hdGNoLCBwbWF0Y2gsCisJCQkJICAgICAgICZlcHNfdmlhX25vZGVzKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZlcHNfdmlhX25vZGVzKTsKKwkgICAgICBpZiAocHJldl9pZHhfbWF0Y2hfbWFsbG9jZWQpCisJCXJlX2ZyZWUgKHByZXZfaWR4X21hdGNoKTsKKwkgICAgICByZXR1cm4gUkVHX05PTUFUQ0g7CisJICAgIH0KKwl9CisgICAgfQorICByZV9ub2RlX3NldF9mcmVlICgmZXBzX3ZpYV9ub2Rlcyk7CisgIGlmIChwcmV2X2lkeF9tYXRjaF9tYWxsb2NlZCkKKyAgICByZV9mcmVlIChwcmV2X2lkeF9tYXRjaCk7CisgIHJldHVybiBmcmVlX2ZhaWxfc3RhY2tfcmV0dXJuIChmcyk7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorZnJlZV9mYWlsX3N0YWNrX3JldHVybiAoc3RydWN0IHJlX2ZhaWxfc3RhY2tfdCAqZnMpCit7CisgIGlmIChmcykKKyAgICB7CisgICAgICBpbnQgZnNfaWR4OworICAgICAgZm9yIChmc19pZHggPSAwOyBmc19pZHggPCBmcy0+bnVtOyArK2ZzX2lkeCkKKwl7CisJICByZV9ub2RlX3NldF9mcmVlICgmZnMtPnN0YWNrW2ZzX2lkeF0uZXBzX3ZpYV9ub2Rlcyk7CisJICByZV9mcmVlIChmcy0+c3RhY2tbZnNfaWR4XS5yZWdzKTsKKwl9CisgICAgICByZV9mcmVlIChmcy0+c3RhY2spOworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK3VwZGF0ZV9yZWdzIChjb25zdCByZV9kZmFfdCAqZGZhLCByZWdtYXRjaF90ICpwbWF0Y2gsCisJICAgICByZWdtYXRjaF90ICpwcmV2X2lkeF9tYXRjaCwgaW50IGN1cl9ub2RlLCBpbnQgY3VyX2lkeCwgaW50IG5tYXRjaCkKK3sKKyAgaW50IHR5cGUgPSBkZmEtPm5vZGVzW2N1cl9ub2RlXS50eXBlOworICBpZiAodHlwZSA9PSBPUF9PUEVOX1NVQkVYUCkKKyAgICB7CisgICAgICBpbnQgcmVnX251bSA9IGRmYS0+bm9kZXNbY3VyX25vZGVdLm9wci5pZHggKyAxOworCisgICAgICAvKiBXZSBhcmUgYXQgdGhlIGZpcnN0IG5vZGUgb2YgdGhpcyBzdWIgZXhwcmVzc2lvbi4gICovCisgICAgICBpZiAocmVnX251bSA8IG5tYXRjaCkKKwl7CisJICBwbWF0Y2hbcmVnX251bV0ucm1fc28gPSBjdXJfaWR4OworCSAgcG1hdGNoW3JlZ19udW1dLnJtX2VvID0gLTE7CisJfQorICAgIH0KKyAgZWxzZSBpZiAodHlwZSA9PSBPUF9DTE9TRV9TVUJFWFApCisgICAgeworICAgICAgaW50IHJlZ19udW0gPSBkZmEtPm5vZGVzW2N1cl9ub2RlXS5vcHIuaWR4ICsgMTsKKyAgICAgIGlmIChyZWdfbnVtIDwgbm1hdGNoKQorCXsKKwkgIC8qIFdlIGFyZSBhdCB0aGUgbGFzdCBub2RlIG9mIHRoaXMgc3ViIGV4cHJlc3Npb24uICAqLworCSAgaWYgKHBtYXRjaFtyZWdfbnVtXS5ybV9zbyA8IGN1cl9pZHgpCisJICAgIHsKKwkgICAgICBwbWF0Y2hbcmVnX251bV0ucm1fZW8gPSBjdXJfaWR4OworCSAgICAgIC8qIFRoaXMgaXMgYSBub24tZW1wdHkgbWF0Y2ggb3Igd2UgYXJlIG5vdCBpbnNpZGUgYW4gb3B0aW9uYWwKKwkJIHN1YmV4cHJlc3Npb24uICBBY2NlcHQgdGhpcyByaWdodCBhd2F5LiAgKi8KKwkgICAgICBtZW1jcHkgKHByZXZfaWR4X21hdGNoLCBwbWF0Y2gsIHNpemVvZiAocmVnbWF0Y2hfdCkgKiBubWF0Y2gpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoZGZhLT5ub2Rlc1tjdXJfbm9kZV0ub3B0X3N1YmV4cAorCQkgICYmIHByZXZfaWR4X21hdGNoW3JlZ19udW1dLnJtX3NvICE9IC0xKQorCQkvKiBXZSB0cmFuc2l0ZWQgdGhyb3VnaCBhbiBlbXB0eSBtYXRjaCBmb3IgYW4gb3B0aW9uYWwKKwkJICAgc3ViZXhwcmVzc2lvbiwgbGlrZSAoYT8pKiwgYW5kIHRoaXMgaXMgbm90IHRoZSBzdWJleHAncworCQkgICBmaXJzdCBtYXRjaC4gIENvcHkgYmFjayB0aGUgb2xkIGNvbnRlbnQgb2YgdGhlIHJlZ2lzdGVycworCQkgICBzbyB0aGF0IG1hdGNoZXMgb2YgYW4gaW5uZXIgc3ViZXhwcmVzc2lvbiBhcmUgdW5kb25lIGFzCisJCSAgIHdlbGwsIGxpa2UgaW4gKChhPykpKi4gICovCisJCW1lbWNweSAocG1hdGNoLCBwcmV2X2lkeF9tYXRjaCwgc2l6ZW9mIChyZWdtYXRjaF90KSAqIG5tYXRjaCk7CisJICAgICAgZWxzZQorCQkvKiBXZSBjb21wbGV0ZWQgYSBzdWJleHByZXNzaW9uLCBidXQgaXQgbWF5IGJlIHBhcnQgb2YKKwkJICAgYW4gb3B0aW9uYWwgb25lLCBzbyBkbyBub3QgdXBkYXRlIFBSRVZfSURYX01BVENILiAgKi8KKwkJcG1hdGNoW3JlZ19udW1dLnJtX2VvID0gY3VyX2lkeDsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBTVEFURV9MT0cgZnJvbSB0aGUgU0NUWC0+bGFzdF9zdHJfaWR4IHRvIDAKKyAgIGFuZCBzaWZ0IHRoZSBub2RlcyBpbiBlYWNoIHN0YXRlcyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBydWxlcy4KKyAgIFVwZGF0ZWQgc3RhdGVfbG9nIHdpbGwgYmUgd3JvdGUgdG8gU1RBVEVfTE9HLgorCisgICBSdWxlczogV2UgdGhyb3cgYXdheSB0aGUgTm9kZSBgYScgaW4gdGhlIFNUQVRFX0xPR1tTVFJfSURYXSBpZi4uLgorICAgICAxLiBXaGVuIFNUUl9JRFggPT0gTUFUQ0hfTEFTVCh0aGUgbGFzdCBpbmRleCBpbiB0aGUgc3RhdGVfbG9nKToKKwlJZiBgYScgaXNuJ3QgdGhlIExBU1RfTk9ERSBhbmQgYGEnIGNhbid0IGVwc2lsb24gdHJhbnNpdCB0bworCXRoZSBMQVNUX05PREUsIHdlIHRocm93IGF3YXkgdGhlIG5vZGUgYGEnLgorICAgICAyLiBXaGVuIDAgPD0gU1RSX0lEWCA8IE1BVENIX0xBU1QgYW5kIGBhJyBhY2NlcHRzCisJc3RyaW5nIGBzJyBhbmQgdHJhbnNpdCB0byBgYic6CisJaS4gSWYgJ2InIGlzbid0IGluIHRoZSBTVEFURV9MT0dbU1RSX0lEWCtzdHJsZW4oJ3MnKV0sIHdlIHRocm93CisJICAgYXdheSB0aGUgbm9kZSBgYScuCisJaWkuIElmICdiJyBpcyBpbiB0aGUgU1RBVEVfTE9HW1NUUl9JRFgrc3RybGVuKCdzJyldIGJ1dCAnYicgaXMKKwkgICAgdGhyb3duIGF3YXksIHdlIHRocm93IGF3YXkgdGhlIG5vZGUgYGEnLgorICAgICAzLiBXaGVuIDAgPD0gU1RSX0lEWCA8IE1BVENIX0xBU1QgYW5kICdhJyBlcHNpbG9uIHRyYW5zaXQgdG8gJ2InOgorCWkuIElmICdiJyBpc24ndCBpbiB0aGUgU1RBVEVfTE9HW1NUUl9JRFhdLCB3ZSB0aHJvdyBhd2F5IHRoZQorCSAgIG5vZGUgYGEnLgorCWlpLiBJZiAnYicgaXMgaW4gdGhlIFNUQVRFX0xPR1tTVFJfSURYXSBidXQgJ2InIGlzIHRocm93biBhd2F5LAorCSAgICB3ZSB0aHJvdyBhd2F5IHRoZSBub2RlIGBhJy4gICovCisKKyNkZWZpbmUgU1RBVEVfTk9ERV9DT05UQUlOUyhzdGF0ZSxub2RlKSBcCisgICgoc3RhdGUpICE9IE5VTEwgJiYgcmVfbm9kZV9zZXRfY29udGFpbnMgKCYoc3RhdGUpLT5ub2Rlcywgbm9kZSkpCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorc2lmdF9zdGF0ZXNfYmFja3dhcmQgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgbnVsbF9jbnQgPSAwOworICBpbnQgc3RyX2lkeCA9IHNjdHgtPmxhc3Rfc3RyX2lkeDsKKyAgcmVfbm9kZV9zZXQgY3VyX2Rlc3Q7CisKKyNpZmRlZiBERUJVRworICBhc3NlcnQgKG1jdHgtPnN0YXRlX2xvZyAhPSBOVUxMICYmIG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XSAhPSBOVUxMKTsKKyNlbmRpZgorCisgIC8qIEJ1aWxkIHNpZnRlZCBzdGF0ZV9sb2dbc3RyX2lkeF0uICBJdCBoYXMgdGhlIG5vZGVzIHdoaWNoIGNhbiBlcHNpbG9uCisgICAgIHRyYW5zaXQgdG8gdGhlIGxhc3Rfbm9kZSBhbmQgdGhlIGxhc3Rfbm9kZSBpdHNlbGYuICAqLworICBlcnIgPSByZV9ub2RlX3NldF9pbml0XzEgKCZjdXJfZGVzdCwgc2N0eC0+bGFzdF9ub2RlKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiBlcnI7CisgIGVyciA9IHVwZGF0ZV9jdXJfc2lmdGVkX3N0YXRlIChtY3R4LCBzY3R4LCBzdHJfaWR4LCAmY3VyX2Rlc3QpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgZ290byBmcmVlX3JldHVybjsKKworICAvKiBUaGVuIGNoZWNrIGVhY2ggc3RhdGVzIGluIHRoZSBzdGF0ZV9sb2cuICAqLworICB3aGlsZSAoc3RyX2lkeCA+IDApCisgICAgeworICAgICAgLyogVXBkYXRlIGNvdW50ZXJzLiAgKi8KKyAgICAgIG51bGxfY250ID0gKHNjdHgtPnNpZnRlZF9zdGF0ZXNbc3RyX2lkeF0gPT0gTlVMTCkgPyBudWxsX2NudCArIDEgOiAwOworICAgICAgaWYgKG51bGxfY250ID4gbWN0eC0+bWF4X21iX2VsZW1fbGVuKQorCXsKKwkgIG1lbXNldCAoc2N0eC0+c2lmdGVkX3N0YXRlcywgJ1wwJywKKwkJICBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikgKiBzdHJfaWR4KTsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZjdXJfZGVzdCk7CisJICByZXR1cm4gUkVHX05PRVJST1I7CisJfQorICAgICAgcmVfbm9kZV9zZXRfZW1wdHkgKCZjdXJfZGVzdCk7CisgICAgICAtLXN0cl9pZHg7CisKKyAgICAgIGlmIChtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0pCisJeworCSAgZXJyID0gYnVpbGRfc2lmdGVkX3N0YXRlcyAobWN0eCwgc2N0eCwgc3RyX2lkeCwgJmN1cl9kZXN0KTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBmcmVlX3JldHVybjsKKwl9CisKKyAgICAgIC8qIEFkZCBhbGwgdGhlIG5vZGVzIHdoaWNoIHNhdGlzZnkgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCSAtIEl0IGNhbiBlcHNpbG9uIHRyYW5zaXQgdG8gYSBub2RlIGluIENVUl9ERVNULgorCSAtIEl0IGlzIGluIENVUl9TUkMuCisJIEFuZCB1cGRhdGUgc3RhdGVfbG9nLiAgKi8KKyAgICAgIGVyciA9IHVwZGF0ZV9jdXJfc2lmdGVkX3N0YXRlIChtY3R4LCBzY3R4LCBzdHJfaWR4LCAmY3VyX2Rlc3QpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCWdvdG8gZnJlZV9yZXR1cm47CisgICAgfQorICBlcnIgPSBSRUdfTk9FUlJPUjsKKyBmcmVlX3JldHVybjoKKyAgcmVfbm9kZV9zZXRfZnJlZSAoJmN1cl9kZXN0KTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitidWlsZF9zaWZ0ZWRfc3RhdGVzIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX3NpZnRfY29udGV4dF90ICpzY3R4LAorCQkgICAgIGludCBzdHJfaWR4LCByZV9ub2RlX3NldCAqY3VyX2Rlc3QpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGNvbnN0IHJlX25vZGVfc2V0ICpjdXJfc3JjID0gJm1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XS0+bm9uX2Vwc19ub2RlczsKKyAgaW50IGk7CisKKyAgLyogVGhlbiBidWlsZCB0aGUgbmV4dCBzaWZ0ZWQgc3RhdGUuCisgICAgIFdlIGJ1aWxkIHRoZSBuZXh0IHNpZnRlZCBzdGF0ZSBvbiBgY3VyX2Rlc3QnLCBhbmQgdXBkYXRlCisgICAgIGBzaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdJyB3aXRoIGBjdXJfZGVzdCcuCisgICAgIE5vdGU6CisgICAgIGBjdXJfZGVzdCcgaXMgdGhlIHNpZnRlZCBzdGF0ZSBmcm9tIGBzdGF0ZV9sb2dbc3RyX2lkeCArIDFdJy4KKyAgICAgYGN1cl9zcmMnIHBvaW50cyB0aGUgbm9kZV9zZXQgb2YgdGhlIG9sZCBgc3RhdGVfbG9nW3N0cl9pZHhdJworICAgICAod2l0aCB0aGUgZXBzaWxvbiBub2RlcyBwcmUtZmlsdGVyZWQgb3V0KS4gICovCisgIGZvciAoaSA9IDA7IGkgPCBjdXJfc3JjLT5uZWxlbTsgaSsrKQorICAgIHsKKyAgICAgIGludCBwcmV2X25vZGUgPSBjdXJfc3JjLT5lbGVtc1tpXTsKKyAgICAgIGludCBuYWNjZXB0ZWQgPSAwOworICAgICAgaW50IHJldDsKKworI2lmZGVmIERFQlVHCisgICAgICByZV90b2tlbl90eXBlX3QgdHlwZSA9IGRmYS0+bm9kZXNbcHJldl9ub2RlXS50eXBlOworICAgICAgYXNzZXJ0ICghSVNfRVBTSUxPTl9OT0RFICh0eXBlKSk7CisjZW5kaWYKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgLyogSWYgdGhlIG5vZGUgbWF5IGFjY2VwdCBgbXVsdGkgYnl0ZScuICAqLworICAgICAgaWYgKGRmYS0+bm9kZXNbcHJldl9ub2RlXS5hY2NlcHRfbWIpCisJbmFjY2VwdGVkID0gc2lmdF9zdGF0ZXNfaXRlcl9tYiAobWN0eCwgc2N0eCwgcHJldl9ub2RlLAorCQkJCQkgc3RyX2lkeCwgc2N0eC0+bGFzdF9zdHJfaWR4KTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisgICAgICAvKiBXZSBkb24ndCBjaGVjayBiYWNrcmVmZXJlbmNlcyBoZXJlLgorCSBTZWUgdXBkYXRlX2N1cl9zaWZ0ZWRfc3RhdGUoKS4gICovCisgICAgICBpZiAoIW5hY2NlcHRlZAorCSAgJiYgY2hlY2tfbm9kZV9hY2NlcHQgKG1jdHgsIGRmYS0+bm9kZXMgKyBwcmV2X25vZGUsIHN0cl9pZHgpCisJICAmJiBTVEFURV9OT0RFX0NPTlRBSU5TIChzY3R4LT5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHggKyAxXSwKKwkJCQkgIGRmYS0+bmV4dHNbcHJldl9ub2RlXSkpCisJbmFjY2VwdGVkID0gMTsKKworICAgICAgaWYgKG5hY2NlcHRlZCA9PSAwKQorCWNvbnRpbnVlOworCisgICAgICBpZiAoc2N0eC0+bGltaXRzLm5lbGVtKQorCXsKKwkgIGludCB0b19pZHggPSBzdHJfaWR4ICsgbmFjY2VwdGVkOworCSAgaWYgKGNoZWNrX2RzdF9saW1pdHMgKG1jdHgsICZzY3R4LT5saW1pdHMsCisJCQkJZGZhLT5uZXh0c1twcmV2X25vZGVdLCB0b19pZHgsCisJCQkJcHJldl9ub2RlLCBzdHJfaWR4KSkKKwkgICAgY29udGludWU7CisJfQorICAgICAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChjdXJfZGVzdCwgcHJldl9ub2RlKTsKKyAgICAgIGlmIChCRSAocmV0ID09IC0xLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICB9CisKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb25zLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjbGVhbl9zdGF0ZV9sb2dfaWZfbmVlZGVkIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBuZXh0X3N0YXRlX2xvZ19pZHgpCit7CisgIGludCB0b3AgPSBtY3R4LT5zdGF0ZV9sb2dfdG9wOworCisgIGlmIChuZXh0X3N0YXRlX2xvZ19pZHggPj0gbWN0eC0+aW5wdXQuYnVmc19sZW4KKyAgICAgIHx8IChuZXh0X3N0YXRlX2xvZ19pZHggPj0gbWN0eC0+aW5wdXQudmFsaWRfbGVuCisJICAmJiBtY3R4LT5pbnB1dC52YWxpZF9sZW4gPCBtY3R4LT5pbnB1dC5sZW4pKQorICAgIHsKKyAgICAgIHJlZ19lcnJjb2RlX3QgZXJyOworICAgICAgZXJyID0gZXh0ZW5kX2J1ZmZlcnMgKG1jdHgpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisgICAgfQorCisgIGlmICh0b3AgPCBuZXh0X3N0YXRlX2xvZ19pZHgpCisgICAgeworICAgICAgbWVtc2V0IChtY3R4LT5zdGF0ZV9sb2cgKyB0b3AgKyAxLCAnXDAnLAorCSAgICAgIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSAqIChuZXh0X3N0YXRlX2xvZ19pZHggLSB0b3ApKTsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZ190b3AgPSBuZXh0X3N0YXRlX2xvZ19pZHg7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorbWVyZ2Vfc3RhdGVfYXJyYXkgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX2RmYXN0YXRlX3QgKipkc3QsCisJCSAgIHJlX2RmYXN0YXRlX3QgKipzcmMsIGludCBudW0pCit7CisgIGludCBzdF9pZHg7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBmb3IgKHN0X2lkeCA9IDA7IHN0X2lkeCA8IG51bTsgKytzdF9pZHgpCisgICAgeworICAgICAgaWYgKGRzdFtzdF9pZHhdID09IE5VTEwpCisJZHN0W3N0X2lkeF0gPSBzcmNbc3RfaWR4XTsKKyAgICAgIGVsc2UgaWYgKHNyY1tzdF9pZHhdICE9IE5VTEwpCisJeworCSAgcmVfbm9kZV9zZXQgbWVyZ2VkX3NldDsKKwkgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfdW5pb24gKCZtZXJnZWRfc2V0LCAmZHN0W3N0X2lkeF0tPm5vZGVzLAorCQkJCQkmc3JjW3N0X2lkeF0tPm5vZGVzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwkgIGRzdFtzdF9pZHhdID0gcmVfYWNxdWlyZV9zdGF0ZSAoJmVyciwgZGZhLCAmbWVyZ2VkX3NldCk7CisJICByZV9ub2RlX3NldF9mcmVlICgmbWVyZ2VkX3NldCk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJfQorICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3VwZGF0ZV9jdXJfc2lmdGVkX3N0YXRlIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkgcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsIGludCBzdHJfaWR4LAorCQkJIHJlX25vZGVfc2V0ICpkZXN0X25vZGVzKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVyciA9IFJFR19OT0VSUk9SOworICBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlczsKKyAgY2FuZGlkYXRlcyA9ICgobWN0eC0+c3RhdGVfbG9nW3N0cl9pZHhdID09IE5VTEwpID8gTlVMTAorCQk6ICZtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0tPm5vZGVzKTsKKworICBpZiAoZGVzdF9ub2Rlcy0+bmVsZW0gPT0gMCkKKyAgICBzY3R4LT5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdID0gTlVMTDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChjYW5kaWRhdGVzKQorCXsKKwkgIC8qIEF0IGZpcnN0LCBhZGQgdGhlIG5vZGVzIHdoaWNoIGNhbiBlcHNpbG9uIHRyYW5zaXQgdG8gYSBub2RlIGluCisJICAgICBERVNUX05PREUuICAqLworCSAgZXJyID0gYWRkX2Vwc2lsb25fc3JjX25vZGVzIChkZmEsIGRlc3Rfbm9kZXMsIGNhbmRpZGF0ZXMpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gZXJyOworCisJICAvKiBUaGVuLCBjaGVjayB0aGUgbGltaXRhdGlvbnMgaW4gdGhlIGN1cnJlbnQgc2lmdF9jb250ZXh0LiAgKi8KKwkgIGlmIChzY3R4LT5saW1pdHMubmVsZW0pCisJICAgIHsKKwkgICAgICBlcnIgPSBjaGVja19zdWJleHBfbGltaXRzIChkZmEsIGRlc3Rfbm9kZXMsIGNhbmRpZGF0ZXMsICZzY3R4LT5saW1pdHMsCisJCQkJCSBtY3R4LT5ia3JlZl9lbnRzLCBzdHJfaWR4KTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiBlcnI7CisJICAgIH0KKwl9CisKKyAgICAgIHNjdHgtPnNpZnRlZF9zdGF0ZXNbc3RyX2lkeF0gPSByZV9hY3F1aXJlX3N0YXRlICgmZXJyLCBkZmEsIGRlc3Rfbm9kZXMpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisgICAgfQorCisgIGlmIChjYW5kaWRhdGVzICYmIG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XS0+aGFzX2JhY2tyZWYpCisgICAgeworICAgICAgZXJyID0gc2lmdF9zdGF0ZXNfYmtyZWYgKG1jdHgsIHNjdHgsIHN0cl9pZHgsIGNhbmRpZGF0ZXMpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorYWRkX2Vwc2lsb25fc3JjX25vZGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9ub2RlX3NldCAqZGVzdF9ub2RlcywKKwkJICAgICAgIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzKQoreworICByZWdfZXJyY29kZV90IGVyciA9IFJFR19OT0VSUk9SOworICBpbnQgaTsKKworICByZV9kZmFzdGF0ZV90ICpzdGF0ZSA9IHJlX2FjcXVpcmVfc3RhdGUgKCZlcnIsIGRmYSwgZGVzdF9ub2Rlcyk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gZXJyOworCisgIGlmICghc3RhdGUtPmludmVjbG9zdXJlLmFsbG9jKQorICAgIHsKKyAgICAgIGVyciA9IHJlX25vZGVfc2V0X2FsbG9jICgmc3RhdGUtPmludmVjbG9zdXJlLCBkZXN0X25vZGVzLT5uZWxlbSk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgZGVzdF9ub2Rlcy0+bmVsZW07IGkrKykKKwl7CisJICBlcnIgPSByZV9ub2RlX3NldF9tZXJnZSAoJnN0YXRlLT5pbnZlY2xvc3VyZSwKKwkJCQkgICBkZmEtPmludmVjbG9zdXJlcyArIGRlc3Rfbm9kZXMtPmVsZW1zW2ldKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgIH0KKyAgcmV0dXJuIHJlX25vZGVfc2V0X2FkZF9pbnRlcnNlY3QgKGRlc3Rfbm9kZXMsIGNhbmRpZGF0ZXMsCisJCQkJICAgICZzdGF0ZS0+aW52ZWNsb3N1cmUpOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3N1Yl9lcHNpbG9uX3NyY19ub2RlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGUsIHJlX25vZGVfc2V0ICpkZXN0X25vZGVzLAorCQkgICAgICAgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXMpCit7CisgICAgaW50IGVjbF9pZHg7CisgICAgcmVnX2VycmNvZGVfdCBlcnI7CisgICAgcmVfbm9kZV9zZXQgKmludl9lY2xvc3VyZSA9IGRmYS0+aW52ZWNsb3N1cmVzICsgbm9kZTsKKyAgICByZV9ub2RlX3NldCBleGNlcHRfbm9kZXM7CisgICAgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoJmV4Y2VwdF9ub2Rlcyk7CisgICAgZm9yIChlY2xfaWR4ID0gMDsgZWNsX2lkeCA8IGludl9lY2xvc3VyZS0+bmVsZW07ICsrZWNsX2lkeCkKKyAgICAgIHsKKwlpbnQgY3VyX25vZGUgPSBpbnZfZWNsb3N1cmUtPmVsZW1zW2VjbF9pZHhdOworCWlmIChjdXJfbm9kZSA9PSBub2RlKQorCSAgY29udGludWU7CisJaWYgKElTX0VQU0lMT05fTk9ERSAoZGZhLT5ub2Rlc1tjdXJfbm9kZV0udHlwZSkpCisJICB7CisJICAgIGludCBlZHN0MSA9IGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5lbGVtc1swXTsKKwkgICAgaW50IGVkc3QyID0gKChkZmEtPmVkZXN0c1tjdXJfbm9kZV0ubmVsZW0gPiAxKQorCQkJID8gZGZhLT5lZGVzdHNbY3VyX25vZGVdLmVsZW1zWzFdIDogLTEpOworCSAgICBpZiAoKCFyZV9ub2RlX3NldF9jb250YWlucyAoaW52X2VjbG9zdXJlLCBlZHN0MSkKKwkJICYmIHJlX25vZGVfc2V0X2NvbnRhaW5zIChkZXN0X25vZGVzLCBlZHN0MSkpCisJCXx8IChlZHN0MiA+IDAKKwkJICAgICYmICFyZV9ub2RlX3NldF9jb250YWlucyAoaW52X2VjbG9zdXJlLCBlZHN0MikKKwkJICAgICYmIHJlX25vZGVfc2V0X2NvbnRhaW5zIChkZXN0X25vZGVzLCBlZHN0MikpKQorCSAgICAgIHsKKwkJZXJyID0gcmVfbm9kZV9zZXRfYWRkX2ludGVyc2VjdCAoJmV4Y2VwdF9ub2RlcywgY2FuZGlkYXRlcywKKwkJCQkJCSBkZmEtPmludmVjbG9zdXJlcyArIGN1cl9ub2RlKTsKKwkJaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQkgIHsKKwkJICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZleGNlcHRfbm9kZXMpOworCQkgICAgcmV0dXJuIGVycjsKKwkJICB9CisJICAgICAgfQorCSAgfQorICAgICAgfQorICAgIGZvciAoZWNsX2lkeCA9IDA7IGVjbF9pZHggPCBpbnZfZWNsb3N1cmUtPm5lbGVtOyArK2VjbF9pZHgpCisgICAgICB7CisJaW50IGN1cl9ub2RlID0gaW52X2VjbG9zdXJlLT5lbGVtc1tlY2xfaWR4XTsKKwlpZiAoIXJlX25vZGVfc2V0X2NvbnRhaW5zICgmZXhjZXB0X25vZGVzLCBjdXJfbm9kZSkpCisJICB7CisJICAgIGludCBpZHggPSByZV9ub2RlX3NldF9jb250YWlucyAoZGVzdF9ub2RlcywgY3VyX25vZGUpIC0gMTsKKwkgICAgcmVfbm9kZV9zZXRfcmVtb3ZlX2F0IChkZXN0X25vZGVzLCBpZHgpOworCSAgfQorICAgICAgfQorICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZleGNlcHRfbm9kZXMpOworICAgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX2RzdF9saW1pdHMgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgcmVfbm9kZV9zZXQgKmxpbWl0cywKKwkJICBpbnQgZHN0X25vZGUsIGludCBkc3RfaWR4LCBpbnQgc3JjX25vZGUsIGludCBzcmNfaWR4KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBpbnQgbGltX2lkeCwgc3JjX3BvcywgZHN0X3BvczsKKworICBpbnQgZHN0X2JrcmVmX2lkeCA9IHNlYXJjaF9jdXJfYmtyZWZfZW50cnkgKG1jdHgsIGRzdF9pZHgpOworICBpbnQgc3JjX2JrcmVmX2lkeCA9IHNlYXJjaF9jdXJfYmtyZWZfZW50cnkgKG1jdHgsIHNyY19pZHgpOworICBmb3IgKGxpbV9pZHggPSAwOyBsaW1faWR4IDwgbGltaXRzLT5uZWxlbTsgKytsaW1faWR4KQorICAgIHsKKyAgICAgIGludCBzdWJleHBfaWR4OworICAgICAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmVudDsKKyAgICAgIGVudCA9IG1jdHgtPmJrcmVmX2VudHMgKyBsaW1pdHMtPmVsZW1zW2xpbV9pZHhdOworICAgICAgc3ViZXhwX2lkeCA9IGRmYS0+bm9kZXNbZW50LT5ub2RlXS5vcHIuaWR4OworCisgICAgICBkc3RfcG9zID0gY2hlY2tfZHN0X2xpbWl0c19jYWxjX3BvcyAobWN0eCwgbGltaXRzLT5lbGVtc1tsaW1faWR4XSwKKwkJCQkJICAgc3ViZXhwX2lkeCwgZHN0X25vZGUsIGRzdF9pZHgsCisJCQkJCSAgIGRzdF9ia3JlZl9pZHgpOworICAgICAgc3JjX3BvcyA9IGNoZWNrX2RzdF9saW1pdHNfY2FsY19wb3MgKG1jdHgsIGxpbWl0cy0+ZWxlbXNbbGltX2lkeF0sCisJCQkJCSAgIHN1YmV4cF9pZHgsIHNyY19ub2RlLCBzcmNfaWR4LAorCQkJCQkgICBzcmNfYmtyZWZfaWR4KTsKKworICAgICAgLyogSW4gY2FzZSBvZjoKKwkgPHNyYz4gPGRzdD4gKCA8c3ViZXhwPiApCisJICggPHN1YmV4cD4gKSA8c3JjPiA8ZHN0PgorCSAoIDxzdWJleHAxPiA8c3JjPiA8c3ViZXhwMj4gPGRzdD4gPHN1YmV4cDM+ICkgICovCisgICAgICBpZiAoc3JjX3BvcyA9PSBkc3RfcG9zKQorCWNvbnRpbnVlOyAvKiBUaGlzIGlzIHVucmVsYXRlZCBsaW1pdGF0aW9uLiAgKi8KKyAgICAgIGVsc2UKKwlyZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfZHN0X2xpbWl0c19jYWxjX3Bvc18xIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBib3VuZGFyaWVzLAorCQkJICAgICBpbnQgc3ViZXhwX2lkeCwgaW50IGZyb21fbm9kZSwgaW50IGJrcmVmX2lkeCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgY29uc3QgcmVfbm9kZV9zZXQgKmVjbG9zdXJlcyA9IGRmYS0+ZWNsb3N1cmVzICsgZnJvbV9ub2RlOworICBpbnQgbm9kZV9pZHg7CisKKyAgLyogRWxzZSwgd2UgYXJlIG9uIHRoZSBib3VuZGFyeTogZXhhbWluZSB0aGUgbm9kZXMgb24gdGhlIGVwc2lsb24KKyAgICAgY2xvc3VyZS4gICovCisgIGZvciAobm9kZV9pZHggPSAwOyBub2RlX2lkeCA8IGVjbG9zdXJlcy0+bmVsZW07ICsrbm9kZV9pZHgpCisgICAgeworICAgICAgaW50IG5vZGUgPSBlY2xvc3VyZXMtPmVsZW1zW25vZGVfaWR4XTsKKyAgICAgIHN3aXRjaCAoZGZhLT5ub2Rlc1tub2RlXS50eXBlKQorCXsKKwljYXNlIE9QX0JBQ0tfUkVGOgorCSAgaWYgKGJrcmVmX2lkeCAhPSAtMSkKKwkgICAgeworCSAgICAgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICplbnQgPSBtY3R4LT5ia3JlZl9lbnRzICsgYmtyZWZfaWR4OworCSAgICAgIGRvCisJCXsKKwkJICBpbnQgZHN0LCBjcG9zOworCisJCSAgaWYgKGVudC0+bm9kZSAhPSBub2RlKQorCQkgICAgY29udGludWU7CisKKwkJICBpZiAoc3ViZXhwX2lkeCA8IEJJVFNFVF9XT1JEX0JJVFMKKwkJICAgICAgJiYgIShlbnQtPmVwc19yZWFjaGFibGVfc3ViZXhwc19tYXAKKwkJCSAgICYgKChiaXRzZXRfd29yZF90KSAxIDw8IHN1YmV4cF9pZHgpKSkKKwkJICAgIGNvbnRpbnVlOworCisJCSAgLyogUmVjdXJzZSB0cnlpbmcgdG8gcmVhY2ggdGhlIE9QX09QRU5fU1VCRVhQIGFuZAorCQkgICAgIE9QX0NMT1NFX1NVQkVYUCBjYXNlcyBiZWxvdy4gIEJ1dCwgaWYgdGhlCisJCSAgICAgZGVzdGluYXRpb24gbm9kZSBpcyB0aGUgc2FtZSBub2RlIGFzIHRoZSBzb3VyY2UKKwkJICAgICBub2RlLCBkb24ndCByZWN1cnNlIGJlY2F1c2UgaXQgd291bGQgY2F1c2UgYW4KKwkJICAgICBpbmZpbml0ZSBsb29wOiBhIHJlZ2V4IHRoYXQgZXhoaWJpdHMgdGhpcyBiZWhhdmlvcgorCQkgICAgIGlzICgpXDEqXDEqICAqLworCQkgIGRzdCA9IGRmYS0+ZWRlc3RzW25vZGVdLmVsZW1zWzBdOworCQkgIGlmIChkc3QgPT0gZnJvbV9ub2RlKQorCQkgICAgeworCQkgICAgICBpZiAoYm91bmRhcmllcyAmIDEpCisJCQlyZXR1cm4gLTE7CisJCSAgICAgIGVsc2UgLyogaWYgKGJvdW5kYXJpZXMgJiAyKSAqLworCQkJcmV0dXJuIDA7CisJCSAgICB9CisKKwkJICBjcG9zID0KKwkJICAgIGNoZWNrX2RzdF9saW1pdHNfY2FsY19wb3NfMSAobWN0eCwgYm91bmRhcmllcywgc3ViZXhwX2lkeCwKKwkJCQkJCSBkc3QsIGJrcmVmX2lkeCk7CisJCSAgaWYgKGNwb3MgPT0gLTEgLyogJiYgKGJvdW5kYXJpZXMgJiAxKSAqLykKKwkJICAgIHJldHVybiAtMTsKKwkJICBpZiAoY3BvcyA9PSAwICYmIChib3VuZGFyaWVzICYgMikpCisJCSAgICByZXR1cm4gMDsKKworCQkgIGlmIChzdWJleHBfaWR4IDwgQklUU0VUX1dPUkRfQklUUykKKwkJICAgIGVudC0+ZXBzX3JlYWNoYWJsZV9zdWJleHBzX21hcAorCQkgICAgICAmPSB+KChiaXRzZXRfd29yZF90KSAxIDw8IHN1YmV4cF9pZHgpOworCQl9CisJICAgICAgd2hpbGUgKGVudCsrLT5tb3JlKTsKKwkgICAgfQorCSAgYnJlYWs7CisKKwljYXNlIE9QX09QRU5fU1VCRVhQOgorCSAgaWYgKChib3VuZGFyaWVzICYgMSkgJiYgc3ViZXhwX2lkeCA9PSBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHgpCisJICAgIHJldHVybiAtMTsKKwkgIGJyZWFrOworCisJY2FzZSBPUF9DTE9TRV9TVUJFWFA6CisJICBpZiAoKGJvdW5kYXJpZXMgJiAyKSAmJiBzdWJleHBfaWR4ID09IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCkKKwkgICAgcmV0dXJuIDA7CisJICBicmVhazsKKworCWRlZmF1bHQ6CisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgcmV0dXJuIChib3VuZGFyaWVzICYgMikgPyAxIDogMDsKK30KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX2RzdF9saW1pdHNfY2FsY19wb3MgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IGxpbWl0LAorCQkJICAgaW50IHN1YmV4cF9pZHgsIGludCBmcm9tX25vZGUsIGludCBzdHJfaWR4LAorCQkJICAgaW50IGJrcmVmX2lkeCkKK3sKKyAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmxpbSA9IG1jdHgtPmJrcmVmX2VudHMgKyBsaW1pdDsKKyAgaW50IGJvdW5kYXJpZXM7CisKKyAgLyogSWYgd2UgYXJlIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBzdWJleHByZXNzaW9uLCByZXR1cm4gLTEgb3IgMS4gICovCisgIGlmIChzdHJfaWR4IDwgbGltLT5zdWJleHBfZnJvbSkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKGxpbS0+c3ViZXhwX3RvIDwgc3RyX2lkeCkKKyAgICByZXR1cm4gMTsKKworICAvKiBJZiB3ZSBhcmUgd2l0aGluIHRoZSBzdWJleHByZXNzaW9uLCByZXR1cm4gMC4gICovCisgIGJvdW5kYXJpZXMgPSAoc3RyX2lkeCA9PSBsaW0tPnN1YmV4cF9mcm9tKTsKKyAgYm91bmRhcmllcyB8PSAoc3RyX2lkeCA9PSBsaW0tPnN1YmV4cF90bykgPDwgMTsKKyAgaWYgKGJvdW5kYXJpZXMgPT0gMCkKKyAgICByZXR1cm4gMDsKKworICAvKiBFbHNlLCBleGFtaW5lIGVwc2lsb24gY2xvc3VyZS4gICovCisgIHJldHVybiBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zXzEgKG1jdHgsIGJvdW5kYXJpZXMsIHN1YmV4cF9pZHgsCisJCQkJICAgICAgZnJvbV9ub2RlLCBia3JlZl9pZHgpOworfQorCisvKiBDaGVjayB0aGUgbGltaXRhdGlvbnMgb2Ygc3ViIGV4cHJlc3Npb25zIExJTUlUUywgYW5kIHJlbW92ZSB0aGUgbm9kZXMKKyAgIHdoaWNoIGFyZSBhZ2FpbnN0IGxpbWl0YXRpb25zIGZyb20gREVTVF9OT0RFUy4gKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19zdWJleHBfbGltaXRzIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9ub2RlX3NldCAqZGVzdF9ub2RlcywKKwkJICAgICBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlcywgcmVfbm9kZV9zZXQgKmxpbWl0cywKKwkJICAgICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqYmtyZWZfZW50cywgaW50IHN0cl9pZHgpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgbm9kZV9pZHgsIGxpbV9pZHg7CisKKyAgZm9yIChsaW1faWR4ID0gMDsgbGltX2lkeCA8IGxpbWl0cy0+bmVsZW07ICsrbGltX2lkeCkKKyAgICB7CisgICAgICBpbnQgc3ViZXhwX2lkeDsKKyAgICAgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICplbnQ7CisgICAgICBlbnQgPSBia3JlZl9lbnRzICsgbGltaXRzLT5lbGVtc1tsaW1faWR4XTsKKworICAgICAgaWYgKHN0cl9pZHggPD0gZW50LT5zdWJleHBfZnJvbSB8fCBlbnQtPnN0cl9pZHggPCBzdHJfaWR4KQorCWNvbnRpbnVlOyAvKiBUaGlzIGlzIHVucmVsYXRlZCBsaW1pdGF0aW9uLiAgKi8KKworICAgICAgc3ViZXhwX2lkeCA9IGRmYS0+bm9kZXNbZW50LT5ub2RlXS5vcHIuaWR4OworICAgICAgaWYgKGVudC0+c3ViZXhwX3RvID09IHN0cl9pZHgpCisJeworCSAgaW50IG9wc19ub2RlID0gLTE7CisJICBpbnQgY2xzX25vZGUgPSAtMTsKKwkgIGZvciAobm9kZV9pZHggPSAwOyBub2RlX2lkeCA8IGRlc3Rfbm9kZXMtPm5lbGVtOyArK25vZGVfaWR4KQorCSAgICB7CisJICAgICAgaW50IG5vZGUgPSBkZXN0X25vZGVzLT5lbGVtc1tub2RlX2lkeF07CisJICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW25vZGVdLnR5cGU7CisJICAgICAgaWYgKHR5cGUgPT0gT1BfT1BFTl9TVUJFWFAKKwkJICAmJiBzdWJleHBfaWR4ID09IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCkKKwkJb3BzX25vZGUgPSBub2RlOworCSAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQCisJCSAgICAgICAmJiBzdWJleHBfaWR4ID09IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCkKKwkJY2xzX25vZGUgPSBub2RlOworCSAgICB9CisKKwkgIC8qIENoZWNrIHRoZSBsaW1pdGF0aW9uIG9mIHRoZSBvcGVuIHN1YmV4cHJlc3Npb24uICAqLworCSAgLyogTm90ZSB0aGF0IChlbnQtPnN1YmV4cF90byA9IHN0cl9pZHggIT0gZW50LT5zdWJleHBfZnJvbSkuICAqLworCSAgaWYgKG9wc19ub2RlID49IDApCisJICAgIHsKKwkgICAgICBlcnIgPSBzdWJfZXBzaWxvbl9zcmNfbm9kZXMgKGRmYSwgb3BzX25vZGUsIGRlc3Rfbm9kZXMsCisJCQkJCSAgIGNhbmRpZGF0ZXMpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJcmV0dXJuIGVycjsKKwkgICAgfQorCisJICAvKiBDaGVjayB0aGUgbGltaXRhdGlvbiBvZiB0aGUgY2xvc2Ugc3ViZXhwcmVzc2lvbi4gICovCisJICBpZiAoY2xzX25vZGUgPj0gMCkKKwkgICAgZm9yIChub2RlX2lkeCA9IDA7IG5vZGVfaWR4IDwgZGVzdF9ub2Rlcy0+bmVsZW07ICsrbm9kZV9pZHgpCisJICAgICAgeworCQlpbnQgbm9kZSA9IGRlc3Rfbm9kZXMtPmVsZW1zW25vZGVfaWR4XTsKKwkJaWYgKCFyZV9ub2RlX3NldF9jb250YWlucyAoZGZhLT5pbnZlY2xvc3VyZXMgKyBub2RlLAorCQkJCQkgICBjbHNfbm9kZSkKKwkJICAgICYmICFyZV9ub2RlX3NldF9jb250YWlucyAoZGZhLT5lY2xvc3VyZXMgKyBub2RlLAorCQkJCQkgICAgICBjbHNfbm9kZSkpCisJCSAgeworCQkgICAgLyogSXQgaXMgYWdhaW5zdCB0aGlzIGxpbWl0YXRpb24uCisJCSAgICAgICBSZW1vdmUgaXQgZm9ybSB0aGUgY3VycmVudCBzaWZ0ZWQgc3RhdGUuICAqLworCQkgICAgZXJyID0gc3ViX2Vwc2lsb25fc3JjX25vZGVzIChkZmEsIG5vZGUsIGRlc3Rfbm9kZXMsCisJCQkJCQkgY2FuZGlkYXRlcyk7CisJCSAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCSAgICAgIHJldHVybiBlcnI7CisJCSAgICAtLW5vZGVfaWR4OworCQkgIH0KKwkgICAgICB9CisJfQorICAgICAgZWxzZSAvKiAoZW50LT5zdWJleHBfdG8gIT0gc3RyX2lkeCkgICovCisJeworCSAgZm9yIChub2RlX2lkeCA9IDA7IG5vZGVfaWR4IDwgZGVzdF9ub2Rlcy0+bmVsZW07ICsrbm9kZV9pZHgpCisJICAgIHsKKwkgICAgICBpbnQgbm9kZSA9IGRlc3Rfbm9kZXMtPmVsZW1zW25vZGVfaWR4XTsKKwkgICAgICByZV90b2tlbl90eXBlX3QgdHlwZSA9IGRmYS0+bm9kZXNbbm9kZV0udHlwZTsKKwkgICAgICBpZiAodHlwZSA9PSBPUF9DTE9TRV9TVUJFWFAgfHwgdHlwZSA9PSBPUF9PUEVOX1NVQkVYUCkKKwkJeworCQkgIGlmIChzdWJleHBfaWR4ICE9IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCkKKwkJICAgIGNvbnRpbnVlOworCQkgIC8qIEl0IGlzIGFnYWluc3QgdGhpcyBsaW1pdGF0aW9uLgorCQkgICAgIFJlbW92ZSBpdCBmb3JtIHRoZSBjdXJyZW50IHNpZnRlZCBzdGF0ZS4gICovCisJCSAgZXJyID0gc3ViX2Vwc2lsb25fc3JjX25vZGVzIChkZmEsIG5vZGUsIGRlc3Rfbm9kZXMsCisJCQkJCSAgICAgICBjYW5kaWRhdGVzKTsKKwkJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCSAgICByZXR1cm4gZXJyOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorc2lmdF9zdGF0ZXNfYmtyZWYgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsCisJCSAgIGludCBzdHJfaWR4LCBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlcykKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBub2RlX2lkeCwgbm9kZTsKKyAgcmVfc2lmdF9jb250ZXh0X3QgbG9jYWxfc2N0eDsKKyAgaW50IGZpcnN0X2lkeCA9IHNlYXJjaF9jdXJfYmtyZWZfZW50cnkgKG1jdHgsIHN0cl9pZHgpOworCisgIGlmIChmaXJzdF9pZHggPT0gLTEpCisgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCisgIGxvY2FsX3NjdHguc2lmdGVkX3N0YXRlcyA9IE5VTEw7IC8qIE1hcmsgdGhhdCBpdCBoYXNuJ3QgYmVlbiBpbml0aWFsaXplZC4gICovCisKKyAgZm9yIChub2RlX2lkeCA9IDA7IG5vZGVfaWR4IDwgY2FuZGlkYXRlcy0+bmVsZW07ICsrbm9kZV9pZHgpCisgICAgeworICAgICAgaW50IGVuYWJsZWRfaWR4OworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGU7CisgICAgICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqZW50cnk7CisgICAgICBub2RlID0gY2FuZGlkYXRlcy0+ZWxlbXNbbm9kZV9pZHhdOworICAgICAgdHlwZSA9IGRmYS0+bm9kZXNbbm9kZV0udHlwZTsKKyAgICAgIC8qIEF2b2lkIGluZmluaXRlIGxvb3AgZm9yIHRoZSBSRXMgbGlrZSAiKClcMSsiLiAgKi8KKyAgICAgIGlmIChub2RlID09IHNjdHgtPmxhc3Rfbm9kZSAmJiBzdHJfaWR4ID09IHNjdHgtPmxhc3Rfc3RyX2lkeCkKKwljb250aW51ZTsKKyAgICAgIGlmICh0eXBlICE9IE9QX0JBQ0tfUkVGKQorCWNvbnRpbnVlOworCisgICAgICBlbnRyeSA9IG1jdHgtPmJrcmVmX2VudHMgKyBmaXJzdF9pZHg7CisgICAgICBlbmFibGVkX2lkeCA9IGZpcnN0X2lkeDsKKyAgICAgIGRvCisJeworCSAgaW50IHN1YmV4cF9sZW47CisJICBpbnQgdG9faWR4OworCSAgaW50IGRzdF9ub2RlOworCSAgaW50IHJldDsKKwkgIHJlX2RmYXN0YXRlX3QgKmN1cl9zdGF0ZTsKKworCSAgaWYgKGVudHJ5LT5ub2RlICE9IG5vZGUpCisJICAgIGNvbnRpbnVlOworCSAgc3ViZXhwX2xlbiA9IGVudHJ5LT5zdWJleHBfdG8gLSBlbnRyeS0+c3ViZXhwX2Zyb207CisJICB0b19pZHggPSBzdHJfaWR4ICsgc3ViZXhwX2xlbjsKKwkgIGRzdF9ub2RlID0gKHN1YmV4cF9sZW4gPyBkZmEtPm5leHRzW25vZGVdCisJCSAgICAgIDogZGZhLT5lZGVzdHNbbm9kZV0uZWxlbXNbMF0pOworCisJICBpZiAodG9faWR4ID4gc2N0eC0+bGFzdF9zdHJfaWR4CisJICAgICAgfHwgc2N0eC0+c2lmdGVkX3N0YXRlc1t0b19pZHhdID09IE5VTEwKKwkgICAgICB8fCAhU1RBVEVfTk9ERV9DT05UQUlOUyAoc2N0eC0+c2lmdGVkX3N0YXRlc1t0b19pZHhdLCBkc3Rfbm9kZSkKKwkgICAgICB8fCBjaGVja19kc3RfbGltaXRzIChtY3R4LCAmc2N0eC0+bGltaXRzLCBub2RlLAorCQkJCSAgIHN0cl9pZHgsIGRzdF9ub2RlLCB0b19pZHgpKQorCSAgICBjb250aW51ZTsKKworCSAgaWYgKGxvY2FsX3NjdHguc2lmdGVkX3N0YXRlcyA9PSBOVUxMKQorCSAgICB7CisJICAgICAgbG9jYWxfc2N0eCA9ICpzY3R4OworCSAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfY29weSAoJmxvY2FsX3NjdHgubGltaXRzLCAmc2N0eC0+bGltaXRzKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gZnJlZV9yZXR1cm47CisJICAgIH0KKwkgIGxvY2FsX3NjdHgubGFzdF9ub2RlID0gbm9kZTsKKwkgIGxvY2FsX3NjdHgubGFzdF9zdHJfaWR4ID0gc3RyX2lkeDsKKwkgIHJldCA9IHJlX25vZGVfc2V0X2luc2VydCAoJmxvY2FsX3NjdHgubGltaXRzLCBlbmFibGVkX2lkeCk7CisJICBpZiAoQkUgKHJldCA8IDAsIDApKQorCSAgICB7CisJICAgICAgZXJyID0gUkVHX0VTUEFDRTsKKwkgICAgICBnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJICBjdXJfc3RhdGUgPSBsb2NhbF9zY3R4LnNpZnRlZF9zdGF0ZXNbc3RyX2lkeF07CisJICBlcnIgPSBzaWZ0X3N0YXRlc19iYWNrd2FyZCAobWN0eCwgJmxvY2FsX3NjdHgpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICBnb3RvIGZyZWVfcmV0dXJuOworCSAgaWYgKHNjdHgtPmxpbWl0ZWRfc3RhdGVzICE9IE5VTEwpCisJICAgIHsKKwkgICAgICBlcnIgPSBtZXJnZV9zdGF0ZV9hcnJheSAoZGZhLCBzY3R4LT5saW1pdGVkX3N0YXRlcywKKwkJCQkgICAgICAgbG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzLAorCQkJCSAgICAgICBzdHJfaWR4ICsgMSk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJICBsb2NhbF9zY3R4LnNpZnRlZF9zdGF0ZXNbc3RyX2lkeF0gPSBjdXJfc3RhdGU7CisJICByZV9ub2RlX3NldF9yZW1vdmUgKCZsb2NhbF9zY3R4LmxpbWl0cywgZW5hYmxlZF9pZHgpOworCisJICAvKiBtY3R4LT5ia3JlZl9lbnRzIG1heSBoYXZlIGNoYW5nZWQsIHJlbG9hZCB0aGUgcG9pbnRlci4gICovCisJICBlbnRyeSA9IG1jdHgtPmJrcmVmX2VudHMgKyBlbmFibGVkX2lkeDsKKwl9CisgICAgICB3aGlsZSAoZW5hYmxlZF9pZHgrKywgZW50cnkrKy0+bW9yZSk7CisgICAgfQorICBlcnIgPSBSRUdfTk9FUlJPUjsKKyBmcmVlX3JldHVybjoKKyAgaWYgKGxvY2FsX3NjdHguc2lmdGVkX3N0YXRlcyAhPSBOVUxMKQorICAgIHsKKyAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZsb2NhbF9zY3R4LmxpbWl0cyk7CisgICAgfQorCisgIHJldHVybiBlcnI7Cit9CisKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorc2lmdF9zdGF0ZXNfaXRlcl9tYiAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwKKwkJICAgICBpbnQgbm9kZV9pZHgsIGludCBzdHJfaWR4LCBpbnQgbWF4X3N0cl9pZHgpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGludCBuYWNjZXB0ZWQ7CisgIC8qIENoZWNrIHRoZSBub2RlIGNhbiBhY2NlcHQgYG11bHRpIGJ5dGUnLiAgKi8KKyAgbmFjY2VwdGVkID0gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGRmYSwgbm9kZV9pZHgsICZtY3R4LT5pbnB1dCwgc3RyX2lkeCk7CisgIGlmIChuYWNjZXB0ZWQgPiAwICYmIHN0cl9pZHggKyBuYWNjZXB0ZWQgPD0gbWF4X3N0cl9pZHggJiYKKyAgICAgICFTVEFURV9OT0RFX0NPTlRBSU5TIChzY3R4LT5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHggKyBuYWNjZXB0ZWRdLAorCQkJICAgIGRmYS0+bmV4dHNbbm9kZV9pZHhdKSkKKyAgICAvKiBUaGUgbm9kZSBjYW4ndCBhY2NlcHQgdGhlIGBtdWx0aSBieXRlJywgb3IgdGhlCisgICAgICAgZGVzdGluYXRpb24gd2FzIGFscmVhZHkgdGhyb3duIGF3YXksIHRoZW4gdGhlIG5vZGUKKyAgICAgICBjb3VsZG4ndCBhY2NlcHQgdGhlIGN1cnJlbnQgaW5wdXQgYG11bHRpIGJ5dGUnLiAgICovCisgICAgbmFjY2VwdGVkID0gMDsKKyAgLyogT3RoZXJ3aXNlLCBpdCBpcyBzdXJlIHRoYXQgdGhlIG5vZGUgY291bGQgYWNjZXB0CisgICAgIGBuYWNjZXB0ZWQnIGJ5dGVzIGlucHV0LiAgKi8KKyAgcmV0dXJuIG5hY2NlcHRlZDsKK30KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisMCisvKiBGdW5jdGlvbnMgZm9yIHN0YXRlIHRyYW5zaXRpb24uICAqLworCisvKiBSZXR1cm4gdGhlIG5leHQgc3RhdGUgdG8gd2hpY2ggdGhlIGN1cnJlbnQgc3RhdGUgU1RBVEUgd2lsbCB0cmFuc2l0IGJ5CisgICBhY2NlcHRpbmcgdGhlIGN1cnJlbnQgaW5wdXQgYnl0ZSwgYW5kIHVwZGF0ZSBTVEFURV9MT0cgaWYgbmVjZXNzYXJ5LgorICAgSWYgU1RBVEUgY2FuIGFjY2VwdCBhIG11bHRpYnl0ZSBjaGFyL2NvbGxhdGluZyBlbGVtZW50L2JhY2sgcmVmZXJlbmNlCisgICB1cGRhdGUgdGhlIGRlc3RpbmF0aW9uIG9mIFNUQVRFX0xPRy4gICovCisKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK2ludGVybmFsX2Z1bmN0aW9uCit0cmFuc2l0X3N0YXRlIChyZWdfZXJyY29kZV90ICplcnIsIHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkgICAgICAgcmVfZGZhc3RhdGVfdCAqc3RhdGUpCit7CisgIHJlX2RmYXN0YXRlX3QgKip0cnRhYmxlOworICB1bnNpZ25lZCBjaGFyIGNoOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgLyogSWYgdGhlIGN1cnJlbnQgc3RhdGUgY2FuIGFjY2VwdCBtdWx0aWJ5dGUuICAqLworICBpZiAoQkUgKHN0YXRlLT5hY2NlcHRfbWIsIDApKQorICAgIHsKKyAgICAgICplcnIgPSB0cmFuc2l0X3N0YXRlX21iIChtY3R4LCBzdGF0ZSk7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBOVUxMOworICAgIH0KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisgIC8qIFRoZW4gZGVjaWRlIHRoZSBuZXh0IHN0YXRlIHdpdGggdGhlIHNpbmdsZSBieXRlLiAgKi8KKyNpZiAwCisgIGlmICgwKQorICAgIC8qIGRvbid0IHVzZSB0cmFuc2l0aW9uIHRhYmxlICAqLworICAgIHJldHVybiB0cmFuc2l0X3N0YXRlX3NiIChlcnIsIG1jdHgsIHN0YXRlKTsKKyNlbmRpZgorCisgIC8qIFVzZSB0cmFuc2l0aW9uIHRhYmxlICAqLworICBjaCA9IHJlX3N0cmluZ19mZXRjaF9ieXRlICgmbWN0eC0+aW5wdXQpOworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIHRydGFibGUgPSBzdGF0ZS0+dHJ0YWJsZTsKKyAgICAgIGlmIChCRSAodHJ0YWJsZSAhPSBOVUxMLCAxKSkKKwlyZXR1cm4gdHJ0YWJsZVtjaF07CisKKyAgICAgIHRydGFibGUgPSBzdGF0ZS0+d29yZF90cnRhYmxlOworICAgICAgaWYgKEJFICh0cnRhYmxlICE9IE5VTEwsIDEpKQorCXsKKwkgIHVuc2lnbmVkIGludCBjb250ZXh0OworCSAgY29udGV4dAorCSAgICA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsCisJCQkJICAgIHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpIC0gMSwKKwkJCQkgICAgbWN0eC0+ZWZsYWdzKTsKKwkgIGlmIChJU19XT1JEX0NPTlRFWFQgKGNvbnRleHQpKQorCSAgICByZXR1cm4gdHJ0YWJsZVtjaCArIFNCQ19NQVhdOworCSAgZWxzZQorCSAgICByZXR1cm4gdHJ0YWJsZVtjaF07CisJfQorCisgICAgICBpZiAoIWJ1aWxkX3RydGFibGUgKG1jdHgtPmRmYSwgc3RhdGUpKQorCXsKKwkgICplcnIgPSBSRUdfRVNQQUNFOworCSAgcmV0dXJuIE5VTEw7CisJfQorCisgICAgICAvKiBSZXRyeSwgd2Ugbm93IGhhdmUgYSB0cmFuc2l0aW9uIHRhYmxlLiAgKi8KKyAgICB9Cit9CisKKy8qIFVwZGF0ZSB0aGUgc3RhdGVfbG9nIGlmIHdlIG5lZWQgKi8KK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK2ludGVybmFsX2Z1bmN0aW9uCittZXJnZV9zdGF0ZV93aXRoX2xvZyAocmVnX2VycmNvZGVfdCAqZXJyLCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCSAgICAgIHJlX2RmYXN0YXRlX3QgKm5leHRfc3RhdGUpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGludCBjdXJfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCk7CisKKyAgaWYgKGN1cl9pZHggPiBtY3R4LT5zdGF0ZV9sb2dfdG9wKQorICAgIHsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZ1tjdXJfaWR4XSA9IG5leHRfc3RhdGU7CisgICAgICBtY3R4LT5zdGF0ZV9sb2dfdG9wID0gY3VyX2lkeDsKKyAgICB9CisgIGVsc2UgaWYgKG1jdHgtPnN0YXRlX2xvZ1tjdXJfaWR4XSA9PSBOVUxMKQorICAgIHsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZ1tjdXJfaWR4XSA9IG5leHRfc3RhdGU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmVfZGZhc3RhdGVfdCAqcHN0YXRlOworICAgICAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisgICAgICByZV9ub2RlX3NldCBuZXh0X25vZGVzLCAqbG9nX25vZGVzLCAqdGFibGVfbm9kZXMgPSBOVUxMOworICAgICAgLyogSWYgKHN0YXRlX2xvZ1tjdXJfaWR4XSAhPSAwKSwgaXQgaW1wbGllcyB0aGF0IGN1cl9pZHggaXMKKwkgdGhlIGRlc3RpbmF0aW9uIG9mIGEgbXVsdGlieXRlIGNoYXIvY29sbGF0aW5nIGVsZW1lbnQvCisJIGJhY2sgcmVmZXJlbmNlLiAgVGhlbiB0aGUgbmV4dCBzdGF0ZSBpcyB0aGUgdW5pb24gc2V0IG9mCisJIHRoZXNlIGRlc3RpbmF0aW9ucyBhbmQgdGhlIHJlc3VsdHMgb2YgdGhlIHRyYW5zaXRpb24gdGFibGUuICAqLworICAgICAgcHN0YXRlID0gbWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdOworICAgICAgbG9nX25vZGVzID0gcHN0YXRlLT5lbnRyYW5jZV9ub2RlczsKKyAgICAgIGlmIChuZXh0X3N0YXRlICE9IE5VTEwpCisJeworCSAgdGFibGVfbm9kZXMgPSBuZXh0X3N0YXRlLT5lbnRyYW5jZV9ub2RlczsKKwkgICplcnIgPSByZV9ub2RlX3NldF9pbml0X3VuaW9uICgmbmV4dF9ub2RlcywgdGFibGVfbm9kZXMsCisJCQkJCSAgICAgbG9nX25vZGVzKTsKKwkgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBOVUxMOworCX0KKyAgICAgIGVsc2UKKwluZXh0X25vZGVzID0gKmxvZ19ub2RlczsKKyAgICAgIC8qIE5vdGU6IFdlIGFscmVhZHkgYWRkIHRoZSBub2RlcyBvZiB0aGUgaW5pdGlhbCBzdGF0ZSwKKwkgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGFkZCB0aGVtIGhlcmUuICAqLworCisgICAgICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwKKwkJCQkgICAgICByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KSAtIDEsCisJCQkJICAgICAgbWN0eC0+ZWZsYWdzKTsKKyAgICAgIG5leHRfc3RhdGUgPSBtY3R4LT5zdGF0ZV9sb2dbY3VyX2lkeF0KKwk9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoZXJyLCBkZmEsICZuZXh0X25vZGVzLCBjb250ZXh0KTsKKyAgICAgIC8qIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZXJyb3JzIGhlcmUsIHNpbmNlIHRoZSByZXR1cm4gdmFsdWUgb2YKKwkgdGhpcyBmdW5jdGlvbiBpcyBuZXh0X3N0YXRlIGFuZCBFUlIgaXMgYWxyZWFkeSBzZXQuICAqLworCisgICAgICBpZiAodGFibGVfbm9kZXMgIT0gTlVMTCkKKwlyZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisgICAgfQorCisgIGlmIChCRSAoZGZhLT5uYmFja3JlZiwgMCkgJiYgbmV4dF9zdGF0ZSAhPSBOVUxMKQorICAgIHsKKyAgICAgIC8qIENoZWNrIE9QX09QRU5fU1VCRVhQIGluIHRoZSBjdXJyZW50IHN0YXRlIGluIGNhc2UgdGhhdCB3ZSB1c2UgdGhlbQorCSBsYXRlci4gIFdlIG11c3QgY2hlY2sgdGhlbSBoZXJlLCBzaW5jZSB0aGUgYmFjayByZWZlcmVuY2VzIGluIHRoZQorCSBuZXh0IHN0YXRlIG1pZ2h0IHVzZSB0aGVtLiAgKi8KKyAgICAgICplcnIgPSBjaGVja19zdWJleHBfbWF0Y2hpbmdfdG9wIChtY3R4LCAmbmV4dF9zdGF0ZS0+bm9kZXMsCisJCQkJCWN1cl9pZHgpOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gTlVMTDsKKworICAgICAgLyogSWYgdGhlIG5leHQgc3RhdGUgaGFzIGJhY2sgcmVmZXJlbmNlcy4gICovCisgICAgICBpZiAobmV4dF9zdGF0ZS0+aGFzX2JhY2tyZWYpCisJeworCSAgKmVyciA9IHRyYW5zaXRfc3RhdGVfYmtyZWYgKG1jdHgsICZuZXh0X3N0YXRlLT5ub2Rlcyk7CisJICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gTlVMTDsKKwkgIG5leHRfc3RhdGUgPSBtY3R4LT5zdGF0ZV9sb2dbY3VyX2lkeF07CisJfQorICAgIH0KKworICByZXR1cm4gbmV4dF9zdGF0ZTsKK30KKworLyogU2tpcCBieXRlcyBpbiB0aGUgaW5wdXQgdGhhdCBjb3JyZXNwb25kIHRvIHBhcnQgb2YgYQorICAgbXVsdGktYnl0ZSBtYXRjaCwgdGhlbiBsb29rIGluIHRoZSBsb2cgZm9yIGEgc3RhdGUKKyAgIGZyb20gd2hpY2ggdG8gcmVzdGFydCBtYXRjaGluZy4gICovCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqCitpbnRlcm5hbF9mdW5jdGlvbgorZmluZF9yZWNvdmVyX3N0YXRlIChyZWdfZXJyY29kZV90ICplcnIsIHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCkKK3sKKyAgcmVfZGZhc3RhdGVfdCAqY3VyX3N0YXRlOworICBkbworICAgIHsKKyAgICAgIGludCBtYXggPSBtY3R4LT5zdGF0ZV9sb2dfdG9wOworICAgICAgaW50IGN1cl9zdHJfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCk7CisKKyAgICAgIGRvCisJeworCSAgaWYgKCsrY3VyX3N0cl9pZHggPiBtYXgpCisJICAgIHJldHVybiBOVUxMOworCSAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKCZtY3R4LT5pbnB1dCwgMSk7CisJfQorICAgICAgd2hpbGUgKG1jdHgtPnN0YXRlX2xvZ1tjdXJfc3RyX2lkeF0gPT0gTlVMTCk7CisKKyAgICAgIGN1cl9zdGF0ZSA9IG1lcmdlX3N0YXRlX3dpdGhfbG9nIChlcnIsIG1jdHgsIE5VTEwpOworICAgIH0KKyAgd2hpbGUgKCplcnIgPT0gUkVHX05PRVJST1IgJiYgY3VyX3N0YXRlID09IE5VTEwpOworICByZXR1cm4gY3VyX3N0YXRlOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb25zIGZvciB0cmFuc2l0X3N0YXRlLiAgKi8KKworLyogRnJvbSB0aGUgbm9kZSBzZXQgQ1VSX05PREVTLCBwaWNrIHVwIHRoZSBub2RlcyB3aG9zZSB0eXBlcyBhcmUKKyAgIE9QX09QRU5fU1VCRVhQIGFuZCB3aGljaCBoYXZlIGNvcnJlc3BvbmRpbmcgYmFjayByZWZlcmVuY2VzIGluIHRoZSByZWd1bGFyCisgICBleHByZXNzaW9uLiBBbmQgcmVnaXN0ZXIgdGhlbSB0byB1c2UgdGhlbSBsYXRlciBmb3IgZXZhbHVhdGluZyB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgYmFjayByZWZlcmVuY2VzLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19zdWJleHBfbWF0Y2hpbmdfdG9wIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX25vZGVfc2V0ICpjdXJfbm9kZXMsCisJCQkgICBpbnQgc3RyX2lkeCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgaW50IG5vZGVfaWR4OworICByZWdfZXJyY29kZV90IGVycjsKKworICAvKiBUT0RPOiBUaGlzIGlzbid0IGVmZmljaWVudC4KKwkgICBCZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmUgbm9kZXMgd2hvc2UgdHlwZXMgYXJlCisJICAgT1BfT1BFTl9TVUJFWFAgYW5kIHdob3NlIGluZGV4IGlzIFNVQkVYUF9JRFgsIHdlIG11c3QgY2hlY2sgYWxsCisJICAgbm9kZXMuCisJICAgRS5nLiBSRTogKGEpezJ9ICAqLworICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBjdXJfbm9kZXMtPm5lbGVtOyArK25vZGVfaWR4KQorICAgIHsKKyAgICAgIGludCBub2RlID0gY3VyX25vZGVzLT5lbGVtc1tub2RlX2lkeF07CisgICAgICBpZiAoZGZhLT5ub2Rlc1tub2RlXS50eXBlID09IE9QX09QRU5fU1VCRVhQCisJICAmJiBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHggPCBCSVRTRVRfV09SRF9CSVRTCisJICAmJiAoZGZhLT51c2VkX2JrcmVmX21hcAorCSAgICAgICYgKChiaXRzZXRfd29yZF90KSAxIDw8IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCkpKQorCXsKKwkgIGVyciA9IG1hdGNoX2N0eF9hZGRfc3VidG9wIChtY3R4LCBub2RlLCBzdHJfaWR4KTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwl9CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKyNpZiAwCisvKiBSZXR1cm4gdGhlIG5leHQgc3RhdGUgdG8gd2hpY2ggdGhlIGN1cnJlbnQgc3RhdGUgU1RBVEUgd2lsbCB0cmFuc2l0IGJ5CisgICBhY2NlcHRpbmcgdGhlIGN1cnJlbnQgaW5wdXQgYnl0ZS4gICovCisKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK3RyYW5zaXRfc3RhdGVfc2IgKHJlZ19lcnJjb2RlX3QgKmVyciwgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkgIHJlX2RmYXN0YXRlX3QgKnN0YXRlKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZV9ub2RlX3NldCBuZXh0X25vZGVzOworICByZV9kZmFzdGF0ZV90ICpuZXh0X3N0YXRlOworICBpbnQgbm9kZV9jbnQsIGN1cl9zdHJfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCk7CisgIHVuc2lnbmVkIGludCBjb250ZXh0OworCisgICplcnIgPSByZV9ub2RlX3NldF9hbGxvYyAoJm5leHRfbm9kZXMsIHN0YXRlLT5ub2Rlcy5uZWxlbSArIDEpOworICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiBOVUxMOworICBmb3IgKG5vZGVfY250ID0gMDsgbm9kZV9jbnQgPCBzdGF0ZS0+bm9kZXMubmVsZW07ICsrbm9kZV9jbnQpCisgICAgeworICAgICAgaW50IGN1cl9ub2RlID0gc3RhdGUtPm5vZGVzLmVsZW1zW25vZGVfY250XTsKKyAgICAgIGlmIChjaGVja19ub2RlX2FjY2VwdCAobWN0eCwgZGZhLT5ub2RlcyArIGN1cl9ub2RlLCBjdXJfc3RyX2lkeCkpCisJeworCSAgKmVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmbmV4dF9ub2RlcywKKwkJCQkgICAgZGZhLT5lY2xvc3VyZXMgKyBkZmEtPm5leHRzW2N1cl9ub2RlXSk7CisJICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJm5leHRfbm9kZXMpOworCSAgICAgIHJldHVybiBOVUxMOworCSAgICB9CisJfQorICAgIH0KKyAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsIGN1cl9zdHJfaWR4LCBtY3R4LT5lZmxhZ3MpOworICBuZXh0X3N0YXRlID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0IChlcnIsIGRmYSwgJm5leHRfbm9kZXMsIGNvbnRleHQpOworICAvKiBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGVycm9ycyBoZXJlLCBzaW5jZSB0aGUgcmV0dXJuIHZhbHVlIG9mCisgICAgIHRoaXMgZnVuY3Rpb24gaXMgbmV4dF9zdGF0ZSBhbmQgRVJSIGlzIGFscmVhZHkgc2V0LiAgKi8KKworICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisgIHJlX3N0cmluZ19za2lwX2J5dGVzICgmbWN0eC0+aW5wdXQsIDEpOworICByZXR1cm4gbmV4dF9zdGF0ZTsKK30KKyNlbmRpZgorCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgordHJhbnNpdF9zdGF0ZV9tYiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCByZV9kZmFzdGF0ZV90ICpwc3RhdGUpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgcHN0YXRlLT5ub2Rlcy5uZWxlbTsgKytpKQorICAgIHsKKyAgICAgIHJlX25vZGVfc2V0IGRlc3Rfbm9kZXMsICpuZXdfbm9kZXM7CisgICAgICBpbnQgY3VyX25vZGVfaWR4ID0gcHN0YXRlLT5ub2Rlcy5lbGVtc1tpXTsKKyAgICAgIGludCBuYWNjZXB0ZWQsIGRlc3RfaWR4OworICAgICAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisgICAgICByZV9kZmFzdGF0ZV90ICpkZXN0X3N0YXRlOworCisgICAgICBpZiAoIWRmYS0+bm9kZXNbY3VyX25vZGVfaWR4XS5hY2NlcHRfbWIpCisJY29udGludWU7CisKKyAgICAgIGlmIChkZmEtPm5vZGVzW2N1cl9ub2RlX2lkeF0uY29uc3RyYWludCkKKwl7CisJICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwKKwkJCQkJICByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KSwKKwkJCQkJICBtY3R4LT5lZmxhZ3MpOworCSAgaWYgKE5PVF9TQVRJU0ZZX05FWFRfQ09OU1RSQUlOVCAoZGZhLT5ub2Rlc1tjdXJfbm9kZV9pZHhdLmNvbnN0cmFpbnQsCisJCQkJCSAgIGNvbnRleHQpKQorCSAgICBjb250aW51ZTsKKwl9CisKKyAgICAgIC8qIEhvdyBtYW55IGJ5dGVzIHRoZSBub2RlIGNhbiBhY2NlcHQ/ICAqLworICAgICAgbmFjY2VwdGVkID0gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGRmYSwgY3VyX25vZGVfaWR4LCAmbWN0eC0+aW5wdXQsCisJCQkJCSAgIHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpKTsKKyAgICAgIGlmIChuYWNjZXB0ZWQgPT0gMCkKKwljb250aW51ZTsKKworICAgICAgLyogVGhlIG5vZGUgY2FuIGFjY2VwdHMgYG5hY2NlcHRlZCcgYnl0ZXMuICAqLworICAgICAgZGVzdF9pZHggPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KSArIG5hY2NlcHRlZDsKKyAgICAgIG1jdHgtPm1heF9tYl9lbGVtX2xlbiA9ICgobWN0eC0+bWF4X21iX2VsZW1fbGVuIDwgbmFjY2VwdGVkKSA/IG5hY2NlcHRlZAorCQkJICAgICAgIDogbWN0eC0+bWF4X21iX2VsZW1fbGVuKTsKKyAgICAgIGVyciA9IGNsZWFuX3N0YXRlX2xvZ19pZl9uZWVkZWQgKG1jdHgsIGRlc3RfaWR4KTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworI2lmZGVmIERFQlVHCisgICAgICBhc3NlcnQgKGRmYS0+bmV4dHNbY3VyX25vZGVfaWR4XSAhPSAtMSk7CisjZW5kaWYKKyAgICAgIG5ld19ub2RlcyA9IGRmYS0+ZWNsb3N1cmVzICsgZGZhLT5uZXh0c1tjdXJfbm9kZV9pZHhdOworCisgICAgICBkZXN0X3N0YXRlID0gbWN0eC0+c3RhdGVfbG9nW2Rlc3RfaWR4XTsKKyAgICAgIGlmIChkZXN0X3N0YXRlID09IE5VTEwpCisJZGVzdF9ub2RlcyA9ICpuZXdfbm9kZXM7CisgICAgICBlbHNlCisJeworCSAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF91bmlvbiAoJmRlc3Rfbm9kZXMsCisJCQkJCWRlc3Rfc3RhdGUtPmVudHJhbmNlX25vZGVzLCBuZXdfbm9kZXMpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gZXJyOworCX0KKyAgICAgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBkZXN0X2lkeCAtIDEsCisJCQkJICAgICAgbWN0eC0+ZWZsYWdzKTsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZ1tkZXN0X2lkeF0KKwk9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZGVzdF9ub2RlcywgY29udGV4dCk7CisgICAgICBpZiAoZGVzdF9zdGF0ZSAhPSBOVUxMKQorCXJlX25vZGVfc2V0X2ZyZWUgKCZkZXN0X25vZGVzKTsKKyAgICAgIGlmIChCRSAobWN0eC0+c3RhdGVfbG9nW2Rlc3RfaWR4XSA9PSBOVUxMICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3RyYW5zaXRfc3RhdGVfYmtyZWYgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IGk7CisgIGludCBjdXJfc3RyX2lkeCA9IHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpOworCisgIGZvciAoaSA9IDA7IGkgPCBub2Rlcy0+bmVsZW07ICsraSkKKyAgICB7CisgICAgICBpbnQgZGVzdF9zdHJfaWR4LCBwcmV2X25lbGVtLCBia2NfaWR4OworICAgICAgaW50IG5vZGVfaWR4ID0gbm9kZXMtPmVsZW1zW2ldOworICAgICAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisgICAgICBjb25zdCByZV90b2tlbl90ICpub2RlID0gZGZhLT5ub2RlcyArIG5vZGVfaWR4OworICAgICAgcmVfbm9kZV9zZXQgKm5ld19kZXN0X25vZGVzOworCisgICAgICAvKiBDaGVjayB3aGV0aGVyIGBub2RlJyBpcyBhIGJhY2tyZWZlcmVuY2Ugb3Igbm90LiAgKi8KKyAgICAgIGlmIChub2RlLT50eXBlICE9IE9QX0JBQ0tfUkVGKQorCWNvbnRpbnVlOworCisgICAgICBpZiAobm9kZS0+Y29uc3RyYWludCkKKwl7CisJICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgY3VyX3N0cl9pZHgsCisJCQkJCSAgbWN0eC0+ZWZsYWdzKTsKKwkgIGlmIChOT1RfU0FUSVNGWV9ORVhUX0NPTlNUUkFJTlQgKG5vZGUtPmNvbnN0cmFpbnQsIGNvbnRleHQpKQorCSAgICBjb250aW51ZTsKKwl9CisKKyAgICAgIC8qIGBub2RlJyBpcyBhIGJhY2tyZWZlcmVuY2UuCisJIENoZWNrIHRoZSBzdWJzdHJpbmcgd2hpY2ggdGhlIHN1YnN0cmluZyBtYXRjaGVkLiAgKi8KKyAgICAgIGJrY19pZHggPSBtY3R4LT5uYmtyZWZfZW50czsKKyAgICAgIGVyciA9IGdldF9zdWJleHAgKG1jdHgsIG5vZGVfaWR4LCBjdXJfc3RyX2lkeCk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJZ290byBmcmVlX3JldHVybjsKKworICAgICAgLyogQW5kIGFkZCB0aGUgZXBzaWxvbiBjbG9zdXJlcyAod2hpY2ggaXMgYG5ld19kZXN0X25vZGVzJykgb2YKKwkgdGhlIGJhY2tyZWZlcmVuY2UgdG8gYXBwcm9wcmlhdGUgc3RhdGVfbG9nLiAgKi8KKyNpZmRlZiBERUJVRworICAgICAgYXNzZXJ0IChkZmEtPm5leHRzW25vZGVfaWR4XSAhPSAtMSk7CisjZW5kaWYKKyAgICAgIGZvciAoOyBia2NfaWR4IDwgbWN0eC0+bmJrcmVmX2VudHM7ICsrYmtjX2lkeCkKKwl7CisJICBpbnQgc3ViZXhwX2xlbjsKKwkgIHJlX2RmYXN0YXRlX3QgKmRlc3Rfc3RhdGU7CisJICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqYmtyZWZfZW50OworCSAgYmtyZWZfZW50ID0gbWN0eC0+YmtyZWZfZW50cyArIGJrY19pZHg7CisJICBpZiAoYmtyZWZfZW50LT5ub2RlICE9IG5vZGVfaWR4IHx8IGJrcmVmX2VudC0+c3RyX2lkeCAhPSBjdXJfc3RyX2lkeCkKKwkgICAgY29udGludWU7CisJICBzdWJleHBfbGVuID0gYmtyZWZfZW50LT5zdWJleHBfdG8gLSBia3JlZl9lbnQtPnN1YmV4cF9mcm9tOworCSAgbmV3X2Rlc3Rfbm9kZXMgPSAoc3ViZXhwX2xlbiA9PSAwCisJCQkgICAgPyBkZmEtPmVjbG9zdXJlcyArIGRmYS0+ZWRlc3RzW25vZGVfaWR4XS5lbGVtc1swXQorCQkJICAgIDogZGZhLT5lY2xvc3VyZXMgKyBkZmEtPm5leHRzW25vZGVfaWR4XSk7CisJICBkZXN0X3N0cl9pZHggPSAoY3VyX3N0cl9pZHggKyBia3JlZl9lbnQtPnN1YmV4cF90bworCQkJICAtIGJrcmVmX2VudC0+c3ViZXhwX2Zyb20pOworCSAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsIGRlc3Rfc3RyX2lkeCAtIDEsCisJCQkJCSAgbWN0eC0+ZWZsYWdzKTsKKwkgIGRlc3Rfc3RhdGUgPSBtY3R4LT5zdGF0ZV9sb2dbZGVzdF9zdHJfaWR4XTsKKwkgIHByZXZfbmVsZW0gPSAoKG1jdHgtPnN0YXRlX2xvZ1tjdXJfc3RyX2lkeF0gPT0gTlVMTCkgPyAwCisJCQk6IG1jdHgtPnN0YXRlX2xvZ1tjdXJfc3RyX2lkeF0tPm5vZGVzLm5lbGVtKTsKKwkgIC8qIEFkZCBgbmV3X2Rlc3Rfbm9kZScgdG8gc3RhdGVfbG9nLiAgKi8KKwkgIGlmIChkZXN0X3N0YXRlID09IE5VTEwpCisJICAgIHsKKwkgICAgICBtY3R4LT5zdGF0ZV9sb2dbZGVzdF9zdHJfaWR4XQorCQk9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCBuZXdfZGVzdF9ub2RlcywKKwkJCQkJICAgIGNvbnRleHQpOworCSAgICAgIGlmIChCRSAobWN0eC0+c3RhdGVfbG9nW2Rlc3Rfc3RyX2lkeF0gPT0gTlVMTAorCQkgICAgICAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldCBkZXN0X25vZGVzOworCSAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfdW5pb24gKCZkZXN0X25vZGVzLAorCQkJCQkgICAgZGVzdF9zdGF0ZS0+ZW50cmFuY2Vfbm9kZXMsCisJCQkJCSAgICBuZXdfZGVzdF9ub2Rlcyk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQl7CisJCSAgcmVfbm9kZV9zZXRfZnJlZSAoJmRlc3Rfbm9kZXMpOworCQkgIGdvdG8gZnJlZV9yZXR1cm47CisJCX0KKwkgICAgICBtY3R4LT5zdGF0ZV9sb2dbZGVzdF9zdHJfaWR4XQorCQk9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZGVzdF9ub2RlcywgY29udGV4dCk7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJmRlc3Rfbm9kZXMpOworCSAgICAgIGlmIChCRSAobWN0eC0+c3RhdGVfbG9nW2Rlc3Rfc3RyX2lkeF0gPT0gTlVMTAorCQkgICAgICAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJICAvKiBXZSBuZWVkIHRvIGNoZWNrIHJlY3Vyc2l2ZWx5IGlmIHRoZSBiYWNrcmVmZXJlbmNlIGNhbiBlcHNpbG9uCisJICAgICB0cmFuc2l0LiAgKi8KKwkgIGlmIChzdWJleHBfbGVuID09IDAKKwkgICAgICAmJiBtY3R4LT5zdGF0ZV9sb2dbY3VyX3N0cl9pZHhdLT5ub2Rlcy5uZWxlbSA+IHByZXZfbmVsZW0pCisJICAgIHsKKwkgICAgICBlcnIgPSBjaGVja19zdWJleHBfbWF0Y2hpbmdfdG9wIChtY3R4LCBuZXdfZGVzdF9ub2RlcywKKwkJCQkJICAgICAgIGN1cl9zdHJfaWR4KTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gZnJlZV9yZXR1cm47CisJICAgICAgZXJyID0gdHJhbnNpdF9zdGF0ZV9ia3JlZiAobWN0eCwgbmV3X2Rlc3Rfbm9kZXMpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCX0KKyAgICB9CisgIGVyciA9IFJFR19OT0VSUk9SOworIGZyZWVfcmV0dXJuOgorICByZXR1cm4gZXJyOworfQorCisvKiBFbnVtZXJhdGUgYWxsIHRoZSBjYW5kaWRhdGVzIHdoaWNoIHRoZSBiYWNrcmVmZXJlbmNlIEJLUkVGX05PREUgY2FuIG1hdGNoCisgICBhdCBCS1JFRl9TVFJfSURYLCBhbmQgcmVnaXN0ZXIgdGhlbSBieSBtYXRjaF9jdHhfYWRkX2VudHJ5KCkuCisgICBOb3RlIHRoYXQgd2UgbWlnaHQgY29sbGVjdCBpbmFwcHJvcHJpYXRlIGNhbmRpZGF0ZXMgaGVyZS4KKyAgIEhvd2V2ZXIsIHRoZSBjb3N0IG9mIGNoZWNraW5nIHRoZW0gc3RyaWN0bHkgaGVyZSBpcyB0b28gaGlnaCwgdGhlbiB3ZQorICAgZGVsYXkgdGhlc2UgY2hlY2tpbmcgZm9yIHBydW5lX2ltcG9zc2libGVfbm9kZXMoKS4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorZ2V0X3N1YmV4cCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgYmtyZWZfbm9kZSwgaW50IGJrcmVmX3N0cl9pZHgpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGludCBzdWJleHBfbnVtLCBzdWJfdG9wX2lkeDsKKyAgY29uc3QgY2hhciAqYnVmID0gKGNvbnN0IGNoYXIgKikgcmVfc3RyaW5nX2dldF9idWZmZXIgKCZtY3R4LT5pbnB1dCk7CisgIC8qIFJldHVybiBpZiB3ZSBoYXZlIGFscmVhZHkgY2hlY2tlZCBCS1JFRl9OT0RFIGF0IEJLUkVGX1NUUl9JRFguICAqLworICBpbnQgY2FjaGVfaWR4ID0gc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAobWN0eCwgYmtyZWZfc3RyX2lkeCk7CisgIGlmIChjYWNoZV9pZHggIT0gLTEpCisgICAgeworICAgICAgY29uc3Qgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmVudHJ5CisJPSBtY3R4LT5ia3JlZl9lbnRzICsgY2FjaGVfaWR4OworICAgICAgZG8KKwlpZiAoZW50cnktPm5vZGUgPT0gYmtyZWZfbm9kZSkKKwkgIHJldHVybiBSRUdfTk9FUlJPUjsgLyogV2UgYWxyZWFkeSBjaGVja2VkIGl0LiAgKi8KKyAgICAgIHdoaWxlIChlbnRyeSsrLT5tb3JlKTsKKyAgICB9CisKKyAgc3ViZXhwX251bSA9IGRmYS0+bm9kZXNbYmtyZWZfbm9kZV0ub3ByLmlkeDsKKworICAvKiBGb3IgZWFjaCBzdWIgZXhwcmVzc2lvbiAgKi8KKyAgZm9yIChzdWJfdG9wX2lkeCA9IDA7IHN1Yl90b3BfaWR4IDwgbWN0eC0+bnN1Yl90b3BzOyArK3N1Yl90b3BfaWR4KQorICAgIHsKKyAgICAgIHJlZ19lcnJjb2RlX3QgZXJyOworICAgICAgcmVfc3ViX21hdGNoX3RvcF90ICpzdWJfdG9wID0gbWN0eC0+c3ViX3RvcHNbc3ViX3RvcF9pZHhdOworICAgICAgcmVfc3ViX21hdGNoX2xhc3RfdCAqc3ViX2xhc3Q7CisgICAgICBpbnQgc3ViX2xhc3RfaWR4LCBzbF9zdHIsIGJrcmVmX3N0cl9vZmY7CisKKyAgICAgIGlmIChkZmEtPm5vZGVzW3N1Yl90b3AtPm5vZGVdLm9wci5pZHggIT0gc3ViZXhwX251bSkKKwljb250aW51ZTsgLyogSXQgaXNuJ3QgcmVsYXRlZC4gICovCisKKyAgICAgIHNsX3N0ciA9IHN1Yl90b3AtPnN0cl9pZHg7CisgICAgICBia3JlZl9zdHJfb2ZmID0gYmtyZWZfc3RyX2lkeDsKKyAgICAgIC8qIEF0IGZpcnN0LCBjaGVjayB0aGUgbGFzdCBub2RlIG9mIHN1YiBleHByZXNzaW9ucyB3ZSBhbHJlYWR5CisJIGV2YWx1YXRlZC4gICovCisgICAgICBmb3IgKHN1Yl9sYXN0X2lkeCA9IDA7IHN1Yl9sYXN0X2lkeCA8IHN1Yl90b3AtPm5sYXN0czsgKytzdWJfbGFzdF9pZHgpCisJeworCSAgaW50IHNsX3N0cl9kaWZmOworCSAgc3ViX2xhc3QgPSBzdWJfdG9wLT5sYXN0c1tzdWJfbGFzdF9pZHhdOworCSAgc2xfc3RyX2RpZmYgPSBzdWJfbGFzdC0+c3RyX2lkeCAtIHNsX3N0cjsKKwkgIC8qIFRoZSBtYXRjaGVkIHN0cmluZyBieSB0aGUgc3ViIGV4cHJlc3Npb24gbWF0Y2ggd2l0aCB0aGUgc3Vic3RyaW5nCisJICAgICBhdCB0aGUgYmFjayByZWZlcmVuY2U/ICAqLworCSAgaWYgKHNsX3N0cl9kaWZmID4gMCkKKwkgICAgeworCSAgICAgIGlmIChCRSAoYmtyZWZfc3RyX29mZiArIHNsX3N0cl9kaWZmID4gbWN0eC0+aW5wdXQudmFsaWRfbGVuLCAwKSkKKwkJeworCQkgIC8qIE5vdCBlbm91Z2ggY2hhcnMgZm9yIGEgc3VjY2Vzc2Z1bCBtYXRjaC4gICovCisJCSAgaWYgKGJrcmVmX3N0cl9vZmYgKyBzbF9zdHJfZGlmZiA+IG1jdHgtPmlucHV0LmxlbikKKwkJICAgIGJyZWFrOworCisJCSAgZXJyID0gY2xlYW5fc3RhdGVfbG9nX2lmX25lZWRlZCAobWN0eCwKKwkJCQkJCSAgIGJrcmVmX3N0cl9vZmYKKwkJCQkJCSAgICsgc2xfc3RyX2RpZmYpOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIHJldHVybiBlcnI7CisJCSAgYnVmID0gKGNvbnN0IGNoYXIgKikgcmVfc3RyaW5nX2dldF9idWZmZXIgKCZtY3R4LT5pbnB1dCk7CisJCX0KKwkgICAgICBpZiAobWVtY21wIChidWYgKyBia3JlZl9zdHJfb2ZmLCBidWYgKyBzbF9zdHIsIHNsX3N0cl9kaWZmKSAhPSAwKQorCQkvKiBXZSBkb24ndCBuZWVkIHRvIHNlYXJjaCB0aGlzIHN1YiBleHByZXNzaW9uIGFueSBtb3JlLiAgKi8KKwkJYnJlYWs7CisJICAgIH0KKwkgIGJrcmVmX3N0cl9vZmYgKz0gc2xfc3RyX2RpZmY7CisJICBzbF9zdHIgKz0gc2xfc3RyX2RpZmY7CisJICBlcnIgPSBnZXRfc3ViZXhwX3N1YiAobWN0eCwgc3ViX3RvcCwgc3ViX2xhc3QsIGJrcmVmX25vZGUsCisJCQkJYmtyZWZfc3RyX2lkeCk7CisKKwkgIC8qIFJlbG9hZCBidWYsIHNpbmNlIHRoZSBwcmVjZWRpbmcgY2FsbCBtaWdodCBoYXZlIHJlYWxsb2NhdGVkCisJICAgICB0aGUgYnVmZmVyLiAgKi8KKwkgIGJ1ZiA9IChjb25zdCBjaGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyICgmbWN0eC0+aW5wdXQpOworCisJICBpZiAoZXJyID09IFJFR19OT01BVENIKQorCSAgICBjb250aW51ZTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwl9CisKKyAgICAgIGlmIChzdWJfbGFzdF9pZHggPCBzdWJfdG9wLT5ubGFzdHMpCisJY29udGludWU7CisgICAgICBpZiAoc3ViX2xhc3RfaWR4ID4gMCkKKwkrK3NsX3N0cjsKKyAgICAgIC8qIFRoZW4sIHNlYXJjaCBmb3IgdGhlIG90aGVyIGxhc3Qgbm9kZXMgb2YgdGhlIHN1YiBleHByZXNzaW9uLiAgKi8KKyAgICAgIGZvciAoOyBzbF9zdHIgPD0gYmtyZWZfc3RyX2lkeDsgKytzbF9zdHIpCisJeworCSAgaW50IGNsc19ub2RlLCBzbF9zdHJfb2ZmOworCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzOworCSAgc2xfc3RyX29mZiA9IHNsX3N0ciAtIHN1Yl90b3AtPnN0cl9pZHg7CisJICAvKiBUaGUgbWF0Y2hlZCBzdHJpbmcgYnkgdGhlIHN1YiBleHByZXNzaW9uIG1hdGNoIHdpdGggdGhlIHN1YnN0cmluZworCSAgICAgYXQgdGhlIGJhY2sgcmVmZXJlbmNlPyAgKi8KKwkgIGlmIChzbF9zdHJfb2ZmID4gMCkKKwkgICAgeworCSAgICAgIGlmIChCRSAoYmtyZWZfc3RyX29mZiA+PSBtY3R4LT5pbnB1dC52YWxpZF9sZW4sIDApKQorCQl7CisJCSAgLyogSWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0LCB3ZSBjYW5ub3QgbWF0Y2guICAqLworCQkgIGlmIChia3JlZl9zdHJfb2ZmID49IG1jdHgtPmlucHV0LmxlbikKKwkJICAgIGJyZWFrOworCisJCSAgZXJyID0gZXh0ZW5kX2J1ZmZlcnMgKG1jdHgpOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIHJldHVybiBlcnI7CisKKwkJICBidWYgPSAoY29uc3QgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoJm1jdHgtPmlucHV0KTsKKwkJfQorCSAgICAgIGlmIChidWYgW2JrcmVmX3N0cl9vZmYrK10gIT0gYnVmW3NsX3N0ciAtIDFdKQorCQlicmVhazsgLyogV2UgZG9uJ3QgbmVlZCB0byBzZWFyY2ggdGhpcyBzdWIgZXhwcmVzc2lvbgorCQkJICBhbnkgbW9yZS4gICovCisJICAgIH0KKwkgIGlmIChtY3R4LT5zdGF0ZV9sb2dbc2xfc3RyXSA9PSBOVUxMKQorCSAgICBjb250aW51ZTsKKwkgIC8qIERvZXMgdGhpcyBzdGF0ZSBoYXZlIGEgJyknIG9mIHRoZSBzdWIgZXhwcmVzc2lvbj8gICovCisJICBub2RlcyA9ICZtY3R4LT5zdGF0ZV9sb2dbc2xfc3RyXS0+bm9kZXM7CisJICBjbHNfbm9kZSA9IGZpbmRfc3ViZXhwX25vZGUgKGRmYSwgbm9kZXMsIHN1YmV4cF9udW0sCisJCQkJICAgICAgIE9QX0NMT1NFX1NVQkVYUCk7CisJICBpZiAoY2xzX25vZGUgPT0gLTEpCisJICAgIGNvbnRpbnVlOyAvKiBOby4gICovCisJICBpZiAoc3ViX3RvcC0+cGF0aCA9PSBOVUxMKQorCSAgICB7CisJICAgICAgc3ViX3RvcC0+cGF0aCA9IGNhbGxvYyAoc2l6ZW9mIChzdGF0ZV9hcnJheV90KSwKKwkJCQkgICAgICBzbF9zdHIgLSBzdWJfdG9wLT5zdHJfaWR4ICsgMSk7CisJICAgICAgaWYgKHN1Yl90b3AtPnBhdGggPT0gTlVMTCkKKwkJcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgIH0KKwkgIC8qIENhbiB0aGUgT1BfT1BFTl9TVUJFWFAgbm9kZSBhcnJpdmUgdGhlIE9QX0NMT1NFX1NVQkVYUCBub2RlCisJICAgICBpbiB0aGUgY3VycmVudCBjb250ZXh0PyAgKi8KKwkgIGVyciA9IGNoZWNrX2Fycml2YWwgKG1jdHgsIHN1Yl90b3AtPnBhdGgsIHN1Yl90b3AtPm5vZGUsCisJCQkgICAgICAgc3ViX3RvcC0+c3RyX2lkeCwgY2xzX25vZGUsIHNsX3N0ciwKKwkJCSAgICAgICBPUF9DTE9TRV9TVUJFWFApOworCSAgaWYgKGVyciA9PSBSRUdfTk9NQVRDSCkKKwkgICAgICBjb250aW51ZTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgICByZXR1cm4gZXJyOworCSAgc3ViX2xhc3QgPSBtYXRjaF9jdHhfYWRkX3N1Ymxhc3QgKHN1Yl90b3AsIGNsc19ub2RlLCBzbF9zdHIpOworCSAgaWYgKEJFIChzdWJfbGFzdCA9PSBOVUxMLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICBlcnIgPSBnZXRfc3ViZXhwX3N1YiAobWN0eCwgc3ViX3RvcCwgc3ViX2xhc3QsIGJrcmVmX25vZGUsCisJCQkJYmtyZWZfc3RyX2lkeCk7CisJICBpZiAoZXJyID09IFJFR19OT01BVENIKQorCSAgICBjb250aW51ZTsKKwl9CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIGdldF9zdWJleHAoKS4gICovCisKKy8qIENoZWNrIFNVQl9MQVNUIGNhbiBhcnJpdmUgdG8gdGhlIGJhY2sgcmVmZXJlbmNlIEJLUkVGX05PREUgYXQgQktSRUZfU1RSLgorICAgSWYgaXQgY2FuIGFycml2ZSwgcmVnaXN0ZXIgdGhlIHN1YiBleHByZXNzaW9uIGV4cHJlc3NlZCB3aXRoIFNVQl9UT1AKKyAgIGFuZCBTVUJfTEFTVC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorZ2V0X3N1YmV4cF9zdWIgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgY29uc3QgcmVfc3ViX21hdGNoX3RvcF90ICpzdWJfdG9wLAorCQlyZV9zdWJfbWF0Y2hfbGFzdF90ICpzdWJfbGFzdCwgaW50IGJrcmVmX25vZGUsIGludCBia3JlZl9zdHIpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgdG9faWR4OworICAvKiBDYW4gdGhlIHN1YmV4cHJlc3Npb24gYXJyaXZlIHRoZSBiYWNrIHJlZmVyZW5jZT8gICovCisgIGVyciA9IGNoZWNrX2Fycml2YWwgKG1jdHgsICZzdWJfbGFzdC0+cGF0aCwgc3ViX2xhc3QtPm5vZGUsCisJCSAgICAgICBzdWJfbGFzdC0+c3RyX2lkeCwgYmtyZWZfbm9kZSwgYmtyZWZfc3RyLAorCQkgICAgICAgT1BfT1BFTl9TVUJFWFApOworICBpZiAoZXJyICE9IFJFR19OT0VSUk9SKQorICAgIHJldHVybiBlcnI7CisgIGVyciA9IG1hdGNoX2N0eF9hZGRfZW50cnkgKG1jdHgsIGJrcmVmX25vZGUsIGJrcmVmX3N0ciwgc3ViX3RvcC0+c3RyX2lkeCwKKwkJCSAgICAgc3ViX2xhc3QtPnN0cl9pZHgpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIGVycjsKKyAgdG9faWR4ID0gYmtyZWZfc3RyICsgc3ViX2xhc3QtPnN0cl9pZHggLSBzdWJfdG9wLT5zdHJfaWR4OworICByZXR1cm4gY2xlYW5fc3RhdGVfbG9nX2lmX25lZWRlZCAobWN0eCwgdG9faWR4KTsKK30KKworLyogRmluZCB0aGUgZmlyc3Qgbm9kZSB3aGljaCBpcyAnKCcgb3IgJyknIGFuZCB3aG9zZSBpbmRleCBpcyBTVUJFWFBfSURYLgorICAgU2VhcmNoICcoJyBpZiBGTF9PUEVOLCBvciBzZWFyY2ggJyknIG90aGVyd2lzZS4KKyAgIFRPRE86IFRoaXMgZnVuY3Rpb24gaXNuJ3QgZWZmaWNpZW50Li4uCisJIEJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZSBub2RlcyB3aG9zZSB0eXBlcyBhcmUKKwkgT1BfT1BFTl9TVUJFWFAgYW5kIHdob3NlIGluZGV4IGlzIFNVQkVYUF9JRFgsIHdlIG11c3QgY2hlY2sgYWxsCisJIG5vZGVzLgorCSBFLmcuIFJFOiAoYSl7Mn0gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitmaW5kX3N1YmV4cF9ub2RlIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsCisJCSAgaW50IHN1YmV4cF9pZHgsIGludCB0eXBlKQoreworICBpbnQgY2xzX2lkeDsKKyAgZm9yIChjbHNfaWR4ID0gMDsgY2xzX2lkeCA8IG5vZGVzLT5uZWxlbTsgKytjbHNfaWR4KQorICAgIHsKKyAgICAgIGludCBjbHNfbm9kZSA9IG5vZGVzLT5lbGVtc1tjbHNfaWR4XTsKKyAgICAgIGNvbnN0IHJlX3Rva2VuX3QgKm5vZGUgPSBkZmEtPm5vZGVzICsgY2xzX25vZGU7CisgICAgICBpZiAobm9kZS0+dHlwZSA9PSB0eXBlCisJICAmJiBub2RlLT5vcHIuaWR4ID09IHN1YmV4cF9pZHgpCisJcmV0dXJuIGNsc19ub2RlOworICAgIH0KKyAgcmV0dXJuIC0xOworfQorCisvKiBDaGVjayB3aGV0aGVyIHRoZSBub2RlIFRPUF9OT0RFIGF0IFRPUF9TVFIgY2FuIGFycml2ZSB0byB0aGUgbm9kZQorICAgTEFTVF9OT0RFIGF0IExBU1RfU1RSLiAgV2UgcmVjb3JkIHRoZSBwYXRoIG9udG8gUEFUSCBzaW5jZSBpdCB3aWxsIGJlCisgICBoZWF2aWx5IHJldXNlZC4KKyAgIFJldHVybiBSRUdfTk9FUlJPUiBpZiBpdCBjYW4gYXJyaXZlLCBvciBSRUdfTk9NQVRDSCBvdGhlcndpc2UuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX2Fycml2YWwgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgc3RhdGVfYXJyYXlfdCAqcGF0aCwgaW50IHRvcF9ub2RlLAorCSAgICAgICBpbnQgdG9wX3N0ciwgaW50IGxhc3Rfbm9kZSwgaW50IGxhc3Rfc3RyLCBpbnQgdHlwZSkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgcmVnX2VycmNvZGVfdCBlcnIgPSBSRUdfTk9FUlJPUjsKKyAgaW50IHN1YmV4cF9udW0sIGJhY2t1cF9jdXJfaWR4LCBzdHJfaWR4LCBudWxsX2NudDsKKyAgcmVfZGZhc3RhdGVfdCAqY3VyX3N0YXRlID0gTlVMTDsKKyAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywgbmV4dF9ub2RlczsKKyAgcmVfZGZhc3RhdGVfdCAqKmJhY2t1cF9zdGF0ZV9sb2c7CisgIHVuc2lnbmVkIGludCBjb250ZXh0OworCisgIHN1YmV4cF9udW0gPSBkZmEtPm5vZGVzW3RvcF9ub2RlXS5vcHIuaWR4OworICAvKiBFeHRlbmQgdGhlIGJ1ZmZlciBpZiB3ZSBuZWVkLiAgKi8KKyAgaWYgKEJFIChwYXRoLT5hbGxvYyA8IGxhc3Rfc3RyICsgbWN0eC0+bWF4X21iX2VsZW1fbGVuICsgMSwgMCkpCisgICAgeworICAgICAgcmVfZGZhc3RhdGVfdCAqKm5ld19hcnJheTsKKyAgICAgIGludCBvbGRfYWxsb2MgPSBwYXRoLT5hbGxvYzsKKyAgICAgIHBhdGgtPmFsbG9jICs9IGxhc3Rfc3RyICsgbWN0eC0+bWF4X21iX2VsZW1fbGVuICsgMTsKKyAgICAgIG5ld19hcnJheSA9IHJlX3JlYWxsb2MgKHBhdGgtPmFycmF5LCByZV9kZmFzdGF0ZV90ICosIHBhdGgtPmFsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2FycmF5ID09IE5VTEwsIDApKQorCXsKKwkgIHBhdGgtPmFsbG9jID0gb2xkX2FsbG9jOworCSAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAgcGF0aC0+YXJyYXkgPSBuZXdfYXJyYXk7CisgICAgICBtZW1zZXQgKG5ld19hcnJheSArIG9sZF9hbGxvYywgJ1wwJywKKwkgICAgICBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikgKiAocGF0aC0+YWxsb2MgLSBvbGRfYWxsb2MpKTsKKyAgICB9CisKKyAgc3RyX2lkeCA9IHBhdGgtPm5leHRfaWR4ID8gcGF0aC0+bmV4dF9pZHggOiB0b3Bfc3RyOworCisgIC8qIFRlbXBvcmFyeSBtb2RpZnkgTUNUWC4gICovCisgIGJhY2t1cF9zdGF0ZV9sb2cgPSBtY3R4LT5zdGF0ZV9sb2c7CisgIGJhY2t1cF9jdXJfaWR4ID0gbWN0eC0+aW5wdXQuY3VyX2lkeDsKKyAgbWN0eC0+c3RhdGVfbG9nID0gcGF0aC0+YXJyYXk7CisgIG1jdHgtPmlucHV0LmN1cl9pZHggPSBzdHJfaWR4OworCisgIC8qIFNldHVwIGluaXRpYWwgbm9kZSBzZXQuICAqLworICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgc3RyX2lkeCAtIDEsIG1jdHgtPmVmbGFncyk7CisgIGlmIChzdHJfaWR4ID09IHRvcF9zdHIpCisgICAgeworICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xICgmbmV4dF9ub2RlcywgdG9wX25vZGUpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisgICAgICBlcnIgPSBjaGVja19hcnJpdmFsX2V4cGFuZF9lY2wgKGRmYSwgJm5leHRfbm9kZXMsIHN1YmV4cF9udW0sIHR5cGUpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgIHJldHVybiBlcnI7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGN1cl9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XTsKKyAgICAgIGlmIChjdXJfc3RhdGUgJiYgY3VyX3N0YXRlLT5oYXNfYmFja3JlZikKKwl7CisJICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKCZuZXh0X25vZGVzLCAmY3VyX3N0YXRlLT5ub2Rlcyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJfQorICAgICAgZWxzZQorCXJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZuZXh0X25vZGVzKTsKKyAgICB9CisgIGlmIChzdHJfaWR4ID09IHRvcF9zdHIgfHwgKGN1cl9zdGF0ZSAmJiBjdXJfc3RhdGUtPmhhc19iYWNrcmVmKSkKKyAgICB7CisgICAgICBpZiAobmV4dF9ub2Rlcy5uZWxlbSkKKwl7CisJICBlcnIgPSBleHBhbmRfYmtyZWZfY2FjaGUgKG1jdHgsICZuZXh0X25vZGVzLCBzdHJfaWR4LAorCQkJCSAgICBzdWJleHBfbnVtLCB0eXBlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgY3VyX3N0YXRlID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZuZXh0X25vZGVzLCBjb250ZXh0KTsKKyAgICAgIGlmIChCRSAoY3VyX3N0YXRlID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwl7CisJICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICByZXR1cm4gZXJyOworCX0KKyAgICAgIG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XSA9IGN1cl9zdGF0ZTsKKyAgICB9CisKKyAgZm9yIChudWxsX2NudCA9IDA7IHN0cl9pZHggPCBsYXN0X3N0ciAmJiBudWxsX2NudCA8PSBtY3R4LT5tYXhfbWJfZWxlbV9sZW47KQorICAgIHsKKyAgICAgIHJlX25vZGVfc2V0X2VtcHR5ICgmbmV4dF9ub2Rlcyk7CisgICAgICBpZiAobWN0eC0+c3RhdGVfbG9nW3N0cl9pZHggKyAxXSkKKwl7CisJICBlcnIgPSByZV9ub2RlX3NldF9tZXJnZSAoJm5leHRfbm9kZXMsCisJCQkJICAgJm1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4ICsgMV0tPm5vZGVzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgaWYgKGN1cl9zdGF0ZSkKKwl7CisJICBlcnIgPSBjaGVja19hcnJpdmFsX2FkZF9uZXh0X25vZGVzIChtY3R4LCBzdHJfaWR4LAorCQkJCQkgICAgICAmY3VyX3N0YXRlLT5ub25fZXBzX25vZGVzLAorCQkJCQkgICAgICAmbmV4dF9ub2Rlcyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKyAgICAgICsrc3RyX2lkeDsKKyAgICAgIGlmIChuZXh0X25vZGVzLm5lbGVtKQorCXsKKwkgIGVyciA9IGNoZWNrX2Fycml2YWxfZXhwYW5kX2VjbCAoZGZhLCAmbmV4dF9ub2Rlcywgc3ViZXhwX251bSwgdHlwZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCSAgZXJyID0gZXhwYW5kX2JrcmVmX2NhY2hlIChtY3R4LCAmbmV4dF9ub2Rlcywgc3RyX2lkeCwKKwkJCQkgICAgc3ViZXhwX251bSwgdHlwZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKyAgICAgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBzdHJfaWR4IC0gMSwgbWN0eC0+ZWZsYWdzKTsKKyAgICAgIGN1cl9zdGF0ZSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmbmV4dF9ub2RlcywgY29udGV4dCk7CisgICAgICBpZiAoQkUgKGN1cl9zdGF0ZSA9PSBOVUxMICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJeworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJm5leHRfbm9kZXMpOworCSAgcmV0dXJuIGVycjsKKwl9CisgICAgICBtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0gPSBjdXJfc3RhdGU7CisgICAgICBudWxsX2NudCA9IGN1cl9zdGF0ZSA9PSBOVUxMID8gbnVsbF9jbnQgKyAxIDogMDsKKyAgICB9CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKyAgY3VyX25vZGVzID0gKG1jdHgtPnN0YXRlX2xvZ1tsYXN0X3N0cl0gPT0gTlVMTCA/IE5VTEwKKwkgICAgICAgOiAmbWN0eC0+c3RhdGVfbG9nW2xhc3Rfc3RyXS0+bm9kZXMpOworICBwYXRoLT5uZXh0X2lkeCA9IHN0cl9pZHg7CisKKyAgLyogRml4IE1DVFguICAqLworICBtY3R4LT5zdGF0ZV9sb2cgPSBiYWNrdXBfc3RhdGVfbG9nOworICBtY3R4LT5pbnB1dC5jdXJfaWR4ID0gYmFja3VwX2N1cl9pZHg7CisKKyAgLyogVGhlbiBjaGVjayB0aGUgY3VycmVudCBub2RlIHNldCBoYXMgdGhlIG5vZGUgTEFTVF9OT0RFLiAgKi8KKyAgaWYgKGN1cl9ub2RlcyAhPSBOVUxMICYmIHJlX25vZGVfc2V0X2NvbnRhaW5zIChjdXJfbm9kZXMsIGxhc3Rfbm9kZSkpCisgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCisgIHJldHVybiBSRUdfTk9NQVRDSDsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgY2hlY2tfYXJyaXZhbC4gICovCisKKy8qIENhbGN1bGF0ZSB0aGUgZGVzdGluYXRpb24gbm9kZXMgb2YgQ1VSX05PREVTIGF0IFNUUl9JRFgsIGFuZCBhcHBlbmQgdGhlbQorICAgdG8gTkVYVF9OT0RFUy4KKyAgIFRPRE86IFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byB0aGUgZnVuY3Rpb25zIHRyYW5zaXRfc3RhdGUqKCksCisJIGhvd2V2ZXIgdGhpcyBmdW5jdGlvbiBoYXMgbWFueSBhZGRpdGlvbmFsIHdvcmtzLgorCSBDYW4ndCB3ZSB1bmlmeSB0aGVtPyAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19hcnJpdmFsX2FkZF9uZXh0X25vZGVzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBzdHJfaWR4LAorCQkJICAgICAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywgcmVfbm9kZV9zZXQgKm5leHRfbm9kZXMpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGludCByZXN1bHQ7CisgIGludCBjdXJfaWR4OworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHJlZ19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisjZW5kaWYKKyAgcmVfbm9kZV9zZXQgdW5pb25fc2V0OworICByZV9ub2RlX3NldF9pbml0X2VtcHR5ICgmdW5pb25fc2V0KTsKKyAgZm9yIChjdXJfaWR4ID0gMDsgY3VyX2lkeCA8IGN1cl9ub2Rlcy0+bmVsZW07ICsrY3VyX2lkeCkKKyAgICB7CisgICAgICBpbnQgbmFjY2VwdGVkID0gMDsKKyAgICAgIGludCBjdXJfbm9kZSA9IGN1cl9ub2Rlcy0+ZWxlbXNbY3VyX2lkeF07CisjaWZkZWYgREVCVUcKKyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gZGZhLT5ub2Rlc1tjdXJfbm9kZV0udHlwZTsKKyAgICAgIGFzc2VydCAoIUlTX0VQU0lMT05fTk9ERSAodHlwZSkpOworI2VuZGlmCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIC8qIElmIHRoZSBub2RlIG1heSBhY2NlcHQgYG11bHRpIGJ5dGUnLiAgKi8KKyAgICAgIGlmIChkZmEtPm5vZGVzW2N1cl9ub2RlXS5hY2NlcHRfbWIpCisJeworCSAgbmFjY2VwdGVkID0gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGRmYSwgY3VyX25vZGUsICZtY3R4LT5pbnB1dCwKKwkJCQkJICAgICAgIHN0cl9pZHgpOworCSAgaWYgKG5hY2NlcHRlZCA+IDEpCisJICAgIHsKKwkgICAgICByZV9kZmFzdGF0ZV90ICpkZXN0X3N0YXRlOworCSAgICAgIGludCBuZXh0X25vZGUgPSBkZmEtPm5leHRzW2N1cl9ub2RlXTsKKwkgICAgICBpbnQgbmV4dF9pZHggPSBzdHJfaWR4ICsgbmFjY2VwdGVkOworCSAgICAgIGRlc3Rfc3RhdGUgPSBtY3R4LT5zdGF0ZV9sb2dbbmV4dF9pZHhdOworCSAgICAgIHJlX25vZGVfc2V0X2VtcHR5ICgmdW5pb25fc2V0KTsKKwkgICAgICBpZiAoZGVzdF9zdGF0ZSkKKwkJeworCQkgIGVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmdW5pb25fc2V0LCAmZGVzdF9zdGF0ZS0+bm9kZXMpOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIHsKKwkJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJCSAgICAgIHJldHVybiBlcnI7CisJCSAgICB9CisJCX0KKwkgICAgICByZXN1bHQgPSByZV9ub2RlX3NldF9pbnNlcnQgKCZ1bmlvbl9zZXQsIG5leHRfbm9kZSk7CisJICAgICAgaWYgKEJFIChyZXN1bHQgPCAwLCAwKSkKKwkJeworCQkgIHJlX25vZGVfc2V0X2ZyZWUgKCZ1bmlvbl9zZXQpOworCQkgIHJldHVybiBSRUdfRVNQQUNFOworCQl9CisJICAgICAgbWN0eC0+c3RhdGVfbG9nW25leHRfaWR4XSA9IHJlX2FjcXVpcmVfc3RhdGUgKCZlcnIsIGRmYSwKKwkJCQkJCQkgICAgJnVuaW9uX3NldCk7CisJICAgICAgaWYgKEJFIChtY3R4LT5zdGF0ZV9sb2dbbmV4dF9pZHhdID09IE5VTEwKKwkJICAgICAgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJeworCQkgIHJlX25vZGVfc2V0X2ZyZWUgKCZ1bmlvbl9zZXQpOworCQkgIHJldHVybiBlcnI7CisJCX0KKwkgICAgfQorCX0KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgICAgaWYgKG5hY2NlcHRlZAorCSAgfHwgY2hlY2tfbm9kZV9hY2NlcHQgKG1jdHgsIGRmYS0+bm9kZXMgKyBjdXJfbm9kZSwgc3RyX2lkeCkpCisJeworCSAgcmVzdWx0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChuZXh0X25vZGVzLCBkZmEtPm5leHRzW2N1cl9ub2RlXSk7CisJICBpZiAoQkUgKHJlc3VsdCA8IDAsIDApKQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgIH0KKwl9CisgICAgfQorICByZV9ub2RlX3NldF9mcmVlICgmdW5pb25fc2V0KTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBGb3IgYWxsIHRoZSBub2RlcyBpbiBDVVJfTk9ERVMsIGFkZCB0aGUgZXBzaWxvbiBjbG9zdXJlcyBvZiB0aGVtIHRvCisgICBDVVJfTk9ERVMsIGhvd2V2ZXIgZXhjbHVkZSB0aGUgbm9kZXMgd2hpY2ggYXJlOgorICAgIC0gaW5zaWRlIHRoZSBzdWIgZXhwcmVzc2lvbiB3aG9zZSBudW1iZXIgaXMgRVhfU1VCRVhQLCBpZiBGTF9PUEVOLgorICAgIC0gb3V0IG9mIHRoZSBzdWIgZXhwcmVzc2lvbiB3aG9zZSBudW1iZXIgaXMgRVhfU1VCRVhQLCBpZiAhRkxfT1BFTi4KKyovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9ub2RlX3NldCAqY3VyX25vZGVzLAorCQkJICBpbnQgZXhfc3ViZXhwLCBpbnQgdHlwZSkKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBpZHgsIG91dHNpZGVfbm9kZTsKKyAgcmVfbm9kZV9zZXQgbmV3X25vZGVzOworI2lmZGVmIERFQlVHCisgIGFzc2VydCAoY3VyX25vZGVzLT5uZWxlbSk7CisjZW5kaWYKKyAgZXJyID0gcmVfbm9kZV9zZXRfYWxsb2MgKCZuZXdfbm9kZXMsIGN1cl9ub2Rlcy0+bmVsZW0pOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIGVycjsKKyAgLyogQ3JlYXRlIGEgbmV3IG5vZGUgc2V0IE5FV19OT0RFUyB3aXRoIHRoZSBub2RlcyB3aGljaCBhcmUgZXBzaWxvbgorICAgICBjbG9zdXJlcyBvZiB0aGUgbm9kZSBpbiBDVVJfTk9ERVMuICAqLworCisgIGZvciAoaWR4ID0gMDsgaWR4IDwgY3VyX25vZGVzLT5uZWxlbTsgKytpZHgpCisgICAgeworICAgICAgaW50IGN1cl9ub2RlID0gY3VyX25vZGVzLT5lbGVtc1tpZHhdOworICAgICAgY29uc3QgcmVfbm9kZV9zZXQgKmVjbG9zdXJlID0gZGZhLT5lY2xvc3VyZXMgKyBjdXJfbm9kZTsKKyAgICAgIG91dHNpZGVfbm9kZSA9IGZpbmRfc3ViZXhwX25vZGUgKGRmYSwgZWNsb3N1cmUsIGV4X3N1YmV4cCwgdHlwZSk7CisgICAgICBpZiAob3V0c2lkZV9ub2RlID09IC0xKQorCXsKKwkgIC8qIFRoZXJlIGFyZSBubyBwcm9ibGVtYXRpYyBub2RlcywganVzdCBtZXJnZSB0aGVtLiAgKi8KKwkgIGVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmbmV3X25vZGVzLCBlY2xvc3VyZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV3X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFRoZXJlIGFyZSBwcm9ibGVtYXRpYyBub2RlcywgcmUtY2FsY3VsYXRlIGluY3JlbWVudGFsbHkuICAqLworCSAgZXJyID0gY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsX3N1YiAoZGZhLCAmbmV3X25vZGVzLCBjdXJfbm9kZSwKKwkJCQkJICAgICAgZXhfc3ViZXhwLCB0eXBlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXdfbm9kZXMpOworCSAgICAgIHJldHVybiBlcnI7CisJICAgIH0KKwl9CisgICAgfQorICByZV9ub2RlX3NldF9mcmVlIChjdXJfbm9kZXMpOworICAqY3VyX25vZGVzID0gbmV3X25vZGVzOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsLgorICAgQ2hlY2sgaW5jcmVtZW50YWxseSB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIFRBUkdFVCwgYW5kIGlmIGl0IGlzbid0CisgICBwcm9ibGVtYXRpYyBhcHBlbmQgaXQgdG8gRFNUX05PREVTLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19hcnJpdmFsX2V4cGFuZF9lY2xfc3ViIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9ub2RlX3NldCAqZHN0X25vZGVzLAorCQkJICAgICAgaW50IHRhcmdldCwgaW50IGV4X3N1YmV4cCwgaW50IHR5cGUpCit7CisgIGludCBjdXJfbm9kZTsKKyAgZm9yIChjdXJfbm9kZSA9IHRhcmdldDsgIXJlX25vZGVfc2V0X2NvbnRhaW5zIChkc3Rfbm9kZXMsIGN1cl9ub2RlKTspCisgICAgeworICAgICAgaW50IGVycjsKKworICAgICAgaWYgKGRmYS0+bm9kZXNbY3VyX25vZGVdLnR5cGUgPT0gdHlwZQorCSAgJiYgZGZhLT5ub2Rlc1tjdXJfbm9kZV0ub3ByLmlkeCA9PSBleF9zdWJleHApCisJeworCSAgaWYgKHR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQKQorCSAgICB7CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkc3Rfbm9kZXMsIGN1cl9ub2RlKTsKKwkgICAgICBpZiAoQkUgKGVyciA9PSAtMSwgMCkpCisJCXJldHVybiBSRUdfRVNQQUNFOworCSAgICB9CisJICBicmVhazsKKwl9CisgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRzdF9ub2RlcywgY3VyX25vZGUpOworICAgICAgaWYgKEJFIChlcnIgPT0gLTEsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgaWYgKGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5uZWxlbSA9PSAwKQorCWJyZWFrOworICAgICAgaWYgKGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5uZWxlbSA9PSAyKQorCXsKKwkgIGVyciA9IGNoZWNrX2Fycml2YWxfZXhwYW5kX2VjbF9zdWIgKGRmYSwgZHN0X25vZGVzLAorCQkJCQkgICAgICBkZmEtPmVkZXN0c1tjdXJfbm9kZV0uZWxlbXNbMV0sCisJCQkJCSAgICAgIGV4X3N1YmV4cCwgdHlwZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJfQorICAgICAgY3VyX25vZGUgPSBkZmEtPmVkZXN0c1tjdXJfbm9kZV0uZWxlbXNbMF07CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKworLyogRm9yIGFsbCB0aGUgYmFjayByZWZlcmVuY2VzIGluIHRoZSBjdXJyZW50IHN0YXRlLCBjYWxjdWxhdGUgdGhlCisgICBkZXN0aW5hdGlvbiBvZiB0aGUgYmFjayByZWZlcmVuY2VzIGJ5IHRoZSBhcHByb3ByaWF0ZSBlbnRyeQorICAgaW4gTUNUWC0+QktSRUZfRU5UUy4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorZXhwYW5kX2JrcmVmX2NhY2hlIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX25vZGVfc2V0ICpjdXJfbm9kZXMsCisJCSAgICBpbnQgY3VyX3N0ciwgaW50IHN1YmV4cF9udW0sIGludCB0eXBlKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IGNhY2hlX2lkeF9zdGFydCA9IHNlYXJjaF9jdXJfYmtyZWZfZW50cnkgKG1jdHgsIGN1cl9zdHIpOworICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqZW50OworCisgIGlmIChjYWNoZV9pZHhfc3RhcnQgPT0gLTEpCisgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCisgcmVzdGFydDoKKyAgZW50ID0gbWN0eC0+YmtyZWZfZW50cyArIGNhY2hlX2lkeF9zdGFydDsKKyAgZG8KKyAgICB7CisgICAgICBpbnQgdG9faWR4LCBuZXh0X25vZGU7CisKKyAgICAgIC8qIElzIHRoaXMgZW50cnkgRU5UIGlzIGFwcHJvcHJpYXRlPyAgKi8KKyAgICAgIGlmICghcmVfbm9kZV9zZXRfY29udGFpbnMgKGN1cl9ub2RlcywgZW50LT5ub2RlKSkKKwljb250aW51ZTsgLyogTm8uICAqLworCisgICAgICB0b19pZHggPSBjdXJfc3RyICsgZW50LT5zdWJleHBfdG8gLSBlbnQtPnN1YmV4cF9mcm9tOworICAgICAgLyogQ2FsY3VsYXRlIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgYmFjayByZWZlcmVuY2UsIGFuZCBhcHBlbmQgaXQKKwkgdG8gTUNUWC0+U1RBVEVfTE9HLiAgKi8KKyAgICAgIGlmICh0b19pZHggPT0gY3VyX3N0cikKKwl7CisJICAvKiBUaGUgYmFja3JlZmVyZW5jZSBkaWQgZXBzaWxvbiB0cmFuc2l0LCB3ZSBtdXN0IHJlLWNoZWNrIGFsbCB0aGUKKwkgICAgIG5vZGUgaW4gdGhlIGN1cnJlbnQgc3RhdGUuICAqLworCSAgcmVfbm9kZV9zZXQgbmV3X2Rlc3RzOworCSAgcmVnX2VycmNvZGVfdCBlcnIyLCBlcnIzOworCSAgbmV4dF9ub2RlID0gZGZhLT5lZGVzdHNbZW50LT5ub2RlXS5lbGVtc1swXTsKKwkgIGlmIChyZV9ub2RlX3NldF9jb250YWlucyAoY3VyX25vZGVzLCBuZXh0X25vZGUpKQorCSAgICBjb250aW51ZTsKKwkgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfMSAoJm5ld19kZXN0cywgbmV4dF9ub2RlKTsKKwkgIGVycjIgPSBjaGVja19hcnJpdmFsX2V4cGFuZF9lY2wgKGRmYSwgJm5ld19kZXN0cywgc3ViZXhwX251bSwgdHlwZSk7CisJICBlcnIzID0gcmVfbm9kZV9zZXRfbWVyZ2UgKGN1cl9ub2RlcywgJm5ld19kZXN0cyk7CisJICByZV9ub2RlX3NldF9mcmVlICgmbmV3X2Rlc3RzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SIHx8IGVycjIgIT0gUkVHX05PRVJST1IKKwkJICB8fCBlcnIzICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIGVyciA9IChlcnIgIT0gUkVHX05PRVJST1IgPyBlcnIKKwkJICAgICA6IChlcnIyICE9IFJFR19OT0VSUk9SID8gZXJyMiA6IGVycjMpKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJICAvKiBUT0RPOiBJdCBpcyBzdGlsbCBpbmVmZmljaWVudC4uLiAgKi8KKwkgIGdvdG8gcmVzdGFydDsKKwl9CisgICAgICBlbHNlCisJeworCSAgcmVfbm9kZV9zZXQgdW5pb25fc2V0OworCSAgbmV4dF9ub2RlID0gZGZhLT5uZXh0c1tlbnQtPm5vZGVdOworCSAgaWYgKG1jdHgtPnN0YXRlX2xvZ1t0b19pZHhdKQorCSAgICB7CisJICAgICAgaW50IHJldDsKKwkgICAgICBpZiAocmVfbm9kZV9zZXRfY29udGFpbnMgKCZtY3R4LT5zdGF0ZV9sb2dbdG9faWR4XS0+bm9kZXMsCisJCQkJCW5leHRfbm9kZSkpCisJCWNvbnRpbnVlOworCSAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfY29weSAoJnVuaW9uX3NldCwKKwkJCQkJICAgJm1jdHgtPnN0YXRlX2xvZ1t0b19pZHhdLT5ub2Rlcyk7CisJICAgICAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0ICgmdW5pb25fc2V0LCBuZXh0X25vZGUpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SIHx8IHJldCA8IDAsIDApKQorCQl7CisJCSAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJCSAgZXJyID0gZXJyICE9IFJFR19OT0VSUk9SID8gZXJyIDogUkVHX0VTUEFDRTsKKwkJICByZXR1cm4gZXJyOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfMSAoJnVuaW9uX3NldCwgbmV4dF9ub2RlKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiBlcnI7CisJICAgIH0KKwkgIG1jdHgtPnN0YXRlX2xvZ1t0b19pZHhdID0gcmVfYWNxdWlyZV9zdGF0ZSAoJmVyciwgZGZhLCAmdW5pb25fc2V0KTsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZ1bmlvbl9zZXQpOworCSAgaWYgKEJFIChtY3R4LT5zdGF0ZV9sb2dbdG9faWR4XSA9PSBOVUxMCisJCSAgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwl9CisgICAgfQorICB3aGlsZSAoZW50KystPm1vcmUpOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEJ1aWxkIHRyYW5zaXRpb24gdGFibGUgZm9yIHRoZSBzdGF0ZS4KKyAgIFJldHVybiAxIGlmIHN1Y2NlZWRlZCwgb3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2J1aWxkX3RydGFibGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX2RmYXN0YXRlX3QgKnN0YXRlKQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IGksIGosIGNoLCBuZWVkX3dvcmRfdHJ0YWJsZSA9IDA7CisgIGJpdHNldF93b3JkX3QgZWxlbSwgbWFzazsKKyAgYm9vbCBkZXN0c19ub2RlX21hbGxvY2VkID0gZmFsc2U7CisgIGJvb2wgZGVzdF9zdGF0ZXNfbWFsbG9jZWQgPSBmYWxzZTsKKyAgaW50IG5kZXN0czsgLyogTnVtYmVyIG9mIHRoZSBkZXN0aW5hdGlvbiBzdGF0ZXMgZnJvbSBgc3RhdGUnLiAgKi8KKyAgcmVfZGZhc3RhdGVfdCAqKnRydGFibGU7CisgIHJlX2RmYXN0YXRlX3QgKipkZXN0X3N0YXRlcyA9IE5VTEwsICoqZGVzdF9zdGF0ZXNfd29yZCwgKipkZXN0X3N0YXRlc19ubDsKKyAgcmVfbm9kZV9zZXQgZm9sbG93cywgKmRlc3RzX25vZGU7CisgIGJpdHNldF90ICpkZXN0c19jaDsKKyAgYml0c2V0X3QgYWNjZXB0YWJsZTsKKworICBzdHJ1Y3QgZGVzdHNfYWxsb2MKKyAgeworICAgIHJlX25vZGVfc2V0IGRlc3RzX25vZGVbU0JDX01BWF07CisgICAgYml0c2V0X3QgZGVzdHNfY2hbU0JDX01BWF07CisgIH0gKmRlc3RzX2FsbG9jOworCisgIC8qIFdlIGJ1aWxkIERGQSBzdGF0ZXMgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIGRlc3RpbmF0aW9uIG5vZGVzCisgICAgIGZyb20gYHN0YXRlJy4gIGBkZXN0c19ub2RlW2ldJyByZXByZXNlbnRzIHRoZSBub2RlcyB3aGljaCBpLXRoCisgICAgIGRlc3RpbmF0aW9uIHN0YXRlIGNvbnRhaW5zLCBhbmQgYGRlc3RzX2NoW2ldJyByZXByZXNlbnRzIHRoZQorICAgICBjaGFyYWN0ZXJzIHdoaWNoIGktdGggZGVzdGluYXRpb24gc3RhdGUgYWNjZXB0cy4gICovCisjaWZkZWYgSEFWRV9BTExPQ0EKKyAgaWYgKF9fbGliY191c2VfYWxsb2NhIChzaXplb2YgKHN0cnVjdCBkZXN0c19hbGxvYykpKQorICAgIGRlc3RzX2FsbG9jID0gKHN0cnVjdCBkZXN0c19hbGxvYyAqKSBhbGxvY2EgKHNpemVvZiAoc3RydWN0IGRlc3RzX2FsbG9jKSk7CisgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIGRlc3RzX2FsbG9jID0gcmVfbWFsbG9jIChzdHJ1Y3QgZGVzdHNfYWxsb2MsIDEpOworICAgICAgaWYgKEJFIChkZXN0c19hbGxvYyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gMDsKKyAgICAgIGRlc3RzX25vZGVfbWFsbG9jZWQgPSB0cnVlOworICAgIH0KKyAgZGVzdHNfbm9kZSA9IGRlc3RzX2FsbG9jLT5kZXN0c19ub2RlOworICBkZXN0c19jaCA9IGRlc3RzX2FsbG9jLT5kZXN0c19jaDsKKworICAvKiBJbml0aWFsaXplIHRyYW5zaXRpb24gdGFibGUuICAqLworICBzdGF0ZS0+d29yZF90cnRhYmxlID0gc3RhdGUtPnRydGFibGUgPSBOVUxMOworCisgIC8qIEF0IGZpcnN0LCBncm91cCBhbGwgbm9kZXMgYmVsb25naW5nIHRvIGBzdGF0ZScgaW50byBzZXZlcmFsCisgICAgIGRlc3RpbmF0aW9ucy4gICovCisgIG5kZXN0cyA9IGdyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzIChkZmEsIHN0YXRlLCBkZXN0c19ub2RlLCBkZXN0c19jaCk7CisgIGlmIChCRSAobmRlc3RzIDw9IDAsIDApKQorICAgIHsKKyAgICAgIGlmIChkZXN0c19ub2RlX21hbGxvY2VkKQorCWZyZWUgKGRlc3RzX2FsbG9jKTsKKyAgICAgIC8qIFJldHVybiAwIGluIGNhc2Ugb2YgYW4gZXJyb3IsIDEgb3RoZXJ3aXNlLiAgKi8KKyAgICAgIGlmIChuZGVzdHMgPT0gMCkKKwl7CisJICBzdGF0ZS0+dHJ0YWJsZSA9IChyZV9kZmFzdGF0ZV90ICoqKQorCSAgICBjYWxsb2MgKHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSwgU0JDX01BWCk7CisJICByZXR1cm4gMTsKKwl9CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgZXJyID0gcmVfbm9kZV9zZXRfYWxsb2MgKCZmb2xsb3dzLCBuZGVzdHMgKyAxKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIGdvdG8gb3V0X2ZyZWU7CisKKyAgLyogQXZvaWQgYXJpdGhtZXRpYyBvdmVyZmxvdyBpbiBzaXplIGNhbGN1bGF0aW9uLiAgKi8KKyAgaWYgKEJFICgoKChTSVpFX01BWCAtIChzaXplb2YgKHJlX25vZGVfc2V0KSArIHNpemVvZiAoYml0c2V0X3QpKSAqIFNCQ19NQVgpCisJICAgIC8gKDMgKiBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikpKQorCSAgIDwgbmRlc3RzKSwKKwkgIDApKQorICAgIGdvdG8gb3V0X2ZyZWU7CisKKyNpZmRlZiBIQVZFX0FMTE9DQQorICBpZiAoX19saWJjX3VzZV9hbGxvY2EgKChzaXplb2YgKHJlX25vZGVfc2V0KSArIHNpemVvZiAoYml0c2V0X3QpKSAqIFNCQ19NQVgKKwkJCSArIG5kZXN0cyAqIDMgKiBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikpKQorICAgIGRlc3Rfc3RhdGVzID0gKHJlX2RmYXN0YXRlX3QgKiopCisgICAgICBhbGxvY2EgKG5kZXN0cyAqIDMgKiBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikpOworICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICBkZXN0X3N0YXRlcyA9IChyZV9kZmFzdGF0ZV90ICoqKQorCW1hbGxvYyAobmRlc3RzICogMyAqIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSk7CisgICAgICBpZiAoQkUgKGRlc3Rfc3RhdGVzID09IE5VTEwsIDApKQorCXsKK291dF9mcmVlOgorCSAgaWYgKGRlc3Rfc3RhdGVzX21hbGxvY2VkKQorCSAgICBmcmVlIChkZXN0X3N0YXRlcyk7CisJICByZV9ub2RlX3NldF9mcmVlICgmZm9sbG93cyk7CisJICBmb3IgKGkgPSAwOyBpIDwgbmRlc3RzOyArK2kpCisJICAgIHJlX25vZGVfc2V0X2ZyZWUgKGRlc3RzX25vZGUgKyBpKTsKKwkgIGlmIChkZXN0c19ub2RlX21hbGxvY2VkKQorCSAgICBmcmVlIChkZXN0c19hbGxvYyk7CisJICByZXR1cm4gMDsKKwl9CisgICAgICBkZXN0X3N0YXRlc19tYWxsb2NlZCA9IHRydWU7CisgICAgfQorICBkZXN0X3N0YXRlc193b3JkID0gZGVzdF9zdGF0ZXMgKyBuZGVzdHM7CisgIGRlc3Rfc3RhdGVzX25sID0gZGVzdF9zdGF0ZXNfd29yZCArIG5kZXN0czsKKyAgYml0c2V0X2VtcHR5IChhY2NlcHRhYmxlKTsKKworICAvKiBUaGVuIGJ1aWxkIHRoZSBzdGF0ZXMgZm9yIGFsbCBkZXN0aW5hdGlvbnMuICAqLworICBmb3IgKGkgPSAwOyBpIDwgbmRlc3RzOyArK2kpCisgICAgeworICAgICAgaW50IG5leHRfbm9kZTsKKyAgICAgIHJlX25vZGVfc2V0X2VtcHR5ICgmZm9sbG93cyk7CisgICAgICAvKiBNZXJnZSB0aGUgZm9sbG93cyBvZiB0aGlzIGRlc3RpbmF0aW9uIHN0YXRlcy4gICovCisgICAgICBmb3IgKGogPSAwOyBqIDwgZGVzdHNfbm9kZVtpXS5uZWxlbTsgKytqKQorCXsKKwkgIG5leHRfbm9kZSA9IGRmYS0+bmV4dHNbZGVzdHNfbm9kZVtpXS5lbGVtc1tqXV07CisJICBpZiAobmV4dF9ub2RlICE9IC0xKQorCSAgICB7CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfbWVyZ2UgKCZmb2xsb3dzLCBkZmEtPmVjbG9zdXJlcyArIG5leHRfbm9kZSk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIG91dF9mcmVlOworCSAgICB9CisJfQorICAgICAgZGVzdF9zdGF0ZXNbaV0gPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgJmZvbGxvd3MsIDApOworICAgICAgaWYgKEJFIChkZXN0X3N0YXRlc1tpXSA9PSBOVUxMICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJZ290byBvdXRfZnJlZTsKKyAgICAgIC8qIElmIHRoZSBuZXcgc3RhdGUgaGFzIGNvbnRleHQgY29uc3RyYWludCwKKwkgYnVpbGQgYXBwcm9wcmlhdGUgc3RhdGVzIGZvciB0aGVzZSBjb250ZXh0cy4gICovCisgICAgICBpZiAoZGVzdF9zdGF0ZXNbaV0tPmhhc19jb25zdHJhaW50KQorCXsKKwkgIGRlc3Rfc3RhdGVzX3dvcmRbaV0gPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgJmZvbGxvd3MsCisJCQkJCQkJICBDT05URVhUX1dPUkQpOworCSAgaWYgKEJFIChkZXN0X3N0YXRlc193b3JkW2ldID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBvdXRfZnJlZTsKKworCSAgaWYgKGRlc3Rfc3RhdGVzW2ldICE9IGRlc3Rfc3RhdGVzX3dvcmRbaV0gJiYgZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwkgICAgbmVlZF93b3JkX3RydGFibGUgPSAxOworCisJICBkZXN0X3N0YXRlc19ubFtpXSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZm9sbG93cywKKwkJCQkJCQlDT05URVhUX05FV0xJTkUpOworCSAgaWYgKEJFIChkZXN0X3N0YXRlc19ubFtpXSA9PSBOVUxMICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIGdvdG8gb3V0X2ZyZWU7CisgCX0KKyAgICAgIGVsc2UKKwl7CisJICBkZXN0X3N0YXRlc193b3JkW2ldID0gZGVzdF9zdGF0ZXNbaV07CisJICBkZXN0X3N0YXRlc19ubFtpXSA9IGRlc3Rfc3RhdGVzW2ldOworCX0KKyAgICAgIGJpdHNldF9tZXJnZSAoYWNjZXB0YWJsZSwgZGVzdHNfY2hbaV0pOworICAgIH0KKworICBpZiAoIUJFIChuZWVkX3dvcmRfdHJ0YWJsZSwgMCkpCisgICAgeworICAgICAgLyogV2UgZG9uJ3QgY2FyZSBhYm91dCB3aGV0aGVyIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzIGEgd29yZAorCSBjaGFyYWN0ZXIsIG9yIHdlIGFyZSBpbiBhIHNpbmdsZS1ieXRlIGNoYXJhY3RlciBzZXQgc28gd2UgY2FuCisJIGRpc2Nlcm4gYnkgbG9va2luZyBhdCB0aGUgY2hhcmFjdGVyIGNvZGU6IGFsbG9jYXRlIGEKKwkgMjU2LWVudHJ5IHRyYW5zaXRpb24gdGFibGUuICAqLworICAgICAgdHJ0YWJsZSA9IHN0YXRlLT50cnRhYmxlID0KKwkocmVfZGZhc3RhdGVfdCAqKikgY2FsbG9jIChzaXplb2YgKHJlX2RmYXN0YXRlX3QgKiksIFNCQ19NQVgpOworICAgICAgaWYgKEJFICh0cnRhYmxlID09IE5VTEwsIDApKQorCWdvdG8gb3V0X2ZyZWU7CisKKyAgICAgIC8qIEZvciBhbGwgY2hhcmFjdGVycyBjaC4uLjogICovCisgICAgICBmb3IgKGkgPSAwOyBpIDwgQklUU0VUX1dPUkRTOyArK2kpCisJZm9yIChjaCA9IGkgKiBCSVRTRVRfV09SRF9CSVRTLCBlbGVtID0gYWNjZXB0YWJsZVtpXSwgbWFzayA9IDE7CisJICAgICBlbGVtOworCSAgICAgbWFzayA8PD0gMSwgZWxlbSA+Pj0gMSwgKytjaCkKKwkgIGlmIChCRSAoZWxlbSAmIDEsIDApKQorCSAgICB7CisJICAgICAgLyogVGhlcmUgbXVzdCBiZSBleGFjdGx5IG9uZSBkZXN0aW5hdGlvbiB3aGljaCBhY2NlcHRzCisJCSBjaGFyYWN0ZXIgY2guICBTZWUgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMuICAqLworCSAgICAgIGZvciAoaiA9IDA7IChkZXN0c19jaFtqXVtpXSAmIG1hc2spID09IDA7ICsraikKKwkJOworCisJICAgICAgLyogai10aCBkZXN0aW5hdGlvbiBhY2NlcHRzIHRoZSB3b3JkIGNoYXJhY3RlciBjaC4gICovCisJICAgICAgaWYgKGRmYS0+d29yZF9jaGFyW2ldICYgbWFzaykKKwkJdHJ0YWJsZVtjaF0gPSBkZXN0X3N0YXRlc193b3JkW2pdOworCSAgICAgIGVsc2UKKwkJdHJ0YWJsZVtjaF0gPSBkZXN0X3N0YXRlc1tqXTsKKwkgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFdlIGNhcmUgYWJvdXQgd2hldGhlciB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBpcyBhIHdvcmQKKwkgY2hhcmFjdGVyLCBhbmQgd2UgYXJlIGluIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgc2V0OiBkaXNjZXJuCisJIGJ5IGxvb2tpbmcgYXQgdGhlIGNoYXJhY3RlciBjb2RlOiBidWlsZCB0d28gMjU2LWVudHJ5CisJIHRyYW5zaXRpb24gdGFibGVzLCBvbmUgc3RhcnRpbmcgYXQgdHJ0YWJsZVswXSBhbmQgb25lCisJIHN0YXJ0aW5nIGF0IHRydGFibGVbU0JDX01BWF0uICAqLworICAgICAgdHJ0YWJsZSA9IHN0YXRlLT53b3JkX3RydGFibGUgPQorCShyZV9kZmFzdGF0ZV90ICoqKSBjYWxsb2MgKHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSwgMiAqIFNCQ19NQVgpOworICAgICAgaWYgKEJFICh0cnRhYmxlID09IE5VTEwsIDApKQorCWdvdG8gb3V0X2ZyZWU7CisKKyAgICAgIC8qIEZvciBhbGwgY2hhcmFjdGVycyBjaC4uLjogICovCisgICAgICBmb3IgKGkgPSAwOyBpIDwgQklUU0VUX1dPUkRTOyArK2kpCisJZm9yIChjaCA9IGkgKiBCSVRTRVRfV09SRF9CSVRTLCBlbGVtID0gYWNjZXB0YWJsZVtpXSwgbWFzayA9IDE7CisJICAgICBlbGVtOworCSAgICAgbWFzayA8PD0gMSwgZWxlbSA+Pj0gMSwgKytjaCkKKwkgIGlmIChCRSAoZWxlbSAmIDEsIDApKQorCSAgICB7CisJICAgICAgLyogVGhlcmUgbXVzdCBiZSBleGFjdGx5IG9uZSBkZXN0aW5hdGlvbiB3aGljaCBhY2NlcHRzCisJCSBjaGFyYWN0ZXIgY2guICBTZWUgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMuICAqLworCSAgICAgIGZvciAoaiA9IDA7IChkZXN0c19jaFtqXVtpXSAmIG1hc2spID09IDA7ICsraikKKwkJOworCisJICAgICAgLyogai10aCBkZXN0aW5hdGlvbiBhY2NlcHRzIHRoZSB3b3JkIGNoYXJhY3RlciBjaC4gICovCisJICAgICAgdHJ0YWJsZVtjaF0gPSBkZXN0X3N0YXRlc1tqXTsKKwkgICAgICB0cnRhYmxlW2NoICsgU0JDX01BWF0gPSBkZXN0X3N0YXRlc193b3JkW2pdOworCSAgICB9CisgICAgfQorCisgIC8qIG5ldyBsaW5lICovCisgIGlmIChiaXRzZXRfY29udGFpbiAoYWNjZXB0YWJsZSwgTkVXTElORV9DSEFSKSkKKyAgICB7CisgICAgICAvKiBUaGUgY3VycmVudCBzdGF0ZSBhY2NlcHRzIG5ld2xpbmUgY2hhcmFjdGVyLiAgKi8KKyAgICAgIGZvciAoaiA9IDA7IGogPCBuZGVzdHM7ICsraikKKwlpZiAoYml0c2V0X2NvbnRhaW4gKGRlc3RzX2NoW2pdLCBORVdMSU5FX0NIQVIpKQorCSAgeworCSAgICAvKiBrLXRoIGRlc3RpbmF0aW9uIGFjY2VwdHMgbmV3bGluZSBjaGFyYWN0ZXIuICAqLworCSAgICB0cnRhYmxlW05FV0xJTkVfQ0hBUl0gPSBkZXN0X3N0YXRlc19ubFtqXTsKKwkgICAgaWYgKG5lZWRfd29yZF90cnRhYmxlKQorCSAgICAgIHRydGFibGVbTkVXTElORV9DSEFSICsgU0JDX01BWF0gPSBkZXN0X3N0YXRlc19ubFtqXTsKKwkgICAgLyogVGhlcmUgbXVzdCBiZSBvbmx5IG9uZSBkZXN0aW5hdGlvbiB3aGljaCBhY2NlcHRzCisJICAgICAgIG5ld2xpbmUuICBTZWUgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMuICAqLworCSAgICBicmVhazsKKwkgIH0KKyAgICB9CisKKyAgaWYgKGRlc3Rfc3RhdGVzX21hbGxvY2VkKQorICAgIGZyZWUgKGRlc3Rfc3RhdGVzKTsKKworICByZV9ub2RlX3NldF9mcmVlICgmZm9sbG93cyk7CisgIGZvciAoaSA9IDA7IGkgPCBuZGVzdHM7ICsraSkKKyAgICByZV9ub2RlX3NldF9mcmVlIChkZXN0c19ub2RlICsgaSk7CisKKyAgaWYgKGRlc3RzX25vZGVfbWFsbG9jZWQpCisgICAgZnJlZSAoZGVzdHNfYWxsb2MpOworCisgIHJldHVybiAxOworfQorCisvKiBHcm91cCBhbGwgbm9kZXMgYmVsb25naW5nIHRvIFNUQVRFIGludG8gc2V2ZXJhbCBkZXN0aW5hdGlvbnMuCisgICBUaGVuIGZvciBhbGwgZGVzdGluYXRpb25zLCBzZXQgdGhlIG5vZGVzIGJlbG9uZ2luZyB0byB0aGUgZGVzdGluYXRpb24KKyAgIHRvIERFU1RTX05PREVbaV0gYW5kIHNldCB0aGUgY2hhcmFjdGVycyBhY2NlcHRlZCBieSB0aGUgZGVzdGluYXRpb24KKyAgIHRvIERFU1RfQ0hbaV0uICBUaGlzIGZ1bmN0aW9uIHJldHVybiB0aGUgbnVtYmVyIG9mIGRlc3RpbmF0aW9ucy4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsCisJCQkgICAgcmVfbm9kZV9zZXQgKmRlc3RzX25vZGUsIGJpdHNldF90ICpkZXN0c19jaCkKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCByZXN1bHQ7CisgIGludCBpLCBqLCBrOworICBpbnQgbmRlc3RzOyAvKiBOdW1iZXIgb2YgdGhlIGRlc3RpbmF0aW9ucyBmcm9tIGBzdGF0ZScuICAqLworICBiaXRzZXRfdCBhY2NlcHRzOyAvKiBDaGFyYWN0ZXJzIGEgbm9kZSBjYW4gYWNjZXB0LiAgKi8KKyAgY29uc3QgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcyA9ICZzdGF0ZS0+bm9kZXM7CisgIGJpdHNldF9lbXB0eSAoYWNjZXB0cyk7CisgIG5kZXN0cyA9IDA7CisKKyAgLyogRm9yIGFsbCB0aGUgbm9kZXMgYmVsb25naW5nIHRvIGBzdGF0ZScsICAqLworICBmb3IgKGkgPSAwOyBpIDwgY3VyX25vZGVzLT5uZWxlbTsgKytpKQorICAgIHsKKyAgICAgIHJlX3Rva2VuX3QgKm5vZGUgPSAmZGZhLT5ub2Rlc1tjdXJfbm9kZXMtPmVsZW1zW2ldXTsKKyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gbm9kZS0+dHlwZTsKKyAgICAgIHVuc2lnbmVkIGludCBjb25zdHJhaW50ID0gbm9kZS0+Y29uc3RyYWludDsKKworICAgICAgLyogRW51bWVyYXRlIGFsbCBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIgdGhpcyBub2RlIGNhbiBhY2NlcHQuICAqLworICAgICAgaWYgKHR5cGUgPT0gQ0hBUkFDVEVSKQorCWJpdHNldF9zZXQgKGFjY2VwdHMsIG5vZGUtPm9wci5jKTsKKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gU0lNUExFX0JSQUNLRVQpCisJeworCSAgYml0c2V0X21lcmdlIChhY2NlcHRzLCBub2RlLT5vcHIuc2Jjc2V0KTsKKwl9CisgICAgICBlbHNlIGlmICh0eXBlID09IE9QX1BFUklPRCkKKwl7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorCSAgICBiaXRzZXRfbWVyZ2UgKGFjY2VwdHMsIGRmYS0+c2JfY2hhcik7CisJICBlbHNlCisjZW5kaWYKKwkgICAgYml0c2V0X3NldF9hbGwgKGFjY2VwdHMpOworCSAgaWYgKCEoZGZhLT5zeW50YXggJiBSRV9ET1RfTkVXTElORSkpCisJICAgIGJpdHNldF9jbGVhciAoYWNjZXB0cywgJ1xuJyk7CisJICBpZiAoZGZhLT5zeW50YXggJiBSRV9ET1RfTk9UX05VTEwpCisJICAgIGJpdHNldF9jbGVhciAoYWNjZXB0cywgJ1wwJyk7CisJfQorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBlbHNlIGlmICh0eXBlID09IE9QX1VURjhfUEVSSU9EKQorCXsKKwkgIG1lbXNldCAoYWNjZXB0cywgJ1x4ZmYnLCBzaXplb2YgKGJpdHNldF90KSAvIDIpOworCSAgaWYgKCEoZGZhLT5zeW50YXggJiBSRV9ET1RfTkVXTElORSkpCisJICAgIGJpdHNldF9jbGVhciAoYWNjZXB0cywgJ1xuJyk7CisJICBpZiAoZGZhLT5zeW50YXggJiBSRV9ET1RfTk9UX05VTEwpCisJICAgIGJpdHNldF9jbGVhciAoYWNjZXB0cywgJ1wwJyk7CisJfQorI2VuZGlmCisgICAgICBlbHNlCisJY29udGludWU7CisKKyAgICAgIC8qIENoZWNrIHRoZSBgYWNjZXB0cycgYW5kIHNpZnQgdGhlIGNoYXJhY3RlcnMgd2hpY2ggYXJlIG5vdAorCSBtYXRjaCBpdCB0aGUgY29udGV4dC4gICovCisgICAgICBpZiAoY29uc3RyYWludCkKKwl7CisJICBpZiAoY29uc3RyYWludCAmIE5FWFRfTkVXTElORV9DT05TVFJBSU5UKQorCSAgICB7CisJICAgICAgYm9vbCBhY2NlcHRzX25ld2xpbmUgPSBiaXRzZXRfY29udGFpbiAoYWNjZXB0cywgTkVXTElORV9DSEFSKTsKKwkgICAgICBiaXRzZXRfZW1wdHkgKGFjY2VwdHMpOworCSAgICAgIGlmIChhY2NlcHRzX25ld2xpbmUpCisJCWJpdHNldF9zZXQgKGFjY2VwdHMsIE5FV0xJTkVfQ0hBUik7CisJICAgICAgZWxzZQorCQljb250aW51ZTsKKwkgICAgfQorCSAgaWYgKGNvbnN0cmFpbnQgJiBORVhUX0VOREJVRl9DT05TVFJBSU5UKQorCSAgICB7CisJICAgICAgYml0c2V0X2VtcHR5IChhY2NlcHRzKTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCisJICBpZiAoY29uc3RyYWludCAmIE5FWFRfV09SRF9DT05TVFJBSU5UKQorCSAgICB7CisJICAgICAgYml0c2V0X3dvcmRfdCBhbnlfc2V0ID0gMDsKKwkgICAgICBpZiAodHlwZSA9PSBDSEFSQUNURVIgJiYgIW5vZGUtPndvcmRfY2hhcikKKwkJeworCQkgIGJpdHNldF9lbXB0eSAoYWNjZXB0cyk7CisJCSAgY29udGludWU7CisJCX0KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorCQlmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRTOyArK2opCisJCSAgYW55X3NldCB8PSAoYWNjZXB0c1tqXSAmPSAoZGZhLT53b3JkX2NoYXJbal0gfCB+ZGZhLT5zYl9jaGFyW2pdKSk7CisJICAgICAgZWxzZQorI2VuZGlmCisJCWZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRFM7ICsraikKKwkJICBhbnlfc2V0IHw9IChhY2NlcHRzW2pdICY9IGRmYS0+d29yZF9jaGFyW2pdKTsKKwkgICAgICBpZiAoIWFueV9zZXQpCisJCWNvbnRpbnVlOworCSAgICB9CisJICBpZiAoY29uc3RyYWludCAmIE5FWFRfTk9UV09SRF9DT05TVFJBSU5UKQorCSAgICB7CisJICAgICAgYml0c2V0X3dvcmRfdCBhbnlfc2V0ID0gMDsKKwkgICAgICBpZiAodHlwZSA9PSBDSEFSQUNURVIgJiYgbm9kZS0+d29yZF9jaGFyKQorCQl7CisJCSAgYml0c2V0X2VtcHR5IChhY2NlcHRzKTsKKwkJICBjb250aW51ZTsKKwkJfQorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJCWZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRFM7ICsraikKKwkJICBhbnlfc2V0IHw9IChhY2NlcHRzW2pdICY9IH4oZGZhLT53b3JkX2NoYXJbal0gJiBkZmEtPnNiX2NoYXJbal0pKTsKKwkgICAgICBlbHNlCisjZW5kaWYKKwkJZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEUzsgKytqKQorCQkgIGFueV9zZXQgfD0gKGFjY2VwdHNbal0gJj0gfmRmYS0+d29yZF9jaGFyW2pdKTsKKwkgICAgICBpZiAoIWFueV9zZXQpCisJCWNvbnRpbnVlOworCSAgICB9CisJfQorCisgICAgICAvKiBUaGVuIGRpdmlkZSBgYWNjZXB0cycgaW50byBERkEgc3RhdGVzLCBvciBjcmVhdGUgYSBuZXcKKwkgc3RhdGUuICBBYm92ZSwgd2UgbWFrZSBzdXJlIHRoYXQgYWNjZXB0cyBpcyBub3QgZW1wdHkuICAqLworICAgICAgZm9yIChqID0gMDsgaiA8IG5kZXN0czsgKytqKQorCXsKKwkgIGJpdHNldF90IGludGVyc2VjOyAvKiBJbnRlcnNlY3Rpb24gc2V0cywgc2VlIGJlbG93LiAgKi8KKwkgIGJpdHNldF90IHJlbWFpbnM7CisJICAvKiBGbGFncywgc2VlIGJlbG93LiAgKi8KKwkgIGJpdHNldF93b3JkX3QgaGFzX2ludGVyc2VjLCBub3Rfc3Vic2V0LCBub3RfY29uc3VtZWQ7CisKKwkgIC8qIE9wdGltaXphdGlvbiwgc2tpcCBpZiB0aGlzIHN0YXRlIGRvZXNuJ3QgYWNjZXB0IHRoZSBjaGFyYWN0ZXIuICAqLworCSAgaWYgKHR5cGUgPT0gQ0hBUkFDVEVSICYmICFiaXRzZXRfY29udGFpbiAoZGVzdHNfY2hbal0sIG5vZGUtPm9wci5jKSkKKwkgICAgY29udGludWU7CisKKwkgIC8qIEVudW1lcmF0ZSB0aGUgaW50ZXJzZWN0aW9uIHNldCBvZiB0aGlzIHN0YXRlIGFuZCBgYWNjZXB0cycuICAqLworCSAgaGFzX2ludGVyc2VjID0gMDsKKwkgIGZvciAoayA9IDA7IGsgPCBCSVRTRVRfV09SRFM7ICsraykKKwkgICAgaGFzX2ludGVyc2VjIHw9IGludGVyc2VjW2tdID0gYWNjZXB0c1trXSAmIGRlc3RzX2NoW2pdW2tdOworCSAgLyogQW5kIHNraXAgaWYgdGhlIGludGVyc2VjdGlvbiBzZXQgaXMgZW1wdHkuICAqLworCSAgaWYgKCFoYXNfaW50ZXJzZWMpCisJICAgIGNvbnRpbnVlOworCisJICAvKiBUaGVuIGNoZWNrIGlmIHRoaXMgc3RhdGUgaXMgYSBzdWJzZXQgb2YgYGFjY2VwdHMnLiAgKi8KKwkgIG5vdF9zdWJzZXQgPSBub3RfY29uc3VtZWQgPSAwOworCSAgZm9yIChrID0gMDsgayA8IEJJVFNFVF9XT1JEUzsgKytrKQorCSAgICB7CisJICAgICAgbm90X3N1YnNldCB8PSByZW1haW5zW2tdID0gfmFjY2VwdHNba10gJiBkZXN0c19jaFtqXVtrXTsKKwkgICAgICBub3RfY29uc3VtZWQgfD0gYWNjZXB0c1trXSA9IGFjY2VwdHNba10gJiB+ZGVzdHNfY2hbal1ba107CisJICAgIH0KKworCSAgLyogSWYgdGhpcyBzdGF0ZSBpc24ndCBhIHN1YnNldCBvZiBgYWNjZXB0cycsIGNyZWF0ZSBhCisJICAgICBuZXcgZ3JvdXAgc3RhdGUsIHdoaWNoIGhhcyB0aGUgYHJlbWFpbnMnLiAqLworCSAgaWYgKG5vdF9zdWJzZXQpCisJICAgIHsKKwkgICAgICBiaXRzZXRfY29weSAoZGVzdHNfY2hbbmRlc3RzXSwgcmVtYWlucyk7CisJICAgICAgYml0c2V0X2NvcHkgKGRlc3RzX2NoW2pdLCBpbnRlcnNlYyk7CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5IChkZXN0c19ub2RlICsgbmRlc3RzLCAmZGVzdHNfbm9kZVtqXSk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIGVycm9yX3JldHVybjsKKwkgICAgICArK25kZXN0czsKKwkgICAgfQorCisJICAvKiBQdXQgdGhlIHBvc2l0aW9uIGluIHRoZSBjdXJyZW50IGdyb3VwLiAqLworCSAgcmVzdWx0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0ICgmZGVzdHNfbm9kZVtqXSwgY3VyX25vZGVzLT5lbGVtc1tpXSk7CisJICBpZiAoQkUgKHJlc3VsdCA8IDAsIDApKQorCSAgICBnb3RvIGVycm9yX3JldHVybjsKKworCSAgLyogSWYgYWxsIGNoYXJhY3RlcnMgYXJlIGNvbnN1bWVkLCBnbyB0byBuZXh0IG5vZGUuICovCisJICBpZiAoIW5vdF9jb25zdW1lZCkKKwkgICAgYnJlYWs7CisJfQorICAgICAgLyogU29tZSBjaGFyYWN0ZXJzIHJlbWFpbiwgY3JlYXRlIGEgbmV3IGdyb3VwLiAqLworICAgICAgaWYgKGogPT0gbmRlc3RzKQorCXsKKwkgIGJpdHNldF9jb3B5IChkZXN0c19jaFtuZGVzdHNdLCBhY2NlcHRzKTsKKwkgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfMSAoZGVzdHNfbm9kZSArIG5kZXN0cywgY3VyX25vZGVzLT5lbGVtc1tpXSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIGdvdG8gZXJyb3JfcmV0dXJuOworCSAgKytuZGVzdHM7CisJICBiaXRzZXRfZW1wdHkgKGFjY2VwdHMpOworCX0KKyAgICB9CisgIHJldHVybiBuZGVzdHM7CisgZXJyb3JfcmV0dXJuOgorICBmb3IgKGogPSAwOyBqIDwgbmRlc3RzOyArK2opCisgICAgcmVfbm9kZV9zZXRfZnJlZSAoZGVzdHNfbm9kZSArIGopOworICByZXR1cm4gLTE7Cit9CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLyogQ2hlY2sgaG93IG1hbnkgYnl0ZXMgdGhlIG5vZGUgYGRmYS0+bm9kZXNbbm9kZV9pZHhdJyBhY2NlcHRzLgorICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIGJ5dGVzIHRoZSBub2RlIGFjY2VwdHMuCisgICBTVFJfSURYIGlzIHRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBpbnB1dCBzdHJpbmcuCisKKyAgIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbm9kZXMgd2hpY2ggY2FuIGFjY2VwdCBvbmUgY2hhcmFjdGVyLCBvcgorICAgb25lIGNvbGxhdGluZyBlbGVtZW50IGxpa2UgJy4nLCAnW2Etel0nLCBvcHBvc2l0ZSB0byB0aGUgb3RoZXIgbm9kZXMKKyAgIGNhbiBvbmx5IGFjY2VwdCBvbmUgYnl0ZS4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorCQkJIGNvbnN0IHJlX3N0cmluZ190ICppbnB1dCwgaW50IHN0cl9pZHgpCit7CisgIGNvbnN0IHJlX3Rva2VuX3QgKm5vZGUgPSBkZmEtPm5vZGVzICsgbm9kZV9pZHg7CisgIGludCBjaGFyX2xlbiwgZWxlbV9sZW47CisgIGludCBpOworICB3aW50X3Qgd2M7CisKKyAgaWYgKEJFIChub2RlLT50eXBlID09IE9QX1VURjhfUEVSSU9ELCAwKSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIGMgPSByZV9zdHJpbmdfYnl0ZV9hdCAoaW5wdXQsIHN0cl9pZHgpLCBkOworICAgICAgaWYgKEJFIChjIDwgMHhjMiwgMSkpCisJcmV0dXJuIDA7CisKKyAgICAgIGlmIChzdHJfaWR4ICsgMiA+IGlucHV0LT5sZW4pCisJcmV0dXJuIDA7CisKKyAgICAgIGQgPSByZV9zdHJpbmdfYnl0ZV9hdCAoaW5wdXQsIHN0cl9pZHggKyAxKTsKKyAgICAgIGlmIChjIDwgMHhlMCkKKwlyZXR1cm4gKGQgPCAweDgwIHx8IGQgPiAweGJmKSA/IDAgOiAyOworICAgICAgZWxzZSBpZiAoYyA8IDB4ZjApCisJeworCSAgY2hhcl9sZW4gPSAzOworCSAgaWYgKGMgPT0gMHhlMCAmJiBkIDwgMHhhMCkKKwkgICAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZSBpZiAoYyA8IDB4ZjgpCisJeworCSAgY2hhcl9sZW4gPSA0OworCSAgaWYgKGMgPT0gMHhmMCAmJiBkIDwgMHg5MCkKKwkgICAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZSBpZiAoYyA8IDB4ZmMpCisJeworCSAgY2hhcl9sZW4gPSA1OworCSAgaWYgKGMgPT0gMHhmOCAmJiBkIDwgMHg4OCkKKwkgICAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZSBpZiAoYyA8IDB4ZmUpCisJeworCSAgY2hhcl9sZW4gPSA2OworCSAgaWYgKGMgPT0gMHhmYyAmJiBkIDwgMHg4NCkKKwkgICAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZQorCXJldHVybiAwOworCisgICAgICBpZiAoc3RyX2lkeCArIGNoYXJfbGVuID4gaW5wdXQtPmxlbikKKwlyZXR1cm4gMDsKKworICAgICAgZm9yIChpID0gMTsgaSA8IGNoYXJfbGVuOyArK2kpCisJeworCSAgZCA9IHJlX3N0cmluZ19ieXRlX2F0IChpbnB1dCwgc3RyX2lkeCArIGkpOworCSAgaWYgKGQgPCAweDgwIHx8IGQgPiAweGJmKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICByZXR1cm4gY2hhcl9sZW47CisgICAgfQorCisgIGNoYXJfbGVuID0gcmVfc3RyaW5nX2NoYXJfc2l6ZV9hdCAoaW5wdXQsIHN0cl9pZHgpOworICBpZiAobm9kZS0+dHlwZSA9PSBPUF9QRVJJT0QpCisgICAgeworICAgICAgaWYgKGNoYXJfbGVuIDw9IDEpCisJcmV0dXJuIDA7CisgICAgICAvKiBGSVhNRTogSSBkb24ndCB0aGluayB0aGlzIGlmIGlzIG5lZWRlZCwgYXMgYm90aCAnXG4nCisJIGFuZCAnXDAnIGFyZSBjaGFyX2xlbiA9PSAxLiAgKi8KKyAgICAgIC8qICcuJyBhY2NlcHRzIGFueSBvbmUgY2hhcmFjdGVyIGV4Y2VwdCB0aGUgZm9sbG93aW5nIHR3byBjYXNlcy4gICovCisgICAgICBpZiAoKCEoZGZhLT5zeW50YXggJiBSRV9ET1RfTkVXTElORSkgJiYKKwkgICByZV9zdHJpbmdfYnl0ZV9hdCAoaW5wdXQsIHN0cl9pZHgpID09ICdcbicpIHx8CisJICAoKGRmYS0+c3ludGF4ICYgUkVfRE9UX05PVF9OVUxMKSAmJgorCSAgIHJlX3N0cmluZ19ieXRlX2F0IChpbnB1dCwgc3RyX2lkeCkgPT0gJ1wwJykpCisJcmV0dXJuIDA7CisgICAgICByZXR1cm4gY2hhcl9sZW47CisgICAgfQorCisgIGVsZW1fbGVuID0gcmVfc3RyaW5nX2VsZW1fc2l6ZV9hdCAoaW5wdXQsIHN0cl9pZHgpOworICB3YyA9IF9fYnRvd2MoKihpbnB1dC0+bWJzK3N0cl9pZHgpKTsKKyAgaWYgKCgoZWxlbV9sZW4gPD0gMSAmJiBjaGFyX2xlbiA8PSAxKSB8fCBjaGFyX2xlbiA9PSAwKSAmJiAod2MgIT0gV0VPRiAmJiB3YyA8IFNCQ19NQVgpKQorICAgIHJldHVybiAwOworCisgIGlmIChub2RlLT50eXBlID09IENPTVBMRVhfQlJBQ0tFVCkKKyAgICB7CisgICAgICBjb25zdCByZV9jaGFyc2V0X3QgKmNzZXQgPSBub2RlLT5vcHIubWJjc2V0OworIyBpZmRlZiBfTElCQworICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGluCisJPSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcmVfc3RyaW5nX2dldF9idWZmZXIgKGlucHV0KSArIHN0cl9pZHgpOworICAgICAgaW50IGo7CisgICAgICB1aW50MzJfdCBucnVsZXM7CisjIGVuZGlmIC8qIF9MSUJDICovCisgICAgICBpbnQgbWF0Y2hfbGVuID0gMDsKKyAgICAgIHdjaGFyX3Qgd2MgPSAoKGNzZXQtPm5yYW5nZXMgfHwgY3NldC0+bmNoYXJfY2xhc3NlcyB8fCBjc2V0LT5ubWJjaGFycykKKwkJICAgID8gcmVfc3RyaW5nX3djaGFyX2F0IChpbnB1dCwgc3RyX2lkeCkgOiAwKTsKKworICAgICAgLyogbWF0Y2ggd2l0aCBtdWx0aWJ5dGUgY2hhcmFjdGVyPyAgKi8KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5ubWJjaGFyczsgKytpKQorCWlmICh3YyA9PSBjc2V0LT5tYmNoYXJzW2ldKQorCSAgeworCSAgICBtYXRjaF9sZW4gPSBjaGFyX2xlbjsKKwkgICAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKwkgIH0KKyAgICAgIC8qIG1hdGNoIHdpdGggY2hhcmFjdGVyX2NsYXNzPyAgKi8KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5uY2hhcl9jbGFzc2VzOyArK2kpCisJeworCSAgd2N0eXBlX3Qgd3QgPSBjc2V0LT5jaGFyX2NsYXNzZXNbaV07CisJICBpZiAoX19pc3djdHlwZSAod2MsIHd0KSkKKwkgICAgeworCSAgICAgIG1hdGNoX2xlbiA9IGNoYXJfbGVuOworCSAgICAgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisJICAgIH0KKwl9CisKKyMgaWZkZWYgX0xJQkMKKyAgICAgIG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisgICAgICBpZiAobnJ1bGVzICE9IDApCisJeworCSAgdW5zaWduZWQgaW50IGluX2NvbGxzZXEgPSAwOworCSAgY29uc3QgaW50MzJfdCAqdGFibGUsICppbmRpcmVjdDsKKwkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKndlaWdodHMsICpleHRyYTsKKwkgIGNvbnN0IGNoYXIgKmNvbGxzZXF3YzsKKwkgIC8qIFRoaXMgI2luY2x1ZGUgZGVmaW5lcyBhIGxvY2FsIGZ1bmN0aW9uISAgKi8KKyMgIGluY2x1ZGUgPGxvY2FsZS93ZWlnaHQuaD4KKworCSAgLyogbWF0Y2ggd2l0aCBjb2xsYXRpbmdfc3ltYm9sPyAgKi8KKwkgIGlmIChjc2V0LT5uY29sbF9zeW1zKQorCSAgICBleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisJICAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQik7CisJICBmb3IgKGkgPSAwOyBpIDwgY3NldC0+bmNvbGxfc3ltczsgKytpKQorCSAgICB7CisJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY29sbF9zeW0gPSBleHRyYSArIGNzZXQtPmNvbGxfc3ltc1tpXTsKKwkgICAgICAvKiBDb21wYXJlIHRoZSBsZW5ndGggb2YgaW5wdXQgY29sbGF0aW5nIGVsZW1lbnQgYW5kCisJCSB0aGUgbGVuZ3RoIG9mIGN1cnJlbnQgY29sbGF0aW5nIGVsZW1lbnQuICAqLworCSAgICAgIGlmICgqY29sbF9zeW0gIT0gZWxlbV9sZW4pCisJCWNvbnRpbnVlOworCSAgICAgIC8qIENvbXBhcmUgZWFjaCBieXRlcy4gICovCisJICAgICAgZm9yIChqID0gMDsgaiA8ICpjb2xsX3N5bTsgaisrKQorCQlpZiAocGluW2pdICE9IGNvbGxfc3ltWzEgKyBqXSkKKwkJICBicmVhazsKKwkgICAgICBpZiAoaiA9PSAqY29sbF9zeW0pCisJCXsKKwkJICAvKiBNYXRjaCBpZiBldmVyeSBieXRlcyBpcyBlcXVhbC4gICovCisJCSAgbWF0Y2hfbGVuID0gajsKKwkJICBnb3RvIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOworCQl9CisJICAgIH0KKworCSAgaWYgKGNzZXQtPm5yYW5nZXMpCisJICAgIHsKKwkgICAgICBpZiAoZWxlbV9sZW4gPD0gY2hhcl9sZW4pCisJCXsKKwkJICBjb2xsc2Vxd2MgPSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfQ09MTFNFUVdDKTsKKwkJICBpbl9jb2xsc2VxID0gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCB3Yyk7CisJCX0KKwkgICAgICBlbHNlCisJCWluX2NvbGxzZXEgPSBmaW5kX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1ZSAocGluLCBlbGVtX2xlbik7CisJICAgIH0KKwkgIC8qIG1hdGNoIHdpdGggcmFuZ2UgZXhwcmVzc2lvbj8gICovCisJICBmb3IgKGkgPSAwOyBpIDwgY3NldC0+bnJhbmdlczsgKytpKQorCSAgICBpZiAoY3NldC0+cmFuZ2Vfc3RhcnRzW2ldIDw9IGluX2NvbGxzZXEKKwkJJiYgaW5fY29sbHNlcSA8PSBjc2V0LT5yYW5nZV9lbmRzW2ldKQorCSAgICAgIHsKKwkJbWF0Y2hfbGVuID0gZWxlbV9sZW47CisJCWdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisJICAgICAgfQorCisJICAvKiBtYXRjaCB3aXRoIGVxdWl2YWxlbmNlX2NsYXNzPyAgKi8KKwkgIGlmIChjc2V0LT5uZXF1aXZfY2xhc3NlcykKKwkgICAgeworCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwID0gcGluOworCSAgICAgIHRhYmxlID0gKGNvbnN0IGludDMyX3QgKikKKwkJX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1RBQkxFTUIpOworCSAgICAgIHdlaWdodHMgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorCQlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfV0VJR0hUTUIpOworCSAgICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwkJX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0VYVFJBTUIpOworCSAgICAgIGluZGlyZWN0ID0gKGNvbnN0IGludDMyX3QgKikKKwkJX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0lORElSRUNUTUIpOworCSAgICAgIGludDMyX3QgaWR4ID0gZmluZGlkeCAoJmNwKTsKKwkgICAgICBpZiAoaWR4ID4gMCkKKwkJZm9yIChpID0gMDsgaSA8IGNzZXQtPm5lcXVpdl9jbGFzc2VzOyArK2kpCisJCSAgeworCQkgICAgaW50MzJfdCBlcXVpdl9jbGFzc19pZHggPSBjc2V0LT5lcXVpdl9jbGFzc2VzW2ldOworCQkgICAgc2l6ZV90IHdlaWdodF9sZW4gPSB3ZWlnaHRzW2lkeCAmIDB4ZmZmZmZmXTsKKwkJICAgIGlmICh3ZWlnaHRfbGVuID09IHdlaWdodHNbZXF1aXZfY2xhc3NfaWR4ICYgMHhmZmZmZmZdCisJCQkmJiAoaWR4ID4+IDI0KSA9PSAoZXF1aXZfY2xhc3NfaWR4ID4+IDI0KSkKKwkJICAgICAgeworCQkJaW50IGNudCA9IDA7CisKKwkJCWlkeCAmPSAweGZmZmZmZjsKKwkJCWVxdWl2X2NsYXNzX2lkeCAmPSAweGZmZmZmZjsKKworCQkJd2hpbGUgKGNudCA8PSB3ZWlnaHRfbGVuCisJCQkgICAgICAgJiYgKHdlaWdodHNbZXF1aXZfY2xhc3NfaWR4ICsgMSArIGNudF0KKwkJCQkgICA9PSB3ZWlnaHRzW2lkeCArIDEgKyBjbnRdKSkKKwkJCSAgKytjbnQ7CisJCQlpZiAoY250ID4gd2VpZ2h0X2xlbikKKwkJCSAgeworCQkJICAgIG1hdGNoX2xlbiA9IGVsZW1fbGVuOworCQkJICAgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisJCQkgIH0KKwkJICAgICAgfQorCQkgIH0KKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKyMgZW5kaWYgLyogX0xJQkMgKi8KKwl7CisJICAvKiBtYXRjaCB3aXRoIHJhbmdlIGV4cHJlc3Npb24/ICAqLworI2lmIF9fR05VQ19fID49IDIKKwkgIHdjaGFyX3QgY21wX2J1ZltdID0ge0wnXDAnLCBMJ1wwJywgd2MsIEwnXDAnLCBMJ1wwJywgTCdcMCd9OworI2Vsc2UKKwkgIHdjaGFyX3QgY21wX2J1ZltdID0ge0wnXDAnLCBMJ1wwJywgTCdcMCcsIEwnXDAnLCBMJ1wwJywgTCdcMCd9OworCSAgY21wX2J1ZlsyXSA9IHdjOworI2VuZGlmCisJICBmb3IgKGkgPSAwOyBpIDwgY3NldC0+bnJhbmdlczsgKytpKQorCSAgICB7CisJICAgICAgY21wX2J1ZlswXSA9IGNzZXQtPnJhbmdlX3N0YXJ0c1tpXTsKKwkgICAgICBjbXBfYnVmWzRdID0gY3NldC0+cmFuZ2VfZW5kc1tpXTsKKwkgICAgICBpZiAod2NzY29sbCAoY21wX2J1ZiwgY21wX2J1ZiArIDIpIDw9IDAKKwkJICAmJiB3Y3Njb2xsIChjbXBfYnVmICsgMiwgY21wX2J1ZiArIDQpIDw9IDApCisJCXsKKwkJICBtYXRjaF9sZW4gPSBjaGFyX2xlbjsKKwkJICBnb3RvIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOworCQl9CisJICAgIH0KKwl9CisgICAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g6CisgICAgICBpZiAoIWNzZXQtPm5vbl9tYXRjaCkKKwlyZXR1cm4gbWF0Y2hfbGVuOworICAgICAgZWxzZQorCXsKKwkgIGlmIChtYXRjaF9sZW4gPiAwKQorCSAgICByZXR1cm4gMDsKKwkgIGVsc2UKKwkgICAgcmV0dXJuIChlbGVtX2xlbiA+IGNoYXJfbGVuKSA/IGVsZW1fbGVuIDogY2hhcl9sZW47CisJfQorICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyMgaWZkZWYgX0xJQkMKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitmaW5kX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1ZSAoY29uc3QgdW5zaWduZWQgY2hhciAqbWJzLCBzaXplX3QgbWJzX2xlbikKK3sKKyAgdWludDMyX3QgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKyAgaWYgKG5ydWxlcyA9PSAwKQorICAgIHsKKyAgICAgIGlmIChtYnNfbGVuID09IDEpCisJeworCSAgLyogTm8gdmFsaWQgY2hhcmFjdGVyLiAgTWF0Y2ggaXQgYXMgYSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIuICAqLworCSAgY29uc3QgdW5zaWduZWQgY2hhciAqY29sbHNlcSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisJICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRTUIpOworCSAgcmV0dXJuIGNvbGxzZXFbbWJzWzBdXTsKKwl9CisgICAgICByZXR1cm4gVUlOVF9NQVg7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaW50MzJfdCBpZHg7CisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisJX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQik7CisgICAgICBpbnQzMl90IGV4dHJhc2l6ZSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisJX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQiArIDEpIC0gZXh0cmE7CisKKyAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgZXh0cmFzaXplOykKKwl7CisJICBpbnQgbWJzX2NudCwgZm91bmQgPSAwOworCSAgaW50MzJfdCBlbGVtX21ic19sZW47CisJICAvKiBTa2lwIHRoZSBuYW1lIG9mIGNvbGxhdGluZyBlbGVtZW50IG5hbWUuICAqLworCSAgaWR4ID0gaWR4ICsgZXh0cmFbaWR4XSArIDE7CisJICBlbGVtX21ic19sZW4gPSBleHRyYVtpZHgrK107CisJICBpZiAobWJzX2xlbiA9PSBlbGVtX21ic19sZW4pCisJICAgIHsKKwkgICAgICBmb3IgKG1ic19jbnQgPSAwOyBtYnNfY250IDwgZWxlbV9tYnNfbGVuOyArK21ic19jbnQpCisJCWlmIChleHRyYVtpZHggKyBtYnNfY250XSAhPSBtYnNbbWJzX2NudF0pCisJCSAgYnJlYWs7CisJICAgICAgaWYgKG1ic19jbnQgPT0gZWxlbV9tYnNfbGVuKQorCQkvKiBGb3VuZCB0aGUgZW50cnkuICAqLworCQlmb3VuZCA9IDE7CisJICAgIH0KKwkgIC8qIFNraXAgdGhlIGJ5dGUgc2VxdWVuY2Ugb2YgdGhlIGNvbGxhdGluZyBlbGVtZW50LiAgKi8KKwkgIGlkeCArPSBlbGVtX21ic19sZW47CisJICAvKiBBZGp1c3QgZm9yIHRoZSBhbGlnbm1lbnQuICAqLworCSAgaWR4ID0gKGlkeCArIDMpICYgfjM7CisJICAvKiBTa2lwIHRoZSBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUuICAqLworCSAgaWR4ICs9IHNpemVvZiAodWludDMyX3QpOworCSAgLyogU2tpcCB0aGUgd2lkZSBjaGFyIHNlcXVlbmNlIG9mIHRoZSBjb2xsYXRpbmcgZWxlbWVudC4gICovCisJICBpZHggPSBpZHggKyBzaXplb2YgKHVpbnQzMl90KSAqIChleHRyYVtpZHhdICsgMSk7CisJICAvKiBJZiB3ZSBmb3VuZCB0aGUgZW50cnksIHJldHVybiB0aGUgc2VxdWVuY2UgdmFsdWUuICAqLworCSAgaWYgKGZvdW5kKQorCSAgICByZXR1cm4gKih1aW50MzJfdCAqKSAoZXh0cmEgKyBpZHgpOworCSAgLyogU2tpcCB0aGUgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlLiAgKi8KKwkgIGlkeCArPSBzaXplb2YgKHVpbnQzMl90KTsKKwl9CisgICAgICByZXR1cm4gVUlOVF9NQVg7CisgICAgfQorfQorIyBlbmRpZiAvKiBfTElCQyAqLworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKy8qIENoZWNrIHdoZXRoZXIgdGhlIG5vZGUgYWNjZXB0cyB0aGUgYnl0ZSB3aGljaCBpcyBJRFgtdGgKKyAgIGJ5dGUgb2YgdGhlIElOUFVULiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX25vZGVfYWNjZXB0IChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGNvbnN0IHJlX3Rva2VuX3QgKm5vZGUsCisJCSAgIGludCBpZHgpCit7CisgIHVuc2lnbmVkIGNoYXIgY2g7CisgIGNoID0gcmVfc3RyaW5nX2J5dGVfYXQgKCZtY3R4LT5pbnB1dCwgaWR4KTsKKyAgc3dpdGNoIChub2RlLT50eXBlKQorICAgIHsKKyAgICBjYXNlIENIQVJBQ1RFUjoKKyAgICAgIGlmIChub2RlLT5vcHIuYyAhPSBjaCkKKwlyZXR1cm4gMDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTSU1QTEVfQlJBQ0tFVDoKKyAgICAgIGlmICghYml0c2V0X2NvbnRhaW4gKG5vZGUtPm9wci5zYmNzZXQsIGNoKSkKKwlyZXR1cm4gMDsKKyAgICAgIGJyZWFrOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICBjYXNlIE9QX1VURjhfUEVSSU9EOgorICAgICAgaWYgKGNoID49IDB4ODApCisJcmV0dXJuIDA7CisgICAgICAvKiBGQUxMVEhST1VHSCAqLworI2VuZGlmCisgICAgY2FzZSBPUF9QRVJJT0Q6CisgICAgICBpZiAoKGNoID09ICdcbicgJiYgIShtY3R4LT5kZmEtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSkKKwkgIHx8IChjaCA9PSAnXDAnICYmIChtY3R4LT5kZmEtPnN5bnRheCAmIFJFX0RPVF9OT1RfTlVMTCkpKQorCXJldHVybiAwOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGlmIChub2RlLT5jb25zdHJhaW50KQorICAgIHsKKyAgICAgIC8qIFRoZSBub2RlIGhhcyBjb25zdHJhaW50cy4gIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgY29udGV4dAorCSBzYXRpc2ZpZXMgdGhlIGNvbnN0cmFpbnRzLiAgKi8KKyAgICAgIHVuc2lnbmVkIGludCBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgaWR4LAorCQkJCQkJICAgbWN0eC0+ZWZsYWdzKTsKKyAgICAgIGlmIChOT1RfU0FUSVNGWV9ORVhUX0NPTlNUUkFJTlQgKG5vZGUtPmNvbnN0cmFpbnQsIGNvbnRleHQpKQorCXJldHVybiAwOworICAgIH0KKworICByZXR1cm4gMTsKK30KKworLyogRXh0ZW5kIHRoZSBidWZmZXJzLCBpZiB0aGUgYnVmZmVycyBoYXZlIHJ1biBvdXQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2V4dGVuZF9idWZmZXJzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgpCit7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworICByZV9zdHJpbmdfdCAqcHN0ciA9ICZtY3R4LT5pbnB1dDsKKworICAvKiBBdm9pZCBvdmVyZmxvdy4gICovCisgIGlmIChCRSAoSU5UX01BWCAvIDIgLyBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikgPD0gcHN0ci0+YnVmc19sZW4sIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworCisgIC8qIERvdWJsZSB0aGUgbGVuZ3RocyBvZiB0aGUgYnVmZmVycy4gICovCisgIHJldCA9IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHBzdHIsIHBzdHItPmJ1ZnNfbGVuICogMik7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0OworCisgIGlmIChtY3R4LT5zdGF0ZV9sb2cgIT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBBbmQgZG91YmxlIHRoZSBsZW5ndGggb2Ygc3RhdGVfbG9nLiAgKi8KKyAgICAgIC8qIFhYWCBXZSBoYXZlIG5vIGluZGljYXRpb24gb2YgdGhlIHNpemUgb2YgdGhpcyBidWZmZXIuICBJZiB0aGlzCisJIGFsbG9jYXRpb24gZmFpbCB3ZSBoYXZlIG5vIGluZGljYXRpb24gdGhhdCB0aGUgc3RhdGVfbG9nIGFycmF5CisJIGRvZXMgbm90IGhhdmUgdGhlIHJpZ2h0IHNpemUuICAqLworICAgICAgcmVfZGZhc3RhdGVfdCAqKm5ld19hcnJheSA9IHJlX3JlYWxsb2MgKG1jdHgtPnN0YXRlX2xvZywgcmVfZGZhc3RhdGVfdCAqLAorCQkJCQkgICAgICBwc3RyLT5idWZzX2xlbiArIDEpOworICAgICAgaWYgKEJFIChuZXdfYXJyYXkgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBtY3R4LT5zdGF0ZV9sb2cgPSBuZXdfYXJyYXk7CisgICAgfQorCisgIC8qIFRoZW4gcmVjb25zdHJ1Y3QgdGhlIGJ1ZmZlcnMuICAqLworICBpZiAocHN0ci0+aWNhc2UpCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisJeworCSAgcmV0ID0gYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocHN0cik7CisJICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiByZXQ7CisJfQorICAgICAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworCWJ1aWxkX3VwcGVyX2J1ZmZlciAocHN0cik7CisgICAgfQorICBlbHNlCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisJYnVpbGRfd2NzX2J1ZmZlciAocHN0cik7CisgICAgICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisJeworCSAgaWYgKHBzdHItPnRyYW5zICE9IE5VTEwpCisJICAgIHJlX3N0cmluZ190cmFuc2xhdGVfYnVmZmVyIChwc3RyKTsKKwl9CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKwwKKy8qIEZ1bmN0aW9ucyBmb3IgbWF0Y2hpbmcgY29udGV4dC4gICovCisKKy8qIEluaXRpYWxpemUgTUNUWC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorbWF0Y2hfY3R4X2luaXQgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IGVmbGFncywgaW50IG4pCit7CisgIG1jdHgtPmVmbGFncyA9IGVmbGFnczsKKyAgbWN0eC0+bWF0Y2hfbGFzdCA9IC0xOworICBpZiAobiA+IDApCisgICAgeworICAgICAgbWN0eC0+YmtyZWZfZW50cyA9IHJlX21hbGxvYyAoc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnksIG4pOworICAgICAgbWN0eC0+c3ViX3RvcHMgPSByZV9tYWxsb2MgKHJlX3N1Yl9tYXRjaF90b3BfdCAqLCBuKTsKKyAgICAgIGlmIChCRSAobWN0eC0+YmtyZWZfZW50cyA9PSBOVUxMIHx8IG1jdHgtPnN1Yl90b3BzID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgIH0KKyAgLyogQWxyZWFkeSB6ZXJvLWVkIGJ5IHRoZSBjYWxsZXIuCisgICAgIGVsc2UKKyAgICAgICBtY3R4LT5ia3JlZl9lbnRzID0gTlVMTDsKKyAgICAgbWN0eC0+bmJrcmVmX2VudHMgPSAwOworICAgICBtY3R4LT5uc3ViX3RvcHMgPSAwOyAgKi8KKyAgbWN0eC0+YWJrcmVmX2VudHMgPSBuOworICBtY3R4LT5tYXhfbWJfZWxlbV9sZW4gPSAxOworICBtY3R4LT5hc3ViX3RvcHMgPSBuOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIENsZWFuIHRoZSBlbnRyaWVzIHdoaWNoIGRlcGVuZCBvbiB0aGUgY3VycmVudCBpbnB1dCBpbiBNQ1RYLgorICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGludm9rZWQgd2hlbiB0aGUgbWF0Y2hlciBjaGFuZ2VzIHRoZSBzdGFydCBpbmRleAorICAgb2YgdGhlIGlucHV0LCBvciBjaGFuZ2VzIHRoZSBpbnB1dCBzdHJpbmcuICAqLworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK21hdGNoX2N0eF9jbGVhbiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQoreworICBpbnQgc3RfaWR4OworICBmb3IgKHN0X2lkeCA9IDA7IHN0X2lkeCA8IG1jdHgtPm5zdWJfdG9wczsgKytzdF9pZHgpCisgICAgeworICAgICAgaW50IHNsX2lkeDsKKyAgICAgIHJlX3N1Yl9tYXRjaF90b3BfdCAqdG9wID0gbWN0eC0+c3ViX3RvcHNbc3RfaWR4XTsKKyAgICAgIGZvciAoc2xfaWR4ID0gMDsgc2xfaWR4IDwgdG9wLT5ubGFzdHM7ICsrc2xfaWR4KQorCXsKKwkgIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKmxhc3QgPSB0b3AtPmxhc3RzW3NsX2lkeF07CisJICByZV9mcmVlIChsYXN0LT5wYXRoLmFycmF5KTsKKwkgIHJlX2ZyZWUgKGxhc3QpOworCX0KKyAgICAgIHJlX2ZyZWUgKHRvcC0+bGFzdHMpOworICAgICAgaWYgKHRvcC0+cGF0aCkKKwl7CisJICByZV9mcmVlICh0b3AtPnBhdGgtPmFycmF5KTsKKwkgIHJlX2ZyZWUgKHRvcC0+cGF0aCk7CisJfQorICAgICAgZnJlZSAodG9wKTsKKyAgICB9CisKKyAgbWN0eC0+bnN1Yl90b3BzID0gMDsKKyAgbWN0eC0+bmJrcmVmX2VudHMgPSAwOworfQorCisvKiBGcmVlIGFsbCB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBNQ1RYLiAgKi8KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCittYXRjaF9jdHhfZnJlZSAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQoreworICAvKiBGaXJzdCwgZnJlZSBhbGwgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggTUNUWC0+U1VCX1RPUFMuICAqLworICBtYXRjaF9jdHhfY2xlYW4gKG1jdHgpOworICByZV9mcmVlIChtY3R4LT5zdWJfdG9wcyk7CisgIHJlX2ZyZWUgKG1jdHgtPmJrcmVmX2VudHMpOworfQorCisvKiBBZGQgYSBuZXcgYmFja3JlZmVyZW5jZSBlbnRyeSB0byBNQ1RYLgorICAgTm90ZSB0aGF0IHdlIGFzc3VtZSB0aGF0IGNhbGxlciBuZXZlciBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBkdXBsaWNhdGUKKyAgIGVudHJ5LCBhbmQgY2FsbCB3aXRoIFNUUl9JRFggd2hpY2ggaXNuJ3Qgc21hbGxlciB0aGFuIGFueSBleGlzdGluZyBlbnRyeS4KKyovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorbWF0Y2hfY3R4X2FkZF9lbnRyeSAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbm9kZSwgaW50IHN0cl9pZHgsIGludCBmcm9tLAorCQkgICAgIGludCB0bykKK3sKKyAgaWYgKG1jdHgtPm5ia3JlZl9lbnRzID49IG1jdHgtPmFia3JlZl9lbnRzKQorICAgIHsKKyAgICAgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5KiBuZXdfZW50cnk7CisgICAgICBuZXdfZW50cnkgPSByZV9yZWFsbG9jIChtY3R4LT5ia3JlZl9lbnRzLCBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSwKKwkJCSAgICAgIG1jdHgtPmFia3JlZl9lbnRzICogMik7CisgICAgICBpZiAoQkUgKG5ld19lbnRyeSA9PSBOVUxMLCAwKSkKKwl7CisJICByZV9mcmVlIChtY3R4LT5ia3JlZl9lbnRzKTsKKwkgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICAgIG1jdHgtPmJrcmVmX2VudHMgPSBuZXdfZW50cnk7CisgICAgICBtZW1zZXQgKG1jdHgtPmJrcmVmX2VudHMgKyBtY3R4LT5uYmtyZWZfZW50cywgJ1wwJywKKwkgICAgICBzaXplb2YgKHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5KSAqIG1jdHgtPmFia3JlZl9lbnRzKTsKKyAgICAgIG1jdHgtPmFia3JlZl9lbnRzICo9IDI7CisgICAgfQorICBpZiAobWN0eC0+bmJrcmVmX2VudHMgPiAwCisgICAgICAmJiBtY3R4LT5ia3JlZl9lbnRzW21jdHgtPm5ia3JlZl9lbnRzIC0gMV0uc3RyX2lkeCA9PSBzdHJfaWR4KQorICAgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2VudHMgLSAxXS5tb3JlID0gMTsKKworICBtY3R4LT5ia3JlZl9lbnRzW21jdHgtPm5ia3JlZl9lbnRzXS5ub2RlID0gbm9kZTsKKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50c10uc3RyX2lkeCA9IHN0cl9pZHg7CisgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2VudHNdLnN1YmV4cF9mcm9tID0gZnJvbTsKKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50c10uc3ViZXhwX3RvID0gdG87CisKKyAgLyogVGhpcyBpcyBhIGNhY2hlIHRoYXQgc2F2ZXMgbmVnYXRpdmUgcmVzdWx0cyBvZiBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zLgorICAgICBJZiBiaXQgTiBpcyBjbGVhciwgbWVhbnMgdGhhdCB0aGlzIGVudHJ5IHdvbid0IGVwc2lsb24tdHJhbnNpdGlvbiB0bworICAgICBhbiBPUF9PUEVOX1NVQkVYUCBvciBPUF9DTE9TRV9TVUJFWFAgZm9yIHRoZSBOKzEtdGggc3ViZXhwcmVzc2lvbi4gIElmCisgICAgIGl0IGlzIHNldCwgY2hlY2tfZHN0X2xpbWl0c19jYWxjX3Bvc18xIHdpbGwgcmVjdXJzZSBhbmQgdHJ5IHRvIGZpbmQgb25lCisgICAgIHN1Y2ggbm9kZS4KKworICAgICBBIGJhY2tyZWZlcmVuY2UgZG9lcyBub3QgZXBzaWxvbi10cmFuc2l0aW9uIHVubGVzcyBpdCBpcyBlbXB0eSwgc28gc2V0CisgICAgIHRvIGFsbCB6ZXJvcyBpZiBGUk9NICE9IFRPLiAgKi8KKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50c10uZXBzX3JlYWNoYWJsZV9zdWJleHBzX21hcAorICAgID0gKGZyb20gPT0gdG8gPyB+MCA6IDApOworCisgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2VudHMrK10ubW9yZSA9IDA7CisgIGlmIChtY3R4LT5tYXhfbWJfZWxlbV9sZW4gPCB0byAtIGZyb20pCisgICAgbWN0eC0+bWF4X21iX2VsZW1fbGVuID0gdG8gLSBmcm9tOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFNlYXJjaCBmb3IgdGhlIGZpcnN0IGVudHJ5IHdoaWNoIGhhcyB0aGUgc2FtZSBzdHJfaWR4LCBvciAtMSBpZiBub25lIGlzCisgICBmb3VuZC4gIE5vdGUgdGhhdCBNQ1RYLT5CS1JFRl9FTlRTIGlzIGFscmVhZHkgc29ydGVkIGJ5IE1DVFgtPlNUUl9JRFguICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgc3RyX2lkeCkKK3sKKyAgaW50IGxlZnQsIHJpZ2h0LCBtaWQsIGxhc3Q7CisgIGxhc3QgPSByaWdodCA9IG1jdHgtPm5ia3JlZl9lbnRzOworICBmb3IgKGxlZnQgPSAwOyBsZWZ0IDwgcmlnaHQ7KQorICAgIHsKKyAgICAgIG1pZCA9IGxlZnQgKyAocmlnaHQgLSBsZWZ0KSAvIDI7CisgICAgICBpZiAobWN0eC0+YmtyZWZfZW50c1ttaWRdLnN0cl9pZHggPCBzdHJfaWR4KQorCWxlZnQgPSBtaWQgKyAxOworICAgICAgZWxzZQorCXJpZ2h0ID0gbWlkOworICAgIH0KKyAgaWYgKGxlZnQgPCBsYXN0ICYmIG1jdHgtPmJrcmVmX2VudHNbbGVmdF0uc3RyX2lkeCA9PSBzdHJfaWR4KQorICAgIHJldHVybiBsZWZ0OworICBlbHNlCisgICAgcmV0dXJuIC0xOworfQorCisvKiBSZWdpc3RlciB0aGUgbm9kZSBOT0RFLCB3aG9zZSB0eXBlIGlzIE9QX09QRU5fU1VCRVhQLCBhbmQgd2hpY2ggbWF0Y2hlcworICAgYXQgU1RSX0lEWC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorbWF0Y2hfY3R4X2FkZF9zdWJ0b3AgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IG5vZGUsIGludCBzdHJfaWR4KQoreworI2lmZGVmIERFQlVHCisgIGFzc2VydCAobWN0eC0+c3ViX3RvcHMgIT0gTlVMTCk7CisgIGFzc2VydCAobWN0eC0+YXN1Yl90b3BzID4gMCk7CisjZW5kaWYKKyAgaWYgKEJFIChtY3R4LT5uc3ViX3RvcHMgPT0gbWN0eC0+YXN1Yl90b3BzLCAwKSkKKyAgICB7CisgICAgICBpbnQgbmV3X2FzdWJfdG9wcyA9IG1jdHgtPmFzdWJfdG9wcyAqIDI7CisgICAgICByZV9zdWJfbWF0Y2hfdG9wX3QgKipuZXdfYXJyYXkgPSByZV9yZWFsbG9jIChtY3R4LT5zdWJfdG9wcywKKwkJCQkJCSAgIHJlX3N1Yl9tYXRjaF90b3BfdCAqLAorCQkJCQkJICAgbmV3X2FzdWJfdG9wcyk7CisgICAgICBpZiAoQkUgKG5ld19hcnJheSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIG1jdHgtPnN1Yl90b3BzID0gbmV3X2FycmF5OworICAgICAgbWN0eC0+YXN1Yl90b3BzID0gbmV3X2FzdWJfdG9wczsKKyAgICB9CisgIG1jdHgtPnN1Yl90b3BzW21jdHgtPm5zdWJfdG9wc10gPSBjYWxsb2MgKDEsIHNpemVvZiAocmVfc3ViX21hdGNoX3RvcF90KSk7CisgIGlmIChCRSAobWN0eC0+c3ViX3RvcHNbbWN0eC0+bnN1Yl90b3BzXSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgbWN0eC0+c3ViX3RvcHNbbWN0eC0+bnN1Yl90b3BzXS0+bm9kZSA9IG5vZGU7CisgIG1jdHgtPnN1Yl90b3BzW21jdHgtPm5zdWJfdG9wcysrXS0+c3RyX2lkeCA9IHN0cl9pZHg7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogUmVnaXN0ZXIgdGhlIG5vZGUgTk9ERSwgd2hvc2UgdHlwZSBpcyBPUF9DTE9TRV9TVUJFWFAsIGFuZCB3aGljaCBtYXRjaGVzCisgICBhdCBTVFJfSURYLCB3aG9zZSBjb3JyZXNwb25kaW5nIE9QX09QRU5fU1VCRVhQIGlzIFNVQl9UT1AuICAqLworCitzdGF0aWMgcmVfc3ViX21hdGNoX2xhc3RfdCAqCitpbnRlcm5hbF9mdW5jdGlvbgorbWF0Y2hfY3R4X2FkZF9zdWJsYXN0IChyZV9zdWJfbWF0Y2hfdG9wX3QgKnN1YnRvcCwgaW50IG5vZGUsIGludCBzdHJfaWR4KQoreworICByZV9zdWJfbWF0Y2hfbGFzdF90ICpuZXdfZW50cnk7CisgIGlmIChCRSAoc3VidG9wLT5ubGFzdHMgPT0gc3VidG9wLT5hbGFzdHMsIDApKQorICAgIHsKKyAgICAgIGludCBuZXdfYWxhc3RzID0gMiAqIHN1YnRvcC0+YWxhc3RzICsgMTsKKyAgICAgIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKipuZXdfYXJyYXkgPSByZV9yZWFsbG9jIChzdWJ0b3AtPmxhc3RzLAorCQkJCQkJICAgIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKiwKKwkJCQkJCSAgICBuZXdfYWxhc3RzKTsKKyAgICAgIGlmIChCRSAobmV3X2FycmF5ID09IE5VTEwsIDApKQorCXJldHVybiBOVUxMOworICAgICAgc3VidG9wLT5sYXN0cyA9IG5ld19hcnJheTsKKyAgICAgIHN1YnRvcC0+YWxhc3RzID0gbmV3X2FsYXN0czsKKyAgICB9CisgIG5ld19lbnRyeSA9IGNhbGxvYyAoMSwgc2l6ZW9mIChyZV9zdWJfbWF0Y2hfbGFzdF90KSk7CisgIGlmIChCRSAobmV3X2VudHJ5ICE9IE5VTEwsIDEpKQorICAgIHsKKyAgICAgIHN1YnRvcC0+bGFzdHNbc3VidG9wLT5ubGFzdHNdID0gbmV3X2VudHJ5OworICAgICAgbmV3X2VudHJ5LT5ub2RlID0gbm9kZTsKKyAgICAgIG5ld19lbnRyeS0+c3RyX2lkeCA9IHN0cl9pZHg7CisgICAgICArK3N1YnRvcC0+bmxhc3RzOworICAgIH0KKyAgcmV0dXJuIG5ld19lbnRyeTsKK30KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCitzaWZ0X2N0eF9pbml0IChyZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwgcmVfZGZhc3RhdGVfdCAqKnNpZnRlZF9zdHMsCisJICAgICAgIHJlX2RmYXN0YXRlX3QgKipsaW1pdGVkX3N0cywgaW50IGxhc3Rfbm9kZSwgaW50IGxhc3Rfc3RyX2lkeCkKK3sKKyAgc2N0eC0+c2lmdGVkX3N0YXRlcyA9IHNpZnRlZF9zdHM7CisgIHNjdHgtPmxpbWl0ZWRfc3RhdGVzID0gbGltaXRlZF9zdHM7CisgIHNjdHgtPmxhc3Rfbm9kZSA9IGxhc3Rfbm9kZTsKKyAgc2N0eC0+bGFzdF9zdHJfaWR4ID0gbGFzdF9zdHJfaWR4OworICByZV9ub2RlX3NldF9pbml0X2VtcHR5ICgmc2N0eC0+bGltaXRzKTsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9zZXRlbnYuYyBiL2NvbXBhdC9zZXRlbnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODQ5ZjI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3NldGVudi5jCkBAIC0wLDAgKzEsNDAgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworaW50IGdpdHNldGVudihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHJlcGxhY2UpCit7CisJaW50IG91dDsKKwlzaXplX3QgbmFtZWxlbiwgdmFsdWVsZW47CisJY2hhciAqZW52c3RyOworCisJaWYgKCFuYW1lIHx8IHN0cmNocihuYW1lLCAnPScpIHx8ICF2YWx1ZSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIXJlcGxhY2UpIHsKKwkJY2hhciAqb2xkdmFsID0gTlVMTDsKKwkJb2xkdmFsID0gZ2V0ZW52KG5hbWUpOworCQlpZiAob2xkdmFsKSByZXR1cm4gMDsKKwl9CisKKwluYW1lbGVuID0gc3RybGVuKG5hbWUpOworCXZhbHVlbGVuID0gc3RybGVuKHZhbHVlKTsKKwllbnZzdHIgPSBtYWxsb2Moc3RfYWRkMyhuYW1lbGVuLCB2YWx1ZWxlbiwgMikpOworCWlmICghZW52c3RyKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gLTE7CisJfQorCisJbWVtY3B5KGVudnN0ciwgbmFtZSwgbmFtZWxlbik7CisJZW52c3RyW25hbWVsZW5dID0gJz0nOworCW1lbWNweShlbnZzdHIgKyBuYW1lbGVuICsgMSwgdmFsdWUsIHZhbHVlbGVuKTsKKwllbnZzdHJbbmFtZWxlbiArIHZhbHVlbGVuICsgMV0gPSAwOworCisJb3V0ID0gcHV0ZW52KGVudnN0cik7CisJLyogcHV0ZW52KDMpIG1ha2VzIHRoZSBhcmd1bWVudCBzdHJpbmcgcGFydCBvZiB0aGUgZW52aXJvbm1lbnQsCisJICogYW5kIGNoYW5naW5nIHRoYXQgc3RyaW5nIG1vZGlmaWVzIHRoZSBlbnZpcm9ubWVudCAtLS0gd2hpY2gKKwkgKiBtZWFucyB3ZSBkbyBub3Qgb3duIHRoYXQgc3RvcmFnZSBhbnltb3JlLiAgRG8gbm90IGZyZWUKKwkgKiBlbnZzdHIuCisJICovCisKKwlyZXR1cm4gb3V0OworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3NoYTEtY2h1bmtlZC5jIGIvY29tcGF0L3NoYTEtY2h1bmtlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZGZjZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc2hhMS1jaHVua2VkLmMKQEAgLTAsMCArMSwxOSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK2ludCBnaXRfU0hBMV9VcGRhdGVfQ2h1bmtlZChwbGF0Zm9ybV9TSEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCXNpemVfdCBucjsKKwlzaXplX3QgdG90YWwgPSAwOworCWNvbnN0IGNoYXIgKmNkYXRhID0gKGNvbnN0IGNoYXIqKWRhdGE7CisKKwl3aGlsZSAobGVuKSB7CisJCW5yID0gbGVuOworCQlpZiAobnIgPiBTSEExX01BWF9CTE9DS19TSVpFKQorCQkJbnIgPSBTSEExX01BWF9CTE9DS19TSVpFOworCQlwbGF0Zm9ybV9TSEExX1VwZGF0ZShjLCBjZGF0YSwgbnIpOworCQl0b3RhbCArPSBucjsKKwkJY2RhdGEgKz0gbnI7CisJCWxlbiAtPSBucjsKKwl9CisJcmV0dXJuIHRvdGFsOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3NoYTEtY2h1bmtlZC5oIGIvY29tcGF0L3NoYTEtY2h1bmtlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMmRmMjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc2hhMS1jaHVua2VkLmgKQEAgLTAsMCArMSwyIEBACisKK2ludCBnaXRfU0hBMV9VcGRhdGVfQ2h1bmtlZChwbGF0Zm9ybV9TSEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKZGlmZiAtLWdpdCBhL2NvbXBhdC9zbnByaW50Zi5jIGIvY29tcGF0L3NucHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIxMTY4OAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9zbnByaW50Zi5jCkBAIC0wLDAgKzEsNjkgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworLyoKKyAqIFRoZSBzaXplIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGF2YWlsYWJsZSBzcGFjZSwgaS5lLiBpbmNsdWRlcworICogdGhlIHRyYWlsaW5nIE5VTCBieXRlOyBidXQgV2luZG93cydzIHZzbnByaW50ZiB1c2VzIHRoZSBlbnRpcmUKKyAqIGJ1ZmZlciBhbmQgYXZvaWRzIHRoZSB0cmFpbGluZyBOVUwsIHNob3VsZCB0aGUgYnVmZmVyIGJlIGV4YWN0bHkKKyAqIGJpZyBlbm91Z2ggZm9yIHRoZSByZXN1bHQuIERlZmluaW5nIFNOUFJJTlRGX1NJWkVfQ09SUiB0byAxIHdpbGwKKyAqIHRoZXJlZm9yZSByZW1vdmUgMSBieXRlIGZyb20gdGhlIHJlcG9ydGVkIGJ1ZmZlciBzaXplLCBzbyB3ZQorICogYWx3YXlzIGhhdmUgcm9vbSBmb3IgYSB0cmFpbGluZyBOVUwgYnl0ZS4KKyAqLworI2lmbmRlZiBTTlBSSU5URl9TSVpFX0NPUlIKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiAoIWRlZmluZWQoX19HTlVDX18pIHx8IF9fR05VQ19fIDwgNCkgJiYgKCFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX1ZFUiA8IDE5MDApCisjZGVmaW5lIFNOUFJJTlRGX1NJWkVfQ09SUiAxCisjZWxzZQorI2RlZmluZSBTTlBSSU5URl9TSVpFX0NPUlIgMAorI2VuZGlmCisjZW5kaWYKKworI3VuZGVmIHZzbnByaW50ZgoraW50IGdpdF92c25wcmludGYoY2hhciAqc3RyLCBzaXplX3QgbWF4c2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFwKQoreworCXZhX2xpc3QgY3A7CisJY2hhciAqczsKKwlpbnQgcmV0ID0gLTE7CisKKwlpZiAobWF4c2l6ZSA+IDApIHsKKwkJdmFfY29weShjcCwgYXApOworCQlyZXQgPSB2c25wcmludGYoc3RyLCBtYXhzaXplLVNOUFJJTlRGX1NJWkVfQ09SUiwgZm9ybWF0LCBjcCk7CisJCXZhX2VuZChjcCk7CisJCWlmIChyZXQgPT0gbWF4c2l6ZS0xKQorCQkJcmV0ID0gLTE7CisJCS8qIFdpbmRvd3MgZG9lcyBub3QgTlVMLXRlcm1pbmF0ZSBpZiByZXN1bHQgZmlsbHMgYnVmZmVyICovCisJCXN0clttYXhzaXplLTFdID0gMDsKKwl9CisJaWYgKHJldCAhPSAtMSkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBOVUxMOworCWlmIChtYXhzaXplIDwgMTI4KQorCQltYXhzaXplID0gMTI4OworCisJd2hpbGUgKHJldCA9PSAtMSkgeworCQltYXhzaXplICo9IDQ7CisJCXN0ciA9IHJlYWxsb2MocywgbWF4c2l6ZSk7CisJCWlmICghIHN0cikKKwkJCWJyZWFrOworCQlzID0gc3RyOworCQl2YV9jb3B5KGNwLCBhcCk7CisJCXJldCA9IHZzbnByaW50ZihzdHIsIG1heHNpemUtU05QUklOVEZfU0laRV9DT1JSLCBmb3JtYXQsIGNwKTsKKwkJdmFfZW5kKGNwKTsKKwkJaWYgKHJldCA9PSBtYXhzaXplLTEpCisJCQlyZXQgPSAtMTsKKwl9CisJZnJlZShzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZ2l0X3NucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90IG1heHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJaW50IHJldDsKKworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXJldCA9IGdpdF92c25wcmludGYoc3RyLCBtYXhzaXplLCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJcmV0dXJuIHJldDsKK30KKwpkaWZmIC0tZ2l0IGEvY29tcGF0L3N0YXQuYyBiL2NvbXBhdC9zdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkMzkzMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9zdGF0LmMKQEAgLTAsMCArMSw0OCBAQAorI2RlZmluZSBfUE9TSVhfQ19TT1VSQ0UgMjAwMTEyTAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+ICAvKiAqc3RhdCwgU19JUyogKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gLyogbW9kZV90ICAgICAgICovCisKK3N0YXRpYyBpbmxpbmUgbW9kZV90IG1vZGVfbmF0aXZlX3RvX2dpdChtb2RlX3QgbmF0aXZlX21vZGUpCit7CisJbW9kZV90IHBlcm1fYml0cyA9IG5hdGl2ZV9tb2RlICYgMDc3Nzc7CisJaWYgKFNfSVNSRUcobmF0aXZlX21vZGUpKQorCQlyZXR1cm4gMDEwMDAwMCB8IHBlcm1fYml0czsKKwlpZiAoU19JU0RJUihuYXRpdmVfbW9kZSkpCisJCXJldHVybiAwMDQwMDAwIHwgcGVybV9iaXRzOworCWlmIChTX0lTTE5LKG5hdGl2ZV9tb2RlKSkKKwkJcmV0dXJuIDAxMjAwMDAgfCBwZXJtX2JpdHM7CisJaWYgKFNfSVNCTEsobmF0aXZlX21vZGUpKQorCQlyZXR1cm4gMDA2MDAwMCB8IHBlcm1fYml0czsKKwlpZiAoU19JU0NIUihuYXRpdmVfbW9kZSkpCisJCXJldHVybiAwMDIwMDAwIHwgcGVybV9iaXRzOworCWlmIChTX0lTRklGTyhuYXRpdmVfbW9kZSkpCisJCXJldHVybiAwMDEwMDAwIHwgcGVybV9iaXRzOworCWlmIChTX0lTU09DSyhuYXRpdmVfbW9kZSkpCisJCXJldHVybiAwMTQwMDAwIHwgcGVybV9iaXRzOworCS8qIE5vbi1zdGFuZGFyZCB0eXBlIGJpdHMgd2VyZSBnaXZlbi4gKi8KKwlyZXR1cm4gcGVybV9iaXRzOworfQorCitpbnQgZ2l0X3N0YXQoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKwlpbnQgcmMgPSBzdGF0KHBhdGgsIGJ1Zik7CisJaWYgKHJjID09IDApCisJCWJ1Zi0+c3RfbW9kZSA9IG1vZGVfbmF0aXZlX3RvX2dpdChidWYtPnN0X21vZGUpOworCXJldHVybiByYzsKK30KKworaW50IGdpdF9mc3RhdChpbnQgZmQsIHN0cnVjdCBzdGF0ICpidWYpCit7CisJaW50IHJjID0gZnN0YXQoZmQsIGJ1Zik7CisJaWYgKHJjID09IDApCisJCWJ1Zi0+c3RfbW9kZSA9IG1vZGVfbmF0aXZlX3RvX2dpdChidWYtPnN0X21vZGUpOworCXJldHVybiByYzsKK30KKworaW50IGdpdF9sc3RhdChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworCWludCByYyA9IGxzdGF0KHBhdGgsIGJ1Zik7CisJaWYgKHJjID09IDApCisJCWJ1Zi0+c3RfbW9kZSA9IG1vZGVfbmF0aXZlX3RvX2dpdChidWYtPnN0X21vZGUpOworCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9zdHJjYXNlc3RyLmMgYi9jb21wYXQvc3RyY2FzZXN0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ODk2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc3RyY2FzZXN0ci5jCkBAIC0wLDAgKzEsMjIgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworY2hhciAqZ2l0c3RyY2FzZXN0cihjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKQoreworCWludCBubGVuID0gc3RybGVuKG5lZWRsZSk7CisJaW50IGhsZW4gPSBzdHJsZW4oaGF5c3RhY2spIC0gbmxlbiArIDE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGxlbjsgaSsrKSB7CisJCWludCBqOworCQlmb3IgKGogPSAwOyBqIDwgbmxlbjsgaisrKSB7CisJCQl1bnNpZ25lZCBjaGFyIGMxID0gaGF5c3RhY2tbaStqXTsKKwkJCXVuc2lnbmVkIGNoYXIgYzIgPSBuZWVkbGVbal07CisJCQlpZiAodG91cHBlcihjMSkgIT0gdG91cHBlcihjMikpCisJCQkJZ290byBuZXh0OworCQl9CisJCXJldHVybiAoY2hhciAqKSBoYXlzdGFjayArIGk7CisJbmV4dDoKKwkJOworCX0KKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9zdHJkdXAuYyBiL2NvbXBhdC9zdHJkdXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2ZiOTc4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3N0cmR1cC5jCkBAIC0wLDAgKzEsMTEgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworY2hhciAqZ2l0c3RyZHVwKGNvbnN0IGNoYXIgKnMxKQoreworCXNpemVfdCBsZW4gPSBzdHJsZW4oczEpICsgMTsKKwljaGFyICpzMiA9IG1hbGxvYyhsZW4pOworCisJaWYgKHMyKQorCQltZW1jcHkoczIsIHMxLCBsZW4pOworCXJldHVybiBzMjsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9zdHJsY3B5LmMgYi9jb21wYXQvc3RybGNweS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMjRjMzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc3RybGNweS5jCkBAIC0wLDAgKzEsMTMgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworc2l6ZV90IGdpdHN0cmxjcHkoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc2l6ZSkKK3sKKwlzaXplX3QgcmV0ID0gc3RybGVuKHNyYyk7CisKKwlpZiAoc2l6ZSkgeworCQlzaXplX3QgbGVuID0gKHJldCA+PSBzaXplKSA/IHNpemUgLSAxIDogcmV0OworCQltZW1jcHkoZGVzdCwgc3JjLCBsZW4pOworCQlkZXN0W2xlbl0gPSAnXDAnOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3N0cnRvaW1heC5jIGIvY29tcGF0L3N0cnRvaW1heC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMDllZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc3RydG9pbWF4LmMKQEAgLTAsMCArMSwxMCBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitpbnRtYXhfdCBnaXRzdHJ0b2ltYXggKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQoreworI2lmIGRlZmluZWQoTk9fU1RSVE9VTEwpCisJcmV0dXJuIHN0cnRvbChucHRyLCBlbmRwdHIsIGJhc2UpOworI2Vsc2UKKwlyZXR1cm4gc3RydG9sbChucHRyLCBlbmRwdHIsIGJhc2UpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9jb21wYXQvc3RydG91bWF4LmMgYi9jb21wYXQvc3RydG91bWF4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU0MTM1MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9zdHJ0b3VtYXguYwpAQCAtMCwwICsxLDEwIEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK3VpbnRtYXhfdCBnaXRzdHJ0b3VtYXggKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQoreworI2lmIGRlZmluZWQoTk9fU1RSVE9VTEwpCisJcmV0dXJuIHN0cnRvdWwobnB0ciwgZW5kcHRyLCBiYXNlKTsKKyNlbHNlCisJcmV0dXJuIHN0cnRvdWxsKG5wdHIsIGVuZHB0ciwgYmFzZSk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC90ZXJtaW5hbC5jIGIvY29tcGF0L3Rlcm1pbmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViY2EwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC90ZXJtaW5hbC5jCkBAIC0wLDAgKzEsMzg4IEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiY29tcGF0L3Rlcm1pbmFsLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorCisjaWYgZGVmaW5lZChIQVZFX0RFVl9UVFkpIHx8IGRlZmluZWQoR0lUX1dJTkRPV1NfTkFUSVZFKQorCitzdGF0aWMgdm9pZCByZXN0b3JlX3Rlcm0odm9pZCk7CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfdGVybV9vbl9zaWduYWwoaW50IHNpZykKK3sKKwlyZXN0b3JlX3Rlcm0oKTsKKwlzaWdjaGFpbl9wb3Aoc2lnKTsKKwlyYWlzZShzaWcpOworfQorCisjaWZkZWYgSEFWRV9ERVZfVFRZCisKKyNkZWZpbmUgSU5QVVRfUEFUSCAiL2Rldi90dHkiCisjZGVmaW5lIE9VVFBVVF9QQVRIICIvZGV2L3R0eSIKKworc3RhdGljIGludCB0ZXJtX2ZkID0gLTE7CitzdGF0aWMgc3RydWN0IHRlcm1pb3Mgb2xkX3Rlcm07CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfdGVybSh2b2lkKQoreworCWlmICh0ZXJtX2ZkIDwgMCkKKwkJcmV0dXJuOworCisJdGNzZXRhdHRyKHRlcm1fZmQsIFRDU0FGTFVTSCwgJm9sZF90ZXJtKTsKKwljbG9zZSh0ZXJtX2ZkKTsKKwl0ZXJtX2ZkID0gLTE7Cit9CisKK3N0YXRpYyBpbnQgZGlzYWJsZV9iaXRzKHRjZmxhZ190IGJpdHMpCit7CisJc3RydWN0IHRlcm1pb3MgdDsKKworCXRlcm1fZmQgPSBvcGVuKCIvZGV2L3R0eSIsIE9fUkRXUik7CisJaWYgKHRjZ2V0YXR0cih0ZXJtX2ZkLCAmdCkgPCAwKQorCQlnb3RvIGVycm9yOworCisJb2xkX3Rlcm0gPSB0OworCXNpZ2NoYWluX3B1c2hfY29tbW9uKHJlc3RvcmVfdGVybV9vbl9zaWduYWwpOworCisJdC5jX2xmbGFnICY9IH5iaXRzOworCWlmICghdGNzZXRhdHRyKHRlcm1fZmQsIFRDU0FGTFVTSCwgJnQpKQorCQlyZXR1cm4gMDsKKworZXJyb3I6CisJY2xvc2UodGVybV9mZCk7CisJdGVybV9mZCA9IC0xOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBkaXNhYmxlX2VjaG8odm9pZCkKK3sKKwlyZXR1cm4gZGlzYWJsZV9iaXRzKEVDSE8pOworfQorCitzdGF0aWMgaW50IGVuYWJsZV9ub25fY2Fub25pY2FsKHZvaWQpCit7CisJcmV0dXJuIGRpc2FibGVfYml0cyhJQ0FOT04gfCBFQ0hPKTsKK30KKworI2VsaWYgZGVmaW5lZChHSVRfV0lORE9XU19OQVRJVkUpCisKKyNkZWZpbmUgSU5QVVRfUEFUSCAiQ09OSU4kIgorI2RlZmluZSBPVVRQVVRfUEFUSCAiQ09OT1VUJCIKKyNkZWZpbmUgRk9SQ0VfVEVYVCAidCIKKworc3RhdGljIGludCB1c2Vfc3R0eSA9IDE7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IHN0dHlfcmVzdG9yZSA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworc3RhdGljIEhBTkRMRSBoY29uaW4gPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKK3N0YXRpYyBEV09SRCBjbW9kZTsKKworc3RhdGljIHZvaWQgcmVzdG9yZV90ZXJtKHZvaWQpCit7CisJaWYgKHVzZV9zdHR5KSB7CisJCWludCBpOworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQlpZiAoc3R0eV9yZXN0b3JlLm5yID09IDApCisJCQlyZXR1cm47CisKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAic3R0eSIpOworCQlmb3IgKGkgPSAwOyBpIDwgc3R0eV9yZXN0b3JlLm5yOyBpKyspCisJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIHN0dHlfcmVzdG9yZS5pdGVtc1tpXS5zdHJpbmcpOworCQlydW5fY29tbWFuZCgmY3ApOworCQlzdHJpbmdfbGlzdF9jbGVhcigmc3R0eV9yZXN0b3JlLCAwKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChoY29uaW4gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCXJldHVybjsKKworCVNldENvbnNvbGVNb2RlKGhjb25pbiwgY21vZGUpOworCUNsb3NlSGFuZGxlKGhjb25pbik7CisJaGNvbmluID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Cit9CisKK3N0YXRpYyBpbnQgZGlzYWJsZV9iaXRzKERXT1JEIGJpdHMpCit7CisJaWYgKHVzZV9zdHR5KSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgInN0dHkiKTsKKworCQlpZiAoYml0cyAmIEVOQUJMRV9MSU5FX0lOUFVUKSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN0dHlfcmVzdG9yZSwgImljYW5vbiIpOworCQkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLWljYW5vbiIpOworCQl9CisKKwkJaWYgKGJpdHMgJiBFTkFCTEVfRUNIT19JTlBVVCkgeworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdHR5X3Jlc3RvcmUsICJlY2hvIik7CisJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItZWNobyIpOworCQl9CisKKwkJaWYgKGJpdHMgJiBFTkFCTEVfUFJPQ0VTU0VEX0lOUFVUKSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN0dHlfcmVzdG9yZSwgIi1pZ25icmsiKTsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmc3R0eV9yZXN0b3JlLCAiaW50ciIpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdHR5X3Jlc3RvcmUsICJeYyIpOworCQkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiaWduYnJrIik7CisJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICJpbnRyIik7CisJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICIiKTsKKwkJfQorCisJCWlmIChydW5fY29tbWFuZCgmY3ApID09IDApCisJCQlyZXR1cm4gMDsKKworCQkvKiBgc3R0eWAgY291bGQgbm90IGJlIGV4ZWN1dGVkOyBhY2Nlc3MgdGhlIENvbnNvbGUgZGlyZWN0bHkgKi8KKwkJdXNlX3N0dHkgPSAwOworCX0KKworCWhjb25pbiA9IENyZWF0ZUZpbGUoIkNPTklOJCIsIEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEUsCisJICAgIEZJTEVfU0hBUkVfUkVBRCwgTlVMTCwgT1BFTl9FWElTVElORywKKwkgICAgRklMRV9BVFRSSUJVVEVfTk9STUFMLCBOVUxMKTsKKwlpZiAoaGNvbmluID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorCQlyZXR1cm4gLTE7CisKKwlHZXRDb25zb2xlTW9kZShoY29uaW4sICZjbW9kZSk7CisJc2lnY2hhaW5fcHVzaF9jb21tb24ocmVzdG9yZV90ZXJtX29uX3NpZ25hbCk7CisJaWYgKCFTZXRDb25zb2xlTW9kZShoY29uaW4sIGNtb2RlICYgfmJpdHMpKSB7CisJCUNsb3NlSGFuZGxlKGhjb25pbik7CisJCWhjb25pbiA9IElOVkFMSURfSEFORExFX1ZBTFVFOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlzYWJsZV9lY2hvKHZvaWQpCit7CisJcmV0dXJuIGRpc2FibGVfYml0cyhFTkFCTEVfRUNIT19JTlBVVCk7Cit9CisKK3N0YXRpYyBpbnQgZW5hYmxlX25vbl9jYW5vbmljYWwodm9pZCkKK3sKKwlyZXR1cm4gZGlzYWJsZV9iaXRzKEVOQUJMRV9FQ0hPX0lOUFVUIHwgRU5BQkxFX0xJTkVfSU5QVVQgfCBFTkFCTEVfUFJPQ0VTU0VEX0lOUFVUKTsKK30KKworLyoKKyAqIE92ZXJyaWRlIGBnZXRjaGFyKClgLCBhcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB1c2UKKyAqIGBSZWFkRmlsZSgpYC4KKyAqCisgKiBUaGlzIHBvc2VzIGEgcHJvYmxlbSB3aGVuIHdlIHdhbnQgdG8gc2VlIHdoZXRoZXIgdGhlIHN0YW5kYXJkCisgKiBpbnB1dCBoYXMgbW9yZSBjaGFyYWN0ZXJzLCBhcyB0aGUgZGVmYXVsdCBvZiBHaXQgZm9yIFdpbmRvd3MgaXMgdG8gc3RhcnQgdGhlCisgKiBCYXNoIGluIGEgTWluVFRZLCB3aGljaCB1c2VzIGEgbmFtZWQgcGlwZSB0byBlbXVsYXRlIGEgcHR5LCBpbiB3aGljaCBjYXNlCisgKiBvdXIgYHBvbGwoKWAgZW11bGF0aW9uIGNhbGxzIGBQZWVrTmFtZWRQaXBlKClgLCB3aGljaCBzZWVtcyB0byByZXF1aXJlCisgKiBgUmVhZEZpbGUoKWAgdG8gYmUgY2FsbGVkIGZpcnN0IHRvIHdvcmsgcHJvcGVybHkgKGl0IG9ubHkgcmVwb3J0cyAwCisgKiBhdmFpbGFibGUgYnl0ZXMsIG90aGVyd2lzZSkuCisgKgorICogU28gbGV0J3MganVzdCBvdmVycmlkZSBgZ2V0Y2hhcigpYCB3aXRoIGEgdmVyc2lvbiBiYWNrZWQgYnkgYFJlYWRGaWxlKClgIGFuZAorICogZ28gb3VyIG1lcnJ5IHdheXMgZnJvbSBoZXJlLgorICovCitzdGF0aWMgaW50IG1pbmd3X2dldGNoYXIodm9pZCkKK3sKKwlEV09SRCByZWFkID0gMDsKKwl1bnNpZ25lZCBjaGFyIGNoOworCisJaWYgKCFSZWFkRmlsZShHZXRTdGRIYW5kbGUoU1REX0lOUFVUX0hBTkRMRSksICZjaCwgMSwgJnJlYWQsIE5VTEwpKQorCQlyZXR1cm4gRU9GOworCisJaWYgKCFyZWFkKSB7CisJCWVycm9yKCJVbmV4cGVjdGVkIDAgcmVhZCIpOworCQlyZXR1cm4gRU9GOworCX0KKworCXJldHVybiBjaDsKK30KKyNkZWZpbmUgZ2V0Y2hhciBtaW5nd19nZXRjaGFyCisKKyNlbmRpZgorCisjaWZuZGVmIEZPUkNFX1RFWFQKKyNkZWZpbmUgRk9SQ0VfVEVYVAorI2VuZGlmCisKK2NoYXIgKmdpdF90ZXJtaW5hbF9wcm9tcHQoY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgZWNobykKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcjsKKwlGSUxFICppbnB1dF9maCwgKm91dHB1dF9maDsKKworCWlucHV0X2ZoID0gZm9wZW4oSU5QVVRfUEFUSCwgInIiIEZPUkNFX1RFWFQpOworCWlmICghaW5wdXRfZmgpCisJCXJldHVybiBOVUxMOworCisJb3V0cHV0X2ZoID0gZm9wZW4oT1VUUFVUX1BBVEgsICJ3IiBGT1JDRV9URVhUKTsKKwlpZiAoIW91dHB1dF9maCkgeworCQlmY2xvc2UoaW5wdXRfZmgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIWVjaG8gJiYgZGlzYWJsZV9lY2hvKCkpIHsKKwkJZmNsb3NlKGlucHV0X2ZoKTsKKwkJZmNsb3NlKG91dHB1dF9maCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWZwdXRzKHByb21wdCwgb3V0cHV0X2ZoKTsKKwlmZmx1c2gob3V0cHV0X2ZoKTsKKworCXIgPSBzdHJidWZfZ2V0bGluZV9sZigmYnVmLCBpbnB1dF9maCk7CisJaWYgKCFlY2hvKSB7CisJCXB1dGMoJ1xuJywgb3V0cHV0X2ZoKTsKKwkJZmZsdXNoKG91dHB1dF9maCk7CisJfQorCisJcmVzdG9yZV90ZXJtKCk7CisJZmNsb3NlKGlucHV0X2ZoKTsKKwlmY2xvc2Uob3V0cHV0X2ZoKTsKKworCWlmIChyID09IEVPRikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGJ1Zi5idWY7Cit9CisKKy8qCisgKiBUaGUgYGlzX2tub3duX2VzY2FwZV9zZXF1ZW5jZSgpYCBmdW5jdGlvbiByZXR1cm5zIDEgaWYgdGhlIHBhc3NlZCBzdHJpbmcKKyAqIGNvcnJlc3BvbmRzIHRvIGFuIEVzY2FwZSBzZXF1ZW5jZSB0aGF0IHRoZSB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMgY29udGFpbnMuCisgKgorICogVG8gYXZvaWQgZGVwZW5kaW5nIG9uIG5jdXJzZXMgb3Igb3RoZXIgcGxhdGZvcm0tc3BlY2lmaWMgbGlicmFyaWVzLCB3ZSByZWx5CisgKiBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIGBpbmZvY21wYCBleGVjdXRhYmxlIHRvIGRvIHRoZSBqb2IgZm9yIHVzIChmYWlsaW5nCisgKiBzaWxlbnRseSBpZiB0aGUgcHJvZ3JhbSBpcyBub3QgYXZhaWxhYmxlIG9yIHJlZnVzZWQgdG8gcnVuKS4KKyAqLworc3RydWN0IGVzY2FwZV9zZXF1ZW5jZV9lbnRyeSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50cnk7CisJY2hhciBzZXF1ZW5jZVtGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyBpbnQgc2VxdWVuY2VfZW50cnlfY21wKGNvbnN0IHZvaWQgKmhhc2htYXBfY21wX2ZuX2RhdGEsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgZXNjYXBlX3NlcXVlbmNlX2VudHJ5ICplMSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBlc2NhcGVfc2VxdWVuY2VfZW50cnkgKmUyLAorCQkJICAgICAgY29uc3Qgdm9pZCAqa2V5ZGF0YSkKK3sKKwlyZXR1cm4gc3RyY21wKGUxLT5zZXF1ZW5jZSwga2V5ZGF0YSA/IGtleWRhdGEgOiBlMi0+c2VxdWVuY2UpOworfQorCitzdGF0aWMgaW50IGlzX2tub3duX2VzY2FwZV9zZXF1ZW5jZShjb25zdCBjaGFyICpzZXF1ZW5jZSkKK3sKKwlzdGF0aWMgc3RydWN0IGhhc2htYXAgc2VxdWVuY2VzOworCXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CisKKwlpZiAoIWluaXRpYWxpemVkKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQljaGFyICpwLCAqZW9sOworCisJCWhhc2htYXBfaW5pdCgmc2VxdWVuY2VzLCAoaGFzaG1hcF9jbXBfZm4pc2VxdWVuY2VfZW50cnlfY21wLAorCQkJICAgICBOVUxMLCAwKTsKKworCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAiaW5mb2NtcCIsICItTCIsICItMSIsIE5VTEwpOworCQlpZiAocGlwZV9jb21tYW5kKCZjcCwgTlVMTCwgMCwgJmJ1ZiwgMCwgTlVMTCwgMCkpCisJCQlzdHJidWZfc2V0bGVuKCZidWYsIDApOworCisJCWZvciAoZW9sID0gcCA9IGJ1Zi5idWY7ICpwOyBwID0gZW9sICsgMSkgeworCQkJcCA9IHN0cmNocihwLCAnPScpOworCQkJaWYgKCFwKQorCQkJCWJyZWFrOworCQkJcCsrOworCQkJZW9sID0gc3RyY2hybnVsKHAsICdcbicpOworCisJCQlpZiAoc3RhcnRzX3dpdGgocCwgIlxcRSIpKSB7CisJCQkJY2hhciAqY29tbWEgPSBtZW1jaHIocCwgJywnLCBlb2wgLSBwKTsKKwkJCQlzdHJ1Y3QgZXNjYXBlX3NlcXVlbmNlX2VudHJ5ICplOworCisJCQkJcFswXSA9ICdeJzsKKwkJCQlwWzFdID0gJ1snOworCQkJCUZMRVhfQUxMT0NfTUVNKGUsIHNlcXVlbmNlLCBwLCBjb21tYSAtIHApOworCQkJCWhhc2htYXBfZW50cnlfaW5pdCgmZS0+ZW50cnksCisJCQkJCQkgICBzdHJoYXNoKGUtPnNlcXVlbmNlKSk7CisJCQkJaGFzaG1hcF9hZGQoJnNlcXVlbmNlcywgJmUtPmVudHJ5KTsKKwkJCX0KKwkJCWlmICghKmVvbCkKKwkJCQlicmVhazsKKwkJfQorCQlpbml0aWFsaXplZCA9IDE7CisJfQorCisJcmV0dXJuICEhaGFzaG1hcF9nZXRfZnJvbV9oYXNoKCZzZXF1ZW5jZXMsIHN0cmhhc2goc2VxdWVuY2UpLCBzZXF1ZW5jZSk7Cit9CisKK2ludCByZWFkX2tleV93aXRob3V0X2VjaG8oc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCXN0YXRpYyBpbnQgd2FybmluZ19kaXNwbGF5ZWQ7CisJaW50IGNoOworCisJaWYgKHdhcm5pbmdfZGlzcGxheWVkIHx8IGVuYWJsZV9ub25fY2Fub25pY2FsKCkgPCAwKSB7CisJCWlmICghd2FybmluZ19kaXNwbGF5ZWQpIHsKKwkJCXdhcm5pbmcoInJlYWRpbmcgc2luZ2xlIGtleXN0cm9rZXMgbm90IHN1cHBvcnRlZCBvbiAiCisJCQkJInRoaXMgcGxhdGZvcm07IHJlYWRpbmcgbGluZSBpbnN0ZWFkIik7CisJCQl3YXJuaW5nX2Rpc3BsYXllZCA9IDE7CisJCX0KKworCQlyZXR1cm4gc3RyYnVmX2dldGxpbmUoYnVmLCBzdGRpbik7CisJfQorCisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJY2ggPSBnZXRjaGFyKCk7CisJaWYgKGNoID09IEVPRikgeworCQlyZXN0b3JlX3Rlcm0oKTsKKwkJcmV0dXJuIEVPRjsKKwl9CisJc3RyYnVmX2FkZGNoKGJ1ZiwgY2gpOworCisJaWYgKGNoID09ICdcMDMzJyAvKiBFU0MgKi8pIHsKKwkJLyoKKwkJICogV2UgYXJlIG1vc3QgbGlrZWx5IGxvb2tpbmcgYXQgYW4gRXNjYXBlIHNlcXVlbmNlLiBMZXQncyB0cnkKKwkJICogdG8gcmVhZCBtb3JlIGJ5dGVzLCB3YWl0aW5nIGF0IG1vc3QgaGFsZiBhIHNlY29uZCwgYXNzdW1pbmcKKwkJICogdGhhdCB0aGUgc2VxdWVuY2UgaXMgY29tcGxldGUgaWYgd2UgZGlkIG5vdCByZWNlaXZlIGFueSBieXRlCisJCSAqIHdpdGhpbiB0aGF0IHRpbWUuCisJCSAqCisJCSAqIFN0YXJ0IGJ5IHJlcGxhY2luZyB0aGUgRXNjYXBlIGJ5dGUgd2l0aCBeWyAqLworCQlzdHJidWZfc3BsaWNlKGJ1ZiwgYnVmLT5sZW4gLSAxLCAxLCAiXlsiLCAyKTsKKworCQkvKgorCQkgKiBRdWVyeSB0aGUgdGVybWluYWwgY2FwYWJpbGl0aWVzIG9uY2UgYWJvdXQgYWxsIHRoZSBFc2NhcGUKKwkJICogc2VxdWVuY2VzIGl0IGtub3dzIGFib3V0LCBzbyB0aGF0IHdlIGNhbiBhdm9pZCB3YWl0aW5nIGZvcgorCQkgKiBoYWxmIGEgc2Vjb25kIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBzZXF1ZW5jZSBpcyBjb21wbGV0ZS4KKwkJICovCisJCXdoaWxlICghaXNfa25vd25fZXNjYXBlX3NlcXVlbmNlKGJ1Zi0+YnVmKSkgeworCQkJc3RydWN0IHBvbGxmZCBwZmQgPSB7IC5mZCA9IDAsIC5ldmVudHMgPSBQT0xMSU4gfTsKKworCQkJaWYgKHBvbGwoJnBmZCwgMSwgNTAwKSA8IDEpCisJCQkJYnJlYWs7CisKKwkJCWNoID0gZ2V0Y2hhcigpOworCQkJaWYgKGNoID09IEVPRikKKwkJCQlyZXR1cm4gMDsKKwkJCXN0cmJ1Zl9hZGRjaChidWYsIGNoKTsKKwkJfQorCX0KKworCXJlc3RvcmVfdGVybSgpOworCXJldHVybiAwOworfQorCisjZWxzZQorCitjaGFyICpnaXRfdGVybWluYWxfcHJvbXB0KGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGVjaG8pCit7CisJcmV0dXJuIGdldHBhc3MocHJvbXB0KTsKK30KKworaW50IHJlYWRfa2V5X3dpdGhvdXRfZWNobyhzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJc3RhdGljIGludCB3YXJuaW5nX2Rpc3BsYXllZDsKKwljb25zdCBjaGFyICpyZXM7CisKKwlpZiAoIXdhcm5pbmdfZGlzcGxheWVkKSB7CisJCXdhcm5pbmcoInJlYWRpbmcgc2luZ2xlIGtleXN0cm9rZXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzICIKKwkJCSJwbGF0Zm9ybTsgcmVhZGluZyBsaW5lIGluc3RlYWQiKTsKKwkJd2FybmluZ19kaXNwbGF5ZWQgPSAxOworCX0KKworCXJlcyA9IGdldHBhc3MoIiIpOworCXN0cmJ1Zl9yZXNldChidWYpOworCWlmICghcmVzKQorCQlyZXR1cm4gRU9GOworCXN0cmJ1Zl9hZGRzdHIoYnVmLCByZXMpOworCXJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC90ZXJtaW5hbC5oIGIvY29tcGF0L3Rlcm1pbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkNTJiOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC90ZXJtaW5hbC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBDT01QQVRfVEVSTUlOQUxfSAorI2RlZmluZSBDT01QQVRfVEVSTUlOQUxfSAorCitjaGFyICpnaXRfdGVybWluYWxfcHJvbXB0KGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGVjaG8pOworCisvKiBSZWFkIGEgc2luZ2xlIGtleXN0cm9rZSwgd2l0aG91dCBlY2hvaW5nIGl0IHRvIHRoZSB0ZXJtaW5hbCAqLworaW50IHJlYWRfa2V5X3dpdGhvdXRfZWNobyhzdHJ1Y3Qgc3RyYnVmICpidWYpOworCisjZW5kaWYgLyogQ09NUEFUX1RFUk1JTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC91bnNldGVudi5jIGIvY29tcGF0L3Vuc2V0ZW52LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1ZmQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC91bnNldGVudi5jCkBAIC0wLDAgKzEsMjcgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKwordm9pZCBnaXR1bnNldGVudiAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyNpZiAhZGVmaW5lZChfX01JTkdXMzJfXykKKyAgICAgZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworI2VuZGlmCisgICAgIGludCBzcmMsIGRzdDsKKyAgICAgc2l6ZV90IG5tbG47CisKKyAgICAgbm1sbiA9IHN0cmxlbihuYW1lKTsKKworICAgICBmb3IgKHNyYyA9IGRzdCA9IDA7IGVudmlyb25bc3JjXTsgKytzcmMpIHsKKwkgIHNpemVfdCBlbmxuOworCSAgZW5sbiA9IHN0cmxlbihlbnZpcm9uW3NyY10pOworCSAgaWYgKGVubG4gPiBubWxuKSB7CisgICAgICAgICAgICAgICAvKiBtaWdodCBtYXRjaCwgYW5kIGNhbiB0ZXN0IGZvciAnPScgc2FmZWx5ICovCisJICAgICAgIGlmICgwID09IHN0cm5jbXAgKGVudmlyb25bc3JjXSwgbmFtZSwgbm1sbikKKwkJICAgJiYgJz0nID09IGVudmlyb25bc3JjXVtubWxuXSkKKwkJICAgIC8qIG1hdGNoZXMsIHNvIHNraXAgKi8KKwkJICAgIGNvbnRpbnVlOworCSAgfQorCSAgZW52aXJvbltkc3RdID0gZW52aXJvbltzcmNdOworCSAgKytkc3Q7CisgICAgIH0KKyAgICAgZW52aXJvbltkc3RdID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkLy5naXRpZ25vcmUgYi9jb21wYXQvdmNidWlsZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOGI3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorL3ZjcGtnLworL01TVkMtREVGUy1HRU4KKy9WQ1BLRy1ERUZTCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9SRUFETUUgYi9jb21wYXQvdmNidWlsZC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyOTJlNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL1JFQURNRQpAQCAtMCwwICsxLDExMiBAQAorVGhlIFN0ZXBzIHRvIEJ1aWxkIEdpdCB3aXRoIFZTMjAxNSBvciBWUzIwMTcgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCisxLiBJbnN0YWxsIHRoZSAidmNwa2ciIG9wZW4gc291cmNlIHBhY2thZ2UgbWFuYWdlciBhbmQgYnVpbGQgZXNzZW50aWFsCisgICB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMuICBUaGUgc3RlcHMgZm9yIHRoaXMgaGF2ZSBiZWVuIGNhcHR1cmVkIGluIGEKKyAgIHNldCBvZiBjb252ZW5pZW5jZSBzY3JpcHRzLiAgVGhlc2UgY2FuIGJlIHJ1biBmcm9tIGEgc3RvY2sgQ29tbWFuZAorICAgUHJvbXB0IG9yIGZyb20gYW4gU0RLIGJhc2ggd2luZG93OgorCisgICAkIGNkIDxyZXBvX3Jvb3Q+CisgICAkIC4vY29tcGF0L3ZjYnVpbGQvdmNwa2dfaW5zdGFsbC5iYXQKKworICAgVGhlIHZjcGtnIHRvb2xzIGFuZCBhbGwgb2YgdGhlIHRoaXJkLXBhcnR5IHNvdXJjZXMgd2lsbCBiZSBpbnN0YWxsZWQKKyAgIGluIHRoaXMgZm9sZGVyOgorICAgICAgPHJlcG9fcm9vdD4vY29tcGF0L3ZjYnVpbGQvdmNwa2cvCisKKyAgIEEgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBhIHNldCBvZiBNYWtlZmlsZSBtYWNyb3MgcG9pbnRpbmcgdG8gYQorICAgdW5pZmllZCAiaW5jbHVkZSIsICJsaWIiLCBhbmQgImJpbiIgZGlyZWN0b3J5IChyZWxlYXNlIGFuZCBkZWJ1ZykgZm9yCisgICBhbGwgb2YgdGhlIHJlcXVpcmVkIHBhY2thZ2VzLiAgVGhpcyBmaWxlIHdpbGwgYmUgaW5jbHVkZWQgYnkgdGhlIG1haW4KKyAgIE1ha2VmaWxlOgorICAgICAgPHJlcG9fcm9vdD4vY29tcGF0L3ZjYnVpbGQvTVNWQy1ERUZTLUdFTgorCisyLiBPUFRJT05BTExZIGNvcHkgdGhlIHRoaXJkLXBhcnR5ICouZGxsIGFuZCAqLnBkYiBmaWxlcyBpbnRvIHRoZSByZXBvCisgICByb290IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJ1biBhbmQgZGVidWcgZ2l0LmV4ZSB3aXRob3V0IGhhdmluZyB0bworICAgbWFuaXB1bGF0ZSB5b3VyIFBBVEguICBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBmb3IgZGVidWcgc2Vzc2lvbnMgaW4KKyAgIFZpc3VhbCBTdHVkaW8uCisKKyAgIFVzZSBPTkUgb2YgdGhlIGZvbGxvd2luZyBmb3JtcyB3aGljaCBzaG91bGQgbWF0Y2ggaG93IHlvdSB3YW50IHRvCisgICBjb21waWxlIGdpdC5leGUuCisKKyAgICQgLi9jb21wYXQvdmNidWlsZC92Y3BrZ19jb3B5X3BhY2thZ2VzLmJhdCBkZWJ1ZworICAgJCAuL2NvbXBhdC92Y2J1aWxkL3ZjcGtnX2NvcHlfcGFja2FnZXMuYmF0IHJlbGVhc2UKKworMy4gQnVpbGQgZ2l0IHVzaW5nIE1TVkMgZnJvbSBhbiBTREsgYmFzaCB3aW5kb3cgdXNpbmcgb25lIG9mIHRoZQorICAgZm9sbG93aW5nIGNvbW1hbmRzOgorCisgICAkIG1ha2UgTVNWQz0xCisgICAkIG1ha2UgTVNWQz0xIERFQlVHPTEKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBbHRlcm5hdGl2ZWx5LCBydW4gYG1ha2UgdmN4cHJvamAgYW5kIHRoZW4gbG9hZCB0aGUgZ2VuZXJhdGVkIGBnaXQuc2xuYCBpbgorVmlzdWFsIFN0dWRpby4gVGhlIGluaXRpYWwgYnVpbGQgd2lsbCBpbnN0YWxsIHRoZSB2Y3BrZyBzeXN0ZW0gYW5kIGJ1aWxkIHRoZQorZGVwZW5kZW5jaWVzIGF1dG9tYXRpY2FsbHkuIFRoaXMgd2lsbCB0YWtlIGEgd2hpbGUuCisKK0luc3RlYWQgb2YgZ2VuZXJhdGluZyB0aGUgYGdpdC5zbG5gIGZpbGUgeW91cnNlbGYgKHdoaWNoIHJlcXVpcmVzIGEgZnVsbCBHaXQKK2ZvciBXaW5kb3dzIFNESyksIHlvdSBtYXkgd2FudCB0byBjb25zaWRlciBmZXRjaGluZyB0aGUgYHZzL21hc3RlcmAgYnJhbmNoIG9mCitodHRwczovL2dpdGh1Yi5jb20vZ2l0LWZvci13aW5kb3dzL2dpdCBpbnN0ZWFkICh3aGljaCBpcyB1cGRhdGVkIGF1dG9tYXRpY2FsbHkKK3ZpYSBDSSBydW5uaW5nIGBtYWtlIHZjeHByb2pgKS4gVGhlIGB2cy9tYXN0ZXJgIGJyYW5jaCBkb2VzIG5vdCByZXF1aXJlIGEgR2l0Citmb3IgV2luZG93cyB0byBidWlsZCwgYnV0IHlvdSBjYW4gcnVuIHRoZSB0ZXN0IHNjcmlwdHMgaW4gYSByZWd1bGFyIEdpdCBCYXNoLgorCitOb3RlIHRoYXQgYG1ha2UgdmN4cHJvamAgd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCBhbmQgY29tbWl0IHRoZSBnZW5lcmF0ZWQgYC5zbG5gCithbmQgYC52Y3hwcm9qYCBmaWxlcyB0byB0aGUgcmVwby4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYWxsb3cgYnVpbGRpbmcgYQorZnVsbHktdGVzdGFibGUgR2l0IGluIFZpc3VhbCBTdHVkaW8sIHdoZXJlIGEgcmVndWxhciBHaXQgQmFzaCBjYW4gYmUgdXNlZCB0bworcnVuIHRoZSB0ZXN0IHNjcmlwdHMgKGFzIG9wcG9zZWQgdG8gYSBmdWxsIEdpdCBmb3IgV2luZG93cyBTREspOiBhIG51bWJlciBvZgorYnVpbGQgdGFyZ2V0cywgc3VjaCBhcyBHaXQgY29tbWFuZHMgaW1wbGVtZW50ZWQgYXMgVW5peCBzaGVsbCBzY3JpcHRzICh3aGVyZQorYEBAU0hFTExfUEFUSEBAYCBhbmQgb3RoZXIgcGxhY2Vob2xkZXJzIGFyZSBpbnRlcnBvbGF0ZWQpIHJlcXVpcmUgYSBmdWxsLWJsb3duCitHaXQgZm9yIFdpbmRvd3MgU0RLICh3aGljaCBpcyBhYm91dCAxMHggdGhlIHNpemUgb2YgYSByZWd1bGFyIEdpdCBmb3IgV2luZG93cworaW5zdGFsbGF0aW9uKS4KKworSWYgeW91ciBwbGFuIGlzIHRvIG9wZW4gYSBQdWxsIFJlcXVlc3Qgd2l0aCBHaXQgZm9yIFdpbmRvd3MsIGl0IGlzIGEgZ29vZCBpZGVhCit0byBkcm9wIHRoaXMgY29tbWl0IGJlZm9yZSBzdWJtaXR0aW5nLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgU3RlcHMgb2YgQnVpbGQgR2l0IHdpdGggVlMyMDA4CisKKzEuIFlvdSBuZWVkIHRoZSBidWlsZCBlbnZpcm9ubWVudCwgd2hpY2ggY29udGFpbnMgdGhlIEdpdCBkZXBlbmRlbmNpZXMKKyAgIHRvIGJlIGFibGUgdG8gY29tcGlsZSwgbGluayBhbmQgcnVuIEdpdCB3aXRoIE1TVkMuCisKKyAgIFlvdSBjYW4gZWl0aGVyIHVzZSB0aGUgYmluYXJ5IHJlcG9zaXRvcnk6CisKKyAgICAgICBXV1c6IGh0dHA6Ly9yZXBvLm9yLmN6L3cvbXN2Y2dpdC5naXQKKyAgICAgICBHaXQ6IGdpdCBjbG9uZSBnaXQ6Ly9yZXBvLm9yLmN6L21zdmNnaXQuZ2l0CisgICAgICAgWmlwOiBodHRwOi8vcmVwby5vci5jei93L21zdmNnaXQuZ2l0P2E9c25hcHNob3Q7aD1tYXN0ZXI7c2Y9emlwCisKKyAgIGFuZCBjYWxsIHRoZSBzZXR1cF8zMmJpdF9lbnYuY21kIGJhdGNoIHNjcmlwdCBiZWZvcmUgY29tcGlsaW5nIEdpdCwKKyAgIChzZWUgcmVwby9wYWNrYWdlIFJFQURNRSBmb3IgZGV0YWlscyksIG9yIHRoZSBzb3VyY2UgcmVwb3NpdG9yeToKKworICAgICAgIFdXVzogaHR0cDovL3JlcG8ub3IuY3ovdy9naXRidWlsZC5naXQKKyAgICAgICBHaXQ6IGdpdCBjbG9uZSBnaXQ6Ly9yZXBvLm9yLmN6L2dpdGJ1aWxkLmdpdAorICAgICAgIFppcDogKE5vbmUsIGFzIGl0J3MgYSBwcm9qZWN0IHdpdGggc3VibW9kdWxlcykKKworICAgYW5kIGJ1aWxkIHRoZSBzdXBwb3J0IGxpYnMgYXMgaW5zdHJ1Y3RlZCBpbiB0aGF0IHJlcG8vcGFja2FnZS4KKworMi4gRW5zdXJlIHlvdSBoYXZlIHRoZSBtc3lzZ2l0IGVudmlyb25tZW50IGluIHlvdXIgcGF0aCwgc28geW91IGhhdmUKKyAgIEdOVSBNYWtlLCBiYXNoIGFuZCBwZXJsIGF2YWlsYWJsZS4KKworICAgICAgIFdXVzogaHR0cDovL3JlcG8ub3IuY3ovdy9tc3lzZ2l0LmdpdAorICAgICAgIEdpdDogZ2l0IGNsb25lIGdpdDovL3JlcG8ub3IuY3ovbXN5c2dpdC5naXQKKyAgICAgICBaaXA6IGh0dHA6Ly9yZXBvLm9yLmN6L3cvbXN5c2dpdC5naXQ/YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj16aXAKKworICAgVGhpcyBlbnZpcm9ubWVudCBpcyBhbHNvIG5lZWRlZCB3aGVuIHlvdSB1c2UgdGhlIHJlc3VsdGluZworICAgZXhlY3V0YWJsZXMsIHNpbmNlIEdpdCBtaWdodCBuZWVkIHRvIHJ1biBzY3JpcHRzIHdoaWNoIGFyZSBwYXJ0IG9mCisgICB0aGUgZ2l0IG9wZXJhdGlvbnMuCisKKzMuIEluc2lkZSBHaXQncyBkaXJlY3RvcnkgcnVuIHRoZSBjb21tYW5kOgorICAgICAgIG1ha2UgY29tbWFuZC1saXN0LmggY29uZmlnLWxpc3QuaAorICAgdG8gZ2VuZXJhdGUgdGhlIGhlYWRlciBmaWxlIG5lZWRlZCB0byBjb21waWxlIGdpdC4KKworNC4gVGhlbiBlaXRoZXIgYnVpbGQgR2l0IHdpdGggdGhlIEdOVSBNYWtlIE1ha2VmaWxlIGluIHRoZSBHaXQgcHJvamVjdHMKKyAgIHJvb3QKKyAgICAgICBtYWtlIE1TVkM9MQorICAgb3IgZ2VuZXJhdGUgVmlzdWFsIFN0dWRpbyBzb2x1dGlvbi9wcm9qZWN0cyAoLnNsbi8udmNwcm9qKSB3aXRoIHRoZQorICAgY29tbWFuZAorICAgICAgIHBlcmwgY29udHJpYi9idWlsZHN5c3RlbXMvZ2VuZXJhdGUgLWcgVmNwcm9qCisgICBhbmQgb3BlbiBhbmQgYnVpbGQgdGhlIHNvbHV0aW9uIHdpdGggdGhlIElERQorICAgICAgIGRldmVudiBnaXQuc2xuIC91c2VlbnYKKyAgIG9yIGJ1aWxkIHdpdGggdGhlIElERSBidWlsZCBlbmdpbmUgZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZCBsaW5lCisgICAgICAgZGV2ZW52IGdpdC5zbG4gL3VzZWVudiAvYnVpbGQgIlJlbGVhc2V8V2luMzIiCisgICBUaGUgL3VzZWVudiBvcHRpb24gaXMgcmVxdWlyZWQsIHNvIFZpc3VhbCBTdHVkaW8gcGlja3MgdXAgdGhlCisgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBzdXBwb3J0IGxpYnJhcmllcyByZXF1aXJlZCB0byBidWlsZAorICAgR2l0LCB3aGljaCB5b3Ugc2V0IHVwIGluIHN0ZXAgMS4KKworRG9uZSEKZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL2ZpbmRfdnNfZW52LmJhdCBiL2NvbXBhdC92Y2J1aWxkL2ZpbmRfdnNfZW52LmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzVkMjY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvZmluZF92c19lbnYuYmF0CkBAIC0wLDAgKzEsMTY4IEBACitARUNITyBPRkYKK1JFTSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSRU0gWW91IGNhbiB1c2UgZWl0aGVyIEdDQyAodGhlIGRlZmF1bHQpIG9yIE1TVkMgdG8gYnVpbGQgZ2l0CitSRU0gdXNpbmcgdGhlIEdJVC1TREsgY29tbWFuZCBsaW5lIHRvb2xzLgorUkVNICAgICAgICAkIG1ha2UKK1JFTSAgICAgICAgJCBtYWtlIE1TVkM9MQorUkVNCitSRU0gR0lULVNESyBCQVNIIHdpbmRvd3MgaW5oZXJpdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCBhbGwgb2YKK1JFTSB0aGUgYmluL2xpYi9pbmNsdWRlIHBhdGhzIGZvciBHQ0MuICBJdCBET0VTIE5PVCBpbmhlcml0IHZhbHVlcworUkVNIGZvciB0aGUgY29ycmVzcG9uZGluZyBNU1ZDIHRvb2xzLgorUkVNCitSRU0gRHVyaW5nIG5vcm1hbCAobm9uLWdpdCkgV2luZG93cyBkZXZlbG9wbWVudCwgeW91IGxhdW5jaCBvbmUKK1JFTSBvZiB0aGUgcHJvdmlkZWQgImRldmVsb3BlciBjb21tYW5kIHByb21wdHMiIHRvIHNldCBlbnZpcm9ubWVudAorUkVNIHZhcmlhYmxlcyBmb3IgdGhlIE1TVkMgdG9vbHMuCitSRU0KK1JFTSBUaGVyZWZvcmUsIHRvIGFsbG93IE1TVkMgY29tbWFuZCBsaW5lIGJ1aWxkcyBvZiBnaXQgZnJvbSBCQVNICitSRU0gYW5kIE1BS0UsIHdlIG11c3QgYmxlbmQgdGhlc2UgdHdvIGRpZmZlcmVudCB3b3JsZHMuICBUaGlzIHNjcmlwdAorUkVNIGF0dGVtcHRzIHRvIGRvIHRoYXQuCitSRU0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUkVNIFRoaXMgQkFUIGZpbGUgc3RhcnRzIGluIGEgcGxhaW4gKG5vbi1kZXZlbG9wZXIpIGNvbW1hbmQgcHJvbXB0LAorUkVNIHNlYXJjaGVzIGZvciB0aGUgImJlc3QiIGNvbW1hbmQgcHJvbXB0IHNldHVwIHNjcmlwdCwgaW5zdGFsbHMKK1JFTSBpdCBpbnRvIHRoZSBjdXJyZW50IENNRCBwcm9jZXNzLCBhbmQgZXhwb3J0cyB0aGUgdmFyaW91cyBNU1ZDCitSRU0gZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB1c2UgYnkgTUFLRS4KK1JFTQorUkVNIFRoZSBvdXRwdXQgb2YgdGhpcyBzY3JpcHQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gYSBtYWtlICJpbmNsdWRlCitSRU0gZmlsZSIgYW5kIHJlZmVyZW5jZWQgYnkgdGhlIHRvcC1sZXZlbCBNYWtlZmlsZS4KK1JFTQorUkVNIFNlZSAiY29uZmlnLm1hay51bmFtZSIgKGxvb2sgZm9yIGNvbXBhdC92Y2J1aWxkL01TVkMtREVGUy1HRU4pLgorUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JFTSBUaGUgcHJvdmlkZWQgY29tbWFuZCBwcm9tcHRzIGFyZSBjdXN0b20gdG8gZWFjaCBWUyByZWxlYXNlIGFuZAorUkVNIGZpbGxlZCB3aXRoIGxvdHMgb2YgaW50ZXJuYWwga25vd2xlZGdlIChzdWNoIGFzIFJlZ2lzdHJ5IHNldHRpbmdzKTsKK1JFTSBldmVuIHRoZWlyIG5hbWVzIHZhcnkgYnkgcmVsZWFzZSwgc28gaXQgaXMgbm90IGFwcHJvcHJpYXRlIGZvciB1cworUkVNIHRvIGxvb2sgaW5zaWRlIHRoZW0uICBSYXRoZXIsIGp1c3QgcnVuIHRoZW0gaW4gYSBzdWJvcmRpbmF0ZQorUkVNIHByb2Nlc3MgYW5kIGV4dHJhY3QgdGhlIHNldHRpbmdzIHdlIG5lZWQuCitSRU0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUkVNCitSRU0gQ3VycmVudCAoVlMyMDE3IGFuZCBiZXlvbmQpCitSRU0gLS0tLS0tLS0tLS0tLS0tLS0tLQorUkVNIFZpc3VhbCBTdHVkaW8gMjAxNyBpbnRyb2R1Y2VkIGEgbmV3IGluc3RhbGxhdGlvbiBsYXlvdXQgYW5kCitSRU0gc3VwcG9ydCBmb3Igc2lkZS1ieS1zaWRlIGluc3RhbGxhdGlvbiBvZiBtdWx0aXBsZSB2ZXJzaW9ucyBvZgorUkVNIFZTMjAxNy4gIEZ1cnRoZXJtb3JlLCB0aGVzZSBjYW4gYWxsIGNvZXhpc3Qgd2l0aCBpbnN0YWxsYXRpb25zCitSRU0gb2YgcHJldmlvdXMgdmVyc2lvbnMgb2YgVlMgKHdoaWNoIGhhdmUgYSBjb21wbGV0ZWx5IGRpZmZlcmVudAorUkVNIGxheW91dCBvbiBkaXNrKS4KK1JFTQorUkVNIFZTMjAxNyBVcGRhdGUgMiBpbnRyb2R1Y2VkIGEgInZzd2hlcmUuZXhlIiBjb21tYW5kOgorUkVNIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvdnN3aGVyZQorUkVNIGh0dHBzOi8vYmxvZ3MubXNkbi5taWNyb3NvZnQuY29tL2hlYXRocy8yMDE3LzAyLzI1L3Zzd2hlcmUtYXZhaWxhYmxlLworUkVNIGh0dHBzOi8vYmxvZ3MubXNkbi5taWNyb3NvZnQuY29tL3ZjYmxvZy8yMDE3LzAzLzA2L2ZpbmRpbmctdGhlLXZpc3VhbC1jLWNvbXBpbGVyLXRvb2xzLWluLXZpc3VhbC1zdHVkaW8tMjAxNy8KK1JFTQorUkVNIFZTMjAxNQorUkVNIC0tLS0tLQorUkVNIFZpc3VhbCBTdHVkaW8gMjAxNSB1c2VzIHRoZSB0cmFkaXRpb25hbCBWY1ZhcnNBbGwuCitSRU0KK1JFTSBFYXJsaWVyIFZlcnNpb25zCitSRU0gLS0tLS0tLS0tLS0tLS0tLQorUkVNIEN1cnJlbnRseSB1bnN1cHBvcnRlZC4KK1JFTQorUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JFTSBOb3RlOiBUaHJvdWdob3V0IHRoaXMgc2NyaXB0IHdlIHVzZSAiZGlyIDxwYXRoPiAmJiA8Y21kPiIgcmF0aGVyCitSRU0gdGhhbiAiaWYgZXhpc3QgPHBhdGg+IiBiZWNhdXNlIG9mIHNjcmlwdCBwcm9ibGVtcyB3aXRoIHBhdGhuYW1lcworUkVNIGNvbnRhaW5pbmcgc3BhY2VzLgorUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUkVNIFNhbml0aXplIFBBVEggdG8gcHJldmVudCBnaXQtc2RrIHBhdGhzIGZyb20gY29uZnVzaW5nICJ3bWljLmV4ZSIKK1JFTSAoY2FsbGVkIGludGVybmFsbHkgaW4gc29tZSBvZiB0aGUgc3lzdGVtIEJBVCBmaWxlcykuCitTRVQgUEFUSD0lU3lzdGVtUm9vdCVcc3lzdGVtMzI7JVN5c3RlbVJvb3QlOyVTeXN0ZW1Sb290JVxTeXN0ZW0zMlxXYmVtOworCitSRU0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis6Y3VycmVudAorICAgU0VUIHZzX3doZXJlPUM6XFByb2dyYW0gRmlsZXMgKHg4NilcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW9cSW5zdGFsbGVyXHZzd2hlcmUuZXhlCisgICBkaXIgIiV2c193aGVyZSUiID5udWwgMj5udWwgJiYgR09UTyBoYXZlX3ZzX3doZXJlCisgICBHT1RPIG5vdF8yMDE3CisKKzpoYXZlX3ZzX3doZXJlCisgICBSRU0gVHJ5IHRvIHVzZSBWc1doZXJlIHRvIGdldCB0aGUgbG9jYXRpb24gb2YgVnNEZXZDbWQuCisKKyAgIFJFTSBLZWVwIFZzRGV2Q21kIGZyb20gY2QnaW5nIGF3YXkuCisgICBTRVQgVlNDTURfU1RBUlRfRElSPS4KKworICAgUkVNIEdldCB0aGUgcm9vdCBvZiB0aGUgVlMgcHJvZHVjdCBpbnN0YWxsYXRpb24uCisgICBGT1IgL0YgInVzZWJhY2txIHRva2Vucz0qIiAlJWkgSU4gKGAiJXZzX3doZXJlJSIgLWxhdGVzdCAtcmVxdWlyZXMgTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Xb3JrbG9hZC5OYXRpdmVEZXNrdG9wIC1wcm9wZXJ0eSBpbnN0YWxsYXRpb25QYXRoYCkgRE8gQFNFVCB2c19pcD0lJWkKKworICAgU0VUIHZzX2RldmNtZD0ldnNfaXAlXENvbW1vbjdcVG9vbHNcVnNEZXZDbWQuYmF0CisgICBkaXIgIiV2c19kZXZjbWQlIiA+bnVsIDI+bnVsICYmIEdPVE8gaGF2ZV92c19kZXZjbWQKKyAgIEdPVE8gbm90XzIwMTcKKworOmhhdmVfdnNfZGV2Y21kCisgICBSRU0gVXNlIFZzRGV2Q21kIHRvIHNldHVwIHRoZSBlbnZpcm9ubWVudCBvZiB0aGlzIHByb2Nlc3MuCisgICBSRU0gU2V0dXAgQ0wgZm9yIGJ1aWxkaW5nIDY0LWJpdCBhcHBzIHVzaW5nIDY0LWJpdCB0b29scy4KKyAgIEBjYWxsICIldnNfZGV2Y21kJSIgLW5vX2xvZ28gLWFyY2g9eDY0IC1ob3N0X2FyY2g9eDY0CisKKyAgIFNFVCB0Z3Q9JVZTQ01EX0FSR19UR1RfQVJDSCUKKworICAgU0VUIG1uPSVWQ1Rvb2xzSW5zdGFsbERpciUKKyAgIFNFVCBtc3ZjX2luY2x1ZGVzPS1JIiVtbiVJTkNMVURFIgorICAgU0VUIG1zdmNfbGlicz0tTCIlbW4lbGliXCV0Z3QlIgorICAgU0VUIG1zdmNfYmluX2Rpcj0lbW4lYmluXEhvc3QlVlNDTURfQVJHX0hPU1RfQVJDSCVcJXRndCUKKworICAgU0VUIHNka19kaXI9JVdpbmRvd3NTZGtEaXIlCisgICBTRVQgc2RrX3Zlcj0lV2luZG93c1NES1ZlcnNpb24lCisgICBTRVQgc2k9JXNka19kaXIlSW5jbHVkZVwlc2RrX3ZlciUKKyAgIFNFVCBzZGtfaW5jbHVkZXM9LUkiJXNpJXVjcnQiIC1JIiVzaSV1bSIgLUkiJXNpJXNoYXJlZCIKKyAgIFNFVCBzbD0lc2RrX2RpciVsaWJcJXNka192ZXIlCisgICBTRVQgc2RrX2xpYnM9LUwiJXNsJXVjcnRcJXRndCUiIC1MIiVzbCV1bVwldGd0JSIKKworICAgU0VUIHZzX3Zlcj0lVmlzdWFsU3R1ZGlvVmVyc2lvbiUKKworICAgR09UTyBwcmludF92YXJzCisKK1JFTSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzpub3RfMjAxNworICAgUkVNIFNlZSBpZiBWUzIwMTUgaXMgaW5zdGFsbGVkLgorCisgICBTRVQgdnNfMjAxNV9iYXQ9QzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAxNC4wXFZDXHZjdmFyc2FsbC5iYXQKKyAgIGRpciAiJXZzXzIwMTVfYmF0JSIgPm51bCAyPm51bCAmJiBHT1RPIGhhdmVfdnNfMjAxNQorICAgR09UTyBub3RfMjAxNQorCis6aGF2ZV92c18yMDE1CisgICBSRU0gVXNlIFZjVmFyc0FsbCBsaWtlIHRoZSAieDY0IE5hdGl2ZSIgY29tbWFuZCBwcm9tcHQuCisgICBSRU0gU2V0dXAgQ0wgZm9yIGJ1aWxkaW5nIDY0LWJpdCBhcHBzIHVzaW5nIDY0LWJpdCB0b29scy4KKyAgIEBjYWxsICIldnNfMjAxNV9iYXQlIiBhbWQ2NAorCisgICBSRU0gTm90ZSB0aGF0IGluIFZTMjAxNSB0aGV5IHVzZSAieDY0IiBpbiBzb21lIGNvbnRleHRzIGFuZCAiYW1kNjQiIGluIG90aGVycy4KKyAgIFNFVCBtbj1DOlxQcm9ncmFtIEZpbGVzICh4ODYpXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDE0LjBcVkNcCisgICBTRVQgbXN2Y19pbmNsdWRlcz0tSSIlbW4lSU5DTFVERSIKKyAgIFNFVCBtc3ZjX2xpYnM9LUwiJW1uJWxpYlxhbWQ2NCIKKyAgIFNFVCBtc3ZjX2Jpbl9kaXI9JW1uJWJpblxhbWQ2NAorCisgICBTRVQgc2RrX2Rpcj0lV2luZG93c1Nka0RpciUKKyAgIFNFVCBzZGtfdmVyPSVXaW5kb3dzU0RLVmVyc2lvbiUKKyAgIFNFVCBzaT0lc2RrX2RpciVJbmNsdWRlXCVzZGtfdmVyJQorICAgU0VUIHNka19pbmNsdWRlcz0tSSIlc2kldWNydCIgLUkiJXNpJXVtIiAtSSIlc2klc2hhcmVkIiAtSSIlc2kld2lucnQiCisgICBTRVQgc2w9JXNka19kaXIlbGliXCVzZGtfdmVyJQorICAgU0VUIHNka19saWJzPS1MIiVzbCV1Y3J0XHg2NCIgLUwiJXNsJXVtXHg2NCIKKworICAgU0VUIHZzX3Zlcj0lVmlzdWFsU3R1ZGlvVmVyc2lvbiUKKworICAgR09UTyBwcmludF92YXJzCisKK1JFTSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzpub3RfMjAxNQorICAgZWNobyAiRVJST1I6IHVuc3VwcG9ydGVkIFZTIHZlcnNpb24gKG9sZGVyIHRoYW4gVlMyMDE1KSIgPiYyCisgICBFWElUIC9CIDEKKworUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworOnByaW50X3ZhcnMKKyAgIFJFTSBEdW1wIHRoZSBlc3NlbnRpYWwgdmFycyB0byBzdGRvdXQgdG8gYWxsb3cgdGhlIG1haW4KKyAgIFJFTSBNYWtlZmlsZSB0byBpbmNsdWRlIGl0LiAgU2VlIGNvbmZpZy5tYWsudW5hbWUuCisgICBSRU0gSW5jbHVkZSBET1Mtc3R5bGUgYW5kIEJBU0gtc3R5bGUgcGF0aCBmb3IgYmluIGRpci4KKworICAgZWNobyBtc3ZjX2Jpbl9kaXI9JW1zdmNfYmluX2RpciUKKyAgIFNFVCBYMT0lbXN2Y19iaW5fZGlyOkM6PS9DJQorICAgU0VUIFgyPSVYMTpcPS8lCisgICBlY2hvIG1zdmNfYmluX2Rpcl9tc3lzPSVYMiUKKworICAgZWNobyBtc3ZjX2luY2x1ZGVzPSVtc3ZjX2luY2x1ZGVzJQorICAgZWNobyBtc3ZjX2xpYnM9JW1zdmNfbGlicyUKKworICAgZWNobyBzZGtfaW5jbHVkZXM9JXNka19pbmNsdWRlcyUKKyAgIGVjaG8gc2RrX2xpYnM9JXNka19saWJzJQorCisgICBlY2hvIHZzX3Zlcj0ldnNfdmVyJQorCisgICBFWElUIC9CIDAKZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3BhcmFtLmggYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODU1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9wYXJhbS5oCkBAIC0wLDAgKzEgQEAKKy8qIEludGVudGlvbmFsbHkgZW1wdHkgZmlsZSB0byBzdXBwb3J0IGJ1aWxkaW5nIGdpdCB3aXRoIE1TVkMgKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3RpbWUuaCBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg1NTJhCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvdGltZS5oCkBAIC0wLDAgKzEgQEAKKy8qIEludGVudGlvbmFsbHkgZW1wdHkgZmlsZSB0byBzdXBwb3J0IGJ1aWxkaW5nIGdpdCB3aXRoIE1TVkMgKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3V0aW1lLmggYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy91dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MjU4OWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy91dGltZS5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYJX1VUSU1FX0hfCisjZGVmaW5lCV9VVElNRV9IXworLyoKKyAqIFVUSU1FLkgKKyAqIFRoaXMgZmlsZSBoYXMgbm8gY29weXJpZ2h0IGFzc2lnbmVkIGFuZCBpcyBwbGFjZWQgaW4gdGhlIFB1YmxpYyBEb21haW4uCisgKiBUaGlzIGZpbGUgaXMgYSBwYXJ0IG9mIHRoZSBtaW5ndy1ydW50aW1lIHBhY2thZ2UuCisgKgorICogVGhlIG1pbmd3LXJ1bnRpbWUgcGFja2FnZSBhbmQgaXRzIGNvZGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorICogd2lsbCBiZSB1c2VmdWwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLiAgQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1NFRCBPUgorICogSU1QTElFRCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBUaGlzIGluY2x1ZGVzIGJ1dCBpcyBub3QgbGltaXRlZCB0bworICogd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogWW91IGFyZSBmcmVlIHRvIHVzZSB0aGlzIHBhY2thZ2UgYW5kIGl0cyBjb2RlIHdpdGhvdXQgbGltaXRhdGlvbi4KKyAqLworCisvKgorICogU3RydWN0dXJlIHVzZWQgYnkgX3V0aW1lIGZ1bmN0aW9uLgorICovCitzdHJ1Y3QgX3V0aW1idWYKK3sKKwl0aW1lX3QJYWN0aW1lOwkJLyogQWNjZXNzIHRpbWUgKi8KKwl0aW1lX3QJbW9kdGltZTsJLyogTW9kaWZpY2F0aW9uIHRpbWUgKi8KK307CisKKyNpZm5kZWYJX05PX09MRE5BTUVTCisvKiBOT1RFOiBNdXN0IGJlIHRoZSBzYW1lIGFzIF91dGltYnVmIGFib3ZlLiAqLworc3RydWN0IHV0aW1idWYKK3sKKwl0aW1lX3QJYWN0aW1lOworCXRpbWVfdAltb2R0aW1lOworfTsKKyNlbmRpZgkvKiBOb3QgX05PX09MRE5BTUVTICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS91bmlzdGQuaCBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E5NTlkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvdW5pc3RkLmgKQEAgLTAsMCArMSwxMDMgQEAKKyNpZm5kZWYgX1VOSVNURF8KKyNkZWZpbmUgX1VOSVNURF8KKworLyogV2luMzIgZGVmaW5lIGZvciBwb3J0aW5nIGdpdCovCisKKyNpZm5kZWYgX01PREVfVF8KKyNkZWZpbmUJX01PREVfVF8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX21vZGVfdDsKKworI2lmbmRlZglfTk9fT0xETkFNRVMKK3R5cGVkZWYgX21vZGVfdAltb2RlX3Q7CisjZW5kaWYKKyNlbmRpZgkvKiBOb3QgX01PREVfVF8gKi8KKworI2lmbmRlZiBfU1NJWkVfVF8KKyNkZWZpbmUgX1NTSVpFX1RfCit0eXBlZGVmIGxvbmcgX3NzaXplX3Q7CisKKyNpZm5kZWYJX09GRl9UXworI2RlZmluZQlfT0ZGX1RfCit0eXBlZGVmIGxvbmcgX29mZl90OworCisjaWZuZGVmCV9OT19PTEROQU1FUwordHlwZWRlZiBfb2ZmX3QJb2ZmX3Q7CisjZW5kaWYKKyNlbmRpZgkvKiBOb3QgX09GRl9UXyAqLworCisKKyNpZm5kZWYJX05PX09MRE5BTUVTCit0eXBlZGVmIF9zc2l6ZV90IHNzaXplX3Q7CisjZW5kaWYKKyNlbmRpZiAvKiBOb3QgX1NTSVpFX1RfICovCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgdWludDhfdDsKK3R5cGVkZWYgc2hvcnQgIGludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICB1aW50MTZfdDsKK3R5cGVkZWYgaW50ICBpbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCAgIHVpbnQzMl90OwordHlwZWRlZiBsb25nIGxvbmcgIGludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVpbnQ2NF90OworCit0eXBlZGVmIGxvbmcgbG9uZyAgaW50bWF4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50bWF4X3Q7CisKK3R5cGVkZWYgaW50NjRfdCBvZmY2NF90OworCisjaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSIDwgMTYwMAorI2RlZmluZSBJTlRNQVhfTUlOICBfSTY0X01JTgorI2RlZmluZSBJTlRNQVhfTUFYICBfSTY0X01BWAorI2RlZmluZSBVSU5UTUFYX01BWCBfVUk2NF9NQVgKKworI2RlZmluZSBVSU5UMzJfTUFYIDB4ZmZmZmZmZmYgIC8qIDQyOTQ5NjcyOTVVICovCisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKyNkZWZpbmUgU1RESU5fRklMRU5PICAwCisjZGVmaW5lIFNURE9VVF9GSUxFTk8gMQorI2RlZmluZSBTVERFUlJfRklMRU5PIDIKKworLyogU29tZSBkZWZpbmVzIGZvciBfYWNjZXNzIG5BY2Nlc3NNb2RlIChNUyBkb2Vzbid0IGRlZmluZSB0aGVtLCBidXQKKyAqIGl0IGRvZXNuJ3Qgc2VlbSB0byBodXJ0IHRvIGFkZCB0aGVtKS4gKi8KKyNkZWZpbmUJRl9PSwkwCS8qIENoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSAqLworLyogV2VsbCBtYXliZSBpdCBkb2VzIGh1cnQuICBPbiBuZXdlciB2ZXJzaW9ucyBvZiBNU1ZDUlQsIGFuIGFjY2VzcyBtb2RlCisgICBvZiAxIGNhdXNlcyBpbnZhbGlkIHBhcmFtZXRlciBlcnJvci4gKi8KKyNkZWZpbmUJWF9PSwkwCS8qIE1TIGFjY2VzcygpIGRvZXNuJ3QgY2hlY2sgZm9yIGV4ZWN1dGUgcGVybWlzc2lvbi4gKi8KKyNkZWZpbmUJV19PSwkyCS8qIENoZWNrIGZvciB3cml0ZSBwZXJtaXNzaW9uICovCisjZGVmaW5lCVJfT0sJNAkvKiBDaGVjayBmb3IgcmVhZCBwZXJtaXNzaW9uICovCisKKyNkZWZpbmUJX1NfSUZJRk8JMHgxMDAwCS8qIEZJRk8gKi8KKyNkZWZpbmUJX1NfSUZDSFIJMHgyMDAwCS8qIENoYXJhY3RlciAqLworI2RlZmluZQlfU19JRkJMSwkweDMwMDAJLyogQmxvY2s6IElzIHRoaXMgZXZlciBzZXQgdW5kZXIgdzMyPyAqLworI2RlZmluZQlfU19JRkRJUgkweDQwMDAJLyogRGlyZWN0b3J5ICovCisjZGVmaW5lCV9TX0lGUkVHCTB4ODAwMAkvKiBSZWd1bGFyICovCisKKyNkZWZpbmUJX1NfSUZNVAkJMHhGMDAwCS8qIEZpbGUgdHlwZSBtYXNrICovCisKKyNkZWZpbmUJX1NfSVhVU1IJX1NfSUVYRUMKKyNkZWZpbmUJX1NfSVdVU1IJX1NfSVdSSVRFCisjZGVmaW5lCV9TX0lSVVNSCV9TX0lSRUFECisjZGVmaW5lCV9TX0lTRElSKG0pCSgoKG0pICYgX1NfSUZNVCkgPT0gX1NfSUZESVIpCisKKyNkZWZpbmUJU19JRklGTwkJX1NfSUZJRk8KKyNkZWZpbmUJU19JRkNIUgkJX1NfSUZDSFIKKyNkZWZpbmUJU19JRkJMSwkJX1NfSUZCTEsKKyNkZWZpbmUJU19JRkRJUgkJX1NfSUZESVIKKyNkZWZpbmUJU19JRlJFRwkJX1NfSUZSRUcKKyNkZWZpbmUJU19JRk1UCQlfU19JRk1UCisjZGVmaW5lCVNfSUVYRUMJCV9TX0lFWEVDCisjZGVmaW5lCVNfSVdSSVRFCV9TX0lXUklURQorI2RlZmluZQlTX0lSRUFECQlfU19JUkVBRAorI2RlZmluZQlTX0lSV1hVCQlfU19JUldYVQorI2RlZmluZQlTX0lYVVNSCQlfU19JWFVTUgorI2RlZmluZQlTX0lXVVNSCQlfU19JV1VTUgorI2RlZmluZQlTX0lSVVNSCQlfU19JUlVTUgorCisKKyNkZWZpbmUJU19JU0RJUihtKQkoKChtKSAmIFNfSUZNVCkgPT0gU19JRkRJUikKKyNkZWZpbmUJU19JU1JFRyhtKQkoKChtKSAmIFNfSUZNVCkgPT0gU19JRlJFRykKKyNkZWZpbmUJU19JU0ZJRk8obSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZJRk8pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS91dGltZS5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS91dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyODVmMzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3V0aW1lLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPHN5cy91dGltZS5oPgpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9jbGluay5wbCBiL2NvbXBhdC92Y2J1aWxkL3NjcmlwdHMvY2xpbmsucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDlmNzFiNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL3NjcmlwdHMvY2xpbmsucGwKQEAgLTAsMCArMSwxMzEgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb21waWxlcyBvciBsaW5rcyBmaWxlcworIworIyBUaGlzIGlzIGEgd3JhcHBlciB0byBmYWNpbGl0YXRlIHRoZSBjb21waWxhdGlvbiBvZiBHaXQgd2l0aCBNU1ZDCisjIHVzaW5nIEdOVSBNYWtlIGFzIHRoZSBidWlsZCBzeXN0ZW0uIFNvLCBpbnN0ZWFkIG9mIG1hbmlwdWxhdGluZyB0aGUKKyMgTWFrZWZpbGUgaW50byBzb21ldGhpbmcgbmFzdHksIGp1c3QgdG8gc3VwcG9ydCBub24tc3BhY2UgYXJndW1lbnRzCisjIGV0Yywgd2UgdXNlIHRoaXMgd3JhcHBlciB0byBmaXggdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBNYXJpdXMgU3Rvcm0tT2xzZW4gPG1zdG9ybW9AZ21haWwuY29tPgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordXNlIHN0cmljdDsKK215IEBhcmdzID0gKCk7CitteSBAY2ZsYWdzID0gKCk7CitteSBAbGZsYWdzID0gKCk7CitteSAkaXNfbGlua2luZyA9IDA7CitteSAkaXNfZGVidWcgPSAwOword2hpbGUgKEBBUkdWKSB7CisJbXkgJGFyZyA9IHNoaWZ0IEBBUkdWOworCWlmICgiJGFyZyIgZXEgIi1EREVCVUciKSB7CisJICAgICMgU29tZSB2Y3BrZy1iYXNlZCBsaWJyYXJpZXMgaGF2ZSBkaWZmZXJlbnQgbmFtZXMgZm9yIHJlbGVhc2UKKwkgICAgIyBhbmQgZGVidWcgdmVyc2lvbnMuICBUaGlzIGhhY2sgYXNzdW1lcyB0aGF0IC1EREVCVUcgY29tZXMKKwkgICAgIyBiZWZvcmUgYW55ICItbCoiIGZsYWdzLgorCSAgICAkaXNfZGVidWcgPSAxOworCX0KKwlpZiAoIiRhcmciID1+IC9eLVtESU1HT1pdLykgeworCQlwdXNoKEBjZmxhZ3MsICRhcmcpOworCX0gZWxzaWYgKCIkYXJnIiBlcSAiLW8iKSB7CisJCW15ICRmaWxlX291dCA9IHNoaWZ0IEBBUkdWOworCQlpZiAoIiRmaWxlX291dCIgPX4gL2V4ZSQvKSB7CisJCQkkaXNfbGlua2luZyA9IDE7CisJCQkjIENyZWF0ZSBmb28uZXhlIGFuZCBmb28ucGRiCisJCQlwdXNoKEBhcmdzLCAiLU9VVDokZmlsZV9vdXQiKTsKKwkJfSBlbHNlIHsKKwkJCSMgQ3JlYXRlIGZvby5vIGFuZCBmb28uby5wZGIKKwkJCXB1c2goQGFyZ3MsICItRm8kZmlsZV9vdXQiKTsKKwkJCXB1c2goQGFyZ3MsICItRmQkZmlsZV9vdXQucGRiIik7CisJCX0KKwl9IGVsc2lmICgiJGFyZyIgZXEgIi1seiIpIHsKKwkgICAgaWYgKCRpc19kZWJ1ZykgeworCQlwdXNoKEBhcmdzLCAiemxpYmQubGliIik7CisJICAgIH0gZWxzZXsKKwkJcHVzaChAYXJncywgInpsaWIubGliIik7CisJICAgIH0KKwl9IGVsc2lmICgiJGFyZyIgZXEgIi1saWNvbnYiKSB7CisJCXB1c2goQGFyZ3MsICJsaWJpY29udi5saWIiKTsKKwl9IGVsc2lmICgiJGFyZyIgZXEgIi1sY3J5cHRvIikgeworCQlwdXNoKEBhcmdzLCAibGliY3J5cHRvLmxpYiIpOworCX0gZWxzaWYgKCIkYXJnIiBlcSAiLWxzc2wiKSB7CisJCXB1c2goQGFyZ3MsICJsaWJzc2wubGliIik7CisJfSBlbHNpZiAoIiRhcmciIGVxICItbGN1cmwiKSB7CisJCW15ICRsaWIgPSAiIjsKKwkJIyBOZXdlciB2Y3BrZyBkZWZpbml0aW9ucyBjYWxsIHRoaXMgbGliY3VybF9pbXAubGliOyBEbyB3ZQorCQkjIG5lZWQgdG8gdXNlIHRoYXQgaW5zdGVhZD8KKwkJZm9yZWFjaCBteSAkZmxhZyAoQGxmbGFncykgeworCQkJaWYgKCRmbGFnID1+IC9eLUxJQlBBVEg6KC4qKS8pIHsKKwkJCQlmb3JlYWNoIG15ICRsICgibGliY3VybF9pbXAubGliIiwgImxpYmN1cmwubGliIikgeworCQkJCQlpZiAoLWYgIiQxLyRsIikgeworCQkJCQkJJGxpYiA9ICRsOworCQkJCQkJbGFzdDsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQlwdXNoKEBhcmdzLCAkbGliKTsKKwl9IGVsc2lmICgiJGFyZyIgZXEgIi1sZXhwYXQiKSB7CisJCXB1c2goQGFyZ3MsICJleHBhdC5saWIiKTsKKwl9IGVsc2lmICgiJGFyZyIgPX4gL14tTC8gJiYgIiRhcmciIG5lICItTFRDRyIpIHsKKwkJJGFyZyA9fiBzL14tTC8tTElCUEFUSDovOworCQlwdXNoKEBsZmxhZ3MsICRhcmcpOworCX0gZWxzaWYgKCIkYXJnIiA9fiAvXi1bUmxdLykgeworCQkjIGVhdAorCX0gZWxzaWYgKCIkYXJnIiBlcSAiLVdlcnJvciIpIHsKKwkJcHVzaChAY2ZsYWdzLCAiLVdYIik7CisJfSBlbHNpZiAoIiRhcmciIGVxICItV2FsbCIpIHsKKwkJIyBjbC5leGUgdW5kZXJzdGFuZHMgLVdhbGwsIGJ1dCBpdCBpcyByZWFsbHkgb3ZlcnplYWxvdXMKKwkJcHVzaChAY2ZsYWdzLCAiLVc0Iik7CisJCSMgZGlzYWJsZSB0aGUgInNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaCIgd2FybmluZ3M7IG91ciBzb3VyY2UgY29kZSB2aW9sYXRlcyB0aGF0CisJCXB1c2goQGNmbGFncywgIi13ZDQwMTgiKTsKKwkJcHVzaChAY2ZsYWdzLCAiLXdkNDI0NSIpOworCQlwdXNoKEBjZmxhZ3MsICItd2Q0Mzg5Iik7CisJCSMgZGlzYWJsZSB0aGUgInVucmVmZXJlbmNlZCBmb3JtYWwgcGFyYW1ldGVyIiB3YXJuaW5nOyBvdXIgc291cmNlIGNvZGUgdmlvbGF0ZXMgdGhhdAorCQlwdXNoKEBjZmxhZ3MsICItd2Q0MTAwIik7CisJCSMgZGlzYWJsZSB0aGUgImNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQiIHdhcm5pbmc7IG91ciBzb3VyY2UgY29kZSB2aW9sYXRlcyB0aGF0CisJCXB1c2goQGNmbGFncywgIi13ZDQxMjciKTsKKwkJIyBkaXNhYmxlIHRoZSAiY29uc3Qgb2JqZWN0IHNob3VsZCBiZSBpbml0aWFsaXplZCIgd2FybmluZzsgdGhlc2Ugd2FybmluZ3MgYWZmZWN0IG9ubHkgb2JqZWN0cyB0aGF0IGFyZSBgc3RhdGljYAorCQlwdXNoKEBjZmxhZ3MsICItd2Q0MTMyIik7CisJCSMgZGlzYWJsZSB0aGUgImZ1bmN0aW9uL2RhdGEgcG9pbnRlciBjb252ZXJzaW9uIGluIGV4cHJlc3Npb24iIHdhcm5pbmc7IG91ciBzb3VyY2UgY29kZSB2aW9sYXRlcyB0aGF0CisJCXB1c2goQGNmbGFncywgIi13ZDQxNTIiKTsKKwkJIyBkaXNhYmxlIHRoZSAibm9uLWNvbnN0YW50IGFnZ3JlZ2F0ZSBpbml0aWFsaXplciIgd2FybmluZzsgb3VyIHNvdXJjZSBjb2RlIHZpb2xhdGVzIHRoYXQKKwkJcHVzaChAY2ZsYWdzLCAiLXdkNDIwNCIpOworCQkjIGRpc2FibGUgdGhlICJjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgdXNpbmcgYWRkcmVzcyBvZiBhdXRvbWF0aWMgdmFyaWFibGUiIHdhcm5pbmc7IG91ciBzb3VyY2UgY29kZSB2aW9sYXRlcyB0aGF0CisJCXB1c2goQGNmbGFncywgIi13ZDQyMjEiKTsKKwkJIyBkaXNhYmxlIHRoZSAicG9zc2libGUgbG9zcyBvZiBkYXRhIiB3YXJuaW5nczsgb3VyIHNvdXJjZSBjb2RlIHZpb2xhdGVzIHRoYXQKKwkJcHVzaChAY2ZsYWdzLCAiLXdkNDI0NCIpOworCQlwdXNoKEBjZmxhZ3MsICItd2Q0MjY3Iik7CisJCSMgZGlzYWJsZSB0aGUgImFycmF5IGlzIHRvbyBzbWFsbCB0byBpbmNsdWRlIGEgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIiIHdhcm5pbmc7IHdlIGFiLXVzZSBzdHJpbmdzIHRvIGluaXRpYWxpemUgT0lEcworCQlwdXNoKEBjZmxhZ3MsICItd2Q0Mjk1Iik7CisJCSMgZGlzYWJsZSB0aGUgIic8PCc6IHJlc3VsdCBvZiAzMi1iaXQgc2hpZnQgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gNjQgYml0cyIgd2FybmluZzsgb3VyIHNvdXJjZSBjb2RlIHZpb2xhdGVzIHRoYXQKKwkJcHVzaChAY2ZsYWdzLCAiLXdkNDMzNCIpOworCQkjIGRpc2FibGUgdGhlICJkZWNsYXJhdGlvbiBoaWRlcyBwcmV2aW91cyBsb2NhbCBkZWNsYXJhdGlvbiIgd2FybmluZzsgb3VyIHNvdXJjZSBjb2RlIHZpb2xhdGVzIHRoYXQKKwkJcHVzaChAY2ZsYWdzLCAiLXdkNDQ1NiIpOworCQkjIGRpc2FibGUgdGhlICJkZWNsYXJhdGlvbiBoaWRlcyBmdW5jdGlvbiBwYXJhbWV0ZXIiIHdhcm5pbmc7IG91ciBzb3VyY2UgY29kZSB2aW9sYXRlcyB0aGF0CisJCXB1c2goQGNmbGFncywgIi13ZDQ0NTciKTsKKwkJIyBkaXNhYmxlIHRoZSAiZGVjbGFyYXRpb24gaGlkZXMgZ2xvYmFsIGRlY2xhcmF0aW9uIiB3YXJuaW5nOyBvdXIgc291cmNlIGNvZGUgdmlvbGF0ZXMgdGhhdAorCQlwdXNoKEBjZmxhZ3MsICItd2Q0NDU5Iik7CisJCSMgZGlzYWJsZSB0aGUgInBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGUgJzxuYW1lPicgdXNlZCIgd2FybmluZzsgb3VyIHNvdXJjZSBjb2RlIHZpb2xhdGVzIHRoYXQKKwkJcHVzaChAY2ZsYWdzLCAiLXdkNDcwMSIpOworCQkjIGRpc2FibGUgdGhlICJ1bnJlYWNoYWJsZSBjb2RlIiB3YXJuaW5nOyBvdXIgc291cmNlIGNvZGUgdmlvbGF0ZXMgdGhhdAorCQlwdXNoKEBjZmxhZ3MsICItd2Q0NzAyIik7CisJCSMgZGlzYWJsZSB0aGUgInBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbG9jYWwgcG9pbnRlciB2YXJpYWJsZSB1c2VkIiB3YXJuaW5nOyBvdXIgc291cmNlIGNvZGUgdmlvbGF0ZXMgdGhhdAorCQlwdXNoKEBjZmxhZ3MsICItd2Q0NzAzIik7CisJCSMgZGlzYWJsZSB0aGUgImFzc2lnbm1lbnQgd2l0aGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24iIHdhcm5pbmc7IG91ciBzb3VyY2UgY29kZSB2aW9sYXRlcyB0aGF0CisJCXB1c2goQGNmbGFncywgIi13ZDQ3MDYiKTsKKwkJIyBkaXNhYmxlIHRoZSAiJ2luZXRfbnRvYSc6IFVzZSBpbmV0X250b3AoKSBvciBJbmV0TnRvcCgpIGluc3RlYWQiIHdhcm5pbmc7IG91ciBzb3VyY2UgY29kZSB2aW9sYXRlcyB0aGF0CisJCXB1c2goQGNmbGFncywgIi13ZDQ5OTYiKTsKKwl9IGVsc2lmICgiJGFyZyIgPX4gL14tV1thLXpdLykgeworCQkjIGxldCdzIGlnbm9yZSB0aG9zZQorCX0gZWxzZSB7CisJCXB1c2goQGFyZ3MsICRhcmcpOworCX0KK30KK2lmICgkaXNfbGlua2luZykgeworCXB1c2goQGFyZ3MsIEBsZmxhZ3MpOworCXVuc2hpZnQoQGFyZ3MsICJsaW5rLmV4ZSIpOworfSBlbHNlIHsKKwl1bnNoaWZ0KEBhcmdzLCAiY2wuZXhlIik7CisJcHVzaChAYXJncywgQGNmbGFncyk7Cit9CitwcmludGYoU1RERVJSICIqKioqIEBhcmdzXG5cblxuIikgaWYgKCFkZWZpbmVkKCRFTlZ7J1FVSUVUX0dFTid9KSk7CitleGl0IChzeXN0ZW0oQGFyZ3MpICE9IDApOwpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9saWIucGwgYi9jb21wYXQvdmNidWlsZC9zY3JpcHRzL2xpYi5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kODA1NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9saWIucGwKQEAgLTAsMCArMSwyNiBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIExpYmlmaWVzIGZpbGVzIG9uIFdpbmRvd3MKKyMKKyMgVGhpcyBpcyBhIHdyYXBwZXIgdG8gZmFjaWxpdGF0ZSB0aGUgY29tcGlsYXRpb24gb2YgR2l0IHdpdGggTVNWQworIyB1c2luZyBHTlUgTWFrZSBhcyB0aGUgYnVpbGQgc3lzdGVtLiBTbywgaW5zdGVhZCBvZiBtYW5pcHVsYXRpbmcgdGhlCisjIE1ha2VmaWxlIGludG8gc29tZXRoaW5nIG5hc3R5LCBqdXN0IHRvIHN1cHBvcnQgbm9uLXNwYWNlIGFyZ3VtZW50cworIyBldGMsIHdlIHVzZSB0aGlzIHdyYXBwZXIgdG8gZml4IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucworIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgTWFyaXVzIFN0b3JtLU9sc2VuIDxtc3Rvcm1vQGdtYWlsLmNvbT4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3VzZSBzdHJpY3Q7CitteSBAYXJncyA9ICgpOword2hpbGUgKEBBUkdWKSB7CisJbXkgJGFyZyA9IHNoaWZ0IEBBUkdWOworCWlmICgiJGFyZyIgZXEgInJjcyIpIHsKKwkJIyBDb25zdW1lIHRoZSByY3Mgb3B0aW9uCisJfSBlbHNpZiAoIiRhcmciID1+IC9cLmEkLykgeworCQlwdXNoKEBhcmdzLCAiLU9VVDokYXJnIik7CisJfSBlbHNlIHsKKwkJcHVzaChAYXJncywgJGFyZyk7CisJfQorfQordW5zaGlmdChAYXJncywgImxpYi5leGUiKTsKKyMgcHJpbnRmKCIqKioqIEBhcmdzXG4iKTsKK2V4aXQgKHN5c3RlbShAYXJncykgIT0gMCk7CmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC92Y3BrZ19jb3B5X2RsbHMuYmF0IGIvY29tcGF0L3ZjYnVpbGQvdmNwa2dfY29weV9kbGxzLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzY2MWMxCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvdmNwa2dfY29weV9kbGxzLmJhdApAQCAtMCwwICsxLDM5IEBACitARUNITyBPRkYKK1JFTSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSRU0gVGhpcyBzY3JpcHQgaXMgYW4gb3B0aW9uYWwgc3RlcC4gSXQgY29waWVzIHRoZSAqLmRsbCBhbmQgKi5wZGIKK1JFTSBmaWxlcyAoY3JlYXRlZCBieSB2Y3BrZ19pbnN0YWxsLmJhdCkgaW50byB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeQorUkVNIG9mIHRoZSByZXBvIHNvIHRoYXQgeW91IGNhbiB0eXBlICIuL2dpdC5leGUiIGFuZCBmaW5kIHRoZW0gd2l0aG91dAorUkVNIGhhdmluZyB0byBmaXh1cCB5b3VyIFBBVEguCitSRU0KK1JFTSBOT1RFOiBCZWNhdXNlIHRoZSBuYW1lcyBvZiBzb21lIERMTCBmaWxlcyBjaGFuZ2UgYmV0d2VlbiBERUJVRyBhbmQKK1JFTSBOT1RFOiBSRUxFQVNFIGJ1aWxkcyB3aGVuIGJ1aWx0IHVzaW5nICJ2Y3BrZy5leGUiLCB5b3Ugd2lsbCBuZWVkCitSRU0gTk9URTogdG8gY29weSB1cCB0aGUgY29ycmVzcG9uZGluZyB2ZXJzaW9uLgorUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVNFVExPQ0FMIEVuYWJsZURlbGF5ZWRFeHBhbnNpb24KKworCUBGT1IgL0YgImRlbGltcz0iICUlRCBJTiAoIiV+ZHAwIikgRE8gQFNFVCBjd2Q9JSV+ZkQKKwljZCAlY3dkJQorCisJU0VUIGFyY2g9eDY0LXdpbmRvd3MKKwlTRVQgaW5zdD0lY3dkJXZjcGtnXGluc3RhbGxlZFwlYXJjaCUKKworCUlGIFslMV09PVtyZWxlYXNlXSAoCisJCWVjaG8gQ29weWluZyBSRUxFQVNFIG1vZGUgRExMcyB0byByZXBvIHJvb3QuLi4KKwkpIEVMU0UgSUYgWyUxXT09W2RlYnVnXSAoCisJCVNFVCBpbnN0PSVpbnN0JVxkZWJ1ZworCQllY2hvIENvcHlpbmcgREVCVUcgbW9kZSBETExzIHRvIHJlcG8gcm9vdC4uLgorCSkgRUxTRSAoCisJCWVjaG8gRVJST1I6IEludmFsaWQgYXJndW1lbnQuCisJCWVjaG8gVXNhZ2U6ICV+MCByZWxlYXNlCisJCWVjaG8gVXNhZ2U6ICV+MCBkZWJ1ZworCQlFWElUIC9CIDEKKwkpCisKKwl4Y29weSAvZS9zL3YveSAlaW5zdCVcYmluXCouZGxsIC4uXC4uXAorCXhjb3B5IC9lL3Mvdi95ICVpbnN0JVxiaW5cKi5wZGIgLi5cLi5cCisKKwl4Y29weSAvZS9zL3YveSAlaW5zdCVcYmluXCouZGxsIC4uXC4uXHRcaGVscGVyXAorCXhjb3B5IC9lL3Mvdi95ICVpbnN0JVxiaW5cKi5wZGIgLi5cLi5cdFxoZWxwZXJcCisKKwlFWElUIC9CIDAKZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL3ZjcGtnX2luc3RhbGwuYmF0IGIvY29tcGF0L3ZjYnVpbGQvdmNwa2dfaW5zdGFsbC5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJkMGJhZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL3ZjcGtnX2luc3RhbGwuYmF0CkBAIC0wLDAgKzEsODAgQEAKK0BFQ0hPIE9GRgorUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JFTSBUaGlzIHNjcmlwdCBpbnN0YWxscyB0aGUgInZjcGtnIiBzb3VyY2UgcGFja2FnZSBtYW5hZ2VyIGFuZCB1c2VzCitSRU0gaXQgdG8gYnVpbGQgdGhlIHRoaXJkLXBhcnR5IGxpYnJhcmllcyB0aGF0IGdpdCByZXF1aXJlcyB3aGVuIGl0CitSRU0gaXMgYnVpbHQgdXNpbmcgTVNWQy4KK1JFTQorUkVNIFsxXSBJbnN0YWxsIFZDUEtHLgorUkVNICAgICBbYV0gQ3JlYXRlIDxyb290Pi9jb21wYXQvdmNidWlsZC92Y3BrZy8KK1JFTSAgICAgW2JdIERvd25sb2FkICJ2Y3BrZyIuCitSRU0gICAgIFtjXSBDb21waWxlIHVzaW5nIHRoZSBjdXJyZW50bHkgaW5zdGFsbGVkIHZlcnNpb24gb2YgVlMuCitSRU0gICAgIFtkXSBDcmVhdGUgPHJvb3Q+L2NvbXBhdC92Y2J1aWxkL3ZjcGtnL3ZjcGtnLmV4ZQorUkVNCitSRU0gWzJdIEluc3RhbGwgdGhpcmQtcGFydHkgbGlicmFyaWVzLgorUkVNICAgICBbYV0gRG93bmxvYWQgZWFjaCAod2hpY2ggbWF5IGFsc28gaW5zdGFsbCBDTUFLRSkuCitSRU0gICAgIFtiXSBDb21waWxlIGluIFJFTEVBU0UgbW9kZSBhbmQgaW5zdGFsbCBpbjoKK1JFTSAgICAgICAgIHZjcGtnL2luc3RhbGxlZC88YXJjaD4ve2JpbixsaWJ9CitSRU0gICAgIFtjXSBDb21waWxlIGluIERFQlVHIG1vZGUgYW5kIGluc3RhbGwgaW46CitSRU0gICAgICAgICB2Y3BrZy9pbnN0YWxsZWQvPGFyY2g+L2RlYnVnL3tiaW4sbGlifQorUkVNICAgICBbZF0gSW5zdGFsbCBoZWFkZXJzIGluOgorUkVNICAgICAgICAgdmNwa2cvaW5zdGFsbGVkLzxhcmNoPi9pbmNsdWRlCitSRU0KK1JFTSBbM10gQ3JlYXRlIGEgc2V0IG9mIE1BS0UgZGVmaW5pdGlvbnMgZm9yIHRoZSB0b3AtbGV2ZWwKK1JFTSAgICAgTWFrZWZpbGUgdG8gYWxsb3cgIm1ha2UgTVNWQz0xIiB0byBmaW5kIHRoZSBhYm92ZQorUkVNICAgICB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMuCitSRU0gICAgIFthXSBXcml0ZSB2Y3BrZy9WQ1BHSy1ERUZTCitSRU0KK1JFTSBodHRwczovL2Jsb2dzLm1zZG4ubWljcm9zb2Z0LmNvbS92Y2Jsb2cvMjAxNi8wOS8xOS92Y3BrZy1hLXRvb2wtdG8tYWNxdWlyZS1hbmQtYnVpbGQtYy1vcGVuLXNvdXJjZS1saWJyYXJpZXMtb24td2luZG93cy8KK1JFTSBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L3ZjcGtnCitSRU0gaHR0cHM6Ly92Y3BrZy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvCitSRU0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJU0VUTE9DQUwgRW5hYmxlRGVsYXllZEV4cGFuc2lvbgorCisJQEZPUiAvRiAiZGVsaW1zPSIgJSVEIElOICgiJX5kcDAiKSBETyBAU0VUIGN3ZD0lJX5mRAorCWNkICVjd2QlCisKKwlkaXIgdmNwa2dcdmNwa2cuZXhlID5udWwgMj5udWwgJiYgR09UTyA6aW5zdGFsbF9saWJyYXJpZXMKKworCWVjaG8gRmV0Y2hpbmcgdmNwa2cgaW4gJWN3ZCV2Y3BrZworCWdpdC5leGUgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC92Y3BrZyB2Y3BrZworCUlGIEVSUk9STEVWRUwgMSAoIEVYSVQgL0IgMSApCisKKwljZCB2Y3BrZworCWVjaG8gQnVpbGRpbmcgdmNwa2cKKwlwb3dlcnNoZWxsIC1leGVjIGJ5cGFzcyBzY3JpcHRzXGJvb3RzdHJhcC5wczEKKwlJRiBFUlJPUkxFVkVMIDEgKCBFWElUIC9CIDEgKQorCisJZWNobyBTdWNjZXNzZnVsbHkgaW5zdGFsbGVkICVjd2QldmNwa2dcdmNwa2cuZXhlCisKKzppbnN0YWxsX2xpYnJhcmllcworCVNFVCBhcmNoPXg2NC13aW5kb3dzCisKKwllY2hvIEluc3RhbGxpbmcgdGhpcmQtcGFydHkgbGlicmFyaWVzLi4uCisJRk9SICUlaSBJTiAoemxpYiBleHBhdCBsaWJpY29udiBvcGVuc3NsIGxpYnNzaDIgY3VybCkgRE8gKAorCSAgICBjZCAlY3dkJXZjcGtnCisJICAgIElGIE5PVCBFWElTVCAicGFja2FnZXNcJSVpXyVhcmNoJSIgQ0FMTCA6c3ViX19pbnN0YWxsX29uZSAlJWkKKwkgICAgSUYgRVJST1JMRVZFTCAxICggRVhJVCAvQiAxICkKKwkpCisKKzppbnN0YWxsX2RlZmluZXMKKwljZCAlY3dkJQorCVNFVCBpbnN0PSVjd2QldmNwa2dcaW5zdGFsbGVkXCVhcmNoJQorCisJZWNobyB2Y3BrZ19pbmM9LUkiJWluc3QlXGluY2x1ZGUiPlZDUEtHLURFRlMKKwllY2hvIHZjcGtnX3JlbF9saWI9LUwiJWluc3QlXGxpYiI+PlZDUEtHLURFRlMKKwllY2hvIHZjcGtnX3JlbF9iaW49IiVpbnN0JVxiaW4iPj5WQ1BLRy1ERUZTCisJZWNobyB2Y3BrZ19kYmdfbGliPS1MIiVpbnN0JVxkZWJ1Z1xsaWIiPj5WQ1BLRy1ERUZTCisJZWNobyB2Y3BrZ19kYmdfYmluPSIlaW5zdCVcZGVidWdcYmluIj4+VkNQS0ctREVGUworCisJRVhJVCAvQiAwCisKKworOnN1Yl9faW5zdGFsbF9vbmUKKwllY2hvICAgICBJbnN0YWxsaW5nIHBhY2thZ2UgJTEuLi4KKworCS5cdmNwa2cuZXhlIGluc3RhbGwgJTE6JWFyY2glCisJSUYgRVJST1JMRVZFTCAxICggRVhJVCAvQiAxICkKKworCWVjaG8gICAgIEZpbmlzaGVkICUxCisJZ290byA6RU9GCmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIuaCBiL2NvbXBhdC93aW4zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5N2U4ODAKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzIuaApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmIFdJTjMyX0gKKyNkZWZpbmUgV0lOMzJfSAorCisvKiBjb21tb24gV2luMzIgZnVuY3Rpb25zIGZvciBNaW5HVyBhbmQgQ3lnd2luICovCisjaWZuZGVmIEdJVF9XSU5ET1dTX05BVElWRQkvKiBOb3QgZGVmaW5lZCBmb3IgQ3lnd2luICovCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbGVfYXR0cl90b19zdF9tb2RlIChEV09SRCBhdHRyKQoreworCWludCBmTW9kZSA9IFNfSVJFQUQ7CisJaWYgKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCisJCWZNb2RlIHw9IFNfSUZESVI7CisJZWxzZQorCQlmTW9kZSB8PSBTX0lGUkVHOworCWlmICghKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkpCisJCWZNb2RlIHw9IFNfSVdSSVRFOworCXJldHVybiBmTW9kZTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X2ZpbGVfYXR0cihjb25zdCBjaGFyICpmbmFtZSwgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSAqZmRhdGEpCit7CisJaWYgKEdldEZpbGVBdHRyaWJ1dGVzRXhBKGZuYW1lLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsIGZkYXRhKSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKEdldExhc3RFcnJvcigpKSB7CisJY2FzZSBFUlJPUl9BQ0NFU1NfREVOSUVEOgorCWNhc2UgRVJST1JfU0hBUklOR19WSU9MQVRJT046CisJY2FzZSBFUlJPUl9MT0NLX1ZJT0xBVElPTjoKKwljYXNlIEVSUk9SX1NIQVJJTkdfQlVGRkVSX0VYQ0VFREVEOgorCQlyZXR1cm4gRUFDQ0VTOworCWNhc2UgRVJST1JfQlVGRkVSX09WRVJGTE9XOgorCQlyZXR1cm4gRU5BTUVUT09MT05HOworCWNhc2UgRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk6CisJCXJldHVybiBFTk9NRU07CisJZGVmYXVsdDoKKwkJcmV0dXJuIEVOT0VOVDsKKwl9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL2FsbG9jYS5oIGIvY29tcGF0L3dpbjMyL2FsbG9jYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZDc5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzIvYWxsb2NhLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPG1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL2RpcmVudC5jIGIvY29tcGF0L3dpbjMyL2RpcmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDIwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzIvZGlyZW50LmMKQEAgLTAsMCArMSw5MiBAQAorI2luY2x1ZGUgIi4uLy4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitzdHJ1Y3QgRElSIHsKKwlzdHJ1Y3QgZGlyZW50IGRkX2RpcjsgLyogaW5jbHVkZXMgZF90eXBlICovCisJSEFORExFIGRkX2hhbmRsZTsgICAgIC8qIEZpbmRGaXJzdEZpbGUgaGFuZGxlICovCisJaW50IGRkX3N0YXQ7ICAgICAgICAgIC8qIDAtYmFzZWQgaW5kZXggKi8KK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaW5kZGF0YTJkaXJlbnQoc3RydWN0IGRpcmVudCAqZW50LCBXSU4zMl9GSU5EX0RBVEFXICpmZGF0YSkKK3sKKwkvKiBjb252ZXJ0IFVURi0xNiBuYW1lIHRvIFVURi04ICovCisJeHdjc3RvdXRmKGVudC0+ZF9uYW1lLCBmZGF0YS0+Y0ZpbGVOYW1lLCBzaXplb2YoZW50LT5kX25hbWUpKTsKKworCS8qIFNldCBmaWxlIHR5cGUsIGJhc2VkIG9uIFdJTjMyX0ZJTkRfREFUQSAqLworCWlmIChmZGF0YS0+ZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKwkJZW50LT5kX3R5cGUgPSBEVF9ESVI7CisJZWxzZQorCQllbnQtPmRfdHlwZSA9IERUX1JFRzsKK30KKworRElSICpvcGVuZGlyKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJd2NoYXJfdCBwYXR0ZXJuW01BWF9QQVRIICsgMl07IC8qICsgMiBmb3IgJy8nICcqJyAqLworCVdJTjMyX0ZJTkRfREFUQVcgZmRhdGE7CisJSEFORExFIGg7CisJaW50IGxlbjsKKwlESVIgKmRpcjsKKworCS8qIGNvbnZlcnQgbmFtZSB0byBVVEYtMTYgYW5kIGNoZWNrIGxlbmd0aCA8IE1BWF9QQVRIICovCisJaWYgKChsZW4gPSB4dXRmdG93Y3NfcGF0aChwYXR0ZXJuLCBuYW1lKSkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIGFwcGVuZCBvcHRpb25hbCAnLycgYW5kIHdpbGRjYXJkICcqJyAqLworCWlmIChsZW4gJiYgIWlzX2Rpcl9zZXAocGF0dGVybltsZW4gLSAxXSkpCisJCXBhdHRlcm5bbGVuKytdID0gJy8nOworCXBhdHRlcm5bbGVuKytdID0gJyonOworCXBhdHRlcm5bbGVuXSA9IDA7CisKKwkvKiBvcGVuIGZpbmQgaGFuZGxlICovCisJaCA9IEZpbmRGaXJzdEZpbGVXKHBhdHRlcm4sICZmZGF0YSk7CisJaWYgKGggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkJRFdPUkQgZXJyID0gR2V0TGFzdEVycm9yKCk7CisJCWVycm5vID0gKGVyciA9PSBFUlJPUl9ESVJFQ1RPUlkpID8gRU5PVERJUiA6IGVycl93aW5fdG9fcG9zaXgoZXJyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogaW5pdGlhbGl6ZSBESVIgc3RydWN0dXJlIGFuZCBjb3B5IGZpcnN0IGRpciBlbnRyeSAqLworCWRpciA9IHhtYWxsb2Moc2l6ZW9mKERJUikpOworCWRpci0+ZGRfaGFuZGxlID0gaDsKKwlkaXItPmRkX3N0YXQgPSAwOworCWZpbmRkYXRhMmRpcmVudCgmZGlyLT5kZF9kaXIsICZmZGF0YSk7CisJcmV0dXJuIGRpcjsKK30KKworc3RydWN0IGRpcmVudCAqcmVhZGRpcihESVIgKmRpcikKK3sKKwlpZiAoIWRpcikgeworCQllcnJubyA9IEVCQURGOyAvKiBObyBzZXRfZXJybm8gZm9yIG1pbmd3ICovCisJCXJldHVybiBOVUxMOworCX0KKworCS8qIGlmIGZpcnN0IGVudHJ5LCBkaXJlbnQgaGFzIGFscmVhZHkgYmVlbiBzZXQgdXAgYnkgb3BlbmRpciAqLworCWlmIChkaXItPmRkX3N0YXQpIHsKKwkJLyogZ2V0IG5leHQgZW50cnkgYW5kIGNvbnZlcnQgZnJvbSBXSU4zMl9GSU5EX0RBVEEgdG8gZGlyZW50ICovCisJCVdJTjMyX0ZJTkRfREFUQVcgZmRhdGE7CisJCWlmIChGaW5kTmV4dEZpbGVXKGRpci0+ZGRfaGFuZGxlLCAmZmRhdGEpKSB7CisJCQlmaW5kZGF0YTJkaXJlbnQoJmRpci0+ZGRfZGlyLCAmZmRhdGEpOworCQl9IGVsc2UgeworCQkJRFdPUkQgbGFzdGVyciA9IEdldExhc3RFcnJvcigpOworCQkJLyogUE9TSVggc2F5cyB5b3Ugc2hvdWxkbid0IHNldCBlcnJubyB3aGVuIHJlYWRkaXIgY2FuJ3QKKwkJCSAgIGZpbmQgYW55IG1vcmUgZmlsZXM7IHNvLCBpZiBhbm90aGVyIGVycm9yIHdlIGxlYXZlIGl0IHNldC4gKi8KKwkJCWlmIChsYXN0ZXJyICE9IEVSUk9SX05PX01PUkVfRklMRVMpCisJCQkJZXJybm8gPSBlcnJfd2luX3RvX3Bvc2l4KGxhc3RlcnIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwkrK2Rpci0+ZGRfc3RhdDsKKwlyZXR1cm4gJmRpci0+ZGRfZGlyOworfQorCitpbnQgY2xvc2VkaXIoRElSICpkaXIpCit7CisJaWYgKCFkaXIpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuIC0xOworCX0KKworCUZpbmRDbG9zZShkaXItPmRkX2hhbmRsZSk7CisJZnJlZShkaXIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL2RpcmVudC5oIGIvY29tcGF0L3dpbjMyL2RpcmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ODIwN2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzIvZGlyZW50LmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBESVJFTlRfSAorI2RlZmluZSBESVJFTlRfSAorCit0eXBlZGVmIHN0cnVjdCBESVIgRElSOworCisjZGVmaW5lIERUX1VOS05PV04gMAorI2RlZmluZSBEVF9ESVIgICAgIDEKKyNkZWZpbmUgRFRfUkVHICAgICAyCisjZGVmaW5lIERUX0xOSyAgICAgMworCitzdHJ1Y3QgZGlyZW50IHsKKwl1bnNpZ25lZCBjaGFyIGRfdHlwZTsgICAgICAvKiBmaWxlIHR5cGUgdG8gcHJldmVudCBsc3RhdCBhZnRlciByZWFkZGlyICovCisJY2hhciBkX25hbWVbTUFYX1BBVEggKiAzXTsgLyogZmlsZSBuYW1lICgqIDMgZm9yIFVURi04IGNvbnZlcnNpb24pICovCit9OworCitESVIgKm9wZW5kaXIoY29uc3QgY2hhciAqZGlybmFtZSk7CitzdHJ1Y3QgZGlyZW50ICpyZWFkZGlyKERJUiAqZGlyKTsKK2ludCBjbG9zZWRpcihESVIgKmRpcik7CisKKyNlbmRpZiAvKiBESVJFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL2dpdC5tYW5pZmVzdCBiL2NvbXBhdC93aW4zMi9naXQubWFuaWZlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxZTNjYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC93aW4zMi9naXQubWFuaWZlc3QKQEAgLTAsMCArMSwyNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PgorPGFzc2VtYmx5IHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MSIgbWFuaWZlc3RWZXJzaW9uPSIxLjAiPgorCTxhc3NlbWJseUlkZW50aXR5IHR5cGU9IndpbjMyIiBuYW1lPSJHaXQiIHZlcnNpb249IjAuMC4wLjEiIC8+CisJPHRydXN0SW5mbyB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjIiPgorCQk8c2VjdXJpdHk+CisJCQk8cmVxdWVzdGVkUHJpdmlsZWdlcz4KKwkJCQk8cmVxdWVzdGVkRXhlY3V0aW9uTGV2ZWwgbGV2ZWw9ImFzSW52b2tlciIgdWlBY2Nlc3M9ImZhbHNlIiAvPgorCQkJPC9yZXF1ZXN0ZWRQcml2aWxlZ2VzPgorCQk8L3NlY3VyaXR5PgorCTwvdHJ1c3RJbmZvPgorCTxjb21wYXRpYmlsaXR5IHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmNvbXBhdGliaWxpdHkudjEiPgorCQk8YXBwbGljYXRpb24+CisJCQk8IS0tIFdpbmRvd3MgVmlzdGEgLS0+CisJCQk8c3VwcG9ydGVkT1MgSWQ9IntlMjAxMTQ1Ny0xNTQ2LTQzYzUtYTVmZS0wMDhkZWVlM2QzZjB9Ii8+CisJCQk8IS0tIFdpbmRvd3MgNyAtLT4KKwkJCTxzdXBwb3J0ZWRPUyBJZD0iezM1MTM4YjlhLTVkOTYtNGZiZC04ZTJkLWEyNDQwMjI1ZjkzYX0iLz4KKwkJCTwhLS0gV2luZG93cyA4IC0tPgorCQkJPHN1cHBvcnRlZE9TIElkPSJ7NGEyZjI4ZTMtNTNiOS00NDQxLWJhOWMtZDY5ZDRhNGE2ZTM4fSIvPgorCQkJPCEtLSBXaW5kb3dzIDguMSAtLT4KKwkJCTxzdXBwb3J0ZWRPUyBJZD0iezFmNjc2Yzc2LTgwZTEtNDIzOS05NWJiLTgzZDBmNmQwZGE3OH0iLz4KKwkJCTwhLS0gV2luZG93cyAxMCAtLT4KKwkJCTxzdXBwb3J0ZWRPUyBJZD0iezhlMGY3YTEyLWJmYjMtNGZlOC1iOWE1LTQ4ZmQ1MGExNWE5YX0iLz4KKwkJPC9hcHBsaWNhdGlvbj4KKwk8L2NvbXBhdGliaWxpdHk+Cis8L2Fzc2VtYmx5PgpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL2xhenlsb2FkLmggYi9jb21wYXQvd2luMzIvbGF6eWxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTYzMWM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL2xhenlsb2FkLmgKQEAgLTAsMCArMSw1NyBAQAorI2lmbmRlZiBMQVpZTE9BRF9ICisjZGVmaW5lIExBWllMT0FEX0gKKworLyoKKyAqIEEgcGFpciBvZiBtYWNyb3MgdG8gc2ltcGxpZnkgbG9hZGluZyBvZiBETEwgZnVuY3Rpb25zLiBFeGFtcGxlOgorICoKKyAqICAgREVDTEFSRV9QUk9DX0FERFIoa2VybmVsMzIuZGxsLCBCT09MLCBDcmVhdGVIYXJkTGlua1csCisgKiAgICAgICAgICAgICAgICAgICAgIExQQ1dTVFIsIExQQ1dTVFIsIExQU0VDVVJJVFlfQVRUUklCVVRFUyk7CisgKgorICogICBpZiAoIUlOSVRfUFJPQ19BRERSKENyZWF0ZUhhcmRMaW5rVykpCisgKiAgICAgICAgICAgcmV0dXJuIGVycm9yKCJDb3VsZCBub3QgZmluZCBDcmVhdGVIYXJkTGlua1coKSBmdW5jdGlvbiI7CisgKgorICogICBpZiAoIUNyZWF0ZUhhcmRMaW5rVyhzb3VyY2UsIHRhcmdldCwgTlVMTCkpCisgKiAgICAgICAgICAgcmV0dXJuIGVycm9yKCJjb3VsZCBub3QgY3JlYXRlIGhhcmRsaW5rIGZyb20gJVMgdG8gJVMiLAorICogICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIHRhcmdldCk7CisgKi8KKworc3RydWN0IHByb2NfYWRkciB7CisJY29uc3QgY2hhciAqY29uc3QgZGxsOworCWNvbnN0IGNoYXIgKmNvbnN0IGZ1bmN0aW9uOworCUZBUlBST0MgcGZ1bmN0aW9uOworCXVuc2lnbmVkIGluaXRpYWxpemVkIDogMTsKK307CisKKy8qIERlY2xhcmVzIGEgZnVuY3Rpb24gdG8gYmUgbG9hZGVkIGR5bmFtaWNhbGx5IGZyb20gYSBETEwuICovCisjZGVmaW5lIERFQ0xBUkVfUFJPQ19BRERSKGRsbCwgcmV0dHlwZSwgZnVuY3Rpb24sIC4uLikgXAorCXN0YXRpYyBzdHJ1Y3QgcHJvY19hZGRyIHByb2NfYWRkcl8jI2Z1bmN0aW9uID0gXAorCXsgI2RsbCwgI2Z1bmN0aW9uLCBOVUxMLCAwIH07IFwKKwlzdGF0aWMgcmV0dHlwZSAoV0lOQVBJICpmdW5jdGlvbikoX19WQV9BUkdTX18pCisKKy8qCisgKiBMb2FkcyBhIGZ1bmN0aW9uIGZyb20gYSBETEwgKG9uY2Utb25seSkuCisgKiBSZXR1cm5zIG5vbi1OVUxMIGZ1bmN0aW9uIHBvaW50ZXIgb24gc3VjY2Vzcy4KKyAqIFJldHVybnMgTlVMTCArIGVycm5vID09IEVOT1NZUyBvbiBmYWlsdXJlLgorICogVGhpcyBmdW5jdGlvbiBpcyBub3QgdGhyZWFkLXNhZmUuCisgKi8KKyNkZWZpbmUgSU5JVF9QUk9DX0FERFIoZnVuY3Rpb24pIFwKKwkoZnVuY3Rpb24gPSBnZXRfcHJvY19hZGRyKCZwcm9jX2FkZHJfIyNmdW5jdGlvbikpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZ2V0X3Byb2NfYWRkcihzdHJ1Y3QgcHJvY19hZGRyICpwcm9jKQoreworCS8qIG9ubHkgZG8gdGhpcyBvbmNlICovCisJaWYgKCFwcm9jLT5pbml0aWFsaXplZCkgeworCQlIQU5ETEUgaG5kOworCQlwcm9jLT5pbml0aWFsaXplZCA9IDE7CisJCWhuZCA9IExvYWRMaWJyYXJ5RXhBKHByb2MtPmRsbCwgTlVMTCwKKwkJCQkgICAgIExPQURfTElCUkFSWV9TRUFSQ0hfU1lTVEVNMzIpOworCQlpZiAoaG5kKQorCQkJcHJvYy0+cGZ1bmN0aW9uID0gR2V0UHJvY0FkZHJlc3MoaG5kLCBwcm9jLT5mdW5jdGlvbik7CisJfQorCS8qIHNldCBFTk9TWVMgaWYgRExMIG9yIGZ1bmN0aW9uIHdhcyBub3QgZm91bmQgKi8KKwlpZiAoIXByb2MtPnBmdW5jdGlvbikKKwkJZXJybm8gPSBFTk9TWVM7CisJcmV0dXJuIHByb2MtPnBmdW5jdGlvbjsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvcGF0aC11dGlscy5jIGIvY29tcGF0L3dpbjMyL3BhdGgtdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmYyZjEyCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL3BhdGgtdXRpbHMuYwpAQCAtMCwwICsxLDUyIEBACisjaW5jbHVkZSAiLi4vLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK2ludCB3aW4zMl9oYXNfZG9zX2RyaXZlX3ByZWZpeChjb25zdCBjaGFyICpwYXRoKQoreworCWludCBpOworCisJLyoKKwkgKiBEb2VzIGl0IHN0YXJ0IHdpdGggYW4gQVNDSUkgbGV0dGVyIChpLmUuIGhpZ2hlc3QgYml0IG5vdCBzZXQpLAorCSAqIGZvbGxvd2VkIGJ5IGEgY29sb24/CisJICovCisJaWYgKCEoMHg4MCAmICh1bnNpZ25lZCBjaGFyKSpwYXRoKSkKKwkJcmV0dXJuICpwYXRoICYmIHBhdGhbMV0gPT0gJzonID8gMiA6IDA7CisKKwkvKgorCSAqIFdoaWxlIGRyaXZlIGxldHRlcnMgbXVzdCBiZSBsZXR0ZXJzIG9mIHRoZSBFbmdsaXNoIGFscGhhYmV0LCBpdCBpcworCSAqIHBvc3NpYmxlIHRvIGFzc2lnbiB2aXJ0dWFsbHkgX2FueV8gVW5pY29kZSBjaGFyYWN0ZXIgdmlhIGBzdWJzdGAgYXMKKwkgKiBhIGRyaXZlIGxldHRlciB0byAidmlydHVhbCBkcml2ZXMiLiBFdmVuIGAxYCwgb3IgYMOkYC4gT3IgZnVuIHN0dWZmCisJICogbGlrZSB0aGlzOgorCSAqCisJICogICAgICBzdWJzdCDWjTogJVVTRVJQUk9GSUxFJVxEZXNrdG9wCisJICovCisJZm9yIChpID0gMTsgaSA8IDQgJiYgKDB4ODAgJiAodW5zaWduZWQgY2hhcilwYXRoW2ldKTsgaSsrKQorCQk7IC8qIHNraXAgZmlyc3QgVVRGLTggY2hhcmFjdGVyICovCisJcmV0dXJuIHBhdGhbaV0gPT0gJzonID8gaSArIDEgOiAwOworfQorCitpbnQgd2luMzJfc2tpcF9kb3NfZHJpdmVfcHJlZml4KGNoYXIgKipwYXRoKQoreworCWludCByZXQgPSBoYXNfZG9zX2RyaXZlX3ByZWZpeCgqcGF0aCk7CisJKnBhdGggKz0gcmV0OworCXJldHVybiByZXQ7Cit9CisKK2ludCB3aW4zMl9vZmZzZXRfMXN0X2NvbXBvbmVudChjb25zdCBjaGFyICpwYXRoKQoreworCWNoYXIgKnBvcyA9IChjaGFyICopcGF0aDsKKworCS8qIHVuYyBwYXRocyAqLworCWlmICghc2tpcF9kb3NfZHJpdmVfcHJlZml4KCZwb3MpICYmCisJCQlpc19kaXJfc2VwKHBvc1swXSkgJiYgaXNfZGlyX3NlcChwb3NbMV0pKSB7CisJCS8qIHNraXAgc2VydmVyIG5hbWUgKi8KKwkJcG9zID0gc3RycGJyayhwb3MgKyAyLCAiXFwvIik7CisJCWlmICghcG9zKQorCQkJcmV0dXJuIDA7IC8qIEVycm9yOiBtYWxmb3JtZWQgdW5jIHBhdGggKi8KKworCQlkbyB7CisJCQlwb3MrKzsKKwkJfSB3aGlsZSAoKnBvcyAmJiAhaXNfZGlyX3NlcCgqcG9zKSk7CisJfQorCisJcmV0dXJuIHBvcyArIGlzX2Rpcl9zZXAoKnBvcykgLSBwYXRoOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL3BhdGgtdXRpbHMuaCBiL2NvbXBhdC93aW4zMi9wYXRoLXV0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhMmI2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC93aW4zMi9wYXRoLXV0aWxzLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBXSU4zMl9QQVRIX1VUSUxTX0gKKyNkZWZpbmUgV0lOMzJfUEFUSF9VVElMU19ICisKK2ludCB3aW4zMl9oYXNfZG9zX2RyaXZlX3ByZWZpeChjb25zdCBjaGFyICpwYXRoKTsKKyNkZWZpbmUgaGFzX2Rvc19kcml2ZV9wcmVmaXggd2luMzJfaGFzX2Rvc19kcml2ZV9wcmVmaXgKKworaW50IHdpbjMyX3NraXBfZG9zX2RyaXZlX3ByZWZpeChjaGFyICoqcGF0aCk7CisjZGVmaW5lIHNraXBfZG9zX2RyaXZlX3ByZWZpeCB3aW4zMl9za2lwX2Rvc19kcml2ZV9wcmVmaXgKK3N0YXRpYyBpbmxpbmUgaW50IHdpbjMyX2lzX2Rpcl9zZXAoaW50IGMpCit7CisJcmV0dXJuIGMgPT0gJy8nIHx8IGMgPT0gJ1xcJzsKK30KKyNkZWZpbmUgaXNfZGlyX3NlcCB3aW4zMl9pc19kaXJfc2VwCitzdGF0aWMgaW5saW5lIGNoYXIgKndpbjMyX2ZpbmRfbGFzdF9kaXJfc2VwKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hhciAqcmV0ID0gTlVMTDsKKwlmb3IgKDsgKnBhdGg7ICsrcGF0aCkKKwkJaWYgKGlzX2Rpcl9zZXAoKnBhdGgpKQorCQkJcmV0ID0gKGNoYXIgKilwYXRoOworCXJldHVybiByZXQ7Cit9CisjZGVmaW5lIGZpbmRfbGFzdF9kaXJfc2VwIHdpbjMyX2ZpbmRfbGFzdF9kaXJfc2VwCitzdGF0aWMgaW5saW5lIGludCB3aW4zMl9oYXNfZGlyX3NlcChjb25zdCBjaGFyICpwYXRoKQoreworCS8qCisJICogU2VlIGhvdyBsb25nIHRoZSBub24tc2VwYXJhdG9yIHBhcnQgb2YgdGhlIGdpdmVuIHBhdGggaXMsIGFuZAorCSAqIGlmIGFuZCBvbmx5IGlmIGl0IGNvdmVycyB0aGUgd2hvbGUgcGF0aCAoaS5lLiBwYXRoW2xlbl0gaXMgTlVMKSwKKwkgKiB0aGVyZSBpcyBubyBzZXBhcmF0b3IgaW4gdGhlIHBhdGgtLS1vdGhlcndpc2UgdGhlcmUgaXMgYSBzZXBhcmF0b3IuCisJICovCisJc2l6ZV90IGxlbiA9IHN0cmNzcG4ocGF0aCwgIi9cXCIpOworCXJldHVybiAhIXBhdGhbbGVuXTsKK30KKyNkZWZpbmUgaGFzX2Rpcl9zZXAocGF0aCkgd2luMzJfaGFzX2Rpcl9zZXAocGF0aCkKK2ludCB3aW4zMl9vZmZzZXRfMXN0X2NvbXBvbmVudChjb25zdCBjaGFyICpwYXRoKTsKKyNkZWZpbmUgb2Zmc2V0XzFzdF9jb21wb25lbnQgd2luMzJfb2Zmc2V0XzFzdF9jb21wb25lbnQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvcHRocmVhZC5jIGIvY29tcGF0L3dpbjMyL3B0aHJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTdlZWFkCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL3B0aHJlYWQuYwpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFuZHJ6ZWogSy4gSGFjemV3c2tpIDxhaGFjemV3c2tpQGdtYWlsLmNvbT4KKyAqCisgKiBESVNDTEFJTUVSOiBUaGUgaW1wbGVtZW50YXRpb24gaXMgR2l0LXNwZWNpZmljLCBpdCBpcyBzdWJzZXQgb2Ygb3JpZ2luYWwKKyAqIFB0aHJlYWRzIEFQSSwgd2l0aG91dCBsb3RzIG9mIG90aGVyIGZlYXR1cmVzIHRoYXQgR2l0IGRvZXNuJ3QgdXNlLgorICogR2l0IGFsc28gbWFrZXMgc3VyZSB0aGF0IHRoZSBwYXNzZWQgYXJndW1lbnRzIGFyZSB2YWxpZCwgc28gdGhlcmUncworICogbm8gbmVlZCBmb3IgZG91YmxlLWNoZWNraW5nLgorICovCisKKyNpbmNsdWRlICIuLi8uLi9naXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJwdGhyZWFkLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCitzdGF0aWMgdW5zaWduZWQgX19zdGRjYWxsIHdpbjMyX3N0YXJ0X3JvdXRpbmUodm9pZCAqYXJnKQoreworCXB0aHJlYWRfdCAqdGhyZWFkID0gYXJnOworCXRocmVhZC0+dGlkID0gR2V0Q3VycmVudFRocmVhZElkKCk7CisJdGhyZWFkLT5hcmcgPSB0aHJlYWQtPnN0YXJ0X3JvdXRpbmUodGhyZWFkLT5hcmcpOworCXJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICp0aHJlYWQsIGNvbnN0IHZvaWQgKnVudXNlZCwKKwkJICAgdm9pZCAqKCpzdGFydF9yb3V0aW5lKSh2b2lkKiksIHZvaWQgKmFyZykKK3sKKwl0aHJlYWQtPmFyZyA9IGFyZzsKKwl0aHJlYWQtPnN0YXJ0X3JvdXRpbmUgPSBzdGFydF9yb3V0aW5lOworCXRocmVhZC0+aGFuZGxlID0gKEhBTkRMRSkKKwkJX2JlZ2ludGhyZWFkZXgoTlVMTCwgMCwgd2luMzJfc3RhcnRfcm91dGluZSwgdGhyZWFkLCAwLCBOVUxMKTsKKworCWlmICghdGhyZWFkLT5oYW5kbGUpCisJCXJldHVybiBlcnJubzsKKwllbHNlCisJCXJldHVybiAwOworfQorCitpbnQgd2luMzJfcHRocmVhZF9qb2luKHB0aHJlYWRfdCAqdGhyZWFkLCB2b2lkICoqdmFsdWVfcHRyKQoreworCURXT1JEIHJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QodGhyZWFkLT5oYW5kbGUsIElORklOSVRFKTsKKwlzd2l0Y2ggKHJlc3VsdCkgeworCQljYXNlIFdBSVRfT0JKRUNUXzA6CisJCQlpZiAodmFsdWVfcHRyKQorCQkJCSp2YWx1ZV9wdHIgPSB0aHJlYWQtPmFyZzsKKwkJCXJldHVybiAwOworCQljYXNlIFdBSVRfQUJBTkRPTkVEOgorCQkJcmV0dXJuIEVJTlZBTDsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBlcnJfd2luX3RvX3Bvc2l4KEdldExhc3RFcnJvcigpKTsKKwl9Cit9CisKK3B0aHJlYWRfdCBwdGhyZWFkX3NlbGYodm9pZCkKK3sKKwlwdGhyZWFkX3QgdCA9IHsgTlVMTCB9OworCXQudGlkID0gR2V0Q3VycmVudFRocmVhZElkKCk7CisJcmV0dXJuIHQ7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvcHRocmVhZC5oIGIvY29tcGF0L3dpbjMyL3B0aHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mzc5ODNkCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL3B0aHJlYWQuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIEhlYWRlciB1c2VkIHRvIGFkYXB0IHB0aHJlYWQtYmFzZWQgUE9TSVggY29kZSB0byBXaW5kb3dzIEFQSSB0aHJlYWRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbmRyemVqIEsuIEhhY3pld3NraSA8YWhhY3pld3NraUBnbWFpbC5jb20+CisgKi8KKworI2lmbmRlZiBQVEhSRUFEX0gKKyNkZWZpbmUgUFRIUkVBRF9ICisKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworLyoKKyAqIERlZmluZXMgdGhhdCBhZGFwdCBXaW5kb3dzIEFQSSB0aHJlYWRzIHRvIHB0aHJlYWRzIEFQSQorICovCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfdCBDUklUSUNBTF9TRUNUSU9OCisKK3N0YXRpYyBpbmxpbmUgaW50IHJldHVybl8wKGludCBpKSB7CisJcmV0dXJuIDA7Cit9CisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfaW5pdChhLGIpIHJldHVybl8wKChJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKChhKSksIDApKQorI2RlZmluZSBwdGhyZWFkX211dGV4X2Rlc3Ryb3koYSkgRGVsZXRlQ3JpdGljYWxTZWN0aW9uKChhKSkKKyNkZWZpbmUgcHRocmVhZF9tdXRleF9sb2NrIEVudGVyQ3JpdGljYWxTZWN0aW9uCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIExlYXZlQ3JpdGljYWxTZWN0aW9uCisKK3R5cGVkZWYgaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoYSkgKCooYSkgPSAwKQorI2RlZmluZSBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KGEpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKGEsIHQpIDAKKyNkZWZpbmUgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgMAorCisjZGVmaW5lIHB0aHJlYWRfY29uZF90IENPTkRJVElPTl9WQVJJQUJMRQorCisjZGVmaW5lIHB0aHJlYWRfY29uZF9pbml0KGEsYikgSW5pdGlhbGl6ZUNvbmRpdGlvblZhcmlhYmxlKChhKSkKKyNkZWZpbmUgcHRocmVhZF9jb25kX2Rlc3Ryb3koYSkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIHB0aHJlYWRfY29uZF93YWl0KGEsYikgcmV0dXJuXzAoU2xlZXBDb25kaXRpb25WYXJpYWJsZUNTKChhKSwgKGIpLCBJTkZJTklURSkpCisjZGVmaW5lIHB0aHJlYWRfY29uZF9zaWduYWwgV2FrZUNvbmRpdGlvblZhcmlhYmxlCisjZGVmaW5lIHB0aHJlYWRfY29uZF9icm9hZGNhc3QgV2FrZUFsbENvbmRpdGlvblZhcmlhYmxlCisKKy8qCisgKiBTaW1wbGUgdGhyZWFkIGNyZWF0aW9uIGltcGxlbWVudGF0aW9uIHVzaW5nIHB0aHJlYWQgQVBJCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlIQU5ETEUgaGFuZGxlOworCXZvaWQgKigqc3RhcnRfcm91dGluZSkodm9pZCopOworCXZvaWQgKmFyZzsKKwlEV09SRCB0aWQ7Cit9IHB0aHJlYWRfdDsKKworaW50IHB0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqdGhyZWFkLCBjb25zdCB2b2lkICp1bnVzZWQsCisJCSAgIHZvaWQgKigqc3RhcnRfcm91dGluZSkodm9pZCopLCB2b2lkICphcmcpOworCisvKgorICogVG8gYXZvaWQgdGhlIG5lZWQgb2YgY29weWluZyBhIHN0cnVjdCwgd2UgdXNlIHNtYWxsIG1hY3JvIHdyYXBwZXIgdG8gcGFzcworICogcG9pbnRlciB0byB3aW4zMl9wdGhyZWFkX2pvaW4gaW5zdGVhZC4KKyAqLworI2RlZmluZSBwdGhyZWFkX2pvaW4oYSwgYikgd2luMzJfcHRocmVhZF9qb2luKCYoYSksIChiKSkKKworaW50IHdpbjMyX3B0aHJlYWRfam9pbihwdGhyZWFkX3QgKnRocmVhZCwgdm9pZCAqKnZhbHVlX3B0cik7CisKKyNkZWZpbmUgcHRocmVhZF9lcXVhbCh0MSwgdDIpICgodDEpLnRpZCA9PSAodDIpLnRpZCkKK3B0aHJlYWRfdCBwdGhyZWFkX3NlbGYodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBOT1JFVFVSTiBwdGhyZWFkX2V4aXQodm9pZCAqcmV0KQoreworCUV4aXRUaHJlYWQoKERXT1JEKShpbnRwdHJfdClyZXQpOworfQorCit0eXBlZGVmIERXT1JEIHB0aHJlYWRfa2V5X3Q7CitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX2tleV9jcmVhdGUocHRocmVhZF9rZXlfdCAqa2V5cCwgdm9pZCAoKmRlc3RydWN0b3IpKHZvaWQgKnZhbHVlKSkKK3sKKwlyZXR1cm4gKCprZXlwID0gVGxzQWxsb2MoKSkgPT0gVExTX09VVF9PRl9JTkRFWEVTID8gRUFHQUlOIDogMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9rZXlfZGVsZXRlKHB0aHJlYWRfa2V5X3Qga2V5KQoreworCXJldHVybiBUbHNGcmVlKGtleSkgPyAwIDogRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX3NldHNwZWNpZmljKHB0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICp2YWx1ZSkKK3sKKwlyZXR1cm4gVGxzU2V0VmFsdWUoa2V5LCAodm9pZCAqKXZhbHVlKSA/IDAgOiBFSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90IGtleSkKK3sKKwlyZXR1cm4gVGxzR2V0VmFsdWUoa2V5KTsKK30KKworI2lmbmRlZiBfX01JTkdXNjRfVkVSU0lPTl9NQUpPUgorc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9zaWdtYXNrKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpvc2V0KQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBQVEhSRUFEX0ggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC93aW4zMi9zeXNsb2cuYyBiL2NvbXBhdC93aW4zMi9zeXNsb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjE5NzhkCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL3N5c2xvZy5jCkBAIC0wLDAgKzEsODAgQEAKKyNpbmNsdWRlICIuLi8uLi9naXQtY29tcGF0LXV0aWwuaCIKKworc3RhdGljIEhBTkRMRSBtc19ldmVudGxvZzsKKwordm9pZCBvcGVubG9nKGNvbnN0IGNoYXIgKmlkZW50LCBpbnQgbG9nb3B0LCBpbnQgZmFjaWxpdHkpCit7CisJaWYgKG1zX2V2ZW50bG9nKQorCQlyZXR1cm47CisKKwltc19ldmVudGxvZyA9IFJlZ2lzdGVyRXZlbnRTb3VyY2VBKE5VTEwsIGlkZW50KTsKKworCWlmICghbXNfZXZlbnRsb2cpCisJCXdhcm5pbmcoIlJlZ2lzdGVyRXZlbnRTb3VyY2UoKSBmYWlsZWQ6ICVsdSIsIEdldExhc3RFcnJvcigpKTsKK30KKwordm9pZCBzeXNsb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlXT1JEIGxvZ3R5cGU7CisJY2hhciAqc3RyLCAqcG9zOworCWludCBzdHJfbGVuOworCXZhX2xpc3QgYXA7CisKKwlpZiAoIW1zX2V2ZW50bG9nKQorCQlyZXR1cm47CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlzdHJfbGVuID0gdnNucHJpbnRmKE5VTEwsIDAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlpZiAoc3RyX2xlbiA8IDApIHsKKwkJd2FybmluZ19lcnJubygidnNucHJpbnRmIGZhaWxlZCIpOworCQlyZXR1cm47CisJfQorCisJc3RyID0gbWFsbG9jKHN0X2FkZChzdHJfbGVuLCAxKSk7CisJaWYgKCFzdHIpIHsKKwkJd2FybmluZ19lcnJubygibWFsbG9jIGZhaWxlZCIpOworCQlyZXR1cm47CisJfQorCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdnNucHJpbnRmKHN0ciwgc3RyX2xlbiArIDEsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwl3aGlsZSAoKHBvcyA9IHN0cnN0cihzdHIsICIlMSIpKSAhPSBOVUxMKSB7CisJCWNoYXIgKm9sZHN0ciA9IHN0cjsKKwkJc3RyID0gcmVhbGxvYyhzdHIsIHN0X2FkZCgrK3N0cl9sZW4sIDEpKTsKKwkJaWYgKCFzdHIpIHsKKwkJCWZyZWUob2xkc3RyKTsKKwkJCXdhcm5pbmdfZXJybm8oInJlYWxsb2MgZmFpbGVkIik7CisJCQlyZXR1cm47CisJCX0KKwkJbWVtbW92ZShwb3MgKyAyLCBwb3MgKyAxLCBzdHJsZW4ocG9zKSk7CisJCXBvc1sxXSA9ICcgJzsKKwl9CisKKwlzd2l0Y2ggKHByaW9yaXR5KSB7CisJY2FzZSBMT0dfRU1FUkc6CisJY2FzZSBMT0dfQUxFUlQ6CisJY2FzZSBMT0dfQ1JJVDoKKwljYXNlIExPR19FUlI6CisJCWxvZ3R5cGUgPSBFVkVOVExPR19FUlJPUl9UWVBFOworCQlicmVhazsKKworCWNhc2UgTE9HX1dBUk5JTkc6CisJCWxvZ3R5cGUgPSBFVkVOVExPR19XQVJOSU5HX1RZUEU7CisJCWJyZWFrOworCisJY2FzZSBMT0dfTk9USUNFOgorCWNhc2UgTE9HX0lORk86CisJY2FzZSBMT0dfREVCVUc6CisJZGVmYXVsdDoKKwkJbG9ndHlwZSA9IEVWRU5UTE9HX0lORk9STUFUSU9OX1RZUEU7CisJCWJyZWFrOworCX0KKworCVJlcG9ydEV2ZW50QShtc19ldmVudGxvZywgbG9ndHlwZSwgMCwgMCwgTlVMTCwgMSwgMCwKKwkgICAgKGNvbnN0IGNoYXIgKiopJnN0ciwgTlVMTCk7CisJZnJlZShzdHIpOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL3N5c2xvZy5oIGIvY29tcGF0L3dpbjMyL3N5c2xvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZGFhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzIvc3lzbG9nLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBTWVNMT0dfSAorI2RlZmluZSBTWVNMT0dfSAorCisjZGVmaW5lIExPR19QSUQgICAgIDB4MDEKKworI2RlZmluZSBMT0dfRU1FUkcgICAwCisjZGVmaW5lIExPR19BTEVSVCAgIDEKKyNkZWZpbmUgTE9HX0NSSVQgICAgMgorI2RlZmluZSBMT0dfRVJSICAgICAzCisjZGVmaW5lIExPR19XQVJOSU5HIDQKKyNkZWZpbmUgTE9HX05PVElDRSAgNQorI2RlZmluZSBMT0dfSU5GTyAgICA2CisjZGVmaW5lIExPR19ERUJVRyAgIDcKKworI2RlZmluZSBMT0dfREFFTU9OICAoMzw8MykKKwordm9pZCBvcGVubG9nKGNvbnN0IGNoYXIgKmlkZW50LCBpbnQgbG9nb3B0LCBpbnQgZmFjaWxpdHkpOwordm9pZCBzeXNsb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNlbmRpZiAvKiBTWVNMT0dfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL3RyYWNlMl93aW4zMl9wcm9jZXNzX2luZm8uYyBiL2NvbXBhdC93aW4zMi90cmFjZTJfd2luMzJfcHJvY2Vzc19pbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjYmQxYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC93aW4zMi90cmFjZTJfd2luMzJfcHJvY2Vzc19pbmZvLmMKQEAgLTAsMCArMSwxOTEgQEAKKyNpbmNsdWRlICIuLi8uLi9jYWNoZS5oIgorI2luY2x1ZGUgIi4uLy4uL2pzb24td3JpdGVyLmgiCisjaW5jbHVkZSAibGF6eWxvYWQuaCIKKyNpbmNsdWRlIDxQc2FwaS5oPgorI2luY2x1ZGUgPHRsSGVscDMyLmg+CisKKy8qCisgKiBBbiBhcmJpdHJhcmlseSBjaG9zZW4gdmFsdWUgdG8gbGltaXQgdGhlIHNpemUgb2YgdGhlIGFuY2VzdG9yCisgKiBhcnJheSBidWlsdCBpbiBnaXRfcHJvY2Vzc2VzKCkuCisgKi8KKyNkZWZpbmUgTlJfUElEU19MSU1JVCAxMAorCisvKgorICogRmluZCB0aGUgcHJvY2VzcyBkYXRhIGZvciB0aGUgZ2l2ZW4gUElEIGluIHRoZSBnaXZlbiBzbmFwc2hvdAorICogYW5kIHVwZGF0ZSB0aGUgUFJPQ0VTU0VOVFJZMzIgZGF0YS4KKyAqLworc3RhdGljIGludCBmaW5kX3BpZChEV09SRCBwaWQsIEhBTkRMRSBoU25hcHNob3QsIFBST0NFU1NFTlRSWTMyICpwZTMyKQoreworCXBlMzItPmR3U2l6ZSA9IHNpemVvZihQUk9DRVNTRU5UUlkzMik7CisKKwlpZiAoUHJvY2VzczMyRmlyc3QoaFNuYXBzaG90LCBwZTMyKSkgeworCQlkbyB7CisJCQlpZiAocGUzMi0+dGgzMlByb2Nlc3NJRCA9PSBwaWQpCisJCQkJcmV0dXJuIDE7CisJCX0gd2hpbGUgKFByb2Nlc3MzMk5leHQoaFNuYXBzaG90LCBwZTMyKSk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogQWNjdW11bGF0ZSBKU09OIGFycmF5IG9mIG91ciBwYXJlbnQgcHJvY2Vzc2VzOgorICogICAgIFsKKyAqICAgICAgICAgZXhlLW5hbWUtcGFyZW50LAorICogICAgICAgICBleGUtbmFtZS1ncmFuZC1wYXJlbnQsCisgKiAgICAgICAgIC4uLgorICogICAgIF0KKyAqCisgKiBOb3RlOiB3ZSBvbmx5IHJlcG9ydCB0aGUgZmlsZW5hbWUgb2YgdGhlIHByb2Nlc3MgZXhlY3V0YWJsZTsgdGhlCisgKiAgICAgICBvbmx5IHdheSB0byBnZXQgaXRzIGZ1bGwgcGF0aG5hbWUgaXMgdG8gdXNlIE9wZW5Qcm9jZXNzKCkKKyAqICAgICAgIGFuZCBHZXRNb2R1bGVGaWxlTmFtZUV4KCkgb3IgUXVlcnlmdWxsUHJvY2Vzc0ltYWdlTmFtZSgpCisgKiAgICAgICBhbmQgdGhhdCBzZWVtcyByYXRoZXIgZXhwZW5zaXZlIChvbiB0b3Agb2YgdGhlIGNvc3Qgb2YKKyAqICAgICAgIGdldHRpbmcgdGhlIHNuYXBzaG90KS4KKyAqCisgKiBOb3RlOiB3ZSBjb21wdXRlIHRoZSBzZXQgb2YgcGFyZW50IHByb2Nlc3NlcyBieSB3YWxraW5nIHRoZSBQUElECisgKiAgICAgICBsaW5rIGluIGVhY2ggdmlzaXRlZCBQUk9DRVNTRU5UUlkzMiByZWNvcmQuICBUaGlzIHNlYXJjaAorICogICAgICAgc3RvcHMgd2hlbiBhbiBhbmNlc3RvciBwcm9jZXNzIGlzIG5vdCBmb3VuZCBpbiB0aGUgc25hcHNob3QKKyAqICAgICAgIChiZWNhdXNlIGl0IGV4aXRlZCBiZWZvcmUgdGhlIGN1cnJlbnQgb3IgaW50ZXJtZWRpYXRlIHBhcmVudAorICogICAgICAgcHJvY2VzcyBleGl0ZWQpLgorICoKKyAqICAgICAgIFRoaXMgc2VhcmNoIG1heSBjb21wdXRlIGFuIGluY29ycmVjdCByZXN1bHQgaWYgdGhlIFBQSUQgbGluaworICogICAgICAgcmVmZXJzIHRvIHRoZSBQSUQgb2YgYW4gZXhpdGVkIHBhcmVudCBhbmQgdGhhdCBQSUQgaGFzIGJlZW4KKyAqICAgICAgIHJlY3ljbGVkIGFuZCBnaXZlbiB0byBhIG5ldyB1bnJlbGF0ZWQgcHJvY2Vzcy4KKyAqCisgKiAgICAgICBXb3JzZSwgaXQgaXMgcG9zc2libGUgZm9yIGEgY2hpbGQgb3IgZGVzY2VuZGFudCBvZiB0aGUKKyAqICAgICAgIGN1cnJlbnQgcHJvY2VzcyB0byBiZSBnaXZlbiB0aGUgcmVjeWNsZWQgUElEIGFuZCBjYXVzZSBhCisgKiAgICAgICBQUElELWN5Y2xlLiAgVGhpcyB3b3VsZCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGJ1aWxkaW5nIG91cgorICogICAgICAgcGFyZW50IHByb2Nlc3MgYXJyYXkuCisgKgorICogTm90ZTogZm9yIGNvbXBsZXRlbmVzcywgdGhlICJTeXN0ZW0gSWRsZSIgcHJvY2VzcyBoYXMgUElEPTAgYW5kCisgKiAgICAgICBQUElEPTAgYW5kIGNvdWxkIGNhdXNlIGFub3RoZXIgUFBJRC1jeWNsZS4gIFdlIGRvbid0IGV4cGVjdAorICogICAgICAgR2l0IHRvIGJlIGEgZGVzY2VuZGFudCBvZiB0aGUgaWRsZSBwcm9jZXNzLCBidXQgYmVjYXVzZSBvZgorICogICAgICAgUElEIHJlY3ljbGluZywgaXQgbWlnaHQgYmUgcG9zc2libGUgdG8gZ2V0IGEgUFBJRCBsaW5rIHZhbHVlCisgKiAgICAgICBvZiAwLiAgVGhpcyB0b28gd291bGQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcC4KKyAqCisgKiBUaGVyZWZvcmUsIHdlIGtlZXAgYW4gYXJyYXkgb2YgdGhlIHZpc2l0ZWQgUFBJRHMgdG8gZ3VhcmQgYWdhaW5zdAorICogY3ljbGVzLgorICoKKyAqIFdlIHVzZSBhIGZpeGVkLXNpemUgYXJyYXkgcmF0aGVyIHRoYW4gQUxMT0NfR1JPVyB0byBrZWVwIHRoaW5ncworICogc2ltcGxlIGFuZCBhdm9pZCB0aGUgYWxsb2MvcmVhbGxvYyBvdmVyaGVhZC4gIEl0IGlzIE9LIGlmIHdlCisgKiB0cnVuY2F0ZSB0aGUgc2VhcmNoIGFuZCByZXR1cm4gYSBwYXJ0aWFsIGFuc3dlci4KKyAqLworc3RhdGljIHZvaWQgZ2V0X3Byb2Nlc3NlcyhzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBIQU5ETEUgaFNuYXBzaG90KQoreworCVBST0NFU1NFTlRSWTMyIHBlMzI7CisJRFdPUkQgcGlkOworCURXT1JEIHBpZF9saXN0W05SX1BJRFNfTElNSVRdOworCWludCBrLCBucl9waWRzID0gMDsKKworCXBpZCA9IEdldEN1cnJlbnRQcm9jZXNzSWQoKTsKKwl3aGlsZSAoZmluZF9waWQocGlkLCBoU25hcHNob3QsICZwZTMyKSkgeworCQkvKiBPbmx5IHJlcG9ydCBwYXJlbnRzLiBPbWl0IHNlbGYgZnJvbSB0aGUgSlNPTiBvdXRwdXQuICovCisJCWlmIChucl9waWRzKQorCQkJandfYXJyYXlfc3RyaW5nKGp3LCBwZTMyLnN6RXhlRmlsZSk7CisKKwkJLyogQ2hlY2sgZm9yIGN5Y2xlIGluIHNuYXBzaG90LiAoWWVzLCBpdCBoYXBwZW5lZC4pICovCisJCWZvciAoayA9IDA7IGsgPCBucl9waWRzOyBrKyspCisJCQlpZiAocGlkID09IHBpZF9saXN0W2tdKSB7CisJCQkJandfYXJyYXlfc3RyaW5nKGp3LCAiKGN5Y2xlKSIpOworCQkJCXJldHVybjsKKwkJCX0KKworCQlpZiAobnJfcGlkcyA9PSBOUl9QSURTX0xJTUlUKSB7CisJCQlqd19hcnJheV9zdHJpbmcoancsICIodHJ1bmNhdGVkKSIpOworCQkJcmV0dXJuOworCQl9CisKKwkJcGlkX2xpc3RbbnJfcGlkcysrXSA9IHBpZDsKKworCQlwaWQgPSBwZTMyLnRoMzJQYXJlbnRQcm9jZXNzSUQ7CisJfQorfQorCisvKgorICogRW1pdCBKU09OIGRhdGEgZm9yIHRoZSBjdXJyZW50IGFuZCBwYXJlbnQgcHJvY2Vzc2VzLiAgSW5kaXZpZHVhbAorICogdHJhY2UyIHRhcmdldHMgY2FuIGRlY2lkZSBob3cgdG8gYWN0dWFsbHkgcHJpbnQgaXQuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9hbmNlc3RyeSh2b2lkKQoreworCUhBTkRMRSBoU25hcHNob3QgPSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBQUk9DRVNTLCAwKTsKKworCWlmIChoU25hcHNob3QgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkJc3RydWN0IGpzb25fd3JpdGVyIGp3ID0gSlNPTl9XUklURVJfSU5JVDsKKworCQlqd19hcnJheV9iZWdpbigmancsIDApOworCQlnZXRfcHJvY2Vzc2VzKCZqdywgaFNuYXBzaG90KTsKKwkJandfZW5kKCZqdyk7CisKKwkJdHJhY2UyX2RhdGFfanNvbigicHJvY2VzcyIsIHRoZV9yZXBvc2l0b3J5LCAid2luZG93cy9hbmNlc3RyeSIsCisJCQkJICZqdyk7CisKKwkJandfcmVsZWFzZSgmancpOworCQlDbG9zZUhhbmRsZShoU25hcHNob3QpOworCX0KK30KKworLyoKKyAqIElzIGEgZGVidWdnZXIgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnQgcHJvY2Vzcz8KKyAqCisgKiBUaGlzIHdpbGwgY2F0Y2ggZGVidWcgcnVucyAod2hlcmUgdGhlIGRlYnVnZ2VyIHN0YXJ0ZWQgdGhlIHByb2Nlc3MpLgorICogVGhpcyBpcyB0aGUgbm9ybWFsIGNhc2UuICBTaW5jZSB0aGlzIGNvZGUgaXMgY2FsbGVkIGR1cmluZyBvdXIgc3RhcnR1cCwKKyAqIGl0IHdpbGwgbm90IHJlcG9ydCBpbnN0YW5jZXMgd2hlcmUgYSBkZWJ1Z2dlciBpcyBhdHRhY2hlZCBkeW5hbWljYWxseQorICogdG8gYSBydW5uaW5nIGdpdCBwcm9jZXNzLCBidXQgdGhhdCBpcyByZWxhdGl2ZWx5IHJhcmUuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9pc19iZWluZ19kZWJ1Z2dlZCh2b2lkKQoreworCWlmIChJc0RlYnVnZ2VyUHJlc2VudCgpKQorCQl0cmFjZTJfZGF0YV9pbnRtYXgoInByb2Nlc3MiLCB0aGVfcmVwb3NpdG9yeSwKKwkJCQkgICAid2luZG93cy9kZWJ1Z2dlcl9wcmVzZW50IiwgMSk7Cit9CisKKy8qCisgKiBFbWl0IEpTT04gZGF0YSB3aXRoIHRoZSBwZWFrIG1lbW9yeSB1c2FnZSBvZiB0aGUgY3VycmVudCBwcm9jZXNzLgorICovCitzdGF0aWMgdm9pZCBnZXRfcGVha19tZW1vcnlfaW5mbyh2b2lkKQoreworCURFQ0xBUkVfUFJPQ19BRERSKHBzYXBpLmRsbCwgQk9PTCwgR2V0UHJvY2Vzc01lbW9yeUluZm8sIEhBTkRMRSwKKwkJCSAgUFBST0NFU1NfTUVNT1JZX0NPVU5URVJTLCBEV09SRCk7CisKKwlpZiAoSU5JVF9QUk9DX0FERFIoR2V0UHJvY2Vzc01lbW9yeUluZm8pKSB7CisJCVBST0NFU1NfTUVNT1JZX0NPVU5URVJTIHBtYzsKKworCQlpZiAoR2V0UHJvY2Vzc01lbW9yeUluZm8oR2V0Q3VycmVudFByb2Nlc3MoKSwgJnBtYywKKwkJCQkJIHNpemVvZihwbWMpKSkgeworCQkJc3RydWN0IGpzb25fd3JpdGVyIGp3ID0gSlNPTl9XUklURVJfSU5JVDsKKworCQkJandfb2JqZWN0X2JlZ2luKCZqdywgMCk7CisKKyNkZWZpbmUgS1Yoa3YpICNrdiwgKGludG1heF90KXBtYy5rdgorCisJCQlqd19vYmplY3RfaW50bWF4KCZqdywgS1YoUGFnZUZhdWx0Q291bnQpKTsKKwkJCWp3X29iamVjdF9pbnRtYXgoJmp3LCBLVihQZWFrV29ya2luZ1NldFNpemUpKTsKKwkJCWp3X29iamVjdF9pbnRtYXgoJmp3LCBLVihQZWFrUGFnZWZpbGVVc2FnZSkpOworCisJCQlqd19lbmQoJmp3KTsKKworCQkJdHJhY2UyX2RhdGFfanNvbigicHJvY2VzcyIsIHRoZV9yZXBvc2l0b3J5LAorCQkJCQkgIndpbmRvd3MvbWVtb3J5IiwgJmp3KTsKKwkJCWp3X3JlbGVhc2UoJmp3KTsKKwkJfQorCX0KK30KKwordm9pZCB0cmFjZTJfY29sbGVjdF9wcm9jZXNzX2luZm8oZW51bSB0cmFjZTJfcHJvY2Vzc19pbmZvX3JlYXNvbiByZWFzb24pCit7CisJaWYgKCF0cmFjZTJfaXNfZW5hYmxlZCgpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHJlYXNvbikgeworCWNhc2UgVFJBQ0UyX1BST0NFU1NfSU5GT19TVEFSVFVQOgorCQlnZXRfaXNfYmVpbmdfZGVidWdnZWQoKTsKKwkJZ2V0X2FuY2VzdHJ5KCk7CisJCXJldHVybjsKKworCWNhc2UgVFJBQ0UyX1BST0NFU1NfSU5GT19FWElUOgorCQlnZXRfcGVha19tZW1vcnlfaW5mbygpOworCQlyZXR1cm47CisKKwlkZWZhdWx0OgorCQlCVUcoInRyYWNlMl9jb2xsZWN0X3Byb2Nlc3NfaW5mbzogdW5rbm93biByZWFzb24gJyVkJyIsIHJlYXNvbik7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMybW1hcC5jIGIvY29tcGF0L3dpbjMybW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOWQ1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzJtbWFwLmMKQEAgLTAsMCArMSw0NiBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCit2b2lkICpnaXRfbW1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCwgaW50IHByb3QsIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpCit7CisJSEFORExFIG9zZmhhbmRsZSwgaG1hcDsKKwl2b2lkICp0ZW1wOworCUxBUkdFX0lOVEVHRVIgbGVuOworCXVpbnQ2NF90IG8gPSBvZmZzZXQ7CisJdWludDMyX3QgbCA9IG8gJiAweEZGRkZGRkZGOworCXVpbnQzMl90IGggPSAobyA+PiAzMikgJiAweEZGRkZGRkZGOworCisJb3NmaGFuZGxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisJaWYgKCFHZXRGaWxlU2l6ZUV4KG9zZmhhbmRsZSwgJmxlbikpCisJCWRpZSgibW1hcDogY291bGQgbm90IGRldGVybWluZSBmaWxlc2l6ZSIpOworCisJaWYgKChsZW5ndGggKyBvZmZzZXQpID4gbGVuLlF1YWRQYXJ0KQorCQlsZW5ndGggPSB4c2l6ZV90KGxlbi5RdWFkUGFydCAtIG9mZnNldCk7CisKKwlpZiAoIShmbGFncyAmIE1BUF9QUklWQVRFKSkKKwkJZGllKCJJbnZhbGlkIHVzYWdlIG9mIG1tYXAgd2hlbiBidWlsdCB3aXRoIFVTRV9XSU4zMl9NTUFQIik7CisKKwlobWFwID0gQ3JlYXRlRmlsZU1hcHBpbmcob3NmaGFuZGxlLCBOVUxMLAorCQlwcm90ID09IFBST1RfUkVBRCA/IFBBR0VfUkVBRE9OTFkgOiBQQUdFX1dSSVRFQ09QWSwgMCwgMCwgTlVMTCk7CisKKwlpZiAoIWhtYXApIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiBNQVBfRkFJTEVEOworCX0KKworCXRlbXAgPSBNYXBWaWV3T2ZGaWxlRXgoaG1hcCwgcHJvdCA9PSBQUk9UX1JFQUQgPworCQkJRklMRV9NQVBfUkVBRCA6IEZJTEVfTUFQX0NPUFksIGgsIGwsIGxlbmd0aCwgc3RhcnQpOworCisJaWYgKCFDbG9zZUhhbmRsZShobWFwKSkKKwkJd2FybmluZygidW5hYmxlIHRvIGNsb3NlIGZpbGUgbWFwcGluZyBoYW5kbGUiKTsKKworCWlmICh0ZW1wKQorCQlyZXR1cm4gdGVtcDsKKworCWVycm5vID0gR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfQ09NTUlUTUVOVF9MSU1JVCA/IEVGQklHIDogRUlOVkFMOworCXJldHVybiBNQVBfRkFJTEVEOworfQorCitpbnQgZ2l0X211bm1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCkKK3sKKwlyZXR1cm4gIVVubWFwVmlld09mRmlsZShzdGFydCk7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvd2luYW5zaS5jIGIvY29tcGF0L3dpbmFuc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjdiMjBhCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbmFuc2kuYwpAQCAtMCwwICsxLDY4MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IFBldGVyIEhhcnJpcyA8Z2l0QHBldGVyLmlzLWEtZ2Vlay5vcmc+CisgKi8KKworI3VuZGVmIE5PR0RJCisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSA8d2luZ2RpLmg+CisjaW5jbHVkZSA8d2lucmVnLmg+CisjaW5jbHVkZSAid2luMzIuaCIKKyNpbmNsdWRlICJ3aW4zMi9sYXp5bG9hZC5oIgorCitzdGF0aWMgaW50IGZkX2lzX2ludGVyYWN0aXZlWzNdID0geyAwLCAwLCAwIH07CisjZGVmaW5lIEZEX0NPTlNPTEUgMHgxCisjZGVmaW5lIEZEX1NXQVBQRUQgMHgyCisjZGVmaW5lIEZEX01TWVMgICAgMHg0CisKKy8qCisgQU5TSSBjb2RlcyB1c2VkIGJ5IGdpdDogbSwgSworCisgVGhpcyBmaWxlIGlzIGdpdC1zcGVjaWZpYy4gVGhlcmVmb3JlLCB0aGlzIGZpbGUgZG9lcyBub3QgYXR0ZW1wdAorIHRvIGltcGxlbWVudCBhbnkgY29kZXMgdGhhdCBhcmUgbm90IHVzZWQgYnkgZ2l0LgorKi8KKworc3RhdGljIEhBTkRMRSBjb25zb2xlOworc3RhdGljIFdPUkQgcGxhaW5fYXR0cjsKK3N0YXRpYyBXT1JEIGF0dHI7CitzdGF0aWMgaW50IG5lZ2F0aXZlOworc3RhdGljIGludCBub25fYXNjaWlfdXNlZCA9IDA7CitzdGF0aWMgSEFORExFIGh0aHJlYWQsIGhyZWFkLCBod3JpdGU7CitzdGF0aWMgSEFORExFIGhjb25zb2xlMSwgaGNvbnNvbGUyOworCisjaWZkZWYgX19NSU5HVzMyX18KKyNpZiAhZGVmaW5lZChfX01JTkdXNjRfVkVSU0lPTl9NQUpPUikgfHwgX19NSU5HVzY0X1ZFUlNJT05fTUFKT1IgPCA1Cit0eXBlZGVmIHN0cnVjdCBfQ09OU09MRV9GT05UX0lORk9FWCB7CisJVUxPTkcgY2JTaXplOworCURXT1JEIG5Gb250OworCUNPT1JEIGR3Rm9udFNpemU7CisJVUlOVCBGb250RmFtaWx5OworCVVJTlQgRm9udFdlaWdodDsKKwlXQ0hBUiBGYWNlTmFtZVtMRl9GQUNFU0laRV07Cit9IENPTlNPTEVfRk9OVF9JTkZPRVgsICpQQ09OU09MRV9GT05UX0lORk9FWDsKKyNlbmRpZgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHdhcm5faWZfcmFzdGVyX2ZvbnQodm9pZCkKK3sKKwlEV09SRCBmb250RmFtaWx5ID0gMDsKKwlERUNMQVJFX1BST0NfQUREUihrZXJuZWwzMi5kbGwsIEJPT0wsIEdldEN1cnJlbnRDb25zb2xlRm9udEV4LAorCQkJSEFORExFLCBCT09MLCBQQ09OU09MRV9GT05UX0lORk9FWCk7CisKKwkvKiBkb24ndCBib3RoZXIgaWYgb3V0cHV0IHdhcyBhc2NpaSBvbmx5ICovCisJaWYgKCFub25fYXNjaWlfdXNlZCkKKwkJcmV0dXJuOworCisJLyogR2V0Q3VycmVudENvbnNvbGVGb250RXggaXMgYXZhaWxhYmxlIHNpbmNlIFZpc3RhICovCisJaWYgKElOSVRfUFJPQ19BRERSKEdldEN1cnJlbnRDb25zb2xlRm9udEV4KSkgeworCQlDT05TT0xFX0ZPTlRfSU5GT0VYIGNmaTsKKwkJY2ZpLmNiU2l6ZSA9IHNpemVvZihjZmkpOworCQlpZiAoR2V0Q3VycmVudENvbnNvbGVGb250RXgoY29uc29sZSwgMCwgJmNmaSkpCisJCQlmb250RmFtaWx5ID0gY2ZpLkZvbnRGYW1pbHk7CisJfSBlbHNlIHsKKwkJLyogcHJlLVZpc3RhOiBjaGVjayBkZWZhdWx0IGNvbnNvbGUgZm9udCBpbiByZWdpc3RyeSAqLworCQlIS0VZIGhrZXk7CisJCWlmIChFUlJPUl9TVUNDRVNTID09IFJlZ09wZW5LZXlFeEEoSEtFWV9DVVJSRU5UX1VTRVIsICJDb25zb2xlIiwKKwkJCQkwLCBLRVlfUkVBRCwgJmhrZXkpKSB7CisJCQlEV09SRCBzaXplID0gc2l6ZW9mKGZvbnRGYW1pbHkpOworCQkJUmVnUXVlcnlWYWx1ZUV4QShoa2V5LCAiRm9udEZhbWlseSIsIE5VTEwsIE5VTEwsCisJCQkJCShMUFZPSUQpICZmb250RmFtaWx5LCAmc2l6ZSk7CisJCQlSZWdDbG9zZUtleShoa2V5KTsKKwkJfQorCX0KKworCWlmICghKGZvbnRGYW1pbHkgJiBUTVBGX1RSVUVUWVBFKSkgeworCQljb25zdCB3Y2hhcl90ICptc2cgPSBMIlxuV2FybmluZzogWW91ciBjb25zb2xlIGZvbnQgcHJvYmFibHkgIgorCQkJTCJkb2VzblwndCBzdXBwb3J0IFVuaWNvZGUuIElmIHlvdSBleHBlcmllbmNlIHN0cmFuZ2UgIgorCQkJTCJjaGFyYWN0ZXJzIGluIHRoZSBvdXRwdXQsIGNvbnNpZGVyIHN3aXRjaGluZyB0byBhICIKKwkJCUwiVHJ1ZVR5cGUgZm9udCBzdWNoIGFzIENvbnNvbGFzIVxuIjsKKwkJRFdPUkQgZHVtbXk7CisJCVdyaXRlQ29uc29sZVcoY29uc29sZSwgbXNnLCB3Y3NsZW4obXNnKSwgJmR1bW15LCBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXNfY29uc29sZShpbnQgZmQpCit7CisJQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8gc2JpOworCURXT1JEIG1vZGU7CisJSEFORExFIGhjb247CisKKwlzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKworCS8qIGdldCBPUyBoYW5kbGUgb2YgdGhlIGZpbGUgZGVzY3JpcHRvciAqLworCWhjb24gPSAoSEFORExFKSBfZ2V0X29zZmhhbmRsZShmZCk7CisJaWYgKGhjb24gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCXJldHVybiAwOworCisJLyogY2hlY2sgaWYgaXRzIGEgZGV2aWNlIChpLmUuIGNvbnNvbGUsIHByaW50ZXIsIHNlcmlhbCBwb3J0KSAqLworCWlmIChHZXRGaWxlVHlwZShoY29uKSAhPSBGSUxFX1RZUEVfQ0hBUikKKwkJcmV0dXJuIDA7CisKKwkvKiBjaGVjayBpZiBpdHMgYSBoYW5kbGUgdG8gYSBjb25zb2xlIG91dHB1dCBzY3JlZW4gYnVmZmVyICovCisJaWYgKCFmZCkgeworCQlpZiAoIUdldENvbnNvbGVNb2RlKGhjb24sICZtb2RlKSkKKwkJCXJldHVybiAwOworCQkvKgorCQkgKiBUaGlzIGNvZGUgcGF0aCBpcyBvbmx5IHJlYWNoZWQgaWYgdGhlcmUgaXMgbm8gY29uc29sZQorCQkgKiBhdHRhY2hlZCB0byBzdGRvdXQvc3RkZXJyLCBpLmUuIHdlIHdpbGwgbm90IG5lZWQgdG8gb3V0cHV0CisJCSAqIGFueSB0ZXh0IHRvIGFueSBjb25zb2xlLCB0aGVyZWZvcmUgd2UgbWlnaHQganVzdCBhcyB3ZWxsCisJCSAqIHVzZSBibGFjayBhcyBmb3JlZ3JvdW5kIGNvbG9yLgorCQkgKi8KKwkJc2JpLndBdHRyaWJ1dGVzID0gMDsKKwl9IGVsc2UgaWYgKCFHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyhoY29uLCAmc2JpKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZmQgPj0gMCAmJiBmZCA8PSAyKQorCQlmZF9pc19pbnRlcmFjdGl2ZVtmZF0gfD0gRkRfQ09OU09MRTsKKworCS8qIGluaXRpYWxpemUgYXR0cmlidXRlcyAqLworCWlmICghaW5pdGlhbGl6ZWQpIHsKKwkJY29uc29sZSA9IGhjb247CisJCWF0dHIgPSBwbGFpbl9hdHRyID0gc2JpLndBdHRyaWJ1dGVzOworCQluZWdhdGl2ZSA9IDA7CisJCWluaXRpYWxpemVkID0gMTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBCVUZGRVJfU0laRSA0MDk2CisjZGVmaW5lIE1BWF9QQVJBTVMgMTYKKworc3RhdGljIHZvaWQgd3JpdGVfY29uc29sZSh1bnNpZ25lZCBjaGFyICpzdHIsIHNpemVfdCBsZW4pCit7CisJLyogb25seSBjYWxsZWQgZnJvbSBjb25zb2xlX3RocmVhZCwgc28gYSBzdGF0aWMgYnVmZmVyIHdpbGwgZG8gKi8KKwlzdGF0aWMgd2NoYXJfdCB3YnVmWzIgKiBCVUZGRVJfU0laRSArIDFdOworCURXT1JEIGR1bW15OworCisJLyogY29udmVydCB1dGYtOCB0byB1dGYtMTYgKi8KKwlpbnQgd2xlbiA9IHh1dGZ0b3djc24od2J1ZiwgKGNoYXIqKSBzdHIsIEFSUkFZX1NJWkUod2J1ZiksIGxlbik7CisJaWYgKHdsZW4gPCAwKSB7CisJCXdjaGFyX3QgKmVyciA9IEwiW2ludmFsaWRdIjsKKwkJV3JpdGVDb25zb2xlVyhjb25zb2xlLCBlcnIsIHdjc2xlbihlcnIpLCAmZHVtbXksIE5VTEwpOworCQlyZXR1cm47CisJfQorCisJLyogd3JpdGUgZGlyZWN0bHkgdG8gY29uc29sZSAqLworCVdyaXRlQ29uc29sZVcoY29uc29sZSwgd2J1Ziwgd2xlbiwgJmR1bW15LCBOVUxMKTsKKworCS8qIHJlbWVtYmVyIGlmIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIGFyZSBwcmludGVkICovCisJaWYgKHdsZW4gIT0gbGVuKQorCQlub25fYXNjaWlfdXNlZCA9IDE7Cit9CisKKyNkZWZpbmUgRk9SRUdST1VORF9BTEwgKEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRSkKKyNkZWZpbmUgQkFDS0dST1VORF9BTEwgKEJBQ0tHUk9VTkRfUkVEIHwgQkFDS0dST1VORF9HUkVFTiB8IEJBQ0tHUk9VTkRfQkxVRSkKKworc3RhdGljIHZvaWQgc2V0X2NvbnNvbGVfYXR0cih2b2lkKQoreworCVdPUkQgYXR0cmlidXRlcyA9IGF0dHI7CisJaWYgKG5lZ2F0aXZlKSB7CisJCWF0dHJpYnV0ZXMgJj0gfkZPUkVHUk9VTkRfQUxMOworCQlhdHRyaWJ1dGVzICY9IH5CQUNLR1JPVU5EX0FMTDsKKworCQkvKiBUaGlzIGNvdWxkIHByb2JhYmx5IHVzZSBhIGJpdG1hc2sKKwkJICAgaW5zdGVhZCBvZiBhIHNlcmllcyBvZiBpZnMgKi8KKwkJaWYgKGF0dHIgJiBGT1JFR1JPVU5EX1JFRCkKKwkJCWF0dHJpYnV0ZXMgfD0gQkFDS0dST1VORF9SRUQ7CisJCWlmIChhdHRyICYgRk9SRUdST1VORF9HUkVFTikKKwkJCWF0dHJpYnV0ZXMgfD0gQkFDS0dST1VORF9HUkVFTjsKKwkJaWYgKGF0dHIgJiBGT1JFR1JPVU5EX0JMVUUpCisJCQlhdHRyaWJ1dGVzIHw9IEJBQ0tHUk9VTkRfQkxVRTsKKworCQlpZiAoYXR0ciAmIEJBQ0tHUk9VTkRfUkVEKQorCQkJYXR0cmlidXRlcyB8PSBGT1JFR1JPVU5EX1JFRDsKKwkJaWYgKGF0dHIgJiBCQUNLR1JPVU5EX0dSRUVOKQorCQkJYXR0cmlidXRlcyB8PSBGT1JFR1JPVU5EX0dSRUVOOworCQlpZiAoYXR0ciAmIEJBQ0tHUk9VTkRfQkxVRSkKKwkJCWF0dHJpYnV0ZXMgfD0gRk9SRUdST1VORF9CTFVFOworCX0KKwlTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZShjb25zb2xlLCBhdHRyaWJ1dGVzKTsKK30KKworc3RhdGljIHZvaWQgZXJhc2VfaW5fbGluZSh2b2lkKQoreworCUNPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIHNiaTsKKwlEV09SRCBkdW1teTsgLyogTmVlZGVkIGZvciBXaW5kb3dzIDcgKG9yIFZpc3RhKSByZWdyZXNzaW9uICovCisKKwlpZiAoIWNvbnNvbGUpCisJCXJldHVybjsKKworCUdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvKGNvbnNvbGUsICZzYmkpOworCUZpbGxDb25zb2xlT3V0cHV0Q2hhcmFjdGVyQShjb25zb2xlLCAnICcsCisJCXNiaS5kd1NpemUuWCAtIHNiaS5kd0N1cnNvclBvc2l0aW9uLlgsIHNiaS5kd0N1cnNvclBvc2l0aW9uLAorCQkmZHVtbXkpOworfQorCitzdGF0aWMgdm9pZCBzZXRfYXR0cihjaGFyIGZ1bmMsIGNvbnN0IGludCAqcGFyYW1zLCBpbnQgcGFyYW1sZW4pCit7CisJaW50IGk7CisJc3dpdGNoIChmdW5jKSB7CisJY2FzZSAnbSc6CisJCWZvciAoaSA9IDA7IGkgPCBwYXJhbWxlbjsgaSsrKSB7CisJCQlzd2l0Y2ggKHBhcmFtc1tpXSkgeworCQkJY2FzZSAwOiAvKiByZXNldCAqLworCQkJCWF0dHIgPSBwbGFpbl9hdHRyOworCQkJCW5lZ2F0aXZlID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTogLyogYm9sZCAqLworCQkJCWF0dHIgfD0gRk9SRUdST1VORF9JTlRFTlNJVFk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6ICAvKiBmYWludCAqLworCQkJY2FzZSAyMjogLyogbm9ybWFsICovCisJCQkJYXR0ciAmPSB+Rk9SRUdST1VORF9JTlRFTlNJVFk7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6ICAvKiBpdGFsaWMgKi8KKwkJCQkvKiBVbnN1cHBvcnRlZCAqLworCQkJCWJyZWFrOworCQkJY2FzZSA0OiAgLyogdW5kZXJsaW5lICovCisJCQljYXNlIDIxOiAvKiBkb3VibGUgdW5kZXJsaW5lICovCisJCQkJLyogV2lraXBlZGlhIHNheXMgdGhpcyBmbGFnIGRvZXMgbm90aGluZyAqLworCQkJCS8qIEZ1cnRoZXJtb3JlLCBtaW5ndyBkb2Vzbid0IGRlZmluZSB0aGlzIGZsYWcKKwkJCQlhdHRyIHw9IENPTU1PTl9MVkJfVU5ERVJTQ09SRTsgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgMjQ6IC8qIG5vIHVuZGVybGluZSAqLworCQkJCS8qIGF0dHIgJj0gfkNPTU1PTl9MVkJfVU5ERVJTQ09SRTsgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgNTogIC8qIHNsb3cgYmxpbmsgKi8KKwkJCWNhc2UgNjogIC8qIGZhc3QgYmxpbmsgKi8KKwkJCQkvKiBXZSBkb24ndCBoYXZlIGJsaW5rLCBidXQgd2UgZG8gaGF2ZQorCQkJCSAgIGJhY2tncm91bmQgaW50ZW5zaXR5ICovCisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX0lOVEVOU0lUWTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjU6IC8qIG5vIGJsaW5rICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9JTlRFTlNJVFk7CisJCQkJYnJlYWs7CisJCQljYXNlIDc6ICAvKiBuZWdhdGl2ZSAqLworCQkJCW5lZ2F0aXZlID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjc6IC8qIHBvc2l0aXZlICovCisJCQkJbmVnYXRpdmUgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSA4OiAgLyogY29uY2VhbCAqLworCQkJY2FzZSAyODogLyogcmV2ZWFsICovCisJCQkJLyogVW5zdXBwb3J0ZWQgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgMzA6IC8qIEJsYWNrICovCisJCQkJYXR0ciAmPSB+Rk9SRUdST1VORF9BTEw7CisJCQkJYnJlYWs7CisJCQljYXNlIDMxOiAvKiBSZWQgKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfUkVEOworCQkJCWJyZWFrOworCQkJY2FzZSAzMjogLyogR3JlZW4gKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfR1JFRU47CisJCQkJYnJlYWs7CisJCQljYXNlIDMzOiAvKiBZZWxsb3cgKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9HUkVFTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzQ6IC8qIEJsdWUgKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfQkxVRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzU6IC8qIE1hZ2VudGEgKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9CTFVFOworCQkJCWJyZWFrOworCQkJY2FzZSAzNjogLyogQ3lhbiAqLworCQkJCWF0dHIgJj0gfkZPUkVHUk9VTkRfQUxMOworCQkJCWF0dHIgfD0gRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzc6IC8qIFdoaXRlICovCisJCQkJYXR0ciB8PSBGT1JFR1JPVU5EX1JFRCB8CisJCQkJCUZPUkVHUk9VTkRfR1JFRU4gfAorCQkJCQlGT1JFR1JPVU5EX0JMVUU7CisJCQkJYnJlYWs7CisJCQljYXNlIDM4OiAvKiBVbmtub3duICovCisJCQkJYnJlYWs7CisJCQljYXNlIDM5OiAvKiByZXNldCAqLworCQkJCWF0dHIgJj0gfkZPUkVHUk9VTkRfQUxMOworCQkJCWF0dHIgfD0gKHBsYWluX2F0dHIgJiBGT1JFR1JPVU5EX0FMTCk7CisJCQkJYnJlYWs7CisJCQljYXNlIDQwOiAvKiBCbGFjayAqLworCQkJCWF0dHIgJj0gfkJBQ0tHUk9VTkRfQUxMOworCQkJCWJyZWFrOworCQkJY2FzZSA0MTogLyogUmVkICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX1JFRDsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDI6IC8qIEdyZWVuICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX0dSRUVOOworCQkJCWJyZWFrOworCQkJY2FzZSA0MzogLyogWWVsbG93ICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX1JFRCB8IEJBQ0tHUk9VTkRfR1JFRU47CisJCQkJYnJlYWs7CisJCQljYXNlIDQ0OiAvKiBCbHVlICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX0JMVUU7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ1OiAvKiBNYWdlbnRhICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX1JFRCB8IEJBQ0tHUk9VTkRfQkxVRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDY6IC8qIEN5YW4gKi8KKwkJCQlhdHRyICY9IH5CQUNLR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEJBQ0tHUk9VTkRfR1JFRU4gfCBCQUNLR1JPVU5EX0JMVUU7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ3OiAvKiBXaGl0ZSAqLworCQkJCWF0dHIgfD0gQkFDS0dST1VORF9SRUQgfAorCQkJCQlCQUNLR1JPVU5EX0dSRUVOIHwKKwkJCQkJQkFDS0dST1VORF9CTFVFOworCQkJCWJyZWFrOworCQkJY2FzZSA0ODogLyogVW5rbm93biAqLworCQkJCWJyZWFrOworCQkJY2FzZSA0OTogLyogcmVzZXQgKi8KKwkJCQlhdHRyICY9IH5CQUNLR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IChwbGFpbl9hdHRyICYgQkFDS0dST1VORF9BTEwpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBVbnN1cHBvcnRlZCBjb2RlICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc2V0X2NvbnNvbGVfYXR0cigpOworCQlicmVhazsKKwljYXNlICdLJzoKKwkJZXJhc2VfaW5fbGluZSgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBVbnN1cHBvcnRlZCBjb2RlICovCisJCWJyZWFrOworCX0KK30KKworZW51bSB7CisJVEVYVCA9IDAsIEVTQ0FQRSA9IDAzMywgQlJBQ0tFVCA9ICdbJworfTsKKworc3RhdGljIERXT1JEIFdJTkFQSSBjb25zb2xlX3RocmVhZChMUFZPSUQgdW51c2VkKQoreworCXVuc2lnbmVkIGNoYXIgYnVmZmVyW0JVRkZFUl9TSVpFXTsKKwlEV09SRCBieXRlczsKKwlpbnQgc3RhcnQsIGVuZCA9IDAsIGMsIHBhcmFtcG9zID0gMCwgc3RhdGUgPSBURVhUOworCWludCBwYXJhbXNbTUFYX1BBUkFNU107CisKKwl3aGlsZSAoMSkgeworCQkvKiByZWFkIG5leHQgY2h1bmsgb2YgYnl0ZXMgZnJvbSB0aGUgcGlwZSAqLworCQlpZiAoIVJlYWRGaWxlKGhyZWFkLCBidWZmZXIgKyBlbmQsIEJVRkZFUl9TSVpFIC0gZW5kLCAmYnl0ZXMsCisJCQkJTlVMTCkpIHsKKwkJCS8qIGV4aXQgaWYgcGlwZSBoYXMgYmVlbiBjbG9zZWQgb3IgZGlzY29ubmVjdGVkICovCisJCQlpZiAoR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfUElQRV9OT1RfQ09OTkVDVEVEIHx8CisJCQkJCUdldExhc3RFcnJvcigpID09IEVSUk9SX0JST0tFTl9QSVBFKQorCQkJCWJyZWFrOworCQkJLyogaWdub3JlIG90aGVyIGVycm9ycyAqLworCQkJY29udGludWU7CisJCX0KKworCQkvKiBzY2FuIHRoZSBieXRlcyBhbmQgaGFuZGxlIEFOU0kgY29udHJvbCBjb2RlcyAqLworCQlieXRlcyArPSBlbmQ7CisJCXN0YXJ0ID0gZW5kID0gMDsKKwkJd2hpbGUgKGVuZCA8IGJ5dGVzKSB7CisJCQljID0gYnVmZmVyW2VuZCsrXTsKKwkJCXN3aXRjaCAoc3RhdGUpIHsKKwkJCWNhc2UgVEVYVDoKKwkJCQlpZiAoYyA9PSBFU0NBUEUpIHsKKwkJCQkJLyogcHJpbnQgdGV4dCBzZWVuIHNvIGZhciAqLworCQkJCQlpZiAoZW5kIC0gMSA+IHN0YXJ0KQorCQkJCQkJd3JpdGVfY29uc29sZShidWZmZXIgKyBzdGFydCwKKwkJCQkJCQllbmQgLSAxIC0gc3RhcnQpOworCisJCQkJCS8qIHRoZW4gc3RhcnQgcGFyc2luZyBlc2NhcGUgc2VxdWVuY2UgKi8KKwkJCQkJc3RhcnQgPSBlbmQgLSAxOworCQkJCQltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7CisJCQkJCXBhcmFtcG9zID0gMDsKKwkJCQkJc3RhdGUgPSBFU0NBUEU7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEVTQ0FQRToKKwkJCQkvKiBjb250aW51ZSBpZiAiXDAzM1siLCBvdGhlcndpc2UgYmFpbCBvdXQgKi8KKwkJCQlzdGF0ZSA9IChjID09IEJSQUNLRVQpID8gQlJBQ0tFVCA6IFRFWFQ7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQlJBQ0tFVDoKKwkJCQkvKiBwYXJzZSBbMC05O10qIGludG8gYXJyYXkgb2YgcGFyYW1ldGVycyAqLworCQkJCWlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgeworCQkJCQlwYXJhbXNbcGFyYW1wb3NdICo9IDEwOworCQkJCQlwYXJhbXNbcGFyYW1wb3NdICs9IGMgLSAnMCc7CisJCQkJfSBlbHNlIGlmIChjID09ICc7JykgeworCQkJCQkvKgorCQkJCQkgKiBuZXh0IHBhcmFtZXRlciwgYmFpbCBvdXQgaWYgb3V0IG9mCisJCQkJCSAqIGJvdW5kcworCQkJCQkgKi8KKwkJCQkJcGFyYW1wb3MrKzsKKwkJCQkJaWYgKHBhcmFtcG9zID49IE1BWF9QQVJBTVMpCisJCQkJCQlzdGF0ZSA9IFRFWFQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogZW5kIG9mIGVzY2FwZSBzZXF1ZW5jZSwgY2hhbmdlCisJCQkJCSAqIGNvbnNvbGUgYXR0cmlidXRlcworCQkJCQkgKi8KKwkJCQkJc2V0X2F0dHIoYywgcGFyYW1zLCBwYXJhbXBvcyArIDEpOworCQkJCQlzdGFydCA9IGVuZDsKKwkJCQkJc3RhdGUgPSBURVhUOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qIHByaW50IHJlbWFpbmluZyB0ZXh0IHVubGVzcyBwYXJzaW5nIGFuIGVzY2FwZSBzZXF1ZW5jZSAqLworCQlpZiAoc3RhdGUgPT0gVEVYVCAmJiBlbmQgPiBzdGFydCkgeworCQkJLyogY2hlY2sgZm9yIGluY29tcGxldGUgVVRGLTggc2VxdWVuY2VzIGFuZCBmaXggZW5kICovCisJCQlpZiAoYnVmZmVyW2VuZCAtIDFdID49IDB4ODApIHsKKwkJCQlpZiAoYnVmZmVyW2VuZCAtMV0gPj0gMHhjMCkKKwkJCQkJZW5kLS07CisJCQkJZWxzZSBpZiAoZW5kIC0gMSA+IHN0YXJ0ICYmCisJCQkJCQlidWZmZXJbZW5kIC0gMl0gPj0gMHhlMCkKKwkJCQkJZW5kIC09IDI7CisJCQkJZWxzZSBpZiAoZW5kIC0gMiA+IHN0YXJ0ICYmCisJCQkJCQlidWZmZXJbZW5kIC0gM10gPj0gMHhmMCkKKwkJCQkJZW5kIC09IDM7CisJCQl9CisKKwkJCS8qIHByaW50IHJlbWFpbmluZyBjb21wbGV0ZSBVVEYtOCBzZXF1ZW5jZXMgKi8KKwkJCWlmIChlbmQgPiBzdGFydCkKKwkJCQl3cml0ZV9jb25zb2xlKGJ1ZmZlciArIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisKKwkJCS8qIG1vdmUgcmVtYWluaW5nIGJ5dGVzIHRvIHRoZSBmcm9udCAqLworCQkJaWYgKGVuZCA8IGJ5dGVzKQorCQkJCW1lbW1vdmUoYnVmZmVyLCBidWZmZXIgKyBlbmQsIGJ5dGVzIC0gZW5kKTsKKwkJCWVuZCA9IGJ5dGVzIC0gZW5kOworCQl9IGVsc2UgeworCQkJLyogYWxsIGRhdGEgaGFzIGJlZW4gY29uc3VtZWQsIG1hcmsgYnVmZmVyIGVtcHR5ICovCisJCQllbmQgPSAwOworCQl9CisJfQorCisJLyogY2hlY2sgaWYgdGhlIGNvbnNvbGUgZm9udCBzdXBwb3J0cyB1bmljb2RlICovCisJd2Fybl9pZl9yYXN0ZXJfZm9udCgpOworCisJQ2xvc2VIYW5kbGUoaHJlYWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3aW5hbnNpX2V4aXQodm9pZCkKK3sKKwkvKiBmbHVzaCBhbGwgc3RyZWFtcyAqLworCV9mbHVzaGFsbCgpOworCisJLyogc2lnbmFsIGNvbnNvbGUgdGhyZWFkIHRvIGV4aXQgKi8KKwlGbHVzaEZpbGVCdWZmZXJzKGh3cml0ZSk7CisJRGlzY29ubmVjdE5hbWVkUGlwZShod3JpdGUpOworCisJLyogd2FpdCBmb3IgY29uc29sZSB0aHJlYWQgdG8gY29weSByZW1haW5pbmcgZGF0YSAqLworCVdhaXRGb3JTaW5nbGVPYmplY3QoaHRocmVhZCwgSU5GSU5JVEUpOworCisJLyogY2xlYW51cCBoYW5kbGVzLi4uICovCisJQ2xvc2VIYW5kbGUoaHdyaXRlKTsKKwlDbG9zZUhhbmRsZShodGhyZWFkKTsKK30KKworc3RhdGljIHZvaWQgZGllX2xhc3RlcnIoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJdmFfc3RhcnQocGFyYW1zLCBmbXQpOworCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJZGllX2Vycm5vKGZtdCwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKworI3VuZGVmIGR1cDIKK2ludCB3aW5hbnNpX2R1cDIoaW50IG9sZGZkLCBpbnQgbmV3ZmQpCit7CisJaW50IHJldCA9IGR1cDIob2xkZmQsIG5ld2ZkKTsKKworCWlmICghcmV0ICYmIG5ld2ZkID49IDAgJiYgbmV3ZmQgPD0gMikKKwkJZmRfaXNfaW50ZXJhY3RpdmVbbmV3ZmRdID0gb2xkZmQgPCAwIHx8IG9sZGZkID4gMiA/CisJCQkwIDogZmRfaXNfaW50ZXJhY3RpdmVbb2xkZmRdOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIEhBTkRMRSBkdXBsaWNhdGVfaGFuZGxlKEhBTkRMRSBobmQpCit7CisJSEFORExFIGhyZXN1bHQsIGhwcm9jID0gR2V0Q3VycmVudFByb2Nlc3MoKTsKKwlpZiAoIUR1cGxpY2F0ZUhhbmRsZShocHJvYywgaG5kLCBocHJvYywgJmhyZXN1bHQsIDAsIFRSVUUsCisJCQlEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQorCQlkaWVfbGFzdGVycigiRHVwbGljYXRlSGFuZGxlKCVsaSkgZmFpbGVkIiwKKwkJCShsb25nKSAoaW50cHRyX3QpIGhuZCk7CisJcmV0dXJuIGhyZXN1bHQ7Cit9CisKK3N0YXRpYyBIQU5ETEUgc3dhcF9vc2ZobmQoaW50IGZkLCBIQU5ETEUgbmV3X2hhbmRsZSkKK3sKKwkvKgorCSAqIENyZWF0ZSBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGhhbmRsZSBhc3NvY2lhdGVkIHdpdGggZmQKKwkgKiBiZWNhdXNlIHRoZSBvcmlnaW5hbCB3aWxsIGdldCBjbG9zZWQgd2hlbiB3ZSBkdXAyKCkuCisJICovCisJSEFORExFIGhhbmRsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworCUhBTkRMRSBkdXBsaWNhdGUgPSBkdXBsaWNhdGVfaGFuZGxlKGhhbmRsZSk7CisKKwkvKiBDcmVhdGUgYSB0ZW1wIGZkIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWxyZWFkeSBvcGVuICJuZXdfaGFuZGxlIi4gKi8KKwlpbnQgbmV3X2ZkID0gX29wZW5fb3NmaGFuZGxlKChpbnRwdHJfdCluZXdfaGFuZGxlLCBPX0JJTkFSWSk7CisKKwlhc3NlcnQoKGZkID09IDEpIHx8IChmZCA9PSAyKSk7CisKKwkvKgorCSAqIFVzZSBzdG9jayBkdXAyKCkgdG8gcmUtYmluZCBmZCB0byB0aGUgbmV3IGhhbmRsZS4gIE5vdGUgdGhhdAorCSAqIHRoaXMgd2lsbCBpbXBsaWNpdGx5IGNsb3NlKDEpIGFuZCBjbG9zZSBib3RoIGZkPTEgYW5kIHRoZQorCSAqIG9yaWdpbmFsbHkgYXNzb2NpYXRlZCBoYW5kbGUuICBJdCB3aWxsIG9wZW4gYSBuZXcgZmQ9MSBhbmQKKwkgKiBjYWxsIER1cGxpY2F0ZUhhbmRsZSgpIG9uIHRoZSBoYW5kbGUgYXNzb2NpYXRlZCB3aXRoIG5ld19mZC4KKwkgKiBJdCBpcyBiZWNhdXNlIG9mIHRoaXMgaW1wbGljaXQgY2xvc2UoKSB0aGF0IHdlIGNyZWF0ZWQgdGhlCisJICogY29weSBvZiB0aGUgb3JpZ2luYWwuCisJICoKKwkgKiBOb3RlIHRoYXQgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNhY2hlZCBjb25zb2xlIGhhbmRsZSB0byB0aGUKKwkgKiBkdXBsaWNhdGVkIG9uZSBiZWNhdXNlIHRoZSBkdXAyKCkgY2FsbCB3aWxsIGltcGxpY2l0bHkgY2xvc2UKKwkgKiB0aGUgb3JpZ2luYWwgb25lLgorCSAqCisJICogTm90ZSB0aGF0IGR1cDIoKSB3aGVuIGdpdmVuIHRhcmdldCA6PSB7MCwxLDJ9IHdpbGwgYWxzbworCSAqIGNhbGwgU2V0U3RkSGFuZGxlKCksIHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhhdC4KKwkgKi8KKwlpZiAoY29uc29sZSA9PSBoYW5kbGUpCisJCWNvbnNvbGUgPSBkdXBsaWNhdGU7CisJZHVwMihuZXdfZmQsIGZkKTsKKworCS8qIENsb3NlIHRoZSB0ZW1wIGZkLiAgVGhpcyBleHBsaWNpdGx5IGNsb3NlcyAibmV3X2hhbmRsZSIKKwkgKiAoYmVjYXVzZSBpdCBoYXMgYmVlbiBhc3NvY2lhdGVkIHdpdGggaXQpLgorCSAqLworCWNsb3NlKG5ld19mZCk7CisKKwlpZiAoZmQgPT0gMikKKwkJc2V0dmJ1ZihzdGRlcnIsIE5VTEwsIF9JT05CRiwgQlVGU0laKTsKKwlmZF9pc19pbnRlcmFjdGl2ZVtmZF0gfD0gRkRfU1dBUFBFRDsKKworCXJldHVybiBkdXBsaWNhdGU7Cit9CisKKyNpZmRlZiBERVRFQ1RfTVNZU19UVFkKKworI2luY2x1ZGUgPHdpbnRlcm5sLmg+CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorCit0eXBlZGVmIHN0cnVjdCBfT0JKRUNUX05BTUVfSU5GT1JNQVRJT04KK3sKKwlVTklDT0RFX1NUUklORyBOYW1lOworCVdDSEFSIE5hbWVCdWZmZXJbRkxFWF9BUlJBWV07Cit9IE9CSkVDVF9OQU1FX0lORk9STUFUSU9OLCAqUE9CSkVDVF9OQU1FX0lORk9STUFUSU9OOworCisjZGVmaW5lIE9iamVjdE5hbWVJbmZvcm1hdGlvbiAxCisKKyNlbHNlCisjaW5jbHVkZSA8bnRzdGF0dXMuaD4KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBkZXRlY3RfbXN5c190dHkoaW50IGZkKQoreworCVVMT05HIHJlc3VsdDsKKwlCWVRFIGJ1ZmZlclsxMDI0XTsKKwlQT0JKRUNUX05BTUVfSU5GT1JNQVRJT04gbmFtZWluZm8gPSAoUE9CSkVDVF9OQU1FX0lORk9STUFUSU9OKSBidWZmZXI7CisJUFdTVFIgbmFtZTsKKworCS8qIGNoZWNrIGlmIGZkIGlzIGEgcGlwZSAqLworCUhBTkRMRSBoID0gKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUoZmQpOworCWlmIChHZXRGaWxlVHlwZShoKSAhPSBGSUxFX1RZUEVfUElQRSkKKwkJcmV0dXJuOworCisJLyogZ2V0IHBpcGUgbmFtZSAqLworCWlmICghTlRfU1VDQ0VTUyhOdFF1ZXJ5T2JqZWN0KGgsIE9iamVjdE5hbWVJbmZvcm1hdGlvbiwKKwkJCWJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAyLCAmcmVzdWx0KSkpCisJCXJldHVybjsKKwluYW1lID0gbmFtZWluZm8tPk5hbWUuQnVmZmVyOworCW5hbWVbbmFtZWluZm8tPk5hbWUuTGVuZ3RoIC8gc2l6ZW9mKCpuYW1lKV0gPSAwOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGlzIGNvdWxkIGJlIGEgTVNZUzIgcHR5IHBpcGUgKCdtc3lzLVhYWFgtcHR5Ti1YWCcpCisJICogb3IgYSBjeWd3aW4gcHR5IHBpcGUgKCdjeWd3aW4tWFhYWC1wdHlOLVhYJykKKwkgKi8KKwlpZiAoKCF3Y3NzdHIobmFtZSwgTCJtc3lzLSIpICYmICF3Y3NzdHIobmFtZSwgTCJjeWd3aW4tIikpIHx8CisJCQkhd2Nzc3RyKG5hbWUsIEwiLXB0eSIpKQorCQlyZXR1cm47CisKKwlpZiAoZmQgPT0gMikKKwkJc2V0dmJ1ZihzdGRlcnIsIE5VTEwsIF9JT05CRiwgQlVGU0laKTsKKwlmZF9pc19pbnRlcmFjdGl2ZVtmZF0gfD0gRkRfTVNZUzsKK30KKworI2VuZGlmCisKKy8qCisgKiBXcmFwcGVyIGZvciBpc2F0dHkoKS4gIE1vc3QgY2FsbHMgaW4gdGhlIG1haW4gZ2l0IGNvZGUKKyAqIGNhbGwgaXNhdHR5KDEgb3IgMikgdG8gc2VlIGlmIHRoZSBpbnN0YW5jZSBpcyBpbnRlcmFjdGl2ZQorICogYW5kIHNob3VsZDogYmUgY29sb3JlZCwgc2hvdyBwcm9ncmVzcywgcGFnaW5hdGUgb3V0cHV0LgorICogV2UgbGllIGFuZCBnaXZlIHJlc3VsdHMgZm9yIHdoYXQgdGhlIGRlc2NyaXB0b3IgV0FTIGF0CisgKiBzdGFydHVwIChhbmQgaWdub3JlIGFueSBwaXBlIHJlZGlyZWN0aW9uIHdlIGludGVybmFsbHkKKyAqIGRvKS4KKyAqLworI3VuZGVmIGlzYXR0eQoraW50IHdpbmFuc2lfaXNhdHR5KGludCBmZCkKK3sKKwlpZiAoZmQgPj0gMCAmJiBmZCA8PSAyKQorCQlyZXR1cm4gZmRfaXNfaW50ZXJhY3RpdmVbZmRdICE9IDA7CisJcmV0dXJuIGlzYXR0eShmZCk7Cit9CisKK3ZvaWQgd2luYW5zaV9pbml0KHZvaWQpCit7CisJaW50IGNvbjEsIGNvbjI7CisJd2NoYXJfdCBuYW1lWzMyXTsKKworCS8qIGNoZWNrIGlmIGVpdGhlciBzdGRvdXQgb3Igc3RkZXJyIGlzIGEgY29uc29sZSBvdXRwdXQgc2NyZWVuIGJ1ZmZlciAqLworCWNvbjEgPSBpc19jb25zb2xlKDEpOworCWNvbjIgPSBpc19jb25zb2xlKDIpOworCisJLyogQWxzbyBjb21wdXRlIGNvbnNvbGUgYml0IGZvciBmZCAwIGV2ZW4gdGhvdWdoIHdlIGRvbid0IG5lZWQgdGhlIHJlc3VsdCBoZXJlLiAqLworCWlzX2NvbnNvbGUoMCk7CisKKwlpZiAoIWNvbjEgJiYgIWNvbjIpIHsKKyNpZmRlZiBERVRFQ1RfTVNZU19UVFkKKwkJLyogY2hlY2sgaWYgc3RkaW4gLyBzdGRvdXQgLyBzdGRlcnIgYXJlIE1TWVMyIHB0eSBwaXBlcyAqLworCQlkZXRlY3RfbXN5c190dHkoMCk7CisJCWRldGVjdF9tc3lzX3R0eSgxKTsKKwkJZGV0ZWN0X21zeXNfdHR5KDIpOworI2VuZGlmCisJCXJldHVybjsKKwl9CisKKwkvKiBjcmVhdGUgYSBuYW1lZCBwaXBlIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGNvbnNvbGUgdGhyZWFkICovCisJaWYgKHN3cHJpbnRmKG5hbWUsIEFSUkFZX1NJWkUobmFtZSkgLSAxLCBMIlxcXFwuXFxwaXBlXFx3aW5hbnNpJWx1IiwKKwkJICAgICBHZXRDdXJyZW50UHJvY2Vzc0lkKCkpIDwgMCkKKwkJZGllKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSB3aW5hbnNpIHBpcGUgbmFtZSIpOworCWh3cml0ZSA9IENyZWF0ZU5hbWVkUGlwZVcobmFtZSwgUElQRV9BQ0NFU1NfT1VUQk9VTkQsCisJCVBJUEVfVFlQRV9CWVRFIHwgUElQRV9XQUlULCAxLCBCVUZGRVJfU0laRSwgMCwgMCwgTlVMTCk7CisJaWYgKGh3cml0ZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwkJZGllX2xhc3RlcnIoIkNyZWF0ZU5hbWVkUGlwZSBmYWlsZWQiKTsKKworCWhyZWFkID0gQ3JlYXRlRmlsZVcobmFtZSwgR0VORVJJQ19SRUFELCAwLCBOVUxMLCBPUEVOX0VYSVNUSU5HLCAwLCBOVUxMKTsKKwlpZiAoaHJlYWQgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCWRpZV9sYXN0ZXJyKCJDcmVhdGVGaWxlIGZvciBuYW1lZCBwaXBlIGZhaWxlZCIpOworCisJLyogc3RhcnQgY29uc29sZSBzcG9vbCB0aHJlYWQgb24gdGhlIHBpcGUncyByZWFkIGVuZCAqLworCWh0aHJlYWQgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgY29uc29sZV90aHJlYWQsIE5VTEwsIDAsIE5VTEwpOworCWlmIChodGhyZWFkID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorCQlkaWVfbGFzdGVycigiQ3JlYXRlVGhyZWFkKGNvbnNvbGVfdGhyZWFkKSBmYWlsZWQiKTsKKworCS8qIHNjaGVkdWxlIGNsZWFudXAgcm91dGluZSAqLworCWlmIChhdGV4aXQod2luYW5zaV9leGl0KSkKKwkJZGllX2Vycm5vKCJhdGV4aXQod2luYW5zaV9leGl0KSBmYWlsZWQiKTsKKworCS8qIHJlZGlyZWN0IHN0ZG91dCAvIHN0ZGVyciB0byB0aGUgcGlwZSAqLworCWlmIChjb24xKQorCQloY29uc29sZTEgPSBzd2FwX29zZmhuZCgxLCBkdXBsaWNhdGVfaGFuZGxlKGh3cml0ZSkpOworCWlmIChjb24yKQorCQloY29uc29sZTIgPSBzd2FwX29zZmhuZCgyLCBkdXBsaWNhdGVfaGFuZGxlKGh3cml0ZSkpOworfQorCisvKgorICogUmV0dXJucyB0aGUgcmVhbCBjb25zb2xlIGhhbmRsZSBpZiBzdGRvdXQgLyBzdGRlcnIgaXMgYSBwaXBlIHJlZGlyZWN0aW5nCisgKiB0byB0aGUgY29uc29sZS4gQWxsb3dzIHNwYXduIC8gZXhlYyB0byBwYXNzIHRoZSBjb25zb2xlIHRvIHRoZSBuZXh0IHByb2Nlc3MuCisgKi8KK0hBTkRMRSB3aW5hbnNpX2dldF9vc2ZoYW5kbGUoaW50IGZkKQoreworCUhBTkRMRSByZXQ7CisKKwlpZiAoZmQgPT0gMSAmJiAoZmRfaXNfaW50ZXJhY3RpdmVbMV0gJiBGRF9TV0FQUEVEKSkKKwkJcmV0dXJuIGhjb25zb2xlMTsKKwlpZiAoZmQgPT0gMiAmJiAoZmRfaXNfaW50ZXJhY3RpdmVbMl0gJiBGRF9TV0FQUEVEKSkKKwkJcmV0dXJuIGhjb25zb2xlMjsKKworCXJldCA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworCisJLyoKKwkgKiBUaGVyZSBhcmUgb2J2aW91c2x5IGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggX2dldF9vc2ZoYW5kbGUoKQorCSAqIHJldHVybnMgKEhBTkRMRSktMi4gVGhpcyBpcyBub3QgZG9jdW1lbnRlZCBhbnl3aGVyZSwgYnV0IHRoYXQgaXMgc28KKwkgKiBjbGVhcmx5IGFuIGludmFsaWQgaGFuZGxlIHZhbHVlIHRoYXQgd2UgY2FuIGp1c3Qgd29yayBhcm91bmQgdGhpcworCSAqIGFuZCByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUgZm9yIGludmFsaWQgaGFuZGxlcy4KKwkgKi8KKwlyZXR1cm4gcmV0ID09IChIQU5ETEUpLTIgPyBJTlZBTElEX0hBTkRMRV9WQUxVRSA6IHJldDsKK30KZGlmZiAtLWdpdCBhL2NvbmZpZy5jIGIvY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiOWM3NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5jCkBAIC0wLDAgKzEsMzM3NiBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqIENvcHlyaWdodCAoQykgSm9oYW5uZXMgU2NoaW5kZWxpbiwgMjAwNQorICoKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RydWN0IGNvbmZpZ19zb3VyY2UgeworCXN0cnVjdCBjb25maWdfc291cmNlICpwcmV2OworCXVuaW9uIHsKKwkJRklMRSAqZmlsZTsKKwkJc3RydWN0IGNvbmZpZ19idWYgeworCQkJY29uc3QgY2hhciAqYnVmOworCQkJc2l6ZV90IGxlbjsKKwkJCXNpemVfdCBwb3M7CisJCX0gYnVmOworCX0gdTsKKwllbnVtIGNvbmZpZ19vcmlnaW5fdHlwZSBvcmlnaW5fdHlwZTsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnBhdGg7CisJZW51bSBjb25maWdfZXJyb3JfYWN0aW9uIGRlZmF1bHRfZXJyb3JfYWN0aW9uOworCWludCBsaW5lbnI7CisJaW50IGVvZjsKKwlzaXplX3QgdG90YWxfbGVuOworCXN0cnVjdCBzdHJidWYgdmFsdWU7CisJc3RydWN0IHN0cmJ1ZiB2YXI7CisJdW5zaWduZWQgc3Vic2VjdGlvbl9jYXNlX3NlbnNpdGl2ZSA6IDE7CisKKwlpbnQgKCpkb19mZ2V0Yykoc3RydWN0IGNvbmZpZ19zb3VyY2UgKmMpOworCWludCAoKmRvX3VuZ2V0YykoaW50IGMsIHN0cnVjdCBjb25maWdfc291cmNlICpjb25mKTsKKwlsb25nICgqZG9fZnRlbGwpKHN0cnVjdCBjb25maWdfc291cmNlICpjKTsKK307CisKKy8qCisgKiBUaGVzZSB2YXJpYWJsZXMgcmVjb3JkIHRoZSAiY3VycmVudCIgY29uZmlnIHNvdXJjZSwgd2hpY2gKKyAqIGNhbiBiZSBhY2Nlc3NlZCBieSBwYXJzaW5nIGNhbGxiYWNrcy4KKyAqCisgKiBUaGUgImNmIiB2YXJpYWJsZSB3aWxsIGJlIG5vbi1OVUxMIG9ubHkgd2hlbiB3ZSBhcmUgYWN0dWFsbHkgcGFyc2luZyBhIHJlYWwKKyAqIGNvbmZpZyBzb3VyY2UgKGZpbGUsIGJsb2IsIGNtZGxpbmUsIGV0YykuCisgKgorICogVGhlICJjdXJyZW50X2NvbmZpZ19rdmkiIHZhcmlhYmxlIHdpbGwgYmUgbm9uLU5VTEwgb25seSB3aGVuIHdlIGFyZSBmZWVkaW5nCisgKiBjYWNoZWQgY29uZmlnIGZyb20gYSBjb25maWdzZXQgaW50byBhIGNhbGxiYWNrLgorICoKKyAqIFRoZXkgc2hvdWxkIGdlbmVyYWxseSBuZXZlciBiZSBub24tTlVMTCBhdCB0aGUgc2FtZSB0aW1lLiBJZiB0aGV5IGFyZSBib3RoCisgKiBOVUxMLCB0aGVuIHdlIGFyZW4ndCBwYXJzaW5nIGFueXRoaW5nIChhbmQgZGVwZW5kaW5nIG9uIHRoZSBmdW5jdGlvbiBsb29raW5nCisgKiBhdCB0aGUgdmFyaWFibGVzLCBpdCdzIGVpdGhlciBhIGJ1ZyBmb3IgaXQgdG8gYmUgY2FsbGVkIGluIHRoZSBmaXJzdCBwbGFjZSwKKyAqIG9yIGl0J3MgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgcmV1c2VkIGZvciBub24tY29uZmlnIHB1cnBvc2VzLCBhbmQgc2hvdWxkCisgKiBmYWxsIGJhY2sgdG8gc29tZSBzYW5lIGJlaGF2aW9yKS4KKyAqLworc3RhdGljIHN0cnVjdCBjb25maWdfc291cmNlICpjZjsKK3N0YXRpYyBzdHJ1Y3Qga2V5X3ZhbHVlX2luZm8gKmN1cnJlbnRfY29uZmlnX2t2aTsKKworLyoKKyAqIFNpbWlsYXIgdG8gdGhlIHZhcmlhYmxlcyBhYm92ZSwgdGhpcyBnaXZlcyBhY2Nlc3MgdG8gdGhlICJzY29wZSIgb2YgdGhlCisgKiBjdXJyZW50IHZhbHVlIChyZXBvLCBnbG9iYWwsIGV0YykuIEZvciBjYWNoZWQgdmFsdWVzLCBpdCBjYW4gYmUgZm91bmQgdmlhCisgKiB0aGUgY3VycmVudF9jb25maWdfa3ZpIGFzIGFib3ZlLiBEdXJpbmcgcGFyc2luZywgdGhlIGN1cnJlbnQgdmFsdWUgY2FuIGJlCisgKiBmb3VuZCBpbiB0aGlzIHZhcmlhYmxlLiBJdCdzIG5vdCBwYXJ0IG9mICJjZiIgYmVjYXVzZSBpdCB0cmFuc2NlbmRzIGEgc2luZ2xlCisgKiBmaWxlIChpLmUuLCBhIGZpbGUgaW5jbHVkZWQgZnJvbSAuZ2l0L2NvbmZpZyBpcyBzdGlsbCBpbiAicmVwbyIgc2NvcGUpLgorICovCitzdGF0aWMgZW51bSBjb25maWdfc2NvcGUgY3VycmVudF9wYXJzaW5nX3Njb3BlOworCitzdGF0aWMgaW50IGNvcmVfY29tcHJlc3Npb25fc2VlbjsKK3N0YXRpYyBpbnQgcGFja19jb21wcmVzc2lvbl9zZWVuOworc3RhdGljIGludCB6bGliX2NvbXByZXNzaW9uX3NlZW47CisKK3N0YXRpYyBpbnQgY29uZmlnX2ZpbGVfZmdldGMoc3RydWN0IGNvbmZpZ19zb3VyY2UgKmNvbmYpCit7CisJcmV0dXJuIGdldGNfdW5sb2NrZWQoY29uZi0+dS5maWxlKTsKK30KKworc3RhdGljIGludCBjb25maWdfZmlsZV91bmdldGMoaW50IGMsIHN0cnVjdCBjb25maWdfc291cmNlICpjb25mKQoreworCXJldHVybiB1bmdldGMoYywgY29uZi0+dS5maWxlKTsKK30KKworc3RhdGljIGxvbmcgY29uZmlnX2ZpbGVfZnRlbGwoc3RydWN0IGNvbmZpZ19zb3VyY2UgKmNvbmYpCit7CisJcmV0dXJuIGZ0ZWxsKGNvbmYtPnUuZmlsZSk7Cit9CisKKworc3RhdGljIGludCBjb25maWdfYnVmX2ZnZXRjKHN0cnVjdCBjb25maWdfc291cmNlICpjb25mKQoreworCWlmIChjb25mLT51LmJ1Zi5wb3MgPCBjb25mLT51LmJ1Zi5sZW4pCisJCXJldHVybiBjb25mLT51LmJ1Zi5idWZbY29uZi0+dS5idWYucG9zKytdOworCisJcmV0dXJuIEVPRjsKK30KKworc3RhdGljIGludCBjb25maWdfYnVmX3VuZ2V0YyhpbnQgYywgc3RydWN0IGNvbmZpZ19zb3VyY2UgKmNvbmYpCit7CisJaWYgKGNvbmYtPnUuYnVmLnBvcyA+IDApIHsKKwkJY29uZi0+dS5idWYucG9zLS07CisJCWlmIChjb25mLT51LmJ1Zi5idWZbY29uZi0+dS5idWYucG9zXSAhPSBjKQorCQkJQlVHKCJjb25maWdfYnVmIGNhbiBvbmx5IHVuZ2V0YyB0aGUgc2FtZSBjaGFyYWN0ZXIiKTsKKwkJcmV0dXJuIGM7CisJfQorCisJcmV0dXJuIEVPRjsKK30KKworc3RhdGljIGxvbmcgY29uZmlnX2J1Zl9mdGVsbChzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqY29uZikKK3sKKwlyZXR1cm4gY29uZi0+dS5idWYucG9zOworfQorCisjZGVmaW5lIE1BWF9JTkNMVURFX0RFUFRIIDEwCitzdGF0aWMgY29uc3QgY2hhciBpbmNsdWRlX2RlcHRoX2FkdmljZVtdID0gTl8oCisiZXhjZWVkZWQgbWF4aW11bSBpbmNsdWRlIGRlcHRoICglZCkgd2hpbGUgaW5jbHVkaW5nXG4iCisiCSVzXG4iCisiZnJvbVxuIgorIgklc1xuIgorIlRoaXMgbWlnaHQgYmUgZHVlIHRvIGNpcmN1bGFyIGluY2x1ZGVzLiIpOworc3RhdGljIGludCBoYW5kbGVfcGF0aF9pbmNsdWRlKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBjb25maWdfaW5jbHVkZV9kYXRhICppbmMpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpleHBhbmRlZDsKKworCWlmICghcGF0aCkKKwkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKCJpbmNsdWRlLnBhdGgiKTsKKworCWV4cGFuZGVkID0gZXhwYW5kX3VzZXJfcGF0aChwYXRoLCAwKTsKKwlpZiAoIWV4cGFuZGVkKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IGV4cGFuZCBpbmNsdWRlIHBhdGggJyVzJyIpLCBwYXRoKTsKKwlwYXRoID0gZXhwYW5kZWQ7CisKKwkvKgorCSAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIGFzLWlzLCBidXQgaW50ZXJwcmV0IHJlbGF0aXZlIHBhdGhzCisJICogYmFzZWQgb24gdGhlIGluY2x1ZGluZyBjb25maWcgZmlsZS4KKwkgKi8KKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgocGF0aCkpIHsKKwkJY2hhciAqc2xhc2g7CisKKwkJaWYgKCFjZiB8fCAhY2YtPnBhdGgpCisJCQlyZXR1cm4gZXJyb3IoXygicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIikpOworCisJCXNsYXNoID0gZmluZF9sYXN0X2Rpcl9zZXAoY2YtPnBhdGgpOworCQlpZiAoc2xhc2gpCisJCQlzdHJidWZfYWRkKCZidWYsIGNmLT5wYXRoLCBzbGFzaCAtIGNmLT5wYXRoICsgMSk7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcGF0aCk7CisJCXBhdGggPSBidWYuYnVmOworCX0KKworCWlmICghYWNjZXNzX29yX2RpZShwYXRoLCBSX09LLCAwKSkgeworCQlpZiAoKytpbmMtPmRlcHRoID4gTUFYX0lOQ0xVREVfREVQVEgpCisJCQlkaWUoXyhpbmNsdWRlX2RlcHRoX2FkdmljZSksIE1BWF9JTkNMVURFX0RFUFRILCBwYXRoLAorCQkJICAgICFjZiA/ICI8dW5rbm93bj4iIDoKKwkJCSAgICBjZi0+bmFtZSA/IGNmLT5uYW1lIDoKKwkJCSAgICAidGhlIGNvbW1hbmQgbGluZSIpOworCQlyZXQgPSBnaXRfY29uZmlnX2Zyb21fZmlsZShnaXRfY29uZmlnX2luY2x1ZGUsIHBhdGgsIGluYyk7CisJCWluYy0+ZGVwdGgtLTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJZnJlZShleHBhbmRlZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYWRkX3RyYWlsaW5nX3N0YXJzdGFyX2Zvcl9kaXIoc3RydWN0IHN0cmJ1ZiAqcGF0KQoreworCWlmIChwYXQtPmxlbiAmJiBpc19kaXJfc2VwKHBhdC0+YnVmW3BhdC0+bGVuIC0gMV0pKQorCQlzdHJidWZfYWRkc3RyKHBhdCwgIioqIik7Cit9CisKK3N0YXRpYyBpbnQgcHJlcGFyZV9pbmNsdWRlX2NvbmRpdGlvbl9wYXR0ZXJuKHN0cnVjdCBzdHJidWYgKnBhdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwljaGFyICpleHBhbmRlZDsKKwlpbnQgcHJlZml4ID0gMDsKKworCWV4cGFuZGVkID0gZXhwYW5kX3VzZXJfcGF0aChwYXQtPmJ1ZiwgMSk7CisJaWYgKGV4cGFuZGVkKSB7CisJCXN0cmJ1Zl9yZXNldChwYXQpOworCQlzdHJidWZfYWRkc3RyKHBhdCwgZXhwYW5kZWQpOworCQlmcmVlKGV4cGFuZGVkKTsKKwl9CisKKwlpZiAocGF0LT5idWZbMF0gPT0gJy4nICYmIGlzX2Rpcl9zZXAocGF0LT5idWZbMV0pKSB7CisJCWNvbnN0IGNoYXIgKnNsYXNoOworCisJCWlmICghY2YgfHwgIWNmLT5wYXRoKQorCQkJcmV0dXJuIGVycm9yKF8oInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlICIKKwkJCQkgICAgICAgImNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIpKTsKKworCQlzdHJidWZfcmVhbHBhdGgoJnBhdGgsIGNmLT5wYXRoLCAxKTsKKwkJc2xhc2ggPSBmaW5kX2xhc3RfZGlyX3NlcChwYXRoLmJ1Zik7CisJCWlmICghc2xhc2gpCisJCQlCVUcoImhvdyBpcyB0aGlzIHBvc3NpYmxlPyIpOworCQlzdHJidWZfc3BsaWNlKHBhdCwgMCwgMSwgcGF0aC5idWYsIHNsYXNoIC0gcGF0aC5idWYpOworCQlwcmVmaXggPSBzbGFzaCAtIHBhdGguYnVmICsgMSAvKiBzbGFzaCAqLzsKKwl9IGVsc2UgaWYgKCFpc19hYnNvbHV0ZV9wYXRoKHBhdC0+YnVmKSkKKwkJc3RyYnVmX2luc2VydHN0cihwYXQsIDAsICIqKi8iKTsKKworCWFkZF90cmFpbGluZ19zdGFyc3Rhcl9mb3JfZGlyKHBhdCk7CisKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJcmV0dXJuIHByZWZpeDsKK30KKworc3RhdGljIGludCBpbmNsdWRlX2J5X2dpdGRpcihjb25zdCBzdHJ1Y3QgY29uZmlnX29wdGlvbnMgKm9wdHMsCisJCQkgICAgIGNvbnN0IGNoYXIgKmNvbmQsIHNpemVfdCBjb25kX2xlbiwgaW50IGljYXNlKQoreworCXN0cnVjdCBzdHJidWYgdGV4dCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcGF0dGVybiA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAwLCBwcmVmaXg7CisJY29uc3QgY2hhciAqZ2l0X2RpcjsKKwlpbnQgYWxyZWFkeV90cmllZF9hYnNvbHV0ZSA9IDA7CisKKwlpZiAob3B0cy0+Z2l0X2RpcikKKwkJZ2l0X2RpciA9IG9wdHMtPmdpdF9kaXI7CisJZWxzZQorCQlnb3RvIGRvbmU7CisKKwlzdHJidWZfcmVhbHBhdGgoJnRleHQsIGdpdF9kaXIsIDEpOworCXN0cmJ1Zl9hZGQoJnBhdHRlcm4sIGNvbmQsIGNvbmRfbGVuKTsKKwlwcmVmaXggPSBwcmVwYXJlX2luY2x1ZGVfY29uZGl0aW9uX3BhdHRlcm4oJnBhdHRlcm4pOworCithZ2FpbjoKKwlpZiAocHJlZml4IDwgMCkKKwkJZ290byBkb25lOworCisJaWYgKHByZWZpeCA+IDApIHsKKwkJLyoKKwkJICogcGVyZm9ybSBsaXRlcmFsIG1hdGNoaW5nIG9uIHRoZSBwcmVmaXggcGFydCBzbyB0aGF0CisJCSAqIGFueSB3aWxkY2FyZCBjaGFyYWN0ZXIgaW4gaXQgY2FuJ3QgY3JlYXRlIHNpZGUgZWZmZWN0cy4KKwkJICovCisJCWlmICh0ZXh0LmxlbiA8IHByZWZpeCkKKwkJCWdvdG8gZG9uZTsKKwkJaWYgKCFpY2FzZSAmJiBzdHJuY21wKHBhdHRlcm4uYnVmLCB0ZXh0LmJ1ZiwgcHJlZml4KSkKKwkJCWdvdG8gZG9uZTsKKwkJaWYgKGljYXNlICYmIHN0cm5jYXNlY21wKHBhdHRlcm4uYnVmLCB0ZXh0LmJ1ZiwgcHJlZml4KSkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwlyZXQgPSAhd2lsZG1hdGNoKHBhdHRlcm4uYnVmICsgcHJlZml4LCB0ZXh0LmJ1ZiArIHByZWZpeCwKKwkJCSBXTV9QQVRITkFNRSB8IChpY2FzZSA/IFdNX0NBU0VGT0xEIDogMCkpOworCisJaWYgKCFyZXQgJiYgIWFscmVhZHlfdHJpZWRfYWJzb2x1dGUpIHsKKwkJLyoKKwkJICogV2UndmUgdHJpZWQgZS5nLiBtYXRjaGluZyBnaXRkaXI6fi93b3JrLCBidXQgaWYKKwkJICogfi93b3JrIGlzIGEgc3ltbGluayB0byAvbW50L3N0b3JhZ2Uvd29yaworCQkgKiBzdHJidWZfcmVhbHBhdGgoKSB3aWxsIGV4cGFuZCBpdCwgc28gdGhlIHJ1bGUgd29uJ3QKKwkJICogbWF0Y2guIExldCdzIG1hdGNoIGFnYWluc3QgYQorCQkgKiBzdHJidWZfYWRkX2Fic29sdXRlX3BhdGgoKSB2ZXJzaW9uIG9mIHRoZSBwYXRoLAorCQkgKiB3aGljaCdsbCBkbyB0aGUgcmlnaHQgdGhpbmcKKwkJICovCisJCXN0cmJ1Zl9yZXNldCgmdGV4dCk7CisJCXN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aCgmdGV4dCwgZ2l0X2Rpcik7CisJCWFscmVhZHlfdHJpZWRfYWJzb2x1dGUgPSAxOworCQlnb3RvIGFnYWluOworCX0KK2RvbmU6CisJc3RyYnVmX3JlbGVhc2UoJnBhdHRlcm4pOworCXN0cmJ1Zl9yZWxlYXNlKCZ0ZXh0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGluY2x1ZGVfYnlfYnJhbmNoKGNvbnN0IGNoYXIgKmNvbmQsIHNpemVfdCBjb25kX2xlbikKK3sKKwlpbnQgZmxhZ3M7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdHRlcm4gPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpyZWZuYW1lID0gIXRoZV9yZXBvc2l0b3J5LT5naXRkaXIgPworCQlOVUxMIDogcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgMCwgTlVMTCwgJmZsYWdzKTsKKwljb25zdCBjaGFyICpzaG9ydG5hbWU7CisKKwlpZiAoIXJlZm5hbWUgfHwgIShmbGFncyAmIFJFRl9JU1NZTVJFRikJfHwKKwkJCSFza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy9oZWFkcy8iLCAmc2hvcnRuYW1lKSkKKwkJcmV0dXJuIDA7CisKKwlzdHJidWZfYWRkKCZwYXR0ZXJuLCBjb25kLCBjb25kX2xlbik7CisJYWRkX3RyYWlsaW5nX3N0YXJzdGFyX2Zvcl9kaXIoJnBhdHRlcm4pOworCXJldCA9ICF3aWxkbWF0Y2gocGF0dGVybi5idWYsIHNob3J0bmFtZSwgV01fUEFUSE5BTUUpOworCXN0cmJ1Zl9yZWxlYXNlKCZwYXR0ZXJuKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGluY2x1ZGVfY29uZGl0aW9uX2lzX3RydWUoY29uc3Qgc3RydWN0IGNvbmZpZ19vcHRpb25zICpvcHRzLAorCQkJCSAgICAgY29uc3QgY2hhciAqY29uZCwgc2l6ZV90IGNvbmRfbGVuKQoreworCisJaWYgKHNraXBfcHJlZml4X21lbShjb25kLCBjb25kX2xlbiwgImdpdGRpcjoiLCAmY29uZCwgJmNvbmRfbGVuKSkKKwkJcmV0dXJuIGluY2x1ZGVfYnlfZ2l0ZGlyKG9wdHMsIGNvbmQsIGNvbmRfbGVuLCAwKTsKKwllbHNlIGlmIChza2lwX3ByZWZpeF9tZW0oY29uZCwgY29uZF9sZW4sICJnaXRkaXIvaToiLCAmY29uZCwgJmNvbmRfbGVuKSkKKwkJcmV0dXJuIGluY2x1ZGVfYnlfZ2l0ZGlyKG9wdHMsIGNvbmQsIGNvbmRfbGVuLCAxKTsKKwllbHNlIGlmIChza2lwX3ByZWZpeF9tZW0oY29uZCwgY29uZF9sZW4sICJvbmJyYW5jaDoiLCAmY29uZCwgJmNvbmRfbGVuKSkKKwkJcmV0dXJuIGluY2x1ZGVfYnlfYnJhbmNoKGNvbmQsIGNvbmRfbGVuKTsKKworCS8qIHVua25vd24gY29uZGl0aW9uYWxzIGFyZSBhbHdheXMgZmFsc2UgKi8KKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9jb25maWdfaW5jbHVkZShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjb25maWdfaW5jbHVkZV9kYXRhICppbmMgPSBkYXRhOworCWNvbnN0IGNoYXIgKmNvbmQsICprZXk7CisJc2l6ZV90IGNvbmRfbGVuOworCWludCByZXQ7CisKKwkvKgorCSAqIFBhc3MgYWxvbmcgYWxsIHZhbHVlcywgaW5jbHVkaW5nICJpbmNsdWRlIiBkaXJlY3RpdmVzOyB0aGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8gcXVlcnkgaW5mb3JtYXRpb24gb24gdGhlIGluY2x1ZGVzIHRoZW1zZWx2ZXMuCisJICovCisJcmV0ID0gaW5jLT5mbih2YXIsIHZhbHVlLCBpbmMtPmRhdGEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFzdHJjbXAodmFyLCAiaW5jbHVkZS5wYXRoIikpCisJCXJldCA9IGhhbmRsZV9wYXRoX2luY2x1ZGUodmFsdWUsIGluYyk7CisKKwlpZiAoIXBhcnNlX2NvbmZpZ19rZXkodmFyLCAiaW5jbHVkZWlmIiwgJmNvbmQsICZjb25kX2xlbiwgJmtleSkgJiYKKwkgICAgKGNvbmQgJiYgaW5jbHVkZV9jb25kaXRpb25faXNfdHJ1ZShpbmMtPm9wdHMsIGNvbmQsIGNvbmRfbGVuKSkgJiYKKwkgICAgIXN0cmNtcChrZXksICJwYXRoIikpCisJCXJldCA9IGhhbmRsZV9wYXRoX2luY2x1ZGUodmFsdWUsIGluYyk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGdpdF9jb25maWdfcHVzaF9wYXJhbWV0ZXIoY29uc3QgY2hhciAqdGV4dCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGVudiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKm9sZCA9IGdldGVudihDT05GSUdfREFUQV9FTlZJUk9OTUVOVCk7CisJaWYgKG9sZCAmJiAqb2xkKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmVudiwgb2xkKTsKKwkJc3RyYnVmX2FkZGNoKCZlbnYsICcgJyk7CisJfQorCXNxX3F1b3RlX2J1ZigmZW52LCB0ZXh0KTsKKwlzZXRlbnYoQ09ORklHX0RBVEFfRU5WSVJPTk1FTlQsIGVudi5idWYsIDEpOworCXN0cmJ1Zl9yZWxlYXNlKCZlbnYpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc2tleWNoYXIoaW50IGMpCit7CisJcmV0dXJuIGlzYWxudW0oYykgfHwgYyA9PSAnLSc7Cit9CisKKy8qCisgKiBBdXhpbGlhcnkgZnVuY3Rpb24gdG8gc2FuaXR5LWNoZWNrIGFuZCBzcGxpdCB0aGUga2V5IGludG8gdGhlIHNlY3Rpb24KKyAqIGlkZW50aWZpZXIgYW5kIHZhcmlhYmxlIG5hbWUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIHdoZW4gdGhlcmUgaXMgYW4gaW52YWxpZCBjaGFyYWN0ZXIgaW4gdGhlIGtleSBhbmQKKyAqIC0yIGlmIHRoZXJlIGlzIG5vIHNlY3Rpb24gbmFtZSBpbiB0aGUga2V5LgorICoKKyAqIHN0b3JlX2tleSAtIHBvaW50ZXIgdG8gY2hhciogd2hpY2ggd2lsbCBob2xkIGEgY29weSBvZiB0aGUga2V5IHdpdGgKKyAqICAgICAgICAgICAgIGxvd2VyY2FzZSBzZWN0aW9uIGFuZCB2YXJpYWJsZSBuYW1lCisgKiBiYXNlbGVuIC0gcG9pbnRlciB0byBzaXplX3Qgd2hpY2ggd2lsbCBob2xkIHRoZSBsZW5ndGggb2YgdGhlCisgKiAgICAgICAgICAgc2VjdGlvbiArIHN1YnNlY3Rpb24gcGFydCwgY2FuIGJlIE5VTEwKKyAqLworc3RhdGljIGludCBnaXRfY29uZmlnX3BhcnNlX2tleV8xKGNvbnN0IGNoYXIgKmtleSwgY2hhciAqKnN0b3JlX2tleSwgc2l6ZV90ICpiYXNlbGVuXywgaW50IHF1aWV0KQoreworCXNpemVfdCBpLCBiYXNlbGVuOworCWludCBkb3Q7CisJY29uc3QgY2hhciAqbGFzdF9kb3QgPSBzdHJyY2hyKGtleSwgJy4nKTsKKworCS8qCisJICogU2luY2UgImtleSIgYWN0dWFsbHkgY29udGFpbnMgdGhlIHNlY3Rpb24gbmFtZSBhbmQgdGhlIHJlYWwKKwkgKiBrZXkgbmFtZSBzZXBhcmF0ZWQgYnkgYSBkb3QsIHdlIGhhdmUgdG8ga25vdyB3aGVyZSB0aGUgZG90IGlzLgorCSAqLworCisJaWYgKGxhc3RfZG90ID09IE5VTEwgfHwgbGFzdF9kb3QgPT0ga2V5KSB7CisJCWlmICghcXVpZXQpCisJCQllcnJvcihfKCJrZXkgZG9lcyBub3QgY29udGFpbiBhIHNlY3Rpb246ICVzIiksIGtleSk7CisJCXJldHVybiAtQ09ORklHX05PX1NFQ1RJT05fT1JfTkFNRTsKKwl9CisKKwlpZiAoIWxhc3RfZG90WzFdKSB7CisJCWlmICghcXVpZXQpCisJCQllcnJvcihfKCJrZXkgZG9lcyBub3QgY29udGFpbiB2YXJpYWJsZSBuYW1lOiAlcyIpLCBrZXkpOworCQlyZXR1cm4gLUNPTkZJR19OT19TRUNUSU9OX09SX05BTUU7CisJfQorCisJYmFzZWxlbiA9IGxhc3RfZG90IC0ga2V5OworCWlmIChiYXNlbGVuXykKKwkJKmJhc2VsZW5fID0gYmFzZWxlbjsKKworCS8qCisJICogVmFsaWRhdGUgdGhlIGtleSBhbmQgd2hpbGUgYXQgaXQsIGxvd2VyIGNhc2UgaXQgZm9yIG1hdGNoaW5nLgorCSAqLworCWlmIChzdG9yZV9rZXkpCisJCSpzdG9yZV9rZXkgPSB4bWFsbG9jeihzdHJsZW4oa2V5KSk7CisKKwlkb3QgPSAwOworCWZvciAoaSA9IDA7IGtleVtpXTsgaSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9IGtleVtpXTsKKwkJaWYgKGMgPT0gJy4nKQorCQkJZG90ID0gMTsKKwkJLyogTGVhdmUgdGhlIGV4dGVuZGVkIGJhc2VuYW1lIHVudG91Y2hlZC4uICovCisJCWlmICghZG90IHx8IGkgPiBiYXNlbGVuKSB7CisJCQlpZiAoIWlza2V5Y2hhcihjKSB8fAorCQkJICAgIChpID09IGJhc2VsZW4gKyAxICYmICFpc2FscGhhKGMpKSkgeworCQkJCWlmICghcXVpZXQpCisJCQkJCWVycm9yKF8oImludmFsaWQga2V5OiAlcyIpLCBrZXkpOworCQkJCWdvdG8gb3V0X2ZyZWVfcmV0XzE7CisJCQl9CisJCQljID0gdG9sb3dlcihjKTsKKwkJfSBlbHNlIGlmIChjID09ICdcbicpIHsKKwkJCWlmICghcXVpZXQpCisJCQkJZXJyb3IoXygiaW52YWxpZCBrZXkgKG5ld2xpbmUpOiAlcyIpLCBrZXkpOworCQkJZ290byBvdXRfZnJlZV9yZXRfMTsKKwkJfQorCQlpZiAoc3RvcmVfa2V5KQorCQkJKCpzdG9yZV9rZXkpW2ldID0gYzsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfcmV0XzE6CisJaWYgKHN0b3JlX2tleSkgeworCQlGUkVFX0FORF9OVUxMKCpzdG9yZV9rZXkpOworCX0KKwlyZXR1cm4gLUNPTkZJR19JTlZBTElEX0tFWTsKK30KKworaW50IGdpdF9jb25maWdfcGFyc2Vfa2V5KGNvbnN0IGNoYXIgKmtleSwgY2hhciAqKnN0b3JlX2tleSwgc2l6ZV90ICpiYXNlbGVuKQoreworCXJldHVybiBnaXRfY29uZmlnX3BhcnNlX2tleV8xKGtleSwgc3RvcmVfa2V5LCBiYXNlbGVuLCAwKTsKK30KKworaW50IGdpdF9jb25maWdfa2V5X2lzX3ZhbGlkKGNvbnN0IGNoYXIgKmtleSkKK3sKKwlyZXR1cm4gIWdpdF9jb25maWdfcGFyc2Vfa2V5XzEoa2V5LCBOVUxMLCBOVUxMLCAxKTsKK30KKworaW50IGdpdF9jb25maWdfcGFyc2VfcGFyYW1ldGVyKGNvbnN0IGNoYXIgKnRleHQsCisJCQkgICAgICAgY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCit7CisJY29uc3QgY2hhciAqdmFsdWU7CisJY2hhciAqY2Fub25pY2FsX25hbWU7CisJc3RydWN0IHN0cmJ1ZiAqKnBhaXI7CisJaW50IHJldDsKKworCXBhaXIgPSBzdHJidWZfc3BsaXRfc3RyKHRleHQsICc9JywgMik7CisJaWYgKCFwYWlyWzBdKQorCQlyZXR1cm4gZXJyb3IoXygiYm9ndXMgY29uZmlnIHBhcmFtZXRlcjogJXMiKSwgdGV4dCk7CisKKwlpZiAocGFpclswXS0+bGVuICYmIHBhaXJbMF0tPmJ1ZltwYWlyWzBdLT5sZW4gLSAxXSA9PSAnPScpIHsKKwkJc3RyYnVmX3NldGxlbihwYWlyWzBdLCBwYWlyWzBdLT5sZW4gLSAxKTsKKwkJdmFsdWUgPSBwYWlyWzFdID8gcGFpclsxXS0+YnVmIDogIiI7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSBOVUxMOworCX0KKworCXN0cmJ1Zl90cmltKHBhaXJbMF0pOworCWlmICghcGFpclswXS0+bGVuKSB7CisJCXN0cmJ1Zl9saXN0X2ZyZWUocGFpcik7CisJCXJldHVybiBlcnJvcihfKCJib2d1cyBjb25maWcgcGFyYW1ldGVyOiAlcyIpLCB0ZXh0KTsKKwl9CisKKwlpZiAoZ2l0X2NvbmZpZ19wYXJzZV9rZXkocGFpclswXS0+YnVmLCAmY2Fub25pY2FsX25hbWUsIE5VTEwpKSB7CisJCXJldCA9IC0xOworCX0gZWxzZSB7CisJCXJldCA9IChmbihjYW5vbmljYWxfbmFtZSwgdmFsdWUsIGRhdGEpIDwgMCkgPyAtMSA6IDA7CisJCWZyZWUoY2Fub25pY2FsX25hbWUpOworCX0KKwlzdHJidWZfbGlzdF9mcmVlKHBhaXIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBnaXRfY29uZmlnX2Zyb21fcGFyYW1ldGVycyhjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKK3sKKwljb25zdCBjaGFyICplbnYgPSBnZXRlbnYoQ09ORklHX0RBVEFfRU5WSVJPTk1FTlQpOworCWludCByZXQgPSAwOworCWNoYXIgKmVudnc7CisJY29uc3QgY2hhciAqKmFyZ3YgPSBOVUxMOworCWludCBuciA9IDAsIGFsbG9jID0gMDsKKwlpbnQgaTsKKwlzdHJ1Y3QgY29uZmlnX3NvdXJjZSBzb3VyY2U7CisKKwlpZiAoIWVudikKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQoJnNvdXJjZSwgMCwgc2l6ZW9mKHNvdXJjZSkpOworCXNvdXJjZS5wcmV2ID0gY2Y7CisJc291cmNlLm9yaWdpbl90eXBlID0gQ09ORklHX09SSUdJTl9DTURMSU5FOworCWNmID0gJnNvdXJjZTsKKworCS8qIHNxX2RlcXVvdGUgd2lsbCB3cml0ZSBvdmVyIGl0ICovCisJZW52dyA9IHhzdHJkdXAoZW52KTsKKworCWlmIChzcV9kZXF1b3RlX3RvX2FyZ3YoZW52dywgJmFyZ3YsICZuciwgJmFsbG9jKSA8IDApIHsKKwkJcmV0ID0gZXJyb3IoXygiYm9ndXMgZm9ybWF0IGluICVzIiksIENPTkZJR19EQVRBX0VOVklST05NRU5UKTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJaWYgKGdpdF9jb25maWdfcGFyc2VfcGFyYW1ldGVyKGFyZ3ZbaV0sIGZuLCBkYXRhKSA8IDApIHsKKwkJCXJldCA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKK291dDoKKwlmcmVlKGFyZ3YpOworCWZyZWUoZW52dyk7CisJY2YgPSBzb3VyY2UucHJldjsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdldF9uZXh0X2NoYXIodm9pZCkKK3sKKwlpbnQgYyA9IGNmLT5kb19mZ2V0YyhjZik7CisKKwlpZiAoYyA9PSAnXHInKSB7CisJCS8qIERPUyBsaWtlIHN5c3RlbXMgKi8KKwkJYyA9IGNmLT5kb19mZ2V0YyhjZik7CisJCWlmIChjICE9ICdcbicpIHsKKwkJCWlmIChjICE9IEVPRikKKwkJCQljZi0+ZG9fdW5nZXRjKGMsIGNmKTsKKwkJCWMgPSAnXHInOworCQl9CisJfQorCisJaWYgKGMgIT0gRU9GICYmICsrY2YtPnRvdGFsX2xlbiA+IElOVF9NQVgpIHsKKwkJLyoKKwkJICogVGhpcyBpcyBhbiBhYnN1cmRseSBsb25nIGNvbmZpZyBmaWxlOyByZWZ1c2UgdG8gcGFyc2UKKwkJICogZnVydGhlciBpbiBvcmRlciB0byBwcm90ZWN0IGRvd25zdHJlYW0gY29kZSBmcm9tIGludGVnZXIKKwkJICogb3ZlcmZsb3dzLiBOb3RlIHRoYXQgd2UgY2FuJ3QgcmV0dXJuIGFuIGVycm9yIHNwZWNpZmljYWxseSwKKwkJICogYnV0IHdlIGNhbiBtYXJrIEVPRiBhbmQgcHV0IHRyYXNoIGluIHRoZSByZXR1cm4gdmFsdWUsCisJCSAqIHdoaWNoIHdpbGwgdHJpZ2dlciBhIHBhcnNlIGVycm9yLgorCQkgKi8KKwkJY2YtPmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCWlmIChjID09ICdcbicpCisJCWNmLT5saW5lbnIrKzsKKwlpZiAoYyA9PSBFT0YpIHsKKwkJY2YtPmVvZiA9IDE7CisJCWNmLT5saW5lbnIrKzsKKwkJYyA9ICdcbic7CisJfQorCXJldHVybiBjOworfQorCitzdGF0aWMgY2hhciAqcGFyc2VfdmFsdWUodm9pZCkKK3sKKwlpbnQgcXVvdGUgPSAwLCBjb21tZW50ID0gMCwgc3BhY2UgPSAwOworCisJc3RyYnVmX3Jlc2V0KCZjZi0+dmFsdWUpOworCWZvciAoOzspIHsKKwkJaW50IGMgPSBnZXRfbmV4dF9jaGFyKCk7CisJCWlmIChjID09ICdcbicpIHsKKwkJCWlmIChxdW90ZSkgeworCQkJCWNmLT5saW5lbnItLTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCXJldHVybiBjZi0+dmFsdWUuYnVmOworCQl9CisJCWlmIChjb21tZW50KQorCQkJY29udGludWU7CisJCWlmIChpc3NwYWNlKGMpICYmICFxdW90ZSkgeworCQkJaWYgKGNmLT52YWx1ZS5sZW4pCisJCQkJc3BhY2UrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghcXVvdGUpIHsKKwkJCWlmIChjID09ICc7JyB8fCBjID09ICcjJykgeworCQkJCWNvbW1lbnQgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWZvciAoOyBzcGFjZTsgc3BhY2UtLSkKKwkJCXN0cmJ1Zl9hZGRjaCgmY2YtPnZhbHVlLCAnICcpOworCQlpZiAoYyA9PSAnXFwnKSB7CisJCQljID0gZ2V0X25leHRfY2hhcigpOworCQkJc3dpdGNoIChjKSB7CisJCQljYXNlICdcbic6CisJCQkJY29udGludWU7CisJCQljYXNlICd0JzoKKwkJCQljID0gJ1x0JzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2InOgorCQkJCWMgPSAnXGInOworCQkJCWJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJYyA9ICdcbic7CisJCQkJYnJlYWs7CisJCQkvKiBTb21lIGNoYXJhY3RlcnMgZXNjYXBlIGFzIHRoZW1zZWx2ZXMgKi8KKwkJCWNhc2UgJ1xcJzogY2FzZSAnIic6CisJCQkJYnJlYWs7CisJCQkvKiBSZWplY3QgdW5rbm93biBlc2NhcGUgc2VxdWVuY2VzICovCisJCQlkZWZhdWx0OgorCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJc3RyYnVmX2FkZGNoKCZjZi0+dmFsdWUsIGMpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgPT0gJyInKSB7CisJCQlxdW90ZSA9IDEtcXVvdGU7CisJCQljb250aW51ZTsKKwkJfQorCQlzdHJidWZfYWRkY2goJmNmLT52YWx1ZSwgYyk7CisJfQorfQorCitzdGF0aWMgaW50IGdldF92YWx1ZShjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSwgc3RydWN0IHN0cmJ1ZiAqbmFtZSkKK3sKKwlpbnQgYzsKKwljaGFyICp2YWx1ZTsKKwlpbnQgcmV0OworCisJLyogR2V0IHRoZSBmdWxsIG5hbWUgKi8KKwlmb3IgKDs7KSB7CisJCWMgPSBnZXRfbmV4dF9jaGFyKCk7CisJCWlmIChjZi0+ZW9mKQorCQkJYnJlYWs7CisJCWlmICghaXNrZXljaGFyKGMpKQorCQkJYnJlYWs7CisJCXN0cmJ1Zl9hZGRjaChuYW1lLCB0b2xvd2VyKGMpKTsKKwl9CisKKwl3aGlsZSAoYyA9PSAnICcgfHwgYyA9PSAnXHQnKQorCQljID0gZ2V0X25leHRfY2hhcigpOworCisJdmFsdWUgPSBOVUxMOworCWlmIChjICE9ICdcbicpIHsKKwkJaWYgKGMgIT0gJz0nKQorCQkJcmV0dXJuIC0xOworCQl2YWx1ZSA9IHBhcnNlX3ZhbHVlKCk7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gLTE7CisJfQorCS8qCisJICogV2UgYWxyZWFkeSBjb25zdW1lZCB0aGUgXG4sIGJ1dCB3ZSBuZWVkIGxpbmVuciB0byBwb2ludCB0bworCSAqIHRoZSBsaW5lIHdlIGp1c3QgcGFyc2VkIGR1cmluZyB0aGUgY2FsbCB0byBmbiB0byBnZXQKKwkgKiBhY2N1cmF0ZSBsaW5lIG51bWJlciBpbiBlcnJvciBtZXNzYWdlcy4KKwkgKi8KKwljZi0+bGluZW5yLS07CisJcmV0ID0gZm4obmFtZS0+YnVmLCB2YWx1ZSwgZGF0YSk7CisJaWYgKHJldCA+PSAwKQorCQljZi0+bGluZW5yKys7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnZXRfZXh0ZW5kZWRfYmFzZV92YXIoc3RydWN0IHN0cmJ1ZiAqbmFtZSwgaW50IGMpCit7CisJY2YtPnN1YnNlY3Rpb25fY2FzZV9zZW5zaXRpdmUgPSAwOworCWRvIHsKKwkJaWYgKGMgPT0gJ1xuJykKKwkJCWdvdG8gZXJyb3JfaW5jb21wbGV0ZV9saW5lOworCQljID0gZ2V0X25leHRfY2hhcigpOworCX0gd2hpbGUgKGlzc3BhY2UoYykpOworCisJLyogV2UgcmVxdWlyZSB0aGUgZm9ybWF0IHRvIGJlICdbYmFzZSAiZXh0ZW5zaW9uIl0nICovCisJaWYgKGMgIT0gJyInKQorCQlyZXR1cm4gLTE7CisJc3RyYnVmX2FkZGNoKG5hbWUsICcuJyk7CisKKwlmb3IgKDs7KSB7CisJCWludCBjID0gZ2V0X25leHRfY2hhcigpOworCQlpZiAoYyA9PSAnXG4nKQorCQkJZ290byBlcnJvcl9pbmNvbXBsZXRlX2xpbmU7CisJCWlmIChjID09ICciJykKKwkJCWJyZWFrOworCQlpZiAoYyA9PSAnXFwnKSB7CisJCQljID0gZ2V0X25leHRfY2hhcigpOworCQkJaWYgKGMgPT0gJ1xuJykKKwkJCQlnb3RvIGVycm9yX2luY29tcGxldGVfbGluZTsKKwkJfQorCQlzdHJidWZfYWRkY2gobmFtZSwgYyk7CisJfQorCisJLyogRmluYWwgJ10nICovCisJaWYgKGdldF9uZXh0X2NoYXIoKSAhPSAnXScpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK2Vycm9yX2luY29tcGxldGVfbGluZToKKwljZi0+bGluZW5yLS07CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdldF9iYXNlX3ZhcihzdHJ1Y3Qgc3RyYnVmICpuYW1lKQoreworCWNmLT5zdWJzZWN0aW9uX2Nhc2Vfc2Vuc2l0aXZlID0gMTsKKwlmb3IgKDs7KSB7CisJCWludCBjID0gZ2V0X25leHRfY2hhcigpOworCQlpZiAoY2YtPmVvZikKKwkJCXJldHVybiAtMTsKKwkJaWYgKGMgPT0gJ10nKQorCQkJcmV0dXJuIDA7CisJCWlmIChpc3NwYWNlKGMpKQorCQkJcmV0dXJuIGdldF9leHRlbmRlZF9iYXNlX3ZhcihuYW1lLCBjKTsKKwkJaWYgKCFpc2tleWNoYXIoYykgJiYgYyAhPSAnLicpCisJCQlyZXR1cm4gLTE7CisJCXN0cmJ1Zl9hZGRjaChuYW1lLCB0b2xvd2VyKGMpKTsKKwl9Cit9CisKK3N0cnVjdCBwYXJzZV9ldmVudF9kYXRhIHsKKwllbnVtIGNvbmZpZ19ldmVudF90IHByZXZpb3VzX3R5cGU7CisJc2l6ZV90IHByZXZpb3VzX29mZnNldDsKKwljb25zdCBzdHJ1Y3QgY29uZmlnX29wdGlvbnMgKm9wdHM7Cit9OworCitzdGF0aWMgaW50IGRvX2V2ZW50KGVudW0gY29uZmlnX2V2ZW50X3QgdHlwZSwgc3RydWN0IHBhcnNlX2V2ZW50X2RhdGEgKmRhdGEpCit7CisJc2l6ZV90IG9mZnNldDsKKworCWlmICghZGF0YS0+b3B0cyB8fCAhZGF0YS0+b3B0cy0+ZXZlbnRfZm4pCisJCXJldHVybiAwOworCisJaWYgKHR5cGUgPT0gQ09ORklHX0VWRU5UX1dISVRFU1BBQ0UgJiYKKwkgICAgZGF0YS0+cHJldmlvdXNfdHlwZSA9PSB0eXBlKQorCQlyZXR1cm4gMDsKKworCW9mZnNldCA9IGNmLT5kb19mdGVsbChjZik7CisJLyoKKwkgKiBBdCBFT0YsIHRoZSBwYXJzZXIgYWx3YXlzICJpbnNlcnRzIiBhbiBleHRyYSAnXG4nLCB0aGVyZWZvcmUKKwkgKiB0aGUgZW5kIG9mZnNldCBvZiB0aGUgZXZlbnQgaXMgdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiwgb3RoZXJ3aXNlCisJICogd2Ugd2lsbCBhbHJlYWR5IGhhdmUgYWR2YW5jZWQgdG8gdGhlIG5leHQgZXZlbnQuCisJICovCisJaWYgKHR5cGUgIT0gQ09ORklHX0VWRU5UX0VPRikKKwkJb2Zmc2V0LS07CisKKwlpZiAoZGF0YS0+cHJldmlvdXNfdHlwZSAhPSBDT05GSUdfRVZFTlRfRU9GICYmCisJICAgIGRhdGEtPm9wdHMtPmV2ZW50X2ZuKGRhdGEtPnByZXZpb3VzX3R5cGUsIGRhdGEtPnByZXZpb3VzX29mZnNldCwKKwkJCQkgb2Zmc2V0LCBkYXRhLT5vcHRzLT5ldmVudF9mbl9kYXRhKSA8IDApCisJCXJldHVybiAtMTsKKworCWRhdGEtPnByZXZpb3VzX3R5cGUgPSB0eXBlOworCWRhdGEtPnByZXZpb3VzX29mZnNldCA9IG9mZnNldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9wYXJzZV9zb3VyY2UoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEsCisJCQkgICAgY29uc3Qgc3RydWN0IGNvbmZpZ19vcHRpb25zICpvcHRzKQoreworCWludCBjb21tZW50ID0gMDsKKwlzaXplX3QgYmFzZWxlbiA9IDA7CisJc3RydWN0IHN0cmJ1ZiAqdmFyID0gJmNmLT52YXI7CisJaW50IGVycm9yX3JldHVybiA9IDA7CisJY2hhciAqZXJyb3JfbXNnID0gTlVMTDsKKworCS8qIFUrRkVGRiBCeXRlIE9yZGVyIE1hcmsgaW4gVVRGOCAqLworCWNvbnN0IGNoYXIgKmJvbXB0ciA9IHV0ZjhfYm9tOworCisJLyogRm9yIHRoZSBwYXJzZXIgZXZlbnQgY2FsbGJhY2sgKi8KKwlzdHJ1Y3QgcGFyc2VfZXZlbnRfZGF0YSBldmVudF9kYXRhID0geworCQlDT05GSUdfRVZFTlRfRU9GLCAwLCBvcHRzCisJfTsKKworCWZvciAoOzspIHsKKwkJaW50IGM7CisKKwkJYyA9IGdldF9uZXh0X2NoYXIoKTsKKwkJaWYgKGJvbXB0ciAmJiAqYm9tcHRyKSB7CisJCQkvKiBXZSBhcmUgYXQgdGhlIGZpbGUgYmVnaW5uaW5nOyBza2lwIFVURjgtZW5jb2RlZCBCT00KKwkJCSAqIGlmIHByZXNlbnQuIFNhbmUgZWRpdG9ycyB3b24ndCBwdXQgdGhpcyBpbiBvbiB0aGVpcgorCQkJICogb3duLCBidXQgZS5nLiBXaW5kb3dzIE5vdGVwYWQgd2lsbCBkbyBpdCBoYXBwaWx5LiAqLworCQkJaWYgKGMgPT0gKCpib21wdHIgJiAwMzc3KSkgeworCQkJCWJvbXB0cisrOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQkvKiBEbyBub3QgdG9sZXJhdGUgcGFydGlhbCBCT00uICovCisJCQkJaWYgKGJvbXB0ciAhPSB1dGY4X2JvbSkKKwkJCQkJYnJlYWs7CisJCQkJLyogTm8gQk9NIGF0IGZpbGUgYmVnaW5uaW5nLiBDb29sLiAqLworCQkJCWJvbXB0ciA9IE5VTEw7CisJCQl9CisJCX0KKwkJaWYgKGMgPT0gJ1xuJykgeworCQkJaWYgKGNmLT5lb2YpIHsKKwkJCQlpZiAoZG9fZXZlbnQoQ09ORklHX0VWRU5UX0VPRiwgJmV2ZW50X2RhdGEpIDwgMCkKKwkJCQkJcmV0dXJuIC0xOworCQkJCXJldHVybiAwOworCQkJfQorCQkJaWYgKGRvX2V2ZW50KENPTkZJR19FVkVOVF9XSElURVNQQUNFLCAmZXZlbnRfZGF0YSkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCWNvbW1lbnQgPSAwOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGNvbW1lbnQpCisJCQljb250aW51ZTsKKwkJaWYgKGlzc3BhY2UoYykpIHsKKwkJCWlmIChkb19ldmVudChDT05GSUdfRVZFTlRfV0hJVEVTUEFDRSwgJmV2ZW50X2RhdGEpIDwgMCkKKwkJCQkJcmV0dXJuIC0xOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgPT0gJyMnIHx8IGMgPT0gJzsnKSB7CisJCQlpZiAoZG9fZXZlbnQoQ09ORklHX0VWRU5UX0NPTU1FTlQsICZldmVudF9kYXRhKSA8IDApCisJCQkJCXJldHVybiAtMTsKKwkJCWNvbW1lbnQgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgPT0gJ1snKSB7CisJCQlpZiAoZG9fZXZlbnQoQ09ORklHX0VWRU5UX1NFQ1RJT04sICZldmVudF9kYXRhKSA8IDApCisJCQkJCXJldHVybiAtMTsKKworCQkJLyogUmVzZXQgcHJpb3IgdG8gZGV0ZXJtaW5pbmcgYSBuZXcgc3RlbSAqLworCQkJc3RyYnVmX3Jlc2V0KHZhcik7CisJCQlpZiAoZ2V0X2Jhc2VfdmFyKHZhcikgPCAwIHx8IHZhci0+bGVuIDwgMSkKKwkJCQlicmVhazsKKwkJCXN0cmJ1Zl9hZGRjaCh2YXIsICcuJyk7CisJCQliYXNlbGVuID0gdmFyLT5sZW47CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIWlzYWxwaGEoYykpCisJCQlicmVhazsKKworCQlpZiAoZG9fZXZlbnQoQ09ORklHX0VWRU5UX0VOVFJZLCAmZXZlbnRfZGF0YSkgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCS8qCisJCSAqIFRydW5jYXRlIHRoZSB2YXIgbmFtZSBiYWNrIHRvIHRoZSBzZWN0aW9uIGhlYWRlcgorCQkgKiBzdGVtIHByaW9yIHRvIGdyYWJiaW5nIHRoZSBzdWZmaXggcGFydCBvZiB0aGUgbmFtZQorCQkgKiBhbmQgdGhlIHZhbHVlLgorCQkgKi8KKwkJc3RyYnVmX3NldGxlbih2YXIsIGJhc2VsZW4pOworCQlzdHJidWZfYWRkY2godmFyLCB0b2xvd2VyKGMpKTsKKwkJaWYgKGdldF92YWx1ZShmbiwgZGF0YSwgdmFyKSA8IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAoZG9fZXZlbnQoQ09ORklHX0VWRU5UX0VSUk9SLCAmZXZlbnRfZGF0YSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlzd2l0Y2ggKGNmLT5vcmlnaW5fdHlwZSkgeworCWNhc2UgQ09ORklHX09SSUdJTl9CTE9COgorCQllcnJvcl9tc2cgPSB4c3RyZm10KF8oImJhZCBjb25maWcgbGluZSAlZCBpbiBibG9iICVzIiksCisJCQkJICAgICAgY2YtPmxpbmVuciwgY2YtPm5hbWUpOworCQlicmVhazsKKwljYXNlIENPTkZJR19PUklHSU5fRklMRToKKwkJZXJyb3JfbXNnID0geHN0cmZtdChfKCJiYWQgY29uZmlnIGxpbmUgJWQgaW4gZmlsZSAlcyIpLAorCQkJCSAgICAgIGNmLT5saW5lbnIsIGNmLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBDT05GSUdfT1JJR0lOX1NURElOOgorCQllcnJvcl9tc2cgPSB4c3RyZm10KF8oImJhZCBjb25maWcgbGluZSAlZCBpbiBzdGFuZGFyZCBpbnB1dCIpLAorCQkJCSAgICAgIGNmLT5saW5lbnIpOworCQlicmVhazsKKwljYXNlIENPTkZJR19PUklHSU5fU1VCTU9EVUxFX0JMT0I6CisJCWVycm9yX21zZyA9IHhzdHJmbXQoXygiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN1Ym1vZHVsZS1ibG9iICVzIiksCisJCQkJICAgICAgIGNmLT5saW5lbnIsIGNmLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBDT05GSUdfT1JJR0lOX0NNRExJTkU6CisJCWVycm9yX21zZyA9IHhzdHJmbXQoXygiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIpLAorCQkJCSAgICAgICBjZi0+bGluZW5yLCBjZi0+bmFtZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yX21zZyA9IHhzdHJmbXQoXygiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIiksCisJCQkJICAgICAgY2YtPmxpbmVuciwgY2YtPm5hbWUpOworCX0KKworCXN3aXRjaCAob3B0cyAmJiBvcHRzLT5lcnJvcl9hY3Rpb24gPworCQlvcHRzLT5lcnJvcl9hY3Rpb24gOgorCQljZi0+ZGVmYXVsdF9lcnJvcl9hY3Rpb24pIHsKKwljYXNlIENPTkZJR19FUlJPUl9ESUU6CisJCWRpZSgiJXMiLCBlcnJvcl9tc2cpOworCQlicmVhazsKKwljYXNlIENPTkZJR19FUlJPUl9FUlJPUjoKKwkJZXJyb3JfcmV0dXJuID0gZXJyb3IoIiVzIiwgZXJyb3JfbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBDT05GSUdfRVJST1JfU0lMRU5UOgorCQllcnJvcl9yZXR1cm4gPSAtMTsKKwkJYnJlYWs7CisJY2FzZSBDT05GSUdfRVJST1JfVU5TRVQ6CisJCUJVRygiY29uZmlnIGVycm9yIGFjdGlvbiB1bnNldCIpOworCX0KKworCWZyZWUoZXJyb3JfbXNnKTsKKwlyZXR1cm4gZXJyb3JfcmV0dXJuOworfQorCitzdGF0aWMgdWludG1heF90IGdldF91bml0X2ZhY3Rvcihjb25zdCBjaGFyICplbmQpCit7CisJaWYgKCEqZW5kKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmICghc3RyY2FzZWNtcChlbmQsICJrIikpCisJCXJldHVybiAxMDI0OworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGVuZCwgIm0iKSkKKwkJcmV0dXJuIDEwMjQgKiAxMDI0OworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGVuZCwgImciKSkKKwkJcmV0dXJuIDEwMjQgKiAxMDI0ICogMTAyNDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfcGFyc2Vfc2lnbmVkKGNvbnN0IGNoYXIgKnZhbHVlLCBpbnRtYXhfdCAqcmV0LCBpbnRtYXhfdCBtYXgpCit7CisJaWYgKHZhbHVlICYmICp2YWx1ZSkgeworCQljaGFyICplbmQ7CisJCWludG1heF90IHZhbDsKKwkJdWludG1heF90IHV2YWw7CisJCXVpbnRtYXhfdCBmYWN0b3I7CisKKwkJZXJybm8gPSAwOworCQl2YWwgPSBzdHJ0b2ltYXgodmFsdWUsICZlbmQsIDApOworCQlpZiAoZXJybm8gPT0gRVJBTkdFKQorCQkJcmV0dXJuIDA7CisJCWZhY3RvciA9IGdldF91bml0X2ZhY3RvcihlbmQpOworCQlpZiAoIWZhY3RvcikgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gMDsKKwkJfQorCQl1dmFsID0gdmFsIDwgMCA/IC12YWwgOiB2YWw7CisJCWlmICh1bnNpZ25lZF9tdWx0X292ZXJmbG93cyhmYWN0b3IsIHV2YWwpIHx8CisJCSAgICBmYWN0b3IgKiB1dmFsID4gbWF4KSB7CisJCQllcnJubyA9IEVSQU5HRTsKKwkJCXJldHVybiAwOworCQl9CisJCXZhbCAqPSBmYWN0b3I7CisJCSpyZXQgPSB2YWw7CisJCXJldHVybiAxOworCX0KKwllcnJubyA9IEVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfcGFyc2VfdW5zaWduZWQoY29uc3QgY2hhciAqdmFsdWUsIHVpbnRtYXhfdCAqcmV0LCB1aW50bWF4X3QgbWF4KQoreworCWlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKwkJY2hhciAqZW5kOworCQl1aW50bWF4X3QgdmFsOworCQl1aW50bWF4X3QgZmFjdG9yOworCisJCWVycm5vID0gMDsKKwkJdmFsID0gc3RydG91bWF4KHZhbHVlLCAmZW5kLCAwKTsKKwkJaWYgKGVycm5vID09IEVSQU5HRSkKKwkJCXJldHVybiAwOworCQlmYWN0b3IgPSBnZXRfdW5pdF9mYWN0b3IoZW5kKTsKKwkJaWYgKCFmYWN0b3IpIHsKKwkJCWVycm5vID0gRUlOVkFMOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKHVuc2lnbmVkX211bHRfb3ZlcmZsb3dzKGZhY3RvciwgdmFsKSB8fAorCQkgICAgZmFjdG9yICogdmFsID4gbWF4KSB7CisJCQllcnJubyA9IEVSQU5HRTsKKwkJCXJldHVybiAwOworCQl9CisJCXZhbCAqPSBmYWN0b3I7CisJCSpyZXQgPSB2YWw7CisJCXJldHVybiAxOworCX0KKwllcnJubyA9IEVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfcGFyc2VfaW50KGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgKnJldCkKK3sKKwlpbnRtYXhfdCB0bXA7CisJaWYgKCFnaXRfcGFyc2Vfc2lnbmVkKHZhbHVlLCAmdG1wLCBtYXhpbXVtX3NpZ25lZF92YWx1ZV9vZl90eXBlKGludCkpKQorCQlyZXR1cm4gMDsKKwkqcmV0ID0gdG1wOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGdpdF9wYXJzZV9pbnQ2NChjb25zdCBjaGFyICp2YWx1ZSwgaW50NjRfdCAqcmV0KQoreworCWludG1heF90IHRtcDsKKwlpZiAoIWdpdF9wYXJzZV9zaWduZWQodmFsdWUsICZ0bXAsIG1heGltdW1fc2lnbmVkX3ZhbHVlX29mX3R5cGUoaW50NjRfdCkpKQorCQlyZXR1cm4gMDsKKwkqcmV0ID0gdG1wOworCXJldHVybiAxOworfQorCitpbnQgZ2l0X3BhcnNlX3Vsb25nKGNvbnN0IGNoYXIgKnZhbHVlLCB1bnNpZ25lZCBsb25nICpyZXQpCit7CisJdWludG1heF90IHRtcDsKKwlpZiAoIWdpdF9wYXJzZV91bnNpZ25lZCh2YWx1ZSwgJnRtcCwgbWF4aW11bV91bnNpZ25lZF92YWx1ZV9vZl90eXBlKGxvbmcpKSkKKwkJcmV0dXJuIDA7CisJKnJldCA9IHRtcDsKKwlyZXR1cm4gMTsKK30KKworaW50IGdpdF9wYXJzZV9zc2l6ZV90KGNvbnN0IGNoYXIgKnZhbHVlLCBzc2l6ZV90ICpyZXQpCit7CisJaW50bWF4X3QgdG1wOworCWlmICghZ2l0X3BhcnNlX3NpZ25lZCh2YWx1ZSwgJnRtcCwgbWF4aW11bV9zaWduZWRfdmFsdWVfb2ZfdHlwZShzc2l6ZV90KSkpCisJCXJldHVybiAwOworCSpyZXQgPSB0bXA7CisJcmV0dXJuIDE7Cit9CisKK05PUkVUVVJOCitzdGF0aWMgdm9pZCBkaWVfYmFkX251bWJlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwljb25zdCBjaGFyICplcnJvcl90eXBlID0gKGVycm5vID09IEVSQU5HRSkgPworCQlOXygib3V0IG9mIHJhbmdlIikgOiBOXygiaW52YWxpZCB1bml0Iik7CisJY29uc3QgY2hhciAqYmFkX251bWVyaWMgPSBOXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6ICVzIik7CisKKwlpZiAoIXZhbHVlKQorCQl2YWx1ZSA9ICIiOworCisJaWYgKCFzdHJjbXAobmFtZSwgIkdJVF9URVNUX0dFVFRFWFRfUE9JU09OIikpCisJCS8qCisJCSAqIFdlIGV4cGxpY2l0bHkgKmRvbid0KiB1c2UgXygpIGhlcmUgc2luY2UgaXQgd291bGQKKwkJICogY2F1c2UgYW4gaW5maW5pdGUgbG9vcCB3aXRoIF8oKSBuZWVkaW5nIHRvIGNhbGwKKwkJICogdXNlX2dldHRleHRfcG9pc29uKCkuIFRoaXMgaXMgd2h5IG1hcmtlZCB1cAorCQkgKiB0cmFuc2xhdGlvbnMgd2l0aCBOXygpIGFib3ZlLgorCQkgKi8KKwkJZGllKGJhZF9udW1lcmljLCB2YWx1ZSwgbmFtZSwgZXJyb3JfdHlwZSk7CisKKwlpZiAoIShjZiAmJiBjZi0+bmFtZSkpCisJCWRpZShfKGJhZF9udW1lcmljKSwgdmFsdWUsIG5hbWUsIF8oZXJyb3JfdHlwZSkpOworCisJc3dpdGNoIChjZi0+b3JpZ2luX3R5cGUpIHsKKwljYXNlIENPTkZJR19PUklHSU5fQkxPQjoKKwkJZGllKF8oImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGJsb2IgJXM6ICVzIiksCisJCSAgICB2YWx1ZSwgbmFtZSwgY2YtPm5hbWUsIF8oZXJyb3JfdHlwZSkpOworCWNhc2UgQ09ORklHX09SSUdJTl9GSUxFOgorCQlkaWUoXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gZmlsZSAlczogJXMiKSwKKwkJICAgIHZhbHVlLCBuYW1lLCBjZi0+bmFtZSwgXyhlcnJvcl90eXBlKSk7CisJY2FzZSBDT05GSUdfT1JJR0lOX1NURElOOgorCQlkaWUoXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3RhbmRhcmQgaW5wdXQ6ICVzIiksCisJCSAgICB2YWx1ZSwgbmFtZSwgXyhlcnJvcl90eXBlKSk7CisJY2FzZSBDT05GSUdfT1JJR0lOX1NVQk1PRFVMRV9CTE9COgorCQlkaWUoXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6ICVzIiksCisJCSAgICB2YWx1ZSwgbmFtZSwgY2YtPm5hbWUsIF8oZXJyb3JfdHlwZSkpOworCWNhc2UgQ09ORklHX09SSUdJTl9DTURMSU5FOgorCQlkaWUoXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gY29tbWFuZCBsaW5lICVzOiAlcyIpLAorCQkgICAgdmFsdWUsIG5hbWUsIGNmLT5uYW1lLCBfKGVycm9yX3R5cGUpKTsKKwlkZWZhdWx0OgorCQlkaWUoXygiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXM6ICVzIiksCisJCSAgICB2YWx1ZSwgbmFtZSwgY2YtPm5hbWUsIF8oZXJyb3JfdHlwZSkpOworCX0KK30KKworaW50IGdpdF9jb25maWdfaW50KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCByZXQ7CisJaWYgKCFnaXRfcGFyc2VfaW50KHZhbHVlLCAmcmV0KSkKKwkJZGllX2JhZF9udW1iZXIobmFtZSwgdmFsdWUpOworCXJldHVybiByZXQ7Cit9CisKK2ludDY0X3QgZ2l0X2NvbmZpZ19pbnQ2NChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpbnQ2NF90IHJldDsKKwlpZiAoIWdpdF9wYXJzZV9pbnQ2NCh2YWx1ZSwgJnJldCkpCisJCWRpZV9iYWRfbnVtYmVyKG5hbWUsIHZhbHVlKTsKKwlyZXR1cm4gcmV0OworfQorCit1bnNpZ25lZCBsb25nIGdpdF9jb25maWdfdWxvbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJaWYgKCFnaXRfcGFyc2VfdWxvbmcodmFsdWUsICZyZXQpKQorCQlkaWVfYmFkX251bWJlcihuYW1lLCB2YWx1ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3NpemVfdCBnaXRfY29uZmlnX3NzaXplX3QoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJc3NpemVfdCByZXQ7CisJaWYgKCFnaXRfcGFyc2Vfc3NpemVfdCh2YWx1ZSwgJnJldCkpCisJCWRpZV9iYWRfbnVtYmVyKG5hbWUsIHZhbHVlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdpdF9wYXJzZV9tYXliZV9ib29sX3RleHQoY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIDE7CisJaWYgKCEqdmFsdWUpCisJCXJldHVybiAwOworCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgInRydWUiKQorCSAgICB8fCAhc3RyY2FzZWNtcCh2YWx1ZSwgInllcyIpCisJICAgIHx8ICFzdHJjYXNlY21wKHZhbHVlLCAib24iKSkKKwkJcmV0dXJuIDE7CisJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAiZmFsc2UiKQorCSAgICB8fCAhc3RyY2FzZWNtcCh2YWx1ZSwgIm5vIikKKwkgICAgfHwgIXN0cmNhc2VjbXAodmFsdWUsICJvZmYiKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC0xOworfQorCitpbnQgZ2l0X3BhcnNlX21heWJlX2Jvb2woY29uc3QgY2hhciAqdmFsdWUpCit7CisJaW50IHYgPSBnaXRfcGFyc2VfbWF5YmVfYm9vbF90ZXh0KHZhbHVlKTsKKwlpZiAoMCA8PSB2KQorCQlyZXR1cm4gdjsKKwlpZiAoZ2l0X3BhcnNlX2ludCh2YWx1ZSwgJnYpKQorCQlyZXR1cm4gISF2OworCXJldHVybiAtMTsKK30KKworaW50IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsIGludCAqaXNfYm9vbCkKK3sKKwlpbnQgdiA9IGdpdF9wYXJzZV9tYXliZV9ib29sX3RleHQodmFsdWUpOworCWlmICgwIDw9IHYpIHsKKwkJKmlzX2Jvb2wgPSAxOworCQlyZXR1cm4gdjsKKwl9CisJKmlzX2Jvb2wgPSAwOworCXJldHVybiBnaXRfY29uZmlnX2ludChuYW1lLCB2YWx1ZSk7Cit9CisKK2ludCBnaXRfY29uZmlnX2Jvb2woY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaW50IGRpc2NhcmQ7CisJcmV0dXJuICEhZ2l0X2NvbmZpZ19ib29sX29yX2ludChuYW1lLCB2YWx1ZSwgJmRpc2NhcmQpOworfQorCitpbnQgZ2l0X2NvbmZpZ19zdHJpbmcoY29uc3QgY2hhciAqKmRlc3QsIGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJKmRlc3QgPSB4c3RyZHVwKHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9jb25maWdfcGF0aG5hbWUoY29uc3QgY2hhciAqKmRlc3QsIGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJKmRlc3QgPSBleHBhbmRfdXNlcl9wYXRoKHZhbHVlLCAwKTsKKwlpZiAoISpkZXN0KQorCQlkaWUoXygiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIpLCB2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfY29uZmlnX2V4cGlyeV9kYXRlKHRpbWVzdGFtcF90ICp0aW1lc3RhbXAsIGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJaWYgKHBhcnNlX2V4cGlyeV9kYXRlKHZhbHVlLCB0aW1lc3RhbXApKQorCQlyZXR1cm4gZXJyb3IoXygiJyVzJyBmb3IgJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiKSwKKwkJCSAgICAgdmFsdWUsIHZhcik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfY29uZmlnX2NvbG9yKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJaWYgKGNvbG9yX3BhcnNlKHZhbHVlLCBkZXN0KSA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfZGVmYXVsdF9jb3JlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwkvKiBUaGlzIG5lZWRzIGEgYmV0dGVyIG5hbWUgKi8KKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmZpbGVtb2RlIikpIHsKKwkJdHJ1c3RfZXhlY3V0YWJsZV9iaXQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnRydXN0Y3RpbWUiKSkgeworCQl0cnVzdF9jdGltZSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImNvcmUuY2hlY2tzdGF0IikpIHsKKwkJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAiZGVmYXVsdCIpKQorCQkJY2hlY2tfc3RhdCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAibWluaW1hbCIpKQorCQkJY2hlY2tfc3RhdCA9IDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5xdW90ZXBhdGgiKSkgeworCQlxdW90ZV9wYXRoX2Z1bGx5ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnN5bWxpbmtzIikpIHsKKwkJaGFzX3N5bWxpbmtzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmlnbm9yZWNhc2UiKSkgeworCQlpZ25vcmVfY2FzZSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5hdHRyaWJ1dGVzZmlsZSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmZ2l0X2F0dHJpYnV0ZXNfZmlsZSwgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmhvb2tzcGF0aCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmZ2l0X2hvb2tzX3BhdGgsIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5iYXJlIikpIHsKKwkJaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5pZ25vcmVzdGF0IikpIHsKKwkJYXNzdW1lX3VuY2hhbmdlZCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5wcmVmZXJzeW1saW5rcmVmcyIpKSB7CisJCXByZWZlcl9zeW1saW5rX3JlZnMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUubG9nYWxscmVmdXBkYXRlcyIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImFsd2F5cyIpKQorCQkJbG9nX2FsbF9yZWZfdXBkYXRlcyA9IExPR19SRUZTX0FMV0FZUzsKKwkJZWxzZSBpZiAoZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpKQorCQkJbG9nX2FsbF9yZWZfdXBkYXRlcyA9IExPR19SRUZTX05PUk1BTDsKKwkJZWxzZQorCQkJbG9nX2FsbF9yZWZfdXBkYXRlcyA9IExPR19SRUZTX05PTkU7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUud2FybmFtYmlndW91c3JlZnMiKSkgeworCQl3YXJuX2FtYmlndW91c19yZWZzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmFiYnJldiIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAiYXV0byIpKQorCQkJZGVmYXVsdF9hYmJyZXYgPSAtMTsKKwkJZWxzZSB7CisJCQlpbnQgYWJicmV2ID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCQlpZiAoYWJicmV2IDwgbWluaW11bV9hYmJyZXYgfHwgYWJicmV2ID4gdGhlX2hhc2hfYWxnby0+aGV4c3opCisJCQkJcmV0dXJuIGVycm9yKF8oImFiYnJldiBsZW5ndGggb3V0IG9mIHJhbmdlOiAlZCIpLCBhYmJyZXYpOworCQkJZGVmYXVsdF9hYmJyZXYgPSBhYmJyZXY7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5kaXNhbWJpZ3VhdGUiKSkKKwkJcmV0dXJuIHNldF9kaXNhbWJpZ3VhdGVfaGludF9jb25maWcodmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmxvb3NlY29tcHJlc3Npb24iKSkgeworCQlpbnQgbGV2ZWwgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJaWYgKGxldmVsID09IC0xKQorCQkJbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CisJCWVsc2UgaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+IFpfQkVTVF9DT01QUkVTU0lPTikKKwkJCWRpZShfKCJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIpLCBsZXZlbCk7CisJCXpsaWJfY29tcHJlc3Npb25fbGV2ZWwgPSBsZXZlbDsKKwkJemxpYl9jb21wcmVzc2lvbl9zZWVuID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5jb21wcmVzc2lvbiIpKSB7CisJCWludCBsZXZlbCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlpZiAobGV2ZWwgPT0gLTEpCisJCQlsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKKwkJZWxzZSBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gWl9CRVNUX0NPTVBSRVNTSU9OKQorCQkJZGllKF8oImJhZCB6bGliIGNvbXByZXNzaW9uIGxldmVsICVkIiksIGxldmVsKTsKKwkJY29yZV9jb21wcmVzc2lvbl9sZXZlbCA9IGxldmVsOworCQljb3JlX2NvbXByZXNzaW9uX3NlZW4gPSAxOworCQlpZiAoIXpsaWJfY29tcHJlc3Npb25fc2VlbikKKwkJCXpsaWJfY29tcHJlc3Npb25fbGV2ZWwgPSBsZXZlbDsKKwkJaWYgKCFwYWNrX2NvbXByZXNzaW9uX3NlZW4pCisJCQlwYWNrX2NvbXByZXNzaW9uX2xldmVsID0gbGV2ZWw7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUucGFja2VkZ2l0d2luZG93c2l6ZSIpKSB7CisJCWludCBwZ3N6X3gyID0gZ2V0cGFnZXNpemUoKSAqIDI7CisJCXBhY2tlZF9naXRfd2luZG93X3NpemUgPSBnaXRfY29uZmlnX3Vsb25nKHZhciwgdmFsdWUpOworCisJCS8qIFRoaXMgdmFsdWUgbXVzdCBiZSBtdWx0aXBsZSBvZiAocGFnZXNpemUgKiAyKSAqLworCQlwYWNrZWRfZ2l0X3dpbmRvd19zaXplIC89IHBnc3pfeDI7CisJCWlmIChwYWNrZWRfZ2l0X3dpbmRvd19zaXplIDwgMSkKKwkJCXBhY2tlZF9naXRfd2luZG93X3NpemUgPSAxOworCQlwYWNrZWRfZ2l0X3dpbmRvd19zaXplICo9IHBnc3pfeDI7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuYmlnZmlsZXRocmVzaG9sZCIpKSB7CisJCWJpZ19maWxlX3RocmVzaG9sZCA9IGdpdF9jb25maWdfdWxvbmcodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUucGFja2VkZ2l0bGltaXQiKSkgeworCQlwYWNrZWRfZ2l0X2xpbWl0ID0gZ2l0X2NvbmZpZ191bG9uZyh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5kZWx0YWJhc2VjYWNoZWxpbWl0IikpIHsKKwkJZGVsdGFfYmFzZV9jYWNoZV9saW1pdCA9IGdpdF9jb25maWdfdWxvbmcodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuYXV0b2NybGYiKSkgeworCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJpbnB1dCIpKSB7CisJCQlhdXRvX2NybGYgPSBBVVRPX0NSTEZfSU5QVVQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlhdXRvX2NybGYgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuc2FmZWNybGYiKSkgeworCQlpbnQgZW9sX3JuZHRycF9kaWU7CisJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgIndhcm4iKSkgeworCQkJZ2xvYmFsX2NvbnZfZmxhZ3NfZW9sID0gQ09OVl9FT0xfUk5EVFJQX1dBUk47CisJCQlyZXR1cm4gMDsKKwkJfQorCQllb2xfcm5kdHJwX2RpZSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJZ2xvYmFsX2NvbnZfZmxhZ3NfZW9sID0gZW9sX3JuZHRycF9kaWUgPworCQkJQ09OVl9FT0xfUk5EVFJQX0RJRSA6IDA7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuZW9sIikpIHsKKwkJaWYgKHZhbHVlICYmICFzdHJjYXNlY21wKHZhbHVlLCAibGYiKSkKKwkJCWNvcmVfZW9sID0gRU9MX0xGOworCQllbHNlIGlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImNybGYiKSkKKwkJCWNvcmVfZW9sID0gRU9MX0NSTEY7CisJCWVsc2UgaWYgKHZhbHVlICYmICFzdHJjYXNlY21wKHZhbHVlLCAibmF0aXZlIikpCisJCQljb3JlX2VvbCA9IEVPTF9OQVRJVkU7CisJCWVsc2UKKwkJCWNvcmVfZW9sID0gRU9MX1VOU0VUOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmNoZWNrcm91bmR0cmlwZW5jb2RpbmciKSkgeworCQljaGVja19yb3VuZHRyaXBfZW5jb2RpbmcgPSB4c3RyZHVwKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5ub3Rlc3JlZiIpKSB7CisJCW5vdGVzX3JlZl9uYW1lID0geHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuZWRpdG9yIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZWRpdG9yX3Byb2dyYW0sIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5jb21tZW50Y2hhciIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJhdXRvIikpCisJCQlhdXRvX2NvbW1lbnRfbGluZV9jaGFyID0gMTsKKwkJZWxzZSBpZiAodmFsdWVbMF0gJiYgIXZhbHVlWzFdKSB7CisJCQljb21tZW50X2xpbmVfY2hhciA9IHZhbHVlWzBdOworCQkJYXV0b19jb21tZW50X2xpbmVfY2hhciA9IDA7CisJCX0gZWxzZQorCQkJcmV0dXJuIGVycm9yKF8oImNvcmUuY29tbWVudENoYXIgc2hvdWxkIG9ubHkgYmUgb25lIGNoYXJhY3RlciIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5hc2twYXNzIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmYXNrcGFzc19wcm9ncmFtLCB2YXIsIHZhbHVlKTsKKworCWlmICghc3RyY21wKHZhciwgImNvcmUuZXhjbHVkZXNmaWxlIikpCisJCXJldHVybiBnaXRfY29uZmlnX3BhdGhuYW1lKCZleGNsdWRlc19maWxlLCB2YXIsIHZhbHVlKTsKKworCWlmICghc3RyY21wKHZhciwgImNvcmUud2hpdGVzcGFjZSIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJd2hpdGVzcGFjZV9ydWxlX2NmZyA9IHBhcnNlX3doaXRlc3BhY2VfcnVsZSh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuZnN5bmNvYmplY3RmaWxlcyIpKSB7CisJCWZzeW5jX29iamVjdF9maWxlcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5wcmVsb2FkaW5kZXgiKSkgeworCQljb3JlX3ByZWxvYWRfaW5kZXggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuY3JlYXRlb2JqZWN0IikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJyZW5hbWUiKSkKKwkJCW9iamVjdF9jcmVhdGlvbl9tb2RlID0gT0JKRUNUX0NSRUFUSU9OX1VTRVNfUkVOQU1FUzsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImxpbmsiKSkKKwkJCW9iamVjdF9jcmVhdGlvbl9tb2RlID0gT0JKRUNUX0NSRUFUSU9OX1VTRVNfSEFSRExJTktTOworCQllbHNlCisJCQlkaWUoXygiaW52YWxpZCBtb2RlIGZvciBvYmplY3QgY3JlYXRpb246ICVzIiksIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5zcGFyc2VjaGVja291dCIpKSB7CisJCWNvcmVfYXBwbHlfc3BhcnNlX2NoZWNrb3V0ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnNwYXJzZWNoZWNrb3V0Y29uZSIpKSB7CisJCWNvcmVfc3BhcnNlX2NoZWNrb3V0X2NvbmUgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUucHJlY29tcG9zZXVuaWNvZGUiKSkgeworCQlwcmVjb21wb3NlZF91bmljb2RlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnByb3RlY3RoZnMiKSkgeworCQlwcm90ZWN0X2hmcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5wcm90ZWN0bnRmcyIpKSB7CisJCXByb3RlY3RfbnRmcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS51c2VyZXBsYWNlcmVmcyIpKSB7CisJCXJlYWRfcmVwbGFjZV9yZWZzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCisJcmV0dXJuIHBsYXRmb3JtX2NvcmVfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGludCBnaXRfZGVmYXVsdF9pMThuX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKHZhciwgImkxOG4uY29tbWl0ZW5jb2RpbmciKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZnaXRfY29tbWl0X2VuY29kaW5nLCB2YXIsIHZhbHVlKTsKKworCWlmICghc3RyY21wKHZhciwgImkxOG4ubG9nb3V0cHV0ZW5jb2RpbmciKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZnaXRfbG9nX291dHB1dF9lbmNvZGluZywgdmFyLCB2YWx1ZSk7CisKKwkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2RlZmF1bHRfYnJhbmNoX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKHZhciwgImJyYW5jaC5hdXRvc2V0dXBtZXJnZSIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImFsd2F5cyIpKSB7CisJCQlnaXRfYnJhbmNoX3RyYWNrID0gQlJBTkNIX1RSQUNLX0FMV0FZUzsKKwkJCXJldHVybiAwOworCQl9CisJCWdpdF9icmFuY2hfdHJhY2sgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJicmFuY2guYXV0b3NldHVwcmViYXNlIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibmV2ZXIiKSkKKwkJCWF1dG9yZWJhc2UgPSBBVVRPUkVCQVNFX05FVkVSOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibG9jYWwiKSkKKwkJCWF1dG9yZWJhc2UgPSBBVVRPUkVCQVNFX0xPQ0FMOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAicmVtb3RlIikpCisJCQlhdXRvcmViYXNlID0gQVVUT1JFQkFTRV9SRU1PVEU7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJhbHdheXMiKSkKKwkJCWF1dG9yZWJhc2UgPSBBVVRPUkVCQVNFX0FMV0FZUzsKKwkJZWxzZQorCQkJcmV0dXJuIGVycm9yKF8oIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXMiKSwgdmFyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQWRkIG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgaGVyZSBhbmQgdG8gRG9jdW1lbnRhdGlvbi9jb25maWcudHh0LiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9kZWZhdWx0X3B1c2hfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAodmFyLCAicHVzaC5kZWZhdWx0IikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibm90aGluZyIpKQorCQkJcHVzaF9kZWZhdWx0ID0gUFVTSF9ERUZBVUxUX05PVEhJTkc7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJtYXRjaGluZyIpKQorCQkJcHVzaF9kZWZhdWx0ID0gUFVTSF9ERUZBVUxUX01BVENISU5HOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAic2ltcGxlIikpCisJCQlwdXNoX2RlZmF1bHQgPSBQVVNIX0RFRkFVTFRfU0lNUExFOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAidXBzdHJlYW0iKSkKKwkJCXB1c2hfZGVmYXVsdCA9IFBVU0hfREVGQVVMVF9VUFNUUkVBTTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInRyYWNraW5nIikpIC8qIGRlcHJlY2F0ZWQgKi8KKwkJCXB1c2hfZGVmYXVsdCA9IFBVU0hfREVGQVVMVF9VUFNUUkVBTTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImN1cnJlbnQiKSkKKwkJCXB1c2hfZGVmYXVsdCA9IFBVU0hfREVGQVVMVF9DVVJSRU5UOworCQllbHNlIHsKKwkJCWVycm9yKF8oIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXM6ICVzIiksIHZhciwgdmFsdWUpOworCQkJcmV0dXJuIGVycm9yKF8oIm11c3QgYmUgb25lIG9mIG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsICIKKwkJCQkgICAgICAgInVwc3RyZWFtIG9yIGN1cnJlbnQiKSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJLyogQWRkIG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgaGVyZSBhbmQgdG8gRG9jdW1lbnRhdGlvbi9jb25maWcudHh0LiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9kZWZhdWx0X21haWxtYXBfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAodmFyLCAibWFpbG1hcC5maWxlIikpCisJCXJldHVybiBnaXRfY29uZmlnX3BhdGhuYW1lKCZnaXRfbWFpbG1hcF9maWxlLCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJtYWlsbWFwLmJsb2IiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZnaXRfbWFpbG1hcF9ibG9iLCB2YXIsIHZhbHVlKTsKKworCS8qIEFkZCBvdGhlciBjb25maWcgdmFyaWFibGVzIGhlcmUgYW5kIHRvIERvY3VtZW50YXRpb24vY29uZmlnLnR4dC4gKi8KKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9kZWZhdWx0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAiY29yZS4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvcmVfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKKworCWlmIChzdGFydHNfd2l0aCh2YXIsICJ1c2VyLiIpIHx8CisJICAgIHN0YXJ0c193aXRoKHZhciwgImF1dGhvci4iKSB8fAorCSAgICBzdGFydHNfd2l0aCh2YXIsICJjb21taXR0ZXIuIikpCisJCXJldHVybiBnaXRfaWRlbnRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKKworCWlmIChzdGFydHNfd2l0aCh2YXIsICJpMThuLiIpKQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfaTE4bl9jb25maWcodmFyLCB2YWx1ZSk7CisKKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAiYnJhbmNoLiIpKQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfYnJhbmNoX2NvbmZpZyh2YXIsIHZhbHVlKTsKKworCWlmIChzdGFydHNfd2l0aCh2YXIsICJwdXNoLiIpKQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfcHVzaF9jb25maWcodmFyLCB2YWx1ZSk7CisKKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAibWFpbG1hcC4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X21haWxtYXBfY29uZmlnKHZhciwgdmFsdWUpOworCisJaWYgKHN0YXJ0c193aXRoKHZhciwgImFkdmljZS4iKSB8fCBzdGFydHNfd2l0aCh2YXIsICJjb2xvci5hZHZpY2UiKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2FkdmljZV9jb25maWcodmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJwYWdlci5jb2xvciIpIHx8ICFzdHJjbXAodmFyLCAiY29sb3IucGFnZXIiKSkgeworCQlwYWdlcl91c2VfY29sb3IgPSBnaXRfY29uZmlnX2Jvb2wodmFyLHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAicGFjay5wYWNrc2l6ZWxpbWl0IikpIHsKKwkJcGFja19zaXplX2xpbWl0X2NmZyA9IGdpdF9jb25maWdfdWxvbmcodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgInBhY2suY29tcHJlc3Npb24iKSkgeworCQlpbnQgbGV2ZWwgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJaWYgKGxldmVsID09IC0xKQorCQkJbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CisJCWVsc2UgaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+IFpfQkVTVF9DT01QUkVTU0lPTikKKwkJCWRpZShfKCJiYWQgcGFjayBjb21wcmVzc2lvbiBsZXZlbCAlZCIpLCBsZXZlbCk7CisJCXBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPSBsZXZlbDsKKwkJcGFja19jb21wcmVzc2lvbl9zZWVuID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQWRkIG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgaGVyZSBhbmQgdG8gRG9jdW1lbnRhdGlvbi9jb25maWcudHh0LiAqLworCXJldHVybiAwOworfQorCisvKgorICogQWxsIHNvdXJjZSBzcGVjaWZpYyBmaWVsZHMgaW4gdGhlIHVuaW9uLCBkaWVfb25fZXJyb3IsIG5hbWUgYW5kIHRoZSBjYWxsYmFja3MKKyAqIGZnZXRjLCB1bmdldGMsIGZ0ZWxsIG9mIHRvcCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IGRvX2NvbmZpZ19mcm9tKHN0cnVjdCBjb25maWdfc291cmNlICp0b3AsIGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhLAorCQkJICBjb25zdCBzdHJ1Y3QgY29uZmlnX29wdGlvbnMgKm9wdHMpCit7CisJaW50IHJldDsKKworCS8qIHB1c2ggY29uZmlnLWZpbGUgcGFyc2luZyBzdGF0ZSBzdGFjayAqLworCXRvcC0+cHJldiA9IGNmOworCXRvcC0+bGluZW5yID0gMTsKKwl0b3AtPmVvZiA9IDA7CisJdG9wLT50b3RhbF9sZW4gPSAwOworCXN0cmJ1Zl9pbml0KCZ0b3AtPnZhbHVlLCAxMDI0KTsKKwlzdHJidWZfaW5pdCgmdG9wLT52YXIsIDEwMjQpOworCWNmID0gdG9wOworCisJcmV0ID0gZ2l0X3BhcnNlX3NvdXJjZShmbiwgZGF0YSwgb3B0cyk7CisKKwkvKiBwb3AgY29uZmlnLWZpbGUgcGFyc2luZyBzdGF0ZSBzdGFjayAqLworCXN0cmJ1Zl9yZWxlYXNlKCZ0b3AtPnZhbHVlKTsKKwlzdHJidWZfcmVsZWFzZSgmdG9wLT52YXIpOworCWNmID0gdG9wLT5wcmV2OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkb19jb25maWdfZnJvbV9maWxlKGNvbmZpZ19mbl90IGZuLAorCQljb25zdCBlbnVtIGNvbmZpZ19vcmlnaW5fdHlwZSBvcmlnaW5fdHlwZSwKKwkJY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCwgRklMRSAqZiwKKwkJdm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGNvbmZpZ19vcHRpb25zICpvcHRzKQoreworCXN0cnVjdCBjb25maWdfc291cmNlIHRvcDsKKwlpbnQgcmV0OworCisJdG9wLnUuZmlsZSA9IGY7CisJdG9wLm9yaWdpbl90eXBlID0gb3JpZ2luX3R5cGU7CisJdG9wLm5hbWUgPSBuYW1lOworCXRvcC5wYXRoID0gcGF0aDsKKwl0b3AuZGVmYXVsdF9lcnJvcl9hY3Rpb24gPSBDT05GSUdfRVJST1JfRElFOworCXRvcC5kb19mZ2V0YyA9IGNvbmZpZ19maWxlX2ZnZXRjOworCXRvcC5kb191bmdldGMgPSBjb25maWdfZmlsZV91bmdldGM7CisJdG9wLmRvX2Z0ZWxsID0gY29uZmlnX2ZpbGVfZnRlbGw7CisKKwlmbG9ja2ZpbGUoZik7CisJcmV0ID0gZG9fY29uZmlnX2Zyb20oJnRvcCwgZm4sIGRhdGEsIG9wdHMpOworCWZ1bmxvY2tmaWxlKGYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2NvbmZpZ19mcm9tX3N0ZGluKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKQoreworCXJldHVybiBkb19jb25maWdfZnJvbV9maWxlKGZuLCBDT05GSUdfT1JJR0lOX1NURElOLCAiIiwgTlVMTCwgc3RkaW4sCisJCQkJICAgZGF0YSwgTlVMTCk7Cit9CisKK2ludCBnaXRfY29uZmlnX2Zyb21fZmlsZV93aXRoX29wdGlvbnMoY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCSAgICAgIHZvaWQgKmRhdGEsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGNvbmZpZ19vcHRpb25zICpvcHRzKQoreworCWludCByZXQgPSAtMTsKKwlGSUxFICpmOworCisJZiA9IGZvcGVuX29yX3dhcm4oZmlsZW5hbWUsICJyIik7CisJaWYgKGYpIHsKKwkJcmV0ID0gZG9fY29uZmlnX2Zyb21fZmlsZShmbiwgQ09ORklHX09SSUdJTl9GSUxFLCBmaWxlbmFtZSwKKwkJCQkJICBmaWxlbmFtZSwgZiwgZGF0YSwgb3B0cyk7CisJCWZjbG9zZShmKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IGdpdF9jb25maWdfZnJvbV9maWxlKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZ2l0X2NvbmZpZ19mcm9tX2ZpbGVfd2l0aF9vcHRpb25zKGZuLCBmaWxlbmFtZSwgZGF0YSwgTlVMTCk7Cit9CisKK2ludCBnaXRfY29uZmlnX2Zyb21fbWVtKGNvbmZpZ19mbl90IGZuLAorCQkJY29uc3QgZW51bSBjb25maWdfb3JpZ2luX3R5cGUgb3JpZ2luX3R5cGUsCisJCQljb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCisJCQl2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgY29uZmlnX29wdGlvbnMgKm9wdHMpCit7CisJc3RydWN0IGNvbmZpZ19zb3VyY2UgdG9wOworCisJdG9wLnUuYnVmLmJ1ZiA9IGJ1ZjsKKwl0b3AudS5idWYubGVuID0gbGVuOworCXRvcC51LmJ1Zi5wb3MgPSAwOworCXRvcC5vcmlnaW5fdHlwZSA9IG9yaWdpbl90eXBlOworCXRvcC5uYW1lID0gbmFtZTsKKwl0b3AucGF0aCA9IE5VTEw7CisJdG9wLmRlZmF1bHRfZXJyb3JfYWN0aW9uID0gQ09ORklHX0VSUk9SX0VSUk9SOworCXRvcC5kb19mZ2V0YyA9IGNvbmZpZ19idWZfZmdldGM7CisJdG9wLmRvX3VuZ2V0YyA9IGNvbmZpZ19idWZfdW5nZXRjOworCXRvcC5kb19mdGVsbCA9IGNvbmZpZ19idWZfZnRlbGw7CisKKwlyZXR1cm4gZG9fY29uZmlnX2Zyb20oJnRvcCwgZm4sIGRhdGEsIG9wdHMpOworfQorCitpbnQgZ2l0X2NvbmZpZ19mcm9tX2Jsb2Jfb2lkKGNvbmZpZ19mbl90IGZuLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IHJldDsKKworCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIGxvYWQgY29uZmlnIGJsb2Igb2JqZWN0ICclcyciKSwgbmFtZSk7CisJaWYgKHR5cGUgIT0gT0JKX0JMT0IpIHsKKwkJZnJlZShidWYpOworCQlyZXR1cm4gZXJyb3IoXygicmVmZXJlbmNlICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBibG9iIiksIG5hbWUpOworCX0KKworCXJldCA9IGdpdF9jb25maWdfZnJvbV9tZW0oZm4sIENPTkZJR19PUklHSU5fQkxPQiwgbmFtZSwgYnVmLCBzaXplLAorCQkJCSAgZGF0YSwgTlVMTCk7CisJZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnaXRfY29uZmlnX2Zyb21fYmxvYl9yZWYoY29uZmlnX2ZuX3QgZm4sCisJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlpZiAoZ2V0X29pZChuYW1lLCAmb2lkKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gcmVzb2x2ZSBjb25maWcgYmxvYiAnJXMnIiksIG5hbWUpOworCXJldHVybiBnaXRfY29uZmlnX2Zyb21fYmxvYl9vaWQoZm4sIG5hbWUsICZvaWQsIGRhdGEpOworfQorCitjb25zdCBjaGFyICpnaXRfZXRjX2dpdGNvbmZpZyh2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpzeXN0ZW1fd2lkZTsKKwlpZiAoIXN5c3RlbV93aWRlKQorCQlzeXN0ZW1fd2lkZSA9IHN5c3RlbV9wYXRoKEVUQ19HSVRDT05GSUcpOworCXJldHVybiBzeXN0ZW1fd2lkZTsKK30KKworLyoKKyAqIFBhcnNlIGVudmlyb25tZW50IHZhcmlhYmxlICdrJyBhcyBhIGJvb2xlYW4gKGluIHZhcmlvdXMKKyAqIHBvc3NpYmxlIHNwZWxsaW5ncyk7IGlmIG1pc3NpbmcsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSAnZGVmJy4KKyAqLworaW50IGdpdF9lbnZfYm9vbChjb25zdCBjaGFyICprLCBpbnQgZGVmKQoreworCWNvbnN0IGNoYXIgKnYgPSBnZXRlbnYoayk7CisJcmV0dXJuIHYgPyBnaXRfY29uZmlnX2Jvb2woaywgdikgOiBkZWY7Cit9CisKKy8qCisgKiBQYXJzZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnaycgYXMgdWxvbmcgd2l0aCBwb3NzaWJseSBhIHVuaXQKKyAqIHN1ZmZpeDsgaWYgbWlzc2luZywgdXNlIHRoZSBkZWZhdWx0IHZhbHVlICd2YWwnLgorICovCit1bnNpZ25lZCBsb25nIGdpdF9lbnZfdWxvbmcoY29uc3QgY2hhciAqaywgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJY29uc3QgY2hhciAqdiA9IGdldGVudihrKTsKKwlpZiAodiAmJiAhZ2l0X3BhcnNlX3Vsb25nKHYsICZ2YWwpKQorCQlkaWUoXygiZmFpbGVkIHRvIHBhcnNlICVzIiksIGspOworCXJldHVybiB2YWw7Cit9CisKK2ludCBnaXRfY29uZmlnX3N5c3RlbSh2b2lkKQoreworCXJldHVybiAhZ2l0X2Vudl9ib29sKCJHSVRfQ09ORklHX05PU1lTVEVNIiwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZG9fZ2l0X2NvbmZpZ19zZXF1ZW5jZShjb25zdCBzdHJ1Y3QgY29uZmlnX29wdGlvbnMgKm9wdHMsCisJCQkJICBjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0ID0gMDsKKwljaGFyICp4ZGdfY29uZmlnID0geGRnX2NvbmZpZ19ob21lKCJjb25maWciKTsKKwljaGFyICp1c2VyX2NvbmZpZyA9IGV4cGFuZF91c2VyX3BhdGgoIn4vLmdpdGNvbmZpZyIsIDApOworCWNoYXIgKnJlcG9fY29uZmlnOworCWVudW0gY29uZmlnX3Njb3BlIHByZXZfcGFyc2luZ19zY29wZSA9IGN1cnJlbnRfcGFyc2luZ19zY29wZTsKKworCWlmIChvcHRzLT5jb21tb25kaXIpCisJCXJlcG9fY29uZmlnID0gbWtwYXRoZHVwKCIlcy9jb25maWciLCBvcHRzLT5jb21tb25kaXIpOworCWVsc2UgaWYgKG9wdHMtPmdpdF9kaXIpCisJCUJVRygiZ2l0X2RpciB3aXRob3V0IGNvbW1vbmRpciIpOworCWVsc2UKKwkJcmVwb19jb25maWcgPSBOVUxMOworCisJY3VycmVudF9wYXJzaW5nX3Njb3BlID0gQ09ORklHX1NDT1BFX1NZU1RFTTsKKwlpZiAoZ2l0X2NvbmZpZ19zeXN0ZW0oKSAmJiAhYWNjZXNzX29yX2RpZShnaXRfZXRjX2dpdGNvbmZpZygpLCBSX09LLAorCQkJCQkJICBvcHRzLT5zeXN0ZW1fZ2VudGx5ID8KKwkJCQkJCSAgQUNDRVNTX0VBQ0NFU19PSyA6IDApKQorCQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIGdpdF9ldGNfZ2l0Y29uZmlnKCksCisJCQkJCSAgICBkYXRhKTsKKworCWN1cnJlbnRfcGFyc2luZ19zY29wZSA9IENPTkZJR19TQ09QRV9HTE9CQUw7CisJaWYgKHhkZ19jb25maWcgJiYgIWFjY2Vzc19vcl9kaWUoeGRnX2NvbmZpZywgUl9PSywgQUNDRVNTX0VBQ0NFU19PSykpCisJCXJldCArPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgeGRnX2NvbmZpZywgZGF0YSk7CisKKwlpZiAodXNlcl9jb25maWcgJiYgIWFjY2Vzc19vcl9kaWUodXNlcl9jb25maWcsIFJfT0ssIEFDQ0VTU19FQUNDRVNfT0spKQorCQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIHVzZXJfY29uZmlnLCBkYXRhKTsKKworCWN1cnJlbnRfcGFyc2luZ19zY29wZSA9IENPTkZJR19TQ09QRV9MT0NBTDsKKwlpZiAoIW9wdHMtPmlnbm9yZV9yZXBvICYmIHJlcG9fY29uZmlnICYmCisJICAgICFhY2Nlc3Nfb3JfZGllKHJlcG9fY29uZmlnLCBSX09LLCAwKSkKKwkJcmV0ICs9IGdpdF9jb25maWdfZnJvbV9maWxlKGZuLCByZXBvX2NvbmZpZywgZGF0YSk7CisKKwljdXJyZW50X3BhcnNpbmdfc2NvcGUgPSBDT05GSUdfU0NPUEVfV09SS1RSRUU7CisJaWYgKCFvcHRzLT5pZ25vcmVfd29ya3RyZWUgJiYgcmVwb3NpdG9yeV9mb3JtYXRfd29ya3RyZWVfY29uZmlnKSB7CisJCWNoYXIgKnBhdGggPSBnaXRfcGF0aGR1cCgiY29uZmlnLndvcmt0cmVlIik7CisJCWlmICghYWNjZXNzX29yX2RpZShwYXRoLCBSX09LLCAwKSkKKwkJCXJldCArPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgcGF0aCwgZGF0YSk7CisJCWZyZWUocGF0aCk7CisJfQorCisJY3VycmVudF9wYXJzaW5nX3Njb3BlID0gQ09ORklHX1NDT1BFX0NPTU1BTkQ7CisJaWYgKCFvcHRzLT5pZ25vcmVfY21kbGluZSAmJiBnaXRfY29uZmlnX2Zyb21fcGFyYW1ldGVycyhmbiwgZGF0YSkgPCAwKQorCQlkaWUoXygidW5hYmxlIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBjb25maWciKSk7CisKKwljdXJyZW50X3BhcnNpbmdfc2NvcGUgPSBwcmV2X3BhcnNpbmdfc2NvcGU7CisJZnJlZSh4ZGdfY29uZmlnKTsKKwlmcmVlKHVzZXJfY29uZmlnKTsKKwlmcmVlKHJlcG9fY29uZmlnKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY29uZmlnX3dpdGhfb3B0aW9ucyhjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBnaXRfY29uZmlnX3NvdXJjZSAqY29uZmlnX3NvdXJjZSwKKwkJCWNvbnN0IHN0cnVjdCBjb25maWdfb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgY29uZmlnX2luY2x1ZGVfZGF0YSBpbmMgPSBDT05GSUdfSU5DTFVERV9JTklUOworCisJaWYgKG9wdHMtPnJlc3BlY3RfaW5jbHVkZXMpIHsKKwkJaW5jLmZuID0gZm47CisJCWluYy5kYXRhID0gZGF0YTsKKwkJaW5jLm9wdHMgPSBvcHRzOworCQlmbiA9IGdpdF9jb25maWdfaW5jbHVkZTsKKwkJZGF0YSA9ICZpbmM7CisJfQorCisJaWYgKGNvbmZpZ19zb3VyY2UpCisJCWN1cnJlbnRfcGFyc2luZ19zY29wZSA9IGNvbmZpZ19zb3VyY2UtPnNjb3BlOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGEgc3BlY2lmaWMgZmlsZW5hbWUsIHVzZSBpdC4gT3RoZXJ3aXNlLCBmb2xsb3cgdGhlCisJICogcmVndWxhciBsb29rdXAgc2VxdWVuY2UuCisJICovCisJaWYgKGNvbmZpZ19zb3VyY2UgJiYgY29uZmlnX3NvdXJjZS0+dXNlX3N0ZGluKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19mcm9tX3N0ZGluKGZuLCBkYXRhKTsKKwllbHNlIGlmIChjb25maWdfc291cmNlICYmIGNvbmZpZ19zb3VyY2UtPmZpbGUpCisJCXJldHVybiBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgY29uZmlnX3NvdXJjZS0+ZmlsZSwgZGF0YSk7CisJZWxzZSBpZiAoY29uZmlnX3NvdXJjZSAmJiBjb25maWdfc291cmNlLT5ibG9iKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19mcm9tX2Jsb2JfcmVmKGZuLCBjb25maWdfc291cmNlLT5ibG9iLCBkYXRhKTsKKworCXJldHVybiBkb19naXRfY29uZmlnX3NlcXVlbmNlKG9wdHMsIGZuLCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgY29uZmlnc2V0X2l0ZXIoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaSwgdmFsdWVfaW5kZXg7CisJc3RydWN0IHN0cmluZ19saXN0ICp2YWx1ZXM7CisJc3RydWN0IGNvbmZpZ19zZXRfZWxlbWVudCAqZW50cnk7CisJc3RydWN0IGNvbmZpZ3NldF9saXN0ICpsaXN0ID0gJmNzLT5saXN0OworCisJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspIHsKKwkJZW50cnkgPSBsaXN0LT5pdGVtc1tpXS5lOworCQl2YWx1ZV9pbmRleCA9IGxpc3QtPml0ZW1zW2ldLnZhbHVlX2luZGV4OworCQl2YWx1ZXMgPSAmZW50cnktPnZhbHVlX2xpc3Q7CisKKwkJY3VycmVudF9jb25maWdfa3ZpID0gdmFsdWVzLT5pdGVtc1t2YWx1ZV9pbmRleF0udXRpbDsKKworCQlpZiAoZm4oZW50cnktPmtleSwgdmFsdWVzLT5pdGVtc1t2YWx1ZV9pbmRleF0uc3RyaW5nLCBkYXRhKSA8IDApCisJCQlnaXRfZGllX2NvbmZpZ19saW5lbnIoZW50cnktPmtleSwKKwkJCQkJICAgICAgY3VycmVudF9jb25maWdfa3ZpLT5maWxlbmFtZSwKKwkJCQkJICAgICAgY3VycmVudF9jb25maWdfa3ZpLT5saW5lbnIpOworCisJCWN1cnJlbnRfY29uZmlnX2t2aSA9IE5VTEw7CisJfQorfQorCit2b2lkIHJlYWRfZWFybHlfY29uZmlnKGNvbmZpZ19mbl90IGNiLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjb25maWdfb3B0aW9ucyBvcHRzID0gezB9OworCXN0cnVjdCBzdHJidWYgY29tbW9uZGlyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBnaXRkaXIgPSBTVFJCVUZfSU5JVDsKKworCW9wdHMucmVzcGVjdF9pbmNsdWRlcyA9IDE7CisKKwlpZiAoaGF2ZV9naXRfZGlyKCkpIHsKKwkJb3B0cy5jb21tb25kaXIgPSBnZXRfZ2l0X2NvbW1vbl9kaXIoKTsKKwkJb3B0cy5naXRfZGlyID0gZ2V0X2dpdF9kaXIoKTsKKwkvKgorCSAqIFdoZW4gc2V0dXBfZ2l0X2RpcmVjdG9yeSgpIHdhcyBub3QgeWV0IGFza2VkIHRvIGRpc2NvdmVyIHRoZQorCSAqIEdJVF9ESVIsIHdlIGFzayBkaXNjb3Zlcl9naXRfZGlyZWN0b3J5KCkgdG8gZmlndXJlIG91dCB3aGV0aGVyIHRoZXJlCisJICogaXMgYW55IHJlcG9zaXRvcnkgY29uZmlnIHdlIHNob3VsZCB1c2UgKGJ1dCB1bmxpa2UKKwkgKiBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgpLCBubyBnbG9iYWwgc3RhdGUgaXMgY2hhbmdlZCwgbW9zdAorCSAqIG5vdGFibHksIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHN0aWxsIHRoZSBzYW1lIGFmdGVyIHRoZQorCSAqIGNhbGwpLgorCSAqLworCX0gZWxzZSBpZiAoIWRpc2NvdmVyX2dpdF9kaXJlY3RvcnkoJmNvbW1vbmRpciwgJmdpdGRpcikpIHsKKwkJb3B0cy5jb21tb25kaXIgPSBjb21tb25kaXIuYnVmOworCQlvcHRzLmdpdF9kaXIgPSBnaXRkaXIuYnVmOworCX0KKworCWNvbmZpZ193aXRoX29wdGlvbnMoY2IsIGRhdGEsIE5VTEwsICZvcHRzKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZjb21tb25kaXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZnaXRkaXIpOworfQorCisvKgorICogUmVhZCBjb25maWcgYnV0IG9ubHkgZW51bWVyYXRlIHN5c3RlbSBhbmQgZ2xvYmFsIHNldHRpbmdzLgorICogT21pdCBhbnkgcmVwby1sb2NhbCwgd29ya3RyZWUtbG9jYWwsIG9yIGNvbW1hbmQtbGluZSBzZXR0aW5ncy4KKyAqLwordm9pZCByZWFkX3ZlcnlfZWFybHlfY29uZmlnKGNvbmZpZ19mbl90IGNiLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjb25maWdfb3B0aW9ucyBvcHRzID0geyAwIH07CisKKwlvcHRzLnJlc3BlY3RfaW5jbHVkZXMgPSAxOworCW9wdHMuaWdub3JlX3JlcG8gPSAxOworCW9wdHMuaWdub3JlX3dvcmt0cmVlID0gMTsKKwlvcHRzLmlnbm9yZV9jbWRsaW5lID0gMTsKKwlvcHRzLnN5c3RlbV9nZW50bHkgPSAxOworCisJY29uZmlnX3dpdGhfb3B0aW9ucyhjYiwgZGF0YSwgTlVMTCwgJm9wdHMpOworfQorCitzdGF0aWMgc3RydWN0IGNvbmZpZ19zZXRfZWxlbWVudCAqY29uZmlnc2V0X2ZpbmRfZWxlbWVudChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlzdHJ1Y3QgY29uZmlnX3NldF9lbGVtZW50IGs7CisJc3RydWN0IGNvbmZpZ19zZXRfZWxlbWVudCAqZm91bmRfZW50cnk7CisJY2hhciAqbm9ybWFsaXplZF9rZXk7CisJLyoKKwkgKiBga2V5YCBtYXkgY29tZSBmcm9tIHRoZSB1c2VyLCBzbyBub3JtYWxpemUgaXQgYmVmb3JlIHVzaW5nIGl0CisJICogZm9yIHF1ZXJ5aW5nIGVudHJpZXMgZnJvbSB0aGUgaGFzaG1hcC4KKwkgKi8KKwlpZiAoZ2l0X2NvbmZpZ19wYXJzZV9rZXkoa2V5LCAmbm9ybWFsaXplZF9rZXksIE5VTEwpKQorCQlyZXR1cm4gTlVMTDsKKworCWhhc2htYXBfZW50cnlfaW5pdCgmay5lbnQsIHN0cmhhc2gobm9ybWFsaXplZF9rZXkpKTsKKwlrLmtleSA9IG5vcm1hbGl6ZWRfa2V5OworCWZvdW5kX2VudHJ5ID0gaGFzaG1hcF9nZXRfZW50cnkoJmNzLT5jb25maWdfaGFzaCwgJmssIGVudCwgTlVMTCk7CisJZnJlZShub3JtYWxpemVkX2tleSk7CisJcmV0dXJuIGZvdW5kX2VudHJ5OworfQorCitzdGF0aWMgaW50IGNvbmZpZ3NldF9hZGRfdmFsdWUoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCBjb25maWdfc2V0X2VsZW1lbnQgKmU7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnNpOworCXN0cnVjdCBjb25maWdzZXRfbGlzdF9pdGVtICpsX2l0ZW07CisJc3RydWN0IGtleV92YWx1ZV9pbmZvICprdl9pbmZvID0geG1hbGxvYyhzaXplb2YoKmt2X2luZm8pKTsKKworCWUgPSBjb25maWdzZXRfZmluZF9lbGVtZW50KGNzLCBrZXkpOworCS8qCisJICogU2luY2UgdGhlIGtleXMgYXJlIGJlaW5nIGZlZCBieSBnaXRfY29uZmlnKigpIGNhbGxiYWNrIG1lY2hhbmlzbSwgdGhleQorCSAqIGFyZSBhbHJlYWR5IG5vcm1hbGl6ZWQuIFNvIHNpbXBseSBhZGQgdGhlbSB3aXRob3V0IGFueSBmdXJ0aGVyIG11bmdpbmcuCisJICovCisJaWYgKCFlKSB7CisJCWUgPSB4bWFsbG9jKHNpemVvZigqZSkpOworCQloYXNobWFwX2VudHJ5X2luaXQoJmUtPmVudCwgc3RyaGFzaChrZXkpKTsKKwkJZS0+a2V5ID0geHN0cmR1cChrZXkpOworCQlzdHJpbmdfbGlzdF9pbml0KCZlLT52YWx1ZV9saXN0LCAxKTsKKwkJaGFzaG1hcF9hZGQoJmNzLT5jb25maWdfaGFzaCwgJmUtPmVudCk7CisJfQorCXNpID0gc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKCZlLT52YWx1ZV9saXN0LCB4c3RyZHVwX29yX251bGwodmFsdWUpKTsKKworCUFMTE9DX0dST1coY3MtPmxpc3QuaXRlbXMsIGNzLT5saXN0Lm5yICsgMSwgY3MtPmxpc3QuYWxsb2MpOworCWxfaXRlbSA9ICZjcy0+bGlzdC5pdGVtc1tjcy0+bGlzdC5ucisrXTsKKwlsX2l0ZW0tPmUgPSBlOworCWxfaXRlbS0+dmFsdWVfaW5kZXggPSBlLT52YWx1ZV9saXN0Lm5yIC0gMTsKKworCWlmICghY2YpCisJCUJVRygiY29uZmlnc2V0X2FkZF92YWx1ZSBoYXMgbm8gc291cmNlIik7CisJaWYgKGNmLT5uYW1lKSB7CisJCWt2X2luZm8tPmZpbGVuYW1lID0gc3RyaW50ZXJuKGNmLT5uYW1lKTsKKwkJa3ZfaW5mby0+bGluZW5yID0gY2YtPmxpbmVucjsKKwkJa3ZfaW5mby0+b3JpZ2luX3R5cGUgPSBjZi0+b3JpZ2luX3R5cGU7CisJfSBlbHNlIHsKKwkJLyogZm9yIHZhbHVlcyByZWFkIGZyb20gYGdpdF9jb25maWdfZnJvbV9wYXJhbWV0ZXJzKClgICovCisJCWt2X2luZm8tPmZpbGVuYW1lID0gTlVMTDsKKwkJa3ZfaW5mby0+bGluZW5yID0gLTE7CisJCWt2X2luZm8tPm9yaWdpbl90eXBlID0gQ09ORklHX09SSUdJTl9DTURMSU5FOworCX0KKwlrdl9pbmZvLT5zY29wZSA9IGN1cnJlbnRfcGFyc2luZ19zY29wZTsKKwlzaS0+dXRpbCA9IGt2X2luZm87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb25maWdfc2V0X2VsZW1lbnRfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJCSAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCQkgIGNvbnN0IHZvaWQgKnVudXNlZF9rZXlkYXRhKQoreworCWNvbnN0IHN0cnVjdCBjb25maWdfc2V0X2VsZW1lbnQgKmUxLCAqZTI7CisKKwllMSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3QgY29uZmlnX3NldF9lbGVtZW50LCBlbnQpOworCWUyID0gY29udGFpbmVyX29mKGVudHJ5X29yX2tleSwgY29uc3Qgc3RydWN0IGNvbmZpZ19zZXRfZWxlbWVudCwgZW50KTsKKworCXJldHVybiBzdHJjbXAoZTEtPmtleSwgZTItPmtleSk7Cit9CisKK3ZvaWQgZ2l0X2NvbmZpZ3NldF9pbml0KHN0cnVjdCBjb25maWdfc2V0ICpjcykKK3sKKwloYXNobWFwX2luaXQoJmNzLT5jb25maWdfaGFzaCwgY29uZmlnX3NldF9lbGVtZW50X2NtcCwgTlVMTCwgMCk7CisJY3MtPmhhc2hfaW5pdGlhbGl6ZWQgPSAxOworCWNzLT5saXN0Lm5yID0gMDsKKwljcy0+bGlzdC5hbGxvYyA9IDA7CisJY3MtPmxpc3QuaXRlbXMgPSBOVUxMOworfQorCit2b2lkIGdpdF9jb25maWdzZXRfY2xlYXIoc3RydWN0IGNvbmZpZ19zZXQgKmNzKQoreworCXN0cnVjdCBjb25maWdfc2V0X2VsZW1lbnQgKmVudHJ5OworCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwlpZiAoIWNzLT5oYXNoX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KCZjcy0+Y29uZmlnX2hhc2gsICZpdGVyLCBlbnRyeSwKKwkJCQllbnQgLyogbWVtYmVyIG5hbWUgKi8pIHsKKwkJZnJlZShlbnRyeS0+a2V5KTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmVudHJ5LT52YWx1ZV9saXN0LCAxKTsKKwl9CisJaGFzaG1hcF9mcmVlX2VudHJpZXMoJmNzLT5jb25maWdfaGFzaCwgc3RydWN0IGNvbmZpZ19zZXRfZWxlbWVudCwgZW50KTsKKwljcy0+aGFzaF9pbml0aWFsaXplZCA9IDA7CisJZnJlZShjcy0+bGlzdC5pdGVtcyk7CisJY3MtPmxpc3QubnIgPSAwOworCWNzLT5saXN0LmFsbG9jID0gMDsKKwljcy0+bGlzdC5pdGVtcyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX3NldF9jYWxsYmFjayhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgY29uZmlnX3NldCAqY3MgPSBjYjsKKwljb25maWdzZXRfYWRkX3ZhbHVlKGNzLCBrZXksIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9jb25maWdzZXRfYWRkX2ZpbGUoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlyZXR1cm4gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoY29uZmlnX3NldF9jYWxsYmFjaywgZmlsZW5hbWUsIGNzKTsKK30KKworaW50IGdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqdmFsdWUpCit7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICp2YWx1ZXMgPSBOVUxMOworCS8qCisJICogRm9sbG93cyAibGFzdCBvbmUgd2lucyIgc2VtYW50aWMsIGkuZS4sIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBtYXRjaGVzIGZvciB0aGUKKwkgKiBxdWVyaWVkIGtleSBpbiB0aGUgZmlsZXMgb2YgdGhlIGNvbmZpZ3NldCwgdGhlIHZhbHVlIHJldHVybmVkIHdpbGwgYmUgdGhlIGxhc3QKKwkgKiB2YWx1ZSBpbiB0aGUgdmFsdWUgbGlzdCBmb3IgdGhhdCBrZXkuCisJICovCisJdmFsdWVzID0gZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWVfbXVsdGkoY3MsIGtleSk7CisKKwlpZiAoIXZhbHVlcykKKwkJcmV0dXJuIDE7CisJYXNzZXJ0KHZhbHVlcy0+bnIgPiAwKTsKKwkqdmFsdWUgPSB2YWx1ZXMtPml0ZW1zW3ZhbHVlcy0+bnIgLSAxXS5zdHJpbmc7CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWVfbXVsdGkoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXkpCit7CisJc3RydWN0IGNvbmZpZ19zZXRfZWxlbWVudCAqZSA9IGNvbmZpZ3NldF9maW5kX2VsZW1lbnQoY3MsIGtleSk7CisJcmV0dXJuIGUgPyAmZS0+dmFsdWVfbGlzdCA6IE5VTEw7Cit9CisKK2ludCBnaXRfY29uZmlnc2V0X2dldF9zdHJpbmdfY29uc3Qoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KQoreworCWNvbnN0IGNoYXIgKnZhbHVlOworCWlmICghZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWUoY3MsIGtleSwgJnZhbHVlKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKGRlc3QsIGtleSwgdmFsdWUpOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK2ludCBnaXRfY29uZmlnc2V0X2dldF9zdHJpbmcoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNoYXIgKipkZXN0KQoreworCXJldHVybiBnaXRfY29uZmlnc2V0X2dldF9zdHJpbmdfY29uc3QoY3MsIGtleSwgKGNvbnN0IGNoYXIgKiopZGVzdCk7Cit9CisKK2ludCBnaXRfY29uZmlnc2V0X2dldF9pbnQoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGludCAqZGVzdCkKK3sKKwljb25zdCBjaGFyICp2YWx1ZTsKKwlpZiAoIWdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlKGNzLCBrZXksICZ2YWx1ZSkpIHsKKwkJKmRlc3QgPSBnaXRfY29uZmlnX2ludChrZXksIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAxOworfQorCitpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfdWxvbmcoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcgKmRlc3QpCit7CisJY29uc3QgY2hhciAqdmFsdWU7CisJaWYgKCFnaXRfY29uZmlnc2V0X2dldF92YWx1ZShjcywga2V5LCAmdmFsdWUpKSB7CisJCSpkZXN0ID0gZ2l0X2NvbmZpZ191bG9uZyhrZXksIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAxOworfQorCitpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfYm9vbChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KQoreworCWNvbnN0IGNoYXIgKnZhbHVlOworCWlmICghZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWUoY3MsIGtleSwgJnZhbHVlKSkgeworCQkqZGVzdCA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAxOworfQorCitpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfYm9vbF9vcl9pbnQoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksCisJCQkJaW50ICppc19ib29sLCBpbnQgKmRlc3QpCit7CisJY29uc3QgY2hhciAqdmFsdWU7CisJaWYgKCFnaXRfY29uZmlnc2V0X2dldF92YWx1ZShjcywga2V5LCAmdmFsdWUpKSB7CisJCSpkZXN0ID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXksIHZhbHVlLCBpc19ib29sKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAxOworfQorCitpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfbWF5YmVfYm9vbChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KQoreworCWNvbnN0IGNoYXIgKnZhbHVlOworCWlmICghZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWUoY3MsIGtleSwgJnZhbHVlKSkgeworCQkqZGVzdCA9IGdpdF9wYXJzZV9tYXliZV9ib29sKHZhbHVlKTsKKwkJaWYgKCpkZXN0ID09IC0xKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK2ludCBnaXRfY29uZmlnc2V0X2dldF9wYXRobmFtZShzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpCit7CisJY29uc3QgY2hhciAqdmFsdWU7CisJaWYgKCFnaXRfY29uZmlnc2V0X2dldF92YWx1ZShjcywga2V5LCAmdmFsdWUpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZShkZXN0LCBrZXksIHZhbHVlKTsKKwllbHNlCisJCXJldHVybiAxOworfQorCisvKiBGdW5jdGlvbnMgdXNlIHRvIHJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGEgcmVwb3NpdG9yeSAqLworc3RhdGljIHZvaWQgcmVwb19yZWFkX2NvbmZpZyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbykKK3sKKwlzdHJ1Y3QgY29uZmlnX29wdGlvbnMgb3B0cyA9IHsgMCB9OworCisJb3B0cy5yZXNwZWN0X2luY2x1ZGVzID0gMTsKKwlvcHRzLmNvbW1vbmRpciA9IHJlcG8tPmNvbW1vbmRpcjsKKwlvcHRzLmdpdF9kaXIgPSByZXBvLT5naXRkaXI7CisKKwlpZiAoIXJlcG8tPmNvbmZpZykKKwkJcmVwby0+Y29uZmlnID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNvbmZpZ19zZXQpKTsKKwllbHNlCisJCWdpdF9jb25maWdzZXRfY2xlYXIocmVwby0+Y29uZmlnKTsKKworCWdpdF9jb25maWdzZXRfaW5pdChyZXBvLT5jb25maWcpOworCisJaWYgKGNvbmZpZ193aXRoX29wdGlvbnMoY29uZmlnX3NldF9jYWxsYmFjaywgcmVwby0+Y29uZmlnLCBOVUxMLCAmb3B0cykgPCAwKQorCQkvKgorCQkgKiBjb25maWdfd2l0aF9vcHRpb25zKCkgbm9ybWFsbHkgcmV0dXJucyBvbmx5CisJCSAqIHplcm8sIGFzIG1vc3QgZXJyb3JzIGFyZSBmYXRhbCwgYW5kCisJCSAqIG5vbi1mYXRhbCBwb3RlbnRpYWwgZXJyb3JzIGFyZSBndWFyZGVkIGJ5ICJpZiIKKwkJICogc3RhdGVtZW50cyB0aGF0IGFyZSBlbnRlcmVkIG9ubHkgd2hlbiBubyBlcnJvciBpcworCQkgKiBwb3NzaWJsZS4KKwkJICoKKwkJICogSWYgd2UgZXZlciBlbmNvdW50ZXIgYSBub24tZmF0YWwgZXJyb3IsIGl0IG1lYW5zCisJCSAqIHNvbWV0aGluZyB3ZW50IHJlYWxseSB3cm9uZyBhbmQgd2Ugc2hvdWxkIHN0b3AKKwkJICogaW1tZWRpYXRlbHkuCisJCSAqLworCQlkaWUoXygidW5rbm93biBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIikpOworfQorCitzdGF0aWMgdm9pZCBnaXRfY29uZmlnX2NoZWNrX2luaXQoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pCit7CisJaWYgKHJlcG8tPmNvbmZpZyAmJiByZXBvLT5jb25maWctPmhhc2hfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwlyZXBvX3JlYWRfY29uZmlnKHJlcG8pOworfQorCitzdGF0aWMgdm9pZCByZXBvX2NvbmZpZ19jbGVhcihzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbykKK3sKKwlpZiAoIXJlcG8tPmNvbmZpZyB8fCAhcmVwby0+Y29uZmlnLT5oYXNoX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisJZ2l0X2NvbmZpZ3NldF9jbGVhcihyZXBvLT5jb25maWcpOworfQorCit2b2lkIHJlcG9fY29uZmlnKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKK3sKKwlnaXRfY29uZmlnX2NoZWNrX2luaXQocmVwbyk7CisJY29uZmlnc2V0X2l0ZXIocmVwby0+Y29uZmlnLCBmbiwgZGF0YSk7Cit9CisKK2ludCByZXBvX2NvbmZpZ19nZXRfdmFsdWUoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKnZhbHVlKQoreworCWdpdF9jb25maWdfY2hlY2tfaW5pdChyZXBvKTsKKwlyZXR1cm4gZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWUocmVwby0+Y29uZmlnLCBrZXksIHZhbHVlKTsKK30KKworY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpyZXBvX2NvbmZpZ19nZXRfdmFsdWVfbXVsdGkoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkJCQkgICAgICBjb25zdCBjaGFyICprZXkpCit7CisJZ2l0X2NvbmZpZ19jaGVja19pbml0KHJlcG8pOworCXJldHVybiBnaXRfY29uZmlnc2V0X2dldF92YWx1ZV9tdWx0aShyZXBvLT5jb25maWcsIGtleSk7Cit9CisKK2ludCByZXBvX2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCSBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KQoreworCWludCByZXQ7CisJZ2l0X2NvbmZpZ19jaGVja19pbml0KHJlcG8pOworCXJldCA9IGdpdF9jb25maWdzZXRfZ2V0X3N0cmluZ19jb25zdChyZXBvLT5jb25maWcsIGtleSwgZGVzdCk7CisJaWYgKHJldCA8IDApCisJCWdpdF9kaWVfY29uZmlnKGtleSwgTlVMTCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHJlcG9fY29uZmlnX2dldF9zdHJpbmcoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICBjb25zdCBjaGFyICprZXksIGNoYXIgKipkZXN0KQoreworCWdpdF9jb25maWdfY2hlY2tfaW5pdChyZXBvKTsKKwlyZXR1cm4gcmVwb19jb25maWdfZ2V0X3N0cmluZ19jb25zdChyZXBvLCBrZXksIChjb25zdCBjaGFyICoqKWRlc3QpOworfQorCitpbnQgcmVwb19jb25maWdfZ2V0X2ludChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCWNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KQoreworCWdpdF9jb25maWdfY2hlY2tfaW5pdChyZXBvKTsKKwlyZXR1cm4gZ2l0X2NvbmZpZ3NldF9nZXRfaW50KHJlcG8tPmNvbmZpZywga2V5LCBkZXN0KTsKK30KKworaW50IHJlcG9fY29uZmlnX2dldF91bG9uZyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgY29uc3QgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICpkZXN0KQoreworCWdpdF9jb25maWdfY2hlY2tfaW5pdChyZXBvKTsKKwlyZXR1cm4gZ2l0X2NvbmZpZ3NldF9nZXRfdWxvbmcocmVwby0+Y29uZmlnLCBrZXksIGRlc3QpOworfQorCitpbnQgcmVwb19jb25maWdfZ2V0X2Jvb2woc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpCit7CisJZ2l0X2NvbmZpZ19jaGVja19pbml0KHJlcG8pOworCXJldHVybiBnaXRfY29uZmlnc2V0X2dldF9ib29sKHJlcG8tPmNvbmZpZywga2V5LCBkZXN0KTsKK30KKworaW50IHJlcG9fY29uZmlnX2dldF9ib29sX29yX2ludChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQljb25zdCBjaGFyICprZXksIGludCAqaXNfYm9vbCwgaW50ICpkZXN0KQoreworCWdpdF9jb25maWdfY2hlY2tfaW5pdChyZXBvKTsKKwlyZXR1cm4gZ2l0X2NvbmZpZ3NldF9nZXRfYm9vbF9vcl9pbnQocmVwby0+Y29uZmlnLCBrZXksIGlzX2Jvb2wsIGRlc3QpOworfQorCitpbnQgcmVwb19jb25maWdfZ2V0X21heWJlX2Jvb2woc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICAgICAgY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpCit7CisJZ2l0X2NvbmZpZ19jaGVja19pbml0KHJlcG8pOworCXJldHVybiBnaXRfY29uZmlnc2V0X2dldF9tYXliZV9ib29sKHJlcG8tPmNvbmZpZywga2V5LCBkZXN0KTsKK30KKworaW50IHJlcG9fY29uZmlnX2dldF9wYXRobmFtZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICAgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdCkKK3sKKwlpbnQgcmV0OworCWdpdF9jb25maWdfY2hlY2tfaW5pdChyZXBvKTsKKwlyZXQgPSBnaXRfY29uZmlnc2V0X2dldF9wYXRobmFtZShyZXBvLT5jb25maWcsIGtleSwgZGVzdCk7CisJaWYgKHJldCA8IDApCisJCWdpdF9kaWVfY29uZmlnKGtleSwgTlVMTCk7CisJcmV0dXJuIHJldDsKK30KKworLyogRnVuY3Rpb25zIHVzZWQgaGlzdG9yaWNhbGx5IHRvIHJlYWQgY29uZmlndXJhdGlvbiBmcm9tICd0aGVfcmVwb3NpdG9yeScgKi8KK3ZvaWQgZ2l0X2NvbmZpZyhjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKK3sKKwlyZXBvX2NvbmZpZyh0aGVfcmVwb3NpdG9yeSwgZm4sIGRhdGEpOworfQorCit2b2lkIGdpdF9jb25maWdfY2xlYXIodm9pZCkKK3sKKwlyZXBvX2NvbmZpZ19jbGVhcih0aGVfcmVwb3NpdG9yeSk7Cit9CisKK2ludCBnaXRfY29uZmlnX2dldF92YWx1ZShjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKip2YWx1ZSkKK3sKKwlyZXR1cm4gcmVwb19jb25maWdfZ2V0X3ZhbHVlKHRoZV9yZXBvc2l0b3J5LCBrZXksIHZhbHVlKTsKK30KKworY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpnaXRfY29uZmlnX2dldF92YWx1ZV9tdWx0aShjb25zdCBjaGFyICprZXkpCit7CisJcmV0dXJuIHJlcG9fY29uZmlnX2dldF92YWx1ZV9tdWx0aSh0aGVfcmVwb3NpdG9yeSwga2V5KTsKK30KKworaW50IGdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KQoreworCXJldHVybiByZXBvX2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KHRoZV9yZXBvc2l0b3J5LCBrZXksIGRlc3QpOworfQorCitpbnQgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKGNvbnN0IGNoYXIgKmtleSwgY2hhciAqKmRlc3QpCit7CisJcmV0dXJuIHJlcG9fY29uZmlnX2dldF9zdHJpbmcodGhlX3JlcG9zaXRvcnksIGtleSwgZGVzdCk7Cit9CisKK2ludCBnaXRfY29uZmlnX2dldF9pbnQoY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpCit7CisJcmV0dXJuIHJlcG9fY29uZmlnX2dldF9pbnQodGhlX3JlcG9zaXRvcnksIGtleSwgZGVzdCk7Cit9CisKK2ludCBnaXRfY29uZmlnX2dldF91bG9uZyhjb25zdCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcgKmRlc3QpCit7CisJcmV0dXJuIHJlcG9fY29uZmlnX2dldF91bG9uZyh0aGVfcmVwb3NpdG9yeSwga2V5LCBkZXN0KTsKK30KKworaW50IGdpdF9jb25maWdfZ2V0X2Jvb2woY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpCit7CisJcmV0dXJuIHJlcG9fY29uZmlnX2dldF9ib29sKHRoZV9yZXBvc2l0b3J5LCBrZXksIGRlc3QpOworfQorCitpbnQgZ2l0X2NvbmZpZ19nZXRfYm9vbF9vcl9pbnQoY29uc3QgY2hhciAqa2V5LCBpbnQgKmlzX2Jvb2wsIGludCAqZGVzdCkKK3sKKwlyZXR1cm4gcmVwb19jb25maWdfZ2V0X2Jvb2xfb3JfaW50KHRoZV9yZXBvc2l0b3J5LCBrZXksIGlzX2Jvb2wsIGRlc3QpOworfQorCitpbnQgZ2l0X2NvbmZpZ19nZXRfbWF5YmVfYm9vbChjb25zdCBjaGFyICprZXksIGludCAqZGVzdCkKK3sKKwlyZXR1cm4gcmVwb19jb25maWdfZ2V0X21heWJlX2Jvb2wodGhlX3JlcG9zaXRvcnksIGtleSwgZGVzdCk7Cit9CisKK2ludCBnaXRfY29uZmlnX2dldF9wYXRobmFtZShjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KQoreworCXJldHVybiByZXBvX2NvbmZpZ19nZXRfcGF0aG5hbWUodGhlX3JlcG9zaXRvcnksIGtleSwgZGVzdCk7Cit9CisKK2ludCBnaXRfY29uZmlnX2dldF9leHBpcnkoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqb3V0cHV0KQoreworCWludCByZXQgPSBnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3Qoa2V5LCBvdXRwdXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJaWYgKHN0cmNtcCgqb3V0cHV0LCAibm93IikpIHsKKwkJdGltZXN0YW1wX3Qgbm93ID0gYXBwcm94aWRhdGUoIm5vdyIpOworCQlpZiAoYXBwcm94aWRhdGUoKm91dHB1dCkgPj0gbm93KQorCQkJZ2l0X2RpZV9jb25maWcoa2V5LCBfKCJJbnZhbGlkICVzOiAnJXMnIiksIGtleSwgKm91dHB1dCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBnaXRfY29uZmlnX2dldF9leHBpcnlfaW5fZGF5cyhjb25zdCBjaGFyICprZXksIHRpbWVzdGFtcF90ICpleHBpcnksIHRpbWVzdGFtcF90IG5vdykKK3sKKwljaGFyICpleHBpcnlfc3RyaW5nOworCWludG1heF90IGRheXM7CisJdGltZXN0YW1wX3Qgd2hlbjsKKworCWlmIChnaXRfY29uZmlnX2dldF9zdHJpbmcoa2V5LCAmZXhwaXJ5X3N0cmluZykpCisJCXJldHVybiAxOyAvKiBubyBzdWNoIHRoaW5nICovCisKKwlpZiAoZ2l0X3BhcnNlX3NpZ25lZChleHBpcnlfc3RyaW5nLCAmZGF5cywgbWF4aW11bV9zaWduZWRfdmFsdWVfb2ZfdHlwZShpbnQpKSkgeworCQljb25zdCBpbnQgc2NhbGUgPSA4NjQwMDsKKwkJKmV4cGlyeSA9IG5vdyAtIGRheXMgKiBzY2FsZTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFwYXJzZV9leHBpcnlfZGF0ZShleHBpcnlfc3RyaW5nLCAmd2hlbikpIHsKKwkJKmV4cGlyeSA9IHdoZW47CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7IC8qIHRoaW5nIGV4aXN0cyBidXQgY2Fubm90IGJlIHBhcnNlZCAqLworfQorCitpbnQgZ2l0X2NvbmZpZ19nZXRfc3BsaXRfaW5kZXgodm9pZCkKK3sKKwlpbnQgdmFsOworCisJaWYgKCFnaXRfY29uZmlnX2dldF9tYXliZV9ib29sKCJjb3JlLnNwbGl0aW5kZXgiLCAmdmFsKSkKKwkJcmV0dXJuIHZhbDsKKworCXJldHVybiAtMTsgLyogZGVmYXVsdCB2YWx1ZSAqLworfQorCitpbnQgZ2l0X2NvbmZpZ19nZXRfbWF4X3BlcmNlbnRfc3BsaXRfY2hhbmdlKHZvaWQpCit7CisJaW50IHZhbCA9IC0xOworCisJaWYgKCFnaXRfY29uZmlnX2dldF9pbnQoInNwbGl0aW5kZXgubWF4cGVyY2VudGNoYW5nZSIsICZ2YWwpKSB7CisJCWlmICgwIDw9IHZhbCAmJiB2YWwgPD0gMTAwKQorCQkJcmV0dXJuIHZhbDsKKworCQlyZXR1cm4gZXJyb3IoXygic3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIHZhbHVlICclZCcgIgorCQkJICAgICAgICJzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxMDAiKSwgdmFsKTsKKwl9CisKKwlyZXR1cm4gLTE7IC8qIGRlZmF1bHQgdmFsdWUgKi8KK30KKworaW50IGdpdF9jb25maWdfZ2V0X2ZzbW9uaXRvcih2b2lkKQoreworCWlmIChnaXRfY29uZmlnX2dldF9wYXRobmFtZSgiY29yZS5mc21vbml0b3IiLCAmY29yZV9mc21vbml0b3IpKQorCQljb3JlX2ZzbW9uaXRvciA9IGdldGVudigiR0lUX1RFU1RfRlNNT05JVE9SIik7CisKKwlpZiAoY29yZV9mc21vbml0b3IgJiYgISpjb3JlX2ZzbW9uaXRvcikKKwkJY29yZV9mc21vbml0b3IgPSBOVUxMOworCisJaWYgKGNvcmVfZnNtb25pdG9yKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitpbnQgZ2l0X2NvbmZpZ19nZXRfaW5kZXhfdGhyZWFkcyhpbnQgKmRlc3QpCit7CisJaW50IGlzX2Jvb2wsIHZhbDsKKworCXZhbCA9IGdpdF9lbnZfdWxvbmcoIkdJVF9URVNUX0lOREVYX1RIUkVBRFMiLCAwKTsKKwlpZiAodmFsKSB7CisJCSpkZXN0ID0gdmFsOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWdpdF9jb25maWdfZ2V0X2Jvb2xfb3JfaW50KCJpbmRleC50aHJlYWRzIiwgJmlzX2Jvb2wsICZ2YWwpKSB7CisJCWlmIChpc19ib29sKQorCQkJKmRlc3QgPSB2YWwgPyAwIDogMTsKKwkJZWxzZQorCQkJKmRlc3QgPSB2YWw7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitOT1JFVFVSTgordm9pZCBnaXRfZGllX2NvbmZpZ19saW5lbnIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVucikKK3sKKwlpZiAoIWZpbGVuYW1lKQorCQlkaWUoXygidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIiksIGtleSk7CisJZWxzZQorCQlkaWUoXygiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIiksCisJCSAgICBrZXksIGZpbGVuYW1lLCBsaW5lbnIpOworfQorCitOT1JFVFVSTiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpCit2b2lkIGdpdF9kaWVfY29uZmlnKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICp2YWx1ZXM7CisJc3RydWN0IGtleV92YWx1ZV9pbmZvICprdl9pbmZvOworCisJaWYgKGVycikgeworCQl2YV9saXN0IHBhcmFtczsKKwkJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCQl2cmVwb3J0ZigiZXJyb3I6ICIsIGVyciwgcGFyYW1zKTsKKwkJdmFfZW5kKHBhcmFtcyk7CisJfQorCXZhbHVlcyA9IGdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpKGtleSk7CisJa3ZfaW5mbyA9IHZhbHVlcy0+aXRlbXNbdmFsdWVzLT5uciAtIDFdLnV0aWw7CisJZ2l0X2RpZV9jb25maWdfbGluZW5yKGtleSwga3ZfaW5mby0+ZmlsZW5hbWUsIGt2X2luZm8tPmxpbmVucik7Cit9CisKKy8qCisgKiBGaW5kIGFsbCB0aGUgc3R1ZmYgZm9yIGdpdF9jb25maWdfc2V0KCkgYmVsb3cuCisgKi8KKworc3RydWN0IGNvbmZpZ19zdG9yZV9kYXRhIHsKKwlzaXplX3QgYmFzZWxlbjsKKwljaGFyICprZXk7CisJaW50IGRvX25vdF9tYXRjaDsKKwlyZWdleF90ICp2YWx1ZV9yZWdleDsKKwlpbnQgbXVsdGlfcmVwbGFjZTsKKwlzdHJ1Y3QgeworCQlzaXplX3QgYmVnaW4sIGVuZDsKKwkJZW51bSBjb25maWdfZXZlbnRfdCB0eXBlOworCQlpbnQgaXNfa2V5c19zZWN0aW9uOworCX0gKnBhcnNlZDsKKwl1bnNpZ25lZCBpbnQgcGFyc2VkX25yLCBwYXJzZWRfYWxsb2MsICpzZWVuLCBzZWVuX25yLCBzZWVuX2FsbG9jOworCXVuc2lnbmVkIGludCBrZXlfc2VlbjoxLCBzZWN0aW9uX3NlZW46MSwgaXNfa2V5c19zZWN0aW9uOjE7Cit9OworCitzdGF0aWMgdm9pZCBjb25maWdfc3RvcmVfZGF0YV9jbGVhcihzdHJ1Y3QgY29uZmlnX3N0b3JlX2RhdGEgKnN0b3JlKQoreworCWZyZWUoc3RvcmUtPmtleSk7CisJaWYgKHN0b3JlLT52YWx1ZV9yZWdleCAhPSBOVUxMICYmCisJICAgIHN0b3JlLT52YWx1ZV9yZWdleCAhPSBDT05GSUdfUkVHRVhfTk9ORSkgeworCQlyZWdmcmVlKHN0b3JlLT52YWx1ZV9yZWdleCk7CisJCWZyZWUoc3RvcmUtPnZhbHVlX3JlZ2V4KTsKKwl9CisJZnJlZShzdG9yZS0+cGFyc2VkKTsKKwlmcmVlKHN0b3JlLT5zZWVuKTsKKwltZW1zZXQoc3RvcmUsIDAsIHNpemVvZigqc3RvcmUpKTsKK30KKworc3RhdGljIGludCBtYXRjaGVzKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsCisJCSAgIGNvbnN0IHN0cnVjdCBjb25maWdfc3RvcmVfZGF0YSAqc3RvcmUpCit7CisJaWYgKHN0cmNtcChrZXksIHN0b3JlLT5rZXkpKQorCQlyZXR1cm4gMDsgLyogbm90IG91cnMgKi8KKwlpZiAoIXN0b3JlLT52YWx1ZV9yZWdleCkKKwkJcmV0dXJuIDE7IC8qIGFsd2F5cyBtYXRjaGVzICovCisJaWYgKHN0b3JlLT52YWx1ZV9yZWdleCA9PSBDT05GSUdfUkVHRVhfTk9ORSkKKwkJcmV0dXJuIDA7IC8qIG5ldmVyIG1hdGNoZXMgKi8KKworCXJldHVybiBzdG9yZS0+ZG9fbm90X21hdGNoIF4KKwkJKHZhbHVlICYmICFyZWdleGVjKHN0b3JlLT52YWx1ZV9yZWdleCwgdmFsdWUsIDAsIE5VTEwsIDApKTsKK30KKworc3RhdGljIGludCBzdG9yZV9hdXhfZXZlbnQoZW51bSBjb25maWdfZXZlbnRfdCB0eXBlLAorCQkJICAgc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjb25maWdfc3RvcmVfZGF0YSAqc3RvcmUgPSBkYXRhOworCisJQUxMT0NfR1JPVyhzdG9yZS0+cGFyc2VkLCBzdG9yZS0+cGFyc2VkX25yICsgMSwgc3RvcmUtPnBhcnNlZF9hbGxvYyk7CisJc3RvcmUtPnBhcnNlZFtzdG9yZS0+cGFyc2VkX25yXS5iZWdpbiA9IGJlZ2luOworCXN0b3JlLT5wYXJzZWRbc3RvcmUtPnBhcnNlZF9ucl0uZW5kID0gZW5kOworCXN0b3JlLT5wYXJzZWRbc3RvcmUtPnBhcnNlZF9ucl0udHlwZSA9IHR5cGU7CisKKwlpZiAodHlwZSA9PSBDT05GSUdfRVZFTlRfU0VDVElPTikgeworCQlpbnQgKCpjbXBmbikoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CisKKwkJaWYgKGNmLT52YXIubGVuIDwgMiB8fCBjZi0+dmFyLmJ1ZltjZi0+dmFyLmxlbiAtIDFdICE9ICcuJykKKwkJCXJldHVybiBlcnJvcihfKCJpbnZhbGlkIHNlY3Rpb24gbmFtZSAnJXMnIiksIGNmLT52YXIuYnVmKTsKKworCQlpZiAoY2YtPnN1YnNlY3Rpb25fY2FzZV9zZW5zaXRpdmUpCisJCQljbXBmbiA9IHN0cm5jYXNlY21wOworCQllbHNlCisJCQljbXBmbiA9IHN0cm5jbXA7CisKKwkJLyogSXMgdGhpcyB0aGUgc2VjdGlvbiB3ZSB3ZXJlIGxvb2tpbmcgZm9yPyAqLworCQlzdG9yZS0+aXNfa2V5c19zZWN0aW9uID0KKwkJCXN0b3JlLT5wYXJzZWRbc3RvcmUtPnBhcnNlZF9ucl0uaXNfa2V5c19zZWN0aW9uID0KKwkJCWNmLT52YXIubGVuIC0gMSA9PSBzdG9yZS0+YmFzZWxlbiAmJgorCQkJIWNtcGZuKGNmLT52YXIuYnVmLCBzdG9yZS0+a2V5LCBzdG9yZS0+YmFzZWxlbik7CisJCWlmIChzdG9yZS0+aXNfa2V5c19zZWN0aW9uKSB7CisJCQlzdG9yZS0+c2VjdGlvbl9zZWVuID0gMTsKKwkJCUFMTE9DX0dST1coc3RvcmUtPnNlZW4sIHN0b3JlLT5zZWVuX25yICsgMSwKKwkJCQkgICBzdG9yZS0+c2Vlbl9hbGxvYyk7CisJCQlzdG9yZS0+c2VlbltzdG9yZS0+c2Vlbl9ucl0gPSBzdG9yZS0+cGFyc2VkX25yOworCQl9CisJfQorCisJc3RvcmUtPnBhcnNlZF9ucisrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RvcmVfYXV4KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXN0cnVjdCBjb25maWdfc3RvcmVfZGF0YSAqc3RvcmUgPSBjYjsKKworCWlmIChzdG9yZS0+a2V5X3NlZW4pIHsKKwkJaWYgKG1hdGNoZXMoa2V5LCB2YWx1ZSwgc3RvcmUpKSB7CisJCQlpZiAoc3RvcmUtPnNlZW5fbnIgPT0gMSAmJiBzdG9yZS0+bXVsdGlfcmVwbGFjZSA9PSAwKSB7CisJCQkJd2FybmluZyhfKCIlcyBoYXMgbXVsdGlwbGUgdmFsdWVzIiksIGtleSk7CisJCQl9CisKKwkJCUFMTE9DX0dST1coc3RvcmUtPnNlZW4sIHN0b3JlLT5zZWVuX25yICsgMSwKKwkJCQkgICBzdG9yZS0+c2Vlbl9hbGxvYyk7CisKKwkJCXN0b3JlLT5zZWVuW3N0b3JlLT5zZWVuX25yXSA9IHN0b3JlLT5wYXJzZWRfbnI7CisJCQlzdG9yZS0+c2Vlbl9ucisrOworCQl9CisJfSBlbHNlIGlmIChzdG9yZS0+aXNfa2V5c19zZWN0aW9uKSB7CisJCS8qCisJCSAqIERvIG5vdCBpbmNyZW1lbnQgbWF0Y2hlcyB5ZXQ6IHRoaXMgbWF5IG5vdCBiZSBhIG1hdGNoLCBidXQgd2UKKwkJICogYXJlIGluIHRoZSBkZXNpcmVkIHNlY3Rpb24uCisJCSAqLworCQlBTExPQ19HUk9XKHN0b3JlLT5zZWVuLCBzdG9yZS0+c2Vlbl9uciArIDEsIHN0b3JlLT5zZWVuX2FsbG9jKTsKKwkJc3RvcmUtPnNlZW5bc3RvcmUtPnNlZW5fbnJdID0gc3RvcmUtPnBhcnNlZF9ucjsKKwkJc3RvcmUtPnNlY3Rpb25fc2VlbiA9IDE7CisKKwkJaWYgKG1hdGNoZXMoa2V5LCB2YWx1ZSwgc3RvcmUpKSB7CisJCQlzdG9yZS0+c2Vlbl9ucisrOworCQkJc3RvcmUtPmtleV9zZWVuID0gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX2Vycm9yKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWVycm9yKF8oImZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlICVzIiksIGZpbGVuYW1lKTsKKworCS8qIFNhbWUgZXJyb3IgY29kZSBhcyAiZmFpbGVkIHRvIHJlbmFtZSIuICovCisJcmV0dXJuIDQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHN0b3JlX2NyZWF0ZV9zZWN0aW9uKGNvbnN0IGNoYXIgKmtleSwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgY29uZmlnX3N0b3JlX2RhdGEgKnN0b3JlKQoreworCWNvbnN0IGNoYXIgKmRvdDsKKwlzaXplX3QgaTsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlkb3QgPSBtZW1jaHIoa2V5LCAnLicsIHN0b3JlLT5iYXNlbGVuKTsKKwlpZiAoZG90KSB7CisJCXN0cmJ1Zl9hZGRmKCZzYiwgIlslLipzIFwiIiwgKGludCkoZG90IC0ga2V5KSwga2V5KTsKKwkJZm9yIChpID0gZG90IC0ga2V5ICsgMTsgaSA8IHN0b3JlLT5iYXNlbGVuOyBpKyspIHsKKwkJCWlmIChrZXlbaV0gPT0gJyInIHx8IGtleVtpXSA9PSAnXFwnKQorCQkJCXN0cmJ1Zl9hZGRjaCgmc2IsICdcXCcpOworCQkJc3RyYnVmX2FkZGNoKCZzYiwga2V5W2ldKTsKKwkJfQorCQlzdHJidWZfYWRkc3RyKCZzYiwgIlwiXVxuIik7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZGNoKCZzYiwgJ1snKTsKKwkJc3RyYnVmX2FkZCgmc2IsIGtleSwgc3RvcmUtPmJhc2VsZW4pOworCQlzdHJidWZfYWRkc3RyKCZzYiwgIl1cbiIpOworCX0KKworCXJldHVybiBzYjsKK30KKworc3RhdGljIHNzaXplX3Qgd3JpdGVfc2VjdGlvbihpbnQgZmQsIGNvbnN0IGNoYXIgKmtleSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGNvbmZpZ19zdG9yZV9kYXRhICpzdG9yZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gc3RvcmVfY3JlYXRlX3NlY3Rpb24oa2V5LCBzdG9yZSk7CisJc3NpemVfdCByZXQ7CisKKwlyZXQgPSB3cml0ZV9pbl9mdWxsKGZkLCBzYi5idWYsIHNiLmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX3BhaXIoaW50IGZkLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkJICBjb25zdCBzdHJ1Y3QgY29uZmlnX3N0b3JlX2RhdGEgKnN0b3JlKQoreworCWludCBpOworCXNzaXplX3QgcmV0OworCWNvbnN0IGNoYXIgKnF1b3RlID0gIiI7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJLyoKKwkgKiBDaGVjayB0byBzZWUgaWYgdGhlIHZhbHVlIG5lZWRzIHRvIGJlIHN1cnJvdW5kZWQgd2l0aCBhIGRxIHBhaXIuCisJICogTm90ZSB0aGF0IHByb2JsZW1hdGljIGNoYXJhY3RlcnMgYXJlIGFsd2F5cyBiYWNrc2xhc2gtcXVvdGVkOyB0aGlzCisJICogY2hlY2sgaXMgYWJvdXQgbm90IGxvc2luZyBsZWFkaW5nIG9yIHRyYWlsaW5nIFNQIGFuZCBzdHJpbmdzIHRoYXQKKwkgKiBmb2xsb3cgYmVnaW5uaW5nLW9mLWNvbW1lbnQgY2hhcmFjdGVycyAoaS5lLiAnOycgYW5kICcjJykgYnkgdGhlCisJICogY29uZmlndXJhdGlvbiBwYXJzZXIuCisJICovCisJaWYgKHZhbHVlWzBdID09ICcgJykKKwkJcXVvdGUgPSAiXCIiOworCWZvciAoaSA9IDA7IHZhbHVlW2ldOyBpKyspCisJCWlmICh2YWx1ZVtpXSA9PSAnOycgfHwgdmFsdWVbaV0gPT0gJyMnKQorCQkJcXVvdGUgPSAiXCIiOworCWlmIChpICYmIHZhbHVlW2kgLSAxXSA9PSAnICcpCisJCXF1b3RlID0gIlwiIjsKKworCXN0cmJ1Zl9hZGRmKCZzYiwgIlx0JXMgPSAlcyIsIGtleSArIHN0b3JlLT5iYXNlbGVuICsgMSwgcXVvdGUpOworCisJZm9yIChpID0gMDsgdmFsdWVbaV07IGkrKykKKwkJc3dpdGNoICh2YWx1ZVtpXSkgeworCQljYXNlICdcbic6CisJCQlzdHJidWZfYWRkc3RyKCZzYiwgIlxcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgJ1x0JzoKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCAiXFx0Iik7CisJCQlicmVhazsKKwkJY2FzZSAnIic6CisJCWNhc2UgJ1xcJzoKKwkJCXN0cmJ1Zl9hZGRjaCgmc2IsICdcXCcpOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJZGVmYXVsdDoKKwkJCXN0cmJ1Zl9hZGRjaCgmc2IsIHZhbHVlW2ldKTsKKwkJCWJyZWFrOworCQl9CisJc3RyYnVmX2FkZGYoJnNiLCAiJXNcbiIsIHF1b3RlKTsKKworCXJldCA9IHdyaXRlX2luX2Z1bGwoZmQsIHNiLmJ1Ziwgc2IubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIElmIHdlIGFyZSBhYm91dCB0byB1bnNldCB0aGUgbGFzdCBrZXkocykgaW4gYSBzZWN0aW9uLCBhbmQgaWYgdGhlcmUgYXJlCisgKiBubyBjb21tZW50cyBzdXJyb3VuZGluZyAob3IgaW5jbHVkZWQgaW4pIHRoZSBzZWN0aW9uLCB3ZSB3aWxsIHdhbnQgdG8KKyAqIGV4dGVuZCBiZWdpbi9lbmQgdG8gcmVtb3ZlIHRoZSBlbnRpcmUgc2VjdGlvbi4KKyAqCisgKiBOb3RlOiB0aGUgcGFyYW1ldGVyIGBzZWVuX3B0cmAgcG9pbnRzIHRvIHRoZSBpbmRleCBpbnRvIHRoZSBzdG9yZS5zZWVuCisgKiBhcnJheS4gICogVGhpcyBpbmRleCBtYXkgYmUgaW5jcmVtZW50ZWQgaWYgYSBzZWN0aW9uIGhhcyBtb3JlIHRoYW4gb25lCisgKiBlbnRyeSAod2hpY2ggYWxsIGFyZSB0byBiZSByZW1vdmVkKS4KKyAqLworc3RhdGljIHZvaWQgbWF5YmVfcmVtb3ZlX3NlY3Rpb24oc3RydWN0IGNvbmZpZ19zdG9yZV9kYXRhICpzdG9yZSwKKwkJCQkgc2l6ZV90ICpiZWdpbl9vZmZzZXQsIHNpemVfdCAqZW5kX29mZnNldCwKKwkJCQkgaW50ICpzZWVuX3B0cikKK3sKKwlzaXplX3QgYmVnaW47CisJaW50IGksIHNlZW4sIHNlY3Rpb25fc2VlbiA9IDA7CisKKwkvKgorCSAqIEZpcnN0LCBlbnN1cmUgdGhhdCB0aGlzIGlzIHRoZSBmaXJzdCBrZXksIGFuZCB0aGF0IHRoZXJlIGFyZSBubworCSAqIGNvbW1lbnRzIGJlZm9yZSB0aGUgZW50cnkgbm9yIGJlZm9yZSB0aGUgc2VjdGlvbiBoZWFkZXIuCisJICovCisJc2VlbiA9ICpzZWVuX3B0cjsKKwlmb3IgKGkgPSBzdG9yZS0+c2VlbltzZWVuXTsgaSA+IDA7IGktLSkgeworCQllbnVtIGNvbmZpZ19ldmVudF90IHR5cGUgPSBzdG9yZS0+cGFyc2VkW2kgLSAxXS50eXBlOworCisJCWlmICh0eXBlID09IENPTkZJR19FVkVOVF9DT01NRU5UKQorCQkJLyogVGhlcmUgaXMgYSBjb21tZW50IGJlZm9yZSB0aGlzIGVudHJ5IG9yIHNlY3Rpb24gKi8KKwkJCXJldHVybjsKKwkJaWYgKHR5cGUgPT0gQ09ORklHX0VWRU5UX0VOVFJZKSB7CisJCQlpZiAoIXNlY3Rpb25fc2VlbikKKwkJCQkvKiBUaGlzIGlzIG5vdCB0aGUgc2VjdGlvbidzIGZpcnN0IGVudHJ5LiAqLworCQkJCXJldHVybjsKKwkJCS8qIFdlIGVuY291bnRlcmVkIG5vIGNvbW1lbnQgYmVmb3JlIHRoZSBzZWN0aW9uLiAqLworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHR5cGUgPT0gQ09ORklHX0VWRU5UX1NFQ1RJT04pIHsKKwkJCWlmICghc3RvcmUtPnBhcnNlZFtpIC0gMV0uaXNfa2V5c19zZWN0aW9uKQorCQkJCWJyZWFrOworCQkJc2VjdGlvbl9zZWVuID0gMTsKKwkJfQorCX0KKwliZWdpbiA9IHN0b3JlLT5wYXJzZWRbaV0uYmVnaW47CisKKwkvKgorCSAqIE5leHQsIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZSByZW1vdmluZyBoZSBsYXN0IGtleShzKSBpbiB0aGUgc2VjdGlvbiwKKwkgKiBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gY29tbWVudHMgdGhhdCBhcmUgcG9zc2libHkgYWJvdXQgdGhlIGN1cnJlbnQKKwkgKiBzZWN0aW9uLgorCSAqLworCWZvciAoaSA9IHN0b3JlLT5zZWVuW3NlZW5dICsgMTsgaSA8IHN0b3JlLT5wYXJzZWRfbnI7IGkrKykgeworCQllbnVtIGNvbmZpZ19ldmVudF90IHR5cGUgPSBzdG9yZS0+cGFyc2VkW2ldLnR5cGU7CisKKwkJaWYgKHR5cGUgPT0gQ09ORklHX0VWRU5UX0NPTU1FTlQpCisJCQlyZXR1cm47CisJCWlmICh0eXBlID09IENPTkZJR19FVkVOVF9TRUNUSU9OKSB7CisJCQlpZiAoc3RvcmUtPnBhcnNlZFtpXS5pc19rZXlzX3NlY3Rpb24pCisJCQkJY29udGludWU7CisJCQlicmVhazsKKwkJfQorCQlpZiAodHlwZSA9PSBDT05GSUdfRVZFTlRfRU5UUlkpIHsKKwkJCWlmICgrK3NlZW4gPCBzdG9yZS0+c2Vlbl9uciAmJgorCQkJICAgIGkgPT0gc3RvcmUtPnNlZW5bc2Vlbl0pCisJCQkJLyogV2Ugd2FudCB0byByZW1vdmUgdGhpcyBlbnRyeSwgdG9vICovCisJCQkJY29udGludWU7CisJCQkvKiBUaGVyZSBpcyBhbm90aGVyIGVudHJ5IGluIHRoaXMgc2VjdGlvbi4gKi8KKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qCisJICogV2UgYXJlIHJlYWxseSByZW1vdmluZyB0aGUgbGFzdCBlbnRyeS9lbnRyaWVzIGZyb20gdGhpcyBzZWN0aW9uLCBhbmQKKwkgKiB0aGVyZSBhcmUgbm8gZW5jbG9zZWQgb3Igc3Vycm91bmRpbmcgY29tbWVudHMuIFJlbW92ZSB0aGUgZW50aXJlLAorCSAqIG5vdy1lbXB0eSBzZWN0aW9uLgorCSAqLworCSpzZWVuX3B0ciA9IHNlZW47CisJKmJlZ2luX29mZnNldCA9IGJlZ2luOworCWlmIChpIDwgc3RvcmUtPnBhcnNlZF9ucikKKwkJKmVuZF9vZmZzZXQgPSBzdG9yZS0+cGFyc2VkW2ldLmJlZ2luOworCWVsc2UKKwkJKmVuZF9vZmZzZXQgPSBzdG9yZS0+cGFyc2VkW3N0b3JlLT5wYXJzZWRfbnIgLSAxXS5lbmQ7Cit9CisKK2ludCBnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShjb25zdCBjaGFyICpjb25maWdfZmlsZW5hbWUsCisJCQkJICBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlX2dlbnRseShjb25maWdfZmlsZW5hbWUsIGtleSwgdmFsdWUsIE5VTEwsIDApOworfQorCit2b2lkIGdpdF9jb25maWdfc2V0X2luX2ZpbGUoY29uc3QgY2hhciAqY29uZmlnX2ZpbGVuYW1lLAorCQkJICAgIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZShjb25maWdfZmlsZW5hbWUsIGtleSwgdmFsdWUsIE5VTEwsIDApOworfQorCitpbnQgZ2l0X2NvbmZpZ19zZXRfZ2VudGx5KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2dlbnRseShrZXksIHZhbHVlLCBOVUxMLCAwKTsKK30KKwordm9pZCBnaXRfY29uZmlnX3NldChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWdpdF9jb25maWdfc2V0X211bHRpdmFyKGtleSwgdmFsdWUsIE5VTEwsIDApOworCisJdHJhY2UyX2NtZF9zZXRfY29uZmlnKGtleSwgdmFsdWUpOworfQorCisvKgorICogSWYgdmFsdWU9PU5VTEwsIHVuc2V0IGluIChyZW1vdmUgZnJvbSkgY29uZmlnLAorICogaWYgdmFsdWVfcmVnZXghPU5VTEwsIGRpc3JlZ2FyZCBrZXkvdmFsdWUgcGFpcnMgd2hlcmUgdmFsdWUgZG9lcyBub3QgbWF0Y2guCisgKiBpZiB2YWx1ZV9yZWdleD09Q09ORklHX1JFR0VYX05PTkUsIGRvIG5vdCBtYXRjaCBhbnkgZXhpc3RpbmcgdmFsdWVzCisgKiAgICAgKG9ubHkgYWRkIGEgbmV3IG9uZSkKKyAqIGlmIG11bHRpX3JlcGxhY2U9PTAsIG5vdGhpbmcsIG9yIG9ubHkgb25lIG1hdGNoaW5nIGtleS92YWx1ZSBpcyByZXBsYWNlZCwKKyAqICAgICBlbHNlIGFsbCBtYXRjaGluZyBrZXkvdmFsdWVzIChyZWdhcmRsZXNzIGhvdyBtYW55KSBhcmUgcmVtb3ZlZCwKKyAqICAgICBiZWZvcmUgdGhlIG5ldyBwYWlyIGlzIHdyaXR0ZW4uCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIHRoaXM6CisgKgorICogLSBpdCBsb2NrcyB0aGUgY29uZmlnIGZpbGUgYnkgY3JlYXRpbmcgIi5naXQvY29uZmlnLmxvY2siCisgKgorICogLSBpdCB0aGVuIHBhcnNlcyB0aGUgY29uZmlnIHVzaW5nIHN0b3JlX2F1eCgpIGFzIHZhbGlkYXRvciB0byBmaW5kCisgKiAgIHRoZSBwb3NpdGlvbiBvbiB0aGUga2V5L3ZhbHVlIHBhaXIgdG8gcmVwbGFjZS4gSWYgaXQgaXMgdG8gYmUgdW5zZXQsCisgKiAgIGl0IG11c3QgYmUgZm91bmQgZXhhY3RseSBvbmNlLgorICoKKyAqIC0gdGhlIGNvbmZpZyBmaWxlIGlzIG1tYXAoKWVkIGFuZCB0aGUgcGFydCBiZWZvcmUgdGhlIG1hdGNoIChpZiBhbnkpIGlzCisgKiAgIHdyaXR0ZW4gdG8gdGhlIGxvY2sgZmlsZSwgdGhlbiB0aGUgY2hhbmdlZCBwYXJ0IGFuZCB0aGUgcmVzdC4KKyAqCisgKiAtIHRoZSBjb25maWcgZmlsZSBpcyByZW1vdmVkIGFuZCB0aGUgbG9jayBmaWxlIHJlbmFtZSgpZCB0byBpdC4KKyAqCisgKi8KK2ludCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlX2dlbnRseShjb25zdCBjaGFyICpjb25maWdfZmlsZW5hbWUsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsCisJCQkJCSAgIGNvbnN0IGNoYXIgKnZhbHVlX3JlZ2V4LAorCQkJCQkgICBpbnQgbXVsdGlfcmVwbGFjZSkKK3sKKwlpbnQgZmQgPSAtMSwgaW5fZmQgPSAtMTsKKwlpbnQgcmV0OworCXN0cnVjdCBsb2NrX2ZpbGUgbG9jayA9IExPQ0tfSU5JVDsKKwljaGFyICpmaWxlbmFtZV9idWYgPSBOVUxMOworCWNoYXIgKmNvbnRlbnRzID0gTlVMTDsKKwlzaXplX3QgY29udGVudHNfc3o7CisJc3RydWN0IGNvbmZpZ19zdG9yZV9kYXRhIHN0b3JlOworCisJbWVtc2V0KCZzdG9yZSwgMCwgc2l6ZW9mKHN0b3JlKSk7CisKKwkvKiBwYXJzZS1rZXkgcmV0dXJucyBuZWdhdGl2ZTsgZmxpcCB0aGUgc2lnbiB0byBmZWVkIGV4aXQoMykgKi8KKwlyZXQgPSAwIC0gZ2l0X2NvbmZpZ19wYXJzZV9rZXkoa2V5LCAmc3RvcmUua2V5LCAmc3RvcmUuYmFzZWxlbik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZTsKKworCXN0b3JlLm11bHRpX3JlcGxhY2UgPSBtdWx0aV9yZXBsYWNlOworCisJaWYgKCFjb25maWdfZmlsZW5hbWUpCisJCWNvbmZpZ19maWxlbmFtZSA9IGZpbGVuYW1lX2J1ZiA9IGdpdF9wYXRoZHVwKCJjb25maWciKTsKKworCS8qCisJICogVGhlIGxvY2sgc2VydmVzIGEgcHVycG9zZSBpbiBhZGRpdGlvbiB0byBsb2NraW5nOiB0aGUgbmV3CisJICogY29udGVudHMgb2YgLmdpdC9jb25maWcgd2lsbCBiZSB3cml0dGVuIGludG8gaXQuCisJICovCisJZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2NrLCBjb25maWdfZmlsZW5hbWUsIDApOworCWlmIChmZCA8IDApIHsKKwkJZXJyb3JfZXJybm8oXygiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXMiKSwgY29uZmlnX2ZpbGVuYW1lKTsKKwkJcmV0ID0gQ09ORklHX05PX0xPQ0s7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJLyoKKwkgKiBJZiAuZ2l0L2NvbmZpZyBkb2VzIG5vdCBleGlzdCB5ZXQsIHdyaXRlIGEgbWluaW1hbCB2ZXJzaW9uLgorCSAqLworCWluX2ZkID0gb3Blbihjb25maWdfZmlsZW5hbWUsIE9fUkRPTkxZKTsKKwlpZiAoIGluX2ZkIDwgMCApIHsKKwkJaWYgKCBFTk9FTlQgIT0gZXJybm8gKSB7CisJCQllcnJvcl9lcnJubyhfKCJvcGVuaW5nICVzIiksIGNvbmZpZ19maWxlbmFtZSk7CisJCQlyZXQgPSBDT05GSUdfSU5WQUxJRF9GSUxFOyAvKiBzYW1lIGFzICJpbnZhbGlkIGNvbmZpZyBmaWxlIiAqLworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCQkvKiBpZiBub3RoaW5nIHRvIHVuc2V0LCBlcnJvciBvdXQgKi8KKwkJaWYgKHZhbHVlID09IE5VTEwpIHsKKwkJCXJldCA9IENPTkZJR19OT1RISU5HX1NFVDsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKworCQlmcmVlKHN0b3JlLmtleSk7CisJCXN0b3JlLmtleSA9IHhzdHJkdXAoa2V5KTsKKwkJaWYgKHdyaXRlX3NlY3Rpb24oZmQsIGtleSwgJnN0b3JlKSA8IDAgfHwKKwkJICAgIHdyaXRlX3BhaXIoZmQsIGtleSwgdmFsdWUsICZzdG9yZSkgPCAwKQorCQkJZ290byB3cml0ZV9lcnJfb3V0OworCX0gZWxzZSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQlzaXplX3QgY29weV9iZWdpbiwgY29weV9lbmQ7CisJCWludCBpLCBuZXdfbGluZSA9IDA7CisJCXN0cnVjdCBjb25maWdfb3B0aW9ucyBvcHRzOworCisJCWlmICh2YWx1ZV9yZWdleCA9PSBOVUxMKQorCQkJc3RvcmUudmFsdWVfcmVnZXggPSBOVUxMOworCQllbHNlIGlmICh2YWx1ZV9yZWdleCA9PSBDT05GSUdfUkVHRVhfTk9ORSkKKwkJCXN0b3JlLnZhbHVlX3JlZ2V4ID0gQ09ORklHX1JFR0VYX05PTkU7CisJCWVsc2UgeworCQkJaWYgKHZhbHVlX3JlZ2V4WzBdID09ICchJykgeworCQkJCXN0b3JlLmRvX25vdF9tYXRjaCA9IDE7CisJCQkJdmFsdWVfcmVnZXgrKzsKKwkJCX0gZWxzZQorCQkJCXN0b3JlLmRvX25vdF9tYXRjaCA9IDA7CisKKwkJCXN0b3JlLnZhbHVlX3JlZ2V4ID0gKHJlZ2V4X3QqKXhtYWxsb2Moc2l6ZW9mKHJlZ2V4X3QpKTsKKwkJCWlmIChyZWdjb21wKHN0b3JlLnZhbHVlX3JlZ2V4LCB2YWx1ZV9yZWdleCwKKwkJCQkJUkVHX0VYVEVOREVEKSkgeworCQkJCWVycm9yKF8oImludmFsaWQgcGF0dGVybjogJXMiKSwgdmFsdWVfcmVnZXgpOworCQkJCUZSRUVfQU5EX05VTEwoc3RvcmUudmFsdWVfcmVnZXgpOworCQkJCXJldCA9IENPTkZJR19JTlZBTElEX1BBVFRFUk47CisJCQkJZ290byBvdXRfZnJlZTsKKwkJCX0KKwkJfQorCisJCUFMTE9DX0dST1coc3RvcmUucGFyc2VkLCAxLCBzdG9yZS5wYXJzZWRfYWxsb2MpOworCQlzdG9yZS5wYXJzZWRbMF0uZW5kID0gMDsKKworCQltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJCW9wdHMuZXZlbnRfZm4gPSBzdG9yZV9hdXhfZXZlbnQ7CisJCW9wdHMuZXZlbnRfZm5fZGF0YSA9ICZzdG9yZTsKKworCQkvKgorCQkgKiBBZnRlciB0aGlzLCBzdG9yZS5wYXJzZWQgd2lsbCBjb250YWluIG9mZnNldHMgb2YgYWxsIHRoZQorCQkgKiBwYXJzZWQgZWxlbWVudHMsIGFuZCBzdG9yZS5zZWVuIHdpbGwgY29udGFpbiBhIGxpc3Qgb2YKKwkJICogbWF0Y2hlcywgYXMgaW5kaWNlcyBpbnRvIHN0b3JlLnBhcnNlZC4KKwkJICoKKwkJICogQXMgYSBzaWRlIGVmZmVjdCwgd2UgbWFrZSBzdXJlIHRvIHRyYW5zZm9ybSBvbmx5IGEgdmFsaWQKKwkJICogZXhpc3RpbmcgY29uZmlnIGZpbGUuCisJCSAqLworCQlpZiAoZ2l0X2NvbmZpZ19mcm9tX2ZpbGVfd2l0aF9vcHRpb25zKHN0b3JlX2F1eCwKKwkJCQkJCSAgICAgIGNvbmZpZ19maWxlbmFtZSwKKwkJCQkJCSAgICAgICZzdG9yZSwgJm9wdHMpKSB7CisJCQllcnJvcihfKCJpbnZhbGlkIGNvbmZpZyBmaWxlICVzIiksIGNvbmZpZ19maWxlbmFtZSk7CisJCQlyZXQgPSBDT05GSUdfSU5WQUxJRF9GSUxFOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCisJCS8qIGlmIG5vdGhpbmcgdG8gdW5zZXQsIG9yIHRvbyBtYW55IG1hdGNoZXMsIGVycm9yIG91dCAqLworCQlpZiAoKHN0b3JlLnNlZW5fbnIgPT0gMCAmJiB2YWx1ZSA9PSBOVUxMKSB8fAorCQkgICAgKHN0b3JlLnNlZW5fbnIgPiAxICYmIG11bHRpX3JlcGxhY2UgPT0gMCkpIHsKKwkJCXJldCA9IENPTkZJR19OT1RISU5HX1NFVDsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKworCQlpZiAoZnN0YXQoaW5fZmQsICZzdCkgPT0gLTEpIHsKKwkJCWVycm9yX2Vycm5vKF8oImZzdGF0IG9uICVzIGZhaWxlZCIpLCBjb25maWdfZmlsZW5hbWUpOworCQkJcmV0ID0gQ09ORklHX0lOVkFMSURfRklMRTsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKworCQljb250ZW50c19zeiA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisJCWNvbnRlbnRzID0geG1tYXBfZ2VudGx5KE5VTEwsIGNvbnRlbnRzX3N6LCBQUk9UX1JFQUQsCisJCQkJCU1BUF9QUklWQVRFLCBpbl9mZCwgMCk7CisJCWlmIChjb250ZW50cyA9PSBNQVBfRkFJTEVEKSB7CisJCQlpZiAoZXJybm8gPT0gRU5PREVWICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQkJZXJybm8gPSBFSVNESVI7CisJCQllcnJvcl9lcnJubyhfKCJ1bmFibGUgdG8gbW1hcCAnJXMnIiksIGNvbmZpZ19maWxlbmFtZSk7CisJCQlyZXQgPSBDT05GSUdfSU5WQUxJRF9GSUxFOworCQkJY29udGVudHMgPSBOVUxMOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCQljbG9zZShpbl9mZCk7CisJCWluX2ZkID0gLTE7CisKKwkJaWYgKGNobW9kKGdldF9sb2NrX2ZpbGVfcGF0aCgmbG9jayksIHN0LnN0X21vZGUgJiAwNzc3NykgPCAwKSB7CisJCQllcnJvcl9lcnJubyhfKCJjaG1vZCBvbiAlcyBmYWlsZWQiKSwgZ2V0X2xvY2tfZmlsZV9wYXRoKCZsb2NrKSk7CisJCQlyZXQgPSBDT05GSUdfTk9fV1JJVEU7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwkJaWYgKHN0b3JlLnNlZW5fbnIgPT0gMCkgeworCQkJaWYgKCFzdG9yZS5zZWVuX2FsbG9jKSB7CisJCQkJLyogRGlkIG5vdCBzZWUga2V5IG5vciBzZWN0aW9uICovCisJCQkJQUxMT0NfR1JPVyhzdG9yZS5zZWVuLCAxLCBzdG9yZS5zZWVuX2FsbG9jKTsKKwkJCQlzdG9yZS5zZWVuWzBdID0gc3RvcmUucGFyc2VkX25yCisJCQkJCS0gISFzdG9yZS5wYXJzZWRfbnI7CisJCQl9CisJCQlzdG9yZS5zZWVuX25yID0gMTsKKwkJfQorCisJCWZvciAoaSA9IDAsIGNvcHlfYmVnaW4gPSAwOyBpIDwgc3RvcmUuc2Vlbl9ucjsgaSsrKSB7CisJCQlzaXplX3QgcmVwbGFjZV9lbmQ7CisJCQlpbnQgaiA9IHN0b3JlLnNlZW5baV07CisKKwkJCW5ld19saW5lID0gMDsKKwkJCWlmICghc3RvcmUua2V5X3NlZW4pIHsKKwkJCQljb3B5X2VuZCA9IHN0b3JlLnBhcnNlZFtqXS5lbmQ7CisJCQkJLyogaW5jbHVkZSAnXG4nIHdoZW4gY29weWluZyBzZWN0aW9uIGhlYWRlciAqLworCQkJCWlmIChjb3B5X2VuZCA+IDAgJiYgY29weV9lbmQgPCBjb250ZW50c19zeiAmJgorCQkJCSAgICBjb250ZW50c1tjb3B5X2VuZCAtIDFdICE9ICdcbicgJiYKKwkJCQkgICAgY29udGVudHNbY29weV9lbmRdID09ICdcbicpCisJCQkJCWNvcHlfZW5kKys7CisJCQkJcmVwbGFjZV9lbmQgPSBjb3B5X2VuZDsKKwkJCX0gZWxzZSB7CisJCQkJcmVwbGFjZV9lbmQgPSBzdG9yZS5wYXJzZWRbal0uZW5kOworCQkJCWNvcHlfZW5kID0gc3RvcmUucGFyc2VkW2pdLmJlZ2luOworCQkJCWlmICghdmFsdWUpCisJCQkJCW1heWJlX3JlbW92ZV9zZWN0aW9uKCZzdG9yZSwKKwkJCQkJCQkgICAgICZjb3B5X2VuZCwKKwkJCQkJCQkgICAgICZyZXBsYWNlX2VuZCwgJmkpOworCQkJCS8qCisJCQkJICogU3dhbGxvdyBwcmVjZWRpbmcgd2hpdGUtc3BhY2Ugb24gdGhlIHNhbWUKKwkJCQkgKiBsaW5lLgorCQkJCSAqLworCQkJCXdoaWxlIChjb3B5X2VuZCA+IDAgKSB7CisJCQkJCWNoYXIgYyA9IGNvbnRlbnRzW2NvcHlfZW5kIC0gMV07CisKKwkJCQkJaWYgKGlzc3BhY2UoYykgJiYgYyAhPSAnXG4nKQorCQkJCQkJY29weV9lbmQtLTsKKwkJCQkJZWxzZQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoY29weV9lbmQgPiAwICYmIGNvbnRlbnRzW2NvcHlfZW5kLTFdICE9ICdcbicpCisJCQkJbmV3X2xpbmUgPSAxOworCisJCQkvKiB3cml0ZSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgY29uZmlnICovCisJCQlpZiAoY29weV9lbmQgPiBjb3B5X2JlZ2luKSB7CisJCQkJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGNvbnRlbnRzICsgY29weV9iZWdpbiwKKwkJCQkJCSAgY29weV9lbmQgLSBjb3B5X2JlZ2luKSA8IDApCisJCQkJCWdvdG8gd3JpdGVfZXJyX291dDsKKwkJCQlpZiAobmV3X2xpbmUgJiYKKwkJCQkgICAgd3JpdGVfc3RyX2luX2Z1bGwoZmQsICJcbiIpIDwgMCkKKwkJCQkJZ290byB3cml0ZV9lcnJfb3V0OworCQkJfQorCQkJY29weV9iZWdpbiA9IHJlcGxhY2VfZW5kOworCQl9CisKKwkJLyogd3JpdGUgdGhlIHBhaXIgKHZhbHVlID09IE5VTEwgbWVhbnMgdW5zZXQpICovCisJCWlmICh2YWx1ZSAhPSBOVUxMKSB7CisJCQlpZiAoIXN0b3JlLnNlY3Rpb25fc2VlbikgeworCQkJCWlmICh3cml0ZV9zZWN0aW9uKGZkLCBrZXksICZzdG9yZSkgPCAwKQorCQkJCQlnb3RvIHdyaXRlX2Vycl9vdXQ7CisJCQl9CisJCQlpZiAod3JpdGVfcGFpcihmZCwga2V5LCB2YWx1ZSwgJnN0b3JlKSA8IDApCisJCQkJZ290byB3cml0ZV9lcnJfb3V0OworCQl9CisKKwkJLyogd3JpdGUgdGhlIHJlc3Qgb2YgdGhlIGNvbmZpZyAqLworCQlpZiAoY29weV9iZWdpbiA8IGNvbnRlbnRzX3N6KQorCQkJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGNvbnRlbnRzICsgY29weV9iZWdpbiwKKwkJCQkJICBjb250ZW50c19zeiAtIGNvcHlfYmVnaW4pIDwgMCkKKwkJCQlnb3RvIHdyaXRlX2Vycl9vdXQ7CisKKwkJbXVubWFwKGNvbnRlbnRzLCBjb250ZW50c19zeik7CisJCWNvbnRlbnRzID0gTlVMTDsKKwl9CisKKwlpZiAoY29tbWl0X2xvY2tfZmlsZSgmbG9jaykgPCAwKSB7CisJCWVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSBjb25maWcgZmlsZSAlcyIpLCBjb25maWdfZmlsZW5hbWUpOworCQlyZXQgPSBDT05GSUdfTk9fV1JJVEU7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJcmV0ID0gMDsKKworCS8qIEludmFsaWRhdGUgdGhlIGNvbmZpZyBjYWNoZSAqLworCWdpdF9jb25maWdfY2xlYXIoKTsKKworb3V0X2ZyZWU6CisJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwlmcmVlKGZpbGVuYW1lX2J1Zik7CisJaWYgKGNvbnRlbnRzKQorCQltdW5tYXAoY29udGVudHMsIGNvbnRlbnRzX3N6KTsKKwlpZiAoaW5fZmQgPj0gMCkKKwkJY2xvc2UoaW5fZmQpOworCWNvbmZpZ19zdG9yZV9kYXRhX2NsZWFyKCZzdG9yZSk7CisJcmV0dXJuIHJldDsKKword3JpdGVfZXJyX291dDoKKwlyZXQgPSB3cml0ZV9lcnJvcihnZXRfbG9ja19maWxlX3BhdGgoJmxvY2spKTsKKwlnb3RvIG91dF9mcmVlOworCit9CisKK3ZvaWQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZShjb25zdCBjaGFyICpjb25maWdfZmlsZW5hbWUsCisJCQkJICAgICBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkJCSAgICAgY29uc3QgY2hhciAqdmFsdWVfcmVnZXgsIGludCBtdWx0aV9yZXBsYWNlKQoreworCWlmICghZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZV9nZW50bHkoY29uZmlnX2ZpbGVuYW1lLCBrZXksIHZhbHVlLAorCQkJCQkJICAgIHZhbHVlX3JlZ2V4LCBtdWx0aV9yZXBsYWNlKSkKKwkJcmV0dXJuOworCWlmICh2YWx1ZSkKKwkJZGllKF8oImNvdWxkIG5vdCBzZXQgJyVzJyB0byAnJXMnIiksIGtleSwgdmFsdWUpOworCWVsc2UKKwkJZGllKF8oImNvdWxkIG5vdCB1bnNldCAnJXMnIiksIGtleSk7Cit9CisKK2ludCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9nZW50bHkoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCQkgICBjb25zdCBjaGFyICp2YWx1ZV9yZWdleCwgaW50IG11bHRpX3JlcGxhY2UpCit7CisJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGVfZ2VudGx5KE5VTEwsIGtleSwgdmFsdWUsIHZhbHVlX3JlZ2V4LAorCQkJCQkJICAgICAgbXVsdGlfcmVwbGFjZSk7Cit9CisKK3ZvaWQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCSAgICAgY29uc3QgY2hhciAqdmFsdWVfcmVnZXgsIGludCBtdWx0aV9yZXBsYWNlKQoreworCWdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGUoTlVMTCwga2V5LCB2YWx1ZSwgdmFsdWVfcmVnZXgsCisJCQkJCW11bHRpX3JlcGxhY2UpOworfQorCitzdGF0aWMgaW50IHNlY3Rpb25fbmFtZV9tYXRjaCAoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICpuYW1lKQoreworCWludCBpID0gMCwgaiA9IDAsIGRvdCA9IDA7CisJaWYgKGJ1ZltpXSAhPSAnWycpCisJCXJldHVybiAwOworCWZvciAoaSA9IDE7IGJ1ZltpXSAmJiBidWZbaV0gIT0gJ10nOyBpKyspIHsKKwkJaWYgKCFkb3QgJiYgaXNzcGFjZShidWZbaV0pKSB7CisJCQlkb3QgPSAxOworCQkJaWYgKG5hbWVbaisrXSAhPSAnLicpCisJCQkJYnJlYWs7CisJCQlmb3IgKGkrKzsgaXNzcGFjZShidWZbaV0pOyBpKyspCisJCQkJOyAvKiBkbyBub3RoaW5nICovCisJCQlpZiAoYnVmW2ldICE9ICciJykKKwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChidWZbaV0gPT0gJ1xcJyAmJiBkb3QpCisJCQlpKys7CisJCWVsc2UgaWYgKGJ1ZltpXSA9PSAnIicgJiYgZG90KSB7CisJCQlmb3IgKGkrKzsgaXNzcGFjZShidWZbaV0pOyBpKyspCisJCQkJOyAvKiBkb19ub3RoaW5nICovCisJCQlicmVhazsKKwkJfQorCQlpZiAoYnVmW2ldICE9IG5hbWVbaisrXSkKKwkJCWJyZWFrOworCX0KKwlpZiAoYnVmW2ldID09ICddJyAmJiBuYW1lW2pdID09IDApIHsKKwkJLyoKKwkJICogV2UgbWF0Y2gsIG5vdyBqdXN0IGZpbmQgdGhlIHJpZ2h0IGxlbmd0aCBvZmZzZXQgYnkKKwkJICogZ29iYmxpbmcgdXAgYW55IHdoaXRlc3BhY2UgYWZ0ZXIgaXQsIGFzIHdlbGwKKwkJICovCisJCWkrKzsKKwkJZm9yICg7IGJ1ZltpXSAmJiBpc3NwYWNlKGJ1ZltpXSk7IGkrKykKKwkJCTsgLyogZG8gbm90aGluZyAqLworCQlyZXR1cm4gaTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2VjdGlvbl9uYW1lX2lzX29rKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJLyogRW1wdHkgc2VjdGlvbiBuYW1lcyBhcmUgYm9ndXMuICovCisJaWYgKCEqbmFtZSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIEJlZm9yZSBhIGRvdCwgd2UgbXVzdCBiZSBhbHBoYW51bWVyaWMgb3IgZGFzaC4gQWZ0ZXIgdGhlIGZpcnN0IGRvdCwKKwkgKiBhbnl0aGluZyBnb2VzLCBzbyB3ZSBjYW4gc3RvcCBjaGVja2luZy4KKwkgKi8KKwlmb3IgKDsgKm5hbWUgJiYgKm5hbWUgIT0gJy4nOyBuYW1lKyspCisJCWlmICgqbmFtZSAhPSAnLScgJiYgIWlzYWxudW0oKm5hbWUpKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qIGlmIG5ld19uYW1lID09IE5VTEwsIHRoZSBzZWN0aW9uIGlzIHJlbW92ZWQgaW5zdGVhZCAqLworc3RhdGljIGludCBnaXRfY29uZmlnX2NvcHlfb3JfcmVuYW1lX3NlY3Rpb25faW5fZmlsZShjb25zdCBjaGFyICpjb25maWdfZmlsZW5hbWUsCisJCQkJICAgICAgY29uc3QgY2hhciAqb2xkX25hbWUsCisJCQkJICAgICAgY29uc3QgY2hhciAqbmV3X25hbWUsIGludCBjb3B5KQoreworCWludCByZXQgPSAwLCByZW1vdmUgPSAwOworCWNoYXIgKmZpbGVuYW1lX2J1ZiA9IE5VTEw7CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrID0gTE9DS19JTklUOworCWludCBvdXRfZmQ7CisJY2hhciBidWZbMTAyNF07CisJRklMRSAqY29uZmlnX2ZpbGUgPSBOVUxMOworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCBzdHJidWYgY29weXN0ciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBjb25maWdfc3RvcmVfZGF0YSBzdG9yZTsKKworCW1lbXNldCgmc3RvcmUsIDAsIHNpemVvZihzdG9yZSkpOworCisJaWYgKG5ld19uYW1lICYmICFzZWN0aW9uX25hbWVfaXNfb2sobmV3X25hbWUpKSB7CisJCXJldCA9IGVycm9yKF8oImludmFsaWQgc2VjdGlvbiBuYW1lOiAlcyIpLCBuZXdfbmFtZSk7CisJCWdvdG8gb3V0X25vX3JvbGxiYWNrOworCX0KKworCWlmICghY29uZmlnX2ZpbGVuYW1lKQorCQljb25maWdfZmlsZW5hbWUgPSBmaWxlbmFtZV9idWYgPSBnaXRfcGF0aGR1cCgiY29uZmlnIik7CisKKwlvdXRfZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2NrLCBjb25maWdfZmlsZW5hbWUsIDApOworCWlmIChvdXRfZmQgPCAwKSB7CisJCXJldCA9IGVycm9yKF8oImNvdWxkIG5vdCBsb2NrIGNvbmZpZyBmaWxlICVzIiksIGNvbmZpZ19maWxlbmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghKGNvbmZpZ19maWxlID0gZm9wZW4oY29uZmlnX2ZpbGVuYW1lLCAicmIiKSkpIHsKKwkJcmV0ID0gd2Fybl9vbl9mb3Blbl9lcnJvcnMoY29uZmlnX2ZpbGVuYW1lKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCQkvKiBubyBjb25maWcgZmlsZSBtZWFucyBub3RoaW5nIHRvIHJlbmFtZSwgbm8gZXJyb3IgKi8KKwkJZ290byBjb21taXRfYW5kX291dDsKKwl9CisKKwlpZiAoZnN0YXQoZmlsZW5vKGNvbmZpZ19maWxlKSwgJnN0KSA9PSAtMSkgeworCQlyZXQgPSBlcnJvcl9lcnJubyhfKCJmc3RhdCBvbiAlcyBmYWlsZWQiKSwgY29uZmlnX2ZpbGVuYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNobW9kKGdldF9sb2NrX2ZpbGVfcGF0aCgmbG9jayksIHN0LnN0X21vZGUgJiAwNzc3NykgPCAwKSB7CisJCXJldCA9IGVycm9yX2Vycm5vKF8oImNobW9kIG9uICVzIGZhaWxlZCIpLAorCQkJCSAgZ2V0X2xvY2tfZmlsZV9wYXRoKCZsb2NrKSk7CisJCWdvdG8gb3V0OworCX0KKworCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBjb25maWdfZmlsZSkpIHsKKwkJaW50IGk7CisJCWludCBsZW5ndGg7CisJCWludCBpc19zZWN0aW9uID0gMDsKKwkJY2hhciAqb3V0cHV0ID0gYnVmOworCQlmb3IgKGkgPSAwOyBidWZbaV0gJiYgaXNzcGFjZShidWZbaV0pOyBpKyspCisJCQk7IC8qIGRvIG5vdGhpbmcgKi8KKwkJaWYgKGJ1ZltpXSA9PSAnWycpIHsKKwkJCS8qIGl0J3MgYSBzZWN0aW9uICovCisJCQlpbnQgb2Zmc2V0OworCQkJaXNfc2VjdGlvbiA9IDE7CisKKwkJCS8qCisJCQkgKiBXaGVuIGVuY291bnRlcmluZyBhIG5ldyBzZWN0aW9uIHVuZGVyIC1jIHdlCisJCQkgKiBuZWVkIHRvIGZsdXNoIG91dCBhbnkgc2VjdGlvbiB3ZSdyZSBhbHJlYWR5CisJCQkgKiBjb3BpbmcgYW5kIGJlZ2luIGFuZXcuIFRoZXJlIG1pZ2h0IGJlCisJCQkgKiBtdWx0aXBsZSBbYnJhbmNoICIkbmFtZSJdIHNlY3Rpb25zLgorCQkJICovCisJCQlpZiAoY29weXN0ci5sZW4gPiAwKSB7CisJCQkJaWYgKHdyaXRlX2luX2Z1bGwob3V0X2ZkLCBjb3B5c3RyLmJ1ZiwgY29weXN0ci5sZW4pIDwgMCkgeworCQkJCQlyZXQgPSB3cml0ZV9lcnJvcihnZXRfbG9ja19maWxlX3BhdGgoJmxvY2spKTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCXN0cmJ1Zl9yZXNldCgmY29weXN0cik7CisJCQl9CisKKwkJCW9mZnNldCA9IHNlY3Rpb25fbmFtZV9tYXRjaCgmYnVmW2ldLCBvbGRfbmFtZSk7CisJCQlpZiAob2Zmc2V0ID4gMCkgeworCQkJCXJldCsrOworCQkJCWlmIChuZXdfbmFtZSA9PSBOVUxMKSB7CisJCQkJCXJlbW92ZSA9IDE7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlzdG9yZS5iYXNlbGVuID0gc3RybGVuKG5ld19uYW1lKTsKKwkJCQlpZiAoIWNvcHkpIHsKKwkJCQkJaWYgKHdyaXRlX3NlY3Rpb24ob3V0X2ZkLCBuZXdfbmFtZSwgJnN0b3JlKSA8IDApIHsKKwkJCQkJCXJldCA9IHdyaXRlX2Vycm9yKGdldF9sb2NrX2ZpbGVfcGF0aCgmbG9jaykpOworCQkJCQkJZ290byBvdXQ7CisJCQkJCX0KKwkJCQkJLyoKKwkJCQkJICogV2Ugd3JvdGUgb3V0IHRoZSBuZXcgc2VjdGlvbiwgd2l0aAorCQkJCQkgKiBhIG5ld2xpbmUsIG5vdyBza2lwIHRoZSBvbGQKKwkJCQkJICogc2VjdGlvbidzIGxlbmd0aAorCQkJCQkgKi8KKwkJCQkJb3V0cHV0ICs9IG9mZnNldCArIGk7CisJCQkJCWlmIChzdHJsZW4ob3V0cHV0KSA+IDApIHsKKwkJCQkJCS8qCisJCQkJCQkgKiBNb3JlIGNvbnRlbnQgbWVhbnMgdGhlcmUncworCQkJCQkJICogYSBkZWNsYXJhdGlvbiB0byBwdXQgb24gdGhlCisJCQkJCQkgKiBuZXh0IGxpbmU7IGluZGVudCB3aXRoIGEKKwkJCQkJCSAqIHRhYgorCQkJCQkJICovCisJCQkJCQlvdXRwdXQgLT0gMTsKKwkJCQkJCW91dHB1dFswXSA9ICdcdCc7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQljb3B5c3RyID0gc3RvcmVfY3JlYXRlX3NlY3Rpb24obmV3X25hbWUsICZzdG9yZSk7CisJCQkJfQorCQkJfQorCQkJcmVtb3ZlID0gMDsKKwkJfQorCQlpZiAocmVtb3ZlKQorCQkJY29udGludWU7CisJCWxlbmd0aCA9IHN0cmxlbihvdXRwdXQpOworCisJCWlmICghaXNfc2VjdGlvbiAmJiBjb3B5c3RyLmxlbiA+IDApIHsKKwkJCXN0cmJ1Zl9hZGQoJmNvcHlzdHIsIG91dHB1dCwgbGVuZ3RoKTsKKwkJfQorCisJCWlmICh3cml0ZV9pbl9mdWxsKG91dF9mZCwgb3V0cHV0LCBsZW5ndGgpIDwgMCkgeworCQkJcmV0ID0gd3JpdGVfZXJyb3IoZ2V0X2xvY2tfZmlsZV9wYXRoKCZsb2NrKSk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qCisJICogQ29weSBhIHRyYWlsaW5nIHNlY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGUgY29uZmlnLCB3b24ndCBiZQorCSAqIGZsdXNoZWQgYnkgdGhlIHVzdWFsICJmbHVzaCBiZWNhdXNlIHdlIGhhdmUgYSBuZXcgc2VjdGlvbgorCSAqIGxvZ2ljIGluIHRoZSBsb29wIGFib3ZlLgorCSAqLworCWlmIChjb3B5c3RyLmxlbiA+IDApIHsKKwkJaWYgKHdyaXRlX2luX2Z1bGwob3V0X2ZkLCBjb3B5c3RyLmJ1ZiwgY29weXN0ci5sZW4pIDwgMCkgeworCQkJcmV0ID0gd3JpdGVfZXJyb3IoZ2V0X2xvY2tfZmlsZV9wYXRoKCZsb2NrKSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlzdHJidWZfcmVzZXQoJmNvcHlzdHIpOworCX0KKworCWZjbG9zZShjb25maWdfZmlsZSk7CisJY29uZmlnX2ZpbGUgPSBOVUxMOworY29tbWl0X2FuZF9vdXQ6CisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJmxvY2spIDwgMCkKKwkJcmV0ID0gZXJyb3JfZXJybm8oXygiY291bGQgbm90IHdyaXRlIGNvbmZpZyBmaWxlICVzIiksCisJCQkJICBjb25maWdfZmlsZW5hbWUpOworb3V0OgorCWlmIChjb25maWdfZmlsZSkKKwkJZmNsb3NlKGNvbmZpZ19maWxlKTsKKwlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworb3V0X25vX3JvbGxiYWNrOgorCWZyZWUoZmlsZW5hbWVfYnVmKTsKKwljb25maWdfc3RvcmVfZGF0YV9jbGVhcigmc3RvcmUpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoY29uc3QgY2hhciAqY29uZmlnX2ZpbGVuYW1lLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBjb25zdCBjaGFyICpuZXdfbmFtZSkKK3sKKwlyZXR1cm4gZ2l0X2NvbmZpZ19jb3B5X29yX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoY29uZmlnX2ZpbGVuYW1lLAorCQkJCQkgb2xkX25hbWUsIG5ld19uYW1lLCAwKTsKK30KKworaW50IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb24oY29uc3QgY2hhciAqb2xkX25hbWUsIGNvbnN0IGNoYXIgKm5ld19uYW1lKQoreworCXJldHVybiBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoTlVMTCwgb2xkX25hbWUsIG5ld19uYW1lKTsKK30KKworaW50IGdpdF9jb25maWdfY29weV9zZWN0aW9uX2luX2ZpbGUoY29uc3QgY2hhciAqY29uZmlnX2ZpbGVuYW1lLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBjb25zdCBjaGFyICpuZXdfbmFtZSkKK3sKKwlyZXR1cm4gZ2l0X2NvbmZpZ19jb3B5X29yX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoY29uZmlnX2ZpbGVuYW1lLAorCQkJCQkgb2xkX25hbWUsIG5ld19uYW1lLCAxKTsKK30KKworaW50IGdpdF9jb25maWdfY29weV9zZWN0aW9uKGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBjb25zdCBjaGFyICpuZXdfbmFtZSkKK3sKKwlyZXR1cm4gZ2l0X2NvbmZpZ19jb3B5X3NlY3Rpb25faW5fZmlsZShOVUxMLCBvbGRfbmFtZSwgbmV3X25hbWUpOworfQorCisvKgorICogQ2FsbCB0aGlzIHRvIHJlcG9ydCBlcnJvciBmb3IgeW91ciB2YXJpYWJsZSB0aGF0IHNob3VsZCBub3QKKyAqIGdldCBhIGJvb2xlYW4gdmFsdWUgKGkuZS4gIltteV0gdmFyIiBtZWFucyAidHJ1ZSIpLgorICovCisjdW5kZWYgY29uZmlnX2Vycm9yX25vbmJvb2wKK2ludCBjb25maWdfZXJyb3Jfbm9uYm9vbChjb25zdCBjaGFyICp2YXIpCit7CisJcmV0dXJuIGVycm9yKF8oIm1pc3NpbmcgdmFsdWUgZm9yICclcyciKSwgdmFyKTsKK30KKworaW50IHBhcnNlX2NvbmZpZ19rZXkoY29uc3QgY2hhciAqdmFyLAorCQkgICAgIGNvbnN0IGNoYXIgKnNlY3Rpb24sCisJCSAgICAgY29uc3QgY2hhciAqKnN1YnNlY3Rpb24sIHNpemVfdCAqc3Vic2VjdGlvbl9sZW4sCisJCSAgICAgY29uc3QgY2hhciAqKmtleSkKK3sKKwljb25zdCBjaGFyICpkb3Q7CisKKwkvKiBEb2VzIGl0IHN0YXJ0IHdpdGggInNlY3Rpb24uIiA/ICovCisJaWYgKCFza2lwX3ByZWZpeCh2YXIsIHNlY3Rpb24sICZ2YXIpIHx8ICp2YXIgIT0gJy4nKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIEZpbmQgdGhlIGtleTsgd2UgZG9uJ3Qga25vdyB5ZXQgaWYgd2UgaGF2ZSBhIHN1YnNlY3Rpb24sIGJ1dCB3ZSBtdXN0CisJICogcGFyc2UgYmFja3dhcmRzIGZyb20gdGhlIGVuZCwgc2luY2UgdGhlIHN1YnNlY3Rpb24gbWF5IGhhdmUgZG90cyBpbgorCSAqIGl0LCB0b28uCisJICovCisJZG90ID0gc3RycmNocih2YXIsICcuJyk7CisJKmtleSA9IGRvdCArIDE7CisKKwkvKiBEaWQgd2UgaGF2ZSBhIHN1YnNlY3Rpb24gYXQgYWxsPyAqLworCWlmIChkb3QgPT0gdmFyKSB7CisJCWlmIChzdWJzZWN0aW9uKSB7CisJCQkqc3Vic2VjdGlvbiA9IE5VTEw7CisJCQkqc3Vic2VjdGlvbl9sZW4gPSAwOworCQl9CisJfQorCWVsc2UgeworCQlpZiAoIXN1YnNlY3Rpb24pCisJCQlyZXR1cm4gLTE7CisJCSpzdWJzZWN0aW9uID0gdmFyICsgMTsKKwkJKnN1YnNlY3Rpb25fbGVuID0gZG90IC0gKnN1YnNlY3Rpb247CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKmN1cnJlbnRfY29uZmlnX29yaWdpbl90eXBlKHZvaWQpCit7CisJaW50IHR5cGU7CisJaWYgKGN1cnJlbnRfY29uZmlnX2t2aSkKKwkJdHlwZSA9IGN1cnJlbnRfY29uZmlnX2t2aS0+b3JpZ2luX3R5cGU7CisJZWxzZSBpZihjZikKKwkJdHlwZSA9IGNmLT5vcmlnaW5fdHlwZTsKKwllbHNlCisJCUJVRygiY3VycmVudF9jb25maWdfb3JpZ2luX3R5cGUgY2FsbGVkIG91dHNpZGUgY29uZmlnIGNhbGxiYWNrIik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIENPTkZJR19PUklHSU5fQkxPQjoKKwkJcmV0dXJuICJibG9iIjsKKwljYXNlIENPTkZJR19PUklHSU5fRklMRToKKwkJcmV0dXJuICJmaWxlIjsKKwljYXNlIENPTkZJR19PUklHSU5fU1RESU46CisJCXJldHVybiAic3RhbmRhcmQgaW5wdXQiOworCWNhc2UgQ09ORklHX09SSUdJTl9TVUJNT0RVTEVfQkxPQjoKKwkJcmV0dXJuICJzdWJtb2R1bGUtYmxvYiI7CisJY2FzZSBDT05GSUdfT1JJR0lOX0NNRExJTkU6CisJCXJldHVybiAiY29tbWFuZCBsaW5lIjsKKwlkZWZhdWx0OgorCQlCVUcoInVua25vd24gY29uZmlnIG9yaWdpbiB0eXBlIik7CisJfQorfQorCitjb25zdCBjaGFyICpjb25maWdfc2NvcGVfbmFtZShlbnVtIGNvbmZpZ19zY29wZSBzY29wZSkKK3sKKwlzd2l0Y2ggKHNjb3BlKSB7CisJY2FzZSBDT05GSUdfU0NPUEVfU1lTVEVNOgorCQlyZXR1cm4gInN5c3RlbSI7CisJY2FzZSBDT05GSUdfU0NPUEVfR0xPQkFMOgorCQlyZXR1cm4gImdsb2JhbCI7CisJY2FzZSBDT05GSUdfU0NPUEVfTE9DQUw6CisJCXJldHVybiAibG9jYWwiOworCWNhc2UgQ09ORklHX1NDT1BFX1dPUktUUkVFOgorCQlyZXR1cm4gIndvcmt0cmVlIjsKKwljYXNlIENPTkZJR19TQ09QRV9DT01NQU5EOgorCQlyZXR1cm4gImNvbW1hbmQiOworCWNhc2UgQ09ORklHX1NDT1BFX1NVQk1PRFVMRToKKwkJcmV0dXJuICJzdWJtb2R1bGUiOworCWRlZmF1bHQ6CisJCXJldHVybiAidW5rbm93biI7CisJfQorfQorCitjb25zdCBjaGFyICpjdXJyZW50X2NvbmZpZ19uYW1lKHZvaWQpCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpZiAoY3VycmVudF9jb25maWdfa3ZpKQorCQluYW1lID0gY3VycmVudF9jb25maWdfa3ZpLT5maWxlbmFtZTsKKwllbHNlIGlmIChjZikKKwkJbmFtZSA9IGNmLT5uYW1lOworCWVsc2UKKwkJQlVHKCJjdXJyZW50X2NvbmZpZ19uYW1lIGNhbGxlZCBvdXRzaWRlIGNvbmZpZyBjYWxsYmFjayIpOworCXJldHVybiBuYW1lID8gbmFtZSA6ICIiOworfQorCitlbnVtIGNvbmZpZ19zY29wZSBjdXJyZW50X2NvbmZpZ19zY29wZSh2b2lkKQoreworCWlmIChjdXJyZW50X2NvbmZpZ19rdmkpCisJCXJldHVybiBjdXJyZW50X2NvbmZpZ19rdmktPnNjb3BlOworCWVsc2UKKwkJcmV0dXJuIGN1cnJlbnRfcGFyc2luZ19zY29wZTsKK30KKworaW50IGN1cnJlbnRfY29uZmlnX2xpbmUodm9pZCkKK3sKKwlpZiAoY3VycmVudF9jb25maWdfa3ZpKQorCQlyZXR1cm4gY3VycmVudF9jb25maWdfa3ZpLT5saW5lbnI7CisJZWxzZQorCQlyZXR1cm4gY2YtPmxpbmVucjsKK30KKworaW50IGxvb2t1cF9jb25maWcoY29uc3QgY2hhciAqKm1hcHBpbmcsIGludCBucl9tYXBwaW5nLCBjb25zdCBjaGFyICp2YXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfbWFwcGluZzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBtYXBwaW5nW2ldOworCisJCWlmIChuYW1lICYmICFzdHJjYXNlY21wKHZhciwgbmFtZSkpCisJCQlyZXR1cm4gaTsKKwl9CisJcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvY29uZmlnLmggYi9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjA4NzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnLmgKQEAgLTAsMCArMSw2MjAgQEAKKyNpZm5kZWYgQ09ORklHX0gKKyNkZWZpbmUgQ09ORklHX0gKKworI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCisKKy8qKgorICogVGhlIGNvbmZpZyBBUEkgZ2l2ZXMgY2FsbGVycyBhIHdheSB0byBhY2Nlc3MgR2l0IGNvbmZpZ3VyYXRpb24gZmlsZXMKKyAqIChhbmQgZmlsZXMgd2hpY2ggaGF2ZSB0aGUgc2FtZSBzeW50YXgpLgorICoKKyAqIEdlbmVyYWwgVXNhZ2UKKyAqIC0tLS0tLS0tLS0tLS0KKyAqCisgKiBDb25maWcgZmlsZXMgYXJlIHBhcnNlZCBsaW5lYXJseSwgYW5kIGVhY2ggdmFyaWFibGUgZm91bmQgaXMgcGFzc2VkIHRvIGEKKyAqIGNhbGxlci1wcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbi4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlCisgKiBmb3IgYW55IGFjdGlvbnMgdG8gYmUgdGFrZW4gb24gdGhlIGNvbmZpZyBvcHRpb24sIGFuZCBpcyBmcmVlIHRvIGlnbm9yZQorICogc29tZSBvcHRpb25zLiBJdCBpcyBub3QgdW5jb21tb24gZm9yIHRoZSBjb25maWd1cmF0aW9uIHRvIGJlIHBhcnNlZAorICogc2V2ZXJhbCB0aW1lcyBkdXJpbmcgdGhlIHJ1biBvZiBhIEdpdCBwcm9ncmFtLCB3aXRoIGRpZmZlcmVudCBjYWxsYmFja3MKKyAqIHBpY2tpbmcgb3V0IGRpZmZlcmVudCB2YXJpYWJsZXMgdXNlZnVsIHRvIHRoZW1zZWx2ZXMuCisgKi8KKworc3RydWN0IG9iamVjdF9pZDsKKworLyogZ2l0X2NvbmZpZ19wYXJzZV9rZXkoKSByZXR1cm5zIHRoZXNlIG5lZ2F0ZWQ6ICovCisjZGVmaW5lIENPTkZJR19JTlZBTElEX0tFWSAxCisjZGVmaW5lIENPTkZJR19OT19TRUNUSU9OX09SX05BTUUgMgorLyogZ2l0X2NvbmZpZ19zZXRfZ2VudGx5KCksIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2dlbnRseSgpIHJldHVybiB0aGUgYWJvdmUgb3IgdGhlc2U6ICovCisjZGVmaW5lIENPTkZJR19OT19MT0NLIC0xCisjZGVmaW5lIENPTkZJR19JTlZBTElEX0ZJTEUgMworI2RlZmluZSBDT05GSUdfTk9fV1JJVEUgNAorI2RlZmluZSBDT05GSUdfTk9USElOR19TRVQgNQorI2RlZmluZSBDT05GSUdfSU5WQUxJRF9QQVRURVJOIDYKKyNkZWZpbmUgQ09ORklHX0dFTkVSSUNfRVJST1IgNworCisjZGVmaW5lIENPTkZJR19SRUdFWF9OT05FICgodm9pZCAqKTEpCisKK2VudW0gY29uZmlnX3Njb3BlIHsKKwlDT05GSUdfU0NPUEVfVU5LTk9XTiA9IDAsCisJQ09ORklHX1NDT1BFX1NZU1RFTSwKKwlDT05GSUdfU0NPUEVfR0xPQkFMLAorCUNPTkZJR19TQ09QRV9MT0NBTCwKKwlDT05GSUdfU0NPUEVfV09SS1RSRUUsCisJQ09ORklHX1NDT1BFX0NPTU1BTkQsCisJQ09ORklHX1NDT1BFX1NVQk1PRFVMRSwKK307Citjb25zdCBjaGFyICpjb25maWdfc2NvcGVfbmFtZShlbnVtIGNvbmZpZ19zY29wZSBzY29wZSk7CisKK3N0cnVjdCBnaXRfY29uZmlnX3NvdXJjZSB7CisJdW5zaWduZWQgaW50IHVzZV9zdGRpbjoxOworCWNvbnN0IGNoYXIgKmZpbGU7CisJY29uc3QgY2hhciAqYmxvYjsKKwllbnVtIGNvbmZpZ19zY29wZSBzY29wZTsKK307CisKK2VudW0gY29uZmlnX29yaWdpbl90eXBlIHsKKwlDT05GSUdfT1JJR0lOX0JMT0IsCisJQ09ORklHX09SSUdJTl9GSUxFLAorCUNPTkZJR19PUklHSU5fU1RESU4sCisJQ09ORklHX09SSUdJTl9TVUJNT0RVTEVfQkxPQiwKKwlDT05GSUdfT1JJR0lOX0NNRExJTkUKK307CisKK2VudW0gY29uZmlnX2V2ZW50X3QgeworCUNPTkZJR19FVkVOVF9TRUNUSU9OLAorCUNPTkZJR19FVkVOVF9FTlRSWSwKKwlDT05GSUdfRVZFTlRfV0hJVEVTUEFDRSwKKwlDT05GSUdfRVZFTlRfQ09NTUVOVCwKKwlDT05GSUdfRVZFTlRfRU9GLAorCUNPTkZJR19FVkVOVF9FUlJPUgorfTsKKworLyoKKyAqIFRoZSBwYXJzZXIgZXZlbnQgZnVuY3Rpb24gKGlmIG5vdCBOVUxMKSBpcyBjYWxsZWQgd2l0aCB0aGUgZXZlbnQgdHlwZSBhbmQKKyAqIHRoZSBiZWdpbi9lbmQgb2Zmc2V0cyBvZiB0aGUgcGFyc2VkIGVsZW1lbnRzLgorICoKKyAqIE5vdGU6IGZvciBDT05GSUdfRVZFTlRfRU5UUlkgKGkuZS4gY29uZmlnIHZhcmlhYmxlcyksIHRoZSB0cmFpbGluZyBuZXdsaW5lCisgKiBjaGFyYWN0ZXIgaXMgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBlbGVtZW50LgorICovCit0eXBlZGVmIGludCAoKmNvbmZpZ19wYXJzZXJfZXZlbnRfZm5fdCkoZW51bSBjb25maWdfZXZlbnRfdCB0eXBlLAorCQkJCQlzaXplX3QgYmVnaW5fb2Zmc2V0LCBzaXplX3QgZW5kX29mZnNldCwKKwkJCQkJdm9pZCAqZXZlbnRfZm5fZGF0YSk7CisKK3N0cnVjdCBjb25maWdfb3B0aW9ucyB7CisJdW5zaWduZWQgaW50IHJlc3BlY3RfaW5jbHVkZXMgOiAxOworCXVuc2lnbmVkIGludCBpZ25vcmVfcmVwbyA6IDE7CisJdW5zaWduZWQgaW50IGlnbm9yZV93b3JrdHJlZSA6IDE7CisJdW5zaWduZWQgaW50IGlnbm9yZV9jbWRsaW5lIDogMTsKKwl1bnNpZ25lZCBpbnQgc3lzdGVtX2dlbnRseSA6IDE7CisJY29uc3QgY2hhciAqY29tbW9uZGlyOworCWNvbnN0IGNoYXIgKmdpdF9kaXI7CisJY29uZmlnX3BhcnNlcl9ldmVudF9mbl90IGV2ZW50X2ZuOworCXZvaWQgKmV2ZW50X2ZuX2RhdGE7CisJZW51bSBjb25maWdfZXJyb3JfYWN0aW9uIHsKKwkJQ09ORklHX0VSUk9SX1VOU0VUID0gMCwgLyogdXNlIHNvdXJjZS1zcGVjaWZpYyBkZWZhdWx0ICovCisJCUNPTkZJR19FUlJPUl9ESUUsIC8qIGRpZSgpIG9uIGVycm9yICovCisJCUNPTkZJR19FUlJPUl9FUlJPUiwgLyogZXJyb3IoKSBvbiBlcnJvciwgcmV0dXJuIC0xICovCisJCUNPTkZJR19FUlJPUl9TSUxFTlQsIC8qIHJldHVybiAtMSAqLworCX0gZXJyb3JfYWN0aW9uOworfTsKKworLyoqCisgKiBBIGNvbmZpZyBjYWxsYmFjayBmdW5jdGlvbiB0YWtlcyB0aHJlZSBwYXJhbWV0ZXJzOgorICoKKyAqIC0gdGhlIG5hbWUgb2YgdGhlIHBhcnNlZCB2YXJpYWJsZS4gVGhpcyBpcyBpbiBjYW5vbmljYWwgImZsYXQiIGZvcm06IHRoZQorICogICBzZWN0aW9uLCBzdWJzZWN0aW9uLCBhbmQgdmFyaWFibGUgc2VnbWVudHMgd2lsbCBiZSBzZXBhcmF0ZWQgYnkgZG90cywKKyAqICAgYW5kIHRoZSBzZWN0aW9uIGFuZCB2YXJpYWJsZSBzZWdtZW50cyB3aWxsIGJlIGFsbCBsb3dlcmNhc2UuIEUuZy4sCisgKiAgIGBjb3JlLmlnbm9yZWNhc2VgLCBgZGlmZi5Tb21lVHlwZS50ZXh0Y29udmAuCisgKgorICogLSB0aGUgdmFsdWUgb2YgdGhlIGZvdW5kIHZhcmlhYmxlLCBhcyBhIHN0cmluZy4gSWYgdGhlIHZhcmlhYmxlIGhhZCBubworICogICB2YWx1ZSBzcGVjaWZpZWQsIHRoZSB2YWx1ZSB3aWxsIGJlIE5VTEwgKHR5cGljYWxseSB0aGlzIG1lYW5zIGl0CisgKiAgIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBib29sZWFuIHRydWUpLgorICoKKyAqIC0gYSB2b2lkIHBvaW50ZXIgcGFzc2VkIGluIGJ5IHRoZSBjYWxsZXIgb2YgdGhlIGNvbmZpZyBBUEk7IHRoaXMgY2FuCisgKiAgIGNvbnRhaW4gY2FsbGJhY2stc3BlY2lmaWMgZGF0YQorICoKKyAqIEEgY29uZmlnIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gMCBmb3Igc3VjY2Vzcywgb3IgLTEgaWYgdGhlIHZhcmlhYmxlCisgKiBjb3VsZCBub3QgYmUgcGFyc2VkIHByb3Blcmx5LgorICovCit0eXBlZGVmIGludCAoKmNvbmZpZ19mbl90KShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKKworaW50IGdpdF9kZWZhdWx0X2NvbmZpZyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKKworLyoqCisgKiBSZWFkIGEgc3BlY2lmaWMgZmlsZSBpbiBnaXQtY29uZmlnIGZvcm1hdC4KKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIHNhbWUgY2FsbGJhY2sgYW5kIGRhdGEgcGFyYW1ldGVycyBhcyBgZ2l0X2NvbmZpZ2AuCisgKi8KK2ludCBnaXRfY29uZmlnX2Zyb21fZmlsZShjb25maWdfZm5fdCBmbiwgY29uc3QgY2hhciAqLCB2b2lkICopOworCitpbnQgZ2l0X2NvbmZpZ19mcm9tX2ZpbGVfd2l0aF9vcHRpb25zKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICosCisJCQkJICAgICAgdm9pZCAqLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBjb25maWdfb3B0aW9ucyAqKTsKK2ludCBnaXRfY29uZmlnX2Zyb21fbWVtKGNvbmZpZ19mbl90IGZuLAorCQkJY29uc3QgZW51bSBjb25maWdfb3JpZ2luX3R5cGUsCisJCQljb25zdCBjaGFyICpuYW1lLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLAorCQkJdm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGNvbmZpZ19vcHRpb25zICpvcHRzKTsKK2ludCBnaXRfY29uZmlnX2Zyb21fYmxvYl9vaWQoY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdm9pZCAqZGF0YSk7Cit2b2lkIGdpdF9jb25maWdfcHVzaF9wYXJhbWV0ZXIoY29uc3QgY2hhciAqdGV4dCk7CitpbnQgZ2l0X2NvbmZpZ19mcm9tX3BhcmFtZXRlcnMoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpOwordm9pZCByZWFkX2Vhcmx5X2NvbmZpZyhjb25maWdfZm5fdCBjYiwgdm9pZCAqZGF0YSk7Cit2b2lkIHJlYWRfdmVyeV9lYXJseV9jb25maWcoY29uZmlnX2ZuX3QgY2IsIHZvaWQgKmRhdGEpOworCisvKioKKyAqIE1vc3QgcHJvZ3JhbXMgd2lsbCBzaW1wbHkgd2FudCB0byBsb29rIHVwIHZhcmlhYmxlcyBpbiBhbGwgY29uZmlnIGZpbGVzCisgKiB0aGF0IEdpdCBrbm93cyBhYm91dCwgdXNpbmcgdGhlIG5vcm1hbCBwcmVjZWRlbmNlIHJ1bGVzLiBUbyBkbyB0aGlzLAorICogY2FsbCBgZ2l0X2NvbmZpZ2Agd2l0aCBhIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCB2b2lkIGRhdGEgcG9pbnRlci4KKyAqCisgKiBgZ2l0X2NvbmZpZ2Agd2lsbCByZWFkIGFsbCBjb25maWcgc291cmNlcyBpbiBvcmRlciBvZiBpbmNyZWFzaW5nCisgKiBwcmlvcml0eS4gVGh1cyBhIGNhbGxiYWNrIHNob3VsZCB0eXBpY2FsbHkgb3ZlcndyaXRlIHByZXZpb3VzbHktc2VlbgorICogZW50cmllcyB3aXRoIG5ldyBvbmVzIChlLmcuLCBpZiBib3RoIHRoZSB1c2VyLXdpZGUgYH4vLmdpdGNvbmZpZ2AgYW5kCisgKiByZXBvLXNwZWNpZmljIGAuZ2l0L2NvbmZpZ2AgY29udGFpbiBgY29sb3IudWlgLCB0aGUgY29uZmlnIG1hY2hpbmVyeQorICogd2lsbCBmaXJzdCBmZWVkIHRoZSB1c2VyLXdpZGUgb25lIHRvIHRoZSBjYWxsYmFjaywgYW5kIHRoZW4gdGhlCisgKiByZXBvLXNwZWNpZmljIG9uZTsgYnkgb3ZlcndyaXRpbmcsIHRoZSBoaWdoZXItcHJpb3JpdHkgcmVwby1zcGVjaWZpYworICogdmFsdWUgaXMgbGVmdCBhdCB0aGUgZW5kKS4KKyAqLwordm9pZCBnaXRfY29uZmlnKGNvbmZpZ19mbl90IGZuLCB2b2lkICopOworCisvKioKKyAqIExldHMgdGhlIGNhbGxlciBleGFtaW5lIGNvbmZpZyB3aGlsZSBhZGp1c3Rpbmcgc29tZSBvZiB0aGUgZGVmYXVsdAorICogYmVoYXZpb3Igb2YgYGdpdF9jb25maWdgLiBJdCBzaG91bGQgYWxtb3N0IG5ldmVyIGJlIHVzZWQgYnkgInJlZ3VsYXIiCisgKiBHaXQgY29kZSB0aGF0IGlzIGxvb2tpbmcgdXAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisgKiBJdCBpcyBpbnRlbmRlZCBmb3IgYWR2YW5jZWQgY2FsbGVycyBsaWtlIGBnaXQtY29uZmlnYCwgd2hpY2ggYXJlCisgKiBpbnRlbnRpb25hbGx5IHR3ZWFraW5nIHRoZSBub3JtYWwgY29uZmlnLWxvb2t1cCBwcm9jZXNzLgorICogSXQgdGFrZXMgdHdvIGV4dHJhIHBhcmFtZXRlcnM6CisgKgorICogLSBgY29uZmlnX3NvdXJjZWAKKyAqIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vbi1OVUxMLCBpdCBzcGVjaWZpZXMgdGhlIHNvdXJjZSB0byBwYXJzZSBmb3IKKyAqIGNvbmZpZ3VyYXRpb24sIHJhdGhlciB0aGFuIGxvb2tpbmcgaW4gdGhlIHVzdWFsIGZpbGVzLiBTZWUgYHN0cnVjdAorICogZ2l0X2NvbmZpZ19zb3VyY2VgIGluIGBjb25maWcuaGAgZm9yIGRldGFpbHMuIFJlZ3VsYXIgYGdpdF9jb25maWdgIGRlZmF1bHRzCisgKiB0byBgTlVMTGAuCisgKgorICogLSBgb3B0c2AKKyAqIFNwZWNpZnkgb3B0aW9ucyB0byBhZGp1c3QgdGhlIGJlaGF2aW9yIG9mIHBhcnNpbmcgY29uZmlnIGZpbGVzLiBTZWUgYHN0cnVjdAorICogY29uZmlnX29wdGlvbnNgIGluIGBjb25maWcuaGAgZm9yIGRldGFpbHMuIEFzIGFuIGV4YW1wbGU6IHJlZ3VsYXIgYGdpdF9jb25maWdgCisgKiBzZXRzIGBvcHRzLnJlc3BlY3RfaW5jbHVkZXNgIHRvIGAxYCBieSBkZWZhdWx0LgorICovCitpbnQgY29uZmlnX3dpdGhfb3B0aW9ucyhjb25maWdfZm5fdCBmbiwgdm9pZCAqLAorCQkJc3RydWN0IGdpdF9jb25maWdfc291cmNlICpjb25maWdfc291cmNlLAorCQkJY29uc3Qgc3RydWN0IGNvbmZpZ19vcHRpb25zICpvcHRzKTsKKworLyoqCisgKiBWYWx1ZSBQYXJzaW5nIEhlbHBlcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSBmb2xsb3dpbmcgaGVscGVyIGZ1bmN0aW9ucyBhaWQgaW4gcGFyc2luZyBzdHJpbmcgdmFsdWVzCisgKi8KKworaW50IGdpdF9wYXJzZV9zc2l6ZV90KGNvbnN0IGNoYXIgKiwgc3NpemVfdCAqKTsKK2ludCBnaXRfcGFyc2VfdWxvbmcoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nICopOworCisvKioKKyAqIFNhbWUgYXMgYGdpdF9jb25maWdfYm9vbGAsIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgLTEgb24gZXJyb3IgcmF0aGVyCisgKiB0aGFuIGR5aW5nLgorICovCitpbnQgZ2l0X3BhcnNlX21heWJlX2Jvb2woY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBQYXJzZSB0aGUgc3RyaW5nIHRvIGFuIGludGVnZXIsIGluY2x1ZGluZyB1bml0IGZhY3RvcnMuIERpZXMgb24gZXJyb3I7CisgKiBvdGhlcndpc2UsIHJldHVybnMgdGhlIHBhcnNlZCByZXN1bHQuCisgKi8KK2ludCBnaXRfY29uZmlnX2ludChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKK2ludDY0X3QgZ2l0X2NvbmZpZ19pbnQ2NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogSWRlbnRpY2FsIHRvIGBnaXRfY29uZmlnX2ludGAsIGJ1dCBmb3IgdW5zaWduZWQgbG9uZ3MuCisgKi8KK3Vuc2lnbmVkIGxvbmcgZ2l0X2NvbmZpZ191bG9uZyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKK3NzaXplX3QgZ2l0X2NvbmZpZ19zc2l6ZV90KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBTYW1lIGFzIGBnaXRfY29uZmlnX2Jvb2xgLCBleGNlcHQgdGhhdCBpbnRlZ2VycyBhcmUgcmV0dXJuZWQgYXMtaXMsIGFuZAorICogYW4gYGlzX2Jvb2xgIGZsYWcgaXMgdW5zZXQuCisgKi8KK2ludCBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQgKik7CisKKy8qKgorICogUGFyc2UgYSBzdHJpbmcgaW50byBhIGJvb2xlYW4gdmFsdWUsIHJlc3BlY3Rpbmcga2V5d29yZHMgbGlrZSAidHJ1ZSIgYW5kCisgKiAiZmFsc2UiLiBJbnRlZ2VyIHZhbHVlcyBhcmUgY29udmVydGVkIGludG8gdHJ1ZS9mYWxzZSB2YWx1ZXMgKHdoZW4gdGhleQorICogYXJlIG5vbi16ZXJvIG9yIHplcm8sIHJlc3BlY3RpdmVseSkuIE90aGVyIHZhbHVlcyBjYXVzZSBhIGRpZSgpLiBJZgorICogcGFyc2luZyBpcyBzdWNjZXNzZnVsLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSByZXN1bHQuCisgKi8KK2ludCBnaXRfY29uZmlnX2Jvb2woY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCisvKioKKyAqIEFsbG9jYXRlcyBhbmQgY29waWVzIHRoZSB2YWx1ZSBzdHJpbmcgaW50byB0aGUgYGRlc3RgIHBhcmFtZXRlcjsgaWYgbm8KKyAqIHN0cmluZyBpcyBnaXZlbiwgcHJpbnRzIGFuIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybnMgLTEuCisgKi8KK2ludCBnaXRfY29uZmlnX3N0cmluZyhjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19zdHJpbmdgLCBidXQgZXhwYW5kcyBgfmAgb3IgYH51c2VyYCBpbnRvIHRoZQorICogdXNlcidzIGhvbWUgZGlyZWN0b3J5IHdoZW4gZm91bmQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aC4KKyAqLworaW50IGdpdF9jb25maWdfcGF0aG5hbWUoY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCitpbnQgZ2l0X2NvbmZpZ19leHBpcnlfZGF0ZSh0aW1lc3RhbXBfdCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitpbnQgZ2l0X2NvbmZpZ19jb2xvcihjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2ludCBnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiB3cml0ZSBjb25maWcgdmFsdWVzIHRvIGEgc3BlY2lmaWMgY29uZmlnIGZpbGUsIHRha2VzIGEga2V5L3ZhbHVlIHBhaXIgYXMKKyAqIHBhcmFtZXRlci4KKyAqLwordm9pZCBnaXRfY29uZmlnX3NldF9pbl9maWxlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCitpbnQgZ2l0X2NvbmZpZ19zZXRfZ2VudGx5KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiB3cml0ZSBjb25maWcgdmFsdWVzIHRvIGAuZ2l0L2NvbmZpZ2AsIHRha2VzIGEga2V5L3ZhbHVlIHBhaXIgYXMgcGFyYW1ldGVyLgorICovCit2b2lkIGdpdF9jb25maWdfc2V0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworaW50IGdpdF9jb25maWdfcGFyc2Vfa2V5KGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgc2l6ZV90ICopOworaW50IGdpdF9jb25maWdfa2V5X2lzX3ZhbGlkKGNvbnN0IGNoYXIgKmtleSk7CitpbnQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfZ2VudGx5KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7Cit2b2lkIGdpdF9jb25maWdfc2V0X211bHRpdmFyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CitpbnQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZV9nZW50bHkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworCisvKioKKyAqIHRha2VzIGZvdXIgcGFyYW1ldGVyczoKKyAqCisgKiAtIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCBhcyBhIHN0cmluZywgdG8gd2hpY2gga2V5L3ZhbHVlIHBhaXJzIHdpbGwgYmUgd3JpdHRlbi4KKyAqCisgKiAtIHRoZSBuYW1lIG9mIGtleSwgYXMgYSBzdHJpbmcuIFRoaXMgaXMgaW4gY2Fub25pY2FsICJmbGF0IiBmb3JtOiB0aGUgc2VjdGlvbiwKKyAqICAgc3Vic2VjdGlvbiwgYW5kIHZhcmlhYmxlIHNlZ21lbnRzIHdpbGwgYmUgc2VwYXJhdGVkIGJ5IGRvdHMsIGFuZCB0aGUgc2VjdGlvbgorICogICBhbmQgdmFyaWFibGUgc2VnbWVudHMgd2lsbCBiZSBhbGwgbG93ZXJjYXNlLgorICogICBFLmcuLCBgY29yZS5pZ25vcmVjYXNlYCwgYGRpZmYuU29tZVR5cGUudGV4dGNvbnZgLgorICoKKyAqIC0gdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgYXMgYSBzdHJpbmcuIElmIHZhbHVlIGlzIGVxdWFsIHRvIE5VTEwsIGl0IHdpbGwKKyAqICAgcmVtb3ZlIHRoZSBtYXRjaGluZyBrZXkgZnJvbSB0aGUgY29uZmlnIGZpbGUuCisgKgorICogLSB0aGUgdmFsdWUgcmVnZXgsIGFzIGEgc3RyaW5nLiBJdCB3aWxsIGRpc3JlZ2FyZCBrZXkvdmFsdWUgcGFpcnMgd2hlcmUgdmFsdWUKKyAqICAgZG9lcyBub3QgbWF0Y2guCisgKgorICogLSBhIG11bHRpX3JlcGxhY2UgdmFsdWUsIGFzIGFuIGludC4gSWYgdmFsdWUgaXMgZXF1YWwgdG8gemVybywgbm90aGluZyBvciBvbmx5CisgKiAgIG9uZSBtYXRjaGluZyBrZXkvdmFsdWUgaXMgcmVwbGFjZWQsIGVsc2UgYWxsIG1hdGNoaW5nIGtleS92YWx1ZXMgKHJlZ2FyZGxlc3MKKyAqICAgaG93IG1hbnkpIGFyZSByZW1vdmVkLCBiZWZvcmUgdGhlIG5ldyBwYWlyIGlzIHdyaXR0ZW4uCisgKgorICogSXQgcmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKi8KK3ZvaWQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisKKy8qKgorICogcmVuYW1lIG9yIHJlbW92ZSBzZWN0aW9ucyBpbiB0aGUgY29uZmlnIGZpbGUKKyAqIHBhcmFtZXRlcnMgYG9sZF9uYW1lYCBhbmQgYG5ld19uYW1lYAorICogSWYgTlVMTCBpcyBwYXNzZWQgdGhyb3VnaCBgbmV3X25hbWVgIHBhcmFtZXRlciwKKyAqIHRoZSBzZWN0aW9uIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBjb25maWcgZmlsZS4KKyAqLworaW50IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb24oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCitpbnQgZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbl9pbl9maWxlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworaW50IGdpdF9jb25maWdfY29weV9zZWN0aW9uKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2ludCBnaXRfY29uZmlnX2NvcHlfc2VjdGlvbl9pbl9maWxlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworY29uc3QgY2hhciAqZ2l0X2V0Y19naXRjb25maWcodm9pZCk7CitpbnQgZ2l0X2Vudl9ib29sKGNvbnN0IGNoYXIgKiwgaW50KTsKK3Vuc2lnbmVkIGxvbmcgZ2l0X2Vudl91bG9uZyhjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOworaW50IGdpdF9jb25maWdfc3lzdGVtKHZvaWQpOworaW50IGNvbmZpZ19lcnJvcl9ub25ib29sKGNvbnN0IGNoYXIgKik7CisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNkZWZpbmUgY29uZmlnX2Vycm9yX25vbmJvb2wocykgKGNvbmZpZ19lcnJvcl9ub25ib29sKHMpLCBjb25zdF9lcnJvcigpKQorI2VuZGlmCisKK2ludCBnaXRfY29uZmlnX3BhcnNlX3BhcmFtZXRlcihjb25zdCBjaGFyICosIGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKTsKKworZW51bSBjb25maWdfc2NvcGUgY3VycmVudF9jb25maWdfc2NvcGUodm9pZCk7Citjb25zdCBjaGFyICpjdXJyZW50X2NvbmZpZ19vcmlnaW5fdHlwZSh2b2lkKTsKK2NvbnN0IGNoYXIgKmN1cnJlbnRfY29uZmlnX25hbWUodm9pZCk7CitpbnQgY3VycmVudF9jb25maWdfbGluZSh2b2lkKTsKKworLyoqCisgKiBJbmNsdWRlIERpcmVjdGl2ZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEJ5IGRlZmF1bHQsIHRoZSBjb25maWcgcGFyc2VyIGRvZXMgbm90IHJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzLgorICogSG93ZXZlciwgYSBjYWxsZXIgY2FuIHVzZSB0aGUgc3BlY2lhbCBgZ2l0X2NvbmZpZ19pbmNsdWRlYCB3cmFwcGVyCisgKiBjYWxsYmFjayB0byBzdXBwb3J0IHRoZW0uIFRvIGRvIHNvLCB5b3Ugc2ltcGx5IHdyYXAgeW91ciAicmVhbCIgY2FsbGJhY2sKKyAqIGZ1bmN0aW9uIGFuZCBkYXRhIHBvaW50ZXIgaW4gYSBgc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGFgLCBhbmQgcGFzcworICogdGhlIHdyYXBwZXIgdG8gdGhlIHJlZ3VsYXIgY29uZmlnLXJlYWRpbmcgZnVuY3Rpb25zLiBGb3IgZXhhbXBsZToKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBpbnQgcmVhZF9maWxlX3dpdGhfaW5jbHVkZShjb25zdCBjaGFyICpmaWxlLCBjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKKyAqIHsKKyAqIHN0cnVjdCBjb25maWdfaW5jbHVkZV9kYXRhIGluYyA9IENPTkZJR19JTkNMVURFX0lOSVQ7CisgKiBpbmMuZm4gPSBmbjsKKyAqIGluYy5kYXRhID0gZGF0YTsKKyAqIHJldHVybiBnaXRfY29uZmlnX2Zyb21fZmlsZShnaXRfY29uZmlnX2luY2x1ZGUsIGZpbGUsICZpbmMpOworICogfQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGBnaXRfY29uZmlnYCByZXNwZWN0cyBpbmNsdWRlcyBhdXRvbWF0aWNhbGx5LiBUaGUgbG93ZXItbGV2ZWwKKyAqIGBnaXRfY29uZmlnX2Zyb21fZmlsZWAgZG9lcyBub3QuCisgKgorICovCitzdHJ1Y3QgY29uZmlnX2luY2x1ZGVfZGF0YSB7CisJaW50IGRlcHRoOworCWNvbmZpZ19mbl90IGZuOworCXZvaWQgKmRhdGE7CisJY29uc3Qgc3RydWN0IGNvbmZpZ19vcHRpb25zICpvcHRzOworfTsKKyNkZWZpbmUgQ09ORklHX0lOQ0xVREVfSU5JVCB7IDAgfQoraW50IGdpdF9jb25maWdfaW5jbHVkZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSk7CisKKy8qCisgKiBNYXRjaCBhbmQgcGFyc2UgYSBjb25maWcga2V5IG9mIHRoZSBmb3JtOgorICoKKyAqICAgc2VjdGlvbi4oc3Vic2VjdGlvbi4pP2tleQorICoKKyAqIChpLmUuLCB3aGF0IGdldHMgaGFuZGVkIHRvIGEgY29uZmlnX2ZuX3QpLiBUaGUgY2FsbGVyIHByb3ZpZGVzIHRoZSBzZWN0aW9uOworICogd2UgcmV0dXJuIC0xIGlmIGl0IGRvZXMgbm90IG1hdGNoLCAwIG90aGVyd2lzZS4gVGhlIHN1YnNlY3Rpb24gYW5kIGtleQorICogb3V0LXBhcmFtZXRlcnMgYXJlIGZpbGxlZCBieSB0aGUgZnVuY3Rpb24gKGFuZCAqc3Vic2VjdGlvbiBpcyBOVUxMIGlmIGl0IGlzCisgKiBtaXNzaW5nKS4KKyAqCisgKiBJZiB0aGUgc3Vic2VjdGlvbiBwb2ludGVyLXRvLXBvaW50ZXIgcGFzc2VkIGluIGlzIE5VTEwsIHJldHVybnMgMCBvbmx5IGlmCisgKiB0aGVyZSBpcyBubyBzdWJzZWN0aW9uIGF0IGFsbC4KKyAqLworaW50IHBhcnNlX2NvbmZpZ19rZXkoY29uc3QgY2hhciAqdmFyLAorCQkgICAgIGNvbnN0IGNoYXIgKnNlY3Rpb24sCisJCSAgICAgY29uc3QgY2hhciAqKnN1YnNlY3Rpb24sIHNpemVfdCAqc3Vic2VjdGlvbl9sZW4sCisJCSAgICAgY29uc3QgY2hhciAqKmtleSk7CisKKy8qKgorICogQ3VzdG9tIENvbmZpZ3NldHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQSBgY29uZmlnX3NldGAgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGFuIGluLW1lbW9yeSBjYWNoZSBmb3IKKyAqIGNvbmZpZy1saWtlIGZpbGVzIHRoYXQgdGhlIGNhbGxlciBzcGVjaWZpZXMgKGkuZS4sIGZpbGVzIGxpa2UgYC5naXRtb2R1bGVzYCwKKyAqIGB+Ly5naXRjb25maWdgIGV0Yy4pLiBGb3IgZXhhbXBsZSwKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBzdHJ1Y3QgY29uZmlnX3NldCBnbV9jb25maWc7CisgKiBnaXRfY29uZmlnc2V0X2luaXQoJmdtX2NvbmZpZyk7CisgKiBpbnQgYjsKKyAqIC8vd2UgYWRkIGNvbmZpZyBmaWxlcyB0byB0aGUgY29uZmlnX3NldAorICogZ2l0X2NvbmZpZ3NldF9hZGRfZmlsZSgmZ21fY29uZmlnLCAiLmdpdG1vZHVsZXMiKTsKKyAqIGdpdF9jb25maWdzZXRfYWRkX2ZpbGUoJmdtX2NvbmZpZywgIi5naXRtb2R1bGVzX2FsdCIpOworICoKKyAqIGlmICghZ2l0X2NvbmZpZ3NldF9nZXRfYm9vbChnbV9jb25maWcsICJzdWJtb2R1bGUuZnJvdHouaWdub3JlIiwgJmIpKSB7CisgKiAvL2hhY2sgaGFjayBoYWNrCisgKiB9CisgKgorICogd2hlbiB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBjb25maWdzZXQ6CisgKiBnaXRfY29uZmlnc2V0X2NsZWFyKCZnbV9jb25maWcpOworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIENvbmZpZ3NldCBBUEkgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciB0aGUgYWJvdmUgbWVudGlvbmVkIHdvcmsgZmxvdworICovCisKK3N0cnVjdCBjb25maWdfc2V0X2VsZW1lbnQgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwljaGFyICprZXk7CisJc3RydWN0IHN0cmluZ19saXN0IHZhbHVlX2xpc3Q7Cit9OworCitzdHJ1Y3QgY29uZmlnc2V0X2xpc3RfaXRlbSB7CisJc3RydWN0IGNvbmZpZ19zZXRfZWxlbWVudCAqZTsKKwlpbnQgdmFsdWVfaW5kZXg7Cit9OworCisvKgorICogdGhlIGNvbnRlbnRzIG9mIHRoZSBsaXN0IGFyZSBvcmRlcmVkIGFjY29yZGluZyB0byB0aGVpcgorICogcG9zaXRpb24gaW4gdGhlIGNvbmZpZyBmaWxlcyBhbmQgb3JkZXIgb2YgcGFyc2luZyB0aGUgZmlsZXMuCisgKiAoaS5lLiBrZXktdmFsdWUgcGFpciBhdCB0aGUgbGFzdCBwb3NpdGlvbiBvZiAuZ2l0L2NvbmZpZyB3aWxsCisgKiBiZSBhdCB0aGUgbGFzdCBpdGVtIG9mIHRoZSBsaXN0KQorICovCitzdHJ1Y3QgY29uZmlnc2V0X2xpc3QgeworCXN0cnVjdCBjb25maWdzZXRfbGlzdF9pdGVtICppdGVtczsKKwl1bnNpZ25lZCBpbnQgbnIsIGFsbG9jOworfTsKKworc3RydWN0IGNvbmZpZ19zZXQgeworCXN0cnVjdCBoYXNobWFwIGNvbmZpZ19oYXNoOworCWludCBoYXNoX2luaXRpYWxpemVkOworCXN0cnVjdCBjb25maWdzZXRfbGlzdCBsaXN0OworfTsKKworLyoqCisgKiBJbml0aWFsaXplcyB0aGUgY29uZmlnX3NldCBgY3NgLgorICovCit2b2lkIGdpdF9jb25maWdzZXRfaW5pdChzdHJ1Y3QgY29uZmlnX3NldCAqY3MpOworCisvKioKKyAqIFBhcnNlcyB0aGUgZmlsZSBhbmQgYWRkcyB0aGUgdmFyaWFibGUtdmFsdWUgcGFpcnMgdG8gdGhlIGBjb25maWdfc2V0YCwKKyAqIGRpZXMgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gcGFyc2luZyB0aGUgZmlsZS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yCisgKiAtMSBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBpbmFjY2Vzc2libGUuIFRoZSB1c2VyIGhhcyB0byBkZWNpZGUKKyAqIGlmIGhlIHdhbnRzIHRvIGZyZWUgdGhlIGluY29tcGxldGUgY29uZmlnc2V0IG9yIGNvbnRpbnVlIHVzaW5nIGl0IHdoZW4KKyAqIHRoZSBmdW5jdGlvbiByZXR1cm5zIC0xLgorICovCitpbnQgZ2l0X2NvbmZpZ3NldF9hZGRfZmlsZShzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKworLyoqCisgKiBGaW5kcyBhbmQgcmV0dXJucyB0aGUgdmFsdWUgbGlzdCwgc29ydGVkIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgcHJpb3JpdHkKKyAqIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBhbmQgY29uZmlnIHNldCBgY3NgLiBXaGVuIHRoZQorICogY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcyBub3QgZm91bmQsIHJldHVybnMgTlVMTC4gVGhlIGNhbGxlcgorICogc2hvdWxkIG5vdCBmcmVlIG9yIG1vZGlmeSB0aGUgcmV0dXJuZWQgcG9pbnRlciwgYXMgaXQgaXMgb3duZWQgYnkgdGhlIGNhY2hlLgorICovCitjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlX211bHRpKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5KTsKKworLyoqCisgKiBDbGVhcnMgYGNvbmZpZ19zZXRgIHN0cnVjdHVyZSwgcmVtb3ZlcyBhbGwgc2F2ZWQgdmFyaWFibGUtdmFsdWUgcGFpcnMuCisgKi8KK3ZvaWQgZ2l0X2NvbmZpZ3NldF9jbGVhcihzdHJ1Y3QgY29uZmlnX3NldCAqY3MpOworCisvKgorICogVGhlc2UgZnVuY3Rpb25zIHJldHVybiAxIGlmIG5vdCBmb3VuZCwgYW5kIDAgaWYgZm91bmQsIGxlYXZpbmcgdGhlIGZvdW5kCisgKiB2YWx1ZSBpbiB0aGUgJ2Rlc3QnIHBvaW50ZXIuCisgKi8KKworLyoKKyAqIEZpbmRzIHRoZSBoaWdoZXN0LXByaW9yaXR5IHZhbHVlIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YAorICogYW5kIGNvbmZpZyBzZXQgYGNzYCwgc3RvcmVzIHRoZSBwb2ludGVyIHRvIGl0IGluIGB2YWx1ZWAgYW5kIHJldHVybnMgMC4KKyAqIFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIDEgd2l0aG91dAorICogdG91Y2hpbmcgYHZhbHVlYC4gVGhlIGNhbGxlciBzaG91bGQgbm90IGZyZWUgb3IgbW9kaWZ5IGB2YWx1ZWAsIGFzIGl0CisgKiBpcyBvd25lZCBieSB0aGUgY2FjaGUuCisgKi8KK2ludCBnaXRfY29uZmlnc2V0X2dldF92YWx1ZShzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpOworCitpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfc3RyaW5nX2NvbnN0KHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdCk7CitpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfc3RyaW5nKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBjaGFyICoqZGVzdCk7CitpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfaW50KHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpOworaW50IGdpdF9jb25maWdzZXRfZ2V0X3Vsb25nKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICpkZXN0KTsKK2ludCBnaXRfY29uZmlnc2V0X2dldF9ib29sKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpOworaW50IGdpdF9jb25maWdzZXRfZ2V0X2Jvb2xfb3JfaW50KHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBpbnQgKmlzX2Jvb2wsIGludCAqZGVzdCk7CitpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfbWF5YmVfYm9vbChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KTsKK2ludCBnaXRfY29uZmlnc2V0X2dldF9wYXRobmFtZShzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpOworCisvKiBGdW5jdGlvbnMgZm9yIHJlYWRpbmcgYSByZXBvc2l0b3J5J3MgY29uZmlnICovCitzdHJ1Y3QgcmVwb3NpdG9yeTsKK3ZvaWQgcmVwb19jb25maWcoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKTsKK2ludCByZXBvX2NvbmZpZ19nZXRfdmFsdWUoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKnZhbHVlKTsKK2NvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVwb19jb25maWdfZ2V0X3ZhbHVlX211bHRpKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCQkJICAgICAgY29uc3QgY2hhciAqa2V5KTsKK2ludCByZXBvX2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCSBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KTsKK2ludCByZXBvX2NvbmZpZ19nZXRfc3RyaW5nKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgY29uc3QgY2hhciAqa2V5LCBjaGFyICoqZGVzdCk7CitpbnQgcmVwb19jb25maWdfZ2V0X2ludChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCWNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KTsKK2ludCByZXBvX2NvbmZpZ19nZXRfdWxvbmcoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgIGNvbnN0IGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyAqZGVzdCk7CitpbnQgcmVwb19jb25maWdfZ2V0X2Jvb2woc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpOworaW50IHJlcG9fY29uZmlnX2dldF9ib29sX29yX2ludChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQljb25zdCBjaGFyICprZXksIGludCAqaXNfYm9vbCwgaW50ICpkZXN0KTsKK2ludCByZXBvX2NvbmZpZ19nZXRfbWF5YmVfYm9vbChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICAgICBjb25zdCBjaGFyICprZXksIGludCAqZGVzdCk7CitpbnQgcmVwb19jb25maWdfZ2V0X3BhdGhuYW1lKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgICBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KTsKKworLyoqCisgKiBRdWVyeWluZyBGb3IgU3BlY2lmaWMgVmFyaWFibGVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogRm9yIHByb2dyYW1zIHdhbnRpbmcgdG8gcXVlcnkgZm9yIHNwZWNpZmljIHZhcmlhYmxlcyBpbiBhIG5vbi1jYWxsYmFjaworICogbWFubmVyLCB0aGUgY29uZmlnIEFQSSBwcm92aWRlcyB0d28gZnVuY3Rpb25zIGBnaXRfY29uZmlnX2dldF92YWx1ZWAKKyAqIGFuZCBgZ2l0X2NvbmZpZ19nZXRfdmFsdWVfbXVsdGlgLiBUaGV5IGJvdGggcmVhZCB2YWx1ZXMgZnJvbSBhbiBpbnRlcm5hbAorICogY2FjaGUgZ2VuZXJhdGVkIHByZXZpb3VzbHkgZnJvbSByZWFkaW5nIHRoZSBjb25maWcgZmlsZXMuCisgKi8KKworLyoqCisgKiBGaW5kcyB0aGUgaGlnaGVzdC1wcmlvcml0eSB2YWx1ZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAsCisgKiBzdG9yZXMgdGhlIHBvaW50ZXIgdG8gaXQgaW4gYHZhbHVlYCBhbmQgcmV0dXJucyAwLiBXaGVuIHRoZQorICogY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcyBub3QgZm91bmQsIHJldHVybnMgMSB3aXRob3V0IHRvdWNoaW5nCisgKiBgdmFsdWVgLiBUaGUgY2FsbGVyIHNob3VsZCBub3QgZnJlZSBvciBtb2RpZnkgYHZhbHVlYCwgYXMgaXQgaXMgb3duZWQKKyAqIGJ5IHRoZSBjYWNoZS4KKyAqLworaW50IGdpdF9jb25maWdfZ2V0X3ZhbHVlKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKnZhbHVlKTsKKworLyoqCisgKiBGaW5kcyBhbmQgcmV0dXJucyB0aGUgdmFsdWUgbGlzdCwgc29ydGVkIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgcHJpb3JpdHkKKyAqIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YC4gV2hlbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICogYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIE5VTEwuIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCBmcmVlIG9yIG1vZGlmeQorICogdGhlIHJldHVybmVkIHBvaW50ZXIsIGFzIGl0IGlzIG93bmVkIGJ5IHRoZSBjYWNoZS4KKyAqLworY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpnaXRfY29uZmlnX2dldF92YWx1ZV9tdWx0aShjb25zdCBjaGFyICprZXkpOworCisvKioKKyAqIFJlc2V0cyBhbmQgaW52YWxpZGF0ZXMgdGhlIGNvbmZpZyBjYWNoZS4KKyAqLwordm9pZCBnaXRfY29uZmlnX2NsZWFyKHZvaWQpOworCisvKioKKyAqIEFsbG9jYXRlcyBhbmQgY29waWVzIHRoZSByZXRyaWV2ZWQgc3RyaW5nIGludG8gdGhlIGBkZXN0YCBwYXJhbWV0ZXIgZm9yCisgKiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YDsgaWYgTlVMTCBzdHJpbmcgaXMgZ2l2ZW4sIHByaW50cyBhbgorICogZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJucyAtMS4gV2hlbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcworICogbm90IGZvdW5kLCByZXR1cm5zIDEgd2l0aG91dCB0b3VjaGluZyBgZGVzdGAuCisgKi8KK2ludCBnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3QoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdCk7CisKKy8qKgorICogU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0YCwgZXhjZXB0IHRoYXQgcmV0cmlldmVkIHZhbHVlCisgKiBjb3BpZWQgaW50byB0aGUgYGRlc3RgIHBhcmFtZXRlciBpcyBhIG11dGFibGUgc3RyaW5nLgorICovCitpbnQgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKGNvbnN0IGNoYXIgKmtleSwgY2hhciAqKmRlc3QpOworCisvKioKKyAqIEZpbmRzIGFuZCBwYXJzZXMgdGhlIHZhbHVlIHRvIGFuIGludGVnZXIgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisgKiBga2V5YC4gRGllcyBvbiBlcnJvcjsgb3RoZXJ3aXNlLCBzdG9yZXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJzZWQgaW50ZWdlciBpbgorICogYGRlc3RgIGFuZCByZXR1cm5zIDAuIFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLAorICogcmV0dXJucyAxIHdpdGhvdXQgdG91Y2hpbmcgYGRlc3RgLgorICovCitpbnQgZ2l0X2NvbmZpZ19nZXRfaW50KGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KTsKKworLyoqCisgKiBTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9pbnRgIGJ1dCBmb3IgdW5zaWduZWQgbG9uZ3MuCisgKi8KK2ludCBnaXRfY29uZmlnX2dldF91bG9uZyhjb25zdCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcgKmRlc3QpOworCisvKioKKyAqIEZpbmRzIGFuZCBwYXJzZXMgdGhlIHZhbHVlIGludG8gYSBib29sZWFuIHZhbHVlLCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24KKyAqIHZhcmlhYmxlIGBrZXlgIHJlc3BlY3Rpbmcga2V5d29yZHMgbGlrZSAidHJ1ZSIgYW5kICJmYWxzZSIuIEludGVnZXIKKyAqIHZhbHVlcyBhcmUgY29udmVydGVkIGludG8gdHJ1ZS9mYWxzZSB2YWx1ZXMgKHdoZW4gdGhleSBhcmUgbm9uLXplcm8gb3IKKyAqIHplcm8sIHJlc3BlY3RpdmVseSkuIE90aGVyIHZhbHVlcyBjYXVzZSBhIGRpZSgpLiBJZiBwYXJzaW5nIGlzIHN1Y2Nlc3NmdWwsCisgKiBzdG9yZXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJzZWQgcmVzdWx0IGluIGBkZXN0YCBhbmQgcmV0dXJucyAwLiBXaGVuIHRoZQorICogY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcyBub3QgZm91bmQsIHJldHVybnMgMSB3aXRob3V0IHRvdWNoaW5nCisgKiBgZGVzdGAuCisgKi8KK2ludCBnaXRfY29uZmlnX2dldF9ib29sKGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KTsKKworLyoqCisgKiBTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9ib29sYCwgZXhjZXB0IHRoYXQgaW50ZWdlcnMgYXJlIGNvcGllZCBhcy1pcywKKyAqIGFuZCBgaXNfYm9vbGAgZmxhZyBpcyB1bnNldC4KKyAqLworaW50IGdpdF9jb25maWdfZ2V0X2Jvb2xfb3JfaW50KGNvbnN0IGNoYXIgKmtleSwgaW50ICppc19ib29sLCBpbnQgKmRlc3QpOworCisvKioKKyAqIFNpbWlsYXIgdG8gYGdpdF9jb25maWdfZ2V0X2Jvb2xgLCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIC0xIG9uIGVycm9yCisgKiByYXRoZXIgdGhhbiBkeWluZy4KKyAqLworaW50IGdpdF9jb25maWdfZ2V0X21heWJlX2Jvb2woY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpOworCisvKioKKyAqIFNpbWlsYXIgdG8gYGdpdF9jb25maWdfZ2V0X3N0cmluZ2AsIGJ1dCBleHBhbmRzIGB+YCBvciBgfnVzZXJgIGludG8KKyAqIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnkgd2hlbiBmb3VuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLgorICovCitpbnQgZ2l0X2NvbmZpZ19nZXRfcGF0aG5hbWUoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdCk7CisKK2ludCBnaXRfY29uZmlnX2dldF9pbmRleF90aHJlYWRzKGludCAqZGVzdCk7CitpbnQgZ2l0X2NvbmZpZ19nZXRfdW50cmFja2VkX2NhY2hlKHZvaWQpOworaW50IGdpdF9jb25maWdfZ2V0X3NwbGl0X2luZGV4KHZvaWQpOworaW50IGdpdF9jb25maWdfZ2V0X21heF9wZXJjZW50X3NwbGl0X2NoYW5nZSh2b2lkKTsKK2ludCBnaXRfY29uZmlnX2dldF9mc21vbml0b3Iodm9pZCk7CisKKy8qIFRoaXMgZGllcyBpZiB0aGUgY29uZmlndXJlZCBvciBkZWZhdWx0IGRhdGUgaXMgaW4gdGhlIGZ1dHVyZSAqLworaW50IGdpdF9jb25maWdfZ2V0X2V4cGlyeShjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipvdXRwdXQpOworCisvKiBwYXJzZSBlaXRoZXIgInRoaXMgbWFueSBkYXlzIiBpbnRlZ2VyLCBvciAiNS5kYXlzLmFnbyIgYXBwcm94aWRhdGUgKi8KK2ludCBnaXRfY29uZmlnX2dldF9leHBpcnlfaW5fZGF5cyhjb25zdCBjaGFyICprZXksIHRpbWVzdGFtcF90ICosIHRpbWVzdGFtcF90IG5vdyk7CisKK3N0cnVjdCBrZXlfdmFsdWVfaW5mbyB7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJaW50IGxpbmVucjsKKwllbnVtIGNvbmZpZ19vcmlnaW5fdHlwZSBvcmlnaW5fdHlwZTsKKwllbnVtIGNvbmZpZ19zY29wZSBzY29wZTsKK307CisKKy8qKgorICogRmlyc3QgcHJpbnRzIHRoZSBlcnJvciBtZXNzYWdlIHNwZWNpZmllZCBieSB0aGUgY2FsbGVyIGluIGBlcnJgIGFuZCB0aGVuCisgKiBkaWVzIHByaW50aW5nIHRoZSBsaW5lIG51bWJlciBhbmQgdGhlIGZpbGUgbmFtZSBvZiB0aGUgaGlnaGVzdCBwcmlvcml0eQorICogdmFsdWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgLgorICovCitOT1JFVFVSTiB2b2lkIGdpdF9kaWVfY29uZmlnKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDIsIDMpKSk7CisKKy8qKgorICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGZvcm1hdHMgdGhlIGRpZSBlcnJvciBtZXNzYWdlIGFjY29yZGluZyB0byB0aGUKKyAqIHBhcmFtZXRlcnMgZW50ZXJlZC4gVXNlZCBieSBgZ2l0X2RpZV9jb25maWcoKWAuIEl0IGNhbiBiZSB1c2VkIGJ5IGNhbGxlcnMKKyAqIGhhbmRsaW5nIGBnaXRfY29uZmlnX2dldF92YWx1ZV9tdWx0aSgpYCB0byBwcmludCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlCisgKiBmb3IgdGhlIGRlc2lyZWQgdmFsdWUuCisgKi8KK05PUkVUVVJOIHZvaWQgZ2l0X2RpZV9jb25maWdfbGluZW5yKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbnIpOworCisjZGVmaW5lIExPT0tVUF9DT05GSUcobWFwcGluZywgdmFyKSBcCisJbG9va3VwX2NvbmZpZyhtYXBwaW5nLCBBUlJBWV9TSVpFKG1hcHBpbmcpLCB2YXIpCitpbnQgbG9va3VwX2NvbmZpZyhjb25zdCBjaGFyICoqbWFwcGluZywgaW50IG5yX21hcHBpbmcsIGNvbnN0IGNoYXIgKnZhcik7CisKKyNlbmRpZiAvKiBDT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvY29uZmlnLm1hay5kZXYgYi9jb25maWcubWFrLmRldgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDRhODJhCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnLm1hay5kZXYKQEAgLTAsMCArMSw0OSBAQAoraWZlcSAoJChmaWx0ZXIgbm8tZXJyb3IsJChERVZPUFRTKSksKQorREVWRUxPUEVSX0NGTEFHUyArPSAtV2Vycm9yCitlbmRpZgoraWZuZXEgKCQoZmlsdGVyIHBlZGFudGljLCQoREVWT1BUUykpLCkKK0RFVkVMT1BFUl9DRkxBR1MgKz0gLXBlZGFudGljCisjIGRvbid0IHdhcm4gZm9yIGVhY2ggTl8gdXNlCitERVZFTE9QRVJfQ0ZMQUdTICs9IC1EVVNFX1BBUkVOU19BUk9VTkRfR0VUVEVYVF9OPTAKK2VuZGlmCitERVZFTE9QRVJfQ0ZMQUdTICs9IC1XYWxsCitERVZFTE9QRVJfQ0ZMQUdTICs9IC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50CitERVZFTE9QRVJfQ0ZMQUdTICs9IC1XZm9ybWF0LXNlY3VyaXR5CitERVZFTE9QRVJfQ0ZMQUdTICs9IC1Xb2xkLXN0eWxlLWRlZmluaXRpb24KK0RFVkVMT1BFUl9DRkxBR1MgKz0gLVdvdmVyZmxvdworREVWRUxPUEVSX0NGTEFHUyArPSAtV3BvaW50ZXItYXJpdGgKK0RFVkVMT1BFUl9DRkxBR1MgKz0gLVdzdHJpY3QtcHJvdG90eXBlcworREVWRUxPUEVSX0NGTEFHUyArPSAtV3VudXNlZAorREVWRUxPUEVSX0NGTEFHUyArPSAtV3ZsYQorCitERVZFTE9QRVJfQ0ZMQUdTICs9IC1ERU5BQkxFX1NIQTI1NgorCitpZm5kZWYgQ09NUElMRVJfRkVBVFVSRVMKK0NPTVBJTEVSX0ZFQVRVUkVTIDo9ICQoc2hlbGwgLi9kZXRlY3QtY29tcGlsZXIgJChDQykpCitlbmRpZgorCitpZm5lcSAoJChmaWx0ZXIgY2xhbmc0LCQoQ09NUElMRVJfRkVBVFVSRVMpKSwpCitERVZFTE9QRVJfQ0ZMQUdTICs9IC1XdGF1dG9sb2dpY2FsLWNvbnN0YW50LW91dC1vZi1yYW5nZS1jb21wYXJlCitlbmRpZgorCitpZm5lcSAoJChvciAkKGZpbHRlciBnY2M2LCQoQ09NUElMRVJfRkVBVFVSRVMpKSwkKGZpbHRlciBjbGFuZzQsJChDT01QSUxFUl9GRUFUVVJFUykpKSwpCitERVZFTE9QRVJfQ0ZMQUdTICs9IC1XZXh0cmEKKyMgaWYgYSBmdW5jdGlvbiBpcyBwdWJsaWMsIHRoZXJlIHNob3VsZCBiZSBhIHByb3RvdHlwZSBhbmQgdGhlIHJpZ2h0CisjIGhlYWRlciBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZC4gSWYgbm90LCBpdCBzaG91bGQgYmUgc3RhdGljLgorREVWRUxPUEVSX0NGTEFHUyArPSAtV21pc3NpbmctcHJvdG90eXBlcworaWZlcSAoJChmaWx0ZXIgZXh0cmEtYWxsLCQoREVWT1BUUykpLCkKKyMgVGhlc2UgYXJlIGRpc2FibGVkIGJlY2F1c2Ugd2UgaGF2ZSB0aGVzZSBhbGwgb3ZlciB0aGUgcGxhY2UuCitERVZFTE9QRVJfQ0ZMQUdTICs9IC1Xbm8tZW1wdHktYm9keQorREVWRUxPUEVSX0NGTEFHUyArPSAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzCitERVZFTE9QRVJfQ0ZMQUdTICs9IC1Xbm8tc2lnbi1jb21wYXJlCitERVZFTE9QRVJfQ0ZMQUdTICs9IC1Xbm8tdW51c2VkLXBhcmFtZXRlcgorZW5kaWYKK2VuZGlmCisKKyMgdW5pbml0aWFsaXplZCB3YXJuaW5ncyBvbiBnY2MgNC45LjIgaW4geGRpZmYveGRpZmZpLmMgYW5kIGNvbmZpZy5jCisjIG5vdCB3b3J0aCBmaXhpbmcgc2luY2UgbmV3ZXIgY29tcGlsZXJzIGNvcnJlY3RseSBzdG9wIGNvbXBsYWluaW5nCitpZm5lcSAoJChmaWx0ZXIgZ2NjNCwkKENPTVBJTEVSX0ZFQVRVUkVTKSksKQoraWZlcSAoJChmaWx0ZXIgZ2NjNSwkKENPTVBJTEVSX0ZFQVRVUkVTKSksKQorREVWRUxPUEVSX0NGTEFHUyArPSAtV25vLXVuaW5pdGlhbGl6ZWQKK2VuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvY29uZmlnLm1hay5pbiBiL2NvbmZpZy5tYWsuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZhNmQwZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5tYWsuaW4KQEAgLTAsMCArMSwyNCBAQAorIyBnaXQgTWFrZWZpbGUgY29uZmlndXJhdGlvbiwgaW5jbHVkZWQgaW4gbWFpbiBNYWtlZmlsZQorIyBAY29uZmlndXJlX2lucHV0QAorCitDQyA9IEBDQ0AKK0NGTEFHUyA9IEBDRkxBR1NACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0xERkxBR1MgPSBATERGTEFHU0AKK0FSID0gQEFSQAorVEFSID0gQFRBUkAKK0RJRkYgPSBARElGRkAKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACisjSU5TVEFMTCA9IEBJTlNUQUxMQAkJIyBuZWVkcyBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gc291cmNlcworCitwcmVmaXggPSBAcHJlZml4QAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitiaW5kaXIgPSBAYmluZGlyQAorZ2l0ZXhlY2RpciA9IEBsaWJleGVjZGlyQC9naXQtY29yZQorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACit0ZW1wbGF0ZV9kaXIgPSBAZGF0YWRpckAvZ2l0LWNvcmUvdGVtcGxhdGVzCitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorCittYW5kaXIgPSBAbWFuZGlyQAoraHRtbGRpciA9IEBodG1sZGlyQApkaWZmIC0tZ2l0IGEvY29uZmlnLm1hay51bmFtZSBiL2NvbmZpZy5tYWsudW5hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlYmE2OQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5tYWsudW5hbWUKQEAgLTAsMCArMSw3ODIgQEAKKyMgUGxhdGZvcm0gc3BlY2lmaWMgTWFrZWZpbGUgdHdlYWtzIGJhc2VkIG9uIHVuYW1lIGRldGVjdGlvbgorCisjIERlZmluZSBOT19TQUZFU0VIIGlmIHlvdSBuZWVkIE1TVkMvVmlzdWFsIFN0dWRpbyB0byBpZ25vcmUgdGhlIGxhY2sgb2YKKyMgTWljcm9zb2Z0J3MgU2FmZSBFeGNlcHRpb24gSGFuZGxpbmcgaW4gbGlicmFyaWVzIChzdWNoIGFzIHpsaWIpLgorIyBUeXBpY2FsbHkgcmVxdWlyZWQgZm9yIFZTMjAxMysvMzItYml0IGNvbXBpbGF0aW9uIG9uIFZpc3RhKyB2ZXJzaW9ucy4KKwordW5hbWVfUyA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtcyAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCit1bmFtZV9NIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1tIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKK3VuYW1lX08gOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLW8gMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQordW5hbWVfUiA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtciAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCit1bmFtZV9QIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1wIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKK3VuYW1lX1YgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXYgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQorCitpZmRlZiBNU1ZDCisJIyBhdm9pZCB0aGUgTWluZ1cgYW5kIEN5Z3dpbiBjb25maWd1cmF0aW9uIHNlY3Rpb25zCisJdW5hbWVfUyA6PSBXaW5kb3dzCisJdW5hbWVfTyA6PSBXaW5kb3dzCisKKwkjIEdlbmVyYXRlIGFuZCBpbmNsdWRlIG1ha2VmaWxlIHZhcmlhYmxlcyB0aGF0IHBvaW50IHRvIHRoZQorCSMgY3VycmVudGx5IGluc3RhbGxlZCBzZXQgb2YgTVNWQyBjb21tYW5kIGxpbmUgdG9vbHMuCitjb21wYXQvdmNidWlsZC9NU1ZDLURFRlMtR0VOOiBjb21wYXQvdmNidWlsZC9maW5kX3ZzX2Vudi5iYXQKKwlAIiQ8IiB8IHRyICdcXCcgLyA+IiRAIgoraW5jbHVkZSBjb21wYXQvdmNidWlsZC9NU1ZDLURFRlMtR0VOCisKKwkjIFNlZSBpZiB2Y3BrZyBhbmQgdGhlIHZjcGtnLWJ1aWxkIHZlcnNpb25zIG9mIHRoZSB0aGlyZC1wYXJ0eQorCSMgbGlicmFyaWVzIHRoYXQgd2UgdXNlIGFyZSBpbnN0YWxsZWQuICBXZSBpbmNsdWRlIHRoZSByZXN1bHQKKwkjIHRvIGdldCAkKHZjcGtnXyopIHZhcmlhYmxlcyBkZWZpbmVkIGZvciB0aGUgTWFrZWZpbGUuCitpZmVxICgsJChTS0lQX1ZDUEtHKSkKK2NvbXBhdC92Y2J1aWxkL1ZDUEtHLURFRlM6IGNvbXBhdC92Y2J1aWxkL3ZjcGtnX2luc3RhbGwuYmF0CisJQCIkPCIKK2luY2x1ZGUgY29tcGF0L3ZjYnVpbGQvVkNQS0ctREVGUworZW5kaWYKK2VuZGlmCisKKyMgV2UgY2hvb3NlIHRvIGF2b2lkICJpZiAuLiBlbHNlIGlmIC4uIGVsc2UgLi4gZW5kaWYgZW5kaWYiCisjIGJlY2F1c2UgbWFpbnRhaW5pbmcgdGhlIG5lc3RpbmcgdG8gbWF0Y2ggaXMgYSBwYWluLiAgSWYKKyMgd2UgaGFkICJlbGlmIiB0aGluZ3Mgd291bGQgaGF2ZSBiZWVuIG11Y2ggbmljZXIuLi4KKworaWZlcSAoJCh1bmFtZV9TKSxPU0YxKQorCSMgTmVlZCB0aGlzIGZvciB1X3Nob3J0IGRlZmluaXRpb25zIGV0IGFsCisJQkFTSUNfQ0ZMQUdTICs9IC1EX09TRl9TT1VSQ0UKKwlTT0NLTEVOX1QgPSBpbnQKKwlOT19TVFJUT1VMTCA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLExpbnV4KQorCUhBVkVfQUxMT0NBX0ggPSBZZXNQbGVhc2UKKwlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJSEFWRV9QQVRIU19IID0gWWVzUGxlYXNlCisJTElCQ19DT05UQUlOU19MSUJJTlRMID0gWWVzUGxlYXNlCisJSEFWRV9ERVZfVFRZID0gWWVzUGxlYXNlCisJSEFWRV9DTE9DS19HRVRUSU1FID0gWWVzUGxlYXNlCisJSEFWRV9DTE9DS19NT05PVE9OSUMgPSBZZXNQbGVhc2UKKwkjIC1scnQgaXMgbmVlZGVkIGZvciBjbG9ja19nZXR0aW1lIG9uIGdsaWJjIDw9IDIuMTYKKwlORUVEU19MSUJSVCA9IFllc1BsZWFzZQorCUhBVkVfR0VUREVMSU0gPSBZZXNQbGVhc2UKKwlTQU5FX1RFWFRfR1JFUD0tYQorCUZSRUFEX1JFQURTX0RJUkVDVE9SSUVTID0gVW5mb3J0dW5hdGVseVllcworCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfU1lTSU5GTworCVBST0NGU19FWEVDVVRBQkxFX1BBVEggPSAvcHJvYy9zZWxmL2V4ZQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksR05VL2tGcmVlQlNEKQorCUhBVkVfQUxMT0NBX0ggPSBZZXNQbGVhc2UKKwlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJSEFWRV9QQVRIU19IID0gWWVzUGxlYXNlCisJRElSX0hBU19CU0RfR1JPVVBfU0VNQU5USUNTID0gWWVzUGxlYXNlCisJTElCQ19DT05UQUlOU19MSUJJTlRMID0gWWVzUGxlYXNlCisJRlJFQURfUkVBRFNfRElSRUNUT1JJRVMgPSBVbmZvcnR1bmF0ZWx5WWVzCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxVbml4V2FyZSkKKwlDQyA9IGNjCisJTkVFRFNfU09DS0VUID0gWWVzUGxlYXNlCisJTkVFRFNfTlNMID0gWWVzUGxlYXNlCisJTkVFRFNfU1NMX1dJVEhfQ1JZUFRPID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlTSEVMTF9QQVRIID0gL3Vzci9sb2NhbC9iaW4vYmFzaAorCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwlOT19IU1RSRVJST1IgPSBZZXNQbGVhc2UKKwlCQVNJQ19DRkxBR1MgKz0gLUt0aHJlYWQKKwlCQVNJQ19DRkxBR1MgKz0gLUkvdXNyL2xvY2FsL2luY2x1ZGUKKwlCQVNJQ19MREZMQUdTICs9IC1ML3Vzci9sb2NhbC9saWIKKwlJTlNUQUxMID0gZ2luc3RhbGwKKwlUQVIgPSBndGFyCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksU0NPX1NWKQorCWlmZXEgKCQodW5hbWVfUiksMy4yKQorCQlDRkxBR1MgPSAtTzIKKwllbmRpZgorCWlmZXEgKCQodW5hbWVfUiksNSkKKwkJQ0MgPSBjYworCQlCQVNJQ19DRkxBR1MgKz0gLUt0aHJlYWQKKwllbmRpZgorCU5FRURTX1NPQ0tFVCA9IFllc1BsZWFzZQorCU5FRURTX05TTCA9IFllc1BsZWFzZQorCU5FRURTX1NTTF9XSVRIX0NSWVBUTyA9IFllc1BsZWFzZQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJU0hFTExfUEFUSCA9IC91c3IvYmluL2Jhc2gKKwlOT19JUFY2ID0gWWVzUGxlYXNlCisJTk9fSFNUUkVSUk9SID0gWWVzUGxlYXNlCisJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCisJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCUlOU1RBTEwgPSBnaW5zdGFsbAorCVRBUiA9IGd0YXIKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLERhcndpbikKKwlORUVEU19DUllQVE9fV0lUSF9TU0wgPSBZZXNQbGVhc2UKKwlORUVEU19TU0xfV0lUSF9DUllQVE8gPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCSMgTm90ZTogJCh1bmFtZV9SKSBnaXZlcyB1cyB0aGUgdW5kZXJseWluZyBEYXJ3aW4gdmVyc2lvbi4KKwkjIC0gTWFjT1MgMTAuMC4qIGFuZCBNYWNPUyAxMC4xLjAgPSBEYXJ3aW4gMS4qCisJIyAtIE1hY09TIDEwLnguKiA9IERhcndpbiAoeCs0KS4qIGZvciAoMSA8PSB4KQorCSMgaS5lLiAiYmVnaW5zIHdpdGggWzE1Njc4XSBhbmQgYSBkb3QiIG1lYW5zICIxMC40Liogb3Igb2xkZXIiLgorCWlmZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9SKSIgOiAnWzE1Njc4XVwuJyksMikKKwkJT0xEX0lDT05WID0gVW5mb3J0dW5hdGVseVllcworCQlOT19BUFBMRV9DT01NT05fQ1JZUFRPID0gWWVzUGxlYXNlCisJZW5kaWYKKwlpZmVxICgkKHNoZWxsIGV4cHIgIiQodW5hbWVfUikiIDogJ1sxNV1cLicpLDIpCisJCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKKwllbmRpZgorCWlmZXEgKCQoc2hlbGwgdGVzdCAiYGV4cHIgIiQodW5hbWVfUikiIDogJ1woWzAtOV1bMC05XSpcKVwuJ2AiIC1nZSAxMSAmJiBlY2hvIDEpLDEpCisJCUhBVkVfR0VUREVMSU0gPSBZZXNQbGVhc2UKKwllbmRpZgorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCVVTRV9TVF9USU1FU1BFQyA9IFllc1BsZWFzZQorCUhBVkVfREVWX1RUWSA9IFllc1BsZWFzZQorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9wcmVjb21wb3NlX3V0ZjgubworCUJBU0lDX0NGTEFHUyArPSAtRFBSRUNPTVBPU0VfVU5JQ09ERQorCUJBU0lDX0NGTEFHUyArPSAtRFBST1RFQ1RfSEZTX0RFRkFVTFQ9MQorCUhBVkVfQlNEX1NZU0NUTCA9IFllc1BsZWFzZQorCUZSRUFEX1JFQURTX0RJUkVDVE9SSUVTID0gVW5mb3J0dW5hdGVseVllcworCUhBVkVfTlNfR0VUX0VYRUNVVEFCTEVfUEFUSCA9IFllc1BsZWFzZQorCisJIyBXb3JrYXJvdW5kIGZvciBgZ2V0dGV4dGAgYmVpbmcga2VnLW9ubHkgYW5kIG5vdCBldmVuIGJlaW5nIGxpbmtlZCB2aWEKKwkjIGBicmV3IGxpbmsgLS1mb3JjZSBnZXR0ZXh0YCwgc2hvdWxkIGJlIG9ic29sZXRlIGFzIG9mCisJIyBodHRwczovL2dpdGh1Yi5jb20vSG9tZWJyZXcvaG9tZWJyZXctY29yZS9wdWxsLzUzNDg5CisJaWZlcSAoJChzaGVsbCB0ZXN0IC1kIC91c3IvbG9jYWwvb3B0L2dldHRleHQvICYmIGVjaG8geSkseSkKKwkJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1JL3Vzci9sb2NhbC9vcHQvZ2V0dGV4dC9pbmNsdWRlCisJCUJBU0lDX0xERkxBR1MgKz0gLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvb3B0L2dldHRleHQvbGliCisJCWlmZXEgKCQoc2hlbGwgdGVzdCAteCAvdXNyL2xvY2FsL29wdC9nZXR0ZXh0L2Jpbi9tc2dmbXQgJiYgZWNobyB5KSx5KQorCQkJTVNHRk1UID0gL3Vzci9sb2NhbC9vcHQvZ2V0dGV4dC9iaW4vbXNnZm10CisJCWVuZGlmCisJZW5kaWYKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLFN1bk9TKQorCU5FRURTX1NPQ0tFVCA9IFllc1BsZWFzZQorCU5FRURTX05TTCA9IFllc1BsZWFzZQorCVNIRUxMX1BBVEggPSAvYmluL2Jhc2gKKwlTQU5FX1RPT0xfUEFUSCA9IC91c3IveHBnNi9iaW46L3Vzci94cGc0L2JpbgorCUhBVkVfQUxMT0NBX0ggPSBZZXNQbGVhc2UKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJTk9fTVNHRk1UX0VYVEVOREVEX09QVElPTlMgPSBZZXNQbGVhc2UKKwlIQVZFX0RFVl9UVFkgPSBZZXNQbGVhc2UKKwlpZmVxICgkKHVuYW1lX1IpLDUuNikKKwkJU09DS0xFTl9UID0gaW50CisJCU5PX0hTVFJFUlJPUiA9IFllc1BsZWFzZQorCQlOT19JUFY2ID0gWWVzUGxlYXNlCisJCU5PX1NPQ0tBRERSX1NUT1JBR0UgPSBZZXNQbGVhc2UKKwkJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKKwkJTk9fU0VURU5WID0gWWVzUGxlYXNlCisJCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKKwkJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJCUdJVF9URVNUX0NNUCA9IGNtcAorCWVuZGlmCisJaWZlcSAoJCh1bmFtZV9SKSw1LjcpCisJCU5FRURTX1JFU09MViA9IFllc1BsZWFzZQorCQlOT19JUFY2ID0gWWVzUGxlYXNlCisJCU5PX1NPQ0tBRERSX1NUT1JBR0UgPSBZZXNQbGVhc2UKKwkJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKKwkJTk9fU0VURU5WID0gWWVzUGxlYXNlCisJCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKKwkJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJCUdJVF9URVNUX0NNUCA9IGNtcAorCWVuZGlmCisJaWZlcSAoJCh1bmFtZV9SKSw1LjgpCisJCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCQlOT19TVFJUT1VNQVggPSBZZXNQbGVhc2UKKwkJR0lUX1RFU1RfQ01QID0gY21wCisJZW5kaWYKKwlpZmVxICgkKHVuYW1lX1IpLDUuOSkKKwkJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKKwkJTk9fU0VURU5WID0gWWVzUGxlYXNlCisJCU5PX1NUUlRPVU1BWCA9IFllc1BsZWFzZQorCQlHSVRfVEVTVF9DTVAgPSBjbXAKKwllbmRpZgorCUlOU1RBTEwgPSAvdXNyL3VjYi9pbnN0YWxsCisJVEFSID0gZ3RhcgorCUJBU0lDX0NGTEFHUyArPSAtRF9fRVhURU5TSU9OU19fIC1EX19zdW5fXworZW5kaWYKK2lmZXEgKCQodW5hbWVfTyksQ3lnd2luKQorCWlmZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9SKSIgOiAnMVwuWzEtNl1cLicpLDQpCisJCU5PX0RfVFlQRV9JTl9ESVJFTlQgPSBZZXNQbGVhc2UKKwkJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCQlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwkJTk9fU1lNTElOS19IRUFEID0gWWVzUGxlYXNlCisJCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwkJT0xEX0lDT05WID0gVW5mb3J0dW5hdGVseVllcworCQkjIFRoZXJlIGFyZSBjb25mbGljdGluZyByZXBvcnRzIGFib3V0IHRoaXMuCisJCSMgT24gc29tZSBib3hlcyBOT19NTUFQIGlzIG5lZWRlZCwgYW5kIG5vdCBzbyBlbHNld2hlcmUuCisJCSMgVHJ5IGNvbW1lbnRpbmcgdGhpcyBvdXQgaWYgeW91IHN1c3BlY3QgTU1BUCBpcyBtb3JlIGVmZmljaWVudAorCQlOT19NTUFQID0gWWVzUGxlYXNlCisJZWxzZQorCQlOT19SRUdFWCA9IFVuZm9ydHVuYXRlbHlZZXMKKwllbmRpZgorCUhBVkVfQUxMT0NBX0ggPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCU5PX0ZBU1RfV09SS0lOR19ESVJFQ1RPUlkgPSBVbmZvcnR1bmF0ZWx5WWVzCisJTk9fU1RfQkxPQ0tTX0lOX1NUUlVDVF9TVEFUID0gWWVzUGxlYXNlCisJWCA9IC5leGUKKwlVTlJFTElBQkxFX0ZTVEFUID0gVW5mb3J0dW5hdGVseVllcworCU9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMgPSBVbmZvcnR1bmF0ZWx5TmVlZHNUbworCU1NQVBfUFJFVkVOVFNfREVMRVRFID0gVW5mb3J0dW5hdGVseVllcworCUNPTVBBVF9PQkpTICs9IGNvbXBhdC93aW4zMi9wYXRoLXV0aWxzLm8KKwlGUkVBRF9SRUFEU19ESVJFQ1RPUklFUyA9IFVuZm9ydHVuYXRlbHlZZXMKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLEZyZWVCU0QpCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwkjIFZlcnNpb25zIHVwIHRvIDEwLjEgcmVxdWlyZSBPTERfSUNPTlY7IDEwLjIgYW5kIGJleW9uZCBkb24ndC4KKwkjIEEgdHlwaWNhbCB2ZXJzaW9uIHN0cmluZyBsb29rcyBsaWtlICIxMC4yLVJFTEVBU0UiLgorCWlmZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9SKSIgOiAnWzEtOV1cLicpLDIpCisJCU9MRF9JQ09OViA9IFllc1BsZWFzZQorCWVuZGlmCisJaWZlcSAoJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJCh1bmFtZV9SKSkpLDEwLjApCisJCU9MRF9JQ09OViA9IFllc1BsZWFzZQorCWVuZGlmCisJaWZlcSAoJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJCh1bmFtZV9SKSkpLDEwLjEpCisJCU9MRF9JQ09OViA9IFllc1BsZWFzZQorCWVuZGlmCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCisJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCisJRElSX0hBU19CU0RfR1JPVVBfU0VNQU5USUNTID0gWWVzUGxlYXNlCisJVVNFX1NUX1RJTUVTUEVDID0gWWVzUGxlYXNlCisJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1IpIiA6ICc0XC4nKSwyKQorCQlQVEhSRUFEX0xJQlMgPSAtcHRocmVhZAorCQlOT19VSU5UTUFYX1QgPSBZZXNQbGVhc2UKKwkJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJZW5kaWYKKwlQWVRIT05fUEFUSCA9IC91c3IvbG9jYWwvYmluL3B5dGhvbgorCVBFUkxfUEFUSCA9IC91c3IvbG9jYWwvYmluL3BlcmwKKwlIQVZFX1BBVEhTX0ggPSBZZXNQbGVhc2UKKwlIQVZFX0JTRF9TWVNDVEwgPSBZZXNQbGVhc2UKKwlIQVZFX0JTRF9LRVJOX1BST0NfU1lTQ1RMID0gWWVzUGxlYXNlCisJUEFHRVJfRU5WID0gTEVTUz1GUlggTFY9LWMgTU9SRT1GUlgKKwlGUkVBRF9SRUFEU19ESVJFQ1RPUklFUyA9IFVuZm9ydHVuYXRlbHlZZXMKKwlGSUxFTk9fSVNfQV9NQUNSTyA9IFVuZm9ydHVuYXRlbHlZZXMKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLE9wZW5CU0QpCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCVVTRV9TVF9USU1FU1BFQyA9IFllc1BsZWFzZQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCisJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCisJSEFWRV9QQVRIU19IID0gWWVzUGxlYXNlCisJSEFWRV9CU0RfU1lTQ1RMID0gWWVzUGxlYXNlCisJSEFWRV9CU0RfS0VSTl9QUk9DX1NZU0NUTCA9IFllc1BsZWFzZQorCVBST0NGU19FWEVDVVRBQkxFX1BBVEggPSAvcHJvYy9jdXJwcm9jL2ZpbGUKKwlGUkVBRF9SRUFEU19ESVJFQ1RPUklFUyA9IFVuZm9ydHVuYXRlbHlZZXMKKwlGSUxFTk9fSVNfQV9NQUNSTyA9IFVuZm9ydHVuYXRlbHlZZXMKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLE1pckJTRCkKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJVVNFX1NUX1RJTUVTUEVDID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlIQVZFX1BBVEhTX0ggPSBZZXNQbGVhc2UKKwlIQVZFX0JTRF9TWVNDVEwgPSBZZXNQbGVhc2UKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLE5ldEJTRCkKKwlpZmVxICgkKHNoZWxsIGV4cHIgIiQodW5hbWVfUikiIDogJ1swMV1cLicpLDIpCisJCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJZW5kaWYKKwlCQVNJQ19DRkxBR1MgKz0gLUkvdXNyL3BrZy9pbmNsdWRlCisJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvcGtnL2xpYiAkKENDX0xEX0RZTlBBVEgpL3Vzci9wa2cvbGliCisJVVNFX1NUX1RJTUVTUEVDID0gWWVzUGxlYXNlCisJSEFWRV9QQVRIU19IID0gWWVzUGxlYXNlCisJSEFWRV9CU0RfU1lTQ1RMID0gWWVzUGxlYXNlCisJSEFWRV9CU0RfS0VSTl9QUk9DX1NZU0NUTCA9IFllc1BsZWFzZQorCVBST0NGU19FWEVDVVRBQkxFX1BBVEggPSAvcHJvYy9jdXJwcm9jL2V4ZQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksQUlYKQorCURFRkFVTFRfUEFHRVIgPSBtb3JlCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKKwlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJTk9fTlNFQyA9IFllc1BsZWFzZQorCU5PX1JFR0VYID0gTmVlZHNTdGFydEVuZAorCUZSRUFEX1JFQURTX0RJUkVDVE9SSUVTID0gVW5mb3J0dW5hdGVseVllcworCUlOVEVSTkFMX1FTT1JUID0gVW5mb3J0dW5hdGVseVllcworCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJQkFTSUNfQ0ZMQUdTICs9IC1EX0xBUkdFX0ZJTEVTCisJRklMRU5PX0lTX0FfTUFDUk8gPSBVbmZvcnR1bmF0ZWx5WWVzCisJTkVFRF9BQ0NFU1NfUk9PVF9IQU5ETEVSID0gVW5mb3J0dW5hdGVseVllcworCWlmZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9WKSIgOiAnWzEyMzRdJyksMSkKKwkJTk9fUFRIUkVBRFMgPSBZZXNQbGVhc2UKKwllbHNlCisJCVBUSFJFQURfTElCUyA9IC1scHRocmVhZAorCWVuZGlmCisJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1YpLiQodW5hbWVfUikiIDogJzVcLjEnKSwzKQorCQlJTkxJTkUgPSAnJworCWVuZGlmCisJR0lUX1RFU1RfQ01QID0gY21wCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxHTlUpCisJIyBHTlUvSHVyZAorCUhBVkVfQUxMT0NBX0ggPSBZZXNQbGVhc2UKKwlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJSEFWRV9QQVRIU19IID0gWWVzUGxlYXNlCisJTElCQ19DT05UQUlOU19MSUJJTlRMID0gWWVzUGxlYXNlCisJRlJFQURfUkVBRFNfRElSRUNUT1JJRVMgPSBVbmZvcnR1bmF0ZWx5WWVzCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxJUklYKQorCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKKwkjIFdoZW4gY29tcGlsZWQgd2l0aCB0aGUgTUlQU3BybyA3LjQuNG0gY29tcGlsZXIsIGFuZCB3aXRob3V0IHB0aHJlYWRzCisJIyAoaS5lLiBOT19QVEhSRUFEUyBpcyBzZXQpLCBhbmQgX3dpdGhfIE1NQVAgKGkuZS4gTk9fTU1BUCBpcyBub3Qgc2V0KSwKKwkjIGdpdCBkaWVzIHdpdGggYSBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBmaXJzdAorCSMgZW50cnkgb2YgYSByZWZsb2cuICBUaGUgY29uc2VydmF0aXZlIGNob2ljZSBpcyBtYWRlIHRvIGFsd2F5cyBzZXQKKwkjIE5PX01NQVAuICBJZiB5b3Ugc3VzcGVjdCB0aGF0IHlvdXIgY29tcGlsZXIgaXMgbm90IGFmZmVjdGVkIGJ5IHRoaXMKKwkjIGlzc3VlLCBjb21tZW50IG91dCB0aGUgTk9fTU1BUCBzdGF0ZW1lbnQuCisJTk9fTU1BUCA9IFllc1BsZWFzZQorCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJU05QUklOVEZfUkVUVVJOU19CT0dVUyA9IFllc1BsZWFzZQorCVNIRUxMX1BBVEggPSAvdXNyL2dudS9iaW4vYmFzaAorCU5FRURTX0xJQkdFTiA9IFllc1BsZWFzZQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksSVJJWDY0KQorCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKKwkjIFdoZW4gY29tcGlsZWQgd2l0aCB0aGUgTUlQU3BybyA3LjQuNG0gY29tcGlsZXIsIGFuZCB3aXRob3V0IHB0aHJlYWRzCisJIyAoaS5lLiBOT19QVEhSRUFEUyBpcyBzZXQpLCBhbmQgX3dpdGhfIE1NQVAgKGkuZS4gTk9fTU1BUCBpcyBub3Qgc2V0KSwKKwkjIGdpdCBkaWVzIHdpdGggYSBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBmaXJzdAorCSMgZW50cnkgb2YgYSByZWZsb2cuICBUaGUgY29uc2VydmF0aXZlIGNob2ljZSBpcyBtYWRlIHRvIGFsd2F5cyBzZXQKKwkjIE5PX01NQVAuICBJZiB5b3Ugc3VzcGVjdCB0aGF0IHlvdXIgY29tcGlsZXIgaXMgbm90IGFmZmVjdGVkIGJ5IHRoaXMKKwkjIGlzc3VlLCBjb21tZW50IG91dCB0aGUgTk9fTU1BUCBzdGF0ZW1lbnQuCisJTk9fTU1BUCA9IFllc1BsZWFzZQorCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJU05QUklOVEZfUkVUVVJOU19CT0dVUyA9IFllc1BsZWFzZQorCVNIRUxMX1BBVEggPSAvdXNyL2dudS9iaW4vYmFzaAorCU5FRURTX0xJQkdFTiA9IFllc1BsZWFzZQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksSFAtVVgpCisJSU5MSU5FID0gX19pbmxpbmUKKwlOT19JUFY2ID0gWWVzUGxlYXNlCisJTk9fU0VURU5WID0gWWVzUGxlYXNlCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKKwlOT19IU1RSRVJST1IgPSBZZXNQbGVhc2UKKwlOT19TWVNfU0VMRUNUX0ggPSBZZXNQbGVhc2UKKwlTTlBSSU5URl9SRVRVUk5TX0JPR1VTID0gWWVzUGxlYXNlCisJTk9fTlNFQyA9IFllc1BsZWFzZQorCWlmZXEgKCQodW5hbWVfUiksQi4xMS4wMCkKKwkJTk9fSU5FVF9OVE9QID0gWWVzUGxlYXNlCisJCU5PX0lORVRfUFRPTiA9IFllc1BsZWFzZQorCWVuZGlmCisJaWZlcSAoJCh1bmFtZV9SKSxCLjEwLjIwKQorCQkjIE92ZXJyaWRlIEhQLVVYIDExLnggc2V0dGluZzoKKwkJSU5MSU5FID0KKwkJU09DS0xFTl9UID0gc2l6ZV90CisJCU5PX1BSRUFEID0gWWVzUGxlYXNlCisJCU5PX0lORVRfTlRPUCA9IFllc1BsZWFzZQorCQlOT19JTkVUX1BUT04gPSBZZXNQbGVhc2UKKwllbmRpZgorCUdJVF9URVNUX0NNUCA9IGNtcAorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksV2luZG93cykKKwlHSVRfVkVSU0lPTiA6PSAkKEdJVF9WRVJTSU9OKS5NU1ZDCisJcGF0aHNlcCA9IDsKKwkjIEFzc3VtZSB0aGF0IHRoaXMgaXMgYnVpbHQgaW4gR2l0IGZvciBXaW5kb3dzJyBTREsKKwlpZmVxIChNSU5HVzMyLCQoTVNZU1RFTSkpCisJCXByZWZpeCA9IC9taW5ndzMyCisJZWxzZQorCQlwcmVmaXggPSAvbWluZ3c2NAorCWVuZGlmCisJIyBQcmVwZW5kIE1TVkMgNjQtYml0IHRvb2wtY2hhaW4gdG8gUEFUSC4KKwkjCisJIyBBIHJlZ3VsYXIgR2l0IEJhc2ggKmRvZXMgbm90KiBoYXZlIGNsLmV4ZSBpbiBpdHMgJFBBVEguIEFzIHRoZXJlIGlzIGEKKwkjIGxpbmsuZXhlIG5leHQgdG8sIGFuZCByZXF1aXJlZCBieSwgY2wuZXhlLCB3ZSBoYXZlIHRvIHByZXBlbmQgdGhpcworCSMgb250byB0aGUgZXhpc3RpbmcgJFBBVEguCisJIworCVNBTkVfVE9PTF9QQVRIID89ICQobXN2Y19iaW5fZGlyX21zeXMpCisJSEFWRV9BTExPQ0FfSCA9IFllc1BsZWFzZQorCU5PX1BSRUFEID0gWWVzUGxlYXNlCisJTkVFRFNfQ1JZUFRPX1dJVEhfU1NMID0gWWVzUGxlYXNlCisJTk9fTElCR0VOX0ggPSBZZXNQbGVhc2UKKwlOT19QT0xMID0gWWVzUGxlYXNlCisJTk9fU1lNTElOS19IRUFEID0gWWVzUGxlYXNlCisJTk9fSVBWNiA9IFllc1BsZWFzZQorCU5PX1VOSVhfU09DS0VUUyA9IFllc1BsZWFzZQorCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlOT19TVFJUT1VNQVggPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJTk9fSU5UVFlQRVNfSCA9IFllc1BsZWFzZQorCSMgVlMyMDE1IHdpdGggVUNSVCBjbGFpbXMgdGhhdCBzbnByaW50ZiBhbmQgZnJpZW5kcyBhcmUgQzk5IGNvbXBsaWFudCwKKwkjIHNvIHdlIGRvbid0IG5lZWQgdGhpczoKKwkjCisJIyAgIFNOUFJJTlRGX1JFVFVSTlNfQk9HVVMgPSBZZXNQbGVhc2UKKwlOT19TVk5fVEVTVFMgPSBZZXNQbGVhc2UKKwlSVU5USU1FX1BSRUZJWCA9IFllc1BsZWFzZQorCUhBVkVfV1BHTVBUUiA9IFllc1dlRG8KKwlOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQgPSBZZXNQbGVhc2UKKwlVU0VfV0lOMzJfTU1BUCA9IFllc1BsZWFzZQorCU1NQVBfUFJFVkVOVFNfREVMRVRFID0gVW5mb3J0dW5hdGVseVllcworCSMgVVNFX05FRF9BTExPQ0FUT1IgPSBZZXNQbGVhc2UKKwlVTlJFTElBQkxFX0ZTVEFUID0gVW5mb3J0dW5hdGVseVllcworCU9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMgPSBVbmZvcnR1bmF0ZWx5TmVlZHNUbworCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJTk9fR0VUVEVYVCA9IFllc1BsZWFzZQorCU5PX1BZVEhPTiA9IFllc1BsZWFzZQorCUVUQUdTX1RBUkdFVCA9IEVUQUdTCisJTk9fUE9TSVhfR09PRElFUyA9IFVuZm9ydHVuYXRlbHlZZXMKKwlOQVRJVkVfQ1JMRiA9IFllc1BsZWFzZQorCURFRkFVTFRfSEVMUF9GT1JNQVQgPSBodG1sCisKKwlDQyA9IGNvbXBhdC92Y2J1aWxkL3NjcmlwdHMvY2xpbmsucGwKKwlBUiA9IGNvbXBhdC92Y2J1aWxkL3NjcmlwdHMvbGliLnBsCisJQ0ZMQUdTID0KKwlCQVNJQ19DRkxBR1MgPSAtbm9sb2dvIC1JLiAtSWNvbXBhdC92Y2J1aWxkL2luY2x1ZGUgLURXSU4zMiAtRF9DT05TT0xFIC1ESEFWRV9TVFJJTkdfSCAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIC1EX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURQorCUNPTVBBVF9PQkpTID0gY29tcGF0L21zdmMubyBjb21wYXQvd2luYW5zaS5vIFwKKwkJY29tcGF0L3dpbjMyL3BhdGgtdXRpbHMubyBcCisJCWNvbXBhdC93aW4zMi9wdGhyZWFkLm8gY29tcGF0L3dpbjMyL3N5c2xvZy5vIFwKKwkJY29tcGF0L3dpbjMyL3RyYWNlMl93aW4zMl9wcm9jZXNzX2luZm8ubyBcCisJCWNvbXBhdC93aW4zMi9kaXJlbnQubworCUNPTVBBVF9DRkxBR1MgPSAtRF9fVVNFX01JTkdXX0FDQ0VTUyAtRERFVEVDVF9NU1lTX1RUWSAtRE5PR0RJIC1ESEFWRV9TVFJJTkdfSCAtSWNvbXBhdCAtSWNvbXBhdC9yZWdleCAtSWNvbXBhdC93aW4zMiAtRFNUUklQX0VYVEVOU0lPTj1cIi5leGVcIgorCUJBU0lDX0xERkxBR1MgPSAtSUdOT1JFOjQyMTcgLUlHTk9SRTo0MDQ5IC1OT0xPR08gLUVOVFJZOndtYWluQ1JUU3RhcnR1cCAtU1VCU1lTVEVNOkNPTlNPTEUKKwkjIGludmFsaWRjb250aW51ZS5vYmogYWxsb3dzIEdpdCdzIHNvdXJjZSBjb2RlIHRvIGNsb3NlIHRoZSBzYW1lIGZpbGUKKwkjIGhhbmRsZSB0d2ljZSwgb3IgdG8gYWNjZXNzIHRoZSBvc2ZoYW5kbGUgb2YgYW4gYWxyZWFkeS1jbG9zZWQgc3Rkb3V0CisJIyBTZWUgaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczIzNTMzMC5hc3B4CisJRVhUTElCUyA9IHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIHdpbmluZXQubGliIHdzMl8zMi5saWIgaW52YWxpZGNvbnRpbnVlLm9iaiBrZXJuZWwzMi5saWIgbnRkbGwubGliCisJUFRIUkVBRF9MSUJTID0KKwlsaWIgPQorCUJBU0lDX0NGTEFHUyArPSAkKHZjcGtnX2luYykgJChzZGtfaW5jbHVkZXMpICQobXN2Y19pbmNsdWRlcykKK2lmbmRlZiBERUJVRworCUJBU0lDX0NGTEFHUyArPSAkKHZjcGtnX3JlbF9saWIpCitlbHNlCisJQkFTSUNfQ0ZMQUdTICs9ICQodmNwa2dfZGJnX2xpYikKK2VuZGlmCisJQkFTSUNfQ0ZMQUdTICs9ICQoc2RrX2xpYnMpICQobXN2Y19saWJzKQorCitpZm5lcSAoJChVU0VfTVNWQ19DUlREQkcpLCkKKwkjIE9wdGlvbmFsbHkgZW5hYmxlIG1lbW9yeSBsZWFrIHJlcG9ydGluZy4KKwlCQVNJQ19DRkxBR1MgKz0gLURVU0VfTVNWQ19DUlREQkcKK2VuZGlmCisJIyBBbHdheXMgZ2l2ZSAiLVppIiB0byB0aGUgY29tcGlsZXIgYW5kICItZGVidWciIHRvIGxpbmtlciAoZXZlbiBpbgorCSMgcmVsZWFzZSBtb2RlKSB0byBmb3JjZSBhIFBEQiB0byBiZSBnZW5lcmF0ZWQgKGxpa2UgUmVsV2l0aERlYkluZm8pLgorCUJBU0lDX0NGTEFHUyArPSAtWmkKKwlCQVNJQ19MREZMQUdTICs9IC1kZWJ1ZyAtWmYKKworaWZkZWYgTk9fU0FGRVNFSAorCUxERkxBR1MgKz0gLVNBRkVTRUg6Tk8KK2VuZGlmCisKK2lmbmRlZiBERUJVRworCUJBU0lDX0NGTEFHUyArPSAtR0wgLUd5IC1PMiAtT3ktIC1NRCAtRE5ERUJVRworCUJBU0lDX0xERkxBR1MgKz0gLXJlbGVhc2UgLUxUQ0cgL09QVDpSRUYgL09QVDpJQ0YgL0lOQ1JFTUVOVEFMOk5PIC9ERUJVR1RZUEU6Q1YsRklYVVAKKwlBUiArPSAtTFRDRworZWxzZQorCUJBU0lDX0NGTEFHUyArPSAtTURkIC1EREVCVUcgLURfREVCVUcKK2VuZGlmCisJWCA9IC5leGUKKworY29tcGF0L21zdmMubzogY29tcGF0L21zdmMuYyBjb21wYXQvbWluZ3cuYyBHSVQtQ0ZMQUdTCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxJbnRlcml4KQorCU5PX0lOSVRHUk9VUFMgPSBZZXNQbGVhc2UKKwlOT19JUFY2ID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX1NUUlRPVU1BWCA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKKwlpZmVxICgkKHVuYW1lX1IpLDMuNSkKKwkJTk9fSU5FVF9OVE9QID0gWWVzUGxlYXNlCisJCU5PX0lORVRfUFRPTiA9IFllc1BsZWFzZQorCQlOT19TT0NLQUREUl9TVE9SQUdFID0gWWVzUGxlYXNlCisJZW5kaWYKKwlpZmVxICgkKHVuYW1lX1IpLDUuMikKKwkJTk9fSU5FVF9OVE9QID0gWWVzUGxlYXNlCisJCU5PX0lORVRfUFRPTiA9IFllc1BsZWFzZQorCQlOT19TT0NLQUREUl9TVE9SQUdFID0gWWVzUGxlYXNlCisJZW5kaWYKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLE1pbml4KQorCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwlOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQgPSBZZXNQbGVhc2UKKwlOT19OU0VDID0gWWVzUGxlYXNlCisJTkVFRFNfTElCR0VOID0KKwlORUVEU19DUllQVE9fV0lUSF9TU0wgPSBZZXNQbGVhc2UKKwlORUVEU19SRVNPTFYgPQorCU5PX0hTVFJFUlJPUiA9IFllc1BsZWFzZQorCU5PX01NQVAgPSBZZXNQbGVhc2UKKwlOT19DVVJMID0KKwlOT19FWFBBVCA9CitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxOT05TVE9QX0tFUk5FTCkKKwkjIE5lZWRzIHNvbWUgQzk5IGZlYXR1cmVzLCAiaW5saW5lIiBpcyBqdXN0IG9uZSBvZiB0aGVtLgorCSMgSU5MSU5FPScnIHdvdWxkIGp1c3QgcmVwbGFjZSBvbmUgc2V0IG9mIHdhcm5pbmdzIHdpdGggYW5vdGhlciBhbmQKKwkjIHN0aWxsIG5vdCBjb21waWxlIGluIGM4OSBtb2RlLCBkdWUgdG8gbm9uLWNvbnN0IGFycmF5IGluaXRpYWxpemF0aW9ucy4KKwlDQyA9IGNjIC1jOTkKKwkjIEJ1aWxkIGRvd24tcmV2IGNvbXBhdGlibGUgb2JqZWN0cyB0aGF0IGRvbid0IHVzZSBvdXIgbmV3IGdldG9wdF9sb25nLgorCWlmZXEgKCQodW5hbWVfUikuJCh1bmFtZV9WKSxKMDYuMjEpCisJCUNDICs9IC1XUlZVPUowNi4yMAorCWVuZGlmCisJaWZlcSAoJCh1bmFtZV9SKS4kKHVuYW1lX1YpLEwxNy4wMikKKwkJQ0MgKz0gLVdSVlU9TDE2LjA1CisJZW5kaWYKKwkjIERpc2FibGUgYWxsIG9wdGltaXphdGlvbiwgc2VlbXMgdG8gcmVzdWx0IGluIGJhZCBjb2RlLCB3aXRoIC1PIG9yIC1PMgorCSMgb3IgZXZlbiAtTzEgKGRlZmF1bHQpLCAvdXNyL2xvY2FsL2xpYmV4ZWMvZ2l0LWNvcmUvZ2l0LXBhY2stb2JqZWN0cworCSMgYWJlbmRzIG9uICJnaXQgcHVzaCIuIE5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbi4KKwlDRkxBR1MgPSAtZyAtTzAgLVdpbmxpbmUKKwkjIFdlJ2Qgd2FudCBpdCB0byBiZSBoZXJlLgorCXByZWZpeCA9IC91c3IvbG9jYWwKKwkjIHBlcmwgYW5kIHB5dGhvbiBtdXN0IGJlIGluIC91c3IvYmluIG9uIE5vblN0b3AgLSBzdXBwbGllZCBieSBIUEUKKwkjIHdpdGggb3BlcmF0aW5nIHN5c3RlbSBpbiB0aGF0IG1hbmFnZWQgZGlyZWN0b3J5LgorCVBFUkxfUEFUSCA9IC91c3IvYmluL3BlcmwKKwlQWVRIT05fUEFUSCA9IC91c3IvYmluL3B5dGhvbgorCSMgVGhlIGN1cnJlbnQgL3Vzci9jb3JldXRpbHMvcm0gYXQgbG93ZXN0IHN1cHBvcnQgbGV2ZWwgZG9lcyBub3Qgd29yaworCSMgd2l0aCB0aGUgZ2l0IHRlc3Qgc3RydWN0dXJlLiBMb25nIHBhdGhzIGFzIGluCisJIyAndHJhc2ggZGlyZWN0b3J5Li4uJyBjYXVzZSBybSB0byB0ZXJtaW5hdGUgcHJlbWF0dXJlbHkgd2l0aG91dCBmdWxseQorCSMgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBhdCBPUyByZWxlYXNlcyBKMDYuMjEgYW5kIEwxNy4wMi4KKwkjIERlZmF1bHQgdG8gdGhlIG9sZGVyIHJtIHVudGlsIHRob3NlIHR3byByZWxlYXNlcyBhcmUgZGVwcmVjYXRlZC4KKwlSTSA9IC9iaW4vcm0gLWYKKwkjIEFzIGRldGVjdGVkIGJ5ICcuL2NvbmZpZ3VyZScuCisJIyBNaXNzZGV0ZWN0ZWQsIGhlbmNlIGNvbW1lbnRlZCBvdXQsIHNlZSBiZWxvdy4KKwkjTk9fQ1VSTCA9IFllc1BsZWFzZQorCSMgQWRkZWQgbWFudWFsbHksIHNlZSBhYm92ZS4KKwlORUVEU19TU0xfV0lUSF9DVVJMID0gWWVzUGxlYXNlCisJTkVFRFNfQ1JZUFRPX1dJVEhfU1NMID0gWWVzUGxlYXNlCisJSEFWRV9ERVZfVFRZID0gWWVzUGxlYXNlCisJSEFWRV9MSUJDSEFSU0VUX0ggPSBZZXNQbGVhc2UKKwlIQVZFX1NUUklOR1NfSCA9IFllc1BsZWFzZQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSU5UTF9CRUZPUkVfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlOT19TWVNfU0VMRUNUX0ggPSBVbmZvcnR1bmF0ZWx5WWVzCisJTk9fRF9UWVBFX0lOX0RJUkVOVCA9IFllc1BsZWFzZQorCU5PX0dFVFRFWFQgPSBZZXNQbGVhc2UKKwlOT19IU1RSRVJST1IgPSBZZXNQbGVhc2UKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCSMgQ3VycmVudGx5IGxpYmljb252LTEuOS4xLgorCU9MRF9JQ09OViA9IFVuZm9ydHVuYXRlbHlZZXMKKwlOT19SRUdFWCA9IE5lZWRzU3RhcnRFbmQKKwlOT19QVEhSRUFEUyA9IFVuZm9ydHVuYXRlbHlZZXMKKwlGUkVBRF9SRUFEU19ESVJFQ1RPUklFUyA9IFVuZm9ydHVuYXRlbHlZZXMKKworCSMgTm90IGRldGVjdGVkIChub3IgY2hlY2tlZCBmb3IpIGJ5ICcuL2NvbmZpZ3VyZScuCisJIyBXZSBkb24ndCBoYXZlIFNBX1JFU1RBUlQgb24gTm9uU3RvcCwgdW5mb3J0dW5hbGV0eS4KKwlDT01QQVRfQ0ZMQUdTICs9IC1EU0FfUkVTVEFSVD0wCisJIyBBcHBhcmVudGx5IG5lZWRlZCBpbiBjb21wYXQvZm5tYXRjaC9mbm1hdGNoLmMuCisJQ09NUEFUX0NGTEFHUyArPSAtREhBVkVfU1RSSU5HX0g9MQorCU5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVCA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKKwlOT19QUkVBRCA9IFllc1BsZWFzZQorCU5PX01NQVAgPSBZZXNQbGVhc2UKKwlOT19QT0xMID0gWWVzUGxlYXNlCisJTk9fSU5UUFRSX1QgPSBVbmZvcnR1bmF0ZWx5WWVzCisJIyBCdWcgcmVwb3J0IDEwLTEyMDgyMi00NDc3IHN1Ym1pdHRlZCB0byBIUCBOb25TdG9wIGRldmVsb3BtZW50LgorCU1LRElSX1dPX1RSQUlMSU5HX1NMQVNIID0gWWVzUGxlYXNlCisJIyBSRkUgMTAtMTIwOTEyLTQ2OTMgc3VibWl0dGVkIHRvIEhQIE5vblN0b3AgZGV2ZWxvcG1lbnQuCisJTk9fU0VUSVRJTUVSID0gVW5mb3J0dW5hdGVseVllcworCVNBTkVfVE9PTF9QQVRIID0gL3Vzci9jb3JldXRpbHMvYmluOi91c3IvbG9jYWwvYmluCisJU0hFTExfUEFUSCA9IC91c3IvY29yZXV0aWxzL2Jpbi9iYXNoCitlbmRpZgoraWZuZXEgKCwkKGZpbmRzdHJpbmcgTUlOR1csJCh1bmFtZV9TKSkpCisJcGF0aHNlcCA9IDsKKwlIQVZFX0FMTE9DQV9IID0gWWVzUGxlYXNlCisJTk9fUFJFQUQgPSBZZXNQbGVhc2UKKwlORUVEU19DUllQVE9fV0lUSF9TU0wgPSBZZXNQbGVhc2UKKwlOT19MSUJHRU5fSCA9IFllc1BsZWFzZQorCU5PX1BPTEwgPSBZZXNQbGVhc2UKKwlOT19TWU1MSU5LX0hFQUQgPSBZZXNQbGVhc2UKKwlOT19VTklYX1NPQ0tFVFMgPSBZZXNQbGVhc2UKKwlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX1NWTl9URVNUUyA9IFllc1BsZWFzZQorCVJVTlRJTUVfUFJFRklYID0gWWVzUGxlYXNlCisJSEFWRV9XUEdNUFRSID0gWWVzV2VEbworCU5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVCA9IFllc1BsZWFzZQorCVVTRV9XSU4zMl9NTUFQID0gWWVzUGxlYXNlCisJTU1BUF9QUkVWRU5UU19ERUxFVEUgPSBVbmZvcnR1bmF0ZWx5WWVzCisJVVNFX05FRF9BTExPQ0FUT1IgPSBZZXNQbGVhc2UKKwlVTlJFTElBQkxFX0ZTVEFUID0gVW5mb3J0dW5hdGVseVllcworCU9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMgPSBVbmZvcnR1bmF0ZWx5TmVlZHNUbworCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJTk9fUFlUSE9OID0gWWVzUGxlYXNlCisJRVRBR1NfVEFSR0VUID0gRVRBR1MKKwlOT19QT1NJWF9HT09ESUVTID0gVW5mb3J0dW5hdGVseVllcworCURFRkFVTFRfSEVMUF9GT1JNQVQgPSBodG1sCisJQkFTSUNfTERGTEFHUyArPSAtbXVuaWNvZGUKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9HREkgLUljb21wYXQgLUljb21wYXQvd2luMzIKKwlDT01QQVRfQ0ZMQUdTICs9IC1EU1RSSVBfRVhURU5TSU9OPVwiLmV4ZVwiCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L21pbmd3Lm8gY29tcGF0L3dpbmFuc2kubyBcCisJCWNvbXBhdC93aW4zMi90cmFjZTJfd2luMzJfcHJvY2Vzc19pbmZvLm8gXAorCQljb21wYXQvd2luMzIvcGF0aC11dGlscy5vIFwKKwkJY29tcGF0L3dpbjMyL3B0aHJlYWQubyBjb21wYXQvd2luMzIvc3lzbG9nLm8gXAorCQljb21wYXQvd2luMzIvZGlyZW50Lm8KKwlCQVNJQ19DRkxBR1MgKz0gLURXSU4zMgorCUVYVExJQlMgKz0gLWx3czJfMzIKKwlHSVRMSUJTICs9IGdpdC5yZXMKKwlQVEhSRUFEX0xJQlMgPQorCVJDID0gd2luZHJlcyAtTyBjb2ZmCisJTkFUSVZFX0NSTEYgPSBZZXNQbGVhc2UKKwlYID0gLmV4ZQoraWZuZXEgKCwkKHdpbGRjYXJkIC4uL1RISVNfSVNfTVNZU0dJVCkpCisJaHRtbGRpciA9IGRvYy9naXQvaHRtbC8KKwlwcmVmaXggPQorCUlOU1RBTEwgPSAvYmluL2luc3RhbGwKKwlFWFRMSUJTICs9IC9taW5ndy9saWIvbGliei5hCisJTk9fUl9UT19HQ0NfTElOS0VSID0gWWVzUGxlYXNlCisJSU5URVJOQUxfUVNPUlQgPSBZZXNQbGVhc2UKKwlIQVZFX0xJQkNIQVJTRVRfSCA9IFllc1BsZWFzZQorCU5PX0dFVFRFWFQgPSBZZXNQbGVhc2UKKwlDT01QQVRfQ0ZMQUdTICs9IC1EX19VU0VfTUlOR1dfQUNDRVNTCitlbHNlCisJaWZuZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9SKSIgOiAnMVwuJyksMikKKwkJIyBNU3lzMgorCQlwcmVmaXggPSAvdXNyLworCQkjIEVuYWJsZSBERVAKKwkJQkFTSUNfTERGTEFHUyArPSAtV2wsLS1ueGNvbXBhdAorCQkjIEVuYWJsZSBBU0xSICh1bmxlc3MgZGVidWdnaW5nKQorCQlpZm5lcSAoLCQoZmluZHN0cmluZyAtTywkKGZpbHRlci1vdXQgLU8wIC1PZywkKENGTEFHUykpKSkKKwkJCUJBU0lDX0xERkxBR1MgKz0gLVdsLC0tZHluYW1pY2Jhc2UKKwkJZW5kaWYKKwkJaWZlcSAoTUlOR1czMiwkKE1TWVNURU0pKQorCQkJcHJlZml4ID0gL21pbmd3MzIKKwkJCUhPU1RfQ1BVID0gaTY4NgorCQkJQkFTSUNfTERGTEFHUyArPSAtV2wsLS1waWMtZXhlY3V0YWJsZSwtZSxfbWFpbkNSVFN0YXJ0dXAKKwkJZW5kaWYKKwkJaWZlcSAoTUlOR1c2NCwkKE1TWVNURU0pKQorCQkJcHJlZml4ID0gL21pbmd3NjQKKwkJCUhPU1RfQ1BVID0geDg2XzY0CisJCQlCQVNJQ19MREZMQUdTICs9IC1XbCwtLXBpYy1leGVjdXRhYmxlLC1lLG1haW5DUlRTdGFydHVwCisJCWVsc2UKKwkJCUNPTVBBVF9DRkxBR1MgKz0gLURfVVNFXzMyQklUX1RJTUVfVAorCQkJQkFTSUNfTERGTEFHUyArPSAtV2wsLS1sYXJnZS1hZGRyZXNzLWF3YXJlCisJCWVuZGlmCisJCUNDID0gZ2NjCisJCUNPTVBBVF9DRkxBR1MgKz0gLURfX1VTRV9NSU5HV19BTlNJX1NURElPPTAgLURERVRFQ1RfTVNZU19UVFkgXAorCQkJLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nCisJCUVYVExJQlMgKz0gLWxudGRsbAorCQlJTlNUQUxMID0gL2Jpbi9pbnN0YWxsCisJCU5PX1JfVE9fR0NDX0xJTktFUiA9IFllc1BsZWFzZQorCQlJTlRFUk5BTF9RU09SVCA9IFllc1BsZWFzZQorCQlIQVZFX0xJQkNIQVJTRVRfSCA9IFllc1BsZWFzZQorCQlOT19HRVRURVhUID0KKwkJVVNFX0dFVFRFWFRfU0NIRU1FID0gZmFsbHRocm91Z2gKKwkJVVNFX0xJQlBDUkU9IFllc1BsZWFzZQorCQlOT19MSUJQQ1JFMV9KSVQgPSBVbmZvcnR1bmF0ZWx5WWVzCisJCU5PX0NVUkwgPQorCQlVU0VfTkVEX0FMTE9DQVRPUiA9IFllc1BsZWFzZQorCWVsc2UKKwkJQ09NUEFUX0NGTEFHUyArPSAtRF9fVVNFX01JTkdXX0FOU0lfU1RESU8KKwkJTk9fQ1VSTCA9IFllc1BsZWFzZQorCWVuZGlmCitlbmRpZgorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksUU5YKQorCUNPTVBBVF9DRkxBR1MgKz0gLURTQV9SRVNUQVJUPTAKKwlFWFBBVF9ORUVEU19YTUxQQVJTRV9IID0gWWVzUGxlYXNlCisJSEFWRV9TVFJJTkdTX0ggPSBZZXNQbGVhc2UKKwlORUVEU19TT0NLRVQgPSBZZXNQbGVhc2UKKwlOT19HRVRQQUdFU0laRSA9IFllc1BsZWFzZQorCU5PX0lDT05WID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKKwlOT19QVEhSRUFEUyA9IFllc1BsZWFzZQorCU5PX1JfVE9fR0NDX0xJTktFUiA9IFllc1BsZWFzZQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCitlbmRpZgorCit2Y3hwcm9qOgorCSMgUmVxdWlyZSBjbGVhbiB3b3JrIHRyZWUKKwlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaCAmJiBcCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJiBcCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFEIC0tCisKKwkjIE1ha2UgLnZjeHByb2ogZmlsZXMgYW5kIGFkZCB0aGVtCisJdW5zZXQgUVVJRVRfR0VOIFFVSUVUX0JVSUxUX0lOOyBcCisJcGVybCBjb250cmliL2J1aWxkc3lzdGVtcy9nZW5lcmF0ZSAtZyBWY3hwcm9qCisJZ2l0IGFkZCAtZiBnaXQuc2xuIHsqLCovbGliLHQvaGVscGVyLyp9LyoudmN4cHJvagorCisJIyBHZW5lcmF0ZSB0aGUgTGlua09yQ29weUJ1aWx0aW5zLnRhcmdldHMgYW5kIExpbmtPckNvcHlSZW1vdGVIdHRwLnRhcmdldHMgZmlsZQorCShlY2hvICc8UHJvamVjdCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4nICYmIFwKKwkgZWNobyAnICA8VGFyZ2V0IE5hbWU9IkNvcHlCdWlsdGluc19BZnRlckJ1aWxkIiBBZnRlclRhcmdldHM9IkFmdGVyQnVpbGQiPicgJiYgXAorCSBmb3IgbmFtZSBpbiAkKEJVSUxUX0lOUyk7XAorCSBkbyBcCisJICAgZWNobyAnICAgIDxDb3B5IFNvdXJjZUZpbGVzPSIkJChPdXREaXIpXGdpdC5leGUiIERlc3RpbmF0aW9uRmlsZXM9IiQkKE91dERpcilcJyIkJG5hbWUiJyIgU2tpcFVuY2hhbmdlZEZpbGVzPSJ0cnVlIiBVc2VIYXJkbGlua3NJZlBvc3NpYmxlPSJ0cnVlIiAvPic7IFwKKwkgZG9uZSAmJiBcCisJIGVjaG8gJyAgPC9UYXJnZXQ+JyAmJiBcCisJIGVjaG8gJzwvUHJvamVjdD4nKSA+Z2l0L0xpbmtPckNvcHlCdWlsdGlucy50YXJnZXRzCisJKGVjaG8gJzxQcm9qZWN0IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPicgJiYgXAorCSBlY2hvICcgIDxUYXJnZXQgTmFtZT0iQ29weUJ1aWx0aW5zX0FmdGVyQnVpbGQiIEFmdGVyVGFyZ2V0cz0iQWZ0ZXJCdWlsZCI+JyAmJiBcCisJIGZvciBuYW1lIGluICQoUkVNT1RFX0NVUkxfQUxJQVNFUyk7IFwKKwkgZG8gXAorCSAgIGVjaG8gJyAgICA8Q29weSBTb3VyY2VGaWxlcz0iJCQoT3V0RGlyKVwnIiQoUkVNT1RFX0NVUkxfUFJJTUFSWSkiJyIgRGVzdGluYXRpb25GaWxlcz0iJCQoT3V0RGlyKVwnIiQkbmFtZSInIiBTa2lwVW5jaGFuZ2VkRmlsZXM9InRydWUiIFVzZUhhcmRsaW5rc0lmUG9zc2libGU9InRydWUiIC8+JzsgXAorCSBkb25lICYmIFwKKwkgZWNobyAnICA8L1RhcmdldD4nICYmIFwKKwkgZWNobyAnPC9Qcm9qZWN0PicpID5naXQtcmVtb3RlLWh0dHAvTGlua09yQ29weVJlbW90ZUh0dHAudGFyZ2V0cworCWdpdCBhZGQgLWYgZ2l0L0xpbmtPckNvcHlCdWlsdGlucy50YXJnZXRzIGdpdC1yZW1vdGUtaHR0cC9MaW5rT3JDb3B5UmVtb3RlSHR0cC50YXJnZXRzCisKKwkjIEFkZCBjb21tYW5kLWxpc3QuaCBhbmQgY29uZmlnLWxpc3QuaAorCSQoTUFLRSkgTVNWQz0xIFNLSVBfVkNQS0c9MSBwcmVmaXg9L21pbmd3NjQgY29uZmlnLWxpc3QuaCBjb21tYW5kLWxpc3QuaAorCWdpdCBhZGQgLWYgY29uZmlnLWxpc3QuaCBjb21tYW5kLWxpc3QuaAorCisJIyBBZGQgc2NyaXB0cworCXJtIC1mIHBlcmwvcGVybC5tYWsKKwkkKE1BS0UpIE1TVkM9MSBTS0lQX1ZDUEtHPTEgcHJlZml4PS9taW5ndzY0ICQoU0NSSVBUX0xJQikgJChTQ1JJUFRTKQorCSMgU3RyaXAgb3V0IHRoZSBzYW5lIHRvb2wgcGF0aCwgbmVlZGVkIG9ubHkgZm9yIGJ1aWxkaW5nCisJc2VkIC1pICcvXmdpdF9icm9rZW5fcGF0aF9maXggIi4qL2QnIGdpdC1zaC1zZXR1cAorCWdpdCBhZGQgLWYgJChTQ1JJUFRfTElCKSAkKFNDUklQVFMpCisKKwkjIEFkZCBQZXJsIG1vZHVsZQorCSQoTUFLRSkgJChMSUJfUEVSTF9HRU4pCisJZ2l0IGFkZCAtZiBwZXJsL2J1aWxkCisKKwkjIEFkZCBiaW4td3JhcHBlcnMsIGZvciB0ZXN0aW5nCisJcm0gLXJmIGJpbi13cmFwcGVycy8KKwkkKE1BS0UpIE1TVkM9MSBTS0lQX1ZDUEtHPTEgcHJlZml4PS9taW5ndzY0ICQodGVzdF9iaW5kaXJfcHJvZ3JhbXMpCisJIyBFbnN1cmUgdGhhdCB0aGUgR0lUX0VYRUNfUEFUSCBpcyBhIFVuaXgteSBvbmUsIGFuZCB0aGF0IHRoZSBhYnNvbHV0ZQorCSMgcGF0aCBvZiB0aGUgcmVwb3NpdG9yeSBpcyBub3QgaGFyZC1jb2RlZCAoR0lUX0VYRUNfUEFUSCB3aWxsIGJlIHNldAorCSMgYnkgdGVzdC1saWIuc2ggYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHNldHVwKQorCXNlZCAtaSAtZSAncy9eXChHSVRfRVhFQ19QQVRIXCk9LiovdGVzdCAtbiAiJCR7XDEjIyo6Kn0iIHx8XAorCQkJXDE9IiQkKGN5Z3BhdGggLXUgIiQkXDEiKSIvJyBcCisJCS1lICJzfCckJChwd2QpfFwiXCQkR0lUX0VYRUNfUEFUSFwiJ3xnIiBiaW4td3JhcHBlcnMvKgorCSMgRW5zdXJlIHRoYXQgdGVzdC0qIGhlbHBlcnMgZmluZCB0aGUgLmRsbCBmaWxlcyBjb3BpZWQgdG8gdG9wLWxldmVsCisJc2VkIC1pICdzfF5QQVRIPS4qfCY6IiQkR0lUX0VYRUNfUEFUSCJ8JyBiaW4td3JhcHBlcnMvdGVzdC0qCisJIyBXZSBkbyBub3Qgd2FudCB0byBmb3JjZSBoYXJkLWxpbmtpbmcgYnVpbHRpbnMKKwlzZWQgLWkgJ3N8XChnaXRcKS1cKFstYS16XSpcKVwuZXhlInxcMS5leGUiIFwyfGcnIFwKKwkJYmluLXdyYXBwZXJzL2dpdC17cmVjZWl2ZS1wYWNrLHVwbG9hZC1hcmNoaXZlfQorCWdpdCBhZGQgLWYgJCh0ZXN0X2JpbmRpcl9wcm9ncmFtcykKKwkjIHJlbW90ZS1leHQgaXMgYSBidWlsdGluLCBidXQgaW52b2tlZCBhcyBpZiBpdCB3ZXJlIGV4dGVybmFsCisJc2VkICdzfHJlY2VpdmUtcGFja3xyZW1vdGUtZXh0fGcnIFwKKwkJPGJpbi13cmFwcGVycy9naXQtcmVjZWl2ZS1wYWNrID5iaW4td3JhcHBlcnMvZ2l0LXJlbW90ZS1leHQKKwlnaXQgYWRkIC1mIGJpbi13cmFwcGVycy9naXQtcmVtb3RlLWV4dAorCisJIyBBZGQgdGVtcGxhdGVzCisJJChNQUtFKSAtQyB0ZW1wbGF0ZXMKKwlnaXQgYWRkIC1mIHRlbXBsYXRlcy9ib2lsZXJwbGF0ZXMubWFkZSB0ZW1wbGF0ZXMvYmx0LworCisJIyBBZGQgdGhlIHRyYW5zbGF0ZWQgbWVzc2FnZXMKKwltYWtlIE1TVkM9MSBTS0lQX1ZDUEtHPTEgcHJlZml4PS9taW5ndzY0ICQoTU9GSUxFUykKKwlnaXQgYWRkIC1mICQoTU9GSUxFUykKKworCSMgQWRkIGJ1aWxkIG9wdGlvbnMKKwkkKE1BS0UpIE1TVkM9MSBTS0lQX1ZDUEtHPTEgcHJlZml4PS9taW5ndzY0IEdJVC1CVUlMRC1PUFRJT05TCisJZ2l0IGFkZCAtZiBHSVQtQlVJTEQtT1BUSU9OUworCisJIyBDb21taXQgdGhlIHdob2xlIHNoZWJhbmcKKwlnaXQgY29tbWl0IC1tICJHZW5lcmF0ZSBWaXN1YWwgU3R1ZGlvIHNvbHV0aW9uIiBcCisJCS1tICJBdXRvLWdlbmVyYXRlZCBieSBcYCQoTUFLRSkkKE1BS0VGTEFHUykgJEBcYCIKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmFlZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmFjCkBAIC0wLDAgKzEsMTMyNyBAQAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorCisjIyBEZWZpbml0aW9ucyBvZiBwcml2YXRlIG1hY3Jvcy4KKworIyBHSVRfQ09ORl9TVUJTVChWQUwsIFZBUikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhdXNlIHRoZSBsaW5lICJWQVI9VkFMIiB0byBiZSBldmVudHVhbGx5IGFwcGVuZGVkIHRvICR7Y29uZmlnX2ZpbGV9LgorQUNfREVGVU4oW0dJVF9DT05GX1NVQlNUXSwKK1tBQ19SRVFVSVJFKFtHSVRfQ09ORl9TVUJTVF9JTklUXSkKK2NvbmZpZ19hcHBlbmRlZF9kZWZzPSIkY29uZmlnX2FwcGVuZGVkX2RlZnMke25ld2xpbmV9ZG5sCiskMT1tNF9pZihbJCNdLFsxXSxbJHskMX1dLFskMl0pIl0pCisKKyMgR0lUX0NPTkZfU1VCU1RfSU5JVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZXBhcmUgc2hlbGwgdmFyaWFibGVzIGFuZCBhdXRvY29uZiBtYWNoaW5lIHJlcXVpcmVkIGJ5IGxhdGVyIGNhbGxzCisjIHRvIEdJVF9DT05GX1NVQlNULgorQUNfREVGVU4oW0dJVF9DT05GX1NVQlNUX0lOSVRdLAorICAgIFtjb25maWdfYXBwZW5kZWRfZGVmcz07IG5ld2xpbmU9JworJworICAgIEFDX0NPTkZJR19DT01NQU5EUyhbJGNvbmZpZ19maWxlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgW2VjaG8gIiRjb25maWdfYXBwZW5kZWRfZGVmcyIgPj4gIiRjb25maWdfZmlsZSJdLAorICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnX2ZpbGU9JGNvbmZpZ19maWxlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfYXBwZW5kZWRfZGVmcz0iJGNvbmZpZ19hcHBlbmRlZF9kZWZzIl0pXSkKKworIyBHSVRfQVJHX1NFVF9QQVRIKFBST0dSQU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvdmlkZSAtLXdpdGgtUFJPR1JBTT1QQVRIIG9wdGlvbiB0byBzZXQgUEFUSCB0byBQUk9HUkFNCisjIE9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBhbGxvd3Mgc2V0dGluZyBOT19QUk9HUkFNPVllc1BsZWFzZSBpZgorIyAtLXdpdGhvdXQtUFJPR1JBTSB2ZXJzaW9uIHVzZWQuCitBQ19ERUZVTihbR0lUX0FSR19TRVRfUEFUSF0sCisgICAgW0FDX0FSR19XSVRIKFskMV0sCisgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLSQxPVBBVEhdLAorICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3ZpZGUgUEFUSCB0byAkMV0pXSwKKyAgICAgICAgW0dJVF9DT05GX0FQUEVORF9QQVRIKFskMV0sIFskMl0pXSwKKyAgICAgICAgW10pXSkKKworIyBHSVRfQ09ORl9BUFBFTkRfUEFUSChQUk9HUkFNKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXJzZSAtLXdpdGgtUFJPR1JBTT1QQVRIIG9wdGlvbiB0byBzZXQgUFJPR1JBTV9QQVRIPVBBVEgKKyMgVXNlZCBieSBHSVRfQVJHX1NFVF9QQVRIKFBST0dSQU0pCisjIE9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBhbGxvd3Mgc2V0dGluZyBOT19QUk9HUkFNPVllc1BsZWFzZSBpZgorIyAtLXdpdGhvdXQtUFJPR1JBTSBpcyB1c2VkLgorQUNfREVGVU4oW0dJVF9DT05GX0FQUEVORF9QQVRIXSwKKyAgICBbbTRfcHVzaGRlZihbR0lUX1VDX1BST0dSQU1dLCBtNF90b3VwcGVyKFskMV0pKWRubAorICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkMiI7IHRoZW4KKwkJR0lUX1VDX1BST0dSQU1bXV9QQVRIPSR3aXRodmFsCisJCUFDX01TR19OT1RJQ0UoW0Rpc2FibGluZyB1c2Ugb2YgR0lUX1VDX1BST0dSQU1dKQorCQlHSVRfQ09ORl9TVUJTVChbTk9fXUdJVF9VQ19QUk9HUkFNLCBbWWVzUGxlYXNlXSkKKwkJR0lUX0NPTkZfU1VCU1QoR0lUX1VDX1BST0dSQU1bXV9QQVRILCBbXSkKKwllbHNlCisJCUFDX01TR19FUlJPUihbWW91IGNhbm5vdCB1c2UgZ2l0IHdpdGhvdXQgJDFdKQorCWZpCisgICAgZWxzZQorCWlmIHRlc3QgIiR3aXRodmFsIiA9ICJ5ZXMiOyB0aGVuCisJCUFDX01TR19XQVJOKFtZb3Ugc2hvdWxkIHByb3ZpZGUgcGF0aCBmb3IgLS13aXRoLSQxPVBBVEhdKQorCWVsc2UKKwkJR0lUX1VDX1BST0dSQU1bXV9QQVRIPSR3aXRodmFsCisJCUFDX01TR19OT1RJQ0UoW1NldHRpbmcgR0lUX1VDX1BST0dSQU1bXV9QQVRIIHRvICR3aXRodmFsXSkKKwkJR0lUX0NPTkZfU1VCU1QoR0lUX1VDX1BST0dSQU1bXV9QQVRILCBbJHdpdGh2YWxdKQorCWZpCisgICAgZmkKKyAgICBtNF9wb3BkZWYoW0dJVF9VQ19QUk9HUkFNXSldKQorCisjIEdJVF9QQVJTRV9XSVRIKFBBQ0tBR0UpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvciB1c2UgaW4gQUNfQVJHX1dJVEggYWN0aW9uLWlmLWZvdW5kLCBmb3IgcGFja2FnZXMgZGVmYXVsdCBPTi4KKyMgKiBTZXQgTk9fUEFDS0FHRT1ZZXNQbGVhc2UgZm9yIC0td2l0aG91dC1QQUNLQUdFCisjICogU2V0IFBBQ0tBR0VESVI9UEFUSCBmb3IgLS13aXRoLVBBQ0tBR0U9UEFUSAorIyAqIFVuc2V0IE5PX1BBQ0tBR0UgZm9yIC0td2l0aC1QQUNLQUdFIHdpdGhvdXQgQVJHCitBQ19ERUZVTihbR0lUX1BBUlNFX1dJVEhdLAorICAgIFttNF9wdXNoZGVmKFtHSVRfVUNfUEFDS0FHRV0sIG00X3RvdXBwZXIoWyQxXSkpZG5sCisgICAgaWYgdGVzdCAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgorCU5PX1tdR0lUX1VDX1BBQ0tBR0U9WWVzUGxlYXNlCisgICAgZWxpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbgorCU5PX1tdR0lUX1VDX1BBQ0tBR0U9CisgICAgZWxzZQorCU5PX1tdR0lUX1VDX1BBQ0tBR0U9CisJR0lUX1VDX1BBQ0tBR0VbXURJUj0kd2l0aHZhbAorCUFDX01TR19OT1RJQ0UoW1NldHRpbmcgR0lUX1VDX1BBQ0tBR0VbXURJUiB0byAkd2l0aHZhbF0pCisJR0lUX0NPTkZfU1VCU1QoR0lUX1VDX1BBQ0tBR0VbRElSXSwgWyR3aXRodmFsXSkKKyAgICBmaQorICAgIG00X3BvcGRlZihbR0lUX1VDX1BBQ0tBR0VdKV0pCisKKyMgR0lUX1BBUlNFX1dJVEhfU0VUX01BS0VfVkFSKFdJVEhOQU1FLCBWQVIsIEhFTFBfVEVYVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IFZBUiB0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IC0td2l0aC1XSVRITkFNRS4KKyMgTm8gdmVyaWZpY2F0aW9uIG9mIGFyZ3VtZW50cyBpcyBwZXJmb3JtZWQsIGJ1dCB3YXJuaW5ncyBhcmUgaXNzdWVkCisjIGlmIGVpdGhlciAneWVzJyBvciAnbm8nIGlzIHNwZWNpZmllZC4KKyMgSEVMUF9URVhUIGlzIHByZXNlbnRlZCB3aGVuIC0taGVscCBpcyBjYWxsZWQuCisjIFRoaXMgaXMgYSBkaXJlY3Qgd2F5IHRvIGFsbG93IHNldHRpbmcgdmFyaWFibGVzIGluIHRoZSBNYWtlZmlsZS4KK0FDX0RFRlVOKFtHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVJdLAorW0FDX0FSR19XSVRIKFskMV0sCisgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtJDE9VkFMVUVdLCAkMyldLAorIGlmIHRlc3QgLW4gIiR3aXRodmFsIjsgdGhlbgorICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIiAtbyAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgorICAgIEFDX01TR19XQVJOKFtZb3UgbGlrZWx5IGRvIG5vdCB3YW50IGVpdGhlciAneWVzJyBvciAnbm8nIGFzXQorCQkgICAgIFthIHZhbHVlIGZvciAkMSAoJDIpLiAgTWF5YmUgeW91IGRvLi4uP10pCisgIGZpCisgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgJDIgdG8gJHdpdGh2YWxdKQorICBHSVRfQ09ORl9TVUJTVChbJDJdLCBbJHdpdGh2YWxdKQorIGZpKV0pIyBHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVIKKworIworIyBHSVRfQ0hFQ0tfRlVOQyhGVU5DVElPTiwgSUZUUlVFLCBJRkZBTFNFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTaW1pbGFyIHRvIEFDX0NIRUNLX0ZVTkMsIGJ1dCBvbiBzeXN0ZW1zIHRoYXQgZG8gbm90IGdlbmVyYXRlCisjIHdhcm5pbmdzIGZvciBtaXNzaW5nIHByb3RvdHlwZXMgKGUuZy4gRnJlZUJTRCB3aGVuIGNvbXBpbGluZyB3aXRob3V0CisjIC1XYWxsKSwgaXQgZG9lcyBub3Qgd29yay4gIEJ5IGxvb2tpbmcgZm9yIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4KKyMgbGlicmFyaWVzLCB0aGlzIHByb2JsZW0gY2FuIGJlIHdvcmtlZCBhcm91bmQuCitBQ19ERUZVTihbR0lUX0NIRUNLX0ZVTkNdLFtBQ19DSEVDS19GVU5DKFskMV0sWworICBBQ19TRUFSQ0hfTElCUyhbJDFdLCwKKyAgWyQyXSxbJDNdKQorXSxbJDNdKV0pCisKKyMKKyMgR0lUX1NUQVNIX0ZMQUdTKEJBU0VQQVRIX1ZBUikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWxsb3cgZm9yIGVhc3kgc3Rhc2hpbmcgb2YgTERGTEFHUyBhbmQgQ1BQRkxBR1MgYmVmb3JlIHJ1bm5pbmcKKyMgdGVzdHMgdGhhdCBtYXkgd2FudCB0byB0YWtlIHVzZXIgc2V0dGluZ3MgaW50byBhY2NvdW50LgorQUNfREVGVU4oW0dJVF9TVEFTSF9GTEFHU10sWworaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICBvbGRfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgIG9sZF9MREZMQUdTPSIkTERGTEFHUyIKKyAgIENQUEZMQUdTPSItSSQxL2luY2x1ZGUgJENQUEZMQUdTIgorICAgTERGTEFHUz0iLUwkMS8kbGliICRMREZMQUdTIgorZmkKK10pCisKK2RubAorZG5sIEdJVF9VTlNUQVNIX0ZMQUdTKEJBU0VQQVRIX1ZBUikKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFJlc3RvcmUgdGhlIHN0YXNoZWQgKkZMQUdTIHZhbHVlcy4KK0FDX0RFRlVOKFtHSVRfVU5TVEFTSF9GTEFHU10sWworaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICBDUFBGTEFHUz0iJG9sZF9DUFBGTEFHUyIKKyAgIExERkxBR1M9IiRvbGRfTERGTEFHUyIKK2ZpCitdKQorCisjIyBDb25maWd1cmUgYm9keSBzdGFydHMgaGVyZS4KKworQUNfUFJFUkVRKDIuNTkpCitBQ19JTklUKFtnaXRdLCBbQEBHSVRfVkVSU0lPTkBAXSwgW2dpdEB2Z2VyLmtlcm5lbC5vcmddKQorCitBQ19DT05GSUdfU1JDRElSKFtnaXQuY10pCisKK2NvbmZpZ19maWxlPWNvbmZpZy5tYWsuYXV0b2dlbgorY29uZmlnX2luPWNvbmZpZy5tYWsuaW4KKworR0lUX0NPTkZfU1VCU1QoW0FVVE9DT05GSUdVUkVEXSwgW1llc1BsZWFzZV0pCisKKyMgRGlyZWN0b3JpZXMgaG9sZGluZyAic2FuZXIiIHZlcnNpb25zIG9mIGNvbW1vbiBvciBQT1NJWCBiaW5hcmllcy4KK0FDX0FSR19XSVRIKFtzYW5lLXRvb2wtcGF0aF0sCisgIFtBU19IRUxQX1NUUklORygKKyAgICBbLS13aXRoLXNhbmUtdG9vbC1wYXRoPURJUi0xW1s6RElSLTIuLi46RElSLW5dXV0sCisgICAgW0RpcmVjdG9yaWVzIHRvIHByZXBlbmQgdG8gUEFUSCBpbiBidWlsZCBzeXN0ZW0gYW5kIGdlbmVyYXRlZCBzY3JpcHRzXSldLAorICBbaWYgdGVzdCAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgorICAgIHdpdGh2YWw9JycKKyAgZWxzZQorICAgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgU0FORV9UT09MX1BBVEggdG8gJyR3aXRodmFsJ10pCisgIGZpCisgIEdJVF9DT05GX1NVQlNUKFtTQU5FX1RPT0xfUEFUSF0sIFskd2l0aHZhbF0pXSwKKyAgWyMgSWYgdGhlICItLXdpdGgtc2FuZS10b29sLXBhdGgiIG9wdGlvbiB3YXMgbm90IGdpdmVuLCBkb24ndCB0b3VjaAorICAgIyBTQU5FX1RPT0xfUEFUSCBoZXJlLCBidXQgbGV0IGRlZmF1bHRzIGluIE1ha2VmaWxlIHRha2UgY2FyZSBvZiBpdC4KKyAgICMgVGhpcyBzaG91bGQgbWluaW1pemUgc3B1cmlvdXMgZGlmZmVyZW5jZXMgaW4gdGhlIGJlaGF2aW91ciBvZiB0aGUKKyAgICMgR2l0IGJ1aWxkIHN5c3RlbSB3aGVuIGNvbmZpZ3VyZSBpcyB1c2VkIHcuci50LiB3aGVuIGl0IGlzIG5vdC4KKyAgIDpdKQorCisjIyBTaXRlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBwcm9ncmFtcyAoYmVmb3JlIHRlc3RzKQorIyMgLS13aXRoLVBBQ0tBR0VbPUFSR10gYW5kIC0td2l0aG91dC1QQUNLQUdFCisjCisjIFNldCBsaWIgdG8gYWx0ZXJuYXRpdmUgbmFtZSBvZiBsaWIgZGlyZWN0b3J5IChlLmcuIGxpYjY0KQorQUNfQVJHX1dJVEgoW2xpYl0sCisgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbGliPUFSR10sCisgICAgICAgICAgICAgICAgIFtBUkcgc3BlY2lmaWVzIGFsdGVybmF0aXZlIG5hbWUgZm9yIGxpYiBkaXJlY3RvcnldKV0sCisgW2lmIHRlc3QgIiR3aXRodmFsIiA9ICJubyIgfHwgdGVzdCAiJHdpdGh2YWwiID0gInllcyI7IHRoZW4KKwlBQ19NU0dfV0FSTihbWW91IHNob3VsZCBwcm92aWRlIG5hbWUgZm9yIC0td2l0aC1saWI9QVJHXSkKKyAgZWxzZQorCWxpYj0kd2l0aHZhbAorCUFDX01TR19OT1RJQ0UoW1NldHRpbmcgbGliIHRvICckbGliJ10pCisJR0lUX0NPTkZfU1VCU1QoW2xpYl0pCisgIGZpXSkKKworaWYgdGVzdCAteiAiJGxpYiI7IHRoZW4KKyAgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgbGliIHRvICdsaWInICh0aGUgZGVmYXVsdCldKQorICAgbGliPWxpYgorZmkKKworQUNfQVJHX0VOQUJMRShbcHRocmVhZHNdLAorIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRocmVhZHM9RkxBR1NdLAorICBbRkxBR1MgaXMgdGhlIHZhbHVlIHRvIHBhc3MgdG8gdGhlIGNvbXBpbGVyIHRvIGVuYWJsZSBQT1NJWCBUaHJlYWRzLl0KKyAgW1RoZSBkZWZhdWx0IGlmIEZMQUdTIGlzIG5vdCBzcGVjaWZpZWQgaXMgdG8gdHJ5IGZpcnN0IC1wdGhyZWFkXQorICBbYW5kIHRoZW4gLWxwdGhyZWFkLl0KKyAgWy0tZGlzYWJsZS1wdGhyZWFkcyB3aWxsIGRpc2FibGUgdGhyZWFkaW5nLl0pXSwKK1sKK2lmIHRlc3QgIngkZW5hYmxldmFsIiA9ICJ4eWVzIjsgdGhlbgorICAgQUNfTVNHX05PVElDRShbV2lsbCB0cnkgLXB0aHJlYWQgdGhlbiAtbHB0aHJlYWQgdG8gZW5hYmxlIFBPU0lYIFRocmVhZHNdKQorZWxpZiB0ZXN0ICJ4JGVuYWJsZXZhbCIgIT0gInhubyI7IHRoZW4KKyAgIFBUSFJFQURfQ0ZMQUdTPSRlbmFibGV2YWwKKyAgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgJyRQVEhSRUFEX0NGTEFHUycgYXMgdGhlIEZMQUdTIHRvIGVuYWJsZSBQT1NJWCBUaHJlYWRzXSkKK2Vsc2UKKyAgIEFDX01TR19OT1RJQ0UoW1BPU0lYIFRocmVhZHMgd2lsbCBiZSBkaXNhYmxlZC5dKQorICAgTk9fUFRIUkVBRFM9WWVzUGxlYXNlCisgICBVU0VSX05PUFRIUkVBRD0xCitmaV0sCitbCisgICBBQ19NU0dfTk9USUNFKFtXaWxsIHRyeSAtcHRocmVhZCB0aGVuIC1scHRocmVhZCB0byBlbmFibGUgUE9TSVggVGhyZWFkcy5dKQorXSkKKworIyBEZWZpbmUgb3B0aW9uIHRvIGVuYWJsZSBKYXZhU2NyaXB0IG1pbmlmaWNhdGlvbgorQUNfQVJHX0VOQUJMRShbanNtaW5dLAorW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1qc21pbj1QQVRIXSwKKyAgW1BBVEggaXMgdGhlIG5hbWUgb2YgYSBKYXZhU2NyaXB0IG1pbmlmaWVyIG9yIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIG9uZS5dKV0sCitbCisgIEpTTUlOPSRlbmFibGV2YWw7CisgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgSlNNSU4gdG8gJyRKU01JTicgdG8gZW5hYmxlIEphdmFTY3JpcHQgbWluaWZ5aW5nXSkKKyAgR0lUX0NPTkZfU1VCU1QoW0pTTUlOXSkKK10pCisKKyMgRGVmaW5lIG9wdGlvbiB0byBlbmFibGUgQ1NTIG1pbmlmaWNhdGlvbgorQUNfQVJHX0VOQUJMRShbY3NzbWluXSwKK1tBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY3NzbWluPVBBVEhdLAorICBbUEFUSCBpcyB0aGUgbmFtZSBvZiBhIENTUyBtaW5pZmllciBvciB0aGUgYWJzb2x1dGUgcGF0aCB0byBvbmUuXSldLAorWworICBDU1NNSU49JGVuYWJsZXZhbDsKKyAgQUNfTVNHX05PVElDRShbU2V0dGluZyBDU1NNSU4gdG8gJyRDU1NNSU4nIHRvIGVuYWJsZSBDU1MgbWluaWZ5aW5nXSkKKyAgR0lUX0NPTkZfU1VCU1QoW0NTU01JTl0pCitdKQorCisjIyBTaXRlIGNvbmZpZ3VyYXRpb24gKG92ZXJyaWRlIGF1dG9kZXRlY3Rpb24pCisjIyAtLXdpdGgtUEFDS0FHRVs9QVJHXSBhbmQgLS13aXRob3V0LVBBQ0tBR0UKK0FDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3Igc2l0ZSBjb25maWd1cmF0aW9uXSkKKyMKKyMgRGVmaW5lIE5PX1NWTl9URVNUUyBpZiB5b3Ugd2FudCB0byBza2lwIHRpbWUtY29uc3VtaW5nIFNWTiBpbnRlcm9wZXJhYmlsaXR5CisjIHRlc3RzLiAgVGhlc2UgdGVzdHMgdGFrZSB1cCBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB0aGUgdG90YWwgdGVzdCB0aW1lCisjIGJ1dCBhcmUgbm90IG5lZWRlZCB1bmxlc3MgeW91IHBsYW4gdG8gdGFsayB0byBTVk4gcmVwb3MuCisjCisjIERlZmluZSBQUENfU0hBMSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIHJ1bm5pbmcgbWFrZSB0byBtYWtlIHVzZSBvZgorIyBhIGJ1bmRsZWQgU0hBMSByb3V0aW5lIG9wdGltaXplZCBmb3IgUG93ZXJQQy4KKyMKKyMgRGVmaW5lIE5PX09QRU5TU0wgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91IGRvIG5vdCBoYXZlIE9wZW5TU0wuCisjCisjIERlZmluZSBPUEVOU1NMRElSPS9mb28vYmFyIGlmIHlvdXIgb3BlbnNzbCBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlIGluCisjIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4KK0FDX0FSR19XSVRIKG9wZW5zc2wsCitBU19IRUxQX1NUUklORyhbLS13aXRoLW9wZW5zc2xdLFt1c2UgT3BlblNTTCBsaWJyYXJ5IChkZWZhdWx0IGlzIFlFUyldKQorQVNfSEVMUF9TVFJJTkcoW10sICAgICAgICAgICAgICBbQVJHIGNhbiBiZSBwcmVmaXggZm9yIG9wZW5zc2wgbGlicmFyeSBhbmQgaGVhZGVyc10pLAorR0lUX1BBUlNFX1dJVEgoW29wZW5zc2xdKSkKKworIyBEZWZpbmUgVVNFX0xJQlBDUkUgaWYgeW91IGhhdmUgYW5kIHdhbnQgdG8gdXNlIGxpYnBjcmUuIFZhcmlvdXMKKyMgY29tbWFuZHMgc3VjaCBhcyBsb2cgYW5kIGdyZXAgb2ZmZXIgcnVudGltZSBvcHRpb25zIHRvIHVzZQorIyBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyBpbnN0ZWFkIG9mIHN0YW5kYXJkIG9yIGV4dGVuZGVkCisjIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisjCisjIFVTRV9MSUJQQ1JFIGlzIGEgc3lub255bSBmb3IgVVNFX0xJQlBDUkUyLCBkZWZpbmUgVVNFX0xJQlBDUkUxCisjIGluc3RlYWQgaWYgeW91J2QgbGlrZSB0byB1c2UgdGhlIGxlZ2FjeSB2ZXJzaW9uIDEgb2YgdGhlIFBDUkUKKyMgbGlicmFyeS4gU3VwcG9ydCBmb3IgdmVyc2lvbiAxIHdpbGwgbGlrZWx5IGJlIHJlbW92ZWQgaW4gc29tZSBmdXR1cmUKKyMgcmVsZWFzZSBvZiBHaXQsIGFzIHVwc3RyZWFtIGhhcyBhbGwgYnV0IGFiYW5kb25lZCBpdC4KKyMKKyMgRGVmaW5lIExJQlBDUkVESVI9L2Zvby9iYXIgaWYgeW91ciBQQ1JFIGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyBhcmUgaW4KKyMgL2Zvby9iYXIvaW5jbHVkZSBhbmQgL2Zvby9iYXIvbGliIGRpcmVjdG9yaWVzLgorIworQUNfQVJHX1dJVEgobGlicGNyZSwKK0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbGlicGNyZV0sW3N5bm9ueW0gZm9yIC0td2l0aC1saWJwY3JlMl0pLAorICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KKwlVU0VfTElCUENSRTI9CisgICAgZWxpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbgorCVVTRV9MSUJQQ1JFMj1ZZXNQbGVhc2UKKyAgICBlbHNlCisJVVNFX0xJQlBDUkUyPVllc1BsZWFzZQorCUxJQlBDUkVESVI9JHdpdGh2YWwKKwlBQ19NU0dfTk9USUNFKFtTZXR0aW5nIExJQlBDUkVESVIgdG8gJExJQlBDUkVESVJdKQorICAgICAgICBkbmwgVVNFX0xJQlBDUkUyIGNhbiBzdGlsbCBiZSBtb2RpZmllZCBiZWxvdywgc28gZG9uJ3Qgc3Vic3RpdHV0ZQorICAgICAgICBkbmwgaXQgeWV0LgorCUdJVF9DT05GX1NVQlNUKFtMSUJQQ1JFRElSXSkKKyAgICBmaSkKKworQUNfQVJHX1dJVEgobGlicGNyZTEsCitBU19IRUxQX1NUUklORyhbLS13aXRoLWxpYnBjcmUxXSxbc3VwcG9ydCBQZXJsLWNvbXBhdGlibGUgcmVnZXhlcyB2aWEgbGlicGNyZTEgKGRlZmF1bHQgaXMgTk8pXSkKK0FTX0hFTFBfU1RSSU5HKFtdLCAgICAgICAgICAgW0FSRyBjYW4gYmUgYWxzbyBwcmVmaXggZm9yIGxpYnBjcmUgbGlicmFyeSBhbmQgaGVhZGVyc10pLAorICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KKwlVU0VfTElCUENSRTE9CisgICAgZWxpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbgorCVVTRV9MSUJQQ1JFMT1ZZXNQbGVhc2UKKyAgICBlbHNlCisJVVNFX0xJQlBDUkUxPVllc1BsZWFzZQorCUxJQlBDUkVESVI9JHdpdGh2YWwKKwlBQ19NU0dfTk9USUNFKFtTZXR0aW5nIExJQlBDUkVESVIgdG8gJExJQlBDUkVESVJdKQorICAgICAgICBkbmwgVVNFX0xJQlBDUkUxIGNhbiBzdGlsbCBiZSBtb2RpZmllZCBiZWxvdywgc28gZG9uJ3Qgc3Vic3RpdHV0ZQorICAgICAgICBkbmwgaXQgeWV0LgorCUdJVF9DT05GX1NVQlNUKFtMSUJQQ1JFRElSXSkKKyAgICBmaSkKKworQUNfQVJHX1dJVEgobGlicGNyZTIsCitBU19IRUxQX1NUUklORyhbLS13aXRoLWxpYnBjcmUyXSxbc3VwcG9ydCBQZXJsLWNvbXBhdGlibGUgcmVnZXhlcyB2aWEgbGlicGNyZTIgKGRlZmF1bHQgaXMgTk8pXSkKK0FTX0hFTFBfU1RSSU5HKFtdLCAgICAgICAgICAgW0FSRyBjYW4gYmUgYWxzbyBwcmVmaXggZm9yIGxpYnBjcmUgbGlicmFyeSBhbmQgaGVhZGVyc10pLAorICAgIGlmIHRlc3QgLW4gIiRVU0VfTElCUENSRTIiOyB0aGVuCisgICAgICAgIEFDX01TR19FUlJPUihbT25seSBzdXBwbHkgb25lIG9mIC0td2l0aC1saWJwY3JlIG9yIGl0cyBzeW5vbnltIC0td2l0aC1saWJwY3JlMiFdKQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkVVNFX0xJQlBDUkUxIjsgdGhlbgorICAgICAgICBBQ19NU0dfRVJST1IoW09ubHkgc3VwcGx5IG9uZSBvZiAtLXdpdGgtbGlicGNyZTEgb3IgLS13aXRoLWxpYnBjcmUyIV0pCisgICAgZmkKKworICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KKwlVU0VfTElCUENSRTI9CisgICAgZWxpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbgorCVVTRV9MSUJQQ1JFMj1ZZXNQbGVhc2UKKyAgICBlbHNlCisJVVNFX0xJQlBDUkUyPVllc1BsZWFzZQorCUxJQlBDUkVESVI9JHdpdGh2YWwKKwlBQ19NU0dfTk9USUNFKFtTZXR0aW5nIExJQlBDUkVESVIgdG8gJExJQlBDUkVESVJdKQorICAgICAgICBkbmwgVVNFX0xJQlBDUkUyIGNhbiBzdGlsbCBiZSBtb2RpZmllZCBiZWxvdywgc28gZG9uJ3Qgc3Vic3RpdHV0ZQorICAgICAgICBkbmwgaXQgeWV0LgorCUdJVF9DT05GX1NVQlNUKFtMSUJQQ1JFRElSXSkKKyAgICBmaSkKKyMKKyMgRGVmaW5lIEhBVkVfQUxMT0NBX0ggaWYgeW91IGhhdmUgd29ya2luZyBhbGxvY2EoMykgZGVmaW5lZCBpbiB0aGF0IGhlYWRlci4KK0FDX0ZVTkNfQUxMT0NBCitjYXNlICRhY19jdl93b3JraW5nX2FsbG9jYV9oIGluCisgICAgeWVzKSAgICBIQVZFX0FMTE9DQV9IPVllc1BsZWFzZTs7CisgICAgKikgICAgICBIQVZFX0FMTE9DQV9IPScnOzsKK2VzYWMKK0dJVF9DT05GX1NVQlNUKFtIQVZFX0FMTE9DQV9IXSkKKyMKKyMgRGVmaW5lIE5PX0NVUkwgaWYgeW91IGRvIG5vdCBoYXZlIGN1cmwgaW5zdGFsbGVkLiAgZ2l0LWh0dHAtcHVsbCBhbmQKKyMgZ2l0LWh0dHAtcHVzaCBhcmUgbm90IGJ1aWx0LCBhbmQgeW91IGNhbm5vdCB1c2UgaHR0cDovLyBhbmQgaHR0cHM6Ly8KKyMgdHJhbnNwb3J0cy4KKyMKKyMgRGVmaW5lIENVUkxESVI9L2Zvby9iYXIgaWYgeW91ciBjdXJsIGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyBhcmUgaW4KKyMgL2Zvby9iYXIvaW5jbHVkZSBhbmQgL2Zvby9iYXIvbGliIGRpcmVjdG9yaWVzLgorQUNfQVJHX1dJVEgoY3VybCwKK0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtY3VybF0sW3N1cHBvcnQgaHR0cChzKTovLyB0cmFuc3BvcnRzIChkZWZhdWx0IGlzIFlFUyldKQorQVNfSEVMUF9TVFJJTkcoW10sICAgICAgICAgICBbQVJHIGNhbiBiZSBhbHNvIHByZWZpeCBmb3IgY3VybCBsaWJyYXJ5IGFuZCBoZWFkZXJzXSksCitHSVRfUEFSU0VfV0lUSChjdXJsKSkKKyMKKyMgRGVmaW5lIE5PX0VYUEFUIGlmIHlvdSBkbyBub3QgaGF2ZSBleHBhdCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdXNoIGlzCisjIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgcHVzaCB1c2luZyBodHRwOi8vIGFuZCBodHRwczovLyB0cmFuc3BvcnRzLgorIworIyBEZWZpbmUgRVhQQVRESVI9L2Zvby9iYXIgaWYgeW91ciBleHBhdCBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlIGluCisjIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4KK0FDX0FSR19XSVRIKGV4cGF0LAorQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1leHBhdF0sCitbc3VwcG9ydCBnaXQtcHVzaCB1c2luZyBodHRwOi8vIGFuZCBodHRwczovLyB0cmFuc3BvcnRzIHZpYSBXZWJEQVYgKGRlZmF1bHQgaXMgWUVTKV0pCitBU19IRUxQX1NUUklORyhbXSwgICAgICAgICAgICBbQVJHIGNhbiBiZSBhbHNvIHByZWZpeCBmb3IgZXhwYXQgbGlicmFyeSBhbmQgaGVhZGVyc10pLAorR0lUX1BBUlNFX1dJVEgoZXhwYXQpKQorIworIyBEZWZpbmUgTk9fRklOSyBpZiB5b3UgYXJlIGJ1aWxkaW5nIG9uIERhcndpbi9NYWMgT1MgWCwgaGF2ZSBGaW5rCisjIGluc3RhbGxlZCBpbiAvc3csIGJ1dCBkb24ndCB3YW50IEdJVCB0byBsaW5rIGFnYWluc3QgYW55IGxpYnJhcmllcworIyBpbnN0YWxsZWQgdGhlcmUuICBJZiBkZWZpbmVkIHlvdSBtYXkgc3BlY2lmeSB5b3VyIG93biAob3IgRmluaydzKQorIyBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZCBsaWJyYXJ5IGRpcmVjdG9yaWVzIGJ5IGRlZmluaW5nIENGTEFHUworIyBhbmQgTERGTEFHUyBhcHByb3ByaWF0ZWx5LgorIworIyBEZWZpbmUgTk9fREFSV0lOX1BPUlRTIGlmIHlvdSBhcmUgYnVpbGRpbmcgb24gRGFyd2luL01hYyBPUyBYLAorIyBoYXZlIERhcndpblBvcnRzIGluc3RhbGxlZCBpbiAvb3B0L2xvY2FsLCBidXQgZG9uJ3Qgd2FudCBHSVQgdG8KKyMgbGluayBhZ2FpbnN0IGFueSBsaWJyYXJpZXMgaW5zdGFsbGVkIHRoZXJlLiAgSWYgZGVmaW5lZCB5b3UgbWF5CisjIHNwZWNpZnkgeW91ciBvd24gKG9yIERhcndpblBvcnQncykgaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQKKyMgbGlicmFyeSBkaXJlY3RvcmllcyBieSBkZWZpbmluZyBDRkxBR1MgYW5kIExERkxBR1MgYXBwcm9wcmlhdGVseS4KKyMKKyMgRGVmaW5lIE5PX01NQVAgaWYgeW91IHdhbnQgdG8gYXZvaWQgbW1hcC4KKyMKKyMgRGVmaW5lIE5PX0lDT05WIGlmIHlvdXIgbGliYyBkb2VzIG5vdCBwcm9wZXJseSBzdXBwb3J0IGljb252LgorQUNfQVJHX1dJVEgoaWNvbnYsCitBU19IRUxQX1NUUklORyhbLS13aXRob3V0LWljb252XSwKK1tpZiB5b3VyIGFyY2hpdGVjdHVyZSBkb2Vzbid0IHByb3Blcmx5IHN1cHBvcnQgaWNvbnZdKQorQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1pY29udj1QQVRIXSwKK1tQQVRIIGlzIHByZWZpeCBmb3IgbGliaWNvbnYgbGlicmFyeSBhbmQgaGVhZGVyc10pCitBU19IRUxQX1NUUklORyhbXSwKK1t1c2VkIG9ubHkgaWYgeW91IG5lZWQgbGlua2luZyB3aXRoIGxpYmljb252XSksCitHSVRfUEFSU0VfV0lUSChpY29udikpCisKKyMjIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gYW5kIC0tZGlzYWJsZS1GRUFUVVJFCisjCisjIERlZmluZSBVU0VfTlNFQyBiZWxvdyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzCisjIGFuZCBjdGltZXMuIE5vdGUgdGhhdCB5b3UgbmVlZCByZWNlbnQgZ2xpYmMgKGF0IGxlYXN0IDIuMi40KSBmb3IgdGhpcywgYW5kCisjIGl0IHdpbGwgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseQorIyByYW5kb21seSBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZAorIyB0aW1lcyAobXkgZXh0MyBkb2Vzbid0KS4KKyMKKyMgRGVmaW5lIFVTRV9TVERFViBiZWxvdyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCB0aGUgdW5kZXJseWluZyBkZXZpY2UKKyMgY2hhbmdlIGJlaW5nIGNvbnNpZGVyZWQgYW4gaW5vZGUgY2hhbmdlIGZyb20gdGhlIHVwZGF0ZS1pbmRleCBwZXJzcGVjdGl2ZS4KKworIworIyBBbGxvdyB1c2VyIHRvIHNldCBFVENfR0lUQ09ORklHIHZhcmlhYmxlCitHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVIoZ2l0Y29uZmlnLCBFVENfR0lUQ09ORklHLAorCQkJVXNlIFZBTFVFIGluc3RlYWQgb2YgL2V0Yy9naXRjb25maWcgYXMgdGhlCisJCQlnbG9iYWwgZ2l0IGNvbmZpZ3VyYXRpb24gZmlsZS4KKwkJCUlmIFZBTFVFIGlzIG5vdCBmdWxseSBxdWFsaWZpZWQgaXQgd2lsbCBiZSBpbnRlcnByZXRlZAorCQkJYXMgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBjb21wdXRlZCBwcmVmaXggYXQgcnVudGltZS4pCisKKyMKKyMgQWxsb3cgdXNlciB0byBzZXQgRVRDX0dJVEFUVFJJQlVURVMgdmFyaWFibGUKK0dJVF9QQVJTRV9XSVRIX1NFVF9NQUtFX1ZBUihnaXRhdHRyaWJ1dGVzLCBFVENfR0lUQVRUUklCVVRFUywKKwkJCVVzZSBWQUxVRSBpbnN0ZWFkIG9mIC9ldGMvZ2l0YXR0cmlidXRlcyBhcyB0aGUKKwkJCWdsb2JhbCBnaXQgYXR0cmlidXRlcyBmaWxlLgorCQkJSWYgVkFMVUUgaXMgbm90IGZ1bGx5IHF1YWxpZmllZCBpdCB3aWxsIGJlIGludGVycHJldGVkCisJCQlhcyBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIGNvbXB1dGVkIHByZWZpeCBhdCBydW50aW1lLikKKworIworIyBBbGxvdyB1c2VyIHRvIHNldCB0aGUgZGVmYXVsdCBwYWdlcgorR0lUX1BBUlNFX1dJVEhfU0VUX01BS0VfVkFSKHBhZ2VyLCBERUZBVUxUX1BBR0VSLAorCQkJVXNlIFZBTFVFIGFzIHRoZSBmYWxsLWJhY2sgcGFnZXIgaW5zdGVhZCBvZiAnbGVzcycuCisJCQlUaGlzIGlzIHVzZWQgYnkgdGhpbmdzIGxpa2UgJ2dpdCBsb2cnIHdoZW4gdGhlIHVzZXIKKwkJCWRvZXMgbm90IHNwZWNpZnkgYSBwYWdlciB0byB1c2UgdGhyb3VnaCBhbHRlcm5hdGUKKwkJCW1ldGhvZHMuIGVnOiAvdXNyL2Jpbi9wYWdlcikKKyMKKyMgQWxsb3cgdXNlciB0byBzZXQgdGhlIGRlZmF1bHQgZWRpdG9yCitHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVIoZWRpdG9yLCBERUZBVUxUX0VESVRPUiwKKwkJCVVzZSBWQUxVRSBhcyB0aGUgZmFsbC1iYWNrIGVkaXRvciBpbnN0ZWFkIG9mICd2aScuCisJCQlUaGlzIGlzIHVzZWQgYnkgdGhpbmdzIGxpa2UgJ2dpdCBjb21taXQnIHdoZW4gdGhlIHVzZXIKKwkJCWRvZXMgbm90IHNwZWNpZnkgYSBwcmVmZXJyZWQgZWRpdG9yIHRocm91Z2ggb3RoZXIKKwkJCW1ldGhvZHMuIGVnOiAvdXNyL2Jpbi9lZGl0b3IpCisKKyMKKyMgRGVmaW5lIFNIRUxMX1BBVEggdG8gcHJvdmlkZSBwYXRoIHRvIHNoZWxsLgorR0lUX0FSR19TRVRfUEFUSChzaGVsbCkKKyMKKyMgRGVmaW5lIFBFUkxfUEFUSCB0byBwcm92aWRlIHBhdGggdG8gUGVybC4KK0dJVF9BUkdfU0VUX1BBVEgocGVybCkKKyMKKyMgRGVmaW5lIFBZVEhPTl9QQVRIIHRvIHByb3ZpZGUgcGF0aCB0byBQeXRob24uCitHSVRfQVJHX1NFVF9QQVRIKHB5dGhvbiwgYWxsb3ctd2l0aG91dCkKKyMKKyMgRGVmaW5lIFpMSUJfUEFUSCB0byBwcm92aWRlIHBhdGggdG8gemxpYi4KK0dJVF9BUkdfU0VUX1BBVEgoemxpYikKKyMKKyMgRGVjbGFyZSB0aGUgd2l0aC10Y2x0ay93aXRob3V0LXRjbHRrIG9wdGlvbnMuCitBQ19BUkdfV0lUSCh0Y2x0aywKK0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtdGNsdGtdLFt1c2UgVGNsL1RrIEdVSSAoZGVmYXVsdCBpcyBZRVMpXSkKK0FTX0hFTFBfU1RSSU5HKFtdLFtBUkcgaXMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgVGNsL1RrIGludGVycHJldGVyLl0pCitBU19IRUxQX1NUUklORyhbXSxbQmFyZSAtLXdpdGgtdGNsdGsgd2lsbCBtYWtlIHRoZSBHVUkgcGFydCBvbmx5IGlmXSkKK0FTX0hFTFBfU1RSSU5HKFtdLFtUY2wvVGsgaW50ZXJwcmV0ZXIgd2lsbCBiZSBmb3VuZCBpbiBhIHN5c3RlbS5dKSwKK0dJVF9QQVJTRV9XSVRIKHRjbHRrKSkKKyMKKworCisjIyBDaGVja3MgZm9yIHByb2dyYW1zLgorQUNfTVNHX05PVElDRShbQ0hFQ0tTIGZvciBwcm9ncmFtc10pCisjCitBQ19QUk9HX0NDKFtjYyBnY2NdKQorQUNfQ19JTkxJTkUKK2Nhc2UgJGFjX2N2X2NfaW5saW5lIGluCisgIGlubGluZSB8IHllcyB8IG5vKSBJTkxJTkU9Jyc7OworICAqKSAgICAgICAgICAgICAgICAgSU5MSU5FPSRhY19jdl9jX2lubGluZSA7OworZXNhYworR0lUX0NPTkZfU1VCU1QoW0lOTElORV0pCisKKyMgd2hpY2ggc3dpdGNoIHRvIHBhc3MgcnVudGltZSBwYXRoIHRvIGR5bmFtaWMgbGlicmFyaWVzIHRvIHRoZSBsaW5rZXIKK0FDX0NBQ0hFX0NIRUNLKFtpZiBsaW5rZXIgc3VwcG9ydHMgLVJdLCBnaXRfY3ZfbGRfZGFzaHIsIFsKKyAgIFNBVkVfTERGTEFHUz0iJHtMREZMQUdTfSIKKyAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSAtUiAvIgorICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwgW10pXSwgW2dpdF9jdl9sZF9kYXNocj15ZXNdLCBbZ2l0X2N2X2xkX2Rhc2hyPW5vXSkKKyAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSIKK10pCitpZiB0ZXN0ICIkZ2l0X2N2X2xkX2Rhc2hyIiA9ICJ5ZXMiOyB0aGVuCisgICBDQ19MRF9EWU5QQVRIPS1SCitlbHNlCisgICBBQ19DQUNIRV9DSEVDSyhbaWYgbGlua2VyIHN1cHBvcnRzIC1XbCwtcnBhdGgsXSwgZ2l0X2N2X2xkX3dsX3JwYXRoLCBbCisgICAgICBTQVZFX0xERkxBR1M9IiR7TERGTEFHU30iCisgICAgICBMREZMQUdTPSIke1NBVkVfTERGTEFHU30gLVdsLC1ycGF0aCwvIgorICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwgW10pXSwgW2dpdF9jdl9sZF93bF9ycGF0aD15ZXNdLCBbZ2l0X2N2X2xkX3dsX3JwYXRoPW5vXSkKKyAgICAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSIKKyAgIF0pCisgICBpZiB0ZXN0ICIkZ2l0X2N2X2xkX3dsX3JwYXRoIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBDQ19MRF9EWU5QQVRIPS1XbCwtcnBhdGgsCisgICBlbHNlCisgICAgICBBQ19DQUNIRV9DSEVDSyhbaWYgbGlua2VyIHN1cHBvcnRzIC1ycGF0aF0sIGdpdF9jdl9sZF9ycGF0aCwgWworICAgICAgICAgU0FWRV9MREZMQUdTPSIke0xERkxBR1N9IgorICAgICAgICAgTERGTEFHUz0iJHtTQVZFX0xERkxBR1N9IC1ycGF0aCAvIgorICAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwgW10pXSwgW2dpdF9jdl9sZF9ycGF0aD15ZXNdLCBbZ2l0X2N2X2xkX3JwYXRoPW5vXSkKKyAgICAgICAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSIKKyAgICAgIF0pCisgICAgICBpZiB0ZXN0ICIkZ2l0X2N2X2xkX3JwYXRoIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICBDQ19MRF9EWU5QQVRIPS1ycGF0aAorICAgICAgZWxzZQorICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2lmIGxpbmtlciBzdXBwb3J0cyAtV2wsK2IsXSwgZ2l0X2N2X2xkX3dsX2IsIFsKKyAgICAgICAgICAgIFNBVkVfTERGTEFHUz0iJHtMREZMQUdTfSIKKyAgICAgICAgICAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSAtV2wsK2IsLyIKKyAgICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtdKV0sIFtnaXRfY3ZfbGRfd2xfYj15ZXNdLCBbZ2l0X2N2X2xkX3dsX2I9bm9dKQorICAgICAgICAgICAgTERGTEFHUz0iJHtTQVZFX0xERkxBR1N9IgorICAgICAgICAgXSkKKyAgICAgICAgIGlmIHRlc3QgIiRnaXRfY3ZfbGRfd2xfYiIgPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgQ0NfTERfRFlOUEFUSD0tV2wsK2IsCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIENDX0xEX0RZTlBBVEg9CisgICAgICAgICAgICAgQUNfTVNHX1dBUk4oW2xpbmtlciBkb2VzIG5vdCBzdXBwb3J0IHJ1bnRpbWUgcGF0aCB0byBkeW5hbWljIGxpYnJhcmllc10pCisgICAgICAgICAgZmkKKyAgICAgIGZpCisgICBmaQorZmkKK0dJVF9DT05GX1NVQlNUKFtDQ19MRF9EWU5QQVRIXSkKKyNBQ19QUk9HX0lOU1RBTEwJCSMgbmVlZHMgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluIHNvdXJjZXMKK0FDX0NIRUNLX1RPT0xTKEFSLCBbZ2FyIGFyXSwgOikKK0FDX0NIRUNLX1BST0dTKFRBUiwgW2d0YXIgdGFyXSkKK0FDX0NIRUNLX1BST0dTKERJRkYsIFtnbnVkaWZmIGdkaWZmIGRpZmZdKQorIyBUQ0xUS19QQVRIIHdpbGwgYmUgc2V0IHRvIHNvbWUgdmFsdWUgaWYgd2Ugd2FudCBUY2wvVGsKKyMgb3Igd2lsbCBiZSBlbXB0eSBvdGhlcndpc2UuCitpZiB0ZXN0IC1uICIkTk9fVENMVEsiOyB0aGVuCisgIFRDTFRLX1BBVEg9CitlbHNlCisgIGlmIHRlc3QgIiR3aXRoX3RjbHRrIiA9ICIiOyB0aGVuCisgICMgTm8gVGNsL1RrIHN3aXRjaGVzIGdpdmVuLiBEbyBub3QgY2hlY2sgZm9yIFRjbC9UaywgdXNlIGJhcmUgJ3dpc2gnLgorICAgIFRDTFRLX1BBVEg9d2lzaAorICBlbGlmIHRlc3QgIiR3aXRoX3RjbHRrIiA9ICJ5ZXMiOyB0aGVuCisgICMgVGNsL1RrIGNoZWNrIHJlcXVlc3RlZC4KKyAgICBBQ19DSEVDS19QUk9HUyhUQ0xUS19QQVRILCBbd2lzaF0sICkKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW1VzaW5nIFRjbC9UayBpbnRlcnByZXRlciAkd2l0aF90Y2x0a10pCisgICAgVENMVEtfUEFUSD0iJHdpdGhfdGNsdGsiCisgIGZpCitmaQorR0lUX0NPTkZfU1VCU1QoW1RDTFRLX1BBVEhdKQorQUNfQ0hFQ0tfUFJPR1MoQVNDSUlET0MsIFthc2NpaWRvY10pCitpZiB0ZXN0IC1uICIkQVNDSUlET0MiOyB0aGVuCisJQUNfTVNHX0NIRUNLSU5HKFtmb3IgYXNjaWlkb2MgdmVyc2lvbl0pCisJYXNjaWlkb2NfdmVyc2lvbj1gJEFTQ0lJRE9DIC0tdmVyc2lvbiAyPi9kZXYvbnVsbGAKKwljYXNlICIke2FzY2lpZG9jX3ZlcnNpb259IiBpbgorCWFzY2lpZG9jJyAnOCopCisJCUFDX01TR19SRVNVTFQoWyR7YXNjaWlkb2NfdmVyc2lvbn1dKQorCQk7OworCSopCisJCUFDX01TR19SRVNVTFQoWyR7YXNjaWlkb2NfdmVyc2lvbn0gKHVua25vd24pXSkKKwkJOzsKKwllc2FjCitmaQorCitpZiBncmVwIC1hIGFzY2lpIGNvbmZpZ3VyZS5hYyA+L2Rldi9udWxsOyB0aGVuCisgIEFDX01TR19SRVNVTFQoW1VzaW5nICdncmVwIC1hJyBmb3Igc2FuZV9ncmVwXSkKKyAgU0FORV9URVhUX0dSRVA9LWEKK2Vsc2UKKyAgU0FORV9URVhUX0dSRVA9CitmaQorR0lUX0NPTkZfU1VCU1QoW1NBTkVfVEVYVF9HUkVQXSkKKworIyMgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCitBQ19NU0dfTk9USUNFKFtDSEVDS1MgZm9yIGxpYnJhcmllc10pCisjCisjIERlZmluZSBOT19PUEVOU1NMIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdSBkbyBub3QgaGF2ZSBPcGVuU1NMLgorIyBEZWZpbmUgTkVFRFNfU1NMX1dJVEhfQ1JZUFRPIGlmIHlvdSBuZWVkIC1sY3J5cHRvIHdpdGggLWxzc2wgKERhcndpbikuCisKK0dJVF9TVEFTSF9GTEFHUygkT1BFTlNTTERJUikKKworQUNfQ0hFQ0tfTElCKFtjcnlwdG9dLCBbU0hBMV9Jbml0XSwKK1tORUVEU19TU0xfV0lUSF9DUllQVE89XSwKK1tBQ19DSEVDS19MSUIoW3NzbF0sIFtTSEExX0luaXRdLAorIFtORUVEU19TU0xfV0lUSF9DUllQVE89WWVzUGxlYXNlIE5PX09QRU5TU0w9XSwKKyBbTkVFRFNfU1NMX1dJVEhfQ1JZUFRPPSAgICAgICAgICBOT19PUEVOU1NMPVllc1BsZWFzZV0pXSkKKworR0lUX1VOU1RBU0hfRkxBR1MoJE9QRU5TU0xESVIpCisKK0dJVF9DT05GX1NVQlNUKFtORUVEU19TU0xfV0lUSF9DUllQVE9dKQorR0lUX0NPTkZfU1VCU1QoW05PX09QRU5TU0xdKQorCisjCisjIEhhbmRsZSB0aGUgVVNFX0xJQlBDUkUxIGFuZCBVU0VfTElCUENSRTIgb3B0aW9ucyBwb3RlbnRpYWxseSBzZXQKKyMgYWJvdmUuCisjCisKK2lmIHRlc3QgLW4gIiRVU0VfTElCUENSRTEiOyB0aGVuCisKK0dJVF9TVEFTSF9GTEFHUygkTElCUENSRURJUikKKworQUNfQ0hFQ0tfTElCKFtwY3JlXSwgW3BjcmVfdmVyc2lvbl0sCitbVVNFX0xJQlBDUkUxPVllc1BsZWFzZV0sCitbVVNFX0xJQlBDUkUxPV0pCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRMSUJQQ1JFRElSKQorCitHSVRfQ09ORl9TVUJTVChbVVNFX0xJQlBDUkUxXSkKKworZmkKKworCitpZiB0ZXN0IC1uICIkVVNFX0xJQlBDUkUyIjsgdGhlbgorCitHSVRfU1RBU0hfRkxBR1MoJExJQlBDUkVESVIpCisKK0FDX0NIRUNLX0xJQihbcGNyZTItOF0sIFtwY3JlMl9jb25maWdfOF0sCitbVVNFX0xJQlBDUkUyPVllc1BsZWFzZV0sCitbVVNFX0xJQlBDUkUyPV0pCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRMSUJQQ1JFRElSKQorCitHSVRfQ09ORl9TVUJTVChbVVNFX0xJQlBDUkUyXSkKKworZmkKKworIworIyBEZWZpbmUgTk9fQ1VSTCBpZiB5b3UgZG8gbm90IGhhdmUgbGliY3VybCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdWxsIGFuZAorIyBnaXQtaHR0cC1wdXNoIGFyZSBub3QgYnVpbHQsIGFuZCB5b3UgY2Fubm90IHVzZSBodHRwOi8vIGFuZCBodHRwczovLworIyB0cmFuc3BvcnRzLgorCitHSVRfU1RBU0hfRkxBR1MoJENVUkxESVIpCisKK0FDX0NIRUNLX0xJQihbY3VybF0sIFtjdXJsX2dsb2JhbF9pbml0XSwKK1tOT19DVVJMPV0sCitbTk9fQ1VSTD1ZZXNQbGVhc2VdKQorCitHSVRfVU5TVEFTSF9GTEFHUygkQ1VSTERJUikKKworR0lUX0NPTkZfU1VCU1QoW05PX0NVUkxdKQorCitpZiB0ZXN0IC16ICIkTk9fQ1VSTCI7IHRoZW4KKworQUNfQ0hFQ0tfUFJPRyhbQ1VSTF9DT05GSUddLCBbY3VybC1jb25maWddLAorW2N1cmwtY29uZmlnXSwKK1tub10pCisKK2lmIHRlc3QgJENVUkxfQ09ORklHICE9IG5vOyB0aGVuCisgICAgR0lUX0NPTkZfU1VCU1QoW0NVUkxfQ09ORklHXSkKKworICAgIGlmIHRlc3QgLXogIiRDVVJMX0NPTkZJR19PUFRTIjsgdGhlbgorICAgICAgICBDVVJMX0NPTkZJR19PUFRTPSItLWxpYnMiCisgICAgZmkKKworICAgIENVUkxfTERGTEFHUz0kKCRDVVJMX0NPTkZJRyAkQ1VSTF9DT05GSUdfT1BUUykKKyAgICBBQ19NU0dfTk9USUNFKFtTZXR0aW5nIENVUkxfTERGTEFHUyB0byAnJENVUkxfTERGTEFHUyddKQorICAgIEdJVF9DT05GX1NVQlNUKFtDVVJMX0xERkxBR1NdLCBbJENVUkxfTERGTEFHU10pCitmaQorCitmaQorCisKKyMKKyMgRGVmaW5lIE5PX0VYUEFUIGlmIHlvdSBkbyBub3QgaGF2ZSBleHBhdCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdXNoIGlzCisjIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgcHVzaCB1c2luZyBodHRwOi8vIGFuZCBodHRwczovLyB0cmFuc3BvcnRzLgorCitHSVRfU1RBU0hfRkxBR1MoJEVYUEFURElSKQorCitBQ19DSEVDS19MSUIoW2V4cGF0XSwgW1hNTF9QYXJzZXJDcmVhdGVdLAorW05PX0VYUEFUPV0sCitbTk9fRVhQQVQ9WWVzUGxlYXNlXSkKKworR0lUX1VOU1RBU0hfRkxBR1MoJEVYUEFURElSKQorCitHSVRfQ09ORl9TVUJTVChbTk9fRVhQQVRdKQorCisjCisjIERlZmluZSBORUVEU19MSUJJQ09OViBpZiBsaW5raW5nIHdpdGggbGliYyBpcyBub3QgZW5vdWdoIChEYXJ3aW4gYW5kCisjIHNvbWUgU29sYXJpcyBpbnN0YWxsYXRpb25zKS4KKyMgRGVmaW5lIE5PX0lDT05WIGlmIG5laXRoZXIgbGliYyBub3IgbGliaWNvbnYgc3VwcG9ydCBpY29udi4KKworaWYgdGVzdCAteiAiJE5PX0lDT05WIjsgdGhlbgorCitHSVRfU1RBU0hfRkxBR1MoJElDT05WRElSKQorCitBQ19ERUZVTihbSUNPTlZURVNUX1NSQ10sCitbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8aWNvbnYuaD5dLAorIFtpY29udl9vcGVuKCIiLCAiIik7XSldKQorCitpZiB0ZXN0IC1uICIkSUNPTlZESVIiOyB0aGVuCisgICBsaWJfb3JkZXI9Ii1saWNvbnYgLWxjIgorZWxzZQorICAgbGliX29yZGVyPSItbGMgLWxpY29udiIKK2ZpCisKK05PX0lDT05WPVllc1BsZWFzZQorCitmb3IgbCBpbiAkbGliX29yZGVyOyBkbworICAgIGlmIHRlc3QgIiRsIiA9ICItbGljb252IjsgdGhlbgorICAgICAgIE5FRURTX0xJQklDT05WPVllc1BsZWFzZQorICAgIGVsc2UKKyAgICAgICBORUVEU19MSUJJQ09OVj0KKyAgICBmaQorCisgICAgb2xkX0xJQlM9IiRMSUJTIgorICAgIExJQlM9IiRMSUJTICRsIgorICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGljb252IGluICRsXSkKKyAgICBBQ19MSU5LX0lGRUxTRShbSUNPTlZURVNUX1NSQ10sCisJW0FDX01TR19SRVNVTFQoW3llc10pCisJTk9fSUNPTlY9CisJYnJlYWtdLAorCVtBQ19NU0dfUkVTVUxUKFtub10pXSkKKyAgICBMSUJTPSIkb2xkX0xJQlMiCitkb25lCisKKyNpbiBjYXNlIG9mIGJyZWFrCitMSUJTPSIkb2xkX0xJQlMiCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRJQ09OVkRJUikKKworR0lUX0NPTkZfU1VCU1QoW05FRURTX0xJQklDT05WXSkKK0dJVF9DT05GX1NVQlNUKFtOT19JQ09OVl0pCisKK2lmIHRlc3QgLW4gIiROT19JQ09OViI7IHRoZW4KKyAgICBORUVEU19MSUJJQ09OVj0KK2ZpCisKK2ZpCisKKyMKKyMgRGVmaW5lIE5PX0RFRkxBVEVfQk9VTkQgaWYgZGVmbGF0ZUJvdW5kIGlzIG1pc3NpbmcgZnJvbSB6bGliLgorCitHSVRfU1RBU0hfRkxBR1MoJFpMSUJfUEFUSCkKKworQUNfREVGVU4oW1pMSUJURVNUX1NSQ10sIFsKK0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHpsaWIuaD5dLAorIFtkZWZsYXRlQm91bmQoMCwgMCk7XSldKQorQUNfTVNHX0NIRUNLSU5HKFtmb3IgZGVmbGF0ZUJvdW5kIGluIC1sel0pCitvbGRfTElCUz0iJExJQlMiCitMSUJTPSIkTElCUyAtbHoiCitBQ19MSU5LX0lGRUxTRShbWkxJQlRFU1RfU1JDXSwKKwlbQUNfTVNHX1JFU1VMVChbeWVzXSldLAorCVtBQ19NU0dfUkVTVUxUKFtub10pCisJTk9fREVGTEFURV9CT1VORD15ZXNdKQorTElCUz0iJG9sZF9MSUJTIgorCitHSVRfVU5TVEFTSF9GTEFHUygkWkxJQl9QQVRIKQorCitHSVRfQ09ORl9TVUJTVChbTk9fREVGTEFURV9CT1VORF0pCisKKyMKKyMgRGVmaW5lIE5FRURTX1NPQ0tFVCBpZiBsaW5raW5nIHdpdGggbGliYyBpcyBub3QgZW5vdWdoIChTdW5PUywKKyMgUGF0cmljayBNYXVyaXR6KS4KK0FDX0NIRUNLX0xJQihbY10sIFtzb2NrZXRdLAorW05FRURTX1NPQ0tFVD1dLAorW05FRURTX1NPQ0tFVD1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05FRURTX1NPQ0tFVF0pCit0ZXN0IC1uICIkTkVFRFNfU09DS0VUIiAmJiBMSUJTPSIkTElCUyAtbHNvY2tldCIKKworIworIyBUaGUgbmV4dCBmZXcgdGVzdHMgd2lsbCBkZWZpbmUgTkVFRFNfUkVTT0xWIGlmIGxpbmtpbmcgd2l0aAorIyBsaWJyZXNvbHYgcHJvdmlkZXMgc29tZSBvZiB0aGUgZnVuY3Rpb25zIHdlIHdvdWxkIG5vcm1hbGx5IGdldAorIyBmcm9tIGxpYmMuCitORUVEU19SRVNPTFY9CisjCisjIERlZmluZSBOT19JTkVUX05UT1AgaWYgbGlua2luZyB3aXRoIC1scmVzb2x2IGlzIG5vdCBlbm91Z2guCisjIFNvbGFyaXMgMi43IGluIHBhcnRpY3VsYXIgaG9zIGluZXRfbnRvcCBpbiAtbHJlc29sdi4KK05PX0lORVRfTlRPUD0KK0FDX0NIRUNLX0ZVTkMoW2luZXRfbnRvcF0sCisgICAgW10sCisgICAgW0FDX0NIRUNLX0xJQihbcmVzb2x2XSwgW2luZXRfbnRvcF0sCisJW05FRURTX1JFU09MVj1ZZXNQbGVhc2VdLAorCVtOT19JTkVUX05UT1A9WWVzUGxlYXNlXSkKK10pCitHSVRfQ09ORl9TVUJTVChbTk9fSU5FVF9OVE9QXSkKKyMKKyMgRGVmaW5lIE5PX0lORVRfUFRPTiBpZiBsaW5raW5nIHdpdGggLWxyZXNvbHYgaXMgbm90IGVub3VnaC4KKyMgU29sYXJpcyAyLjcgaW4gcGFydGljdWxhciBob3MgaW5ldF9wdG9uIGluIC1scmVzb2x2LgorTk9fSU5FVF9QVE9OPQorQUNfQ0hFQ0tfRlVOQyhbaW5ldF9wdG9uXSwKKyAgICBbXSwKKyAgICBbQUNfQ0hFQ0tfTElCKFtyZXNvbHZdLCBbaW5ldF9wdG9uXSwKKwlbTkVFRFNfUkVTT0xWPVllc1BsZWFzZV0sCisJW05PX0lORVRfUFRPTj1ZZXNQbGVhc2VdKQorXSkKK0dJVF9DT05GX1NVQlNUKFtOT19JTkVUX1BUT05dKQorIworIyBEZWZpbmUgTk9fSFNUUkVSUk9SIGlmIGxpbmtpbmcgd2l0aCAtbHJlc29sdiBpcyBub3QgZW5vdWdoLgorIyBTb2xhcmlzIDIuNiBpbiBwYXJ0aWN1bGFyIGhhcyBubyBoc3RyZXJyb3IsIGV2ZW4gaW4gLWxyZXNvbHYuCitOT19IU1RSRVJST1I9CitBQ19DSEVDS19GVU5DKFtoc3RyZXJyb3JdLAorICAgIFtdLAorICAgIFtBQ19DSEVDS19MSUIoW3Jlc29sdl0sIFtoc3RyZXJyb3JdLAorCVtORUVEU19SRVNPTFY9WWVzUGxlYXNlXSwKKwlbTk9fSFNUUkVSUk9SPVllc1BsZWFzZV0pCitdKQorR0lUX0NPTkZfU1VCU1QoW05PX0hTVFJFUlJPUl0pCisKK2RubCBUaGlzIG11c3QgZ28gYWZ0ZXIgYWxsIHRoZSBwb3NzaWJsZSBwbGFjZXMgZm9yIGl0cyBpbml0aWFsaXphdGlvbiwKK2RubCBpbiB0aGUgQUNfQ0hFQ0tfRlVOQyBpbnZvY2F0aW9ucyBhYm92ZS4KK0dJVF9DT05GX1NVQlNUKFtORUVEU19SRVNPTFZdKQorIworIyBJZiBhbnkgb2YgdGhlIGFib3ZlIHRlc3RzIGRldGVybWluZWQgdGhhdCAtbHJlc29sdiBpcyBuZWVkZWQgYXQKKyMgYnVpbGQtdGltZSwgYWxzbyBzZXQgaXQgaGVyZSBmb3IgcmVtYWluaW5nIGNvbmZpZ3VyZS10aW1lIGNoZWNrcy4KK3Rlc3QgLW4gIiRORUVEU19SRVNPTFYiICYmIExJQlM9IiRMSUJTIC1scmVzb2x2IgorCitBQ19DSEVDS19MSUIoW2NdLCBbYmFzZW5hbWVdLAorW05FRURTX0xJQkdFTj1dLAorW05FRURTX0xJQkdFTj1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05FRURTX0xJQkdFTl0pCit0ZXN0IC1uICIkTkVFRFNfTElCR0VOIiAmJiBMSUJTPSIkTElCUyAtbGdlbiIKKworQUNfREVGVU4oW0xJQklOVExfU1JDXSwgWworQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8bGliaW50bC5oPgorXV0sW1sKK2NoYXIgKm1zZyA9IGdldHRleHQoInRlc3QiKTsKK11dKV0pCisKK0FDX01TR19DSEVDS0lORyhbaWYgbGliYyBjb250YWlucyBsaWJpbnRsXSkKK0FDX0xJTktfSUZFTFNFKFtMSUJJTlRMX1NSQ10sCisJW0FDX01TR19SRVNVTFQoW3llc10pCisJTElCQ19DT05UQUlOU19MSUJJTlRMPVllc1BsZWFzZV0sCisJW0FDX01TR19SRVNVTFQoW25vXSkKKwlMSUJDX0NPTlRBSU5TX0xJQklOVEw9XSkKK0dJVF9DT05GX1NVQlNUKFtMSUJDX0NPTlRBSU5TX0xJQklOVExdKQorCisjCisjIERlZmluZSBOT19HRVRURVhUIGlmIHlvdSBkb24ndCB3YW50IEdpdCBvdXRwdXQgdG8gYmUgdHJhbnNsYXRlZC4KKyMgQSB0cmFuc2xhdGVkIEdpdCByZXF1aXJlcyBHTlUgbGliaW50bCBvciBhbm90aGVyIGdldHRleHQgaW1wbGVtZW50YXRpb24KK0FDX0NIRUNLX0hFQURFUihbbGliaW50bC5oXSwKK1tOT19HRVRURVhUPV0sCitbTk9fR0VUVEVYVD1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX0dFVFRFWFRdKQorCitpZiB0ZXN0IC16ICIkTk9fR0VUVEVYVCI7IHRoZW4KKyAgICB0ZXN0IC1uICIkTElCQ19DT05UQUlOU19MSUJJTlRMIiB8fCBMSUJTPSIkTElCUyAtbGludGwiCitmaQorCisjIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KK0FDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3IgaGVhZGVyIGZpbGVzXSkKKyMKKyMgRGVmaW5lIE5PX1NZU19TRUxFQ1RfSCBpZiB5b3UgZG9uJ3QgaGF2ZSBzeXMvc2VsZWN0LmguCitBQ19DSEVDS19IRUFERVIoW3N5cy9zZWxlY3QuaF0sCitbTk9fU1lTX1NFTEVDVF9IPV0sCitbTk9fU1lTX1NFTEVDVF9IPVVuZm9ydHVuYXRlbHlZZXNdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NZU19TRUxFQ1RfSF0pCisjCisjIERlZmluZSBOT19QT0xMX0ggaWYgeW91IGRvbid0IGhhdmUgcG9sbC5oCitBQ19DSEVDS19IRUFERVIoW3BvbGwuaF0sCitbTk9fUE9MTF9IPV0sCitbTk9fUE9MTF9IPVVuZm9ydHVuYXRlbHlZZXNdKQorR0lUX0NPTkZfU1VCU1QoW05PX1BPTExfSF0pCisjCisjIERlZmluZSBOT19TWVNfUE9MTF9IIGlmIHlvdSBkb24ndCBoYXZlIHN5cy9wb2xsLmgKK0FDX0NIRUNLX0hFQURFUihbc3lzL3BvbGwuaF0sCitbTk9fU1lTX1BPTExfSD1dLAorW05PX1NZU19QT0xMX0g9VW5mb3J0dW5hdGVseVllc10pCitHSVRfQ09ORl9TVUJTVChbTk9fU1lTX1BPTExfSF0pCisjCisjIERlZmluZSBOT19JTlRUWVBFU19IIGlmIHlvdSBkb24ndCBoYXZlIGludHR5cGVzLmgKK0FDX0NIRUNLX0hFQURFUihbaW50dHlwZXMuaF0sCitbTk9fSU5UVFlQRVNfSD1dLAorW05PX0lOVFRZUEVTX0g9VW5mb3J0dW5hdGVseVllc10pCitHSVRfQ09ORl9TVUJTVChbTk9fSU5UVFlQRVNfSF0pCisjCisjIERlZmluZSBPTERfSUNPTlYgaWYgeW91ciBsaWJyYXJ5IGhhcyBhbiBvbGQgaWNvbnYoKSwgd2hlcmUgdGhlIHNlY29uZAorIyAoaW5wdXQgYnVmZmVyIHBvaW50ZXIpIHBhcmFtZXRlciBpcyBkZWNsYXJlZCB3aXRoIHR5cGUgKGNvbnN0IGNoYXIgKiopLgorQUNfREVGVU4oW09MRElDT05WVEVTVF9TUkNdLCBbCitBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxpY29udi5oPgorCitleHRlcm4gc2l6ZV90IGljb252KGljb252X3QgY2QsCisJCSAgICBjaGFyICoqaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsCisJCSAgICBjaGFyICoqb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCk7CitdXSwgW10pXSkKKworR0lUX1NUQVNIX0ZMQUdTKCRJQ09OVkRJUikKKworQUNfTVNHX0NIRUNLSU5HKFtmb3Igb2xkIGljb252KCldKQorQUNfQ09NUElMRV9JRkVMU0UoW09MRElDT05WVEVTVF9TUkNdLAorCVtBQ19NU0dfUkVTVUxUKFtub10pXSwKKwlbQUNfTVNHX1JFU1VMVChbeWVzXSkKKwlBQ19ERUZJTkUoSEFWRV9PTERfSUNPTlYsIDEpCisJT0xEX0lDT05WPVVuZm9ydHVuYXRlbHlZZXNdKQorCitHSVRfVU5TVEFTSF9GTEFHUygkSUNPTlZESVIpCisKK0dJVF9DT05GX1NVQlNUKFtPTERfSUNPTlZdKQorCisjCisjIERlZmluZSBJQ09OVl9PTUlUU19CT00gaWYgeW91IGFyZSBvbiBhIHN5c3RlbSB3aGljaAorIyBpY29udiBvbWl0cyBib20gZm9yIHV0Zi17MTYsMzJ9CitpZiB0ZXN0IC16ICIkTk9fSUNPTlYiOyB0aGVuCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpY29udiBvbWl0cyBib20gZm9yIHV0Zi0xNiBhbmQgdXRmLTMyXSwKKyBbYWNfY3ZfaWNvbnZfb21pdHNfYm9tXSwKK1sKK29sZF9MSUJTPSIkTElCUyIKK2lmIHRlc3QgLW4gIiRORUVEU19MSUJJQ09OViI7IHRoZW4KKwlMSUJTPSIkTElCUyAtbGljb252IgorZmkKKworQUNfUlVOX0lGRUxTRSgKKwlbQUNfTEFOR19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUCisJI2luY2x1ZGUgPGljb252Lmg+CisJI2lmZGVmIEhBVkVfT0xEX0lDT05WCisJdHlwZWRlZiBjb25zdCBjaGFyICppY29udl9pYnA7CisJI2Vsc2UKKwl0eXBlZGVmIGNoYXIgKmljb252X2licDsKKwkjZW5kaWYKKwldLAorCVtbCisJaW50IHY7CisJaWNvbnZfdCBjb252OworCWNoYXIgaW5bXSA9ICJhIjsgaWNvbnZfaWJwIHBpbiA9IGluOworCWNoYXIgb3V0WzIwXSA9ICIiOyBjaGFyICpwb3V0ID0gb3V0OworCXNpemVfdCBpc3ogPSBzaXplb2YgaW47CisJc2l6ZV90IG9zeiA9IHNpemVvZiBvdXQ7CisKKwljb252ID0gaWNvbnZfb3BlbigiVVRGLTE2IiwgIlVURi04Iik7CisJaWNvbnYoY29udiwgJnBpbiwgJmlzeiwgJnBvdXQsICZvc3opOworCWljb252X2Nsb3NlKGNvbnYpOworCXYgPSAodW5zaWduZWQgY2hhcikob3V0WzBdKSArICh1bnNpZ25lZCBjaGFyKShvdXRbMV0pOworCXJldHVybiB2ICE9IDB4ZmUgKyAweGZmOworCV1dKV0sCisJW2FjX2N2X2ljb252X29taXRzX2JvbT1ub10sCisJW2FjX2N2X2ljb252X29taXRzX2JvbT15ZXNdKQorCitMSUJTPSIkb2xkX0xJQlMiCitdKQoraWYgdGVzdCAieCRhY19jdl9pY29udl9vbWl0c19ib20iID0geHllczsgdGhlbgorCUlDT05WX09NSVRTX0JPTT1ZZXMKK2Vsc2UKKwlJQ09OVl9PTUlUU19CT009CitmaQorR0lUX0NPTkZfU1VCU1QoW0lDT05WX09NSVRTX0JPTV0pCitmaQorCisjIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorQUNfTVNHX05PVElDRShbQ0hFQ0tTIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljc10pCisjCitUWVBFX1NPQ0tMRU5fVAorY2FzZSAkYWNfY3ZfdHlwZV9zb2NrbGVuX3QgaW4KKyAgeWVzKQlTT0NLTEVOX1Q9Jyc7OworICAqKSAgCVNPQ0tMRU5fVD0kZ2l0X2N2X3NvY2tsZW5fdF9lcXVpdjs7Citlc2FjCitHSVRfQ09ORl9TVUJTVChbU09DS0xFTl9UXSkKKworIworIyBEZWZpbmUgTk9fU1RSVUNUX0lUSU1FUlZBTCBpZiB5b3UgZG9uJ3QgaGF2ZSBzdHJ1Y3QgaXRpbWVydmFsLgorQUNfQ0hFQ0tfVFlQRVMoW3N0cnVjdCBpdGltZXJ2YWxdLAorW05PX1NUUlVDVF9JVElNRVJWQUw9XSwKK1tOT19TVFJVQ1RfSVRJTUVSVkFMPVVuZm9ydHVuYXRlbHlZZXNdLAorWyNpbmNsdWRlIDxzeXMvdGltZS5oPl0pCitHSVRfQ09ORl9TVUJTVChbTk9fU1RSVUNUX0lUSU1FUlZBTF0pCisjCisjIERlZmluZSBVU0VfU1RfVElNRVNQRUM9WWVzUGxlYXNlIHdoZW4gc3RhdC5zdF9tdGltZXNwZWMudHZfbnNlYyBleGlzdHMuCisjIERlZmluZSBOT19OU0VDPVllc1BsZWFzZSB3aGVuIG5laXRoZXIgc3RhdC5zdF9tdGltLnR2X25zZWMgbm9yCisjIHN0YXQuc3RfbXRpbWVzcGVjLnR2X25zZWMgZXhpc3RzLgorQUNfQ0hFQ0tfTUVNQkVSKFtzdHJ1Y3Qgc3RhdC5zdF9tdGltZXNwZWMudHZfbnNlY10pCitBQ19DSEVDS19NRU1CRVIoW3N0cnVjdCBzdGF0LnN0X210aW0udHZfbnNlY10pCitpZiB0ZXN0IHgkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X210aW1lc3BlY190dl9uc2VjID0geHllczsgdGhlbgorCVVTRV9TVF9USU1FU1BFQz1ZZXNQbGVhc2UKKwlHSVRfQ09ORl9TVUJTVChbVVNFX1NUX1RJTUVTUEVDXSkKK2VsaWYgdGVzdCB4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9tdGltX3R2X25zZWMgIT0geHllczsgdGhlbgorCU5PX05TRUM9WWVzUGxlYXNlCisJR0lUX0NPTkZfU1VCU1QoW05PX05TRUNdKQorZmkKKyMKKyMgRGVmaW5lIE5PX0RfVFlQRV9JTl9ESVJFTlQgaWYgeW91ciBwbGF0Zm9ybSBkZWZpbmVzIERUX1VOS05PV04gYnV0IGxhY2tzCisjIGRfdHlwZSBpbiBzdHJ1Y3QgZGlyZW50IChsYXRlc3QgQ3lnd2luIC0tIHdpbGwgYmUgZml4ZWQgc29vbmlzaCkuCitBQ19DSEVDS19NRU1CRVIoc3RydWN0IGRpcmVudC5kX3R5cGUsCitbTk9fRF9UWVBFX0lOX0RJUkVOVD1dLAorW05PX0RfVFlQRV9JTl9ESVJFTlQ9WWVzUGxlYXNlXSwKK1sjaW5jbHVkZSA8ZGlyZW50Lmg+XSkKK0dJVF9DT05GX1NVQlNUKFtOT19EX1RZUEVfSU5fRElSRU5UXSkKKyMKKyMgRGVmaW5lIE5PX0dFQ09TX0lOX1BXRU5UIGlmIHlvdSBkb24ndCBoYXZlIHB3X2dlY29zIGluIHN0cnVjdCBwYXNzd2QKKyMgaW4gdGhlIEMgbGlicmFyeS4KK0FDX0NIRUNLX01FTUJFUihzdHJ1Y3QgcGFzc3dkLnB3X2dlY29zLAorW05PX0dFQ09TX0lOX1BXRU5UPV0sCitbTk9fR0VDT1NfSU5fUFdFTlQ9WWVzUGxlYXNlXSwKK1sjaW5jbHVkZSA8cHdkLmg+XSkKK0dJVF9DT05GX1NVQlNUKFtOT19HRUNPU19JTl9QV0VOVF0pCisjCisjIERlZmluZSBOT19TT0NLQUREUl9TVE9SQUdFIGlmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3QgaGF2ZSBzdHJ1Y3QKKyMgc29ja2FkZHJfc3RvcmFnZS4KK0FDX0NIRUNLX1RZUEUoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UsCitbTk9fU09DS0FERFJfU1RPUkFHRT1dLAorW05PX1NPQ0tBRERSX1NUT1JBR0U9WWVzUGxlYXNlXSxbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorXSkKK0dJVF9DT05GX1NVQlNUKFtOT19TT0NLQUREUl9TVE9SQUdFXSkKKyMKKyMgRGVmaW5lIE5PX0lQVjYgaWYgeW91IGxhY2sgSVB2NiBzdXBwb3J0IGFuZCBnZXRhZGRyaW5mbygpLgorQUNfQ0hFQ0tfVFlQRShbc3RydWN0IGFkZHJpbmZvXSxbCisgR0lUX0NIRUNLX0ZVTkMoW2dldGFkZHJpbmZvXSwKKyAgW05PX0lQVjY9XSwKKyAgW05PX0lQVjY9WWVzUGxlYXNlXSkKK10sW05PX0lQVjY9WWVzUGxlYXNlXSxbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CitdKQorR0lUX0NPTkZfU1VCU1QoW05PX0lQVjZdKQorIworIyBEZWZpbmUgTk9fUkVHRVggaWYgeW91ciBDIGxpYnJhcnkgbGFja3MgcmVnZXggc3VwcG9ydCB3aXRoIFJFR19TVEFSVEVORAorIyBmZWF0dXJlLgorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIHBsYXRmb3JtIHJlZ2V4IHN1cHBvcnRzIFJFR19TVEFSVEVORF0sCisgW2FjX2N2X2NfcmVnZXhfd2l0aF9yZWdfc3RhcnRlbmRdLCBbCitBQ19FR1JFUF9DUFAoeWlwcGVleWVzd2VoYXZlaXQsCisJQUNfTEFOR19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUCisjaW5jbHVkZSA8cmVnZXguaD4KK10sCitbI2lmZGVmIFJFR19TVEFSVEVORAoreWlwcGVleWVzd2VoYXZlaXQKKyNlbmRpZgorXSksCisJW2FjX2N2X2NfcmVnZXhfd2l0aF9yZWdfc3RhcnRlbmQ9eWVzXSwKKwlbYWNfY3ZfY19yZWdleF93aXRoX3JlZ19zdGFydGVuZD1ub10pCitdKQoraWYgdGVzdCAkYWNfY3ZfY19yZWdleF93aXRoX3JlZ19zdGFydGVuZCA9IHllczsgdGhlbgorCU5PX1JFR0VYPQorZWxzZQorCU5PX1JFR0VYPVllc1BsZWFzZQorZmkKK0dJVF9DT05GX1NVQlNUKFtOT19SRUdFWF0pCisjCisjIERlZmluZSBGUkVBRF9SRUFEU19ESVJFQ1RPUklFUyBpZiB5b3VyIGFyZSBvbiBhIHN5c3RlbSB3aGljaCBzdWNjZWVkcworIyB3aGVuIGF0dGVtcHRpbmcgdG8gcmVhZCBmcm9tIGFuIGZvcGVuJ2VkIGRpcmVjdG9yeS4KK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHN5c3RlbSBzdWNjZWVkcyB0byByZWFkIGZvcGVuJ2VkIGRpcmVjdG9yeV0sCisgW2FjX2N2X2ZyZWFkX3JlYWRzX2RpcmVjdG9yaWVzXSwKK1sKK0FDX1JVTl9JRkVMU0UoCisJW0FDX0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVGQVVMVF0sCisJCVtbCisJCUZJTEUgKmYgPSBmb3BlbigiLiIsICJyIik7CisJCXJldHVybiBmICE9IE5VTEw7XV0pXSwKKwlbYWNfY3ZfZnJlYWRfcmVhZHNfZGlyZWN0b3JpZXM9bm9dLAorCVthY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllcz15ZXNdKQorXSkKK2lmIHRlc3QgJGFjX2N2X2ZyZWFkX3JlYWRzX2RpcmVjdG9yaWVzID0geWVzOyB0aGVuCisJRlJFQURfUkVBRFNfRElSRUNUT1JJRVM9VW5mb3J0dW5hdGVseVllcworZWxzZQorCUZSRUFEX1JFQURTX0RJUkVDVE9SSUVTPQorZmkKK0dJVF9DT05GX1NVQlNUKFtGUkVBRF9SRUFEU19ESVJFQ1RPUklFU10pCisjCisjIERlZmluZSBTTlBSSU5URl9SRVRVUk5TX0JPR1VTIGlmIHlvdXIgYXJlIG9uIGEgc3lzdGVtIHdoaWNoIHNucHJpbnRmKCkKKyMgb3IgdnNucHJpbnRmKCkgcmV0dXJuIC0xIGluc3RlYWQgb2YgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2hpY2ggd291bGQKKyMgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gdGhlIGZpbmFsIHN0cmluZyBpZiBlbm91Z2ggc3BhY2UgaGFkIGJlZW4gYXZhaWxhYmxlLgorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc25wcmludGYoKSBhbmQvb3IgdnNucHJpbnRmKCkgcmV0dXJuIGJvZ3VzIHZhbHVlXSwKKyBbYWNfY3Zfc25wcmludGZfcmV0dXJuc19ib2d1c10sCitbCitBQ19SVU5fSUZFTFNFKAorCVtBQ19MQU5HX1BST0dSQU0oW0FDX0lOQ0xVREVTX0RFRkFVTFQKKwkJI2luY2x1ZGUgInN0ZGFyZy5oIgorCisJCWludCB0ZXN0X3ZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBtYXhzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKwkJeworCQkgIGludCByZXQ7CisJCSAgdmFfbGlzdCBhcDsKKwkJICB2YV9zdGFydChhcCwgZm9ybWF0KTsKKwkJICByZXQgPSB2c25wcmludGYoc3RyLCBtYXhzaXplLCBmb3JtYXQsIGFwKTsKKwkJICB2YV9lbmQoYXApOworCQkgIHJldHVybiByZXQ7CisJCX1dLAorCQlbW2NoYXIgYnVmWzZdOworCQkgIGlmICh0ZXN0X3ZzbnByaW50ZihidWYsIDMsICIlcyIsICIxMjM0NSIpICE9IDUKKwkJICAgICAgfHwgc3RyY21wKGJ1ZiwgIjEyIikpIHJldHVybiAxOworCQkgIGlmIChzbnByaW50ZihidWYsIDMsICIlcyIsICIxMjM0NSIpICE9IDUKKwkJICAgICAgfHwgc3RyY21wKGJ1ZiwgIjEyIikpIHJldHVybiAxXV0pXSwKKwlbYWNfY3Zfc25wcmludGZfcmV0dXJuc19ib2d1cz1ub10sCisJW2FjX2N2X3NucHJpbnRmX3JldHVybnNfYm9ndXM9eWVzXSkKK10pCitpZiB0ZXN0ICRhY19jdl9zbnByaW50Zl9yZXR1cm5zX2JvZ3VzID0geWVzOyB0aGVuCisJU05QUklOVEZfUkVUVVJOU19CT0dVUz1VbmZvcnR1bmF0ZWx5WWVzCitlbHNlCisJU05QUklOVEZfUkVUVVJOU19CT0dVUz0KK2ZpCitHSVRfQ09ORl9TVUJTVChbU05QUklOVEZfUkVUVVJOU19CT0dVU10pCisjCisjIERlZmluZSBORUVEU19NT0RFX1RSQU5TTEFUSU9OIGlmIHlvdXIgT1Mgc3RyYXlzIGZyb20gdGhlIHR5cGljYWwgZmlsZSB0eXBlCisjIGJpdHMgaW4gbW9kZSB2YWx1ZXMuCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgcGxhdGZvcm0gdXNlcyB0eXBpY2FsIGZpbGUgdHlwZSBiaXRzXSwKKyBbYWNfY3Zfc2FuZV9tb2RlX2JpdHNdLCBbCitBQ19FR1JFUF9DUFAoeWlwcGVleWVzd2VoYXZlaXQsCisJQUNfTEFOR19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUXSwKK1sjaWYgU19JRk1UID09IDAxNzAwMDAgJiYgXAorCVNfSUZSRUcgPT0gMDEwMDAwMCAmJiBTX0lGRElSID09IDAwNDAwMDAgJiYgU19JRkxOSyA9PSAwMTIwMDAwICYmIFwKKwlTX0lGQkxLID09IDAwNjAwMDAgJiYgU19JRkNIUiA9PSAwMDIwMDAwICYmIFwKKwlTX0lGSUZPID09IDAwMTAwMDAgJiYgU19JRlNPQ0sgPT0gMDE0MDAwMAoreWlwcGVleWVzd2VoYXZlaXQKKyNlbmRpZgorXSksCisJW2FjX2N2X3NhbmVfbW9kZV9iaXRzPXllc10sCisJW2FjX2N2X3NhbmVfbW9kZV9iaXRzPW5vXSkKK10pCitpZiB0ZXN0ICRhY19jdl9zYW5lX21vZGVfYml0cyA9IHllczsgdGhlbgorCU5FRURTX01PREVfVFJBTlNMQVRJT049CitlbHNlCisJTkVFRFNfTU9ERV9UUkFOU0xBVElPTj1VbmZvcnR1bmF0ZWx5WWVzCitmaQorR0lUX0NPTkZfU1VCU1QoW05FRURTX01PREVfVFJBTlNMQVRJT05dKQorCisKKyMjIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCisjIyAoaW4gZGVmYXVsdCBDIGxpYnJhcnkgYW5kIGxpYnJhcmllcyBjaGVja2VkIGJ5IEFDX0NIRUNLX0xJQikKK0FDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3IgbGlicmFyeSBmdW5jdGlvbnNdKQorIworIyBEZWZpbmUgTk9fTElCR0VOX0ggaWYgeW91IGRvbid0IGhhdmUgbGliZ2VuLmguCitBQ19DSEVDS19IRUFERVIoW2xpYmdlbi5oXSwKK1tOT19MSUJHRU5fSD1dLAorW05PX0xJQkdFTl9IPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fTElCR0VOX0hdKQorIworIyBEZWZpbmUgSEFWRV9QQVRIU19IIGlmIHlvdSBoYXZlIHBhdGhzLmguCitBQ19DSEVDS19IRUFERVIoW3BhdGhzLmhdLAorW0hBVkVfUEFUSFNfSD1ZZXNQbGVhc2VdLAorW0hBVkVfUEFUSFNfSD1dKQorR0lUX0NPTkZfU1VCU1QoW0hBVkVfUEFUSFNfSF0pCisjCisjIERlZmluZSBIQVZFX0xJQkNIQVJTRVRfSCBpZiBoYXZlIGxpYmNoYXJzZXQuaAorQUNfQ0hFQ0tfSEVBREVSKFtsaWJjaGFyc2V0LmhdLAorW0hBVkVfTElCQ0hBUlNFVF9IPVllc1BsZWFzZV0sCitbSEFWRV9MSUJDSEFSU0VUX0g9XSkKK0dJVF9DT05GX1NVQlNUKFtIQVZFX0xJQkNIQVJTRVRfSF0pCisjCisjIERlZmluZSBIQVZFX1NUUklOR1NfSCBpZiB5b3UgaGF2ZSBzdHJpbmdzLmgKK0FDX0NIRUNLX0hFQURFUihbc3RyaW5ncy5oXSwKK1tIQVZFX1NUUklOR1NfSD1ZZXNQbGVhc2VdLAorW0hBVkVfU1RSSU5HU19IPV0pCitHSVRfQ09ORl9TVUJTVChbSEFWRV9TVFJJTkdTX0hdKQorIyBEZWZpbmUgQ0hBUlNFVF9MSUIgaWYgbGliaWNvbnYgZG9lcyBub3QgZXhwb3J0IHRoZSBsb2NhbGVfY2hhcnNldCBzeW1ib2wKKyMgYW5kIGxpYmNoYXJzZXQgZG9lcworQ0hBUlNFVF9MSUI9CitBQ19DSEVDS19MSUIoW2ljb252XSwgW2xvY2FsZV9jaGFyc2V0XSwKKyAgICAgICBbQ0hBUlNFVF9MSUI9LWxpY29udl0sCisgICAgICAgW0FDX0NIRUNLX0xJQihbY2hhcnNldF0sIFtsb2NhbGVfY2hhcnNldF0sCisgICAgICAgICAgICAgICAgICAgICBbQ0hBUlNFVF9MSUI9LWxjaGFyc2V0XSldKQorR0lUX0NPTkZfU1VCU1QoW0NIQVJTRVRfTElCXSkKKyMKKyMgRGVmaW5lIEhBVkVfQ0xPQ0tfR0VUVElNRT1ZZXNQbGVhc2UgaWYgY2xvY2tfZ2V0dGltZSBpcyBhdmFpbGFibGUuCitHSVRfQ0hFQ0tfRlVOQyhjbG9ja19nZXR0aW1lLAorCVtIQVZFX0NMT0NLX0dFVFRJTUU9WWVzUGxlYXNlXSwKKwlbSEFWRV9DTE9DS19HRVRUSU1FPV0pCitHSVRfQ09ORl9TVUJTVChbSEFWRV9DTE9DS19HRVRUSU1FXSkKKworQUNfREVGVU4oW0NMT0NLX01PTk9UT05JQ19TUkNdLCBbCitBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDx0aW1lLmg+CitjbG9ja2lkX3QgaWQgPSBDTE9DS19NT05PVE9OSUM7CitdXSldKQorCisjCisjIERlZmluZSBIQVZFX0NMT0NLX01PTk9UT05JQz1ZZXNQbGVhc2UgaWYgQ0xPQ0tfTU9OT1RPTklDIGlzIGF2YWlsYWJsZS4KK0FDX01TR19DSEVDS0lORyhbZm9yIENMT0NLX01PTk9UT05JQ10pCitBQ19DT01QSUxFX0lGRUxTRShbQ0xPQ0tfTU9OT1RPTklDX1NSQ10sCisJW0FDX01TR19SRVNVTFQoW3llc10pCisJSEFWRV9DTE9DS19NT05PVE9OSUM9WWVzUGxlYXNlXSwKKwlbQUNfTVNHX1JFU1VMVChbbm9dKQorCUhBVkVfQ0xPQ0tfTU9OT1RPTklDPV0pCitHSVRfQ09ORl9TVUJTVChbSEFWRV9DTE9DS19NT05PVE9OSUNdKQorIworIyBEZWZpbmUgTk9fU0VUSVRJTUVSIGlmIHlvdSBkb24ndCBoYXZlIHNldGl0aW1lci4KK0dJVF9DSEVDS19GVU5DKHNldGl0aW1lciwKK1tOT19TRVRJVElNRVI9XSwKK1tOT19TRVRJVElNRVI9WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtOT19TRVRJVElNRVJdKQorIworIyBEZWZpbmUgTk9fU1RSQ0FTRVNUUiBpZiB5b3UgZG9uJ3QgaGF2ZSBzdHJjYXNlc3RyLgorR0lUX0NIRUNLX0ZVTkMoc3RyY2FzZXN0ciwKK1tOT19TVFJDQVNFU1RSPV0sCitbTk9fU1RSQ0FTRVNUUj1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NUUkNBU0VTVFJdKQorIworIyBEZWZpbmUgTk9fTUVNTUVNIGlmIHlvdSBkb24ndCBoYXZlIG1lbW1lbS4KK0dJVF9DSEVDS19GVU5DKG1lbW1lbSwKK1tOT19NRU1NRU09XSwKK1tOT19NRU1NRU09WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtOT19NRU1NRU1dKQorIworIyBEZWZpbmUgTk9fU1RSTENQWSBpZiB5b3UgZG9uJ3QgaGF2ZSBzdHJsY3B5LgorR0lUX0NIRUNLX0ZVTkMoc3RybGNweSwKK1tOT19TVFJMQ1BZPV0sCitbTk9fU1RSTENQWT1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NUUkxDUFldKQorIworIyBEZWZpbmUgTk9fVUlOVE1BWF9UIGlmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3QgaGF2ZSB1aW50bWF4X3QKK0FDX0NIRUNLX1RZUEUodWludG1heF90LAorW05PX1VJTlRNQVhfVD1dLAorW05PX1VJTlRNQVhfVD1ZZXNQbGVhc2VdLFsKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorXSkKK0dJVF9DT05GX1NVQlNUKFtOT19VSU5UTUFYX1RdKQorIworIyBEZWZpbmUgTk9fU1RSVE9VTUFYIGlmIHlvdSBkb24ndCBoYXZlIHN0cnRvdW1heCBpbiB0aGUgQyBsaWJyYXJ5LgorR0lUX0NIRUNLX0ZVTkMoc3RydG91bWF4LAorW05PX1NUUlRPVU1BWD1dLAorW05PX1NUUlRPVU1BWD1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NUUlRPVU1BWF0pCisjCisjIERlZmluZSBOT19TRVRFTlYgaWYgeW91IGRvbid0IGhhdmUgc2V0ZW52IGluIHRoZSBDIGxpYnJhcnkuCitHSVRfQ0hFQ0tfRlVOQyhzZXRlbnYsCitbTk9fU0VURU5WPV0sCitbTk9fU0VURU5WPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fU0VURU5WXSkKKyMKKyMgRGVmaW5lIE5PX1VOU0VURU5WIGlmIHlvdSBkb24ndCBoYXZlIHVuc2V0ZW52IGluIHRoZSBDIGxpYnJhcnkuCitHSVRfQ0hFQ0tfRlVOQyh1bnNldGVudiwKK1tOT19VTlNFVEVOVj1dLAorW05PX1VOU0VURU5WPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fVU5TRVRFTlZdKQorIworIyBEZWZpbmUgTk9fTUtEVEVNUCBpZiB5b3UgZG9uJ3QgaGF2ZSBta2R0ZW1wIGluIHRoZSBDIGxpYnJhcnkuCitHSVRfQ0hFQ0tfRlVOQyhta2R0ZW1wLAorW05PX01LRFRFTVA9XSwKK1tOT19NS0RURU1QPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fTUtEVEVNUF0pCisjCisjIERlZmluZSBOT19JTklUR1JPVVBTIGlmIHlvdSBkb24ndCBoYXZlIGluaXRncm91cHMgaW4gdGhlIEMgbGlicmFyeS4KK0dJVF9DSEVDS19GVU5DKGluaXRncm91cHMsCitbTk9fSU5JVEdST1VQUz1dLAorW05PX0lOSVRHUk9VUFM9WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtOT19JTklUR1JPVVBTXSkKKyMKKyMgRGVmaW5lIEhBVkVfR0VUREVMSU0gaWYgeW91IGhhdmUgZ2V0ZGVsaW0gaW4gdGhlIEMgbGlicmFyeS4KK0dJVF9DSEVDS19GVU5DKGdldGRlbGltLAorW0hBVkVfR0VUREVMSU09WWVzUGxlYXNlXSwKK1tIQVZFX0dFVERFTElNPV0pCitHSVRfQ09ORl9TVUJTVChbSEFWRV9HRVRERUxJTV0pCisjCisjCisjIERlZmluZSBOT19NTUFQIGlmIHlvdSB3YW50IHRvIGF2b2lkIG1tYXAuCisjCisjIERlZmluZSBOT19JQ09OViBpZiB5b3VyIGxpYmMgZG9lcyBub3QgcHJvcGVybHkgc3VwcG9ydCBpY29udi4KKworQUNfREVGVU4oW0JTRF9TWVNDVExfU1JDXSwgWworQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorXV0sW1sKK2ludCB2YWwsIG1pYlsyXTsKK3NpemVfdCBsZW47CittaWJbMF0gPSBDVExfSFc7CittaWJbMV0gPSAxOworbGVuID0gc2l6ZW9mKHZhbCk7CityZXR1cm4gc3lzY3RsKG1pYiwgMiwgJnZhbCwgJmxlbiwgTlVMTCwgMCkgPyAxIDogMDsKK11dKV0pCisKKyMKKyMgRGVmaW5lIEhBVkVfQlNEX1NZU0NUTD1ZZXNQbGVhc2UgaWYgYSBCU0QtY29tcGF0aWJsZSBzeXNjdGwgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLgorQUNfTVNHX0NIRUNLSU5HKFtmb3IgQlNEIHN5c2N0bF0pCitBQ19DT01QSUxFX0lGRUxTRShbQlNEX1NZU0NUTF9TUkNdLAorCVtBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCUhBVkVfQlNEX1NZU0NUTD1ZZXNQbGVhc2VdLAorCVtBQ19NU0dfUkVTVUxUKFtub10pCisJSEFWRV9CU0RfU1lTQ1RMPV0pCitHSVRfQ09ORl9TVUJTVChbSEFWRV9CU0RfU1lTQ1RMXSkKKworIyMgT3RoZXIgY2hlY2tzLgorIyBEZWZpbmUgVVNFX1BJQyBpZiB5b3UgbmVlZCB0aGUgbWFpbiBnaXQgb2JqZWN0cyB0byBiZSBidWlsdCB3aXRoIC1mUElDCisjIGluIG9yZGVyIHRvIGJ1aWxkIGFuZCBsaW5rIHBlcmwvR2l0LnNvLiAgeDg2LTY0IHNlZW1zIHRvIG5lZWQgdGhpcy4KKyMKKyMgRGVmaW5lIE5PX1NZTUxJTktfSEVBRCBpZiB5b3UgbmV2ZXIgd2FudCAuZ2l0L0hFQUQgdG8gYmUgYSBzeW1ib2xpYyBsaW5rLgorIyBFbmFibGUgaXQgb24gV2luZG93cy4gIEJ5IGRlZmF1bHQsIHN5bXJlZnMgYXJlIHN0aWxsIHVzZWQuCisjCisjIERlZmluZSBOT19QVEhSRUFEUyBpZiB3ZSBkbyBub3QgaGF2ZSBwdGhyZWFkcy4KKyMKKyMgRGVmaW5lIFBUSFJFQURfTElCUyB0byB0aGUgbGlua2VyIGZsYWcgdXNlZCBmb3IgUHRocmVhZCBzdXBwb3J0LgorQUNfREVGVU4oW1BUSFJFQURURVNUX1NSQ10sIFsKK0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHB0aHJlYWQuaD4KK3N0YXRpYyB2b2lkICpub29wKHZvaWQgKmlnbm9yZSkgeyByZXR1cm4gaWdub3JlOyB9CitdXSwgW1sKKwlwdGhyZWFkX211dGV4X3QgdGVzdF9tdXRleDsKKwlwdGhyZWFkX2tleV90IHRlc3Rfa2V5OworCXB0aHJlYWRfdCB0aDsKKwlpbnQgcmV0Y29kZSA9IDA7CisJdm9pZCAqcmV0ID0gKHZvaWQgKikwOworCXJldGNvZGUgfD0gcHRocmVhZF9rZXlfY3JlYXRlKCZ0ZXN0X2tleSwgKHZvaWQgKikwKTsKKwlyZXRjb2RlIHw9IHB0aHJlYWRfbXV0ZXhfaW5pdCgmdGVzdF9tdXRleCwodm9pZCAqKTApOworCXJldGNvZGUgfD0gcHRocmVhZF9tdXRleF9sb2NrKCZ0ZXN0X211dGV4KTsKKwlyZXRjb2RlIHw9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0ZXN0X211dGV4KTsKKwlyZXRjb2RlIHw9IHB0aHJlYWRfY3JlYXRlKCZ0aCwgcmV0LCBub29wLCByZXQpOworCXJldGNvZGUgfD0gcHRocmVhZF9qb2luKHRoLCAmcmV0KTsKKwlyZXR1cm4gcmV0Y29kZTsKK11dKV0pCisKK2RubCBBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitkbmwgICBbWyNpbmNsdWRlIDxwdGhyZWFkLmg+XV0sCitkbmwgICBbW3B0aHJlYWRfbXV0ZXhfdCB0ZXN0X211dGV4O11dCitkbmwgKV0pCisKK05PX1BUSFJFQURTPVVuZm9ydHVuYXRlbHlZZXMKK1BUSFJFQURfTElCUz0KKworaWYgdGVzdCAtbiAiJFVTRVJfTk9QVEhSRUFEIjsgdGhlbgorICAgQUNfTVNHX05PVElDRShbU2tpcHBpbmcgUE9TSVggVGhyZWFkcyBhdCB1c2VyIHJlcXVlc3QuXSkKKyMgaGFuZGxlIHRoZXNlIHNlcGFyYXRlbHkgc2luY2UgUFRIUkVBRF9DRkxBR1MgY291bGQgYmUgJy1scHRocmVhZHMKKyMgLURfUkVFTlRSQU5UJyBvciBzb21lIHN1Y2guCitlbGlmIHRlc3QgLXogIiRQVEhSRUFEX0NGTEFHUyI7IHRoZW4KKyAgdGhyZWFkc19mb3VuZD1ubworICAjIEF0dGVtcHQgdG8gY29tcGlsZSBhbmQgbGluayBzb21lIGNvZGUgdXNpbmcgcHRocmVhZHMgdG8gZGV0ZXJtaW5lCisgICMgcmVxdWlyZWQgbGlua2VyIGZsYWdzLiBUaGUgb3JkZXIgaXMgc29tZXdoYXQgaW1wb3J0YW50IGhlcmU6IFdlCisgICMgZmlyc3QgdHJ5IGl0IHdpdGhvdXQgYW55IGV4dHJhIGZsYWdzLCB0byBjYXRjaCBzeXN0ZW1zIHdoZXJlCisgICMgcHRocmVhZHMgYXJlIHBhcnQgb2YgdGhlIEMgbGlicmFyeSwgdGhlbiBnbyBvbiB0ZXN0aW5nIHZhcmlvdXMgb3RoZXIKKyAgIyBmbGFncy4gV2UgZG8gc28gdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzLiBGb3IgZXhhbXBsZSwgb24gTWFjIE9TIFgKKyAgIyBwdGhyZWFkcyBhcmUgcGFydCBvZiB0aGUgQyBsaWJyYXJ5OyBtb3Jlb3ZlciwgdGhlIGNvbXBpbGVyIGFsbG93cyB1cworICAjIHRvIGFkZCAiLW10IiB0byB0aGUgQ0ZMQUdTIChhbHRob3VnaCBpdCB3aWxsIGRvIG5vdGhpbmcgZXhjZXB0CisgICMgdHJpZ2dlciBhIHdhcm5pbmcgYWJvdXQgYW4gdW51c2VkIGZsYWcpLiBIZW5jZSBpZiB3ZSBjaGVja2VkIGZvcgorICAjICItbXQiIGJlZm9yZSAiIiB3ZSB3b3VsZCBlbmQgdXAgcGlja2luZyBpdC4gQnV0IHVuZm9ydHVuYXRlbHkgdGhpcworICAjIHdvdWxkIHRoZW4gdHJpZ2dlciBjb21waWxlciB3YXJuaW5ncyBvbiBldmVyeSBzaW5nbGUgZmlsZSB3ZSBjb21waWxlLgorICBmb3Igb3B0IGluICIiIC1tdCAtcHRocmVhZCAtbHB0aHJlYWQ7IGRvCisgICAgIG9sZF9DRkxBR1M9IiRDRkxBR1MiCisgICAgIG9sZF9MSUJTPSIkTElCUyIKKyAgICAgY2FzZSAiJG9wdCIgaW4KKyAgICAgICAgLWwqKSAgTElCUz0iJG9wdCAkTElCUyIgOzsKKyAgICAgICAgKikgICAgQ0ZMQUdTPSIkb3B0ICRDRkxBR1MiIDs7CisgICAgIGVzYWMKKworICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBQT1NJWCBUaHJlYWRzIHdpdGggJyRvcHQnXSkKKyAgICAgQUNfTElOS19JRkVMU0UoW1BUSFJFQURURVNUX1NSQ10sCisJW0FDX01TR19SRVNVTFQoW3llc10pCisJCU5PX1BUSFJFQURTPQorCQlQVEhSRUFEX0xJQlM9IiRvcHQiCisJCVBUSFJFQURfQ0ZMQUdTPSIkb3B0IgorCQl0aHJlYWRzX2ZvdW5kPXllcworCQlicmVhaworCV0sCisJW0FDX01TR19SRVNVTFQoW25vXSldKQorICAgICAgQ0ZMQUdTPSIkb2xkX0NGTEFHUyIKKyAgICAgIExJQlM9IiRvbGRfTElCUyIKKyAgZG9uZQorICBpZiB0ZXN0ICR0aHJlYWRzX2ZvdW5kICE9IHllczsgdGhlbgorICAgIEFDX0NIRUNLX0xJQihbcHRocmVhZF0sIFtwdGhyZWFkX2NyZWF0ZV0sCisJW1BUSFJFQURfTElCUz0iLWxwdGhyZWFkIl0sCisJW05PX1BUSFJFQURTPVVuZm9ydHVuYXRlbHlZZXNdKQorICBmaQorZWxzZQorICBvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRQVEhSRUFEX0NGTEFHUyAkQ0ZMQUdTIgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBQT1NJWCBUaHJlYWRzIHdpdGggJyRQVEhSRUFEX0NGTEFHUyddKQorICBBQ19MSU5LX0lGRUxTRShbUFRIUkVBRFRFU1RfU1JDXSwKKwlbQUNfTVNHX1JFU1VMVChbeWVzXSkKKwkJTk9fUFRIUkVBRFM9CisJCVBUSFJFQURfTElCUz0iJFBUSFJFQURfQ0ZMQUdTIgorCV0sCisJW0FDX01TR19SRVNVTFQoW25vXSldKQorCisgIENGTEFHUz0iJG9sZF9DRkxBR1MiCitmaQorCitDRkxBR1M9IiRvbGRfQ0ZMQUdTIgorCitHSVRfQ09ORl9TVUJTVChbUFRIUkVBRF9DRkxBR1NdKQorR0lUX0NPTkZfU1VCU1QoW1BUSFJFQURfTElCU10pCitHSVRfQ09ORl9TVUJTVChbTk9fUFRIUkVBRFNdKQorCisjIyBPdXRwdXQgZmlsZXMKK0FDX0NPTkZJR19GSUxFUyhbIiR7Y29uZmlnX2ZpbGV9IjoiJHtjb25maWdfaW59Il0pCitBQ19PVVRQVVQKZGlmZiAtLWdpdCBhL2Nvbm5lY3QuYyBiL2Nvbm5lY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzAxM2M2Ci0tLSAvZGV2L251bGwKKysrIGIvY29ubmVjdC5jCkBAIC0wLDAgKzEsMTMzMSBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgIm9pZC1hcnJheS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgImFsaWFzLmgiCisKK3N0YXRpYyBjaGFyICpzZXJ2ZXJfY2FwYWJpbGl0aWVzX3YxOworc3RhdGljIHN0cnVjdCBhcmd2X2FycmF5IHNlcnZlcl9jYXBhYmlsaXRpZXNfdjIgPSBBUkdWX0FSUkFZX0lOSVQ7CitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfZmVhdHVyZV92YWx1ZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICopOworCitzdGF0aWMgaW50IGNoZWNrX3JlZihjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaWYgKCFmbGFncykKKwkJcmV0dXJuIDE7CisKKwlpZiAoIXNraXBfcHJlZml4KG5hbWUsICJyZWZzLyIsICZuYW1lKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBSRUZfTk9STUFMIG1lYW5zIHRoYXQgd2UgZG9uJ3Qgd2FudCB0aGUgbWFnaWMgZmFrZSB0YWcgcmVmcyAqLworCWlmICgoZmxhZ3MgJiBSRUZfTk9STUFMKSAmJiBjaGVja19yZWZuYW1lX2Zvcm1hdChuYW1lLCAwKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBSRUZfSEVBRFMgbWVhbnMgdGhhdCB3ZSB3YW50IHJlZ3VsYXIgYnJhbmNoIGhlYWRzICovCisJaWYgKChmbGFncyAmIFJFRl9IRUFEUykgJiYgc3RhcnRzX3dpdGgobmFtZSwgImhlYWRzLyIpKQorCQlyZXR1cm4gMTsKKworCS8qIFJFRl9UQUdTIG1lYW5zIHRoYXQgd2Ugd2FudCB0YWdzICovCisJaWYgKChmbGFncyAmIFJFRl9UQUdTKSAmJiBzdGFydHNfd2l0aChuYW1lLCAidGFncy8iKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBBbGwgdHlwZSBiaXRzIGNsZWFyIG1lYW5zIHRoYXQgd2UgYXJlIG9rIHdpdGggYW55dGhpbmcgKi8KKwlyZXR1cm4gIShmbGFncyAmIH5SRUZfTk9STUFMKTsKK30KKworaW50IGNoZWNrX3JlZl90eXBlKGNvbnN0IHN0cnVjdCByZWYgKnJlZiwgaW50IGZsYWdzKQoreworCXJldHVybiBjaGVja19yZWYocmVmLT5uYW1lLCBmbGFncyk7Cit9CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGRpZV9pbml0aWFsX2NvbnRhY3QoaW50IHVuZXhwZWN0ZWQpCit7CisJLyoKKwkgKiBBIGhhbmctdXAgYWZ0ZXIgc2VlaW5nIHNvbWUgcmVzcG9uc2UgZnJvbSB0aGUgb3RoZXIgZW5kCisJICogbWVhbnMgdGhhdCBpdCBpcyB1bmV4cGVjdGVkLCBhcyB3ZSBrbm93IHRoZSBvdGhlciBlbmQgaXMKKwkgKiB3aWxsaW5nIHRvIHRhbGsgdG8gdXMuICBBIGhhbmctdXAgYmVmb3JlIHNlZWluZyBhbnkKKwkgKiByZXNwb25zZSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGFuIEFDTCBwcm9ibGVtLCB0aG91Z2guCisJICovCisJaWYgKHVuZXhwZWN0ZWQpCisJCWRpZShfKCJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVwb24gaW5pdGlhbCBjb250YWN0IikpOworCWVsc2UKKwkJZGllKF8oIkNvdWxkIG5vdCByZWFkIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkuXG5cbiIKKwkJICAgICAgIlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzIHJpZ2h0c1xuIgorCQkgICAgICAiYW5kIHRoZSByZXBvc2l0b3J5IGV4aXN0cy4iKSk7Cit9CisKKy8qIENoZWNrcyBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIHRoZSBjYXBhYmlsaXR5ICdjJyAqLworaW50IHNlcnZlcl9zdXBwb3J0c192Mihjb25zdCBjaGFyICpjLCBpbnQgZGllX29uX2Vycm9yKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNlcnZlcl9jYXBhYmlsaXRpZXNfdjIuYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm91dDsKKwkJaWYgKHNraXBfcHJlZml4KHNlcnZlcl9jYXBhYmlsaXRpZXNfdjIuYXJndltpXSwgYywgJm91dCkgJiYKKwkJICAgICghKm91dCB8fCAqb3V0ID09ICc9JykpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoZGllX29uX2Vycm9yKQorCQlkaWUoXygic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCAnJXMnIiksIGMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzZXJ2ZXJfc3VwcG9ydHNfZmVhdHVyZShjb25zdCBjaGFyICpjLCBjb25zdCBjaGFyICpmZWF0dXJlLAorCQkJICAgIGludCBkaWVfb25fZXJyb3IpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VydmVyX2NhcGFiaWxpdGllc192Mi5hcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqb3V0OworCQlpZiAoc2tpcF9wcmVmaXgoc2VydmVyX2NhcGFiaWxpdGllc192Mi5hcmd2W2ldLCBjLCAmb3V0KSAmJgorCQkgICAgKCEqb3V0IHx8ICoob3V0KyspID09ICc9JykpIHsKKwkJCWlmIChwYXJzZV9mZWF0dXJlX3JlcXVlc3Qob3V0LCBmZWF0dXJlKSkKKwkJCQlyZXR1cm4gMTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChkaWVfb25fZXJyb3IpCisJCWRpZShfKCJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IGZlYXR1cmUgJyVzJyIpLCBmZWF0dXJlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2NhcGFiaWxpdGllc192MihzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVhZGVyKQoreworCXdoaWxlIChwYWNrZXRfcmVhZGVyX3JlYWQocmVhZGVyKSA9PSBQQUNLRVRfUkVBRF9OT1JNQUwpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmc2VydmVyX2NhcGFiaWxpdGllc192MiwgcmVhZGVyLT5saW5lKTsKKworCWlmIChyZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9GTFVTSCkKKwkJZGllKF8oImV4cGVjdGVkIGZsdXNoIGFmdGVyIGNhcGFiaWxpdGllcyIpKTsKK30KKworZW51bSBwcm90b2NvbF92ZXJzaW9uIGRpc2NvdmVyX3ZlcnNpb24oc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlcikKK3sKKwllbnVtIHByb3RvY29sX3ZlcnNpb24gdmVyc2lvbiA9IHByb3RvY29sX3Vua25vd25fdmVyc2lvbjsKKworCS8qCisJICogUGVlayB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgdG8KKwkgKiBkZXRlcm1pbmUgdGhlIHByb3RvY29sIHZlcnNpb24gdGhlIHNlcnZlciBpcyBzcGVha2luZy4KKwkgKi8KKwlzd2l0Y2ggKHBhY2tldF9yZWFkZXJfcGVlayhyZWFkZXIpKSB7CisJY2FzZSBQQUNLRVRfUkVBRF9FT0Y6CisJCWRpZV9pbml0aWFsX2NvbnRhY3QoMCk7CisJY2FzZSBQQUNLRVRfUkVBRF9GTFVTSDoKKwljYXNlIFBBQ0tFVF9SRUFEX0RFTElNOgorCQl2ZXJzaW9uID0gcHJvdG9jb2xfdjA7CisJCWJyZWFrOworCWNhc2UgUEFDS0VUX1JFQURfTk9STUFMOgorCQl2ZXJzaW9uID0gZGV0ZXJtaW5lX3Byb3RvY29sX3ZlcnNpb25fY2xpZW50KHJlYWRlci0+bGluZSk7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAodmVyc2lvbikgeworCWNhc2UgcHJvdG9jb2xfdjI6CisJCXByb2Nlc3NfY2FwYWJpbGl0aWVzX3YyKHJlYWRlcik7CisJCWJyZWFrOworCWNhc2UgcHJvdG9jb2xfdjE6CisJCS8qIFJlYWQgdGhlIHBlZWtlZCB2ZXJzaW9uIGxpbmUgKi8KKwkJcGFja2V0X3JlYWRlcl9yZWFkKHJlYWRlcik7CisJCWJyZWFrOworCWNhc2UgcHJvdG9jb2xfdjA6CisJCWJyZWFrOworCWNhc2UgcHJvdG9jb2xfdW5rbm93bl92ZXJzaW9uOgorCQlCVUcoInVua25vd24gcHJvdG9jb2wgdmVyc2lvbiIpOworCX0KKworCXJldHVybiB2ZXJzaW9uOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9vbmVfc3ltcmVmX2luZm8oc3RydWN0IHN0cmluZ19saXN0ICpzeW1yZWYsIGNvbnN0IGNoYXIgKnZhbCwgaW50IGxlbikKK3sKKwljaGFyICpzeW0sICp0YXJnZXQ7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuOyAvKiBqdXN0ICJzeW1yZWYiICovCisJLyogZS5nLiAic3ltcmVmPUhFQUQ6cmVmcy9oZWFkcy9tYXN0ZXIiICovCisJc3ltID0geG1lbWR1cHoodmFsLCBsZW4pOworCXRhcmdldCA9IHN0cmNocihzeW0sICc6Jyk7CisJaWYgKCF0YXJnZXQpCisJCS8qIGp1c3QgInN5bXJlZj1zb21ldGhpbmciICovCisJCWdvdG8gcmVqZWN0OworCSoodGFyZ2V0KyspID0gJ1wwJzsKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQoc3ltLCBSRUZOQU1FX0FMTE9XX09ORUxFVkVMKSB8fAorCSAgICBjaGVja19yZWZuYW1lX2Zvcm1hdCh0YXJnZXQsIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwpKQorCQkvKiAic3ltcmVmPWJvZ3VzOnBhaXIgKi8KKwkJZ290byByZWplY3Q7CisJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZF9ub2R1cChzeW1yZWYsIHN5bSk7CisJaXRlbS0+dXRpbCA9IHRhcmdldDsKKwlyZXR1cm47CityZWplY3Q6CisJZnJlZShzeW0pOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgYW5ub3RhdGVfcmVmc193aXRoX3N5bXJlZl9pbmZvKHN0cnVjdCByZWYgKnJlZikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3ltcmVmID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJY29uc3QgY2hhciAqZmVhdHVyZV9saXN0ID0gc2VydmVyX2NhcGFiaWxpdGllc192MTsKKworCXdoaWxlIChmZWF0dXJlX2xpc3QpIHsKKwkJaW50IGxlbjsKKwkJY29uc3QgY2hhciAqdmFsOworCisJCXZhbCA9IHBhcnNlX2ZlYXR1cmVfdmFsdWUoZmVhdHVyZV9saXN0LCAic3ltcmVmIiwgJmxlbik7CisJCWlmICghdmFsKQorCQkJYnJlYWs7CisJCXBhcnNlX29uZV9zeW1yZWZfaW5mbygmc3ltcmVmLCB2YWwsIGxlbik7CisJCWZlYXR1cmVfbGlzdCA9IHZhbCArIDE7CisJfQorCXN0cmluZ19saXN0X3NvcnQoJnN5bXJlZik7CisKKwlmb3IgKDsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoJnN5bXJlZiwgcmVmLT5uYW1lKTsKKwkJaWYgKCFpdGVtKQorCQkJY29udGludWU7CisJCXJlZi0+c3ltcmVmID0geHN0cmR1cCgoY2hhciAqKWl0ZW0tPnV0aWwpOworCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmc3ltcmVmLCAwKTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19jYXBhYmlsaXRpZXMoY29uc3QgY2hhciAqbGluZSwgaW50ICpsZW4pCit7CisJaW50IG51bF9sb2NhdGlvbiA9IHN0cmxlbihsaW5lKTsKKwlpZiAobnVsX2xvY2F0aW9uID09ICpsZW4pCisJCXJldHVybjsKKwlzZXJ2ZXJfY2FwYWJpbGl0aWVzX3YxID0geHN0cmR1cChsaW5lICsgbnVsX2xvY2F0aW9uICsgMSk7CisJKmxlbiA9IG51bF9sb2NhdGlvbjsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2R1bW15X3JlZihjb25zdCBjaGFyICpsaW5lKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwlpZiAocGFyc2Vfb2lkX2hleChsaW5lLCAmb2lkLCAmbmFtZSkpCisJCXJldHVybiAwOworCWlmICgqbmFtZSAhPSAnICcpCisJCXJldHVybiAwOworCW5hbWUrKzsKKworCXJldHVybiBvaWRlcSgmbnVsbF9vaWQsICZvaWQpICYmICFzdHJjbXAobmFtZSwgImNhcGFiaWxpdGllc157fSIpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19ub19jYXBhYmlsaXRpZXMoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwlpZiAoc3RybGVuKGxpbmUpICE9IGxlbikKKwkJd2FybmluZyhfKCJpZ25vcmluZyBjYXBhYmlsaXRpZXMgYWZ0ZXIgZmlyc3QgbGluZSAnJXMnIiksCisJCQlsaW5lICsgc3RybGVuKGxpbmUpKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX3JlZihjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCBzdHJ1Y3QgcmVmICoqKmxpc3QsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBvaWRfYXJyYXkgKmV4dHJhX2hhdmUpCit7CisJc3RydWN0IG9iamVjdF9pZCBvbGRfb2lkOworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwlpZiAocGFyc2Vfb2lkX2hleChsaW5lLCAmb2xkX29pZCwgJm5hbWUpKQorCQlyZXR1cm4gMDsKKwlpZiAoKm5hbWUgIT0gJyAnKQorCQlyZXR1cm4gMDsKKwluYW1lKys7CisKKwlpZiAoZXh0cmFfaGF2ZSAmJiAhc3RyY21wKG5hbWUsICIuaGF2ZSIpKSB7CisJCW9pZF9hcnJheV9hcHBlbmQoZXh0cmFfaGF2ZSwgJm9sZF9vaWQpOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiY2FwYWJpbGl0aWVzXnt9IikpIHsKKwkJZGllKF8oInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkIGNhcGFiaWxpdGllc157fSIpKTsKKwl9IGVsc2UgaWYgKGNoZWNrX3JlZihuYW1lLCBmbGFncykpIHsKKwkJc3RydWN0IHJlZiAqcmVmID0gYWxsb2NfcmVmKG5hbWUpOworCQlvaWRjcHkoJnJlZi0+b2xkX29pZCwgJm9sZF9vaWQpOworCQkqKmxpc3QgPSByZWY7CisJCSpsaXN0ID0gJnJlZi0+bmV4dDsKKwl9CisJY2hlY2tfbm9fY2FwYWJpbGl0aWVzKGxpbmUsIGxlbik7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19zaGFsbG93KGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sCisJCQkgICBzdHJ1Y3Qgb2lkX2FycmF5ICpzaGFsbG93X3BvaW50cykKK3sKKwljb25zdCBjaGFyICphcmc7CisJc3RydWN0IG9iamVjdF9pZCBvbGRfb2lkOworCisJaWYgKCFza2lwX3ByZWZpeChsaW5lLCAic2hhbGxvdyAiLCAmYXJnKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZ2V0X29pZF9oZXgoYXJnLCAmb2xkX29pZCkpCisJCWRpZShfKCJwcm90b2NvbCBlcnJvcjogZXhwZWN0ZWQgc2hhbGxvdyBzaGEtMSwgZ290ICclcyciKSwgYXJnKTsKKwlpZiAoIXNoYWxsb3dfcG9pbnRzKQorCQlkaWUoXygicmVwb3NpdG9yeSBvbiB0aGUgb3RoZXIgZW5kIGNhbm5vdCBiZSBzaGFsbG93IikpOworCW9pZF9hcnJheV9hcHBlbmQoc2hhbGxvd19wb2ludHMsICZvbGRfb2lkKTsKKwljaGVja19ub19jYXBhYmlsaXRpZXMobGluZSwgbGVuKTsKKwlyZXR1cm4gMTsKK30KKworZW51bSBnZXRfcmVtb3RlX2hlYWRzX3N0YXRlIHsKKwlFWFBFQ1RJTkdfRklSU1RfUkVGID0gMCwKKwlFWFBFQ1RJTkdfUkVGLAorCUVYUEVDVElOR19TSEFMTE9XLAorCUVYUEVDVElOR19ET05FLAorfTsKKworLyoKKyAqIFJlYWQgYWxsIHRoZSByZWZzIGZyb20gdGhlIG90aGVyIGVuZAorICovCitzdHJ1Y3QgcmVmICoqZ2V0X3JlbW90ZV9oZWFkcyhzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVhZGVyLAorCQkJICAgICAgc3RydWN0IHJlZiAqKmxpc3QsIHVuc2lnbmVkIGludCBmbGFncywKKwkJCSAgICAgIHN0cnVjdCBvaWRfYXJyYXkgKmV4dHJhX2hhdmUsCisJCQkgICAgICBzdHJ1Y3Qgb2lkX2FycmF5ICpzaGFsbG93X3BvaW50cykKK3sKKwlzdHJ1Y3QgcmVmICoqb3JpZ19saXN0ID0gbGlzdDsKKwlpbnQgbGVuID0gMDsKKwllbnVtIGdldF9yZW1vdGVfaGVhZHNfc3RhdGUgc3RhdGUgPSBFWFBFQ1RJTkdfRklSU1RfUkVGOworCisJKmxpc3QgPSBOVUxMOworCisJd2hpbGUgKHN0YXRlICE9IEVYUEVDVElOR19ET05FKSB7CisJCXN3aXRjaCAocGFja2V0X3JlYWRlcl9yZWFkKHJlYWRlcikpIHsKKwkJY2FzZSBQQUNLRVRfUkVBRF9FT0Y6CisJCQlkaWVfaW5pdGlhbF9jb250YWN0KDEpOworCQljYXNlIFBBQ0tFVF9SRUFEX05PUk1BTDoKKwkJCWxlbiA9IHJlYWRlci0+cGt0bGVuOworCQkJYnJlYWs7CisJCWNhc2UgUEFDS0VUX1JFQURfRkxVU0g6CisJCQlzdGF0ZSA9IEVYUEVDVElOR19ET05FOworCQkJYnJlYWs7CisJCWNhc2UgUEFDS0VUX1JFQURfREVMSU06CisJCQlkaWUoXygiaW52YWxpZCBwYWNrZXQiKSk7CisJCX0KKworCQlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgRVhQRUNUSU5HX0ZJUlNUX1JFRjoKKwkJCXByb2Nlc3NfY2FwYWJpbGl0aWVzKHJlYWRlci0+bGluZSwgJmxlbik7CisJCQlpZiAocHJvY2Vzc19kdW1teV9yZWYocmVhZGVyLT5saW5lKSkgeworCQkJCXN0YXRlID0gRVhQRUNUSU5HX1NIQUxMT1c7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzdGF0ZSA9IEVYUEVDVElOR19SRUY7CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIEVYUEVDVElOR19SRUY6CisJCQlpZiAocHJvY2Vzc19yZWYocmVhZGVyLT5saW5lLCBsZW4sICZsaXN0LCBmbGFncywgZXh0cmFfaGF2ZSkpCisJCQkJYnJlYWs7CisJCQlzdGF0ZSA9IEVYUEVDVElOR19TSEFMTE9XOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSBFWFBFQ1RJTkdfU0hBTExPVzoKKwkJCWlmIChwcm9jZXNzX3NoYWxsb3cocmVhZGVyLT5saW5lLCBsZW4sIHNoYWxsb3dfcG9pbnRzKSkKKwkJCQlicmVhazsKKwkJCWRpZShfKCJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCAnJXMnIiksIHJlYWRlci0+bGluZSk7CisJCWNhc2UgRVhQRUNUSU5HX0RPTkU6CisJCQlicmVhazsKKwkJfQorCX0KKworCWFubm90YXRlX3JlZnNfd2l0aF9zeW1yZWZfaW5mbygqb3JpZ19saXN0KTsKKworCXJldHVybiBsaXN0OworfQorCisvKiBSZXR1cm5zIDEgd2hlbiBhIHZhbGlkIHJlZiBoYXMgYmVlbiBhZGRlZCB0byBgbGlzdGAsIDAgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IHByb2Nlc3NfcmVmX3YyKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCByZWYgKioqbGlzdCkKK3sKKwlpbnQgcmV0ID0gMTsKKwlpbnQgaSA9IDA7CisJc3RydWN0IG9iamVjdF9pZCBvbGRfb2lkOworCXN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGluZV9zZWN0aW9ucyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWNvbnN0IGNoYXIgKmVuZDsKKworCS8qCisJICogUmVmIGxpbmVzIGhhdmUgYSBudW1iZXIgb2YgZmllbGRzIHdoaWNoIGFyZSBzcGFjZSBkZWxpbWluYXRlZC4gIFRoZQorCSAqIGZpcnN0IGZpZWxkIGlzIHRoZSBPSUQgb2YgdGhlIHJlZi4gIFRoZSBzZWNvbmQgZmllbGQgaXMgdGhlIHJlZgorCSAqIG5hbWUuICBTdWJzZXF1ZW50IGZpZWxkcyAoc3ltcmVmLXRhcmdldCBhbmQgcGVlbGVkKSBhcmUgb3B0aW9uYWwgYW5kCisJICogZG9uJ3QgaGF2ZSBhIHBhcnRpY3VsYXIgb3JkZXIuCisJICovCisJaWYgKHN0cmluZ19saXN0X3NwbGl0KCZsaW5lX3NlY3Rpb25zLCBsaW5lLCAnICcsIC0xKSA8IDIpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHBhcnNlX29pZF9oZXgobGluZV9zZWN0aW9ucy5pdGVtc1tpKytdLnN0cmluZywgJm9sZF9vaWQsICZlbmQpIHx8CisJICAgICplbmQpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJcmVmID0gYWxsb2NfcmVmKGxpbmVfc2VjdGlvbnMuaXRlbXNbaSsrXS5zdHJpbmcpOworCisJb2lkY3B5KCZyZWYtPm9sZF9vaWQsICZvbGRfb2lkKTsKKwkqKmxpc3QgPSByZWY7CisJKmxpc3QgPSAmcmVmLT5uZXh0OworCisJZm9yICg7IGkgPCBsaW5lX3NlY3Rpb25zLm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gbGluZV9zZWN0aW9ucy5pdGVtc1tpXS5zdHJpbmc7CisJCWlmIChza2lwX3ByZWZpeChhcmcsICJzeW1yZWYtdGFyZ2V0OiIsICZhcmcpKQorCQkJcmVmLT5zeW1yZWYgPSB4c3RyZHVwKGFyZyk7CisKKwkJaWYgKHNraXBfcHJlZml4KGFyZywgInBlZWxlZDoiLCAmYXJnKSkgeworCQkJc3RydWN0IG9iamVjdF9pZCBwZWVsZWRfb2lkOworCQkJY2hhciAqcGVlbGVkX25hbWU7CisJCQlzdHJ1Y3QgcmVmICpwZWVsZWQ7CisJCQlpZiAocGFyc2Vfb2lkX2hleChhcmcsICZwZWVsZWRfb2lkLCAmZW5kKSB8fCAqZW5kKSB7CisJCQkJcmV0ID0gMDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJcGVlbGVkX25hbWUgPSB4c3RyZm10KCIlc157fSIsIHJlZi0+bmFtZSk7CisJCQlwZWVsZWQgPSBhbGxvY19yZWYocGVlbGVkX25hbWUpOworCisJCQlvaWRjcHkoJnBlZWxlZC0+b2xkX29pZCwgJnBlZWxlZF9vaWQpOworCQkJKipsaXN0ID0gcGVlbGVkOworCQkJKmxpc3QgPSAmcGVlbGVkLT5uZXh0OworCisJCQlmcmVlKHBlZWxlZF9uYW1lKTsKKwkJfQorCX0KKworb3V0OgorCXN0cmluZ19saXN0X2NsZWFyKCZsaW5lX3NlY3Rpb25zLCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgcmVmICoqZ2V0X3JlbW90ZV9yZWZzKGludCBmZF9vdXQsIHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZWFkZXIsCisJCQkgICAgIHN0cnVjdCByZWYgKipsaXN0LCBpbnQgZm9yX3B1c2gsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICpyZWZfcHJlZml4ZXMsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqc2VydmVyX29wdGlvbnMpCit7CisJaW50IGk7CisJKmxpc3QgPSBOVUxMOworCisJaWYgKHNlcnZlcl9zdXBwb3J0c192MigibHMtcmVmcyIsIDEpKQorCQlwYWNrZXRfd3JpdGVfZm10KGZkX291dCwgImNvbW1hbmQ9bHMtcmVmc1xuIik7CisKKwlpZiAoc2VydmVyX3N1cHBvcnRzX3YyKCJhZ2VudCIsIDApKQorCQlwYWNrZXRfd3JpdGVfZm10KGZkX291dCwgImFnZW50PSVzIiwgZ2l0X3VzZXJfYWdlbnRfc2FuaXRpemVkKCkpOworCisJaWYgKHNlcnZlcl9vcHRpb25zICYmIHNlcnZlcl9vcHRpb25zLT5uciAmJgorCSAgICBzZXJ2ZXJfc3VwcG9ydHNfdjIoInNlcnZlci1vcHRpb24iLCAxKSkKKwkJZm9yIChpID0gMDsgaSA8IHNlcnZlcl9vcHRpb25zLT5ucjsgaSsrKQorCQkJcGFja2V0X3dyaXRlX2ZtdChmZF9vdXQsICJzZXJ2ZXItb3B0aW9uPSVzIiwKKwkJCQkJIHNlcnZlcl9vcHRpb25zLT5pdGVtc1tpXS5zdHJpbmcpOworCisJcGFja2V0X2RlbGltKGZkX291dCk7CisJLyogV2hlbiBwdXNoaW5nIHdlIGRvbid0IHdhbnQgdG8gcmVxdWVzdCB0aGUgcGVlbGVkIHRhZ3MgKi8KKwlpZiAoIWZvcl9wdXNoKQorCQlwYWNrZXRfd3JpdGVfZm10KGZkX291dCwgInBlZWxcbiIpOworCXBhY2tldF93cml0ZV9mbXQoZmRfb3V0LCAic3ltcmVmc1xuIik7CisJZm9yIChpID0gMDsgcmVmX3ByZWZpeGVzICYmIGkgPCByZWZfcHJlZml4ZXMtPmFyZ2M7IGkrKykgeworCQlwYWNrZXRfd3JpdGVfZm10KGZkX291dCwgInJlZi1wcmVmaXggJXNcbiIsCisJCQkJIHJlZl9wcmVmaXhlcy0+YXJndltpXSk7CisJfQorCXBhY2tldF9mbHVzaChmZF9vdXQpOworCisJLyogUHJvY2VzcyByZXNwb25zZSBmcm9tIHNlcnZlciAqLworCXdoaWxlIChwYWNrZXRfcmVhZGVyX3JlYWQocmVhZGVyKSA9PSBQQUNLRVRfUkVBRF9OT1JNQUwpIHsKKwkJaWYgKCFwcm9jZXNzX3JlZl92MihyZWFkZXItPmxpbmUsICZsaXN0KSkKKwkJCWRpZShfKCJpbnZhbGlkIGxzLXJlZnMgcmVzcG9uc2U6ICVzIiksIHJlYWRlci0+bGluZSk7CisJfQorCisJaWYgKHJlYWRlci0+c3RhdHVzICE9IFBBQ0tFVF9SRUFEX0ZMVVNIKQorCQlkaWUoXygiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgcmVmIGxpc3RpbmciKSk7CisKKwlyZXR1cm4gbGlzdDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2ZlYXR1cmVfdmFsdWUoY29uc3QgY2hhciAqZmVhdHVyZV9saXN0LCBjb25zdCBjaGFyICpmZWF0dXJlLCBpbnQgKmxlbnApCit7CisJaW50IGxlbjsKKworCWlmICghZmVhdHVyZV9saXN0KQorCQlyZXR1cm4gTlVMTDsKKworCWxlbiA9IHN0cmxlbihmZWF0dXJlKTsKKwl3aGlsZSAoKmZlYXR1cmVfbGlzdCkgeworCQljb25zdCBjaGFyICpmb3VuZCA9IHN0cnN0cihmZWF0dXJlX2xpc3QsIGZlYXR1cmUpOworCQlpZiAoIWZvdW5kKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmIChmZWF0dXJlX2xpc3QgPT0gZm91bmQgfHwgaXNzcGFjZShmb3VuZFstMV0pKSB7CisJCQljb25zdCBjaGFyICp2YWx1ZSA9IGZvdW5kICsgbGVuOworCQkJLyogZmVhdHVyZSB3aXRoIG5vIHZhbHVlIChlLmcuLCAidGhpbi1wYWNrIikgKi8KKwkJCWlmICghKnZhbHVlIHx8IGlzc3BhY2UoKnZhbHVlKSkgeworCQkJCWlmIChsZW5wKQorCQkJCQkqbGVucCA9IDA7CisJCQkJcmV0dXJuIHZhbHVlOworCQkJfQorCQkJLyogZmVhdHVyZSB3aXRoIGEgdmFsdWUgKGUuZy4sICJhZ2VudD1naXQvMS4yLjMiKSAqLworCQkJZWxzZSBpZiAoKnZhbHVlID09ICc9JykgeworCQkJCXZhbHVlKys7CisJCQkJaWYgKGxlbnApCisJCQkJCSpsZW5wID0gc3RyY3Nwbih2YWx1ZSwgIiBcdFxuIik7CisJCQkJcmV0dXJuIHZhbHVlOworCQkJfQorCQkJLyoKKwkJCSAqIG90aGVyd2lzZSB3ZSBtYXRjaGVkIGEgc3Vic3RyaW5nIG9mIGFub3RoZXIgZmVhdHVyZTsKKwkJCSAqIGtlZXAgbG9va2luZworCQkJICovCisJCX0KKwkJZmVhdHVyZV9saXN0ID0gZm91bmQgKyAxOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChjb25zdCBjaGFyICpmZWF0dXJlX2xpc3QsIGNvbnN0IGNoYXIgKmZlYXR1cmUpCit7CisJcmV0dXJuICEhcGFyc2VfZmVhdHVyZV92YWx1ZShmZWF0dXJlX2xpc3QsIGZlYXR1cmUsIE5VTEwpOworfQorCitjb25zdCBjaGFyICpzZXJ2ZXJfZmVhdHVyZV92YWx1ZShjb25zdCBjaGFyICpmZWF0dXJlLCBpbnQgKmxlbikKK3sKKwlyZXR1cm4gcGFyc2VfZmVhdHVyZV92YWx1ZShzZXJ2ZXJfY2FwYWJpbGl0aWVzX3YxLCBmZWF0dXJlLCBsZW4pOworfQorCitpbnQgc2VydmVyX3N1cHBvcnRzKGNvbnN0IGNoYXIgKmZlYXR1cmUpCit7CisJcmV0dXJuICEhc2VydmVyX2ZlYXR1cmVfdmFsdWUoZmVhdHVyZSwgTlVMTCk7Cit9CisKK2VudW0gcHJvdG9jb2wgeworCVBST1RPX0xPQ0FMID0gMSwKKwlQUk9UT19GSUxFLAorCVBST1RPX1NTSCwKKwlQUk9UT19HSVQKK307CisKK2ludCB1cmxfaXNfbG9jYWxfbm90X3NzaChjb25zdCBjaGFyICp1cmwpCit7CisJY29uc3QgY2hhciAqY29sb24gPSBzdHJjaHIodXJsLCAnOicpOworCWNvbnN0IGNoYXIgKnNsYXNoID0gc3RyY2hyKHVybCwgJy8nKTsKKwlyZXR1cm4gIWNvbG9uIHx8IChzbGFzaCAmJiBzbGFzaCA8IGNvbG9uKSB8fAorCQkoaGFzX2Rvc19kcml2ZV9wcmVmaXgodXJsKSAmJiBpc192YWxpZF9wYXRoKHVybCkpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcHJvdF9uYW1lKGVudW0gcHJvdG9jb2wgcHJvdG9jb2wpCit7CisJc3dpdGNoIChwcm90b2NvbCkgeworCQljYXNlIFBST1RPX0xPQ0FMOgorCQljYXNlIFBST1RPX0ZJTEU6CisJCQlyZXR1cm4gImZpbGUiOworCQljYXNlIFBST1RPX1NTSDoKKwkJCXJldHVybiAic3NoIjsKKwkJY2FzZSBQUk9UT19HSVQ6CisJCQlyZXR1cm4gImdpdCI7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gInVua25vd24gcHJvdG9jb2wiOworCX0KK30KKworc3RhdGljIGVudW0gcHJvdG9jb2wgZ2V0X3Byb3RvY29sKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKCFzdHJjbXAobmFtZSwgInNzaCIpKQorCQlyZXR1cm4gUFJPVE9fU1NIOworCWlmICghc3RyY21wKG5hbWUsICJnaXQiKSkKKwkJcmV0dXJuIFBST1RPX0dJVDsKKwlpZiAoIXN0cmNtcChuYW1lLCAiZ2l0K3NzaCIpKSAvKiBkZXByZWNhdGVkIC0gZG8gbm90IHVzZSAqLworCQlyZXR1cm4gUFJPVE9fU1NIOworCWlmICghc3RyY21wKG5hbWUsICJzc2grZ2l0IikpIC8qIGRlcHJlY2F0ZWQgLSBkbyBub3QgdXNlICovCisJCXJldHVybiBQUk9UT19TU0g7CisJaWYgKCFzdHJjbXAobmFtZSwgImZpbGUiKSkKKwkJcmV0dXJuIFBST1RPX0ZJTEU7CisJZGllKF8oInByb3RvY29sICclcycgaXMgbm90IHN1cHBvcnRlZCIpLCBuYW1lKTsKK30KKworc3RhdGljIGNoYXIgKmhvc3RfZW5kKGNoYXIgKipob3N0c3RhcnQsIGludCByZW1vdmVicmFja2V0cykKK3sKKwljaGFyICpob3N0ID0gKmhvc3RzdGFydDsKKwljaGFyICplbmQ7CisJY2hhciAqc3RhcnQgPSBzdHJzdHIoaG9zdCwgIkBbIik7CisJaWYgKHN0YXJ0KQorCQlzdGFydCsrOyAvKiBKdW1wIG92ZXIgJ0AnICovCisJZWxzZQorCQlzdGFydCA9IGhvc3Q7CisJaWYgKHN0YXJ0WzBdID09ICdbJykgeworCQllbmQgPSBzdHJjaHIoc3RhcnQgKyAxLCAnXScpOworCQlpZiAoZW5kKSB7CisJCQlpZiAocmVtb3ZlYnJhY2tldHMpIHsKKwkJCQkqZW5kID0gMDsKKwkJCQltZW1tb3ZlKHN0YXJ0LCBzdGFydCArIDEsIGVuZCAtIHN0YXJ0KTsKKwkJCQllbmQrKzsKKwkJCX0KKwkJfSBlbHNlCisJCQllbmQgPSBob3N0OworCX0gZWxzZQorCQllbmQgPSBob3N0OworCXJldHVybiBlbmQ7Cit9CisKKyNkZWZpbmUgU1RSXyhzKQkjIHMKKyNkZWZpbmUgU1RSKHMpCVNUUl8ocykKKworc3RhdGljIHZvaWQgZ2V0X2hvc3RfYW5kX3BvcnQoY2hhciAqKmhvc3QsIGNvbnN0IGNoYXIgKipwb3J0KQoreworCWNoYXIgKmNvbG9uLCAqZW5kOworCWVuZCA9IGhvc3RfZW5kKGhvc3QsIDEpOworCWNvbG9uID0gc3RyY2hyKGVuZCwgJzonKTsKKwlpZiAoY29sb24pIHsKKwkJbG9uZyBwb3J0bnIgPSBzdHJ0b2woY29sb24gKyAxLCAmZW5kLCAxMCk7CisJCWlmIChlbmQgIT0gY29sb24gKyAxICYmICplbmQgPT0gJ1wwJyAmJiAwIDw9IHBvcnRuciAmJiBwb3J0bnIgPCA2NTUzNikgeworCQkJKmNvbG9uID0gMDsKKwkJCSpwb3J0ID0gY29sb24gKyAxOworCQl9IGVsc2UgaWYgKCFjb2xvblsxXSkgeworCQkJKmNvbG9uID0gMDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZW5hYmxlX2tlZXBhbGl2ZShpbnQgc29ja2ZkKQoreworCWludCBrYSA9IDE7CisKKwlpZiAoc2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX0tFRVBBTElWRSwgJmthLCBzaXplb2Yoa2EpKSA8IDApCisJCWVycm9yX2Vycm5vKF8oInVuYWJsZSB0byBzZXQgU09fS0VFUEFMSVZFIG9uIHNvY2tldCIpKTsKK30KKworI2lmbmRlZiBOT19JUFY2CisKK3N0YXRpYyBjb25zdCBjaGFyICphaV9uYW1lKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqYWkpCit7CisJc3RhdGljIGNoYXIgYWRkcltOSV9NQVhIT1NUXTsKKwlpZiAoZ2V0bmFtZWluZm8oYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuLCBhZGRyLCBzaXplb2YoYWRkciksIE5VTEwsIDAsCisJCQlOSV9OVU1FUklDSE9TVCkgIT0gMCkKKwkJeHNucHJpbnRmKGFkZHIsIHNpemVvZihhZGRyKSwgIih1bmtub3duKSIpOworCisJcmV0dXJuIGFkZHI7Cit9CisKKy8qCisgKiBSZXR1cm5zIGEgY29ubmVjdGVkIHNvY2tldCgpIGZkLCBvciBlbHNlIGRpZSgpcy4KKyAqLworc3RhdGljIGludCBnaXRfdGNwX2Nvbm5lY3Rfc29jayhjaGFyICpob3N0LCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN0cmJ1ZiBlcnJvcl9tZXNzYWdlID0gU1RSQlVGX0lOSVQ7CisJaW50IHNvY2tmZCA9IC0xOworCWNvbnN0IGNoYXIgKnBvcnQgPSBTVFIoREVGQVVMVF9HSVRfUE9SVCk7CisJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWkwLCAqYWk7CisJaW50IGdhaTsKKwlpbnQgY250ID0gMDsKKworCWdldF9ob3N0X2FuZF9wb3J0KCZob3N0LCAmcG9ydCk7CisJaWYgKCEqcG9ydCkKKwkJcG9ydCA9ICI8bm9uZT4iOworCisJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisJaWYgKGZsYWdzICYgQ09OTkVDVF9JUFY0KQorCQloaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUOworCWVsc2UgaWYgKGZsYWdzICYgQ09OTkVDVF9JUFY2KQorCQloaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworCWhpbnRzLmFpX3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CisKKwlpZiAoZmxhZ3MgJiBDT05ORUNUX1ZFUkJPU0UpCisJCWZwcmludGYoc3RkZXJyLCBfKCJMb29raW5nIHVwICVzIC4uLiAiKSwgaG9zdCk7CisKKwlnYWkgPSBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCAmaGludHMsICZhaSk7CisJaWYgKGdhaSkKKwkJZGllKF8oInVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIiksIGhvc3QsIHBvcnQsIGdhaV9zdHJlcnJvcihnYWkpKTsKKworCWlmIChmbGFncyAmIENPTk5FQ1RfVkVSQk9TRSkKKwkJLyogVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiTG9va2luZyB1cCAlcyAuLi4gIiAqLworCQlmcHJpbnRmKHN0ZGVyciwgXygiZG9uZS5cbkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiKSwgaG9zdCwgcG9ydCk7CisKKwlmb3IgKGFpMCA9IGFpOyBhaTsgYWkgPSBhaS0+YWlfbmV4dCwgY250KyspIHsKKwkJc29ja2ZkID0gc29ja2V0KGFpLT5haV9mYW1pbHksCisJCQkJYWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOworCQlpZiAoKHNvY2tmZCA8IDApIHx8CisJCSAgICAoY29ubmVjdChzb2NrZmQsIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgPCAwKSkgeworCQkJc3RyYnVmX2FkZGYoJmVycm9yX21lc3NhZ2UsICIlc1slZDogJXNdOiBlcnJubz0lc1xuIiwKKwkJCQkgICAgaG9zdCwgY250LCBhaV9uYW1lKGFpKSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWlmICgwIDw9IHNvY2tmZCkKKwkJCQljbG9zZShzb2NrZmQpOworCQkJc29ja2ZkID0gLTE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBDT05ORUNUX1ZFUkJPU0UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzICIsIGFpX25hbWUoYWkpKTsKKwkJYnJlYWs7CisJfQorCisJZnJlZWFkZHJpbmZvKGFpMCk7CisKKwlpZiAoc29ja2ZkIDwgMCkKKwkJZGllKF8oInVuYWJsZSB0byBjb25uZWN0IHRvICVzOlxuJXMiKSwgaG9zdCwgZXJyb3JfbWVzc2FnZS5idWYpOworCisJZW5hYmxlX2tlZXBhbGl2ZShzb2NrZmQpOworCisJaWYgKGZsYWdzICYgQ09OTkVDVF9WRVJCT1NFKQorCQkvKiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIiAqLworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZG9uZS4iKSk7CisKKwlzdHJidWZfcmVsZWFzZSgmZXJyb3JfbWVzc2FnZSk7CisKKwlyZXR1cm4gc29ja2ZkOworfQorCisjZWxzZSAvKiBOT19JUFY2ICovCisKKy8qCisgKiBSZXR1cm5zIGEgY29ubmVjdGVkIHNvY2tldCgpIGZkLCBvciBlbHNlIGRpZSgpcy4KKyAqLworc3RhdGljIGludCBnaXRfdGNwX2Nvbm5lY3Rfc29jayhjaGFyICpob3N0LCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN0cmJ1ZiBlcnJvcl9tZXNzYWdlID0gU1RSQlVGX0lOSVQ7CisJaW50IHNvY2tmZCA9IC0xOworCWNvbnN0IGNoYXIgKnBvcnQgPSBTVFIoREVGQVVMVF9HSVRfUE9SVCk7CisJY2hhciAqZXA7CisJc3RydWN0IGhvc3RlbnQgKmhlOworCXN0cnVjdCBzb2NrYWRkcl9pbiBzYTsKKwljaGFyICoqYXA7CisJdW5zaWduZWQgaW50IG5wb3J0OworCWludCBjbnQ7CisKKwlnZXRfaG9zdF9hbmRfcG9ydCgmaG9zdCwgJnBvcnQpOworCisJaWYgKGZsYWdzICYgQ09OTkVDVF9WRVJCT1NFKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiTG9va2luZyB1cCAlcyAuLi4gIiksIGhvc3QpOworCisJaGUgPSBnZXRob3N0YnluYW1lKGhvc3QpOworCWlmICghaGUpCisJCWRpZShfKCJ1bmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIiksIGhvc3QsIGhzdHJlcnJvcihoX2Vycm5vKSk7CisJbnBvcnQgPSBzdHJ0b3VsKHBvcnQsICZlcCwgMTApOworCWlmICggZXAgPT0gcG9ydCB8fCAqZXAgKSB7CisJCS8qIE5vdCBudW1lcmljICovCisJCXN0cnVjdCBzZXJ2ZW50ICpzZSA9IGdldHNlcnZieW5hbWUocG9ydCwidGNwIik7CisJCWlmICggIXNlICkKKwkJCWRpZShfKCJ1bmtub3duIHBvcnQgJXMiKSwgcG9ydCk7CisJCW5wb3J0ID0gc2UtPnNfcG9ydDsKKwl9CisKKwlpZiAoZmxhZ3MgJiBDT05ORUNUX1ZFUkJPU0UpCisJCS8qIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkxvb2tpbmcgdXAgJXMgLi4uICIgKi8KKwkJZnByaW50ZihzdGRlcnIsIF8oImRvbmUuXG5Db25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIiksIGhvc3QsIHBvcnQpOworCisJZm9yIChjbnQgPSAwLCBhcCA9IGhlLT5oX2FkZHJfbGlzdDsgKmFwOyBhcCsrLCBjbnQrKykgeworCQltZW1zZXQoJnNhLCAwLCBzaXplb2Ygc2EpOworCQlzYS5zaW5fZmFtaWx5ID0gaGUtPmhfYWRkcnR5cGU7CisJCXNhLnNpbl9wb3J0ID0gaHRvbnMobnBvcnQpOworCQltZW1jcHkoJnNhLnNpbl9hZGRyLCAqYXAsIGhlLT5oX2xlbmd0aCk7CisKKwkJc29ja2ZkID0gc29ja2V0KGhlLT5oX2FkZHJ0eXBlLCBTT0NLX1NUUkVBTSwgMCk7CisJCWlmICgoc29ja2ZkIDwgMCkgfHwKKwkJICAgIGNvbm5lY3Qoc29ja2ZkLCAoc3RydWN0IHNvY2thZGRyICopJnNhLCBzaXplb2Ygc2EpIDwgMCkgeworCQkJc3RyYnVmX2FkZGYoJmVycm9yX21lc3NhZ2UsICIlc1slZDogJXNdOiBlcnJubz0lc1xuIiwKKwkJCQlob3N0LAorCQkJCWNudCwKKwkJCQlpbmV0X250b2EoKihzdHJ1Y3QgaW5fYWRkciAqKSZzYS5zaW5fYWRkciksCisJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJCWlmICgwIDw9IHNvY2tmZCkKKwkJCQljbG9zZShzb2NrZmQpOworCQkJc29ja2ZkID0gLTE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBDT05ORUNUX1ZFUkJPU0UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzICIsCisJCQkJaW5ldF9udG9hKCooc3RydWN0IGluX2FkZHIgKikmc2Euc2luX2FkZHIpKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHNvY2tmZCA8IDApCisJCWRpZShfKCJ1bmFibGUgdG8gY29ubmVjdCB0byAlczpcbiVzIiksIGhvc3QsIGVycm9yX21lc3NhZ2UuYnVmKTsKKworCWVuYWJsZV9rZWVwYWxpdmUoc29ja2ZkKTsKKworCWlmIChmbGFncyAmIENPTk5FQ1RfVkVSQk9TRSkKKwkJLyogVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIgKi8KKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oImRvbmUuIikpOworCisJcmV0dXJuIHNvY2tmZDsKK30KKworI2VuZGlmIC8qIE5PX0lQVjYgKi8KKworCisvKgorICogRHVtbXkgY2hpbGRfcHJvY2VzcyByZXR1cm5lZCBieSBnaXRfY29ubmVjdCgpIGlmIHRoZSB0cmFuc3BvcnQgcHJvdG9jb2wKKyAqIGRvZXMgbm90IG5lZWQgZm9yaygyKS4KKyAqLworc3RhdGljIHN0cnVjdCBjaGlsZF9wcm9jZXNzIG5vX2ZvcmsgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKK2ludCBnaXRfY29ubmVjdGlvbl9pc19zb2NrZXQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4pCit7CisJcmV0dXJuIGNvbm4gPT0gJm5vX2Zvcms7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZ2l0X3RjcF9jb25uZWN0KGludCBmZFsyXSwgY2hhciAqaG9zdCwgaW50IGZsYWdzKQoreworCWludCBzb2NrZmQgPSBnaXRfdGNwX2Nvbm5lY3Rfc29jayhob3N0LCBmbGFncyk7CisKKwlmZFswXSA9IHNvY2tmZDsKKwlmZFsxXSA9IGR1cChzb2NrZmQpOworCisJcmV0dXJuICZub19mb3JrOworfQorCisKK3N0YXRpYyBjaGFyICpnaXRfcHJveHlfY29tbWFuZDsKKworc3RhdGljIGludCBnaXRfcHJveHlfY29tbWFuZF9vcHRpb25zKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsCisJCXZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImNvcmUuZ2l0cHJveHkiKSkgeworCQljb25zdCBjaGFyICpmb3JfcG9zOworCQlpbnQgbWF0Y2hsZW4gPSAtMTsKKwkJaW50IGhvc3RsZW47CisJCWNvbnN0IGNoYXIgKnJob3N0X25hbWUgPSBjYjsKKwkJaW50IHJob3N0X2xlbiA9IHN0cmxlbihyaG9zdF9uYW1lKTsKKworCQlpZiAoZ2l0X3Byb3h5X2NvbW1hbmQpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQkvKiBbY29yZV0KKwkJICogOyMgbWF0Y2hlcyB3d3cua2VybmVsLm9yZyBhcyB3ZWxsCisJCSAqIGdpdHByb3h5ID0gbmV0Y2F0dGVyLTEgZm9yIGtlcm5lbC5vcmcKKwkJICogZ2l0cHJveHkgPSBuZXRjYXR0ZXItMiBmb3Igc2FtcGxlLnh6CisJCSAqIGdpdHByb3h5ID0gbmV0Y2F0dGVyLWRlZmF1bHQKKwkJICovCisJCWZvcl9wb3MgPSBzdHJzdHIodmFsdWUsICIgZm9yICIpOworCQlpZiAoIWZvcl9wb3MpCisJCQkvKiBtYXRjaGVzIGV2ZXJ5Ym9keSAqLworCQkJbWF0Y2hsZW4gPSBzdHJsZW4odmFsdWUpOworCQllbHNlIHsKKwkJCWhvc3RsZW4gPSBzdHJsZW4oZm9yX3BvcyArIDUpOworCQkJaWYgKHJob3N0X2xlbiA8IGhvc3RsZW4pCisJCQkJbWF0Y2hsZW4gPSAtMTsKKwkJCWVsc2UgaWYgKCFzdHJuY21wKGZvcl9wb3MgKyA1LAorCQkJCQkgIHJob3N0X25hbWUgKyByaG9zdF9sZW4gLSBob3N0bGVuLAorCQkJCQkgIGhvc3RsZW4pICYmCisJCQkJICgocmhvc3RfbGVuID09IGhvc3RsZW4pIHx8CisJCQkJICByaG9zdF9uYW1lW3Job3N0X2xlbiAtIGhvc3RsZW4gLTFdID09ICcuJykpCisJCQkJbWF0Y2hsZW4gPSBmb3JfcG9zIC0gdmFsdWU7CisJCQllbHNlCisJCQkJbWF0Y2hsZW4gPSAtMTsKKwkJfQorCQlpZiAoMCA8PSBtYXRjaGxlbikgeworCQkJLyogY29yZS5naXRwcm94eSA9IG5vbmUgZm9yIGtlcm5lbC5vcmcgKi8KKwkJCWlmIChtYXRjaGxlbiA9PSA0ICYmCisJCQkgICAgIW1lbWNtcCh2YWx1ZSwgIm5vbmUiLCA0KSkKKwkJCQltYXRjaGxlbiA9IDA7CisJCQlnaXRfcHJveHlfY29tbWFuZCA9IHhtZW1kdXB6KHZhbHVlLCBtYXRjaGxlbik7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3VzZV9wcm94eShjb25zdCBjaGFyICpob3N0KQoreworCWdpdF9wcm94eV9jb21tYW5kID0gZ2V0ZW52KCJHSVRfUFJPWFlfQ09NTUFORCIpOworCWdpdF9jb25maWcoZ2l0X3Byb3h5X2NvbW1hbmRfb3B0aW9ucywgKHZvaWQqKWhvc3QpOworCXJldHVybiAoZ2l0X3Byb3h5X2NvbW1hbmQgJiYgKmdpdF9wcm94eV9jb21tYW5kKTsKK30KKworc3RhdGljIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpnaXRfcHJveHlfY29ubmVjdChpbnQgZmRbMl0sIGNoYXIgKmhvc3QpCit7CisJY29uc3QgY2hhciAqcG9ydCA9IFNUUihERUZBVUxUX0dJVF9QT1JUKTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqcHJveHk7CisKKwlnZXRfaG9zdF9hbmRfcG9ydCgmaG9zdCwgJnBvcnQpOworCisJaWYgKGxvb2tzX2xpa2VfY29tbWFuZF9saW5lX29wdGlvbihob3N0KSkKKwkJZGllKF8oInN0cmFuZ2UgaG9zdG5hbWUgJyVzJyBibG9ja2VkIiksIGhvc3QpOworCWlmIChsb29rc19saWtlX2NvbW1hbmRfbGluZV9vcHRpb24ocG9ydCkpCisJCWRpZShfKCJzdHJhbmdlIHBvcnQgJyVzJyBibG9ja2VkIiksIHBvcnQpOworCisJcHJveHkgPSB4bWFsbG9jKHNpemVvZigqcHJveHkpKTsKKwljaGlsZF9wcm9jZXNzX2luaXQocHJveHkpOworCWFyZ3ZfYXJyYXlfcHVzaCgmcHJveHktPmFyZ3MsIGdpdF9wcm94eV9jb21tYW5kKTsKKwlhcmd2X2FycmF5X3B1c2goJnByb3h5LT5hcmdzLCBob3N0KTsKKwlhcmd2X2FycmF5X3B1c2goJnByb3h5LT5hcmdzLCBwb3J0KTsKKwlwcm94eS0+aW4gPSAtMTsKKwlwcm94eS0+b3V0ID0gLTE7CisJaWYgKHN0YXJ0X2NvbW1hbmQocHJveHkpKQorCQlkaWUoXygiY2Fubm90IHN0YXJ0IHByb3h5ICVzIiksIGdpdF9wcm94eV9jb21tYW5kKTsKKwlmZFswXSA9IHByb3h5LT5vdXQ7IC8qIHJlYWQgZnJvbSBwcm94eSBzdGRvdXQgKi8KKwlmZFsxXSA9IHByb3h5LT5pbjsgIC8qIHdyaXRlIHRvIHByb3h5IHN0ZGluICovCisJcmV0dXJuIHByb3h5OworfQorCitzdGF0aWMgY2hhciAqZ2V0X3BvcnQoY2hhciAqaG9zdCkKK3sKKwljaGFyICplbmQ7CisJY2hhciAqcCA9IHN0cmNocihob3N0LCAnOicpOworCisJaWYgKHApIHsKKwkJbG9uZyBwb3J0ID0gc3RydG9sKHAgKyAxLCAmZW5kLCAxMCk7CisJCWlmIChlbmQgIT0gcCArIDEgJiYgKmVuZCA9PSAnXDAnICYmIDAgPD0gcG9ydCAmJiBwb3J0IDwgNjU1MzYpIHsKKwkJCSpwID0gJ1wwJzsKKwkJCXJldHVybiBwKzE7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEV4dHJhY3QgcHJvdG9jb2wgYW5kIHJlbGV2YW50IHBhcnRzIGZyb20gdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIFVSTC4KKyAqIFRoZSBjYWxsZXIgbXVzdCBmcmVlKCkgdGhlIHJldHVybmVkIHN0cmluZ3MuCisgKi8KK3N0YXRpYyBlbnVtIHByb3RvY29sIHBhcnNlX2Nvbm5lY3RfdXJsKGNvbnN0IGNoYXIgKnVybF9vcmlnLCBjaGFyICoqcmV0X2hvc3QsCisJCQkJICAgICAgIGNoYXIgKipyZXRfcGF0aCkKK3sKKwljaGFyICp1cmw7CisJY2hhciAqaG9zdCwgKnBhdGg7CisJY2hhciAqZW5kOworCWludCBzZXBhcmF0b3IgPSAnLyc7CisJZW51bSBwcm90b2NvbCBwcm90b2NvbCA9IFBST1RPX0xPQ0FMOworCisJaWYgKGlzX3VybCh1cmxfb3JpZykpCisJCXVybCA9IHVybF9kZWNvZGUodXJsX29yaWcpOworCWVsc2UKKwkJdXJsID0geHN0cmR1cCh1cmxfb3JpZyk7CisKKwlob3N0ID0gc3Ryc3RyKHVybCwgIjovLyIpOworCWlmIChob3N0KSB7CisJCSpob3N0ID0gJ1wwJzsKKwkJcHJvdG9jb2wgPSBnZXRfcHJvdG9jb2wodXJsKTsKKwkJaG9zdCArPSAzOworCX0gZWxzZSB7CisJCWhvc3QgPSB1cmw7CisJCWlmICghdXJsX2lzX2xvY2FsX25vdF9zc2godXJsKSkgeworCQkJcHJvdG9jb2wgPSBQUk9UT19TU0g7CisJCQlzZXBhcmF0b3IgPSAnOic7CisJCX0KKwl9CisKKwkvKgorCSAqIERvbid0IGRvIGRlc3RydWN0aXZlIHRyYW5zZm9ybXMgYXMgcHJvdG9jb2wgY29kZSBkb2VzCisJICogJ1tdJyB1bndyYXBwaW5nIGluIGdldF9ob3N0X2FuZF9wb3J0KCkKKwkgKi8KKwllbmQgPSBob3N0X2VuZCgmaG9zdCwgMCk7CisKKwlpZiAocHJvdG9jb2wgPT0gUFJPVE9fTE9DQUwpCisJCXBhdGggPSBlbmQ7CisJZWxzZSBpZiAocHJvdG9jb2wgPT0gUFJPVE9fRklMRSAmJiAqaG9zdCAhPSAnLycgJiYKKwkJICFoYXNfZG9zX2RyaXZlX3ByZWZpeChob3N0KSAmJgorCQkgb2Zmc2V0XzFzdF9jb21wb25lbnQoaG9zdCAtIDIpID4gMSkKKwkJcGF0aCA9IGhvc3QgLSAyOyAvKiBpbmNsdWRlIHRoZSBsZWFkaW5nICIvLyIgKi8KKwllbHNlIGlmIChwcm90b2NvbCA9PSBQUk9UT19GSUxFICYmIGhhc19kb3NfZHJpdmVfcHJlZml4KGVuZCkpCisJCXBhdGggPSBlbmQ7IC8qICJmaWxlOi8vJChwd2QpIiBtYXkgYmUgImZpbGU6Ly9DOi9wcm9qZWN0cy9yZXBvIiAqLworCWVsc2UKKwkJcGF0aCA9IHN0cmNocihlbmQsIHNlcGFyYXRvcik7CisKKwlpZiAoIXBhdGggfHwgISpwYXRoKQorCQlkaWUoXygibm8gcGF0aCBzcGVjaWZpZWQ7IHNlZSAnZ2l0IGhlbHAgcHVsbCcgZm9yIHZhbGlkIHVybCBzeW50YXgiKSk7CisKKwkvKgorCSAqIG51bGwtdGVybWluYXRlIGhvc3RuYW1lIGFuZCBwb2ludCBwYXRoIHRvIH4gZm9yIFVSTCdzIGxpa2UgdGhpczoKKwkgKiAgICBzc2g6Ly9ob3N0Lnh6L351c2VyL3JlcG8KKwkgKi8KKworCWVuZCA9IHBhdGg7IC8qIE5lZWQgdG8gXDAgdGVybWluYXRlIGhvc3QgaGVyZSAqLworCWlmIChzZXBhcmF0b3IgPT0gJzonKQorCQlwYXRoKys7IC8qIHBhdGggc3RhcnRzIGFmdGVyICc6JyAqLworCWlmIChwcm90b2NvbCA9PSBQUk9UT19HSVQgfHwgcHJvdG9jb2wgPT0gUFJPVE9fU1NIKSB7CisJCWlmIChwYXRoWzFdID09ICd+JykKKwkJCXBhdGgrKzsKKwl9CisKKwlwYXRoID0geHN0cmR1cChwYXRoKTsKKwkqZW5kID0gJ1wwJzsKKworCSpyZXRfaG9zdCA9IHhzdHJkdXAoaG9zdCk7CisJKnJldF9wYXRoID0gcGF0aDsKKwlmcmVlKHVybCk7CisJcmV0dXJuIHByb3RvY29sOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3NzaF9jb21tYW5kKHZvaWQpCit7CisJY29uc3QgY2hhciAqc3NoOworCisJaWYgKChzc2ggPSBnZXRlbnYoIkdJVF9TU0hfQ09NTUFORCIpKSkKKwkJcmV0dXJuIHNzaDsKKworCWlmICghZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KCJjb3JlLnNzaGNvbW1hbmQiLCAmc3NoKSkKKwkJcmV0dXJuIHNzaDsKKworCXJldHVybiBOVUxMOworfQorCitlbnVtIHNzaF92YXJpYW50IHsKKwlWQVJJQU5UX0FVVE8sCisJVkFSSUFOVF9TSU1QTEUsCisJVkFSSUFOVF9TU0gsCisJVkFSSUFOVF9QTElOSywKKwlWQVJJQU5UX1BVVFRZLAorCVZBUklBTlRfVE9SVE9JU0VQTElOSywKK307CisKK3N0YXRpYyB2b2lkIG92ZXJyaWRlX3NzaF92YXJpYW50KGVudW0gc3NoX3ZhcmlhbnQgKnNzaF92YXJpYW50KQoreworCWNvbnN0IGNoYXIgKnZhcmlhbnQgPSBnZXRlbnYoIkdJVF9TU0hfVkFSSUFOVCIpOworCisJaWYgKCF2YXJpYW50ICYmIGdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdCgic3NoLnZhcmlhbnQiLCAmdmFyaWFudCkpCisJCXJldHVybjsKKworCWlmICghc3RyY21wKHZhcmlhbnQsICJhdXRvIikpCisJCSpzc2hfdmFyaWFudCA9IFZBUklBTlRfQVVUTzsKKwllbHNlIGlmICghc3RyY21wKHZhcmlhbnQsICJwbGluayIpKQorCQkqc3NoX3ZhcmlhbnQgPSBWQVJJQU5UX1BMSU5LOworCWVsc2UgaWYgKCFzdHJjbXAodmFyaWFudCwgInB1dHR5IikpCisJCSpzc2hfdmFyaWFudCA9IFZBUklBTlRfUFVUVFk7CisJZWxzZSBpZiAoIXN0cmNtcCh2YXJpYW50LCAidG9ydG9pc2VwbGluayIpKQorCQkqc3NoX3ZhcmlhbnQgPSBWQVJJQU5UX1RPUlRPSVNFUExJTks7CisJZWxzZSBpZiAoIXN0cmNtcCh2YXJpYW50LCAic2ltcGxlIikpCisJCSpzc2hfdmFyaWFudCA9IFZBUklBTlRfU0lNUExFOworCWVsc2UKKwkJKnNzaF92YXJpYW50ID0gVkFSSUFOVF9TU0g7Cit9CisKK3N0YXRpYyBlbnVtIHNzaF92YXJpYW50IGRldGVybWluZV9zc2hfdmFyaWFudChjb25zdCBjaGFyICpzc2hfY29tbWFuZCwKKwkJCQkJICAgICAgaW50IGlzX2NtZGxpbmUpCit7CisJZW51bSBzc2hfdmFyaWFudCBzc2hfdmFyaWFudCA9IFZBUklBTlRfQVVUTzsKKwljb25zdCBjaGFyICp2YXJpYW50OworCWNoYXIgKnAgPSBOVUxMOworCisJb3ZlcnJpZGVfc3NoX3ZhcmlhbnQoJnNzaF92YXJpYW50KTsKKworCWlmIChzc2hfdmFyaWFudCAhPSBWQVJJQU5UX0FVVE8pCisJCXJldHVybiBzc2hfdmFyaWFudDsKKworCWlmICghaXNfY21kbGluZSkgeworCQlwID0geHN0cmR1cChzc2hfY29tbWFuZCk7CisJCXZhcmlhbnQgPSBiYXNlbmFtZShwKTsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyICoqc3NoX2FyZ3Y7CisKKwkJcCA9IHhzdHJkdXAoc3NoX2NvbW1hbmQpOworCQlpZiAoc3BsaXRfY21kbGluZShwLCAmc3NoX2FyZ3YpID4gMCkgeworCQkJdmFyaWFudCA9IGJhc2VuYW1lKChjaGFyICopc3NoX2FyZ3ZbMF0pOworCQkJLyoKKwkJCSAqIEF0IHRoaXMgcG9pbnQsIHZhcmlhbnQgcG9pbnRzIGludG8gdGhlIGJ1ZmZlcgorCQkJICogcmVmZXJlbmNlZCBieSBwLCBoZW5jZSB3ZSBkbyBub3QgbmVlZCBzc2hfYXJndgorCQkJICogYW55IGxvbmdlci4KKwkJCSAqLworCQkJZnJlZShzc2hfYXJndik7CisJCX0gZWxzZSB7CisJCQlmcmVlKHApOworCQkJcmV0dXJuIHNzaF92YXJpYW50OworCQl9CisJfQorCisJaWYgKCFzdHJjYXNlY21wKHZhcmlhbnQsICJzc2giKSB8fAorCSAgICAhc3RyY2FzZWNtcCh2YXJpYW50LCAic3NoLmV4ZSIpKQorCQlzc2hfdmFyaWFudCA9IFZBUklBTlRfU1NIOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKHZhcmlhbnQsICJwbGluayIpIHx8CisJCSAhc3RyY2FzZWNtcCh2YXJpYW50LCAicGxpbmsuZXhlIikpCisJCXNzaF92YXJpYW50ID0gVkFSSUFOVF9QTElOSzsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2YXJpYW50LCAidG9ydG9pc2VwbGluayIpIHx8CisJCSAhc3RyY2FzZWNtcCh2YXJpYW50LCAidG9ydG9pc2VwbGluay5leGUiKSkKKwkJc3NoX3ZhcmlhbnQgPSBWQVJJQU5UX1RPUlRPSVNFUExJTks7CisKKwlmcmVlKHApOworCXJldHVybiBzc2hfdmFyaWFudDsKK30KKworLyoKKyAqIE9wZW4gYSBjb25uZWN0aW9uIHVzaW5nIEdpdCdzIG5hdGl2ZSBwcm90b2NvbC4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIGhvc3RhbmRwb3J0LCBidXQgdGhpcyBmdW5jdGlvbiBtYXkKKyAqIG1vZGlmeSBpdCAoZm9yIGV4YW1wbGUsIHRvIHRydW5jYXRlIGl0IHRvIHJlbW92ZSB0aGUgcG9ydCBwYXJ0KS4KKyAqLworc3RhdGljIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpnaXRfY29ubmVjdF9naXQoaW50IGZkWzJdLCBjaGFyICpob3N0YW5kcG9ydCwKKwkJCQkJICAgICBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwcm9nLAorCQkJCQkgICAgIGVudW0gcHJvdG9jb2xfdmVyc2lvbiB2ZXJzaW9uLAorCQkJCQkgICAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubjsKKwlzdHJ1Y3Qgc3RyYnVmIHJlcXVlc3QgPSBTVFJCVUZfSU5JVDsKKwkvKgorCSAqIFNldCB1cCB2aXJ0dWFsIGhvc3QgaW5mb3JtYXRpb24gYmFzZWQgb24gd2hlcmUgd2Ugd2lsbAorCSAqIGNvbm5lY3QsIHVubGVzcyB0aGUgdXNlciBoYXMgb3ZlcnJpZGRlbiB1cyBpbgorCSAqIHRoZSBlbnZpcm9ubWVudC4KKwkgKi8KKwljaGFyICp0YXJnZXRfaG9zdCA9IGdldGVudigiR0lUX09WRVJSSURFX1ZJUlRVQUxfSE9TVCIpOworCWlmICh0YXJnZXRfaG9zdCkKKwkJdGFyZ2V0X2hvc3QgPSB4c3RyZHVwKHRhcmdldF9ob3N0KTsKKwllbHNlCisJCXRhcmdldF9ob3N0ID0geHN0cmR1cChob3N0YW5kcG9ydCk7CisKKwl0cmFuc3BvcnRfY2hlY2tfYWxsb3dlZCgiZ2l0Iik7CisKKwkvKgorCSAqIFRoZXNlIHVuZGVybHlpbmcgY29ubmVjdGlvbiBjb21tYW5kcyBkaWUoKSBpZiB0aGV5CisJICogY2Fubm90IGNvbm5lY3QuCisJICovCisJaWYgKGdpdF91c2VfcHJveHkoaG9zdGFuZHBvcnQpKQorCQljb25uID0gZ2l0X3Byb3h5X2Nvbm5lY3QoZmQsIGhvc3RhbmRwb3J0KTsKKwllbHNlCisJCWNvbm4gPSBnaXRfdGNwX2Nvbm5lY3QoZmQsIGhvc3RhbmRwb3J0LCBmbGFncyk7CisJLyoKKwkgKiBTZXBhcmF0ZSBvcmlnaW5hbCBwcm90b2NvbCBjb21wb25lbnRzIHByb2cgYW5kIHBhdGgKKwkgKiBmcm9tIGV4dGVuZGVkIGhvc3QgaGVhZGVyIHdpdGggYSBOVUwgYnl0ZS4KKwkgKgorCSAqIE5vdGU6IERvIG5vdCBhZGQgYW55IG90aGVyIGhlYWRlcnMgaGVyZSEgIERvaW5nIHNvCisJICogd2lsbCBjYXVzZSBvbGRlciBnaXQtZGFlbW9uIHNlcnZlcnMgdG8gY3Jhc2guCisJICovCisJc3RyYnVmX2FkZGYoJnJlcXVlc3QsCisJCSAgICAiJXMgJXMlY2hvc3Q9JXMlYyIsCisJCSAgICBwcm9nLCBwYXRoLCAwLAorCQkgICAgdGFyZ2V0X2hvc3QsIDApOworCisJLyogSWYgdXNpbmcgYSBuZXcgdmVyc2lvbiBwdXQgdGhhdCBzdHVmZiBoZXJlIGFmdGVyIGEgc2Vjb25kIG51bGwgYnl0ZSAqLworCWlmICh2ZXJzaW9uID4gMCkgeworCQlzdHJidWZfYWRkY2goJnJlcXVlc3QsICdcMCcpOworCQlzdHJidWZfYWRkZigmcmVxdWVzdCwgInZlcnNpb249JWQlYyIsCisJCQkgICAgdmVyc2lvbiwgJ1wwJyk7CisJfQorCisJcGFja2V0X3dyaXRlKGZkWzFdLCByZXF1ZXN0LmJ1ZiwgcmVxdWVzdC5sZW4pOworCisJZnJlZSh0YXJnZXRfaG9zdCk7CisJc3RyYnVmX3JlbGVhc2UoJnJlcXVlc3QpOworCXJldHVybiBjb25uOworfQorCisvKgorICogQXBwZW5kIHRoZSBhcHByb3ByaWF0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYGVudmAgYW5kIG9wdGlvbnMgdG8KKyAqIGBhcmdzYCBmb3IgcnVubmluZyBzc2ggaW4gR2l0J3MgU1NILXR1bm5lbGVkIHRyYW5zcG9ydC4KKyAqLworc3RhdGljIHZvaWQgcHVzaF9zc2hfb3B0aW9ucyhzdHJ1Y3QgYXJndl9hcnJheSAqYXJncywgc3RydWN0IGFyZ3ZfYXJyYXkgKmVudiwKKwkJCSAgICAgZW51bSBzc2hfdmFyaWFudCB2YXJpYW50LCBjb25zdCBjaGFyICpwb3J0LAorCQkJICAgICBlbnVtIHByb3RvY29sX3ZlcnNpb24gdmVyc2lvbiwgaW50IGZsYWdzKQoreworCWlmICh2YXJpYW50ID09IFZBUklBTlRfU1NIICYmCisJICAgIHZlcnNpb24gPiAwKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaChhcmdzLCAiLW8iKTsKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3MsICJTZW5kRW52PSIgR0lUX1BST1RPQ09MX0VOVklST05NRU5UKTsKKwkJYXJndl9hcnJheV9wdXNoZihlbnYsIEdJVF9QUk9UT0NPTF9FTlZJUk9OTUVOVCAiPXZlcnNpb249JWQiLAorCQkJCSB2ZXJzaW9uKTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBDT05ORUNUX0lQVjQpIHsKKwkJc3dpdGNoICh2YXJpYW50KSB7CisJCWNhc2UgVkFSSUFOVF9BVVRPOgorCQkJQlVHKCJWQVJJQU5UX0FVVE8gcGFzc2VkIHRvIHB1c2hfc3NoX29wdGlvbnMiKTsKKwkJY2FzZSBWQVJJQU5UX1NJTVBMRToKKwkJCWRpZShfKCJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IC00IikpOworCQljYXNlIFZBUklBTlRfU1NIOgorCQljYXNlIFZBUklBTlRfUExJTks6CisJCWNhc2UgVkFSSUFOVF9QVVRUWToKKwkJY2FzZSBWQVJJQU5UX1RPUlRPSVNFUExJTks6CisJCQlhcmd2X2FycmF5X3B1c2goYXJncywgIi00Iik7CisJCX0KKwl9IGVsc2UgaWYgKGZsYWdzICYgQ09OTkVDVF9JUFY2KSB7CisJCXN3aXRjaCAodmFyaWFudCkgeworCQljYXNlIFZBUklBTlRfQVVUTzoKKwkJCUJVRygiVkFSSUFOVF9BVVRPIHBhc3NlZCB0byBwdXNoX3NzaF9vcHRpb25zIik7CisJCWNhc2UgVkFSSUFOVF9TSU1QTEU6CisJCQlkaWUoXygic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNiIpKTsKKwkJY2FzZSBWQVJJQU5UX1NTSDoKKwkJY2FzZSBWQVJJQU5UX1BMSU5LOgorCQljYXNlIFZBUklBTlRfUFVUVFk6CisJCWNhc2UgVkFSSUFOVF9UT1JUT0lTRVBMSU5LOgorCQkJYXJndl9hcnJheV9wdXNoKGFyZ3MsICItNiIpOworCQl9CisJfQorCisJaWYgKHZhcmlhbnQgPT0gVkFSSUFOVF9UT1JUT0lTRVBMSU5LKQorCQlhcmd2X2FycmF5X3B1c2goYXJncywgIi1iYXRjaCIpOworCisJaWYgKHBvcnQpIHsKKwkJc3dpdGNoICh2YXJpYW50KSB7CisJCWNhc2UgVkFSSUFOVF9BVVRPOgorCQkJQlVHKCJWQVJJQU5UX0FVVE8gcGFzc2VkIHRvIHB1c2hfc3NoX29wdGlvbnMiKTsKKwkJY2FzZSBWQVJJQU5UX1NJTVBMRToKKwkJCWRpZShfKCJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgcG9ydCIpKTsKKwkJY2FzZSBWQVJJQU5UX1NTSDoKKwkJCWFyZ3ZfYXJyYXlfcHVzaChhcmdzLCAiLXAiKTsKKwkJCWJyZWFrOworCQljYXNlIFZBUklBTlRfUExJTks6CisJCWNhc2UgVkFSSUFOVF9QVVRUWToKKwkJY2FzZSBWQVJJQU5UX1RPUlRPSVNFUExJTks6CisJCQlhcmd2X2FycmF5X3B1c2goYXJncywgIi1QIik7CisJCX0KKworCQlhcmd2X2FycmF5X3B1c2goYXJncywgcG9ydCk7CisJfQorfQorCisvKiBQcmVwYXJlIGEgY2hpbGRfcHJvY2VzcyBmb3IgdXNlIGJ5IEdpdCdzIFNTSC10dW5uZWxlZCB0cmFuc3BvcnQuICovCitzdGF0aWMgdm9pZCBmaWxsX3NzaF9hcmdzKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uLCBjb25zdCBjaGFyICpzc2hfaG9zdCwKKwkJCSAgY29uc3QgY2hhciAqcG9ydCwgZW51bSBwcm90b2NvbF92ZXJzaW9uIHZlcnNpb24sCisJCQkgIGludCBmbGFncykKK3sKKwljb25zdCBjaGFyICpzc2g7CisJZW51bSBzc2hfdmFyaWFudCB2YXJpYW50OworCisJaWYgKGxvb2tzX2xpa2VfY29tbWFuZF9saW5lX29wdGlvbihzc2hfaG9zdCkpCisJCWRpZShfKCJzdHJhbmdlIGhvc3RuYW1lICclcycgYmxvY2tlZCIpLCBzc2hfaG9zdCk7CisKKwlzc2ggPSBnZXRfc3NoX2NvbW1hbmQoKTsKKwlpZiAoc3NoKSB7CisJCXZhcmlhbnQgPSBkZXRlcm1pbmVfc3NoX3ZhcmlhbnQoc3NoLCAxKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBHSVRfU1NIIGlzIHRoZSBuby1zaGVsbCB2ZXJzaW9uIG9mCisJCSAqIEdJVF9TU0hfQ09NTUFORCAoYW5kIG11c3QgcmVtYWluIHNvIGZvcgorCQkgKiBoaXN0b3JpY2FsIGNvbXBhdGliaWxpdHkpLgorCQkgKi8KKwkJY29ubi0+dXNlX3NoZWxsID0gMDsKKworCQlzc2ggPSBnZXRlbnYoIkdJVF9TU0giKTsKKwkJaWYgKCFzc2gpCisJCQlzc2ggPSAic3NoIjsKKwkJdmFyaWFudCA9IGRldGVybWluZV9zc2hfdmFyaWFudChzc2gsIDApOworCX0KKworCWlmICh2YXJpYW50ID09IFZBUklBTlRfQVVUTykgeworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBkZXRlY3QgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwkJZGV0ZWN0LnVzZV9zaGVsbCA9IGNvbm4tPnVzZV9zaGVsbDsKKwkJZGV0ZWN0Lm5vX3N0ZGluID0gZGV0ZWN0Lm5vX3N0ZG91dCA9IGRldGVjdC5ub19zdGRlcnIgPSAxOworCisJCWFyZ3ZfYXJyYXlfcHVzaCgmZGV0ZWN0LmFyZ3MsIHNzaCk7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmZGV0ZWN0LmFyZ3MsICItRyIpOworCQlwdXNoX3NzaF9vcHRpb25zKCZkZXRlY3QuYXJncywgJmRldGVjdC5lbnZfYXJyYXksCisJCQkJIFZBUklBTlRfU1NILCBwb3J0LCB2ZXJzaW9uLCBmbGFncyk7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmZGV0ZWN0LmFyZ3MsIHNzaF9ob3N0KTsKKworCQl2YXJpYW50ID0gcnVuX2NvbW1hbmQoJmRldGVjdCkgPyBWQVJJQU5UX1NJTVBMRSA6IFZBUklBTlRfU1NIOworCX0KKworCWFyZ3ZfYXJyYXlfcHVzaCgmY29ubi0+YXJncywgc3NoKTsKKwlwdXNoX3NzaF9vcHRpb25zKCZjb25uLT5hcmdzLCAmY29ubi0+ZW52X2FycmF5LCB2YXJpYW50LCBwb3J0LCB2ZXJzaW9uLCBmbGFncyk7CisJYXJndl9hcnJheV9wdXNoKCZjb25uLT5hcmdzLCBzc2hfaG9zdCk7Cit9CisKKy8qCisgKiBUaGlzIHJldHVybnMgdGhlIGR1bW15IGNoaWxkX3Byb2Nlc3MgYG5vX2ZvcmtgIGlmIHRoZSB0cmFuc3BvcnQgcHJvdG9jb2wKKyAqIGRvZXMgbm90IG5lZWQgZm9yaygyKSwgb3IgYSBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBvYmplY3QgaWYgaXQgZG9lcy4gIE9uY2UKKyAqIGRvbmUsIGZpbmlzaCB0aGUgY29ubmVjdGlvbiB3aXRoIGZpbmlzaF9jb25uZWN0KCkgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQKKyAqIGZyb20gdGhpcyBmdW5jdGlvbiAoaXQgaXMgc2FmZSB0byBjYWxsIGZpbmlzaF9jb25uZWN0KCkgd2l0aCBOVUxMIHRvCisgKiBzdXBwb3J0IHRoZSBmb3JtZXIgY2FzZSkuCisgKgorICogSWYgaXQgcmV0dXJucywgdGhlIGNvbm5lY3QgaXMgc3VjY2Vzc2Z1bDsgaXQganVzdCBkaWVzIG9uIGVycm9ycyAodGhpcworICogd2lsbCBob3BlZnVsbHkgYmUgY2hhbmdlZCBpbiBhIGxpYmlmaWNhdGlvbiBlZmZvcnQsIHRvIHJldHVybiBOVUxMIHdoZW4KKyAqIHRoZSBjb25uZWN0aW9uIGZhaWxlZCkuCisgKi8KK3N0cnVjdCBjaGlsZF9wcm9jZXNzICpnaXRfY29ubmVjdChpbnQgZmRbMl0sIGNvbnN0IGNoYXIgKnVybCwKKwkJCQkgIGNvbnN0IGNoYXIgKnByb2csIGludCBmbGFncykKK3sKKwljaGFyICpob3N0YW5kcG9ydCwgKnBhdGg7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm47CisJZW51bSBwcm90b2NvbCBwcm90b2NvbDsKKwllbnVtIHByb3RvY29sX3ZlcnNpb24gdmVyc2lvbiA9IGdldF9wcm90b2NvbF92ZXJzaW9uX2NvbmZpZygpOworCisJLyoKKwkgKiBORUVEU1dPUks6IElmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHByb3RvY29sIHYyIGFuZCB3ZSBhcmUgcGxhbm5pbmcKKwkgKiB0byBwZXJmb3JtIGEgcHVzaCwgdGhlbiBmYWxsYmFjayB0byB2MCBzaW5jZSB0aGUgY2xpZW50IGRvZXNuJ3Qga25vdworCSAqIGhvdyB0byBwdXNoIHlldCB1c2luZyB2Mi4KKwkgKi8KKwlpZiAodmVyc2lvbiA9PSBwcm90b2NvbF92MiAmJiAhc3RyY21wKCJnaXQtcmVjZWl2ZS1wYWNrIiwgcHJvZykpCisJCXZlcnNpb24gPSBwcm90b2NvbF92MDsKKworCS8qIFdpdGhvdXQgdGhpcyB3ZSBjYW5ub3QgcmVseSBvbiB3YWl0cGlkKCkgdG8gdGVsbAorCSAqIHdoYXQgaGFwcGVuZWQgdG8gb3VyIGNoaWxkcmVuLgorCSAqLworCXNpZ25hbChTSUdDSExELCBTSUdfREZMKTsKKworCXByb3RvY29sID0gcGFyc2VfY29ubmVjdF91cmwodXJsLCAmaG9zdGFuZHBvcnQsICZwYXRoKTsKKwlpZiAoKGZsYWdzICYgQ09OTkVDVF9ESUFHX1VSTCkgJiYgKHByb3RvY29sICE9IFBST1RPX1NTSCkpIHsKKwkJcHJpbnRmKCJEaWFnOiB1cmw9JXNcbiIsIHVybCA/IHVybCA6ICJOVUxMIik7CisJCXByaW50ZigiRGlhZzogcHJvdG9jb2w9JXNcbiIsIHByb3RfbmFtZShwcm90b2NvbCkpOworCQlwcmludGYoIkRpYWc6IGhvc3RhbmRwb3J0PSVzXG4iLCBob3N0YW5kcG9ydCA/IGhvc3RhbmRwb3J0IDogIk5VTEwiKTsKKwkJcHJpbnRmKCJEaWFnOiBwYXRoPSVzXG4iLCBwYXRoID8gcGF0aCA6ICJOVUxMIik7CisJCWNvbm4gPSBOVUxMOworCX0gZWxzZSBpZiAocHJvdG9jb2wgPT0gUFJPVE9fR0lUKSB7CisJCWNvbm4gPSBnaXRfY29ubmVjdF9naXQoZmQsIGhvc3RhbmRwb3J0LCBwYXRoLCBwcm9nLCB2ZXJzaW9uLCBmbGFncyk7CisJCWNvbm4tPnRyYWNlMl9jaGlsZF9jbGFzcyA9ICJ0cmFuc3BvcnQvZ2l0IjsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIGNtZCA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICpjb25zdCAqdmFyOworCisJCWNvbm4gPSB4bWFsbG9jKHNpemVvZigqY29ubikpOworCQljaGlsZF9wcm9jZXNzX2luaXQoY29ubik7CisKKwkJaWYgKGxvb2tzX2xpa2VfY29tbWFuZF9saW5lX29wdGlvbihwYXRoKSkKKwkJCWRpZShfKCJzdHJhbmdlIHBhdGhuYW1lICclcycgYmxvY2tlZCIpLCBwYXRoKTsKKworCQlzdHJidWZfYWRkc3RyKCZjbWQsIHByb2cpOworCQlzdHJidWZfYWRkY2goJmNtZCwgJyAnKTsKKwkJc3FfcXVvdGVfYnVmKCZjbWQsIHBhdGgpOworCisJCS8qIHJlbW92ZSByZXBvLWxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBlbnZpcm9ubWVudCAqLworCQlmb3IgKHZhciA9IGxvY2FsX3JlcG9fZW52OyAqdmFyOyB2YXIrKykKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY29ubi0+ZW52X2FycmF5LCAqdmFyKTsKKworCQljb25uLT51c2Vfc2hlbGwgPSAxOworCQljb25uLT5pbiA9IGNvbm4tPm91dCA9IC0xOworCQlpZiAocHJvdG9jb2wgPT0gUFJPVE9fU1NIKSB7CisJCQljaGFyICpzc2hfaG9zdCA9IGhvc3RhbmRwb3J0OworCQkJY29uc3QgY2hhciAqcG9ydCA9IE5VTEw7CisJCQl0cmFuc3BvcnRfY2hlY2tfYWxsb3dlZCgic3NoIik7CisJCQlnZXRfaG9zdF9hbmRfcG9ydCgmc3NoX2hvc3QsICZwb3J0KTsKKworCQkJaWYgKCFwb3J0KQorCQkJCXBvcnQgPSBnZXRfcG9ydChzc2hfaG9zdCk7CisKKwkJCWlmIChmbGFncyAmIENPTk5FQ1RfRElBR19VUkwpIHsKKwkJCQlwcmludGYoIkRpYWc6IHVybD0lc1xuIiwgdXJsID8gdXJsIDogIk5VTEwiKTsKKwkJCQlwcmludGYoIkRpYWc6IHByb3RvY29sPSVzXG4iLCBwcm90X25hbWUocHJvdG9jb2wpKTsKKwkJCQlwcmludGYoIkRpYWc6IHVzZXJhbmRob3N0PSVzXG4iLCBzc2hfaG9zdCA/IHNzaF9ob3N0IDogIk5VTEwiKTsKKwkJCQlwcmludGYoIkRpYWc6IHBvcnQ9JXNcbiIsIHBvcnQgPyBwb3J0IDogIk5PTkUiKTsKKwkJCQlwcmludGYoIkRpYWc6IHBhdGg9JXNcbiIsIHBhdGggPyBwYXRoIDogIk5VTEwiKTsKKworCQkJCWZyZWUoaG9zdGFuZHBvcnQpOworCQkJCWZyZWUocGF0aCk7CisJCQkJZnJlZShjb25uKTsKKwkJCQlzdHJidWZfcmVsZWFzZSgmY21kKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCWNvbm4tPnRyYWNlMl9jaGlsZF9jbGFzcyA9ICJ0cmFuc3BvcnQvc3NoIjsKKwkJCWZpbGxfc3NoX2FyZ3MoY29ubiwgc3NoX2hvc3QsIHBvcnQsIHZlcnNpb24sIGZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCXRyYW5zcG9ydF9jaGVja19hbGxvd2VkKCJmaWxlIik7CisJCQljb25uLT50cmFjZTJfY2hpbGRfY2xhc3MgPSAidHJhbnNwb3J0L2ZpbGUiOworCQkJaWYgKHZlcnNpb24gPiAwKSB7CisJCQkJYXJndl9hcnJheV9wdXNoZigmY29ubi0+ZW52X2FycmF5LCBHSVRfUFJPVE9DT0xfRU5WSVJPTk1FTlQgIj12ZXJzaW9uPSVkIiwKKwkJCQkJCSB2ZXJzaW9uKTsKKwkJCX0KKwkJfQorCQlhcmd2X2FycmF5X3B1c2goJmNvbm4tPmFyZ3MsIGNtZC5idWYpOworCisJCWlmIChzdGFydF9jb21tYW5kKGNvbm4pKQorCQkJZGllKF8oInVuYWJsZSB0byBmb3JrIikpOworCisJCWZkWzBdID0gY29ubi0+b3V0OyAvKiByZWFkIGZyb20gY2hpbGQncyBzdGRvdXQgKi8KKwkJZmRbMV0gPSBjb25uLT5pbjsgIC8qIHdyaXRlIHRvIGNoaWxkJ3Mgc3RkaW4gKi8KKwkJc3RyYnVmX3JlbGVhc2UoJmNtZCk7CisJfQorCWZyZWUoaG9zdGFuZHBvcnQpOworCWZyZWUocGF0aCk7CisJcmV0dXJuIGNvbm47Cit9CisKK2ludCBmaW5pc2hfY29ubmVjdChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubikKK3sKKwlpbnQgY29kZTsKKwlpZiAoIWNvbm4gfHwgZ2l0X2Nvbm5lY3Rpb25faXNfc29ja2V0KGNvbm4pKQorCQlyZXR1cm4gMDsKKworCWNvZGUgPSBmaW5pc2hfY29tbWFuZChjb25uKTsKKwlmcmVlKGNvbm4pOworCXJldHVybiBjb2RlOworfQpkaWZmIC0tZ2l0IGEvY29ubmVjdC5oIGIvY29ubmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMjM4MmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb25uZWN0LmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBDT05ORUNUX0gKKyNkZWZpbmUgQ09OTkVDVF9ICisKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorCisjZGVmaW5lIENPTk5FQ1RfVkVSQk9TRSAgICAgICAoMXUgPDwgMCkKKyNkZWZpbmUgQ09OTkVDVF9ESUFHX1VSTCAgICAgICgxdSA8PCAxKQorI2RlZmluZSBDT05ORUNUX0lQVjQgICAgICAgICAgKDF1IDw8IDIpCisjZGVmaW5lIENPTk5FQ1RfSVBWNiAgICAgICAgICAoMXUgPDwgMykKK3N0cnVjdCBjaGlsZF9wcm9jZXNzICpnaXRfY29ubmVjdChpbnQgZmRbMl0sIGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqcHJvZywgaW50IGZsYWdzKTsKK2ludCBmaW5pc2hfY29ubmVjdChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubik7CitpbnQgZ2l0X2Nvbm5lY3Rpb25faXNfc29ja2V0KHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uKTsKK2ludCBzZXJ2ZXJfc3VwcG9ydHMoY29uc3QgY2hhciAqZmVhdHVyZSk7CitpbnQgcGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGNvbnN0IGNoYXIgKmZlYXR1cmVzLCBjb25zdCBjaGFyICpmZWF0dXJlKTsKK2NvbnN0IGNoYXIgKnNlcnZlcl9mZWF0dXJlX3ZhbHVlKGNvbnN0IGNoYXIgKmZlYXR1cmUsIGludCAqbGVuX3JldCk7CitpbnQgdXJsX2lzX2xvY2FsX25vdF9zc2goY29uc3QgY2hhciAqdXJsKTsKKworc3RydWN0IHBhY2tldF9yZWFkZXI7CitlbnVtIHByb3RvY29sX3ZlcnNpb24gZGlzY292ZXJfdmVyc2lvbihzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVhZGVyKTsKKworaW50IHNlcnZlcl9zdXBwb3J0c192Mihjb25zdCBjaGFyICpjLCBpbnQgZGllX29uX2Vycm9yKTsKK2ludCBzZXJ2ZXJfc3VwcG9ydHNfZmVhdHVyZShjb25zdCBjaGFyICpjLCBjb25zdCBjaGFyICpmZWF0dXJlLAorCQkJICAgIGludCBkaWVfb25fZXJyb3IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Nvbm5lY3RlZC5jIGIvY29ubmVjdGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEzNWI3MQotLS0gL2Rldi9udWxsCisrKyBiL2Nvbm5lY3RlZC5jCkBAIC0wLDAgKzEsMTUwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAiY29ubmVjdGVkLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJwcm9taXNvci1yZW1vdGUuaCIKKworLyoKKyAqIElmIHdlIGZlZWQgYWxsIHRoZSBjb21taXRzIHdlIHdhbnQgdG8gdmVyaWZ5IHRvIHRoaXMgY29tbWFuZAorICoKKyAqICAkIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1zdGRpbiAtLW5vdCAtLWFsbAorICoKKyAqIGFuZCBpZiBpdCBkb2VzIG5vdCBlcnJvciBvdXQsIHRoYXQgbWVhbnMgZXZlcnl0aGluZyByZWFjaGFibGUgZnJvbQorICogdGhlc2UgY29tbWl0cyBsb2NhbGx5IGV4aXN0cyBhbmQgaXMgY29ubmVjdGVkIHRvIG91ciBleGlzdGluZyByZWZzLgorICogTm90ZSB0aGF0IHRoaXMgZG9lcyBfbm90XyB2YWxpZGF0ZSB0aGUgaW5kaXZpZHVhbCBvYmplY3RzLgorICoKKyAqIFJldHVybnMgMCBpZiBldmVyeXRoaW5nIGlzIGNvbm5lY3RlZCwgbm9uLXplcm8gb3RoZXJ3aXNlLgorICovCitpbnQgY2hlY2tfY29ubmVjdGVkKG9pZF9pdGVyYXRlX2ZuIGZuLCB2b2lkICpjYl9kYXRhLAorCQkgICAgc3RydWN0IGNoZWNrX2Nvbm5lY3RlZF9vcHRpb25zICpvcHQpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcmV2X2xpc3QgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGNoZWNrX2Nvbm5lY3RlZF9vcHRpb25zIGRlZmF1bHRzID0gQ0hFQ0tfQ09OTkVDVEVEX0lOSVQ7CisJY2hhciBjb21taXRbR0lUX01BWF9IRVhTWiArIDFdOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBlcnIgPSAwOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXdfcGFjayA9IE5VTEw7CisJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0OworCXNpemVfdCBiYXNlX2xlbjsKKwljb25zdCB1bnNpZ25lZCBoZXhzeiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6OworCisJaWYgKCFvcHQpCisJCW9wdCA9ICZkZWZhdWx0czsKKwl0cmFuc3BvcnQgPSBvcHQtPnRyYW5zcG9ydDsKKworCWlmIChmbihjYl9kYXRhLCAmb2lkKSkgeworCQlpZiAob3B0LT5lcnJfZmQpCisJCQljbG9zZShvcHQtPmVycl9mZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKHRyYW5zcG9ydCAmJiB0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMgJiYKKwkgICAgdHJhbnNwb3J0LT5zbWFydF9vcHRpb25zLT5zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkICYmCisJICAgIHRyYW5zcG9ydC0+cGFja19sb2NrZmlsZSAmJgorCSAgICBzdHJpcF9zdWZmaXgodHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlLCAiLmtlZXAiLCAmYmFzZV9sZW4pKSB7CisJCXN0cnVjdCBzdHJidWYgaWR4X2ZpbGUgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZCgmaWR4X2ZpbGUsIHRyYW5zcG9ydC0+cGFja19sb2NrZmlsZSwgYmFzZV9sZW4pOworCQlzdHJidWZfYWRkc3RyKCZpZHhfZmlsZSwgIi5pZHgiKTsKKwkJbmV3X3BhY2sgPSBhZGRfcGFja2VkX2dpdChpZHhfZmlsZS5idWYsIGlkeF9maWxlLmxlbiwgMSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZpZHhfZmlsZSk7CisJfQorCisJaWYgKGhhc19wcm9taXNvcl9yZW1vdGUoKSkgeworCQkvKgorCQkgKiBGb3IgcGFydGlhbCBjbG9uZXMsIHdlIGRvbid0IHdhbnQgdG8gaGF2ZSB0byBkbyBhIHJlZ3VsYXIKKwkJICogY29ubmVjdGl2aXR5IGNoZWNrIGJlY2F1c2Ugd2UgaGF2ZSB0byBlbnVtZXJhdGUgYW5kIGV4Y2x1ZGUKKwkJICogYWxsIHByb21pc29yIG9iamVjdHMgKHNsb3cpLCBhbmQgdGhlbiB0aGUgY29ubmVjdGl2aXR5IGNoZWNrCisJCSAqIGl0c2VsZiBiZWNvbWVzIGEgbm8tb3AgYmVjYXVzZSBpbiBhIHBhcnRpYWwgY2xvbmUgZXZlcnkKKwkJICogb2JqZWN0IGlzIGEgcHJvbWlzb3Igb2JqZWN0LiBJbnN0ZWFkLCBqdXN0IG1ha2Ugc3VyZSB3ZQorCQkgKiByZWNlaXZlZCwgaW4gYSBwcm9taXNvciBwYWNrZmlsZSwgdGhlIG9iamVjdHMgcG9pbnRlZCB0byBieQorCQkgKiBlYWNoIHdhbnRlZCByZWYuCisJCSAqCisJCSAqIEJlZm9yZSBjaGVja2luZyBmb3IgcHJvbWlzb3IgcGFja3MsIGJlIHN1cmUgd2UgaGF2ZSB0aGUKKwkJICogbGF0ZXN0IHBhY2stZmlsZXMgbG9hZGVkIGludG8gbWVtb3J5LgorCQkgKi8KKwkJcmVwcmVwYXJlX3BhY2tlZF9naXQodGhlX3JlcG9zaXRvcnkpOworCQlkbyB7CisJCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCQkJZm9yIChwID0gZ2V0X2FsbF9wYWNrcyh0aGVfcmVwb3NpdG9yeSk7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQkJaWYgKCFwLT5wYWNrX3Byb21pc29yKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoZmluZF9wYWNrX2VudHJ5X29uZShvaWQuaGFzaCwgcCkpCisJCQkJCWdvdG8gcHJvbWlzb3JfcGFja19mb3VuZDsKKwkJCX0KKwkJCS8qCisJCQkgKiBGYWxsYmFjayB0byByZXYtbGlzdCB3aXRoIG9pZCBhbmQgdGhlIHJlc3Qgb2YgdGhlCisJCQkgKiBvYmplY3QgSURzIHByb3ZpZGVkIGJ5IGZuLgorCQkJICovCisJCQlnb3RvIG5vX3Byb21pc29yX3BhY2tfZm91bmQ7Citwcm9taXNvcl9wYWNrX2ZvdW5kOgorCQkJOworCQl9IHdoaWxlICghZm4oY2JfZGF0YSwgJm9pZCkpOworCQlyZXR1cm4gMDsKKwl9CisKK25vX3Byb21pc29yX3BhY2tfZm91bmQ6CisJaWYgKG9wdC0+c2hhbGxvd19maWxlKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcmV2X2xpc3QuYXJncywgIi0tc2hhbGxvdy1maWxlIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcmV2X2xpc3QuYXJncywgb3B0LT5zaGFsbG93X2ZpbGUpOworCX0KKwlhcmd2X2FycmF5X3B1c2goJnJldl9saXN0LmFyZ3MsInJldi1saXN0Iik7CisJYXJndl9hcnJheV9wdXNoKCZyZXZfbGlzdC5hcmdzLCAiLS1vYmplY3RzIik7CisJYXJndl9hcnJheV9wdXNoKCZyZXZfbGlzdC5hcmdzLCAiLS1zdGRpbiIpOworCWlmIChoYXNfcHJvbWlzb3JfcmVtb3RlKCkpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcmV2X2xpc3QuYXJncywgIi0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIik7CisJaWYgKCFvcHQtPmlzX2RlZXBlbmluZ19mZXRjaCkgeworCQlhcmd2X2FycmF5X3B1c2goJnJldl9saXN0LmFyZ3MsICItLW5vdCIpOworCQlhcmd2X2FycmF5X3B1c2goJnJldl9saXN0LmFyZ3MsICItLWFsbCIpOworCX0KKwlhcmd2X2FycmF5X3B1c2goJnJldl9saXN0LmFyZ3MsICItLXF1aWV0Iik7CisJYXJndl9hcnJheV9wdXNoKCZyZXZfbGlzdC5hcmdzLCAiLS1hbHRlcm5hdGUtcmVmcyIpOworCWlmIChvcHQtPnByb2dyZXNzKQorCQlhcmd2X2FycmF5X3B1c2hmKCZyZXZfbGlzdC5hcmdzLCAiLS1wcm9ncmVzcz0lcyIsCisJCQkJIF8oIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIpKTsKKworCXJldl9saXN0LmdpdF9jbWQgPSAxOworCXJldl9saXN0LmVudiA9IG9wdC0+ZW52OworCXJldl9saXN0LmluID0gLTE7CisJcmV2X2xpc3Qubm9fc3Rkb3V0ID0gMTsKKwlpZiAob3B0LT5lcnJfZmQpCisJCXJldl9saXN0LmVyciA9IG9wdC0+ZXJyX2ZkOworCWVsc2UKKwkJcmV2X2xpc3Qubm9fc3RkZXJyID0gb3B0LT5xdWlldDsKKworCWlmIChzdGFydF9jb21tYW5kKCZyZXZfbGlzdCkpCisJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIikpOworCisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKworCWNvbW1pdFtoZXhzel0gPSAnXG4nOworCWRvIHsKKwkJLyoKKwkJICogSWYgaW5kZXgtcGFjayBhbHJlYWR5IGNoZWNrZWQgdGhhdDoKKwkJICogLSB0aGVyZSBhcmUgbm8gZGFuZ2xpbmcgcG9pbnRlcnMgaW4gdGhlIG5ldyBwYWNrCisJCSAqIC0gdGhlIHBhY2sgaXMgc2VsZiBjb250YWluZWQKKwkJICogVGhlbiBpZiB0aGUgdXBkYXRlZCByZWYgaXMgaW4gdGhlIG5ldyBwYWNrLCB0aGVuIHdlCisJCSAqIGFyZSBzdXJlIHRoZSByZWYgaXMgZ29vZCBhbmQgbm90IHNlbmRpbmcgaXQgdG8KKwkJICogcmV2LWxpc3QgZm9yIHZlcmlmaWNhdGlvbi4KKwkJICovCisJCWlmIChuZXdfcGFjayAmJiBmaW5kX3BhY2tfZW50cnlfb25lKG9pZC5oYXNoLCBuZXdfcGFjaykpCisJCQljb250aW51ZTsKKworCQltZW1jcHkoY29tbWl0LCBvaWRfdG9faGV4KCZvaWQpLCBoZXhzeik7CisJCWlmICh3cml0ZV9pbl9mdWxsKHJldl9saXN0LmluLCBjb21taXQsIGhleHN6ICsgMSkgPCAwKSB7CisJCQlpZiAoZXJybm8gIT0gRVBJUEUgJiYgZXJybm8gIT0gRUlOVkFMKQorCQkJCWVycm9yX2Vycm5vKF8oImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdCIpKTsKKwkJCWVyciA9IC0xOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICghZm4oY2JfZGF0YSwgJm9pZCkpOworCisJaWYgKGNsb3NlKHJldl9saXN0LmluKSkKKwkJZXJyID0gZXJyb3JfZXJybm8oXygiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iKSk7CisKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisJcmV0dXJuIGZpbmlzaF9jb21tYW5kKCZyZXZfbGlzdCkgfHwgZXJyOworfQpkaWZmIC0tZ2l0IGEvY29ubmVjdGVkLmggYi9jb25uZWN0ZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDVhNmIzCi0tLSAvZGV2L251bGwKKysrIGIvY29ubmVjdGVkLmgKQEAgLTAsMCArMSw2NSBAQAorI2lmbmRlZiBDT05ORUNURURfSAorI2RlZmluZSBDT05ORUNURURfSAorCitzdHJ1Y3Qgb2JqZWN0X2lkOworc3RydWN0IHRyYW5zcG9ydDsKKworLyoKKyAqIFRha2UgY2FsbGJhY2sgZGF0YSwgYW5kIHJldHVybiBuZXh0IG9iamVjdCBuYW1lIGluIHRoZSBidWZmZXIuCisgKiBXaGVuIGNhbGxlZCBhZnRlciByZXR1cm5pbmcgdGhlIG5hbWUgZm9yIHRoZSBsYXN0IG9iamVjdCwgcmV0dXJuIC0xCisgKiB0byBzaWduYWwgRU9GLCBvdGhlcndpc2UgcmV0dXJuIDAuCisgKi8KK3R5cGVkZWYgaW50ICgqb2lkX2l0ZXJhdGVfZm4pKHZvaWQgKiwgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoKKyAqIE5hbWVkLWFyZ3VtZW50cyBzdHJ1Y3QgZm9yIGNoZWNrX2Nvbm5lY3RlZC4gQWxsIGFyZ3VtZW50cyBhcmUKKyAqIG9wdGlvbmFsLCBhbmQgY2FuIGJlIGxlZnQgdG8gZGVmYXVsdHMgYXMgc2V0IGJ5IENIRUNLX0NPTk5FQ1RFRF9JTklULgorICovCitzdHJ1Y3QgY2hlY2tfY29ubmVjdGVkX29wdGlvbnMgeworCS8qIEF2b2lkIHByaW50aW5nIGFueSBlcnJvcnMgdG8gc3RkZXJyLiAqLworCWludCBxdWlldDsKKworCS8qIC0tc2hhbGxvdy1maWxlIHRvIHBhc3MgdG8gcmV2LWxpc3Qgc3ViLXByb2Nlc3MgKi8KKwljb25zdCBjaGFyICpzaGFsbG93X2ZpbGU7CisKKwkvKiBUcmFuc3BvcnQgd2hvc2Ugb2JqZWN0cyB3ZSBhcmUgY2hlY2tpbmcsIGlmIGF2YWlsYWJsZS4gKi8KKwlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CisKKwkvKgorCSAqIElmIG5vbi16ZXJvLCBzZW5kIGVycm9yIG1lc3NhZ2VzIHRvIHRoaXMgZGVzY3JpcHRvciByYXRoZXIKKwkgKiB0aGFuIHN0ZGVyci4gVGhlIGRlc2NyaXB0b3IgaXMgY2xvc2VkIGJlZm9yZSBjaGVja19jb25uZWN0ZWQKKwkgKiByZXR1cm5zLgorCSAqLworCWludCBlcnJfZmQ7CisKKwkvKiBJZiBub24temVybywgc2hvdyBwcm9ncmVzcyBhcyB3ZSB0cmF2ZXJzZSB0aGUgb2JqZWN0cy4gKi8KKwlpbnQgcHJvZ3Jlc3M7CisKKwkvKgorCSAqIEluc2VydCB0aGVzZSB2YXJpYWJsZXMgaW50byB0aGUgZW52aXJvbm1lbnQgb2YgdGhlIGNoaWxkIHByb2Nlc3MuCisJICovCisJY29uc3QgY2hhciAqKmVudjsKKworCS8qCisJICogSWYgbm9uLXplcm8sIGNoZWNrIHRoZSBhbmNlc3RyeSBjaGFpbiBjb21wbGV0ZWx5LCBub3Qgc3RvcHBpbmcgYXQKKwkgKiBhbnkgZXhpc3RpbmcgcmVmLiBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIGRlZXBlbmluZyBleGlzdGluZyByZWZzCisJICogZHVyaW5nIGEgZmV0Y2guCisJICovCisJdW5zaWduZWQgaXNfZGVlcGVuaW5nX2ZldGNoIDogMTsKK307CisKKyNkZWZpbmUgQ0hFQ0tfQ09OTkVDVEVEX0lOSVQgeyAwIH0KKworLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IGFsbCBnaXZlbiBvYmplY3RzIGFuZCBhbGwgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0aGVtCisgKiBlaXRoZXIgZXhpc3QgaW4gb3VyIG9iamVjdCBzdG9yZSBvciAoaWYgdGhlIHJlcG9zaXRvcnkgaXMgYSBwYXJ0aWFsCisgKiBjbG9uZSkgYXJlIHByb21pc2VkIHRvIGJlIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm4gMCBpZiBPaywgbm9uIHplcm8gb3RoZXJ3aXNlIChpLmUuIHNvbWUgbWlzc2luZyBvYmplY3RzKQorICoKKyAqIElmICJvcHQiIGlzIE5VTEwsIGJlaGF2ZXMgYXMgaWYgQ0hFQ0tfQ09OTkVDVEVEX0lOSVQgd2FzIHBhc3NlZC4KKyAqLworaW50IGNoZWNrX2Nvbm5lY3RlZChvaWRfaXRlcmF0ZV9mbiBmbiwgdm9pZCAqY2JfZGF0YSwKKwkJICAgIHN0cnVjdCBjaGVja19jb25uZWN0ZWRfb3B0aW9ucyAqb3B0KTsKKworI2VuZGlmIC8qIENPTk5FQ1RFRF9IICovCmRpZmYgLS1naXQgYS9jb250cmliL1JFQURNRSBiL2NvbnRyaWIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZjI5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL1JFQURNRQpAQCAtMCwwICsxLDQzIEBACitDb250cmlidXRlZCBTb2Z0d2FyZQorCitBbHRob3VnaCB0aGVzZSBwaWVjZXMgYXJlIGF2YWlsYWJsZSBhcyBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBnaXQKK3NvdXJjZSB0cmVlLCB0aGV5IGFyZSBpbiBzb21ld2hhdCBkaWZmZXJlbnQgc3RhdHVzLiAgVGhlCitpbnRlbnRpb24gaXMgdG8ga2VlcCBpbnRlcmVzdGluZyB0b29scyBhcm91bmQgZ2l0IGhlcmUsIG1heWJlCitldmVuIGV4cGVyaW1lbnRhbCBvbmVzLCB0byBnaXZlIHVzZXJzIGFuIGVhc2llciBhY2Nlc3MgdG8gdGhlbSwKK2FuZCB0byBnaXZlIHRvb2xzIHdpZGVyIGV4cG9zdXJlLCBzbyB0aGF0IHRoZXkgY2FuIGJlIGltcHJvdmVkCitmYXN0ZXIuCisKK0kgYW0gbm90IGV4cGVjdGluZyB0byB0b3VjaCB0aGVzZSBteXNlbGYgdGhhdCBtdWNoLiAgQXMgZmFyIGFzCitteSBkYXktdG8tZGF5IG9wZXJhdGlvbiBpcyBjb25jZXJuZWQsIHRoZXNlIHN1YmRpcmVjdG9yaWVzIGFyZQorb3duZWQgYnkgdGhlaXIgcmVzcGVjdGl2ZSBwcmltYXJ5IGF1dGhvcnMuICBJIGFtIHdpbGxpbmcgdG8gaGVscAoraWYgdXNlcnMgb2YgdGhlc2UgY29tcG9uZW50cyBhbmQgdGhlIGNvbnRyaWIvIHN1YnRyZWUgIm93bmVycyIKK2hhdmUgdGVjaG5pY2FsL2Rlc2lnbiBpc3N1ZXMgdG8gcmVzb2x2ZSwgYnV0IHRoZSBpbml0aWF0aXZlIHRvCitmaXggYW5kL29yIGVuaGFuY2UgdGhpbmdzIF9tdXN0XyBiZSBvbiB0aGUgc2lkZSBvZiB0aGUgc3VidHJlZQorb3duZXJzLiAgSU9XLCBJIHdvbid0IGJlIGFjdGl2ZWx5IGxvb2tpbmcgZm9yIGJ1Z3MgYW5kIHJvb21zIGZvcgorZW5oYW5jZW1lbnRzIGluIHRoZW0gYXMgdGhlIGdpdCBtYWludGFpbmVyIC0tIEkgbWF5IG9ubHkgZG8gc28KK2p1c3QgYXMgb25lIG9mIHRoZSB1c2VycyB3aGVuIEkgd2FudCB0byBzY3JhdGNoIG15IG93biBpdGNoLiAgSWYKK3lvdSBoYXZlIHBhdGNoZXMgdG8gdGhpbmdzIGluIGNvbnRyaWIvIGFyZWEsIHRoZSBwYXRjaCBzaG91bGQgYmUKK2ZpcnN0IHNlbnQgdG8gdGhlIHByaW1hcnkgYXV0aG9yLCBhbmQgdGhlbiB0aGUgcHJpbWFyeSBhdXRob3IKK3Nob3VsZCBhY2sgYW5kIGZvcndhcmQgaXQgdG8gbWUgKGdpdCBwdWxsIHJlcXVlc3QgaXMgbmljZXIpLgorVGhpcyBpcyB0aGUgc2FtZSB3YXkgYXMgaG93IEkgaGF2ZSBiZWVuIHRyZWF0aW5nIGdpdGssIGFuZCB0byBhCitsZXNzZXIgZGVncmVlIHZhcmlvdXMgZm9yZWlnbiBTQ00gaW50ZXJmYWNlcywgc28geW91IGtub3cgdGhlCitkcmlsbC4KKworSSBleHBlY3QgdGhhdCB0aGluZ3MgdGhhdCBzdGFydCB0aGVpciBsaWZlIGluIHRoZSBjb250cmliLyBhcmVhCit0byBncmFkdWF0ZSBvdXQgb2YgY29udHJpYi8gb25jZSB0aGV5IG1hdHVyZSwgZWl0aGVyIGJ5IGJlY29taW5nCitwcm9qZWN0cyBvbiB0aGVpciBvd24sIG9yIG1vdmluZyB0byB0aGUgdG9wbGV2ZWwgZGlyZWN0b3J5LiAgT24KK3RoZSBvdGhlciBoYW5kLCBJIGV4cGVjdCBJJ2xsIGJlIHByb3Bvc2luZyByZW1vdmFsIG9mIGRpc3VzZWQKK2FuZCBpbmFjdGl2ZSBvbmVzIGZyb20gdGltZSB0byB0aW1lLgorCitJZiB5b3UgaGF2ZSBuZXcgdGhpbmdzIHRvIGFkZCB0byB0aGlzIGFyZWEsIHBsZWFzZSBmaXJzdCBwcm9wb3NlCitpdCBvbiB0aGUgZ2l0IG1haWxpbmcgbGlzdCwgYW5kIGFmdGVyIGEgbGlzdCBkaXNjdXNzaW9uIHByb3ZlcwordGhlcmUgYXJlIHNvbWUgZ2VuZXJhbCBpbnRlcmVzdHMgKGl0IGRvZXMgbm90IGhhdmUgdG8gYmUgYQorbGlzdC13aWRlIGNvbnNlbnN1cyBmb3IgYSB0b29sIHRhcmdldGVkIHRvIGEgcmVsYXRpdmVseSBuYXJyb3cKK2F1ZGllbmNlIC0tIGZvciBleGFtcGxlIEkgZG8gbm90IHdvcmsgd2l0aCBwcm9qZWN0cyB3aG9zZQordXBzdHJlYW0gaXMgc3ZuLCBzbyBJIGhhdmUgbm8gdXNlIGZvciBnaXQtc3ZuIG15c2VsZiwgYnV0IGl0IGlzCitvZiBnZW5lcmFsIGludGVyZXN0IGZvciBwZW9wbGUgd2hvIG5lZWQgdG8gaW50ZXJvcGVyYXRlIHdpdGggU1ZOCityZXBvc2l0b3JpZXMgaW4gYSB3YXkgZ2l0LXN2biB3b3JrcyBiZXR0ZXIgdGhhbiBnaXQtc3ZuaW1wb3J0KSwKK3N1Ym1pdCBhIHBhdGNoIHRvIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeSBvZiBjb250cmliLyBhbmQgcHV0IHlvdXIKK3N0dWZmIHRoZXJlLgorCistamMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMucG0gYi9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNGNiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzLnBtCkBAIC0wLDAgKzEsNDIgQEAKK3BhY2thZ2UgR2VuZXJhdG9yczsKK3JlcXVpcmUgRXhwb3J0ZXI7CisKK3VzZSBzdHJpY3Q7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CitubyBzdHJpY3QgJ3JlZnMnOwordXNlIHZhcnMgcXcoJFZFUlNJT04gQEFWQUlMQUJMRSk7CisKK291ciAkVkVSU0lPTiA9ICcxLjAwJzsKK291cihASVNBLCBARVhQT1JULCBARVhQT1JUX09LLCBAQVZBSUxBQkxFKTsKK0BJU0EgPSBxdyhFeHBvcnRlcik7CisKK0JFR0lOIHsKKyAgICBsb2NhbCgqRCk7CisgICAgbXkgJG1lID0gJElOQ3siR2VuZXJhdG9ycy5wbSJ9OworICAgIGRpZSAiQ291bGRuJ3QgZmluZCBteXNlbGYgaW4gXEBJTkMsIHdoaWNoIGlzIHJlcXVpcmVkIHRvIGxvYWQgdGhlIGdlbmVyYXRvcnMhIiBpZiAoIiRtZSIgZXEgIiIpOworICAgICRtZSA9IGRpcm5hbWUoJG1lKTsKKyAgICBpZiAob3BlbmRpcihELCIkbWUvR2VuZXJhdG9ycyIpKSB7CisgICAgICAgIGZvcmVhY2ggbXkgJGdlbiAocmVhZGRpcihEKSkgeworICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCRnZW4gID1+IC9cLnBtJC8pOworICAgICAgICAgICAgcmVxdWlyZSAiJHttZX0vR2VuZXJhdG9ycy8kZ2VuIjsKKyAgICAgICAgICAgICRnZW4gPX4gcyxcLnBtLCw7CisgICAgICAgICAgICBwdXNoKEBBVkFJTEFCTEUsICRnZW4pOworICAgICAgICB9CisgICAgICAgIGNsb3NlZGlyKEQpOworICAgICAgICBteSAkZ2VucyA9IGpvaW4oJywgJywgQEFWQUlMQUJMRSk7CisgICAgfQorCisgICAgcHVzaCBARVhQT1JUX09LLCBxdyhhdmFpbGFibGUpOworfQorCitzdWIgYXZhaWxhYmxlIHsKKyAgICByZXR1cm4gQEFWQUlMQUJMRTsKK30KKworc3ViIGdlbmVyYXRlIHsKKyAgICBteSAoJGdlbiwgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKyAgICByZXR1cm4gZXZhbCgiR2VuZXJhdG9yczo6JHtnZW59OjpnZW5lcmF0ZShcJGdpdF9kaXIsIFwkb3V0X2RpciwgXCRyZWxfZGlyLCBcJWJ1aWxkX3N0cnVjdHVyZSkiKSBpZiBncmVwKC9eJGdlbiQvLCBAQVZBSUxBQkxFKTsKKyAgICBkaWUgIkdlbmVyYXRvciBcIiR7Z2VufVwiIGlzIG5vdCBhdmFpbGFibGUhXG5BdmFpbGFibGUgZ2VuZXJhdG9ycyBhcmU6IEBBVkFJTEFCTEVcbiI7Cit9CisKKzE7CmRpZmYgLS1naXQgYS9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzL1FNYWtlLnBtIGIvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy9RTWFrZS5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjNiNjU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy9RTWFrZS5wbQpAQCAtMCwwICsxLDE4OSBAQAorcGFja2FnZSBHZW5lcmF0b3JzOjpRTWFrZTsKK3JlcXVpcmUgRXhwb3J0ZXI7CisKK3VzZSBzdHJpY3Q7Cit1c2UgdmFycyBxdygkVkVSU0lPTik7CisKK291ciAkVkVSU0lPTiA9ICcxLjAwJzsKK291cihASVNBLCBARVhQT1JULCBARVhQT1JUX09LLCBAQVZBSUxBQkxFKTsKK0BJU0EgPSBxdyhFeHBvcnRlcik7CisKK0JFR0lOIHsKKyAgICBwdXNoIEBFWFBPUlRfT0ssIHF3KGdlbmVyYXRlKTsKK30KKworc3ViIGdlbmVyYXRlIHsKKyAgICBteSAoJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKworICAgIG15IEBsaWJzID0gQHskYnVpbGRfc3RydWN0dXJleyJMSUJTIn19OworICAgIGZvcmVhY2ggKEBsaWJzKSB7CisgICAgICAgIGNyZWF0ZUxpYlByb2plY3QoJF8sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpOworICAgIH0KKworICAgIG15IEBhcHBzID0gQHskYnVpbGRfc3RydWN0dXJleyJBUFBTIn19OworICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgIGNyZWF0ZUFwcFByb2plY3QoJF8sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpOworICAgIH0KKworICAgIGNyZWF0ZUdsdWVQcm9qZWN0KCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpOworICAgIHJldHVybiAwOworfQorCitzdWIgY3JlYXRlTGliUHJvamVjdCB7CisgICAgbXkgKCRsaWJuYW1lLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIHByaW50ICJHZW5lcmF0ZSAkbGlibmFtZSBsaWIgcHJvamVjdFxuIjsKKyAgICAkcmVsX2RpciA9ICIuLi8kcmVsX2RpciI7CisKKyAgICBteSAkc291cmNlcyA9IGpvaW4oIiBcXFxuXHQiLCBzb3J0KG1hcCgiJHJlbF9kaXIvJF8iLCBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9TT1VSQ0VTIn19KSkpOworICAgIG15ICRkZWZpbmVzID0gam9pbigiIFxcXG5cdCIsIHNvcnQoQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fREVGSU5FUyJ9fSkpOworICAgIG15ICRpbmNsdWRlcz0gam9pbigiIFxcXG5cdCIsIHNvcnQobWFwKCIkcmVsX2Rpci8kXyIsIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0lOQ0xVREVTIn19KSkpOworICAgIG15ICRjZmxhZ3MgID0gam9pbigiICIsIHNvcnQoQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fQ0ZMQUdTIn19KSk7CisKKyAgICBteSAkY2ZsYWdzX2RlYnVnID0gJGNmbGFnczsKKyAgICAkY2ZsYWdzX2RlYnVnID1+IHMvLU1ULy1NVGQvOworICAgICRjZmxhZ3NfZGVidWcgPX4gcy8tTy4vLzsKKworICAgIG15ICRjZmxhZ3NfcmVsZWFzZSA9ICRjZmxhZ3M7CisgICAgJGNmbGFnc19yZWxlYXNlID1+IHMvLU1UZC8tTVQvOworCisgICAgbXkgQHRtcCAgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9MRkxBR1MifX07CisgICAgbXkgQHRtcDIgPSAoKTsKKyAgICBmb3JlYWNoIChAdG1wKSB7CisgICAgICAgIGlmICgvXi1MVENHLykgeworICAgICAgICB9IGVsc2lmICgvXi1MLykgeworICAgICAgICAgICAgJF8gPX4gcy9eLUwvLUxJQlBBVEg6JHJlbF9kaXJcLy87CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAdG1wMiwgJF8pOworICAgIH0KKyAgICBteSAkbGZsYWdzID0gam9pbigiICIsIHNvcnQoQHRtcCkpOworCisgICAgbXkgJHRhcmdldCA9ICRsaWJuYW1lOworICAgICR0YXJnZXQgPX4gcy9cLy9fL2c7CisgICAgJGRlZmluZXMgPX4gcy8tRC8vZzsKKyAgICAkZGVmaW5lcyA9fiBzLyIvXFxcXCIvZzsKKyAgICAkaW5jbHVkZXMgPX4gcy8tSS8vZzsKKyAgICBta2RpciAiJHRhcmdldCIgfHwgZGllICJDb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgJHRhcmdldCBmb3IgbGliIHByb2plY3QhXG4iOworICAgIG9wZW4gRiwgIj4kdGFyZ2V0LyR0YXJnZXQucHJvIiB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICR0YXJnZXQvJHRhcmdldC5wcm8gZm9yIHdyaXRpbmchXG4iOworICAgIHByaW50IEYgPDwgIkVPTSI7CitURU1QTEFURSA9IGxpYgorVEFSR0VUID0gJHRhcmdldAorREVTVERJUiA9ICRyZWxfZGlyCisKK0NPTkZJRyAtPSBxdAorQ09ORklHICs9IHN0YXRpYworCitRTUFLRV9DRkxBR1MgPQorUU1BS0VfQ0ZMQUdTX1JFTEVBU0UgPSAkY2ZsYWdzX3JlbGVhc2UKK1FNQUtFX0NGTEFHU19ERUJVRyA9ICRjZmxhZ3NfZGVidWcKK1FNQUtFX0xJQkZMQUdTID0gJGxmbGFncworCitERUZJTkVTICs9IFxcCisgICAgICAgICRkZWZpbmVzCisKK0lOQ0xVREVQQVRIICs9IFxcCisgICAgICAgICRpbmNsdWRlcworCitTT1VSQ0VTICs9IFxcCisgICAgICAgICRzb3VyY2VzCitFT00KKyAgICBjbG9zZSBGOworfQorCitzdWIgY3JlYXRlQXBwUHJvamVjdCB7CisgICAgbXkgKCRhcHBuYW1lLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIHByaW50ICJHZW5lcmF0ZSAkYXBwbmFtZSBhcHAgcHJvamVjdFxuIjsKKyAgICAkcmVsX2RpciA9ICIuLi8kcmVsX2RpciI7CisKKyAgICBteSAkc291cmNlcyA9IGpvaW4oIiBcXFxuXHQiLCBzb3J0KG1hcCgiJHJlbF9kaXIvJF8iLCBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9TT1VSQ0VTIn19KSkpOworICAgIG15ICRkZWZpbmVzID0gam9pbigiIFxcXG5cdCIsIHNvcnQoQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fREVGSU5FUyJ9fSkpOworICAgIG15ICRpbmNsdWRlcz0gam9pbigiIFxcXG5cdCIsIHNvcnQobWFwKCIkcmVsX2Rpci8kXyIsIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0lOQ0xVREVTIn19KSkpOworICAgIG15ICRjZmxhZ3MgID0gam9pbigiICIsIHNvcnQoQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fQ0ZMQUdTIn19KSk7CisKKyAgICBteSAkY2ZsYWdzX2RlYnVnID0gJGNmbGFnczsKKyAgICAkY2ZsYWdzX2RlYnVnID1+IHMvLU1ULy1NVGQvOworICAgICRjZmxhZ3NfZGVidWcgPX4gcy8tTy4vLzsKKworICAgIG15ICRjZmxhZ3NfcmVsZWFzZSA9ICRjZmxhZ3M7CisgICAgJGNmbGFnc19yZWxlYXNlID1+IHMvLU1UZC8tTVQvOworCisgICAgbXkgJGxpYnM7CisgICAgZm9yZWFjaCAoc29ydChAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9MSUJTIn19KSkgeworICAgICAgICAkXyA9fiBzL1wvL18vZzsKKyAgICAgICAgJGxpYnMgLj0gIiAkXyI7CisgICAgfQorICAgIG15IEB0bXAgID0gQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fTEZMQUdTIn19OworICAgIG15IEB0bXAyID0gKCk7CisgICAgZm9yZWFjaCAoQHRtcCkgeworICAgICAgICAjIG5leHQgaWYgKCRfIGVxICItTk9ERUZBVUxUTElCOk1TVkNSVC5saWIiKTsKKyAgICAgICAgaWYgKC9eLUxUQ0cvKSB7CisgICAgICAgIH0gZWxzaWYgKC9eLUwvKSB7CisgICAgICAgICAgICAkXyA9fiBzL14tTC8tTElCUEFUSDokcmVsX2RpclwvLzsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEB0bXAyLCAkXyk7CisgICAgfQorICAgIG15ICRsZmxhZ3MgPSBqb2luKCIgIiwgc29ydChAdG1wKSk7CisKKyAgICBteSAkdGFyZ2V0ID0gJGFwcG5hbWU7CisgICAgJHRhcmdldCA9fiBzL1wuZXhlLy87CisgICAgJHRhcmdldCA9fiBzL1wvL18vZzsKKyAgICAkZGVmaW5lcyA9fiBzLy1ELy9nOworICAgICRkZWZpbmVzID1+IHMvIi9cXFxcIi9nOworICAgICRpbmNsdWRlcyA9fiBzLy1JLy9nOworICAgIG1rZGlyICIkdGFyZ2V0IiB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGRpcmVjdG9yeSAkdGFyZ2V0IGZvciBhcHAgcHJvamVjdCFcbiI7CisgICAgb3BlbiBGLCAiPiR0YXJnZXQvJHRhcmdldC5wcm8iIHx8IGRpZSAiQ291bGQgbm90IG9wZW4gJHRhcmdldC8kdGFyZ2V0LnBybyBmb3Igd3JpdGluZyFcbiI7CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKK1RFTVBMQVRFID0gYXBwCitUQVJHRVQgPSAkdGFyZ2V0CitERVNURElSID0gJHJlbF9kaXIKKworQ09ORklHIC09IHF0IGVtYmVkX21hbmlmZXN0X2V4ZQorQ09ORklHICs9IGNvbnNvbGUKKworUU1BS0VfQ0ZMQUdTID0KK1FNQUtFX0NGTEFHU19SRUxFQVNFID0gJGNmbGFnc19yZWxlYXNlCitRTUFLRV9DRkxBR1NfREVCVUcgPSAkY2ZsYWdzX2RlYnVnCitRTUFLRV9MRkxBR1MgPSAkbGZsYWdzCitMSUJTICAgPSAkbGlicworCitERUZJTkVTICs9IFxcCisgICAgICAgICRkZWZpbmVzCisKK0lOQ0xVREVQQVRIICs9IFxcCisgICAgICAgICRpbmNsdWRlcworCit3aW4zMjpRTUFLRV9MRkxBR1MgKz0gLUxJQlBBVEg6JHJlbF9kaXIKK2Vsc2U6IFFNQUtFX0xGTEFHUyArPSAtTCRyZWxfZGlyCisKK1NPVVJDRVMgKz0gXFwKKyAgICAgICAgJHNvdXJjZXMKK0VPTQorICAgIGNsb3NlIEY7Cit9CisKK3N1YiBjcmVhdGVHbHVlUHJvamVjdCB7CisgICAgbXkgKCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgbXkgJGxpYnMgPSBqb2luKCIgXFwgXG4iLCBtYXAoIlx0JF98JF8ucHJvIiwgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTIn19KSk7CisgICAgbXkgJGFwcHMgPSBqb2luKCIgXFwgXG4iLCBtYXAoIlx0JF98JF8ucHJvIiwgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTIn19KSk7CisgICAgJGxpYnMgPX4gcy9cLmEvL2c7CisgICAgJGxpYnMgPX4gcy9cLy9fL2c7CisgICAgJGxpYnMgPX4gcy9cfC9cLy9nOworICAgICRhcHBzID1+IHMvXC5leGUvL2c7CisgICAgJGFwcHMgPX4gcy9cLy9fL2c7CisgICAgJGFwcHMgPX4gcy9cfC9cLy9nOworCisgICAgbXkgJGZpbGVuYW1lID0gJG91dF9kaXI7CisgICAgJGZpbGVuYW1lID1+IHMvLipcLyhbXlwvXSspJC8kMS87CisgICAgJGZpbGVuYW1lID1+IHMvXC8kLy87CisgICAgcHJpbnQgIkdlbmVyYXRlIGdsdWUgcHJvamVjdCAkZmlsZW5hbWUucHJvXG4iOworICAgIG9wZW4gRiwgIj4kZmlsZW5hbWUucHJvIiB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICRmaWxlbmFtZS5wcm8gZm9yIHdyaXRpbmchXG4iOworICAgIHByaW50IEYgPDwgIkVPTSI7CitURU1QTEFURSA9IHN1YmRpcnMKK0NPTkZJRyArPSBvcmRlcmVkCitTVUJESVJTICs9IFxcCiskbGlicyBcXAorJGFwcHMKK0VPTQorICAgIGNsb3NlIEY7Cit9CisKKzE7CmRpZmYgLS1naXQgYS9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzL1ZjcHJvai5wbSBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvVmNwcm9qLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNzY0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzL1ZjcHJvai5wbQpAQCAtMCwwICsxLDU3OSBAQAorcGFja2FnZSBHZW5lcmF0b3JzOjpWY3Byb2o7CityZXF1aXJlIEV4cG9ydGVyOworCit1c2Ugc3RyaWN0OwordXNlIHZhcnMgcXcoJFZFUlNJT04pOwordXNlIERpZ2VzdDo6U0hBIHF3KHNoYTI1Nl9oZXgpOworCitvdXIgJFZFUlNJT04gPSAnMS4wMCc7CitvdXIoQElTQSwgQEVYUE9SVCwgQEVYUE9SVF9PSywgQEFWQUlMQUJMRSk7CitASVNBID0gcXcoRXhwb3J0ZXIpOworCitCRUdJTiB7CisgICAgcHVzaCBARVhQT1JUX09LLCBxdyhnZW5lcmF0ZSk7Cit9CisKK3N1YiBnZW5lcmF0ZV9ndWlkICgkKSB7CisgICAgbXkgJGhleCA9IHNoYTI1Nl9oZXgoJF9bMF0pOworICAgICRoZXggPX4gcy9eKC57OH0pKC57NH0pKC57NH0pKC57NH0pKC57MTJ9KS4qL3skMS0kMi0kMy0kNC0kNX0vOworICAgICRoZXggPX4gdHIvYS16L0EtWi87CisgICAgcmV0dXJuICRoZXg7Cit9CisKK3N1YiBnZW5lcmF0ZSB7CisgICAgbXkgKCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgbXkgQGxpYnMgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlMifX07CisgICAgZm9yZWFjaCAoQGxpYnMpIHsKKyAgICAgICAgY3JlYXRlTGliUHJvamVjdCgkXywgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgXCVidWlsZF9zdHJ1Y3R1cmUpOworICAgIH0KKworICAgIG15IEBhcHBzID0gQHskYnVpbGRfc3RydWN0dXJleyJBUFBTIn19OworICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgIGNyZWF0ZUFwcFByb2plY3QoJF8sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsIFwlYnVpbGRfc3RydWN0dXJlKTsKKyAgICB9CisKKyAgICBjcmVhdGVHbHVlUHJvamVjdCgkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKTsKKyAgICByZXR1cm4gMDsKK30KKworc3ViIGNyZWF0ZUxpYlByb2plY3QgeworICAgIG15ICgkbGlibmFtZSwgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJGJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKyAgICBwcmludCAiR2VuZXJhdGUgJGxpYm5hbWUgdmNwcm9qIGxpYiBwcm9qZWN0XG4iOworICAgICRyZWxfZGlyID0gIi4uXFwkcmVsX2RpciI7CisgICAgJHJlbF9kaXIgPX4gcy9cLy9cXC9nOworCisgICAgbXkgJHRhcmdldCA9ICRsaWJuYW1lOworICAgICR0YXJnZXQgPX4gcy9cLy9fL2c7CisgICAgJHRhcmdldCA9fiBzL1wuYS8vOworCisgICAgbXkgJHV1aWQgPSBnZW5lcmF0ZV9ndWlkKCRsaWJuYW1lKTsKKyAgICAkJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke3RhcmdldH1fR1VJRCJ9ID0gJHV1aWQ7CisKKyAgICBteSBAc3JjcyA9IHNvcnQobWFwKCIkcmVsX2RpclxcJF8iLCBAeyQkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fU09VUkNFUyJ9fSkpOworICAgIG15IEBzb3VyY2VzOworICAgIGZvcmVhY2ggKEBzcmNzKSB7CisgICAgICAgICRfID1+IHMvXC8vXFwvZzsKKyAgICAgICAgcHVzaChAc291cmNlcywgJF8pOworICAgIH0KKyAgICBteSAkZGVmaW5lcyA9IGpvaW4oIiwiLCBzb3J0KEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9ERUZJTkVTIn19KSk7CisgICAgbXkgJGluY2x1ZGVzPSBqb2luKCI7Iiwgc29ydChtYXAoIiZxdW90OyRyZWxfZGlyXFwkXyZxdW90OyIsIEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9JTkNMVURFUyJ9fSkpKTsKKyAgICBteSAkY2ZsYWdzICA9IGpvaW4oIiAiLCBzb3J0KEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9DRkxBR1MifX0pKTsKKyAgICAkY2ZsYWdzID1+IHMvXCIvJnF1b3Q7L2c7CisgICAgJGNmbGFncyA9fiBzLzwvJmx0Oy9nOworICAgICRjZmxhZ3MgPX4gcy8+LyZndDsvZzsKKworICAgIG15ICRjZmxhZ3NfZGVidWcgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfZGVidWcgPX4gcy8tTVQvLU1UZC87CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1PLi8vOworCisgICAgbXkgJGNmbGFnc19yZWxlYXNlID0gJGNmbGFnczsKKyAgICAkY2ZsYWdzX3JlbGVhc2UgPX4gcy8tTVRkLy1NVC87CisKKyAgICBteSBAdG1wICA9IEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9MRkxBR1MifX07CisgICAgbXkgQHRtcDIgPSAoKTsKKyAgICBmb3JlYWNoIChAdG1wKSB7CisgICAgICAgIGlmICgvXi1MVENHLykgeworICAgICAgICB9IGVsc2lmICgvXi1MLykgeworICAgICAgICAgICAgJF8gPX4gcy9eLUwvLUxJQlBBVEg6JHJlbF9kaXJcLy87CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAdG1wMiwgJF8pOworICAgIH0KKyAgICBteSAkbGZsYWdzID0gam9pbigiICIsIHNvcnQoQHRtcCkpOworCisgICAgJGRlZmluZXMgPX4gcy8tRC8vZzsKKyAgICAkZGVmaW5lcyA9fiBzL1wiL1xcJnF1b3Q7L2c7CisgICAgJGRlZmluZXMgPX4gcy88LyZsdDsvZzsKKyAgICAkZGVmaW5lcyA9fiBzLz4vJmd0Oy9nOworICAgICRkZWZpbmVzID1+IHMvXCcvL2c7CisgICAgJGluY2x1ZGVzID1+IHMvLUkvL2c7CisgICAgbWtkaXIgIiR0YXJnZXQiIHx8IGRpZSAiQ291bGQgbm90IGNyZWF0ZSB0aGUgZGlyZWN0b3J5ICR0YXJnZXQgZm9yIGxpYiBwcm9qZWN0IVxuIjsKKyAgICBvcGVuIEYsICI+JHRhcmdldC8kdGFyZ2V0LnZjcHJvaiIgfHwgZGllICJDb3VsZCBub3Qgb3BlbiAkdGFyZ2V0LyR0YXJnZXQucHJvIGZvciB3cml0aW5nIVxuIjsKKyAgICBiaW5tb2RlIEYsICI6Y3JsZiI7CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2RpbmcgPSAiV2luZG93cy0xMjUyIj8+Cis8VmlzdWFsU3R1ZGlvUHJvamVjdAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249IjksMDAiCisJTmFtZT0iJHRhcmdldCIKKwlQcm9qZWN0R1VJRD0iJHV1aWQiPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiLz4KKwk8L1BsYXRmb3Jtcz4KKwk8VG9vbEZpbGVzPgorCTwvVG9vbEZpbGVzPgorCTxDb25maWd1cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkcmVsX2RpciIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIwIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJcJChQcm9qZWN0RGlyKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIkY2ZsYWdzX2RlYnVnIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkaW5jbHVkZXMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyLF9ERUJVRywkZGVmaW5lcyIKKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKKwkJCQlSdW50aW1lTGlicmFyeT0iMSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iXCQoSW50RGlyKVxcXCQoVGFyZ2V0TmFtZSkucGRiIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJHJlbF9kaXIiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCIKKwkJCUNoYXJhY3RlclNldD0iMCIKKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iXCQoUHJvamVjdERpcilcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iJGNmbGFnc19yZWxlYXNlIgorCQkJCU9wdGltaXphdGlvbj0iMiIKKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJGluY2x1ZGVzIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMixOREVCVUcsJGRlZmluZXMiCisJCQkJUnVudGltZUxpYnJhcnk9IjAiCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9IlwkKEludERpcilcXFwkKFRhcmdldE5hbWUpLnBkYiIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3VyYXRpb25zPgorCTxGaWxlcz4KKwkJPEZpbHRlcgorCQkJTmFtZT0iU291cmNlIEZpbGVzIgorCQkJRmlsdGVyPSJjcHA7YztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCIKKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ij4KK0VPTQorICAgIGZvcmVhY2goQHNvdXJjZXMpIHsKKyAgICAgICAgcHJpbnQgRiA8PCAiRU9NIjsKKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkXyIvPgorRU9NCisgICAgfQorICAgIHByaW50IEYgPDwgIkVPTSI7CisJCTwvRmlsdGVyPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgorRU9NCisgICAgY2xvc2UgRjsKK30KKworc3ViIGNyZWF0ZUFwcFByb2plY3QgeworICAgIG15ICgkYXBwbmFtZSwgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJGJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKyAgICBwcmludCAiR2VuZXJhdGUgJGFwcG5hbWUgdmNwcm9qIGFwcCBwcm9qZWN0XG4iOworICAgICRyZWxfZGlyID0gIi4uXFwkcmVsX2RpciI7CisgICAgJHJlbF9kaXIgPX4gcy9cLy9cXC9nOworCisgICAgbXkgJHRhcmdldCA9ICRhcHBuYW1lOworICAgICR0YXJnZXQgPX4gcy9cLy9fL2c7CisgICAgJHRhcmdldCA9fiBzL1wuZXhlLy87CisKKyAgICBteSAkdXVpZCA9IGdlbmVyYXRlX2d1aWQoJGFwcG5hbWUpOworICAgICQkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7dGFyZ2V0fV9HVUlEIn0gPSAkdXVpZDsKKworICAgIG15IEBzcmNzID0gc29ydChtYXAoIiRyZWxfZGlyXFwkXyIsIEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9TT1VSQ0VTIn19KSk7CisgICAgbXkgQHNvdXJjZXM7CisgICAgZm9yZWFjaCAoQHNyY3MpIHsKKyAgICAgICAgJF8gPX4gcy9cLy9cXC9nOworICAgICAgICBwdXNoKEBzb3VyY2VzLCAkXyk7CisgICAgfQorICAgIG15ICRkZWZpbmVzID0gam9pbigiLCIsIHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0RFRklORVMifX0pKTsKKyAgICBteSAkaW5jbHVkZXM9IGpvaW4oIjsiLCBzb3J0KG1hcCgiJnF1b3Q7JHJlbF9kaXJcXCRfJnF1b3Q7IiwgQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0lOQ0xVREVTIn19KSkpOworICAgIG15ICRjZmxhZ3MgID0gam9pbigiICIsIHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0NGTEFHUyJ9fSkpOworICAgICRjZmxhZ3MgPX4gcy9cIi8mcXVvdDsvZzsKKyAgICAkY2ZsYWdzID1+IHMvPC8mbHQ7L2c7CisgICAgJGNmbGFncyA9fiBzLz4vJmd0Oy9nOworCisgICAgbXkgJGNmbGFnc19kZWJ1ZyA9ICRjZmxhZ3M7CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1NVC8tTVRkLzsKKyAgICAkY2ZsYWdzX2RlYnVnID1+IHMvLU8uLy87CisKKyAgICBteSAkY2ZsYWdzX3JlbGVhc2UgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfcmVsZWFzZSA9fiBzLy1NVGQvLU1ULzsKKworICAgIG15ICRsaWJzOworICAgIGZvcmVhY2ggKHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0xJQlMifX0pKSB7CisgICAgICAgICRfID1+IHMvXC8vXy9nOworICAgICAgICAkbGlicyAuPSAiICRfIjsKKyAgICB9CisgICAgbXkgQHRtcCAgPSBAeyQkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fTEZMQUdTIn19OworICAgIG15IEB0bXAyID0gKCk7CisgICAgZm9yZWFjaCAoQHRtcCkgeworICAgICAgICBpZiAoL14tTFRDRy8pIHsKKyAgICAgICAgfSBlbHNpZiAoL14tTC8pIHsKKyAgICAgICAgICAgICRfID1+IHMvXi1MLy1MSUJQQVRIOiRyZWxfZGlyXC8vOworICAgICAgICB9CisgICAgICAgIHB1c2goQHRtcDIsICRfKTsKKyAgICB9CisgICAgbXkgJGxmbGFncyA9IGpvaW4oIiAiLCBzb3J0KEB0bXApKSAuICIgLUxJQlBBVEg6JHJlbF9kaXIiOworCisgICAgJGRlZmluZXMgPX4gcy8tRC8vZzsKKyAgICAkZGVmaW5lcyA9fiBzL1wiL1xcJnF1b3Q7L2c7CisgICAgJGRlZmluZXMgPX4gcy88LyZsdDsvZzsKKyAgICAkZGVmaW5lcyA9fiBzLz4vJmd0Oy9nOworICAgICRkZWZpbmVzID1+IHMvXCcvL2c7CisgICAgJGRlZmluZXMgPX4gcy9cXFxcL1xcL2c7CisgICAgJGluY2x1ZGVzID1+IHMvLUkvL2c7CisgICAgbWtkaXIgIiR0YXJnZXQiIHx8IGRpZSAiQ291bGQgbm90IGNyZWF0ZSB0aGUgZGlyZWN0b3J5ICR0YXJnZXQgZm9yIGxpYiBwcm9qZWN0IVxuIjsKKyAgICBvcGVuIEYsICI+JHRhcmdldC8kdGFyZ2V0LnZjcHJvaiIgfHwgZGllICJDb3VsZCBub3Qgb3BlbiAkdGFyZ2V0LyR0YXJnZXQucHJvIGZvciB3cml0aW5nIVxuIjsKKyAgICBiaW5tb2RlIEYsICI6Y3JsZiI7CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2RpbmcgPSAiV2luZG93cy0xMjUyIj8+Cis8VmlzdWFsU3R1ZGlvUHJvamVjdAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249IjksMDAiCisJTmFtZT0iJHRhcmdldCIKKwlQcm9qZWN0R1VJRD0iJHV1aWQiPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiLz4KKwk8L1BsYXRmb3Jtcz4KKwk8VG9vbEZpbGVzPgorCTwvVG9vbEZpbGVzPgorCTxDb25maWd1cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkcmVsX2RpciIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIgorCQkJQ2hhcmFjdGVyU2V0PSIwIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJcJChQcm9qZWN0RGlyKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIkY2ZsYWdzX2RlYnVnIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkaW5jbHVkZXMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyLF9ERUJVRywkZGVmaW5lcyIKKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKKwkJCQlSdW50aW1lTGlicmFyeT0iMSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iXCQoSW50RGlyKVxcXCQoVGFyZ2V0TmFtZSkucGRiIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiRsaWJzIgorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIkbGZsYWdzIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJU3ViU3lzdGVtPSIxIgorCQkJCVRhcmdldE1hY2hpbmU9IjEiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiRyZWxfZGlyIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlwkKFByb2plY3REaXIpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiRjZmxhZ3NfcmVsZWFzZSIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiRpbmNsdWRlcyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzIsTkRFQlVHLCRkZWZpbmVzIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSJcJChJbnREaXIpXFxcJChUYXJnZXROYW1lKS5wZGIiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJGxpYnMiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiRsZmxhZ3MiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCTwvQ29uZmlndXJhdGlvbnM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iPgorRU9NCisgICAgZm9yZWFjaChAc291cmNlcykgeworICAgICAgICBwcmludCBGIDw8ICJFT00iOworCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiRfIi8+CitFT00KKyAgICB9CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKwkJPC9GaWx0ZXI+CisJPC9GaWxlcz4KKwk8R2xvYmFscz4KKwk8L0dsb2JhbHM+Cis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CitFT00KKyAgICBjbG9zZSBGOworfQorCitzdWIgY3JlYXRlR2x1ZVByb2plY3QgeworICAgIG15ICgkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIHByaW50ICJHZW5lcmF0ZSBzb2x1dGlvbnMgZmlsZVxuIjsKKyAgICAkcmVsX2RpciA9ICIuLlxcJHJlbF9kaXIiOworICAgICRyZWxfZGlyID1+IHMvXC8vXFwvZzsKKyAgICBteSAkU0xOX0hFQUQgPSAiTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gMTAuMDBcbiMgVmlzdWFsIFN0dWRpbyAyMDA4XG4iOworICAgIG15ICRTTE5fUFJFICA9ICJQcm9qZWN0KFwiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn1cIikgPSAiOworICAgIG15ICRTTE5fUE9TVCA9ICJcbkVuZFByb2plY3RcbiI7CisKKyAgICBteSBAbGlicyA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCUyJ9fTsKKyAgICBteSBAdG1wOworICAgIGZvcmVhY2ggKEBsaWJzKSB7CisgICAgICAgICRfID1+IHMvXC8vXy9nOworICAgICAgICAkXyA9fiBzL1wuYS8vOworICAgICAgICBwdXNoKEB0bXAsICRfKTsKKyAgICB9CisgICAgQGxpYnMgPSBAdG1wOworCisgICAgbXkgQGFwcHMgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFMifX07CisgICAgQHRtcCA9ICgpOworICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgICRfID1+IHMvXC8vXy9nOworICAgICAgICAkXyA9fiBzL1wuZXhlLy87CisgICAgICAgIGlmICgkXyBlcSAiZ2l0IiApIHsKKyAgICAgICAgICAgIHVuc2hpZnQoQHRtcCwgJF8pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAdG1wLCAkXyk7CisgICAgICAgIH0KKyAgICB9CisgICAgQGFwcHMgPSBAdG1wOworCisgICAgb3BlbiBGLCAiPmdpdC5zbG4iIHx8IGRpZSAiQ291bGQgbm90IG9wZW4gZ2l0LnNsbiBmb3Igd3JpdGluZyFcbiI7CisgICAgYmlubW9kZSBGLCAiOmNybGYiOworICAgIHByaW50IEYgIiRTTE5fSEVBRCI7CisKKyAgICBteSAkdXVpZF9saWJnaXQgPSAkYnVpbGRfc3RydWN0dXJleyJMSUJTX2xpYmdpdF9HVUlEIn07CisgICAgbXkgJHV1aWRfeGRpZmZfbGliID0gJGJ1aWxkX3N0cnVjdHVyZXsiTElCU194ZGlmZl9saWJfR1VJRCJ9OworICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgIG15ICRhcHBuYW1lID0gJF87CisgICAgICAgIG15ICR1dWlkID0gJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiAiJFNMTl9QUkUiOworICAgICAgICBwcmludCBGICJcIiR7YXBwbmFtZX1cIiwgXCIke2FwcG5hbWV9XFwke2FwcG5hbWV9LnZjcHJvalwiLCBcIiR7dXVpZH1cIlxuIjsKKyAgICAgICAgcHJpbnQgRiAiCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3RcbiI7CisgICAgICAgIHByaW50IEYgIgkJJHt1dWlkX2xpYmdpdH0gPSAke3V1aWRfbGliZ2l0fVxuIjsKKyAgICAgICAgcHJpbnQgRiAiCQkke3V1aWRfeGRpZmZfbGlifSA9ICR7dXVpZF94ZGlmZl9saWJ9XG4iOworICAgICAgICBwcmludCBGICIJRW5kUHJvamVjdFNlY3Rpb24iOworICAgICAgICBwcmludCBGICIkU0xOX1BPU1QiOworICAgIH0KKyAgICBmb3JlYWNoIChAbGlicykgeworICAgICAgICBteSAkbGlibmFtZSA9ICRfOworICAgICAgICBteSAkdXVpZCA9ICRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9HVUlEIn07CisgICAgICAgIHByaW50IEYgIiRTTE5fUFJFIjsKKyAgICAgICAgcHJpbnQgRiAiXCIke2xpYm5hbWV9XCIsIFwiJHtsaWJuYW1lfVxcJHtsaWJuYW1lfS52Y3Byb2pcIiwgXCIke3V1aWR9XCIiOworICAgICAgICBwcmludCBGICIkU0xOX1BPU1QiOworICAgIH0KKworICAgIHByaW50IEYgPDwgIkVPTSI7CitHbG9iYWwKKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbgorCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyCisJCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyCisJRW5kR2xvYmFsU2VjdGlvbgorRU9NCisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKwlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbgorRU9NCisgICAgZm9yZWFjaCAoQGFwcHMpIHsKKyAgICAgICAgbXkgJGFwcG5hbWUgPSAkXzsKKyAgICAgICAgbXkgJHV1aWQgPSAkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fR1VJRCJ9OworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyXG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgfQorICAgIGZvcmVhY2ggKEBsaWJzKSB7CisgICAgICAgIG15ICRsaWJuYW1lID0gJF87CisgICAgICAgIG15ICR1dWlkID0gJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyXG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyXG4iOworICAgIH0KKworICAgIHByaW50IEYgPDwgIkVPTSI7CisJRW5kR2xvYmFsU2VjdGlvbgorRW5kR2xvYmFsCitFT00KKyAgICBjbG9zZSBGOworfQorCisxOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy9WY3hwcm9qLnBtIGIvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy9WY3hwcm9qLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNjY2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzL1ZjeHByb2oucG0KQEAgLTAsMCArMSwzOTIgQEAKK3BhY2thZ2UgR2VuZXJhdG9yczo6VmN4cHJvajsKK3JlcXVpcmUgRXhwb3J0ZXI7CisKK3VzZSBzdHJpY3Q7Cit1c2UgdmFycyBxdygkVkVSU0lPTik7Cit1c2UgRGlnZXN0OjpTSEEgcXcoc2hhMjU2X2hleCk7CisKK291ciAkVkVSU0lPTiA9ICcxLjAwJzsKK291cihASVNBLCBARVhQT1JULCBARVhQT1JUX09LLCBAQVZBSUxBQkxFKTsKK0BJU0EgPSBxdyhFeHBvcnRlcik7CisKK0JFR0lOIHsKKyAgICBwdXNoIEBFWFBPUlRfT0ssIHF3KGdlbmVyYXRlKTsKK30KKworc3ViIGdlbmVyYXRlX2d1aWQgKCQpIHsKKwlteSAkaGV4ID0gc2hhMjU2X2hleCgkX1swXSk7CisJJGhleCA9fiBzL14oLns4fSkoLns0fSkoLns0fSkoLns0fSkoLnsxMn0pLioveyQxLSQyLSQzLSQ0LSQ1fS87CisJJGhleCA9fiB0ci9hLXovQS1aLzsKKwlyZXR1cm4gJGhleDsKK30KKworc3ViIGdlbmVyYXRlIHsKKyAgICBteSAoJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKyAgICBteSBAbGlicyA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCUyJ9fTsKKyAgICBmb3JlYWNoIChAbGlicykgeworICAgICAgICBjcmVhdGVQcm9qZWN0KCRfLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCBcJWJ1aWxkX3N0cnVjdHVyZSwgMSk7CisgICAgfQorCisgICAgbXkgQGFwcHMgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFMifX07CisgICAgZm9yZWFjaCAoQGFwcHMpIHsKKyAgICAgICAgY3JlYXRlUHJvamVjdCgkXywgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgXCVidWlsZF9zdHJ1Y3R1cmUsIDApOworICAgIH0KKworICAgIGNyZWF0ZUdsdWVQcm9qZWN0KCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpOworICAgIHJldHVybiAwOworfQorCitzdWIgY3JlYXRlUHJvamVjdCB7CisgICAgbXkgKCRuYW1lLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAkYnVpbGRfc3RydWN0dXJlLCAkc3RhdGljX2xpYnJhcnkpID0gQF87CisgICAgbXkgJGxhYmVsID0gJHN0YXRpY19saWJyYXJ5ID8gImxpYiIgOiAiYXBwIjsKKyAgICBteSAkcHJlZml4ID0gJHN0YXRpY19saWJyYXJ5ID8gIkxJQlNfIiA6ICJBUFBTXyI7CisgICAgbXkgJGNvbmZpZ190eXBlID0gJHN0YXRpY19saWJyYXJ5ID8gIlN0YXRpY0xpYnJhcnkiIDogIkFwcGxpY2F0aW9uIjsKKyAgICBwcmludCAiR2VuZXJhdGUgJG5hbWUgdmN4cHJvaiAkbGFiZWwgcHJvamVjdFxuIjsKKyAgICBteSAkY2R1cCA9ICRuYW1lOworICAgICRjZHVwID1+IHMvW15cL10rLy4uL2c7CisgICAgJGNkdXAgPX4gcy9cLy9cXC9nOworICAgICRyZWxfZGlyID0gJHJlbF9kaXIgZXEgIi4iID8gJGNkdXAgOiAiJGNkdXBcXCRyZWxfZGlyIjsKKyAgICAkcmVsX2RpciA9fiBzL1wvL1xcL2c7CisKKyAgICBteSAkdGFyZ2V0ID0gJG5hbWU7CisgICAgaWYgKCRzdGF0aWNfbGlicmFyeSkgeworICAgICAgJHRhcmdldCA9fiBzL1wuYS8vOworICAgIH0gZWxzZSB7CisgICAgICAkdGFyZ2V0ID1+IHMvXC5leGUvLzsKKyAgICB9CisKKyAgICBteSAkdXVpZCA9IGdlbmVyYXRlX2d1aWQoJG5hbWUpOworICAgICQkYnVpbGRfc3RydWN0dXJleyIkcHJlZml4JHt0YXJnZXR9X0dVSUQifSA9ICR1dWlkOworICAgIG15ICR2Y3hwcm9qID0gJHRhcmdldDsKKyAgICAkdmN4cHJvaiA9fiBzLyguKlwvKT8oLiopLyQmXC8kMi52Y3hwcm9qLzsKKyAgICAkdmN4cHJvaiA9fiBzLyhbXlwvXSopKFwvbGliKVwvKGxpYi52Y3hwcm9qKS8kMSQyXC8kMV8kMy87CisgICAgJCRidWlsZF9zdHJ1Y3R1cmV7IiRwcmVmaXgke3RhcmdldH1fVkNYUFJPSiJ9ID0gJHZjeHByb2o7CisKKyAgICBteSBAc3JjcyA9IHNvcnQobWFwKCIkcmVsX2RpclxcJF8iLCBAeyQkYnVpbGRfc3RydWN0dXJleyIkcHJlZml4JHtuYW1lfV9TT1VSQ0VTIn19KSk7CisgICAgbXkgQHNvdXJjZXM7CisgICAgZm9yZWFjaCAoQHNyY3MpIHsKKyAgICAgICAgJF8gPX4gcy9cLy9cXC9nOworICAgICAgICBwdXNoKEBzb3VyY2VzLCAkXyk7CisgICAgfQorICAgIG15ICRkZWZpbmVzID0gam9pbigiOyIsIHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiJHByZWZpeCR7bmFtZX1fREVGSU5FUyJ9fSkpOworICAgIG15ICRpbmNsdWRlcz0gam9pbigiOyIsIHNvcnQobWFwIHsgcy9eLUkvLzsgcy9cLy9cXC9nOyBGaWxlOjpTcGVjLT5maWxlX25hbWVfaXNfYWJzb2x1dGUoJF8pID8gJF8gOiAiJHJlbF9kaXJcXCRfIiB9IEB7JCRidWlsZF9zdHJ1Y3R1cmV7IiRwcmVmaXgke25hbWV9X0lOQ0xVREVTIn19KSk7CisgICAgbXkgJGNmbGFncyA9IGpvaW4oIiAiLCBzb3J0KG1hcCB7IHMvXi1bR0xNT1daXS4qLy87IHMvLiogLiovIiQmIi87ICRfOyB9IEB7JCRidWlsZF9zdHJ1Y3R1cmV7IiRwcmVmaXgke25hbWV9X0NGTEFHUyJ9fSkpOworICAgICRjZmxhZ3MgPX4gcy88LyZsdDsvZzsKKyAgICAkY2ZsYWdzID1+IHMvPi8mZ3Q7L2c7CisKKyAgICBteSAkbGlic19yZWxlYXNlID0gIlxuICAgICI7CisgICAgbXkgJGxpYnNfZGVidWcgPSAiXG4gICAgIjsKKyAgICBpZiAoISRzdGF0aWNfbGlicmFyeSkgeworICAgICAgJGxpYnNfcmVsZWFzZSA9IGpvaW4oIjsiLCBzb3J0KGdyZXAgL14oPyFsaWJnaXRcLmxpYnx4ZGlmZlwvbGliXC5saWJ8dmNzLXN2blwvbGliXC5saWIpLywgQHskJGJ1aWxkX3N0cnVjdHVyZXsiJHByZWZpeCR7bmFtZX1fTElCUyJ9fSkpOworICAgICAgJGxpYnNfZGVidWcgPSAkbGlic19yZWxlYXNlOworICAgICAgJGxpYnNfZGVidWcgPX4gcy96bGliXC5saWIvemxpYmRcLmxpYi9nOworICAgICAgJGxpYnNfZGVidWcgPX4gcy9saWJjdXJsXC5saWIvbGliY3VybC1kXC5saWIvZzsKKyAgICB9CisKKyAgICAkZGVmaW5lcyA9fiBzLy1ELy9nOworICAgICRkZWZpbmVzID1+IHMvPC8mbHQ7L2c7CisgICAgJGRlZmluZXMgPX4gcy8+LyZndDsvZzsKKyAgICAkZGVmaW5lcyA9fiBzL1wnLy9nOworCisgICAgZGllICJDb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgJHRhcmdldCBmb3IgJGxhYmVsIHByb2plY3QhXG4iIHVubGVzcyAoLWQgIiR0YXJnZXQiIHx8IG1rZGlyICIkdGFyZ2V0Iik7CisKKyAgICBvcGVuIEYsICI+JHZjeHByb2oiIG9yIGRpZSAiQ291bGQgbm90IG9wZW4gJHZjeHByb2ogZm9yIHdyaXRpbmchXG4iOworICAgIGJpbm1vZGUgRiwgIjpjcmxmIDp1dGY4IjsKKyAgICBwcmludCBGIGNocigweEZFRkYpOworICAgIHByaW50IEYgPDwgIkVPTSI7Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjE0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+JHV1aWQ8L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8VkNQS0dBcmNoIENvbmRpdGlvbj0iJ1wkKFBsYXRmb3JtKSc9PSdXaW4zMiciPng4Ni13aW5kb3dzPC9WQ1BLR0FyY2g+CisgICAgPFZDUEtHQXJjaCBDb25kaXRpb249IidcJChQbGF0Zm9ybSknIT0nV2luMzInIj54NjQtd2luZG93czwvVkNQS0dBcmNoPgorICAgIDxWQ1BLR0FyY2hEaXJlY3Rvcnk+JGNkdXBcXGNvbXBhdFxcdmNidWlsZFxcdmNwa2dcXGluc3RhbGxlZFxcXCQoVkNQS0dBcmNoKTwvVkNQS0dBcmNoRGlyZWN0b3J5PgorICAgIDxWQ1BLR0JpbkRpcmVjdG9yeSBDb25kaXRpb249IidcJChDb25maWd1cmF0aW9uKSc9PSdEZWJ1ZyciPlwkKFZDUEtHQXJjaERpcmVjdG9yeSlcXGRlYnVnXFxiaW48L1ZDUEtHQmluRGlyZWN0b3J5PgorICAgIDxWQ1BLR0xpYkRpcmVjdG9yeSBDb25kaXRpb249IidcJChDb25maWd1cmF0aW9uKSc9PSdEZWJ1ZyciPlwkKFZDUEtHQXJjaERpcmVjdG9yeSlcXGRlYnVnXFxsaWI8L1ZDUEtHTGliRGlyZWN0b3J5PgorICAgIDxWQ1BLR0JpbkRpcmVjdG9yeSBDb25kaXRpb249IidcJChDb25maWd1cmF0aW9uKSchPSdEZWJ1ZyciPlwkKFZDUEtHQXJjaERpcmVjdG9yeSlcXGJpbjwvVkNQS0dCaW5EaXJlY3Rvcnk+CisgICAgPFZDUEtHTGliRGlyZWN0b3J5IENvbmRpdGlvbj0iJ1wkKENvbmZpZ3VyYXRpb24pJyE9J0RlYnVnJyI+XCQoVkNQS0dBcmNoRGlyZWN0b3J5KVxcbGliPC9WQ1BLR0xpYkRpcmVjdG9yeT4KKyAgICA8VkNQS0dJbmNsdWRlRGlyZWN0b3J5PlwkKFZDUEtHQXJjaERpcmVjdG9yeSlcXGluY2x1ZGU8L1ZDUEtHSW5jbHVkZURpcmVjdG9yeT4KKyAgICA8VkNQS0dMaWJzIENvbmRpdGlvbj0iJ1wkKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyI+JGxpYnNfZGVidWc8L1ZDUEtHTGlicz4KKyAgICA8VkNQS0dMaWJzIENvbmRpdGlvbj0iJ1wkKENvbmZpZ3VyYXRpb24pJyE9J0RlYnVnJyI+JGxpYnNfcmVsZWFzZTwvVkNQS0dMaWJzPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iXCQoVkNUYXJnZXRzUGF0aClcXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInXCQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJ1wkKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+JGNvbmZpZ190eXBlPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8IS0tIDxDaGFyYWN0ZXJTZXQ+VVRGLTg8L0NoYXJhY3RlclNldD4gLS0+CisgICAgPE91dERpcj4uLlxcPC9PdXREaXI+CisgICAgPCEtLSA8SW50RGlyPlwkKFByb2plY3REaXIpXCQoQ29uZmlndXJhdGlvbilcXDwvSW50RGlyPiAtLT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IlwkKFZDVGFyZ2V0c1BhdGgpXFxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJTaGFyZWQiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IlwkKFVzZXJSb290RGlyKVxcTWljcm9zb2Z0LkNwcC5cJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJ1wkKFVzZXJSb290RGlyKVxcTWljcm9zb2Z0LkNwcC5cJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdD5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8RW5hYmxlTWFuYWdlZEluY3JlbWVudGFsQnVpbGQ+dHJ1ZTwvRW5hYmxlTWFuYWdlZEluY3JlbWVudGFsQnVpbGQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4kY2ZsYWdzICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiRjZHVwOyRjZHVwXFxjb21wYXQ7JGNkdXBcXGNvbXBhdFxccmVnZXg7JGNkdXBcXGNvbXBhdFxcd2luMzI7JGNkdXBcXGNvbXBhdFxccG9sbDskY2R1cFxcY29tcGF0XFx2Y2J1aWxkXFxpbmNsdWRlO1wkKFZDUEtHSW5jbHVkZURpcmVjdG9yeSk7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxFbmFibGVQYXJhbGxlbENvZGVHZW5lcmF0aW9uIC8+CisgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlciAvPgorICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaWI+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICA8L0xpYj4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPlwkKFZDUEtHTGliRGlyZWN0b3J5KTslKEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+XCQoVkNQS0dMaWJzKTtcJChBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz5pbnZhbGlkY29udGludWUub2JqICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KKyAgICAgIDxFbnRyeVBvaW50U3ltYm9sPndtYWluQ1JUU3RhcnR1cDwvRW50cnlQb2ludFN5bWJvbD4KKyAgICAgIDxNYW5pZmVzdEZpbGU+JGNkdXBcXGNvbXBhdFxcd2luMzJcXGdpdC5tYW5pZmVzdDwvTWFuaWZlc3RGaWxlPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgPC9MaW5rPgorRU9NCisgICAgaWYgKCR0YXJnZXQgZXEgJ2xpYmdpdCcpIHsKKyAgICAgICAgcHJpbnQgRiA8PCAiRU9NIjsKKyAgICA8UHJlQnVpbGRFdmVudCBDb25kaXRpb249IiFFeGlzdHMoJyRjZHVwXFxjb21wYXRcXHZjYnVpbGRcXHZjcGtnXFxpbnN0YWxsZWRcXFwkKFZDUEtHQXJjaClcXGluY2x1ZGVcXG9wZW5zc2xcXHNzbC5oJykiPgorICAgICAgPE1lc3NhZ2U+SW5pdGlhbGl6ZSBWQ1BLRzwvTWVzc2FnZT4KKyAgICAgIDxDb21tYW5kPmRlbCAiJGNkdXBcXGNvbXBhdFxcdmNidWlsZFxcdmNwa2ciPC9Db21tYW5kPgorICAgICAgPENvbW1hbmQ+Y2FsbCAiJGNkdXBcXGNvbXBhdFxcdmNidWlsZFxcdmNwa2dfaW5zdGFsbC5iYXQiPC9Db21tYW5kPgorICAgIDwvUHJlQnVpbGRFdmVudD4KK0VPTQorICAgIH0KKyAgICBwcmludCBGIDw8ICJFT00iOworICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJ1wkKFBsYXRmb3JtKSc9PSdXaW4zMiciPgorICAgIDxMaW5rPgorICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInXCQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRzskZGVmaW5lczslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IidcJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRzskZGVmaW5lczslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+CisgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+CisgICAgICA8RmF2b3JTaXplT3JTcGVlZD5TcGVlZDwvRmF2b3JTaXplT3JTcGVlZD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorRU9NCisgICAgZm9yZWFjaChAc291cmNlcykgeworICAgICAgICBwcmludCBGIDw8ICJFT00iOworICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJF8iIC8+CitFT00KKyAgICB9CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKyAgPC9JdGVtR3JvdXA+CitFT00KKyAgICBpZiAoISRzdGF0aWNfbGlicmFyeSB8fCAkdGFyZ2V0ID1+ICd2Y3Mtc3ZuJyB8fCAkdGFyZ2V0ID1+ICd4ZGlmZicpIHsKKyAgICAgIG15ICR1dWlkX2xpYmdpdCA9ICQkYnVpbGRfc3RydWN0dXJleyJMSUJTX2xpYmdpdF9HVUlEIn07CisgICAgICBteSAkdXVpZF94ZGlmZl9saWIgPSAkJGJ1aWxkX3N0cnVjdHVyZXsiTElCU194ZGlmZi9saWJfR1VJRCJ9OworCisgICAgICBwcmludCBGIDw8ICJFT00iOworICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9IiRjZHVwXFxsaWJnaXRcXGxpYmdpdC52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PiR1dWlkX2xpYmdpdDwvUHJvamVjdD4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorRU9NCisgICAgICBpZiAoISgkbmFtZSA9fiAneGRpZmYnKSkgeworICAgICAgICBwcmludCBGIDw8ICJFT00iOworICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9IiRjZHVwXFx4ZGlmZlxcbGliXFx4ZGlmZl9saWIudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD4kdXVpZF94ZGlmZl9saWI8L1Byb2plY3Q+CisgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KK0VPTQorICAgICAgfQorICAgICAgaWYgKCRuYW1lID1+IC8odGVzdC0obGluZS1idWZmZXJ8c3ZuLWZlKXxeZ2l0LXJlbW90ZS10ZXN0c3ZuKVwuZXhlJC8pIHsKKyAgICAgICAgbXkgJHV1aWRfdmNzX3N2bl9saWIgPSAkJGJ1aWxkX3N0cnVjdHVyZXsiTElCU192Y3Mtc3ZuL2xpYl9HVUlEIn07CisgICAgICAgIHByaW50IEYgPDwgIkVPTSI7CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0iJGNkdXBcXHZjcy1zdm5cXGxpYlxcdmNzLXN2bl9saWIudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD4kdXVpZF92Y3Nfc3ZuX2xpYjwvUHJvamVjdD4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorRU9NCisgICAgICB9CisgICAgICBwcmludCBGIDw8ICJFT00iOworICA8L0l0ZW1Hcm91cD4KK0VPTQorICAgIH0KKyAgICBwcmludCBGIDw8ICJFT00iOworICA8SW1wb3J0IFByb2plY3Q9IlwkKFZDVGFyZ2V0c1BhdGgpXFxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CitFT00KKyAgICBpZiAoISRzdGF0aWNfbGlicmFyeSkgeworICAgICAgcHJpbnQgRiA8PCAiRU9NIjsKKyAgPFRhcmdldCBOYW1lPSIke3RhcmdldH1fQWZ0ZXJCdWlsZCIgQWZ0ZXJUYXJnZXRzPSJBZnRlckJ1aWxkIj4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgPERMTHNBbmRQREJzIEluY2x1ZGU9IlwkKFZDUEtHQmluRGlyZWN0b3J5KVxcKi5kbGw7XCQoVkNQS0dCaW5EaXJlY3RvcnkpXFwqLnBkYiIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICA8Q29weSBTb3VyY2VGaWxlcz0iQChETExzQW5kUERCcykiIERlc3RpbmF0aW9uRm9sZGVyPSJcJChPdXREaXIpIiBTa2lwVW5jaGFuZ2VkRmlsZXM9InRydWUiIFVzZUhhcmRsaW5rc0lmUG9zc2libGU9InRydWUiIC8+CisgICAgPE1ha2VEaXIgRGlyZWN0b3JpZXM9Ii4uXFx0ZW1wbGF0ZXNcXGJsdFxcYnJhbmNoZXMiIC8+CisgIDwvVGFyZ2V0PgorRU9NCisgICAgfQorICAgIGlmICgkdGFyZ2V0IGVxICdnaXQnKSB7CisgICAgICBwcmludCBGICIgIDxJbXBvcnQgUHJvamVjdD1cIkxpbmtPckNvcHlCdWlsdGlucy50YXJnZXRzXCIgLz5cbiI7CisgICAgfQorICAgIGlmICgkdGFyZ2V0IGVxICdnaXQtcmVtb3RlLWh0dHAnKSB7CisgICAgICBwcmludCBGICIgIDxJbXBvcnQgUHJvamVjdD1cIkxpbmtPckNvcHlSZW1vdGVIdHRwLnRhcmdldHNcIiAvPlxuIjsKKyAgICB9CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKzwvUHJvamVjdD4KK0VPTQorICAgIGNsb3NlIEY7Cit9CisKK3N1YiBjcmVhdGVHbHVlUHJvamVjdCB7CisgICAgbXkgKCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgcHJpbnQgIkdlbmVyYXRlIHNvbHV0aW9ucyBmaWxlXG4iOworICAgICRyZWxfZGlyID0gIi4uXFwkcmVsX2RpciI7CisgICAgJHJlbF9kaXIgPX4gcy9cLy9cXC9nOworICAgIG15ICRTTE5fSEVBRCA9ICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiAxMS4wMFxuIyBWaXN1YWwgU3R1ZGlvIDIwMTBcbiI7CisgICAgbXkgJFNMTl9QUkUgID0gIlByb2plY3QoXCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfVwiKSA9ICI7CisgICAgbXkgJFNMTl9QT1NUID0gIlxuRW5kUHJvamVjdFxuIjsKKworICAgIG15IEBsaWJzID0gQHskYnVpbGRfc3RydWN0dXJleyJMSUJTIn19OworICAgIG15IEB0bXA7CisgICAgZm9yZWFjaCAoQGxpYnMpIHsKKyAgICAgICAgJF8gPX4gcy9cLmEvLzsKKyAgICAgICAgcHVzaChAdG1wLCAkXyk7CisgICAgfQorICAgIEBsaWJzID0gQHRtcDsKKworICAgIG15IEBhcHBzID0gQHskYnVpbGRfc3RydWN0dXJleyJBUFBTIn19OworICAgIEB0bXAgPSAoKTsKKyAgICBmb3JlYWNoIChAYXBwcykgeworICAgICAgICAkXyA9fiBzL1wuZXhlLy87CisgICAgICAgIGlmICgkXyBlcSAiZ2l0IiApIHsKKyAgICAgICAgICAgIHVuc2hpZnQoQHRtcCwgJF8pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAdG1wLCAkXyk7CisgICAgICAgIH0KKyAgICB9CisgICAgQGFwcHMgPSBAdG1wOworCisgICAgb3BlbiBGLCAiPmdpdC5zbG4iIHx8IGRpZSAiQ291bGQgbm90IG9wZW4gZ2l0LnNsbiBmb3Igd3JpdGluZyFcbiI7CisgICAgYmlubW9kZSBGLCAiOmNybGYgOnV0ZjgiOworICAgIHByaW50IEYgY2hyKDB4RkVGRik7CisgICAgcHJpbnQgRiAiJFNMTl9IRUFEIjsKKworICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgIG15ICRhcHBuYW1lID0gJF87CisgICAgICAgIG15ICR1dWlkID0gJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiAiJFNMTl9QUkUiOworCW15ICR2Y3hwcm9qID0gJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X1ZDWFBST0oifTsKKwkkdmN4cHJvaiA9fiBzL1wvL1xcL2c7CisgICAgICAgICRhcHBuYW1lID1+IHMvLipcLy8vOworICAgICAgICBwcmludCBGICJcIiR7YXBwbmFtZX1cIiwgXCIke3ZjeHByb2p9XCIsIFwiJHt1dWlkfVwiIjsKKyAgICAgICAgcHJpbnQgRiAiJFNMTl9QT1NUIjsKKyAgICB9CisgICAgZm9yZWFjaCAoQGxpYnMpIHsKKyAgICAgICAgbXkgJGxpYm5hbWUgPSAkXzsKKyAgICAgICAgbXkgJHV1aWQgPSAkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fR1VJRCJ9OworICAgICAgICBwcmludCBGICIkU0xOX1BSRSI7CisgICAgICAgIG15ICR2Y3hwcm9qID0gJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X1ZDWFBST0oifTsKKwkkdmN4cHJvaiA9fiBzL1wvL1xcL2c7CisgICAgICAgICRsaWJuYW1lID1+IHMvXC8vXy9nOworICAgICAgICBwcmludCBGICJcIiR7bGlibmFtZX1cIiwgXCIke3ZjeHByb2p9XCIsIFwiJHt1dWlkfVwiIjsKKyAgICAgICAgcHJpbnQgRiAiJFNMTl9QT1NUIjsKKyAgICB9CisKKyAgICBwcmludCBGIDw8ICJFT00iOworR2xvYmFsCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24KKwkJRGVidWd8eDY0ID0gRGVidWd8eDY0CisJCURlYnVnfHg4NiA9IERlYnVnfHg4NgorCQlSZWxlYXNlfHg2NCA9IFJlbGVhc2V8eDY0CisJCVJlbGVhc2V8eDg2ID0gUmVsZWFzZXx4ODYKKwlFbmRHbG9iYWxTZWN0aW9uCitFT00KKyAgICBwcmludCBGIDw8ICJFT00iOworCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uCitFT00KKyAgICBmb3JlYWNoIChAYXBwcykgeworICAgICAgICBteSAkYXBwbmFtZSA9ICRfOworICAgICAgICBteSAkdXVpZCA9ICRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9HVUlEIn07CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjRcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0XG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0XG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjRcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyXG4iOworICAgIH0KKyAgICBmb3JlYWNoIChAbGlicykgeworICAgICAgICBteSAkbGlibmFtZSA9ICRfOworICAgICAgICBteSAkdXVpZCA9ICRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9HVUlEIn07CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjRcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0XG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5EZWJ1Z3x4ODYuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0XG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjRcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyXG4iOworICAgIH0KKworICAgIHByaW50IEYgPDwgIkVPTSI7CisJRW5kR2xvYmFsU2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uCisJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQorCUVuZEdsb2JhbFNlY3Rpb24KK0VuZEdsb2JhbAorRU9NCisgICAgY2xvc2UgRjsKK30KKworMTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL2VuZ2luZS5wbCBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL2VuZ2luZS5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNzA5Nzg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9idWlsZHN5c3RlbXMvZW5naW5lLnBsCkBAIC0wLDAgKzEsMzk0IEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRG8gbm90IGNhbGwgdGhpcyBzY3JpcHQgZGlyZWN0bHkhCisjCisjIFRoZSBnZW5lcmF0ZSBzY3JpcHQgZW5zdXJlcyB0aGF0IEBJTkMgaXMgY29ycmVjdCBiZWZvcmUgdGhlIGVuZ2luZQorIyBpcyBleGVjdXRlZC4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IE1hcml1cyBTdG9ybS1PbHNlbiA8bXN0b3Jtb0BnbWFpbC5jb20+CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit1c2Ugc3RyaWN0OwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEZpbGU6OlNwZWM7Cit1c2UgQ3dkOwordXNlIEdlbmVyYXRvcnM7Cit1c2UgVGV4dDo6UGFyc2VXb3JkczsKKworbXkgKCVidWlsZF9zdHJ1Y3R1cmUsICVjb21waWxlX29wdGlvbnMsIEBtYWtlZHJ5KTsKK215ICRvdXRfZGlyID0gZ2V0Y3dkKCk7CitteSAkZ2l0X2RpciA9ICRvdXRfZGlyOworJGdpdF9kaXIgPX4gcz1cXD0vPWc7CiskZ2l0X2RpciA9IGRpcm5hbWUoJGdpdF9kaXIpIHdoaWxlICghLWUgIiRnaXRfZGlyL2dpdC5jIiAmJiAiJGdpdF9kaXIiIG5lICIiKTsKK2RpZSAiQ291bGRuJ3QgZmluZCBHaXQgcmVwbyIgaWYgKCIkZ2l0X2RpciIgZXEgIiIpOworCitteSBAZ2VucyA9IEdlbmVyYXRvcnM6OmF2YWlsYWJsZSgpOworbXkgJGdlbiA9ICJWY3Byb2oiOworCitzdWIgc2hvd1VzYWdlCit7CisgICAgbXkgJGdlbmxpc3QgPSBqb2luKCcsICcsIEBnZW5zKTsKKyAgICBwcmludCA8PCAiRU9NIjsKK2dlbmVyYXRlIHVzYWdlOgorICAtZyA8R0VORVJBVE9SPiAgLS1nZW4gPEdFTkVSQVRPUj4gU3BlY2lmeSB0aGUgYnVpbGRzeXN0ZW0gZ2VuZXJhdG9yICAgIChkZWZhdWx0OiAkZ2VuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmxlOiAkZ2VubGlzdAorICAtbyA8UEFUSD4gICAgICAgLS1vdXQgPFBBVEg+ICAgICAgU3BlY2lmeSBvdXRwdXQgZGlyZWN0b3J5IGdlbmVyYXRpb24gIChkZWZhdWx0OiAuKQorICAgICAgICAgICAgICAgICAgLS1tYWtlLW91dCA8UEFUSD4gV3JpdGUgdGhlIG91dHB1dCBvZiBHTlUgTWFrZSBpbnRvIGEgZmlsZQorICAtaSA8RklMRT4gICAgICAgLS1pbiA8RklMRT4gICAgICAgU3BlY2lmeSBpbnB1dCBmaWxlLCBpbnN0ZWFkIG9mIHJ1bm5pbmcgR05VIE1ha2UKKyAgLWgsLT8gICAgICAgICAgIC0taGVscCAgICAgICAgICAgIFRoaXMgaGVscAorRU9NCisgICAgZXhpdCAwOworfQorCisjIFBhcnNlIGNvbW1hbmQtbGluZSBvcHRpb25zCitteSAkbWFrZV9vdXQ7Cit3aGlsZSAoQEFSR1YpIHsKKyAgICBteSAkYXJnID0gc2hpZnQgQEFSR1Y7CisgICAgaWYgKCIkYXJnIiBlcSAiLWgiIHx8ICIkYXJnIiBlcSAiLS1oZWxwIiB8fCAiJGFyZyIgZXEgIi0/IikgeworCXNob3dVc2FnZSgpOworCWV4aXQoMCk7CisgICAgfSBlbHNpZigiJGFyZyIgZXEgIi0tb3V0IiB8fCAiJGFyZyIgZXEgIi1vIikgeworCSRvdXRfZGlyID0gc2hpZnQgQEFSR1Y7CisgICAgfSBlbHNpZigiJGFyZyIgZXEgIi0tbWFrZS1vdXQiKSB7CisJJG1ha2Vfb3V0ID0gc2hpZnQgQEFSR1Y7CisgICAgfSBlbHNpZigiJGFyZyIgZXEgIi0tZ2VuIiB8fCAiJGFyZyIgZXEgIi1nIikgeworCSRnZW4gPSBzaGlmdCBAQVJHVjsKKyAgICB9IGVsc2lmKCIkYXJnIiBlcSAiLS1pbiIgfHwgIiRhcmciIGVxICItaSIpIHsKKwlteSAkaW5maWxlID0gc2hpZnQgQEFSR1Y7CisgICAgICAgIG9wZW4oRiwgIjwkaW5maWxlIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGluZmlsZSI7CisgICAgICAgIEBtYWtlZHJ5ID0gPEY+OworICAgICAgICBjbG9zZShGKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkaWUgIlVua25vd24gb3B0aW9uOiAiIC4gJGFyZzsKKyAgICB9Cit9CisKKyMgTk9UIHVzaW5nIEZpbGU6OlNwZWMtPnJlbDJhYnMoJHBhdGgsICRiYXNlKSBoZXJlLCBhcworIyBpdCBmYWlscyBiYWRseSBmb3IgbWUgaW4gdGhlIG1zeXNnaXQgZW52aXJvbm1lbnQKKyRnaXRfZGlyID0gRmlsZTo6U3BlYy0+cmVsMmFicygkZ2l0X2Rpcik7Ciskb3V0X2RpciA9IEZpbGU6OlNwZWMtPnJlbDJhYnMoJG91dF9kaXIpOworbXkgJHJlbF9kaXIgPSBtYWtlT3V0UmVsMkdpdCgkZ2l0X2RpciwgJG91dF9kaXIpOworCisjIFByaW50IHNvbWUgaW5mb3JtYXRpb24gc28gdGhlIHVzZXIgZmVlbHMgaW5mb3JtZWQKK3ByaW50IDw8ICJFT00iOworLS0tLS0KK0dlbmVyYXRvcjogJGdlbgorR2l0IGRpcjogICAkZ2l0X2RpcgorT3V0IGRpcjogICAkb3V0X2RpcgorLS0tLS0KK1J1bm5pbmcgR05VIE1ha2UgdG8gZmlndXJlIG91dCBidWlsZCBzdHJ1Y3R1cmUuLi4KK0VPTQorCisjIFBpcGUgYSBtYWtlIC0tZHJ5LXJ1biBpbnRvIGEgdmFyaWFibGUsIGlmIG5vdCBhbHJlYWR5IGxvYWRlZCBmcm9tIGZpbGUKKyMgQ2FwdHVyZSB0aGUgbWFrZSBkcnkgc3RkZXJyIHRvIGZpbGUgZm9yIHJldmlldyAod2lsbCBiZSBlbXB0eSBmb3IgYSByZWxlYXNlIGJ1aWxkKS4KKworbXkgJEVycnNGaWxlID0gIm1zdmMtYnVpbGQtbWFrZWRyeWVycm9ycy50eHQiOworQG1ha2VkcnkgPSBgbWFrZSAtQyAkZ2l0X2RpciAtbiBNU1ZDPTEgU0tJUF9WQ1BLRz0xIFY9MSAyPiRFcnJzRmlsZWAKK2lmICFAbWFrZWRyeTsKKyMgdGVzdCBmb3IgYW4gZW1wdHkgRXJyb3JzIGZpbGUgYW5kIHJlbW92ZSBpdAordW5saW5rICRFcnJzRmlsZSBpZiAtZiAteiAkRXJyc0ZpbGU7CisKK2lmIChkZWZpbmVkICRtYWtlX291dCkgeworICAgIG9wZW4gT1VULCAiPiIgLiAkbWFrZV9vdXQ7CisgICAgcHJpbnQgT1VUIEBtYWtlZHJ5OworICAgIGNsb3NlIE9VVDsKK30KKworIyBQYXJzZSB0aGUgbWFrZSBvdXRwdXQgaW50byB1c2FibGUgaW5mbworcGFyc2VNYWtlT3V0cHV0KCk7CisKKyMgRmluYWxseSwgYXNrIHRoZSBnZW5lcmF0b3IgdG8gc3RhcnQgZ2VuZXJhdGluZy4uCitHZW5lcmF0b3JzOjpnZW5lcmF0ZSgkZ2VuLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKTsKKworIyBtYWluIGZsb3cgZW5kcyBoZXJlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisjIDEpIHBhdGg6IC9mb28vYmFyL2JheiAgICAgICAgMikgcGF0aDogL2Zvby9iYXIvYmF6ICAgMykgcGF0aDogL2Zvby9iYXIvYmF6CisjICAgIGJhc2U6IC9mb28vYmFyL2Jhei90ZW1wICAgICAgYmFzZTogL2Zvby9iYXIgICAgICAgICAgYmFzZTogL3RtcAorIyAgICByZWw6ICAuLiAgICAgICAgICAgICAgICAgICAgIHJlbDogIGJheiAgICAgICAgICAgICAgIHJlbDogIC4uL2Zvby9iYXIvYmF6CitzdWIgbWFrZU91dFJlbDJHaXQKK3sKKyAgICBteSAoJHBhdGgsICRiYXNlKSA9IEBfOworICAgIG15ICRyZWw7CisgICAgaWYgKCIkcGF0aCIgZXEgIiRiYXNlIikgeworICAgICAgICByZXR1cm4gIi4iOworICAgIH0gZWxzaWYgKCRiYXNlID1+IC9eJHBhdGgvKSB7CisgICAgICAgICMgY2FzZSAxCisgICAgICAgIG15ICR0bXAgPSAkYmFzZTsKKyAgICAgICAgJHRtcCA9fiBzL14kcGF0aC8vOworICAgICAgICBmb3JlYWNoIChzcGxpdCgnLycsICR0bXApKSB7CisgICAgICAgICAgICAkcmVsIC49ICIuLi8iIGlmICgiJF8iIG5lICIiKTsKKyAgICAgICAgfQorICAgIH0gZWxzaWYgKCRwYXRoID1+IC9eJGJhc2UvKSB7CisgICAgICAgICMgY2FzZSAyCisgICAgICAgICRyZWwgPSAkcGF0aDsKKyAgICAgICAgJHJlbCA9fiBzL14kYmFzZS8vOworICAgICAgICAkcmVsID0gIi4vJHJlbCI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbXkgJHRtcCA9ICRiYXNlOworICAgICAgICBmb3JlYWNoIChzcGxpdCgnLycsICR0bXApKSB7CisgICAgICAgICAgICAkcmVsIC49ICIuLi8iIGlmICgiJF8iIG5lICIiKTsKKyAgICAgICAgfQorICAgICAgICAkcmVsIC49ICRwYXRoOworICAgIH0KKyAgICAkcmVsID1+IHMvXC9cLy9cLy9nOyAjIHNpbXBsaWZ5CisgICAgJHJlbCA9fiBzL1wvJC8vOyAgICAgIyBkb24ndCBlbmQgd2l0aCAvCisgICAgcmV0dXJuICRyZWw7Cit9CisKK3N1YiBwYXJzZU1ha2VPdXRwdXQKK3sKKyAgICBwcmludCAiUGFyc2luZyBHTlUgTWFrZSBvdXRwdXQgdG8gZmlndXJlIG91dCBidWlsZCBzdHJ1Y3R1cmUuLi5cbiI7CisgICAgbXkgJGxpbmUgPSAwOworICAgIHdoaWxlIChteSAkdGV4dCA9IHNoaWZ0IEBtYWtlZHJ5KSB7CisgICAgICAgIG15ICRhdGVfbmV4dDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgJGF0ZV9uZXh0ID0gMDsKKyAgICAgICAgICAgICRsaW5lKys7CisgICAgICAgICAgICBjaG9tcCAkdGV4dDsKKyAgICAgICAgICAgIGNob3AgJHRleHQgaWYgKCR0ZXh0ID1+IC9cciQvKTsKKyAgICAgICAgICAgIGlmICgkdGV4dCA9fiAvXFwkLykgeworICAgICAgICAgICAgICAgICR0ZXh0ID1+IHMvXFwkLy87CisgICAgICAgICAgICAgICAgJHRleHQgLj0gc2hpZnQgQG1ha2Vkcnk7CisgICAgICAgICAgICAgICAgJGF0ZV9uZXh0ID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSgkYXRlX25leHQpOworCisgICAgICAgIGlmICgkdGV4dCA9fiAvXnRlc3QgLykgeworICAgICAgICAgICAgIyBvcHRpb25zIHRvIHRlc3QgKGVnIC1vKSBtYXkgYmUgbWlzdGFrZW4gZm9yIGxpbmtlciBvcHRpb25zCisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCR0ZXh0ID1+IC9eKG1rZGlyfG1zZ2ZtdCkgLykgeworICAgICAgICAgICAgIyBvcHRpb25zIHRvIHRoZSBQb3J0YWJsZSBPYmplY3QgdHJhbnNsYXRpb25zCisgICAgICAgICAgICAjIHRoZSBsaW5lICJta2RpciAuLi4gJiYgbXNnZm10IC4uLiIgY29udGFpbnMgbm8gbGlua2VyIG9wdGlvbnMKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICBpZigkdGV4dCA9fiAvIC1jIC8pIHsKKyAgICAgICAgICAgICMgY29tcGlsYXRpb24KKyAgICAgICAgICAgIGhhbmRsZUNvbXBpbGVMaW5lKCR0ZXh0LCAkbGluZSk7CisKKyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gLyAtbyAvKSB7CisgICAgICAgICAgICAjIGxpbmtpbmcgZXhlY3V0YWJsZQorICAgICAgICAgICAgaGFuZGxlTGlua0xpbmUoJHRleHQsICRsaW5lKTsKKworICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvXC5vIC8gJiYgJHRleHQgPX4gL1wuYSAvKSB7CisgICAgICAgICAgICAjIGxpYmlmeWluZworICAgICAgICAgICAgaGFuZGxlTGliTGluZSgkdGV4dCwgJGxpbmUpOworIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL15jcCAvKSB7CisjICAgICAgICAgICAgIyBjb3B5IGZpbGUgYXJvdW5kCisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvXnJtIC1mIC8pIHsKKyMgICAgICAgICAgICAjIHNoZWxsIGNvbW1hbmQKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9ebWFrZVsgXFtdLykgeworIyAgICAgICAgICAgICMgbWFrZSBvdXRwdXQKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eZWNobyAvKSB7CisjICAgICAgICAgICAgIyBlY2hvIHRvIGZpbGUKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eaWYgLykgeworIyAgICAgICAgICAgICMgc2hlbGwgY29uZGl0aW9uYWwKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9edGNsc2ggLykgeworIyAgICAgICAgICAgICMgdHJhbnNsYXRpb24gc3R1ZmYKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9edW1hc2sgLykgeworIyAgICAgICAgICAgICMgaGFuZGxpbmcgYm9pbGVycGxhdGVzCisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvXCRcKFw6XCkvKSB7CisjICAgICAgICAgICAgIyBpZ25vcmUKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eRkxBR1M9LykgeworIyAgICAgICAgICAgICMgZmxhZ3MgY2hlY2sgZm9yIGRlcGVuZGVuY2llcworIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL14nXC91c3JcL2JpblwvcGVybCcgLU1FcnJvciAtZS8pIHsKKyMgICAgICAgICAgICAjIHBlcmwgY29tbWFuZHMgZm9yIGNvcHlpbmcgZmlsZXMKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9nZW5lcmF0ZS1jbWRsaXN0XC5zaC8pIHsKKyMgICAgICAgICAgICAjIGNvbW1hbmQgZm9yIGdlbmVyYXRpbmcgbGlzdCBvZiBjb21tYW5kcworIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL25ldyBsb2NhdGlvbnMgb3IgVGNsLykgeworIyAgICAgICAgICAgICMgY29tbWFuZCBmb3IgZGV0ZWN0aW5nIFRjbC9UayBjaGFuZ2VzCisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvbWtkaXIgLXAvKSB7CisjICAgICAgICAgICAgIyBjb21tYW5kIGNyZWF0aW5nIHBhdGgKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC86IG5vIGN1c3RvbSB0ZW1wbGF0ZXMgeWV0LykgeworIyAgICAgICAgICAgICMgd2hhdGV2ZXIKKyMKKyMgICAgICAgIH0gZWxzZSB7CisjICAgICAgICAgICAgcHJpbnQgIlVuaGFuZGxlZCAobGluZTogJGxpbmUpOiAkdGV4dFxuIjsKKyAgICAgICAgfQorICAgIH0KKworIyAgICB1c2UgRGF0YTo6RHVtcGVyOworIyAgICBwcmludCAiUGFyc2VkIGJ1aWxkIHN0cnVjdHVyZTpcbiI7CisjICAgIHByaW50IER1bXBlciglYnVpbGRfc3RydWN0dXJlKTsKK30KKworIyB2YXJpYWJsZXMgZm9yIHRoZSBjb21waWxhdGlvbiBwYXJ0IG9mIGVhY2ggc3RlcAorbXkgKEBkZWZpbmVzLCBAaW5jcGF0aHMsIEBjZmxhZ3MsIEBzb3VyY2VzKTsKKworc3ViIGNsZWFyQ29tcGlsZVN0ZXAKK3sKKyAgICBAZGVmaW5lcyA9ICgpOworICAgIEBpbmNwYXRocyA9ICgpOworICAgIEBjZmxhZ3MgPSAoKTsKKyAgICBAc291cmNlcyA9ICgpOworfQorCitzdWIgcmVtb3ZlRHVwbGljYXRlcworeworICAgIG15ICglZHVwSGFzaCwgJGVudHJ5KTsKKyAgICAlZHVwSGFzaCA9IG1hcCB7ICRfLCAxIH0gQGRlZmluZXM7CisgICAgQGRlZmluZXMgPSBrZXlzICVkdXBIYXNoOworCisgICAgJWR1cEhhc2ggPSBtYXAgeyAkXywgMSB9IEBpbmNwYXRoczsKKyAgICBAaW5jcGF0aHMgPSBrZXlzICVkdXBIYXNoOworCisgICAgJWR1cEhhc2ggPSBtYXAgeyAkXywgMSB9IEBjZmxhZ3M7CisgICAgQGNmbGFncyA9IGtleXMgJWR1cEhhc2g7Cit9CisKK3N1YiBoYW5kbGVDb21waWxlTGluZQoreworICAgIG15ICgkbGluZSwgJGxpbmVubykgPSBAXzsKKyAgICBteSBAcGFydHMgPSBzaGVsbHdvcmRzKCRsaW5lKTsKKyAgICBteSAkc291cmNlZmlsZTsKKyAgICBzaGlmdChAcGFydHMpOyAjIGlnbm9yZSBjbWQKKyAgICB3aGlsZSAobXkgJHBhcnQgPSBzaGlmdCBAcGFydHMpIHsKKyAgICAgICAgaWYgKCIkcGFydCIgZXEgIi1vIikgeworICAgICAgICAgICAgIyBpZ25vcmUgb2JqZWN0IGZpbGUKKyAgICAgICAgICAgIHNoaWZ0IEBwYXJ0czsKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWMiKSB7CisgICAgICAgICAgICAjIGlnbm9yZSBjb21waWxlIGZsYWcKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWMiKSB7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLj8tSS8pIHsKKyAgICAgICAgICAgIHB1c2goQGluY3BhdGhzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLj8tRC8pIHsKKyAgICAgICAgICAgIHB1c2goQGRlZmluZXMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14tLykgeworICAgICAgICAgICAgcHVzaChAY2ZsYWdzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihjfGNjfGNwcCkkLykgeworICAgICAgICAgICAgJHNvdXJjZWZpbGUgPSAkcGFydDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpZSAiVW5oYW5kbGVkIGNvbXBpbGVyIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorICAgIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9DRkxBR1MifX0gPSBAY2ZsYWdzOworICAgIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9ERUZJTkVTIn19ID0gQGRlZmluZXM7CisgICAgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0lOQ1BBVEhTIn19ID0gQGluY3BhdGhzOworICAgIGNsZWFyQ29tcGlsZVN0ZXAoKTsKK30KKworc3ViIGhhbmRsZUxpYkxpbmUKK3sKKyAgICBteSAoJGxpbmUsICRsaW5lbm8pID0gQF87CisgICAgbXkgKEBvYmpmaWxlcywgQGxmbGFncywgJGxpYm91dCwgJHBhcnQpOworICAgICMga2lsbCBjbWQgYW5kIHJtICdwcmVmaXgnCisgICAgJGxpbmUgPX4gcy9ecm0gLWYgLiogJiYgLiogcmNzIC8vOworICAgIG15IEBwYXJ0cyA9IHNoZWxsd29yZHMoJGxpbmUpOworICAgIHdoaWxlICgkcGFydCA9IHNoaWZ0IEBwYXJ0cykgeworICAgICAgICBpZiAoJHBhcnQgPX4gL14tLykgeworICAgICAgICAgICAgcHVzaChAbGZsYWdzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihvfG9iaikkLykgeworICAgICAgICAgICAgcHVzaChAb2JqZmlsZXMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKGF8bGliKSQvKSB7CisgICAgICAgICAgICAkbGlib3V0ID0gJHBhcnQ7CisgICAgICAgICAgICAkbGlib3V0ID1+IHMvXC5hJC8vOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJVbmhhbmRsZWQgbGliIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorIyAgICBwcmludCAiTGliT3V0OiAnJGxpYm91dCdcbkxGbGFnczogQGxmbGFnc1xuT2ZpbGVzOiBAb2JqZmlsZXNcbiI7CisjICAgIGV4aXQoMSk7CisgICAgZm9yZWFjaCAoQG9iamZpbGVzKSB7CisgICAgICAgIG15ICRzb3VyY2VmaWxlID0gJF87CisgICAgICAgICRzb3VyY2VmaWxlID1+IHMvXC5vJC8uYy87CisgICAgICAgIHB1c2goQHNvdXJjZXMsICRzb3VyY2VmaWxlKTsKKyAgICAgICAgcHVzaChAY2ZsYWdzLCBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fQ0ZMQUdTIn19KTsKKyAgICAgICAgcHVzaChAZGVmaW5lcywgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0RFRklORVMifX0pOworICAgICAgICBwdXNoKEBpbmNwYXRocywgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0lOQ1BBVEhTIn19KTsKKyAgICB9CisgICAgcmVtb3ZlRHVwbGljYXRlcygpOworCisgICAgcHVzaChAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlMifX0sICRsaWJvdXQpOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH0ifX0gPSAoIl9ERUZJTkVTIiwgIl9JTkNMVURFUyIsICJfQ0ZMQUdTIiwgIl9TT1VSQ0VTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfT0JKRUNUUyIpOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fREVGSU5FUyJ9fSA9IEBkZWZpbmVzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fSU5DTFVERVMifX0gPSBAaW5jcGF0aHM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9DRkxBR1MifX0gPSBAY2ZsYWdzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fTEZMQUdTIn19ID0gQGxmbGFnczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X1NPVVJDRVMifX0gPSBAc291cmNlczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X09CSkVDVFMifX0gPSBAb2JqZmlsZXM7CisgICAgY2xlYXJDb21waWxlU3RlcCgpOworfQorCitzdWIgaGFuZGxlTGlua0xpbmUKK3sKKyAgICBteSAoJGxpbmUsICRsaW5lbm8pID0gQF87CisgICAgbXkgKEBvYmpmaWxlcywgQGxmbGFncywgQGxpYnMsICRhcHBvdXQsICRwYXJ0KTsKKyAgICBteSBAcGFydHMgPSBzaGVsbHdvcmRzKCRsaW5lKTsKKyAgICBzaGlmdChAcGFydHMpOyAjIGlnbm9yZSBjbWQKKyAgICB3aGlsZSAoJHBhcnQgPSBzaGlmdCBAcGFydHMpIHsKKyAgICAgICAgaWYgKCRwYXJ0ID1+IC9eLUlHTk9SRS8pIHsKKyAgICAgICAgICAgIHB1c2goQGxmbGFncywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXi1bR1JJTURPXS8pIHsKKyAgICAgICAgICAgICMgZWF0IGNvbXBpbGVyIGZsYWdzCisgICAgICAgIH0gZWxzaWYgKCIkcGFydCIgZXEgIi1vIikgeworICAgICAgICAgICAgJGFwcG91dCA9IHNoaWZ0IEBwYXJ0czsKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWx6IikgeworICAgICAgICAgICAgcHVzaChAbGlicywgInpsaWIubGliIik7CisgICAgICAgIH0gZWxzaWYgKCIkcGFydCIgZXEgIi1sY3J5cHRvIikgeworICAgICAgICAgICAgcHVzaChAbGlicywgImxpYmNyeXB0by5saWIiKTsKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWxzc2wiKSB7CisgICAgICAgICAgICBwdXNoKEBsaWJzLCAibGlic3NsLmxpYiIpOworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItbGN1cmwiKSB7CisgICAgICAgICAgICBwdXNoKEBsaWJzLCAibGliY3VybC5saWIiKTsKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWxleHBhdCIpIHsKKyAgICAgICAgICAgIHB1c2goQGxpYnMsICJleHBhdC5saWIiKTsKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWxpY29udiIpIHsKKyAgICAgICAgICAgIHB1c2goQGxpYnMsICJsaWJpY29udi5saWIiKTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL15bLVwvXS8pIHsKKyAgICAgICAgICAgIHB1c2goQGxmbGFncywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4oYXxsaWIpJC8pIHsKKyAgICAgICAgICAgICRwYXJ0ID1+IHMvXC5hJC8ubGliLzsKKyAgICAgICAgICAgIHB1c2goQGxpYnMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgZXEgJ2ludmFsaWRjb250aW51ZS5vYmonKSB7CisgICAgICAgICAgICAjIGlnbm9yZSAtIGtub3duIHRvIE1TVkMKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wubyQvKSB7CisgICAgICAgICAgICBwdXNoKEBvYmpmaWxlcywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC5vYmokLykgeworICAgICAgICAgICAgIyBkbyBub3RoaW5nLCAnbWFrZScgc2hvdWxkIG5vdCBiZSBwcm9kdWNpbmcgLm9iaiwgb25seSAubyBmaWxlcworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJVbmhhbmRsZWQgbGluayBvcHRpb24gQCBsaW5lICRsaW5lbm86ICRwYXJ0IjsKKyAgICAgICAgfQorICAgIH0KKyMgICAgcHJpbnQgIkFwcE91dDogJyRhcHBvdXQnXG5MRmxhZ3M6IEBsZmxhZ3NcbkxpYnMgIDogQGxpYnNcbk9maWxlczogQG9iamZpbGVzXG4iOworIyAgICBleGl0KDEpOworICAgIGZvcmVhY2ggKEBvYmpmaWxlcykgeworICAgICAgICBteSAkc291cmNlZmlsZSA9ICRfOworICAgICAgICAkc291cmNlZmlsZSA9fiBzL1wubyQvLmMvOworICAgICAgICBwdXNoKEBzb3VyY2VzLCAkc291cmNlZmlsZSk7CisgICAgICAgIHB1c2goQGNmbGFncywgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0NGTEFHUyJ9fSk7CisgICAgICAgIHB1c2goQGRlZmluZXMsIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9ERUZJTkVTIn19KTsKKyAgICAgICAgcHVzaChAaW5jcGF0aHMsIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9JTkNQQVRIUyJ9fSk7CisgICAgfQorICAgIHJlbW92ZUR1cGxpY2F0ZXMoKTsKKworICAgIHJlbW92ZUR1cGxpY2F0ZXMoKTsKKyAgICBwdXNoKEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQUyJ9fSwgJGFwcG91dCk7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fSJ9fSA9ICgiX0RFRklORVMiLCAiX0lOQ0xVREVTIiwgIl9DRkxBR1MiLCAiX0xGTEFHUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1NPVVJDRVMiLCAiX09CSkVDVFMiLCAiX0xJQlMiKTsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0RFRklORVMifX0gPSBAZGVmaW5lczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0lOQ0xVREVTIn19ID0gQGluY3BhdGhzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fQ0ZMQUdTIn19ID0gQGNmbGFnczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0xGTEFHUyJ9fSA9IEBsZmxhZ3M7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9TT1VSQ0VTIn19ID0gQHNvdXJjZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9PQkpFQ1RTIn19ID0gQG9iamZpbGVzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fTElCUyJ9fSA9IEBsaWJzOworICAgIGNsZWFyQ29tcGlsZVN0ZXAoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL2dlbmVyYXRlIGIvY29udHJpYi9idWlsZHN5c3RlbXMvZ2VuZXJhdGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmMxMGYyNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL2dlbmVyYXRlCkBAIC0wLDAgKzEsMjkgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBHZW5lcmF0ZSBidWlsZHN5c3RlbSBmaWxlcworIworIyBUaGlzIHNjcmlwdCBnZW5lcmF0ZSBidWlsZHN5c3RlbSBmaWxlcyBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIGEKKyMgR05VIE1ha2UgLS1kcnktcnVuLCBlbmFibGluZyBXaW5kb3dzIHVzZXJzIHRvIGRldmVsb3AgR2l0IHdpdGggdGhlaXIKKyMgdHJ1c3RlZCBJREUgd2l0aCBuYXRpdmUgcHJvamVjdHMuCisjCisjIE5vdGU6CisjIEl0IGlzIG5vdCBtZWFudCBhcyAqdGhlKiB3YXkgb2YgYnVpbGRpbmcgR2l0IHdpdGggTVNWQywgYnV0IG1lcmVseSBhCisjIGNvbnZlbmllbmNlLiBUaGUgY29ycmVjdCB3YXkgb2YgYnVpbGRpbmcgR2l0IHdpdGggTVNWQyBpcyB0byB1c2UgdGhlCisjIEdOVSBNYWtlIHRvb2wgdG8gYnVpbGQgd2l0aCB0aGUgbWFpbnRhaW5lZCBNYWtlZmlsZSBpbiB0aGUgcm9vdCBvZgorIyB0aGUgcHJvamVjdC4gSWYgeW91IGhhdmUgdGhlIG1zeXNnaXQgZW52aXJvbm1lbnQgaW5zdGFsbGVkIGFuZAorIyBhdmFpbGFibGUgaW4geW91ciBjdXJyZW50IGNvbnNvbGUsIHRvZ2V0aGVyIHdpdGggdGhlIFZpc3VhbCBTdHVkaW8KKyMgZW52aXJvbm1lbnQgeW91IHdpc2ggdG8gYnVpbGQgZm9yLCBhbGwgeW91IGhhdmUgdG8gZG8gaXMgcnVuIHRoZQorIyBjb21tYW5kOgorIyAgICAgbWFrZSBNU1ZDPTEKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IE1hcml1cyBTdG9ybS1PbHNlbiA8bXN0b3Jtb0BnbWFpbC5jb20+CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit1c2Ugc3RyaWN0OwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEN3ZDsKKworbXkgJGdpdF9kaXIgPSBnZXRjd2QoKTsKKyRnaXRfZGlyID1+IHM9XFw9Lz1nOworJGdpdF9kaXIgPSBkaXJuYW1lKCRnaXRfZGlyKSB3aGlsZSAoIS1lICIkZ2l0X2Rpci9naXQuYyIgJiYgIiRnaXRfZGlyIiBuZSAiIik7CitkaWUgIkNvdWxkbid0IGZpbmQgR2l0IHJlcG8iIGlmICgiJGdpdF9kaXIiIGVxICIiKTsKK2V4ZWMgam9pbigiICIsICgiUEVSTDVMSUI9JHtnaXRfZGlyfS9jb250cmliL2J1aWxkc3lzdGVtcyAke2dpdF9kaXJ9L2NvbnRyaWIvYnVpbGRzeXN0ZW1zL2VuZ2luZS5wbCIsIEBBUkdWKSk7CmRpZmYgLS1naXQgYS9jb250cmliL2J1aWxkc3lzdGVtcy9wYXJzZS5wbCBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL3BhcnNlLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM5NjU2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J1aWxkc3lzdGVtcy9wYXJzZS5wbApAQCAtMCwwICsxLDIyOCBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERvIG5vdCBjYWxsIHRoaXMgc2NyaXB0IGRpcmVjdGx5IQorIworIyBUaGUgZ2VuZXJhdGUgc2NyaXB0IGVuc3VyZXMgdGhhdCBASU5DIGlzIGNvcnJlY3QgYmVmb3JlIHRoZSBlbmdpbmUKKyMgaXMgZXhlY3V0ZWQuCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBNYXJpdXMgU3Rvcm0tT2xzZW4gPG1zdG9ybW9AZ21haWwuY29tPgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordXNlIHN0cmljdDsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBDd2Q7CisKK215ICRmaWxlID0gJEFSR1ZbMF07CitkaWUgIk5vIGZpbGUgcHJvdmlkZWQhIiBpZiAhZGVmaW5lZCAkZmlsZTsKKworbXkgKCRjZmxhZ3MsICR0YXJnZXQsICR0eXBlLCAkbGluZSk7CisKK29wZW4oRiwgIjwkZmlsZSIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRmaWxlIjsKK215IEBkYXRhID0gPEY+OworY2xvc2UoRik7CisKK3doaWxlIChteSAkdGV4dCA9IHNoaWZ0IEBkYXRhKSB7CisgICAgbXkgJGF0ZV9uZXh0OworICAgIGRvIHsKKyAgICAgICAgJGF0ZV9uZXh0ID0gMDsKKyAgICAgICAgJGxpbmUrKzsKKyAgICAgICAgY2hvbXAgJHRleHQ7CisgICAgICAgIGNob3AgJHRleHQgaWYgKCR0ZXh0ID1+IC9cciQvKTsKKyAgICAgICAgaWYgKCR0ZXh0ID1+IC9cXCQvKSB7CisgICAgICAgICAgICAkdGV4dCA9fiBzL1xcJC8vOworICAgICAgICAgICAgJHRleHQgLj0gc2hpZnQgQGRhdGE7CisgICAgICAgICAgICAkYXRlX25leHQgPSAxOworICAgICAgICB9CisgICAgfSB3aGlsZSgkYXRlX25leHQpOworCisgICAgaWYoJHRleHQgPX4gLyAtYyAvKSB7CisgICAgICAgICMgY29tcGlsYXRpb24KKyAgICAgICAgaGFuZGxlQ29tcGlsZUxpbmUoJHRleHQsICRsaW5lKTsKKworICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC8gLW8gLykgeworICAgICAgICAjIGxpbmtpbmcgZXhlY3V0YWJsZQorICAgICAgICBoYW5kbGVMaW5rTGluZSgkdGV4dCwgJGxpbmUpOworCisgICAgfSBlbHNpZiAoJHRleHQgPX4gL1wubyAvICYmICR0ZXh0ID1+IC9cLmEgLykgeworICAgICAgICAjIGxpYmlmeWluZworICAgICAgICBoYW5kbGVMaWJMaW5lKCR0ZXh0LCAkbGluZSk7CisKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL15jcCAvKSB7CisjICAgICAgICAjIGNvcHkgZmlsZSBhcm91bmQKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL15ybSAtZiAvKSB7CisjICAgICAgICAjIHNoZWxsIGNvbW1hbmQKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL15tYWtlWyBcW10vKSB7CisjICAgICAgICAjIG1ha2Ugb3V0cHV0CisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eZWNobyAvKSB7CisjICAgICAgICAjIGVjaG8gdG8gZmlsZQorIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXmlmIC8pIHsKKyMgICAgICAgICMgc2hlbGwgY29uZGl0aW9uYWwKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL150Y2xzaCAvKSB7CisjICAgICAgICAjIHRyYW5zbGF0aW9uIHN0dWZmCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9edW1hc2sgLykgeworIyAgICAgICAgIyBoYW5kbGluZyBib2lsZXJwbGF0ZXMKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL1wkXChcOlwpLykgeworIyAgICAgICAgIyBpZ25vcmUKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL15GTEFHUz0vKSB7CisjICAgICAgICAjIGZsYWdzIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL14nXC91c3JcL2JpblwvcGVybCcgLU1FcnJvciAtZS8pIHsKKyMgICAgICAgICMgcGVybCBjb21tYW5kcyBmb3IgY29weWluZyBmaWxlcworIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvZ2VuZXJhdGUtY21kbGlzdFwuc2gvKSB7CisjICAgICAgICAjIGNvbW1hbmQgZm9yIGdlbmVyYXRpbmcgbGlzdCBvZiBjb21tYW5kcworIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXnRlc3QgLyAmJiAkdGV4dCA9fiAvfHwgcm0gLWYgLykgeworIyAgICAgICAgIyBjb21tYW5kcyByZW1vdmluZyBleGVjdXRhYmxlcywgaWYgdGhleSBleGlzdAorIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvbmV3IGxvY2F0aW9ucyBvciBUY2wvKSB7CisjICAgICAgICAjIGNvbW1hbmQgZm9yIGRldGVjdGluZyBUY2wvVGsgY2hhbmdlcworIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvbWtkaXIgLXAvKSB7CisjICAgICAgICAjIGNvbW1hbmQgY3JlYXRpbmcgcGF0aAorIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvOiBubyBjdXN0b20gdGVtcGxhdGVzIHlldC8pIHsKKyMgICAgICAgICMgd2hhdGV2ZXIKKworICAgIH0gZWxzZSB7CisjICAgICAgICBwcmludCAiVW5oYW5kbGVkIChsaW5lOiAkbGluZSk6ICR0ZXh0XG4iOworICAgIH0KK30KK2Nsb3NlKEYpOworCisjIHVzZSBEYXRhOjpEdW1wZXI7CisjIHByaW50ICJQYXJzZWQgYnVpbGQgc3RydWN0dXJlOlxuIjsKKyMgcHJpbnQgRHVtcGVyKCVidWlsZF9zdHJ1Y3R1cmUpOworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRnVuY3Rpb25zIHVuZGVyIGhlcmUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbXkgKCVidWlsZF9zdHJ1Y3R1cmUsIEBkZWZpbmVzLCBAaW5jcGF0aHMsIEBjZmxhZ3MsIEBzb3VyY2VzKTsKKworc3ViIGNsZWFyQ29tcGlsZVN0ZXAKK3sKKyAgICBAZGVmaW5lcyA9ICgpOworICAgIEBpbmNwYXRocyA9ICgpOworICAgIEBjZmxhZ3MgPSAoKTsKKyAgICBAc291cmNlcyA9ICgpOworfQorCitzdWIgcmVtb3ZlRHVwbGljYXRlcworeworICAgIG15ICglZHVwSGFzaCwgJGVudHJ5KTsKKyAgICAlZHVwSGFzaCA9IG1hcCB7ICRfLCAxIH0gQGRlZmluZXM7CisgICAgQGRlZmluZXMgPSBrZXlzICVkdXBIYXNoOworCisgICAgJWR1cEhhc2ggPSBtYXAgeyAkXywgMSB9IEBpbmNwYXRoczsKKyAgICBAaW5jcGF0aHMgPSBrZXlzICVkdXBIYXNoOworCisgICAgJWR1cEhhc2ggPSBtYXAgeyAkXywgMSB9IEBjZmxhZ3M7CisgICAgQGNmbGFncyA9IGtleXMgJWR1cEhhc2g7CisKKyAgICAlZHVwSGFzaCA9IG1hcCB7ICRfLCAxIH0gQHNvdXJjZXM7CisgICAgQHNvdXJjZXMgPSBrZXlzICVkdXBIYXNoOworfQorCitzdWIgaGFuZGxlQ29tcGlsZUxpbmUKK3sKKyAgICBteSAoJGxpbmUsICRsaW5lbm8pID0gQF87CisgICAgbXkgQHBhcnRzID0gc3BsaXQoJyAnLCAkbGluZSk7CisgICAgc2hpZnQoQHBhcnRzKTsgIyBpZ25vcmUgY21kCisgICAgd2hpbGUgKG15ICRwYXJ0ID0gc2hpZnQgQHBhcnRzKSB7CisgICAgICAgIGlmICgiJHBhcnQiIGVxICItbyIpIHsKKyAgICAgICAgICAgICMgaWdub3JlIG9iamVjdCBmaWxlCisgICAgICAgICAgICBzaGlmdCBAcGFydHM7CisgICAgICAgIH0gZWxzaWYgKCIkcGFydCIgZXEgIi1jIikgeworICAgICAgICAgICAgIyBpZ25vcmUgY29tcGlsZSBmbGFnCisgICAgICAgIH0gZWxzaWYgKCIkcGFydCIgZXEgIi1jIikgeworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXi4/LUkvKSB7CisgICAgICAgICAgICBwdXNoKEBpbmNwYXRocywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXi4/LUQvKSB7CisgICAgICAgICAgICBwdXNoKEBkZWZpbmVzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLS8pIHsKKyAgICAgICAgICAgIHB1c2goQGNmbGFncywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4oY3xjY3xjcHApJC8pIHsKKyAgICAgICAgICAgIHB1c2goQHNvdXJjZXMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpZSAiVW5oYW5kbGVkIGNvbXBpbGVyIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorICAgICNwcmludCAiU291cmNlczogQHNvdXJjZXNcbkNGbGFnczogQGNmbGFnc1xuRGVmaW5lOiBAZGVmaW5lc1xuSW5jcGF0OiBAaW5jcGF0aHNcbiI7CisgICAgI2V4aXQoMSk7Cit9CisKK3N1YiBoYW5kbGVMaWJMaW5lCit7CisgICAgbXkgKCRsaW5lLCAkbGluZW5vKSA9IEBfOworICAgIG15IChAb2JqZmlsZXMsIEBsZmxhZ3MsICRsaWJvdXQsICRwYXJ0KTsKKyAgICAjIGtpbGwgY21kIGFuZCBybSAncHJlZml4JworICAgICRsaW5lID1+IHMvXnJtIC1mIC4qICYmIC4qIHJjcyAvLzsKKyAgICBteSBAcGFydHMgPSBzcGxpdCgnICcsICRsaW5lKTsKKyAgICB3aGlsZSAoJHBhcnQgPSBzaGlmdCBAcGFydHMpIHsKKyAgICAgICAgaWYgKCRwYXJ0ID1+IC9eLS8pIHsKKyAgICAgICAgICAgIHB1c2goQGxmbGFncywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4ob3xvYmopJC8pIHsKKyAgICAgICAgICAgIHB1c2goQG9iamZpbGVzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihhfGxpYikkLykgeworICAgICAgICAgICAgJGxpYm91dCA9ICRwYXJ0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJVbmhhbmRsZWQgbGliIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorICAgICNwcmludCAiTGliT3V0OiAnJGxpYm91dCdcbkxGbGFnczogQGxmbGFnc1xuT2ZpbGVzOiBAb2JqZmlsZXNcbiI7CisgICAgI2V4aXQoMSk7CisgICAgcmVtb3ZlRHVwbGljYXRlcygpOworICAgIHB1c2goQHskYnVpbGRfc3RydWN0dXJleyJMSUJTIn19LCAkbGlib3V0KTsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9In19ID0gKCJfREVGSU5FUyIsICJfSU5DTFVERVMiLCAiX0NGTEFHUyIsICJfU09VUkNFUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX09CSkVDVFMiKTsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X0RFRklORVMifX0gPSBAZGVmaW5lczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X0lOQ0xVREVTIn19ID0gQGluY3BhdGhzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fQ0ZMQUdTIn19ID0gQGNmbGFnczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X1NPVVJDRVMifX0gPSBAc291cmNlczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X09CSkVDVFMifX0gPSBAb2JqZmlsZXM7CisgICAgY2xlYXJDb21waWxlU3RlcCgpOworfQorCitzdWIgaGFuZGxlTGlua0xpbmUKK3sKKyAgICBteSAoJGxpbmUsICRsaW5lbm8pID0gQF87CisgICAgbXkgKEBvYmpmaWxlcywgQGxmbGFncywgQGxpYnMsICRhcHBvdXQsICRwYXJ0KTsKKyAgICBteSBAcGFydHMgPSBzcGxpdCgnICcsICRsaW5lKTsKKyAgICBzaGlmdChAcGFydHMpOyAjIGlnbm9yZSBjbWQKKyAgICB3aGlsZSAoJHBhcnQgPSBzaGlmdCBAcGFydHMpIHsKKyAgICAgICAgaWYgKCRwYXJ0ID1+IC9eLVtHUklET10vKSB7CisgICAgICAgICAgICAjIGVhdCBjb21waWxlciBmbGFncworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItbyIpIHsKKyAgICAgICAgICAgICRhcHBvdXQgPSBzaGlmdCBAcGFydHM7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLS8pIHsKKyAgICAgICAgICAgIHB1c2goQGxmbGFncywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4oYXxsaWIpJC8pIHsKKyAgICAgICAgICAgIHB1c2goQGxpYnMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKG98b2JqKSQvKSB7CisgICAgICAgICAgICBwdXNoKEBvYmpmaWxlcywgJHBhcnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJVbmhhbmRsZWQgbGliIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorICAgICNwcmludCAiQXBwT3V0OiAnJGFwcG91dCdcbkxGbGFnczogQGxmbGFnc1xuTGlicyAgOiBAbGlic1xuT2ZpbGVzOiBAb2JqZmlsZXNcbiI7CisgICAgI2V4aXQoMSk7CisgICAgcmVtb3ZlRHVwbGljYXRlcygpOworICAgIHB1c2goQHskYnVpbGRfc3RydWN0dXJleyJBUFBTIn19LCAkYXBwb3V0KTsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9In19ID0gKCJfREVGSU5FUyIsICJfSU5DTFVERVMiLCAiX0NGTEFHUyIsICJfTEZMQUdTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfU09VUkNFUyIsICJfT0JKRUNUUyIsICJfTElCUyIpOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fREVGSU5FUyJ9fSA9IEBkZWZpbmVzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fSU5DTFVERVMifX0gPSBAaW5jcGF0aHM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9DRkxBR1MifX0gPSBAY2ZsYWdzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fTEZMQUdTIn19ID0gQGxmbGFnczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X1NPVVJDRVMifX0gPSBAc291cmNlczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X09CSkVDVFMifX0gPSBAb2JqZmlsZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9MSUJTIn19ID0gQGxpYnM7CisgICAgY2xlYXJDb21waWxlU3RlcCgpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb2NjaW5lbGxlLy5naXRpZ25vcmUgYi9jb250cmliL2NvY2NpbmVsbGUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2YyOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb2NjaW5lbGxlLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorKi5wYXRjaCoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29jY2luZWxsZS9SRUFETUUgYi9jb250cmliL2NvY2NpbmVsbGUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZTgwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvY2NpbmVsbGUvUkVBRE1FCkBAIC0wLDAgKzEsNDMgQEAKK1RoaXMgZGlyZWN0b3J5IHByb3ZpZGVzIGV4YW1wbGVzIG9mIENvY2NpbmVsbGUgKGh0dHA6Ly9jb2NjaW5lbGxlLmxpcDYuZnIvKQorc2VtYW50aWMgcGF0Y2hlcyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCB0byBkZXZlbG9wZXJzLgorCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIHNlbWFudGljIHBhdGNoZXM6CisKKyAqIFVzaW5nIHRoZSBzZW1hbnRpYyB0cmFuc2Zvcm1hdGlvbiB0byBjaGVjayBmb3IgYmFkIHBhdHRlcm5zIGluIHRoZSBjb2RlOworICAgVGhlIHRhcmdldCAnbWFrZSBjb2NjaWNoZWNrJyBpcyBkZXNpZ25lZCB0byBjaGVjayBmb3IgdGhlc2UgcGF0dGVybnMgYW5kCisgICBpdCBpcyBleHBlY3RlZCB0aGF0IGFueSByZXN1bHRpbmcgcGF0Y2ggaW5kaWNhdGVzIGEgcmVncmVzc2lvbi4KKyAgIFRoZSBwYXRjaGVzIHJlc3VsdGluZyBmcm9tICdtYWtlIGNvY2NpY2hlY2snIGFyZSBzbWFsbCBhbmQgaW5mcmVxdWVudCwKKyAgIHNvIG9uY2UgdGhleSBhcmUgZm91bmQsIHRoZXkgY2FuIGJlIHNlbnQgdG8gdGhlIG1haWxpbmcgbGlzdCBhcyBwZXIgdXN1YWwuCisKKyAgIEV4YW1wbGUgZm9yIGludHJvZHVjaW5nIG5ldyBwYXR0ZXJuczoKKyAgIDY3OTQ3YzM0YWUgKGNvbnZlcnQgImhhc2hjbXAoKSAhPSAwIiB0byAiIWhhc2hlcSgpIiwgMjAxOC0wOC0yOCkKKyAgIGI4NGM3ODM4ODIgKGZzY2s6IHMvKytpID4gMS9pKysvLCAyMDE4LTEwLTI0KQorCisgICBFeGFtcGxlIG9mIGZpeGVzIHVzaW5nIHRoaXMgYXBwcm9hY2g6CisgICAyNDhmNjZlZDhlIChydW4tY29tbWFuZDogdXNlIHN0cmJ1Zl9hZGRzdHIoKSBmb3IgYWRkaW5nIGEgc3RyaW5nIHRvCisgICAgICAgICAgICAgICBhIHN0cmJ1ZiwgMjAxOC0wMy0yNSkKKyAgIGY5MTlmZmViZWQgKFVzZSBNT1ZFX0FSUkFZLCAyMDE4LTAxLTIyKQorCisgICBUaGVzZSB0eXBlcyBvZiBzZW1hbnRpYyBwYXRjaGVzIGFyZSB1c3VhbGx5IHBhcnQgb2YgdGVzdGluZywgYy5mLgorICAgMDg2MGE3NjQxYiAodHJhdmlzLWNpOiBmYWlsIGlmIENvY2NpbmVsbGUgc3RhdGljIGFuYWx5c2lzIGZvdW5kIHNvbWV0aGluZworICAgICAgICAgICAgICAgdG8gdHJhbnNmb3JtLCAyMDE4LTA3LTIzKQorCisgKiBVc2luZyBzZW1hbnRpYyB0cmFuc2Zvcm1hdGlvbnMgaW4gbGFyZ2Ugc2NhbGUgcmVmYWN0b3JpbmdzIHRocm91Z2hvdXQKKyAgIHRoZSBjb2RlIGJhc2UuCisKKyAgIFdoZW4gYXBwbHlpbmcgdGhlIHNlbWFudGljIHBhdGNoIGludG8gYSByZWFsIHBhdGNoLCBzZW5kaW5nIGl0IHRvIHRoZQorICAgbWFpbGluZyBsaXN0IGluIHRoZSB1c3VhbCB3YXksIHN1Y2ggYSBwYXRjaCB3b3VsZCBiZSBleHBlY3RlZCB0byBoYXZlIGEKKyAgIGxvdCBvZiB0ZXh0dWFsIGFuZCBzZW1hbnRpYyBjb25mbGljdHMgYXMgc3VjaCBsYXJnZSBzY2FsZSByZWZhY3RvcmluZ3MKKyAgIGNoYW5nZSBmdW5jdGlvbiBzaWduYXR1cmVzIHRoYXQgYXJlIHVzZWQgd2lkZWx5IGluIHRoZSBjb2RlIGJhc2UuCisgICBBIHRleHR1YWwgY29uZmxpY3Qgd291bGQgYXJpc2UgaWYgc3Vycm91bmRpbmcgY29kZSBuZWFyIGFueSBjYWxsIG9mIHN1Y2gKKyAgIGZ1bmN0aW9uIGNoYW5nZXMuIEEgc2VtYW50aWMgY29uZmxpY3QgYXJpc2VzIHdoZW4gb3RoZXIgcGF0Y2ggc2VyaWVzIGluCisgICBmbGlnaHQgaW50cm9kdWNlIGNhbGxzIHRvIHN1Y2ggZnVuY3Rpb25zLgorCisgICBTbyB0byBhaWQgdGhlc2UgbGFyZ2Ugc2NhbGUgcmVmYWN0b3JpbmdzLCBzZW1hbnRpYyBwYXRjaGVzIGNhbiBiZSB1c2VkLgorICAgSG93ZXZlciB3ZSBkbyBub3Qgd2FudCB0byBzdG9yZSB0aGVtIGluIHRoZSBzYW1lIHBsYWNlIGFzIHRoZSBjaGVja3MgZm9yCisgICBiYWQgcGF0dGVybnMsIGFzIHRoZW4gYXV0b21hdGVkIGJ1aWxkcyB3b3VsZCBmYWlsLgorICAgVGhhdCBpcyB3aHkgc2VtYW50aWMgcGF0Y2hlcyAnY29udHJpYi9jb2NjaW5lbGxlLyoucGVuZGluZy5jb2NjaScKKyAgIGFyZSBpZ25vcmVkIGZvciBjaGVja3MsIGFuZCBjYW4gYmUgYXBwbGllZCB1c2luZyAnbWFrZSBjb2NjaWNoZWNrLXBlbmRpbmcnLgorCisgICBUaGlzIGFsbG93cyB0byBleHBvc2UgcGxhbnMgb2YgcGVuZGluZyBsYXJnZSBzY2FsZSByZWZhY3RvcmluZ3Mgd2l0aG91dAorICAgaW1wYWN0aW5nIHRoZSBiYWQgcGF0dGVybiBjaGVja3MuCmRpZmYgLS1naXQgYS9jb250cmliL2NvY2NpbmVsbGUvYXJyYXkuY29jY2kgYi9jb250cmliL2NvY2NpbmVsbGUvYXJyYXkuY29jY2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiOGQyZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29jY2luZWxsZS9hcnJheS5jb2NjaQpAQCAtMCwwICsxLDkwIEBACitAQAorZXhwcmVzc2lvbiBkc3QsIHNyYywgbiwgRTsKK0BACisgIG1lbWNweShkc3QsIHNyYywgbiAqIHNpemVvZigKKy0gRVsuLi5dCisrICooRSkKKyAgKSkKKworQEAKK3R5cGUgVDsKK1QgKnB0cjsKK1RbXSBhcnI7CitleHByZXNzaW9uIEUsIG47CitAQAorKAorICBtZW1jcHkocHRyLCBFLAorLSBuICogc2l6ZW9mKCoocHRyKSkKKysgbiAqIHNpemVvZihUKQorICApCit8CisgIG1lbWNweShhcnIsIEUsCistIG4gKiBzaXplb2YoKihhcnIpKQorKyBuICogc2l6ZW9mKFQpCisgICkKK3wKKyAgbWVtY3B5KEUsIHB0ciwKKy0gbiAqIHNpemVvZigqKHB0cikpCisrIG4gKiBzaXplb2YoVCkKKyAgKQorfAorICBtZW1jcHkoRSwgYXJyLAorLSBuICogc2l6ZW9mKCooYXJyKSkKKysgbiAqIHNpemVvZihUKQorICApCispCisKK0BACit0eXBlIFQ7CitUICpkc3RfcHRyOworVCAqc3JjX3B0cjsKK1RbXSBkc3RfYXJyOworVFtdIHNyY19hcnI7CitleHByZXNzaW9uIG47CitAQAorKAorLSBtZW1jcHkoZHN0X3B0ciwgc3JjX3B0ciwgKG4pICogc2l6ZW9mKFQpKQorKyBDT1BZX0FSUkFZKGRzdF9wdHIsIHNyY19wdHIsIG4pCit8CistIG1lbWNweShkc3RfcHRyLCBzcmNfYXJyLCAobikgKiBzaXplb2YoVCkpCisrIENPUFlfQVJSQVkoZHN0X3B0ciwgc3JjX2FyciwgbikKK3wKKy0gbWVtY3B5KGRzdF9hcnIsIHNyY19wdHIsIChuKSAqIHNpemVvZihUKSkKKysgQ09QWV9BUlJBWShkc3RfYXJyLCBzcmNfcHRyLCBuKQorfAorLSBtZW1jcHkoZHN0X2Fyciwgc3JjX2FyciwgKG4pICogc2l6ZW9mKFQpKQorKyBDT1BZX0FSUkFZKGRzdF9hcnIsIHNyY19hcnIsIG4pCispCisKK0BACit0eXBlIFQ7CitUICpkc3Q7CitUICpzcmM7CitleHByZXNzaW9uIG47CitAQAorKAorLSBtZW1tb3ZlKGRzdCwgc3JjLCAobikgKiBzaXplb2YoKmRzdCkpOworKyBNT1ZFX0FSUkFZKGRzdCwgc3JjLCBuKTsKK3wKKy0gbWVtbW92ZShkc3QsIHNyYywgKG4pICogc2l6ZW9mKCpzcmMpKTsKKysgTU9WRV9BUlJBWShkc3QsIHNyYywgbik7Cit8CistIG1lbW1vdmUoZHN0LCBzcmMsIChuKSAqIHNpemVvZihUKSk7CisrIE1PVkVfQVJSQVkoZHN0LCBzcmMsIG4pOworKQorCitAQAordHlwZSBUOworVCAqcHRyOworZXhwcmVzc2lvbiBuOworQEAKKy0gcHRyID0geG1hbGxvYygobikgKiBzaXplb2YoKnB0cikpOworKyBBTExPQ19BUlJBWShwdHIsIG4pOworCitAQAordHlwZSBUOworVCAqcHRyOworZXhwcmVzc2lvbiBuOworQEAKKy0gcHRyID0geG1hbGxvYygobikgKiBzaXplb2YoVCkpOworKyBBTExPQ19BUlJBWShwdHIsIG4pOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb2NjaW5lbGxlL2NvbW1pdC5jb2NjaSBiL2NvbnRyaWIvY29jY2luZWxsZS9jb21taXQuY29jY2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc4ZTQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29jY2luZWxsZS9jb21taXQuY29jY2kKQEAgLTAsMCArMSwzNCBAQAorQEAKK2V4cHJlc3Npb24gYzsKK0BACistICZjLT5tYXliZV90cmVlLT5vYmplY3Qub2lkCisrIGdldF9jb21taXRfdHJlZV9vaWQoYykKKworQEAKK2V4cHJlc3Npb24gYzsKK0BACistIGMtPm1heWJlX3RyZWUtPm9iamVjdC5vaWQuaGFzaAorKyBnZXRfY29tbWl0X3RyZWVfb2lkKGMpLT5oYXNoCisKK0BACitpZGVudGlmaWVyIGYgIX4gIl5zZXRfY29tbWl0X3RyZWUkIjsKK2V4cHJlc3Npb24gYzsKK2V4cHJlc3Npb24gczsKK0BACisgIGYoLi4uKSB7PC4uLgorLSBjLT5tYXliZV90cmVlID0gcworKyBzZXRfY29tbWl0X3RyZWUoYywgcykKKyAgLi4uPn0KKworLy8gVGhlc2UgZXhjbHVkZWQgZnVuY3Rpb25zIG11c3QgYWNjZXNzIGMtPm1heWJlX3RyZWUgZGlyZWN0bHkuCisvLyBOb3RlIHRoYXQgaWYgYy0+bWF5YmVfdHJlZSBpcyB3cml0dGVuIHNvbWV3aGVyZSBvdXRzaWRlIG9mIHRoZXNlCisvLyBmdW5jdGlvbnMsIHRoZW4gdGhlIHJlY29tbWVuZGVkIHRyYW5zZm9ybWF0aW9uIHdpbGwgYmUgYm9ndXMgd2l0aAorLy8gcmVwb19nZXRfY29tbWl0X3RyZWUoKSBvbiB0aGUgTEhTLgorQEAKK2lkZW50aWZpZXIgZiAhfiAiXihyZXBvX2dldF9jb21taXRfdHJlZXxnZXRfY29tbWl0X3RyZWVfaW5fZ3JhcGhfb25lfGxvYWRfdHJlZV9mb3JfY29tbWl0fHNldF9jb21taXRfdHJlZSkkIjsKK2V4cHJlc3Npb24gYzsKK0BACisgIGYoLi4uKSB7PC4uLgorLSBjLT5tYXliZV90cmVlCisrIHJlcG9fZ2V0X2NvbW1pdF90cmVlKHNwZWNpZnlfdGhlX3JpZ2h0X3JlcG9faGVyZSwgYykKKyAgLi4uPn0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29jY2luZWxsZS9mbGV4X2FsbG9jLmNvY2NpIGIvY29udHJpYi9jb2NjaW5lbGxlL2ZsZXhfYWxsb2MuY29jY2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmN2Y2ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29jY2luZWxsZS9mbGV4X2FsbG9jLmNvY2NpCkBAIC0wLDAgKzEsMTMgQEAKK0BACitleHByZXNzaW9uIHN0cjsKK2lkZW50aWZpZXIgeCwgZmxleG5hbWU7CitAQAorLSBGTEVYX0FMTE9DX01FTSh4LCBmbGV4bmFtZSwgc3RyLCBzdHJsZW4oc3RyKSk7CisrIEZMRVhfQUxMT0NfU1RSKHgsIGZsZXhuYW1lLCBzdHIpOworCitAQAorZXhwcmVzc2lvbiBzdHI7CitpZGVudGlmaWVyIHgsIHB0cm5hbWU7CitAQAorLSBGTEVYUFRSX0FMTE9DX01FTSh4LCBwdHJuYW1lLCBzdHIsIHN0cmxlbihzdHIpKTsKKysgRkxFWFBUUl9BTExPQ19TVFIoeCwgcHRybmFtZSwgc3RyKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29jY2luZWxsZS9mcmVlLmNvY2NpIGIvY29udHJpYi9jb2NjaW5lbGxlL2ZyZWUuY29jY2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ5MDA2OQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29jY2luZWxsZS9mcmVlLmNvY2NpCkBAIC0wLDAgKzEsMTggQEAKK0BACitleHByZXNzaW9uIEU7CitAQAorLSBpZiAoRSkKKyAgZnJlZShFKTsKKworQEAKK2V4cHJlc3Npb24gRTsKK0BACistIGlmICghRSkKKyAgZnJlZShFKTsKKworQEAKK2V4cHJlc3Npb24gRTsKK0BACistIGZyZWUoRSk7CisrIEZSRUVfQU5EX05VTEwoRSk7CistIEUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb2NjaW5lbGxlL2hhc2htYXAuY29jY2kgYi9jb250cmliL2NvY2NpbmVsbGUvaGFzaG1hcC5jb2NjaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjllMTIwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb2NjaW5lbGxlL2hhc2htYXAuY29jY2kKQEAgLTAsMCArMSwxNiBAQAorQCBoYXNobWFwX2VudHJ5X2luaXRfdXNhZ2UgQAorZXhwcmVzc2lvbiBFOworc3RydWN0IGhhc2htYXBfZW50cnkgSE1FOworQEAKKy0gSE1FLmhhc2ggPSBFOworKyBoYXNobWFwX2VudHJ5X2luaXQoJkhNRSwgRSk7CisKK0BACitpZGVudGlmaWVyIGYgIX4gIl5oYXNobWFwX2VudHJ5X2luaXQkIjsKK2V4cHJlc3Npb24gRTsKK3N0cnVjdCBoYXNobWFwX2VudHJ5ICpITUVQOworQEAKKyAgZiguLi4pIHs8Li4uCistIEhNRVAtPmhhc2ggPSBFOworKyBoYXNobWFwX2VudHJ5X2luaXQoSE1FUCwgRSk7CisgIC4uLj59CmRpZmYgLS1naXQgYS9jb250cmliL2NvY2NpbmVsbGUvb2JqZWN0X2lkLmNvY2NpIGIvY29udHJpYi9jb2NjaW5lbGxlL29iamVjdF9pZC5jb2NjaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGY0ZjIyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb2NjaW5lbGxlL29iamVjdF9pZC5jb2NjaQpAQCAtMCwwICsxLDg3IEBACitAQAorc3RydWN0IG9iamVjdF9pZCBPSUQ7CitAQAorLSBpc19udWxsX3NoYTEoT0lELmhhc2gpCisrIGlzX251bGxfb2lkKCZPSUQpCisKK0BACitzdHJ1Y3Qgb2JqZWN0X2lkICpPSURQVFI7CitAQAorLSBpc19udWxsX3NoYTEoT0lEUFRSLT5oYXNoKQorKyBpc19udWxsX29pZChPSURQVFIpCisKK0BACitzdHJ1Y3Qgb2JqZWN0X2lkIE9JRDsKK0BACistIGhhc2hjbHIoT0lELmhhc2gpCisrIG9pZGNscigmT0lEKQorCitAQAoraWRlbnRpZmllciBmICE9IG9pZGNscjsKK3N0cnVjdCBvYmplY3RfaWQgKk9JRFBUUjsKK0BACisgIGYoLi4uKSB7PC4uLgorLSBoYXNoY2xyKE9JRFBUUi0+aGFzaCkKKysgb2lkY2xyKE9JRFBUUikKKyAgLi4uPn0KKworQEAKK3N0cnVjdCBvYmplY3RfaWQgT0lEMSwgT0lEMjsKK0BACistIGhhc2hjbXAoT0lEMS5oYXNoLCBPSUQyLmhhc2gpCisrIG9pZGNtcCgmT0lEMSwgJk9JRDIpCisKK0BACitpZGVudGlmaWVyIGYgIT0gb2lkY21wOworc3RydWN0IG9iamVjdF9pZCAqT0lEUFRSMSwgT0lEUFRSMjsKK0BACisgIGYoLi4uKSB7PC4uLgorLSBoYXNoY21wKE9JRFBUUjEtPmhhc2gsIE9JRFBUUjItPmhhc2gpCisrIG9pZGNtcChPSURQVFIxLCBPSURQVFIyKQorICAuLi4+fQorCitAQAorc3RydWN0IG9iamVjdF9pZCAqT0lEUFRSOworc3RydWN0IG9iamVjdF9pZCBPSUQ7CitAQAorLSBoYXNoY21wKE9JRFBUUi0+aGFzaCwgT0lELmhhc2gpCisrIG9pZGNtcChPSURQVFIsICZPSUQpCisKK0BACitzdHJ1Y3Qgb2JqZWN0X2lkICpPSURQVFI7CitzdHJ1Y3Qgb2JqZWN0X2lkIE9JRDsKK0BACistIGhhc2hjbXAoT0lELmhhc2gsIE9JRFBUUi0+aGFzaCkKKysgb2lkY21wKCZPSUQsIE9JRFBUUikKKworQEAKK3N0cnVjdCBvYmplY3RfaWQgKk9JRFBUUjE7CitzdHJ1Y3Qgb2JqZWN0X2lkICpPSURQVFIyOworQEAKKy0gb2lkY21wKE9JRFBUUjEsIE9JRFBUUjIpID09IDAKKysgb2lkZXEoT0lEUFRSMSwgT0lEUFRSMikKKworQEAKK2lkZW50aWZpZXIgZiAhPSBoYXNoZXE7CitleHByZXNzaW9uIEUxLCBFMjsKK0BACisgIGYoLi4uKSB7PC4uLgorLSBoYXNoY21wKEUxLCBFMikgPT0gMAorKyBoYXNoZXEoRTEsIEUyKQorICAuLi4+fQorCitAQAorc3RydWN0IG9iamVjdF9pZCAqT0lEUFRSMTsKK3N0cnVjdCBvYmplY3RfaWQgKk9JRFBUUjI7CitAQAorLSBvaWRjbXAoT0lEUFRSMSwgT0lEUFRSMikgIT0gMAorKyAhb2lkZXEoT0lEUFRSMSwgT0lEUFRSMikKKworQEAKK2lkZW50aWZpZXIgZiAhPSBoYXNoZXE7CitleHByZXNzaW9uIEUxLCBFMjsKK0BACisgIGYoLi4uKSB7PC4uLgorLSBoYXNoY21wKEUxLCBFMikgIT0gMAorKyAhaGFzaGVxKEUxLCBFMikKKyAgLi4uPn0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29jY2luZWxsZS9wcmVpbmNyLmNvY2NpIGIvY29udHJpYi9jb2NjaW5lbGxlL3ByZWluY3IuY29jY2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlMWU4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29jY2luZWxsZS9wcmVpbmNyLmNvY2NpCkBAIC0wLDAgKzEsNSBAQAorQCBwcmVpbmNyZW1lbnQgQAoraWRlbnRpZmllciBpOworQEAKKy0gKytpID4gMQorKyBpKysKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29jY2luZWxsZS9xc29ydC5jb2NjaSBiL2NvbnRyaWIvY29jY2luZWxsZS9xc29ydC5jb2NjaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmI5M2E5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb2NjaW5lbGxlL3Fzb3J0LmNvY2NpCkBAIC0wLDAgKzEsMzcgQEAKK0BACitleHByZXNzaW9uIGJhc2UsIG5tZW1iLCBjb21wYXI7CitAQAorLSBxc29ydChiYXNlLCBubWVtYiwgc2l6ZW9mKCpiYXNlKSwgY29tcGFyKTsKKysgUVNPUlQoYmFzZSwgbm1lbWIsIGNvbXBhcik7CisKK0BACitleHByZXNzaW9uIGJhc2UsIG5tZW1iLCBjb21wYXI7CitAQAorLSBxc29ydChiYXNlLCBubWVtYiwgc2l6ZW9mKGJhc2VbMF0pLCBjb21wYXIpOworKyBRU09SVChiYXNlLCBubWVtYiwgY29tcGFyKTsKKworQEAKK3R5cGUgVDsKK1QgKmJhc2U7CitleHByZXNzaW9uIG5tZW1iLCBjb21wYXI7CitAQAorLSBxc29ydChiYXNlLCBubWVtYiwgc2l6ZW9mKFQpLCBjb21wYXIpOworKyBRU09SVChiYXNlLCBubWVtYiwgY29tcGFyKTsKKworQEAKK2V4cHJlc3Npb24gYmFzZSwgbm1lbWIsIGNvbXBhcjsKK0BACistIGlmIChubWVtYikKKyAgICBRU09SVChiYXNlLCBubWVtYiwgY29tcGFyKTsKKworQEAKK2V4cHJlc3Npb24gYmFzZSwgbm1lbWIsIGNvbXBhcjsKK0BACistIGlmIChubWVtYiA+IDApCisgICAgUVNPUlQoYmFzZSwgbm1lbWIsIGNvbXBhcik7CisKK0BACitleHByZXNzaW9uIGJhc2UsIG5tZW1iLCBjb21wYXI7CitAQAorLSBpZiAobm1lbWIgPiAxKQorICAgIFFTT1JUKGJhc2UsIG5tZW1iLCBjb21wYXIpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb2NjaW5lbGxlL3N0cmJ1Zi5jb2NjaSBiL2NvbnRyaWIvY29jY2luZWxsZS9zdHJidWYuY29jY2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhZGE2OQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29jY2luZWxsZS9zdHJidWYuY29jY2kKQEAgLTAsMCArMSw2MiBAQAorQCBzdHJidWZfYWRkZl93aXRoX2Zvcm1hdF9vbmx5IEAKK2V4cHJlc3Npb24gRTsKK2NvbnN0YW50IGZtdCAhfiAiJSI7CitAQAorLSBzdHJidWZfYWRkZgorKyBzdHJidWZfYWRkc3RyCisgIChFLAorKAorICBmbXQKK3wKKyAgXyhmbXQpCispCisgICk7CisKK0BACitleHByZXNzaW9uIEU7CitzdHJ1Y3Qgc3RyYnVmIFNCOworZm9ybWF0IEYgPX4gInMiOworQEAKKy0gc3RyYnVmX2FkZGYoRSwgIiVARkAiLCBTQi5idWYpOworKyBzdHJidWZfYWRkYnVmKEUsICZTQik7CisKK0BACitleHByZXNzaW9uIEU7CitzdHJ1Y3Qgc3RyYnVmICpTQlA7Citmb3JtYXQgRiA9fiAicyI7CitAQAorLSBzdHJidWZfYWRkZihFLCAiJUBGQCIsIFNCUC0+YnVmKTsKKysgc3RyYnVmX2FkZGJ1ZihFLCBTQlApOworCitAQAorZXhwcmVzc2lvbiBFOworc3RydWN0IHN0cmJ1ZiBTQjsKK0BACistIHN0cmJ1Zl9hZGRzdHIoRSwgU0IuYnVmKTsKKysgc3RyYnVmX2FkZGJ1ZihFLCAmU0IpOworCitAQAorZXhwcmVzc2lvbiBFOworc3RydWN0IHN0cmJ1ZiAqU0JQOworQEAKKy0gc3RyYnVmX2FkZHN0cihFLCBTQlAtPmJ1Zik7CisrIHN0cmJ1Zl9hZGRidWYoRSwgU0JQKTsKKworQEAKK2V4cHJlc3Npb24gRTEsIEUyOworZm9ybWF0IEYgPX4gInMiOworQEAKKy0gc3RyYnVmX2FkZGYoRTEsICIlQEZAIiwgRTIpOworKyBzdHJidWZfYWRkc3RyKEUxLCBFMik7CisKK0BACitleHByZXNzaW9uIEUxLCBFMiwgRTM7CitAQAorLSBzdHJidWZfYWRkc3RyKEUxLCBmaW5kX3VuaXF1ZV9hYmJyZXYoRTIsIEUzKSk7CisrIHN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldihFMSwgRTIsIEUzKTsKKworQEAKK2V4cHJlc3Npb24gRTEsIEUyOworQEAKKy0gc3RyYnVmX2FkZHN0cihFMSwgcmVhbF9wYXRoKEUyKSk7CisrIHN0cmJ1Zl9hZGRfcmVhbF9wYXRoKEUxLCBFMik7CmRpZmYgLS1naXQgYS9jb250cmliL2NvY2NpbmVsbGUvc3dhcC5jb2NjaSBiL2NvbnRyaWIvY29jY2luZWxsZS9zd2FwLmNvY2NpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwOTM0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvY2NpbmVsbGUvc3dhcC5jb2NjaQpAQCAtMCwwICsxLDI4IEBACitAIHN3YXBfd2l0aF9kZWNsYXJhdGlvbiBACit0eXBlIFQ7CitpZGVudGlmaWVyIHRtcDsKK1QgYSwgYjsKK0BACistIFQgdG1wID0gYTsKKysgVCB0bXA7CisrIHRtcCA9IGE7CisgIGEgPSBiOworICBiID0gdG1wOworCitAIHN3YXAgQAordHlwZSBUOworVCB0bXAsIGEsIGI7CitAQAorLSB0bXAgPSBhOworLSBhID0gYjsKKy0gYiA9IHRtcDsKKysgU1dBUChhLCBiKTsKKworQCBleHRlbmRzIHN3YXAgQAoraWRlbnRpZmllciB1bnVzZWQ7CitAQAorICB7CisgIC4uLgorLSBUIHVudXNlZDsKKyAgLi4uIHdoZW4gIT0gdW51c2VkCisgIH0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29jY2luZWxsZS90aGVfcmVwb3NpdG9yeS5wZW5kaW5nLmNvY2NpIGIvY29udHJpYi9jb2NjaW5lbGxlL3RoZV9yZXBvc2l0b3J5LnBlbmRpbmcuY29jY2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlNzAyZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29jY2luZWxsZS90aGVfcmVwb3NpdG9yeS5wZW5kaW5nLmNvY2NpCkBAIC0wLDAgKzEsMTQ0IEBACisvLyBUaGlzIGZpbGUgaXMgdXNlZCBmb3IgdGhlIG9uZ29pbmcgcmVmYWN0b3Jpbmcgb2YKKy8vIGJyaW5naW5nIHRoZSBpbmRleCBvciByZXBvc2l0b3J5IHN0cnVjdCBpbiBhbGwgb2YKKy8vIG91ciBjb2RlIGJhc2UuCisKK0BACitleHByZXNzaW9uIEU7CitleHByZXNzaW9uIEY7CitleHByZXNzaW9uIEc7CitAQAorLSByZWFkX29iamVjdF9maWxlKAorKyByZXBvX3JlYWRfb2JqZWN0X2ZpbGUodGhlX3JlcG9zaXRvcnksCisgIEUsIEYsIEcpCisKK0BACitleHByZXNzaW9uIEU7CitAQAorLSBoYXNfc2hhMV9maWxlKAorKyByZXBvX2hhc19zaGExX2ZpbGUodGhlX3JlcG9zaXRvcnksCisgIEUpCisKK0BACitleHByZXNzaW9uIEU7CitleHByZXNzaW9uIEY7CitAQAorLSBoYXNfc2hhMV9maWxlX3dpdGhfZmxhZ3MoCisrIHJlcG9faGFzX3NoYTFfZmlsZV93aXRoX2ZsYWdzKHRoZV9yZXBvc2l0b3J5LAorICBFKQorCitAQAorZXhwcmVzc2lvbiBFOworQEAKKy0gaGFzX29iamVjdF9maWxlKAorKyByZXBvX2hhc19vYmplY3RfZmlsZSh0aGVfcmVwb3NpdG9yeSwKKyAgRSkKKworQEAKK2V4cHJlc3Npb24gRTsKK2V4cHJlc3Npb24gRjsKK0BACistIGhhc19vYmplY3RfZmlsZV93aXRoX2ZsYWdzKAorKyByZXBvX2hhc19vYmplY3RfZmlsZV93aXRoX2ZsYWdzKHRoZV9yZXBvc2l0b3J5LAorICBFKQorCitAQAorZXhwcmVzc2lvbiBFOworZXhwcmVzc2lvbiBGOworZXhwcmVzc2lvbiBHOworQEAKKy0gcGFyc2VfY29tbWl0X2ludGVybmFsKAorKyByZXBvX3BhcnNlX2NvbW1pdF9pbnRlcm5hbCh0aGVfcmVwb3NpdG9yeSwKKyAgRSwgRiwgRykKKworQEAKK2V4cHJlc3Npb24gRTsKK2V4cHJlc3Npb24gRjsKK0BACistIHBhcnNlX2NvbW1pdF9nZW50bHkoCisrIHJlcG9fcGFyc2VfY29tbWl0X2dlbnRseSh0aGVfcmVwb3NpdG9yeSwKKyAgRSwgRikKKworQEAKK2V4cHJlc3Npb24gRTsKK0BACistIHBhcnNlX2NvbW1pdCgKKysgcmVwb19wYXJzZV9jb21taXQodGhlX3JlcG9zaXRvcnksCisgIEUpCisKK0BACitleHByZXNzaW9uIEU7CitleHByZXNzaW9uIEY7CitAQAorLSBnZXRfbWVyZ2VfYmFzZXMoCisrIHJlcG9fZ2V0X21lcmdlX2Jhc2VzKHRoZV9yZXBvc2l0b3J5LAorICBFLCBGKTsKKworQEAKK2V4cHJlc3Npb24gRTsKK2V4cHJlc3Npb24gRjsKK2V4cHJlc3Npb24gRzsKK0BACistIGdldF9tZXJnZV9iYXNlc19tYW55KAorKyByZXBvX2dldF9tZXJnZV9iYXNlc19tYW55KHRoZV9yZXBvc2l0b3J5LAorICBFLCBGLCBHKTsKKworQEAKK2V4cHJlc3Npb24gRTsKK2V4cHJlc3Npb24gRjsKK2V4cHJlc3Npb24gRzsKK0BACistIGdldF9tZXJnZV9iYXNlc19tYW55X2RpcnR5KAorKyByZXBvX2dldF9tZXJnZV9iYXNlc19tYW55X2RpcnR5KHRoZV9yZXBvc2l0b3J5LAorICBFLCBGLCBHKTsKKworQEAKK2V4cHJlc3Npb24gRTsKK2V4cHJlc3Npb24gRjsKK0BACistIGluX21lcmdlX2Jhc2VzKAorKyByZXBvX2luX21lcmdlX2Jhc2VzKHRoZV9yZXBvc2l0b3J5LAorICBFLCBGKTsKKworQEAKK2V4cHJlc3Npb24gRTsKK2V4cHJlc3Npb24gRjsKK2V4cHJlc3Npb24gRzsKK0BACistIGluX21lcmdlX2Jhc2VzX21hbnkoCisrIHJlcG9faW5fbWVyZ2VfYmFzZXNfbWFueSh0aGVfcmVwb3NpdG9yeSwKKyAgRSwgRiwgRyk7CisKK0BACitleHByZXNzaW9uIEU7CitleHByZXNzaW9uIEY7CitAQAorLSBnZXRfY29tbWl0X2J1ZmZlcigKKysgcmVwb19nZXRfY29tbWl0X2J1ZmZlcih0aGVfcmVwb3NpdG9yeSwKKyAgRSwgRik7CisKK0BACitleHByZXNzaW9uIEU7CitleHByZXNzaW9uIEY7CitAQAorLSB1bnVzZV9jb21taXRfYnVmZmVyKAorKyByZXBvX3VudXNlX2NvbW1pdF9idWZmZXIodGhlX3JlcG9zaXRvcnksCisgIEUsIEYpOworCitAQAorZXhwcmVzc2lvbiBFOworZXhwcmVzc2lvbiBGOworZXhwcmVzc2lvbiBHOworQEAKKy0gbG9nbXNnX3JlZW5jb2RlKAorKyByZXBvX2xvZ21zZ19yZWVuY29kZSh0aGVfcmVwb3NpdG9yeSwKKyAgRSwgRiwgRyk7CisKK0BACitleHByZXNzaW9uIEU7CitleHByZXNzaW9uIEY7CitleHByZXNzaW9uIEc7CitleHByZXNzaW9uIEg7CitAQAorLSBmb3JtYXRfY29tbWl0X21lc3NhZ2UoCisrIHJlcG9fZm9ybWF0X2NvbW1pdF9tZXNzYWdlKHRoZV9yZXBvc2l0b3J5LAorICBFLCBGLCBHLCBIKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29jY2luZWxsZS94c3RyZHVwX29yX251bGwuY29jY2kgYi9jb250cmliL2NvY2NpbmVsbGUveHN0cmR1cF9vcl9udWxsLmNvY2NpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMDVkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvY2NpbmVsbGUveHN0cmR1cF9vcl9udWxsLmNvY2NpCkBAIC0wLDAgKzEsMTMgQEAKK0BACitleHByZXNzaW9uIEU7CitleHByZXNzaW9uIFY7CitAQAorLSBpZiAoRSkKKy0gICAgViA9IHhzdHJkdXAoRSk7CisrIFYgPSB4c3RyZHVwX29yX251bGwoRSk7CisKK0BACitleHByZXNzaW9uIEU7CitAQAorLSB4c3RyZHVwKGFic29sdXRlX3BhdGgoRSkpCisrIGFic29sdXRlX3BhdGhkdXAoRSkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29tcGxldGlvbi8uZ2l0YXR0cmlidXRlcyBiL2NvbnRyaWIvY29tcGxldGlvbi8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTExNjk0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb21wbGV0aW9uLy5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEgQEAKKyouYmFzaCBlb2w9bGYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhZDA0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoCkBAIC0wLDAgKzEsMzM4MiBAQAorIyBiYXNoL3pzaCBjb21wbGV0aW9uIHN1cHBvcnQgZm9yIGNvcmUgR2l0LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYsMjAwNyBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+CisjIENvbmNlcHR1YWxseSBiYXNlZCBvbiBnaXRjb21wbGV0aW9uIChodHRwOi8vZ2l0d2ViLmhhd2FnYS5vcmcudWsvKS4KKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuMC4KKyMKKyMgVGhlIGNvbnRhaW5lZCBjb21wbGV0aW9uIHJvdXRpbmVzIHByb3ZpZGUgc3VwcG9ydCBmb3IgY29tcGxldGluZzoKKyMKKyMgICAgKikgbG9jYWwgYW5kIHJlbW90ZSBicmFuY2ggbmFtZXMKKyMgICAgKikgbG9jYWwgYW5kIHJlbW90ZSB0YWcgbmFtZXMKKyMgICAgKikgLmdpdC9yZW1vdGVzIGZpbGUgbmFtZXMKKyMgICAgKikgZ2l0ICdzdWJjb21tYW5kcycKKyMgICAgKikgZ2l0IGVtYWlsIGFsaWFzZXMgZm9yIGdpdC1zZW5kLWVtYWlsCisjICAgICopIHRyZWUgcGF0aHMgd2l0aGluICdyZWY6cGF0aC90by9maWxlJyBleHByZXNzaW9ucworIyAgICAqKSBmaWxlIHBhdGhzIHdpdGhpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleAorIyAgICAqKSBjb21tb24gLS1sb25nLW9wdGlvbnMKKyMKKyMgVG8gdXNlIHRoZXNlIHJvdXRpbmVzOgorIworIyAgICAxKSBDb3B5IHRoaXMgZmlsZSB0byBzb21ld2hlcmUgKGUuZy4gfi8uZ2l0LWNvbXBsZXRpb24uYmFzaCkuCisjICAgIDIpIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91ciAuYmFzaHJjLy56c2hyYzoKKyMgICAgICAgIHNvdXJjZSB+Ly5naXQtY29tcGxldGlvbi5iYXNoCisjICAgIDMpIENvbnNpZGVyIGNoYW5naW5nIHlvdXIgUFMxIHRvIGFsc28gc2hvdyB0aGUgY3VycmVudCBicmFuY2gsCisjICAgICAgIHNlZSBnaXQtcHJvbXB0LnNoIGZvciBkZXRhaWxzLgorIworIyBJZiB5b3UgdXNlIGNvbXBsZXggYWxpYXNlcyBvZiBmb3JtICchZigpIHsgLi4uIH07IGYnLCB5b3UgY2FuIHVzZSB0aGUgbnVsbAorIyBjb21tYW5kICc6JyBhcyB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgZnVuY3Rpb24gYm9keSB0byBkZWNsYXJlIHRoZSBkZXNpcmVkCisjIGNvbXBsZXRpb24gc3R5bGUuICBGb3IgZXhhbXBsZSAnIWYoKSB7IDogZ2l0IGNvbW1pdCA7IC4uLiB9OyBmJyB3aWxsCisjIHRlbGwgdGhlIGNvbXBsZXRpb24gdG8gdXNlIGNvbW1pdCBjb21wbGV0aW9uLiAgVGhpcyBhbHNvIHdvcmtzIHdpdGggYWxpYXNlcworIyBvZiBmb3JtICIhc2ggLWMgJy4uLiciLiAgRm9yIGV4YW1wbGUsICIhc2ggLWMgJzogZ2l0IGNvbW1pdCA7IC4uLiAnIi4KKyMKKyMgQ29tcGF0aWJsZSB3aXRoIGJhc2ggMy4yLjU3LgorIworIyBZb3UgY2FuIHNldCB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mCisjIHRoZSBjb21wbGV0aW9uIHJvdXRpbmVzOgorIworIyAgIEdJVF9DT01QTEVUSU9OX0NIRUNLT1VUX05PX0dVRVNTCisjCisjICAgICBXaGVuIHNldCB0byAiMSIsIGRvIG5vdCBpbmNsdWRlICJEV0lNIiBzdWdnZXN0aW9ucyBpbiBnaXQtY2hlY2tvdXQKKyMgICAgIGFuZCBnaXQtc3dpdGNoIGNvbXBsZXRpb24gKGUuZy4sIGNvbXBsZXRpbmcgImZvbyIgd2hlbiAib3JpZ2luL2ZvbyIKKyMgICAgIGV4aXN0cykuCisKK2Nhc2UgIiRDT01QX1dPUkRCUkVBS1MiIGluCisqOiopIDogZ3JlYXQgOzsKKyopICAgQ09NUF9XT1JEQlJFQUtTPSIkQ09NUF9XT1JEQlJFQUtTOiIKK2VzYWMKKworIyBEaXNjb3ZlcnMgdGhlIHBhdGggdG8gdGhlIGdpdCByZXBvc2l0b3J5IHRha2luZyBhbnkgJy0tZ2l0LWRpcj08cGF0aD4nIGFuZAorIyAnLUMgPHBhdGg+JyBvcHRpb25zIGludG8gYWNjb3VudCBhbmQgc3RvcmVzIGl0IGluIHRoZSAkX19naXRfcmVwb19wYXRoCisjIHZhcmlhYmxlLgorX19naXRfZmluZF9yZXBvX3BhdGggKCkKK3sKKwlpZiBbIC1uICIkX19naXRfcmVwb19wYXRoIiBdOyB0aGVuCisJCSMgd2UgYWxyZWFkeSBrbm93IHdoZXJlIGl0IGlzCisJCXJldHVybgorCWZpCisKKwlpZiBbIC1uICIke19fZ2l0X0NfYXJncy19IiBdOyB0aGVuCisJCV9fZ2l0X3JlcG9fcGF0aD0iJChnaXQgIiR7X19naXRfQ19hcmdzW0BdfSIgXAorCQkJJHtfX2dpdF9kaXI6Ky0tZ2l0LWRpcj0iJF9fZ2l0X2RpciJ9IFwKKwkJCXJldi1wYXJzZSAtLWFic29sdXRlLWdpdC1kaXIgMj4vZGV2L251bGwpIgorCWVsaWYgWyAtbiAiJHtfX2dpdF9kaXItfSIgXTsgdGhlbgorCQl0ZXN0IC1kICIkX19naXRfZGlyIiAmJgorCQlfX2dpdF9yZXBvX3BhdGg9IiRfX2dpdF9kaXIiCisJZWxpZiBbIC1uICIke0dJVF9ESVItfSIgXTsgdGhlbgorCQl0ZXN0IC1kICIke0dJVF9ESVItfSIgJiYKKwkJX19naXRfcmVwb19wYXRoPSIkR0lUX0RJUiIKKwllbGlmIFsgLWQgLmdpdCBdOyB0aGVuCisJCV9fZ2l0X3JlcG9fcGF0aD0uZ2l0CisJZWxzZQorCQlfX2dpdF9yZXBvX3BhdGg9IiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIgMj4vZGV2L251bGwpIgorCWZpCit9CisKKyMgRGVwcmVjYXRlZDogdXNlIF9fZ2l0X2ZpbmRfcmVwb19wYXRoKCkgYW5kICRfX2dpdF9yZXBvX3BhdGggaW5zdGVhZAorIyBfX2dpdGRpciBhY2NlcHRzIDAgb3IgMSBhcmd1bWVudHMgKGkuZS4sIGxvY2F0aW9uKQorIyByZXR1cm5zIGxvY2F0aW9uIG9mIC5naXQgcmVwbworX19naXRkaXIgKCkKK3sKKwlpZiBbIC16ICIkezEtfSIgXTsgdGhlbgorCQlfX2dpdF9maW5kX3JlcG9fcGF0aCB8fCByZXR1cm4gMQorCQllY2hvICIkX19naXRfcmVwb19wYXRoIgorCWVsaWYgWyAtZCAiJDEvLmdpdCIgXTsgdGhlbgorCQllY2hvICIkMS8uZ2l0IgorCWVsc2UKKwkJZWNobyAiJDEiCisJZmkKK30KKworIyBSdW5zIGdpdCB3aXRoIGFsbCB0aGUgb3B0aW9ucyBnaXZlbiBhcyBhcmd1bWVudCwgcmVzcGVjdGluZyBhbnkKKyMgJy0tZ2l0LWRpcj08cGF0aD4nIGFuZCAnLUMgPHBhdGg+JyBvcHRpb25zIHByZXNlbnQgb24gdGhlIGNvbW1hbmQgbGluZQorX19naXQgKCkKK3sKKwlnaXQgJHtfX2dpdF9DX2FyZ3M6KyIke19fZ2l0X0NfYXJnc1tAXX0ifSBcCisJCSR7X19naXRfZGlyOistLWdpdC1kaXI9IiRfX2dpdF9kaXIifSAiJEAiIDI+L2Rldi9udWxsCit9CisKKyMgUmVtb3ZlcyBiYWNrc2xhc2ggZXNjYXBpbmcsIHNpbmdsZSBxdW90ZXMgYW5kIGRvdWJsZSBxdW90ZXMgZnJvbSBhIHdvcmQsCisjIHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSB2YXJpYWJsZSAkZGVxdW90ZWRfd29yZC4KKyMgMTogVGhlIHdvcmQgdG8gZGVxdW90ZS4KK19fZ2l0X2RlcXVvdGUgKCkKK3sKKwlsb2NhbCByZXN0PSIkMSIgbGVuIGNoCisKKwlkZXF1b3RlZF93b3JkPSIiCisKKwl3aGlsZSB0ZXN0IC1uICIkcmVzdCI7IGRvCisJCWxlbj0keyNkZXF1b3RlZF93b3JkfQorCQlkZXF1b3RlZF93b3JkPSIkZGVxdW90ZWRfd29yZCR7cmVzdCUlW1xcXCdcIl0qfSIKKwkJcmVzdD0iJHtyZXN0OiQoKCR7I2RlcXVvdGVkX3dvcmR9LSRsZW4pKX0iCisKKwkJY2FzZSAiJHtyZXN0OjA6MX0iIGluCisJCVxcKQorCQkJY2g9IiR7cmVzdDoxOjF9IgorCQkJY2FzZSAiJGNoIiBpbgorCQkJJCdcbicpCisJCQkJOzsKKwkJCSopCisJCQkJZGVxdW90ZWRfd29yZD0iJGRlcXVvdGVkX3dvcmQkY2giCisJCQkJOzsKKwkJCWVzYWMKKwkJCXJlc3Q9IiR7cmVzdDoyfSIKKwkJCTs7CisJCVwnKQorCQkJcmVzdD0iJHtyZXN0OjF9IgorCQkJbGVuPSR7I2RlcXVvdGVkX3dvcmR9CisJCQlkZXF1b3RlZF93b3JkPSIkZGVxdW90ZWRfd29yZCR7cmVzdCUlXCcqfSIKKwkJCXJlc3Q9IiR7cmVzdDokKCgkeyNkZXF1b3RlZF93b3JkfS0kbGVuKzEpKX0iCisJCQk7OworCQlcIikKKwkJCXJlc3Q9IiR7cmVzdDoxfSIKKwkJCXdoaWxlIHRlc3QgLW4gIiRyZXN0IiA7IGRvCisJCQkJbGVuPSR7I2RlcXVvdGVkX3dvcmR9CisJCQkJZGVxdW90ZWRfd29yZD0iJGRlcXVvdGVkX3dvcmQke3Jlc3QlJVtcXFwiXSp9IgorCQkJCXJlc3Q9IiR7cmVzdDokKCgkeyNkZXF1b3RlZF93b3JkfS0kbGVuKSl9IgorCQkJCWNhc2UgIiR7cmVzdDowOjF9IiBpbgorCQkJCVxcKQorCQkJCQljaD0iJHtyZXN0OjE6MX0iCisJCQkJCWNhc2UgIiRjaCIgaW4KKwkJCQkJXCJ8XFx8XCR8XGApCisJCQkJCQlkZXF1b3RlZF93b3JkPSIkZGVxdW90ZWRfd29yZCRjaCIKKwkJCQkJCTs7CisJCQkJCSQnXG4nKQorCQkJCQkJOzsKKwkJCQkJKikKKwkJCQkJCWRlcXVvdGVkX3dvcmQ9IiRkZXF1b3RlZF93b3JkXFwkY2giCisJCQkJCQk7OworCQkJCQllc2FjCisJCQkJCXJlc3Q9IiR7cmVzdDoyfSIKKwkJCQkJOzsKKwkJCQlcIikKKwkJCQkJcmVzdD0iJHtyZXN0OjF9IgorCQkJCQlicmVhaworCQkJCQk7OworCQkJCWVzYWMKKwkJCWRvbmUKKwkJCTs7CisJCWVzYWMKKwlkb25lCit9CisKKyMgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBjb2RlIGZyb206CisjCisjICAgYmFzaF9jb21wbGV0aW9uIC0gcHJvZ3JhbW1hYmxlIGNvbXBsZXRpb24gZnVuY3Rpb25zIGZvciBiYXNoIDMuMisKKyMKKyMgICBDb3B5cmlnaHQgwqkgMjAwNi0yMDA4LCBJYW4gTWFjZG9uYWxkIDxpYW5AY2FsaWJhbi5vcmc+CisjICAgICAgICAgICAgIMKpIDIwMDktMjAxMCwgQmFzaCBDb21wbGV0aW9uIE1haW50YWluZXJzCisjICAgICAgICAgICAgICAgICAgICAgPGJhc2gtY29tcGxldGlvbi1kZXZlbEBsaXN0cy5hbGlvdGguZGViaWFuLm9yZz4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyAgIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworIyAgIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNvZnR3YXJlIGNhbiBiZSBvYnRhaW5lZCBoZXJlOgorIworIyAgIGh0dHA6Ly9iYXNoLWNvbXBsZXRpb24uYWxpb3RoLmRlYmlhbi5vcmcvCisjCisjICAgUkVMRUFTRTogMi54CisKKyMgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgYSB0b2tlbml6ZWQgbGlzdCBvZiB3b3JkcworIyBvbiB0aGUgY29tbWFuZCBsaW5lOgorIworIwlfX2dpdF9yZWFzc2VtYmxlX2NvbXBfd29yZHNfYnlfcmVmICc9OicKKyMJaWYgdGVzdCAiJHt3b3Jkc19bY3dvcmRfLTFdfSIgPSAtdworIwl0aGVuCisjCQkuLi4KKyMJZmkKKyMKKyMgVGhlIGFyZ3VtZW50IHNob3VsZCBiZSBhIGNvbGxlY3Rpb24gb2YgY2hhcmFjdGVycyBmcm9tIHRoZSBsaXN0IG9mCisjIHdvcmQgY29tcGxldGlvbiBzZXBhcmF0b3JzIChDT01QX1dPUkRCUkVBS1MpIHRvIHRyZWF0IGFzIG9yZGluYXJ5CisjIGNoYXJhY3RlcnMuCisjCisjIFRoaXMgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGdvaW5nIGJhY2sgaW4gdGltZSBhbmQgc2V0dGluZworIyBDT01QX1dPUkRCUkVBS1MgdG8gZXhjbHVkZSB0aG9zZSBjaGFyYWN0ZXJzLiAgVGhlIGludGVudCBpcyB0bworIyBtYWtlIG9wdGlvbiB0eXBlcyBsaWtlIC0tZGF0ZT08dHlwZT4gYW5kIDxyZXY+OjxwYXRoPiBlYXN5IHRvCisjIHJlY29nbml6ZSBieSB0cmVhdGluZyBlYWNoIHNoZWxsIHdvcmQgYXMgYSBzaW5nbGUgdG9rZW4uCisjCisjIEl0IGlzIGJlc3Qgbm90IHRvIHNldCBDT01QX1dPUkRCUkVBS1MgZGlyZWN0bHkgYmVjYXVzZSB0aGUgdmFsdWUgaXMKKyMgc2hhcmVkIHdpdGggb3RoZXIgY29tcGxldGlvbiBzY3JpcHRzLiAgQnkgdGhlIHRpbWUgdGhlIGNvbXBsZXRpb24KKyMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQsIENPTVBfV09SRFMgaGFzIGFscmVhZHkgYmVlbiBwb3B1bGF0ZWQgc28gbG9jYWwKKyMgY2hhbmdlcyB0byBDT01QX1dPUkRCUkVBS1MgaGF2ZSBubyBlZmZlY3QuCisjCisjIE91dHB1dDogd29yZHNfLCBjd29yZF8sIGN1cl8uCisKK19fZ2l0X3JlYXNzZW1ibGVfY29tcF93b3Jkc19ieV9yZWYoKQoreworCWxvY2FsIGV4Y2x1ZGUgaSBqIGZpcnN0CisJIyBXaGljaCB3b3JkIHNlcGFyYXRvcnMgdG8gZXhjbHVkZT8KKwlleGNsdWRlPSIkezEvL1teJENPTVBfV09SREJSRUFLU119IgorCWN3b3JkXz0kQ09NUF9DV09SRAorCWlmIFsgLXogIiRleGNsdWRlIiBdOyB0aGVuCisJCXdvcmRzXz0oIiR7Q09NUF9XT1JEU1tAXX0iKQorCQlyZXR1cm4KKwlmaQorCSMgTGlzdCBvZiB3b3JkIGNvbXBsZXRpb24gc2VwYXJhdG9ycyBoYXMgc2hydW5rOworCSMgcmUtYXNzZW1ibGUgd29yZHMgdG8gY29tcGxldGUuCisJZm9yICgoaT0wLCBqPTA7IGkgPCAkeyNDT01QX1dPUkRTW0BdfTsgaSsrLCBqKyspKTsgZG8KKwkJIyBBcHBlbmQgZWFjaCBub25lbXB0eSB3b3JkIGNvbnNpc3Rpbmcgb2YganVzdAorCQkjIHdvcmQgc2VwYXJhdG9yIGNoYXJhY3RlcnMgdG8gdGhlIGN1cnJlbnQgd29yZC4KKwkJZmlyc3Q9dAorCQl3aGlsZQorCQkJWyAkaSAtZ3QgMCBdICYmCisJCQlbIC1uICIke0NPTVBfV09SRFNbJGldfSIgXSAmJgorCQkJIyB3b3JkIGNvbnNpc3RzIG9mIGV4Y2x1ZGVkIHdvcmQgc2VwYXJhdG9ycworCQkJWyAiJHtDT01QX1dPUkRTWyRpXS8vW14kZXhjbHVkZV19IiA9ICIke0NPTVBfV09SRFNbJGldfSIgXQorCQlkbworCQkJIyBBdHRhY2ggdG8gdGhlIHByZXZpb3VzIHRva2VuLAorCQkJIyB1bmxlc3MgdGhlIHByZXZpb3VzIHRva2VuIGlzIHRoZSBjb21tYW5kIG5hbWUuCisJCQlpZiBbICRqIC1nZSAyIF0gJiYgWyAtbiAiJGZpcnN0IiBdOyB0aGVuCisJCQkJKChqLS0pKQorCQkJZmkKKwkJCWZpcnN0PQorCQkJd29yZHNfWyRqXT0ke3dvcmRzX1tqXX0ke0NPTVBfV09SRFNbaV19CisJCQlpZiBbICRpID0gJENPTVBfQ1dPUkQgXTsgdGhlbgorCQkJCWN3b3JkXz0kagorCQkJZmkKKwkJCWlmICgoJGkgPCAkeyNDT01QX1dPUkRTW0BdfSAtIDEpKTsgdGhlbgorCQkJCSgoaSsrKSkKKwkJCWVsc2UKKwkJCQkjIERvbmUuCisJCQkJcmV0dXJuCisJCQlmaQorCQlkb25lCisJCXdvcmRzX1skal09JHt3b3Jkc19bal19JHtDT01QX1dPUkRTW2ldfQorCQlpZiBbICRpID0gJENPTVBfQ1dPUkQgXTsgdGhlbgorCQkJY3dvcmRfPSRqCisJCWZpCisJZG9uZQorfQorCitpZiAhIHR5cGUgX2dldF9jb21wX3dvcmRzX2J5X3JlZiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KK19nZXRfY29tcF93b3Jkc19ieV9yZWYgKCkKK3sKKwlsb2NhbCBleGNsdWRlIGN1cl8gd29yZHNfIGN3b3JkXworCWlmIFsgIiQxIiA9ICItbiIgXTsgdGhlbgorCQlleGNsdWRlPSQyCisJCXNoaWZ0IDIKKwlmaQorCV9fZ2l0X3JlYXNzZW1ibGVfY29tcF93b3Jkc19ieV9yZWYgIiRleGNsdWRlIgorCWN1cl89JHt3b3Jkc19bY3dvcmRfXX0KKwl3aGlsZSBbICQjIC1ndCAwIF07IGRvCisJCWNhc2UgIiQxIiBpbgorCQljdXIpCisJCQljdXI9JGN1cl8KKwkJCTs7CisJCXByZXYpCisJCQlwcmV2PSR7d29yZHNfWyRjd29yZF8tMV19CisJCQk7OworCQl3b3JkcykKKwkJCXdvcmRzPSgiJHt3b3Jkc19bQF19IikKKwkJCTs7CisJCWN3b3JkKQorCQkJY3dvcmQ9JGN3b3JkXworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKK30KK2ZpCisKKyMgRmlsbHMgdGhlIENPTVBSRVBMWSBhcnJheSB3aXRoIHByZWZpbHRlcmVkIHdvcmRzIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwKKyMgcHJvY2Vzc2luZy4KKyMgQ2FsbGVycyBtdXN0IHRha2UgY2FyZSBvZiBwcm92aWRpbmcgb25seSB3b3JkcyB0aGF0IG1hdGNoIHRoZSBjdXJyZW50IHdvcmQKKyMgdG8gYmUgY29tcGxldGVkIGFuZCBhZGRpbmcgYW55IHByZWZpeCBhbmQvb3Igc3VmZml4ICh0cmFpbGluZyBzcGFjZSEpLCBpZgorIyBuZWNlc3NhcnkuCisjIDE6IExpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgbWF0Y2hpbmcgY29tcGxldGlvbiB3b3JkcywgY29tcGxldGUgd2l0aAorIyAgICBwcmVmaXggYW5kIHN1ZmZpeC4KK19fZ2l0Y29tcF9kaXJlY3QgKCkKK3sKKwlsb2NhbCBJRlM9JCdcbicKKworCUNPTVBSRVBMWT0oJDEpCit9CisKK19fZ2l0Y29tcGFwcGVuZCAoKQoreworCWxvY2FsIHggaT0keyNDT01QUkVQTFlbQF19CisJZm9yIHggaW4gJDE7IGRvCisJCWlmIFtbICIkeCIgPT0gIiQzIiogXV07IHRoZW4KKwkJCUNPTVBSRVBMWVtpKytdPSIkMiR4JDQiCisJCWZpCisJZG9uZQorfQorCitfX2dpdGNvbXBhZGQgKCkKK3sKKwlDT01QUkVQTFk9KCkKKwlfX2dpdGNvbXBhcHBlbmQgIiRAIgorfQorCisjIEdlbmVyYXRlcyBjb21wbGV0aW9uIHJlcGx5LCBhcHBlbmRpbmcgYSBzcGFjZSB0byBwb3NzaWJsZSBjb21wbGV0aW9uIHdvcmRzLAorIyBpZiBuZWNlc3NhcnkuCisjIEl0IGFjY2VwdHMgMSB0byA0IGFyZ3VtZW50czoKKyMgMTogTGlzdCBvZiBwb3NzaWJsZSBjb21wbGV0aW9uIHdvcmRzLgorIyAyOiBBIHByZWZpeCB0byBiZSBhZGRlZCB0byBlYWNoIHBvc3NpYmxlIGNvbXBsZXRpb24gd29yZCAob3B0aW9uYWwpLgorIyAzOiBHZW5lcmF0ZSBwb3NzaWJsZSBjb21wbGV0aW9uIG1hdGNoZXMgZm9yIHRoaXMgd29yZCAob3B0aW9uYWwpLgorIyA0OiBBIHN1ZmZpeCB0byBiZSBhcHBlbmRlZCB0byBlYWNoIHBvc3NpYmxlIGNvbXBsZXRpb24gd29yZCAob3B0aW9uYWwpLgorX19naXRjb21wICgpCit7CisJbG9jYWwgY3VyXz0iJHszLSRjdXJ9IgorCisJY2FzZSAiJGN1cl8iIGluCisJLS0qPSkKKwkJOzsKKwktLW5vLSopCisJCWxvY2FsIGMgaT0wIElGUz0kJyBcdFxuJworCQlmb3IgYyBpbiAkMTsgZG8KKwkJCWlmIFtbICRjID09ICItLSIgXV07IHRoZW4KKwkJCQljb250aW51ZQorCQkJZmkKKwkJCWM9IiRjJHs0LX0iCisJCQlpZiBbWyAkYyA9PSAiJGN1cl8iKiBdXTsgdGhlbgorCQkJCWNhc2UgJGMgaW4KKwkJCQktLSo9fCouKSA7OworCQkJCSopIGM9IiRjICIgOzsKKwkJCQllc2FjCisJCQkJQ09NUFJFUExZW2krK109IiR7Mi19JGMiCisJCQlmaQorCQlkb25lCisJCTs7CisJKikKKwkJbG9jYWwgYyBpPTAgSUZTPSQnIFx0XG4nCisJCWZvciBjIGluICQxOyBkbworCQkJaWYgW1sgJGMgPT0gIi0tIiBdXTsgdGhlbgorCQkJCWM9Ii0tbm8tLi4uJHs0LX0iCisJCQkJaWYgW1sgJGMgPT0gIiRjdXJfIiogXV07IHRoZW4KKwkJCQkJQ09NUFJFUExZW2krK109IiR7Mi19JGMgIgorCQkJCWZpCisJCQkJYnJlYWsKKwkJCWZpCisJCQljPSIkYyR7NC19IgorCQkJaWYgW1sgJGMgPT0gIiRjdXJfIiogXV07IHRoZW4KKwkJCQljYXNlICRjIGluCisJCQkJKj18Ki4pIDs7CisJCQkJKikgYz0iJGMgIiA7OworCQkJCWVzYWMKKwkJCQlDT01QUkVQTFlbaSsrXT0iJHsyLX0kYyIKKwkJCWZpCisJCWRvbmUKKwkJOzsKKwllc2FjCit9CisKKyMgQ2xlYXIgdGhlIHZhcmlhYmxlcyBjYWNoaW5nIGJ1aWx0aW5zJyBvcHRpb25zIHdoZW4gKHJlLSlzb3VyY2luZworIyB0aGUgY29tcGxldGlvbiBzY3JpcHQuCitpZiBbWyAtbiAke1pTSF9WRVJTSU9OLX0gXV07IHRoZW4KKwl1bnNldCAkKHNldCB8c2VkIC1uZSAncy9eXChfX2dpdGNvbXBfYnVpbHRpbl9bYS16QS1aMC05X11bYS16QS1aMC05X10qXCk9LiovXDEvcCcpIDI+L2Rldi9udWxsCitlbHNlCisJdW5zZXQgJChjb21wZ2VuIC12IF9fZ2l0Y29tcF9idWlsdGluXykKK2ZpCisKKyMgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvCisjCisjICAgIF9fZ2l0Y29tcCAiJChnaXQgeHh4IC0tZ2l0LWNvbXBsZXRpb24taGVscGVyKSAuLi4iCisjCisjIGV4Y2VwdCB0aGF0IHRoZSBvdXRwdXQgaXMgY2FjaGVkLiBBY2NlcHQgMS0zIGFyZ3VtZW50czoKKyMgMTogdGhlIGdpdCBjb21tYW5kIHRvIGV4ZWN1dGUsIHRoaXMgaXMgYWxzbyB0aGUgY2FjaGUga2V5CisjIDI6IGV4dHJhIG9wdGlvbnMgdG8gYmUgYWRkZWQgb24gdG9wIChlLmcuIG5lZ2F0aXZlIGZvcm1zKQorIyAzOiBvcHRpb25zIHRvIGJlIGV4Y2x1ZGVkCitfX2dpdGNvbXBfYnVpbHRpbiAoKQoreworCSMgc3BhY2VzIG11c3QgYmUgcmVwbGFjZWQgd2l0aCB1bmRlcnNjb3JlIGZvciBtdWx0aS13b3JkCisJIyBjb21tYW5kcywgZS5nLiAiZ2l0IHJlbW90ZSBhZGQiIGJlY29tZXMgcmVtb3RlX2FkZC4KKwlsb2NhbCBjbWQ9IiQxIgorCWxvY2FsIGluY2w9IiQyIgorCWxvY2FsIGV4Y2w9IiQzIgorCisJbG9jYWwgdmFyPV9fZ2l0Y29tcF9idWlsdGluXyIke2NtZC8tL199IgorCWxvY2FsIG9wdGlvbnMKKwlldmFsICJvcHRpb25zPVwkJHZhciIKKworCWlmIFsgLXogIiRvcHRpb25zIiBdOyB0aGVuCisJCSMgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIGFyZSBzaWduaWZpY2FudCB0byBtYWtlCisJCSMgb3B0aW9uIHJlbW92YWwgd29yayBjb3JyZWN0bHkuCisJCW9wdGlvbnM9IiAkaW5jbCAkKF9fZ2l0ICR7Y21kL18vIH0gLS1naXQtY29tcGxldGlvbi1oZWxwZXIpICIgfHwgcmV0dXJuCisKKwkJZm9yIGkgaW4gJGV4Y2w7IGRvCisJCQlvcHRpb25zPSIke29wdGlvbnMvICRpIC8gfSIKKwkJZG9uZQorCQlldmFsICIkdmFyPVwiJG9wdGlvbnNcIiIKKwlmaQorCisJX19naXRjb21wICIkb3B0aW9ucyIKK30KKworIyBWYXJpYXRpb24gb2YgX19naXRjb21wX25sICgpIHRoYXQgYXBwZW5kcyB0byB0aGUgZXhpc3RpbmcgbGlzdCBvZgorIyBjb21wbGV0aW9uIGNhbmRpZGF0ZXMsIENPTVBSRVBMWS4KK19fZ2l0Y29tcF9ubF9hcHBlbmQgKCkKK3sKKwlsb2NhbCBJRlM9JCdcbicKKwlfX2dpdGNvbXBhcHBlbmQgIiQxIiAiJHsyLX0iICIkezMtJGN1cn0iICIkezQtIH0iCit9CisKKyMgR2VuZXJhdGVzIGNvbXBsZXRpb24gcmVwbHkgZnJvbSBuZXdsaW5lLXNlcGFyYXRlZCBwb3NzaWJsZSBjb21wbGV0aW9uIHdvcmRzCisjIGJ5IGFwcGVuZGluZyBhIHNwYWNlIHRvIGFsbCBvZiB0aGVtLgorIyBJdCBhY2NlcHRzIDEgdG8gNCBhcmd1bWVudHM6CisjIDE6IExpc3Qgb2YgcG9zc2libGUgY29tcGxldGlvbiB3b3Jkcywgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIG5ld2xpbmUuCisjIDI6IEEgcHJlZml4IHRvIGJlIGFkZGVkIHRvIGVhY2ggcG9zc2libGUgY29tcGxldGlvbiB3b3JkIChvcHRpb25hbCkuCisjIDM6IEdlbmVyYXRlIHBvc3NpYmxlIGNvbXBsZXRpb24gbWF0Y2hlcyBmb3IgdGhpcyB3b3JkIChvcHRpb25hbCkuCisjIDQ6IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggcG9zc2libGUgY29tcGxldGlvbiB3b3JkIGluc3RlYWQgb2YKKyMgICAgdGhlIGRlZmF1bHQgc3BhY2UgKG9wdGlvbmFsKS4gIElmIHNwZWNpZmllZCBidXQgZW1wdHksIG5vdGhpbmcgaXMKKyMgICAgYXBwZW5kZWQuCitfX2dpdGNvbXBfbmwgKCkKK3sKKwlDT01QUkVQTFk9KCkKKwlfX2dpdGNvbXBfbmxfYXBwZW5kICIkQCIKK30KKworIyBGaWxscyB0aGUgQ09NUFJFUExZIGFycmF5IHdpdGggcHJlZmlsdGVyZWQgcGF0aHMgd2l0aG91dCBhbnkgYWRkaXRpb25hbAorIyBwcm9jZXNzaW5nLgorIyBDYWxsZXJzIG11c3QgdGFrZSBjYXJlIG9mIHByb3ZpZGluZyBvbmx5IHBhdGhzIHRoYXQgbWF0Y2ggdGhlIGN1cnJlbnQgcGF0aAorIyB0byBiZSBjb21wbGV0ZWQgYW5kIGFkZGluZyBhbnkgcHJlZml4IHBhdGggY29tcG9uZW50cywgaWYgbmVjZXNzYXJ5LgorIyAxOiBMaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIG1hdGNoaW5nIHBhdGhzLCBjb21wbGV0ZSB3aXRoIGFsbCBwcmVmaXgKKyMgICAgcGF0aCBjb21wb25lbnRzLgorX19naXRjb21wX2ZpbGVfZGlyZWN0ICgpCit7CisJbG9jYWwgSUZTPSQnXG4nCisKKwlDT01QUkVQTFk9KCQxKQorCisJIyB1c2UgYSBoYWNrIHRvIGVuYWJsZSBmaWxlIG1vZGUgaW4gYmFzaCA8IDQKKwljb21wb3B0IC1vIGZpbGVuYW1lcyArbyBub3NwYWNlIDI+L2Rldi9udWxsIHx8CisJY29tcGdlbiAtZiAvbm9uLWV4aXN0aW5nLWRpci8gPi9kZXYvbnVsbCB8fAorCXRydWUKK30KKworIyBHZW5lcmF0ZXMgY29tcGxldGlvbiByZXBseSB3aXRoIGNvbXBnZW4gZnJvbSBuZXdsaW5lLXNlcGFyYXRlZCBwb3NzaWJsZQorIyBjb21wbGV0aW9uIGZpbGVuYW1lcy4KKyMgSXQgYWNjZXB0cyAxIHRvIDMgYXJndW1lbnRzOgorIyAxOiBMaXN0IG9mIHBvc3NpYmxlIGNvbXBsZXRpb24gZmlsZW5hbWVzLCBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgbmV3bGluZS4KKyMgMjogQSBkaXJlY3RvcnkgcHJlZml4IHRvIGJlIGFkZGVkIHRvIGVhY2ggcG9zc2libGUgY29tcGxldGlvbiBmaWxlbmFtZQorIyAgICAob3B0aW9uYWwpLgorIyAzOiBHZW5lcmF0ZSBwb3NzaWJsZSBjb21wbGV0aW9uIG1hdGNoZXMgZm9yIHRoaXMgd29yZCAob3B0aW9uYWwpLgorX19naXRjb21wX2ZpbGUgKCkKK3sKKwlsb2NhbCBJRlM9JCdcbicKKworCSMgWFhYIGRvZXMgbm90IHdvcmsgd2hlbiB0aGUgZGlyZWN0b3J5IHByZWZpeCBjb250YWlucyBhIHRpbGRlLAorCSMgc2luY2UgdGlsZGUgZXhwYW5zaW9uIGlzIG5vdCBhcHBsaWVkLgorCSMgVGhpcyBtZWFucyB0aGF0IENPTVBSRVBMWSB3aWxsIGJlIGVtcHR5IGFuZCBCYXNoIGRlZmF1bHQKKwkjIGNvbXBsZXRpb24gd2lsbCBiZSB1c2VkLgorCV9fZ2l0Y29tcGFkZCAiJDEiICIkezItfSIgIiR7My0kY3VyfSIgIiIKKworCSMgdXNlIGEgaGFjayB0byBlbmFibGUgZmlsZSBtb2RlIGluIGJhc2ggPCA0CisJY29tcG9wdCAtbyBmaWxlbmFtZXMgK28gbm9zcGFjZSAyPi9kZXYvbnVsbCB8fAorCWNvbXBnZW4gLWYgL25vbi1leGlzdGluZy1kaXIvID4vZGV2L251bGwgfHwKKwl0cnVlCit9CisKKyMgRXhlY3V0ZSAnZ2l0IGxzLWZpbGVzJywgdW5sZXNzIHRoZSAtLWNvbW1pdHRhYmxlIG9wdGlvbiBpcyBzcGVjaWZpZWQsIGluCisjIHdoaWNoIGNhc2UgaXQgcnVucyAnZ2l0IGRpZmYtaW5kZXgnIHRvIGZpbmQgb3V0IHRoZSBmaWxlcyB0aGF0IGNhbiBiZQorIyBjb21taXR0ZWQuICBJdCByZXR1cm4gcGF0aHMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgaW4gdGhlIGZpcnN0CisjIGFyZ3VtZW50LCBhbmQgdXNpbmcgdGhlIG9wdGlvbnMgc3BlY2lmaWVkIGluIHRoZSBzZWNvbmQgYXJndW1lbnQuCitfX2dpdF9sc19maWxlc19oZWxwZXIgKCkKK3sKKwlpZiBbICIkMiIgPT0gIi0tY29tbWl0dGFibGUiIF07IHRoZW4KKwkJX19naXQgLUMgIiQxIiAtYyBjb3JlLnF1b3RlUGF0aD1mYWxzZSBkaWZmLWluZGV4IFwKKwkJCS0tbmFtZS1vbmx5IC0tcmVsYXRpdmUgSEVBRCAtLSAiJHszLy9cXC9cXFxcfSoiCisJZWxzZQorCQkjIE5PVEU6ICQyIGlzIG5vdCBxdW90ZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCBtdWx0aXBsZSBvcHRpb25zCisJCV9fZ2l0IC1DICIkMSIgLWMgY29yZS5xdW90ZVBhdGg9ZmFsc2UgbHMtZmlsZXMgXAorCQkJLS1leGNsdWRlLXN0YW5kYXJkICQyIC0tICIkezMvL1xcL1xcXFx9KiIKKwlmaQorfQorCisKKyMgX19naXRfaW5kZXhfZmlsZXMgYWNjZXB0cyAxIG9yIDIgYXJndW1lbnRzOgorIyAxOiBPcHRpb25zIHRvIHBhc3MgdG8gbHMtZmlsZXMgKHJlcXVpcmVkKS4KKyMgMjogQSBkaXJlY3RvcnkgcGF0aCAob3B0aW9uYWwpLgorIyAgICBJZiBwcm92aWRlZCwgb25seSBmaWxlcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgYXJlIGxpc3RlZC4KKyMgICAgU3ViIGRpcmVjdG9yaWVzIGFyZSBuZXZlciByZWN1cnNlZC4gIFBhdGggbXVzdCBoYXZlIGEgdHJhaWxpbmcKKyMgICAgc2xhc2guCisjIDM6IExpc3Qgb25seSBwYXRocyBtYXRjaGluZyB0aGlzIHBhdGggY29tcG9uZW50IChvcHRpb25hbCkuCitfX2dpdF9pbmRleF9maWxlcyAoKQoreworCWxvY2FsIHJvb3Q9IiQyIiBtYXRjaD0iJDMiCisKKwlfX2dpdF9sc19maWxlc19oZWxwZXIgIiRyb290IiAiJDEiICIke21hdGNoOi0/fSIgfAorCWF3ayAtRiAvIC12IHBmeD0iJHsyLy9cXC9cXFxcfSIgJ3sKKwkJcGF0aHNbJDFdID0gMQorCX0KKwlFTkQgeworCQlmb3IgKHAgaW4gcGF0aHMpIHsKKwkJCWlmIChzdWJzdHIocCwgMSwgMSkgIT0gIlwiIikgeworCQkJCSMgTm8gc3BlY2lhbCBjaGFyYWN0ZXJzLCBlYXN5IQorCQkJCXByaW50IHBmeCBwCisJCQkJY29udGludWUKKwkJCX0KKworCQkJIyBUaGUgcGF0aCBpcyBxdW90ZWQuCisJCQlwID0gZGVxdW90ZShwKQorCQkJaWYgKHAgPT0gIiIpCisJCQkJY29udGludWUKKworCQkJIyBFdmVuIHdoZW4gYSBkaXJlY3RvcnkgbmFtZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbgorCQkJIyBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzLCBpdCB3aWxsIHN0aWxsIGJlIHF1b3RlZCBpZgorCQkJIyBhbnkgb2YgaXRzIChzdHJpcHBlZCkgdHJhaWxpbmcgcGF0aCBjb21wb25lbnRzIGRvLgorCQkJIyBCZWNhdXNlIG9mIHRoaXMgd2UgbWF5IGhhdmUgc2VlbiB0aGUgc2FtZSBkaXJlY3RvcnkKKwkJCSMgYm90aCBxdW90ZWQgYW5kIHVucXVvdGVkLgorCQkJaWYgKHAgaW4gcGF0aHMpCisJCQkJIyBXZSBoYXZlIHNlZW4gdGhlIHNhbWUgZGlyZWN0b3J5IHVucXVvdGVkLAorCQkJCSMgc2tpcCBpdC4KKwkJCQljb250aW51ZQorCQkJZWxzZQorCQkJCXByaW50IHBmeCBwCisJCX0KKwl9CisJZnVuY3Rpb24gZGVxdW90ZShwLCAgICBic19pZHgsIG91dCwgZXNjLCBlc2NfaWR4LCBkZWMpIHsKKwkJIyBTa2lwIG9wZW5pbmcgZG91YmxlIHF1b3RlLgorCQlwID0gc3Vic3RyKHAsIDIpCisKKwkJIyBJbnRlcnByZXQgYmFja3NsYXNoIGVzY2FwZSBzZXF1ZW5jZXMuCisJCXdoaWxlICgoYnNfaWR4ID0gaW5kZXgocCwgIlxcIikpICE9IDApIHsKKwkJCW91dCA9IG91dCBzdWJzdHIocCwgMSwgYnNfaWR4IC0gMSkKKwkJCWVzYyA9IHN1YnN0cihwLCBic19pZHggKyAxLCAxKQorCQkJcCA9IHN1YnN0cihwLCBic19pZHggKyAyKQorCisJCQlpZiAoKGVzY19pZHggPSBpbmRleCgiYWJ0dmZyXCJcXCIsIGVzYykpICE9IDApIHsKKwkJCQkjIEMtc3R5bGUgb25lLWNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2UuCisJCQkJb3V0ID0gb3V0IHN1YnN0cigiXGFcYlx0XHZcZlxyXCJcXCIsCisJCQkJCQkgZXNjX2lkeCwgMSkKKwkJCX0gZWxzZSBpZiAoZXNjID09ICJuIikgeworCQkJCSMgVWgtb2gsIGEgbmV3bGluZSBjaGFyYWN0ZXIuCisJCQkJIyBXZSBjYW5ub3QgcmVsaWFibHkgcHV0IGEgcGF0aG5hbWUKKwkJCQkjIGNvbnRhaW5pbmcgYSBuZXdsaW5lIGludG8gQ09NUFJFUExZLAorCQkJCSMgYW5kIHRoZSBuZXdsaW5lIHdvdWxkIGNyZWF0ZSBhIG1lc3MuCisJCQkJIyBTa2lwIHRoaXMgcGF0aC4KKwkJCQlyZXR1cm4gIiIKKwkJCX0gZWxzZSB7CisJCQkJIyBNdXN0IGJlIGEgXG5ubiBvY3RhbCB2YWx1ZSwgdGhlbi4KKwkJCQlkZWMgPSBlc2MgICAgICAgICAgICAgKiA2NCArIFwKKwkJCQkgICAgICBzdWJzdHIocCwgMSwgMSkgKiA4ICArIFwKKwkJCQkgICAgICBzdWJzdHIocCwgMiwgMSkKKwkJCQlvdXQgPSBvdXQgc3ByaW50ZigiJWMiLCBkZWMpCisJCQkJcCA9IHN1YnN0cihwLCAzKQorCQkJfQorCQl9CisJCSMgRHJvcCBjbG9zaW5nIGRvdWJsZSBxdW90ZSwgaWYgdGhlcmUgaXMgb25lLgorCQkjIChUaGVyZSBpcyBub3QgYW55IGlmIHRoaXMgaXMgYSBkaXJlY3RvcnksIGFzIGl0IHdhcworCQkjIGFscmVhZHkgc3RyaXBwZWQgd2l0aCB0aGUgdHJhaWxpbmcgcGF0aCBjb21wb25lbnRzLikKKwkJaWYgKHN1YnN0cihwLCBsZW5ndGgocCksIDEpID09ICJcIiIpCisJCQlvdXQgPSBvdXQgc3Vic3RyKHAsIDEsIGxlbmd0aChwKSAtIDEpCisJCWVsc2UKKwkJCW91dCA9IG91dCBwCisKKwkJcmV0dXJuIG91dAorCX0nCit9CisKKyMgX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSByZXF1aXJlcyAxIGFyZ3VtZW50OgorIyAxOiB0aGUgb3B0aW9ucyB0byBwYXNzIHRvIGxzLWZpbGUKKyMKKyMgVGhlIGV4Y2VwdGlvbiBpcyAtLWNvbW1pdHRhYmxlLCB3aGljaCBmaW5kcyB0aGUgZmlsZXMgYXBwcm9wcmlhdGUgY29tbWl0LgorX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAoKQoreworCWxvY2FsIGRlcXVvdGVkX3dvcmQgcGZ4PSIiIGN1cl8KKworCV9fZ2l0X2RlcXVvdGUgIiRjdXIiCisKKwljYXNlICIkZGVxdW90ZWRfd29yZCIgaW4KKwk/Ki8qKQorCQlwZng9IiR7ZGVxdW90ZWRfd29yZCUvKn0vIgorCQljdXJfPSIke2RlcXVvdGVkX3dvcmQjIyovfSIKKwkJOzsKKwkqKQorCQljdXJfPSIkZGVxdW90ZWRfd29yZCIKKwllc2FjCisKKwlfX2dpdGNvbXBfZmlsZV9kaXJlY3QgIiQoX19naXRfaW5kZXhfZmlsZXMgIiQxIiAiJHBmeCIgIiRjdXJfIikiCit9CisKKyMgTGlzdHMgYnJhbmNoZXMgZnJvbSB0aGUgbG9jYWwgcmVwb3NpdG9yeS4KKyMgMTogQSBwcmVmaXggdG8gYmUgYWRkZWQgdG8gZWFjaCBsaXN0ZWQgYnJhbmNoIChvcHRpb25hbCkuCisjIDI6IExpc3Qgb25seSBicmFuY2hlcyBtYXRjaGluZyB0aGlzIHdvcmQgKG9wdGlvbmFsOyBsaXN0IGFsbCBicmFuY2hlcyBpZgorIyAgICB1bnNldCBvciBlbXB0eSkuCisjIDM6IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggbGlzdGVkIGJyYW5jaCAob3B0aW9uYWwpLgorX19naXRfaGVhZHMgKCkKK3sKKwlsb2NhbCBwZng9IiR7MS19IiBjdXJfPSIkezItfSIgc2Z4PSIkezMtfSIKKworCV9fZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJHtwZngvL1wlLyUlfSUocmVmbmFtZTpzdHJpcD0yKSRzZngiIFwKKwkJCSJyZWZzL2hlYWRzLyRjdXJfKiIgInJlZnMvaGVhZHMvJGN1cl8qLyoqIgorfQorCisjIExpc3RzIHRhZ3MgZnJvbSB0aGUgbG9jYWwgcmVwb3NpdG9yeS4KKyMgQWNjZXB0cyB0aGUgc2FtZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgYXMgX19naXRfaGVhZHMoKSBhYm92ZS4KK19fZ2l0X3RhZ3MgKCkKK3sKKwlsb2NhbCBwZng9IiR7MS19IiBjdXJfPSIkezItfSIgc2Z4PSIkezMtfSIKKworCV9fZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJHtwZngvL1wlLyUlfSUocmVmbmFtZTpzdHJpcD0yKSRzZngiIFwKKwkJCSJyZWZzL3RhZ3MvJGN1cl8qIiAicmVmcy90YWdzLyRjdXJfKi8qKiIKK30KKworIyBMaXN0cyByZWZzIGZyb20gdGhlIGxvY2FsIChieSBkZWZhdWx0KSBvciBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkuCisjIEl0IGFjY2VwdHMgMCwgMSBvciAyIGFyZ3VtZW50czoKKyMgMTogVGhlIHJlbW90ZSB0byBsaXN0IHJlZnMgZnJvbSAob3B0aW9uYWw7IGlnbm9yZWQsIGlmIHNldCBidXQgZW1wdHkpLgorIyAgICBDYW4gYmUgdGhlIG5hbWUgb2YgYSBjb25maWd1cmVkIHJlbW90ZSwgYSBwYXRoLCBvciBhIFVSTC4KKyMgMjogSW4gYWRkaXRpb24gdG8gbG9jYWwgcmVmcywgbGlzdCB1bmlxdWUgYnJhbmNoZXMgZnJvbSByZWZzL3JlbW90ZXMvIGZvcgorIyAgICAnZ2l0IGNoZWNrb3V0J3MgdHJhY2tpbmcgRFdJTWVyeSAob3B0aW9uYWw7IGlnbm9yZWQsIGlmIHNldCBidXQgZW1wdHkpLgorIyAzOiBBIHByZWZpeCB0byBiZSBhZGRlZCB0byBlYWNoIGxpc3RlZCByZWYgKG9wdGlvbmFsKS4KKyMgNDogTGlzdCBvbmx5IHJlZnMgbWF0Y2hpbmcgdGhpcyB3b3JkIChvcHRpb25hbDsgbGlzdCBhbGwgcmVmcyBpZiB1bnNldCBvcgorIyAgICBlbXB0eSkuCisjIDU6IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggbGlzdGVkIHJlZiAob3B0aW9uYWw7IGlnbm9yZWQsIGlmIHNldAorIyAgICBidXQgZW1wdHkpLgorIworIyBVc2UgX19naXRfY29tcGxldGVfcmVmcygpIGluc3RlYWQuCitfX2dpdF9yZWZzICgpCit7CisJbG9jYWwgaSBoYXNoIGRpciB0cmFjaz0iJHsyLX0iCisJbG9jYWwgbGlzdF9yZWZzX2Zyb209cGF0aCByZW1vdGU9IiR7MS19IgorCWxvY2FsIGZvcm1hdCByZWZzCisJbG9jYWwgcGZ4PSIkezMtfSIgY3VyXz0iJHs0LSRjdXJ9IiBzZng9IiR7NS19IgorCWxvY2FsIG1hdGNoPSIkezQtfSIKKwlsb2NhbCBmZXJfcGZ4PSIke3BmeC8vXCUvJSV9IiAjICJlc2NhcGUiIGZvci1lYWNoLXJlZiBmb3JtYXQgc3BlY2lmaWVycworCisJX19naXRfZmluZF9yZXBvX3BhdGgKKwlkaXI9IiRfX2dpdF9yZXBvX3BhdGgiCisKKwlpZiBbIC16ICIkcmVtb3RlIiBdOyB0aGVuCisJCWlmIFsgLXogIiRkaXIiIF07IHRoZW4KKwkJCXJldHVybgorCQlmaQorCWVsc2UKKwkJaWYgX19naXRfaXNfY29uZmlndXJlZF9yZW1vdGUgIiRyZW1vdGUiOyB0aGVuCisJCQkjIGNvbmZpZ3VyZWQgcmVtb3RlIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBhCisJCQkjIGxvY2FsIGRpcmVjdG9yeSB3aXRoIHRoZSBzYW1lIG5hbWUKKwkJCWxpc3RfcmVmc19mcm9tPXJlbW90ZQorCQllbGlmIFsgLWQgIiRyZW1vdGUvLmdpdCIgXTsgdGhlbgorCQkJZGlyPSIkcmVtb3RlLy5naXQiCisJCWVsaWYgWyAtZCAiJHJlbW90ZSIgXTsgdGhlbgorCQkJZGlyPSIkcmVtb3RlIgorCQllbHNlCisJCQlsaXN0X3JlZnNfZnJvbT11cmwKKwkJZmkKKwlmaQorCisJaWYgWyAiJGxpc3RfcmVmc19mcm9tIiA9IHBhdGggXTsgdGhlbgorCQlpZiBbWyAiJGN1cl8iID09IF4qIF1dOyB0aGVuCisJCQlwZng9IiRwZnheIgorCQkJZmVyX3BmeD0iJGZlcl9wZnheIgorCQkJY3VyXz0ke2N1cl8jXn0KKwkJCW1hdGNoPSR7bWF0Y2gjXn0KKwkJZmkKKwkJY2FzZSAiJGN1cl8iIGluCisJCXJlZnN8cmVmcy8qKQorCQkJZm9ybWF0PSJyZWZuYW1lIgorCQkJcmVmcz0oIiRtYXRjaCoiICIkbWF0Y2gqLyoqIikKKwkJCXRyYWNrPSIiCisJCQk7OworCQkqKQorCQkJZm9yIGkgaW4gSEVBRCBGRVRDSF9IRUFEIE9SSUdfSEVBRCBNRVJHRV9IRUFEIFJFQkFTRV9IRUFEOyBkbworCQkJCWNhc2UgIiRpIiBpbgorCQkJCSRtYXRjaCopCisJCQkJCWlmIFsgLWUgIiRkaXIvJGkiIF07IHRoZW4KKwkJCQkJCWVjaG8gIiRwZngkaSRzZngiCisJCQkJCWZpCisJCQkJCTs7CisJCQkJZXNhYworCQkJZG9uZQorCQkJZm9ybWF0PSJyZWZuYW1lOnN0cmlwPTIiCisJCQlyZWZzPSgicmVmcy90YWdzLyRtYXRjaCoiICJyZWZzL3RhZ3MvJG1hdGNoKi8qKiIKKwkJCQkicmVmcy9oZWFkcy8kbWF0Y2gqIiAicmVmcy9oZWFkcy8kbWF0Y2gqLyoqIgorCQkJCSJyZWZzL3JlbW90ZXMvJG1hdGNoKiIgInJlZnMvcmVtb3Rlcy8kbWF0Y2gqLyoqIikKKwkJCTs7CisJCWVzYWMKKwkJX19naXRfZGlyPSIkZGlyIiBfX2dpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiRmZXJfcGZ4JSgkZm9ybWF0KSRzZngiIFwKKwkJCSIke3JlZnNbQF19IgorCQlpZiBbIC1uICIkdHJhY2siIF07IHRoZW4KKwkJCSMgZW1wbG95IHRoZSBoZXVyaXN0aWMgdXNlZCBieSBnaXQgY2hlY2tvdXQKKwkJCSMgVHJ5IHRvIGZpbmQgYSByZW1vdGUgYnJhbmNoIHRoYXQgbWF0Y2hlcyB0aGUgY29tcGxldGlvbiB3b3JkCisJCQkjIGJ1dCBvbmx5IG91dHB1dCBpZiB0aGUgYnJhbmNoIG5hbWUgaXMgdW5pcXVlCisJCQlfX2dpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiRmZXJfcGZ4JShyZWZuYW1lOnN0cmlwPTMpJHNmeCIgXAorCQkJCS0tc29ydD0icmVmbmFtZTpzdHJpcD0zIiBcCisJCQkJInJlZnMvcmVtb3Rlcy8qLyRtYXRjaCoiICJyZWZzL3JlbW90ZXMvKi8kbWF0Y2gqLyoqIiB8IFwKKwkJCXVuaXEgLXUKKwkJZmkKKwkJcmV0dXJuCisJZmkKKwljYXNlICIkY3VyXyIgaW4KKwlyZWZzfHJlZnMvKikKKwkJX19naXQgbHMtcmVtb3RlICIkcmVtb3RlIiAiJG1hdGNoKiIgfCBcCisJCXdoaWxlIHJlYWQgLXIgaGFzaCBpOyBkbworCQkJY2FzZSAiJGkiIGluCisJCQkqXnt9KSA7OworCQkJKikgZWNobyAiJHBmeCRpJHNmeCIgOzsKKwkJCWVzYWMKKwkJZG9uZQorCQk7OworCSopCisJCWlmIFsgIiRsaXN0X3JlZnNfZnJvbSIgPSByZW1vdGUgXTsgdGhlbgorCQkJY2FzZSAiSEVBRCIgaW4KKwkJCSRtYXRjaCopCWVjaG8gIiR7cGZ4fUhFQUQkc2Z4IiA7OworCQkJZXNhYworCQkJX19naXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIkZmVyX3BmeCUocmVmbmFtZTpzdHJpcD0zKSRzZngiIFwKKwkJCQkicmVmcy9yZW1vdGVzLyRyZW1vdGUvJG1hdGNoKiIgXAorCQkJCSJyZWZzL3JlbW90ZXMvJHJlbW90ZS8kbWF0Y2gqLyoqIgorCQllbHNlCisJCQlsb2NhbCBxdWVyeV9zeW1yZWYKKwkJCWNhc2UgIkhFQUQiIGluCisJCQkkbWF0Y2gqKQlxdWVyeV9zeW1yZWY9IkhFQUQiIDs7CisJCQllc2FjCisJCQlfX2dpdCBscy1yZW1vdGUgIiRyZW1vdGUiICRxdWVyeV9zeW1yZWYgXAorCQkJCSJyZWZzL3RhZ3MvJG1hdGNoKiIgInJlZnMvaGVhZHMvJG1hdGNoKiIgXAorCQkJCSJyZWZzL3JlbW90ZXMvJG1hdGNoKiIgfAorCQkJd2hpbGUgcmVhZCAtciBoYXNoIGk7IGRvCisJCQkJY2FzZSAiJGkiIGluCisJCQkJKl57fSkJOzsKKwkJCQlyZWZzLyopCWVjaG8gIiRwZngke2kjcmVmcy8qL30kc2Z4IiA7OworCQkJCSopCWVjaG8gIiRwZngkaSRzZngiIDs7ICAjIHN5bWJvbGljIHJlZnMKKwkJCQllc2FjCisJCQlkb25lCisJCWZpCisJCTs7CisJZXNhYworfQorCisjIENvbXBsZXRlcyByZWZzLCBzaG9ydCBhbmQgbG9uZywgbG9jYWwgYW5kIHJlbW90ZSwgc3ltYm9saWMgYW5kIHBzZXVkby4KKyMKKyMgVXNhZ2U6IF9fZ2l0X2NvbXBsZXRlX3JlZnMgWzxvcHRpb24+XS4uLgorIyAtLXJlbW90ZT08cmVtb3RlPjogVGhlIHJlbW90ZSB0byBsaXN0IHJlZnMgZnJvbSwgY2FuIGJlIHRoZSBuYW1lIG9mIGEKKyMgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgcmVtb3RlLCBhIHBhdGgsIG9yIGEgVVJMLgorIyAtLXRyYWNrOiBMaXN0IHVuaXF1ZSByZW1vdGUgYnJhbmNoZXMgZm9yICdnaXQgY2hlY2tvdXQncyB0cmFja2luZyBEV0lNZXJ5LgorIyAtLXBmeD08cHJlZml4PjogQSBwcmVmaXggdG8gYmUgYWRkZWQgdG8gZWFjaCByZWYuCisjIC0tY3VyPTx3b3JkPjogVGhlIGN1cnJlbnQgcmVmIHRvIGJlIGNvbXBsZXRlZC4gIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50CisjICAgICAgICAgICAgICAgd29yZCB0byBiZSBjb21wbGV0ZWQuCisjIC0tc2Z4PTxzdWZmaXg+OiBBIHN1ZmZpeCB0byBiZSBhcHBlbmRlZCB0byBlYWNoIHJlZiBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0CisjICAgICAgICAgICAgICAgICBzcGFjZS4KK19fZ2l0X2NvbXBsZXRlX3JlZnMgKCkKK3sKKwlsb2NhbCByZW1vdGUgdHJhY2sgcGZ4IGN1cl89IiRjdXIiIHNmeD0iICIKKworCXdoaWxlIHRlc3QgJCMgIT0gMDsgZG8KKwkJY2FzZSAiJDEiIGluCisJCS0tcmVtb3RlPSopCXJlbW90ZT0iJHsxIyMtLXJlbW90ZT19IiA7OworCQktLXRyYWNrKQl0cmFjaz0ieWVzIiA7OworCQktLXBmeD0qKQlwZng9IiR7MSMjLS1wZng9fSIgOzsKKwkJLS1jdXI9KikJY3VyXz0iJHsxIyMtLWN1cj19IiA7OworCQktLXNmeD0qKQlzZng9IiR7MSMjLS1zZng9fSIgOzsKKwkJKikJCXJldHVybiAxIDs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKKwlfX2dpdGNvbXBfZGlyZWN0ICIkKF9fZ2l0X3JlZnMgIiRyZW1vdGUiICIkdHJhY2siICIkcGZ4IiAiJGN1cl8iICIkc2Z4IikiCit9CisKKyMgX19naXRfcmVmczIgcmVxdWlyZXMgMSBhcmd1bWVudCAodG8gcGFzcyB0byBfX2dpdF9yZWZzKQorIyBEZXByZWNhdGVkOiB1c2UgX19naXRfY29tcGxldGVfZmV0Y2hfcmVmc3BlY3MoKSBpbnN0ZWFkLgorX19naXRfcmVmczIgKCkKK3sKKwlsb2NhbCBpCisJZm9yIGkgaW4gJChfX2dpdF9yZWZzICIkMSIpOyBkbworCQllY2hvICIkaTokaSIKKwlkb25lCit9CisKKyMgQ29tcGxldGVzIHJlZnNwZWNzIGZvciBmZXRjaGluZyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkuCisjIDE6IFRoZSByZW1vdGUgcmVwb3NpdG9yeS4KKyMgMjogQSBwcmVmaXggdG8gYmUgYWRkZWQgdG8gZWFjaCBsaXN0ZWQgcmVmc3BlYyAob3B0aW9uYWwpLgorIyAzOiBUaGUgcmVmIHRvIGJlIGNvbXBsZXRlZCBhcyBhIHJlZnNwZWMgaW5zdGVhZCBvZiB0aGUgY3VycmVudCB3b3JkIHRvIGJlCisjICAgIGNvbXBsZXRlZCAob3B0aW9uYWwpCisjIDQ6IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggbGlzdGVkIHJlZnNwZWMgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdAorIyAgICBzcGFjZSAob3B0aW9uYWwpLgorX19naXRfY29tcGxldGVfZmV0Y2hfcmVmc3BlY3MgKCkKK3sKKwlsb2NhbCBpIHJlbW90ZT0iJDEiIHBmeD0iJHsyLX0iIGN1cl89IiR7My0kY3VyfSIgc2Z4PSIkezQtIH0iCisKKwlfX2dpdGNvbXBfZGlyZWN0ICIkKAorCQlmb3IgaSBpbiAkKF9fZ2l0X3JlZnMgIiRyZW1vdGUiICIiICIiICIkY3VyXyIpIDsgZG8KKwkJCWVjaG8gIiRwZngkaTokaSRzZngiCisJCWRvbmUKKwkJKSIKK30KKworIyBfX2dpdF9yZWZzX3JlbW90ZXMgcmVxdWlyZXMgMSBhcmd1bWVudCAodG8gcGFzcyB0byBscy1yZW1vdGUpCitfX2dpdF9yZWZzX3JlbW90ZXMgKCkKK3sKKwlsb2NhbCBpIGhhc2gKKwlfX2dpdCBscy1yZW1vdGUgIiQxIiAncmVmcy9oZWFkcy8qJyB8IFwKKwl3aGlsZSByZWFkIC1yIGhhc2ggaTsgZG8KKwkJZWNobyAiJGk6cmVmcy9yZW1vdGVzLyQxLyR7aSNyZWZzL2hlYWRzL30iCisJZG9uZQorfQorCitfX2dpdF9yZW1vdGVzICgpCit7CisJX19naXRfZmluZF9yZXBvX3BhdGgKKwl0ZXN0IC1kICIkX19naXRfcmVwb19wYXRoL3JlbW90ZXMiICYmIGxzIC0xICIkX19naXRfcmVwb19wYXRoL3JlbW90ZXMiCisJX19naXQgcmVtb3RlCit9CisKKyMgUmV0dXJucyB0cnVlIGlmICQxIG1hdGNoZXMgdGhlIG5hbWUgb2YgYSBjb25maWd1cmVkIHJlbW90ZSwgZmFsc2Ugb3RoZXJ3aXNlLgorX19naXRfaXNfY29uZmlndXJlZF9yZW1vdGUgKCkKK3sKKwlsb2NhbCByZW1vdGUKKwlmb3IgcmVtb3RlIGluICQoX19naXRfcmVtb3Rlcyk7IGRvCisJCWlmIFsgIiRyZW1vdGUiID0gIiQxIiBdOyB0aGVuCisJCQlyZXR1cm4gMAorCQlmaQorCWRvbmUKKwlyZXR1cm4gMQorfQorCitfX2dpdF9saXN0X21lcmdlX3N0cmF0ZWdpZXMgKCkKK3sKKwlMQU5HPUMgTENfQUxMPUMgZ2l0IG1lcmdlIC1zIGhlbHAgMj4mMSB8CisJc2VkIC1uIC1lICcvW0FhXXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiAvLC9eJC97CisJCXMvXC4kLy8KKwkJcy8uKjovLworCQlzL15bIAldKi8vCisJCXMvWyAJXSokLy8KKwkJcAorCX0nCit9CisKK19fZ2l0X21lcmdlX3N0cmF0ZWdpZXM9CisjICdnaXQgbWVyZ2UgLXMgaGVscCcgKGFuZCB0aHVzIGRldGVjdGlvbiBvZiB0aGUgbWVyZ2Ugc3RyYXRlZ3kKKyMgbGlzdCkgZmFpbHMsIHVuZm9ydHVuYXRlbHksIGlmIHJ1biBvdXRzaWRlIG9mIGFueSBnaXQgd29ya2luZworIyB0cmVlLiAgX19naXRfbWVyZ2Vfc3RyYXRlZ2llcyBpcyBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBpbgorIyB0aGF0IGNhc2UsIGFuZCB0aGUgZGV0ZWN0aW9uIHdpbGwgYmUgcmVwZWF0ZWQgdGhlIG5leHQgdGltZSBpdAorIyBpcyBuZWVkZWQuCitfX2dpdF9jb21wdXRlX21lcmdlX3N0cmF0ZWdpZXMgKCkKK3sKKwl0ZXN0IC1uICIkX19naXRfbWVyZ2Vfc3RyYXRlZ2llcyIgfHwKKwlfX2dpdF9tZXJnZV9zdHJhdGVnaWVzPSQoX19naXRfbGlzdF9tZXJnZV9zdHJhdGVnaWVzKQorfQorCitfX2dpdF9tZXJnZV9zdHJhdGVneV9vcHRpb25zPSJvdXJzIHRoZWlycyBzdWJ0cmVlIHN1YnRyZWU9IHBhdGllbmNlCisJaGlzdG9ncmFtIGRpZmYtYWxnb3JpdGhtPSBpZ25vcmUtc3BhY2UtY2hhbmdlIGlnbm9yZS1hbGwtc3BhY2UKKwlpZ25vcmUtc3BhY2UtYXQtZW9sIHJlbm9ybWFsaXplIG5vLXJlbm9ybWFsaXplIG5vLXJlbmFtZXMKKwlmaW5kLXJlbmFtZXMgZmluZC1yZW5hbWVzPSByZW5hbWUtdGhyZXNob2xkPSIKKworX19naXRfY29tcGxldGVfcmV2bGlzdF9maWxlICgpCit7CisJbG9jYWwgZGVxdW90ZWRfd29yZCBwZnggbHMgcmVmIGN1cl89IiRjdXIiCisJY2FzZSAiJGN1cl8iIGluCisJKi4uPyo6KikKKwkJcmV0dXJuCisJCTs7CisJPyo6KikKKwkJcmVmPSIke2N1cl8lJToqfSIKKwkJY3VyXz0iJHtjdXJfIyo6fSIKKworCQlfX2dpdF9kZXF1b3RlICIkY3VyXyIKKworCQljYXNlICIkZGVxdW90ZWRfd29yZCIgaW4KKwkJPyovKikKKwkJCXBmeD0iJHtkZXF1b3RlZF93b3JkJS8qfSIKKwkJCWN1cl89IiR7ZGVxdW90ZWRfd29yZCMjKi99IgorCQkJbHM9IiRyZWY6JHBmeCIKKwkJCXBmeD0iJHBmeC8iCisJCQk7OworCQkqKQorCQkJY3VyXz0iJGRlcXVvdGVkX3dvcmQiCisJCQlscz0iJHJlZiIKKwkJCTs7CisJCWVzYWMKKworCQljYXNlICIkQ09NUF9XT1JEQlJFQUtTIiBpbgorCQkqOiopIDogZ3JlYXQgOzsKKwkJKikgICBwZng9IiRyZWY6JHBmeCIgOzsKKwkJZXNhYworCisJCV9fZ2l0Y29tcF9maWxlICIkKF9fZ2l0IGxzLXRyZWUgIiRscyIgXAorCQkJCXwgc2VkICdzL14uKgkvLworCQkJCSAgICAgICBzLyQvLycpIiBcCisJCQkiJHBmeCIgIiRjdXJfIgorCQk7OworCSouLi4qKQorCQlwZng9IiR7Y3VyXyUuLi4qfS4uLiIKKwkJY3VyXz0iJHtjdXJfIyouLi59IgorCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tcGZ4PSIkcGZ4IiAtLWN1cj0iJGN1cl8iCisJCTs7CisJKi4uKikKKwkJcGZ4PSIke2N1cl8lLi4qfS4uIgorCQljdXJfPSIke2N1cl8jKi4ufSIKKwkJX19naXRfY29tcGxldGVfcmVmcyAtLXBmeD0iJHBmeCIgLS1jdXI9IiRjdXJfIgorCQk7OworCSopCisJCV9fZ2l0X2NvbXBsZXRlX3JlZnMKKwkJOzsKKwllc2FjCit9CisKK19fZ2l0X2NvbXBsZXRlX2ZpbGUgKCkKK3sKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0X2ZpbGUKK30KKworX19naXRfY29tcGxldGVfcmV2bGlzdCAoKQoreworCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3RfZmlsZQorfQorCitfX2dpdF9jb21wbGV0ZV9yZW1vdGVfb3JfcmVmc3BlYyAoKQoreworCWxvY2FsIGN1cl89IiRjdXIiIGNtZD0iJHt3b3Jkc1sxXX0iCisJbG9jYWwgaSBjPTIgcmVtb3RlPSIiIHBmeD0iIiBsaHM9MSBub19jb21wbGV0ZV9yZWZzcGVjPTAKKwlpZiBbICIkY21kIiA9ICJyZW1vdGUiIF07IHRoZW4KKwkJKChjKyspKQorCWZpCisJd2hpbGUgWyAkYyAtbHQgJGN3b3JkIF07IGRvCisJCWk9IiR7d29yZHNbY119IgorCQljYXNlICIkaSIgaW4KKwkJLS1taXJyb3IpIFsgIiRjbWQiID0gInB1c2giIF0gJiYgbm9fY29tcGxldGVfcmVmc3BlYz0xIDs7CisJCS1kfC0tZGVsZXRlKSBbICIkY21kIiA9ICJwdXNoIiBdICYmIGxocz0wIDs7CisJCS0tYWxsKQorCQkJY2FzZSAiJGNtZCIgaW4KKwkJCXB1c2gpIG5vX2NvbXBsZXRlX3JlZnNwZWM9MSA7OworCQkJZmV0Y2gpCisJCQkJcmV0dXJuCisJCQkJOzsKKwkJCSopIDs7CisJCQllc2FjCisJCQk7OworCQktLW11bHRpcGxlKSBub19jb21wbGV0ZV9yZWZzcGVjPTE7IGJyZWFrIDs7CisJCS0qKSA7OworCQkqKSByZW1vdGU9IiRpIjsgYnJlYWsgOzsKKwkJZXNhYworCQkoKGMrKykpCisJZG9uZQorCWlmIFsgLXogIiRyZW1vdGUiIF07IHRoZW4KKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlbW90ZXMpIgorCQlyZXR1cm4KKwlmaQorCWlmIFsgJG5vX2NvbXBsZXRlX3JlZnNwZWMgPSAxIF07IHRoZW4KKwkJcmV0dXJuCisJZmkKKwlbICIkcmVtb3RlIiA9ICIuIiBdICYmIHJlbW90ZT0KKwljYXNlICIkY3VyXyIgaW4KKwkqOiopCisJCWNhc2UgIiRDT01QX1dPUkRCUkVBS1MiIGluCisJCSo6KikgOiBncmVhdCA7OworCQkqKSAgIHBmeD0iJHtjdXJfJSU6Kn06IiA7OworCQllc2FjCisJCWN1cl89IiR7Y3VyXyMqOn0iCisJCWxocz0wCisJCTs7CisJKyopCisJCXBmeD0iKyIKKwkJY3VyXz0iJHtjdXJfIyt9IgorCQk7OworCWVzYWMKKwljYXNlICIkY21kIiBpbgorCWZldGNoKQorCQlpZiBbICRsaHMgPSAxIF07IHRoZW4KKwkJCV9fZ2l0X2NvbXBsZXRlX2ZldGNoX3JlZnNwZWNzICIkcmVtb3RlIiAiJHBmeCIgIiRjdXJfIgorCQllbHNlCisJCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tcGZ4PSIkcGZ4IiAtLWN1cj0iJGN1cl8iCisJCWZpCisJCTs7CisJcHVsbHxyZW1vdGUpCisJCWlmIFsgJGxocyA9IDEgXTsgdGhlbgorCQkJX19naXRfY29tcGxldGVfcmVmcyAtLXJlbW90ZT0iJHJlbW90ZSIgLS1wZng9IiRwZngiIC0tY3VyPSIkY3VyXyIKKwkJZWxzZQorCQkJX19naXRfY29tcGxldGVfcmVmcyAtLXBmeD0iJHBmeCIgLS1jdXI9IiRjdXJfIgorCQlmaQorCQk7OworCXB1c2gpCisJCWlmIFsgJGxocyA9IDEgXTsgdGhlbgorCQkJX19naXRfY29tcGxldGVfcmVmcyAtLXBmeD0iJHBmeCIgLS1jdXI9IiRjdXJfIgorCQllbHNlCisJCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tcmVtb3RlPSIkcmVtb3RlIiAtLXBmeD0iJHBmeCIgLS1jdXI9IiRjdXJfIgorCQlmaQorCQk7OworCWVzYWMKK30KKworX19naXRfY29tcGxldGVfc3RyYXRlZ3kgKCkKK3sKKwlfX2dpdF9jb21wdXRlX21lcmdlX3N0cmF0ZWdpZXMKKwljYXNlICIkcHJldiIgaW4KKwktc3wtLXN0cmF0ZWd5KQorCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZV9zdHJhdGVnaWVzIgorCQlyZXR1cm4gMAorCQk7OworCS1YKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZV9zdHJhdGVneV9vcHRpb25zIgorCQlyZXR1cm4gMAorCQk7OworCWVzYWMKKwljYXNlICIkY3VyIiBpbgorCS0tc3RyYXRlZ3k9KikKKwkJX19naXRjb21wICIkX19naXRfbWVyZ2Vfc3RyYXRlZ2llcyIgIiIgIiR7Y3VyIyMtLXN0cmF0ZWd5PX0iCisJCXJldHVybiAwCisJCTs7CisJLS1zdHJhdGVneS1vcHRpb249KikKKwkJX19naXRjb21wICIkX19naXRfbWVyZ2Vfc3RyYXRlZ3lfb3B0aW9ucyIgIiIgIiR7Y3VyIyMtLXN0cmF0ZWd5LW9wdGlvbj19IgorCQlyZXR1cm4gMAorCQk7OworCWVzYWMKKwlyZXR1cm4gMQorfQorCitfX2dpdF9hbGxfY29tbWFuZHM9CitfX2dpdF9jb21wdXRlX2FsbF9jb21tYW5kcyAoKQoreworCXRlc3QgLW4gIiRfX2dpdF9hbGxfY29tbWFuZHMiIHx8CisJX19naXRfYWxsX2NvbW1hbmRzPSQoX19naXQgLS1saXN0LWNtZHM9bWFpbixvdGhlcnMsYWxpYXMsbm9oZWxwZXJzKQorfQorCisjIExpc3RzIGFsbCBzZXQgY29uZmlnIHZhcmlhYmxlcyBzdGFydGluZyB3aXRoIHRoZSBnaXZlbiBzZWN0aW9uIHByZWZpeCwKKyMgd2l0aCB0aGUgcHJlZml4IHJlbW92ZWQuCitfX2dpdF9nZXRfY29uZmlnX3ZhcmlhYmxlcyAoKQoreworCWxvY2FsIHNlY3Rpb249IiQxIiBpIElGUz0kJ1xuJworCWZvciBpIGluICQoX19naXQgY29uZmlnIC0tbmFtZS1vbmx5IC0tZ2V0LXJlZ2V4cCAiXiRzZWN0aW9uXC4uKiIpOyBkbworCQllY2hvICIke2kjJHNlY3Rpb24ufSIKKwlkb25lCit9CisKK19fZ2l0X3ByZXR0eV9hbGlhc2VzICgpCit7CisJX19naXRfZ2V0X2NvbmZpZ192YXJpYWJsZXMgInByZXR0eSIKK30KKworIyBfX2dpdF9hbGlhc2VkX2NvbW1hbmQgcmVxdWlyZXMgMSBhcmd1bWVudAorX19naXRfYWxpYXNlZF9jb21tYW5kICgpCit7CisJbG9jYWwgd29yZCBjbWRsaW5lPSQoX19naXQgY29uZmlnIC0tZ2V0ICJhbGlhcy4kMSIpCisJZm9yIHdvcmQgaW4gJGNtZGxpbmU7IGRvCisJCWNhc2UgIiR3b3JkIiBpbgorCQlcIWdpdGt8Z2l0aykKKwkJCWVjaG8gImdpdGsiCisJCQlyZXR1cm4KKwkJCTs7CisJCVwhKikJOiBzaGVsbCBjb21tYW5kIGFsaWFzIDs7CisJCS0qKQk6IG9wdGlvbiA7OworCQkqPSopCTogc2V0dGluZyBlbnYgOzsKKwkJZ2l0KQk6IGdpdCBpdHNlbGYgOzsKKwkJXChcKSkgICA6IHNraXAgcGFyZW5zIG9mIHNoZWxsIGZ1bmN0aW9uIGRlZmluaXRpb24gOzsKKwkJeykJOiBza2lwIHN0YXJ0IG9mIHNoZWxsIGhlbHBlciBmdW5jdGlvbiA7OworCQk6KQk6IHNraXAgbnVsbCBjb21tYW5kIDs7CisJCVwnKikJOiBza2lwIG9wZW5pbmcgcXVvdGUgYWZ0ZXIgc2ggLWMgOzsKKwkJKikKKwkJCWVjaG8gIiR3b3JkIgorCQkJcmV0dXJuCisJCWVzYWMKKwlkb25lCit9CisKKyMgQ2hlY2sgd2hldGhlciBvbmUgb2YgdGhlIGdpdmVuIHdvcmRzIGlzIHByZXNlbnQgb24gdGhlIGNvbW1hbmQgbGluZSwKKyMgYW5kIHByaW50IHRoZSBmaXJzdCB3b3JkIGZvdW5kLgorIworIyBVc2FnZTogX19naXRfZmluZF9vbl9jbWRsaW5lIFs8b3B0aW9uPl0uLi4gIjx3b3JkbGlzdD4iCisjIC0tc2hvdy1pZHg6IE9wdGlvbmFsbHkgc2hvdyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHdvcmQgaW4gdGhlICR3b3JkcyBhcnJheS4KK19fZ2l0X2ZpbmRfb25fY21kbGluZSAoKQoreworCWxvY2FsIHdvcmQgYz0xIHNob3dfaWR4CisKKwl3aGlsZSB0ZXN0ICQjIC1ndCAxOyBkbworCQljYXNlICIkMSIgaW4KKwkJLS1zaG93LWlkeCkJc2hvd19pZHg9eSA7OworCQkqKQkJcmV0dXJuIDEgOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKwlsb2NhbCB3b3JkbGlzdD0iJDEiCisKKwl3aGlsZSBbICRjIC1sdCAkY3dvcmQgXTsgZG8KKwkJZm9yIHdvcmQgaW4gJHdvcmRsaXN0OyBkbworCQkJaWYgWyAiJHdvcmQiID0gIiR7d29yZHNbY119IiBdOyB0aGVuCisJCQkJaWYgWyAtbiAiJHNob3dfaWR4IiBdOyB0aGVuCisJCQkJCWVjaG8gIiRjICR3b3JkIgorCQkJCWVsc2UKKwkJCQkJZWNobyAiJHdvcmQiCisJCQkJZmkKKwkJCQlyZXR1cm4KKwkJCWZpCisJCWRvbmUKKwkJKChjKyspKQorCWRvbmUKK30KKworIyBFY2hvIHRoZSB2YWx1ZSBvZiBhbiBvcHRpb24gc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgY29uZmlnCisjCisjICQxOiBzaG9ydCBvcHRpb24gbmFtZQorIyAkMjogbG9uZyBvcHRpb24gbmFtZSBpbmNsdWRpbmcgPQorIyAkMzogbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMKKyMgJDQ6IGNvbmZpZyBzdHJpbmcgKG9wdGlvbmFsKQorIworIyBleGFtcGxlOgorIyByZXN1bHQ9IiQoX19naXRfZ2V0X29wdGlvbl92YWx1ZSAiLWQiICItLWRvLXNvbWV0aGluZz0iIFwKKyMgICAgICJ5ZXMgbm8iICJjb3JlLmRvU29tZXRoaW5nIikiCisjCisjIHJlc3VsdCBpcyB0aGVuIGVpdGhlciBlbXB0eSAobm8gb3B0aW9uIHNldCkgb3IgInllcyIgb3IgIm5vIgorIworIyBfX2dpdF9nZXRfb3B0aW9uX3ZhbHVlIHJlcXVpcmVzIDMgYXJndW1lbnRzCitfX2dpdF9nZXRfb3B0aW9uX3ZhbHVlICgpCit7CisJbG9jYWwgYyBzaG9ydF9vcHQgbG9uZ19vcHQgdmFsCisJbG9jYWwgcmVzdWx0PSB2YWx1ZXMgY29uZmlnX2tleSB3b3JkCisKKwlzaG9ydF9vcHQ9IiQxIgorCWxvbmdfb3B0PSIkMiIKKwl2YWx1ZXM9IiQzIgorCWNvbmZpZ19rZXk9IiQ0IgorCisJKChjID0gJGN3b3JkIC0gMSkpCisJd2hpbGUgWyAkYyAtZ2UgMCBdOyBkbworCQl3b3JkPSIke3dvcmRzW2NdfSIKKwkJZm9yIHZhbCBpbiAkdmFsdWVzOyBkbworCQkJaWYgWyAiJHNob3J0X29wdCR2YWwiID0gIiR3b3JkIiBdIHx8CisJCQkgICBbICIkbG9uZ19vcHQkdmFsIiAgPSAiJHdvcmQiIF07IHRoZW4KKwkJCQlyZXN1bHQ9IiR2YWwiCisJCQkJYnJlYWsgMgorCQkJZmkKKwkJZG9uZQorCQkoKGMtLSkpCisJZG9uZQorCisJaWYgWyAtbiAiJGNvbmZpZ19rZXkiIF0gJiYgWyAteiAiJHJlc3VsdCIgXTsgdGhlbgorCQlyZXN1bHQ9IiQoX19naXQgY29uZmlnICIkY29uZmlnX2tleSIpIgorCWZpCisKKwllY2hvICIkcmVzdWx0IgorfQorCitfX2dpdF9oYXNfZG91YmxlZGFzaCAoKQoreworCWxvY2FsIGM9MQorCXdoaWxlIFsgJGMgLWx0ICRjd29yZCBdOyBkbworCQlpZiBbICItLSIgPSAiJHt3b3Jkc1tjXX0iIF07IHRoZW4KKwkJCXJldHVybiAwCisJCWZpCisJCSgoYysrKSkKKwlkb25lCisJcmV0dXJuIDEKK30KKworIyBUcnkgdG8gY291bnQgbm9uIG9wdGlvbiBhcmd1bWVudHMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgZm9yIHRoZQorIyBzcGVjaWZpZWQgZ2l0IGNvbW1hbmQuCisjIFdoZW4gb3B0aW9ucyBhcmUgdXNlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSB0aGUgc3BlY2lhbCAtLSBvcHRpb24gdG8KKyMgdGVsbCB0aGUgaW1wbGVtZW50YXRpb24gd2VyZSBub24gb3B0aW9uIGFyZ3VtZW50cyBiZWdpbi4KKyMgWFhYIHRoaXMgY2FuIG5vdCBiZSBpbXByb3ZlZCwgc2luY2Ugb3B0aW9ucyBjYW4gYXBwZWFyIGV2ZXJ5d2hlcmUsIGFzCisjIGFuIGV4YW1wbGU6CisjCWdpdCBtdiB4IC1uIHkKKyMKKyMgX19naXRfY291bnRfYXJndW1lbnRzIHJlcXVpcmVzIDEgYXJndW1lbnQ6IHRoZSBnaXQgY29tbWFuZCBleGVjdXRlZC4KK19fZ2l0X2NvdW50X2FyZ3VtZW50cyAoKQoreworCWxvY2FsIHdvcmQgaSBjPTAKKworCSMgU2tpcCAiZ2l0IiAoZmlyc3QgYXJndW1lbnQpCisJZm9yICgoaT0xOyBpIDwgJHsjd29yZHNbQF19OyBpKyspKTsgZG8KKwkJd29yZD0iJHt3b3Jkc1tpXX0iCisKKwkJY2FzZSAiJHdvcmQiIGluCisJCQktLSkKKwkJCQkjIEdvb2Q7IHdlIGNhbiBhc3N1bWUgdGhhdCB0aGUgZm9sbG93aW5nIGFyZSBvbmx5IG5vbgorCQkJCSMgb3B0aW9uIGFyZ3VtZW50cy4KKwkJCQkoKGMgPSAwKSkKKwkJCQk7OworCQkJIiQxIikKKwkJCQkjIFNraXAgdGhlIHNwZWNpZmllZCBnaXQgY29tbWFuZCBhbmQgZGlzY2FyZCBnaXQKKwkJCQkjIG1haW4gb3B0aW9ucworCQkJCSgoYyA9IDApKQorCQkJCTs7CisJCQk/KikKKwkJCQkoKGMrKykpCisJCQkJOzsKKwkJZXNhYworCWRvbmUKKworCXByaW50ZiAiJWQiICRjCit9CisKK19fZ2l0X3doaXRlc3BhY2VsaXN0PSJub3dhcm4gd2FybiBlcnJvciBlcnJvci1hbGwgZml4IgorX19naXRfcGF0Y2hmb3JtYXQ9Im1ib3ggc3RnaXQgc3RnaXQtc2VyaWVzIGhnIG1ib3hyZCIKK19fZ2l0X3Nob3djdXJyZW50cGF0Y2g9ImRpZmYgcmF3IgorX19naXRfYW1faW5wcm9ncmVzc19vcHRpb25zPSItLXNraXAgLS1jb250aW51ZSAtLXJlc29sdmVkIC0tYWJvcnQgLS1xdWl0IC0tc2hvdy1jdXJyZW50LXBhdGNoIgorCitfZ2l0X2FtICgpCit7CisJX19naXRfZmluZF9yZXBvX3BhdGgKKwlpZiBbIC1kICIkX19naXRfcmVwb19wYXRoIi9yZWJhc2UtYXBwbHkgXTsgdGhlbgorCQlfX2dpdGNvbXAgIiRfX2dpdF9hbV9pbnByb2dyZXNzX29wdGlvbnMiCisJCXJldHVybgorCWZpCisJY2FzZSAiJGN1ciIgaW4KKwktLXdoaXRlc3BhY2U9KikKKwkJX19naXRjb21wICIkX19naXRfd2hpdGVzcGFjZWxpc3QiICIiICIke2N1ciMjLS13aGl0ZXNwYWNlPX0iCisJCXJldHVybgorCQk7OworCS0tcGF0Y2gtZm9ybWF0PSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3BhdGNoZm9ybWF0IiAiIiAiJHtjdXIjIy0tcGF0Y2gtZm9ybWF0PX0iCisJCXJldHVybgorCQk7OworCS0tc2hvdy1jdXJyZW50LXBhdGNoPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3Nob3djdXJyZW50cGF0Y2giICIiICIke2N1ciMjLS1zaG93LWN1cnJlbnQtcGF0Y2g9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBhbSAiIiBcCisJCQkiJF9fZ2l0X2FtX2lucHJvZ3Jlc3Nfb3B0aW9ucyIKKwkJcmV0dXJuCisJZXNhYworfQorCitfZ2l0X2FwcGx5ICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLXdoaXRlc3BhY2U9KikKKwkJX19naXRjb21wICIkX19naXRfd2hpdGVzcGFjZWxpc3QiICIiICIke2N1ciMjLS13aGl0ZXNwYWNlPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gYXBwbHkKKwkJcmV0dXJuCisJZXNhYworfQorCitfZ2l0X2FkZCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS1jaG1vZD0qKQorCQlfX2dpdGNvbXAgIit4IC14IiAiIiAiJHtjdXIjIy0tY2htb2Q9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBhZGQKKwkJcmV0dXJuCisJZXNhYworCisJbG9jYWwgY29tcGxldGVfb3B0PSItLW90aGVycyAtLW1vZGlmaWVkIC0tZGlyZWN0b3J5IC0tbm8tZW1wdHktZGlyZWN0b3J5IgorCWlmIHRlc3QgLW4gIiQoX19naXRfZmluZF9vbl9jbWRsaW5lICItdSAtLXVwZGF0ZSIpIgorCXRoZW4KKwkJY29tcGxldGVfb3B0PSItLW1vZGlmaWVkIgorCWZpCisJX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAiJGNvbXBsZXRlX29wdCIKK30KKworX2dpdF9hcmNoaXZlICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLWZvcm1hdD0qKQorCQlfX2dpdGNvbXAgIiQoZ2l0IGFyY2hpdmUgLS1saXN0KSIgIiIgIiR7Y3VyIyMtLWZvcm1hdD19IgorCQlyZXR1cm4KKwkJOzsKKwktLXJlbW90ZT0qKQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVtb3RlcykiICIiICIke2N1ciMjLS1yZW1vdGU9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBhcmNoaXZlICItLWZvcm1hdD0gLS1saXN0IC0tdmVyYm9zZSAtLXByZWZpeD0gLS13b3JrdHJlZS1hdHRyaWJ1dGVzIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfZmlsZQorfQorCitfZ2l0X2Jpc2VjdCAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJbG9jYWwgc3ViY29tbWFuZHM9InN0YXJ0IGJhZCBnb29kIHNraXAgcmVzZXQgdmlzdWFsaXplIHJlcGxheSBsb2cgcnVuIgorCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc3ViY29tbWFuZHMiKSIKKwlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgorCQlfX2dpdF9maW5kX3JlcG9fcGF0aAorCQlpZiBbIC1mICIkX19naXRfcmVwb19wYXRoIi9CSVNFQ1RfU1RBUlQgXTsgdGhlbgorCQkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJCWVsc2UKKwkJCV9fZ2l0Y29tcCAicmVwbGF5IHN0YXJ0IgorCQlmaQorCQlyZXR1cm4KKwlmaQorCisJY2FzZSAiJHN1YmNvbW1hbmQiIGluCisJYmFkfGdvb2R8cmVzZXR8c2tpcHxzdGFydCkKKwkJX19naXRfY29tcGxldGVfcmVmcworCQk7OworCSopCisJCTs7CisJZXNhYworfQorCitfX2dpdF9yZWZfZmllbGRsaXN0PSJyZWZuYW1lIG9iamVjdHR5cGUgb2JqZWN0c2l6ZSBvYmplY3RuYW1lIHVwc3RyZWFtIHB1c2ggSEVBRCBzeW1yZWYiCisKK19naXRfYnJhbmNoICgpCit7CisJbG9jYWwgaSBjPTEgb25seV9sb2NhbF9yZWY9Im4iIGhhc19yPSJuIgorCisJd2hpbGUgWyAkYyAtbHQgJGN3b3JkIF07IGRvCisJCWk9IiR7d29yZHNbY119IgorCQljYXNlICIkaSIgaW4KKwkJLWR8LS1kZWxldGV8LW18LS1tb3ZlKQlvbmx5X2xvY2FsX3JlZj0ieSIgOzsKKwkJLXJ8LS1yZW1vdGVzKQkJaGFzX3I9InkiIDs7CisJCWVzYWMKKwkJKChjKyspKQorCWRvbmUKKworCWNhc2UgIiRjdXIiIGluCisJLS1zZXQtdXBzdHJlYW0tdG89KikKKwkJX19naXRfY29tcGxldGVfcmVmcyAtLWN1cj0iJHtjdXIjIy0tc2V0LXVwc3RyZWFtLXRvPX0iCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBicmFuY2gKKwkJOzsKKwkqKQorCQlpZiBbICRvbmx5X2xvY2FsX3JlZiA9ICJ5IiAtYSAkaGFzX3IgPSAibiIgXTsgdGhlbgorCQkJX19naXRjb21wX2RpcmVjdCAiJChfX2dpdF9oZWFkcyAiIiAiJGN1ciIgIiAiKSIKKwkJZWxzZQorCQkJX19naXRfY29tcGxldGVfcmVmcworCQlmaQorCQk7OworCWVzYWMKK30KKworX2dpdF9idW5kbGUgKCkKK3sKKwlsb2NhbCBjbWQ9IiR7d29yZHNbMl19IgorCWNhc2UgIiRjd29yZCIgaW4KKwkyKQorCQlfX2dpdGNvbXAgImNyZWF0ZSBsaXN0LWhlYWRzIHZlcmlmeSB1bmJ1bmRsZSIKKwkJOzsKKwkzKQorCQkjIGxvb2tpbmcgZm9yIGEgZmlsZQorCQk7OworCSopCisJCWNhc2UgIiRjbWQiIGluCisJCQljcmVhdGUpCisJCQkJX19naXRfY29tcGxldGVfcmV2bGlzdAorCQkJOzsKKwkJZXNhYworCQk7OworCWVzYWMKK30KKworX2dpdF9jaGVja291dCAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLWNvbmZsaWN0PSopCisJCV9fZ2l0Y29tcCAiZGlmZjMgbWVyZ2UiICIiICIke2N1ciMjLS1jb25mbGljdD19IgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gY2hlY2tvdXQKKwkJOzsKKwkqKQorCQkjIGNoZWNrIGlmIC0tdHJhY2ssIC0tbm8tdHJhY2ssIG9yIC0tbm8tZ3Vlc3Mgd2FzIHNwZWNpZmllZAorCQkjIGlmIHNvLCBkaXNhYmxlIERXSU0gbW9kZQorCQlsb2NhbCBmbGFncz0iLS10cmFjayAtLW5vLXRyYWNrIC0tbm8tZ3Vlc3MiIHRyYWNrX29wdD0iLS10cmFjayIKKwkJaWYgWyAiJEdJVF9DT01QTEVUSU9OX0NIRUNLT1VUX05PX0dVRVNTIiA9ICIxIiBdIHx8CisJCSAgIFsgLW4gIiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkZmxhZ3MiKSIgXTsgdGhlbgorCQkJdHJhY2tfb3B0PScnCisJCWZpCisJCV9fZ2l0X2NvbXBsZXRlX3JlZnMgJHRyYWNrX29wdAorCQk7OworCWVzYWMKK30KKworX19naXRfc2VxdWVuY2VyX2lucHJvZ3Jlc3Nfb3B0aW9ucz0iLS1jb250aW51ZSAtLXF1aXQgLS1hYm9ydCAtLXNraXAiCisKK19fZ2l0X2NoZXJyeV9waWNrX2lucHJvZ3Jlc3Nfb3B0aW9ucz0kX19naXRfc2VxdWVuY2VyX2lucHJvZ3Jlc3Nfb3B0aW9ucworCitfZ2l0X2NoZXJyeV9waWNrICgpCit7CisJX19naXRfZmluZF9yZXBvX3BhdGgKKwlpZiBbIC1mICIkX19naXRfcmVwb19wYXRoIi9DSEVSUllfUElDS19IRUFEIF07IHRoZW4KKwkJX19naXRjb21wICIkX19naXRfY2hlcnJ5X3BpY2tfaW5wcm9ncmVzc19vcHRpb25zIgorCQlyZXR1cm4KKwlmaQorCisJX19naXRfY29tcGxldGVfc3RyYXRlZ3kgJiYgcmV0dXJuCisKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gY2hlcnJ5LXBpY2sgIiIgXAorCQkJIiRfX2dpdF9jaGVycnlfcGlja19pbnByb2dyZXNzX29wdGlvbnMiCisJCTs7CisJKikKKwkJX19naXRfY29tcGxldGVfcmVmcworCQk7OworCWVzYWMKK30KKworX2dpdF9jbGVhbiAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBjbGVhbgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisKKwkjIFhYWCBzaG91bGQgd2UgY2hlY2sgZm9yIC14IG9wdGlvbiA/CisJX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAiLS1vdGhlcnMgLS1kaXJlY3RvcnkiCit9CisKK19naXRfY2xvbmUgKCkKK3sKKwljYXNlICIkcHJldiIgaW4KKwktY3wtLWNvbmZpZykKKwkJX19naXRfY29tcGxldGVfY29uZmlnX3ZhcmlhYmxlX25hbWVfYW5kX3ZhbHVlCisJCXJldHVybgorCQk7OworCWVzYWMKKwljYXNlICIkY3VyIiBpbgorCS0tY29uZmlnPSopCisJCV9fZ2l0X2NvbXBsZXRlX2NvbmZpZ192YXJpYWJsZV9uYW1lX2FuZF92YWx1ZSBcCisJCQktLWN1cj0iJHtjdXIjIy0tY29uZmlnPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gY2xvbmUKKwkJcmV0dXJuCisJCTs7CisJZXNhYworfQorCitfX2dpdF91bnRyYWNrZWRfZmlsZV9tb2Rlcz0iYWxsIG5vIG5vcm1hbCIKKworX2dpdF9jb21taXQgKCkKK3sKKwljYXNlICIkcHJldiIgaW4KKwktY3wtQykKKwkJX19naXRfY29tcGxldGVfcmVmcworCQlyZXR1cm4KKwkJOzsKKwllc2FjCisKKwljYXNlICIkY3VyIiBpbgorCS0tY2xlYW51cD0qKQorCQlfX2dpdGNvbXAgImRlZmF1bHQgc2Npc3NvcnMgc3RyaXAgdmVyYmF0aW0gd2hpdGVzcGFjZQorCQkJIiAiIiAiJHtjdXIjIy0tY2xlYW51cD19IgorCQlyZXR1cm4KKwkJOzsKKwktLXJldXNlLW1lc3NhZ2U9KnwtLXJlZWRpdC1tZXNzYWdlPSp8XAorCS0tZml4dXA9KnwtLXNxdWFzaD0qKQorCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tY3VyPSIke2N1ciMqPX0iCisJCXJldHVybgorCQk7OworCS0tdW50cmFja2VkLWZpbGVzPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3VudHJhY2tlZF9maWxlX21vZGVzIiAiIiAiJHtjdXIjIy0tdW50cmFja2VkLWZpbGVzPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gY29tbWl0CisJCXJldHVybgorCWVzYWMKKworCWlmIF9fZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0IEhFQUQgPi9kZXYvbnVsbDsgdGhlbgorCQlfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlICItLWNvbW1pdHRhYmxlIgorCWVsc2UKKwkJIyBUaGlzIGlzIHRoZSBmaXJzdCBjb21taXQKKwkJX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAiLS1jYWNoZWQiCisJZmkKK30KKworX2dpdF9kZXNjcmliZSAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBkZXNjcmliZQorCQlyZXR1cm4KKwllc2FjCisJX19naXRfY29tcGxldGVfcmVmcworfQorCitfX2dpdF9kaWZmX2FsZ29yaXRobXM9Im15ZXJzIG1pbmltYWwgcGF0aWVuY2UgaGlzdG9ncmFtIgorCitfX2dpdF9kaWZmX3N1Ym1vZHVsZV9mb3JtYXRzPSJkaWZmIGxvZyBzaG9ydCIKKworX19naXRfY29sb3JfbW92ZWRfb3B0cz0ibm8gZGVmYXVsdCBwbGFpbiBibG9ja3MgemVicmEgZGltbWVkLXplYnJhIgorCitfX2dpdF9jb2xvcl9tb3ZlZF93c19vcHRzPSJubyBpZ25vcmUtc3BhY2UtYXQtZW9sIGlnbm9yZS1zcGFjZS1jaGFuZ2UKKwkJCWlnbm9yZS1hbGwtc3BhY2UgYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIgorCitfX2dpdF9kaWZmX2NvbW1vbl9vcHRpb25zPSItLXN0YXQgLS1udW1zdGF0IC0tc2hvcnRzdGF0IC0tc3VtbWFyeQorCQkJLS1wYXRjaC13aXRoLXN0YXQgLS1uYW1lLW9ubHkgLS1uYW1lLXN0YXR1cyAtLWNvbG9yCisJCQktLW5vLWNvbG9yIC0tY29sb3Itd29yZHMgLS1uby1yZW5hbWVzIC0tY2hlY2sKKwkJCS0tY29sb3ItbW92ZWQgLS1jb2xvci1tb3ZlZD0gLS1uby1jb2xvci1tb3ZlZAorCQkJLS1jb2xvci1tb3ZlZC13cz0gLS1uby1jb2xvci1tb3ZlZC13cworCQkJLS1mdWxsLWluZGV4IC0tYmluYXJ5IC0tYWJicmV2IC0tZGlmZi1maWx0ZXI9CisJCQktLWZpbmQtY29waWVzLWhhcmRlciAtLWlnbm9yZS1jci1hdC1lb2wKKwkJCS0tdGV4dCAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgLS1pZ25vcmUtc3BhY2UtY2hhbmdlCisJCQktLWlnbm9yZS1hbGwtc3BhY2UgLS1pZ25vcmUtYmxhbmstbGluZXMgLS1leGl0LWNvZGUKKwkJCS0tcXVpZXQgLS1leHQtZGlmZiAtLW5vLWV4dC1kaWZmCisJCQktLW5vLXByZWZpeCAtLXNyYy1wcmVmaXg9IC0tZHN0LXByZWZpeD0KKwkJCS0taW50ZXItaHVuay1jb250ZXh0PQorCQkJLS1wYXRpZW5jZSAtLWhpc3RvZ3JhbSAtLW1pbmltYWwKKwkJCS0tcmF3IC0td29yZC1kaWZmIC0td29yZC1kaWZmLXJlZ2V4PQorCQkJLS1kaXJzdGF0IC0tZGlyc3RhdD0gLS1kaXJzdGF0LWJ5LWZpbGUKKwkJCS0tZGlyc3RhdC1ieS1maWxlPSAtLWN1bXVsYXRpdmUKKwkJCS0tZGlmZi1hbGdvcml0aG09CisJCQktLXN1Ym1vZHVsZSAtLXN1Ym1vZHVsZT0gLS1pZ25vcmUtc3VibW9kdWxlcworCQkJLS1pbmRlbnQtaGV1cmlzdGljIC0tbm8taW5kZW50LWhldXJpc3RpYworCQkJLS10ZXh0Y29udiAtLW5vLXRleHRjb252CisiCisKK19naXRfZGlmZiAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLWRpZmYtYWxnb3JpdGhtPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2RpZmZfYWxnb3JpdGhtcyIgIiIgIiR7Y3VyIyMtLWRpZmYtYWxnb3JpdGhtPX0iCisJCXJldHVybgorCQk7OworCS0tc3VibW9kdWxlPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2RpZmZfc3VibW9kdWxlX2Zvcm1hdHMiICIiICIke2N1ciMjLS1zdWJtb2R1bGU9fSIKKwkJcmV0dXJuCisJCTs7CisJLS1jb2xvci1tb3ZlZD0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9jb2xvcl9tb3ZlZF9vcHRzIiAiIiAiJHtjdXIjIy0tY29sb3ItbW92ZWQ9fSIKKwkJcmV0dXJuCisJCTs7CisJLS1jb2xvci1tb3ZlZC13cz0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9jb2xvcl9tb3ZlZF93c19vcHRzIiAiIiAiJHtjdXIjIy0tY29sb3ItbW92ZWQtd3M9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXAgIi0tY2FjaGVkIC0tc3RhZ2VkIC0tcGlja2F4ZS1hbGwgLS1waWNrYXhlLXJlZ2V4CisJCQktLWJhc2UgLS1vdXJzIC0tdGhlaXJzIC0tbm8taW5kZXgKKwkJCSRfX2dpdF9kaWZmX2NvbW1vbl9vcHRpb25zCisJCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0X2ZpbGUKK30KKworX19naXRfbWVyZ2V0b29sc19jb21tb249ImRpZmZ1c2UgZGlmZm1lcmdlIGVjbWVyZ2UgZW1lcmdlIGtkaWZmMyBtZWxkIG9wZW5kaWZmCisJCQl0a2RpZmYgdmltZGlmZiBndmltZGlmZiB4eGRpZmYgYXJheGlzIHA0bWVyZ2UgYmMKKwkJCWNvZGVjb21wYXJlIHNtZXJnZQorIgorCitfZ2l0X2RpZmZ0b29sICgpCit7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKKwljYXNlICIkY3VyIiBpbgorCS0tdG9vbD0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZXRvb2xzX2NvbW1vbiBrb21wYXJlIiAiIiAiJHtjdXIjIy0tdG9vbD19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIGRpZmZ0b29sICIkX19naXRfZGlmZl9jb21tb25fb3B0aW9ucworCQkJCQktLWJhc2UgLS1jYWNoZWQgLS1vdXJzIC0tdGhlaXJzCisJCQkJCS0tcGlja2F4ZS1hbGwgLS1waWNrYXhlLXJlZ2V4CisJCQkJCS0tcmVsYXRpdmUgLS1zdGFnZWQKKwkJCQkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmV2bGlzdF9maWxlCit9CisKK19fZ2l0X2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlcz0ieWVzIG9uLWRlbWFuZCBubyIKKworX2dpdF9mZXRjaCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS1yZWN1cnNlLXN1Ym1vZHVsZXM9KikKKwkJX19naXRjb21wICIkX19naXRfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzIiAiIiAiJHtjdXIjIy0tcmVjdXJzZS1zdWJtb2R1bGVzPX0iCisJCXJldHVybgorCQk7OworCS0tZmlsdGVyPSopCisJCV9fZ2l0Y29tcCAiYmxvYjpub25lIGJsb2I6bGltaXQ9IHNwYXJzZTpvaWQ9IiAiIiAiJHtjdXIjIy0tZmlsdGVyPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gZmV0Y2gKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3JlbW90ZV9vcl9yZWZzcGVjCit9CisKK19fZ2l0X2Zvcm1hdF9wYXRjaF9leHRyYV9vcHRpb25zPSIKKwktLWZ1bGwtaW5kZXggLS1ub3QgLS1hbGwgLS1uby1wcmVmaXggLS1zcmMtcHJlZml4PQorCS0tZHN0LXByZWZpeD0gLS1ub3RlcworIgorCitfZ2l0X2Zvcm1hdF9wYXRjaCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS10aHJlYWQ9KikKKwkJX19naXRjb21wICIKKwkJCWRlZXAgc2hhbGxvdworCQkJIiAiIiAiJHtjdXIjIy0tdGhyZWFkPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gZm9ybWF0LXBhdGNoICIkX19naXRfZm9ybWF0X3BhdGNoX2V4dHJhX29wdGlvbnMiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0Cit9CisKK19naXRfZnNjayAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBmc2NrCisJCXJldHVybgorCQk7OworCWVzYWMKK30KKworX2dpdF9naXRrICgpCit7CisJX2dpdGsKK30KKworIyBMaXN0cyBtYXRjaGluZyBzeW1ib2wgbmFtZXMgZnJvbSBhIHRhZyAoYXMgaW4gY3RhZ3MpIGZpbGUuCisjIDE6IExpc3Qgc3ltYm9sIG5hbWVzIG1hdGNoaW5nIHRoaXMgd29yZC4KKyMgMjogVGhlIHRhZyBmaWxlIHRvIGxpc3Qgc3ltYm9sIG5hbWVzIGZyb20uCisjIDM6IEEgcHJlZml4IHRvIGJlIGFkZGVkIHRvIGVhY2ggbGlzdGVkIHN5bWJvbCBuYW1lIChvcHRpb25hbCkuCisjIDQ6IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggbGlzdGVkIHN5bWJvbCBuYW1lIChvcHRpb25hbCkuCitfX2dpdF9tYXRjaF9jdGFnICgpIHsKKwlhd2sgLXYgcGZ4PSIkezMtfSIgLXYgc2Z4PSIkezQtfSIgIgorCQkvXiR7MS8vXC8vXFwvfS8geyBwcmludCBwZnggXCQxIHNmeCB9CisJCSIgIiQyIgorfQorCisjIENvbXBsZXRlIHN5bWJvbCBuYW1lcyBmcm9tIGEgdGFnIGZpbGUuCisjIFVzYWdlOiBfX2dpdF9jb21wbGV0ZV9zeW1ib2wgWzxvcHRpb24+XS4uLgorIyAtLXRhZ3M9PGZpbGU+OiBUaGUgdGFnIGZpbGUgdG8gbGlzdCBzeW1ib2wgbmFtZXMgZnJvbSBpbnN0ZWFkIG9mIHRoZQorIyAgICAgICAgICAgICAgICBkZWZhdWx0ICJ0YWdzIi4KKyMgLS1wZng9PHByZWZpeD46IEEgcHJlZml4IHRvIGJlIGFkZGVkIHRvIGVhY2ggc3ltYm9sIG5hbWUuCisjIC0tY3VyPTx3b3JkPjogVGhlIGN1cnJlbnQgc3ltYm9sIG5hbWUgdG8gYmUgY29tcGxldGVkLiAgRGVmYXVsdHMgdG8KKyMgICAgICAgICAgICAgICB0aGUgY3VycmVudCB3b3JkIHRvIGJlIGNvbXBsZXRlZC4KKyMgLS1zZng9PHN1ZmZpeD46IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggc3ltYm9sIG5hbWUgaW5zdGVhZAorIyAgICAgICAgICAgICAgICAgb2YgdGhlIGRlZmF1bHQgc3BhY2UuCitfX2dpdF9jb21wbGV0ZV9zeW1ib2wgKCkgeworCWxvY2FsIHRhZ3M9dGFncyBwZng9IiIgY3VyXz0iJHtjdXItfSIgc2Z4PSIgIgorCisJd2hpbGUgdGVzdCAkIyAhPSAwOyBkbworCQljYXNlICIkMSIgaW4KKwkJLS10YWdzPSopCXRhZ3M9IiR7MSMjLS10YWdzPX0iIDs7CisJCS0tcGZ4PSopCXBmeD0iJHsxIyMtLXBmeD19IiA7OworCQktLWN1cj0qKQljdXJfPSIkezEjIy0tY3VyPX0iIDs7CisJCS0tc2Z4PSopCXNmeD0iJHsxIyMtLXNmeD19IiA7OworCQkqKQkJcmV0dXJuIDEgOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWlmIHRlc3QgLXIgIiR0YWdzIjsgdGhlbgorCQlfX2dpdGNvbXBfZGlyZWN0ICIkKF9fZ2l0X21hdGNoX2N0YWcgIiRjdXJfIiAiJHRhZ3MiICIkcGZ4IiAiJHNmeCIpIgorCWZpCit9CisKK19naXRfZ3JlcCAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIGdyZXAKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCisJY2FzZSAiJGN3b3JkLCRwcmV2IiBpbgorCTIsKnwqLC0qKQorCQlfX2dpdF9jb21wbGV0ZV9zeW1ib2wgJiYgcmV0dXJuCisJCTs7CisJZXNhYworCisJX19naXRfY29tcGxldGVfcmVmcworfQorCitfZ2l0X2hlbHAgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gaGVscAorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJaWYgdGVzdCAtbiAiJEdJVF9URVNUSU5HX0FMTF9DT01NQU5EX0xJU1QiCisJdGhlbgorCQlfX2dpdGNvbXAgIiRHSVRfVEVTVElOR19BTExfQ09NTUFORF9MSVNUICQoX19naXQgLS1saXN0LWNtZHM9YWxpYXMsbGlzdC1ndWlkZSkgZ2l0ayIKKwllbHNlCisJCV9fZ2l0Y29tcCAiJChfX2dpdCAtLWxpc3QtY21kcz1tYWluLG5vaGVscGVycyxhbGlhcyxsaXN0LWd1aWRlKSBnaXRrIgorCWZpCit9CisKK19naXRfaW5pdCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS1zaGFyZWQ9KikKKwkJX19naXRjb21wICIKKwkJCWZhbHNlIHRydWUgdW1hc2sgZ3JvdXAgYWxsIHdvcmxkIGV2ZXJ5Ym9keQorCQkJIiAiIiAiJHtjdXIjIy0tc2hhcmVkPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gaW5pdAorCQlyZXR1cm4KKwkJOzsKKwllc2FjCit9CisKK19naXRfbHNfZmlsZXMgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gbHMtZmlsZXMKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCisJIyBYWFggaWdub3JlIG9wdGlvbnMgbGlrZSAtLW1vZGlmaWVkIGFuZCBhbHdheXMgc3VnZ2VzdCBhbGwgY2FjaGVkCisJIyBmaWxlcy4KKwlfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlICItLWNhY2hlZCIKK30KKworX2dpdF9sc19yZW1vdGUgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gbHMtcmVtb3RlCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVtb3RlcykiCit9CisKK19naXRfbHNfdHJlZSAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBscy10cmVlCisJCXJldHVybgorCQk7OworCWVzYWMKKworCV9fZ2l0X2NvbXBsZXRlX2ZpbGUKK30KKworIyBPcHRpb25zIHRoYXQgZ28gd2VsbCBmb3IgbG9nLCBzaG9ydGxvZyBhbmQgZ2l0aworX19naXRfbG9nX2NvbW1vbl9vcHRpb25zPSIKKwktLW5vdCAtLWFsbAorCS0tYnJhbmNoZXMgLS10YWdzIC0tcmVtb3RlcworCS0tZmlyc3QtcGFyZW50IC0tbWVyZ2VzIC0tbm8tbWVyZ2VzCisJLS1tYXgtY291bnQ9CisJLS1tYXgtYWdlPSAtLXNpbmNlPSAtLWFmdGVyPQorCS0tbWluLWFnZT0gLS11bnRpbD0gLS1iZWZvcmU9CisJLS1taW4tcGFyZW50cz0gLS1tYXgtcGFyZW50cz0KKwktLW5vLW1pbi1wYXJlbnRzIC0tbm8tbWF4LXBhcmVudHMKKyIKKyMgT3B0aW9ucyB0aGF0IGdvIHdlbGwgZm9yIGxvZyBhbmQgZ2l0ayAobm90IHNob3J0bG9nKQorX19naXRfbG9nX2dpdGtfb3B0aW9ucz0iCisJLS1kZW5zZSAtLXNwYXJzZSAtLWZ1bGwtaGlzdG9yeQorCS0tc2ltcGxpZnktbWVyZ2VzIC0tc2ltcGxpZnktYnktZGVjb3JhdGlvbgorCS0tbGVmdC1yaWdodCAtLW5vdGVzIC0tbm8tbm90ZXMKKyIKKyMgT3B0aW9ucyB0aGF0IGdvIHdlbGwgZm9yIGxvZyBhbmQgc2hvcnRsb2cgKG5vdCBnaXRrKQorX19naXRfbG9nX3Nob3J0bG9nX29wdGlvbnM9IgorCS0tYXV0aG9yPSAtLWNvbW1pdHRlcj0gLS1ncmVwPQorCS0tYWxsLW1hdGNoIC0taW52ZXJ0LWdyZXAKKyIKKworX19naXRfbG9nX3ByZXR0eV9mb3JtYXRzPSJvbmVsaW5lIHNob3J0IG1lZGl1bSBmdWxsIGZ1bGxlciByZWZlcmVuY2UgZW1haWwgcmF3IGZvcm1hdDogdGZvcm1hdDogbWJveHJkIgorX19naXRfbG9nX2RhdGVfZm9ybWF0cz0icmVsYXRpdmUgaXNvODYwMSBpc284NjAxLXN0cmljdCByZmMyODIyIHNob3J0IGxvY2FsIGRlZmF1bHQgcmF3IHVuaXggZm9ybWF0OiIKKworX2dpdF9sb2cgKCkKK3sKKwlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KKwlfX2dpdF9maW5kX3JlcG9fcGF0aAorCisJbG9jYWwgbWVyZ2U9IiIKKwlpZiBbIC1mICIkX19naXRfcmVwb19wYXRoL01FUkdFX0hFQUQiIF07IHRoZW4KKwkJbWVyZ2U9Ii0tbWVyZ2UiCisJZmkKKwljYXNlICIkcHJldiwkY3VyIiBpbgorCS1MLDoqOiopCisJCXJldHVybgkjIGZhbGwgYmFjayB0byBCYXNoIGZpbGVuYW1lIGNvbXBsZXRpb24KKwkJOzsKKwktTCw6KikKKwkJX19naXRfY29tcGxldGVfc3ltYm9sIC0tY3VyPSIke2N1ciM6fSIgLS1zZng9IjoiCisJCXJldHVybgorCQk7OworCS1HLCp8LVMsKikKKwkJX19naXRfY29tcGxldGVfc3ltYm9sCisJCXJldHVybgorCQk7OworCWVzYWMKKwljYXNlICIkY3VyIiBpbgorCS0tcHJldHR5PSp8LS1mb3JtYXQ9KikKKwkJX19naXRjb21wICIkX19naXRfbG9nX3ByZXR0eV9mb3JtYXRzICQoX19naXRfcHJldHR5X2FsaWFzZXMpCisJCQkiICIiICIke2N1ciMqPX0iCisJCXJldHVybgorCQk7OworCS0tZGF0ZT0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9sb2dfZGF0ZV9mb3JtYXRzIiAiIiAiJHtjdXIjIy0tZGF0ZT19IgorCQlyZXR1cm4KKwkJOzsKKwktLWRlY29yYXRlPSopCisJCV9fZ2l0Y29tcCAiZnVsbCBzaG9ydCBubyIgIiIgIiR7Y3VyIyMtLWRlY29yYXRlPX0iCisJCXJldHVybgorCQk7OworCS0tZGlmZi1hbGdvcml0aG09KikKKwkJX19naXRjb21wICIkX19naXRfZGlmZl9hbGdvcml0aG1zIiAiIiAiJHtjdXIjIy0tZGlmZi1hbGdvcml0aG09fSIKKwkJcmV0dXJuCisJCTs7CisJLS1zdWJtb2R1bGU9KikKKwkJX19naXRjb21wICIkX19naXRfZGlmZl9zdWJtb2R1bGVfZm9ybWF0cyIgIiIgIiR7Y3VyIyMtLXN1Ym1vZHVsZT19IgorCQlyZXR1cm4KKwkJOzsKKwktLW5vLXdhbGs9KikKKwkJX19naXRjb21wICJzb3J0ZWQgdW5zb3J0ZWQiICIiICIke2N1ciMjLS1uby13YWxrPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wICIKKwkJCSRfX2dpdF9sb2dfY29tbW9uX29wdGlvbnMKKwkJCSRfX2dpdF9sb2dfc2hvcnRsb2dfb3B0aW9ucworCQkJJF9fZ2l0X2xvZ19naXRrX29wdGlvbnMKKwkJCS0tcm9vdCAtLXRvcG8tb3JkZXIgLS1kYXRlLW9yZGVyIC0tcmV2ZXJzZQorCQkJLS1mb2xsb3cgLS1mdWxsLWRpZmYKKwkJCS0tYWJicmV2LWNvbW1pdCAtLW5vLWFiYnJldi1jb21taXQgLS1hYmJyZXY9CisJCQktLXJlbGF0aXZlLWRhdGUgLS1kYXRlPQorCQkJLS1wcmV0dHk9IC0tZm9ybWF0PSAtLW9uZWxpbmUKKwkJCS0tc2hvdy1zaWduYXR1cmUKKwkJCS0tY2hlcnJ5LW1hcmsKKwkJCS0tY2hlcnJ5LXBpY2sKKwkJCS0tZ3JhcGgKKwkJCS0tZGVjb3JhdGUgLS1kZWNvcmF0ZT0gLS1uby1kZWNvcmF0ZQorCQkJLS13YWxrLXJlZmxvZ3MKKwkJCS0tbm8td2FsayAtLW5vLXdhbGs9IC0tZG8td2FsaworCQkJLS1wYXJlbnRzIC0tY2hpbGRyZW4KKwkJCS0tZXhwYW5kLXRhYnMgLS1leHBhbmQtdGFicz0gLS1uby1leHBhbmQtdGFicworCQkJLS1wYXRjaAorCQkJJG1lcmdlCisJCQkkX19naXRfZGlmZl9jb21tb25fb3B0aW9ucworCQkJLS1waWNrYXhlLWFsbCAtLXBpY2theGUtcmVnZXgKKwkJCS0tcGF0Y2ggLS1uby1wYXRjaAorCQkJIgorCQlyZXR1cm4KKwkJOzsKKwktTDoqOiopCisJCXJldHVybgkjIGZhbGwgYmFjayB0byBCYXNoIGZpbGVuYW1lIGNvbXBsZXRpb24KKwkJOzsKKwktTDoqKQorCQlfX2dpdF9jb21wbGV0ZV9zeW1ib2wgLS1jdXI9IiR7Y3VyIy1MOn0iIC0tc2Z4PSI6IgorCQlyZXR1cm4KKwkJOzsKKwktRyopCisJCV9fZ2l0X2NvbXBsZXRlX3N5bWJvbCAtLXBmeD0iLUciIC0tY3VyPSIke2N1ciMtR30iCisJCXJldHVybgorCQk7OworCS1TKikKKwkJX19naXRfY29tcGxldGVfc3ltYm9sIC0tcGZ4PSItUyIgLS1jdXI9IiR7Y3VyIy1TfSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3QKK30KKworX2dpdF9tZXJnZSAoKQoreworCV9fZ2l0X2NvbXBsZXRlX3N0cmF0ZWd5ICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIG1lcmdlCisJCXJldHVybgorCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZWZzCit9CisKK19naXRfbWVyZ2V0b29sICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLXRvb2w9KikKKwkJX19naXRjb21wICIkX19naXRfbWVyZ2V0b29sc19jb21tb24gdG9ydG9pc2VtZXJnZSIgIiIgIiR7Y3VyIyMtLXRvb2w9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXAgIi0tdG9vbD0gLS1wcm9tcHQgLS1uby1wcm9tcHQgLS1ndWkgLS1uby1ndWkiCisJCXJldHVybgorCQk7OworCWVzYWMKK30KKworX2dpdF9tZXJnZV9iYXNlICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIG1lcmdlLWJhc2UKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3JlZnMKK30KKworX2dpdF9tdiAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBtdgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisKKwlpZiBbICQoX19naXRfY291bnRfYXJndW1lbnRzICJtdiIpIC1ndCAwIF07IHRoZW4KKwkJIyBXZSBuZWVkIHRvIHNob3cgYm90aCBjYWNoZWQgYW5kIHVudHJhY2tlZCBmaWxlcyAoaW5jbHVkaW5nCisJCSMgZW1wdHkgZGlyZWN0b3JpZXMpIHNpbmNlIHRoaXMgbWF5IG5vdCBiZSB0aGUgbGFzdCBhcmd1bWVudC4KKwkJX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAiLS1jYWNoZWQgLS1vdGhlcnMgLS1kaXJlY3RvcnkiCisJZWxzZQorCQlfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlICItLWNhY2hlZCIKKwlmaQorfQorCitfZ2l0X25vdGVzICgpCit7CisJbG9jYWwgc3ViY29tbWFuZHM9J2FkZCBhcHBlbmQgY29weSBlZGl0IGdldC1yZWYgbGlzdCBtZXJnZSBwcnVuZSByZW1vdmUgc2hvdycKKwlsb2NhbCBzdWJjb21tYW5kPSIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHN1YmNvbW1hbmRzIikiCisKKwljYXNlICIkc3ViY29tbWFuZCwkY3VyIiBpbgorCSwtLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIG5vdGVzCisJCTs7CisJLCopCisJCWNhc2UgIiRwcmV2IiBpbgorCQktLXJlZikKKwkJCV9fZ2l0X2NvbXBsZXRlX3JlZnMKKwkJCTs7CisJCSopCisJCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyAtLXJlZiIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkqLC0tcmV1c2UtbWVzc2FnZT0qfCosLS1yZWVkaXQtbWVzc2FnZT0qKQorCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tY3VyPSIke2N1ciMqPX0iCisJCTs7CisJKiwtLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIG5vdGVzXyRzdWJjb21tYW5kCisJCTs7CisJcHJ1bmUsKnxnZXQtcmVmLCopCisJCSMgdGhpcyBjb21tYW5kIGRvZXMgbm90IHRha2UgYSByZWYsIGRvIG5vdCBjb21wbGV0ZSBpdAorCQk7OworCSopCisJCWNhc2UgIiRwcmV2IiBpbgorCQktbXwtRikKKwkJCTs7CisJCSopCisJCQlfX2dpdF9jb21wbGV0ZV9yZWZzCisJCQk7OworCQllc2FjCisJCTs7CisJZXNhYworfQorCitfZ2l0X3B1bGwgKCkKK3sKKwlfX2dpdF9jb21wbGV0ZV9zdHJhdGVneSAmJiByZXR1cm4KKworCWNhc2UgIiRjdXIiIGluCisJLS1yZWN1cnNlLXN1Ym1vZHVsZXM9KikKKwkJX19naXRjb21wICIkX19naXRfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzIiAiIiAiJHtjdXIjIy0tcmVjdXJzZS1zdWJtb2R1bGVzPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gcHVsbAorCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZW1vdGVfb3JfcmVmc3BlYworfQorCitfX2dpdF9wdXNoX3JlY3Vyc2Vfc3VibW9kdWxlcz0iY2hlY2sgb24tZGVtYW5kIG9ubHkiCisKK19fZ2l0X2NvbXBsZXRlX2ZvcmNlX3dpdGhfbGVhc2UgKCkKK3sKKwlsb2NhbCBjdXJfPSQxCisKKwljYXNlICIkY3VyXyIgaW4KKwktLSo9KQorCQk7OworCSo6KikKKwkJX19naXRfY29tcGxldGVfcmVmcyAtLWN1cj0iJHtjdXJfIyo6fSIKKwkJOzsKKwkqKQorCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tY3VyPSIkY3VyXyIKKwkJOzsKKwllc2FjCit9CisKK19naXRfcHVzaCAoKQoreworCWNhc2UgIiRwcmV2IiBpbgorCS0tcmVwbykKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlbW90ZXMpIgorCQlyZXR1cm4KKwkJOzsKKwktLXJlY3Vyc2Utc3VibW9kdWxlcykKKwkJX19naXRjb21wICIkX19naXRfcHVzaF9yZWN1cnNlX3N1Ym1vZHVsZXMiCisJCXJldHVybgorCQk7OworCWVzYWMKKwljYXNlICIkY3VyIiBpbgorCS0tcmVwbz0qKQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVtb3RlcykiICIiICIke2N1ciMjLS1yZXBvPX0iCisJCXJldHVybgorCQk7OworCS0tcmVjdXJzZS1zdWJtb2R1bGVzPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3B1c2hfcmVjdXJzZV9zdWJtb2R1bGVzIiAiIiAiJHtjdXIjIy0tcmVjdXJzZS1zdWJtb2R1bGVzPX0iCisJCXJldHVybgorCQk7OworCS0tZm9yY2Utd2l0aC1sZWFzZT0qKQorCQlfX2dpdF9jb21wbGV0ZV9mb3JjZV93aXRoX2xlYXNlICIke2N1ciMjLS1mb3JjZS13aXRoLWxlYXNlPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gcHVzaAorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmVtb3RlX29yX3JlZnNwZWMKK30KKworX2dpdF9yYW5nZV9kaWZmICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWNyZWF0aW9uLWZhY3Rvcj0gLS1uby1kdWFsLWNvbG9yCisJCQkkX19naXRfZGlmZl9jb21tb25fb3B0aW9ucworCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0Cit9CisKK19fZ2l0X3JlYmFzZV9pbnByb2dyZXNzX29wdGlvbnM9Ii0tY29udGludWUgLS1za2lwIC0tYWJvcnQgLS1xdWl0IC0tc2hvdy1jdXJyZW50LXBhdGNoIgorX19naXRfcmViYXNlX2ludGVyYWN0aXZlX2lucHJvZ3Jlc3Nfb3B0aW9ucz0iJF9fZ2l0X3JlYmFzZV9pbnByb2dyZXNzX29wdGlvbnMgLS1lZGl0LXRvZG8iCisKK19naXRfcmViYXNlICgpCit7CisJX19naXRfZmluZF9yZXBvX3BhdGgKKwlpZiBbIC1mICIkX19naXRfcmVwb19wYXRoIi9yZWJhc2UtbWVyZ2UvaW50ZXJhY3RpdmUgXTsgdGhlbgorCQlfX2dpdGNvbXAgIiRfX2dpdF9yZWJhc2VfaW50ZXJhY3RpdmVfaW5wcm9ncmVzc19vcHRpb25zIgorCQlyZXR1cm4KKwllbGlmIFsgLWQgIiRfX2dpdF9yZXBvX3BhdGgiL3JlYmFzZS1hcHBseSBdIHx8IFwKKwkgICAgIFsgLWQgIiRfX2dpdF9yZXBvX3BhdGgiL3JlYmFzZS1tZXJnZSBdOyB0aGVuCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3JlYmFzZV9pbnByb2dyZXNzX29wdGlvbnMiCisJCXJldHVybgorCWZpCisJX19naXRfY29tcGxldGVfc3RyYXRlZ3kgJiYgcmV0dXJuCisJY2FzZSAiJGN1ciIgaW4KKwktLXdoaXRlc3BhY2U9KikKKwkJX19naXRjb21wICIkX19naXRfd2hpdGVzcGFjZWxpc3QiICIiICIke2N1ciMjLS13aGl0ZXNwYWNlPX0iCisJCXJldHVybgorCQk7OworCS0tb250bz0qKQorCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tY3VyPSIke2N1ciMjLS1vbnRvPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gcmViYXNlICIiIFwKKwkJCSIkX19naXRfcmViYXNlX2ludGVyYWN0aXZlX2lucHJvZ3Jlc3Nfb3B0aW9ucyIKKworCQlyZXR1cm4KKwllc2FjCisJX19naXRfY29tcGxldGVfcmVmcworfQorCitfZ2l0X3JlZmxvZyAoKQoreworCWxvY2FsIHN1YmNvbW1hbmRzPSJzaG93IGRlbGV0ZSBleHBpcmUiCisJbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzdWJjb21tYW5kcyIpIgorCisJaWYgWyAteiAiJHN1YmNvbW1hbmQiIF07IHRoZW4KKwkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJZWxzZQorCQlfX2dpdF9jb21wbGV0ZV9yZWZzCisJZmkKK30KKworX19naXRfc2VuZF9lbWFpbF9jb25maXJtX29wdGlvbnM9ImFsd2F5cyBuZXZlciBhdXRvIGNjIGNvbXBvc2UiCitfX2dpdF9zZW5kX2VtYWlsX3N1cHByZXNzY2Nfb3B0aW9ucz0iYXV0aG9yIHNlbGYgY2MgYm9keWNjIHNvYiBjY2NtZCBib2R5IGFsbCIKKworX2dpdF9zZW5kX2VtYWlsICgpCit7CisJY2FzZSAiJHByZXYiIGluCisJLS10b3wtLWNjfC0tYmNjfC0tZnJvbSkKKwkJX19naXRjb21wICIkKF9fZ2l0IHNlbmQtZW1haWwgLS1kdW1wLWFsaWFzZXMpIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisKKwljYXNlICIkY3VyIiBpbgorCS0tY29uZmlybT0qKQorCQlfX2dpdGNvbXAgIgorCQkJJF9fZ2l0X3NlbmRfZW1haWxfY29uZmlybV9vcHRpb25zCisJCQkiICIiICIke2N1ciMjLS1jb25maXJtPX0iCisJCXJldHVybgorCQk7OworCS0tc3VwcHJlc3MtY2M9KikKKwkJX19naXRjb21wICIKKwkJCSRfX2dpdF9zZW5kX2VtYWlsX3N1cHByZXNzY2Nfb3B0aW9ucworCQkJIiAiIiAiJHtjdXIjIy0tc3VwcHJlc3MtY2M9fSIKKworCQlyZXR1cm4KKwkJOzsKKwktLXNtdHAtZW5jcnlwdGlvbj0qKQorCQlfX2dpdGNvbXAgInNzbCB0bHMiICIiICIke2N1ciMjLS1zbXRwLWVuY3J5cHRpb249fSIKKwkJcmV0dXJuCisJCTs7CisJLS10aHJlYWQ9KikKKwkJX19naXRjb21wICIKKwkJCWRlZXAgc2hhbGxvdworCQkJIiAiIiAiJHtjdXIjIy0tdGhyZWFkPX0iCisJCXJldHVybgorCQk7OworCS0tdG89KnwtLWNjPSp8LS1iY2M9KnwtLWZyb209KikKKwkJX19naXRjb21wICIkKF9fZ2l0IHNlbmQtZW1haWwgLS1kdW1wLWFsaWFzZXMpIiAiIiAiJHtjdXIjLS0qPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gc2VuZC1lbWFpbCAiLS1hbm5vdGF0ZSAtLWJjYyAtLWNjIC0tY2MtY21kIC0tY2hhaW4tcmVwbHktdG8KKwkJCS0tY29tcG9zZSAtLWNvbmZpcm09IC0tZHJ5LXJ1biAtLWVudmVsb3BlLXNlbmRlcgorCQkJLS1mcm9tIC0taWRlbnRpdHkKKwkJCS0taW4tcmVwbHktdG8gLS1uby1jaGFpbi1yZXBseS10byAtLW5vLXNpZ25lZC1vZmYtYnktY2MKKwkJCS0tbm8tc3VwcHJlc3MtZnJvbSAtLW5vLXRocmVhZCAtLXF1aWV0IC0tcmVwbHktdG8KKwkJCS0tc2lnbmVkLW9mZi1ieS1jYyAtLXNtdHAtcGFzcyAtLXNtdHAtc2VydmVyCisJCQktLXNtdHAtc2VydmVyLXBvcnQgLS1zbXRwLWVuY3J5cHRpb249IC0tc210cC11c2VyCisJCQktLXN1YmplY3QgLS1zdXBwcmVzcy1jYz0gLS1zdXBwcmVzcy1mcm9tIC0tdGhyZWFkIC0tdG8KKwkJCS0tdmFsaWRhdGUgLS1uby12YWxpZGF0ZQorCQkJJF9fZ2l0X2Zvcm1hdF9wYXRjaF9leHRyYV9vcHRpb25zIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmV2bGlzdAorfQorCitfZ2l0X3N0YWdlICgpCit7CisJX2dpdF9hZGQKK30KKworX2dpdF9zdGF0dXMgKCkKK3sKKwlsb2NhbCBjb21wbGV0ZV9vcHQKKwlsb2NhbCB1bnRyYWNrZWRfc3RhdGUKKworCWNhc2UgIiRjdXIiIGluCisJLS1pZ25vcmUtc3VibW9kdWxlcz0qKQorCQlfX2dpdGNvbXAgIm5vbmUgdW50cmFja2VkIGRpcnR5IGFsbCIgIiIgIiR7Y3VyIyMtLWlnbm9yZS1zdWJtb2R1bGVzPX0iCisJCXJldHVybgorCQk7OworCS0tdW50cmFja2VkLWZpbGVzPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3VudHJhY2tlZF9maWxlX21vZGVzIiAiIiAiJHtjdXIjIy0tdW50cmFja2VkLWZpbGVzPX0iCisJCXJldHVybgorCQk7OworCS0tY29sdW1uPSopCisJCV9fZ2l0Y29tcCAiCisJCQlhbHdheXMgbmV2ZXIgYXV0byBjb2x1bW4gcm93IHBsYWluIGRlbnNlIG5vZGVuc2UKKwkJCSIgIiIgIiR7Y3VyIyMtLWNvbHVtbj19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHN0YXR1cworCQlyZXR1cm4KKwkJOzsKKwllc2FjCisKKwl1bnRyYWNrZWRfc3RhdGU9IiQoX19naXRfZ2V0X29wdGlvbl92YWx1ZSAiLXUiICItLXVudHJhY2tlZC1maWxlcz0iIFwKKwkJIiRfX2dpdF91bnRyYWNrZWRfZmlsZV9tb2RlcyIgInN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMiKSIKKworCWNhc2UgIiR1bnRyYWNrZWRfc3RhdGUiIGluCisJbm8pCisJCSMgLS1pZ25vcmVkIG9wdGlvbiBkb2VzIG5vdCBtYXR0ZXIKKwkJY29tcGxldGVfb3B0PQorCQk7OworCWFsbHxub3JtYWx8KikKKwkJY29tcGxldGVfb3B0PSItLWNhY2hlZCAtLWRpcmVjdG9yeSAtLW5vLWVtcHR5LWRpcmVjdG9yeSAtLW90aGVycyIKKworCQlpZiBbIC1uICIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiLS1pZ25vcmVkIikiIF07IHRoZW4KKwkJCWNvbXBsZXRlX29wdD0iJGNvbXBsZXRlX29wdCAtLWlnbm9yZWQgLS1leGNsdWRlPSoiCisJCWZpCisJCTs7CisJZXNhYworCisJX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAiJGNvbXBsZXRlX29wdCIKK30KKworX2dpdF9zd2l0Y2ggKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tY29uZmxpY3Q9KikKKwkJX19naXRjb21wICJkaWZmMyBtZXJnZSIgIiIgIiR7Y3VyIyMtLWNvbmZsaWN0PX0iCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBzd2l0Y2gKKwkJOzsKKwkqKQorCQkjIGNoZWNrIGlmIC0tdHJhY2ssIC0tbm8tdHJhY2ssIG9yIC0tbm8tZ3Vlc3Mgd2FzIHNwZWNpZmllZAorCQkjIGlmIHNvLCBkaXNhYmxlIERXSU0gbW9kZQorCQlsb2NhbCB0cmFja19vcHQ9Ii0tdHJhY2siIG9ubHlfbG9jYWxfcmVmPW4KKwkJaWYgWyAiJEdJVF9DT01QTEVUSU9OX0NIRUNLT1VUX05PX0dVRVNTIiA9ICIxIiBdIHx8CisJCSAgIFsgLW4gIiQoX19naXRfZmluZF9vbl9jbWRsaW5lICItLXRyYWNrIC0tbm8tdHJhY2sgLS1uby1ndWVzcyIpIiBdOyB0aGVuCisJCQl0cmFja19vcHQ9JycKKwkJZmkKKwkJIyBleHBsaWNpdCAtLWd1ZXNzIGVuYWJsZXMgRFdJTSBtb2RlIHJlZ2FyZGxlc3Mgb2YKKwkJIyAkR0lUX0NPTVBMRVRJT05fQ0hFQ0tPVVRfTk9fR1VFU1MKKwkJaWYgWyAtbiAiJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIi0tZ3Vlc3MiKSIgXTsgdGhlbgorCQkJdHJhY2tfb3B0PSctLXRyYWNrJworCQlmaQorCQlpZiBbIC16ICIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiLWQgLS1kZXRhY2giKSIgXTsgdGhlbgorCQkJb25seV9sb2NhbF9yZWY9eQorCQllbHNlCisJCQkjIC0tZ3Vlc3MgLS1kZXRhY2ggaXMgaW52YWxpZCBjb21iaW5hdGlvbiwgbm8KKwkJCSMgZHdpbSB3aWxsIGJlIGRvbmUgd2hlbiAtLWRldGFjaCBpcyBzcGVjaWZpZWQKKwkJCXRyYWNrX29wdD0KKwkJZmkKKwkJaWYgWyAkb25seV9sb2NhbF9yZWYgPSB5IC1hIC16ICIkdHJhY2tfb3B0IiBdOyB0aGVuCisJCQlfX2dpdGNvbXBfZGlyZWN0ICIkKF9fZ2l0X2hlYWRzICIiICIkY3VyIiAiICIpIgorCQllbHNlCisJCQlfX2dpdF9jb21wbGV0ZV9yZWZzICR0cmFja19vcHQKKwkJZmkKKwkJOzsKKwllc2FjCit9CisKK19fZ2l0X2NvbmZpZ19nZXRfc2V0X3ZhcmlhYmxlcyAoKQoreworCWxvY2FsIHByZXZ3b3JkIHdvcmQgY29uZmlnX2ZpbGU9IGM9JGN3b3JkCisJd2hpbGUgWyAkYyAtZ3QgMSBdOyBkbworCQl3b3JkPSIke3dvcmRzW2NdfSIKKwkJY2FzZSAiJHdvcmQiIGluCisJCS0tc3lzdGVtfC0tZ2xvYmFsfC0tbG9jYWx8LS1maWxlPSopCisJCQljb25maWdfZmlsZT0iJHdvcmQiCisJCQlicmVhaworCQkJOzsKKwkJLWZ8LS1maWxlKQorCQkJY29uZmlnX2ZpbGU9IiR3b3JkICRwcmV2d29yZCIKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXByZXZ3b3JkPSR3b3JkCisJCWM9JCgoLS1jKSkKKwlkb25lCisKKwlfX2dpdCBjb25maWcgJGNvbmZpZ19maWxlIC0tbmFtZS1vbmx5IC0tbGlzdAorfQorCitfX2dpdF9jb25maWdfdmFycz0KK19fZ2l0X2NvbXB1dGVfY29uZmlnX3ZhcnMgKCkKK3sKKwl0ZXN0IC1uICIkX19naXRfY29uZmlnX3ZhcnMiIHx8CisJX19naXRfY29uZmlnX3ZhcnM9IiQoZ2l0IGhlbHAgLS1jb25maWctZm9yLWNvbXBsZXRpb24gfCBzb3J0IC11KSIKK30KKworIyBDb21wbGV0ZXMgcG9zc2libGUgdmFsdWVzIG9mIHZhcmlvdXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisjCisjIFVzYWdlOiBfX2dpdF9jb21wbGV0ZV9jb25maWdfdmFyaWFibGVfdmFsdWUgWzxvcHRpb24+XS4uLgorIyAtLXZhcm5hbWU9PHdvcmQ+OiBUaGUgbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB3aG9zZSB2YWx1ZSBpcworIyAgICAgICAgICAgICAgICAgICB0byBiZSBjb21wbGV0ZWQuICBEZWZhdWx0cyB0byB0aGUgcHJldmlvdXMgd29yZCBvbiB0aGUKKyMgICAgICAgICAgICAgICAgICAgY29tbWFuZCBsaW5lLgorIyAtLWN1cj08d29yZD46IFRoZSBjdXJyZW50IHZhbHVlIHRvIGJlIGNvbXBsZXRlZC4gIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50CisjICAgICAgICAgICAgICAgd29yZCB0byBiZSBjb21wbGV0ZWQuCitfX2dpdF9jb21wbGV0ZV9jb25maWdfdmFyaWFibGVfdmFsdWUgKCkKK3sKKwlsb2NhbCB2YXJuYW1lPSIkcHJldiIgY3VyXz0iJGN1ciIKKworCXdoaWxlIHRlc3QgJCMgIT0gMDsgZG8KKwkJY2FzZSAiJDEiIGluCisJCS0tdmFybmFtZT0qKQl2YXJuYW1lPSIkezEjIy0tdmFybmFtZT19IiA7OworCQktLWN1cj0qKQljdXJfPSIkezEjIy0tY3VyPX0iIDs7CisJCSopCQlyZXR1cm4gMSA7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJaWYgWyAiJHtCQVNIX1ZFUlNJTkZPWzBdOi0wfSIgLWdlIDQgXTsgdGhlbgorCQl2YXJuYW1lPSIke3Zhcm5hbWUsLH0iCisJZWxzZQorCQl2YXJuYW1lPSIkKGVjaG8gIiR2YXJuYW1lIiB8dHIgQS1aIGEteikiCisJZmkKKworCWNhc2UgIiR2YXJuYW1lIiBpbgorCWJyYW5jaC4qLnJlbW90ZXxicmFuY2guKi5wdXNocmVtb3RlKQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVtb3RlcykiICIiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJYnJhbmNoLioubWVyZ2UpCisJCV9fZ2l0X2NvbXBsZXRlX3JlZnMgLS1jdXI9IiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwlicmFuY2guKi5yZWJhc2UpCisJCV9fZ2l0Y29tcCAiZmFsc2UgdHJ1ZSBtZXJnZXMgcHJlc2VydmUgaW50ZXJhY3RpdmUiICIiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJcmVtb3RlLnB1c2hkZWZhdWx0KQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVtb3RlcykiICIiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJcmVtb3RlLiouZmV0Y2gpCisJCWxvY2FsIHJlbW90ZT0iJHt2YXJuYW1lI3JlbW90ZS59IgorCQlyZW1vdGU9IiR7cmVtb3RlJS5mZXRjaH0iCisJCWlmIFsgLXogIiRjdXJfIiBdOyB0aGVuCisJCQlfX2dpdGNvbXBfbmwgInJlZnMvaGVhZHMvIiAiIiAiIiAiIgorCQkJcmV0dXJuCisJCWZpCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzX3JlbW90ZXMgIiRyZW1vdGUiKSIgIiIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwlyZW1vdGUuKi5wdXNoKQorCQlsb2NhbCByZW1vdGU9IiR7dmFybmFtZSNyZW1vdGUufSIKKwkJcmVtb3RlPSIke3JlbW90ZSUucHVzaH0iCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdCBmb3ItZWFjaC1yZWYgXAorCQkJLS1mb3JtYXQ9JyUocmVmbmFtZSk6JShyZWZuYW1lKScgcmVmcy9oZWFkcykiICIiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJcHVsbC50d29oZWFkfHB1bGwub2N0b3B1cykKKwkJX19naXRfY29tcHV0ZV9tZXJnZV9zdHJhdGVnaWVzCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X21lcmdlX3N0cmF0ZWdpZXMiICIiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJY29sb3IucGFnZXIpCisJCV9fZ2l0Y29tcCAiZmFsc2UgdHJ1ZSIgIiIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwljb2xvci4qLiopCisJCV9fZ2l0Y29tcCAiCisJCQlub3JtYWwgYmxhY2sgcmVkIGdyZWVuIHllbGxvdyBibHVlIG1hZ2VudGEgY3lhbiB3aGl0ZQorCQkJYm9sZCBkaW0gdWwgYmxpbmsgcmV2ZXJzZQorCQkJIiAiIiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCWNvbG9yLiopCisJCV9fZ2l0Y29tcCAiZmFsc2UgdHJ1ZSBhbHdheXMgbmV2ZXIgYXV0byIgIiIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwlkaWZmLnN1Ym1vZHVsZSkKKwkJX19naXRjb21wICIkX19naXRfZGlmZl9zdWJtb2R1bGVfZm9ybWF0cyIgIiIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwloZWxwLmZvcm1hdCkKKwkJX19naXRjb21wICJtYW4gaW5mbyB3ZWIgaHRtbCIgIiIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwlsb2cuZGF0ZSkKKwkJX19naXRjb21wICIkX19naXRfbG9nX2RhdGVfZm9ybWF0cyIgIiIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwlzZW5kZW1haWwuYWxpYXNmaWxldHlwZSkKKwkJX19naXRjb21wICJtdXR0IG1haWxyYyBwaW5lIGVsbSBnbnVzIiAiIiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCXNlbmRlbWFpbC5jb25maXJtKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9zZW5kX2VtYWlsX2NvbmZpcm1fb3B0aW9ucyIgIiIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwlzZW5kZW1haWwuc3VwcHJlc3NjYykKKwkJX19naXRjb21wICIkX19naXRfc2VuZF9lbWFpbF9zdXBwcmVzc2NjX29wdGlvbnMiICIiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJc2VuZGVtYWlsLnRyYW5zZmVyZW5jb2RpbmcpCisJCV9fZ2l0Y29tcCAiN2JpdCA4Yml0IHF1b3RlZC1wcmludGFibGUgYmFzZTY0IiAiIiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCSouKikKKwkJcmV0dXJuCisJCTs7CisJZXNhYworfQorCisjIENvbXBsZXRlcyBjb25maWd1cmF0aW9uIHNlY3Rpb25zLCBzdWJzZWN0aW9ucywgdmFyaWFibGUgbmFtZXMuCisjCisjIFVzYWdlOiBfX2dpdF9jb21wbGV0ZV9jb25maWdfdmFyaWFibGVfbmFtZSBbPG9wdGlvbj5dLi4uCisjIC0tY3VyPTx3b3JkPjogVGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBzZWN0aW9uL3ZhcmlhYmxlIG5hbWUgdG8gYmUKKyMgICAgICAgICAgICAgICBjb21wbGV0ZWQuICBEZWZhdWx0cyB0byB0aGUgY3VycmVudCB3b3JkIHRvIGJlIGNvbXBsZXRlZC4KKyMgLS1zZng9PHN1ZmZpeD46IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggZnVsbHkgY29tcGxldGVkCisjICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWUgKGJ1dCBub3QgdG8gc2VjdGlvbnMgb3IKKyMgICAgICAgICAgICAgICAgIHN1YnNlY3Rpb25zKSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IHNwYWNlLgorX19naXRfY29tcGxldGVfY29uZmlnX3ZhcmlhYmxlX25hbWUgKCkKK3sKKwlsb2NhbCBjdXJfPSIkY3VyIiBzZngKKworCXdoaWxlIHRlc3QgJCMgIT0gMDsgZG8KKwkJY2FzZSAiJDEiIGluCisJCS0tY3VyPSopCWN1cl89IiR7MSMjLS1jdXI9fSIgOzsKKwkJLS1zZng9KikJc2Z4PSIkezEjIy0tc2Z4PX0iIDs7CisJCSopCQlyZXR1cm4gMSA7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJY2FzZSAiJGN1cl8iIGluCisJYnJhbmNoLiouKikKKwkJbG9jYWwgcGZ4PSIke2N1cl8lLip9LiIKKwkJY3VyXz0iJHtjdXJfIyMqLn0iCisJCV9fZ2l0Y29tcCAicmVtb3RlIHB1c2hSZW1vdGUgbWVyZ2UgbWVyZ2VPcHRpb25zIHJlYmFzZSIgIiRwZngiICIkY3VyXyIgIiRzZngiCisJCXJldHVybgorCQk7OworCWJyYW5jaC4qKQorCQlsb2NhbCBwZng9IiR7Y3VyJS4qfS4iCisJCWN1cl89IiR7Y3VyIyoufSIKKwkJX19naXRjb21wX2RpcmVjdCAiJChfX2dpdF9oZWFkcyAiJHBmeCIgIiRjdXJfIiAiLiIpIgorCQlfX2dpdGNvbXBfbmxfYXBwZW5kICQnYXV0b1NldHVwTWVyZ2VcbmF1dG9TZXR1cFJlYmFzZVxuJyAiJHBmeCIgIiRjdXJfIiAiJHNmeCIKKwkJcmV0dXJuCisJCTs7CisJZ3VpdG9vbC4qLiopCisJCWxvY2FsIHBmeD0iJHtjdXJfJS4qfS4iCisJCWN1cl89IiR7Y3VyXyMjKi59IgorCQlfX2dpdGNvbXAgIgorCQkJYXJnUHJvbXB0IGNtZCBjb25maXJtIG5lZWRzRmlsZSBub0NvbnNvbGUgbm9SZXNjYW4KKwkJCXByb21wdCByZXZQcm9tcHQgcmV2VW5tZXJnZWQgdGl0bGUKKwkJCSIgIiRwZngiICIkY3VyXyIgIiRzZngiCisJCXJldHVybgorCQk7OworCWRpZmZ0b29sLiouKikKKwkJbG9jYWwgcGZ4PSIke2N1cl8lLip9LiIKKwkJY3VyXz0iJHtjdXJfIyMqLn0iCisJCV9fZ2l0Y29tcCAiY21kIHBhdGgiICIkcGZ4IiAiJGN1cl8iICIkc2Z4IgorCQlyZXR1cm4KKwkJOzsKKwltYW4uKi4qKQorCQlsb2NhbCBwZng9IiR7Y3VyXyUuKn0uIgorCQljdXJfPSIke2N1cl8jIyoufSIKKwkJX19naXRjb21wICJjbWQgcGF0aCIgIiRwZngiICIkY3VyXyIgIiRzZngiCisJCXJldHVybgorCQk7OworCW1lcmdldG9vbC4qLiopCisJCWxvY2FsIHBmeD0iJHtjdXJfJS4qfS4iCisJCWN1cl89IiR7Y3VyXyMjKi59IgorCQlfX2dpdGNvbXAgImNtZCBwYXRoIHRydXN0RXhpdENvZGUiICIkcGZ4IiAiJGN1cl8iICIkc2Z4IgorCQlyZXR1cm4KKwkJOzsKKwlwYWdlci4qKQorCQlsb2NhbCBwZng9IiR7Y3VyXyUuKn0uIgorCQljdXJfPSIke2N1cl8jKi59IgorCQlfX2dpdF9jb21wdXRlX2FsbF9jb21tYW5kcworCQlfX2dpdGNvbXBfbmwgIiRfX2dpdF9hbGxfY29tbWFuZHMiICIkcGZ4IiAiJGN1cl8iICIkc2Z4IgorCQlyZXR1cm4KKwkJOzsKKwlyZW1vdGUuKi4qKQorCQlsb2NhbCBwZng9IiR7Y3VyXyUuKn0uIgorCQljdXJfPSIke2N1cl8jIyoufSIKKwkJX19naXRjb21wICIKKwkJCXVybCBwcm94eSBmZXRjaCBwdXNoIG1pcnJvciBza2lwRGVmYXVsdFVwZGF0ZQorCQkJcmVjZWl2ZXBhY2sgdXBsb2FkcGFjayB0YWdPcHQgcHVzaHVybAorCQkJIiAiJHBmeCIgIiRjdXJfIiAiJHNmeCIKKwkJcmV0dXJuCisJCTs7CisJcmVtb3RlLiopCisJCWxvY2FsIHBmeD0iJHtjdXJfJS4qfS4iCisJCWN1cl89IiR7Y3VyXyMqLn0iCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZW1vdGVzKSIgIiRwZngiICIkY3VyXyIgIi4iCisJCV9fZ2l0Y29tcF9ubF9hcHBlbmQgInB1c2hEZWZhdWx0IiAiJHBmeCIgIiRjdXJfIiAiJHNmeCIKKwkJcmV0dXJuCisJCTs7CisJdXJsLiouKikKKwkJbG9jYWwgcGZ4PSIke2N1cl8lLip9LiIKKwkJY3VyXz0iJHtjdXJfIyMqLn0iCisJCV9fZ2l0Y29tcCAiaW5zdGVhZE9mIHB1c2hJbnN0ZWFkT2YiICIkcGZ4IiAiJGN1cl8iICIkc2Z4IgorCQlyZXR1cm4KKwkJOzsKKwkqLiopCisJCV9fZ2l0X2NvbXB1dGVfY29uZmlnX3ZhcnMKKwkJX19naXRjb21wICIkX19naXRfY29uZmlnX3ZhcnMiICIiICIkY3VyXyIgIiRzZngiCisJCTs7CisJKikKKwkJX19naXRfY29tcHV0ZV9jb25maWdfdmFycworCQlfX2dpdGNvbXAgIiQoZWNobyAiJF9fZ2l0X2NvbmZpZ192YXJzIiB8CisJCQkJYXdrIC1GIC4gJ3sKKwkJCQkJc2VjdGlvbnNbJDFdID0gMQorCQkJCX0KKwkJCQlFTkQgeworCQkJCQlmb3IgKHMgaW4gc2VjdGlvbnMpCisJCQkJCQlwcmludCBzICIuIgorCQkJCX0KKwkJCQknKSIgIiIgIiRjdXJfIgorCQk7OworCWVzYWMKK30KKworIyBDb21wbGV0ZXMgJz0nLXNlcGFyYXRlZCBjb25maWd1cmF0aW9uIHNlY3Rpb25zL3ZhcmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXMKKyMgZm9yICdnaXQgLWMgc2VjdGlvbi5uYW1lPXZhbHVlJy4KKyMKKyMgVXNhZ2U6IF9fZ2l0X2NvbXBsZXRlX2NvbmZpZ192YXJpYWJsZV9uYW1lX2FuZF92YWx1ZSBbPG9wdGlvbj5dLi4uCisjIC0tY3VyPTx3b3JkPjogVGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBzZWN0aW9uL3ZhcmlhYmxlIG5hbWUvdmFsdWUgdG8gYmUKKyMgICAgICAgICAgICAgICBjb21wbGV0ZWQuIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHdvcmQgdG8gYmUgY29tcGxldGVkLgorX19naXRfY29tcGxldGVfY29uZmlnX3ZhcmlhYmxlX25hbWVfYW5kX3ZhbHVlICgpCit7CisJbG9jYWwgY3VyXz0iJGN1ciIKKworCXdoaWxlIHRlc3QgJCMgIT0gMDsgZG8KKwkJY2FzZSAiJDEiIGluCisJCS0tY3VyPSopCWN1cl89IiR7MSMjLS1jdXI9fSIgOzsKKwkJKikJCXJldHVybiAxIDs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKKwljYXNlICIkY3VyXyIgaW4KKwkqPSopCisJCV9fZ2l0X2NvbXBsZXRlX2NvbmZpZ192YXJpYWJsZV92YWx1ZSBcCisJCQktLXZhcm5hbWU9IiR7Y3VyXyUlPSp9IiAtLWN1cj0iJHtjdXJfIyo9fSIKKwkJOzsKKwkqKQorCQlfX2dpdF9jb21wbGV0ZV9jb25maWdfdmFyaWFibGVfbmFtZSAtLWN1cj0iJGN1cl8iIC0tc2Z4PSc9JworCQk7OworCWVzYWMKK30KKworX2dpdF9jb25maWcgKCkKK3sKKwljYXNlICIkcHJldiIgaW4KKwktLWdldHwtLWdldC1hbGx8LS11bnNldHwtLXVuc2V0LWFsbCkKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X2NvbmZpZ19nZXRfc2V0X3ZhcmlhYmxlcykiCisJCXJldHVybgorCQk7OworCSouKikKKwkJX19naXRfY29tcGxldGVfY29uZmlnX3ZhcmlhYmxlX3ZhbHVlCisJCXJldHVybgorCQk7OworCWVzYWMKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gY29uZmlnCisJCTs7CisJKikKKwkJX19naXRfY29tcGxldGVfY29uZmlnX3ZhcmlhYmxlX25hbWUKKwkJOzsKKwllc2FjCit9CisKK19naXRfcmVtb3RlICgpCit7CisJbG9jYWwgc3ViY29tbWFuZHM9IgorCQlhZGQgcmVuYW1lIHJlbW92ZSBzZXQtaGVhZCBzZXQtYnJhbmNoZXMKKwkJZ2V0LXVybCBzZXQtdXJsIHNob3cgcHJ1bmUgdXBkYXRlCisJCSIKKwlsb2NhbCBzdWJjb21tYW5kPSIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHN1YmNvbW1hbmRzIikiCisJaWYgWyAteiAiJHN1YmNvbW1hbmQiIF07IHRoZW4KKwkJY2FzZSAiJGN1ciIgaW4KKwkJLS0qKQorCQkJX19naXRjb21wX2J1aWx0aW4gcmVtb3RlCisJCQk7OworCQkqKQorCQkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJCQk7OworCQllc2FjCisJCXJldHVybgorCWZpCisKKwljYXNlICIkc3ViY29tbWFuZCwkY3VyIiBpbgorCWFkZCwtLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHJlbW90ZV9hZGQKKwkJOzsKKwlhZGQsKikKKwkJOzsKKwlzZXQtaGVhZCwtLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHJlbW90ZV9zZXQtaGVhZAorCQk7OworCXNldC1icmFuY2hlcywtLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHJlbW90ZV9zZXQtYnJhbmNoZXMKKwkJOzsKKwlzZXQtaGVhZCwqfHNldC1icmFuY2hlcywqKQorCQlfX2dpdF9jb21wbGV0ZV9yZW1vdGVfb3JfcmVmc3BlYworCQk7OworCXVwZGF0ZSwtLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHJlbW90ZV91cGRhdGUKKwkJOzsKKwl1cGRhdGUsKikKKwkJX19naXRjb21wICIkKF9fZ2l0X3JlbW90ZXMpICQoX19naXRfZ2V0X2NvbmZpZ192YXJpYWJsZXMgInJlbW90ZXMiKSIKKwkJOzsKKwlzZXQtdXJsLC0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gcmVtb3RlX3NldC11cmwKKwkJOzsKKwlnZXQtdXJsLC0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gcmVtb3RlX2dldC11cmwKKwkJOzsKKwlwcnVuZSwtLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHJlbW90ZV9wcnVuZQorCQk7OworCSopCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZW1vdGVzKSIKKwkJOzsKKwllc2FjCit9CisKK19naXRfcmVwbGFjZSAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS1mb3JtYXQ9KikKKwkJX19naXRjb21wICJzaG9ydCBtZWRpdW0gbG9uZyIgIiIgIiR7Y3VyIyMtLWZvcm1hdD19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHJlcGxhY2UKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3JlZnMKK30KKworX2dpdF9yZXJlcmUgKCkKK3sKKwlsb2NhbCBzdWJjb21tYW5kcz0iY2xlYXIgZm9yZ2V0IGRpZmYgcmVtYWluaW5nIHN0YXR1cyBnYyIKKwlsb2NhbCBzdWJjb21tYW5kPSIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHN1YmNvbW1hbmRzIikiCisJaWYgdGVzdCAteiAiJHN1YmNvbW1hbmQiCisJdGhlbgorCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyIKKwkJcmV0dXJuCisJZmkKK30KKworX2dpdF9yZXNldCAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHJlc2V0CisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZWZzCit9CisKK19naXRfcmVzdG9yZSAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS1jb25mbGljdD0qKQorCQlfX2dpdGNvbXAgImRpZmYzIG1lcmdlIiAiIiAiJHtjdXIjIy0tY29uZmxpY3Q9fSIKKwkJOzsKKwktLXNvdXJjZT0qKQorCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tY3VyPSIke2N1ciMjLS1zb3VyY2U9fSIKKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHJlc3RvcmUKKwkJOzsKKwllc2FjCit9CisKK19fZ2l0X3JldmVydF9pbnByb2dyZXNzX29wdGlvbnM9JF9fZ2l0X3NlcXVlbmNlcl9pbnByb2dyZXNzX29wdGlvbnMKKworX2dpdF9yZXZlcnQgKCkKK3sKKwlfX2dpdF9maW5kX3JlcG9fcGF0aAorCWlmIFsgLWYgIiRfX2dpdF9yZXBvX3BhdGgiL1JFVkVSVF9IRUFEIF07IHRoZW4KKwkJX19naXRjb21wICIkX19naXRfcmV2ZXJ0X2lucHJvZ3Jlc3Nfb3B0aW9ucyIKKwkJcmV0dXJuCisJZmkKKwlfX2dpdF9jb21wbGV0ZV9zdHJhdGVneSAmJiByZXR1cm4KKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gcmV2ZXJ0ICIiIFwKKwkJCSIkX19naXRfcmV2ZXJ0X2lucHJvZ3Jlc3Nfb3B0aW9ucyIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3JlZnMKK30KKworX2dpdF9ybSAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBybQorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisKKwlfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlICItLWNhY2hlZCIKK30KKworX2dpdF9zaG9ydGxvZyAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQkkX19naXRfbG9nX2NvbW1vbl9vcHRpb25zCisJCQkkX19naXRfbG9nX3Nob3J0bG9nX29wdGlvbnMKKwkJCS0tbnVtYmVyZWQgLS1zdW1tYXJ5IC0tZW1haWwKKwkJCSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3QKK30KKworX2dpdF9zaG93ICgpCit7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKKwljYXNlICIkY3VyIiBpbgorCS0tcHJldHR5PSp8LS1mb3JtYXQ9KikKKwkJX19naXRjb21wICIkX19naXRfbG9nX3ByZXR0eV9mb3JtYXRzICQoX19naXRfcHJldHR5X2FsaWFzZXMpCisJCQkiICIiICIke2N1ciMqPX0iCisJCXJldHVybgorCQk7OworCS0tZGlmZi1hbGdvcml0aG09KikKKwkJX19naXRjb21wICIkX19naXRfZGlmZl9hbGdvcml0aG1zIiAiIiAiJHtjdXIjIy0tZGlmZi1hbGdvcml0aG09fSIKKwkJcmV0dXJuCisJCTs7CisJLS1zdWJtb2R1bGU9KikKKwkJX19naXRjb21wICIkX19naXRfZGlmZl9zdWJtb2R1bGVfZm9ybWF0cyIgIiIgIiR7Y3VyIyMtLXN1Ym1vZHVsZT19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiLS1wcmV0dHk9IC0tZm9ybWF0PSAtLWFiYnJldi1jb21taXQgLS1uby1hYmJyZXYtY29tbWl0CisJCQktLW9uZWxpbmUgLS1zaG93LXNpZ25hdHVyZSAtLXBhdGNoCisJCQktLWV4cGFuZC10YWJzIC0tZXhwYW5kLXRhYnM9IC0tbm8tZXhwYW5kLXRhYnMKKwkJCSRfX2dpdF9kaWZmX2NvbW1vbl9vcHRpb25zCisJCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0X2ZpbGUKK30KKworX2dpdF9zaG93X2JyYW5jaCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBzaG93LWJyYW5jaAorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmV2bGlzdAorfQorCitfZ2l0X3NwYXJzZV9jaGVja291dCAoKQoreworCWxvY2FsIHN1YmNvbW1hbmRzPSJsaXN0IGluaXQgc2V0IGRpc2FibGUiCisJbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzdWJjb21tYW5kcyIpIgorCWlmIFsgLXogIiRzdWJjb21tYW5kIiBdOyB0aGVuCisJCV9fZ2l0Y29tcCAiJHN1YmNvbW1hbmRzIgorCQlyZXR1cm4KKwlmaQorCisJY2FzZSAiJHN1YmNvbW1hbmQsJGN1ciIgaW4KKwlpbml0LC0tKikKKwkJX19naXRjb21wICItLWNvbmUiCisJCTs7CisJc2V0LC0tKikKKwkJX19naXRjb21wICItLXN0ZGluIgorCQk7OworCSopCisJCTs7CisJZXNhYworfQorCitfZ2l0X3N0YXNoICgpCit7CisJbG9jYWwgc2F2ZV9vcHRzPSctLWFsbCAtLWtlZXAtaW5kZXggLS1uby1rZWVwLWluZGV4IC0tcXVpZXQgLS1wYXRjaCAtLWluY2x1ZGUtdW50cmFja2VkJworCWxvY2FsIHN1YmNvbW1hbmRzPSdwdXNoIGxpc3Qgc2hvdyBhcHBseSBjbGVhciBkcm9wIHBvcCBjcmVhdGUgYnJhbmNoJworCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc3ViY29tbWFuZHMgc2F2ZSIpIgorCWlmIFsgLW4gIiQoX19naXRfZmluZF9vbl9jbWRsaW5lICItcCIpIiBdOyB0aGVuCisJCXN1YmNvbW1hbmQ9InB1c2giCisJZmkKKwlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgorCQljYXNlICIkY3VyIiBpbgorCQktLSopCisJCQlfX2dpdGNvbXAgIiRzYXZlX29wdHMiCisJCQk7OworCQlzYSopCisJCQlpZiBbIC16ICIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHNhdmVfb3B0cyIpIiBdOyB0aGVuCisJCQkJX19naXRjb21wICJzYXZlIgorCQkJZmkKKwkJCTs7CisJCSopCisJCQlpZiBbIC16ICIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHNhdmVfb3B0cyIpIiBdOyB0aGVuCisJCQkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJCQlmaQorCQkJOzsKKwkJZXNhYworCWVsc2UKKwkJY2FzZSAiJHN1YmNvbW1hbmQsJGN1ciIgaW4KKwkJcHVzaCwtLSopCisJCQlfX2dpdGNvbXAgIiRzYXZlX29wdHMgLS1tZXNzYWdlIgorCQkJOzsKKwkJc2F2ZSwtLSopCisJCQlfX2dpdGNvbXAgIiRzYXZlX29wdHMiCisJCQk7OworCQlhcHBseSwtLSp8cG9wLC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1pbmRleCAtLXF1aWV0IgorCQkJOzsKKwkJZHJvcCwtLSopCisJCQlfX2dpdGNvbXAgIi0tcXVpZXQiCisJCQk7OworCQlsaXN0LC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1uYW1lLXN0YXR1cyAtLW9uZWxpbmUgLS1wYXRjaC13aXRoLXN0YXQiCisJCQk7OworCQlzaG93LC0tKnxicmFuY2gsLS0qKQorCQkJOzsKKwkJYnJhbmNoLCopCisJCQlpZiBbICRjd29yZCAtZXEgMyBdOyB0aGVuCisJCQkJX19naXRfY29tcGxldGVfcmVmcworCQkJZWxzZQorCQkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdCBzdGFzaCBsaXN0IFwKKwkJCQkJCXwgc2VkIC1uIC1lICdzLzouKi8vcCcpIgorCQkJZmkKKwkJCTs7CisJCXNob3csKnxhcHBseSwqfGRyb3AsKnxwb3AsKikKKwkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdCBzdGFzaCBsaXN0IFwKKwkJCQkJfCBzZWQgLW4gLWUgJ3MvOi4qLy9wJykiCisJCQk7OworCQkqKQorCQkJOzsKKwkJZXNhYworCWZpCit9CisKK19naXRfc3VibW9kdWxlICgpCit7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKKwlsb2NhbCBzdWJjb21tYW5kcz0iYWRkIHN0YXR1cyBpbml0IGRlaW5pdCB1cGRhdGUgc2V0LWJyYW5jaCBzZXQtdXJsIHN1bW1hcnkgZm9yZWFjaCBzeW5jIGFic29yYmdpdGRpcnMiCisJbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzdWJjb21tYW5kcyIpIgorCWlmIFsgLXogIiRzdWJjb21tYW5kIiBdOyB0aGVuCisJCWNhc2UgIiRjdXIiIGluCisJCS0tKikKKwkJCV9fZ2l0Y29tcCAiLS1xdWlldCIKKwkJCTs7CisJCSopCisJCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyIKKwkJCTs7CisJCWVzYWMKKwkJcmV0dXJuCisJZmkKKworCWNhc2UgIiRzdWJjb21tYW5kLCRjdXIiIGluCisJYWRkLC0tKikKKwkJX19naXRjb21wICItLWJyYW5jaCAtLWZvcmNlIC0tbmFtZSAtLXJlZmVyZW5jZSAtLWRlcHRoIgorCQk7OworCXN0YXR1cywtLSopCisJCV9fZ2l0Y29tcCAiLS1jYWNoZWQgLS1yZWN1cnNpdmUiCisJCTs7CisJZGVpbml0LC0tKikKKwkJX19naXRjb21wICItLWZvcmNlIC0tYWxsIgorCQk7OworCXVwZGF0ZSwtLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWluaXQgLS1yZW1vdGUgLS1uby1mZXRjaAorCQkJLS1yZWNvbW1lbmQtc2hhbGxvdyAtLW5vLXJlY29tbWVuZC1zaGFsbG93CisJCQktLWZvcmNlIC0tcmViYXNlIC0tbWVyZ2UgLS1yZWZlcmVuY2UgLS1kZXB0aCAtLXJlY3Vyc2l2ZSAtLWpvYnMKKwkJIgorCQk7OworCXNldC1icmFuY2gsLS0qKQorCQlfX2dpdGNvbXAgIi0tZGVmYXVsdCAtLWJyYW5jaCIKKwkJOzsKKwlzdW1tYXJ5LC0tKikKKwkJX19naXRjb21wICItLWNhY2hlZCAtLWZpbGVzIC0tc3VtbWFyeS1saW1pdCIKKwkJOzsKKwlmb3JlYWNoLC0tKnxzeW5jLC0tKikKKwkJX19naXRjb21wICItLXJlY3Vyc2l2ZSIKKwkJOzsKKwkqKQorCQk7OworCWVzYWMKK30KKworX2dpdF9zdm4gKCkKK3sKKwlsb2NhbCBzdWJjb21tYW5kcz0iCisJCWluaXQgZmV0Y2ggY2xvbmUgcmViYXNlIGRjb21taXQgbG9nIGZpbmQtcmV2CisJCXNldC10cmVlIGNvbW1pdC1kaWZmIGluZm8gY3JlYXRlLWlnbm9yZSBwcm9wZ2V0CisJCXByb3BsaXN0IHNob3ctaWdub3JlIHNob3ctZXh0ZXJuYWxzIGJyYW5jaCB0YWcgYmxhbWUKKwkJbWlncmF0ZSBta2RpcnMgcmVzZXQgZ2MKKwkJIgorCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc3ViY29tbWFuZHMiKSIKKwlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgorCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyIKKwllbHNlCisJCWxvY2FsIHJlbW90ZV9vcHRzPSItLXVzZXJuYW1lPSAtLWNvbmZpZy1kaXI9IC0tbm8tYXV0aC1jYWNoZSIKKwkJbG9jYWwgZmNfb3B0cz0iCisJCQktLWZvbGxvdy1wYXJlbnQgLS1hdXRob3JzLWZpbGU9IC0tcmVwYWNrPQorCQkJLS1uby1tZXRhZGF0YSAtLXVzZS1zdm0tcHJvcHMgLS11c2Utc3Zuc3luYy1wcm9wcworCQkJLS1sb2ctd2luZG93LXNpemU9IC0tbm8tY2hlY2tvdXQgLS1xdWlldAorCQkJLS1yZXBhY2stZmxhZ3MgLS11c2UtbG9nLWF1dGhvciAtLWxvY2FsdGltZQorCQkJLS1hZGQtYXV0aG9yLWZyb20KKwkJCS0tcmVjdXJzaXZlCisJCQktLWlnbm9yZS1wYXRocz0gLS1pbmNsdWRlLXBhdGhzPSAkcmVtb3RlX29wdHMKKwkJCSIKKwkJbG9jYWwgaW5pdF9vcHRzPSIKKwkJCS0tdGVtcGxhdGU9IC0tc2hhcmVkPSAtLXRydW5rPSAtLXRhZ3M9CisJCQktLWJyYW5jaGVzPSAtLXN0ZGxheW91dCAtLW1pbmltaXplLXVybAorCQkJLS1uby1tZXRhZGF0YSAtLXVzZS1zdm0tcHJvcHMgLS11c2Utc3Zuc3luYy1wcm9wcworCQkJLS1yZXdyaXRlLXJvb3Q9IC0tcHJlZml4PSAkcmVtb3RlX29wdHMKKwkJCSIKKwkJbG9jYWwgY210X29wdHM9IgorCQkJLS1lZGl0IC0tcm1kaXIgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1jb3B5LXNpbWlsYXJpdHk9CisJCQkiCisKKwkJY2FzZSAiJHN1YmNvbW1hbmQsJGN1ciIgaW4KKwkJZmV0Y2gsLS0qKQorCQkJX19naXRjb21wICItLXJldmlzaW9uPSAtLWZldGNoLWFsbCAkZmNfb3B0cyIKKwkJCTs7CisJCWNsb25lLC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1yZXZpc2lvbj0gJGZjX29wdHMgJGluaXRfb3B0cyIKKwkJCTs7CisJCWluaXQsLS0qKQorCQkJX19naXRjb21wICIkaW5pdF9vcHRzIgorCQkJOzsKKwkJZGNvbW1pdCwtLSopCisJCQlfX2dpdGNvbXAgIgorCQkJCS0tbWVyZ2UgLS1zdHJhdGVneT0gLS12ZXJib3NlIC0tZHJ5LXJ1bgorCQkJCS0tZmV0Y2gtYWxsIC0tbm8tcmViYXNlIC0tY29tbWl0LXVybAorCQkJCS0tcmV2aXNpb24gLS1pbnRlcmFjdGl2ZSAkY210X29wdHMgJGZjX29wdHMKKwkJCQkiCisJCQk7OworCQlzZXQtdHJlZSwtLSopCisJCQlfX2dpdGNvbXAgIi0tc3RkaW4gJGNtdF9vcHRzICRmY19vcHRzIgorCQkJOzsKKwkJY3JlYXRlLWlnbm9yZSwtLSp8cHJvcGdldCwtLSp8cHJvcGxpc3QsLS0qfHNob3ctaWdub3JlLC0tKnxcCisJCXNob3ctZXh0ZXJuYWxzLC0tKnxta2RpcnMsLS0qKQorCQkJX19naXRjb21wICItLXJldmlzaW9uPSIKKwkJCTs7CisJCWxvZywtLSopCisJCQlfX2dpdGNvbXAgIgorCQkJCS0tbGltaXQ9IC0tcmV2aXNpb249IC0tdmVyYm9zZSAtLWluY3JlbWVudGFsCisJCQkJLS1vbmVsaW5lIC0tc2hvdy1jb21taXQgLS1ub24tcmVjdXJzaXZlCisJCQkJLS1hdXRob3JzLWZpbGU9IC0tY29sb3IKKwkJCQkiCisJCQk7OworCQlyZWJhc2UsLS0qKQorCQkJX19naXRjb21wICIKKwkJCQktLW1lcmdlIC0tdmVyYm9zZSAtLXN0cmF0ZWd5PSAtLWxvY2FsCisJCQkJLS1mZXRjaC1hbGwgLS1kcnktcnVuICRmY19vcHRzCisJCQkJIgorCQkJOzsKKwkJY29tbWl0LWRpZmYsLS0qKQorCQkJX19naXRjb21wICItLW1lc3NhZ2U9IC0tZmlsZT0gLS1yZXZpc2lvbj0gJGNtdF9vcHRzIgorCQkJOzsKKwkJaW5mbywtLSopCisJCQlfX2dpdGNvbXAgIi0tdXJsIgorCQkJOzsKKwkJYnJhbmNoLC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1kcnktcnVuIC0tbWVzc2FnZSAtLXRhZyIKKwkJCTs7CisJCXRhZywtLSopCisJCQlfX2dpdGNvbXAgIi0tZHJ5LXJ1biAtLW1lc3NhZ2UiCisJCQk7OworCQlibGFtZSwtLSopCisJCQlfX2dpdGNvbXAgIi0tZ2l0LWZvcm1hdCIKKwkJCTs7CisJCW1pZ3JhdGUsLS0qKQorCQkJX19naXRjb21wICIKKwkJCQktLWNvbmZpZy1kaXI9IC0taWdub3JlLXBhdGhzPSAtLW1pbmltaXplCisJCQkJLS1uby1hdXRoLWNhY2hlIC0tdXNlcm5hbWU9CisJCQkJIgorCQkJOzsKKwkJcmVzZXQsLS0qKQorCQkJX19naXRjb21wICItLXJldmlzaW9uPSAtLXBhcmVudCIKKwkJCTs7CisJCSopCisJCQk7OworCQllc2FjCisJZmkKK30KKworX2dpdF90YWcgKCkKK3sKKwlsb2NhbCBpIGM9MSBmPTAKKwl3aGlsZSBbICRjIC1sdCAkY3dvcmQgXTsgZG8KKwkJaT0iJHt3b3Jkc1tjXX0iCisJCWNhc2UgIiRpIiBpbgorCQktZHwtLWRlbGV0ZXwtdnwtLXZlcmlmeSkKKwkJCV9fZ2l0Y29tcF9kaXJlY3QgIiQoX19naXRfdGFncyAiIiAiJGN1ciIgIiAiKSIKKwkJCXJldHVybgorCQkJOzsKKwkJLWYpCisJCQlmPTEKKwkJCTs7CisJCWVzYWMKKwkJKChjKyspKQorCWRvbmUKKworCWNhc2UgIiRwcmV2IiBpbgorCS1tfC1GKQorCQk7OworCS0qfHRhZykKKwkJaWYgWyAkZiA9IDEgXTsgdGhlbgorCQkJX19naXRjb21wX2RpcmVjdCAiJChfX2dpdF90YWdzICIiICIkY3VyIiAiICIpIgorCQlmaQorCQk7OworCSopCisJCV9fZ2l0X2NvbXBsZXRlX3JlZnMKKwkJOzsKKwllc2FjCisKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gdGFnCisJCTs7CisJZXNhYworfQorCitfZ2l0X3doYXRjaGFuZ2VkICgpCit7CisJX2dpdF9sb2cKK30KKworX19naXRfY29tcGxldGVfd29ya3RyZWVfcGF0aHMgKCkKK3sKKwlsb2NhbCBJRlM9JCdcbicKKwlfX2dpdGNvbXBfbmwgIiQoZ2l0IHdvcmt0cmVlIGxpc3QgLS1wb3JjZWxhaW4gfAorCQkjIFNraXAgdGhlIGZpcnN0IGVudHJ5OiBpdCdzIHRoZSBwYXRoIG9mIHRoZSBtYWluIHdvcmt0cmVlLAorCQkjIHdoaWNoIGNhbid0IGJlIG1vdmVkLCByZW1vdmVkLCBsb2NrZWQsIGV0Yy4KKwkJc2VkIC1uIC1lICcyLCQgcy9ed29ya3RyZWUgLy9wJykiCit9CisKK19naXRfd29ya3RyZWUgKCkKK3sKKwlsb2NhbCBzdWJjb21tYW5kcz0iYWRkIGxpc3QgbG9jayBtb3ZlIHBydW5lIHJlbW92ZSB1bmxvY2siCisJbG9jYWwgc3ViY29tbWFuZCBzdWJjb21tYW5kX2lkeAorCisJc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX29uX2NtZGxpbmUgLS1zaG93LWlkeCAiJHN1YmNvbW1hbmRzIikiCisJc3ViY29tbWFuZF9pZHg9IiR7c3ViY29tbWFuZCUgKn0iCisJc3ViY29tbWFuZD0iJHtzdWJjb21tYW5kIyogfSIKKworCWNhc2UgIiRzdWJjb21tYW5kLCRjdXIiIGluCisJLCopCisJCV9fZ2l0Y29tcCAiJHN1YmNvbW1hbmRzIgorCQk7OworCSosLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiB3b3JrdHJlZV8kc3ViY29tbWFuZAorCQk7OworCWFkZCwqKQkjIHVzYWdlOiBnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxwYXRoPiBbPGNvbW1pdC1pc2g+XQorCQkjIEhlcmUgd2UgYXJlIG5vdCBjb21wbGV0aW5nIGFuIC0tb3B0aW9uLCBpdCdzIGVpdGhlciB0aGUKKwkJIyBwYXRoIG9yIGEgcmVmLgorCQljYXNlICIkcHJldiIgaW4KKwkJLWJ8LUIpCSMgQ29tcGxldGUgcmVmcyBmb3IgYnJhbmNoIHRvIGJlIGNyZWF0ZWQvcmVzZXRlZC4KKwkJCV9fZ2l0X2NvbXBsZXRlX3JlZnMKKwkJCTs7CisJCS0qKQkjIFRoZSBwcmV2aW91cyB3b3JkIGlzIGFuIC1vfC0tb3B0aW9uIHdpdGhvdXQgYW4KKwkJCSMgdW5zdHVjayBhcmd1bWVudDogaGF2ZSB0byBjb21wbGV0ZSB0aGUgcGF0aCBmb3IKKwkJCSMgdGhlIG5ldyB3b3JrdHJlZSwgc28gZG9uJ3QgbGlzdCBhbnl0aGluZywgYnV0IGxldAorCQkJIyBCYXNoIGZhbGwgYmFjayB0byBmaWxlbmFtZSBjb21wbGV0aW9uLgorCQkJOzsKKwkJKikJIyBUaGUgcHJldmlvdXMgd29yZCBpcyBub3QgYW4gLS1vcHRpb24sIHNvIGl0IG11c3QKKwkJCSMgYmUgZWl0aGVyIHRoZSAnYWRkJyBzdWJjb21tYW5kLCB0aGUgdW5zdHVjaworCQkJIyBhcmd1bWVudCBvZiBhbiBvcHRpb24gKGUuZy4gYnJhbmNoIGZvciAtYnwtQiksIG9yCisJCQkjIHRoZSBwYXRoIGZvciB0aGUgbmV3IHdvcmt0cmVlLgorCQkJaWYgWyAkY3dvcmQgLWVxICQoKHN1YmNvbW1hbmRfaWR4KzEpKSBdOyB0aGVuCisJCQkJIyBSaWdodCBhZnRlciB0aGUgJ2FkZCcgc3ViY29tbWFuZDogaGF2ZSB0bworCQkJCSMgY29tcGxldGUgdGhlIHBhdGgsIHNvIGZhbGwgYmFjayB0byBCYXNoCisJCQkJIyBmaWxlbmFtZSBjb21wbGV0aW9uLgorCQkJCToKKwkJCWVsc2UKKwkJCQljYXNlICIke3dvcmRzW2N3b3JkLTJdfSIgaW4KKwkJCQktYnwtQikJIyBBZnRlciAnLWIgPGJyYW5jaD4nOiBoYXZlIHRvCisJCQkJCSMgY29tcGxldGUgdGhlIHBhdGgsIHNvIGZhbGwgYmFjaworCQkJCQkjIHRvIEJhc2ggZmlsZW5hbWUgY29tcGxldGlvbi4KKwkJCQkJOzsKKwkJCQkqKQkjIEFmdGVyIHRoZSBwYXRoOiBoYXZlIHRvIGNvbXBsZXRlCisJCQkJCSMgdGhlIHJlZiB0byBiZSBjaGVja2VkIG91dC4KKwkJCQkJX19naXRfY29tcGxldGVfcmVmcworCQkJCQk7OworCQkJCWVzYWMKKwkJCWZpCisJCQk7OworCQllc2FjCisJCTs7CisJbG9jaywqfHJlbW92ZSwqfHVubG9jaywqKQorCQlfX2dpdF9jb21wbGV0ZV93b3JrdHJlZV9wYXRocworCQk7OworCW1vdmUsKikKKwkJaWYgWyAkY3dvcmQgLWVxICQoKHN1YmNvbW1hbmRfaWR4KzEpKSBdOyB0aGVuCisJCQkjIFRoZSBmaXJzdCBwYXJhbWV0ZXIgbXVzdCBiZSBhbiBleGlzdGluZyB3b3JraW5nCisJCQkjIHRyZWUgdG8gYmUgbW92ZWQuCisJCQlfX2dpdF9jb21wbGV0ZV93b3JrdHJlZV9wYXRocworCQllbHNlCisJCQkjIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBkZXN0aW5hdGlvbjogaXQgY291bGQKKwkJCSMgYmUgYW55IHBhdGgsIHNvIGRvbid0IGxpc3QgYW55dGhpbmcsIGJ1dCBsZXQgQmFzaAorCQkJIyBmYWxsIGJhY2sgdG8gZmlsZW5hbWUgY29tcGxldGlvbi4KKwkJCToKKwkJZmkKKwkJOzsKKwllc2FjCit9CisKK19fZ2l0X2NvbXBsZXRlX2NvbW1vbiAoKSB7CisJbG9jYWwgY29tbWFuZD0iJDEiCisKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gIiRjb21tYW5kIgorCQk7OworCWVzYWMKK30KKworX19naXRfY21kc193aXRoX3BhcnNlb3B0X2hlbHBlcj0KK19fZ2l0X3N1cHBvcnRfcGFyc2VvcHRfaGVscGVyICgpIHsKKwl0ZXN0IC1uICIkX19naXRfY21kc193aXRoX3BhcnNlb3B0X2hlbHBlciIgfHwKKwkJX19naXRfY21kc193aXRoX3BhcnNlb3B0X2hlbHBlcj0iJChfX2dpdCAtLWxpc3QtY21kcz1wYXJzZW9wdCkiCisKKwljYXNlICIgJF9fZ2l0X2NtZHNfd2l0aF9wYXJzZW9wdF9oZWxwZXIgIiBpbgorCSoiICQxICIqKQorCQlyZXR1cm4gMAorCQk7OworCSopCisJCXJldHVybiAxCisJCTs7CisJZXNhYworfQorCitfX2dpdF9jb21wbGV0ZV9jb21tYW5kICgpIHsKKwlsb2NhbCBjb21tYW5kPSIkMSIKKwlsb2NhbCBjb21wbGV0aW9uX2Z1bmM9Il9naXRfJHtjb21tYW5kLy8tL199IgorCWlmICEgZGVjbGFyZSAtZiAkY29tcGxldGlvbl9mdW5jID4vZGV2L251bGwgMj4vZGV2L251bGwgJiYKKwkJZGVjbGFyZSAtZiBfY29tcGxldGlvbl9sb2FkZXIgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbAorCXRoZW4KKwkJX2NvbXBsZXRpb25fbG9hZGVyICJnaXQtJGNvbW1hbmQiCisJZmkKKwlpZiBkZWNsYXJlIC1mICRjb21wbGV0aW9uX2Z1bmMgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbAorCXRoZW4KKwkJJGNvbXBsZXRpb25fZnVuYworCQlyZXR1cm4gMAorCWVsaWYgX19naXRfc3VwcG9ydF9wYXJzZW9wdF9oZWxwZXIgIiRjb21tYW5kIgorCXRoZW4KKwkJX19naXRfY29tcGxldGVfY29tbW9uICIkY29tbWFuZCIKKwkJcmV0dXJuIDAKKwllbHNlCisJCXJldHVybiAxCisJZmkKK30KKworX19naXRfbWFpbiAoKQoreworCWxvY2FsIGkgYz0xIGNvbW1hbmQgX19naXRfZGlyIF9fZ2l0X3JlcG9fcGF0aAorCWxvY2FsIF9fZ2l0X0NfYXJncyBDX2FyZ3NfY291bnQ9MAorCisJd2hpbGUgWyAkYyAtbHQgJGN3b3JkIF07IGRvCisJCWk9IiR7d29yZHNbY119IgorCQljYXNlICIkaSIgaW4KKwkJLS1naXQtZGlyPSopIF9fZ2l0X2Rpcj0iJHtpIy0tZ2l0LWRpcj19IiA7OworCQktLWdpdC1kaXIpICAgKChjKyspKSA7IF9fZ2l0X2Rpcj0iJHt3b3Jkc1tjXX0iIDs7CisJCS0tYmFyZSkgICAgICBfX2dpdF9kaXI9Ii4iIDs7CisJCS0taGVscCkgY29tbWFuZD0iaGVscCI7IGJyZWFrIDs7CisJCS1jfC0td29yay10cmVlfC0tbmFtZXNwYWNlKSAoKGMrKykpIDs7CisJCS1DKQlfX2dpdF9DX2FyZ3NbQ19hcmdzX2NvdW50KytdPS1DCisJCQkoKGMrKykpCisJCQlfX2dpdF9DX2FyZ3NbQ19hcmdzX2NvdW50KytdPSIke3dvcmRzW2NdfSIKKwkJCTs7CisJCS0qKSA7OworCQkqKSBjb21tYW5kPSIkaSI7IGJyZWFrIDs7CisJCWVzYWMKKwkJKChjKyspKQorCWRvbmUKKworCWlmIFsgLXogIiRjb21tYW5kIiBdOyB0aGVuCisJCWNhc2UgIiRwcmV2IiBpbgorCQktLWdpdC1kaXJ8LUN8LS13b3JrLXRyZWUpCisJCQkjIHRoZXNlIG5lZWQgYSBwYXRoIGFyZ3VtZW50LCBsZXQncyBmYWxsIGJhY2sgdG8KKwkJCSMgQmFzaCBmaWxlbmFtZSBjb21wbGV0aW9uCisJCQlyZXR1cm4KKwkJCTs7CisJCS1jKQorCQkJX19naXRfY29tcGxldGVfY29uZmlnX3ZhcmlhYmxlX25hbWVfYW5kX3ZhbHVlCisJCQlyZXR1cm4KKwkJCTs7CisJCS0tbmFtZXNwYWNlKQorCQkJIyB3ZSBkb24ndCBzdXBwb3J0IGNvbXBsZXRpbmcgdGhlc2Ugb3B0aW9ucycgYXJndW1lbnRzCisJCQlyZXR1cm4KKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJGN1ciIgaW4KKwkJLS0qKSAgIF9fZ2l0Y29tcCAiCisJCQktLXBhZ2luYXRlCisJCQktLW5vLXBhZ2VyCisJCQktLWdpdC1kaXI9CisJCQktLWJhcmUKKwkJCS0tdmVyc2lvbgorCQkJLS1leGVjLXBhdGgKKwkJCS0tZXhlYy1wYXRoPQorCQkJLS1odG1sLXBhdGgKKwkJCS0tbWFuLXBhdGgKKwkJCS0taW5mby1wYXRoCisJCQktLXdvcmstdHJlZT0KKwkJCS0tbmFtZXNwYWNlPQorCQkJLS1uby1yZXBsYWNlLW9iamVjdHMKKwkJCS0taGVscAorCQkJIgorCQkJOzsKKwkJKikKKwkJCWlmIHRlc3QgLW4gIiRHSVRfVEVTVElOR19QT1JDRUxBSU5fQ09NTUFORF9MSVNUIgorCQkJdGhlbgorCQkJCV9fZ2l0Y29tcCAiJEdJVF9URVNUSU5HX1BPUkNFTEFJTl9DT01NQU5EX0xJU1QiCisJCQllbHNlCisJCQkJX19naXRjb21wICIkKF9fZ2l0IC0tbGlzdC1jbWRzPWxpc3QtbWFpbnBvcmNlbGFpbixvdGhlcnMsbm9oZWxwZXJzLGFsaWFzLGxpc3QtY29tcGxldGUsY29uZmlnKSIKKwkJCWZpCisJCQk7OworCQllc2FjCisJCXJldHVybgorCWZpCisKKwlfX2dpdF9jb21wbGV0ZV9jb21tYW5kICIkY29tbWFuZCIgJiYgcmV0dXJuCisKKwlsb2NhbCBleHBhbnNpb249JChfX2dpdF9hbGlhc2VkX2NvbW1hbmQgIiRjb21tYW5kIikKKwlpZiBbIC1uICIkZXhwYW5zaW9uIiBdOyB0aGVuCisJCXdvcmRzWzFdPSRleHBhbnNpb24KKwkJX19naXRfY29tcGxldGVfY29tbWFuZCAiJGV4cGFuc2lvbiIKKwlmaQorfQorCitfX2dpdGtfbWFpbiAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJbG9jYWwgX19naXRfcmVwb19wYXRoCisJX19naXRfZmluZF9yZXBvX3BhdGgKKworCWxvY2FsIG1lcmdlPSIiCisJaWYgWyAtZiAiJF9fZ2l0X3JlcG9fcGF0aC9NRVJHRV9IRUFEIiBdOyB0aGVuCisJCW1lcmdlPSItLW1lcmdlIgorCWZpCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQkkX19naXRfbG9nX2NvbW1vbl9vcHRpb25zCisJCQkkX19naXRfbG9nX2dpdGtfb3B0aW9ucworCQkJJG1lcmdlCisJCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0Cit9CisKK2lmIFtbIC1uICR7WlNIX1ZFUlNJT04tfSBdXSAmJgorICAgIyBEb24ndCBkZWZpbmUgdGhlc2UgZnVuY3Rpb25zIHdoZW4gc291cmNlZCBmcm9tICdnaXQtY29tcGxldGlvbi56c2gnLAorICAgIyBpdCBoYXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbnMuCisgICBbWyAteiAke0dJVF9TT1VSQ0lOR19aU0hfQ09NUExFVElPTi19IF1dOyB0aGVuCisJZWNobyAiV0FSTklORzogdGhpcyBzY3JpcHQgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHNlZSBnaXQtY29tcGxldGlvbi56c2giIDE+JjIKKworCWF1dG9sb2FkIC1VICtYIGNvbXBpbml0ICYmIGNvbXBpbml0CisKKwlfX2dpdGNvbXAgKCkKKwl7CisJCWVtdWxhdGUgLUwgenNoCisKKwkJbG9jYWwgY3VyXz0iJHszLSRjdXJ9IgorCisJCWNhc2UgIiRjdXJfIiBpbgorCQktLSo9KQorCQkJOzsKKwkJKikKKwkJCWxvY2FsIGMgSUZTPSQnIFx0XG4nCisJCQlsb2NhbCAtYSBhcnJheQorCQkJZm9yIGMgaW4gJHs9MX07IGRvCisJCQkJYz0iJGMkezQtfSIKKwkJCQljYXNlICRjIGluCisJCQkJLS0qPSp8Ki4pIDs7CisJCQkJKikgYz0iJGMgIiA7OworCQkJCWVzYWMKKwkJCQlhcnJheVskeyNhcnJheVtAXX0rMV09IiRjIgorCQkJZG9uZQorCQkJY29tcHNldCAtUCAnKls9Ol0nCisJCQljb21wYWRkIC1RIC1TICcnIC1wICIkezItfSIgLWEgLS0gYXJyYXkgJiYgX3JldD0wCisJCQk7OworCQllc2FjCisJfQorCisJX19naXRjb21wX2RpcmVjdCAoKQorCXsKKwkJZW11bGF0ZSAtTCB6c2gKKworCQlsb2NhbCBJRlM9JCdcbicKKwkJY29tcHNldCAtUCAnKls9Ol0nCisJCWNvbXBhZGQgLVEgLS0gJHs9MX0gJiYgX3JldD0wCisJfQorCisJX19naXRjb21wX25sICgpCisJeworCQllbXVsYXRlIC1MIHpzaAorCisJCWxvY2FsIElGUz0kJ1xuJworCQljb21wc2V0IC1QICcqWz06XScKKwkJY29tcGFkZCAtUSAtUyAiJHs0LSB9IiAtcCAiJHsyLX0iIC0tICR7PTF9ICYmIF9yZXQ9MAorCX0KKworCV9fZ2l0Y29tcF9maWxlX2RpcmVjdCAoKQorCXsKKwkJZW11bGF0ZSAtTCB6c2gKKworCQlsb2NhbCBJRlM9JCdcbicKKwkJY29tcHNldCAtUCAnKls9Ol0nCisJCWNvbXBhZGQgLWYgLS0gJHs9MX0gJiYgX3JldD0wCisJfQorCisJX19naXRjb21wX2ZpbGUgKCkKKwl7CisJCWVtdWxhdGUgLUwgenNoCisKKwkJbG9jYWwgSUZTPSQnXG4nCisJCWNvbXBzZXQgLVAgJypbPTpdJworCQljb21wYWRkIC1wICIkezItfSIgLWYgLS0gJHs9MX0gJiYgX3JldD0wCisJfQorCisJX2dpdCAoKQorCXsKKwkJbG9jYWwgX3JldD0xIGN1ciBjd29yZCBwcmV2CisJCWN1cj0ke3dvcmRzW0NVUlJFTlRdfQorCQlwcmV2PSR7d29yZHNbQ1VSUkVOVC0xXX0KKwkJbGV0IGN3b3JkPUNVUlJFTlQtMQorCQllbXVsYXRlIGtzaCAtYyBfXyR7c2VydmljZX1fbWFpbgorCQlsZXQgX3JldCAmJiBfZGVmYXVsdCAmJiBfcmV0PTAKKwkJcmV0dXJuIF9yZXQKKwl9CisKKwljb21wZGVmIF9naXQgZ2l0IGdpdGsKKwlyZXR1cm4KK2ZpCisKK19fZ2l0X2Z1bmNfd3JhcCAoKQoreworCWxvY2FsIGN1ciB3b3JkcyBjd29yZCBwcmV2CisJX2dldF9jb21wX3dvcmRzX2J5X3JlZiAtbiA9OiBjdXIgd29yZHMgY3dvcmQgcHJldgorCSQxCit9CisKKyMgU2V0dXAgY29tcGxldGlvbiBmb3IgY2VydGFpbiBmdW5jdGlvbnMgZGVmaW5lZCBhYm92ZSBieSBzZXR0aW5nIGNvbW1vbgorIyB2YXJpYWJsZXMgYW5kIHdvcmthcm91bmRzLgorIyBUaGlzIGlzIE5PVCBhIHB1YmxpYyBmdW5jdGlvbjsgdXNlIGF0IHlvdXIgb3duIHJpc2suCitfX2dpdF9jb21wbGV0ZSAoKQoreworCWxvY2FsIHdyYXBwZXI9Il9fZ2l0X3dyYXAkezJ9IgorCWV2YWwgIiR3cmFwcGVyICgpIHsgX19naXRfZnVuY193cmFwICQyIDsgfSIKKwljb21wbGV0ZSAtbyBiYXNoZGVmYXVsdCAtbyBkZWZhdWx0IC1vIG5vc3BhY2UgLUYgJHdyYXBwZXIgJDEgMj4vZGV2L251bGwgXAorCQl8fCBjb21wbGV0ZSAtbyBkZWZhdWx0IC1vIG5vc3BhY2UgLUYgJHdyYXBwZXIgJDEKK30KKworIyB3cmFwcGVyIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorX2dpdCAoKQoreworCV9fZ2l0X3dyYXBfX2dpdF9tYWluCit9CisKKyMgd3JhcHBlciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKK19naXRrICgpCit7CisJX19naXRfd3JhcF9fZ2l0a19tYWluCit9CisKK19fZ2l0X2NvbXBsZXRlIGdpdCBfX2dpdF9tYWluCitfX2dpdF9jb21wbGV0ZSBnaXRrIF9fZ2l0a19tYWluCisKKyMgVGhlIGZvbGxvd2luZyBhcmUgbmVjZXNzYXJ5IG9ubHkgZm9yIEN5Z3dpbiwgYW5kIG9ubHkgYXJlIG5lZWRlZAorIyB3aGVuIHRoZSB1c2VyIGhhcyB0YWItY29tcGxldGVkIHRoZSBleGVjdXRhYmxlIG5hbWUgYW5kIGNvbnNlcXVlbnRseQorIyBpbmNsdWRlZCB0aGUgJy5leGUnIHN1ZmZpeC4KKyMKK2lmIFsgQ3lnd2luID0gIiQodW5hbWUgLW8gMj4vZGV2L251bGwpIiBdOyB0aGVuCitfX2dpdF9jb21wbGV0ZSBnaXQuZXhlIF9fZ2l0X21haW4KK2ZpCmRpZmYgLS1naXQgYS9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24udGNzaCBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi50Y3NoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNzkwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24udGNzaApAQCAtMCwwICsxLDEyNiBAQAorIyB0Y3NoIGNvbXBsZXRpb24gc3VwcG9ydCBmb3IgY29yZSBHaXQuCisjCisjIENvcHlyaWdodCAoQykgMjAxMiBNYXJjIEtob3V6YW0gPG1hcmMua2hvdXphbUBnbWFpbC5jb20+CisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLjAuCisjCisjIFdoZW4gc291cmNlZCwgdGhpcyBzY3JpcHQgd2lsbCBnZW5lcmF0ZSBhIG5ldyBzY3JpcHQgdGhhdCB1c2VzCisjIHRoZSBnaXQtY29tcGxldGlvbi5iYXNoIHNjcmlwdCBwcm92aWRlZCBieSBjb3JlIEdpdC4gIFRoaXMgbmV3CisjIHNjcmlwdCBjYW4gYmUgdXNlZCBieSB0Y3NoIHRvIHBlcmZvcm0gZ2l0IGNvbXBsZXRpb24uCisjIFRoZSBjdXJyZW50IHNjcmlwdCBhbHNvIGlzc3VlcyB0aGUgbmVjZXNzYXJ5IHRjc2ggJ2NvbXBsZXRlJworIyBjb21tYW5kcy4KKyMKKyMgVG8gdXNlIHRoaXMgY29tcGxldGlvbiBzY3JpcHQ6CisjCisjICAgIDApIFlvdSBuZWVkIHRjc2ggNi4xNi4wMCBvciBuZXdlci4KKyMgICAgMSkgQ29weSBib3RoIHRoaXMgZmlsZSBhbmQgdGhlIGJhc2ggY29tcGxldGlvbiBzY3JpcHQgdG8gJHtIT01FfS4KKyMgICAgICAgWW91IF9tdXN0XyB1c2UgdGhlIG5hbWUgJHtIT01FfS8uZ2l0LWNvbXBsZXRpb24uYmFzaCBmb3IgdGhlCisjICAgICAgIGJhc2ggc2NyaXB0LgorIyAgICAgICAoZS5nLiB+Ly5naXQtY29tcGxldGlvbi50Y3NoIGFuZCB+Ly5naXQtY29tcGxldGlvbi5iYXNoKS4KKyMgICAgMikgQWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byB5b3VyIC50Y3NocmMvLmNzaHJjOgorIyAgICAgICAgc291cmNlIH4vLmdpdC1jb21wbGV0aW9uLnRjc2gKKyMgICAgMykgRm9yIGNvbXBsZXRpb24gc2ltaWxhciB0byBiYXNoLCBpdCBpcyByZWNvbW1lbmRlZCB0byBhbHNvCisjICAgICAgIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91ciAudGNzaHJjLy5jc2hyYzoKKyMgICAgICAgIHNldCBhdXRvbGlzdD1hbWJpZ3VvdXMKKyMgICAgICAgSXQgd2lsbCB0ZWxsIHRjc2ggdG8gbGlzdCB0aGUgcG9zc2libGUgY29tcGxldGlvbiBjaG9pY2VzLgorCitzZXQgX19naXRfdGNzaF9jb21wbGV0aW9uX3ZlcnNpb24gPSBgXGVjaG8gJHt0Y3NofSB8IFxzZWQgJ3MvXC4vIC9nJ2AKK2lmICggJHtfX2dpdF90Y3NoX2NvbXBsZXRpb25fdmVyc2lvblsxXX0gPCA2IHx8IFwKKyAgICAgKCAke19fZ2l0X3Rjc2hfY29tcGxldGlvbl92ZXJzaW9uWzFdfSA9PSA2ICYmIFwKKyAgICAgICAke19fZ2l0X3Rjc2hfY29tcGxldGlvbl92ZXJzaW9uWzJdfSA8IDE2ICkgKSB0aGVuCisJZWNobyAiZ2l0LWNvbXBsZXRpb24udGNzaDogWW91ciB2ZXJzaW9uIG9mIHRjc2ggaXMgdG9vIG9sZCwgeW91IG5lZWQgdmVyc2lvbiA2LjE2LjAwIG9yIG5ld2VyLiAgR2l0IGNvbXBsZXRpb24gd2lsbCBub3Qgd29yay4iCisJZXhpdAorZW5kaWYKK3Vuc2V0IF9fZ2l0X3Rjc2hfY29tcGxldGlvbl92ZXJzaW9uCisKK3NldCBfX2dpdF90Y3NoX2NvbXBsZXRpb25fb3JpZ2luYWxfc2NyaXB0ID0gJHtIT01FfS8uZ2l0LWNvbXBsZXRpb24uYmFzaAorc2V0IF9fZ2l0X3Rjc2hfY29tcGxldGlvbl9zY3JpcHQgPSAke0hPTUV9Ly5naXQtY29tcGxldGlvbi50Y3NoLmJhc2gKKworIyBDaGVjayB0aGF0IHRoZSB1c2VyIHB1dCB0aGUgc2NyaXB0IGluIHRoZSByaWdodCBwbGFjZQoraWYgKCAhIC1lICR7X19naXRfdGNzaF9jb21wbGV0aW9uX29yaWdpbmFsX3NjcmlwdH0gKSB0aGVuCisJZWNobyAiZ2l0LWNvbXBsZXRpb24udGNzaDogQ2Fubm90IGZpbmQ6ICR7X19naXRfdGNzaF9jb21wbGV0aW9uX29yaWdpbmFsX3NjcmlwdH0uICBHaXQgY29tcGxldGlvbiB3aWxsIG5vdCB3b3JrLiIKKwlleGl0CitlbmRpZgorCitjYXQgPDwgRU9GID4hICR7X19naXRfdGNzaF9jb21wbGV0aW9uX3NjcmlwdH0KKyMhYmFzaAorIworIyBUaGlzIHNjcmlwdCBpcyBHRU5FUkFURUQgYW5kIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYXV0b21hdGljYWxseS4KKyMgRG8gbm90IG1vZGlmeSBpdCBkaXJlY3RseS4gIEluc3RlYWQsIG1vZGlmeSBnaXQtY29tcGxldGlvbi50Y3NoCisjIGFuZCBzb3VyY2UgaXQgYWdhaW4uCisKK3NvdXJjZSAke19fZ2l0X3Rjc2hfY29tcGxldGlvbl9vcmlnaW5hbF9zY3JpcHR9CisKKyMgUmVtb3ZlIHRoZSBjb2xvbiBhcyBhIGNvbXBsZXRpb24gc2VwYXJhdG9yIGJlY2F1c2UgdGNzaCBjYW5ub3QgaGFuZGxlIGl0CitDT01QX1dPUkRCUkVBS1M9XCR7Q09NUF9XT1JEQlJFQUtTLy86fQorCisjIEZvciBmaWxlIGNvbXBsZXRpb24sIHRjc2ggbmVlZHMgdGhlICcvJyB0byBiZSBhcHBlbmRlZCB0byBkaXJlY3Rvcmllcy4KKyMgQnkgZGVmYXVsdCwgdGhlIGJhc2ggc2NyaXB0IGRvZXMgbm90IGRvIHRoYXQuCisjIFdlIGNhbiBhY2hpZXZlIHRoaXMgYnkgdXNpbmcgdGhlIGJlbG93IGNvbXBhdGliaWxpdHkKKyMgbWV0aG9kIG9mIHRoZSBnaXQtY29tcGxldGlvbi5iYXNoIHNjcmlwdC4KK19fZ2l0X2luZGV4X2ZpbGVfbGlzdF9maWx0ZXIgKCkKK3sKKwlfX2dpdF9pbmRleF9maWxlX2xpc3RfZmlsdGVyX2NvbXBhdAorfQorCisjIFNldCBDT01QX1dPUkRTIGluIGEgd2F5IHRoYXQgY2FuIGJlIGhhbmRsZWQgYnkgdGhlIGJhc2ggc2NyaXB0LgorQ09NUF9XT1JEUz0oXCQyKQorCisjIFRoZSBjdXJzb3IgaXMgYXQgdGhlIGVuZCBvZiBwYXJhbWV0ZXIgIzEuCisjIFdlIG11c3QgY2hlY2sgZm9yIGEgc3BhY2UgYXMgdGhlIGxhc3QgY2hhcmFjdGVyIHdoaWNoIHdpbGwKKyMgdGVsbCB1cyB0aGF0IHRoZSBwcmV2aW91cyB3b3JkIGlzIGNvbXBsZXRlIGFuZCB0aGUgY3Vyc29yCisjIGlzIG9uIHRoZSBuZXh0IHdvcmQuCitpZiBbICJcJHsyOiAtMX0iID09ICIgIiBdOyB0aGVuCisJIyBUaGUgbGFzdCBjaGFyYWN0ZXIgaXMgYSBzcGFjZSwgc28gb3VyIGxvY2F0aW9uIGlzIGF0IHRoZSBlbmQKKwkjIG9mIHRoZSBjb21tYW5kLWxpbmUgYXJyYXkKKwlDT01QX0NXT1JEPVwkeyNDT01QX1dPUkRTW0BdfQorZWxzZQorCSMgVGhlIGxhc3QgY2hhcmFjdGVyIGlzIG5vdCBhIHNwYWNlLCBzbyBvdXIgbG9jYXRpb24gaXMgb24gdGhlCisJIyBsYXN0IHdvcmQgb2YgdGhlIGNvbW1hbmQtbGluZSBhcnJheSwgc28gd2UgbXVzdCBkZWNyZW1lbnQgdGhlCisJIyBjb3VudCBieSAxCisJQ09NUF9DV09SRD1cJCgoXCR7I0NPTVBfV09SRFNbQF19LTEpKQorZmkKKworIyBDYWxsIF9naXQoKSBvciBfZ2l0aygpIG9mIHRoZSBiYXNoIHNjcmlwdCwgYmFzZWQgb24gdGhlIGZpcnN0IGFyZ3VtZW50CitfXCR7MX0KKworSUZTPVwkJ1xuJworaWYgWyBcJHsjQ09NUFJFUExZWypdfSAtZXEgMCBdOyB0aGVuCisJIyBObyBjb21wbGV0aW9ucyBzdWdnZXN0ZWQuICBJbiB0aGlzIGNhc2UsIHdlIHdhbnQgdGNzaCB0byBwZXJmb3JtCisJIyBzdGFuZGFyZCBmaWxlIGNvbXBsZXRpb24uICBIb3dldmVyLCB0aGVyZSBkb2VzIG5vdCBzZWVtIHRvIGJlIHdheQorCSMgdG8gdGVsbCB0Y3NoIHRvIGRvIHRoYXQuICBUbyBoZWxwIHRoZSB1c2VyLCB3ZSB0cnkgdG8gc2ltdWxhdGUKKwkjIGZpbGUgY29tcGxldGlvbiBkaXJlY3RseSBpbiB0aGlzIHNjcmlwdC4KKwkjCisJIyBLbm93biBpc3N1ZXM6CisJIyAgICAgLSBQb3NzaWJsZSBjb21wbGV0aW9ucyBhcmUgc2hvd24gd2l0aCB0aGVpciBkaXJlY3RvcnkgcHJlZml4LgorCSMgICAgIC0gQ29tcGxldGlvbnMgY29udGFpbmluZyBzaGVsbCB2YXJpYWJsZXMgYXJlIG5vdCBoYW5kbGVkLgorCSMgICAgIC0gQ29tcGxldGlvbnMgd2l0aCB+IGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYXJlIG5vdCBoYW5kbGVkLgorCisJIyBObyBmaWxlIGNvbXBsZXRpb24gc2hvdWxkIGJlIGRvbmUgdW5sZXNzIHdlIGFyZSBjb21wbGV0aW5nIGJleW9uZAorCSMgdGhlIGdpdCBzdWItY29tbWFuZC4gIEFuIGltcHJvdmVtZW50IG9uIHRoZSBiYXNoIGNvbXBsZXRpb24gOikKKwlpZiBbIFwke0NPTVBfQ1dPUkR9IC1ndCAxIF07IHRoZW4KKwkJVE9fQ09NUExFVEU9Ilwke0NPTVBfV09SRFNbXCR7Q09NUF9DV09SRH1dfSIKKworCQkjIFdlIGRvbid0IHN1cHBvcnQgfiBleHBhbnNpb246IHRvbyB0cmlja3kuCisJCWlmIFsgIlwke1RPX0NPTVBMRVRFOjA6MX0iICE9ICJ+IiBdOyB0aGVuCisJCQkjIFVzZSBscyBzbyBhcyB0byBhZGQgdGhlICcvJyBhdCB0aGUgZW5kIG9mIGRpcmVjdG9yaWVzLgorCQkJQ09NUFJFUExZPShcYGxzIC1kcCBcJHtUT19DT01QTEVURX0qIDI+IC9kZXYvbnVsbFxgKQorCQlmaQorCWZpCitmaQorCisjIHRjc2ggZG9lcyBub3QgYXV0b21hdGljYWxseSByZW1vdmUgZHVwbGljYXRlcywgc28gd2UgZG8gaXQgb3Vyc2VsdmVzCitlY2hvICJcJHtDT01QUkVQTFlbKl19IiB8IHNvcnQgfCB1bmlxCisKKyMgSWYgdGhlcmUgaXMgYSBzaW5nbGUgY29tcGxldGlvbiBhbmQgaXQgaXMgYSBkaXJlY3RvcnksIHdlIG91dHB1dCBpdAorIyBhIHNlY29uZCB0aW1lIHRvIHRyaWNrIHRjc2ggaW50byBub3QgYWRkaW5nIGEgc3BhY2UgYWZ0ZXIgaXQuCitpZiBbIFwkeyNDT01QUkVQTFlbKl19IC1lcSAxIF0gJiYgWyAiXCR7Q09NUFJFUExZWzBdOiAtMX0iID09ICIvIiBdOyB0aGVuCisJZWNobyAiXCR7Q09NUFJFUExZWypdfSIKK2ZpCisKK0VPRgorCisjIERvbid0IG5lZWQgdGhpcyB2YXJpYWJsZSBhbnltb3JlLCBzbyBkb24ndCBwb2xsdXRlIHRoZSB1c2VycyBlbnZpcm9ubWVudAordW5zZXQgX19naXRfdGNzaF9jb21wbGV0aW9uX29yaWdpbmFsX3NjcmlwdAorCitjb21wbGV0ZSBnaXQgICdwLCosYGJhc2ggJHtfX2dpdF90Y3NoX2NvbXBsZXRpb25fc2NyaXB0fSBnaXQgIiR7Q09NTUFORF9MSU5FfSJgLCcKK2NvbXBsZXRlIGdpdGsgJ3AsKixgYmFzaCAke19fZ2l0X3Rjc2hfY29tcGxldGlvbl9zY3JpcHR9IGdpdGsgIiR7Q09NTUFORF9MSU5FfSJgLCcKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi56c2ggYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uenNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNDdlODYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uenNoCkBAIC0wLDAgKzEsMjQ2IEBACisjY29tcGRlZiBnaXQgZ2l0aworCisjIHpzaCBjb21wbGV0aW9uIHdyYXBwZXIgZm9yIGdpdAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBGZWxpcGUgQ29udHJlcmFzIDxmZWxpcGUuY29udHJlcmFzQGdtYWlsLmNvbT4KKyMKKyMgWW91IG5lZWQgZ2l0J3MgYmFzaCBjb21wbGV0aW9uIHNjcmlwdCBpbnN0YWxsZWQgc29tZXdoZXJlLCBieSBkZWZhdWx0IGl0CisjIHdvdWxkIGJlIHRoZSBsb2NhdGlvbiBiYXNoLWNvbXBsZXRpb24gdXNlcy4KKyMKKyMgSWYgeW91ciBzY3JpcHQgaXMgc29tZXdoZXJlIGVsc2UsIHlvdSBjYW4gY29uZmlndXJlIGl0IG9uIHlvdXIgfi8uenNocmM6CisjCisjICB6c3R5bGUgJzpjb21wbGV0aW9uOio6KjpnaXQ6Kicgc2NyaXB0IH4vLmdpdC1jb21wbGV0aW9uLnpzaAorIworIyBUaGUgcmVjb21tZW5kZWQgd2F5IHRvIGluc3RhbGwgdGhpcyBzY3JpcHQgaXMgdG8gbWFrZSBhIGNvcHkgb2YgaXQgaW4KKyMgfi8uenNoLyBkaXJlY3RvcnkgYXMgfi8uenNoL2dpdC1jb21wbGV0aW9uLnpzaCBhbmQgdGhlbiBhZGQgdGhlIGZvbGxvd2luZworIyB0byB5b3VyIH4vLnpzaHJjIGZpbGU6CisjCisjICBmcGF0aD0ofi8uenNoICRmcGF0aCkKKworY29tcGxldGUgKCkKK3sKKwkjIGRvIG5vdGhpbmcKKwlyZXR1cm4gMAorfQorCit6c3R5bGUgLVQgJzpjb21wbGV0aW9uOio6KjpnaXQ6KicgdGFnLW9yZGVyICYmIFwKKwl6c3R5bGUgJzpjb21wbGV0aW9uOio6KjpnaXQ6KicgdGFnLW9yZGVyICdjb21tb24tY29tbWFuZHMnCisKK3pzdHlsZSAtcyAiOmNvbXBsZXRpb246KjoqOmdpdDoqIiBzY3JpcHQgc2NyaXB0CitpZiBbIC16ICIkc2NyaXB0IiBdOyB0aGVuCisJbG9jYWwgLWEgbG9jYXRpb25zCisJbG9jYWwgZQorCWxvY2F0aW9ucz0oCisJCSQoZGlybmFtZSAke2Z1bmNzb3VyY2V0cmFjZVsxXSU6Kn0pL2dpdC1jb21wbGV0aW9uLmJhc2gKKwkJJy9ldGMvYmFzaF9jb21wbGV0aW9uLmQvZ2l0JyAjIGZlZG9yYSwgb2xkIGRlYmlhbgorCQknL3Vzci9zaGFyZS9iYXNoLWNvbXBsZXRpb24vY29tcGxldGlvbnMvZ2l0JyAjIGFyY2gsIHVidW50dSwgbmV3IGRlYmlhbgorCQknL3Vzci9zaGFyZS9iYXNoLWNvbXBsZXRpb24vZ2l0JyAjIGdlbnRvbworCQkpCisJZm9yIGUgaW4gJGxvY2F0aW9uczsgZG8KKwkJdGVzdCAtZiAkZSAmJiBzY3JpcHQ9IiRlIiAmJiBicmVhaworCWRvbmUKK2ZpCitHSVRfU09VUkNJTkdfWlNIX0NPTVBMRVRJT049eSAuICIkc2NyaXB0IgorCitfX2dpdGNvbXAgKCkKK3sKKwllbXVsYXRlIC1MIHpzaAorCisJbG9jYWwgY3VyXz0iJHszLSRjdXJ9IgorCisJY2FzZSAiJGN1cl8iIGluCisJLS0qPSkKKwkJOzsKKwkqKQorCQlsb2NhbCBjIElGUz0kJyBcdFxuJworCQlsb2NhbCAtYSBhcnJheQorCQlmb3IgYyBpbiAkez0xfTsgZG8KKwkJCWM9IiRjJHs0LX0iCisJCQljYXNlICRjIGluCisJCQktLSo9KnwqLikgOzsKKwkJCSopIGM9IiRjICIgOzsKKwkJCWVzYWMKKwkJCWFycmF5Kz0oIiRjIikKKwkJZG9uZQorCQljb21wc2V0IC1QICcqWz06XScKKwkJY29tcGFkZCAtUSAtUyAnJyAtcCAiJHsyLX0iIC1hIC0tIGFycmF5ICYmIF9yZXQ9MAorCQk7OworCWVzYWMKK30KKworX19naXRjb21wX2RpcmVjdCAoKQoreworCWVtdWxhdGUgLUwgenNoCisKKwlsb2NhbCBJRlM9JCdcbicKKwljb21wc2V0IC1QICcqWz06XScKKwljb21wYWRkIC1RIC0tICR7PTF9ICYmIF9yZXQ9MAorfQorCitfX2dpdGNvbXBfbmwgKCkKK3sKKwllbXVsYXRlIC1MIHpzaAorCisJbG9jYWwgSUZTPSQnXG4nCisJY29tcHNldCAtUCAnKls9Ol0nCisJY29tcGFkZCAtUSAtUyAiJHs0LSB9IiAtcCAiJHsyLX0iIC0tICR7PTF9ICYmIF9yZXQ9MAorfQorCitfX2dpdGNvbXBfbmxfYXBwZW5kICgpCit7CisJZW11bGF0ZSAtTCB6c2gKKworCWxvY2FsIElGUz0kJ1xuJworCWNvbXBhZGQgLVEgLVMgIiR7NC0gfSIgLXAgIiR7Mi19IiAtLSAkez0xfSAmJiBfcmV0PTAKK30KKworX19naXRjb21wX2ZpbGVfZGlyZWN0ICgpCit7CisJZW11bGF0ZSAtTCB6c2gKKworCWxvY2FsIElGUz0kJ1xuJworCWNvbXBzZXQgLVAgJypbPTpdJworCWNvbXBhZGQgLWYgLS0gJHs9MX0gJiYgX3JldD0wCit9CisKK19fZ2l0Y29tcF9maWxlICgpCit7CisJZW11bGF0ZSAtTCB6c2gKKworCWxvY2FsIElGUz0kJ1xuJworCWNvbXBzZXQgLVAgJypbPTpdJworCWNvbXBhZGQgLXAgIiR7Mi19IiAtZiAtLSAkez0xfSAmJiBfcmV0PTAKK30KKworX19naXRfenNoX2Jhc2hfZnVuYyAoKQoreworCWVtdWxhdGUgLUwga3NoCisKKwlsb2NhbCBjb21tYW5kPSQxCisKKwlsb2NhbCBjb21wbGV0aW9uX2Z1bmM9Il9naXRfJHtjb21tYW5kLy8tL199IgorCWRlY2xhcmUgLWYgJGNvbXBsZXRpb25fZnVuYyA+L2Rldi9udWxsICYmICRjb21wbGV0aW9uX2Z1bmMgJiYgcmV0dXJuCisKKwlsb2NhbCBleHBhbnNpb249JChfX2dpdF9hbGlhc2VkX2NvbW1hbmQgIiRjb21tYW5kIikKKwlpZiBbIC1uICIkZXhwYW5zaW9uIiBdOyB0aGVuCisJCXdvcmRzWzFdPSRleHBhbnNpb24KKwkJY29tcGxldGlvbl9mdW5jPSJfZ2l0XyR7ZXhwYW5zaW9uLy8tL199IgorCQlkZWNsYXJlIC1mICRjb21wbGV0aW9uX2Z1bmMgPi9kZXYvbnVsbCAmJiAkY29tcGxldGlvbl9mdW5jCisJZmkKK30KKworX19naXRfenNoX2NtZF9jb21tb24gKCkKK3sKKwlsb2NhbCAtYSBsaXN0CisJbGlzdD0oCisJYWRkOidhZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgnCisJYmlzZWN0OidmaW5kIGJ5IGJpbmFyeSBzZWFyY2ggdGhlIGNoYW5nZSB0aGF0IGludHJvZHVjZWQgYSBidWcnCisJYnJhbmNoOidsaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcycKKwljaGVja291dDonY2hlY2tvdXQgYSBicmFuY2ggb3IgcGF0aHMgdG8gdGhlIHdvcmtpbmcgdHJlZScKKwljbG9uZTonY2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5JworCWNvbW1pdDoncmVjb3JkIGNoYW5nZXMgdG8gdGhlIHJlcG9zaXRvcnknCisJZGlmZjonc2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YycKKwlmZXRjaDonZG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeScKKwlncmVwOidwcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4nCisJaW5pdDonY3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUnCisJbG9nOidzaG93IGNvbW1pdCBsb2dzJworCW1lcmdlOidqb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlcicKKwltdjonbW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rJworCXB1bGw6J2ZldGNoIGZyb20gYW5kIG1lcmdlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoJworCXB1c2g6J3VwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cycKKwlyZWJhc2U6J2ZvcndhcmQtcG9ydCBsb2NhbCBjb21taXRzIHRvIHRoZSB1cGRhdGVkIHVwc3RyZWFtIGhlYWQnCisJcmVzZXQ6J3Jlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlJworCXJlc3RvcmU6J3Jlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzJworCXJtOidyZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCcKKwlzaG93OidzaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cycKKwlzdGF0dXM6J3Nob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMnCisJc3dpdGNoOidzd2l0Y2ggYnJhbmNoZXMnCisJdGFnOidjcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRycpCisJX2Rlc2NyaWJlIC10IGNvbW1vbi1jb21tYW5kcyAnY29tbW9uIGNvbW1hbmRzJyBsaXN0ICYmIF9yZXQ9MAorfQorCitfX2dpdF96c2hfY21kX2FsaWFzICgpCit7CisJbG9jYWwgLWEgbGlzdAorCWxpc3Q9KCR7JHskeygwKSIkKGdpdCBjb25maWcgLXogLS1nZXQtcmVnZXhwICdeYWxpYXNcLicpIn0jYWxpYXMufSUkJ1xuJyp9KQorCV9kZXNjcmliZSAtdCBhbGlhcy1jb21tYW5kcyAnYWxpYXNlcycgbGlzdCAkKiAmJiBfcmV0PTAKK30KKworX19naXRfenNoX2NtZF9hbGwgKCkKK3sKKwlsb2NhbCAtYSBsaXN0CisJZW11bGF0ZSBrc2ggLWMgX19naXRfY29tcHV0ZV9hbGxfY29tbWFuZHMKKwlsaXN0PSggJHs9X19naXRfYWxsX2NvbW1hbmRzfSApCisJX2Rlc2NyaWJlIC10IGFsbC1jb21tYW5kcyAnYWxsIGNvbW1hbmRzJyBsaXN0ICYmIF9yZXQ9MAorfQorCitfX2dpdF96c2hfbWFpbiAoKQoreworCWxvY2FsIGN1cmNvbnRleHQ9IiRjdXJjb250ZXh0IiBzdGF0ZSBzdGF0ZV9kZXNjciBsaW5lCisJdHlwZXNldCAtQSBvcHRfYXJncworCWxvY2FsIC1hIG9yaWdfd29yZHMKKworCW9yaWdfd29yZHM9KCAke3dvcmRzW0BdfSApCisKKwlfYXJndW1lbnRzIC1DIFwKKwkJJygtcCAtLXBhZ2luYXRlIC0tbm8tcGFnZXIpJ3stcCwtLXBhZ2luYXRlfSdbcGlwZSBhbGwgb3V0cHV0IGludG8gJydsZXNzJyddJyBcCisJCScoLXAgLS1wYWdpbmF0ZSktLW5vLXBhZ2VyW2RvIG5vdCBwaXBlIGdpdCBvdXRwdXQgaW50byBhIHBhZ2VyXScgXAorCQknLS1naXQtZGlyPS1bc2V0IHRoZSBwYXRoIHRvIHRoZSByZXBvc2l0b3J5XTogOl9kaXJlY3RvcmllcycgXAorCQknLS1iYXJlW3RyZWF0IHRoZSByZXBvc2l0b3J5IGFzIGEgYmFyZSByZXBvc2l0b3J5XScgXAorCQknKC0gOiktLXZlcnNpb25bcHJpbnRzIHRoZSBnaXQgc3VpdGUgdmVyc2lvbl0nIFwKKwkJJy0tZXhlYy1wYXRoPS1bcGF0aCB0byB3aGVyZSB5b3VyIGNvcmUgZ2l0IHByb2dyYW1zIGFyZSBpbnN0YWxsZWRdOjogOl9kaXJlY3RvcmllcycgXAorCQknLS1odG1sLXBhdGhbcHJpbnQgdGhlIHBhdGggd2hlcmUgZ2l0JydzIEhUTUwgZG9jdW1lbnRhdGlvbiBpcyBpbnN0YWxsZWRdJyBcCisJCSctLWluZm8tcGF0aFtwcmludCB0aGUgcGF0aCB3aGVyZSB0aGUgSW5mbyBmaWxlcyBhcmUgaW5zdGFsbGVkXScgXAorCQknLS1tYW4tcGF0aFtwcmludCB0aGUgbWFucGF0aCAoc2VlIGBtYW4oMSlgKSBmb3IgdGhlIG1hbiBwYWdlc10nIFwKKwkJJy0td29yay10cmVlPS1bc2V0IHRoZSBwYXRoIHRvIHRoZSB3b3JraW5nIHRyZWVdOiA6X2RpcmVjdG9yaWVzJyBcCisJCSctLW5hbWVzcGFjZT0tW3NldCB0aGUgZ2l0IG5hbWVzcGFjZV0nIFwKKwkJJy0tbm8tcmVwbGFjZS1vYmplY3RzW2RvIG5vdCB1c2UgcmVwbGFjZW1lbnQgcmVmcyB0byByZXBsYWNlIGdpdCBvYmplY3RzXScgXAorCQknKC0gOiktLWhlbHBbcHJpbnRzIHRoZSBzeW5vcHNpcyBhbmQgYSBsaXN0IG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgY29tbWFuZHNdOiA6LT5hcmcnIFwKKwkJJygtKTogOi0+Y29tbWFuZCcgXAorCQknKC0pKjo6IDotPmFyZycgJiYgcmV0dXJuCisKKwljYXNlICRzdGF0ZSBpbgorCShjb21tYW5kKQorCQlfYWx0ZXJuYXRpdmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICdhbGlhcy1jb21tYW5kczphbGlhczpfX2dpdF96c2hfY21kX2FsaWFzJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1vbi1jb21tYW5kczpjb21tb246X19naXRfenNoX2NtZF9jb21tb24nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYWxsLWNvbW1hbmRzOmFsbDpfX2dpdF96c2hfY21kX2FsbCcgJiYgX3JldD0wCisJCTs7CisJKGFyZykKKwkJbG9jYWwgY29tbWFuZD0iJHt3b3Jkc1sxXX0iIF9fZ2l0X2RpcgorCisJCWlmICgoICQrb3B0X2FyZ3NbLS1iYXJlXSApKTsgdGhlbgorCQkJX19naXRfZGlyPScuJworCQllbHNlCisJCQlfX2dpdF9kaXI9JHtvcHRfYXJnc1stLWdpdC1kaXJdfQorCQlmaQorCisJCSgoICQrb3B0X2FyZ3NbLS1oZWxwXSApKSAmJiBjb21tYW5kPSdoZWxwJworCisJCXdvcmRzPSggJHtvcmlnX3dvcmRzW0BdfSApCisKKwkJX19naXRfenNoX2Jhc2hfZnVuYyAkY29tbWFuZAorCQk7OworCWVzYWMKK30KKworX2dpdCAoKQoreworCWxvY2FsIF9yZXQ9MQorCWxvY2FsIGN1ciBjd29yZCBwcmV2CisKKwljdXI9JHt3b3Jkc1tDVVJSRU5UXX0KKwlwcmV2PSR7d29yZHNbQ1VSUkVOVC0xXX0KKwlsZXQgY3dvcmQ9Q1VSUkVOVC0xCisKKwlpZiAoKCAkK2Z1bmN0aW9uc1tfXyR7c2VydmljZX1fenNoX21haW5dICkpOyB0aGVuCisJCV9fJHtzZXJ2aWNlfV96c2hfbWFpbgorCWVsc2UKKwkJZW11bGF0ZSBrc2ggLWMgX18ke3NlcnZpY2V9X21haW4KKwlmaQorCisJbGV0IF9yZXQgJiYgX2RlZmF1bHQgJiYgX3JldD0wCisJcmV0dXJuIF9yZXQKK30KKworX2dpdApkaWZmIC0tZ2l0IGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1wcm9tcHQuc2ggYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LXByb21wdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTRjZDdjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1wcm9tcHQuc2gKQEAgLTAsMCArMSw1NjAgQEAKKyMgYmFzaC96c2ggZ2l0IHByb21wdCBzdXBwb3J0CisjCisjIENvcHlyaWdodCAoQykgMjAwNiwyMDA3IFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuMC4KKyMKKyMgVGhpcyBzY3JpcHQgYWxsb3dzIHlvdSB0byBzZWUgcmVwb3NpdG9yeSBzdGF0dXMgaW4geW91ciBwcm9tcHQuCisjCisjIFRvIGVuYWJsZToKKyMKKyMgICAgMSkgQ29weSB0aGlzIGZpbGUgdG8gc29tZXdoZXJlIChlLmcuIH4vLmdpdC1wcm9tcHQuc2gpLgorIyAgICAyKSBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgLmJhc2hyYy8uenNocmM6CisjICAgICAgICBzb3VyY2Ugfi8uZ2l0LXByb21wdC5zaAorIyAgICAzYSkgQ2hhbmdlIHlvdXIgUFMxIHRvIGNhbGwgX19naXRfcHMxIGFzCisjICAgICAgICBjb21tYW5kLXN1YnN0aXR1dGlvbjoKKyMgICAgICAgIEJhc2g6IFBTMT0nW1x1QFxoIFxXJChfX2dpdF9wczEgIiAoJXMpIildXCQgJworIyAgICAgICAgWlNIOiAgc2V0b3B0IFBST01QVF9TVUJTVCA7IFBTMT0nWyVuQCVtICVjJChfX2dpdF9wczEgIiAoJXMpIildXCQgJworIyAgICAgICAgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IHdpbGwgYmUgdXNlZCBhcyBmb3JtYXQgc3RyaW5nLgorIyAgICAzYikgQWx0ZXJuYXRpdmVseSwgZm9yIGEgc2xpZ2h0bHkgZmFzdGVyIHByb21wdCwgX19naXRfcHMxIGNhbgorIyAgICAgICAgYmUgdXNlZCBmb3IgUFJPTVBUX0NPTU1BTkQgaW4gQmFzaCBvciBmb3IgcHJlY21kKCkgaW4gWnNoCisjICAgICAgICB3aXRoIHR3byBwYXJhbWV0ZXJzLCA8cHJlPiBhbmQgPHBvc3Q+LCB3aGljaCBhcmUgc3RyaW5ncworIyAgICAgICAgeW91IHdvdWxkIHB1dCBpbiAkUFMxIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHN0YXR1cyBzdHJpbmcKKyMgICAgICAgIGdlbmVyYXRlZCBieSB0aGUgZ2l0LXByb21wdCBtYWNoaW5lcnkuICBlLmcuCisjICAgICAgICBCYXNoOiBQUk9NUFRfQ09NTUFORD0nX19naXRfcHMxICJcdUBcaDpcdyIgIlxcXCQgIicKKyMgICAgICAgICAgd2lsbCBzaG93IHVzZXJuYW1lLCBhdC1zaWduLCBob3N0LCBjb2xvbiwgY3dkLCB0aGVuCisjICAgICAgICAgIHZhcmlvdXMgc3RhdHVzIHN0cmluZywgZm9sbG93ZWQgYnkgZG9sbGFyIGFuZCBTUCwgYXMKKyMgICAgICAgICAgeW91ciBwcm9tcHQuCisjICAgICAgICBaU0g6ICBwcmVjbWQgKCkgeyBfX2dpdF9wczEgIiVuIiAiOiV+JCAiICJ8JXMiIH0KKyMgICAgICAgICAgd2lsbCBzaG93IHVzZXJuYW1lLCBwaXBlLCB0aGVuIHZhcmlvdXMgc3RhdHVzIHN0cmluZywKKyMgICAgICAgICAgZm9sbG93ZWQgYnkgY29sb24sIGN3ZCwgZG9sbGFyIGFuZCBTUCwgYXMgeW91ciBwcm9tcHQuCisjICAgICAgICBPcHRpb25hbGx5LCB5b3UgY2FuIHN1cHBseSBhIHRoaXJkIGFyZ3VtZW50IHdpdGggYSBwcmludGYKKyMgICAgICAgIGZvcm1hdCBzdHJpbmcgdG8gZmluZXR1bmUgdGhlIG91dHB1dCBvZiB0aGUgYnJhbmNoIHN0YXR1cworIworIyBUaGUgcmVwb3NpdG9yeSBzdGF0dXMgd2lsbCBiZSBkaXNwbGF5ZWQgb25seSBpZiB5b3UgYXJlIGN1cnJlbnRseSBpbiBhCisjIGdpdCByZXBvc2l0b3J5LiBUaGUgJXMgdG9rZW4gaXMgdGhlIHBsYWNlaG9sZGVyIGZvciB0aGUgc2hvd24gc3RhdHVzLgorIworIyBUaGUgcHJvbXB0IHN0YXR1cyBhbHdheXMgaW5jbHVkZXMgdGhlIGN1cnJlbnQgYnJhbmNoIG5hbWUuCisjCisjIEluIGFkZGl0aW9uLCBpZiB5b3Ugc2V0IEdJVF9QUzFfU0hPV0RJUlRZU1RBVEUgdG8gYSBub25lbXB0eSB2YWx1ZSwKKyMgdW5zdGFnZWQgKCopIGFuZCBzdGFnZWQgKCspIGNoYW5nZXMgd2lsbCBiZSBzaG93biBuZXh0IHRvIHRoZSBicmFuY2gKKyMgbmFtZS4gIFlvdSBjYW4gY29uZmlndXJlIHRoaXMgcGVyLXJlcG9zaXRvcnkgd2l0aCB0aGUKKyMgYmFzaC5zaG93RGlydHlTdGF0ZSB2YXJpYWJsZSwgd2hpY2ggZGVmYXVsdHMgdG8gdHJ1ZSBvbmNlCisjIEdJVF9QUzFfU0hPV0RJUlRZU1RBVEUgaXMgZW5hYmxlZC4KKyMKKyMgWW91IGNhbiBhbHNvIHNlZSBpZiBjdXJyZW50bHkgc29tZXRoaW5nIGlzIHN0YXNoZWQsIGJ5IHNldHRpbmcKKyMgR0lUX1BTMV9TSE9XU1RBU0hTVEFURSB0byBhIG5vbmVtcHR5IHZhbHVlLiBJZiBzb21ldGhpbmcgaXMgc3Rhc2hlZCwKKyMgdGhlbiBhICckJyB3aWxsIGJlIHNob3duIG5leHQgdG8gdGhlIGJyYW5jaCBuYW1lLgorIworIyBJZiB5b3Ugd291bGQgbGlrZSB0byBzZWUgaWYgdGhlcmUncmUgdW50cmFja2VkIGZpbGVzLCB0aGVuIHlvdSBjYW4gc2V0CisjIEdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTIHRvIGEgbm9uZW1wdHkgdmFsdWUuIElmIHRoZXJlJ3JlIHVudHJhY2tlZAorIyBmaWxlcywgdGhlbiBhICclJyB3aWxsIGJlIHNob3duIG5leHQgdG8gdGhlIGJyYW5jaCBuYW1lLiAgWW91IGNhbgorIyBjb25maWd1cmUgdGhpcyBwZXItcmVwb3NpdG9yeSB3aXRoIHRoZSBiYXNoLnNob3dVbnRyYWNrZWRGaWxlcworIyB2YXJpYWJsZSwgd2hpY2ggZGVmYXVsdHMgdG8gdHJ1ZSBvbmNlIEdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTIGlzCisjIGVuYWJsZWQuCisjCisjIElmIHlvdSB3b3VsZCBsaWtlIHRvIHNlZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEhFQUQgYW5kIGl0cyB1cHN0cmVhbSwKKyMgc2V0IEdJVF9QUzFfU0hPV1VQU1RSRUFNPSJhdXRvIi4gIEEgIjwiIGluZGljYXRlcyB5b3UgYXJlIGJlaGluZCwgIj4iCisjIGluZGljYXRlcyB5b3UgYXJlIGFoZWFkLCAiPD4iIGluZGljYXRlcyB5b3UgaGF2ZSBkaXZlcmdlZCBhbmQgIj0iCisjIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UuIFlvdSBjYW4gZnVydGhlciBjb250cm9sCisjIGJlaGF2aW91ciBieSBzZXR0aW5nIEdJVF9QUzFfU0hPV1VQU1RSRUFNIHRvIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3QKKyMgb2YgdmFsdWVzOgorIworIyAgICAgdmVyYm9zZSAgICAgICBzaG93IG51bWJlciBvZiBjb21taXRzIGFoZWFkL2JlaGluZCAoKy8tKSB1cHN0cmVhbQorIyAgICAgbmFtZSAgICAgICAgICBpZiB2ZXJib3NlLCB0aGVuIGFsc28gc2hvdyB0aGUgdXBzdHJlYW0gYWJicmV2IG5hbWUKKyMgICAgIGxlZ2FjeSAgICAgICAgZG9uJ3QgdXNlIHRoZSAnLS1jb3VudCcgb3B0aW9uIGF2YWlsYWJsZSBpbiByZWNlbnQKKyMgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMgb2YgZ2l0LXJldi1saXN0CisjICAgICBnaXQgICAgICAgICAgIGFsd2F5cyBjb21wYXJlIEhFQUQgdG8gQHt1cHN0cmVhbX0KKyMgICAgIHN2biAgICAgICAgICAgYWx3YXlzIGNvbXBhcmUgSEVBRCB0byB5b3VyIFNWTiB1cHN0cmVhbQorIworIyBZb3UgY2FuIGNoYW5nZSB0aGUgc2VwYXJhdG9yIGJldHdlZW4gdGhlIGJyYW5jaCBuYW1lIGFuZCB0aGUgYWJvdmUKKyMgc3RhdGUgc3ltYm9scyBieSBzZXR0aW5nIEdJVF9QUzFfU1RBVEVTRVBBUkFUT1IuIFRoZSBkZWZhdWx0IHNlcGFyYXRvcgorIyBpcyBTUC4KKyMKKyMgQnkgZGVmYXVsdCwgX19naXRfcHMxIHdpbGwgY29tcGFyZSBIRUFEIHRvIHlvdXIgU1ZOIHVwc3RyZWFtIGlmIGl0IGNhbgorIyBmaW5kIG9uZSwgb3IgQHt1cHN0cmVhbX0gb3RoZXJ3aXNlLiAgT25jZSB5b3UgaGF2ZSBzZXQKKyMgR0lUX1BTMV9TSE9XVVBTVFJFQU0sIHlvdSBjYW4gb3ZlcnJpZGUgaXQgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcyBieQorIyBzZXR0aW5nIHRoZSBiYXNoLnNob3dVcHN0cmVhbSBjb25maWcgdmFyaWFibGUuCisjCisjIElmIHlvdSB3b3VsZCBsaWtlIHRvIHNlZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpZGVudGl0eSBvZgorIyBjb21taXRzIGNoZWNrZWQgb3V0IGFzIGEgZGV0YWNoZWQgSEVBRCwgc2V0IEdJVF9QUzFfREVTQ1JJQkVfU1RZTEUKKyMgdG8gb25lIG9mIHRoZXNlIHZhbHVlczoKKyMKKyMgICAgIGNvbnRhaW5zICAgICAgcmVsYXRpdmUgdG8gbmV3ZXIgYW5ub3RhdGVkIHRhZyAodjEuNi4zLjJ+MzUpCisjICAgICBicmFuY2ggICAgICAgIHJlbGF0aXZlIHRvIG5ld2VyIHRhZyBvciBicmFuY2ggKG1hc3Rlcn40KQorIyAgICAgZGVzY3JpYmUgICAgICByZWxhdGl2ZSB0byBvbGRlciBhbm5vdGF0ZWQgdGFnICh2MS42LjMuMS0xMy1nZGQ0MmMyZikKKyMgICAgIHRhZyAgICAgICAgICAgcmVsYXRpdmUgdG8gYW55IG9sZGVyIHRhZyAodjEuNi4zLjEtMTMtZ2RkNDJjMmYpCisjICAgICBkZWZhdWx0ICAgICAgIGV4YWN0bHkgbWF0Y2hpbmcgdGFnCisjCisjIElmIHlvdSB3b3VsZCBsaWtlIGEgY29sb3JlZCBoaW50IGFib3V0IHRoZSBjdXJyZW50IGRpcnR5IHN0YXRlLCBzZXQKKyMgR0lUX1BTMV9TSE9XQ09MT1JISU5UUyB0byBhIG5vbmVtcHR5IHZhbHVlLiBUaGUgY29sb3JzIGFyZSBiYXNlZCBvbgorIyB0aGUgY29sb3JlZCBvdXRwdXQgb2YgImdpdCBzdGF0dXMgLXNiIiBhbmQgYXJlIGF2YWlsYWJsZSBvbmx5IHdoZW4KKyMgdXNpbmcgX19naXRfcHMxIGZvciBQUk9NUFRfQ09NTUFORCBvciBwcmVjbWQuCisjCisjIElmIHlvdSB3b3VsZCBsaWtlIF9fZ2l0X3BzMSB0byBkbyBub3RoaW5nIGluIHRoZSBjYXNlIHdoZW4gdGhlIGN1cnJlbnQKKyMgZGlyZWN0b3J5IGlzIHNldCB1cCB0byBiZSBpZ25vcmVkIGJ5IGdpdCwgdGhlbiBzZXQKKyMgR0lUX1BTMV9ISURFX0lGX1BXRF9JR05PUkVEIHRvIGEgbm9uZW1wdHkgdmFsdWUuIE92ZXJyaWRlIHRoaXMgb24gdGhlCisjIHJlcG9zaXRvcnkgbGV2ZWwgYnkgc2V0dGluZyBiYXNoLmhpZGVJZlB3ZElnbm9yZWQgdG8gImZhbHNlIi4KKworIyBjaGVjayB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyAtdgorX19naXRfcHJpbnRmX3N1cHBvcnRzX3Y9CitwcmludGYgLXYgX19naXRfcHJpbnRmX3N1cHBvcnRzX3YgLS0gJyVzJyB5ZXMgPi9kZXYvbnVsbCAyPiYxCisKKyMgc3RvcmVzIHRoZSBkaXZlcmdlbmNlIGZyb20gdXBzdHJlYW0gaW4gJHAKKyMgdXNlZCBieSBHSVRfUFMxX1NIT1dVUFNUUkVBTQorX19naXRfcHMxX3Nob3dfdXBzdHJlYW0gKCkKK3sKKwlsb2NhbCBrZXkgdmFsdWUKKwlsb2NhbCBzdm5fcmVtb3RlIHN2bl91cmxfcGF0dGVybiBjb3VudCBuCisJbG9jYWwgdXBzdHJlYW09Z2l0IGxlZ2FjeT0iIiB2ZXJib3NlPSIiIG5hbWU9IiIKKworCXN2bl9yZW1vdGU9KCkKKwkjIGdldCBzb21lIGNvbmZpZyBvcHRpb25zIGZyb20gZ2l0LWNvbmZpZworCWxvY2FsIG91dHB1dD0iJChnaXQgY29uZmlnIC16IC0tZ2V0LXJlZ2V4cCAnXihzdm4tcmVtb3RlXC4uKlwudXJsfGJhc2hcLnNob3d1cHN0cmVhbSkkJyAyPi9kZXYvbnVsbCB8IHRyICdcMFxuJyAnXG4gJykiCisJd2hpbGUgcmVhZCAtciBrZXkgdmFsdWU7IGRvCisJCWNhc2UgIiRrZXkiIGluCisJCWJhc2guc2hvd3Vwc3RyZWFtKQorCQkJR0lUX1BTMV9TSE9XVVBTVFJFQU09IiR2YWx1ZSIKKwkJCWlmIFtbIC16ICIke0dJVF9QUzFfU0hPV1VQU1RSRUFNfSIgXV07IHRoZW4KKwkJCQlwPSIiCisJCQkJcmV0dXJuCisJCQlmaQorCQkJOzsKKwkJc3ZuLXJlbW90ZS4qLnVybCkKKwkJCXN2bl9yZW1vdGVbJCgoJHsjc3ZuX3JlbW90ZVtAXX0gKyAxKSldPSIkdmFsdWUiCisJCQlzdm5fdXJsX3BhdHRlcm49IiRzdm5fdXJsX3BhdHRlcm5cXHwkdmFsdWUiCisJCQl1cHN0cmVhbT1zdm4rZ2l0ICMgZGVmYXVsdCB1cHN0cmVhbSBpcyBTVk4gaWYgYXZhaWxhYmxlLCBlbHNlIGdpdAorCQkJOzsKKwkJZXNhYworCWRvbmUgPDw8ICIkb3V0cHV0IgorCisJIyBwYXJzZSBjb25maWd1cmF0aW9uIHZhbHVlcworCWZvciBvcHRpb24gaW4gJHtHSVRfUFMxX1NIT1dVUFNUUkVBTX07IGRvCisJCWNhc2UgIiRvcHRpb24iIGluCisJCWdpdHxzdm4pIHVwc3RyZWFtPSIkb3B0aW9uIiA7OworCQl2ZXJib3NlKSB2ZXJib3NlPTEgOzsKKwkJbGVnYWN5KSAgbGVnYWN5PTEgIDs7CisJCW5hbWUpICAgIG5hbWU9MSA7OworCQllc2FjCisJZG9uZQorCisJIyBGaW5kIG91ciB1cHN0cmVhbQorCWNhc2UgIiR1cHN0cmVhbSIgaW4KKwlnaXQpICAgIHVwc3RyZWFtPSJAe3Vwc3RyZWFtfSIgOzsKKwlzdm4qKQorCQkjIGdldCB0aGUgdXBzdHJlYW0gZnJvbSB0aGUgImdpdC1zdm4taWQ6IC4uLiIgaW4gYSBjb21taXQgbWVzc2FnZQorCQkjIChnaXQtc3ZuIHVzZXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgcHJvY2VkdXJlIGludGVybmFsbHkpCisJCWxvY2FsIC1hIHN2bl91cHN0cmVhbQorCQlzdm5fdXBzdHJlYW09KCQoZ2l0IGxvZyAtLWZpcnN0LXBhcmVudCAtMSBcCisJCQkJCS0tZ3JlcD0iXmdpdC1zdm4taWQ6IFwoJHtzdm5fdXJsX3BhdHRlcm4jPz99XCkiIDI+L2Rldi9udWxsKSkKKwkJaWYgW1sgMCAtbmUgJHsjc3ZuX3Vwc3RyZWFtW0BdfSBdXTsgdGhlbgorCQkJc3ZuX3Vwc3RyZWFtPSR7c3ZuX3Vwc3RyZWFtWyR7I3N2bl91cHN0cmVhbVtAXX0gLSAyXX0KKwkJCXN2bl91cHN0cmVhbT0ke3N2bl91cHN0cmVhbSVAKn0KKwkJCWxvY2FsIG5fc3RvcD0iJHsjc3ZuX3JlbW90ZVtAXX0iCisJCQlmb3IgKChuPTE7IG4gPD0gbl9zdG9wOyBuKyspKTsgZG8KKwkJCQlzdm5fdXBzdHJlYW09JHtzdm5fdXBzdHJlYW0jJHtzdm5fcmVtb3RlWyRuXX19CisJCQlkb25lCisKKwkJCWlmIFtbIC16ICIkc3ZuX3Vwc3RyZWFtIiBdXTsgdGhlbgorCQkJCSMgZGVmYXVsdCBicmFuY2ggbmFtZSBmb3IgY2hlY2tvdXRzIHdpdGggbm8gbGF5b3V0OgorCQkJCXVwc3RyZWFtPSR7R0lUX1NWTl9JRDotZ2l0LXN2bn0KKwkJCWVsc2UKKwkJCQl1cHN0cmVhbT0ke3N2bl91cHN0cmVhbSMvfQorCQkJZmkKKwkJZWxpZiBbWyAic3ZuK2dpdCIgPSAiJHVwc3RyZWFtIiBdXTsgdGhlbgorCQkJdXBzdHJlYW09IkB7dXBzdHJlYW19IgorCQlmaQorCQk7OworCWVzYWMKKworCSMgRmluZCBob3cgbWFueSBjb21taXRzIHdlIGFyZSBhaGVhZC9iZWhpbmQgb3VyIHVwc3RyZWFtCisJaWYgW1sgLXogIiRsZWdhY3kiIF1dOyB0aGVuCisJCWNvdW50PSIkKGdpdCByZXYtbGlzdCAtLWNvdW50IC0tbGVmdC1yaWdodCBcCisJCQkJIiR1cHN0cmVhbSIuLi5IRUFEIDI+L2Rldi9udWxsKSIKKwllbHNlCisJCSMgcHJvZHVjZSBlcXVpdmFsZW50IG91dHB1dCB0byAtLWNvdW50IGZvciBvbGRlciB2ZXJzaW9ucyBvZiBnaXQKKwkJbG9jYWwgY29tbWl0cworCQlpZiBjb21taXRzPSIkKGdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgIiR1cHN0cmVhbSIuLi5IRUFEIDI+L2Rldi9udWxsKSIKKwkJdGhlbgorCQkJbG9jYWwgY29tbWl0IGJlaGluZD0wIGFoZWFkPTAKKwkJCWZvciBjb21taXQgaW4gJGNvbW1pdHMKKwkJCWRvCisJCQkJY2FzZSAiJGNvbW1pdCIgaW4KKwkJCQkiPCIqKSAoKGJlaGluZCsrKSkgOzsKKwkJCQkqKSAgICAoKGFoZWFkKyspKSAgOzsKKwkJCQllc2FjCisJCQlkb25lCisJCQljb3VudD0iJGJlaGluZAkkYWhlYWQiCisJCWVsc2UKKwkJCWNvdW50PSIiCisJCWZpCisJZmkKKworCSMgY2FsY3VsYXRlIHRoZSByZXN1bHQKKwlpZiBbWyAteiAiJHZlcmJvc2UiIF1dOyB0aGVuCisJCWNhc2UgIiRjb3VudCIgaW4KKwkJIiIpICMgbm8gdXBzdHJlYW0KKwkJCXA9IiIgOzsKKwkJIjAJMCIpICMgZXF1YWwgdG8gdXBzdHJlYW0KKwkJCXA9Ij0iIDs7CisJCSIwCSIqKSAjIGFoZWFkIG9mIHVwc3RyZWFtCisJCQlwPSI+IiA7OworCQkqIgkwIikgIyBiZWhpbmQgdXBzdHJlYW0KKwkJCXA9IjwiIDs7CisJCSopCSAgICAjIGRpdmVyZ2VkIGZyb20gdXBzdHJlYW0KKwkJCXA9Ijw+IiA7OworCQllc2FjCisJZWxzZQorCQljYXNlICIkY291bnQiIGluCisJCSIiKSAjIG5vIHVwc3RyZWFtCisJCQlwPSIiIDs7CisJCSIwCTAiKSAjIGVxdWFsIHRvIHVwc3RyZWFtCisJCQlwPSIgdT0iIDs7CisJCSIwCSIqKSAjIGFoZWFkIG9mIHVwc3RyZWFtCisJCQlwPSIgdSske2NvdW50IzAJfSIgOzsKKwkJKiIJMCIpICMgYmVoaW5kIHVwc3RyZWFtCisJCQlwPSIgdS0ke2NvdW50JQkwfSIgOzsKKwkJKikJICAgICMgZGl2ZXJnZWQgZnJvbSB1cHN0cmVhbQorCQkJcD0iIHUrJHtjb3VudCMqCX0tJHtjb3VudCUJKn0iIDs7CisJCWVzYWMKKwkJaWYgW1sgLW4gIiRjb3VudCIgJiYgLW4gIiRuYW1lIiBdXTsgdGhlbgorCQkJX19naXRfcHMxX3Vwc3RyZWFtX25hbWU9JChnaXQgcmV2LXBhcnNlIFwKKwkJCQktLWFiYnJldi1yZWYgIiR1cHN0cmVhbSIgMj4vZGV2L251bGwpCisJCQlpZiBbICRwY21vZGUgPSB5ZXMgXSAmJiBbICRwczFfZXhwYW5kZWQgPSB5ZXMgXTsgdGhlbgorCQkJCXA9IiRwIFwke19fZ2l0X3BzMV91cHN0cmVhbV9uYW1lfSIKKwkJCWVsc2UKKwkJCQlwPSIkcCAke19fZ2l0X3BzMV91cHN0cmVhbV9uYW1lfSIKKwkJCQkjIG5vdCBuZWVkZWQgYW55bW9yZTsga2VlcCB1c2VyJ3MKKwkJCQkjIGVudmlyb25tZW50IGNsZWFuCisJCQkJdW5zZXQgX19naXRfcHMxX3Vwc3RyZWFtX25hbWUKKwkJCWZpCisJCWZpCisJZmkKKworfQorCisjIEhlbHBlciBmdW5jdGlvbiB0aGF0IGlzIG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIF9fZ2l0X3BzMS4gIEl0CisjIGluamVjdHMgY29sb3IgY29kZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgZ2l0c3RyaW5nIHZhcmlhYmxlcyB1c2VkCisjIHRvIGJ1aWxkIGEgZ2l0c3RyaW5nLgorX19naXRfcHMxX2NvbG9yaXplX2dpdHN0cmluZyAoKQoreworCWlmIFtbIC1uICR7WlNIX1ZFUlNJT04tfSBdXTsgdGhlbgorCQlsb2NhbCBjX3JlZD0nJUZ7cmVkfScKKwkJbG9jYWwgY19ncmVlbj0nJUZ7Z3JlZW59JworCQlsb2NhbCBjX2xibHVlPSclRntibHVlfScKKwkJbG9jYWwgY19jbGVhcj0nJWYnCisJZWxzZQorCQkjIFVzaW5nIFxbIGFuZCBcXSBhcm91bmQgY29sb3JzIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50CisJCSMgaXNzdWVzIHdpdGggY29tbWFuZCBsaW5lIGVkaXRpbmcvYnJvd3NpbmcvY29tcGxldGlvbiEKKwkJbG9jYWwgY19yZWQ9J1xbXGVbMzFtXF0nCisJCWxvY2FsIGNfZ3JlZW49J1xbXGVbMzJtXF0nCisJCWxvY2FsIGNfbGJsdWU9J1xbXGVbMTszNG1cXScKKwkJbG9jYWwgY19jbGVhcj0nXFtcZVswbVxdJworCWZpCisJbG9jYWwgYmFkX2NvbG9yPSRjX3JlZAorCWxvY2FsIG9rX2NvbG9yPSRjX2dyZWVuCisJbG9jYWwgZmxhZ3NfY29sb3I9IiRjX2xibHVlIgorCisJbG9jYWwgYnJhbmNoX2NvbG9yPSIiCisJaWYgWyAkZGV0YWNoZWQgPSBubyBdOyB0aGVuCisJCWJyYW5jaF9jb2xvcj0iJG9rX2NvbG9yIgorCWVsc2UKKwkJYnJhbmNoX2NvbG9yPSIkYmFkX2NvbG9yIgorCWZpCisJYz0iJGJyYW5jaF9jb2xvciRjIgorCisJej0iJGNfY2xlYXIkeiIKKwlpZiBbICIkdyIgPSAiKiIgXTsgdGhlbgorCQl3PSIkYmFkX2NvbG9yJHciCisJZmkKKwlpZiBbIC1uICIkaSIgXTsgdGhlbgorCQlpPSIkb2tfY29sb3IkaSIKKwlmaQorCWlmIFsgLW4gIiRzIiBdOyB0aGVuCisJCXM9IiRmbGFnc19jb2xvciRzIgorCWZpCisJaWYgWyAtbiAiJHUiIF07IHRoZW4KKwkJdT0iJGJhZF9jb2xvciR1IgorCWZpCisJcj0iJGNfY2xlYXIkciIKK30KKworIyBIZWxwZXIgZnVuY3Rpb24gdG8gcmVhZCB0aGUgZmlyc3QgbGluZSBvZiBhIGZpbGUgaW50byBhIHZhcmlhYmxlLgorIyBfX2dpdF9lcmVhZCByZXF1aXJlcyAyIGFyZ3VtZW50cywgdGhlIGZpbGUgcGF0aCBhbmQgdGhlIG5hbWUgb2YgdGhlCisjIHZhcmlhYmxlLCBpbiB0aGF0IG9yZGVyLgorX19naXRfZXJlYWQgKCkKK3sKKwl0ZXN0IC1yICIkMSIgJiYgSUZTPSQnXHJcbicgcmVhZCAiJDIiIDwiJDEiCit9CisKKyMgc2VlIGlmIGEgY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGlzIGluIHByb2dyZXNzLCBpZiB0aGUgdXNlciBoYXMgY29tbWl0dGVkIGEKKyMgY29uZmxpY3QgcmVzb2x1dGlvbiB3aXRoICdnaXQgY29tbWl0JyBpbiB0aGUgbWlkZGxlIG9mIGEgc2VxdWVuY2Ugb2YgcGlja3Mgb3IKKyMgcmV2ZXJ0cyB0aGVuIENIRVJSWV9QSUNLX0hFQUQvUkVWRVJUX0hFQUQgd2lsbCBub3QgZXhpc3Qgc28gd2UgaGF2ZSB0byByZWFkCisjIHRoZSB0b2RvIGZpbGUuCitfX2dpdF9zZXF1ZW5jZXJfc3RhdHVzICgpCit7CisJbG9jYWwgdG9kbworCWlmIHRlc3QgLWYgIiRnL0NIRVJSWV9QSUNLX0hFQUQiCisJdGhlbgorCQlyPSJ8Q0hFUlJZLVBJQ0tJTkciCisJCXJldHVybiAwOworCWVsaWYgdGVzdCAtZiAiJGcvUkVWRVJUX0hFQUQiCisJdGhlbgorCQlyPSJ8UkVWRVJUSU5HIgorCQlyZXR1cm4gMDsKKwllbGlmIF9fZ2l0X2VyZWFkICIkZy9zZXF1ZW5jZXIvdG9kbyIgdG9kbworCXRoZW4KKwkJY2FzZSAiJHRvZG8iIGluCisJCXBbXCBcCV18cGlja1tcIFwJXSopCisJCQlyPSJ8Q0hFUlJZLVBJQ0tJTkciCisJCQlyZXR1cm4gMAorCQk7OworCQlyZXZlcnRbXCBcCV0qKQorCQkJcj0ifFJFVkVSVElORyIKKwkJCXJldHVybiAwCisJCTs7CisJCWVzYWMKKwlmaQorCXJldHVybiAxCit9CisKKyMgX19naXRfcHMxIGFjY2VwdHMgMCBvciAxIGFyZ3VtZW50cyAoaS5lLiwgZm9ybWF0IHN0cmluZykKKyMgd2hlbiBjYWxsZWQgZnJvbSBQUzEgdXNpbmcgY29tbWFuZCBzdWJzdGl0dXRpb24KKyMgaW4gdGhpcyBtb2RlIGl0IHByaW50cyB0ZXh0IHRvIGFkZCB0byBiYXNoIFBTMSBwcm9tcHQgKGluY2x1ZGVzIGJyYW5jaCBuYW1lKQorIworIyBfX2dpdF9wczEgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyB3aGVuIGNhbGxlZCBmcm9tIFBST01QVF9DT01NQU5EIChwYykKKyMgaW4gdGhhdCBjYXNlIGl0IF9zZXRzXyBQUzEuIFRoZSBhcmd1bWVudHMgYXJlIHBhcnRzIG9mIGEgUFMxIHN0cmluZy4KKyMgd2hlbiB0d28gYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhlIGZpcnN0IGlzIHByZXBlbmRlZCBhbmQgdGhlIHNlY29uZCBhcHBlbmRlZAorIyB0byB0aGUgc3RhdGUgc3RyaW5nIHdoZW4gYXNzaWduZWQgdG8gUFMxLgorIyBUaGUgb3B0aW9uYWwgdGhpcmQgcGFyYW1ldGVyIHdpbGwgYmUgdXNlZCBhcyBwcmludGYgZm9ybWF0IHN0cmluZyB0byBmdXJ0aGVyCisjIGN1c3RvbWl6ZSB0aGUgb3V0cHV0IG9mIHRoZSBnaXQtc3RhdHVzIHN0cmluZy4KKyMgSW4gdGhpcyBtb2RlIHlvdSBjYW4gcmVxdWVzdCBjb2xvcmVkIGhpbnRzIHVzaW5nIEdJVF9QUzFfU0hPV0NPTE9SSElOVFM9dHJ1ZQorX19naXRfcHMxICgpCit7CisJIyBwcmVzZXJ2ZSBleGl0IHN0YXR1cworCWxvY2FsIGV4aXQ9JD8KKwlsb2NhbCBwY21vZGU9bm8KKwlsb2NhbCBkZXRhY2hlZD1ubworCWxvY2FsIHBzMXBjX3N0YXJ0PSdcdUBcaDpcdyAnCisJbG9jYWwgcHMxcGNfZW5kPSdcJCAnCisJbG9jYWwgcHJpbnRmX2Zvcm1hdD0nICglcyknCisKKwljYXNlICIkIyIgaW4KKwkJMnwzKQlwY21vZGU9eWVzCisJCQlwczFwY19zdGFydD0iJDEiCisJCQlwczFwY19lbmQ9IiQyIgorCQkJcHJpbnRmX2Zvcm1hdD0iJHszOi0kcHJpbnRmX2Zvcm1hdH0iCisJCQkjIHNldCBQUzEgdG8gYSBwbGFpbiBwcm9tcHQgc28gdGhhdCB3ZSBjYW4KKwkJCSMgc2ltcGx5IHJldHVybiBlYXJseSBpZiB0aGUgcHJvbXB0IHNob3VsZCBub3QKKwkJCSMgYmUgZGVjb3JhdGVkCisJCQlQUzE9IiRwczFwY19zdGFydCRwczFwY19lbmQiCisJCTs7CisJCTB8MSkJcHJpbnRmX2Zvcm1hdD0iJHsxOi0kcHJpbnRmX2Zvcm1hdH0iCisJCTs7CisJCSopCXJldHVybiAkZXhpdAorCQk7OworCWVzYWMKKworCSMgcHMxX2V4cGFuZGVkOiAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gJ3llcycgaWYgdGhlIHNoZWxsCisJIyBzdWJqZWN0cyB0aGUgdmFsdWUgb2YgUFMxIHRvIHBhcmFtZXRlciBleHBhbnNpb246CisJIworCSMgICAqIGJhc2ggZG9lcyB1bmxlc3MgdGhlIHByb21wdHZhcnMgb3B0aW9uIGlzIGRpc2FibGVkCisJIyAgICogenNoIGRvZXMgbm90IHVubGVzcyB0aGUgUFJPTVBUX1NVQlNUIG9wdGlvbiBpcyBzZXQKKwkjICAgKiBQT1NJWCBzaGVsbHMgYWx3YXlzIGRvCisJIworCSMgSWYgdGhlIHNoZWxsIHdvdWxkIGV4cGFuZCB0aGUgY29udGVudHMgb2YgUFMxIHdoZW4gZHJhd2luZworCSMgdGhlIHByb21wdCwgYSByYXcgcmVmIG5hbWUgbXVzdCBub3QgYmUgaW5jbHVkZWQgaW4gUFMxLgorCSMgVGhpcyBwcm90ZWN0cyB0aGUgdXNlciBmcm9tIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiB2aWEKKwkjIHNwZWNpYWxseSBjcmFmdGVkIHJlZiBuYW1lcy4gIEZvciBleGFtcGxlLCBhIHJlZiBuYW1lZAorCSMgJ3JlZnMvaGVhZHMvJChJRlM9XztjbWQ9c3Vkb19ybV8tcmZfLzskY21kKScgbWlnaHQgY2F1c2UgdGhlCisJIyBzaGVsbCB0byBleGVjdXRlICdzdWRvIHJtIC1yZiAvJyB3aGVuIHRoZSBwcm9tcHQgaXMgZHJhd24uCisJIworCSMgSW5zdGVhZCwgdGhlIHJlZiBuYW1lIHNob3VsZCBiZSBwbGFjZWQgaW4gYSBzZXBhcmF0ZSBnbG9iYWwKKwkjIHZhcmlhYmxlIChpbiB0aGUgX19naXRfcHMxXyogbmFtZXNwYWNlIHRvIGF2b2lkIGNvbGxpZGluZworCSMgd2l0aCB0aGUgdXNlcidzIGVudmlyb25tZW50KSBhbmQgdGhhdCB2YXJpYWJsZSBzaG91bGQgYmUKKwkjIHJlZmVyZW5jZWQgZnJvbSBQUzEuICBGb3IgZXhhbXBsZToKKwkjCisJIyAgICAgX19naXRfcHMxX2Zvbz0kKGRvX3NvbWV0aGluZ190b19nZXRfcmVmX25hbWUpCisJIyAgICAgUFMxPSIuLi5zdHVmZi4uLlwke19fZ2l0X3BzMV9mb299Li4uc3R1ZmYuLi4iCisJIworCSMgSWYgdGhlIHNoZWxsIGRvZXMgbm90IGV4cGFuZCB0aGUgY29udGVudHMgb2YgUFMxLCB0aGUgcmF3CisJIyByZWYgbmFtZSBtdXN0IGJlIGluY2x1ZGVkIGluIFBTMS4KKwkjCisJIyBUaGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyBvbmx5IHJlbGV2YW50IHdoZW4gaW4gcGNtb2RlLgorCSMKKwkjIEFzc3VtZSB0aGF0IHRoZSBzaGVsbCBmb2xsb3dzIHRoZSBQT1NJWCBzcGVjaWZpY2F0aW9uIGFuZAorCSMgZXhwYW5kcyBQUzEgdW5sZXNzIGRldGVybWluZWQgb3RoZXJ3aXNlLiAgKFRoaXMgaXMgbW9yZQorCSMgbGlrZWx5IHRvIGJlIGNvcnJlY3QgaWYgdGhlIHVzZXIgaGFzIGEgbm9uLWJhc2gsIG5vbi16c2gKKwkjIHNoZWxsIGFuZCBzYWZlciB0aGFuIHRoZSBhbHRlcm5hdGl2ZSBpZiB0aGUgYXNzdW1wdGlvbiBpcworCSMgaW5jb3JyZWN0LikKKwkjCisJbG9jYWwgcHMxX2V4cGFuZGVkPXllcworCVsgLXogIiR7WlNIX1ZFUlNJT04tfSIgXSB8fCBbWyAtbyBQUk9NUFRfU1VCU1QgXV0gfHwgcHMxX2V4cGFuZGVkPW5vCisJWyAteiAiJHtCQVNIX1ZFUlNJT04tfSIgXSB8fCBzaG9wdCAtcSBwcm9tcHR2YXJzIHx8IHBzMV9leHBhbmRlZD1ubworCisJbG9jYWwgcmVwb19pbmZvIHJldl9wYXJzZV9leGl0X2NvZGUKKwlyZXBvX2luZm89IiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIgLS1pcy1pbnNpZGUtZ2l0LWRpciBcCisJCS0taXMtYmFyZS1yZXBvc2l0b3J5IC0taXMtaW5zaWRlLXdvcmstdHJlZSBcCisJCS0tc2hvcnQgSEVBRCAyPi9kZXYvbnVsbCkiCisJcmV2X3BhcnNlX2V4aXRfY29kZT0iJD8iCisKKwlpZiBbIC16ICIkcmVwb19pbmZvIiBdOyB0aGVuCisJCXJldHVybiAkZXhpdAorCWZpCisKKwlsb2NhbCBzaG9ydF9zaGE9IiIKKwlpZiBbICIkcmV2X3BhcnNlX2V4aXRfY29kZSIgPSAiMCIgXTsgdGhlbgorCQlzaG9ydF9zaGE9IiR7cmVwb19pbmZvIyMqJCdcbid9IgorCQlyZXBvX2luZm89IiR7cmVwb19pbmZvJSQnXG4nKn0iCisJZmkKKwlsb2NhbCBpbnNpZGVfd29ya3RyZWU9IiR7cmVwb19pbmZvIyMqJCdcbid9IgorCXJlcG9faW5mbz0iJHtyZXBvX2luZm8lJCdcbicqfSIKKwlsb2NhbCBiYXJlX3JlcG89IiR7cmVwb19pbmZvIyMqJCdcbid9IgorCXJlcG9faW5mbz0iJHtyZXBvX2luZm8lJCdcbicqfSIKKwlsb2NhbCBpbnNpZGVfZ2l0ZGlyPSIke3JlcG9faW5mbyMjKiQnXG4nfSIKKwlsb2NhbCBnPSIke3JlcG9faW5mbyUkJ1xuJyp9IgorCisJaWYgWyAidHJ1ZSIgPSAiJGluc2lkZV93b3JrdHJlZSIgXSAmJgorCSAgIFsgLW4gIiR7R0lUX1BTMV9ISURFX0lGX1BXRF9JR05PUkVELX0iIF0gJiYKKwkgICBbICIkKGdpdCBjb25maWcgLS1ib29sIGJhc2guaGlkZUlmUHdkSWdub3JlZCkiICE9ICJmYWxzZSIgXSAmJgorCSAgIGdpdCBjaGVjay1pZ25vcmUgLXEgLgorCXRoZW4KKwkJcmV0dXJuICRleGl0CisJZmkKKworCWxvY2FsIHI9IiIKKwlsb2NhbCBiPSIiCisJbG9jYWwgc3RlcD0iIgorCWxvY2FsIHRvdGFsPSIiCisJaWYgWyAtZCAiJGcvcmViYXNlLW1lcmdlIiBdOyB0aGVuCisJCV9fZ2l0X2VyZWFkICIkZy9yZWJhc2UtbWVyZ2UvaGVhZC1uYW1lIiBiCisJCV9fZ2l0X2VyZWFkICIkZy9yZWJhc2UtbWVyZ2UvbXNnbnVtIiBzdGVwCisJCV9fZ2l0X2VyZWFkICIkZy9yZWJhc2UtbWVyZ2UvZW5kIiB0b3RhbAorCQlyPSJ8UkVCQVNFIgorCWVsc2UKKwkJaWYgWyAtZCAiJGcvcmViYXNlLWFwcGx5IiBdOyB0aGVuCisJCQlfX2dpdF9lcmVhZCAiJGcvcmViYXNlLWFwcGx5L25leHQiIHN0ZXAKKwkJCV9fZ2l0X2VyZWFkICIkZy9yZWJhc2UtYXBwbHkvbGFzdCIgdG90YWwKKwkJCWlmIFsgLWYgIiRnL3JlYmFzZS1hcHBseS9yZWJhc2luZyIgXTsgdGhlbgorCQkJCV9fZ2l0X2VyZWFkICIkZy9yZWJhc2UtYXBwbHkvaGVhZC1uYW1lIiBiCisJCQkJcj0ifFJFQkFTRSIKKwkJCWVsaWYgWyAtZiAiJGcvcmViYXNlLWFwcGx5L2FwcGx5aW5nIiBdOyB0aGVuCisJCQkJcj0ifEFNIgorCQkJZWxzZQorCQkJCXI9InxBTS9SRUJBU0UiCisJCQlmaQorCQllbGlmIFsgLWYgIiRnL01FUkdFX0hFQUQiIF07IHRoZW4KKwkJCXI9InxNRVJHSU5HIgorCQllbGlmIF9fZ2l0X3NlcXVlbmNlcl9zdGF0dXM7IHRoZW4KKwkJCToKKwkJZWxpZiBbIC1mICIkZy9CSVNFQ1RfTE9HIiBdOyB0aGVuCisJCQlyPSJ8QklTRUNUSU5HIgorCQlmaQorCisJCWlmIFsgLW4gIiRiIiBdOyB0aGVuCisJCQk6CisJCWVsaWYgWyAtaCAiJGcvSEVBRCIgXTsgdGhlbgorCQkJIyBzeW1saW5rIHN5bWJvbGljIHJlZgorCQkJYj0iJChnaXQgc3ltYm9saWMtcmVmIEhFQUQgMj4vZGV2L251bGwpIgorCQllbHNlCisJCQlsb2NhbCBoZWFkPSIiCisJCQlpZiAhIF9fZ2l0X2VyZWFkICIkZy9IRUFEIiBoZWFkOyB0aGVuCisJCQkJcmV0dXJuICRleGl0CisJCQlmaQorCQkJIyBpcyBpdCBhIHN5bWJvbGljIHJlZj8KKwkJCWI9IiR7aGVhZCNyZWY6IH0iCisJCQlpZiBbICIkaGVhZCIgPSAiJGIiIF07IHRoZW4KKwkJCQlkZXRhY2hlZD15ZXMKKwkJCQliPSIkKAorCQkJCWNhc2UgIiR7R0lUX1BTMV9ERVNDUklCRV9TVFlMRS19IiBpbgorCQkJCShjb250YWlucykKKwkJCQkJZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMgSEVBRCA7OworCQkJCShicmFuY2gpCisJCQkJCWdpdCBkZXNjcmliZSAtLWNvbnRhaW5zIC0tYWxsIEhFQUQgOzsKKwkJCQkodGFnKQorCQkJCQlnaXQgZGVzY3JpYmUgLS10YWdzIEhFQUQgOzsKKwkJCQkoZGVzY3JpYmUpCisJCQkJCWdpdCBkZXNjcmliZSBIRUFEIDs7CisJCQkJKCogfCBkZWZhdWx0KQorCQkJCQlnaXQgZGVzY3JpYmUgLS10YWdzIC0tZXhhY3QtbWF0Y2ggSEVBRCA7OworCQkJCWVzYWMgMj4vZGV2L251bGwpIiB8fAorCisJCQkJYj0iJHNob3J0X3NoYS4uLiIKKwkJCQliPSIoJGIpIgorCQkJZmkKKwkJZmkKKwlmaQorCisJaWYgWyAtbiAiJHN0ZXAiIF0gJiYgWyAtbiAiJHRvdGFsIiBdOyB0aGVuCisJCXI9IiRyICRzdGVwLyR0b3RhbCIKKwlmaQorCisJbG9jYWwgdz0iIgorCWxvY2FsIGk9IiIKKwlsb2NhbCBzPSIiCisJbG9jYWwgdT0iIgorCWxvY2FsIGM9IiIKKwlsb2NhbCBwPSIiCisKKwlpZiBbICJ0cnVlIiA9ICIkaW5zaWRlX2dpdGRpciIgXTsgdGhlbgorCQlpZiBbICJ0cnVlIiA9ICIkYmFyZV9yZXBvIiBdOyB0aGVuCisJCQljPSJCQVJFOiIKKwkJZWxzZQorCQkJYj0iR0lUX0RJUiEiCisJCWZpCisJZWxpZiBbICJ0cnVlIiA9ICIkaW5zaWRlX3dvcmt0cmVlIiBdOyB0aGVuCisJCWlmIFsgLW4gIiR7R0lUX1BTMV9TSE9XRElSVFlTVEFURS19IiBdICYmCisJCSAgIFsgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgYmFzaC5zaG93RGlydHlTdGF0ZSkiICE9ICJmYWxzZSIgXQorCQl0aGVuCisJCQlnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIC0tcXVpZXQgfHwgdz0iKiIKKwkJCWdpdCBkaWZmIC0tbm8tZXh0LWRpZmYgLS1jYWNoZWQgLS1xdWlldCB8fCBpPSIrIgorCQkJaWYgWyAteiAiJHNob3J0X3NoYSIgXSAmJiBbIC16ICIkaSIgXTsgdGhlbgorCQkJCWk9IiMiCisJCQlmaQorCQlmaQorCQlpZiBbIC1uICIke0dJVF9QUzFfU0hPV1NUQVNIU1RBVEUtfSIgXSAmJgorCQkgICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgcmVmcy9zdGFzaCA+L2Rldi9udWxsCisJCXRoZW4KKwkJCXM9IiQiCisJCWZpCisKKwkJaWYgWyAtbiAiJHtHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUy19IiBdICYmCisJCSAgIFsgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgYmFzaC5zaG93VW50cmFja2VkRmlsZXMpIiAhPSAiZmFsc2UiIF0gJiYKKwkJICAgZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZS1zdGFuZGFyZCAtLWRpcmVjdG9yeSAtLW5vLWVtcHR5LWRpcmVjdG9yeSAtLWVycm9yLXVubWF0Y2ggLS0gJzovKicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbAorCQl0aGVuCisJCQl1PSIlJHtaU0hfVkVSU0lPTislfSIKKwkJZmkKKworCQlpZiBbIC1uICIke0dJVF9QUzFfU0hPV1VQU1RSRUFNLX0iIF07IHRoZW4KKwkJCV9fZ2l0X3BzMV9zaG93X3Vwc3RyZWFtCisJCWZpCisJZmkKKworCWxvY2FsIHo9IiR7R0lUX1BTMV9TVEFURVNFUEFSQVRPUi0iICJ9IgorCisJIyBOTyBjb2xvciBvcHRpb24gdW5sZXNzIGluIFBST01QVF9DT01NQU5EIG1vZGUKKwlpZiBbICRwY21vZGUgPSB5ZXMgXSAmJiBbIC1uICIke0dJVF9QUzFfU0hPV0NPTE9SSElOVFMtfSIgXTsgdGhlbgorCQlfX2dpdF9wczFfY29sb3JpemVfZ2l0c3RyaW5nCisJZmkKKworCWI9JHtiIyNyZWZzL2hlYWRzL30KKwlpZiBbICRwY21vZGUgPSB5ZXMgXSAmJiBbICRwczFfZXhwYW5kZWQgPSB5ZXMgXTsgdGhlbgorCQlfX2dpdF9wczFfYnJhbmNoX25hbWU9JGIKKwkJYj0iXCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSIKKwlmaQorCisJbG9jYWwgZj0iJHckaSRzJHUiCisJbG9jYWwgZ2l0c3RyaW5nPSIkYyRiJHtmOiskeiRmfSRyJHAiCisKKwlpZiBbICRwY21vZGUgPSB5ZXMgXTsgdGhlbgorCQlpZiBbICIke19fZ2l0X3ByaW50Zl9zdXBwb3J0c192LX0iICE9IHllcyBdOyB0aGVuCisJCQlnaXRzdHJpbmc9JChwcmludGYgLS0gIiRwcmludGZfZm9ybWF0IiAiJGdpdHN0cmluZyIpCisJCWVsc2UKKwkJCXByaW50ZiAtdiBnaXRzdHJpbmcgLS0gIiRwcmludGZfZm9ybWF0IiAiJGdpdHN0cmluZyIKKwkJZmkKKwkJUFMxPSIkcHMxcGNfc3RhcnQkZ2l0c3RyaW5nJHBzMXBjX2VuZCIKKwllbHNlCisJCXByaW50ZiAtLSAiJHByaW50Zl9mb3JtYXQiICIkZ2l0c3RyaW5nIgorCWZpCisKKwlyZXR1cm4gJGV4aXQKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29udGFjdHMvLmdpdGlnbm9yZSBiL2NvbnRyaWIvY29udGFjdHMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzg1ZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb250YWN0cy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorZ2l0LWNvbnRhY3RzLjEKK2dpdC1jb250YWN0cy5odG1sCitnaXQtY29udGFjdHMueG1sCmRpZmYgLS1naXQgYS9jb250cmliL2NvbnRhY3RzL01ha2VmaWxlIGIvY29udHJpYi9jb250YWN0cy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjk5MGYwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb250YWN0cy9NYWtlZmlsZQpAQCAtMCwwICsxLDcxIEBACisjIFRoZSBkZWZhdWx0IHRhcmdldCBvZiB0aGlzIE1ha2VmaWxlIGlzLi4uCithbGw6OgorCistaW5jbHVkZSAuLi8uLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uLy4uL2NvbmZpZy5tYWsKKworcHJlZml4ID89IC91c3IvbG9jYWwKK2dpdGV4ZWNkaXIgPz0gJChwcmVmaXgpL2xpYmV4ZWMvZ2l0LWNvcmUKK21hbmRpciA/PSAkKHByZWZpeCkvc2hhcmUvbWFuCittYW4xZGlyID89ICQobWFuZGlyKS9tYW4xCitodG1sZGlyID89ICQocHJlZml4KS9zaGFyZS9kb2MvZ2l0LWRvYworCisuLi8uLi9HSVQtVkVSU0lPTi1GSUxFOiBGT1JDRQorCSQoTUFLRSkgLUMgLi4vLi4vIEdJVC1WRVJTSU9OLUZJTEUKKworLWluY2x1ZGUgLi4vLi4vR0lULVZFUlNJT04tRklMRQorCisjIHRoaXMgc2hvdWxkIGJlIHNldCB0byBhICdzdGFuZGFyZCcgYnNkLXR5cGUgaW5zdGFsbCBwcm9ncmFtCitJTlNUQUxMICA/PSBpbnN0YWxsCitSTSAgICAgICA/PSBybSAtZgorCitBU0NJSURPQyA9IGFzY2lpZG9jCitYTUxUTyAgICA9IHhtbHRvCisKK2lmbmRlZiBTSEVMTF9QQVRICisJU0hFTExfUEFUSCA9IC9iaW4vc2gKK2VuZGlmCitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKKworQVNDSUlET0NfQ09ORiA9IC4uLy4uL0RvY3VtZW50YXRpb24vYXNjaWlkb2MuY29uZgorTUFOUEFHRV9YU0wgICA9IC4uLy4uL0RvY3VtZW50YXRpb24vbWFucGFnZS1ub3JtYWwueHNsCisKK0dJVF9DT05UQUNUUyA6PSBnaXQtY29udGFjdHMKKworR0lUX0NPTlRBQ1RTX0RPQyA6PSBnaXQtY29udGFjdHMuMQorR0lUX0NPTlRBQ1RTX1hNTCA6PSBnaXQtY29udGFjdHMueG1sCitHSVRfQ09OVEFDVFNfVFhUIDo9IGdpdC1jb250YWN0cy50eHQKK0dJVF9DT05UQUNUU19IVE1MIDo9IGdpdC1jb250YWN0cy5odG1sCisKK2RvYzogJChHSVRfQ09OVEFDVFNfRE9DKSAkKEdJVF9DT05UQUNUU19IVE1MKQorCitpbnN0YWxsOiAkKEdJVF9DT05UQUNUUykKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKERFU1RESVIpJChnaXRleGVjZGlyKQorCSQoSU5TVEFMTCkgLW0gNzU1ICQoR0lUX0NPTlRBQ1RTKSAkKERFU1RESVIpJChnaXRleGVjZGlyKQorCitpbnN0YWxsLWRvYzogaW5zdGFsbC1tYW4gaW5zdGFsbC1odG1sCisKK2luc3RhbGwtbWFuOiAkKEdJVF9DT05UQUNUU19ET0MpCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQobWFuMWRpcikKKwkkKElOU1RBTEwpIC1tIDY0NCAkXiAkKERFU1RESVIpJChtYW4xZGlyKQorCitpbnN0YWxsLWh0bWw6ICQoR0lUX0NPTlRBQ1RTX0hUTUwpCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQoaHRtbGRpcikKKwkkKElOU1RBTEwpIC1tIDY0NCAkXiAkKERFU1RESVIpJChodG1sZGlyKQorCiskKEdJVF9DT05UQUNUU19ET0MpOiAkKEdJVF9DT05UQUNUU19YTUwpCisJJChYTUxUTykgLW0gJChNQU5QQUdFX1hTTCkgbWFuICReCisKKyQoR0lUX0NPTlRBQ1RTX1hNTCk6ICQoR0lUX0NPTlRBQ1RTX1RYVCkKKwkkKEFTQ0lJRE9DKSAtYiBkb2Nib29rIC1kIG1hbnBhZ2UgLWYgJChBU0NJSURPQ19DT05GKSBcCisJCS1hZ2l0X3ZlcnNpb249JChHSVRfVkVSU0lPTikgJF4KKworJChHSVRfQ09OVEFDVFNfSFRNTCk6ICQoR0lUX0NPTlRBQ1RTX1RYVCkKKwkkKEFTQ0lJRE9DKSAtYiB4aHRtbDExIC1kIG1hbnBhZ2UgLWYgJChBU0NJSURPQ19DT05GKSBcCisJCS1hZ2l0X3ZlcnNpb249JChHSVRfVkVSU0lPTikgJF4KKworY2xlYW46CisJJChSTSkgJChHSVRfQ09OVEFDVFMpCisJJChSTSkgKi54bWwgKi5odG1sICouMQorCisuUEhPTlk6IEZPUkNFCmRpZmYgLS1naXQgYS9jb250cmliL2NvbnRhY3RzL2dpdC1jb250YWN0cyBiL2NvbnRyaWIvY29udGFjdHMvZ2l0LWNvbnRhY3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg1YWQ3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvbnRhY3RzL2dpdC1jb250YWN0cwpAQCAtMCwwICsxLDIwMyBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgTGlzdCBwZW9wbGUgd2hvIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gYSBwYXRjaC4gIFVzZWZ1bCBhcyB0aGUgYXJndW1lbnQgdG8KKyMgZ2l0LXNlbmQtZW1haWwgLS1jYy1jbWQgb3B0aW9uLCBhbmQgaW4gb3RoZXIgc2l0dWF0aW9ucy4KKyMKKyMgVXNhZ2U6IGdpdCBjb250YWN0cyA8ZmlsZSB8IHJldi1saXN0IG9wdGlvbj4gLi4uCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgSVBDOjpPcGVuMjsKKworbXkgJHNpbmNlID0gJzUteWVhcnMtYWdvJzsKK215ICRtaW5fcGVyY2VudCA9IDEwOworbXkgJGxhYmVsc19yeCA9IHFyL1NpZ25lZC1vZmYtYnl8UmV2aWV3ZWQtYnl8QWNrZWQtYnl8Q2N8UmVwb3J0ZWQtYnkvaTsKK215ICVzZWVuOworCitzdWIgZm9ybWF0X2NvbnRhY3QgeworCW15ICgkbmFtZSwgJGVtYWlsKSA9IEBfOworCXJldHVybiAiJG5hbWUgPCRlbWFpbD4iOworfQorCitzdWIgcGFyc2VfY29tbWl0IHsKKwlteSAoJGNvbW1pdCwgJGRhdGEpID0gQF87CisJbXkgJGNvbnRhY3RzID0gJGNvbW1pdC0+e2NvbnRhY3RzfTsKKwlteSAkaW5ib2R5ID0gMDsKKwlmb3IgKHNwbGl0KC9eL20sICRkYXRhKSkgeworCQlpZiAobm90ICRpbmJvZHkpIHsKKwkJCWlmICgvXmF1dGhvciAoW148Pl0rKSA8KFxTKyk+IC4rJC8pIHsKKwkJCQkkY29udGFjdHMtPntmb3JtYXRfY29udGFjdCgkMSwgJDIpfSA9IDE7CisJCQl9IGVsc2lmICgvXiQvKSB7CisJCQkJJGluYm9keSA9IDE7CisJCQl9CisJCX0gZWxzaWYgKC9eJGxhYmVsc19yeDpccysoW148Pl0rKVxzKzwoXFMrPyk+JC9vKSB7CisJCQkkY29udGFjdHMtPntmb3JtYXRfY29udGFjdCgkMSwgJDIpfSA9IDE7CisJCX0KKwl9Cit9CisKK3N1YiBpbXBvcnRfY29tbWl0cyB7CisJbXkgKCRjb21taXRzKSA9IEBfOworCXJldHVybiB1bmxlc3MgJSRjb21taXRzOworCW15ICRwaWQgPSBvcGVuMiBteSAkcmVhZGVyLCBteSAkd3JpdGVyLCBxdyhnaXQgY2F0LWZpbGUgLS1iYXRjaCk7CisJZm9yIG15ICRpZCAoa2V5cyglJGNvbW1pdHMpKSB7CisJCXByaW50ICR3cml0ZXIgIiRpZFxuIjsKKwkJbXkgJGxpbmUgPSA8JHJlYWRlcj47CisJCWlmICgkbGluZSA9fiAvXihbMC05YS1mXXs0MH0pIGNvbW1pdCAoXGQrKS8pIHsKKwkJCW15ICgkY2lkLCAkbGVuKSA9ICgkMSwgJDIpOworCQkJZGllICJleHBlY3RlZCAkaWQgYnV0IGdvdCAkY2lkXG4iIHVubGVzcyAkaWQgZXEgJGNpZDsKKwkJCW15ICRkYXRhOworCQkJIyBjYXQtZmlsZSBlbWl0cyBuZXdsaW5lIGFmdGVyIGRhdGEsIHNvIHJlYWQgbGVuKzEKKwkJCXJlYWQgJHJlYWRlciwgJGRhdGEsICRsZW4gKyAxOworCQkJcGFyc2VfY29tbWl0KCRjb21taXRzLT57JGlkfSwgJGRhdGEpOworCQl9CisJfQorCWNsb3NlICRyZWFkZXI7CisJY2xvc2UgJHdyaXRlcjsKKwl3YWl0cGlkKCRwaWQsIDApOworCWRpZSAiZ2l0LWNhdC1maWxlIGVycm9yOiAkP1xuIiBpZiAkPzsKK30KKworc3ViIGdldF9ibGFtZSB7CisJbXkgKCRjb21taXRzLCAkc291cmNlLCAkZnJvbSwgJHJhbmdlcykgPSBAXzsKKwlyZXR1cm4gdW5sZXNzIEAkcmFuZ2VzOworCW9wZW4gbXkgJGYsICctfCcsCisJCXF3KGdpdCBibGFtZSAtLXBvcmNlbGFpbiAtQyksCisJCW1hcCh7Ii1MJF8tPlswXSwrJF8tPlsxXSJ9IEAkcmFuZ2VzKSwKKwkJJy0tc2luY2UnLCAkc2luY2UsICIkZnJvbV4iLCAnLS0nLCAkc291cmNlIG9yIGRpZTsKKwl3aGlsZSAoPCRmPikgeworCQlpZiAoL14oWzAtOWEtZl17NDB9KSBcZCsgXGQrIFxkKyQvKSB7CisJCQlteSAkaWQgPSAkMTsKKwkJCSRjb21taXRzLT57JGlkfSA9IHsgaWQgPT4gJGlkLCBjb250YWN0cyA9PiB7fSB9CisJCQkJdW5sZXNzICRzZWVueyRpZH07CisJCQkkc2VlbnskaWR9ID0gMTsKKwkJfQorCX0KKwljbG9zZSAkZjsKK30KKworc3ViIGJsYW1lX3NvdXJjZXMgeworCW15ICgkc291cmNlcywgJGNvbW1pdHMpID0gQF87CisJZm9yIG15ICRzIChrZXlzICUkc291cmNlcykgeworCQlmb3IgbXkgJGlkIChrZXlzICV7JHNvdXJjZXMtPnskc319KSB7CisJCQlnZXRfYmxhbWUoJGNvbW1pdHMsICRzLCAkaWQsICRzb3VyY2VzLT57JHN9eyRpZH0pOworCQl9CisJfQorfQorCitzdWIgc2Nhbl9wYXRjaGVzIHsKKwlteSAoJHNvdXJjZXMsICRpZCwgJGYpID0gQF87CisJbXkgJHNvdXJjZTsKKwl3aGlsZSAoPCRmPikgeworCQlpZiAoL15Gcm9tIChbMC05YS1mXXs0MH0pIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMSQvKSB7CisJCQkkaWQgPSAkMTsKKwkJCSRzZWVueyRpZH0gPSAxOworCQl9CisJCW5leHQgdW5sZXNzICRpZDsKKwkJaWYgKG17Xi0tLSAoPzphLyguKyl8L2Rldi9udWxsKSR9KSB7CisJCQkkc291cmNlID0gJDE7CisJCX0gZWxzaWYgKC9eQEAgLShcZCspKD86LChcZCspKT8vICYmICRzb3VyY2UpIHsKKwkJCW15ICRsZW4gPSBkZWZpbmVkKCQyKSA/ICQyIDogMTsKKwkJCXB1c2ggQHskc291cmNlcy0+eyRzb3VyY2V9eyRpZH19LCBbJDEsICRsZW5dIGlmICRsZW47CisJCX0KKwl9Cit9CisKK3N1YiBzY2FuX3BhdGNoX2ZpbGUgeworCW15ICgkY29tbWl0cywgJGZpbGUpID0gQF87CisJb3BlbiBteSAkZiwgJzwnLCAkZmlsZSBvciBkaWUgInJlYWQgZmFpbHVyZTogJGZpbGU6ICQhXG4iOworCXNjYW5fcGF0Y2hlcygkY29tbWl0cywgdW5kZWYsICRmKTsKKwljbG9zZSAkZjsKK30KKworc3ViIHBhcnNlX3Jldl9hcmdzIHsKKwlteSBAYXJncyA9IEBfOworCW9wZW4gbXkgJGYsICctfCcsCisJCXF3KGdpdCByZXYtcGFyc2UgLS1yZXZzLW9ubHkgLS1kZWZhdWx0IEhFQUQgLS1zeW1ib2xpYyksIEBhcmdzCisJCW9yIGRpZTsKKwlteSBAcmV2czsKKwl3aGlsZSAoPCRmPikgeworCQljaG9tcDsKKwkJcHVzaCBAcmV2cywgJF87CisJfQorCWNsb3NlICRmOworCXJldHVybiBAcmV2cyBpZiBzY2FsYXIoQHJldnMpICE9IDE7CisJcmV0dXJuICJeJHJldnNbMF0iLCAnSEVBRCcgdW5sZXNzICRyZXZzWzBdID1+IC9eLS87CisJcmV0dXJuICRyZXZzWzBdLCAnSEVBRCc7Cit9CisKK3N1YiBzY2FuX3Jldl9hcmdzIHsKKwlteSAoJGNvbW1pdHMsICRhcmdzKSA9IEBfOworCW15IEByZXZzID0gcGFyc2VfcmV2X2FyZ3MoQCRhcmdzKTsKKwlvcGVuIG15ICRmLCAnLXwnLCBxdyhnaXQgcmV2LWxpc3QgLS1yZXZlcnNlKSwgQHJldnMgb3IgZGllOworCXdoaWxlICg8JGY+KSB7CisJCWNob21wOworCQlteSAkaWQgPSAkXzsKKwkJJHNlZW57JGlkfSA9IDE7CisJCW9wZW4gbXkgJGcsICctfCcsIHF3KGdpdCBzaG93IC1DIC0tb25lbGluZSksICRpZCBvciBkaWU7CisJCXNjYW5fcGF0Y2hlcygkY29tbWl0cywgJGlkLCAkZyk7CisJCWNsb3NlICRnOworCX0KKwljbG9zZSAkZjsKK30KKworc3ViIG1haWxtYXBfY29udGFjdHMgeworCW15ICgkY29udGFjdHMpID0gQF87CisJbXkgJW1hcHBlZDsKKwlteSAkcGlkID0gb3BlbjIgbXkgJHJlYWRlciwgbXkgJHdyaXRlciwgcXcoZ2l0IGNoZWNrLW1haWxtYXAgLS1zdGRpbik7CisJZm9yIG15ICRjb250YWN0IChrZXlzKCUkY29udGFjdHMpKSB7CisJCXByaW50ICR3cml0ZXIgIiRjb250YWN0XG4iOworCQlteSAkY2Fub25pY2FsID0gPCRyZWFkZXI+OworCQljaG9tcCAkY2Fub25pY2FsOworCQkkbWFwcGVkeyRjYW5vbmljYWx9ICs9ICRjb250YWN0cy0+eyRjb250YWN0fTsKKwl9CisJY2xvc2UgJHJlYWRlcjsKKwljbG9zZSAkd3JpdGVyOworCXdhaXRwaWQoJHBpZCwgMCk7CisJZGllICJnaXQtY2hlY2stbWFpbG1hcCBlcnJvcjogJD9cbiIgaWYgJD87CisJcmV0dXJuIFwlbWFwcGVkOworfQorCitpZiAoIUBBUkdWKSB7CisJZGllICJObyBpbnB1dCByZXZpc2lvbnMgb3IgcGF0Y2ggZmlsZXNcbiI7Cit9CisKK215IChAZmlsZXMsIEByZXZfYXJncyk7Citmb3IgKEBBUkdWKSB7CisJaWYgKC1lKSB7CisJCXB1c2ggQGZpbGVzLCAkXzsKKwl9IGVsc2UgeworCQlwdXNoIEByZXZfYXJncywgJF87CisJfQorfQorCitteSAlc291cmNlczsKK2ZvciAoQGZpbGVzKSB7CisJc2Nhbl9wYXRjaF9maWxlKFwlc291cmNlcywgJF8pOworfQoraWYgKEByZXZfYXJncykgeworCXNjYW5fcmV2X2FyZ3MoXCVzb3VyY2VzLCBcQHJldl9hcmdzKQorfQorCitteSAkdG9wbGV2ZWwgPSBgZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWxgOworY2hvbXAgJHRvcGxldmVsOworY2hkaXIoJHRvcGxldmVsKSBvciBkaWUgImNoZGlyIGZhaWx1cmU6ICR0b3BsZXZlbDogJCFcbiI7CisKK215ICVjb21taXRzOworYmxhbWVfc291cmNlcyhcJXNvdXJjZXMsIFwlY29tbWl0cyk7CitpbXBvcnRfY29tbWl0cyhcJWNvbW1pdHMpOworCitteSAkY29udGFjdHMgPSB7fTsKK2ZvciBteSAkY29tbWl0ICh2YWx1ZXMgJWNvbW1pdHMpIHsKKwlmb3IgbXkgJGNvbnRhY3QgKGtleXMgJXskY29tbWl0LT57Y29udGFjdHN9fSkgeworCQkkY29udGFjdHMtPnskY29udGFjdH0rKzsKKwl9Cit9CiskY29udGFjdHMgPSBtYWlsbWFwX2NvbnRhY3RzKCRjb250YWN0cyk7CisKK215ICRuY29tbWl0cyA9IHNjYWxhcihrZXlzICVjb21taXRzKTsKK2ZvciBteSAkY29udGFjdCAoa2V5cyAlJGNvbnRhY3RzKSB7CisJbXkgJHBlcmNlbnQgPSAkY29udGFjdHMtPnskY29udGFjdH0gKiAxMDAgLyAkbmNvbW1pdHM7CisJbmV4dCBpZiAkcGVyY2VudCA8ICRtaW5fcGVyY2VudDsKKwlwcmludCAiJGNvbnRhY3RcbiI7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2NvbnRhY3RzL2dpdC1jb250YWN0cy50eHQgYi9jb250cmliL2NvbnRhY3RzL2dpdC1jb250YWN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5MTRkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29udGFjdHMvZ2l0LWNvbnRhY3RzLnR4dApAQCAtMCwwICsxLDk0IEBACitnaXQtY29udGFjdHMoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY29udGFjdHMgLSBMaXN0IHBlb3BsZSB3aG8gbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiBhIHNldCBvZiBjaGFuZ2VzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNvbnRhY3RzJyAoPHBhdGNoPnw8cmFuZ2U+fDxyZXY+KS4uLgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXZlbiBhIHNldCBvZiBjaGFuZ2VzLCBzcGVjaWZpZWQgYXMgcGF0Y2ggZmlsZXMgb3IgcmV2aXNpb25zLCBkZXRlcm1pbmUgcGVvcGxlCit3aG8gbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiB0aG9zZSBjaGFuZ2VzLiAgVGhpcyBpcyBkb25lIGJ5IGNvbnN1bHRpbmcgdGhlCitoaXN0b3J5IG9mIGVhY2ggcGF0Y2ggb3IgcmV2aXNpb24gaHVuayB0byBmaW5kIHBlb3BsZSBtZW50aW9uZWQgYnkgY29tbWl0cword2hpY2ggdG91Y2hlZCB0aGUgbGluZXMgb2YgZmlsZXMgdW5kZXIgY29uc2lkZXJhdGlvbi4KKworSW5wdXQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgcGF0Y2ggZmlsZXMgb3IgcmV2aXNpb24gYXJndW1lbnRzLiAgQSByZXZpc2lvbgorYXJndW1lbnQgY2FuIGJlIGEgcmFuZ2Ugb3IgYSBzaW5nbGUgYDxyZXY+YCB3aGljaCBpcyBpbnRlcnByZXRlZCBhcworYDxyZXY+Li5IRUFEYCwgdGh1cyB0aGUgc2FtZSByZXZpc2lvbiBhcmd1bWVudHMgYXJlIGFjY2VwdGVkIGFzIGZvcgorbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLiBQYXRjaCBmaWxlcyBhbmQgcmV2aXNpb24gYXJndW1lbnRzIGNhbiBiZSBjb21iaW5lZAoraW4gdGhlIHNhbWUgaW52b2NhdGlvbi4KKworVGhpcyBjb21tYW5kIGNhbiBiZSB1c2VmdWwgZm9yIGRldGVybWluaW5nIHRoZSBsaXN0IG9mIHBlb3BsZSB3aXRoIHdob20gdG8KK2Rpc2N1c3MgcHJvcG9zZWQgY2hhbmdlcywgb3IgZm9yIGZpbmRpbmcgdGhlIGxpc3Qgb2YgcmVjaXBpZW50cyB0byBDYzogd2hlbgorc3VibWl0dGluZyBhIHBhdGNoIHNlcmllcyB2aWEgYGdpdCBzZW5kLWVtYWlsYC4gRm9yIHRoZSBsYXR0ZXIgY2FzZSwgYGdpdAorY29udGFjdHNgIGNhbiBiZSB1c2VkIGFzIHRoZSBhcmd1bWVudCB0byBgZ2l0IHNlbmQtZW1haWxgJ3MgYC0tY2MtY21kYCBvcHRpb24uCisKKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorCitgZ2l0IGJsYW1lYCBpcyBpbnZva2VkIGZvciBlYWNoIGh1bmsgaW4gYSBwYXRjaCBmaWxlIG9yIHJldmlzaW9uLiAgRm9yIGVhY2gKK2NvbW1pdCBtZW50aW9uZWQgYnkgYGdpdCBibGFtZWAsIHRoZSBjb21taXQgbWVzc2FnZSBpcyBjb25zdWx0ZWQgZm9yIHBlb3BsZSB3aG8KK2F1dGhvcmVkLCByZXZpZXdlZCwgc2lnbmVkLCBhY2tub3dsZWRnZWQsIG9yIHdlcmUgQ2M6J2QuICBPbmNlIHRoZSBsaXN0IG9mCitwYXJ0aWNpcGFudHMgaXMga25vd24sIGVhY2ggcGVyc29uJ3MgcmVsZXZhbmNlIGlzIGNvbXB1dGVkIGJ5IGNvbnNpZGVyaW5nIGhvdworbWFueSBjb21taXRzIG1lbnRpb25lZCB0aGF0IHBlcnNvbiBjb21wYXJlZCB3aXRoIHRoZSB0b3RhbCBudW1iZXIgb2YgY29tbWl0cwordW5kZXIgY29uc2lkZXJhdGlvbi4gIFRoZSBmaW5hbCBvdXRwdXQgY29uc2lzdHMgb25seSBvZiBwYXJ0aWNpcGFudHMgd2hvIGV4Y2VlZAorYSBtaW5pbXVtIHRocmVzaG9sZCBvZiBwYXJ0aWNpcGF0aW9uLgorCisKK09VVFBVVAorLS0tLS0tCisKK0ZvciBlYWNoIHBlcnNvbiBvZiBpbnRlcmVzdCwgYSBzaW5nbGUgbGluZSBpcyBvdXRwdXQsIHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5lLgorSWYgdGhlIHBlcnNvbidzIG5hbWUgaXMga25vd24sIGBgTmFtZSAkJDx1c2VyQGhvc3Q+JCQnJyBpcyBwcmludGVkOyBvdGhlcndpc2UKK29ubHkgYGAkJDx1c2VyQGhvc3Q+JCQnJyBpcyBwcmludGVkLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisqIENvbnN1bHQgcGF0Y2ggZmlsZXM6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbnRhY3RzIGZlYXR1cmUvKi5wYXRjaAorLS0tLS0tLS0tLS0tCisKKyogUmV2aXNpb24gcmFuZ2U6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbnRhY3RzIFIxLi5SMgorLS0tLS0tLS0tLS0tCisKKyogRnJvbSBhIHNpbmdsZSByZXZpc2lvbiB0byBgSEVBRGA6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbnRhY3RzIG9yaWdpbgorLS0tLS0tLS0tLS0tCisKKyogSGVscGVyIGZvciBgZ2l0IHNlbmQtZW1haWxgOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBzZW5kLWVtYWlsIC0tY2MtY21kPSdnaXQgY29udGFjdHMnIGZlYXR1cmUvKi5wYXRjaAorLS0tLS0tLS0tLS0tCisKKworTElNSVRBVElPTlMKKy0tLS0tLS0tLS0tCisKK1NldmVyYWwgY29uZGl0aW9ucyBjb250cm9sbGluZyBhIHBlcnNvbidzIHNpZ25pZmljYW5jZSBhcmUgY3VycmVudGx5CitoYXJkLWNvZGVkLCBzdWNoIGFzIG1pbmltdW0gcGFydGljaXBhdGlvbiBsZXZlbCAoMTAlKSwgYmxhbWUgZGF0ZS1saW1pdGluZyAoNQoreWVhcnMpLCBhbmQgYC1DYCBsZXZlbCBmb3IgZGV0ZWN0aW5nIG1vdmVkIGFuZCBjb3BpZWQgbGluZXMgKGEgc2luZ2xlIGAtQ2ApLiBJbgordGhlIGZ1dHVyZSwgdGhlc2UgY29uZGl0aW9ucyBtYXkgYmVjb21lIGNvbmZpZ3VyYWJsZS4KKworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY292ZXJhZ2UtZGlmZi5zaCBiL2NvbnRyaWIvY292ZXJhZ2UtZGlmZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZWM0MTlmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb3ZlcmFnZS1kaWZmLnNoCkBAIC0wLDAgKzEsMTA4IEBACisjIS9iaW4vc2gKKworIyBVc2FnZTogUnVuICdjb250cmliL2NvdmVyYWdlLWRpZmYuc2ggPHZlcnNpb24xPiA8dmVyc2lvbjI+JyBmcm9tIHNvdXJjZS1yb290CisjIGFmdGVyIHJ1bm5pbmcKKyMKKyMgICAgIG1ha2UgY292ZXJhZ2UtdGVzdAorIyAgICAgbWFrZSBjb3ZlcmFnZS1yZXBvcnQKKyMKKyMgd2hpbGUgY2hlY2tlZCBvdXQgYXQgPHZlcnNpb24yPi4gVGhpcyBzY3JpcHQgY29tYmluZXMgdGhlICouZ2NvdiBmaWxlcworIyBnZW5lcmF0ZWQgYnkgdGhlICdtYWtlJyBjb21tYW5kcyBhYm92ZSB3aXRoICdnaXQgZGlmZiA8dmVyc2lvbjE+IDx2ZXJzaW9uMj4nCisjIHRvIHJlcG9ydCBuZXcgbGluZXMgdGhhdCBhcmUgbm90IGNvdmVyZWQgYnkgdGhlIHRlc3Qgc3VpdGUuCisKK1YxPSQxCitWMj0kMgorCitkaWZmX2xpbmVzICgpIHsKKwlwZXJsIC1lICcKKwkJbXkgJGxpbmVfbnVtOworCQl3aGlsZSAoPD4pIHsKKwkJCSMgSHVuayBoZWFkZXI/ICBHcmFiIHRoZSBiZWdpbm5pbmcgaW4gcG9zdGltYWdlLgorCQkJaWYgKC9eQEAgLVxkKyg/OixcZCspPyBcKyhcZCspKD86LFxkKyk/IEBALykgeworCQkJCSRsaW5lX251bSA9ICQxOworCQkJCW5leHQ7CisJCQl9CisKKwkJCSMgSGF2ZSB3ZSBzZWVuIGEgaHVuaz8gIElnbm9yZSAiZGlmZiAtLWdpdCIgZXRjLgorCQkJbmV4dCB1bmxlc3MgZGVmaW5lZCAkbGluZV9udW07CisKKwkJCSMgRGVsZXRlZCBsaW5lPyBJZ25vcmUuCisJCQlpZiAoL14tLykgeworCQkJCW5leHQ7CisJCQl9CisKKwkJCSMgU2hvdyBvbmx5IHRoZSBsaW5lIG51bWJlciBvZiBhZGRlZCBsaW5lcy4KKwkJCWlmICgvXlwrLykgeworCQkJCXByaW50ICIkbGluZV9udW1cbiI7CisJCQl9CisJCQkjIEVpdGhlciBjb21tb24gY29udGV4dCBvciBhZGRlZCBsaW5lIGFwcGVhciBpbgorCQkJIyB0aGUgcG9zdGltYWdlLiAgQ291bnQgaXQuCisJCQkkbGluZV9udW0rKzsKKwkJfQorCScKK30KKworZmlsZXM9JChnaXQgZGlmZiAtLW5hbWUtb25seSAiJFYxIiAiJFYyIiAtLSBcKi5jKQorCisjIGNyZWF0ZSBlbXB0eSBmaWxlCis+Y292ZXJhZ2UtZGF0YS50eHQKKworZm9yIGZpbGUgaW4gJGZpbGVzCitkbworCWdpdCBkaWZmICIkVjEiICIkVjIiIC0tICIkZmlsZSIgfAorCWRpZmZfbGluZXMgfAorCXNvcnQgPm5ld19saW5lcy50eHQKKworCWlmICEgdGVzdCAtcyBuZXdfbGluZXMudHh0CisJdGhlbgorCQljb250aW51ZQorCWZpCisKKwloYXNoX2ZpbGU9JChlY2hvICRmaWxlIHwgc2VkICJzL1wvL1wjLyIpCisKKwlpZiAhIHRlc3QgLXMgIiRoYXNoX2ZpbGUuZ2NvdiIKKwl0aGVuCisJCWNvbnRpbnVlCisJZmkKKworCXNlZCAtbmUgJy8jIyMjIzoveworCQkJcy8gICAgIyMjIyM6Ly8KKwkJCXMvOi4qLy8KKwkJCXMvIC8vZworCQkJcAorCQl9JyAiJGhhc2hfZmlsZS5nY292IiB8CisJc29ydCA+dW5jb3ZlcmVkX2xpbmVzLnR4dAorCisJY29tbSAtMTIgdW5jb3ZlcmVkX2xpbmVzLnR4dCBuZXdfbGluZXMudHh0IHwKKwlzZWQgLWUgJ3MvJC9cKS8nIHwKKwlzZWQgLWUgJ3MvXi8gLycgPnVuY292ZXJlZF9uZXdfbGluZXMudHh0CisKKwlncmVwIC1xICdbXls6c3BhY2U6XV0nIDx1bmNvdmVyZWRfbmV3X2xpbmVzLnR4dCAmJgorCWVjaG8gJGZpbGUgPj5jb3ZlcmFnZS1kYXRhLnR4dCAmJgorCWdpdCBibGFtZSAtcyAiJFYyIiAtLSAiJGZpbGUiIHwKKwlzZWQgJ3MvXHQvL2cnIHwKKwlncmVwIC1mIHVuY292ZXJlZF9uZXdfbGluZXMudHh0ID4+Y292ZXJhZ2UtZGF0YS50eHQgJiYKKwllY2hvID4+Y292ZXJhZ2UtZGF0YS50eHQKKworCXJtIC1mIG5ld19saW5lcy50eHQgdW5jb3ZlcmVkX2xpbmVzLnR4dCB1bmNvdmVyZWRfbmV3X2xpbmVzLnR4dAorZG9uZQorCitjYXQgY292ZXJhZ2UtZGF0YS50eHQKKworZWNobyAiQ29tbWl0cyBpbnRyb2R1Y2luZyB1bmNvdmVyZWQgY29kZToiCisKK2NvbW1pdF9saXN0PSQoY2F0IGNvdmVyYWdlLWRhdGEudHh0IHwKKwlncmVwIC1FICdeWzAtOWEtZl17Nyx9ICcgfAorCWF3ayAne3ByaW50ICQxO30nIHwKKwlzb3J0IHwKKwl1bmlxKQorCisoCisJZm9yIGNvbW1pdCBpbiAkY29tbWl0X2xpc3QKKwlkbworCQlnaXQgbG9nIC0tbm8tZGVjb3JhdGUgLS1wcmV0dHk9Zm9ybWF0OiclYW4gICAgICAlaDogJXMnIC0xICRjb21taXQKKwkJZWNobworCWRvbmUKKykgfCBzb3J0CisKK3JtIGNvdmVyYWdlLWRhdGEudHh0CmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvZ25vbWUta2V5cmluZy8uZ2l0aWdub3JlIGIvY29udHJpYi9jcmVkZW50aWFsL2dub21lLWtleXJpbmcvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGQ4ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL2dub21lLWtleXJpbmcvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACitnaXQtY3JlZGVudGlhbC1nbm9tZS1rZXlyaW5nCmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvZ25vbWUta2V5cmluZy9NYWtlZmlsZSBiL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYzE5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvZ25vbWUta2V5cmluZy9NYWtlZmlsZQpAQCAtMCwwICsxLDI1IEBACitNQUlOOj1naXQtY3JlZGVudGlhbC1nbm9tZS1rZXlyaW5nCithbGw6OiAkKE1BSU4pCisKK0NDID0gZ2NjCitSTSA9IHJtIC1mCitDRkxBR1MgPSAtZyAtTzIgLVdhbGwKK1BLR19DT05GSUcgPSBwa2ctY29uZmlnCisKKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsuYXV0b2dlbgorLWluY2x1ZGUgLi4vLi4vLi4vY29uZmlnLm1haworCitJTkNTOj0kKHNoZWxsICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgZ25vbWUta2V5cmluZy0xIGdsaWItMi4wKQorTElCUzo9JChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyBnbm9tZS1rZXlyaW5nLTEgZ2xpYi0yLjApCisKK1NSQ1M6PSQoTUFJTikuYworT0JKUzo9JChTUkNTOi5jPS5vKQorCislLm86ICUuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKElOQ1MpIC1vICRAIC1jICQ8CisKKyQoTUFJTik6ICQoT0JKUykKKwkkKENDKSAtbyAkQCAkKExERkxBR1MpICReICQoTElCUykKKworY2xlYW46CisJQCQoUk0pICQoTUFJTikgJChPQkpTKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL2dub21lLWtleXJpbmcvZ2l0LWNyZWRlbnRpYWwtZ25vbWUta2V5cmluZy5jIGIvY29udHJpYi9jcmVkZW50aWFsL2dub21lLWtleXJpbmcvZ2l0LWNyZWRlbnRpYWwtZ25vbWUta2V5cmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODliZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvZ25vbWUta2V5cmluZy9naXQtY3JlZGVudGlhbC1nbm9tZS1rZXlyaW5nLmMKQEAgLTAsMCArMSw0NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSm9obiBTemFrbWVpc3RlciA8am9obkBzemFrbWVpc3Rlci5uZXQ+CisgKiAgICAgICAgICAgICAgIDIwMTIgUGhpbGlwcCBBLiBIYXJ0bWFubiA8cGFoQHFvLmN4PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyoKKyAqIENyZWRpdHM6CisgKiAtIEdOT01FIEtleXJpbmcgQVBJIGhhbmRsaW5nIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBKb2huIFN6YWttZWlzdGVyCisgKiAtIHBvcnRlZCB0byBjcmVkZW50aWFsIGhlbHBlciBBUEkgYnkgUGhpbGlwcCBBLiBIYXJ0bWFubgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbm9tZS1rZXlyaW5nLmg+CisKKyNpZmRlZiBHTk9NRV9LRVlSSU5HX0RFRkFVTFQKKworICAgLyogTW9kZXJuIGdub21lLWtleXJpbmcgKi8KKworI2luY2x1ZGUgPGdub21lLWtleXJpbmctbWVtb3J5Lmg+CisKKyNlbHNlCisKKyAgIC8qCisgICAgKiBTdXBwb3J0IGFuY2llbnQgZ25vbWUta2V5cmluZywgY2lyYy4gUkhFTCA1LlguCisgICAgKiBHTk9NRV9LRVlSSU5HX0RFRkFVTFQgc2VlbXMgdG8gaGF2ZSBiZWVuIGludHJvZHVjZWQgd2l0aCBHbm9tZSAyLjIyLAorICAgICogYW5kIHRoZSBvdGhlciBmZWF0dXJlcyByb3VnaGx5IGFyb3VuZCBHbm9tZSAyLjIwLCA2IG1vbnRocyBiZWZvcmUuCisgICAgKiBVYnVudHUgOC4wNCB1c2VkIEdub21lIDIuMjIgKEkgdGhpbmspLiAgTm90IHN1cmUgYW55IGRpc3RybyB1c2VkIDIuMjAuCisgICAgKiBTbyB0aGUgZXhpc3RlbmNlL25vbi1leGlzdGVuY2Ugb2YgR05PTUVfS0VZUklOR19ERUZBVUxUIHNlZW1zIGxpa2UKKyAgICAqIGEgZGVjZW50IHRoaW5nIHRvIHVzZSBhcyBhbiBpbmRpY2F0b3IuCisgICAgKi8KKworI2RlZmluZSBHTk9NRV9LRVlSSU5HX0RFRkFVTFQgTlVMTAorCisvKgorICogYW5jaWVudCBnbm9tZS1rZXlyaW5nIHJldHVybnMgREVOSUVEIHdoZW4gYW4gZW50cnkgaXMgbm90IGZvdW5kLgorICogU2V0dGluZyBOT19NQVRDSCB0byBERU5JRUQgd2lsbCBwcmV2ZW50IHVzIGZyb20gcmVwb3J0aW5nIERFTklFRAorICogZXJyb3JzIGR1cmluZyBnZXQgYW5kIGVyYXNlIG9wZXJhdGlvbnMsIGJ1dCB3ZSB3aWxsIHN0aWxsIHJlcG9ydAorICogREVOSUVEIGVycm9ycyBkdXJpbmcgYSBzdG9yZS4KKyAqLworI2RlZmluZSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9OT19NQVRDSCBHTk9NRV9LRVlSSU5HX1JFU1VMVF9ERU5JRUQKKworI2RlZmluZSBnbm9tZV9rZXlyaW5nX21lbW9yeV9hbGxvYyBnX21hbGxvYworI2RlZmluZSBnbm9tZV9rZXlyaW5nX21lbW9yeV9mcmVlIGdub21lX2tleXJpbmdfZnJlZV9wYXNzd29yZAorI2RlZmluZSBnbm9tZV9rZXlyaW5nX21lbW9yeV9zdHJkdXAgZ19zdHJkdXAKKworc3RhdGljIGNvbnN0IGNoYXIgKmdub21lX2tleXJpbmdfcmVzdWx0X3RvX21lc3NhZ2UoR25vbWVLZXlyaW5nUmVzdWx0IHJlc3VsdCkKK3sKKwlzd2l0Y2ggKHJlc3VsdCkgeworCWNhc2UgR05PTUVfS0VZUklOR19SRVNVTFRfT0s6CisJCXJldHVybiAiT0siOworCWNhc2UgR05PTUVfS0VZUklOR19SRVNVTFRfREVOSUVEOgorCQlyZXR1cm4gIkRlbmllZCI7CisJY2FzZSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9OT19LRVlSSU5HX0RBRU1PTjoKKwkJcmV0dXJuICJObyBLZXlyaW5nIERhZW1vbiI7CisJY2FzZSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9BTFJFQURZX1VOTE9DS0VEOgorCQlyZXR1cm4gIkFscmVhZHkgVW5Mb2NrZWQiOworCWNhc2UgR05PTUVfS0VZUklOR19SRVNVTFRfTk9fU1VDSF9LRVlSSU5HOgorCQlyZXR1cm4gIk5vIFN1Y2ggS2V5cmluZyI7CisJY2FzZSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9CQURfQVJHVU1FTlRTOgorCQlyZXR1cm4gIkJhZCBBcmd1bWVudHMiOworCWNhc2UgR05PTUVfS0VZUklOR19SRVNVTFRfSU9fRVJST1I6CisJCXJldHVybiAiSU8gRXJyb3IiOworCWNhc2UgR05PTUVfS0VZUklOR19SRVNVTFRfQ0FOQ0VMTEVEOgorCQlyZXR1cm4gIkNhbmNlbGxlZCI7CisJY2FzZSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9BTFJFQURZX0VYSVNUUzoKKwkJcmV0dXJuICJBbHJlYWR5IEV4aXN0cyI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVbmtub3duIEVycm9yIjsKKwl9Cit9CisKKy8qCisgKiBTdXBwb3J0IHJlYWxseSBhbmNpZW50IGdub21lLWtleXJpbmcsIGNpcmMuIFJIRUwgNC5YLgorICogSnVzdCBhIGd1ZXNzIGZvciB0aGUgR2xpYiB2ZXJzaW9uLiAgR2xpYiAyLjggd2FzIHJvdWdobHkgR25vbWUgMi4xMiA/CisgKiBXaGljaCB3YXMgcmVsZWFzZWQgd2l0aCBnbm9tZS1rZXlyaW5nIDAuNC4zID8/CisgKi8KKyNpZiBHTElCX01BSk9SX1ZFUlNJT04gPT0gMiAmJiBHTElCX01JTk9SX1ZFUlNJT04gPCA4CisKK3N0YXRpYyB2b2lkIGdub21lX2tleXJpbmdfZG9uZV9jYihHbm9tZUtleXJpbmdSZXN1bHQgcmVzdWx0LCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJZ3BvaW50ZXIgKmRhdGEgPSAoZ3BvaW50ZXIgKil1c2VyX2RhdGE7CisJaW50ICpkb25lID0gKGludCAqKWRhdGFbMF07CisJR25vbWVLZXlyaW5nUmVzdWx0ICpyID0gKEdub21lS2V5cmluZ1Jlc3VsdCAqKWRhdGFbMV07CisKKwkqciA9IHJlc3VsdDsKKwkqZG9uZSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX3JlcXVlc3RfY29tcGxldGlvbihpbnQgKmRvbmUpCit7CisJR01haW5Db250ZXh0ICptYyA9IGdfbWFpbl9jb250ZXh0X2RlZmF1bHQoKTsKKwl3aGlsZSAoISpkb25lKQorCQlnX21haW5fY29udGV4dF9pdGVyYXRpb24obWMsIFRSVUUpOworfQorCitzdGF0aWMgR25vbWVLZXlyaW5nUmVzdWx0IGdub21lX2tleXJpbmdfaXRlbV9kZWxldGVfc3luYyhjb25zdCBjaGFyICprZXlyaW5nLCBndWludDMyIGlkKQoreworCWludCBkb25lID0gMDsKKwlHbm9tZUtleXJpbmdSZXN1bHQgcmVzdWx0OworCWdwb2ludGVyIGRhdGFbXSA9IHsgJmRvbmUsICZyZXN1bHQgfTsKKworCWdub21lX2tleXJpbmdfaXRlbV9kZWxldGUoa2V5cmluZywgaWQsIGdub21lX2tleXJpbmdfZG9uZV9jYiwgZGF0YSwKKwkJTlVMTCk7CisKKwl3YWl0X2Zvcl9yZXF1ZXN0X2NvbXBsZXRpb24oJmRvbmUpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIFRoaXMgY3JlZGVudGlhbCBzdHJ1Y3QgYW5kIEFQSSBpcyBzaW1wbGlmaWVkIGZyb20gZ2l0J3MgY3JlZGVudGlhbC57aCxjfQorICovCitzdHJ1Y3QgY3JlZGVudGlhbCB7CisJY2hhciAqcHJvdG9jb2w7CisJY2hhciAqaG9zdDsKKwl1bnNpZ25lZCBzaG9ydCBwb3J0OworCWNoYXIgKnBhdGg7CisJY2hhciAqdXNlcm5hbWU7CisJY2hhciAqcGFzc3dvcmQ7Cit9OworCisjZGVmaW5lIENSRURFTlRJQUxfSU5JVCB7IE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwgfQorCit0eXBlZGVmIGludCAoKmNyZWRlbnRpYWxfb3BfY2IpKHN0cnVjdCBjcmVkZW50aWFsICopOworCitzdHJ1Y3QgY3JlZGVudGlhbF9vcGVyYXRpb24geworCWNoYXIgKm5hbWU7CisJY3JlZGVudGlhbF9vcF9jYiBvcDsKK307CisKKyNkZWZpbmUgQ1JFREVOVElBTF9PUF9FTkQgeyBOVUxMLCBOVUxMIH0KKworLyogLS0tLS0tLS0tLS0tLS0tLS0gR05PTUUgS2V5cmluZyBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogY3JlYXRlIGEgc3BlY2lhbCBrZXlyaW5nIG9wdGlvbiBzdHJpbmcsIGlmIHBhdGggaXMgZ2l2ZW4gKi8KK3N0YXRpYyBjaGFyICprZXlyaW5nX29iamVjdChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlpZiAoIWMtPnBhdGgpCisJCXJldHVybiBOVUxMOworCisJaWYgKGMtPnBvcnQpCisJCXJldHVybiBnX3N0cmR1cF9wcmludGYoIiVzOiVoZC8lcyIsIGMtPmhvc3QsIGMtPnBvcnQsIGMtPnBhdGgpOworCisJcmV0dXJuIGdfc3RyZHVwX3ByaW50ZigiJXMvJXMiLCBjLT5ob3N0LCBjLT5wYXRoKTsKK30KKworc3RhdGljIGludCBrZXlyaW5nX2dldChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwljaGFyICpvYmplY3QgPSBOVUxMOworCUdMaXN0ICplbnRyaWVzOworCUdub21lS2V5cmluZ05ldHdvcmtQYXNzd29yZERhdGEgKnBhc3N3b3JkX2RhdGE7CisJR25vbWVLZXlyaW5nUmVzdWx0IHJlc3VsdDsKKworCWlmICghYy0+cHJvdG9jb2wgfHwgIShjLT5ob3N0IHx8IGMtPnBhdGgpKQorCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJb2JqZWN0ID0ga2V5cmluZ19vYmplY3QoYyk7CisKKwlyZXN1bHQgPSBnbm9tZV9rZXlyaW5nX2ZpbmRfbmV0d29ya19wYXNzd29yZF9zeW5jKAorCQkJCWMtPnVzZXJuYW1lLAorCQkJCU5VTEwgLyogZG9tYWluICovLAorCQkJCWMtPmhvc3QsCisJCQkJb2JqZWN0LAorCQkJCWMtPnByb3RvY29sLAorCQkJCU5VTEwgLyogYXV0aHR5cGUgKi8sCisJCQkJYy0+cG9ydCwKKwkJCQkmZW50cmllcyk7CisKKwlnX2ZyZWUob2JqZWN0KTsKKworCWlmIChyZXN1bHQgPT0gR05PTUVfS0VZUklOR19SRVNVTFRfTk9fTUFUQ0gpCisJCXJldHVybiBFWElUX1NVQ0NFU1M7CisKKwlpZiAocmVzdWx0ID09IEdOT01FX0tFWVJJTkdfUkVTVUxUX0NBTkNFTExFRCkKKwkJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKworCWlmIChyZXN1bHQgIT0gR05PTUVfS0VZUklOR19SRVNVTFRfT0spIHsKKwkJZ19jcml0aWNhbCgiJXMiLCBnbm9tZV9rZXlyaW5nX3Jlc3VsdF90b19tZXNzYWdlKHJlc3VsdCkpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCS8qIHBpY2sgdGhlIGZpcnN0IG9uZSBmcm9tIHRoZSBsaXN0ICovCisJcGFzc3dvcmRfZGF0YSA9IChHbm9tZUtleXJpbmdOZXR3b3JrUGFzc3dvcmREYXRhICopZW50cmllcy0+ZGF0YTsKKworCWdub21lX2tleXJpbmdfbWVtb3J5X2ZyZWUoYy0+cGFzc3dvcmQpOworCWMtPnBhc3N3b3JkID0gZ25vbWVfa2V5cmluZ19tZW1vcnlfc3RyZHVwKHBhc3N3b3JkX2RhdGEtPnBhc3N3b3JkKTsKKworCWlmICghYy0+dXNlcm5hbWUpCisJCWMtPnVzZXJuYW1lID0gZ19zdHJkdXAocGFzc3dvcmRfZGF0YS0+dXNlcik7CisKKwlnbm9tZV9rZXlyaW5nX25ldHdvcmtfcGFzc3dvcmRfbGlzdF9mcmVlKGVudHJpZXMpOworCisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKworCitzdGF0aWMgaW50IGtleXJpbmdfc3RvcmUoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJZ3VpbnQzMiBpdGVtX2lkOworCWNoYXIgKm9iamVjdCA9IE5VTEw7CisJR25vbWVLZXlyaW5nUmVzdWx0IHJlc3VsdDsKKworCS8qCisJICogU2FuaXR5IGNoZWNrIHRoYXQgd2hhdCB3ZSBhcmUgc3RvcmluZyBpcyBhY3R1YWxseSBzZW5zaWJsZS4KKwkgKiBJbiBwYXJ0aWN1bGFyLCB3ZSBjYW4ndCBtYWtlIGEgVVJMIHdpdGhvdXQgYSBwcm90b2NvbCBmaWVsZC4KKwkgKiBXaXRob3V0IGVpdGhlciBhIGhvc3Qgb3IgcGF0aG5hbWUgKGRlcGVuZGluZyBvbiB0aGUgc2NoZW1lKSwKKwkgKiB3ZSBoYXZlIG5vIHByaW1hcnkga2V5LiBBbmQgd2l0aG91dCBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwKKwkgKiB3ZSBhcmUgbm90IGFjdHVhbGx5IHN0b3JpbmcgYSBjcmVkZW50aWFsLgorCSAqLworCWlmICghYy0+cHJvdG9jb2wgfHwgIShjLT5ob3N0IHx8IGMtPnBhdGgpIHx8CisJICAgICFjLT51c2VybmFtZSB8fCAhYy0+cGFzc3dvcmQpCisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisKKwlvYmplY3QgPSBrZXlyaW5nX29iamVjdChjKTsKKworCXJlc3VsdCA9IGdub21lX2tleXJpbmdfc2V0X25ldHdvcmtfcGFzc3dvcmRfc3luYygKKwkJCQlHTk9NRV9LRVlSSU5HX0RFRkFVTFQsCisJCQkJYy0+dXNlcm5hbWUsCisJCQkJTlVMTCAvKiBkb21haW4gKi8sCisJCQkJYy0+aG9zdCwKKwkJCQlvYmplY3QsCisJCQkJYy0+cHJvdG9jb2wsCisJCQkJTlVMTCAvKiBhdXRodHlwZSAqLywKKwkJCQljLT5wb3J0LAorCQkJCWMtPnBhc3N3b3JkLAorCQkJCSZpdGVtX2lkKTsKKworCWdfZnJlZShvYmplY3QpOworCisJaWYgKHJlc3VsdCAhPSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9PSyAmJgorCSAgICByZXN1bHQgIT0gR05PTUVfS0VZUklOR19SRVNVTFRfQ0FOQ0VMTEVEKSB7CisJCWdfY3JpdGljYWwoIiVzIiwgZ25vbWVfa2V5cmluZ19yZXN1bHRfdG9fbWVzc2FnZShyZXN1bHQpKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCitzdGF0aWMgaW50IGtleXJpbmdfZXJhc2Uoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJY2hhciAqb2JqZWN0ID0gTlVMTDsKKwlHTGlzdCAqZW50cmllczsKKwlHbm9tZUtleXJpbmdOZXR3b3JrUGFzc3dvcmREYXRhICpwYXNzd29yZF9kYXRhOworCUdub21lS2V5cmluZ1Jlc3VsdCByZXN1bHQ7CisKKwkvKgorCSAqIFNhbml0eSBjaGVjayB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgc29tZXRoaW5nIHRvIG1hdGNoCisJICogYWdhaW5zdC4gVGhlIGlucHV0IHdlIGdldCBpcyBhIHJlc3RyaWN0aXZlIHBhdHRlcm4sCisJICogc28gdGVjaG5pY2FsbHkgYSBibGFuayBjcmVkZW50aWFsIG1lYW5zICJlcmFzZSBldmVyeXRoaW5nIi4KKwkgKiBCdXQgaXQgaXMgdG9vIGVhc3kgdG8gYWNjaWRlbnRhbGx5IHNlbmQgdGhpcywgc2luY2UgaXQgaXMgZXF1aXZhbGVudAorCSAqIHRvIGVtcHR5IGlucHV0LiBTbyBleHBsaWNpdGx5IGRpc2FsbG93IGl0LCBhbmQgcmVxdWlyZSB0aGF0IHRoZQorCSAqIHBhdHRlcm4gaGF2ZSBzb21lIGFjdHVhbCBjb250ZW50IHRvIG1hdGNoLgorCSAqLworCWlmICghYy0+cHJvdG9jb2wgJiYgIWMtPmhvc3QgJiYgIWMtPnBhdGggJiYgIWMtPnVzZXJuYW1lKQorCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJb2JqZWN0ID0ga2V5cmluZ19vYmplY3QoYyk7CisKKwlyZXN1bHQgPSBnbm9tZV9rZXlyaW5nX2ZpbmRfbmV0d29ya19wYXNzd29yZF9zeW5jKAorCQkJCWMtPnVzZXJuYW1lLAorCQkJCU5VTEwgLyogZG9tYWluICovLAorCQkJCWMtPmhvc3QsCisJCQkJb2JqZWN0LAorCQkJCWMtPnByb3RvY29sLAorCQkJCU5VTEwgLyogYXV0aHR5cGUgKi8sCisJCQkJYy0+cG9ydCwKKwkJCQkmZW50cmllcyk7CisKKwlnX2ZyZWUob2JqZWN0KTsKKworCWlmIChyZXN1bHQgPT0gR05PTUVfS0VZUklOR19SRVNVTFRfTk9fTUFUQ0gpCisJCXJldHVybiBFWElUX1NVQ0NFU1M7CisKKwlpZiAocmVzdWx0ID09IEdOT01FX0tFWVJJTkdfUkVTVUxUX0NBTkNFTExFRCkKKwkJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKworCWlmIChyZXN1bHQgIT0gR05PTUVfS0VZUklOR19SRVNVTFRfT0spIHsKKwkJZ19jcml0aWNhbCgiJXMiLCBnbm9tZV9rZXlyaW5nX3Jlc3VsdF90b19tZXNzYWdlKHJlc3VsdCkpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCS8qIHBpY2sgdGhlIGZpcnN0IG9uZSBmcm9tIHRoZSBsaXN0IChkZWxldGUgYWxsIG1hdGNoZXM/KSAqLworCXBhc3N3b3JkX2RhdGEgPSAoR25vbWVLZXlyaW5nTmV0d29ya1Bhc3N3b3JkRGF0YSAqKWVudHJpZXMtPmRhdGE7CisKKwlyZXN1bHQgPSBnbm9tZV9rZXlyaW5nX2l0ZW1fZGVsZXRlX3N5bmMoCisJCXBhc3N3b3JkX2RhdGEtPmtleXJpbmcsIHBhc3N3b3JkX2RhdGEtPml0ZW1faWQpOworCisJZ25vbWVfa2V5cmluZ19uZXR3b3JrX3Bhc3N3b3JkX2xpc3RfZnJlZShlbnRyaWVzKTsKKworCWlmIChyZXN1bHQgIT0gR05PTUVfS0VZUklOR19SRVNVTFRfT0spIHsKKwkJZ19jcml0aWNhbCgiJXMiLCBnbm9tZV9rZXlyaW5nX3Jlc3VsdF90b19tZXNzYWdlKHJlc3VsdCkpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKKy8qCisgKiBUYWJsZSB3aXRoIGhlbHBlciBvcGVyYXRpb24gY2FsbGJhY2tzLCB1c2VkIGJ5IGdlbmVyaWMKKyAqIGNyZWRlbnRpYWwgaGVscGVyIG1haW4gZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY3JlZGVudGlhbF9vcGVyYXRpb24gY29uc3QgY3JlZGVudGlhbF9oZWxwZXJfb3BzW10gPSB7CisJeyAiZ2V0IiwgICBrZXlyaW5nX2dldCB9LAorCXsgInN0b3JlIiwga2V5cmluZ19zdG9yZSB9LAorCXsgImVyYXNlIiwga2V5cmluZ19lcmFzZSB9LAorCUNSRURFTlRJQUxfT1BfRU5ECit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0gY3JlZGVudGlhbCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkIGNyZWRlbnRpYWxfaW5pdChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWRlbnRpYWxfY2xlYXIoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJZ19mcmVlKGMtPnByb3RvY29sKTsKKwlnX2ZyZWUoYy0+aG9zdCk7CisJZ19mcmVlKGMtPnBhdGgpOworCWdfZnJlZShjLT51c2VybmFtZSk7CisJZ25vbWVfa2V5cmluZ19tZW1vcnlfZnJlZShjLT5wYXNzd29yZCk7CisKKwljcmVkZW50aWFsX2luaXQoYyk7Cit9CisKK3N0YXRpYyBpbnQgY3JlZGVudGlhbF9yZWFkKHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWNoYXIgKmJ1ZjsKKwlzaXplX3QgbGluZV9sZW47CisJY2hhciAqa2V5OworCWNoYXIgKnZhbHVlOworCisJa2V5ID0gYnVmID0gZ25vbWVfa2V5cmluZ19tZW1vcnlfYWxsb2MoMTAyNCk7CisKKwl3aGlsZSAoZmdldHMoYnVmLCAxMDI0LCBzdGRpbikpIHsKKwkJbGluZV9sZW4gPSBzdHJsZW4oYnVmKTsKKworCQlpZiAobGluZV9sZW4gJiYgYnVmW2xpbmVfbGVuLTFdID09ICdcbicpCisJCQlidWZbLS1saW5lX2xlbl0gPSAnXDAnOworCisJCWlmICghbGluZV9sZW4pCisJCQlicmVhazsKKworCQl2YWx1ZSA9IHN0cmNocihidWYsICc9Jyk7CisJCWlmICghdmFsdWUpIHsKKwkJCWdfd2FybmluZygiaW52YWxpZCBjcmVkZW50aWFsIGxpbmU6ICVzIiwga2V5KTsKKwkJCWdub21lX2tleXJpbmdfbWVtb3J5X2ZyZWUoYnVmKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQkqdmFsdWUrKyA9ICdcMCc7CisKKwkJaWYgKCFzdHJjbXAoa2V5LCAicHJvdG9jb2wiKSkgeworCQkJZ19mcmVlKGMtPnByb3RvY29sKTsKKwkJCWMtPnByb3RvY29sID0gZ19zdHJkdXAodmFsdWUpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAiaG9zdCIpKSB7CisJCQlnX2ZyZWUoYy0+aG9zdCk7CisJCQljLT5ob3N0ID0gZ19zdHJkdXAodmFsdWUpOworCQkJdmFsdWUgPSBzdHJyY2hyKGMtPmhvc3QsICc6Jyk7CisJCQlpZiAodmFsdWUpIHsKKwkJCQkqdmFsdWUrKyA9ICdcMCc7CisJCQkJYy0+cG9ydCA9IGF0b2kodmFsdWUpOworCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAicGF0aCIpKSB7CisJCQlnX2ZyZWUoYy0+cGF0aCk7CisJCQljLT5wYXRoID0gZ19zdHJkdXAodmFsdWUpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAidXNlcm5hbWUiKSkgeworCQkJZ19mcmVlKGMtPnVzZXJuYW1lKTsKKwkJCWMtPnVzZXJuYW1lID0gZ19zdHJkdXAodmFsdWUpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAicGFzc3dvcmQiKSkgeworCQkJZ25vbWVfa2V5cmluZ19tZW1vcnlfZnJlZShjLT5wYXNzd29yZCk7CisJCQljLT5wYXNzd29yZCA9IGdub21lX2tleXJpbmdfbWVtb3J5X3N0cmR1cCh2YWx1ZSk7CisJCQl3aGlsZSAoKnZhbHVlKQorCQkJCSp2YWx1ZSsrID0gJ1wwJzsKKwkJfQorCQkvKgorCQkgKiBJZ25vcmUgb3RoZXIgbGluZXM7IHdlIGRvbid0IGtub3cgd2hhdCB0aGV5IG1lYW4sIGJ1dAorCQkgKiB0aGlzIGZ1dHVyZS1wcm9vZnMgdXMgd2hlbiBsYXRlciB2ZXJzaW9ucyBvZiBnaXQgZG8KKwkJICogbGVhcm4gbmV3IGxpbmVzLCBhbmQgdGhlIGhlbHBlcnMgYXJlIHVwZGF0ZWQgdG8gbWF0Y2guCisJCSAqLworCX0KKworCWdub21lX2tleXJpbmdfbWVtb3J5X2ZyZWUoYnVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX3dyaXRlX2l0ZW0oRklMRSAqZnAsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuOworCWZwcmludGYoZnAsICIlcz0lc1xuIiwga2V5LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWRlbnRpYWxfd3JpdGUoY29uc3Qgc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJLyogb25seSB3cml0ZSB1c2VybmFtZS9wYXNzd29yZCwgaWYgc2V0ICovCisJY3JlZGVudGlhbF93cml0ZV9pdGVtKHN0ZG91dCwgInVzZXJuYW1lIiwgYy0+dXNlcm5hbWUpOworCWNyZWRlbnRpYWxfd3JpdGVfaXRlbShzdGRvdXQsICJwYXNzd29yZCIsIGMtPnBhc3N3b3JkKTsKK30KKworc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgY3JlZGVudGlhbF9vcGVyYXRpb24gY29uc3QgKnRyeV9vcCA9IGNyZWRlbnRpYWxfaGVscGVyX29wczsKKwljb25zdCBjaGFyICpiYXNlbmFtZSA9IHN0cnJjaHIobmFtZSwgJy8nKTsKKworCWJhc2VuYW1lID0gKGJhc2VuYW1lKSA/IGJhc2VuYW1lICsgMSA6IG5hbWU7CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgPCIsIGJhc2VuYW1lKTsKKwl3aGlsZSAodHJ5X29wLT5uYW1lKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLCAodHJ5X29wKyspLT5uYW1lKTsKKwkJaWYgKHRyeV9vcC0+bmFtZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiJXMiLCAifCIpOworCX0KKwlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgIj5cbiIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCByZXQgPSBFWElUX1NVQ0NFU1M7CisKKwlzdHJ1Y3QgY3JlZGVudGlhbF9vcGVyYXRpb24gY29uc3QgKnRyeV9vcCA9IGNyZWRlbnRpYWxfaGVscGVyX29wczsKKwlzdHJ1Y3QgY3JlZGVudGlhbCBjcmVkID0gQ1JFREVOVElBTF9JTklUOworCisJaWYgKCFhcmd2WzFdKSB7CisJCXVzYWdlKGFyZ3ZbMF0pOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJZ19zZXRfYXBwbGljYXRpb25fbmFtZSgiR2l0IENyZWRlbnRpYWwgSGVscGVyIik7CisKKwkvKiBsb29rdXAgb3BlcmF0aW9uIGNhbGxiYWNrICovCisJd2hpbGUgKHRyeV9vcC0+bmFtZSAmJiBzdHJjbXAoYXJndlsxXSwgdHJ5X29wLT5uYW1lKSkKKwkJdHJ5X29wKys7CisKKwkvKiB1bnN1cHBvcnRlZCBvcGVyYXRpb24gZ2l2ZW4gLS0gaWdub3JlIHNpbGVudGx5ICovCisJaWYgKCF0cnlfb3AtPm5hbWUgfHwgIXRyeV9vcC0+b3ApCisJCWdvdG8gb3V0OworCisJcmV0ID0gY3JlZGVudGlhbF9yZWFkKCZjcmVkKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIHBlcmZvcm0gY3JlZGVudGlhbCBvcGVyYXRpb24gKi8KKwlyZXQgPSAoKnRyeV9vcC0+b3ApKCZjcmVkKTsKKworCWNyZWRlbnRpYWxfd3JpdGUoJmNyZWQpOworCitvdXQ6CisJY3JlZGVudGlhbF9jbGVhcigmY3JlZCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9saWJzZWNyZXQvTWFrZWZpbGUgYi9jb250cmliL2NyZWRlbnRpYWwvbGlic2VjcmV0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjc1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvbGlic2VjcmV0L01ha2VmaWxlCkBAIC0wLDAgKzEsMjUgQEAKK01BSU46PWdpdC1jcmVkZW50aWFsLWxpYnNlY3JldAorYWxsOjogJChNQUlOKQorCitDQyA9IGdjYworUk0gPSBybSAtZgorQ0ZMQUdTID0gLWcgLU8yIC1XYWxsCitQS0dfQ09ORklHID0gcGtnLWNvbmZpZworCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsKKworSU5DUzo9JChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGxpYnNlY3JldC0xIGdsaWItMi4wKQorTElCUzo9JChzaGVsbCAkKFBLR19DT05GSUcpIC0tbGlicyBsaWJzZWNyZXQtMSBnbGliLTIuMCkKKworU1JDUzo9JChNQUlOKS5jCitPQkpTOj0kKFNSQ1M6LmM9Lm8pCisKKyUubzogJS5jCisJJChDQykgJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoSU5DUykgLW8gJEAgLWMgJDwKKworJChNQUlOKTogJChPQkpTKQorCSQoQ0MpIC1vICRAICQoTERGTEFHUykgJF4gJChMSUJTKQorCitjbGVhbjoKKwlAJChSTSkgJChNQUlOKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvbGlic2VjcmV0L2dpdC1jcmVkZW50aWFsLWxpYnNlY3JldC5jIGIvY29udHJpYi9jcmVkZW50aWFsL2xpYnNlY3JldC9naXQtY3JlZGVudGlhbC1saWJzZWNyZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjU5OGI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL2xpYnNlY3JldC9naXQtY3JlZGVudGlhbC1saWJzZWNyZXQuYwpAQCAtMCwwICsxLDM2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBKb2huIFN6YWttZWlzdGVyIDxqb2huQHN6YWttZWlzdGVyLm5ldD4KKyAqICAgICAgICAgICAgICAgMjAxMiBQaGlsaXBwIEEuIEhhcnRtYW5uIDxwYWhAcW8uY3g+CisgKiAgICAgICAgICAgICAgIDIwMTYgTWFudGFzIE1pa3VsxJduYXMgPGdyYXdpdHlAZ21haWwuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyoKKyAqIENyZWRpdHM6CisgKiAtIEdOT01FIEtleXJpbmcgQVBJIGhhbmRsaW5nIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBKb2huIFN6YWttZWlzdGVyCisgKiAtIHBvcnRlZCB0byBjcmVkZW50aWFsIGhlbHBlciBBUEkgYnkgUGhpbGlwcCBBLiBIYXJ0bWFubgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxsaWJzZWNyZXQvc2VjcmV0Lmg+CisKKy8qCisgKiBUaGlzIGNyZWRlbnRpYWwgc3RydWN0IGFuZCBBUEkgaXMgc2ltcGxpZmllZCBmcm9tIGdpdCdzIGNyZWRlbnRpYWwue2gsY30KKyAqLworc3RydWN0IGNyZWRlbnRpYWwgeworCWNoYXIgKnByb3RvY29sOworCWNoYXIgKmhvc3Q7CisJdW5zaWduZWQgc2hvcnQgcG9ydDsKKwljaGFyICpwYXRoOworCWNoYXIgKnVzZXJuYW1lOworCWNoYXIgKnBhc3N3b3JkOworfTsKKworI2RlZmluZSBDUkVERU5USUFMX0lOSVQgeyBOVUxMLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMIH0KKwordHlwZWRlZiBpbnQgKCpjcmVkZW50aWFsX29wX2NiKShzdHJ1Y3QgY3JlZGVudGlhbCAqKTsKKworc3RydWN0IGNyZWRlbnRpYWxfb3BlcmF0aW9uIHsKKwljaGFyICpuYW1lOworCWNyZWRlbnRpYWxfb3BfY2Igb3A7Cit9OworCisjZGVmaW5lIENSRURFTlRJQUxfT1BfRU5EIHsgTlVMTCwgTlVMTCB9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIFNlY3JldCBTZXJ2aWNlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY2hhciAqbWFrZV9sYWJlbChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlpZiAoYy0+cG9ydCkKKwkJcmV0dXJuIGdfc3RyZHVwX3ByaW50ZigiR2l0OiAlczovLyVzOiVodS8lcyIsCisJCQkJCWMtPnByb3RvY29sLCBjLT5ob3N0LCBjLT5wb3J0LCBjLT5wYXRoID8gYy0+cGF0aCA6ICIiKTsKKwllbHNlCisJCXJldHVybiBnX3N0cmR1cF9wcmludGYoIkdpdDogJXM6Ly8lcy8lcyIsCisJCQkJCWMtPnByb3RvY29sLCBjLT5ob3N0LCBjLT5wYXRoID8gYy0+cGF0aCA6ICIiKTsKK30KKworc3RhdGljIEdIYXNoVGFibGUgKm1ha2VfYXR0cl9saXN0KHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCUdIYXNoVGFibGUgKmFsID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBOVUxMLCBnX2ZyZWUpOworCisJaWYgKGMtPnVzZXJuYW1lKQorCQlnX2hhc2hfdGFibGVfaW5zZXJ0KGFsLCAidXNlciIsIGdfc3RyZHVwKGMtPnVzZXJuYW1lKSk7CisJaWYgKGMtPnByb3RvY29sKQorCQlnX2hhc2hfdGFibGVfaW5zZXJ0KGFsLCAicHJvdG9jb2wiLCBnX3N0cmR1cChjLT5wcm90b2NvbCkpOworCWlmIChjLT5ob3N0KQorCQlnX2hhc2hfdGFibGVfaW5zZXJ0KGFsLCAic2VydmVyIiwgZ19zdHJkdXAoYy0+aG9zdCkpOworCWlmIChjLT5wb3J0KQorCQlnX2hhc2hfdGFibGVfaW5zZXJ0KGFsLCAicG9ydCIsIGdfc3RyZHVwX3ByaW50ZigiJWh1IiwgYy0+cG9ydCkpOworCWlmIChjLT5wYXRoKQorCQlnX2hhc2hfdGFibGVfaW5zZXJ0KGFsLCAib2JqZWN0IiwgZ19zdHJkdXAoYy0+cGF0aCkpOworCisJcmV0dXJuIGFsOworfQorCitzdGF0aWMgaW50IGtleXJpbmdfZ2V0KHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCVNlY3JldFNlcnZpY2UgKnNlcnZpY2UgPSBOVUxMOworCUdIYXNoVGFibGUgKmF0dHJpYnV0ZXMgPSBOVUxMOworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCUdMaXN0ICppdGVtcyA9IE5VTEw7CisKKwlpZiAoIWMtPnByb3RvY29sIHx8ICEoYy0+aG9zdCB8fCBjLT5wYXRoKSkKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKworCXNlcnZpY2UgPSBzZWNyZXRfc2VydmljZV9nZXRfc3luYygwLCBOVUxMLCAmZXJyb3IpOworCWlmIChlcnJvciAhPSBOVUxMKSB7CisJCWdfY3JpdGljYWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIFNlY3JldCBTZXJ2aWNlOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKwkJZ19lcnJvcl9mcmVlKGVycm9yKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlhdHRyaWJ1dGVzID0gbWFrZV9hdHRyX2xpc3QoYyk7CisJaXRlbXMgPSBzZWNyZXRfc2VydmljZV9zZWFyY2hfc3luYyhzZXJ2aWNlLAorCQkJCQkgICBTRUNSRVRfU0NIRU1BX0NPTVBBVF9ORVRXT1JLLAorCQkJCQkgICBhdHRyaWJ1dGVzLAorCQkJCQkgICBTRUNSRVRfU0VBUkNIX0xPQURfU0VDUkVUUyB8IFNFQ1JFVF9TRUFSQ0hfVU5MT0NLLAorCQkJCQkgICBOVUxMLAorCQkJCQkgICAmZXJyb3IpOworCWdfaGFzaF90YWJsZV91bnJlZihhdHRyaWJ1dGVzKTsKKwlpZiAoZXJyb3IgIT0gTlVMTCkgeworCQlnX2NyaXRpY2FsKCJsb29rdXAgZmFpbGVkOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKwkJZ19lcnJvcl9mcmVlKGVycm9yKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlpZiAoaXRlbXMgIT0gTlVMTCkgeworCQlTZWNyZXRJdGVtICppdGVtOworCQlTZWNyZXRWYWx1ZSAqc2VjcmV0OworCQljb25zdCBjaGFyICpzOworCisJCWl0ZW0gPSBpdGVtcy0+ZGF0YTsKKwkJc2VjcmV0ID0gc2VjcmV0X2l0ZW1fZ2V0X3NlY3JldChpdGVtKTsKKwkJYXR0cmlidXRlcyA9IHNlY3JldF9pdGVtX2dldF9hdHRyaWJ1dGVzKGl0ZW0pOworCisJCXMgPSBnX2hhc2hfdGFibGVfbG9va3VwKGF0dHJpYnV0ZXMsICJ1c2VyIik7CisJCWlmIChzKSB7CisJCQlnX2ZyZWUoYy0+dXNlcm5hbWUpOworCQkJYy0+dXNlcm5hbWUgPSBnX3N0cmR1cChzKTsKKwkJfQorCisJCXMgPSBzZWNyZXRfdmFsdWVfZ2V0X3RleHQoc2VjcmV0KTsKKwkJaWYgKHMpIHsKKwkJCWdfZnJlZShjLT5wYXNzd29yZCk7CisJCQljLT5wYXNzd29yZCA9IGdfc3RyZHVwKHMpOworCQl9CisKKwkJZ19oYXNoX3RhYmxlX3VucmVmKGF0dHJpYnV0ZXMpOworCQlzZWNyZXRfdmFsdWVfdW5yZWYoc2VjcmV0KTsKKwkJZ19saXN0X2ZyZWVfZnVsbChpdGVtcywgZ19vYmplY3RfdW5yZWYpOworCX0KKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKKworc3RhdGljIGludCBrZXlyaW5nX3N0b3JlKHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWNoYXIgKmxhYmVsID0gTlVMTDsKKwlHSGFzaFRhYmxlICphdHRyaWJ1dGVzID0gTlVMTDsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCS8qCisJICogU2FuaXR5IGNoZWNrIHRoYXQgd2hhdCB3ZSBhcmUgc3RvcmluZyBpcyBhY3R1YWxseSBzZW5zaWJsZS4KKwkgKiBJbiBwYXJ0aWN1bGFyLCB3ZSBjYW4ndCBtYWtlIGEgVVJMIHdpdGhvdXQgYSBwcm90b2NvbCBmaWVsZC4KKwkgKiBXaXRob3V0IGVpdGhlciBhIGhvc3Qgb3IgcGF0aG5hbWUgKGRlcGVuZGluZyBvbiB0aGUgc2NoZW1lKSwKKwkgKiB3ZSBoYXZlIG5vIHByaW1hcnkga2V5LiBBbmQgd2l0aG91dCBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwKKwkgKiB3ZSBhcmUgbm90IGFjdHVhbGx5IHN0b3JpbmcgYSBjcmVkZW50aWFsLgorCSAqLworCWlmICghYy0+cHJvdG9jb2wgfHwgIShjLT5ob3N0IHx8IGMtPnBhdGgpIHx8CisJICAgICFjLT51c2VybmFtZSB8fCAhYy0+cGFzc3dvcmQpCisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisKKwlsYWJlbCA9IG1ha2VfbGFiZWwoYyk7CisJYXR0cmlidXRlcyA9IG1ha2VfYXR0cl9saXN0KGMpOworCXNlY3JldF9wYXNzd29yZF9zdG9yZXZfc3luYyhTRUNSRVRfU0NIRU1BX0NPTVBBVF9ORVRXT1JLLAorCQkJCSAgICBhdHRyaWJ1dGVzLAorCQkJCSAgICBOVUxMLAorCQkJCSAgICBsYWJlbCwKKwkJCQkgICAgYy0+cGFzc3dvcmQsCisJCQkJICAgIE5VTEwsCisJCQkJICAgICZlcnJvcik7CisJZ19mcmVlKGxhYmVsKTsKKwlnX2hhc2hfdGFibGVfdW5yZWYoYXR0cmlidXRlcyk7CisKKwlpZiAoZXJyb3IgIT0gTlVMTCkgeworCQlnX2NyaXRpY2FsKCJzdG9yZSBmYWlsZWQ6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworCQlnX2Vycm9yX2ZyZWUoZXJyb3IpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQga2V5cmluZ19lcmFzZShzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlHSGFzaFRhYmxlICphdHRyaWJ1dGVzID0gTlVMTDsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCS8qCisJICogU2FuaXR5IGNoZWNrIHRoYXQgd2UgYWN0dWFsbHkgaGF2ZSBzb21ldGhpbmcgdG8gbWF0Y2gKKwkgKiBhZ2FpbnN0LiBUaGUgaW5wdXQgd2UgZ2V0IGlzIGEgcmVzdHJpY3RpdmUgcGF0dGVybiwKKwkgKiBzbyB0ZWNobmljYWxseSBhIGJsYW5rIGNyZWRlbnRpYWwgbWVhbnMgImVyYXNlIGV2ZXJ5dGhpbmciLgorCSAqIEJ1dCBpdCBpcyB0b28gZWFzeSB0byBhY2NpZGVudGFsbHkgc2VuZCB0aGlzLCBzaW5jZSBpdCBpcyBlcXVpdmFsZW50CisJICogdG8gZW1wdHkgaW5wdXQuIFNvIGV4cGxpY2l0bHkgZGlzYWxsb3cgaXQsIGFuZCByZXF1aXJlIHRoYXQgdGhlCisJICogcGF0dGVybiBoYXZlIHNvbWUgYWN0dWFsIGNvbnRlbnQgdG8gbWF0Y2guCisJICovCisJaWYgKCFjLT5wcm90b2NvbCAmJiAhYy0+aG9zdCAmJiAhYy0+cGF0aCAmJiAhYy0+dXNlcm5hbWUpCisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisKKwlhdHRyaWJ1dGVzID0gbWFrZV9hdHRyX2xpc3QoYyk7CisJc2VjcmV0X3Bhc3N3b3JkX2NsZWFydl9zeW5jKFNFQ1JFVF9TQ0hFTUFfQ09NUEFUX05FVFdPUkssCisJCQkJICAgIGF0dHJpYnV0ZXMsCisJCQkJICAgIE5VTEwsCisJCQkJICAgICZlcnJvcik7CisJZ19oYXNoX3RhYmxlX3VucmVmKGF0dHJpYnV0ZXMpOworCisJaWYgKGVycm9yICE9IE5VTEwpIHsKKwkJZ19jcml0aWNhbCgiZXJhc2UgZmFpbGVkOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKwkJZ19lcnJvcl9mcmVlKGVycm9yKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCisvKgorICogVGFibGUgd2l0aCBoZWxwZXIgb3BlcmF0aW9uIGNhbGxiYWNrcywgdXNlZCBieSBnZW5lcmljCisgKiBjcmVkZW50aWFsIGhlbHBlciBtYWluIGZ1bmN0aW9uLgorICovCitzdGF0aWMgc3RydWN0IGNyZWRlbnRpYWxfb3BlcmF0aW9uIGNvbnN0IGNyZWRlbnRpYWxfaGVscGVyX29wc1tdID0geworCXsgImdldCIsICAga2V5cmluZ19nZXQgfSwKKwl7ICJzdG9yZSIsIGtleXJpbmdfc3RvcmUgfSwKKwl7ICJlcmFzZSIsIGtleXJpbmdfZXJhc2UgfSwKKwlDUkVERU5USUFMX09QX0VORAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tIGNyZWRlbnRpYWwgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX2luaXQoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworfQorCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX2NsZWFyKHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWdfZnJlZShjLT5wcm90b2NvbCk7CisJZ19mcmVlKGMtPmhvc3QpOworCWdfZnJlZShjLT5wYXRoKTsKKwlnX2ZyZWUoYy0+dXNlcm5hbWUpOworCWdfZnJlZShjLT5wYXNzd29yZCk7CisKKwljcmVkZW50aWFsX2luaXQoYyk7Cit9CisKK3N0YXRpYyBpbnQgY3JlZGVudGlhbF9yZWFkKHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWNoYXIgKmJ1ZjsKKwlzaXplX3QgbGluZV9sZW47CisJY2hhciAqa2V5OworCWNoYXIgKnZhbHVlOworCisJa2V5ID0gYnVmID0gZ19tYWxsb2MoMTAyNCk7CisKKwl3aGlsZSAoZmdldHMoYnVmLCAxMDI0LCBzdGRpbikpIHsKKwkJbGluZV9sZW4gPSBzdHJsZW4oYnVmKTsKKworCQlpZiAobGluZV9sZW4gJiYgYnVmW2xpbmVfbGVuLTFdID09ICdcbicpCisJCQlidWZbLS1saW5lX2xlbl0gPSAnXDAnOworCisJCWlmICghbGluZV9sZW4pCisJCQlicmVhazsKKworCQl2YWx1ZSA9IHN0cmNocihidWYsICc9Jyk7CisJCWlmICghdmFsdWUpIHsKKwkJCWdfd2FybmluZygiaW52YWxpZCBjcmVkZW50aWFsIGxpbmU6ICVzIiwga2V5KTsKKwkJCWdfZnJlZShidWYpOworCQkJcmV0dXJuIC0xOworCQl9CisJCSp2YWx1ZSsrID0gJ1wwJzsKKworCQlpZiAoIXN0cmNtcChrZXksICJwcm90b2NvbCIpKSB7CisJCQlnX2ZyZWUoYy0+cHJvdG9jb2wpOworCQkJYy0+cHJvdG9jb2wgPSBnX3N0cmR1cCh2YWx1ZSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJob3N0IikpIHsKKwkJCWdfZnJlZShjLT5ob3N0KTsKKwkJCWMtPmhvc3QgPSBnX3N0cmR1cCh2YWx1ZSk7CisJCQl2YWx1ZSA9IHN0cnJjaHIoYy0+aG9zdCwgJzonKTsKKwkJCWlmICh2YWx1ZSkgeworCQkJCSp2YWx1ZSsrID0gJ1wwJzsKKwkJCQljLT5wb3J0ID0gYXRvaSh2YWx1ZSk7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJwYXRoIikpIHsKKwkJCWdfZnJlZShjLT5wYXRoKTsKKwkJCWMtPnBhdGggPSBnX3N0cmR1cCh2YWx1ZSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJ1c2VybmFtZSIpKSB7CisJCQlnX2ZyZWUoYy0+dXNlcm5hbWUpOworCQkJYy0+dXNlcm5hbWUgPSBnX3N0cmR1cCh2YWx1ZSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJwYXNzd29yZCIpKSB7CisJCQlnX2ZyZWUoYy0+cGFzc3dvcmQpOworCQkJYy0+cGFzc3dvcmQgPSBnX3N0cmR1cCh2YWx1ZSk7CisJCQl3aGlsZSAoKnZhbHVlKQorCQkJCSp2YWx1ZSsrID0gJ1wwJzsKKwkJfQorCQkvKgorCQkgKiBJZ25vcmUgb3RoZXIgbGluZXM7IHdlIGRvbid0IGtub3cgd2hhdCB0aGV5IG1lYW4sIGJ1dAorCQkgKiB0aGlzIGZ1dHVyZS1wcm9vZnMgdXMgd2hlbiBsYXRlciB2ZXJzaW9ucyBvZiBnaXQgZG8KKwkJICogbGVhcm4gbmV3IGxpbmVzLCBhbmQgdGhlIGhlbHBlcnMgYXJlIHVwZGF0ZWQgdG8gbWF0Y2guCisJCSAqLworCX0KKworCWdfZnJlZShidWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWRlbnRpYWxfd3JpdGVfaXRlbShGSUxFICpmcCwgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm47CisJZnByaW50ZihmcCwgIiVzPSVzXG4iLCBrZXksIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF93cml0ZShjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwkvKiBvbmx5IHdyaXRlIHVzZXJuYW1lL3Bhc3N3b3JkLCBpZiBzZXQgKi8KKwljcmVkZW50aWFsX3dyaXRlX2l0ZW0oc3Rkb3V0LCAidXNlcm5hbWUiLCBjLT51c2VybmFtZSk7CisJY3JlZGVudGlhbF93cml0ZV9pdGVtKHN0ZG91dCwgInBhc3N3b3JkIiwgYy0+cGFzc3dvcmQpOworfQorCitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBjcmVkZW50aWFsX29wZXJhdGlvbiBjb25zdCAqdHJ5X29wID0gY3JlZGVudGlhbF9oZWxwZXJfb3BzOworCWNvbnN0IGNoYXIgKmJhc2VuYW1lID0gc3RycmNocihuYW1lLCAnLycpOworCisJYmFzZW5hbWUgPSAoYmFzZW5hbWUpID8gYmFzZW5hbWUgKyAxIDogbmFtZTsKKwlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlcyA8IiwgYmFzZW5hbWUpOworCXdoaWxlICh0cnlfb3AtPm5hbWUpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsICh0cnlfb3ArKyktPm5hbWUpOworCQlpZiAodHJ5X29wLT5uYW1lKQorCQkJZnByaW50ZihzdGRlcnIsICIlcyIsICJ8Iik7CisJfQorCWZwcmludGYoc3RkZXJyLCAiJXMiLCAiPlxuIik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IHJldCA9IEVYSVRfU1VDQ0VTUzsKKworCXN0cnVjdCBjcmVkZW50aWFsX29wZXJhdGlvbiBjb25zdCAqdHJ5X29wID0gY3JlZGVudGlhbF9oZWxwZXJfb3BzOworCXN0cnVjdCBjcmVkZW50aWFsIGNyZWQgPSBDUkVERU5USUFMX0lOSVQ7CisKKwlpZiAoIWFyZ3ZbMV0pIHsKKwkJdXNhZ2UoYXJndlswXSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlnX3NldF9hcHBsaWNhdGlvbl9uYW1lKCJHaXQgQ3JlZGVudGlhbCBIZWxwZXIiKTsKKworCS8qIGxvb2t1cCBvcGVyYXRpb24gY2FsbGJhY2sgKi8KKwl3aGlsZSAodHJ5X29wLT5uYW1lICYmIHN0cmNtcChhcmd2WzFdLCB0cnlfb3AtPm5hbWUpKQorCQl0cnlfb3ArKzsKKworCS8qIHVuc3VwcG9ydGVkIG9wZXJhdGlvbiBnaXZlbiAtLSBpZ25vcmUgc2lsZW50bHkgKi8KKwlpZiAoIXRyeV9vcC0+bmFtZSB8fCAhdHJ5X29wLT5vcCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBjcmVkZW50aWFsX3JlYWQoJmNyZWQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogcGVyZm9ybSBjcmVkZW50aWFsIG9wZXJhdGlvbiAqLworCXJldCA9ICgqdHJ5X29wLT5vcCkoJmNyZWQpOworCisJY3JlZGVudGlhbF93cml0ZSgmY3JlZCk7CisKK291dDoKKwljcmVkZW50aWFsX2NsZWFyKCZjcmVkKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL25ldHJjLy5naXRpZ25vcmUgYi9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDFjZGRlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorZ2l0LWNyZWRlbnRpYWwtbmV0cmMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy9NYWtlZmlsZSBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjg0ZmI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL01ha2VmaWxlCkBAIC0wLDAgKzEsMzAgQEAKKyMgVGhlIGRlZmF1bHQgdGFyZ2V0IG9mIHRoaXMgTWFrZWZpbGUgaXMuLi4KK2FsbDo6CisKK1NDUklQVF9QRVJMID0gZ2l0LWNyZWRlbnRpYWwtbmV0cmMucGVybAorR0lUX1JPT1RfRElSID0gLi4vLi4vLi4KK0hFUkUgPSBjb250cmliL2NyZWRlbnRpYWwvbmV0cmMKKworU0NSSVBUX1BFUkxfRlVMTCA9ICQocGF0c3Vic3QgJSwkKEhFUkUpLyUsJChTQ1JJUFRfUEVSTCkpCisKK2FsbDo6IGJ1aWxkCisKK2J1aWxkOgorCSQoTUFLRSkgLUMgJChHSVRfUk9PVF9ESVIpIFNDUklQVF9QRVJMPSIkKFNDUklQVF9QRVJMX0ZVTEwpIiBcCisgICAgICAgICAgICAgICAgYnVpbGQtcGVybC1zY3JpcHQKKworaW5zdGFsbDogYnVpbGQKKwkkKE1BS0UpIC1DICQoR0lUX1JPT1RfRElSKSBTQ1JJUFRfUEVSTD0iJChTQ1JJUFRfUEVSTF9GVUxMKSIgXAorICAgICAgICAgICAgICAgIGluc3RhbGwtcGVybC1zY3JpcHQKKworY2xlYW46CisJJChNQUtFKSAtQyAkKEdJVF9ST09UX0RJUikgU0NSSVBUX1BFUkw9IiQoU0NSSVBUX1BFUkxfRlVMTCkiIFwKKyAgICAgICAgICAgICAgICBjbGVhbi1wZXJsLXNjcmlwdAorCit0ZXN0OiBidWlsZAorCS4vdC1naXQtY3JlZGVudGlhbC1uZXRyYy5zaAorCit0ZXN0dmVyYm9zZTogYnVpbGQKKwkuL3QtZ2l0LWNyZWRlbnRpYWwtbmV0cmMuc2ggLWQgLXYKKworLlBIT05ZOiBhbGwgYnVpbGQgaW5zdGFsbCBjbGVhbiB0ZXN0IHRlc3R2ZXJib3NlCmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvZ2l0LWNyZWRlbnRpYWwtbmV0cmMucGVybCBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy9naXQtY3JlZGVudGlhbC1uZXRyYy5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJjNTdjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvZ2l0LWNyZWRlbnRpYWwtbmV0cmMucGVybApAQCAtMCwwICsxLDQ0MCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgR2l0OworCitteSAkVkVSU0lPTiA9ICIwLjIiOworCitteSAlb3B0aW9ucyA9ICgKKwkgICAgICAgaGVscCA9PiAwLAorCSAgICAgICBkZWJ1ZyA9PiAwLAorCSAgICAgICB2ZXJib3NlID0+IDAsCisJICAgICAgIGluc2VjdXJlID0+IDAsCisJICAgICAgIGZpbGUgPT4gW10sCisKKwkgICAgICAgIyBpZGVudGljYWwgdG9rZW4gbWFwcywgZS5nLiBob3N0IC0+IGhvc3QsIHdpbGwgYmUgaW5zZXJ0ZWQgbGF0ZXIKKwkgICAgICAgdG1hcCA9PiB7CisJCQlwb3J0ID0+ICdwcm90b2NvbCcsCisJCQltYWNoaW5lID0+ICdob3N0JywKKwkJCXBhdGggPT4gJ3BhdGgnLAorCQkJbG9naW4gPT4gJ3VzZXJuYW1lJywKKwkJCXVzZXIgPT4gJ3VzZXJuYW1lJywKKwkJCXBhc3N3b3JkID0+ICdwYXNzd29yZCcsCisJCSAgICAgICB9CisJICAgICAgKTsKKworIyBNYXAgZWFjaCBjcmVkZW50aWFsIHByb3RvY29sIHRva2VuIHRvIGl0c2VsZiBvbiB0aGUgbmV0cmMgc2lkZS4KK2ZvcmVhY2ggKHZhbHVlcyAleyRvcHRpb25ze3RtYXB9fSkgeworCSRvcHRpb25ze3RtYXB9LT57JF99ID0gJF87Cit9CisKKyMgTm93LCAkb3B0aW9uc3t0bWFwfSBoYXMgYSBtYXBwaW5nIGZyb20gdGhlIG5ldHJjIGZvcm1hdCB0byB0aGUgR2l0IGNyZWRlbnRpYWwKKyMgaGVscGVyIHByb3RvY29sLgorCisjIE5leHQsIHdlIGJ1aWxkIHRoZSByZXZlcnNlIHRva2VuIG1hcC4KKworIyBXaGVuICRybWFwe2Zvb30gY29udGFpbnMgJ2JhcicsIHRoYXQgbWVhbnMgdGhhdCB3aGF0IHRoZSBHaXQgY3JlZGVudGlhbCBoZWxwZXIKKyMgcHJvdG9jb2wgY2FsbHMgJ2JhcicgaXMgZm91bmQgYXMgJ2ZvbycgaW4gdGhlIG5ldHJjL2F1dGhpbmZvIGZpbGUuICBLZXlzIGluCisjICVybWFwIGFyZSB3aGF0IHdlIGV4cGVjdCB0byByZWFkIGZyb20gdGhlIG5ldHJjL2F1dGhpbmZvIGZpbGUuCisKK215ICVybWFwOworZm9yZWFjaCBteSAkayAoa2V5cyAleyRvcHRpb25ze3RtYXB9fSkgeworCXB1c2ggQHskcm1hcHskb3B0aW9uc3t0bWFwfS0+eyRrfX19LCAkazsKK30KKworR2V0b3B0OjpMb25nOjpDb25maWd1cmUoImJ1bmRsaW5nIik7CisKKyMgVE9ETzogbWF5YmUgYWxsb3cgdGhlIHRva2VuIG1hcCAkb3B0aW9uc3t0bWFwfSB0byBiZSBjb25maWd1cmFibGUuCitHZXRPcHRpb25zKFwlb3B0aW9ucywKKyAgICAgICAgICAgImhlbHB8aCIsCisgICAgICAgICAgICJkZWJ1Z3xkIiwKKyAgICAgICAgICAgImluc2VjdXJlfGsiLAorICAgICAgICAgICAidmVyYm9zZXx2IiwKKyAgICAgICAgICAgImZpbGV8Zj1zQCIsCisgICAgICAgICAgICdncGd8ZzpzJywKKyAgICAgICAgICApOworCitpZiAoJG9wdGlvbnN7aGVscH0pIHsKKwlteSAkc2hvcnRuYW1lID0gYmFzZW5hbWUoJDApOworCSRzaG9ydG5hbWUgPX4gcy9naXQtY3JlZGVudGlhbC0vLzsKKworCXByaW50IDw8RU9ISVBQVVM7CisKKyQwIFsoLWYgPGF1dGhmaWxlPikuLi5dIFstZyA8cHJvZ3JhbT5dIFstZF0gWy12XSBbLWtdIGdldAorCitWZXJzaW9uICRWRVJTSU9OIGJ5IHR6elxAbGlmZWxvZ3MuY29tLiAgTGljZW5zZTogQlNELgorCitPcHRpb25zOgorCisgIC1mfC0tZmlsZSA8YXV0aGZpbGU+OiBzcGVjaWZ5IG5ldHJjLXN0eWxlIGZpbGVzLiAgRmlsZXMgd2l0aCB0aGUgLmdwZworICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uIHdpbGwgYmUgZGVjcnlwdGVkIGJ5IEdQRyBiZWZvcmUgcGFyc2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE11bHRpcGxlIC1mIGFyZ3VtZW50cyBhcmUgT0suICBUaGV5IGFyZSBwcm9jZXNzZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyLCBhbmQgdGhlIGZpcnN0IG1hdGNoaW5nIGVudHJ5IGZvdW5kIGlzIHJldHVybmVkCisgICAgICAgICAgICAgICAgICAgICAgICB2aWEgdGhlIGNyZWRlbnRpYWwgaGVscGVyIHByb3RvY29sIChzZWUgYmVsb3cpLgorCisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIG5vIC1mIG9wdGlvbiBpcyBnaXZlbiwgLmF1dGhpbmZvLmdwZywgLm5ldHJjLmdwZywKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hdXRoaW5mbywgYW5kIC5uZXRyYyBmaWxlcyBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiB0aGlzIG9yZGVyLgorCisgIC1nfC0tZ3BnIDxwcm9ncmFtPiAgOiBzcGVjaWZ5IHRoZSBwcm9ncmFtIGZvciBHUEcuIEJ5IGRlZmF1bHQsIHRoaXMgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBncGcucHJvZ3JhbSBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gb3IgZ3BnLgorCisgIC1rfC0taW5zZWN1cmUgICAgICAgOiBpZ25vcmUgYmFkIGZpbGUgb3duZXJzaGlwIG9yIHBlcm1pc3Npb25zCisKKyAgLWR8LS1kZWJ1ZyAgICAgICAgICA6IHR1cm4gb24gZGVidWdnaW5nIChkZXZlbG9wZXIgaW5mbykKKworICAtdnwtLXZlcmJvc2UgICAgICAgIDogYmUgbW9yZSB2ZXJib3NlIChzaG93IGZpbGVzIGFuZCBpbmZvcm1hdGlvbiBmb3VuZCkKKworVG8gZW5hYmxlIHRoaXMgY3JlZGVudGlhbCBoZWxwZXI6CisKKyAgZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAnJHNob3J0bmFtZSAtZiBBVVRIRklMRTEgLWYgQVVUSEZJTEUyJworCisoTm90ZSB0aGF0IEdpdCB3aWxsIHByZXBlbmQgImdpdC1jcmVkZW50aWFsLSIgdG8gdGhlIGhlbHBlciBuYW1lIGFuZCBsb29rIGZvciBpdAoraW4gdGhlIHBhdGguKQorCisuLi5hbmQgaWYgeW91IHdhbnQgbG90cyBvZiBkZWJ1Z2dpbmcgaW5mbzoKKworICBnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICckc2hvcnRuYW1lIC1mIEFVVEhGSUxFIC1kJworCisuLi5vciB0byBzZWUgdGhlIGZpbGVzIG9wZW5lZCBhbmQgZGF0YSBmb3VuZDoKKworICBnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICckc2hvcnRuYW1lIC1mIEFVVEhGSUxFIC12JworCitPbmx5ICJnZXQiIG1vZGUgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgY3JlZGVudGlhbCBoZWxwZXIuICBJdCBvcGVucyBldmVyeQorPGF1dGhmaWxlPiBhbmQgbG9va3MgZm9yIHRoZSBmaXJzdCBlbnRyeSB0aGF0IG1hdGNoZXMgdGhlIHJlcXVlc3RlZCBzZWFyY2gKK2NyaXRlcmlhOgorCisgJ3BvcnR8cHJvdG9jb2wnOgorICAgVGhlIHByb3RvY29sIHRoYXQgd2lsbCBiZSB1c2VkIChlLmcuLCBodHRwcykuIChwcm90b2NvbD1YKQorCisgJ21hY2hpbmV8aG9zdCc6CisgICBUaGUgcmVtb3RlIGhvc3RuYW1lIGZvciBhIG5ldHdvcmsgY3JlZGVudGlhbC4gKGhvc3Q9WCkKKworICdwYXRoJzoKKyAgIFRoZSBwYXRoIHdpdGggd2hpY2ggdGhlIGNyZWRlbnRpYWwgd2lsbCBiZSB1c2VkLiAocGF0aD1YKQorCisgJ2xvZ2lufHVzZXJ8dXNlcm5hbWUnOgorICAgVGhlIGNyZWRlbnRpYWzigJlzIHVzZXJuYW1lLCBpZiB3ZSBhbHJlYWR5IGhhdmUgb25lLiAodXNlcm5hbWU9WCkKKworVGh1cywgd2hlbiB3ZSBnZXQgdGhpcyBxdWVyeSBvbiBTVERJTjoKKworaG9zdD1naXRodWIuY29tCitwcm90b2NvbD1odHRwcwordXNlcm5hbWU9dHp6CisKK3RoaXMgY3JlZGVudGlhbCBoZWxwZXIgd2lsbCBsb29rIGZvciB0aGUgZmlyc3QgZW50cnkgaW4gZXZlcnkgPGF1dGhmaWxlPiB0aGF0CittYXRjaGVzCisKK21hY2hpbmUgZ2l0aHViLmNvbSBwb3J0IGh0dHBzIGxvZ2luIHR6egorCitPUgorCittYWNoaW5lIGdpdGh1Yi5jb20gcHJvdG9jb2wgaHR0cHMgbG9naW4gdHp6CisKK09SLi4uIGV0Yy4gYWNjZXB0YWJsZSB0b2tlbnMgYXMgbGlzdGVkIGFib3ZlLiAgQW55IHVua25vd24gdG9rZW5zIGFyZQorc2ltcGx5IGlnbm9yZWQuCisKK1RoZW4sIHRoZSBoZWxwZXIgd2lsbCBwcmludCBvdXQgd2hhdGV2ZXIgdG9rZW5zIGl0IGdvdCBmcm9tIHRoZSBlbnRyeSwgaW5jbHVkaW5nCisicGFzc3dvcmQiIHRva2VucywgbWFwcGluZyBiYWNrIHRvIEdpdCdzIGhlbHBlciBwcm90b2NvbDsgZS5nLiAicG9ydCIgaXMgbWFwcGVkCitiYWNrIHRvICJwcm90b2NvbCIuICBBbnkgcmVkdW5kYW50IGVudHJ5IHRva2VucyAocGFydCBvZiB0aGUgb3JpZ2luYWwgcXVlcnkpIGFyZQorc2tpcHBlZC4KKworQWdhaW4sIG5vdGUgdGhhdCBvbmx5IHRoZSBmaXJzdCBtYXRjaGluZyBlbnRyeSBmcm9tIGFsbCB0aGUgPGF1dGhmaWxlPnMsCitwcm9jZXNzZWQgaW4gdGhlIHNlcXVlbmNlIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUsIGlzIHVzZWQuCisKK05ldHJjL2F1dGhpbmZvIHRva2VucyBjYW4gYmUgcXVvdGVkIGFzICdTVFJJTkcnIG9yICJTVFJJTkciLgorCitObyBjYWNoaW5nIGlzIHBlcmZvcm1lZCBieSB0aGlzIGNyZWRlbnRpYWwgaGVscGVyLgorCitFT0hJUFBVUworCisJZXhpdCAwOworfQorCitteSAkbW9kZSA9IHNoaWZ0IEBBUkdWOworCisjIENyZWRlbnRpYWxzIG11c3QgZ2V0IGEgcGFyYW1ldGVyLCBzbyBkaWUgaWYgaXQncyBtaXNzaW5nLgorZGllICJTeW50YXg6ICQwIFsoLWYgPGF1dGhmaWxlPikuLi5dIFstZF0gZ2V0IiB1bmxlc3MgZGVmaW5lZCAkbW9kZTsKKworIyBPbmx5IHN1cHBvcnQgJ2dldCcgbW9kZTsgd2l0aCBhbnkgb3RoZXIgdW5zdXBwb3J0ZWQgb25lcyB3ZSBqdXN0IGV4aXQuCitleGl0IDAgdW5sZXNzICRtb2RlIGVxICdnZXQnOworCitteSAkZmlsZXMgPSAkb3B0aW9uc3tmaWxlfTsKKworIyBpZiBubyBmaWxlcyB3ZXJlIGdpdmVuLCB1c2UgYSBwcmVkZWZpbmVkIGxpc3QuCisjIG5vdGUgdGhhdCAuZ3BnIGZpbGVzIGNvbWUgZmlyc3QKK3VubGVzcyAoc2NhbGFyIEAkZmlsZXMpIHsKKwlteSBAY2FuZGlkYXRlcyA9IHF3WworCQkJCSAgIH4vLmF1dGhpbmZvLmdwZworCQkJCSAgIH4vLm5ldHJjLmdwZworCQkJCSAgIH4vLmF1dGhpbmZvCisJCQkJICAgfi8ubmV0cmMKKwkJCSAgXTsKKworCSRmaWxlcyA9ICRvcHRpb25ze2ZpbGV9ID0gWyBtYXAgeyBnbG9iICRfIH0gQGNhbmRpZGF0ZXMgXTsKK30KKworbG9hZF9jb25maWcoXCVvcHRpb25zKTsKKworbXkgJHF1ZXJ5ID0gcmVhZF9jcmVkZW50aWFsX2RhdGFfZnJvbV9zdGRpbigpOworCitGSUxFOgorZm9yZWFjaCBteSAkZmlsZSAoQCRmaWxlcykgeworCW15ICRncGdtb2RlID0gJGZpbGUgPX4gbS9cLmdwZyQvOworCXVubGVzcyAoLXIgJGZpbGUpIHsKKwkJbG9nX3ZlcmJvc2UoIlVuYWJsZSB0byByZWFkICRmaWxlOyBza2lwcGluZyBpdCIpOworCQluZXh0IEZJTEU7CisJfQorCisJIyB0aGUgZm9sbG93aW5nIGNoZWNrIGlzIGNvcGllZCBmcm9tIE5ldDo6TmV0cmMsIGZvciBub24tR1BHIGZpbGVzCisJIyBPUy8yIGFuZCBXaW4zMiBkbyBub3QgaGFuZGxlIHN0YXQgaW4gYSB3YXkgY29tcGF0aWJsZSB3aXRoIHRoaXMgY2hlY2sgOi0oCisJdW5sZXNzICgkZ3BnbW9kZSB8fCAkb3B0aW9uc3tpbnNlY3VyZX0gfHwKKwkJJF5PIGVxICdvczInCisJCXx8ICReTyBlcSAnTVNXaW4zMicKKwkJfHwgJF5PIGVxICdNYWNPUycKKwkJfHwgJF5PID1+IC9eY3lnd2luLykgeworCQlteSBAc3RhdCA9IHN0YXQoJGZpbGUpOworCisJCWlmIChAc3RhdCkgeworCQkJaWYgKCRzdGF0WzJdICYgMDc3KSB7CisJCQkJbG9nX3ZlcmJvc2UoIkluc2VjdXJlICRmaWxlIChtb2RlPSUwNG8pOyBza2lwcGluZyBpdCIsCisJCQkJCSAgICAkc3RhdFsyXSAmIDA3Nzc3KTsKKwkJCQluZXh0IEZJTEU7CisJCQl9CisKKwkJCWlmICgkc3RhdFs0XSAhPSAkPCkgeworCQkJCWxvZ192ZXJib3NlKCJOb3Qgb3duZXIgb2YgJGZpbGU7IHNraXBwaW5nIGl0Iik7CisJCQkJbmV4dCBGSUxFOworCQkJfQorCQl9CisJfQorCisJbXkgQGVudHJpZXMgPSBsb2FkX25ldHJjKCRmaWxlLCAkZ3BnbW9kZSk7CisKKwl1bmxlc3MgKHNjYWxhciBAZW50cmllcykgeworCQlpZiAoJCEpIHsKKwkJCWxvZ192ZXJib3NlKCJVbmFibGUgdG8gb3BlbiAkZmlsZTogJCEiKTsKKwkJfSBlbHNlIHsKKwkJCWxvZ192ZXJib3NlKCJObyBuZXRyYyBlbnRyaWVzIGZvdW5kIGluICRmaWxlIik7CisJCX0KKworCQluZXh0IEZJTEU7CisJfQorCisJbXkgJGVudHJ5ID0gZmluZF9uZXRyY19lbnRyeSgkcXVlcnksIEBlbnRyaWVzKTsKKwlpZiAoJGVudHJ5KSB7CisJCXByaW50X2NyZWRlbnRpYWxfZGF0YSgkZW50cnksICRxdWVyeSk7CisJCSMgd2UncmUgZG9uZSEKKwkJbGFzdCBGSUxFOworCX0KK30KKworZXhpdCAwOworCitzdWIgbG9hZF9uZXRyYyB7CisJbXkgJGZpbGUgPSBzaGlmdCBAXzsKKwlteSAkZ3BnbW9kZSA9IHNoaWZ0IEBfOworCisJbXkgJGlvOworCWlmICgkZ3BnbW9kZSkgeworCQlteSBAY21kID0gKCRvcHRpb25zeydncGcnfSwgcXcoLS1kZWNyeXB0KSwgJGZpbGUpOworCQlsb2dfdmVyYm9zZSgiVXNpbmcgR1BHIHRvIG9wZW4gJGZpbGU6IFtAY21kXSIpOworCQlvcGVuICRpbywgIi18IiwgQGNtZDsKKwl9IGVsc2UgeworCQlsb2dfdmVyYm9zZSgiT3BlbmluZyAkZmlsZS4uLiIpOworCQlvcGVuICRpbywgJzwnLCAkZmlsZTsKKwl9CisKKwkjIG5vdGhpbmcgdG8gZG8gaWYgdGhlIG9wZW4gZmFpbGVkICh3ZSBsb2cgdGhlIGVycm9yIGxhdGVyKQorCXJldHVybiB1bmxlc3MgJGlvOworCisJIyBOZXQ6Ok5ldHJjIGRvZXMgdGhpcywgYnV0IHRoZSBmdW5jdGlvbmFsaXR5IGlzIG1lcmdlZCB3aXRoIHRoZSBmaWxlCisJIyBkZXRlY3Rpb24gbG9naWMsIHNvIHdlIGhhdmUgdG8gZXh0cmFjdCBqdXN0IHRoZSBwYXJ0IHdlIG5lZWQKKwlteSBAbmV0cmNfZW50cmllcyA9IG5ldF9uZXRyY19sb2FkZXIoJGlvKTsKKworCSMgdGhlc2UgZW50cmllcyB3aWxsIHVzZSB0aGUgY3JlZGVudGlhbCBoZWxwZXIgcHJvdG9jb2wgdG9rZW4gbmFtZXMKKwlteSBAZW50cmllczsKKworCWZvcmVhY2ggbXkgJG5lbnRyeSAoQG5ldHJjX2VudHJpZXMpIHsKKwkJbXkgJWVudHJ5OworCQlteSAkbnVtX3BvcnQ7CisKKwkJaWYgKCFkZWZpbmVkICRuZW50cnktPnttYWNoaW5lfSkgeworCQkJbmV4dDsKKwkJfQorCQlpZiAoZGVmaW5lZCAkbmVudHJ5LT57cG9ydH0gJiYgJG5lbnRyeS0+e3BvcnR9ID1+IG0vXlxkKyQvKSB7CisJCQkkbnVtX3BvcnQgPSAkbmVudHJ5LT57cG9ydH07CisJCQlkZWxldGUgJG5lbnRyeS0+e3BvcnR9OworCQl9CisKKwkJIyBjcmVhdGUgdGhlIG5ldyBlbnRyeSBmb3IgdGhlIGNyZWRlbnRpYWwgaGVscGVyIHByb3RvY29sCisJCSRlbnRyeXskb3B0aW9uc3t0bWFwfS0+eyRffX0gPSAkbmVudHJ5LT57JF99IGZvcmVhY2gga2V5cyAlJG5lbnRyeTsKKworCQkjIGZvciAiaG9zdCBYIHBvcnQgWSIgd2hlcmUgWSBpcyBhbiBpbnRlZ2VyIChjYXB0dXJlZCBieQorCQkjICRudW1fcG9ydCBhYm92ZSksIHNldCB0aGUgaG9zdCB0byAiWDpZIgorCQlpZiAoZGVmaW5lZCAkZW50cnl7aG9zdH0gJiYgZGVmaW5lZCAkbnVtX3BvcnQpIHsKKwkJCSRlbnRyeXtob3N0fSA9IGpvaW4oJzonLCAkZW50cnl7aG9zdH0sICRudW1fcG9ydCk7CisJCX0KKworCQlwdXNoIEBlbnRyaWVzLCBcJWVudHJ5OworCX0KKworCXJldHVybiBAZW50cmllczsKK30KKworc3ViIG5ldF9uZXRyY19sb2FkZXIgeworCW15ICRmaCA9IHNoaWZ0IEBfOworCW15IEBlbnRyaWVzOworCW15ICgkbWFjaCwgJG1hY2RlZiwgJHRvaywgQHRvayk7CisKKyAgICBMSU5FOgorCXdoaWxlICg8JGZoPikgeworCQl1bmRlZiAkbWFjZGVmIGlmIC9cQVxuXFovOworCisJCWlmICgkbWFjZGVmKSB7CisJCQluZXh0IExJTkU7CisJCX0KKworCQlzL15ccyovLzsKKwkJY2hvbXA7CisKKwkJd2hpbGUgKGxlbmd0aCAmJiBzL14oIigoPzpbXiJdK3xcXC4pKikifCgoPzpbXlxcXHNdK3xcXC4pKikpXHMqLy8pIHsKKwkJCShteSAkdG9rID0gJCspID1+IHMvXFwoLikvJDEvZzsKKwkJCXB1c2goQHRvaywgJHRvayk7CisJCX0KKworCSAgICBUT0tFTjoKKwkJd2hpbGUgKEB0b2spIHsKKwkJCWlmICgkdG9rWzBdIGVxICJkZWZhdWx0IikgeworCQkJCXNoaWZ0KEB0b2spOworCQkJCSRtYWNoID0geyBtYWNoaW5lID0+IHVuZGVmIH07CisJCQkJbmV4dCBUT0tFTjsKKwkJCX0KKworCQkJJHRvayA9IHNoaWZ0KEB0b2spOworCisJCQlpZiAoJHRvayBlcSAibWFjaGluZSIpIHsKKwkJCQlteSAkaG9zdCA9IHNoaWZ0IEB0b2s7CisJCQkJJG1hY2ggPSB7IG1hY2hpbmUgPT4gJGhvc3QgfTsKKwkJCQlwdXNoIEBlbnRyaWVzLCAkbWFjaDsKKwkJCX0gZWxzaWYgKGV4aXN0cyAkb3B0aW9uc3t0bWFwfS0+eyR0b2t9KSB7CisJCQkJdW5sZXNzICgkbWFjaCkgeworCQkJCQlsb2dfZGVidWcoIlNraXBwaW5nIHRva2VuICR0b2sgYmVjYXVzZSBubyBtYWNoaW5lIHdhcyBnaXZlbiIpOworCQkJCQluZXh0IFRPS0VOOworCQkJCX0KKworCQkJCW15ICR2YWx1ZSA9IHNoaWZ0IEB0b2s7CisJCQkJdW5sZXNzIChkZWZpbmVkICR2YWx1ZSkgeworCQkJCQlsb2dfZGVidWcoIlRva2VuICR0b2sgaGFkIG5vIHZhbHVlLCBza2lwcGluZyBpdC4iKTsKKwkJCQkJbmV4dCBUT0tFTjsKKwkJCQl9CisKKwkJCQkjIEZvbGxvd2luZyBsaW5lIGFkZGVkIGJ5IHJtZXJyZWxsIHRvIHJlbW92ZSAnLycgZXNjYXBlIGNoYXIgaW4gLm5ldHJjCisJCQkJJHZhbHVlID1+IHMvXC9cXC9cXC9nOworCQkJCSRtYWNoLT57JHRva30gPSAkdmFsdWU7CisJCQl9IGVsc2lmICgkdG9rIGVxICJtYWNkZWYiKSB7ICMgd2UgaWdub3JlIG1hY3JvcworCQkJCW5leHQgVE9LRU4gdW5sZXNzICRtYWNoOworCQkJCW15ICR2YWx1ZSA9IHNoaWZ0IEB0b2s7CisJCQkJJG1hY2RlZiA9IDE7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gQGVudHJpZXM7Cit9CisKK3N1YiByZWFkX2NyZWRlbnRpYWxfZGF0YV9mcm9tX3N0ZGluIHsKKwkjIHRoZSBxdWVyeTogc3RhcnQgd2l0aCBldmVyeSB0b2tlbiB3aXRoIG5vIHZhbHVlCisJbXkgJXEgPSBtYXAgeyAkXyA9PiB1bmRlZiB9IHZhbHVlcygleyRvcHRpb25ze3RtYXB9fSk7CisKKwl3aGlsZSAoPFNURElOPikgeworCQluZXh0IHVubGVzcyBtL14oW149XSspPSguKykvOworCisJCW15ICgkdG9rZW4sICR2YWx1ZSkgPSAoJDEsICQyKTsKKwkJZGllICJVbmtub3duIHNlYXJjaCB0b2tlbiAkdG9rZW4iIHVubGVzcyBleGlzdHMgJHF7JHRva2VufTsKKwkJJHF7JHRva2VufSA9ICR2YWx1ZTsKKwkJbG9nX2RlYnVnKCJXZSB3ZXJlIGdpdmVuIHNlYXJjaCB0b2tlbiAkdG9rZW4gYW5kIHZhbHVlICR2YWx1ZSIpOworCX0KKworCWZvcmVhY2ggKHNvcnQga2V5cyAlcSkgeworCQlsb2dfZGVidWcoIlNlYXJjaGluZyBmb3IgJXMgPSAlcyIsICRfLCAkcXskX30gfHwgJyhhbnkgdmFsdWUpJyk7CisJfQorCisJcmV0dXJuIFwlcTsKK30KKworIyB0YWtlcyB0aGUgc2VhcmNoIHRva2VucyBhbmQgdGhlbiBhIGxpc3Qgb2YgZW50cmllcworIyBlYWNoIGVudHJ5IGlzIGEgaGFzaCByZWZlcmVuY2UKK3N1YiBmaW5kX25ldHJjX2VudHJ5IHsKKwlteSAkcXVlcnkgPSBzaGlmdCBAXzsKKworICAgIEVOVFJZOgorCWZvcmVhY2ggbXkgJGVudHJ5IChAXykKKwl7CisJCW15ICRlbnRyeV90ZXh0ID0gam9pbiAnLCAnLCBtYXAgeyAiJF89JGVudHJ5LT57JF99IiB9IGtleXMgJSRlbnRyeTsKKwkJZm9yZWFjaCBteSAkY2hlY2sgKHNvcnQga2V5cyAlJHF1ZXJ5KSB7CisJCQlpZiAoIWRlZmluZWQgJGVudHJ5LT57JGNoZWNrfSkgeworCQkJICAgICAgICBsb2dfZGVidWcoIk9LOiBlbnRyeSBoYXMgbm8gJGNoZWNrIHRva2VuLCBzbyBhbnkgdmFsdWUgc2F0aXNmaWVzIGNoZWNrICRjaGVjayIpOworCQkJfSBlbHNpZiAoZGVmaW5lZCAkcXVlcnktPnskY2hlY2t9KSB7CisJCQkJbG9nX2RlYnVnKCJjb21wYXJlICVzIFslc10gdG8gWyVzXSAoZW50cnk6ICVzKSIsCisJCQkJCSAgJGNoZWNrLAorCQkJCQkgICRlbnRyeS0+eyRjaGVja30sCisJCQkJCSAgJHF1ZXJ5LT57JGNoZWNrfSwKKwkJCQkJICAkZW50cnlfdGV4dCk7CisJCQkJdW5sZXNzICgkcXVlcnktPnskY2hlY2t9IGVxICRlbnRyeS0+eyRjaGVja30pIHsKKwkJCQkJbmV4dCBFTlRSWTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWxvZ19kZWJ1ZygiT0s6IGFueSB2YWx1ZSBzYXRpc2ZpZXMgY2hlY2sgJGNoZWNrIik7CisJCQl9CisJCX0KKworCQlyZXR1cm4gJGVudHJ5OworCX0KKworCSMgbm90aGluZyB3YXMgZm91bmQKKwlyZXR1cm47Cit9CisKK3N1YiBwcmludF9jcmVkZW50aWFsX2RhdGEgeworCW15ICRlbnRyeSA9IHNoaWZ0IEBfOworCW15ICRxdWVyeSA9IHNoaWZ0IEBfOworCisJbG9nX2RlYnVnKCJlbnRyeSBoYXMgcGFzc2VkIGFsbCB0aGUgc2VhcmNoIGNoZWNrcyIpOworIFRPS0VOOgorCWZvcmVhY2ggbXkgJGdpdF90b2tlbiAoc29ydCBrZXlzICUkZW50cnkpIHsKKwkJbG9nX2RlYnVnKCJsb29raW5nIGZvciB1c2VmdWwgdG9rZW4gJGdpdF90b2tlbiIpOworCQkjIGRvbid0IHByaW50IHVua25vd24gKHRvIHRoZSBjcmVkZW50aWFsIGhlbHBlciBwcm90b2NvbCkgdG9rZW5zCisJCW5leHQgVE9LRU4gdW5sZXNzIGV4aXN0cyAkcXVlcnktPnskZ2l0X3Rva2VufTsKKworCQkjIGRvbid0IHByaW50IHRoaW5ncyBhc2tlZCBpbiB0aGUgcXVlcnkgKHRoZSBlbnRyeSBtYXRjaGVzIHRoZW0pCisJCW5leHQgVE9LRU4gaWYgZGVmaW5lZCAkcXVlcnktPnskZ2l0X3Rva2VufTsKKworCQlsb2dfZGVidWcoIkZPVU5EOiAkZ2l0X3Rva2VuPSRlbnRyeS0+eyRnaXRfdG9rZW59Iik7CisJCXByaW50ZiAiJXM9JXNcbiIsICRnaXRfdG9rZW4sICRlbnRyeS0+eyRnaXRfdG9rZW59OworCX0KK30KK3N1YiBsb2FkX2NvbmZpZyB7CisJIyBsb2FkIHNldHRpbmdzIGZyb20gZ2l0IGNvbmZpZworCW15ICRvcHRpb25zID0gc2hpZnQ7CisJIyBzZXQgZnJvbSBjb21tYW5kIGFyZ3VtZW50LCBncGcucHJvZ3JhbSBvcHRpb24sIG9yIGRlZmF1bHQgdG8gZ3BnCisJJG9wdGlvbnMtPnsnZ3BnJ30gLy89IEdpdDo6Y29uZmlnKCdncGcucHJvZ3JhbScpCisJICAgICAgICAgICAgICAgICAgLy8gJ2dwZyc7CisJbG9nX3ZlcmJvc2UoInVzaW5nICRvcHRpb25zeydncGcnfSBmb3IgR1BHIG9wZXJhdGlvbnMiKTsKK30KK3N1YiBsb2dfdmVyYm9zZSB7CisJcmV0dXJuIHVubGVzcyAkb3B0aW9uc3t2ZXJib3NlfTsKKwlwcmludGYgU1RERVJSIEBfOworCXByaW50ZiBTVERFUlIgIlxuIjsKK30KKworc3ViIGxvZ19kZWJ1ZyB7CisJcmV0dXJuIHVubGVzcyAkb3B0aW9uc3tkZWJ1Z307CisJcHJpbnRmIFNUREVSUiBAXzsKKwlwcmludGYgU1RERVJSICJcbiI7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvdC1naXQtY3JlZGVudGlhbC1uZXRyYy5zaCBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90LWdpdC1jcmVkZW50aWFsLW5ldHJjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA3MjI3ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvdC1naXQtY3JlZGVudGlhbC1uZXRyYy5zaApAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vc2gKKygKKwljZCAuLi8uLi8uLi90CisJdGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWNyZWRlbnRpYWwtbmV0cmMnCisJLiAuL3Rlc3QtbGliLnNoCisKKwlpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTDsgdGhlbgorCQlza2lwX2FsbD0nc2tpcHBpbmcgcGVybCBpbnRlcmZhY2UgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwkJdGVzdF9kb25lCisJZmkKKworCXBlcmwgLU1UZXN0OjpNb3JlIC1lIDAgMj4vZGV2L251bGwgfHwgeworCQlza2lwX2FsbD0iUGVybCBUZXN0OjpNb3JlIHVuYXZhaWxhYmxlLCBza2lwcGluZyB0ZXN0IgorCQl0ZXN0X2RvbmUKKwl9CisKKwkjIHNldCB1cCB0ZXN0IHJlcG9zaXRvcnkKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCQknc2V0IHVwIHRlc3QgcmVwb3NpdG9yeScgXAorCQknZ2l0IGNvbmZpZyAtLWFkZCBncGcucHJvZ3JhbSB0ZXN0LmdpdC1jb25maWctZ3BnJworCisJIyBUaGUgZXh0ZXJuYWwgdGVzdCB3aWxsIG91dHB1dHMgaXRzIG93biBwbGFuCisJdGVzdF9leHRlcm5hbF9oYXNfdGFwPTEKKworCWV4cG9ydCBQRVJMNUxJQj0iJEdJVFBFUkxMSUIiCisJdGVzdF9leHRlcm5hbCBcCisJCSdnaXQtY3JlZGVudGlhbC1uZXRyYycgXAorCQlwZXJsICIkR0lUX0JVSUxEX0RJUiIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL3Rlc3QucGwKKworCXRlc3RfZG9uZQorKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL3Rlc3QuY29tbWFuZC1vcHRpb24tZ3BnIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL3Rlc3QuY29tbWFuZC1vcHRpb24tZ3BnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ4ZjEyODUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvdGVzdC5jb21tYW5kLW9wdGlvbi1ncGcKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK2VjaG8gbWFjaGluZSBjb21tYW5kLW9wdGlvbi1ncGcgbG9naW4gdXNlcm5hbWUgcGFzc3dvcmQgcGFzc3dvcmQKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0LmdpdC1jb25maWctZ3BnIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL3Rlc3QuZ2l0LWNvbmZpZy1ncGcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjVjZjU5NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0LmdpdC1jb25maWctZ3BnCkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCitlY2hvIG1hY2hpbmUgZ2l0LWNvbmZpZy1ncGcgbG9naW4gdXNlcm5hbWUgcGFzc3dvcmQgcGFzc3dvcmQKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0Lm5ldHJjIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL3Rlc3QubmV0cmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExMTlhOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0Lm5ldHJjCkBAIC0wLDAgKzEsMTMgQEAKK21hY2hpbmUgaW1hcCBsb2dpbiB0enpAbGlmZWxvZ3MuY29tIHBvcnQgaW1hcHMgcGFzc3dvcmQgbGV0bWVrbm93CittYWNoaW5lIGltYXAgbG9naW4gYm9iIHBvcnQgaW1hcHMgcGFzc3dvcmQgYm9id2lsbGtub3cKKworIyBjb21tZW50IHRlc3QKKworbWFjaGluZSBpbWFwMiBsb2dpbiB0enogcG9ydCAxMDk5IHBhc3N3b3JkIHR6emtub3cKK21hY2hpbmUgaW1hcDIgbG9naW4gYm9iIHBhc3N3b3JkIGJvYndpbGxrbm93CisKKyMgYW5vdGhlciBjb21tYW5kCisKK21hY2hpbmUgZ2l0aHViLmNvbQorICBtdWx0aWxpbmV0b2tlbiBhbm90aGVydmFsdWUKKyAgbG9naW4gY2Fyb2wgcGFzc3dvcmQgY2Fyb2xrbm93cwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL3Rlc3QubmV0cmMuZ3BnIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL3Rlc3QubmV0cmMuZ3BnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvdGVzdC5uZXRyYy5ncGcKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0LnBsIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL3Rlc3QucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzBmYjM3MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0LnBsCkBAIC0wLDAgKzEsMTM5IEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHdhcm5pbmdzOwordXNlIHN0cmljdDsKK3VzZSBUZXN0OjpNb3JlIHF3KG5vX3BsYW4pOwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEZpbGU6OlNwZWM6OkZ1bmN0aW9ucyBxdyg6REVGQVVMVCByZWwyYWJzKTsKK3VzZSBJUEM6Ok9wZW4yOworCitCRUdJTiB7CisJIyB0LWdpdC1jcmVkZW50aWFsLW5ldHJjLnNoIGtpY2tzIG9mZiBvdXIgdGVzdGluZywgc28gd2UgaGF2ZSB0byBnbworCSMgZnJvbSB0aGVyZS4KKwlUZXN0OjpNb3JlLT5idWlsZGVyLT5jdXJyZW50X3Rlc3QoMSk7Cit9CisKK215IEBnbG9iYWxfY3JlZGVudGlhbF9hcmdzID0gQEFSR1Y7CitteSAkc2NyaXB0RGlyID0gZGlybmFtZSByZWwyYWJzICQwOworbXkgKCRuZXRyYywgJG5ldHJjR3BnLCAkZ2NOZXRyYykgPSBtYXAgeyBjYXRmaWxlICRzY3JpcHREaXIsICRfOyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdyh0ZXN0Lm5ldHJjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Lm5ldHJjLmdwZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l0LWNyZWRlbnRpYWwtbmV0cmMpOworbG9jYWwgJEVOVntQQVRIfSA9IGpvaW4gJzonCisgICAgICAgICAgICAgICAgICAgICAgLCAkc2NyaXB0RGlyCisgICAgICAgICAgICAgICAgICAgICAgLCAkRU5We1BBVEh9CisgICAgICAgICAgICAgICAgICAgICAgPyAkRU5We1BBVEh9CisgICAgICAgICAgICAgICAgICAgICAgOiAoKTsKKworZGlhZyAiVGVzdGluZyBpbnNlY3VyZSBmaWxlLCBub3RoaW5nIHNob3VsZCBiZSBmb3VuZFxuIjsKK2NobW9kIDA2NDQsICRuZXRyYzsKK215ICRjcmVkID0gcnVuX2NyZWRlbnRpYWwoWyctZicsICRuZXRyYywgJ2dldCddLAorCQkJICB7IGhvc3QgPT4gJ2dpdGh1Yi5jb20nIH0pOworCitvayhzY2FsYXIga2V5cyAlJGNyZWQgPT0gMCwgIkdvdCAwIGtleXMgZnJvbSBpbnNlY3VyZSBmaWxlIik7CisKK2RpYWcgIlRlc3RpbmcgbWlzc2luZyBmaWxlLCBub3RoaW5nIHNob3VsZCBiZSBmb3VuZFxuIjsKK2NobW9kIDA2NDQsICRuZXRyYzsKKyRjcmVkID0gcnVuX2NyZWRlbnRpYWwoWyctZicsICcvLy9ub3N1Y2hmaWxlLy8vJywgJ2dldCddLAorCQkgICAgICAgeyBob3N0ID0+ICdnaXRodWIuY29tJyB9KTsKKworb2soc2NhbGFyIGtleXMgJSRjcmVkID09IDAsICJHb3QgMCBrZXlzIGZyb20gbWlzc2luZyBmaWxlIik7CisKK2NobW9kIDA2MDAsICRuZXRyYzsKKworZGlhZyAiVGVzdGluZyB3aXRoIGludmFsaWQgZGF0YVxuIjsKKyRjcmVkID0gcnVuX2NyZWRlbnRpYWwoWyctZicsICRuZXRyYywgJ2dldCddLAorCQkgICAgICAgImJhZCBkYXRhIik7CitvayhzY2FsYXIga2V5cyAlJGNyZWQgPT0gNCwgIkdvdCBmaXJzdCBmb3VuZCBrZXlzIHdpdGggYmFkIGRhdGEiKTsKKworZGlhZyAiVGVzdGluZyBuZXRyYyBmaWxlIGZvciBhIG1pc3NpbmcgY29yb3ZhbWlsa2JhciBlbnRyeVxuIjsKKyRjcmVkID0gcnVuX2NyZWRlbnRpYWwoWyctZicsICRuZXRyYywgJ2dldCddLAorCQkgICAgICAgeyBob3N0ID0+ICdjb3JvdmFtaWxrYmFyJyB9KTsKKworb2soc2NhbGFyIGtleXMgJSRjcmVkID09IDAsICJHb3Qgbm8gY29yb3ZhbWlsa2JhciBrZXlzIik7CisKK2RpYWcgIlRlc3RpbmcgbmV0cmMgZmlsZSBmb3IgYSBnaXRodWIuY29tIGVudHJ5XG4iOworJGNyZWQgPSBydW5fY3JlZGVudGlhbChbJy1mJywgJG5ldHJjLCAnZ2V0J10sCisJCSAgICAgICB7IGhvc3QgPT4gJ2dpdGh1Yi5jb20nIH0pOworCitvayhzY2FsYXIga2V5cyAlJGNyZWQgPT0gMiwgIkdvdCAyIEdpdGh1YiBrZXlzIik7CisKK2lzKCRjcmVkLT57cGFzc3dvcmR9LCAnY2Fyb2xrbm93cycsICJHb3QgY29ycmVjdCBHaXRodWIgcGFzc3dvcmQiKTsKK2lzKCRjcmVkLT57dXNlcm5hbWV9LCAnY2Fyb2wnLCAiR290IGNvcnJlY3QgR2l0aHViIHVzZXJuYW1lIik7CisKK2RpYWcgIlRlc3RpbmcgbmV0cmMgZmlsZSBmb3IgYSB1c2VybmFtZS1zcGVjaWZpYyBlbnRyeVxuIjsKKyRjcmVkID0gcnVuX2NyZWRlbnRpYWwoWyctZicsICRuZXRyYywgJ2dldCddLAorCQkgICAgICAgeyBob3N0ID0+ICdpbWFwJywgdXNlcm5hbWUgPT4gJ2JvYicgfSk7CisKK29rKHNjYWxhciBrZXlzICUkY3JlZCA9PSAyLCAiR290IDIgdXNlcm5hbWUtc3BlY2lmaWMga2V5cyIpOworCitpcygkY3JlZC0+e3Bhc3N3b3JkfSwgJ2JvYndpbGxrbm93JywgIkdvdCBjb3JyZWN0IHVzZXItc3BlY2lmaWMgcGFzc3dvcmQiKTsKK2lzKCRjcmVkLT57cHJvdG9jb2x9LCAnaW1hcHMnLCAiR290IGNvcnJlY3QgdXNlci1zcGVjaWZpYyBwcm90b2NvbCIpOworCitkaWFnICJUZXN0aW5nIG5ldHJjIGZpbGUgZm9yIGEgaG9zdDpwb3J0LXNwZWNpZmljIGVudHJ5XG4iOworJGNyZWQgPSBydW5fY3JlZGVudGlhbChbJy1mJywgJG5ldHJjLCAnZ2V0J10sCisJCSAgICAgICB7IGhvc3QgPT4gJ2ltYXAyOjEwOTknIH0pOworCitvayhzY2FsYXIga2V5cyAlJGNyZWQgPT0gMiwgIkdvdCAyIGhvc3Q6cG9ydC1zcGVjaWZpYyBrZXlzIik7CisKK2lzKCRjcmVkLT57cGFzc3dvcmR9LCAndHp6a25vdycsICJHb3QgY29ycmVjdCBob3N0OnBvcnQtc3BlY2lmaWMgcGFzc3dvcmQiKTsKK2lzKCRjcmVkLT57dXNlcm5hbWV9LCAndHp6JywgIkdvdCBjb3JyZWN0IGhvc3Q6cG9ydC1zcGVjaWZpYyB1c2VybmFtZSIpOworCitkaWFnICJUZXN0aW5nIG5ldHJjIGZpbGUgdGhhdCAnaG9zdDpwb3J0IGtpbGxzIGhvc3QnIGVudHJ5XG4iOworJGNyZWQgPSBydW5fY3JlZGVudGlhbChbJy1mJywgJG5ldHJjLCAnZ2V0J10sCisJCSAgICAgICB7IGhvc3QgPT4gJ2ltYXAyJyB9KTsKKworb2soc2NhbGFyIGtleXMgJSRjcmVkID09IDIsICJHb3QgMiAnaG9zdDpwb3J0IGtpbGxzIGhvc3QnIGtleXMiKTsKKworaXMoJGNyZWQtPntwYXNzd29yZH0sICdib2J3aWxsa25vdycsICJHb3QgY29ycmVjdCAnaG9zdDpwb3J0IGtpbGxzIGhvc3QnIHBhc3N3b3JkIik7CitpcygkY3JlZC0+e3VzZXJuYW1lfSwgJ2JvYicsICJHb3QgY29ycmVjdCAnaG9zdDpwb3J0IGtpbGxzIGhvc3QnIHVzZXJuYW1lIik7CisKK2RpYWcgJ1Rlc3RpbmcgbmV0cmMgZmlsZSBkZWNyeXB0aW9uIGJ5IGdpdCBjb25maWcgZ3BnLnByb2dyYW0gc2V0dGluZ1xuJzsKKyRjcmVkID0gcnVuX2NyZWRlbnRpYWwoIFsnLWYnLCAkbmV0cmNHcGcsICdnZXQnXQorICAgICAgICAgICAgICAgICAgICAgICwgeyBob3N0ID0+ICdnaXQtY29uZmlnLWdwZycgfQorICAgICAgICAgICAgICAgICAgICAgICk7CisKK29rKHNjYWxhciBrZXlzICUkY3JlZCA9PSAyLCAnR290IGtleXMgZGVjcnlwdGVkIGJ5IGdpdCBjb25maWcgb3B0aW9uJyk7CisKK2RpYWcgJ1Rlc3RpbmcgbmV0cmMgZmlsZSBkZWNyeXB0aW9uIGJ5IGdwZyBvcHRpb25cbic7CiskY3JlZCA9IHJ1bl9jcmVkZW50aWFsKCBbJy1mJywgJG5ldHJjR3BnLCAnLWcnLCAndGVzdC5jb21tYW5kLW9wdGlvbi1ncGcnLCAnZ2V0J10KKyAgICAgICAgICAgICAgICAgICAgICAsIHsgaG9zdCA9PiAnY29tbWFuZC1vcHRpb24tZ3BnJyB9CisgICAgICAgICAgICAgICAgICAgICAgKTsKKworb2soc2NhbGFyIGtleXMgJSRjcmVkID09IDIsICdHb3Qga2V5cyBkZWNyeXB0ZWQgYnkgY29tbWFuZCBvcHRpb24nKTsKKworbXkgJGlzX3Bhc3NpbmcgPSBldmFsIHsgVGVzdDo6TW9yZS0+aXNfcGFzc2luZyB9OworZXhpdCgkaXNfcGFzc2luZyA/IDAgOiAxKSB1bmxlc3MgJEAgPX4gL0Nhbid0IGxvY2F0ZSBvYmplY3QgbWV0aG9kLzsKKworc3ViIHJ1bl9jcmVkZW50aWFsCit7CisJbXkgJGFyZ3MgPSBzaGlmdCBAXzsKKwlteSAkZGF0YSA9IHNoaWZ0IEBfOworCW15ICRwaWQgPSBvcGVuMihteSAkY2hsZF9vdXQsIG15ICRjaGxkX2luLAorCQkJJGdjTmV0cmMsIEBnbG9iYWxfY3JlZGVudGlhbF9hcmdzLAorCQkJQCRhcmdzKTsKKworCWRpZSAiQ291bGRuJ3Qgb3BlbiBwaXBlIHRvIG5ldHJjIGNyZWRlbnRpYWwgaGVscGVyOiAkISIgdW5sZXNzICRwaWQ7CisKKwlpZiAocmVmICRkYXRhIGVxICdIQVNIJykKKwl7CisJCXByaW50ICRjaGxkX2luICIkXz0kZGF0YS0+eyRffVxuIiBmb3JlYWNoIHNvcnQga2V5cyAlJGRhdGE7CisJfQorCWVsc2UKKwl7CisJCXByaW50ICRjaGxkX2luICIkZGF0YVxuIjsKKwl9CisKKwljbG9zZSAkY2hsZF9pbjsKKwlteSAlcmV0OworCisJd2hpbGUgKDwkY2hsZF9vdXQ+KQorCXsKKwkJY2hvbXA7CisJCW5leHQgdW5sZXNzIG0vXihbXj1dKyk9KC4rKS87CisKKwkJJHJldHskMX0gPSAkMjsKKwl9CisKKwlyZXR1cm4gXCVyZXQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vLmdpdGlnbm9yZSBiL2NvbnRyaWIvY3JlZGVudGlhbC9vc3hrZXljaGFpbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNWI3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACitnaXQtY3JlZGVudGlhbC1vc3hrZXljaGFpbgpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluL01ha2VmaWxlIGIvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiM2EwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vTWFrZWZpbGUKQEAgLTAsMCArMSwxNyBAQAorYWxsOjogZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4KKworQ0MgPSBnY2MKK1JNID0gcm0gLWYKK0NGTEFHUyA9IC1nIC1PMiAtV2FsbAorCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsKKworZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW46IGdpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluLm8KKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJDwgJChMREZMQUdTKSAtV2wsLWZyYW1ld29yayAtV2wsU2VjdXJpdHkKKworZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4ubzogZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4uYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAkPAorCitjbGVhbjoKKwkkKFJNKSBnaXQtY3JlZGVudGlhbC1vc3hrZXljaGFpbiBnaXQtY3JlZGVudGlhbC1vc3hrZXljaGFpbi5vCmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4uYyBiL2NvbnRyaWIvY3JlZGVudGlhbC9vc3hrZXljaGFpbi9naXQtY3JlZGVudGlhbC1vc3hrZXljaGFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDNmNTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4uYwpAQCAtMCwwICsxLDE4MyBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8U2VjdXJpdHkvU2VjdXJpdHkuaD4KKworc3RhdGljIFNlY1Byb3RvY29sVHlwZSBwcm90b2NvbDsKK3N0YXRpYyBjaGFyICpob3N0Oworc3RhdGljIGNoYXIgKnBhdGg7CitzdGF0aWMgY2hhciAqdXNlcm5hbWU7CitzdGF0aWMgY2hhciAqcGFzc3dvcmQ7CitzdGF0aWMgVUludDE2IHBvcnQ7CisKK3N0YXRpYyB2b2lkIGRpZShjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwljaGFyIG1zZ1s0MDk2XTsKKwl2YV9saXN0IHBhcmFtczsKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJdnNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksIGVyciwgcGFyYW1zKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworCXZhX2VuZChwYXJhbXMpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyB2b2lkICp4c3RyZHVwKGNvbnN0IGNoYXIgKnMxKQoreworCXZvaWQgKnJldCA9IHN0cmR1cChzMSk7CisJaWYgKCFyZXQpCisJCWRpZSgiT3V0IG9mIG1lbW9yeSIpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgS0VZQ0hBSU5fSVRFTSh4KSAoeCA/IHN0cmxlbih4KSA6IDApLCB4CisjZGVmaW5lIEtFWUNIQUlOX0FSR1MgXAorCU5VTEwsIC8qIGRlZmF1bHQga2V5Y2hhaW4gKi8gXAorCUtFWUNIQUlOX0lURU0oaG9zdCksIFwKKwkwLCBOVUxMLCAvKiBhY2NvdW50IGRvbWFpbiAqLyBcCisJS0VZQ0hBSU5fSVRFTSh1c2VybmFtZSksIFwKKwlLRVlDSEFJTl9JVEVNKHBhdGgpLCBcCisJcG9ydCwgXAorCXByb3RvY29sLCBcCisJa1NlY0F1dGhlbnRpY2F0aW9uVHlwZURlZmF1bHQKKworc3RhdGljIHZvaWQgd3JpdGVfaXRlbShjb25zdCBjaGFyICp3aGF0LCBjb25zdCBjaGFyICpidWYsIGludCBsZW4pCit7CisJcHJpbnRmKCIlcz0iLCB3aGF0KTsKKwlmd3JpdGUoYnVmLCAxLCBsZW4sIHN0ZG91dCk7CisJcHV0Y2hhcignXG4nKTsKK30KKworc3RhdGljIHZvaWQgZmluZF91c2VybmFtZV9pbl9pdGVtKFNlY0tleWNoYWluSXRlbVJlZiBpdGVtKQoreworCVNlY0tleWNoYWluQXR0cmlidXRlTGlzdCBsaXN0OworCVNlY0tleWNoYWluQXR0cmlidXRlIGF0dHI7CisKKwlsaXN0LmNvdW50ID0gMTsKKwlsaXN0LmF0dHIgPSAmYXR0cjsKKwlhdHRyLnRhZyA9IGtTZWNBY2NvdW50SXRlbUF0dHI7CisKKwlpZiAoU2VjS2V5Y2hhaW5JdGVtQ29weUNvbnRlbnQoaXRlbSwgTlVMTCwgJmxpc3QsIE5VTEwsIE5VTEwpKQorCQlyZXR1cm47CisKKwl3cml0ZV9pdGVtKCJ1c2VybmFtZSIsIGF0dHIuZGF0YSwgYXR0ci5sZW5ndGgpOworCVNlY0tleWNoYWluSXRlbUZyZWVDb250ZW50KCZsaXN0LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgZmluZF9pbnRlcm5ldF9wYXNzd29yZCh2b2lkKQoreworCXZvaWQgKmJ1ZjsKKwlVSW50MzIgbGVuOworCVNlY0tleWNoYWluSXRlbVJlZiBpdGVtOworCisJaWYgKFNlY0tleWNoYWluRmluZEludGVybmV0UGFzc3dvcmQoS0VZQ0hBSU5fQVJHUywgJmxlbiwgJmJ1ZiwgJml0ZW0pKQorCQlyZXR1cm47CisKKwl3cml0ZV9pdGVtKCJwYXNzd29yZCIsIGJ1ZiwgbGVuKTsKKwlpZiAoIXVzZXJuYW1lKQorCQlmaW5kX3VzZXJuYW1lX2luX2l0ZW0oaXRlbSk7CisKKwlTZWNLZXljaGFpbkl0ZW1GcmVlQ29udGVudChOVUxMLCBidWYpOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfaW50ZXJuZXRfcGFzc3dvcmQodm9pZCkKK3sKKwlTZWNLZXljaGFpbkl0ZW1SZWYgaXRlbTsKKworCS8qCisJICogUmVxdWlyZSBhdCBsZWFzdCBhIHByb3RvY29sIGFuZCBob3N0IGZvciByZW1vdmFsLCB3aGljaCBpcyB3aGF0IGdpdAorCSAqIHdpbGwgZ2l2ZSB1czsgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIG1vcmUgZmFuY3ksIHVzZSB0aGUKKwkgKiBLZXljaGFpbiBtYW5hZ2VyLgorCSAqLworCWlmICghcHJvdG9jb2wgfHwgIWhvc3QpCisJCXJldHVybjsKKworCWlmIChTZWNLZXljaGFpbkZpbmRJbnRlcm5ldFBhc3N3b3JkKEtFWUNIQUlOX0FSR1MsIDAsIE5VTEwsICZpdGVtKSkKKwkJcmV0dXJuOworCisJU2VjS2V5Y2hhaW5JdGVtRGVsZXRlKGl0ZW0pOworfQorCitzdGF0aWMgdm9pZCBhZGRfaW50ZXJuZXRfcGFzc3dvcmQodm9pZCkKK3sKKwkvKiBPbmx5IHN0b3JlIGNvbXBsZXRlIGNyZWRlbnRpYWxzICovCisJaWYgKCFwcm90b2NvbCB8fCAhaG9zdCB8fCAhdXNlcm5hbWUgfHwgIXBhc3N3b3JkKQorCQlyZXR1cm47CisKKwlpZiAoU2VjS2V5Y2hhaW5BZGRJbnRlcm5ldFBhc3N3b3JkKAorCSAgICAgIEtFWUNIQUlOX0FSR1MsCisJICAgICAgS0VZQ0hBSU5fSVRFTShwYXNzd29yZCksCisJICAgICAgTlVMTCkpCisJCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgcmVhZF9jcmVkZW50aWFsKHZvaWQpCit7CisJY2hhciBidWZbMTAyNF07CisKKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pKSB7CisJCWNoYXIgKnY7CisKKwkJaWYgKCFzdHJjbXAoYnVmLCAiXG4iKSkKKwkJCWJyZWFrOworCQlidWZbc3RybGVuKGJ1ZiktMV0gPSAnXDAnOworCisJCXYgPSBzdHJjaHIoYnVmLCAnPScpOworCQlpZiAoIXYpCisJCQlkaWUoImJhZCBpbnB1dDogJXMiLCBidWYpOworCQkqdisrID0gJ1wwJzsKKworCQlpZiAoIXN0cmNtcChidWYsICJwcm90b2NvbCIpKSB7CisJCQlpZiAoIXN0cmNtcCh2LCAiaW1hcCIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUlNQVA7CisJCQllbHNlIGlmICghc3RyY21wKHYsICJpbWFwcyIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUlNQVBTOworCQkJZWxzZSBpZiAoIXN0cmNtcCh2LCAiZnRwIikpCisJCQkJcHJvdG9jb2wgPSBrU2VjUHJvdG9jb2xUeXBlRlRQOworCQkJZWxzZSBpZiAoIXN0cmNtcCh2LCAiZnRwcyIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUZUUFM7CisJCQllbHNlIGlmICghc3RyY21wKHYsICJodHRwcyIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUhUVFBTOworCQkJZWxzZSBpZiAoIXN0cmNtcCh2LCAiaHR0cCIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUhUVFA7CisJCQllbHNlIGlmICghc3RyY21wKHYsICJzbXRwIikpCisJCQkJcHJvdG9jb2wgPSBrU2VjUHJvdG9jb2xUeXBlU01UUDsKKwkJCWVsc2UgLyogd2UgZG9uJ3QgeWV0IGhhbmRsZSBvdGhlciBwcm90b2NvbHMgKi8KKwkJCQlleGl0KDApOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiaG9zdCIpKSB7CisJCQljaGFyICpjb2xvbiA9IHN0cmNocih2LCAnOicpOworCQkJaWYgKGNvbG9uKSB7CisJCQkJKmNvbG9uKysgPSAnXDAnOworCQkJCXBvcnQgPSBhdG9pKGNvbG9uKTsKKwkJCX0KKwkJCWhvc3QgPSB4c3RyZHVwKHYpOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAicGF0aCIpKQorCQkJcGF0aCA9IHhzdHJkdXAodik7CisJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAidXNlcm5hbWUiKSkKKwkJCXVzZXJuYW1lID0geHN0cmR1cCh2KTsKKwkJZWxzZSBpZiAoIXN0cmNtcChidWYsICJwYXNzd29yZCIpKQorCQkJcGFzc3dvcmQgPSB4c3RyZHVwKHYpOworCX0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnVzYWdlID0KKwkJInVzYWdlOiBnaXQgY3JlZGVudGlhbC1vc3hrZXljaGFpbiA8Z2V0fHN0b3JlfGVyYXNlPiI7CisKKwlpZiAoIWFyZ3ZbMV0pCisJCWRpZSh1c2FnZSk7CisKKwlyZWFkX2NyZWRlbnRpYWwoKTsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJnZXQiKSkKKwkJZmluZF9pbnRlcm5ldF9wYXNzd29yZCgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInN0b3JlIikpCisJCWFkZF9pbnRlcm5ldF9wYXNzd29yZCgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImVyYXNlIikpCisJCWRlbGV0ZV9pbnRlcm5ldF9wYXNzd29yZCgpOworCS8qIG90aGVyd2lzZSwgaWdub3JlIHVua25vd24gYWN0aW9uICovCisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC93aW5jcmVkL01ha2VmaWxlIGIvY29udHJpYi9jcmVkZW50aWFsL3dpbmNyZWQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU5OTJjMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC93aW5jcmVkL01ha2VmaWxlCkBAIC0wLDAgKzEsMjIgQEAKK2FsbDogZ2l0LWNyZWRlbnRpYWwtd2luY3JlZC5leGUKKworLWluY2x1ZGUgLi4vLi4vLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrCisKK0NDID89IGdjYworUk0gPz0gcm0gLWYKK0NGTEFHUyA/PSAtTzIgLVdhbGwKKworcHJlZml4ID89IC91c3IvbG9jYWwKK2xpYmV4ZWNkaXIgPz0gJChwcmVmaXgpL2xpYmV4ZWMvZ2l0LWNvcmUKKworSU5TVEFMTCA/PSBpbnN0YWxsCisKK2dpdC1jcmVkZW50aWFsLXdpbmNyZWQuZXhlIDogZ2l0LWNyZWRlbnRpYWwtd2luY3JlZC5jCisJJChMSU5LLmMpICReICQoTE9BRExJQkVTKSAkKExETElCUykgLW8gJEAKKworaW5zdGFsbDogZ2l0LWNyZWRlbnRpYWwtd2luY3JlZC5leGUKKwkkKElOU1RBTEwpIC1tIDc1NSAkXiAkKGxpYmV4ZWNkaXIpCisKK2NsZWFuOgorCSQoUk0pIGdpdC1jcmVkZW50aWFsLXdpbmNyZWQuZXhlCmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvd2luY3JlZC9naXQtY3JlZGVudGlhbC13aW5jcmVkLmMgYi9jb250cmliL2NyZWRlbnRpYWwvd2luY3JlZC9naXQtY3JlZGVudGlhbC13aW5jcmVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJkYWQ0MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC93aW5jcmVkL2dpdC1jcmVkZW50aWFsLXdpbmNyZWQuYwpAQCAtMCwwICsxLDMyNyBAQAorLyoKKyAqIEEgZ2l0IGNyZWRlbnRpYWwgaGVscGVyIHRoYXQgaW50ZXJmYWNlIHdpdGggV2luZG93cycgQ3JlZGVudGlhbCBNYW5hZ2VyCisgKgorICovCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8aW8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisvKiBjb21tb24gaGVscGVycyAqLworCisjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KS9zaXplb2YoeFswXSkpCisKK3N0YXRpYyB2b2lkIGRpZShjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwljaGFyIG1zZ1s0MDk2XTsKKwl2YV9saXN0IHBhcmFtczsKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJdnNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksIGVyciwgcGFyYW1zKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworCXZhX2VuZChwYXJhbXMpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyB2b2lkICp4bWFsbG9jKHNpemVfdCBzaXplKQoreworCXZvaWQgKnJldCA9IG1hbGxvYyhzaXplKTsKKwlpZiAoIXJldCAmJiAhc2l6ZSkKKwkJcmV0ID0gbWFsbG9jKDEpOworCWlmICghcmV0KQorCQkgZGllKCJPdXQgb2YgbWVtb3J5Iik7CisJcmV0dXJuIHJldDsKK30KKworLyogTWluR1cgZG9lc24ndCBoYXZlIHdpbmNyZWQuaCwgc28gd2UgbmVlZCB0byBkZWZpbmUgc3R1ZmYgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0NSRURFTlRJQUxfQVRUUklCVVRFVyB7CisJTFBXU1RSIEtleXdvcmQ7CisJRFdPUkQgIEZsYWdzOworCURXT1JEICBWYWx1ZVNpemU7CisJTFBCWVRFIFZhbHVlOworfSBDUkVERU5USUFMX0FUVFJJQlVURVcsICpQQ1JFREVOVElBTF9BVFRSSUJVVEVXOworCit0eXBlZGVmIHN0cnVjdCBfQ1JFREVOVElBTFcgeworCURXT1JEICAgICAgICAgICAgICAgICAgRmxhZ3M7CisJRFdPUkQgICAgICAgICAgICAgICAgICBUeXBlOworCUxQV1NUUiAgICAgICAgICAgICAgICAgVGFyZ2V0TmFtZTsKKwlMUFdTVFIgICAgICAgICAgICAgICAgIENvbW1lbnQ7CisJRklMRVRJTUUgICAgICAgICAgICAgICBMYXN0V3JpdHRlbjsKKwlEV09SRCAgICAgICAgICAgICAgICAgIENyZWRlbnRpYWxCbG9iU2l6ZTsKKwlMUEJZVEUgICAgICAgICAgICAgICAgIENyZWRlbnRpYWxCbG9iOworCURXT1JEICAgICAgICAgICAgICAgICAgUGVyc2lzdDsKKwlEV09SRCAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUNvdW50OworCVBDUkVERU5USUFMX0FUVFJJQlVURVcgQXR0cmlidXRlczsKKwlMUFdTVFIgICAgICAgICAgICAgICAgIFRhcmdldEFsaWFzOworCUxQV1NUUiAgICAgICAgICAgICAgICAgVXNlck5hbWU7Cit9IENSRURFTlRJQUxXLCAqUENSRURFTlRJQUxXOworCisjZGVmaW5lIENSRURfVFlQRV9HRU5FUklDIDEKKyNkZWZpbmUgQ1JFRF9QRVJTSVNUX0xPQ0FMX01BQ0hJTkUgMgorI2RlZmluZSBDUkVEX01BWF9BVFRSSUJVVEVTIDY0CisKK3R5cGVkZWYgQk9PTCAoV0lOQVBJICpDcmVkV3JpdGVXVCkoUENSRURFTlRJQUxXLCBEV09SRCk7Cit0eXBlZGVmIEJPT0wgKFdJTkFQSSAqQ3JlZEVudW1lcmF0ZVdUKShMUENXU1RSLCBEV09SRCwgRFdPUkQgKiwKKyAgICBQQ1JFREVOVElBTFcgKiopOwordHlwZWRlZiBWT0lEIChXSU5BUEkgKkNyZWRGcmVlVCkoUFZPSUQpOwordHlwZWRlZiBCT09MIChXSU5BUEkgKkNyZWREZWxldGVXVCkoTFBDV1NUUiwgRFdPUkQsIERXT1JEKTsKKworc3RhdGljIEhNT0RVTEUgYWR2YXBpOworc3RhdGljIENyZWRXcml0ZVdUIENyZWRXcml0ZVc7CitzdGF0aWMgQ3JlZEVudW1lcmF0ZVdUIENyZWRFbnVtZXJhdGVXOworc3RhdGljIENyZWRGcmVlVCBDcmVkRnJlZTsKK3N0YXRpYyBDcmVkRGVsZXRlV1QgQ3JlZERlbGV0ZVc7CisKK3N0YXRpYyB2b2lkIGxvYWRfY3JlZF9mdW5jcyh2b2lkKQoreworCS8qIGxvYWQgRExMcyAqLworCWFkdmFwaSA9IExvYWRMaWJyYXJ5RXhBKCJhZHZhcGkzMi5kbGwiLCBOVUxMLAorCQkJCUxPQURfTElCUkFSWV9TRUFSQ0hfU1lTVEVNMzIpOworCWlmICghYWR2YXBpKQorCQlkaWUoImZhaWxlZCB0byBsb2FkIGFkdmFwaTMyLmRsbCIpOworCisJLyogZ2V0IGZ1bmN0aW9uIHBvaW50ZXJzICovCisJQ3JlZFdyaXRlVyA9IChDcmVkV3JpdGVXVClHZXRQcm9jQWRkcmVzcyhhZHZhcGksICJDcmVkV3JpdGVXIik7CisJQ3JlZEVudW1lcmF0ZVcgPSAoQ3JlZEVudW1lcmF0ZVdUKUdldFByb2NBZGRyZXNzKGFkdmFwaSwKKwkgICAgIkNyZWRFbnVtZXJhdGVXIik7CisJQ3JlZEZyZWUgPSAoQ3JlZEZyZWVUKUdldFByb2NBZGRyZXNzKGFkdmFwaSwgIkNyZWRGcmVlIik7CisJQ3JlZERlbGV0ZVcgPSAoQ3JlZERlbGV0ZVdUKUdldFByb2NBZGRyZXNzKGFkdmFwaSwgIkNyZWREZWxldGVXIik7CisJaWYgKCFDcmVkV3JpdGVXIHx8ICFDcmVkRW51bWVyYXRlVyB8fCAhQ3JlZEZyZWUgfHwgIUNyZWREZWxldGVXKQorCQlkaWUoImZhaWxlZCB0byBsb2FkIGZ1bmN0aW9ucyIpOworfQorCitzdGF0aWMgV0NIQVIgKnd1c2VybmFtZSwgKnBhc3N3b3JkLCAqcHJvdG9jb2wsICpob3N0LCAqcGF0aCwgdGFyZ2V0WzEwMjRdOworCitzdGF0aWMgdm9pZCB3cml0ZV9pdGVtKGNvbnN0IGNoYXIgKndoYXQsIExQQ1dTVFIgd2J1ZiwgaW50IHdsZW4pCit7CisJY2hhciAqYnVmOworCisJaWYgKCF3YnVmIHx8ICF3bGVuKSB7CisJCXByaW50ZigiJXM9XG4iLCB3aGF0KTsKKwkJcmV0dXJuOworCX0KKworCWludCBsZW4gPSBXaWRlQ2hhclRvTXVsdGlCeXRlKENQX1VURjgsIDAsIHdidWYsIHdsZW4sIE5VTEwsIDAsIE5VTEwsCisJICAgIEZBTFNFKTsKKwlidWYgPSB4bWFsbG9jKGxlbik7CisKKwlpZiAoIVdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfVVRGOCwgMCwgd2J1Ziwgd2xlbiwgYnVmLCBsZW4sIE5VTEwsIEZBTFNFKSkKKwkJZGllKCJXaWRlQ2hhclRvTXVsdGlCeXRlIGZhaWxlZCEiKTsKKworCXByaW50ZigiJXM9Iiwgd2hhdCk7CisJZndyaXRlKGJ1ZiwgMSwgbGVuLCBzdGRvdXQpOworCXB1dGNoYXIoJ1xuJyk7CisJZnJlZShidWYpOworfQorCisvKgorICogTWF0Y2ggYW4gKG9wdGlvbmFsKSBleHBlY3RlZCBzdHJpbmcgYW5kIGEgZGVsaW1pdGVyIGluIHRoZSB0YXJnZXQgc3RyaW5nLAorICogY29uc3VtaW5nIHRoZSBtYXRjaGVkIHRleHQgYnkgdXBkYXRpbmcgdGhlIHRhcmdldCBwb2ludGVyLgorICovCisKK3N0YXRpYyBMUENXU1RSIHdjc3N0cl9sYXN0KExQQ1dTVFIgc3RyLCBMUENXU1RSIGZpbmQpCit7CisJTFBDV1NUUiByZXMgPSBOVUxMLCBwb3M7CisJZm9yIChwb3MgPSB3Y3NzdHIoc3RyLCBmaW5kKTsgcG9zOyBwb3MgPSB3Y3NzdHIocG9zICsgMSwgZmluZCkpCisJCXJlcyA9IHBvczsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IG1hdGNoX3BhcnRfd2l0aF9sYXN0KExQQ1dTVFIgKnB0YXJnZXQsIExQQ1dTVFIgd2FudCwgTFBDV1NUUiBkZWxpbSwgaW50IGxhc3QpCit7CisJTFBDV1NUUiBkZWxpbV9wb3MsIHN0YXJ0ID0gKnB0YXJnZXQ7CisJaW50IGxlbjsKKworCS8qIGZpbmQgc3RhcnQgb2YgZGVsaW1pdGVyIChvciBlbmQtb2Ytc3RyaW5nIGlmIGRlbGltIGlzIGVtcHR5KSAqLworCWlmICgqZGVsaW0pCisJCWRlbGltX3BvcyA9IGxhc3QgPyB3Y3NzdHJfbGFzdChzdGFydCwgZGVsaW0pIDogd2Nzc3RyKHN0YXJ0LCBkZWxpbSk7CisJZWxzZQorCQlkZWxpbV9wb3MgPSBzdGFydCArIHdjc2xlbihzdGFydCk7CisKKwkvKgorCSAqIG1hdGNoIHRleHQgdXAgdG8gZGVsaW1pdGVyLCBvciBlbmQgb2Ygc3RyaW5nIChlLmcuIHRoZSAnLycgYWZ0ZXIKKwkgKiBob3N0IGlzIG9wdGlvbmFsIGlmIG5vdCBmb2xsb3dlZCBieSBhIHBhdGgpCisJICovCisJaWYgKGRlbGltX3BvcykKKwkJbGVuID0gZGVsaW1fcG9zIC0gc3RhcnQ7CisJZWxzZQorCQlsZW4gPSB3Y3NsZW4oc3RhcnQpOworCisJLyogdXBkYXRlIHB0YXJnZXQgaWYgd2UgZWl0aGVyIGZvdW5kIGEgZGVsaW1pdGVyIG9yIG5lZWQgYSBtYXRjaCAqLworCWlmIChkZWxpbV9wb3MgfHwgd2FudCkKKwkJKnB0YXJnZXQgPSBkZWxpbV9wb3MgPyBkZWxpbV9wb3MgKyB3Y3NsZW4oZGVsaW0pIDogc3RhcnQgKyBsZW47CisKKwlyZXR1cm4gIXdhbnQgfHwgKCF3Y3NuY21wKHdhbnQsIHN0YXJ0LCBsZW4pICYmICF3YW50W2xlbl0pOworfQorCitzdGF0aWMgaW50IG1hdGNoX3BhcnQoTFBDV1NUUiAqcHRhcmdldCwgTFBDV1NUUiB3YW50LCBMUENXU1RSIGRlbGltKQoreworCXJldHVybiBtYXRjaF9wYXJ0X3dpdGhfbGFzdChwdGFyZ2V0LCB3YW50LCBkZWxpbSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfcGFydF9sYXN0KExQQ1dTVFIgKnB0YXJnZXQsIExQQ1dTVFIgd2FudCwgTFBDV1NUUiBkZWxpbSkKK3sKKwlyZXR1cm4gbWF0Y2hfcGFydF93aXRoX2xhc3QocHRhcmdldCwgd2FudCwgZGVsaW0sIDEpOworfQorCitzdGF0aWMgaW50IG1hdGNoX2NyZWQoY29uc3QgQ1JFREVOVElBTFcgKmNyZWQpCit7CisJTFBDV1NUUiB0YXJnZXQgPSBjcmVkLT5UYXJnZXROYW1lOworCWlmICh3dXNlcm5hbWUgJiYgd2NzY21wKHd1c2VybmFtZSwgY3JlZC0+VXNlck5hbWUgPyBjcmVkLT5Vc2VyTmFtZSA6IEwiIikpCisJCXJldHVybiAwOworCisJcmV0dXJuIG1hdGNoX3BhcnQoJnRhcmdldCwgTCJnaXQiLCBMIjoiKSAmJgorCQltYXRjaF9wYXJ0KCZ0YXJnZXQsIHByb3RvY29sLCBMIjovLyIpICYmCisJCW1hdGNoX3BhcnRfbGFzdCgmdGFyZ2V0LCB3dXNlcm5hbWUsIEwiQCIpICYmCisJCW1hdGNoX3BhcnQoJnRhcmdldCwgaG9zdCwgTCIvIikgJiYKKwkJbWF0Y2hfcGFydCgmdGFyZ2V0LCBwYXRoLCBMIiIpOworfQorCitzdGF0aWMgdm9pZCBnZXRfY3JlZGVudGlhbCh2b2lkKQoreworCUNSRURFTlRJQUxXICoqY3JlZHM7CisJRFdPUkQgbnVtX2NyZWRzOworCWludCBpOworCisJaWYgKCFDcmVkRW51bWVyYXRlVyhMImdpdDoqIiwgMCwgJm51bV9jcmVkcywgJmNyZWRzKSkKKwkJcmV0dXJuOworCisJLyogc2VhcmNoIGZvciB0aGUgZmlyc3QgY3JlZGVudGlhbCB0aGF0IG1hdGNoZXMgdXNlcm5hbWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NyZWRzOyArK2kpCisJCWlmIChtYXRjaF9jcmVkKGNyZWRzW2ldKSkgeworCQkJd3JpdGVfaXRlbSgidXNlcm5hbWUiLCBjcmVkc1tpXS0+VXNlck5hbWUsCisJCQkJY3JlZHNbaV0tPlVzZXJOYW1lID8gd2NzbGVuKGNyZWRzW2ldLT5Vc2VyTmFtZSkgOiAwKTsKKwkJCXdyaXRlX2l0ZW0oInBhc3N3b3JkIiwKKwkJCQkoTFBDV1NUUiljcmVkc1tpXS0+Q3JlZGVudGlhbEJsb2IsCisJCQkJY3JlZHNbaV0tPkNyZWRlbnRpYWxCbG9iU2l6ZSAvIHNpemVvZihXQ0hBUikpOworCQkJYnJlYWs7CisJCX0KKworCUNyZWRGcmVlKGNyZWRzKTsKK30KKworc3RhdGljIHZvaWQgc3RvcmVfY3JlZGVudGlhbCh2b2lkKQoreworCUNSRURFTlRJQUxXIGNyZWQ7CisKKwlpZiAoIXd1c2VybmFtZSB8fCAhcGFzc3dvcmQpCisJCXJldHVybjsKKworCWNyZWQuRmxhZ3MgPSAwOworCWNyZWQuVHlwZSA9IENSRURfVFlQRV9HRU5FUklDOworCWNyZWQuVGFyZ2V0TmFtZSA9IHRhcmdldDsKKwljcmVkLkNvbW1lbnQgPSBMInNhdmVkIGJ5IGdpdC1jcmVkZW50aWFsLXdpbmNyZWQiOworCWNyZWQuQ3JlZGVudGlhbEJsb2JTaXplID0gKHdjc2xlbihwYXNzd29yZCkpICogc2l6ZW9mKFdDSEFSKTsKKwljcmVkLkNyZWRlbnRpYWxCbG9iID0gKExQVk9JRClwYXNzd29yZDsKKwljcmVkLlBlcnNpc3QgPSBDUkVEX1BFUlNJU1RfTE9DQUxfTUFDSElORTsKKwljcmVkLkF0dHJpYnV0ZUNvdW50ID0gMDsKKwljcmVkLkF0dHJpYnV0ZXMgPSBOVUxMOworCWNyZWQuVGFyZ2V0QWxpYXMgPSBOVUxMOworCWNyZWQuVXNlck5hbWUgPSB3dXNlcm5hbWU7CisKKwlpZiAoIUNyZWRXcml0ZVcoJmNyZWQsIDApKQorCQlkaWUoIkNyZWRXcml0ZSBmYWlsZWQiKTsKK30KKworc3RhdGljIHZvaWQgZXJhc2VfY3JlZGVudGlhbCh2b2lkKQoreworCUNSRURFTlRJQUxXICoqY3JlZHM7CisJRFdPUkQgbnVtX2NyZWRzOworCWludCBpOworCisJaWYgKCFDcmVkRW51bWVyYXRlVyhMImdpdDoqIiwgMCwgJm51bV9jcmVkcywgJmNyZWRzKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IG51bV9jcmVkczsgKytpKSB7CisJCWlmIChtYXRjaF9jcmVkKGNyZWRzW2ldKSkKKwkJCUNyZWREZWxldGVXKGNyZWRzW2ldLT5UYXJnZXROYW1lLCBjcmVkc1tpXS0+VHlwZSwgMCk7CisJfQorCisJQ3JlZEZyZWUoY3JlZHMpOworfQorCitzdGF0aWMgV0NIQVIgKnV0ZjhfdG9fdXRmMTZfZHVwKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgd2xlbiA9IE11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfVVRGOCwgMCwgc3RyLCAtMSwgTlVMTCwgMCk7CisJV0NIQVIgKndzdHIgPSB4bWFsbG9jKHNpemVvZihXQ0hBUikgKiB3bGVuKTsKKwlNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX1VURjgsIDAsIHN0ciwgLTEsIHdzdHIsIHdsZW4pOworCXJldHVybiB3c3RyOworfQorCitzdGF0aWMgdm9pZCByZWFkX2NyZWRlbnRpYWwodm9pZCkKK3sKKwljaGFyIGJ1ZlsxMDI0XTsKKworCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBzdGRpbikpIHsKKwkJY2hhciAqdjsKKwkJaW50IGxlbiA9IHN0cmxlbihidWYpOworCQkvKiBzdHJpcCB0cmFpbGluZyBDUiAvIExGICovCisJCXdoaWxlIChsZW4gJiYgc3RyY2hyKCJcclxuIiwgYnVmW2xlbiAtIDFdKSkKKwkJCWJ1ZlstLWxlbl0gPSAwOworCisJCWlmICghKmJ1ZikKKwkJCWJyZWFrOworCisJCXYgPSBzdHJjaHIoYnVmLCAnPScpOworCQlpZiAoIXYpCisJCQlkaWUoImJhZCBpbnB1dDogJXMiLCBidWYpOworCQkqdisrID0gJ1wwJzsKKworCQlpZiAoIXN0cmNtcChidWYsICJwcm90b2NvbCIpKQorCQkJcHJvdG9jb2wgPSB1dGY4X3RvX3V0ZjE2X2R1cCh2KTsKKwkJZWxzZSBpZiAoIXN0cmNtcChidWYsICJob3N0IikpCisJCQlob3N0ID0gdXRmOF90b191dGYxNl9kdXAodik7CisJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAicGF0aCIpKQorCQkJcGF0aCA9IHV0ZjhfdG9fdXRmMTZfZHVwKHYpOworCQllbHNlIGlmICghc3RyY21wKGJ1ZiwgInVzZXJuYW1lIikpIHsKKwkJCXd1c2VybmFtZSA9IHV0ZjhfdG9fdXRmMTZfZHVwKHYpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCAicGFzc3dvcmQiKSkKKwkJCXBhc3N3b3JkID0gdXRmOF90b191dGYxNl9kdXAodik7CisJCWVsc2UKKwkJCWRpZSgidW5yZWNvZ25pemVkIGlucHV0Iik7CisJfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNoYXIgKnVzYWdlID0KKwkgICAgInVzYWdlOiBnaXQgY3JlZGVudGlhbC13aW5jcmVkIDxnZXR8c3RvcmV8ZXJhc2U+XG4iOworCisJaWYgKCFhcmd2WzFdKQorCQlkaWUodXNhZ2UpOworCisJLyogZ2l0IHVzZSBiaW5hcnkgcGlwZXMgdG8gYXZvaWQgQ1JMRi1pc3N1ZXMgKi8KKwlfc2V0bW9kZShfZmlsZW5vKHN0ZGluKSwgX09fQklOQVJZKTsKKwlfc2V0bW9kZShfZmlsZW5vKHN0ZG91dCksIF9PX0JJTkFSWSk7CisKKwlyZWFkX2NyZWRlbnRpYWwoKTsKKworCWxvYWRfY3JlZF9mdW5jcygpOworCisJaWYgKCFwcm90b2NvbCB8fCAhKGhvc3QgfHwgcGF0aCkpCisJCXJldHVybiAwOworCisJLyogcHJlcGFyZSAndGFyZ2V0JywgdGhlIHVuaXF1ZSBrZXkgZm9yIHRoZSBjcmVkZW50aWFsICovCisJd2NzY3B5KHRhcmdldCwgTCJnaXQ6Iik7CisJd2NzbmNhdCh0YXJnZXQsIHByb3RvY29sLCBBUlJBWV9TSVpFKHRhcmdldCkpOworCXdjc25jYXQodGFyZ2V0LCBMIjovLyIsIEFSUkFZX1NJWkUodGFyZ2V0KSk7CisJaWYgKHd1c2VybmFtZSkgeworCQl3Y3NuY2F0KHRhcmdldCwgd3VzZXJuYW1lLCBBUlJBWV9TSVpFKHRhcmdldCkpOworCQl3Y3NuY2F0KHRhcmdldCwgTCJAIiwgQVJSQVlfU0laRSh0YXJnZXQpKTsKKwl9CisJaWYgKGhvc3QpCisJCXdjc25jYXQodGFyZ2V0LCBob3N0LCBBUlJBWV9TSVpFKHRhcmdldCkpOworCWlmIChwYXRoKSB7CisJCXdjc25jYXQodGFyZ2V0LCBMIi8iLCBBUlJBWV9TSVpFKHRhcmdldCkpOworCQl3Y3NuY2F0KHRhcmdldCwgcGF0aCwgQVJSQVlfU0laRSh0YXJnZXQpKTsKKwl9CisKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiZ2V0IikpCisJCWdldF9jcmVkZW50aWFsKCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAic3RvcmUiKSkKKwkJc3RvcmVfY3JlZGVudGlhbCgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImVyYXNlIikpCisJCWVyYXNlX2NyZWRlbnRpYWwoKTsKKwkvKiBvdGhlcndpc2UsIGlnbm9yZSB1bmtub3duIGFjdGlvbiAqLworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9kaWZmLWhpZ2hsaWdodC8uZ2l0aWdub3JlIGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNzQ1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2RpZmYtaGlnaGxpZ2h0Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitzaGViYW5nLnBlcmwKK2RpZmYtaGlnaGxpZ2h0CmRpZmYgLS1naXQgYS9jb250cmliL2RpZmYtaGlnaGxpZ2h0L0RpZmZIaWdobGlnaHQucG0gYi9jb250cmliL2RpZmYtaGlnaGxpZ2h0L0RpZmZIaWdobGlnaHQucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1ODk5MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvRGlmZkhpZ2hsaWdodC5wbQpAQCAtMCwwICsxLDI4NSBAQAorcGFja2FnZSBEaWZmSGlnaGxpZ2h0OworCit1c2UgNS4wMDg7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7Cit1c2Ugc3RyaWN0OworCisjIFVzZSB0aGUgY29ycmVjdCB2YWx1ZSBmb3IgYm90aCBVTklYIGFuZCBXaW5kb3dzICgvZGV2L251bGwgdnMgbnVsKQordXNlIEZpbGU6OlNwZWM7CisKK215ICROVUxMID0gRmlsZTo6U3BlYy0+ZGV2bnVsbCgpOworCisjIEhpZ2hsaWdodCBieSByZXZlcnNpbmcgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZC4gWW91IGNvdWxkIGRvCisjIG90aGVyIHRoaW5ncyBsaWtlIGJvbGQgb3IgdW5kZXJsaW5lIGlmIHlvdSBwcmVmZXIuCitteSBAT0xEX0hJR0hMSUdIVCA9ICgKKwljb2xvcl9jb25maWcoJ2NvbG9yLmRpZmYtaGlnaGxpZ2h0Lm9sZG5vcm1hbCcpLAorCWNvbG9yX2NvbmZpZygnY29sb3IuZGlmZi1oaWdobGlnaHQub2xkaGlnaGxpZ2h0JywgIlx4MWJbN20iKSwKKwljb2xvcl9jb25maWcoJ2NvbG9yLmRpZmYtaGlnaGxpZ2h0Lm9sZHJlc2V0JywgIlx4MWJbMjdtIikKKyk7CitteSBATkVXX0hJR0hMSUdIVCA9ICgKKwljb2xvcl9jb25maWcoJ2NvbG9yLmRpZmYtaGlnaGxpZ2h0Lm5ld25vcm1hbCcsICRPTERfSElHSExJR0hUWzBdKSwKKwljb2xvcl9jb25maWcoJ2NvbG9yLmRpZmYtaGlnaGxpZ2h0Lm5ld2hpZ2hsaWdodCcsICRPTERfSElHSExJR0hUWzFdKSwKKwljb2xvcl9jb25maWcoJ2NvbG9yLmRpZmYtaGlnaGxpZ2h0Lm5ld3Jlc2V0JywgJE9MRF9ISUdITElHSFRbMl0pCispOworCitteSAkUkVTRVQgPSAiXHgxYlttIjsKK215ICRDT0xPUiA9IHFyL1x4MWJcW1swLTk7XSptLzsKK215ICRCT1JJTkcgPSBxci8kQ09MT1J8XHMvOworCitteSBAcmVtb3ZlZDsKK215IEBhZGRlZDsKK215ICRpbl9odW5rOworbXkgJGdyYXBoX2luZGVudCA9IDA7CisKK291ciAkbGluZV9jYiA9IHN1YiB7IHByaW50IEBfIH07CitvdXIgJGZsdXNoX2NiID0gc3ViIHsgbG9jYWwgJHwgPSAxIH07CisKKyMgQ291bnQgdGhlIHZpc2libGUgd2lkdGggb2YgYSBzdHJpbmcsIGV4Y2x1ZGluZyBhbnkgdGVybWluYWwgY29sb3Igc2VxdWVuY2VzLgorc3ViIHZpc2libGVfd2lkdGggeworCWxvY2FsICRfID0gc2hpZnQ7CisJbXkgJHJldCA9IDA7CisJd2hpbGUgKGxlbmd0aCkgeworCQlpZiAocy9eJENPTE9SLy8pIHsKKwkJCSMgc2tpcCBjb2xvcnMKKwkJfSBlbHNpZiAocy9eLi8vKSB7CisJCQkkcmV0Kys7CisJCX0KKwl9CisJcmV0dXJuICRyZXQ7Cit9CisKKyMgUmV0dXJuIGEgc3Vic3RyaW5nIG9mICRzdHIsIG9taXR0aW5nICRsZW4gdmlzaWJsZSBjaGFyYWN0ZXJzIGZyb20gdGhlCisjIGJlZ2lubmluZywgd2hlcmUgdGVybWluYWwgY29sb3Igc2VxdWVuY2VzIGRvIG5vdCBjb3VudCBhcyB2aXNpYmxlLgorc3ViIHZpc2libGVfc3Vic3RyIHsKKwlteSAoJHN0ciwgJGxlbikgPSBAXzsKKwl3aGlsZSAoJGxlbiA+IDApIHsKKwkJaWYgKCRzdHIgPX4gcy9eJENPTE9SLy8pIHsKKwkJCW5leHQKKwkJfQorCQkkc3RyID1+IHMvXi4vLzsKKwkJJGxlbi0tOworCX0KKwlyZXR1cm4gJHN0cjsKK30KKworc3ViIGhhbmRsZV9saW5lIHsKKwlteSAkb3JpZyA9IHNoaWZ0OworCWxvY2FsICRfID0gJG9yaWc7CisKKwkjIG1hdGNoIGEgZ3JhcGggbGluZSB0aGF0IGJlZ2lucyBhIGNvbW1pdAorCWlmICgvXig/OiRDT0xPUj9cfCRDT0xPUj9bIF0pKiAjIHplcm8gb3IgbW9yZSBsZWFkaW5nICJ8IiB3aXRoIHNwYWNlCisJICAgICAgICAgJENPTE9SP1wqJENPTE9SP1sgXSAgICMgYSAiKiIgd2l0aCBpdHMgdHJhaWxpbmcgc3BhY2UKKwkgICAgICAoPzokQ09MT1I/XHwkQ09MT1I/WyBdKSogIyB6ZXJvIG9yIG1vcmUgdHJhaWxpbmcgInwiCisJICAgICAgICAgICAgICAgICAgICAgICAgIFsgXSogICMgdHJhaWxpbmcgd2hpdGVzcGFjZSBmb3IgbWVyZ2VzCisJICAgIC94KSB7CisJCW15ICRncmFwaF9wcmVmaXggPSAkJjsKKworCQkjIFdlIG11c3QgZmx1c2ggYmVmb3JlIHNldHRpbmcgZ3JhcGggaW5kZW50LCBzaW5jZSB0aGUKKwkJIyBuZXcgY29tbWl0IG1heSBiZSBpbmRlbnRlZCBkaWZmZXJlbnRseSBmcm9tIHdoYXQgd2UKKwkJIyBxdWV1ZWQuCisJCWZsdXNoKCk7CisJCSRncmFwaF9pbmRlbnQgPSB2aXNpYmxlX3dpZHRoKCRncmFwaF9wcmVmaXgpOworCisJfSBlbHNpZiAoJGdyYXBoX2luZGVudCkgeworCQlpZiAobGVuZ3RoKCRfKSA8ICRncmFwaF9pbmRlbnQpIHsKKwkJCSRncmFwaF9pbmRlbnQgPSAwOworCQl9IGVsc2UgeworCQkJJF8gPSB2aXNpYmxlX3N1YnN0cigkXywgJGdyYXBoX2luZGVudCk7CisJCX0KKwl9CisKKwlpZiAoISRpbl9odW5rKSB7CisJCSRsaW5lX2NiLT4oJG9yaWcpOworCQkkaW5faHVuayA9IC9eJENPTE9SKlxAXEAgLzsKKwl9CisJZWxzaWYgKC9eJENPTE9SKi0vKSB7CisJCXB1c2ggQHJlbW92ZWQsICRvcmlnOworCX0KKwllbHNpZiAoL14kQ09MT1IqXCsvKSB7CisJCXB1c2ggQGFkZGVkLCAkb3JpZzsKKwl9CisJZWxzZSB7CisJCWZsdXNoKCk7CisJCSRsaW5lX2NiLT4oJG9yaWcpOworCQkkaW5faHVuayA9IC9eJENPTE9SKltcQCBdLzsKKwl9CisKKwkjIE1vc3Qgb2YgdGhlIHRpbWUgdGhlcmUgaXMgZW5vdWdoIG91dHB1dCB0byBrZWVwIHRoaW5ncyBzdHJlYW1pbmcsCisJIyBidXQgZm9yIHNvbWV0aGluZyBsaWtlICJnaXQgbG9nIC1TZm9vIiwgeW91IGNhbiBnZXQgb25lIGVhcmx5CisJIyBjb21taXQgYW5kIHRoZW4gbWFueSBzZWNvbmRzIG9mIG5vdGhpbmcuIFdlIHdhbnQgdG8gc2hvdworCSMgdGhhdCBvbmUgY29tbWl0IGFzIHNvb24gYXMgcG9zc2libGUuCisJIworCSMgU2luY2Ugd2UgY2FuIHJlY2VpdmUgYXJiaXRyYXJ5IGlucHV0LCB0aGVyZSdzIG5vIG9wdGltYWwKKwkjIHBsYWNlIHRvIGZsdXNoLiBGbHVzaGluZyBvbiBhIGJsYW5rIGxpbmUgaXMgYSBoZXVyaXN0aWMgdGhhdAorCSMgaGFwcGVucyB0byBtYXRjaCBnaXQtbG9nIG91dHB1dC4KKwlpZiAoIWxlbmd0aCkgeworCQkkZmx1c2hfY2ItPigpOworCX0KK30KKworc3ViIGZsdXNoIHsKKwkjIEZsdXNoIGFueSBxdWV1ZWQgaHVuayAodGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlcmUgaXMgbm8gdHJhaWxpbmcKKwkjIGNvbnRleHQgaW4gdGhlIGZpbmFsIGRpZmYgb2YgdGhlIGlucHV0KS4KKwlzaG93X2h1bmsoXEByZW1vdmVkLCBcQGFkZGVkKTsKKwlAcmVtb3ZlZCA9ICgpOworCUBhZGRlZCA9ICgpOworfQorCitzdWIgaGlnaGxpZ2h0X3N0ZGluIHsKKwl3aGlsZSAoPFNURElOPikgeworCQloYW5kbGVfbGluZSgkXyk7CisJfQorCWZsdXNoKCk7Cit9CisKKyMgSWRlYWxseSB3ZSB3b3VsZCBmZWVkIHRoZSBkZWZhdWx0IGFzIGEgaHVtYW4tcmVhZGFibGUgY29sb3IgdG8KKyMgZ2l0LWNvbmZpZyBhcyB0aGUgZmFsbGJhY2sgdmFsdWUuIEJ1dCBkaWZmLWhpZ2hsaWdodCBkb2VzCisjIG5vdCBvdGhlcndpc2UgZGVwZW5kIG9uIGdpdCBhdCBhbGwsIGFuZCB0aGVyZSBhcmUgcmVwb3J0cworIyBvZiBpdCBiZWluZyB1c2VkIGluIG90aGVyIHNldHRpbmdzLiBMZXQncyBoYW5kbGUgb3VyIG93bgorIyBmYWxsYmFjaywgd2hpY2ggbWVhbnMgd2Ugd2lsbCB3b3JrIGV2ZW4gaWYgZ2l0IGNhbid0IGJlIHJ1bi4KK3N1YiBjb2xvcl9jb25maWcgeworCW15ICgka2V5LCAkZGVmYXVsdCkgPSBAXzsKKwlteSAkcyA9IGBnaXQgY29uZmlnIC0tZ2V0LWNvbG9yICRrZXkgMj4kTlVMTGA7CisJcmV0dXJuIGxlbmd0aCgkcykgPyAkcyA6ICRkZWZhdWx0OworfQorCitzdWIgc2hvd19odW5rIHsKKwlteSAoJGEsICRiKSA9IEBfOworCisJIyBJZiBvbmUgc2lkZSBpcyBlbXB0eSwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbXBhcmUgb3IgaGlnaGxpZ2h0LgorCWlmICghQCRhIHx8ICFAJGIpIHsKKwkJJGxpbmVfY2ItPihAJGEsIEAkYik7CisJCXJldHVybjsKKwl9CisKKwkjIElmIHdlIGhhdmUgbWlzbWF0Y2hlZCBudW1iZXJzIG9mIGxpbmVzIG9uIGVhY2ggc2lkZSwgd2UgY291bGQgdHJ5IHRvCisJIyBiZSBjbGV2ZXIgYW5kIG1hdGNoIHVwIHNpbWlsYXIgbGluZXMuIEJ1dCBmb3Igbm93IHdlIGFyZSBzaW1wbGUgYW5kCisJIyBzdHVwaWQsIGFuZCBvbmx5IGhhbmRsZSBtdWx0aS1saW5lIGh1bmtzIHRoYXQgcmVtb3ZlIGFuZCBhZGQgdGhlIHNhbWUKKwkjIG51bWJlciBvZiBsaW5lcy4KKwlpZiAoQCRhICE9IEAkYikgeworCQkkbGluZV9jYi0+KEAkYSwgQCRiKTsKKwkJcmV0dXJuOworCX0KKworCW15IEBxdWV1ZTsKKwlmb3IgKG15ICRpID0gMDsgJGkgPCBAJGE7ICRpKyspIHsKKwkJbXkgKCRybSwgJGFkZCkgPSBoaWdobGlnaHRfcGFpcigkYS0+WyRpXSwgJGItPlskaV0pOworCQkkbGluZV9jYi0+KCRybSk7CisJCXB1c2ggQHF1ZXVlLCAkYWRkOworCX0KKwkkbGluZV9jYi0+KEBxdWV1ZSk7Cit9CisKK3N1YiBoaWdobGlnaHRfcGFpciB7CisJbXkgQGEgPSBzcGxpdF9saW5lKHNoaWZ0KTsKKwlteSBAYiA9IHNwbGl0X2xpbmUoc2hpZnQpOworCisJIyBGaW5kIGNvbW1vbiBwcmVmaXgsIHRha2luZyBjYXJlIHRvIHNraXAgYW55IGFuc2kKKwkjIGNvbG9yIGNvZGVzLgorCW15ICRzZWVuX3BsdXNtaW51czsKKwlteSAoJHBhLCAkcGIpID0gKDAsIDApOworCXdoaWxlICgkcGEgPCBAYSAmJiAkcGIgPCBAYikgeworCQlpZiAoJGFbJHBhXSA9fiAvJENPTE9SLykgeworCQkJJHBhKys7CisJCX0KKwkJZWxzaWYgKCRiWyRwYl0gPX4gLyRDT0xPUi8pIHsKKwkJCSRwYisrOworCQl9CisJCWVsc2lmICgkYVskcGFdIGVxICRiWyRwYl0pIHsKKwkJCSRwYSsrOworCQkJJHBiKys7CisJCX0KKwkJZWxzaWYgKCEkc2Vlbl9wbHVzbWludXMgJiYgJGFbJHBhXSBlcSAnLScgJiYgJGJbJHBiXSBlcSAnKycpIHsKKwkJCSRzZWVuX3BsdXNtaW51cyA9IDE7CisJCQkkcGErKzsKKwkJCSRwYisrOworCQl9CisJCWVsc2UgeworCQkJbGFzdDsKKwkJfQorCX0KKworCSMgRmluZCBjb21tb24gc3VmZml4LCBpZ25vcmluZyBjb2xvcnMuCisJbXkgKCRzYSwgJHNiKSA9ICgkI2EsICQjYik7CisJd2hpbGUgKCRzYSA+PSAkcGEgJiYgJHNiID49ICRwYikgeworCQlpZiAoJGFbJHNhXSA9fiAvJENPTE9SLykgeworCQkJJHNhLS07CisJCX0KKwkJZWxzaWYgKCRiWyRzYl0gPX4gLyRDT0xPUi8pIHsKKwkJCSRzYi0tOworCQl9CisJCWVsc2lmICgkYVskc2FdIGVxICRiWyRzYl0pIHsKKwkJCSRzYS0tOworCQkJJHNiLS07CisJCX0KKwkJZWxzZSB7CisJCQlsYXN0OworCQl9CisJfQorCisJaWYgKGlzX3BhaXJfaW50ZXJlc3RpbmcoXEBhLCAkcGEsICRzYSwgXEBiLCAkcGIsICRzYikpIHsKKwkJcmV0dXJuIGhpZ2hsaWdodF9saW5lKFxAYSwgJHBhLCAkc2EsIFxAT0xEX0hJR0hMSUdIVCksCisJCSAgICAgICBoaWdobGlnaHRfbGluZShcQGIsICRwYiwgJHNiLCBcQE5FV19ISUdITElHSFQpOworCX0KKwllbHNlIHsKKwkJcmV0dXJuIGpvaW4oJycsIEBhKSwKKwkJICAgICAgIGpvaW4oJycsIEBiKTsKKwl9Cit9CisKKyMgd2Ugc3BsaXQgZWl0aGVyIGJ5ICRDT0xPUiBvciBieSBjaGFyYWN0ZXIuIFRoaXMgaGFzIHRoZSBzaWRlIGVmZmVjdCBvZgorIyBsZWF2aW5nIGluIGdyYXBoIGNydWZ0LiBJdCB3b3JrcyBiZWNhdXNlIHRoZSBncmFwaCBjcnVmdCBkb2VzIG5vdCBjb250YWluICItIgorIyBvciAiKyIKK3N1YiBzcGxpdF9saW5lIHsKKwlsb2NhbCAkXyA9IHNoaWZ0OworCXJldHVybiB1dGY4OjpkZWNvZGUoJF8pID8KKwkJbWFwIHsgdXRmODo6ZW5jb2RlKCRfKTsgJF8gfQorCQkJbWFwIHsgLyRDT0xPUi8gPyAkXyA6IChzcGxpdCAvLykgfQorCQkJc3BsaXQgLygkQ09MT1IrKS8gOgorCQltYXAgeyAvJENPTE9SLyA/ICRfIDogKHNwbGl0IC8vKSB9CisJCXNwbGl0IC8oJENPTE9SKykvOworfQorCitzdWIgaGlnaGxpZ2h0X2xpbmUgeworCW15ICgkbGluZSwgJHByZWZpeCwgJHN1ZmZpeCwgJHRoZW1lKSA9IEBfOworCisJbXkgJHN0YXJ0ID0gam9pbignJywgQHskbGluZX1bMC4uKCRwcmVmaXgtMSldKTsKKwlteSAkbWlkID0gam9pbignJywgQHskbGluZX1bJHByZWZpeC4uJHN1ZmZpeF0pOworCW15ICRlbmQgPSBqb2luKCcnLCBAeyRsaW5lfVsoJHN1ZmZpeCsxKS4uJCMkbGluZV0pOworCisJIyBJZiB3ZSBoYXZlIGEgIm5vcm1hbCIgY29sb3Igc3BlY2lmaWVkLCB0aGVuIHRha2Ugb3ZlciB0aGUgd2hvbGUgbGluZS4KKwkjIE90aGVyd2lzZSwgd2UgdHJ5IHRvIGp1c3QgbWFuaXB1bGF0ZSB0aGUgaGlnaGxpZ2h0ZWQgYml0cy4KKwlpZiAoZGVmaW5lZCAkdGhlbWUtPlswXSkgeworCQlzLyRDT0xPUi8vZyBmb3IgKCRzdGFydCwgJG1pZCwgJGVuZCk7CisJCWNob21wICRlbmQ7CisJCXJldHVybiBqb2luKCcnLAorCQkJJHRoZW1lLT5bMF0sICRzdGFydCwgJFJFU0VULAorCQkJJHRoZW1lLT5bMV0sICRtaWQsICRSRVNFVCwKKwkJCSR0aGVtZS0+WzBdLCAkZW5kLCAkUkVTRVQsCisJCQkiXG4iCisJCSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGpvaW4oJycsCisJCQkkc3RhcnQsCisJCQkkdGhlbWUtPlsxXSwgJG1pZCwgJHRoZW1lLT5bMl0sCisJCQkkZW5kCisJCSk7CisJfQorfQorCisjIFBhaXJzIGFyZSBpbnRlcmVzdGluZyB0byBoaWdobGlnaHQgb25seSBpZiB3ZSBhcmUgZ29pbmcgdG8gZW5kIHVwCisjIGhpZ2hsaWdodGluZyBhIHN1YnNldCAoaS5lLiwgbm90IHRoZSB3aG9sZSBsaW5lKS4gT3RoZXJ3aXNlLCB0aGUgaGlnaGxpZ2h0aW5nCisjIGlzIGp1c3QgdXNlbGVzcyBub2lzZS4gV2UgY2FuIGRldGVjdCB0aGlzIGJ5IGZpbmRpbmcgZWl0aGVyIGEgbWF0Y2hpbmcgcHJlZml4CisjIG9yIHN1ZmZpeCAoZGlzcmVnYXJkaW5nIGJvcmluZyBiaXRzIGxpa2Ugd2hpdGVzcGFjZSBhbmQgY29sb3JpemF0aW9uKS4KK3N1YiBpc19wYWlyX2ludGVyZXN0aW5nIHsKKwlteSAoJGEsICRwYSwgJHNhLCAkYiwgJHBiLCAkc2IpID0gQF87CisJbXkgJHByZWZpeF9hID0gam9pbignJywgQCRhWzAuLigkcGEtMSldKTsKKwlteSAkcHJlZml4X2IgPSBqb2luKCcnLCBAJGJbMC4uKCRwYi0xKV0pOworCW15ICRzdWZmaXhfYSA9IGpvaW4oJycsIEAkYVsoJHNhKzEpLi4kIyRhXSk7CisJbXkgJHN1ZmZpeF9iID0gam9pbignJywgQCRiWygkc2IrMSkuLiQjJGJdKTsKKworCXJldHVybiB2aXNpYmxlX3N1YnN0cigkcHJlZml4X2EsICRncmFwaF9pbmRlbnQpICF+IC9eJENPTE9SKi0kQk9SSU5HKiQvIHx8CisJICAgICAgIHZpc2libGVfc3Vic3RyKCRwcmVmaXhfYiwgJGdyYXBoX2luZGVudCkgIX4gL14kQ09MT1IqXCskQk9SSU5HKiQvIHx8CisJICAgICAgICRzdWZmaXhfYSAhfiAvXiRCT1JJTkcqJC8gfHwKKwkgICAgICAgJHN1ZmZpeF9iICF+IC9eJEJPUklORyokLzsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvTWFrZWZpbGUgYi9jb250cmliL2RpZmYtaGlnaGxpZ2h0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYmU3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2RpZmYtaGlnaGxpZ2h0L01ha2VmaWxlCkBAIC0wLDAgKzEsMjMgQEAKK2FsbDogZGlmZi1oaWdobGlnaHQKKworUEVSTF9QQVRIID0gL3Vzci9iaW4vcGVybAorLWluY2x1ZGUgLi4vLi4vY29uZmlnLm1haworCitQRVJMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFBFUkxfUEFUSCkpCisKK2RpZmYtaGlnaGxpZ2h0OiBzaGViYW5nLnBlcmwgRGlmZkhpZ2hsaWdodC5wbSBkaWZmLWhpZ2hsaWdodC5wZXJsCisJY2F0ICReID4kQCsKKwljaG1vZCAreCAkQCsKKwltdiAkQCsgJEAKKworc2hlYmFuZy5wZXJsOiBGT1JDRQorCUBlY2hvICcjISQoUEVSTF9QQVRIX1NRKScgPiRAKworCUBjbXAgJEArICRAID4vZGV2L251bGwgMj4vZGV2L251bGwgfHwgbXYgJEArICRACisKK3Rlc3Q6IGFsbAorCSQoTUFLRSkgLUMgdAorCitjbGVhbjoKKwkkKFJNKSBkaWZmLWhpZ2hsaWdodAorCisuUEhPTlk6IEZPUkNFCmRpZmYgLS1naXQgYS9jb250cmliL2RpZmYtaGlnaGxpZ2h0L1JFQURNRSBiL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YzIzNDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2RpZmYtaGlnaGxpZ2h0L1JFQURNRQpAQCAtMCwwICsxLDIyMyBAQAorZGlmZi1oaWdobGlnaHQKKz09PT09PT09PT09PT09CisKK0xpbmUgb3JpZW50ZWQgZGlmZnMgYXJlIGdyZWF0IGZvciByZXZpZXdpbmcgY29kZSwgYmVjYXVzZSBmb3IgbW9zdAoraHVua3MsIHlvdSB3YW50IHRvIHNlZSB0aGUgb2xkIGFuZCB0aGUgbmV3IHNlZ21lbnRzIG9mIGNvZGUgbmV4dCB0byBlYWNoCitvdGhlci4gU29tZXRpbWVzLCB0aG91Z2gsIHdoZW4gYW4gb2xkIGxpbmUgYW5kIGEgbmV3IGxpbmUgYXJlIHZlcnkKK3NpbWlsYXIsIGl0J3MgaGFyZCB0byBpbW1lZGlhdGVseSBzZWUgdGhlIGRpZmZlcmVuY2UuCisKK1lvdSBjYW4gdXNlICItLWNvbG9yLXdvcmRzIiB0byBoaWdobGlnaHQgb25seSB0aGUgY2hhbmdlZCBwb3J0aW9ucyBvZgorbGluZXMuIEhvd2V2ZXIsIHRoaXMgY2FuIG9mdGVuIGJlIGhhcmQgdG8gcmVhZCBmb3IgY29kZSwgYXMgaXQgbG9zZXMKK3RoZSBsaW5lIHN0cnVjdHVyZSwgYW5kIHlvdSBlbmQgdXAgd2l0aCBvZGRseSBmb3JtYXR0ZWQgYml0cy4KKworSW5zdGVhZCwgdGhpcyBzY3JpcHQgcG9zdC1wcm9jZXNzZXMgdGhlIGxpbmUtb3JpZW50ZWQgZGlmZiwgZmluZHMgcGFpcnMKK29mIGxpbmVzLCBhbmQgaGlnaGxpZ2h0cyB0aGUgZGlmZmVyaW5nIHNlZ21lbnRzLiAgSXQncyBjdXJyZW50bHkgdmVyeQorc2ltcGxlIGFuZCBzdHVwaWQgYWJvdXQgZG9pbmcgdGhlc2UgdGFza3MuIEluIHBhcnRpY3VsYXI6CisKKyAgMS4gSXQgd2lsbCBvbmx5IGhpZ2hsaWdodCBodW5rcyBpbiB3aGljaCB0aGUgbnVtYmVyIG9mIHJlbW92ZWQgYW5kCisgICAgIGFkZGVkIGxpbmVzIGlzIHRoZSBzYW1lLCBhbmQgaXQgd2lsbCBwYWlyIGxpbmVzIHdpdGhpbiB0aGUgaHVuayBieQorICAgICBwb3NpdGlvbiAoc28gdGhlIGZpcnN0IHJlbW92ZWQgbGluZSBpcyBjb21wYXJlZCB0byB0aGUgZmlyc3QgYWRkZWQKKyAgICAgbGluZSwgYW5kIHNvIGZvcnRoKS4gVGhpcyBpcyBzaW1wbGUgYW5kIHRlbmRzIHRvIHdvcmsgd2VsbCBpbgorICAgICBwcmFjdGljZS4gTW9yZSBjb21wbGV4IGNoYW5nZXMgZG9uJ3QgaGlnaGxpZ2h0IHdlbGwsIHNvIHdlIHRlbmQgdG8KKyAgICAgZXhjbHVkZSB0aGVtIGR1ZSB0byB0aGUgInNhbWUgbnVtYmVyIG9mIHJlbW92ZWQgYW5kIGFkZGVkIGxpbmVzIgorICAgICByZXN0cmljdGlvbi4gT3IgZXZlbiBpZiB3ZSBkbyB0cnkgdG8gaGlnaGxpZ2h0IHRoZW0sIHRoZXkgZW5kIHVwCisgICAgIG5vdCBoaWdobGlnaHRpbmcgYmVjYXVzZSBvZiBvdXIgImRvbid0IGhpZ2hsaWdodCBpZiB0aGUgd2hvbGUgbGluZQorICAgICB3b3VsZCBiZSBoaWdobGlnaHRlZCIgcnVsZS4KKworICAyLiBJdCB3aWxsIGZpbmQgdGhlIGNvbW1vbiBwcmVmaXggYW5kIHN1ZmZpeCBvZiB0d28gbGluZXMsIGFuZAorICAgICBjb25zaWRlciBldmVyeXRoaW5nIGluIHRoZSBtaWRkbGUgdG8gYmUgImRpZmZlcmVudCIuIEl0IGNvdWxkCisgICAgIGluc3RlYWQgZG8gYSByZWFsIGRpZmYgb2YgdGhlIGNoYXJhY3RlcnMgYmV0d2VlbiB0aGUgdHdvIGxpbmVzIGFuZAorICAgICBmaW5kIGNvbW1vbiBzdWJzZXF1ZW5jZXMuIEhvd2V2ZXIsIHRoZSBwb2ludCBvZiB0aGUgaGlnaGxpZ2h0IGlzIHRvCisgICAgIGNhbGwgYXR0ZW50aW9uIHRvIGEgY2VydGFpbiBhcmVhLiBFdmVuIGlmIHNvbWUgc21hbGwgc3Vic2V0IG9mIHRoZQorICAgICBoaWdobGlnaHRlZCBhcmVhIGFjdHVhbGx5IGRpZG4ndCBjaGFuZ2UsIHRoYXQncyBPSy4gSW4gcHJhY3RpY2UgaXQKKyAgICAgZW5kcyB1cCBiZWluZyBtb3JlIHJlYWRhYmxlIHRvIGp1c3QgaGF2ZSBhIHNpbmdsZSBibG9iIG9uIHRoZSBsaW5lCisgICAgIHNob3dpbmcgdGhlIGludGVyZXN0aW5nIGJpdC4KKworVGhlIGdvYWwgb2YgdGhlIHNjcmlwdCBpcyB0aGVyZWZvcmUgbm90IHRvIGJlIGV4YWN0IGFib3V0IGhpZ2hsaWdodGluZworY2hhbmdlcywgYnV0IHRvIGNhbGwgYXR0ZW50aW9uIHRvIGFyZWFzIG9mIGludGVyZXN0IHdpdGhvdXQgYmVpbmcKK3Zpc3VhbGx5IGRpc3RyYWN0aW5nLiAgTm9uLWRpZmYgbGluZXMgYW5kIGV4aXN0aW5nIGRpZmYgY29sb3JhdGlvbiBpcworcHJlc2VydmVkOyB0aGUgaW50ZW50IGlzIHRoYXQgdGhlIG91dHB1dCBzaG91bGQgbG9vayBleGFjdGx5IHRoZSBzYW1lIGFzCit0aGUgaW5wdXQsIGV4Y2VwdCBmb3IgdGhlIG9jY2FzaW9uYWwgaGlnaGxpZ2h0LgorCitVc2UKKy0tLQorCitZb3UgY2FuIHRyeSBvdXQgdGhlIGRpZmYtaGlnaGxpZ2h0IHByb2dyYW0gd2l0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgbG9nIC1wIC0tY29sb3IgfCAvcGF0aC90by9kaWZmLWhpZ2hsaWdodAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3YW50IHRvIHVzZSBpdCBhbGwgdGhlIHRpbWUsIGRyb3AgaXQgaW4geW91ciAkUEFUSCBhbmQgcHV0IHRoZQorZm9sbG93aW5nIGluIHlvdXIgZ2l0IGNvbmZpZ3VyYXRpb246CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW3BhZ2VyXQorCWxvZyA9IGRpZmYtaGlnaGxpZ2h0IHwgbGVzcworCXNob3cgPSBkaWZmLWhpZ2hsaWdodCB8IGxlc3MKKwlkaWZmID0gZGlmZi1oaWdobGlnaHQgfCBsZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitDb2xvciBDb25maWcKKy0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgaGlnaGxpZ2h0IGNvbG9ycyBhbmQgYXR0cmlidXRlcyB1c2luZyBnaXQncworY29uZmlnLiBUaGUgY29sb3JzIGZvciAib2xkIiBhbmQgIm5ldyIgbGluZXMgY2FuIGJlIHNwZWNpZmllZAoraW5kZXBlbmRlbnRseS4gVGhlcmUgYXJlIHR3byAibW9kZXMiIG9mIGNvbmZpZ3VyYXRpb246CisKKyAgMS4gWW91IGNhbiBzcGVjaWZ5IGEgImhpZ2hsaWdodCIgY29sb3IgYW5kIGEgbWF0Y2hpbmcgInJlc2V0IiBjb2xvci4KKyAgICAgVGhpcyB3aWxsIHJldGFpbiBhbnkgZXhpc3RpbmcgY29sb3JzIGluIHRoZSBkaWZmLCBhbmQgYXBwbHkgdGhlCisgICAgICJoaWdobGlnaHQiIGFuZCAicmVzZXQiIGNvbG9ycyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBoaWdobGlnaHRlZAorICAgICBwb3J0aW9uLgorCisgIDIuIFlvdSBjYW4gc3BlY2lmeSBhICJub3JtYWwiIGNvbG9yIGFuZCBhICJoaWdobGlnaHQiIGNvbG9yLiBJbiB0aGlzCisgICAgIGNhc2UsIGV4aXN0aW5nIGNvbG9ycyBhcmUgZHJvcHBlZCBmcm9tIHRoYXQgbGluZS4gVGhlIG5vbi1oaWdobGlnaHRlZAorICAgICBiaXRzIG9mIHRoZSBsaW5lIGdldCB0aGUgIm5vcm1hbCIgY29sb3IsIGFuZCB0aGUgaGlnaGxpZ2h0cyBnZXQgdGhlCisgICAgICJoaWdobGlnaHQiIGNvbG9yLgorCitJZiBubyAibmV3IiBjb2xvcnMgYXJlIHNwZWNpZmllZCwgdGhleSBkZWZhdWx0IHRvIHRoZSAib2xkIiBjb2xvcnMuIElmCitubyAib2xkIiBjb2xvcnMgYXJlIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMgdG8gcmV2ZXJzZSB0aGUgZm9yZWdyb3VuZAorYW5kIGJhY2tncm91bmQgZm9yIGhpZ2hsaWdodGVkIHBvcnRpb25zLgorCitFeGFtcGxlczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFVuZGVybGluZSBoaWdobGlnaHRlZCBwb3J0aW9ucworW2NvbG9yICJkaWZmLWhpZ2hsaWdodCJdCitvbGRIaWdobGlnaHQgPSB1bAorb2xkUmVzZXQgPSBub3VsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFZhcnlpbmcgYmFja2dyb3VuZCBpbnRlbnNpdGllcworW2NvbG9yICJkaWZmLWhpZ2hsaWdodCJdCitvbGROb3JtYWwgPSAiYmxhY2sgI2Y4Y2JjYiIKK29sZEhpZ2hsaWdodCA9ICJibGFjayAjZmZhYWFhIgorbmV3Tm9ybWFsID0gImJsYWNrICNjYmVlY2IiCituZXdIaWdobGlnaHQgPSAiYmxhY2sgI2FhZmZhYSIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1VzaW5nIGRpZmYtaGlnaGxpZ2h0IGFzIGEgbW9kdWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byBwcmUtIG9yIHBvc3QtIHByb2Nlc3MgdGhlIGhpZ2hsaWdodGVkIGxpbmVzIGFzIHBhcnQgb2YKK2Fub3RoZXIgcGVybCBzY3JpcHQsIHlvdSBjYW4gdXNlIHRoZSBEaWZmSGlnaGxpZ2h0IG1vZHVsZS4gWW91IGNhbgorZWl0aGVyICJyZXF1aXJlIiBpdCBvciBqdXN0IGNhdCB0aGUgbW9kdWxlIHRvZ2V0aGVyIHdpdGggeW91ciBzY3JpcHQgKHRvCithdm9pZCBydW4tdGltZSBkZXBlbmRlbmNpZXMpLgorCitZb3VyIHNjcmlwdCBtYXkgc2V0IHVwIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorCisgIC0gJERpZmZIaWdobGlnaHQ6OmxpbmVfY2IgLSB0aGlzIHNob3VsZCBwb2ludCB0byBhIGZ1bmN0aW9uIHdoaWNoIGlzCisgICAgY2FsbGVkIHdoZW5ldmVyIERpZmZIaWdobGlnaHQgaGFzIGxpbmVzICh3aGljaCBtYXkgY29udGFpbgorICAgIGhpZ2hsaWdodHMpIHRvIG91dHB1dC4gVGhlIGRlZmF1bHQgZnVuY3Rpb24gcHJpbnRzIGVhY2ggbGluZSB0bworICAgIHN0ZG91dC4gTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHdpdGggbXVsdGlwbGUgbGluZXMuCisKKyAgLSAkRGlmZkhpZ2hsaWdodDo6Zmx1c2hfY2IgLSB0aGlzIHNob3VsZCBwb2ludCB0byBhIGZ1bmN0aW9uIHdoaWNoCisgICAgZmx1c2hlcyB0aGUgb3V0cHV0IChiZWNhdXNlIERpZmZIaWdobGlnaHQgYmVsaWV2ZXMgaXQgaGFzIGNvbXBsZXRlZAorICAgIHByb2Nlc3NpbmcgYSBsb2dpY2FsIGNodW5rIG9mIGlucHV0KS4gVGhlIGRlZmF1bHQgZnVuY3Rpb24gZmx1c2hlcworICAgIHN0ZG91dC4KKworVGhlIHNjcmlwdCBtYXkgdGhlbiBmZWVkIGxpbmVzLCBvbmUgYXQgYSB0aW1lLCB0byBEaWZmSGlnaGxpZ2h0OjpoYW5kbGVfbGluZSgpLgorV2hlbiBsaW5lcyBhcmUgZG9uZSBwcm9jZXNzaW5nLCB0aGV5IHdpbGwgYmUgZmVkIHRvICRsaW5lX2NiLiBOb3RlIHRoYXQKK0RpZmZIaWdobGlnaHQgbWF5IHF1ZXVlIHVwIG1hbnkgaW5wdXQgbGluZXMgKHRvIGFuYWx5emUgYSB3aG9sZSBodW5rKQorYmVmb3JlIGNhbGxpbmcgJGxpbmVfY2IuIEFmdGVyIHByb3ZpZGluZyBhbGwgbGluZXMsIGNhbGwKK0RpZmZIaWdobGlnaHQ6OmZsdXNoKCkgdG8gZmx1c2ggYW55IHVucHJvY2Vzc2VkIGxpbmVzLgorCitJZiB5b3UganVzdCB3YW50IHRvIHByb2Nlc3Mgc3RkaW4sIERpZmZIaWdobGlnaHQ6OmhpZ2hsaWdodF9zdGRpbigpCitpcyBhIGNvbnZlbmllbmNlIGhlbHBlciB3aGljaCB3aWxsIGxvb3AgYW5kIGZsdXNoIGZvciB5b3UuCisKKworQnVncworLS0tLQorCitCZWNhdXNlIGRpZmYtaGlnaGxpZ2h0IHJlbGllcyBvbiBoZXVyaXN0aWNzIHRvIGd1ZXNzIHdoaWNoIHBhcnRzIG9mCitjaGFuZ2VzIGFyZSBpbXBvcnRhbnQsIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIHRoZSBoaWdobGlnaHRpbmcgaXMKK21vcmUgZGlzdHJhY3RpbmcgdGhhbiB1c2VmdWwuIEZvcnR1bmF0ZWx5LCB0aGVzZSBjYXNlcyBhcmUgcmFyZSBpbgorcHJhY3RpY2UsIGFuZCB3aGVuIHRoZXkgZG8gb2NjdXIsIHRoZSB3b3JzdCBjYXNlIGlzIHNpbXBseSBhIGxpdHRsZQorZXh0cmEgaGlnaGxpZ2h0aW5nLiBUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHNvbWUgY2FzZXMga25vd24gdG8gYmUKK3N1Yi1vcHRpbWFsLCBpbiBjYXNlIHNvbWVib2R5IGZlZWxzIGxpa2Ugd29ya2luZyBvbiBpbXByb3ZpbmcgdGhlCitoZXVyaXN0aWNzLgorCisxLiBUd28gY2hhbmdlcyBvbiB0aGUgc2FtZSBsaW5lIGdldCBoaWdobGlnaHRlZCBpbiBhIGJsb2IuIEZvciBleGFtcGxlLAorICAgaGlnaGxpZ2h0aW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZm9vKGJ1Ziwgc2l6ZSk7CisrZm9vKG9iai0+YnVmLCBvYmotPnNpemUpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB5aWVsZHMgKHdoZXJlIHRoZSBpbnNpZGUgb2YgIit7fSIgd291bGQgYmUgaGlnaGxpZ2h0ZWQpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZm9vKGJ1Ziwgc2l6ZSk7CisrZm9vKCt7b2JqLT5idWYsIG9iai0+fXNpemUpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aGVyZWFzIGEgbW9yZSBzZW1hbnRpY2FsbHkgbWVhbmluZ2Z1bCBvdXRwdXQgd291bGQgYmU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1mb28oYnVmLCBzaXplKTsKKytmb28oK3tvYmotPn1idWYsICt7b2JqLT59c2l6ZSk7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIE5vdGUgdGhhdCBkb2luZyB0aGlzIHJpZ2h0IHdvdWxkIHByb2JhYmx5IGludm9sdmUgYSBzZXQgb2YKKyAgIGNvbnRlbnQtc3BlY2lmaWMgYm91bmRhcnkgcGF0dGVybnMsIHNpbWlsYXIgdG8gd29yZC1kaWZmLiBPdGhlcndpc2UKKyAgIHlvdSBnZXQganVuayBsaWtlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLXRoaXMgbGluZSBoYXMgc29tZSAte2l9bnQte2VyZX1zdGkte25nfSB0ZXh0IG9uIGl0CisrdGhpcyBsaW5lIGhhcyBzb21lICt7ZmF9bnQre2F9c3RpK3tjfSB0ZXh0IG9uIGl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aGljaCBpcyBsZXNzIHJlYWRhYmxlIHRoYW4gdGhlIGN1cnJlbnQgb3V0cHV0LgorCisyLiBUaGUgbXVsdGktbGluZSBtYXRjaGluZyBhc3N1bWVzIHRoYXQgbGluZXMgaW4gdGhlIHByZS0gYW5kIHBvc3QtaW1hZ2UKKyAgIG1hdGNoIGJ5IHBvc2l0aW9uLiBUaGlzIGlzIG9mdGVuIHRoZSBjYXNlLCBidXQgY2FuIGJlIGZvb2xlZCB3aGVuIGEKKyAgIGxpbmUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0b3AgYW5kIGEgbmV3IG9uZSBhZGRlZCBhdCB0aGUgYm90dG9tIChvcgorICAgdmljZSB2ZXJzYSkuIFVubGVzcyB0aGUgbGluZXMgaW4gdGhlIG1pZGRsZSBhcmUgYWxzbyBjaGFuZ2VkLCBkaWZmcworICAgd2lsbCBzaG93IHRoaXMgYXMgdHdvIGh1bmtzLCBhbmQgaXQgd2lsbCBub3QgZ2V0IGhpZ2hsaWdodGVkIGF0IGFsbAorICAgKHdoaWNoIGlzIGdvb2QpLiBCdXQgaWYgdGhlIGxpbmVzIGluIHRoZSBtaWRkbGUgYXJlIGNoYW5nZWQsIHRoZQorICAgaGlnaGxpZ2h0aW5nIGNhbiBiZSBtaXNsZWFkaW5nLiBIZXJlJ3MgYSBwYXRob2xvZ2ljYWwgY2FzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1vbmUKKy10d28KKy10aHJlZQorLWZvdXIKKyt0d28gMgorK3RocmVlIDMKKytmb3VyIDQKKytmaXZlIDUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHdoaWNoIGdldHMgaGlnaGxpZ2h0ZWQgYXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistb25lCistdC17d299CistdGhyZWUKKy1mLXtvdXJ9CisrdHdvIDIKKyt0K3tocmVlIDN9CisrZm91ciA0CisrZit7aXZlIDV9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBiZWNhdXNlIGl0IG1hdGNoZXMgInR3byIgdG8gInRocmVlIDMiLCBhbmQgc28gZm9ydGguIEl0IHdvdWxkIGJlCisgICBuaWNlciBhczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1vbmUKKy10d28KKy10aHJlZQorLWZvdXIKKyt0d28gK3syfQorK3RocmVlICt7M30KKytmb3VyICt7NH0KKytmaXZlIDUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHdoaWNoIHdvdWxkIHByb2JhYmx5IGludm9sdmUgcHJlLW1hdGNoaW5nIHRoZSBsaW5lcyBpbnRvIHBhaXJzCisgICBhY2NvcmRpbmcgdG8gc29tZSBoZXVyaXN0aWMuCmRpZmYgLS1naXQgYS9jb250cmliL2RpZmYtaGlnaGxpZ2h0L2RpZmYtaGlnaGxpZ2h0LnBlcmwgYi9jb250cmliL2RpZmYtaGlnaGxpZ2h0L2RpZmYtaGlnaGxpZ2h0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIzZTljMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvZGlmZi1oaWdobGlnaHQucGVybApAQCAtMCwwICsxLDggQEAKK3BhY2thZ2UgbWFpbjsKKworIyBTb21lIHNjcmlwdHMgbWF5IG5vdCByZWFsaXplIHRoYXQgU0lHUElQRSBpcyBiZWluZyBpZ25vcmVkIHdoZW4gbGF1bmNoaW5nIHRoZQorIyBwYWdlci0tZm9yIGluc3RhbmNlIHNjcmlwdHMgd3JpdHRlbiBpbiBQeXRob24uCiskU0lHe1BJUEV9ID0gJ0RFRkFVTFQnOworCitEaWZmSGlnaGxpZ2h0OjpoaWdobGlnaHRfc3RkaW4oKTsKK2V4aXQgMDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvdC8uZ2l0aWdub3JlIGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC90Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RjYmIyMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvdC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorL3RyYXNoIGRpcmVjdG9yeSoKKy90ZXN0LXJlc3VsdHMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvdC9NYWtlZmlsZSBiL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmY1Mjc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC90L01ha2VmaWxlCkBAIC0wLDAgKzEsMjIgQEAKKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsuYXV0b2dlbgorLWluY2x1ZGUgLi4vLi4vLi4vY29uZmlnLm1haworCisjIGNvcGllZCBmcm9tIC4uLy4uL3QvTWFrZWZpbGUKK1NIRUxMX1BBVEggPz0gJChTSEVMTCkKK1NIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEgpKQorVCA9ICQod2lsZGNhcmQgdFswLTldWzAtOV1bMC05XVswLTldLSouc2gpCisKK2FsbDogdGVzdAordGVzdDogJChUKQorCisuUEhPTlk6IGhlbHAgY2xlYW4gYWxsIHRlc3QgJChUKQorCitoZWxwOgorCUBlY2hvICdSdW4gIiQoTUFLRSkgdGVzdCIgdG8gbGF1bmNoIHRlc3Qgc2NyaXB0cycKKwlAZWNobyAnUnVuICIkKE1BS0UpIGNsZWFuIiB0byByZW1vdmUgdHJhc2ggZm9sZGVycycKKworJChUKToKKwlAZWNobyAiKioqICRAICoqKiI7ICckKFNIRUxMX1BBVEhfU1EpJyAkQCAkKEdJVF9URVNUX09QVFMpCisKK2NsZWFuOgorCSQoUk0pIC1yICd0cmFzaCBkaXJlY3RvcnknLioKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvdC90OTQwMC1kaWZmLWhpZ2hsaWdodC5zaCBiL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvdC90OTQwMC1kaWZmLWhpZ2hsaWdodC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNmY1MTk1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC90L3Q5NDAwLWRpZmYtaGlnaGxpZ2h0LnNoCkBAIC0wLDAgKzEsMzQxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBkaWZmLWhpZ2hsaWdodCcKKworQ1VSUl9ESVI9JChwd2QpCitURVNUX09VVFBVVF9ESVJFQ1RPUlk9JChwd2QpCitURVNUX0RJUkVDVE9SWT0iJENVUlJfRElSIi8uLi8uLi8uLi90CitESUZGX0hJR0hMSUdIVD0iJENVUlJfRElSIi8uLi9kaWZmLWhpZ2hsaWdodAorCitDVz0iJChwcmludGYgIlwwMzNbN20iKSIJIyB3aGl0ZQorQ1I9IiQocHJpbnRmICJcMDMzWzI3bSIpIgkjIHJlc2V0CisKKy4gIiRURVNUX0RJUkVDVE9SWSIvdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkwKK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZGlmZi1oaWdobGlnaHQgdGVzdHM7IHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKKyMgZGhfdGVzdCBpcyBhIHRlc3QgaGVscGVyIGZ1bmN0aW9uIHdoaWNoIHRha2VzIDMgZmlsZSBuYW1lcyBhcyBwYXJhbWV0ZXJzLiBUaGUKKyMgZmlyc3QgMiBmaWxlcyBhcmUgdXNlZCB0byBnZW5lcmF0ZSBkaWZmIGFuZCBjb21taXQgb3V0cHV0LCB3aGljaCBpcyB0aGVuCisjIHBpcGVkIHRocm91Z2ggZGlmZi1oaWdobGlnaHQuIFRoZSAzcmQgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgZXhwZWN0ZWQgb3V0cHV0CisjIG9mIGRpZmYtaGlnaGxpZ2h0IChtaW51cyB0aGUgZGlmZi9jb21taXQgaGVhZGVyLCBpZS4gZXZlcnl0aGluZyBhZnRlciBhbmQKKyMgaW5jbHVkaW5nIHRoZSBmaXJzdCBAQCBsaW5lKS4KK2RoX3Rlc3QgKCkgeworCWE9IiQxIiBiPSIkMiIgJiYKKworCWNhdCA+cGF0Y2guZXhwICYmCisKKwl7CisJCWNhdCAiJGEiID5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgYSBmaWxlIiAmJgorCisJCWNhdCAiJGIiID5maWxlICYmCisJCWdpdCBkaWZmIGZpbGUgPmRpZmYucmF3ICYmCisJCWdpdCBjb21taXQgLWEgLW0gIlVwZGF0ZSBhIGZpbGUiICYmCisJCWdpdCBzaG93ID5jb21taXQucmF3CisJfSA+L2Rldi9udWxsICYmCisKKwkiJERJRkZfSElHSExJR0hUIiA8ZGlmZi5yYXcgfCB0ZXN0X3N0cmlwX3BhdGNoX2hlYWRlciA+ZGlmZi5hY3QgJiYKKwkiJERJRkZfSElHSExJR0hUIiA8Y29tbWl0LnJhdyB8IHRlc3Rfc3RyaXBfcGF0Y2hfaGVhZGVyID5jb21taXQuYWN0ICYmCisJdGVzdF9jbXAgcGF0Y2guZXhwIGRpZmYuYWN0ICYmCisJdGVzdF9jbXAgcGF0Y2guZXhwIGNvbW1pdC5hY3QKK30KKwordGVzdF9zdHJpcF9wYXRjaF9oZWFkZXIgKCkgeworCXNlZCAtbiAnL15AQC8sJHAnICQqCit9CisKKyMgZGhfdGVzdF9zZXR1cF9oaXN0b3J5IGdlbmVyYXRlcyBhIGNvbnRyaXZlZCBncmFwaCBzdWNoIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdAorIyAxIG5lc3RpbmcgKEUpIGFuZCAyIG5lc3RpbmdzIChGKS4KKyMKKyMJICBBLS0tQiBtYXN0ZXIKKyMJIC8KKyMJRC0tLUUtLS1GIGJyYW5jaAorIworIwlnaXQgbG9nIC0tYWxsIC0tZ3JhcGgKKyMJKiBjb21taXQKKyMJfCAgICBCCisjCXwgKiBjb21taXQKKyMJfCB8ICAgIEYKKyMJKiB8IGNvbW1pdAorIwl8IHwgICAgQQorIwl8ICogY29tbWl0CisjCXwvCisjCXwgICAgRQorIwkqIGNvbW1pdAorIwkgICAgIEQKKyMKK2RoX3Rlc3Rfc2V0dXBfaGlzdG9yeSAoKSB7CisJZWNobyBmaWxlMSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkQiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoICYmCisJZWNobyBmaWxlMiA+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIkUiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBmaWxlMiA+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIkEiICYmCisKKwlnaXQgY2hlY2tvdXQgYnJhbmNoICYmCisJZWNobyBmaWxlMyA+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIkYiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBmaWxlMyA+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIkIiCit9CisKK2xlZnRfdHJpbSAoKSB7CisJIiRQRVJMX1BBVEgiIC1wZSAncy9eXHMrLy8nCit9CisKK3RyaW1fZ3JhcGggKCkgeworCSMgZ3JhcGhzIHN0YXJ0IHdpdGggKiBvciB8CisJIyBmb2xsb3dlZCBieSBhIHNwYWNlIG9yIC8gb3IgXAorCSIkUEVSTF9QQVRIIiAtcGUgJ3NAXigoXCp8XHwpKCB8L3xcXCkpK0BAJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWhpZ2hsaWdodCBoaWdobGlnaHRzIHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lJyAnCisJY2F0ID5hIDw8LVxFT0YgJiYKKwkJYWFhCisJCWJiYgorCQljY2MKKwlFT0YKKworCWNhdCA+YiA8PC1cRU9GICYmCisJCWFhYQorCQkwYmIKKwkJY2NjCisJRU9GCisKKwlkaF90ZXN0IGEgYiA8PC1FT0YKKwkJQEAgLTEsMyArMSwzIEBACisJCSBhYWEKKwkJLSR7Q1d9YiR7Q1J9YmIKKwkJKyR7Q1d9MCR7Q1J9YmIKKwkJIGNjYworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWhpZ2hsaWdodCBoaWdobGlnaHRzIHRoZSBlbmQgb2YgYSBsaW5lJyAnCisJY2F0ID5hIDw8LVxFT0YgJiYKKwkJYWFhCisJCWJiYgorCQljY2MKKwlFT0YKKworCWNhdCA+YiA8PC1cRU9GICYmCisJCWFhYQorCQliYjAKKwkJY2NjCisJRU9GCisKKwlkaF90ZXN0IGEgYiA8PC1FT0YKKwkJQEAgLTEsMyArMSwzIEBACisJCSBhYWEKKwkJLWJiJHtDV31iJHtDUn0KKwkJK2JiJHtDV30wJHtDUn0KKwkJIGNjYworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWhpZ2hsaWdodCBoaWdobGlnaHRzIHRoZSBtaWRkbGUgb2YgYSBsaW5lJyAnCisJY2F0ID5hIDw8LVxFT0YgJiYKKwkJYWFhCisJCWJiYgorCQljY2MKKwlFT0YKKworCWNhdCA+YiA8PC1cRU9GICYmCisJCWFhYQorCQliMGIKKwkJY2NjCisJRU9GCisKKwlkaF90ZXN0IGEgYiA8PC1FT0YKKwkJQEAgLTEsMyArMSwzIEBACisJCSBhYWEKKwkJLWIke0NXfWIke0NSfWIKKwkJK2Ike0NXfTAke0NSfWIKKwkJIGNjYworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWhpZ2hsaWdodCBkb2VzIG5vdCBoaWdobGlnaHQgd2hvbGUgbGluZScgJworCWNhdCA+YSA8PC1cRU9GICYmCisJCWFhYQorCQliYmIKKwkJY2NjCisJRU9GCisKKwljYXQgPmIgPDwtXEVPRiAmJgorCQlhYWEKKwkJMDAwCisJCWNjYworCUVPRgorCisJZGhfdGVzdCBhIGIgPDwtRU9GCisJCUBAIC0xLDMgKzEsMyBAQAorCQkgYWFhCisJCS1iYmIKKwkJKzAwMAorCQkgY2NjCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RpZmYtaGlnaGxpZ2h0IGhpZ2hsaWdodHMgbWlzbWF0Y2hlZCBodW5rIHNpemUnICcKKwljYXQgPmEgPDwtXEVPRiAmJgorCQlhYWEKKwkJYmJiCisJRU9GCisKKwljYXQgPmIgPDwtXEVPRiAmJgorCQlhYWEKKwkJYjBiCisJCWNjYworCUVPRgorCisJZGhfdGVzdCBhIGIgPDwtRU9GCisJCUBAIC0xLDMgKzEsMyBAQAorCQkgYWFhCisJCS1iJHtDV31iJHtDUn1iCisJCStiJHtDV30wJHtDUn1iCisJCStjY2MKKwlFT0YKKycKKworIyBUaGVzZSB0d28gY29kZSBwb2ludHMgc2hhcmUgdGhlIHNhbWUgbGVhZGluZyBieXRlIGluIFVURi04IHJlcHJlc2VudGF0aW9uOworIyBhIG5haXZlIGJ5dGUtd2lzZSBkaWZmIHdvdWxkIGhpZ2hsaWdodCBvbmx5IHRoZSBzZWNvbmQgYnl0ZS4KKyMKKyMgICAtIFUrMDBmMyAoIm8iIHdpdGggYWN1dGUpCitvX2FjY2VudD0kKHByaW50ZiAnXDMwM1wyNjMnKQorIyAgIC0gVSswMGY4ICgibyIgd2l0aCBzdHJva2UpCitvX3N0cm9rZT0kKHByaW50ZiAnXDMwM1wyNzAnKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWhpZ2hsaWdodCB0cmVhdHMgbXVsdGlieXRlIHV0Zi04IGFzIGEgdW5pdCcgJworCWVjaG8gInVuaWMke29fYWNjZW50fWRlIiA+YSAmJgorCWVjaG8gInVuaWMke29fc3Ryb2tlfWRlIiA+YiAmJgorCWRoX3Rlc3QgYSBiIDw8LUVPRgorCQlAQCAtMSArMSBAQAorCQktdW5pYyR7Q1d9JHtvX2FjY2VudH0ke0NSfWRlCisJCSt1bmljJHtDV30ke29fc3Ryb2tlfSR7Q1J9ZGUKKwlFT0YKKycKKworIyBVbmxpa2UgdGhlIFVURi04IGFib3ZlLCB0aGVzZSBhcmUgY29tYmluaW5nIGNvZGUgcG9pbnRzIHdoaWNoIGFyZSBtZWFudAorIyB0byBtb2RpZnkgdGhlIGNoYXJhY3RlciBwcmVjZWRpbmcgdGhlbToKKyMKKyMgICAtIFUrMDMwMSAoY29tYmluaW5nIGFjdXRlIGFjY2VudCkKK2NvbWJpbmVfYWNjZW50PSQocHJpbnRmICdcMzE0XDIwMScpCisjICAgLSBVKzAzMDIgKGNvbWJpbmluZyBjaXJjdW1mbGV4KQorY29tYmluZV9jaXJjdW09JChwcmludGYgJ1wzMTRcMjAyJykKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZGlmZi1oaWdobGlnaHQgdHJlYXRzIGNvbWJpbmluZyBjb2RlIHBvaW50cyBhcyBhIHVuaXQnICcKKwllY2hvICJ1bmljbyR7Y29tYmluZV9hY2NlbnR9ZGUiID5hICYmCisJZWNobyAidW5pY28ke2NvbWJpbmVfY2lyY3VtfWRlIiA+YiAmJgorCWRoX3Rlc3QgYSBiIDw8LUVPRgorCQlAQCAtMSArMSBAQAorCQktdW5pYyR7Q1d9byR7Y29tYmluZV9hY2NlbnR9JHtDUn1kZQorCQkrdW5pYyR7Q1d9byR7Y29tYmluZV9jaXJjdW19JHtDUn1kZQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWhpZ2hsaWdodCB3b3JrcyB3aXRoIHRoZSAtLWdyYXBoIG9wdGlvbicgJworCWRoX3Rlc3Rfc2V0dXBfaGlzdG9yeSAmJgorCisJIyBkYXRlLW9yZGVyIHNvIHRoYXQgdGhlIGNvbW1pdHMgYXJlIGludGVybGVhdmVkIGZvciBib3RoCisJIyB0cmltIGdyYXBoIGVsZW1lbnRzIHNvIHdlIGNhbiBkbyBhIGRpZmYKKwkjIHRyaW0gbGVhZGluZyBzcGFjZSBiZWNhdXNlIG91ciB0cmltX2dyYXBoIGlzIG5vdCBwZXJmZWN0CisJZ2l0IGxvZyAtLWJyYW5jaGVzIC1wIC0tZGF0ZS1vcmRlciB8CisJCSIkRElGRl9ISUdITElHSFQiIHwgbGVmdF90cmltID5ncmFwaC5leHAgJiYKKwlnaXQgbG9nIC0tYnJhbmNoZXMgLXAgLS1kYXRlLW9yZGVyIC0tZ3JhcGggfAorCQkiJERJRkZfSElHSExJR0hUIiB8IHRyaW1fZ3JhcGggfCBsZWZ0X3RyaW0gPmdyYXBoLmFjdCAmJgorCXRlc3RfY21wIGdyYXBoLmV4cCBncmFwaC5hY3QKKycKKworIyBKdXN0IHJldXNlIHRoZSBwcmV2aW91cyBncmFwaCB0ZXN0LCBidXQgd2l0aCAtLWNvbG9yLiAgT3VyIHRyaW1taW5nCisjIGRvZXNuJ3Qga25vdyBhYm91dCBjb2xvciwgc28ganVzdCBzYW5pdHkgY2hlY2sgdGhhdCBzb21ldGhpbmcgZ290CisjIGhpZ2hsaWdodGVkLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1oaWdobGlnaHQgd29ya3Mgd2l0aCBjb2xvciBncmFwaCcgJworCWdpdCBsb2cgLS1icmFuY2hlcyAtcCAtLWRhdGUtb3JkZXIgLS1ncmFwaCAtLWNvbG9yIHwKKwkJIiRESUZGX0hJR0hMSUdIVCIgfCB0cmltX2dyYXBoIHwgbGVmdF90cmltID5ncmFwaCAmJgorCWdyZXAgIlxbN20iIGdyYXBoCisnCisKKyMgTW9zdCBjb21iaW5lZCBkaWZmcyB3b24ndCBtZWV0IGRpZmYtaGlnaGxpZ2h0J3MgbGluZS1udW1iZXIgZmlsdGVyLiBTbyB3ZQorIyBjcmVhdGUgb25lIGhlcmUgd2hlcmUgb25lIHNpZGUgZHJvcHMgYSBsaW5lIGFuZCB0aGUgb3RoZXIgbW9kaWZpZXMgaXQuIFRoYXQKKyMgc2hvdWxkIHJlc3VsdCBpbiBhIGRpZmYgbGlrZToKKyMKKyMgICAgLSBtb2RpZmllZCBjb250ZW50CisjICAgICsrcmVzb2x2ZWQgY29udGVudAorIworIyB3aGljaCBuYWl2ZWx5IGxvb2tzIGxpa2Ugb25lIHNpZGUgYWRkZWQgIityZXNvbHZlZCIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWhpZ2hsaWdodCBpZ25vcmVzIGNvbWJpbmVkIGRpZmZzJyAnCisJZWNobyAiY29udGVudCIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKworCT5maWxlICYmCisJZ2l0IGNvbW1pdCAtYW0gbWFzdGVyICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgb3RoZXIgSEVBRF4gJiYKKwllY2hvICJtb2RpZmllZCBjb250ZW50IiA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWFtIG90aGVyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJZWNobyAicmVzb2x2ZWQgY29udGVudCIgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hbSByZXNvbHZlZCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS0tLSBhL2ZpbGUKKwkrKysgYi9maWxlCisJQEBAIC0xLDEgLTEsMCArMSwxIEBAQAorCS0gbW9kaWZpZWQgY29udGVudAorCSsrcmVzb2x2ZWQgY29udGVudAorCUVPRgorCisJZ2l0IHNob3cgLWMgfCAiJERJRkZfSElHSExJR0hUIiA+YWN0dWFsLnJhdyAmJgorCXNlZCAtbiAiL14tLS0vLFwkcCIgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1oaWdobGlnaHQgaGFuZGxlcyAtLWdyYXBoIHdpdGggbGVhZGluZyBkYXNoJyAnCisJY2F0ID5maWxlIDw8LVxFT0YgJiYKKwliZWZvcmUKKwl0aGUgb2xkIGxpbmUKKwktbGVhZGluZyBkYXNoCisJRU9GCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBiZWZvcmUgJiYKKworCXNlZCBzL29sZC9uZXcvIDxmaWxlID5maWxlLnRtcCAmJgorCW12IGZpbGUudG1wIGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGFmdGVyICYmCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAIC0xLDMgKzEsMyBAQAorCSBiZWZvcmUKKwktdGhlICR7Q1d9b2xkJHtDUn0gbGluZQorCSt0aGUgJHtDV31uZXcke0NSfSBsaW5lCisJIC1sZWFkaW5nIGRhc2gKKwlFT0YKKwlnaXQgbG9nIC0tZ3JhcGggLXAgLTEgfCAiJERJRkZfSElHSExJR0hUIiA+YWN0dWFsLnJhdyAmJgorCXRyaW1fZ3JhcGggPGFjdHVhbC5yYXcgfCBzZWQgLW4gIi9eLS0tLyxcJHAiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9lbWFjcy9SRUFETUUgYi9jb250cmliL2VtYWNzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzdhMTZmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9lbWFjcy9SRUFETUUKQEAgLTAsMCArMSwzMyBAQAorVGhpcyBkaXJlY3RvcnkgdXNlZCB0byBjb250YWluIHZhcmlvdXMgbW9kdWxlcyBmb3IgRW1hY3Mgc3VwcG9ydC4KKworVGhlc2Ugd2VyZSBhZGRlZCBzaG9ydGx5IGFmdGVyIEdpdCB3YXMgZmlyc3QgcmVsZWFzZWQuIFNpbmNlIHRoZW4KK0VtYWNzJ3Mgb3duIHN1cHBvcnQgZm9yIEdpdCBnb3QgYmV0dGVyIHRoYW4gd2hhdCB3YXMgb2ZmZXJlZCBieSB0aGVzZQorbW9kZXMuIFRoZXJlIGFyZSBhbHNvIHBvcHVsYXIgM3JkLXBhcnR5IEdpdCBtb2RlcyBzdWNoIGFzIE1hZ2l0IHdoaWNoCitvZmZlciByZXBsYWNlbWVudHMgZm9yIHRoZXNlLgorCitUaGUgZm9sbG93aW5nIG1vZHVsZXMgd2VyZSBhdmFpbGFibGUsIGFuZCBjYW4gYmUgZHVnIHVwIGZyb20gdGhlIEdpdAoraGlzdG9yeToKKworKiBnaXQuZWw6CisKKyAgV3JhcHBlciBmb3IgImdpdCBzdGF0dXMiIHRoYXQgcHJvdmlkZWQgYWNjZXNzIHRvIG90aGVyIGdpdCBjb21tYW5kcy4KKworICBNb2Rlcm4gYWx0ZXJuYXRpdmVzIHRvIHRoaXMgaW5jbHVkZSBNYWdpdCwgYW5kIFZDIG1vZGUgdGhhdCBzaGlwcworICB3aXRoIEVtYWNzLgorCisqIGdpdC1ibGFtZS5lbDoKKworICBBIHdyYXBwZXIgZm9yICJnaXQgYmxhbWUiIHdyaXR0ZW4gYmVmb3JlIEVtYWNzJ3Mgb3duIHZjLWFubm90YXRlCisgIG1vZGUgbGVhcm5lZCB0byBpbnZva2UgZ2l0LWJsYW1lLCB3aGljaCBjYW4gYmUgZG9uZSB2aWEgQy14IHYgZy4KKworKiB2Yy1naXQuZWw6CisKKyAgVGhpcyBmaWxlIHVzZWQgdG8gY29udGFpbiB0aGUgVkMtbW9kZSBiYWNrZW5kIGZvciBnaXQsIGJ1dCBpdCBpcyBubworICBsb25nZXIgZGlzdHJpYnV0ZWQgd2l0aCBnaXQuIEl0IGlzIG5vdyBtYWludGFpbmVkIGFzIHBhcnQgb2YgRW1hY3MKKyAgYW5kIGluY2x1ZGVkIGluIHN0YW5kYXJkIEVtYWNzIGRpc3RyaWJ1dGlvbnMgc3RhcnRpbmcgZnJvbSB2ZXJzaW9uCisgIDIyLjIuCisKKyAgSWYgeW91IGhhdmUgYW4gZWFybGllciBFbWFjcyB2ZXJzaW9uLCB1cGdyYWRpbmcgdG8gRW1hY3MgMjIgaXMKKyAgcmVjb21tZW5kZWQsIHNpbmNlIHRoZSBWQyBtb2RlIGluIG9sZGVyIEVtYWNzIGlzIG5vdCBnZW5lcmljIGVub3VnaAorICB0byBiZSBhYmxlIHRvIHN1cHBvcnQgZ2l0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIsIGFuZCBubyBhdHRlbXB0IGhhcworICBiZWVuIG1hZGUgdG8gYmFja3BvcnQgdmMtZ2l0LmVsLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9lbWFjcy9naXQtYmxhbWUuZWwgYi9jb250cmliL2VtYWNzL2dpdC1ibGFtZS5lbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YThhMmI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9lbWFjcy9naXQtYmxhbWUuZWwKQEAgLTAsMCArMSw2IEBACisoZXJyb3IgImdpdC1ibGFtZS5lbCBubyBsb25nZXIgc2hpcHMgd2l0aCBnaXQuIEl0J3MgcmVjb21tZW5kZWQKK3RvIHJlcGxhY2UgaXRzIHVzZSB3aXRoIEVtYWNzJ3Mgb3duIHZjLWFubm90YXRlLiBTZWUKK2NvbnRyaWIvZW1hY3MvUkVBRE1FIGluIGdpdCdzCitzb3VyY2VzIChodHRwczovL2dpdGh1Yi5jb20vZ2l0L2dpdC9ibG9iL21hc3Rlci9jb250cmliL2VtYWNzL1JFQURNRSkKK2ZvciBtb3JlIGluZm8gb24gc3VnZ2VzdGVkIGFsdGVybmF0aXZlcyBhbmQgZm9yIHdoeSB0aGlzCitoYXBwZW5lZC4iKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9lbWFjcy9naXQuZWwgYi9jb250cmliL2VtYWNzL2dpdC5lbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2Y5MjYyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9lbWFjcy9naXQuZWwKQEAgLTAsMCArMSw2IEBACisoZXJyb3IgImdpdC5lbCBubyBsb25nZXIgc2hpcHMgd2l0aCBnaXQuIEl0J3MgcmVjb21tZW5kZWQgdG8KK3JlcGxhY2UgaXRzIHVzZSB3aXRoIE1hZ2l0LCBvciBzaW1wbHkgZGVsZXRlIHJlZmVyZW5jZXMgdG8gZ2l0LmVsCitpbiB5b3VyIGluaXRpYWxpemF0aW9uIGZpbGUocykuIFNlZSBjb250cmliL2VtYWNzL1JFQURNRSBpbiBnaXQncworc291cmNlcyAoaHR0cHM6Ly9naXRodWIuY29tL2dpdC9naXQvYmxvYi9tYXN0ZXIvY29udHJpYi9lbWFjcy9SRUFETUUpCitmb3Igc3VnZ2VzdGVkIGFsdGVybmF0aXZlcyBhbmQgZm9yIHdoeSB0aGlzIGhhcHBlbmVkLiBFbWFjcydzIG93bgorVkMgbW9kZSBhbmQgTWFnaXQgYXJlIHZpYWJsZSBhbHRlcm5hdGl2ZXMuIikKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvUkVBRE1FIGIvY29udHJpYi9leGFtcGxlcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiYzYwYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvUkVBRE1FCkBAIC0wLDAgKzEsMjAgQEAKK1RoaXMgZGlyZWN0b3J5IHVzZWQgdG8gY29udGFpbiBzY3JpcHRlZCBpbXBsZW1lbnRhdGlvbnMgb2YgYnVpbHRpbnMKK3RoYXQgaGF2ZSBzaW5jZSBiZWVuIHJld3JpdHRlbiBpbiBDLgorCitUaGV5IGhhdmUgbm93IGJlZW4gcmVtb3ZlZCwgYnV0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSBhbiBvbGRlciBjb21taXQKK3RoYXQgcmVtb3ZlZCB0aGVtIGZyb20gdGhpcyBkaXJlY3RvcnkuCisKK1RoZXkncmUgaW50ZXJlc3RpbmcgZm9yIHRoZWlyIHJlZmVyZW5jZSB2YWx1ZSB0byBhbnkgYXNwaXJpbmcgcGx1bWJpbmcKK3VzZXJzIHdobyB3YW50IHRvIGxlYXJuIGhvdyBwaWVjZXMgY2FuIGJlIGZpdCB0b2dldGhlciwgYnV0IGluIG1hbnkKK2Nhc2VzIGhhdmUgZHJpZnRlZCBlbm91Z2ggZnJvbSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9ucyBHaXQgdXNlcyB0bworYmUgaW5zdHJ1Y3RpdmUuCisKK090aGVyIHRoaW5ncyB0aGF0IGNhbiBiZSB1c2VmdWw6CisKKyAqIFNvbWUgY29tbWFuZHMgc3VjaCBhcyBnaXQtZ2Mgd3JhcCBvdGhlciBjb21tYW5kcywgYW5kIHdoYXQgdGhleSdyZQorICAgZG9pbmcgYmVoaW5kIHRoZSBzY2VuZXMgY2FuIGJlIHNlZW4gYnkgcnVubmluZyB0aGVtIHVuZGVyCisgICBHSVRfVFJBQ0U9MQorCisgKiBEb2luZyBgZ2l0IGxvZ2Agb24gcGF0aHMgbWF0Y2hpbmcgJyotLWhlbHBlci5jJyB3aWxsIHNob3cKKyAgIGluY3JlbWVudGFsIGVmZm9ydCBpbiB0aGUgZGlyZWN0aW9uIG9mIG1vdmluZyBleGlzdGluZyBzaGVsbAorICAgc2NyaXB0cyB0byBDLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9mYXN0LWltcG9ydC9naXQtaW1wb3J0LnBlcmwgYi9jb250cmliL2Zhc3QtaW1wb3J0L2dpdC1pbXBvcnQucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wODkxYjllCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9naXQtaW1wb3J0LnBlcmwKQEAgLTAsMCArMSw2NCBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIFBlcmZvcm1zIGFuIGluaXRpYWwgaW1wb3J0IG9mIGEgZGlyZWN0b3J5LiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50CisjIG9mIGRvaW5nICdnaXQgaW5pdDsgZ2l0IGFkZCAuOyBnaXQgY29tbWl0Jy4gSXQncyBhIGxpdHRsZSBzbG93ZXIsCisjIGJ1dCBpcyBtZWFudCB0byBiZSBhIHNpbXBsZSBmYXN0LWltcG9ydCBleGFtcGxlLgorCit1c2Ugc3RyaWN0OwordXNlIEZpbGU6OkZpbmQ7CisKK215ICRVU0FHRSA9ICd1c2FnZTogZ2l0LWltcG9ydCBicmFuY2ggaW1wb3J0LW1lc3NhZ2UnOworbXkgJGJyYW5jaCA9IHNoaWZ0IG9yIGRpZSAiJFVTQUdFXG4iOworbXkgJG1lc3NhZ2UgPSBzaGlmdCBvciBkaWUgIiRVU0FHRVxuIjsKKworY2hvbXAobXkgJHVzZXJuYW1lID0gYGdpdCBjb25maWcgdXNlci5uYW1lYCk7CitjaG9tcChteSAkZW1haWwgPSBgZ2l0IGNvbmZpZyB1c2VyLmVtYWlsYCk7CitkaWUgJ1lvdSBuZWVkIHRvIHNldCB1c2VyIG5hbWUgYW5kIGVtYWlsJworICB1bmxlc3MgJHVzZXJuYW1lICYmICRlbWFpbDsKKworc3lzdGVtKCdnaXQgaW5pdCcpOworb3BlbihteSAkZmksICd8LScsIHF3KGdpdCBmYXN0LWltcG9ydCAtLWRhdGUtZm9ybWF0PW5vdykpCisgIG9yIGRpZSAidW5hYmxlIHRvIHNwYXduIGZhc3QtaW1wb3J0OiAkISI7CisKK3ByaW50ICRmaSA8PEVPRjsKK2NvbW1pdCByZWZzL2hlYWRzLyRicmFuY2gKK2NvbW1pdHRlciAkdXNlcm5hbWUgPCRlbWFpbD4gbm93CitkYXRhIDw8TVNHRU9GCiskbWVzc2FnZQorTVNHRU9GCisKK0VPRgorCitmaW5kKAorICBzdWIgeworICAgIGlmKCRGaWxlOjpGaW5kOjpuYW1lIGVxICcuLy5naXQnKSB7CisgICAgICAkRmlsZTo6RmluZDo6cHJ1bmUgPSAxOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZXR1cm4gdW5sZXNzIC1mICRfOworCisgICAgbXkgJGZuID0gJEZpbGU6OkZpbmQ6Om5hbWU7CisgICAgJGZuID1+IHMjXi5cLyMjOworCisgICAgb3BlbihteSAkaW4sICc8JywgJF8pCisgICAgICBvciBkaWUgInVuYWJsZSB0byBvcGVuICRmbjogJCEiOworICAgIG15IEBzdCA9IHN0YXQoJGluKQorICAgICAgb3IgZGllICJ1bmFibGUgdG8gc3RhdCAkZm46ICQhIjsKKyAgICBteSAkbGVuID0gJHN0WzddOworCisgICAgcHJpbnQgJGZpICJNIDY0NCBpbmxpbmUgJGZuXG4iOworICAgIHByaW50ICRmaSAiZGF0YSAkbGVuXG4iOworICAgIHdoaWxlKCRsZW4gPiAwKSB7CisgICAgICBteSAkciA9IHJlYWQoJGluLCBteSAkYnVmLCAkbGVuIDwgNDA5NiA/ICRsZW4gOiA0MDk2KTsKKyAgICAgIGRlZmluZWQoJHIpIG9yIGRpZSAicmVhZCBlcnJvciBmcm9tICRmbjogJCEiOworICAgICAgJHIgPiAwIG9yIGRpZSAicHJlbWF0dXJlIEVPRiBmcm9tICRmbjogJCEiOworICAgICAgcHJpbnQgJGZpICRidWY7CisgICAgICAkbGVuIC09ICRyOworICAgIH0KKyAgICBwcmludCAkZmkgIlxuIjsKKworICB9LCAnLicKKyk7CisKK2Nsb3NlKCRmaSk7CitleGl0ICQ/OwpkaWZmIC0tZ2l0IGEvY29udHJpYi9mYXN0LWltcG9ydC9naXQtaW1wb3J0LnNoIGIvY29udHJpYi9mYXN0LWltcG9ydC9naXQtaW1wb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY4ZDgwM2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Zhc3QtaW1wb3J0L2dpdC1pbXBvcnQuc2gKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisjCisjIFBlcmZvcm1zIGFuIGluaXRpYWwgaW1wb3J0IG9mIGEgZGlyZWN0b3J5LiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50CisjIG9mIGRvaW5nICdnaXQgaW5pdDsgZ2l0IGFkZCAuOyBnaXQgY29tbWl0Jy4gSXQncyBhIGxvdCBzbG93ZXIsCisjIGJ1dCBpcyBtZWFudCB0byBiZSBhIHNpbXBsZSBmYXN0LWltcG9ydCBleGFtcGxlLgorCitpZiBbIC16ICIkMSIgLW8gLXogIiQyIiBdOyB0aGVuCisJZWNobyAidXNhZ2U6IGdpdC1pbXBvcnQgYnJhbmNoIGltcG9ydC1tZXNzYWdlIgorCWV4aXQgMQorZmkKKworVVNFUk5BTUU9IiQoZ2l0IGNvbmZpZyB1c2VyLm5hbWUpIgorRU1BSUw9IiQoZ2l0IGNvbmZpZyB1c2VyLmVtYWlsKSIKKworaWYgWyAteiAiJFVTRVJOQU1FIiAtbyAteiAiJEVNQUlMIiBdOyB0aGVuCisJZWNobyAiWW91IG5lZWQgdG8gc2V0IHVzZXIgbmFtZSBhbmQgZW1haWwiCisJZXhpdCAxCitmaQorCitnaXQgaW5pdAorCisoCisJY2F0IDw8RU9GCitjb21taXQgcmVmcy9oZWFkcy8kMQorY29tbWl0dGVyICRVU0VSTkFNRSA8JEVNQUlMPiBub3cKK2RhdGEgPDxNU0dFT0YKKyQyCitNU0dFT0YKKworRU9GCisJZmluZCAqIC10eXBlIGZ8d2hpbGUgcmVhZCBpO2RvCisJCWVjaG8gIk0gMTAwNjQ0IGlubGluZSAkaSIKKwkJZWNobyBkYXRhICQoc3RhdCAtYyAnJXMnICIkaSIpCisJCWNhdCAiJGkiCisJCWVjaG8KKwlkb25lCisJZWNobworKSB8IGdpdCBmYXN0LWltcG9ydCAtLWRhdGUtZm9ybWF0PW5vdwpkaWZmIC0tZ2l0IGEvY29udHJpYi9mYXN0LWltcG9ydC9naXQtcDQuUkVBRE1FIGIvY29udHJpYi9mYXN0LWltcG9ydC9naXQtcDQuUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYzVlY2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Zhc3QtaW1wb3J0L2dpdC1wNC5SRUFETUUKQEAgLTAsMCArMSwxMiBAQAorVGhlIGdpdC1wNCBzY3JpcHQgbW92ZWQgdG8gdGhlIHRvcC1sZXZlbCBvZiB0aGUgZ2l0IHNvdXJjZSBkaXJlY3RvcnkuCisKK0ludm9rZSBpdCBhcyBhbnkgb3RoZXIgZ2l0IGNvbW1hbmQsIGxpa2UgImdpdCBwNCBjbG9uZSIsIGZvciBpbnN0YW5jZS4KKworTm90ZSB0aGF0IHRoZSB0b3AtbGV2ZWwgZ2l0LXA0LnB5IHNjcmlwdCBpcyBub3cgdGhlIHNvdXJjZS4gIEl0IGlzCitidWlsdCB1c2luZyBtYWtlIHRvIGdpdC1wNCwgd2hpY2ggd2lsbCBiZSBpbnN0YWxsZWQuCisKK1dpbmRvd3MgdXNlcnMgY2FuIGNvcHkgdGhlIGdpdC1wNC5weSBzb3VyY2Ugc2NyaXB0IGRpcmVjdGx5LCBwb3NzaWJseQoraW52b2tpbmcgaXQgdGhyb3VnaCBhIGJhdGNoIGZpbGUgY2FsbGVkICJnaXQtcDQuYmF0IiBpbiB0aGUgc2FtZSBmb2xkZXIuCitJdCBzaG91bGQgY29udGFpbiBqdXN0IG9uZSBsaW5lOgorCisgICAgQHB5dGhvbiAiJX5kMCV+cDBnaXQtcDQucHkiICUqCmRpZmYgLS1naXQgYS9jb250cmliL2Zhc3QtaW1wb3J0L2ltcG9ydC1kaXJlY3Rvcmllcy5wZXJsIGIvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtZGlyZWN0b3JpZXMucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMTZmNzljCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtZGlyZWN0b3JpZXMucGVybApAQCAtMCwwICsxLDQxNiBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIENvcHlyaWdodCAyMDA4LTIwMDkgUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+CisjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPXBvZAorCis9aGVhZDEgTkFNRQorCitpbXBvcnQtZGlyZWN0b3JpZXMgLSBJbXBvcnQgYml0cyBhbmQgcGllY2VzIHRvIEdpdC4KKworPWhlYWQxIFNZTk9QU0lTCisKK0I8aW1wb3J0LWRpcmVjdG9yaWVzLnBlcmw+IEY8Y29uZmlnZmlsZT4gRjxvdXRwdXRmaWxlPgorCis9aGVhZDEgREVTQ1JJUFRJT04KKworU2NyaXB0IHRvIGltcG9ydCBhcmJpdHJhcnkgcHJvamVjdHMgdmVyc2lvbiBjb250cm9sbGVkIGJ5IHRoZSAiY29weSB0aGUKK3NvdXJjZSBkaXJlY3RvcnkgdG8gYSBuZXcgbG9jYXRpb24gYW5kIGVkaXQgaXQgdGhlcmUiLXZlcnNpb24gY29udHJvbGxlZAorcHJvamVjdHMgaW50byB2ZXJzaW9uIGNvbnRyb2wuIEhhbmRsZXMgcHJvamVjdHMgd2l0aCBhcmJpdHJhcnkgYnJhbmNoaW5nCithbmQgdmVyc2lvbiB0cmVlcywgdGFraW5nIGEgZmlsZSBkZXNjcmliaW5nIHRoZSBpbnB1dHMgYW5kIGdlbmVyYXRpbmcgYQorZmlsZSBjb21wYXRpYmxlIHdpdGggdGhlIEw8Z2l0LWZhc3QtaW1wb3J0KDEpPiBmb3JtYXQuCisKKz1oZWFkMSBDT05GSUdVUkFUSU9OIEZJTEUKKworPWhlYWQyIEZvcm1hdAorCitUaGUgY29uZmlndXJhdGlvbiBmaWxlIGlzIGJhc2VkIG9uIHRoZSBzdGFuZGFyZCBJPC5pbmk+IGZvcm1hdC4KKworIDsgQ29tbWVudHMgc3RhcnQgd2l0aCBzZW1pLWNvbG9ucworIFtzZWN0aW9uXQorIGtleT12YWx1ZQorCitQbGVhc2Ugc2VlIGJlbG93IGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycy4KKworPWhlYWQyIEdsb2JhbCBjb25maWd1cmF0aW9uCisKK0dsb2JhbCBjb25maWd1cmF0aW9uIGlzIGRvbmUgaW4gdGhlIEI8W2NvbmZpZ10+IHNlY3Rpb24sIHdoaWNoIHNob3VsZCBiZQordGhlIGZpcnN0IHNlY3Rpb24gaW4gdGhlIGZpbGUuIENvbmZpZ3VyYXRpb24gY2FuIGJlIGNoYW5nZWQgYnkKK3JlcGVhdGluZyBjb25maWd1cmF0aW9uIHNlY3Rpb25zIGxhdGVyIG9uLgorCisgW2NvbmZpZ10KKyA7IGNvbmZpZ3VyZSBjb252ZXJzaW9uIG9mIENSTEZzLiAiY29udmVydCIgbWVhbnMgdGhhdCBhbGwgQ1JMRnMKKyA7IHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50byBMRnMgKHN1aXRhYmxlIGZvciB0aGUgY29yZS5hdXRvY3JsZgorIDsgc2V0dGluZyBzZXQgdG8gdHJ1ZSBpbiBHaXQpLiAibm9uZSIgbWVhbnMgdGhhdCBhbGwgZGF0YSBpcworIDsgdHJlYXRlZCBhcyBiaW5hcnkuCisgY3JsZj1jb252ZXJ0CisKKz1oZWFkMiBSZXZpc2lvbiBjb25maWd1cmF0aW9uCisKK0VhY2ggcmV2aXNpb24gdGhhdCBpcyB0byBiZSBpbXBvcnRlZCBpcyBkZXNjcmliZWQgaW4gdGhyZWUKK3NlY3Rpb25zLiBSZXZpc2lvbnMgc2hvdWxkIGJlIGRlZmluZWQgaW4gdG9wb2xvZ2ljYWwgb3JkZXIsIHNvCit0aGF0IGEgcmV2aXNpb24ncyBwYXJlbnQgaGFzIGFsd2F5cyBiZWVuIGRlZmluZWQgd2hlbiBhIG5ldyByZXZpc2lvbgoraXMgaW50cm9kdWNlZC4gQWxsIHRoZSBzZWN0aW9ucyBmb3Igb25lIHJldmlzaW9uIG11c3QgYmUgZGVmaW5lZAorYmVmb3JlIGRlZmluaW5nIHRoZSBuZXh0IHJldmlzaW9uLgorCitFYWNoIHJldmlzaW9uIGlzIGFzc2lnbmVkIGEgdW5pcXVlIG51bWVyaWNhbCBpZGVudGlmaWVyLiBUaGUKK251bWJlcnMgZG8gbm90IG5lZWQgdG8gYmUgY29uc2VjdXRpdmUsIG5vciBtb25vdG9uaWNhbGx5CitpbmNyZWFzaW5nLgorCitGb3IgaW5zdGFuY2UsIGlmIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlIHR3bworcmV2aXNpb25zIDQ3MTEgYW5kIDQyLCB3aGVyZSA0NzExIGlzIHRoZSBpbml0aWFsIGNvbW1pdCwgdGhlCitvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgNDcxMSBpcyBjb21wbGV0ZWx5IGRlZmluZWQgYmVmb3JlIDQyLgorCis9cG9kCisKKz1oZWFkMyBSZXZpc2lvbiBkZXNjcmlwdGlvbiBzZWN0aW9uCisKK0Egc2VjdGlvbiB3aG9zZSBzZWN0aW9uIG5hbWUgaXMganVzdCBhbiBpbnRlZ2VyIGdpdmVzIG1ldGEtZGF0YQorYWJvdXQgdGhlIHJldmlzaW9uLgorCisgWzNdCisgOyBhdXRob3Igc2V0cyB0aGUgYXV0aG9yIG9mIHRoZSByZXZpc2lvbnMKKyBhdXRob3I9UGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+CisgOyBicmFuY2ggc2V0cyB0aGUgYnJhbmNoIHRoYXQgdGhlIHJldmlzaW9uIHNob3VsZCBiZSBjb21taXR0ZWQgdG8KKyBicmFuY2g9bWFzdGVyCisgOyBwYXJlbnQgZGVzY3JpYmVzIHRoZSByZXZpc2lvbiB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcyBjb21taXQKKyA7IChvcHRpb25hbCkKKyBwYXJlbnQ9MQorIDsgbWVyZ2VzIGRlc2NyaWJlcyBhIHJldmlzaW9uIHRoYXQgaXMgbWVyZ2VkIGludG8gdGhpcyBjb21taXQKKyA7IChvcHRpb25hbDsgY2FuIGJlIHJlcGVhdGVkKQorIG1lcmdlcz0yCisgOyBzZWxlY3RzIG9uZSBmaWxlIHRvIHRha2UgdGhlIHRpbWVzdGFtcCBmcm9tCisgOyAob3B0aW9uYWw7IGlmIHVuc3BlY2lmaWVkLCB0aGUgbW9zdCByZWNlbnQgZmlsZSBmcm9tIHRoZSAuZmlsZXMKKyA7ICBzZWN0aW9uIGlzIHVzZWQpCisgdGltZXN0YW1wPTMvc291cmNlLmMKKworPWhlYWQzIFJldmlzaW9uIGNvbnRlbnRzIHNlY3Rpb24KKworQSBzZWN0aW9uIHdob3NlIHNlY3Rpb24gbmFtZSBpcyBhbiBpbnRlZ2VyIGZvbGxvd2VkIGJ5IEI8LmZpbGVzPgorZGVzY3JpYmUgYWxsIHRoZSBmaWxlcyBpbmNsdWRlZCBpbiB0aGlzIHJldmlzaW9uLiBJZiBhIGZpbGUgdGhhdAord2FzIGF2YWlsYWJsZSBwcmV2aW91c2x5IGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzIHJldmlzaW9uLCBpdCB3aWxsCitiZSByZW1vdmVkLgorCitJZiBhbiBvbi1kaXNrIHJldmlzaW9uIGlzIGluY29tcGxldGUsIHlvdSBjYW4gcG9pbnQgdG8gZmlsZXMgZnJvbQorYSBwcmV2aW91cyByZXZpc2lvbi4gVGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiB3aGVyZSB0aGUgc291cmNlCitmaWxlcyBhcmUgbG9jYXRlZCwgbm9yIG9uIHRoZWlyIG5hbWVzLgorCisgWzMuZmlsZXNdCisgOyB0aGUga2V5IGlzIHRoZSBwYXRoIGluc2lkZSB0aGUgcmVwb3NpdG9yeSwgdGhlIHZhbHVlIGlzIHRoZSBwYXRoCisgOyBhcyBzZWVuIGZyb20gdGhlIGltcG9ydGVyIHNjcmlwdC4KKyBzb3VyY2UuYz12ZXItMy4wMC9zb3VyY2UuYworIHNvdXJjZS5oPXZlci0yLjk5L3NvdXJjZS5oCisgcmVhZG1lLnR4dD12ZXItMy4wMC9pbnRyb2R1Y3Rpb24gdG8gdGhlIHByb2plY3QudHh0CisKK0ZpbGUgbmFtZXMgYXJlIHRyZWF0ZWQgYXMgYnl0ZSBzdHJpbmdzIChidXQgcGxlYXNlIHNlZSBiZWxvdyBvbgorcXVvdGluZyBydWxlcyksIGFuZCBzaG91bGQgYmUgc3RvcmVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaW4KK3RoZSBlbmNvZGluZyB0aGF0IHNob3VsZCBiZSB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgcmVwb3NpdG9yeS4KKworPWhlYWQzIFJldmlzaW9uIGNvbW1pdCBtZXNzYWdlIHNlY3Rpb24KKworQSBzZWN0aW9uIHdob3NlIHNlY3Rpb24gbmFtZSBpcyBhbiBpbnRlZ2VyIGZvbGxvd2VkIGJ5IEI8Lm1lc3NhZ2U+CitnaXZlcyB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoaXMgc2VjdGlvbiBpcyByZWFkIHZlcmJhdGltLCB1cCB1bnRpbAordGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBzZWN0aW9uLiBBcyBzdWNoLCBhIGNvbW1pdCBtZXNzYWdlIG1heSBub3QKK2NvbnRhaW4gYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGggYW4gb3BlbmluZyBzcXVhcmUgYnJhY2tldCAoIlsiKSBhbmQKK2VuZHMgd2l0aCBhIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQgKCJdIiksIHVubGVzcyB0aGV5IGFyZSBzdXJyb3VuZGVkCitieSB3aGl0ZXNwYWNlIG9yIG90aGVyIGNoYXJhY3RlcnMuCisKKyBbMy5tZXNzYWdlXQorIEltcGxlbWVudCBmb29iYXIuCisgOyB0cmFpbGluZyBibGFuayBsaW5lcyBhcmUgaWdub3JlZC4KKworPWN1dAorCisjIEdsb2JhbHMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgaW50ZWdlcjsKK215ICRjcmxmbW9kZSA9IDA7CitteSBAcmV2czsKK215ICglcmV2bWFwLCAlbWVzc2FnZSwgJWZpbGVzLCAlYXV0aG9yLCAlYnJhbmNoLCAlcGFyZW50LCAlbWVyZ2VzLCAldGltZSwgJXRpbWVzb3VyY2UpOworbXkgJHNlY3Rpb250eXBlID0gMDsKK215ICRyZXYgPSAwOworbXkgJG1hcmsgPSAxOworCisjIENoZWNrIGNvbW1hbmQgbGluZQoraWYgKCQjQVJHViA8IDEgfHwgJEFSR1ZbMF0gPX4gL14tLT9oLykKK3sKKyAgICBleGVjKCdwZXJsZG9jJywgJDApOworICAgIGV4aXQgMTsKK30KKworIyBPcGVuIGNvbmZpZ3VyYXRpb24KK215ICRjb25maWcgPSAkQVJHVlswXTsKK29wZW4gQ0ZHLCAnPCcsICRjb25maWcgb3IgZGllICJDYW5ub3Qgb3BlbiBjb25maWd1cmF0aW9uIGZpbGUgXCIkY29uZmlnXCI6ICI7CisKKyMgT3BlbiBvdXRwdXQKK215ICRvdXRwdXQgPSAkQVJHVlsxXTsKK29wZW4gT1VULCAnPicsICRvdXRwdXQgb3IgZGllICJDYW5ub3QgY3JlYXRlIG91dHB1dCBmaWxlIFwiJG91dHB1dFwiOiAiOworYmlubW9kZSBPVVQ7CisKK0xJTkU6IHdoaWxlIChteSAkbGluZSA9IDxDRkc+KQoreworCSRsaW5lID1+IHMvXHI/XG4kLy87CisJbmV4dCBMSU5FIGlmICRzZWN0aW9udHlwZSAhPSA0ICYmICRsaW5lIGVxICcnOworCW5leHQgTElORSBpZiAkbGluZSA9fiAvXjsvOworCW15ICRvbGRzZWN0aW9udHlwZSA9ICRzZWN0aW9udHlwZTsKKwlteSAkb2xkcmV2ID0gJHJldjsKKworCSMgU2VjdGlvbnMKKwlpZiAoJGxpbmUgPX4gbSJeXFsoY29uZmlnfChcZCspKHxcLmZpbGVzfFwubWVzc2FnZSkpXF0kIikKKwl7CisJCWlmICgkMSBlcSAnY29uZmlnJykKKwkJeworCQkJJHNlY3Rpb250eXBlID0gMTsKKwkJfQorCQllbHNpZiAoJDMgZXEgJycpCisJCXsKKwkJCSRzZWN0aW9udHlwZSA9IDI7CisJCQkkcmV2ID0gJDI7CisJCQkjIENyZWF0ZSBhIG5ldyByZXZpc2lvbgorCQkJZGllICJEdXBsaWNhdGUgcmV2OiAkbGluZVxuICIgaWYgZGVmaW5lZCAkcmV2bWFweyRyZXZ9OworCQkJcHJpbnQgIlJlYWRpbmcgcmV2aXNpb24gJHJldlxuIjsKKwkJCXB1c2ggQHJldnMsICRyZXY7CisJCQkkcmV2bWFweyRyZXZ9ID0gJG1hcmsgKys7CisJCQkkdGltZXskcmV2bWFweyRyZXZ9fSA9IDA7CisJCX0KKwkJZWxzaWYgKCQzIGVxICcuZmlsZXMnKQorCQl7CisJCQkkc2VjdGlvbnR5cGUgPSAzOworCQkJJHJldiA9ICQyOworCQkJZGllICJSZXZpc2lvbiBtaXNtYXRjaDogJGxpbmVcbiAiIHVubGVzcyAkcmV2ID09ICRvbGRyZXY7CisJCX0KKwkJZWxzaWYgKCQzIGVxICcubWVzc2FnZScpCisJCXsKKwkJCSRzZWN0aW9udHlwZSA9IDQ7CisJCQkkcmV2ID0gJDI7CisJCQlkaWUgIlJldmlzaW9uIG1pc21hdGNoOiAkbGluZVxuICIgdW5sZXNzICRyZXYgPT0gJG9sZHJldjsKKwkJfQorCQllbHNlCisJCXsKKwkJCWRpZSAiSW50ZXJuYWwgcGFyc2UgZXJyb3I6ICRsaW5lXG4gIjsKKwkJfQorCQluZXh0IExJTkU7CisJfQorCisJIyBQYXJzZSBkYXRhCisJaWYgKCRzZWN0aW9udHlwZSAhPSA0KQorCXsKKwkJIyBLZXkgYW5kIHZhbHVlCisJCWlmICgkbGluZSA9fiBtIl5ccyooW15cc10uKj0uKlteXHNdKVxzKiQiKQorCQl7CisJCQlteSAoJGtleSwgJHZhbHVlKSA9ICZwYXJzZWtleXZhbHVlcGFpcigkMSk7CisJCQkjIEdsb2JhbCBjb25maWd1cmF0aW9uCisJCQlpZiAoMSA9PSAkc2VjdGlvbnR5cGUpCisJCQl7CisJCQkJaWYgKCRrZXkgZXEgJ2NybGYnKQorCQkJCXsKKwkJCQkJJGNybGZtb2RlID0gMSwgbmV4dCBMSU5FIGlmICR2YWx1ZSBlcSAnY29udmVydCc7CisJCQkJCSRjcmxmbW9kZSA9IDAsIG5leHQgTElORSBpZiAkdmFsdWUgZXEgJ25vbmUnOworCQkJCX0KKwkJCQlkaWUgIlVua25vd24gY29uZmlndXJhdGlvbiBvcHRpb246ICRsaW5lXG4gIjsKKwkJCX0KKwkJCSMgUmV2aXNpb24gc3BlY2lmaWNhdGlvbgorCQkJaWYgKDIgPT0gJHNlY3Rpb250eXBlKQorCQkJeworCQkJCW15ICRjdXJyZW50ID0gJHJldm1hcHskcmV2fTsKKwkJCQkkYXV0aG9yeyRjdXJyZW50fSA9ICR2YWx1ZSwgbmV4dCBMSU5FIGlmICRrZXkgZXEgJ2F1dGhvcic7CisJCQkJJGJyYW5jaHskY3VycmVudH0gPSAkdmFsdWUsIG5leHQgTElORSBpZiAka2V5IGVxICdicmFuY2gnOworCQkJCSRwYXJlbnR7JGN1cnJlbnR9ID0gJHZhbHVlLCBuZXh0IExJTkUgaWYgJGtleSBlcSAncGFyZW50JzsKKwkJCQkkdGltZXNvdXJjZXskY3VycmVudH0gPSAkdmFsdWUsIG5leHQgTElORSBpZiAka2V5IGVxICd0aW1lc3RhbXAnOworCQkJCXB1c2goQHskbWVyZ2VzeyRjdXJyZW50fX0sICR2YWx1ZSksIG5leHQgTElORSBpZiAka2V5IGVxICdtZXJnZXMnOworCQkJCWRpZSAiVW5rbm93biByZXZpc2lvbiBvcHRpb246ICRsaW5lXG4gIjsKKwkJCX0KKwkJCSMgRmlsZXNwZWNzCisJCQlpZiAoMyA9PSAkc2VjdGlvbnR5cGUpCisJCQl7CisJCQkJIyBBZGQgdGhlIGZpbGUgYW5kIGNyZWF0ZSBhIG1hcmtlcgorCQkJCWRpZSAiRmlsZSBub3QgZm91bmQ6ICRsaW5lXG4gIiB1bmxlc3MgLWYgJHZhbHVlOworCQkJCW15ICRjdXJyZW50ID0gJHJldm1hcHskcmV2fTsKKwkJCQkkeyRmaWxlc3skY3VycmVudH19eyRrZXl9ID0gJG1hcms7CisJCQkJbXkgJHRpbWUgPSAmZmlsZWJsb2IoJHZhbHVlLCAkY3JsZm1vZGUsICRtYXJrICsrKTsKKworCQkJCSMgVXBkYXRlIHJldmlzaW9uIHRpbWVzdGFtcCBpZiBtb3JlIHJlY2VudCB0aGFuIG90aGVyCisJCQkJIyBmaWxlcyBzZWVuLCBvciBpZiB0aGlzIGlzIHRoZSBmaWxlIHdlIGhhdmUgc2VsZWN0ZWQKKwkJCQkjIHRvIHRha2UgdGhlIHRpbWUgc3RhbXAgZnJvbSB1c2luZyB0aGUgInRpbWVzdGFtcCIKKwkJCQkjIGRpcmVjdGl2ZS4KKwkJCQlpZiAoKGRlZmluZWQgJHRpbWVzb3VyY2V7JGN1cnJlbnR9ICYmICR0aW1lc291cmNleyRjdXJyZW50fSBlcSAkdmFsdWUpCisJCQkJICAgIHx8ICR0aW1lID4gJHRpbWV7JGN1cnJlbnR9KQorCQkJCXsKKwkJCQkJJHRpbWV7JGN1cnJlbnR9ID0gJHRpbWU7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJZGllICJQYXJzZSBlcnJvcjogJGxpbmVcbiAiOworCQl9CisJfQorCWVsc2UKKwl7CisJCSMgQ29tbWl0IG1lc3NhZ2UKKwkJbXkgJGN1cnJlbnQgPSAkcmV2bWFweyRyZXZ9OworCQlpZiAoZGVmaW5lZCAkbWVzc2FnZXskY3VycmVudH0pCisJCXsKKwkJCSRtZXNzYWdleyRjdXJyZW50fSAuPSAiXG4iOworCQl9CisJCSRtZXNzYWdleyRjdXJyZW50fSAuPSAkbGluZTsKKwl9Cit9CitjbG9zZSBDRkc7CisKKyMgU3RhcnQgc3Bld2luZyBvdXQgZGF0YSBmb3IgZ2l0LWZhc3QtaW1wb3J0Citmb3JlYWNoIG15ICRjb21taXQgKEByZXZzKQoreworCSMgUHJvZ3Jlc3MKKwlwcmludCBPVVQgInByb2dyZXNzIENyZWF0aW5nIHJldmlzaW9uICRjb21taXRcbiI7CisKKwkjIENyZWF0ZSBjb21taXQgaGVhZGVyCisJbXkgJG1hcmsgPSAkcmV2bWFweyRjb21taXR9OworCisJIyBCcmFuY2ggYW5kIGNvbW1pdCBpZAorCXByaW50IE9VVCAiY29tbWl0IHJlZnMvaGVhZHMvIiwgJGJyYW5jaHskbWFya30sICJcbm1hcmsgOiIsICRtYXJrLCAiXG4iOworCisJIyBBdXRob3IgYW5kIHRpbWVzdGFtcAorCWRpZSAiTm8gdGltZXN0YW1wIGRlZmluZWQgZm9yICRjb21taXQgKG5vIGZpbGVzPylcbiIgdW5sZXNzIGRlZmluZWQgJHRpbWV7JG1hcmt9OworCXByaW50IE9VVCAiY29tbWl0dGVyICIsICRhdXRob3J7JG1hcmt9LCAiICIsICR0aW1leyRtYXJrfSwgIiArMDEwMFxuIjsKKworCSMgQ29tbWl0IG1lc3NhZ2UKKwlkaWUgIk5vIG1lc3NhZ2UgZGVmaW5lZCBmb3IgJGNvbW1pdFxuIiB1bmxlc3MgZGVmaW5lZCAkbWVzc2FnZXskbWFya307CisJbXkgJG1lc3NhZ2UgPSAkbWVzc2FnZXskbWFya307CisJJG1lc3NhZ2UgPX4gcy9cbiQvLzsgIyBLaWxsIHRyYWlsaW5nIGVtcHR5IGxpbmUKKwlwcmludCBPVVQgImRhdGEgIiwgbGVuZ3RoKCRtZXNzYWdlKSwgIlxuIiwgJG1lc3NhZ2UsICJcbiI7CisKKwkjIFBhcmVudCBhbmQgYW55IG1lcmdlcworCXByaW50IE9VVCAiZnJvbSA6IiwgJHJldm1hcHskcGFyZW50eyRtYXJrfX0sICJcbiIgaWYgZGVmaW5lZCAkcGFyZW50eyRtYXJrfTsKKwlpZiAoZGVmaW5lZCAkbWVyZ2VzeyRtYXJrfSkKKwl7CisJCWZvcmVhY2ggbXkgJG1lcmdlIChAeyRtZXJnZXN7JG1hcmt9fSkKKwkJeworCQkJcHJpbnQgT1VUICJtZXJnZSA6IiwgJHJldm1hcHskbWVyZ2V9LCAiXG4iOworCQl9CisJfQorCisJIyBPdXRwdXQgZmlsZSBtYXJrcworCXByaW50IE9VVCAiZGVsZXRlYWxsXG4iOyAjIHN0YXJ0IGZyb20gc2NyYXRjaAorCWZvcmVhY2ggbXkgJGZpbGUgKHNvcnQga2V5cyAleyRmaWxlc3skbWFya319KQorCXsKKwkJcHJpbnQgT1VUICJNIDY0NCA6IiwgJHskZmlsZXN7JG1hcmt9fXskZmlsZX0sICIgJGZpbGVcbiI7CisJfQorCXByaW50IE9VVCAiXG4iOworfQorCisjIENyZWF0ZSBvbmUgZmlsZSBibG9iCitzdWIgZmlsZWJsb2IKK3sKKwlteSAoJGZpbGVuYW1lLCAkY3JsZm1vZGUsICRtYXJrKSA9IEBfOworCisJIyBJbXBvcnQgdGhlIGZpbGUKKwlwcmludCBPVVQgInByb2dyZXNzIEltcG9ydGluZyAkZmlsZW5hbWVcbmJsb2Jcbm1hcmsgOiRtYXJrXG4iOworCW9wZW4gRklMRSwgJzwnLCAkZmlsZW5hbWUgb3IgZGllICJDYW5ub3QgcmVhZCAkZmlsZW5hbWVcbiAiOworCWJpbm1vZGUgRklMRTsKKwlteSAoJHNpemUsICRtdGltZSkgPSAoc3RhdChGSUxFKSlbNyw5XTsKKwlteSAkZmlsZTsKKwlyZWFkIEZJTEUsICRmaWxlLCAkc2l6ZTsKKwljbG9zZSBGSUxFOworCSRmaWxlID1+IHMvXHJcbi9cbi9nIGlmICRjcmxmbW9kZTsKKwlwcmludCBPVVQgImRhdGEgIiwgbGVuZ3RoKCRmaWxlKSwgIlxuIiwgJGZpbGUsICJcbiI7CisKKwlyZXR1cm4gJG10aW1lOworfQorCisjIFBhcnNlIGEga2V5PXZhbHVlIHBhaXIKK3N1YiBwYXJzZWtleXZhbHVlcGFpcgoreworPXBvZAorCis9aGVhZDIgRXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzCisKK0tleSBhbmQgdmFsdWUgc3RyaW5ncyBtYXkgYmUgZW5jbG9zZWQgaW4gcXVvdGVzLCBpbiB3aGljaCBjYXNlCit3aGl0ZXNwYWNlIGluc2lkZSB0aGUgcXVvdGVzIGlzIHByZXNlcnZlZC4gQWRkaXRpb25hbGx5LCBhbiBlcXVhbAorc2lnbiBtYXkgYmUgaW5jbHVkZWQgaW4gdGhlIGtleSBieSBwcmVjZWRpbmcgaXQgd2l0aCBhIGJhY2tzbGFzaC4KK0ZvciBleGFtcGxlOgorCisgImtleTEgIj12YWx1ZTEKKyBrZXkyPSIgdmFsdWUyIgorIGtleVw9Mz12YWx1ZTMKKyBrZXk0PXZhbHVlPTQKKyAia2V5NSIiPXZhbHVlNQorCitIZXJlIHRoZSBmaXJzdCBrZXkgaXMgImtleTEgIiAobm90ZSB0aGUgdHJhaWxpbmcgd2hpdGUtc3BhY2UpIGFuZCB0aGUKK3NlY29uZCB2YWx1ZSBpcyAiIHZhbHVlMiIgKG5vdGUgdGhlIGxlYWRpbmcgd2hpdGUtc3BhY2UpLiBUaGUgdGhpcmQKK2tleSBjb250YWlucyBhbiBlcXVhbCBzaWduICJrZXk9MyIgYW5kIHNvIGRvZXMgdGhlIGZvdXJ0aCB2YWx1ZSwgd2hpY2gKK2RvZXMgbm90IG5lZWQgdG8gYmUgZXNjYXBlZC4gVGhlIGZpZnRoIGtleSBjb250YWlucyBhIHRyYWlsaW5nIHF1b3RlLAord2hpY2ggZG9lcyBub3QgbmVlZCB0byBiZSBlc2NhcGVkIHNpbmNlIGl0IGlzIGluc2lkZSBhIHN1cnJvdW5kaW5nCitxdW90ZS4KKworPWN1dAorCW15ICRwYWlyID0gc2hpZnQ7CisKKwkjIFNlcGFyYXRlIGtleSBhbmQgdmFsdWUgYnkgdGhlIGZpcnN0IG5vbi1xdW90ZWQgZXF1YWwgc2lnbgorCW15ICgka2V5LCAkdmFsdWUpOworCWlmICgkcGFpciA9fiAvXiguKlteXFxdKT0oLiopJC8pCisJeworCQkoJGtleSwgJHZhbHVlKSA9ICgkMSwgJDIpCisJfQorCWVsc2UKKwl7CisJCWRpZSAiUGFyc2UgZXJyb3I6ICRwYWlyXG4gIjsKKwl9CisKKwkjIFVucXVvdGUgYW5kIHVuZXNjYXBlIHRoZSBrZXkgYW5kIHZhbHVlIHNlcGFyYXRlbHkKKwlyZXR1cm4gKCZ1bmVzY2FwZSgka2V5KSwgJnVuZXNjYXBlKCR2YWx1ZSkpOworfQorCisjIFVucXVvdGUgYW5kIHVuZXNjYXBlCitzdWIgdW5lc2NhcGUKK3sKKwlteSAkc3RyaW5nID0gc2hpZnQ7CisKKwkjIEZpcnN0IHJlbW92ZSBlbmNsb3NpbmcgcXVvdGVzLiBCYWNrc2xhc2ggYmVmb3JlIHRoZSB0cmFpbGluZworCSMgcXVvdGUgbGVhdmVzIGJvdGguCisJaWYgKCRzdHJpbmcgPX4gL14iKC4qW15cXF0pIiQvKQorCXsKKwkJJHN0cmluZyA9ICQxOworCX0KKworCSMgU2Vjb25kIHJlbW92ZSBhbnkgYmFja3NsYXNoZXMgaW5zaWRlIHRoZSB1bnF1b3RlZCBzdHJpbmcuCisJIyBGb3IgbGF0ZXI6IEhhbmRsZSBzcGVjaWFsIHNlcXVlbmNlcyBsaWtlIFx0ID8KKwkkc3RyaW5nID1+IHMvXFwoLikvJDEvZzsKKworCXJldHVybiAkc3RyaW5nOworfQorCitfX0VORF9fCisKKz1wb2QKKworPWhlYWQxIEVYQU1QTEVTCisKK0I8aW1wb3J0LWRpcmVjdG9yaWVzLnBlcmw+IEY8cHJvamVjdC5pbXBvcnQ+CisKKz1oZWFkMSBBVVRIT1IKKworQ29weXJpZ2h0IDIwMDgtMjAwOSBQZXRlciBLcmVmdGluZyBFPGx0PnBldGVyQHNvZnR3b2x2ZXMucHAuc2U+CisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworPWN1dApkaWZmIC0tZ2l0IGEvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtdGFycy5wZXJsIGIvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtdGFycy5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1MGNlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Zhc3QtaW1wb3J0L2ltcG9ydC10YXJzLnBlcmwKQEAgLTAsMCArMSwyMjcgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIyB0YXIgYXJjaGl2ZSBmcm9udGVuZCBmb3IgZ2l0LWZhc3QtaW1wb3J0CisjIworIyMgRm9yIGV4YW1wbGU6CisjIworIyMgIG1rZGlyIHByb2plY3Q7IGNkIHByb2plY3Q7IGdpdCBpbml0CisjIyAgcGVybCBpbXBvcnQtdGFycy5wZXJsICoudGFyLmJ6MgorIyMgIGdpdCB3aGF0Y2hhbmdlZCBpbXBvcnQtdGFycworIyMKKyMjIFVzZSAtLW1ldGFpbmZvIHRvIHNwZWNpZnkgdGhlIGV4dGVuc2lvbiBmb3IgYSBtZXRhIGRhdGEgZmlsZSwgd2hlcmUKKyMjIGltcG9ydC10YXJzIGNhbiByZWFkIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgb3B0aW9uYWxseSBhdXRob3IgYW5kCisjIyBjb21taXR0ZXIgaW5mb3JtYXRpb24uCisjIworIyMgIGVjaG8gJ1RoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlJyA+IG15ZmlsZS50YXIuYnoyLm1zZworIyMgIHBlcmwgaW1wb3J0LXRhcnMucGVybCAtLW1ldGFpbmZvPW1zZyBteWZpbGUudGFyLmJ6MgorCit1c2Ugc3RyaWN0OwordXNlIEdldG9wdDo6TG9uZzsKKworbXkgJG1ldGFleHQgPSAnJzsKKworZGllICJ1c2FnZTogaW1wb3J0LXRhcnMgWy0tbWV0YWluZm89ZXh0ZW5zaW9uXSAqLnRhci57Z3osYnoyLGx6bWEseHosWn1cbiIKKwl1bmxlc3MgR2V0T3B0aW9ucygnbWV0YWluZm89cycgPT4gXCRtZXRhZXh0KSAmJiBAQVJHVjsKKworbXkgJGJyYW5jaF9uYW1lID0gJ2ltcG9ydC10YXJzJzsKK215ICRicmFuY2hfcmVmID0gInJlZnMvaGVhZHMvJGJyYW5jaF9uYW1lIjsKK215ICRhdXRob3JfbmFtZSA9ICRFTlZ7J0dJVF9BVVRIT1JfTkFNRSd9IHx8ICdUIEFyIENyZWF0b3InOworbXkgJGF1dGhvcl9lbWFpbCA9ICRFTlZ7J0dJVF9BVVRIT1JfRU1BSUwnfSB8fCAndGFyQGV4YW1wbGUuY29tJzsKK215ICRjb21taXR0ZXJfbmFtZSA9ICRFTlZ7J0dJVF9DT01NSVRURVJfTkFNRSd9IHx8IGBnaXQgY29uZmlnIC0tZ2V0IHVzZXIubmFtZWA7CitteSAkY29tbWl0dGVyX2VtYWlsID0gJEVOVnsnR0lUX0NPTU1JVFRFUl9FTUFJTCd9IHx8IGBnaXQgY29uZmlnIC0tZ2V0IHVzZXIuZW1haWxgOworCitjaG9tcCgkY29tbWl0dGVyX25hbWUsICRjb21taXR0ZXJfZW1haWwpOworCitvcGVuKEZJLCAnfC0nLCAnZ2l0JywgJ2Zhc3QtaW1wb3J0JywgJy0tcXVpZXQnKQorCW9yIGRpZSAiVW5hYmxlIHRvIHN0YXJ0IGdpdCBmYXN0LWltcG9ydDogJCFcbiI7Citmb3JlYWNoIG15ICR0YXJfZmlsZSAoQEFSR1YpCit7CisJbXkgJGNvbW1pdF90aW1lID0gdGltZTsKKwkkdGFyX2ZpbGUgPX4gbSwoW14vXSspJCw7CisJbXkgJHRhcl9uYW1lID0gJDE7CisKKwlpZiAoJHRhcl9uYW1lID1+IHMvXC4odGFyXC5nenx0Z3opJC8vKSB7CisJCW9wZW4oSSwgJy18JywgJ2d1bnppcCcsICctYycsICR0YXJfZmlsZSkKKwkJCW9yIGRpZSAiVW5hYmxlIHRvIGd1bnppcCAtYyAkdGFyX2ZpbGU6ICQhXG4iOworCX0gZWxzaWYgKCR0YXJfbmFtZSA9fiBzL1wuKHRhclwuYnoyfHRiejIpJC8vKSB7CisJCW9wZW4oSSwgJy18JywgJ2J1bnppcDInLCAnLWMnLCAkdGFyX2ZpbGUpCisJCQlvciBkaWUgIlVuYWJsZSB0byBidW56aXAyIC1jICR0YXJfZmlsZTogJCFcbiI7CisJfSBlbHNpZiAoJHRhcl9uYW1lID1+IHMvXC50YXJcLlokLy8pIHsKKwkJb3BlbihJLCAnLXwnLCAndW5jb21wcmVzcycsICctYycsICR0YXJfZmlsZSkKKwkJCW9yIGRpZSAiVW5hYmxlIHRvIHVuY29tcHJlc3MgLWMgJHRhcl9maWxlOiAkIVxuIjsKKwl9IGVsc2lmICgkdGFyX25hbWUgPX4gcy9cLih0YXJcLihsem1hfHh6KXwodGx6fHR4eikpJC8vKSB7CisJCW9wZW4oSSwgJy18JywgJ3h6JywgJy1kYycsICR0YXJfZmlsZSkKKwkJCW9yIGRpZSAiVW5hYmxlIHRvIHh6IC1kYyAkdGFyX2ZpbGU6ICQhXG4iOworCX0gZWxzaWYgKCR0YXJfbmFtZSA9fiBzL1wudGFyJC8vKSB7CisJCW9wZW4oSSwgJHRhcl9maWxlKSBvciBkaWUgIlVuYWJsZSB0byBvcGVuICR0YXJfZmlsZTogJCFcbiI7CisJfSBlbHNlIHsKKwkJZGllICJVbnJlY29nbml6ZWQgY29tcHJlc3Npb24gZm9ybWF0OiAkdGFyX2ZpbGVcbiI7CisJfQorCisJbXkgJGF1dGhvcl90aW1lID0gMDsKKwlteSAkbmV4dF9tYXJrID0gMTsKKwlteSAkaGF2ZV90b3BfZGlyID0gMTsKKwlteSAoJHRvcF9kaXIsICVmaWxlcyk7CisKKwlteSAkbmV4dF9wYXRoID0gJyc7CisKKwl3aGlsZSAocmVhZChJLCAkXywgNTEyKSA9PSA1MTIpIHsKKwkJbXkgKCRuYW1lLCAkbW9kZSwgJHVpZCwgJGdpZCwgJHNpemUsICRtdGltZSwKKwkJCSRjaGtzdW0sICR0eXBlZmxhZywgJGxpbmtuYW1lLCAkbWFnaWMsCisJCQkkdmVyc2lvbiwgJHVuYW1lLCAkZ25hbWUsICRkZXZtYWpvciwgJGRldm1pbm9yLAorCQkJJHByZWZpeCkgPSB1bnBhY2sgJ1oxMDAgWjggWjggWjggWjEyIFoxMgorCQkJWjggWjEgWjEwMCBaNgorCQkJWjIgWjMyIFozMiBaOCBaOCBaKicsICRfOworCisJCXVubGVzcyAoJG5leHRfcGF0aCBlcSAnJykgeworCQkJIyBSZWNvdmVyIG5hbWUgZnJvbSBwcmV2aW91cyBleHRlbmRlZCBoZWFkZXIKKwkJCSRuYW1lID0gJG5leHRfcGF0aDsKKwkJCSRuZXh0X3BhdGggPSAnJzsKKwkJfQorCisJCWxhc3QgdW5sZXNzIGxlbmd0aCgkbmFtZSk7CisJCWlmICgkbmFtZSBlcSAnLi8uL0BMb25nTGluaycpIHsKKwkJCSMgR05VIHRhciBleHRlbnNpb24KKwkJCWlmIChyZWFkKEksICRfLCA1MTIpICE9IDUxMikgeworCQkJCWRpZSAoJ1Nob3J0IGFyY2hpdmUnKTsKKwkJCX0KKwkJCSRuYW1lID0gdW5wYWNrICdaMjU3JywgJF87CisJCQluZXh0IHVubGVzcyAkbmFtZTsKKworCQkJbXkgJGR1bW15OworCQkJaWYgKHJlYWQoSSwgJF8sIDUxMikgIT0gNTEyKSB7CisJCQkJZGllICgnU2hvcnQgYXJjaGl2ZScpOworCQkJfQorCQkJKCRkdW1teSwgJG1vZGUsICR1aWQsICRnaWQsICRzaXplLCAkbXRpbWUsCisJCQkkY2hrc3VtLCAkdHlwZWZsYWcsICRsaW5rbmFtZSwgJG1hZ2ljLAorCQkJJHZlcnNpb24sICR1bmFtZSwgJGduYW1lLCAkZGV2bWFqb3IsICRkZXZtaW5vciwKKwkJCSRwcmVmaXgpID0gdW5wYWNrICdaMTAwIFo4IFo4IFo4IFoxMiBaMTIKKwkJCVo4IFoxIFoxMDAgWjYKKwkJCVoyIFozMiBaMzIgWjggWjggWionLCAkXzsKKwkJfQorCQkkbW9kZSA9IG9jdCAkbW9kZTsKKwkJJHNpemUgPSBvY3QgJHNpemU7CisJCSRtdGltZSA9IG9jdCAkbXRpbWU7CisJCW5leHQgaWYgJHR5cGVmbGFnID09IDU7ICMgZGlyZWN0b3J5CisKKwkJaWYgKCR0eXBlZmxhZyBlcSAneCcpIHsgIyBleHRlbmRlZCBoZWFkZXIKKwkJCSMgSWYgZXh0ZW5kZWQgaGVhZGVyLCBjaGVjayBmb3IgcGF0aAorCQkJbXkgJHBheF9oZWFkZXIgPSAnJzsKKwkJCXdoaWxlICgkc2l6ZSA+IDAgJiYgcmVhZChJLCAkXywgNTEyKSA9PSA1MTIpIHsKKwkJCQkkcGF4X2hlYWRlciA9ICRwYXhfaGVhZGVyIC4gc3Vic3RyKCRfLCAwLCAkc2l6ZSk7CisJCQkJJHNpemUgLT0gNTEyOworCQkJfQorCisJCQlteSBAbGluZXMgPSBzcGxpdCAvXG4vLCAkcGF4X2hlYWRlcjsKKwkJCWZvcmVhY2ggbXkgJGxpbmUgKEBsaW5lcykgeworCQkJCW15ICgkbGVuLCAkZW50cnkpID0gc3BsaXQgLyAvLCAkbGluZTsKKwkJCQlteSAoJGtleSwgJHZhbHVlKSA9IHNwbGl0IC89LywgJGVudHJ5OworCQkJCWlmICgka2V5IGVxICdwYXRoJykgeworCQkJCQkkbmV4dF9wYXRoID0gJHZhbHVlOworCQkJCX0KKwkJCX0KKwkJCW5leHQ7CisJCX0gZWxzaWYgKCRuYW1lID1+IG17L1x6fSkgeyAjIGRpcmVjdG9yeQorCQkJbmV4dDsKKwkJfSBlbHNpZiAoJHR5cGVmbGFnICE9IDEpIHsgIyBoYW5kbGUgaGFyZCBsaW5rcyBsYXRlcgorCQkJcHJpbnQgRkkgImJsb2JcbiIsICJtYXJrIDokbmV4dF9tYXJrXG4iOworCQkJaWYgKCR0eXBlZmxhZyA9PSAyKSB7ICMgc3ltYm9saWMgbGluaworCQkJCXByaW50IEZJICJkYXRhICIsIGxlbmd0aCgkbGlua25hbWUpLCAiXG4iLAorCQkJCQkkbGlua25hbWU7CisJCQkJJG1vZGUgPSAwMTIwMDAwOworCQkJfSBlbHNlIHsKKwkJCQlwcmludCBGSSAiZGF0YSAkc2l6ZVxuIjsKKwkJCQl3aGlsZSAoJHNpemUgPiAwICYmIHJlYWQoSSwgJF8sIDUxMikgPT0gNTEyKSB7CisJCQkJCXByaW50IEZJIHN1YnN0cigkXywgMCwgJHNpemUpOworCQkJCQkkc2l6ZSAtPSA1MTI7CisJCQkJfQorCQkJfQorCQkJcHJpbnQgRkkgIlxuIjsKKwkJfQorCisJCW5leHQgaWYgKCR0eXBlZmxhZyBlcSAnZycpOyAjIGlnbm9yZSBnbG9iYWwgaGVhZGVyCisKKwkJbXkgJHBhdGg7CisJCWlmICgkcHJlZml4KSB7CisJCQkkcGF0aCA9ICIkcHJlZml4LyRuYW1lIjsKKwkJfSBlbHNlIHsKKwkJCSRwYXRoID0gIiRuYW1lIjsKKwkJfQorCisJCWlmICgkdHlwZWZsYWcgPT0gMSkgeyAjIGhhcmQgbGluaworCQkJJGxpbmtuYW1lID0gIiRwcmVmaXgvJGxpbmtuYW1lIiBpZiAkcHJlZml4OworCQkJJGZpbGVzeyRwYXRofSA9IFsgJGZpbGVzeyRsaW5rbmFtZX0tPlswXSwgJG1vZGUgXTsKKwkJfSBlbHNlIHsKKwkJCSRmaWxlc3skcGF0aH0gPSBbJG5leHRfbWFyaysrLCAkbW9kZV07CisJCX0KKworCQkkYXV0aG9yX3RpbWUgPSAkbXRpbWUgaWYgJG10aW1lID4gJGF1dGhvcl90aW1lOworCQkkcGF0aCA9fiBtLF4oW14vXSspLyw7CisJCSR0b3BfZGlyID0gJDEgdW5sZXNzICR0b3BfZGlyOworCQkkaGF2ZV90b3BfZGlyID0gMCBpZiAkdG9wX2RpciBuZSAkMTsKKwl9CisKKwlteSAkY29tbWl0X21zZyA9ICJJbXBvcnRlZCBmcm9tICR0YXJfZmlsZS4iOworCW15ICR0aGlzX2NvbW1pdHRlcl9uYW1lID0gJGNvbW1pdHRlcl9uYW1lOworCW15ICR0aGlzX2NvbW1pdHRlcl9lbWFpbCA9ICRjb21taXR0ZXJfZW1haWw7CisJbXkgJHRoaXNfYXV0aG9yX25hbWUgPSAkYXV0aG9yX25hbWU7CisJbXkgJHRoaXNfYXV0aG9yX2VtYWlsID0gJGF1dGhvcl9lbWFpbDsKKwlpZiAoJG1ldGFleHQgbmUgJycpIHsKKwkJIyBPcHRpb25hbGx5IHJlYWQgYSBjb21taXQgbWVzc2FnZSBmcm9tIDxmaWxlbmFtZS50YXI+Lm1zZworCQkjIEFkZCBhIGxpbmUgb24gdGhlIGZvcm0gIkNvbW1pdHRlcjogbmFtZSA8ZS1tYWlsPiIgdG8gb3ZlcnJpZGUKKwkJIyB0aGUgY29tbWl0dGVyIGFuZCAiQXV0aG9yOiBuYW1lIDxlLW1haWw+IiB0byBvdmVycmlkZSB0aGUKKwkJIyBhdXRob3IgZm9yIHRoaXMgdGFyIGJhbGwuCisJCWlmIChvcGVuIE1TRywgJzwnLCAiJHt0YXJfZmlsZX0uJHttZXRhZXh0fSIpIHsKKwkJCW15ICRoZWFkZXJfZG9uZSA9IDA7CisJCQkkY29tbWl0X21zZyA9ICcnOworCQkJd2hpbGUgKDxNU0c+KSB7CisJCQkJaWYgKCEkaGVhZGVyX2RvbmUgJiYgL15Db21taXR0ZXI6XHMrKFtePD5dKilccys8KC4qKT5ccyokL2kpIHsKKwkJCQkJJHRoaXNfY29tbWl0dGVyX25hbWUgPSAkMTsKKwkJCQkJJHRoaXNfY29tbWl0dGVyX2VtYWlsID0gJDI7CisJCQkJfSBlbHNpZiAoISRoZWFkZXJfZG9uZSAmJiAvXkF1dGhvcjpccysoW148Pl0qKVxzKzwoLiopPlxzKiQvaSkgeworCQkJCQkkdGhpc19hdXRob3JfbmFtZSA9ICQxOworCQkJCQkkdGhpc19hdXRob3JfZW1haWwgPSAkMjsKKwkJCQl9IGVsc2lmICghJGhlYWRlcl9kb25lICYmIC9eJC8pIHsgIyBlbXB0eSBsaW5lIGVuZHMgaGVhZGVyLgorCQkJCQkkaGVhZGVyX2RvbmUgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJCSRjb21taXRfbXNnIC49ICRfOworCQkJCQkkaGVhZGVyX2RvbmUgPSAxOworCQkJCX0KKwkJCX0KKwkJCWNsb3NlIE1TRzsKKwkJfQorCX0KKworCXByaW50IEZJIDw8RU9GOworY29tbWl0ICRicmFuY2hfcmVmCithdXRob3IgJHRoaXNfYXV0aG9yX25hbWUgPCR0aGlzX2F1dGhvcl9lbWFpbD4gJGF1dGhvcl90aW1lICswMDAwCitjb21taXR0ZXIgJHRoaXNfY29tbWl0dGVyX25hbWUgPCR0aGlzX2NvbW1pdHRlcl9lbWFpbD4gJGNvbW1pdF90aW1lICswMDAwCitkYXRhIDw8RU5EX09GX0NPTU1JVF9NRVNTQUdFCiskY29tbWl0X21zZworRU5EX09GX0NPTU1JVF9NRVNTQUdFCisKK2RlbGV0ZWFsbAorRU9GCisKKwlmb3JlYWNoIG15ICRwYXRoIChrZXlzICVmaWxlcykKKwl7CisJCW15ICgkbWFyaywgJG1vZGUpID0gQHskZmlsZXN7JHBhdGh9fTsKKwkJJHBhdGggPX4gcyxeKFteL10rKS8sLCBpZiAkaGF2ZV90b3BfZGlyOworCQkkbW9kZSA9ICRtb2RlICYgMDExMSA/IDA3NTUgOiAwNjQ0IHVubGVzcyAkbW9kZSA9PSAwMTIwMDAwOworCQlwcmludGYgRkkgIk0gJW8gOiVpICVzXG4iLCAkbW9kZSwgJG1hcmssICRwYXRoOworCX0KKwlwcmludCBGSSAiXG4iOworCisJcHJpbnQgRkkgPDxFT0Y7Cit0YWcgJHRhcl9uYW1lCitmcm9tICRicmFuY2hfcmVmCit0YWdnZXIgJGF1dGhvcl9uYW1lIDwkYXV0aG9yX2VtYWlsPiAkYXV0aG9yX3RpbWUgKzAwMDAKK2RhdGEgPDxFTkRfT0ZfVEFHX01FU1NBR0UKK1BhY2thZ2UgJHRhcl9uYW1lCitFTkRfT0ZfVEFHX01FU1NBR0UKKworRU9GCisKKwljbG9zZSBJOworfQorY2xvc2UgRkk7CmRpZmYgLS1naXQgYS9jb250cmliL2Zhc3QtaW1wb3J0L2ltcG9ydC16aXBzLnB5IGIvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtemlwcy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMTJjMjk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtemlwcy5weQpAQCAtMCwwICsxLDc4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyMgemlwIGFyY2hpdmUgZnJvbnRlbmQgZm9yIGdpdC1mYXN0LWltcG9ydAorIyMKKyMjIEZvciBleGFtcGxlOgorIyMKKyMjICBta2RpciBwcm9qZWN0OyBjZCBwcm9qZWN0OyBnaXQgaW5pdAorIyMgIHB5dGhvbiBpbXBvcnQtemlwcy5weSAqLnppcAorIyMgIGdpdCBsb2cgLS1zdGF0IGltcG9ydC16aXBzCisKK2Zyb20gb3MgaW1wb3J0IHBvcGVuLCBwYXRoCitmcm9tIHN5cyBpbXBvcnQgYXJndiwgZXhpdCwgaGV4dmVyc2lvbiwgc3RkZXJyCitmcm9tIHRpbWUgaW1wb3J0IG1rdGltZQorZnJvbSB6aXBmaWxlIGltcG9ydCBaaXBGaWxlCisKK2lmIGhleHZlcnNpb24gPCAweDAxMDYwMDAwOgorICAgICMgVGhlIGxpbWl0ZXIgaXMgdGhlIHppcGZpbGUgbW9kdWxlCisgICAgc3RkZXJyLndyaXRlKCJpbXBvcnQtemlwcy5weTogcmVxdWlyZXMgUHl0aG9uIDEuNi4wIG9yIGxhdGVyLlxuIikKKyAgICBleGl0KDEpCisKK2lmIGxlbihhcmd2KSA8IDI6CisgICAgcHJpbnQgJ3VzYWdlOicsIGFyZ3ZbMF0sICc8emlwZmlsZT4uLi4nCisgICAgZXhpdCgxKQorCiticmFuY2hfcmVmID0gJ3JlZnMvaGVhZHMvaW1wb3J0LXppcHMnCitjb21taXR0ZXJfbmFtZSA9ICdaIElwIENyZWF0b3InCitjb21taXR0ZXJfZW1haWwgPSAnemlwQGV4YW1wbGUuY29tJworCitmYXN0X2ltcG9ydCA9IHBvcGVuKCdnaXQgZmFzdC1pbXBvcnQgLS1xdWlldCcsICd3JykKK2RlZiBwcmludGxpbmVzKGxpc3QpOgorICAgIGZvciBzdHIgaW4gbGlzdDoKKyAgICAgICAgZmFzdF9pbXBvcnQud3JpdGUoc3RyICsgIlxuIikKKworZm9yIHppcGZpbGUgaW4gYXJndlsxOl06CisgICAgY29tbWl0X3RpbWUgPSAwCisgICAgbmV4dF9tYXJrID0gMQorICAgIGNvbW1vbl9wcmVmaXggPSBOb25lCisgICAgbWFyayA9IGRpY3QoKQorCisgICAgemlwID0gWmlwRmlsZSh6aXBmaWxlLCAncicpCisgICAgZm9yIG5hbWUgaW4gemlwLm5hbWVsaXN0KCk6CisgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy8nKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGluZm8gPSB6aXAuZ2V0aW5mbyhuYW1lKQorCisgICAgICAgIGlmIGNvbW1pdF90aW1lIDwgaW5mby5kYXRlX3RpbWU6CisgICAgICAgICAgICBjb21taXRfdGltZSA9IGluZm8uZGF0ZV90aW1lCisgICAgICAgIGlmIGNvbW1vbl9wcmVmaXggPT0gTm9uZToKKyAgICAgICAgICAgIGNvbW1vbl9wcmVmaXggPSBuYW1lWzpuYW1lLnJmaW5kKCcvJykgKyAxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2hpbGUgbm90IG5hbWUuc3RhcnRzd2l0aChjb21tb25fcHJlZml4KToKKyAgICAgICAgICAgICAgICBsYXN0X3NsYXNoID0gY29tbW9uX3ByZWZpeFs6LTFdLnJmaW5kKCcvJykgKyAxCisgICAgICAgICAgICAgICAgY29tbW9uX3ByZWZpeCA9IGNvbW1vbl9wcmVmaXhbOmxhc3Rfc2xhc2hdCisKKyAgICAgICAgbWFya1tuYW1lXSA9ICc6JyArIHN0cihuZXh0X21hcmspCisgICAgICAgIG5leHRfbWFyayArPSAxCisKKyAgICAgICAgcHJpbnRsaW5lcygoJ2Jsb2InLCAnbWFyayAnICsgbWFya1tuYW1lXSwgXAorICAgICAgICAgICAgICAgICAgICAnZGF0YSAnICsgc3RyKGluZm8uZmlsZV9zaXplKSkpCisgICAgICAgIGZhc3RfaW1wb3J0LndyaXRlKHppcC5yZWFkKG5hbWUpICsgIlxuIikKKworICAgIGNvbW1pdHRlciA9IGNvbW1pdHRlcl9uYW1lICsgJyA8JyArIGNvbW1pdHRlcl9lbWFpbCArICc+ICVkICswMDAwJyAlIFwKKyAgICAgICAgbWt0aW1lKGNvbW1pdF90aW1lICsgKDAsIDAsIDApKQorCisgICAgcHJpbnRsaW5lcygoJ2NvbW1pdCAnICsgYnJhbmNoX3JlZiwgJ2NvbW1pdHRlciAnICsgY29tbWl0dGVyLCBcCisgICAgICAgICdkYXRhIDw8RU9NJywgJ0ltcG9ydGVkIGZyb20gJyArIHppcGZpbGUgKyAnLicsICdFT00nLCBcCisgICAgICAgICcnLCAnZGVsZXRlYWxsJykpCisKKyAgICBmb3IgbmFtZSBpbiBtYXJrLmtleXMoKToKKyAgICAgICAgZmFzdF9pbXBvcnQud3JpdGUoJ00gMTAwNjQ0ICcgKyBtYXJrW25hbWVdICsgJyAnICsKKyAgICAgICAgICAgIG5hbWVbbGVuKGNvbW1vbl9wcmVmaXgpOl0gKyAiXG4iKQorCisgICAgcHJpbnRsaW5lcygoJycsICAndGFnICcgKyBwYXRoLmJhc2VuYW1lKHppcGZpbGUpLCBcCisgICAgICAgICdmcm9tICcgKyBicmFuY2hfcmVmLCAndGFnZ2VyICcgKyBjb21taXR0ZXIsIFwKKyAgICAgICAgJ2RhdGEgPDxFT00nLCAnUGFja2FnZSAnICsgemlwZmlsZSwgJ0VPTScsICcnKSkKKworaWYgZmFzdF9pbXBvcnQuY2xvc2UoKToKKyAgICBleGl0KDEpCmRpZmYgLS1naXQgYS9jb250cmliL2dpdC1qdW1wL1JFQURNRSBiL2NvbnRyaWIvZ2l0LWp1bXAvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNjE4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2dpdC1qdW1wL1JFQURNRQpAQCAtMCwwICsxLDExMiBAQAorZ2l0LWp1bXAKKz09PT09PT09CisKK0dpdC1qdW1wIGlzIGEgc2NyaXB0IGZvciBoZWxwaW5nIHlvdSBqdW1wIHRvICJpbnRlcmVzdGluZyIgcGFydHMgb2YgeW91cgorcHJvamVjdCBpbiB5b3VyIGVkaXRvci4gSXQgd29ya3MgYnkgb3V0cHV0dGluZyBhIHNldCBvZiBpbnRlcmVzdGluZworc3BvdHMgaW4gdGhlICJxdWlja2ZpeCIgZm9ybWF0LCB3aGljaCBlZGl0b3JzIGxpa2UgdmltIGNhbiB1c2UgYXMgYQorcXVldWUgb2YgcGxhY2VzIHRvIHZpc2l0ICh0aGlzIGZlYXR1cmUgaXMgdXN1YWxseSB1c2VkIHRvIGp1bXAgdG8gZXJyb3JzCitwcm9kdWNlZCBieSBhIGNvbXBpbGVyKS4gRm9yIGV4YW1wbGUsIGdpdmVuIGEgZGlmZiBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGlmZiAtLWdpdCBhL2Zvby5jIGIvZm9vLmMKK2luZGV4IGE2NTU1NDAuLjVhNTkwNDQgMTAwNjQ0CistLS0gYS9mb28uYworKysrIGIvZm9vLmMKK0BAIC0xLDMgKzEsMyBAQAorIGludCBtYWluKHZvaWQpIHsKKy0gIHByaW50ZigiaGVsbG8gd29yZCFcbiIpOworKyAgcHJpbnRmKCJoZWxsbyB3b3JsZCFcbiIpOworIH0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2dpdC1qdW1wIHdpbGwgZmVlZCB0aGlzIHRvIHRoZSBlZGl0b3I6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitmb28uYzoyOiBwcmludGYoImhlbGxvIHdvcmQhXG4iKTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09yLCB3aGVuIHJ1bm5pbmcgJ2dpdCBqdW1wIGdyZXAnLCBjb2x1bW4gbnVtYmVycyB3aWxsIGFsc28gYmUgZW1pdHRlZCwKK2UuZy4gYGdpdCBqdW1wIGdyZXAgImhlbGxvImAgd291bGQgcmV0dXJuOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZm9vLmM6Mjo5OiBwcmludGYoImhlbGxvIHdvcmQhXG4iKTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09idmlvdXNseSB0aGlzIHRyaXZpYWwgY2FzZSBpc24ndCB0aGF0IGludGVyZXN0aW5nOyB5b3UgY291bGQganVzdCBvcGVuCitgZm9vLmNgIHlvdXJzZWxmLiBCdXQgd2hlbiB5b3UgaGF2ZSBtYW55IGNoYW5nZXMgc2NhdHRlcmVkIGFjcm9zcyBhCitwcm9qZWN0LCB5b3UgY2FuIHVzZSB0aGUgZWRpdG9yJ3Mgc3VwcG9ydCB0byAianVtcCIgZnJvbSBwb2ludCB0byBwb2ludC4KKworR2l0LWp1bXAgY2FuIGdlbmVyYXRlIGZvdXIgdHlwZXMgb2YgaW50ZXJlc3RpbmcgbGlzdHM6CisKKyAgMS4gVGhlIGJlZ2lubmluZyBvZiBhbnkgZGlmZiBodW5rcy4KKworICAyLiBUaGUgYmVnaW5uaW5nIG9mIGFueSBtZXJnZSBjb25mbGljdCBtYXJrZXJzLgorCisgIDMuIEFueSBncmVwIG1hdGNoZXMsIGluY2x1ZGluZyB0aGUgY29sdW1uIG9mIHRoZSBmaXJzdCBtYXRjaCBvbiBhCisgICAgIGxpbmUuCisKKyAgNC4gQW55IHdoaXRlc3BhY2UgZXJyb3JzIGRldGVjdGVkIGJ5IGBnaXQgZGlmZiAtLWNoZWNrYC4KKworCitVc2luZyBnaXQtanVtcAorLS0tLS0tLS0tLS0tLS0KKworVG8gdXNlIGl0LCBqdXN0IGRyb3AgZ2l0LWp1bXAgaW4geW91ciBQQVRILCBhbmQgdGhlbiBpbnZva2UgaXQgbGlrZQordGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMganVtcCB0byBjaGFuZ2VzIG5vdCB5ZXQgc3RhZ2VkIGZvciBjb21taXQKK2dpdCBqdW1wIGRpZmYKKworIyBqdW1wIHRvIGNoYW5nZXMgdGhhdCBhcmUgc3RhZ2VkIGZvciBjb21taXQ7IHlvdSBjYW4gZ2l2ZQorIyBhcmJpdHJhcnkgZGlmZiBvcHRpb25zCitnaXQganVtcCBkaWZmIC0tY2FjaGVkCisKKyMganVtcCB0byBtZXJnZSBjb25mbGljdHMKK2dpdCBqdW1wIG1lcmdlCisKKyMganVtcCB0byBhbGwgaW5zdGFuY2VzIG9mIGZvb19iYXIKK2dpdCBqdW1wIGdyZXAgZm9vX2JhcgorCisjIHNhbWUgYXMgYWJvdmUsIGJ1dCBjYXNlLWluc2Vuc2l0aXZlOyB5b3UgY2FuIGdpdmUKKyMgYXJiaXRyYXJ5IGdyZXAgb3B0aW9ucworZ2l0IGp1bXAgZ3JlcCAtaSBmb29fYmFyCisKKyMgdXNlIHRoZSBzaWx2ZXIgc2VhcmNoZXIgZm9yIGdpdCBqdW1wIGdyZXAKK2dpdCBjb25maWcganVtcC5ncmVwQ21kICJhZyAtLWNvbHVtbiIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworUmVsYXRlZCBQcm9ncmFtcworLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGFjY29tcGxpc2ggc29tZSBvZiB0aGUgc2FtZSB0aGluZ3Mgd2l0aCBpbmRpdmlkdWFsIHRvb2xzLiBGb3IKK2V4YW1wbGUsIHlvdSBjYW4gdXNlIGBnaXQgbWVyZ2V0b29sYCB0byBzdGFydCB2aW1kaWZmIG9uIGVhY2ggdW5tZXJnZWQKK2ZpbGUuIGBnaXQganVtcCBtZXJnZWAgaXMgZm9yIHRoZSB2aW0td2llbGRpbmcgbHVkZGl0ZSB3aG8ganVzdCB3YW50cyB0bworanVtcCBzdHJhaWdodCB0byB0aGUgY29uZmxpY3QgdGV4dCB3aXRoIG5vIGZhbmZhcmUuCisKK0FzIG9mIGdpdCB2MS43LjIsIGBnaXQgZ3JlcGAga25vd3MgdGhlIGAtLW9wZW4tZmlsZXMtaW4tcGFnZXJgIG9wdGlvbiwKK3doaWNoIGRvZXMgc29tZXRoaW5nIHNpbWlsYXIgdG8gYGdpdCBqdW1wIGdyZXBgLiBIb3dldmVyLCBpdCBpcyBsaW1pdGVkCit0byBwb3NpdGlvbmluZyB0aGUgY3Vyc29yIHRvIHRoZSBjb3JyZWN0IGxpbmUgaW4gb25seSB0aGUgZmlyc3QgZmlsZSwKK2xlYXZpbmcgeW91IHRvIGxvY2F0ZSBzdWJzZXF1ZW50IGhpdHMgaW4gdGhhdCBmaWxlIG9yIG90aGVyIGZpbGVzIHVzaW5nCit0aGUgZWRpdG9yIG9yIHBhZ2VyLiBCeSBjb250cmFzdCwgZ2l0LWp1bXAgcHJvdmlkZXMgdGhlIGVkaXRvciB3aXRoIGEKK2NvbXBsZXRlIGxpc3Qgb2YgZmlsZXMsIGxpbmVzLCBhbmQgYSBjb2x1bW4gbnVtYmVyIGZvciBlYWNoIG1hdGNoLgorCisKK0xpbWl0YXRpb25zCistLS0tLS0tLS0tLQorCitUaGlzIHNjcmlwdCB3YXMgd3JpdHRlbiBhbmQgdGVzdGVkIHdpdGggdmltLiBHaXZlbiB0aGF0IHRoZSBxdWlja2ZpeAorZm9ybWF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgZ2NjIHByb2R1Y2VzLCBJIGV4cGVjdCBlbWFjcyB1c2VycyBoYXZlIGEKK3NpbWlsYXIgZmVhdHVyZSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGxpc3QsIGJ1dCBJIGtub3cgbm90aGluZyBhYm91dAoraG93IHRvIGFjdGl2YXRlIGl0LgorCitUaGUgc2hlbGwgc25pcHBldHMgdG8gZ2VuZXJhdGUgdGhlIHF1aWNrZml4IGxpbmVzIHdpbGwgYWxtb3N0IGNlcnRhaW5seQorY2hva2Ugb24gZmlsZW5hbWVzIHdpdGggZXhvdGljIGNoYXJhY3RlcnMgKGxpa2UgbmV3bGluZXMpLgorCitDb250cmlidXRpbmcKKy0tLS0tLS0tLS0tLQorCitCdWcgZml4ZXMsIGJ1ZyByZXBvcnRzLCBhbmQgZmVhdHVyZSByZXF1ZXN0cyBzaG91bGQgYmUgZGlzY3Vzc2VkIG9uIHRoZQorR2l0IG1haWxpbmcgbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4sIGFuZCBjYydkIHRvIHRoZSBnaXQtanVtcAorbWFpbnRhaW5lciwgSmVmZiBLaW5nIDxwZWZmQHBlZmYubmV0Pi4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ2l0LWp1bXAvZ2l0LWp1bXAgYi9jb250cmliL2dpdC1qdW1wL2dpdC1qdW1wCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkzMWIwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2dpdC1qdW1wL2dpdC1qdW1wCkBAIC0wLDAgKzEsNzggQEAKKyMhL2Jpbi9zaAorCit1c2FnZSgpIHsKKwljYXQgPDxcRU9GCit1c2FnZTogZ2l0IGp1bXAgPG1vZGU+IFs8YXJncz5dCisKK0p1bXAgdG8gaW50ZXJlc3RpbmcgZWxlbWVudHMgaW4gYW4gZWRpdG9yLgorVGhlIDxtb2RlPiBwYXJhbWV0ZXIgaXMgb25lIG9mOgorCitkaWZmOiBlbGVtZW50cyBhcmUgZGlmZiBodW5rcy4gQXJndW1lbnRzIGFyZSBnaXZlbiB0byBkaWZmLgorCittZXJnZTogZWxlbWVudHMgYXJlIG1lcmdlIGNvbmZsaWN0cy4gQXJndW1lbnRzIGFyZSBpZ25vcmVkLgorCitncmVwOiBlbGVtZW50cyBhcmUgZ3JlcCBoaXRzLiBBcmd1bWVudHMgYXJlIGdpdmVuIHRvIGdpdCBncmVwIG9yLCBpZgorICAgICAgY29uZmlndXJlZCwgdG8gdGhlIGNvbW1hbmQgaW4gYGp1bXAuZ3JlcENtZGAuCisKK3dzOiBlbGVtZW50cyBhcmUgd2hpdGVzcGFjZSBlcnJvcnMuIEFyZ3VtZW50cyBhcmUgZ2l2ZW4gdG8gZGlmZiAtLWNoZWNrLgorRU9GCit9CisKK29wZW5fZWRpdG9yKCkgeworCWVkaXRvcj1gZ2l0IHZhciBHSVRfRURJVE9SYAorCWV2YWwgIiRlZGl0b3IgLXEgXCQxIgorfQorCittb2RlX2RpZmYoKSB7CisJZ2l0IGRpZmYgLS1uby1wcmVmaXggLS1yZWxhdGl2ZSAiJEAiIHwKKwlwZXJsIC1uZSAnCisJaWYgKG17XlwrXCtcKyAoLiopfSkgeyAkZmlsZSA9ICQxOyBuZXh0IH0KKwlkZWZpbmVkKCRmaWxlKSBvciBuZXh0OworCWlmIChtL15AQCAuKj9cKyhcZCspLykgeyAkbGluZSA9ICQxOyBuZXh0IH0KKwlkZWZpbmVkKCRsaW5lKSBvciBuZXh0OworCWlmICgvXiAvKSB7ICRsaW5lKys7IG5leHQgfQorCWlmICgvXlstK11ccyooLiopLykgeworCQlwcmludCAiJGZpbGU6JGxpbmU6ICQxXG4iOworCQkkbGluZSA9IHVuZGVmOworCX0KKwknCit9CisKK21vZGVfbWVyZ2UoKSB7CisJZ2l0IGxzLWZpbGVzIC11IHwKKwlwZXJsIC1wZSAncy9eLio/XHQvLycgfAorCXNvcnQgLXUgfAorCXdoaWxlIElGUz0gcmVhZCBmbjsgZG8KKwkJZ3JlcCAtSG4gJ148PDw8PDw8JyAiJGZuIgorCWRvbmUKK30KKworIyBHcmVwIC1uIGdlbmVyYXRlcyBuaWNlIHF1aWNrZml4LWxvb2tpbmcgbGluZXMgYnkgaXRzZWxmLAorIyBidXQgbGV0J3MgY2xlYW4gdXAgZXh0cmEgd2hpdGVzcGFjZSwgc28gdGhleSBsb29rIGJldHRlciBpZiB0aGUKKyMgZWRpdG9yIHNob3dzIHRoZW0gdG8gdXMgaW4gdGhlIHN0YXR1cyBiYXIuCittb2RlX2dyZXAoKSB7CisJY21kPSQoZ2l0IGNvbmZpZyBqdW1wLmdyZXBDbWQpCisJdGVzdCAtbiAiJGNtZCIgfHwgY21kPSJnaXQgZ3JlcCAtbiAtLWNvbHVtbiIKKwkkY21kICIkQCIgfAorCXBlcmwgLXBlICcKKwlzL1sgXHRdKy8gL2c7CisJcy9eICovLzsKKwknCit9CisKK21vZGVfd3MoKSB7CisJZ2l0IGRpZmYgLS1jaGVjayAiJEAiCit9CisKK2lmIHRlc3QgJCMgLWx0IDE7IHRoZW4KKwl1c2FnZSA+JjIKKwlleGl0IDEKK2ZpCittb2RlPSQxOyBzaGlmdAorCit0cmFwICdybSAtZiAiJHRtcCInIDAgMSAyIDMgMTUKK3RtcD1gbWt0ZW1wIC10IGdpdC1qdW1wLlhYWFhYWGAgfHwgZXhpdCAxCit0eXBlICJtb2RlXyRtb2RlIiA+L2Rldi9udWxsIDI+JjEgfHwgeyB1c2FnZSA+JjI7IGV4aXQgMTsgfQorIm1vZGVfJG1vZGUiICIkQCIgPiIkdG1wIgordGVzdCAtcyAiJHRtcCIgfHwgZXhpdCAwCitvcGVuX2VkaXRvciAiJHRtcCIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ2l0LXJlc3VycmVjdC5zaCBiL2NvbnRyaWIvZ2l0LXJlc3VycmVjdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YzE3MWRkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9naXQtcmVzdXJyZWN0LnNoCkBAIC0wLDAgKzEsMTgyIEBACisjIS9iaW4vc2gKKworVVNBR0U9IlstYV0gWy1yXSBbLW1dIFstdF0gWy1uXSBbLWIgPG5ld25hbWU+XSA8bmFtZT4iCitMT05HX1VTQUdFPSJnaXQtcmVzdXJyZWN0IGF0dGVtcHRzIHRvIGZpbmQgdHJhY2VzIG9mIGEgYnJhbmNoIHRpcAorY2FsbGVkIDxuYW1lPiwgYW5kIHRyaWVzIHRvIHJlc3VycmVjdCBpdC4gIEN1cnJlbnRseSwgdGhlIHJlZmxvZyBpcworc2VhcmNoZWQgZm9yIGNoZWNrb3V0IG1lc3NhZ2VzLCBhbmQgd2l0aCAtciBhbHNvIG1lcmdlIG1lc3NhZ2VzLiAgV2l0aAorLW0gYW5kIC10LCB0aGUgaGlzdG9yeSBvZiBhbGwgcmVmcyBpcyBzY2FubmVkIGZvciBNZXJnZSA8bmFtZT4gaW50bworb3RoZXIvTWVyZ2UgPG90aGVyPiBpbnRvIDxuYW1lPiAocmVzcGVjdGl2ZWx5KSBjb21taXQgc3ViamVjdHMsIHdoaWNoCitpcyByYXRoZXIgc2xvdyBidXQgYWxsb3dzIHlvdSB0byByZXN1cnJlY3Qgb3RoZXIgcGVvcGxlJ3MgdG9waWMKK2JyYW5jaGVzLiIKKworT1BUSU9OU19LRUVQREFTSERBU0g9CitPUFRJT05TX1NUVUNLTE9ORz0KK09QVElPTlNfU1BFQz0iXAorZ2l0IHJlc3VycmVjdCAkVVNBR0UKKy0tCitiLGJyYW5jaD0gICAgICAgICAgICBzYXZlIGJyYW5jaCBhcyA8bmV3bmFtZT4gaW5zdGVhZCBvZiA8bmFtZT4KK2EsYWxsICAgICAgICAgICAgICAgIHNhbWUgYXMgLWwgLXIgLW0gLXQKK2ssa2VlcC1nb2luZyAgICAgICAgIGZ1bGwgcmV2LWxpc3Qgc2NhbiAoaW5zdGVhZCBvZiBmaXJzdCBtYXRjaCkKK2wscmVmbG9nICAgICAgICAgICAgIHNjYW4gcmVmbG9nIGZvciBjaGVja291dHMgKGVuYWJsZWQgYnkgZGVmYXVsdCkKK3IscmVmbG9nLW1lcmdlcyAgICAgIHNjYW4gZm9yIG1lcmdlcyByZWNvcmRlZCBpbiByZWZsb2cKK20sbWVyZ2VzICAgICAgICAgICAgIHNjYW4gZm9yIG1lcmdlcyBpbnRvIG90aGVyIGJyYW5jaGVzIChzbG93KQordCxtZXJnZS10YXJnZXRzICAgICAgc2NhbiBmb3IgbWVyZ2VzIG9mIG90aGVyIGJyYW5jaGVzIGludG8gPG5hbWU+CituLGRyeS1ydW4gICAgICAgICAgICBkb24ndCByZWNyZWF0ZSB0aGUgYnJhbmNoIgorCisuIGdpdC1zaC1zZXR1cAorCitzZWFyY2hfcmVmbG9nICgpIHsKKwlzZWQgLW5lICdzfl5cKFteIF0qXCkgLioJY2hlY2tvdXQ6IG1vdmluZyBmcm9tICciJDEiJyAuKn5cMX5wJyBcCisgICAgICAgICAgICAgICAgPCAiJEdJVF9ESVIiL2xvZ3MvSEVBRAorfQorCitzZWFyY2hfcmVmbG9nX21lcmdlcyAoKSB7CisJZ2l0IHJldi1wYXJzZSAkKAorCQlzZWQgLW5lICdzfl5bXiBdKiBcKFteIF0qXCkgLioJbWVyZ2UgJyIkMSInOi4qflwxXjJ+cCcgXAorCQkJPCAiJEdJVF9ESVIiL2xvZ3MvSEVBRAorCSkKK30KKworX3g0MD0iWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXSIKK194NDA9IiRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAiCisKK3NlYXJjaF9tZXJnZXMgKCkgeworICAgICAgICBnaXQgcmV2LWxpc3QgLS1hbGwgLS1ncmVwPSJNZXJnZSBicmFuY2ggJyQxJyIgXAorICAgICAgICAgICAgICAgIC0tcHJldHR5PXRmb3JtYXQ6IiVQICVzIiB8CisgICAgICAgIHNlZCAtbmUgIi9eJF94NDAgXCgkX3g0MFwpIE1lcmdlIC4qLyB7cy8vXDEvcDskZWFybHlfZXhpdH0iCit9CisKK3NlYXJjaF9tZXJnZV90YXJnZXRzICgpIHsKKwlnaXQgcmV2LWxpc3QgLS1hbGwgLS1ncmVwPSJNZXJnZSBicmFuY2ggJ1teJ10qJyBpbnRvICRicmFuY2hcJCIgXAorCQktLXByZXR0eT10Zm9ybWF0OiIlSCAlcyIgLS1hbGwgfAorCXNlZCAtbmUgIi9eXCgkX3g0MFwpIE1lcmdlIC4qLyB7cy8vXDEvcDskZWFybHlfZXhpdH0gIgorfQorCitkcnlfcnVuPQorZWFybHlfZXhpdD1xCitzY2FuX3JlZmxvZz10CitzY2FuX3JlZmxvZ19tZXJnZXM9CitzY2FuX21lcmdlcz0KK3NjYW5fbWVyZ2VfdGFyZ2V0cz0KK25ld19uYW1lPQorCit3aGlsZSB0ZXN0ICIkIyIgIT0gMDsgZG8KKwljYXNlICIkMSIgaW4KKwkgICAgLWJ8LS1icmFuY2gpCisJCXNoaWZ0CisJCW5ld19uYW1lPSIkMSIKKwkJOzsKKwkgICAgLW58LS1kcnktcnVuKQorCQlkcnlfcnVuPXQKKwkJOzsKKwkgICAgLS1uby1kcnktcnVuKQorCQlkcnlfcnVuPQorCQk7OworCSAgICAta3wtLWtlZXAtZ29pbmcpCisJCWVhcmx5X2V4aXQ9CisJCTs7CisJICAgIC0tbm8ta2VlcC1nb2luZykKKwkJZWFybHlfZXhpdD1xCisJCTs7CisJICAgIC1tfC0tbWVyZ2VzKQorCQlzY2FuX21lcmdlcz10CisJCTs7CisJICAgIC0tbm8tbWVyZ2VzKQorCQlzY2FuX21lcmdlcz0KKwkJOzsKKwkgICAgLWx8LS1yZWZsb2cpCisJCXNjYW5fcmVmbG9nPXQKKwkJOzsKKwkgICAgLS1uby1yZWZsb2cpCisJCXNjYW5fcmVmbG9nPQorCQk7OworCSAgICAtcnwtLXJlZmxvZ19tZXJnZXMpCisJCXNjYW5fcmVmbG9nX21lcmdlcz10CisJCTs7CisJICAgIC0tbm8tcmVmbG9nX21lcmdlcykKKwkJc2Nhbl9yZWZsb2dfbWVyZ2VzPQorCQk7OworCSAgICAtdHwtLW1lcmdlLXRhcmdldHMpCisJCXNjYW5fbWVyZ2VfdGFyZ2V0cz10CisJCTs7CisJICAgIC0tbm8tbWVyZ2UtdGFyZ2V0cykKKwkJc2Nhbl9tZXJnZV90YXJnZXRzPQorCQk7OworCSAgICAtYXwtLWFsbCkKKwkJc2Nhbl9yZWZsb2c9dAorCQlzY2FuX3JlZmxvZ19tZXJnZXM9dAorCQlzY2FuX21lcmdlcz10CisJCXNjYW5fbWVyZ2VfdGFyZ2V0cz10CisJCTs7CisJICAgIC0tKQorCQlzaGlmdAorCQlicmVhaworCQk7OworCSAgICAqKQorCQl1c2FnZQorCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCit0ZXN0ICIkIyIgPSAxIHx8IHVzYWdlCisKK2FsbF9zdHJhdGVnaWVzPSIkc2Nhbl9yZWZsb2ckc2Nhbl9yZWZsb2dfbWVyZ2VzJHNjYW5fbWVyZ2VzJHNjYW5fbWVyZ2VfdGFyZ2V0cyIKK2lmIHRlc3QgLXogIiRhbGxfc3RyYXRlZ2llcyI7IHRoZW4KKwlkaWUgIm11c3QgZW5hYmxlIGF0IGxlYXN0IG9uZSBvZiAtbHJtdCIKK2ZpCisKK2JyYW5jaD0iJDEiCit0ZXN0IC16ICIkbmV3X25hbWUiICYmIG5ld19uYW1lPSIkYnJhbmNoIgorCitpZiB0ZXN0ICEgLXogIiRzY2FuX3JlZmxvZyI7IHRoZW4KKwlpZiB0ZXN0IC1yICIkR0lUX0RJUiIvbG9ncy9IRUFEOyB0aGVuCisJCWNhbmRpZGF0ZXM9IiQoc2VhcmNoX3JlZmxvZyAkYnJhbmNoKSIKKwllbHNlCisJCWRpZSAncmVmbG9nIHNjYW5uaW5nIHJlcXVlc3RlZCwgYnV0JyBcCisJCQknJEdJVF9ESVIvbG9ncy9IRUFEIG5vdCByZWFkYWJsZScKKwlmaQorZmkKK2lmIHRlc3QgISAteiAiJHNjYW5fcmVmbG9nX21lcmdlcyI7IHRoZW4KKwlpZiB0ZXN0IC1yICIkR0lUX0RJUiIvbG9ncy9IRUFEOyB0aGVuCisJCWNhbmRpZGF0ZXM9IiRjYW5kaWRhdGVzICQoc2VhcmNoX3JlZmxvZ19tZXJnZXMgJGJyYW5jaCkiCisJZWxzZQorCQlkaWUgJ3JlZmxvZyBzY2FubmluZyByZXF1ZXN0ZWQsIGJ1dCcgXAorCQkJJyRHSVRfRElSL2xvZ3MvSEVBRCBub3QgcmVhZGFibGUnCisJZmkKK2ZpCitpZiB0ZXN0ICEgLXogIiRzY2FuX21lcmdlcyI7IHRoZW4KKwljYW5kaWRhdGVzPSIkY2FuZGlkYXRlcyAkKHNlYXJjaF9tZXJnZXMgJGJyYW5jaCkiCitmaQoraWYgdGVzdCAhIC16ICIkc2Nhbl9tZXJnZV90YXJnZXRzIjsgdGhlbgorCWNhbmRpZGF0ZXM9IiRjYW5kaWRhdGVzICQoc2VhcmNoX21lcmdlX3RhcmdldHMgJGJyYW5jaCkiCitmaQorCitjYW5kaWRhdGVzPSIkKGdpdCByZXYtcGFyc2UgJGNhbmRpZGF0ZXMgfCBzb3J0IC11KSIKKworaWYgdGVzdCAteiAiJGNhbmRpZGF0ZXMiOyB0aGVuCisJaGludD0KKwl0ZXN0ICJ6JGFsbF9zdHJhdGVnaWVzIiAhPSAienR0dHQiIFwKKwkJJiYgaGludD0iIChtYXliZSB0cnkgYWdhaW4gd2l0aCAtYSkiCisJZGllICJubyBjYW5kaWRhdGVzIGZvciAkYnJhbmNoIGZvdW5kJGhpbnQiCitmaQorCitlY2hvICIqKiBDYW5kaWRhdGVzIGZvciAkYnJhbmNoICoqIgorZm9yIGNtdCBpbiAkY2FuZGlkYXRlczsgZG8KKwlnaXQgLS1uby1wYWdlciBsb2cgLS1wcmV0dHk9dGZvcm1hdDoiJWN0OiVoIFslY3JdICVzIiAtLWFiYnJldi1jb21taXQgLTEgJGNtdAorZG9uZSBcCit8IHNvcnQgLW4gfCBjdXQgLWQ6IC1mMi0KKworbmV3ZXN0PSIkKGdpdCByZXYtbGlzdCAtMSAkY2FuZGlkYXRlcykiCitpZiB0ZXN0ICEgLXogIiRkcnlfcnVuIjsgdGhlbgorCXByaW50ZiAiKiogTW9zdCByZWNlbnQ6ICIKKwlnaXQgLS1uby1wYWdlciBsb2cgLTEgLS1wcmV0dHk9dGZvcm1hdDoiJWggJXMiICRuZXdlc3QKK2VsaWYgISBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgJG5ld19uYW1lID4vZGV2L251bGw7IHRoZW4KKwlwcmludGYgIioqIFJlc3RvcmluZyAkbmV3X25hbWUgdG8gIgorCWdpdCAtLW5vLXBhZ2VyIGxvZyAtMSAtLXByZXR0eT10Zm9ybWF0OiIlaCAlcyIgJG5ld2VzdAorCWdpdCBicmFuY2ggJG5ld19uYW1lICRuZXdlc3QKK2Vsc2UKKwlwcmludGYgIk1vc3QgcmVjZW50OiAiCisJZ2l0IC0tbm8tcGFnZXIgbG9nIC0xIC0tcHJldHR5PXRmb3JtYXQ6IiVoICVzIiAkbmV3ZXN0CisJZWNobyAiKiogJG5ld19uYW1lIGFscmVhZHkgZXhpc3RzLCBkb2luZyBub3RoaW5nIgorZmkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ2l0LXNoZWxsLWNvbW1hbmRzL1JFQURNRSBiL2NvbnRyaWIvZ2l0LXNoZWxsLWNvbW1hbmRzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzg0NjNiCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvUkVBRE1FCkBAIC0wLDAgKzEsMTggQEAKK1NhbXBsZSBwcm9ncmFtcyBjYWxsYWJsZSB0aHJvdWdoIGdpdC1zaGVsbC4gIFBsYWNlIGEgZGlyZWN0b3J5IG5hbWVkCisnZ2l0LXNoZWxsLWNvbW1hbmRzJyBpbiB0aGUgaG9tZSBkaXJlY3Rvcnkgb2YgYSB1c2VyIHdob3NlIHNoZWxsIGlzCitnaXQtc2hlbGwuICBUaGVuIGFueW9uZSBsb2dnaW5nIGluIGFzIHRoYXQgdXNlciB3aWxsIGJlIGFibGUgdG8gcnVuCitleGVjdXRhYmxlcyBpbiB0aGUgJ2dpdC1zaGVsbC1jb21tYW5kcycgZGlyZWN0b3J5LgorCitQcm92aWRlZCBjb21tYW5kczoKKworaGVscDogUHJpbnRzIG91dCB0aGUgbmFtZXMgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLiAgV2hlbiBydW4KK2ludGVyYWN0aXZlbHksIGdpdC1zaGVsbCB3aWxsIGF1dG9tYXRpY2FsbHkgcnVuICdoZWxwJyBvbiBzdGFydHVwLAorcHJvdmlkZWQgaXQgZXhpc3RzLgorCitsaXN0OiBEaXNwbGF5cyBhbnkgYmFyZSByZXBvc2l0b3J5IHdob3NlIG5hbWUgZW5kcyB3aXRoICIuZ2l0IiB1bmRlcgordXNlcidzIGhvbWUgZGlyZWN0b3J5LiAgTm8gb3RoZXIgZ2l0IHJlcG9zaXRvcmllcyBhcmUgdmlzaWJsZSwKK2FsdGhvdWdoIHRoZXkgbWlnaHQgYmUgY2xvbmFibGUgdGhyb3VnaCBnaXQtc2hlbGwuICAnbGlzdCcgaXMgZGVzaWduZWQKK3RvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gZ2l0IHRoYXQgbXVzdCBiZSBtYWRlIGluIGZpbmRpbmcKK2F2YWlsYWJsZSByZXBvc2l0b3JpZXM7IGlmIHlvdXIgc2V0dXAgaGFzIGFkZGl0aW9uYWwgcmVwb3NpdG9yaWVzIHRoYXQKK3Nob3VsZCBiZSB1c2VyLWRpc2NvdmVyYWJsZSwgeW91IG1heSB3aXNoIHRvIG1vZGlmeSAnbGlzdCcKK2FjY29yZGluZ2x5LgpkaWZmIC0tZ2l0IGEvY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvaGVscCBiL2NvbnRyaWIvZ2l0LXNoZWxsLWNvbW1hbmRzL2hlbHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTM1NzcwYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZ2l0LXNoZWxsLWNvbW1hbmRzL2hlbHAKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisKK2lmIHR0eSAtcwordGhlbgorCWVjaG8gIlJ1biAnaGVscCcgZm9yIGhlbHAsIG9yICdleGl0JyB0byBsZWF2ZS4gIEF2YWlsYWJsZSBjb21tYW5kczoiCitlbHNlCisJZWNobyAiUnVuICdoZWxwJyBmb3IgaGVscC4gIEF2YWlsYWJsZSBjb21tYW5kczoiCitmaQorCitjZCAiJChkaXJuYW1lICIkMCIpIgorCitmb3IgY21kIGluICoKK2RvCisJY2FzZSAiJGNtZCIgaW4KKwloZWxwKSA7OworCSopIFsgLWYgIiRjbWQiIF0gJiYgWyAteCAiJGNtZCIgXSAmJiBlY2hvICIkY21kIiA7OworCWVzYWMKK2RvbmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ2l0LXNoZWxsLWNvbW1hbmRzL2xpc3QgYi9jb250cmliL2dpdC1zaGVsbC1jb21tYW5kcy9saXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZmODk5MzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2dpdC1zaGVsbC1jb21tYW5kcy9saXN0CkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitwcmludF9pZl9iYXJlX3JlcG89JworCWlmICIkKGdpdCAtLWdpdC1kaXI9IiQxIiByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnkpIiA9IHRydWUKKwl0aGVuCisJCXByaW50ZiAiJXNcbiIgIiR7MSMuL30iCisJZmkKKycKKworZmluZCAtdHlwZSBkIC1uYW1lICIqLmdpdCIgLWV4ZWMgc2ggLWMgIiRwcmludF9pZl9iYXJlX3JlcG8iIC0tIFx7fSBcOyAtcHJ1bmUgMj4vZGV2L251bGwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaGctdG8tZ2l0L2hnLXRvLWdpdC5weSBiL2NvbnRyaWIvaGctdG8tZ2l0L2hnLXRvLWdpdC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZWIxYjI0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9oZy10by1naXQvaGctdG8tZ2l0LnB5CkBAIC0wLDAgKzEsMjU0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIiIiIGhnLXRvLWdpdC5weSAtIEEgTWVyY3VyaWFsIHRvIEdJVCBjb252ZXJ0ZXIKKworICAgIENvcHlyaWdodCAoQykyMDA3IFN0ZWxpYW4gUG9wIDxzdGVsaWFuQHBvcGllcy5uZXQ+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyIiIgorCitpbXBvcnQgb3MsIG9zLnBhdGgsIHN5cworaW1wb3J0IHRlbXBmaWxlLCBwaWNrbGUsIGdldG9wdAoraW1wb3J0IHJlCisKK2lmIHN5cy5oZXh2ZXJzaW9uIDwgMHgwMjAzMDAwMDoKKyAgICMgVGhlIGJlaGF2aW9yIG9mIHRoZSBwaWNrbGUgbW9kdWxlIGNoYW5nZWQgc2lnbmlmaWNhbnRseSBpbiAyLjMKKyAgIHN5cy5zdGRlcnIud3JpdGUoImhnLXRvLWdpdC5weTogcmVxdWlyZXMgUHl0aG9uIDIuMyBvciBsYXRlci5cbiIpCisgICBzeXMuZXhpdCgxKQorCisjIE1hcHMgaGcgdmVyc2lvbiAtPiBnaXQgdmVyc2lvbgoraGd2ZXJzID0ge30KKyMgTGlzdCBvZiBjaGlsZHJlbiBmb3IgZWFjaCBoZyByZXZpc2lvbgoraGdjaGlsZHJlbiA9IHt9CisjIExpc3Qgb2YgcGFyZW50cyBmb3IgZWFjaCBoZyByZXZpc2lvbgoraGdwYXJlbnRzID0ge30KKyMgQ3VycmVudCBicmFuY2ggZm9yIGVhY2ggaGcgcmV2aXNpb24KK2hnYnJhbmNoID0ge30KKyMgTnVtYmVyIG9mIG5ldyBjaGFuZ2VzZXRzIGNvbnZlcnRlZCBmcm9tIGhnCitoZ25ld2NzZXRzID0gMAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiB1c2FnZSgpOgorCisgICAgICAgIHByaW50KCIiIlwKKyVzOiBbT1BUSU9OU10gPGhncHJqPgorCitvcHRpb25zOgorICAgIC1zLCAtLWdpdHN0YXRlPUZJTEU6IG5hbWUgb2YgdGhlIHN0YXRlIHRvIGJlIHNhdmVkL3JlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaW5jcmVtZW50YWxzCisgICAgLW4sIC0tbnJlcGFjaz1JTlQ6ICAgbnVtYmVyIG9mIGNoYW5nZXNldHMgdGhhdCB3aWxsIHRyaWdnZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICBhIHJlcGFjayAoZGVmYXVsdD0wLCAtMSB0byBkZWFjdGl2YXRlKQorICAgIC12LCAtLXZlcmJvc2U6ICAgICAgIGJlIHZlcmJvc2UKKworcmVxdWlyZWQ6CisgICAgaGdwcmo6ICBuYW1lIG9mIHRoZSBIRyBwcm9qZWN0IHRvIGltcG9ydCAoZGlyZWN0b3J5KQorIiIiICUgc3lzLmFyZ3ZbMF0pCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGdldGdpdGVudih1c2VyLCBkYXRlKToKKyAgICBlbnYgPSAnJworICAgIGVsZW1zID0gcmUuY29tcGlsZSgnKC4qPylccys8KC4qKT4nKS5tYXRjaCh1c2VyKQorICAgIGlmIGVsZW1zOgorICAgICAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQVVUSE9SX05BTUU9IiVzIiA7JyAlIGVsZW1zLmdyb3VwKDEpCisgICAgICAgIGVudiArPSAnZXhwb3J0IEdJVF9DT01NSVRURVJfTkFNRT0iJXMiIDsnICUgZWxlbXMuZ3JvdXAoMSkKKyAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0FVVEhPUl9FTUFJTD0iJXMiIDsnICUgZWxlbXMuZ3JvdXAoMikKKyAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0NPTU1JVFRFUl9FTUFJTD0iJXMiIDsnICUgZWxlbXMuZ3JvdXAoMikKKyAgICBlbHNlOgorICAgICAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQVVUSE9SX05BTUU9IiVzIiA7JyAlIHVzZXIKKyAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0NPTU1JVFRFUl9OQU1FPSIlcyIgOycgJSB1c2VyCisgICAgICAgIGVudiArPSAnZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUw9IDsnCisgICAgICAgIGVudiArPSAnZXhwb3J0IEdJVF9DT01NSVRURVJfRU1BSUw9IDsnCisKKyAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQVVUSE9SX0RBVEU9IiVzIiA7JyAlIGRhdGUKKyAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQ09NTUlUVEVSX0RBVEU9IiVzIiA7JyAlIGRhdGUKKyAgICByZXR1cm4gZW52CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGUgPSAnJworb3B0X25yZXBhY2sgPSAwCit2ZXJib3NlID0gRmFsc2UKKwordHJ5OgorICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ3M6dDpuOnYnLCBbJ2dpdHN0YXRlPScsICd0ZW1wZGlyPScsICducmVwYWNrPScsICd2ZXJib3NlJ10pCisgICAgZm9yIG8sIGEgaW4gb3B0czoKKyAgICAgICAgaWYgbyBpbiAoJy1zJywgJy0tZ2l0c3RhdGUnKToKKyAgICAgICAgICAgIHN0YXRlID0gYQorICAgICAgICAgICAgc3RhdGUgPSBvcy5wYXRoLmFic3BhdGgoc3RhdGUpCisgICAgICAgIGlmIG8gaW4gKCctbicsICctLW5yZXBhY2snKToKKyAgICAgICAgICAgIG9wdF9ucmVwYWNrID0gaW50KGEpCisgICAgICAgIGlmIG8gaW4gKCctdicsICctLXZlcmJvc2UnKToKKyAgICAgICAgICAgIHZlcmJvc2UgPSBUcnVlCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigncGFyYW1zJykKK2V4Y2VwdDoKKyAgICB1c2FnZSgpCisgICAgc3lzLmV4aXQoMSkKKworaGdwcmogPSBhcmdzWzBdCitvcy5jaGRpcihoZ3ByaikKKworaWYgc3RhdGU6CisgICAgaWYgb3MucGF0aC5leGlzdHMoc3RhdGUpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoJ1N0YXRlIGRvZXMgZXhpc3QsIHJlYWRpbmcnKQorICAgICAgICBmID0gb3BlbihzdGF0ZSwgJ3InKQorICAgICAgICBoZ3ZlcnMgPSBwaWNrbGUubG9hZChmKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCdTdGF0ZSBkb2VzIG5vdCBleGlzdCwgZmlyc3QgcnVuJykKKworc29jayA9IG9zLnBvcGVuKCdoZyB0aXAgLS10ZW1wbGF0ZSAie3Jldn0iJykKK3RpcCA9IHNvY2sucmVhZCgpCitpZiBzb2NrLmNsb3NlKCk6CisgICAgc3lzLmV4aXQoMSkKK2lmIHZlcmJvc2U6CisgICAgcHJpbnQoJ3RpcCBpcycsIHRpcCkKKworIyBDYWxjdWxhdGUgdGhlIGJyYW5jaGVzCitpZiB2ZXJib3NlOgorICAgIHByaW50KCdhbmFseXNpbmcgdGhlIGJyYW5jaGVzLi4uJykKK2hnY2hpbGRyZW5bIjAiXSA9ICgpCitoZ3BhcmVudHNbIjAiXSA9IChOb25lLCBOb25lKQoraGdicmFuY2hbIjAiXSA9ICJtYXN0ZXIiCitmb3IgY3NldCBpbiByYW5nZSgxLCBpbnQodGlwKSArIDEpOgorICAgIGhnY2hpbGRyZW5bc3RyKGNzZXQpXSA9ICgpCisgICAgcHJudHMgPSBvcy5wb3BlbignaGcgbG9nIC1yICVkIC0tdGVtcGxhdGUgIntwYXJlbnRzfSInICUgY3NldCkucmVhZCgpLnN0cmlwKCkuc3BsaXQoJyAnKQorICAgIHBybnRzID0gbWFwKGxhbWJkYSB4OiB4Wzp4LmZpbmQoJzonKV0sIHBybnRzKQorICAgIGlmIHBybnRzWzBdICE9ICcnOgorICAgICAgICBwYXJlbnQgPSBwcm50c1swXS5zdHJpcCgpCisgICAgZWxzZToKKyAgICAgICAgcGFyZW50ID0gc3RyKGNzZXQgLSAxKQorICAgIGhnY2hpbGRyZW5bcGFyZW50XSArPSAoIHN0cihjc2V0KSwgKQorICAgIGlmIGxlbihwcm50cykgPiAxOgorICAgICAgICBtcGFyZW50ID0gcHJudHNbMV0uc3RyaXAoKQorICAgICAgICBoZ2NoaWxkcmVuW21wYXJlbnRdICs9ICggc3RyKGNzZXQpLCApCisgICAgZWxzZToKKyAgICAgICAgbXBhcmVudCA9IE5vbmUKKworICAgIGhncGFyZW50c1tzdHIoY3NldCldID0gKHBhcmVudCwgbXBhcmVudCkKKworICAgIGlmIG1wYXJlbnQ6CisgICAgICAgICMgRm9yIG1lcmdlIGNoYW5nZXNldHMsIHRha2UgZWl0aGVyIG9uZSwgcHJlZmVyYWJseSB0aGUgJ21hc3RlcicgYnJhbmNoCisgICAgICAgIGlmIGhnYnJhbmNoW21wYXJlbnRdID09ICdtYXN0ZXInOgorICAgICAgICAgICAgaGdicmFuY2hbc3RyKGNzZXQpXSA9ICdtYXN0ZXInCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoZ2JyYW5jaFtzdHIoY3NldCldID0gaGdicmFuY2hbcGFyZW50XQorICAgIGVsc2U6CisgICAgICAgICMgTm9ybWFsIGNoYW5nZXNldHMKKyAgICAgICAgIyBGb3IgZmlyc3QgY2hpbGRyZW4sIHRha2UgdGhlIHBhcmVudCBicmFuY2gsIGZvciB0aGUgb3RoZXJzIGNyZWF0ZSBhIG5ldyBicmFuY2gKKyAgICAgICAgaWYgaGdjaGlsZHJlbltwYXJlbnRdWzBdID09IHN0cihjc2V0KToKKyAgICAgICAgICAgIGhnYnJhbmNoW3N0cihjc2V0KV0gPSBoZ2JyYW5jaFtwYXJlbnRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoZ2JyYW5jaFtzdHIoY3NldCldID0gImJyYW5jaC0iICsgc3RyKGNzZXQpCisKK2lmICIwIiBub3QgaW4gaGd2ZXJzOgorICAgIHByaW50KCdjcmVhdGluZyByZXBvc2l0b3J5JykKKyAgICBvcy5zeXN0ZW0oJ2dpdCBpbml0JykKKworIyBsb29wIHRocm91Z2ggZXZlcnkgaGcgY2hhbmdlc2V0Citmb3IgY3NldCBpbiByYW5nZShpbnQodGlwKSArIDEpOgorCisgICAgIyBpbmNyZW1lbnRhbCwgYWxyZWFkeSBzZWVuCisgICAgaWYgc3RyKGNzZXQpIGluIGhndmVyczoKKyAgICAgICAgY29udGludWUKKyAgICBoZ25ld2NzZXRzICs9IDEKKworICAgICMgZ2V0IGluZm8KKyAgICBsb2dfZGF0YSA9IG9zLnBvcGVuKCdoZyBsb2cgLXIgJWQgLS10ZW1wbGF0ZSAie3RhZ3N9XG57ZGF0ZXxkYXRlfVxue2F1dGhvcn1cbiInICUgY3NldCkucmVhZGxpbmVzKCkKKyAgICB0YWcgPSBsb2dfZGF0YVswXS5zdHJpcCgpCisgICAgZGF0ZSA9IGxvZ19kYXRhWzFdLnN0cmlwKCkKKyAgICB1c2VyID0gbG9nX2RhdGFbMl0uc3RyaXAoKQorICAgIHBhcmVudCA9IGhncGFyZW50c1tzdHIoY3NldCldWzBdCisgICAgbXBhcmVudCA9IGhncGFyZW50c1tzdHIoY3NldCldWzFdCisKKyAgICAjZ2V0IGNvbW1lbnQKKyAgICAoZmRjb21tZW50LCBmaWxlY29tbWVudCkgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICBjc2V0Y29tbWVudCA9IG9zLnBvcGVuKCdoZyBsb2cgLXIgJWQgLS10ZW1wbGF0ZSAie2Rlc2N9IicgJSBjc2V0KS5yZWFkKCkuc3RyaXAoKQorICAgIG9zLndyaXRlKGZkY29tbWVudCwgY3NldGNvbW1lbnQpCisgICAgb3MuY2xvc2UoZmRjb21tZW50KQorCisgICAgcHJpbnQoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJykKKyAgICBwcmludCgnY3NldDonLCBjc2V0KQorICAgIHByaW50KCdicmFuY2g6JywgaGdicmFuY2hbc3RyKGNzZXQpXSkKKyAgICBwcmludCgndXNlcjonLCB1c2VyKQorICAgIHByaW50KCdkYXRlOicsIGRhdGUpCisgICAgcHJpbnQoJ2NvbW1lbnQ6JywgY3NldGNvbW1lbnQpCisgICAgaWYgcGFyZW50OgorICAgICAgICBwcmludCgncGFyZW50OicsIHBhcmVudCkKKyAgICBpZiBtcGFyZW50OgorICAgICAgICBwcmludCgnbXBhcmVudDonLCBtcGFyZW50KQorICAgIGlmIHRhZzoKKyAgICAgICAgcHJpbnQoJ3RhZzonLCB0YWcpCisgICAgcHJpbnQoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJykKKworICAgICMgY2hlY2tvdXQgdGhlIHBhcmVudCBpZiBuZWNlc3NhcnkKKyAgICBpZiBjc2V0ICE9IDA6CisgICAgICAgIGlmIGhnYnJhbmNoW3N0cihjc2V0KV0gPT0gImJyYW5jaC0iICsgc3RyKGNzZXQpOgorICAgICAgICAgICAgcHJpbnQoJ2NyZWF0aW5nIG5ldyBicmFuY2gnLCBoZ2JyYW5jaFtzdHIoY3NldCldKQorICAgICAgICAgICAgb3Muc3lzdGVtKCdnaXQgY2hlY2tvdXQgLWIgJXMgJXMnICUgKGhnYnJhbmNoW3N0cihjc2V0KV0sIGhndmVyc1twYXJlbnRdKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCdjaGVja2luZyBvdXQgYnJhbmNoJywgaGdicmFuY2hbc3RyKGNzZXQpXSkKKyAgICAgICAgICAgIG9zLnN5c3RlbSgnZ2l0IGNoZWNrb3V0ICVzJyAlIGhnYnJhbmNoW3N0cihjc2V0KV0pCisKKyAgICAjIG1lcmdlCisgICAgaWYgbXBhcmVudDoKKyAgICAgICAgaWYgaGdicmFuY2hbcGFyZW50XSA9PSBoZ2JyYW5jaFtzdHIoY3NldCldOgorICAgICAgICAgICAgb3RoZXJicmFuY2ggPSBoZ2JyYW5jaFttcGFyZW50XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3RoZXJicmFuY2ggPSBoZ2JyYW5jaFtwYXJlbnRdCisgICAgICAgIHByaW50KCdtZXJnaW5nJywgb3RoZXJicmFuY2gsICdpbnRvJywgaGdicmFuY2hbc3RyKGNzZXQpXSkKKyAgICAgICAgb3Muc3lzdGVtKGdldGdpdGVudih1c2VyLCBkYXRlKSArICdnaXQgbWVyZ2UgLS1uby1jb21taXQgLXMgb3VycyAiIiAlcyAlcycgJSAoaGdicmFuY2hbc3RyKGNzZXQpXSwgb3RoZXJicmFuY2gpKQorCisgICAgIyByZW1vdmUgZXZlcnl0aGluZyBleGNlcHQgLmdpdCBhbmQgLmhnIGRpcmVjdG9yaWVzCisgICAgb3Muc3lzdGVtKCdmaW5kIC4gXCggLXBhdGggIi4vLmhnIiAtbyAtcGF0aCAiLi8uZ2l0IiBcKSAtcHJ1bmUgLW8gISAtbmFtZSAiLiIgLXByaW50IHwgeGFyZ3Mgcm0gLXJmJykKKworICAgICMgcmVwb3B1bGF0ZSB3aXRoIGNoZWNrb3V0ZWQgZmlsZXMKKyAgICBvcy5zeXN0ZW0oJ2hnIHVwZGF0ZSAtQyAlZCcgJSBjc2V0KQorCisgICAgIyBhZGQgbmV3IGZpbGVzCisgICAgb3Muc3lzdGVtKCdnaXQgbHMtZmlsZXMgLXggLmhnIC0tb3RoZXJzIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXN0ZGluJykKKyAgICAjIGRlbGV0ZSByZW1vdmVkIGZpbGVzCisgICAgb3Muc3lzdGVtKCdnaXQgbHMtZmlsZXMgLXggLmhnIC0tZGVsZXRlZCB8IGdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS1zdGRpbicpCisKKyAgICAjIGNvbW1pdAorICAgIG9zLnN5c3RlbShnZXRnaXRlbnYodXNlciwgZGF0ZSkgKyAnZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAtYSAtRiAlcycgJSBmaWxlY29tbWVudCkKKyAgICBvcy51bmxpbmsoZmlsZWNvbW1lbnQpCisKKyAgICAjIHRhZworICAgIGlmIHRhZyBhbmQgdGFnICE9ICd0aXAnOgorICAgICAgICBvcy5zeXN0ZW0oZ2V0Z2l0ZW52KHVzZXIsIGRhdGUpICsgJ2dpdCB0YWcgJXMnICUgdGFnKQorCisgICAgIyBkZWxldGUgYnJhbmNoIGlmIG5vdCB1c2VkIGFueW1vcmUuLi4KKyAgICBpZiBtcGFyZW50IGFuZCBsZW4oaGdjaGlsZHJlbltzdHIoY3NldCldKToKKyAgICAgICAgcHJpbnQoIkRlbGV0aW5nIHVudXNlZCBicmFuY2g6Iiwgb3RoZXJicmFuY2gpCisgICAgICAgIG9zLnN5c3RlbSgnZ2l0IGJyYW5jaCAtZCAlcycgJSBvdGhlcmJyYW5jaCkKKworICAgICMgcmV0cmlldmUgYW5kIHJlY29yZCB0aGUgdmVyc2lvbgorICAgIHZ2diA9IG9zLnBvcGVuKCdnaXQgc2hvdyAtLXF1aWV0IC0tcHJldHR5PWZvcm1hdDolSCcpLnJlYWQoKQorICAgIHByaW50KCdyZWNvcmQnLCBjc2V0LCAnLT4nLCB2dnYpCisgICAgaGd2ZXJzW3N0cihjc2V0KV0gPSB2dnYKKworaWYgaGduZXdjc2V0cyA+PSBvcHRfbnJlcGFjayBhbmQgb3B0X25yZXBhY2sgIT0gLTE6CisgICAgb3Muc3lzdGVtKCdnaXQgcmVwYWNrIC1hIC1kJykKKworIyB3cml0ZSB0aGUgc3RhdGUgZm9yIGluY3JlbWVudGFscworaWYgc3RhdGU6CisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQoJ1dyaXRpbmcgc3RhdGUnKQorICAgIGYgPSBvcGVuKHN0YXRlLCAndycpCisgICAgcGlja2xlLmR1bXAoaGd2ZXJzLCBmKQorCisjIHZpbTogZXQgdHM9OCBzdz00IHN0cz00CmRpZmYgLS1naXQgYS9jb250cmliL2hnLXRvLWdpdC9oZy10by1naXQudHh0IGIvY29udHJpYi9oZy10by1naXQvaGctdG8tZ2l0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWY4ZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9oZy10by1naXQvaGctdG8tZ2l0LnR4dApAQCAtMCwwICsxLDIxIEBACitoZy10by1naXQucHkgaXMgYWJsZSB0byBjb252ZXJ0IGEgTWVyY3VyaWFsIHJlcG9zaXRvcnkgaW50byBhIGdpdCBvbmUsCithbmQgcHJlc2VydmVzIHRoZSBicmFuY2hlcyBpbiB0aGUgcHJvY2VzcyAodW5saWtlIHRhaWxvcikKKworaGctdG8tZ2l0LnB5IGNhbiBwcm9iYWJseSBiZSBncmVhdGx5IGltcHJvdmVkIChpdCdzIGEgcmF0aGVyIGNydWRlCitjb21iaW5hdGlvbiBvZiBzaGVsbCBhbmQgcHl0aG9uKSBidXQgaXQgZG9lcyBhbHJlYWR5IHdvcmsgcXVpdGUgd2VsbCBmb3IKK21lLiBGZWF0dXJlczoKKwktIHN1cHBvcnRzIGluY3JlbWVudGFsIGNvbnZlcnNpb24KKwkgIChmb3Iga2VlcGluZyBhIGdpdCByZXBvIGluIHN5bmMgd2l0aCBhIGhnIG9uZSkKKyAgICAgICAgLSBzdXBwb3J0cyBoZyBicmFuY2hlcworICAgICAgICAtIGNvbnZlcnRzIGhnIHRhZ3MKKworTm90ZSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSB3aWxsIGJlIGNyZWF0ZWQgJ2luIHBsYWNlJyAoYXQgdGhlIHNhbWUKK2xvY2F0aW9uIGFzIHRoZSBzb3VyY2UgaGcgcmVwbykuIFlvdSB3aWxsIGhhdmUgdG8gbWFudWFsbHkgcmVtb3ZlIHRoZQorJy5oZycgZGlyZWN0b3J5IGFmdGVyIHRoZSBjb252ZXJzaW9uLgorCitBbHNvIG5vdGUgdGhhdCB0aGUgaW5jcmVtZW50YWwgY29udmVyc2lvbiB1c2VzICdzaW1wbGUnIGhnIGNoYW5nZXNldHMKK2lkZW50aWZpZXJzIChvcmRpbmFscywgYXMgb3Bwb3NlZCB0byBTSEEtMSBpZHMpLCBhbmQgc2luY2UgdGhlc2UgaWRzCithcmUgbm90IHN0YWJsZSBhY3Jvc3MgZGlmZmVyZW50IHJlcG9zaXRvcmllcyB0aGUgaGctdG8tZ2l0LnB5IHN0YXRlIGZpbGUKK2lzIGZvcmV2ZXIgdGllZCB0byBvbmUgaGcgcmVwb3NpdG9yeS4KKworU3RlbGlhbiBQb3AgPHN0ZWxpYW5AcG9waWVzLm5ldD4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL0NIQU5HRVMgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9DSEFOR0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NzkxZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9DSEFOR0VTCkBAIC0wLDAgKzEsMjg1IEBACitSZWxlYXNlIDEuNS4wCis9PT09PT09PT09PT09CisKK0JhY2t3YXJkLWluY29tcGF0aWJsZSBjaGFuZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG5hbWUgb2YgY2xhc3NlcyBmb3IgZW52aXJvbm1lbnQgd2FzIG1pc25hbWVkIGFzIGAqRW52aXJvbmVtZW50YC4KK0l0IGlzIG5vdyBgKkVudmlyb25tZW50YC4KKworTmV3IGZlYXR1cmVzCistLS0tLS0tLS0tLS0KKworKiBBIFRocmVhZC1JbmRleCBoZWFkZXIgaXMgbm93IGFkZGVkIHRvIGVhY2ggZW1haWwgc2VudCAoZXhjZXB0IGZvcgorICBjb21iaW5lZCBlbWFpbHMgd2hlcmUgaXQgd291bGQgbm90IG1ha2Ugc2Vuc2UpLCBzbyB0aGF0IE1TIE91dGxvb2sKKyAgcHJvcGVybHkgZ3JvdXBzIG1lc3NhZ2VzIGJ5IHRocmVhZHMgZXZlbiB0aG91Z2ggdGhleSBoYXZlIGEKKyAgZGlmZmVyZW50IHN1YmplY3QgbGluZS4gVW5mb3J0dW5hdGVseSwgZXZlbiBhZGRpbmcgdGhpcyBoZWFkZXIgdGhlCisgIHRocmVhZGluZyBzdGlsbCBzZWVtcyB0byBiZSB1bnJlbGlhYmxlLCBidXQgaXQgaXMgdW5jbGVhciB3aGV0aGVyCisgIHRoaXMgaXMgYW4gaXNzdWUgb24gb3VyIHNpZGUgb3Igb24gTVMgT3V0bG9vaydzIHNpZGUgKHNlZSBkaXNjdXNzaW9uCisgIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9naXQtbXVsdGltYWlsL2dpdC1tdWx0aW1haWwvcHVsbC8xOTQpLgorCisqIEEgbmV3IHZhcmlhYmxlIG11bHRpbWFpbGhvb2suRXhjbHVkZU1lcmdlUmV2aXNpb25zIHdhcyBhZGRlZCB0byBzZW5kCisgIG5vdGlmaWNhdGlvbiBlbWFpbHMgb25seSBmb3Igbm9uLW1lcmdlIGNvbW1pdHMuCisKKyogRm9yIGdpdG9saXRlIGVudmlyb25tZW50LCBpdCBpcyBub3cgcG9zc2libGUgdG8gc3BlY2lmeSB0aGUgbWFpbCBtYXAKKyAgaW4gYSBzZXBhcmF0ZSBmaWxlIGluIGFkZGl0aW9uIHRvIGdpdG9saXRlLmNvbmYsIHVzaW5nIHRoZSB2YXJpYWJsZQorICBtdWx0aW1haWxob29rLk1haWxhZGRyZXNzTWFwLgorCitJbnRlcm5hbCBjaGFuZ2VzCistLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIHRlc3RzdWl0ZSBub3cgdXNlcyBHSVRfUFJJTlRfU0hBMV9FTExJUFNJUyB3aGVyZSBuZWVkZWQgZm9yCisgIGNvbXBhdGliaWxpdHkgd2l0aCByZWNlbnQgR2l0IHZlcnNpb25zLiBPbmx5IHRlc3RzIGFyZSBhZmZlY3RlZC4KKworKiBXZSBkb24ndCB0cnkgdG8gaW5zdGFsbCBweWZsYWtlcyBpbiB0aGUgY29udGludW91cyBpbnRlZ3JhdGlvbiBqb2IKKyAgZm9yIG9sZCBQeXRob24gdmVyc2lvbnMgd2hlcmUgaXQncyBubyBsb25nZXIgYXZhaWxhYmxlLgorCisqIFN0b3AgdXNpbmcgdGhlIGRlcHJlY2F0ZWQgY2dpLmVzY2FwZSBpbiBQeXRob24gMy4KKworKiBOZXcgZmxha2U4IHdhcm5pbmdzIGhhdmUgYmVlbiBmaXhlZC4KKworKiBQeXRob24gMy42IGlzIG5vdyB0ZXN0ZWQgYWdhaW5zdCBvbiBUcmF2aXMtQ0kuCisKKyogQSBidW5jaCBvZiBsZ3RtLmNvbSB3YXJuaW5ncyBoYXZlIGJlZW4gZml4ZWQuCisKK0J1ZyBmaXhlcworLS0tLS0tLS0tCisKKyogU01UUE1haWxlciBsb2dzIGluIG9ubHkgb25jZSBub3cuIEl0IHVzZWQgdG8gcmUtbG9naW4gZm9yIGVhY2ggZW1haWwKKyAgc2VudCB3aGljaCB0cmlnZ2VyZWQgZXJyb3JzIGZvciBzb21lIFNNVFAgc2VydmVycy4KKworKiBtaWdyYXRlLW1haWxob29rLWNvbmZpZyB3YXMgYnJva2VuIGJ5IGludGVybmFsIHJlZmFjdG9yaW5nLCBpdAorICBzaG91bGQgbm93IHdvcmsgYWdhaW4uCisKK1RoaXMgdmVyc2lvbiB3YXMgdGVzdGVkIHdpdGggUHl0aG9uIDIuNiB0byAzLjcuIEl0IHdhcyB0ZXN0ZWQgd2l0aCBHaXQKKzEuNy4xMC40MDYuZ2RjODAxLCAyLjE1LjEgYW5kIDIuMjAuMS45OC5nZWNiZGFmMC4KKworUmVsZWFzZSAxLjQuMAorPT09PT09PT09PT09PQorCitOZXcgZmVhdHVyZXMgdG8gdHJvdWJsZXNob290IGEgZ2l0LW11bHRpbWFpbCBpbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIE9uZSBjYW4gbm93IHBlcmZvcm0gYSBiYXNpYyBjaGVjayBvZiBnaXQtbXVsdGltYWlsJ3Mgc2V0dXAgYnkKKyAgcnVubmluZyB0aGUgaG9vayB3aXRoIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICBHSVRfTVVMVElNQUlMX0NIRUNLX1NFVFVQIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcuIFNlZQorICBkb2MvdHJvdWJsZXNob290aW5nLnJzdCBmb3IgZGV0YWlscy4KKworKiBBIG5ldyBsb2cgZmlsZXMgc3lzdGVtIHdhcyBhZGRlZC4gU2VlIHRoZSBtdWx0aW1haWxob29rLmxvZ0ZpbGUsCisgIG11bHRpbWFpbGhvb2suZXJyb3JMb2dGaWxlIGFuZCBtdWx0aW1haWxob29rLmRlYnVnTG9nRmlsZSB2YXJpYWJsZXMuCisKKyogZ2l0X211bHRpbWFpbC5weSBjYW4gbm93IGJlIG1hZGUgbW9yZSB2ZXJib3NlIHVzaW5nCisgIG11bHRpbWFpbGhvb2sudmVyYm9zZS4KKworKiBBIG5ldyBvcHRpb24gLS1jaGVjay1yZWYtZmlsdGVyIGlzIG5vdyBhdmFpbGFibGUgdG8gaGVscCBkZWJ1Z2dpbmcKKyAgdGhlIHJlZkZpbHRlciogb3B0aW9ucy4KKworRm9ybWF0dGluZyBlbWFpbHMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogRm9ybWF0dGluZyBvZiBlbWFpbHMgd2FzIG1hZGUgc2xpZ2h0bHkgbW9yZSBjb21wYWN0LCB0byByZWR1Y2UgdGhlCisgIG9kZHMgb2YgaGF2aW5nIGxvbmcgc3ViamVjdCBsaW5lcyB0cnVuY2F0ZWQgb3Igd3JhcHBlZCBpbiBzaG9ydCBsaXN0CisgIG9mIGNvbW1pdHMuCisKKyogbXVsdGltYWlsaG9vay5lbWFpbFByZWZpeCBtYXkgbm93IHVzZSB0aGUgJyUocmVwb19zaG9ydG5hbWUpcycKKyAgcGxhY2Vob2xkZXIgZm9yIHRoZSByZXBvc2l0b3J5J3Mgc2hvcnQgbmFtZS4KKworKiBBIG5ldyBvcHRpb24gbXVsdGltYWlsaG9vay5zdWJqZWN0TWF4TGVuZ3RoIGlzIGF2YWlsYWJsZSB0byB0cnVuY2F0ZQorICBvdmVybHkgbG9uZyBzdWJqZWN0IGxpbmVzLgorCitCdWcgZml4ZXMgYW5kIG1pbm9yIGNoYW5nZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIE9wdGlvbnMgcmVmRmlsdGVyRG9TZW5kUmVnZXggYW5kIHJlZkZpbHRlckRvbnRTZW5kUmVnZXggd2VyZQorICBlc3NlbnRpYWxseSBicm9rZW4uIFRoZXkgc2hvdWxkIHdvcmsgbm93LgorCisqIFRoZSBiZWhhdmlvciB3aGVuIGJvdGggcmVmRmlsdGVye0RvLERvbnR9U2VuZFJlZ2V4IGFuZAorICByZWZGaWx0ZXJ7RXhjbHVzaW9uLEluY2x1c2lvbn1SZWdleCBhcmUgc2V0IGhhdmUgYmVlbiBzbGlnaHRseQorICBjaGFuZ2VkLiBFeGNsdXNpb24vSW5jbHVzaW9uIGlzIG5vdyBzdHJpY3RseSBzdHJvbmdlciB0aGFuCisgIERvU2VuZC9Eb250U2VuZC4KKworKiBUaGUgbWFuYWdlbWVudCBvZiBwcmVjZWRlbmNlIHdoZW4gYSBzZXR0aW5nIGNhbiBiZSBjb21wdXRlZCBpbgorICBtdWx0aXBsZSB3YXlzIGhhcyBiZWVuIGNvbnNpZGVyYWJseSByZWZhY3RvcmVkIGFuZCBtb2RpZmllZC4KKyAgbXVsdGltYWlsaG9vay5mcm9tIGFuZCBtdWx0aW1haWxob29rLnJlcG9uYW1lIG5vdyBoYXZlIHByZWNlZGVuY2UKKyAgb3ZlciB0aGUgZW52aXJvbm1lbnQtc3BlY2lmaWMgc2V0dGluZ3MgKCRHTF9SRVBPLyRHTF9VU0VSIGZvcgorICBnaXRvbGl0ZSwgLS1zdGFzaC11c2VyL3JlcG8gZm9yIFN0YXNoLCAtLXN1Ym1pdHRlci8tLXByb2plY3QgZm9yCisgIEdlcnJpdCkuCisKKyogVGhlIGNvdmVyYWdlIG9mIHRoZSB0ZXN0c3VpdGUgaGFzIGJlZW4gY29uc2lkZXJhYmx5IGltcHJvdmVkLiBBbGwKKyAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgbm93IGFwcGVhciBhdCBsZWFzdCBvbmNlIGluIHRoZSB0ZXN0c3VpdGUuCisKK1RoaXMgdmVyc2lvbiB3YXMgdGVzdGVkIHdpdGggUHl0aG9uIDIuNiB0byAzLjUuIEl0IGFsc28gbW9zdGx5IHdvcmtzCit3aXRoIFB5dGhvbiAyLjQsIGJ1dCB0aGVyZSBpcyBvbmUga25vd24gYnJlYWthZ2UgaW4gdGhlIHRlc3RzdWl0ZQorcmVsYXRlZCB0byBub24tYXNjaWkgY2hhcmFjdGVycy4gSXQgd2FzIHRlc3RlZCB3aXRoIEdpdAorMS43LjEwLjQwNi5nZGM4MDEsIDEuOC41LjYsIDIuMS40LCBhbmQgMi4xMC4wLnJjMC4xLmcwN2M5MjkyLgorCitSZWxlYXNlIDEuMy4xIChidWdmaXgtb25seSByZWxlYXNlKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBHZW5lcmF0ZSBsaW5rcyB0byBjb21taXRzIGluIGNvbWJpbmVkIGVtYWlscyAoaXQgd2FzIGRvbmUgb25seSBmb3IKKyAgY29tbWl0IGVtYWlscyBpbiAxLjMuMCkuCisKKyogRml4IGJyb2tlbiBsaW5rcyBvbiBQeVBpLgorCitSZWxlYXNlIDEuMy4wCis9PT09PT09PT09PT09CisKKyogTmV3IG9wdGlvbnMgbXVsdGltYWlsaG9vay5odG1sSW5JbnRybyBhbmQgbXVsdGltYWlsaG9vay5odG1sSW5Gb290ZXIKKyAgbm93IGFsbG93IHVzaW5nIEhUTUwgaW4gdGhlIGludHJvZHVjdGlvbiBhbmQgZm9vdGVyIG9mIGVtYWlscyAoZS5nLgorICBmb3IgYSBtb3JlIHBsZWFzYW50IGZvcm1hdHRpbmcgb3IgdG8gaW5zZXJ0IGEgbGluayB0byB0aGUgY29tbWl0IG9uCisgIGEgd2ViIGludGVyZmFjZSkuCisKKyogQSBuZXcgb3B0aW9uIG11bHRpbWFpbGhvb2suY29tbWl0QnJvd3NlVVJMIGdpdmVzIGEgc2ltcGxlciAoYW5kIGxlc3MKKyAgZmxleGlibGUpIHdheSB0byBhZGQgYSBsaW5rIHRvIGEgd2ViIGludGVyZmFjZSBmb3IgY29tbWl0IGVtYWlscworICB0aGFuIG11bHRpbWFpbGhvb2suaHRtbEluSW50cm8gYW5kIG11bHRpbWFpbGhvb2suaHRtbEluRm9vdGVyLgorCisqIEEgbmV3IHB1YmxpYyBmdW5jdGlvbiBjb25maWcuYWRkX2NvbmZpZ19wYXJhbWV0ZXJzIHdhcyBhZGRlZCB0bworICBhbGxvdyBjdXN0b20gaG9va3MgdG8gc2V0IHNwZWNpZmljIEdpdCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworICB3aXRob3V0IG1vZGlmeWluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4gU2VlIGFuIGV4YW1wbGUgaW4KKyAgcG9zdC1yZWNlaXZlLmV4YW1wbGUuCisKKyogRXJyb3IgaGFuZGxpbmcgZm9yIFNNVFAgaGFzIGJlZW4gaW1wcm92ZWQgKHdlIHVzZWQgdG8gcHJpbnQgUHl0aG9uCisgIGJhY2t0cmFjZXMgZm9yIGxlZ2l0aW1hdGUgZXJyb3JzKS4KKworKiBUaGUgU01UUCBtYWlsZXIgY2FuIG5vdyBjaGVjayBUTFMgY2VydGlmaWNhdGVzIHdoZW4gdGhlIG5ld2x5IGFkZGVkCisgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbXVsdGltYWlsaG9vay5zbXRwQ0FDZXJ0cy4KKworKiBQeXRob24gMyBwb3J0YWJpbGl0eSBoYXMgYmVlbiBpbXByb3ZlZC4KKworKiBUaGUgZG9jdW1lbnRhdGlvbidzIGZvcm1hdHRpbmcgaGFzIGJlZW4gaW1wcm92ZWQuCisKKyogVGhlIHRlc3RzdWl0ZSBoYXMgYmVlbiBpbXByb3ZlZCAod2Ugbm93IHVzZSBweWZsYWtlcyB0byBjaGVjayBmb3IKKyAgZXJyb3JzIGluIHRoZSBjb2RlKS4KKworVGhpcyB2ZXJzaW9uIGhhcyBiZWVuIHRlc3RlZCB3aXRoIFB5dGhvbiAyLjQgYW5kIDIuNiB0byAzLjUsIGFuZCBHaXQKK3YxLjcuMTAtNDA2LWdkYzgwMWU3LCAyLjEuNCBhbmQgMi44LjEuMzM5LmczYWQxNWZkLgorCitObyBjaGFuZ2Ugc2luY2UgMS4zIFJDMS4KKworUmVsZWFzZSAxLjIuMAorPT09PT09PT09PT09PQorCisqIEl0IGlzIG5vdyBwb3NzaWJsZSB0byBleGNsdWRlIHNvbWUgcmVmcyAoZS5nLiBleGNsdWRlIHNvbWUgYnJhbmNoZXMKKyAgb3IgdGFncykuIFNlZSByZWZGaWx0ZXJEb1NlbmRSZWdleCwgcmVmRmlsdGVyRG9udFNlbmRSZWdleCwKKyAgcmVmRmlsdGVySW5jbHVzaW9uUmVnZXggYW5kIHJlZkZpbHRlckV4Y2x1c2lvblJlZ2V4LgorCisqIE5ldyBjb21taXRFbWFpbEZvcm1hdCBvcHRpb24gd2hpY2ggY2FuIGJlIHNldCB0byAiaHRtbCIgdG8gZ2VuZXJhdGUKKyAgc2ltcGxlIGNvbG9yaXplZCBkaWZmcyB1c2luZyBIVE1MIGZvciB0aGUgY29tbWl0IGVtYWlscy4KKworKiBnaXQtbXVsdGltYWlsIGNhbiBub3cgYmUgcmFuIGFzIGEgR2Vycml0IHJlZi11cGRhdGVkIGhvb2ssIG9yIGZyb20KKyAgQXRsYXNzaWFuIEJpdEJ1Y2tldCBTZXJ2ZXIgKGZvcm1lcmx5IGtub3duIGFzIEF0bGFzc2lhbiBTdGFzaCkuCisKKyogVGhlIEZyb206IGZpZWxkIGlzIG5vdyBtb3JlIGN1c3RvbWl6ZWFibGUuIEl0IGNhbiBiZSBzZXQKKyAgaW5kZXBlbmRlbnRseSBmb3IgcmVmY2hhbmdlIGVtYWlscyBhbmQgY29tbWl0IGVtYWlscyAoc2VlCisgIGZyb21Db21taXQsIGZyb21SZWZDaGFuZ2UpLiBUaGUgc3BlY2lhbCB2YWx1ZXMgcHVzaGVyIGFuZCBhdXRob3IgY2FuCisgIGJlIHVzZWQgaW4gdGhlc2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworKiBBIG5ldyBjb21tYW5kLWxpbmUgb3B0aW9uLCAtLXZlcnNpb24sIHdhcyBhZGRlZC4gVGhlIHZlcnNpb24gaXMgYWxzbworICBhdmFpbGFibGUgaW4gdGhlIFgtR2l0LU11bHRpbWFpbC1WZXJzaW9uIGhlYWRlciBvZiBzZW50IGVtYWlscy4KKworKiBTZXQgWC1HaXQtTm90aWZpY2F0aW9uVHlwZSBoZWFkZXIgdG8gZGlmZmVyZW50aWF0ZSB0aGUgdmFyaW91cyB0eXBlcworICBvZiBub3RpZmljYXRpb25zLiBDdXJyZW50IHZhbHVlcyBhcmU6IGRpZmYsIHJlZl9jaGFuZ2VkX3BsdXNfZGlmZiwKKyAgcmVmX2NoYW5nZWQuCisKKyogUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgUHl0aG9uIDMuIFRoZSB0ZXN0c3VpdGUgcGFzc2VzIHdpdGggUHl0aG9uIDMsCisgIGJ1dCBpdCBoYXMgbm90IHJlY2VpdmVkIGFzIG11Y2ggdGVzdGluZyBhcyB0aGUgUHl0aG9uIDIgdmVyc2lvbiB5ZXQuCisKKyogU2V2ZXJhbCBlbmNvZGluZy1yZWxhdGVkIGZpeGVzLiBVVEYtOCBjaGFyYWN0ZXJzIHdvcmsgaW4gbW9yZQorICBzaXR1YXRpb25zIChidXQgbm9uLWFzY2lpIGNoYXJhY3RlcnMgaW4gZW1haWwgYWRkcmVzcyBhcmUgc3RpbGwgbm90CisgIHN1cHBvcnRlZCkuCisKKyogVGhlIHRlc3RzdWl0ZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gZ3JlYXRseSBpbXByb3ZlZC4KKworUGx1cyBhbGwgdGhlIGJ1Z2ZpeGVzIGZyb20gdmVyc2lvbiAxLjEuMS4KKworVGhpcyB2ZXJzaW9uIGhhcyBiZWVuIHRlc3RlZCB3aXRoIFB5dGhvbiAyLjQgYW5kIDIuNiB0byAzLjUsIGFuZCBHaXQKK3YxLjcuMTAtNDA2LWdkYzgwMWU3LCBnaXQtMS44LjIuMyBhbmQgMi42LjAuIEdpdCB2ZXJzaW9ucyBwcmlvciB0bwordjEuNy4xMC00MDYtZ2RjODAxZTcgcHJvYmFibHkgd29yaywgYnV0IGNhbm5vdCBydW4gdGhlIHRlc3RzdWl0ZQorcHJvcGVybHkuCisKK1JlbGVhc2UgMS4xLjEgKGJ1Z2ZpeC1vbmx5IHJlbGVhc2UpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIFRoZSBTTVRQIG1haWxlciB3YXMgbm90IHdvcmtpbmcgd2l0aCBQeXRob24gMi40LgorCitSZWxlYXNlIDEuMS4wCis9PT09PT09PT09PT09CisKKyogV2hlbiBhIHNpbmdsZSBjb21taXQgaXMgcHVzaGVkLCBvbWl0IHRoZSByZWZlcmVuY2UgY2hhbmdlZCBlbWFpbC4KKyAgU2V0IG11bHRpbWFpbGhvb2suY29tYmluZVdoZW5TaW5nbGVDb21taXQgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGlzCisgIG5ldyBmZWF0dXJlLgorCisqIEluIGdpdG9saXRlIGVudmlyb25tZW50cywgdGhlIHB1c2hlcidzIGVtYWlsIGFkZHJlc3MgY2FuIGJlIHVzZWQgYXMKKyAgdGhlIEZyb20gYWRkcmVzcyBieSBjcmVhdGluZyBhIHNwZWNpYWxseSBmb3JtYXR0ZWQgY29tbWVudCBibG9jayBpbgorICBnaXRvbGl0ZS5jb25mIChzZWUgbXVsdGltYWlsaG9vay5mcm9tIGluIFJFQURNRSkuCisKKyogU3VwcG9ydCBmb3IgU01UUCBhdXRoZW50aWNhdGlvbiBhbmQgU1NML1RMUyBlbmNyeXB0aW9uIHdhcyBhZGRlZCwKKyAgc2VlIHNtdHBVc2VyLCBzbXRwUGFzcywgc210cEVuY3J5cHRpb24gaW4gUkVBRE1FLgorCisqIEEgbmV3IG9wdGlvbiBzY2FuQ29tbWl0Rm9yQ2Mgd2FzIGFkZGVkIHRvIGFsbG93IGdpdC1tdWx0aW1haWwgdG8KKyAgc2VhcmNoIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgJ0NjOiAuLi4nIGxpbmVzLCBhbmQgYWRkIHRoZQorICBjb3JyZXNwb25kaW5nIGVtYWlscyBpbiBDYy4KKworKiBJZiAkVVNFUiBpcyBub3Qgc2V0LCB1c2UgdGhlIHZhcmlhYmxlICRVU0VSTkFNRS4gVGhpcyBpcyBuZWVkZWQgb24KKyAgV2luZG93cyBwbGF0Zm9ybSB0byByZWNvZ25pemUgdGhlIHB1c2hlci4KKworKiBUaGUgZW1haWxQcmVmaXggdmFyaWFibGUgY2FuIG5vdyBiZSBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIHJlbW92ZQorICB0aGUgcHJlZml4LgorCisqIEEgc2hvcnQgdHV0b3JpYWwgd2FzIGFkZGVkIGluIGRvYy9naXRvbGl0ZS5yc3QgdG8gc2V0IHVwCisgIGdpdC1tdWx0aW1haWwgd2l0aCBnaXRvbGl0ZS4KKworKiBUaGUgcG9zdC1yZWNlaXZlIGZpbGUgd2FzIHJlbmFtZWQgdG8gcG9zdC1yZWNlaXZlLmV4YW1wbGUuIEl0IGhhcworICBhbHdheXMgYmVlbiBhbiBleGFtcGxlICh0aGUgc3RhbmRhcmQgd2F5IHRvIGNhbGwgZ2l0LW11bHRpbWFpbCBpcyB0bworICBjYWxsIGdpdF9tdWx0aW1haWwucHkpLCBidXQgaXQgd2FzIHVuY2xlYXIgdG8gbWFueSB1c2Vycy4KKworKiBBIG5ldyByZWZjaGFuZ2VTaG93R3JhcGggb3B0aW9uIHdhcyBhZGRlZCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvCisgIGluY2x1ZGUgYm90aCBhIGdyYXBoIGFuZCBhIGxvZyBpbiB0aGUgc3VtbWFyeSBlbWFpbHMuICBUaGUgb3B0aW9ucworICB0byBjb250cm9sIHRoZSBncmFwaCBmb3JtYXR0aW5nIGNhbiBiZSBzZXQgdmlhIHRoZSBuZXcgZ3JhcGhPcHRzCisgIG9wdGlvbi4KKworKiBOZXcgb3B0aW9uIC0tZm9yY2Utc2VuZCB3YXMgYWRkZWQgdG8gZGlzYWJsZSBuZXcgY29tbWl0IGRldGVjdGlvbgorICBmb3IgdXBkYXRlIGhvb2suIE9uZSB1c2UtY2FzZSBpcyB0byBydW4gZ2l0X211bHRpbWFpbC5weSBhZnRlcgorICBydW5uaW5nICJnaXQgZmV0Y2giIHRvIHNlbmQgZW1haWxzIGFib3V0IGNvbW1pdHMgdGhhdCBoYXZlIGp1c3QgYmVlbgorICBmZXRjaGVkICh0aGUgZGV0ZWN0aW9uIG9mIG5ldyBjb21taXRzIHdhcyB1bnJlbGlhYmxlIGluIHRoaXMgbW9kZSkuCisKKyogVGhlIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgd2FzIGNvbnNpZGVyYWJseSBpbXByb3ZlZCAoY29udGludW91cworICBpbnRlZ3JhdGlvbiB3aXRoIHRyYXZpcy1jaSwgYXV0b21hdGljIGNoZWNrIG9mIFBFUDggYW5kIFJTVCBzeW50YXgsCisgIG1hbnkgaW1wcm92ZW1lbnRzIHRvIHRoZSB0ZXN0IHNjcmlwdHMpLgorCitUaGlzIHZlcnNpb24gaGFzIGJlZW4gdGVzdGVkIHdpdGggUHl0aG9uIDIuNCB0byAyLjcsIGFuZCBHaXQgMS43LjEgdG8KKzIuNC4KKworUmVsZWFzZSAxLjAuMAorPT09PT09PT09PT09PQorCisqIEZpeCBlbmNvZGluZyBvZiBub24tQVNDSUkgZW1haWwgYWRkcmVzc2VzIGluIGVtYWlsIGhlYWRlcnMuCisKKyogRml4IGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGJ1Z3MgZm9yIG9sZGVyIFB5dGhvbiAyLnggdmVyc2lvbnMuCisKKyogRml4IGEgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgYnVnIGZvciBHaXQgMS43LjEuCisKKyogQWRkIGFuIG9wdGlvbiBjb21taXREaWZmT3B0cyB0byBjdXN0b21pemUgbG9ncyBmb3IgcmV2aXNpb25zLgorCisqIFBhc3MgIi1vaSIgdG8gc2VuZG1haWwgYnkgZGVmYXVsdCB0byBwcmV2ZW50IHByZW1hdHVyZSB0ZXJtaW5hdGlvbgorICBvbiBhIGxpbmUgY29udGFpbmluZyBvbmx5ICIuIi4KKworKiBTdGFnZ2VyIGVtYWlsICJEYXRlOiIgdmFsdWVzIGluIGFuIGF0dGVtcHQgdG8gaGVscCBtYWlsIGNsaWVudHMKKyAgdGhyZWFkIHRoZSBlbWFpbHMgaW4gdGhlIHJpZ2h0IG9yZGVyLgorCisqIElmIGEgbWFpbGluZyBsaXN0IHNldHRpbmcgaXMgbWlzc2luZywganVzdCBza2lwIHNlbmRpbmcgdGhlCisgIGNvcnJlc3BvbmRpbmcgZW1haWwgKHdpdGggYSB3YXJuaW5nKSBpbnN0ZWFkIG9mIGZhaWxpbmcuCisKKyogQWRkIGEgWC1HaXQtSG9zdCBoZWFkZXIgdGhhdCBjYW4gYmUgdXNlZCBmb3IgZW1haWwgZmlsdGVyaW5nLgorCisqIEFsbG93IHRoZSBzZW5kZXIncyBmdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgdG8gYmUgY29uZmlndXJlZC4KKworKiBNaW5vciBkb2N1bWVudGF0aW9uIGltcHJvdmVtZW50cy4KKworKiBBZGQgdGhpcyBDSEFOR0VTIGZpbGUuCisKKworUmVsZWFzZSAwLjkuMAorPT09PT09PT09PT09PQorCisqIEluaXRpYWwgcmVsZWFzZS4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL0NPTlRSSUJVVElORy5yc3QgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9DT05UUklCVVRJTkcucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMjBhNTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9DT05UUklCVVRJTkcucnN0CkBAIC0wLDAgKzEsNjAgQEAKK0NvbnRyaWJ1dGluZworPT09PT09PT09PT09CisKK2dpdC1tdWx0aW1haWwgaXMgYW4gb3Blbi1zb3VyY2UgcHJvamVjdCwgYnVpbHQgYnkgdm9sdW50ZWVycy4gV2Ugd291bGQKK3dlbGNvbWUgeW91ciBoZWxwIQorCitUaGUgY3VycmVudCBtYWludGFpbmVycyBhcmUgYE1hdHRoaWV1IE1veSA8aHR0cDovL21hdHRoaWV1LW1veS5mcj5gX18gYW5kCitgTWljaGFlbCBIYWdnZXJ0eSA8aHR0cHM6Ly9naXRodWIuY29tL21oYWdnZXI+YF9fLgorCitQbGVhc2Ugbm90ZSB0aGF0IGFsdGhvdWdoIGEgY29weSBvZiBnaXQtbXVsdGltYWlsIGlzIGRpc3RyaWJ1dGVkIGluCit0aGUgImNvbnRyaWIiIHNlY3Rpb24gb2YgdGhlIG1haW4gR2l0IHByb2plY3QsIGRldmVsb3BtZW50IHRha2VzIHBsYWNlCitpbiBhIHNlcGFyYXRlIGBnaXQtbXVsdGltYWlsIHJlcG9zaXRvcnkgb24gR2l0SHViYF8uCisKK1doZW5ldmVyIGVub3VnaCBjaGFuZ2VzIHRvIGdpdC1tdWx0aW1haWwgaGF2ZSBhY2N1bXVsYXRlZCwgYSBuZXcKK2NvZGUtZHJvcCBvZiBnaXQtbXVsdGltYWlsIHdpbGwgYmUgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIEdpdAorcHJvamVjdC4KKworV2UgdXNlIHRoZSBHaXRIdWIgaXNzdWUgdHJhY2tlciB0byBrZWVwIHRyYWNrIG9mIGJ1Z3MgYW5kIGZlYXR1cmUKK3JlcXVlc3RzLCBhbmQgd2UgdXNlIEdpdEh1YiBwdWxsIHJlcXVlc3RzIHRvIGV4Y2hhbmdlIHBhdGNoZXMgKHRob3VnaCwKK2lmIHlvdSBwcmVmZXIsIHlvdSBjYW4gc2VuZCBwYXRjaGVzIHZpYSB0aGUgR2l0IG1haWxpbmcgbGlzdCB3aXRoIENDCit0byB0aGUgbWFpbnRhaW5lcnMpLiBQbGVhc2Ugc2lnbiBvZmYgeW91ciBwYXRjaGVzIGFzIHBlciB0aGUgYEdpdAorcHJvamVjdCBwcmFjdGljZQorPGh0dHBzOi8vZ2l0aHViLmNvbS9naXQvZ2l0L2Jsb2IvbWFzdGVyL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMjTDIzND5gX18uCisKK1BsZWFzZSB2b3RlIGZvciBpc3N1ZXMgeW91IHdvdWxkIGxpa2UgdG8gYmUgYWRkcmVzc2VkIGluIHByaW9yaXR5CisoY2xpY2sgImFkZCB5b3VyIHJlYWN0aW9uIiBhbmQgdGhlbiB0aGUgIisxIiB0aHVtYnMtdXAgYnV0dG9uIG9uIHRoZQorR2l0SHViIGlzc3VlKS4KKworR2VuZXJhbCBkaXNjdXNzaW9uIG9mIGdpdC1tdWx0aW1haWwgY2FuIHRha2UgcGxhY2Ugb24gdGhlIG1haW4gYEdpdAorbWFpbGluZyBsaXN0YF8uCisKK1BsZWFzZSBDQyBlbWFpbHMgcmVnYXJkaW5nIGdpdC1tdWx0aW1haWwgdG8gdGhlIG1haW50YWluZXJzIHNvIHRoYXQgd2UKK2Rvbid0IG92ZXJsb29rIHRoZW0uCisKK0hlbHAgbmVlZGVkOiB0ZXN0ZXJzL21haW50YWluZXIgZm9yIHNwZWNpZmljIGVudmlyb25tZW50cy9PUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjdXJyZW50IG1haW50YWluZXIgdXNlcyBhbmQgdGVzdHMgZ2l0LW11bHRpbWFpbCBvbiBMaW51eCB3aXRoIHRoZQorR2VuZXJpYyBlbnZpcm9ubWVudC4gTW9yZSB0ZXN0ZXJzLCBvciBiZXR0ZXIgY29udHJpYnV0b3JzIGFyZSBuZWVkZWQKK3RvIHRlc3QgZ2l0LW11bHRpbWFpbCBvbiBvdGhlciByZWFsLWxpZmUgc2V0dXBzOgorCisqIE1hYyBPUyBYLCBXaW5kb3dzOiBnaXQtbXVsdGltYWlsIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIG9uIHRoZXNlCisgIHBsYXRmb3Jtcy4gQnV0IHNpbmNlIHdlIGhhdmUgbm8gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGFuZCB0cnkgdG8KKyAgd3JpdGUgY29kZSBhcyBwb3J0YWJsZSBhcyBwb3NzaWJsZSwgaXQgaXMgcG9zc2libGUgdGhhdAorICBnaXQtbXVsdGltYWlsIGFscmVhZHkgcnVucyB0aGVyZSBhbmQgaWYgbm90LCBpdCBpcyBsaWtlbHkgdGhhdCBpdAorICBjb3VsZCBiZSBwb3J0ZWQgZWFzaWx5LgorCisgIFBhdGNoZXMgdG8gaW1wcm92ZSBzdXBwb3J0IGZvciBXaW5kb3dzIGFuZCBPUyBYIGFyZSB3ZWxjb21lLgorICBJZGVhbGx5LCB0aGVyZSB3b3VsZCBiZSBhIHN1Yi1tYWludGFpbmVyIGZvciBlYWNoIE9TIHdobyB3b3VsZCB0ZXN0CisgIGF0IGxlYXN0IG9uY2UgYmVmb3JlIGVhY2ggcmVsZWFzZSAoYXJvdW5kIHR3aWNlIGEgeWVhcikuCisKKyogR2Vycml0LCBTdGFzaCwgR2l0b2xpdGUgZW52aXJvbm1lbnRzOiBhbHRob3VnaCB0aGUgdGVzdHN1aXRlCisgIGNvbnRhaW5zIHRlc3RzIGZvciB0aGVzZSBlbnZpcm9ubWVudHMsIGEgdGVzdGVyL21haW50YWluZXIgZm9yIGVhY2gKKyAgZW52aXJvbm1lbnQgd291bGQgYmUgd2VsY29tZSB0byB0ZXN0IGFuZCByZXBvcnQgZmFpbHVyZSAob3Igc3VjY2VzcykKKyAgb24gcmVhbC1saWZlIGVudmlyb25tZW50cyBwZXJpb2RpY2FsbHkgKGhlcmUgYWxzbywgZmVlZGJhY2sgYmVmb3JlCisgIGVhY2ggcmVsZWFzZSB3b3VsZCBiZSBoaWdobHkgYXBwcmVjaWF0ZWQpLgorCisKKy4uIF9gZ2l0LW11bHRpbWFpbCByZXBvc2l0b3J5IG9uIEdpdEh1YmA6IGh0dHBzOi8vZ2l0aHViLmNvbS9naXQtbXVsdGltYWlsL2dpdC1tdWx0aW1haWwKKy4uIF9gR2l0IG1haWxpbmcgbGlzdGA6IGdpdEB2Z2VyLmtlcm5lbC5vcmcKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL1JFQURNRS5HaXQgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9SRUFETUUuR2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NDQ0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9SRUFETUUuR2l0CkBAIC0wLDAgKzEsMTUgQEAKK1RoaXMgY29weSBvZiBnaXQtbXVsdGltYWlsIGlzIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlICJjb250cmliIgorc2VjdGlvbiBvZiB0aGUgR2l0IHByb2plY3QgYXMgYSBjb252ZW5pZW5jZSB0byBHaXQgdXNlcnMuCitnaXQtbXVsdGltYWlsIGlzIGRldmVsb3BlZCBhcyBhbiBpbmRlcGVuZGVudCBwcm9qZWN0IGF0IHRoZSBmb2xsb3dpbmcKK3dlYnNpdGU6CisKKyAgICBodHRwczovL2dpdGh1Yi5jb20vZ2l0LW11bHRpbWFpbC9naXQtbXVsdGltYWlsCisKK1RoZSB2ZXJzaW9uIGluIHRoaXMgZGlyZWN0b3J5IHdhcyBvYnRhaW5lZCBmcm9tIHRoZSB1cHN0cmVhbSBwcm9qZWN0CitvbiBKYW51YXJ5IDA3IDIwMTkgYW5kIGNvbnNpc3RzIG9mIHRoZSAiZ2l0LW11bHRpbWFpbCIgc3ViZGlyZWN0b3J5IGZyb20KK3JldmlzaW9uCisKKyAgICAwNGU4MGU2YzQwYmU0NjVjYzYyYjZjMjQ2ZjBmY2I4ZmQyY2ZkNDU0IHJlZnMvdGFncy8xLjUuMAorCitQbGVhc2Ugc2VlIHRoZSBSRUFETUUgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93Cit0byByZXBvcnQgYnVncyBvciBjb250cmlidXRlIHRvIGdpdC1tdWx0aW1haWwuCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9SRUFETUUubWlncmF0ZS1mcm9tLXBvc3QtcmVjZWl2ZS1lbWFpbCBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL1JFQURNRS5taWdyYXRlLWZyb20tcG9zdC1yZWNlaXZlLWVtYWlsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNmE5NzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9SRUFETUUubWlncmF0ZS1mcm9tLXBvc3QtcmVjZWl2ZS1lbWFpbApAQCAtMCwwICsxLDE0NSBAQAorZ2l0LW11bHRpbWFpbCBpcyBjbG9zZSB0bywgYnV0IG5vdCBleGFjdGx5LCBhIHBsdWctaW4gcmVwbGFjZW1lbnQgZm9yCit0aGUgb2xkIEdpdCBwcm9qZWN0IHNjcmlwdCBjb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbC4gIFRoaXMKK2RvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGlmZmVyZW5jZXMgYW5kIGV4cGxhaW5zIGhvdyB0byBjb25maWd1cmUKK2dpdC1tdWx0aW1haWwgdG8gZ2V0IGJlaGF2aW9yIGNsb3Nlc3QgdG8gdGhhdCBvZiBwb3N0LXJlY2VpdmUtZW1haWwuCisKK0lmIHlvdSBhcmUgaW4gYSBodXJyeQorPT09PT09PT09PT09PT09PT09PT09CisKK0Egc2NyaXB0IGNhbGxlZCBtaWdyYXRlLW1haWxob29rLWNvbmZpZyBpcyBpbmNsdWRlZCB3aXRoCitnaXQtbXVsdGltYWlsLiAgSWYgeW91IHJ1biB0aGlzIHNjcmlwdCB3aXRoaW4gYSBHaXQgcmVwb3NpdG9yeSB0aGF0IGlzCitjb25maWd1cmVkIHRvIHVzZSBwb3N0LXJlY2VpdmUtZW1haWwsIGl0IHdpbGwgY29udmVydCB0aGUKK2NvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaW50byB0aGUgYXBwcm94aW1hdGUgZXF1aXZhbGVudCBzZXR0aW5ncyBmb3IKK2dpdC1tdWx0aW1haWwuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcnVuCisKKyAgICBtaWdyYXRlLW1haWxob29rLWNvbmZpZyAtLWhlbHAKKworCitDb25maWd1cmF0aW9uIGRpZmZlcmVuY2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogVGhlIG5hbWVzIG9mIHRoZSBjb25maWcgb3B0aW9ucyBmb3IgZ2l0LW11bHRpbWFpbCBhcmUgaW4gbmFtZXNwYWNlCisgICJtdWx0aW1haWxob29rLioiIGluc3RlYWQgb2YgImhvb2tzLioiLiAgKEVkaXRvcmlhbCBjb21tZW50OgorICBwb3N0LXJlY2VpdmUtZW1haWwgc2hvdWxkIG5ldmVyIGhhdmUgdXNlZCBzdWNoIGEgZ2VuZXJpYyB0b3AtbGV2ZWwKKyAgbmFtZXNwYWNlLikKKworKiBJbiBlbWFpbHMgYWJvdXQgbmV3IGFubm90YXRlZCB0YWdzLCBwb3N0LXJlY2VpdmUtZW1haWwgaW5jbHVkZXMgYQorICBzaG9ydGxvZyBvZiBhbGwgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMgYW5ub3RhdGVkIHRhZy4gIFRvIGdldAorICB0aGlzIGJlaGF2aW9yIHdpdGggZ2l0LW11bHRpbWFpbCwgeW91IG5lZWQgdG8gc2V0CisgIG11bHRpbWFpbGhvb2suYW5ub3VuY2VzaG9ydGxvZyB0byB0cnVlOgorCisgICAgICBnaXQgY29uZmlnIG11bHRpbWFpbGhvb2suYW5ub3VuY2VzaG9ydGxvZyB0cnVlCisKKyogbXVsdGltYWlsaG9vay5jb21taXRsaXN0IC0tIFRoaXMgaXMgYSBuZXcgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKyAgUmVjaXBpZW50cyBsaXN0ZWQgaGVyZSB3aWxsIHJlY2VpdmUgYSBzZXBhcmF0ZSBlbWFpbCBmb3IgZWFjaCBuZXcKKyAgY29tbWl0LiAgSG93ZXZlciwgaWYgdGhpcyB2YXJpYWJsZSBpcyAqbm90KiBzZXQsIGl0IGRlZmF1bHRzIHRvIHRoZQorICB2YWx1ZSBvZiBtdWx0aW1haWxob29rLm1haWxpbmdsaXN0LiAgVGhlcmVmb3JlLCBpZiB5b3UgKmRvbid0KiB3YW50CisgIHRoZSBtZW1iZXJzIG9mIG11bHRpbWFpbGhvb2subWFpbGluZ2xpc3QgdG8gcmVjZWl2ZSBvbmUgZW1haWwgcGVyCisgIGNvbW1pdCwgdGhlbiBzZXQgdGhpcyB2YWx1ZSB0byB0aGUgZW1wdHkgc3RyaW5nOgorCisgICAgICBnaXQgY29uZmlnIG11bHRpbWFpbGhvb2suY29tbWl0bGlzdCAnJworCisqIG11bHRpbWFpbGhvb2suZW1haWxwcmVmaXggLS0gSWYgdGhpcyB2YWx1ZSBpcyBub3Qgc2V0LCB0aGVuIHRoZQorICBzdWJqZWN0cyBvZiBnZW5lcmF0ZWQgZW1haWxzIGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBzaG9ydCBuYW1lIG9mIHRoZQorICByZXBvc2l0b3J5IGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0czsgZS5nLiwgIltteXJlcG9dIi4KKyAgcG9zdC1yZWNlaXZlLWVtYWlsIGRlZmF1bHRzIHRvIHByZWZpeCAiW1NDTV0iIGlmIHRoaXMgb3B0aW9uIGlzIG5vdAorICBzZXQuICBTbyBpZiB5b3Ugd2VyZSB1c2luZyB0aGUgb2xkIGRlZmF1bHQgYW5kIHdhbnQgdG8gcmV0YWluIGl0CisgIChmb3IgZXhhbXBsZSwgdG8gYXZvaWQgaGF2aW5nIHRvIGNoYW5nZSB5b3VyIGVtYWlsIGZpbHRlcnMpLCBzZXQKKyAgdGhpcyB2YXJpYWJsZSBleHBsaWNpdGx5IHRvIHRoZSBvbGQgdmFsdWU6CisKKyAgICAgIGdpdCBjb25maWcgbXVsdGltYWlsaG9vay5lbWFpbHByZWZpeCAiW1NDTV0iCisKKyogVGhlICJtdWx0aW1haWxob29rLnNob3dyZXYiIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCisgIEl0cyBtYWluIHVzZSBpcyBvYnNvbGV0ZWQgYnkgdGhlIG9uZS1lbWFpbC1wZXItY29tbWl0IGZlYXR1cmUgb2YKKyAgZ2l0LW11bHRpbWFpbC4KKworCitPdGhlciBkaWZmZXJlbmNlcworPT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBvdGhlciBkaWZmZXJlbmNlcyBpbiB0aGUgYmVoYXZpb3Igb2YKK2dpdC1tdWx0aW1haWwgdnMuIHBvc3QtcmVjZWl2ZS1lbWFpbC4gIEZvciBmdWxsIGRldGFpbHMsIHBsZWFzZSByZWZlcgordG8gdGhlIG1haW4gUkVBRE1FIGZpbGU6CisKKyogT25lIGVtYWlsIHBlciBjb21taXQuICBGb3IgZWFjaCByZWZlcmVuY2UgY2hhbmdlLCB0aGUgc2NyaXB0IGZpcnN0CisgIG91dHB1dHMgb25lIGVtYWlsIHN1bW1hcml6aW5nIHRoZSByZWZlcmVuY2UgY2hhbmdlIChpbmNsdWRpbmcKKyAgb25lLWxpbmUgc3VtbWFyaWVzIG9mIHRoZSBuZXcgY29tbWl0cyksIHRoZW4gaXQgb3V0cHV0cyBhIHNlcGFyYXRlCisgIGVtYWlsIGZvciBlYWNoIG5ldyBjb21taXQgdGhhdCB3YXMgaW50cm9kdWNlZCwgaW5jbHVkaW5nIHBhdGNoZXMuCisgIFRoZXNlIG9uZS1lbWFpbC1wZXItY29tbWl0IGVtYWlscyBnbyB0byB0aGUgYWRkcmVzc2VzIGxpc3RlZCBpbgorICBtdWx0aW1haWxob29rLmNvbW1pdGxpc3QuICBwb3N0LXJlY2VpdmUtZW1haWwgc2VuZHMgb25seSBvbmUgZW1haWwKKyAgZm9yIGVhY2ggKnJlZmVyZW5jZSogdGhhdCBpcyBjaGFuZ2VkLCBubyBtYXR0ZXIgaG93IG1hbnkgY29tbWl0cworICB3ZXJlIGFkZGVkIHRvIHRoZSByZWZlcmVuY2UuCisKKyogQmV0dGVyIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIG5ldyBjb21taXRzLiAgcG9zdC1yZWNlaXZlLWVtYWlsCisgIHByb2Nlc3NlcyBvbmUgcmVmZXJlbmNlIGNoYW5nZSBhdCBhIHRpbWUsIHdoaWNoIGNhdXNlcyBpdCB0byBmYWlsIHRvCisgIGRlc2NyaWJlIG5ldyBjb21taXRzIHRoYXQgd2VyZSBpbmNsdWRlZCBpbiBtdWx0aXBsZSBicmFuY2hlcy4gIEZvcgorICBleGFtcGxlLCBpZiBhIHNpbmdsZSBwdXNoIGFkZHMgdGhlICIqIiBjb21taXRzIGluIHRoZSBkaWFncmFtIGJlbG93LAorICB0aGVuIHBvc3QtcmVjZWl2ZS1lbWFpbCB3b3VsZCBuZXZlciBpbmNsdWRlIHRoZSBkZXRhaWxzIG9mIHRoZSB0d28KKyAgY29tbWl0cyB0aGF0IGFyZSBjb21tb24gdG8gIm1hc3RlciIgYW5kICJicmFuY2giIGluIGl0cworICBub3RpZmljYXRpb25zLgorCisgICAgICBvLS0tby0tLW8tLS0qLS0tKi0tLSogICAgPC0tIG1hc3RlcgorICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAqLS0tKiAgPC0tIGJyYW5jaAorCisgIGdpdC1tdWx0aW1haWwgYW5hbHl6ZXMgYWxsIHJlZmVyZW5jZSBtb2RpZmljYXRpb25zIHRvIGRldGVybWluZQorICB3aGljaCBjb21taXRzIHdlcmUgbm90IHByZXNlbnQgYmVmb3JlIHRoZSBjaGFuZ2UsIHRoZXJlZm9yZSBhdm9pZGluZworICB0aGF0IGVycm9yLgorCisqIEluIHJlZmVyZW5jZSBjaGFuZ2UgZW1haWxzLCBnaXQtbXVsdGltYWlsIHRlbGxzIHdoaWNoIGNvbW1pdHMgaGF2ZQorICBiZWVuIGFkZGVkIHRvIHRoZSByZWZlcmVuY2UgdnMuIGFyZSBlbnRpcmVseSBuZXcgdG8gdGhlIHJlcG9zaXRvcnksCisgIGFuZCB3aGljaCBjb21taXRzIHRoYXQgaGF2ZSBiZWVuIG9taXR0ZWQgZnJvbSB0aGUgcmVmZXJlbmNlCisgIHZzLiBlbnRpcmVseSBkaXNjYXJkZWQgZnJvbSB0aGUgcmVwb3NpdG9yeS4KKworKiBUaGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggR2l0IGlzIHJ1bm5pbmcgY2FuIGJlIGNvbmZpZ3VyZWQgdmlhIGFuCisgICJFbnZpcm9ubWVudCIgYWJzdHJhY3Rpb24uCisKKyogQnVpbHQtaW4gc3VwcG9ydCBmb3IgR2l0b2xpdGUtbWFuYWdlZCByZXBvc2l0b3JpZXMuCisKKyogSW5zdGVhZCBvZiB1c2luZyBmdWxsIFNIQTEgb2JqZWN0IG5hbWVzIGluIGVtYWlscywgZ2l0LW11bHRpbWFpbAorICBtb3N0bHkgdXNlcyBhYmJyZXZpYXRlZCBTSEExcywgcGx1cyBvbmUtbGluZSBsb2cgbWVzc2FnZSBzdW1tYXJpZXMKKyAgd2hlcmUgYXBwcm9wcmlhdGUuCisKKyogSW4gdGhlIHNjaGVtYXRpYyBkaWFncmFtcyB0aGF0IGV4cGxhaW4gbm9uLWZhc3QtZm9yd2FyZCBjb21taXRzLAorICBnaXQtbXVsdGltYWlsIHNob3dzIHRoZSBuYW1lcyBvZiB0aGUgYnJhbmNoZXMgaW52b2x2ZWQuCisKKyogVGhlIGVtYWlscyBnZW5lcmF0ZWQgYnkgZ2l0LW11bHRpbWFpbCBpbmNsdWRlIHRoZSBuYW1lIG9mIHRoZSBHaXQKKyAgcmVwb3NpdG9yeSB0aGF0IHdhcyBtb2RpZmllZDsgdGhpcyBpcyBjb252ZW5pZW50IGZvciByZWNpcGllbnRzIHdobworICBhcmUgbW9uaXRvcmluZyBtdWx0aXBsZSByZXBvc2l0b3JpZXMuCisKKyogZ2l0LW11bHRpbWFpbCBhbGxvd3MgdGhlIGVtYWlsICJGcm9tIiBhZGRyZXNzZXMgdG8gYmUgY29uZmlndXJlZC4KKworKiBUaGUgcmVjaXBpZW50cyBsaXN0cyAobXVsdGltYWlsaG9vay5tYWlsaW5nbGlzdCwKKyAgbXVsdGltYWlsaG9vay5yZWZjaGFuZ2VsaXN0LCBtdWx0aW1haWxob29rLmFubm91bmNlbGlzdCwgYW5kCisgIG11bHRpbWFpbGhvb2suY29tbWl0bGlzdCkgY2FuIGJlIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXMgYW5kL29yCisgIG11bHRpdmFsdWVkIHNldHRpbmdzIGluIHRoZSBjb25maWcgZmlsZTsgZS5nLiwKKworICAgICAgW211bHRpbWFpbGhvb2tdCisgICAgICAgICAgICAgIG1haWxpbmdsaXN0ID0gbXIuYnJvd25AZXhhbXBsZS5jb20sIG1yLmJsYWNrQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgIGFubm91bmNlbGlzdCA9IEhpbSA8aGltQGV4YW1wbGUuY29tPgorICAgICAgICAgICAgICBhbm5vdW5jZWxpc3QgPSBKaW0gPGppbUBleGFtcGxlLmNvbT4KKyAgICAgICAgICAgICAgYW5ub3VuY2VsaXN0ID0gcG9wQGV4YW1wbGUuY29tCisKKyAgVGhpcyBtaWdodCBtYWtlIGl0IGVhc2llciB0byBtYWludGFpbiBzaG9ydCByZWNpcGllbnRzIGxpc3RzIHdpdGhvdXQKKyAgcmVxdWlyaW5nIGZ1bGwtZmxlZGdlZCBtYWlsaW5nIGxpc3Qgc29mdHdhcmUuCisKKyogQnkgZGVmYXVsdCwgZ2l0LW11bHRpbWFpbCBzZXRzIGVtYWlsICJSZXBseS1UbyIgaGVhZGVycyB0byByZXBseSB0bworICB0aGUgcHVzaGVyIChmb3IgcmVmZXJlbmNlIHVwZGF0ZXMpIGFuZCB0byB0aGUgYXV0aG9yIChmb3IgY29tbWl0CisgIG5vdGlmaWNhdGlvbnMpLiAgQnkgZGVmYXVsdCwgdGhlIHB1c2hlcidzIGVtYWlsIGFkZHJlc3MgaXMKKyAgY29uc3RydWN0ZWQgYnkgYXBwZW5kaW5nICJtdWx0aW1haWxob29rLmVtYWlsZG9tYWluIiB0byB0aGUgcHVzaGVyJ3MKKyAgdXNlcm5hbWUuCisKKyogVGhlIGdlbmVyYXRlZCBlbWFpbHMgY29udGFpbiBhIGNvbmZpZ3VyYWJsZSBmb290ZXIuICBCeSBkZWZhdWx0LCBpdAorICBsaXN0cyB0aGUgbmFtZSBvZiB0aGUgYWRtaW5pc3RyYXRvciB3aG8gc2hvdWxkIGJlIGNvbnRhY3RlZCB0bworICB1bnN1YnNjcmliZSBmcm9tIG5vdGlmaWNhdGlvbiBlbWFpbHMuCisKKyogTmV3IG9wdGlvbiBtdWx0aW1haWxob29rLmVtYWlsbWF4bGluZWxlbmd0aCB0byBsaW1pdCB0aGUgbGVuZ3RoIG9mCisgIGxpbmVzIGluIHRoZSBtYWluIHBhcnQgb2YgdGhlIGVtYWlsIGJvZHkuICBUaGUgZGVmYXVsdCBsaW1pdCBpcyA1MDAKKyAgY2hhcmFjdGVycy4KKworKiBOZXcgb3B0aW9uIG11bHRpbWFpbGhvb2suZW1haWxzdHJpY3R1dGY4IHRvIGVuc3VyZSB0aGF0IHRoZSBtYWluCisgIHBhcnQgb2YgdGhlIGVtYWlsIGJvZHkgaXMgdmFsaWQgVVRGLTguICBJbnZhbGlkIGNoYXJhY3RlcnMgYXJlCisgIHR1cm5lZCBpbnRvIHRoZSBVbmljb2RlIHJlcGxhY2VtZW50IGNoYXJhY3RlciwgVStGRkZELiAgQnkgZGVmYXVsdAorICB0aGlzIG9wdGlvbiBpcyB0dXJuZWQgb24uCisKKyogV3JpdHRlbiBpbiBQeXRob24uICBFYXNpZXIgdG8gYWRkIG5ldyBmZWF0dXJlcy4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL1JFQURNRS5yc3QgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9SRUFETUUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMGZjNGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9SRUFETUUucnN0CkBAIC0wLDAgKzEsNzc0IEBACitnaXQtbXVsdGltYWlsIHZlcnNpb24gMS41LjAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBpbWFnZTo6IGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9naXQtbXVsdGltYWlsL2dpdC1tdWx0aW1haWwuc3ZnP2JyYW5jaD1tYXN0ZXIKKyAgICA6dGFyZ2V0OiBodHRwczovL3RyYXZpcy1jaS5vcmcvZ2l0LW11bHRpbWFpbC9naXQtbXVsdGltYWlsCisKK2dpdC1tdWx0aW1haWwgaXMgYSB0b29sIGZvciBzZW5kaW5nIG5vdGlmaWNhdGlvbiBlbWFpbHMgb24gcHVzaGVzIHRvIGEKK0dpdCByZXBvc2l0b3J5LiAgSXQgaW5jbHVkZXMgYSBQeXRob24gbW9kdWxlIGNhbGxlZCBgYGdpdF9tdWx0aW1haWwucHlgYCwKK3doaWNoIGNhbiBlaXRoZXIgYmUgdXNlZCBhcyBhIGhvb2sgc2NyaXB0IGRpcmVjdGx5IG9yIGNhbiBiZSBpbXBvcnRlZAorYXMgYSBQeXRob24gbW9kdWxlIGludG8gYW5vdGhlciBzY3JpcHQuCisKK2dpdC1tdWx0aW1haWwgaXMgZGVyaXZlZCBmcm9tIHRoZSBHaXQgcHJvamVjdCdzIG9sZAorY29udHJpYi9ob29rcy9wb3N0LXJlY2VpdmUtZW1haWwsIGFuZCBpcyBtb3N0bHkgY29tcGF0aWJsZSB3aXRoIHRoYXQKK3NjcmlwdC4gIFNlZSBSRUFETUUubWlncmF0ZS1mcm9tLXBvc3QtcmVjZWl2ZS1lbWFpbCBmb3IgZGV0YWlscyBhYm91dAordGhlIGRpZmZlcmVuY2VzIGFuZCBmb3IgaG93IHRvIG1pZ3JhdGUgZnJvbSBwb3N0LXJlY2VpdmUtZW1haWwgdG8KK2dpdC1tdWx0aW1haWwuCisKK2dpdC1tdWx0aW1haWwsIGxpa2UgdGhlIHJlc3Qgb2YgdGhlIEdpdCBwcm9qZWN0LCBpcyBsaWNlbnNlZCB1bmRlcgorR1BMdjIgKHNlZSB0aGUgQ09QWUlORyBmaWxlIGZvciBkZXRhaWxzKS4KKworUGxlYXNlIG5vdGU6IGFsdGhvdWdoLCBhcyBhIGNvbnZlbmllbmNlLCBnaXQtbXVsdGltYWlsIG1heSBiZQorZGlzdHJpYnV0ZWQgYWxvbmcgd2l0aCB0aGUgbWFpbiBHaXQgcHJvamVjdCwgZGV2ZWxvcG1lbnQgb2YKK2dpdC1tdWx0aW1haWwgdGFrZXMgcGxhY2UgaW4gaXRzIG93biwgc2VwYXJhdGUgcHJvamVjdC4gIFBsZWFzZSwgcmVhZAorYDxDT05UUklCVVRJTkcucnN0PmBfXyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitCeSBkZWZhdWx0LCBmb3IgZWFjaCBwdXNoIHJlY2VpdmVkIGJ5IHRoZSByZXBvc2l0b3J5LCBnaXQtbXVsdGltYWlsOgorCisxLiBPdXRwdXRzIG9uZSBlbWFpbCBzdW1tYXJpemluZyBlYWNoIHJlZmVyZW5jZSB0aGF0IHdhcyBjaGFuZ2VkLgorICAgVGhlc2UgInJlZmVyZW5jZSBjaGFuZ2UiIChjYWxsZWQgInJlZmNoYW5nZSIgYmVsb3cpIGVtYWlscyBkZXNjcmliZQorICAgdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlIChlLmcuLCB3YXMgdGhlIHJlZmVyZW5jZSBjcmVhdGVkLCBkZWxldGVkLAorICAgZmFzdC1mb3J3YXJkZWQsIGV0Yy4pIGFuZCBpbmNsdWRlIGEgb25lLWxpbmUgc3VtbWFyeSBvZiBlYWNoIGNvbW1pdAorICAgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIHJlZmVyZW5jZS4KKworMi4gT3V0cHV0cyBvbmUgZW1haWwgZm9yIGVhY2ggbmV3IGNvbW1pdCB0aGF0IHdhcyBpbnRyb2R1Y2VkIGJ5IHRoZQorICAgcmVmZXJlbmNlIGNoYW5nZS4gIFRoZXNlICJjb21taXQiIGVtYWlscyBpbmNsdWRlIGEgbGlzdCBvZiB0aGUKKyAgIGZpbGVzIGNoYW5nZWQgYnkgdGhlIGNvbW1pdCwgZm9sbG93ZWQgYnkgdGhlIGRpZmZzIG9mIGZpbGVzCisgICBtb2RpZmllZCBieSB0aGUgY29tbWl0LiAgVGhlIGNvbW1pdCBlbWFpbHMgYXJlIHRocmVhZGVkIHRvIHRoZQorICAgY29ycmVzcG9uZGluZyByZWZlcmVuY2UgY2hhbmdlIGVtYWlsIHZpYSAiSW4tUmVwbHktVG8iLiAgVGhpcyBzdHlsZQorICAgKHNpbWlsYXIgdG8gdGhlICJnaXQgZm9ybWF0LXBhdGNoIiBzdHlsZSB1c2VkIG9uIHRoZSBHaXQgbWFpbGluZworICAgbGlzdCkgbWFrZXMgaXQgZWFzeSB0byBzY2FuIHRocm91Z2ggdGhlIGVtYWlscywganVtcCB0byBwYXRjaGVzCisgICB0aGF0IG5lZWQgZnVydGhlciBhdHRlbnRpb24sIGFuZCB3cml0ZSBjb21tZW50cyBhYm91dCBzcGVjaWZpYworICAgY29tbWl0cy4gIENvbW1pdHMgYXJlIGhhbmRsZWQgaW4gcmV2ZXJzZSB0b3BvbG9naWNhbCBvcmRlciAoaS5lLiwKKyAgIHBhcmVudHMgc2hvd24gYmVmb3JlIGNoaWxkcmVuKS4gIEZvciBleGFtcGxlOjoKKworICAgICBbZ2l0XSBicmFuY2ggbWFzdGVyIHVwZGF0ZWQKKyAgICAgKyBbZ2l0XSAwMS8wODogZG9jOiBmaXggeHJlZiBsaW5rIGZyb20gYXBpIGRvY3MgdG8gbWFudWFsIHBhZ2VzCisgICAgICsgW2dpdF0gMDIvMDg6IGFwaS1jcmVkZW50aWFscy50eHQ6IHNob3cgdGhlIGJpZyBwaWN0dXJlIGZpcnN0CisgICAgICsgW2dpdF0gMDMvMDg6IGFwaS1jcmVkZW50aWFscy50eHQ6IG1lbnRpb24gY3JlZGVudGlhbC5oZWxwZXIgZXhwbGljaXRseQorICAgICArIFtnaXRdIDA0LzA4OiBhcGktY3JlZGVudGlhbHMudHh0OiBhZGQgInNlZSBhbHNvIiBzZWN0aW9uCisgICAgICsgW2dpdF0gMDUvMDg6IHQzNTEwIChjaGVycnktcGljay1zZXF1ZW5jZSk6IGFkZCBtaXNzaW5nICcmJicKKyAgICAgKyBbZ2l0XSAwNi8wODogTWVyZ2UgYnJhbmNoICdyci9tYWludC10MzUxMC1jYXNjYWRlLWZpeCcKKyAgICAgKyBbZ2l0XSAwNy8wODogTWVyZ2UgYnJhbmNoICdtbS9hcGktY3JlZGVudGlhbHMtZG9jJworICAgICArIFtnaXRdIDA4LzA4OiBHaXQgMS43LjExLXJjMgorCisgICBCeSBkZWZhdWx0LCBlYWNoIGNvbW1pdCBhcHBlYXJzIGluIGV4YWN0bHkgb25lIGNvbW1pdCBlbWFpbCwgdGhlCisgICBmaXJzdCB0aW1lIHRoYXQgaXQgaXMgcHVzaGVkIHRvIHRoZSByZXBvc2l0b3J5LiAgSWYgYSBjb21taXQgaXMgbGF0ZXIKKyAgIG1lcmdlZCBpbnRvIGFub3RoZXIgYnJhbmNoLCB0aGVuIGEgb25lLWxpbmUgc3VtbWFyeSBvZiB0aGUgY29tbWl0CisgICBpcyBpbmNsdWRlZCBpbiB0aGUgcmVmZXJlbmNlIGNoYW5nZSBlbWFpbCAoYXMgdXN1YWwpLCBidXQgbm8KKyAgIGFkZGl0aW9uYWwgY29tbWl0IGVtYWlsIGlzIGdlbmVyYXRlZC4gU2VlCisgICBgbXVsdGltYWlsaG9vay5yZWZGaWx0ZXIoSW5jbHVzaW9ufEV4Y2x1c2lvbnxEb1NlbmR8RG9udFNlbmQpUmVnZXhgCisgICBiZWxvdyB0byBjb25maWd1cmUgd2hpY2ggYnJhbmNoZXMgYW5kIHRhZ3MgYXJlIHdhdGNoZWQgYnkgdGhlIGhvb2suCisKKyAgIEJ5IGRlZmF1bHQsIHJlZmVyZW5jZSBjaGFuZ2UgZW1haWxzIGhhdmUgdGhlaXIgIlJlcGx5LVRvIiBmaWVsZCBzZXQKKyAgIHRvIHRoZSBwZXJzb24gd2hvIHB1c2hlZCB0aGUgY2hhbmdlLCBhbmQgY29tbWl0IGVtYWlscyBoYXZlIHRoZWlyCisgICAiUmVwbHktVG8iIGZpZWxkIHNldCB0byB0aGUgYXV0aG9yIG9mIHRoZSBjb21taXQuCisKKzMuIE91dHB1dCBvbmUgImFubm91bmNlIiBtYWlsIGZvciBlYWNoIG5ldyBhbm5vdGF0ZWQgdGFnLCBpbmNsdWRpbmcKKyAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YWcgYW5kIG9wdGlvbmFsbHkgYSBzaG9ydGxvZyBkZXNjcmliaW5nIHRoZQorICAgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMgdGFnLiAgU3VjaCBlbWFpbHMgbWlnaHQgYmUgdXNlZnVsIGlmIHlvdQorICAgdXNlIGFubm90YXRlZCB0YWdzIHRvIG1hcmsgcmVsZWFzZXMgb2YgeW91ciBwcm9qZWN0LgorCisKK1JlcXVpcmVtZW50cworLS0tLS0tLS0tLS0tCisKKyogUHl0aG9uIDIueCwgdmVyc2lvbiAyLjQgb3IgbGF0ZXIuICBObyBub24tc3RhbmRhcmQgUHl0aG9uIG1vZHVsZXMKKyAgYXJlIHJlcXVpcmVkLiAgZ2l0LW11bHRpbWFpbCBoYXMgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgUHl0aG9uIDMKKyAgKGJ1dCBpdCBoYXMgYmVlbiBiZXR0ZXIgdGVzdGVkIHdpdGggUHl0aG9uIDIpLgorCisqIFRoZSBgYGdpdGBgIGNvbW1hbmQgbXVzdCBiZSBpbiB5b3VyIFBBVEguICBnaXQtbXVsdGltYWlsIGlzIGtub3duIHRvCisgIHdvcmsgd2l0aCBHaXQgdmVyc2lvbnMgYmFjayB0byAxLjcuMS4gIChFYXJsaWVyIHZlcnNpb25zIGhhdmUgbm90CisgIGJlZW4gdGVzdGVkOyBpZiB5b3UgZG8gc28sIHBsZWFzZSByZXBvcnQgeW91ciByZXN1bHRzLikKKworKiBUbyBzZW5kIGVtYWlscyB1c2luZyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBhIHN0YW5kYXJkIHNlbmRtYWlsCisgIHByb2dyYW0gbXVzdCBiZSBsb2NhdGVkIGF0ICcvdXNyL3NiaW4vc2VuZG1haWwnIG9yCisgICcvdXNyL2xpYi9zZW5kbWFpbCcgYW5kIG11c3QgYmUgY29uZmlndXJlZCBjb3JyZWN0bHkgdG8gc2VuZCBlbWFpbHMuCisgIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBzZXQgbXVsdGltYWlsaG9vay5zZW5kbWFpbENvbW1hbmQsIG9yIHNlZQorICB0aGUgbXVsdGltYWlsaG9vay5tYWlsZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBiZWxvdyBmb3IgaG93IHRvCisgIGNvbmZpZ3VyZSBnaXQtbXVsdGltYWlsIHRvIHNlbmQgZW1haWxzIHZpYSBhbiBTTVRQIHNlcnZlci4KKworKiBnaXQtbXVsdGltYWlsIGlzIGN1cnJlbnRseSB0ZXN0ZWQgb25seSBvbiBMaW51eC4gSXQgbWF5IG9yIG1heSBub3QKKyAgd29yayBvbiBvdGhlciBwbGF0Zm9ybXMgc3VjaCBhcyBXaW5kb3dzIGFuZCBNYWMgT1MuIFNlZQorICBgPENPTlRSSUJVVElORy5yc3Q+YF9fIHRvIGltcHJvdmUgdGhlIHNpdHVhdGlvbi4KKworCitJbnZvY2F0aW9uCistLS0tLS0tLS0tCisKK2BgZ2l0X211bHRpbWFpbC5weWBgIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYXMgYSBgYHBvc3QtcmVjZWl2ZWBgIGhvb2sgaW4gYQorR2l0IHJlcG9zaXRvcnkgKHNlZSBnaXRob29rcyg1KSkuICBMaW5rIG9yIGNvcHkgaXQgdG8KKyRHSVRfRElSL2hvb2tzL3Bvc3QtcmVjZWl2ZSB3aXRoaW4gdGhlIHJlcG9zaXRvcnkgZm9yIHdoaWNoIGVtYWlsCitub3RpZmljYXRpb25zIGFyZSBkZXNpcmVkLiAgVXN1YWxseSBpdCBzaG91bGQgYmUgaW5zdGFsbGVkIG9uIHRoZQorY2VudHJhbCByZXBvc2l0b3J5IGZvciBhIHByb2plY3QsIHRvIHdoaWNoIGFsbCBjb21taXRzIGFyZSBldmVudHVhbGx5CitwdXNoZWQuCisKK0ZvciB1c2Ugb24gcHJlLXYxLjUuMSBHaXQgc2VydmVycywgYGBnaXRfbXVsdGltYWlsLnB5YGAgY2FuIGFsc28gd29yayBhcworYW4gYGB1cGRhdGVgYCBob29rLCB0YWtpbmcgaXRzIGFyZ3VtZW50cyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVG8gdXNlCit0aGlzIHNjcmlwdCBpbiB0aGlzIG1hbm5lciwgbGluayBvciBjb3B5IGl0IHRvICRHSVRfRElSL2hvb2tzL3VwZGF0ZS4KK1BsZWFzZSBub3RlIHRoYXQgdGhlIHNjcmlwdCBpcyBub3QgY29tcGxldGVseSByZWxpYWJsZSBpbiB0aGlzIG1vZGUKK1sxXV8uCisKK0FsdGVybmF0aXZlbHksIGBgZ2l0X211bHRpbWFpbC5weWBgIGNhbiBiZSBpbXBvcnRlZCBhcyBhIFB5dGhvbiBtb2R1bGUKK2ludG8geW91ciBvd24gUHl0aG9uIHBvc3QtcmVjZWl2ZSBzY3JpcHQuICBUaGlzIG1ldGhvZCBpcyBhIGJpdCBtb3JlCit3b3JrLCBidXQgYWxsb3dzIHRoZSBiZWhhdmlvciBvZiB0aGUgaG9vayB0byBiZSBjdXN0b21pemVkIHVzaW5nCithcmJpdHJhcnkgUHl0aG9uIGNvZGUuICBGb3IgZXhhbXBsZSwgeW91IGNhbiB1c2UgYSBjdXN0b20gZW52aXJvbm1lbnQKKyhwZXJoYXBzIGluaGVyaXRpbmcgZnJvbSBHZW5lcmljRW52aXJvbm1lbnQgb3IgR2l0b2xpdGVFbnZpcm9ubWVudCkgdG8KKworKiBjaGFuZ2UgaG93IHRoZSB1c2VyIHdobyBkaWQgdGhlIHB1c2ggaXMgZGV0ZXJtaW5lZAorCisqIHJlYWQgdXNlcnMnIGVtYWlsIGFkZHJlc3NlcyBmcm9tIGFuIExEQVAgc2VydmVyIG9yIGZyb20gYSBkYXRhYmFzZQorCisqIGRlY2lkZSB3aGljaCB1c2VycyBzaG91bGQgYmUgbm90aWZpZWQgYWJvdXQgd2hpY2ggY29tbWl0cyBiYXNlZCBvbgorICB0aGUgY29udGVudHMgb2YgdGhlIGNvbW1pdHMgKGUuZy4sIGZvciB1c2VycyB3aG8gd2FudCB0byBiZSBub3RpZmllZAorICBvbmx5IGFib3V0IGNoYW5nZXMgYWZmZWN0aW5nIHBhcnRpY3VsYXIgZmlsZXMgb3Igc3ViZGlyZWN0b3JpZXMpCisKK09yIHlvdSBjYW4gY2hhbmdlIGhvdyBlbWFpbHMgYXJlIHNlbnQgYnkgd3JpdGluZyB5b3VyIG93biBNYWlsZXIKK2NsYXNzLiAgVGhlIGBgcG9zdC1yZWNlaXZlYGAgc2NyaXB0IGluIHRoaXMgZGlyZWN0b3J5IGRlbW9uc3RyYXRlcyBob3cKK3RvIHVzZSBgYGdpdF9tdWx0aW1haWwucHlgYCBhcyBhIFB5dGhvbiBtb2R1bGUuICAoSWYgeW91IG1ha2UgaW50ZXJlc3RpbmcKK2NoYW5nZXMgb2YgdGhpcyB0eXBlLCBwbGVhc2UgY29uc2lkZXIgc2hhcmluZyB0aGVtIHdpdGggdGhlCitjb21tdW5pdHkuKQorCisKK1Ryb3VibGVzaG9vdGluZy9GQVEKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGxlYXNlIHJlYWQgYDxkb2MvdHJvdWJsZXNob290aW5nLnJzdD5gX18gZm9yIGZyZXF1ZW50bHkgYXNrZWQKK3F1ZXN0aW9ucyBhbmQgY29tbW9uIGlzc3VlcyB3aXRoIGdpdC1tdWx0aW1haWwuCisKKworQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0LCBnaXQtbXVsdGltYWlsIG1vc3RseSB0YWtlcyBpdHMgY29uZmlndXJhdGlvbiBmcm9tIHRoZQorZm9sbG93aW5nIGBgZ2l0IGNvbmZpZ2BgIHNldHRpbmdzOgorCittdWx0aW1haWxob29rLmVudmlyb25tZW50CisgICAgVGhpcyBkZXNjcmliZXMgdGhlIGdlbmVyYWwgZW52aXJvbm1lbnQgb2YgdGhlIHJlcG9zaXRvcnkuIEluIG1vc3QKKyAgICBjYXNlcywgeW91IGRvIG5vdCBuZWVkIHRvIHNwZWNpZnkgYSB2YWx1ZSBmb3IgdGhpcyB2YXJpYWJsZToKKyAgICBgZ2l0LW11bHRpbWFpbGAgd2lsbCBhdXRvZGV0ZWN0IHdoaWNoIGVudmlyb25tZW50IHRvIHVzZS4KKyAgICBDdXJyZW50bHkgc3VwcG9ydGVkIHZhbHVlczoKKworICAgIGdlbmVyaWMKKyAgICAgIHRoZSB1c2VybmFtZSBvZiB0aGUgcHVzaGVyIGlzIHJlYWQgZnJvbSAkVVNFUiBvciAkVVNFUk5BTUUgYW5kCisgICAgICB0aGUgcmVwb3NpdG9yeSBuYW1lIGlzIGRlcml2ZWQgZnJvbSB0aGUgcmVwb3NpdG9yeSdzIHBhdGguCisKKyAgICBnaXRvbGl0ZQorICAgICAgRW52aXJvbm1lbnQgdG8gdXNlIHdoZW4gYGBnaXQtbXVsdGltYWlsYGAgaXMgcmFuIGFzIGEgZ2l0b2xpdGVfCisgICAgICBob29rLgorCisgICAgICBUaGUgdXNlcm5hbWUgb2YgdGhlIHB1c2hlciBpcyByZWFkIGZyb20gJEdMX1VTRVIsIHRoZSByZXBvc2l0b3J5CisgICAgICBuYW1lIGlzIHJlYWQgZnJvbSAkR0xfUkVQTywgYW5kIHRoZSBGcm9tOiBoZWFkZXIgdmFsdWUgaXMKKyAgICAgIG9wdGlvbmFsbHkgcmVhZCBmcm9tIGdpdG9saXRlLmNvbmYgKHNlZSBtdWx0aW1haWxob29rLmZyb20pLgorCisgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBnaXRvbGl0ZSBhbmQgZ2l0LW11bHRpbWFpbCwgcmVhZAorICAgICAgYDxkb2MvZ2l0b2xpdGUucnN0PmBfXworCisgICAgc3Rhc2gKKyAgICAgIEVudmlyb25tZW50IHRvIHVzZSB3aGVuIGBgZ2l0LW11bHRpbWFpbGBgIGlzIHJhbiBhcyBhbiBBdGxhc3NpYW4KKyAgICAgIEJpdEJ1Y2tldCBTZXJ2ZXIgKGZvcm1lcmx5IGtub3duIGFzIEF0bGFzc2lhbiBTdGFzaCkgaG9vay4KKworICAgICAgKipXYXJuaW5nOioqIHRoaXMgbW9kZSB3YXMgcHJvdmlkZWQgYnkgYSB0aGlyZC1wYXJ0eSBjb250cmlidXRvcgorICAgICAgYW5kIG5ldmVyIHRlc3RlZCBieSB0aGUgZ2l0LW11bHRpbWFpbCBtYWludGFpbmVycy4gSXQgaXMKKyAgICAgIHByb3ZpZGVkIGFzLWlzIGFuZCBtYXkgb3IgbWF5IG5vdCB3b3JrIGZvciB5b3UuCisKKyAgICAgIFRoaXMgdmFsdWUgaXMgYXV0b21hdGljYWxseSBhc3N1bWVkIHdoZW4gdGhlIHN0YXNoLXNwZWNpZmljCisgICAgICBmbGFncyAoYGAtLXN0YXNoLXVzZXJgYCBhbmQgYGAtLXN0YXNoLXJlcG9gYCkgYXJlIHNwZWNpZmllZCBvbgorICAgICAgdGhlIGNvbW1hbmQgbGluZS4gV2hlbiB0aGlzIGVudmlyb25tZW50IGlzIGFjdGl2ZSwgdGhlIHVzZXJuYW1lCisgICAgICBhbmQgcmVwbyBjb21lIGZyb20gdGhlc2UgdHdvIGNvbW1hbmQgbGluZSBmbGFncywgd2hpY2ggbXVzdCBiZQorICAgICAgc3BlY2lmaWVkLgorCisgICAgZ2Vycml0CisgICAgICBFbnZpcm9ubWVudCB0byB1c2Ugd2hlbiBgYGdpdC1tdWx0aW1haWxgYCBpcyByYW4gYXMgYQorICAgICAgYGByZWYtdXBkYXRlZGBgIEdlcnJpdCBob29rLgorCisgICAgICBUaGlzIHZhbHVlIGlzIHVzZWQgd2hlbiB0aGUgZ2Vycml0LXNwZWNpZmljIGNvbW1hbmQgbGluZSBmbGFncworICAgICAgKGBgLS1vbGRyZXZgYCwgYGAtLW5ld3JldmBgLCBgYC0tcmVmbmFtZWBgLCBgYC0tcHJvamVjdGBgKSBmb3IKKyAgICAgIGdlcnJpdCdzIHJlZi11cGRhdGVkIGhvb2sgYXJlIHByZXNlbnQuIFdoZW4gdGhpcyBlbnZpcm9ubWVudCBpcworICAgICAgYWN0aXZlLCB0aGUgdXNlcm5hbWUgb2YgdGhlIHB1c2hlciBpcyB0YWtlbiBmcm9tIHRoZQorICAgICAgYGAtLXN1Ym1pdHRlcmBgIGFyZ3VtZW50IGlmIHRoYXQgY29tbWFuZCBsaW5lIG9wdGlvbiBpcyBwYXNzZWQsCisgICAgICBvdGhlcndpc2UgJ0dlcnJpdCcgaXMgdXNlZC4gVGhlIHJlcG9zaXRvcnkgbmFtZSBpcyB0YWtlbiBmcm9tCisgICAgICB0aGUgYGAtLXByb2plY3RgYCBvcHRpb24gb24gdGhlIGNvbW1hbmQgbGluZSwgd2hpY2ggbXVzdCBiZSBwYXNzZWQuCisKKyAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGdlcnJpdCBhbmQgZ2l0LW11bHRpbWFpbCwgcmVhZAorICAgICAgYDxkb2MvZ2Vycml0LnJzdD5gX18KKworICAgIElmIG5vbmUgb2YgdGhlc2UgZW52aXJvbm1lbnRzIGlzIHN1aXRhYmxlIGZvciB5b3VyIHNldHVwLCB0aGVuIHlvdQorICAgIGNhbiBpbXBsZW1lbnQgYSBQeXRob24gY2xhc3MgdGhhdCBpbmhlcml0cyBmcm9tIEVudmlyb25tZW50IGFuZAorICAgIGluc3RhbnRpYXRlIGl0IHZpYSBhIHNjcmlwdCB0aGF0IGxvb2tzIGxpa2UgdGhlIGV4YW1wbGUKKyAgICBwb3N0LXJlY2VpdmUgc2NyaXB0LgorCisgICAgVGhlIGVudmlyb25tZW50IHZhbHVlIGNhbiBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSB1c2luZworICAgIHRoZSBgYC0tZW52aXJvbm1lbnRgYCBvcHRpb24uIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgb24gdGhlCisgICAgY29tbWFuZCBsaW5lIG9yIGJ5IGBgbXVsdGltYWlsaG9vay5lbnZpcm9ubWVudGBgLCB0aGUgdmFsdWUgaXMKKyAgICBndWVzc2VkIGFzIGZvbGxvd3M6CisKKyAgICAqIElmIHN0YXNoLXNwZWNpZmljIChyZXNwZWN0aXZlbHkgZ2Vycml0LXNwZWNpZmljKSBjb21tYW5kIGZsYWdzCisgICAgICBhcmUgcHJlc2VudCBvbiB0aGUgY29tbWFuZC1saW5lLCB0aGVuIGBgc3Rhc2hgYCAocmVzcGVjdGl2ZWx5CisgICAgICBgYGdlcnJpdGBgKSBpcyB1c2VkLgorCisgICAgKiBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzICRHTF9VU0VSIGFuZCAkR0xfUkVQTyBhcmUgc2V0LCB0aGVuCisgICAgICBgYGdpdG9saXRlYGAgaXMgdXNlZC4KKworICAgICogSWYgbm9uZSBvZiB0aGUgYWJvdmUgYXBwbHksIHRoZW4gYGBnZW5lcmljYGAgaXMgdXNlZC4KKworbXVsdGltYWlsaG9vay5yZXBvTmFtZQorICAgIEEgc2hvcnQgbmFtZSBvZiB0aGlzIEdpdCByZXBvc2l0b3J5LCB0byBiZSB1c2VkIGluIHZhcmlvdXMgcGxhY2VzCisgICAgaW4gdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0ZXh0LiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlICRHTF9SRVBPCisgICAgZm9yIGdpdG9saXRlIHJlcG9zaXRvcmllcywgb3Igb3RoZXJ3aXNlIHRvIGRlcml2ZSB0aGlzIHZhbHVlIGZyb20KKyAgICB0aGUgcmVwb3NpdG9yeSBwYXRoIG5hbWUuCisKK211bHRpbWFpbGhvb2subWFpbGluZ0xpc3QKKyAgICBUaGUgbGlzdCBvZiBlbWFpbCBhZGRyZXNzZXMgdG8gd2hpY2ggbm90aWZpY2F0aW9uIGVtYWlscyBzaG91bGQgYmUKKyAgICBzZW50LCBhcyBSRkMgMjgyMiBlbWFpbCBhZGRyZXNzZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gIFRoaXMKKyAgICBjb25maWd1cmF0aW9uIG9wdGlvbiBjYW4gYmUgbXVsdGl2YWx1ZWQuICBMZWF2ZSBpdCB1bnNldCBvciBzZXQgaXQKKyAgICB0byB0aGUgZW1wdHkgc3RyaW5nIHRvIG5vdCBzZW5kIGVtYWlscyBieSBkZWZhdWx0LiAgVGhlIG5leHQgZmV3CisgICAgc2V0dGluZ3MgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHNwZWNpZmljIGFkZHJlc3MgbGlzdHMgZm9yCisgICAgc3BlY2lmaWMgdHlwZXMgb2Ygbm90aWZpY2F0aW9uIGVtYWlsLgorCittdWx0aW1haWxob29rLnJlZmNoYW5nZUxpc3QKKyAgICBUaGUgbGlzdCBvZiBlbWFpbCBhZGRyZXNzZXMgdG8gd2hpY2ggc3VtbWFyeSBlbWFpbHMgYWJvdXQKKyAgICByZWZlcmVuY2UgY2hhbmdlcyBzaG91bGQgYmUgc2VudCwgYXMgUkZDIDI4MjIgZW1haWwgYWRkcmVzc2VzCisgICAgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gIFRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gY2FuIGJlCisgICAgbXVsdGl2YWx1ZWQuICBUaGUgZGVmYXVsdCBpcyB0aGUgdmFsdWUgaW4KKyAgICBtdWx0aW1haWxob29rLm1haWxpbmdMaXN0LiAgU2V0IHRoaXMgdmFsdWUgdG8gIm5vbmUiIChvciB0aGUgZW1wdHkKKyAgICBzdHJpbmcpIHRvIHByZXZlbnQgcmVmZXJlbmNlIGNoYW5nZSBlbWFpbHMgZnJvbSBiZWluZyBzZW50IGV2ZW4gaWYKKyAgICBtdWx0aW1haWxob29rLm1haWxpbmdMaXN0IGlzIHNldC4KKworbXVsdGltYWlsaG9vay5hbm5vdW5jZUxpc3QKKyAgICBUaGUgbGlzdCBvZiBlbWFpbCBhZGRyZXNzZXMgdG8gd2hpY2ggZW1haWxzIGFib3V0IG5ldyBhbm5vdGF0ZWQKKyAgICB0YWdzIHNob3VsZCBiZSBzZW50LCBhcyBSRkMgMjgyMiBlbWFpbCBhZGRyZXNzZXMgc2VwYXJhdGVkIGJ5CisgICAgY29tbWFzLiAgVGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBjYW4gYmUgbXVsdGl2YWx1ZWQuICBUaGUKKyAgICBkZWZhdWx0IGlzIHRoZSB2YWx1ZSBpbiBtdWx0aW1haWxob29rLnJlZmNoYW5nZUxpc3Qgb3IKKyAgICBtdWx0aW1haWxob29rLm1haWxpbmdMaXN0LiAgU2V0IHRoaXMgdmFsdWUgdG8gIm5vbmUiIChvciB0aGUgZW1wdHkKKyAgICBzdHJpbmcpIHRvIHByZXZlbnQgYW5ub3RhdGVkIHRhZyBhbm5vdW5jZW1lbnQgZW1haWxzIGZyb20gYmVpbmcgc2VudAorICAgIGV2ZW4gaWYgb25lIG9mIHRoZSBvdGhlciB2YWx1ZXMgaXMgc2V0LgorCittdWx0aW1haWxob29rLmNvbW1pdExpc3QKKyAgICBUaGUgbGlzdCBvZiBlbWFpbCBhZGRyZXNzZXMgdG8gd2hpY2ggZW1haWxzIGFib3V0IGluZGl2aWR1YWwgbmV3CisgICAgY29tbWl0cyBzaG91bGQgYmUgc2VudCwgYXMgUkZDIDI4MjIgZW1haWwgYWRkcmVzc2VzIHNlcGFyYXRlZCBieQorICAgIGNvbW1hcy4gIFRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gY2FuIGJlIG11bHRpdmFsdWVkLiAgVGhlCisgICAgZGVmYXVsdCBpcyB0aGUgdmFsdWUgaW4gbXVsdGltYWlsaG9vay5tYWlsaW5nTGlzdC4gIFNldCB0aGlzIHZhbHVlCisgICAgdG8gIm5vbmUiIChvciB0aGUgZW1wdHkgc3RyaW5nKSB0byBwcmV2ZW50IG5vdGlmaWNhdGlvbiBlbWFpbHMgYWJvdXQKKyAgICBpbmRpdmlkdWFsIGNvbW1pdHMgZnJvbSBiZWluZyBzZW50IGV2ZW4gaWYKKyAgICBtdWx0aW1haWxob29rLm1haWxpbmdMaXN0IGlzIHNldC4KKworbXVsdGltYWlsaG9vay5hbm5vdW5jZVNob3J0bG9nCisgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIHRydWUsIHRoZW4gZW1haWxzIGFib3V0IGNoYW5nZXMgdG8KKyAgICBhbm5vdGF0ZWQgdGFncyBpbmNsdWRlIGEgc2hvcnRsb2cgb2YgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMKKyAgICB0YWcuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgdGhlIGFubm90YXRlZCB0YWdzIHJlcHJlc2VudCByZWxlYXNlczsKKyAgICB0aGVuIHRoZSBzaG9ydGxvZyB3aWxsIGJlIGEga2luZCBvZiByb3VnaCBzdW1tYXJ5IG9mIHdoYXQgaGFzCisgICAgaGFwcGVuZWQgc2luY2UgdGhlIGxhc3QgcmVsZWFzZS4gIEJ1dCBpZiB5b3VyIHRhZ2dpbmcgcG9saWN5IGlzCisgICAgbm90IHNvIHN0cmFpZ2h0Zm9yd2FyZCwgdGhlbiB0aGUgc2hvcnRsb2cgbWlnaHQgYmUgY29uZnVzaW5nCisgICAgcmF0aGVyIHRoYW4gdXNlZnVsLiAgRGVmYXVsdCBpcyBmYWxzZS4KKworbXVsdGltYWlsaG9vay5jb21taXRFbWFpbEZvcm1hdAorICAgIFRoZSBmb3JtYXQgb2YgZW1haWwgbWVzc2FnZXMgZm9yIHRoZSBpbmRpdmlkdWFsIGNvbW1pdHMsIGNhbiBiZSAidGV4dCIgb3IKKyAgICAiaHRtbCIuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIGVtYWlscyB3aWxsIGluY2x1ZGUgZGlmZnMgdXNpbmcgY29sb3JpemVkCisgICAgSFRNTCBpbnN0ZWFkIG9mIHBsYWluIHRleHQgdXNlZCBieSBkZWZhdWx0LiBOb3RlIHRoYXQgdGhpcyAgY3VycmVudGx5IHRoZQorICAgIHJlZiBjaGFuZ2UgZW1haWxzIGFyZSBhbHdheXMgc2VudCBpbiBwbGFpbiB0ZXh0LgorCisgICAgTm90ZSB0aGF0IHdoZW4gdXNpbmcgImh0bWwiLCB0aGUgZm9ybWF0dGluZyBpcyBkb25lIGJ5IHBhcnNpbmcgdGhlCisgICAgb3V0cHV0IG9mIGBgZ2l0IGxvZ2BgIHdpdGggYGAtcGBgLiBXaGVuIHVzaW5nCisgICAgYGBtdWx0aW1haWxob29rLmNvbW1pdExvZ09wdHNgYCB0byBzcGVjaWZ5IGEgYGAtLWZvcm1hdGBgIGZvcgorICAgIGBgZ2l0IGxvZ2BgLCBvbmUgbWF5IGdldCBmYWxzZSBwb3NpdGl2ZSAoZS5nLiBsaW5lcyBpbiB0aGUgYm9keSBvZgorICAgIHRoZSBtZXNzYWdlIHN0YXJ0aW5nIHdpdGggYGArKytgYCBvciBgYC0tLWBgIGNvbG9yZWQgaW4gcmVkIG9yCisgICAgZ3JlZW4pLgorCisgICAgQnkgZGVmYXVsdCwgYWxsIHRoZSBtZXNzYWdlIGlzIEhUTUwtZXNjYXBlZC4gU2VlCisgICAgYGBtdWx0aW1haWxob29rLmh0bWxJbkludHJvYGAgdG8gY2hhbmdlIHRoaXMgYmVoYXZpb3IuCisKK211bHRpbWFpbGhvb2suY29tbWl0QnJvd3NlVVJMCisgICAgVXNlZCB0byBnZW5lcmF0ZSBhIGxpbmsgdG8gYW4gb25saW5lIHJlcG9zaXRvcnkgYnJvd3NlciBpbiBjb21taXQKKyAgICBlbWFpbHMuIFRoaXMgdmFyaWFibGUgbXVzdCBiZSBhIHN0cmluZy4gRm9ybWF0IGRpcmVjdGl2ZXMgbGlrZQorICAgIGBgJSg8dmFyaWFibGU+KXNgYCB3aWxsIGJlIGV4cGFuZGVkIHRoZSBzYW1lIHdheSBhcyB0ZW1wbGF0ZQorICAgIHN0cmluZ3MuIEluIHBhcnRpY3VsYXIsIGBgJShpZClzYGAgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgZnVsbAorICAgIEdpdCBjb21taXQgaWRlbnRpZmllciAoNDAtY2hhcnMgaGV4YWRlY2ltYWwpLgorCisgICAgSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGFueSBmb3JtYXQgZGlyZWN0aXZlLCB0aGVuCisgICAgYGAlKGlkKXNgYCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIHN0cmluZy4gSWYgeW91IGRvbid0CisgICAgd2FudCBgYCUoaWQpc2BgIHRvIGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQsIHVzZSB0aGUgZW1wdHkgZm9ybWF0CisgICAgZGlyZWN0aXZlIGBgJSgpc2BgIGFueXdoZXJlIGluIHRoZSBzdHJpbmcuCisKKyAgICBGb3IgZXhhbXBsZSwgYSBzdWl0YWJsZSB2YWx1ZSBmb3IgdGhlIGdpdC1tdWx0aW1haWwgcHJvamVjdCBpdHNlbGYKKyAgICB3b3VsZCBiZQorICAgIGBgaHR0cHM6Ly9naXRodWIuY29tL2dpdC1tdWx0aW1haWwvZ2l0LW11bHRpbWFpbC9jb21taXQvJShpZClzYGAuCisKK211bHRpbWFpbGhvb2suaHRtbEluSW50cm8sIG11bHRpbWFpbGhvb2suaHRtbEluRm9vdGVyCisgICAgV2hlbiBnZW5lcmF0aW5nIGFuIEhUTUwgbWVzc2FnZSwgZ2l0LW11bHRpbWFpbCBlc2NhcGVzIGFueSBIVE1MCisgICAgc2VxdWVuY2UgYnkgZGVmYXVsdC4gVGhpcyBtZWFucyB0aGF0IGlmIGEgdGVtcGxhdGUgY29udGFpbnMgSFRNTAorICAgIGxpa2UgYGA8YSBocmVmPSJmb28iPmxpbms8L2E+YGAsIHRoZSByZWFkZXIgd2lsbCBzZWUgdGhlIEhUTUwKKyAgICBzb3VyY2UgY29kZSBhbmQgbm90IGEgcHJvcGVyIGxpbmsuCisKKyAgICBTZXQgYGBtdWx0aW1haWxob29rLmh0bWxJbkludHJvYGAgdG8gdHJ1ZSB0byBhbGxvdyB3cml0aW5nIEhUTUwKKyAgICBmb3JtYXR0aW5nIGluIGludHJvZHVjdGlvbiB0ZW1wbGF0ZXMuIFNpbWlsYXJseSwgc2V0CisgICAgYGBtdWx0aW1haWxob29rLmh0bWxJbkZvb3RlcmBgIGZvciBIVE1MIGluIHRoZSBmb290ZXIuCisKKyAgICBWYXJpYWJsZXMgZXhwYW5kZWQgaW4gdGhlIHRlbXBsYXRlIGFyZSBzdGlsbCBlc2NhcGVkLiBGb3IgZXhhbXBsZSwKKyAgICBpZiBhIHJlcG9zaXRvcnkncyBwYXRoIGNvbnRhaW5zIGEgYGA8YGAsIGl0IHdpbGwgYmUgcmVuZGVyZWQgYXMKKyAgICBzdWNoIGluIHRoZSBtZXNzYWdlLgorCisgICAgUmVhZCBgPGRvYy9jdXN0b21pemluZy1lbWFpbHMucnN0PmBfXyBmb3IgbW9yZSBkZXRhaWxzIGFuZAorICAgIGV4YW1wbGVzLgorCittdWx0aW1haWxob29rLnJlZmNoYW5nZVNob3dHcmFwaAorICAgIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byB0cnVlLCB0aGVuIHN1bW1hcnkgZW1haWxzIGFib3V0IHJlZmVyZW5jZQorICAgIGNoYW5nZXMgd2lsbCBhZGRpdGlvbmFsbHkgaW5jbHVkZToKKworICAgICogYSBncmFwaCBvZiB0aGUgYWRkZWQgY29tbWl0cyAoaWYgYW55KQorCisgICAgKiBhIGdyYXBoIG9mIHRoZSBkaXNjYXJkZWQgY29tbWl0cyAoaWYgYW55KQorCisgICAgVGhlIGxvZyBpcyBnZW5lcmF0ZWQgYnkgcnVubmluZyBgYGdpdCBsb2cgLS1ncmFwaGBgIHdpdGggdGhlIG9wdGlvbnMKKyAgICBzcGVjaWZpZWQgaW4gZ3JhcGhPcHRzLiAgVGhlIGRlZmF1bHQgaXMgZmFsc2UuCisKK211bHRpbWFpbGhvb2sucmVmY2hhbmdlU2hvd0xvZworICAgIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byB0cnVlLCB0aGVuIHN1bW1hcnkgZW1haWxzIGFib3V0IHJlZmVyZW5jZQorICAgIGNoYW5nZXMgd2lsbCBpbmNsdWRlIGEgZGV0YWlsZWQgbG9nIG9mIHRoZSBhZGRlZCBjb21taXRzIGluCisgICAgYWRkaXRpb24gdG8gdGhlIG9uZSBsaW5lIHN1bW1hcnkuICBUaGUgbG9nIGlzIGdlbmVyYXRlZCBieSBydW5uaW5nCisgICAgYGBnaXQgbG9nYGAgd2l0aCB0aGUgb3B0aW9ucyBzcGVjaWZpZWQgaW4gbXVsdGltYWlsaG9vay5sb2dPcHRzLgorICAgIERlZmF1bHQgaXMgZmFsc2UuCisKK211bHRpbWFpbGhvb2subWFpbGVyCisgICAgVGhpcyBvcHRpb24gY2hhbmdlcyB0aGUgd2F5IGVtYWlscyBhcmUgc2VudC4gIEFjY2VwdGVkIHZhbHVlcyBhcmU6CisKKyAgICAqICoqc2VuZG1haWwgKHRoZSBkZWZhdWx0KSoqOiB1c2UgdGhlIGNvbW1hbmQgYGAvdXNyL3NiaW4vc2VuZG1haWxgYCBvcgorICAgICAgYGAvdXNyL2xpYi9zZW5kbWFpbGBgIChvciBzZW5kbWFpbENvbW1hbmQsIGlmIGNvbmZpZ3VyZWQpLiAgVGhpcworICAgICAgbW9kZSBjYW4gYmUgZnVydGhlciBjdXN0b21pemVkIHZpYSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKKyAgICAgIG11bHRpbWFpbGhvb2suc2VuZG1haWxDb21tYW5kCisgICAgICAgICAgVGhlIGNvbW1hbmQgdXNlZCBieSBtYWlsZXIgYGBzZW5kbWFpbGBgIHRvIHNlbmQgZW1haWxzLiAgU2hlbGwKKyAgICAgICAgICBxdW90aW5nIGlzIGFsbG93ZWQgaW4gdGhlIHZhbHVlIG9mIHRoaXMgc2V0dGluZywgYnV0IHJlbWVtYmVyIHRoYXQKKyAgICAgICAgICBHaXQgcmVxdWlyZXMgZG91YmxlLXF1b3RlcyB0byBiZSBlc2NhcGVkOyBlLmcuOjoKKworICAgICAgICAgICAgICBnaXQgY29uZmlnIG11bHRpbWFpbGhvb2suc2VuZG1haWxjb21tYW5kICcvdXNyL3NiaW4vc2VuZG1haWwgLW9pIC10IC1GIFwiR2l0IFJlcG9cIicKKworICAgICAgICAgIERlZmF1bHQgaXMgJy91c3Ivc2Jpbi9zZW5kbWFpbCAtb2kgLXQnIG9yCisgICAgICAgICAgJy91c3IvbGliL3NlbmRtYWlsIC1vaSAtdCcgKGRlcGVuZGluZyBvbiB3aGljaCBmaWxlIGlzCisgICAgICAgICAgcHJlc2VudCBhbmQgZXhlY3V0YWJsZSkuCisKKyAgICAgIG11bHRpbWFpbGhvb2suZW52ZWxvcGVTZW5kZXIKKyAgICAgICAgICBJZiBzZXQgdGhlbiBwYXNzIHRoaXMgdmFsdWUgdG8gc2VuZG1haWwgdmlhIHRoZSAtZiBvcHRpb24gdG8gc2V0CisgICAgICAgICAgdGhlIGVudmVsb3BlIHNlbmRlciBhZGRyZXNzLgorCisgICAgKiAqKnNtdHAqKjogdXNlIFB5dGhvbidzIHNtdHBsaWIuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSBzZW5kbWFpbAorICAgICAgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW0uICBUaGlzIG1vZGUgY2FuIGJlCisgICAgICBmdXJ0aGVyIGN1c3RvbWl6ZWQgdmlhIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworICAgICAgbXVsdGltYWlsaG9vay5zbXRwU2VydmVyCisgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIFNNVFAgc2VydmVyIHRvIGNvbm5lY3QgdG8uICBUaGUgdmFsdWUgY2FuCisgICAgICAgICAgYWxzbyBpbmNsdWRlIGEgY29sb24gYW5kIGEgcG9ydCBudW1iZXI7IGUuZy4sCisgICAgICAgICAgYGBtYWlsLmV4YW1wbGUuY29tOjI1YGAuICBEZWZhdWx0IGlzICdsb2NhbGhvc3QnIHVzaW5nIHBvcnQgMjUuCisKKyAgICAgIG11bHRpbWFpbGhvb2suc210cFVzZXIsIG11bHRpbWFpbGhvb2suc210cFBhc3MKKyAgICAgICAgICBTZXJ2ZXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLiBSZXF1aXJlZCBpZiBzbXRwRW5jcnlwdGlvbiBpcyAnc3NsJy4KKyAgICAgICAgICBOb3RlIHRoYXQgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBjdXJyZW50bHkgbmVlZCB0byBiZQorICAgICAgICAgIHNldCBjbGVhcnRleHQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hpY2ggaXMgbm90CisgICAgICAgICAgcmVjb21tZW5kZWQuIElmIHlvdSBuZWVkIHRvIHVzZSB0aGlzIG9wdGlvbiwgYmUgc3VyZSB5b3VyCisgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGlzIHJlYWQtb25seS4KKworICAgICAgbXVsdGltYWlsaG9vay5lbnZlbG9wZVNlbmRlcgorICAgICAgICBUaGUgc2VuZGVyIGFkZHJlc3MgdG8gYmUgcGFzc2VkIHRvIHRoZSBTTVRQIHNlcnZlci4gIElmCisgICAgICAgIHVuc2V0LCB0aGVuIHRoZSB2YWx1ZSBvZiBtdWx0aW1haWxob29rLmZyb20gaXMgdXNlZC4KKworICAgICAgbXVsdGltYWlsaG9vay5zbXRwU2VydmVyVGltZW91dAorICAgICAgICBUaW1lb3V0IGluIHNlY29uZHMuIERlZmF1bHQgaXMgMTAuCisKKyAgICAgIG11bHRpbWFpbGhvb2suc210cEVuY3J5cHRpb24KKyAgICAgICAgU2V0IHRoZSBzZWN1cml0eSB0eXBlLiBBbGxvd2VkIHZhbHVlczogYGBub25lYGAsIGBgc3NsYGAsIGBgdGxzYGAgKHN0YXJ0dGxzKS4KKyAgICAgICAgRGVmYXVsdCBpcyBgYG5vbmVgYC4KKworICAgICAgbXVsdGltYWlsaG9vay5zbXRwQ0FDZXJ0cworICAgICAgICBTZXQgdGhlIHBhdGggdG8gYSBsaXN0IG9mIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGUgdG8gdmVyaWZ5IHRoZQorICAgICAgICBzZXJ2ZXIgY2VydGlmaWNhdGUsIG9ubHkgc3VwcG9ydGVkIHdoZW4gYGBzbXRwRW5jcnlwdGlvbmBgIGlzCisgICAgICAgIGBgdGxzYGAuIElmIHVuc2V0IG9yIGVtcHR5LCB0aGUgc2VydmVyIGNlcnRpZmljYXRlIGlzIG5vdAorICAgICAgICB2ZXJpZmllZC4gSWYgaXQgdGFyZ2V0cyBhIGZpbGUgY29udGFpbmluZyBhIGxpc3Qgb2YgdHJ1c3RlZCBDQQorICAgICAgICBjZXJ0aWZpY2F0ZXMgKFBFTSBmb3JtYXQpIHRoZXNlIENBcyB3aWxsIGJlIHVzZWQgdG8gdmVyaWZ5IHRoZQorICAgICAgICBzZXJ2ZXIgY2VydGlmaWNhdGUuIEZvciBkZWJpYW4sIHlvdSBjYW4gc2V0CisgICAgICAgIGBgL2V0Yy9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydGBgIGZvciB1c2luZyB0aGUgc3lzdGVtCisgICAgICAgIHRydXN0ZWQgQ0FzLiBGb3Igc2VsZi1zaWduZWQgc2VydmVyLCB5b3UgY2FuIGFkZCB5b3VyIHNlcnZlcgorICAgICAgICBjZXJ0aWZpY2F0ZSB0byB0aGUgc3lzdGVtIHN0b3JlOjoKKworICAgICAgICAgICAgY2QgL3Vzci9sb2NhbC9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMvCisgICAgICAgICAgICBvcGVuc3NsIHNfY2xpZW50IC1zdGFydHRscyBzbXRwIFwKKyAgICAgICAgICAgICAgICAgICAtY29ubmVjdCBtYWlsLmV4YW1wbGUubmV0OjU4NyAtc2hvd2NlcnRzIFwKKyAgICAgICAgICAgICAgICAgICA8L2Rldi9udWxsIDI+L2Rldi9udWxsIFwKKyAgICAgICAgICAgICAgICAgfCBvcGVuc3NsIHg1MDkgLW91dGZvcm0gUEVNID5tYWlsLmV4YW1wbGUubmV0LmNydAorICAgICAgICAgICAgdXBkYXRlLWNhLWNlcnRpZmljYXRlcworCisgICAgICAgIGFuZCB1c2VkIHRoZSB1cGRhdGVkIGBgL2V0Yy9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydGBgLiBPcgorICAgICAgICBkaXJlY3RseSB1c2UgeW91ciBgYC9wYXRoL3RvL21haWwuZXhhbXBsZS5uZXQuY3J0YGAuIERlZmF1bHQgaXMKKyAgICAgICAgdW5zZXQuCisKKyAgICAgIG11bHRpbWFpbGhvb2suc210cFNlcnZlckRlYnVnTGV2ZWwKKyAgICAgICAgSW50ZWdlciBudW1iZXIuIFNldCB0byBncmVhdGVyIHRoYW4gMCB0byBhY3RpdmF0ZSBkZWJ1Z2dpbmcuCisKK211bHRpbWFpbGhvb2suZnJvbSwgbXVsdGltYWlsaG9vay5mcm9tQ29tbWl0LCBtdWx0aW1haWxob29rLmZyb21SZWZjaGFuZ2UKKyAgICBJZiBzZXQsIHVzZSB0aGlzIHZhbHVlIGluIHRoZSBGcm9tOiBmaWVsZCBvZiBnZW5lcmF0ZWQgZW1haWxzLgorICAgIGBgZnJvbUNvbW1pdGBgIGlzIHVzZWQgZm9yIGNvbW1pdCBlbWFpbHMsIGBgZnJvbVJlZmNoYW5nZWBgIGlzCisgICAgdXNlZCBmb3IgcmVmY2hhbmdlIGVtYWlscywgYW5kIGBgZnJvbWBgIGlzIHVzZWQgYXMgZmFsbC1iYWNrIGluCisgICAgYWxsIGNhc2VzLgorCisgICAgVGhlIHZhbHVlIGZvciB0aGVzZSB2YXJpYWJsZXMgY2FuIGJlIGVpdGhlcjoKKworICAgIC0gQW4gZW1haWwgYWRkcmVzcywgd2hpY2ggd2lsbCBiZSB1c2VkIGRpcmVjdGx5LgorCisgICAgLSBUaGUgdmFsdWUgYGBwdXNoZXJgYCwgaW4gd2hpY2ggY2FzZSB0aGUgcHVzaGVyJ3MgYWRkcmVzcyAoaWYKKyAgICAgIGF2YWlsYWJsZSkgd2lsbCBiZSB1c2VkLgorCisgICAgLSBUaGUgdmFsdWUgYGBhdXRob3JgYCAobWVhbmluZ2Z1bCBvbmx5IGZvciBgYGZyb21Db21taXRgYCksIGluIHdoaWNoCisgICAgICBjYXNlIHRoZSBjb21taXQgYXV0aG9yJ3MgYWRkcmVzcyB3aWxsIGJlIHVzZWQuCisKKyAgICBJZiBjb25maWcgdmFsdWVzIGFyZSB1bnNldCwgdGhlIHZhbHVlIG9mIHRoZSBGcm9tOiBoZWFkZXIgaXMKKyAgICBkZXRlcm1pbmVkIGFzIGZvbGxvd3M6CisKKyAgICAxLiAoZ2l0b2xpdGUgZW52aXJvbm1lbnQgb25seSkKKyAgICAgICAxLmEpIElmIGBgbXVsdGltYWlsaG9vay5NYWlsYWRkcmVzc01hcGBgIGlzIHNldCwgYW5kIGlzIGEgcGF0aAorICAgICAgIHRvIGFuIGV4aXN0aW5nIGZpbGUgKGlmIHJlbGF0aXZlLCBpdCBpcyBjb25zaWRlcmVkIHJlbGF0aXZlIHRvCisgICAgICAgdGhlIHBsYWNlIHdoZXJlIGBgZ2l0b2xpdGUuY29uZmBgIGlzIGxvY2F0ZWQpLCB0aGVuIHRoaXMgZmlsZQorICAgICAgIHNob3VsZCBjb250YWluIGxpbmVzIGxpa2U6OgorCisgICAgICAgICAgIHVzZXJuYW1lIEZpcnN0bmFtZSBMYXN0bmFtZSA8ZW1haWxAZXhhbXBsZS5jb20+CisKKyAgICAgICBnaXQtbXVsdGltYWlsIHdpbGwgdGhlbiBsb29rIGZvciBhIGxpbmUgd2hlcmUgYGAkR0xfVVNFUmBgCisgICAgICAgbWF0Y2hlcyB0aGUgYGB1c2VybmFtZWBgIHBhcnQsIGFuZCB1c2UgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgZm9yCisgICAgICAgdGhlIGBgRnJvbTpgYCBoZWFkZXIuCisKKyAgICAgICAxLmIpIFBhcnNlIGdpdG9saXRlLmNvbmYsIGxvb2tpbmcgZm9yIGEgYmxvY2sgb2YgY29tbWVudHMgdGhhdAorICAgICAgIGxvb2tzIGxpa2UgdGhpczo6CisKKyAgICAgICAgICAgIyBCRUdJTiBVU0VSIEVNQUlMUworICAgICAgICAgICAjIHVzZXJuYW1lIEZpcnN0bmFtZSBMYXN0bmFtZSA8ZW1haWxAZXhhbXBsZS5jb20+CisgICAgICAgICAgICMgRU5EIFVTRVIgRU1BSUxTCisKKyAgICAgICBJZiB0aGF0IGJsb2NrIGV4aXN0cywgYW5kIHRoZXJlIGlzIGEgbGluZSBiZXR3ZWVuIHRoZSBCRUdJTgorICAgICAgIFVTRVIgRU1BSUxTIGFuZCBFTkQgVVNFUiBFTUFJTFMgbGluZXMgd2hlcmUgdGhlIGZpcnN0IGZpZWxkCisgICAgICAgbWF0Y2hlcyB0aGUgZ2l0b2xpdGUgdXNlcm5hbWUgKCRHTF9VU0VSKSwgdXNlIHRoZSByZXN0IG9mIHRoZQorICAgICAgIGxpbmUgZm9yIHRoZSBGcm9tOiBoZWFkZXIuCisKKyAgICAyLiBJZiB0aGUgdXNlci5lbWFpbCBjb25maWd1cmF0aW9uIHNldHRpbmcgaXMgc2V0LCB1c2UgaXRzIHZhbHVlCisgICAgICAgKGFuZCB0aGUgdmFsdWUgb2YgdXNlci5uYW1lLCBpZiBzZXQpLgorCisgICAgMy4gVXNlIHRoZSB2YWx1ZSBvZiBtdWx0aW1haWxob29rLmVudmVsb3BlU2VuZGVyLgorCittdWx0aW1haWxob29rLk1haWxhZGRyZXNzTWFwCisgICAgKGdpdG9saXRlIGVudmlyb25tZW50IG9ubHkpCisgICAgRmlsZSB0byBsb29rIGZvciBhIGBgRnJvbTpgYCBhZGRyZXNzIGJhc2VkIG9uIHRoZSB1c2VyIGRvaW5nIHRoZQorICAgIHB1c2guIERlZmF1bHRzIHRvIHVuc2V0LiBTZWUgYGBtdWx0aW1haWxob29rLmZyb21gYCBmb3IgZGV0YWlscy4KKworbXVsdGltYWlsaG9vay5hZG1pbmlzdHJhdG9yCisgICAgVGhlIG5hbWUgYW5kL29yIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIGFkbWluaXN0cmF0b3Igb2YgdGhlIEdpdAorICAgIHJlcG9zaXRvcnk7IHVzZWQgaW4gRk9PVEVSX1RFTVBMQVRFLiAgRGVmYXVsdCBpcworICAgIG11bHRpbWFpbGhvb2suZW52ZWxvcGVzZW5kZXIgaWYgaXQgaXMgc2V0OyBvdGhlcndpc2UgYSBnZW5lcmljCisgICAgc3RyaW5nIGlzIHVzZWQuCisKK211bHRpbWFpbGhvb2suZW1haWxQcmVmaXgKKyAgICBBbGwgZW1haWxzIGhhdmUgdGhpcyBzdHJpbmcgcHJlcGVuZGVkIHRvIHRoZWlyIHN1YmplY3RzLCB0byBhaWQKKyAgICBlbWFpbCBmaWx0ZXJpbmcgKHRob3VnaCBmaWx0ZXJpbmcgYmFzZWQgb24gdGhlIFgtR2l0LSogZW1haWwKKyAgICBoZWFkZXJzIGlzIHByb2JhYmx5IG1vcmUgcm9idXN0KS4gIERlZmF1bHQgaXMgdGhlIHNob3J0IG5hbWUgb2YKKyAgICB0aGUgcmVwb3NpdG9yeSBpbiBzcXVhcmUgYnJhY2tldHM7IGUuZy4sIGBgW215cmVwb11gYC4gIFNldCB0aGlzCisgICAgdmFsdWUgdG8gdGhlIGVtcHR5IHN0cmluZyB0byBzdXBwcmVzcyB0aGUgZW1haWwgcHJlZml4LiBZb3UgbWF5CisgICAgdXNlIHRoZSBwbGFjZWhvbGRlciBgYCUocmVwb19zaG9ydG5hbWUpc2BgIGZvciB0aGUgc2hvcnQgbmFtZSBvZgorICAgIHRoZSByZXBvc2l0b3J5LgorCittdWx0aW1haWxob29rLmVtYWlsTWF4TGluZXMKKyAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGJvZHkgb2YKKyAgICBhIGdlbmVyYXRlZCBlbWFpbC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZXJlIGlzIG5vIGxpbWl0LiAgTGluZXMKKyAgICBiZXlvbmQgdGhlIGxpbWl0IGFyZSBzdXBwcmVzc2VkIGFuZCBjb3VudGVkLCBhbmQgYSBmaW5hbCBsaW5lIGlzCisgICAgYWRkZWQgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIHN1cHByZXNzZWQgbGluZXMuCisKK211bHRpbWFpbGhvb2suZW1haWxNYXhMaW5lTGVuZ3RoCisgICAgVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgbGluZSBpbiB0aGUgZW1haWwgYm9keS4gIExpbmVzIGxvbmdlciB0aGFuCisgICAgdGhpcyBsaW1pdCBhcmUgdHJ1bmNhdGVkIHRvIHRoaXMgbGVuZ3RoIHdpdGggYSB0cmFpbGluZyBgYFsuLi5dYGAKKyAgICBhZGRlZCB0byBpbmRpY2F0ZSB0aGUgbWlzc2luZyB0ZXh0LiAgVGhlIGRlZmF1bHQgaXMgNTAwLCBiZWNhdXNlCisgICAgKGEpIGRpZmZzIHdpdGggbG9uZ2VyIGxpbmVzIGFyZSBwcm9iYWJseSBmcm9tIGJpbmFyeSBmaWxlcywgZm9yCisgICAgd2hpY2ggYSBkaWZmIGlzIHVzZWxlc3MsIGFuZCAoYikgZXZlbiBpZiBhIHRleHQgZmlsZSBoYXMgc3VjaCBsb25nCisgICAgbGluZXMsIHRoZSBkaWZmcyBhcmUgcHJvYmFibHkgdW5yZWFkYWJsZSBhbnl3YXkuICBUbyBkaXNhYmxlIGxpbmUKKyAgICB0cnVuY2F0aW9uLCBzZXQgdGhpcyBvcHRpb24gdG8gMC4KKworbXVsdGltYWlsaG9vay5zdWJqZWN0TWF4TGVuZ3RoCisgICAgVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBzdWJqZWN0IGxpbmUgKGkuZS4gdGhlIGBgb25lbGluZWBgIGZpZWxkCisgICAgaW4gdGVtcGxhdGVzLCBub3QgaW5jbHVkaW5nIHRoZSBwcmVmaXgpLiBMaW5lcyBsb25nZXIgdGhhbiB0aGlzCisgICAgbGltaXQgYXJlIHRydW5jYXRlZCB0byB0aGlzIGxlbmd0aCB3aXRoIGEgdHJhaWxpbmcgYGBbLi4uXWBgIGFkZGVkCisgICAgdG8gaW5kaWNhdGUgdGhlIG1pc3NpbmcgdGV4dC4gVGhpcyBvcHRpb24gVGhlIGRlZmF1bHQgaXMgdG8gdXNlCisgICAgYGBtdWx0aW1haWxob29rLmVtYWlsTWF4TGluZUxlbmd0aGBgLiBUaGlzIG9wdGlvbiBhdm9pZHMgc2VuZGluZworICAgIGVtYWlscyB3aXRoIG92ZXJseSBsb25nIHN1YmplY3QgbGluZXMsIGJ1dCBzaG91bGQgbm90IGJlIG5lZWRlZCBpZgorICAgIHRoZSBjb21taXQgbWVzc2FnZXMgZm9sbG93IHRoZSBHaXQgY29udmVudGlvbiAob25lIHNob3J0IHN1YmplY3QKKyAgICBsaW5lLCB0aGVuIGEgYmxhbmsgbGluZSwgdGhlbiB0aGUgbWVzc2FnZSBib2R5KS4gVG8gZGlzYWJsZSBsaW5lCisgICAgdHJ1bmNhdGlvbiwgc2V0IHRoaXMgb3B0aW9uIHRvIDAuCisKK211bHRpbWFpbGhvb2subWF4Q29tbWl0RW1haWxzCisgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbW1pdCBlbWFpbHMgdG8gc2VuZCBmb3IgYSBnaXZlbiBjaGFuZ2UuCisgICAgV2hlbiB0aGUgbnVtYmVyIG9mIHBhdGNoZXMgaXMgbGFyZ2VyIHRoYXQgdGhpcyB2YWx1ZSwgb25seSB0aGUKKyAgICBzdW1tYXJ5IHJlZmNoYW5nZSBlbWFpbCBpcyBzZW50LiAgVGhpcyBjYW4gYXZvaWQgYWNjaWRlbnRhbAorICAgIG1haWxib21iaW5nLCBmb3IgZXhhbXBsZSBvbiBhbiBpbml0aWFsIHB1c2guICBUbyBkaXNhYmxlIGNvbW1pdAorICAgIGVtYWlscyBsaW1pdCwgc2V0IHRoaXMgb3B0aW9uIHRvIDAuICBUaGUgZGVmYXVsdCBpcyA1MDAuCisKK211bHRpbWFpbGhvb2suZXhjbHVkZU1lcmdlUmV2aXNpb25zCisgICAgV2hlbiBzZW5kaW5nIG91dCByZXZpc2lvbiBlbWFpbHMsIGRvIG5vdCBjb25zaWRlciBtZXJnZSBjb21taXRzICh0aGUKKyAgICBmdW5jdGlvbmFsIGVxdWl2YWxlbnQgb2YgYHJldi1saXN0IC0tbm8tbWVyZ2VzYCkuCisgICAgVGhlIGRlZmF1bHQgaXMgYGZhbHNlYCAoc2VuZCBtZXJnZSBjb21taXQgZW1haWxzKS4KKworbXVsdGltYWlsaG9vay5lbWFpbFN0cmljdFVURjgKKyAgICBJZiB0aGlzIGJvb2xlYW4gb3B0aW9uIGlzIHNldCB0byBgdHJ1ZWAsIHRoZW4gdGhlIG1haW4gcGFydCBvZiB0aGUKKyAgICBlbWFpbCBib2R5IGlzIGZvcmNlZCB0byBiZSB2YWxpZCBVVEYtOC4gIEFueSBjaGFyYWN0ZXJzIHRoYXQgYXJlCisgICAgbm90IHZhbGlkIFVURi04IGFyZSBjb252ZXJ0ZWQgdG8gdGhlIFVuaWNvZGUgcmVwbGFjZW1lbnQKKyAgICBjaGFyYWN0ZXIsIFUrRkZGRC4gIFRoZSBkZWZhdWx0IGlzIGB0cnVlYC4KKworICAgIFRoaXMgb3B0aW9uIGlzIGluZWZmZWN0aXZlIHdpdGggUHl0aG9uIDMsIHdoZXJlIG5vbi1VVEYtOAorICAgIGNoYXJhY3RlcnMgYXJlIHVuY29uZGl0aW9uYWxseSByZXBsYWNlZC4KKworbXVsdGltYWlsaG9vay5kaWZmT3B0cworICAgIE9wdGlvbnMgcGFzc2VkIHRvIGBgZ2l0IGRpZmYtdHJlZWBgIHdoZW4gZ2VuZXJhdGluZyB0aGUgc3VtbWFyeQorICAgIGluZm9ybWF0aW9uIGZvciBSZWZlcmVuY2VDaGFuZ2UgZW1haWxzLiAgRGVmYXVsdCBpcyBgYC0tc3RhdAorICAgIC0tc3VtbWFyeSAtLWZpbmQtY29waWVzLWhhcmRlcmBgLiAgQWRkIC1wIHRvIHRob3NlIG9wdGlvbnMgdG8KKyAgICBpbmNsdWRlIGEgdW5pZmllZCBkaWZmIG9mIGNoYW5nZXMgaW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIHN1bW1hcnkKKyAgICBvdXRwdXQuICBTaGVsbCBxdW90aW5nIGlzIGFsbG93ZWQ7IHNlZSBgYG11bHRpbWFpbGhvb2subG9nT3B0c2BgIGZvcgorICAgIGRldGFpbHMuCisKK211bHRpbWFpbGhvb2suZ3JhcGhPcHRzCisgICAgT3B0aW9ucyBwYXNzZWQgdG8gYGBnaXQgbG9nIC0tZ3JhcGhgYCB3aGVuIGdlbmVyYXRpbmcgZ3JhcGhzIGZvciB0aGUKKyAgICByZWZlcmVuY2UgY2hhbmdlIHN1bW1hcnkgZW1haWxzICh1c2VkIG9ubHkgaWYgcmVmY2hhbmdlU2hvd0dyYXBoCisgICAgaXMgdHJ1ZSkuICBUaGUgZGVmYXVsdCBpcyAnLS1vbmVsaW5lIC0tZGVjb3JhdGUnLgorCisgICAgU2hlbGwgcXVvdGluZyBpcyBhbGxvd2VkOyBzZWUgbG9nT3B0cyBmb3IgZGV0YWlscy4KKworbXVsdGltYWlsaG9vay5sb2dPcHRzCisgICAgT3B0aW9ucyBwYXNzZWQgdG8gYGBnaXQgbG9nYGAgdG8gZ2VuZXJhdGUgYWRkaXRpb25hbCBpbmZvIGZvcgorICAgIHJlZmVyZW5jZSBjaGFuZ2UgZW1haWxzICh1c2VkIG9ubHkgaWYgcmVmY2hhbmdlU2hvd0xvZyBpcyBzZXQpLgorICAgIEZvciBleGFtcGxlLCBhZGRpbmcgLXAgd2lsbCBzaG93IGVhY2ggY29tbWl0J3MgY29tcGxldGUgZGlmZi4gIFRoZQorICAgIGRlZmF1bHQgaXMgZW1wdHkuCisKKyAgICBTaGVsbCBxdW90aW5nIGlzIGFsbG93ZWQ7IGZvciBleGFtcGxlLCBhIGxvZyBmb3JtYXQgdGhhdCBjb250YWlucworICAgIHNwYWNlcyBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHNvbWV0aGluZyBsaWtlOjoKKworICAgICAgZ2l0IGNvbmZpZyBtdWx0aW1haWxob29rLmxvZ29wdHMgJy0tcHJldHR5PWZvcm1hdDoiJWggJWFOIDwlYUU+JW4lcyVuJW4lYiVuIicKKworICAgIElmIHlvdSB3YW50IHRvIHNldCB0aGlzIGJ5IGVkaXRpbmcgeW91ciBjb25maWd1cmF0aW9uIGZpbGUKKyAgICBkaXJlY3RseSwgcmVtZW1iZXIgdGhhdCBHaXQgcmVxdWlyZXMgZG91YmxlLXF1b3RlcyB0byBiZSBlc2NhcGVkCisgICAgKHNlZSBnaXQtY29uZmlnKDEpIGZvciBtb3JlIGluZm9ybWF0aW9uKTo6CisKKyAgICAgIFttdWx0aW1haWxob29rXQorICAgICAgICAgICAgICBsb2dvcHRzID0gLS1wcmV0dHk9Zm9ybWF0OlwiJWggJWFOIDwlYUU+JW4lcyVuJW4lYiVuXCIKKworbXVsdGltYWlsaG9vay5jb21taXRMb2dPcHRzCisgICAgT3B0aW9ucyBwYXNzZWQgdG8gYGBnaXQgbG9nYGAgdG8gZ2VuZXJhdGUgYWRkaXRpb25hbCBpbmZvIGZvcgorICAgIHJldmlzaW9uIGNoYW5nZSBlbWFpbHMuICBGb3IgZXhhbXBsZSwgYWRkaW5nIC0taWdub3JlLWFsbC1zcGFjZXMKKyAgICB3aWxsIHN1cHByZXNzIHdoaXRlc3BhY2UgY2hhbmdlcy4gIFRoZSBkZWZhdWx0IG9wdGlvbnMgYXJlIGBgLUMKKyAgICAtLXN0YXQgLXAgLS1jY2BgLiAgU2hlbGwgcXVvdGluZyBpcyBhbGxvd2VkOyBzZWUKKyAgICBtdWx0aW1haWxob29rLmxvZ09wdHMgZm9yIGRldGFpbHMuCisKK211bHRpbWFpbGhvb2suZGF0ZVN1YnN0aXR1dGUKKyAgICBTdHJpbmcgdG8gdXNlIGFzIGEgc3Vic3RpdHV0ZSBmb3IgYGBEYXRlOmBgIGluIHRoZSBvdXRwdXQgb2YgYGBnaXQKKyAgICBsb2dgYCB3aGlsZSBmb3JtYXR0aW5nIGNvbW1pdCBtZXNzYWdlcy4gVGhpcyBpcyB1c2VmdWwgdG8gYXZvaWQKKyAgICBlbWl0dGluZyBhIGxpbmUgdGhhdCBjYW4gYmUgaW50ZXJwcmV0ZWQgYnkgbWFpbGVycyBhcyB0aGUgc3RhcnQgb2YKKyAgICBhIGNpdGVkIG1lc3NhZ2UgKFppbWJyYSB3ZWJtYWlsIGluIHBhcnRpY3VsYXIpLiBEZWZhdWx0cyB0bworICAgIGBgQ29tbWl0RGF0ZTpgYC4gU2V0IHRvIGFuIGVtcHR5IHN0cmluZyBvciBgYG5vbmVgYCB0byBkZWFjdGl2YXRlCisgICAgdGhlIGJlaGF2aW9yLgorCittdWx0aW1haWxob29rLmVtYWlsRG9tYWluCisgICAgRG9tYWluIG5hbWUgYXBwZW5kZWQgdG8gdGhlIHVzZXJuYW1lIG9mIHRoZSBwZXJzb24gZG9pbmcgdGhlIHB1c2gKKyAgICB0byBjb252ZXJ0IGl0IGludG8gYW4gZW1haWwgYWRkcmVzcworICAgICh2aWEgYGAiJXNAJXMiICUgKHVzZXJuYW1lLCBlbWFpbGRvbWFpbilgYCkuIE1vcmUgY29tcGxpY2F0ZWQKKyAgICBzY2hlbWVzIGNhbiBiZSBpbXBsZW1lbnRlZCBieSBvdmVycmlkaW5nIEVudmlyb25tZW50IGFuZAorICAgIG92ZXJyaWRpbmcgaXRzIGdldF9wdXNoZXJfZW1haWwoKSBtZXRob2QuCisKK211bHRpbWFpbGhvb2sucmVwbHlUbywgbXVsdGltYWlsaG9vay5yZXBseVRvQ29tbWl0LCBtdWx0aW1haWxob29rLnJlcGx5VG9SZWZjaGFuZ2UKKyAgICBBZGRyZXNzZXMgdG8gdXNlIGluIHRoZSBSZXBseS1UbzogZmllbGQgZm9yIGNvbW1pdCBlbWFpbHMKKyAgICAocmVwbHlUb0NvbW1pdCkgYW5kIHJlZmNoYW5nZSBlbWFpbHMgKHJlcGx5VG9SZWZjaGFuZ2UpLgorICAgIG11bHRpbWFpbGhvb2sucmVwbHlUbyBpcyB1c2VkIGFzIGRlZmF1bHQgd2hlbiByZXBseVRvQ29tbWl0IG9yCisgICAgcmVwbHlUb1JlZmNoYW5nZSBpcyBub3Qgc2V0LiBUaGUgc2hvcnRjdXRzIGBgcHVzaGVyYGAgYW5kCisgICAgYGBhdXRob3JgYCBhcmUgYWxsb3dlZCB3aXRoIHRoZSBzYW1lIHNlbWFudGljcyBhcyBmb3IKKyAgICBgYG11bHRpbWFpbGhvb2suZnJvbWBgLiBJbiBhZGRpdGlvbiwgdGhlIHZhbHVlIGBgbm9uZWBgIGNhbiBiZQorICAgIHVzZWQgdG8gb21pdCB0aGUgYGBSZXBseS1UbzpgYCBmaWVsZC4KKworICAgIFRoZSBkZWZhdWx0IGlzIGBgcHVzaGVyYGAgZm9yIHJlZmNoYW5nZSBlbWFpbHMsIGFuZCBgYGF1dGhvcmBgIGZvcgorICAgIGNvbW1pdCBlbWFpbHMuCisKK211bHRpbWFpbGhvb2sucXVpZXQKKyAgICBEbyBub3Qgb3V0cHV0IHRoZSBsaXN0IG9mIGVtYWlsIHJlY2lwaWVudHMgZnJvbSB0aGUgaG9vaworCittdWx0aW1haWxob29rLnN0ZG91dAorICAgIEZvciBkZWJ1Z2dpbmcsIHNlbmQgZW1haWxzIHRvIHN0ZG91dCByYXRoZXIgdGhhbiB0byB0aGUKKyAgICBtYWlsZXIuICBFcXVpdmFsZW50IHRvIHRoZSAtLXN0ZG91dCBjb21tYW5kIGxpbmUgb3B0aW9uCisKK211bHRpbWFpbGhvb2suc2NhbkNvbW1pdEZvckNjCisgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIHRydWUsIHRoYW4gcmVjaXBpZW50cyBmcm9tIGxpbmVzIGluIGNvbW1pdCBib2R5CisgICAgdGhhdCBzdGFydHMgd2l0aCBgYENDOmBgIHdpbGwgYmUgYWRkZWQgdG8gQ0MgbGlzdC4KKyAgICBEZWZhdWx0OiBmYWxzZQorCittdWx0aW1haWxob29rLmNvbWJpbmVXaGVuU2luZ2xlQ29tbWl0CisgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIHRydWUgYW5kIGEgc2luZ2xlIG5ldyBjb21taXQgaXMgcHVzaGVkIHRvCisgICAgYSBicmFuY2gsIGNvbWJpbmUgdGhlIHN1bW1hcnkgYW5kIGNvbW1pdCBlbWFpbCBtZXNzYWdlcyBpbnRvIGEKKyAgICBzaW5nbGUgZW1haWwuCisgICAgRGVmYXVsdDogdHJ1ZQorCittdWx0aW1haWxob29rLnJlZkZpbHRlckluY2x1c2lvblJlZ2V4LCBtdWx0aW1haWxob29rLnJlZkZpbHRlckV4Y2x1c2lvblJlZ2V4LCBtdWx0aW1haWxob29rLnJlZkZpbHRlckRvU2VuZFJlZ2V4LCBtdWx0aW1haWxob29rLnJlZkZpbHRlckRvbnRTZW5kUmVnZXgKKyAgICAqKldhcm5pbmc6KiogdGhlc2Ugb3B0aW9ucyBhcmUgZXhwZXJpbWVudGFsLiBUaGV5IHNob3VsZCB3b3JrLCBidXQKKyAgICB0aGUgdXNlci1pbnRlcmZhY2UgaXMgbm90IHN0YWJsZSB5ZXQgKGluIHBhcnRpY3VsYXIsIHRoZSBvcHRpb24KKyAgICBuYW1lcyBtYXkgY2hhbmdlKS4gSWYgeW91IHdhbnQgdG8gcGFydGljaXBhdGUgaW4gc3RhYmlsaXppbmcgdGhlCisgICAgZmVhdHVyZSwgcGxlYXNlIGNvbnRhY3QgdGhlIG1haW50YWluZXJzIGFuZC9vciBzZW5kIHB1bGwtcmVxdWVzdHMuCisgICAgSWYgeW91IGFyZSBoYXBweSB3aXRoIHRoZSBjdXJyZW50IHNoYXBlIG9mIHRoZSBmZWF0dXJlLCBwbGVhc2UKKyAgICByZXBvcnQgaXQgdG9vLgorCisgICAgUmVndWxhciBleHByZXNzaW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGxpbWl0IHJlZnMgZm9yIHdoaWNoIGVtYWlsCisgICAgdXBkYXRlcyB3aWxsIGJlIHNlbnQuICBJdCBpcyBhbiBlcnJvciB0byBzcGVjaWZ5IGJvdGggYW4gaW5jbHVzaW9uCisgICAgYW5kIGFuIGV4Y2x1c2lvbiByZWdleC4gIElmIGEgYGByZWZGaWx0ZXJJbmNsdXNpb25SZWdleGBgIGlzCisgICAgc3BlY2lmaWVkLCBlbWFpbHMgd2lsbCBvbmx5IGJlIHNlbnQgZm9yIHJlZnMgd2hpY2ggbWF0Y2ggdGhpcworICAgIHJlZ2V4LiAgSWYgYSBgYHJlZkZpbHRlckV4Y2x1c2lvblJlZ2V4YGAgcmVnZXggaXMgc3BlY2lmaWVkLAorICAgIGVtYWlscyB3aWxsIGJlIHNlbnQgZm9yIGFsbCByZWZzIGV4Y2VwdCB0aG9zZSB0aGF0IG1hdGNoIHRoaXMKKyAgICByZWdleCAob3IgdGhhdCBtYXRjaCBhIHByZWRlZmluZWQgcmVnZXggc3BlY2lmaWMgdG8gdGhlCisgICAgZW52aXJvbm1lbnQsIHN1Y2ggYXMgIl5yZWZzL25vdGVzIiBmb3IgbW9zdCBlbnZpcm9ubWVudHMgYW5kCisgICAgIl5yZWZzL25vdGVzfF5yZWZzL2NoYW5nZXMiIGZvciB0aGUgZ2Vycml0IGVudmlyb25tZW50KS4KKworICAgIFRoZSBleHByZXNzaW9ucyBhcmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBjb21wbGV0ZSByZWZuYW1lLCBhbmQgaXMKKyAgICBjb25zaWRlcmVkIHRvIG1hdGNoIGlmIGFueSBzdWJzdHJpbmcgbWF0Y2hlcy4gRm9yIGV4YW1wbGUsIHRvCisgICAgZmlsdGVyLW91dCBhbGwgdGFncywgc2V0IGBgcmVmRmlsdGVyRXhjbHVzaW9uUmVnZXhgYCB0bworICAgIGBgXnJlZnMvdGFncy9gYCAobm90ZSB0aGUgbGVhZGluZyBgYF5gYCBidXQgbm8gdHJhaWxpbmcgYGAkYGApLiBJZgorICAgIHlvdSBzZXQgYGByZWZGaWx0ZXJFeGNsdXNpb25SZWdleGBgIHRvIGBgbWFzdGVyYGAsIHRoZW4gYW55IHJlZgorICAgIGNvbnRhaW5pbmcgYGBtYXN0ZXJgYCB3aWxsIGJlIGV4Y2x1ZGVkICh0aGUgYGBtYXN0ZXJgYCBicmFuY2gsIGJ1dAorICAgIGFsc28gYGByZWZzL3RhZ3MvbWFzdGVyYGAgb3IgYGByZWZzL2hlYWRzL2Zvby1tYXN0ZXItYmFyYGApLgorCisgICAgYGByZWZGaWx0ZXJEb1NlbmRSZWdleGBgIGFuZCBgYHJlZkZpbHRlckRvbnRTZW5kUmVnZXhgYCBhcmUKKyAgICBhbmFsb2dvdXMgdG8gYGByZWZGaWx0ZXJJbmNsdXNpb25SZWdleGBgIGFuZAorICAgIGBgcmVmRmlsdGVyRXhjbHVzaW9uUmVnZXhgYCB3aXRoIG9uZSBkaWZmZXJlbmNlOiB3aXRoCisgICAgYGByZWZGaWx0ZXJEb1NlbmRSZWdleGBgIGFuZCBgYHJlZkZpbHRlckRvbnRTZW5kUmVnZXhgYCwgY29tbWl0cworICAgIGludHJvZHVjZWQgYnkgb25lIGV4Y2x1ZGVkIHJlZiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFzIG5ldyB3aGVuCisgICAgdGhleSByZWFjaCBhbiBpbmNsdWRlZCByZWYuIFR5cGljYWxseSwgaWYgeW91IGFkZCBhIGJyYW5jaCBgYGZvb2BgCisgICAgdG8gIGBgcmVmRmlsdGVyRG9udFNlbmRSZWdleGBgLCBwdXNoIGNvbW1pdHMgdG8gdGhpcyBicmFuY2gsIGFuZAorICAgIGxhdGVyIG1lcmdlIGJyYW5jaCBgYGZvb2BgIGludG8gYGBtYXN0ZXJgYCwgdGhlbiB0aGUgbm90aWZpY2F0aW9uCisgICAgZW1haWwgZm9yIGBgbWFzdGVyYGAgd2lsbCBjb250YWluIGEgY29tbWl0IGVtYWlsIG9ubHkgZm9yIHRoZQorICAgIG1lcmdlIGNvbW1pdC4gSWYgeW91IGluY2x1ZGUgYGBmb29gYCBpbgorICAgIGBgcmVmRmlsdGVyRXhjbHVzaW9uUmVnZXhgYCwgdGhlbiBhdCB0aGUgdGltZSBvZiBtZXJnZSwgeW91IHdpbGwKKyAgICByZWNlaXZlIG9uZSBjb21taXQgZW1haWwgcGVyIGNvbW1pdCBpbiB0aGUgYnJhbmNoLgorCisgICAgVGhlc2UgdmFyaWFibGVzIGNhbiBiZSBtdWx0aS12YWx1ZWQsIGxpa2U6OgorCisgICAgICBbbXVsdGltYWlsaG9va10KKyAgICAgICAgICAgICAgcmVmRmlsdGVyRXhjbHVzaW9uUmVnZXggPSBecmVmcy90YWdzLworICAgICAgICAgICAgICByZWZGaWx0ZXJFeGNsdXNpb25SZWdleCA9IF5yZWZzL2hlYWRzL21hc3RlciQKKworICAgIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBsaWtlOjoKKworICAgICAgW211bHRpbWFpbGhvb2tdCisgICAgICAgICAgICAgIHJlZkZpbHRlckV4Y2x1c2lvblJlZ2V4ID0gXnJlZnMvdGFncy8gXnJlZnMvaGVhZHMvbWFzdGVyJAorCisgICAgQm90aCBleGFtcGxlcyBleGNsdWRlIHRhZ3MgYW5kIHRoZSBtYXN0ZXIgYnJhbmNoLCBhbmQgYXJlCisgICAgZXF1aXZhbGVudCB0bzo6CisKKyAgICAgIFttdWx0aW1haWxob29rXQorICAgICAgICAgICAgICByZWZGaWx0ZXJFeGNsdXNpb25SZWdleCA9IF5yZWZzL3RhZ3MvfF5yZWZzL2hlYWRzL21hc3RlciQKKworICAgIGBgcmVmRmlsdGVySW5jbHVzaW9uUmVnZXhgYCBhbmQgYGByZWZGaWx0ZXJFeGNsdXNpb25SZWdleGBgIGFyZQorICAgIHN0cmljdGx5IHN0cm9uZ2VyIHRoYW4gYGByZWZGaWx0ZXJEb1NlbmRSZWdleGBgIGFuZAorICAgIGBgcmVmRmlsdGVyRG9udFNlbmRSZWdleGBgLiBJbiBvdGhlciB3b3JkcywgYWRkaW5nIGEgcmVmIHRvIGEKKyAgICBEb1NlbmQvRG9udFNlbmQgcmVnZXggaGFzIG5vIGVmZmVjdCBpZiBpdCBpcyBhbHJlYWR5IGV4Y2x1ZGVkIGJ5IGEKKyAgICBFeGNsdXNpb24vSW5jbHVzaW9uIHJlZ2V4LgorCittdWx0aW1haWxob29rLmxvZ0ZpbGUsIG11bHRpbWFpbGhvb2suZXJyb3JMb2dGaWxlLCBtdWx0aW1haWxob29rLmRlYnVnTG9nRmlsZQorCisgICAgV2hlbiBzZXQsIHRoZXNlIHZhcmlhYmxlIGRlc2lnbmF0ZSBwYXRoIHRvIGZpbGVzIHdoZXJlCisgICAgZ2l0LW11bHRpbWFpbCB3aWxsIGxvZyBzb21lIG1lc3NhZ2VzLiBOb3JtYWwgbWVzc2FnZXMgYW5kIGVycm9yCisgICAgbWVzc2FnZXMgYXJlIHNlbnQgdG8gYGBsb2dGaWxlYGAsIGFuZCBlcnJvciBtZXNzYWdlcyBhcmUgYWxzbyBzZW50CisgICAgdG8gYGBlcnJvckxvZ0ZpbGVgYC4gRGVidWcgbWVzc2FnZXMgYW5kIGFsbCBvdGhlciBtZXNzYWdlcyBhcmUKKyAgICBzZW50IHRvIGBgZGVidWdMb2dGaWxlYGAuIFRoZSByZWNvbW1lbmRlZCB3YXkgaXMgdG8gc2V0IG9ubHkgb25lCisgICAgb2YgdGhlc2UgdmFyaWFibGVzLCBidXQgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzZXQgc2V2ZXJhbCBvZiB0aGVtCisgICAgKHBhcnQgb2YgdGhlIGluZm9ybWF0aW9uIGlzIHRoZW4gZHVwbGljYXRlZCBpbiBzZXZlcmFsIGxvZyBmaWxlcywKKyAgICBmb3IgZXhhbXBsZSBlcnJvcnMgYXJlIGR1cGxpY2F0ZWQgdG8gYWxsIGxvZyBmaWxlcykuCisKKyAgICBSZWxhdGl2ZSBwYXRoIGFyZSByZWxhdGl2ZSB0byB0aGUgR2l0IHJlcG9zaXRvcnkgd2hlcmUgdGhlIHB1c2ggaXMKKyAgICBkb25lLgorCittdWx0aW1haWxob29rLnZlcmJvc2UKKworICAgIFZlcmJvc2l0eSBsZXZlbCBvZiBnaXQtbXVsdGltYWlsIG9uIGl0cyBzdGFuZGFyZCBvdXRwdXQuIEJ5CisgICAgZGVmYXVsdCwgc2hvdyBvbmx5IGVycm9yIGFuZCBpbmZvIG1lc3NhZ2VzLiBJZiBzZXQgdG8gdHJ1ZSwgc2hvdworICAgIGFsc28gZGVidWcgbWVzc2FnZXMuCisKK0VtYWlsIGZpbHRlcmluZyBhaWRzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgZW1haWxzIGluY2x1ZGUgZXh0cmEgaGVhZGVycyB0byBlbmFibGUgZmluZSB0dW5lZCBmaWx0ZXJpbmcgYW5kCitnaXZlIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcuICBBbGwgZW1haWxzIGluY2x1ZGUgdGhlIGhlYWRlcnMKK2BgWC1HaXQtSG9zdGBgLCBgYFgtR2l0LVJlcG9gYCwgYGBYLUdpdC1SZWZuYW1lYGAsIGFuZCBgYFgtR2l0LVJlZnR5cGVgYC4KK1JlZmVyZW5jZUNoYW5nZSBlbWFpbHMgYWxzbyBpbmNsdWRlIGhlYWRlcnMgYGBYLUdpdC1PbGRyZXZgYCBhbmQgYGBYLUdpdC1OZXdyZXZgYDsKK1JldmlzaW9uIGVtYWlscyBhbHNvIGluY2x1ZGUgaGVhZGVyIGBgWC1HaXQtUmV2YGAuCisKKworQ3VzdG9taXppbmcgZW1haWwgY29udGVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2dpdC1tdWx0aW1haWwgbW9zdGx5IGdlbmVyYXRlcyBlbWFpbHMgYnkgZXhwYW5kaW5nIHRlbXBsYXRlcy4gIFRoZQordGVtcGxhdGVzIGNhbiBiZSBjdXN0b21pemVkLiAgVG8gYXZvaWQgdGhlIG5lZWQgdG8gZWRpdAorYGBnaXRfbXVsdGltYWlsLnB5YGAgZGlyZWN0bHksIHRoZSBwcmVmZXJyZWQgd2F5IHRvIGNoYW5nZSB0aGUgdGVtcGxhdGVzCitpcyB0byB3cml0ZSBhIHNlcGFyYXRlIFB5dGhvbiBzY3JpcHQgdGhhdCBpbXBvcnRzIGBgZ2l0X211bHRpbWFpbC5weWBgIGFzCithIG1vZHVsZSwgdGhlbiByZXBsYWNlcyB0aGUgdGVtcGxhdGVzIGluIHBsYWNlLiAgU2VlIHRoZSBwcm92aWRlZAorcG9zdC1yZWNlaXZlIHNjcmlwdCBmb3IgYW4gZXhhbXBsZSBvZiBob3cgdGhpcyBpcyBkb25lLgorCisKK0N1c3RvbWl6aW5nIGdpdC1tdWx0aW1haWwgZm9yIHlvdXIgZW52aXJvbm1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2l0LW11bHRpbWFpbCBpcyBtb3N0bHkgY3VzdG9taXplZCB2aWEgYW4gImVudmlyb25tZW50IiB0aGF0IGRlc2NyaWJlcwordGhlIGxvY2FsIGVudmlyb25tZW50IGluIHdoaWNoIEdpdCBpcyBydW5uaW5nLiAgVHdvIHR5cGVzIG9mCitlbnZpcm9ubWVudCBhcmUgYnVpbHQgaW46CisKK0dlbmVyaWNFbnZpcm9ubWVudAorICAgIGEgc3RhbmQtYWxvbmUgR2l0IHJlcG9zaXRvcnkuCisKK0dpdG9saXRlRW52aXJvbm1lbnQKKyAgICBhIEdpdCByZXBvc2l0b3J5IHRoYXQgaXMgbWFuYWdlZCBieSBnaXRvbGl0ZV8uICBGb3Igc3VjaAorICAgIHJlcG9zaXRvcmllcywgdGhlIGlkZW50aXR5IG9mIHRoZSBwdXNoZXIgaXMgcmVhZCBmcm9tCisgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgJEdMX1VTRVIsIHRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5IGlzIHJlYWQKKyAgICBmcm9tICRHTF9SRVBPIChpZiBpdCBpcyBub3Qgb3ZlcnJpZGRlbiBieSBtdWx0aW1haWxob29rLnJlcG9uYW1lKSwKKyAgICBhbmQgdGhlIEZyb206IGhlYWRlciB2YWx1ZSBpcyBvcHRpb25hbGx5IHJlYWQgZnJvbSBnaXRvbGl0ZS5jb25mCisgICAgKHNlZSBtdWx0aW1haWxob29rLmZyb20pLgorCitCeSBkZWZhdWx0LCBnaXQtbXVsdGltYWlsIGFzc3VtZXMgR2l0b2xpdGVFbnZpcm9ubWVudCBpZiAkR0xfVVNFUiBhbmQKKyRHTF9SRVBPIGFyZSBzZXQsIGFuZCBvdGhlcndpc2UgYXNzdW1lcyBHZW5lcmljRW52aXJvbm1lbnQuCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNob29zZSBvbmUgb2YgdGhlc2UgdHdvIGVudmlyb25tZW50cyBleHBsaWNpdGx5CitieSBzZXR0aW5nIGEgYGBtdWx0aW1haWxob29rLmVudmlyb25tZW50YGAgY29uZmlnIHNldHRpbmcgKHdoaWNoIGNhbgoraGF2ZSB0aGUgdmFsdWUgYGdlbmVyaWNgIG9yIGBnaXRvbGl0ZWApIG9yIGJ5IHBhc3NpbmcgYW4gLS1lbnZpcm9ubWVudAorb3B0aW9uIHRvIHRoZSBzY3JpcHQuCisKK0lmIHlvdSBuZWVkIHRvIGN1c3RvbWl6ZSB0aGUgc2NyaXB0IGluIHdheXMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieQordGhlIGV4aXN0aW5nIGVudmlyb25tZW50cywgeW91IGNhbiBkZWZpbmUgeW91ciBvd24gZW52aXJvbm1lbnQgY2xhc3MKK2NsYXNzIHVzaW5nIGFyYml0cmFyeSBQeXRob24gY29kZS4gIFRvIGRvIHNvLCB5b3UgbmVlZCB0byBpbXBvcnQKK2BgZ2l0X211bHRpbWFpbC5weWBgIGFzIGEgUHl0aG9uIG1vZHVsZSwgYXMgZGVtb25zdHJhdGVkIGJ5IHRoZSBleGFtcGxlCitwb3N0LXJlY2VpdmUgc2NyaXB0LiAgVGhlbiBpbXBsZW1lbnQgeW91ciBlbnZpcm9ubWVudCBjbGFzczsgaXQgc2hvdWxkCit1c3VhbGx5IGluaGVyaXQgZnJvbSBvbmUgb2YgdGhlIGV4aXN0aW5nIEVudmlyb25tZW50IGNsYXNzZXMgYW5kCitwb3NzaWJseSBvbmUgb3IgbW9yZSBvZiB0aGUgRW52aXJvbm1lbnRNaXhpbiBjbGFzc2VzLiAgVGhlbiBzZXQgdGhlCitgYGVudmlyb25tZW50YGAgdmFyaWFibGUgdG8gYW4gaW5zdGFuY2Ugb2YgeW91ciBvd24gZW52aXJvbm1lbnQgY2xhc3MKK2FuZCBwYXNzIGl0IHRvIGBgcnVuX2FzX3Bvc3RfcmVjZWl2ZV9ob29rKClgYC4KKworVGhlIHN0YW5kYXJkIGVudmlyb25tZW50IGNsYXNzZXMsIEdlbmVyaWNFbnZpcm9ubWVudCBhbmQKK0dpdG9saXRlRW52aXJvbm1lbnQsIGFyZSBpbiBmYWN0IHRoZW1zZWx2ZXMgcHV0IHRvZ2V0aGVyIG91dCBvZiBhCitudW1iZXIgb2YgbWl4aW4gY2xhc3NlcywgZWFjaCBvZiB3aGljaCBoYW5kbGVzIG9uZSBhc3BlY3Qgb2YgdGhlCitjdXN0b21pemF0aW9uLiAgRm9yIHRoZSBmaW5lc3QgY29udHJvbCBvdmVyIHlvdXIgY29uZmlndXJhdGlvbiwgeW91CitjYW4gc3BlY2lmeSBleGFjdGx5IHdoaWNoIG1peGluIGNsYXNzZXMgeW91ciBvd24gZW52aXJvbm1lbnQgY2xhc3MKK3Nob3VsZCBpbmhlcml0IGZyb20sIGFuZCBvdmVycmlkZSBpbmRpdmlkdWFsIG1ldGhvZHMgKG9yIGV2ZW4gYWRkIHlvdXIKK293biBtaXhpbiBjbGFzc2VzKSB0byBpbXBsZW1lbnQgZW50aXJlbHkgbmV3IGJlaGF2aW9ycy4gIElmIHlvdQoraW1wbGVtZW50IGFueSBtaXhpbnMgdGhhdCBtaWdodCBiZSB1c2VmdWwgdG8gb3RoZXIgcGVvcGxlLCBwbGVhc2UKK2NvbnNpZGVyIHNoYXJpbmcgdGhlbSB3aXRoIHRoZSBjb21tdW5pdHkhCisKKworR2V0dGluZyBpbnZvbHZlZAorLS0tLS0tLS0tLS0tLS0tLQorCitQbGVhc2UsIHJlYWQgYDxDT05UUklCVVRJTkcucnN0PmBfXyBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bworY29udHJpYnV0ZSB0byBnaXQtbXVsdGltYWlsLgorCisKK0Zvb3Rub3RlcworLS0tLS0tLS0tCisKKy4uIFsxXSBCZWNhdXNlIG9mIHRoZSB3YXkgaW5mb3JtYXRpb24gaXMgcGFzc2VkIHRvIHVwZGF0ZSBob29rcywgdGhlCisgICAgICAgc2NyaXB0J3MgbWV0aG9kIG9mIGRldGVybWluaW5nIHdoZXRoZXIgYSBjb21taXQgaGFzIGFscmVhZHkKKyAgICAgICBiZWVuIHNlZW4gZG9lcyBub3Qgd29yayB3aGVuIGl0IGlzIHVzZWQgYXMgYW4gYGB1cGRhdGVgYCBzY3JpcHQuCisgICAgICAgSW4gcGFydGljdWxhciwgbm8gbm90aWZpY2F0aW9uIGVtYWlsIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciBhCisgICAgICAgbmV3IGNvbW1pdCB0aGF0IGlzIGFkZGVkIHRvIG11bHRpcGxlIHJlZmVyZW5jZXMgaW4gdGhlIHNhbWUKKyAgICAgICBwdXNoLiBBIHdvcmthcm91bmQgaXMgdG8gdXNlIC0tZm9yY2Utc2VuZCB0byBmb3JjZSBzZW5kaW5nIHRoZQorICAgICAgIGVtYWlscy4KKworLi4gX2dpdG9saXRlOiBodHRwczovL2dpdGh1Yi5jb20vc2l0YXJhbWMvZ2l0b2xpdGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2RvYy9jdXN0b21pemluZy1lbWFpbHMucnN0IGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZG9jL2N1c3RvbWl6aW5nLWVtYWlscy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1YjY3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2RvYy9jdXN0b21pemluZy1lbWFpbHMucnN0CkBAIC0wLDAgKzEsNTYgQEAKK0N1c3RvbWl6aW5nIHRoZSBjb250ZW50IGFuZCBmb3JtYXR0aW5nIG9mIGVtYWlscworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK092ZXJsb2FkaW5nIHRlbXBsYXRlIHN0cmluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNvbnRlbnQgb2YgZW1haWxzIGlzIGdlbmVyYXRlZCBiYXNlZCBvbiB0ZW1wbGF0ZSBzdHJpbmdzIGRlZmluZWQKK2luIGBgZ2l0X211bHRpbWFpbC5weWBgLiBZb3UgY2FuIGN1c3RvbWl6ZSB0aGVzZSB0ZW1wbGF0ZSBzdHJpbmdzCit3aXRob3V0IGNoYW5naW5nIHRoZSBzY3JpcHQgaXRzZWxmLCBieSBkZWZpbmluZyBhIFB5dGhvbiB3cmFwcGVyCithcm91bmQgaXQuIFRoZSBweXRob24gd3JhcHBlciBzaG91bGQgYGBpbXBvcnQgZ2l0X211bHRpbWFpbGBgIGFuZCB0aGVuCitvdmVycmlkZSB0aGUgYGBnaXRfbXVsdGltYWlsLipgYCBzdHJpbmdzIGxpa2UgdGhpczo6CisKKyAgaW1wb3J0IHN5cyAgIyBuZWVkZWQgZm9yIHN5cy5hcmd2CisKKyAgIyBJbXBvcnQgYW5kIGN1c3RvbWl6ZSBnaXRfbXVsdGltYWlsOgorICBpbXBvcnQgZ2l0X211bHRpbWFpbAorICBnaXRfbXVsdGltYWlsLlJFVklTSU9OX0lOVFJPX1RFTVBMQVRFID0gIiIiLi4uIiIiCisgIGdpdF9tdWx0aW1haWwuQ09NQklORURfSU5UUk9fVEVNUExBVEUgPSBnaXRfbXVsdGltYWlsLlJFVklTSU9OX0lOVFJPX1RFTVBMQVRFCisKKyAgIyBzdGFydCBnaXRfbXVsdGltYWlsIGl0c2VsZjoKKyAgZ2l0X211bHRpbWFpbC5tYWluKHN5cy5hcmd2WzE6XSkKKworVGhlIHRlbXBsYXRlIHN0cmluZ3MgY2FuIHVzZSBhbnkgdmFsdWUgYWxyZWFkeSB1c2VkIGluIHRoZSBleGlzdGluZwordGVtcGxhdGVzIChyZWFkIHRoZSBzb3VyY2UgY29kZSkuCisKK1VzaW5nIEhUTUwgaW4gdGVtcGxhdGUgc3RyaW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGBgbXVsdGltYWlsaG9vay5jb21taXRFbWFpbEZvcm1hdGBgIGlzIHNldCB0byBIVE1MLCB0aGVuCitnaXQtbXVsdGltYWlsIHdpbGwgZ2VuZXJhdGUgSFRNTCBlbWFpbHMgZm9yIGNvbW1pdCBub3RpZmljYXRpb25zLiBUaGUKK2xvZyBhbmQgZGlmZiB3aWxsIGJlIGZvcm1hdHRlZCBhdXRvbWF0aWNhbGx5IGJ5IGdpdC1tdWx0aW1haWwuIEJ5CitkZWZhdWx0LCBhbnkgSFRNTCBzcGVjaWFsIGNoYXJhY3RlciBpbiB0aGUgdGVtcGxhdGVzIHdpbGwgYmUgZXNjYXBlZC4KKworVG8gdXNlIEhUTUwgZm9ybWF0dGluZyBpbiB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSBlbWFpbCwgc2V0CitgYG11bHRpbWFpbGhvb2suaHRtbEluSW50cm9gYCB0byBgYHRydWVgYC4gVGhlbiwgdGhlIHRlbXBsYXRlIGNhbgorY29udGFpbiBhbnkgSFRNTCB0YWdzLCB0aGF0IHdpbGwgYmUgc2VudCBhcy1pcyBpbiB0aGUgZW1haWwuIEZvcgorZXhhbXBsZSwgdG8gYWRkIHNvbWUgZm9ybWF0dGluZyBhbmQgYSBsaW5rIHRvIHRoZSBvbmxpbmUgY29tbWl0LCB1c2UKK2EgZm9ybWF0IGxpa2U6OgorCisgIGdpdF9tdWx0aW1haWwuUkVWSVNJT05fSU5UUk9fVEVNUExBVEUgPSAiIiJcCisgIDxzcGFuIHN0eWxlPSJjb2xvcjojODA4MDgwIj5UaGlzIGlzIGFuIGF1dG9tYXRlZCBlbWFpbCBmcm9tIHRoZSBnaXQgaG9va3MvcG9zdC1yZWNlaXZlIHNjcmlwdC48L3NwYW4+PGJyIC8+PGJyIC8+CisKKyAgPHN0cm9uZz4lKHB1c2hlcilzPC9zdHJvbmc+IHB1c2hlZCBhIGNvbW1pdCB0byAlKHJlZm5hbWVfdHlwZSlzICUoc2hvcnRfcmVmbmFtZSlzCisgIGluIHJlcG9zaXRvcnkgJShyZXBvX3Nob3J0bmFtZSlzLjxiciAvPgorCisgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9naXQtbXVsdGltYWlsL2dpdC1tdWx0aW1haWwvY29tbWl0LyUobmV3cmV2KXMiPlZpZXcgb24gR2l0SHViPC9hPi4KKyAgIiIiCisKK05vdGUgdGhhdCB0aGUgdmFsdWVzIGV4cGFuZGVkIGZyb20gYGAlKHZhcmlhYmxlKXNgYCBpbiB0aGUgZm9ybWF0CitzdHJpbmdzIHdpbGwgc3RpbGwgYmUgZXNjYXBlZC4KKworRm9yIGEgbGVzcyBmbGV4aWJsZSBidXQgZWFzaWVyIHRvIHNldCB1cCB3YXkgdG8gYWRkIGEgbGluayB0byBjb21taXQKK2VtYWlscywgc2VlIGBgbXVsdGltYWlsaG9vay5jb21taXRCcm93c2VVUkxgYC4KKworU2ltaWxhcmx5LCBvbmUgY2FuIHNldCBgYG11bHRpbWFpbGhvb2suaHRtbEluRm9vdGVyYGAgYW5kIG92ZXJyaWRlIGFueQorb2YgdGhlIGBgKl9GT09URVIqYGAgdGVtcGxhdGUgc3RyaW5ncy4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2RvYy9nZXJyaXQucnN0IGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZG9jL2dlcnJpdC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxMWQwNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2RvYy9nZXJyaXQucnN0CkBAIC0wLDAgKzEsNTYgQEAKK1NldHRpbmcgdXAgZ2l0LW11bHRpbWFpbCBvbiBHZXJyaXQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworR2Vycml0IGhhcyBpdHMgb3duIGVtYWlsLXNlbmRpbmcgc3lzdGVtLCBidXQgeW91IG1heSBwcmVmZXIgdXNpbmcKK2BgZ2l0LW11bHRpbWFpbGBgIGluc3RlYWQuIEl0IHN1cHBvcnRzIEdlcnJpdCBuYXRpdmVseSBhcyBhIEdlcnJpdAorYGByZWYtdXBkYXRlZGBgIGhvb2sgKFdhcm5pbmc6IGBHZXJyaXQgaG9va3MKKzxodHRwczovL2dlcnJpdC1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbS9Eb2N1bWVudGF0aW9uL2NvbmZpZy1ob29rcy5odG1sPmBfXworYXJlIGRpc3RpbmN0IGZyb20gR2l0IGhvb2tzKS4gU2V0dGluZyB1cCBgYGdpdC1tdWx0aW1haWxgYCBvbiBhIEdlcnJpdAoraW5zdGFsbGF0aW9uIGNhbiBiZSBkb25lIGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGJlbG93LgorCitUaGUgZXhwbGFuYXRpb25zIHNob3cgYW4gZWFzeSB3YXkgdG8gc2V0IHVwIGBgZ2l0LW11bHRpbWFpbGBgLAorYnV0IGxlYXZlIGBgZ2l0LW11bHRpbWFpbGBgIGluc3RhbGxlZCBhbmQgdW5jb25maWd1cmVkIGZvciBhIHdoaWxlLiBJZgoreW91IHJ1biBHZXJyaXQgb24gYSBwcm9kdWN0aW9uIHNlcnZlciwgaXQgaXMgYWR2aXNlZCB0aGF0IHlvdQorZXhlY3V0ZSB0aGUgc3RlcCAiU2V0IHVwIHRoZSBob29rIiBsYXN0IHRvIGF2b2lkIGNvbmZ1c2luZyB5b3VyIHVzZXJzCitpbiB0aGUgbWVhbnRpbWUuCisKK1NldCB1cCB0aGUgaG9vaworLS0tLS0tLS0tLS0tLS0tCisKK0NyZWF0ZSBhIGRpcmVjdG9yeSBgYCRzaXRlX3BhdGgvaG9va3MvYGAgaWYgaXQgZG9lcyBub3QgZXhpc3QgKGlmIHlvdQorZG9uJ3Qga25vdyB3aGF0IGBgJHNpdGVfcGF0aGBgIGlzLCBydW4gYGBnZXJyaXQuc2ggc3RhdHVzYGAgYW5kIGxvb2sKK2ZvciBhIGBgR0VSUklUX1NJVEVgYCBsaW5lKS4gRWl0aGVyIGNvcHkgYGBnaXRfbXVsdGltYWlsLnB5YGAgdG8KK2BgJHNpdGVfcGF0aC9ob29rcy9yZWYtdXBkYXRlZGBgIG9yIGNyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0IGxpa2UKK3RoaXM6OgorCisgICMhIC9iaW4vc2gKKyAgZXhlYyAvcGF0aC90by9naXRfbXVsdGltYWlsLnB5ICIkQCIKKworSW4gYm90aCBjYXNlcywgbWFrZSBzdXJlIHRoZSBmaWxlIGlzIG5hbWVkIGV4YWN0bHkKK2BgJHNpdGVfcGF0aC9ob29rcy9yZWYtdXBkYXRlZGBgIGFuZCBpcyBleGVjdXRhYmxlLgorCisoQWx0ZXJuYXRpdmVseSwgeW91IG1heSBjb25maWd1cmUgdGhlIGBgW2hvb2tzXWBgIHNlY3Rpb24gb2YKK2dlcnJpdC5jb25maWcpCisKK0NvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0KKworTG9nIG9uIHRoZSBnZXJyaXQgc2VydmVyIGFuZCBlZGl0IGBgJHNpdGVfcGF0aC9naXQvJHByb2plY3QvY29uZmlnYGAKK3RvIGNvbmZpZ3VyZSBgYGdpdC1tdWx0aW1haWxgYC4KKworVHJvdWJsZXNob290aW5nCistLS0tLS0tLS0tLS0tLS0KKworV2FybmluZzogdGhpcyB3aWxsIGRpc2FibGUgYGBnaXQtbXVsdGltYWlsYGAgZHVyaW5nIHRoZSBkZWJ1ZywgYW5kCitjb3VsZCBjb25mdXNlIHlvdXIgdXNlcnMuIERvbid0IHJ1biBvbiBhIHByb2R1Y3Rpb24gc2VydmVyLgorCitUbyBkZWJ1ZyBjb25maWd1cmF0aW9uIGlzc3VlcyB3aXRoIGBgZ2l0LW11bHRpbWFpbGBgLCB5b3UgY2FuIGFkZCB0aGUKK2BgLS1zdGRvdXRgYCBvcHRpb24gd2hlbiBjYWxsaW5nIGBgZ2l0X211bHRpbWFpbC5weWBgIGxpa2UgdGhpczo6CisKKyAgIyEvYmluL3NoCisgIGV4ZWMgL3BhdGgvdG8vZ2l0LW11bHRpbWFpbC9naXQtbXVsdGltYWlsL2dpdF9tdWx0aW1haWwucHkgXAorICAgIC0tc3Rkb3V0ICIkQCIgPj4gL3RtcC9sb2cudHh0CisKK2FuZCB0cnkgcHVzaGluZyBmcm9tIGEgdGVzdCByZXBvc2l0b3J5LiBZb3Ugc2hvdWxkIHNlZSB0aGUgc291cmNlIG9mCit0aGUgZW1haWwgdGhhdCB3b3VsZCBoYXZlIGJlZW4gc2VudCBpbiB0aGUgb3V0cHV0IG9mIGBgZ2l0IHB1c2hgYCBpbgordGhlIGZpbGUgYGAvdG1wL2xvZy50eHRgYC4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2RvYy9naXRvbGl0ZS5yc3QgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9kb2MvZ2l0b2xpdGUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNTQ4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9kb2MvZ2l0b2xpdGUucnN0CkBAIC0wLDAgKzEsMTE4IEBACitTZXR0aW5nIHVwIGdpdC1tdWx0aW1haWwgb24gZ2l0b2xpdGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitgYGdpdC1tdWx0aW1haWxgYCBzdXBwb3J0cyBnaXRvbGl0ZSAzIG5hdGl2ZWx5LgorVGhlIGV4cGxhbmF0aW9ucyBiZWxvdyBzaG93IGFuIGVhc3kgd2F5IHRvIHNldCB1cCBgYGdpdC1tdWx0aW1haWxgYCwKK2J1dCBsZWF2ZSBgYGdpdC1tdWx0aW1haWxgYCBpbnN0YWxsZWQgYW5kIHVuY29uZmlndXJlZCBmb3IgYSB3aGlsZS4gSWYKK3lvdSBydW4gZ2l0b2xpdGUgb24gYSBwcm9kdWN0aW9uIHNlcnZlciwgaXQgaXMgYWR2aXNlZCB0aGF0IHlvdQorZXhlY3V0ZSB0aGUgc3RlcCAiU2V0IHVwIHRoZSBob29rIiBsYXN0IHRvIGF2b2lkIGNvbmZ1c2luZyB5b3VyIHVzZXJzCitpbiB0aGUgbWVhbnRpbWUuCisKK1NldCB1cCB0aGUgaG9vaworLS0tLS0tLS0tLS0tLS0tCisKK0xvZyBpbiBhcyB5b3VyIGdpdG9saXRlIHVzZXIuCisKK0NyZWF0ZSBhIGZpbGUgYGAuZ2l0b2xpdGUvaG9va3MvY29tbW9uL3Bvc3QtcmVjZWl2ZWBgIG9uIHlvdXIgZ2l0b2xpdGUKK2FjY291bnQgY29udGFpbmluZyAoYWRhcHQgdGhlIHBhdGgsIG9idmlvdXNseSk6OgorCisgICMhL2Jpbi9zaAorICBleGVjIC9wYXRoL3RvL2dpdC1tdWx0aW1haWwvZ2l0LW11bHRpbWFpbC9naXRfbXVsdGltYWlsLnB5ICIkQCIKKworTWFrZSBzdXJlIGl0J3MgZXhlY3V0YWJsZSAoYGBjaG1vZCAreGBgKS4gUmVjb3JkIHRoZSBob29rIGluCitnaXRvbGl0ZTo6CisKKyAgZ2l0b2xpdGUgc2V0dXAKKworQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLQorCitGaXJzdCwgeW91IGhhdmUgdG8gYWxsb3cgdGhlIGFkbWluIHRvIHNldCBHaXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisKK0FzIGdpdG9saXRlIHVzZXIsIGVkaXQgdGhlIGxpbmUgY29udGFpbmluZyBgYEdJVF9DT05GSUdfS0VZU2BgIGluIGZpbGUKK2BgLmdpdG9saXRlLnJjYGAsIHRvIG1ha2UgaXQgbG9vayBsaWtlOjoKKworICBHSVRfQ09ORklHX0tFWVMgICAgICAgICAgICAgICAgID0+ICAnbXVsdGltYWlsaG9va1wuLionLAorCitZb3UgY2FuIG5vdyBsb2cgb3V0IGFuZCByZXR1cm4gdG8geW91ciBub3JtYWwgdXNlci4KKworSW4gdGhlIGBgZ2l0b2xpdGUtYWRtaW5gYCBjbG9uZSwgZWRpdCB0aGUgZmlsZSBgYGNvbmYvZ2l0b2xpdGUuY29uZmBgCithbmQgYWRkOjoKKworICByZXBvIEBhbGwKKyAgICAgICMgTm90IHN0cmljdGx5IG5lZWRlZCBhcyBnaXRfbXVsdGltYWlsLnB5IHdpbGwgY2hvc2UgZ2l0b2xpdGUgaWYKKyAgICAgICMgJEdMX1VTRVIgaXMgc2V0LgorICAgICAgY29uZmlnIG11bHRpbWFpbGhvb2suZW52aXJvbm1lbnQgPSBnaXRvbGl0ZQorICAgICAgY29uZmlnIG11bHRpbWFpbGhvb2subWFpbGluZ0xpc3QgPSAjIFdoZXJlIGVtYWlscyBzaG91bGQgYmUgc2VudAorICAgICAgY29uZmlnIG11bHRpbWFpbGhvb2suZnJvbSA9ICMgRnJvbSBhZGRyZXNzIHRvIHVzZQorCitOb3RlIHRoYXQgYnkgZGVmYXVsdCwgZ2l0b2xpdGUgZm9yYmlkcyBgYDxgYCBhbmQgYGA+YGAgaW4gdmFyaWFibGUKK3ZhbHVlcyAoZm9yIHNlY3VyaXR5L3BhcmFub2lhIHJlYXNvbnMsIHNlZQorYGNvbXBlbnNhdGluZyBmb3IgVU5TQUZFX1BBVFQKKzxodHRwOi8vZ2l0b2xpdGUuY29tL2dpdG9saXRlL2dpdC1jb25maWcvaW5kZXguaHRtbCNjb21wZW5zYXRpbmctZm9yLXVuc2FmZTk1cGF0dD5gX18KK2luIGdpdG9saXRlJ3MgZG9jdW1lbnRhdGlvbiBmb3IgZXhwbGFuYXRpb25zIGFuZCBhIHdheSB0byBkaXNhYmxlCit0aGlzKS4gQXMgYSBjb25zZXF1ZW5jZSwgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIGBgRmlyc3QgTGFzdAorPEZpcnN0Lkxhc3RAZXhhbXBsZS5jb20+YGAgYXMgcmVjaXBpZW50IGVtYWlsLCBidXQgc3BlY2lmeWluZworYGBGaXJzdC5MYXN0QGV4YW1wbGUuY29tYGAgYWxvbmUgd29ya3MuCisKK09idmlvdXNseSwgeW91IGNhbiBjdXN0b21pemUgYWxsIHBhcmFtZXRlcnMgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcyBieQorYWRkaW5nIHRoZXNlIGBgY29uZmlnIG11bHRpbWFpbGhvb2suKmBgIGxpbmVzIGluIHRoZSBzZWN0aW9uCitjb3JyZXNwb25kaW5nIHRvIGEgcmVwb3NpdG9yeSBvciBzZXQgb2YgcmVwb3NpdG9yaWVzLgorCitUbyBhY3RpdmF0ZSBgYGdpdC1tdWx0aW1haWxgYCBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzLCBkbyBub3Qgc2V0CitgYG11bHRpbWFpbGhvb2subWFpbGluZ0xpc3RgYCBpbiB0aGUgYGBAYWxsYGAgc2VjdGlvbiBhbmQgc2V0IGl0IG9ubHkKK2ZvciByZXBvc2l0b3JpZXMgZm9yIHdoaWNoIHlvdSB3YW50IGBgZ2l0LW11bHRpbWFpbGBgLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHNldCB1cCB0aGUgYGBGcm9tOmBgIGZpZWxkIG9uIGEgcGVyLXVzZXIgYmFzaXMKK2J5IGFkZGluZyBhIGBgQkVHSU4gVVNFUiBFTUFJTFNgYC9gYEVORCBVU0VSIEVNQUlMU2BgIHNlY3Rpb24gKHNlZQorYGAuLi9SRUFETUVgYCkuCisKK1NwZWNpZmljaXRpZXMgb2YgR2l0b2xpdGUgZm9yIENvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRW1wdHkgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1dpdGggZ2l0b2xpdGUsIHRoZSBzeW50YXggYGBjb25maWcgbXVsdGltYWlsaG9vay5jb21taXRMaXN0ID0gIiJgYAordW5zZXRzIHRoZSB2YXJpYWJsZSBpbnN0ZWFkIG9mIHNldHRpbmcgaXQgdG8gYW4gZW1wdHkgc3RyaW5nIChzZWUKK2BoZXJlCis8aHR0cDovL2dpdG9saXRlLmNvbS9naXRvbGl0ZS9naXQtY29uZmlnLmh0bWwjYW4taW1wb3J0YW50LXdhcm5pbmctYWJvdXQtZGVsZXRpbmctYS1jb25maWctbGluZT5gX18pLgorQXMgYSByZXN1bHQsIHRoZXJlIGlzIG5vIHdheSB0byBzZXQgYSB2YXJpYWJsZSB0byB0aGUgZW1wdHkgc3RyaW5nLgorSW4gYWxsIG1vc3QgcGxhY2VzIHdoZXJlIGFuIGVtcHR5IHZhbHVlIGlzIHJlcXVpcmVkLCBnaXQtbXVsdGltYWlsCitub3cgYWxsb3dzIHRvIHNwZWNpZnkgc3BlY2lhbCBgYCJub25lImBgIHZhbHVlIChjYXNlLXNlbnNpdGl2ZSkgdG8KK21lYW4gdGhlIHNhbWUuCisKK0FsdGVybmF0aXZlbHksIG9uZSBjYW4gdXNlIGBgIiAiYGAgKGEgc2luZ2xlIHNwYWNlKSBpbnN0ZWFkIG9mIGBgIiJgYC4KK0luIG1vc3QgY2FzZXMgKGluIHBhcnRpY3VsYXIgYGBtdWx0aW1haWxob29rLipMaXN0YGAgdmFyaWFibGVzKSwgdGhpcword2lsbCBiZSBlcXVpdmFsZW50IHRvIGFuIGVtcHR5IHN0cmluZy4KKworSWYgeW91IGhhdmUgYSB1c2UtY2FzZSB3aGVyZSBgYCJub25lImBgIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHZhbHVlIGFuZAoreW91IG5lZWQgYGAiICJgYCBvciAgYGAiImBgIGluc3RlYWQsIHBsZWFzZSByZXBvcnQgaXQgYXMgYSBidWcgdG8KK2dpdC1tdWx0aW1haWwuCisKK0FsbG93aW5nIFJlZ3VsYXIgRXhwcmVzc2lvbnMgaW4gQ29uZmlndXJhdGlvbgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK2dpdG9saXRlIGhhcyBhIG1lY2hhbmlzbSB0byBwcmV2ZW50IHVuc2FmZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCit2YWx1ZXMsIHdoaWNoIHByZXZlbnQgY2hhcmFjdGVycyBsaWtlIGBgfGBgIGNvbW1vbmx5IHVzZWQgaW4gcmVndWxhcgorZXhwcmVzc2lvbnMuIElmIHlvdSBkbyBub3QgbmVlZCB0aGUgc2FmZXR5IGZlYXR1cmUgb2YgZ2l0b2xpdGUgYW5kCituZWVkIHRvIHVzZSByZWd1bGFyIGV4cHJlc3Npb25zIGluIHlvdXIgY29uZmlndXJhdGlvbiAoZS5nLiBmb3IKK2BgbXVsdGltYWlsaG9vay5yZWZGaWx0ZXIqYGAgdmFyaWFibGVzKSwgc2V0CitgVU5TQUZFX1BBVFQKKzxodHRwOi8vZ2l0b2xpdGUuY29tL2dpdG9saXRlL2dpdC1jb25maWcuaHRtbCN1bnNhZmUtcGF0dD5gX18gdG8gYQorbGVzcyByZXN0cmljdGl2ZSB2YWx1ZS4KKworVHJvdWJsZXNob290aW5nCistLS0tLS0tLS0tLS0tLS0KKworV2FybmluZzogdGhpcyB3aWxsIGRpc2FibGUgYGBnaXQtbXVsdGltYWlsYGAgZHVyaW5nIHRoZSBkZWJ1ZywgYW5kCitjb3VsZCBjb25mdXNlIHlvdXIgdXNlcnMuIERvbid0IHJ1biBvbiBhIHByb2R1Y3Rpb24gc2VydmVyLgorCitUbyBkZWJ1ZyBjb25maWd1cmF0aW9uIGlzc3VlcyB3aXRoIGBgZ2l0LW11bHRpbWFpbGBgLCB5b3UgY2FuIGFkZCB0aGUKK2BgLS1zdGRvdXRgYCBvcHRpb24gd2hlbiBjYWxsaW5nIGBgZ2l0X211bHRpbWFpbC5weWBgIGxpa2UgdGhpczo6CisKKyAgIyEvYmluL3NoCisgIGV4ZWMgL3BhdGgvdG8vZ2l0LW11bHRpbWFpbC9naXQtbXVsdGltYWlsL2dpdF9tdWx0aW1haWwucHkgLS1zdGRvdXQgIiRAIgorCithbmQgdHJ5IHB1c2hpbmcgZnJvbSBhIHRlc3QgcmVwb3NpdG9yeS4gWW91IHNob3VsZCBzZWUgdGhlIHNvdXJjZSBvZgordGhlIGVtYWlsIHRoYXQgd291bGQgaGF2ZSBiZWVuIHNlbnQgaW4gdGhlIG91dHB1dCBvZiBgYGdpdCBwdXNoYGAuCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9kb2MvdHJvdWJsZXNob290aW5nLnJzdCBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2RvYy90cm91Ymxlc2hvb3RpbmcucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MWI1MDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9kb2MvdHJvdWJsZXNob290aW5nLnJzdApAQCAtMCwwICsxLDc4IEBACitUcm91Ymxlc2hvb3RpbmcgaXNzdWVzIHdpdGggZ2l0LW11bHRpbWFpbDogYSBGQVEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitIb3cgdG8gY2hlY2sgdGhhdCBnaXQtbXVsdGltYWlsIGlzIHByb3Blcmx5IHNldCB1cD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTaW5jZSB2ZXJzaW9uIDEuNC4wLCBnaXQtbXVsdGltYWlsIGFsbG93cyBhIHNpbXBsZSBzZWxmLWNoZWNraW5nIG9mCitpdHMgY29uZmlndXJhdGlvbjogcnVuIGl0IHdpdGggdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCitgYEdJVF9NVUxUSU1BSUxfQ0hFQ0tfU0VUVVBgYCBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nLiBZb3Ugc2hvdWxkCitnZXQgc29tZXRoaW5nIGxpa2UgdGhpczo6CisKKyAgJCBHSVRfTVVMVElNQUlMX0NIRUNLX1NFVFVQPXRydWUgL2hvbWUvbW95L2Rldi9naXQtbXVsdGltYWlsL2dpdC1tdWx0aW1haWwvZ2l0X211bHRpbWFpbC5weQorICBFbnZpcm9ubWVudCB2YWx1ZXM6CisgICAgICBhZG1pbmlzdHJhdG9yIDogJ3RoZSBhZG1pbmlzdHJhdG9yIG9mIHRoaXMgcmVwb3NpdG9yeScKKyAgICAgIGNoYXJzZXQgOiAndXRmLTgnCisgICAgICBlbWFpbHByZWZpeCA6ICdbZ2l0LW11bHRpbWFpbF0gJworICAgICAgZnFkbiA6ICdhbmllJworICAgICAgcHJvamVjdGRlc2MgOiAnVU5OQU1FRCBQUk9KRUNUJworICAgICAgcHVzaGVyIDogJ21veScKKyAgICAgIHJlcG9fcGF0aCA6ICcvaG9tZS9tb3kvZGV2L2dpdC1tdWx0aW1haWwnCisgICAgICByZXBvX3Nob3J0bmFtZSA6ICdnaXQtbXVsdGltYWlsJworCisgIE5vdywgY2hlY2tpbmcgdGhhdCBnaXQtbXVsdGltYWlsJ3Mgc3RhbmRhcmQgaW5wdXQgaXMgcHJvcGVybHkgc2V0IC4uLgorICBQbGVhc2UgdHlwZSBzb21lIHRleHQgYW5kIHRoZW4gcHJlc3MgUmV0dXJuCisgIGZvbworICBZb3UgaGF2ZSBqdXN0IGVudGVyZWQ6CisgIGZvbworICBnaXQtbXVsdGltYWlsIHNlZW1zIHByb3Blcmx5IHNldCB1cC4KKworSWYgeW91IGZvcmdvdCB0byBzZXQgYW4gaW1wb3J0YW50IHZhcmlhYmxlLCB5b3UgbWF5IGdldCBpbnN0ZWFkOjoKKworICAkIEdJVF9NVUxUSU1BSUxfQ0hFQ0tfU0VUVVA9dHJ1ZSAvaG9tZS9tb3kvZGV2L2dpdC1tdWx0aW1haWwvZ2l0LW11bHRpbWFpbC9naXRfbXVsdGltYWlsLnB5CisgIE5vIGVtYWlsIHJlY2lwaWVudHMgY29uZmlndXJlZCEKKworRG8gbm90IHNldCBgYCRHSVRfTVVMVElNQUlMX0NIRUNLX1NFVFVQYGAgb3RoZXIgdGhhbiBmb3IgdGVzdGluZyB5b3VyCitjb25maWd1cmF0aW9uOiBpdCB3b3VsZCBkaXNhYmxlIHRoZSBob29rIGNvbXBsZXRlbHkuCisKK0dpdCBpcyBub3QgdXNpbmcgdGhlIHJpZ2h0IGFkZHJlc3MgaW4gdGhlIEZyb20vVG8vUmVwbHktVG8gZmllbGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3QsIG1ha2Ugc3VyZSB0aGF0IGdpdC1tdWx0aW1haWwgYWN0dWFsbHkgdXNlcyB3aGF0IHlvdSB0aGluayBpdCBpcwordXNpbmcuIEEgbG90IGhhcHBlbnMgdG8geW91ciBlbWFpbCAoZXNwZWNpYWxseSB3aGVuIHBvc3RpbmcgdG8gYQorbWFpbGluZy1saXN0KSBiZXR3ZWVuIHRoZSB0aW1lIGBnaXRfbXVsdGltYWlsLnB5YCBzZW5kcyBpdCBhbmQgdGhlCit0aW1lIGl0IHJlYWNoZXMgeW91ciBpbmJveC4KKworQSBzaW1wbGUgdGVzdCAodG8gZG8gb24gYSB0ZXN0IHJlcG9zaXRvcnksIGRvIG5vdCB1c2UgaW4gcHJvZHVjdGlvbiBhcworaXQgd291bGQgZGlzYWJsZSBlbWFpbCBzZW5kaW5nKTogY2hhbmdlIHlvdXIgcG9zdC1yZWNlaXZlIGhvb2sgdG8gY2FsbAorYGdpdF9tdWx0aW1haWwucHlgIHdpdGggdGhlIGAtLXN0ZG91dGAgb3B0aW9uLCBhbmQgdHJ5IHRvIHB1c2ggdG8gdGhlCityZXBvc2l0b3J5LiBZb3Ugc2hvdWxkIHNlZSBzb21ldGhpbmcgbGlrZTo6CisKKyAgQ291bnRpbmcgb2JqZWN0czogMywgZG9uZS4KKyAgV3JpdGluZyBvYmplY3RzOiAxMDAlICgzLzMpLCAyNjMgYnl0ZXMgfCAwIGJ5dGVzL3MsIGRvbmUuCisgIFRvdGFsIDMgKGRlbHRhIDApLCByZXVzZWQgMCAoZGVsdGEgMCkKKyAgcmVtb3RlOiBTZW5kaW5nIG5vdGlmaWNhdGlvbiBlbWFpbHMgdG86IGZvby5iYXJAZXhhbXBsZS5jb20KKyAgcmVtb3RlOiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgcmVtb3RlOiBEYXRlOiBNb24sIDI1IEFwciAyMDE2IDE4OjM5OjU5ICswMjAwCisgIHJlbW90ZTogVG86IGZvby5iYXJAZXhhbXBsZS5jb20KKyAgcmVtb3RlOiBTdWJqZWN0OiBbZ2l0XSBicmFuY2ggbWFzdGVyIHVwZGF0ZWQ6IGZvbworICByZW1vdGU6IE1JTUUtVmVyc2lvbjogMS4wCisgIHJlbW90ZTogQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04CisgIHJlbW90ZTogQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICByZW1vdGU6IE1lc3NhZ2UtSUQ6IDwyMDE2MDQyNTE2Mzk1OS4yMzExLjIwNDk4QGFuaWU+CisgIHJlbW90ZTogRnJvbTogQXV0aCBPciA8Rm9vLkJhckBleGFtcGxlLmNvbT4KKyAgcmVtb3RlOiBSZXBseS1UbzogQXV0aCBPciA8Rm9vLkJhckBleGFtcGxlLmNvbT4KKyAgcmVtb3RlOiBYLUdpdC1Ib3N0OiBleGFtcGxlCisgIC4uLgorICByZW1vdGU6IC0tCisgIHJlbW90ZTogVG8gc3RvcCByZWNlaXZpbmcgbm90aWZpY2F0aW9uIGVtYWlscyBsaWtlIHRoaXMgb25lLCBwbGVhc2UgY29udGFjdAorICByZW1vdGU6IHRoZSBhZG1pbmlzdHJhdG9yIG9mIHRoaXMgcmVwb3NpdG9yeS4KKyAgcmVtb3RlOiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgVG8gL3BhdGgvdG8vcmVwbworICAgICA2Mjc4ZjA0Li5lMTczZjIwICBtYXN0ZXIgLT4gbWFzdGVyCisKK05vdGU6IHRoaXMgZG9lcyBub3QgaW5jbHVkZSB0aGUgc2VuZGVyIChSZXR1cm4tUGF0aDogaGVhZGVyKSwgYXMgaXQgaXMKK25vdCBwYXJ0IG9mIHRoZSBtZXNzYWdlIGNvbnRlbnQgYnV0IHBhc3NlZCB0byB0aGUgbWFpbGVyLiBTb21lIG1haWxlcgorc2hvdyB0aGUgYGBTZW5kZXI6YGAgZmllbGQgaW5zdGVhZCBvZiB0aGUgYGBGcm9tOmBgIGZpZWxkIChmb3IKK2V4YW1wbGUsIFppbWJyYSBXZWJtYWlsIHNob3dzIGBgRnJvbTogPHNlbmRlci1maWVsZD4gb24gYmVoYWxmIG9mCis8ZnJvbS1maWVsZD5gYCkuCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9naXRfbXVsdGltYWlsLnB5IGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZ2l0X211bHRpbWFpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNTYzYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZ2l0X211bHRpbWFpbC5weQpAQCAtMCwwICsxLDQzNDYgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworX192ZXJzaW9uX18gPSAnMS41LjAnCisKKyMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYgTWF0dGhpZXUgTW95IGFuZCBvdGhlcnMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgTWljaGFlbCBIYWdnZXJ0eSBhbmQgb3RoZXJzCisjIERlcml2ZWQgZnJvbSBjb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbCwgd2hpY2ggaXMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEFuZHkgUGFya2lucworIyBhbmQgYWxzbyBpbmNsdWRlcyBjb250cmlidXRpb25zIGJ5IG90aGVyIGF1dGhvcnMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGdpdC1tdWx0aW1haWwuCisjCisjIGdpdC1tdWx0aW1haWwgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyMgMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZQorIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyIiIkdlbmVyYXRlIG5vdGlmaWNhdGlvbiBlbWFpbHMgZm9yIHB1c2hlcyB0byBhIGdpdCByZXBvc2l0b3J5LgorCitUaGlzIGhvb2sgc2VuZHMgZW1haWxzIGRlc2NyaWJpbmcgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IHB1c2hlcyB0byBhCitnaXQgcmVwb3NpdG9yeS4gIEZvciBlYWNoIHJlZmVyZW5jZSB0aGF0IHdhcyBjaGFuZ2VkLCBpdCBlbWl0cyBvbmUKK1JlZmVyZW5jZUNoYW5nZSBlbWFpbCBzdW1tYXJpemluZyBob3cgdGhlIHJlZmVyZW5jZSB3YXMgY2hhbmdlZCwKK2ZvbGxvd2VkIGJ5IG9uZSBSZXZpc2lvbiBlbWFpbCBmb3IgZWFjaCBuZXcgY29tbWl0IHRoYXQgd2FzIGludHJvZHVjZWQKK2J5IHRoZSByZWZlcmVuY2UgY2hhbmdlLgorCitFYWNoIGNvbW1pdCBpcyBhbm5vdW5jZWQgaW4gZXhhY3RseSBvbmUgUmV2aXNpb24gZW1haWwuICBJZiB0aGUgc2FtZQorY29tbWl0IGlzIG1lcmdlZCBpbnRvIGFub3RoZXIgYnJhbmNoIGluIHRoZSBzYW1lIG9yIGEgbGF0ZXIgcHVzaCwgdGhlbgordGhlIFJlZmVyZW5jZUNoYW5nZSBlbWFpbCB3aWxsIGxpc3QgdGhlIGNvbW1pdCdzIFNIQTEgYW5kIGl0cyBvbmUtbGluZQorc3VtbWFyeSwgYnV0IG5vIG5ldyBSZXZpc2lvbiBlbWFpbCB3aWxsIGJlIGdlbmVyYXRlZC4KKworVGhpcyBzY3JpcHQgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhICJwb3N0LXJlY2VpdmUiIGhvb2sgaW4gYSBnaXQKK3JlcG9zaXRvcnkgKHNlZSBnaXRob29rcyg1KSkuICBJdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGFuICJ1cGRhdGUiCitzY3JpcHQsIGJ1dCB0aGlzIHVzYWdlIGlzIG5vdCBjb21wbGV0ZWx5IHJlbGlhYmxlIGFuZCBpcyBkZXByZWNhdGVkLgorCitUbyBoZWxwIHdpdGggZGVidWdnaW5nLCB0aGlzIHNjcmlwdCBhY2NlcHRzIGEgLS1zdGRvdXQgb3B0aW9uLCB3aGljaAorY2F1c2VzIHRoZSBlbWFpbHMgdG8gYmUgd3JpdHRlbiB0byBzdGFuZGFyZCBvdXRwdXQgcmF0aGVyIHRoYW4gc2VudAordXNpbmcgc2VuZG1haWwuCisKK1NlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlIGZvciB0aGUgY29tcGxldGUgZG9jdW1lbnRhdGlvbi4KKworIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgYmlzZWN0CitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHNobGV4CitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc210cGxpYgordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAjIFB5dGhvbiA8IDIuNiBkbyBub3QgaGF2ZSBzc2wsIGJ1dCB0aGF0J3MgT0sgaWYgd2UgZG9uJ3QgdXNlIGl0LgorICAgIHBhc3MKK2ltcG9ydCB0aW1lCisKK2ltcG9ydCB1dWlkCitpbXBvcnQgYmFzZTY0CisKK1BZVEhPTjMgPSBzeXMudmVyc2lvbl9pbmZvID49ICgzLCAwKQorCitpZiBzeXMudmVyc2lvbl9pbmZvIDw9ICgyLCA1KToKKyAgICBkZWYgYWxsKGl0ZXJhYmxlKToKKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gaXRlcmFibGU6CisgICAgICAgICAgICBpZiBub3QgZWxlbWVudDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitkZWYgaXNfYXNjaWkocyk6CisgICAgcmV0dXJuIGFsbChvcmQoYykgPCAxMjggYW5kIG9yZChjKSA+IDAgZm9yIGMgaW4gcykKKworCitpZiBQWVRIT04zOgorICAgIGRlZiBpc19zdHJpbmcocyk6CisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKHMsIHN0cikKKworICAgIGRlZiBzdHJfdG9fYnl0ZXMocyk6CisgICAgICAgIHJldHVybiBzLmVuY29kZShFTkNPRElORykKKworICAgIGRlZiBieXRlc190b19zdHIocywgZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIHMuZGVjb2RlKEVOQ09ESU5HLCBlcnJvcnMpCisKKyAgICB1bmljb2RlID0gc3RyCisKKyAgICBkZWYgd3JpdGVfc3RyKGYsIG1zZyk6CisgICAgICAgICMgVHJ5IG91dHB1dHRpbmcgd2l0aCB0aGUgZGVmYXVsdCBlbmNvZGluZy4gSWYgaXQgZmFpbHMsCisgICAgICAgICMgdHJ5IFVURi04LgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLmJ1ZmZlci53cml0ZShtc2cuZW5jb2RlKHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcoKSkpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICBmLmJ1ZmZlci53cml0ZShtc2cuZW5jb2RlKEVOQ09ESU5HKSkKKworICAgIGRlZiByZWFkX2xpbmUoZik6CisgICAgICAgICMgVHJ5IHJlYWRpbmcgd2l0aCB0aGUgZGVmYXVsdCBlbmNvZGluZy4gSWYgaXQgZmFpbHMsCisgICAgICAgICMgdHJ5IFVURi04LgorICAgICAgICBvdXQgPSBmLmJ1ZmZlci5yZWFkbGluZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBvdXQuZGVjb2RlKHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcoKSkKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBvdXQuZGVjb2RlKEVOQ09ESU5HKQorCisgICAgaW1wb3J0IGh0bWwKKworICAgIGRlZiBodG1sX2VzY2FwZShzKToKKyAgICAgICAgcmV0dXJuIGh0bWwuZXNjYXBlKHMpCisKK2Vsc2U6CisgICAgZGVmIGlzX3N0cmluZyhzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UocywgYmFzZXN0cmluZykKKyAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjogICMgU2lsZW5jZSBQeWZsYWtlcyB3YXJuaW5nCisgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHN0cl90b19ieXRlcyhzKToKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBieXRlc190b19zdHIocywgZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiB3cml0ZV9zdHIoZiwgbXNnKToKKyAgICAgICAgZi53cml0ZShtc2cpCisKKyAgICBkZWYgcmVhZF9saW5lKGYpOgorICAgICAgICByZXR1cm4gZi5yZWFkbGluZSgpCisKKyAgICBkZWYgbmV4dChpdCk6CisgICAgICAgIHJldHVybiBpdC5uZXh0KCkKKworICAgIGltcG9ydCBjZ2kKKworICAgIGRlZiBodG1sX2VzY2FwZShzKToKKyAgICAgICAgcmV0dXJuIGNnaS5lc2NhcGUocywgVHJ1ZSkKKwordHJ5OgorICAgIGZyb20gZW1haWwuY2hhcnNldCBpbXBvcnQgQ2hhcnNldAorICAgIGZyb20gZW1haWwudXRpbHMgaW1wb3J0IG1ha2VfbXNnaWQKKyAgICBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBnZXRhZGRyZXNzZXMKKyAgICBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBmb3JtYXRhZGRyCisgICAgZnJvbSBlbWFpbC51dGlscyBpbXBvcnQgZm9ybWF0ZGF0ZQorICAgIGZyb20gZW1haWwuaGVhZGVyIGltcG9ydCBIZWFkZXIKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAjIFByaW9yIHRvIFB5dGhvbiAyLjUsIHRoZSBlbWFpbCBtb2R1bGUgdXNlZCBkaWZmZXJlbnQgbmFtZXM6CisgICAgZnJvbSBlbWFpbC5DaGFyc2V0IGltcG9ydCBDaGFyc2V0CisgICAgZnJvbSBlbWFpbC5VdGlscyBpbXBvcnQgbWFrZV9tc2dpZAorICAgIGZyb20gZW1haWwuVXRpbHMgaW1wb3J0IGdldGFkZHJlc3NlcworICAgIGZyb20gZW1haWwuVXRpbHMgaW1wb3J0IGZvcm1hdGFkZHIKKyAgICBmcm9tIGVtYWlsLlV0aWxzIGltcG9ydCBmb3JtYXRkYXRlCisgICAgZnJvbSBlbWFpbC5IZWFkZXIgaW1wb3J0IEhlYWRlcgorCisKK0RFQlVHID0gRmFsc2UKKworWkVST1MgPSAnMCcgKiA0MAorTE9HQkVHSU4gPSAnLSBMb2cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbicKK0xPR0VORCA9ICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJworCitBRERSX0hFQURFUlMgPSBzZXQoWydmcm9tJywgJ3RvJywgJ2NjJywgJ2JjYycsICdyZXBseS10bycsICdzZW5kZXInXSkKKworIyBJdCBpcyBhc3N1bWVkIGluIG1hbnkgcGxhY2VzIHRoYXQgdGhlIGVuY29kaW5nIGlzIHVuaWZvcm1seSBVVEYtOCwKKyMgc28gY2hhbmdpbmcgdGhlc2UgY29uc3RhbnRzIGlzIHVuc3VwcG9ydGVkLiAgQnV0IGRlZmluZSB0aGVtIGhlcmUKKyMgYW55d2F5LCB0byBtYWtlIGl0IGVhc2llciB0byBmaW5kIChhdCBsZWFzdCBtb3N0IG9mKSB0aGUgcGxhY2VzCisjIHdoZXJlIHRoZSBlbmNvZGluZyBpcyBpbXBvcnRhbnQuCisoRU5DT0RJTkcsIENIQVJTRVQpID0gKCdVVEYtOCcsICd1dGYtOCcpCisKKworUkVGX0NSRUFURURfU1VCSkVDVF9URU1QTEFURSA9ICgKKyAgICAnJShlbWFpbHByZWZpeClzJShyZWZuYW1lX3R5cGUpcyAlKHNob3J0X3JlZm5hbWUpcyBjcmVhdGVkJworICAgICcgKG5vdyAlKG5ld3Jldl9zaG9ydClzKScKKyAgICApCitSRUZfVVBEQVRFRF9TVUJKRUNUX1RFTVBMQVRFID0gKAorICAgICclKGVtYWlscHJlZml4KXMlKHJlZm5hbWVfdHlwZSlzICUoc2hvcnRfcmVmbmFtZSlzIHVwZGF0ZWQnCisgICAgJyAoJShvbGRyZXZfc2hvcnQpcyAtPiAlKG5ld3Jldl9zaG9ydClzKScKKyAgICApCitSRUZfREVMRVRFRF9TVUJKRUNUX1RFTVBMQVRFID0gKAorICAgICclKGVtYWlscHJlZml4KXMlKHJlZm5hbWVfdHlwZSlzICUoc2hvcnRfcmVmbmFtZSlzIGRlbGV0ZWQnCisgICAgJyAod2FzICUob2xkcmV2X3Nob3J0KXMpJworICAgICkKKworQ09NQklORURfUkVGQ0hBTkdFX1JFVklTSU9OX1NVQkpFQ1RfVEVNUExBVEUgPSAoCisgICAgJyUoZW1haWxwcmVmaXgpcyUocmVmbmFtZV90eXBlKXMgJShzaG9ydF9yZWZuYW1lKXMgdXBkYXRlZDogJShvbmVsaW5lKXMnCisgICAgKQorCitSRUZDSEFOR0VfSEVBREVSX1RFTVBMQVRFID0gIiIiXAorRGF0ZTogJShzZW5kX2RhdGUpcworVG86ICUocmVjaXBpZW50cylzCitTdWJqZWN0OiAlKHN1YmplY3QpcworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC8lKGNvbnRlbnR0eXBlKXM7IGNoYXJzZXQ9JShjaGFyc2V0KXMKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK01lc3NhZ2UtSUQ6ICUobXNnaWQpcworRnJvbTogJShmcm9tYWRkcilzCitSZXBseS1UbzogJShyZXBseV90bylzCitUaHJlYWQtSW5kZXg6ICUodGhyZWFkX2luZGV4KXMKK1gtR2l0LUhvc3Q6ICUoZnFkbilzCitYLUdpdC1SZXBvOiAlKHJlcG9fc2hvcnRuYW1lKXMKK1gtR2l0LVJlZm5hbWU6ICUocmVmbmFtZSlzCitYLUdpdC1SZWZ0eXBlOiAlKHJlZm5hbWVfdHlwZSlzCitYLUdpdC1PbGRyZXY6ICUob2xkcmV2KXMKK1gtR2l0LU5ld3JldjogJShuZXdyZXYpcworWC1HaXQtTm90aWZpY2F0aW9uVHlwZTogcmVmX2NoYW5nZWQKK1gtR2l0LU11bHRpbWFpbC1WZXJzaW9uOiAlKG11bHRpbWFpbF92ZXJzaW9uKXMKK0F1dG8tU3VibWl0dGVkOiBhdXRvLWdlbmVyYXRlZAorIiIiCisKK1JFRkNIQU5HRV9JTlRST19URU1QTEFURSA9ICIiIlwKK1RoaXMgaXMgYW4gYXV0b21hdGVkIGVtYWlsIGZyb20gdGhlIGdpdCBob29rcy9wb3N0LXJlY2VpdmUgc2NyaXB0LgorCislKHB1c2hlcilzIHB1c2hlZCBhIGNoYW5nZSB0byAlKHJlZm5hbWVfdHlwZSlzICUoc2hvcnRfcmVmbmFtZSlzCitpbiByZXBvc2l0b3J5ICUocmVwb19zaG9ydG5hbWUpcy4KKworIiIiCisKKworRk9PVEVSX1RFTVBMQVRFID0gIiIiXAorCistLSBcblwKK1RvIHN0b3AgcmVjZWl2aW5nIG5vdGlmaWNhdGlvbiBlbWFpbHMgbGlrZSB0aGlzIG9uZSwgcGxlYXNlIGNvbnRhY3QKKyUoYWRtaW5pc3RyYXRvcilzLgorIiIiCisKKworUkVXSU5EX09OTFlfVEVNUExBVEUgPSAiIiJcCitUaGlzIHVwZGF0ZSByZW1vdmVkIGV4aXN0aW5nIHJldmlzaW9ucyBmcm9tIHRoZSByZWZlcmVuY2UsIGxlYXZpbmcgdGhlCityZWZlcmVuY2UgcG9pbnRpbmcgYXQgYSBwcmV2aW91cyBwb2ludCBpbiB0aGUgcmVwb3NpdG9yeSBoaXN0b3J5LgorCisgKiAtLSAqIC0tIE4gICAlKHJlZm5hbWUpcyAoJShuZXdyZXZfc2hvcnQpcykKKyAgICAgICAgICAgIFxcCisgICAgICAgICAgICAgTyAtLSBPIC0tIE8gICAoJShvbGRyZXZfc2hvcnQpcykKKworQW55IHJldmlzaW9ucyBtYXJrZWQgIm9taXQiIGFyZSBub3QgZ29uZTsgb3RoZXIgcmVmZXJlbmNlcyBzdGlsbAorcmVmZXIgdG8gdGhlbS4gIEFueSByZXZpc2lvbnMgbWFya2VkICJkaXNjYXJkIiBhcmUgZ29uZSBmb3JldmVyLgorIiIiCisKKworTk9OX0ZGX1RFTVBMQVRFID0gIiIiXAorVGhpcyB1cGRhdGUgYWRkZWQgbmV3IHJldmlzaW9ucyBhZnRlciB1bmRvaW5nIGV4aXN0aW5nIHJldmlzaW9ucy4KK1RoYXQgaXMgdG8gc2F5LCBzb21lIHJldmlzaW9ucyB0aGF0IHdlcmUgaW4gdGhlIG9sZCB2ZXJzaW9uIG9mIHRoZQorJShyZWZuYW1lX3R5cGUpcyBhcmUgbm90IGluIHRoZSBuZXcgdmVyc2lvbi4gIFRoaXMgc2l0dWF0aW9uIG9jY3Vycword2hlbiBhIHVzZXIgLS1mb3JjZSBwdXNoZXMgYSBjaGFuZ2UgYW5kIGdlbmVyYXRlcyBhIHJlcG9zaXRvcnkKK2NvbnRhaW5pbmcgc29tZXRoaW5nIGxpa2UgdGhpczoKKworICogLS0gKiAtLSBCIC0tIE8gLS0gTyAtLSBPICAgKCUob2xkcmV2X3Nob3J0KXMpCisgICAgICAgICAgICBcXAorICAgICAgICAgICAgIE4gLS0gTiAtLSBOICAgJShyZWZuYW1lKXMgKCUobmV3cmV2X3Nob3J0KXMpCisKK1lvdSBzaG91bGQgYWxyZWFkeSBoYXZlIHJlY2VpdmVkIG5vdGlmaWNhdGlvbiBlbWFpbHMgZm9yIGFsbCBvZiB0aGUgTworcmV2aXNpb25zLCBhbmQgc28gdGhlIGZvbGxvd2luZyBlbWFpbHMgZGVzY3JpYmUgb25seSB0aGUgTiByZXZpc2lvbnMKK2Zyb20gdGhlIGNvbW1vbiBiYXNlLCBCLgorCitBbnkgcmV2aXNpb25zIG1hcmtlZCAib21pdCIgYXJlIG5vdCBnb25lOyBvdGhlciByZWZlcmVuY2VzIHN0aWxsCityZWZlciB0byB0aGVtLiAgQW55IHJldmlzaW9ucyBtYXJrZWQgImRpc2NhcmQiIGFyZSBnb25lIGZvcmV2ZXIuCisiIiIKKworCitOT19ORVdfUkVWSVNJT05TX1RFTVBMQVRFID0gIiIiXAorTm8gbmV3IHJldmlzaW9ucyB3ZXJlIGFkZGVkIGJ5IHRoaXMgdXBkYXRlLgorIiIiCisKKworRElTQ0FSREVEX1JFVklTSU9OU19URU1QTEFURSA9ICIiIlwKK1RoaXMgY2hhbmdlIHBlcm1hbmVudGx5IGRpc2NhcmRzIHRoZSBmb2xsb3dpbmcgcmV2aXNpb25zOgorIiIiCisKKworTk9fRElTQ0FSREVEX1JFVklTSU9OU19URU1QTEFURSA9ICIiIlwKK1RoZSByZXZpc2lvbnMgdGhhdCB3ZXJlIG9uIHRoaXMgJShyZWZuYW1lX3R5cGUpcyBhcmUgc3RpbGwgY29udGFpbmVkIGluCitvdGhlciByZWZlcmVuY2VzOyB0aGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGRpc2NhcmQgYW55IGNvbW1pdHMKK2Zyb20gdGhlIHJlcG9zaXRvcnkuCisiIiIKKworCitORVdfUkVWSVNJT05TX1RFTVBMQVRFID0gIiIiXAorVGhlICUodG90KXMgcmV2aXNpb25zIGxpc3RlZCBhYm92ZSBhcyAibmV3IiBhcmUgZW50aXJlbHkgbmV3IHRvIHRoaXMKK3JlcG9zaXRvcnkgYW5kIHdpbGwgYmUgZGVzY3JpYmVkIGluIHNlcGFyYXRlIGVtYWlscy4gIFRoZSByZXZpc2lvbnMKK2xpc3RlZCBhcyAiYWRkIiB3ZXJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcmVwb3NpdG9yeSBhbmQgaGF2ZSBvbmx5CitiZWVuIGFkZGVkIHRvIHRoaXMgcmVmZXJlbmNlLgorCisiIiIKKworCitUQUdfQ1JFQVRFRF9URU1QTEFURSA9ICIiIlwKKyAgICAgIGF0ICUobmV3cmV2X3Nob3J0KS04cyAoJShuZXdyZXZfdHlwZSlzKQorIiIiCisKKworVEFHX1VQREFURURfVEVNUExBVEUgPSAiIiJcCisqKiogV0FSTklORzogdGFnICUoc2hvcnRfcmVmbmFtZSlzIHdhcyBtb2RpZmllZCEgKioqCisKKyAgICBmcm9tICUob2xkcmV2X3Nob3J0KS04cyAoJShvbGRyZXZfdHlwZSlzKQorICAgICAgdG8gJShuZXdyZXZfc2hvcnQpLThzICglKG5ld3Jldl90eXBlKXMpCisiIiIKKworCitUQUdfREVMRVRFRF9URU1QTEFURSA9ICIiIlwKKyoqKiBXQVJOSU5HOiB0YWcgJShzaG9ydF9yZWZuYW1lKXMgd2FzIGRlbGV0ZWQhICoqKgorCisiIiIKKworCisjIFRoZSB0ZW1wbGF0ZSB1c2VkIGluIHN1bW1hcnkgdGFibGVzLiAgSXQgbG9va3MgYmVzdCBpZiB0aGlzIHVzZXMgdGhlCisjIHNhbWUgYWxpZ25tZW50IGFzIFRBR19DUkVBVEVEX1RFTVBMQVRFIGFuZCBUQUdfVVBEQVRFRF9URU1QTEFURS4KK0JSSUVGX1NVTU1BUllfVEVNUExBVEUgPSAiIiJcCislKGFjdGlvbik4cyAlKHJldl9zaG9ydCktOHMgJSh0ZXh0KXMKKyIiIgorCisKK05PTl9DT01NSVRfVVBEQVRFX1RFTVBMQVRFID0gIiIiXAorVGhpcyBpcyBhbiB1bnVzdWFsIHJlZmVyZW5jZSBjaGFuZ2UgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIGRpZCBub3QKK3JlZmVyIHRvIGEgY29tbWl0IGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNoYW5nZS4gIFdlIGRvIG5vdCBrbm93Citob3cgdG8gcHJvdmlkZSBmdWxsIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcmVmZXJlbmNlIGNoYW5nZS4KKyIiIgorCisKK1JFVklTSU9OX0hFQURFUl9URU1QTEFURSA9ICIiIlwKK0RhdGU6ICUoc2VuZF9kYXRlKXMKK1RvOiAlKHJlY2lwaWVudHMpcworQ2M6ICUoY2NfcmVjaXBpZW50cylzCitTdWJqZWN0OiAlKGVtYWlscHJlZml4KXMlKG51bSkwMmQvJSh0b3QpMDJkOiAlKG9uZWxpbmUpcworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC8lKGNvbnRlbnR0eXBlKXM7IGNoYXJzZXQ9JShjaGFyc2V0KXMKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0Zyb206ICUoZnJvbWFkZHIpcworUmVwbHktVG86ICUocmVwbHlfdG8pcworSW4tUmVwbHktVG86ICUocmVwbHlfdG9fbXNnaWQpcworUmVmZXJlbmNlczogJShyZXBseV90b19tc2dpZClzCitUaHJlYWQtSW5kZXg6ICUodGhyZWFkX2luZGV4KXMKK1gtR2l0LUhvc3Q6ICUoZnFkbilzCitYLUdpdC1SZXBvOiAlKHJlcG9fc2hvcnRuYW1lKXMKK1gtR2l0LVJlZm5hbWU6ICUocmVmbmFtZSlzCitYLUdpdC1SZWZ0eXBlOiAlKHJlZm5hbWVfdHlwZSlzCitYLUdpdC1SZXY6ICUocmV2KXMKK1gtR2l0LU5vdGlmaWNhdGlvblR5cGU6IGRpZmYKK1gtR2l0LU11bHRpbWFpbC1WZXJzaW9uOiAlKG11bHRpbWFpbF92ZXJzaW9uKXMKK0F1dG8tU3VibWl0dGVkOiBhdXRvLWdlbmVyYXRlZAorIiIiCisKK1JFVklTSU9OX0lOVFJPX1RFTVBMQVRFID0gIiIiXAorVGhpcyBpcyBhbiBhdXRvbWF0ZWQgZW1haWwgZnJvbSB0aGUgZ2l0IGhvb2tzL3Bvc3QtcmVjZWl2ZSBzY3JpcHQuCisKKyUocHVzaGVyKXMgcHVzaGVkIGEgY29tbWl0IHRvICUocmVmbmFtZV90eXBlKXMgJShzaG9ydF9yZWZuYW1lKXMKK2luIHJlcG9zaXRvcnkgJShyZXBvX3Nob3J0bmFtZSlzLgorCisiIiIKKworTElOS19URVhUX1RFTVBMQVRFID0gIiIiXAorVmlldyB0aGUgY29tbWl0IG9ubGluZToKKyUoYnJvd3NlX3VybClzCisKKyIiIgorCitMSU5LX0hUTUxfVEVNUExBVEUgPSAiIiJcCis8cD48YSBocmVmPSIlKGJyb3dzZV91cmwpcyI+VmlldyB0aGUgY29tbWl0IG9ubGluZTwvYT4uPC9wPgorIiIiCisKKworUkVWSVNJT05fRk9PVEVSX1RFTVBMQVRFID0gRk9PVEVSX1RFTVBMQVRFCisKKworIyBDb21iaW5lZCwgbWVhbmluZyByZWZjaGFuZ2UrcmV2aXNpb24gZW1haWwgKGZvciBzaW5nbGUtY29tbWl0IGFkZGl0aW9ucykKK0NPTUJJTkVEX0hFQURFUl9URU1QTEFURSA9ICIiIlwKK0RhdGU6ICUoc2VuZF9kYXRlKXMKK1RvOiAlKHJlY2lwaWVudHMpcworU3ViamVjdDogJShzdWJqZWN0KXMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvJShjb250ZW50dHlwZSlzOyBjaGFyc2V0PSUoY2hhcnNldClzCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitNZXNzYWdlLUlEOiAlKG1zZ2lkKXMKK0Zyb206ICUoZnJvbWFkZHIpcworUmVwbHktVG86ICUocmVwbHlfdG8pcworWC1HaXQtSG9zdDogJShmcWRuKXMKK1gtR2l0LVJlcG86ICUocmVwb19zaG9ydG5hbWUpcworWC1HaXQtUmVmbmFtZTogJShyZWZuYW1lKXMKK1gtR2l0LVJlZnR5cGU6ICUocmVmbmFtZV90eXBlKXMKK1gtR2l0LU9sZHJldjogJShvbGRyZXYpcworWC1HaXQtTmV3cmV2OiAlKG5ld3JldilzCitYLUdpdC1SZXY6ICUocmV2KXMKK1gtR2l0LU5vdGlmaWNhdGlvblR5cGU6IHJlZl9jaGFuZ2VkX3BsdXNfZGlmZgorWC1HaXQtTXVsdGltYWlsLVZlcnNpb246ICUobXVsdGltYWlsX3ZlcnNpb24pcworQXV0by1TdWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVkCisiIiIKKworQ09NQklORURfSU5UUk9fVEVNUExBVEUgPSAiIiJcCitUaGlzIGlzIGFuIGF1dG9tYXRlZCBlbWFpbCBmcm9tIHRoZSBnaXQgaG9va3MvcG9zdC1yZWNlaXZlIHNjcmlwdC4KKworJShwdXNoZXIpcyBwdXNoZWQgYSBjb21taXQgdG8gJShyZWZuYW1lX3R5cGUpcyAlKHNob3J0X3JlZm5hbWUpcworaW4gcmVwb3NpdG9yeSAlKHJlcG9fc2hvcnRuYW1lKXMuCisKKyIiIgorCitDT01CSU5FRF9GT09URVJfVEVNUExBVEUgPSBGT09URVJfVEVNUExBVEUKKworCitjbGFzcyBDb21tYW5kRXJyb3IoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY21kLCByZXRjb2RlKToKKyAgICAgICAgc2VsZi5jbWQgPSBjbWQKKyAgICAgICAgc2VsZi5yZXRjb2RlID0gcmV0Y29kZQorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oCisgICAgICAgICAgICBzZWxmLAorICAgICAgICAgICAgJ0NvbW1hbmQgIiVzIiBmYWlsZWQgd2l0aCByZXRjb2RlICVzJyAlICgnICcuam9pbihjbWQpLCByZXRjb2RlLCkKKyAgICAgICAgICAgICkKKworCitjbGFzcyBDb25maWd1cmF0aW9uRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKKyMgVGhlICJnaXQiIHByb2dyYW0gKHRoaXMgY291bGQgYmUgY2hhbmdlZCB0byBpbmNsdWRlIGEgZnVsbCBwYXRoKToKK0dJVF9FWEVDVVRBQkxFID0gJ2dpdCcKKworCisjIEhvdyAiZ2l0IiBzaG91bGQgYmUgaW52b2tlZCAoaW5jbHVkaW5nIGdsb2JhbCBhcmd1bWVudHMpLCBhcyBhIGxpc3QKKyMgb2Ygd29yZHMuICBUaGlzIHZhcmlhYmxlIGlzIHVzdWFsbHkgaW5pdGlhbGl6ZWQgYXV0b21hdGljYWxseSBieQorIyByZWFkX2dpdF9vdXRwdXQoKSB2aWEgY2hvb3NlX2dpdF9jb21tYW5kKCksIGJ1dCBpZiBhIHZhbHVlIGlzIHNldAorIyBoZXJlIHRoZW4gaXQgd2lsbCBiZSB1c2VkIHVuY29uZGl0aW9uYWxseS4KK0dJVF9DTUQgPSBOb25lCisKKworZGVmIGNob29zZV9naXRfY29tbWFuZCgpOgorICAgICIiIkRlY2lkZSBob3cgdG8gaW52b2tlIGdpdCwgYW5kIHJlY29yZCB0aGUgY2hvaWNlIGluIEdJVF9DTUQuIiIiCisKKyAgICBnbG9iYWwgR0lUX0NNRAorCisgICAgaWYgR0lUX0NNRCBpcyBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIENoZWNrIHRvIHNlZSB3aGV0aGVyIHRoZSAiLWMiIG9wdGlvbiBpcyBhY2NlcHRlZCAoaXQgd2FzCisgICAgICAgICAgICAjIG9ubHkgYWRkZWQgaW4gR2l0IDEuNy4yKS4gIFdlIGRvbid0IGFjdHVhbGx5IHVzZSB0aGUKKyAgICAgICAgICAgICMgb3V0cHV0IG9mICJnaXQgLS12ZXJzaW9uIiwgdGhvdWdoIGlmIHdlIG5lZWRlZCBtb3JlCisgICAgICAgICAgICAjIHNwZWNpZmljIHZlcnNpb24gaW5mb3JtYXRpb24gdGhpcyB3b3VsZCBiZSB0aGUgcGxhY2UgdG8KKyAgICAgICAgICAgICMgZG8gaXQuCisgICAgICAgICAgICBjbWQgPSBbR0lUX0VYRUNVVEFCTEUsICctYycsICdmb28uYmFyPWJheicsICctLXZlcnNpb24nXQorICAgICAgICAgICAgcmVhZF9vdXRwdXQoY21kKQorICAgICAgICAgICAgR0lUX0NNRCA9IFtHSVRfRVhFQ1VUQUJMRSwgJy1jJywgJ2kxOG4ubG9nb3V0cHV0ZW5jb2Rpbmc9JXMnICUgKEVOQ09ESU5HLCldCisgICAgICAgIGV4Y2VwdCBDb21tYW5kRXJyb3I6CisgICAgICAgICAgICBHSVRfQ01EID0gW0dJVF9FWEVDVVRBQkxFXQorCisKK2RlZiByZWFkX2dpdF9vdXRwdXQoYXJncywgaW5wdXQ9Tm9uZSwga2VlcGVuZHM9RmFsc2UsICoqa3cpOgorICAgICIiIlJlYWQgdGhlIG91dHB1dCBvZiBhIEdpdCBjb21tYW5kLiIiIgorCisgICAgaWYgR0lUX0NNRCBpcyBOb25lOgorICAgICAgICBjaG9vc2VfZ2l0X2NvbW1hbmQoKQorCisgICAgcmV0dXJuIHJlYWRfb3V0cHV0KEdJVF9DTUQgKyBhcmdzLCBpbnB1dD1pbnB1dCwga2VlcGVuZHM9a2VlcGVuZHMsICoqa3cpCisKKworZGVmIHJlYWRfb3V0cHV0KGNtZCwgaW5wdXQ9Tm9uZSwga2VlcGVuZHM9RmFsc2UsICoqa3cpOgorICAgIGlmIGlucHV0OgorICAgICAgICBzdGRpbiA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICBpbnB1dCA9IHN0cl90b19ieXRlcyhpbnB1dCkKKyAgICBlbHNlOgorICAgICAgICBzdGRpbiA9IE5vbmUKKyAgICBlcnJvcnMgPSAnc3RyaWN0JworICAgIGlmICdlcnJvcnMnIGluIGt3OgorICAgICAgICBlcnJvcnMgPSBrd1snZXJyb3JzJ10KKyAgICAgICAgZGVsIGt3WydlcnJvcnMnXQorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICB0dXBsZShzdHJfdG9fYnl0ZXModykgZm9yIHcgaW4gY21kKSwKKyAgICAgICAgc3RkaW49c3RkaW4sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsICoqa3cKKyAgICAgICAgKQorICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKGlucHV0KQorICAgIG91dCA9IGJ5dGVzX3RvX3N0cihvdXQsIGVycm9ycz1lcnJvcnMpCisgICAgcmV0Y29kZSA9IHAud2FpdCgpCisgICAgaWYgcmV0Y29kZToKKyAgICAgICAgcmFpc2UgQ29tbWFuZEVycm9yKGNtZCwgcmV0Y29kZSkKKyAgICBpZiBub3Qga2VlcGVuZHM6CisgICAgICAgIG91dCA9IG91dC5yc3RyaXAoJ1xuXHInKQorICAgIHJldHVybiBvdXQKKworCitkZWYgcmVhZF9naXRfbGluZXMoYXJncywga2VlcGVuZHM9RmFsc2UsICoqa3cpOgorICAgICIiIlJldHVybiB0aGUgbGluZXMgb3V0cHV0IGJ5IEdpdCBjb21tYW5kLgorCisgICAgUmV0dXJuIGFzIHNpbmdsZSBsaW5lcywgd2l0aCBuZXdsaW5lcyBzdHJpcHBlZCBvZmYuIiIiCisKKyAgICByZXR1cm4gcmVhZF9naXRfb3V0cHV0KGFyZ3MsIGtlZXBlbmRzPVRydWUsICoqa3cpLnNwbGl0bGluZXMoa2VlcGVuZHMpCisKKworZGVmIGdpdF9yZXZfbGlzdF9pc2goY21kLCBzcGVjLCBhcmdzPU5vbmUsICoqa3cpOgorICAgICIiIkNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciBpbnZva2luZyBhICdnaXQgcmV2LWxpc3QnLWxpa2UgY29tbWFuZC4KKworICAgIFBhcmFtZXRlcnM6CisgICAgICAqIGNtZCBpcyB0aGUgR2l0IGNvbW1hbmQgdG8gcnVuLCBlLmcuLCAncmV2LWxpc3QnIG9yICdsb2cnLgorICAgICAgKiBzcGVjIGlzIGEgbGlzdCBvZiByZXZpc2lvbiBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgbmFtZWQKKyAgICAgICAgY29tbWFuZC4gIElmIE5vbmUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBsaXN0LgorICAgICAgKiBhcmdzIGlzIGEgbGlzdCBvZiBleHRyYSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBuYW1lZCBjb21tYW5kLgorICAgICAgKiBBbGwgb3RoZXIga2V5d29yZCBhcmd1bWVudHMgKGlmIGFueSkgYXJlIHBhc3NlZCB0byB0aGUKKyAgICAgICAgdW5kZXJseWluZyByZWFkX2dpdF9saW5lcygpIGZ1bmN0aW9uLgorCisgICAgUmV0dXJuIHRoZSBvdXRwdXQgb2YgdGhlIEdpdCBjb21tYW5kIGluIHRoZSBmb3JtIG9mIGEgbGlzdCwgb25lCisgICAgZW50cnkgcGVyIG91dHB1dCBsaW5lLgorICAgICIiIgorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIFtdCisgICAgaWYgYXJncyBpcyBOb25lOgorICAgICAgICBhcmdzID0gW10KKyAgICBhcmdzID0gW2NtZCwgJy0tc3RkaW4nXSArIGFyZ3MKKyAgICBzcGVjX3N0ZGluID0gJycuam9pbihzICsgJ1xuJyBmb3IgcyBpbiBzcGVjKQorICAgIHJldHVybiByZWFkX2dpdF9saW5lcyhhcmdzLCBpbnB1dD1zcGVjX3N0ZGluLCAqKmt3KQorCisKK2RlZiBnaXRfcmV2X2xpc3Qoc3BlYywgKiprdyk6CisgICAgIiIiUnVuICdnaXQgcmV2LWxpc3QnIHdpdGggdGhlIGdpdmVuIGxpc3Qgb2YgcmV2aXNpb24gYXJndW1lbnRzLgorCisgICAgU2VlIGdpdF9yZXZfbGlzdF9pc2goKSBmb3IgcGFyYW1ldGVyIGFuZCByZXR1cm4gdmFsdWUKKyAgICBkb2N1bWVudGF0aW9uLgorICAgICIiIgorICAgIHJldHVybiBnaXRfcmV2X2xpc3RfaXNoKCdyZXYtbGlzdCcsIHNwZWMsICoqa3cpCisKKworZGVmIGdpdF9sb2coc3BlYywgKiprdyk6CisgICAgIiIiUnVuICdnaXQgbG9nJyB3aXRoIHRoZSBnaXZlbiBsaXN0IG9mIHJldmlzaW9uIGFyZ3VtZW50cy4KKworICAgIFNlZSBnaXRfcmV2X2xpc3RfaXNoKCkgZm9yIHBhcmFtZXRlciBhbmQgcmV0dXJuIHZhbHVlCisgICAgZG9jdW1lbnRhdGlvbi4KKyAgICAiIiIKKyAgICByZXR1cm4gZ2l0X3Jldl9saXN0X2lzaCgnbG9nJywgc3BlYywgKiprdykKKworCitkZWYgaGVhZGVyX2VuY29kZSh0ZXh0LCBoZWFkZXJfbmFtZT1Ob25lKToKKyAgICAiIiJFbmNvZGUgYW5kIGxpbmUtd3JhcCB0aGUgdmFsdWUgb2YgYW4gZW1haWwgaGVhZGVyIGZpZWxkLiIiIgorCisgICAgIyBDb252ZXJ0IHRvIHVuaWNvZGUsIGlmIHJlcXVpcmVkLgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHRleHQsIHVuaWNvZGUpOgorICAgICAgICB0ZXh0ID0gdW5pY29kZSh0ZXh0LCAndXRmLTgnKQorCisgICAgaWYgaXNfYXNjaWkodGV4dCk6CisgICAgICAgIGNoYXJzZXQgPSAnYXNjaWknCisgICAgZWxzZToKKyAgICAgICAgY2hhcnNldCA9ICd1dGYtOCcKKworICAgIHJldHVybiBIZWFkZXIodGV4dCwgaGVhZGVyX25hbWU9aGVhZGVyX25hbWUsIGNoYXJzZXQ9Q2hhcnNldChjaGFyc2V0KSkuZW5jb2RlKCkKKworCitkZWYgYWRkcl9oZWFkZXJfZW5jb2RlKHRleHQsIGhlYWRlcl9uYW1lPU5vbmUpOgorICAgICIiIkVuY29kZSBhbmQgbGluZS13cmFwIHRoZSB2YWx1ZSBvZiBhbiBlbWFpbCBoZWFkZXIgZmllbGQgY29udGFpbmluZworICAgIGVtYWlsIGFkZHJlc3Nlcy4iIiIKKworICAgICMgQ29udmVydCB0byB1bmljb2RlLCBpZiByZXF1aXJlZC4KKyAgICBpZiBub3QgaXNpbnN0YW5jZSh0ZXh0LCB1bmljb2RlKToKKyAgICAgICAgdGV4dCA9IHVuaWNvZGUodGV4dCwgJ3V0Zi04JykKKworICAgIHRleHQgPSAnLCAnLmpvaW4oCisgICAgICAgIGZvcm1hdGFkZHIoKGhlYWRlcl9lbmNvZGUobmFtZSksIGVtYWlsYWRkcikpCisgICAgICAgIGZvciBuYW1lLCBlbWFpbGFkZHIgaW4gZ2V0YWRkcmVzc2VzKFt0ZXh0XSkKKyAgICAgICAgKQorCisgICAgaWYgaXNfYXNjaWkodGV4dCk6CisgICAgICAgIGNoYXJzZXQgPSAnYXNjaWknCisgICAgZWxzZToKKyAgICAgICAgY2hhcnNldCA9ICd1dGYtOCcKKworICAgIHJldHVybiBIZWFkZXIodGV4dCwgaGVhZGVyX25hbWU9aGVhZGVyX25hbWUsIGNoYXJzZXQ9Q2hhcnNldChjaGFyc2V0KSkuZW5jb2RlKCkKKworCitjbGFzcyBDb25maWcob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VjdGlvbiwgZ2l0X2NvbmZpZz1Ob25lKToKKyAgICAgICAgIiIiUmVwcmVzZW50IGEgc2VjdGlvbiBvZiB0aGUgZ2l0IGNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgSWYgZ2l0X2NvbmZpZyBpcyBzcGVjaWZpZWQsIGl0IGlzIHBhc3NlZCB0byAiZ2l0IGNvbmZpZyIgaW4KKyAgICAgICAgdGhlIEdJVF9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUsIG1lYW5pbmcgdGhhdCAiZ2l0IGNvbmZpZyIKKyAgICAgICAgd2lsbCByZWFkIHRoZSBzcGVjaWZpZWQgcGF0aCByYXRoZXIgdGhhbiB0aGUgR2l0IGRlZmF1bHQKKyAgICAgICAgY29uZmlnIHBhdGhzLiIiIgorCisgICAgICAgIHNlbGYuc2VjdGlvbiA9IHNlY3Rpb24KKyAgICAgICAgaWYgZ2l0X2NvbmZpZzoKKyAgICAgICAgICAgIHNlbGYuZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgICAgIHNlbGYuZW52WydHSVRfQ09ORklHJ10gPSBnaXRfY29uZmlnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmVudiA9IE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3NwbGl0KHMpOgorICAgICAgICAiIiJTcGxpdCBOVUwtdGVybWluYXRlZCB2YWx1ZXMuIiIiCisKKyAgICAgICAgd29yZHMgPSBzLnNwbGl0KCdcMCcpCisgICAgICAgIGFzc2VydCB3b3Jkc1stMV0gPT0gJycKKyAgICAgICAgcmV0dXJuIHdvcmRzWzotMV0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgYWRkX2NvbmZpZ19wYXJhbWV0ZXJzKGMpOgorICAgICAgICAiIiJBZGQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIEdpdC4KKworICAgICAgICBjIGlzIGVpdGhlciBhbiBzdHIgb3IgYSBsaXN0IG9mIHN0ciwgZWFjaCBlbGVtZW50IGJlaW5nIG9mIHRoZQorICAgICAgICBmb3JtICd2YXI9dmFsJyBvciAndmFyJywgd2l0aCB0aGUgc2FtZSBzeW50YXggYW5kIG1lYW5pbmcgYXMKKyAgICAgICAgdGhlIGFyZ3VtZW50IG9mICdnaXQgLWMgdmFyPXZhbCcuCisgICAgICAgICIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKGMsIHN0cik6CisgICAgICAgICAgICBjID0gKGMsKQorICAgICAgICBwYXJhbWV0ZXJzID0gb3MuZW52aXJvbi5nZXQoJ0dJVF9DT05GSUdfUEFSQU1FVEVSUycsICcnKQorICAgICAgICBpZiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVycyArPSAnICcKKyAgICAgICAgIyBnaXQgZXhwZWN0cyBHSVRfQ09ORklHX1BBUkFNRVRFUlMgdG8gYmUgb2YgdGhlIGZvcm0KKyAgICAgICAgIyAgICAiJ25hbWUxPXZhbHVlMScgJ25hbWUyPXZhbHVlMicgJ25hbWUzPXZhbHVlMyciCisgICAgICAgICMgaW5jbHVkaW5nIGV2ZXJ5dGhpbmcgaW5zaWRlIHRoZSBkb3VibGUgcXVvdGVzIChidXQgbm90IHRoZSBkb3VibGUKKyAgICAgICAgIyBxdW90ZXMgdGhlbXNlbHZlcykuICBTcGFjaW5nIGlzIGNyaXRpY2FsLiAgQWxzbywgaWYgYSB2YWx1ZSBjb250YWlucworICAgICAgICAjIGEgbGl0ZXJhbCBzaW5nbGUgcXVvdGUgdGhhdCBxdW90ZSBtdXN0IGJlIHJlcHJlc2VudGVkIHVzaW5nIHRoZQorICAgICAgICAjIGZvdXIgY2hhcmFjdGVyIHNlcXVlbmNlOiAnXCcnCisgICAgICAgIHBhcmFtZXRlcnMgKz0gJyAnLmpvaW4oIiciICsgeC5yZXBsYWNlKCInIiwgIidcXCcnIikgKyAiJyIgZm9yIHggaW4gYykKKyAgICAgICAgb3MuZW52aXJvblsnR0lUX0NPTkZJR19QQVJBTUVURVJTJ10gPSBwYXJhbWV0ZXJzCisKKyAgICBkZWYgZ2V0KHNlbGYsIG5hbWUsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlcyA9IHNlbGYuX3NwbGl0KHJlYWRfZ2l0X291dHB1dCgKKyAgICAgICAgICAgICAgICBbJ2NvbmZpZycsICctLWdldCcsICctLW51bGwnLCAnJXMuJXMnICUgKHNlbGYuc2VjdGlvbiwgbmFtZSldLAorICAgICAgICAgICAgICAgIGVudj1zZWxmLmVudiwga2VlcGVuZHM9VHJ1ZSwKKyAgICAgICAgICAgICAgICApKQorICAgICAgICAgICAgYXNzZXJ0IGxlbih2YWx1ZXMpID09IDEKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZXNbMF0KKyAgICAgICAgZXhjZXB0IENvbW1hbmRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICBkZWYgZ2V0X2Jvb2woc2VsZiwgbmFtZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSByZWFkX2dpdF9vdXRwdXQoCisgICAgICAgICAgICAgICAgWydjb25maWcnLCAnLS1nZXQnLCAnLS1ib29sJywgJyVzLiVzJyAlIChzZWxmLnNlY3Rpb24sIG5hbWUpXSwKKyAgICAgICAgICAgICAgICBlbnY9c2VsZi5lbnYsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICAgICAgcmV0dXJuIHZhbHVlID09ICd0cnVlJworCisgICAgZGVmIGdldF9hbGwoc2VsZiwgbmFtZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiUmVhZCBhIChwb3NzaWJseSBtdWx0aXZhbHVlZCkgc2V0dGluZyBmcm9tIHRoZSBjb25maWd1cmF0aW9uLgorCisgICAgICAgIFJldHVybiB0aGUgcmVzdWx0IGFzIGEgbGlzdCBvZiB2YWx1ZXMsIG9yIGRlZmF1bHQgaWYgdGhlIG5hbWUKKyAgICAgICAgaXMgdW5zZXQuIiIiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NwbGl0KHJlYWRfZ2l0X291dHB1dCgKKyAgICAgICAgICAgICAgICBbJ2NvbmZpZycsICctLWdldC1hbGwnLCAnLS1udWxsJywgJyVzLiVzJyAlIChzZWxmLnNlY3Rpb24sIG5hbWUpXSwKKyAgICAgICAgICAgICAgICBlbnY9c2VsZi5lbnYsIGtlZXBlbmRzPVRydWUsCisgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgZXhjZXB0IENvbW1hbmRFcnJvcjoKKyAgICAgICAgICAgIHQsIGUsIHRyYWNlYmFjayA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBpZiBlLnJldGNvZGUgPT0gMToKKyAgICAgICAgICAgICAgICAjICJ0aGUgc2VjdGlvbiBvciBrZXkgaXMgaW52YWxpZCI7IGkuZS4sIHRoZXJlIGlzIG5vCisgICAgICAgICAgICAgICAgIyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBrZXkuCisgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBzZXQoc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICByZWFkX2dpdF9vdXRwdXQoCisgICAgICAgICAgICBbJ2NvbmZpZycsICclcy4lcycgJSAoc2VsZi5zZWN0aW9uLCBuYW1lKSwgdmFsdWVdLAorICAgICAgICAgICAgZW52PXNlbGYuZW52LAorICAgICAgICAgICAgKQorCisgICAgZGVmIGFkZChzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIHJlYWRfZ2l0X291dHB1dCgKKyAgICAgICAgICAgIFsnY29uZmlnJywgJy0tYWRkJywgJyVzLiVzJyAlIChzZWxmLnNlY3Rpb24sIG5hbWUpLCB2YWx1ZV0sCisgICAgICAgICAgICBlbnY9c2VsZi5lbnYsCisgICAgICAgICAgICApCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5nZXRfYWxsKG5hbWUsIGRlZmF1bHQ9Tm9uZSkgaXMgbm90IE5vbmUKKworICAgICMgV2UgZG9uJ3QgdXNlIHRoaXMgbWV0aG9kIGFueW1vcmUgaW50ZXJuYWxseSwgYnV0IGtlZXAgaXQgaGVyZSBpbgorICAgICMgY2FzZSBzb21lYm9keSBpcyBjYWxsaW5nIGl0IGZyb20gdGhlaXIgb3duIGNvZGU6CisgICAgZGVmIGhhc19rZXkoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBuYW1lIGluIHNlbGYKKworICAgIGRlZiB1bnNldF9hbGwoc2VsZiwgbmFtZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRfZ2l0X291dHB1dCgKKyAgICAgICAgICAgICAgICBbJ2NvbmZpZycsICctLXVuc2V0LWFsbCcsICclcy4lcycgJSAoc2VsZi5zZWN0aW9uLCBuYW1lKV0sCisgICAgICAgICAgICAgICAgZW52PXNlbGYuZW52LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZXhjZXB0IENvbW1hbmRFcnJvcjoKKyAgICAgICAgICAgIHQsIGUsIHRyYWNlYmFjayA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBpZiBlLnJldGNvZGUgPT0gNToKKyAgICAgICAgICAgICAgICAjIFRoZSBuYW1lIGRvZXNuJ3QgZXhpc3QsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudGVkIGFueXdheS4uLgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBzZXRfcmVjaXBpZW50cyhzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIHNlbGYudW5zZXRfYWxsKG5hbWUpCisgICAgICAgIGZvciBwYWlyIGluIGdldGFkZHJlc3NlcyhbdmFsdWVdKToKKyAgICAgICAgICAgIHNlbGYuYWRkKG5hbWUsIGZvcm1hdGFkZHIocGFpcikpCisKKworZGVmIGdlbmVyYXRlX3N1bW1hcmllcygqbG9nX2FyZ3MpOgorICAgICIiIkdlbmVyYXRlIGEgYnJpZWYgc3VtbWFyeSBmb3IgZWFjaCByZXZpc2lvbiByZXF1ZXN0ZWQuCisKKyAgICBsb2dfYXJncyBhcmUgc3RyaW5ncyB0aGF0IHdpbGwgYmUgcGFzc2VkIGRpcmVjdGx5IHRvICJnaXQgbG9nIiBhcworICAgIHJldmlzaW9uIHNlbGVjdG9ycy4gIEl0ZXJhdGUgb3ZlciAoc2hhMV9zaG9ydCwgc3ViamVjdCkgZm9yIGVhY2gKKyAgICBjb21taXQgc3BlY2lmaWVkIGJ5IGxvZ19hcmdzIChzdWJqZWN0IGlzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZQorICAgIGNvbW1pdCBtZXNzYWdlIGFzIGEgc3RyaW5nIHdpdGhvdXQgRU9McykuIiIiCisKKyAgICBjbWQgPSBbCisgICAgICAgICdsb2cnLCAnLS1hYmJyZXYnLCAnLS1mb3JtYXQ9JWggJXMnLAorICAgICAgICBdICsgbGlzdChsb2dfYXJncykgKyBbJy0tJ10KKyAgICBmb3IgbGluZSBpbiByZWFkX2dpdF9saW5lcyhjbWQpOgorICAgICAgICB5aWVsZCB0dXBsZShsaW5lLnNwbGl0KCcgJywgMSkpCisKKworZGVmIGxpbWl0X2xpbmVzKGxpbmVzLCBtYXhfbGluZXMpOgorICAgIGZvciAoaW5kZXgsIGxpbmUpIGluIGVudW1lcmF0ZShsaW5lcyk6CisgICAgICAgIGlmIGluZGV4IDwgbWF4X2xpbmVzOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgaWYgaW5kZXggPj0gbWF4X2xpbmVzOgorICAgICAgICB5aWVsZCAnLi4uICVkIGxpbmVzIHN1cHByZXNzZWQgLi4uXG4nICUgKGluZGV4ICsgMSAtIG1heF9saW5lcywpCisKKworZGVmIGxpbWl0X2xpbmVsZW5ndGgobGluZXMsIG1heF9saW5lbGVuZ3RoKToKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgIyBEb24ndCBmb3JnZXQgdGhhdCBsaW5lcyBhbHdheXMgaW5jbHVkZSBhIHRyYWlsaW5nIG5ld2xpbmUuCisgICAgICAgIGlmIGxlbihsaW5lKSA+IG1heF9saW5lbGVuZ3RoICsgMToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzptYXhfbGluZWxlbmd0aCAtIDddICsgJyBbLi4uXVxuJworICAgICAgICB5aWVsZCBsaW5lCisKKworY2xhc3MgQ29tbWl0U2V0KG9iamVjdCk6CisgICAgIiIiQSAoY29uc3RhbnQpIHNldCBvZiBvYmplY3QgbmFtZXMuCisKKyAgICBUaGUgc2V0IHNob3VsZCBiZSBpbml0aWFsaXplZCB3aXRoIGZ1bGwgU0hBMSBvYmplY3QgbmFtZXMuICBUaGUKKyAgICBfX2NvbnRhaW5zX18oKSBtZXRob2QgcmV0dXJucyBUcnVlIGlmZiBpdHMgYXJndW1lbnQgaXMgYW4KKyAgICBhYmJyZXZpYXRpb24gb2YgYW55IHRoZSBuYW1lcyBpbiB0aGUgc2V0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWVzKToKKyAgICAgICAgc2VsZi5fbmFtZXMgPSBzb3J0ZWQobmFtZXMpCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9uYW1lcykKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgc2hhMV9hYmJyZXYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZmYgdGhpcyBzZXQgY29udGFpbnMgc2hhMV9hYmJyZXYgKHdoaWNoIG1pZ2h0IGJlIGFiYnJldmlhdGVkKS4iIiIKKworICAgICAgICBpID0gYmlzZWN0LmJpc2VjdF9sZWZ0KHNlbGYuX25hbWVzLCBzaGExX2FiYnJldikKKyAgICAgICAgcmV0dXJuIGkgPCBsZW4oc2VsZikgYW5kIHNlbGYuX25hbWVzW2ldLnN0YXJ0c3dpdGgoc2hhMV9hYmJyZXYpCisKKworY2xhc3MgR2l0T2JqZWN0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoYTEsIHR5cGU9Tm9uZSk6CisgICAgICAgIGlmIHNoYTEgPT0gWkVST1M6CisgICAgICAgICAgICBzZWxmLnNoYTEgPSBzZWxmLnR5cGUgPSBzZWxmLmNvbW1pdF9zaGExID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zaGExID0gc2hhMQorICAgICAgICAgICAgc2VsZi50eXBlID0gdHlwZSBvciByZWFkX2dpdF9vdXRwdXQoWydjYXQtZmlsZScsICctdCcsIHNlbGYuc2hhMV0pCisKKyAgICAgICAgICAgIGlmIHNlbGYudHlwZSA9PSAnY29tbWl0JzoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1pdF9zaGExID0gc2VsZi5zaGExCisgICAgICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSAndGFnJzoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0X3NoYTEgPSByZWFkX2dpdF9vdXRwdXQoCisgICAgICAgICAgICAgICAgICAgICAgICBbJ3Jldi1wYXJzZScsICctLXZlcmlmeScsICclc14wJyAlIChzZWxmLnNoYTEsKV0KKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIENhbm5vdCBkZXJlZiB0YWcgdG8gZGV0ZXJtaW5lIGNvbW1pdF9zaGExCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0X3NoYTEgPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0X3NoYTEgPSBOb25lCisKKyAgICAgICAgc2VsZi5zaG9ydCA9IHJlYWRfZ2l0X291dHB1dChbJ3Jldi1wYXJzZScsICctLXNob3J0Jywgc2hhMV0pCisKKyAgICBkZWYgZ2V0X3N1bW1hcnkoc2VsZik6CisgICAgICAgICIiIlJldHVybiAoc2hhMV9zaG9ydCwgc3ViamVjdCkgZm9yIHRoaXMgY29tbWl0LiIiIgorCisgICAgICAgIGlmIG5vdCBzZWxmLnNoYTE6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdFbXB0eSBjb21taXQgaGFzIG5vIHN1bW1hcnknKQorCisgICAgICAgIHJldHVybiBuZXh0KGl0ZXIoZ2VuZXJhdGVfc3VtbWFyaWVzKCctLW5vLXdhbGsnLCBzZWxmLnNoYTEpKSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShvdGhlciwgR2l0T2JqZWN0KSBhbmQgc2VsZi5zaGExID09IG90aGVyLnNoYTEKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5zaGExKQorCisgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgorICAgICAgICByZXR1cm4gYm9vbChzZWxmLnNoYTEpCisKKyAgICBkZWYgX19ib29sX18oc2VsZik6CisgICAgICAgICIiIlB5dGhvbiAyIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX19ub256ZXJvX18oKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNoYTEgb3IgWkVST1MKKworCitjbGFzcyBDaGFuZ2Uob2JqZWN0KToKKyAgICAiIiJBIENoYW5nZSB0aGF0IGhhcyBiZWVuIG1hZGUgdG8gdGhlIEdpdCByZXBvc2l0b3J5LgorCisgICAgQWJzdHJhY3QgY2xhc3MgZnJvbSB3aGljaCBib3RoIFJldmlzaW9ucyBhbmQgUmVmZXJlbmNlQ2hhbmdlcyBhcmUKKyAgICBkZXJpdmVkLiAgQSBDaGFuZ2Uga25vd3MgaG93IHRvIGdlbmVyYXRlIGEgbm90aWZpY2F0aW9uIGVtYWlsCisgICAgZGVzY3JpYmluZyBpdHNlbGYuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW52aXJvbm1lbnQpOgorICAgICAgICBzZWxmLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQKKyAgICAgICAgc2VsZi5fdmFsdWVzID0gTm9uZQorICAgICAgICBzZWxmLl9jb250YWluc19odG1sX2RpZmYgPSBGYWxzZQorCisgICAgZGVmIF9jb250YWluc19kaWZmKHNlbGYpOgorICAgICAgICAjIFdlIGRvIGNvbnRhaW4gYSBkaWZmLCBzaG91bGQgaXQgYmUgcmVuZGVyZWQgaW4gSFRNTD8KKyAgICAgICAgaWYgc2VsZi5lbnZpcm9ubWVudC5jb21taXRfZW1haWxfZm9ybWF0ID09ICJodG1sIjoKKyAgICAgICAgICAgIHNlbGYuX2NvbnRhaW5zX2h0bWxfZGlmZiA9IFRydWUKKworICAgIGRlZiBfY29tcHV0ZV92YWx1ZXMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIGRpY3Rpb25hcnkge2tleXdvcmQ6IGV4cGFuc2lvbn0gZm9yIHRoaXMgQ2hhbmdlLgorCisgICAgICAgIERlcml2ZWQgY2xhc3NlcyBvdmVybG9hZCB0aGlzIG1ldGhvZCB0byBhZGQgbW9yZSBlbnRyaWVzIHRvCisgICAgICAgIHRoZSByZXR1cm4gdmFsdWUuICBUaGlzIG1ldGhvZCBpcyB1c2VkIGludGVybmFsbHkgYnkKKyAgICAgICAgZ2V0X3ZhbHVlcygpLiAgVGhlIHJldHVybiB2YWx1ZSBzaG91bGQgYWx3YXlzIGJlIGEgbmV3CisgICAgICAgIGRpY3Rpb25hcnkuIiIiCisKKyAgICAgICAgdmFsdWVzID0gc2VsZi5lbnZpcm9ubWVudC5nZXRfdmFsdWVzKCkKKyAgICAgICAgZnJvbWFkZHIgPSBzZWxmLmVudmlyb25tZW50LmdldF9mcm9tYWRkcihjaGFuZ2U9c2VsZikKKyAgICAgICAgaWYgZnJvbWFkZHIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB2YWx1ZXNbJ2Zyb21hZGRyJ10gPSBmcm9tYWRkcgorICAgICAgICB2YWx1ZXNbJ211bHRpbWFpbF92ZXJzaW9uJ10gPSBnZXRfdmVyc2lvbigpCisgICAgICAgIHJldHVybiB2YWx1ZXMKKworICAgICMgQWxpYXNlcyB1c2FibGUgaW4gdGVtcGxhdGUgc3RyaW5ncy4gVHVwbGUgb2YgcGFpcnMgKGRlc3RpbmF0aW9uLAorICAgICMgc291cmNlKS4KKyAgICBWQUxVRVNfQUxJQVMgPSAoCisgICAgICAgICgiaWQiLCAibmV3cmV2IiksCisgICAgICAgICkKKworICAgIGRlZiBnZXRfdmFsdWVzKHNlbGYsICoqZXh0cmFfdmFsdWVzKToKKyAgICAgICAgIiIiUmV0dXJuIGEgZGljdGlvbmFyeSB7a2V5d29yZDogZXhwYW5zaW9ufSBmb3IgdGhpcyBDaGFuZ2UuCisKKyAgICAgICAgUmV0dXJuIGEgZGljdGlvbmFyeSBtYXBwaW5nIGtleXdvcmRzIHRvIHRoZSB2YWx1ZXMgdGhhdCB0aGV5CisgICAgICAgIHNob3VsZCBiZSBleHBhbmRlZCB0byBmb3IgdGhpcyBDaGFuZ2UgKHVzZWQgd2hlbiBpbnRlcnBvbGF0aW5nCisgICAgICAgIHRlbXBsYXRlIHN0cmluZ3MpLiAgSWYgYW55IGtleXdvcmQgYXJndW1lbnRzIGFyZSBzdXBwbGllZCwgYWRkCisgICAgICAgIHRob3NlIHRvIHRoZSByZXR1cm4gdmFsdWUgYXMgd2VsbC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYWx3YXlzCisgICAgICAgIGEgbmV3IGRpY3Rpb25hcnkuIiIiCisKKyAgICAgICAgaWYgc2VsZi5fdmFsdWVzIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl92YWx1ZXMgPSBzZWxmLl9jb21wdXRlX3ZhbHVlcygpCisKKyAgICAgICAgdmFsdWVzID0gc2VsZi5fdmFsdWVzLmNvcHkoKQorICAgICAgICBpZiBleHRyYV92YWx1ZXM6CisgICAgICAgICAgICB2YWx1ZXMudXBkYXRlKGV4dHJhX3ZhbHVlcykKKworICAgICAgICBmb3IgYWxpYXMsIHZhbCBpbiBzZWxmLlZBTFVFU19BTElBUzoKKyAgICAgICAgICAgIHZhbHVlc1thbGlhc10gPSB2YWx1ZXNbdmFsXQorICAgICAgICByZXR1cm4gdmFsdWVzCisKKyAgICBkZWYgZXhwYW5kKHNlbGYsIHRlbXBsYXRlLCAqKmV4dHJhX3ZhbHVlcyk6CisgICAgICAgICIiIkV4cGFuZCB0ZW1wbGF0ZS4KKworICAgICAgICBFeHBhbmQgdGhlIHRlbXBsYXRlICh3aGljaCBzaG91bGQgYmUgYSBzdHJpbmcpIHVzaW5nIHN0cmluZworICAgICAgICBpbnRlcnBvbGF0aW9uIG9mIHRoZSB2YWx1ZXMgZm9yIHRoaXMgQ2hhbmdlLiAgSWYgYW55IGtleXdvcmQKKyAgICAgICAgYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgYWxzbyBpbmNsdWRlIHRob3NlIGluIHRoZSBrZXl3b3JkcworICAgICAgICBhdmFpbGFibGUgZm9yIGludGVycG9sYXRpb24uIiIiCisKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlICUgc2VsZi5nZXRfdmFsdWVzKCoqZXh0cmFfdmFsdWVzKQorCisgICAgZGVmIGV4cGFuZF9saW5lcyhzZWxmLCB0ZW1wbGF0ZSwgaHRtbF9lc2NhcGVfdmFsPUZhbHNlLCAqKmV4dHJhX3ZhbHVlcyk6CisgICAgICAgICIiIkJyZWFrIHRlbXBsYXRlIGludG8gbGluZXMgYW5kIGV4cGFuZCBlYWNoIGxpbmUuIiIiCisKKyAgICAgICAgdmFsdWVzID0gc2VsZi5nZXRfdmFsdWVzKCoqZXh0cmFfdmFsdWVzKQorICAgICAgICBpZiBodG1sX2VzY2FwZV92YWw6CisgICAgICAgICAgICBmb3IgayBpbiB2YWx1ZXM6CisgICAgICAgICAgICAgICAgaWYgaXNfc3RyaW5nKHZhbHVlc1trXSk6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlc1trXSA9IGh0bWxfZXNjYXBlKHZhbHVlc1trXSkKKyAgICAgICAgZm9yIGxpbmUgaW4gdGVtcGxhdGUuc3BsaXRsaW5lcyhUcnVlKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUgJSB2YWx1ZXMKKworICAgIGRlZiBleHBhbmRfaGVhZGVyX2xpbmVzKHNlbGYsIHRlbXBsYXRlLCAqKmV4dHJhX3ZhbHVlcyk6CisgICAgICAgICIiIkJyZWFrIHRlbXBsYXRlIGludG8gbGluZXMgYW5kIGV4cGFuZCBlYWNoIGxpbmUgYXMgYW4gUkZDIDI4MjIgaGVhZGVyLgorCisgICAgICAgIEVuY29kZSB2YWx1ZXMgYW5kIHNwbGl0IHVwIGxpbmVzIHRoYXQgYXJlIHRvbyBsb25nLiAgU2lsZW50bHkKKyAgICAgICAgc2tpcCBsaW5lcyB0aGF0IGNvbnRhaW4gcmVmZXJlbmNlcyB0byB1bmtub3duIHZhcmlhYmxlcy4iIiIKKworICAgICAgICB2YWx1ZXMgPSBzZWxmLmdldF92YWx1ZXMoKipleHRyYV92YWx1ZXMpCisgICAgICAgIGlmIHNlbGYuX2NvbnRhaW5zX2h0bWxfZGlmZjoKKyAgICAgICAgICAgIHNlbGYuX2NvbnRlbnRfdHlwZSA9ICdodG1sJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fY29udGVudF90eXBlID0gJ3BsYWluJworICAgICAgICB2YWx1ZXNbJ2NvbnRlbnR0eXBlJ10gPSBzZWxmLl9jb250ZW50X3R5cGUKKworICAgICAgICBmb3IgbGluZSBpbiB0ZW1wbGF0ZS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAobmFtZSwgdmFsdWUpID0gbGluZS5zcGxpdCgnOiAnLCAxKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAlIHZhbHVlcworICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHQsIGUsIHRyYWNlYmFjayA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgaWYgREVCVUc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZW52aXJvbm1lbnQubG9nX3dhcm5pbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAnV2FybmluZzogdW5rbm93biB2YXJpYWJsZSAlciBpbiB0aGUgZm9sbG93aW5nIGxpbmU7IGxpbmUgc2tpcHBlZDpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICcgICAgJXNcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGUuYXJnc1swXSwgbGluZSwpCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5hbWUubG93ZXIoKSBpbiBBRERSX0hFQURFUlM6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYWRkcl9oZWFkZXJfZW5jb2RlKHZhbHVlLCBuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaGVhZGVyX2VuY29kZSh2YWx1ZSwgbmFtZSkKKyAgICAgICAgICAgICAgICBmb3Igc3BsaXRsaW5lIGluICgnJXM6ICVzXG4nICUgKG5hbWUsIHZhbHVlKSkuc3BsaXRsaW5lcyhUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc3BsaXRsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfZW1haWxfaGVhZGVyKHNlbGYpOgorICAgICAgICAiIiJHZW5lcmF0ZSB0aGUgUkZDIDI4MjIgZW1haWwgaGVhZGVycyBmb3IgdGhpcyBDaGFuZ2UsIGEgbGluZSBhdCBhIHRpbWUuCisKKyAgICAgICAgVGhlIG91dHB1dCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIHRyYWlsaW5nIGJsYW5rIGxpbmUuIiIiCisKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgZ2VuZXJhdGVfYnJvd3NlX2xpbmsoc2VsZiwgYmFzZV91cmwpOgorICAgICAgICAiIiJHZW5lcmF0ZSBhIGxpbmsgdG8gYW4gb25saW5lIHJlcG9zaXRvcnkgYnJvd3Nlci4iIiIKKyAgICAgICAgcmV0dXJuIGl0ZXIoKCkpCisKKyAgICBkZWYgZ2VuZXJhdGVfZW1haWxfaW50cm8oc2VsZiwgaHRtbF9lc2NhcGVfdmFsPUZhbHNlKToKKyAgICAgICAgIiIiR2VuZXJhdGUgdGhlIGVtYWlsIGludHJvIGZvciB0aGlzIENoYW5nZSwgYSBsaW5lIGF0IGEgdGltZS4KKworICAgICAgICBUaGUgb3V0cHV0IHdpbGwgYmUgdXNlZCBhcyB0aGUgc3RhbmRhcmQgYm9pbGVycGxhdGUgYXQgdGhlIHRvcAorICAgICAgICBvZiB0aGUgZW1haWwgYm9keS4iIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbF9ib2R5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJHZW5lcmF0ZSB0aGUgbWFpbiBwYXJ0IG9mIHRoZSBlbWFpbCBib2R5LCBhIGxpbmUgYXQgYSB0aW1lLgorCisgICAgICAgIFRoZSB0ZXh0IGluIHRoZSBib2R5IG1pZ2h0IGJlIHRydW5jYXRlZCBhZnRlciBhIHNwZWNpZmllZAorICAgICAgICBudW1iZXIgb2YgbGluZXMgKHNlZSBtdWx0aW1haWxob29rLmVtYWlsbWF4bGluZXMpLiIiIgorCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsX2Zvb3RlcihzZWxmLCBodG1sX2VzY2FwZV92YWwpOgorICAgICAgICAiIiJHZW5lcmF0ZSB0aGUgZm9vdGVyIG9mIHRoZSBlbWFpbCwgYSBsaW5lIGF0IGEgdGltZS4KKworICAgICAgICBUaGUgZm9vdGVyIGlzIGFsd2F5cyBpbmNsdWRlZCwgaXJyZXNwZWN0aXZlIG9mCisgICAgICAgIG11bHRpbWFpbGhvb2suZW1haWxtYXhsaW5lcy4iIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBfd3JhcF9mb3JfaHRtbChzZWxmLCBsaW5lcyk6CisgICAgICAgICIiIldyYXAgdGhlIGxpbmVzIGluIEhUTUwgPHByZT4gdGFnIHdoZW4gdXNpbmcgSFRNTCBmb3JtYXQuCisKKyAgICAgICAgRXNjYXBlIHNwZWNpYWwgSFRNTCBjaGFyYWN0ZXJzIGFuZCBhZGQgPHByZT4gYW5kIDwvcHJlPiB0YWdzIGFyb3VuZAorICAgICAgICB0aGUgZ2l2ZW4gbGluZXMgaWYgd2Ugc2hvdWxkIGJlIGdlbmVyYXRpbmcgSFRNTCBhcyBpbmRpY2F0ZWQgYnkKKyAgICAgICAgc2VsZi5fY29udGFpbnNfaHRtbF9kaWZmIGJlaW5nIHNldCB0byB0cnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY29udGFpbnNfaHRtbF9kaWZmOgorICAgICAgICAgICAgeWllbGQgIjxwcmUgc3R5bGU9J21hcmdpbjowJz5cbiIKKworICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgeWllbGQgaHRtbF9lc2NhcGUobGluZSkKKworICAgICAgICAgICAgeWllbGQgJzwvcHJlPlxuJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsKHNlbGYsIHB1c2gsIGJvZHlfZmlsdGVyPU5vbmUsIGV4dHJhX2hlYWRlcl92YWx1ZXM9e30pOgorICAgICAgICAiIiJHZW5lcmF0ZSBhbiBlbWFpbCBkZXNjcmliaW5nIHRoaXMgY2hhbmdlLgorCisgICAgICAgIEl0ZXJhdGUgb3ZlciB0aGUgbGluZXMgKGluY2x1ZGluZyB0aGUgaGVhZGVyIGxpbmVzKSBvZiBhbgorICAgICAgICBlbWFpbCBkZXNjcmliaW5nIHRoaXMgY2hhbmdlLiAgSWYgYm9keV9maWx0ZXIgaXMgbm90IE5vbmUsCisgICAgICAgIHRoZW4gdXNlIGl0IHRvIGZpbHRlciB0aGUgbGluZXMgdGhhdCBhcmUgaW50ZW5kZWQgZm9yIHRoZQorICAgICAgICBlbWFpbCBib2R5LgorCisgICAgICAgIFRoZSBleHRyYV9oZWFkZXJfdmFsdWVzIGZpZWxkIGlzIHJlY2VpdmVkIGFzIGEgZGljdCBhbmQgbm90IGFzCisgICAgICAgICoqa3dhcmdzLCB0byBhbGxvdyBwYXNzaW5nIG90aGVyIGtleXdvcmQgYXJndW1lbnRzIGluIHRoZQorICAgICAgICBmdXR1cmUgKGUuZy4gcGFzc2luZyBleHRyYSB2YWx1ZXMgdG8gZ2VuZXJhdGVfZW1haWxfaW50cm8oKSIiIgorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZ2VuZXJhdGVfZW1haWxfaGVhZGVyKCoqZXh0cmFfaGVhZGVyX3ZhbHVlcyk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIHlpZWxkICdcbicKKyAgICAgICAgaHRtbF9lc2NhcGVfdmFsID0gKHNlbGYuZW52aXJvbm1lbnQuaHRtbF9pbl9pbnRybyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NvbnRhaW5zX2h0bWxfZGlmZikKKyAgICAgICAgaW50cm8gPSBzZWxmLmdlbmVyYXRlX2VtYWlsX2ludHJvKGh0bWxfZXNjYXBlX3ZhbCkKKyAgICAgICAgaWYgbm90IHNlbGYuZW52aXJvbm1lbnQuaHRtbF9pbl9pbnRybzoKKyAgICAgICAgICAgIGludHJvID0gc2VsZi5fd3JhcF9mb3JfaHRtbChpbnRybykKKyAgICAgICAgZm9yIGxpbmUgaW4gaW50cm86CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgaWYgc2VsZi5lbnZpcm9ubWVudC5jb21taXRCcm93c2VVUkw6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmdlbmVyYXRlX2Jyb3dzZV9saW5rKHNlbGYuZW52aXJvbm1lbnQuY29tbWl0QnJvd3NlVVJMKToKKyAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgYm9keSA9IHNlbGYuZ2VuZXJhdGVfZW1haWxfYm9keShwdXNoKQorICAgICAgICBpZiBib2R5X2ZpbHRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJvZHkgPSBib2R5X2ZpbHRlcihib2R5KQorCisgICAgICAgIGRpZmZfc3RhcnRlZCA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2NvbnRhaW5zX2h0bWxfZGlmZjoKKyAgICAgICAgICAgICMgIndoaXRlLXNwYWNlOiBwcmUiIGlzIHRoZSBkZWZhdWx0LCBidXQgd2UgbmVlZCB0bworICAgICAgICAgICAgIyBzcGVjaWZ5IGl0IGFnYWluIGluIGNhc2UgdGhlIG1lc3NhZ2UgaXMgdmlld2VkIGluIGEKKyAgICAgICAgICAgICMgd2VibWFpbCB3aGljaCB3cmFwcyBpdCBpbiBhbiBlbGVtZW50IHNldHRpbmcgd2hpdGUtc3BhY2UKKyAgICAgICAgICAgICMgdG8gc29tZXRoaW5nIGVsc2UgKFppbWJyYSBkb2VzIHRoaXMgYW5kIHNldHMKKyAgICAgICAgICAgICMgd2hpdGUtc3BhY2U6IHByZS1saW5lKS4KKyAgICAgICAgICAgIHlpZWxkICc8cHJlIHN0eWxlPSJ3aGl0ZS1zcGFjZTogcHJlOyBiYWNrZ3JvdW5kOiAjRjhGOEY4Ij4nCisgICAgICAgIGZvciBsaW5lIGluIGJvZHk6CisgICAgICAgICAgICBpZiBzZWxmLl9jb250YWluc19odG1sX2RpZmY6CisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHZlcnksIHZlcnkgbmFpdmUuIEl0IHdvdWxkIGJlIG11Y2ggYmV0dGVyIHRvIHJlYWxseQorICAgICAgICAgICAgICAgICMgcGFyc2UgdGhlIGRpZmYsIGkuZS4gbG9vayBhdCBob3cgbWFueSBsaW5lcyBkbyB3ZSBoYXZlIGluCisgICAgICAgICAgICAgICAgIyB0aGUgaHVuayBoZWFkZXJzIGluc3RlYWQgb2YgYmxpbmRseSBoaWdobGlnaHRpbmcgZXZlcnl0aGluZworICAgICAgICAgICAgICAgICMgdGhhdCBsb29rcyBsaWtlIGl0IG1pZ2h0IGJlIHBhcnQgb2YgYSBkaWZmLgorICAgICAgICAgICAgICAgIGJnY29sb3IgPSAnJworICAgICAgICAgICAgICAgIGZnY29sb3IgPSAnJworICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnLS0tIGEvJyk6CisgICAgICAgICAgICAgICAgICAgIGRpZmZfc3RhcnRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICdlMGUwZmYnCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ2RpZmYgJykgb3IgbGluZS5zdGFydHN3aXRoKCdpbmRleCAnKToKKyAgICAgICAgICAgICAgICAgICAgZGlmZl9zdGFydGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBmZ2NvbG9yID0gJzgwODA4MCcKKyAgICAgICAgICAgICAgICBlbGlmIGRpZmZfc3RhcnRlZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcrKysgJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gJ2UwZTBmZicKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ0BAJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gJ2UwZTBlMCcKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJysnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAnZTBmZmUwJworICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICdmZmUwZTAnCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ2NvbW1pdCAnKToKKyAgICAgICAgICAgICAgICAgICAgZmdjb2xvciA9ICc4MDgwMDAnCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJyAgICAnKToKKyAgICAgICAgICAgICAgICAgICAgZmdjb2xvciA9ICc0MDQwNDAnCisKKyAgICAgICAgICAgICAgICAjIENob3AgdGhlIHRyYWlsaW5nIExGLCB3ZSBkb24ndCB3YW50IGl0IGluc2lkZSA8cHJlPi4KKyAgICAgICAgICAgICAgICBsaW5lID0gaHRtbF9lc2NhcGUobGluZVs6LTFdKQorCisgICAgICAgICAgICAgICAgaWYgYmdjb2xvciBvciBmZ2NvbG9yOgorICAgICAgICAgICAgICAgICAgICBzdHlsZSA9ICdkaXNwbGF5OmJsb2NrOyB3aGl0ZS1zcGFjZTpwcmU7JworICAgICAgICAgICAgICAgICAgICBpZiBiZ2NvbG9yOgorICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgKz0gJ2JhY2tncm91bmQ6IycgKyBiZ2NvbG9yICsgJzsnCisgICAgICAgICAgICAgICAgICAgIGlmIGZnY29sb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSArPSAnY29sb3I6IycgKyBmZ2NvbG9yICsgJzsnCisgICAgICAgICAgICAgICAgICAgICMgVXNlIGEgPHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s+IHRvIGNvbG9yIHRoZQorICAgICAgICAgICAgICAgICAgICAjIHdob2xlIGxpbmUuIFRoZSBuZXdsaW5lIG11c3QgYmUgaW5zaWRlIHRoZSBzcGFuCisgICAgICAgICAgICAgICAgICAgICMgdG8gZGlzcGxheSBwcm9wZXJseSBib3RoIGluIEZpcmVmb3ggYW5kIGluCisgICAgICAgICAgICAgICAgICAgICMgdGV4dC1iYXNlZCBicm93c2VyLgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gIjxzcGFuIHN0eWxlPSclcyc+JXNcbjwvc3Bhbj4iICUgKHN0eWxlLCBsaW5lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgJ1xuJworCisgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIGlmIHNlbGYuX2NvbnRhaW5zX2h0bWxfZGlmZjoKKyAgICAgICAgICAgIHlpZWxkICc8L3ByZT4nCisgICAgICAgIGh0bWxfZXNjYXBlX3ZhbCA9IChzZWxmLmVudmlyb25tZW50Lmh0bWxfaW5fZm9vdGVyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29udGFpbnNfaHRtbF9kaWZmKQorICAgICAgICBmb290ZXIgPSBzZWxmLmdlbmVyYXRlX2VtYWlsX2Zvb3RlcihodG1sX2VzY2FwZV92YWwpCisgICAgICAgIGlmIG5vdCBzZWxmLmVudmlyb25tZW50Lmh0bWxfaW5fZm9vdGVyOgorICAgICAgICAgICAgZm9vdGVyID0gc2VsZi5fd3JhcF9mb3JfaHRtbChmb290ZXIpCisgICAgICAgIGZvciBsaW5lIGluIGZvb3RlcjoKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZXRfc3BlY2lmaWNfZnJvbWFkZHIoc2VsZik6CisgICAgICAgICIiIkZvciBraW5kcyBvZiBDaGFuZ2VzIHdoaWNoIHNwZWNpZnkgaXQsIHJldHVybiB0aGUga2luZC1zcGVjaWZpYworICAgICAgICBGcm9tIGFkZHJlc3MgdG8gdXNlLiIiIgorICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIFJldmlzaW9uKENoYW5nZSk6CisgICAgIiIiQSBDaGFuZ2UgY29uc2lzdGluZyBvZiBhIHNpbmdsZSBnaXQgY29tbWl0LiIiIgorCisgICAgQ0NfUkUgPSByZS5jb21waWxlKHInXlxzKkNbQ2NdOlxzKig/UDx0bz5bXiNdK0BbXlxzI10qKVxzKigjLiopPyQnKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlZmVyZW5jZV9jaGFuZ2UsIHJldiwgbnVtLCB0b3QpOgorICAgICAgICBDaGFuZ2UuX19pbml0X18oc2VsZiwgcmVmZXJlbmNlX2NoYW5nZS5lbnZpcm9ubWVudCkKKyAgICAgICAgc2VsZi5yZWZlcmVuY2VfY2hhbmdlID0gcmVmZXJlbmNlX2NoYW5nZQorICAgICAgICBzZWxmLnJldiA9IHJldgorICAgICAgICBzZWxmLmNoYW5nZV90eXBlID0gc2VsZi5yZWZlcmVuY2VfY2hhbmdlLmNoYW5nZV90eXBlCisgICAgICAgIHNlbGYucmVmbmFtZSA9IHNlbGYucmVmZXJlbmNlX2NoYW5nZS5yZWZuYW1lCisgICAgICAgIHNlbGYubnVtID0gbnVtCisgICAgICAgIHNlbGYudG90ID0gdG90CisgICAgICAgIHNlbGYuYXV0aG9yID0gcmVhZF9naXRfb3V0cHV0KFsnbG9nJywgJy0tbm8td2FsaycsICctLWZvcm1hdD0lYU4gPCVhRT4nLCBzZWxmLnJldi5zaGExXSkKKyAgICAgICAgc2VsZi5yZWNpcGllbnRzID0gc2VsZi5lbnZpcm9ubWVudC5nZXRfcmV2aXNpb25fcmVjaXBpZW50cyhzZWxmKQorCisgICAgICAgICMgLXMgaXMgc2hvcnQgZm9yIC0tbm8tcGF0Y2gsIGJ1dCAtcyB3b3JrcyBvbiBvbGRlciBnaXQncyAoZS5nLiAxLjcpCisgICAgICAgIHNlbGYucGFyZW50cyA9IHJlYWRfZ2l0X2xpbmVzKFsnc2hvdycsICctcycsICctLWZvcm1hdD0lUCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV2LnNoYTFdKVswXS5zcGxpdCgpCisKKyAgICAgICAgc2VsZi5jY19yZWNpcGllbnRzID0gJycKKyAgICAgICAgaWYgc2VsZi5lbnZpcm9ubWVudC5nZXRfc2NhbmNvbW1pdGZvcmNjKCk6CisgICAgICAgICAgICBzZWxmLmNjX3JlY2lwaWVudHMgPSAnLCAnLmpvaW4odG8uc3RyaXAoKSBmb3IgdG8gaW4gc2VsZi5fY2NfcmVjaXBpZW50cygpKQorICAgICAgICAgICAgaWYgc2VsZi5jY19yZWNpcGllbnRzOgorICAgICAgICAgICAgICAgIHNlbGYuZW52aXJvbm1lbnQubG9nX21zZygKKyAgICAgICAgICAgICAgICAgICAgJ0FkZCAlcyB0byBDQyBmb3IgJXMnICUgKHNlbGYuY2NfcmVjaXBpZW50cywgc2VsZi5yZXYuc2hhMSkpCisKKyAgICBkZWYgX2NjX3JlY2lwaWVudHMoc2VsZik6CisgICAgICAgIGNjX3JlY2lwaWVudHMgPSBbXQorICAgICAgICBtZXNzYWdlID0gcmVhZF9naXRfb3V0cHV0KFsnbG9nJywgJy0tbm8td2FsaycsICctLWZvcm1hdD0lYicsIHNlbGYucmV2LnNoYTFdKQorICAgICAgICBsaW5lcyA9IG1lc3NhZ2Uuc3RyaXAoKS5zcGxpdCgnXG4nKQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaChzZWxmLkNDX1JFLCBsaW5lKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBjY19yZWNpcGllbnRzLmFwcGVuZChtLmdyb3VwKCd0bycpKQorCisgICAgICAgIHJldHVybiBjY19yZWNpcGllbnRzCisKKyAgICBkZWYgX2NvbXB1dGVfdmFsdWVzKHNlbGYpOgorICAgICAgICB2YWx1ZXMgPSBDaGFuZ2UuX2NvbXB1dGVfdmFsdWVzKHNlbGYpCisKKyAgICAgICAgb25lbGluZSA9IHJlYWRfZ2l0X291dHB1dCgKKyAgICAgICAgICAgIFsnbG9nJywgJy0tZm9ybWF0PSVzJywgJy0tbm8td2FsaycsIHNlbGYucmV2LnNoYTFdCisgICAgICAgICAgICApCisKKyAgICAgICAgbWF4X3N1YmplY3RfbGVuZ3RoID0gc2VsZi5lbnZpcm9ubWVudC5nZXRfbWF4X3N1YmplY3RfbGVuZ3RoKCkKKyAgICAgICAgaWYgbWF4X3N1YmplY3RfbGVuZ3RoID4gMCBhbmQgbGVuKG9uZWxpbmUpID4gbWF4X3N1YmplY3RfbGVuZ3RoOgorICAgICAgICAgICAgb25lbGluZSA9IG9uZWxpbmVbOm1heF9zdWJqZWN0X2xlbmd0aCAtIDZdICsgJyBbLi4uXScKKworICAgICAgICB2YWx1ZXNbJ3JldiddID0gc2VsZi5yZXYuc2hhMQorICAgICAgICB2YWx1ZXNbJ3BhcmVudHMnXSA9ICcgJy5qb2luKHNlbGYucGFyZW50cykKKyAgICAgICAgdmFsdWVzWydyZXZfc2hvcnQnXSA9IHNlbGYucmV2LnNob3J0CisgICAgICAgIHZhbHVlc1snY2hhbmdlX3R5cGUnXSA9IHNlbGYuY2hhbmdlX3R5cGUKKyAgICAgICAgdmFsdWVzWydyZWZuYW1lJ10gPSBzZWxmLnJlZm5hbWUKKyAgICAgICAgdmFsdWVzWyduZXdyZXYnXSA9IHNlbGYucmV2LnNoYTEKKyAgICAgICAgdmFsdWVzWydzaG9ydF9yZWZuYW1lJ10gPSBzZWxmLnJlZmVyZW5jZV9jaGFuZ2Uuc2hvcnRfcmVmbmFtZQorICAgICAgICB2YWx1ZXNbJ3JlZm5hbWVfdHlwZSddID0gc2VsZi5yZWZlcmVuY2VfY2hhbmdlLnJlZm5hbWVfdHlwZQorICAgICAgICB2YWx1ZXNbJ3JlcGx5X3RvX21zZ2lkJ10gPSBzZWxmLnJlZmVyZW5jZV9jaGFuZ2UubXNnaWQKKyAgICAgICAgdmFsdWVzWyd0aHJlYWRfaW5kZXgnXSA9IHNlbGYucmVmZXJlbmNlX2NoYW5nZS50aHJlYWRfaW5kZXgKKyAgICAgICAgdmFsdWVzWydudW0nXSA9IHNlbGYubnVtCisgICAgICAgIHZhbHVlc1sndG90J10gPSBzZWxmLnRvdAorICAgICAgICB2YWx1ZXNbJ3JlY2lwaWVudHMnXSA9IHNlbGYucmVjaXBpZW50cworICAgICAgICBpZiBzZWxmLmNjX3JlY2lwaWVudHM6CisgICAgICAgICAgICB2YWx1ZXNbJ2NjX3JlY2lwaWVudHMnXSA9IHNlbGYuY2NfcmVjaXBpZW50cworICAgICAgICB2YWx1ZXNbJ29uZWxpbmUnXSA9IG9uZWxpbmUKKyAgICAgICAgdmFsdWVzWydhdXRob3InXSA9IHNlbGYuYXV0aG9yCisKKyAgICAgICAgcmVwbHlfdG8gPSBzZWxmLmVudmlyb25tZW50LmdldF9yZXBseV90b19jb21taXQoc2VsZikKKyAgICAgICAgaWYgcmVwbHlfdG86CisgICAgICAgICAgICB2YWx1ZXNbJ3JlcGx5X3RvJ10gPSByZXBseV90bworCisgICAgICAgIHJldHVybiB2YWx1ZXMKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbF9oZWFkZXIoc2VsZiwgKipleHRyYV92YWx1ZXMpOgorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9oZWFkZXJfbGluZXMoCisgICAgICAgICAgICAgICAgUkVWSVNJT05fSEVBREVSX1RFTVBMQVRFLCAqKmV4dHJhX3ZhbHVlcworICAgICAgICAgICAgICAgICk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfYnJvd3NlX2xpbmsoc2VsZiwgYmFzZV91cmwpOgorICAgICAgICBpZiAnJSgnIG5vdCBpbiBiYXNlX3VybDoKKyAgICAgICAgICAgIGJhc2VfdXJsICs9ICclKGlkKXMnCisgICAgICAgIHVybCA9ICIiLmpvaW4oc2VsZi5leHBhbmRfbGluZXMoYmFzZV91cmwpKQorICAgICAgICBpZiBzZWxmLl9jb250ZW50X3R5cGUgPT0gJ2h0bWwnOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoTElOS19IVE1MX1RFTVBMQVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbF9lc2NhcGVfdmFsPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VfdXJsPXVybCk6CisgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICBlbGlmIHNlbGYuX2NvbnRlbnRfdHlwZSA9PSAncGxhaW4nOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoTElOS19URVhUX1RFTVBMQVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbF9lc2NhcGVfdmFsPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NlX3VybD11cmwpOgorICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIkNvbnRlbnQtdHlwZSAlcyB1bnN1cHBvcnRlZC4gUGxlYXNlIHJlcG9ydCBpdCBhcyBhIGJ1Zy4iKQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsX2ludHJvKHNlbGYsIGh0bWxfZXNjYXBlX3ZhbD1GYWxzZSk6CisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKFJFVklTSU9OX0lOVFJPX1RFTVBMQVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sX2VzY2FwZV92YWw9aHRtbF9lc2NhcGVfdmFsKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbF9ib2R5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJTaG93IHRoaXMgcmV2aXNpb24uIiIiCisKKyAgICAgICAgZm9yIGxpbmUgaW4gcmVhZF9naXRfbGluZXMoCisgICAgICAgICAgICAgICAgWydsb2cnXSArIHNlbGYuZW52aXJvbm1lbnQuY29tbWl0bG9nb3B0cyArIFsnLTEnLCBzZWxmLnJldi5zaGExXSwKKyAgICAgICAgICAgICAgICBrZWVwZW5kcz1UcnVlLAorICAgICAgICAgICAgICAgIGVycm9ycz0ncmVwbGFjZScpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdEYXRlOiAgICcpIGFuZCBzZWxmLmVudmlyb25tZW50LmRhdGVfc3Vic3RpdHV0ZToKKyAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmVudmlyb25tZW50LmRhdGVfc3Vic3RpdHV0ZSArIGxpbmVbbGVuKCdEYXRlOiAgICcpOl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsX2Zvb3RlcihzZWxmLCBodG1sX2VzY2FwZV92YWwpOgorICAgICAgICByZXR1cm4gc2VsZi5leHBhbmRfbGluZXMoUkVWSVNJT05fRk9PVEVSX1RFTVBMQVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbF9lc2NhcGVfdmFsPWh0bWxfZXNjYXBlX3ZhbCkKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbChzZWxmLCBwdXNoLCBib2R5X2ZpbHRlcj1Ob25lLCBleHRyYV9oZWFkZXJfdmFsdWVzPXt9KToKKyAgICAgICAgc2VsZi5fY29udGFpbnNfZGlmZigpCisgICAgICAgIHJldHVybiBDaGFuZ2UuZ2VuZXJhdGVfZW1haWwoc2VsZiwgcHVzaCwgYm9keV9maWx0ZXIsIGV4dHJhX2hlYWRlcl92YWx1ZXMpCisKKyAgICBkZWYgZ2V0X3NwZWNpZmljX2Zyb21hZGRyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lbnZpcm9ubWVudC5mcm9tX2NvbW1pdAorCisKK2NsYXNzIFJlZmVyZW5jZUNoYW5nZShDaGFuZ2UpOgorICAgICIiIkEgQ2hhbmdlIHRvIGEgR2l0IHJlZmVyZW5jZS4KKworICAgIEFuIGFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyBhIGNyZWF0ZSwgdXBkYXRlLCBvciBkZWxldGUgb2YgYQorICAgIEdpdCByZWZlcmVuY2UuICBEZXJpdmVkIGNsYXNzZXMgaGFuZGxlIHNwZWNpZmljIHR5cGVzIG9mIHJlZmVyZW5jZQorICAgIChlLmcuLCB0YWdzIHZzLiBicmFuY2hlcykuICBUaGVzZSBjbGFzc2VzIGdlbmVyYXRlIHRoZSBtYWluCisgICAgcmVmZXJlbmNlIGNoYW5nZSBlbWFpbCBzdW1tYXJpemluZyB0aGUgcmVmZXJlbmNlIGNoYW5nZSBhbmQKKyAgICB3aGV0aGVyIGl0IGNhdXNlZCBhbnkgYW55IGNvbW1pdHMgdG8gYmUgYWRkZWQgb3IgcmVtb3ZlZC4KKworICAgIFJlZmVyZW5jZUNoYW5nZSBvYmplY3RzIGFyZSB1c3VhbGx5IGNyZWF0ZWQgdXNpbmcgdGhlIHN0YXRpYworICAgIGNyZWF0ZSgpIG1ldGhvZCwgd2hpY2ggaGFzIHRoZSBsb2dpYyB0byBkZWNpZGUgd2hpY2ggZGVyaXZlZCBjbGFzcworICAgIHRvIGluc3RhbnRpYXRlLiIiIgorCisgICAgUkVGX1JFID0gcmUuY29tcGlsZShyJ15yZWZzXC8oP1A8YXJlYT5bXlwvXSspXC8oP1A8c2hvcnRuYW1lPi4qKSQnKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGUoZW52aXJvbm1lbnQsIG9sZHJldiwgbmV3cmV2LCByZWZuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIGEgUmVmZXJlbmNlQ2hhbmdlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNoYW5nZS4KKworICAgICAgICBSZXR1cm4gYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgdHlwZSBvZiBjaGFuZ2UgdGhhdCBpcyBiZWluZworICAgICAgICBtYWRlLiBvbGRyZXYgYW5kIG5ld3JldiBzaG91bGQgYmUgU0hBMXMgb3IgWkVST1MuIiIiCisKKyAgICAgICAgb2xkID0gR2l0T2JqZWN0KG9sZHJldikKKyAgICAgICAgbmV3ID0gR2l0T2JqZWN0KG5ld3JldikKKyAgICAgICAgcmV2ID0gbmV3IG9yIG9sZAorCisgICAgICAgICMgVGhlIHJldmlzaW9uIHR5cGUgdGVsbHMgdXMgd2hhdCB0eXBlIHRoZSBjb21taXQgaXMsIGNvbWJpbmVkIHdpdGgKKyAgICAgICAgIyB0aGUgbG9jYXRpb24gb2YgdGhlIHJlZiB3ZSBjYW4gZGVjaWRlIGJldHdlZW4KKyAgICAgICAgIyAgLSB3b3JraW5nIGJyYW5jaAorICAgICAgICAjICAtIHRyYWNraW5nIGJyYW5jaAorICAgICAgICAjICAtIHVuYW5ub3RhdGVkIHRhZworICAgICAgICAjICAtIGFubm90YXRlZCB0YWcKKyAgICAgICAgbSA9IFJlZmVyZW5jZUNoYW5nZS5SRUZfUkUubWF0Y2gocmVmbmFtZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIGFyZWEgPSBtLmdyb3VwKCdhcmVhJykKKyAgICAgICAgICAgIHNob3J0X3JlZm5hbWUgPSBtLmdyb3VwKCdzaG9ydG5hbWUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJlYSA9ICcnCisgICAgICAgICAgICBzaG9ydF9yZWZuYW1lID0gcmVmbmFtZQorCisgICAgICAgIGlmIHJldi50eXBlID09ICd0YWcnOgorICAgICAgICAgICAgIyBBbm5vdGF0ZWQgdGFnOgorICAgICAgICAgICAga2xhc3MgPSBBbm5vdGF0ZWRUYWdDaGFuZ2UKKyAgICAgICAgZWxpZiByZXYudHlwZSA9PSAnY29tbWl0JzoKKyAgICAgICAgICAgIGlmIGFyZWEgPT0gJ3RhZ3MnOgorICAgICAgICAgICAgICAgICMgTm9uLWFubm90YXRlZCB0YWc6CisgICAgICAgICAgICAgICAga2xhc3MgPSBOb25Bbm5vdGF0ZWRUYWdDaGFuZ2UKKyAgICAgICAgICAgIGVsaWYgYXJlYSA9PSAnaGVhZHMnOgorICAgICAgICAgICAgICAgICMgQnJhbmNoOgorICAgICAgICAgICAgICAgIGtsYXNzID0gQnJhbmNoQ2hhbmdlCisgICAgICAgICAgICBlbGlmIGFyZWEgPT0gJ3JlbW90ZXMnOgorICAgICAgICAgICAgICAgICMgVHJhY2tpbmcgYnJhbmNoOgorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LmxvZ193YXJuaW5nKAorICAgICAgICAgICAgICAgICAgICAnKioqIFB1c2gtdXBkYXRlIG9mIHRyYWNraW5nIGJyYW5jaCAlclxuJworICAgICAgICAgICAgICAgICAgICAnKioqICAtIGluY29tcGxldGUgZW1haWwgZ2VuZXJhdGVkLicKKyAgICAgICAgICAgICAgICAgICAgJSAocmVmbmFtZSwpCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBrbGFzcyA9IE90aGVyUmVmZXJlbmNlQ2hhbmdlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgU29tZSBvdGhlciByZWZlcmVuY2UgbmFtZXNwYWNlOgorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LmxvZ193YXJuaW5nKAorICAgICAgICAgICAgICAgICAgICAnKioqIFB1c2gtdXBkYXRlIG9mIHN0cmFuZ2UgcmVmZXJlbmNlICVyXG4nCisgICAgICAgICAgICAgICAgICAgICcqKiogIC0gaW5jb21wbGV0ZSBlbWFpbCBnZW5lcmF0ZWQuJworICAgICAgICAgICAgICAgICAgICAlIChyZWZuYW1lLCkKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGtsYXNzID0gT3RoZXJSZWZlcmVuY2VDaGFuZ2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgQW55dGhpbmcgZWxzZSAoaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8pCisgICAgICAgICAgICBlbnZpcm9ubWVudC5sb2dfd2FybmluZygKKyAgICAgICAgICAgICAgICAnKioqIFVua25vd24gdHlwZSBvZiB1cGRhdGUgdG8gJXIgKCVzKVxuJworICAgICAgICAgICAgICAgICcqKiogIC0gaW5jb21wbGV0ZSBlbWFpbCBnZW5lcmF0ZWQuJworICAgICAgICAgICAgICAgICUgKHJlZm5hbWUsIHJldi50eXBlLCkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBrbGFzcyA9IE90aGVyUmVmZXJlbmNlQ2hhbmdlCisKKyAgICAgICAgcmV0dXJuIGtsYXNzKAorICAgICAgICAgICAgZW52aXJvbm1lbnQsCisgICAgICAgICAgICByZWZuYW1lPXJlZm5hbWUsIHNob3J0X3JlZm5hbWU9c2hvcnRfcmVmbmFtZSwKKyAgICAgICAgICAgIG9sZD1vbGQsIG5ldz1uZXcsIHJldj1yZXYsCisgICAgICAgICAgICApCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1ha2VfdGhyZWFkX2luZGV4KCk6CisgICAgICAgICIiIlJldHVybiBhIHN0cmluZyBhcHByb3ByaWF0ZSBmb3IgdGhlIFRocmVhZC1JbmRleCBoZWFkZXIsCisgICAgICAgIG5lZWRlZCBieSBNUyBPdXRsb29rIHRvIGdldCB0aHJlYWRpbmcgcmlnaHQuCisKKyAgICAgICAgVGhlIGZvcm1hdCBpcyAoYmFzZTY0LWVuY29kZWQpOgorICAgICAgICAtIDEgYnl0ZSBtdXN0IGJlIDEKKyAgICAgICAgLSA1IGJ5dGVzIGVuY29kZSBhIGRhdGUgKGhhcmRjb2RlZCBoZXJlKQorICAgICAgICAtIDE2IGJ5dGVzIGZvciBhIGdsb2JhbGx5IHVuaXF1ZSBpZGVudGlmaWVyCisKKyAgICAgICAgRklYTUU6IFVuZm9ydHVuYXRlbHksIGV2ZW4gd2l0aCB0aGUgVGhyZWFkLUluZGV4IGZpZWxkLCBNUworICAgICAgICBPdXRsb29rIGRvZXNuJ3Qgc2VlbSB0byBkbyB0aGUgdGhyZWFkaW5nIHJlbGlhYmx5IChzZWUKKyAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2dpdC1tdWx0aW1haWwvZ2l0LW11bHRpbWFpbC9wdWxsLzE5NCkuCisgICAgICAgICIiIgorICAgICAgICB0aHJlYWRfaW5kZXggPSBiJ1x4MDFceDAwXHgwMFx4MTJceDM0XHg1NicgKyB1dWlkLnV1aWQ0KCkuYnl0ZXMKKyAgICAgICAgcmV0dXJuIGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUodGhyZWFkX2luZGV4KS5kZWNvZGUoJ2FzY2lpJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnZpcm9ubWVudCwgcmVmbmFtZSwgc2hvcnRfcmVmbmFtZSwgb2xkLCBuZXcsIHJldik6CisgICAgICAgIENoYW5nZS5fX2luaXRfXyhzZWxmLCBlbnZpcm9ubWVudCkKKyAgICAgICAgc2VsZi5jaGFuZ2VfdHlwZSA9IHsKKyAgICAgICAgICAgIChGYWxzZSwgVHJ1ZSk6ICdjcmVhdGUnLAorICAgICAgICAgICAgKFRydWUsIFRydWUpOiAndXBkYXRlJywKKyAgICAgICAgICAgIChUcnVlLCBGYWxzZSk6ICdkZWxldGUnLAorICAgICAgICAgICAgfVtib29sKG9sZCksIGJvb2wobmV3KV0KKyAgICAgICAgc2VsZi5yZWZuYW1lID0gcmVmbmFtZQorICAgICAgICBzZWxmLnNob3J0X3JlZm5hbWUgPSBzaG9ydF9yZWZuYW1lCisgICAgICAgIHNlbGYub2xkID0gb2xkCisgICAgICAgIHNlbGYubmV3ID0gbmV3CisgICAgICAgIHNlbGYucmV2ID0gcmV2CisgICAgICAgIHNlbGYubXNnaWQgPSBtYWtlX21zZ2lkKCkKKyAgICAgICAgc2VsZi50aHJlYWRfaW5kZXggPSBzZWxmLm1ha2VfdGhyZWFkX2luZGV4KCkKKyAgICAgICAgc2VsZi5kaWZmb3B0cyA9IGVudmlyb25tZW50LmRpZmZvcHRzCisgICAgICAgIHNlbGYuZ3JhcGhvcHRzID0gZW52aXJvbm1lbnQuZ3JhcGhvcHRzCisgICAgICAgIHNlbGYubG9nb3B0cyA9IGVudmlyb25tZW50LmxvZ29wdHMKKyAgICAgICAgc2VsZi5jb21taXRsb2dvcHRzID0gZW52aXJvbm1lbnQuY29tbWl0bG9nb3B0cworICAgICAgICBzZWxmLnNob3dncmFwaCA9IGVudmlyb25tZW50LnJlZmNoYW5nZV9zaG93Z3JhcGgKKyAgICAgICAgc2VsZi5zaG93bG9nID0gZW52aXJvbm1lbnQucmVmY2hhbmdlX3Nob3dsb2cKKworICAgICAgICBzZWxmLmhlYWRlcl90ZW1wbGF0ZSA9IFJFRkNIQU5HRV9IRUFERVJfVEVNUExBVEUKKyAgICAgICAgc2VsZi5pbnRyb190ZW1wbGF0ZSA9IFJFRkNIQU5HRV9JTlRST19URU1QTEFURQorICAgICAgICBzZWxmLmZvb3Rlcl90ZW1wbGF0ZSA9IEZPT1RFUl9URU1QTEFURQorCisgICAgZGVmIF9jb21wdXRlX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgdmFsdWVzID0gQ2hhbmdlLl9jb21wdXRlX3ZhbHVlcyhzZWxmKQorCisgICAgICAgIHZhbHVlc1snY2hhbmdlX3R5cGUnXSA9IHNlbGYuY2hhbmdlX3R5cGUKKyAgICAgICAgdmFsdWVzWydyZWZuYW1lX3R5cGUnXSA9IHNlbGYucmVmbmFtZV90eXBlCisgICAgICAgIHZhbHVlc1sncmVmbmFtZSddID0gc2VsZi5yZWZuYW1lCisgICAgICAgIHZhbHVlc1snc2hvcnRfcmVmbmFtZSddID0gc2VsZi5zaG9ydF9yZWZuYW1lCisgICAgICAgIHZhbHVlc1snbXNnaWQnXSA9IHNlbGYubXNnaWQKKyAgICAgICAgdmFsdWVzWyd0aHJlYWRfaW5kZXgnXSA9IHNlbGYudGhyZWFkX2luZGV4CisgICAgICAgIHZhbHVlc1sncmVjaXBpZW50cyddID0gc2VsZi5yZWNpcGllbnRzCisgICAgICAgIHZhbHVlc1snb2xkcmV2J10gPSBzdHIoc2VsZi5vbGQpCisgICAgICAgIHZhbHVlc1snb2xkcmV2X3Nob3J0J10gPSBzZWxmLm9sZC5zaG9ydAorICAgICAgICB2YWx1ZXNbJ25ld3JldiddID0gc3RyKHNlbGYubmV3KQorICAgICAgICB2YWx1ZXNbJ25ld3Jldl9zaG9ydCddID0gc2VsZi5uZXcuc2hvcnQKKworICAgICAgICBpZiBzZWxmLm9sZDoKKyAgICAgICAgICAgIHZhbHVlc1snb2xkcmV2X3R5cGUnXSA9IHNlbGYub2xkLnR5cGUKKyAgICAgICAgaWYgc2VsZi5uZXc6CisgICAgICAgICAgICB2YWx1ZXNbJ25ld3Jldl90eXBlJ10gPSBzZWxmLm5ldy50eXBlCisKKyAgICAgICAgcmVwbHlfdG8gPSBzZWxmLmVudmlyb25tZW50LmdldF9yZXBseV90b19yZWZjaGFuZ2Uoc2VsZikKKyAgICAgICAgaWYgcmVwbHlfdG86CisgICAgICAgICAgICB2YWx1ZXNbJ3JlcGx5X3RvJ10gPSByZXBseV90bworCisgICAgICAgIHJldHVybiB2YWx1ZXMKKworICAgIGRlZiBzZW5kX3NpbmdsZV9jb21iaW5lZF9lbWFpbChzZWxmLCBrbm93bl9hZGRlZF9zaGExcyk6CisgICAgICAgICIiIkRldGVybWluZSBpZiBhIGNvbWJpbmVkIHJlZmNoYW5nZS9yZXZpc2lvbiBlbWFpbCBzaG91bGQgYmUgc2VudAorCisgICAgICAgIElmIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgbmV3IChub24tbWVyZ2UpIGNvbW1pdCBhZGRlZCBieSBhCisgICAgICAgIGNoYW5nZSwgaXQgaXMgdXNlZnVsIHRvIGNvbWJpbmUgdGhlIFJlZmVyZW5jZUNoYW5nZSBhbmQKKyAgICAgICAgUmV2aXNpb24gZW1haWxzIGludG8gb25lLiAgSW4gc3VjaCBhIGNhc2UsIHJldHVybiB0aGUgc2luZ2xlCisgICAgICAgIHJldmlzaW9uOyBvdGhlcndpc2UsIHJldHVybiBOb25lLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gaW4gQnJhbmNoQ2hhbmdlLiIiIgorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2VuZXJhdGVfY29tYmluZWRfZW1haWwoc2VsZiwgcHVzaCwgcmV2aXNpb24sIGJvZHlfZmlsdGVyPU5vbmUsIGV4dHJhX2hlYWRlcl92YWx1ZXM9e30pOgorICAgICAgICAiIiJHZW5lcmF0ZSBhbiBlbWFpbCBkZXNjcmliaW5nIHRoaXMgY2hhbmdlIEFORCBzcGVjaWZpZWQgcmV2aXNpb24uCisKKyAgICAgICAgSXRlcmF0ZSBvdmVyIHRoZSBsaW5lcyAoaW5jbHVkaW5nIHRoZSBoZWFkZXIgbGluZXMpIG9mIGFuCisgICAgICAgIGVtYWlsIGRlc2NyaWJpbmcgdGhpcyBjaGFuZ2UuICBJZiBib2R5X2ZpbHRlciBpcyBub3QgTm9uZSwKKyAgICAgICAgdGhlbiB1c2UgaXQgdG8gZmlsdGVyIHRoZSBsaW5lcyB0aGF0IGFyZSBpbnRlbmRlZCBmb3IgdGhlCisgICAgICAgIGVtYWlsIGJvZHkuCisKKyAgICAgICAgVGhlIGV4dHJhX2hlYWRlcl92YWx1ZXMgZmllbGQgaXMgcmVjZWl2ZWQgYXMgYSBkaWN0IGFuZCBub3QgYXMKKyAgICAgICAgKiprd2FyZ3MsIHRvIGFsbG93IHBhc3Npbmcgb3RoZXIga2V5d29yZCBhcmd1bWVudHMgaW4gdGhlCisgICAgICAgIGZ1dHVyZSAoZS5nLiBwYXNzaW5nIGV4dHJhIHZhbHVlcyB0byBnZW5lcmF0ZV9lbWFpbF9pbnRybygpCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBpbiBCcmFuY2hDaGFuZ2UuIiIiCisKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGdldF9zdWJqZWN0KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHsKKyAgICAgICAgICAgICdjcmVhdGUnOiBSRUZfQ1JFQVRFRF9TVUJKRUNUX1RFTVBMQVRFLAorICAgICAgICAgICAgJ3VwZGF0ZSc6IFJFRl9VUERBVEVEX1NVQkpFQ1RfVEVNUExBVEUsCisgICAgICAgICAgICAnZGVsZXRlJzogUkVGX0RFTEVURURfU1VCSkVDVF9URU1QTEFURSwKKyAgICAgICAgICAgIH1bc2VsZi5jaGFuZ2VfdHlwZV0KKyAgICAgICAgcmV0dXJuIHNlbGYuZXhwYW5kKHRlbXBsYXRlKQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsX2hlYWRlcihzZWxmLCAqKmV4dHJhX3ZhbHVlcyk6CisgICAgICAgIGlmICdzdWJqZWN0JyBub3QgaW4gZXh0cmFfdmFsdWVzOgorICAgICAgICAgICAgZXh0cmFfdmFsdWVzWydzdWJqZWN0J10gPSBzZWxmLmdldF9zdWJqZWN0KCkKKworICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9oZWFkZXJfbGluZXMoCisgICAgICAgICAgICAgICAgc2VsZi5oZWFkZXJfdGVtcGxhdGUsICoqZXh0cmFfdmFsdWVzCisgICAgICAgICAgICAgICAgKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbF9pbnRybyhzZWxmLCBodG1sX2VzY2FwZV92YWw9RmFsc2UpOgorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9saW5lcyhzZWxmLmludHJvX3RlbXBsYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sX2VzY2FwZV92YWw9aHRtbF9lc2NhcGVfdmFsKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbF9ib2R5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJDYWxsIHRoZSBhcHByb3ByaWF0ZSBib2R5LWdlbmVyYXRpb24gcm91dGluZS4KKworICAgICAgICBDYWxsIG9uZSBvZiBnZW5lcmF0ZV9jcmVhdGVfc3VtbWFyeSgpIC8KKyAgICAgICAgZ2VuZXJhdGVfdXBkYXRlX3N1bW1hcnkoKSAvIGdlbmVyYXRlX2RlbGV0ZV9zdW1tYXJ5KCkuIiIiCisKKyAgICAgICAgY2hhbmdlX3N1bW1hcnkgPSB7CisgICAgICAgICAgICAnY3JlYXRlJzogc2VsZi5nZW5lcmF0ZV9jcmVhdGVfc3VtbWFyeSwKKyAgICAgICAgICAgICdkZWxldGUnOiBzZWxmLmdlbmVyYXRlX2RlbGV0ZV9zdW1tYXJ5LAorICAgICAgICAgICAgJ3VwZGF0ZSc6IHNlbGYuZ2VuZXJhdGVfdXBkYXRlX3N1bW1hcnksCisgICAgICAgICAgICB9W3NlbGYuY2hhbmdlX3R5cGVdKHB1c2gpCisgICAgICAgIGZvciBsaW5lIGluIGNoYW5nZV9zdW1tYXJ5OgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZ2VuZXJhdGVfcmV2aXNpb25fY2hhbmdlX3N1bW1hcnkocHVzaCk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfZW1haWxfZm9vdGVyKHNlbGYsIGh0bWxfZXNjYXBlX3ZhbCk6CisgICAgICAgIHJldHVybiBzZWxmLmV4cGFuZF9saW5lcyhzZWxmLmZvb3Rlcl90ZW1wbGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxfZXNjYXBlX3ZhbD1odG1sX2VzY2FwZV92YWwpCisKKyAgICBkZWYgZ2VuZXJhdGVfcmV2aXNpb25fY2hhbmdlX2dyYXBoKHNlbGYsIHB1c2gpOgorICAgICAgICBpZiBzZWxmLnNob3dncmFwaDoKKyAgICAgICAgICAgIGFyZ3MgPSBbJy0tZ3JhcGgnXSArIHNlbGYuZ3JhcGhvcHRzCisgICAgICAgICAgICBmb3IgbmV3b2xkIGluICgnbmV3JywgJ29sZCcpOgorICAgICAgICAgICAgICAgIGhhc19uZXdvbGQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNwZWMgPSBwdXNoLmdldF9jb21taXRzX3NwZWMobmV3b2xkLCBzZWxmKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGdpdF9sb2coc3BlYywgYXJncz1hcmdzLCBrZWVwZW5kcz1UcnVlKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGhhc19uZXdvbGQ6CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNfbmV3b2xkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgJ1xuJworICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgJ0dyYXBoIG9mICVzIGNvbW1pdHM6XG5cbicgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyduZXcnOiAnbmV3JywgJ29sZCc6ICdkaXNjYXJkZWQnfVtuZXdvbGRdLCkKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgJyAgJyArIGxpbmUKKyAgICAgICAgICAgICAgICBpZiBoYXNfbmV3b2xkOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCAnXG4nCisKKyAgICBkZWYgZ2VuZXJhdGVfcmV2aXNpb25fY2hhbmdlX2xvZyhzZWxmLCBuZXdfY29tbWl0c19saXN0KToKKyAgICAgICAgaWYgc2VsZi5zaG93bG9nOgorICAgICAgICAgICAgeWllbGQgJ1xuJworICAgICAgICAgICAgeWllbGQgJ0RldGFpbGVkIGxvZyBvZiBuZXcgY29tbWl0czpcblxuJworICAgICAgICAgICAgZm9yIGxpbmUgaW4gcmVhZF9naXRfbGluZXMoCisgICAgICAgICAgICAgICAgICAgIFsnbG9nJywgJy0tbm8td2FsayddICsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dvcHRzICsKKyAgICAgICAgICAgICAgICAgICAgbmV3X2NvbW1pdHNfbGlzdCArCisgICAgICAgICAgICAgICAgICAgIFsnLS0nXSwKKyAgICAgICAgICAgICAgICAgICAga2VlcGVuZHM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfbmV3X3JldmlzaW9uX3N1bW1hcnkoc2VsZiwgdG90LCBuZXdfY29tbWl0c19saXN0LCBwdXNoKToKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoTkVXX1JFVklTSU9OU19URU1QTEFURSwgdG90PXRvdCk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZ2VuZXJhdGVfcmV2aXNpb25fY2hhbmdlX2dyYXBoKHB1c2gpOgorICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmdlbmVyYXRlX3JldmlzaW9uX2NoYW5nZV9sb2cobmV3X2NvbW1pdHNfbGlzdCk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfcmV2aXNpb25fY2hhbmdlX3N1bW1hcnkoc2VsZiwgcHVzaCk6CisgICAgICAgICIiIkdlbmVyYXRlIGEgc3VtbWFyeSBvZiB0aGUgcmV2aXNpb25zIGFkZGVkL3JlbW92ZWQgYnkgdGhpcyBjaGFuZ2UuIiIiCisKKyAgICAgICAgaWYgc2VsZi5uZXcuY29tbWl0X3NoYTEgYW5kIG5vdCBzZWxmLm9sZC5jb21taXRfc2hhMToKKyAgICAgICAgICAgICMgQSBuZXcgcmVmZXJlbmNlIHdhcyBjcmVhdGVkLiAgTGlzdCB0aGUgbmV3IHJldmlzaW9ucworICAgICAgICAgICAgIyBicm91Z2h0IGJ5IHRoZSBuZXcgcmVmZXJlbmNlIChpLmUuLCB0aG9zZSByZXZpc2lvbnMgdGhhdAorICAgICAgICAgICAgIyB3ZXJlIG5vdCBpbiB0aGUgcmVwb3NpdG9yeSBiZWZvcmUgdGhpcyByZWZlcmVuY2UKKyAgICAgICAgICAgICMgY2hhbmdlKS4KKyAgICAgICAgICAgIHNoYTFzID0gbGlzdChwdXNoLmdldF9uZXdfY29tbWl0cyhzZWxmKSkKKyAgICAgICAgICAgIHNoYTFzLnJldmVyc2UoKQorICAgICAgICAgICAgdG90ID0gbGVuKHNoYTFzKQorICAgICAgICAgICAgbmV3X3JldmlzaW9ucyA9IFsKKyAgICAgICAgICAgICAgICBSZXZpc2lvbihzZWxmLCBHaXRPYmplY3Qoc2hhMSksIG51bT1pICsgMSwgdG90PXRvdCkKKyAgICAgICAgICAgICAgICBmb3IgKGksIHNoYTEpIGluIGVudW1lcmF0ZShzaGExcykKKyAgICAgICAgICAgICAgICBdCisKKyAgICAgICAgICAgIGlmIG5ld19yZXZpc2lvbnM6CisgICAgICAgICAgICAgICAgeWllbGQgc2VsZi5leHBhbmQoJ1RoaXMgJShyZWZuYW1lX3R5cGUpcyBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIG5ldyBjb21taXRzOlxuJykKKyAgICAgICAgICAgICAgICB5aWVsZCAnXG4nCisgICAgICAgICAgICAgICAgZm9yIHIgaW4gbmV3X3JldmlzaW9uczoKKyAgICAgICAgICAgICAgICAgICAgKHNoYTEsIHN1YmplY3QpID0gci5yZXYuZ2V0X3N1bW1hcnkoKQorICAgICAgICAgICAgICAgICAgICB5aWVsZCByLmV4cGFuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEJSSUVGX1NVTU1BUllfVEVNUExBVEUsIGFjdGlvbj0nbmV3JywgdGV4dD1zdWJqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHlpZWxkICdcbicKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmdlbmVyYXRlX25ld19yZXZpc2lvbl9zdW1tYXJ5KAorICAgICAgICAgICAgICAgICAgICAgICAgdG90LCBbci5yZXYuc2hhMSBmb3IgciBpbiBuZXdfcmV2aXNpb25zXSwgcHVzaCk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoTk9fTkVXX1JFVklTSU9OU19URU1QTEFURSk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICBlbGlmIHNlbGYubmV3LmNvbW1pdF9zaGExIGFuZCBzZWxmLm9sZC5jb21taXRfc2hhMToKKyAgICAgICAgICAgICMgQSByZWZlcmVuY2Ugd2FzIGNoYW5nZWQgdG8gcG9pbnQgYXQgYSBkaWZmZXJlbnQgY29tbWl0LgorICAgICAgICAgICAgIyBMaXN0IHRoZSByZXZpc2lvbnMgdGhhdCB3ZXJlIHJlbW92ZWQgYW5kL29yIGFkZGVkICpmcm9tCisgICAgICAgICAgICAjIHRoYXQgcmVmZXJlbmNlKiBieSB0aGlzIHJlZmVyZW5jZSBjaGFuZ2UsIGFsb25nIHdpdGggYQorICAgICAgICAgICAgIyBkaWZmIGJldHdlZW4gdGhlIHRyZWVzIGZvciBpdHMgb2xkIGFuZCBuZXcgdmFsdWVzLgorCisgICAgICAgICAgICAjIExpc3Qgb2YgdGhlIHJldmlzaW9ucyB0aGF0IHdlcmUgYWRkZWQgdG8gdGhlIGJyYW5jaCBieQorICAgICAgICAgICAgIyB0aGlzIHVwZGF0ZS4gIE5vdGUgdGhpcyBsaXN0IGNhbiBpbmNsdWRlIHJldmlzaW9ucyB0aGF0CisgICAgICAgICAgICAjIGhhdmUgYWxyZWFkeSBoYWQgbm90aWZpY2F0aW9uIGVtYWlsczsgd2Ugd2FudCBzdWNoCisgICAgICAgICAgICAjIHJldmlzaW9ucyBpbiB0aGUgc3VtbWFyeSBldmVuIHRob3VnaCB3ZSB3aWxsIG5vdCBzZW5kCisgICAgICAgICAgICAjIG5ldyBub3RpZmljYXRpb24gZW1haWxzIGZvciB0aGVtLgorICAgICAgICAgICAgYWRkcyA9IGxpc3QoZ2VuZXJhdGVfc3VtbWFyaWVzKAorICAgICAgICAgICAgICAgICctLXRvcG8tb3JkZXInLCAnLS1yZXZlcnNlJywgJyVzLi4lcycKKyAgICAgICAgICAgICAgICAlIChzZWxmLm9sZC5jb21taXRfc2hhMSwgc2VsZi5uZXcuY29tbWl0X3NoYTEsKQorICAgICAgICAgICAgICAgICkpCisKKyAgICAgICAgICAgICMgTGlzdCBvZiB0aGUgcmV2aXNpb25zIHRoYXQgd2VyZSByZW1vdmVkIGZyb20gdGhlIGJyYW5jaAorICAgICAgICAgICAgIyBieSB0aGlzIHVwZGF0ZS4gIFRoaXMgd2lsbCBiZSBlbXB0eSBleGNlcHQgZm9yCisgICAgICAgICAgICAjIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcy4KKyAgICAgICAgICAgIGRpc2NhcmRzID0gbGlzdChnZW5lcmF0ZV9zdW1tYXJpZXMoCisgICAgICAgICAgICAgICAgJyVzLi4lcycgJSAoc2VsZi5uZXcuY29tbWl0X3NoYTEsIHNlbGYub2xkLmNvbW1pdF9zaGExLCkKKyAgICAgICAgICAgICAgICApKQorCisgICAgICAgICAgICBpZiBhZGRzOgorICAgICAgICAgICAgICAgIG5ld19jb21taXRzX2xpc3QgPSBwdXNoLmdldF9uZXdfY29tbWl0cyhzZWxmKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdfY29tbWl0c19saXN0ID0gW10KKyAgICAgICAgICAgIG5ld19jb21taXRzID0gQ29tbWl0U2V0KG5ld19jb21taXRzX2xpc3QpCisKKyAgICAgICAgICAgIGlmIGRpc2NhcmRzOgorICAgICAgICAgICAgICAgIGRpc2NhcmRlZF9jb21taXRzID0gQ29tbWl0U2V0KHB1c2guZ2V0X2Rpc2NhcmRlZF9jb21taXRzKHNlbGYpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkaXNjYXJkZWRfY29tbWl0cyA9IENvbW1pdFNldChbXSkKKworICAgICAgICAgICAgaWYgZGlzY2FyZHMgYW5kIGFkZHM6CisgICAgICAgICAgICAgICAgZm9yIChzaGExLCBzdWJqZWN0KSBpbiBkaXNjYXJkczoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2hhMSBpbiBkaXNjYXJkZWRfY29tbWl0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICdkaXNjYXJkJworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gJ29taXQnCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYuZXhwYW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgQlJJRUZfU1VNTUFSWV9URU1QTEFURSwgYWN0aW9uPWFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldl9zaG9ydD1zaGExLCB0ZXh0PXN1YmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgZm9yIChzaGExLCBzdWJqZWN0KSBpbiBhZGRzOgorICAgICAgICAgICAgICAgICAgICBpZiBzaGExIGluIG5ld19jb21taXRzOgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gJ25ldycKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICdhZGQnCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYuZXhwYW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgQlJJRUZfU1VNTUFSWV9URU1QTEFURSwgYWN0aW9uPWFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldl9zaG9ydD1zaGExLCB0ZXh0PXN1YmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgeWllbGQgJ1xuJworICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKE5PTl9GRl9URU1QTEFURSk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICAgICAgZWxpZiBkaXNjYXJkczoKKyAgICAgICAgICAgICAgICBmb3IgKHNoYTEsIHN1YmplY3QpIGluIGRpc2NhcmRzOgorICAgICAgICAgICAgICAgICAgICBpZiBzaGExIGluIGRpc2NhcmRlZF9jb21taXRzOgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gJ2Rpc2NhcmQnCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAnb21pdCcKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc2VsZi5leHBhbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBCUklFRl9TVU1NQVJZX1RFTVBMQVRFLCBhY3Rpb249YWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2X3Nob3J0PXNoYTEsIHRleHQ9c3ViamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICB5aWVsZCAnXG4nCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoUkVXSU5EX09OTFlfVEVNUExBVEUpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgICAgIGVsaWYgYWRkczoKKyAgICAgICAgICAgICAgICAoc2hhMSwgc3ViamVjdCkgPSBzZWxmLm9sZC5nZXRfc3VtbWFyeSgpCisgICAgICAgICAgICAgICAgeWllbGQgc2VsZi5leHBhbmQoCisgICAgICAgICAgICAgICAgICAgIEJSSUVGX1NVTU1BUllfVEVNUExBVEUsIGFjdGlvbj0nZnJvbScsCisgICAgICAgICAgICAgICAgICAgIHJldl9zaG9ydD1zaGExLCB0ZXh0PXN1YmplY3QsCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBmb3IgKHNoYTEsIHN1YmplY3QpIGluIGFkZHM6CisgICAgICAgICAgICAgICAgICAgIGlmIHNoYTEgaW4gbmV3X2NvbW1pdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAnbmV3JworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gJ2FkZCcKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc2VsZi5leHBhbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBCUklFRl9TVU1NQVJZX1RFTVBMQVRFLCBhY3Rpb249YWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2X3Nob3J0PXNoYTEsIHRleHQ9c3ViamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICAgICAgeWllbGQgJ1xuJworCisgICAgICAgICAgICBpZiBuZXdfY29tbWl0czoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmdlbmVyYXRlX25ld19yZXZpc2lvbl9zdW1tYXJ5KAorICAgICAgICAgICAgICAgICAgICAgICAgbGVuKG5ld19jb21taXRzKSwgbmV3X2NvbW1pdHNfbGlzdCwgcHVzaCk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoTk9fTkVXX1JFVklTSU9OU19URU1QTEFURSk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmdlbmVyYXRlX3JldmlzaW9uX2NoYW5nZV9ncmFwaChwdXNoKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgICAgICAgICAjIFRoZSBkaWZmc3RhdCBpcyBzaG93biBmcm9tIHRoZSBvbGQgcmV2aXNpb24gdG8gdGhlIG5ldworICAgICAgICAgICAgIyByZXZpc2lvbi4gIFRoaXMgaXMgdG8gc2hvdyB0aGUgdHJ1dGggb2Ygd2hhdCBoYXBwZW5lZCBpbgorICAgICAgICAgICAgIyB0aGlzIGNoYW5nZS4gIFRoZXJlJ3Mgbm8gcG9pbnQgc2hvd2luZyB0aGUgc3RhdCBmcm9tIHRoZQorICAgICAgICAgICAgIyBiYXNlIHRvIHRoZSBuZXcgcmV2aXNpb24gYmVjYXVzZSB0aGUgYmFzZSBpcyBlZmZlY3RpdmVseSBhCisgICAgICAgICAgICAjIHJhbmRvbSByZXZpc2lvbiBhdCB0aGlzIHBvaW50IC0gdGhlIHVzZXIgd2lsbCBiZSBpbnRlcmVzdGVkCisgICAgICAgICAgICAjIGluIHdoYXQgdGhpcyByZXZpc2lvbiBjaGFuZ2VkIC0gaW5jbHVkaW5nIHRoZSB1bmRvaW5nIG9mCisgICAgICAgICAgICAjIHByZXZpb3VzIHJldmlzaW9ucyBpbiB0aGUgY2FzZSBvZiBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMuCisgICAgICAgICAgICB5aWVsZCAnXG4nCisgICAgICAgICAgICB5aWVsZCAnU3VtbWFyeSBvZiBjaGFuZ2VzOlxuJworICAgICAgICAgICAgZm9yIGxpbmUgaW4gcmVhZF9naXRfbGluZXMoCisgICAgICAgICAgICAgICAgICAgIFsnZGlmZi10cmVlJ10gKworICAgICAgICAgICAgICAgICAgICBzZWxmLmRpZmZvcHRzICsKKyAgICAgICAgICAgICAgICAgICAgWyclcy4uJXMnICUgKHNlbGYub2xkLmNvbW1pdF9zaGExLCBzZWxmLm5ldy5jb21taXRfc2hhMSwpXSwKKyAgICAgICAgICAgICAgICAgICAga2VlcGVuZHM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgZWxpZiBzZWxmLm9sZC5jb21taXRfc2hhMSBhbmQgbm90IHNlbGYubmV3LmNvbW1pdF9zaGExOgorICAgICAgICAgICAgIyBBIHJlZmVyZW5jZSB3YXMgZGVsZXRlZC4gIExpc3QgdGhlIHJldmlzaW9ucyB0aGF0IHdlcmUKKyAgICAgICAgICAgICMgcmVtb3ZlZCBmcm9tIHRoZSByZXBvc2l0b3J5IGJ5IHRoaXMgcmVmZXJlbmNlIGNoYW5nZS4KKworICAgICAgICAgICAgc2hhMXMgPSBsaXN0KHB1c2guZ2V0X2Rpc2NhcmRlZF9jb21taXRzKHNlbGYpKQorICAgICAgICAgICAgdG90ID0gbGVuKHNoYTFzKQorICAgICAgICAgICAgZGlzY2FyZGVkX3JldmlzaW9ucyA9IFsKKyAgICAgICAgICAgICAgICBSZXZpc2lvbihzZWxmLCBHaXRPYmplY3Qoc2hhMSksIG51bT1pICsgMSwgdG90PXRvdCkKKyAgICAgICAgICAgICAgICBmb3IgKGksIHNoYTEpIGluIGVudW1lcmF0ZShzaGExcykKKyAgICAgICAgICAgICAgICBdCisKKyAgICAgICAgICAgIGlmIGRpc2NhcmRlZF9yZXZpc2lvbnM6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoRElTQ0FSREVEX1JFVklTSU9OU19URU1QTEFURSk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgICAgICB5aWVsZCAnXG4nCisgICAgICAgICAgICAgICAgZm9yIHIgaW4gZGlzY2FyZGVkX3JldmlzaW9uczoKKyAgICAgICAgICAgICAgICAgICAgKHNoYTEsIHN1YmplY3QpID0gci5yZXYuZ2V0X3N1bW1hcnkoKQorICAgICAgICAgICAgICAgICAgICB5aWVsZCByLmV4cGFuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEJSSUVGX1NVTU1BUllfVEVNUExBVEUsIGFjdGlvbj0nZGlzY2FyZCcsIHRleHQ9c3ViamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmdlbmVyYXRlX3JldmlzaW9uX2NoYW5nZV9ncmFwaChwdXNoKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9saW5lcyhOT19ESVNDQVJERURfUkVWSVNJT05TX1RFTVBMQVRFKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgICAgIGVsaWYgbm90IHNlbGYub2xkLmNvbW1pdF9zaGExIGFuZCBub3Qgc2VsZi5uZXcuY29tbWl0X3NoYTE6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9saW5lcyhOT05fQ09NTUlUX1VQREFURV9URU1QTEFURSk6CisgICAgICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX2NyZWF0ZV9zdW1tYXJ5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJDYWxsZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlZmVyZW5jZS4iIiIKKworICAgICAgICAjIFRoaXMgaXMgYSBuZXcgcmVmZXJlbmNlIGFuZCBzbyBvbGRyZXYgaXMgbm90IHZhbGlkCisgICAgICAgIChzaGExLCBzdWJqZWN0KSA9IHNlbGYubmV3LmdldF9zdW1tYXJ5KCkKKyAgICAgICAgeWllbGQgc2VsZi5leHBhbmQoCisgICAgICAgICAgICBCUklFRl9TVU1NQVJZX1RFTVBMQVRFLCBhY3Rpb249J2F0JywKKyAgICAgICAgICAgIHJldl9zaG9ydD1zaGExLCB0ZXh0PXN1YmplY3QsCisgICAgICAgICAgICApCisgICAgICAgIHlpZWxkICdcbicKKworICAgIGRlZiBnZW5lcmF0ZV91cGRhdGVfc3VtbWFyeShzZWxmLCBwdXNoKToKKyAgICAgICAgIiIiQ2FsbGVkIGZvciB0aGUgY2hhbmdlIG9mIGEgcHJlLWV4aXN0aW5nIGJyYW5jaC4iIiIKKworICAgICAgICByZXR1cm4gaXRlcihbXSkKKworICAgIGRlZiBnZW5lcmF0ZV9kZWxldGVfc3VtbWFyeShzZWxmLCBwdXNoKToKKyAgICAgICAgIiIiQ2FsbGVkIGZvciB0aGUgZGVsZXRpb24gb2YgYW55IHR5cGUgb2YgcmVmZXJlbmNlLiIiIgorCisgICAgICAgIChzaGExLCBzdWJqZWN0KSA9IHNlbGYub2xkLmdldF9zdW1tYXJ5KCkKKyAgICAgICAgeWllbGQgc2VsZi5leHBhbmQoCisgICAgICAgICAgICBCUklFRl9TVU1NQVJZX1RFTVBMQVRFLCBhY3Rpb249J3dhcycsCisgICAgICAgICAgICByZXZfc2hvcnQ9c2hhMSwgdGV4dD1zdWJqZWN0LAorICAgICAgICAgICAgKQorICAgICAgICB5aWVsZCAnXG4nCisKKyAgICBkZWYgZ2V0X3NwZWNpZmljX2Zyb21hZGRyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lbnZpcm9ubWVudC5mcm9tX3JlZmNoYW5nZQorCisKK2NsYXNzIEJyYW5jaENoYW5nZShSZWZlcmVuY2VDaGFuZ2UpOgorICAgIHJlZm5hbWVfdHlwZSA9ICdicmFuY2gnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW52aXJvbm1lbnQsIHJlZm5hbWUsIHNob3J0X3JlZm5hbWUsIG9sZCwgbmV3LCByZXYpOgorICAgICAgICBSZWZlcmVuY2VDaGFuZ2UuX19pbml0X18oCisgICAgICAgICAgICBzZWxmLCBlbnZpcm9ubWVudCwKKyAgICAgICAgICAgIHJlZm5hbWU9cmVmbmFtZSwgc2hvcnRfcmVmbmFtZT1zaG9ydF9yZWZuYW1lLAorICAgICAgICAgICAgb2xkPW9sZCwgbmV3PW5ldywgcmV2PXJldiwKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5yZWNpcGllbnRzID0gZW52aXJvbm1lbnQuZ2V0X3JlZmNoYW5nZV9yZWNpcGllbnRzKHNlbGYpCisgICAgICAgIHNlbGYuX3NpbmdsZV9yZXZpc2lvbiA9IE5vbmUKKworICAgIGRlZiBzZW5kX3NpbmdsZV9jb21iaW5lZF9lbWFpbChzZWxmLCBrbm93bl9hZGRlZF9zaGExcyk6CisgICAgICAgIGlmIG5vdCBzZWxmLmVudmlyb25tZW50LmNvbWJpbmVfd2hlbl9zaW5nbGVfY29tbWl0OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAjIEluIHRoZSBzYWRseS1hbGwtdG9vLWZyZXF1ZW50IHVzZWNhc2Ugb2YgcGVvcGxlIHB1c2hpbmcgb25seQorICAgICAgICAjIG9uZSBvZiB0aGVpciBjb21taXRzIGF0IGEgdGltZSB0byBhIHJlcG9zaXRvcnksIHVzZXJzIGZlZWwKKyAgICAgICAgIyB0aGUgcmVmZXJlbmNlIGNoYW5nZSBzdW1tYXJ5IGVtYWlscyBhcmUgbm9pc2UgcmF0aGVyIHRoYW4KKyAgICAgICAgIyBpbXBvcnRhbnQgc2lnbmFsLiAgVGhpcyBpcyBiZWNhdXNlLCBpbiB0aGlzIHBhcnRpY3VsYXIKKyAgICAgICAgIyB1c2VjYXNlLCB0aGVyZSBpcyBhIHJlZmVyZW5jZSBjaGFuZ2Ugc3VtbWFyeSBlbWFpbCBmb3IgZWFjaAorICAgICAgICAjIG5ldyBjb21taXQsIGFuZCBhbGwgdGhlc2Ugc3VtbWFyaWVzIGRvIGlzIHBvaW50IG91dCB0aGF0CisgICAgICAgICMgdGhlcmUgaXMgb25lIG5ldyBjb21taXQgKHdoaWNoIGNhbiByZWFkaWx5IGJlIGluZmVycmVkIGJ5CisgICAgICAgICMgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgaW5kaXZpZHVhbCByZXZpc2lvbiBlbWFpbCB0aGF0IGlzIGFsc28KKyAgICAgICAgIyBzZW50KS4gIEluIHN1Y2ggY2FzZXMsIG91ciB1c2VycyBwcmVmZXIgdGhlcmUgdG8gYmUgYSBjb21iaW5lZAorICAgICAgICAjIHJlZmVyZW5jZSBjaGFuZ2Ugc3VtbWFyeS9uZXcgcmV2aXNpb24gZW1haWwuCisgICAgICAgICMKKyAgICAgICAgIyBTbywgaWYgdGhlIGNoYW5nZSBpcyBhbiB1cGRhdGUgYW5kIGl0IGRvZXNuJ3QgZGlzY2FyZCBhbnkKKyAgICAgICAgIyBjb21taXRzLCBhbmQgaXQgYWRkcyBleGFjdGx5IG9uZSBub24tbWVyZ2UgY29tbWl0IChnZXJyaXQKKyAgICAgICAgIyBmb3JjZXMgYSB3b3JrZmxvdyB3aGVyZSBldmVyeSBjb21taXQgaXMgaW5kaXZpZHVhbGx5IG1lcmdlZAorICAgICAgICAjIGFuZCB0aGUgZ2l0LW11bHRpbWFpbCBob29rIGZpcmVkIG9mZiBmb3IganVzdCB0aGlzIG9uZQorICAgICAgICAjIGNoYW5nZSksIHRoZW4gd2Ugc2VuZCBhIGNvbWJpbmVkIHJlZmNoYW5nZS9yZXZpc2lvbiBlbWFpbC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBJZiB0aGlzIGNoYW5nZSBpcyBhIHJlZmVyZW5jZSB1cGRhdGUgdGhhdCBkb2Vzbid0IGRpc2NhcmQKKyAgICAgICAgICAgICMgYW55IGNvbW1pdHMuLi4KKyAgICAgICAgICAgIGlmIHNlbGYuY2hhbmdlX3R5cGUgIT0gJ3VwZGF0ZSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgaWYgcmVhZF9naXRfbGluZXMoCisgICAgICAgICAgICAgICAgICAgIFsnbWVyZ2UtYmFzZScsIHNlbGYub2xkLnNoYTEsIHNlbGYubmV3LnNoYTFdCisgICAgICAgICAgICAgICAgICAgICkgIT0gW3NlbGYub2xkLnNoYTFdOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhpcyB1cGRhdGUgaW50cm9kdWNlZCBleGFjdGx5IG9uZSBub24tbWVyZ2UKKyAgICAgICAgICAgICMgY29tbWl0OgorCisgICAgICAgICAgICBkZWYgc3BsaXRfbGluZShsaW5lKToKKyAgICAgICAgICAgICAgICAiIiJTcGxpdCBsaW5lIGludG8gKHNoYTEsIFtwYXJlbnQsLi4uXSkuIiIiCisKKyAgICAgICAgICAgICAgICB3b3JkcyA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgIHJldHVybiAod29yZHNbMF0sIHdvcmRzWzE6XSkKKworICAgICAgICAgICAgIyBHZXQgdGhlIG5ldyBjb21taXRzIGludHJvZHVjZWQgYnkgdGhlIHB1c2ggYXMgYSBsaXN0IG9mCisgICAgICAgICAgICAjIChzaGExLCBbcGFyZW50LC4uLl0pCisgICAgICAgICAgICBuZXdfY29tbWl0cyA9IFsKKyAgICAgICAgICAgICAgICBzcGxpdF9saW5lKGxpbmUpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gcmVhZF9naXRfbGluZXMoCisgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICdsb2cnLCAnLTMnLCAnLS1mb3JtYXQ9JUggJVAnLAorICAgICAgICAgICAgICAgICAgICAgICAgJyVzLi4lcycgJSAoc2VsZi5vbGQuc2hhMSwgc2VsZi5uZXcuc2hhMSksCisgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBdCisKKyAgICAgICAgICAgIGlmIG5vdCBuZXdfY29tbWl0czoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICAjIElmIHRoZSBuZXdlc3QgY29tbWl0IGlzIGEgbWVyZ2UsIHNhdmUgaXQgZm9yIGEgbGF0ZXIgY2hlY2sKKyAgICAgICAgICAgICMgYnV0IG90aGVyd2lzZSBpZ25vcmUgaXQKKyAgICAgICAgICAgIG1lcmdlID0gTm9uZQorICAgICAgICAgICAgdG90ID0gbGVuKG5ld19jb21taXRzKQorICAgICAgICAgICAgaWYgbGVuKG5ld19jb21taXRzWzBdWzFdKSA+IDE6CisgICAgICAgICAgICAgICAgbWVyZ2UgPSBuZXdfY29tbWl0c1swXVswXQorICAgICAgICAgICAgICAgIGRlbCBuZXdfY29tbWl0c1swXQorCisgICAgICAgICAgICAjIE91ciBwcmltYXJ5IGNoZWNrOiB3ZSBjYW4ndCBjb21iaW5lIGlmIG1vcmUgdGhhbiBvbmUgY29tbWl0CisgICAgICAgICAgICAjIGlzIGludHJvZHVjZWQuICBXZSBhbHNvIGN1cnJlbnRseSBvbmx5IGNvbWJpbmUgaWYgdGhlIG5ldworICAgICAgICAgICAgIyBjb21taXQgaXMgYSBub24tbWVyZ2UgY29tbWl0LCB0aG91Z2ggaXQgbWF5IG1ha2Ugc2Vuc2UgdG8KKyAgICAgICAgICAgICMgY29tYmluZSBpZiBpdCBpcyBhIG1lcmdlIGFzIHdlbGwuCisgICAgICAgICAgICBpZiBub3QgKAorICAgICAgICAgICAgICAgICAgICBsZW4obmV3X2NvbW1pdHMpID09IDEgYW5kCisgICAgICAgICAgICAgICAgICAgIGxlbihuZXdfY29tbWl0c1swXVsxXSkgPT0gMSBhbmQKKyAgICAgICAgICAgICAgICAgICAgbmV3X2NvbW1pdHNbMF1bMF0gaW4ga25vd25fYWRkZWRfc2hhMXMKKyAgICAgICAgICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICAjIFdlIGRvIG5vdCB3YW50IHRvIGNvbWJpbmUgcmV2aXNpb24gYW5kIHJlZmNoYW5nZSBlbWFpbHMgaWYKKyAgICAgICAgICAgICMgdGhvc2UgZ28gdG8gc2VwYXJhdGUgbG9jYXRpb25zLgorICAgICAgICAgICAgcmV2ID0gUmV2aXNpb24oc2VsZiwgR2l0T2JqZWN0KG5ld19jb21taXRzWzBdWzBdKSwgMSwgdG90KQorICAgICAgICAgICAgaWYgcmV2LnJlY2lwaWVudHMgIT0gc2VsZi5yZWNpcGllbnRzOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgICMgV2UgaWdub3JlZCB0aGUgbmV3ZXN0IGNvbW1pdCBpZiBpdCB3YXMganVzdCBhIG1lcmdlIG9mIHRoZSBvbmUKKyAgICAgICAgICAgICMgY29tbWl0IGJlaW5nIGludHJvZHVjZWQuICBCdXQgd2UgZG9uJ3Qgd2FudCB0byBpZ25vcmUgdGhhdAorICAgICAgICAgICAgIyBtZXJnZSBjb21taXQgaXQgaXQgaW52b2x2ZWQgY29uZmxpY3QgcmVzb2x1dGlvbnMuICBDaGVjayB0aGF0LgorICAgICAgICAgICAgaWYgbWVyZ2UgYW5kIG1lcmdlICE9IHJlYWRfZ2l0X291dHB1dChbJ2RpZmYtdHJlZScsICctLWNjJywgbWVyZ2VdKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICAjIFdlIGNhbiBjb21iaW5lIHRoZSByZWZjaGFuZ2UgYW5kIG9uZSBuZXcgcmV2aXNpb24gZW1haWxzCisgICAgICAgICAgICAjIGludG8gb25lLiAgUmV0dXJuIHRoZSBSZXZpc2lvbiB0aGF0IGEgY29tYmluZWQgZW1haWwgc2hvdWxkCisgICAgICAgICAgICAjIGJlIHNlbnQgYWJvdXQuCisgICAgICAgICAgICByZXR1cm4gcmV2CisgICAgICAgIGV4Y2VwdCBDb21tYW5kRXJyb3I6CisgICAgICAgICAgICAjIENhbm5vdCBkZXRlcm1pbmUgbnVtYmVyIG9mIGNvbW1pdHMgaW4gb2xkLi5uZXcgb3IgbmV3Li5vbGQ7CisgICAgICAgICAgICAjIGRvbid0IGNvbWJpbmUgcmVmZXJlbmNlL3JldmlzaW9uIGVtYWlsczoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2VuZXJhdGVfY29tYmluZWRfZW1haWwoc2VsZiwgcHVzaCwgcmV2aXNpb24sIGJvZHlfZmlsdGVyPU5vbmUsIGV4dHJhX2hlYWRlcl92YWx1ZXM9e30pOgorICAgICAgICB2YWx1ZXMgPSByZXZpc2lvbi5nZXRfdmFsdWVzKCkKKyAgICAgICAgaWYgZXh0cmFfaGVhZGVyX3ZhbHVlczoKKyAgICAgICAgICAgIHZhbHVlcy51cGRhdGUoZXh0cmFfaGVhZGVyX3ZhbHVlcykKKyAgICAgICAgaWYgJ3N1YmplY3QnIG5vdCBpbiBleHRyYV9oZWFkZXJfdmFsdWVzOgorICAgICAgICAgICAgdmFsdWVzWydzdWJqZWN0J10gPSBzZWxmLmV4cGFuZChDT01CSU5FRF9SRUZDSEFOR0VfUkVWSVNJT05fU1VCSkVDVF9URU1QTEFURSwgKip2YWx1ZXMpCisKKyAgICAgICAgc2VsZi5fc2luZ2xlX3JldmlzaW9uID0gcmV2aXNpb24KKyAgICAgICAgc2VsZi5fY29udGFpbnNfZGlmZigpCisgICAgICAgIHNlbGYuaGVhZGVyX3RlbXBsYXRlID0gQ09NQklORURfSEVBREVSX1RFTVBMQVRFCisgICAgICAgIHNlbGYuaW50cm9fdGVtcGxhdGUgPSBDT01CSU5FRF9JTlRST19URU1QTEFURQorICAgICAgICBzZWxmLmZvb3Rlcl90ZW1wbGF0ZSA9IENPTUJJTkVEX0ZPT1RFUl9URU1QTEFURQorCisgICAgICAgIGRlZiByZXZpc2lvbl9nZW5fbGluayhiYXNlX3VybCk6CisgICAgICAgICAgICAjIHJldmlzaW9uIGlzIHVzZWQgb25seSB0byBnZW5lcmF0ZSB0aGUgYm9keSwgYW5kCisgICAgICAgICAgICAjIF9jb250ZW50X3R5cGUgaXMgc2V0IHdoaWxlIGdlbmVyYXRpbmcgaGVhZGVycy4gR2V0IGl0CisgICAgICAgICAgICAjIGZyb20gdGhlIEJyYW5jaENoYW5nZSBvYmplY3QuCisgICAgICAgICAgICByZXZpc2lvbi5fY29udGVudF90eXBlID0gc2VsZi5fY29udGVudF90eXBlCisgICAgICAgICAgICByZXR1cm4gcmV2aXNpb24uZ2VuZXJhdGVfYnJvd3NlX2xpbmsoYmFzZV91cmwpCisgICAgICAgIHNlbGYuZ2VuZXJhdGVfYnJvd3NlX2xpbmsgPSByZXZpc2lvbl9nZW5fbGluaworICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmdlbmVyYXRlX2VtYWlsKHB1c2gsIGJvZHlfZmlsdGVyLCB2YWx1ZXMpOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsX2JvZHkoc2VsZiwgcHVzaCk6CisgICAgICAgICcnJ0NhbGwgdGhlIGFwcHJvcHJpYXRlIGJvZHkgZ2VuZXJhdGlvbiByb3V0aW5lLgorCisgICAgICAgIElmIHRoaXMgaXMgYSBjb21iaW5lZCByZWZjaGFuZ2UvcmV2aXNpb24gZW1haWwsIHRoZSBzcGVjaWFsIGxvZ2ljCisgICAgICAgIGZvciBoYW5kbGluZyB0aGlzIGNvbWJpbmVkIGVtYWlsIGNvbWVzIGZyb20gdGhpcyBmdW5jdGlvbi4gIEZvcgorICAgICAgICBvdGhlciBjYXNlcywgd2UganVzdCB1c2UgdGhlIG5vcm1hbCBoYW5kbGluZy4nJycKKworICAgICAgICAjIElmIHNlbGYuX3NpbmdsZV9yZXZpc2lvbiBpc24ndCBzZXQ7IGRvbid0IG92ZXJyaWRlCisgICAgICAgIGlmIG5vdCBzZWxmLl9zaW5nbGVfcmV2aXNpb246CisgICAgICAgICAgICBmb3IgbGluZSBpbiBzdXBlcihCcmFuY2hDaGFuZ2UsIHNlbGYpLmdlbmVyYXRlX2VtYWlsX2JvZHkocHVzaCk6CisgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBUaGlzIGlzIGEgY29tYmluZWQgcmVmY2hhbmdlL3JldmlzaW9uIGVtYWlsOyB3ZSBmaXJzdCBwcm92aWRlCisgICAgICAgICMgc29tZSBpbmZvIGZyb20gdGhlIHJlZmNoYW5nZSBwb3J0aW9uLCBhbmQgdGhlbiBjYWxsIHRoZSByZXZpc2lvbgorICAgICAgICAjIGdlbmVyYXRlX2VtYWlsX2JvZHkgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSByZXZpc2lvbiBwb3J0aW9uLgorICAgICAgICBhZGRzID0gbGlzdChnZW5lcmF0ZV9zdW1tYXJpZXMoCisgICAgICAgICAgICAnLS10b3BvLW9yZGVyJywgJy0tcmV2ZXJzZScsICclcy4uJXMnCisgICAgICAgICAgICAlIChzZWxmLm9sZC5jb21taXRfc2hhMSwgc2VsZi5uZXcuY29tbWl0X3NoYTEsKQorICAgICAgICAgICAgKSkKKworICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgiVGhlIGZvbGxvd2luZyBjb21taXQocykgd2VyZSBhZGRlZCB0byAlKHJlZm5hbWUpcyBieSB0aGlzIHB1c2g6XG4iKQorICAgICAgICBmb3IgKHNoYTEsIHN1YmplY3QpIGluIGFkZHM6CisgICAgICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgKKyAgICAgICAgICAgICAgICBCUklFRl9TVU1NQVJZX1RFTVBMQVRFLCBhY3Rpb249J25ldycsCisgICAgICAgICAgICAgICAgcmV2X3Nob3J0PXNoYTEsIHRleHQ9c3ViamVjdCwKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgeWllbGQgc2VsZi5fc2luZ2xlX3JldmlzaW9uLnJldi5zaG9ydCArICIgaXMgZGVzY3JpYmVkIGJlbG93XG4iCisgICAgICAgIHlpZWxkICdcbicKKworICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9zaW5nbGVfcmV2aXNpb24uZ2VuZXJhdGVfZW1haWxfYm9keShwdXNoKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworCitjbGFzcyBBbm5vdGF0ZWRUYWdDaGFuZ2UoUmVmZXJlbmNlQ2hhbmdlKToKKyAgICByZWZuYW1lX3R5cGUgPSAnYW5ub3RhdGVkIHRhZycKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnZpcm9ubWVudCwgcmVmbmFtZSwgc2hvcnRfcmVmbmFtZSwgb2xkLCBuZXcsIHJldik6CisgICAgICAgIFJlZmVyZW5jZUNoYW5nZS5fX2luaXRfXygKKyAgICAgICAgICAgIHNlbGYsIGVudmlyb25tZW50LAorICAgICAgICAgICAgcmVmbmFtZT1yZWZuYW1lLCBzaG9ydF9yZWZuYW1lPXNob3J0X3JlZm5hbWUsCisgICAgICAgICAgICBvbGQ9b2xkLCBuZXc9bmV3LCByZXY9cmV2LAorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLnJlY2lwaWVudHMgPSBlbnZpcm9ubWVudC5nZXRfYW5ub3VuY2VfcmVjaXBpZW50cyhzZWxmKQorICAgICAgICBzZWxmLnNob3dfc2hvcnRsb2cgPSBlbnZpcm9ubWVudC5hbm5vdW5jZV9zaG93X3Nob3J0bG9nCisKKyAgICBBTk5PVEFURURfVEFHX0ZPUk1BVCA9ICgKKyAgICAgICAgJyUoKm9iamVjdG5hbWUpXG4nCisgICAgICAgICclKCpvYmplY3R0eXBlKVxuJworICAgICAgICAnJSh0YWdnZXJuYW1lKVxuJworICAgICAgICAnJSh0YWdnZXJkYXRlKScKKyAgICAgICAgKQorCisgICAgZGVmIGRlc2NyaWJlX3RhZyhzZWxmLCBwdXNoKToKKyAgICAgICAgIiIiRGVzY3JpYmUgdGhlIG5ldyB2YWx1ZSBvZiBhbiBhbm5vdGF0ZWQgdGFnLiIiIgorCisgICAgICAgICMgVXNlIGdpdCBmb3ItZWFjaC1yZWYgdG8gcHVsbCBvdXQgdGhlIGluZGl2aWR1YWwgZmllbGRzIGZyb20KKyAgICAgICAgIyB0aGUgdGFnCisgICAgICAgIFt0YWdvYmplY3QsIHRhZ3R5cGUsIHRhZ2dlciwgdGFnZ2VkXSA9IHJlYWRfZ2l0X2xpbmVzKAorICAgICAgICAgICAgWydmb3ItZWFjaC1yZWYnLCAnLS1mb3JtYXQ9JXMnICUgKHNlbGYuQU5OT1RBVEVEX1RBR19GT1JNQVQsKSwgc2VsZi5yZWZuYW1lXSwKKyAgICAgICAgICAgICkKKworICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgKKyAgICAgICAgICAgIEJSSUVGX1NVTU1BUllfVEVNUExBVEUsIGFjdGlvbj0ndGFnZ2luZycsCisgICAgICAgICAgICByZXZfc2hvcnQ9dGFnb2JqZWN0LCB0ZXh0PScoJXMpJyAlICh0YWd0eXBlLCksCisgICAgICAgICAgICApCisgICAgICAgIGlmIHRhZ3R5cGUgPT0gJ2NvbW1pdCc6CisgICAgICAgICAgICAjIElmIHRoZSB0YWdnZWQgb2JqZWN0IGlzIGEgY29tbWl0LCB0aGVuIHdlIGFzc3VtZSB0aGlzIGlzIGEKKyAgICAgICAgICAgICMgcmVsZWFzZSwgYW5kIHNvIHdlIGNhbGN1bGF0ZSB3aGljaCB0YWcgdGhpcyB0YWcgaXMKKyAgICAgICAgICAgICMgcmVwbGFjaW5nCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHJldnRhZyA9IHJlYWRfZ2l0X291dHB1dChbJ2Rlc2NyaWJlJywgJy0tYWJicmV2PTAnLCAnJXNeJyAlIChzZWxmLm5ldywpXSkKKyAgICAgICAgICAgIGV4Y2VwdCBDb21tYW5kRXJyb3I6CisgICAgICAgICAgICAgICAgcHJldnRhZyA9IE5vbmUKKyAgICAgICAgICAgIGlmIHByZXZ0YWc6CisgICAgICAgICAgICAgICAgeWllbGQgJyByZXBsYWNlcyAlc1xuJyAlIChwcmV2dGFnLCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZXZ0YWcgPSBOb25lCisgICAgICAgICAgICB5aWVsZCAnICBsZW5ndGggJXMgYnl0ZXNcbicgJSAocmVhZF9naXRfb3V0cHV0KFsnY2F0LWZpbGUnLCAnLXMnLCB0YWdvYmplY3RdKSwpCisKKyAgICAgICAgeWllbGQgJyAgICAgIGJ5ICVzXG4nICUgKHRhZ2dlciwpCisgICAgICAgIHlpZWxkICcgICAgICBvbiAlc1xuJyAlICh0YWdnZWQsKQorICAgICAgICB5aWVsZCAnXG4nCisKKyAgICAgICAgIyBTaG93IHRoZSBjb250ZW50IG9mIHRoZSB0YWcgbWVzc2FnZTsgdGhpcyBtaWdodCBjb250YWluIGEKKyAgICAgICAgIyBjaGFuZ2UgbG9nIG9yIHJlbGVhc2Ugbm90ZXMgc28gaXMgd29ydGggZGlzcGxheWluZy4KKyAgICAgICAgeWllbGQgTE9HQkVHSU4KKyAgICAgICAgY29udGVudHMgPSBsaXN0KHJlYWRfZ2l0X2xpbmVzKFsnY2F0LWZpbGUnLCAndGFnJywgc2VsZi5uZXcuc2hhMV0sIGtlZXBlbmRzPVRydWUpKQorICAgICAgICBjb250ZW50cyA9IGNvbnRlbnRzW2NvbnRlbnRzLmluZGV4KCdcbicpICsgMTpdCisgICAgICAgIGlmIGNvbnRlbnRzIGFuZCBjb250ZW50c1stMV1bLTE6XSAhPSAnXG4nOgorICAgICAgICAgICAgY29udGVudHMuYXBwZW5kKCdcbicpCisgICAgICAgIGZvciBsaW5lIGluIGNvbnRlbnRzOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgICAgIGlmIHNlbGYuc2hvd19zaG9ydGxvZyBhbmQgdGFndHlwZSA9PSAnY29tbWl0JzoKKyAgICAgICAgICAgICMgT25seSBjb21taXQgdGFncyBtYWtlIHNlbnNlIHRvIGhhdmUgcmV2LWxpc3Qgb3BlcmF0aW9ucworICAgICAgICAgICAgIyBwZXJmb3JtZWQgb24gdGhlbQorICAgICAgICAgICAgeWllbGQgJ1xuJworICAgICAgICAgICAgaWYgcHJldnRhZzoKKyAgICAgICAgICAgICAgICAjIFNob3cgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMgcmVsZWFzZQorICAgICAgICAgICAgICAgIHJldmxpc3QgPSByZWFkX2dpdF9vdXRwdXQoCisgICAgICAgICAgICAgICAgICAgIFsncmV2LWxpc3QnLCAnLS1wcmV0dHk9c2hvcnQnLCAnJXMuLiVzJyAlIChwcmV2dGFnLCBzZWxmLm5ldywpXSwKKyAgICAgICAgICAgICAgICAgICAga2VlcGVuZHM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE5vIHByZXZpb3VzIHRhZywgc2hvdyBhbGwgdGhlIGNoYW5nZXMgc2luY2UgdGltZQorICAgICAgICAgICAgICAgICMgYmVnYW4KKyAgICAgICAgICAgICAgICByZXZsaXN0ID0gcmVhZF9naXRfb3V0cHV0KAorICAgICAgICAgICAgICAgICAgICBbJ3Jldi1saXN0JywgJy0tcHJldHR5PXNob3J0JywgJyVzJyAlIChzZWxmLm5ldywpXSwKKyAgICAgICAgICAgICAgICAgICAga2VlcGVuZHM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gcmVhZF9naXRfbGluZXMoWydzaG9ydGxvZyddLCBpbnB1dD1yZXZsaXN0LCBrZWVwZW5kcz1UcnVlKToKKyAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgeWllbGQgTE9HRU5ECisgICAgICAgIHlpZWxkICdcbicKKworICAgIGRlZiBnZW5lcmF0ZV9jcmVhdGVfc3VtbWFyeShzZWxmLCBwdXNoKToKKyAgICAgICAgIiIiQ2FsbGVkIGZvciB0aGUgY3JlYXRpb24gb2YgYW4gYW5ub3RhdGVkIHRhZy4iIiIKKworICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9saW5lcyhUQUdfQ1JFQVRFRF9URU1QTEFURSk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5kZXNjcmliZV90YWcocHVzaCk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfdXBkYXRlX3N1bW1hcnkoc2VsZiwgcHVzaCk6CisgICAgICAgICIiIkNhbGxlZCBmb3IgdGhlIHVwZGF0ZSBvZiBhbiBhbm5vdGF0ZWQgdGFnLgorCisgICAgICAgIFRoaXMgaXMgcHJvYmFibHkgYSByYXJlIGV2ZW50IGFuZCBtYXkgbm90IGV2ZW4gYmUgYWxsb3dlZC4iIiIKKworICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9saW5lcyhUQUdfVVBEQVRFRF9URU1QTEFURSk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5kZXNjcmliZV90YWcocHVzaCk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfZGVsZXRlX3N1bW1hcnkoc2VsZiwgcHVzaCk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIGEgbm9uLWFubm90YXRlZCByZWZlcmVuY2UgaXMgdXBkYXRlZC4iIiIKKworICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9saW5lcyhUQUdfREVMRVRFRF9URU1QTEFURSk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgeWllbGQgc2VsZi5leHBhbmQoJyAgIHRhZyB3YXMgICUob2xkcmV2X3Nob3J0KXNcbicpCisgICAgICAgIHlpZWxkICdcbicKKworCitjbGFzcyBOb25Bbm5vdGF0ZWRUYWdDaGFuZ2UoUmVmZXJlbmNlQ2hhbmdlKToKKyAgICByZWZuYW1lX3R5cGUgPSAndGFnJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudmlyb25tZW50LCByZWZuYW1lLCBzaG9ydF9yZWZuYW1lLCBvbGQsIG5ldywgcmV2KToKKyAgICAgICAgUmVmZXJlbmNlQ2hhbmdlLl9faW5pdF9fKAorICAgICAgICAgICAgc2VsZiwgZW52aXJvbm1lbnQsCisgICAgICAgICAgICByZWZuYW1lPXJlZm5hbWUsIHNob3J0X3JlZm5hbWU9c2hvcnRfcmVmbmFtZSwKKyAgICAgICAgICAgIG9sZD1vbGQsIG5ldz1uZXcsIHJldj1yZXYsCisgICAgICAgICAgICApCisgICAgICAgIHNlbGYucmVjaXBpZW50cyA9IGVudmlyb25tZW50LmdldF9yZWZjaGFuZ2VfcmVjaXBpZW50cyhzZWxmKQorCisgICAgZGVmIGdlbmVyYXRlX2NyZWF0ZV9zdW1tYXJ5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJDYWxsZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhbiBhbm5vdGF0ZWQgdGFnLiIiIgorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKFRBR19DUkVBVEVEX1RFTVBMQVRFKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV91cGRhdGVfc3VtbWFyeShzZWxmLCBwdXNoKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSBub24tYW5ub3RhdGVkIHJlZmVyZW5jZSBpcyB1cGRhdGVkLiIiIgorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKFRBR19VUERBVEVEX1RFTVBMQVRFKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV9kZWxldGVfc3VtbWFyeShzZWxmLCBwdXNoKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSBub24tYW5ub3RhdGVkIHJlZmVyZW5jZSBpcyB1cGRhdGVkLiIiIgorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKFRBR19ERUxFVEVEX1RFTVBMQVRFKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICBmb3IgbGluZSBpbiBSZWZlcmVuY2VDaGFuZ2UuZ2VuZXJhdGVfZGVsZXRlX3N1bW1hcnkoc2VsZiwgcHVzaCk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKworY2xhc3MgT3RoZXJSZWZlcmVuY2VDaGFuZ2UoUmVmZXJlbmNlQ2hhbmdlKToKKyAgICByZWZuYW1lX3R5cGUgPSAncmVmZXJlbmNlJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudmlyb25tZW50LCByZWZuYW1lLCBzaG9ydF9yZWZuYW1lLCBvbGQsIG5ldywgcmV2KToKKyAgICAgICAgIyBXZSB1c2UgdGhlIGZ1bGwgcmVmbmFtZSBhcyBzaG9ydF9yZWZuYW1lLCBiZWNhdXNlIG90aGVyd2lzZQorICAgICAgICAjIHRoZSBmdWxsIG5hbWUgb2YgdGhlIHJlZmVyZW5jZSB3b3VsZCBub3QgYmUgb2J2aW91cyBmcm9tIHRoZQorICAgICAgICAjIHRleHQgb2YgdGhlIGVtYWlsLgorICAgICAgICBSZWZlcmVuY2VDaGFuZ2UuX19pbml0X18oCisgICAgICAgICAgICBzZWxmLCBlbnZpcm9ubWVudCwKKyAgICAgICAgICAgIHJlZm5hbWU9cmVmbmFtZSwgc2hvcnRfcmVmbmFtZT1yZWZuYW1lLAorICAgICAgICAgICAgb2xkPW9sZCwgbmV3PW5ldywgcmV2PXJldiwKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5yZWNpcGllbnRzID0gZW52aXJvbm1lbnQuZ2V0X3JlZmNoYW5nZV9yZWNpcGllbnRzKHNlbGYpCisKKworY2xhc3MgTWFpbGVyKG9iamVjdCk6CisgICAgIiIiQW4gb2JqZWN0IHRoYXQgY2FuIHNlbmQgZW1haWxzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudmlyb25tZW50KToKKyAgICAgICAgc2VsZi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50CisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzZW5kKHNlbGYsIGxpbmVzLCB0b19hZGRycyk6CisgICAgICAgICIiIlNlbmQgYW4gZW1haWwgY29uc2lzdGluZyBvZiBsaW5lcy4KKworICAgICAgICBsaW5lcyBtdXN0IGJlIGFuIGl0ZXJhYmxlIG92ZXIgdGhlIGxpbmVzIGNvbnN0aXR1dGluZyB0aGUKKyAgICAgICAgaGVhZGVyIGFuZCBib2R5IG9mIHRoZSBlbWFpbC4gIHRvX2FkZHJzIGlzIGEgbGlzdCBvZiByZWNpcGllbnQKKyAgICAgICAgYWRkcmVzc2VzIChjYW4gYmUgbmVlZGVkIGV2ZW4gaWYgbGluZXMgYWxyZWFkeSBjb250YWlucyBhCisgICAgICAgICJUbzoiIGZpZWxkKS4gIEl0IGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgKGNvbW1hLXNlcGFyYXRlZCBsaXN0CisgICAgICAgIG9mIGVtYWlsIGFkZHJlc3Nlcykgb3IgYSBQeXRob24gbGlzdCBvZiBpbmRpdmlkdWFsIGVtYWlsCisgICAgICAgIGFkZHJlc3Nlcy4KKworICAgICAgICAiIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworCitjbGFzcyBTZW5kTWFpbGVyKE1haWxlcik6CisgICAgIiIiU2VuZCBlbWFpbHMgdXNpbmcgJ3NlbmRtYWlsIC1vaSAtdCcuIiIiCisKKyAgICBTRU5ETUFJTF9DQU5ESURBVEVTID0gWworICAgICAgICAnL3Vzci9zYmluL3NlbmRtYWlsJywKKyAgICAgICAgJy91c3IvbGliL3NlbmRtYWlsJywKKyAgICAgICAgXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmaW5kX3NlbmRtYWlsKCk6CisgICAgICAgIGZvciBwYXRoIGluIFNlbmRNYWlsZXIuU0VORE1BSUxfQ0FORElEQVRFUzoKKyAgICAgICAgICAgIGlmIG9zLmFjY2VzcyhwYXRoLCBvcy5YX09LKToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnTm8gc2VuZG1haWwgZXhlY3V0YWJsZSBmb3VuZC4gICcKKyAgICAgICAgICAgICAgICAnVHJ5IHNldHRpbmcgbXVsdGltYWlsaG9vay5zZW5kbWFpbENvbW1hbmQuJworICAgICAgICAgICAgICAgICkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnZpcm9ubWVudCwgY29tbWFuZD1Ob25lLCBlbnZlbG9wZXNlbmRlcj1Ob25lKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgU2VuZE1haWxlciBpbnN0YW5jZS4KKworICAgICAgICBjb21tYW5kIHNob3VsZCBiZSB0aGUgY29tbWFuZCBhbmQgYXJndW1lbnRzIHVzZWQgdG8gaW52b2tlCisgICAgICAgIHNlbmRtYWlsLCBhcyBhIGxpc3Qgb2Ygc3RyaW5ncy4gIElmIGFuIGVudmVsb3Blc2VuZGVyIGlzCisgICAgICAgIHByb3ZpZGVkLCBpdCB3aWxsIGFsc28gYmUgcGFzc2VkIHRvIHRoZSBjb21tYW5kLCB2aWEgJy1mCisgICAgICAgIGVudmVsb3Blc2VuZGVyJy4iIiIKKyAgICAgICAgc3VwZXIoU2VuZE1haWxlciwgc2VsZikuX19pbml0X18oZW52aXJvbm1lbnQpCisgICAgICAgIGlmIGNvbW1hbmQ6CisgICAgICAgICAgICBzZWxmLmNvbW1hbmQgPSBjb21tYW5kWzpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNvbW1hbmQgPSBbc2VsZi5maW5kX3NlbmRtYWlsKCksICctb2knLCAnLXQnXQorCisgICAgICAgIGlmIGVudmVsb3Blc2VuZGVyOgorICAgICAgICAgICAgc2VsZi5jb21tYW5kLmV4dGVuZChbJy1mJywgZW52ZWxvcGVzZW5kZXJdKQorCisgICAgZGVmIHNlbmQoc2VsZiwgbGluZXMsIHRvX2FkZHJzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5jb21tYW5kLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgc2VsZi5lbnZpcm9ubWVudC5nZXRfbG9nZ2VyKCkuZXJyb3IoCisgICAgICAgICAgICAgICAgJyoqKiBDYW5ub3QgZXhlY3V0ZSBjb21tYW5kOiAlc1xuJyAlICcgJy5qb2luKHNlbGYuY29tbWFuZCkgKworICAgICAgICAgICAgICAgICcqKiogJXNcbicgJSBzeXMuZXhjX2luZm8oKVsxXSArCisgICAgICAgICAgICAgICAgJyoqKiBUcnkgc2V0dGluZyBtdWx0aW1haWxob29rLm1haWxlciB0byAic210cCJcbicgKworICAgICAgICAgICAgICAgICcqKiogdG8gc2VuZCBlbWFpbHMgd2l0aG91dCB1c2luZyB0aGUgc2VuZG1haWwgY29tbWFuZC5cbicKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsaW5lcyA9IChzdHJfdG9fYnl0ZXMobGluZSkgZm9yIGxpbmUgaW4gbGluZXMpCisgICAgICAgICAgICBwLnN0ZGluLndyaXRlbGluZXMobGluZXMpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLmVudmlyb25tZW50LmdldF9sb2dnZXIoKS5lcnJvcigKKyAgICAgICAgICAgICAgICAnKioqIEVycm9yIHdoaWxlIGdlbmVyYXRpbmcgY29tbWl0IGVtYWlsXG4nCisgICAgICAgICAgICAgICAgJyoqKiAgLSBtYWlsIHNlbmRpbmcgYWJvcnRlZC5cbicKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBpZiBoYXNhdHRyKHAsICd0ZXJtaW5hdGUnKToKKyAgICAgICAgICAgICAgICAjIHN1YnByb2Nlc3MudGVybWluYXRlKCkgaXMgbm90IGF2YWlsYWJsZSBpbiBQeXRob24gMi40CisgICAgICAgICAgICAgICAgcC50ZXJtaW5hdGUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbXBvcnQgc2lnbmFsCisgICAgICAgICAgICAgICAgb3Mua2lsbChwLnBpZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcC5zdGRpbi5jbG9zZSgpCisgICAgICAgICAgICByZXRjb2RlID0gcC53YWl0KCkKKyAgICAgICAgICAgIGlmIHJldGNvZGU6CisgICAgICAgICAgICAgICAgcmFpc2UgQ29tbWFuZEVycm9yKHNlbGYuY29tbWFuZCwgcmV0Y29kZSkKKworCitjbGFzcyBTTVRQTWFpbGVyKE1haWxlcik6CisgICAgIiIiU2VuZCBlbWFpbHMgdXNpbmcgUHl0aG9uJ3Mgc210cGxpYi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnZpcm9ubWVudCwKKyAgICAgICAgICAgICAgICAgZW52ZWxvcGVzZW5kZXIsIHNtdHBzZXJ2ZXIsCisgICAgICAgICAgICAgICAgIHNtdHBzZXJ2ZXJ0aW1lb3V0PTEwLjAsIHNtdHBzZXJ2ZXJkZWJ1Z2xldmVsPTAsCisgICAgICAgICAgICAgICAgIHNtdHBlbmNyeXB0aW9uPSdub25lJywKKyAgICAgICAgICAgICAgICAgc210cHVzZXI9JycsIHNtdHBwYXNzPScnLAorICAgICAgICAgICAgICAgICBzbXRwY2FjZXJ0cz0nJworICAgICAgICAgICAgICAgICApOgorICAgICAgICBzdXBlcihTTVRQTWFpbGVyLCBzZWxmKS5fX2luaXRfXyhlbnZpcm9ubWVudCkKKyAgICAgICAgaWYgbm90IGVudmVsb3Blc2VuZGVyOgorICAgICAgICAgICAgc2VsZi5lbnZpcm9ubWVudC5nZXRfbG9nZ2VyKCkuZXJyb3IoCisgICAgICAgICAgICAgICAgJ2ZhdGFsOiBnaXRfbXVsdGltYWlsOiBjYW5ub3QgdXNlIFNNVFBNYWlsZXIgd2l0aG91dCBhIHNlbmRlciBhZGRyZXNzLlxuJworICAgICAgICAgICAgICAgICdwbGVhc2Ugc2V0IGVpdGhlciBtdWx0aW1haWxob29rLmVudmVsb3BlU2VuZGVyIG9yIHVzZXIuZW1haWxcbicKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBzbXRwZW5jcnlwdGlvbiA9PSAnc3NsJyBhbmQgbm90IChzbXRwdXNlciBhbmQgc210cHBhc3MpOgorICAgICAgICAgICAgcmFpc2UgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnQ2Fubm90IHVzZSBTTVRQTWFpbGVyIHdpdGggc2VjdXJpdHkgb3B0aW9uIHNzbCAnCisgICAgICAgICAgICAgICAgJ3dpdGhvdXQgb3B0aW9ucyB1c2VybmFtZSBhbmQgcGFzc3dvcmQuJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5lbnZlbG9wZXNlbmRlciA9IGVudmVsb3Blc2VuZGVyCisgICAgICAgIHNlbGYuc210cHNlcnZlciA9IHNtdHBzZXJ2ZXIKKyAgICAgICAgc2VsZi5zbXRwc2VydmVydGltZW91dCA9IHNtdHBzZXJ2ZXJ0aW1lb3V0CisgICAgICAgIHNlbGYuc210cHNlcnZlcmRlYnVnbGV2ZWwgPSBzbXRwc2VydmVyZGVidWdsZXZlbAorICAgICAgICBzZWxmLnNlY3VyaXR5ID0gc210cGVuY3J5cHRpb24KKyAgICAgICAgc2VsZi51c2VybmFtZSA9IHNtdHB1c2VyCisgICAgICAgIHNlbGYucGFzc3dvcmQgPSBzbXRwcGFzcworICAgICAgICBzZWxmLnNtdHBjYWNlcnRzID0gc210cGNhY2VydHMKKyAgICAgICAgc2VsZi5sb2dnZWRpbiA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZiBjYWxsKGtsYXNzLCBzZXJ2ZXIsIHRpbWVvdXQpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtsYXNzKHNlcnZlciwgdGltZW91dD10aW1lb3V0KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgT2xkIFB5dGhvbiB2ZXJzaW9ucyBkbyBub3QgaGF2ZSB0aW1lb3V0PSBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtsYXNzKHNlcnZlcikKKyAgICAgICAgICAgIGlmIHNlbGYuc2VjdXJpdHkgPT0gJ25vbmUnOgorICAgICAgICAgICAgICAgIHNlbGYuc210cCA9IGNhbGwoc210cGxpYi5TTVRQLCBzZWxmLnNtdHBzZXJ2ZXIsIHRpbWVvdXQ9c2VsZi5zbXRwc2VydmVydGltZW91dCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5zZWN1cml0eSA9PSAnc3NsJzoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNtdHBjYWNlcnRzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBzbXRwbGliLlNNVFBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hlY2tpbmcgY2VydGlmaWNhdGUgaXMgbm90IHN1cHBvcnRlZCBmb3Igc3NsLCBwcmVmZXIgc3RhcnR0bHMiCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgc2VsZi5zbXRwID0gY2FsbChzbXRwbGliLlNNVFBfU1NMLCBzZWxmLnNtdHBzZXJ2ZXIsIHRpbWVvdXQ9c2VsZi5zbXRwc2VydmVydGltZW91dCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5zZWN1cml0eSA9PSAndGxzJzoKKyAgICAgICAgICAgICAgICBpZiAnc3NsJyBub3QgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZW52aXJvbm1lbnQuZ2V0X2xvZ2dlcigpLmVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgJyoqKiBZb3VyIFB5dGhvbiB2ZXJzaW9uIGRvZXMgbm90IGhhdmUgdGhlIHNzbCBsaWJyYXJ5IGluc3RhbGxlZFxuJworICAgICAgICAgICAgICAgICAgICAgICAgJyoqKiBzbXRwRW5jcnlwdGlvbj10bHMgaXMgbm90IGF2YWlsYWJsZS5cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICcqKiogRWl0aGVyIHVwZ3JhZGUgUHl0aG9uIHRvIDIuNiBvciBsYXRlclxuJworICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBvciB1c2UgZ2l0X211bHRpbWFpbC5weSB2ZXJzaW9uIDEuMi5cbicpCisgICAgICAgICAgICAgICAgaWYgJzonIG5vdCBpbiBzZWxmLnNtdHBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc210cHNlcnZlciArPSAnOjU4NycgICMgZGVmYXVsdCBwb3J0IGZvciBUTFMKKyAgICAgICAgICAgICAgICBzZWxmLnNtdHAgPSBjYWxsKHNtdHBsaWIuU01UUCwgc2VsZi5zbXRwc2VydmVyLCB0aW1lb3V0PXNlbGYuc210cHNlcnZlcnRpbWVvdXQpCisgICAgICAgICAgICAgICAgIyBzdGFydDogZWhsbyArIHN0YXJ0dGxzCisgICAgICAgICAgICAgICAgIyBlcXVpdmFsZW50IHRvCisgICAgICAgICAgICAgICAgIyAgICAgc2VsZi5zbXRwLmVobG8oKQorICAgICAgICAgICAgICAgICMgICAgIHNlbGYuc210cC5zdGFydHRscygpCisgICAgICAgICAgICAgICAgIyB3aXRoIGFjY2VzcyB0byB0aGUgc3NsIGxheWVyCisgICAgICAgICAgICAgICAgc2VsZi5zbXRwLmVobG8oKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNtdHAuaGFzX2V4dG4oInN0YXJ0dGxzIik6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNtdHBsaWIuU01UUEV4Y2VwdGlvbigiU1RBUlRUTFMgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyIikKKyAgICAgICAgICAgICAgICByZXNwLCByZXBseSA9IHNlbGYuc210cC5kb2NtZCgiU1RBUlRUTFMiKQorICAgICAgICAgICAgICAgIGlmIHJlc3AgIT0gMjIwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBzbXRwbGliLlNNVFBFeGNlcHRpb24oIldyb25nIGFuc3dlciB0byB0aGUgU1RBUlRUTFMgY29tbWFuZCIpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5zbXRwY2FjZXJ0czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zbXRwLnNvY2sgPSBzc2wud3JhcF9zb2NrZXQoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNtdHAuc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPXNlbGYuc210cGNhY2VydHMsCisgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNtdHAuc29jayA9IHNzbC53cmFwX3NvY2tldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc210cC5zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX05PTkUKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lbnZpcm9ubWVudC5nZXRfbG9nZ2VyKCkuZXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAnKioqIFdhcm5pbmcsIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgaXMgbm90IHZlcmlmaWVkIChzbXRwKSAqKipcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICcqKiogICAgICAgICAgc2V0IHRoZSBvcHRpb24gc210cENBQ2VydHMgICAgICAgICAgICAgICAgICAgKioqXG4nCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5zbXRwLnNvY2ssICJyZWFkIik6CisgICAgICAgICAgICAgICAgICAgICMgdXNpbmcgaHR0cGxpYi5GYWtlU29ja2V0IHdpdGggUHl0aG9uIDIuNS54IG9yIGVhcmxpZXIKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zbXRwLnNvY2sucmVhZCA9IHNlbGYuc210cC5zb2NrLnJlY3YKKyAgICAgICAgICAgICAgICBzZWxmLnNtdHAuZmlsZSA9IHNtdHBsaWIuU1NMRmFrZUZpbGUoc2VsZi5zbXRwLnNvY2spCisgICAgICAgICAgICAgICAgc2VsZi5zbXRwLmhlbG9fcmVzcCA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLnNtdHAuZWhsb19yZXNwID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuc210cC5lc210cF9mZWF0dXJlcyA9IHt9CisgICAgICAgICAgICAgICAgc2VsZi5zbXRwLmRvZXNfZXNtdHAgPSAwCisgICAgICAgICAgICAgICAgIyBlbmQ6ICAgZWhsbyArIHN0YXJ0dGxzCisgICAgICAgICAgICAgICAgc2VsZi5zbXRwLmVobG8oKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcqKiogRXJyb3I6IENvbnRyb2wgcmVhY2hlZCBhbiBpbnZhbGlkIG9wdGlvbi4gKioqJykKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgaWYgc2VsZi5zbXRwc2VydmVyZGVidWdsZXZlbCA+IDA6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgIioqKiBTZXR0aW5nIGRlYnVnIG9uIGZvciBTTVRQIHNlcnZlciBjb25uZWN0aW9uICglcykgKioqXG4iCisgICAgICAgICAgICAgICAgICAgICUgc2VsZi5zbXRwc2VydmVyZGVidWdsZXZlbCkKKyAgICAgICAgICAgICAgICBzZWxmLnNtdHAuc2V0X2RlYnVnbGV2ZWwoc2VsZi5zbXRwc2VydmVyZGVidWdsZXZlbCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuZW52aXJvbm1lbnQuZ2V0X2xvZ2dlcigpLmVycm9yKAorICAgICAgICAgICAgICAgICcqKiogRXJyb3IgZXN0YWJsaXNoaW5nIFNNVFAgY29ubmVjdGlvbiB0byAlcyAqKipcbicKKyAgICAgICAgICAgICAgICAnKioqICVzXG4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi5zbXRwc2VydmVyLCBzeXMuZXhjX2luZm8oKVsxXSkpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdzbXRwJyk6CisgICAgICAgICAgICBzZWxmLnNtdHAucXVpdCgpCisgICAgICAgICAgICBkZWwgc2VsZi5zbXRwCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgc2VuZChzZWxmLCBsaW5lcywgdG9fYWRkcnMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLnVzZXJuYW1lIG9yIHNlbGYucGFzc3dvcmQ6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYubG9nZ2VkaW46CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc210cC5sb2dpbihzZWxmLnVzZXJuYW1lLCBzZWxmLnBhc3N3b3JkKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlZGluID0gVHJ1ZQorICAgICAgICAgICAgbXNnID0gJycuam9pbihsaW5lcykKKyAgICAgICAgICAgICMgdHVybiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBpbnRvIFB5dGhvbiBsaXN0IGlmIG5lZWRlZC4KKyAgICAgICAgICAgIGlmIGlzX3N0cmluZyh0b19hZGRycyk6CisgICAgICAgICAgICAgICAgdG9fYWRkcnMgPSBbZW1haWwgZm9yIChuYW1lLCBlbWFpbCkgaW4gZ2V0YWRkcmVzc2VzKFt0b19hZGRyc10pXQorICAgICAgICAgICAgc2VsZi5zbXRwLnNlbmRtYWlsKHNlbGYuZW52ZWxvcGVzZW5kZXIsIHRvX2FkZHJzLCBtc2cpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgICAgIHNlbGYuZW52aXJvbm1lbnQuZ2V0X2xvZ2dlcigpLmVycm9yKAorICAgICAgICAgICAgICAgICcqKiogRXJyb3Igc2VuZGluZyBlbWFpbCAqKipcbicKKyAgICAgICAgICAgICAgICAnKioqIFNNVFAgc2VydmVyIHRpbWVkIG91dCAodGltZW91dCBpcyAlcylcbicKKyAgICAgICAgICAgICAgICAlIHNlbGYuc210cHNlcnZlcnRpbWVvdXQpCisgICAgICAgIGV4Y2VwdCBzbXRwbGliLlNNVFBSZXNwb25zZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGVyciA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICBzZWxmLmVudmlyb25tZW50LmdldF9sb2dnZXIoKS5lcnJvcigKKyAgICAgICAgICAgICAgICAnKioqIEVycm9yIHNlbmRpbmcgZW1haWwgKioqXG4nCisgICAgICAgICAgICAgICAgJyoqKiBFcnJvciAlZDogJXNcbicKKyAgICAgICAgICAgICAgICAlIChlcnIuc210cF9jb2RlLCBieXRlc190b19zdHIoZXJyLnNtdHBfZXJyb3IpKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzbXRwID0gc2VsZi5zbXRwCisgICAgICAgICAgICAgICAgIyBkZWxldGUgdGhlIGZpZWxkIGJlZm9yZSBxdWl0KCkgc28gdGhhdCBpbiBjYXNlIG9mCisgICAgICAgICAgICAgICAgIyBlcnJvciwgc2VsZi5zbXRwIGlzIGRlbGV0ZWQgYW55d2F5LgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLnNtdHAKKyAgICAgICAgICAgICAgICBzbXRwLnF1aXQoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNlbGYuZW52aXJvbm1lbnQuZ2V0X2xvZ2dlcigpLmVycm9yKAorICAgICAgICAgICAgICAgICAgICAnKioqIEVycm9yIGNsb3NpbmcgdGhlIFNNVFAgY29ubmVjdGlvbiAqKipcbicKKyAgICAgICAgICAgICAgICAgICAgJyoqKiBFeGl0aW5nIGFueXdheSAuLi4gKioqXG4nCisgICAgICAgICAgICAgICAgICAgICcqKiogJXNcbicgJSBzeXMuZXhjX2luZm8oKVsxXSkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKworY2xhc3MgT3V0cHV0TWFpbGVyKE1haWxlcik6CisgICAgIiIiV3JpdGUgZW1haWxzIHRvIGFuIG91dHB1dCBzdHJlYW0sIGJyYWNrZXRlZCBieSBsaW5lcyBvZiAnPScgY2hhcmFjdGVycy4KKworICAgIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4iIiIKKworICAgIFNFUEFSQVRPUiA9ICc9JyAqIDc1ICsgJ1xuJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGYsIGVudmlyb25tZW50PU5vbmUpOgorICAgICAgICBzdXBlcihPdXRwdXRNYWlsZXIsIHNlbGYpLl9faW5pdF9fKGVudmlyb25tZW50PWVudmlyb25tZW50KQorICAgICAgICBzZWxmLmYgPSBmCisKKyAgICBkZWYgc2VuZChzZWxmLCBsaW5lcywgdG9fYWRkcnMpOgorICAgICAgICB3cml0ZV9zdHIoc2VsZi5mLCBzZWxmLlNFUEFSQVRPUikKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICB3cml0ZV9zdHIoc2VsZi5mLCBsaW5lKQorICAgICAgICB3cml0ZV9zdHIoc2VsZi5mLCBzZWxmLlNFUEFSQVRPUikKKworCitkZWYgZ2V0X2dpdF9kaXIoKToKKyAgICAiIiJEZXRlcm1pbmUgR0lUX0RJUi4KKworICAgIERldGVybWluZSBHSVRfRElSIGVpdGhlciBmcm9tIHRoZSBHSVRfRElSIGVudmlyb25tZW50IHZhcmlhYmxlIG9yCisgICAgZnJvbSB0aGUgd29ya2luZyBkaXJlY3RvcnksIHVzaW5nIEdpdCdzIHVzdWFsIHJ1bGVzLiIiIgorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcmVhZF9naXRfb3V0cHV0KFsncmV2LXBhcnNlJywgJy0tZ2l0LWRpciddKQorICAgIGV4Y2VwdCBDb21tYW5kRXJyb3I6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ2ZhdGFsOiBnaXRfbXVsdGltYWlsOiBub3QgaW4gYSBnaXQgZGlyZWN0b3J5XG4nKQorICAgICAgICBzeXMuZXhpdCgxKQorCisKK2NsYXNzIEVudmlyb25tZW50KG9iamVjdCk6CisgICAgIiIiRGVzY3JpYmVzIHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgcHVzaCBpcyBvY2N1cnJpbmcuCisKKyAgICBBbiBFbnZpcm9ubWVudCBvYmplY3QgZW5jYXBzdWxhdGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhbAorICAgIGVudmlyb25tZW50LiAgRm9yIGV4YW1wbGUsIGl0IGtub3dzIGhvdyB0byBkZXRlcm1pbmU6CisKKyAgICAqIHRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5IHRvIHdoaWNoIHRoZSBwdXNoIG9jY3VycmVkCisKKyAgICAqIHdoYXQgdXNlciBkaWQgdGhlIHB1c2gKKworICAgICogd2hhdCB1c2VycyB3YW50IHRvIGJlIGluZm9ybWVkIGFib3V0IHZhcmlvdXMgdHlwZXMgb2YgY2hhbmdlcy4KKworICAgIEFuIEVudmlyb25tZW50IG9iamVjdCBpcyBleHBlY3RlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKworICAgICAgICBnZXRfcmVwb19zaG9ydG5hbWUoKQorCisgICAgICAgICAgICBSZXR1cm4gYSBzaG9ydCBuYW1lIGZvciB0aGUgcmVwb3NpdG9yeSwgZm9yIGRpc3BsYXkKKyAgICAgICAgICAgIHB1cnBvc2VzLgorCisgICAgICAgIGdldF9yZXBvX3BhdGgoKQorCisgICAgICAgICAgICBSZXR1cm4gdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIEdpdCByZXBvc2l0b3J5LgorCisgICAgICAgIGdldF9lbWFpbHByZWZpeCgpCisKKyAgICAgICAgICAgIFJldHVybiBhIHN0cmluZyB0aGF0IHdpbGwgYmUgcHJlZml4ZWQgdG8gZXZlcnkgZW1haWwncworICAgICAgICAgICAgc3ViamVjdC4KKworICAgICAgICBnZXRfcHVzaGVyKCkKKworICAgICAgICAgICAgUmV0dXJuIHRoZSB1c2VybmFtZSBvZiB0aGUgcGVyc29uIHdobyBwdXNoZWQgdGhlIGNoYW5nZXMuCisgICAgICAgICAgICBUaGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIGVtYWlsIGJvZHkgdG8gaW5kaWNhdGUgd2hvCisgICAgICAgICAgICBwdXNoZWQgdGhlIGNoYW5nZS4KKworICAgICAgICBnZXRfcHVzaGVyX2VtYWlsKCkgKG1heSByZXR1cm4gTm9uZSkKKworICAgICAgICAgICAgUmV0dXJuIHRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSBwZXJzb24gd2hvIHB1c2hlZCB0aGUKKyAgICAgICAgICAgIGNoYW5nZXMuICBUaGUgdmFsdWUgc2hvdWxkIGJlIGEgc2luZ2xlIFJGQyAyODIyIGVtYWlsCisgICAgICAgICAgICBhZGRyZXNzIGFzIGEgc3RyaW5nOyBlLmcuLCAiSm9lIFVzZXIgPHVzZXJAZXhhbXBsZS5jb20+IgorICAgICAgICAgICAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgInVzZXJAZXhhbXBsZS5jb20iLiAgSWYgc2V0LCB0aGUKKyAgICAgICAgICAgIHZhbHVlIGlzIHVzZWQgYXMgdGhlIFJlcGx5LVRvIGFkZHJlc3MgZm9yIHJlZmNoYW5nZQorICAgICAgICAgICAgZW1haWxzLiAgSWYgaXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIHB1c2hlcidzCisgICAgICAgICAgICBlbWFpbCwgdGhpcyBhdHRyaWJ1dGUgc2hvdWxkIGJlIHNldCB0byBOb25lIChpbiB3aGljaCBjYXNlCisgICAgICAgICAgICBubyBSZXBseS1UbyBoZWFkZXIgd2lsbCBiZSBvdXRwdXQpLgorCisgICAgICAgIGdldF9zZW5kZXIoKQorCisgICAgICAgICAgICBSZXR1cm4gdGhlIGFkZHJlc3MgdG8gYmUgdXNlZCBhcyB0aGUgJ0Zyb20nIGVtYWlsIGFkZHJlc3MKKyAgICAgICAgICAgIGluIHRoZSBlbWFpbCBlbnZlbG9wZS4KKworICAgICAgICBnZXRfZnJvbWFkZHIoY2hhbmdlPU5vbmUpCisKKyAgICAgICAgICAgIFJldHVybiB0aGUgJ0Zyb20nIGVtYWlsIGFkZHJlc3MgdXNlZCBpbiB0aGUgZW1haWwgJ0Zyb206JworICAgICAgICAgICAgaGVhZGVycy4gIElmIHRoZSBjaGFuZ2UgaXMga25vd24gd2hlbiB0aGlzIGZ1bmN0aW9uIGlzCisgICAgICAgICAgICBjYWxsZWQsIGl0IGlzIHBhc3NlZCBpbiBhcyB0aGUgJ2NoYW5nZScgcGFyYW1ldGVyLiAgKE1heQorICAgICAgICAgICAgYmUgYSBmdWxsIFJGQyAyODIyIGVtYWlsIGFkZHJlc3MgbGlrZSAnSm9lIFVzZXIKKyAgICAgICAgICAgIDx1c2VyQGV4YW1wbGUuY29tPicuKQorCisgICAgICAgIGdldF9hZG1pbmlzdHJhdG9yKCkKKworICAgICAgICAgICAgUmV0dXJuIHRoZSBuYW1lIGFuZC9vciBlbWFpbCBvZiB0aGUgcmVwb3NpdG9yeQorICAgICAgICAgICAgYWRtaW5pc3RyYXRvci4gIFRoaXMgdmFsdWUgaXMgdXNlZCBpbiB0aGUgZm9vdGVyIGFzIHRoZQorICAgICAgICAgICAgcGVyc29uIHRvIHdob20gcmVxdWVzdHMgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZQorICAgICAgICAgICAgbm90aWZpY2F0aW9uIGxpc3Qgc2hvdWxkIGJlIHNlbnQuICBJZGVhbGx5LCBpdCBzaG91bGQKKyAgICAgICAgICAgIGluY2x1ZGUgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLgorCisgICAgICAgIGdldF9yZXBseV90b19yZWZjaGFuZ2UoKQorICAgICAgICBnZXRfcmVwbHlfdG9fY29tbWl0KCkKKworICAgICAgICAgICAgUmV0dXJuIHRoZSBhZGRyZXNzIHRvIHVzZSBpbiB0aGUgZW1haWwgIlJlcGx5LVRvIiBoZWFkZXIsCisgICAgICAgICAgICBhcyBhIHN0cmluZy4gIFRoZXNlIGNhbiBiZSBhbiBSRkMgMjgyMiBlbWFpbCBhZGRyZXNzLCBvcgorICAgICAgICAgICAgTm9uZSB0byBvbWl0IHRoZSAiUmVwbHktVG8iIGhlYWRlci4KKyAgICAgICAgICAgIGdldF9yZXBseV90b19yZWZjaGFuZ2UoKSBpcyB1c2VkIGZvciByZWZjaGFuZ2UgZW1haWxzOworICAgICAgICAgICAgZ2V0X3JlcGx5X3RvX2NvbW1pdCgpIGlzIHVzZWQgZm9yIGluZGl2aWR1YWwgY29tbWl0CisgICAgICAgICAgICBlbWFpbHMuCisKKyAgICAgICAgZ2V0X3JlZl9maWx0ZXJfcmVnZXgoKQorCisgICAgICAgICAgICBSZXR1cm4gYSB0dXBsZSAtLSBhIGNvbXBpbGVkIHJlZ2V4LCBhbmQgYSBib29sZWFuIGluZGljYXRpbmcKKyAgICAgICAgICAgIHdoZXRoZXIgdGhlIHJlZ2V4IHBpY2tzIHJlZnMgdG8gaW5jbHVkZSAoaWYgRmFsc2UsIHRoZSByZWdleAorICAgICAgICAgICAgbWF0Y2hlcyBvbiByZWZzIHRvIGV4Y2x1ZGUpLgorCisgICAgICAgIGdldF9kZWZhdWx0X3JlZl9pZ25vcmVfcmVnZXgoKQorCisgICAgICAgICAgICBSZXR1cm4gYSByZWdleCB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIGZvciBib3RoIHdoYXQgZW1haWxzCisgICAgICAgICAgICB0byBzZW5kIGFuZCB3aGVuIGNvbXB1dGluZyB3aGF0IGNvbW1pdHMgYXJlIGNvbnNpZGVyZWQgbmV3CisgICAgICAgICAgICB0byB0aGUgcmVwb3NpdG9yeS4gIERlZmF1bHQgaXMgIl5yZWZzL25vdGVzLyIuCisKKyAgICAgICAgZ2V0X21heF9zdWJqZWN0X2xlbmd0aCgpCisKKyAgICAgICAgICAgIFJldHVybiBhbiBpbnQgZ2l2aW5nIHRoZSBtYXhpbWFsIGxlbmd0aCBmb3IgdGhlIHN1YmplY3QKKyAgICAgICAgICAgIChnaXQgbG9nIC0tb25lbGluZSkuCisKKyAgICBUaGV5IHNob3VsZCBhbHNvIGRlZmluZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisKKyAgICAgICAgYW5ub3VuY2Vfc2hvd19zaG9ydGxvZyAoYm9vbCkKKworICAgICAgICAgICAgVHJ1ZSBpZmYgYW5ub3VuY2UgZW1haWxzIHNob3VsZCBpbmNsdWRlIGEgc2hvcnRsb2cuCisKKyAgICAgICAgY29tbWl0X2VtYWlsX2Zvcm1hdCAoc3RyaW5nKQorCisgICAgICAgICAgICBJZiAiaHRtbCIsIGdlbmVyYXRlIGNvbW1pdCBlbWFpbHMgaW4gSFRNTCBpbnN0ZWFkIG9mIHBsYWluIHRleHQKKyAgICAgICAgICAgIHVzZWQgYnkgZGVmYXVsdC4KKworICAgICAgICBodG1sX2luX2ludHJvIChib29sKQorICAgICAgICBodG1sX2luX2Zvb3RlciAoYm9vbCkKKworICAgICAgICAgICAgV2hlbiBnZW5lcmF0aW5nIEhUTUwgZW1haWxzLCB0aGUgaW50cm9kdWN0aW9uIChyZXNwZWN0aXZlbHksCisgICAgICAgICAgICB0aGUgZm9vdGVyKSB3aWxsIGJlIEhUTUwtZXNjYXBlZCBpZmYgaHRtbF9pbl9pbnRybyAocmVzcGVjdGl2ZWx5LAorICAgICAgICAgICAgdGhlIGZvb3RlcikgaXMgdHJ1ZS4gV2hlbiBmYWxzZSwgb25seSB0aGUgdmFsdWVzIHVzZWQgdG8gZXhwYW5kCisgICAgICAgICAgICB0aGUgdGVtcGxhdGUgYXJlIGVzY2FwZWQuCisKKyAgICAgICAgcmVmY2hhbmdlX3Nob3dncmFwaCAoYm9vbCkKKworICAgICAgICAgICAgVHJ1ZSBpZmYgcmVmY2hhbmdlcyBlbWFpbHMgc2hvdWxkIGluY2x1ZGUgYSBkZXRhaWxlZCBncmFwaC4KKworICAgICAgICByZWZjaGFuZ2Vfc2hvd2xvZyAoYm9vbCkKKworICAgICAgICAgICAgVHJ1ZSBpZmYgcmVmY2hhbmdlcyBlbWFpbHMgc2hvdWxkIGluY2x1ZGUgYSBkZXRhaWxlZCBsb2cuCisKKyAgICAgICAgZGlmZm9wdHMgKGxpc3Qgb2Ygc3RyaW5ncykKKworICAgICAgICAgICAgVGhlIG9wdGlvbnMgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHRvICdnaXQgZGlmZicgZm9yIHRoZQorICAgICAgICAgICAgc3VtbWFyeSBlbWFpbC4gIFRoZSB2YWx1ZSBzaG91bGQgYmUgYSBsaXN0IG9mIHN0cmluZ3MKKyAgICAgICAgICAgIHJlcHJlc2VudGluZyB3b3JkcyB0byBiZSBwYXNzZWQgdG8gdGhlIGNvbW1hbmQuCisKKyAgICAgICAgZ3JhcGhvcHRzIChsaXN0IG9mIHN0cmluZ3MpCisKKyAgICAgICAgICAgIEFuYWxvZ291cyB0byBkaWZmb3B0cywgYnV0IGNvbnRhaW5zIG9wdGlvbnMgcGFzc2VkIHRvCisgICAgICAgICAgICAnZ2l0IGxvZyAtLWdyYXBoJyB3aGVuIGdlbmVyYXRpbmcgdGhlIGRldGFpbGVkIGdyYXBoIGZvcgorICAgICAgICAgICAgYSBzZXQgb2YgY29tbWl0cyAoc2VlIHJlZmNoYW5nZV9zaG93Z3JhcGgpCisKKyAgICAgICAgbG9nb3B0cyAobGlzdCBvZiBzdHJpbmdzKQorCisgICAgICAgICAgICBBbmFsb2dvdXMgdG8gZGlmZm9wdHMsIGJ1dCBjb250YWlucyBvcHRpb25zIHBhc3NlZCB0bworICAgICAgICAgICAgJ2dpdCBsb2cnIHdoZW4gZ2VuZXJhdGluZyB0aGUgZGV0YWlsZWQgbG9nIGZvciBhIHNldCBvZgorICAgICAgICAgICAgY29tbWl0cyAoc2VlIHJlZmNoYW5nZV9zaG93bG9nKQorCisgICAgICAgIGNvbW1pdGxvZ29wdHMgKGxpc3Qgb2Ygc3RyaW5ncykKKworICAgICAgICAgICAgVGhlIG9wdGlvbnMgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHRvICdnaXQgbG9nJyBmb3IgZWFjaAorICAgICAgICAgICAgY29tbWl0IG1haWwuICBUaGUgdmFsdWUgc2hvdWxkIGJlIGEgbGlzdCBvZiBzdHJpbmdzCisgICAgICAgICAgICByZXByZXNlbnRpbmcgd29yZHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBjb21tYW5kLgorCisgICAgICAgIGRhdGVfc3Vic3RpdHV0ZSAoc3RyaW5nKQorCisgICAgICAgICAgICBTdHJpbmcgdG8gYmUgdXNlZCBpbiBzdWJzdGl0dXRpb24gZm9yICdEYXRlOicgYXQgc3RhcnQgb2YKKyAgICAgICAgICAgIGxpbmUgaW4gdGhlIG91dHB1dCBvZiAnZ2l0IGxvZycuCisKKyAgICAgICAgcXVpZXQgKGJvb2wpCisgICAgICAgICAgICBPbiBzdWNjZXNzIGRvIG5vdCB3cml0ZSB0byBzdGRlcnIKKworICAgICAgICBzdGRvdXQgKGJvb2wpCisgICAgICAgICAgICBXcml0ZSBlbWFpbCB0byBzdGRvdXQgcmF0aGVyIHRoYW4gZW1haWxpbmcuIFVzZWZ1bCBmb3IgZGVidWdnaW5nCisKKyAgICAgICAgY29tYmluZV93aGVuX3NpbmdsZV9jb21taXQgKGJvb2wpCisKKyAgICAgICAgICAgIFRydWUgaWYgYSBjb21iaW5lZCBlbWFpbCBzaG91bGQgYmUgcHJvZHVjZWQgd2hlbiBhIHNpbmdsZQorICAgICAgICAgICAgbmV3IGNvbW1pdCBpcyBwdXNoZWQgdG8gYSBicmFuY2gsIEZhbHNlIG90aGVyd2lzZS4KKworICAgICAgICBmcm9tX3JlZmNoYW5nZSwgZnJvbV9jb21taXQgKHN0cmluZ3MpCisKKyAgICAgICAgICAgIEFkZHJlc3NlcyB0byB1c2UgZm9yIHRoZSBGcm9tOiBmaWVsZCBmb3IgcmVmY2hhbmdlIGVtYWlscworICAgICAgICAgICAgYW5kIGNvbW1pdCBlbWFpbHMgcmVzcGVjdGl2ZWx5LiAgU2V0IGZyb20KKyAgICAgICAgICAgIG11bHRpbWFpbGhvb2suZnJvbVJlZmNoYW5nZSBhbmQgbXVsdGltYWlsaG9vay5mcm9tQ29tbWl0CisgICAgICAgICAgICBieSBDb25maWdFbnZpcm9ubWVudE1peGluLgorCisgICAgICAgIGxvZ19maWxlLCBlcnJvcl9sb2dfZmlsZSwgZGVidWdfbG9nX2ZpbGUgKHN0cmluZykKKworICAgICAgICAgICAgTmFtZSBvZiBhIGZpbGUgdG8gd2hpY2ggbG9ncyBzaG91bGQgYmUgc2VudC4KKworICAgICAgICB2ZXJib3NlIChpbnQpCisKKyAgICAgICAgICAgIEhvdyB2ZXJib3NlIHRoZSBzeXN0ZW0gc2hvdWxkIGJlLgorICAgICAgICAgICAgLSAwIChkZWZhdWx0KTogc2hvdyBpbmZvLCBlcnJvcnMsIC4uLgorICAgICAgICAgICAgLSAxIDogc2hvdyBiYXNpYyBkZWJ1ZyBpbmZvCisgICAgIiIiCisKKyAgICBSRVBPX05BTUVfUkUgPSByZS5jb21waWxlKHInXig/UDxuYW1lPi4rPykoPzpcLmdpdCkkJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvc2Vudj1Ob25lKToKKyAgICAgICAgc2VsZi5vc2VudiA9IG9zZW52IG9yIG9zLmVudmlyb24KKyAgICAgICAgc2VsZi5hbm5vdW5jZV9zaG93X3Nob3J0bG9nID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb21taXRfZW1haWxfZm9ybWF0ID0gInRleHQiCisgICAgICAgIHNlbGYuaHRtbF9pbl9pbnRybyA9IEZhbHNlCisgICAgICAgIHNlbGYuaHRtbF9pbl9mb290ZXIgPSBGYWxzZQorICAgICAgICBzZWxmLmNvbW1pdEJyb3dzZVVSTCA9IE5vbmUKKyAgICAgICAgc2VsZi5tYXhjb21taXRlbWFpbHMgPSA1MDAKKyAgICAgICAgc2VsZi5leGNsdWRlbWVyZ2VyZXZpc2lvbnMgPSBGYWxzZQorICAgICAgICBzZWxmLmRpZmZvcHRzID0gWyctLXN0YXQnLCAnLS1zdW1tYXJ5JywgJy0tZmluZC1jb3BpZXMtaGFyZGVyJ10KKyAgICAgICAgc2VsZi5ncmFwaG9wdHMgPSBbJy0tb25lbGluZScsICctLWRlY29yYXRlJ10KKyAgICAgICAgc2VsZi5sb2dvcHRzID0gW10KKyAgICAgICAgc2VsZi5yZWZjaGFuZ2Vfc2hvd2dyYXBoID0gRmFsc2UKKyAgICAgICAgc2VsZi5yZWZjaGFuZ2Vfc2hvd2xvZyA9IEZhbHNlCisgICAgICAgIHNlbGYuY29tbWl0bG9nb3B0cyA9IFsnLUMnLCAnLS1zdGF0JywgJy1wJywgJy0tY2MnXQorICAgICAgICBzZWxmLmRhdGVfc3Vic3RpdHV0ZSA9ICdBdXRob3JEYXRlOiAnCisgICAgICAgIHNlbGYucXVpZXQgPSBGYWxzZQorICAgICAgICBzZWxmLnN0ZG91dCA9IEZhbHNlCisgICAgICAgIHNlbGYuY29tYmluZV93aGVuX3NpbmdsZV9jb21taXQgPSBUcnVlCisgICAgICAgIHNlbGYubG9nZ2VyID0gTm9uZQorCisgICAgICAgIHNlbGYuQ09NUFVURURfS0VZUyA9IFsKKyAgICAgICAgICAgICdhZG1pbmlzdHJhdG9yJywKKyAgICAgICAgICAgICdjaGFyc2V0JywKKyAgICAgICAgICAgICdlbWFpbHByZWZpeCcsCisgICAgICAgICAgICAncHVzaGVyJywKKyAgICAgICAgICAgICdwdXNoZXJfZW1haWwnLAorICAgICAgICAgICAgJ3JlcG9fcGF0aCcsCisgICAgICAgICAgICAncmVwb19zaG9ydG5hbWUnLAorICAgICAgICAgICAgJ3NlbmRlcicsCisgICAgICAgICAgICBdCisKKyAgICAgICAgc2VsZi5fdmFsdWVzID0gTm9uZQorCisgICAgZGVmIGdldF9sb2dnZXIoc2VsZik6CisgICAgICAgICIiIkdldCAocG9zc2libHkgY3JlYXRlcykgdGhlIGxvZ2dlciBhc3NvY2lhdGVkIHRvIHRoaXMgZW52aXJvbm1lbnQuIiIiCisgICAgICAgIGlmIHNlbGYubG9nZ2VyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmxvZ2dlciA9IExvZ2dlcihzZWxmKQorICAgICAgICByZXR1cm4gc2VsZi5sb2dnZXIKKworICAgIGRlZiBnZXRfcmVwb19zaG9ydG5hbWUoc2VsZik6CisgICAgICAgICIiIlVzZSB0aGUgbGFzdCBwYXJ0IG9mIHRoZSByZXBvIHBhdGgsIHdpdGggIi5naXQiIHN0cmlwcGVkIG9mZiBpZiBwcmVzZW50LiIiIgorCisgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLmFic3BhdGgoc2VsZi5nZXRfcmVwb19wYXRoKCkpKQorICAgICAgICBtID0gc2VsZi5SRVBPX05BTUVfUkUubWF0Y2goYmFzZW5hbWUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICByZXR1cm4gbS5ncm91cCgnbmFtZScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUKKworICAgIGRlZiBnZXRfcHVzaGVyKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBnZXRfcHVzaGVyX2VtYWlsKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGdldF9mcm9tYWRkcihzZWxmLCBjaGFuZ2U9Tm9uZSk6CisgICAgICAgIGNvbmZpZyA9IENvbmZpZygndXNlcicpCisgICAgICAgIGZyb21uYW1lID0gY29uZmlnLmdldCgnbmFtZScsIGRlZmF1bHQ9JycpCisgICAgICAgIGZyb21lbWFpbCA9IGNvbmZpZy5nZXQoJ2VtYWlsJywgZGVmYXVsdD0nJykKKyAgICAgICAgaWYgZnJvbWVtYWlsOgorICAgICAgICAgICAgcmV0dXJuIGZvcm1hdGFkZHIoW2Zyb21uYW1lLCBmcm9tZW1haWxdKQorICAgICAgICByZXR1cm4gc2VsZi5nZXRfc2VuZGVyKCkKKworICAgIGRlZiBnZXRfYWRtaW5pc3RyYXRvcihzZWxmKToKKyAgICAgICAgcmV0dXJuICd0aGUgYWRtaW5pc3RyYXRvciBvZiB0aGlzIHJlcG9zaXRvcnknCisKKyAgICBkZWYgZ2V0X2VtYWlscHJlZml4KHNlbGYpOgorICAgICAgICByZXR1cm4gJycKKworICAgIGRlZiBnZXRfcmVwb19wYXRoKHNlbGYpOgorICAgICAgICBpZiByZWFkX2dpdF9vdXRwdXQoWydyZXYtcGFyc2UnLCAnLS1pcy1iYXJlLXJlcG9zaXRvcnknXSkgPT0gJ3RydWUnOgorICAgICAgICAgICAgcGF0aCA9IGdldF9naXRfZGlyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGggPSByZWFkX2dpdF9vdXRwdXQoWydyZXYtcGFyc2UnLCAnLS1zaG93LXRvcGxldmVsJ10pCisgICAgICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgocGF0aCkKKworICAgIGRlZiBnZXRfY2hhcnNldChzZWxmKToKKyAgICAgICAgcmV0dXJuIENIQVJTRVQKKworICAgIGRlZiBnZXRfdmFsdWVzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBkaWN0aW9uYXJ5IHtrZXl3b3JkOiBleHBhbnNpb259IGZvciB0aGlzIEVudmlyb25tZW50LgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBDaGFuZ2UuX2NvbXB1dGVfdmFsdWVzKCkuICBUaGUga2V5cworICAgICAgICBpbiB0aGUgcmV0dXJuZWQgZGljdGlvbmFyeSBhcmUgYXZhaWxhYmxlIHRvIGJlIHVzZWQgaW4gYW55IG9mCisgICAgICAgIHRoZSB0ZW1wbGF0ZXMuICBUaGUgZGljdGlvbmFyeSBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcKKyAgICAgICAgc2VsZi5nZXRfTkFNRSgpIGZvciBlYWNoIG9mIHRoZSBhdHRyaWJ1dGVzIG5hbWVkIGluCisgICAgICAgIENPTVBVVEVEX0tFWVMgYW5kIHJlY29yZGluZyB0aG9zZSB0aGF0IGRvIG5vdCByZXR1cm4gTm9uZS4KKyAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhbHdheXMgYSBuZXcgZGljdGlvbmFyeS4iIiIKKworICAgICAgICBpZiBzZWxmLl92YWx1ZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHZhbHVlcyA9IHsnJzogJyd9ICAjICUoKXMgZXhwYW5kcyB0byB0aGUgZW1wdHkgc3RyaW5nLgorCisgICAgICAgICAgICBmb3Iga2V5IGluIHNlbGYuQ09NUFVURURfS0VZUzoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIoc2VsZiwgJ2dldF8lcycgJSAoa2V5LCkpKCkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2tleV0gPSB2YWx1ZQorCisgICAgICAgICAgICBzZWxmLl92YWx1ZXMgPSB2YWx1ZXMKKworICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVzLmNvcHkoKQorCisgICAgZGVmIGdldF9yZWZjaGFuZ2VfcmVjaXBpZW50cyhzZWxmLCByZWZjaGFuZ2UpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHJlY2lwaWVudHMgZm9yIG5vdGlmaWNhdGlvbnMgYWJvdXQgcmVmY2hhbmdlLgorCisgICAgICAgIFJldHVybiB0aGUgbGlzdCBvZiBlbWFpbCBhZGRyZXNzZXMgdG8gd2hpY2ggbm90aWZpY2F0aW9ucworICAgICAgICBhYm91dCB0aGUgc3BlY2lmaWVkIFJlZmVyZW5jZUNoYW5nZSBzaG91bGQgYmUgc2VudC4iIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBnZXRfYW5ub3VuY2VfcmVjaXBpZW50cyhzZWxmLCBhbm5vdGF0ZWRfdGFnX2NoYW5nZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVjaXBpZW50cyBmb3Igbm90aWZpY2F0aW9ucyBhYm91dCBhbm5vdGF0ZWRfdGFnX2NoYW5nZS4KKworICAgICAgICBSZXR1cm4gdGhlIGxpc3Qgb2YgZW1haWwgYWRkcmVzc2VzIHRvIHdoaWNoIG5vdGlmaWNhdGlvbnMKKyAgICAgICAgYWJvdXQgdGhlIHNwZWNpZmllZCBBbm5vdGF0ZWRUYWdDaGFuZ2Ugc2hvdWxkIGJlIHNlbnQuIiIiCisKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgZ2V0X3JlcGx5X3RvX3JlZmNoYW5nZShzZWxmLCByZWZjaGFuZ2UpOgorICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHVzaGVyX2VtYWlsKCkKKworICAgIGRlZiBnZXRfcmV2aXNpb25fcmVjaXBpZW50cyhzZWxmLCByZXZpc2lvbik6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVjaXBpZW50cyBmb3IgbWVzc2FnZXMgYWJvdXQgcmV2aXNpb24uCisKKyAgICAgICAgUmV0dXJuIHRoZSBsaXN0IG9mIGVtYWlsIGFkZHJlc3NlcyB0byB3aGljaCBub3RpZmljYXRpb25zCisgICAgICAgIGFib3V0IHRoZSBzcGVjaWZpZWQgUmV2aXNpb24gc2hvdWxkIGJlIHNlbnQuICBUaGlzIG1ldGhvZAorICAgICAgICBjb3VsZCBiZSBvdmVycmlkZGVuLCBmb3IgZXhhbXBsZSwgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlCisgICAgICAgIGNvbnRlbnRzIG9mIHRoZSByZXZpc2lvbiB3aGVuIGRlY2lkaW5nIHdob20gdG8gbm90aWZ5IGFib3V0CisgICAgICAgIGl0LiAgRm9yIGV4YW1wbGUsIHRoZXJlIGNvdWxkIGJlIGEgc2NoZW1lIGZvciB1c2VycyB0byBleHByZXNzCisgICAgICAgIGludGVyZXN0IGluIHBhcnRpY3VsYXIgZmlsZXMgb3Igc3ViZGlyZWN0b3JpZXMsIGFuZCBvbmx5CisgICAgICAgIHJlY2VpdmUgbm90aWZpY2F0aW9uIGVtYWlscyBmb3IgcmV2aXNpb25zIHRoYXQgYWZmZWN0aW5nIHRob3NlCisgICAgICAgIGZpbGVzLiIiIgorCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGdldF9yZXBseV90b19jb21taXQoc2VsZiwgcmV2aXNpb24pOgorICAgICAgICByZXR1cm4gcmV2aXNpb24uYXV0aG9yCisKKyAgICBkZWYgZ2V0X2RlZmF1bHRfcmVmX2lnbm9yZV9yZWdleChzZWxmKToKKyAgICAgICAgIyBUaGUgY29tbWl0IG1lc3NhZ2VzIG9mIGdpdCBub3RlcyBhcmUgZXNzZW50aWFsbHkgbWVhbmluZ2xlc3MKKyAgICAgICAgIyBhbmQgImZpbGVuYW1lcyIgaW4gZ2l0IG5vdGVzIGNvbW1pdHMgYXJlIGFuIGltcGxlbWVudGF0aW9uYWwKKyAgICAgICAgIyBkZXRhaWwgdGhhdCBtaWdodCBzdXJwcmlzZSB1c2VycyBhdCBmaXJzdC4gIEFzIHN1Y2gsIHdlCisgICAgICAgICMgd291bGQgbmVlZCBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IG1ldGhvZCBmb3IgaGFuZGxpbmcgZW1haWxzCisgICAgICAgICMgb2YgZ2l0IG5vdGVzIGluIG9yZGVyIGZvciB0aGVtIHRvIGJlIG9mIGJlbmVmaXQgZm9yIHVzZXJzLAorICAgICAgICAjIHdoaWNoIHdlIHNpbXBseSBkbyBub3QgaGF2ZSByaWdodCBub3cuCisgICAgICAgIHJldHVybiAiXnJlZnMvbm90ZXMvIgorCisgICAgZGVmIGdldF9tYXhfc3ViamVjdF9sZW5ndGgoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgbWF4aW1hbCBzdWJqZWN0IGxpbmUgKGdpdCBsb2cgLS1vbmVsaW5lKSBsZW5ndGguCisgICAgICAgIExvbmdlciBzdWJqZWN0IGxpbmVzIHdpbGwgYmUgdHJ1bmNhdGVkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBmaWx0ZXJfYm9keShzZWxmLCBsaW5lcyk6CisgICAgICAgICIiIkZpbHRlciB0aGUgbGluZXMgaW50ZW5kZWQgZm9yIGFuIGVtYWlsIGJvZHkuCisKKyAgICAgICAgbGluZXMgaXMgYW4gaXRlcmFibGUgb3ZlciB0aGUgbGluZXMgdGhhdCB3b3VsZCBnbyBpbnRvIHRoZQorICAgICAgICBlbWFpbCBib2R5LiAgRmlsdGVyIGl0IChlLmcuLCBsaW1pdCB0aGUgbnVtYmVyIG9mIGxpbmVzLCB0aGUKKyAgICAgICAgbGluZSBsZW5ndGgsIGNoYXJhY3RlciBzZXQsIGV0Yy4pLCByZXR1cm5pbmcgYW5vdGhlciBpdGVyYWJsZS4KKyAgICAgICAgU2VlIEZpbHRlckxpbmVzRW52aXJvbm1lbnRNaXhpbiBhbmQgTWF4bGluZXNFbnZpcm9ubWVudE1peGluCisgICAgICAgIGZvciBjbGFzc2VzIGltcGxlbWVudGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuIiIiCisKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgbG9nX21zZyhzZWxmLCBtc2cpOgorICAgICAgICAiIiJXcml0ZSB0aGUgc3RyaW5nIG1zZyBvbiBhIGxvZyBmaWxlIG9yIG9uIHN0ZGVyci4KKworICAgICAgICBTZW5kcyB0aGUgdGV4dCB0byBzdGRlcnIgYnkgZGVmYXVsdCwgb3ZlcnJpZGUgdG8gY2hhbmdlIHRoZSBiZWhhdmlvci4iIiIKKyAgICAgICAgc2VsZi5nZXRfbG9nZ2VyKCkuaW5mbyhtc2cpCisKKyAgICBkZWYgbG9nX3dhcm5pbmcoc2VsZiwgbXNnKToKKyAgICAgICAgIiIiV3JpdGUgdGhlIHN0cmluZyBtc2cgb24gYSBsb2cgZmlsZSBvciBvbiBzdGRlcnIuCisKKyAgICAgICAgU2VuZHMgdGhlIHRleHQgdG8gc3RkZXJyIGJ5IGRlZmF1bHQsIG92ZXJyaWRlIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3IuIiIiCisgICAgICAgIHNlbGYuZ2V0X2xvZ2dlcigpLndhcm5pbmcobXNnKQorCisgICAgZGVmIGxvZ19lcnJvcihzZWxmLCBtc2cpOgorICAgICAgICAiIiJXcml0ZSB0aGUgc3RyaW5nIG1zZyBvbiBhIGxvZyBmaWxlIG9yIG9uIHN0ZGVyci4KKworICAgICAgICBTZW5kcyB0aGUgdGV4dCB0byBzdGRlcnIgYnkgZGVmYXVsdCwgb3ZlcnJpZGUgdG8gY2hhbmdlIHRoZSBiZWhhdmlvci4iIiIKKyAgICAgICAgc2VsZi5nZXRfbG9nZ2VyKCkuZXJyb3IobXNnKQorCisgICAgZGVmIGNoZWNrKHNlbGYpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgQ29uZmlnRW52aXJvbm1lbnRNaXhpbihFbnZpcm9ubWVudCk6CisgICAgIiIiQSBtaXhpbiB0aGF0IHNldHMgc2VsZi5jb25maWcgdG8gaXRzIGNvbnN0cnVjdG9yJ3MgY29uZmlnIGFyZ3VtZW50LgorCisgICAgVGhpcyBjbGFzcydzIGNvbnN0cnVjdG9yIGNvbnN1bWVzIHRoZSAiY29uZmlnIiBhcmd1bWVudC4KKworICAgIE1peGlucyB0aGF0IG5lZWQgdG8gaW5zcGVjdCB0aGUgY29uZmlnIHNob3VsZCBpbmhlcml0IGZyb20gdGhpcworICAgIGNsYXNzICgxKSB0byBtYWtlIHN1cmUgdGhhdCAiY29uZmlnIiBpcyBzdGlsbCBpbiB0aGUgY29uc3RydWN0b3IKKyAgICBhcmd1bWVudHMgd2l0aCBpdHMgb3duIGNvbnN0cnVjdG9yIHJ1bnMgYW5kL29yICgyKSB0byBiZSBzdXJlIHRoYXQKKyAgICBzZWxmLmNvbmZpZyBpcyBzZXQgYWZ0ZXIgY29uc3RydWN0aW9uLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZywgKiprdyk6CisgICAgICAgIHN1cGVyKENvbmZpZ0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKCoqa3cpCisgICAgICAgIHNlbGYuY29uZmlnID0gY29uZmlnCisKKworY2xhc3MgQ29uZmlnT3B0aW9uc0Vudmlyb25tZW50TWl4aW4oQ29uZmlnRW52aXJvbm1lbnRNaXhpbik6CisgICAgIiIiQW4gRW52aXJvbm1lbnQgdGhhdCByZWFkcyBtb3N0IG9mIGl0cyBpbmZvcm1hdGlvbiBmcm9tICJnaXQgY29uZmlnIi4iIiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZm9yYmlkX2ZpZWxkX3ZhbHVlcyhuYW1lLCB2YWx1ZSwgZm9yYmlkZGVuKToKKyAgICAgICAgZm9yIGZvcmJpZGRlbl92YWwgaW4gZm9yYmlkZGVuOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmUgYW5kIHZhbHVlLmxvd2VyKCkgPT0gZm9yYmlkZGVuOgorICAgICAgICAgICAgICAgIHJhaXNlIENvbmZpZ3VyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICciJXMiIGlzIG5vdCBhbiBhbGxvd2VkIHNldHRpbmcgZm9yICVzJyAlICh2YWx1ZSwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZywgKiprdyk6CisgICAgICAgIHN1cGVyKENvbmZpZ09wdGlvbnNFbnZpcm9ubWVudE1peGluLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIGNvbmZpZz1jb25maWcsICoqa3cKKyAgICAgICAgICAgICkKKworICAgICAgICBmb3IgdmFyLCBjZmcgaW4gKAorICAgICAgICAgICAgICAgICgnYW5ub3VuY2Vfc2hvd19zaG9ydGxvZycsICdhbm5vdW5jZXNob3J0bG9nJyksCisgICAgICAgICAgICAgICAgKCdyZWZjaGFuZ2Vfc2hvd2dyYXBoJywgJ3JlZmNoYW5nZVNob3dHcmFwaCcpLAorICAgICAgICAgICAgICAgICgncmVmY2hhbmdlX3Nob3dsb2cnLCAncmVmY2hhbmdlc2hvd2xvZycpLAorICAgICAgICAgICAgICAgICgncXVpZXQnLCAncXVpZXQnKSwKKyAgICAgICAgICAgICAgICAoJ3N0ZG91dCcsICdzdGRvdXQnKSwKKyAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgdmFsID0gY29uZmlnLmdldF9ib29sKGNmZykKKyAgICAgICAgICAgIGlmIHZhbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIHZhciwgdmFsKQorCisgICAgICAgIGNvbW1pdF9lbWFpbF9mb3JtYXQgPSBjb25maWcuZ2V0KCdjb21taXRFbWFpbEZvcm1hdCcpCisgICAgICAgIGlmIGNvbW1pdF9lbWFpbF9mb3JtYXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBjb21taXRfZW1haWxfZm9ybWF0ICE9ICJodG1sIiBhbmQgY29tbWl0X2VtYWlsX2Zvcm1hdCAhPSAidGV4dCI6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dfd2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgJyoqKiBVbmtub3duIHZhbHVlIGZvciBtdWx0aW1haWxob29rLmNvbW1pdEVtYWlsRm9ybWF0OiAlc1xuJyAlCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdF9lbWFpbF9mb3JtYXQgKworICAgICAgICAgICAgICAgICAgICAnKioqIEV4cGVjdGVkIGVpdGhlciAidGV4dCIgb3IgImh0bWwiLiAgSWdub3JpbmcuXG4nCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5jb21taXRfZW1haWxfZm9ybWF0ID0gY29tbWl0X2VtYWlsX2Zvcm1hdAorCisgICAgICAgIGh0bWxfaW5faW50cm8gPSBjb25maWcuZ2V0X2Jvb2woJ2h0bWxJbkludHJvJykKKyAgICAgICAgaWYgaHRtbF9pbl9pbnRybyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuaHRtbF9pbl9pbnRybyA9IGh0bWxfaW5faW50cm8KKworICAgICAgICBodG1sX2luX2Zvb3RlciA9IGNvbmZpZy5nZXRfYm9vbCgnaHRtbEluRm9vdGVyJykKKyAgICAgICAgaWYgaHRtbF9pbl9mb290ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmh0bWxfaW5fZm9vdGVyID0gaHRtbF9pbl9mb290ZXIKKworICAgICAgICBzZWxmLmNvbW1pdEJyb3dzZVVSTCA9IGNvbmZpZy5nZXQoJ2NvbW1pdEJyb3dzZVVSTCcpCisKKyAgICAgICAgc2VsZi5leGNsdWRlbWVyZ2VyZXZpc2lvbnMgPSBjb25maWcuZ2V0KCdleGNsdWRlTWVyZ2VSZXZpc2lvbnMnKQorCisgICAgICAgIG1heGNvbW1pdGVtYWlscyA9IGNvbmZpZy5nZXQoJ21heGNvbW1pdGVtYWlscycpCisgICAgICAgIGlmIG1heGNvbW1pdGVtYWlscyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLm1heGNvbW1pdGVtYWlscyA9IGludChtYXhjb21taXRlbWFpbHMpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ193YXJuaW5nKAorICAgICAgICAgICAgICAgICAgICAnKioqIE1hbGZvcm1lZCB2YWx1ZSBmb3IgbXVsdGltYWlsaG9vay5tYXhDb21taXRFbWFpbHM6ICVzXG4nCisgICAgICAgICAgICAgICAgICAgICUgbWF4Y29tbWl0ZW1haWxzICsKKyAgICAgICAgICAgICAgICAgICAgJyoqKiBFeHBlY3RlZCBhIG51bWJlci4gIElnbm9yaW5nLlxuJworICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgZGlmZm9wdHMgPSBjb25maWcuZ2V0KCdkaWZmb3B0cycpCisgICAgICAgIGlmIGRpZmZvcHRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kaWZmb3B0cyA9IHNobGV4LnNwbGl0KGRpZmZvcHRzKQorCisgICAgICAgIGdyYXBob3B0cyA9IGNvbmZpZy5nZXQoJ2dyYXBoT3B0cycpCisgICAgICAgIGlmIGdyYXBob3B0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZ3JhcGhvcHRzID0gc2hsZXguc3BsaXQoZ3JhcGhvcHRzKQorCisgICAgICAgIGxvZ29wdHMgPSBjb25maWcuZ2V0KCdsb2dvcHRzJykKKyAgICAgICAgaWYgbG9nb3B0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYubG9nb3B0cyA9IHNobGV4LnNwbGl0KGxvZ29wdHMpCisKKyAgICAgICAgY29tbWl0bG9nb3B0cyA9IGNvbmZpZy5nZXQoJ2NvbW1pdGxvZ29wdHMnKQorICAgICAgICBpZiBjb21taXRsb2dvcHRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5jb21taXRsb2dvcHRzID0gc2hsZXguc3BsaXQoY29tbWl0bG9nb3B0cykKKworICAgICAgICBkYXRlX3N1YnN0aXR1dGUgPSBjb25maWcuZ2V0KCdkYXRlU3Vic3RpdHV0ZScpCisgICAgICAgIGlmIGRhdGVfc3Vic3RpdHV0ZSA9PSAnbm9uZSc6CisgICAgICAgICAgICBzZWxmLmRhdGVfc3Vic3RpdHV0ZSA9IE5vbmUKKyAgICAgICAgZWxpZiBkYXRlX3N1YnN0aXR1dGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRhdGVfc3Vic3RpdHV0ZSA9IGRhdGVfc3Vic3RpdHV0ZQorCisgICAgICAgIHJlcGx5X3RvID0gY29uZmlnLmdldCgncmVwbHlUbycpCisgICAgICAgIHNlbGYuX19yZXBseV90b19yZWZjaGFuZ2UgPSBjb25maWcuZ2V0KCdyZXBseVRvUmVmY2hhbmdlJywgZGVmYXVsdD1yZXBseV90bykKKyAgICAgICAgc2VsZi5mb3JiaWRfZmllbGRfdmFsdWVzKCdyZXBseVRvUmVmY2hhbmdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19yZXBseV90b19yZWZjaGFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2F1dGhvciddKQorICAgICAgICBzZWxmLl9fcmVwbHlfdG9fY29tbWl0ID0gY29uZmlnLmdldCgncmVwbHlUb0NvbW1pdCcsIGRlZmF1bHQ9cmVwbHlfdG8pCisKKyAgICAgICAgc2VsZi5mcm9tX3JlZmNoYW5nZSA9IGNvbmZpZy5nZXQoJ2Zyb21SZWZjaGFuZ2UnKQorICAgICAgICBzZWxmLmZvcmJpZF9maWVsZF92YWx1ZXMoJ2Zyb21SZWZjaGFuZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcm9tX3JlZmNoYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnYXV0aG9yJywgJ25vbmUnXSkKKyAgICAgICAgc2VsZi5mcm9tX2NvbW1pdCA9IGNvbmZpZy5nZXQoJ2Zyb21Db21taXQnKQorICAgICAgICBzZWxmLmZvcmJpZF9maWVsZF92YWx1ZXMoJ2Zyb21Db21taXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcm9tX2NvbW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnbm9uZSddKQorCisgICAgICAgIGNvbWJpbmUgPSBjb25maWcuZ2V0X2Jvb2woJ2NvbWJpbmVXaGVuU2luZ2xlQ29tbWl0JykKKyAgICAgICAgaWYgY29tYmluZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuY29tYmluZV93aGVuX3NpbmdsZV9jb21taXQgPSBjb21iaW5lCisKKyAgICAgICAgc2VsZi5sb2dfZmlsZSA9IGNvbmZpZy5nZXQoJ2xvZ0ZpbGUnLCBkZWZhdWx0PU5vbmUpCisgICAgICAgIHNlbGYuZXJyb3JfbG9nX2ZpbGUgPSBjb25maWcuZ2V0KCdlcnJvckxvZ0ZpbGUnLCBkZWZhdWx0PU5vbmUpCisgICAgICAgIHNlbGYuZGVidWdfbG9nX2ZpbGUgPSBjb25maWcuZ2V0KCdkZWJ1Z0xvZ0ZpbGUnLCBkZWZhdWx0PU5vbmUpCisgICAgICAgIGlmIGNvbmZpZy5nZXRfYm9vbCgnVmVyYm9zZScsIGRlZmF1bHQ9RmFsc2UpOgorICAgICAgICAgICAgc2VsZi52ZXJib3NlID0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi52ZXJib3NlID0gMAorCisgICAgZGVmIGdldF9hZG1pbmlzdHJhdG9yKHNlbGYpOgorICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgc2VsZi5jb25maWcuZ2V0KCdhZG1pbmlzdHJhdG9yJykgb3IKKyAgICAgICAgICAgIHNlbGYuZ2V0X3NlbmRlcigpIG9yCisgICAgICAgICAgICBzdXBlcihDb25maWdPcHRpb25zRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuZ2V0X2FkbWluaXN0cmF0b3IoKQorICAgICAgICAgICAgKQorCisgICAgZGVmIGdldF9yZXBvX3Nob3J0bmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgIHNlbGYuY29uZmlnLmdldCgncmVwb25hbWUnKSBvcgorICAgICAgICAgICAgc3VwZXIoQ29uZmlnT3B0aW9uc0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLmdldF9yZXBvX3Nob3J0bmFtZSgpCisgICAgICAgICAgICApCisKKyAgICBkZWYgZ2V0X2VtYWlscHJlZml4KHNlbGYpOgorICAgICAgICBlbWFpbHByZWZpeCA9IHNlbGYuY29uZmlnLmdldCgnZW1haWxwcmVmaXgnKQorICAgICAgICBpZiBlbWFpbHByZWZpeCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGVtYWlscHJlZml4ID0gZW1haWxwcmVmaXguc3RyaXAoKQorICAgICAgICAgICAgaWYgZW1haWxwcmVmaXg6CisgICAgICAgICAgICAgICAgZW1haWxwcmVmaXggKz0gJyAnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbWFpbHByZWZpeCA9ICdbJShyZXBvX3Nob3J0bmFtZSlzXSAnCisgICAgICAgIHNob3J0X25hbWUgPSBzZWxmLmdldF9yZXBvX3Nob3J0bmFtZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBlbWFpbHByZWZpeCAlIHsncmVwb19zaG9ydG5hbWUnOiBzaG9ydF9uYW1lfQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmdldF9sb2dnZXIoKS5lcnJvcigKKyAgICAgICAgICAgICAgICAnKioqIEludmFsaWQgbXVsdGltYWlsaG9vay5lbWFpbFByZWZpeDogJXNcbicgJSBlbWFpbHByZWZpeCArCisgICAgICAgICAgICAgICAgJyoqKiAlc1xuJyAlIHN5cy5leGNfaW5mbygpWzFdICsKKyAgICAgICAgICAgICAgICAiKioqIE9ubHkgdGhlICclKHJlcG9fc2hvcnRuYW1lKXMnIHBsYWNlaG9sZGVyIGlzIGFsbG93ZWRcbiIKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICByYWlzZSBDb25maWd1cmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICciJXMiIGlzIG5vdCBhbiBhbGxvd2VkIHNldHRpbmcgZm9yIGVtYWlsUHJlZml4JyAlIGVtYWlscHJlZml4CisgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIGdldF9zZW5kZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmNvbmZpZy5nZXQoJ2VudmVsb3Blc2VuZGVyJykKKworICAgIGRlZiBwcm9jZXNzX2FkZHIoc2VsZiwgYWRkciwgY2hhbmdlKToKKyAgICAgICAgaWYgYWRkci5sb3dlcigpID09ICdhdXRob3InOgorICAgICAgICAgICAgaWYgaGFzYXR0cihjaGFuZ2UsICdhdXRob3InKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlLmF1dGhvcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbGlmIGFkZHIubG93ZXIoKSA9PSAncHVzaGVyJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wdXNoZXJfZW1haWwoKQorICAgICAgICBlbGlmIGFkZHIubG93ZXIoKSA9PSAnbm9uZSc6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGFkZHIKKworICAgIGRlZiBnZXRfZnJvbWFkZHIoc2VsZiwgY2hhbmdlPU5vbmUpOgorICAgICAgICBmcm9tYWRkciA9IHNlbGYuY29uZmlnLmdldCgnZnJvbScpCisgICAgICAgIGlmIGNoYW5nZToKKyAgICAgICAgICAgIHNwZWNpZmljX2Zyb21hZGRyID0gY2hhbmdlLmdldF9zcGVjaWZpY19mcm9tYWRkcigpCisgICAgICAgICAgICBpZiBzcGVjaWZpY19mcm9tYWRkcjoKKyAgICAgICAgICAgICAgICBmcm9tYWRkciA9IHNwZWNpZmljX2Zyb21hZGRyCisgICAgICAgIGlmIGZyb21hZGRyOgorICAgICAgICAgICAgZnJvbWFkZHIgPSBzZWxmLnByb2Nlc3NfYWRkcihmcm9tYWRkciwgY2hhbmdlKQorICAgICAgICBpZiBmcm9tYWRkcjoKKyAgICAgICAgICAgIHJldHVybiBmcm9tYWRkcgorICAgICAgICByZXR1cm4gc3VwZXIoQ29uZmlnT3B0aW9uc0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLmdldF9mcm9tYWRkcihjaGFuZ2UpCisKKyAgICBkZWYgZ2V0X3JlcGx5X3RvX3JlZmNoYW5nZShzZWxmLCByZWZjaGFuZ2UpOgorICAgICAgICBpZiBzZWxmLl9fcmVwbHlfdG9fcmVmY2hhbmdlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoQ29uZmlnT3B0aW9uc0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLmdldF9yZXBseV90b19yZWZjaGFuZ2UocmVmY2hhbmdlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19hZGRyKHNlbGYuX19yZXBseV90b19yZWZjaGFuZ2UsIHJlZmNoYW5nZSkKKworICAgIGRlZiBnZXRfcmVwbHlfdG9fY29tbWl0KHNlbGYsIHJldmlzaW9uKToKKyAgICAgICAgaWYgc2VsZi5fX3JlcGx5X3RvX2NvbW1pdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKENvbmZpZ09wdGlvbnNFbnZpcm9ubWVudE1peGluLCBzZWxmKS5nZXRfcmVwbHlfdG9fY29tbWl0KHJldmlzaW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19hZGRyKHNlbGYuX19yZXBseV90b19jb21taXQsIHJldmlzaW9uKQorCisgICAgZGVmIGdldF9zY2FuY29tbWl0Zm9yY2Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmNvbmZpZy5nZXQoJ3NjYW5jb21taXRmb3JjYycpCisKKworY2xhc3MgRmlsdGVyTGluZXNFbnZpcm9ubWVudE1peGluKEVudmlyb25tZW50KToKKyAgICAiIiJIYW5kbGUgZW5jb2RpbmcgYW5kIG1heGltdW0gbGluZSBsZW5ndGggb2YgYm9keSBsaW5lcy4KKworICAgICAgICBlbWFpbF9tYXhfbGluZV9sZW5ndGggKGludCBvciBOb25lKQorCisgICAgICAgICAgICBUaGUgbWF4aW11bSBsZW5ndGggb2YgYW55IHNpbmdsZSBsaW5lIGluIHRoZSBlbWFpbCBib2R5LgorICAgICAgICAgICAgTG9uZ2VyIGxpbmVzIGFyZSB0cnVuY2F0ZWQgYXQgdGhhdCBsZW5ndGggd2l0aCAnIFsuLi5dJworICAgICAgICAgICAgYXBwZW5kZWQuCisKKyAgICAgICAgc3RyaWN0X3V0ZjggKGJvb2wpCisKKyAgICAgICAgICAgIElmIHRoaXMgZmllbGQgaXMgc2V0IHRvIFRydWUsIHRoZW4gdGhlIGVtYWlsIGJvZHkgdGV4dCBpcworICAgICAgICAgICAgZXhwZWN0ZWQgdG8gYmUgVVRGLTguICBBbnkgaW52YWxpZCBjaGFyYWN0ZXJzIGFyZQorICAgICAgICAgICAgY29udmVydGVkIHRvIFUrRkZGRCwgdGhlIFVuaWNvZGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyCisgICAgICAgICAgICAoZW5jb2RlZCBhcyBVVEYtOCwgb2YgY291cnNlKS4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmljdF91dGY4PVRydWUsCisgICAgICAgICAgICAgICAgIGVtYWlsX21heF9saW5lX2xlbmd0aD01MDAsIG1heF9zdWJqZWN0X2xlbmd0aD01MDAsCisgICAgICAgICAgICAgICAgICoqa3cpOgorICAgICAgICBzdXBlcihGaWx0ZXJMaW5lc0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKCoqa3cpCisgICAgICAgIHNlbGYuX19zdHJpY3RfdXRmOCA9IHN0cmljdF91dGY4CisgICAgICAgIHNlbGYuX19lbWFpbF9tYXhfbGluZV9sZW5ndGggPSBlbWFpbF9tYXhfbGluZV9sZW5ndGgKKyAgICAgICAgc2VsZi5fX21heF9zdWJqZWN0X2xlbmd0aCA9IG1heF9zdWJqZWN0X2xlbmd0aAorCisgICAgZGVmIGZpbHRlcl9ib2R5KHNlbGYsIGxpbmVzKToKKyAgICAgICAgbGluZXMgPSBzdXBlcihGaWx0ZXJMaW5lc0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLmZpbHRlcl9ib2R5KGxpbmVzKQorICAgICAgICBpZiBzZWxmLl9fc3RyaWN0X3V0Zjg6CisgICAgICAgICAgICBpZiBub3QgUFlUSE9OMzoKKyAgICAgICAgICAgICAgICBsaW5lcyA9IChsaW5lLmRlY29kZShFTkNPRElORywgJ3JlcGxhY2UnKSBmb3IgbGluZSBpbiBsaW5lcykKKyAgICAgICAgICAgICMgTGltaXQgdGhlIGxpbmUgbGVuZ3RoIGluIFVuaWNvZGUtc3BhY2UgdG8gYXZvaWQKKyAgICAgICAgICAgICMgc3BsaXR0aW5nIGNoYXJhY3RlcnM6CisgICAgICAgICAgICBpZiBzZWxmLl9fZW1haWxfbWF4X2xpbmVfbGVuZ3RoID4gMDoKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGxpbWl0X2xpbmVsZW5ndGgobGluZXMsIHNlbGYuX19lbWFpbF9tYXhfbGluZV9sZW5ndGgpCisgICAgICAgICAgICBpZiBub3QgUFlUSE9OMzoKKyAgICAgICAgICAgICAgICBsaW5lcyA9IChsaW5lLmVuY29kZShFTkNPRElORywgJ3JlcGxhY2UnKSBmb3IgbGluZSBpbiBsaW5lcykKKyAgICAgICAgZWxpZiBzZWxmLl9fZW1haWxfbWF4X2xpbmVfbGVuZ3RoOgorICAgICAgICAgICAgbGluZXMgPSBsaW1pdF9saW5lbGVuZ3RoKGxpbmVzLCBzZWxmLl9fZW1haWxfbWF4X2xpbmVfbGVuZ3RoKQorCisgICAgICAgIHJldHVybiBsaW5lcworCisgICAgZGVmIGdldF9tYXhfc3ViamVjdF9sZW5ndGgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fbWF4X3N1YmplY3RfbGVuZ3RoCisKKworY2xhc3MgQ29uZmlnRmlsdGVyTGluZXNFbnZpcm9ubWVudE1peGluKAorICAgICAgICBDb25maWdFbnZpcm9ubWVudE1peGluLAorICAgICAgICBGaWx0ZXJMaW5lc0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgICk6CisgICAgIiIiSGFuZGxlIGVuY29kaW5nIGFuZCBtYXhpbXVtIGxpbmUgbGVuZ3RoIGJhc2VkIG9uIGNvbmZpZy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcsICoqa3cpOgorICAgICAgICBzdHJpY3RfdXRmOCA9IGNvbmZpZy5nZXRfYm9vbCgnZW1haWxzdHJpY3R1dGY4JywgZGVmYXVsdD1Ob25lKQorICAgICAgICBpZiBzdHJpY3RfdXRmOCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGt3WydzdHJpY3RfdXRmOCddID0gc3RyaWN0X3V0ZjgKKworICAgICAgICBlbWFpbF9tYXhfbGluZV9sZW5ndGggPSBjb25maWcuZ2V0KCdlbWFpbG1heGxpbmVsZW5ndGgnKQorICAgICAgICBpZiBlbWFpbF9tYXhfbGluZV9sZW5ndGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBrd1snZW1haWxfbWF4X2xpbmVfbGVuZ3RoJ10gPSBpbnQoZW1haWxfbWF4X2xpbmVfbGVuZ3RoKQorCisgICAgICAgIG1heF9zdWJqZWN0X2xlbmd0aCA9IGNvbmZpZy5nZXQoJ3N1YmplY3RNYXhMZW5ndGgnLCBkZWZhdWx0PWVtYWlsX21heF9saW5lX2xlbmd0aCkKKyAgICAgICAgaWYgbWF4X3N1YmplY3RfbGVuZ3RoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAga3dbJ21heF9zdWJqZWN0X2xlbmd0aCddID0gaW50KG1heF9zdWJqZWN0X2xlbmd0aCkKKworICAgICAgICBzdXBlcihDb25maWdGaWx0ZXJMaW5lc0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgY29uZmlnPWNvbmZpZywgKiprdworICAgICAgICAgICAgKQorCisKK2NsYXNzIE1heGxpbmVzRW52aXJvbm1lbnRNaXhpbihFbnZpcm9ubWVudCk6CisgICAgIiIiTGltaXQgdGhlIGVtYWlsIGJvZHkgdG8gYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGxpbmVzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVtYWlsbWF4bGluZXMsICoqa3cpOgorICAgICAgICBzdXBlcihNYXhsaW5lc0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKCoqa3cpCisgICAgICAgIHNlbGYuX19lbWFpbG1heGxpbmVzID0gZW1haWxtYXhsaW5lcworCisgICAgZGVmIGZpbHRlcl9ib2R5KHNlbGYsIGxpbmVzKToKKyAgICAgICAgbGluZXMgPSBzdXBlcihNYXhsaW5lc0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLmZpbHRlcl9ib2R5KGxpbmVzKQorICAgICAgICBpZiBzZWxmLl9fZW1haWxtYXhsaW5lcyA+IDA6CisgICAgICAgICAgICBsaW5lcyA9IGxpbWl0X2xpbmVzKGxpbmVzLCBzZWxmLl9fZW1haWxtYXhsaW5lcykKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKworY2xhc3MgQ29uZmlnTWF4bGluZXNFbnZpcm9ubWVudE1peGluKAorICAgICAgICBDb25maWdFbnZpcm9ubWVudE1peGluLAorICAgICAgICBNYXhsaW5lc0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgICk6CisgICAgIiIiTGltaXQgdGhlIGVtYWlsIGJvZHkgdG8gdGhlIG51bWJlciBvZiBsaW5lcyBzcGVjaWZpZWQgaW4gY29uZmlnLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZywgKiprdyk6CisgICAgICAgIGVtYWlsbWF4bGluZXMgPSBpbnQoY29uZmlnLmdldCgnZW1haWxtYXhsaW5lcycsIGRlZmF1bHQ9JzAnKSkKKyAgICAgICAgc3VwZXIoQ29uZmlnTWF4bGluZXNFbnZpcm9ubWVudE1peGluLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIGNvbmZpZz1jb25maWcsCisgICAgICAgICAgICBlbWFpbG1heGxpbmVzPWVtYWlsbWF4bGluZXMsCisgICAgICAgICAgICAqKmt3CisgICAgICAgICAgICApCisKKworY2xhc3MgRlFETkVudmlyb25tZW50TWl4aW4oRW52aXJvbm1lbnQpOgorICAgICIiIkEgbWl4aW4gdGhhdCBzZXRzIHRoZSBob3N0J3MgRlFETiB0byBpdHMgY29uc3RydWN0b3IgYXJndW1lbnQuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnFkbiwgKiprdyk6CisgICAgICAgIHN1cGVyKEZRRE5FbnZpcm9ubWVudE1peGluLCBzZWxmKS5fX2luaXRfXygqKmt3KQorICAgICAgICBzZWxmLkNPTVBVVEVEX0tFWVMgKz0gWydmcWRuJ10KKyAgICAgICAgc2VsZi5fX2ZxZG4gPSBmcWRuCisKKyAgICBkZWYgZ2V0X2ZxZG4oc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgZnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lIGZvciB0aGlzIGhvc3QuCisKKyAgICAgICAgUmV0dXJuIE5vbmUgaWYgaXQgaXMgdW5hdmFpbGFibGUgb3IgdW53YW50ZWQuIiIiCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX19mcWRuCisKKworY2xhc3MgQ29uZmlnRlFETkVudmlyb25tZW50TWl4aW4oCisgICAgICAgIENvbmZpZ0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgIEZRRE5FbnZpcm9ubWVudE1peGluLAorICAgICAgICApOgorICAgICIiIlJlYWQgdGhlIEZRRE4gZnJvbSB0aGUgY29uZmlnLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZywgKiprdyk6CisgICAgICAgIGZxZG4gPSBjb25maWcuZ2V0KCdmcWRuJykKKyAgICAgICAgc3VwZXIoQ29uZmlnRlFETkVudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgY29uZmlnPWNvbmZpZywKKyAgICAgICAgICAgIGZxZG49ZnFkbiwKKyAgICAgICAgICAgICoqa3cKKyAgICAgICAgICAgICkKKworCitjbGFzcyBDb21wdXRlRlFETkVudmlyb25tZW50TWl4aW4oRlFETkVudmlyb25tZW50TWl4aW4pOgorICAgICIiIkdldCB0aGUgRlFETiBieSBjYWxsaW5nIHNvY2tldC5nZXRmcWRuKCkuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiprdyk6CisgICAgICAgIHN1cGVyKENvbXB1dGVGUURORW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBmcWRuPXNvY2tldC5nZXRmcWRuKCksCisgICAgICAgICAgICAqKmt3CisgICAgICAgICAgICApCisKKworY2xhc3MgUHVzaGVyRG9tYWluRW52aXJvbm1lbnRNaXhpbihDb25maWdFbnZpcm9ubWVudE1peGluKToKKyAgICAiIiJEZWR1Y2UgcHVzaGVyX2VtYWlsIGZyb20gcHVzaGVyIGJ5IGFwcGVuZGluZyBhbiBlbWFpbGRvbWFpbi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3KToKKyAgICAgICAgc3VwZXIoUHVzaGVyRG9tYWluRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oKiprdykKKyAgICAgICAgc2VsZi5fX2VtYWlsZG9tYWluID0gc2VsZi5jb25maWcuZ2V0KCdlbWFpbGRvbWFpbicpCisKKyAgICBkZWYgZ2V0X3B1c2hlcl9lbWFpbChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fX2VtYWlsZG9tYWluOgorICAgICAgICAgICAgIyBEZXJpdmUgdGhlIHB1c2hlcidzIGZ1bGwgZW1haWwgYWRkcmVzcyBpbiB0aGUgZGVmYXVsdCB3YXk6CisgICAgICAgICAgICByZXR1cm4gJyVzQCVzJyAlIChzZWxmLmdldF9wdXNoZXIoKSwgc2VsZi5fX2VtYWlsZG9tYWluKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFB1c2hlckRvbWFpbkVudmlyb25tZW50TWl4aW4sIHNlbGYpLmdldF9wdXNoZXJfZW1haWwoKQorCisKK2NsYXNzIFN0YXRpY1JlY2lwaWVudHNFbnZpcm9ubWVudE1peGluKEVudmlyb25tZW50KToKKyAgICAiIiJTZXQgcmVjaXBpZW50cyBzdGF0aWNhbGx5IGJhc2VkIG9uIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuIiIiCisKKyAgICBkZWYgX19pbml0X18oCisgICAgICAgICAgICBzZWxmLAorICAgICAgICAgICAgcmVmY2hhbmdlX3JlY2lwaWVudHMsIGFubm91bmNlX3JlY2lwaWVudHMsIHJldmlzaW9uX3JlY2lwaWVudHMsIHNjYW5jb21taXRmb3JjYywKKyAgICAgICAgICAgICoqa3cKKyAgICAgICAgICAgICk6CisgICAgICAgIHN1cGVyKFN0YXRpY1JlY2lwaWVudHNFbnZpcm9ubWVudE1peGluLCBzZWxmKS5fX2luaXRfXygqKmt3KQorCisgICAgICAgICMgVGhlIHJlY2lwaWVudHMgZm9yIHZhcmlvdXMgdHlwZXMgb2Ygbm90aWZpY2F0aW9uIGVtYWlscywgYXMKKyAgICAgICAgIyBSRkMgMjgyMiBlbWFpbCBhZGRyZXNzZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcyAob3IgdGhlIGVtcHR5CisgICAgICAgICMgc3RyaW5nIGlmIG5vIHJlY2lwaWVudHMgYXJlIGNvbmZpZ3VyZWQpLiAgQWx0aG91Z2ggdGhlcmUgaXMKKyAgICAgICAgIyBhIG1lY2hhbmlzbSB0byBjaG9vc2UgdGhlIHJlY2lwaWVudCBsaXN0cyBiYXNlZCBvbiBvbiB0aGUKKyAgICAgICAgIyBhY3R1YWwgKmNvbnRlbnRzKiBvZiB0aGUgY2hhbmdlIGJlaW5nIHJlcG9ydGVkLCB3ZSBvbmx5CisgICAgICAgICMgY2hvb3NlIGJhc2VkIG9uIHRoZSAqdHlwZSogb2YgdGhlIGNoYW5nZS4gIFRoZXJlZm9yZSB3ZSBjYW4KKyAgICAgICAgIyBjb21wdXRlIHRoZW0gb25jZSBhbmQgZm9yIGFsbDoKKyAgICAgICAgc2VsZi5fX3JlZmNoYW5nZV9yZWNpcGllbnRzID0gcmVmY2hhbmdlX3JlY2lwaWVudHMKKyAgICAgICAgc2VsZi5fX2Fubm91bmNlX3JlY2lwaWVudHMgPSBhbm5vdW5jZV9yZWNpcGllbnRzCisgICAgICAgIHNlbGYuX19yZXZpc2lvbl9yZWNpcGllbnRzID0gcmV2aXNpb25fcmVjaXBpZW50cworCisgICAgZGVmIGNoZWNrKHNlbGYpOgorICAgICAgICBpZiBub3QgKHNlbGYuZ2V0X3JlZmNoYW5nZV9yZWNpcGllbnRzKE5vbmUpIG9yCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfYW5ub3VuY2VfcmVjaXBpZW50cyhOb25lKSBvcgorICAgICAgICAgICAgICAgIHNlbGYuZ2V0X3JldmlzaW9uX3JlY2lwaWVudHMoTm9uZSkgb3IKKyAgICAgICAgICAgICAgICBzZWxmLmdldF9zY2FuY29tbWl0Zm9yY2MoKSk6CisgICAgICAgICAgICByYWlzZSBDb25maWd1cmF0aW9uRXhjZXB0aW9uKCdObyBlbWFpbCByZWNpcGllbnRzIGNvbmZpZ3VyZWQhJykKKyAgICAgICAgc3VwZXIoU3RhdGljUmVjaXBpZW50c0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLmNoZWNrKCkKKworICAgIGRlZiBnZXRfcmVmY2hhbmdlX3JlY2lwaWVudHMoc2VsZiwgcmVmY2hhbmdlKToKKyAgICAgICAgaWYgc2VsZi5fX3JlZmNoYW5nZV9yZWNpcGllbnRzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoU3RhdGljUmVjaXBpZW50c0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikuZ2V0X3JlZmNoYW5nZV9yZWNpcGllbnRzKHJlZmNoYW5nZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX19yZWZjaGFuZ2VfcmVjaXBpZW50cworCisgICAgZGVmIGdldF9hbm5vdW5jZV9yZWNpcGllbnRzKHNlbGYsIGFubm90YXRlZF90YWdfY2hhbmdlKToKKyAgICAgICAgaWYgc2VsZi5fX2Fubm91bmNlX3JlY2lwaWVudHMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihTdGF0aWNSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmKS5nZXRfcmVmY2hhbmdlX3JlY2lwaWVudHMoYW5ub3RhdGVkX3RhZ19jaGFuZ2UpCisgICAgICAgIHJldHVybiBzZWxmLl9fYW5ub3VuY2VfcmVjaXBpZW50cworCisgICAgZGVmIGdldF9yZXZpc2lvbl9yZWNpcGllbnRzKHNlbGYsIHJldmlzaW9uKToKKyAgICAgICAgaWYgc2VsZi5fX3JldmlzaW9uX3JlY2lwaWVudHMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihTdGF0aWNSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmKS5nZXRfcmVmY2hhbmdlX3JlY2lwaWVudHMocmV2aXNpb24pCisgICAgICAgIHJldHVybiBzZWxmLl9fcmV2aXNpb25fcmVjaXBpZW50cworCisKK2NsYXNzIENMSVJlY2lwaWVudHNFbnZpcm9ubWVudE1peGluKEVudmlyb25tZW50KToKKyAgICAiIiJNaXhpbiBzdG9yaW5nIHJlY2lwaWVudHMgaW5mb3JtYXRpb24gY29taW5nIGZyb20gdGhlCisgICAgY29tbWFuZC1saW5lLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaV9yZWNpcGllbnRzPU5vbmUsICoqa3cpOgorICAgICAgICBzdXBlcihDTElSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oKiprdykKKyAgICAgICAgc2VsZi5fX2NsaV9yZWNpcGllbnRzID0gY2xpX3JlY2lwaWVudHMKKworICAgIGRlZiBnZXRfcmVmY2hhbmdlX3JlY2lwaWVudHMoc2VsZiwgcmVmY2hhbmdlKToKKyAgICAgICAgaWYgc2VsZi5fX2NsaV9yZWNpcGllbnRzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoQ0xJUmVjaXBpZW50c0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikuZ2V0X3JlZmNoYW5nZV9yZWNpcGllbnRzKHJlZmNoYW5nZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGlfcmVjaXBpZW50cworCisgICAgZGVmIGdldF9hbm5vdW5jZV9yZWNpcGllbnRzKHNlbGYsIGFubm90YXRlZF90YWdfY2hhbmdlKToKKyAgICAgICAgaWYgc2VsZi5fX2NsaV9yZWNpcGllbnRzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoQ0xJUmVjaXBpZW50c0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikuZ2V0X2Fubm91bmNlX3JlY2lwaWVudHMoYW5ub3RhdGVkX3RhZ19jaGFuZ2UpCisgICAgICAgIHJldHVybiBzZWxmLl9fY2xpX3JlY2lwaWVudHMKKworICAgIGRlZiBnZXRfcmV2aXNpb25fcmVjaXBpZW50cyhzZWxmLCByZXZpc2lvbik6CisgICAgICAgIGlmIHNlbGYuX19jbGlfcmVjaXBpZW50cyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKENMSVJlY2lwaWVudHNFbnZpcm9ubWVudE1peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYpLmdldF9yZXZpc2lvbl9yZWNpcGllbnRzKHJldmlzaW9uKQorICAgICAgICByZXR1cm4gc2VsZi5fX2NsaV9yZWNpcGllbnRzCisKKworY2xhc3MgQ29uZmlnUmVjaXBpZW50c0Vudmlyb25tZW50TWl4aW4oCisgICAgICAgIENvbmZpZ0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgIFN0YXRpY1JlY2lwaWVudHNFbnZpcm9ubWVudE1peGluCisgICAgICAgICk6CisgICAgIiIiRGV0ZXJtaW5lIHJlY2lwaWVudHMgc3RhdGljYWxseSBiYXNlZCBvbiBjb25maWcuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnLCAqKmt3KToKKyAgICAgICAgc3VwZXIoQ29uZmlnUmVjaXBpZW50c0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgY29uZmlnPWNvbmZpZywKKyAgICAgICAgICAgIHJlZmNoYW5nZV9yZWNpcGllbnRzPXNlbGYuX2dldF9yZWNpcGllbnRzKAorICAgICAgICAgICAgICAgIGNvbmZpZywgJ3JlZmNoYW5nZWxpc3QnLCAnbWFpbGluZ2xpc3QnLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICBhbm5vdW5jZV9yZWNpcGllbnRzPXNlbGYuX2dldF9yZWNpcGllbnRzKAorICAgICAgICAgICAgICAgIGNvbmZpZywgJ2Fubm91bmNlbGlzdCcsICdyZWZjaGFuZ2VsaXN0JywgJ21haWxpbmdsaXN0JywKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgcmV2aXNpb25fcmVjaXBpZW50cz1zZWxmLl9nZXRfcmVjaXBpZW50cygKKyAgICAgICAgICAgICAgICBjb25maWcsICdjb21taXRsaXN0JywgJ21haWxpbmdsaXN0JywKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgc2NhbmNvbW1pdGZvcmNjPWNvbmZpZy5nZXQoJ3NjYW5jb21taXRmb3JjYycpLAorICAgICAgICAgICAgKiprdworICAgICAgICAgICAgKQorCisgICAgZGVmIF9nZXRfcmVjaXBpZW50cyhzZWxmLCBjb25maWcsICpuYW1lcyk6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVjaXBpZW50cyBmb3IgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgbWVzc2FnZS4KKworICAgICAgICBSZXR1cm4gdGhlIGxpc3Qgb2YgZW1haWwgYWRkcmVzc2VzIHRvIHdoaWNoIGEgcGFydGljdWxhciB0eXBlCisgICAgICAgIG9mIG5vdGlmaWNhdGlvbiBlbWFpbCBzaG91bGQgYmUgc2VudCwgYnkgbG9va2luZyBhdCB0aGUgY29uZmlnCisgICAgICAgIHZhbHVlIGZvciAibXVsdGltYWlsaG9vay4kbmFtZSIgZm9yIGVhY2ggb2YgbmFtZXMuICBVc2UgdGhlCisgICAgICAgIHZhbHVlIGZyb20gdGhlIGZpcnN0IG5hbWUgdGhhdCBpcyBjb25maWd1cmVkLiAgVGhlIHJldHVybgorICAgICAgICB2YWx1ZSBpcyBhIChwb3NzaWJseSBlbXB0eSkgc3RyaW5nIGNvbnRhaW5pbmcgUkZDIDI4MjIgZW1haWwKKyAgICAgICAgYWRkcmVzc2VzIHNlcGFyYXRlZCBieSBjb21tYXMuICBJZiBubyBjb25maWd1cmF0aW9uIGNvdWxkIGJlCisgICAgICAgIGZvdW5kLCByYWlzZSBhIENvbmZpZ3VyYXRpb25FeGNlcHRpb24uIiIiCisKKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBsaW5lcyA9IGNvbmZpZy5nZXRfYWxsKG5hbWUpCisgICAgICAgICAgICBpZiBsaW5lcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsaW5lcyA9IFtsaW5lLnN0cmlwKCkgZm9yIGxpbmUgaW4gbGluZXNdCisgICAgICAgICAgICAgICAgIyBTaW5nbGUgIm5vbmUiIGlzIGEgc3BlY2lhbCB2YWx1ZSBlcXVpdmFsZW4gdG8gZW1wdHkgc3RyaW5nLgorICAgICAgICAgICAgICAgIGlmIGxpbmVzID09IFsnbm9uZSddOgorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFsnJ10KKyAgICAgICAgICAgICAgICByZXR1cm4gJywgJy5qb2luKGxpbmVzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKworY2xhc3MgU3RhdGljUmVmRmlsdGVyRW52aXJvbm1lbnRNaXhpbihFbnZpcm9ubWVudCk6CisgICAgIiIiU2V0IGJyYW5jaCBmaWx0ZXIgc3RhdGljYWxseSBiYXNlZCBvbiBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlZl9maWx0ZXJfaW5jbF9yZWdleCwgcmVmX2ZpbHRlcl9leGNsX3JlZ2V4LAorICAgICAgICAgICAgICAgICByZWZfZmlsdGVyX2RvX3NlbmRfcmVnZXgsIHJlZl9maWx0ZXJfZG9udF9zZW5kX3JlZ2V4LAorICAgICAgICAgICAgICAgICAqKmt3KToKKyAgICAgICAgc3VwZXIoU3RhdGljUmVmRmlsdGVyRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oKiprdykKKworICAgICAgICBpZiByZWZfZmlsdGVyX2luY2xfcmVnZXggYW5kIHJlZl9maWx0ZXJfZXhjbF9yZWdleDoKKyAgICAgICAgICAgIHJhaXNlIENvbmZpZ3VyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkNhbm5vdCBzcGVjaWZ5IGJvdGggYSByZWYgaW5jbHVzaW9uIGFuZCBleGNsdXNpb24gcmVnZXguIikKKyAgICAgICAgc2VsZi5fX2lzX2luY2x1c2lvbl9maWx0ZXIgPSBib29sKHJlZl9maWx0ZXJfaW5jbF9yZWdleCkKKyAgICAgICAgZGVmYXVsdF9leGNsdWRlID0gc2VsZi5nZXRfZGVmYXVsdF9yZWZfaWdub3JlX3JlZ2V4KCkKKyAgICAgICAgaWYgcmVmX2ZpbHRlcl9pbmNsX3JlZ2V4OgorICAgICAgICAgICAgcmVmX2ZpbHRlcl9yZWdleCA9IHJlZl9maWx0ZXJfaW5jbF9yZWdleAorICAgICAgICBlbGlmIHJlZl9maWx0ZXJfZXhjbF9yZWdleDoKKyAgICAgICAgICAgIHJlZl9maWx0ZXJfcmVnZXggPSByZWZfZmlsdGVyX2V4Y2xfcmVnZXggKyAnfCcgKyBkZWZhdWx0X2V4Y2x1ZGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlZl9maWx0ZXJfcmVnZXggPSBkZWZhdWx0X2V4Y2x1ZGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fX2NvbXBpbGVkX3JlZ2V4ID0gcmUuY29tcGlsZShyZWZfZmlsdGVyX3JlZ2V4KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmFpc2UgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnSW52YWxpZCBSZWYgRmlsdGVyIFJlZ2V4ICIlcyI6ICVzJyAlIChyZWZfZmlsdGVyX3JlZ2V4LCBzeXMuZXhjX2luZm8oKVsxXSkpCisKKyAgICAgICAgaWYgcmVmX2ZpbHRlcl9kb19zZW5kX3JlZ2V4IGFuZCByZWZfZmlsdGVyX2RvbnRfc2VuZF9yZWdleDoKKyAgICAgICAgICAgIHJhaXNlIENvbmZpZ3VyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkNhbm5vdCBzcGVjaWZ5IGJvdGggYSByZWYgZG9TZW5kIGFuZCBkb250U2VuZCByZWdleC4iKQorICAgICAgICBzZWxmLl9faXNfZG9fc2VuZF9maWx0ZXIgPSBib29sKHJlZl9maWx0ZXJfZG9fc2VuZF9yZWdleCkKKyAgICAgICAgaWYgcmVmX2ZpbHRlcl9kb19zZW5kX3JlZ2V4OgorICAgICAgICAgICAgcmVmX2ZpbHRlcl9zZW5kX3JlZ2V4ID0gcmVmX2ZpbHRlcl9kb19zZW5kX3JlZ2V4CisgICAgICAgIGVsaWYgcmVmX2ZpbHRlcl9kb250X3NlbmRfcmVnZXg6CisgICAgICAgICAgICByZWZfZmlsdGVyX3NlbmRfcmVnZXggPSByZWZfZmlsdGVyX2RvbnRfc2VuZF9yZWdleAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVmX2ZpbHRlcl9zZW5kX3JlZ2V4ID0gJy4qJworICAgICAgICAgICAgc2VsZi5fX2lzX2RvX3NlbmRfZmlsdGVyID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9fc2VuZF9jb21waWxlZF9yZWdleCA9IHJlLmNvbXBpbGUocmVmX2ZpbHRlcl9zZW5kX3JlZ2V4KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmFpc2UgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnSW52YWxpZCBSZWYgRmlsdGVyIFJlZ2V4ICIlcyI6ICVzJyAlCisgICAgICAgICAgICAgICAgKHJlZl9maWx0ZXJfc2VuZF9yZWdleCwgc3lzLmV4Y19pbmZvKClbMV0pKQorCisgICAgZGVmIGdldF9yZWZfZmlsdGVyX3JlZ2V4KHNlbGYsIHNlbmRfZmlsdGVyPUZhbHNlKToKKyAgICAgICAgaWYgc2VuZF9maWx0ZXI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRfY29tcGlsZWRfcmVnZXgsIHNlbGYuX19pc19kb19zZW5kX2ZpbHRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jb21waWxlZF9yZWdleCwgc2VsZi5fX2lzX2luY2x1c2lvbl9maWx0ZXIKKworCitjbGFzcyBDb25maWdSZWZGaWx0ZXJFbnZpcm9ubWVudE1peGluKAorICAgICAgICBDb25maWdFbnZpcm9ubWVudE1peGluLAorICAgICAgICBTdGF0aWNSZWZGaWx0ZXJFbnZpcm9ubWVudE1peGluCisgICAgICAgICk6CisgICAgIiIiRGV0ZXJtaW5lIGJyYW5jaCBmaWx0ZXJpbmcgc3RhdGljYWxseSBiYXNlZCBvbiBjb25maWcuIiIiCisKKyAgICBkZWYgX2dldF9yZWdleChzZWxmLCBjb25maWcsIGtleSk6CisgICAgICAgICIiIkdldCBhIGxpc3Qgb2Ygd2hpdGVzcGFjZS1zZXBhcmF0ZWQgcmVnZXguIFRoZSByZWZGaWx0ZXIqIGNvbmZpZworICAgICAgICB2YXJpYWJsZXMgYXJlIG11bHRpdmFsdWVkIChoZW5jZSB0aGUgdXNlIG9mIGdldF9hbGwpLCBhbmQgd2UKKyAgICAgICAgYWxsb3cgZWFjaCBlbnRyeSB0byBiZSBhIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGxpc3QgKGhlbmNlIHRoZQorICAgICAgICBzcGxpdCBvbiBlYWNoIGxpbmUpLiBUaGUgd2hvbGUgdGhpbmcgaXMgZ2x1ZWQgaW50byBhIHNpbmdsZSByZWdleC4iIiIKKyAgICAgICAgdmFsdWVzID0gY29uZmlnLmdldF9hbGwoa2V5KQorICAgICAgICBpZiB2YWx1ZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZXMKKyAgICAgICAgaXRlbXMgPSBbXQorICAgICAgICBmb3IgbGluZSBpbiB2YWx1ZXM6CisgICAgICAgICAgICBmb3IgaSBpbiBsaW5lLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaXRlbXMuYXBwZW5kKGkpCisgICAgICAgIGlmIGl0ZW1zID09IFtdOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuICd8Jy5qb2luKGl0ZW1zKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZywgKiprdyk6CisgICAgICAgIHN1cGVyKENvbmZpZ1JlZkZpbHRlckVudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgY29uZmlnPWNvbmZpZywKKyAgICAgICAgICAgIHJlZl9maWx0ZXJfaW5jbF9yZWdleD1zZWxmLl9nZXRfcmVnZXgoY29uZmlnLCAncmVmRmlsdGVySW5jbHVzaW9uUmVnZXgnKSwKKyAgICAgICAgICAgIHJlZl9maWx0ZXJfZXhjbF9yZWdleD1zZWxmLl9nZXRfcmVnZXgoY29uZmlnLCAncmVmRmlsdGVyRXhjbHVzaW9uUmVnZXgnKSwKKyAgICAgICAgICAgIHJlZl9maWx0ZXJfZG9fc2VuZF9yZWdleD1zZWxmLl9nZXRfcmVnZXgoY29uZmlnLCAncmVmRmlsdGVyRG9TZW5kUmVnZXgnKSwKKyAgICAgICAgICAgIHJlZl9maWx0ZXJfZG9udF9zZW5kX3JlZ2V4PXNlbGYuX2dldF9yZWdleChjb25maWcsICdyZWZGaWx0ZXJEb250U2VuZFJlZ2V4JyksCisgICAgICAgICAgICAqKmt3CisgICAgICAgICAgICApCisKKworY2xhc3MgUHJvamVjdGRlc2NFbnZpcm9ubWVudE1peGluKEVudmlyb25tZW50KToKKyAgICAiIiJNYWtlIGEgInByb2plY3RkZXNjIiB2YWx1ZSBhdmFpbGFibGUgZm9yIHRlbXBsYXRlcy4KKworICAgIEJ5IGRlZmF1bHQsIGl0IGlzIHNldCB0byB0aGUgZmlyc3QgbGluZSBvZiAkR0lUX0RJUi9kZXNjcmlwdGlvbgorICAgIChpZiB0aGF0IGZpbGUgaXMgcHJlc2VudCBhbmQgYXBwZWFycyB0byBiZSBzZXQgbWVhbmluZ2Z1bGx5KS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3KToKKyAgICAgICAgc3VwZXIoUHJvamVjdGRlc2NFbnZpcm9ubWVudE1peGluLCBzZWxmKS5fX2luaXRfXygqKmt3KQorICAgICAgICBzZWxmLkNPTVBVVEVEX0tFWVMgKz0gWydwcm9qZWN0ZGVzYyddCisKKyAgICBkZWYgZ2V0X3Byb2plY3RkZXNjKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvamVjdC4iIiIKKworICAgICAgICBnaXRfZGlyID0gZ2V0X2dpdF9kaXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm9qZWN0ZGVzYyA9IG9wZW4ob3MucGF0aC5qb2luKGdpdF9kaXIsICdkZXNjcmlwdGlvbicpKS5yZWFkbGluZSgpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIHByb2plY3RkZXNjIGFuZCBub3QgcHJvamVjdGRlc2Muc3RhcnRzd2l0aCgnVW5uYW1lZCByZXBvc2l0b3J5Jyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb2plY3RkZXNjCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJldHVybiAnVU5OQU1FRCBQUk9KRUNUJworCisKK2NsYXNzIEdlbmVyaWNFbnZpcm9ubWVudE1peGluKEVudmlyb25tZW50KToKKyAgICBkZWYgZ2V0X3B1c2hlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYub3NlbnYuZ2V0KCdVU0VSJywgc2VsZi5vc2Vudi5nZXQoJ1VTRVJOQU1FJywgJ3Vua25vd24gdXNlcicpKQorCisKK2NsYXNzIEdpdG9saXRlRW52aXJvbm1lbnRIaWdoUHJlY01peGluKEVudmlyb25tZW50KToKKyAgICBkZWYgZ2V0X3B1c2hlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYub3NlbnYuZ2V0KCdHTF9VU0VSJywgJ3Vua25vd24gdXNlcicpCisKKworY2xhc3MgR2l0b2xpdGVFbnZpcm9ubWVudExvd1ByZWNNaXhpbigKKyAgICAgICAgQ29uZmlnRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgRW52aXJvbm1lbnQpOgorCisgICAgZGVmIGdldF9yZXBvX3Nob3J0bmFtZShzZWxmKToKKyAgICAgICAgIyBUaGUgZ2l0b2xpdGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJEdMX1JFUE8gaXMgYSBwcmV0dHkgZ29vZAorICAgICAgICAjIHJlcG9fc2hvcnRuYW1lICh0aG91Z2ggaXQncyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBhIHZhbHVlCisgICAgICAgICMgdGhlIHVzZXIgbWlnaHQgaGF2ZSBleHBsaWNpdGx5IHB1dCBpbiBoaXMgY29uZmlnKS4KKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgIHNlbGYub3NlbnYuZ2V0KCdHTF9SRVBPJywgTm9uZSkgb3IKKyAgICAgICAgICAgIHN1cGVyKEdpdG9saXRlRW52aXJvbm1lbnRMb3dQcmVjTWl4aW4sIHNlbGYpLmdldF9yZXBvX3Nob3J0bmFtZSgpCisgICAgICAgICAgICApCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9jb21waWxlX3JlZ2V4KHJlX3RlbXBsYXRlKToKKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgIHJlLmNvbXBpbGUocmVfdGVtcGxhdGUgJSB4KQorICAgICAgICAgICAgZm9yIHggaW4gKAorICAgICAgICAgICAgICAgIHInQkVHSU5ccytVU0VSXHMrRU1BSUxTJywKKyAgICAgICAgICAgICAgICByJyhbXlxzXSspXHMrKC4qKScsCisgICAgICAgICAgICAgICAgcidFTkRccytVU0VSXHMrRU1BSUxTJywKKyAgICAgICAgICAgICAgICApKQorCisgICAgZGVmIGdldF9mcm9tYWRkcihzZWxmLCBjaGFuZ2U9Tm9uZSk6CisgICAgICAgIEdMX1VTRVIgPSBzZWxmLm9zZW52LmdldCgnR0xfVVNFUicpCisgICAgICAgIGlmIEdMX1VTRVIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIEZpbmQgdGhlIHBhdGggdG8gZ2l0b2xpdGUuY29uZi4gIE5vdGUgdGhhdCBnaXRvbGl0ZSB2MworICAgICAgICAgICAgIyBkaWQgYXdheSB3aXRoIHRoZSBHTF9BRE1JTkRJUiBhbmQgR0xfQ09ORiBlbnZpcm9ubWVudAorICAgICAgICAgICAgIyB2YXJpYWJsZXMgKHRoZXkgYXJlIG5vdyBoYXJkLWNvZGVkKS4KKyAgICAgICAgICAgIEdMX0FETUlORElSID0gc2VsZi5vc2Vudi5nZXQoCisgICAgICAgICAgICAgICAgJ0dMX0FETUlORElSJywKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmV4cGFuZHVzZXIob3MucGF0aC5qb2luKCd+JywgJy5naXRvbGl0ZScpKSkKKyAgICAgICAgICAgIEdMX0NPTkYgPSBzZWxmLm9zZW52LmdldCgKKyAgICAgICAgICAgICAgICAnR0xfQ09ORicsCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKEdMX0FETUlORElSLCAnY29uZicsICdnaXRvbGl0ZS5jb25mJykpCisKKyAgICAgICAgICAgIG1haWxhZGRyZXNzX21hcCA9IHNlbGYuY29uZmlnLmdldCgnTWFpbGFkZHJlc3NNYXAnKQorICAgICAgICAgICAgIyBJZiByZWxhdGl2ZSwgY29uc2lkZXIgcmVsYXRpdmUgdG8gR0xfQ09ORjoKKyAgICAgICAgICAgIGlmIG1haWxhZGRyZXNzX21hcDoKKyAgICAgICAgICAgICAgICBtYWlsYWRkcmVzc19tYXAgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKEdMX0NPTkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlsYWRkcmVzc19tYXApCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUobWFpbGFkZHJlc3NfbWFwKToKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4obWFpbGFkZHJlc3NfbWFwLCAnclUnKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIExlYWRpbmcgJyMnIGlzIG9wdGlvbmFsCisgICAgICAgICAgICAgICAgICAgICAgICByZV9iZWdpbiwgcmVfdXNlciwgcmVfZW5kID0gc2VsZi5fY29tcGlsZV9yZWdleCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ14oPzpccyojKT9ccyolc1xzKiQnKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGwgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gbC5yc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZV9iZWdpbi5tYXRjaChsKSBvciByZV9lbmQubWF0Y2gobCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlICAjIElnbm9yZSB0aGVzZSBsaW5lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSByZV91c2VyLm1hdGNoKGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbS5ncm91cCgxKSA9PSBHTF9VU0VSOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0uZ3JvdXAoMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlICAjIE5vdCB0aGlzIHVzZXIsIGJ1dCBub3QgYW4gZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBDb25maWd1cmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3ludGF4IGVycm9yIGluIG1haWwgYWRkcmVzcyBtYXAuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGVjayBmaWxlIHt9LlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGluZToge30iLmZvcm1hdChtYWlsYWRkcmVzc19tYXAsIGwpKQorCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoR0xfQ09ORik6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oR0xfQ09ORiwgJ3JVJykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGluX3VzZXJfZW1haWxzX3NlY3Rpb24gPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICByZV9iZWdpbiwgcmVfdXNlciwgcmVfZW5kID0gc2VsZi5fY29tcGlsZV9yZWdleCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXlxzKiNccyolc1xzKiQnKQorICAgICAgICAgICAgICAgICAgICBmb3IgbCBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGwucnN0cmlwKCdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaW5fdXNlcl9lbWFpbHNfc2VjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZV9iZWdpbi5tYXRjaChsKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fdXNlcl9lbWFpbHNfc2VjdGlvbiA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVfZW5kLm1hdGNoKGwpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBtID0gcmVfdXNlci5tYXRjaChsKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbSBhbmQgbS5ncm91cCgxKSA9PSBHTF9VU0VSOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtLmdyb3VwKDIpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHJldHVybiBzdXBlcihHaXRvbGl0ZUVudmlyb25tZW50TG93UHJlY01peGluLCBzZWxmKS5nZXRfZnJvbWFkZHIoY2hhbmdlKQorCisKK2NsYXNzIEluY3JlbWVudGFsRGF0ZVRpbWUob2JqZWN0KToKKyAgICAiIiJTaW1wbGUgd3JhcHBlciB0byBnaXZlIGluY3JlbWVudGFsIGRhdGUvdGltZXMuCisKKyAgICBFYWNoIGNhbGwgd2lsbCByZXN1bHQgaW4gYSBkYXRlL3RpbWUgYSBzZWNvbmQgbGF0ZXIgdGhhbiB0aGUKKyAgICBwcmV2aW91cyBjYWxsLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBmYWxzaWZ5IGVtYWlsIGhlYWRlcnMsIHRvCisgICAgaW5jcmVhc2UgdGhlIGxpa2VsaWhvb2QgdGhhdCBlbWFpbCBjbGllbnRzIHNvcnQgdGhlIGVtYWlscworICAgIGNvcnJlY3RseS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi50aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5uZXh0ID0gc2VsZi5fX25leHRfXyAgIyBQeXRob24gMiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisKKyAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdGRhdGUoc2VsZi50aW1lLCBUcnVlKQorICAgICAgICBzZWxmLnRpbWUgKz0gMQorICAgICAgICByZXR1cm4gZm9ybWF0dGVkCisKKworY2xhc3MgU3Rhc2hFbnZpcm9ubWVudEhpZ2hQcmVjTWl4aW4oRW52aXJvbm1lbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VyPU5vbmUsIHJlcG89Tm9uZSwgKiprdyk6CisgICAgICAgIHN1cGVyKFN0YXNoRW52aXJvbm1lbnRIaWdoUHJlY01peGluLAorICAgICAgICAgICAgICBzZWxmKS5fX2luaXRfXyh1c2VyPXVzZXIsIHJlcG89cmVwbywgKiprdykKKyAgICAgICAgc2VsZi5fX3VzZXIgPSB1c2VyCisgICAgICAgIHNlbGYuX19yZXBvID0gcmVwbworCisgICAgZGVmIGdldF9wdXNoZXIoc2VsZik6CisgICAgICAgIHJldHVybiByZS5tYXRjaChyJyguKj8pXHMqPCcsIHNlbGYuX191c2VyKS5ncm91cCgxKQorCisgICAgZGVmIGdldF9wdXNoZXJfZW1haWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fdXNlcgorCisKK2NsYXNzIFN0YXNoRW52aXJvbm1lbnRMb3dQcmVjTWl4aW4oRW52aXJvbm1lbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VyPU5vbmUsIHJlcG89Tm9uZSwgKiprdyk6CisgICAgICAgIHN1cGVyKFN0YXNoRW52aXJvbm1lbnRMb3dQcmVjTWl4aW4sIHNlbGYpLl9faW5pdF9fKCoqa3cpCisgICAgICAgIHNlbGYuX19yZXBvID0gcmVwbworICAgICAgICBzZWxmLl9fdXNlciA9IHVzZXIKKworICAgIGRlZiBnZXRfcmVwb19zaG9ydG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fcmVwbworCisgICAgZGVmIGdldF9mcm9tYWRkcihzZWxmLCBjaGFuZ2U9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9fdXNlcgorCisKK2NsYXNzIEdlcnJpdEVudmlyb25tZW50SGlnaFByZWNNaXhpbihFbnZpcm9ubWVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3Q9Tm9uZSwgc3VibWl0dGVyPU5vbmUsIHVwZGF0ZV9tZXRob2Q9Tm9uZSwgKiprdyk6CisgICAgICAgIHN1cGVyKEdlcnJpdEVudmlyb25tZW50SGlnaFByZWNNaXhpbiwKKyAgICAgICAgICAgICAgc2VsZikuX19pbml0X18oc3VibWl0dGVyPXN1Ym1pdHRlciwgcHJvamVjdD1wcm9qZWN0LCAqKmt3KQorICAgICAgICBzZWxmLl9fcHJvamVjdCA9IHByb2plY3QKKyAgICAgICAgc2VsZi5fX3N1Ym1pdHRlciA9IHN1Ym1pdHRlcgorICAgICAgICBzZWxmLl9fdXBkYXRlX21ldGhvZCA9IHVwZGF0ZV9tZXRob2QKKyAgICAgICAgIk1ha2UgYW4gJ3VwZGF0ZV9tZXRob2QnIHZhbHVlIGF2YWlsYWJsZSBmb3IgdGVtcGxhdGVzLiIKKyAgICAgICAgc2VsZi5DT01QVVRFRF9LRVlTICs9IFsndXBkYXRlX21ldGhvZCddCisKKyAgICBkZWYgZ2V0X3B1c2hlcihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fX3N1Ym1pdHRlcjoKKyAgICAgICAgICAgIGlmIHNlbGYuX19zdWJtaXR0ZXIuZmluZCgnPCcpICE9IC0xOgorICAgICAgICAgICAgICAgICMgU3VibWl0dGVyIGhhcyBhIGNvbmZpZ3VyZWQgZW1haWwsIHdlIHRyYW5zZm9ybWVkCisgICAgICAgICAgICAgICAgIyBfX3N1Ym1pdHRlciBpbnRvIGFuIFJGQyAyODIyIHN0cmluZyBhbHJlYWR5LgorICAgICAgICAgICAgICAgIHJldHVybiByZS5tYXRjaChyJyguKj8pXHMqPCcsIHNlbGYuX19zdWJtaXR0ZXIpLmdyb3VwKDEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgU3VibWl0dGVyIGhhcyBubyBjb25maWd1cmVkIGVtYWlsLCBpdCdzIGp1c3QgaGlzIG5hbWUuCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zdWJtaXR0ZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgSWYgd2UgYXJyaXZlIGhlcmUsIHRoaXMgbWVhbnMgc29tZW9uZSBwdXNoZWQgIlN1Ym1pdCIgZnJvbQorICAgICAgICAgICAgIyB0aGUgZ2Vycml0IHdlYiBVSSBmb3IgdGhlIENSIChvciB1c2VkIG9uZSBvZiB0aGUgcHJvZ3JhbW1hdGljCisgICAgICAgICAgICAjIEFQSXMgdG8gZG8gdGhlIHNhbWUsIHN1Y2ggYXMgZ2Vycml0IHJldmlldykgYW5kIHRoZQorICAgICAgICAgICAgIyBtZXJnZS9wdXNoIHdhcyBkb25lIGJ5IHRoZSBHZXJyaXQgdXNlci4gIEl0IHdhcyB0ZWNobmljYWxseQorICAgICAgICAgICAgIyB0cmlnZ2VyZWQgYnkgc29tZW9uZSBlbHNlLCBidXQgc2FkbHkgd2UgaGF2ZSBubyB3YXkgb2YKKyAgICAgICAgICAgICMgZGV0ZXJtaW5pbmcgd2hvIHRoYXQgc29tZW9uZSBlbHNlIGlzIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAgICByZXR1cm4gJ0dlcnJpdCcgICMgJ3Vua25vd24gdXNlcic/CisKKyAgICBkZWYgZ2V0X3B1c2hlcl9lbWFpbChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fX3N1Ym1pdHRlcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc3VibWl0dGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoR2Vycml0RW52aXJvbm1lbnRIaWdoUHJlY01peGluLCBzZWxmKS5nZXRfcHVzaGVyX2VtYWlsKCkKKworICAgIGRlZiBnZXRfZGVmYXVsdF9yZWZfaWdub3JlX3JlZ2V4KHNlbGYpOgorICAgICAgICBkZWZhdWx0ID0gc3VwZXIoR2Vycml0RW52aXJvbm1lbnRIaWdoUHJlY01peGluLCBzZWxmKS5nZXRfZGVmYXVsdF9yZWZfaWdub3JlX3JlZ2V4KCkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQgKyAnfF5yZWZzL2NoYW5nZXMvfF5yZWZzL2NhY2hlLWF1dG9tZXJnZS98XnJlZnMvbWV0YS8nCisKKyAgICBkZWYgZ2V0X3JldmlzaW9uX3JlY2lwaWVudHMoc2VsZiwgcmV2aXNpb24pOgorICAgICAgICAjIE1lcmdlIGNvbW1pdHMgY3JlYXRlZCBieSBHZXJyaXQgd2hlbiB1c2VycyBoaXQgIlN1Ym1pdCB0aGlzIHBhdGNoc2V0IgorICAgICAgICAjIGluIHRoZSBXZWIgVUkgKG9yIGRvIGVxdWl2YWxlbnRseSB3aXRoIFJFU1QgQVBJcyBvciB0aGUgZ2Vycml0IHJldmlldworICAgICAgICAjIGNvbW1hbmQpIGFyZSBub3Qgc29tZXRoaW5nIHVzZXJzIHdhbnQgdG8gc2VlIGFuIGluZGl2aWR1YWwgZW1haWwgZm9yLgorICAgICAgICAjIEZpbHRlciB0aGVtIG91dC4KKyAgICAgICAgY29tbWl0dGVyID0gcmVhZF9naXRfb3V0cHV0KFsnbG9nJywgJy0tbm8td2FsaycsICctLWZvcm1hdD0lY04nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uLnJldi5zaGExXSkKKyAgICAgICAgaWYgY29tbWl0dGVyID09ICdHZXJyaXQgQ29kZSBSZXZpZXcnOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoR2Vycml0RW52aXJvbm1lbnRIaWdoUHJlY01peGluLCBzZWxmKS5nZXRfcmV2aXNpb25fcmVjaXBpZW50cyhyZXZpc2lvbikKKworICAgIGRlZiBnZXRfdXBkYXRlX21ldGhvZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX191cGRhdGVfbWV0aG9kCisKKworY2xhc3MgR2Vycml0RW52aXJvbm1lbnRMb3dQcmVjTWl4aW4oRW52aXJvbm1lbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0PU5vbmUsIHN1Ym1pdHRlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgc3VwZXIoR2Vycml0RW52aXJvbm1lbnRMb3dQcmVjTWl4aW4sIHNlbGYpLl9faW5pdF9fKCoqa3cpCisgICAgICAgIHNlbGYuX19wcm9qZWN0ID0gcHJvamVjdAorICAgICAgICBzZWxmLl9fc3VibWl0dGVyID0gc3VibWl0dGVyCisKKyAgICBkZWYgZ2V0X3JlcG9fc2hvcnRuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX3Byb2plY3QKKworICAgIGRlZiBnZXRfZnJvbWFkZHIoc2VsZiwgY2hhbmdlPU5vbmUpOgorICAgICAgICBpZiBzZWxmLl9fc3VibWl0dGVyIGFuZCBzZWxmLl9fc3VibWl0dGVyLmZpbmQoJzwnKSAhPSAtMToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc3VibWl0dGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoR2Vycml0RW52aXJvbm1lbnRMb3dQcmVjTWl4aW4sIHNlbGYpLmdldF9mcm9tYWRkcihjaGFuZ2UpCisKKworY2xhc3MgUHVzaChvYmplY3QpOgorICAgICIiIlJlcHJlc2VudCBhbiBlbnRpcmUgcHVzaCAoaS5lLiwgYSBncm91cCBvZiBSZWZlcmVuY2VDaGFuZ2VzKS4KKworICAgIEl0IGlzIGVhc3kgdG8gZmlndXJlIG91dCB3aGF0IGNvbW1pdHMgd2VyZSBhZGRlZCB0byBhICpicmFuY2gqIGJ5CisgICAgYSBSZWZlcmVuY2UgY2hhbmdlOgorCisgICAgICAgIGdpdCByZXYtbGlzdCBjaGFuZ2Uub2xkLi5jaGFuZ2UubmV3CisKKyAgICBvciByZW1vdmVkIGZyb20gYSAqYnJhbmNoKjoKKworICAgICAgICBnaXQgcmV2LWxpc3QgY2hhbmdlLm5ldy4uY2hhbmdlLm9sZAorCisgICAgQnV0IGl0IGlzIG5vdCBxdWl0ZSBzbyB0cml2aWFsIHRvIGRldGVybWluZSB3aGljaCBlbnRpcmVseSBuZXcKKyAgICBjb21taXRzIHdlcmUgYWRkZWQgdG8gdGhlICpyZXBvc2l0b3J5KiBieSBhIHB1c2ggYW5kIHdoaWNoIG9sZAorICAgIGNvbW1pdHMgd2VyZSBkaXNjYXJkZWQgYnkgYSBwdXNoLiAgQSBiaWcgcGFydCBvZiB0aGUgam9iIG9mIHRoaXMKKyAgICBjbGFzcyBpcyB0byBmaWd1cmUgb3V0IHRoZXNlIHRoaW5ncywgYW5kIHRvIG1ha2Ugc3VyZSB0aGF0IG5ldworICAgIGNvbW1pdHMgYXJlIG9ubHkgZGV0YWlsZWQgb25jZSBldmVuIGlmIHRoZXkgd2VyZSBhZGRlZCB0byBtdWx0aXBsZQorICAgIHJlZmVyZW5jZXMuCisKKyAgICBUaGUgZmlyc3Qgc3RlcCBpcyB0byBkZXRlcm1pbmUgdGhlICJvdGhlciIgcmVmZXJlbmNlcy0tdGhvc2UKKyAgICB1bmFmZmVjdGVkIGJ5IHRoZSBjdXJyZW50IHB1c2guICBUaGV5IGFyZSBjb21wdXRlZCBieSBsaXN0aW5nIGFsbAorICAgIHJlZmVyZW5jZXMgdGhlbiByZW1vdmluZyBhbnkgYWZmZWN0ZWQgYnkgdGhpcyBwdXNoLiAgVGhlIHJlc3VsdHMKKyAgICBhcmUgc3RvcmVkIGluIFB1c2guX290aGVyX3JlZl9zaGExcy4KKworICAgIFRoZSBjb21taXRzIGNvbnRhaW5lZCBpbiB0aGUgcmVwb3NpdG9yeSBiZWZvcmUgdGhpcyBwdXNoIHdlcmUKKworICAgICAgICBnaXQgcmV2LWxpc3Qgb3RoZXIxIG90aGVyMiBvdGhlcjMgLi4uIGNoYW5nZTEub2xkIGNoYW5nZTIub2xkIC4uLgorCisgICAgV2hlcmUgImNoYW5nZU4ub2xkIiBpcyB0aGUgb2xkIHZhbHVlIG9mIG9uZSBvZiB0aGUgcmVmZXJlbmNlcworICAgIGFmZmVjdGVkIGJ5IHRoaXMgcHVzaC4KKworICAgIFRoZSBjb21taXRzIGNvbnRhaW5lZCBpbiB0aGUgcmVwb3NpdG9yeSBhZnRlciB0aGlzIHB1c2ggYXJlCisKKyAgICAgICAgZ2l0IHJldi1saXN0IG90aGVyMSBvdGhlcjIgb3RoZXIzIC4uLiBjaGFuZ2UxLm5ldyBjaGFuZ2UyLm5ldyAuLi4KKworICAgIFRoZSBjb21taXRzIGFkZGVkIGJ5IHRoaXMgcHVzaCBhcmUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZQorICAgIHR3byBzZXRzLCB3aGljaCBjYW4gYmUgd3JpdHRlbgorCisgICAgICAgIGdpdCByZXYtbGlzdCBcCisgICAgICAgICAgICBeb3RoZXIxIF5vdGhlcjIgLi4uIFwKKyAgICAgICAgICAgIF5jaGFuZ2UxLm9sZCBeY2hhbmdlMi5vbGQgLi4uIFwKKyAgICAgICAgICAgIGNoYW5nZTEubmV3IGNoYW5nZTIubmV3IC4uLgorCisgICAgVGhlIGNvbW1pdHMgcmVtb3ZlZCBieSB0aGlzIHB1c2ggY2FuIGJlIGNvbXB1dGVkIGJ5CisKKyAgICAgICAgZ2l0IHJldi1saXN0IFwKKyAgICAgICAgICAgIF5vdGhlcjEgXm90aGVyMiAuLi4gXAorICAgICAgICAgICAgXmNoYW5nZTEubmV3IF5jaGFuZ2UyLm5ldyAuLi4gXAorICAgICAgICAgICAgY2hhbmdlMS5vbGQgY2hhbmdlMi5vbGQgLi4uCisKKyAgICBUaGUgbGFzdCBwb2ludCBpcyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRoYXQgb3RoZXIgcHVzaGVzIGFyZQorICAgIG9jY3VycmluZyBzaW11bHRhbmVvdXNseSB0byB0aGlzIG9uZSwgc28gcmVmZXJlbmNlIHZhbHVlcyBjYW4KKyAgICBjaGFuZ2UgYXQgYW55IHRpbWUuICBJdCBpcyBpbXBvc3NpYmxlIHRvIGVsaW1pbmF0ZSBhbGwgcmFjZQorICAgIGNvbmRpdGlvbnMsIGJ1dCB3ZSByZWR1Y2UgdGhlIHdpbmRvdyBvZiB0aW1lIGR1cmluZyB3aGljaCBwcm9ibGVtcworICAgIGNhbiBvY2N1ciBieSB0cmFuc2xhdGluZyByZWZlcmVuY2UgbmFtZXMgdG8gU0hBMXMgYXMgc29vbiBhcworICAgIHBvc3NpYmxlIGFuZCB3b3JraW5nIHdpdGggU0hBMXMgdGhlcmVhZnRlciAoYmVjYXVzZSBTSEExcyBhcmUKKyAgICBpbW11dGFibGUpLiIiIgorCisgICAgIyBBIG1hcCB7KGNoYW5nZWNsYXNzLCBjaGFuZ2V0eXBlKTogaW50ZWdlcn0gc3BlY2lmeWluZyB0aGUgb3JkZXIKKyAgICAjIHRoYXQgcmVmZXJlbmNlIGNoYW5nZXMgd2lsbCBiZSBwcm9jZXNzZWQgaWYgbXVsdGlwbGUgcmVmZXJlbmNlCisgICAgIyBjaGFuZ2VzIGFyZSBpbmNsdWRlZCBpbiBhIHNpbmdsZSBwdXNoLiAgVGhlIG9yZGVyIGlzIHNpZ25pZmljYW50CisgICAgIyBtb3N0bHkgYmVjYXVzZSBuZXcgY29tbWl0IG5vdGlmaWNhdGlvbnMgYXJlIHRocmVhZGVkIHRvZ2V0aGVyCisgICAgIyB3aXRoIHRoZSBmaXJzdCByZWZlcmVuY2UgY2hhbmdlIHRoYXQgaW5jbHVkZXMgdGhlIGNvbW1pdC4gIFRoZQorICAgICMgZm9sbG93aW5nIG9yZGVyIHRodXMgY2F1c2VzIGNvbW1pdHMgdG8gYmUgZ3JvdXBlZCB3aXRoIGJyYW5jaAorICAgICMgY2hhbmdlcyAoYXMgb3Bwb3NlZCB0byB0YWcgY2hhbmdlcykgaWYgcG9zc2libGUuCisgICAgU09SVF9PUkRFUiA9IGRpY3QoCisgICAgICAgICh2YWx1ZSwgaSkgZm9yIChpLCB2YWx1ZSkgaW4gZW51bWVyYXRlKFsKKyAgICAgICAgICAgIChCcmFuY2hDaGFuZ2UsICd1cGRhdGUnKSwKKyAgICAgICAgICAgIChCcmFuY2hDaGFuZ2UsICdjcmVhdGUnKSwKKyAgICAgICAgICAgIChBbm5vdGF0ZWRUYWdDaGFuZ2UsICd1cGRhdGUnKSwKKyAgICAgICAgICAgIChBbm5vdGF0ZWRUYWdDaGFuZ2UsICdjcmVhdGUnKSwKKyAgICAgICAgICAgIChOb25Bbm5vdGF0ZWRUYWdDaGFuZ2UsICd1cGRhdGUnKSwKKyAgICAgICAgICAgIChOb25Bbm5vdGF0ZWRUYWdDaGFuZ2UsICdjcmVhdGUnKSwKKyAgICAgICAgICAgIChCcmFuY2hDaGFuZ2UsICdkZWxldGUnKSwKKyAgICAgICAgICAgIChBbm5vdGF0ZWRUYWdDaGFuZ2UsICdkZWxldGUnKSwKKyAgICAgICAgICAgIChOb25Bbm5vdGF0ZWRUYWdDaGFuZ2UsICdkZWxldGUnKSwKKyAgICAgICAgICAgIChPdGhlclJlZmVyZW5jZUNoYW5nZSwgJ3VwZGF0ZScpLAorICAgICAgICAgICAgKE90aGVyUmVmZXJlbmNlQ2hhbmdlLCAnY3JlYXRlJyksCisgICAgICAgICAgICAoT3RoZXJSZWZlcmVuY2VDaGFuZ2UsICdkZWxldGUnKSwKKyAgICAgICAgICAgIF0pCisgICAgICAgICkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnZpcm9ubWVudCwgY2hhbmdlcywgaWdub3JlX290aGVyX3JlZnM9RmFsc2UpOgorICAgICAgICBzZWxmLmNoYW5nZXMgPSBzb3J0ZWQoY2hhbmdlcywga2V5PXNlbGYuX3NvcnRfa2V5KQorICAgICAgICBzZWxmLl9fb3RoZXJfcmVmX3NoYTFzID0gTm9uZQorICAgICAgICBzZWxmLl9fY2FjaGVkX2NvbW1pdHNfc3BlYyA9IHt9CisgICAgICAgIHNlbGYuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudAorCisgICAgICAgIGlmIGlnbm9yZV9vdGhlcl9yZWZzOgorICAgICAgICAgICAgc2VsZi5fX290aGVyX3JlZl9zaGExcyA9IHNldCgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3NvcnRfa2V5KGtsYXNzLCBjaGFuZ2UpOgorICAgICAgICByZXR1cm4gKGtsYXNzLlNPUlRfT1JERVJbY2hhbmdlLl9fY2xhc3NfXywgY2hhbmdlLmNoYW5nZV90eXBlXSwgY2hhbmdlLnJlZm5hbWUsKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9vdGhlcl9yZWZfc2hhMXMoc2VsZik6CisgICAgICAgICIiIlRoZSBHaXRPYmplY3RzIHJlZmVycmVkIHRvIGJ5IHJlZmVyZW5jZXMgdW5hZmZlY3RlZCBieSB0aGlzIHB1c2guCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9fb3RoZXJfcmVmX3NoYTFzIGlzIE5vbmU6CisgICAgICAgICAgICAjIFRoZSByZWZuYW1lcyBiZWluZyBjaGFuZ2VkIGJ5IHRoaXMgcHVzaDoKKyAgICAgICAgICAgIHVwZGF0ZWRfcmVmcyA9IHNldCgKKyAgICAgICAgICAgICAgICBjaGFuZ2UucmVmbmFtZQorICAgICAgICAgICAgICAgIGZvciBjaGFuZ2UgaW4gc2VsZi5jaGFuZ2VzCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICAjIFRoZSBTSEEtMXMgb2YgY29tbWl0cyByZWZlcnJlZCB0byBieSBhbGwgcmVmZXJlbmNlcyBpbiB0aGlzCisgICAgICAgICAgICAjIHJlcG9zaXRvcnkgKmV4Y2VwdCogdXBkYXRlZF9yZWZzOgorICAgICAgICAgICAgc2hhMXMgPSBzZXQoKQorICAgICAgICAgICAgZm10ID0gKAorICAgICAgICAgICAgICAgICclKG9iamVjdG5hbWUpICUob2JqZWN0dHlwZSkgJShyZWZuYW1lKVxuJworICAgICAgICAgICAgICAgICclKCpvYmplY3RuYW1lKSAlKCpvYmplY3R0eXBlKSAlKHJlZm5hbWUpJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHJlZl9maWx0ZXJfcmVnZXgsIGlzX2luY2x1c2lvbl9maWx0ZXIgPSBcCisgICAgICAgICAgICAgICAgc2VsZi5lbnZpcm9ubWVudC5nZXRfcmVmX2ZpbHRlcl9yZWdleCgpCisgICAgICAgICAgICBmb3IgbGluZSBpbiByZWFkX2dpdF9saW5lcygKKyAgICAgICAgICAgICAgICAgICAgWydmb3ItZWFjaC1yZWYnLCAnLS1mb3JtYXQ9JXMnICUgKGZtdCwpXSk6CisgICAgICAgICAgICAgICAgKHNoYTEsIHR5cGUsIG5hbWUpID0gbGluZS5zcGxpdCgnICcsIDIpCisgICAgICAgICAgICAgICAgaWYgKHNoYTEgYW5kIHR5cGUgPT0gJ2NvbW1pdCcgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIG5vdCBpbiB1cGRhdGVkX3JlZnMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX3JlZihuYW1lLCByZWZfZmlsdGVyX3JlZ2V4LCBpc19pbmNsdXNpb25fZmlsdGVyKSk6CisgICAgICAgICAgICAgICAgICAgIHNoYTFzLmFkZChzaGExKQorCisgICAgICAgICAgICBzZWxmLl9fb3RoZXJfcmVmX3NoYTFzID0gc2hhMXMKKworICAgICAgICByZXR1cm4gc2VsZi5fX290aGVyX3JlZl9zaGExcworCisgICAgZGVmIF9nZXRfY29tbWl0c19zcGVjX2luY2woc2VsZiwgbmV3X29yX29sZCwgcmVmZXJlbmNlX2NoYW5nZT1Ob25lKToKKyAgICAgICAgIiIiR2V0IG5ldyBvciBvbGQgU0hBLTEgZnJvbSBvbmUgb3IgZWFjaCBvZiB0aGUgY2hhbmdlZCByZWZzLgorCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgU0hBLTEgY29tbWl0IGlkZW50aWZpZXIgc3RyaW5ncyBzdWl0YWJsZSBhcworICAgICAgICBhcmd1bWVudHMgdG8gJ2dpdCByZXYtbGlzdCcgKG9yICdnaXQgbG9nJyBvciAuLi4pLiAgVGhlCisgICAgICAgIHJldHVybmVkIGlkZW50aWZpZXJzIGFyZSBlaXRoZXIgdGhlIG9sZCBvciBuZXcgdmFsdWVzIGZyb20gb25lCisgICAgICAgIG9yIGFsbCBvZiB0aGUgY2hhbmdlZCByZWZlcmVuY2VzLCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlcyBvZgorICAgICAgICBuZXdfb3Jfb2xkIGFuZCByZWZlcmVuY2VfY2hhbmdlLgorCisgICAgICAgIG5ld19vcl9vbGQgaXMgZWl0aGVyIHRoZSBzdHJpbmcgJ25ldycgb3IgdGhlIHN0cmluZyAnb2xkJy4gIElmCisgICAgICAgICduZXcnLCB0aGUgcmV0dXJuZWQgU0hBLTEgaWRlbnRpZmllcnMgYXJlIHRoZSBuZXcgdmFsdWVzIGZyb20KKyAgICAgICAgZWFjaCBjaGFuZ2VkIHJlZmVyZW5jZS4gIElmICdvbGQnLCB0aGUgU0hBLTEgaWRlbnRpZmllcnMgYXJlCisgICAgICAgIHRoZSBvbGQgdmFsdWVzIGZyb20gZWFjaCBjaGFuZ2VkIHJlZmVyZW5jZS4KKworICAgICAgICBJZiByZWZlcmVuY2VfY2hhbmdlIGlzIHNwZWNpZmllZCBhbmQgbm90IE5vbmUsIG9ubHkgdGhlIG5ldyBvcgorICAgICAgICBvbGQgcmVmZXJlbmNlIGZyb20gdGhlIHNwZWNpZmllZCByZWZlcmVuY2UgaXMgaW5jbHVkZWQgaW4gdGhlCisgICAgICAgIHJldHVybiB2YWx1ZS4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgTm9uZSBpZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgcmV2aXNpb25zCisgICAgICAgIChlLmcuLCBiZWNhdXNlIGEgYnJhbmNoIHdhcyBkZWxldGVkIGFuZCBuZXdfb3Jfb2xkIGlzICduZXcnKS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IHJlZmVyZW5jZV9jaGFuZ2U6CisgICAgICAgICAgICBpbmNsX3NwZWMgPSBzb3J0ZWQoCisgICAgICAgICAgICAgICAgZ2V0YXR0cihjaGFuZ2UsIG5ld19vcl9vbGQpLnNoYTEKKyAgICAgICAgICAgICAgICBmb3IgY2hhbmdlIGluIHNlbGYuY2hhbmdlcworICAgICAgICAgICAgICAgIGlmIGdldGF0dHIoY2hhbmdlLCBuZXdfb3Jfb2xkKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGlmIG5vdCBpbmNsX3NwZWM6CisgICAgICAgICAgICAgICAgaW5jbF9zcGVjID0gTm9uZQorICAgICAgICBlbGlmIG5vdCBnZXRhdHRyKHJlZmVyZW5jZV9jaGFuZ2UsIG5ld19vcl9vbGQpLmNvbW1pdF9zaGExOgorICAgICAgICAgICAgaW5jbF9zcGVjID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5jbF9zcGVjID0gW2dldGF0dHIocmVmZXJlbmNlX2NoYW5nZSwgbmV3X29yX29sZCkuY29tbWl0X3NoYTFdCisgICAgICAgIHJldHVybiBpbmNsX3NwZWMKKworICAgIGRlZiBfZ2V0X2NvbW1pdHNfc3BlY19leGNsKHNlbGYsIG5ld19vcl9vbGQpOgorICAgICAgICAiIiJHZXQgZXhjbHVzaW9uIHJldmlzaW9ucyBmb3IgZGV0ZXJtaW5pbmcgbmV3IG9yIGRpc2NhcmRlZCBjb21taXRzLgorCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2Ygc3RyaW5ncyBzdWl0YWJsZSBhcyBhcmd1bWVudHMgdG8gJ2dpdAorICAgICAgICByZXYtbGlzdCcgKG9yICdnaXQgbG9nJyBvciAuLi4pIHRoYXQgd2lsbCBleGNsdWRlIGFsbAorICAgICAgICBjb21taXRzIHRoYXQsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgbmV3X29yX29sZCwgd2VyZQorICAgICAgICBlaXRoZXIgcHJldmlvdXNseSBpbiB0aGUgcmVwb3NpdG9yeSAodXNlZnVsIGZvciBkZXRlcm1pbmluZworICAgICAgICB3aGljaCBjb21taXRzIGFyZSBuZXcgdG8gdGhlIHJlcG9zaXRvcnkpIG9yIGN1cnJlbnRseSBpbiB0aGUKKyAgICAgICAgcmVwb3NpdG9yeSAodXNlZnVsIGZvciBkZXRlcm1pbmluZyB3aGljaCBjb21taXRzIHdlcmUKKyAgICAgICAgZGlzY2FyZGVkIGZyb20gdGhlIHJlcG9zaXRvcnkpLgorCisgICAgICAgIG5ld19vcl9vbGQgaXMgZWl0aGVyIHRoZSBzdHJpbmcgJ25ldycgb3IgdGhlIHN0cmluZyAnb2xkJy4gIElmCisgICAgICAgICduZXcnLCB0aGUgY29tbWl0cyB0byBiZSBleGNsdWRlZCBhcmUgdGhvc2UgdGhhdCB3ZXJlIGluIHRoZQorICAgICAgICByZXBvc2l0b3J5IGJlZm9yZSB0aGUgcHVzaC4gIElmICdvbGQnLCB0aGUgY29tbWl0cyB0byBiZQorICAgICAgICBleGNsdWRlZCBhcmUgdGhvc2UgdGhhdCBhcmUgY3VycmVudGx5IGluIHRoZSByZXBvc2l0b3J5LiAgIiIiCisKKyAgICAgICAgb2xkX29yX25ldyA9IHsnb2xkJzogJ25ldycsICduZXcnOiAnb2xkJ31bbmV3X29yX29sZF0KKyAgICAgICAgZXhjbF9yZXZzID0gc2VsZi5fb3RoZXJfcmVmX3NoYTFzLnVuaW9uKAorICAgICAgICAgICAgZ2V0YXR0cihjaGFuZ2UsIG9sZF9vcl9uZXcpLnNoYTEKKyAgICAgICAgICAgIGZvciBjaGFuZ2UgaW4gc2VsZi5jaGFuZ2VzCisgICAgICAgICAgICBpZiBnZXRhdHRyKGNoYW5nZSwgb2xkX29yX25ldykudHlwZSBpbiBbJ2NvbW1pdCcsICd0YWcnXQorICAgICAgICAgICAgKQorICAgICAgICByZXR1cm4gWydeJyArIHNoYTEgZm9yIHNoYTEgaW4gc29ydGVkKGV4Y2xfcmV2cyldCisKKyAgICBkZWYgZ2V0X2NvbW1pdHNfc3BlYyhzZWxmLCBuZXdfb3Jfb2xkLCByZWZlcmVuY2VfY2hhbmdlPU5vbmUpOgorICAgICAgICAiIiJHZXQgcmV2LWxpc3QgYXJndW1lbnRzIGZvciBhZGRlZCBvciBkaXNjYXJkZWQgY29tbWl0cy4KKworICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHN0cmluZ3Mgc3VpdGFibGUgYXMgYXJndW1lbnRzIHRvICdnaXQKKyAgICAgICAgcmV2LWxpc3QnIChvciAnZ2l0IGxvZycgb3IgLi4uKSB0aGF0IHNlbGVjdCB0aG9zZSBjb21taXRzCisgICAgICAgIHRoYXQsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgbmV3X29yX29sZCwgYXJlIGVpdGhlciBuZXcgdG8KKyAgICAgICAgdGhlIHJlcG9zaXRvcnkgb3Igd2VyZSBkaXNjYXJkZWQgZnJvbSB0aGUgcmVwb3NpdG9yeS4KKworICAgICAgICBuZXdfb3Jfb2xkIGlzIGVpdGhlciB0aGUgc3RyaW5nICduZXcnIG9yIHRoZSBzdHJpbmcgJ29sZCcuICBJZgorICAgICAgICAnbmV3JywgdGhlIHJldHVybmVkIGxpc3QgaXMgdXNlZCB0byBzZWxlY3QgY29tbWl0cyB0aGF0IGFyZQorICAgICAgICBuZXcgdG8gdGhlIHJlcG9zaXRvcnkuICBJZiAnb2xkJywgdGhlIHJldHVybmVkIHZhbHVlIGlzIHVzZWQKKyAgICAgICAgdG8gc2VsZWN0IHRoZSBjb21taXRzIHRoYXQgaGF2ZSBiZWVuIGRpc2NhcmRlZCBmcm9tIHRoZQorICAgICAgICByZXBvc2l0b3J5LgorCisgICAgICAgIElmIHJlZmVyZW5jZV9jaGFuZ2UgaXMgc3BlY2lmaWVkIGFuZCBub3QgTm9uZSwgdGhlIG5ldyBvcgorICAgICAgICBkaXNjYXJkZWQgY29tbWl0cyBhcmUgbGltaXRlZCB0byB0aG9zZSB0aGF0IGFyZSByZWFjaGFibGUgZnJvbQorICAgICAgICB0aGUgbmV3IG9yIG9sZCB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZS4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgTm9uZSBpZiB0aGVyZSBhcmUgbm8gYWRkZWQgKG9yIGRpc2NhcmRlZCkKKyAgICAgICAgcmV2aXNpb25zLgorICAgICAgICAiIiIKKyAgICAgICAga2V5ID0gKG5ld19vcl9vbGQsIHJlZmVyZW5jZV9jaGFuZ2UpCisgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZi5fX2NhY2hlZF9jb21taXRzX3NwZWM6CisgICAgICAgICAgICByZXQgPSBzZWxmLl9nZXRfY29tbWl0c19zcGVjX2luY2wobmV3X29yX29sZCwgcmVmZXJlbmNlX2NoYW5nZSkKKyAgICAgICAgICAgIGlmIHJldCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXQuZXh0ZW5kKHNlbGYuX2dldF9jb21taXRzX3NwZWNfZXhjbChuZXdfb3Jfb2xkKSkKKyAgICAgICAgICAgIHNlbGYuX19jYWNoZWRfY29tbWl0c19zcGVjW2tleV0gPSByZXQKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jYWNoZWRfY29tbWl0c19zcGVjW2tleV0KKworICAgIGRlZiBnZXRfbmV3X2NvbW1pdHMoc2VsZiwgcmVmZXJlbmNlX2NoYW5nZT1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBjb21taXRzIGFkZGVkIGJ5IHRoaXMgcHVzaC4KKworICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHRoZSBvYmplY3QgbmFtZXMgb2YgY29tbWl0cyB0aGF0IHdlcmUgYWRkZWQKKyAgICAgICAgYnkgdGhlIHBhcnQgb2YgdGhpcyBwdXNoIHJlcHJlc2VudGVkIGJ5IHJlZmVyZW5jZV9jaGFuZ2UuICBJZgorICAgICAgICByZWZlcmVuY2VfY2hhbmdlIGlzIE5vbmUsIHRoZW4gcmV0dXJuIGEgbGlzdCBvZiAqYWxsKiBjb21taXRzCisgICAgICAgIGFkZGVkIGJ5IHRoaXMgcHVzaC4iIiIKKworICAgICAgICBzcGVjID0gc2VsZi5nZXRfY29tbWl0c19zcGVjKCduZXcnLCByZWZlcmVuY2VfY2hhbmdlKQorICAgICAgICByZXR1cm4gZ2l0X3Jldl9saXN0KHNwZWMpCisKKyAgICBkZWYgZ2V0X2Rpc2NhcmRlZF9jb21taXRzKHNlbGYsIHJlZmVyZW5jZV9jaGFuZ2UpOgorICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGNvbW1pdHMgZGlzY2FyZGVkIGJ5IHRoaXMgcHVzaC4KKworICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHRoZSBvYmplY3QgbmFtZXMgb2YgY29tbWl0cyB0aGF0IHdlcmUKKyAgICAgICAgZW50aXJlbHkgZGlzY2FyZGVkIGZyb20gdGhlIHJlcG9zaXRvcnkgYnkgdGhlIHBhcnQgb2YgdGhpcworICAgICAgICBwdXNoIHJlcHJlc2VudGVkIGJ5IHJlZmVyZW5jZV9jaGFuZ2UuIiIiCisKKyAgICAgICAgc3BlYyA9IHNlbGYuZ2V0X2NvbW1pdHNfc3BlYygnb2xkJywgcmVmZXJlbmNlX2NoYW5nZSkKKyAgICAgICAgcmV0dXJuIGdpdF9yZXZfbGlzdChzcGVjKQorCisgICAgZGVmIHNlbmRfZW1haWxzKHNlbGYsIG1haWxlciwgYm9keV9maWx0ZXI9Tm9uZSk6CisgICAgICAgICIiIlVzZSBzZW5kIGFsbCBvZiB0aGUgbm90aWZpY2F0aW9uIGVtYWlscyBuZWVkZWQgZm9yIHRoaXMgcHVzaC4KKworICAgICAgICBVc2Ugc2VuZCBhbGwgb2YgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbHMgKGluY2x1ZGluZyByZWZlcmVuY2UKKyAgICAgICAgY2hhbmdlIGVtYWlscyBhbmQgY29tbWl0IGVtYWlscykgbmVlZGVkIGZvciB0aGlzIHB1c2guICBTZW5kCisgICAgICAgIHRoZSBlbWFpbHMgdXNpbmcgbWFpbGVyLiAgSWYgYm9keV9maWx0ZXIgaXMgbm90IE5vbmUsIHRoZW4gdXNlCisgICAgICAgIGl0IHRvIGZpbHRlciB0aGUgbGluZXMgdGhhdCBhcmUgaW50ZW5kZWQgZm9yIHRoZSBlbWFpbAorICAgICAgICBib2R5LiIiIgorCisgICAgICAgICMgVGhlIHNoYTFzIG9mIGNvbW1pdHMgdGhhdCB3ZXJlIGludHJvZHVjZWQgYnkgdGhpcyBwdXNoLgorICAgICAgICAjIFRoZXkgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhpcyBzZXQgYXMgdGhleSBhcmUgcHJvY2Vzc2VkLCB0bworICAgICAgICAjIGd1YXJhbnRlZSB0aGF0IG9uZSAoYW5kIG9ubHkgb25lKSBlbWFpbCBpcyBnZW5lcmF0ZWQgZm9yCisgICAgICAgICMgZWFjaCBuZXcgY29tbWl0LgorICAgICAgICB1bmhhbmRsZWRfc2hhMXMgPSBzZXQoc2VsZi5nZXRfbmV3X2NvbW1pdHMoKSkKKyAgICAgICAgc2VuZF9kYXRlID0gSW5jcmVtZW50YWxEYXRlVGltZSgpCisgICAgICAgIGZvciBjaGFuZ2UgaW4gc2VsZi5jaGFuZ2VzOgorICAgICAgICAgICAgc2hhMXMgPSBbXQorICAgICAgICAgICAgZm9yIHNoYTEgaW4gcmV2ZXJzZWQobGlzdChzZWxmLmdldF9uZXdfY29tbWl0cyhjaGFuZ2UpKSk6CisgICAgICAgICAgICAgICAgaWYgc2hhMSBpbiB1bmhhbmRsZWRfc2hhMXM6CisgICAgICAgICAgICAgICAgICAgIHNoYTFzLmFwcGVuZChzaGExKQorICAgICAgICAgICAgICAgICAgICB1bmhhbmRsZWRfc2hhMXMucmVtb3ZlKHNoYTEpCisKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgd2UndmUgZ290IGFueW9uZSB0byBzZW5kIHRvCisgICAgICAgICAgICBpZiBub3QgY2hhbmdlLnJlY2lwaWVudHM6CisgICAgICAgICAgICAgICAgY2hhbmdlLmVudmlyb25tZW50LmxvZ193YXJuaW5nKAorICAgICAgICAgICAgICAgICAgICAnKioqIG5vIHJlY2lwaWVudHMgY29uZmlndXJlZCBzbyBubyBlbWFpbCB3aWxsIGJlIHNlbnRcbicKKyAgICAgICAgICAgICAgICAgICAgJyoqKiBmb3IgJXIgdXBkYXRlICVzLT4lcycKKyAgICAgICAgICAgICAgICAgICAgJSAoY2hhbmdlLnJlZm5hbWUsIGNoYW5nZS5vbGQuc2hhMSwgY2hhbmdlLm5ldy5zaGExLCkKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBub3QgY2hhbmdlLmVudmlyb25tZW50LnF1aWV0OgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2UuZW52aXJvbm1lbnQubG9nX21zZygKKyAgICAgICAgICAgICAgICAgICAgICAgICdTZW5kaW5nIG5vdGlmaWNhdGlvbiBlbWFpbHMgdG86ICVzJyAlIChjaGFuZ2UucmVjaXBpZW50cywpKQorICAgICAgICAgICAgICAgIGV4dHJhX3ZhbHVlcyA9IHsnc2VuZF9kYXRlJzogbmV4dChzZW5kX2RhdGUpfQorCisgICAgICAgICAgICAgICAgcmV2ID0gY2hhbmdlLnNlbmRfc2luZ2xlX2NvbWJpbmVkX2VtYWlsKHNoYTFzKQorICAgICAgICAgICAgICAgIGlmIHJldjoKKyAgICAgICAgICAgICAgICAgICAgbWFpbGVyLnNlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UuZ2VuZXJhdGVfY29tYmluZWRfZW1haWwoc2VsZiwgcmV2LCBib2R5X2ZpbHRlciwgZXh0cmFfdmFsdWVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldi5yZWNpcGllbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgY2hhbmdlIGlzIG5vdyBmdWxseSBoYW5kbGVkOyBubyBuZWVkIHRvIGhhbmRsZQorICAgICAgICAgICAgICAgICAgICAjIGluZGl2aWR1YWwgcmV2aXNpb25zIGFueSBmdXJ0aGVyLgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1haWxlci5zZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlLmdlbmVyYXRlX2VtYWlsKHNlbGYsIGJvZHlfZmlsdGVyLCBleHRyYV92YWx1ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlLnJlY2lwaWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgIG1heF9lbWFpbHMgPSBjaGFuZ2UuZW52aXJvbm1lbnQubWF4Y29tbWl0ZW1haWxzCisgICAgICAgICAgICBpZiBtYXhfZW1haWxzIGFuZCBsZW4oc2hhMXMpID4gbWF4X2VtYWlsczoKKyAgICAgICAgICAgICAgICBjaGFuZ2UuZW52aXJvbm1lbnQubG9nX3dhcm5pbmcoCisgICAgICAgICAgICAgICAgICAgICcqKiogVG9vIG1hbnkgbmV3IGNvbW1pdHMgKCVkKSwgbm90IHNlbmRpbmcgY29tbWl0IGVtYWlscy5cbicgJSBsZW4oc2hhMXMpICsKKyAgICAgICAgICAgICAgICAgICAgJyoqKiBUcnkgc2V0dGluZyBtdWx0aW1haWxob29rLm1heENvbW1pdEVtYWlscyB0byBhIGdyZWF0ZXIgdmFsdWVcbicgKworICAgICAgICAgICAgICAgICAgICAnKioqIEN1cnJlbnRseSwgbXVsdGltYWlsaG9vay5tYXhDb21taXRFbWFpbHM9JWQnICUgbWF4X2VtYWlscworICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGZvciAobnVtLCBzaGExKSBpbiBlbnVtZXJhdGUoc2hhMXMpOgorICAgICAgICAgICAgICAgIHJldiA9IFJldmlzaW9uKGNoYW5nZSwgR2l0T2JqZWN0KHNoYTEpLCBudW09bnVtICsgMSwgdG90PWxlbihzaGExcykpCisgICAgICAgICAgICAgICAgaWYgbGVuKHJldi5wYXJlbnRzKSA+IDEgYW5kIGNoYW5nZS5lbnZpcm9ubWVudC5leGNsdWRlbWVyZ2VyZXZpc2lvbnM6CisgICAgICAgICAgICAgICAgICAgICMgc2tpcHBpbmcgYSBtZXJnZSBjb21taXQKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBub3QgcmV2LnJlY2lwaWVudHMgYW5kIHJldi5jY19yZWNpcGllbnRzOgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2UuZW52aXJvbm1lbnQubG9nX21zZygnKioqIFJlcGxhY2luZyBDYzogd2l0aCBUbzonKQorICAgICAgICAgICAgICAgICAgICByZXYucmVjaXBpZW50cyA9IHJldi5jY19yZWNpcGllbnRzCisgICAgICAgICAgICAgICAgICAgIHJldi5jY19yZWNpcGllbnRzID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIHJldi5yZWNpcGllbnRzOgorICAgICAgICAgICAgICAgICAgICBleHRyYV92YWx1ZXMgPSB7J3NlbmRfZGF0ZSc6IG5leHQoc2VuZF9kYXRlKX0KKyAgICAgICAgICAgICAgICAgICAgbWFpbGVyLnNlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICByZXYuZ2VuZXJhdGVfZW1haWwoc2VsZiwgYm9keV9maWx0ZXIsIGV4dHJhX3ZhbHVlcyksCisgICAgICAgICAgICAgICAgICAgICAgICByZXYucmVjaXBpZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICAjIENvbnNpc3RlbmN5IGNoZWNrOgorICAgICAgICBpZiB1bmhhbmRsZWRfc2hhMXM6CisgICAgICAgICAgICBjaGFuZ2UuZW52aXJvbm1lbnQubG9nX2Vycm9yKAorICAgICAgICAgICAgICAgICdFUlJPUjogTm8gZW1haWxzIHdlcmUgc2VudCBmb3IgdGhlIGZvbGxvd2luZyBuZXcgY29tbWl0czpcbicKKyAgICAgICAgICAgICAgICAnICAgICVzJworICAgICAgICAgICAgICAgICUgKCdcbiAgICAnLmpvaW4oc29ydGVkKHVuaGFuZGxlZF9zaGExcykpLCkKKyAgICAgICAgICAgICAgICApCisKKworZGVmIGluY2x1ZGVfcmVmKHJlZm5hbWUsIHJlZl9maWx0ZXJfcmVnZXgsIGlzX2luY2x1c2lvbl9maWx0ZXIpOgorICAgIGRvZXNfbWF0Y2ggPSBib29sKHJlZl9maWx0ZXJfcmVnZXguc2VhcmNoKHJlZm5hbWUpKQorICAgIGlmIGlzX2luY2x1c2lvbl9maWx0ZXI6CisgICAgICAgIHJldHVybiBkb2VzX21hdGNoCisgICAgZWxzZTogICMgZXhjbHVzaW9uIGZpbHRlciAtLSB3ZSBpbmNsdWRlIHRoZSByZWYgaWYgdGhlIHJlZ2V4IGRvZXNuJ3QgbWF0Y2gKKyAgICAgICAgcmV0dXJuIG5vdCBkb2VzX21hdGNoCisKKworZGVmIHJ1bl9hc19wb3N0X3JlY2VpdmVfaG9vayhlbnZpcm9ubWVudCwgbWFpbGVyKToKKyAgICBlbnZpcm9ubWVudC5jaGVjaygpCisgICAgc2VuZF9maWx0ZXJfcmVnZXgsIHNlbmRfaXNfaW5jbHVzaW9uX2ZpbHRlciA9IGVudmlyb25tZW50LmdldF9yZWZfZmlsdGVyX3JlZ2V4KFRydWUpCisgICAgcmVmX2ZpbHRlcl9yZWdleCwgaXNfaW5jbHVzaW9uX2ZpbHRlciA9IGVudmlyb25tZW50LmdldF9yZWZfZmlsdGVyX3JlZ2V4KEZhbHNlKQorICAgIGNoYW5nZXMgPSBbXQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGxpbmUgPSByZWFkX2xpbmUoc3lzLnN0ZGluKQorICAgICAgICBpZiBsaW5lID09ICcnOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgKG9sZHJldiwgbmV3cmV2LCByZWZuYW1lKSA9IGxpbmUuc3RyaXAoKS5zcGxpdCgnICcsIDIpCisgICAgICAgIGVudmlyb25tZW50LmdldF9sb2dnZXIoKS5kZWJ1ZygKKyAgICAgICAgICAgICJydW5fYXNfcG9zdF9yZWNlaXZlX2hvb2s6IG9sZHJldj0lcywgbmV3cmV2PSVzLCByZWZuYW1lPSVzIiAlCisgICAgICAgICAgICAob2xkcmV2LCBuZXdyZXYsIHJlZm5hbWUpKQorCisgICAgICAgIGlmIG5vdCBpbmNsdWRlX3JlZihyZWZuYW1lLCByZWZfZmlsdGVyX3JlZ2V4LCBpc19pbmNsdXNpb25fZmlsdGVyKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIG5vdCBpbmNsdWRlX3JlZihyZWZuYW1lLCBzZW5kX2ZpbHRlcl9yZWdleCwgc2VuZF9pc19pbmNsdXNpb25fZmlsdGVyKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGNoYW5nZXMuYXBwZW5kKAorICAgICAgICAgICAgUmVmZXJlbmNlQ2hhbmdlLmNyZWF0ZShlbnZpcm9ubWVudCwgb2xkcmV2LCBuZXdyZXYsIHJlZm5hbWUpCisgICAgICAgICAgICApCisgICAgaWYgbm90IGNoYW5nZXM6CisgICAgICAgIG1haWxlci5jbG9zZSgpCisgICAgICAgIHJldHVybgorICAgIHB1c2ggPSBQdXNoKGVudmlyb25tZW50LCBjaGFuZ2VzKQorICAgIHRyeToKKyAgICAgICAgcHVzaC5zZW5kX2VtYWlscyhtYWlsZXIsIGJvZHlfZmlsdGVyPWVudmlyb25tZW50LmZpbHRlcl9ib2R5KQorICAgIGZpbmFsbHk6CisgICAgICAgIG1haWxlci5jbG9zZSgpCisKKworZGVmIHJ1bl9hc191cGRhdGVfaG9vayhlbnZpcm9ubWVudCwgbWFpbGVyLCByZWZuYW1lLCBvbGRyZXYsIG5ld3JldiwgZm9yY2Vfc2VuZD1GYWxzZSk6CisgICAgZW52aXJvbm1lbnQuY2hlY2soKQorICAgIHNlbmRfZmlsdGVyX3JlZ2V4LCBzZW5kX2lzX2luY2x1c2lvbl9maWx0ZXIgPSBlbnZpcm9ubWVudC5nZXRfcmVmX2ZpbHRlcl9yZWdleChUcnVlKQorICAgIHJlZl9maWx0ZXJfcmVnZXgsIGlzX2luY2x1c2lvbl9maWx0ZXIgPSBlbnZpcm9ubWVudC5nZXRfcmVmX2ZpbHRlcl9yZWdleChGYWxzZSkKKyAgICBpZiBub3QgaW5jbHVkZV9yZWYocmVmbmFtZSwgcmVmX2ZpbHRlcl9yZWdleCwgaXNfaW5jbHVzaW9uX2ZpbHRlcik6CisgICAgICAgIHJldHVybgorICAgIGlmIG5vdCBpbmNsdWRlX3JlZihyZWZuYW1lLCBzZW5kX2ZpbHRlcl9yZWdleCwgc2VuZF9pc19pbmNsdXNpb25fZmlsdGVyKToKKyAgICAgICAgcmV0dXJuCisgICAgY2hhbmdlcyA9IFsKKyAgICAgICAgUmVmZXJlbmNlQ2hhbmdlLmNyZWF0ZSgKKyAgICAgICAgICAgIGVudmlyb25tZW50LAorICAgICAgICAgICAgcmVhZF9naXRfb3V0cHV0KFsncmV2LXBhcnNlJywgJy0tdmVyaWZ5Jywgb2xkcmV2XSksCisgICAgICAgICAgICByZWFkX2dpdF9vdXRwdXQoWydyZXYtcGFyc2UnLCAnLS12ZXJpZnknLCBuZXdyZXZdKSwKKyAgICAgICAgICAgIHJlZm5hbWUsCisgICAgICAgICAgICApLAorICAgICAgICBdCisgICAgaWYgbm90IGNoYW5nZXM6CisgICAgICAgIG1haWxlci5jbG9zZSgpCisgICAgICAgIHJldHVybgorICAgIHB1c2ggPSBQdXNoKGVudmlyb25tZW50LCBjaGFuZ2VzLCBmb3JjZV9zZW5kKQorICAgIHRyeToKKyAgICAgICAgcHVzaC5zZW5kX2VtYWlscyhtYWlsZXIsIGJvZHlfZmlsdGVyPWVudmlyb25tZW50LmZpbHRlcl9ib2R5KQorICAgIGZpbmFsbHk6CisgICAgICAgIG1haWxlci5jbG9zZSgpCisKKworZGVmIGNoZWNrX3JlZl9maWx0ZXIoZW52aXJvbm1lbnQpOgorICAgIHNlbmRfZmlsdGVyX3JlZ2V4LCBzZW5kX2lzX2luY2x1c2lvbiA9IGVudmlyb25tZW50LmdldF9yZWZfZmlsdGVyX3JlZ2V4KFRydWUpCisgICAgcmVmX2ZpbHRlcl9yZWdleCwgcmVmX2lzX2luY2x1c2lvbiA9IGVudmlyb25tZW50LmdldF9yZWZfZmlsdGVyX3JlZ2V4KEZhbHNlKQorCisgICAgZGVmIGluY19leGNfbHVzaW9uKGIpOgorICAgICAgICBpZiBiOgorICAgICAgICAgICAgcmV0dXJuICdpbmNsdXNpb24nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJ2V4Y2x1c2lvbicKKworICAgIGlmIHNlbmRfZmlsdGVyX3JlZ2V4OgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJEb1NlbmQvRG9udFNlbmQgZmlsdGVyIHJlZ2V4ICgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaW5jX2V4Y19sdXNpb24oc2VuZF9pc19pbmNsdXNpb24pKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgJyk6ICcgKyBzZW5kX2ZpbHRlcl9yZWdleC5wYXR0ZXJuICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nKQorICAgIGlmIHNlbmRfZmlsdGVyX3JlZ2V4OgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJJbmNsdWRlL0V4Y2x1ZGUgZmlsdGVyIHJlZ2V4ICgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaW5jX2V4Y19sdXNpb24ocmVmX2lzX2luY2x1c2lvbikpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAnKTogJyArIHJlZl9maWx0ZXJfcmVnZXgucGF0dGVybiArCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJykKKyAgICBzeXMuc3Rkb3V0LndyaXRlKG9zLmxpbmVzZXApCisKKyAgICBzeXMuc3Rkb3V0LndyaXRlKAorICAgICAgICAiUmVmcyBtYXJrZWQgYXMgRVhDTFVERSBhcmUgZXhjbHVkZWQgYnkgZWl0aGVyIHJlZkZpbHRlckluY2x1c2lvblJlZ2V4XG4iCisgICAgICAgICJvciByZWZGaWx0ZXJFeGNsdXNpb25SZWdleC4gTm8gZW1haWxzIHdpbGwgYmUgc2VudCBmb3IgY29tbWl0cyBpbmNsdWRlZFxuIgorICAgICAgICAiaW4gdGhlc2UgcmVmcy5cbiIKKyAgICAgICAgIlJlZnMgbWFya2VkIGFzIERPTlQtU0VORCBhcmUgZXhjbHVkZWQgYnkgZWl0aGVyIHJlZkZpbHRlckRvU2VuZFJlZ2V4IG9yXG4iCisgICAgICAgICJyZWZGaWx0ZXJEb250U2VuZFJlZ2V4LCBidXQgbm90IGJ5IGVpdGhlciByZWZGaWx0ZXJJbmNsdXNpb25SZWdleCBvclxuIgorICAgICAgICAicmVmRmlsdGVyRXhjbHVzaW9uUmVnZXguIEVtYWlscyB3aWxsIGJlIHNlbnQgZm9yIGNvbW1pdHMgaW5jbHVkZWQgaW4gdGhlc2VcbiIKKyAgICAgICAgInJlZnMgb25seSB3aGVuIHRoZSBjb21taXQgcmVhY2hlcyBhIHJlZiB3aGljaCBpc24ndCBleGNsdWRlZC5cbiIKKyAgICAgICAgIlJlZnMgbWFya2VkIGFzIERPLVNFTkQgYXJlIG5vdCBleGNsdWRlZCBieSBhbnkgZmlsdGVyLiBFbWFpbHMgd2lsbFxuIgorICAgICAgICAiYmUgc2VudCBub3JtYWxseSBmb3IgY29tbWl0cyBpbmNsdWRlZCBpbiB0aGVzZSByZWZzLlxuIikKKworICAgIHN5cy5zdGRvdXQud3JpdGUob3MubGluZXNlcCkKKworICAgIGZvciByZWZuYW1lIGluIHJlYWRfZ2l0X2xpbmVzKFsnZm9yLWVhY2gtcmVmJywgJy0tZm9ybWF0JywgJyUocmVmbmFtZSknXSk6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocmVmbmFtZSkKKyAgICAgICAgaWYgbm90IGluY2x1ZGVfcmVmKHJlZm5hbWUsIHJlZl9maWx0ZXJfcmVnZXgsIHJlZl9pc19pbmNsdXNpb24pOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnIEVYQ0xVREUnKQorICAgICAgICBlbGlmIG5vdCBpbmNsdWRlX3JlZihyZWZuYW1lLCBzZW5kX2ZpbHRlcl9yZWdleCwgc2VuZF9pc19pbmNsdXNpb24pOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnIERPTlQtU0VORCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcgRE8tU0VORCcpCisKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZShvcy5saW5lc2VwKQorCisKK2RlZiBzaG93X2VudihlbnZpcm9ubWVudCwgb3V0KToKKyAgICBvdXQud3JpdGUoJ0Vudmlyb25tZW50IHZhbHVlczpcbicpCisgICAgZm9yIChrLCB2KSBpbiBzb3J0ZWQoZW52aXJvbm1lbnQuZ2V0X3ZhbHVlcygpLml0ZW1zKCkpOgorICAgICAgICBpZiBrOiAgIyBEb24ndCBzaG93IHRoZSB7JycgOiAnJ30gcGFpci4KKyAgICAgICAgICAgIG91dC53cml0ZSgnICAgICVzIDogJXJcbicgJSAoaywgdikpCisgICAgb3V0LndyaXRlKCdcbicpCisgICAgIyBGbHVzaCB0byBhdm9pZCBpbnRlcmxlYXZpbmcgd2l0aCBmdXJ0aGVyIGxvZyBvdXRwdXQKKyAgICBvdXQuZmx1c2goKQorCisKK2RlZiBjaGVja19zZXR1cChlbnZpcm9ubWVudCk6CisgICAgZW52aXJvbm1lbnQuY2hlY2soKQorICAgIHNob3dfZW52KGVudmlyb25tZW50LCBzeXMuc3Rkb3V0KQorICAgIHN5cy5zdGRvdXQud3JpdGUoIk5vdywgY2hlY2tpbmcgdGhhdCBnaXQtbXVsdGltYWlsJ3Mgc3RhbmRhcmQgaW5wdXQgIgorICAgICAgICAgICAgICAgICAgICAgImlzIHByb3Blcmx5IHNldCAuLi4iICsgb3MubGluZXNlcCkKKyAgICBzeXMuc3Rkb3V0LndyaXRlKCJQbGVhc2UgdHlwZSBzb21lIHRleHQgYW5kIHRoZW4gcHJlc3MgUmV0dXJuIiArIG9zLmxpbmVzZXApCisgICAgc3RkaW4gPSBzeXMuc3RkaW4ucmVhZGxpbmUoKQorICAgIHN5cy5zdGRvdXQud3JpdGUoIllvdSBoYXZlIGp1c3QgZW50ZXJlZDoiICsgb3MubGluZXNlcCkKKyAgICBzeXMuc3Rkb3V0LndyaXRlKHN0ZGluKQorICAgIHN5cy5zdGRvdXQud3JpdGUoImdpdC1tdWx0aW1haWwgc2VlbXMgcHJvcGVybHkgc2V0IHVwLiIgKyBvcy5saW5lc2VwKQorCisKK2RlZiBjaG9vc2VfbWFpbGVyKGNvbmZpZywgZW52aXJvbm1lbnQpOgorICAgIG1haWxlciA9IGNvbmZpZy5nZXQoJ21haWxlcicsIGRlZmF1bHQ9J3NlbmRtYWlsJykKKworICAgIGlmIG1haWxlciA9PSAnc210cCc6CisgICAgICAgIHNtdHBzZXJ2ZXIgPSBjb25maWcuZ2V0KCdzbXRwc2VydmVyJywgZGVmYXVsdD0nbG9jYWxob3N0JykKKyAgICAgICAgc210cHNlcnZlcnRpbWVvdXQgPSBmbG9hdChjb25maWcuZ2V0KCdzbXRwc2VydmVydGltZW91dCcsIGRlZmF1bHQ9MTAuMCkpCisgICAgICAgIHNtdHBzZXJ2ZXJkZWJ1Z2xldmVsID0gaW50KGNvbmZpZy5nZXQoJ3NtdHBzZXJ2ZXJkZWJ1Z2xldmVsJywgZGVmYXVsdD0wKSkKKyAgICAgICAgc210cGVuY3J5cHRpb24gPSBjb25maWcuZ2V0KCdzbXRwZW5jcnlwdGlvbicsIGRlZmF1bHQ9J25vbmUnKQorICAgICAgICBzbXRwdXNlciA9IGNvbmZpZy5nZXQoJ3NtdHB1c2VyJywgZGVmYXVsdD0nJykKKyAgICAgICAgc210cHBhc3MgPSBjb25maWcuZ2V0KCdzbXRwcGFzcycsIGRlZmF1bHQ9JycpCisgICAgICAgIHNtdHBjYWNlcnRzID0gY29uZmlnLmdldCgnc210cGNhY2VydHMnLCBkZWZhdWx0PScnKQorICAgICAgICBtYWlsZXIgPSBTTVRQTWFpbGVyKAorICAgICAgICAgICAgZW52aXJvbm1lbnQsCisgICAgICAgICAgICBlbnZlbG9wZXNlbmRlcj0oZW52aXJvbm1lbnQuZ2V0X3NlbmRlcigpIG9yIGVudmlyb25tZW50LmdldF9mcm9tYWRkcigpKSwKKyAgICAgICAgICAgIHNtdHBzZXJ2ZXI9c210cHNlcnZlciwgc210cHNlcnZlcnRpbWVvdXQ9c210cHNlcnZlcnRpbWVvdXQsCisgICAgICAgICAgICBzbXRwc2VydmVyZGVidWdsZXZlbD1zbXRwc2VydmVyZGVidWdsZXZlbCwKKyAgICAgICAgICAgIHNtdHBlbmNyeXB0aW9uPXNtdHBlbmNyeXB0aW9uLAorICAgICAgICAgICAgc210cHVzZXI9c210cHVzZXIsCisgICAgICAgICAgICBzbXRwcGFzcz1zbXRwcGFzcywKKyAgICAgICAgICAgIHNtdHBjYWNlcnRzPXNtdHBjYWNlcnRzCisgICAgICAgICAgICApCisgICAgZWxpZiBtYWlsZXIgPT0gJ3NlbmRtYWlsJzoKKyAgICAgICAgY29tbWFuZCA9IGNvbmZpZy5nZXQoJ3NlbmRtYWlsY29tbWFuZCcpCisgICAgICAgIGlmIGNvbW1hbmQ6CisgICAgICAgICAgICBjb21tYW5kID0gc2hsZXguc3BsaXQoY29tbWFuZCkKKyAgICAgICAgbWFpbGVyID0gU2VuZE1haWxlcihlbnZpcm9ubWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPWNvbW1hbmQsIGVudmVsb3Blc2VuZGVyPWVudmlyb25tZW50LmdldF9zZW5kZXIoKSkKKyAgICBlbHNlOgorICAgICAgICBlbnZpcm9ubWVudC5sb2dfZXJyb3IoCisgICAgICAgICAgICAnZmF0YWw6IG11bHRpbWFpbGhvb2subWFpbGVyIGlzIHNldCB0byBhbiBpbmNvcnJlY3QgdmFsdWU6ICIlcyJcbicgJSBtYWlsZXIgKworICAgICAgICAgICAgJ3BsZWFzZSB1c2Ugb25lIG9mICJzbXRwIiBvciAic2VuZG1haWwiLicKKyAgICAgICAgICAgICkKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICByZXR1cm4gbWFpbGVyCisKKworS05PV05fRU5WSVJPTk1FTlRTID0geworICAgICdnZW5lcmljJzogeydoaWdocHJlYyc6IEdlbmVyaWNFbnZpcm9ubWVudE1peGlufSwKKyAgICAnZ2l0b2xpdGUnOiB7J2hpZ2hwcmVjJzogR2l0b2xpdGVFbnZpcm9ubWVudEhpZ2hQcmVjTWl4aW4sCisgICAgICAgICAgICAgICAgICdsb3dwcmVjJzogR2l0b2xpdGVFbnZpcm9ubWVudExvd1ByZWNNaXhpbn0sCisgICAgJ3N0YXNoJzogeydoaWdocHJlYyc6IFN0YXNoRW52aXJvbm1lbnRIaWdoUHJlY01peGluLAorICAgICAgICAgICAgICAnbG93cHJlYyc6IFN0YXNoRW52aXJvbm1lbnRMb3dQcmVjTWl4aW59LAorICAgICdnZXJyaXQnOiB7J2hpZ2hwcmVjJzogR2Vycml0RW52aXJvbm1lbnRIaWdoUHJlY01peGluLAorICAgICAgICAgICAgICAgJ2xvd3ByZWMnOiBHZXJyaXRFbnZpcm9ubWVudExvd1ByZWNNaXhpbn0sCisgICAgfQorCisKK2RlZiBjaG9vc2VfZW52aXJvbm1lbnQoY29uZmlnLCBvc2Vudj1Ob25lLCBlbnY9Tm9uZSwgcmVjaXBpZW50cz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBob29rX2luZm89Tm9uZSk6CisgICAgZW52X25hbWUgPSBjaG9vc2VfZW52aXJvbm1lbnRfbmFtZShjb25maWcsIGVudiwgb3NlbnYpCisgICAgZW52aXJvbm1lbnRfa2xhc3MgPSBidWlsZF9lbnZpcm9ubWVudF9rbGFzcyhlbnZfbmFtZSkKKyAgICBlbnYgPSBidWlsZF9lbnZpcm9ubWVudChlbnZpcm9ubWVudF9rbGFzcywgZW52X25hbWUsIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvc2VudiwgcmVjaXBpZW50cywgaG9va19pbmZvKQorICAgIHJldHVybiBlbnYKKworCitkZWYgY2hvb3NlX2Vudmlyb25tZW50X25hbWUoY29uZmlnLCBlbnYsIG9zZW52KToKKyAgICBpZiBub3Qgb3NlbnY6CisgICAgICAgIG9zZW52ID0gb3MuZW52aXJvbgorCisgICAgaWYgbm90IGVudjoKKyAgICAgICAgZW52ID0gY29uZmlnLmdldCgnZW52aXJvbm1lbnQnKQorCisgICAgaWYgbm90IGVudjoKKyAgICAgICAgaWYgJ0dMX1VTRVInIGluIG9zZW52IGFuZCAnR0xfUkVQTycgaW4gb3NlbnY6CisgICAgICAgICAgICBlbnYgPSAnZ2l0b2xpdGUnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbnYgPSAnZ2VuZXJpYycKKyAgICByZXR1cm4gZW52CisKKworQ09NTU9OX0VOVklST05NRU5UX01JWElOUyA9IFsKKyAgICBDb25maWdSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbiwKKyAgICBDTElSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbiwKKyAgICBDb25maWdSZWZGaWx0ZXJFbnZpcm9ubWVudE1peGluLAorICAgIFByb2plY3RkZXNjRW52aXJvbm1lbnRNaXhpbiwKKyAgICBDb25maWdNYXhsaW5lc0Vudmlyb25tZW50TWl4aW4sCisgICAgQ29tcHV0ZUZRRE5FbnZpcm9ubWVudE1peGluLAorICAgIENvbmZpZ0ZpbHRlckxpbmVzRW52aXJvbm1lbnRNaXhpbiwKKyAgICBQdXNoZXJEb21haW5FbnZpcm9ubWVudE1peGluLAorICAgIENvbmZpZ09wdGlvbnNFbnZpcm9ubWVudE1peGluLAorICAgIF0KKworCitkZWYgYnVpbGRfZW52aXJvbm1lbnRfa2xhc3MoZW52X25hbWUpOgorICAgIGlmICdjbGFzcycgaW4gS05PV05fRU5WSVJPTk1FTlRTW2Vudl9uYW1lXToKKyAgICAgICAgcmV0dXJuIEtOT1dOX0VOVklST05NRU5UU1tlbnZfbmFtZV1bJ2NsYXNzJ10KKworICAgIGVudmlyb25tZW50X21peGlucyA9IFtdCisgICAga25vd25fZW52ID0gS05PV05fRU5WSVJPTk1FTlRTW2Vudl9uYW1lXQorICAgIGlmICdoaWdocHJlYycgaW4ga25vd25fZW52OgorICAgICAgICBoaWdoX3ByZWNfbWl4aW4gPSBrbm93bl9lbnZbJ2hpZ2hwcmVjJ10KKyAgICAgICAgZW52aXJvbm1lbnRfbWl4aW5zLmFwcGVuZChoaWdoX3ByZWNfbWl4aW4pCisgICAgZW52aXJvbm1lbnRfbWl4aW5zID0gZW52aXJvbm1lbnRfbWl4aW5zICsgQ09NTU9OX0VOVklST05NRU5UX01JWElOUworICAgIGlmICdsb3dwcmVjJyBpbiBrbm93bl9lbnY6CisgICAgICAgIGxvd19wcmVjX21peGluID0ga25vd25fZW52Wydsb3dwcmVjJ10KKyAgICAgICAgZW52aXJvbm1lbnRfbWl4aW5zLmFwcGVuZChsb3dfcHJlY19taXhpbikKKyAgICBlbnZpcm9ubWVudF9taXhpbnMuYXBwZW5kKEVudmlyb25tZW50KQorICAgIGtsYXNzX25hbWUgPSBlbnZfbmFtZS5jYXBpdGFsaXplKCkgKyAnRW52aXJvbm1lbnQnCisgICAgZW52aXJvbm1lbnRfa2xhc3MgPSB0eXBlKAorICAgICAgICBrbGFzc19uYW1lLAorICAgICAgICB0dXBsZShlbnZpcm9ubWVudF9taXhpbnMpLAorICAgICAgICB7fSwKKyAgICAgICAgKQorICAgIEtOT1dOX0VOVklST05NRU5UU1tlbnZfbmFtZV1bJ2NsYXNzJ10gPSBlbnZpcm9ubWVudF9rbGFzcworICAgIHJldHVybiBlbnZpcm9ubWVudF9rbGFzcworCisKK0dlcnJpdEVudmlyb25tZW50ID0gYnVpbGRfZW52aXJvbm1lbnRfa2xhc3MoJ2dlcnJpdCcpCitTdGFzaEVudmlyb25tZW50ID0gYnVpbGRfZW52aXJvbm1lbnRfa2xhc3MoJ3N0YXNoJykKK0dpdG9saXRlRW52aXJvbm1lbnQgPSBidWlsZF9lbnZpcm9ubWVudF9rbGFzcygnZ2l0b2xpdGUnKQorR2VuZXJpY0Vudmlyb25tZW50ID0gYnVpbGRfZW52aXJvbm1lbnRfa2xhc3MoJ2dlbmVyaWMnKQorCisKK2RlZiBidWlsZF9lbnZpcm9ubWVudChlbnZpcm9ubWVudF9rbGFzcywgZW52LCBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgb3NlbnYsIHJlY2lwaWVudHMsIGhvb2tfaW5mbyk6CisgICAgZW52aXJvbm1lbnRfa3cgPSB7CisgICAgICAgICdvc2Vudic6IG9zZW52LAorICAgICAgICAnY29uZmlnJzogY29uZmlnLAorICAgICAgICB9CisKKyAgICBpZiBlbnYgPT0gJ3N0YXNoJzoKKyAgICAgICAgZW52aXJvbm1lbnRfa3dbJ3VzZXInXSA9IGhvb2tfaW5mb1snc3Rhc2hfdXNlciddCisgICAgICAgIGVudmlyb25tZW50X2t3WydyZXBvJ10gPSBob29rX2luZm9bJ3N0YXNoX3JlcG8nXQorICAgIGVsaWYgZW52ID09ICdnZXJyaXQnOgorICAgICAgICBlbnZpcm9ubWVudF9rd1sncHJvamVjdCddID0gaG9va19pbmZvWydwcm9qZWN0J10KKyAgICAgICAgZW52aXJvbm1lbnRfa3dbJ3N1Ym1pdHRlciddID0gaG9va19pbmZvWydzdWJtaXR0ZXInXQorICAgICAgICBlbnZpcm9ubWVudF9rd1sndXBkYXRlX21ldGhvZCddID0gaG9va19pbmZvWyd1cGRhdGVfbWV0aG9kJ10KKworICAgIGVudmlyb25tZW50X2t3WydjbGlfcmVjaXBpZW50cyddID0gcmVjaXBpZW50cworCisgICAgcmV0dXJuIGVudmlyb25tZW50X2tsYXNzKCoqZW52aXJvbm1lbnRfa3cpCisKKworZGVmIGdldF92ZXJzaW9uKCk6CisgICAgb2xkY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICB0cnk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkpCisgICAgICAgICAgICBnaXRfdmVyc2lvbiA9IHJlYWRfZ2l0X291dHB1dChbJ2Rlc2NyaWJlJywgJy0tdGFncycsICdIRUFEJ10pCisgICAgICAgICAgICBpZiBnaXRfdmVyc2lvbiA9PSBfX3ZlcnNpb25fXzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2l0X3ZlcnNpb24KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICclcyAoJXMpJyAlIChfX3ZlcnNpb25fXywgZ2l0X3ZlcnNpb24pCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jaGRpcihvbGRjd2QpCisgICAgcmV0dXJuIF9fdmVyc2lvbl9fCisKKworZGVmIGNvbXB1dGVfZ2Vycml0X29wdGlvbnMob3B0aW9ucywgYXJncywgcmVxdWlyZWRfZ2Vycml0X29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdfcmVmbmFtZSk6CisgICAgaWYgTm9uZSBpbiByZXF1aXJlZF9nZXJyaXRfb3B0aW9uczoKKyAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgiRXJyb3I6IFNwZWNpZnkgYWxsIG9mIC0tb2xkcmV2LCAtLW5ld3JldiwgLS1yZWZuYW1lLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImFuZCAtLXByb2plY3Q7IG9yIG5vbmUgb2YgdGhlbS4iKQorCisgICAgaWYgb3B0aW9ucy5lbnZpcm9ubWVudCBub3QgaW4gKE5vbmUsICdnZXJyaXQnKToKKyAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgiTm9uLWdlcnJpdCBlbnZpcm9ubWVudHMgaW5jb21wYXRpYmxlIHdpdGggLS1vbGRyZXYsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiLS1uZXdyZXYsIC0tcmVmbmFtZSwgYW5kIC0tcHJvamVjdCIpCisgICAgb3B0aW9ucy5lbnZpcm9ubWVudCA9ICdnZXJyaXQnCisKKyAgICBpZiBhcmdzOgorICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCJFcnJvcjogUG9zaXRpb25hbCBwYXJhbWV0ZXJzIG5vdCBhbGxvd2VkIHdpdGggIgorICAgICAgICAgICAgICAgICAgICAgICAgICItLW9sZHJldiwgLS1uZXdyZXYsIGFuZCAtLXJlZm5hbWUuIikKKworICAgICMgR2Vycml0IG9kZGx5IG9taXRzICdyZWZzL2hlYWRzLycgaW4gdGhlIHJlZm5hbWUgd2hlbiBjYWxsaW5nCisgICAgIyByZWYtdXBkYXRlZCBob29rOyBwdXQgaXQgYmFjay4KKyAgICBnaXRfZGlyID0gZ2V0X2dpdF9kaXIoKQorICAgIGlmIChub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGdpdF9kaXIsIHJhd19yZWZuYW1lKSkgYW5kCisgICAgICAgIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihnaXRfZGlyLCAncmVmcycsICdoZWFkcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdfcmVmbmFtZSkpKToKKyAgICAgICAgb3B0aW9ucy5yZWZuYW1lID0gJ3JlZnMvaGVhZHMvJyArIG9wdGlvbnMucmVmbmFtZQorCisgICAgIyBOZXcgcmV2aXNpb25zIGNhbiBhcHBlYXIgaW4gYSBnZXJyaXQgcmVwb3NpdG9yeSBlaXRoZXIgZHVlIHRvIHNvbWVvbmUKKyAgICAjIHB1c2hpbmcgZGlyZWN0bHkgKGluIHdoaWNoIGNhc2Ugb3B0aW9ucy5zdWJtaXR0ZXIgd2lsbCBiZSBzZXQpLCBvciB0aGV5CisgICAgIyBjYW4gcHJlc3MgIlN1Ym1pdCB0aGlzIHBhdGNoc2V0IiBpbiB0aGUgd2ViIFVJIGZvciBzb21lIENSIChpbiB3aGljaAorICAgICMgY2FzZSBvcHRpb25zLnN1Ym1pdHRlciB3aWxsIG5vdCBiZSBzZXQgYW5kIGdlcnJpdCB3aWxsIG5vdCBoYXZlIHByb3ZpZGVkCisgICAgIyB1cyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgd2hvIHByZXNzZWQgdGhlIGJ1dHRvbikuCisgICAgIworICAgICMgTm90ZSBmb3IgdGhlIG5pdC1waWNreTogSSdtIGx1bXBpbmcgaW4gUkVTVCBBUEkgY2FsbHMgYW5kIHRoZSBzc2gKKyAgICAjIGdlcnJpdCByZXZpZXcgY29tbWFuZCBpbiB3aXRoICJTdWJtaXQgdGhpcyBwYXRjaHNldCIgYnV0dG9uLCBzaW5jZSB0aGV5CisgICAgIyBoYXZlIHRoZSBzYW1lIGVmZmVjdC4KKyAgICBpZiBvcHRpb25zLnN1Ym1pdHRlcjoKKyAgICAgICAgdXBkYXRlX21ldGhvZCA9ICdwdXNoZWQnCisgICAgICAgICMgVGhlIHN1Ym1pdHRlciBhcmd1bWVudCBpcyBhbG1vc3QgYW4gUkZDIDI4MjIgZW1haWwgYWRkcmVzczsgY2hhbmdlIGl0CisgICAgICAgICMgZnJvbSAnVXNlciBOYW1lIChlbWFpbEBkb21haW4pJyB0byAnVXNlciBOYW1lIDxlbWFpbEBkb21haW4+JyBzbyBpdCBpcworICAgICAgICBvcHRpb25zLnN1Ym1pdHRlciA9IG9wdGlvbnMuc3VibWl0dGVyLnJlcGxhY2UoJygnLCAnPCcpLnJlcGxhY2UoJyknLCAnPicpCisgICAgZWxzZToKKyAgICAgICAgdXBkYXRlX21ldGhvZCA9ICdzdWJtaXR0ZWQnCisgICAgICAgICMgR2Vycml0IGtuZXcgd2hvIHN1Ym1pdHRlZCB0aGlzIHBhdGNoc2V0LCBidXQgdGhyZXcgdGhhdCBpbmZvcm1hdGlvbgorICAgICAgICAjIGF3YXkgd2hlbiBpdCBpbnZva2VkIHRoaXMgaG9vay4gIEhvd2V2ZXIsICpJRiogR2Vycml0IGNyZWF0ZWQgYQorICAgICAgICAjIG1lcmdlIHRvIGJyaW5nIHRoZSBwYXRjaHNldCBpbiAocHJvamVjdCAnU3VibWl0IFR5cGUnIGlzIGVpdGhlcgorICAgICAgICAjICJBbHdheXMgTWVyZ2UiLCBvciBpcyAiTWVyZ2UgaWYgTmVjZXNzYXJ5IiBhbmQgaGFwcGVucyB0byBiZQorICAgICAgICAjIG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXJ0aWN1bGFyIENSKSwgdGhlbiBpdCB3aWxsIGhhdmUgdGhlIGNvbW1pdHRlcgorICAgICAgICAjIG9mIHRoYXQgbWVyZ2UgYmUgJ0dlcnJpdCBDb2RlIFJldmlldycgYW5kIHRoZSBhdXRob3Igd2lsbCBiZSB0aGUKKyAgICAgICAgIyBwZXJzb24gd2hvIHJlcXVlc3RlZCB0aGUgc3VibWlzc2lvbiBvZiB0aGUgQ1IuICBTaW5jZSB0aGlzIGlzIGZhaXJseQorICAgICAgICAjIGxpa2VseSBmb3IgbW9zdCBnZXJyaXQgaW5zdGFsbGF0aW9ucyAob2YgYSByZWFzb25hYmxlIHNpemUpLCBpdCdzCisgICAgICAgICMgd29ydGggdGhlIGV4dHJhIGVmZm9ydCB0byB0cnkgdG8gZGV0ZXJtaW5lIHRoZSBhY3R1YWwgc3VibWl0dGVyLgorICAgICAgICByZXZfaW5mbyA9IHJlYWRfZ2l0X2xpbmVzKFsnbG9nJywgJy0tbm8td2FsaycsICctLW1lcmdlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWZvcm1hdD0lY04lbiVhTiA8JWFFPicsIG9wdGlvbnMubmV3cmV2XSkKKyAgICAgICAgaWYgcmV2X2luZm8gYW5kIHJldl9pbmZvWzBdID09ICdHZXJyaXQgQ29kZSBSZXZpZXcnOgorICAgICAgICAgICAgb3B0aW9ucy5zdWJtaXR0ZXIgPSByZXZfaW5mb1sxXQorCisgICAgIyBXZSBwYXNzIGJhY2sgcmVmbmFtZSwgb2xkcmV2LCBuZXdyZXYgYXMgYXJncyBiZWNhdXNlIHRoZW4gdGhlCisgICAgIyBnZXJyaXQgcmVmLXVwZGF0ZWQgaG9vayBpcyBtdWNoIGxpa2UgdGhlIGdpdCB1cGRhdGUgaG9vaworICAgIHJldHVybiAob3B0aW9ucywKKyAgICAgICAgICAgIFtvcHRpb25zLnJlZm5hbWUsIG9wdGlvbnMub2xkcmV2LCBvcHRpb25zLm5ld3Jldl0sCisgICAgICAgICAgICB7J3Byb2plY3QnOiBvcHRpb25zLnByb2plY3QsICdzdWJtaXR0ZXInOiBvcHRpb25zLnN1Ym1pdHRlciwKKyAgICAgICAgICAgICAndXBkYXRlX21ldGhvZCc6IHVwZGF0ZV9tZXRob2R9KQorCisKK2RlZiBjaGVja19ob29rX3NwZWNpZmljX2FyZ3Mob3B0aW9ucywgYXJncyk6CisgICAgcmF3X3JlZm5hbWUgPSBvcHRpb25zLnJlZm5hbWUKKyAgICAjIENvbnZlcnQgZWFjaCBzdHJpbmcgb3B0aW9uIHVuaWNvZGUgZm9yIFB5dGhvbjMuCisgICAgaWYgUFlUSE9OMzoKKyAgICAgICAgb3B0cyA9IFsnZW52aXJvbm1lbnQnLCAncmVjaXBpZW50cycsICdvbGRyZXYnLCAnbmV3cmV2JywgJ3JlZm5hbWUnLAorICAgICAgICAgICAgICAgICdwcm9qZWN0JywgJ3N1Ym1pdHRlcicsICdzdGFzaF91c2VyJywgJ3N0YXNoX3JlcG8nXQorICAgICAgICBmb3Igb3B0IGluIG9wdHM6CisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihvcHRpb25zLCBvcHQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9wdGlvbnMsIG9wdCkKKyAgICAgICAgICAgIGlmIG9iajoKKyAgICAgICAgICAgICAgICBlbmMgPSBvYmouZW5jb2RlKCd1dGYtOCcsICdzdXJyb2dhdGVlc2NhcGUnKQorICAgICAgICAgICAgICAgIGRlYyA9IGVuYy5kZWNvZGUoJ3V0Zi04JywgJ3JlcGxhY2UnKQorICAgICAgICAgICAgICAgIHNldGF0dHIob3B0aW9ucywgb3B0LCBkZWMpCisKKyAgICAjIEZpcnN0IGNoZWNrIGZvciBzdGFzaCBhcmd1bWVudHMKKyAgICBpZiAob3B0aW9ucy5zdGFzaF91c2VyIGlzIE5vbmUpICE9IChvcHRpb25zLnN0YXNoX3JlcG8gaXMgTm9uZSk6CisgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoIkVycm9yOiBTcGVjaWZ5IGJvdGggb2YgLS1zdGFzaC11c2VyIGFuZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIi0tc3Rhc2gtcmVwbyBvciBuZWl0aGVyLiIpCisgICAgaWYgb3B0aW9ucy5zdGFzaF91c2VyOgorICAgICAgICBvcHRpb25zLmVudmlyb25tZW50ID0gJ3N0YXNoJworICAgICAgICByZXR1cm4gb3B0aW9ucywgYXJncywgeydzdGFzaF91c2VyJzogb3B0aW9ucy5zdGFzaF91c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFzaF9yZXBvJzogb3B0aW9ucy5zdGFzaF9yZXBvfQorCisgICAgIyBGaW5hbGx5LCBjaGVjayBmb3IgZ2Vycml0IHNwZWNpZmljIGFyZ3VtZW50cworICAgIHJlcXVpcmVkX2dlcnJpdF9vcHRpb25zID0gKG9wdGlvbnMub2xkcmV2LCBvcHRpb25zLm5ld3Jldiwgb3B0aW9ucy5yZWZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHJvamVjdCkKKyAgICBpZiByZXF1aXJlZF9nZXJyaXRfb3B0aW9ucyAhPSAoTm9uZSwpICogNDoKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVfZ2Vycml0X29wdGlvbnMob3B0aW9ucywgYXJncywgcmVxdWlyZWRfZ2Vycml0X29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd19yZWZuYW1lKQorCisgICAgIyBObyBzcGVjaWFsIG9wdGlvbnMgaW4gdXNlLCBqdXN0IHJldHVybiB3aGF0IHdlIHN0YXJ0ZWQgd2l0aAorICAgIHJldHVybiBvcHRpb25zLCBhcmdzLCB7fQorCisKK2NsYXNzIExvZ2dlcihvYmplY3QpOgorICAgIGRlZiBwYXJzZV92ZXJib3NlKHNlbGYsIHZlcmJvc2UpOgorICAgICAgICBpZiB2ZXJib3NlID4gMDoKKyAgICAgICAgICAgIHJldHVybiBsb2dnaW5nLkRFQlVHCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gbG9nZ2luZy5JTkZPCisKKyAgICBkZWYgY3JlYXRlX2xvZ19maWxlKHNlbGYsIGVudmlyb25tZW50LCBuYW1lLCBwYXRoLCB2ZXJib3NpdHkpOgorICAgICAgICBsb2dfZmlsZSA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCisgICAgICAgIGZpbGVfaGFuZGxlciA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIocGF0aCkKKyAgICAgICAgbG9nX2ZtdCA9IGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGFzY3RpbWUpcyBbJShsZXZlbG5hbWUpLTUuNXNdICAlKG1lc3NhZ2UpcyIpCisgICAgICAgIGZpbGVfaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nX2ZtdCkKKyAgICAgICAgbG9nX2ZpbGUuYWRkSGFuZGxlcihmaWxlX2hhbmRsZXIpCisgICAgICAgIGxvZ19maWxlLnNldExldmVsKHZlcmJvc2l0eSkKKyAgICAgICAgcmV0dXJuIGxvZ19maWxlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW52aXJvbm1lbnQpOgorICAgICAgICBzZWxmLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQKKyAgICAgICAgc2VsZi5sb2dnZXJzID0gW10KKyAgICAgICAgc3RkZXJyX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnaXRfbXVsdGltYWlsLnN0ZGVycicpCisKKyAgICAgICAgY2xhc3MgRW5jb2RlZFN0ZGVycihvYmplY3QpOgorICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHdyaXRlX3N0cihzeXMuc3RkZXJyLCB4KQorCisgICAgICAgICAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisKKyAgICAgICAgc3RkZXJyX2hhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoRW5jb2RlZFN0ZGVycigpKQorICAgICAgICBzdGRlcnJfbG9nLmFkZEhhbmRsZXIoc3RkZXJyX2hhbmRsZXIpCisgICAgICAgIHN0ZGVycl9sb2cuc2V0TGV2ZWwoc2VsZi5wYXJzZV92ZXJib3NlKGVudmlyb25tZW50LnZlcmJvc2UpKQorICAgICAgICBzZWxmLmxvZ2dlcnMuYXBwZW5kKHN0ZGVycl9sb2cpCisKKyAgICAgICAgaWYgZW52aXJvbm1lbnQuZGVidWdfbG9nX2ZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWJ1Z19sb2dfZmlsZSA9IHNlbGYuY3JlYXRlX2xvZ19maWxlKAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LCAnZ2l0X211bHRpbWFpbC5kZWJ1ZycsIGVudmlyb25tZW50LmRlYnVnX2xvZ19maWxlLCBsb2dnaW5nLkRFQlVHKQorICAgICAgICAgICAgc2VsZi5sb2dnZXJzLmFwcGVuZChkZWJ1Z19sb2dfZmlsZSkKKworICAgICAgICBpZiBlbnZpcm9ubWVudC5sb2dfZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxvZ19maWxlID0gc2VsZi5jcmVhdGVfbG9nX2ZpbGUoCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsICdnaXRfbXVsdGltYWlsLmZpbGUnLCBlbnZpcm9ubWVudC5sb2dfZmlsZSwgbG9nZ2luZy5JTkZPKQorICAgICAgICAgICAgc2VsZi5sb2dnZXJzLmFwcGVuZChsb2dfZmlsZSkKKworICAgICAgICBpZiBlbnZpcm9ubWVudC5lcnJvcl9sb2dfZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGVycm9yX2xvZ19maWxlID0gc2VsZi5jcmVhdGVfbG9nX2ZpbGUoCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsICdnaXRfbXVsdGltYWlsLmVycm9yJywgZW52aXJvbm1lbnQuZXJyb3JfbG9nX2ZpbGUsIGxvZ2dpbmcuRVJST1IpCisgICAgICAgICAgICBzZWxmLmxvZ2dlcnMuYXBwZW5kKGVycm9yX2xvZ19maWxlKQorCisgICAgZGVmIGluZm8oc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBmb3IgbCBpbiBzZWxmLmxvZ2dlcnM6CisgICAgICAgICAgICBsLmluZm8obXNnLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgZGVidWcoc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBmb3IgbCBpbiBzZWxmLmxvZ2dlcnM6CisgICAgICAgICAgICBsLmRlYnVnKG1zZywgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIHdhcm5pbmcoc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBmb3IgbCBpbiBzZWxmLmxvZ2dlcnM6CisgICAgICAgICAgICBsLndhcm5pbmcobXNnLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgZXJyb3Ioc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBmb3IgbCBpbiBzZWxmLmxvZ2dlcnM6CisgICAgICAgICAgICBsLmVycm9yKG1zZywgKmFyZ3MsICoqa3dhcmdzKQorCisKK2RlZiBtYWluKGFyZ3MpOgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgZGVzY3JpcHRpb249X19kb2NfXywKKyAgICAgICAgdXNhZ2U9JyVwcm9nIFtPUFRJT05TXVxuICAgb3I6ICVwcm9nIFtPUFRJT05TXSBSRUZOQU1FIE9MRFJFViBORVdSRVYnLAorICAgICAgICApCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tZW52aXJvbm1lbnQnLCAnLS1lbnYnLCBhY3Rpb249J3N0b3JlJywgdHlwZT0nY2hvaWNlJywKKyAgICAgICAgY2hvaWNlcz1saXN0KEtOT1dOX0VOVklST05NRU5UUy5rZXlzKCkpLCBkZWZhdWx0PU5vbmUsCisgICAgICAgIGhlbHA9KAorICAgICAgICAgICAgJ0Nob29zZSB0eXBlIG9mIGVudmlyb25tZW50IGlzIGluIHVzZS4gIERlZmF1bHQgaXMgdGFrZW4gZnJvbSAnCisgICAgICAgICAgICAnbXVsdGltYWlsaG9vay5lbnZpcm9ubWVudCBpZiBzZXQ7IG90aGVyd2lzZSAiZ2VuZXJpYyIuJworICAgICAgICAgICAgKSwKKyAgICAgICAgKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKAorICAgICAgICAnLS1zdGRvdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSdPdXRwdXQgZW1haWxzIHRvIHN0ZG91dCByYXRoZXIgdGhhbiBzZW5kaW5nIHRoZW0uJywKKyAgICAgICAgKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKAorICAgICAgICAnLS1yZWNpcGllbnRzJywgYWN0aW9uPSdzdG9yZScsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgaGVscD0nU2V0IGxpc3Qgb2YgZW1haWwgcmVjaXBpZW50cyBmb3IgYWxsIHR5cGVzIG9mIGVtYWlscy4nLAorICAgICAgICApCisgICAgcGFyc2VyLmFkZF9vcHRpb24oCisgICAgICAgICctLXNob3ctZW52JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0oCisgICAgICAgICAgICAnV3JpdGUgdG8gc3RkZXJyIHRoZSB2YWx1ZXMgZGV0ZXJtaW5lZCBmb3IgdGhlIGVudmlyb25tZW50ICcKKyAgICAgICAgICAgICcoaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyksIHRoZW4gcHJvY2VlZCBub3JtYWxseS4nCisgICAgICAgICAgICApLAorICAgICAgICApCisgICAgcGFyc2VyLmFkZF9vcHRpb24oCisgICAgICAgICctLWZvcmNlLXNlbmQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSgKKyAgICAgICAgICAgICdGb3JjZSBzZW5kaW5nIHJlZmNoYW5nZSBlbWFpbCB3aGVuIHVzaW5nIGFzIGFuIHVwZGF0ZSBob29rLiAnCisgICAgICAgICAgICAnVGhpcyBpcyB1c2VmdWwgdG8gd29yayBhcm91bmQgdGhlIHVucmVsaWFibGUgbmV3IGNvbW1pdHMgJworICAgICAgICAgICAgJ2RldGVjdGlvbiBpbiB0aGlzIG1vZGUuJworICAgICAgICAgICAgKSwKKyAgICAgICAgKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKAorICAgICAgICAnLWMnLCBtZXRhdmFyPSI8bmFtZT49PHZhbHVlPiIsIGFjdGlvbj0nYXBwZW5kJywKKyAgICAgICAgaGVscD0oCisgICAgICAgICAgICAnUGFzcyBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRocm91Z2ggdG8gZ2l0LiAgVGhlIHZhbHVlIGdpdmVuICcKKyAgICAgICAgICAgICd3aWxsIG92ZXJyaWRlIHZhbHVlcyBmcm9tIGNvbmZpZ3VyYXRpb24gZmlsZXMuICBTZWUgdGhlIC1jIG9wdGlvbiAnCisgICAgICAgICAgICAnb2YgZ2l0KDEpIGZvciBtb3JlIGRldGFpbHMuICAoT25seSB3b3JrcyB3aXRoIGdpdCA+PSAxLjcuMyknCisgICAgICAgICAgICApLAorICAgICAgICApCisgICAgcGFyc2VyLmFkZF9vcHRpb24oCisgICAgICAgICctLXZlcnNpb24nLCAnLXYnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSgKKyAgICAgICAgICAgICJEaXNwbGF5IGdpdC1tdWx0aW1haWwncyB2ZXJzaW9uIgorICAgICAgICAgICAgKSwKKyAgICAgICAgKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oCisgICAgICAgICctLXB5dGhvbi12ZXJzaW9uJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0oCisgICAgICAgICAgICAiRGlzcGxheSB0aGUgdmVyc2lvbiBvZiBQeXRob24gdXNlZCBieSBnaXQtbXVsdGltYWlsIgorICAgICAgICAgICAgKSwKKyAgICAgICAgKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oCisgICAgICAgICctLWNoZWNrLXJlZi1maWx0ZXInLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSgKKyAgICAgICAgICAgICdMaXN0IHJlZnMgYW5kIHNob3cgaW5mb3JtYXRpb24gb24gaG93IGdpdC1tdWx0aW1haWwgJworICAgICAgICAgICAgJ3dpbGwgcHJvY2VzcyB0aGVtLicKKyAgICAgICAgICAgICkKKyAgICAgICAgKQorCisgICAgIyBUaGUgZm9sbG93aW5nIG9wdGlvbnMgcGVybWl0IHRoaXMgc2NyaXB0IHRvIGJlIHJ1biBhcyBhIGdlcnJpdAorICAgICMgcmVmLXVwZGF0ZWQgaG9vay4gIFNlZSBlLmcuCisgICAgIyBjb2RlLmdvb2dsZS5jb20vcC9nZXJyaXQvc291cmNlL2Jyb3dzZS9Eb2N1bWVudGF0aW9uL2NvbmZpZy1ob29rcy50eHQKKyAgICAjIFdlIHN1cHByZXNzIGhlbHAgZm9yIHRoZXNlIGl0ZW1zLCBzaW5jZSB0aGVzZSBhcmUgc3BlY2lmaWMgdG8gZ2Vycml0LAorICAgICMgYW5kIHdlIGRvbid0IHdhbnQgdXNlcnMgZGlyZWN0bHkgdXNpbmcgdGhlbSBhbnkgd2F5IG90aGVyIHRoYW4gaG93IHRoZQorICAgICMgZ2Vycml0IHJlZi11cGRhdGVkIGhvb2sgaXMgY2FsbGVkLgorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLW9sZHJldicsIGFjdGlvbj0nc3RvcmUnLCBoZWxwPW9wdHBhcnNlLlNVUFBSRVNTX0hFTFApCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy0tbmV3cmV2JywgYWN0aW9uPSdzdG9yZScsIGhlbHA9b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1yZWZuYW1lJywgYWN0aW9uPSdzdG9yZScsIGhlbHA9b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1wcm9qZWN0JywgYWN0aW9uPSdzdG9yZScsIGhlbHA9b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1zdWJtaXR0ZXInLCBhY3Rpb249J3N0b3JlJywgaGVscD1vcHRwYXJzZS5TVVBQUkVTU19IRUxQKQorCisgICAgIyBUaGUgZm9sbG93aW5nIGFsbG93IHRoaXMgdG8gYmUgcnVuIGFzIGEgc3Rhc2ggYXN5bmNocm9ub3VzIHBvc3QtcmVjZWl2ZQorICAgICMgaG9vayAoYWxtb3N0IGlkZW50aWNhbCB0byBhIGdpdCBwb3N0LXJlY2VpdmUgaG9vayBidXQgdHJpZ2dlcmVkIGFsc28gZm9yCisgICAgIyBtZXJnZXMgb2YgcHVsbCByZXF1ZXN0cyBmcm9tIHRoZSBVSSkuICBXZSBzdXBwcmVzcyBoZWxwIGZvciB0aGVzZSBpdGVtcywKKyAgICAjIHNpbmNlIHRoZXNlIGFyZSBzcGVjaWZpYyB0byBzdGFzaC4KKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1zdGFzaC11c2VyJywgYWN0aW9uPSdzdG9yZScsIGhlbHA9b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1zdGFzaC1yZXBvJywgYWN0aW9uPSdzdG9yZScsIGhlbHA9b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCkKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisgICAgKG9wdGlvbnMsIGFyZ3MsIGhvb2tfaW5mbykgPSBjaGVja19ob29rX3NwZWNpZmljX2FyZ3Mob3B0aW9ucywgYXJncykKKworICAgIGlmIG9wdGlvbnMudmVyc2lvbjoKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnZ2l0LW11bHRpbWFpbCB2ZXJzaW9uICcgKyBnZXRfdmVyc2lvbigpICsgJ1xuJykKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcHRpb25zLnB5dGhvbl92ZXJzaW9uOgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdQeXRob24gdmVyc2lvbiAnICsgc3lzLnZlcnNpb24gKyAnXG4nKQorICAgICAgICByZXR1cm4KKworICAgIGlmIG9wdGlvbnMuYzoKKyAgICAgICAgQ29uZmlnLmFkZF9jb25maWdfcGFyYW1ldGVycyhvcHRpb25zLmMpCisKKyAgICBjb25maWcgPSBDb25maWcoJ211bHRpbWFpbGhvb2snKQorCisgICAgZW52aXJvbm1lbnQgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBlbnZpcm9ubWVudCA9IGNob29zZV9lbnZpcm9ubWVudCgKKyAgICAgICAgICAgIGNvbmZpZywgb3NlbnY9b3MuZW52aXJvbiwKKyAgICAgICAgICAgIGVudj1vcHRpb25zLmVudmlyb25tZW50LAorICAgICAgICAgICAgcmVjaXBpZW50cz1vcHRpb25zLnJlY2lwaWVudHMsCisgICAgICAgICAgICBob29rX2luZm89aG9va19pbmZvLAorICAgICAgICAgICAgKQorCisgICAgICAgIGlmIG9wdGlvbnMuc2hvd19lbnY6CisgICAgICAgICAgICBzaG93X2VudihlbnZpcm9ubWVudCwgc3lzLnN0ZGVycikKKworICAgICAgICBpZiBvcHRpb25zLnN0ZG91dCBvciBlbnZpcm9ubWVudC5zdGRvdXQ6CisgICAgICAgICAgICBtYWlsZXIgPSBPdXRwdXRNYWlsZXIoc3lzLnN0ZG91dCwgZW52aXJvbm1lbnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYWlsZXIgPSBjaG9vc2VfbWFpbGVyKGNvbmZpZywgZW52aXJvbm1lbnQpCisKKyAgICAgICAgbXVzdF9jaGVja19zZXR1cCA9IG9zLmVudmlyb24uZ2V0KCdHSVRfTVVMVElNQUlMX0NIRUNLX1NFVFVQJykKKyAgICAgICAgaWYgbXVzdF9jaGVja19zZXR1cCA9PSAnJzoKKyAgICAgICAgICAgIG11c3RfY2hlY2tfc2V0dXAgPSBGYWxzZQorICAgICAgICBpZiBvcHRpb25zLmNoZWNrX3JlZl9maWx0ZXI6CisgICAgICAgICAgICBjaGVja19yZWZfZmlsdGVyKGVudmlyb25tZW50KQorICAgICAgICBlbGlmIG11c3RfY2hlY2tfc2V0dXA6CisgICAgICAgICAgICBjaGVja19zZXR1cChlbnZpcm9ubWVudCkKKyAgICAgICAgIyBEdWFsIG1vZGU6IGlmIGFyZ3VtZW50cyB3ZXJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBydW4KKyAgICAgICAgIyBsaWtlIGFuIHVwZGF0ZSBob29rOyBvdGhlcndpc2UsIHJ1biBhcyBhIHBvc3QtcmVjZWl2ZSBob29rLgorICAgICAgICBlbGlmIGFyZ3M6CisgICAgICAgICAgICBpZiBsZW4oYXJncykgIT0gMzoKKyAgICAgICAgICAgICAgICBwYXJzZXIuZXJyb3IoJ05lZWQgemVybyBvciB0aHJlZSBub24tb3B0aW9uIGFyZ3VtZW50cycpCisgICAgICAgICAgICAocmVmbmFtZSwgb2xkcmV2LCBuZXdyZXYpID0gYXJncworICAgICAgICAgICAgZW52aXJvbm1lbnQuZ2V0X2xvZ2dlcigpLmRlYnVnKAorICAgICAgICAgICAgICAgICJydW5fYXNfdXBkYXRlX2hvb2s6IHJlZm5hbWU9JXMsIG9sZHJldj0lcywgbmV3cmV2PSVzLCBmb3JjZV9zZW5kPSVzIiAlCisgICAgICAgICAgICAgICAgKHJlZm5hbWUsIG9sZHJldiwgbmV3cmV2LCBvcHRpb25zLmZvcmNlX3NlbmQpKQorICAgICAgICAgICAgcnVuX2FzX3VwZGF0ZV9ob29rKGVudmlyb25tZW50LCBtYWlsZXIsIHJlZm5hbWUsIG9sZHJldiwgbmV3cmV2LCBvcHRpb25zLmZvcmNlX3NlbmQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBydW5fYXNfcG9zdF9yZWNlaXZlX2hvb2soZW52aXJvbm1lbnQsIG1haWxlcikKKyAgICBleGNlcHQgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjoKKyAgICAgICAgc3lzLmV4aXQoc3lzLmV4Y19pbmZvKClbMV0pCisgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgdCwgZSwgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1xuJykgICMgQXZvaWQgbWl4aW5nIG1lc3NhZ2Ugd2l0aCBwcmV2aW91cyBvdXRwdXQKKyAgICAgICAgbXNnID0gKAorICAgICAgICAgICAgJ0V4Y2VwdGlvbiBcJycgKyB0Ll9fbmFtZV9fICsKKyAgICAgICAgICAgICdcJyByYWlzZWQuIFBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1ZyB0b1xuJworICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9naXQtbXVsdGltYWlsL2dpdC1tdWx0aW1haWwvaXNzdWVzXG4nCisgICAgICAgICAgICAnd2l0aCB0aGUgaW5mb3JtYXRpb24gYmVsb3c6XG5cbicKKyAgICAgICAgICAgICdnaXQtbXVsdGltYWlsIHZlcnNpb24gJyArIGdldF92ZXJzaW9uKCkgKyAnXG4nCisgICAgICAgICAgICAnUHl0aG9uIHZlcnNpb24gJyArIHN5cy52ZXJzaW9uICsgJ1xuJyArCisgICAgICAgICAgICB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlbnZpcm9ubWVudC5nZXRfbG9nZ2VyKCkuZXJyb3IobXNnKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKG1zZykKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG1haW4oc3lzLmFyZ3ZbMTpdKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9tdWx0aW1haWwvbWlncmF0ZS1tYWlsaG9vay1jb25maWcgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9taWdyYXRlLW1haWxob29rLWNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNDFiYTIyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvbWlncmF0ZS1tYWlsaG9vay1jb25maWcKQEAgLTAsMCArMSwyNzQgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworIiIiTWlncmF0ZSBhIHBvc3QtcmVjZWl2ZS1lbWFpbCBjb25maWd1cmF0aW9uIHRvIGJlIHVzYWJsZSB3aXRoIGdpdF9tdWx0aW1haWwucHkuCisKK1NlZSBSRUFETUUubWlncmF0ZS1mcm9tLXBvc3QtcmVjZWl2ZS1lbWFpbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcHRwYXJzZQorCitmcm9tIGdpdF9tdWx0aW1haWwgaW1wb3J0IENvbW1hbmRFcnJvcgorZnJvbSBnaXRfbXVsdGltYWlsIGltcG9ydCBDb25maWcKK2Zyb20gZ2l0X211bHRpbWFpbCBpbXBvcnQgcmVhZF9vdXRwdXQKKworCitPTERfTkFNRVMgPSBbCisgICAgJ21haWxpbmdsaXN0JywKKyAgICAnYW5ub3VuY2VsaXN0JywKKyAgICAnZW52ZWxvcGVzZW5kZXInLAorICAgICdlbWFpbHByZWZpeCcsCisgICAgJ3Nob3dyZXYnLAorICAgICdlbWFpbG1heGxpbmVzJywKKyAgICAnZGlmZm9wdHMnLAorICAgICdzY2FuY29tbWl0Zm9yY2MnLAorICAgIF0KKworTkVXX05BTUVTID0gWworICAgICdlbnZpcm9ubWVudCcsCisgICAgJ3JlcG9uYW1lJywKKyAgICAnbWFpbGluZ2xpc3QnLAorICAgICdyZWZjaGFuZ2VsaXN0JywKKyAgICAnY29tbWl0bGlzdCcsCisgICAgJ2Fubm91bmNlbGlzdCcsCisgICAgJ2Fubm91bmNlc2hvcnRsb2cnLAorICAgICdlbnZlbG9wZXNlbmRlcicsCisgICAgJ2FkbWluaXN0cmF0b3InLAorICAgICdlbWFpbHByZWZpeCcsCisgICAgJ2VtYWlsbWF4bGluZXMnLAorICAgICdkaWZmb3B0cycsCisgICAgJ2VtYWlsZG9tYWluJywKKyAgICAnc2NhbmNvbW1pdGZvcmNjJywKKyAgICBdCisKKworSU5GTyA9ICIiIlwKKworU1VDQ0VTUyEKKworWW91ciBwb3N0LXJlY2VpdmUtZW1haWwgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8KK2dpdC1tdWx0aW1haWwgZm9ybWF0LiAgUGxlYXNlIHNlZSBSRUFETUUgYW5kCitSRUFETUUubWlncmF0ZS1mcm9tLXBvc3QtcmVjZWl2ZS1lbWFpbCB0byBsZWFybiBhYm91dCBvdGhlcgorZ2l0LW11bHRpbWFpbCBjb25maWd1cmF0aW9uIHBvc3NpYmlsaXRpZXMuCisKK0ZvciBleGFtcGxlLCBnaXQtbXVsdGltYWlsIGhhcyB0aGUgZm9sbG93aW5nIG5ldyBvcHRpb25zIHdpdGggbm8KK2VxdWl2YWxlbnQgaW4gcG9zdC1yZWNlaXZlLWVtYWlsLiAgWW91IG1pZ2h0IHdhbnQgdG8gcmVhZCBhYm91dCB0aGVtCit0byBzZWUgaWYgdGhleSB3b3VsZCBiZSB1c2VmdWwgaW4geW91ciBzaXR1YXRpb246CisKKyIiIgorCisKK2RlZiBfY2hlY2tfb2xkX2NvbmZpZ19leGlzdHMob2xkKToKKyAgICAiIiJDaGVjayB0aGF0IGF0IGxlYXN0IG9uZSBvbGQgY29uZmlndXJhdGlvbiB2YWx1ZSBpcyBzZXQuIiIiCisKKyAgICBmb3IgbmFtZSBpbiBPTERfTkFNRVM6CisgICAgICAgIGlmIG5hbWUgaW4gb2xkOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQorCisKK2RlZiBfY2hlY2tfbmV3X2NvbmZpZ19jbGVhcihuZXcpOgorICAgICIiIkNoZWNrIHRoYXQgbm9uZSBvZiB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gbmFtZXMgYXJlIHNldC4iIiIKKworICAgIHJldHZhbCA9IFRydWUKKyAgICBmb3IgbmFtZSBpbiBORVdfTkFNRVM6CisgICAgICAgIGlmIG5hbWUgaW4gbmV3OgorICAgICAgICAgICAgaWYgcmV0dmFsOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0lORk86IFRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiB2YWx1ZXMgYWxyZWFkeSBleGlzdDpcblxuJykKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJyAgICAiJXMuJXMiXG4nICUgKG5ldy5zZWN0aW9uLCBuYW1lKSkKKyAgICAgICAgICAgIHJldHZhbCA9IEZhbHNlCisKKyAgICByZXR1cm4gcmV0dmFsCisKKworZGVmIGVyYXNlX3ZhbHVlcyhjb25maWcsIG5hbWVzKToKKyAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgaWYgbmFtZSBpbiBjb25maWc6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLi4udW5zZXR0aW5nICIlcy4lcyJcbicgJSAoY29uZmlnLnNlY3Rpb24sIG5hbWUpKQorICAgICAgICAgICAgICAgIGNvbmZpZy51bnNldF9hbGwobmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBDb21tYW5kRXJyb3I6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgJ1xuV0FSTklORzogY291bGQgbm90IHVuc2V0ICIlcy4lcyIuICAnCisgICAgICAgICAgICAgICAgICAgICdQZXJoYXBzIGl0IGlzIG5vdCBzZXQgYXQgdGhlIC0tbG9jYWwgbGV2ZWw/XG5cbicKKyAgICAgICAgICAgICAgICAgICAgJSAoY29uZmlnLnNlY3Rpb24sIG5hbWUpCisgICAgICAgICAgICAgICAgICAgICkKKworCitkZWYgaXNfc2VjdGlvbl9lbXB0eShzZWN0aW9uLCBsb2NhbCk6CisgICAgIiIiUmV0dXJuIFRydWUgaWZmIHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiBzZWN0aW9uIGlzIGVtcHR5LgorCisgICAgSWZmIGxvY2FsIGlzIFRydWUsIHVzZSB0aGUgLS1sb2NhbCBvcHRpb24gd2hlbiBpbnZva2luZyAnZ2l0CisgICAgY29uZmlnJy4iIiIKKworICAgIGlmIGxvY2FsOgorICAgICAgICBsb2NhbF9vcHRpb24gPSBbJy0tbG9jYWwnXQorICAgIGVsc2U6CisgICAgICAgIGxvY2FsX29wdGlvbiA9IFtdCisKKyAgICB0cnk6CisgICAgICAgIHJlYWRfb3V0cHV0KAorICAgICAgICAgICAgWydnaXQnLCAnY29uZmlnJ10gKworICAgICAgICAgICAgbG9jYWxfb3B0aW9uICsKKyAgICAgICAgICAgIFsnLS1nZXQtcmVnZXhwJywgJ14lc1wuJyAlIChzZWN0aW9uLCldCisgICAgICAgICAgICApCisgICAgZXhjZXB0IENvbW1hbmRFcnJvcjoKKyAgICAgICAgdCwgZSwgdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgaWYgZS5yZXRjb2RlID09IDE6CisgICAgICAgICAgICAjIFRoaXMgbWVhbnMgdGhhdCBubyBzZXR0aW5ncyB3ZXJlIGZvdW5kLgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIHJlbW92ZV9zZWN0aW9uX2lmX2VtcHR5KHNlY3Rpb24pOgorICAgICIiIklmIHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiBzZWN0aW9uIGlzIGVtcHR5LCBkZWxldGUgaXQuIiIiCisKKyAgICB0cnk6CisgICAgICAgIGVtcHR5ID0gaXNfc2VjdGlvbl9lbXB0eShzZWN0aW9uLCBsb2NhbD1UcnVlKQorICAgIGV4Y2VwdCBDb21tYW5kRXJyb3I6CisgICAgICAgICMgT2xkZXIgdmVyc2lvbnMgb2YgZ2l0IGRvIG5vdCBzdXBwb3J0IHRoZSAtLWxvY2FsIG9wdGlvbiwgc28KKyAgICAgICAgIyBpZiB0aGUgZmlyc3QgYXR0ZW1wdCBmYWlscywgdHJ5IHdpdGhvdXQgLS1sb2NhbC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZW1wdHkgPSBpc19zZWN0aW9uX2VtcHR5KHNlY3Rpb24sIGxvY2FsPUZhbHNlKQorICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKKyAgICAgICAgICAgICAgICAnXG5JTkZPOiBJZiBjb25maWd1cmF0aW9uIHNlY3Rpb24gIiVzLioiIGlzIGVtcHR5LCB5b3UgbWlnaHQgd2FudCAnCisgICAgICAgICAgICAgICAgJ3RvIGRlbGV0ZSBpdC5cblxuJworICAgICAgICAgICAgICAgICUgKHNlY3Rpb24sKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgaWYgZW1wdHk6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy4uLnJlbW92aW5nIHNlY3Rpb24gIiVzLioiXG4nICUgKHNlY3Rpb24sKSkKKyAgICAgICAgcmVhZF9vdXRwdXQoWydnaXQnLCAnY29uZmlnJywgJy0tcmVtb3ZlLXNlY3Rpb24nLCBzZWN0aW9uXSkKKyAgICBlbHNlOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKAorICAgICAgICAgICAgJ1xuSU5GTzogQ29uZmlndXJhdGlvbiBzZWN0aW9uICIlcy4qIiBzdGlsbCBoYXMgY29udGVudHMuICAnCisgICAgICAgICAgICAnSXQgd2lsbCBub3QgYmUgZGVsZXRlZC5cblxuJworICAgICAgICAgICAgJSAoc2VjdGlvbiwpCisgICAgICAgICAgICApCisKKworZGVmIG1pZ3JhdGVfY29uZmlnKHN0cmljdD1GYWxzZSwgcmV0YWluPUZhbHNlLCBvdmVyd3JpdGU9RmFsc2UpOgorICAgIG9sZCA9IENvbmZpZygnaG9va3MnKQorICAgIG5ldyA9IENvbmZpZygnbXVsdGltYWlsaG9vaycpCisgICAgaWYgbm90IF9jaGVja19vbGRfY29uZmlnX2V4aXN0cyhvbGQpOgorICAgICAgICBzeXMuZXhpdCgKKyAgICAgICAgICAgICdZb3VyIHJlcG9zaXRvcnkgaGFzIG5vIHBvc3QtcmVjZWl2ZS1lbWFpbCBjb25maWd1cmF0aW9uLiAgJworICAgICAgICAgICAgJ05vdGhpbmcgdG8gZG8uJworICAgICAgICAgICAgKQorICAgIGlmIG5vdCBfY2hlY2tfbmV3X2NvbmZpZ19jbGVhcihuZXcpOgorICAgICAgICBpZiBvdmVyd3JpdGU6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdcbldBUk5JTkc6IEVyYXNpbmcgdGhlIGFib3ZlIHZhbHVlcy4uLlxuXG4nKQorICAgICAgICAgICAgZXJhc2VfdmFsdWVzKG5ldywgTkVXX05BTUVTKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3lzLmV4aXQoCisgICAgICAgICAgICAgICAgJ1xuRVJST1I6IFJlZnVzaW5nIHRvIG92ZXJ3cml0ZSBleGlzdGluZyB2YWx1ZXMuICBVc2UgdGhlIC0tb3ZlcndyaXRlXG4nCisgICAgICAgICAgICAgICAgJ29wdGlvbiB0byBjb250aW51ZSBhbnl3YXkuJworICAgICAgICAgICAgICAgICkKKworICAgIG5hbWUgPSAnc2hvd3JldicKKyAgICBpZiBuYW1lIGluIG9sZDoKKyAgICAgICAgbXNnID0gJ2dpdC1tdWx0aW1haWwgZG9lcyBub3Qgc3VwcG9ydCAiJXMuJXMiJyAlIChvbGQuc2VjdGlvbiwgbmFtZSwpCisgICAgICAgIGlmIHN0cmljdDoKKyAgICAgICAgICAgIHN5cy5leGl0KAorICAgICAgICAgICAgICAgICdFUlJPUjogJXMuXG4nCisgICAgICAgICAgICAgICAgJ1BsZWFzZSB1bnNldCB0aGF0IHZhbHVlIHRoZW4gdHJ5IGFnYWluLCBvciBydW4gd2l0aG91dCAtLXN0cmljdC4nCisgICAgICAgICAgICAgICAgJSAobXNnLCkKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdcbldBUk5JTkc6ICVzIChpZ25vcmluZykuXG5cbicgJSAobXNnLCkpCisKKyAgICBmb3IgbmFtZSBpbiBbJ21haWxpbmdsaXN0JywgJ2Fubm91bmNlbGlzdCddOgorICAgICAgICBpZiBuYW1lIGluIG9sZDoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoCisgICAgICAgICAgICAgICAgJy4uLmNvcHlpbmcgIiVzLiVzIiB0byAiJXMuJXMiXG4nICUgKG9sZC5zZWN0aW9uLCBuYW1lLCBuZXcuc2VjdGlvbiwgbmFtZSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBvbGRfcmVjaXBpZW50cyA9IG9sZC5nZXRfYWxsKG5hbWUsIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgICAgIG9sZF9yZWNpcGllbnRzID0gJywgJy5qb2luKG8uc3RyaXAoKSBmb3IgbyBpbiBvbGRfcmVjaXBpZW50cykKKyAgICAgICAgICAgIG5ldy5zZXRfcmVjaXBpZW50cyhuYW1lLCBvbGRfcmVjaXBpZW50cykKKworICAgIGlmIHN0cmljdDoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKKyAgICAgICAgICAgICcuLi5zZXR0aW5nICIlcy5jb21taXRsaXN0IiB0byB0aGUgZW1wdHkgc3RyaW5nXG4nICUgKG5ldy5zZWN0aW9uLCkKKyAgICAgICAgICAgICkKKyAgICAgICAgbmV3LnNldF9yZWNpcGllbnRzKCdjb21taXRsaXN0JywgJycpCisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoCisgICAgICAgICAgICAnLi4uc2V0dGluZyAiJXMuYW5ub3VuY2VzaG9ydGxvZyIgdG8gInRydWUiXG4nICUgKG5ldy5zZWN0aW9uLCkKKyAgICAgICAgICAgICkKKyAgICAgICAgbmV3LnNldCgnYW5ub3VuY2VzaG9ydGxvZycsICd0cnVlJykKKworICAgIGZvciBuYW1lIGluIFsnZW52ZWxvcGVzZW5kZXInLCAnZW1haWxtYXhsaW5lcycsICdkaWZmb3B0cycsICdzY2FuY29tbWl0Zm9yY2MnXToKKyAgICAgICAgaWYgbmFtZSBpbiBvbGQ6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKAorICAgICAgICAgICAgICAgICcuLi5jb3B5aW5nICIlcy4lcyIgdG8gIiVzLiVzIlxuJyAlIChvbGQuc2VjdGlvbiwgbmFtZSwgbmV3LnNlY3Rpb24sIG5hbWUpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgbmV3LnNldChuYW1lLCBvbGQuZ2V0KG5hbWUpKQorCisgICAgbmFtZSA9ICdlbWFpbHByZWZpeCcKKyAgICBpZiBuYW1lIGluIG9sZDoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKKyAgICAgICAgICAgICcuLi5jb3B5aW5nICIlcy4lcyIgdG8gIiVzLiVzIlxuJyAlIChvbGQuc2VjdGlvbiwgbmFtZSwgbmV3LnNlY3Rpb24sIG5hbWUpCisgICAgICAgICAgICApCisgICAgICAgIG5ldy5zZXQobmFtZSwgb2xkLmdldChuYW1lKSkKKyAgICBlbGlmIHN0cmljdDoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKKyAgICAgICAgICAgICcuLi5zZXR0aW5nICIlcy4lcyIgdG8gIltTQ01dIiB0byBwcmVzZXJ2ZSBvbGQgc3ViamVjdCBsaW5lc1xuJworICAgICAgICAgICAgJSAobmV3LnNlY3Rpb24sIG5hbWUpCisgICAgICAgICAgICApCisgICAgICAgIG5ldy5zZXQobmFtZSwgJ1tTQ01dJykKKworICAgIGlmIG5vdCByZXRhaW46CisgICAgICAgIGVyYXNlX3ZhbHVlcyhvbGQsIE9MRF9OQU1FUykKKyAgICAgICAgcmVtb3ZlX3NlY3Rpb25faWZfZW1wdHkob2xkLnNlY3Rpb24pCisKKyAgICBzeXMuc3RkZXJyLndyaXRlKElORk8pCisgICAgZm9yIG5hbWUgaW4gTkVXX05BTUVTOgorICAgICAgICBpZiBuYW1lIG5vdCBpbiBPTERfTkFNRVM6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCcgICAgIiVzLiVzIlxuJyAlIChuZXcuc2VjdGlvbiwgbmFtZSwpKQorICAgIHN5cy5zdGRlcnIud3JpdGUoJ1xuJykKKworCitkZWYgbWFpbihhcmdzKToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICAgIGRlc2NyaXB0aW9uPV9fZG9jX18sCisgICAgICAgIHVzYWdlPSclcHJvZyBbT1BUSU9OU10nLAorICAgICAgICApCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tc3RyaWN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0oCisgICAgICAgICAgICAnU2xhdmlzaGx5IGNvbmZpZ3VyZSBnaXQtbXVsdGltYWlsIGFzIGNsb3NlbHkgYXMgcG9zc2libGUgdG8gJworICAgICAgICAgICAgJ3RoZSBwb3N0LXJlY2VpdmUtZW1haWwgY29uZmlndXJhdGlvbi4gIERlZmF1bHQgaXMgdG8gdHVybiAnCisgICAgICAgICAgICAnb24gc29tZSBuZXcgZmVhdHVyZXMgdGhhdCBoYXZlIG5vIGVxdWl2YWxlbnQgaW4gcG9zdC1yZWNlaXZlLWVtYWlsLicKKyAgICAgICAgICAgICksCisgICAgICAgICkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tcmV0YWluJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0oCisgICAgICAgICAgICAnUmV0YWluIHRoZSBwb3N0LXJlY2VpdmUtZW1haWwgY29uZmlndXJhdGlvbiB2YWx1ZXMuICAnCisgICAgICAgICAgICAnRGVmYXVsdCBpcyB0byBkZWxldGUgdGhlbSBhZnRlciB0aGUgbmV3IHZhbHVlcyBhcmUgc2V0LicKKyAgICAgICAgICAgICksCisgICAgICAgICkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tb3ZlcndyaXRlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0oCisgICAgICAgICAgICAnT3ZlcndyaXRlIGFueSBleGlzdGluZyBnaXQtbXVsdGltYWlsIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuICAnCisgICAgICAgICAgICAnRGVmYXVsdCBpcyB0byBhYm9ydCBpZiBzdWNoIHNldHRpbmdzIGFscmVhZHkgZXhpc3QuJworICAgICAgICAgICAgKSwKKyAgICAgICAgKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGFyZ3M6CisgICAgICAgIHBhcnNlci5lcnJvcignVW5leHBlY3RlZCBhcmd1bWVudHM6ICVzJyAlICgnICcuam9pbihhcmdzKSwpKQorCisgICAgbWlncmF0ZV9jb25maWcoc3RyaWN0PW9wdGlvbnMuc3RyaWN0LCByZXRhaW49b3B0aW9ucy5yZXRhaW4sIG92ZXJ3cml0ZT1vcHRpb25zLm92ZXJ3cml0ZSkKKworCittYWluKHN5cy5hcmd2WzE6XSkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL3Bvc3QtcmVjZWl2ZS5leGFtcGxlIGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvcG9zdC1yZWNlaXZlLmV4YW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGY5OGM1YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL3Bvc3QtcmVjZWl2ZS5leGFtcGxlCkBAIC0wLDAgKzEsMTAxIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyIiIkV4YW1wbGUgcG9zdC1yZWNlaXZlIGhvb2sgYmFzZWQgb24gZ2l0LW11bHRpbWFpbC4KKworVGhlIHNpbXBsZXN0IHdheSB0byB1c2UgZ2l0LW11bHRpbWFpbCBpcyB0byB1c2UgdGhlIHNjcmlwdAorZ2l0X211bHRpbWFpbC5weSBkaXJlY3RseSBhcyBhIHBvc3QtcmVjZWl2ZSBob29rLCBhbmQgdG8gY29uZmlndXJlIGl0Cit1c2luZyBHaXQncyBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBjb21tYW5kLWxpbmUgcGFyYW1ldGVycy4gIFlvdSBjYW4KK2Fsc28gd3JpdGUgeW91ciBvd24gUHl0aG9uIHdyYXBwZXIgZm9yIG1vcmUgYWR2YW5jZWQgY29uZmlndXJhYmlsaXR5LAordXNpbmcgZ2l0X211bHRpbWFpbC5weSBhcyBhIFB5dGhvbiBtb2R1bGUuCisKK1RoaXMgc2NyaXB0IGlzIGEgc2ltcGxlIGV4YW1wbGUgb2Ygc3VjaCBhIHBvc3QtcmVjZWl2ZSBob29rLiAgSXQgaXMKK2ludGVuZGVkIHRvIGJlIGN1c3RvbWl6ZWQgYmVmb3JlIHVzZTsgc2VlIHRoZSBjb21tZW50cyBpbiB0aGUgc2NyaXB0Cit0byBoZWxwIHlvdSBnZXQgc3RhcnRlZC4KKworVXNpbmcgZ2l0LW11bHRpbWFpbCBhcyBhIFB5dGhvbiBtb2R1bGUgYXMgZG9uZSBoZXJlIHByb3ZpZGVzIG1vcmUKK2ZsZXhpYmlsaXR5LiAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgYWR2YW50YWdlczoKKworKiBUaGUgdG9vbCdzIGJlaGF2aW9yIGNhbiBiZSBjdXN0b21pemVkIHVzaW5nIGFyYml0cmFyeSBQeXRob24gY29kZSwKKyAgd2l0aG91dCBoYXZpbmcgdG8gZWRpdCBnaXRfbXVsdGltYWlsLnB5LgorCisqIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgY2FuIGJlIHJlYWQgZnJvbSBvdGhlciBzb3VyY2VzOyBmb3IgZXhhbXBsZSwKKyAgdXNlciBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIGNvdWxkIGJlIHJlYWQgZnJvbSBMREFQIG9yIGZyb20gYQorICBkYXRhYmFzZS4gIE9yIHRoZSBzZXR0aW5ncyBjYW4gZXZlbiBiZSBoYXJkY29kZWQgaW4gdGhlIGltcG9ydGluZworICBQeXRob24gc2NyaXB0LCBpZiB0aGlzIGlzIHByZWZlcnJlZC4KKworVGhpcyBzY3JpcHQgaXMgYSB2ZXJ5IGJhc2ljIGV4YW1wbGUgb2YgaG93IHRvIHVzZSBnaXRfbXVsdGltYWlsLnB5IGFzCithIG1vZHVsZS4gIFRoZSBjb21tZW50cyBiZWxvdyBleHBsYWluIHNvbWUgb2YgdGhlIHBvaW50cyBhdCB3aGljaCB0aGUKK3NjcmlwdCdzIGJlaGF2aW9yIGNvdWxkIGJlIGNoYW5nZWQgb3IgY3VzdG9taXplZC4KKworIiIiCisKK2ltcG9ydCBzeXMKKworIyBJZiBuZWNlc3NhcnksIGFkZCB0aGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcKKyMgZ2l0X211bHRpbWFpbC5weSB0byB0aGUgUHl0aG9uIHBhdGggYXMgZm9sbG93cy4gIChUaGlzIGlzIG5vdAorIyBuZWNlc3NhcnkgaWYgZ2l0X211bHRpbWFpbC5weSBpcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhpcworIyBzY3JpcHQpOgorCisjTElCRElSID0gJ3BhdGgvdG8vZGlyZWN0b3J5L2NvbnRhaW5pbmcvbW9kdWxlJworI3N5cy5wYXRoLmluc2VydCgwLCBMSUJESVIpCisKK2ltcG9ydCBnaXRfbXVsdGltYWlsCisKKyMgSXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IHRoZSBvdXRwdXQgdGVtcGxhdGVzIGhlcmU7IGUuZy46CisKKyNnaXRfbXVsdGltYWlsLkZPT1RFUl9URU1QTEFURSA9ICIiIlwKKyMKKyMtLSBcblwKKyNUaGlzIGVtYWlsIHdhcyBnZW5lcmF0ZWQgYnkgdGhlIHdvbmRlcmZ1bCBnaXQtbXVsdGltYWlsIHRvb2wuCisjIiIiCisKKworIyBTcGVjaWZ5IHdoaWNoICJnaXQgY29uZmlnIiBzZWN0aW9uIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIGZvcgorIyBnaXQtbXVsdGltYWlsOgorY29uZmlnID0gZ2l0X211bHRpbWFpbC5Db25maWcoJ211bHRpbWFpbGhvb2snKQorCisjIFNldCBzb21lIEdpdCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gRXF1aXZhbGVudCB0byBwYXNzaW5nIHZhcj12YWwKKyMgdG8gImdpdCAtYyB2YXI9dmFsIiBlYWNoIHRpbWUgZ2l0IGlzIGNhbGxlZCwgb3IgdG8gYWRkaW5nIHRoZQorIyBjb25maWd1cmF0aW9uIGluIC5naXQvY29uZmlnIChtdXN0IGNvbWUgYmVmb3JlIGluc3RhbnRpYXRpbmcgdGhlCisjIGVudmlyb25tZW50KSA6CisjZ2l0X211bHRpbWFpbC5Db25maWcuYWRkX2NvbmZpZ19wYXJhbWV0ZXJzKCdtdWx0aW1haWxob29rLmNvbW1pdEVtYWlsRm9ybWF0PWh0bWwnKQorI2dpdF9tdWx0aW1haWwuQ29uZmlnLmFkZF9jb25maWdfcGFyYW1ldGVycygoJ3VzZXIubmFtZT1mb28nLCAndXNlci5lbWFpbD1mb29AZXhhbXBsZS5jb20nKSkKKworIyBTZWxlY3QgdGhlIHR5cGUgb2YgZW52aXJvbm1lbnQ6Cit0cnk6CisgICAgZW52aXJvbm1lbnQgPSBnaXRfbXVsdGltYWlsLkdlbmVyaWNFbnZpcm9ubWVudChjb25maWc9Y29uZmlnKQorICAgICNlbnZpcm9ubWVudCA9IGdpdF9tdWx0aW1haWwuR2l0b2xpdGVFbnZpcm9ubWVudChjb25maWc9Y29uZmlnKQorZXhjZXB0IGdpdF9tdWx0aW1haWwuQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjoKKyAgICBzeXMuc3RkZXJyLndyaXRlKCcqKiogJXNcbicgJSBzeXMuZXhjX2luZm8oKVsxXSkKKyAgICBzeXMuZXhpdCgxKQorCisKKyMgQ2hvb3NlIHRoZSBtZXRob2Qgb2Ygc2VuZGluZyBlbWFpbHMgYmFzZWQgb24gdGhlIGdpdCBjb25maWc6CittYWlsZXIgPSBnaXRfbXVsdGltYWlsLmNob29zZV9tYWlsZXIoY29uZmlnLCBlbnZpcm9ubWVudCkKKworIyBBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGhhcmRjb2RlIHRoZSBtYWlsZXIgdXNpbmcgY29kZSBsaWtlIG9uZSBvZgorIyB0aGUgZm9sbG93aW5nOgorCisjIFVzZSAiL3Vzci9zYmluL3NlbmRtYWlsIC1vaSAtdCIgdG8gc2VuZCBlbWFpbHMuICBUaGUgZW52ZWxvcGVzZW5kZXIKKyMgYXJndW1lbnQgaXMgb3B0aW9uYWw6CisjbWFpbGVyID0gZ2l0X211bHRpbWFpbC5TZW5kTWFpbGVyKAorIyAgICBjb21tYW5kPVsnL3Vzci9zYmluL3NlbmRtYWlsJywgJy1vaScsICctdCddLAorIyAgICBlbnZlbG9wZXNlbmRlcj0nZ2l0LXJlcG9AZXhhbXBsZS5jb20nLAorIyAgICApCisKKyMgVXNlIFB5dGhvbidzIHNtdHBsaWIgdG8gc2VuZCBlbWFpbHMuICBCb3RoIGFyZ3VtZW50cyBhcmUgcmVxdWlyZWQuCisjbWFpbGVyID0gZ2l0X211bHRpbWFpbC5TTVRQTWFpbGVyKAorIyAgICBlbnZpcm9ubWVudD1lbnZpcm9ubWVudCwKKyMgICAgZW52ZWxvcGVzZW5kZXI9J2dpdC1yZXBvQGV4YW1wbGUuY29tJywKKyMgICAgIyBUaGUgc210cHNlcnZlciBhcmd1bWVudCBjYW4gYWxzbyBpbmNsdWRlIGEgcG9ydCBudW1iZXI7IGUuZy4sCisjICAgICMgICAgIHNtdHBzZXJ2ZXI9J21haWwuZXhhbXBsZS5jb206MjUnCisjICAgIHNtdHBzZXJ2ZXI9J21haWwuZXhhbXBsZS5jb20nLAorIyAgICApCisKKyMgT3V0cHV0TWFpbGVyIGlzIGludGVuZGVkIG9ubHkgZm9yIHRlc3Rpbmc7IGl0IHdyaXRlcyB0aGUgZW1haWxzIHRvCisjIHRoZSBzcGVjaWZpZWQgZmlsZSBzdHJlYW0uCisjbWFpbGVyID0gZ2l0X211bHRpbWFpbC5PdXRwdXRNYWlsZXIoc3lzLnN0ZG91dCkKKworCisjIFJlYWQgY2hhbmdlcyBmcm9tIHN0ZGluIGFuZCBzZW5kIG5vdGlmaWNhdGlvbiBlbWFpbHM6CitnaXRfbXVsdGltYWlsLnJ1bl9hc19wb3N0X3JlY2VpdmVfaG9vayhlbnZpcm9ubWVudCwgbWFpbGVyKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9wb3N0LXJlY2VpdmUtZW1haWwgYi9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZjU2NWViCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ob29rcy9wb3N0LXJlY2VpdmUtZW1haWwKQEAgLTAsMCArMSw3NTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQW5keSBQYXJraW5zCisjCisjIEFuIGV4YW1wbGUgaG9vayBzY3JpcHQgdG8gbWFpbCBvdXQgY29tbWl0IHVwZGF0ZSBpbmZvcm1hdGlvbi4KKyMKKyMgTk9URTogVGhpcyBzY3JpcHQgaXMgbm8gbG9uZ2VyIHVuZGVyIGFjdGl2ZSBkZXZlbG9wbWVudC4gIFRoZXJlCisjIGlzIGFub3RoZXIgc2NyaXB0LCBnaXQtbXVsdGltYWlsLCB3aGljaCBpcyBtb3JlIGNhcGFibGUgYW5kCisjIGNvbmZpZ3VyYWJsZSBhbmQgaXMgbGFyZ2VseSBiYWNrd2FyZHMtY29tcGF0aWJsZSB3aXRoIHRoaXMgc2NyaXB0OworIyBwbGVhc2Ugc2VlICJjb250cmliL2hvb2tzL211bHRpbWFpbC8iLiAgRm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8KKyMgbWlncmF0ZSBmcm9tIHBvc3QtcmVjZWl2ZS1lbWFpbCB0byBnaXQtbXVsdGltYWlsLCBwbGVhc2Ugc2VlCisjICJSRUFETUUubWlncmF0ZS1mcm9tLXBvc3QtcmVjZWl2ZS1lbWFpbCIgaW4gdGhhdCBkaXJlY3RvcnkuCisjCisjIFRoaXMgaG9vayBzZW5kcyBlbWFpbHMgbGlzdGluZyBuZXcgcmV2aXNpb25zIHRvIHRoZSByZXBvc2l0b3J5CisjIGludHJvZHVjZWQgYnkgdGhlIGNoYW5nZSBiZWluZyByZXBvcnRlZC4gIFRoZSBydWxlIGlzIHRoYXQgKGZvcgorIyBicmFuY2ggdXBkYXRlcykgZWFjaCBjb21taXQgd2lsbCBhcHBlYXIgb24gb25lIGVtYWlsIGFuZCBvbmUgZW1haWwKKyMgb25seS4KKyMKKyMgVGhpcyBob29rIGlzIHN0b3JlZCBpbiB0aGUgY29udHJpYi9ob29rcyBkaXJlY3RvcnkuICBZb3VyIGRpc3RyaWJ1dGlvbgorIyB3aWxsIGhhdmUgcHV0IHRoaXMgc29tZXdoZXJlIHN0YW5kYXJkLiAgWW91IHNob3VsZCBtYWtlIHRoaXMgc2NyaXB0CisjIGV4ZWN1dGFibGUgdGhlbiBsaW5rIHRvIGl0IGluIHRoZSByZXBvc2l0b3J5IHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBpdCBpbi4KKyMgRm9yIGV4YW1wbGUsIG9uIGRlYmlhbiB0aGUgaG9vayBpcyBzdG9yZWQgaW4KKyMgL3Vzci9zaGFyZS9naXQtY29yZS9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbDoKKyMKKyMgIGNkIC9wYXRoL3RvL3lvdXIvcmVwb3NpdG9yeS5naXQKKyMgIGxuIC1zZiAvdXNyL3NoYXJlL2dpdC1jb3JlL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsIGhvb2tzL3Bvc3QtcmVjZWl2ZQorIworIyBUaGlzIGhvb2sgc2NyaXB0IGFzc3VtZXMgaXQgaXMgZW5hYmxlZCBvbiB0aGUgY2VudHJhbCByZXBvc2l0b3J5IG9mIGEKKyMgcHJvamVjdCwgd2l0aCBhbGwgdXNlcnMgcHVzaGluZyBvbmx5IHRvIGl0IGFuZCBub3QgYmV0d2VlbiBlYWNoIG90aGVyLiAgSXQKKyMgd2lsbCBzdGlsbCB3b3JrIGlmIHlvdSBkb24ndCBvcGVyYXRlIGluIHRoYXQgc3R5bGUsIGJ1dCBpdCB3b3VsZCBiZWNvbWUKKyMgcG9zc2libGUgZm9yIHRoZSBlbWFpbCB0byBiZSBmcm9tIHNvbWVvbmUgb3RoZXIgdGhhbiB0aGUgcGVyc29uIGRvaW5nIHRoZQorIyBwdXNoLgorIworIyBUbyBoZWxwIHdpdGggZGVidWdnaW5nIGFuZCB1c2Ugb24gcHJlLXYxLjUuMSBnaXQgc2VydmVycywgdGhpcyBzY3JpcHQgd2lsbAorIyBhbHNvIG9iZXkgdGhlIGludGVyZmFjZSBvZiBob29rcy91cGRhdGUsIHRha2luZyBpdHMgYXJndW1lbnRzIG9uIHRoZQorIyBjb21tYW5kIGxpbmUuICBVbmZvcnR1bmF0ZWx5LCBob29rcy91cGRhdGUgaXMgY2FsbGVkIG9uY2UgZm9yIGVhY2ggcmVmLgorIyBUbyBhdm9pZCBmaXJpbmcgb25lIGVtYWlsIHBlciByZWYsIHRoaXMgc2NyaXB0IGp1c3QgcHJpbnRzIGl0cyBvdXRwdXQgdG8KKyMgdGhlIHNjcmVlbiB3aGVuIHVzZWQgaW4gdGhpcyBtb2RlLiAgVGhlIG91dHB1dCBjYW4gdGhlbiBiZSByZWRpcmVjdGVkIGlmCisjIHdhbnRlZC4KKyMKKyMgQ29uZmlnCisjIC0tLS0tLQorIyBob29rcy5tYWlsaW5nbGlzdAorIyAgIFRoaXMgaXMgdGhlIGxpc3QgdGhhdCBhbGwgcHVzaGVzIHdpbGwgZ28gdG87IGxlYXZlIGl0IGJsYW5rIHRvIG5vdCBzZW5kCisjICAgZW1haWxzIGZvciBldmVyeSByZWYgdXBkYXRlLgorIyBob29rcy5hbm5vdW5jZWxpc3QKKyMgICBUaGlzIGlzIHRoZSBsaXN0IHRoYXQgYWxsIHB1c2hlcyBvZiBhbm5vdGF0ZWQgdGFncyB3aWxsIGdvIHRvLiAgTGVhdmUgaXQKKyMgICBibGFuayB0byBkZWZhdWx0IHRvIHRoZSBtYWlsaW5nbGlzdCBmaWVsZC4gIFRoZSBhbm5vdW5jZSBlbWFpbHMgbGlzdHMKKyMgICB0aGUgc2hvcnQgbG9nIHN1bW1hcnkgb2YgdGhlIGNoYW5nZXMgc2luY2UgdGhlIGxhc3QgYW5ub3RhdGVkIHRhZy4KKyMgaG9va3MuZW52ZWxvcGVzZW5kZXIKKyMgICBJZiBzZXQgdGhlbiB0aGUgLWYgb3B0aW9uIGlzIHBhc3NlZCB0byBzZW5kbWFpbCB0byBhbGxvdyB0aGUgZW52ZWxvcGUKKyMgICBzZW5kZXIgYWRkcmVzcyB0byBiZSBzZXQKKyMgaG9va3MuZW1haWxwcmVmaXgKKyMgICBBbGwgZW1haWxzIGhhdmUgdGhlaXIgc3ViamVjdHMgcHJlZml4ZWQgd2l0aCB0aGlzIHByZWZpeCwgb3IgIltTQ01dIgorIyAgIGlmIGVtYWlscHJlZml4IGlzIHVuc2V0LCB0byBhaWQgZmlsdGVyaW5nCisjIGhvb2tzLnNob3dyZXYKKyMgICBUaGUgc2hlbGwgY29tbWFuZCB1c2VkIHRvIGZvcm1hdCBlYWNoIHJldmlzaW9uIGluIHRoZSBlbWFpbCwgd2l0aAorIyAgICIlcyIgcmVwbGFjZWQgd2l0aCB0aGUgY29tbWl0IGlkLiAgRGVmYXVsdHMgdG8gImdpdCByZXYtbGlzdCAtMQorIyAgIC0tcHJldHR5ICVzIiwgZGlzcGxheWluZyB0aGUgY29tbWl0IGlkLCBhdXRob3IsIGRhdGUgYW5kIGxvZworIyAgIG1lc3NhZ2UuICBUbyBsaXN0IGZ1bGwgcGF0Y2hlcyBzZXBhcmF0ZWQgYnkgYSBibGFuayBsaW5lLCB5b3UKKyMgICBjb3VsZCBzZXQgdGhpcyB0byAiZ2l0IHNob3cgLUMgJXM7IGVjaG8iLgorIyAgIFRvIGxpc3QgYSBnaXR3ZWIvY2dpdCBVUkwgKmFuZCogYSBmdWxsIHBhdGNoIGZvciBlYWNoIGNoYW5nZSBzZXQsIHVzZSB0aGlzOgorIyAgICAgInQ9JXM7IHByaW50ZiAnaHR0cDovLy4uLi8/aWQ9JSVzJyBcJHQ7IGVjaG87ZWNobzsgZ2l0IHNob3cgLUMgXCR0OyBlY2hvIgorIyAgIEJlIGNhcmVmdWwgaWYgIi4uLiIgY29udGFpbnMgdGhpbmdzIHRoYXQgd2lsbCBiZSBleHBhbmRlZCBieSBzaGVsbCAiZXZhbCIKKyMgICBvciBwcmludGYuCisjIGhvb2tzLmVtYWlsbWF4bGluZXMKKyMgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZAorIyAgIGVtYWlsIGJvZHkuIElmIG5vdCBzcGVjaWZpZWQsIHRoZXJlIGlzIG5vIGxpbWl0LgorIyAgIExpbmVzIGJleW9uZCB0aGUgbGltaXQgYXJlIHN1cHByZXNzZWQgYW5kIGNvdW50ZWQsIGFuZCBhIGZpbmFsCisjICAgbGluZSBpcyBhZGRlZCBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2Ygc3VwcHJlc3NlZCBsaW5lcy4KKyMgaG9va3MuZGlmZm9wdHMKKyMgICBBbHRlcm5hdGUgb3B0aW9ucyBmb3IgdGhlIGdpdCBkaWZmLXRyZWUgaW52b2NhdGlvbiB0aGF0IHNob3dzIGNoYW5nZXMuCisjICAgRGVmYXVsdCBpcyAiLS1zdGF0IC0tc3VtbWFyeSAtLWZpbmQtY29waWVzLWhhcmRlciIuIEFkZCAtcCB0byB0aG9zZQorIyAgIG9wdGlvbnMgdG8gaW5jbHVkZSBhIHVuaWZpZWQgZGlmZiBvZiBjaGFuZ2VzIGluIGFkZGl0aW9uIHRvIHRoZSB1c3VhbAorIyAgIHN1bW1hcnkgb3V0cHV0LgorIworIyBOb3RlcworIyAtLS0tLQorIyBBbGwgZW1haWxzIGluY2x1ZGUgdGhlIGhlYWRlcnMgIlgtR2l0LVJlZm5hbWUiLCAiWC1HaXQtT2xkcmV2IiwKKyMgIlgtR2l0LU5ld3JldiIsIGFuZCAiWC1HaXQtUmVmdHlwZSIgdG8gZW5hYmxlIGZpbmUgdHVuZWQgZmlsdGVyaW5nIGFuZAorIyBnaXZlIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcuCisjCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMKKworIworIyBGdW5jdGlvbiB0byBwcmVwYXJlIGZvciBlbWFpbCBnZW5lcmF0aW9uLiBUaGlzIGRlY2lkZXMgd2hhdCB0eXBlCisjIG9mIHVwZGF0ZSB0aGlzIGlzIGFuZCB3aGV0aGVyIGFuIGVtYWlsIHNob3VsZCBldmVuIGJlIGdlbmVyYXRlZC4KKyMKK3ByZXBfZm9yX2VtYWlsKCkKK3sKKwkjIC0tLSBBcmd1bWVudHMKKwlvbGRyZXY9JChnaXQgcmV2LXBhcnNlICQxKQorCW5ld3Jldj0kKGdpdCByZXYtcGFyc2UgJDIpCisJcmVmbmFtZT0iJDMiCisKKwkjIC0tLSBJbnRlcnByZXQKKwkjIDAwMDAtPjEyMzQgKGNyZWF0ZSkKKwkjIDEyMzQtPjIzNDUgKHVwZGF0ZSkKKwkjIDIzNDUtPjAwMDAgKGRlbGV0ZSkKKwlpZiBleHByICIkb2xkcmV2IiA6ICcwKiQnID4vZGV2L251bGwKKwl0aGVuCisJCWNoYW5nZV90eXBlPSJjcmVhdGUiCisJZWxzZQorCQlpZiBleHByICIkbmV3cmV2IiA6ICcwKiQnID4vZGV2L251bGwKKwkJdGhlbgorCQkJY2hhbmdlX3R5cGU9ImRlbGV0ZSIKKwkJZWxzZQorCQkJY2hhbmdlX3R5cGU9InVwZGF0ZSIKKwkJZmkKKwlmaQorCisJIyAtLS0gR2V0IHRoZSByZXZpc2lvbiB0eXBlcworCW5ld3Jldl90eXBlPSQoZ2l0IGNhdC1maWxlIC10ICRuZXdyZXYgMj4gL2Rldi9udWxsKQorCW9sZHJldl90eXBlPSQoZ2l0IGNhdC1maWxlIC10ICIkb2xkcmV2IiAyPiAvZGV2L251bGwpCisJY2FzZSAiJGNoYW5nZV90eXBlIiBpbgorCWNyZWF0ZXx1cGRhdGUpCisJCXJldj0iJG5ld3JldiIKKwkJcmV2X3R5cGU9IiRuZXdyZXZfdHlwZSIKKwkJOzsKKwlkZWxldGUpCisJCXJldj0iJG9sZHJldiIKKwkJcmV2X3R5cGU9IiRvbGRyZXZfdHlwZSIKKwkJOzsKKwllc2FjCisKKwkjIFRoZSByZXZpc2lvbiB0eXBlIHRlbGxzIHVzIHdoYXQgdHlwZSB0aGUgY29tbWl0IGlzLCBjb21iaW5lZCB3aXRoCisJIyB0aGUgbG9jYXRpb24gb2YgdGhlIHJlZiB3ZSBjYW4gZGVjaWRlIGJldHdlZW4KKwkjICAtIHdvcmtpbmcgYnJhbmNoCisJIyAgLSB0cmFja2luZyBicmFuY2gKKwkjICAtIHVuYW5ub3RlZCB0YWcKKwkjICAtIGFubm90YXRlZCB0YWcKKwljYXNlICIkcmVmbmFtZSIsIiRyZXZfdHlwZSIgaW4KKwkJcmVmcy90YWdzLyosY29tbWl0KQorCQkJIyB1bi1hbm5vdGF0ZWQgdGFnCisJCQlyZWZuYW1lX3R5cGU9InRhZyIKKwkJCXNob3J0X3JlZm5hbWU9JHtyZWZuYW1lIyNyZWZzL3RhZ3MvfQorCQkJOzsKKwkJcmVmcy90YWdzLyosdGFnKQorCQkJIyBhbm5vdGF0ZWQgdGFnCisJCQlyZWZuYW1lX3R5cGU9ImFubm90YXRlZCB0YWciCisJCQlzaG9ydF9yZWZuYW1lPSR7cmVmbmFtZSMjcmVmcy90YWdzL30KKwkJCSMgY2hhbmdlIHJlY2lwaWVudHMKKwkJCWlmIFsgLW4gIiRhbm5vdW5jZXJlY2lwaWVudHMiIF07IHRoZW4KKwkJCQlyZWNpcGllbnRzPSIkYW5ub3VuY2VyZWNpcGllbnRzIgorCQkJZmkKKwkJCTs7CisJCXJlZnMvaGVhZHMvKixjb21taXQpCisJCQkjIGJyYW5jaAorCQkJcmVmbmFtZV90eXBlPSJicmFuY2giCisJCQlzaG9ydF9yZWZuYW1lPSR7cmVmbmFtZSMjcmVmcy9oZWFkcy99CisJCQk7OworCQlyZWZzL3JlbW90ZXMvKixjb21taXQpCisJCQkjIHRyYWNraW5nIGJyYW5jaAorCQkJcmVmbmFtZV90eXBlPSJ0cmFja2luZyBicmFuY2giCisJCQlzaG9ydF9yZWZuYW1lPSR7cmVmbmFtZSMjcmVmcy9yZW1vdGVzL30KKwkJCWVjaG8gPiYyICIqKiogUHVzaC11cGRhdGUgb2YgdHJhY2tpbmcgYnJhbmNoLCAkcmVmbmFtZSIKKwkJCWVjaG8gPiYyICIqKiogIC0gbm8gZW1haWwgZ2VuZXJhdGVkLiIKKwkJCXJldHVybiAxCisJCQk7OworCQkqKQorCQkJIyBBbnl0aGluZyBlbHNlIChpcyB0aGVyZSBhbnl0aGluZyBlbHNlPykKKwkJCWVjaG8gPiYyICIqKiogVW5rbm93biB0eXBlIG9mIHVwZGF0ZSB0byAkcmVmbmFtZSAoJHJldl90eXBlKSIKKwkJCWVjaG8gPiYyICIqKiogIC0gbm8gZW1haWwgZ2VuZXJhdGVkIgorCQkJcmV0dXJuIDEKKwkJCTs7CisJZXNhYworCisJIyBDaGVjayBpZiB3ZSd2ZSBnb3QgYW55b25lIHRvIHNlbmQgdG8KKwlpZiBbIC16ICIkcmVjaXBpZW50cyIgXTsgdGhlbgorCQljYXNlICIkcmVmbmFtZV90eXBlIiBpbgorCQkJImFubm90YXRlZCB0YWciKQorCQkJCWNvbmZpZ19uYW1lPSJob29rcy5hbm5vdW5jZWxpc3QiCisJCQkJOzsKKwkJCSopCisJCQkJY29uZmlnX25hbWU9Imhvb2tzLm1haWxpbmdsaXN0IgorCQkJCTs7CisJCWVzYWMKKwkJZWNobyA+JjIgIioqKiAkY29uZmlnX25hbWUgaXMgbm90IHNldCBzbyBubyBlbWFpbCB3aWxsIGJlIHNlbnQiCisJCWVjaG8gPiYyICIqKiogZm9yICRyZWZuYW1lIHVwZGF0ZSAkb2xkcmV2LT4kbmV3cmV2IgorCQlyZXR1cm4gMQorCWZpCisKKwlyZXR1cm4gMAorfQorCisjCisjIFRvcCBsZXZlbCBlbWFpbCBnZW5lcmF0aW9uIGZ1bmN0aW9uLiAgVGhpcyBjYWxscyB0aGUgYXBwcm9wcmlhdGUKKyMgYm9keS1nZW5lcmF0aW9uIHJvdXRpbmUgYWZ0ZXIgb3V0cHV0dGluZyB0aGUgY29tbW9uIGhlYWRlci4KKyMKKyMgTm90ZSB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgYWN0dWFsbHkgZ2VuZXJhdGUgYW55IGVtYWlsIG91dHB1dCwgdGhhdCBpcworIyB0YWtlbiBjYXJlIG9mIGJ5IHRoZSBmdW5jdGlvbnMgaXQgY2FsbHM6CisjICAtIGdlbmVyYXRlX2VtYWlsX2hlYWRlcgorIyAgLSBnZW5lcmF0ZV9jcmVhdGVfWFhYWF9lbWFpbAorIyAgLSBnZW5lcmF0ZV91cGRhdGVfWFhYWF9lbWFpbAorIyAgLSBnZW5lcmF0ZV9kZWxldGVfWFhYWF9lbWFpbAorIyAgLSBnZW5lcmF0ZV9lbWFpbF9mb290ZXIKKyMKKyMgTm90ZSBhbHNvIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW5ub3QgJ2V4aXQnIGZyb20gdGhlIHNjcmlwdDsgd2hlbiB0aGlzCisjIGZ1bmN0aW9uIGlzIHJ1bm5pbmcgKGluIGhvb2sgc2NyaXB0IG1vZGUpLCB0aGUgc2VuZF9tYWlsKCkgZnVuY3Rpb24KKyMgaXMgYWxyZWFkeSBleGVjdXRpbmcgaW4gYW5vdGhlciBwcm9jZXNzLCBjb25uZWN0ZWQgdmlhIGEgcGlwZSwgYW5kCisjIGlmIHRoaXMgZnVuY3Rpb24gZXhpdHMgd2l0aG91dCwgd2hhdGV2ZXIgaGFzIGJlZW4gZ2VuZXJhdGVkIHRvIHRoYXQKKyMgcG9pbnQgd2lsbCBiZSBzZW50IGFzIGFuIGVtYWlsLi4uIGV2ZW4gaWYgbm90aGluZyBoYXMgYmVlbiBnZW5lcmF0ZWQuCisjCitnZW5lcmF0ZV9lbWFpbCgpCit7CisJIyBFbWFpbCBwYXJhbWV0ZXJzCisJIyBUaGUgZW1haWwgc3ViamVjdCB3aWxsIGNvbnRhaW4gdGhlIGJlc3QgZGVzY3JpcHRpb24gb2YgdGhlIHJlZgorCSMgdGhhdCB3ZSBjYW4gYnVpbGQgZnJvbSB0aGUgcGFyYW1ldGVycworCWRlc2NyaWJlPSQoZ2l0IGRlc2NyaWJlICRyZXYgMj4vZGV2L251bGwpCisJaWYgWyAteiAiJGRlc2NyaWJlIiBdOyB0aGVuCisJCWRlc2NyaWJlPSRyZXYKKwlmaQorCisJZ2VuZXJhdGVfZW1haWxfaGVhZGVyCisKKwkjIENhbGwgdGhlIGNvcnJlY3QgYm9keSBnZW5lcmF0aW9uIGZ1bmN0aW9uCisJZm5fbmFtZT1nZW5lcmFsCisJY2FzZSAiJHJlZm5hbWVfdHlwZSIgaW4KKwkidHJhY2tpbmcgYnJhbmNoInxicmFuY2gpCisJCWZuX25hbWU9YnJhbmNoCisJCTs7CisJImFubm90YXRlZCB0YWciKQorCQlmbl9uYW1lPWF0YWcKKwkJOzsKKwllc2FjCisKKwlpZiBbIC16ICIkbWF4bGluZXMiIF07IHRoZW4KKwkJZ2VuZXJhdGVfJHtjaGFuZ2VfdHlwZX1fJHtmbl9uYW1lfV9lbWFpbAorCWVsc2UKKwkJZ2VuZXJhdGVfJHtjaGFuZ2VfdHlwZX1fJHtmbl9uYW1lfV9lbWFpbCB8IGxpbWl0X2xpbmVzICRtYXhsaW5lcworCWZpCisKKwlnZW5lcmF0ZV9lbWFpbF9mb290ZXIKK30KKworZ2VuZXJhdGVfZW1haWxfaGVhZGVyKCkKK3sKKwkjIC0tLSBFbWFpbCAoYWxsIHN0ZG91dCB3aWxsIGJlIHRoZSBlbWFpbCkKKwkjIEdlbmVyYXRlIGhlYWRlcgorCWNhdCA8PC1FT0YKKwlUbzogJHJlY2lwaWVudHMKKwlTdWJqZWN0OiAke2VtYWlscHJlZml4fSRwcm9qZWN0ZGVzYyAkcmVmbmFtZV90eXBlICRzaG9ydF9yZWZuYW1lICR7Y2hhbmdlX3R5cGV9ZC4gJGRlc2NyaWJlCisJTUlNRS1WZXJzaW9uOiAxLjAKKwlDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgKKwlDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisJWC1HaXQtUmVmbmFtZTogJHJlZm5hbWUKKwlYLUdpdC1SZWZ0eXBlOiAkcmVmbmFtZV90eXBlCisJWC1HaXQtT2xkcmV2OiAkb2xkcmV2CisJWC1HaXQtTmV3cmV2OiAkbmV3cmV2CisJQXV0by1TdWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVkCisKKwlUaGlzIGlzIGFuIGF1dG9tYXRlZCBlbWFpbCBmcm9tIHRoZSBnaXQgaG9va3MvcG9zdC1yZWNlaXZlIHNjcmlwdC4gSXQgd2FzCisJZ2VuZXJhdGVkIGJlY2F1c2UgYSByZWYgY2hhbmdlIHdhcyBwdXNoZWQgdG8gdGhlIHJlcG9zaXRvcnkgY29udGFpbmluZworCXRoZSBwcm9qZWN0ICIkcHJvamVjdGRlc2MiLgorCisJVGhlICRyZWZuYW1lX3R5cGUsICRzaG9ydF9yZWZuYW1lIGhhcyBiZWVuICR7Y2hhbmdlX3R5cGV9ZAorCUVPRgorfQorCitnZW5lcmF0ZV9lbWFpbF9mb290ZXIoKQoreworCVNQQUNFPSIgIgorCWNhdCA8PC1FT0YKKworCisJaG9va3MvcG9zdC1yZWNlaXZlCisJLS0ke1NQQUNFfQorCSRwcm9qZWN0ZGVzYworCUVPRgorfQorCisjIC0tLS0tLS0tLS0tLS0tLSBCcmFuY2hlcworCisjCisjIENhbGxlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgYnJhbmNoCisjCitnZW5lcmF0ZV9jcmVhdGVfYnJhbmNoX2VtYWlsKCkKK3sKKwkjIFRoaXMgaXMgYSBuZXcgYnJhbmNoIGFuZCBzbyBvbGRyZXYgaXMgbm90IHZhbGlkCisJZWNobyAiICAgICAgICBhdCAgJG5ld3JldiAoJG5ld3Jldl90eXBlKSIKKwllY2hvICIiCisKKwllY2hvICRMT0dCRUdJTgorCXNob3dfbmV3X3JldmlzaW9ucworCWVjaG8gJExPR0VORAorfQorCisjCisjIENhbGxlZCBmb3IgdGhlIGNoYW5nZSBvZiBhIHByZS1leGlzdGluZyBicmFuY2gKKyMKK2dlbmVyYXRlX3VwZGF0ZV9icmFuY2hfZW1haWwoKQoreworCSMgQ29uc2lkZXIgdGhpczoKKwkjICAgMSAtLS0gMiAtLS0gTyAtLS0gWCAtLS0gMyAtLS0gNCAtLS0gTgorCSMKKwkjIE8gaXMgJG9sZHJldiBmb3IgJHJlZm5hbWUKKwkjIE4gaXMgJG5ld3JldiBmb3IgJHJlZm5hbWUKKwkjIFggaXMgYSByZXZpc2lvbiBwb2ludGVkIHRvIGJ5IHNvbWUgb3RoZXIgcmVmLCBmb3Igd2hpY2ggd2UgbWF5CisJIyAgIGFzc3VtZSB0aGF0IGFuIGVtYWlsIGhhcyBhbHJlYWR5IGJlZW4gZ2VuZXJhdGVkLgorCSMgSW4gdGhpcyBjYXNlIHdlIHdhbnQgdG8gaXNzdWUgYW4gZW1haWwgY29udGFpbmluZyBvbmx5IHJldmlzaW9ucworCSMgMywgNCwgYW5kIE4uICBHaXZlbiAoYWxtb3N0KSBieQorCSMKKwkjICBnaXQgcmV2LWxpc3QgTiBeTyAtLW5vdCAtLWFsbAorCSMKKwkjIFRoZSByZWFzb24gZm9yIHRoZSAiYWxtb3N0IiwgaXMgdGhhdCB0aGUgIi0tbm90IC0tYWxsIiB3aWxsIHRha2UKKwkjIHByZWNlZGVuY2Ugb3ZlciB0aGUgIk4iLCBhbmQgZWZmZWN0aXZlbHkgd2lsbCB0cmFuc2xhdGUgdG8KKwkjCisJIyAgZ2l0IHJldi1saXN0IE4gXk8gXlggXk4KKwkjCisJIyBTbywgd2UgbmVlZCB0byBidWlsZCB1cCB0aGUgbGlzdCBtb3JlIGNhcmVmdWxseS4gIGdpdCByZXYtcGFyc2UKKwkjIHdpbGwgZ2VuZXJhdGUgYSBsaXN0IG9mIHJldnMgdGhhdCBtYXkgYmUgZmVkIGludG8gZ2l0IHJldi1saXN0LgorCSMgV2UgY2FuIGdldCBpdCB0byBtYWtlIHRoZSAiLS1ub3QgLS1hbGwiIHBhcnQgYW5kIHRoZW4gZmlsdGVyIG91dAorCSMgdGhlICJeTiIgd2l0aDoKKwkjCisJIyAgZ2l0IHJldi1wYXJzZSAtLW5vdCAtLWFsbCB8IGdyZXAgLXYgTgorCSMKKwkjIFRoZW4sIHVzaW5nIHRoZSAtLXN0ZGluIHN3aXRjaCB0byBnaXQgcmV2LWxpc3Qgd2UgaGF2ZSBlZmZlY3RpdmVseQorCSMgbWFudWZhY3R1cmVkCisJIworCSMgIGdpdCByZXYtbGlzdCBOIF5PIF5YCisJIworCSMgVGhpcyBsZWF2ZXMgYSBwcm9ibGVtIHdoZW4gc29tZW9uZSBlbHNlIHVwZGF0ZXMgdGhlIHJlcG9zaXRvcnkKKwkjIHdoaWxlIHRoaXMgc2NyaXB0IGlzIHJ1bm5pbmcuICBUaGVpciBuZXcgdmFsdWUgb2YgdGhlIHJlZiB3ZSdyZQorCSMgd29ya2luZyBvbiB3b3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgIi0tbm90IC0tYWxsIiBvdXRwdXQ7IGFuZCBhcworCSMgb3VyICRuZXdyZXYgd291bGQgYmUgYW4gYW5jZXN0b3Igb2YgdGhhdCBjb21taXQsIGl0IHdvdWxkIGV4Y2x1ZGUKKwkjIGFsbCBvZiBvdXIgY29tbWl0cy4gIFdoYXQgd2UgcmVhbGx5IHdhbnQgaXMgdG8gZXhjbHVkZSB0aGUgY3VycmVudAorCSMgdmFsdWUgb2YgJHJlZm5hbWUgZnJvbSB0aGUgLS1ub3QgbGlzdCwgcmF0aGVyIHRoYW4gTiBpdHNlbGYuICBTbzoKKwkjCisJIyAgZ2l0IHJldi1wYXJzZSAtLW5vdCAtLWFsbCB8IGdyZXAgLXYgJChnaXQgcmV2LXBhcnNlICRyZWZuYW1lKQorCSMKKwkjIEdldHMgdXMgdG8gc29tZXRoaW5nIHByZXR0eSBzYWZlIChhcGFydCBmcm9tIHRoZSBzbWFsbCB0aW1lCisJIyBiZXR3ZWVuIHJlZm5hbWUgYmVpbmcgcmVhZCwgYW5kIGdpdCByZXYtcGFyc2UgcnVubmluZyAtIGZvciB0aGF0LAorCSMgSSBnaXZlIHVwKQorCSMKKwkjCisJIyBOZXh0IHByb2JsZW0sIGNvbnNpZGVyIHRoaXM6CisJIyAgICogLS0tIEIgLS0tICogLS0tIE8gKCRvbGRyZXYpCisJIyAgICAgICAgICBcCisJIyAgICAgICAgICAgKiAtLS0gWCAtLS0gKiAtLS0gTiAoJG5ld3JldikKKwkjCisJIyBUaGF0IGlzIHRvIHNheSwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgb2xkcmV2IGlzIGEgc3RyaWN0CisJIyBzdWJzZXQgb2YgbmV3cmV2IChpdCB3b3VsZCBoYXZlIHJlcXVpcmVkIGEgLS1mb3JjZSwgYnV0IHRoYXQncworCSMgYWxsb3dlZCkuICBTbywgd2UgY2FuJ3Qgc2ltcGx5IHNheSByZXYtbGlzdCAkb2xkcmV2Li4kbmV3cmV2LgorCSMgSW5zdGVhZCB3ZSBmaW5kIHRoZSBjb21tb24gYmFzZSBvZiB0aGUgdHdvIHJldnMgYW5kIGxpc3QgZnJvbQorCSMgdGhlcmUuCisJIworCSMgQXMgYWJvdmUsIHdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIHByZXNlbmNlIG9mIFg7IGlmCisJIyBhbm90aGVyIGJyYW5jaCBpcyBhbHJlYWR5IGluIHRoZSByZXBvc2l0b3J5IGFuZCBwb2ludHMgYXQgc29tZSBvZgorCSMgdGhlIHJldmlzaW9ucyB0aGF0IHdlIGFyZSBhYm91dCB0byBvdXRwdXQgLSB3ZSBkb24ndCB3YW50IHRoZW0uCisJIyBUaGUgc29sdXRpb24gaXMgYXMgYmVmb3JlOiBnaXQgcmV2LXBhcnNlIG91dHB1dCBmaWx0ZXJlZC4KKwkjCisJIyBGaW5hbGx5LCB0YWdzOiAxIC0tLSAyIC0tLSBPIC0tLSBUIC0tLSAzIC0tLSA0IC0tLSBOCisJIworCSMgVGFncyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeSBnZW5lcmF0ZSBuaWNlIHNob3J0bG9nIGVtYWlscyB0aGF0CisJIyBzdW1tYXJpc2UgdGhlIGNvbW1pdHMgYmV0d2VlbiB0aGVtIGFuZCB0aGUgcHJldmlvdXMgdGFnLiAgSG93ZXZlciwKKwkjIHRob3NlIGVtYWlscyBkb24ndCBpbmNsdWRlIHRoZSBmdWxsIGNvbW1pdCBtZXNzYWdlcyB0aGF0IHdlIG91dHB1dAorCSMgZm9yIGEgYnJhbmNoIHVwZGF0ZS4gIFRoZXJlZm9yZSB3ZSBzdGlsbCB3YW50IHRvIG91dHB1dCByZXZpc2lvbnMKKwkjIHRoYXQgaGF2ZSBiZWVuIG91dHB1dCBvbiBhIHRhZyBlbWFpbC4KKwkjCisJIyBMdWNraWx5LCBnaXQgcmV2LXBhcnNlIGluY2x1ZGVzIGp1c3QgdGhlIHRvb2wuICBJbnN0ZWFkIG9mIHVzaW5nCisJIyAiLS1hbGwiIHdlIHVzZSAiLS1icmFuY2hlcyI7IHRoaXMgaGFzIHRoZSBhZGRlZCBiZW5lZml0IHRoYXQKKwkjICJyZW1vdGVzLyIgd2lsbCBiZSBpZ25vcmVkIGFzIHdlbGwuCisKKwkjIExpc3QgYWxsIG9mIHRoZSByZXZpc2lvbnMgdGhhdCB3ZXJlIHJlbW92ZWQgYnkgdGhpcyB1cGRhdGUsIGluIGEKKwkjIGZhc3QtZm9yd2FyZCB1cGRhdGUsIHRoaXMgbGlzdCB3aWxsIGJlIGVtcHR5LCBiZWNhdXNlIHJldi1saXN0IE8KKwkjIF5OIGlzIGVtcHR5LiAgRm9yIGEgbm9uLWZhc3QtZm9yd2FyZCwgTyBeTiBpcyB0aGUgbGlzdCBvZiByZW1vdmVkCisJIyByZXZpc2lvbnMKKwlmYXN0X2ZvcndhcmQ9IiIKKwlyZXY9IiIKKwlmb3IgcmV2IGluICQoZ2l0IHJldi1saXN0ICRuZXdyZXYuLiRvbGRyZXYpCisJZG8KKwkJcmV2dHlwZT0kKGdpdCBjYXQtZmlsZSAtdCAiJHJldiIpCisJCWVjaG8gIiAgZGlzY2FyZHMgICRyZXYgKCRyZXZ0eXBlKSIKKwlkb25lCisJaWYgWyAteiAiJHJldiIgXTsgdGhlbgorCQlmYXN0X2ZvcndhcmQ9MQorCWZpCisKKwkjIExpc3QgYWxsIHRoZSByZXZpc2lvbnMgZnJvbSBiYXNlcmV2IHRvIG5ld3JldiBpbiBhIGtpbmQgb2YKKwkjICJ0YWJsZS1vZi1jb250ZW50cyI7IG5vdGUgdGhpcyBsaXN0IGNhbiBpbmNsdWRlIHJldmlzaW9ucyB0aGF0CisJIyBoYXZlIGFscmVhZHkgaGFkIG5vdGlmaWNhdGlvbiBlbWFpbHMgYW5kIGlzIHByZXNlbnQgdG8gc2hvdyB0aGUKKwkjIGZ1bGwgZGV0YWlsIG9mIHRoZSBjaGFuZ2UgZnJvbSByb2xsaW5nIGJhY2sgdGhlIG9sZCByZXZpc2lvbiB0bworCSMgdGhlIGJhc2UgcmV2aXNpb24gYW5kIHRoZW4gZm9yd2FyZCB0byB0aGUgbmV3IHJldmlzaW9uCisJZm9yIHJldiBpbiAkKGdpdCByZXYtbGlzdCAkb2xkcmV2Li4kbmV3cmV2KQorCWRvCisJCXJldnR5cGU9JChnaXQgY2F0LWZpbGUgLXQgIiRyZXYiKQorCQllY2hvICIgICAgICAgdmlhICAkcmV2ICgkcmV2dHlwZSkiCisJZG9uZQorCisJaWYgWyAiJGZhc3RfZm9yd2FyZCIgXTsgdGhlbgorCQllY2hvICIgICAgICBmcm9tICAkb2xkcmV2ICgkb2xkcmV2X3R5cGUpIgorCWVsc2UKKwkJIyAgMS4gRXhpc3RpbmcgcmV2aXNpb25zIHdlcmUgcmVtb3ZlZC4gIEluIHRoaXMgY2FzZSBuZXdyZXYKKwkJIyAgICAgaXMgYSBzdWJzZXQgb2Ygb2xkcmV2IC0gdGhpcyBpcyB0aGUgcmV2ZXJzZSBvZiBhCisJCSMgICAgIGZhc3QtZm9yd2FyZCwgYSByZXdpbmQKKwkJIyAgMi4gTmV3IHJldmlzaW9ucyB3ZXJlIGFkZGVkIG9uIHRvcCBvZiBhbiBvbGQgcmV2aXNpb24sCisJCSMgICAgIHRoaXMgaXMgYSByZXdpbmQgYW5kIGFkZGl0aW9uLgorCisJCSMgKDEpIGNlcnRhaW5seSBoYXBwZW5lZCwgKDIpIHBvc3NpYmx5LiAgV2hlbiAoMikgaGFzbid0CisJCSMgaGFwcGVuZWQsIHdlIHNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBubyBsb2cgcHJpbnRvdXQKKwkJIyBpcyByZXF1aXJlZC4KKworCQllY2hvICIiCisKKwkJIyBGaW5kIHRoZSBjb21tb24gYW5jZXN0b3Igb2YgdGhlIG9sZCBhbmQgbmV3IHJldmlzaW9ucyBhbmQKKwkJIyBjb21wYXJlIGl0IHdpdGggbmV3cmV2CisJCWJhc2VyZXY9JChnaXQgbWVyZ2UtYmFzZSAkb2xkcmV2ICRuZXdyZXYpCisJCXJld2luZF9vbmx5PSIiCisJCWlmIFsgIiRiYXNlcmV2IiA9ICIkbmV3cmV2IiBdOyB0aGVuCisJCQllY2hvICJUaGlzIHVwZGF0ZSBkaXNjYXJkZWQgZXhpc3RpbmcgcmV2aXNpb25zIGFuZCBsZWZ0IHRoZSBicmFuY2ggcG9pbnRpbmcgYXQiCisJCQllY2hvICJhIHByZXZpb3VzIHBvaW50IGluIHRoZSByZXBvc2l0b3J5IGhpc3RvcnkuIgorCQkJZWNobyAiIgorCQkJZWNobyAiICogLS0gKiAtLSBOICgkbmV3cmV2KSIKKwkJCWVjaG8gIiAgICAgICAgICAgIFxcIgorCQkJZWNobyAiICAgICAgICAgICAgIE8gLS0gTyAtLSBPICgkb2xkcmV2KSIKKwkJCWVjaG8gIiIKKwkJCWVjaG8gIlRoZSByZW1vdmVkIHJldmlzaW9ucyBhcmUgbm90IG5lY2Vzc2FyaWx5IGdvbmUgLSBpZiBhbm90aGVyIHJlZmVyZW5jZSIKKwkJCWVjaG8gInN0aWxsIHJlZmVycyB0byB0aGVtIHRoZXkgd2lsbCBzdGF5IGluIHRoZSByZXBvc2l0b3J5LiIKKwkJCXJld2luZF9vbmx5PTEKKwkJZWxzZQorCQkJZWNobyAiVGhpcyB1cGRhdGUgYWRkZWQgbmV3IHJldmlzaW9ucyBhZnRlciB1bmRvaW5nIGV4aXN0aW5nIHJldmlzaW9ucy4gIFRoYXQgaXMiCisJCQllY2hvICJ0byBzYXksIHRoZSBvbGQgcmV2aXNpb24gaXMgbm90IGEgc3RyaWN0IHN1YnNldCBvZiB0aGUgbmV3IHJldmlzaW9uLiAgVGhpcyIKKwkJCWVjaG8gInNpdHVhdGlvbiBvY2N1cnMgd2hlbiB5b3UgLS1mb3JjZSBwdXNoIGEgY2hhbmdlIGFuZCBnZW5lcmF0ZSBhIHJlcG9zaXRvcnkiCisJCQllY2hvICJjb250YWluaW5nIHNvbWV0aGluZyBsaWtlIHRoaXM6IgorCQkJZWNobyAiIgorCQkJZWNobyAiICogLS0gKiAtLSBCIC0tIE8gLS0gTyAtLSBPICgkb2xkcmV2KSIKKwkJCWVjaG8gIiAgICAgICAgICAgIFxcIgorCQkJZWNobyAiICAgICAgICAgICAgIE4gLS0gTiAtLSBOICgkbmV3cmV2KSIKKwkJCWVjaG8gIiIKKwkJCWVjaG8gIldoZW4gdGhpcyBoYXBwZW5zIHdlIGFzc3VtZSB0aGF0IHlvdSd2ZSBhbHJlYWR5IGhhZCBhbGVydCBlbWFpbHMgZm9yIGFsbCIKKwkJCWVjaG8gIm9mIHRoZSBPIHJldmlzaW9ucywgYW5kIHNvIHdlIGhlcmUgcmVwb3J0IG9ubHkgdGhlIHJldmlzaW9ucyBpbiB0aGUgTiIKKwkJCWVjaG8gImJyYW5jaCBmcm9tIHRoZSBjb21tb24gYmFzZSwgQi4iCisJCWZpCisJZmkKKworCWVjaG8gIiIKKwlpZiBbIC16ICIkcmV3aW5kX29ubHkiIF07IHRoZW4KKwkJZWNobyAiVGhvc2UgcmV2aXNpb25zIGxpc3RlZCBhYm92ZSB0aGF0IGFyZSBuZXcgdG8gdGhpcyByZXBvc2l0b3J5IGhhdmUiCisJCWVjaG8gIm5vdCBhcHBlYXJlZCBvbiBhbnkgb3RoZXIgbm90aWZpY2F0aW9uIGVtYWlsOyBzbyB3ZSBsaXN0IHRob3NlIgorCQllY2hvICJyZXZpc2lvbnMgaW4gZnVsbCwgYmVsb3cuIgorCisJCWVjaG8gIiIKKwkJZWNobyAkTE9HQkVHSU4KKwkJc2hvd19uZXdfcmV2aXNpb25zCisKKwkJIyBYWFg6IE5lZWQgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZXRoZXIgZ2l0IHJldi1saXN0IGFjdHVhbGx5CisJCSMgb3V0cHV0dGVkIGFueXRoaW5nLCBzbyB0aGF0IHdlIGNhbiBpc3N1ZSBhICJubyBuZXcKKwkJIyByZXZpc2lvbnMgYWRkZWQgYnkgdGhpcyB1cGRhdGUiIG1lc3NhZ2UKKworCQllY2hvICRMT0dFTkQKKwllbHNlCisJCWVjaG8gIk5vIG5ldyByZXZpc2lvbnMgd2VyZSBhZGRlZCBieSB0aGlzIHVwZGF0ZS4iCisJZmkKKworCSMgVGhlIGRpZmZzdGF0IGlzIHNob3duIGZyb20gdGhlIG9sZCByZXZpc2lvbiB0byB0aGUgbmV3IHJldmlzaW9uLgorCSMgVGhpcyBpcyB0byBzaG93IHRoZSB0cnV0aCBvZiB3aGF0IGhhcHBlbmVkIGluIHRoaXMgY2hhbmdlLgorCSMgVGhlcmUncyBubyBwb2ludCBzaG93aW5nIHRoZSBzdGF0IGZyb20gdGhlIGJhc2UgdG8gdGhlIG5ldworCSMgcmV2aXNpb24gYmVjYXVzZSB0aGUgYmFzZSBpcyBlZmZlY3RpdmVseSBhIHJhbmRvbSByZXZpc2lvbiBhdCB0aGlzCisJIyBwb2ludCAtIHRoZSB1c2VyIHdpbGwgYmUgaW50ZXJlc3RlZCBpbiB3aGF0IHRoaXMgcmV2aXNpb24gY2hhbmdlZAorCSMgLSBpbmNsdWRpbmcgdGhlIHVuZG9pbmcgb2YgcHJldmlvdXMgcmV2aXNpb25zIGluIHRoZSBjYXNlIG9mCisJIyBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMuCisJZWNobyAiIgorCWVjaG8gIlN1bW1hcnkgb2YgY2hhbmdlczoiCisJZ2l0IGRpZmYtdHJlZSAkZGlmZm9wdHMgJG9sZHJldi4uJG5ld3JldgorfQorCisjCisjIENhbGxlZCBmb3IgdGhlIGRlbGV0aW9uIG9mIGEgYnJhbmNoCisjCitnZW5lcmF0ZV9kZWxldGVfYnJhbmNoX2VtYWlsKCkKK3sKKwllY2hvICIgICAgICAgd2FzICAkb2xkcmV2IgorCWVjaG8gIiIKKwllY2hvICRMT0dCRUdJTgorCWdpdCBkaWZmLXRyZWUgLXMgLS1hbHdheXMgLS1lbmNvZGluZz1VVEYtOCAtLXByZXR0eT1vbmVsaW5lICRvbGRyZXYKKwllY2hvICRMT0dFTkQKK30KKworIyAtLS0tLS0tLS0tLS0tLS0gQW5ub3RhdGVkIHRhZ3MKKworIworIyBDYWxsZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhbiBhbm5vdGF0ZWQgdGFnCisjCitnZW5lcmF0ZV9jcmVhdGVfYXRhZ19lbWFpbCgpCit7CisJZWNobyAiICAgICAgICBhdCAgJG5ld3JldiAoJG5ld3Jldl90eXBlKSIKKworCWdlbmVyYXRlX2F0YWdfZW1haWwKK30KKworIworIyBDYWxsZWQgZm9yIHRoZSB1cGRhdGUgb2YgYW4gYW5ub3RhdGVkIHRhZyAodGhpcyBpcyBwcm9iYWJseSBhIHJhcmUgZXZlbnQKKyMgYW5kIG1heSBub3QgZXZlbiBiZSBhbGxvd2VkKQorIworZ2VuZXJhdGVfdXBkYXRlX2F0YWdfZW1haWwoKQoreworCWVjaG8gIiAgICAgICAgdG8gICRuZXdyZXYgKCRuZXdyZXZfdHlwZSkiCisJZWNobyAiICAgICAgZnJvbSAgJG9sZHJldiAod2hpY2ggaXMgbm93IG9ic29sZXRlKSIKKworCWdlbmVyYXRlX2F0YWdfZW1haWwKK30KKworIworIyBDYWxsZWQgd2hlbiBhbiBhbm5vdGF0ZWQgdGFnIGlzIGNyZWF0ZWQgb3IgY2hhbmdlZAorIworZ2VuZXJhdGVfYXRhZ19lbWFpbCgpCit7CisJIyBVc2UgZ2l0IGZvci1lYWNoLXJlZiB0byBwdWxsIG91dCB0aGUgaW5kaXZpZHVhbCBmaWVsZHMgZnJvbSB0aGUKKwkjIHRhZworCWV2YWwgJChnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9JworCXRhZ29iamVjdD0lKCpvYmplY3RuYW1lKQorCXRhZ3R5cGU9JSgqb2JqZWN0dHlwZSkKKwl0YWdnZXI9JSh0YWdnZXJuYW1lKQorCXRhZ2dlZD0lKHRhZ2dlcmRhdGUpJyAkcmVmbmFtZQorCSkKKworCWVjaG8gIiAgIHRhZ2dpbmcgICR0YWdvYmplY3QgKCR0YWd0eXBlKSIKKwljYXNlICIkdGFndHlwZSIgaW4KKwljb21taXQpCisKKwkJIyBJZiB0aGUgdGFnZ2VkIG9iamVjdCBpcyBhIGNvbW1pdCwgdGhlbiB3ZSBhc3N1bWUgdGhpcyBpcyBhCisJCSMgcmVsZWFzZSwgYW5kIHNvIHdlIGNhbGN1bGF0ZSB3aGljaCB0YWcgdGhpcyB0YWcgaXMKKwkJIyByZXBsYWNpbmcKKwkJcHJldnRhZz0kKGdpdCBkZXNjcmliZSAtLWFiYnJldj0wICRuZXdyZXZeIDI+L2Rldi9udWxsKQorCisJCWlmIFsgLW4gIiRwcmV2dGFnIiBdOyB0aGVuCisJCQllY2hvICIgIHJlcGxhY2VzICAkcHJldnRhZyIKKwkJZmkKKwkJOzsKKwkqKQorCQllY2hvICIgICAgbGVuZ3RoICAkKGdpdCBjYXQtZmlsZSAtcyAkdGFnb2JqZWN0KSBieXRlcyIKKwkJOzsKKwllc2FjCisJZWNobyAiIHRhZ2dlZCBieSAgJHRhZ2dlciIKKwllY2hvICIgICAgICAgIG9uICAkdGFnZ2VkIgorCisJZWNobyAiIgorCWVjaG8gJExPR0JFR0lOCisKKwkjIFNob3cgdGhlIGNvbnRlbnQgb2YgdGhlIHRhZyBtZXNzYWdlOyB0aGlzIG1pZ2h0IGNvbnRhaW4gYSBjaGFuZ2UKKwkjIGxvZyBvciByZWxlYXNlIG5vdGVzIHNvIGlzIHdvcnRoIGRpc3BsYXlpbmcuCisJZ2l0IGNhdC1maWxlIHRhZyAkbmV3cmV2IHwgc2VkIC1lICcxLC9eJC9kJworCisJZWNobyAiIgorCWNhc2UgIiR0YWd0eXBlIiBpbgorCWNvbW1pdCkKKwkJIyBPbmx5IGNvbW1pdCB0YWdzIG1ha2Ugc2Vuc2UgdG8gaGF2ZSByZXYtbGlzdCBvcGVyYXRpb25zCisJCSMgcGVyZm9ybWVkIG9uIHRoZW0KKwkJaWYgWyAtbiAiJHByZXZ0YWciIF07IHRoZW4KKwkJCSMgU2hvdyBjaGFuZ2VzIHNpbmNlIHRoZSBwcmV2aW91cyByZWxlYXNlCisJCQlnaXQgc2hvcnRsb2cgIiRwcmV2dGFnLi4kbmV3cmV2IgorCQllbHNlCisJCQkjIE5vIHByZXZpb3VzIHRhZywgc2hvdyBhbGwgdGhlIGNoYW5nZXMgc2luY2UgdGltZQorCQkJIyBiZWdhbgorCQkJZ2l0IHNob3J0bG9nICRuZXdyZXYKKwkJZmkKKwkJOzsKKwkqKQorCQkjIFhYWDogSXMgdGhlcmUgYW55dGhpbmcgdXNlZnVsIHdlIGNhbiBkbyBmb3Igbm9uLWNvbW1pdAorCQkjIG9iamVjdHM/CisJCTs7CisJZXNhYworCisJZWNobyAkTE9HRU5ECit9CisKKyMKKyMgQ2FsbGVkIGZvciB0aGUgZGVsZXRpb24gb2YgYW4gYW5ub3RhdGVkIHRhZworIworZ2VuZXJhdGVfZGVsZXRlX2F0YWdfZW1haWwoKQoreworCWVjaG8gIiAgICAgICB3YXMgICRvbGRyZXYiCisJZWNobyAiIgorCWVjaG8gJExPR0JFR0lOCisJZ2l0IGRpZmYtdHJlZSAtcyAtLWFsd2F5cyAtLWVuY29kaW5nPVVURi04IC0tcHJldHR5PW9uZWxpbmUgJG9sZHJldgorCWVjaG8gJExPR0VORAorfQorCisjIC0tLS0tLS0tLS0tLS0tLSBHZW5lcmFsIHJlZmVyZW5jZXMKKworIworIyBDYWxsZWQgd2hlbiBhbnkgb3RoZXIgdHlwZSBvZiByZWZlcmVuY2UgaXMgY3JlYXRlZCAobW9zdCBsaWtlbHkgYQorIyBub24tYW5ub3RhdGVkIHRhZykKKyMKK2dlbmVyYXRlX2NyZWF0ZV9nZW5lcmFsX2VtYWlsKCkKK3sKKwllY2hvICIgICAgICAgIGF0ICAkbmV3cmV2ICgkbmV3cmV2X3R5cGUpIgorCisJZ2VuZXJhdGVfZ2VuZXJhbF9lbWFpbAorfQorCisjCisjIENhbGxlZCB3aGVuIGFueSBvdGhlciB0eXBlIG9mIHJlZmVyZW5jZSBpcyB1cGRhdGVkIChtb3N0IGxpa2VseSBhCisjIG5vbi1hbm5vdGF0ZWQgdGFnKQorIworZ2VuZXJhdGVfdXBkYXRlX2dlbmVyYWxfZW1haWwoKQoreworCWVjaG8gIiAgICAgICAgdG8gICRuZXdyZXYgKCRuZXdyZXZfdHlwZSkiCisJZWNobyAiICAgICAgZnJvbSAgJG9sZHJldiIKKworCWdlbmVyYXRlX2dlbmVyYWxfZW1haWwKK30KKworIworIyBDYWxsZWQgZm9yIGNyZWF0aW9uIG9yIHVwZGF0ZSBvZiBhbnkgb3RoZXIgdHlwZSBvZiByZWZlcmVuY2UKKyMKK2dlbmVyYXRlX2dlbmVyYWxfZW1haWwoKQoreworCSMgVW5hbm5vdGF0ZWQgdGFncyBhcmUgbW9yZSBhYm91dCBtYXJraW5nIGEgcG9pbnQgdGhhbiByZWxlYXNpbmcgYQorCSMgdmVyc2lvbjsgdGhlcmVmb3JlIHdlIGRvbid0IGRvIHRoZSBzaG9ydGxvZyBzdW1tYXJ5IHRoYXQgd2UgZG8gZm9yCisJIyBhbm5vdGF0ZWQgdGFncyBhYm92ZSAtIHdlIHNpbXBseSBzaG93IHRoYXQgdGhlIHBvaW50IGhhcyBiZWVuCisJIyBtYXJrZWQsIGFuZCBwcmludCB0aGUgbG9nIG1lc3NhZ2UgZm9yIHRoZSBtYXJrZWQgcG9pbnQgZm9yCisJIyByZWZlcmVuY2UgcHVycG9zZXMKKwkjCisJIyBOb3RlIHRoaXMgc2VjdGlvbiBhbHNvIGNhdGNoZXMgYW55IG90aGVyIHJlZmVyZW5jZSB0eXBlIChhbHRob3VnaAorCSMgdGhlcmUgYXJlbid0IGFueSkgYW5kIGRlYWxzIHdpdGggdGhlbSBpbiB0aGUgc2FtZSB3YXkuCisKKwllY2hvICIiCisJaWYgWyAiJG5ld3Jldl90eXBlIiA9ICJjb21taXQiIF07IHRoZW4KKwkJZWNobyAkTE9HQkVHSU4KKwkJZ2l0IGRpZmYtdHJlZSAtcyAtLWFsd2F5cyAtLWVuY29kaW5nPVVURi04IC0tcHJldHR5PW1lZGl1bSAkbmV3cmV2CisJCWVjaG8gJExPR0VORAorCWVsc2UKKwkJIyBXaGF0IGNhbiB3ZSBkbyBoZXJlPyAgVGhlIHRhZyBtYXJrcyBhbiBvYmplY3QgdGhhdCBpcyBub3QKKwkJIyBhIGNvbW1pdCwgc28gdGhlcmUgaXMgbm8gbG9nIGZvciB1cyB0byBkaXNwbGF5LiAgSXQncworCQkjIHByb2JhYmx5IG5vdCB3aXNlIHRvIG91dHB1dCBnaXQgY2F0LWZpbGUgYXMgaXQgY291bGQgYmUgYQorCQkjIGJpbmFyeSBibG9iLiAgV2UnbGwganVzdCBzYXkgaG93IGJpZyBpdCBpcworCQllY2hvICIkbmV3cmV2IGlzIGEgJG5ld3Jldl90eXBlLCBhbmQgaXMgJChnaXQgY2F0LWZpbGUgLXMgJG5ld3JldikgYnl0ZXMgbG9uZy4iCisJZmkKK30KKworIworIyBDYWxsZWQgZm9yIHRoZSBkZWxldGlvbiBvZiBhbnkgb3RoZXIgdHlwZSBvZiByZWZlcmVuY2UKKyMKK2dlbmVyYXRlX2RlbGV0ZV9nZW5lcmFsX2VtYWlsKCkKK3sKKwllY2hvICIgICAgICAgd2FzICAkb2xkcmV2IgorCWVjaG8gIiIKKwllY2hvICRMT0dCRUdJTgorCWdpdCBkaWZmLXRyZWUgLXMgLS1hbHdheXMgLS1lbmNvZGluZz1VVEYtOCAtLXByZXR0eT1vbmVsaW5lICRvbGRyZXYKKwllY2hvICRMT0dFTkQKK30KKworCisjIC0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIHV0aWxpdGllcworCisjCisjIFNob3cgbmV3IHJldmlzaW9ucyBhcyB0aGUgdXNlciB3b3VsZCBsaWtlIHRvIHNlZSB0aGVtIGluIHRoZSBlbWFpbC4KKyMKK3Nob3dfbmV3X3JldmlzaW9ucygpCit7CisJIyBUaGlzIHNob3dzIGFsbCBsb2cgZW50cmllcyB0aGF0IGFyZSBub3QgYWxyZWFkeSBjb3ZlcmVkIGJ5CisJIyBhbm90aGVyIHJlZiAtIGkuZS4gY29tbWl0cyB0aGF0IGFyZSBub3cgYWNjZXNzaWJsZSBmcm9tIHRoaXMKKwkjIHJlZiB0aGF0IHdlcmUgcHJldmlvdXNseSBub3QgYWNjZXNzaWJsZQorCSMgKHNlZSBnZW5lcmF0ZV91cGRhdGVfYnJhbmNoX2VtYWlsIGZvciB0aGUgZXhwbGFuYXRpb24gb2YgdGhpcworCSMgY29tbWFuZCkKKworCSMgUmV2aXNpb24gcmFuZ2UgcGFzc2VkIHRvIHJldi1saXN0IGRpZmZlcnMgZm9yIG5ldyB2cy4gdXBkYXRlZAorCSMgYnJhbmNoZXMuCisJaWYgWyAiJGNoYW5nZV90eXBlIiA9IGNyZWF0ZSBdCisJdGhlbgorCQkjIFNob3cgYWxsIHJldmlzaW9ucyBleGNsdXNpdmUgdG8gdGhpcyAobmV3KSBicmFuY2guCisJCXJldnNwZWM9JG5ld3JldgorCWVsc2UKKwkJIyBCcmFuY2ggdXBkYXRlOyBzaG93IHJldmlzaW9ucyBub3QgcGFydCBvZiAkb2xkcmV2LgorCQlyZXZzcGVjPSRvbGRyZXYuLiRuZXdyZXYKKwlmaQorCisJb3RoZXJfYnJhbmNoZXM9JChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKHJlZm5hbWUpJyByZWZzL2hlYWRzLyB8CisJICAgIGdyZXAgLUYgLXYgJHJlZm5hbWUpCisJZ2l0IHJldi1wYXJzZSAtLW5vdCAkb3RoZXJfYnJhbmNoZXMgfAorCWlmIFsgLXogIiRjdXN0b21fc2hvd3JldiIgXQorCXRoZW4KKwkJZ2l0IHJldi1saXN0IC0tcHJldHR5IC0tc3RkaW4gJHJldnNwZWMKKwllbHNlCisJCWdpdCByZXYtbGlzdCAtLXN0ZGluICRyZXZzcGVjIHwKKwkJd2hpbGUgcmVhZCBvbmVyZXYKKwkJZG8KKwkJCWV2YWwgJChwcmludGYgIiRjdXN0b21fc2hvd3JldiIgJG9uZXJldikKKwkJZG9uZQorCWZpCit9CisKKworbGltaXRfbGluZXMoKQoreworCWxpbmVzPTAKKwlza2lwcGVkPTAKKwl3aGlsZSBJRlM9IiIgcmVhZCAtciBsaW5lOyBkbworCQlsaW5lcz0kKChsaW5lcyArIDEpKQorCQlpZiBbICRsaW5lcyAtZ3QgJDEgXTsgdGhlbgorCQkJc2tpcHBlZD0kKChza2lwcGVkICsgMSkpCisJCWVsc2UKKwkJCXByaW50ZiAiJXNcbiIgIiRsaW5lIgorCQlmaQorCWRvbmUKKwlpZiBbICRza2lwcGVkIC1uZSAwIF07IHRoZW4KKwkJZWNobyAiLi4uICRza2lwcGVkIGxpbmVzIHN1cHByZXNzZWQgLi4uIgorCWZpCit9CisKKworc2VuZF9tYWlsKCkKK3sKKwlpZiBbIC1uICIkZW52ZWxvcGVzZW5kZXIiIF07IHRoZW4KKwkJL3Vzci9zYmluL3NlbmRtYWlsIC10IC1mICIkZW52ZWxvcGVzZW5kZXIiCisJZWxzZQorCQkvdXNyL3NiaW4vc2VuZG1haWwgLXQKKwlmaQorfQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFpbigpCisKKyMgLS0tIENvbnN0YW50cworTE9HQkVHSU49Ii0gTG9nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorTE9HRU5EPSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKworIyAtLS0gQ29uZmlnCisjIFNldCBHSVRfRElSIGVpdGhlciBmcm9tIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgb3IgZnJvbSB0aGUgZW52aXJvbm1lbnQKKyMgdmFyaWFibGUuCitHSVRfRElSPSQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIgMj4vZGV2L251bGwpCitpZiBbIC16ICIkR0lUX0RJUiIgXTsgdGhlbgorCWVjaG8gPiYyICJmYXRhbDogcG9zdC1yZWNlaXZlOiBHSVRfRElSIG5vdCBzZXQiCisJZXhpdCAxCitmaQorCitwcm9qZWN0ZGVzYz0kKHNlZCAtbmUgJzFwJyAiJEdJVF9ESVIvZGVzY3JpcHRpb24iIDI+L2Rldi9udWxsKQorIyBDaGVjayBpZiB0aGUgZGVzY3JpcHRpb24gaXMgdW5jaGFuZ2VkIGZyb20gaXQncyBkZWZhdWx0LCBhbmQgc2hvcnRlbiBpdCB0bworIyBhIG1vcmUgbWFuYWdlYWJsZSBsZW5ndGggaWYgaXQgaXMKK2lmIGV4cHIgIiRwcm9qZWN0ZGVzYyIgOiAiVW5uYW1lZCByZXBvc2l0b3J5LiokIiA+L2Rldi9udWxsCit0aGVuCisJcHJvamVjdGRlc2M9IlVOTkFNRUQgUFJPSkVDVCIKK2ZpCisKK3JlY2lwaWVudHM9JChnaXQgY29uZmlnIGhvb2tzLm1haWxpbmdsaXN0KQorYW5ub3VuY2VyZWNpcGllbnRzPSQoZ2l0IGNvbmZpZyBob29rcy5hbm5vdW5jZWxpc3QpCitlbnZlbG9wZXNlbmRlcj0kKGdpdCBjb25maWcgaG9va3MuZW52ZWxvcGVzZW5kZXIpCitlbWFpbHByZWZpeD0kKGdpdCBjb25maWcgaG9va3MuZW1haWxwcmVmaXggfHwgZWNobyAnW1NDTV0gJykKK2N1c3RvbV9zaG93cmV2PSQoZ2l0IGNvbmZpZyBob29rcy5zaG93cmV2KQorbWF4bGluZXM9JChnaXQgY29uZmlnIGhvb2tzLmVtYWlsbWF4bGluZXMpCitkaWZmb3B0cz0kKGdpdCBjb25maWcgaG9va3MuZGlmZm9wdHMpCis6ICR7ZGlmZm9wdHM6PSItLXN0YXQgLS1zdW1tYXJ5IC0tZmluZC1jb3BpZXMtaGFyZGVyIn0KKworIyAtLS0gTWFpbiBsb29wCisjIEFsbG93IGR1YWwgbW9kZTogcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSBqdXN0IGxpa2UgdGhlIHVwZGF0ZSBob29rLCBvcgorIyBpZiBubyBhcmd1bWVudHMgYXJlIGdpdmVuIHRoZW4gcnVuIGFzIGEgaG9vayBzY3JpcHQKK2lmIFsgLW4gIiQxIiAtYSAtbiAiJDIiIC1hIC1uICIkMyIgXTsgdGhlbgorCSMgT3V0cHV0IHRvIHRoZSB0ZXJtaW5hbCBpbiBjb21tYW5kIGxpbmUgbW9kZSAtIGlmIHNvbWVvbmUgd2FudGVkIHRvCisJIyByZXNlbmQgYW4gZW1haWw7IHRoZXkgY291bGQgcmVkaXJlY3QgdGhlIG91dHB1dCB0byBzZW5kbWFpbAorCSMgdGhlbXNlbHZlcworCXByZXBfZm9yX2VtYWlsICQyICQzICQxICYmIFBBR0VSPSBnZW5lcmF0ZV9lbWFpbAorZWxzZQorCXdoaWxlIHJlYWQgb2xkcmV2IG5ld3JldiByZWZuYW1lCisJZG8KKwkJcHJlcF9mb3JfZW1haWwgJG9sZHJldiAkbmV3cmV2ICRyZWZuYW1lIHx8IGNvbnRpbnVlCisJCWdlbmVyYXRlX2VtYWlsICRtYXhsaW5lcyB8IHNlbmRfbWFpbAorCWRvbmUKK2ZpCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL3ByZS1hdXRvLWdjLWJhdHRlcnkgYi9jb250cmliL2hvb2tzL3ByZS1hdXRvLWdjLWJhdHRlcnkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2JhNzhjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvcHJlLWF1dG8tZ2MtYmF0dGVyeQpAQCAtMCwwICsxLDQyIEBACisjIS9iaW4vc2gKKyMKKyMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byB2ZXJpZnkgaWYgeW91IGFyZSBvbiBiYXR0ZXJ5LCBpbiBjYXNlIHlvdQorIyBhcmUgcnVubmluZyBMaW51eCBvciBPUyBYLiBDYWxsZWQgYnkgZ2l0LWdjIC0tYXV0byB3aXRoIG5vIGFyZ3VtZW50cy4KKyMgVGhlIGhvb2sgc2hvdWxkIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMgYWZ0ZXIgaXNzdWluZyBhbiBhcHByb3ByaWF0ZQorIyBtZXNzYWdlIGlmIGl0IHdhbnRzIHRvIHN0b3AgdGhlIGF1dG8gcmVwYWNraW5nLgorIworIyBUaGlzIGhvb2sgaXMgc3RvcmVkIGluIHRoZSBjb250cmliL2hvb2tzIGRpcmVjdG9yeS4gWW91ciBkaXN0cmlidXRpb24KKyMgbWF5IGhhdmUgcHV0IHRoaXMgc29tZXdoZXJlIGVsc2UuIElmIHlvdSB3YW50IHRvIHVzZSB0aGlzIGhvb2ssIHlvdQorIyBzaG91bGQgbWFrZSB0aGlzIHNjcmlwdCBleGVjdXRhYmxlIHRoZW4gbGluayB0byBpdCBpbiB0aGUgcmVwb3NpdG9yeQorIyB5b3Ugd291bGQgbGlrZSB0byB1c2UgaXQgaW4uCisjCisjIEZvciBleGFtcGxlLCBpZiB0aGUgaG9vayBpcyBzdG9yZWQgaW4KKyMgL3Vzci9zaGFyZS9naXQtY29yZS9jb250cmliL2hvb2tzL3ByZS1hdXRvLWdjLWJhdHRlcnk6CisjCisjIGNkIC9wYXRoL3RvL3lvdXIvcmVwb3NpdG9yeS5naXQKKyMgbG4gLXNmIC91c3Ivc2hhcmUvZ2l0LWNvcmUvY29udHJpYi9ob29rcy9wcmUtYXV0by1nYy1iYXR0ZXJ5IFwKKyMJaG9va3MvcHJlLWF1dG8tZ2MKKworaWYgdGVzdCAteCAvc2Jpbi9vbl9hY19wb3dlciAmJiAoL3NiaW4vb25fYWNfcG93ZXI7dGVzdCAkPyAtbmUgMSkKK3RoZW4KKwlleGl0IDAKK2VsaWYgdGVzdCAiJChjYXQgL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvQUMvb25saW5lIDI+L2Rldi9udWxsKSIgPSAxCit0aGVuCisJZXhpdCAwCitlbGlmIGdyZXAgLXEgJ29uLWxpbmUnIC9wcm9jL2FjcGkvYWNfYWRhcHRlci9BQy9zdGF0ZSAyPi9kZXYvbnVsbAordGhlbgorCWV4aXQgMAorZWxpZiBncmVwIC1xICcweDAxJCcgL3Byb2MvYXBtIDI+L2Rldi9udWxsCit0aGVuCisJZXhpdCAwCitlbGlmIGdyZXAgLXEgIkFDIFBvd2VyIFwrOiAxIiAvcHJvYy9wbXUvaW5mbyAyPi9kZXYvbnVsbAordGhlbgorCWV4aXQgMAorZWxpZiB0ZXN0IC14IC91c3IvYmluL3Btc2V0ICYmIC91c3IvYmluL3Btc2V0IC1nIGJhdHQgfAorCWdyZXAgLXEgImRyYXdpbmcgZnJvbSAnQUMgUG93ZXInIgordGhlbgorCWV4aXQgMAorZmkKKworZWNobyAiQXV0byBwYWNraW5nIGRlZmVycmVkOyBub3Qgb24gQUMiCitleGl0IDEKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3Mvc2V0Z2l0cGVybXMucGVybCBiL2NvbnRyaWIvaG9va3Mvc2V0Z2l0cGVybXMucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNzcwYTFiCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ob29rcy9zZXRnaXRwZXJtcy5wZXJsCkBAIC0wLDAgKzEsMjE0IEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEpvc2ggRW5nbGFuZAorIworIyBUaGlzIHNjcmlwdCBjYW4gYmUgdXNlZCB0byBzYXZlL3Jlc3RvcmUgZnVsbCBwZXJtaXNzaW9ucyBhbmQgb3duZXJzaGlwIGRhdGEKKyMgd2l0aGluIGEgZ2l0IHdvcmtpbmcgdHJlZS4KKyMKKyMgVG8gc2F2ZSBwZXJtaXNzaW9ucy9vd25lcnNoaXAgZGF0YSwgcGxhY2UgdGhpcyBzY3JpcHQgaW4geW91ciAuZ2l0L2hvb2tzCisjIGRpcmVjdG9yeSBhbmQgZW5hYmxlIGEgYHByZS1jb21taXRgIGhvb2sgd2l0aCB0aGUgZm9sbG93aW5nIGxpbmVzOgorIyAgICAgICMhL2Jpbi9zaAorIyAgICAgU1VCRElSRUNUT1JZX09LPTEgLiBnaXQtc2gtc2V0dXAKKyMgICAgICRHSVRfRElSL2hvb2tzL3NldGdpdHBlcm1zLnBlcmwgLXIKKyMKKyMgVG8gcmVzdG9yZSBwZXJtaXNzaW9ucy9vd25lcnNoaXAgZGF0YSwgcGxhY2UgdGhpcyBzY3JpcHQgaW4geW91ciAuZ2l0L2hvb2tzCisjIGRpcmVjdG9yeSBhbmQgZW5hYmxlIGEgYHBvc3QtbWVyZ2VgIGFuZCBgcG9zdC1jaGVja291dGAgaG9vayB3aXRoIHRoZQorIyBmb2xsb3dpbmcgbGluZXM6CisjICAgICAgIyEvYmluL3NoCisjICAgICBTVUJESVJFQ1RPUllfT0s9MSAuIGdpdC1zaC1zZXR1cAorIyAgICAgJEdJVF9ESVIvaG9va3Mvc2V0Z2l0cGVybXMucGVybCAtdworIwordXNlIHN0cmljdDsKK3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgRmlsZTo6RmluZDsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKKworbXkgJHVzYWdlID0KKyJ1c2FnZTogc2V0Z2l0cGVybXMucGVybCBbT1BUSU9OXS4uLiA8LS1yZWFkfC0td3JpdGU+CitUaGlzIHByb2dyYW0gdXNlcyBhIGZpbGUgYC5naXRtZXRhYCB0byBzdG9yZS9yZXN0b3JlIHBlcm1pc3Npb25zIGFuZCB1aWQvZ2lkCitpbmZvIGZvciBhbGwgZmlsZXMvZGlycyB0cmFja2VkIGJ5IGdpdCBpbiB0aGUgcmVwb3NpdG9yeS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tUmVhZCBNb2RlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLXIsICAtLXJlYWQgICAgICAgICBSZWFkcyBwZXJtcy9ldGMgZnJvbSB3b3JraW5nIGRpciBpbnRvIGEgLmdpdG1ldGEgZmlsZQorLXMsICAtLXN0ZG91dCAgICAgICBPdXRwdXQgdG8gc3Rkb3V0IGluc3RlYWQgb2YgLmdpdG1ldGEKKy1kLCAgLS1kaWZmICAgICAgICAgU2hvdyB1bmlmaWVkIGRpZmYgb2YgcGVybXMgZmlsZSAoWE9SIHdpdGggLS1zdGRvdXQpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVdyaXRlIE1vZGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy13LCAgLS13cml0ZSAgICAgICAgTW9kaWZ5IHBlcm1zL2V0YyBpbiB3b3JraW5nIGRpciB0byBtYXRjaCB0aGUgLmdpdG1ldGEgZmlsZQorLXYsICAtLXZlcmJvc2UgICAgICBCZSB2ZXJib3NlCisKK1xuIjsKKworbXkgKCRzdGRvdXQsICRzaG93ZGlmZiwgJHZlcmJvc2UsICRyZWFkX21vZGUsICR3cml0ZV9tb2RlKTsKKworaWYgKChAQVJHViA8IDApIHx8ICFHZXRPcHRpb25zKAorCQkJICAgICAgICJzdGRvdXQiLCAgICAgICAgIFwkc3Rkb3V0LAorCQkJICAgICAgICJkaWZmIiwgICAgICAgICAgIFwkc2hvd2RpZmYsCisJCQkgICAgICAgInJlYWQiLCAgICAgICAgICAgXCRyZWFkX21vZGUsCisJCQkgICAgICAgIndyaXRlIiwgICAgICAgICAgXCR3cml0ZV9tb2RlLAorCQkJICAgICAgICJ2ZXJib3NlIiwgICAgICAgIFwkdmVyYm9zZSwKKwkJCSAgICAgICkpIHsgZGllICR1c2FnZTsgfQorZGllICR1c2FnZSB1bmxlc3MgKCRyZWFkX21vZGUgeG9yICR3cml0ZV9tb2RlKTsKKworbXkgJHRvcGRpciA9IGBnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwYCBvciBkaWUgIlxuIjsgY2hvbXAgJHRvcGRpcjsKK215ICRnaXRkaXIgPSAkdG9wZGlyIC4gJy5naXQnOworbXkgJGdpdG1ldGEgPSAkdG9wZGlyIC4gJy5naXRtZXRhJzsKKworaWYgKCR3cml0ZV9tb2RlKSB7CisgICAgIyBVcGRhdGUgdGhlIHdvcmtpbmcgZGlyIHBlcm1pc3Npb25zL293bmVyc2hpcCBiYXNlZCBvbiBkYXRhIGZyb20gLmdpdG1ldGEKKyAgICBvcGVuIChJTiwgIjwkZ2l0bWV0YSIpIG9yIGRpZSAiQ291bGQgbm90IG9wZW4gJGdpdG1ldGEgZm9yIHJlYWRpbmc6ICQhXG4iOworICAgIHdoaWxlIChkZWZpbmVkICgkXyA9IDxJTj4pKSB7CisJY2hvbXA7CisJaWYgKC9eKC4qKSAgbW9kZT0oXFMrKVxzK3VpZD0oXGQrKVxzK2dpZD0oXGQrKS8pIHsKKwkgICAgIyBDb21wYXJlIHJlY29yZGVkIHBlcm1zIHRvIGFjdHVhbCBwZXJtcyBpbiB0aGUgd29ya2luZyBkaXIKKwkgICAgbXkgKCRwYXRoLCAkbW9kZSwgJHVpZCwgJGdpZCkgPSAoJDEsICQyLCAkMywgJDQpOworCSAgICBteSAkZnVsbHBhdGggPSAkdG9wZGlyIC4gJHBhdGg7CisJICAgIG15ICh1bmRlZix1bmRlZiwkd21vZGUsdW5kZWYsJHd1aWQsJHdnaWQpID0gbHN0YXQoJGZ1bGxwYXRoKTsKKwkgICAgJHdtb2RlID0gc3ByaW50ZiAiJTA0byIsICR3bW9kZSAmIDA3Nzc3OworCSAgICBpZiAoJG1vZGUgbmUgJHdtb2RlKSB7CisJCSR2ZXJib3NlICYmIHByaW50ICJVcGRhdGluZyBwZXJtaXNzaW9ucyBvbiAkcGF0aDogb2xkPSR3bW9kZSwgbmV3PSRtb2RlXG4iOworCQljaG1vZCBvY3QoJG1vZGUpLCAkZnVsbHBhdGg7CisJICAgIH0KKwkgICAgaWYgKCR1aWQgIT0gJHd1aWQgfHwgJGdpZCAhPSAkd2dpZCkgeworCQlpZiAoJHZlcmJvc2UpIHsKKwkJICAgICMgUHJpbnQgb3V0IHVzZXIvZ3JvdXAgbmFtZXMgaW5zdGVhZCBvZiB1aWQvZ2lkCisJCSAgICBteSAkcHduYW1lICA9IGdldHB3dWlkKCR1aWQpOworCQkgICAgbXkgJGdycG5hbWUgID0gZ2V0Z3JnaWQoJGdpZCk7CisJCSAgICBteSAkd3B3bmFtZSAgPSBnZXRwd3VpZCgkd3VpZCk7CisJCSAgICBteSAkd2dycG5hbWUgID0gZ2V0Z3JnaWQoJHdnaWQpOworCQkgICAgJHB3bmFtZSA9ICR1aWQgaWYgIWRlZmluZWQgJHB3bmFtZTsKKwkJICAgICRncnBuYW1lID0gJGdpZCBpZiAhZGVmaW5lZCAkZ3JwbmFtZTsKKwkJICAgICR3cHduYW1lID0gJHd1aWQgaWYgIWRlZmluZWQgJHdwd25hbWU7CisJCSAgICAkd2dycG5hbWUgPSAkd2dpZCBpZiAhZGVmaW5lZCAkd2dycG5hbWU7CisKKwkJICAgIHByaW50ICJVcGRhdGluZyB1aWQvZ2lkIG9uICRwYXRoOiBvbGQ9JHdwd25hbWUvJHdncnBuYW1lLCBuZXc9JHB3bmFtZS8kZ3JwbmFtZVxuIjsKKwkJfQorCQljaG93biAkdWlkLCAkZ2lkLCAkZnVsbHBhdGg7CisJICAgIH0KKwl9CisJZWxzZSB7CisJICAgIHdhcm4gIkludmFsaWQgaW5wdXQgZm9ybWF0IGluICRnaXRtZXRhOlxuXHQkX1xuIjsKKwl9CisgICAgfQorICAgIGNsb3NlIElOOworfQorZWxzaWYgKCRyZWFkX21vZGUpIHsKKyAgICAjIEhhbmRsZSBtZXJnZSBjb25mbGljdHMgaW4gdGhlIC5naXRwZXJtcyBmaWxlCisgICAgaWYgKC1lICIkZ2l0ZGlyL01FUkdFX01TRyIpIHsKKwlpZiAoYGdyZXAgPT09PT09ICRnaXRtZXRhYCkgeworCSAgICAjIENvbmZsaWN0IG5vdCByZXNvbHZlZCAtLSBhYm9ydCB0aGUgY29tbWl0CisJICAgIHByaW50ICJQRVJNSVNTSU9OUy9PV05FUlNISVAgQ09ORkxJQ1RcbiI7CisJICAgIHByaW50ICIgICAgUmVzb2x2ZSB0aGUgY29uZmxpY3QgaW4gdGhlICRnaXRtZXRhIGZpbGUgYW5kIHRoZW4gcnVuXG4iOworCSAgICBwcmludCAiICAgIGAuZ2l0L2hvb2tzL3NldGdpdHBlcm1zLnBlcmwgLS13cml0ZWAgdG8gcmVjb25jaWxlLlxuIjsKKwkgICAgZXhpdCAxOworCX0KKwllbHNpZiAoYGdyZXAgJGdpdG1ldGEgJGdpdGRpci9NRVJHRV9NU0dgKSB7CisJICAgICMgQSBjb25mbGljdCBpbiAuZ2l0bWV0YSBoYXMgYmVlbiBtYW51YWxseSByZXNvbHZlZC4gVmVyaWZ5IHRoYXQKKwkgICAgIyB0aGUgd29ya2luZyBkaXIgcGVybXMgbWF0Y2hlcyB0aGUgY3VycmVudCAuZ2l0bWV0YSBwZXJtcyBmb3IKKwkgICAgIyBlYWNoIGZpbGUvZGlyIHRoYXQgY29uZmxpY3RlZC4KKwkgICAgIyBUaGlzIGlzIGhlcmUgYmVjYXVzZSBhIGBzZXRnaXRwZXJtcy5wZXJsIC0td3JpdGVgIHdhcyBub3QKKwkgICAgIyBwZXJmb3JtZWQgZHVlIHRvIGEgbWVyZ2UgY29uZmxpY3QsIHNvIHBlcm1pc3Npb25zL293bmVyc2hpcAorCSAgICAjIG1heSBub3QgYmUgY29uc2lzdGVudCB3aXRoIHRoZSBtYW51YWxseSBtZXJnZWQgLmdpdG1ldGEgZmlsZS4KKwkgICAgbXkgQGNvbmZsaWN0X2RpZmYgPSBgZ2l0IHNob3cgXCQoY2F0ICRnaXRkaXIvTUVSR0VfSEVBRClgOworCSAgICBteSBAY29uZmxpY3RfZmlsZXM7CisJICAgIG15ICRtZXRhZGlmZiA9IDA7CisKKwkgICAgIyBCdWlsZCBhIGxpc3Qgb2YgZmlsZXMgdGhhdCBjb25mbGljdGVkIGZyb20gdGhlIC5naXRtZXRhIGRpZmYKKwkgICAgZm9yZWFjaCBteSAkbGluZSAoQGNvbmZsaWN0X2RpZmYpIHsKKwkJaWYgKCRsaW5lID1+IG18XmRpZmYgLS1naXQgYS8kZ2l0bWV0YSBiLyRnaXRtZXRhfCkgeworCQkgICAgJG1ldGFkaWZmID0gMTsKKwkJfQorCQllbHNpZiAoJGxpbmUgPX4gL15kaWZmIC0tZ2l0LykgeworCQkgICAgJG1ldGFkaWZmID0gMDsKKwkJfQorCQllbHNpZiAoJG1ldGFkaWZmICYmICRsaW5lID1+IC9eXCsoLiopICBtb2RlPS8pIHsKKwkJICAgIHB1c2ggQGNvbmZsaWN0X2ZpbGVzLCAkMTsKKwkJfQorCSAgICB9CisKKwkgICAgIyBWZXJpZnkgdGhhdCBlYWNoIGNvbmZsaWN0IGZpbGUgbm93IGhhcyBwZXJtaXNzaW9ucyBjb25zaXN0ZW50CisJICAgICMgd2l0aCB0aGUgLmdpdG1ldGEgZmlsZQorCSAgICBmb3JlYWNoIG15ICRmaWxlIChAY29uZmxpY3RfZmlsZXMpIHsKKwkJbXkgJGFic2ZpbGUgPSAkdG9wZGlyIC4gJGZpbGU7CisJCW15ICRnbV9lbnRyeSA9IGBncmVwICJeJGZpbGUgIG1vZGU9IiAkZ2l0bWV0YWA7CisJCWlmICgkZ21fZW50cnkgPX4gL21vZGU9KFxkKykgIHVpZD0oXGQrKSAgZ2lkPShcZCspLykgeworCQkgICAgbXkgKCRnbV9tb2RlLCAkZ21fdWlkLCAkZ21fZ2lkKSA9ICgkMSwgJDIsICQzKTsKKwkJICAgIG15ICh1bmRlZix1bmRlZiwkbW9kZSx1bmRlZiwkdWlkLCRnaWQpID0gbHN0YXQoIiRhYnNmaWxlIik7CisJCSAgICAkbW9kZSA9IHNwcmludGYoIiUwNG8iLCAkbW9kZSAmIDA3Nzc3KTsKKwkJICAgIGlmICgoJGdtX21vZGUgbmUgJG1vZGUpIHx8ICgkZ21fdWlkICE9ICR1aWQpCisJCQl8fCAoJGdtX2dpZCAhPSAkZ2lkKSkgeworCQkJcHJpbnQgIlBFUk1JU1NJT05TL09XTkVSU0hJUCBDT05GTElDVFxuIjsKKwkJCXByaW50ICIgICAgTWlzbWF0Y2ggZm91bmQgZm9yIGZpbGU6ICRmaWxlXG4iOworCQkJcHJpbnQgIiAgICBSdW4gYC5naXQvaG9va3Mvc2V0Z2l0cGVybXMucGVybCAtLXdyaXRlYCB0byByZWNvbmNpbGUuXG4iOworCQkJZXhpdCAxOworCQkgICAgfQorCQl9CisJCWVsc2UgeworCQkgICAgcHJpbnQgIldhcm5pbmchIFBlcm1pc3Npb25zL293bmVyc2hpcCBubyBsb25nZXIgYmVpbmcgdHJhY2tlZCBmb3IgZmlsZTogJGZpbGVcbiI7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAjIE5vIG1lcmdlIGNvbmZsaWN0cyAtLSB3cml0ZSBvdXQgcGVybXMvb3duZXJzaGlwIGRhdGEgdG8gLmdpdG1ldGEgZmlsZQorICAgIHVubGVzcyAoJHN0ZG91dCkgeworCW9wZW4gKE9VVCwgIj4kZ2l0bWV0YS50bXAiKSBvciBkaWUgIkNvdWxkIG5vdCBvcGVuICRnaXRtZXRhLnRtcCBmb3Igd3JpdGluZzogJCFcbiI7CisgICAgfQorCisgICAgbXkgQGZpbGVzID0gYGdpdCBscy1maWxlc2A7CisgICAgbXkgJWRpcnM7CisKKyAgICBmb3JlYWNoIG15ICRwYXRoIChAZmlsZXMpIHsKKwljaG9tcCAkcGF0aDsKKwkjIFdlIGhhdmUgdG8gbWFudWFsbHkgYWRkIHN0YXRzIGZvciBwYXJlbnQgZGlyZWN0b3JpZXMKKwlteSAkcGFyZW50ID0gZGlybmFtZSgkcGF0aCk7CisJd2hpbGUgKCFleGlzdHMgJGRpcnN7JHBhcmVudH0pIHsKKwkgICAgJGRpcnN7JHBhcmVudH0gPSAxOworCSAgICBuZXh0IGlmICRwYXJlbnQgZXEgJy4nOworCSAgICBwcmludHN0YXRzKCRwYXJlbnQpOworCSAgICAkcGFyZW50ID0gZGlybmFtZSgkcGFyZW50KTsKKwl9CisJIyBOb3cgdGhlIGdpdC10cmFja2VkIGZpbGUKKwlwcmludHN0YXRzKCRwYXRoKTsKKyAgICB9CisKKyAgICAjIGRpZmYgdGhlIHRlbXBvcmFyeSBtZXRhZGF0YSBmaWxlIHRvIHNlZSBpZiBhbnl0aGluZyBoYXMgY2hhbmdlZAorICAgICMgSWYgbm8gbWV0YWRhdGEgaGFzIGNoYW5nZWQsIGRvbid0IG92ZXJ3cml0ZSB0aGUgcmVhbCBmaWxlCisgICAgIyBUaGlzIGlzIGp1c3Qgc28gYGdpdCBjb21taXQgLWFgIGRvZXNuJ3QgdHJ5IHRvIGNvbW1pdCBhIGJvZ3VzIHVwZGF0ZQorICAgIHVubGVzcyAoJHN0ZG91dCkgeworCWlmICghIC1lICRnaXRtZXRhKSB7CisJICAgIHJlbmFtZSAiJGdpdG1ldGEudG1wIiwgJGdpdG1ldGE7CisJfQorCWVsc2UgeworCSAgICBteSAkZGlmZiA9IGBkaWZmIC1VIDAgJGdpdG1ldGEgJGdpdG1ldGEudG1wYDsKKwkgICAgaWYgKCRkaWZmIG5lICcnKSB7CisJCXJlbmFtZSAiJGdpdG1ldGEudG1wIiwgJGdpdG1ldGE7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCXVubGluayAiJGdpdG1ldGEudG1wIjsKKwkgICAgfQorCSAgICBpZiAoJHNob3dkaWZmKSB7CisJCXByaW50ICRkaWZmOworCSAgICB9CisJfQorCWNsb3NlIE9VVDsKKyAgICB9CisgICAgIyBNYWtlIHN1cmUgdGhlIC5naXRtZXRhIGZpbGUgaXMgdHJhY2tlZAorICAgIHN5c3RlbSgiZ2l0IGFkZCAkZ2l0bWV0YSIpOworfQorCisKK3N1YiBwcmludHN0YXRzIHsKKyAgICBteSAkcGF0aCA9ICRfWzBdOworICAgICRwYXRoID1+IHMvQC9cQC9nOworICAgIG15ICh1bmRlZix1bmRlZiwkbW9kZSx1bmRlZiwkdWlkLCRnaWQpID0gbHN0YXQoJHBhdGgpOworICAgICRwYXRoID1+IHMvJS9cJS9nOworICAgIGlmICgkc3Rkb3V0KSB7CisJcHJpbnQgJHBhdGg7CisJcHJpbnRmICIgIG1vZGU9JTA0byAgdWlkPSR1aWQgIGdpZD0kZ2lkXG4iLCAkbW9kZSAmIDA3Nzc3OworICAgIH0KKyAgICBlbHNlIHsKKwlwcmludCBPVVQgJHBhdGg7CisJcHJpbnRmIE9VVCAiICBtb2RlPSUwNG8gIHVpZD0kdWlkICBnaWQ9JGdpZFxuIiwgJG1vZGUgJiAwNzc3NzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL3VwZGF0ZS1wYXJhbm9pZCBiL2NvbnRyaWIvaG9va3MvdXBkYXRlLXBhcmFub2lkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwOTJkNjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL3VwZGF0ZS1wYXJhbm9pZApAQCAtMCwwICsxLDQyMSBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2UgRmlsZTo6U3BlYzsKKworJEVOVntQQVRIfSAgICAgPSAnL29wdC9naXQvYmluJzsKK215ICRhY2xfZ2l0ICAgID0gJy92Y3MvYWNscy5naXQnOworbXkgJGFjbF9icmFuY2ggPSAncmVmcy9oZWFkcy9tYXN0ZXInOworbXkgJGRlYnVnICAgICAgPSAwOworCis9ZG9jCitJbnZva2VkIGFzOiB1cGRhdGUgcmVmbmFtZSBvbGQtc2hhMSBuZXctc2hhMQorCitUaGlzIHNjcmlwdCBpcyBydW4gYnkgZ2l0LXJlY2VpdmUtcGFjayBvbmNlIGZvciBlYWNoIHJlZiB0aGF0IHRoZQorY2xpZW50IGlzIHRyeWluZyB0byBtb2RpZnkuICBJZiB3ZSBleGl0IHdpdGggYSBub24temVybyBleGl0IHZhbHVlCit0aGVuIHRoZSB1cGRhdGUgZm9yIHRoYXQgcGFydGljdWxhciByZWYgaXMgZGVuaWVkLCBidXQgdXBkYXRlcyBmb3IKK290aGVyIHJlZnMgaW4gdGhlIHNhbWUgcnVuIG9mIHJlY2VpdmUtcGFjayBtYXkgc3RpbGwgYmUgYWxsb3dlZC4KKworV2UgYXJlIHJ1biBhZnRlciB0aGUgb2JqZWN0cyBoYXZlIGJlZW4gdXBsb2FkZWQsIGJ1dCBiZWZvcmUgdGhlCityZWYgaXMgYWN0dWFsbHkgbW9kaWZpZWQuICBXZSB0YWtlIGFkdmFudGFnZSBvZiB0aGF0IGZhY3Qgd2hlbiB3ZQorbG9vayBmb3IgIm5ldyIgY29tbWl0cyBhbmQgdGFncyAodGhlIG5ldyBvYmplY3RzIHdvbid0IHNob3cgdXAgaW4KK2ByZXYtbGlzdCAtLWFsbGApLgorCitUaGlzIHNjcmlwdCBsb2FkcyBhbmQgcGFyc2VzIHRoZSBjb250ZW50IG9mIHRoZSBjb25maWcgZmlsZQorInVzZXJzLyR0aGlzX3VzZXIuYWNsIiBmcm9tIHRoZSAkYWNsX2JyYW5jaCBjb21taXQgb2YgJGFjbF9naXQgT0RCLgorVGhlIGFjbCBmaWxlIGlzIGEgZ2l0LWNvbmZpZyBzdHlsZSBmaWxlLCBidXQgdXNlcyBhIHNsaWdodGx5IG1vcmUKK3Jlc3RyaWN0ZWQgc3ludGF4IGFzIHRoZSBQZXJsIHBhcnNlciBjb250YWluZWQgd2l0aGluIHRoaXMgc2NyaXB0CitpcyBub3QgbmVhcmx5IGFzIHBlcm1pc3NpdmUgYXMgZ2l0LWNvbmZpZy4KKworRXhhbXBsZToKKworICBbdXNlcl0KKyAgICBjb21taXR0ZXIgPSBKb2huIERvZSA8am9obi5kb2VAZXhhbXBsZS5jb20+CisgICAgY29tbWl0dGVyID0gSm9obiBSLiBEb2UgPGpvaG4uZG9lQGV4YW1wbGUuY29tPgorCisgIFtyZXBvc2l0b3J5ICJhY2xzIl0KKyAgICBhbGxvdyA9IGhlYWRzL21hc3RlcgorICAgIGFsbG93ID0gQ0RVUiBmb3IgaGVhZHMvamQvCisgICAgYWxsb3cgPSBDICAgIGZvciBedGFncy92XFxkKyQKKworRm9yIGFsbCBuZXcgY29tbWl0IG9yIHRhZyBvYmplY3RzIHRoZSBjb21taXR0ZXIgKG9yIHRhZ2dlcikgbGluZQord2l0aGluIHRoZSBvYmplY3QgbXVzdCBleGFjdGx5IG1hdGNoIG9uZSBvZiB0aGUgdXNlci5jb21taXR0ZXIKK3ZhbHVlcyBsaXN0ZWQgaW4gdGhlIGFjbCBmaWxlICgiSEVBRDp1c2Vycy8kdGhpc191c2VyLmFjbCIpLgorCitGb3IgYSBicmFuY2ggdG8gYmUgbW9kaWZpZWQgYW4gYWxsb3cgbGluZSB3aXRoaW4gdGhlIG1hdGNoaW5nCityZXBvc2l0b3J5IHNlY3Rpb24gbXVzdCBiZSBtYXRjaGVkIGZvciBib3RoIHRoZSByZWZuYW1lIGFuZCB0aGUKK29wY29kZS4KKworUmVwb3NpdG9yeSBzZWN0aW9ucyBhcmUgbWF0Y2hlZCBvbiB0aGUgYmFzZW5hbWUgb2YgdGhlIHJlcG9zaXRvcnkKKyhhZnRlciByZW1vdmluZyB0aGUgLmdpdCBzdWZmaXgpLgorCitUaGUgb3Bjb2RlIGFiYnJldmlhdGlvbnMgYXJlOgorCisgIEM6IGNyZWF0ZSBuZXcgcmVmCisgIEQ6IGRlbGV0ZSBleGlzdGluZyByZWYKKyAgVTogZmFzdC1mb3J3YXJkIGV4aXN0aW5nIHJlZiAobm8gY29tbWl0IGxvc3MpCisgIFI6IHJld2luZC9yZWJhc2UgZXhpc3RpbmcgcmVmIChjb21taXQgbG9zcykKKworaWYgbm8gb3Bjb2RlcyBhcmUgbGlzdGVkIGJlZm9yZSB0aGUgImZvciIga2V5d29yZCB0aGVuICJVIiAoZm9yCitmYXN0LWZvcndhcmQgdXBkYXRlIG9ubHkpIGlzIGFzc3VtZWQgYXMgdGhpcyBpcyB0aGUgbW9zdCBjb21tb24KK3VzYWdlLgorCitSZWZuYW1lcyBhcmUgbWF0Y2hlZCBieSBhbHdheXMgYXNzdW1pbmcgYSBwcmVmaXggb2YgInJlZnMvIi4KK1RoaXMgaG9vayBmb3JiaWRzIHB1c2hpbmcgb3IgZGVsZXRpbmcgYW55dGhpbmcgbm90IHVuZGVyICJyZWZzLyIuCisKK1JlZm5hbWVzIHRoYXQgc3RhcnQgd2l0aCBeIGFyZSBQZXJsIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGFuZCB0aGUgXgoraXMga2VwdCBhcyBwYXJ0IG9mIHRoZSByZWdleHAuICBcXCBpcyBuZWVkZWQgdG8gZ2V0IGp1c3Qgb25lIFwsIHNvCitcXGQgZXhwYW5kcyB0byBcZCBpbiBQZXJsLiAgVGhlIDNyZCBhbGxvdyBsaW5lIGFib3ZlIGlzIGFuIGV4YW1wbGUuCisKK1JlZm5hbWVzIHRoYXQgZG9uJ3Qgc3RhcnQgd2l0aCBeIGJ1dCB0aGF0IGVuZCB3aXRoIC8gYXJlIHByZWZpeAorbWF0Y2hlcyAoMm5kIGFsbG93IGxpbmUgYWJvdmUpOyBhbGwgb3RoZXIgcmVmbmFtZXMgYXJlIHN0cmljdAorZXF1YWxpdHkgbWF0Y2hlcyAoMXN0IGFsbG93IGxpbmUpLgorCitBbnl0aGluZyBwdXNoZWQgdG8gImhlYWRzLyIgKG9rLCByZWFsbHkgInJlZnMvaGVhZHMvIikgbXVzdCBiZQorYSBjb21taXQuICBUYWdzIGFyZSBub3QgcGVybWl0dGVkIGhlcmUuCisKK0FueXRoaW5nIHB1c2hlZCB0byAidGFncy8iIChlcnIsIHJlYWxseSAicmVmcy90YWdzLyIpIG11c3QgYmUgYW4KK2Fubm90YXRlZCB0YWcuICBDb21taXRzLCBibG9icywgdHJlZXMsIGV0Yy4gYXJlIG5vdCBwZXJtaXR0ZWQgaGVyZS4KK0Fubm90YXRlZCB0YWcgc2lnbmF0dXJlcyBhcmVuJ3QgY2hlY2tlZCwgbm9yIGFyZSB0aGV5IHJlcXVpcmVkLgorCitUaGUgc3BlY2lhbCBzdWJyZXBvc2l0b3J5IG9mICdpbmZvL25ldy1jb21taXQtY2hlY2snIGNhbgorYmUgY3JlYXRlZCBhbmQgdXNlZCB0byBhbGxvdyB1c2VycyB0byBwdXNoIG5ldyBjb21taXRzIGFuZAordGFncyBmcm9tIGFub3RoZXIgbG9jYWwgcmVwb3NpdG9yeSB0byB0aGlzIG9uZSwgZXZlbiBpZiB0aGV5CithcmVuJ3QgdGhlIGNvbW1pdHRlci90YWdnZXIgb2YgdGhvc2Ugb2JqZWN0cy4gIEluIGEgbnV0IHNoZWxsCit0aGUgaW5mby9uZXctY29tbWl0LWNoZWNrIGRpcmVjdG9yeSBpcyBhIEdpdCByZXBvc2l0b3J5IHdob3NlCitvYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBmaWxlIGxpc3RzIHRoaXMgcmVwb3NpdG9yeSBhbmQgYWxsIG90aGVyCitwb3NzaWJsZSBzb3VyY2VzLCBhbmQgd2hvc2UgcmVmcyBzdWJkaXJlY3RvcnkgY29udGFpbnMgc3ltbGlua3MKK3RvIHRoaXMgcmVwb3NpdG9yeSdzIHJlZnMgc3ViZGlyZWN0b3J5LCBhbmQgdG8gYWxsIG90aGVyIHBvc3NpYmxlCitzb3VyY2VzIHJlZnMgc3ViZGlyZWN0b3JpZXMuICBZZXMsIHRoaXMgbWVhbnMgdGhhdCB5b3UgY2Fubm90Cit1c2UgcGFja2VkLXJlZnMgaW4gdGhvc2UgcmVwb3NpdG9yaWVzIGFzIHRoZXkgd29uJ3QgYmUgcmVzb2x2ZWQKK2NvcnJlY3RseS4KKworPWN1dAorCitteSAkZ2l0X2RpciA9ICRFTlZ7R0lUX0RJUn07CitteSAkbmV3X2NvbW1pdF9jaGVjayA9ICIkZ2l0X2Rpci9pbmZvL25ldy1jb21taXQtY2hlY2siOworbXkgJHJlZiA9ICRBUkdWWzBdOworbXkgJG9sZCA9ICRBUkdWWzFdOworbXkgJG5ldyA9ICRBUkdWWzJdOworbXkgJG5ld190eXBlOworbXkgKCR0aGlzX3VzZXIpID0gZ2V0cHd1aWQgJDw7ICMgUkVBTF9VU0VSX0lECitteSAkcmVwb3NpdG9yeV9uYW1lOworbXkgJXVzZXJfY29tbWl0dGVyOworbXkgQGFsbG93X3J1bGVzOworbXkgQHBhdGhfcnVsZXM7CitteSAlZGlmZl9jYWNoZTsKKworc3ViIGRlbnkgKCQpIHsKKwlwcmludCBTVERFUlIgIi1EZW55LSAgICAkX1swXVxuIiBpZiAkZGVidWc7CisJcHJpbnQgU1RERVJSICJcbmRlbmllZDogJF9bMF1cblxuIjsKKwlleGl0IDE7Cit9CisKK3N1YiBncmFudCAoJCkgeworCXByaW50IFNUREVSUiAiLUdyYW50LSAgICRfWzBdXG4iIGlmICRkZWJ1ZzsKKwlleGl0IDA7Cit9CisKK3N1YiBpbmZvICgkKSB7CisJcHJpbnQgU1RERVJSICItSW5mby0gICAgJF9bMF1cbiIgaWYgJGRlYnVnOworfQorCitzdWIgZ2l0X3ZhbHVlIChAKSB7CisJb3BlbihULCctfCcsJ2dpdCcsQF8pOyBsb2NhbCAkXyA9IDxUPjsgY2hvcDsgY2xvc2UgVDsgJF87Cit9CisKK3N1YiBtYXRjaF9zdHJpbmcgKCQkKSB7CisJbXkgKCRhY2xfbiwgJHJlZikgPSBAXzsKKwkgICAoJGFjbF9uIGVxICRyZWYpCisJfHwgKCRhY2xfbiA9fiBtLC8kLCAmJiBzdWJzdHIoJHJlZiwwLGxlbmd0aCAkYWNsX24pIGVxICRhY2xfbikKKwl8fCAoJGFjbF9uID1+IG0sXlxeLCAmJiAkcmVmID1+IG06JGFjbF9uOik7Cit9CisKK3N1YiBwYXJzZV9jb25maWcgKCQkJCQpIHsKKwlteSAkZGF0YSA9IHNoaWZ0OworCWxvY2FsICRFTlZ7R0lUX0RJUn0gPSBzaGlmdDsKKwlteSAkYnIgPSBzaGlmdDsKKwlteSAkZm4gPSBzaGlmdDsKKwlyZXR1cm4gdW5sZXNzIGdpdF92YWx1ZSgncmV2LWxpc3QnLCctLW1heC1jb3VudD0xJywkYnIsJy0tJywkZm4pOworCWluZm8gIkxvYWRpbmcgJGJyOiRmbiI7CisJb3BlbihJLCctfCcsJ2dpdCcsJ2NhdC1maWxlJywnYmxvYicsIiRicjokZm4iKTsKKwlteSAkc2VjdGlvbiA9ICcnOworCXdoaWxlICg8ST4pIHsKKwkJY2hvbXA7CisJCWlmICgvXlxzKiQvIHx8IC9eXHMqIy8pIHsKKwkJfSBlbHNpZiAoL15cWyhbYS16XSspXF0kL2kpIHsKKwkJCSRzZWN0aW9uID0gbGMgJDE7CisJCX0gZWxzaWYgKC9eXFsoW2Etel0rKVxzKyIoLiopIlxdJC9pKSB7CisJCQkkc2VjdGlvbiA9IGpvaW4oJy4nLGxjICQxLCQyKTsKKwkJfSBlbHNpZiAoL15ccyooW2Etel1bYS16MC05XSspXHMqPVxzKiguKj8pXHMqJC9pKSB7CisJCQlwdXNoIEB7JGRhdGEtPntqb2luKCcuJywkc2VjdGlvbixsYyAkMSl9fSwgJDI7CisJCX0gZWxzZSB7CisJCQlkZW55ICJiYWQgY29uZmlnIGZpbGUgbGluZSAkLiBpbiAkYnI6JGZuIjsKKwkJfQorCX0KKwljbG9zZSBJOworfQorCitzdWIgYWxsX25ld19jb21taXR0ZXJzICgpIHsKKwlsb2NhbCAkRU5We0dJVF9ESVJ9ID0gJGdpdF9kaXI7CisJJEVOVntHSVRfRElSfSA9ICRuZXdfY29tbWl0X2NoZWNrIGlmIC1kICRuZXdfY29tbWl0X2NoZWNrOworCisJaW5mbyAiR2V0dGluZyBjb21taXR0ZXJzIG9mIG5ldyBjb21taXRzLiI7CisJbXkgJXVzZWQ7CisJb3BlbihULCctfCcsJ2dpdCcsJ3Jldi1saXN0JywnLS1wcmV0dHk9cmF3JywkbmV3LCctLW5vdCcsJy0tYWxsJyk7CisJd2hpbGUgKDxUPikgeworCQluZXh0IHVubGVzcyBzL15jb21taXR0ZXIgLy87CisJCWNob3A7CisJCXMvPi4qJC8+LzsKKwkJaW5mbyAiRm91bmQgJF8uIiB1bmxlc3MgJHVzZWR7JF99Kys7CisJfQorCWNsb3NlIFQ7CisJaW5mbyAiTm8gbmV3IGNvbW1pdHMuIiB1bmxlc3MgJXVzZWQ7CisJa2V5cyAldXNlZDsKK30KKworc3ViIGFsbF9uZXdfdGFnZ2VycyAoKSB7CisJbXkgJWV4aXN0czsKKwlvcGVuKFQsJy18JywnZ2l0JywnZm9yLWVhY2gtcmVmJywnLS1mb3JtYXQ9JShvYmplY3RuYW1lKScsJ3JlZnMvdGFncycpOworCXdoaWxlICg8VD4pIHsKKwkJY2hvcDsKKwkJJGV4aXN0c3skX30gPSAxOworCX0KKwljbG9zZSBUOworCisJaW5mbyAiR2V0dGluZyB0YWdnZXJzIG9mIG5ldyB0YWdzLiI7CisJbXkgJXVzZWQ7CisJbXkgJG9iaiA9ICRuZXc7CisJbXkgJG9ial90eXBlID0gJG5ld190eXBlOworCXdoaWxlICgkb2JqX3R5cGUgZXEgJ3RhZycpIHsKKwkJbGFzdCBpZiAkZXhpc3RzeyRvYmp9OworCQkkb2JqX3R5cGUgPSAnJzsKKwkJb3BlbihULCctfCcsJ2dpdCcsJ2NhdC1maWxlJywndGFnJywkb2JqKTsKKwkJd2hpbGUgKDxUPikgeworCQkJY2hvcDsKKwkJCWlmICgvXm9iamVjdCAoW2EtejAtOV17NDB9KSQvKSB7CisJCQkJJG9iaiA9ICQxOworCQkJfSBlbHNpZiAoL150eXBlICguKykkLykgeworCQkJCSRvYmpfdHlwZSA9ICQxOworCQkJfSBlbHNpZiAocy9edGFnZ2VyIC8vKSB7CisJCQkJcy8+LiokLz4vOworCQkJCWluZm8gIkZvdW5kICRfLiIgdW5sZXNzICR1c2VkeyRffSsrOworCQkJCWxhc3Q7CisJCQl9CisJCX0KKwkJY2xvc2UgVDsKKwl9CisJaW5mbyAiTm8gbmV3IHRhZ3MuIiB1bmxlc3MgJXVzZWQ7CisJa2V5cyAldXNlZDsKK30KKworc3ViIGNoZWNrX2NvbW1pdHRlcnMgKEApIHsKKwlteSBAYmFkOworCWZvcmVhY2ggKEBfKSB7IHB1c2ggQGJhZCwgJF8gdW5sZXNzICR1c2VyX2NvbW1pdHRlcnskX307IH0KKwlpZiAoQGJhZCkgeworCQlwcmludCBTVERFUlIgIlxuIjsKKwkJcHJpbnQgU1RERVJSICJZb3UgYXJlIG5vdCAkXy5cbiIgZm9yZWFjaCAoc29ydCBAYmFkKTsKKwkJZGVueSAiWW91IGNhbm5vdCBwdXNoIGNoYW5nZXMgbm90IGNvbW1pdHRlZCBieSB5b3UuIjsKKwl9Cit9CisKK3N1YiBsb2FkX2RpZmYgKCQpIHsKKwlteSAkYmFzZSA9IHNoaWZ0OworCW15ICRkID0gJGRpZmZfY2FjaGV7JGJhc2V9OworCXVubGVzcyAoJGQpIHsKKwkJbG9jYWwgJC8gPSAiXDAiOworCQlteSAldGhpc19kaWZmOworCQlpZiAoJGJhc2UgPX4gL14wezQwfSQvKSB7CisJCQkjIERvbid0IGxvYWQgdGhlIGRpZmYgYXQgYWxsOyB3ZSBhcmUgbWFraW5nIHRoZQorCQkJIyBicmFuY2ggYW5kIGhhdmUgbm8gYmFzZSB0byBjb21wYXJlIHRvIGluIHRoaXMKKwkJCSMgY2FzZS4gIEEgZmlsZSBsZXZlbCBBQ0wgbWFrZXMgbm8gc2Vuc2UgaW4gdGhpcworCQkJIyBjb250ZXh0LiAgSGF2aW5nIGFuIGVtcHR5IGRpZmYgd2lsbCBhbGxvdyB0aGUKKwkJCSMgYnJhbmNoIGNyZWF0aW9uLgorCQkJIworCQl9IGVsc2UgeworCQkJb3BlbihULCctfCcsJ2dpdCcsJ2RpZmYtdHJlZScsCisJCQkJJy1yJywnLS1uYW1lLXN0YXR1cycsJy16JywKKwkJCQkkYmFzZSwkbmV3KSBvciByZXR1cm4gdW5kZWY7CisJCQl3aGlsZSAoPFQ+KSB7CisJCQkJbXkgJG9wID0gJF87CisJCQkJY2hvcCAkb3A7CisKKwkJCQlteSAkcGF0aCA9IDxUPjsKKwkJCQljaG9wICRwYXRoOworCisJCQkJJHRoaXNfZGlmZnskcGF0aH0gPSAkb3A7CisJCQl9CisJCQljbG9zZSBUIG9yIHJldHVybiB1bmRlZjsKKwkJfQorCQkkZCA9IFwldGhpc19kaWZmOworCQkkZGlmZl9jYWNoZXskYmFzZX0gPSAkZDsKKwl9CisJcmV0dXJuICRkOworfQorCitkZW55ICJObyBHSVRfRElSIGluaGVyaXRlZCBmcm9tIGNhbGxlciIgdW5sZXNzICRnaXRfZGlyOworZGVueSAiTmVlZCBhIHJlZiBuYW1lIiB1bmxlc3MgJHJlZjsKK2RlbnkgIlJlZnVzaW5nIGZ1bm55IHJlZiAkcmVmIiB1bmxlc3MgJHJlZiA9fiBzLF5yZWZzLywsOworZGVueSAiQmFkIG9sZCB2YWx1ZSAkb2xkIiB1bmxlc3MgJG9sZCA9fiAvXlthLXowLTldezQwfSQvOworZGVueSAiQmFkIG5ldyB2YWx1ZSAkbmV3IiB1bmxlc3MgJG5ldyA9fiAvXlthLXowLTldezQwfSQvOworZGVueSAiQ2Fubm90IGRldGVybWluZSB3aG8geW91IGFyZS4iIHVubGVzcyAkdGhpc191c2VyOworZ3JhbnQgIk5vIGNoYW5nZSByZXF1ZXN0ZWQuIiBpZiAkb2xkIGVxICRuZXc7CisKKyRyZXBvc2l0b3J5X25hbWUgPSBGaWxlOjpTcGVjLT5yZWwyYWJzKCRnaXRfZGlyKTsKKyRyZXBvc2l0b3J5X25hbWUgPX4gbSwvKFteL10rKSg/OlwuZ2l0fC9cLmdpdCkkLDsKKyRyZXBvc2l0b3J5X25hbWUgPSAkMTsKK2luZm8gIlVwZGF0aW5nIGluICckcmVwb3NpdG9yeV9uYW1lJy4iOworCitteSAkb3A7CitpZiAgICAoJG9sZCA9fiAvXjB7NDB9JC8pIHsgJG9wID0gJ0MnOyB9CitlbHNpZiAoJG5ldyA9fiAvXjB7NDB9JC8pIHsgJG9wID0gJ0QnOyB9CitlbHNlICAgICAgICAgICAgICAgICAgICAgIHsgJG9wID0gJ1InOyB9CisKKyMgVGhpcyBpcyByZWFsbHkgYW4gdXBkYXRlIChmYXN0LWZvcndhcmQpIGlmIHRoZQorIyBtZXJnZSBiYXNlIG9mICRvbGQgYW5kICRuZXcgaXMgJG9sZC4KKyMKKyRvcCA9ICdVJyBpZiAoJG9wIGVxICdSJworCSYmICRyZWYgPX4gbSxeaGVhZHMvLAorCSYmICRvbGQgZXEgZ2l0X3ZhbHVlKCdtZXJnZS1iYXNlJywkb2xkLCRuZXcpKTsKKworIyBMb2FkIHRoZSB1c2VyJ3MgQUNMIGZpbGUuIEV4cGFuZCBncm91cHMgKHVzZXIubWVtYmVyb2YpIG9uZSBsZXZlbC4KK3sKKwlteSAlZGF0YSA9ICgndXNlci5jb21taXR0ZXInID0+IFtdKTsKKwlwYXJzZV9jb25maWcoXCVkYXRhLCRhY2xfZ2l0LCRhY2xfYnJhbmNoLCJleHRlcm5hbC8kcmVwb3NpdG9yeV9uYW1lLmFjbCIpOworCisJJWRhdGEgPSAoCisJCSd1c2VyLmNvbW1pdHRlcicgPT4gJGRhdGF7J3VzZXIuY29tbWl0dGVyJ30sCisJCSd1c2VyLm1lbWJlcm9mJyA9PiBbXSwKKwkpOworCXBhcnNlX2NvbmZpZyhcJWRhdGEsJGFjbF9naXQsJGFjbF9icmFuY2gsInVzZXJzLyR0aGlzX3VzZXIuYWNsIik7CisKKwkldXNlcl9jb21taXR0ZXIgPSBtYXAgeyRfID0+ICRffSBAeyRkYXRheyd1c2VyLmNvbW1pdHRlcid9fTsKKwlteSAkcnVsZV9rZXkgPSAicmVwb3NpdG9yeS4kcmVwb3NpdG9yeV9uYW1lLmFsbG93IjsKKwlteSAkcnVsZXMgPSAkZGF0YXskcnVsZV9rZXl9IHx8IFtdOworCisJZm9yZWFjaCBteSAkZ3JvdXAgKEB7JGRhdGF7J3VzZXIubWVtYmVyb2YnfX0pIHsKKwkJbXkgJWc7CisJCXBhcnNlX2NvbmZpZyhcJWcsJGFjbF9naXQsJGFjbF9icmFuY2gsImdyb3Vwcy8kZ3JvdXAuYWNsIik7CisJCW15ICRncm91cF9ydWxlcyA9ICRneyRydWxlX2tleX07CisJCXB1c2ggQCRydWxlcywgQCRncm91cF9ydWxlcyBpZiAkZ3JvdXBfcnVsZXM7CisJfQorCitSVUxFOgorCWZvcmVhY2ggKEAkcnVsZXMpIHsKKwkJd2hpbGUgKC9cJHt1c2VyXC4oW2Etel1bYS16QS1aMC05XSspfS8pIHsKKwkJCW15ICRrID0gbGMgJDE7CisJCQlteSAkdiA9ICRkYXRheyJ1c2VyLiRrIn07CisJCQluZXh0IFJVTEUgdW5sZXNzIGRlZmluZWQgJHY7CisJCQluZXh0IFJVTEUgaWYgQCR2ICE9IDE7CisJCQluZXh0IFJVTEUgdW5sZXNzIGRlZmluZWQgJHYtPlswXTsKKwkJCXMvXCR7dXNlclwuJGt9LyR2LT5bMF0vZzsKKwkJfQorCisJCWlmICgvXihbQU1EIF0rKVxzK29mXHMrKFteXHNdKylccytmb3JccysoW15cc10rKVxzK2RpZmZccysoW15cc10rKSQvKSB7CisJCQlteSAoJG9wcywgJHB0aCwgJHJlZiwgJGJzdCkgPSAoJDEsICQyLCAkMywgJDQpOworCQkJJG9wcyA9fiBzLyAvL2c7CisJCQkkcHRoID1+IHMvXFxcXC9cXC9nOworCQkJJHJlZiA9fiBzL1xcXFwvXFwvZzsKKwkJCXB1c2ggQHBhdGhfcnVsZXMsIFskb3BzLCAkcHRoLCAkcmVmLCAkYnN0XTsKKwkJfSBlbHNpZiAoL14oW0FNRCBdKylccytvZlxzKyhbXlxzXSspXHMrZm9yXHMrKFteXHNdKykkLykgeworCQkJbXkgKCRvcHMsICRwdGgsICRyZWYpID0gKCQxLCAkMiwgJDMpOworCQkJJG9wcyA9fiBzLyAvL2c7CisJCQkkcHRoID1+IHMvXFxcXC9cXC9nOworCQkJJHJlZiA9fiBzL1xcXFwvXFwvZzsKKwkJCXB1c2ggQHBhdGhfcnVsZXMsIFskb3BzLCAkcHRoLCAkcmVmLCAkb2xkXTsKKwkJfSBlbHNpZiAoL14oW0NEUlUgXSspXHMrZm9yXHMrKFteXHNdKykkLykgeworCQkJbXkgJG9wcyA9ICQxOworCQkJbXkgJHJlZiA9ICQyOworCQkJJG9wcyA9fiBzLyAvL2c7CisJCQkkcmVmID1+IHMvXFxcXC9cXC9nOworCQkJcHVzaCBAYWxsb3dfcnVsZXMsIFskb3BzLCAkcmVmXTsKKwkJfSBlbHNpZiAoL15mb3JccysoW15cc10rKSQvKSB7CisJCQkjIE1lbnRpb25lZCwgYnV0IG5vdGhpbmcgZ3JhbnRlZD8KKwkJfSBlbHNpZiAoL15bXlxzXSskLykgeworCQkJcy9cXFxcL1xcL2c7CisJCQlwdXNoIEBhbGxvd19ydWxlcywgWydVJywgJF9dOworCQl9CisJfQorfQorCitpZiAoJG9wIG5lICdEJykgeworCSRuZXdfdHlwZSA9IGdpdF92YWx1ZSgnY2F0LWZpbGUnLCctdCcsJG5ldyk7CisKKwlpZiAoJHJlZiA9fiBtLF5oZWFkcy8sKSB7CisJCWRlbnkgIiRyZWYgbXVzdCBiZSBhIGNvbW1pdC4iIHVubGVzcyAkbmV3X3R5cGUgZXEgJ2NvbW1pdCc7CisJfSBlbHNpZiAoJHJlZiA9fiBtLF50YWdzLywpIHsKKwkJZGVueSAiJHJlZiBtdXN0IGJlIGFuIGFubm90YXRlZCB0YWcuIiB1bmxlc3MgJG5ld190eXBlIGVxICd0YWcnOworCX0KKworCWNoZWNrX2NvbW1pdHRlcnMgKGFsbF9uZXdfY29tbWl0dGVycyk7CisJY2hlY2tfY29tbWl0dGVycyAoYWxsX25ld190YWdnZXJzKSBpZiAkbmV3X3R5cGUgZXEgJ3RhZyc7Cit9CisKK2luZm8gIiR0aGlzX3VzZXIgd2FudHMgJG9wIGZvciAkcmVmIjsKK2ZvcmVhY2ggbXkgJGFjbF9lbnRyeSAoQGFsbG93X3J1bGVzKSB7CisJbXkgKCRhY2xfb3BzLCAkYWNsX24pID0gQCRhY2xfZW50cnk7CisJbmV4dCB1bmxlc3MgJGFjbF9vcHMgPX4gL15bQ0RSVV0rJC87ICMgVWhoLi4uLiBzaG91bGRuJ3QgaGFwcGVuLgorCW5leHQgdW5sZXNzICRhY2xfbjsKKwluZXh0IHVubGVzcyAkb3AgPX4gL15bJGFjbF9vcHNdJC87CisJbmV4dCB1bmxlc3MgbWF0Y2hfc3RyaW5nICRhY2xfbiwgJHJlZjsKKworCSMgRG9uJ3QgdGVzdCBwYXRoIHJ1bGVzIG9uIGJyYW5jaCBkZWxldGVzLgorCSMKKwlncmFudCAiQWxsb3dlZCBieTogJGFjbF9vcHMgZm9yICRhY2xfbiIgaWYgJG9wIGVxICdEJzsKKworCSMgQWdncmVnYXRlIG1hdGNoaW5nIHBhdGggcnVsZXM7IGFsbG93IGlmIHRoZXJlIGFyZW4ndAorCSMgYW55IG1hdGNoaW5nIHRoaXMgcmVmLgorCSMKKwlteSAlcHI7CisJZm9yZWFjaCBteSAkcF9lbnRyeSAoQHBhdGhfcnVsZXMpIHsKKwkJbXkgKCRwX29wcywgJHBfbiwgJHBfcmVmLCAkcF9ic3QpID0gQCRwX2VudHJ5OworCQluZXh0IHVubGVzcyAkcF9yZWY7CisJCXB1c2ggQHskcHJ7JHBfYnN0fX0sICRwX2VudHJ5IGlmIG1hdGNoX3N0cmluZyAkcF9yZWYsICRyZWY7CisJfQorCWdyYW50ICJBbGxvd2VkIGJ5OiAkYWNsX29wcyBmb3IgJGFjbF9uIiB1bmxlc3MgJXByOworCisJIyBBbGxvdyBvbmx5IGlmIGFsbCBjaGFuZ2VzIGFnYWluc3QgYSBzaW5nbGUgYmFzZSBhcmUKKwkjIGFsbG93ZWQgYnkgZmlsZSBwYXRoIHJ1bGVzLgorCSMKKwlteSBAYmFkOworCWZvcmVhY2ggbXkgJHBfYnN0IChrZXlzICVwcikgeworCQlteSAkZGlmZl9yZWYgPSBsb2FkX2RpZmYgJHBfYnN0OworCQlkZW55ICJDYW5ub3QgZGlmZmVyZW5jZSB0cmVlcy4iIHVubGVzcyByZWYgJGRpZmZfcmVmOworCisJCW15ICVmZCA9ICUkZGlmZl9yZWY7CisJCWZvcmVhY2ggbXkgJHBfZW50cnkgKEB7JHByeyRwX2JzdH19KSB7CisJCQlteSAoJHBfb3BzLCAkcF9uLCAkcF9yZWYsICRwX2JzdCkgPSBAJHBfZW50cnk7CisJCQluZXh0IHVubGVzcyAkcF9vcHMgPX4gL15bQU1EXSskLzsKKwkJCW5leHQgdW5sZXNzICRwX247CisKKwkJCWZvcmVhY2ggbXkgJGZfbiAoa2V5cyAlZmQpIHsKKwkJCQlteSAkZl9vcCA9ICRmZHskZl9ufTsKKwkJCQluZXh0IHVubGVzcyAkZl9vcDsKKwkJCQluZXh0IHVubGVzcyAkZl9vcCA9fiAvXlskcF9vcHNdJC87CisJCQkJZGVsZXRlICRmZHskZl9ufSBpZiBtYXRjaF9zdHJpbmcgJHBfbiwgJGZfbjsKKwkJCX0KKwkJCWxhc3QgdW5sZXNzICVmZDsKKwkJfQorCisJCWlmICglZmQpIHsKKwkJCXB1c2ggQGJhZCwgWyRwX2JzdCwgXCVmZF07CisJCX0gZWxzZSB7CisJCQkjIEFsbCBjaGFuZ2VzIHJlbGF0aXZlIHRvICRwX2JzdCB3ZXJlIGFsbG93ZWQuCisJCQkjCisJCQlncmFudCAiQWxsb3dlZCBieTogJGFjbF9vcHMgZm9yICRhY2xfbiBkaWZmICRwX2JzdCI7CisJCX0KKwl9CisKKwlmb3JlYWNoIG15ICRiYWRfcmVmIChAYmFkKSB7CisJCW15ICgkcF9ic3QsICRmZCkgPSBAJGJhZF9yZWY7CisJCXByaW50IFNUREVSUiAiXG4iOworCQlwcmludCBTVERFUlIgIk5vdCBhbGxvd2VkIHRvIG1ha2UgdGhlIGZvbGxvd2luZyBjaGFuZ2VzOlxuIjsKKwkJcHJpbnQgU1RERVJSICIoYmFzZTogJHBfYnN0KVxuIjsKKwkJZm9yZWFjaCBteSAkZl9uIChzb3J0IGtleXMgJSRmZCkgeworCQkJcHJpbnQgU1RERVJSICIgICRmZC0+eyRmX259ICRmX25cbiI7CisJCX0KKwl9CisJZGVueSAiWW91IGFyZSBub3QgcGVybWl0dGVkIHRvICRvcCAkcmVmIjsKK30KK2Nsb3NlIEE7CitkZW55ICJZb3UgYXJlIG5vdCBwZXJtaXR0ZWQgdG8gJG9wICRyZWYiOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9sb25nLXJ1bm5pbmctZmlsdGVyL2V4YW1wbGUucGwgYi9jb250cmliL2xvbmctcnVubmluZy1maWx0ZXIvZXhhbXBsZS5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNjc3NTY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9sb25nLXJ1bm5pbmctZmlsdGVyL2V4YW1wbGUucGwKQEAgLTAsMCArMSwxMzIgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBFeGFtcGxlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgR2l0IGZpbHRlciBwcm90b2NvbCB2ZXJzaW9uIDIKKyMgU2VlIERvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQsIHNlY3Rpb24gIkZpbHRlciBQcm90b2NvbCIKKyMKKyMgUGxlYXNlIG5vdGUsIHRoaXMgcGFzcy10aHJ1IGZpbHRlciBpcyBhIG1pbmltYWwgc2tlbGV0b24uIE5vIHByb3BlcgorIyBlcnJvciBoYW5kbGluZyB3YXMgaW1wbGVtZW50ZWQuCisjCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK215ICRNQVhfUEFDS0VUX0NPTlRFTlRfU0laRSA9IDY1NTE2OworCitzdWIgcGFja2V0X2Jpbl9yZWFkIHsKKwlteSAkYnVmZmVyOworCW15ICRieXRlc19yZWFkID0gcmVhZCBTVERJTiwgJGJ1ZmZlciwgNDsKKwlpZiAoICRieXRlc19yZWFkID09IDAgKSB7CisKKwkJIyBFT0YgLSBHaXQgc3RvcHBlZCB0YWxraW5nIHRvIHVzIQorCQlleGl0KCk7CisJfQorCWVsc2lmICggJGJ5dGVzX3JlYWQgIT0gNCApIHsKKwkJZGllICJpbnZhbGlkIHBhY2tldDogJyRidWZmZXInIjsKKwl9CisJbXkgJHBrdF9zaXplID0gaGV4KCRidWZmZXIpOworCWlmICggJHBrdF9zaXplID09IDAgKSB7CisJCXJldHVybiAoIDEsICIiICk7CisJfQorCWVsc2lmICggJHBrdF9zaXplID4gNCApIHsKKwkJbXkgJGNvbnRlbnRfc2l6ZSA9ICRwa3Rfc2l6ZSAtIDQ7CisJCSRieXRlc19yZWFkID0gcmVhZCBTVERJTiwgJGJ1ZmZlciwgJGNvbnRlbnRfc2l6ZTsKKwkJaWYgKCAkYnl0ZXNfcmVhZCAhPSAkY29udGVudF9zaXplICkgeworCQkJZGllICJpbnZhbGlkIHBhY2tldCAoJGNvbnRlbnRfc2l6ZSBieXRlcyBleHBlY3RlZDsgJGJ5dGVzX3JlYWQgYnl0ZXMgcmVhZCkiOworCQl9CisJCXJldHVybiAoIDAsICRidWZmZXIgKTsKKwl9CisJZWxzZSB7CisJCWRpZSAiaW52YWxpZCBwYWNrZXQgc2l6ZTogJHBrdF9zaXplIjsKKwl9Cit9CisKK3N1YiBwYWNrZXRfdHh0X3JlYWQgeworCW15ICggJHJlcywgJGJ1ZiApID0gcGFja2V0X2Jpbl9yZWFkKCk7CisJdW5sZXNzICggJGJ1ZiA9fiBzL1xuJC8vICkgeworCQlkaWUgIkEgbm9uLWJpbmFyeSBsaW5lIE1VU1QgYmUgdGVybWluYXRlZCBieSBhbiBMRi4iOworCX0KKwlyZXR1cm4gKCAkcmVzLCAkYnVmICk7Cit9CisKK3N1YiBwYWNrZXRfYmluX3dyaXRlIHsKKwlteSAkYnVmID0gc2hpZnQ7CisJcHJpbnQgU1RET1VUIHNwcmludGYoICIlMDR4IiwgbGVuZ3RoKCRidWYpICsgNCApOworCXByaW50IFNURE9VVCAkYnVmOworCVNURE9VVC0+Zmx1c2goKTsKK30KKworc3ViIHBhY2tldF90eHRfd3JpdGUgeworCXBhY2tldF9iaW5fd3JpdGUoICRfWzBdIC4gIlxuIiApOworfQorCitzdWIgcGFja2V0X2ZsdXNoIHsKKwlwcmludCBTVERPVVQgc3ByaW50ZiggIiUwNHgiLCAwICk7CisJU1RET1VULT5mbHVzaCgpOworfQorCisoIHBhY2tldF90eHRfcmVhZCgpIGVxICggMCwgImdpdC1maWx0ZXItY2xpZW50IiApICkgfHwgZGllICJiYWQgaW5pdGlhbGl6ZSI7CisoIHBhY2tldF90eHRfcmVhZCgpIGVxICggMCwgInZlcnNpb249MiIgKSApICAgICAgICAgfHwgZGllICJiYWQgdmVyc2lvbiI7CisoIHBhY2tldF9iaW5fcmVhZCgpIGVxICggMSwgIiIgKSApICAgICAgICAgICAgICAgICAgfHwgZGllICJiYWQgdmVyc2lvbiBlbmQiOworCitwYWNrZXRfdHh0X3dyaXRlKCJnaXQtZmlsdGVyLXNlcnZlciIpOworcGFja2V0X3R4dF93cml0ZSgidmVyc2lvbj0yIik7CitwYWNrZXRfZmx1c2goKTsKKworKCBwYWNrZXRfdHh0X3JlYWQoKSBlcSAoIDAsICJjYXBhYmlsaXR5PWNsZWFuIiApICkgIHx8IGRpZSAiYmFkIGNhcGFiaWxpdHkiOworKCBwYWNrZXRfdHh0X3JlYWQoKSBlcSAoIDAsICJjYXBhYmlsaXR5PXNtdWRnZSIgKSApIHx8IGRpZSAiYmFkIGNhcGFiaWxpdHkiOworKCBwYWNrZXRfYmluX3JlYWQoKSBlcSAoIDEsICIiICkgKSAgICAgICAgICAgICAgICAgIHx8IGRpZSAiYmFkIGNhcGFiaWxpdHkgZW5kIjsKKworcGFja2V0X3R4dF93cml0ZSgiY2FwYWJpbGl0eT1jbGVhbiIpOworcGFja2V0X3R4dF93cml0ZSgiY2FwYWJpbGl0eT1zbXVkZ2UiKTsKK3BhY2tldF9mbHVzaCgpOworCit3aGlsZSAoMSkgeworCW15ICgkY29tbWFuZCkgID0gcGFja2V0X3R4dF9yZWFkKCkgPX4gL15jb21tYW5kPSguKykkLzsKKwlteSAoJHBhdGhuYW1lKSA9IHBhY2tldF90eHRfcmVhZCgpID1+IC9ecGF0aG5hbWU9KC4rKSQvOworCisJaWYgKCAkcGF0aG5hbWUgZXEgIiIgKSB7CisJCWRpZSAiYmFkIHBhdGhuYW1lICckcGF0aG5hbWUnIjsKKwl9CisKKwlwYWNrZXRfYmluX3JlYWQoKTsKKworCW15ICRpbnB1dCA9ICIiOworCXsKKwkJYmlubW9kZShTVERJTik7CisJCW15ICRidWZmZXI7CisJCW15ICRkb25lID0gMDsKKwkJd2hpbGUgKCAhJGRvbmUgKSB7CisJCQkoICRkb25lLCAkYnVmZmVyICkgPSBwYWNrZXRfYmluX3JlYWQoKTsKKwkJCSRpbnB1dCAuPSAkYnVmZmVyOworCQl9CisJfQorCisJbXkgJG91dHB1dDsKKwlpZiAoICRjb21tYW5kIGVxICJjbGVhbiIgKSB7CisJCSMjIyBQZXJmb3JtIGNsZWFuIGhlcmUgIyMjCisJCSRvdXRwdXQgPSAkaW5wdXQ7CisJfQorCWVsc2lmICggJGNvbW1hbmQgZXEgInNtdWRnZSIgKSB7CisJCSMjIyBQZXJmb3JtIHNtdWRnZSBoZXJlICMjIworCQkkb3V0cHV0ID0gJGlucHV0OworCX0KKwllbHNlIHsKKwkJZGllICJiYWQgY29tbWFuZCAnJGNvbW1hbmQnIjsKKwl9CisKKwlwYWNrZXRfdHh0X3dyaXRlKCJzdGF0dXM9c3VjY2VzcyIpOworCXBhY2tldF9mbHVzaCgpOworCXdoaWxlICggbGVuZ3RoKCRvdXRwdXQpID4gMCApIHsKKwkJbXkgJHBhY2tldCA9IHN1YnN0ciggJG91dHB1dCwgMCwgJE1BWF9QQUNLRVRfQ09OVEVOVF9TSVpFICk7CisJCXBhY2tldF9iaW5fd3JpdGUoJHBhY2tldCk7CisJCWlmICggbGVuZ3RoKCRvdXRwdXQpID4gJE1BWF9QQUNLRVRfQ09OVEVOVF9TSVpFICkgeworCQkJJG91dHB1dCA9IHN1YnN0ciggJG91dHB1dCwgJE1BWF9QQUNLRVRfQ09OVEVOVF9TSVpFICk7CisJCX0KKwkJZWxzZSB7CisJCQkkb3V0cHV0ID0gIiI7CisJCX0KKwl9CisJcGFja2V0X2ZsdXNoKCk7ICAgICMgZmx1c2ggY29udGVudCEKKwlwYWNrZXRfZmx1c2goKTsgICAgIyBlbXB0eSBsaXN0LCBrZWVwICJzdGF0dXM9c3VjY2VzcyIgdW5jaGFuZ2VkIQorCit9CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC8uZ2l0aWdub3JlIGIvY29udHJpYi9tdy10by1naXQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTU0NWIwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKK2dpdC1yZW1vdGUtbWVkaWF3aWtpCitnaXQtbXcKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0Ly5wZXJsY3JpdGljcmMgYi9jb250cmliL213LXRvLWdpdC8ucGVybGNyaXRpY3JjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MzMzMjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC8ucGVybGNyaXRpY3JjCkBAIC0wLDAgKzEsMjggQEAKKyMgVGhlc2UgMyBydWxlcyBkZW1hbmQgdG8gYWRkIHRoZSBzLCBtIGFuZCB4IGZsYWcgdG8gKmV2ZXJ5KiByZWdleHAuIFRoaXMgaXMKKyMgb3ZlcmtpbGwgYW5kIHdvdWxkIGJlIGhhcm1mdWwgZm9yIHJlYWRhYmlsaXR5LgorWy1SZWd1bGFyRXhwcmVzc2lvbnM6OlJlcXVpcmVFeHRlbmRlZEZvcm1hdHRpbmddCitbLVJlZ3VsYXJFeHByZXNzaW9uczo6UmVxdWlyZURvdE1hdGNoQW55dGhpbmddCitbLVJlZ3VsYXJFeHByZXNzaW9uczo6UmVxdWlyZUxpbmVCb3VuZGFyeU1hdGNoaW5nXQorCisjIFRoaXMgcnVsZSBzYXlzIHRoYXQgYnVpbHRpbiBmdW5jdGlvbnMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBwYXJlbnRoZXNlcworIyBlLmcuOiAodGFrZW4gZnJvbSBDUEFOJ3MgZG9jdW1lbnRhdGlvbikKKyMgb3BlbigkaGFuZGxlLCAnPicsICRmaWxlbmFtZSk7ICNub3Qgb2sKKyMgb3BlbiAkaGFuZGxlLCAnPicsICRmaWxlbmFtZTsgICNvaworIyBBcHBseWluZyBzdWNoIGEgcnVsZSB3b3VsZCBtZWFuIG1vZGlmeWluZyBhIGh1Z2UgbnVtYmVyIG9mIGxpbmVzIGZvciBhCisjIHF1ZXN0aW9uIG9mIHN0eWxlLgorWy1Db2RlTGF5b3V0OjpQcm9oaWJpdFBhcmVuc1dpdGhCdWlsdGluc10KKworIyBUaGlzIHJ1bGUgc3RhdGVzIHRoYXQgZWFjaCBzeXN0ZW0gY2FsbCBzaG91bGQgaGF2ZSBpdHMgcmV0dXJuIHZhbHVlIGNoZWNrZWQKKyMgVGhlIHByb2JsZW0gaXMgdGhhdCBpdCBpbmNsdWRlcyB0aGUgcHJpbnQgY2FsbC4gQ2hlY2tpbmcgZXZlcnkgcHJpbnQgY2FsbCdzCisjIHJldHVybiB2YWx1ZSB3b3VsZCBiZSBoYXJtZnVsIHRvIHRoZSBjb2RlIHJlYWRhYmlsaXR5LgorIyBUaGlzIGNvbmZpZ3VyYXRpb24ga2VlcHMgYWxsIGRlZmF1bHQgZnVuY3Rpb24gYnV0IHByaW50LgorW0lucHV0T3V0cHV0OjpSZXF1aXJlQ2hlY2tlZFN5c2NhbGxzXQorZnVuY3Rpb25zID0gb3BlbiBzYXkgY2xvc2UKKworIyBUaGlzIHJ1bGUgZGVtYW5kcyB0byBhZGQgYSBkZXBlbmRlbmN5IGZvciB0aGUgUmVhZG9ubHkgbW9kdWxlLiBUaGlzIGlzIG5vdAorIyB3aXNoZWQuCitbLVZhbHVlc0FuZEV4cHJlc3Npb25zOjpQcm9oaWJpdENvbnN0YW50UHJhZ21hXQorCisjIFRoaXMgcnVsZSBpcyBub3QgcmVhbGx5IHVzZWZ1bCAocmF0aGVyIGEgcXVlc3Rpb24gb2Ygc3R5bGUpIGFuZCBwcm9kdWNlcyBtYW55CisjIHdhcm5pbmdzIGFtb25nIHRoZSBjb2RlLgorWy1WYWx1ZXNBbmRFeHByZXNzaW9uczo6UHJvaGliaXROb2lzeVF1b3Rlc10KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L0dpdC9NZWRpYXdpa2kucG0gYi9jb250cmliL213LXRvLWdpdC9HaXQvTWVkaWF3aWtpLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxN2Q5ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC9HaXQvTWVkaWF3aWtpLnBtCkBAIC0wLDAgKzEsMTAxIEBACitwYWNrYWdlIEdpdDo6TWVkaWF3aWtpOworCit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIFBPU0lYOwordXNlIEdpdDsKKworQkVHSU4geworCitvdXIgKCRWRVJTSU9OLCBASVNBLCBARVhQT1JULCBARVhQT1JUX09LKTsKKworIyBUb3RhbGx5IHVuc3RhYmxlIEFQSS4KKyRWRVJTSU9OID0gJzAuMDEnOworCityZXF1aXJlIEV4cG9ydGVyOworCitASVNBID0gcXcoRXhwb3J0ZXIpOworCitARVhQT1JUID0gKCk7CisKKyMgTWV0aG9kcyB3aGljaCBjYW4gYmUgY2FsbGVkIGFzIHN0YW5kYWxvbmUgZnVuY3Rpb25zIGFzIHdlbGw6CitARVhQT1JUX09LID0gcXcoY2xlYW5fZmlsZW5hbWUgc211ZGdlX2ZpbGVuYW1lIGNvbm5lY3RfbWF5YmUKKwkJCQlFTVBUWSBIVFRQX0NPREVfT0sgSFRUUF9DT0RFX1BBR0VfTk9UX0ZPVU5EKTsKK30KKworIyBNZWRpYXdpa2kgZmlsZW5hbWVzIGNhbiBjb250YWluIGZvcndhcmQgc2xhc2hlcy4gVGhpcyB2YXJpYWJsZSBkZWNpZGVzIGJ5IHdoaWNoIHBhdHRlcm4gdGhleSBzaG91bGQgYmUgcmVwbGFjZWQKK3VzZSBjb25zdGFudCBTTEFTSF9SRVBMQUNFTUVOVCA9PiAnJTJGJzsKKworIyBVc2VkIHRvIHRlc3QgZm9yIGVtcHR5IHN0cmluZ3MKK3VzZSBjb25zdGFudCBFTVBUWSA9PiBxe307CisKKyMgSFRUUCBjb2RlcwordXNlIGNvbnN0YW50IEhUVFBfQ09ERV9PSyA9PiAyMDA7Cit1c2UgY29uc3RhbnQgSFRUUF9DT0RFX1BBR0VfTk9UX0ZPVU5EID0+IDQwNDsKKworc3ViIGNsZWFuX2ZpbGVuYW1lIHsKKwlteSAkZmlsZW5hbWUgPSBzaGlmdDsKKwkkZmlsZW5hbWUgPX4gc3tAe1tTTEFTSF9SRVBMQUNFTUVOVF19fXsvfWc7CisJIyBbLCBdLCB8LCB7LCBhbmQgfSBhcmUgZm9yYmlkZGVuIGJ5IE1lZGlhV2lraSwgZXZlbiBVUkwtZW5jb2RlZC4KKwkjIERvIGEgdmFyaWFudCBvZiBVUkwtZW5jb2RpbmcsIGkuZS4gbG9va3MgbGlrZSBVUkwtZW5jb2RpbmcsCisJIyBidXQgd2l0aCBfIGFkZGVkIHRvIHByZXZlbnQgTWVkaWFXaWtpIGZyb20gdGhpbmtpbmcgdGhpcyBpcworCSMgYW4gYWN0dWFsIHNwZWNpYWwgY2hhcmFjdGVyLgorCSRmaWxlbmFtZSA9fiBzL1tcW1xdXHtcfVx8XS9zcHJpbnRmKCJfJSVfJXgiLCBvcmQoJCYpKS9nZTsKKwkjIElmIHdlIHVzZSB0aGUgdXJpIGVzY2FwZSBiZWZvcmUKKwkjIHdlIHNob3VsZCB1bmVzY2FwZSBoZXJlLCBiZWZvcmUgYW55dGhpbmcKKworCXJldHVybiAkZmlsZW5hbWU7Cit9CisKK3N1YiBzbXVkZ2VfZmlsZW5hbWUgeworCW15ICRmaWxlbmFtZSA9IHNoaWZ0OworCSRmaWxlbmFtZSA9fiBzey99e0B7W1NMQVNIX1JFUExBQ0VNRU5UXX19ZzsKKwkkZmlsZW5hbWUgPX4gcy8gL18vZzsKKwkjIERlY29kZSBmb3JiaWRkZW4gY2hhcmFjdGVycyBlbmNvZGVkIGluIGNsZWFuX2ZpbGVuYW1lCisJJGZpbGVuYW1lID1+IHMvXyVfKFswLTlhLWZBLUZdWzAtOWEtZkEtRl0pL3NwcmludGYoJyVjJywgaGV4KCQxKSkvZ2U7CisJcmV0dXJuIHN1YnN0cigkZmlsZW5hbWUsIDAsIE5BTUVfTUFYLWxlbmd0aCgnLm13JykpOworfQorCitzdWIgY29ubmVjdF9tYXliZSB7CisJbXkgJHdpa2kgPSBzaGlmdDsKKwlpZiAoJHdpa2kpIHsKKwkJcmV0dXJuICR3aWtpOworCX0KKworCW15ICRyZW1vdGVfbmFtZSA9IHNoaWZ0OworCW15ICRyZW1vdGVfdXJsID0gc2hpZnQ7CisJbXkgKCR3aWtpX2xvZ2luLCAkd2lraV9wYXNzd29yZCwgJHdpa2lfZG9tYWluKTsKKworCSR3aWtpX2xvZ2luID0gR2l0Ojpjb25maWcoInJlbW90ZS4ke3JlbW90ZV9uYW1lfS5td0xvZ2luIik7CisJJHdpa2lfcGFzc3dvcmQgPSBHaXQ6OmNvbmZpZygicmVtb3RlLiR7cmVtb3RlX25hbWV9Lm13UGFzc3dvcmQiKTsKKwkkd2lraV9kb21haW4gPSBHaXQ6OmNvbmZpZygicmVtb3RlLiR7cmVtb3RlX25hbWV9Lm13RG9tYWluIik7CisKKwkkd2lraSA9IE1lZGlhV2lraTo6QVBJLT5uZXc7CisJJHdpa2ktPntjb25maWd9LT57YXBpX3VybH0gPSAiJHtyZW1vdGVfdXJsfS9hcGkucGhwIjsKKwlpZiAoJHdpa2lfbG9naW4pIHsKKwkJbXkgJWNyZWRlbnRpYWwgPSAoCisJCQkndXJsJyA9PiAkcmVtb3RlX3VybCwKKwkJCSd1c2VybmFtZScgPT4gJHdpa2lfbG9naW4sCisJCQkncGFzc3dvcmQnID0+ICR3aWtpX3Bhc3N3b3JkCisJCSk7CisJCUdpdDo6Y3JlZGVudGlhbChcJWNyZWRlbnRpYWwpOworCQlteSAkcmVxdWVzdCA9IHtsZ25hbWUgPT4gJGNyZWRlbnRpYWx7dXNlcm5hbWV9LAorCQkJICAgICAgIGxncGFzc3dvcmQgPT4gJGNyZWRlbnRpYWx7cGFzc3dvcmR9LAorCQkJICAgICAgIGxnZG9tYWluID0+ICR3aWtpX2RvbWFpbn07CisJCWlmICgkd2lraS0+bG9naW4oJHJlcXVlc3QpKSB7CisJCQlHaXQ6OmNyZWRlbnRpYWwoXCVjcmVkZW50aWFsLCAnYXBwcm92ZScpOworCQkJcHJpbnQgeypTVERFUlJ9IHFxKExvZ2dlZCBpbiBtZWRpYXdpa2kgdXNlciAiJGNyZWRlbnRpYWx7dXNlcm5hbWV9Ii5cbik7CisJCX0gZWxzZSB7CisJCQlwcmludCB7KlNUREVSUn0gcXEoRmFpbGVkIHRvIGxvZyBpbiBtZWRpYXdpa2kgdXNlciAiJGNyZWRlbnRpYWx7dXNlcm5hbWV9IiBvbiAke3JlbW90ZV91cmx9XG4pOworCQkJcHJpbnQgeypTVERFUlJ9ICcgIChlcnJvciAnIC4KKwkJCQkkd2lraS0+e2Vycm9yfS0+e2NvZGV9IC4gJzogJyAuCisJCQkJJHdpa2ktPntlcnJvcn0tPntkZXRhaWxzfSAuICIpXG4iOworCQkJR2l0OjpjcmVkZW50aWFsKFwlY3JlZGVudGlhbCwgJ3JlamVjdCcpOworCQkJZXhpdCAxOworCQl9CisJfQorCisJcmV0dXJuICR3aWtpOworfQorCisxOyAjIEZhbW91cyBsYXN0IHdvcmRzCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC9NYWtlZmlsZSBiL2NvbnRyaWIvbXctdG8tZ2l0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNjAzNTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC9NYWtlZmlsZQpAQCAtMCwwICsxLDU4IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMworIyAgICAgTWF0dGhpZXUgTW95IDxNYXR0aGlldS5Nb3lAaW1hZy5mcj4KKyMKKyMgVG8gYnVpbGQgYW5kIHRlc3Q6CisjCisjICAgbWFrZQorIyAgIGJpbi13cmFwcGVyL2dpdCBtdyBwcmV2aWV3IFNvbWVfcGFnZS5tdworIyAgIGJpbi13cmFwcGVyL2dpdCBjbG9uZSBtZWRpYXdpa2k6Omh0dHA6Ly9leGFtcGxlLmNvbS93aWtpLworIworIyBUbyBpbnN0YWxsLCBydW4gR2l0J3MgdG9wbGV2ZWwgJ21ha2UgaW5zdGFsbCcgdGhlbiBydW46CisjCisjICAgbWFrZSBpbnN0YWxsCisKK0dJVF9NRURJQVdJS0lfUE09R2l0L01lZGlhd2lraS5wbQorU0NSSVBUX1BFUkw9Z2l0LXJlbW90ZS1tZWRpYXdpa2kucGVybAorU0NSSVBUX1BFUkwrPWdpdC1tdy5wZXJsCitHSVRfUk9PVF9ESVI9Li4vLi4KK0hFUkU9Y29udHJpYi9tdy10by1naXQvCisKK0lOU1RBTEwgPSBpbnN0YWxsCisKK1NDUklQVF9QRVJMX0ZVTEw9JChwYXRzdWJzdCAlLCQoSEVSRSkvJSwkKFNDUklQVF9QRVJMKSkKK0lOU1RMSUJESVI9JChzaGVsbCAkKE1BS0UpIC1DICQoR0lUX1JPT1RfRElSKS8gXAorICAgICAgICAgICAgICAgIC1zIC0tbm8tcHJpbnQtZGlyZWN0b3J5IHByZWZpeD0kKHByZWZpeCkgXAorICAgICAgICAgICAgICAgIHBlcmxsaWJkaXI9JChwZXJsbGliZGlyKSBwZXJsbGliZGlyKQorREVTVERJUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVTVERJUikpCitJTlNUTElCRElSX1NRID0gJChzdWJzdCAnLCdcJycsJChJTlNUTElCRElSKSkKKworYWxsOiBidWlsZAorCit0ZXN0OiBhbGwKKwkkKE1BS0UpIC1DIHQKKworY2hlY2s6IHBlcmxjcml0aWMgdGVzdAorCitpbnN0YWxsX3BtOgorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChJTlNUTElCRElSX1NRKS9HaXQnCisJJChJTlNUQUxMKSAtbSA2NDQgJChHSVRfTUVESUFXSUtJX1BNKSBcCisJCSckKERFU1RESVJfU1EpJChJTlNUTElCRElSX1NRKS8kKEdJVF9NRURJQVdJS0lfUE0pJworCitidWlsZDoKKwkkKE1BS0UpIC1DICQoR0lUX1JPT1RfRElSKSBTQ1JJUFRfUEVSTD0iJChTQ1JJUFRfUEVSTF9GVUxMKSIgXAorICAgICAgICAgICAgICAgIGJ1aWxkLXBlcmwtc2NyaXB0CisKK2luc3RhbGw6IGluc3RhbGxfcG0KKwkkKE1BS0UpIC1DICQoR0lUX1JPT1RfRElSKSBTQ1JJUFRfUEVSTD0iJChTQ1JJUFRfUEVSTF9GVUxMKSIgXAorICAgICAgICAgICAgICAgIGluc3RhbGwtcGVybC1zY3JpcHQKKworY2xlYW46CisJJChNQUtFKSAtQyAkKEdJVF9ST09UX0RJUikgU0NSSVBUX1BFUkw9IiQoU0NSSVBUX1BFUkxfRlVMTCkiIFwKKyAgICAgICAgICAgICAgICBjbGVhbi1wZXJsLXNjcmlwdAorCitwZXJsY3JpdGljOgorCXBlcmxjcml0aWMgLTUgJChTQ1JJUFRfUEVSTCkKKwktcGVybGNyaXRpYyAtMiAkKFNDUklQVF9QRVJMKQorCisuUEhPTlk6IGFsbCB0ZXN0IGNoZWNrIGluc3RhbGxfcG0gaW5zdGFsbCBjbGVhbiBwZXJsY3JpdGljCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC9iaW4td3JhcHBlci9naXQgYi9jb250cmliL213LXRvLWdpdC9iaW4td3JhcHBlci9naXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjY2M2FlNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L2Jpbi13cmFwcGVyL2dpdApAQCAtMCwwICsxLDE0IEBACisjIS9iaW4vc2gKKworIyBnaXQgZXhlY3V0YWJsZSB3cmFwcGVyIHNjcmlwdCBmb3IgR2l0LU1lZGlhd2lraSB0byBydW4gdGVzdHMgd2l0aG91dAorIyBpbnN0YWxsaW5nIGFsbCB0aGUgc2NyaXB0cyBhbmQgcGVybCBwYWNrYWdlcy4KKworR0lUX1JPT1RfRElSPS4uLy4uLy4uCitHSVRfRVhFQ19QQVRIPSQoY2QgIiQoZGlybmFtZSAiJDAiKSIgJiYgY2QgJHtHSVRfUk9PVF9ESVJ9ICYmIHB3ZCkKKworR0lUUEVSTExJQj0iJEdJVF9FWEVDX1BBVEgiJy9jb250cmliL213LXRvLWdpdCciJHtHSVRQRVJMTElCOis6JEdJVFBFUkxMSUJ9IgorUEFUSD0iJEdJVF9FWEVDX1BBVEgiJy9jb250cmliL213LXRvLWdpdDonIiRQQVRIIgorCitleHBvcnQgR0lUUEVSTExJQiBQQVRICisKK2V4ZWMgIiR7R0lUX0VYRUNfUEFUSH0vYmluLXdyYXBwZXJzL2dpdCIgIiRAIgpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvZ2l0LW13LnBlcmwgYi9jb250cmliL213LXRvLWdpdC9naXQtbXcucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOGRmM2VlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvZ2l0LW13LnBlcmwKQEAgLTAsMCArMSwzNjggQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIENvcHlyaWdodCAoQykgMjAxMworIyAgICAgQmVub2l0IFBlcnNvbiA8YmVub2l0LnBlcnNvbkBlbnNpbWFnLmltYWcuZnI+CisjICAgICBDZWxlc3RpbiBNYXR0ZSA8Y2VsZXN0aW4ubWF0dGVAZW5zaW1hZy5pbWFnLmZyPgorIyBMaWNlbnNlOiBHUEwgdjIgb3IgbGF0ZXIKKworIyBTZXQgb2YgdG9vbHMgZm9yIGdpdCByZXBvIHdpdGggYSBtZWRpYXdpa2kgcmVtb3RlLgorIyBEb2N1bWVudGF0aW9uICYgYnVndHJhY2tlcjogaHR0cHM6Ly9naXRodWIuY29tL21veS9HaXQtTWVkaWF3aWtpLworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgR2V0b3B0OjpMb25nOwordXNlIFVSSTo6VVJMIHF3KHVybCk7Cit1c2UgTFdQOjpVc2VyQWdlbnQ7Cit1c2UgSFRNTDo6VHJlZUJ1aWxkZXI7CisKK3VzZSBHaXQ7Cit1c2UgTWVkaWFXaWtpOjpBUEk7Cit1c2UgR2l0OjpNZWRpYXdpa2kgcXcoY2xlYW5fZmlsZW5hbWUgY29ubmVjdF9tYXliZQorCQkJCQlFTVBUWSBIVFRQX0NPREVfUEFHRV9OT1RfRk9VTkQpOworCisjIEJ5IGRlZmF1bHQsIHVzZSBVVEYtOCB0byBjb21tdW5pY2F0ZSB3aXRoIEdpdCBhbmQgdGhlIHVzZXIKK2Jpbm1vZGUgU1RERVJSLCAnOmVuY29kaW5nKFVURi04KSc7CitiaW5tb2RlIFNURE9VVCwgJzplbmNvZGluZyhVVEYtOCknOworCisjIEdsb2JhbCBwYXJhbWV0ZXJzCitteSAkdmVyYm9zZSA9IDA7CitzdWIgdl9wcmludCB7CisJaWYgKCR2ZXJib3NlKSB7CisJCXJldHVybiBwcmludCB7KlNUREVSUn0gQF87CisJfQorCXJldHVybjsKK30KKworIyBQcmV2aWV3IHBhcmFtZXRlcnMKK215ICRmaWxlX25hbWUgPSBFTVBUWTsKK215ICRyZW1vdGVfbmFtZSA9IEVNUFRZOworbXkgJHByZXZpZXdfZmlsZV9uYW1lID0gRU1QVFk7CitteSAkYXV0b2xvYWQgPSAwOworc3ViIGZpbGUgeworCSRmaWxlX25hbWUgPSBzaGlmdDsKKwlyZXR1cm4gJGZpbGVfbmFtZTsKK30KKworbXkgJWNvbW1hbmRzID0gKAorCSdoZWxwJyA9PgorCQlbXCZoZWxwLCB7fSwgXCZoZWxwXSwKKwkncHJldmlldycgPT4KKwkJW1wmcHJldmlldywgeworCQkJJzw+JyA9PiBcJmZpbGUsCisJCQknb3V0cHV0fG89cycgPT4gXCRwcmV2aWV3X2ZpbGVfbmFtZSwKKwkJCSdyZW1vdGV8cj1zJyA9PiBcJHJlbW90ZV9uYW1lLAorCQkJJ2F1dG9sb2FkfGEnID0+IFwkYXV0b2xvYWQKKwkJfSwgXCZwcmV2aWV3X2hlbHBdCispOworCisjIFNlYXJjaCBmb3Igc3ViLWNvbW1hbmQKK215ICRjbWQgPSAkY29tbWFuZHN7J2hlbHAnfTsKK2ZvciAoMC4uQEFSR1YtMSkgeworCWlmIChkZWZpbmVkICRjb21tYW5kc3skQVJHVlskX119KSB7CisJCSRjbWQgPSAkY29tbWFuZHN7JEFSR1ZbJF9dfTsKKwkJc3BsaWNlIEBBUkdWLCAkXywgMTsKKwkJbGFzdDsKKwl9Cit9OworR2V0T3B0aW9ucyggJXskY21kLT5bMV19LAorCSdoZWxwfGgnID0+IFwmeyRjbWQtPlsyXX0sCisJJ3ZlcmJvc2V8dicgID0+IFwkdmVyYm9zZSk7CisKKyMgTGF1bmNoIGNvbW1hbmQKKyZ7JGNtZC0+WzBdfTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUHJldmlldyBGdW5jdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc3ViIHByZXZpZXdfaGVscCB7CisJcHJpbnQgeypTVERPVVR9IDw8J0VORCc7CitVU0FHRTogZ2l0IG13IHByZXZpZXcgWy0tcmVtb3RlfC1yIDxyZW1vdGUgbmFtZT5dIFstLWF1dG9sb2FkfC1hXQorICAgICAgICAgICAgICAgICAgICAgIFstLW91dHB1dHwtbyA8b3V0cHV0IGZpbGVuYW1lPl0gWy0tdmVyYm9zZXwtdl0KKyAgICAgICAgICAgICAgICAgICAgICA8YmxvYj4gfCA8ZmlsZW5hbWU+CisKK0RFU0NSSVBUSU9OOgorUHJldmlldyBpcyBhbiB1dGlsaXkgdG8gcHJldmlldyBsb2NhbCBjb250ZW50IG9mIGEgbWVkaWF3aWtpIHJlcG8gYXMgaWYgaXQgd2FzCitwdXNoZWQgb24gdGhlIHJlbW90ZS4KKworRm9yIHRoYXQsIHByZXZpZXcgc2VhcmNoZXMgZm9yIHRoZSByZW1vdGUgbmFtZSBvZiB0aGUgY3VycmVudCBicmFuY2gncwordXBzdHJlYW0gaWYgLS1yZW1vdGUgaXMgbm90IHNldC4gSWYgdGhhdCByZW1vdGUgaXMgbm90IGZvdW5kIG9yIGlmIGl0CitpcyBub3QgYSBtZWRpYXdpa2ksIGl0IGxpc3RzIGFsbCBtZWRpYXdpa2kgcmVtb3RlcyBjb25maWd1cmVkIGFuZCBhc2tzCit5b3UgdG8gcmVwbGF5IHlvdXIgY29tbWFuZCB3aXRoIHRoZSAtLXJlbW90ZSBvcHRpb24gc2V0IHByb3Blcmx5LgorCitUaGVuLCBpdCBzZWFyY2hlcyBmb3IgYSBmaWxlIG5hbWVkICdmaWxlbmFtZScuIElmIGl0J3Mgbm90IGZvdW5kIGluCit0aGUgY3VycmVudCBkaXIsIGl0IHdpbGwgYXNzdW1lIGl0J3MgYSBibG9iLgorCitUaGUgY29udGVudCByZXRyaWV2ZWQgaW4gdGhlIGZpbGUgKG9yIGluIHRoZSBibG9iKSB3aWxsIHRoZW4gYmUgcGFyc2VkCitieSB0aGUgcmVtb3RlIG1lZGlhd2lraSBhbmQgY29tYmluZWQgd2l0aCBhIHRlbXBsYXRlIHJldHJpZXZlZCBmcm9tCit0aGUgbWVkaWF3aWtpLgorCitGaW5hbGx5LCBwcmV2aWV3IHdpbGwgc2F2ZSB0aGUgSFRNTCByZXN1bHQgaW4gYSBmaWxlLiBhbmQgYXV0b2xvYWQgaXQKK2luIHlvdXIgZGVmYXVsdCB3ZWIgYnJvd3NlciBpZiB0aGUgb3B0aW9uIC0tYXV0b2xvYWQgaXMgcHJlc2VudC4KKworT1BUSU9OUzoKKyAgICAtciA8cmVtb3RlIG5hbWU+LCAtLXJlbW90ZSA8cmVtb3RlIG5hbWU+CisgICAgICAgIElmIHRoZSByZW1vdGUgaXMgYSBtZWRpYXdpa2ksIHRoZSB0ZW1wbGF0ZSBhbmQgdGhlIHBhcnNlIGVuZ2luZQorICAgICAgICB1c2VkIGZvciB0aGUgcHJldmlldyB3aWxsIGJlIHRob3NlIG9mIHRoYXQgcmVtb3RlLgorICAgICAgICBJZiBub3QsIGEgbGlzdCBvZiB2YWxpZCByZW1vdGVzIHdpbGwgYmUgc2hvd24uCisKKyAgICAtYSwgLS1hdXRvbG9hZAorICAgICAgICBUcnkgdG8gbG9hZCB0aGUgSFRNTCBvdXRwdXQgaW4gYSBuZXcgdGFiIChvciBuZXcgd2luZG93KSBvZiB5b3VyCisgICAgICAgIGRlZmF1bHQgd2ViIGJyb3dzZXIuCisKKyAgICAtbyA8b3V0cHV0IGZpbGVuYW1lPiwgLS1vdXRwdXQgPG91dHB1dCBmaWxlbmFtZT4KKyAgICAgICAgQ2hhbmdlIHRoZSBIVE1MIG91dHB1dCBmaWxlbmFtZS4gRGVmYXVsdCBmaWxlbmFtZSBpcyBiYXNlZCBvbiB0aGUKKyAgICAgICAgaW5wdXQgZmlsZW5hbWUgd2l0aCBpdHMgZXh0ZW5zaW9uIHJlcGxhY2VkIGJ5ICcuaHRtbCcuCisKKyAgICAtdiwgLS12ZXJib3NlCisgICAgICAgIFNob3cgbW9yZSBpbmZvcm1hdGlvbiBvbiB3aGF0J3MgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuCitFTkQKKwlleGl0OworfQorCitzdWIgcHJldmlldyB7CisJbXkgJHdpa2k7CisJbXkgKCRyZW1vdGVfdXJsLCAkd2lraV9wYWdlX25hbWUpOworCW15ICgkbmV3X2NvbnRlbnQsICR0ZW1wbGF0ZSk7CisJbXkgJGZpbGVfY29udGVudDsKKworCWlmICgkZmlsZV9uYW1lIGVxIEVNUFRZKSB7CisJCWRpZSAiTWlzc2luZyBmaWxlIGFyZ3VtZW50LCBzZWUgYGdpdCBtdyBoZWxwYFxuIjsKKwl9CisKKwl2X3ByaW50KCIjIyMgU2VsZWN0aW5nIHJlbW90ZVxuIik7CisJaWYgKCRyZW1vdGVfbmFtZSBlcSBFTVBUWSkgeworCQkkcmVtb3RlX25hbWUgPSBmaW5kX3Vwc3RyZWFtX3JlbW90ZV9uYW1lKCk7CisJCWlmICgkcmVtb3RlX25hbWUpIHsKKwkJCSRyZW1vdGVfdXJsID0gbWVkaWF3aWtpX3JlbW90ZV91cmxfbWF5YmUoJHJlbW90ZV9uYW1lKTsKKwkJfQorCisJCWlmICghICRyZW1vdGVfdXJsKSB7CisJCQlteSBAdmFsaWRfcmVtb3RlcyA9IGZpbmRfbWVkaWF3aWtpX3JlbW90ZXMoKTsKKworCQkJaWYgKCQjdmFsaWRfcmVtb3RlcyA9PSAwKSB7CisJCQkJcHJpbnQgeypTVERFUlJ9ICJObyBtZWRpYXdpa2kgcmVtb3RlIGluIHRoaXMgcmVwby4gXG4iOworCQkJCWV4aXQgMTsKKwkJCX0gZWxzZSB7CisJCQkJbXkgJHJlbW90ZXNfbGlzdCA9IGpvaW4oIlxuXHQiLCBAdmFsaWRfcmVtb3Rlcyk7CisJCQkJcHJpbnQgeypTVERFUlJ9IDw8Ik1FU1NBR0UiOworVGhlcmUgYXJlIG11bHRpcGxlIG1lZGlhd2lraSByZW1vdGVzLCB3aGljaCBvZjoKKwkke3JlbW90ZXNfbGlzdH0KK2RvIHlvdSB3YW50ID8gVXNlIHRoZSAtciBvcHRpb24gdG8gc3BlY2lmeSB0aGUgcmVtb3RlLgorTUVTU0FHRQorCQkJfQorCisJCQlleGl0IDE7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIWlzX3ZhbGlkX3JlbW90ZSgkcmVtb3RlX25hbWUpKSB7CisJCQlkaWUgIiR7cmVtb3RlX25hbWV9IGlzIG5vdCBhIHJlbW90ZVxuIjsKKwkJfQorCisJCSRyZW1vdGVfdXJsID0gbWVkaWF3aWtpX3JlbW90ZV91cmxfbWF5YmUoJHJlbW90ZV9uYW1lKTsKKwkJaWYgKCEgJHJlbW90ZV91cmwpIHsKKwkJCWRpZSAiJHtyZW1vdGVfbmFtZX0gaXMgbm90IGEgbWVkaWF3aWtpIHJlbW90ZVxuIjsKKwkJfQorCX0KKwl2X3ByaW50KCJzZWxlY3RlZCByZW1vdGU6XG5cdG5hbWU6ICR7cmVtb3RlX25hbWV9XG5cdHVybDogJHtyZW1vdGVfdXJsfVxuIik7CisKKwkkd2lraSA9IGNvbm5lY3RfbWF5YmUoJHdpa2ksICRyZW1vdGVfbmFtZSwgJHJlbW90ZV91cmwpOworCisJIyBSZWFkIGZpbGUgY29udGVudAorCWlmICghIC1lICRmaWxlX25hbWUpIHsKKwkJJGZpbGVfY29udGVudCA9IGdpdF9jbWRfdHJ5IHsKKwkJCUdpdDo6Y29tbWFuZCgnY2F0LWZpbGUnLCAnYmxvYicsICRmaWxlX25hbWUpOyB9CisJCQkiJXMgZmFpbGVkIHcvIGNvZGUgJWQiOworCisJCWlmICgkZmlsZV9uYW1lID1+IC8oLispOiguKykvKSB7CisJCQkkZmlsZV9uYW1lID0gJDI7CisJCX0KKwl9IGVsc2UgeworCQlvcGVuIG15ICRyZWFkX2ZoLCAiPCIsICRmaWxlX25hbWUKKwkJCW9yIGRpZSAiY291bGQgbm90IG9wZW4gJHtmaWxlX25hbWV9OiAkIVxuIjsKKwkJJGZpbGVfY29udGVudCA9IGRvIHsgbG9jYWwgJC8gPSB1bmRlZjsgPCRyZWFkX2ZoPiB9OworCQljbG9zZSAkcmVhZF9maAorCQkJb3IgZGllICJ1bmFibGUgdG8gY2xvc2U6ICQhXG4iOworCX0KKworCXZfcHJpbnQoIiMjIyBSZXRyaWV2aW5nIHRlbXBsYXRlXG4iKTsKKwkoJHdpa2lfcGFnZV9uYW1lID0gY2xlYW5fZmlsZW5hbWUoJGZpbGVfbmFtZSkpID1+IHMvXC5bXi5dKyQvLzsKKwkkdGVtcGxhdGUgPSBnZXRfdGVtcGxhdGUoJHJlbW90ZV91cmwsICR3aWtpX3BhZ2VfbmFtZSk7CisKKwl2X3ByaW50KCIjIyMgUGFyc2luZyBsb2NhbCBjb250ZW50XG4iKTsKKwkkbmV3X2NvbnRlbnQgPSAkd2lraS0+YXBpKHsKKwkJYWN0aW9uID0+ICdwYXJzZScsCisJCXRleHQgPT4gJGZpbGVfY29udGVudCwKKwkJdGl0bGUgPT4gJHdpa2lfcGFnZV9uYW1lCisJfSwgeworCQlza2lwX2VuY29kaW5nID0+IDEKKwl9KSBvciBkaWUgIk5vIHJlc3BvbnNlIGZyb20gcmVtb3RlIG1lZGlhd2lraVxuIjsKKwkkbmV3X2NvbnRlbnQgPSAkbmV3X2NvbnRlbnQtPnsncGFyc2UnfS0+eyd0ZXh0J30tPnsnKid9OworCisJdl9wcmludCgiIyMjIE1lcmdpbmcgY29udGVudHNcbiIpOworCWlmICgkcHJldmlld19maWxlX25hbWUgZXEgRU1QVFkpIHsKKwkJKCRwcmV2aWV3X2ZpbGVfbmFtZSA9ICRmaWxlX25hbWUpID1+IHMvXC5bXi5dKyQvLmh0bWwvOworCX0KKwlvcGVuKG15ICRzYXZlX2ZoLCAnPjplbmNvZGluZyhVVEYtOCknLCAkcHJldmlld19maWxlX25hbWUpCisJCW9yIGRpZSAiQ291bGQgbm90IG9wZW46ICQhXG4iOworCXByaW50IHskc2F2ZV9maH0gbWVyZ2VfY29udGVudHMoJHRlbXBsYXRlLCAkbmV3X2NvbnRlbnQsICRyZW1vdGVfdXJsKTsKKwljbG9zZSgkc2F2ZV9maCkKKwkJb3IgZGllICJDb3VsZCBub3QgY2xvc2U6ICQhXG4iOworCisJdl9wcmludCgiIyMjIFJlc3VsdHNcbiIpOworCWlmICgkYXV0b2xvYWQpIHsKKwkJdl9wcmludCgiTGF1bmNoaW5nIGJyb3dzZXIgdy8gZmlsZTogJHtwcmV2aWV3X2ZpbGVfbmFtZX0iKTsKKwkJc3lzdGVtKCdnaXQnLCAnd2ViLS1icm93c2UnLCAkcHJldmlld19maWxlX25hbWUpOworCX0gZWxzZSB7CisJCXByaW50IHsqU1RERVJSfSAiUHJldmlldyBmaWxlIHNhdmVkIGFzOiAke3ByZXZpZXdfZmlsZV9uYW1lfVxuIjsKKwl9CisKKwlleGl0OworfQorCisjIHVzZXMgZ2xvYmFsIHNjb3BlIHZhcmlhYmxlOiAkcmVtb3RlX25hbWUKK3N1YiBtZXJnZV9jb250ZW50cyB7CisJbXkgJHRlbXBsYXRlID0gc2hpZnQ7CisJbXkgJGNvbnRlbnQgPSBzaGlmdDsKKwlteSAkcmVtb3RlX3VybCA9IHNoaWZ0OworCW15ICgkY29udGVudF90cmVlLCAkaHRtbF90cmVlLCAkbXdfY29udGVudF90ZXh0KTsKKwlteSAkdGVtcGxhdGVfY29udGVudF9pZCA9ICdib2R5Q29udGVudCc7CisKKwkkaHRtbF90cmVlID0gSFRNTDo6VHJlZUJ1aWxkZXItPm5ldzsKKwkkaHRtbF90cmVlLT5wYXJzZSgkdGVtcGxhdGUpOworCisJJGNvbnRlbnRfdHJlZSA9IEhUTUw6OlRyZWVCdWlsZGVyLT5uZXc7CisJJGNvbnRlbnRfdHJlZS0+cGFyc2UoJGNvbnRlbnQpOworCisJJHRlbXBsYXRlX2NvbnRlbnRfaWQgPSBHaXQ6OmNvbmZpZygicmVtb3RlLiR7cmVtb3RlX25hbWV9Lm13SURjb250ZW50IikKKwkJfHwgJHRlbXBsYXRlX2NvbnRlbnRfaWQ7CisJdl9wcmludCgiVXNpbmcgJyR7dGVtcGxhdGVfY29udGVudF9pZH0nIGFzIHRoZSBjb250ZW50IElEXG4iKTsKKworCSRtd19jb250ZW50X3RleHQgPSAkaHRtbF90cmVlLT5sb29rX2Rvd24oJ2lkJywgJHRlbXBsYXRlX2NvbnRlbnRfaWQpOworCWlmICghZGVmaW5lZCAkbXdfY29udGVudF90ZXh0KSB7CisJCXByaW50IHsqU1RERVJSfSA8PCJDT05GSUciOworQ291bGQgbm90IGNvbWJpbmUgdGhlIG5ldyBjb250ZW50IHdpdGggdGhlIHRlbXBsYXRlLiBZb3UgbWlnaHQgd2FudCB0bworY29uZmlndXJlIGBtZWRpYXdpa2kuSURDb250ZW50YCBpbiB5b3VyIGNvbmZpZzoKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS4ke3JlbW90ZV9uYW1lfS5td0lEY29udGVudCA8aWQ+CithbmQgcmUtcnVuIHRoZSBjb21tYW5kIGFmdGVyd2FyZC4KK0NPTkZJRworCQlleGl0IDE7CisJfQorCSRtd19jb250ZW50X3RleHQtPmRlbGV0ZV9jb250ZW50KCk7CisJJG13X2NvbnRlbnRfdGV4dC0+cHVzaF9jb250ZW50KCRjb250ZW50X3RyZWUpOworCisJbWFrZV9saW5rc19hYnNvbHV0ZSgkaHRtbF90cmVlLCAkcmVtb3RlX3VybCk7CisKKwlyZXR1cm4gJGh0bWxfdHJlZS0+YXNfSFRNTDsKK30KKworc3ViIG1ha2VfbGlua3NfYWJzb2x1dGUgeworCW15ICRodG1sX3RyZWUgPSBzaGlmdDsKKwlteSAkcmVtb3RlX3VybCA9IHNoaWZ0OworCWZvciAoQHsgJGh0bWxfdHJlZS0+ZXh0cmFjdF9saW5rcygpIH0pIHsKKwkJbXkgKCRsaW5rLCAkZWxlbWVudCwgJGF0dHIpID0gQHsgJF8gfTsKKwkJbXkgJHVybCA9IHVybCgkbGluayktPmNhbm9uaWNhbDsKKwkJaWYgKCR1cmwgIX4gLyMvKSB7CisJCQkkZWxlbWVudC0+YXR0cigkYXR0ciwgVVJJLT5uZXdfYWJzKCR1cmwsICRyZW1vdGVfdXJsKSk7CisJCX0KKwl9CisJcmV0dXJuICRodG1sX3RyZWU7Cit9CisKK3N1YiBpc192YWxpZF9yZW1vdGUgeworCW15ICRyZW1vdGUgPSBzaGlmdDsKKwlteSBAcmVtb3RlcyA9IGdpdF9jbWRfdHJ5IHsKKwkJR2l0Ojpjb21tYW5kKCdyZW1vdGUnKSB9CisJCSIlcyBmYWlsZWQgdy8gY29kZSAlZCI7CisJbXkgJGZvdW5kX3JlbW90ZSA9IDA7CisJZm9yZWFjaCBteSAkcmVtb3RlIChAcmVtb3RlcykgeworCQlpZiAoJHJlbW90ZSBlcSAkcmVtb3RlKSB7CisJCQkkZm91bmRfcmVtb3RlID0gMTsKKwkJCWxhc3Q7CisJCX0KKwl9CisJcmV0dXJuICRmb3VuZF9yZW1vdGU7Cit9CisKK3N1YiBmaW5kX21lZGlhd2lraV9yZW1vdGVzIHsKKwlteSBAcmVtb3RlcyA9IGdpdF9jbWRfdHJ5IHsKKwkJR2l0Ojpjb21tYW5kKCdyZW1vdGUnKTsgfQorCQkiJXMgZmFpbGVkIHcvIGNvZGUgJWQiOworCW15ICRyZW1vdGVfdXJsOworCW15IEB2YWxpZF9yZW1vdGVzID0gKCk7CisJZm9yZWFjaCBteSAkcmVtb3RlIChAcmVtb3RlcykgeworCQkkcmVtb3RlX3VybCA9IG1lZGlhd2lraV9yZW1vdGVfdXJsX21heWJlKCRyZW1vdGUpOworCQlpZiAoJHJlbW90ZV91cmwpIHsKKwkJCXB1c2goQHZhbGlkX3JlbW90ZXMsICRyZW1vdGUpOworCQl9CisJfQorCXJldHVybiBAdmFsaWRfcmVtb3RlczsKK30KKworc3ViIGZpbmRfdXBzdHJlYW1fcmVtb3RlX25hbWUgeworCW15ICRjdXJyZW50X2JyYW5jaCA9IGdpdF9jbWRfdHJ5IHsKKwkJR2l0Ojpjb21tYW5kX29uZWxpbmUoJ3N5bWJvbGljLXJlZicsICctLXNob3J0JywgJ0hFQUQnKSB9CisJCSIlcyBmYWlsZWQgdy8gY29kZSAlZCI7CisJcmV0dXJuIEdpdDo6Y29uZmlnKCJicmFuY2guJHtjdXJyZW50X2JyYW5jaH0ucmVtb3RlIik7Cit9CisKK3N1YiBtZWRpYXdpa2lfcmVtb3RlX3VybF9tYXliZSB7CisJbXkgJHJlbW90ZSA9IHNoaWZ0OworCisJIyBGaW5kIHJlbW90ZSB1cmwKKwlteSAkcmVtb3RlX3VybCA9IEdpdDo6Y29uZmlnKCJyZW1vdGUuJHtyZW1vdGV9LnVybCIpOworCWlmICgkcmVtb3RlX3VybCA9fiBzL21lZGlhd2lraTo6KC4qKS8kMS8pIHsKKwkJcmV0dXJuIHVybCgkcmVtb3RlX3VybCktPmNhbm9uaWNhbDsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N1YiBnZXRfdGVtcGxhdGUgeworCW15ICR1cmwgPSBzaGlmdDsKKwlteSAkcGFnZV9uYW1lID0gc2hpZnQ7CisJbXkgKCRyZXEsICRyZXMsICRjb2RlLCAkdXJsX2FmdGVyKTsKKworCSRyZXEgPSBMV1A6OlVzZXJBZ2VudC0+bmV3OworCWlmICgkdmVyYm9zZSkgeworCQkkcmVxLT5zaG93X3Byb2dyZXNzKDEpOworCX0KKworCSRyZXMgPSAkcmVxLT5nZXQoIiR7dXJsfS9pbmRleC5waHA/dGl0bGU9JHtwYWdlX25hbWV9Iik7CisJaWYgKCEkcmVzLT5pc19zdWNjZXNzKSB7CisJCSRjb2RlID0gJHJlcy0+Y29kZTsKKwkJJHVybF9hZnRlciA9ICRyZXMtPnJlcXVlc3QoKS0+dXJpKCk7ICMgcmVzb2x2ZSBhbGwgcmVkaXJlY3Rpb25zCisJCWlmICgkY29kZSA9PSBIVFRQX0NPREVfUEFHRV9OT1RfRk9VTkQpIHsKKwkJCWlmICgkdmVyYm9zZSkgeworCQkJCXByaW50IHsqU1RERVJSfSA8PCJXQVJOSU5HIjsKK1dhcm5pbmc6IEZhaWxlZCB0byByZXRyaWV2ZSAnJHBhZ2VfbmFtZScuIENyZWF0ZSBpdCBvbiB0aGUgbWVkaWF3aWtpIGlmIHlvdSB3YW50CithbGwgdGhlIGxpbmtzIHRvIHdvcmsgcHJvcGVybHkuCitUcnlpbmcgdG8gdXNlIHRoZSBtZWRpYXdpa2kgaG9tZXBhZ2UgYXMgYSBmYWxsYmFjayB0ZW1wbGF0ZSAuLi4KK1dBUk5JTkcKKwkJCX0KKworCQkJIyBMV1AgYXV0b21hdGljYWxseSByZWRpcmVjdHMgR0VUIHJlcXVlc3QKKwkJCSRyZXMgPSAkcmVxLT5nZXQoIiR7dXJsfS9pbmRleC5waHAiKTsKKwkJCWlmICghJHJlcy0+aXNfc3VjY2VzcykgeworCQkJCSR1cmxfYWZ0ZXIgPSAkcmVzLT5yZXF1ZXN0KCktPnVyaSgpOyAjIHJlc29sdmUgYWxsIHJlZGlyZWN0aW9ucworCQkJCWRpZSAiRmFpbGVkIHRvIGdldCBob21lcGFnZSBAICR7dXJsX2FmdGVyfSB3LyBjb2RlICR7Y29kZX1cbiI7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkaWUgIkZhaWxlZCB0byBnZXQgJyR7cGFnZV9uYW1lfScgQCAke3VybF9hZnRlcn0gdy8gY29kZSAke2NvZGV9XG4iOworCQl9CisJfQorCisJcmV0dXJuICRyZXMtPmRlY29kZWRfY29udGVudDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEhlbHAgRnVuY3Rpb25zICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc3ViIGhlbHAgeworCXByaW50IHsqU1RET1VUfSA8PCdFTkQnOwordXNhZ2U6IGdpdCBtdyA8Y29tbWFuZD4gPGFyZ3M+CisKK2dpdCBtdyBjb21tYW5kcyBhcmU6CisgICAgaGVscCAgICAgICAgRGlzcGxheSBoZWxwIGluZm9ybWF0aW9uIGFib3V0IGdpdCBtdworICAgIHByZXZpZXcgICAgIFBhcnNlIGFuZCByZW5kZXIgbG9jYWwgZmlsZSBpbnRvIEhUTUwKK0VORAorCWV4aXQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS5wZXJsIGIvY29udHJpYi9tdy10by1naXQvZ2l0LXJlbW90ZS1tZWRpYXdpa2kucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kOGZmMmU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvZ2l0LXJlbW90ZS1tZWRpYXdpa2kucGVybApAQCAtMCwwICsxLDEzNzQgQEAKKyMhIC91c3IvYmluL3BlcmwKKworIyBDb3B5cmlnaHQgKEMpIDIwMTEKKyMgICAgIErDqXLDqW1pZSBOaWthZXMgPGplcmVtaWUubmlrYWVzQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEFybmF1ZCBMYWN1cmllIDxhcm5hdWQubGFjdXJpZUBlbnNpbWFnLmltYWcuZnI+CisjICAgICBDbGFpcmUgRm91c3NlIDxjbGFpcmUuZm91c3NlQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIERhdmlkIEFtb3V5YWwgPGRhdmlkLmFtb3V5YWxAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgTWF0dGhpZXUgTW95IDxtYXR0aGlldS5tb3lAZ3Jlbm9ibGUtaW5wLmZyPgorIyBMaWNlbnNlOiBHUEwgdjIgb3IgbGF0ZXIKKworIyBHYXRld2F5IGJldHdlZW4gR2l0IGFuZCBNZWRpYVdpa2kuCisjIERvY3VtZW50YXRpb24gJiBidWd0cmFja2VyOiBodHRwczovL2dpdGh1Yi5jb20vbW95L0dpdC1NZWRpYXdpa2kvCisKK3VzZSBzdHJpY3Q7Cit1c2UgTWVkaWFXaWtpOjpBUEk7Cit1c2UgR2l0OwordXNlIEdpdDo6TWVkaWF3aWtpIHF3KGNsZWFuX2ZpbGVuYW1lIHNtdWRnZV9maWxlbmFtZSBjb25uZWN0X21heWJlCisJCQkJCUVNUFRZIEhUVFBfQ09ERV9PSyk7Cit1c2UgRGF0ZVRpbWU6OkZvcm1hdDo6SVNPODYwMTsKK3VzZSB3YXJuaW5nczsKKworIyBCeSBkZWZhdWx0LCB1c2UgVVRGLTggdG8gY29tbXVuaWNhdGUgd2l0aCBHaXQgYW5kIHRoZSB1c2VyCitiaW5tb2RlIFNUREVSUiwgJzplbmNvZGluZyhVVEYtOCknOworYmlubW9kZSBTVERPVVQsICc6ZW5jb2RpbmcoVVRGLTgpJzsKKwordXNlIFVSSTo6RXNjYXBlOworCisjIEl0J3Mgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBkZWxldGUgcGFnZXMgKG1heSByZXF1aXJlIHNvbWUKKyMgcHJpdmlsZWdlcykuIERlbGV0ZWQgcGFnZXMgYXJlIHJlcGxhY2VkIHdpdGggdGhpcyBjb250ZW50LgordXNlIGNvbnN0YW50IERFTEVURURfQ09OVEVOVCA9PiAiW1tDYXRlZ29yeTpEZWxldGVkXV1cbiI7CisKKyMgSXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIGVtcHR5IHBhZ2VzLiBOZXcgZW1wdHkgZmlsZXMgaW4gR2l0IGFyZQorIyBzZW50IHdpdGggdGhpcyBjb250ZW50IGluc3RlYWQuCit1c2UgY29uc3RhbnQgRU1QVFlfQ09OVEVOVCA9PiAiPCEtLSBlbXB0eSBwYWdlIC0tPlxuIjsKKworIyB1c2VkIHRvIHJlZmxlY3QgZmlsZSBjcmVhdGlvbiBvciBkZWxldGlvbiBpbiBkaWZmLgordXNlIGNvbnN0YW50IE5VTExfU0hBMSA9PiAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7CisKKyMgVXNlZCBvbiBHaXQncyBzaWRlIHRvIHJlZmxlY3QgZW1wdHkgZWRpdCBtZXNzYWdlcyBvbiB0aGUgd2lraQordXNlIGNvbnN0YW50IEVNUFRZX01FU1NBR0UgPT4gJypFbXB0eSBNZWRpYVdpa2kgTWVzc2FnZSonOworCisjIE51bWJlciBvZiBwYWdlcyB0YWtlbiBpbnRvIGFjY291bnQgYXQgb25jZSBpbiBzdWJtb2R1bGUgZ2V0X213X3BhZ2VfbGlzdAordXNlIGNvbnN0YW50IFNMSUNFX1NJWkUgPT4gNTA7CisKKyMgTnVtYmVyIG9mIGxpbmtlZCBtZWRpYWZpbGUgdG8gZ2V0IGF0IG9uY2UgaW4gZ2V0X2xpbmtlZF9tZWRpYWZpbGVzCisjIFRoZSBxdWVyeSBpcyBzcGxpdCBpbiBzbWFsbCBiYXRjaGVzIGJlY2F1c2Ugb2YgdGhlIE1XIEFQSSBsaW1pdCBvZgorIyB0aGUgbnVtYmVyIG9mIGxpbmtzIHRvIGJlIHJldHVybmVkICg1MDAgbGlua3MgbWF4KS4KK3VzZSBjb25zdGFudCBCQVRDSF9TSVpFID0+IDEwOworCitpZiAoQEFSR1YgIT0gMikgeworCWV4aXRfZXJyb3JfdXNhZ2UoKTsKK30KKworbXkgJHJlbW90ZW5hbWUgPSAkQVJHVlswXTsKK215ICR1cmwgPSAkQVJHVlsxXTsKKworIyBBY2NlcHQgYm90aCBzcGFjZS1zZXBhcmF0ZWQgYW5kIG11bHRpcGxlIGtleXMgaW4gY29uZmlnIGZpbGUuCisjIFNwYWNlcyBzaG91bGQgYmUgd3JpdHRlbiBhcyBfIGFueXdheSBiZWNhdXNlIHdlJ2xsIHVzZSBjaG9tcC4KK215IEB0cmFja2VkX3BhZ2VzID0gc3BsaXQoL1sgXG5dLywgcnVuX2dpdCgiY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuJHtyZW1vdGVuYW1lfS5wYWdlcyIpKTsKK2Nob21wKEB0cmFja2VkX3BhZ2VzKTsKKworIyBKdXN0IGxpa2UgQHRyYWNrZWRfcGFnZXMsIGJ1dCBmb3IgTWVkaWFXaWtpIGNhdGVnb3JpZXMuCitteSBAdHJhY2tlZF9jYXRlZ29yaWVzID0gc3BsaXQoL1sgXG5dLywgcnVuX2dpdCgiY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuJHtyZW1vdGVuYW1lfS5jYXRlZ29yaWVzIikpOworY2hvbXAoQHRyYWNrZWRfY2F0ZWdvcmllcyk7CisKKyMgSnVzdCBsaWtlIEB0cmFja2VkX2NhdGVnb3JpZXMsIGJ1dCBmb3IgTWVkaWFXaWtpIG5hbWVzcGFjZXMuCitteSBAdHJhY2tlZF9uYW1lc3BhY2VzID0gc3BsaXQoL1sgXG5dLywgcnVuX2dpdCgiY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuJHtyZW1vdGVuYW1lfS5uYW1lc3BhY2VzIikpOworZm9yIChAdHJhY2tlZF9uYW1lc3BhY2VzKSB7IHMvXy8gL2c7IH0KK2Nob21wKEB0cmFja2VkX25hbWVzcGFjZXMpOworCisjIEltcG9ydCBtZWRpYSBmaWxlcyBvbiBwdWxsCitteSAkaW1wb3J0X21lZGlhID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IC0tYm9vbCByZW1vdGUuJHtyZW1vdGVuYW1lfS5tZWRpYWltcG9ydCIpOworY2hvbXAoJGltcG9ydF9tZWRpYSk7CiskaW1wb3J0X21lZGlhID0gKCRpbXBvcnRfbWVkaWEgZXEgJ3RydWUnKTsKKworIyBFeHBvcnQgbWVkaWEgZmlsZXMgb24gcHVzaAorbXkgJGV4cG9ydF9tZWRpYSA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCAtLWJvb2wgcmVtb3RlLiR7cmVtb3RlbmFtZX0ubWVkaWFleHBvcnQiKTsKK2Nob21wKCRleHBvcnRfbWVkaWEpOworJGV4cG9ydF9tZWRpYSA9ICEoJGV4cG9ydF9tZWRpYSBlcSAnZmFsc2UnKTsKKworbXkgJHdpa2lfbG9naW4gPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgcmVtb3RlLiR7cmVtb3RlbmFtZX0ubXdMb2dpbiIpOworIyBOb3RlOiBtd1Bhc3N3b3JkIGlzIGRpc2NvdXJhZ2VkLiBVc2UgdGhlIGNyZWRlbnRpYWwgc3lzdGVtIGluc3RlYWQuCitteSAkd2lraV9wYXNzd2QgPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgcmVtb3RlLiR7cmVtb3RlbmFtZX0ubXdQYXNzd29yZCIpOworbXkgJHdpa2lfZG9tYWluID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IHJlbW90ZS4ke3JlbW90ZW5hbWV9Lm13RG9tYWluIik7CitjaG9tcCgkd2lraV9sb2dpbik7CitjaG9tcCgkd2lraV9wYXNzd2QpOworY2hvbXAoJHdpa2lfZG9tYWluKTsKKworIyBJbXBvcnQgb25seSBsYXN0IHJldmlzaW9ucyAoYm90aCBmb3IgY2xvbmUgYW5kIGZldGNoKQorbXkgJHNoYWxsb3dfaW1wb3J0ID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IC0tYm9vbCByZW1vdGUuJHtyZW1vdGVuYW1lfS5zaGFsbG93Iik7CitjaG9tcCgkc2hhbGxvd19pbXBvcnQpOworJHNoYWxsb3dfaW1wb3J0ID0gKCRzaGFsbG93X2ltcG9ydCBlcSAndHJ1ZScpOworCisjIEZldGNoIChjbG9uZSBhbmQgcHVsbCkgYnkgcmV2aXNpb25zIGluc3RlYWQgb2YgYnkgcGFnZXMuIFRoaXMgYmVoYXZpb3IKKyMgaXMgbW9yZSBlZmZpY2llbnQgd2hlbiB3ZSBoYXZlIGEgd2lraSB3aXRoIGxvdHMgb2YgcGFnZXMgYW5kIHdlIGZldGNoCisjIHRoZSByZXZpc2lvbnMgcXVpdGUgb2Z0ZW4gc28gdGhhdCB0aGV5IGNvbmNlcm4gb25seSBmZXcgcGFnZXMuCisjIFBvc3NpYmxlIHZhbHVlczoKKyMgLSBieV9yZXY6IHBlcmZvcm0gb25lIHF1ZXJ5IHBlciBuZXcgcmV2aXNpb24gb24gdGhlIHJlbW90ZSB3aWtpCisjIC0gYnlfcGFnZTogcXVlcnkgZWFjaCB0cmFja2VkIHBhZ2UgZm9yIG5ldyByZXZpc2lvbgorbXkgJGZldGNoX3N0cmF0ZWd5ID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IHJlbW90ZS4ke3JlbW90ZW5hbWV9LmZldGNoU3RyYXRlZ3kiKTsKK2lmICghJGZldGNoX3N0cmF0ZWd5KSB7CisJJGZldGNoX3N0cmF0ZWd5ID0gcnVuX2dpdCgnY29uZmlnIC0tZ2V0IG1lZGlhd2lraS5mZXRjaFN0cmF0ZWd5Jyk7Cit9CitjaG9tcCgkZmV0Y2hfc3RyYXRlZ3kpOworaWYgKCEkZmV0Y2hfc3RyYXRlZ3kpIHsKKwkkZmV0Y2hfc3RyYXRlZ3kgPSAnYnlfcGFnZSc7Cit9CisKKyMgUmVtZW1iZXIgdGhlIHRpbWVzdGFtcCBjb3JyZXNwb25kaW5nIHRvIGEgcmV2aXNpb24gaWQuCitteSAlYmFzZXRpbWVzdGFtcHM7CisKKyMgRHVtYiBwdXNoOiBkb24ndCB1cGRhdGUgbm90ZXMgYW5kIG1lZGlhd2lraSByZWYgdG8gcmVmbGVjdCB0aGUgbGFzdCBwdXNoLgorIworIyBDb25maWd1cmFibGUgd2l0aCBtZWRpYXdpa2kuZHVtYlB1c2gsIG9yIHBlci1yZW1vdGUgd2l0aAorIyByZW1vdGUuPHJlbW90ZW5hbWU+LmR1bWJQdXNoLgorIworIyBUaGlzIG1lYW5zIHRoZSB1c2VyIHdpbGwgaGF2ZSB0byByZS1pbXBvcnQgdGhlIGp1c3QtcHVzaGVkCisjIHJldmlzaW9ucy4gT24gdGhlIG90aGVyIGhhbmQsIHRoaXMgbWVhbnMgdGhhdCB0aGUgR2l0IHJldmlzaW9ucworIyBjb3JyZXNwb25kaW5nIHRvIE1lZGlhV2lraSByZXZpc2lvbnMgYXJlIGFsbCBpbXBvcnRlZCBmcm9tIHRoZSB3aWtpLAorIyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSB3ZXJlIGluaXRpYWxseSBjcmVhdGVkIGluIEdpdCBvciBmcm9tIHRoZQorIyB3ZWIgaW50ZXJmYWNlLCBoZW5jZSBhbGwgdXNlcnMgd2lsbCBnZXQgdGhlIHNhbWUgaGlzdG9yeSAoaS5lLiBpZgorIyB0aGUgcHVzaCBmcm9tIEdpdCB0byBNZWRpYVdpa2kgbG9zZXMgc29tZSBpbmZvcm1hdGlvbiwgZXZlcnlib2R5CisjIHdpbGwgZ2V0IHRoZSBoaXN0b3J5IHdpdGggaW5mb3JtYXRpb24gbG9zdCkuIElmIHRoZSBpbXBvcnQgaXMKKyMgZGV0ZXJtaW5pc3RpYywgdGhpcyBtZWFucyBldmVyeWJvZHkgZ2V0cyB0aGUgc2FtZSBzaGExIGZvciBlYWNoCisjIE1lZGlhV2lraSByZXZpc2lvbi4KK215ICRkdW1iX3B1c2ggPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgLS1ib29sIHJlbW90ZS4ke3JlbW90ZW5hbWV9LmR1bWJQdXNoIik7CitpZiAoISRkdW1iX3B1c2gpIHsKKwkkZHVtYl9wdXNoID0gcnVuX2dpdCgnY29uZmlnIC0tZ2V0IC0tYm9vbCBtZWRpYXdpa2kuZHVtYlB1c2gnKTsKK30KK2Nob21wKCRkdW1iX3B1c2gpOworJGR1bWJfcHVzaCA9ICgkZHVtYl9wdXNoIGVxICd0cnVlJyk7CisKK215ICR3aWtpX25hbWUgPSAkdXJsOworJHdpa2lfbmFtZSA9fiBze1teL10qOi8vfXt9OworIyBJZiBVUkwgaXMgbGlrZSBodHRwOi8vdXNlcjpwYXNzd29yZEBleGFtcGxlLmNvbS8sIHdlIGNsZWFybHkgZG9uJ3QKKyMgd2FudCB0aGUgcGFzc3dvcmQgaW4gJHdpa2lfbmFtZS4gV2hpbGUgd2UncmUgdGhlcmUsIGFsc28gcmVtb3ZlIHVzZXIKKyMgYW5kICdAJyBzaWduLCB0byBhdm9pZCBhdXRob3IgbGlrZSBNV1VzZXJASFRUUFVzZXJAaG9zdC5jb20KKyR3aWtpX25hbWUgPX4gcy9eLipALy87CisKKyMgQ29tbWFuZHMgcGFyc2VyCit3aGlsZSAoPFNURElOPikgeworCWNob21wOworCisJaWYgKCFwYXJzZV9jb21tYW5kKCRfKSkgeworCQlsYXN0OworCX0KKworCUJFR0lOIHsgJHwgPSAxIH0gIyBmbHVzaCBTVERPVVQsIHRvIG1ha2Ugc3VyZSB0aGUgcHJldmlvdXMKKwkJCSAjIGNvbW1hbmQgaXMgZnVsbHkgcHJvY2Vzc2VkLgorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBGdW5jdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIGVycm9yIGhhbmRsaW5nCitzdWIgZXhpdF9lcnJvcl91c2FnZSB7CisJZGllICJFUlJPUjogZ2l0LXJlbW90ZS1tZWRpYXdpa2kgbW9kdWxlIHdhcyBub3QgY2FsbGVkIHdpdGggYSBjb3JyZWN0IG51bWJlciBvZlxuIiAuCisJICAgICJwYXJhbWV0ZXJzXG4iIC4KKwkgICAgIllvdSBtYXkgb2J0YWluIHRoaXMgZXJyb3IgYmVjYXVzZSB5b3UgYXR0ZW1wdGVkIHRvIHJ1biB0aGUgZ2l0LXJlbW90ZS1tZWRpYXdpa2lcbiIgLgorICAgICAgICAgICAgIm1vZHVsZSBkaXJlY3RseS5cbiIgLgorCSAgICAiVGhpcyBtb2R1bGUgY2FuIGJlIHVzZWQgdGhlIGZvbGxvd2luZyB3YXk6XG4iIC4KKwkgICAgIlx0Z2l0IGNsb25lIG1lZGlhd2lraTovLzxhZGRyZXNzIG9mIGEgbWVkaWF3aWtpPlxuIiAuCisJICAgICJUaGVuLCB1c2UgZ2l0IGNvbW1pdCwgcHVzaCBhbmQgcHVsbCBhcyB3aXRoIGV2ZXJ5IG5vcm1hbCBnaXQgcmVwb3NpdG9yeS5cbiI7Cit9CisKK3N1YiBwYXJzZV9jb21tYW5kIHsKKwlteSAoJGxpbmUpID0gQF87CisJbXkgQGNtZCA9IHNwbGl0KC8gLywgJGxpbmUpOworCWlmICghZGVmaW5lZCAkY21kWzBdKSB7CisJCXJldHVybiAwOworCX0KKwlpZiAoJGNtZFswXSBlcSAnY2FwYWJpbGl0aWVzJykgeworCQlkaWUoIlRvbyBtYW55IGFyZ3VtZW50cyBmb3IgY2FwYWJpbGl0aWVzXG4iKQorCQkgICAgaWYgKGRlZmluZWQoJGNtZFsxXSkpOworCQltd19jYXBhYmlsaXRpZXMoKTsKKwl9IGVsc2lmICgkY21kWzBdIGVxICdsaXN0JykgeworCQlkaWUoIlRvbyBtYW55IGFyZ3VtZW50cyBmb3IgbGlzdFxuIikgaWYgKGRlZmluZWQoJGNtZFsyXSkpOworCQltd19saXN0KCRjbWRbMV0pOworCX0gZWxzaWYgKCRjbWRbMF0gZXEgJ2ltcG9ydCcpIHsKKwkJZGllKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBpbXBvcnRcbiIpCisJCSAgICBpZiAoJGNtZFsxXSBlcSBFTVBUWSk7CisJCWRpZSgiVG9vIG1hbnkgYXJndW1lbnRzIGZvciBpbXBvcnRcbiIpCisJCSAgICBpZiAoZGVmaW5lZCgkY21kWzJdKSk7CisJCW13X2ltcG9ydCgkY21kWzFdKTsKKwl9IGVsc2lmICgkY21kWzBdIGVxICdvcHRpb24nKSB7CisJCWRpZSgiSW52YWxpZCBhcmd1bWVudHMgZm9yIG9wdGlvblxuIikKKwkJICAgIGlmICgkY21kWzFdIGVxIEVNUFRZIHx8ICRjbWRbMl0gZXEgRU1QVFkpOworCQlkaWUoIlRvbyBtYW55IGFyZ3VtZW50cyBmb3Igb3B0aW9uXG4iKQorCQkgICAgaWYgKGRlZmluZWQoJGNtZFszXSkpOworCQltd19vcHRpb24oJGNtZFsxXSwkY21kWzJdKTsKKwl9IGVsc2lmICgkY21kWzBdIGVxICdwdXNoJykgeworCQltd19wdXNoKCRjbWRbMV0pOworCX0gZWxzZSB7CisJCXByaW50IHsqU1RERVJSfSAiVW5rbm93biBjb21tYW5kLiBBYm9ydGluZy4uLlxuIjsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisjIE1lZGlhV2lraSBBUEkgaW5zdGFuY2UsIGNyZWF0ZWQgbGF6aWx5LgorbXkgJG1lZGlhd2lraTsKKworc3ViIGZhdGFsX213X2Vycm9yIHsKKwlteSAkYWN0aW9uID0gc2hpZnQ7CisJcHJpbnQgU1RERVJSICJmYXRhbDogY291bGQgbm90ICRhY3Rpb24uXG4iOworCXByaW50IFNUREVSUiAiZmF0YWw6ICckdXJsJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBtZWRpYXdpa2lcbiI7CisJaWYgKCR1cmwgPX4gL15odHRwcy8pIHsKKwkJcHJpbnQgU1RERVJSICJmYXRhbDogbWFrZSBzdXJlICckdXJsL2FwaS5waHAnIGlzIGEgdmFsaWQgcGFnZVxuIjsKKwkJcHJpbnQgU1RERVJSICJmYXRhbDogYW5kIHRoZSBTU0wgY2VydGlmaWNhdGUgaXMgY29ycmVjdC5cbiI7CisJfSBlbHNlIHsKKwkJcHJpbnQgU1RERVJSICJmYXRhbDogbWFrZSBzdXJlICckdXJsL2FwaS5waHAnIGlzIGEgdmFsaWQgcGFnZS5cbiI7CisJfQorCXByaW50IFNUREVSUiAiZmF0YWw6IChlcnJvciAiIC4KKwkgICAgJG1lZGlhd2lraS0+e2Vycm9yfS0+e2NvZGV9IC4gJzogJyAuCisJICAgICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfSAuICIpXG4iOworCWV4aXQgMTsKK30KKworIyMgRnVuY3Rpb25zIGZvciBsaXN0aW5nIHBhZ2VzIG9uIHRoZSByZW1vdGUgd2lraQorc3ViIGdldF9td190cmFja2VkX3BhZ2VzIHsKKwlteSAkcGFnZXMgPSBzaGlmdDsKKwlnZXRfbXdfcGFnZV9saXN0KFxAdHJhY2tlZF9wYWdlcywgJHBhZ2VzKTsKKwlyZXR1cm47Cit9CisKK3N1YiBnZXRfbXdfcGFnZV9saXN0IHsKKwlteSAkcGFnZV9saXN0ID0gc2hpZnQ7CisJbXkgJHBhZ2VzID0gc2hpZnQ7CisJbXkgQHNvbWVfcGFnZXMgPSBAeyRwYWdlX2xpc3R9OworCXdoaWxlIChAc29tZV9wYWdlcykgeworCQlteSAkbGFzdF9wYWdlID0gU0xJQ0VfU0laRTsKKwkJaWYgKCQjc29tZV9wYWdlcyA8ICRsYXN0X3BhZ2UpIHsKKwkJCSRsYXN0X3BhZ2UgPSAkI3NvbWVfcGFnZXM7CisJCX0KKwkJbXkgQHNsaWNlID0gQHNvbWVfcGFnZXNbMC4uJGxhc3RfcGFnZV07CisJCWdldF9td19maXJzdF9wYWdlcyhcQHNsaWNlLCAkcGFnZXMpOworCQlAc29tZV9wYWdlcyA9IEBzb21lX3BhZ2VzWyhTTElDRV9TSVpFICsgMSkuLiQjc29tZV9wYWdlc107CisJfQorCXJldHVybjsKK30KKworc3ViIGdldF9td190cmFja2VkX2NhdGVnb3JpZXMgeworCW15ICRwYWdlcyA9IHNoaWZ0OworCWZvcmVhY2ggbXkgJGNhdGVnb3J5IChAdHJhY2tlZF9jYXRlZ29yaWVzKSB7CisJCWlmIChpbmRleCgkY2F0ZWdvcnksICc6JykgPCAwKSB7CisJCQkjIE1lZGlhd2lraSByZXF1aXJlcyB0aGUgQ2F0ZWdvcnkKKwkJCSMgcHJlZml4LCBidXQgbGV0J3Mgbm90IGZvcmNlIHRoZSB1c2VyCisJCQkjIHRvIHNwZWNpZnkgaXQuCisJCQkkY2F0ZWdvcnkgPSAiQ2F0ZWdvcnk6JHtjYXRlZ29yeX0iOworCQl9CisJCW15ICRtd19wYWdlcyA9ICRtZWRpYXdpa2ktPmxpc3QoIHsKKwkJCWFjdGlvbiA9PiAncXVlcnknLAorCQkJbGlzdCA9PiAnY2F0ZWdvcnltZW1iZXJzJywKKwkJCWNtdGl0bGUgPT4gJGNhdGVnb3J5LAorCQkJY21saW1pdCA9PiAnbWF4JyB9ICkKKwkJCXx8IGRpZSAkbWVkaWF3aWtpLT57ZXJyb3J9LT57Y29kZX0gLiAnOiAnCisJCQkJLiAkbWVkaWF3aWtpLT57ZXJyb3J9LT57ZGV0YWlsc30gLiAiXG4iOworCQlmb3JlYWNoIG15ICRwYWdlIChAeyRtd19wYWdlc30pIHsKKwkJCSRwYWdlcy0+eyRwYWdlLT57dGl0bGV9fSA9ICRwYWdlOworCQl9CisJfQorCXJldHVybjsKK30KKworc3ViIGdldF9td190cmFja2VkX25hbWVzcGFjZXMgeworICAgIG15ICRwYWdlcyA9IHNoaWZ0OworICAgIGZvcmVhY2ggbXkgJGxvY2FsX25hbWVzcGFjZSAoc29ydCBAdHJhY2tlZF9uYW1lc3BhY2VzKSB7CisgICAgICAgIG15ICRuYW1lc3BhY2VfaWQ7CisgICAgICAgIGlmICgkbG9jYWxfbmFtZXNwYWNlIGVxICIoTWFpbikiKSB7CisgICAgICAgICAgICAkbmFtZXNwYWNlX2lkID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRuYW1lc3BhY2VfaWQgPSBnZXRfbXdfbmFtZXNwYWNlX2lkKCRsb2NhbF9uYW1lc3BhY2UpOworICAgICAgICB9CisgICAgICAgICMgdmlydHVhbCBuYW1lc3BhY2VzIGRvbid0IHN1cHBvcnQgYWxscGFnZXMKKyAgICAgICAgbmV4dCBpZiAhZGVmaW5lZCgkbmFtZXNwYWNlX2lkKSB8fCAkbmFtZXNwYWNlX2lkIDwgMDsKKyAgICAgICAgbXkgJG13X3BhZ2VzID0gJG1lZGlhd2lraS0+bGlzdCggeworICAgICAgICAgICAgYWN0aW9uID0+ICdxdWVyeScsCisgICAgICAgICAgICBsaXN0ID0+ICdhbGxwYWdlcycsCisgICAgICAgICAgICBhcG5hbWVzcGFjZSA9PiAkbmFtZXNwYWNlX2lkLAorICAgICAgICAgICAgYXBsaW1pdCA9PiAnbWF4JyB9ICkKKyAgICAgICAgICAgIHx8IGRpZSAkbWVkaWF3aWtpLT57ZXJyb3J9LT57Y29kZX0gLiAnOiAnCisgICAgICAgICAgICAgICAgLiAkbWVkaWF3aWtpLT57ZXJyb3J9LT57ZGV0YWlsc30gLiAiXG4iOworICAgICAgICBwcmludCB7KlNUREVSUn0gIiQjeyRtd19wYWdlc30gZm91bmQgaW4gbmFtZXNwYWNlICRsb2NhbF9uYW1lc3BhY2UgKCRuYW1lc3BhY2VfaWQpXG4iOworICAgICAgICBmb3JlYWNoIG15ICRwYWdlIChAeyRtd19wYWdlc30pIHsKKyAgICAgICAgICAgICRwYWdlcy0+eyRwYWdlLT57dGl0bGV9fSA9ICRwYWdlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybjsKK30KKworc3ViIGdldF9td19hbGxfcGFnZXMgeworCW15ICRwYWdlcyA9IHNoaWZ0OworCSMgTm8gdXNlci1wcm92aWRlZCBsaXN0LCBnZXQgdGhlIGxpc3Qgb2YgcGFnZXMgZnJvbSB0aGUgQVBJLgorCW15ICRtd19wYWdlcyA9ICRtZWRpYXdpa2ktPmxpc3QoeworCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJbGlzdCA9PiAnYWxscGFnZXMnLAorCQlhcGxpbWl0ID0+ICdtYXgnCisJfSk7CisJaWYgKCFkZWZpbmVkKCRtd19wYWdlcykpIHsKKwkJZmF0YWxfbXdfZXJyb3IoImdldCB0aGUgbGlzdCBvZiB3aWtpIHBhZ2VzIik7CisJfQorCWZvcmVhY2ggbXkgJHBhZ2UgKEB7JG13X3BhZ2VzfSkgeworCQkkcGFnZXMtPnskcGFnZS0+e3RpdGxlfX0gPSAkcGFnZTsKKwl9CisJcmV0dXJuOworfQorCisjIHF1ZXJpZXMgdGhlIHdpa2kgZm9yIGEgc2V0IG9mIHBhZ2VzLiBNZWFudCB0byBiZSB1c2VkIHdpdGhpbiBhIGxvb3AKKyMgcXVlcnlpbmcgdGhlIHdpa2kgZm9yIHNsaWNlcyBvZiBwYWdlIGxpc3QuCitzdWIgZ2V0X213X2ZpcnN0X3BhZ2VzIHsKKwlteSAkc29tZV9wYWdlcyA9IHNoaWZ0OworCW15IEBzb21lX3BhZ2VzID0gQHskc29tZV9wYWdlc307CisKKwlteSAkcGFnZXMgPSBzaGlmdDsKKworCSMgcGF0dGVybiAncGFnZTF8cGFnZTJ8Li4uJyByZXF1aXJlZCBieSB0aGUgQVBJCisJbXkgJHRpdGxlcyA9IGpvaW4oJ3wnLCBAc29tZV9wYWdlcyk7CisKKwlteSAkbXdfcGFnZXMgPSAkbWVkaWF3aWtpLT5hcGkoeworCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJdGl0bGVzID0+ICR0aXRsZXMsCisJfSk7CisJaWYgKCFkZWZpbmVkKCRtd19wYWdlcykpIHsKKwkJZmF0YWxfbXdfZXJyb3IoInF1ZXJ5IHRoZSBsaXN0IG9mIHdpa2kgcGFnZXMiKTsKKwl9CisJd2hpbGUgKG15ICgkaWQsICRwYWdlKSA9IGVhY2goJXskbXdfcGFnZXMtPntxdWVyeX0tPntwYWdlc319KSkgeworCQlpZiAoJGlkIDwgMCkgeworCQkJcHJpbnQgeypTVERFUlJ9ICJXYXJuaW5nOiBwYWdlICRwYWdlLT57dGl0bGV9IG5vdCBmb3VuZCBvbiB3aWtpXG4iOworCQl9IGVsc2UgeworCQkJJHBhZ2VzLT57JHBhZ2UtPnt0aXRsZX19ID0gJHBhZ2U7CisJCX0KKwl9CisJcmV0dXJuOworfQorCisjIEdldCB0aGUgbGlzdCBvZiBwYWdlcyB0byBiZSBmZXRjaGVkIGFjY29yZGluZyB0byBjb25maWd1cmF0aW9uLgorc3ViIGdldF9td19wYWdlcyB7CisJJG1lZGlhd2lraSA9IGNvbm5lY3RfbWF5YmUoJG1lZGlhd2lraSwgJHJlbW90ZW5hbWUsICR1cmwpOworCisJcHJpbnQgeypTVERFUlJ9ICJMaXN0aW5nIHBhZ2VzIG9uIHJlbW90ZSB3aWtpLi4uXG4iOworCisJbXkgJXBhZ2VzOyAjIGhhc2ggb24gcGFnZSB0aXRsZXMgdG8gYXZvaWQgZHVwbGljYXRlcworCW15ICR1c2VyX2RlZmluZWQ7CisJaWYgKEB0cmFja2VkX3BhZ2VzKSB7CisJCSR1c2VyX2RlZmluZWQgPSAxOworCQkjIFRoZSB1c2VyIHByb3ZpZGVkIGEgbGlzdCBvZiBwYWdlcyB0aXRsZXMsIGJ1dCB3ZQorCQkjIHN0aWxsIG5lZWQgdG8gcXVlcnkgdGhlIEFQSSB0byBnZXQgdGhlIHBhZ2UgSURzLgorCQlnZXRfbXdfdHJhY2tlZF9wYWdlcyhcJXBhZ2VzKTsKKwl9CisJaWYgKEB0cmFja2VkX2NhdGVnb3JpZXMpIHsKKwkJJHVzZXJfZGVmaW5lZCA9IDE7CisJCWdldF9td190cmFja2VkX2NhdGVnb3JpZXMoXCVwYWdlcyk7CisJfQorCWlmIChAdHJhY2tlZF9uYW1lc3BhY2VzKSB7CisJCSR1c2VyX2RlZmluZWQgPSAxOworCQlnZXRfbXdfdHJhY2tlZF9uYW1lc3BhY2VzKFwlcGFnZXMpOworCX0KKwlpZiAoISR1c2VyX2RlZmluZWQpIHsKKwkJZ2V0X213X2FsbF9wYWdlcyhcJXBhZ2VzKTsKKwl9CisJaWYgKCRpbXBvcnRfbWVkaWEpIHsKKwkJcHJpbnQgeypTVERFUlJ9ICJHZXR0aW5nIG1lZGlhIGZpbGVzIGZvciBzZWxlY3RlZCBwYWdlcy4uLlxuIjsKKwkJaWYgKCR1c2VyX2RlZmluZWQpIHsKKwkJCWdldF9saW5rZWRfbWVkaWFmaWxlcyhcJXBhZ2VzKTsKKwkJfSBlbHNlIHsKKwkJCWdldF9hbGxfbWVkaWFmaWxlcyhcJXBhZ2VzKTsKKwkJfQorCX0KKwlwcmludCB7KlNUREVSUn0gKHNjYWxhciBrZXlzICVwYWdlcykgLiAiIHBhZ2VzIGZvdW5kLlxuIjsKKwlyZXR1cm4gJXBhZ2VzOworfQorCisjIHVzYWdlOiAkb3V0ID0gcnVuX2dpdCgiY29tbWFuZCBhcmdzIik7CisjICAgICAgICAkb3V0ID0gcnVuX2dpdCgiY29tbWFuZCBhcmdzIiwgInJhdyIpOyAjIGRvbid0IGludGVycHJldCBvdXRwdXQgYXMgVVRGLTguCitzdWIgcnVuX2dpdCB7CisJbXkgJGFyZ3MgPSBzaGlmdDsKKwlteSAkZW5jb2RpbmcgPSAoc2hpZnQgfHwgJ2VuY29kaW5nKFVURi04KScpOworCW9wZW4obXkgJGdpdCwgIi18OiR7ZW5jb2Rpbmd9IiwgImdpdCAke2FyZ3N9IikKKwkgICAgb3IgZGllICJVbmFibGUgdG8gZm9yazogJCFcbiI7CisJbXkgJHJlcyA9IGRvIHsKKwkJbG9jYWwgJC8gPSB1bmRlZjsKKwkJPCRnaXQ+CisJfTsKKwljbG9zZSgkZ2l0KTsKKworCXJldHVybiAkcmVzOworfQorCisKK3N1YiBnZXRfYWxsX21lZGlhZmlsZXMgeworCW15ICRwYWdlcyA9IHNoaWZ0OworCSMgQXR0YWNoIGxpc3Qgb2YgYWxsIHBhZ2VzIGZvciBtZWRpYSBmaWxlcyBmcm9tIHRoZSBBUEksCisJIyB0aGV5IGFyZSBpbiBhIGRpZmZlcmVudCBuYW1lc3BhY2UsIG9ubHkgb25lIG5hbWVzcGFjZQorCSMgY2FuIGJlIHF1ZXJpZWQgYXQgdGhlIHNhbWUgbW9tZW50CisJbXkgJG13X3BhZ2VzID0gJG1lZGlhd2lraS0+bGlzdCh7CisJCWFjdGlvbiA9PiAncXVlcnknLAorCQlsaXN0ID0+ICdhbGxwYWdlcycsCisJCWFwbmFtZXNwYWNlID0+IGdldF9td19uYW1lc3BhY2VfaWQoJ0ZpbGUnKSwKKwkJYXBsaW1pdCA9PiAnbWF4JworCX0pOworCWlmICghZGVmaW5lZCgkbXdfcGFnZXMpKSB7CisJCXByaW50IHsqU1RERVJSfSAiZmF0YWw6IGNvdWxkIG5vdCBnZXQgdGhlIGxpc3Qgb2YgcGFnZXMgZm9yIG1lZGlhIGZpbGVzLlxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICJmYXRhbDogJyR1cmwnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIG1lZGlhd2lraVxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICJmYXRhbDogbWFrZSBzdXJlICckdXJsL2FwaS5waHAnIGlzIGEgdmFsaWQgcGFnZS5cbiI7CisJCWV4aXQgMTsKKwl9CisJZm9yZWFjaCBteSAkcGFnZSAoQHskbXdfcGFnZXN9KSB7CisJCSRwYWdlcy0+eyRwYWdlLT57dGl0bGV9fSA9ICRwYWdlOworCX0KKwlyZXR1cm47Cit9CisKK3N1YiBnZXRfbGlua2VkX21lZGlhZmlsZXMgeworCW15ICRwYWdlcyA9IHNoaWZ0OworCW15IEB0aXRsZXMgPSBtYXAgeyAkXy0+e3RpdGxlfSB9IHZhbHVlcygleyRwYWdlc30pOworCisJbXkgJGJhdGNoID0gQkFUQ0hfU0laRTsKKwl3aGlsZSAoQHRpdGxlcykgeworCQlpZiAoJCN0aXRsZXMgPCAkYmF0Y2gpIHsKKwkJCSRiYXRjaCA9ICQjdGl0bGVzOworCQl9CisJCW15IEBzbGljZSA9IEB0aXRsZXNbMC4uJGJhdGNoXTsKKworCQkjIHBhdHRlcm4gJ3BhZ2UxfHBhZ2UyfC4uLicgcmVxdWlyZWQgYnkgdGhlIEFQSQorCQlteSAkbXdfdGl0bGVzID0gam9pbignfCcsIEBzbGljZSk7CisKKwkJIyBNZWRpYSBmaWxlcyBjb3VsZCBiZSBpbmNsdWRlZCBvciBsaW5rZWQgZnJvbQorCQkjIGEgcGFnZSwgZ2V0IGFsbCByZWxhdGVkCisJCW15ICRxdWVyeSA9IHsKKwkJCWFjdGlvbiA9PiAncXVlcnknLAorCQkJcHJvcCA9PiAnbGlua3N8aW1hZ2VzJywKKwkJCXRpdGxlcyA9PiAkbXdfdGl0bGVzLAorCQkJcGxuYW1lc3BhY2UgPT4gZ2V0X213X25hbWVzcGFjZV9pZCgnRmlsZScpLAorCQkJcGxsaW1pdCA9PiAnbWF4JworCQl9OworCQlteSAkcmVzdWx0ID0gJG1lZGlhd2lraS0+YXBpKCRxdWVyeSk7CisKKwkJd2hpbGUgKG15ICgkaWQsICRwYWdlKSA9IGVhY2goJXskcmVzdWx0LT57cXVlcnl9LT57cGFnZXN9fSkpIHsKKwkJCW15IEBtZWRpYV90aXRsZXM7CisJCQlpZiAoZGVmaW5lZCgkcGFnZS0+e2xpbmtzfSkpIHsKKwkJCQlteSBAbGlua190aXRsZXMKKwkJCQkgICAgPSBtYXAgeyAkXy0+e3RpdGxlfSB9IEB7JHBhZ2UtPntsaW5rc319OworCQkJCXB1c2goQG1lZGlhX3RpdGxlcywgQGxpbmtfdGl0bGVzKTsKKwkJCX0KKwkJCWlmIChkZWZpbmVkKCRwYWdlLT57aW1hZ2VzfSkpIHsKKwkJCQlteSBAaW1hZ2VfdGl0bGVzCisJCQkJICAgID0gbWFwIHsgJF8tPnt0aXRsZX0gfSBAeyRwYWdlLT57aW1hZ2VzfX07CisJCQkJcHVzaChAbWVkaWFfdGl0bGVzLCBAaW1hZ2VfdGl0bGVzKTsKKwkJCX0KKwkJCWlmIChAbWVkaWFfdGl0bGVzKSB7CisJCQkJZ2V0X213X3BhZ2VfbGlzdChcQG1lZGlhX3RpdGxlcywgJHBhZ2VzKTsKKwkJCX0KKwkJfQorCisJCUB0aXRsZXMgPSBAdGl0bGVzWygkYmF0Y2grMSkuLiQjdGl0bGVzXTsKKwl9CisJcmV0dXJuOworfQorCitzdWIgZ2V0X213X21lZGlhZmlsZV9mb3JfcGFnZV9yZXZpc2lvbiB7CisJIyBOYW1lIG9mIHRoZSBmaWxlIG9uIFdpa2ksIHdpdGggdGhlIHByZWZpeC4KKwlteSAkZmlsZW5hbWUgPSBzaGlmdDsKKwlteSAkdGltZXN0YW1wID0gc2hpZnQ7CisJbXkgJW1lZGlhZmlsZTsKKworCSMgU2VhcmNoIGlmIG9uIGEgbWVkaWEgZmlsZSB3aXRoIGdpdmVuIHRpbWVzdGFtcCBleGlzdHMgb24KKwkjIE1lZGlhV2lraS4gSW4gdGhhdCBjYXNlIGRvd25sb2FkIHRoZSBmaWxlLgorCW15ICRxdWVyeSA9IHsKKwkJYWN0aW9uID0+ICdxdWVyeScsCisJCXByb3AgPT4gJ2ltYWdlaW5mbycsCisJCXRpdGxlcyA9PiAiRmlsZToke2ZpbGVuYW1lfSIsCisJCWlpc3RhcnQgPT4gJHRpbWVzdGFtcCwKKwkJaWllbmQgPT4gJHRpbWVzdGFtcCwKKwkJaWlwcm9wID0+ICd0aW1lc3RhbXB8YXJjaGl2ZW5hbWV8dXJsJywKKwkJaWlsaW1pdCA9PiAxCisJfTsKKwlteSAkcmVzdWx0ID0gJG1lZGlhd2lraS0+YXBpKCRxdWVyeSk7CisKKwlteSAoJGZpbGVpZCwgJGZpbGUpID0gZWFjaCggJXskcmVzdWx0LT57cXVlcnl9LT57cGFnZXN9fSApOworCSMgSWYgbm90IGRlZmluZWQgaXQgbWVhbnMgdGhlcmUgaXMgbm8gcmV2aXNpb24gb2YgdGhlIGZpbGUgZm9yCisJIyBnaXZlbiB0aW1lc3RhbXAuCisJaWYgKGRlZmluZWQoJGZpbGUtPntpbWFnZWluZm99KSkgeworCQkkbWVkaWFmaWxle3RpdGxlfSA9ICRmaWxlbmFtZTsKKworCQlteSAkZmlsZWluZm8gPSBwb3AoQHskZmlsZS0+e2ltYWdlaW5mb319KTsKKwkJJG1lZGlhZmlsZXt0aW1lc3RhbXB9ID0gJGZpbGVpbmZvLT57dGltZXN0YW1wfTsKKwkJIyBNZWRpYXdpa2k6OkFQSSdzIGRvd25sb2FkIGZ1bmN0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBodHRwcyBVUkxzCisJCSMgYW5kIGNhbid0IGRvd25sb2FkIG9sZCB2ZXJzaW9ucyBvZiBmaWxlcy4KKwkJcHJpbnQgeypTVERFUlJ9ICJcdERvd25sb2FkaW5nIGZpbGUgJG1lZGlhZmlsZXt0aXRsZX0sIHZlcnNpb24gJG1lZGlhZmlsZXt0aW1lc3RhbXB9XG4iOworCQkkbWVkaWFmaWxle2NvbnRlbnR9ID0gZG93bmxvYWRfbXdfbWVkaWFmaWxlKCRmaWxlaW5mby0+e3VybH0pOworCX0KKwlyZXR1cm4gJW1lZGlhZmlsZTsKK30KKworc3ViIGRvd25sb2FkX213X21lZGlhZmlsZSB7CisJbXkgJGRvd25sb2FkX3VybCA9IHNoaWZ0OworCisJbXkgJHJlc3BvbnNlID0gJG1lZGlhd2lraS0+e3VhfS0+Z2V0KCRkb3dubG9hZF91cmwpOworCWlmICgkcmVzcG9uc2UtPmNvZGUgPT0gSFRUUF9DT0RFX09LKSB7CisJCSMgSXQgaXMgdGVtcHRpbmcgdG8gcmV0dXJuCisJCSMgJHJlc3BvbnNlLT5kZWNvZGVkX2NvbnRlbnQoe2NoYXJzZXQgPT4gIm5vbmUifSksIGJ1dAorCQkjIHdoZW4gZG9pbmcgc28sIHV0Zjg6OmRvd25ncmFkZSgkY29udGVudCkgZmFpbHMgd2l0aAorCQkjICJXaWRlIGNoYXJhY3RlciBpbiBzdWJyb3V0aW5lIGVudHJ5Ii4KKwkJJHJlc3BvbnNlLT5kZWNvZGUoKTsKKwkJcmV0dXJuICRyZXNwb25zZS0+Y29udGVudCgpOworCX0gZWxzZSB7CisJCXByaW50IHsqU1RERVJSfSAiRXJyb3IgZG93bmxvYWRpbmcgbWVkaWFmaWxlIGZyb20gOlxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICJVUkw6ICR7ZG93bmxvYWRfdXJsfVxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICdTZXJ2ZXIgcmVzcG9uc2U6ICcgLiAkcmVzcG9uc2UtPmNvZGUgLiBxeyB9IC4gJHJlc3BvbnNlLT5tZXNzYWdlIC4gIlxuIjsKKwkJZXhpdCAxOworCX0KK30KKworc3ViIGdldF9sYXN0X2xvY2FsX3JldmlzaW9uIHsKKwkjIEdldCBub3RlIHJlZ2FyZGluZyBsYXN0IG1lZGlhd2lraSByZXZpc2lvbgorCW15ICRub3RlID0gcnVuX2dpdCgibm90ZXMgLS1yZWY9JHtyZW1vdGVuYW1lfS9tZWRpYXdpa2kgc2hvdyByZWZzL21lZGlhd2lraS8ke3JlbW90ZW5hbWV9L21hc3RlciAyPi9kZXYvbnVsbCIpOworCW15IEBub3RlX2luZm8gPSBzcGxpdCgvIC8sICRub3RlKTsKKworCW15ICRsYXN0cmV2aXNpb25fbnVtYmVyOworCWlmICghKGRlZmluZWQoJG5vdGVfaW5mb1swXSkgJiYgJG5vdGVfaW5mb1swXSBlcSAnbWVkaWF3aWtpX3JldmlzaW9uOicpKSB7CisJCXByaW50IHsqU1RERVJSfSAnTm8gcHJldmlvdXMgbWVkaWF3aWtpIHJldmlzaW9uIGZvdW5kJzsKKwkJJGxhc3RyZXZpc2lvbl9udW1iZXIgPSAwOworCX0gZWxzZSB7CisJCSMgTm90ZXMgYXJlIGZvcm1hdHRlZCA6IG1lZGlhd2lraV9yZXZpc2lvbjogI251bWJlcgorCQkkbGFzdHJldmlzaW9uX251bWJlciA9ICRub3RlX2luZm9bMV07CisJCWNob21wKCRsYXN0cmV2aXNpb25fbnVtYmVyKTsKKwkJcHJpbnQgeypTVERFUlJ9ICJMYXN0IGxvY2FsIG1lZGlhd2lraSByZXZpc2lvbiBmb3VuZCBpcyAke2xhc3RyZXZpc2lvbl9udW1iZXJ9IjsKKwl9CisJcmV0dXJuICRsYXN0cmV2aXNpb25fbnVtYmVyOworfQorCisjIEdldCB0aGUgbGFzdCByZW1vdGUgcmV2aXNpb24gd2l0aG91dCB0YWtpbmcgaW4gYWNjb3VudCB3aGljaCBwYWdlcyBhcmUKKyMgdHJhY2tlZCBvciBub3QuIFRoaXMgZnVuY3Rpb24gbWFrZXMgYSBzaW5nbGUgcmVxdWVzdCB0byB0aGUgd2lraSB0aHVzCisjIGF2b2lkIGEgbG9vcCBvbnRvIGFsbCB0cmFja2VkIHBhZ2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGhlIGZldGNoLWJ5LXJldgorIyBvcHRpb24uCitzdWIgZ2V0X2xhc3RfZ2xvYmFsX3JlbW90ZV9yZXYgeworCSRtZWRpYXdpa2kgPSBjb25uZWN0X21heWJlKCRtZWRpYXdpa2ksICRyZW1vdGVuYW1lLCAkdXJsKTsKKworCW15ICRxdWVyeSA9IHsKKwkJYWN0aW9uID0+ICdxdWVyeScsCisJCWxpc3QgPT4gJ3JlY2VudGNoYW5nZXMnLAorCQlwcm9wID0+ICdyZXZpc2lvbnMnLAorCQlyY2xpbWl0ID0+ICcxJywKKwkJcmNkaXIgPT4gJ29sZGVyJywKKwl9OworCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5hcGkoJHF1ZXJ5KTsKKwlyZXR1cm4gJHJlc3VsdC0+e3F1ZXJ5fS0+e3JlY2VudGNoYW5nZXN9WzBdLT57cmV2aWR9OworfQorCisjIEdldCB0aGUgbGFzdCByZW1vdGUgcmV2aXNpb24gY29uY2VybmluZyB0aGUgdHJhY2tlZCBwYWdlcyBhbmQgdGhlIHRyYWNrZWQKKyMgY2F0ZWdvcmllcy4KK3N1YiBnZXRfbGFzdF9yZW1vdGVfcmV2aXNpb24geworCSRtZWRpYXdpa2kgPSBjb25uZWN0X21heWJlKCRtZWRpYXdpa2ksICRyZW1vdGVuYW1lLCAkdXJsKTsKKworCW15ICVwYWdlc19oYXNoID0gZ2V0X213X3BhZ2VzKCk7CisJbXkgQHBhZ2VzID0gdmFsdWVzKCVwYWdlc19oYXNoKTsKKworCW15ICRtYXhfcmV2X251bSA9IDA7CisKKwlwcmludCB7KlNUREVSUn0gIkdldHRpbmcgbGFzdCByZXZpc2lvbiBpZCBvbiB0cmFja2VkIHBhZ2VzLi4uXG4iOworCisJZm9yZWFjaCBteSAkcGFnZSAoQHBhZ2VzKSB7CisJCW15ICRpZCA9ICRwYWdlLT57cGFnZWlkfTsKKworCQlteSAkcXVlcnkgPSB7CisJCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJCXByb3AgPT4gJ3JldmlzaW9ucycsCisJCQlydnByb3AgPT4gJ2lkc3x0aW1lc3RhbXAnLAorCQkJcGFnZWlkcyA9PiAkaWQsCisJCX07CisKKwkJbXkgJHJlc3VsdCA9ICRtZWRpYXdpa2ktPmFwaSgkcXVlcnkpOworCisJCW15ICRsYXN0cmV2ID0gcG9wKEB7JHJlc3VsdC0+e3F1ZXJ5fS0+e3BhZ2VzfS0+eyRpZH0tPntyZXZpc2lvbnN9fSk7CisKKwkJJGJhc2V0aW1lc3RhbXBzeyRsYXN0cmV2LT57cmV2aWR9fSA9ICRsYXN0cmV2LT57dGltZXN0YW1wfTsKKworCQkkbWF4X3Jldl9udW0gPSAoJGxhc3RyZXYtPntyZXZpZH0gPiAkbWF4X3Jldl9udW0gPyAkbGFzdHJldi0+e3JldmlkfSA6ICRtYXhfcmV2X251bSk7CisJfQorCisJcHJpbnQgeypTVERFUlJ9ICJMYXN0IHJlbW90ZSByZXZpc2lvbiBmb3VuZCBpcyAkbWF4X3Jldl9udW0uXG4iOworCXJldHVybiAkbWF4X3Jldl9udW07Cit9CisKKyMgQ2xlYW4gY29udGVudCBiZWZvcmUgc2VuZGluZyBpdCB0byBNZWRpYVdpa2kKK3N1YiBtZWRpYXdpa2lfY2xlYW4geworCW15ICRzdHJpbmcgPSBzaGlmdDsKKwlteSAkcGFnZV9jcmVhdGVkID0gc2hpZnQ7CisJIyBNZWRpYXdpa2kgZG9lcyBub3QgYWxsb3cgYmxhbmsgc3BhY2UgYXQgdGhlIGVuZCBvZiBhIHBhZ2UgYW5kIGVuZHMgd2l0aCBhIHNpbmdsZSBcbi4KKwkjIFRoaXMgZnVuY3Rpb24gcmlnaHQgdHJpbXMgYSBzdHJpbmcgYW5kIGFkZHMgYSBcbiBhdCB0aGUgZW5kIHRvIGZvbGxvdyB0aGlzIHJ1bGUKKwkkc3RyaW5nID1+IHMvXHMrJC8vOworCWlmICgkc3RyaW5nIGVxIEVNUFRZICYmICRwYWdlX2NyZWF0ZWQpIHsKKwkJIyBDcmVhdGluZyBlbXB0eSBwYWdlcyBpcyBmb3JiaWRkZW4uCisJCSRzdHJpbmcgPSBFTVBUWV9DT05URU5UOworCX0KKwlyZXR1cm4gJHN0cmluZy4iXG4iOworfQorCisjIEZpbHRlciBhcHBsaWVkIG9uIE1lZGlhV2lraSBkYXRhIGJlZm9yZSBhZGRpbmcgdGhlbSB0byBHaXQKK3N1YiBtZWRpYXdpa2lfc211ZGdlIHsKKwlteSAkc3RyaW5nID0gc2hpZnQ7CisJaWYgKCRzdHJpbmcgZXEgRU1QVFlfQ09OVEVOVCkgeworCQkkc3RyaW5nID0gRU1QVFk7CisJfQorCSMgVGhpcyBcbiBpcyBpbXBvcnRhbnQuIFRoaXMgaXMgZHVlIHRvIG1lZGlhd2lraSdzIHdheSB0byBoYW5kbGUgZW5kIG9mIGZpbGVzLgorCXJldHVybiAiJHtzdHJpbmd9XG4iOworfQorCitzdWIgbGl0ZXJhbF9kYXRhIHsKKwlteSAoJGNvbnRlbnQpID0gQF87CisJcHJpbnQgeypTVERPVVR9ICdkYXRhICcsIGJ5dGVzOjpsZW5ndGgoJGNvbnRlbnQpLCAiXG4iLCAkY29udGVudDsKKwlyZXR1cm47Cit9CisKK3N1YiBsaXRlcmFsX2RhdGFfcmF3IHsKKwkjIE91dHB1dCBwb3NzaWJseSBiaW5hcnkgY29udGVudC4KKwlteSAoJGNvbnRlbnQpID0gQF87CisJIyBBdm9pZCBjb25mdXNpb24gYmV0d2VlbiBzaXplIGluIGJ5dGVzIGFuZCBpbiBjaGFyYWN0ZXJzCisJdXRmODo6ZG93bmdyYWRlKCRjb250ZW50KTsKKwliaW5tb2RlIFNURE9VVCwgJzpyYXcnOworCXByaW50IHsqU1RET1VUfSAnZGF0YSAnLCBieXRlczo6bGVuZ3RoKCRjb250ZW50KSwgIlxuIiwgJGNvbnRlbnQ7CisJYmlubW9kZSBTVERPVVQsICc6ZW5jb2RpbmcoVVRGLTgpJzsKKwlyZXR1cm47Cit9CisKK3N1YiBtd19jYXBhYmlsaXRpZXMgeworCSMgUmV2aXNpb25zIGFyZSBpbXBvcnRlZCB0byB0aGUgcHJpdmF0ZSBuYW1lc3BhY2UKKwkjIHJlZnMvbWVkaWF3aWtpLyRyZW1vdGVuYW1lLyBieSB0aGUgaGVscGVyIGFuZCBmZXRjaGVkIGludG8KKwkjIHJlZnMvcmVtb3Rlcy8kcmVtb3RlbmFtZSBsYXRlciBieSBmZXRjaC4KKwlwcmludCB7KlNURE9VVH0gInJlZnNwZWMgcmVmcy9oZWFkcy8qOnJlZnMvbWVkaWF3aWtpLyR7cmVtb3RlbmFtZX0vKlxuIjsKKwlwcmludCB7KlNURE9VVH0gImltcG9ydFxuIjsKKwlwcmludCB7KlNURE9VVH0gImxpc3RcbiI7CisJcHJpbnQgeypTVERPVVR9ICJwdXNoXG4iOworCWlmICgkZHVtYl9wdXNoKSB7CisJCXByaW50IHsqU1RET1VUfSAibm8tcHJpdmF0ZS11cGRhdGVcbiI7CisJfQorCXByaW50IHsqU1RET1VUfSAiXG4iOworCXJldHVybjsKK30KKworc3ViIG13X2xpc3QgeworCSMgTWVkaWFXaWtpIGRvIG5vdCBoYXZlIGJyYW5jaGVzLCB3ZSBjb25zaWRlciBvbmUgYnJhbmNoIGFyYml0cmFyaWx5CisJIyBjYWxsZWQgbWFzdGVyLCBhbmQgSEVBRCBwb2ludGluZyB0byBpdC4KKwlwcmludCB7KlNURE9VVH0gIj8gcmVmcy9oZWFkcy9tYXN0ZXJcbiI7CisJcHJpbnQgeypTVERPVVR9ICJcQHJlZnMvaGVhZHMvbWFzdGVyIEhFQURcbiI7CisJcHJpbnQgeypTVERPVVR9ICJcbiI7CisJcmV0dXJuOworfQorCitzdWIgbXdfb3B0aW9uIHsKKwlwcmludCB7KlNUREVSUn0gInJlbW90ZS1oZWxwZXIgY29tbWFuZCAnb3B0aW9uICRfWzBdJyBub3QgeWV0IGltcGxlbWVudGVkXG4iOworCXByaW50IHsqU1RET1VUfSAidW5zdXBwb3J0ZWRcbiI7CisJcmV0dXJuOworfQorCitzdWIgZmV0Y2hfbXdfcmV2aXNpb25zX2Zvcl9wYWdlIHsKKwlteSAkcGFnZSA9IHNoaWZ0OworCW15ICRpZCA9IHNoaWZ0OworCW15ICRmZXRjaF9mcm9tID0gc2hpZnQ7CisJbXkgQHBhZ2VfcmV2cyA9ICgpOworCW15ICRxdWVyeSA9IHsKKwkJYWN0aW9uID0+ICdxdWVyeScsCisJCXByb3AgPT4gJ3JldmlzaW9ucycsCisJCXJ2cHJvcCA9PiAnaWRzJywKKwkJcnZkaXIgPT4gJ25ld2VyJywKKwkJcnZzdGFydGlkID0+ICRmZXRjaF9mcm9tLAorCQlydmxpbWl0ID0+IDUwMCwKKwkJcGFnZWlkcyA9PiAkaWQsCisKKwkJIyBMZXQgTWVkaWFXaWtpIGtub3cgdGhhdCB3ZSBzdXBwb3J0IHRoZSBsYXRlc3QgQVBJLgorCQljb250aW51ZSA9PiAnJywKKwl9OworCisJbXkgJHJldm51bSA9IDA7CisJIyBHZXQgNTAwIHJldmlzaW9ucyBhdCBhIHRpbWUgZHVlIHRvIHRoZSBtZWRpYXdpa2kgYXBpIGxpbWl0CisJd2hpbGUgKDEpIHsKKwkJbXkgJHJlc3VsdCA9ICRtZWRpYXdpa2ktPmFwaSgkcXVlcnkpOworCisJCSMgUGFyc2UgZWFjaCBvZiB0aG9zZSA1MDAgcmV2aXNpb25zCisJCWZvcmVhY2ggbXkgJHJldmlzaW9uIChAeyRyZXN1bHQtPntxdWVyeX0tPntwYWdlc30tPnskaWR9LT57cmV2aXNpb25zfX0pIHsKKwkJCW15ICRwYWdlX3Jldl9pZHM7CisJCQkkcGFnZV9yZXZfaWRzLT57cGFnZWlkfSA9ICRwYWdlLT57cGFnZWlkfTsKKwkJCSRwYWdlX3Jldl9pZHMtPntyZXZpZH0gPSAkcmV2aXNpb24tPntyZXZpZH07CisJCQlwdXNoKEBwYWdlX3JldnMsICRwYWdlX3Jldl9pZHMpOworCQkJJHJldm51bSsrOworCQl9CisKKwkJaWYgKCRyZXN1bHQtPnsncXVlcnktY29udGludWUnfSkgeyAjIEZvciBsZWdhY3kgQVBJcworCQkJJHF1ZXJ5LT57cnZzdGFydGlkfSA9ICRyZXN1bHQtPnsncXVlcnktY29udGludWUnfS0+e3JldmlzaW9uc30tPntydnN0YXJ0aWR9OworCQl9IGVsc2lmICgkcmVzdWx0LT57Y29udGludWV9KSB7ICMgRm9yIG5ld2VyIEFQSXMKKwkJCSRxdWVyeS0+e3J2c3RhcnRpZH0gPSAkcmVzdWx0LT57Y29udGludWV9LT57cnZjb250aW51ZX07CisJCQkkcXVlcnktPntjb250aW51ZX0gPSAkcmVzdWx0LT57Y29udGludWV9LT57Y29udGludWV9OworCQl9IGVsc2UgeworCQkJbGFzdDsKKwkJfQorCX0KKwlpZiAoJHNoYWxsb3dfaW1wb3J0ICYmIEBwYWdlX3JldnMpIHsKKwkJcHJpbnQgeypTVERFUlJ9ICIgIEZvdW5kIDEgcmV2aXNpb24gKHNoYWxsb3cgaW1wb3J0KS5cbiI7CisJCUBwYWdlX3JldnMgPSBzb3J0IHskYi0+e3JldmlkfSA8PT4gJGEtPntyZXZpZH19IChAcGFnZV9yZXZzKTsKKwkJcmV0dXJuICRwYWdlX3JldnNbMF07CisJfQorCXByaW50IHsqU1RERVJSfSAiICBGb3VuZCAke3Jldm51bX0gcmV2aXNpb24ocykuXG4iOworCXJldHVybiBAcGFnZV9yZXZzOworfQorCitzdWIgZmV0Y2hfbXdfcmV2aXNpb25zIHsKKwlteSAkcGFnZXMgPSBzaGlmdDsgbXkgQHBhZ2VzID0gQHskcGFnZXN9OworCW15ICRmZXRjaF9mcm9tID0gc2hpZnQ7CisKKwlteSBAcmV2aXNpb25zID0gKCk7CisJbXkgJG4gPSAxOworCWZvcmVhY2ggbXkgJHBhZ2UgKEBwYWdlcykgeworCQlteSAkaWQgPSAkcGFnZS0+e3BhZ2VpZH07CisJCXByaW50IHsqU1RERVJSfSAicGFnZSAke259LyIsIHNjYWxhcihAcGFnZXMpLCAnOiAnLCAkcGFnZS0+e3RpdGxlfSwgIlxuIjsKKwkJJG4rKzsKKwkJbXkgQHBhZ2VfcmV2cyA9IGZldGNoX213X3JldmlzaW9uc19mb3JfcGFnZSgkcGFnZSwgJGlkLCAkZmV0Y2hfZnJvbSk7CisJCUByZXZpc2lvbnMgPSAoQHBhZ2VfcmV2cywgQHJldmlzaW9ucyk7CisJfQorCisJcmV0dXJuICgkbiwgQHJldmlzaW9ucyk7Cit9CisKK3N1YiBmZV9lc2NhcGVfcGF0aCB7CisgICAgbXkgJHBhdGggPSBzaGlmdDsKKyAgICAkcGF0aCA9fiBzL1xcL1xcXFwvZzsKKyAgICAkcGF0aCA9fiBzLyIvXFwiL2c7CisgICAgJHBhdGggPX4gcy9cbi9cXG4vZzsKKyAgICByZXR1cm4gcXEoIiR7cGF0aH0iKTsKK30KKworc3ViIGltcG9ydF9maWxlX3JldmlzaW9uIHsKKwlteSAkY29tbWl0ID0gc2hpZnQ7CisJbXkgJWNvbW1pdCA9ICV7JGNvbW1pdH07CisJbXkgJGZ1bGxfaW1wb3J0ID0gc2hpZnQ7CisJbXkgJG4gPSBzaGlmdDsKKwlteSAkbWVkaWFmaWxlID0gc2hpZnQ7CisJbXkgJW1lZGlhZmlsZTsKKwlpZiAoJG1lZGlhZmlsZSkgeworCQklbWVkaWFmaWxlID0gJXskbWVkaWFmaWxlfTsKKwl9CisKKwlteSAkdGl0bGUgPSAkY29tbWl0e3RpdGxlfTsKKwlteSAkY29tbWVudCA9ICRjb21taXR7Y29tbWVudH07CisJbXkgJGNvbnRlbnQgPSAkY29tbWl0e2NvbnRlbnR9OworCW15ICRhdXRob3IgPSAkY29tbWl0e2F1dGhvcn07CisJbXkgJGRhdGUgPSAkY29tbWl0e2RhdGV9OworCisJcHJpbnQgeypTVERPVVR9ICJjb21taXQgcmVmcy9tZWRpYXdpa2kvJHtyZW1vdGVuYW1lfS9tYXN0ZXJcbiI7CisJcHJpbnQgeypTVERPVVR9ICJtYXJrIDoke259XG4iOworCXByaW50IHsqU1RET1VUfSAiY29tbWl0dGVyICR7YXV0aG9yfSA8JHthdXRob3J9XEAke3dpa2lfbmFtZX0+ICIgLiAkZGF0ZS0+ZXBvY2ggLiAiICswMDAwXG4iOworCWxpdGVyYWxfZGF0YSgkY29tbWVudCk7CisKKwkjIElmIGl0J3Mgbm90IGEgY2xvbmUsIHdlIG5lZWQgdG8ga25vdyB3aGVyZSB0byBzdGFydCBmcm9tCisJaWYgKCEkZnVsbF9pbXBvcnQgJiYgJG4gPT0gMSkgeworCQlwcmludCB7KlNURE9VVH0gImZyb20gcmVmcy9tZWRpYXdpa2kvJHtyZW1vdGVuYW1lfS9tYXN0ZXJeMFxuIjsKKwl9CisJaWYgKCRjb250ZW50IG5lIERFTEVURURfQ09OVEVOVCkgeworCQlwcmludCB7KlNURE9VVH0gJ00gNjQ0IGlubGluZSAnIC4KKwkJICAgIGZlX2VzY2FwZV9wYXRoKCIke3RpdGxlfS5tdyIpIC4gIlxuIjsKKwkJbGl0ZXJhbF9kYXRhKCRjb250ZW50KTsKKwkJaWYgKCVtZWRpYWZpbGUpIHsKKwkJCXByaW50IHsqU1RET1VUfSAnTSA2NDQgaW5saW5lICcKKwkJCSAgICAuIGZlX2VzY2FwZV9wYXRoKCRtZWRpYWZpbGV7dGl0bGV9KSAuICJcbiI7CisJCQlsaXRlcmFsX2RhdGFfcmF3KCRtZWRpYWZpbGV7Y29udGVudH0pOworCQl9CisJCXByaW50IHsqU1RET1VUfSAiXG5cbiI7CisJfSBlbHNlIHsKKwkJcHJpbnQgeypTVERPVVR9ICdEICcgLiBmZV9lc2NhcGVfcGF0aCgiJHt0aXRsZX0ubXciKSAuICJcbiI7CisJfQorCisJIyBtZWRpYXdpa2kgcmV2aXNpb24gbnVtYmVyIGluIHRoZSBnaXQgbm90ZQorCWlmICgkZnVsbF9pbXBvcnQgJiYgJG4gPT0gMSkgeworCQlwcmludCB7KlNURE9VVH0gInJlc2V0IHJlZnMvbm90ZXMvJHtyZW1vdGVuYW1lfS9tZWRpYXdpa2lcbiI7CisJfQorCXByaW50IHsqU1RET1VUfSAiY29tbWl0IHJlZnMvbm90ZXMvJHtyZW1vdGVuYW1lfS9tZWRpYXdpa2lcbiI7CisJcHJpbnQgeypTVERPVVR9ICJjb21taXR0ZXIgJHthdXRob3J9IDwke2F1dGhvcn1cQCR7d2lraV9uYW1lfT4gIiAuICRkYXRlLT5lcG9jaCAuICIgKzAwMDBcbiI7CisJbGl0ZXJhbF9kYXRhKCdOb3RlIGFkZGVkIGJ5IGdpdC1tZWRpYXdpa2kgZHVyaW5nIGltcG9ydCcpOworCWlmICghJGZ1bGxfaW1wb3J0ICYmICRuID09IDEpIHsKKwkJcHJpbnQgeypTVERPVVR9ICJmcm9tIHJlZnMvbm90ZXMvJHtyZW1vdGVuYW1lfS9tZWRpYXdpa2leMFxuIjsKKwl9CisJcHJpbnQgeypTVERPVVR9ICJOIGlubGluZSA6JHtufVxuIjsKKwlsaXRlcmFsX2RhdGEoIm1lZGlhd2lraV9yZXZpc2lvbjogJGNvbW1pdHttd19yZXZpc2lvbn0iKTsKKwlwcmludCB7KlNURE9VVH0gIlxuXG4iOworCXJldHVybjsKK30KKworIyBwYXJzZSBhIHNlcXVlbmNlIG9mCisjIDxjbWQ+IDxhcmcxPgorIyA8Y21kPiA8YXJnMj4KKyMgXG4KKyMgKGxpa2UgYmF0Y2ggc2VxdWVuY2Ugb2YgaW1wb3J0IGFuZCBzZXF1ZW5jZSBvZiBwdXNoIHN0YXRlbWVudHMpCitzdWIgZ2V0X21vcmVfcmVmcyB7CisJbXkgJGNtZCA9IHNoaWZ0OworCW15IEByZWZzOworCXdoaWxlICgxKSB7CisJCW15ICRsaW5lID0gPFNURElOPjsKKwkJaWYgKCRsaW5lID1+IC9eJGNtZCAoLiopJC8pIHsKKwkJCXB1c2goQHJlZnMsICQxKTsKKwkJfSBlbHNpZiAoJGxpbmUgZXEgIlxuIikgeworCQkJcmV0dXJuIEByZWZzOworCQl9IGVsc2UgeworCQkJZGllKCJJbnZhbGlkIGNvbW1hbmQgaW4gYSAnJGNtZCcgYmF0Y2g6ICRfXG4iKTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N1YiBtd19pbXBvcnQgeworCSMgbXVsdGlwbGUgaW1wb3J0IGNvbW1hbmRzIGNhbiBmb2xsb3cgZWFjaCBvdGhlci4KKwlteSBAcmVmcyA9IChzaGlmdCwgZ2V0X21vcmVfcmVmcygnaW1wb3J0JykpOworCWZvcmVhY2ggbXkgJHJlZiAoQHJlZnMpIHsKKwkJbXdfaW1wb3J0X3JlZigkcmVmKTsKKwl9CisJcHJpbnQgeypTVERPVVR9ICJkb25lXG4iOworCXJldHVybjsKK30KKworc3ViIG13X2ltcG9ydF9yZWYgeworCW15ICRyZWYgPSBzaGlmdDsKKwkjIFRoZSByZW1vdGUgaGVscGVyIHdpbGwgY2FsbCAiaW1wb3J0IEhFQUQiIGFuZAorCSMgImltcG9ydCByZWZzL2hlYWRzL21hc3RlciIuCisJIyBTaW5jZSBIRUFEIGlzIGEgc3ltYm9saWMgcmVmIHRvIG1hc3RlciAoYnkgY29udmVudGlvbiwKKwkjIGZvbGxvd2VkIGJ5IHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgImxpc3QiIHRoYXQgd2UgZ2F2ZSksCisJIyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGluIHRoaXMgY2FzZS4KKwlpZiAoJHJlZiBlcSAnSEVBRCcpIHsKKwkJcmV0dXJuOworCX0KKworCSRtZWRpYXdpa2kgPSBjb25uZWN0X21heWJlKCRtZWRpYXdpa2ksICRyZW1vdGVuYW1lLCAkdXJsKTsKKworCXByaW50IHsqU1RERVJSfSAiU2VhcmNoaW5nIHJldmlzaW9ucy4uLlxuIjsKKwlteSAkbGFzdF9sb2NhbCA9IGdldF9sYXN0X2xvY2FsX3JldmlzaW9uKCk7CisJbXkgJGZldGNoX2Zyb20gPSAkbGFzdF9sb2NhbCArIDE7CisJaWYgKCRmZXRjaF9mcm9tID09IDEpIHsKKwkJcHJpbnQgeypTVERFUlJ9ICIsIGZldGNoaW5nIGZyb20gYmVnaW5uaW5nLlxuIjsKKwl9IGVsc2UgeworCQlwcmludCB7KlNUREVSUn0gIiwgZmV0Y2hpbmcgZnJvbSBoZXJlLlxuIjsKKwl9CisKKwlteSAkbiA9IDA7CisJaWYgKCRmZXRjaF9zdHJhdGVneSBlcSAnYnlfcmV2JykgeworCQlwcmludCB7KlNUREVSUn0gIkZldGNoaW5nICYgd3JpdGluZyBleHBvcnQgZGF0YSBieSByZXZzLi4uXG4iOworCQkkbiA9IG13X2ltcG9ydF9yZWZfYnlfcmV2cygkZmV0Y2hfZnJvbSk7CisJfSBlbHNpZiAoJGZldGNoX3N0cmF0ZWd5IGVxICdieV9wYWdlJykgeworCQlwcmludCB7KlNUREVSUn0gIkZldGNoaW5nICYgd3JpdGluZyBleHBvcnQgZGF0YSBieSBwYWdlcy4uLlxuIjsKKwkJJG4gPSBtd19pbXBvcnRfcmVmX2J5X3BhZ2VzKCRmZXRjaF9mcm9tKTsKKwl9IGVsc2UgeworCQlwcmludCB7KlNUREVSUn0gcXEoZmF0YWw6IGludmFsaWQgZmV0Y2ggc3RyYXRlZ3kgIiR7ZmV0Y2hfc3RyYXRlZ3l9Ii5cbik7CisJCXByaW50IHsqU1RERVJSfSAiQ2hlY2sgeW91ciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyByZW1vdGUuJHtyZW1vdGVuYW1lfS5mZXRjaFN0cmF0ZWd5IGFuZCBtZWRpYXdpa2kuZmV0Y2hTdHJhdGVneVxuIjsKKwkJZXhpdCAxOworCX0KKworCWlmICgkZmV0Y2hfZnJvbSA9PSAxICYmICRuID09IDApIHsKKwkJcHJpbnQgeypTVERFUlJ9ICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IE1lZGlhV2lraS5cbiI7CisJCSMgU29tZXRoaW5nIGhhcyB0byBiZSBkb25lIHJlbW90ZS1oZWxwZXIgc2lkZS4gSWYgbm90aGluZyBpcyBkb25lLCBhbiBlcnJvciBpcworCQkjIHRocm93biBzYXlpbmcgdGhhdCBIRUFEIGlzIHJlZmVycmluZyB0byB1bmtub3duIG9iamVjdCAwMDAwMDAwMDAwMDAwMDAwMDAwCisJCSMgYW5kIHRoZSBjbG9uZSBmYWlscy4KKwl9CisJcmV0dXJuOworfQorCitzdWIgbXdfaW1wb3J0X3JlZl9ieV9wYWdlcyB7CisKKwlteSAkZmV0Y2hfZnJvbSA9IHNoaWZ0OworCW15ICVwYWdlc19oYXNoID0gZ2V0X213X3BhZ2VzKCk7CisJbXkgQHBhZ2VzID0gdmFsdWVzKCVwYWdlc19oYXNoKTsKKworCW15ICgkbiwgQHJldmlzaW9ucykgPSBmZXRjaF9td19yZXZpc2lvbnMoXEBwYWdlcywgJGZldGNoX2Zyb20pOworCisJQHJldmlzaW9ucyA9IHNvcnQgeyRhLT57cmV2aWR9IDw9PiAkYi0+e3JldmlkfX0gQHJldmlzaW9uczsKKwlteSBAcmV2aXNpb25faWRzID0gbWFwIHsgJF8tPntyZXZpZH0gfSBAcmV2aXNpb25zOworCisJcmV0dXJuIG13X2ltcG9ydF9yZXZpZHMoJGZldGNoX2Zyb20sIFxAcmV2aXNpb25faWRzLCBcJXBhZ2VzX2hhc2gpOworfQorCitzdWIgbXdfaW1wb3J0X3JlZl9ieV9yZXZzIHsKKworCW15ICRmZXRjaF9mcm9tID0gc2hpZnQ7CisJbXkgJXBhZ2VzX2hhc2ggPSBnZXRfbXdfcGFnZXMoKTsKKworCW15ICRsYXN0X3JlbW90ZSA9IGdldF9sYXN0X2dsb2JhbF9yZW1vdGVfcmV2KCk7CisJbXkgQHJldmlzaW9uX2lkcyA9ICRmZXRjaF9mcm9tLi4kbGFzdF9yZW1vdGU7CisJcmV0dXJuIG13X2ltcG9ydF9yZXZpZHMoJGZldGNoX2Zyb20sIFxAcmV2aXNpb25faWRzLCBcJXBhZ2VzX2hhc2gpOworfQorCisjIEltcG9ydCByZXZpc2lvbnMgZ2l2ZW4gaW4gc2Vjb25kIGFyZ3VtZW50IChhcnJheSBvZiBpbnRlZ2VycykuCisjIE9ubHkgcGFnZXMgYXBwZWFyaW5nIGluIHRoZSB0aGlyZCBhcmd1bWVudCAoaGFzaCBpbmRleGVkIGJ5IHBhZ2UgdGl0bGVzKQorIyB3aWxsIGJlIGltcG9ydGVkLgorc3ViIG13X2ltcG9ydF9yZXZpZHMgeworCW15ICRmZXRjaF9mcm9tID0gc2hpZnQ7CisJbXkgJHJldmlzaW9uX2lkcyA9IHNoaWZ0OworCW15ICRwYWdlcyA9IHNoaWZ0OworCisJbXkgJG4gPSAwOworCW15ICRuX2FjdHVhbCA9IDA7CisJbXkgJGxhc3RfdGltZXN0YW1wID0gMDsgIyBQbGFjZWhvbGRlciBpbiBjYXNlICRyZXYtPnRpbWVzdGFtcCBpcyB1bmRlZmluZWQKKworCWZvcmVhY2ggbXkgJHBhZ2VyZXZpZCAoQHskcmV2aXNpb25faWRzfSkgeworCSAgICAgICAgIyBDb3VudCBwYWdlIGV2ZW4gaWYgd2Ugc2tpcCBpdCwgc2luY2Ugd2UgZGlzcGxheQorCQkjICRuLyR0b3RhbCBhbmQgJHRvdGFsIGluY2x1ZGVzIHNraXBwZWQgcGFnZXMuCisJCSRuKys7CisKKwkJIyBmZXRjaCB0aGUgY29udGVudCBvZiB0aGUgcGFnZXMKKwkJbXkgJHF1ZXJ5ID0geworCQkJYWN0aW9uID0+ICdxdWVyeScsCisJCQlwcm9wID0+ICdyZXZpc2lvbnMnLAorCQkJcnZwcm9wID0+ICdjb250ZW50fHRpbWVzdGFtcHxjb21tZW50fHVzZXJ8aWRzJywKKwkJCXJldmlkcyA9PiAkcGFnZXJldmlkLAorCQl9OworCisJCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5hcGkoJHF1ZXJ5KTsKKworCQlpZiAoISRyZXN1bHQpIHsKKwkJCWRpZSAiRmFpbGVkIHRvIHJldHJpZXZlIG1vZGlmaWVkIHBhZ2UgZm9yIHJldmlzaW9uICRwYWdlcmV2aWRcbiI7CisJCX0KKworCQlpZiAoZGVmaW5lZCgkcmVzdWx0LT57cXVlcnl9LT57YmFkcmV2aWRzfS0+eyRwYWdlcmV2aWR9KSkgeworCQkJIyBUaGUgcmV2aXNpb24gaWQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIHJlbW90ZSB3aWtpLgorCQkJbmV4dDsKKwkJfQorCisJCWlmICghZGVmaW5lZCgkcmVzdWx0LT57cXVlcnl9LT57cGFnZXN9KSkgeworCQkJZGllICJJbnZhbGlkIHJldmlzaW9uICR7cGFnZXJldmlkfS5cbiI7CisJCX0KKworCQlteSBAcmVzdWx0X3BhZ2VzID0gdmFsdWVzKCV7JHJlc3VsdC0+e3F1ZXJ5fS0+e3BhZ2VzfX0pOworCQlteSAkcmVzdWx0X3BhZ2UgPSAkcmVzdWx0X3BhZ2VzWzBdOworCQlteSAkcmV2ID0gJHJlc3VsdF9wYWdlc1swXS0+e3JldmlzaW9uc30tPlswXTsKKworCQlteSAkcGFnZV90aXRsZSA9ICRyZXN1bHRfcGFnZS0+e3RpdGxlfTsKKworCQlpZiAoIWV4aXN0cygkcGFnZXMtPnskcGFnZV90aXRsZX0pKSB7CisJCQlwcmludCB7KlNUREVSUn0gIiR7bn0vIiwgc2NhbGFyKEB7JHJldmlzaW9uX2lkc30pLAorCQkJCSI6IFNraXBwaW5nIHJldmlzaW9uICMkcmV2LT57cmV2aWR9IG9mICR7cGFnZV90aXRsZX1cbiI7CisJCQluZXh0OworCQl9CisKKwkJJG5fYWN0dWFsKys7CisKKwkJbXkgJWNvbW1pdDsKKwkJJGNvbW1pdHthdXRob3J9ID0gJHJldi0+e3VzZXJ9IHx8ICdBbm9ueW1vdXMnOworCQkkY29tbWl0e2NvbW1lbnR9ID0gJHJldi0+e2NvbW1lbnR9IHx8IEVNUFRZX01FU1NBR0U7CisJCSRjb21taXR7dGl0bGV9ID0gc211ZGdlX2ZpbGVuYW1lKCRwYWdlX3RpdGxlKTsKKwkJJGNvbW1pdHttd19yZXZpc2lvbn0gPSAkcmV2LT57cmV2aWR9OworCQkkY29tbWl0e2NvbnRlbnR9ID0gbWVkaWF3aWtpX3NtdWRnZSgkcmV2LT57JyonfSk7CisKKwkJaWYgKCFkZWZpbmVkKCRyZXYtPnt0aW1lc3RhbXB9KSkgeworCQkJJGxhc3RfdGltZXN0YW1wKys7CisJCX0gZWxzZSB7CisJCQkkbGFzdF90aW1lc3RhbXAgPSAkcmV2LT57dGltZXN0YW1wfTsKKwkJfQorCQkkY29tbWl0e2RhdGV9ID0gRGF0ZVRpbWU6OkZvcm1hdDo6SVNPODYwMS0+cGFyc2VfZGF0ZXRpbWUoJGxhc3RfdGltZXN0YW1wKTsKKworCQkjIERpZmZlcmVudGlhdGVzIGNsYXNzaWMgcGFnZXMgYW5kIG1lZGlhIGZpbGVzLgorCQlteSAoJG5hbWVzcGFjZSwgJGZpbGVuYW1lKSA9ICRwYWdlX3RpdGxlID1+IC9eKFteOl0qKTooLiopJC87CisJCW15ICVtZWRpYWZpbGU7CisJCWlmICgkbmFtZXNwYWNlKSB7CisJCQlteSAkaWQgPSBnZXRfbXdfbmFtZXNwYWNlX2lkKCRuYW1lc3BhY2UpOworCQkJaWYgKCRpZCAmJiAkaWQgPT0gZ2V0X213X25hbWVzcGFjZV9pZCgnRmlsZScpKSB7CisJCQkJJW1lZGlhZmlsZSA9IGdldF9td19tZWRpYWZpbGVfZm9yX3BhZ2VfcmV2aXNpb24oJGZpbGVuYW1lLCAkcmV2LT57dGltZXN0YW1wfSk7CisJCQl9CisJCX0KKwkJIyBJZiB0aGlzIGlzIGEgcmV2aXNpb24gb2YgdGhlIG1lZGlhIHBhZ2UgZm9yIG5ldyB2ZXJzaW9uCisJCSMgb2YgYSBmaWxlIGRvIG9uZSBjb21tb24gY29tbWl0IGZvciBib3RoIGZpbGUgYW5kIG1lZGlhIHBhZ2UuCisJCSMgRWxzZSBkbyBjb21taXQgb25seSBmb3IgdGhhdCBwYWdlLgorCQlwcmludCB7KlNUREVSUn0gIiR7bn0vIiwgc2NhbGFyKEB7JHJldmlzaW9uX2lkc30pLCAiOiBSZXZpc2lvbiAjJHJldi0+e3JldmlkfSBvZiAkY29tbWl0e3RpdGxlfVxuIjsKKwkJaW1wb3J0X2ZpbGVfcmV2aXNpb24oXCVjb21taXQsICgkZmV0Y2hfZnJvbSA9PSAxKSwgJG5fYWN0dWFsLCBcJW1lZGlhZmlsZSk7CisJfQorCisJcmV0dXJuICRuX2FjdHVhbDsKK30KKworc3ViIGVycm9yX25vbl9mYXN0X2ZvcndhcmQgeworCW15ICRhZHZpY2UgPSBydW5fZ2l0KCdjb25maWcgLS1ib29sIGFkdmljZS5wdXNoTm9uRmFzdEZvcndhcmQnKTsKKwljaG9tcCgkYWR2aWNlKTsKKwlpZiAoJGFkdmljZSBuZSAnZmFsc2UnKSB7CisJCSMgTmF0aXZlIGdpdC1wdXNoIHdvdWxkIHNob3cgdGhpcyBhZnRlciB0aGUgc3VtbWFyeS4KKwkJIyBXZSBjYW4ndCBhc2sgaXQgdG8gZGlzcGxheSBpdCBjbGVhbmx5LCBzbyBwcmludCBpdAorCQkjIG91cnNlbHZlcyBiZWZvcmUuCisJCXByaW50IHsqU1RERVJSfSAiVG8gcHJldmVudCB5b3UgZnJvbSBsb3NpbmcgaGlzdG9yeSwgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzIHdlcmUgcmVqZWN0ZWRcbiI7CisJCXByaW50IHsqU1RERVJSfSAiTWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuICdnaXQgcHVsbCcpIGJlZm9yZSBwdXNoaW5nIGFnYWluLiBTZWUgdGhlXG4iOworCQlwcmludCB7KlNUREVSUn0gIidOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIHNlY3Rpb24gb2YgJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuXG4iOworCX0KKwlwcmludCB7KlNURE9VVH0gcXEoZXJyb3IgJF9bMF0gIm5vbi1mYXN0LWZvcndhcmQiXG4pOworCXJldHVybiAwOworfQorCitzdWIgbXdfdXBsb2FkX2ZpbGUgeworCW15ICRjb21wbGV0ZV9maWxlX25hbWUgPSBzaGlmdDsKKwlteSAkbmV3X3NoYTEgPSBzaGlmdDsKKwlteSAkZXh0ZW5zaW9uID0gc2hpZnQ7CisJbXkgJGZpbGVfZGVsZXRlZCA9IHNoaWZ0OworCW15ICRzdW1tYXJ5ID0gc2hpZnQ7CisJbXkgJG5ld3JldmlkOworCW15ICRwYXRoID0gIkZpbGU6JHtjb21wbGV0ZV9maWxlX25hbWV9IjsKKwlteSAlaGFzaEZpbGVzID0gZ2V0X2FsbG93ZWRfZmlsZV9leHRlbnNpb25zKCk7CisJaWYgKCFleGlzdHMoJGhhc2hGaWxlc3skZXh0ZW5zaW9ufSkpIHsKKwkJcHJpbnQgeypTVERFUlJ9ICIke2NvbXBsZXRlX2ZpbGVfbmFtZX0gaXMgbm90IGEgcGVybWl0dGVkIGZpbGUgb24gdGhpcyB3aWtpLlxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICJDaGVjayB0aGUgY29uZmlndXJhdGlvbiBvZiBmaWxlIHVwbG9hZHMgaW4geW91ciBtZWRpYXdpa2kuXG4iOworCQlyZXR1cm4gJG5ld3JldmlkOworCX0KKwkjIERlbGV0aW5nIGFuZCB1cGxvYWRpbmcgYSBmaWxlIHJlcXVpcmVzIGEgcHJpdmlsZWdlZCB1c2VyCisJaWYgKCRmaWxlX2RlbGV0ZWQpIHsKKwkJJG1lZGlhd2lraSA9IGNvbm5lY3RfbWF5YmUoJG1lZGlhd2lraSwgJHJlbW90ZW5hbWUsICR1cmwpOworCQlteSAkcXVlcnkgPSB7CisJCQlhY3Rpb24gPT4gJ2RlbGV0ZScsCisJCQl0aXRsZSA9PiAkcGF0aCwKKwkJCXJlYXNvbiA9PiAkc3VtbWFyeQorCQl9OworCQlpZiAoISRtZWRpYXdpa2ktPmVkaXQoJHF1ZXJ5KSkgeworCQkJcHJpbnQgeypTVERFUlJ9ICJGYWlsZWQgdG8gZGVsZXRlIGZpbGUgb24gcmVtb3RlIHdpa2lcbiI7CisJCQlwcmludCB7KlNUREVSUn0gIkNoZWNrIHlvdXIgcGVybWlzc2lvbnMgb24gdGhlIHJlbW90ZSBzaXRlLiBFcnJvciBjb2RlOlxuIjsKKwkJCXByaW50IHsqU1RERVJSfSAkbWVkaWF3aWtpLT57ZXJyb3J9LT57Y29kZX0gLiAnOicgLiAkbWVkaWF3aWtpLT57ZXJyb3J9LT57ZGV0YWlsc307CisJCQlleGl0IDE7CisJCX0KKwl9IGVsc2UgeworCQkjIERvbid0IGxldCBwZXJsIHRyeSB0byBpbnRlcnByZXQgZmlsZSBjb250ZW50IGFzIFVURi04ID0+IHVzZSAicmF3IgorCQlteSAkY29udGVudCA9IHJ1bl9naXQoImNhdC1maWxlIGJsb2IgJHtuZXdfc2hhMX0iLCAncmF3Jyk7CisJCWlmICgkY29udGVudCBuZSBFTVBUWSkgeworCQkJJG1lZGlhd2lraSA9IGNvbm5lY3RfbWF5YmUoJG1lZGlhd2lraSwgJHJlbW90ZW5hbWUsICR1cmwpOworCQkJJG1lZGlhd2lraS0+e2NvbmZpZ30tPnt1cGxvYWRfdXJsfSA9CisJCQkJIiR7dXJsfS9pbmRleC5waHAvU3BlY2lhbDpVcGxvYWQiOworCQkJJG1lZGlhd2lraS0+ZWRpdCh7CisJCQkJYWN0aW9uID0+ICd1cGxvYWQnLAorCQkJCWZpbGVuYW1lID0+ICRjb21wbGV0ZV9maWxlX25hbWUsCisJCQkJY29tbWVudCA9PiAkc3VtbWFyeSwKKwkJCQlmaWxlID0+IFt1bmRlZiwKKwkJCQkJICRjb21wbGV0ZV9maWxlX25hbWUsCisJCQkJCSBDb250ZW50ID0+ICRjb250ZW50XSwKKwkJCQlpZ25vcmV3YXJuaW5ncyA9PiAxLAorCQkJfSwgeworCQkJCXNraXBfZW5jb2RpbmcgPT4gMQorCQkJfSApIHx8IGRpZSAkbWVkaWF3aWtpLT57ZXJyb3J9LT57Y29kZX0gLiAnOicKKwkJCQkgLiAkbWVkaWF3aWtpLT57ZXJyb3J9LT57ZGV0YWlsc30gLiAiXG4iOworCQkJbXkgJGxhc3RfZmlsZV9wYWdlID0gJG1lZGlhd2lraS0+Z2V0X3BhZ2Uoe3RpdGxlID0+ICRwYXRofSk7CisJCQkkbmV3cmV2aWQgPSAkbGFzdF9maWxlX3BhZ2UtPntyZXZpZH07CisJCQlwcmludCB7KlNUREVSUn0gIlB1c2hlZCBmaWxlOiAke25ld19zaGExfSAtICR7Y29tcGxldGVfZmlsZV9uYW1lfS5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCB7KlNUREVSUn0gIkVtcHR5IGZpbGUgJHtjb21wbGV0ZV9maWxlX25hbWV9IG5vdCBwdXNoZWQuXG4iOworCQl9CisJfQorCXJldHVybiAkbmV3cmV2aWQ7Cit9CisKK3N1YiBtd19wdXNoX2ZpbGUgeworCW15ICRkaWZmX2luZm8gPSBzaGlmdDsKKwkjICRkaWZmX2luZm8gY29udGFpbnMgYSBzdHJpbmcgaW4gdGhpcyBmb3JtYXQ6CisJIyAxMDA2NDQgMTAwNjQ0IDxzaGExX29mX2Jsb2JfYmVmb3JlX2NvbW1pdD4gPHNoYTFfb2ZfYmxvYl9ub3c+IDxzdGF0dXM+CisJbXkgQGRpZmZfaW5mb19zcGxpdCA9IHNwbGl0KC9bIFx0XS8sICRkaWZmX2luZm8pOworCisJIyBGaWxlbmFtZSwgaW5jbHVkaW5nIC5tdyBleHRlbnNpb24KKwlteSAkY29tcGxldGVfZmlsZV9uYW1lID0gc2hpZnQ7CisJIyBDb21taXQgbWVzc2FnZQorCW15ICRzdW1tYXJ5ID0gc2hpZnQ7CisJIyBNZWRpYVdpa2kgcmV2aXNpb24gbnVtYmVyLiBLZWVwIHRoZSBwcmV2aW91cyBvbmUgYnkgZGVmYXVsdCwKKwkjIGluIGNhc2UgdGhlcmUncyBubyBlZGl0IHRvIHBlcmZvcm0uCisJbXkgJG9sZHJldmlkID0gc2hpZnQ7CisJbXkgJG5ld3JldmlkOworCisJaWYgKCRzdW1tYXJ5IGVxIEVNUFRZX01FU1NBR0UpIHsKKwkJJHN1bW1hcnkgPSBFTVBUWTsKKwl9CisKKwlteSAkbmV3X3NoYTEgPSAkZGlmZl9pbmZvX3NwbGl0WzNdOworCW15ICRvbGRfc2hhMSA9ICRkaWZmX2luZm9fc3BsaXRbMl07CisJbXkgJHBhZ2VfY3JlYXRlZCA9ICgkb2xkX3NoYTEgZXEgTlVMTF9TSEExKTsKKwlteSAkcGFnZV9kZWxldGVkID0gKCRuZXdfc2hhMSBlcSBOVUxMX1NIQTEpOworCSRjb21wbGV0ZV9maWxlX25hbWUgPSBjbGVhbl9maWxlbmFtZSgkY29tcGxldGVfZmlsZV9uYW1lKTsKKworCW15ICgkdGl0bGUsICRleHRlbnNpb24pID0gJGNvbXBsZXRlX2ZpbGVfbmFtZSA9fiAvXiguKilcLihbXlwuXSopJC87CisJaWYgKCFkZWZpbmVkKCRleHRlbnNpb24pKSB7CisJCSRleHRlbnNpb24gPSBFTVBUWTsKKwl9CisJaWYgKCRleHRlbnNpb24gZXEgJ213JykgeworCQlteSAkbnMgPSBnZXRfbXdfbmFtZXNwYWNlX2lkX2Zvcl9wYWdlKCRjb21wbGV0ZV9maWxlX25hbWUpOworCQlpZiAoJG5zICYmICRucyA9PSBnZXRfbXdfbmFtZXNwYWNlX2lkKCdGaWxlJykgJiYgKCEkZXhwb3J0X21lZGlhKSkgeworCQkJcHJpbnQgeypTVERFUlJ9ICJJZ25vcmluZyBtZWRpYSBmaWxlIHJlbGF0ZWQgcGFnZTogJHtjb21wbGV0ZV9maWxlX25hbWV9XG4iOworCQkJcmV0dXJuICgkb2xkcmV2aWQsICdvaycpOworCQl9CisJCW15ICRmaWxlX2NvbnRlbnQ7CisJCWlmICgkcGFnZV9kZWxldGVkKSB7CisJCQkjIERlbGV0aW5nIGEgcGFnZSB1c3VhbGx5IHJlcXVpcmVzCisJCQkjIHNwZWNpYWwgcHJpdmlsZWdlcy4gQSBjb21tb24KKwkJCSMgY29udmVudGlvbiBpcyB0byByZXBsYWNlIHRoZSBwYWdlCisJCQkjIHdpdGggdGhpcyBjb250ZW50IGluc3RlYWQ6CisJCQkkZmlsZV9jb250ZW50ID0gREVMRVRFRF9DT05URU5UOworCQl9IGVsc2UgeworCQkJJGZpbGVfY29udGVudCA9IHJ1bl9naXQoImNhdC1maWxlIGJsb2IgJHtuZXdfc2hhMX0iKTsKKwkJfQorCisJCSRtZWRpYXdpa2kgPSBjb25uZWN0X21heWJlKCRtZWRpYXdpa2ksICRyZW1vdGVuYW1lLCAkdXJsKTsKKworCQlteSAkcmVzdWx0ID0gJG1lZGlhd2lraS0+ZWRpdCggeworCQkJYWN0aW9uID0+ICdlZGl0JywKKwkJCXN1bW1hcnkgPT4gJHN1bW1hcnksCisJCQl0aXRsZSA9PiAkdGl0bGUsCisJCQliYXNldGltZXN0YW1wID0+ICRiYXNldGltZXN0YW1wc3skb2xkcmV2aWR9LAorCQkJdGV4dCA9PiBtZWRpYXdpa2lfY2xlYW4oJGZpbGVfY29udGVudCwgJHBhZ2VfY3JlYXRlZCksCisJCQkJICB9LCB7CisJCQkJCSAgc2tpcF9lbmNvZGluZyA9PiAxICMgSGVscHMgd2l0aCBuYW1lcyB3aXRoIGFjY2VudHVhdGVkIGNoYXJhY3RlcnMKKwkJCQkgIH0pOworCQlpZiAoISRyZXN1bHQpIHsKKwkJCWlmICgkbWVkaWF3aWtpLT57ZXJyb3J9LT57Y29kZX0gPT0gMykgeworCQkJCSMgZWRpdCBjb25mbGljdHMsIGNvbnNpZGVyZWQgYXMgbm9uLWZhc3QtZm9yd2FyZAorCQkJCXByaW50IHsqU1RERVJSfSAnV2FybmluZzogRXJyb3IgJyAuCisJCQkJICAgICRtZWRpYXdpa2ktPntlcnJvcn0tPntjb2RlfSAuCisJCQkJICAgICcgZnJvbSBtZWRpYXdpa2k6ICcgLiAkbWVkaWF3aWtpLT57ZXJyb3J9LT57ZGV0YWlsc30gLgorCQkJCSAgICAiLlxuIjsKKwkJCQlyZXR1cm4gKCRvbGRyZXZpZCwgJ25vbi1mYXN0LWZvcndhcmQnKTsKKwkJCX0gZWxzZSB7CisJCQkJIyBPdGhlciBlcnJvcnMuIFNob3VsZG4ndCBoYXBwZW4gPT4ganVzdCBkaWUoKQorCQkJCWRpZSAnRmF0YWw6IEVycm9yICcgLgorCQkJCSAgICAkbWVkaWF3aWtpLT57ZXJyb3J9LT57Y29kZX0gLgorCQkJCSAgICAnIGZyb20gbWVkaWF3aWtpOiAnIC4gJG1lZGlhd2lraS0+e2Vycm9yfS0+e2RldGFpbHN9IC4gIlxuIjsKKwkJCX0KKwkJfQorCQkkbmV3cmV2aWQgPSAkcmVzdWx0LT57ZWRpdH0tPntuZXdyZXZpZH07CisJCXByaW50IHsqU1RERVJSfSAiUHVzaGVkIGZpbGU6ICR7bmV3X3NoYTF9IC0gJHt0aXRsZX1cbiI7CisJfSBlbHNpZiAoJGV4cG9ydF9tZWRpYSkgeworCQkkbmV3cmV2aWQgPSBtd191cGxvYWRfZmlsZSgkY29tcGxldGVfZmlsZV9uYW1lLCAkbmV3X3NoYTEsCisJCQkJCSAgICRleHRlbnNpb24sICRwYWdlX2RlbGV0ZWQsCisJCQkJCSAgICRzdW1tYXJ5KTsKKwl9IGVsc2UgeworCQlwcmludCB7KlNUREVSUn0gIklnbm9yaW5nIG1lZGlhIGZpbGUgJHt0aXRsZX1cbiI7CisJfQorCSRuZXdyZXZpZCA9ICgkbmV3cmV2aWQgb3IgJG9sZHJldmlkKTsKKwlyZXR1cm4gKCRuZXdyZXZpZCwgJ29rJyk7Cit9CisKK3N1YiBtd19wdXNoIHsKKwkjIG11bHRpcGxlIHB1c2ggc3RhdGVtZW50cyBjYW4gZm9sbG93IGVhY2ggb3RoZXIKKwlteSBAcmVmc3NwZWNzID0gKHNoaWZ0LCBnZXRfbW9yZV9yZWZzKCdwdXNoJykpOworCW15ICRwdXNoZWQ7CisJZm9yIG15ICRyZWZzcGVjIChAcmVmc3NwZWNzKSB7CisJCW15ICgkZm9yY2UsICRsb2NhbCwgJHJlbW90ZSkgPSAkcmVmc3BlYyA9fiAvXihcKyk/KFteOl0qKTooW146XSopJC8KKwkJICAgIG9yIGRpZSgiSW52YWxpZCByZWZzcGVjIGZvciBwdXNoLiBFeHBlY3RlZCA8c3JjPjo8ZHN0PiBvciArPHNyYz46PGRzdD5cbiIpOworCQlpZiAoJGZvcmNlKSB7CisJCQlwcmludCB7KlNUREVSUn0gIldhcm5pbmc6IGZvcmNlZCBwdXNoIG5vdCBhbGxvd2VkIG9uIGEgTWVkaWFXaWtpLlxuIjsKKwkJfQorCQlpZiAoJGxvY2FsIGVxIEVNUFRZKSB7CisJCQlwcmludCB7KlNUREVSUn0gIkNhbm5vdCBkZWxldGUgcmVtb3RlIGJyYW5jaCBvbiBhIE1lZGlhV2lraVxuIjsKKwkJCXByaW50IHsqU1RET1VUfSAiZXJyb3IgJHtyZW1vdGV9IGNhbm5vdCBkZWxldGVcbiI7CisJCQluZXh0OworCQl9CisJCWlmICgkcmVtb3RlIG5lICdyZWZzL2hlYWRzL21hc3RlcicpIHsKKwkJCXByaW50IHsqU1RERVJSfSAiT25seSBwdXNoIHRvIHRoZSBicmFuY2ggJ21hc3RlcicgaXMgc3VwcG9ydGVkIG9uIGEgTWVkaWFXaWtpXG4iOworCQkJcHJpbnQgeypTVERPVVR9ICJlcnJvciAke3JlbW90ZX0gb25seSBtYXN0ZXIgYWxsb3dlZFxuIjsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKG13X3B1c2hfcmV2aXNpb24oJGxvY2FsLCAkcmVtb3RlKSkgeworCQkJJHB1c2hlZCA9IDE7CisJCX0KKwl9CisKKwkjIE5vdGlmeSBHaXQgdGhhdCB0aGUgcHVzaCBpcyBkb25lCisJcHJpbnQgeypTVERPVVR9ICJcbiI7CisKKwlpZiAoJHB1c2hlZCAmJiAkZHVtYl9wdXNoKSB7CisJCXByaW50IHsqU1RERVJSfSAiSnVzdCBwdXNoZWQgc29tZSByZXZpc2lvbnMgdG8gTWVkaWFXaWtpLlxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICJUaGUgcHVzaGVkIHJldmlzaW9ucyBub3cgaGF2ZSB0byBiZSByZS1pbXBvcnRlZCwgYW5kIHlvdXIgY3VycmVudCBicmFuY2hcbiI7CisJCXByaW50IHsqU1RERVJSfSAibmVlZHMgdG8gYmUgdXBkYXRlZCB3aXRoIHRoZXNlIHJlLWltcG9ydGVkIGNvbW1pdHMuIFlvdSBjYW4gZG8gdGhpcyB3aXRoXG4iOworCQlwcmludCB7KlNUREVSUn0gIlxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICIgIGdpdCBwdWxsIC0tcmViYXNlXG4iOworCQlwcmludCB7KlNUREVSUn0gIlxuIjsKKwl9CisJcmV0dXJuOworfQorCitzdWIgbXdfcHVzaF9yZXZpc2lvbiB7CisJbXkgJGxvY2FsID0gc2hpZnQ7CisJbXkgJHJlbW90ZSA9IHNoaWZ0OyAjIGFjdHVhbGx5LCB0aGlzIGhhcyB0byBiZSAicmVmcy9oZWFkcy9tYXN0ZXIiIGF0IHRoaXMgcG9pbnQuCisJbXkgJGxhc3RfbG9jYWxfcmV2aWQgPSBnZXRfbGFzdF9sb2NhbF9yZXZpc2lvbigpOworCXByaW50IHsqU1RERVJSfSAiLlxuIjsgIyBGaW5pc2ggc2VudGVuY2Ugc3RhcnRlZCBieSBnZXRfbGFzdF9sb2NhbF9yZXZpc2lvbigpCisJbXkgJGxhc3RfcmVtb3RlX3JldmlkID0gZ2V0X2xhc3RfcmVtb3RlX3JldmlzaW9uKCk7CisJbXkgJG13X3JldmlzaW9uID0gJGxhc3RfcmVtb3RlX3JldmlkOworCisJIyBHZXQgc2hhMSBvZiBjb21taXQgcG9pbnRlZCBieSBsb2NhbCBIRUFECisJbXkgJEhFQURfc2hhMSA9IHJ1bl9naXQoInJldi1wYXJzZSAke2xvY2FsfSAyPi9kZXYvbnVsbCIpOworCWNob21wKCRIRUFEX3NoYTEpOworCSMgR2V0IHNoYTEgb2YgY29tbWl0IHBvaW50ZWQgYnkgcmVtb3Rlcy8kcmVtb3RlbmFtZS9tYXN0ZXIKKwlteSAkcmVtb3Rlb3JpZ2luX3NoYTEgPSBydW5fZ2l0KCJyZXYtcGFyc2UgcmVmcy9yZW1vdGVzLyR7cmVtb3RlbmFtZX0vbWFzdGVyIDI+L2Rldi9udWxsIik7CisJY2hvbXAoJHJlbW90ZW9yaWdpbl9zaGExKTsKKworCWlmICgkbGFzdF9sb2NhbF9yZXZpZCA+IDAgJiYKKwkgICAgJGxhc3RfbG9jYWxfcmV2aWQgPCAkbGFzdF9yZW1vdGVfcmV2aWQpIHsKKwkJcmV0dXJuIGVycm9yX25vbl9mYXN0X2ZvcndhcmQoJHJlbW90ZSk7CisJfQorCisJaWYgKCRIRUFEX3NoYTEgZXEgJHJlbW90ZW9yaWdpbl9zaGExKSB7CisJCSMgbm90aGluZyB0byBwdXNoCisJCXJldHVybiAwOworCX0KKworCSMgR2V0IGV2ZXJ5IGNvbW1pdCBpbiBiZXR3ZWVuIEhFQUQgYW5kIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyLAorCSMgaW5jbHVkaW5nIEhFQUQgYW5kIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCisJbXkgQGNvbW1pdF9wYWlycyA9ICgpOworCWlmICgkbGFzdF9sb2NhbF9yZXZpZCA+IDApIHsKKwkJbXkgJHBhcnNlZF9zaGExID0gJHJlbW90ZW9yaWdpbl9zaGExOworCQkjIEZpbmQgYSBwYXRoIGZyb20gbGFzdCBNZWRpYVdpa2kgY29tbWl0IHRvIHB1c2hlZCBjb21taXQKKwkJcHJpbnQgeypTVERFUlJ9ICJDb21wdXRpbmcgcGF0aCBmcm9tIGxvY2FsIHRvIHJlbW90ZSAuLi5cbiI7CisJCW15IEBsb2NhbF9hbmNlc3RyeSA9IHNwbGl0KC9cbi8sIHJ1bl9naXQoInJldi1saXN0IC0tYm91bmRhcnkgLS1wYXJlbnRzICR7bG9jYWx9IF4ke3BhcnNlZF9zaGExfSIpKTsKKwkJbXkgJWxvY2FsX2FuY2VzdHJ5OworCQlmb3JlYWNoIG15ICRsaW5lIChAbG9jYWxfYW5jZXN0cnkpIHsKKwkJCWlmIChteSAoJGNoaWxkLCAkcGFyZW50cykgPSAkbGluZSA9fiAvXi0/KFthLWYwLTldKykgKFthLWYwLTkgXSspLykgeworCQkJCWZvcmVhY2ggbXkgJHBhcmVudCAoc3BsaXQoLyAvLCAkcGFyZW50cykpIHsKKwkJCQkJJGxvY2FsX2FuY2VzdHJ5eyRwYXJlbnR9ID0gJGNoaWxkOworCQkJCX0KKwkJCX0gZWxzaWYgKCEkbGluZSA9fiAvXihbYS1mMC05XSspLykgeworCQkJCWRpZSAiVW5leHBlY3RlZCBvdXRwdXQgZnJvbSBnaXQgcmV2LWxpc3Q6ICR7bGluZX1cbiI7CisJCQl9CisJCX0KKwkJd2hpbGUgKCRwYXJzZWRfc2hhMSBuZSAkSEVBRF9zaGExKSB7CisJCQlteSAkY2hpbGQgPSAkbG9jYWxfYW5jZXN0cnl7JHBhcnNlZF9zaGExfTsKKwkJCWlmICghJGNoaWxkKSB7CisJCQkJcHJpbnQgeypTVERFUlJ9ICJDYW5ub3QgZmluZCBhIHBhdGggaW4gaGlzdG9yeSBmcm9tIHJlbW90ZSBjb21taXQgdG8gbGFzdCBjb21taXRcbiI7CisJCQkJcmV0dXJuIGVycm9yX25vbl9mYXN0X2ZvcndhcmQoJHJlbW90ZSk7CisJCQl9CisJCQlwdXNoKEBjb21taXRfcGFpcnMsIFskcGFyc2VkX3NoYTEsICRjaGlsZF0pOworCQkJJHBhcnNlZF9zaGExID0gJGNoaWxkOworCQl9CisJfSBlbHNlIHsKKwkJIyBObyByZW1vdGUgbWVkaWF3aWtpIHJldmlzaW9uLiBFeHBvcnQgdGhlIHdob2xlCisJCSMgaGlzdG9yeSAobGluZWFyaXplZCB3aXRoIC0tZmlyc3QtcGFyZW50KQorCQlwcmludCB7KlNUREVSUn0gIldhcm5pbmc6IG5vIGNvbW1vbiBhbmNlc3RvciwgcHVzaGluZyBjb21wbGV0ZSBoaXN0b3J5XG4iOworCQlteSAkaGlzdG9yeSA9IHJ1bl9naXQoInJldi1saXN0IC0tZmlyc3QtcGFyZW50IC0tY2hpbGRyZW4gJHtsb2NhbH0iKTsKKwkJbXkgQGhpc3RvcnkgPSBzcGxpdCgvXG4vLCAkaGlzdG9yeSk7CisJCUBoaXN0b3J5ID0gQGhpc3RvcnlbMS4uJCNoaXN0b3J5XTsKKwkJZm9yZWFjaCBteSAkbGluZSAocmV2ZXJzZSBAaGlzdG9yeSkgeworCQkJbXkgQGNvbW1pdF9pbmZvX3NwbGl0ID0gc3BsaXQoL1sgXG5dLywgJGxpbmUpOworCQkJcHVzaChAY29tbWl0X3BhaXJzLCBcQGNvbW1pdF9pbmZvX3NwbGl0KTsKKwkJfQorCX0KKworCWZvcmVhY2ggbXkgJGNvbW1pdF9pbmZvX3NwbGl0IChAY29tbWl0X3BhaXJzKSB7CisJCW15ICRzaGExX2NoaWxkID0gQHskY29tbWl0X2luZm9fc3BsaXR9WzBdOworCQlteSAkc2hhMV9jb21taXQgPSBAeyRjb21taXRfaW5mb19zcGxpdH1bMV07CisJCW15ICRkaWZmX2luZm9zID0gcnVuX2dpdCgiZGlmZi10cmVlIC1yIC0tcmF3IC16ICR7c2hhMV9jaGlsZH0gJHtzaGExX2NvbW1pdH0iKTsKKwkJIyBUT0RPOiB3ZSBjb3VsZCBkZXRlY3QgcmVuYW1lLCBhbmQgZW5jb2RlIHRoZW0gd2l0aCBhICNyZWRpcmVjdCBvbiB0aGUgd2lraS4KKwkJIyBUT0RPOiBmb3Igbm93LCBpdCdzIGp1c3QgYSBkZWxldGUrYWRkCisJCW15IEBkaWZmX2luZm9fbGlzdCA9IHNwbGl0KC9cMC8sICRkaWZmX2luZm9zKTsKKwkJIyBLZWVwIHRoZSBzdWJqZWN0IGxpbmUgb2YgdGhlIGNvbW1pdCBtZXNzYWdlIGFzIG1lZGlhd2lraSBjb21tZW50IGZvciB0aGUgcmV2aXNpb24KKwkJbXkgJGNvbW1pdF9tc2cgPSBydW5fZ2l0KHFxKGxvZyAtLW5vLXdhbGsgLS1mb3JtYXQ9IiVzIiAke3NoYTFfY29tbWl0fSkpOworCQljaG9tcCgkY29tbWl0X21zZyk7CisJCSMgUHVzaCBldmVyeSBibG9iCisJCXdoaWxlIChAZGlmZl9pbmZvX2xpc3QpIHsKKwkJCW15ICRzdGF0dXM7CisJCQkjIGdpdCBkaWZmLXRyZWUgLXogZ2l2ZXMgYW4gb3V0cHV0IGxpa2UKKwkJCSMgPG1ldGFkYXRhPlwwPGZpbGVuYW1lMT5cMAorCQkJIyA8bWV0YWRhdGE+XDA8ZmlsZW5hbWUyPlwwCisJCQkjIGFuZCB3ZSd2ZSBzcGxpdCBvbiBcMC4KKwkJCW15ICRpbmZvID0gc2hpZnQoQGRpZmZfaW5mb19saXN0KTsKKwkJCW15ICRmaWxlID0gc2hpZnQoQGRpZmZfaW5mb19saXN0KTsKKwkJCSgkbXdfcmV2aXNpb24sICRzdGF0dXMpID0gbXdfcHVzaF9maWxlKCRpbmZvLCAkZmlsZSwgJGNvbW1pdF9tc2csICRtd19yZXZpc2lvbik7CisJCQlpZiAoJHN0YXR1cyBlcSAnbm9uLWZhc3QtZm9yd2FyZCcpIHsKKwkJCQkjIHdlIG1heSBhbHJlYWR5IGhhdmUgc2VudCBwYXJ0IG9mIHRoZQorCQkJCSMgY29tbWl0IHRvIE1lZGlhV2lraSwgYnV0IGl0J3MgdG9vCisJCQkJIyBsYXRlIHRvIGNhbmNlbCBpdC4gU3RvcCB0aGUgcHVzaCBpbgorCQkJCSMgdGhlIG1pZGRsZSwgYnV0IHN0aWxsIGdpdmUgYW4KKwkJCQkjIGFjY3VyYXRlIGVycm9yIG1lc3NhZ2UuCisJCQkJcmV0dXJuIGVycm9yX25vbl9mYXN0X2ZvcndhcmQoJHJlbW90ZSk7CisJCQl9CisJCQlpZiAoJHN0YXR1cyBuZSAnb2snKSB7CisJCQkJZGllKCJVbmtub3duIGVycm9yIGZyb20gbXdfcHVzaF9maWxlKClcbiIpOworCQkJfQorCQl9CisJCWlmICghJGR1bWJfcHVzaCkgeworCQkJcnVuX2dpdChxcShub3RlcyAtLXJlZj0ke3JlbW90ZW5hbWV9L21lZGlhd2lraSBhZGQgLWYgLW0gIm1lZGlhd2lraV9yZXZpc2lvbjogJHttd19yZXZpc2lvbn0iICR7c2hhMV9jb21taXR9KSk7CisJCX0KKwl9CisKKwlwcmludCB7KlNURE9VVH0gIm9rICR7cmVtb3RlfVxuIjsKKwlyZXR1cm4gMTsKK30KKworc3ViIGdldF9hbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyB7CisJJG1lZGlhd2lraSA9IGNvbm5lY3RfbWF5YmUoJG1lZGlhd2lraSwgJHJlbW90ZW5hbWUsICR1cmwpOworCisJbXkgJHF1ZXJ5ID0geworCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJbWV0YSA9PiAnc2l0ZWluZm8nLAorCQlzaXByb3AgPT4gJ2ZpbGVleHRlbnNpb25zJworCQl9OworCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5hcGkoJHF1ZXJ5KTsKKwlteSBAZmlsZV9leHRlbnNpb25zID0gbWFwIHsgJF8tPntleHR9fSBAeyRyZXN1bHQtPntxdWVyeX0tPntmaWxlZXh0ZW5zaW9uc319OworCW15ICVoYXNoRmlsZSA9IG1hcCB7ICRfID0+IDEgfSBAZmlsZV9leHRlbnNpb25zOworCisJcmV0dXJuICVoYXNoRmlsZTsKK30KKworIyBJbiBtZW1vcnkgY2FjaGUgZm9yIE1lZGlhV2lraSBuYW1lc3BhY2UgaWRzLgorbXkgJW5hbWVzcGFjZV9pZDsKKworIyBOYW1lc3BhY2VzIHdob3NlIGlkIGlzIGNhY2hlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlCisjICh0byBhdm9pZCBkdXBsaWNhdGVzKQorbXkgJWNhY2hlZF9td19uYW1lc3BhY2VfaWQ7CisKKyMgUmV0dXJuIE1lZGlhV2lraSBpZCBmb3IgYSBjYW5vbmljYWwgbmFtZXNwYWNlIG5hbWUuCisjIEV4LjogIkZpbGUiLCAiUHJvamVjdCIuCitzdWIgZ2V0X213X25hbWVzcGFjZV9pZCB7CisJJG1lZGlhd2lraSA9IGNvbm5lY3RfbWF5YmUoJG1lZGlhd2lraSwgJHJlbW90ZW5hbWUsICR1cmwpOworCW15ICRuYW1lID0gc2hpZnQ7CisKKwlpZiAoIWV4aXN0cyAkbmFtZXNwYWNlX2lkeyRuYW1lfSkgeworCQkjIExvb2sgYXQgY29uZmlndXJhdGlvbiBmaWxlLCBpZiB0aGUgcmVjb3JkIGZvciB0aGF0IG5hbWVzcGFjZSBpcworCQkjIGFscmVhZHkgY2FjaGVkLiBOYW1lc3BhY2VzIGFyZSBzdG9yZWQgaW4gZm9ybToKKwkJIyAiTmFtZV9vZl9uYW1lc3BhY2U6SWRfbmFtZXNwYWNlIiwgZXguOiAiRmlsZTo2Ii4KKwkJbXkgQHRlbXAgPSBzcGxpdCgvXG4vLAorCQkJCSBydW5fZ2l0KCJjb25maWcgLS1nZXQtYWxsIHJlbW90ZS4ke3JlbW90ZW5hbWV9Lm5hbWVzcGFjZUNhY2hlIikpOworCQljaG9tcChAdGVtcCk7CisJCWZvcmVhY2ggbXkgJG5zIChAdGVtcCkgeworCQkJbXkgKCRuLCAkaWQpID0gc3BsaXQoLzovLCAkbnMpOworCQkJaWYgKCRpZCBlcSAnbm90QU5hbWVTcGFjZScpIHsKKwkJCQkkbmFtZXNwYWNlX2lkeyRufSA9IHtpc19uYW1lc3BhY2UgPT4gMH07CisJCQl9IGVsc2UgeworCQkJCSRuYW1lc3BhY2VfaWR7JG59ID0ge2lzX25hbWVzcGFjZSA9PiAxLCBpZCA9PiAkaWR9OworCQkJfQorCQkJJGNhY2hlZF9td19uYW1lc3BhY2VfaWR7JG59ID0gMTsKKwkJfQorCX0KKworCWlmICghZXhpc3RzICRuYW1lc3BhY2VfaWR7JG5hbWV9KSB7CisJCXByaW50IHsqU1RERVJSfSAiTmFtZXNwYWNlICR7bmFtZX0gbm90IGZvdW5kIGluIGNhY2hlLCBxdWVyeWluZyB0aGUgd2lraSAuLi5cbiI7CisJCSMgTlMgbm90IGZvdW5kID0+IGdldCBuYW1lc3BhY2UgaWQgZnJvbSBNVyBhbmQgc3RvcmUgaXQgaW4KKwkgICAgICAgICMgY29uZmlndXJhdGlvbiBmaWxlLgorCSAgICAgICAgbXkgJHF1ZXJ5ID0geworCSAgICAgICAgICAgICAgICBhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkgICAgICAgICAgICAgICAgbWV0YSA9PiAnc2l0ZWluZm8nLAorCSAgICAgICAgICAgICAgICBzaXByb3AgPT4gJ25hbWVzcGFjZXMnCisJICAgICAgICB9OworCSAgICAgICAgbXkgJHJlc3VsdCA9ICRtZWRpYXdpa2ktPmFwaSgkcXVlcnkpOworCisJICAgICAgICB3aGlsZSAobXkgKCRpZCwgJG5zKSA9IGVhY2goJXskcmVzdWx0LT57cXVlcnl9LT57bmFtZXNwYWNlc319KSkgeworCSAgICAgICAgICAgICAgICBpZiAoZGVmaW5lZCgkbnMtPntpZH0pICYmIGRlZmluZWQoJG5zLT57Y2Fub25pY2FsfSkpIHsKKwkJCQkkbmFtZXNwYWNlX2lkeyRucy0+e2Nhbm9uaWNhbH19ID0ge2lzX25hbWVzcGFjZSA9PiAxLCBpZCA9PiAkbnMtPntpZH19OworCQkJCWlmICgkbnMtPnsnKid9KSB7CisJCQkJCSMgYWxpYXMgKGUuZy4gZnJlbmNoIEZpY2hpZXI6IGFzIGFsaWFzIGZvciBjYW5vbmljYWwgRmlsZTopCisJCQkJCSRuYW1lc3BhY2VfaWR7JG5zLT57JyonfX0gPSB7aXNfbmFtZXNwYWNlID0+IDEsIGlkID0+ICRucy0+e2lkfX07CisJCQkJfQorCQkJfQorCSAgICAgICAgfQorCX0KKworCW15ICRucyA9ICRuYW1lc3BhY2VfaWR7JG5hbWV9OworCW15ICRpZDsKKworCWlmICghZGVmaW5lZCAkbnMpIHsKKwkJbXkgQG5hbWVzcGFjZXMgPSBtYXAgeyBzLyAvXy9nOyAkXzsgfSBzb3J0IGtleXMgJW5hbWVzcGFjZV9pZDsKKwkJcHJpbnQgeypTVERFUlJ9ICJObyBzdWNoIG5hbWVzcGFjZSAke25hbWV9IG9uIE1lZGlhV2lraSwga25vd24gbmFtZXNwYWNlczogQG5hbWVzcGFjZXNcbiI7CisJCSRucyA9IHtpc19uYW1lc3BhY2UgPT4gMH07CisJCSRuYW1lc3BhY2VfaWR7JG5hbWV9ID0gJG5zOworCX0KKworCWlmICgkbnMtPntpc19uYW1lc3BhY2V9KSB7CisJCSRpZCA9ICRucy0+e2lkfTsKKwl9CisKKwkjIFN0b3JlICJub3RBTmFtZVNwYWNlIiBhcyBzcGVjaWFsIHZhbHVlIGZvciBpbmV4aXN0aW5nIG5hbWVzcGFjZXMKKwlteSAkc3RvcmVfaWQgPSAoJGlkIHx8ICdub3RBTmFtZVNwYWNlJyk7CisKKwkjIFN0b3JlIGV4cGxpY2l0bHkgcmVxdWVzdGVkIG5hbWVzcGFjZXMgb24gZGlzaworCWlmICghZXhpc3RzICRjYWNoZWRfbXdfbmFtZXNwYWNlX2lkeyRuYW1lfSkgeworCQlydW5fZ2l0KHFxKGNvbmZpZyAtLWFkZCByZW1vdGUuJHtyZW1vdGVuYW1lfS5uYW1lc3BhY2VDYWNoZSAiJHtuYW1lfToke3N0b3JlX2lkfSIpKTsKKwkJJGNhY2hlZF9td19uYW1lc3BhY2VfaWR7JG5hbWV9ID0gMTsKKwl9CisJcmV0dXJuICRpZDsKK30KKworc3ViIGdldF9td19uYW1lc3BhY2VfaWRfZm9yX3BhZ2UgeworCW15ICRuYW1lc3BhY2UgPSBzaGlmdDsKKwlpZiAoJG5hbWVzcGFjZSA9fiAvXihbXjpdKik6LykgeworCQlyZXR1cm4gZ2V0X213X25hbWVzcGFjZV9pZCgkbmFtZXNwYWNlKTsKKwl9IGVsc2UgeworCQlyZXR1cm47CisJfQorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvZ2l0LXJlbW90ZS1tZWRpYXdpa2kudHh0IGIvY29udHJpYi9tdy10by1naXQvZ2l0LXJlbW90ZS1tZWRpYXdpa2kudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYjdlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS50eHQKQEAgLTAsMCArMSw3IEBACitHaXQtTWVkaWF3aWtpIGlzIGEgcHJvamVjdCB3aGljaCBhaW1zIHRoZSBjcmVhdGlvbiBvZiBhIGdhdGUKK2JldHdlZW4gZ2l0IGFuZCBtZWRpYXdpa2ksIGFsbG93aW5nIGdpdCB1c2VycyB0byBwdXNoIGFuZCBwdWxsCitvYmplY3RzIGZyb20gbWVkaWF3aWtpIGp1c3QgYXMgb25lIHdvdWxkIGRvIHdpdGggYSBjbGFzc2ljIGdpdAorcmVwb3NpdG9yeSB0aGFua3MgdG8gcmVtb3RlLWhlbHBlcnMuCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uLCB2aXNpdCB0aGUgd2lraSBhdAoraHR0cHM6Ly9naXRodWIuY29tL21veS9HaXQtTWVkaWF3aWtpL3dpa2kKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvLmdpdGlnbm9yZSBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2E0MGI0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNCBAQAorV0VCLword2lraS8KK3RyYXNoIGRpcmVjdG9yeS50Ki8KK3Rlc3QtcmVzdWx0cy8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvTWFrZWZpbGUgYi9jb250cmliL213LXRvLWdpdC90L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MjIyMDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L01ha2VmaWxlCkBAIC0wLDAgKzEsMzEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyCisjICAgICBDaGFybGVzIFJvdXNzZWwgPGNoYXJsZXMucm91c3NlbEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBDYXRoZWJyYXMgPHNpbW9uLmNhdGhlYnJhc0BlbnNpbWFnLmltYWcuZnI+CisjICAgICBKdWxpZW4gS2hheWF0IDxqdWxpZW4ua2hheWF0QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEd1aWxsYXVtZSBTYXNkeSA8Z3VpbGxhdW1lLnNhc2R5QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIFBlcnJhdCA8c2ltb24ucGVycmF0QGVuc2ltYWcuaW1hZy5mcj4KKyMKKyMjIFRlc3QgZ2l0LXJlbW90ZS1tZWRpYXdpa2kKKworYWxsOiB0ZXN0CisKKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsuYXV0b2dlbgorLWluY2x1ZGUgLi4vLi4vLi4vY29uZmlnLm1haworCitUID0gJCh3aWxkY2FyZCB0WzAtOV1bMC05XVswLTldWzAtOV0tKi5zaCkKKworLlBIT05ZOiBoZWxwIHRlc3QgY2xlYW4gYWxsCisKK2hlbHA6CisJQGVjaG8gJ1J1biAiJChNQUtFKSB0ZXN0IiB0byBsYXVuY2ggdGVzdCBzY3JpcHRzJworCUBlY2hvICdSdW4gIiQoTUFLRSkgY2xlYW4iIHRvIHJlbW92ZSB0cmFzaCBmb2xkZXJzJworCit0ZXN0OgorCUBmb3IgdCBpbiAkKFQpOyBkbyBcCisJCWVjaG8gIiQkdCI7IFwKKwkJIi4vJCR0IiB8fCBleGl0IDE7IFwKKwlkb25lCisKK2NsZWFuOgorCSQoUk0pIC1yICd0cmFzaCBkaXJlY3RvcnknLioKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvUkVBRE1FIGIvY29udHJpYi9tdy10by1naXQvdC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlMzRiZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvUkVBRE1FCkBAIC0wLDAgKzEsMTI0IEBACitUZXN0cyBmb3IgTWVkaWF3aWtpLXRvLUdpdAorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KK1RoaXMgbWFudWFsIGRlc2NyaWJlcyBob3cgdG8gaW5zdGFsbCB0aGUgZ2l0LXJlbW90ZS1tZWRpYXdpa2kgdGVzdAorZW52aXJvbm1lbnQgb24gYSBtYWNoaW5lIHdpdGggZ2l0IGluc3RhbGxlZCBvbiBpdC4KKworUHJlcmVxdWlzaXRlCistLS0tLS0tLS0tLS0KKworSW4gb3JkZXIgdG8gcnVuIHRoaXMgdGVzdCBlbnZpcm9ubWVudCBjb3JyZWN0bHksIHlvdSB3aWxsIG5lZWQgdG8KK2luc3RhbGwgdGhlIGZvbGxvd2luZyBwYWNrYWdlcyAoRGViaWFuL1VidW50dSBuYW1lcywgbWF5IG5lZWQgdG8gYmUKK2FkYXB0ZWQgZm9yIGFub3RoZXIgZGlzdHJpYnV0aW9uKToKKworKiBsaWdodHRwZAorKiBwaHA1CisqIHBocDUtY2dpCisqIHBocDUtY2xpCisqIHBocDUtY3VybAorKiBwaHA1LXNxbGl0ZQorCitQcmluY2lwbGVzIGFuZCBUZWNobmljYWwgQ2hvaWNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHRlc3QgZW52aXJvbm1lbnQgbWFrZXMgaXQgZWFzeSB0byBpbnN0YWxsIGFuZCBtYW5pcHVsYXRlIG9uZSBvcgorc2V2ZXJhbCBNZWRpYVdpa2kgaW5zdGFuY2VzLiBUbyBhbGxvdyBkZXZlbG9wZXJzIHRvIHJ1biB0aGUgdGVzdHN1aXRlCitlYXNpbHksIHRoZSBlbnZpcm9ubWVudCBkb2VzIG5vdCByZXF1aXJlIHJvb3QgcHJpdmlsZWdlIChleGNlcHQgdG8KK2luc3RhbGwgdGhlIHJlcXVpcmVkIHBhY2thZ2VzIGlmIG5lZWRlZCkuIEl0IHN0YXJ0cyBhIHdlYnNlcnZlcgoraW5zdGFuY2Ugb24gdGhlIHVzZXIncyBhY2NvdW50ICh1c2luZyBsaWdodHRwZCBncmVhdGx5IGhlbHBzIGZvcgordGhhdCksIGFuZCBkb2VzIG5vdCBuZWVkIGEgc2VwYXJhdGUgZGF0YWJhc2UgZGFlbW9uICh0aGFua3MgdG8gdGhlIHVzZQorb2Ygc3FsaXRlKS4KKworUnVuIHRoZSB0ZXN0IGVudmlyb25tZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW5zdGFsbCBhIG5ldyB3aWtpCit+fn5+fn5+fn5+fn5+fn5+fn4KKworT25jZSB5b3UgaGF2ZSBhbGwgdGhlIHByZXJlcXVpc2l0ZSwgeW91IG5lZWQgdG8gaW5zdGFsbCBhIE1lZGlhV2lraQoraW5zdGFuY2Ugb24geW91ciBtYWNoaW5lLiBJZiB5b3UgYWxyZWFkeSBoYXZlIG9uZSwgaXQgaXMgc3RpbGwKK3N0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGluc3RhbGwgb25lIHdpdGggdGhlIHNjcmlwdCBwcm92aWRlZC4gSGVyZSdzCitob3cgdG8gd29yayBpdDoKKworYS4gY2hhbmdlIGRpcmVjdG9yeSB0byBjb250cmliL213LXRvLWdpdC90LworYi4gaWYgbmVlZGVkLCBlZGl0IHRlc3QuY29uZmlnIHRvIGNob29zZSB5b3VyIGluc3RhbGxhdGlvbiBwYXJhbWV0ZXJzCitjLiBydW4gYC4vaW5zdGFsbC13aWtpLnNoIGluc3RhbGxgCitkLiBjaGVjayBvbiB5b3VyIGZhdm91cml0ZSB3ZWIgYnJvd3NlciBpZiB5b3VyIHdpa2kgaXMgY29ycmVjdGx5CisgICBpbnN0YWxsZWQuCisKK1JlbW92ZSBhbiBleGlzdGluZyB3aWtpCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitFZGl0IHRoZSBmaWxlIHRlc3QuY29uZmlnIHRvIGZpdCB0aGUgd2lraSB5b3Ugd2FudCB0byBkZWxldGUsIGFuZCB0aGVuCitleGVjdXRlIHRoZSBjb21tYW5kIGAuL2luc3RhbGwtd2lraS5zaCBkZWxldGVgIGZyb20gdGhlCitjb250cmliL213LXRvLWdpdC90IGRpcmVjdG9yeS4KKworUnVuIHRoZSBleGlzdGluZyB0ZXN0cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgcHJvdmlkZWQgdGVzdHMgYXJlIGN1cnJlbnRseSBpbiB0aGUgYGNvbnRyaWIvbXctdG8tZ2l0L3RgIGRpcmVjdG9yeS4KK1RoZSBmaWxlcyBhcmUgYWxsIHRoZSB0OTM2WzAtOV0tKi5zaCBzaGVsbCBzY3JpcHRzLgorCithLiBSdW4gYWxsIHRlc3RzOgorVG8gZG8gc28sIHJ1biAibWFrZSB0ZXN0IiBmcm9tIHRoZSBjb250cmliL213LXRvLWdpdC8gZGlyZWN0b3J5LgorCitiLiBSdW4gYSBzcGVjaWZpYyB0ZXN0OgorVG8gcnVuIGEgZ2l2ZW4gdGVzdCA8dGVzdF9uYW1lPiwgcnVuIC4vPHRlc3RfbmFtZT4gZnJvbSB0aGUKK2NvbnRyaWIvbXctdG8tZ2l0L3QgZGlyZWN0b3J5LgorCitIb3cgdG8gY3JlYXRlIG5ldyB0ZXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXZhaWxhYmxlIGZ1bmN0aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgdGVzdCBlbnZpcm9ubWVudCBvZiBnaXQtcmVtb3RlLW1lZGlhd2lraSBwcm92aWRlcyBzb21lIGZ1bmN0aW9ucwordXNlZnVsIHRvIHRlc3QgaXRzIGJlaGF2aW91ci4gZm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgZnVuY3Rpb25zJworcGFyYW1ldGVycywgcGxlYXNlIHJlZmVyIHRvIHRoZSBgdGVzdC1naXRtdy1saWIuc2hgIGFuZAorYHRlc3QtZ2l0bXcucGxgIGZpbGVzLgorCisqKiBgdGVzdF9jaGVja193aWtpX3ByZWNvbmRgOgorQ2hlY2sgaWYgdGhlIHRlc3RzIG11c3QgYmUgc2tpcHBlZCBvciBub3QuIFBsZWFzZSB1c2UgdGhpcyBmdW5jdGlvbgorYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIG5ldyB0ZXN0IGZpbGUuCisKKyoqIGB3aWtpX2dldHBhZ2VgOgorRmV0Y2ggYSBnaXZlbiBwYWdlIGZyb20gdGhlIHdpa2kgYW5kIHB1dHMgaXRzIGNvbnRlbnQgaW4gdGhlCitkaXJlY3RvcnkgaW4gcGFyYW1ldGVyLgorCisqKiBgd2lraV9kZWxldGVfcGFnZWA6CitEZWxldGUgYSBnaXZlbiBwYWdlIGZyb20gdGhlIHdpa2kuCisKKyoqIGB3aWtpX2VkaXRfcGFnZWA6CitDcmVhdGUgb3IgbW9kaWZ5IGEgZ2l2ZW4gcGFnZSBpbiB0aGUgd2lraS4gWW91IGNhbiBzcGVjaWZ5IHNldmVyYWwKK3BhcmFtZXRlcnMgbGlrZSBhIHN1bW1hcnkgZm9yIHRoZSBwYWdlIGVkaXRpb24sIG9yIGFkZCB0aGUgcGFnZSB0byBhCitnaXZlbiBjYXRlZ29yeS4KK1NlZSB0ZXN0LWdpdG13LnBsIGZvciBtb3JlIGRldGFpbHMuCisKKyoqIGB3aWtpX2dldGFsbHBhZ2VgOgorRmV0Y2ggYWxsIHBhZ2VzIGZyb20gdGhlIHdpa2kgaW50byBhIGdpdmVuIGRpcmVjdG9yeS4gVGhlIGRpcmVjdG9yeQoraXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBleGlzdHMuCisKKyoqIGB0ZXN0X2RpZmZfZGlyZWN0b3JpZXNgOgorQ29tcGFyZSB0aGUgY29udGVudCBvZiB0d28gZGlyZWN0b3JpZXMuIFRoZSBjb250ZW50IG11c3QgYmUgdGhlIHNhbWUuCitVc2UgdGhpcyBmdW5jdGlvbiB0byBjb21wYXJlIHRoZSBjb250ZW50IG9mIGEgZ2l0IGRpcmVjdG9yeSBhbmQgYSB3aWtpCitvbmUgY3JlYXRlZCBieSB3aWtpX2dldGFsbHBhZ2UuCisKKyoqIGB0ZXN0X2NvbnRhaW5zX05fZmlsZXNgOgorQ2hlY2sgaWYgdGhlIGdpdmVuIGRpcmVjdG9yeSBjb250YWlucyBhIGdpdmVuIG51bWJlciBvZiBmaWxlLgorCisqKiBgd2lraV9wYWdlX2V4aXN0c2A6CitUZXN0cyBpZiBhIGdpdmVuIHBhZ2UgZXhpc3RzIG9uIHRoZSB3aWtpLgorCisqKiBgd2lraV9yZXNldGA6CitSZXNldCB0aGUgd2lraSwgaS5lLiBmbHVzaCB0aGUgZGF0YWJhc2UuIFVzZSB0aGlzIGZ1bmN0aW9uIGF0IHRoZQorYmVnaW5uaW5nIG9mIGVhY2ggbmV3IHRlc3QsIGV4Y2VwdCBpZiB0aGUgdGVzdCByZS11c2VzIHRoZSBzYW1lIHdpa2kKKyhhbmQgaGlzdG9yeSkgYXMgdGhlIHByZXZpb3VzIHRlc3QuCisKK0hvdyB0byB3cml0ZSBhIG5ldyB0ZXN0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitQbGVhc2UsIGZvbGxvdyB0aGUgc3RhbmRhcmRzIGdpdmVuIGJ5IGdpdC4gU2VlIGdpdC90L1JFQURNRS4KK05ldyBmaWxlIHNob3VsZCBiZSBuYW1lZCBhcyB0OTM2WzAtOV0tKi5zaC4KK0JlIHN1cmUgdG8gcmVzZXQgeW91ciB3aWtpIHJlZ3VsYXJseSB3aXRoIHRoZSBmdW5jdGlvbiBgd2lraV9yZXNldGAuCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyMTUyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKworIyBUaGlzIHNjcmlwdCBpbnN0YWxscyBvciBkZWxldGVzIGEgTWVkaWFXaWtpIG9uIHlvdXIgY29tcHV0ZXIuCisjIEl0IHJlcXVpcmVzIGEgd2ViIHNlcnZlciB3aXRoIFBIUCBhbmQgU1FMaXRlIHJ1bm5pbmcuIEluIGFkZGl0aW9uLCBpZiB5b3UKKyMgZG8gbm90IGhhdmUgTWVkaWFXaWtpIHNvdXJjZXMgb24geW91ciBjb21wdXRlciwgdGhlIG9wdGlvbiAnaW5zdGFsbCcKKyMgZG93bmxvYWRzIHRoZW0gZm9yIHlvdS4KKyMgUGxlYXNlIHNldCB0aGUgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgaW4gLi90ZXN0LWdpdG13LWxpYi5zaAorCitXSUtJX1RFU1RfRElSPSQoY2QgIiQoZGlybmFtZSAiJDAiKSIgJiYgcHdkKQorCitpZiB0ZXN0IC16ICIkV0lLSV9URVNUX0RJUiIKK3RoZW4KKwlXSUtJX1RFU1RfRElSPS4KK2ZpCisKKy4gIiRXSUtJX1RFU1RfRElSIi90ZXN0LWdpdG13LWxpYi5zaAordXNhZ2UgKCkgeworCWVjaG8gInVzYWdlOiAiCisJZWNobyAiCS4vaW5zdGFsbC13aWtpLnNoIDxpbnN0YWxsIHwgZGVsZXRlIHwgLS1oZWxwPiIKKwllY2hvICIJCWluc3RhbGwgfCAtaSA6CUluc3RhbGwgYSB3aWtpIG9uIHlvdXIgY29tcHV0ZXIuIgorCWVjaG8gIgkJZGVsZXRlIHwgLWQgOiBEZWxldGUgdGhlIHdpa2kgYW5kIGFsbCBpdHMgcGFnZXMgYW5kICIKKwllY2hvICIJCQljb250ZW50LiIKKwllY2hvICIJCXN0YXJ0ICB8IC1zIDogU3RhcnQgdGhlIHByZXZpb3VzbHkgY29uZmlndXJlZCBsaWdodHRwZCBkYWVtb24iCisJZWNobyAiCQlzdG9wICAgICAgICA6IFN0b3AgbGlnaHR0cGQgZGFlbW9uLiIKK30KKworCisjIEFyZ3VtZW50OiBpbnN0YWxsLCBkZWxldGUsIC0taGVscCB8IC1oCitjYXNlICIkMSIgaW4KKwkiaW5zdGFsbCIgfCAiLWkiKQorCQl3aWtpX2luc3RhbGwKKwkJZXhpdCAwCisJCTs7CisJImRlbGV0ZSIgfCAiLWQiKQorCQl3aWtpX2RlbGV0ZQorCQlleGl0IDAKKwkJOzsKKwkic3RhcnQiIHwgIi1zIikKKwkJc3RhcnRfbGlnaHR0cGQKKwkJZXhpdAorCQk7OworCSJzdG9wIikKKwkJc3RvcF9saWdodHRwZAorCQlleGl0CisJCTs7CisJIi0taGVscCIgfCAiLWgiKQorCQl1c2FnZQorCQlleGl0IDAKKwkJOzsKKwkqKQorCQllY2hvICJJbnZhbGlkIGFyZ3VtZW50OiAkMSIKKwkJdXNhZ2UKKwkJZXhpdCAxCisJCTs7Citlc2FjCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS8uZ2l0aWdub3JlIGIvY29udHJpYi9tdy10by1naXQvdC9pbnN0YWxsLXdpa2kvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWEyYTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC9pbnN0YWxsLXdpa2kvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACit3aWtpZGIuc3FsaXRlCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS9Mb2NhbFNldHRpbmdzLnBocCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL0xvY2FsU2V0dGluZ3MucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NWU0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS9Mb2NhbFNldHRpbmdzLnBocApAQCAtMCwwICsxLDEyOSBAQAorPD9waHAKKyMgVGhpcyBmaWxlIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSB0aGUgTWVkaWFXaWtpIDEuMTkuMAorIyBpbnN0YWxsZXIuIElmIHlvdSBtYWtlIG1hbnVhbCBjaGFuZ2VzLCBwbGVhc2Uga2VlcCB0cmFjayBpbiBjYXNlIHlvdQorIyBuZWVkIHRvIHJlY3JlYXRlIHRoZW0gbGF0ZXIuCisjCisjIFNlZSBpbmNsdWRlcy9EZWZhdWx0U2V0dGluZ3MucGhwIGZvciBhbGwgY29uZmlndXJhYmxlIHNldHRpbmdzCisjIGFuZCB0aGVpciBkZWZhdWx0IHZhbHVlcywgYnV0IGRvbid0IGZvcmdldCB0byBtYWtlIGNoYW5nZXMgaW4gX3RoaXNfCisjIGZpbGUsIG5vdCB0aGVyZS4KKyMKKyMgRnVydGhlciBkb2N1bWVudGF0aW9uIGZvciBjb25maWd1cmF0aW9uIHNldHRpbmdzIG1heSBiZSBmb3VuZCBhdDoKKyMgaHR0cDovL3d3dy5tZWRpYXdpa2kub3JnL3dpa2kvTWFudWFsOkNvbmZpZ3VyYXRpb25fc2V0dGluZ3MKKworIyBQcm90ZWN0IGFnYWluc3Qgd2ViIGVudHJ5CitpZiAoICFkZWZpbmVkKCAnTUVESUFXSUtJJyApICkgeworCWV4aXQ7Cit9CisKKyMjIFVuY29tbWVudCB0aGlzIHRvIGRpc2FibGUgb3V0cHV0IGNvbXByZXNzaW9uCisjICR3Z0Rpc2FibGVPdXRwdXRDb21wcmVzc2lvbiA9IHRydWU7CisKKyR3Z1NpdGVuYW1lICAgICAgPSAiR2l0LU1lZGlhV2lraS1UZXN0IjsKKyR3Z01ldGFOYW1lc3BhY2UgPSAiR2l0LU1lZGlhV2lraS1UZXN0IjsKKworIyMgVGhlIFVSTCBiYXNlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSB3aWtpOworIyMgZGVmYXVsdHMgZm9yIGFsbCBydW50aW1lIFVSTCBwYXRocyBhcmUgYmFzZWQgb2ZmIG9mIHRoaXMuCisjIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjdXN0b21pemluZyB0aGUgVVJMcyBwbGVhc2Ugc2VlOgorIyMgaHR0cDovL3d3dy5tZWRpYXdpa2kub3JnL3dpa2kvTWFudWFsOlNob3J0X1VSTAorJHdnU2NyaXB0UGF0aCAgICAgICA9ICJAV0dfU0NSSVBUX1BBVEhAIjsKKyR3Z1NjcmlwdEV4dGVuc2lvbiAgPSAiLnBocCI7CisKKyMjIFRoZSBwcm90b2NvbCBhbmQgc2VydmVyIG5hbWUgdG8gdXNlIGluIGZ1bGx5LXF1YWxpZmllZCBVUkxzCiskd2dTZXJ2ZXIgICAgICAgICAgID0gIkBXR19TRVJWRVJAIjsKKworIyMgVGhlIHJlbGF0aXZlIFVSTCBwYXRoIHRvIHRoZSBza2lucyBkaXJlY3RvcnkKKyR3Z1N0eWxlUGF0aCAgICAgICAgPSAiJHdnU2NyaXB0UGF0aC9za2lucyI7CisKKyMjIFRoZSByZWxhdGl2ZSBVUkwgcGF0aCB0byB0aGUgbG9nby4gIE1ha2Ugc3VyZSB5b3UgY2hhbmdlIHRoaXMgZnJvbSB0aGUgZGVmYXVsdCwKKyMjIG9yIGVsc2UgeW91J2xsIG92ZXJ3cml0ZSB5b3VyIGxvZ28gd2hlbiB5b3UgdXBncmFkZSEKKyR3Z0xvZ28gICAgICAgICAgICAgPSAiJHdnU3R5bGVQYXRoL2NvbW1vbi9pbWFnZXMvd2lraS5wbmciOworCisjIyBVUE8gbWVhbnM6IHRoaXMgaXMgYWxzbyBhIHVzZXIgcHJlZmVyZW5jZSBvcHRpb24KKworJHdnRW5hYmxlRW1haWwgICAgICA9IHRydWU7Ciskd2dFbmFibGVVc2VyRW1haWwgID0gdHJ1ZTsgIyBVUE8KKworJHdnRW1lcmdlbmN5Q29udGFjdCA9ICJhcGFjaGVAbG9jYWxob3N0IjsKKyR3Z1Bhc3N3b3JkU2VuZGVyICAgPSAiYXBhY2hlQGxvY2FsaG9zdCI7CisKKyR3Z0Vub3RpZlVzZXJUYWxrICAgICAgPSBmYWxzZTsgIyBVUE8KKyR3Z0Vub3RpZldhdGNobGlzdCAgICAgPSBmYWxzZTsgIyBVUE8KKyR3Z0VtYWlsQXV0aGVudGljYXRpb24gPSB0cnVlOworCisjIyBEYXRhYmFzZSBzZXR0aW5ncworJHdnREJ0eXBlICAgICAgICAgICA9ICJzcWxpdGUiOworJHdnREJzZXJ2ZXIgICAgICAgICA9ICIiOworJHdnREJuYW1lICAgICAgICAgICA9ICJAV0dfU1FMSVRFX0RBVEFGSUxFQCI7Ciskd2dEQnVzZXIgICAgICAgICAgID0gIiI7Ciskd2dEQnBhc3N3b3JkICAgICAgID0gIiI7CisKKyMgU1FMaXRlLXNwZWNpZmljIHNldHRpbmdzCiskd2dTUUxpdGVEYXRhRGlyICAgID0gIkBXR19TUUxJVEVfREFUQURJUkAiOworCisKKyMjIFNoYXJlZCBtZW1vcnkgc2V0dGluZ3MKKyR3Z01haW5DYWNoZVR5cGUgICAgPSBDQUNIRV9OT05FOworJHdnTWVtQ2FjaGVkU2VydmVycyA9IGFycmF5KCk7CisKKyMjIFRvIGVuYWJsZSBpbWFnZSB1cGxvYWRzLCBtYWtlIHN1cmUgdGhlICdpbWFnZXMnIGRpcmVjdG9yeQorIyMgaXMgd3JpdGFibGUsIHRoZW4gc2V0IHRoaXMgdG8gdHJ1ZToKKyR3Z0VuYWJsZVVwbG9hZHMgID0gdHJ1ZTsKKyR3Z1VzZUltYWdlTWFnaWNrID0gdHJ1ZTsKKyR3Z0ltYWdlTWFnaWNrQ29udmVydENvbW1hbmQgPSJAQ09OVkVSVEAiOworJHdnRmlsZUV4dGVuc2lvbnNbXSA9ICd0eHQnOworCisjIEluc3RhbnRDb21tb25zIGFsbG93cyB3aWtpIHRvIHVzZSBpbWFnZXMgZnJvbSBodHRwOi8vY29tbW9ucy53aWtpbWVkaWEub3JnCiskd2dVc2VJbnN0YW50Q29tbW9ucyAgPSBmYWxzZTsKKworIyMgSWYgeW91IHVzZSBJbWFnZU1hZ2ljayAob3IgYW55IG90aGVyIHNoZWxsIGNvbW1hbmQpIG9uIGEKKyMjIExpbnV4IHNlcnZlciwgdGhpcyB3aWxsIG5lZWQgdG8gYmUgc2V0IHRvIHRoZSBuYW1lIG9mIGFuCisjIyBhdmFpbGFibGUgVVRGLTggbG9jYWxlCiskd2dTaGVsbExvY2FsZSA9ICJlbl9VUy51dGY4IjsKKworIyMgSWYgeW91IHdhbnQgdG8gdXNlIGltYWdlIHVwbG9hZHMgdW5kZXIgc2FmZSBtb2RlLAorIyMgY3JlYXRlIHRoZSBkaXJlY3RvcmllcyBpbWFnZXMvYXJjaGl2ZSwgaW1hZ2VzL3RodW1iIGFuZAorIyMgaW1hZ2VzL3RlbXAsIGFuZCBtYWtlIHRoZW0gYWxsIHdyaXRhYmxlLiBUaGVuIHVuY29tbWVudAorIyMgdGhpcywgaWYgaXQncyBub3QgYWxyZWFkeSB1bmNvbW1lbnRlZDoKKyMkd2dIYXNoZWRVcGxvYWREaXJlY3RvcnkgPSBmYWxzZTsKKworIyMgU2V0ICR3Z0NhY2hlRGlyZWN0b3J5IHRvIGEgd3JpdGFibGUgZGlyZWN0b3J5IG9uIHRoZSB3ZWIgc2VydmVyCisjIyB0byBtYWtlIHlvdXIgd2lraSBnbyBzbGlnaHRseSBmYXN0ZXIuIFRoZSBkaXJlY3Rvcnkgc2hvdWxkIG5vdAorIyMgYmUgcHVibGljbHkgYWNjZXNzaWJsZSBmcm9tIHRoZSB3ZWIuCisjJHdnQ2FjaGVEaXJlY3RvcnkgPSAiJElQL2NhY2hlIjsKKworIyBTaXRlIGxhbmd1YWdlIGNvZGUsIHNob3VsZCBiZSBvbmUgb2YgdGhlIGxpc3QgaW4gLi9sYW5ndWFnZXMvTmFtZXMucGhwCiskd2dMYW5ndWFnZUNvZGUgPSAiZW4iOworCiskd2dTZWNyZXRLZXkgPSAiMWM5MTJiZmUzNTE5ZmI3MGY1ZGM1MjNlY2M2OTgxMTFjZDQzZDgxYTExYzU4NWIzZWVmYjI4ZjI5YzI2OTliNyI7CisjJHdnU2VjcmV0S2V5ID0gIkBTRUNSRVRLRVlAIjsKKworCisjIFNpdGUgdXBncmFkZSBrZXkuIE11c3QgYmUgc2V0IHRvIGEgc3RyaW5nIChkZWZhdWx0IHByb3ZpZGVkKSB0byB0dXJuIG9uIHRoZQorIyB3ZWIgaW5zdGFsbGVyIHdoaWxlIExvY2FsU2V0dGluZ3MucGhwIGlzIGluIHBsYWNlCiskd2dVcGdyYWRlS2V5ID0gImRkYWU3ZGM4N2NkMGE2NDUiOworCisjIyBEZWZhdWx0IHNraW46IHlvdSBjYW4gY2hhbmdlIHRoZSBkZWZhdWx0IHNraW4uIFVzZSB0aGUgaW50ZXJuYWwgc3ltYm9saWMKKyMjIG5hbWVzLCBpZSAnc3RhbmRhcmQnLCAnbm9zdGFsZ2lhJywgJ2NvbG9nbmVibHVlJywgJ21vbm9ib29rJywgJ3ZlY3Rvcic6Ciskd2dEZWZhdWx0U2tpbiA9ICJ2ZWN0b3IiOworCisjIyBGb3IgYXR0YWNoaW5nIGxpY2Vuc2luZyBtZXRhZGF0YSB0byBwYWdlcywgYW5kIGRpc3BsYXlpbmcgYW4KKyMjIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgLyBpY29uLiBHTlUgRnJlZSBEb2N1bWVudGF0aW9uCisjIyBMaWNlbnNlIGFuZCBDcmVhdGl2ZSBDb21tb25zIGxpY2Vuc2VzIGFyZSBzdXBwb3J0ZWQgc28gZmFyLgorJHdnUmlnaHRzUGFnZSA9ICIiOyAjIFNldCB0byB0aGUgdGl0bGUgb2YgYSB3aWtpIHBhZ2UgdGhhdCBkZXNjcmliZXMgeW91ciBsaWNlbnNlL2NvcHlyaWdodAorJHdnUmlnaHRzVXJsICA9ICIiOworJHdnUmlnaHRzVGV4dCA9ICIiOworJHdnUmlnaHRzSWNvbiA9ICIiOworCisjIFBhdGggdG8gdGhlIEdOVSBkaWZmMyB1dGlsaXR5LiBVc2VkIGZvciBjb25mbGljdCByZXNvbHV0aW9uLgorJHdnRGlmZjMgPSAiL3Vzci9iaW4vZGlmZjMiOworCisjIFF1ZXJ5IHN0cmluZyBsZW5ndGggbGltaXQgZm9yIFJlc291cmNlTG9hZGVyLiBZb3Ugc2hvdWxkIG9ubHkgc2V0IHRoaXMgaWYKKyMgeW91ciB3ZWIgc2VydmVyIGhhcyBhIHF1ZXJ5IHN0cmluZyBsZW5ndGggbGltaXQgKHRoZW4gc2V0IGl0IHRvIHRoYXQgbGltaXQpLAorIyBvciBpZiB5b3UgaGF2ZSBzdWhvc2luLmdldC5tYXhfdmFsdWVfbGVuZ3RoIHNldCBpbiBwaHAuaW5pICh0aGVuIHNldCBpdCB0bworIyB0aGF0IHZhbHVlKQorJHdnUmVzb3VyY2VMb2FkZXJNYXhRdWVyeUxlbmd0aCA9IC0xOworCisKKworIyBFbmQgb2YgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgc2V0dGluZ3MuCisjIEFkZCBtb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBiZWxvdy4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL2RiX2luc3RhbGwucGhwIGIvY29udHJpYi9tdy10by1naXQvdC9pbnN0YWxsLXdpa2kvZGJfaW5zdGFsbC5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzMzg0OQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL2RiX2luc3RhbGwucGhwCkBAIC0wLDAgKzEsMTIwIEBACis8P3BocAorLyoqCisgKiBUaGlzIHNjcmlwdCBnZW5lcmF0ZXMgYSBTUUxpdGUgZGF0YWJhc2UgZm9yIGEgTWVkaWFXaWtpIHZlcnNpb24gMS4xOS4wCisgKiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBsb2dpbiBvZiB0aGUgYWRtaW4gKGFyZ3VtZW50IDEpIGFuZCBpdHMKKyAqIHBhc3N3b3JkIChhcmd1bWVudCAyKSBhbmQgdGhlIGZvbGRlciB3aGVyZSB0aGUgZGF0YWJhc2UgZmlsZQorICogaXMgbG9jYXRlZCAoYWJzb2x1dGUgcGF0aCBpbiBhcmd1bWVudCAzKS4KKyAqIEl0IGlzIHVzZWQgYnkgdGhlIHNjcmlwdCBpbnN0YWxsLXdpa2kuc2ggaW4gb3JkZXIgdG8gbWFrZSBlYXN5IHRoZQorICogaW5zdGFsbGF0aW9uIG9mIGEgTWVkaWFXaWtpLgorICoKKyAqIEluIG9yZGVyIHRvIGdlbmVyYXRlIGEgU1FMaXRlIGRhdGFiYXNlIGZpbGUsIE1lZGlhV2lraSBhc2sgdGhlIHVzZXIKKyAqIHRvIHN1Ym1pdCBzb21lIGZvcm1zIGluIGl0cyB3ZWIgYnJvd3Nlci4gVGhpcyBzY3JpcHQgc2ltdWxhdGVzIHRoaXMKKyAqIGJlaGF2aW9yIHRob3VnaCB0aGUgZnVuY3Rpb25zIDxnZXQ+IGFuZCA8c3VibWl0PgorICoKKyAqLworJGFyZ2MgPSAkX1NFUlZFUlsnYXJnYyddOworJGFyZ3YgPSAkX1NFUlZFUlsnYXJndiddOworCiskbG9naW4gPSAkYXJndlsyXTsKKyRwYXNzID0gJGFyZ3ZbM107CiskdG1wID0gJGFyZ3ZbNF07CiskcG9ydCA9ICRhcmd2WzVdOworCiskdXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6Jy4kcG9ydC4nL3dpa2kvbXctY29uZmlnL2luZGV4LnBocCc7CiskZGJfZGlyID0gdXJsZW5jb2RlKCR0bXApOworJHRtcF9jb29raWUgPSB0ZW1wbmFtKCR0bXAsICJDT09LSUVfIik7CisvKgorICogRmV0Y2hlcyBhIHBhZ2Ugd2l0aCBjVVJMLgorICovCitmdW5jdGlvbiBnZXQoJHBhZ2VfbmFtZSA9ICIiKSB7CisJJGN1cmwgPSBjdXJsX2luaXQoKTsKKwkkcGFnZV9uYW1lX2FkZCA9ICIiOworCWlmICgkcGFnZV9uYW1lICE9ICIiKSB7CisJCSRwYWdlX25hbWVfYWRkID0gJz9wYWdlPScuJHBhZ2VfbmFtZTsKKwl9CisJJHVybCA9ICRHTE9CQUxTWyd1cmwnXS4kcGFnZV9uYW1lX2FkZDsKKwkkdG1wX2Nvb2tpZSA9ICRHTE9CQUxTWyd0bXBfY29va2llJ107CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfQ09PS0lFSkFSLCAkdG1wX2Nvb2tpZSk7CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOworCWN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCB0cnVlKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9DT09LSUVGSUxFLCAkdG1wX2Nvb2tpZSk7CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfSEVBREVSLCB0cnVlKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VUkwsICR1cmwpOworCisJJHBhZ2UgPSBjdXJsX2V4ZWMoJGN1cmwpOworCWlmICghJHBhZ2UpIHsKKwkJZGllKCJDb3VsZCBub3QgZ2V0IHBhZ2U6ICR1cmxcbiIpOworCX0KKwljdXJsX2Nsb3NlKCRjdXJsKTsKKwlyZXR1cm4gJHBhZ2U7Cit9CisKKy8qCisgKiBTdWJtaXRzIGEgZm9ybSB3aXRoIGNVUkwuCisgKi8KK2Z1bmN0aW9uIHN1Ym1pdCgkcGFnZV9uYW1lLCAkb3B0aW9uID0gIiIpIHsKKwkkY3VybCA9IGN1cmxfaW5pdCgpOworCSRkYXRhcG9zdCA9ICdzdWJtaXQtY29udGludWU9Q29udGludWUrJUUyJTg2JTkyJzsKKwlpZiAoJG9wdGlvbiAhPSAiIikgeworCQkkZGF0YXBvc3QgPSAkb3B0aW9uLicmJy4kZGF0YXBvc3Q7CisJfQorCSR1cmwgPSAkR0xPQkFMU1sndXJsJ10uJz9wYWdlPScuJHBhZ2VfbmFtZTsKKwkkdG1wX2Nvb2tpZSA9ICRHTE9CQUxTWyd0bXBfY29va2llJ107CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfVVJMLCAkdXJsKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9QT1NULCB0cnVlKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUE9TVEZJRUxEUywgJGRhdGFwb3N0KTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfQ09PS0lFSkFSLCAkdG1wX2Nvb2tpZSk7CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfQ09PS0lFRklMRSwgJHRtcF9jb29raWUpOworCisJJHBhZ2UgPSBjdXJsX2V4ZWMoJGN1cmwpOworCWlmICghJHBhZ2UpIHsKKwkJZGllKCJDb3VsZCBub3QgZ2V0IHBhZ2U6ICR1cmxcbiIpOworCX0KKwljdXJsX2Nsb3NlKCRjdXJsKTsKKwlyZXR1cm4gIiRwYWdlIjsKK30KKworLyoKKyAqIEhlcmUgc3RhcnRzIHRoaXMgc2NyaXB0OiBzaW11bGF0ZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSB1c2VyCisgKiBzdWJtaXR0aW5nIGZvcm1zIHRvIGdlbmVyYXRlcyB0aGUgZGF0YWJhc2UgZmlsZS4KKyAqIE5vdGUgdGhpcyBzaW11bGF0aW9uIHdhcyBtYWRlIGZvciB0aGUgTWVkaWFXaWtpIHZlcnNpb24gMS4xOS4wLAorICogd2UgY2FuJ3QgYXNzdW1lIGl0IHdvcmtzIHdpdGggb3RoZXIgdmVyc2lvbnMuCisgKgorICovCisKKyRwYWdlID0gZ2V0KCk7CitpZiAoIXByZWdfbWF0Y2goJy9pbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSIoWzAtOV0rKSIgbmFtZT0iTGFuZ3VhZ2VSZXF1ZXN0VGltZSIvJywKKwkJJHBhZ2UsICRtYXRjaGVzKSkgeworCWVjaG8gIlVuZXhwZWN0ZWQgY29udGVudCBmb3IgcGFnZSBkb3dubG9hZGVkOlxuIjsKKwllY2hvICIkcGFnZSI7CisJZGllOworfTsKKyR0aW1lc3RhbXAgPSAkbWF0Y2hlc1sxXTsKKyRsYW5ndWFnZSA9ICJMYW5ndWFnZVJlcXVlc3RUaW1lPSR0aW1lc3RhbXAmdXNlbGFuZz1lbiZDb250TGFuZz1lbiI7CiskcGFnZSA9IHN1Ym1pdCgnTGFuZ3VhZ2UnLCAkbGFuZ3VhZ2UpOworCitzdWJtaXQoJ1dlbGNvbWUnKTsKKworJGRiX2NvbmZpZyA9ICdEQlR5cGU9c3FsaXRlJzsKKyRkYl9jb25maWcgPSAkZGJfY29uZmlnLicmc3FsaXRlX3dnU1FMaXRlRGF0YURpcj0nLiRkYl9kaXI7CiskZGJfY29uZmlnID0gJGRiX2NvbmZpZy4nJnNxbGl0ZV93Z0RCbmFtZT0nLiRhcmd2WzFdOworc3VibWl0KCdEQkNvbm5lY3QnLCAkZGJfY29uZmlnKTsKKworJHdpa2lfY29uZmlnID0gJ2NvbmZpZ193Z1NpdGVuYW1lPVRFU1QnOworJHdpa2lfY29uZmlnID0gJHdpa2lfY29uZmlnLicmY29uZmlnX19OYW1lc3BhY2VUeXBlPXNpdGUtbmFtZSc7Ciskd2lraV9jb25maWcgPSAkd2lraV9jb25maWcuJyZjb25maWdfd2dNZXRhTmFtZXNwYWNlPU15V2lraSc7Ciskd2lraV9jb25maWcgPSAkd2lraV9jb25maWcuJyZjb25maWdfX0FkbWluTmFtZT0nLiRsb2dpbjsKKworJHdpa2lfY29uZmlnID0gJHdpa2lfY29uZmlnLicmY29uZmlnX19BZG1pblBhc3N3b3JkPScuJHBhc3M7Ciskd2lraV9jb25maWcgPSAkd2lraV9jb25maWcuJyZjb25maWdfX0FkbWluUGFzc3dvcmQyPScuJHBhc3M7CisKKyR3aWtpX2NvbmZpZyA9ICR3aWtpX2NvbmZpZy4nJndpa2lfX2NvbmZpZ0VtYWlsPWVtYWlsJTQwZW1haWwub3JnJzsKKyR3aWtpX2NvbmZpZyA9ICR3aWtpX2NvbmZpZy4nJmNvbmZpZ19fU2tpcE9wdGlvbmFsPXNraXAnOworc3VibWl0KCdOYW1lJywgJHdpa2lfY29uZmlnKTsKK3N1Ym1pdCgnSW5zdGFsbCcpOworc3VibWl0KCdJbnN0YWxsJyk7CisKK3VubGluaygkdG1wX2Nvb2tpZSk7Cis/PgpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC9wdXNoLXB1bGwtdGVzdHMuc2ggYi9jb250cmliL213LXRvLWdpdC90L3B1c2gtcHVsbC10ZXN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGEyZGM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC9wdXNoLXB1bGwtdGVzdHMuc2gKQEAgLTAsMCArMSwxNDQgQEAKK3Rlc3RfcHVzaF9wdWxsICgpIHsKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBwdWxsIHdvcmtzIGFmdGVyIGFkZGluZyBhIG5ldyB3aWtpIHBhZ2UnICcKKwkJd2lraV9yZXNldCAmJgorCisJCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEgJiYKKwkJd2lraV9lZGl0cGFnZSBGb28gInBhZ2UgY3JlYXRlZCBhZnRlciB0aGUgZ2l0IGNsb25lIiBmYWxzZSAmJgorCisJCSgKKwkJCWNkIG13X2Rpcl8xICYmCisJCQlnaXQgcHVsbAorCQkpICYmCisKKwkJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzEgJiYKKwkJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8xIHJlZl9wYWdlXzEKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgcHVsbCB3b3JrcyBhZnRlciBlZGl0aW5nIGEgd2lraSBwYWdlJyAnCisJCXdpa2lfcmVzZXQgJiYKKworCQl3aWtpX2VkaXRwYWdlIEZvbyAicGFnZSBjcmVhdGVkIGJlZm9yZSB0aGUgZ2l0IGNsb25lIiBmYWxzZSAmJgorCQlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8yICYmCisJCXdpa2lfZWRpdHBhZ2UgRm9vICJuZXcgbGluZSBhZGRlZCBvbiB0aGUgd2lraSIgdHJ1ZSAmJgorCisJCSgKKwkJCWNkIG13X2Rpcl8yICYmCisJCQlnaXQgcHVsbAorCQkpICYmCisKKwkJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzIgJiYKKwkJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8yIHJlZl9wYWdlXzIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCB3b3JrcyBvbiBjb25mbGljdCBoYW5kbGVkIGJ5IGF1dG8tbWVyZ2UnICcKKwkJd2lraV9yZXNldCAmJgorCisJCXdpa2lfZWRpdHBhZ2UgRm9vICIxIGluaXQKKzMKKzUKKwkiIGZhbHNlICYmCisJCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzMgJiYKKworCQl3aWtpX2VkaXRwYWdlIEZvbyAiMSBpbml0CisyIGNvbnRlbnQgYWRkZWQgb24gd2lraSBhZnRlciBjbG9uZQorMworNQorCSIgZmFsc2UgJiYKKworCQkoCisJCQljZCBtd19kaXJfMyAmJgorCQllY2hvICIxIGluaXQKKzMKKzQgY29udGVudCBhZGRlZCBvbiBnaXQgYWZ0ZXIgY2xvbmUKKzUKKyIgPkZvby5tdyAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImNvbmZsaWN0aW5nIGNoYW5nZSBvbiBmb28iICYmCisJCQlnaXQgcHVsbCAmJgorCQkJZ2l0IHB1c2gKKwkJKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBwdXNoIHdvcmtzIGFmdGVyIGFkZGluZyBhIGZpbGUgLm13JyAnCisJCXdpa2lfcmVzZXQgJiYKKwkJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNCAmJgorCQl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfNCAmJgorCQkoCisJCQljZCBtd19kaXJfNCAmJgorCQkJdGVzdF9wYXRoX2lzX21pc3NpbmcgRm9vLm13ICYmCisJCQl0b3VjaCBGb28ubXcgJiYKKwkJCWVjaG8gImhlbGxvIHdvcmxkIiA+PkZvby5tdyAmJgorCQkJZ2l0IGFkZCBGb28ubXcgJiYKKwkJCWdpdCBjb21taXQgLW0gIkZvbyIgJiYKKwkJCWdpdCBwdXNoCisJCSkgJiYKKwkJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzQgJiYKKwkJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl80IHJlZl9wYWdlXzQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgcHVzaCB3b3JrcyBhZnRlciBlZGl0aW5nIGEgZmlsZSAubXcnICcKKwkJd2lraV9yZXNldCAmJgorCQl3aWtpX2VkaXRwYWdlICJGb28iICJwYWdlIGNyZWF0ZWQgYmVmb3JlIHRoZSBnaXQgY2xvbmUiIGZhbHNlICYmCisJCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzUgJiYKKworCQkoCisJCQljZCBtd19kaXJfNSAmJgorCQkJZWNobyAibmV3IGxpbmUgYWRkZWQgaW4gdGhlIGZpbGUgRm9vLm13IiA+PkZvby5tdyAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImVkaXQgZmlsZSBGb28ubXciICYmCisJCQlnaXQgcHVzaAorCQkpICYmCisKKwkJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzUgJiYKKwkJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl81IHJlZl9wYWdlXzUKKwknCisKKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICdHaXQgcHVzaCB3b3JrcyBhZnRlciBkZWxldGluZyBhIGZpbGUnICcKKwkJd2lraV9yZXNldCAmJgorCQl3aWtpX2VkaXRwYWdlIEZvbyAid2lraSBwYWdlIGFkZGVkIGJlZm9yZSBnaXQgY2xvbmUiIGZhbHNlICYmCisJCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzYgJiYKKworCQkoCisJCQljZCBtd19kaXJfNiAmJgorCQkJZ2l0IHJtIEZvby5tdyAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gInBhZ2UgRm9vLm13IGRlbGV0ZWQiICYmCisJCQlnaXQgcHVzaAorCQkpICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgd2lraV9wYWdlX2V4aXN0IEZvbworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01lcmdlIGNvbmZsaWN0IGV4cGVjdGVkIGFuZCBzb2x2aW5nIGl0JyAnCisJCXdpa2lfcmVzZXQgJiYKKworCQlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl83ICYmCisJCXdpa2lfZWRpdHBhZ2UgRm9vICIxIGNvbmZsaWN0CiszIHdpa2kKKzQiIGZhbHNlICYmCisKKwkJKAorCQkJY2QgbXdfZGlyXzcgJiYKKwkJZWNobyAiMSBjb25mbGljdAorMiBnaXQKKzQiID5Gb28ubXcgJiYKKwkJCWdpdCBhZGQgRm9vLm13ICYmCisJCQlnaXQgY29tbWl0IC1tICJjb25mbGljdCBjcmVhdGVkIiAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgJiYKKwkJCSIkUEVSTF9QQVRIIiAtcGkgLWUgInMvWzw9Pl0uKi8vZyIgRm9vLm13ICYmCisJCQlnaXQgY29tbWl0IC1hbSAibWVyZ2UgY29uZmxpY3Qgc29sdmVkIiAmJgorCQkJZ2l0IHB1c2gKKwkJKQorCScKKworCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdCBwdWxsIHdvcmtzIGFmdGVyIGRlbGV0aW5nIGEgd2lraSBwYWdlJyAnCisJCXdpa2lfcmVzZXQgJiYKKwkJd2lraV9lZGl0cGFnZSBGb28gIndpa2kgcGFnZSBhZGRlZCBiZWZvcmUgdGhlIGdpdCBjbG9uZSIgZmFsc2UgJiYKKwkJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfOCAmJgorCisJCXdpa2lfZGVsZXRlX3BhZ2UgRm9vICYmCisJCSgKKwkJCWNkIG13X2Rpcl84ICYmCisJCQlnaXQgcHVsbCAmJgorCQkJdGVzdF9wYXRoX2lzX21pc3NpbmcgRm9vLm13CisJCSkKKwknCit9CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Q5MzYwLW13LXRvLWdpdC1jbG9uZS5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjAtbXctdG8tZ2l0LWNsb25lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxMDY4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L3Q5MzYwLW13LXRvLWdpdC1jbG9uZS5zaApAQCAtMCwwICsxLDI1NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoQykgMjAxMgorIyAgICAgQ2hhcmxlcyBSb3Vzc2VsIDxjaGFybGVzLnJvdXNzZWxAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gQ2F0aGVicmFzIDxzaW1vbi5jYXRoZWJyYXNAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgSnVsaWVuIEtoYXlhdCA8anVsaWVuLmtoYXlhdEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBHdWlsbGF1bWUgU2FzZHkgPGd1aWxsYXVtZS5zYXNkeUBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBQZXJyYXQgPHNpbW9uLnBlcnJhdEBlbnNpbWFnLmltYWcuZnI+CisjCisjIExpY2Vuc2U6IEdQTCB2MiBvciBsYXRlcgorCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIEdpdCBNZWRpYXdpa2kgcmVtb3RlIGhlbHBlcjogZ2l0IGNsb25lJworCisuIC4vdGVzdC1naXRtdy1saWIuc2gKKy4gJFRFU1RfRElSRUNUT1JZL3Rlc3QtbGliLnNoCisKKwordGVzdF9jaGVja19wcmVjb25kCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIGNyZWF0ZXMgdGhlIGV4cGVjdGVkIGdpdCBsb2cgd2l0aCBvbmUgZmlsZScgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAidGhpcyBpcyBub3QgaW1wb3J0YW50IiBmYWxzZSAtYyBjYXQgLXMgInRoaXMgbXVzdCBiZSB0aGUgc2FtZSIgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xICYmCisJKAorCQljZCBtd19kaXJfMSAmJgorCQlnaXQgbG9nIC0tZm9ybWF0PSVzIEhFQUReLi5IRUFEID5sb2cudG1wCisJKSAmJgorCWVjaG8gInRoaXMgbXVzdCBiZSB0aGUgc2FtZSIgPm1zZy50bXAgJiYKKwlkaWZmIC1iIG13X2Rpcl8xL2xvZy50bXAgbXNnLnRtcAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSBjcmVhdGVzIHRoZSBleHBlY3RlZCBnaXQgbG9nIHdpdGggbXVsdGlwbGUgZmlsZXMnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBkYWRkeSAidGhpcyBpcyBub3QgaW1wb3J0YW50IiBmYWxzZSAtcz0idGhpcyBtdXN0IGJlIHRoZSBzYW1lIiAmJgorCXdpa2lfZWRpdHBhZ2UgZGFkZHkgIm5laXRoZXIgaXMgdGhpcyIgdHJ1ZSAtcz0idGhpcyBtdXN0IGFsc28gYmUgdGhlIHNhbWUiICYmCisJd2lraV9lZGl0cGFnZSBkYWRkeSAibmVpdGhlciBpcyB0aGlzIiB0cnVlIC1zPSJzYW1lIHNhbWUgc2FtZSIgJiYKKwl3aWtpX2VkaXRwYWdlIGRqICJkb250IGNhcmUiIGZhbHNlIC1zPSJpZGVudGljYWwiICYmCisJd2lraV9lZGl0cGFnZSBkaiAiZG9udCBjYXJlIGVpdGhlciIgdHJ1ZSAtcz0iaWRlbnRpY2FsIHRvbyIgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8yICYmCisJKAorCQljZCBtd19kaXJfMiAmJgorCQlnaXQgbG9nIC0tZm9ybWF0PSVzIERhZGR5Lm13ICA+bG9nRGFkZHkudG1wICYmCisJCWdpdCBsb2cgLS1mb3JtYXQ9JXMgRGoubXcgPmxvZ0RqLnRtcAorCSkgJiYKKwllY2hvICJzYW1lIHNhbWUgc2FtZSIgPm1zZ0RhZGR5LnRtcCAmJgorCWVjaG8gInRoaXMgbXVzdCBhbHNvIGJlIHRoZSBzYW1lIiA+Pm1zZ0RhZGR5LnRtcCAmJgorCWVjaG8gInRoaXMgbXVzdCBiZSB0aGUgc2FtZSIgPj5tc2dEYWRkeS50bXAgJiYKKwllY2hvICJpZGVudGljYWwgdG9vIiA+bXNnRGoudG1wICYmCisJZWNobyAiaWRlbnRpY2FsIiA+Pm1zZ0RqLnRtcCAmJgorCWRpZmYgLWIgbXdfZGlyXzIvbG9nRGFkZHkudG1wIG1zZ0RhZGR5LnRtcCAmJgorCWRpZmYgLWIgbXdfZGlyXzIvbG9nRGoudG1wIG1zZ0RqLnRtcAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSBjcmVhdGVzIG9ubHkgTWFpbl9QYWdlLm13IHdpdGggYW4gZW1wdHkgd2lraScgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8zICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl8zIDEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMy9NYWluX1BhZ2UubXcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIGRvZXMgbm90IGZldGNoIGEgZGVsZXRlZCBwYWdlJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICJ0aGlzIHBhZ2UgbXVzdCBiZSBkZWxldGVkIGJlZm9yZSB0aGUgY2xvbmUiIGZhbHNlICYmCisJd2lraV9kZWxldGVfcGFnZSBmb28gJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl80ICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl80IDEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfNC9NYWluX1BhZ2UubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfNC9Gb28ubXcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIHdvcmtzIHdpdGggcGFnZSBhZGRlZCcgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAiIEkgd2lsbCBiZSBjbG9uZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBiYXIgIkkgd2lsbCBiZSBjbG9uZWQiIGZhbHNlICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNSAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV81ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl81IHJlZl9wYWdlXzUgJiYKKwl3aWtpX2RlbGV0ZV9wYWdlIGZvbyAmJgorCXdpa2lfZGVsZXRlX3BhZ2UgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyB3aXRoIGFuIGVkaXRlZCBwYWdlICcgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAidGhpcyBwYWdlIHdpbGwgYmUgZWRpdGVkIiBcCisJCWZhbHNlIC1zICJmaXJzdCBlZGl0aW9uIG9mIHBhZ2UgZm9vIiYmCisJd2lraV9lZGl0cGFnZSBmb28gInRoaXMgcGFnZSBoYXMgYmVlbiBlZGl0ZWQgYW5kIG11c3QgYmUgb24gdGhlIGNsb25lICIgdHJ1ZSAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzYgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfNi9Gb28ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfNi9NYWluX1BhZ2UubXcgJiYKKwl3aWtpX2dldGFsbHBhZ2UgbXdfZGlyXzYvcGFnZV9yZWZfNiAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfNiBtd19kaXJfNi9wYWdlX3JlZl82ICYmCisJKAorCQljZCBtd19kaXJfNiAmJgorCQlnaXQgbG9nIC0tZm9ybWF0PSVzIEhFQUReIEZvby5tdyA+IC4uL0Zvby5sb2cKKwkpICYmCisJZWNobyAiZmlyc3QgZWRpdGlvbiBvZiBwYWdlIGZvbyIgPiBGb29FeHBlY3QubG9nICYmCisJZGlmZiBGb29FeHBlY3QubG9nIEZvby5sb2cKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgd29ya3Mgd2l0aCBzZXZlcmFsIHBhZ2VzIGFuZCBzb21lIGRlbGV0ZWQgJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICJ0aGlzIHBhZ2Ugd2lsbCBub3QgYmUgZGVsZXRlZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGJhciAiSSBtdXN0IG5vdCBiZSBlcmFzZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBuYW1uYW0gIkkgd2lsbCBub3QgYmUgdGhlcmUgYXQgdGhlIGVuZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG55YW5jYXQgIm55YW4gbnlhbiBueWFuIGRlbGV0ZSBtZSIgZmFsc2UgJiYKKwl3aWtpX2RlbGV0ZV9wYWdlIG5hbW5hbSAmJgorCXdpa2lfZGVsZXRlX3BhZ2UgbnlhbmNhdCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfNy9Gb28ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfNy9CYXIubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfNy9OYW1uYW0ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfNy9OeWFuY2F0Lm13ICYmCisJd2lraV9nZXRhbGxwYWdlIG13X2Rpcl83L3BhZ2VfcmVmXzcgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzcgbXdfZGlyXzcvcGFnZV9yZWZfNworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyB3aXRoIG9uZSBzcGVjaWZpYyBwYWdlIGNsb25lZCAnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmb28gIkkgd2lsbCBub3QgYmUgY2xvbmVkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgYmFyICJEbyBub3QgY2xvbmUgbWUiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBuYW1uYW0gIkkgd2lsbCBiZSBjbG9uZWQgOikiIGZhbHNlICAtcz0idGhpcyBsb2cgbXVzdCBzdGF5IiAmJgorCXdpa2lfZWRpdHBhZ2UgbnlhbmNhdCAibnlhbiBueWFuIG55YW4geW91IGNhbnQgY2xvbmUgbWUiIGZhbHNlICYmCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4ucGFnZXM9bmFtbmFtIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl84ICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl84IDEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfOC9OYW1uYW0ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfOC9NYWluX1BhZ2UubXcgJiYKKwkoCisJCWNkIG13X2Rpcl84ICYmCisJCWVjaG8gInRoaXMgbG9nIG11c3Qgc3RheSIgPm1zZy50bXAgJiYKKwkJZ2l0IGxvZyAtLWZvcm1hdD0lcyA+bG9nLnRtcCAmJgorCQlkaWZmIC1iIG1zZy50bXAgbG9nLnRtcAorCSkgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzgvTmFtbmFtLm13IE5hbW5hbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgd29ya3Mgd2l0aCBtdWx0aXBsZSBzcGVjaWZpYyBwYWdlIGNsb25lZCAnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmb28gIkkgd2lsbCBiZSB0aGVyZSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGJhciAiSSB3aWxsIG5vdCBkaXNhcHBlYXIiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBuYW1uYW0gIkkgYmUgZXJhc2VkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgbnlhbmNhdCAibnlhbiBueWFuIG55YW4geW91IHdpbGwgbm90IGVyYXNlIG1lIiBmYWxzZSAmJgorCXdpa2lfZGVsZXRlX3BhZ2UgbmFtbmFtICYmCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4ucGFnZXM9ImZvbyBiYXIgbnlhbmNhdCBuYW1uYW0iIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl85ICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl85IDMgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfOS9OYW1uYW0ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfOS9Gb28ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfOS9OeWFuY2F0Lm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzkvQmFyLm13ICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl85L0Zvby5tdyBGb28gJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzkvQmFyLm13IEJhciAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfOS9OeWFuY2F0Lm13IE55YW5jYXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTWVkaWF3aWtpLWNsb25lIG9mIHNldmVyYWwgc3BlY2lmaWMgcGFnZXMgb24gd2lraScgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAiZm9vIDEiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBiYXIgImJhciAxIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgZHVtbXkgImR1bW15IDEiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBjbG9uZWRfMSAiY2xvbmVkXzEgMSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGNsb25lZF8yICJjbG9uZWRfMiAyIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgY2xvbmVkXzMgImNsb25lZF8zIDMiIGZhbHNlICYmCisJbWtkaXIgLXAgcmVmX3BhZ2VfMTAgJiYKKwl3aWtpX2dldHBhZ2UgY2xvbmVkXzEgcmVmX3BhZ2VfMTAgJiYKKwl3aWtpX2dldHBhZ2UgY2xvbmVkXzIgcmVmX3BhZ2VfMTAgJiYKKwl3aWtpX2dldHBhZ2UgY2xvbmVkXzMgcmVmX3BhZ2VfMTAgJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5wYWdlcz0iY2xvbmVkXzEgY2xvbmVkXzIgY2xvbmVkXzMiIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xMCAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfMTAgcmVmX3BhZ2VfMTAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIHdvcmtzIHdpdGggdGhlIHNoYWxsb3cgb3B0aW9uJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICIxc3QgcmV2aXNpb24sIHNob3VsZCBiZSBjbG9uZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBiYXIgIjFzdCByZXZpc2lvbiwgc2hvdWxkIGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG55YW4gIjFzdCByZXZpc2lvbiwgc2hvdWxkIG5vdCBiZSBjbG9uZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBueWFuICIybmQgcmV2aXNpb24sIHNob3VsZCBiZSBjbG9uZWQiIGZhbHNlICYmCisJZ2l0IC1jIHJlbW90ZS5vcmlnaW4uc2hhbGxvdz10cnVlIGNsb25lIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xMSAmJgorCXRlc3RfY29udGFpbnNfTl9maWxlcyBtd19kaXJfMTEgNCAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMS9OeWFuLm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzExL0Zvby5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMS9CYXIubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTEvTWFpbl9QYWdlLm13ICYmCisJKAorCQljZCBtd19kaXJfMTEgJiYKKwkJdGVzdCAkKGdpdCBsb2cgLS1vbmVsaW5lIE55YW4ubXcgfCB3YyAtbCkgLWVxIDEgJiYKKwkJdGVzdCAkKGdpdCBsb2cgLS1vbmVsaW5lIEZvby5tdyB8IHdjIC1sKSAtZXEgMSAmJgorCQl0ZXN0ICQoZ2l0IGxvZyAtLW9uZWxpbmUgQmFyLm13IHwgd2MgLWwpIC1lcSAxICYmCisJCXRlc3QgJChnaXQgbG9nIC0tb25lbGluZSBNYWluX1BhZ2UubXcgfCB3YyAtbCApIC1lcSAxCisJKSAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTEvTnlhbi5tdyBOeWFuICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xMS9Gb28ubXcgRm9vICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xMS9CYXIubXcgQmFyICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xMS9NYWluX1BhZ2UubXcgTWFpbl9QYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyB3aXRoIHRoZSBzaGFsbG93IG9wdGlvbiB3aXRoIGEgZGVsZXRlIHBhZ2UnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmb28gIjFzdCByZXZpc2lvbiwgd2lsbCBiZSBkZWxldGVkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgYmFyICIxc3QgcmV2aXNpb24sIHNob3VsZCBiZSBjbG9uZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBueWFuICIxc3QgcmV2aXNpb24sIHNob3VsZCBub3QgYmUgY2xvbmVkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgbnlhbiAiMm5kIHJldmlzaW9uLCBzaG91bGQgYmUgY2xvbmVkIiBmYWxzZSAmJgorCXdpa2lfZGVsZXRlX3BhZ2UgZm9vICYmCisJZ2l0IC1jIHJlbW90ZS5vcmlnaW4uc2hhbGxvdz10cnVlIGNsb25lIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xMiAmJgorCXRlc3RfY29udGFpbnNfTl9maWxlcyBtd19kaXJfMTIgMyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMi9OeWFuLm13ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzEyL0Zvby5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMi9CYXIubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTIvTWFpbl9QYWdlLm13ICYmCisJKAorCQljZCBtd19kaXJfMTIgJiYKKwkJdGVzdCAkKGdpdCBsb2cgLS1vbmVsaW5lIE55YW4ubXcgfCB3YyAtbCkgLWVxIDEgJiYKKwkJdGVzdCAkKGdpdCBsb2cgLS1vbmVsaW5lIEJhci5tdyB8IHdjIC1sKSAtZXEgMSAmJgorCQl0ZXN0ICQoZ2l0IGxvZyAtLW9uZWxpbmUgTWFpbl9QYWdlLm13IHwgd2MgLWwgKSAtZXEgMQorCSkgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzEyL055YW4ubXcgTnlhbiAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTIvQmFyLm13IEJhciAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTIvTWFpbl9QYWdlLm13IE1haW5fUGFnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUZXN0IG9mIGZldGNoaW5nIGEgY2F0ZWdvcnknICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBGb28gIkkgd2lsbCBiZSBjbG9uZWQiIGZhbHNlIC1jPUNhdGVnb3J5ICYmCisJd2lraV9lZGl0cGFnZSBCYXIgIk1lZXQgbWUgb24gdGhlIHJlcG9zaXRvcnkiIGZhbHNlIC1jPUNhdGVnb3J5ICYmCisJd2lraV9lZGl0cGFnZSBEdW1teSAiSSB3aWxsIG5vdCBjb21lIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgQmFyV3JvbmcgIkkgd2lsbCBzdGF5IG9ubGluZSBvbmx5IiBmYWxzZSAtYz1Ob3RDYXRlZ29yeSAmJgorCWdpdCBjbG9uZSAtYyByZW1vdGUub3JpZ2luLmNhdGVnb3JpZXM9IkNhdGVnb3J5IiBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTMgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMTMgQ2F0ZWdvcnkgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzEzIHJlZl9wYWdlXzEzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Rlc3Qgb2YgcmVzaXN0YW5jZSB0byBtb2RpZmljYXRpb24gb2YgY2F0ZWdvcnkgb24gd2lraSBmb3IgY2xvbmUnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBUb2JlZGVsZXRlZCAidGhpcyBwYWdlIHdpbGwgYmUgZGVsZXRlZCIgZmFsc2UgLWM9Q2F0b25lICYmCisJd2lraV9lZGl0cGFnZSBUb2JlZWRpdGVkICJ0aGlzIHBhZ2Ugd2lsbCBiZSBtb2RpZmllZCIgZmFsc2UgLWM9Q2F0b25lICYmCisJd2lraV9lZGl0cGFnZSBOb3JtYWxvbmUgInRoaXMgcGFnZSB3b250IGJlIG1vZGlmaWVkIGFuZCB3aWxsIGJlIG9uIGdpdCIgZmFsc2UgLWM9Q2F0b25lICYmCisJd2lraV9lZGl0cGFnZSBOb3Rjb25zaWRlcmVkICJ0aGlzIHBhZ2Ugd2lsbCBub3QgYXBwZWFyIG9uIGxvY2FsIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgT3RoZXJjYXRlZ29yeSAidGhpcyBwYWdlIHdpbGwgbm90IGFwcGVhciBvbiBsb2NhbCIgZmFsc2UgLWM9Q2F0dHdvICYmCisJd2lraV9lZGl0cGFnZSBUb2JlZWRpdGVkICJ0aGlzIHBhZ2UgaGF2ZSBiZWVuIG1vZGlmaWVkIiB0cnVlIC1jPUNhdG9uZSAmJgorCXdpa2lfZGVsZXRlX3BhZ2UgVG9iZWRlbGV0ZWQgJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5jYXRlZ29yaWVzPSJDYXRvbmUiIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xNCAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV8xNCBDYXRvbmUgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzE0IHJlZl9wYWdlXzE0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC90OTM2MS1tdy10by1naXQtcHVzaC1wdWxsLnNoIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2MS1tdy10by1naXQtcHVzaC1wdWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllYTIwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L3Q5MzYxLW13LXRvLWdpdC1wdXNoLXB1bGwuc2gKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoQykgMjAxMgorIyAgICAgQ2hhcmxlcyBSb3Vzc2VsIDxjaGFybGVzLnJvdXNzZWxAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gQ2F0aGVicmFzIDxzaW1vbi5jYXRoZWJyYXNAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgSnVsaWVuIEtoYXlhdCA8anVsaWVuLmtoYXlhdEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBHdWlsbGF1bWUgU2FzZHkgPGd1aWxsYXVtZS5zYXNkeUBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBQZXJyYXQgPHNpbW9uLnBlcnJhdEBlbnNpbWFnLmltYWcuZnI+CisjCisjIExpY2Vuc2U6IEdQTCB2MiBvciBsYXRlcgorCisjIHRlc3RzIGZvciBnaXQtcmVtb3RlLW1lZGlhd2lraQorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoZSBHaXQgTWVkaWF3aWtpIHJlbW90ZSBoZWxwZXI6IGdpdCBwdXNoIGFuZCBnaXQgcHVsbCBzaW1wbGUgdGVzdCBjYXNlcycKKworLiAuL3Rlc3QtZ2l0bXctbGliLnNoCisuIC4vcHVzaC1wdWxsLXRlc3RzLnNoCisuICRURVNUX0RJUkVDVE9SWS90ZXN0LWxpYi5zaAorCit0ZXN0X2NoZWNrX3ByZWNvbmQKKwordGVzdF9wdXNoX3B1bGwKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Q5MzYyLW13LXRvLWdpdC11dGY4LnNoIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2Mi1tdy10by1naXQtdXRmOC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YjBkYmRhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2Mi1tdy10by1naXQtdXRmOC5zaApAQCAtMCwwICsxLDM0NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoQykgMjAxMgorIyAgICAgQ2hhcmxlcyBSb3Vzc2VsIDxjaGFybGVzLnJvdXNzZWxAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gQ2F0aGVicmFzIDxzaW1vbi5jYXRoZWJyYXNAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgSnVsaWVuIEtoYXlhdCA8anVsaWVuLmtoYXlhdEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBHdWlsbGF1bWUgU2FzZHkgPGd1aWxsYXVtZS5zYXNkeUBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBQZXJyYXQgPHNpbW9uLnBlcnJhdEBlbnNpbWFnLmltYWcuZnI+CisjCisjIExpY2Vuc2U6IEdQTCB2MiBvciBsYXRlcgorCisjIHRlc3RzIGZvciBnaXQtcmVtb3RlLW1lZGlhd2lraQorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdC1tZWRpYXdpa2kgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gZmlsZW5hbWVzJworCisuIC4vdGVzdC1naXRtdy1saWIuc2gKKy4gJFRFU1RfRElSRUNUT1JZL3Rlc3QtbGliLnNoCisKKwordGVzdF9jaGVja19wcmVjb25kCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIHdvcmtzIGZvciBhIHdpa2kgd2l0aCBhY2NlbnRzIGluIHRoZSBwYWdlIG5hbWVzJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZsOpw6kgIlRoaXMgcGFnZSBtdXN0IGJlIGTDqWzDqXTDqWQgYmVmb3JlIGNsb25lIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2Uga8Oow6ggIlRoaXMgcGFnZSBtdXN0IGJlIGRlbGV0ZWQgYmVmb3JlIGNsb25lIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgaMOgw6AgIlRoaXMgcGFnZSBtdXN0IGJlIGRlbGV0ZWQgYmVmb3JlIGNsb25lIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2Uga8Ouw64gIlRoaXMgcGFnZSBtdXN0IGJlIGRlbGV0ZWQgYmVmb3JlIGNsb25lIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICJUaGlzIHBhZ2UgbXVzdCBiZSBkZWxldGVkIGJlZm9yZSBjbG9uZSIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzEgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzEgcmVmX3BhZ2VfMQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBwdWxsIHdvcmtzIHdpdGggYSB3aWtpIHdpdGggYWNjZW50cyBpbiB0aGUgcGFnZXMgbmFtZXMnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBrw67DriAidGhpcyBwYWdlIG11c3QgYmUgY2xvbmVkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICJ0aGlzIHBhZ2UgbXVzdCBiZSBjbG9uZWQiIGZhbHNlICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMiAmJgorCXdpa2lfZWRpdHBhZ2Ugw6nDoMOuw7TDuyAiVGhpcyBwYWdlIG11c3QgYmUgcHVsbGVkIiBmYWxzZSAmJgorCSgKKwkJY2QgbXdfZGlyXzIgJiYKKwkJZ2l0IHB1bGwKKwkpICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzIgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzIgcmVmX3BhZ2VfMgorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Nsb25pbmcgYSBjaG9zZW4gcGFnZSB3b3JrcyB3aXRoIGFjY2VudHMnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBrw67DriAidGhpcyBwYWdlIG11c3QgYmUgY2xvbmVkIiBmYWxzZSAmJgorCWdpdCBjbG9uZSAtYyByZW1vdGUub3JpZ2luLnBhZ2VzPWvDrsOuIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8zICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8zL0vDrsOuLm13IEvDrsOuICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzMvS8Ouw64ubXcgJiYKKwlybSAtcmYgbXdfZGlyXzMKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUaGUgc2hhbGxvdyBvcHRpb24gd29ya3Mgd2l0aCBhY2NlbnRzJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgbsOpb8OgICIxc3QgcmV2aXNpb24sIHNob3VsZCBub3QgYmUgY2xvbmVkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgbsOpb8OgICIybmQgcmV2aXNpb24sIHNob3VsZCBiZSBjbG9uZWQiIGZhbHNlICYmCisJZ2l0IC1jIHJlbW90ZS5vcmlnaW4uc2hhbGxvdz10cnVlIGNsb25lIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl80ICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl80IDIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfNC9Ow6lvw6AubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfNC9NYWluX1BhZ2UubXcgJiYKKwkoCisJCWNkIG13X2Rpcl80ICYmCisJCXRlc3QgJChnaXQgbG9nIC0tb25lbGluZSBOw6lvw6AubXcgfCB3YyAtbCkgLWVxIDEgJiYKKwkJdGVzdCAkKGdpdCBsb2cgLS1vbmVsaW5lIE1haW5fUGFnZS5tdyB8IHdjIC1sICkgLWVxIDEKKwkpICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl80L07DqW/DoC5tdyBOw6lvw6AgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzQvTWFpbl9QYWdlLm13IE1haW5fUGFnZQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Nsb25pbmcgd29ya3Mgd2hlbiBwYWdlIG5hbWUgZmlyc3QgbGV0dGVyIGhhcyBhbiBhY2NlbnQnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSDDrsOuICJ0aGlzIHBhZ2UgbXVzdCBiZSBjbG9uZWQiIGZhbHNlICYmCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4ucGFnZXM9w67DriBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl81L8OOw64ubXcgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzUvw47Dri5tdyDDjsOuCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IHB1c2ggd29ya3Mgd2l0aCBhIHdpa2kgd2l0aCBhY2NlbnRzJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZsOpw6kgImxvdHMgb2YgYWNjZW50cyA6IMOpw6jDoMOWIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICJ0aGlzIHBhZ2UgbXVzdCBiZSBjbG9uZWQiIGZhbHNlICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNiAmJgorCSgKKwkJY2QgbXdfZGlyXzYgJiYKKwkJZWNobyAiQSB3aWxkIFDDrmvDpGNow7sgYXBwZWFycyBvbiB0aGUgd2lraSIgPlDDrmvDpGNow7subXcgJiYKKwkJZ2l0IGFkZCBQw65rw6RjaMO7Lm13ICYmCisJCWdpdCBjb21taXQgLW0gIkEgbmV3IHBhZ2UgYXBwZWFycyIgJiYKKwkJZ2l0IHB1c2gKKwkpICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzYgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzYgcmVmX3BhZ2VfNgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgd29ya3Mgd2l0aCBhY2NlbnRzYW5kIHNwYWNlcycgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlICLDqSDDoCDDriIgInRoaXMgcGFnZSBtdXN0IGJlIGTDqWzDqXTDqSBiZWZvcmUgdGhlIGNsb25lIiBmYWxzZSAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzcgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfNyAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfNyByZWZfcGFnZV83CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYXJhY3RlciAkIGluIHBhZ2UgbmFtZSAobXcgLT4gZ2l0KScgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGZpbGVfXCRfZm9vICJleHBlY3QgdG8gYmUgY2FsbGVkIGZpbGVfJF9mb28iIGZhbHNlICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfOCAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl84L0ZpbGVfXCRfZm9vLm13ICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzggJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzggcmVmX3BhZ2VfOAorJworCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhcmFjdGVyICQgaW4gZmlsZSBuYW1lIChnaXQgLT4gbXcpICcgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl85ICYmCisJKAorCQljZCBtd19kaXJfOSAmJgorCQllY2hvICJ0aGlzIGZpbGUgaXMgY2FsbGVkIEZpbGVfXCRfZm9vLm13IiA+RmlsZV9cJF9mb28ubXcgJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLWFtICJmaWxlIEZpbGVfXCRfZm9vLm13IiAmJgorCQlnaXQgcHVsbCAmJgorCQlnaXQgcHVzaAorCSkgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfOSAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfOSByZWZfcGFnZV85CisnCisKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY2FwaXRhbCBhdCB0aGUgYmVnaW5uaW5nIG9mIGZpbGUgbmFtZXMnICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTAgJiYKKwkoCisJCWNkIG13X2Rpcl8xMCAmJgorCQllY2hvICJteSBuZXcgZmlsZSBmb28iID5mb28ubXcgJiYKKwkJZWNobyAibXkgbmV3IGZpbGUgRm9vLi4uIEZpbmdlciBjcm9zc2VkIiA+Rm9vLm13ICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgY29tbWl0IC1hbSAiZmlsZSBmb28ubXciICYmCisJCWdpdCBwdWxsICYmCisJCWdpdCBwdXNoCisJKSAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV8xMCAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfMTAgcmVmX3BhZ2VfMTAKKycKKworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdzcGVjaWFsIGNoYXJhY3RlciBhdCB0aGUgYmVnaW5uaW5nIG9mIGZpbGUgbmFtZSBmcm9tIG13IHRvIGdpdCcgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xMSAmJgorCXdpa2lfZWRpdHBhZ2Uge2NoYXJfMSAiZXhwZWN0IHRvIGJlIHJlbmFtZWQge2NoYXJfMSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIFtjaGFyXzIgImV4cGVjdCB0byBiZSByZW5hbWVkIFtjaGFyXzIiIGZhbHNlICYmCisJKAorCQljZCBtd19kaXJfMTEgJiYKKwkJZ2l0IHB1bGwKKwkpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzExL3tjaGFyXzEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTEvW2NoYXJfMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQdWxsIHBhZ2Ugd2l0aCB0aXRsZSBjb250YWluaW5nICI6IiBvdGhlciB0aGFuIG5hbWVzcGFjZSBzZXBhcmF0b3InICcKKwl3aWtpX2VkaXRwYWdlIEZvbzpCYXIgY29udGVudCBmYWxzZSAmJgorCSgKKwkJY2QgbXdfZGlyXzExICYmCisJCWdpdCBwdWxsCisJKSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMS9Gb286QmFyLm13CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1B1c2ggcGFnZSB3aXRoIHRpdGxlIGNvbnRhaW5pbmcgIjoiIG90aGVyIHRoYW4gbmFtZXNwYWNlIHNlcGFyYXRvcicgJworCSgKKwkJY2QgbXdfZGlyXzExICYmCisJCWVjaG8gY29udGVudCA+Tm90QU5hbWVTcGFjZTpQYWdlLm13ICYmCisJCWdpdCBhZGQgTm90QU5hbWVTcGFjZTpQYWdlLm13ICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBwYWdlIHdpdGggY29sb24iICYmCisJCWdpdCBwdXNoCisJKSAmJgorCXdpa2lfcGFnZV9leGlzdCBOb3RBTmFtZVNwYWNlOlBhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBvZiBjb3JyZWN0IGZvcm1hdHRpbmcgZm9yIGZpbGUgbmFtZSBmcm9tIG13IHRvIGdpdCcgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xMiAmJgorCXdpa2lfZWRpdHBhZ2UgY2hhcl8lXzdiXzEgImV4cGVjdCB0byBiZSByZW5hbWVkIGNoYXJ7XzEiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBjaGFyXyVfNWJfMiAiZXhwZWN0IHRvIGJlIHJlbmFtZWQgY2hhcntfMiIgZmFsc2UgJiYKKwkoCisJCWNkIG13X2Rpcl8xMiAmJgorCQlnaXQgcHVsbAorCSkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTIvQ2hhclx7XzEubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTIvQ2hhclxbXzIubXcgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMTIgJiYKKwltdiByZWZfcGFnZV8xMi9DaGFyXyVfN2JfMS5tdyByZWZfcGFnZV8xMi9DaGFyXHtfMS5tdyAmJgorCW12IHJlZl9wYWdlXzEyL0NoYXJfJV81Yl8yLm13IHJlZl9wYWdlXzEyL0NoYXJcW18yLm13ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8xMiByZWZfcGFnZV8xMgorJworCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3Rlc3Qgb2YgY29ycmVjdCBmb3JtYXR0aW5nIGZvciBmaWxlIG5hbWUgYmVnaW5uaW5nIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXInICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTMgJiYKKwkoCisJCWNkIG13X2Rpcl8xMyAmJgorCQllY2hvICJteSBuZXcgZmlsZSB7Y2hhcl8xIiA+XHtjaGFyXzEubXcgJiYKKwkJZWNobyAibXkgbmV3IGZpbGUgW2NoYXJfMiIgPlxbY2hhcl8yLm13ICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgY29tbWl0IC1hbSAiY29tbWl0dGluZyBzb21lIGV4b3RpYyBmaWxlIG5hbWUuLi4iICYmCisJCWdpdCBwdXNoICYmCisJCWdpdCBwdWxsCisJKSAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV8xMyAmJgorCXRlc3RfcGF0aF9pc19maWxlIHJlZl9wYWdlXzEzL3tjaGFyXzEubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSByZWZfcGFnZV8xMy9bY2hhcl8yLm13ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8xMyByZWZfcGFnZV8xMworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgb2YgY29ycmVjdCBmb3JtYXR0aW5nIGZvciBmaWxlIG5hbWUgZnJvbSBnaXQgdG8gbXcnICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTQgJiYKKwkoCisJCWNkIG13X2Rpcl8xNCAmJgorCQllY2hvICJteSBuZXcgZmlsZSBjaGFye18xIiA+Q2hhclx7XzEubXcgJiYKKwkJZWNobyAibXkgbmV3IGZpbGUgY2hhcltfMiIgPkNoYXJcW18yLm13ICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgY29tbWl0IC1tICJjb21taXR0aW5nIHNvbWUgZXhvdGljIGZpbGUgbmFtZS4uLiIgJiYKKwkJZ2l0IHB1c2gKKwkpICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzE0ICYmCisJbXYgbXdfZGlyXzE0L0NoYXJce18xLm13IG13X2Rpcl8xNC9DaGFyXyVfN2JfMS5tdyAmJgorCW12IG13X2Rpcl8xNC9DaGFyXFtfMi5tdyBtd19kaXJfMTQvQ2hhcl8lXzViXzIubXcgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzE0IHJlZl9wYWdlXzE0CisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsb25lIHdpdGggLycgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIFwvZm9cL28gInRoaXMgaXMgbm90IGltcG9ydGFudCIgZmFsc2UgLWM9RGVsZXRlZCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE1ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzE1LyUyRmZvJTJGby5tdyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTUvJTJGZm8lMkZvLm13IFwvZm9cL28KKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVzaCB3aXRoIC8nICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTYgJiYKKwllY2hvICJJIHdpbGwgYmUgb24gdGhlIHdpa2kiID5td19kaXJfMTYvJTJGZm8lMkZvLm13ICYmCisJKAorCQljZCBtd19kaXJfMTYgJiYKKwkJZ2l0IGFkZCAlMkZmbyUyRm8ubXcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiICUyRmZvJTJGbyBhZGRlZCIgJiYKKwkJZ2l0IHB1c2gKKwkpICYmCisJd2lraV9wYWdlX2V4aXN0IFwvZm9cL28gJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzE2LyUyRmZvJTJGby5tdyBcL2ZvXC9vCisKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xvbmUgd2l0aCBcJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgXFxrb1xcbyAidGhpcyBpcyBub3QgaW1wb3J0YW50IiBmYWxzZSAtYz1EZWxldGVkICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTcvXFxrb1xcby5tdyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTcvXFxrb1xcby5tdyBcXGtvXFxvCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1c2ggd2l0aCBcJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE4ICYmCisJZWNobyAiSSB3aWxsIGJlIG9uIHRoZSB3aWtpIiA+bXdfZGlyXzE4L1xca29cXG8ubXcgJiYKKwkoCisJCWNkIG13X2Rpcl8xOCAmJgorCQlnaXQgYWRkIFxca29cXG8ubXcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiIFxca29cXG8gYWRkZWQiICYmCisJCWdpdCBwdXNoCisJKSYmCisJd2lraV9wYWdlX2V4aXN0IFxca29cXG8gJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzE4L1xca29cXG8ubXcgXFxrb1xcbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSB3aXRoIFwgaW4gZm9ybWF0IGNvbnRyb2wnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBcXG5vXFxvICJ0aGlzIGlzIG5vdCBpbXBvcnRhbnQiIGZhbHNlICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTkvXFxub1xcby5tdyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTkvXFxub1xcby5tdyBcXG5vXFxvCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1c2ggd2l0aCBcIGluIGZvcm1hdCBjb250cm9sJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzIwICYmCisJZWNobyAiSSB3aWxsIGJlIG9uIHRoZSB3aWtpIiA+bXdfZGlyXzIwL1xcZm9cXG8ubXcgJiYKKwkoCisJCWNkIG13X2Rpcl8yMCAmJgorCQlnaXQgYWRkIFxcZm9cXG8ubXcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiIFxcZm9cXG8gYWRkZWQiICYmCisJCWdpdCBwdXNoCisJKSYmCisJd2lraV9wYWdlX2V4aXN0IFxcZm9cXG8gJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzIwL1xcZm9cXG8ubXcgXFxmb1xcbworCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1pbXBvcnQgbWV0YS1jaGFyYWN0ZXJzIGluIHBhZ2UgbmFtZSAobXcgLT4gZ2l0KScgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIFwiZmlsZVwiX1xcX2ZvbyAiZXhwZWN0IHRvIGJlIGNhbGxlZCBcImZpbGVcIl9cXF9mb28iIGZhbHNlICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMjEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMjEvXCJmaWxlXCJfXFxfZm9vLm13ICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzIxICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8yMSByZWZfcGFnZV8yMQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtaW1wb3J0IG1ldGEtY2hhcmFjdGVycyBpbiBwYWdlIG5hbWUgKGdpdCAtPiBtdykgJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzIyICYmCisJKAorCQljZCBtd19kaXJfMjIgJiYKKwkJZWNobyAidGhpcyBmaWxlIGlzIGNhbGxlZCBcImZpbGVcIl9cXF9mb28ubXciID5cImZpbGVcIl9cXF9mb28gJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLWFtICJmaWxlIFwiZmlsZVwiX1xcX2ZvbyIgJiYKKwkJZ2l0IHB1bGwgJiYKKwkJZ2l0IHB1c2gKKwkpICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzIyICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8yMiByZWZfcGFnZV8yMgorJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC90OTM2My1tdy10by1naXQtZXhwb3J0LWltcG9ydC5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjMtbXctdG8tZ2l0LWV4cG9ydC1pbXBvcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2ZmM2EwOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjMtbXctdG8tZ2l0LWV4cG9ydC1pbXBvcnQuc2gKQEAgLTAsMCArMSwyMTcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIKKyMgICAgIENoYXJsZXMgUm91c3NlbCA8Y2hhcmxlcy5yb3Vzc2VsQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIENhdGhlYnJhcyA8c2ltb24uY2F0aGVicmFzQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEp1bGllbiBLaGF5YXQgPGp1bGllbi5raGF5YXRAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgR3VpbGxhdW1lIFNhc2R5IDxndWlsbGF1bWUuc2FzZHlAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gUGVycmF0IDxzaW1vbi5wZXJyYXRAZW5zaW1hZy5pbWFnLmZyPgorIworIyBMaWNlbnNlOiBHUEwgdjIgb3IgbGF0ZXIKKworIyB0ZXN0cyBmb3IgZ2l0LXJlbW90ZS1tZWRpYXdpa2kKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGUgR2l0IE1lZGlhd2lraSByZW1vdGUgaGVscGVyOiBnaXQgcHVzaCBhbmQgZ2l0IHB1bGwgc2ltcGxlIHRlc3QgY2FzZXMnCisKKy4gLi90ZXN0LWdpdG13LWxpYi5zaAorLiAkVEVTVF9ESVJFQ1RPUlkvdGVzdC1saWIuc2gKKworCit0ZXN0X2NoZWNrX3ByZWNvbmQKKworCit0ZXN0X2dpdF9yZWltcG9ydCAoKSB7CisJZ2l0IC1jIHJlbW90ZS5vcmlnaW4uZHVtYlB1c2g9dHJ1ZSBwdXNoICYmCisJZ2l0IC1jIHJlbW90ZS5vcmlnaW4ubWVkaWFJbXBvcnQ9dHJ1ZSBwdWxsIC0tcmViYXNlCit9CisKKyMgRG9uJ3QgYm90aGVyIHdpdGggcGVybWlzc2lvbnMsIGJlIGFkbWluaXN0cmF0b3IgYnkgZGVmYXVsdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29uZmlnJyAnCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCByZW1vdGUub3JpZ2luLm13TG9naW4gV2lraUFkbWluICYmCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCByZW1vdGUub3JpZ2luLm13UGFzc3dvcmQgQWRtaW5QYXNzICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS1nbG9iYWwgLS11bnNldCByZW1vdGUub3JpZ2luLm1lZGlhSW1wb3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdXNoIGNhbiB1cGxvYWQgbWVkaWEgKEZpbGU6KSBmaWxlcycgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2RpciAmJgorCSgKKwkJY2QgbXdfZGlyICYmCisJCWVjaG8gImhlbGxvIHdvcmxkIiA+Rm9vLnR4dCAmJgorCQlnaXQgYWRkIEZvby50eHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgdGV4dCBmaWxlIiAmJgorCQlnaXQgcHVzaCAmJgorCQkiJFBFUkxfUEFUSCIgLWUgInByaW50IFNURE9VVCBcImJpbmFyeSBjb250ZW50OiBcIi5jaHIoMjU1KTsiID5Gb28udHh0ICYmCisJCWdpdCBhZGQgRm9vLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgYSB0ZXh0IGZpbGUgd2l0aCBiaW5hcnkgY29udGVudCIgJiYKKwkJZ2l0IHB1c2gKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSB3b3JrcyBvbiBwcmV2aW91c2x5IGNyZWF0ZWQgd2lraSB3aXRoIG1lZGlhIGZpbGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbXdfZGlyIG13X2Rpcl9jbG9uZSIgJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5tZWRpYWltcG9ydD10cnVlIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl9jbG9uZSAmJgorCXRlc3RfY21wIG13X2Rpcl9jbG9uZS9Gb28udHh0IG13X2Rpci9Gb28udHh0ICYmCisJKGNkIG13X2Rpcl9jbG9uZSAmJiBnaXQgY2hlY2tvdXQgSEVBRF4pICYmCisJKGNkIG13X2RpciAmJiBnaXQgY2hlY2tvdXQgSEVBRF4pICYmCisJdGVzdF9jbXAgbXdfZGlyX2Nsb25lL0Zvby50eHQgbXdfZGlyL0Zvby50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1c2ggY2FuIHVwbG9hZCBtZWRpYSAoRmlsZTopIGZpbGVzIGNvbnRhaW5pbmcgdmFsaWQgVVRGLTgnICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXIgJiYKKwkoCisJCWNkIG13X2RpciAmJgorCQkiJFBFUkxfUEFUSCIgLWUgInByaW50IFNURE9VVCBcIlVURi04IGNvbnRlbnQ6IMOpw6jDoMOpw6rigqwuXCI7IiA+QmFyLnR4dCAmJgorCQlnaXQgYWRkIEJhci50eHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgdGV4dCBmaWxlIHdpdGggVVRGLTggY29udGVudCIgJiYKKwkJZ2l0IHB1c2gKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSB3b3JrcyBvbiBwcmV2aW91c2x5IGNyZWF0ZWQgd2lraSB3aXRoIG1lZGlhIGZpbGVzIGNvbnRhaW5pbmcgdmFsaWQgVVRGLTgnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBtd19kaXIgbXdfZGlyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtYyByZW1vdGUub3JpZ2luLm1lZGlhaW1wb3J0PXRydWUgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyX2Nsb25lICYmCisJdGVzdF9jbXAgbXdfZGlyX2Nsb25lL0Jhci50eHQgbXdfZGlyL0Jhci50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1c2ggJiBwdWxsIHdvcmsgd2l0aCBsb2NhbGx5IHJlbmFtZWQgbWVkaWEgZmlsZXMnICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBtd19kaXIiICYmCisJKAorCQljZCBtd19kaXIgJiYKKwkJZWNobyAiQSBGaWxlIiA+Rm9vLnR4dCAmJgorCQlnaXQgYWRkIEZvby50eHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgZmlsZSIgJiYKKwkJZ2l0IG12IEZvby50eHQgQmFyLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tICJSZW5hbWUgYSBmaWxlIiAmJgorCQl0ZXN0X2dpdF9yZWltcG9ydCAmJgorCQllY2hvICJBIEZpbGUiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IEJhci50eHQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgRm9vLnR4dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1c2ggY2FuIHByb3BhZ2F0ZSBsb2NhbCBwYWdlIGRlbGV0aW9uJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgbXdfZGlyIiAmJgorCSgKKwkJY2QgbXdfZGlyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIEZvby5tdyAmJgorCQllY2hvICJoZWxsbyB3b3JsZCIgPkZvby5tdyAmJgorCQlnaXQgYWRkIEZvby5tdyAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgdGhlIHBhZ2UgRm9vIiAmJgorCQlnaXQgcHVzaCAmJgorCQlybSAtZiBGb28ubXcgJiYKKwkJZ2l0IGNvbW1pdCAtYW0gIkRlbGV0ZSB0aGUgcGFnZSBGb28iICYmCisJCXRlc3RfZ2l0X3JlaW1wb3J0ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIEZvby5tdworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1c2ggY2FuIHByb3BhZ2F0ZSBsb2NhbCBtZWRpYSBmaWxlIGRlbGV0aW9uJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgbXdfZGlyIiAmJgorCSgKKwkJY2QgbXdfZGlyICYmCisJCWVjaG8gImhlbGxvIHdvcmxkIiA+Rm9vLnR4dCAmJgorCQlnaXQgYWRkIEZvby50eHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIHRoZSB0ZXh0IGZpbGUgRm9vIiAmJgorCQlnaXQgcm0gRm9vLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tICJEZWxldGUgdGhlIGZpbGUgRm9vIiAmJgorCQl0ZXN0X2dpdF9yZWltcG9ydCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBGb28udHh0CisJKQorJworCisjIHRlc3QgZmFpbHVyZTogdGhlIGZpbGUgaXMgY29ycmVjdGx5IHVwbG9hZGVkLCBhbmQgdGhlbiBkZWxldGVkIGJ1dAorIyBhcyBubyBwYWdlIGxpbmsgdG8gaXQsIHRoZSBpbXBvcnQgKHdoaWNoIGxvb2tzIGF0IHBhZ2UgcmV2aXNpb25zKQorIyBkb2Vzbid0IG5vdGljZSB0aGUgZmlsZSBkZWxldGlvbiBvbiB0aGUgd2lraS4gV2UgZmV0Y2ggdGhlIGxpc3Qgb2YKKyMgZmlsZXMgZnJvbSB0aGUgd2lraSwgYnV0IGFzIHRoZSBmaWxlIGlzIGRlbGV0ZWQsIGl0IGRvZXNuJ3QgYXBwZWFyLgordGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0IHB1bGwgY29ycmVjdGx5IGltcG9ydHMgbWVkaWEgZmlsZSBkZWxldGlvbiB3aGVuIG5vIHBhZ2UgbGluayB0byBpdCcgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2RpciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIG13X2RpciIgJiYKKwkoCisJCWNkIG13X2RpciAmJgorCQllY2hvICJoZWxsbyB3b3JsZCIgPkZvby50eHQgJiYKKwkJZ2l0IGFkZCBGb28udHh0ICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCB0aGUgdGV4dCBmaWxlIEZvbyIgJiYKKwkJZ2l0IHB1c2ggJiYKKwkJZ2l0IHJtIEZvby50eHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiRGVsZXRlIHRoZSBmaWxlIEZvbyIgJiYKKwkJdGVzdF9naXRfcmVpbXBvcnQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgRm9vLnR4dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1c2ggcHJvcGVybHkgd2FybnMgYWJvdXQgaW5zdWZmaWNpZW50IHBlcm1pc3Npb25zJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgbXdfZGlyIiAmJgorCSgKKwkJY2QgbXdfZGlyICYmCisJCWVjaG8gIkEgRmlsZSIgPmZvby5mb3JiaWRkZW4gJiYKKwkJZ2l0IGFkZCBmb28uZm9yYmlkZGVuICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBhIGZpbGUiICYmCisJCWdpdCBwdXNoIDI+YWN0dWFsICYmCisJCXRlc3RfaTE4bmdyZXAgImZvby5mb3JiaWRkZW4gaXMgbm90IGEgcGVybWl0dGVkIGZpbGUiIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYSByZXBvc2l0b3J5IHdpdGggbWVkaWEgZmlsZXMnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSB0ZXN0cGFnZSAiSSBhbSBsaW5raW5nIGEgZmlsZSBbW0ZpbGU6RmlsZS50eHRdXSIgZmFsc2UgJiYKKwllY2hvICJGaWxlIGNvbnRlbnQiID5GaWxlLnR4dCAmJgorCXdpa2lfdXBsb2FkX2ZpbGUgRmlsZS50eHQgJiYKKwllY2hvICJBbm90aGVyIGZpbGUgY29udGVudCIgPkFub3RoZXJGaWxlLnR4dCAmJgorCXdpa2lfdXBsb2FkX2ZpbGUgQW5vdGhlckZpbGUudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSB3b3JrcyB3aXRoIG9uZSBzcGVjaWZpYyBwYWdlIGNsb25lZCBhbmQgbWVkaWFpbXBvcnQ9dHJ1ZScgJworCWdpdCBjbG9uZSAtYyByZW1vdGUub3JpZ2luLnBhZ2VzPXRlc3RwYWdlIFwKKwkJICAtYyByZW1vdGUub3JpZ2luLm1lZGlhaW1wb3J0PXRydWUgXAorCQkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xNSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG13X2Rpcl8xNSIgJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzE1IDMgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTUvVGVzdHBhZ2UubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTUvRmlsZTpGaWxlLnR4dC5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xNS9GaWxlLnR4dCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl8xNS9NYWluX1BhZ2UubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfMTUvRmlsZTpBbm90aGVyRmlsZS50eHQubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfMTUvQW5vdGhldEZpbGUudHh0ICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xNS9UZXN0cGFnZS5tdyBUZXN0cGFnZSAmJgorCXRlc3RfY21wIG13X2Rpcl8xNS9GaWxlLnR4dCBGaWxlLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xvbmUgd29ya3Mgd2l0aCBvbmUgc3BlY2lmaWMgcGFnZSBjbG9uZWQgYW5kIG1lZGlhaW1wb3J0PWZhbHNlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbXdfZGlyXzE2IiAmJgorCWdpdCBjbG9uZSAtYyByZW1vdGUub3JpZ2luLnBhZ2VzPXRlc3RwYWdlIFwKKwkJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTYgJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzE2IDEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTYvVGVzdHBhZ2UubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfMTYvRmlsZTpGaWxlLnR4dC5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl8xNi9GaWxlLnR4dCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl8xNi9NYWluX1BhZ2UubXcgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzE2L1Rlc3RwYWdlLm13IFRlc3RwYWdlCisnCisKKyMgc2hvdWxkIGJlaGF2ZSBsaWtlIG1lZGlhaW1wb3J0PWZhbHNlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xvbmUgd29ya3Mgd2l0aCBvbmUgc3BlY2lmaWMgcGFnZSBjbG9uZWQgYW5kIG1lZGlhaW1wb3J0IHVuc2V0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgbXdfZGlyXzE3IiAmJgorCWdpdCBjbG9uZSAtYyByZW1vdGUub3JpZ2luLnBhZ2VzPXRlc3RwYWdlIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xNyAmJgorCXRlc3RfY29udGFpbnNfTl9maWxlcyBtd19kaXJfMTcgMSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xNy9UZXN0cGFnZS5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl8xNy9GaWxlOkZpbGUudHh0Lm13ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzE3L0ZpbGUudHh0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzE3L01haW5fUGFnZS5tdyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTcvVGVzdHBhZ2UubXcgVGVzdHBhZ2UKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Q5MzY0LXB1bGwtYnktcmV2LnNoIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2NC1wdWxsLWJ5LXJldi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YzIyNDU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2NC1wdWxsLWJ5LXJldi5zaApAQCAtMCwwICsxLDE3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGUgR2l0IE1lZGlhd2lraSByZW1vdGUgaGVscGVyOiBnaXQgcHVsbCBieSByZXZpc2lvbicKKworLiAuL3Rlc3QtZ2l0bXctbGliLnNoCisuIC4vcHVzaC1wdWxsLXRlc3RzLnNoCisuICRURVNUX0RJUkVDVE9SWS90ZXN0LWxpYi5zaAorCit0ZXN0X2NoZWNrX3ByZWNvbmQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlndXJhdGlvbicgJworCWdpdCBjb25maWcgLS1nbG9iYWwgbWVkaWF3aWtpLmZldGNoU3RyYXRlZ3kgYnlfcmV2CisnCisKK3Rlc3RfcHVzaF9wdWxsCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC90OTM2NS1jb250aW51aW5nLXF1ZXJpZXMuc2ggYi9jb250cmliL213LXRvLWdpdC90L3Q5MzY1LWNvbnRpbnVpbmctcXVlcmllcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMTY0NTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2NS1jb250aW51aW5nLXF1ZXJpZXMuc2gKQEAgLTAsMCArMSwyMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIEdpdCBNZWRpYXdpa2kgcmVtb3RlIGhlbHBlcjogcXVlcmllcyB3LyBtb3JlIHRoYW4gNTAwIHJlc3VsdHMnCisKKy4gLi90ZXN0LWdpdG13LWxpYi5zaAorLiAkVEVTVF9ESVJFQ1RPUlkvdGVzdC1saWIuc2gKKwordGVzdF9jaGVja19wcmVjb25kCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIHBhZ2Ugdy8gPjUwMCByZXZpc2lvbnMnICcKKwl3aWtpX3Jlc2V0ICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSA1MDEpCisJZG8KKwkJZWNobyAiY3JlYXRpbmcgcmV2aXNpb24gJGkiICYmCisJCXdpa2lfZWRpdHBhZ2UgZm9vICJyZXZpc2lvbiAkaTxici8+IiB0cnVlCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHBhZ2Ugdy8gPjUwMCByZXZpc2lvbnMnICcKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2RpcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC1naXRtdy1saWIuc2ggYi9jb250cmliL213LXRvLWdpdC90L3Rlc3QtZ2l0bXctbGliLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM5NDhhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L3Rlc3QtZ2l0bXctbGliLnNoCkBAIC0wLDAgKzEsNDMyIEBACisjIENvcHlyaWdodCAoQykgMjAxMgorIyAgICAgQ2hhcmxlcyBSb3Vzc2VsIDxjaGFybGVzLnJvdXNzZWxAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gQ2F0aGVicmFzIDxzaW1vbi5jYXRoZWJyYXNAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgSnVsaWVuIEtoYXlhdCA8anVsaWVuLmtoYXlhdEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBHdWlsbGF1bWUgU2FzZHkgPGd1aWxsYXVtZS5zYXNkeUBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBQZXJyYXQgPHNpbW9uLnBlcnJhdEBlbnNpbWFnLmltYWcuZnI+CisjIExpY2Vuc2U6IEdQTCB2MiBvciBsYXRlcgorCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTCisjIFlvdSBtaWdodCB3YW50IHRvIGNoYW5nZSB0aGVzZSBvbmVzCisjCisKKy4gLi90ZXN0LmNvbmZpZworCitXSUtJX1VSTD1odHRwOi8vIiRTRVJWRVJfQUREUjokUE9SVC8kV0lLSV9ESVJfTkFNRSIKK0NVUlJfRElSPSQocHdkKQorVEVTVF9PVVRQVVRfRElSRUNUT1JZPSQocHdkKQorVEVTVF9ESVJFQ1RPUlk9IiRDVVJSX0RJUiIvLi4vLi4vLi4vdAorCitleHBvcnQgVEVTVF9PVVRQVVRfRElSRUNUT1JZIFRFU1RfRElSRUNUT1JZIENVUlJfRElSCisKK2lmIHRlc3QgIiRMSUdIVFRQRCIgPSAiZmFsc2UiIDsgdGhlbgorCVBPUlQ9ODAKK2Vsc2UKKwlXSUtJX0RJUl9JTlNUPSIkQ1VSUl9ESVIvJFdFQl9XV1ciCitmaQorCit3aWtpX3VwbG9hZF9maWxlICgpIHsKKwkiJENVUlJfRElSIi90ZXN0LWdpdG13LnBsIHVwbG9hZF9maWxlICIkQCIKK30KKword2lraV9nZXRwYWdlICgpIHsKKwkiJENVUlJfRElSIi90ZXN0LWdpdG13LnBsIGdldF9wYWdlICIkQCIKK30KKword2lraV9kZWxldGVfcGFnZSAoKSB7CisJIiRDVVJSX0RJUiIvdGVzdC1naXRtdy5wbCBkZWxldGVfcGFnZSAiJEAiCit9CisKK3dpa2lfZWRpdHBhZ2UgKCkgeworCSIkQ1VSUl9ESVIiL3Rlc3QtZ2l0bXcucGwgZWRpdF9wYWdlICIkQCIKK30KKworZGllICgpIHsKKwlkaWVfd2l0aF9zdGF0dXMgMSAiJEAiCit9CisKK2RpZV93aXRoX3N0YXR1cyAoKSB7CisJc3RhdHVzPSQxCisJc2hpZnQKKwllY2hvID4mMiAiJCoiCisJZXhpdCAiJHN0YXR1cyIKK30KKworCisjIENoZWNrIHRoZSBwcmVjb25kaXRpb25zIHRvIHJ1biBnaXQtcmVtb3RlLW1lZGlhd2lraSdzIHRlc3RzCit0ZXN0X2NoZWNrX3ByZWNvbmQgKCkgeworCWlmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMCisJdGhlbgorCQlza2lwX2FsbD0nc2tpcHBpbmcgZ2F0ZXdheSBnaXQtbXcgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwkJdGVzdF9kb25lCisJZmkKKworCUdJVF9FWEVDX1BBVEg9JChjZCAiJChkaXJuYW1lICIkMCIpIiAmJiBjZCAiLi4vLi4iICYmIHB3ZCkKKwlQQVRIPSIkR0lUX0VYRUNfUEFUSCInL2Jpbi13cmFwcGVyOiciJFBBVEgiCisKKwlpZiBbICEgLWQgIiRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FIiBdOworCXRoZW4KKwkJc2tpcF9hbGw9J3NraXBwaW5nIGdhdGV3YXkgZ2l0LW13IHRlc3RzLCBubyBtZWRpYXdpa2kgZm91bmQnCisJCXRlc3RfZG9uZQorCWZpCit9CisKKyMgdGVzdF9kaWZmX2RpcmVjdG9yaWVzIDxkaXJfZ2l0PiA8ZGlyX3dpa2k+CisjCisjIENvbXBhcmUgdGhlIGNvbnRlbnRzIG9mIGRpcmVjdG9yaWVzIDxkaXJfZ2l0PiBhbmQgPGRpcl93aWtpPiB3aXRoIGRpZmYKKyMgYW5kIGVycm9ycyBpZiB0aGV5IGRvIG5vdCBtYXRjaC4gVGhlIHByb2dyYW0gd2lsbAorIyBub3QgbG9vayBpbnRvIC5naXQgaW4gdGhlIHByb2Nlc3MuCisjIFdhcm5pbmc6IHRoZSBmaXJzdCBhcmd1bWVudCBNVVNUIGJlIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZ2l0IGRhdGEKK3Rlc3RfZGlmZl9kaXJlY3RvcmllcyAoKSB7CisJcm0gLXJmICIkMV90bXAiCisJbWtkaXIgLXAgIiQxX3RtcCIKKwljcCAiJDEiLyoubXcgIiQxX3RtcCIKKwlkaWZmIC1yIC1iICIkMV90bXAiICIkMiIKK30KKworIyAkMT08ZGlyPgorIyAkMj08Tj4KKyMKKyMgQ2hlY2sgdGhhdCA8ZGlyPiBjb250YWlucyBleGFjdGx5IDxOPiBmaWxlcwordGVzdF9jb250YWluc19OX2ZpbGVzICgpIHsKKwlpZiB0ZXN0ICQobHMgLS0gIiQxIiB8IHdjIC1sKSAtbmUgIiQyIjsgdGhlbgorCQllY2hvICJkaXJlY3RvcnkgJDEgc2hvdWxkIGNvbnRhaW4gJDIgZmlsZXMiCisJCWVjaG8gIml0IGNvbnRhaW5zIHRoZXNlIGZpbGVzOiIKKwkJbHMgIiQxIgorCQlmYWxzZQorCWZpCit9CisKKworIyB3aWtpX2NoZWNrX2NvbnRlbnQgPGZpbGVfbmFtZT4gPHBhZ2VfbmFtZT4KKyMKKyMgQ29tcGFyZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIDxmaWxlX25hbWU+IGFuZCB0aGUgd2lraSBwYWdlCisjIDxwYWdlX25hbWU+IGFuZCBleGl0cyB3aXRoIGVycm9yIDEgaWYgdGhleSBkbyBub3QgbWF0Y2guCit3aWtpX2NoZWNrX2NvbnRlbnQgKCkgeworCW1rZGlyIC1wIHdpa2lfdG1wCisJd2lraV9nZXRwYWdlICIkMiIgd2lraV90bXAKKwkjIHJlcGxhY2VtZW50IG9mIGZvcmJpZGRlbiBjaGFyYWN0ZXIgaW4gZmlsZSBuYW1lCisJcGFnZV9uYW1lPSQocHJpbnRmICIlc1xuIiAiJDIiIHwgc2VkIC1lICJzL1wvLyUyRi9nIikKKworCWRpZmYgLWIgIiQxIiB3aWtpX3RtcC8iJHBhZ2VfbmFtZSIubXcKKwlpZiB0ZXN0ICQ/IC1uZSAwCisJdGhlbgorCQlybSAtcmYgd2lraV90bXAKKwkJZXJyb3IgIkVSUk9SOiBmaWxlICQyIG5vdCBmb3VuZCBvbiB3aWtpIgorCWZpCisJcm0gLXJmIHdpa2lfdG1wCit9CisKKyMgd2lraV9wYWdlX2V4aXN0IDxwYWdlX25hbWU+CisjCisjIENoZWNrIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHBhZ2UgPHBhZ2VfbmFtZT4gb24gdGhlIHdpa2kgYW5kIGV4aXRzCisjIHdpdGggZXJyb3IgaWYgaXQgaXMgYWJzZW50IGZyb20gaXQuCit3aWtpX3BhZ2VfZXhpc3QgKCkgeworCW1rZGlyIC1wIHdpa2lfdG1wCisJd2lraV9nZXRwYWdlICIkMSIgd2lraV90bXAKKwlwYWdlX25hbWU9JChwcmludGYgIiVzXG4iICIkMSIgfCBzZWQgInMvXC8vJTJGL2ciKQorCWlmIHRlc3QgLWYgd2lraV90bXAvIiRwYWdlX25hbWUiLm13IDsgdGhlbgorCQlybSAtcmYgd2lraV90bXAKKwllbHNlCisJCXJtIC1yZiB3aWtpX3RtcAorCQllcnJvciAidGVzdCBmYWlsZWQ6IGZpbGUgJDEgbm90IGZvdW5kIG9uIHdpa2kiCisJZmkKK30KKworIyB3aWtpX2dldGFsbHBhZ2VuYW1lCisjCisjIEZldGNoIHRoZSBuYW1lIG9mIGVhY2ggcGFnZSBvbiB0aGUgd2lraS4KK3dpa2lfZ2V0YWxscGFnZW5hbWUgKCkgeworCSIkQ1VSUl9ESVIiL3Rlc3QtZ2l0bXcucGwgZ2V0YWxscGFnZW5hbWUKK30KKworIyB3aWtpX2dldGFsbHBhZ2VjYXRlZ29yeSA8Y2F0ZWdvcnk+CisjCisjIEZldGNoIHRoZSBuYW1lIG9mIGVhY2ggcGFnZSBiZWxvbmdpbmcgdG8gPGNhdGVnb3J5PiBvbiB0aGUgd2lraS4KK3dpa2lfZ2V0YWxscGFnZWNhdGVnb3J5ICgpIHsKKwkiJENVUlJfRElSIi90ZXN0LWdpdG13LnBsIGdldGFsbHBhZ2VuYW1lICIkQCIKK30KKworIyB3aWtpX2dldGFsbHBhZ2UgPGRlc3RfZGlyPiBbPGNhdGVnb3J5Pl0KKyMKKyMgRmV0Y2ggYWxsIHRoZSBwYWdlcyBmcm9tIHRoZSB3aWtpIGFuZCBwbGFjZSB0aGVtIGluIHRoZSBkaXJlY3RvcnkKKyMgPGRlc3RfZGlyPi4KKyMgSWYgPGNhdGVnb3J5PiBpcyBkZWZpbmUsIHRoZW4gd2lraV9nZXRhbGxwYWdlIGZldGNoIHRoZSBwYWdlcyBpbmNsdWRlZAorIyBpbiA8Y2F0ZWdvcnk+Lgord2lraV9nZXRhbGxwYWdlICgpIHsKKwlpZiB0ZXN0IC16ICIkMiI7CisJdGhlbgorCQl3aWtpX2dldGFsbHBhZ2VuYW1lCisJZWxzZQorCQl3aWtpX2dldGFsbHBhZ2VjYXRlZ29yeSAiJDIiCisJZmkKKwlta2RpciAtcCAiJDEiCisJd2hpbGUgcmVhZCAtciBsaW5lOyBkbworCQl3aWtpX2dldHBhZ2UgIiRsaW5lIiAkMTsKKwlkb25lIDwgYWxsLnR4dAorfQorCisjID09PT09PT09PT09PT09PT09IEluc3RhbGwgcGFydCA9PT09PT09PT09PT09PT09PQorCitlcnJvciAoKSB7CisJZWNobyAiJEAiID4mMgorCWV4aXQgMQorfQorCisjIGNvbmZpZ19saWdodHRwZAorIworIyBDcmVhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHRoZSBmb2xkZXJzIG5lY2Vzc2FyeSB0byBzdGFydCBsaWdodHRwZC4KKyMgT3ZlcndyaXRlIGFueSBleGlzdGluZyBmaWxlLgorY29uZmlnX2xpZ2h0dHBkICgpIHsKKwlta2RpciAtcCAkV0VCCisJbWtkaXIgLXAgJFdFQl9UTVAKKwlta2RpciAtcCAkV0VCX1dXVworCWNhdCA+ICRXRUIvbGlnaHR0cGQuY29uZiA8PEVPRgorCXNlcnZlci5kb2N1bWVudC1yb290ID0gIiRDVVJSX0RJUi8kV0VCX1dXVyIKKwlzZXJ2ZXIucG9ydCA9ICRQT1JUCisJc2VydmVyLnBpZC1maWxlID0gIiRDVVJSX0RJUi8kV0VCX1RNUC9waWQiCisKKwlzZXJ2ZXIubW9kdWxlcyA9ICgKKwkibW9kX3Jld3JpdGUiLAorCSJtb2RfcmVkaXJlY3QiLAorCSJtb2RfYWNjZXNzIiwKKwkibW9kX2FjY2Vzc2xvZyIsCisJIm1vZF9mYXN0Y2dpIgorCSkKKworCWluZGV4LWZpbGUubmFtZXMgPSAoImluZGV4LnBocCIgLCAiaW5kZXguaHRtbCIpCisKKwltaW1ldHlwZS5hc3NpZ24JCSAgICA9ICgKKwkiLnBkZiIJCT0+CSJhcHBsaWNhdGlvbi9wZGYiLAorCSIuc2lnIgkJPT4JImFwcGxpY2F0aW9uL3BncC1zaWduYXR1cmUiLAorCSIuc3BsIgkJPT4JImFwcGxpY2F0aW9uL2Z1dHVyZXNwbGFzaCIsCisJIi5jbGFzcyIJPT4JImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsCisJIi5wcyIJCT0+CSJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0IiwKKwkiLnRvcnJlbnQiCT0+CSJhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQiLAorCSIuZHZpIgkJPT4JImFwcGxpY2F0aW9uL3gtZHZpIiwKKwkiLmd6IgkJPT4JImFwcGxpY2F0aW9uL3gtZ3ppcCIsCisJIi5wYWMiCQk9PgkiYXBwbGljYXRpb24veC1ucy1wcm94eS1hdXRvY29uZmlnIiwKKwkiLnN3ZiIJCT0+CSJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIsCisJIi50YXIuZ3oiCT0+CSJhcHBsaWNhdGlvbi94LXRneiIsCisJIi50Z3oiCQk9PgkiYXBwbGljYXRpb24veC10Z3oiLAorCSIudGFyIgkJPT4JImFwcGxpY2F0aW9uL3gtdGFyIiwKKwkiLnppcCIJCT0+CSJhcHBsaWNhdGlvbi96aXAiLAorCSIubXAzIgkJPT4JImF1ZGlvL21wZWciLAorCSIubTN1IgkJPT4JImF1ZGlvL3gtbXBlZ3VybCIsCisJIi53bWEiCQk9PgkiYXVkaW8veC1tcy13bWEiLAorCSIud2F4IgkJPT4JImF1ZGlvL3gtbXMtd2F4IiwKKwkiLm9nZyIJCT0+CSJhcHBsaWNhdGlvbi9vZ2ciLAorCSIud2F2IgkJPT4JImF1ZGlvL3gtd2F2IiwKKwkiLmdpZiIJCT0+CSJpbWFnZS9naWYiLAorCSIuanBnIgkJPT4JImltYWdlL2pwZWciLAorCSIuanBlZyIJCT0+CSJpbWFnZS9qcGVnIiwKKwkiLnBuZyIJCT0+CSJpbWFnZS9wbmciLAorCSIueGJtIgkJPT4JImltYWdlL3gteGJpdG1hcCIsCisJIi54cG0iCQk9PgkiaW1hZ2UveC14cGl4bWFwIiwKKwkiLnh3ZCIJCT0+CSJpbWFnZS94LXh3aW5kb3dkdW1wIiwKKwkiLmNzcyIJCT0+CSJ0ZXh0L2NzcyIsCisJIi5odG1sIgkJPT4JInRleHQvaHRtbCIsCisJIi5odG0iCQk9PgkidGV4dC9odG1sIiwKKwkiLmpzIgkJPT4JInRleHQvamF2YXNjcmlwdCIsCisJIi5hc2MiCQk9PgkidGV4dC9wbGFpbiIsCisJIi5jIgkJPT4JInRleHQvcGxhaW4iLAorCSIuY3BwIgkJPT4JInRleHQvcGxhaW4iLAorCSIubG9nIgkJPT4JInRleHQvcGxhaW4iLAorCSIuY29uZiIJCT0+CSJ0ZXh0L3BsYWluIiwKKwkiLnRleHQiCQk9PgkidGV4dC9wbGFpbiIsCisJIi50eHQiCQk9PgkidGV4dC9wbGFpbiIsCisJIi5kdGQiCQk9PgkidGV4dC94bWwiLAorCSIueG1sIgkJPT4JInRleHQveG1sIiwKKwkiLm1wZWciCQk9PgkidmlkZW8vbXBlZyIsCisJIi5tcGciCQk9PgkidmlkZW8vbXBlZyIsCisJIi5tb3YiCQk9PgkidmlkZW8vcXVpY2t0aW1lIiwKKwkiLnF0IgkJPT4JInZpZGVvL3F1aWNrdGltZSIsCisJIi5hdmkiCQk9PgkidmlkZW8veC1tc3ZpZGVvIiwKKwkiLmFzZiIJCT0+CSJ2aWRlby94LW1zLWFzZiIsCisJIi5hc3giCQk9PgkidmlkZW8veC1tcy1hc2YiLAorCSIud212IgkJPT4JInZpZGVvL3gtbXMtd212IiwKKwkiLmJ6MiIJCT0+CSJhcHBsaWNhdGlvbi94LWJ6aXAiLAorCSIudGJ6IgkJPT4JImFwcGxpY2F0aW9uL3gtYnppcC1jb21wcmVzc2VkLXRhciIsCisJIi50YXIuYnoyIgk9PgkiYXBwbGljYXRpb24veC1iemlwLWNvbXByZXNzZWQtdGFyIiwKKwkiIgkJPT4JInRleHQvcGxhaW4iCisJKQorCisJZmFzdGNnaS5zZXJ2ZXIgPSAoICIucGhwIiA9PgorCSgibG9jYWxob3N0IiA9PgorCSggInNvY2tldCIgPT4gIiRDVVJSX0RJUi8kV0VCX1RNUC9waHAuc29ja2V0IiwKKwkiYmluLXBhdGgiID0+ICIkUEhQX0RJUi9waHAtY2dpIC1jICRDVVJSX0RJUi8kV0VCL3BocC5pbmkiCisKKwkpCisJKQorCSkKK0VPRgorCisJY2F0ID4gJFdFQi9waHAuaW5pIDw8RU9GCisJc2Vzc2lvbi5zYXZlX3BhdGggPSckQ1VSUl9ESVIvJFdFQl9UTVAnCitFT0YKK30KKworIyBzdGFydF9saWdodHRwZAorIworIyBTdGFydCBvciByZXN0YXJ0IGRhZW1vbiBsaWdodHRwZC4gSWYgcmVzdGFydCwgcmV3cml0ZSBjb25maWd1cmF0aW9uIGZpbGVzLgorc3RhcnRfbGlnaHR0cGQgKCkgeworCWlmIHRlc3QgLWYgIiRXRUJfVE1QL3BpZCI7IHRoZW4KKwkJZWNobyAiSW5zdGFuY2UgYWxyZWFkeSBydW5uaW5nLiBSZXN0YXJ0aW5nLi4uIgorCQlzdG9wX2xpZ2h0dHBkCisJZmkKKwljb25maWdfbGlnaHR0cGQKKwkiJExJR0hUVFBEX0RJUiIvbGlnaHR0cGQgLWYgIiRXRUIiL2xpZ2h0dHBkLmNvbmYKKworCWlmIHRlc3QgJD8gLW5lIDAgOyB0aGVuCisJCWVjaG8gIkNvdWxkIG5vdCBleGVjdXRlIGh0dHAgZGFlbW9uIGxpZ2h0dHBkIgorCQlleGl0IDEKKwlmaQorfQorCisjIHN0b3BfbGlnaHR0cGQKKyMKKyMgS2lsbCBkYWVtb24gbGlnaHR0cGQgYW5kIHJlbW92ZXMgZmlsZXMgYW5kIGZvbGRlcnMgYXNzb2NpYXRlZC4KK3N0b3BfbGlnaHR0cGQgKCkgeworCXRlc3QgLWYgIiRXRUJfVE1QL3BpZCIgJiYga2lsbCAkKGNhdCAiJFdFQl9UTVAvcGlkIikKK30KKworIyBDcmVhdGUgdGhlIFNRTGl0ZSBkYXRhYmFzZSBvZiB0aGUgTWVkaWFXaWtpLiBJZiB0aGUgZGF0YWJhc2UgZmlsZSBhbHJlYWR5CisjIGV4aXN0cywgaXQgd2lsbCBiZSBkZWxldGVkLgorIyBUaGlzIHNjcmlwdCBzaG91bGQgYmUgcnVubmVkIGZyb20gdGhlIGRpcmVjdG9yeSB3aGVyZSAkRklMRVNfRk9MREVSIGlzCisjIGxvY2F0ZWQuCitjcmVhdGVfZGIgKCkgeworCXJtIC1mICIkVE1QLyREQl9GSUxFIgorCisJZWNobyAiR2VuZXJhdGluZyB0aGUgU1FMaXRlIGRhdGFiYXNlIGZpbGUuIEl0IGNhbiB0YWtlIHNvbWUgdGltZSAuLi4iCisJIyBSdW4gdGhlIHBocCBzY3JpcHQgdG8gZ2VuZXJhdGUgdGhlIFNRTGl0ZSBkYXRhYmFzZSBmaWxlCisJIyB3aXRoIGNVUkwgY2FsbHMuCisJcGhwICIkRklMRVNfRk9MREVSLyREQl9JTlNUQUxMX1NDUklQVCIgJChiYXNlbmFtZSAiJERCX0ZJTEUiIC5zcWxpdGUpIFwKKwkJIiRXSUtJX0FETUlOIiAiJFdJS0lfUEFTU1ciICIkVE1QIiAiJFBPUlQiCisKKwlpZiBbICEgLWYgIiRUTVAvJERCX0ZJTEUiIF0gOyB0aGVuCisJCWVycm9yICJDYW4ndCBjcmVhdGUgZGF0YWJhc2UgZmlsZSAkVE1QLyREQl9GSUxFLiBUcnkgdG8gcnVuIC4vaW5zdGFsbC13aWtpLnNoIGRlbGV0ZSBmaXJzdC4iCisJZmkKKworCSMgQ29weSB0aGUgZ2VuZXJhdGVkIGRhdGFiYXNlIGZpbGUgaW50byB0aGUgZGlyZWN0b3J5IHRoZQorCSMgdXNlciBpbmRpY2F0ZWQuCisJY3AgIiRUTVAvJERCX0ZJTEUiICIkRklMRVNfRk9MREVSIiB8fAorCQllcnJvciAiVW5hYmxlIHRvIGNvcHkgJFRNUC8kREJfRklMRSB0byAkRklMRVNfRk9MREVSIgorfQorCisjIEluc3RhbGwgYSB3aWtpIGluIHlvdXIgd2ViIHNlcnZlciBkaXJlY3RvcnkuCit3aWtpX2luc3RhbGwgKCkgeworCWlmIHRlc3QgJExJR0hUVFBEID0gInRydWUiIDsgdGhlbgorCQlzdGFydF9saWdodHRwZAorCWZpCisKKwlTRVJWRVJfQUREUj0kU0VSVkVSX0FERFI6JFBPUlQKKwkjIEluIHRoaXMgcGFydCwgd2UgY2hhbmdlIGRpcmVjdG9yeSB0byAkVE1QIGluIG9yZGVyIHRvIGRvd25sb2FkLAorCSMgdW5wYWNrIGFuZCBjb3B5IHRoZSBmaWxlcyBvZiBNZWRpYVdpa2kKKwkoCisJbWtkaXIgLXAgIiRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FIgorCWlmIFsgISAtZCAiJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUiIF0gOyB0aGVuCisJCWVycm9yICJGb2xkZXIgJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUgZG9lc24ndCBleGlzdC4KKwkJUGxlYXNlIGNyZWF0ZSBpdCBhbmQgbGF1bmNoIHRoZSBzY3JpcHQgYWdhaW4uIgorCWZpCisKKwkjIEZldGNoIE1lZGlhV2lraSdzIGFyY2hpdmUgaWYgbm90IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgVE1QIGRpcmVjdG9yeQorCU1XX0ZJTEVOQU1FPSJtZWRpYXdpa2ktJE1XX1ZFUlNJT05fTUFKT1IuJE1XX1ZFUlNJT05fTUlOT1IudGFyLmd6IgorCWNkICIkVE1QIgorCWlmIFsgISAtZiAkTVdfRklMRU5BTUUgXSA7IHRoZW4KKwkJZWNobyAiRG93bmxvYWRpbmcgJE1XX1ZFUlNJT05fTUFKT1IuJE1XX1ZFUlNJT05fTUlOT1Igc291cmNlcyAuLi4iCisJCXdnZXQgImh0dHA6Ly9kb3dubG9hZC53aWtpbWVkaWEub3JnL21lZGlhd2lraS8kTVdfVkVSU0lPTl9NQUpPUi8kTVdfRklMRU5BTUUiIHx8CisJCQllcnJvciAiVW5hYmxlIHRvIGRvd25sb2FkICJcCisJCQkiaHR0cDovL2Rvd25sb2FkLndpa2ltZWRpYS5vcmcvbWVkaWF3aWtpLyRNV19WRVJTSU9OX01BSk9SLyJcCisJCQkiJE1XX0ZJTEVOQU1FLiAiXAorCQkJIlBsZWFzZSBmaXggeW91ciBjb25uZWN0aW9uIGFuZCBsYXVuY2ggdGhlIHNjcmlwdCBhZ2Fpbi4iCisJCWVjaG8gIiRNV19GSUxFTkFNRSBkb3dubG9hZGVkIGluICQocHdkKS4gIlwKKwkJCSJZb3UgY2FuIGRlbGV0ZSBpdCBsYXRlciBpZiB5b3Ugd2FudC4iCisJZWxzZQorCQllY2hvICJSZXVzaW5nIGV4aXN0aW5nICRNV19GSUxFTkFNRSBkb3dubG9hZGVkIGluICQocHdkKS4iCisJZmkKKwlhcmNoaXZlX2Fic19wYXRoPSQocHdkKS8kTVdfRklMRU5BTUUKKwljZCAiJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUvIiB8fAorCQllcnJvciAiY2FuJ3QgY2QgdG8gJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUvIgorCXRhciB4emYgIiRhcmNoaXZlX2Fic19wYXRoIiAtLXN0cmlwLWNvbXBvbmVudHM9MSB8fAorCQllcnJvciAiVW5hYmxlIHRvIGV4dHJhY3QgV2lraU1lZGlhJ3MgZmlsZXMgZnJvbSAkYXJjaGl2ZV9hYnNfcGF0aCB0byAiXAorCQkJIiRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FIgorCSkgfHwgZXhpdCAxCisKKwljcmVhdGVfZGIKKworCSMgQ29weSB0aGUgZ2VuZXJpYyBMb2NhbFNldHRpbmdzLnBocCBpbiB0aGUgd2ViIHNlcnZlcidzIGRpcmVjdG9yeQorCSMgQW5kIG1vZGlmeSBwYXJhbWV0ZXJzIGFjY29yZGluZyB0byB0aGUgb25lcyBzZXQgYXQgdGhlIHRvcAorCSMgb2YgdGhpcyBzY3JpcHQuCisJIyBOb3RlIHRoYXQgTG9jYWxTZXR0aW5ncy5waHAgaXMgbmV2ZXIgbW9kaWZpZWQuCisJaWYgWyAhIC1mICIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MucGhwIiBdIDsgdGhlbgorCQllcnJvciAiQ2FuJ3QgZmluZCAkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MucGhwICIgXAorCQkJImluIHRoZSBjdXJyZW50IGZvbGRlci4gIlwKKwkJIlBsZWFzZSBydW4gdGhlIHNjcmlwdCBpbnNpZGUgaXRzIGZvbGRlci4iCisJZmkKKwljcCAiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLnBocCIgXAorCQkiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiIHx8CisJCWVycm9yICJVbmFibGUgdG8gY29weSAkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MucGhwICIgXAorCQkidG8gJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiCisKKwkjIFBhcnNlIGFuZCBzZXQgdGhlIExvY2FsU2V0dGluZ3MgZmlsZSBvZiB0aGUgdXNlciBhY2NvcmRpbmcgdG8gdGhlCisJIyBDT05GSUdVUkFUSU9OIFZBUklBQkxFUyBzZWN0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzY3JpcHQKKwlmaWxlX3N3YXA9IiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy1zd2FwLnBocCIKKwlzZWQgInMsQFdHX1NDUklQVF9QQVRIQCwvJFdJS0lfRElSX05BTUUsIiBcCisJCSIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIgPiAiJGZpbGVfc3dhcCIKKwltdiAiJGZpbGVfc3dhcCIgIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIgorCXNlZCAicyxAV0dfU0VSVkVSQCxodHRwOi8vJFNFUlZFUl9BRERSLCIgXAorCQkiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiID4gIiRmaWxlX3N3YXAiCisJbXYgIiRmaWxlX3N3YXAiICIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIKKwlzZWQgInMsQFdHX1NRTElURV9EQVRBRElSQCwkVE1QLCIgXAorCQkiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiID4gIiRmaWxlX3N3YXAiCisJbXYgIiRmaWxlX3N3YXAiICIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIKKwlzZWQgInMsQFdHX1NRTElURV9EQVRBRklMRUAsJCggYmFzZW5hbWUgJERCX0ZJTEUgLnNxbGl0ZSksIiBcCisJCSIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIgPiAiJGZpbGVfc3dhcCIKKwltdiAiJGZpbGVfc3dhcCIgIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIgorCisJbXYgIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIiBcCisJCSIkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRS9Mb2NhbFNldHRpbmdzLnBocCIgfHwKKwkJZXJyb3IgIlVuYWJsZSB0byBtb3ZlICRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIiBcCisJCSJpbiAkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRSIKKwllY2hvICJGaWxlICRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy5waHAgaXMgc2V0IGluIiBcCisJCSIgJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUiCisKKwllY2hvICJZb3VyIHdpa2kgaGFzIGJlZW4gaW5zdGFsbGVkLiBZb3UgY2FuIGNoZWNrIGl0IGF0CisJCWh0dHA6Ly8kU0VSVkVSX0FERFIvJFdJS0lfRElSX05BTUUiCit9CisKKyMgUmVzZXQgdGhlIGRhdGFiYXNlIG9mIHRoZSB3aWtpIGFuZCB0aGUgcGFzc3dvcmQgb2YgdGhlIGFkbWluCisjCisjIFdhcm5pbmc6IFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgb25seSBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0LyBkaXJlY3RvcnkKK3dpa2lfcmVzZXQgKCkgeworCSMgQ29weSBpbml0aWFsIGRhdGFiYXNlIG9mIHRoZSB3aWtpCisJaWYgWyAhIC1mICIuLi8kRklMRVNfRk9MREVSLyREQl9GSUxFIiBdIDsgdGhlbgorCQllcnJvciAiQ2FuJ3QgZmluZCAuLi8kRklMRVNfRk9MREVSLyREQl9GSUxFIGluIHRoZSBjdXJyZW50IGZvbGRlci4iCisJZmkKKwljcCAiLi4vJEZJTEVTX0ZPTERFUi8kREJfRklMRSIgIiRUTVAiIHx8CisJCWVycm9yICJDYW4ndCBjb3B5IC4uLyRGSUxFU19GT0xERVIvJERCX0ZJTEUgaW4gJFRNUCIKKwllY2hvICJGaWxlICRGSUxFU19GT0xERVIvJERCX0ZJTEUgaXMgc2V0IGluICRUTVAiCit9CisKKyMgRGVsZXRlIHRoZSB3aWtpIGNyZWF0ZWQgaW4gdGhlIHdlYiBzZXJ2ZXIncyBkaXJlY3RvcnkgYW5kIGFsbCBpdHMgY29udGVudAorIyBzYXZlZCBpbiB0aGUgZGF0YWJhc2UuCit3aWtpX2RlbGV0ZSAoKSB7CisJaWYgdGVzdCAkTElHSFRUUEQgPSAidHJ1ZSI7IHRoZW4KKwkJc3RvcF9saWdodHRwZAorCQlybSAtZnIgIiRXRUIiCisJZWxzZQorCQkjIERlbGV0ZSB0aGUgd2lraSdzIGRpcmVjdG9yeS4KKwkJcm0gLXJmICIkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRSIgfHwKKwkJCWVycm9yICJXaWtpJ3MgZGlyZWN0b3J5ICRXSUtJX0RJUl9JTlNULyIgXAorCQkJIiRXSUtJX0RJUl9OQU1FIGNvdWxkIG5vdCBiZSBkZWxldGVkIgorCQkjIERlbGV0ZSB0aGUgd2lraSdzIFNRTGl0ZSBkYXRhYmFzZS4KKwkJcm0gLWYgIiRUTVAvJERCX0ZJTEUiIHx8CisJCQllcnJvciAiRGF0YWJhc2UgJFRNUC8kREJfRklMRSBjb3VsZCBub3QgYmUgZGVsZXRlZC4iCisJZmkKKworCSMgRGVsZXRlIHRoZSB3aWtpJ3MgU1FMaXRlIGRhdGFiYXNlCisJcm0gLWYgIiRUTVAvJERCX0ZJTEUiIHx8IGVycm9yICJEYXRhYmFzZSAkVE1QLyREQl9GSUxFIGNvdWxkIG5vdCBiZSBkZWxldGVkLiIKKwlybSAtZiAiJEZJTEVTX0ZPTERFUi8kREJfRklMRSIKKwlybSAtcmYgIiRUTVAvbWVkaWF3aWtpLSRNV19WRVJTSU9OX01BSk9SLiRNV19WRVJTSU9OX01JTk9SLnRhci5neiIKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC1naXRtdy5wbCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC1naXRtdy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZmY3NjI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC90ZXN0LWdpdG13LnBsCkBAIC0wLDAgKzEsMjI1IEBACisjIS91c3IvYmluL3BlcmwgLXcgLXMKKyMgQ29weXJpZ2h0IChDKSAyMDEyCisjICAgICBDaGFybGVzIFJvdXNzZWwgPGNoYXJsZXMucm91c3NlbEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBDYXRoZWJyYXMgPHNpbW9uLmNhdGhlYnJhc0BlbnNpbWFnLmltYWcuZnI+CisjICAgICBKdWxpZW4gS2hheWF0IDxqdWxpZW4ua2hheWF0QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEd1aWxsYXVtZSBTYXNkeSA8Z3VpbGxhdW1lLnNhc2R5QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIFBlcnJhdCA8c2ltb24ucGVycmF0QGVuc2ltYWcuaW1hZy5mcj4KKyMgTGljZW5zZTogR1BMIHYyIG9yIGxhdGVyCisKKyMgVXNhZ2U6CisjICAgICAgIC4vdGVzdC1naXRtdy5wbCA8Y29tbWFuZD4gW2FyZ3VtZW50XSoKKyMgRXhlY3V0ZSBpbiB0ZXJtaW5hbCB1c2luZyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbCBhcyBmaXJzdAorIyBwYXJhbWV0ZXIsIGFuZCB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgYXMgZm9sbG93aW5nIHBhcmFtZXRlcnMKKyMKKyMgRXhhbXBsZToKKyMgICAgIC4vdGVzdC1naXRtdy5wbCAiZ2V0X3BhZ2UiIGZvbyAuCisjIHdpbGwgY2FsbCA8d2lraV9nZXRwYWdlPiB3aXRoIGFyZ3VtZW50cyA8Zm9vPiBhbmQgPC4+CisjCisjIEF2YWlsYWJsZSBmdW5jdGlvbnMgYXJlOgorIyAgICAgImdldF9wYWdlIgorIyAgICAgImRlbGV0ZV9wYWdlIgorIyAgICAgImVkaXRfcGFnZSIKKyMgICAgICJnZXRhbGxwYWdlbmFtZSIKKwordXNlIE1lZGlhV2lraTo6QVBJOwordXNlIEdldG9wdDo6TG9uZzsKK3VzZSBlbmNvZGluZyAndXRmOCc7Cit1c2UgRGF0ZVRpbWU6OkZvcm1hdDo6SVNPODYwMTsKK3VzZSBvcGVuICc6ZW5jb2RpbmcodXRmOCknOwordXNlIGNvbnN0YW50IFNMQVNIX1JFUExBQ0VNRU5UID0+ICIlMkYiOworCisjUGFyc2luZyBvZiB0aGUgY29uZmlnIGZpbGUKKworbXkgJGNvbmZpZ2ZpbGUgPSAiJEVOVnsnQ1VSUl9ESVInfS90ZXN0LmNvbmZpZyI7CitteSAlY29uZmlnOworb3BlbiBteSAkQ09ORklHLCAiPCIsICAkY29uZmlnZmlsZSBvciBkaWUgImNhbid0IG9wZW4gJGNvbmZpZ2ZpbGU6ICQhIjsKK3doaWxlICg8JENPTkZJRz4pCit7CisJY2hvbXA7CisJcy8jLiovLzsKKwlzL15ccysvLzsKKwlzL1xzKyQvLzsKKwluZXh0IHVubGVzcyBsZW5ndGg7CisJbXkgKCRrZXksICR2YWx1ZSkgPSBzcGxpdCAoL1xzKj1ccyovLCRfLCAyKTsKKwkkY29uZmlneyRrZXl9ID0gJHZhbHVlOworCWxhc3QgaWYgKCRrZXkgZXEgJ0xJR0hUVFBEJyBhbmQgJHZhbHVlIGVxICdmYWxzZScpOworCWxhc3QgaWYgKCRrZXkgZXEgJ1BPUlQnKTsKK30KK2Nsb3NlICRDT05GSUcgb3IgZGllICJjYW4ndCBjbG9zZSAkY29uZmlnZmlsZTogJCEiOworCitteSAkd2lraV9hZGRyZXNzID0gImh0dHA6Ly8kY29uZmlneydTRVJWRVJfQUREUid9Ii4iOiIuIiRjb25maWd7J1BPUlQnfSI7CitteSAkd2lraV91cmwgPSAiJHdpa2lfYWRkcmVzcy8kY29uZmlneydXSUtJX0RJUl9OQU1FJ30vYXBpLnBocCI7CitteSAkd2lraV9hZG1pbiA9ICIkY29uZmlneydXSUtJX0FETUlOJ30iOworbXkgJHdpa2lfYWRtaW5fcGFzcyA9ICIkY29uZmlneydXSUtJX1BBU1NXJ30iOworbXkgJG13ID0gTWVkaWFXaWtpOjpBUEktPm5ldzsKKyRtdy0+e2NvbmZpZ30tPnthcGlfdXJsfSA9ICR3aWtpX3VybDsKKworCisjIHdpa2lfbG9naW4gPG5hbWU+IDxwYXNzd29yZD4KKyMKKyMgTG9ncyB0aGUgdXNlciB3aXRoIDxuYW1lPiBhbmQgPHBhc3N3b3JkPiBpbiB0aGUgZ2xvYmFsIHZhcmlhYmxlCisjIG9mIHRoZSBtZWRpYXdpa2kgJG13CitzdWIgd2lraV9sb2dpbiB7CisJJG13LT5sb2dpbiggeyBsZ25hbWUgPT4gIiRfWzBdIixsZ3Bhc3N3b3JkID0+ICIkX1sxXSIgfSApCisJfHwgZGllICJnZXRwYWdlOiBsb2dpbiBmYWlsZWQiOworfQorCisjIHdpa2lfZ2V0cGFnZSA8d2lraV9wYWdlPiA8ZGVzdF9wYXRoPgorIworIyBmZXRjaCBhIHBhZ2UgPHdpa2lfcGFnZT4gZnJvbSB0aGUgd2lraSByZWZlcmVuY2VkIGluIHRoZSBnbG9iYWwgdmFyaWFibGUKKyMgJG13IGFuZCBjb3BpZXMgaXRzIGNvbnRlbnQgaW4gZGlyZWN0b3J5IGRlc3RfcGF0aAorc3ViIHdpa2lfZ2V0cGFnZSB7CisJbXkgJHBhZ2VuYW1lID0gJF9bMF07CisJbXkgJGRlc3RkaXIgPSAkX1sxXTsKKworCW15ICRwYWdlID0gJG13LT5nZXRfcGFnZSggeyB0aXRsZSA9PiAkcGFnZW5hbWUgfSApOworCWlmICghZGVmaW5lZCgkcGFnZSkpIHsKKwkJZGllICJnZXRwYWdlOiB3aWtpIGRvZXMgbm90IGV4aXN0IjsKKwl9CisKKwlteSAkY29udGVudCA9ICRwYWdlLT57JyonfTsKKwlpZiAoIWRlZmluZWQoJGNvbnRlbnQpKSB7CisJCWRpZSAiZ2V0cGFnZTogcGFnZSBkb2VzIG5vdCBleGlzdCI7CisJfQorCisJJHBhZ2VuYW1lPSRwYWdlLT57J3RpdGxlJ307CisJIyBSZXBsYWNlIHNwYWNlcyBieSB1bmRlcnNjb3JlIGluIHRoZSBwYWdlIG5hbWUKKwkkcGFnZW5hbWUgPX4gcy8gL18vZzsKKwkkcGFnZW5hbWUgPX4gcy9cLy8lMkYvZzsKKwlvcGVuKG15ICRmaWxlLCAiPiRkZXN0ZGlyLyRwYWdlbmFtZS5tdyIpOworCXByaW50ICRmaWxlICIkY29udGVudCI7CisJY2xvc2UgKCRmaWxlKTsKKworfQorCisjIHdpa2lfZGVsZXRlX3BhZ2UgPHBhZ2VfbmFtZT4KKyMKKyMgZGVsZXRlIHRoZSBwYWdlIHdpdGggbmFtZSA8cGFnZV9uYW1lPiBmcm9tIHRoZSB3aWtpIHJlZmVyZW5jZWQKKyMgaW4gdGhlIGdsb2JhbCB2YXJpYWJsZSAkbXcKK3N1YiB3aWtpX2RlbGV0ZV9wYWdlIHsKKwlteSAkcGFnZW5hbWUgPSAkX1swXTsKKworCW15ICRleGlzdD0kbXctPmdldF9wYWdlKHt0aXRsZSA9PiAkcGFnZW5hbWV9KTsKKworCWlmIChkZWZpbmVkKCRleGlzdC0+eycqJ30pKXsKKwkJJG13LT5lZGl0KHsgYWN0aW9uID0+ICdkZWxldGUnLAorCQkJCXRpdGxlID0+ICRwYWdlbmFtZX0pCisJCXx8IGRpZSAkbXctPntlcnJvcn0tPntjb2RlfSAuICI6ICIgLiAkbXctPntlcnJvcn0tPntkZXRhaWxzfTsKKwl9IGVsc2UgeworCQlkaWUgIm5vIHBhZ2Ugd2l0aCBzdWNoIG5hbWUgZm91bmQ6ICRwYWdlbmFtZVxuIjsKKwl9Cit9CisKKyMgd2lraV9lZGl0cGFnZSA8d2lraV9wYWdlPiA8d2lraV9jb250ZW50PiA8d2lraV9hcHBlbmQ+IFstYz08Y2F0ZWdvcnk+XSBbLXM9PHN1bW1hcnk+XQorIworIyBFZGl0IGEgcGFnZSBuYW1lZCA8d2lraV9wYWdlPiB3aXRoIGNvbnRlbnQgPHdpa2lfY29udGVudD4gb24gdGhlIHdpa2kKKyMgcmVmZXJlbmNlZCB3aXRoIHRoZSBnbG9iYWwgdmFyaWFibGUgJG13CisjIElmIDx3aWtpX2FwcGVuZD4gPT0gdHJ1ZSA6IGFwcGVuZCA8d2lraV9jb250ZW50PiBhdCB0aGUgZW5kIG9mIHRoZSBhY3R1YWwKKyMgY29udGVudCBvZiB0aGUgcGFnZSA8d2lraV9wYWdlPgorIyBJZiA8d2lrX3BhZ2U+IGRvZXNuJ3QgZXhpc3QsIHRoYXQgcGFnZSBpcyBjcmVhdGVkIHdpdGggdGhlIDx3aWtpX2NvbnRlbnQ+CitzdWIgd2lraV9lZGl0cGFnZSB7CisJbXkgJHdpa2lfcGFnZSA9ICRfWzBdOworCW15ICR3aWtpX2NvbnRlbnQgPSAkX1sxXTsKKwlteSAkd2lraV9hcHBlbmQgPSAkX1syXTsKKwlteSAkc3VtbWFyeSA9ICIiOworCW15ICgkc3VtbSwgJGNhdCkgPSAoKTsKKwlHZXRPcHRpb25zKCdzPXMnID0+IFwkc3VtbSwgJ2M9cycgPT4gXCRjYXQpOworCisJbXkgJGFwcGVuZCA9IDA7CisJaWYgKGRlZmluZWQoJHdpa2lfYXBwZW5kKSAmJiAkd2lraV9hcHBlbmQgZXEgJ3RydWUnKSB7CisJCSRhcHBlbmQ9MTsKKwl9CisKKwlteSAkcHJldmlvdXNfdGV4dCA9IiI7CisKKwlpZiAoJGFwcGVuZCkgeworCQlteSAkcmVmID0gJG13LT5nZXRfcGFnZSggeyB0aXRsZSA9PiAkd2lraV9wYWdlIH0gKTsKKwkJJHByZXZpb3VzX3RleHQgPSAkcmVmLT57JyonfTsKKwl9CisKKwlteSAkdGV4dCA9ICR3aWtpX2NvbnRlbnQ7CisJaWYgKGRlZmluZWQoJHByZXZpb3VzX3RleHQpKSB7CisJCSR0ZXh0PSIkcHJldmlvdXNfdGV4dCR0ZXh0IjsKKwl9CisKKwkjIEV2ZW50dWFsbHksIGFkZCB0aGlzIHBhZ2UgdG8gYSBjYXRlZ29yeS4KKwlpZiAoZGVmaW5lZCgkY2F0KSkgeworCQlteSAkY2F0ZWdvcnlfbmFtZT0iW1tDYXRlZ29yeTokY2F0XV0iOworCQkkdGV4dD0iJHRleHRcbiAkY2F0ZWdvcnlfbmFtZSI7CisJfQorCWlmKGRlZmluZWQoJHN1bW0pKXsKKwkJJHN1bW1hcnk9JHN1bW07CisJfQorCisJJG13LT5lZGl0KCB7IGFjdGlvbiA9PiAnZWRpdCcsIHRpdGxlID0+ICR3aWtpX3BhZ2UsIHN1bW1hcnkgPT4gJHN1bW1hcnksIHRleHQgPT4gIiR0ZXh0In0gKTsKK30KKworIyB3aWtpX2dldGFsbHBhZ2VuYW1lIFs8Y2F0ZWdvcnk+XQorIworIyBGZXRjaCBhbGwgcGFnZXMgb2YgdGhlIHdpa2kgcmVmZXJlbmNlZCBieSB0aGUgZ2xvYmFsIHZhcmlhYmxlICRtdworIyBhbmQgcHJpbnQgdGhlIG5hbWVzIG9mIGVhY2ggb25lIGluIHRoZSBmaWxlIGFsbC50eHQgd2l0aCBhIG5ldyBsaW5lCisjICgiXG4iKSBiZXR3ZWVuIHRoZXNlLgorIyBJZiB0aGUgYXJndW1lbnQgPGNhdGVnb3J5PiBpcyBkZWZpbmVkLCB0aGVuIHRoaXMgZnVuY3Rpb24gZ2V0IG9ubHkgdGhlIHBhZ2VzCisjIGJlbG9uZ2luZyB0byA8Y2F0ZWdvcnk+Lgorc3ViIHdpa2lfZ2V0YWxscGFnZW5hbWUgeworCSMgZmV0Y2ggdGhlIHBhZ2VzIG9mIHRoZSB3aWtpCisJaWYgKGRlZmluZWQoJF9bMF0pKSB7CisJCW15ICRtd19wYWdlcyA9ICRtdy0+bGlzdCAoIHsgYWN0aW9uID0+ICdxdWVyeScsCisJCQkJbGlzdCA9PiAnY2F0ZWdvcnltZW1iZXJzJywKKwkJCQljbXRpdGxlID0+ICJDYXRlZ29yeTokX1swXSIsCisJCQkJY21uYW1lc3BhY2UgPT4gMCwKKwkJCQljbWxpbWl0ID0+IDUwMCB9LAorCQkpCisJCXx8IGRpZSAkbXctPntlcnJvcn0tPntjb2RlfS4iOiAiLiRtdy0+e2Vycm9yfS0+e2RldGFpbHN9OworCQlvcGVuKG15ICRmaWxlLCAiPmFsbC50eHQiKTsKKwkJZm9yZWFjaCBteSAkcGFnZSAoQHskbXdfcGFnZXN9KSB7CisJCQlwcmludCAkZmlsZSAiJHBhZ2UtPnt0aXRsZX1cbiI7CisJCX0KKwkJY2xvc2UgKCRmaWxlKTsKKworCX0gZWxzZSB7CisJCW15ICRtd19wYWdlcyA9ICRtdy0+bGlzdCh7CisJCQkJYWN0aW9uID0+ICdxdWVyeScsCisJCQkJbGlzdCA9PiAnYWxscGFnZXMnLAorCQkJCWFwbGltaXQgPT4gNTAwLAorCQkJfSkKKwkJfHwgZGllICRtdy0+e2Vycm9yfS0+e2NvZGV9LiI6ICIuJG13LT57ZXJyb3J9LT57ZGV0YWlsc307CisJCW9wZW4obXkgJGZpbGUsICI+YWxsLnR4dCIpOworCQlmb3JlYWNoIG15ICRwYWdlIChAeyRtd19wYWdlc30pIHsKKwkJCXByaW50ICRmaWxlICIkcGFnZS0+e3RpdGxlfVxuIjsKKwkJfQorCQljbG9zZSAoJGZpbGUpOworCX0KK30KKworc3ViIHdpa2lfdXBsb2FkX2ZpbGUgeworCW15ICRmaWxlX25hbWUgPSAkX1swXTsKKwlteSAkcmVzdWx0YXQgPSAkbXctPmVkaXQgKCB7CisJCWFjdGlvbiA9PiAndXBsb2FkJywKKwkJZmlsZW5hbWUgPT4gJGZpbGVfbmFtZSwKKwkJY29tbWVudCA9PiAndXBsb2FkIGEgZmlsZScsCisJCWZpbGUgPT4gWyAkZmlsZV9uYW1lIF0sCisJCWlnbm9yZXdhcm5pbmdzPT4xLAorCX0sIHsKKwkJc2tpcF9lbmNvZGluZyA9PiAxCisJfSApIHx8IGRpZSAkbXctPntlcnJvcn0tPntjb2RlfSAuICcgOiAnIC4gJG13LT57ZXJyb3J9LT57ZGV0YWlsc307Cit9CisKKworCisjIE1haW4gcGFydCBvZiB0aGlzIHNjcmlwdDogcGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKyMgYW5kIHNlbGVjdCB3aGljaCBmdW5jdGlvbiB0byBleGVjdXRlCitteSAkZmN0X3RvX2NhbGwgPSBzaGlmdDsKKword2lraV9sb2dpbigkd2lraV9hZG1pbiwgJHdpa2lfYWRtaW5fcGFzcyk7CisKK215ICVmdW5jdGlvbnNfdG9fY2FsbCA9IHF3KAorCXVwbG9hZF9maWxlICAgIHdpa2lfdXBsb2FkX2ZpbGUKKwlnZXRfcGFnZSAgICAgICB3aWtpX2dldHBhZ2UKKwlkZWxldGVfcGFnZSAgICB3aWtpX2RlbGV0ZV9wYWdlCisJZWRpdF9wYWdlICAgICAgd2lraV9lZGl0cGFnZQorCWdldGFsbHBhZ2VuYW1lIHdpa2lfZ2V0YWxscGFnZW5hbWUKKyk7CitkaWUgIiQwIEVSUk9SOiB3cm9uZyBhcmd1bWVudCIgdW5sZXNzIGV4aXN0cyAkZnVuY3Rpb25zX3RvX2NhbGx7JGZjdF90b19jYWxsfTsKKyZ7JGZ1bmN0aW9uc190b19jYWxseyRmY3RfdG9fY2FsbH19KEBBUkdWKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC5jb25maWcgYi9jb250cmliL213LXRvLWdpdC90L3Rlc3QuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYTA2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L3Rlc3QuY29uZmlnCkBAIC0wLDAgKzEsMzcgQEAKKyMgTmFtZSBvZiB0aGUgd2ViIHNlcnZlcidzIGRpcmVjdG9yeSBkZWRpY2F0ZWQgdG8gdGhlIHdpa2kgaXMgV0lLSV9ESVJfTkFNRQorV0lLSV9ESVJfTkFNRT13aWtpCisKKyMgTG9naW4gYW5kIHBhc3N3b3JkIG9mIHRoZSB3aWtpJ3MgYWRtaW4KK1dJS0lfQURNSU49V2lraUFkbWluCitXSUtJX1BBU1NXPUFkbWluUGFzcworCisjIEFkZHJlc3Mgb2YgdGhlIHdlYiBzZXJ2ZXIKK1NFUlZFUl9BRERSPWxvY2FsaG9zdAorCisjIFNRTGl0ZSBkYXRhYmFzZSBvZiB0aGUgd2lraSwgbmFtZWQgREJfRklMRSwgaXMgbG9jYXRlZCBpbiBUTVAKK1RNUD0vdG1wCitEQl9GSUxFPXdpa2lkYi5zcWxpdGUKKworIyBJZiBMSUdIVFRQRCBpcyBub3Qgc2V0IHRvIHRydWUsIHRoZSBzY3JpcHQgd2lsbCB1c2UgdGhlIGRlZmF1bHQKKyMgd2ViIHNlcnZlciBydW5uaW5nIGluIFdJS0lfRElSX0lOU1QuCitXSUtJX0RJUl9JTlNUPS92YXIvd3d3CisKKyMgSWYgTElHSFRUUEQgaXMgc2V0IHRvIHRydWUsIHRoZSBzY3JpcHQgd2lsbCB1c2UgTGlnaHR0cGQgdG8gcnVuCisjIHRoZSB3aWtpLgorTElHSFRUUEQ9dHJ1ZQorCisjIFRoZSB2YXJpYWJsZXMgYmVsb3cgYXJlIHVzZWZ1bCBvbmx5IGlmIExJR0hUVFBEIGlzIHNldCB0byB0cnVlLgorUE9SVD0xMjM0CitQSFBfRElSPS91c3IvYmluCitMSUdIVFRQRF9ESVI9L3Vzci9zYmluCitXRUI9V0VCCitXRUJfVE1QPSRXRUIvdG1wCitXRUJfV1dXPSRXRUIvd3d3CisKKyMgVGhlIHZhcmlhYmxlcyBiZWxvdyBhcmUgdXNlZCBieSB0aGUgc2NyaXB0IHRvIGluc3RhbGwgYSB3aWtpLgorIyBZb3Ugc2hvdWxkIG5vdCBtb2RpZnkgdGhlc2UgdW5sZXNzIHlvdSBhcmUgbW9kaWZ5aW5nIHRoZSBzY3JpcHQgaXRzZWxmLgorIyB0ZXN0ZWQgdmVyc2lvbnM6IDEuMTkuWCAtPiAxLjIxLjEKK01XX1ZFUlNJT05fTUFKT1I9MS4yMQorTVdfVkVSU0lPTl9NSU5PUj0xCitGSUxFU19GT0xERVI9aW5zdGFsbC13aWtpCitEQl9JTlNUQUxMX1NDUklQVD1kYl9pbnN0YWxsLnBocApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL0xJQ0VOU0UgYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjQ1Njk1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL0xJQ0VOU0UKQEAgLTAsMCArMSwyMDIgQEAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvTWFrZWZpbGUgYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJiODRiYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9NYWtlZmlsZQpAQCAtMCwwICsxLDQwIEBACisjIENvcHlyaWdodCAyMDEyIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK0JVSUxEX0xBQkVMPSQoc2hlbGwgY3V0IC1kIiAiIC1mMyAuLi8uLi9HSVQtVkVSU0lPTi1GSUxFKQorVEFSX09VVD0kKHNoZWxsIGdvIGVudiBHT09TKV8kKHNoZWxsIGdvIGVudiBHT0FSQ0gpLnRhci5negorCithbGw6IGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcyBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMtLXByb3h5IFwKKwlnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cAorCitnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMtLXByb3h5OiBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMKKwlsbiAtZiAtcyBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzLS1wcm94eQorCitnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cDogZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzCisJbG4gLWYgLXMgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzIGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwCisKK2dpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwczoKKwljYXNlICQkKGdvIHZlcnNpb24pIGluIFwKKwkiZ28gdmVyc2lvbiBnbyIxLlswLTVdLiopIEVRPSIgIiA7OyAqKSBFUT0iPSIgOzsgZXNhYyAmJiBcCisJZ28gYnVpbGQgLW8gZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzIFwKKwkJLWxkZmxhZ3MgIi1YIG1haW4uX0JVSUxEX0VNQkVEX0xBQkVMJCR7RVF9JChCVUlMRF9MQUJFTCkiCisKK2NsZWFuOgorCXJtIC1mIGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwKiAqLnRhci5negorCit0YXI6IGNsZWFuIGFsbAorCUBjaG1vZCA1NTUgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzCisJQHRhciAtY3pmICQoVEFSX09VVCkgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHAqIFJFQURNRSBMSUNFTlNFCisJQGVjaG8KKwlAZWNobyAiQ3JlYXRlZCAkKFRBUl9PVVQpIgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL1JFQURNRSBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0Y2Q4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9SRUFETUUKQEAgLTAsMCArMSw3MiBAQAorZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzCisKK1RoZSBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMgYmluYXJ5IHNwZWVkcyB1cCBTU0wgb3BlcmF0aW9ucworYnkgcnVubmluZyBhIGRhZW1vbiBqb2IgKGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy0tcHJveHkpIHRoYXQKK2tlZXBzIGEgY29ubmVjdGlvbiBvcGVuIHRvIGEgc2VydmVyLgorCisKK1BSRS1CVUlMVCBCSU5BUklFUworCitEYXJ3aW4gYW1kNjQ6CitodHRwczovL2NvbW1vbmRhdGFzdG9yYWdlLmdvb2dsZWFwaXMuY29tL2dpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy9kYXJ3aW5fYW1kNjQudGFyLmd6CisKK0xpbnV4IGFtZDY0OgoraHR0cHM6Ly9jb21tb25kYXRhc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9naXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMvbGludXhfYW1kNjQudGFyLmd6CisKKworSU5TVEFMTElORworCitNb3ZlIGFsbCBvZiB0aGUgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHAqIGJpbmFyaWVzIHRvIGEgZGlyZWN0b3J5CitpbiBQQVRILgorCisKK1VTQUdFCisKK0hUVFBTIHJlcXVlc3RzIGNhbiBiZSBkZWxlZ2F0ZWQgdG8gdGhlIHByb3h5IGJ5IHVzaW5nIHRoZQorInBlcnNpc3RlbnQtaHR0cHMiIHNjaGVtZSwgZS5nLgorCitnaXQgY2xvbmUgcGVyc2lzdGVudC1odHRwczovL2tlcm5lbC5nb29nbGVzb3VyY2UuY29tL3B1Yi9zY20vZ2l0L2dpdAorCitMaWtld2lzZSwgLmdpdGNvbmZpZyBjYW4gYmUgdXBkYXRlZCBhcyBmb2xsb3dzIHRvIHJld3JpdGUgaHR0cHMgdXJscwordG8gdXNlIHBlcnNpc3RlbnQtaHR0cHM6CisKK1t1cmwgInBlcnNpc3RlbnQtaHR0cHMiXQorCWluc3RlYWRvZiA9IGh0dHBzCitbdXJsICJwZXJzaXN0ZW50LWh0dHAiXQorCWluc3RlYWRvZiA9IGh0dHAKKworWW91IG1heSBhbHNvIHdhbnQgdG8gYWxsb3cgdGhlIHVzZSBvZiB0aGUgcGVyc2lzdGVudC1odHRwcyBoZWxwZXIgZm9yCitzdWJtb2R1bGUgVVJMcyAoc2luY2UgYW55IGh0dHBzIFVSTHMgcG9pbnRpbmcgdG8gc3VibW9kdWxlcyB3aWxsIGJlCityZXdyaXR0ZW4sIGFuZCBHaXQncyBvdXQtb2YtdGhlLWJveCBkZWZhdWx0cyBmb3JiaWQgc3VibW9kdWxlcyBmcm9tCit1c2luZyB1bmtub3duIHJlbW90ZSBoZWxwZXJzKToKKworW3Byb3RvY29sICJwZXJzaXN0ZW50LWh0dHBzIl0KKwlhbGxvdyA9IGFsd2F5cworW3Byb3RvY29sICJwZXJzaXN0ZW50LWh0dHAiXQorCWFsbG93ID0gYWx3YXlzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJVSUxESU5HIEZST00gU09VUkNFCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTE9DQVRJT04KKworVGhlIHNvdXJjZSBpcyBhdmFpbGFibGUgaW4gdGhlIGNvbnRyaWIvcGVyc2lzdGVudC1odHRwcyBkaXJlY3Rvcnkgb2YKK3RoZSBHaXQgc291cmNlIHJlcG9zaXRvcnkuIFRoZSBHaXQgc291cmNlIHJlcG9zaXRvcnkgaXMgYXZhaWxhYmxlIGF0CitnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0LworaHR0cHM6Ly9rZXJuZWwuZ29vZ2xlc291cmNlLmNvbS9wdWIvc2NtL2dpdC9naXQKKworCitQUkVSRVFVSVNJVEVTCisKK1RoZSBjb2RlIGlzIHdyaXR0ZW4gaW4gR28gKGh0dHA6Ly9nb2xhbmcub3JnLykgYW5kIHRoZSBHbyBjb21waWxlciBpcworcmVxdWlyZWQuIEN1cnJlbnRseSwgdGhlIGNvbXBpbGVyIG11c3QgYmUgYnVpbHQgYW5kIGluc3RhbGxlZCBmcm9tIHRpcAorb2Ygc291cmNlLCBpbiBvcmRlciB0byBpbmNsdWRlIGEgZml4IGluIHRoZSByZXZlcnNlIGh0dHAgcHJveHk6CitodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ28vc291cmNlL2RldGFpbD9yPWE2MTViNzk2NTcwYTJjZDg1OTE4ODQ3NjdhN2Q2N2VkZTc0ZjY2NDgKKworCitCVUlMRElORworCitSdW4gIm1ha2UiIHRvIGJ1aWxkIHRoZSBiaW5hcmllcy4gU2VlIHRoZSBzZWN0aW9uIG9uCitJTlNUQUxMSU5HIGFib3ZlLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL2NsaWVudC5nbyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9jbGllbnQuZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExMjViNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9jbGllbnQuZ28KQEAgLTAsMCArMSwxODkgQEAKKy8vIENvcHlyaWdodCAyMDEyIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3BhY2thZ2UgbWFpbgorCitpbXBvcnQgKAorCSJidWZpbyIKKwkiZXJyb3JzIgorCSJmbXQiCisJIm5ldCIKKwkibmV0L3VybCIKKwkib3MiCisJIm9zL2V4ZWMiCisJInN0cmluZ3MiCisJInN5c2NhbGwiCisJInRpbWUiCispCisKK3R5cGUgQ2xpZW50IHN0cnVjdCB7CisJUHJveHlCaW4gc3RyaW5nCisJQXJncyAgICAgW11zdHJpbmcKKworCWluc2VjdXJlIGJvb2wKK30KKworZnVuYyAoYyAqQ2xpZW50KSBSdW4oKSBlcnJvciB7CisJaWYgZXJyIDo9IGMucmVzb2x2ZUFyZ3MoKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBmbXQuRXJyb3JmKCJyZXNvbHZlQXJncygpIGdvdCBlcnJvcjogJXYiLCBlcnIpCisJfQorCisJLy8gQ29ubmVjdCB0byB0aGUgcHJveHkuCisJdWNvbm4sIGhjb25uLCBhZGRyLCBlcnIgOj0gYy5jb25uZWN0KCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGZtdC5FcnJvcmYoImNvbm5lY3QoKSBnb3QgZXJyb3I6ICV2IiwgZXJyKQorCX0KKwkvLyBLZWVwIHRoZSB1bml4IHNvY2tldCBjb25uZWN0aW9uIG9wZW4gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcmVxdWVzdC4KKwlkZWZlciB1Y29ubi5DbG9zZSgpCisJLy8gS2VlcCBhIGNvbm5lY3Rpb24gdG8gdGhlIEhUVFAgc2VydmVyIG9wZW4sIHNvIG5vIG90aGVyIHVzZXIgY2FuCisJLy8gYmluZCBvbiB0aGUgc2FtZSBhZGRyZXNzIHNvIGxvbmcgYXMgdGhlIHByb2Nlc3MgaXMgcnVubmluZy4KKwlkZWZlciBoY29ubi5DbG9zZSgpCisKKwkvLyBTdGFydCB0aGUgZ2l0LXJlbW90ZS1odHRwIHN1YnByb2Nlc3MuCisJY2FyZ3MgOj0gW11zdHJpbmd7Ii1jIiwgZm10LlNwcmludGYoImh0dHAucHJveHk9JXYiLCBhZGRyKSwgInJlbW90ZS1odHRwIn0KKwljYXJncyA9IGFwcGVuZChjYXJncywgYy5BcmdzLi4uKQorCWNtZCA6PSBleGVjLkNvbW1hbmQoImdpdCIsIGNhcmdzLi4uKQorCisJZm9yIF8sIHYgOj0gcmFuZ2Ugb3MuRW52aXJvbigpIHsKKwkJaWYgIXN0cmluZ3MuSGFzUHJlZml4KHYsICJHSVRfUEVSU0lTVEVOVF9IVFRQU19TRUNVUkU9IikgeworCQkJY21kLkVudiA9IGFwcGVuZChjbWQuRW52LCB2KQorCQl9CisJfQorCS8vIFNldCB0aGUgR0lUX1BFUlNJU1RFTlRfSFRUUFNfU0VDVVJFIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4KKwkvLyB0aGUgcHJveHkgaXMgdXNpbmcgYSBTU0wgY29ubmVjdGlvbi4gIFRoaXMgYWxsb3dzIGNyZWRlbnRpYWwgaGVscGVycworCS8vIHRvIGlkZW50aWZ5IHNlY3VyZSBwcm94eSBjb25uZWN0aW9ucywgZGVzcGl0ZSBiZWluZyBwYXNzZWQgYW4gSFRUUAorCS8vIHNjaGVtZS4KKwlpZiAhYy5pbnNlY3VyZSB7CisJCWNtZC5FbnYgPSBhcHBlbmQoY21kLkVudiwgIkdJVF9QRVJTSVNURU5UX0hUVFBTX1NFQ1VSRT0xIikKKwl9CisKKwljbWQuU3RkaW4gPSBvcy5TdGRpbgorCWNtZC5TdGRvdXQgPSBvcy5TdGRvdXQKKwljbWQuU3RkZXJyID0gb3MuU3RkZXJyCisJaWYgZXJyIDo9IGNtZC5SdW4oKTsgZXJyICE9IG5pbCB7CisJCWlmIGVlcnIsIG9rIDo9IGVyci4oKmV4ZWMuRXhpdEVycm9yKTsgb2sgeworCQkJaWYgc3RhdCwgb2sgOj0gZWVyci5Qcm9jZXNzU3RhdGUuU3lzKCkuKHN5c2NhbGwuV2FpdFN0YXR1cyk7IG9rICYmIHN0YXQuRXhpdFN0YXR1cygpICE9IDAgeworCQkJCW9zLkV4aXQoc3RhdC5FeGl0U3RhdHVzKCkpCisJCQl9CisJCX0KKwkJcmV0dXJuIGZtdC5FcnJvcmYoImdpdC1yZW1vdGUtaHR0cCBzdWJwcm9jZXNzIGdvdCBlcnJvcjogJXYiLCBlcnIpCisJfQorCXJldHVybiBuaWwKK30KKworZnVuYyAoYyAqQ2xpZW50KSBjb25uZWN0KCkgKHVjb25uIG5ldC5Db25uLCBoY29ubiBuZXQuQ29ubiwgYWRkciBzdHJpbmcsIGVyciBlcnJvcikgeworCXVjb25uLCBlcnIgPSBEZWZhdWx0U29ja2V0LkRpYWwoKQorCWlmIGVyciAhPSBuaWwgeworCQlpZiBlLCBvayA6PSBlcnIuKCpuZXQuT3BFcnJvcik7IG9rICYmIChvcy5Jc05vdEV4aXN0KGUuRXJyKSB8fCBlLkVyciA9PSBzeXNjYWxsLkVDT05OUkVGVVNFRCkgeworCQkJaWYgZXJyID0gYy5zdGFydFByb3h5KCk7IGVyciA9PSBuaWwgeworCQkJCXVjb25uLCBlcnIgPSBEZWZhdWx0U29ja2V0LkRpYWwoKQorCQkJfQorCQl9CisJCWlmIGVyciAhPSBuaWwgeworCQkJcmV0dXJuCisJCX0KKwl9CisKKwlpZiBhZGRyLCBlcnIgPSBjLnJlYWRBZGRyKHVjb25uKTsgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKworCS8vIE9wZW4gYSB0Y3AgY29ubmVjdGlvbiB0byB0aGUgcHJveHkuCisJaWYgaGNvbm4sIGVyciA9IG5ldC5EaWFsKCJ0Y3AiLCBhZGRyKTsgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKworCS8vIFZlcmlmeSB0aGUgYWRkcmVzcyBoYXNuJ3QgY2hhbmdlZCBvd25lcnNoaXAuCisJdmFyIGFkZHIyIHN0cmluZworCWlmIGFkZHIyLCBlcnIgPSBjLnJlYWRBZGRyKHVjb25uKTsgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0gZWxzZSBpZiBhZGRyICE9IGFkZHIyIHsKKwkJZXJyID0gZm10LkVycm9yZigiYWRkcmVzcyBjaGFuZ2VkIGFmdGVyIGNvbm5lY3QuIGdvdCAlcSwgd2FudCAlcSIsIGFkZHIyLCBhZGRyKQorCQlyZXR1cm4KKwl9CisJcmV0dXJuCit9CisKK2Z1bmMgKGMgKkNsaWVudCkgcmVhZEFkZHIoY29ubiBuZXQuQ29ubikgKHN0cmluZywgZXJyb3IpIHsKKwljb25uLlNldERlYWRsaW5lKHRpbWUuTm93KCkuQWRkKDUgKiB0aW1lLlNlY29uZCkpCisJZGF0YSA6PSBtYWtlKFtdYnl0ZSwgMTAwKQorCW4sIGVyciA6PSBjb25uLlJlYWQoZGF0YSkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuICIiLCBmbXQuRXJyb3JmKCJlcnJvciByZWFkaW5nIHVuaXggc29ja2V0OiAldiIsIGVycikKKwl9IGVsc2UgaWYgbiA9PSAwIHsKKwkJcmV0dXJuICIiLCBlcnJvcnMuTmV3KCJlbXB0eSBkYXRhIHJlc3BvbnNlIikKKwl9CisJY29ubi5Xcml0ZShbXWJ5dGV7MX0pIC8vIEFjaworCisJdmFyIGFkZHIgc3RyaW5nCisJaWYgYWRkcnMgOj0gc3RyaW5ncy5TcGxpdChzdHJpbmcoZGF0YVs6bl0pLCAiXG4iKTsgbGVuKGFkZHJzKSAhPSAyIHsKKwkJcmV0dXJuICIiLCBmbXQuRXJyb3JmKCJnb3QgJXEsIHdhbnRlZCAyIGFkZHJlc3NlcyIsIGRhdGFbOm5dKQorCX0gZWxzZSBpZiBjLmluc2VjdXJlIHsKKwkJYWRkciA9IGFkZHJzWzFdCisJfSBlbHNlIHsKKwkJYWRkciA9IGFkZHJzWzBdCisJfQorCXJldHVybiBhZGRyLCBuaWwKK30KKworZnVuYyAoYyAqQ2xpZW50KSBzdGFydFByb3h5KCkgZXJyb3IgeworCWNtZCA6PSBleGVjLkNvbW1hbmQoYy5Qcm94eUJpbikKKwljbWQuU3lzUHJvY0F0dHIgPSAmc3lzY2FsbC5TeXNQcm9jQXR0cntTZXRwZ2lkOiB0cnVlfQorCXN0ZG91dCwgZXJyIDo9IGNtZC5TdGRvdXRQaXBlKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwlkZWZlciBzdGRvdXQuQ2xvc2UoKQorCWlmIGVyciA6PSBjbWQuU3RhcnQoKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJcmVzdWx0IDo9IG1ha2UoY2hhbiBlcnJvcikKKwlnbyBmdW5jKCkgeworCQlieXRlcywgXywgZXJyIDo9IGJ1ZmlvLk5ld1JlYWRlcihzdGRvdXQpLlJlYWRMaW5lKCkKKwkJaWYgbGluZSA6PSBzdHJpbmcoYnl0ZXMpOyBlcnIgPT0gbmlsICYmIGxpbmUgIT0gIk9LIiB7CisJCQllcnIgPSBmbXQuRXJyb3JmKCJwcm94eSByZXR1cm5lZCAlcSwgd2FudCBcIk9LXCIiLCBsaW5lKQorCQl9CisJCXJlc3VsdCA8LSBlcnIKKwl9KCkKKwlzZWxlY3QgeworCWNhc2UgZXJyIDo9IDwtcmVzdWx0OgorCQlyZXR1cm4gZXJyCisJY2FzZSA8LXRpbWUuQWZ0ZXIoNSAqIHRpbWUuU2Vjb25kKToKKwkJcmV0dXJuIGVycm9ycy5OZXcoInRpbWVvdXQgd2FpdGluZyBmb3IgcHJveHkgdG8gc3RhcnQiKQorCX0KKwlwYW5pYygibm90IHJlYWNoYWJsZSIpCit9CisKK2Z1bmMgKGMgKkNsaWVudCkgcmVzb2x2ZUFyZ3MoKSBlcnJvciB7CisJaWYgbmFyZ3MgOj0gbGVuKGMuQXJncyk7IG5hcmdzID09IDAgeworCQlyZXR1cm4gZXJyb3JzLk5ldygicmVtb3RlIG5lZWRlZCIpCisJfSBlbHNlIGlmIG5hcmdzID4gMiB7CisJCXJldHVybiBmbXQuRXJyb3JmKCJ3YW50IGF0IG1vc3QgMiBhcmdzLCBnb3QgJXYiLCBjLkFyZ3MpCisJfQorCisJLy8gUmV3cml0ZSB0aGUgdXJsIHNjaGVtZSB0byBiZSBodHRwLgorCWlkeCA6PSBsZW4oYy5BcmdzKSAtIDEKKwlyYXd1cmwgOj0gYy5BcmdzW2lkeF0KKwlydXJsLCBlcnIgOj0gdXJsLlBhcnNlKHJhd3VybCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGZtdC5FcnJvcmYoImludmFsaWQgcmVtb3RlOiAldiIsIGVycikKKwl9CisJYy5pbnNlY3VyZSA9IHJ1cmwuU2NoZW1lID09ICJwZXJzaXN0ZW50LWh0dHAiCisJcnVybC5TY2hlbWUgPSAiaHR0cCIKKwljLkFyZ3NbaWR4XSA9IHJ1cmwuU3RyaW5nKCkKKwlpZiBpZHggIT0gMCAmJiBjLkFyZ3NbMF0gPT0gcmF3dXJsIHsKKwkJYy5BcmdzWzBdID0gYy5BcmdzW2lkeF0KKwl9CisJcmV0dXJuIG5pbAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL21haW4uZ28gYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvbWFpbi5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDFiMTA3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL21haW4uZ28KQEAgLTAsMCArMSw4MiBAQAorLy8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLy8gVGhlIGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcyBiaW5hcnkgc3BlZWRzIHVwIFNTTCBvcGVyYXRpb25zIGJ5IHJ1bm5pbmcKKy8vIGEgZGFlbW9uIGpvYiB0aGF0IGtlZXBzIGEgY29ubmVjdGlvbiBvcGVuIHRvIGEgR2l0IHNlcnZlci4gVGhpcyBlbnN1cmVzIHRoZQorLy8gZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzLS1wcm94eSBpcyBydW5uaW5nIGFuZCBkZWxlZ2F0aW5nIGV4ZWN1dGlvbgorLy8gdG8gdGhlIGdpdC1yZW1vdGUtaHR0cCBiaW5hcnkgd2l0aCB0aGUgaHR0cF9wcm94eSBzZXQgdG8gdGhlIGRhZW1vbiBqb2IuCisvLyBBIHVuaXggc29ja2V0IGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoZSBwcm94eSBhbmQgZGlzY292ZXIgdGhlCisvLyBIVFRQIGFkZHJlc3MuIE5vdGUsIGJvdGggdGhlIGNsaWVudCBhbmQgcHJveHkgYXJlIGluY2x1ZGVkIGluIHRoZSBzYW1lCisvLyBiaW5hcnkuCitwYWNrYWdlIG1haW4KKworaW1wb3J0ICgKKwkiZmxhZyIKKwkiZm10IgorCSJsb2ciCisJIm9zIgorCSJzdHJpbmdzIgorCSJ0aW1lIgorKQorCit2YXIgKAorCWZvcmNlUHJveHkgPSBmbGFnLkJvb2woInByb3h5IiwgZmFsc2UsICJXaGV0aGVyIHRvIHN0YXJ0IHRoZSBiaW5hcnkgaW4gcHJveHkgbW9kZSIpCisJcHJveHlCaW4gICA9IGZsYWcuU3RyaW5nKCJwcm94eV9iaW4iLCAiZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzLS1wcm94eSIsICJQYXRoIHRvIHRoZSBwcm94eSBiaW5hcnkiKQorCXByaW50TGFiZWwgPSBmbGFnLkJvb2woInByaW50X2xhYmVsIiwgZmFsc2UsICJQcmludHMgdGhlIGJ1aWxkIGxhYmVsIGZvciB0aGUgYmluYXJ5IikKKworCS8vIFZhcmlhYmxlIHRoYXQgc2hvdWxkIGJlIGRlZmluZWQgdGhyb3VnaCB0aGUgLVggbGlua2VyIGZsYWcuCisJX0JVSUxEX0VNQkVEX0xBQkVMIHN0cmluZworKQorCitjb25zdCAoCisJZGVmYXVsdE1heElkbGVEdXJhdGlvbiAgICA9IDI0ICogdGltZS5Ib3VyCisJZGVmYXVsdFBvbGxVcGRhdGVJbnRlcnZhbCA9IDE1ICogdGltZS5NaW51dGUKKykKKworZnVuYyBtYWluKCkgeworCWZsYWcuUGFyc2UoKQorCWlmICpwcmludExhYmVsIHsKKwkJLy8gU2hvcnQgY2lyY3VpdCBleGVjdXRpb24gdG8gcHJpbnQgdGhlIGJ1aWxkIGxhYmVsCisJCWZtdC5QcmludGxuKGJ1aWxkTGFiZWwoKSkKKwkJcmV0dXJuCisJfQorCisJdmFyIGVyciBlcnJvcgorCWlmICpmb3JjZVByb3h5IHx8IHN0cmluZ3MuSGFzU3VmZml4KG9zLkFyZ3NbMF0sICItLXByb3h5IikgeworCQlsb2cuU2V0UHJlZml4KCJnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMtLXByb3h5OiAiKQorCQlwcm94eSA6PSAmUHJveHl7CisJCQlCdWlsZExhYmVsOiAgICAgICAgIGJ1aWxkTGFiZWwoKSwKKwkJCU1heElkbGVEdXJhdGlvbjogICAgZGVmYXVsdE1heElkbGVEdXJhdGlvbiwKKwkJCVBvbGxVcGRhdGVJbnRlcnZhbDogZGVmYXVsdFBvbGxVcGRhdGVJbnRlcnZhbCwKKwkJfQorCQllcnIgPSBwcm94eS5SdW4oKQorCX0gZWxzZSB7CisJCWxvZy5TZXRQcmVmaXgoImdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwczogIikKKwkJY2xpZW50IDo9ICZDbGllbnR7CisJCQlQcm94eUJpbjogKnByb3h5QmluLAorCQkJQXJnczogICAgIGZsYWcuQXJncygpLAorCQl9CisJCWVyciA9IGNsaWVudC5SdW4oKQorCX0KKwlpZiBlcnIgIT0gbmlsIHsKKwkJbG9nLkZhdGFsbG4oZXJyKQorCX0KK30KKworZnVuYyBidWlsZExhYmVsKCkgc3RyaW5nIHsKKwlpZiBfQlVJTERfRU1CRURfTEFCRUwgPT0gIiIgeworCQlsb2cuUHJpbnRsbihgdW5sYWJlbGVkIGJ1aWxkOyBidWlsZCB3aXRoICJtYWtlIiB0byBsYWJlbGApCisJfQorCXJldHVybiBfQlVJTERfRU1CRURfTEFCRUwKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9wcm94eS5nbyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9wcm94eS5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjBjZGJhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL3Byb3h5LmdvCkBAIC0wLDAgKzEsMTkwIEBACisvLyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitwYWNrYWdlIG1haW4KKworaW1wb3J0ICgKKwkiZm10IgorCSJsb2ciCisJIm5ldCIKKwkibmV0L2h0dHAiCisJIm5ldC9odHRwL2h0dHB1dGlsIgorCSJvcyIKKwkib3MvZXhlYyIKKwkib3Mvc2lnbmFsIgorCSJzeW5jIgorCSJzeXNjYWxsIgorCSJ0aW1lIgorKQorCit0eXBlIFByb3h5IHN0cnVjdCB7CisJQnVpbGRMYWJlbCAgICAgICAgIHN0cmluZworCU1heElkbGVEdXJhdGlvbiAgICB0aW1lLkR1cmF0aW9uCisJUG9sbFVwZGF0ZUludGVydmFsIHRpbWUuRHVyYXRpb24KKworCXVsICAgICAgICBuZXQuTGlzdGVuZXIKKwlodHRwQWRkciAgc3RyaW5nCisJaHR0cHNBZGRyIHN0cmluZworfQorCitmdW5jIChwICpQcm94eSkgUnVuKCkgZXJyb3IgeworCWhsLCBlcnIgOj0gbmV0Lkxpc3RlbigidGNwIiwgIjEyNy4wLjAuMTowIikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGZtdC5FcnJvcmYoImh0dHAgbGlzdGVuIGZhaWxlZDogJXYiLCBlcnIpCisJfQorCWRlZmVyIGhsLkNsb3NlKCkKKworCWhzbCwgZXJyIDo9IG5ldC5MaXN0ZW4oInRjcCIsICIxMjcuMC4wLjE6MCIpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBmbXQuRXJyb3JmKCJodHRwcyBsaXN0ZW4gZmFpbGVkOiAldiIsIGVycikKKwl9CisJZGVmZXIgaHNsLkNsb3NlKCkKKworCXAudWwsIGVyciA9IERlZmF1bHRTb2NrZXQuTGlzdGVuKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJYywgZGVyciA6PSBEZWZhdWx0U29ja2V0LkRpYWwoKQorCQlpZiBkZXJyID09IG5pbCB7CisJCQljLkNsb3NlKCkKKwkJCWZtdC5QcmludGxuKCJPS1xuQSBwcm94eSBpcyBhbHJlYWR5IHJ1bm5pbmcuLi4gZXhpdGluZyIpCisJCQlyZXR1cm4gbmlsCisJCX0gZWxzZSBpZiBlLCBvayA6PSBkZXJyLigqbmV0Lk9wRXJyb3IpOyBvayAmJiBlLkVyciA9PSBzeXNjYWxsLkVDT05OUkVGVVNFRCB7CisJCQkvLyBOb3RoaW5nIGlzIGxpc3RlbmluZyBvbiB0aGUgc29ja2V0LCB1bmxpbmsgaXQgYW5kIHRyeSBhZ2Fpbi4KKwkJCXN5c2NhbGwuVW5saW5rKERlZmF1bHRTb2NrZXQuUGF0aCgpKQorCQkJcC51bCwgZXJyID0gRGVmYXVsdFNvY2tldC5MaXN0ZW4oKQorCQl9CisJCWlmIGVyciAhPSBuaWwgeworCQkJcmV0dXJuIGZtdC5FcnJvcmYoInVuaXggbGlzdGVuIGZhaWxlZCBvbiAldjogJXYiLCBEZWZhdWx0U29ja2V0LlBhdGgoKSwgZXJyKQorCQl9CisJfQorCWRlZmVyIHAudWwuQ2xvc2UoKQorCWdvIHAuY2xvc2VPblNpZ25hbCgpCisJZ28gcC5jbG9zZU9uVXBkYXRlKCkKKworCXAuaHR0cEFkZHIgPSBobC5BZGRyKCkuU3RyaW5nKCkKKwlwLmh0dHBzQWRkciA9IGhzbC5BZGRyKCkuU3RyaW5nKCkKKwlmbXQuUHJpbnRmKCJPS1xuTGlzdGVuaW5nIG9uIHVuaXggc29ja2V0PSV2IGh0dHA9JXYgaHR0cHM9JXZcbiIsCisJCXAudWwuQWRkcigpLCBwLmh0dHBBZGRyLCBwLmh0dHBzQWRkcikKKworCXJlc3VsdCA6PSBtYWtlKGNoYW4gZXJyb3IsIDIpCisJZ28gcC5zZXJ2ZVVuaXgocmVzdWx0KQorCWdvIGZ1bmMoKSB7CisJCXJlc3VsdCA8LSBodHRwLlNlcnZlKGhsLCAmaHR0cHV0aWwuUmV2ZXJzZVByb3h5eworCQkJRmx1c2hJbnRlcnZhbDogNTAwICogdGltZS5NaWxsaXNlY29uZCwKKwkJCURpcmVjdG9yOiAgICAgIGZ1bmMociAqaHR0cC5SZXF1ZXN0KSB7fSwKKwkJfSkKKwl9KCkKKwlnbyBmdW5jKCkgeworCQlyZXN1bHQgPC0gaHR0cC5TZXJ2ZShoc2wsICZodHRwdXRpbC5SZXZlcnNlUHJveHl7CisJCQlGbHVzaEludGVydmFsOiA1MDAgKiB0aW1lLk1pbGxpc2Vjb25kLAorCQkJRGlyZWN0b3I6IGZ1bmMociAqaHR0cC5SZXF1ZXN0KSB7CisJCQkJci5VUkwuU2NoZW1lID0gImh0dHBzIgorCQkJfSwKKwkJfSkKKwl9KCkKKwlyZXR1cm4gPC1yZXN1bHQKK30KKwordHlwZSBzb2NrZXRDb250ZXh0IHN0cnVjdCB7CisJc3luYy5XYWl0R3JvdXAKKwltdXRleCBzeW5jLk11dGV4CisJbGFzdCAgdGltZS5UaW1lCit9CisKK2Z1bmMgKHNjICpzb2NrZXRDb250ZXh0KSBEb25lKCkgeworCXNjLm11dGV4LkxvY2soKQorCWRlZmVyIHNjLm11dGV4LlVubG9jaygpCisJc2MubGFzdCA9IHRpbWUuTm93KCkKKwlzYy5XYWl0R3JvdXAuRG9uZSgpCit9CisKK2Z1bmMgKHAgKlByb3h5KSBzZXJ2ZVVuaXgocmVzdWx0IGNoYW48LSBlcnJvcikgeworCXNvY2tDdHggOj0gJnNvY2tldENvbnRleHR7fQorCWdvIHAuY2xvc2VPbklkbGUoc29ja0N0eCkKKworCXZhciBlcnIgZXJyb3IKKwlmb3IgeworCQl2YXIgdWNvbm4gbmV0LkNvbm4KKwkJdWNvbm4sIGVyciA9IHAudWwuQWNjZXB0KCkKKwkJaWYgZXJyICE9IG5pbCB7CisJCQllcnIgPSBmbXQuRXJyb3JmKCJhY2NlcHQgZmFpbGVkOiAldiIsIGVycikKKwkJCWJyZWFrCisJCX0KKwkJc29ja0N0eC5BZGQoMSkKKwkJZ28gcC5oYW5kbGVVbml4Q29ubihzb2NrQ3R4LCB1Y29ubikKKwl9CisJc29ja0N0eC5XYWl0KCkKKwlyZXN1bHQgPC0gZXJyCit9CisKK2Z1bmMgKHAgKlByb3h5KSBoYW5kbGVVbml4Q29ubihzb2NrQ3R4ICpzb2NrZXRDb250ZXh0LCB1Y29ubiBuZXQuQ29ubikgeworCWRlZmVyIHNvY2tDdHguRG9uZSgpCisJZGVmZXIgdWNvbm4uQ2xvc2UoKQorCWRhdGEgOj0gW11ieXRlKGZtdC5TcHJpbnRmKCIldlxuJXYiLCBwLmh0dHBzQWRkciwgcC5odHRwQWRkcikpCisJdWNvbm4uU2V0RGVhZGxpbmUodGltZS5Ob3coKS5BZGQoNSAqIHRpbWUuU2Vjb25kKSkKKwlmb3IgaSA6PSAwOyBpIDwgMjsgaSsrIHsKKwkJaWYgbiwgZXJyIDo9IHVjb25uLldyaXRlKGRhdGEpOyBlcnIgIT0gbmlsIHsKKwkJCWxvZy5QcmludGYoImVycm9yIHNlbmRpbmcgaHR0cCBhZGRyZXNzZXM6ICUrdlxuIiwgZXJyKQorCQkJcmV0dXJuCisJCX0gZWxzZSBpZiBuICE9IGxlbihkYXRhKSB7CisJCQlsb2cuUHJpbnRmKCJzZW50ICVkIGRhdGEgYnl0ZXMsIHdhbnRlZCAlZFxuIiwgbiwgbGVuKGRhdGEpKQorCQkJcmV0dXJuCisJCX0KKwkJaWYgXywgZXJyIDo9IHVjb25uLlJlYWQoW11ieXRlezAsIDAsIDAsIDB9KTsgZXJyICE9IG5pbCB7CisJCQlsb2cuUHJpbnRmKCJlcnJvciB3YWl0aW5nIGZvciBBY2s6ICUrdlxuIiwgZXJyKQorCQkJcmV0dXJuCisJCX0KKwl9CisJLy8gV2FpdCB3aXRob3V0IGEgZGVhZGxpbmUgZm9yIHRoZSBjbGllbnQgdG8gZmluaXNoIHZpYSBFT0YKKwl1Y29ubi5TZXREZWFkbGluZSh0aW1lLlRpbWV7fSkKKwl1Y29ubi5SZWFkKFtdYnl0ZXswLCAwLCAwLCAwfSkKK30KKworZnVuYyAocCAqUHJveHkpIGNsb3NlT25JZGxlKHNvY2tDdHggKnNvY2tldENvbnRleHQpIHsKKwlmb3IgZCA6PSBwLk1heElkbGVEdXJhdGlvbjsgZCA+IDA7IHsKKwkJdGltZS5TbGVlcChkKQorCQlzb2NrQ3R4LldhaXQoKQorCQlzb2NrQ3R4Lm11dGV4LkxvY2soKQorCQlpZiBkID0gc29ja0N0eC5sYXN0LkFkZChwLk1heElkbGVEdXJhdGlvbikuU3ViKHRpbWUuTm93KCkpOyBkIDw9IDAgeworCQkJbG9nLlByaW50bG4oImdyYWNlZnVsIHNodXRkb3duIGZyb20gaWRsZSB0aW1lb3V0IikKKwkJCXAudWwuQ2xvc2UoKQorCQl9CisJCXNvY2tDdHgubXV0ZXguVW5sb2NrKCkKKwl9Cit9CisKK2Z1bmMgKHAgKlByb3h5KSBjbG9zZU9uVXBkYXRlKCkgeworCWZvciB7CisJCXRpbWUuU2xlZXAocC5Qb2xsVXBkYXRlSW50ZXJ2YWwpCisJCWlmIG91dCwgZXJyIDo9IGV4ZWMuQ29tbWFuZChvcy5BcmdzWzBdLCAiLS1wcmludF9sYWJlbCIpLk91dHB1dCgpOyBlcnIgIT0gbmlsIHsKKwkJCWxvZy5QcmludGYoImVycm9yIHBvbGxpbmcgZm9yIHVwZGF0ZWQgYmluYXJ5OiAldlxuIiwgZXJyKQorCQl9IGVsc2UgaWYgcyA6PSBzdHJpbmcob3V0WzpsZW4ob3V0KS0xXSk7IHAuQnVpbGRMYWJlbCAhPSBzIHsKKwkJCWxvZy5QcmludGYoImdyYWNlZnVsIHNodXRkb3duIGZyb20gdXBkYXRlZCBiaW5hcnk6ICVxIC0tPiAlcVxuIiwgcC5CdWlsZExhYmVsLCBzKQorCQkJcC51bC5DbG9zZSgpCisJCQlicmVhaworCQl9CisJfQorfQorCitmdW5jIChwICpQcm94eSkgY2xvc2VPblNpZ25hbCgpIHsKKwljaCA6PSBtYWtlKGNoYW4gb3MuU2lnbmFsLCAxMCkKKwlzaWduYWwuTm90aWZ5KGNoLCBvcy5JbnRlcnJ1cHQsIG9zLktpbGwsIG9zLlNpZ25hbChzeXNjYWxsLlNJR1RFUk0pLCBvcy5TaWduYWwoc3lzY2FsbC5TSUdIVVApKQorCXNpZyA6PSA8LWNoCisJcC51bC5DbG9zZSgpCisJc3dpdGNoIHNpZyB7CisJY2FzZSBvcy5TaWduYWwoc3lzY2FsbC5TSUdIVVApOgorCQlsb2cuUHJpbnRmKCJncmFjZWZ1bCBzaHV0ZG93biBmcm9tIHNpZ25hbDogJXZcbiIsIHNpZykKKwlkZWZhdWx0OgorCQlsb2cuRmF0YWxmKCJleGl0aW5nIGZyb20gc2lnbmFsOiAldlxuIiwgc2lnKQorCX0KK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9zb2NrZXQuZ28gYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvc29ja2V0LmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5M2I5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvc29ja2V0LmdvCkBAIC0wLDAgKzEsOTcgQEAKKy8vIENvcHlyaWdodCAyMDEyIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3BhY2thZ2UgbWFpbgorCitpbXBvcnQgKAorCSJmbXQiCisJImxvZyIKKwkibmV0IgorCSJvcyIKKwkicGF0aC9maWxlcGF0aCIKKwkic3lzY2FsbCIKKykKKworLy8gQSBTb2NrZXQgaXMgYSB3cmFwcGVyIGFyb3VuZCBhIFVuaXggc29ja2V0IHRoYXQgdmVyaWZpZXMgZGlyZWN0b3J5CisvLyBwZXJtaXNzaW9ucy4KK3R5cGUgU29ja2V0IHN0cnVjdCB7CisJRGlyIHN0cmluZworfQorCitmdW5jIGRlZmF1bHREaXIoKSBzdHJpbmcgeworCXNvY2tQYXRoIDo9ICIuZ2l0LWNyZWRlbnRpYWwtY2FjaGUiCisJaWYgaG9tZSA6PSBvcy5HZXRlbnYoIkhPTUUiKTsgaG9tZSAhPSAiIiB7CisJCXJldHVybiBmaWxlcGF0aC5Kb2luKGhvbWUsIHNvY2tQYXRoKQorCX0KKwlsb2cuUHJpbnRmKCJzb2NrZXQ6IGNhbm5vdCBmaW5kIEhPTUUgcGF0aC4gdXNpbmcgcmVsYXRpdmUgZGlyZWN0b3J5ICVxIGZvciBzb2NrZXQiLCBzb2NrUGF0aCkKKwlyZXR1cm4gc29ja1BhdGgKK30KKworLy8gRGVmYXVsdFNvY2tldCBpcyBhIFNvY2tldCBpbiB0aGUgJEhPTUUvLmdpdC1jcmVkZW50aWFsLWNhY2hlIGRpcmVjdG9yeS4KK3ZhciBEZWZhdWx0U29ja2V0ID0gU29ja2V0e0RpcjogZGVmYXVsdERpcigpfQorCisvLyBMaXN0ZW4gYW5ub3VuY2VzIHRoZSBsb2NhbCBuZXR3b3JrIGFkZHJlc3Mgb2YgdGhlIHVuaXggc29ja2V0LiBUaGUKKy8vIHBlcm1pc3Npb25zIG9uIHRoZSBzb2NrZXQgZGlyZWN0b3J5IGFyZSB2ZXJpZmllZCBiZWZvcmUgYXR0ZW1wdGluZworLy8gdGhlIGFjdHVhbCBsaXN0ZW4uCitmdW5jIChzIFNvY2tldCkgTGlzdGVuKCkgKG5ldC5MaXN0ZW5lciwgZXJyb3IpIHsKKwluZXR3b3JrLCBhZGRyIDo9ICJ1bml4Iiwgcy5QYXRoKCkKKwlpZiBlcnIgOj0gcy5ta2RpcigpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIG5pbCwgJm5ldC5PcEVycm9ye09wOiAibGlzdGVuIiwgTmV0OiBuZXR3b3JrLCBBZGRyOiAmbmV0LlVuaXhBZGRye05hbWU6IGFkZHIsIE5ldDogbmV0d29ya30sIEVycjogZXJyfQorCX0KKwlyZXR1cm4gbmV0Lkxpc3RlbihuZXR3b3JrLCBhZGRyKQorfQorCisvLyBEaWFsIGNvbm5lY3RzIHRvIHRoZSB1bml4IHNvY2tldC4gVGhlIHBlcm1pc3Npb25zIG9uIHRoZSBzb2NrZXQgZGlyZWN0b3J5CisvLyBhcmUgdmVyaWZpZWQgYmVmb3JlIGF0dGVtcHRpbmcgdGhlIGFjdHVhbCBkaWFsLgorZnVuYyAocyBTb2NrZXQpIERpYWwoKSAobmV0LkNvbm4sIGVycm9yKSB7CisJbmV0d29yaywgYWRkciA6PSAidW5peCIsIHMuUGF0aCgpCisJaWYgZXJyIDo9IHMuY2hlY2tQZXJtaXNzaW9ucygpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIG5pbCwgJm5ldC5PcEVycm9ye09wOiAiZGlhbCIsIE5ldDogbmV0d29yaywgQWRkcjogJm5ldC5Vbml4QWRkcntOYW1lOiBhZGRyLCBOZXQ6IG5ldHdvcmt9LCBFcnI6IGVycn0KKwl9CisJcmV0dXJuIG5ldC5EaWFsKG5ldHdvcmssIGFkZHIpCit9CisKKy8vIFBhdGggcmV0dXJucyB0aGUgZnVsbHkgc3BlY2lmaWVkIGZpbGUgbmFtZSBvZiB0aGUgdW5peCBzb2NrZXQuCitmdW5jIChzIFNvY2tldCkgUGF0aCgpIHN0cmluZyB7CisJcmV0dXJuIGZpbGVwYXRoLkpvaW4ocy5EaXIsICJwZXJzaXN0ZW50LWh0dHBzLXByb3h5LXNvY2tldCIpCit9CisKK2Z1bmMgKHMgU29ja2V0KSBta2RpcigpIGVycm9yIHsKKwlpZiBlcnIgOj0gcy5jaGVja1Blcm1pc3Npb25zKCk7IGVyciA9PSBuaWwgeworCQlyZXR1cm4gbmlsCisJfSBlbHNlIGlmICFvcy5Jc05vdEV4aXN0KGVycikgeworCQlyZXR1cm4gZXJyCisJfQorCWlmIGVyciA6PSBvcy5Na2RpckFsbChzLkRpciwgMDcwMCk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCXJldHVybiBzLmNoZWNrUGVybWlzc2lvbnMoKQorfQorCitmdW5jIChzIFNvY2tldCkgY2hlY2tQZXJtaXNzaW9ucygpIGVycm9yIHsKKwlmaSwgZXJyIDo9IG9zLlN0YXQocy5EaXIpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJaWYgIWZpLklzRGlyKCkgeworCQlyZXR1cm4gZm10LkVycm9yZigic29ja2V0OiBnb3QgZmlsZSwgd2FudCBkaXJlY3RvcnkgZm9yICVxIiwgcy5EaXIpCisJfQorCWlmIGZpLk1vZGUoKS5QZXJtKCkgIT0gMDcwMCB7CisJCXJldHVybiBmbXQuRXJyb3JmKCJzb2NrZXQ6IGdvdCBwZXJtICVvLCB3YW50IDcwMCBmb3IgJXEiLCBmaS5Nb2RlKCkuUGVybSgpLCBzLkRpcikKKwl9CisJaWYgc3QgOj0gZmkuU3lzKCkuKCpzeXNjYWxsLlN0YXRfdCk7IGludChzdC5VaWQpICE9IG9zLkdldHVpZCgpIHsKKwkJcmV0dXJuIGZtdC5FcnJvcmYoInNvY2tldDogZ290IHVpZCAlZCwgd2FudCAlZCBmb3IgJXEiLCBzdC5VaWQsIG9zLkdldHVpZCgpLCBzLkRpcikKKwl9CisJcmV0dXJuIG5pbAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9yZW1vdGUtaGVscGVycy9SRUFETUUgYi9jb250cmliL3JlbW90ZS1oZWxwZXJzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzcyMzMyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9yZW1vdGUtaGVscGVycy9SRUFETUUKQEAgLTAsMCArMSwxNSBAQAorVGhlIHJlbW90ZS1oZWxwZXIgYnJpZGdlcyB0byBhY2Nlc3MgZGF0YSBzdG9yZWQgaW4gTWVyY3VyaWFsIGFuZAorQmF6YWFyIGFyZSBtYWludGFpbmVkIG91dHNpZGUgdGhlIGdpdC5naXQgdHJlZSBpbiB0aGUgcmVwb3NpdG9yaWVzCitvZiB0aGVpciBwcmltYXJ5IGF1dGhvcjoKKworICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9mZWxpcGVjL2dpdC1yZW1vdGUtaGcgKGZvciBNZXJjdXJpYWwpCisgICAgaHR0cHM6Ly9naXRodWIuY29tL2ZlbGlwZWMvZ2l0LXJlbW90ZS1ienIgKGZvciBCYXphYXIpCisKK1lvdSBjYW4gcGljayBhIGRpcmVjdG9yeSBvbiB5b3VyICRQQVRIIGFuZCBkb3dubG9hZCB0aGVtIGZyb20gdGhlc2UKK3JlcG9zaXRvcmllcywgZS5nLjoKKworICAkIHdnZXQgLU8gJEhPTUUvYmluL2dpdC1yZW1vdGUtaGcgXAorICAgIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZmVsaXBlYy9naXQtcmVtb3RlLWhnL21hc3Rlci9naXQtcmVtb3RlLWhnCisgICQgd2dldCAtTyAkSE9NRS9iaW4vZ2l0LXJlbW90ZS1ienIgXAorICAgIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZmVsaXBlYy9naXQtcmVtb3RlLWJ6ci9tYXN0ZXIvZ2l0LXJlbW90ZS1ienIKKyAgJCBjaG1vZCAreCAkSE9NRS9iaW4vZ2l0LXJlbW90ZS1oZyAkSE9NRS9iaW4vZ2l0LXJlbW90ZS1ienIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvZ2l0LXJlbW90ZS1ienIgYi9jb250cmliL3JlbW90ZS1oZWxwZXJzL2dpdC1yZW1vdGUtYnpyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFjM2Q4N2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3JlbW90ZS1oZWxwZXJzL2dpdC1yZW1vdGUtYnpyCkBAIC0wLDAgKzEsMTEgQEAKKyMhL2Jpbi9zaAorCitjYXQgPiYyIDw8J0VPVCcKK1dBUk5JTkc6IGdpdC1yZW1vdGUtYnpyIGlzIG5vdyBtYWludGFpbmVkIGluZGVwZW5kZW50bHkuCitXQVJOSU5HOiBGb3IgbW9yZSBpbmZvcm1hdGlvbiB2aXNpdCBodHRwczovL2dpdGh1Yi5jb20vZmVsaXBlYy9naXQtcmVtb3RlLWJ6cgorV0FSTklORzoKK1dBUk5JTkc6IFlvdSBjYW4gcGljayBhIGRpcmVjdG9yeSBvbiB5b3VyICRQQVRIIGFuZCBkb3dubG9hZCBpdCwgZS5nLjoKK1dBUk5JTkc6ICAgJCB3Z2V0IC1PICRIT01FL2Jpbi9naXQtcmVtb3RlLWJ6ciBcCitXQVJOSU5HOiAgICAgaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mZWxpcGVjL2dpdC1yZW1vdGUtYnpyL21hc3Rlci9naXQtcmVtb3RlLWJ6cgorV0FSTklORzogICAkIGNobW9kICt4ICRIT01FL2Jpbi9naXQtcmVtb3RlLWJ6cgorRU9UCmRpZmYgLS1naXQgYS9jb250cmliL3JlbW90ZS1oZWxwZXJzL2dpdC1yZW1vdGUtaGcgYi9jb250cmliL3JlbW90ZS1oZWxwZXJzL2dpdC1yZW1vdGUtaGcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGU5MTg4MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvZ2l0LXJlbW90ZS1oZwpAQCAtMCwwICsxLDExIEBACisjIS9iaW4vc2gKKworY2F0ID4mMiA8PCdFT1QnCitXQVJOSU5HOiBnaXQtcmVtb3RlLWhnIGlzIG5vdyBtYWludGFpbmVkIGluZGVwZW5kZW50bHkuCitXQVJOSU5HOiBGb3IgbW9yZSBpbmZvcm1hdGlvbiB2aXNpdCBodHRwczovL2dpdGh1Yi5jb20vZmVsaXBlYy9naXQtcmVtb3RlLWhnCitXQVJOSU5HOgorV0FSTklORzogWW91IGNhbiBwaWNrIGEgZGlyZWN0b3J5IG9uIHlvdXIgJFBBVEggYW5kIGRvd25sb2FkIGl0LCBlLmcuOgorV0FSTklORzogICAkIHdnZXQgLU8gJEhPTUUvYmluL2dpdC1yZW1vdGUtaGcgXAorV0FSTklORzogICAgIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZmVsaXBlYy9naXQtcmVtb3RlLWhnL21hc3Rlci9naXQtcmVtb3RlLWhnCitXQVJOSU5HOiAgICQgY2htb2QgK3ggJEhPTUUvYmluL2dpdC1yZW1vdGUtaGcKK0VPVApkaWZmIC0tZ2l0IGEvY29udHJpYi9yZW1vdGVzMmNvbmZpZy5zaCBiL2NvbnRyaWIvcmVtb3RlczJjb25maWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWNkYTE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcmVtb3RlczJjb25maWcuc2gKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisKKyMgVXNlIHRoaXMgdG9vbCB0byByZXdyaXRlIHlvdXIgLmdpdC9yZW1vdGVzLyBmaWxlcyBpbnRvIHRoZSBjb25maWcuCisKKy4gZ2l0LXNoLXNldHVwCisKK2lmIFsgLWQgIiRHSVRfRElSIi9yZW1vdGVzIF07IHRoZW4KKwllY2hvICJSZXdyaXRpbmcgJEdJVF9ESVIvcmVtb3RlcyIgPiYyCisJZXJyb3I9MAorCSMgcmV3cml0ZSBpbnRvIGNvbmZpZworCXsKKwkJY2QgIiRHSVRfRElSIi9yZW1vdGVzCisJCWxzIHwgd2hpbGUgcmVhZCBmOyBkbworCQkJbmFtZT0kKHByaW50ZiAiJGYiIHwgdHIgLWMgIkEtWmEtejAtOS0iICIuIikKKwkJCXNlZCAtbiBcCisJCQktZSAicy9eVVJMOlsgCV0qXCguKlwpJC9yZW1vdGUuJG5hbWUudXJsIFwxIC4vcCIgXAorCQkJLWUgInMvXlB1bGw6WyAJXSpcKC4qXCkkL3JlbW90ZS4kbmFtZS5mZXRjaCBcMSBeJCAvcCIgXAorCQkJLWUgInMvXlB1c2g6WyAJXSpcKC4qXCkkL3JlbW90ZS4kbmFtZS5wdXNoIFwxIF4kIC9wIiBcCisJCQk8ICIkZiIKKwkJZG9uZQorCQllY2hvIGRvbmUKKwl9IHwgd2hpbGUgcmVhZCBrZXkgdmFsdWUgcmVnZXg7IGRvCisJCWNhc2UgJGtleSBpbgorCQlkb25lKQorCQkJaWYgWyAkZXJyb3IgPSAwIF07IHRoZW4KKwkJCQltdiAiJEdJVF9ESVIiL3JlbW90ZXMgIiRHSVRfRElSIi9yZW1vdGVzLm9sZAorCQkJZmkgOzsKKwkJKikKKwkJCWVjaG8gImdpdCBjb25maWcgJGtleSAiJHZhbHVlIiAkcmVnZXgiCisJCQlnaXQgY29uZmlnICRrZXkgIiR2YWx1ZSIgJHJlZ2V4IHx8IGVycm9yPTEgOzsKKwkJZXNhYworCWRvbmUKK2ZpCmRpZmYgLS1naXQgYS9jb250cmliL3JlcmVyZS10cmFpbi5zaCBiL2NvbnRyaWIvcmVyZXJlLXRyYWluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVlZWU0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3JlcmVyZS10cmFpbi5zaApAQCAtMCwwICsxLDEwMiBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAwOCwgTmFuYWtvIFNoaXJhaXNoaQorIyBQcmltZSByZXJlcmUgZGF0YWJhc2UgZnJvbSBleGlzdGluZyBtZXJnZSBjb21taXRzCisKK21lPXJlcmVyZS10cmFpbgorVVNBR0U9JChjYXQgPDwtRU9GCit1c2FnZTogJG1lIFstLW92ZXJ3cml0ZV0gPHJldi1saXN0LWFyZ3M+CisKKyAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGUgaGVscAorICAgIC1vLCAtLW92ZXJ3cml0ZSAgICAgICBvdmVyd3JpdGUgYW55IGV4aXN0aW5nIHJlcmVyZSBjYWNoZQorRU9GCispCisKK1NVQkRJUkVDVE9SWV9PSz1ZZXMKKworb3ZlcndyaXRlPTAKKword2hpbGUgdGVzdCAkIyAtZ3QgMAorZG8KKwlvcHQ9IiQxIgorCWNhc2UgIiRvcHQiIGluCisJLWh8LS1oZWxwKQorCQllY2hvICIkVVNBR0UiCisJCWV4aXQgMAorCQk7OworCS1vfC0tb3ZlcndyaXRlKQorCQlvdmVyd3JpdGU9MQorCQlzaGlmdAorCQlicmVhaworCQk7OworCS0tKQorCQlzaGlmdAorCQlicmVhaworCQk7OworCSopCisJCWJyZWFrCisJCTs7CisJZXNhYworZG9uZQorCisjIE92ZXJ3cml0ZSBvciBoZWxwIG9wdGlvbnMgYXJlIG5vdCB2YWxpZCBleGNlcHQgYXMgZmlyc3QgYXJnCitmb3Igb3B0IGluICIkQCIKK2RvCisJY2FzZSAiJG9wdCIgaW4KKwktaHwtLWhlbHApCisJCWVjaG8gIiRVU0FHRSIKKwkJZXhpdCAwCisJCTs7CisJLW98LS1vdmVyd3JpdGUpCisJCWVjaG8gIiRVU0FHRSIKKwkJZXhpdCAwCisJCTs7CisJZXNhYworZG9uZQorCisuICIkKGdpdCAtLWV4ZWMtcGF0aCkvZ2l0LXNoLXNldHVwIgorcmVxdWlyZV93b3JrX3RyZWUKK2NkX3RvX3RvcGxldmVsCisKKyMgUmVtZW1iZXIgb3JpZ2luYWwgYnJhbmNoCiticmFuY2g9JChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIHx8CitvcmlnaW5hbF9IRUFEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSB8fCB7CisJZWNobyA+JjIgIk5vdCBvbiBhbnkgYnJhbmNoIGFuZCBubyBjb21taXQgeWV0PyIKKwlleGl0IDEKK30KKworbWtkaXIgLXAgIiRHSVRfRElSL3JyLWNhY2hlIiB8fCBleGl0CisKK2dpdCByZXYtbGlzdCAtLXBhcmVudHMgIiRAIiB8Cit3aGlsZSByZWFkIGNvbW1pdCBwYXJlbnQxIG90aGVyX3BhcmVudHMKK2RvCisJaWYgdGVzdCAteiAiJG90aGVyX3BhcmVudHMiCisJdGhlbgorCQkjIFNraXAgbm9uLW1lcmdlcworCQljb250aW51ZQorCWZpCisJZ2l0IGNoZWNrb3V0IC1xICIkcGFyZW50MV4wIgorCWlmIGdpdCBtZXJnZSAkb3RoZXJfcGFyZW50cyA+L2Rldi9udWxsIDI+JjEKKwl0aGVuCisJCSMgQ2xlYW5seSBtZXJnZXMKKwkJY29udGludWUKKwlmaQorCWlmIHRlc3QgJG92ZXJ3cml0ZSA9IDEKKwl0aGVuCisJCWdpdCByZXJlcmUgZm9yZ2V0IC4KKwlmaQorCWlmIHRlc3QgLXMgIiRHSVRfRElSL01FUkdFX1JSIgorCXRoZW4KKwkJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiJMZWFybmluZyBmcm9tICVoICVzIiAiJGNvbW1pdCIKKwkJZ2l0IHJlcmVyZQorCQlnaXQgY2hlY2tvdXQgLXEgJGNvbW1pdCAtLSAuCisJCWdpdCByZXJlcmUKKwlmaQorCWdpdCByZXNldCAtcSAtLWhhcmQKK2RvbmUKKworaWYgdGVzdCAteiAiJGJyYW5jaCIKK3RoZW4KKwlnaXQgY2hlY2tvdXQgIiRvcmlnaW5hbF9IRUFEIgorZWxzZQorCWdpdCBjaGVja291dCAiJHticmFuY2gjcmVmcy9oZWFkcy99IgorZmkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3RhdHMvZ2l0LWNvbW1vbi1oYXNoIGIvY29udHJpYi9zdGF0cy9naXQtY29tbW9uLWhhc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTI3ZmQwOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3RhdHMvZ2l0LWNvbW1vbi1oYXNoCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorCisjIFRoaXMgc2NyaXB0IGRpc3BsYXlzIHRoZSBkaXN0cmlidXRpb24gb2YgbG9uZ2VzdCBjb21tb24gaGFzaCBwcmVmaXhlcy4KKyMgVGhpcyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG1pbmltdW0gcHJlZml4IGxlbmd0aCB0byB1c2UKKyMgZm9yIG9iamVjdCBuYW1lcyB0byBiZSB1bmlxdWUuCisKK2dpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1hbGwgfCBzb3J0IHwgcGVybCAtbG5lICcKKyAgc3Vic3RyKCRfLCA0MCkgPSAiIjsKKyAgIyB1bmNvbW1lbnQgbmV4dCBsaW5lIGZvciBhIGRpc3RyaWJ1dGlvbiBvZiBiaXRzIGluc3RlYWQgb2YgaGV4IGNoYXJzCisgICMgJF8gPSB1bnBhY2soIkIqIixwYWNrKCJIKiIsJF8pKTsKKyAgaWYgKGRlZmluZWQgJHApIHsKKyAgICAoJHAgXiAkXykgPX4gL14oXDAqKS87CisgICAgJGNvbW1vbiA9IGxlbmd0aCAkMTsKKyAgICBpZiAoZGVmaW5lZCAkcGNvbW1vbikgeworICAgICAgJGNvdW50WyRwY29tbW9uID4gJGNvbW1vbiA/ICRwY29tbW9uIDogJGNvbW1vbl0rKzsKKyAgICB9IGVsc2UgeworICAgICAgJGNvdW50WyRjb21tb25dKys7ICMgZmlyc3QgaXRlbQorICAgIH0KKyAgfQorICAkcCA9ICRfOworICAkcGNvbW1vbiA9ICRjb21tb247CisgIEVORCB7CisgICAgJGNvdW50WyRjb21tb25dKys7ICMgbGFzdCBpdGVtCisgICAgcHJpbnQgIiRfOiAkY291bnRbJF9dIiBmb3IgMC4uJCNjb3VudDsKKyAgfQorJwpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdGF0cy9tYWlsbWFwLnBsIGIvY29udHJpYi9zdGF0cy9tYWlsbWFwLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk1MTNmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N0YXRzL21haWxtYXAucGwKQEAgLTAsMCArMSw3MCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSB3YXJuaW5ncyAnYWxsJzsKK3VzZSBzdHJpY3Q7Cit1c2UgR2V0b3B0OjpMb25nOworCitteSAkbWF0Y2hfZW1haWxzOworbXkgJG1hdGNoX25hbWVzOworbXkgJG9yZGVyX2J5ID0gJ2NvdW50JzsKK0dldG9wdDo6TG9uZzo6Q29uZmlndXJlKHF3KGJ1bmRsaW5nKSk7CitHZXRPcHRpb25zKAorCSdlbWFpbHN8ZSEnID0+IFwkbWF0Y2hfZW1haWxzLAorCSduYW1lc3xuIScgID0+IFwkbWF0Y2hfbmFtZXMsCisJJ2NvdW50fGMnICAgPT4gc3ViIHsgJG9yZGVyX2J5ID0gJ2NvdW50JyB9LAorCSd0aW1lfHQnICAgID0+IHN1YiB7ICRvcmRlcl9ieSA9ICdzdGFtcCcgfSwKKykgb3IgZXhpdCAxOworJG1hdGNoX2VtYWlscyA9IDEgdW5sZXNzICRtYXRjaF9uYW1lczsKKworbXkgJGVtYWlsID0ge307CitteSAkbmFtZSA9IHt9OworCitvcGVuKG15ICRmaCwgJy18JywgImdpdCBsb2cgLS1mb3JtYXQ9JyVhdCA8JWFFPiAlYU4nIik7Cit3aGlsZSg8JGZoPikgeworCW15ICgkdCwgJGUsICRuKSA9IC8oXFMrKSA8KFxTKyk+ICguKikvOworCW1hcmsoJGVtYWlsLCAkZSwgJG4sICR0KTsKKwltYXJrKCRuYW1lLCAkbiwgJGUsICR0KTsKK30KK2Nsb3NlKCRmaCk7CisKK2lmICgkbWF0Y2hfZW1haWxzKSB7CisJZm9yZWFjaCBteSAkZSAoZHVwcygkZW1haWwpKSB7CisJCWZvcmVhY2ggbXkgJG4gKHZhbHMoJGVtYWlsLT57JGV9KSkgeworCQkJc2hvdygkbiwgJGUsICRlbWFpbC0+eyRlfS0+eyRufSk7CisJCX0KKwkJcHJpbnQgIlxuIjsKKwl9Cit9CitpZiAoJG1hdGNoX25hbWVzKSB7CisJZm9yZWFjaCBteSAkbiAoZHVwcygkbmFtZSkpIHsKKwkJZm9yZWFjaCBteSAkZSAodmFscygkbmFtZS0+eyRufSkpIHsKKwkJCXNob3coJG4sICRlLCAkbmFtZS0+eyRufS0+eyRlfSk7CisJCX0KKwkJcHJpbnQgIlxuIjsKKwl9Cit9CitleGl0IDA7CisKK3N1YiBtYXJrIHsKKwlteSAoJGgsICRrLCAkdiwgJHQpID0gQF87CisJbXkgJGUgPSAkaC0+eyRrfS0+eyR2fSB8fD0geyBjb3VudCA9PiAwLCBzdGFtcCA9PiAwIH07CisJJGUtPntjb3VudH0rKzsKKwkkZS0+e3N0YW1wfSA9ICR0IHVubGVzcyAkdCA8ICRlLT57c3RhbXB9OworfQorCitzdWIgZHVwcyB7CisJbXkgJGggPSBzaGlmdDsKKwlyZXR1cm4gZ3JlcCB7IGtleXMoJGgtPnskX30pID4gMSB9IGtleXMoJGgpOworfQorCitzdWIgdmFscyB7CisJbXkgJGggPSBzaGlmdDsKKwlyZXR1cm4gc29ydCB7CisJCSRoLT57JGJ9LT57JG9yZGVyX2J5fSA8PT4gJGgtPnskYX0tPnskb3JkZXJfYnl9CisJfSBrZXlzKCRoKTsKK30KKworc3ViIHNob3cgeworCW15ICgkbiwgJGUsICRoKSA9IEBfOworCXByaW50ICIkbiA8JGU+ICgkaC0+eyRvcmRlcl9ieX0pXG4iOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdGF0cy9wYWNraW5mby5wbCBiL2NvbnRyaWIvc3RhdHMvcGFja2luZm8ucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmUxODhjMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3RhdHMvcGFja2luZm8ucGwKQEAgLTAsMCArMSwyMTIgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBUaGlzIHRvb2wgd2lsbCBwcmludCB2YWd1ZWx5IHByZXR0eSBpbmZvcm1hdGlvbiBhYm91dCBhIHBhY2suICBJdAorIyBleHBlY3RzIHRoZSBvdXRwdXQgb2YgImdpdCB2ZXJpZnktcGFjayAtdiIgYXMgaW5wdXQgb24gc3RkaW4uCisjCisjICQgZ2l0IHZlcmlmeS1wYWNrIC12IHwgcGFja2luZm8ucGwKKyMKKyMgVGhpcyBwcmludHMgc29tZSBmdWxsLXBhY2sgc3RhdGlzdGljczsgY3VycmVudGx5ICJhbGwgc2l6ZXMiLCAiYWxsCisjIHBhdGggc2l6ZXMiLCAidHJlZSBzaXplcyIsICJ0cmVlIHBhdGggc2l6ZXMiLCBhbmQgImRlcHRocyIuCisjCisjICogImFsbCBzaXplcyIgc3RhdHMgYXJlIGFjcm9zcyBldmVyeSBvYmplY3Qgc2l6ZSBpbiB0aGUgZmlsZTsKKyMgICBmdWxsIHNpemVzIGZvciBiYXNlIG9iamVjdHMsIGFuZCBkZWx0YSBzaXplIGZvciBkZWx0YXMuCisjICogImFsbCBwYXRoIHNpemVzIiBzdGF0cyBhcmUgYWNyb3NzIGFsbCBvYmplY3QncyAicGF0aCBzaXplcyIuCisjICAgQSBwYXRoIHNpemUgaXMgdGhlIHN1bSBvZiB0aGUgc2l6ZSBvZiB0aGUgZGVsdGEgY2hhaW4sIGluY2x1ZGluZyB0aGUKKyMgICBiYXNlIG9iamVjdC4gIEluIG90aGVyIHdvcmRzLCBpdCdzIGhvdyBtYW55IGJ5dGVzIG5lZWQgYmUgcmVhZCB0bworIyAgIHJlYXNzZW1ibGUgdGhlIGZpbGUgZnJvbSBkZWx0YXMuCisjICogInRyZWUgc2l6ZXMiIGFyZSBvYmplY3Qgc2l6ZXMgZ3JvdXBlZCBpbnRvIGRlbHRhIHRyZWVzLgorIyAqICJ0cmVlIHBhdGggc2l6ZXMiIGFyZSBwYXRoIHNpemVzIGdyb3VwZWQgaW50byBkZWx0YSB0cmVlcy4KKyMgKiAiZGVwdGhzIiBzaG91bGQgYmUgb2J2aW91cy4KKyMKKyMgV2hlbiBydW4gYXM6CisjCisjICQgZ2l0IHZlcmlmeS1wYWNrIC12IHwgcGFja2luZm8ucGwgLXRyZWUKKyMKKyMgdGhlIHRyZWVzIG9mIG9iamVjdHMgYXJlIG91dHB1dCBhbG9uZyB3aXRoIHRoZSBzdGF0cy4gIFRoaXMgbG9va3MKKyMgbGlrZToKKyMKKyMgICAwIGNvbW1pdCAwMzEzMjFjNi4uLiAgICAgIDgwMyAgICAgIDgwMworIworIyAgIDAgICBibG9iIDAzMTU2ZjIxLi4uICAgICAxNzY3ICAgICAxNzY3CisjICAgMSAgICBibG9iIGY1MmE5ZDdmLi4uICAgICAgIDEwICAgICAxNzc3CisjICAgMiAgICAgYmxvYiBhOGNjNTczOS4uLiAgICAgICA1MSAgICAgMTgyOAorIyAgIDMgICAgICBibG9iIDY2MGU5MGIxLi4uICAgICAgIDE1ICAgICAxODQzCisjICAgNCAgICAgICBibG9iIDBjYjhlM2JiLi4uICAgICAgIDMzICAgICAxODc2CisjICAgMiAgICAgYmxvYiBlNDg2MDdmMC4uLiAgICAgIDMxMSAgICAgMjA4OAorIyAgICAgIHNpemU6IGNvdW50IDYgdG90YWwgMjE4NyBtaW4gMTAgbWF4IDE3NjcgbWVhbiAzNjQuNTAgbWVkaWFuIDUxIHN0ZF9kZXYgNjM1Ljg1CisjIHBhdGggc2l6ZTogY291bnQgNiB0b3RhbCAxMTE3OSBtaW4gMTc2NyBtYXggMjA4OCBtZWFuIDE4NjMuMTcgbWVkaWFuIDE4NDMgc3RkX2RldiAxMDcuMjYKKyMKKyMgVGhlIGZpcnN0IG51bWJlciBhZnRlciB0aGUgc2hhMSBpcyB0aGUgb2JqZWN0IHNpemUsIHRoZSBzZWNvbmQKKyMgbnVtYmVyIGlzIHRoZSBwYXRoIHNpemUuICBUaGUgc3RhdGlzdGljcyBhcmUgYWNyb3NzIGFsbCBvYmplY3RzIGluCisjIHRoZSBwcmV2aW91cyBkZWx0YSB0cmVlLiAgT2J2aW91c2x5IHRoZXkgYXJlIG9taXR0ZWQgZm9yIHRyZWVzIG9mCisjIG9uZSBvYmplY3QuCisjCisjIFdoZW4gcnVuIGFzOgorIworIyAkIGdpdCB2ZXJpZnktcGFjayAtdiB8IHBhY2tpbmZvLnBsIC10cmVlIC1maWxlbmFtZXMKKyMKKyMgaXQgYWRkcyBmaWxlbmFtZXMgdG8gdGhlIHRyZWUuICBHZXR0aW5nIHRoaXMgaW5mb3JtYXRpb24gaXMgc2xvdzoKKyMKKyMgICAwICAgYmxvYiAwMzE1NmYyMS4uLiAgICAgMTc2NyAgICAgMTc2NyBEb2N1bWVudGF0aW9uL2dpdC1sb3N0LWZvdW5kLnR4dCBAIHRhZ3MvdjEuMi4wfjE0MgorIyAgIDEgICAgYmxvYiBmNTJhOWQ3Zi4uLiAgICAgICAxMCAgICAgMTc3NyBEb2N1bWVudGF0aW9uL2dpdC1sb3N0LWZvdW5kLnR4dCBAIHRhZ3MvdjEuNS4wLXJjMX43NAorIyAgIDIgICAgIGJsb2IgYThjYzU3MzkuLi4gICAgICAgNTEgICAgIDE4MjggRG9jdW1lbnRhdGlvbi9naXQtbG9zdCtmb3VuZC50eHQgQCB0YWdzL3YwLjk5LjloXjAKKyMgICAzICAgICAgYmxvYiA2NjBlOTBiMS4uLiAgICAgICAxNSAgICAgMTg0MyBEb2N1bWVudGF0aW9uL2dpdC1sb3N0K2ZvdW5kLnR4dCBAIG1hc3Rlcn4zMjIyXjJ+MgorIyAgIDQgICAgICAgYmxvYiAwY2I4ZTNiYi4uLiAgICAgICAzMyAgICAgMTg3NiBEb2N1bWVudGF0aW9uL2dpdC1sb3N0K2ZvdW5kLnR4dCBAIG1hc3Rlcn4zMjIyXjJ+MworIyAgIDIgICAgIGJsb2IgZTQ4NjA3ZjAuLi4gICAgICAzMTEgICAgIDIwODggRG9jdW1lbnRhdGlvbi9naXQtbG9zdC1mb3VuZC50eHQgQCB0YWdzL3YxLjUuMi1yYzN+NAorIyAgICAgIHNpemU6IGNvdW50IDYgdG90YWwgMjE4NyBtaW4gMTAgbWF4IDE3NjcgbWVhbiAzNjQuNTAgbWVkaWFuIDUxIHN0ZF9kZXYgNjM1Ljg1CisjIHBhdGggc2l6ZTogY291bnQgNiB0b3RhbCAxMTE3OSBtaW4gMTc2NyBtYXggMjA4OCBtZWFuIDE4NjMuMTcgbWVkaWFuIDE4NDMgc3RkX2RldiAxMDcuMjYKKyMKKyMgV2hlbiBydW4gYXM6CisjCisjICQgZ2l0IHZlcmlmeS1wYWNrIC12IHwgcGFja2luZm8ucGwgLWR1bXAKKyMKKyMgaXQgcHJpbnRzIG91dCAic2hhMSBzaXplIHBhdGhzaXplIGRlcHRoIiBmb3IgZWFjaCBzaGExIGluIGxleGljYWwKKyMgb3JkZXIuCisjCisjIDAwMDA3OWEyZWFlZjE3YjdlYWU3MGUxZjBmNjM1NTU3ZWE2N2I2NDQgMzAgNDcyIDcKKyMgMDAwMTNjYWZlNjk4MDQxMWFhNmZkZDk0MDc4NDkxN2I1ZmY1MGYwYSA0NCAxNTQyIDQKKyMgMDAwMTgyZWFjZjk5Y2RlMjdkNTkxNmFhNDE1OTIxOTI0YjgyOTcyYyA0OTkgNDk5IDAKKyMgLi4uCisjCisjIFRoaXMgaXMgaGFuZHkgZm9yIGNvbXBhcmluZyB0d28gcGFja3MuICBBZGRpbmcgIi1maWxlbmFtZXMiIHdpbGwgYWRkCisjIGZpbGVuYW1lcywgYXMgcGVyICItdHJlZSAtZmlsZW5hbWVzIiBhYm92ZS4KKwordXNlIHN0cmljdDsKK3VzZSBHZXRvcHQ6Okxvbmc7CisKK215ICRmaWxlbmFtZXMgPSAwOworbXkgJHRyZWUgPSAwOworbXkgJGR1bXAgPSAwOworR2V0T3B0aW9ucygidHJlZSIgPT4gXCR0cmVlLAorICAgICAgICAgICAiZmlsZW5hbWVzIiA9PiBcJGZpbGVuYW1lcywKKyAgICAgICAgICAgImR1bXAiID0+IFwkZHVtcCk7CisKK215ICVwYXJlbnRzOworbXkgJWNoaWxkcmVuOworbXkgJXNpemVzOworbXkgQHJvb3RzOworbXkgJXBhdGhzOworbXkgJXR5cGVzOworbXkgQGNvbW1pdHM7CitteSAlbmFtZXM7CitteSAlZGVwdGhzOworbXkgQGRlcHRoczsKKword2hpbGUgKDxTVERJTj4pIHsKKyAgICBteSAoJHNoYTEsICR0eXBlLCAkc2l6ZSwgJHNwYWNlLCAkb2Zmc2V0LCAkZGVwdGgsICRwYXJlbnQpID0gc3BsaXQoL1xzKy8sICRfKTsKKyAgICBuZXh0IHVubGVzcyAoJHNoYTEgPX4gL15bMC05YS1mXXs0MH0kLyk7CisgICAgJGRlcHRoc3skc2hhMX0gPSAkZGVwdGggfHwgMDsKKyAgICBwdXNoKEBkZXB0aHMsICRkZXB0aCB8fCAwKTsKKyAgICBwdXNoKEBjb21taXRzLCAkc2hhMSkgaWYgKCR0eXBlIGVxICdjb21taXQnKTsKKyAgICBwdXNoKEByb290cywgJHNoYTEpIHVubGVzcyAkcGFyZW50OworICAgICRwYXJlbnRzeyRzaGExfSA9ICRwYXJlbnQ7CisgICAgJHR5cGVzeyRzaGExfSA9ICR0eXBlOworICAgIHB1c2goQHskY2hpbGRyZW57JHBhcmVudH19LCAkc2hhMSk7CisgICAgJHNpemVzeyRzaGExfSA9ICRzaXplOworfQorCitpZiAoJGZpbGVuYW1lcyAmJiAoJHRyZWUgfHwgJGR1bXApKSB7CisgICAgb3BlbihOQU1FUywgImdpdCBuYW1lLXJldiAtLWFsbHwiKTsKKyAgICB3aGlsZSAoPE5BTUVTPikgeworICAgICAgICBpZiAoL14oXFMrKVxzKyguKikkLykgeworICAgICAgICAgICAgbXkgKCRzaGExLCAkbmFtZSkgPSAoJDEsICQyKTsKKyAgICAgICAgICAgICRuYW1lc3skc2hhMX0gPSAkbmFtZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjbG9zZSBOQU1FUzsKKworICAgIGZvciBteSAkY29tbWl0IChAY29tbWl0cykgeworICAgICAgICBteSAkbmFtZSA9ICRuYW1lc3skY29tbWl0fTsKKyAgICAgICAgb3BlbihUUkVFLCAiZ2l0IGxzLXRyZWUgLXQgLXIgJGNvbW1pdHwiKTsKKyAgICAgICAgcHJpbnQgU1RERVJSICJQbHVtYmluZyB0cmVlICRuYW1lXG4iOworICAgICAgICB3aGlsZSAoPFRSRUU+KSB7CisgICAgICAgICAgICBpZiAoL14oXFMrKVxzKyhcUyspXHMrKFxTKylccysoLiopJC8pIHsKKyAgICAgICAgICAgICAgICBteSAoJG1vZGUsICR0eXBlLCAkc2hhMSwgJHBhdGgpID0gKCQxLCAkMiwgJDMsICQ0KTsKKyAgICAgICAgICAgICAgICAkcGF0aHN7JHNoYTF9ID0gIiRwYXRoIEAgJG5hbWUiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNsb3NlIFRSRUU7CisgICAgfQorfQorCitzdWIgc3RhdHMgeworICAgIG15IEBkYXRhID0gc29ydCB7JGEgPD0+ICRifSBAXzsKKyAgICBteSAkbWluID0gJGRhdGFbMF07CisgICAgbXkgJG1heCA9ICRkYXRhWyQjZGF0YV07CisgICAgbXkgJHRvdGFsID0gMDsKKyAgICBteSAkY291bnQgPSBzY2FsYXIgQGRhdGE7CisgICAgZm9yIG15ICRkYXR1bSAoQGRhdGEpIHsKKyAgICAgICAgJHRvdGFsICs9ICRkYXR1bTsKKyAgICB9CisgICAgbXkgJG1lYW4gPSAkdG90YWwgLyAkY291bnQ7CisgICAgbXkgJG1lZGlhbiA9ICRkYXRhW2ludChAZGF0YSAvIDIpXTsKKyAgICBteSAkZGlmZl9zdW0gPSAwOworICAgIGZvciBteSAkZGF0dW0gKEBkYXRhKSB7CisgICAgICAgICRkaWZmX3N1bSArPSAoJGRhdHVtIC0gJG1lYW4pKioyOworICAgIH0KKyAgICBteSAkc3RkX2RldiA9IHNxcnQoJGRpZmZfc3VtIC8gJGNvdW50KTsKKyAgICByZXR1cm4gKCRjb3VudCwgJHRvdGFsLCAkbWluLCAkbWF4LCAkbWVhbiwgJG1lZGlhbiwgJHN0ZF9kZXYpOworfQorCitzdWIgcHJpbnRfc3RhdHMgeworICAgIG15ICRuYW1lID0gc2hpZnQ7CisgICAgbXkgKCRjb3VudCwgJHRvdGFsLCAkbWluLCAkbWF4LCAkbWVhbiwgJG1lZGlhbiwgJHN0ZF9kZXYpID0gc3RhdHMoQF8pOworICAgIHByaW50ZigiJXM6IGNvdW50ICVzIHRvdGFsICVzIG1pbiAlcyBtYXggJXMgbWVhbiAlLjJmIG1lZGlhbiAlcyBzdGRfZGV2ICUuMmZcbiIsCisgICAgICAgICAgICRuYW1lLCAkY291bnQsICR0b3RhbCwgJG1pbiwgJG1heCwgJG1lYW4sICRtZWRpYW4sICRzdGRfZGV2KTsKK30KKworbXkgQHNpemVzOworbXkgQHBhdGhfc2l6ZXM7CitteSBAYWxsX3NpemVzOworbXkgQGFsbF9wYXRoX3NpemVzOworbXkgJXBhdGhfc2l6ZXM7CisKK3N1YiBkaWcgeworICAgIG15ICgkc2hhMSwgJGRlcHRoLCAkcGF0aF9zaXplKSA9IEBfOworICAgICRwYXRoX3NpemUgKz0gJHNpemVzeyRzaGExfTsKKyAgICBwdXNoKEBzaXplcywgJHNpemVzeyRzaGExfSk7CisgICAgcHVzaChAYWxsX3NpemVzLCAkc2l6ZXN7JHNoYTF9KTsKKyAgICBwdXNoKEBwYXRoX3NpemVzLCAkcGF0aF9zaXplKTsKKyAgICBwdXNoKEBhbGxfcGF0aF9zaXplcywgJHBhdGhfc2l6ZSk7CisgICAgJHBhdGhfc2l6ZXN7JHNoYTF9ID0gJHBhdGhfc2l6ZTsKKyAgICBpZiAoJHRyZWUpIHsKKyAgICAgICAgcHJpbnRmKCIlM2QlcyAlNnMgJXMgJThkICU4ZCAlc1xuIiwKKyAgICAgICAgICAgICAgICRkZXB0aCwgKCIgIiB4ICRkZXB0aCksICR0eXBlc3skc2hhMX0sCisgICAgICAgICAgICAgICAkc2hhMSwgJHNpemVzeyRzaGExfSwgJHBhdGhfc2l6ZSwgJHBhdGhzeyRzaGExfSk7CisgICAgfQorICAgIGZvciBteSAkY2hpbGQgKEB7JGNoaWxkcmVueyRzaGExfX0pIHsKKyAgICAgICAgZGlnKCRjaGlsZCwgJGRlcHRoICsgMSwgJHBhdGhfc2l6ZSk7CisgICAgfQorfQorCitteSBAdHJlZV9zaXplczsKK215IEB0cmVlX3BhdGhfc2l6ZXM7CisKK2ZvciBteSAkcm9vdCAoQHJvb3RzKSB7CisgICAgdW5kZWYgQHNpemVzOworICAgIHVuZGVmIEBwYXRoX3NpemVzOworICAgIGRpZygkcm9vdCwgMCwgMCk7CisgICAgbXkgKCRhYSwgJHN6X3RvdGFsKSA9IHN0YXRzKEBzaXplcyk7CisgICAgbXkgKCRiYiwgJHBzel90b3RhbCkgPSBzdGF0cyhAcGF0aF9zaXplcyk7CisgICAgcHVzaChAdHJlZV9zaXplcywgJHN6X3RvdGFsKTsKKyAgICBwdXNoKEB0cmVlX3BhdGhfc2l6ZXMsICRwc3pfdG90YWwpOworICAgIGlmICgkdHJlZSkgeworICAgICAgICBpZiAoQHNpemVzID4gMSkgeworICAgICAgICAgICAgcHJpbnRfc3RhdHMoIiAgICAgc2l6ZSIsIEBzaXplcyk7CisgICAgICAgICAgICBwcmludF9zdGF0cygicGF0aCBzaXplIiwgQHBhdGhfc2l6ZXMpOworICAgICAgICB9CisgICAgICAgIHByaW50ICJcbiI7CisgICAgfQorfQorCitpZiAoJGR1bXApIHsKKyAgICBmb3IgbXkgJHNoYTEgKHNvcnQga2V5cyAlc2l6ZXMpIHsKKyAgICAgICAgcHJpbnQgIiRzaGExICRzaXplc3skc2hhMX0gJHBhdGhfc2l6ZXN7JHNoYTF9ICRkZXB0aHN7JHNoYTF9ICRwYXRoc3skc2hhMX1cbiI7CisgICAgfQorfSBlbHNlIHsKKyAgICBwcmludF9zdGF0cygiICAgICAgYWxsIHNpemVzIiwgQGFsbF9zaXplcyk7CisgICAgcHJpbnRfc3RhdHMoIiBhbGwgcGF0aCBzaXplcyIsIEBhbGxfcGF0aF9zaXplcyk7CisgICAgcHJpbnRfc3RhdHMoIiAgICAgdHJlZSBzaXplcyIsIEB0cmVlX3NpemVzKTsKKyAgICBwcmludF9zdGF0cygidHJlZSBwYXRoIHNpemVzIiwgQHRyZWVfcGF0aF9zaXplcyk7CisgICAgcHJpbnRfc3RhdHMoIiAgICAgICAgIGRlcHRocyIsIEBkZXB0aHMpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlLy5naXRpZ25vcmUgYi9jb250cmliL3N1YnRyZWUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjkzODFhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlLy5naXRpZ25vcmUKQEAgLTAsMCArMSw3IEBACisqfgorZ2l0LXN1YnRyZWUKK2dpdC1zdWJ0cmVlLjEKK2dpdC1zdWJ0cmVlLmh0bWwKK2dpdC1zdWJ0cmVlLnhtbAorbWFpbmxpbmUKK3N1YnByb2oKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3VidHJlZS9DT1BZSU5HIGIvY29udHJpYi9zdWJ0cmVlL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMTkwNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3VidHJlZS9DT1BZSU5HCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3VidHJlZS9JTlNUQUxMIGIvY29udHJpYi9zdWJ0cmVlL0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FiMGNmNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3VidHJlZS9JTlNUQUxMCkBAIC0wLDAgKzEsMjggQEAKK0hPVyBUTyBJTlNUQUxMIGdpdC1zdWJ0cmVlCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXJzdCwgYnVpbGQgZnJvbSB0aGUgdG9wIHNvdXJjZSBkaXJlY3RvcnkuCisKK1RoZW4sIGluIGNvbnRyaWIvc3VidHJlZSwgcnVuOgorCisgIG1ha2UKKyAgbWFrZSBpbnN0YWxsCisgIG1ha2UgaW5zdGFsbC1kb2MKKworSWYgeW91IHVzZWQgY29uZmlndXJlIHRvIGRvIHRoZSBtYWluIGJ1aWxkIHRoZSBnaXQtc3VidHJlZSBidWlsZCB3aWxsCitwaWNrIHVwIHRob3NlIHNldHRpbmdzLiAgSWYgbm90LCB5b3Ugd2lsbCBsaWtlbHkgaGF2ZSB0byBwcm92aWRlIGEKK3ZhbHVlIGZvciBwcmVmaXg6CisKKyAgbWFrZSBwcmVmaXg9PHNvbWUgZGlyPgorICBtYWtlIHByZWZpeD08c29tZSBkaXI+IGluc3RhbGwKKyAgbWFrZSBwcmVmaXg9PHNvbWUgZGlyPiBpbnN0YWxsLWRvYworCitUbyBydW4gdGVzdHMgZmlyc3QgY29weSBnaXQtc3VidHJlZSB0byB0aGUgbWFpbiBidWlsZCBhcmVhIHNvIHRoZQorbmV3bHktYnVpbHQgZ2l0IGNhbiBmaW5kIGl0OgorCisgIGNwIGdpdC1zdWJ0cmVlIC4uLy4uCisKK1RoZW46CisKKyAgbWFrZSB0ZXN0CisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3VidHJlZS9NYWtlZmlsZSBiL2NvbnRyaWIvc3VidHJlZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmE3NDk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlL01ha2VmaWxlCkBAIC0wLDAgKzEsMTAzIEBACisjIFRoZSBkZWZhdWx0IHRhcmdldCBvZiB0aGlzIE1ha2VmaWxlIGlzLi4uCithbGw6OgorCistaW5jbHVkZSAuLi8uLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uLy4uL2NvbmZpZy5tYWsKKworcHJlZml4ID89IC91c3IvbG9jYWwKK2dpdGV4ZWNkaXIgPz0gJChwcmVmaXgpL2xpYmV4ZWMvZ2l0LWNvcmUKK21hbmRpciA/PSAkKHByZWZpeCkvc2hhcmUvbWFuCittYW4xZGlyID89ICQobWFuZGlyKS9tYW4xCitodG1sZGlyID89ICQocHJlZml4KS9zaGFyZS9kb2MvZ2l0LWRvYworCisuLi8uLi9HSVQtVkVSU0lPTi1GSUxFOiBGT1JDRQorCSQoTUFLRSkgLUMgLi4vLi4vIEdJVC1WRVJTSU9OLUZJTEUKKworLWluY2x1ZGUgLi4vLi4vR0lULVZFUlNJT04tRklMRQorCisjIHRoaXMgc2hvdWxkIGJlIHNldCB0byBhICdzdGFuZGFyZCcgYnNkLXR5cGUgaW5zdGFsbCBwcm9ncmFtCitJTlNUQUxMICA/PSBpbnN0YWxsCitSTSAgICAgICA/PSBybSAtZgorCitBU0NJSURPQyAgICAgICAgID0gYXNjaWlkb2MKK0FTQ0lJRE9DX0NPTkYgICAgPSAtZiAuLi8uLi9Eb2N1bWVudGF0aW9uL2FzY2lpZG9jLmNvbmYKK0FTQ0lJRE9DX0hUTUwgICAgPSB4aHRtbDExCitBU0NJSURPQ19ET0NCT09LID0gZG9jYm9vaworQVNDSUlET0NfRVhUUkEgICA9CitYTUxUTyAgICAgICAgICAgID0geG1sdG8KK1hNTFRPX0VYVFJBICAgICAgPQorCitpZmRlZiBVU0VfQVNDSUlET0NUT1IKK0FTQ0lJRE9DICAgICAgICAgPSBhc2NpaWRvY3RvcgorQVNDSUlET0NfQ09ORiAgICA9CitBU0NJSURPQ19IVE1MICAgID0geGh0bWw1CitBU0NJSURPQ19ET0NCT09LID0gZG9jYm9vaworQVNDSUlET0NfRVhUUkEgICs9IC1JLi4vLi4vRG9jdW1lbnRhdGlvbiAtcmFzY2lpZG9jdG9yLWV4dGVuc2lvbnMKK0FTQ0lJRE9DX0VYVFJBICArPSAtYWxpdGRkPScmXCN4MmQ7JlwjeDJkOycKK1hNTFRPX0VYVFJBICAgICArPSAtLXNraXAtdmFsaWRhdGlvbgorZW5kaWYKKworaWZuZGVmIFNIRUxMX1BBVEgKKwlTSEVMTF9QQVRIID0gL2Jpbi9zaAorZW5kaWYKK1NIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEgpKQorCitNQU5QQUdFX1hTTCAgID0gLi4vLi4vRG9jdW1lbnRhdGlvbi9tYW5wYWdlLW5vcm1hbC54c2wKKworR0lUX1NVQlRSRUVfU0ggOj0gZ2l0LXN1YnRyZWUuc2gKK0dJVF9TVUJUUkVFICAgIDo9IGdpdC1zdWJ0cmVlCisKK0dJVF9TVUJUUkVFX0RPQyA6PSBnaXQtc3VidHJlZS4xCitHSVRfU1VCVFJFRV9YTUwgOj0gZ2l0LXN1YnRyZWUueG1sCitHSVRfU1VCVFJFRV9UWFQgOj0gZ2l0LXN1YnRyZWUudHh0CitHSVRfU1VCVFJFRV9IVE1MIDo9IGdpdC1zdWJ0cmVlLmh0bWwKK0dJVF9TVUJUUkVFX1RFU1QgOj0gLi4vLi4vZ2l0LXN1YnRyZWUKKworYWxsOjogJChHSVRfU1VCVFJFRSkKKworJChHSVRfU1VCVFJFRSk6ICQoR0lUX1NVQlRSRUVfU0gpCisJc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIX1NRKXwnICQ8ID4kQAorCWNobW9kICt4ICRACisKK2RvYzogJChHSVRfU1VCVFJFRV9ET0MpICQoR0lUX1NVQlRSRUVfSFRNTCkKKworbWFuOiAkKEdJVF9TVUJUUkVFX0RPQykKKworaHRtbDogJChHSVRfU1VCVFJFRV9IVE1MKQorCitpbnN0YWxsOiAkKEdJVF9TVUJUUkVFKQorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoREVTVERJUikkKGdpdGV4ZWNkaXIpCisJJChJTlNUQUxMKSAtbSA3NTUgJChHSVRfU1VCVFJFRSkgJChERVNURElSKSQoZ2l0ZXhlY2RpcikKKworaW5zdGFsbC1kb2M6IGluc3RhbGwtbWFuIGluc3RhbGwtaHRtbAorCitpbnN0YWxsLW1hbjogJChHSVRfU1VCVFJFRV9ET0MpCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQobWFuMWRpcikKKwkkKElOU1RBTEwpIC1tIDY0NCAkXiAkKERFU1RESVIpJChtYW4xZGlyKQorCitpbnN0YWxsLWh0bWw6ICQoR0lUX1NVQlRSRUVfSFRNTCkKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKERFU1RESVIpJChodG1sZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0ICReICQoREVTVERJUikkKGh0bWxkaXIpCisKKyQoR0lUX1NVQlRSRUVfRE9DKTogJChHSVRfU1VCVFJFRV9YTUwpCisJJChYTUxUTykgLW0gJChNQU5QQUdFX1hTTCkgJChYTUxUT19FWFRSQSkgbWFuICReCisKKyQoR0lUX1NVQlRSRUVfWE1MKTogJChHSVRfU1VCVFJFRV9UWFQpCisJJChBU0NJSURPQykgLWIgJChBU0NJSURPQ19ET0NCT09LKSAtZCBtYW5wYWdlICQoQVNDSUlET0NfQ09ORikgXAorCQktYWdpdF92ZXJzaW9uPSQoR0lUX1ZFUlNJT04pICQoQVNDSUlET0NfRVhUUkEpICReCisKKyQoR0lUX1NVQlRSRUVfSFRNTCk6ICQoR0lUX1NVQlRSRUVfVFhUKQorCSQoQVNDSUlET0MpIC1iICQoQVNDSUlET0NfSFRNTCkgLWQgbWFucGFnZSAkKEFTQ0lJRE9DX0NPTkYpIFwKKwkJLWFnaXRfdmVyc2lvbj0kKEdJVF9WRVJTSU9OKSAkKEFTQ0lJRE9DX0VYVFJBKSAkXgorCiskKEdJVF9TVUJUUkVFX1RFU1QpOiAkKEdJVF9TVUJUUkVFKQorCWNwICQ8ICRACisKK3Rlc3Q6ICQoR0lUX1NVQlRSRUVfVEVTVCkKKwkkKE1BS0UpIC1DIHQvIHRlc3QKKworY2xlYW46CisJJChSTSkgJChHSVRfU1VCVFJFRSkKKwkkKFJNKSAqLnhtbCAqLmh0bWwgKi4xCisKKy5QSE9OWTogRk9SQ0UKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3VidHJlZS9SRUFETUUgYi9jb250cmliL3N1YnRyZWUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODZiNGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N1YnRyZWUvUkVBRE1FCkBAIC0wLDAgKzEsOCBAQAorCitQbGVhc2UgcmVhZCBnaXQtc3VidHJlZS50eHQgZm9yIGRvY3VtZW50YXRpb24uCisKK1BsZWFzZSBkb24ndCBjb250YWN0IG1lIHVzaW5nIGdpdGh1YiBtYWlsOyBpdCdzIHNsb3csIHVnbHksIGFuZCB3b3JzdCBvZgorYWxsLCByZWR1bmRhbnQuIEVtYWlsIG1lIGluc3RlYWQgYXQgYXBlbndhcnJAZ21haWwuY29tIGFuZCBJJ2xsIGJlIGhhcHB5IHRvCitoZWxwLgorCitBdmVyeQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL2dpdC1zdWJ0cmVlLnNoIGIvY29udHJpYi9zdWJ0cmVlL2dpdC1zdWJ0cmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2OGUxOGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N1YnRyZWUvZ2l0LXN1YnRyZWUuc2gKQEAgLTAsMCArMSw5MDEgQEAKKyMhL2Jpbi9zaAorIworIyBnaXQtc3VidHJlZS5zaDogc3BsaXQvam9pbiBnaXQgcmVwb3NpdG9yaWVzIGluIHN1YmRpcmVjdG9yaWVzIG9mIHRoaXMgb25lCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBBdmVyeSBQZW5uYXJ1biA8YXBlbndhcnJAZ21haWwuY29tPgorIworaWYgdGVzdCAkIyAtZXEgMAordGhlbgorCXNldCAtLSAtaAorZmkKK09QVFNfU1BFQz0iXAorZ2l0IHN1YnRyZWUgYWRkICAgLS1wcmVmaXg9PHByZWZpeD4gPGNvbW1pdD4KK2dpdCBzdWJ0cmVlIGFkZCAgIC0tcHJlZml4PTxwcmVmaXg+IDxyZXBvc2l0b3J5PiA8cmVmPgorZ2l0IHN1YnRyZWUgbWVyZ2UgLS1wcmVmaXg9PHByZWZpeD4gPGNvbW1pdD4KK2dpdCBzdWJ0cmVlIHB1bGwgIC0tcHJlZml4PTxwcmVmaXg+IDxyZXBvc2l0b3J5PiA8cmVmPgorZ2l0IHN1YnRyZWUgcHVzaCAgLS1wcmVmaXg9PHByZWZpeD4gPHJlcG9zaXRvcnk+IDxyZWY+CitnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD08cHJlZml4PiA8Y29tbWl0PgorLS0KK2gsaGVscCAgICAgICAgc2hvdyB0aGUgaGVscAorcSAgICAgICAgICAgICBxdWlldAorZCAgICAgICAgICAgICBzaG93IGRlYnVnIG1lc3NhZ2VzCitQLHByZWZpeD0gICAgIHRoZSBuYW1lIG9mIHRoZSBzdWJkaXIgdG8gc3BsaXQgb3V0CittLG1lc3NhZ2U9ICAgIHVzZSB0aGUgZ2l2ZW4gbWVzc2FnZSBhcyB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHRoZSBtZXJnZSBjb21taXQKKyBvcHRpb25zIGZvciAnc3BsaXQnCithbm5vdGF0ZT0gICAgIGFkZCBhIHByZWZpeCB0byBjb21taXQgbWVzc2FnZSBvZiBuZXcgY29tbWl0cworYixicmFuY2g9ICAgICBjcmVhdGUgYSBuZXcgYnJhbmNoIGZyb20gdGhlIHNwbGl0IHN1YnRyZWUKK2lnbm9yZS1qb2lucyAgaWdub3JlIHByaW9yIC0tcmVqb2luIGNvbW1pdHMKK29udG89ICAgICAgICAgdHJ5IGNvbm5lY3RpbmcgbmV3IHRyZWUgdG8gYW4gZXhpc3Rpbmcgb25lCityZWpvaW4gICAgICAgIG1lcmdlIHRoZSBuZXcgYnJhbmNoIGJhY2sgaW50byBIRUFECisgb3B0aW9ucyBmb3IgJ2FkZCcsICdtZXJnZScsIGFuZCAncHVsbCcKK3NxdWFzaCAgICAgICAgbWVyZ2Ugc3VidHJlZSBjaGFuZ2VzIGFzIGEgc2luZ2xlIGNvbW1pdAorIgorZXZhbCAiJChlY2hvICIkT1BUU19TUEVDIiB8IGdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAiJEAiIHx8IGVjaG8gZXhpdCAkPykiCisKK1BBVEg9JFBBVEg6JChnaXQgLS1leGVjLXBhdGgpCisuIGdpdC1zaC1zZXR1cAorCityZXF1aXJlX3dvcmtfdHJlZQorCitxdWlldD0KK2JyYW5jaD0KK2RlYnVnPQorY29tbWFuZD0KK29udG89CityZWpvaW49CitpZ25vcmVfam9pbnM9Cithbm5vdGF0ZT0KK3NxdWFzaD0KK21lc3NhZ2U9CitwcmVmaXg9CisKK2RlYnVnICgpIHsKKwlpZiB0ZXN0IC1uICIkZGVidWciCisJdGhlbgorCQlwcmludGYgIiVzXG4iICIkKiIgPiYyCisJZmkKK30KKworc2F5ICgpIHsKKwlpZiB0ZXN0IC16ICIkcXVpZXQiCisJdGhlbgorCQlwcmludGYgIiVzXG4iICIkKiIgPiYyCisJZmkKK30KKworcHJvZ3Jlc3MgKCkgeworCWlmIHRlc3QgLXogIiRxdWlldCIKKwl0aGVuCisJCXByaW50ZiAiJXNcciIgIiQqIiA+JjIKKwlmaQorfQorCithc3NlcnQgKCkgeworCWlmICEgIiRAIgorCXRoZW4KKwkJZGllICJhc3NlcnRpb24gZmFpbGVkOiAiICIkQCIKKwlmaQorfQorCitlbnN1cmVfc2luZ2xlX3JldiAoKSB7CisJaWYgdGVzdCAkIyAtbmUgMQorCXRoZW4KKwkJZGllICJZb3UgbXVzdCBwcm92aWRlIGV4YWN0bHkgb25lIHJldmlzaW9uLiAgR290OiAnJEAnIgorCWZpCit9CisKK3doaWxlIHRlc3QgJCMgLWd0IDAKK2RvCisJb3B0PSIkMSIKKwlzaGlmdAorCisJY2FzZSAiJG9wdCIgaW4KKwktcSkKKwkJcXVpZXQ9MQorCQk7OworCS1kKQorCQlkZWJ1Zz0xCisJCTs7CisJLS1hbm5vdGF0ZSkKKwkJYW5ub3RhdGU9IiQxIgorCQlzaGlmdAorCQk7OworCS0tbm8tYW5ub3RhdGUpCisJCWFubm90YXRlPQorCQk7OworCS1iKQorCQlicmFuY2g9IiQxIgorCQlzaGlmdAorCQk7OworCS1QKQorCQlwcmVmaXg9IiR7MSUvfSIKKwkJc2hpZnQKKwkJOzsKKwktbSkKKwkJbWVzc2FnZT0iJDEiCisJCXNoaWZ0CisJCTs7CisJLS1uby1wcmVmaXgpCisJCXByZWZpeD0KKwkJOzsKKwktLW9udG8pCisJCW9udG89IiQxIgorCQlzaGlmdAorCQk7OworCS0tbm8tb250bykKKwkJb250bz0KKwkJOzsKKwktLXJlam9pbikKKwkJcmVqb2luPTEKKwkJOzsKKwktLW5vLXJlam9pbikKKwkJcmVqb2luPQorCQk7OworCS0taWdub3JlLWpvaW5zKQorCQlpZ25vcmVfam9pbnM9MQorCQk7OworCS0tbm8taWdub3JlLWpvaW5zKQorCQlpZ25vcmVfam9pbnM9CisJCTs7CisJLS1zcXVhc2gpCisJCXNxdWFzaD0xCisJCTs7CisJLS1uby1zcXVhc2gpCisJCXNxdWFzaD0KKwkJOzsKKwktLSkKKwkJYnJlYWsKKwkJOzsKKwkqKQorCQlkaWUgIlVuZXhwZWN0ZWQgb3B0aW9uOiAkb3B0IgorCQk7OworCWVzYWMKK2RvbmUKKworY29tbWFuZD0iJDEiCitzaGlmdAorCitjYXNlICIkY29tbWFuZCIgaW4KK2FkZHxtZXJnZXxwdWxsKQorCWRlZmF1bHQ9CisJOzsKK3NwbGl0fHB1c2gpCisJZGVmYXVsdD0iLS1kZWZhdWx0IEhFQUQiCisJOzsKKyopCisJZGllICJVbmtub3duIGNvbW1hbmQgJyRjb21tYW5kJyIKKwk7OworZXNhYworCitpZiB0ZXN0IC16ICIkcHJlZml4IgordGhlbgorCWRpZSAiWW91IG11c3QgcHJvdmlkZSB0aGUgLS1wcmVmaXggb3B0aW9uLiIKK2ZpCisKK2Nhc2UgIiRjb21tYW5kIiBpbgorYWRkKQorCXRlc3QgLWUgIiRwcmVmaXgiICYmCisJCWRpZSAicHJlZml4ICckcHJlZml4JyBhbHJlYWR5IGV4aXN0cy4iCisJOzsKKyopCisJdGVzdCAtZSAiJHByZWZpeCIgfHwKKwkJZGllICInJHByZWZpeCcgZG9lcyBub3QgZXhpc3Q7IHVzZSAnZ2l0IHN1YnRyZWUgYWRkJyIKKwk7OworZXNhYworCitkaXI9IiQoZGlybmFtZSAiJHByZWZpeC8uIikiCisKK2lmIHRlc3QgIiRjb21tYW5kIiAhPSAicHVsbCIgJiYKKwkJdGVzdCAiJGNvbW1hbmQiICE9ICJhZGQiICYmCisJCXRlc3QgIiRjb21tYW5kIiAhPSAicHVzaCIKK3RoZW4KKwlyZXZzPSQoZ2l0IHJldi1wYXJzZSAkZGVmYXVsdCAtLXJldnMtb25seSAiJEAiKSB8fCBleGl0ICQ/CisJZGlycz0kKGdpdCByZXYtcGFyc2UgLS1uby1yZXZzIC0tbm8tZmxhZ3MgIiRAIikgfHwgZXhpdCAkPworCWVuc3VyZV9zaW5nbGVfcmV2ICRyZXZzCisJaWYgdGVzdCAtbiAiJGRpcnMiCisJdGhlbgorCQlkaWUgIkVycm9yOiBVc2UgLS1wcmVmaXggaW5zdGVhZCBvZiBiYXJlIGZpbGVuYW1lcy4iCisJZmkKK2ZpCisKK2RlYnVnICJjb21tYW5kOiB7JGNvbW1hbmR9IgorZGVidWcgInF1aWV0OiB7JHF1aWV0fSIKK2RlYnVnICJyZXZzOiB7JHJldnN9IgorZGVidWcgImRpcjogeyRkaXJ9IgorZGVidWcgIm9wdHM6IHskKn0iCitkZWJ1ZworCitjYWNoZV9zZXR1cCAoKSB7CisJY2FjaGVkaXI9IiRHSVRfRElSL3N1YnRyZWUtY2FjaGUvJCQiCisJcm0gLXJmICIkY2FjaGVkaXIiIHx8CisJCWRpZSAiQ2FuJ3QgZGVsZXRlIG9sZCBjYWNoZWRpcjogJGNhY2hlZGlyIgorCW1rZGlyIC1wICIkY2FjaGVkaXIiIHx8CisJCWRpZSAiQ2FuJ3QgY3JlYXRlIG5ldyBjYWNoZWRpcjogJGNhY2hlZGlyIgorCW1rZGlyIC1wICIkY2FjaGVkaXIvbm90cmVlIiB8fAorCQlkaWUgIkNhbid0IGNyZWF0ZSBuZXcgY2FjaGVkaXI6ICRjYWNoZWRpci9ub3RyZWUiCisJZGVidWcgIlVzaW5nIGNhY2hlZGlyOiAkY2FjaGVkaXIiID4mMgorfQorCitjYWNoZV9nZXQgKCkgeworCWZvciBvbGRyZXYgaW4gIiRAIgorCWRvCisJCWlmIHRlc3QgLXIgIiRjYWNoZWRpci8kb2xkcmV2IgorCQl0aGVuCisJCQlyZWFkIG5ld3JldiA8IiRjYWNoZWRpci8kb2xkcmV2IgorCQkJZWNobyAkbmV3cmV2CisJCWZpCisJZG9uZQorfQorCitjYWNoZV9taXNzICgpIHsKKwlmb3Igb2xkcmV2IGluICIkQCIKKwlkbworCQlpZiAhIHRlc3QgLXIgIiRjYWNoZWRpci8kb2xkcmV2IgorCQl0aGVuCisJCQllY2hvICRvbGRyZXYKKwkJZmkKKwlkb25lCit9CisKK2NoZWNrX3BhcmVudHMgKCkgeworCW1pc3NlZD0kKGNhY2hlX21pc3MgIiQxIikKKwlsb2NhbCBpbmRlbnQ9JCgoJDIgKyAxKSkKKwlmb3IgbWlzcyBpbiAkbWlzc2VkCisJZG8KKwkJaWYgISB0ZXN0IC1yICIkY2FjaGVkaXIvbm90cmVlLyRtaXNzIgorCQl0aGVuCisJCQlkZWJ1ZyAiICBpbmNvcnJlY3Qgb3JkZXI6ICRtaXNzIgorCQkJcHJvY2Vzc19zcGxpdF9jb21taXQgIiRtaXNzIiAiIiAiJGluZGVudCIKKwkJZmkKKwlkb25lCit9CisKK3NldF9ub3RyZWUgKCkgeworCWVjaG8gIjEiID4gIiRjYWNoZWRpci9ub3RyZWUvJDEiCit9CisKK2NhY2hlX3NldCAoKSB7CisJb2xkcmV2PSIkMSIKKwluZXdyZXY9IiQyIgorCWlmIHRlc3QgIiRvbGRyZXYiICE9ICJsYXRlc3Rfb2xkIiAmJgorCQl0ZXN0ICIkb2xkcmV2IiAhPSAibGF0ZXN0X25ldyIgJiYKKwkJdGVzdCAtZSAiJGNhY2hlZGlyLyRvbGRyZXYiCisJdGhlbgorCQlkaWUgImNhY2hlIGZvciAkb2xkcmV2IGFscmVhZHkgZXhpc3RzISIKKwlmaQorCWVjaG8gIiRuZXdyZXYiID4iJGNhY2hlZGlyLyRvbGRyZXYiCit9CisKK3Jldl9leGlzdHMgKCkgeworCWlmIGdpdCByZXYtcGFyc2UgIiQxIiA+L2Rldi9udWxsIDI+JjEKKwl0aGVuCisJCXJldHVybiAwCisJZWxzZQorCQlyZXR1cm4gMQorCWZpCit9CisKK3Jldl9pc19kZXNjZW5kYW50X29mX2JyYW5jaCAoKSB7CisJbmV3cmV2PSIkMSIKKwlicmFuY2g9IiQyIgorCWJyYW5jaF9oYXNoPSQoZ2l0IHJldi1wYXJzZSAiJGJyYW5jaCIpCisJbWF0Y2g9JChnaXQgcmV2LWxpc3QgLTEgIiRicmFuY2hfaGFzaCIgIl4kbmV3cmV2IikKKworCWlmIHRlc3QgLXogIiRtYXRjaCIKKwl0aGVuCisJCXJldHVybiAwCisJZWxzZQorCQlyZXR1cm4gMQorCWZpCit9CisKKyMgaWYgYSBjb21taXQgZG9lc24ndCBoYXZlIGEgcGFyZW50LCB0aGlzIG1pZ2h0IG5vdCB3b3JrLiAgQnV0IHdlIG9ubHkgd2FudAorIyB0byByZW1vdmUgdGhlIHBhcmVudCBmcm9tIHRoZSByZXYtbGlzdCwgYW5kIHNpbmNlIGl0IGRvZXNuJ3QgZXhpc3QsIGl0IHdvbid0CisjIGJlIHRoZXJlIGFueXdheSwgc28gZG8gbm90aGluZyBpbiB0aGF0IGNhc2UuCit0cnlfcmVtb3ZlX3ByZXZpb3VzICgpIHsKKwlpZiByZXZfZXhpc3RzICIkMV4iCisJdGhlbgorCQllY2hvICJeJDFeIgorCWZpCit9CisKK2ZpbmRfbGF0ZXN0X3NxdWFzaCAoKSB7CisJZGVidWcgIkxvb2tpbmcgZm9yIGxhdGVzdCBzcXVhc2ggKCRkaXIpLi4uIgorCWRpcj0iJDEiCisJc3E9CisJbWFpbj0KKwlzdWI9CisJZ2l0IGxvZyAtLWdyZXA9Il5naXQtc3VidHJlZS1kaXI6ICRkaXIvKlwkIiBcCisJCS0tbm8tc2hvdy1zaWduYXR1cmUgLS1wcmV0dHk9Zm9ybWF0OidTVEFSVCAlSCVuJXMlbiVuJWIlbkVORCVuJyBIRUFEIHwKKwl3aGlsZSByZWFkIGEgYiBqdW5rCisJZG8KKwkJZGVidWcgIiRhICRiICRqdW5rIgorCQlkZWJ1ZyAie3skc3EvJG1haW4vJHN1Yn19IgorCQljYXNlICIkYSIgaW4KKwkJU1RBUlQpCisJCQlzcT0iJGIiCisJCQk7OworCQlnaXQtc3VidHJlZS1tYWlubGluZTopCisJCQltYWluPSIkYiIKKwkJCTs7CisJCWdpdC1zdWJ0cmVlLXNwbGl0OikKKwkJCXN1Yj0iJChnaXQgcmV2LXBhcnNlICIkYl4wIikiIHx8CisJCQlkaWUgImNvdWxkIG5vdCByZXYtcGFyc2Ugc3BsaXQgaGFzaCAkYiBmcm9tIGNvbW1pdCAkc3EiCisJCQk7OworCQlFTkQpCisJCQlpZiB0ZXN0IC1uICIkc3ViIgorCQkJdGhlbgorCQkJCWlmIHRlc3QgLW4gIiRtYWluIgorCQkJCXRoZW4KKwkJCQkJIyBhIHJlam9pbiBjb21taXQ/CisJCQkJCSMgUHJldGVuZCBpdHMgc3ViIHdhcyBhIHNxdWFzaC4KKwkJCQkJc3E9IiRzdWIiCisJCQkJZmkKKwkJCQlkZWJ1ZyAiU3F1YXNoIGZvdW5kOiAkc3EgJHN1YiIKKwkJCQllY2hvICIkc3EiICIkc3ViIgorCQkJCWJyZWFrCisJCQlmaQorCQkJc3E9CisJCQltYWluPQorCQkJc3ViPQorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKworZmluZF9leGlzdGluZ19zcGxpdHMgKCkgeworCWRlYnVnICJMb29raW5nIGZvciBwcmlvciBzcGxpdHMuLi4iCisJZGlyPSIkMSIKKwlyZXZzPSIkMiIKKwltYWluPQorCXN1Yj0KKwlsb2NhbCBncmVwX2Zvcm1hdD0iXmdpdC1zdWJ0cmVlLWRpcjogJGRpci8qXCQiCisJaWYgdGVzdCAtbiAiJGlnbm9yZV9qb2lucyIKKwl0aGVuCisJCWdyZXBfZm9ybWF0PSJeQWRkICckZGlyLycgZnJvbSBjb21taXQgJyIKKwlmaQorCWdpdCBsb2cgLS1ncmVwPSIkZ3JlcF9mb3JtYXQiIFwKKwkJLS1uby1zaG93LXNpZ25hdHVyZSAtLXByZXR0eT1mb3JtYXQ6J1NUQVJUICVIJW4lcyVuJW4lYiVuRU5EJW4nICRyZXZzIHwKKwl3aGlsZSByZWFkIGEgYiBqdW5rCisJZG8KKwkJY2FzZSAiJGEiIGluCisJCVNUQVJUKQorCQkJc3E9IiRiIgorCQkJOzsKKwkJZ2l0LXN1YnRyZWUtbWFpbmxpbmU6KQorCQkJbWFpbj0iJGIiCisJCQk7OworCQlnaXQtc3VidHJlZS1zcGxpdDopCisJCQlzdWI9IiQoZ2l0IHJldi1wYXJzZSAiJGJeMCIpIiB8fAorCQkJZGllICJjb3VsZCBub3QgcmV2LXBhcnNlIHNwbGl0IGhhc2ggJGIgZnJvbSBjb21taXQgJHNxIgorCQkJOzsKKwkJRU5EKQorCQkJZGVidWcgIiAgTWFpbiBpczogJyRtYWluJyIKKwkJCWlmIHRlc3QgLXogIiRtYWluIiAtYSAtbiAiJHN1YiIKKwkJCXRoZW4KKwkJCQkjIHNxdWFzaCBjb21taXRzIHJlZmVyIHRvIGEgc3VidHJlZQorCQkJCWRlYnVnICIgIFNxdWFzaDogJHNxIGZyb20gJHN1YiIKKwkJCQljYWNoZV9zZXQgIiRzcSIgIiRzdWIiCisJCQlmaQorCQkJaWYgdGVzdCAtbiAiJG1haW4iIC1hIC1uICIkc3ViIgorCQkJdGhlbgorCQkJCWRlYnVnICIgIFByaW9yOiAkbWFpbiAtPiAkc3ViIgorCQkJCWNhY2hlX3NldCAkbWFpbiAkc3ViCisJCQkJY2FjaGVfc2V0ICRzdWIgJHN1YgorCQkJCXRyeV9yZW1vdmVfcHJldmlvdXMgIiRtYWluIgorCQkJCXRyeV9yZW1vdmVfcHJldmlvdXMgIiRzdWIiCisJCQlmaQorCQkJbWFpbj0KKwkJCXN1Yj0KKwkJCTs7CisJCWVzYWMKKwlkb25lCit9CisKK2NvcHlfY29tbWl0ICgpIHsKKwkjIFdlJ3JlIGdvaW5nIHRvIHNldCBzb21lIGVudmlyb25tZW50IHZhcnMgaGVyZSwgc28KKwkjIGRvIGl0IGluIGEgc3Vic2hlbGwgdG8gZ2V0IHJpZCBvZiB0aGVtIHNhZmVseSBsYXRlcgorCWRlYnVnIGNvcHlfY29tbWl0ICJ7JDF9IiAieyQyfSIgInskM30iCisJZ2l0IGxvZyAtMSAtLW5vLXNob3ctc2lnbmF0dXJlIC0tcHJldHR5PWZvcm1hdDonJWFuJW4lYWUlbiVhRCVuJWNuJW4lY2UlbiVjRCVuJUInICIkMSIgfAorCSgKKwkJcmVhZCBHSVRfQVVUSE9SX05BTUUKKwkJcmVhZCBHSVRfQVVUSE9SX0VNQUlMCisJCXJlYWQgR0lUX0FVVEhPUl9EQVRFCisJCXJlYWQgR0lUX0NPTU1JVFRFUl9OQU1FCisJCXJlYWQgR0lUX0NPTU1JVFRFUl9FTUFJTAorCQlyZWFkIEdJVF9DT01NSVRURVJfREFURQorCQlleHBvcnQgIEdJVF9BVVRIT1JfTkFNRSBcCisJCQlHSVRfQVVUSE9SX0VNQUlMIFwKKwkJCUdJVF9BVVRIT1JfREFURSBcCisJCQlHSVRfQ09NTUlUVEVSX05BTUUgXAorCQkJR0lUX0NPTU1JVFRFUl9FTUFJTCBcCisJCQlHSVRfQ09NTUlUVEVSX0RBVEUKKwkJKAorCQkJcHJpbnRmICIlcyIgIiRhbm5vdGF0ZSIKKwkJCWNhdAorCQkpIHwKKwkJZ2l0IGNvbW1pdC10cmVlICIkMiIgJDMgICMgcmVhZHMgdGhlIHJlc3Qgb2Ygc3RkaW4KKwkpIHx8IGRpZSAiQ2FuJ3QgY29weSBjb21taXQgJDEiCit9CisKK2FkZF9tc2cgKCkgeworCWRpcj0iJDEiCisJbGF0ZXN0X29sZD0iJDIiCisJbGF0ZXN0X25ldz0iJDMiCisJaWYgdGVzdCAtbiAiJG1lc3NhZ2UiCisJdGhlbgorCQljb21taXRfbWVzc2FnZT0iJG1lc3NhZ2UiCisJZWxzZQorCQljb21taXRfbWVzc2FnZT0iQWRkICckZGlyLycgZnJvbSBjb21taXQgJyRsYXRlc3RfbmV3JyIKKwlmaQorCWNhdCA8PC1FT0YKKwkJJGNvbW1pdF9tZXNzYWdlCisKKwkJZ2l0LXN1YnRyZWUtZGlyOiAkZGlyCisJCWdpdC1zdWJ0cmVlLW1haW5saW5lOiAkbGF0ZXN0X29sZAorCQlnaXQtc3VidHJlZS1zcGxpdDogJGxhdGVzdF9uZXcKKwlFT0YKK30KKworYWRkX3NxdWFzaGVkX21zZyAoKSB7CisJaWYgdGVzdCAtbiAiJG1lc3NhZ2UiCisJdGhlbgorCQllY2hvICIkbWVzc2FnZSIKKwllbHNlCisJCWVjaG8gIk1lcmdlIGNvbW1pdCAnJDEnIGFzICckMiciCisJZmkKK30KKworcmVqb2luX21zZyAoKSB7CisJZGlyPSIkMSIKKwlsYXRlc3Rfb2xkPSIkMiIKKwlsYXRlc3RfbmV3PSIkMyIKKwlpZiB0ZXN0IC1uICIkbWVzc2FnZSIKKwl0aGVuCisJCWNvbW1pdF9tZXNzYWdlPSIkbWVzc2FnZSIKKwllbHNlCisJCWNvbW1pdF9tZXNzYWdlPSJTcGxpdCAnJGRpci8nIGludG8gY29tbWl0ICckbGF0ZXN0X25ldyciCisJZmkKKwljYXQgPDwtRU9GCisJCSRjb21taXRfbWVzc2FnZQorCisJCWdpdC1zdWJ0cmVlLWRpcjogJGRpcgorCQlnaXQtc3VidHJlZS1tYWlubGluZTogJGxhdGVzdF9vbGQKKwkJZ2l0LXN1YnRyZWUtc3BsaXQ6ICRsYXRlc3RfbmV3CisJRU9GCit9CisKK3NxdWFzaF9tc2cgKCkgeworCWRpcj0iJDEiCisJb2xkc3ViPSIkMiIKKwluZXdzdWI9IiQzIgorCW5ld3N1Yl9zaG9ydD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJG5ld3N1YiIpCisKKwlpZiB0ZXN0IC1uICIkb2xkc3ViIgorCXRoZW4KKwkJb2xkc3ViX3Nob3J0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkb2xkc3ViIikKKwkJZWNobyAiU3F1YXNoZWQgJyRkaXIvJyBjaGFuZ2VzIGZyb20gJG9sZHN1Yl9zaG9ydC4uJG5ld3N1Yl9zaG9ydCIKKwkJZWNobworCQlnaXQgbG9nIC0tbm8tc2hvdy1zaWduYXR1cmUgLS1wcmV0dHk9dGZvcm1hdDonJWggJXMnICIkb2xkc3ViLi4kbmV3c3ViIgorCQlnaXQgbG9nIC0tbm8tc2hvdy1zaWduYXR1cmUgLS1wcmV0dHk9dGZvcm1hdDonUkVWRVJUOiAlaCAlcycgIiRuZXdzdWIuLiRvbGRzdWIiCisJZWxzZQorCQllY2hvICJTcXVhc2hlZCAnJGRpci8nIGNvbnRlbnQgZnJvbSBjb21taXQgJG5ld3N1Yl9zaG9ydCIKKwlmaQorCisJZWNobworCWVjaG8gImdpdC1zdWJ0cmVlLWRpcjogJGRpciIKKwllY2hvICJnaXQtc3VidHJlZS1zcGxpdDogJG5ld3N1YiIKK30KKwordG9wdHJlZV9mb3JfY29tbWl0ICgpIHsKKwljb21taXQ9IiQxIgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRjb21taXRee3RyZWV9IiB8fCBleGl0ICQ/Cit9CisKK3N1YnRyZWVfZm9yX2NvbW1pdCAoKSB7CisJY29tbWl0PSIkMSIKKwlkaXI9IiQyIgorCWdpdCBscy10cmVlICIkY29tbWl0IiAtLSAiJGRpciIgfAorCXdoaWxlIHJlYWQgbW9kZSB0eXBlIHRyZWUgbmFtZQorCWRvCisJCWFzc2VydCB0ZXN0ICIkbmFtZSIgPSAiJGRpciIKKwkJYXNzZXJ0IHRlc3QgIiR0eXBlIiA9ICJ0cmVlIiAtbyAiJHR5cGUiID0gImNvbW1pdCIKKwkJdGVzdCAiJHR5cGUiID0gImNvbW1pdCIgJiYgY29udGludWUgICMgaWdub3JlIHN1Ym1vZHVsZXMKKwkJZWNobyAkdHJlZQorCQlicmVhaworCWRvbmUKK30KKwordHJlZV9jaGFuZ2VkICgpIHsKKwl0cmVlPSQxCisJc2hpZnQKKwlpZiB0ZXN0ICQjIC1uZSAxCisJdGhlbgorCQlyZXR1cm4gMCAgICMgd2VpcmQgcGFyZW50cywgY29uc2lkZXIgaXQgY2hhbmdlZAorCWVsc2UKKwkJcHRyZWU9JCh0b3B0cmVlX2Zvcl9jb21taXQgJDEpCisJCWlmIHRlc3QgIiRwdHJlZSIgIT0gIiR0cmVlIgorCQl0aGVuCisJCQlyZXR1cm4gMCAgICMgY2hhbmdlZAorCQllbHNlCisJCQlyZXR1cm4gMSAgICMgbm90IGNoYW5nZWQKKwkJZmkKKwlmaQorfQorCituZXdfc3F1YXNoX2NvbW1pdCAoKSB7CisJb2xkPSIkMSIKKwlvbGRzdWI9IiQyIgorCW5ld3N1Yj0iJDMiCisJdHJlZT0kKHRvcHRyZWVfZm9yX2NvbW1pdCAkbmV3c3ViKSB8fCBleGl0ICQ/CisJaWYgdGVzdCAtbiAiJG9sZCIKKwl0aGVuCisJCXNxdWFzaF9tc2cgIiRkaXIiICIkb2xkc3ViIiAiJG5ld3N1YiIgfAorCQlnaXQgY29tbWl0LXRyZWUgIiR0cmVlIiAtcCAiJG9sZCIgfHwgZXhpdCAkPworCWVsc2UKKwkJc3F1YXNoX21zZyAiJGRpciIgIiIgIiRuZXdzdWIiIHwKKwkJZ2l0IGNvbW1pdC10cmVlICIkdHJlZSIgfHwgZXhpdCAkPworCWZpCit9CisKK2NvcHlfb3Jfc2tpcCAoKSB7CisJcmV2PSIkMSIKKwl0cmVlPSIkMiIKKwluZXdwYXJlbnRzPSIkMyIKKwlhc3NlcnQgdGVzdCAtbiAiJHRyZWUiCisKKwlpZGVudGljYWw9CisJbm9uaWRlbnRpY2FsPQorCXA9CisJZ290cGFyZW50cz0KKwljb3B5Y29tbWl0PQorCWZvciBwYXJlbnQgaW4gJG5ld3BhcmVudHMKKwlkbworCQlwdHJlZT0kKHRvcHRyZWVfZm9yX2NvbW1pdCAkcGFyZW50KSB8fCBleGl0ICQ/CisJCXRlc3QgLXogIiRwdHJlZSIgJiYgY29udGludWUKKwkJaWYgdGVzdCAiJHB0cmVlIiA9ICIkdHJlZSIKKwkJdGhlbgorCQkJIyBhbiBpZGVudGljYWwgcGFyZW50IGNvdWxkIGJlIHVzZWQgaW4gcGxhY2Ugb2YgdGhpcyByZXYuCisJCQlpZiB0ZXN0IC1uICIkaWRlbnRpY2FsIgorCQkJdGhlbgorCQkJCSMgaWYgYSBwcmV2aW91cyBpZGVudGljYWwgcGFyZW50IHdhcyBmb3VuZCwgY2hlY2sgd2hldGhlcgorCQkJCSMgb25lIGlzIGFscmVhZHkgYW4gYW5jZXN0b3Igb2YgdGhlIG90aGVyCisJCQkJbWVyZ2ViYXNlPSQoZ2l0IG1lcmdlLWJhc2UgJGlkZW50aWNhbCAkcGFyZW50KQorCQkJCWlmIHRlc3QgIiRpZGVudGljYWwiID0gIiRtZXJnZWJhc2UiCisJCQkJdGhlbgorCQkJCQkjIGN1cnJlbnQgaWRlbnRpY2FsIGNvbW1pdCBpcyBhbiBhbmNlc3RvciBvZiBwYXJlbnQKKwkJCQkJaWRlbnRpY2FsPSIkcGFyZW50IgorCQkJCWVsaWYgdGVzdCAiJHBhcmVudCIgIT0gIiRtZXJnZWJhc2UiCisJCQkJdGhlbgorCQkJCQkjIG5vIGNvbW1vbiBoaXN0b3J5OyBjb21taXQgbXVzdCBiZSBjb3BpZWQKKwkJCQkJY29weWNvbW1pdD0xCisJCQkJZmkKKwkJCWVsc2UKKwkJCQkjIGZpcnN0IGlkZW50aWNhbCBwYXJlbnQgZGV0ZWN0ZWQKKwkJCQlpZGVudGljYWw9IiRwYXJlbnQiCisJCQlmaQorCQllbHNlCisJCQlub25pZGVudGljYWw9IiRwYXJlbnQiCisJCWZpCisKKwkJIyBzb21ldGltZXMgYm90aCBvbGQgcGFyZW50cyBtYXAgdG8gdGhlIHNhbWUgbmV3cGFyZW50OworCQkjIGVsaW1pbmF0ZSBkdXBsaWNhdGVzCisJCWlzX25ldz0xCisJCWZvciBncCBpbiAkZ290cGFyZW50cworCQlkbworCQkJaWYgdGVzdCAiJGdwIiA9ICIkcGFyZW50IgorCQkJdGhlbgorCQkJCWlzX25ldz0KKwkJCQlicmVhaworCQkJZmkKKwkJZG9uZQorCQlpZiB0ZXN0IC1uICIkaXNfbmV3IgorCQl0aGVuCisJCQlnb3RwYXJlbnRzPSIkZ290cGFyZW50cyAkcGFyZW50IgorCQkJcD0iJHAgLXAgJHBhcmVudCIKKwkJZmkKKwlkb25lCisKKwlpZiB0ZXN0IC1uICIkaWRlbnRpY2FsIiAmJiB0ZXN0IC1uICIkbm9uaWRlbnRpY2FsIgorCXRoZW4KKwkJZXh0cmFzPSQoZ2l0IHJldi1saXN0IC0tY291bnQgJGlkZW50aWNhbC4uJG5vbmlkZW50aWNhbCkKKwkJaWYgdGVzdCAiJGV4dHJhcyIgLW5lIDAKKwkJdGhlbgorCQkJIyB3ZSBuZWVkIHRvIHByZXNlcnZlIGhpc3RvcnkgYWxvbmcgdGhlIG90aGVyIGJyYW5jaAorCQkJY29weWNvbW1pdD0xCisJCWZpCisJZmkKKwlpZiB0ZXN0IC1uICIkaWRlbnRpY2FsIiAmJiB0ZXN0IC16ICIkY29weWNvbW1pdCIKKwl0aGVuCisJCWVjaG8gJGlkZW50aWNhbAorCWVsc2UKKwkJY29weV9jb21taXQgIiRyZXYiICIkdHJlZSIgIiRwIiB8fCBleGl0ICQ/CisJZmkKK30KKworZW5zdXJlX2NsZWFuICgpIHsKKwlpZiAhIGdpdCBkaWZmLWluZGV4IEhFQUQgLS1leGl0LWNvZGUgLS1xdWlldCAyPiYxCisJdGhlbgorCQlkaWUgIldvcmtpbmcgdHJlZSBoYXMgbW9kaWZpY2F0aW9ucy4gIENhbm5vdCBhZGQuIgorCWZpCisJaWYgISBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEIC0tZXhpdC1jb2RlIC0tcXVpZXQgMj4mMQorCXRoZW4KKwkJZGllICJJbmRleCBoYXMgbW9kaWZpY2F0aW9ucy4gIENhbm5vdCBhZGQuIgorCWZpCit9CisKK2Vuc3VyZV92YWxpZF9yZWZfZm9ybWF0ICgpIHsKKwlnaXQgY2hlY2stcmVmLWZvcm1hdCAicmVmcy9oZWFkcy8kMSIgfHwKKwkJZGllICInJDEnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHJlZiIKK30KKworcHJvY2Vzc19zcGxpdF9jb21taXQgKCkgeworCWxvY2FsIHJldj0iJDEiCisJbG9jYWwgcGFyZW50cz0iJDIiCisJbG9jYWwgaW5kZW50PSQzCisKKwlpZiB0ZXN0ICRpbmRlbnQgLWVxIDAKKwl0aGVuCisJCXJldmNvdW50PSQoKCRyZXZjb3VudCArIDEpKQorCWVsc2UKKwkJIyBwcm9jZXNzaW5nIGNvbW1pdCB3aXRob3V0IG5vcm1hbCBwYXJlbnQgaW5mb3JtYXRpb247CisJCSMgZmV0Y2ggZnJvbSByZXBvCisJCXBhcmVudHM9JChnaXQgcmV2LXBhcnNlICIkcmV2XkAiKQorCQlleHRyYWNvdW50PSQoKCRleHRyYWNvdW50ICsgMSkpCisJZmkKKworCXByb2dyZXNzICIkcmV2Y291bnQvJHJldm1heCAoJGNyZWF0ZWNvdW50KSBbJGV4dHJhY291bnRdIgorCisJZGVidWcgIlByb2Nlc3NpbmcgY29tbWl0OiAkcmV2IgorCWV4aXN0cz0kKGNhY2hlX2dldCAiJHJldiIpCisJaWYgdGVzdCAtbiAiJGV4aXN0cyIKKwl0aGVuCisJCWRlYnVnICIgIHByaW9yOiAkZXhpc3RzIgorCQlyZXR1cm4KKwlmaQorCWNyZWF0ZWNvdW50PSQoKCRjcmVhdGVjb3VudCArIDEpKQorCWRlYnVnICIgIHBhcmVudHM6ICRwYXJlbnRzIgorCWNoZWNrX3BhcmVudHMgIiRwYXJlbnRzIiAiJGluZGVudCIKKwluZXdwYXJlbnRzPSQoY2FjaGVfZ2V0ICRwYXJlbnRzKQorCWRlYnVnICIgIG5ld3BhcmVudHM6ICRuZXdwYXJlbnRzIgorCisJdHJlZT0kKHN1YnRyZWVfZm9yX2NvbW1pdCAiJHJldiIgIiRkaXIiKQorCWRlYnVnICIgIHRyZWUgaXM6ICR0cmVlIgorCisJIyB1Z2x5LiAgaXMgdGhlcmUgbm8gYmV0dGVyIHdheSB0byB0ZWxsIGlmIHRoaXMgaXMgYSBzdWJ0cmVlCisJIyB2cy4gYSBtYWlubGluZSBjb21taXQ/ICBEb2VzIGl0IG1hdHRlcj8KKwlpZiB0ZXN0IC16ICIkdHJlZSIKKwl0aGVuCisJCXNldF9ub3RyZWUgIiRyZXYiCisJCWlmIHRlc3QgLW4gIiRuZXdwYXJlbnRzIgorCQl0aGVuCisJCQljYWNoZV9zZXQgIiRyZXYiICIkcmV2IgorCQlmaQorCQlyZXR1cm4KKwlmaQorCisJbmV3cmV2PSQoY29weV9vcl9za2lwICIkcmV2IiAiJHRyZWUiICIkbmV3cGFyZW50cyIpIHx8IGV4aXQgJD8KKwlkZWJ1ZyAiICBuZXdyZXYgaXM6ICRuZXdyZXYiCisJY2FjaGVfc2V0ICIkcmV2IiAiJG5ld3JldiIKKwljYWNoZV9zZXQgbGF0ZXN0X25ldyAiJG5ld3JldiIKKwljYWNoZV9zZXQgbGF0ZXN0X29sZCAiJHJldiIKK30KKworY21kX2FkZCAoKSB7CisJaWYgdGVzdCAtZSAiJGRpciIKKwl0aGVuCisJCWRpZSAiJyRkaXInIGFscmVhZHkgZXhpc3RzLiAgQ2Fubm90IGFkZC4iCisJZmkKKworCWVuc3VyZV9jbGVhbgorCisJaWYgdGVzdCAkIyAtZXEgMQorCXRoZW4KKwkJZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAiJDFee2NvbW1pdH0iID4vZGV2L251bGwgfHwKKwkJCWRpZSAiJyQxJyBkb2VzIG5vdCByZWZlciB0byBhIGNvbW1pdCIKKworCQljbWRfYWRkX2NvbW1pdCAiJEAiCisKKwllbGlmIHRlc3QgJCMgLWVxIDIKKwl0aGVuCisJCSMgVGVjaG5pY2FsbHkgd2UgY291bGQgYWNjZXB0IGEgcmVmc3BlYyBoZXJlIGJ1dCB3ZSdyZQorCQkjIGp1c3QgZ29pbmcgdG8gdHVybiBhcm91bmQgYW5kIGFkZCBGRVRDSF9IRUFEIHVuZGVyIHRoZQorCQkjIHNwZWNpZmllZCBkaXJlY3RvcnkuICBBbGxvd2luZyBhIHJlZnNwZWMgbWlnaHQgYmUKKwkJIyBtaXNsZWFkaW5nIGJlY2F1c2Ugd2Ugd29uJ3QgZG8gYW55dGhpbmcgd2l0aCBhbnkgb3RoZXIKKwkJIyBicmFuY2hlcyBmZXRjaGVkIHZpYSB0aGUgcmVmc3BlYy4KKwkJZW5zdXJlX3ZhbGlkX3JlZl9mb3JtYXQgIiQyIgorCisJCWNtZF9hZGRfcmVwb3NpdG9yeSAiJEAiCisJZWxzZQorCQlzYXkgImVycm9yOiBwYXJhbWV0ZXJzIHdlcmUgJyRAJyIKKwkJZGllICJQcm92aWRlIGVpdGhlciBhIGNvbW1pdCBvciBhIHJlcG9zaXRvcnkgYW5kIGNvbW1pdC4iCisJZmkKK30KKworY21kX2FkZF9yZXBvc2l0b3J5ICgpIHsKKwllY2hvICJnaXQgZmV0Y2giICIkQCIKKwlyZXBvc2l0b3J5PSQxCisJcmVmc3BlYz0kMgorCWdpdCBmZXRjaCAiJEAiIHx8IGV4aXQgJD8KKwlyZXZzPUZFVENIX0hFQUQKKwlzZXQgLS0gJHJldnMKKwljbWRfYWRkX2NvbW1pdCAiJEAiCit9CisKK2NtZF9hZGRfY29tbWl0ICgpIHsKKwlyZXY9JChnaXQgcmV2LXBhcnNlICRkZWZhdWx0IC0tcmV2cy1vbmx5ICIkQCIpIHx8IGV4aXQgJD8KKwllbnN1cmVfc2luZ2xlX3JldiAkcmV2CisKKwlkZWJ1ZyAiQWRkaW5nICRkaXIgYXMgJyRyZXYnLi4uIgorCWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9IiRkaXIiICRyZXYgfHwgZXhpdCAkPworCWdpdCBjaGVja291dCAtLSAiJGRpciIgfHwgZXhpdCAkPworCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgfHwgZXhpdCAkPworCisJaGVhZHJldj0kKGdpdCByZXYtcGFyc2UgSEVBRCkgfHwgZXhpdCAkPworCWlmIHRlc3QgLW4gIiRoZWFkcmV2IiAmJiB0ZXN0ICIkaGVhZHJldiIgIT0gIiRyZXYiCisJdGhlbgorCQloZWFkcD0iLXAgJGhlYWRyZXYiCisJZWxzZQorCQloZWFkcD0KKwlmaQorCisJaWYgdGVzdCAtbiAiJHNxdWFzaCIKKwl0aGVuCisJCXJldj0kKG5ld19zcXVhc2hfY29tbWl0ICIiICIiICIkcmV2IikgfHwgZXhpdCAkPworCQljb21taXQ9JChhZGRfc3F1YXNoZWRfbXNnICIkcmV2IiAiJGRpciIgfAorCQkJZ2l0IGNvbW1pdC10cmVlICIkdHJlZSIgJGhlYWRwIC1wICIkcmV2IikgfHwgZXhpdCAkPworCWVsc2UKKwkJcmV2cD0kKHBlZWxfY29tbWl0dGlzaCAiJHJldiIpICYmCisJCWNvbW1pdD0kKGFkZF9tc2cgIiRkaXIiICRoZWFkcmV2ICIkcmV2IiB8CisJCQlnaXQgY29tbWl0LXRyZWUgIiR0cmVlIiAkaGVhZHAgLXAgIiRyZXZwIikgfHwgZXhpdCAkPworCWZpCisJZ2l0IHJlc2V0ICIkY29tbWl0IiB8fCBleGl0ICQ/CisKKwlzYXkgIkFkZGVkIGRpciAnJGRpciciCit9CisKK2NtZF9zcGxpdCAoKSB7CisJZGVidWcgIlNwbGl0dGluZyAkZGlyLi4uIgorCWNhY2hlX3NldHVwIHx8IGV4aXQgJD8KKworCWlmIHRlc3QgLW4gIiRvbnRvIgorCXRoZW4KKwkJZGVidWcgIlJlYWRpbmcgaGlzdG9yeSBmb3IgLS1vbnRvPSRvbnRvLi4uIgorCQlnaXQgcmV2LWxpc3QgJG9udG8gfAorCQl3aGlsZSByZWFkIHJldgorCQlkbworCQkJIyB0aGUgJ29udG8nIGhpc3RvcnkgaXMgYWxyZWFkeSBqdXN0IHRoZSBzdWJkaXIsIHNvCisJCQkjIGFueSBwYXJlbnQgd2UgZmluZCB0aGVyZSBjYW4gYmUgdXNlZCB2ZXJiYXRpbQorCQkJZGVidWcgIiAgY2FjaGU6ICRyZXYiCisJCQljYWNoZV9zZXQgIiRyZXYiICIkcmV2IgorCQlkb25lCisJZmkKKworCXVucmV2cz0iJChmaW5kX2V4aXN0aW5nX3NwbGl0cyAiJGRpciIgIiRyZXZzIikiCisKKwkjIFdlIGNhbid0IHJlc3RyaWN0IHJldi1saXN0IHRvIG9ubHkgJGRpciBoZXJlLCBiZWNhdXNlIHNvbWUgb2Ygb3VyCisJIyBwYXJlbnRzIGhhdmUgdGhlICRkaXIgY29udGVudHMgdGhlIHJvb3QsIGFuZCB0aG9zZSB3b24ndCBtYXRjaC4KKwkjIChhbmQgcmV2LWxpc3QgLS1mb2xsb3cgZG9lc24ndCBzZWVtIHRvIHNvbHZlIHRoaXMpCisJZ3JsPSdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIC0tcmV2ZXJzZSAtLXBhcmVudHMgJHJldnMgJHVucmV2cycKKwlyZXZtYXg9JChldmFsICIkZ3JsIiB8IHdjIC1sKQorCXJldmNvdW50PTAKKwljcmVhdGVjb3VudD0wCisJZXh0cmFjb3VudD0wCisJZXZhbCAiJGdybCIgfAorCXdoaWxlIHJlYWQgcmV2IHBhcmVudHMKKwlkbworCQlwcm9jZXNzX3NwbGl0X2NvbW1pdCAiJHJldiIgIiRwYXJlbnRzIiAwCisJZG9uZSB8fCBleGl0ICQ/CisKKwlsYXRlc3RfbmV3PSQoY2FjaGVfZ2V0IGxhdGVzdF9uZXcpCisJaWYgdGVzdCAteiAiJGxhdGVzdF9uZXciCisJdGhlbgorCQlkaWUgIk5vIG5ldyByZXZpc2lvbnMgd2VyZSBmb3VuZCIKKwlmaQorCisJaWYgdGVzdCAtbiAiJHJlam9pbiIKKwl0aGVuCisJCWRlYnVnICJNZXJnaW5nIHNwbGl0IGJyYW5jaCBpbnRvIEhFQUQuLi4iCisJCWxhdGVzdF9vbGQ9JChjYWNoZV9nZXQgbGF0ZXN0X29sZCkKKwkJZ2l0IG1lcmdlIC1zIG91cnMgXAorCQkJLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIFwKKwkJCS1tICIkKHJlam9pbl9tc2cgIiRkaXIiICIkbGF0ZXN0X29sZCIgIiRsYXRlc3RfbmV3IikiIFwKKwkJCSIkbGF0ZXN0X25ldyIgPiYyIHx8IGV4aXQgJD8KKwlmaQorCWlmIHRlc3QgLW4gIiRicmFuY2giCisJdGhlbgorCQlpZiByZXZfZXhpc3RzICJyZWZzL2hlYWRzLyRicmFuY2giCisJCXRoZW4KKwkJCWlmICEgcmV2X2lzX2Rlc2NlbmRhbnRfb2ZfYnJhbmNoICIkbGF0ZXN0X25ldyIgIiRicmFuY2giCisJCQl0aGVuCisJCQkJZGllICJCcmFuY2ggJyRicmFuY2gnIGlzIG5vdCBhbiBhbmNlc3RvciBvZiBjb21taXQgJyRsYXRlc3RfbmV3Jy4iCisJCQlmaQorCQkJYWN0aW9uPSdVcGRhdGVkJworCQllbHNlCisJCQlhY3Rpb249J0NyZWF0ZWQnCisJCWZpCisJCWdpdCB1cGRhdGUtcmVmIC1tICdzdWJ0cmVlIHNwbGl0JyBcCisJCQkicmVmcy9oZWFkcy8kYnJhbmNoIiAiJGxhdGVzdF9uZXciIHx8IGV4aXQgJD8KKwkJc2F5ICIkYWN0aW9uIGJyYW5jaCAnJGJyYW5jaCciCisJZmkKKwllY2hvICIkbGF0ZXN0X25ldyIKKwlleGl0IDAKK30KKworY21kX21lcmdlICgpIHsKKwlyZXY9JChnaXQgcmV2LXBhcnNlICRkZWZhdWx0IC0tcmV2cy1vbmx5ICIkQCIpIHx8IGV4aXQgJD8KKwllbnN1cmVfc2luZ2xlX3JldiAkcmV2CisJZW5zdXJlX2NsZWFuCisKKwlpZiB0ZXN0IC1uICIkc3F1YXNoIgorCXRoZW4KKwkJZmlyc3Rfc3BsaXQ9IiQoZmluZF9sYXRlc3Rfc3F1YXNoICIkZGlyIikiCisJCWlmIHRlc3QgLXogIiRmaXJzdF9zcGxpdCIKKwkJdGhlbgorCQkJZGllICJDYW4ndCBzcXVhc2gtbWVyZ2U6ICckZGlyJyB3YXMgbmV2ZXIgYWRkZWQuIgorCQlmaQorCQlzZXQgJGZpcnN0X3NwbGl0CisJCW9sZD0kMQorCQlzdWI9JDIKKwkJaWYgdGVzdCAiJHN1YiIgPSAiJHJldiIKKwkJdGhlbgorCQkJc2F5ICJTdWJ0cmVlIGlzIGFscmVhZHkgYXQgY29tbWl0ICRyZXYuIgorCQkJZXhpdCAwCisJCWZpCisJCW5ldz0kKG5ld19zcXVhc2hfY29tbWl0ICIkb2xkIiAiJHN1YiIgIiRyZXYiKSB8fCBleGl0ICQ/CisJCWRlYnVnICJOZXcgc3F1YXNoIGNvbW1pdDogJG5ldyIKKwkJcmV2PSIkbmV3IgorCWZpCisKKwl2ZXJzaW9uPSQoZ2l0IHZlcnNpb24pCisJaWYgdGVzdCAiJHZlcnNpb24iIFw8ICJnaXQgdmVyc2lvbiAxLjciCisJdGhlbgorCQlpZiB0ZXN0IC1uICIkbWVzc2FnZSIKKwkJdGhlbgorCQkJZ2l0IG1lcmdlIC1zIHN1YnRyZWUgLS1tZXNzYWdlPSIkbWVzc2FnZSIgIiRyZXYiCisJCWVsc2UKKwkJCWdpdCBtZXJnZSAtcyBzdWJ0cmVlICIkcmV2IgorCQlmaQorCWVsc2UKKwkJaWYgdGVzdCAtbiAiJG1lc3NhZ2UiCisJCXRoZW4KKwkJCWdpdCBtZXJnZSAtWHN1YnRyZWU9IiRwcmVmaXgiIFwKKwkJCQktLW1lc3NhZ2U9IiRtZXNzYWdlIiAiJHJldiIKKwkJZWxzZQorCQkJZ2l0IG1lcmdlIC1Yc3VidHJlZT0iJHByZWZpeCIgJHJldgorCQlmaQorCWZpCit9CisKK2NtZF9wdWxsICgpIHsKKwlpZiB0ZXN0ICQjIC1uZSAyCisJdGhlbgorCQlkaWUgIllvdSBtdXN0IHByb3ZpZGUgPHJlcG9zaXRvcnk+IDxyZWY+IgorCWZpCisJZW5zdXJlX2NsZWFuCisJZW5zdXJlX3ZhbGlkX3JlZl9mb3JtYXQgIiQyIgorCWdpdCBmZXRjaCAiJEAiIHx8IGV4aXQgJD8KKwlyZXZzPUZFVENIX0hFQUQKKwlzZXQgLS0gJHJldnMKKwljbWRfbWVyZ2UgIiRAIgorfQorCitjbWRfcHVzaCAoKSB7CisJaWYgdGVzdCAkIyAtbmUgMgorCXRoZW4KKwkJZGllICJZb3UgbXVzdCBwcm92aWRlIDxyZXBvc2l0b3J5PiA8cmVmPiIKKwlmaQorCWVuc3VyZV92YWxpZF9yZWZfZm9ybWF0ICIkMiIKKwlpZiB0ZXN0IC1lICIkZGlyIgorCXRoZW4KKwkJcmVwb3NpdG9yeT0kMQorCQlyZWZzcGVjPSQyCisJCWVjaG8gImdpdCBwdXNoIHVzaW5nOiAiICIkcmVwb3NpdG9yeSIgIiRyZWZzcGVjIgorCQlsb2NhbHJldj0kKGdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PSIkcHJlZml4IikgfHwgZGllCisJCWdpdCBwdXNoICIkcmVwb3NpdG9yeSIgIiRsb2NhbHJldiI6InJlZnMvaGVhZHMvJHJlZnNwZWMiCisJZWxzZQorCQlkaWUgIickZGlyJyBtdXN0IGFscmVhZHkgZXhpc3QuIFRyeSAnZ2l0IHN1YnRyZWUgYWRkJy4iCisJZmkKK30KKworImNtZF8kY29tbWFuZCIgIiRAIgpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL2dpdC1zdWJ0cmVlLnR4dCBiL2NvbnRyaWIvc3VidHJlZS9naXQtc3VidHJlZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyZGVkYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3VidHJlZS9naXQtc3VidHJlZS50eHQKQEAgLTAsMCArMSwzNTEgQEAKK2dpdC1zdWJ0cmVlKDEpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc3VidHJlZSAtIE1lcmdlIHN1YnRyZWVzIHRvZ2V0aGVyIGFuZCBzcGxpdCByZXBvc2l0b3J5IGludG8gc3VidHJlZXMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc3VidHJlZScgYWRkICAgLVAgPHByZWZpeD4gPGNvbW1pdD4KKydnaXQgc3VidHJlZScgYWRkICAgLVAgPHByZWZpeD4gPHJlcG9zaXRvcnk+IDxyZWY+CisnZ2l0IHN1YnRyZWUnIHB1bGwgIC1QIDxwcmVmaXg+IDxyZXBvc2l0b3J5PiA8cmVmPgorJ2dpdCBzdWJ0cmVlJyBwdXNoICAtUCA8cHJlZml4PiA8cmVwb3NpdG9yeT4gPHJlZj4KKydnaXQgc3VidHJlZScgbWVyZ2UgLVAgPHByZWZpeD4gPGNvbW1pdD4KKydnaXQgc3VidHJlZScgc3BsaXQgLVAgPHByZWZpeD4gW09QVElPTlNdIFs8Y29tbWl0Pl0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1N1YnRyZWVzIGFsbG93IHN1YnByb2plY3RzIHRvIGJlIGluY2x1ZGVkIHdpdGhpbiBhIHN1YmRpcmVjdG9yeQorb2YgdGhlIG1haW4gcHJvamVjdCwgb3B0aW9uYWxseSBpbmNsdWRpbmcgdGhlIHN1YnByb2plY3QncworZW50aXJlIGhpc3RvcnkuCisKK0ZvciBleGFtcGxlLCB5b3UgY291bGQgaW5jbHVkZSB0aGUgc291cmNlIGNvZGUgZm9yIGEgbGlicmFyeQorYXMgYSBzdWJkaXJlY3Rvcnkgb2YgeW91ciBhcHBsaWNhdGlvbi4KKworU3VidHJlZXMgYXJlIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHN1Ym1vZHVsZXMsIHdoaWNoIGFyZSBtZWFudCBmb3IKK3RoZSBzYW1lIHRhc2suIFVubGlrZSBzdWJtb2R1bGVzLCBzdWJ0cmVlcyBkbyBub3QgbmVlZCBhbnkgc3BlY2lhbAorY29uc3RydWN0aW9ucyAobGlrZSAuZ2l0bW9kdWxlcyBmaWxlcyBvciBnaXRsaW5rcykgYmUgcHJlc2VudCBpbgoreW91ciByZXBvc2l0b3J5LCBhbmQgZG8gbm90IGZvcmNlIGVuZC11c2VycyBvZiB5b3VyCityZXBvc2l0b3J5IHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgb3IgdG8gdW5kZXJzdGFuZCBob3cgc3VidHJlZXMKK3dvcmsuIEEgc3VidHJlZSBpcyBqdXN0IGEgc3ViZGlyZWN0b3J5IHRoYXQgY2FuIGJlCitjb21taXR0ZWQgdG8sIGJyYW5jaGVkLCBhbmQgbWVyZ2VkIGFsb25nIHdpdGggeW91ciBwcm9qZWN0IGluCithbnkgd2F5IHlvdSB3YW50LgorCitUaGV5IGFyZSBhbHNvIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHVzaW5nIHRoZSBzdWJ0cmVlIG1lcmdlCitzdHJhdGVneS4gVGhlIG1haW4gZGlmZmVyZW5jZSBpcyB0aGF0LCBiZXNpZGVzIG1lcmdpbmcKK3RoZSBvdGhlciBwcm9qZWN0IGFzIGEgc3ViZGlyZWN0b3J5LCB5b3UgY2FuIGFsc28gZXh0cmFjdCB0aGUKK2VudGlyZSBoaXN0b3J5IG9mIGEgc3ViZGlyZWN0b3J5IGZyb20geW91ciBwcm9qZWN0IGFuZCBtYWtlIGl0CitpbnRvIGEgc3RhbmRhbG9uZSBwcm9qZWN0LiBVbmxpa2UgdGhlIHN1YnRyZWUgbWVyZ2Ugc3RyYXRlZ3kKK3lvdSBjYW4gYWx0ZXJuYXRlIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlc2UKK3R3byBvcGVyYXRpb25zLiBJZiB0aGUgc3RhbmRhbG9uZSBsaWJyYXJ5IGdldHMgdXBkYXRlZCwgeW91IGNhbgorYXV0b21hdGljYWxseSBtZXJnZSB0aGUgY2hhbmdlcyBpbnRvIHlvdXIgcHJvamVjdDsgaWYgeW91Cit1cGRhdGUgdGhlIGxpYnJhcnkgaW5zaWRlIHlvdXIgcHJvamVjdCwgeW91IGNhbiAic3BsaXQiIHRoZQorY2hhbmdlcyBiYWNrIG91dCBhZ2FpbiBhbmQgbWVyZ2UgdGhlbSBiYWNrIGludG8gdGhlIGxpYnJhcnkKK3Byb2plY3QuCisKK0ZvciBleGFtcGxlLCBpZiBhIGxpYnJhcnkgeW91IG1hZGUgZm9yIG9uZSBhcHBsaWNhdGlvbiBlbmRzIHVwIGJlaW5nCit1c2VmdWwgZWxzZXdoZXJlLCB5b3UgY2FuIGV4dHJhY3QgaXRzIGVudGlyZSBoaXN0b3J5IGFuZCBwdWJsaXNoCit0aGF0IGFzIGl0cyBvd24gZ2l0IHJlcG9zaXRvcnksIHdpdGhvdXQgYWNjaWRlbnRhbGx5CitpbnRlcm1pbmdsaW5nIHRoZSBoaXN0b3J5IG9mIHlvdXIgYXBwbGljYXRpb24gcHJvamVjdC4KKworW1RJUF0KK0luIG9yZGVyIHRvIGtlZXAgeW91ciBjb21taXQgbWVzc2FnZXMgY2xlYW4sIHdlIHJlY29tbWVuZCB0aGF0CitwZW9wbGUgc3BsaXQgdGhlaXIgY29tbWl0cyBiZXR3ZWVuIHRoZSBzdWJ0cmVlcyBhbmQgdGhlIG1haW4KK3Byb2plY3QgYXMgbXVjaCBhcyBwb3NzaWJsZS4gIFRoYXQgaXMsIGlmIHlvdSBtYWtlIGEgY2hhbmdlIHRoYXQKK2FmZmVjdHMgYm90aCB0aGUgbGlicmFyeSBhbmQgdGhlIG1haW4gYXBwbGljYXRpb24sIGNvbW1pdCBpdCBpbgordHdvIHBpZWNlcy4gIFRoYXQgd2F5LCB3aGVuIHlvdSBzcGxpdCB0aGUgbGlicmFyeSBjb21taXRzIG91dAorbGF0ZXIsIHRoZWlyIGRlc2NyaXB0aW9ucyB3aWxsIHN0aWxsIG1ha2Ugc2Vuc2UuICBCdXQgaWYgdGhpcworaXNuJ3QgaW1wb3J0YW50IHRvIHlvdSwgaXQncyBub3QgKm5lY2Vzc2FyeSouICBnaXQgc3VidHJlZSB3aWxsCitzaW1wbHkgbGVhdmUgb3V0IHRoZSBub24tbGlicmFyeS1yZWxhdGVkIHBhcnRzIG9mIHRoZSBjb21taXQKK3doZW4gaXQgc3BsaXRzIGl0IG91dCBpbnRvIHRoZSBzdWJwcm9qZWN0IGxhdGVyLgorCisKK0NPTU1BTkRTCistLS0tLS0tLQorYWRkOjoKKwlDcmVhdGUgdGhlIDxwcmVmaXg+IHN1YnRyZWUgYnkgaW1wb3J0aW5nIGl0cyBjb250ZW50cworCWZyb20gdGhlIGdpdmVuIDxjb21taXQ+IG9yIDxyZXBvc2l0b3J5PiBhbmQgcmVtb3RlIDxyZWY+LgorCUEgbmV3IGNvbW1pdCBpcyBjcmVhdGVkCWF1dG9tYXRpY2FsbHksIGpvaW5pbmcgdGhlIGltcG9ydGVkCisJcHJvamVjdCdzIGhpc3Rvcnkgd2l0aCB5b3VyIG93bi4gIFdpdGggJy0tc3F1YXNoJywgaW1wb3J0cworCW9ubHkgYSBzaW5nbGUgY29tbWl0IGZyb20gdGhlIHN1YnByb2plY3QsIHJhdGhlciB0aGFuIGl0cworCWVudGlyZSBoaXN0b3J5LgorCittZXJnZTo6CisJTWVyZ2UgcmVjZW50IGNoYW5nZXMgdXAgdG8gPGNvbW1pdD4gaW50byB0aGUgPHByZWZpeD4KKwlzdWJ0cmVlLiAgQXMgd2l0aCBub3JtYWwgJ2dpdCBtZXJnZScsIHRoaXMgZG9lc24ndAorCXJlbW92ZSB5b3VyIG93biBsb2NhbCBjaGFuZ2VzOyBpdCBqdXN0IG1lcmdlcyB0aG9zZQorCWNoYW5nZXMgaW50byB0aGUgbGF0ZXN0IDxjb21taXQ+LiAgV2l0aCAnLS1zcXVhc2gnLAorCWNyZWF0ZXMgb25seSBvbmUgY29tbWl0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBjaGFuZ2VzLAorCXJhdGhlciB0aGFuIG1lcmdpbmcgaW4gdGhlIGVudGlyZSBoaXN0b3J5LgorKworSWYgeW91IHVzZSAnLS1zcXVhc2gnLCB0aGUgbWVyZ2UgZGlyZWN0aW9uIGRvZXNuJ3QgYWx3YXlzIGhhdmUgdG8gYmUKK2ZvcndhcmQ7IHlvdSBjYW4gdXNlIHRoaXMgY29tbWFuZCB0byBnbyBiYWNrIGluIHRpbWUgZnJvbSB2Mi41IHRvIHYyLjQsCitmb3IgZXhhbXBsZS4gIElmIHlvdXIgbWVyZ2UgaW50cm9kdWNlcyBhIGNvbmZsaWN0LCB5b3UgY2FuIHJlc29sdmUgaXQgaW4KK3RoZSB1c3VhbCB3YXlzLgorCQorcHVsbDo6CisJRXhhY3RseSBsaWtlICdtZXJnZScsIGJ1dCBwYXJhbGxlbHMgJ2dpdCBwdWxsJyBpbiB0aGF0CisJaXQgZmV0Y2hlcyB0aGUgZ2l2ZW4gcmVmIGZyb20gdGhlIHNwZWNpZmllZCByZW1vdGUKKwlyZXBvc2l0b3J5LgorCQorcHVzaDo6CisJRG9lcyBhICdzcGxpdCcgKHNlZSBiZWxvdykgdXNpbmcgdGhlIDxwcmVmaXg+IHN1cHBsaWVkCisJYW5kIHRoZW4gZG9lcyBhICdnaXQgcHVzaCcgdG8gcHVzaCB0aGUgcmVzdWx0IHRvIHRoZSAKKwlyZXBvc2l0b3J5IGFuZCByZWYuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHVzaCB5b3VyCisJc3VidHJlZSB0byBkaWZmZXJlbnQgYnJhbmNoZXMgb2YgdGhlIHJlbW90ZSByZXBvc2l0b3J5LgorCitzcGxpdDo6CisJRXh0cmFjdCBhIG5ldywgc3ludGhldGljIHByb2plY3QgaGlzdG9yeSBmcm9tIHRoZQorCWhpc3Rvcnkgb2YgdGhlIDxwcmVmaXg+IHN1YnRyZWUuICBUaGUgbmV3IGhpc3RvcnkKKwlpbmNsdWRlcyBvbmx5IHRoZSBjb21taXRzIChpbmNsdWRpbmcgbWVyZ2VzKSB0aGF0CisJYWZmZWN0ZWQgPHByZWZpeD4sIGFuZCBlYWNoIG9mIHRob3NlIGNvbW1pdHMgbm93IGhhcyB0aGUKKwljb250ZW50cyBvZiA8cHJlZml4PiBhdCB0aGUgcm9vdCBvZiB0aGUgcHJvamVjdCBpbnN0ZWFkCisJb2YgaW4gYSBzdWJkaXJlY3RvcnkuICBUaHVzLCB0aGUgbmV3bHkgY3JlYXRlZCBoaXN0b3J5CisJaXMgc3VpdGFibGUgZm9yIGV4cG9ydCBhcyBhIHNlcGFyYXRlIGdpdCByZXBvc2l0b3J5LgorKworQWZ0ZXIgc3BsaXR0aW5nIHN1Y2Nlc3NmdWxseSwgYSBzaW5nbGUgY29tbWl0IGlkIGlzIHByaW50ZWQgdG8gc3Rkb3V0LgorVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgSEVBRCBvZiB0aGUgbmV3bHkgY3JlYXRlZCB0cmVlLCB3aGljaCB5b3UgY2FuCittYW5pcHVsYXRlIGhvd2V2ZXIgeW91IHdhbnQuCisrCitSZXBlYXRlZCBzcGxpdHMgb2YgZXhhY3RseSB0aGUgc2FtZSBoaXN0b3J5IGFyZSBndWFyYW50ZWVkIHRvIGJlCitpZGVudGljYWwgKGkuZS4gdG8gcHJvZHVjZSB0aGUgc2FtZSBjb21taXQgaWRzKS4gIEJlY2F1c2Ugb2YgdGhpcywgaWYKK3lvdSBhZGQgbmV3IGNvbW1pdHMgYW5kIHRoZW4gcmUtc3BsaXQsIHRoZSBuZXcgY29tbWl0cyB3aWxsIGJlIGF0dGFjaGVkCithcyBjb21taXRzIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB5b3UgZ2VuZXJhdGVkIGxhc3QgdGltZSwgc28gJ2dpdCBtZXJnZScKK2FuZCBmcmllbmRzIHdpbGwgd29yayBhcyBleHBlY3RlZC4KKysKK05vdGUgdGhhdCBpZiB5b3UgdXNlICctLXNxdWFzaCcgd2hlbiB5b3UgbWVyZ2UsIHlvdSBzaG91bGQgdXN1YWxseSBub3QKK2p1c3QgJy0tcmVqb2luJyB3aGVuIHlvdSBzcGxpdC4KKworCitPUFRJT05TCistLS0tLS0tCistcTo6CistLXF1aWV0OjoKKwlTdXBwcmVzcyB1bm5lY2Vzc2FyeSBvdXRwdXQgbWVzc2FnZXMgb24gc3RkZXJyLgorCistZDo6CistLWRlYnVnOjoKKwlQcm9kdWNlIGV2ZW4gbW9yZSB1bm5lY2Vzc2FyeSBvdXRwdXQgbWVzc2FnZXMgb24gc3RkZXJyLgorCistUCA8cHJlZml4Pjo6CistLXByZWZpeD08cHJlZml4Pjo6CisJU3BlY2lmeSB0aGUgcGF0aCBpbiB0aGUgcmVwb3NpdG9yeSB0byB0aGUgc3VidHJlZSB5b3UKKwl3YW50IHRvIG1hbmlwdWxhdGUuICBUaGlzIG9wdGlvbiBpcyBtYW5kYXRvcnkKKwlmb3IgYWxsIGNvbW1hbmRzLgorCistbSA8bWVzc2FnZT46OgorLS1tZXNzYWdlPTxtZXNzYWdlPjo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYWRkLCBtZXJnZSBhbmQgcHVsbCAodW5zdXJlKS4KKwlTcGVjaWZ5IDxtZXNzYWdlPiBhcyB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHRoZSBtZXJnZSBjb21taXQuCisKKworT1BUSU9OUyBGT1IgYWRkLCBtZXJnZSwgcHVzaCwgcHVsbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS1zcXVhc2g6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGFkZCwgbWVyZ2UsIGFuZCBwdWxsCisJY29tbWFuZHMuCisrCitJbnN0ZWFkIG9mIG1lcmdpbmcgdGhlIGVudGlyZSBoaXN0b3J5IGZyb20gdGhlIHN1YnRyZWUgcHJvamVjdCwgcHJvZHVjZQorb25seSBhIHNpbmdsZSBjb21taXQgdGhhdCBjb250YWlucyBhbGwgdGhlIGRpZmZlcmVuY2VzIHlvdSB3YW50IHRvCittZXJnZSwgYW5kIHRoZW4gbWVyZ2UgdGhhdCBuZXcgY29tbWl0IGludG8geW91ciBwcm9qZWN0LgorKworVXNpbmcgdGhpcyBvcHRpb24gaGVscHMgdG8gcmVkdWNlIGxvZyBjbHV0dGVyLiBQZW9wbGUgcmFyZWx5IHdhbnQgdG8gc2VlCitldmVyeSBjaGFuZ2UgdGhhdCBoYXBwZW5lZCBiZXR3ZWVuIHYxLjAgYW5kIHYxLjEgb2YgdGhlIGxpYnJhcnkgdGhleSdyZQordXNpbmcsIHNpbmNlIG5vbmUgb2YgdGhlIGludGVyaW0gdmVyc2lvbnMgd2VyZSBldmVyIGluY2x1ZGVkIGluIHRoZWlyCithcHBsaWNhdGlvbi4KKysKK1VzaW5nICctLXNxdWFzaCcgYWxzbyBoZWxwcyBhdm9pZCBwcm9ibGVtcyB3aGVuIHRoZSBzYW1lIHN1YnByb2plY3QgaXMKK2luY2x1ZGVkIG11bHRpcGxlIHRpbWVzIGluIHRoZSBzYW1lIHByb2plY3QsIG9yIGlzIHJlbW92ZWQgYW5kIHRoZW4KK3JlLWFkZGVkLiAgSW4gc3VjaCBhIGNhc2UsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBjb21iaW5lIHRoZQoraGlzdG9yaWVzIGFueXdheSwgc2luY2UgaXQncyB1bmNsZWFyIHdoaWNoIHBhcnQgb2YgdGhlIGhpc3RvcnkgYmVsb25ncwordG8gd2hpY2ggc3VidHJlZS4KKysKK0Z1cnRoZXJtb3JlLCB3aXRoICctLXNxdWFzaCcsIHlvdSBjYW4gc3dpdGNoIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4KK2RpZmZlcmVudCB2ZXJzaW9ucyBvZiBhIHN1YnRyZWUsIHJhdGhlciB0aGFuIHN0cmljdGx5IGZvcndhcmQuICAnZ2l0CitzdWJ0cmVlIG1lcmdlIC0tc3F1YXNoJyBhbHdheXMgYWRqdXN0cyB0aGUgc3VidHJlZSB0byBtYXRjaCB0aGUgZXhhY3RseQorc3BlY2lmaWVkIGNvbW1pdCwgZXZlbiBpZiBnZXR0aW5nIHRvIHRoYXQgY29tbWl0IHdvdWxkIHJlcXVpcmUgdW5kb2luZworc29tZSBjaGFuZ2VzIHRoYXQgd2VyZSBhZGRlZCBlYXJsaWVyLgorKworV2hldGhlciBvciBub3QgeW91IHVzZSAnLS1zcXVhc2gnLCBjaGFuZ2VzIG1hZGUgaW4geW91ciBsb2NhbCByZXBvc2l0b3J5CityZW1haW4gaW50YWN0IGFuZCBjYW4gYmUgbGF0ZXIgc3BsaXQgYW5kIHNlbmQgdXBzdHJlYW0gdG8gdGhlCitzdWJwcm9qZWN0LgorCisKK09QVElPTlMgRk9SIHNwbGl0CistLS0tLS0tLS0tLS0tLS0tLQorLS1hbm5vdGF0ZT08YW5ub3RhdGlvbj46OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBzcGxpdCBjb21tYW5kLgorKworV2hlbiBnZW5lcmF0aW5nIHN5bnRoZXRpYyBoaXN0b3J5LCBhZGQgPGFubm90YXRpb24+IGFzIGEgcHJlZml4IHRvIGVhY2gKK2NvbW1pdCBtZXNzYWdlLiAgU2luY2Ugd2UncmUgY3JlYXRpbmcgbmV3IGNvbW1pdHMgd2l0aCB0aGUgc2FtZSBjb21taXQKK21lc3NhZ2UsIGJ1dCBwb3NzaWJseSBkaWZmZXJlbnQgY29udGVudCwgZnJvbSB0aGUgb3JpZ2luYWwgY29tbWl0cywgdGhpcworY2FuIGhlbHAgdG8gZGlmZmVyZW50aWF0ZSB0aGVtIGFuZCBhdm9pZCBjb25mdXNpb24uCisrCitXaGVuZXZlciB5b3Ugc3BsaXQsIHlvdSBuZWVkIHRvIHVzZSB0aGUgc2FtZSA8YW5ub3RhdGlvbj4sIG9yIGVsc2UgeW91Citkb24ndCBoYXZlIGEgZ3VhcmFudGVlIHRoYXQgdGhlIG5ldyByZS1jcmVhdGVkIGhpc3Rvcnkgd2lsbCBiZSBpZGVudGljYWwKK3RvIHRoZSBvbGQgb25lLiAgVGhhdCB3aWxsIHByZXZlbnQgbWVyZ2luZyBmcm9tIHdvcmtpbmcgY29ycmVjdGx5LiAgZ2l0CitzdWJ0cmVlIHRyaWVzIHRvIG1ha2UgaXQgd29yayBhbnl3YXksIHBhcnRpY3VsYXJseSBpZiB5b3UgdXNlIC0tcmVqb2luLAorYnV0IGl0IG1heSBub3QgYWx3YXlzIGJlIGVmZmVjdGl2ZS4KKworLWIgPGJyYW5jaD46OgorLS1icmFuY2g9PGJyYW5jaD46OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBzcGxpdCBjb21tYW5kLgorKworQWZ0ZXIgZ2VuZXJhdGluZyB0aGUgc3ludGhldGljIGhpc3RvcnksIGNyZWF0ZSBhIG5ldyBicmFuY2ggY2FsbGVkCis8YnJhbmNoPiB0aGF0IGNvbnRhaW5zIHRoZSBuZXcgaGlzdG9yeS4gIFRoaXMgaXMgc3VpdGFibGUgZm9yIGltbWVkaWF0ZQorcHVzaGluZyB1cHN0cmVhbS4gIDxicmFuY2g+IG11c3Qgbm90IGFscmVhZHkgZXhpc3QuCisKKy0taWdub3JlLWpvaW5zOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgc3BsaXQgY29tbWFuZC4KKysKK0lmIHlvdSB1c2UgJy0tcmVqb2luJywgZ2l0IHN1YnRyZWUgYXR0ZW1wdHMgdG8gb3B0aW1pemUgaXRzIGhpc3RvcnkKK3JlY29uc3RydWN0aW9uIHRvIGdlbmVyYXRlIG9ubHkgdGhlIG5ldyBjb21taXRzIHNpbmNlIHRoZSBsYXN0CisnLS1yZWpvaW4nLiAgJy0taWdub3JlLWpvaW4nIGRpc2FibGVzIHRoaXMgYmVoYXZpb3VyLCBmb3JjaW5nIGl0IHRvCityZWdlbmVyYXRlIHRoZSBlbnRpcmUgaGlzdG9yeS4gIEluIGEgbGFyZ2UgcHJvamVjdCwgdGhpcyBjYW4gdGFrZSBhIGxvbmcKK3RpbWUuCisKKy0tb250bz08b250bz46OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBzcGxpdCBjb21tYW5kLgorKworSWYgeW91ciBzdWJ0cmVlIHdhcyBvcmlnaW5hbGx5IGltcG9ydGVkIHVzaW5nIHNvbWV0aGluZyBvdGhlciB0aGFuIGdpdAorc3VidHJlZSwgaXRzIGhpc3RvcnkgbWF5IG5vdCBtYXRjaCB3aGF0IGdpdCBzdWJ0cmVlIGlzIGV4cGVjdGluZy4gIEluCit0aGF0IGNhc2UsIHlvdSBjYW4gc3BlY2lmeSB0aGUgY29tbWl0IGlkIDxvbnRvPiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZQorZmlyc3QgcmV2aXNpb24gb2YgdGhlIHN1YnByb2plY3QncyBoaXN0b3J5IHRoYXQgd2FzIGltcG9ydGVkIGludG8geW91cgorcHJvamVjdCwgYW5kIGdpdCBzdWJ0cmVlIHdpbGwgYXR0ZW1wdCB0byBidWlsZCBpdHMgaGlzdG9yeSBmcm9tIHRoZXJlLgorKworSWYgeW91IHVzZWQgJ2dpdCBzdWJ0cmVlIGFkZCcsIHlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0aGlzIG9wdGlvbi4KKworLS1yZWpvaW46OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBzcGxpdCBjb21tYW5kLgorKworQWZ0ZXIgc3BsaXR0aW5nLCBtZXJnZSB0aGUgbmV3bHkgY3JlYXRlZCBzeW50aGV0aWMgaGlzdG9yeSBiYWNrIGludG8KK3lvdXIgbWFpbiBwcm9qZWN0LiAgVGhhdCB3YXksIGZ1dHVyZSBzcGxpdHMgY2FuIHNlYXJjaCBvbmx5IHRoZSBwYXJ0IG9mCitoaXN0b3J5IHRoYXQgaGFzIGJlZW4gYWRkZWQgc2luY2UgdGhlIG1vc3QgcmVjZW50IC0tcmVqb2luLgorKworSWYgeW91ciBzcGxpdCBjb21taXRzIGVuZCB1cCBtZXJnZWQgaW50byB0aGUgdXBzdHJlYW0gc3VicHJvamVjdCwgYW5kCit0aGVuIHlvdSB3YW50IHRvIGdldCB0aGUgbGF0ZXN0IHVwc3RyZWFtIHZlcnNpb24sIHRoaXMgd2lsbCBhbGxvdyBnaXQncworbWVyZ2UgYWxnb3JpdGhtIHRvIG1vcmUgaW50ZWxsaWdlbnRseSBhdm9pZCBjb25mbGljdHMgKHNpbmNlIGl0IGtub3dzCit0aGVzZSBzeW50aGV0aWMgY29tbWl0cyBhcmUgYWxyZWFkeSBwYXJ0IG9mIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5KS4KKysKK1VuZm9ydHVuYXRlbHksIHVzaW5nIHRoaXMgb3B0aW9uIHJlc3VsdHMgaW4gJ2dpdCBsb2cnIHNob3dpbmcgYW4gZXh0cmEKK2NvcHkgb2YgZXZlcnkgbmV3IGNvbW1pdCB0aGF0IHdhcyBjcmVhdGVkICh0aGUgb3JpZ2luYWwsIGFuZCB0aGUKK3N5bnRoZXRpYyBvbmUpLgorKworSWYgeW91IGRvIGFsbCB5b3VyIG1lcmdlcyB3aXRoICctLXNxdWFzaCcsIGRvbid0IHVzZSAnLS1yZWpvaW4nIHdoZW4geW91CitzcGxpdCwgYmVjYXVzZSB5b3UgZG9uJ3Qgd2FudCB0aGUgc3VicHJvamVjdCdzIGhpc3RvcnkgdG8gYmUgcGFydCBvZgoreW91ciBwcm9qZWN0IGFueXdheS4KKworCitFWEFNUExFIDEuIEFkZCBjb21tYW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMZXQncyBhc3N1bWUgdGhhdCB5b3UgaGF2ZSBhIGxvY2FsIHJlcG9zaXRvcnkgdGhhdCB5b3Ugd291bGQgbGlrZQordG8gYWRkIGFuIGV4dGVybmFsIHZlbmRvciBsaWJyYXJ5IHRvLiBJbiB0aGlzIGNhc2Ugd2Ugd2lsbCBhZGQgdGhlCitnaXQtc3VidHJlZSByZXBvc2l0b3J5IGFzIGEgc3ViZGlyZWN0b3J5IG9mIHlvdXIgYWxyZWFkeSBleGlzdGluZworZ2l0LWV4dGVuc2lvbnMgcmVwb3NpdG9yeSBpbiB+L2dpdC1leHRlbnNpb25zLzoKKworCSQgZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4PWdpdC1zdWJ0cmVlIC0tc3F1YXNoIFwKKwkJZ2l0Oi8vZ2l0aHViLmNvbS9hcGVud2Fyci9naXQtc3VidHJlZS5naXQgbWFzdGVyCisKKydtYXN0ZXInIG5lZWRzIHRvIGJlIGEgdmFsaWQgcmVtb3RlIHJlZiBhbmQgY2FuIGJlIGEgZGlmZmVyZW50IGJyYW5jaAorbmFtZQorCitZb3UgY2FuIG9taXQgdGhlIC0tc3F1YXNoIGZsYWcsIGJ1dCBkb2luZyBzbyB3aWxsIGluY3JlYXNlIHRoZSBudW1iZXIKK29mIGNvbW1pdHMgdGhhdCBhcmUgaW5jbHVkZWQgaW4geW91ciBsb2NhbCByZXBvc2l0b3J5LgorCitXZSBub3cgaGF2ZSBhIH4vZ2l0LWV4dGVuc2lvbnMvZ2l0LXN1YnRyZWUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgY29kZQorZnJvbSB0aGUgbWFzdGVyIGJyYW5jaCBvZiBnaXQ6Ly9naXRodWIuY29tL2FwZW53YXJyL2dpdC1zdWJ0cmVlLmdpdAoraW4gb3VyIGdpdC1leHRlbnNpb25zIHJlcG9zaXRvcnkuCisKK0VYQU1QTEUgMi4gRXh0cmFjdCBhIHN1YnRyZWUgdXNpbmcgY29tbWl0LCBtZXJnZSBhbmQgcHVsbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMZXQncyB1c2UgdGhlIHJlcG9zaXRvcnkgZm9yIHRoZSBnaXQgc291cmNlIGNvZGUgYXMgYW4gZXhhbXBsZS4KK0ZpcnN0LCBnZXQgeW91ciBvd24gY29weSBvZiB0aGUgZ2l0LmdpdCByZXBvc2l0b3J5OgorCisJJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9naXQvZ2l0LmdpdCB0ZXN0LWdpdAorCSQgY2QgdGVzdC1naXQKKworZ2l0d2ViIChjb21taXQgMTEzMGVmMykgd2FzIG1lcmdlZCBpbnRvIGdpdCBhcyBvZiBjb21taXQKKzBhOGY0ZjAsIGFmdGVyIHdoaWNoIGl0IHdhcyBubyBsb25nZXIgbWFpbnRhaW5lZCBzZXBhcmF0ZWx5LiAKK0J1dCBpbWFnaW5lIGl0IGhhZCBiZWVuIG1haW50YWluZWQgc2VwYXJhdGVseSwgYW5kIHdlIHdhbnRlZCB0bworZXh0cmFjdCBnaXQncyBjaGFuZ2VzIHRvIGdpdHdlYiBzaW5jZSB0aGF0IHRpbWUsIHRvIHNoYXJlIHdpdGgKK3RoZSB1cHN0cmVhbS4gIFlvdSBjb3VsZCBkbyB0aGlzOgorCisJJCBnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD1naXR3ZWIgLS1hbm5vdGF0ZT0nKHNwbGl0KSAnIFwKKyAgICAgICAgCTBhOGY0ZjBeLi4gLS1vbnRvPTExMzBlZjMgLS1yZWpvaW4gXAorICAgICAgICAJLS1icmFuY2ggZ2l0d2ViLWxhdGVzdAorICAgICAgICAkIGdpdGsgZ2l0d2ViLWxhdGVzdAorICAgICAgICAkIGdpdCBwdXNoIGdpdEBnaXRodWIuY29tOndoYXRldmVyL2dpdHdlYi5naXQgZ2l0d2ViLWxhdGVzdDptYXN0ZXIKKyAgICAgICAgCisoV2UgdXNlICcwYThmNGYwXi4uJyBiZWNhdXNlIHRoYXQgbWVhbnMgImFsbCB0aGUgY2hhbmdlcyBmcm9tCiswYThmNGYwIHRvIHRoZSBjdXJyZW50IHZlcnNpb24sIGluY2x1ZGluZyAwYThmNGYwIGl0c2VsZi4iKQorCitJZiBnaXR3ZWIgaGFkIG9yaWdpbmFsbHkgYmVlbiBtZXJnZWQgdXNpbmcgJ2dpdCBzdWJ0cmVlIGFkZCcgKG9yCithIHByZXZpb3VzIHNwbGl0IGhhZCBhbHJlYWR5IGJlZW4gZG9uZSB3aXRoIC0tcmVqb2luIHNwZWNpZmllZCkKK3RoZW4geW91IGNhbiBkbyBhbGwgeW91ciBzcGxpdHMgd2l0aG91dCBoYXZpbmcgdG8gcmVtZW1iZXIgYW55Cit3ZWlyZCBjb21taXQgaWRzOgorCisJJCBnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD1naXR3ZWIgLS1hbm5vdGF0ZT0nKHNwbGl0KSAnIC0tcmVqb2luIFwKKwkJLS1icmFuY2ggZ2l0d2ViLWxhdGVzdDIKKworQW5kIHlvdSBjYW4gbWVyZ2UgY2hhbmdlcyBiYWNrIGluIGZyb20gdGhlIHVwc3RyZWFtIHByb2plY3QganVzdAorYXMgZWFzaWx5OgorCisJJCBnaXQgc3VidHJlZSBwdWxsIC0tcHJlZml4PWdpdHdlYiBcCisJCWdpdEBnaXRodWIuY29tOndoYXRldmVyL2dpdHdlYi5naXQgbWFzdGVyCisKK09yLCB1c2luZyAnLS1zcXVhc2gnLCB5b3UgY2FuIGFjdHVhbGx5IHJld2luZCB0byBhbiBlYXJsaWVyCit2ZXJzaW9uIG9mIGdpdHdlYjoKKworCSQgZ2l0IHN1YnRyZWUgbWVyZ2UgLS1wcmVmaXg9Z2l0d2ViIC0tc3F1YXNoIGdpdHdlYi1sYXRlc3R+MTAKKworVGhlbiBtYWtlIHNvbWUgY2hhbmdlczoKKworCSQgZGF0ZSA+Z2l0d2ViL215ZmlsZQorCSQgZ2l0IGFkZCBnaXR3ZWIvbXlmaWxlCisJJCBnaXQgY29tbWl0IC1tICdjcmVhdGVkIG15ZmlsZScKKworQW5kIGZhc3QgZm9yd2FyZCBhZ2FpbjoKKworCSQgZ2l0IHN1YnRyZWUgbWVyZ2UgLS1wcmVmaXg9Z2l0d2ViIC0tc3F1YXNoIGdpdHdlYi1sYXRlc3QKKworQW5kIG5vdGljZSB0aGF0IHlvdXIgY2hhbmdlIGlzIHN0aWxsIGludGFjdDoKKwkKKwkkIGxzIC1sIGdpdHdlYi9teWZpbGUKKworQW5kIHlvdSBjYW4gc3BsaXQgaXQgb3V0IGFuZCBsb29rIGF0IHlvdXIgY2hhbmdlcyB2ZXJzdXMKK3RoZSBzdGFuZGFyZCBnaXR3ZWI6CisKKwlnaXQgbG9nIGdpdHdlYi1sYXRlc3QuLiQoZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9Z2l0d2ViKQorCitFWEFNUExFIDMuIEV4dHJhY3QgYSBzdWJ0cmVlIHVzaW5nIGJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N1cHBvc2UgeW91IGhhdmUgYSBzb3VyY2UgZGlyZWN0b3J5IHdpdGggbWFueSBmaWxlcyBhbmQKK3N1YmRpcmVjdG9yaWVzLCBhbmQgeW91IHdhbnQgdG8gZXh0cmFjdCB0aGUgbGliIGRpcmVjdG9yeSB0byBpdHMgb3duCitnaXQgcHJvamVjdC4gSGVyZSdzIGEgc2hvcnQgd2F5IHRvIGRvIGl0OgorCitGaXJzdCwgbWFrZSB0aGUgbmV3IHJlcG9zaXRvcnkgd2hlcmV2ZXIgeW91IHdhbnQ6CisKKwkkIDxnbyB0byB0aGUgbmV3IGxvY2F0aW9uPgorCSQgZ2l0IGluaXQgLS1iYXJlCisKK0JhY2sgaW4geW91ciBvcmlnaW5hbCBkaXJlY3Rvcnk6CisKKwkkIGdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PWxpYiAtLWFubm90YXRlPSIoc3BsaXQpIiAtYiBzcGxpdAorCitUaGVuIHB1c2ggdGhlIG5ldyBicmFuY2ggb250byB0aGUgbmV3IGVtcHR5IHJlcG9zaXRvcnk6CisKKwkkIGdpdCBwdXNoIDxuZXctcmVwbz4gc3BsaXQ6bWFzdGVyCisKKworQVVUSE9SCistLS0tLS0KK1dyaXR0ZW4gYnkgQXZlcnkgUGVubmFydW4gPGFwZW53YXJyQGdtYWlsLmNvbT4KKworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3VidHJlZS90L01ha2VmaWxlIGIvY29udHJpYi9zdWJ0cmVlL3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc2ODk4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3VidHJlZS90L01ha2VmaWxlCkBAIC0wLDAgKzEsODYgQEAKKyMgUnVuIHRlc3RzCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsKKworI0dJVF9URVNUX09QVFM9LS12ZXJib3NlIC0tZGVidWcKK1NIRUxMX1BBVEggPz0gJChTSEVMTCkKK1BFUkxfUEFUSCA/PSAvdXNyL2Jpbi9wZXJsCitUQVIgPz0gJChUQVIpCitSTSA/PSBybSAtZgorUFJPVkUgPz0gcHJvdmUKK0RFRkFVTFRfVEVTVF9UQVJHRVQgPz0gdGVzdAorVEVTVF9MSU5UID89IHRlc3QtbGludAorCitpZmRlZiBURVNUX09VVFBVVF9ESVJFQ1RPUlkKK1RFU1RfUkVTVUxUU19ESVJFQ1RPUlkgPSAkKFRFU1RfT1VUUFVUX0RJUkVDVE9SWSkvdGVzdC1yZXN1bHRzCitlbHNlCitURVNUX1JFU1VMVFNfRElSRUNUT1JZID0gLi4vLi4vLi4vdC90ZXN0LXJlc3VsdHMKK2VuZGlmCisKKyMgU2hlbGwgcXVvdGU7CitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKK1BFUkxfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoUEVSTF9QQVRIKSkKK1RFU1RfUkVTVUxUU19ESVJFQ1RPUllfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFRFU1RfUkVTVUxUU19ESVJFQ1RPUlkpKQorCitUID0gJChzb3J0ICQod2lsZGNhcmQgdFswLTldWzAtOV1bMC05XVswLTldLSouc2gpKQorVFNWTiA9ICQoc29ydCAkKHdpbGRjYXJkIHQ5MVswLTldWzAtOV0tKi5zaCkpCitUR0lUV0VCID0gJChzb3J0ICQod2lsZGNhcmQgdDk1WzAtOV1bMC05XS0qLnNoKSkKK1RIRUxQRVJTID0gJChzb3J0ICQoZmlsdGVyLW91dCAkKFQpLCQod2lsZGNhcmQgKi5zaCkpKQorCithbGw6ICQoREVGQVVMVF9URVNUX1RBUkdFVCkKKwordGVzdDogcHJlLWNsZWFuICQoVEVTVF9MSU5UKQorCSQoTUFLRSkgYWdncmVnYXRlLXJlc3VsdHMtYW5kLWNsZWFudXAKKworcHJvdmU6IHByZS1jbGVhbiAkKFRFU1RfTElOVCkKKwlAZWNobyAiKioqIHByb3ZlICoqKiI7IEdJVF9DT05GSUc9LmdpdC9jb25maWcgJChQUk9WRSkgLS1leGVjICckKFNIRUxMX1BBVEhfU1EpJyAkKEdJVF9QUk9WRV9PUFRTKSAkKFQpIDo6ICQoR0lUX1RFU1RfT1BUUykKKwkkKE1BS0UpIGNsZWFuLWV4Y2VwdC1wcm92ZS1jYWNoZQorCiskKFQpOgorCUBlY2hvICIqKiogJEAgKioqIjsgR0lUX0NPTkZJRz0uZ2l0L2NvbmZpZyAnJChTSEVMTF9QQVRIX1NRKScgJEAgJChHSVRfVEVTVF9PUFRTKQorCitwcmUtY2xlYW46CisJJChSTSkgLXIgJyQoVEVTVF9SRVNVTFRTX0RJUkVDVE9SWV9TUSknCisKK2NsZWFuLWV4Y2VwdC1wcm92ZS1jYWNoZToKKwkkKFJNKSAtciAndHJhc2ggZGlyZWN0b3J5Jy4qICckKFRFU1RfUkVTVUxUU19ESVJFQ1RPUllfU1EpJworCSQoUk0pIC1yIHZhbGdyaW5kL2JpbgorCitjbGVhbjogY2xlYW4tZXhjZXB0LXByb3ZlLWNhY2hlCisJJChSTSkgLnByb3ZlCisKK3Rlc3QtbGludDogdGVzdC1saW50LWR1cGxpY2F0ZXMgdGVzdC1saW50LWV4ZWN1dGFibGUgdGVzdC1saW50LXNoZWxsLXN5bnRheAorCit0ZXN0LWxpbnQtZHVwbGljYXRlczoKKwlAZHVwcz1gZWNobyAkKFQpIHwgdHIgJyAnICdcbicgfCBzZWQgJ3MvLS4qLy8nIHwgc29ydCB8IHVuaXEgLWRgICYmIFwKKwkJdGVzdCAteiAiJCRkdXBzIiB8fCB7IFwKKwkJZWNobyA+JjIgImR1cGxpY2F0ZSB0ZXN0IG51bWJlcnM6IiAkJGR1cHM7IGV4aXQgMTsgfQorCit0ZXN0LWxpbnQtZXhlY3V0YWJsZToKKwlAYmFkPWBmb3IgaSBpbiAkKFQpOyBkbyB0ZXN0IC14ICIkJGkiIHx8IGVjaG8gJCRpOyBkb25lYCAmJiBcCisJCXRlc3QgLXogIiQkYmFkIiB8fCB7IFwKKwkJZWNobyA+JjIgIm5vbi1leGVjdXRhYmxlIHRlc3RzOiIgJCRiYWQ7IGV4aXQgMTsgfQorCit0ZXN0LWxpbnQtc2hlbGwtc3ludGF4OgorCUAnJChQRVJMX1BBVEhfU1EpJyAuLi8uLi8uLi90L2NoZWNrLW5vbi1wb3J0YWJsZS1zaGVsbC5wbCAkKFQpICQoVEhFTFBFUlMpCisKK2FnZ3JlZ2F0ZS1yZXN1bHRzLWFuZC1jbGVhbnVwOiAkKFQpCisJJChNQUtFKSBhZ2dyZWdhdGUtcmVzdWx0cworCSQoTUFLRSkgY2xlYW4KKworYWdncmVnYXRlLXJlc3VsdHM6CisJZm9yIGYgaW4gJyQoVEVTVF9SRVNVTFRTX0RJUkVDVE9SWV9TUSknL3QqLSouY291bnRzOyBkbyBcCisJCWVjaG8gIiQkZiI7IFwKKwlkb25lIHwgJyQoU0hFTExfUEFUSF9TUSknIC4uLy4uLy4uL3QvYWdncmVnYXRlLXJlc3VsdHMuc2gKKwordmFsZ3JpbmQ6CisJJChNQUtFKSBHSVRfVEVTVF9PUFRTPSIkKEdJVF9URVNUX09QVFMpIC0tdmFsZ3JpbmQiCisKK3Rlc3QtcmVzdWx0czoKKwlta2RpciAtcCB0ZXN0LXJlc3VsdHMKKworLlBIT05ZOiBwcmUtY2xlYW4gJChUKSBhZ2dyZWdhdGUtcmVzdWx0cyBjbGVhbiB2YWxncmluZApkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL3QvdDc5MDAtc3VidHJlZS5zaCBiL2NvbnRyaWIvc3VidHJlZS90L3Q3OTAwLXN1YnRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTdmZjRiMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3VidHJlZS90L3Q3OTAwLXN1YnRyZWUuc2gKQEAgLTAsMCArMSwxMDM0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyIEF2ZXJ5IFBlbm5hcmF1bQorIyBDb3B5cmlnaHQgKGMpIDIwMTUgQWxleGV5IFNodW1raW4KKyMKK3Rlc3RfZGVzY3JpcHRpb249J0Jhc2ljIHBvcmNlbGFpbiBzdXBwb3J0IGZvciBzdWJ0cmVlcworCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIGJhc2ljIG9wZXJhdGlvbiBvZiB0aGUgYWRkLCBwdWxsLCBtZXJnZQorYW5kIHNwbGl0IHN1YmNvbW1hbmRzIG9mIGdpdCBzdWJ0cmVlLgorJworCitURVNUX0RJUkVDVE9SWT0kKHB3ZCkvLi4vLi4vLi4vdAorZXhwb3J0IFRFU1RfRElSRUNUT1JZCisKKy4gLi4vLi4vLi4vdC90ZXN0LWxpYi5zaAorCitzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8oKQoreworCXRlc3RfY3JlYXRlX3JlcG8gIiQxIiAmJgorCSgKKwkJY2QgIiQxIiAmJgorCQlnaXQgY29uZmlnIGxvZy5kYXRlIHJlbGF0aXZlCisJKQorfQorCitjcmVhdGUoKQoreworCWVjaG8gIiQxIiA+IiQxIiAmJgorCWdpdCBhZGQgIiQxIgorfQorCitjaGVja19lcXVhbCgpCit7CisJdGVzdF9kZWJ1ZyAnZWNobycKKwl0ZXN0X2RlYnVnICJlY2hvIFwiY2hlY2sgYTpcIiBcInskMX1cIiIKKwl0ZXN0X2RlYnVnICJlY2hvIFwiICAgICAgYjpcIiBcInskMn1cIiIKKwlpZiBbICIkMSIgPSAiJDIiIF07IHRoZW4KKwkJcmV0dXJuIDAKKwllbHNlCisJCXJldHVybiAxCisJZmkKK30KKwordW5kbygpCit7CisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfgorfQorCisjIE1ha2Ugc3VyZSBubyBwYXRjaCBjaGFuZ2VzIG1vcmUgdGhhbiBvbmUgZmlsZS4KKyMgVGhlIG9yaWdpbmFsIHNldCBvZiBjb21taXRzIGNoYW5nZWQgb25seSBvbmUgZmlsZSBlYWNoLgorIyBBIG11bHRpLWZpbGUgY2hhbmdlIHdvdWxkIGltcGx5IHRoYXQgd2UgcHJ1bmVkIGNvbW1pdHMKKyMgdG9vIGFnZ3Jlc3NpdmVseS4KK2pvaW5fY29tbWl0cygpCit7CisJY29tbWl0PQorCWFsbD0KKwl3aGlsZSByZWFkIHggeTsgZG8KKwkJaWYgWyAteiAiJHgiIF07IHRoZW4KKwkJCWNvbnRpbnVlCisJCWVsaWYgWyAiJHgiID0gImNvbW1pdDoiIF07IHRoZW4KKwkJCWlmIFsgLW4gIiRjb21taXQiIF07IHRoZW4KKwkJCQllY2hvICIkY29tbWl0ICRhbGwiCisJCQkJYWxsPQorCQkJZmkKKwkJCWNvbW1pdD0iJHkiCisJCWVsc2UKKwkJCWFsbD0iJGFsbCAkeSIKKwkJZmkKKwlkb25lCisJZWNobyAiJGNvbW1pdCAkYWxsIgorfQorCit0ZXN0X2NyZWF0ZV9jb21taXQoKSAoCisJcmVwbz0kMSAmJgorCWNvbW1pdD0kMiAmJgorCWNkICIkcmVwbyIgJiYKKwlta2RpciAtcCAiJChkaXJuYW1lICIkY29tbWl0IikiIFwKKwl8fCBlcnJvciAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yIGNvbW1pdCIKKwllY2hvICIkY29tbWl0IiA+IiRjb21taXQiICYmCisJZ2l0IGFkZCAiJGNvbW1pdCIgfHwgZXJyb3IgIkNvdWxkIG5vdCBhZGQgY29tbWl0IgorCWdpdCBjb21taXQgLW0gIiRjb21taXQiIHx8IGVycm9yICJDb3VsZCBub3QgY29tbWl0IgorKQorCitsYXN0X2NvbW1pdF9tZXNzYWdlKCkKK3sKKwlnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolcyAtMQorfQorCitzdWJ0cmVlX3Rlc3RfY291bnQ9MAorbmV4dF90ZXN0KCkgeworCXN1YnRyZWVfdGVzdF9jb3VudD0kKCgkc3VidHJlZV90ZXN0X2NvdW50KzEpKQorfQorCisjCisjIFRlc3RzIGZvciAnZ2l0IHN1YnRyZWUgYWRkJworIworCituZXh0X3Rlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIG1lcmdlIGZyb20gbm9uLWV4aXN0ZW50IHN1YnRyZWUnICcKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjEgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjEgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRAorCSkKKycKKworbmV4dF90ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBwdWxsIGZyb20gbm9uLWV4aXN0ZW50IHN1YnRyZWUnICcKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjEgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjEgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3VidHJlZSBwdWxsIC0tcHJlZml4PSJzdWIgZGlyIiAuLyJzdWIgcHJvaiIgbWFzdGVyCisJKScKKworbmV4dF90ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3VicHJvaiBhcyBzdWJ0cmVlIGludG8gc3ViIGRpci8gd2l0aCAtLXByZWZpeCcgJworCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiBtYWluMSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMSAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBmZXRjaCAuLyJzdWIgcHJvaiIgbWFzdGVyICYmCisJCWdpdCBzdWJ0cmVlIGFkZCAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRCAmJgorCQljaGVja19lcXVhbCAiJChsYXN0X2NvbW1pdF9tZXNzYWdlKSIgIkFkZCAnXCcnc3ViIGRpci8nXCcnIGZyb20gY29tbWl0ICdcJyckKGdpdCByZXYtcGFyc2UgRkVUQ0hfSEVBRCknXCcnIgorCSkKKycKKworbmV4dF90ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3VicHJvaiBhcyBzdWJ0cmVlIGludG8gc3ViIGRpci8gd2l0aCAtLXByZWZpeCBhbmQgLS1tZXNzYWdlJyAnCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIG1haW4xICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIxICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4PSJzdWIgZGlyIiAtLW1lc3NhZ2U9IkFkZGVkIHN1YnByb2plY3QiIEZFVENIX0hFQUQgJiYKKwkJY2hlY2tfZXF1YWwgIiQobGFzdF9jb21taXRfbWVzc2FnZSkiICJBZGRlZCBzdWJwcm9qZWN0IgorCSkKKycKKworbmV4dF90ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3VicHJvaiBhcyBzdWJ0cmVlIGludG8gc3ViIGRpci8gd2l0aCAtLXByZWZpeCBhcyAtUCBhbmQgLS1tZXNzYWdlIGFzIC1tJyAnCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIG1haW4xICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIxICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgYWRkIC1QICJzdWIgZGlyIiAtbSAiQWRkZWQgc3VicHJvamVjdCIgRkVUQ0hfSEVBRCAmJgorCQljaGVja19lcXVhbCAiJChsYXN0X2NvbW1pdF9tZXNzYWdlKSIgIkFkZGVkIHN1YnByb2plY3QiCisJKQorJworCituZXh0X3Rlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzdWJwcm9qIGFzIHN1YnRyZWUgaW50byBzdWIgZGlyLyB3aXRoIC0tc3F1YXNoIGFuZCAtLXByZWZpeCBhbmQgLS1tZXNzYWdlJyAnCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIG1haW4xICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIxICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4PSJzdWIgZGlyIiAtLW1lc3NhZ2U9IkFkZGVkIHN1YnByb2plY3Qgd2l0aCBzcXVhc2giIC0tc3F1YXNoIEZFVENIX0hFQUQgJiYKKwkJY2hlY2tfZXF1YWwgIiQobGFzdF9jb21taXRfbWVzc2FnZSkiICJBZGRlZCBzdWJwcm9qZWN0IHdpdGggc3F1YXNoIgorCSkKKycKKworIworIyBUZXN0cyBmb3IgJ2dpdCBzdWJ0cmVlIG1lcmdlJworIworCituZXh0X3Rlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG5ldyBzdWJwcm9qIGhpc3RvcnkgaW50byBzdWIgZGlyLyB3aXRoIC0tcHJlZml4JyAnCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIG1haW4xICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIxICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4PSJzdWIgZGlyIiBGRVRDSF9IRUFECisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMiAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBmZXRjaCAuLyJzdWIgcHJvaiIgbWFzdGVyICYmCisJCWdpdCBzdWJ0cmVlIG1lcmdlIC0tcHJlZml4PSJzdWIgZGlyIiBGRVRDSF9IRUFEICYmCisJCWNoZWNrX2VxdWFsICIkKGxhc3RfY29tbWl0X21lc3NhZ2UpIiAiTWVyZ2UgY29tbWl0ICdcJyckKGdpdCByZXYtcGFyc2UgRkVUQ0hfSEVBRCknXCcnIgorCSkKKycKKworbmV4dF90ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBuZXcgc3VicHJvaiBoaXN0b3J5IGludG8gc3ViIGRpci8gd2l0aCAtLXByZWZpeCBhbmQgLS1tZXNzYWdlJyAnCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIG1haW4xICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIxICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4PSJzdWIgZGlyIiBGRVRDSF9IRUFECisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMiAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBmZXRjaCAuLyJzdWIgcHJvaiIgbWFzdGVyICYmCisJCWdpdCBzdWJ0cmVlIG1lcmdlIC0tcHJlZml4PSJzdWIgZGlyIiAtLW1lc3NhZ2U9Ik1lcmdlZCBjaGFuZ2VzIGZyb20gc3VicHJvamVjdCIgRkVUQ0hfSEVBRCAmJgorCQljaGVja19lcXVhbCAiJChsYXN0X2NvbW1pdF9tZXNzYWdlKSIgIk1lcmdlZCBjaGFuZ2VzIGZyb20gc3VicHJvamVjdCIKKwkpCisnCisKK25leHRfdGVzdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgbmV3IHN1YnByb2ogaGlzdG9yeSBpbnRvIHN1YiBkaXIvIHdpdGggLS1zcXVhc2ggYW5kIC0tcHJlZml4IGFuZCAtLW1lc3NhZ2UnICcKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiICYmCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjEgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjEgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBhZGQgLS1wcmVmaXg9InN1YiBkaXIiIEZFVENIX0hFQUQKKwkpICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIyICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgbWVyZ2UgLS1wcmVmaXg9InN1YiBkaXIiIC0tbWVzc2FnZT0iTWVyZ2VkIGNoYW5nZXMgZnJvbSBzdWJwcm9qZWN0IHVzaW5nIHNxdWFzaCIgLS1zcXVhc2ggRkVUQ0hfSEVBRCAmJgorCQljaGVja19lcXVhbCAiJChsYXN0X2NvbW1pdF9tZXNzYWdlKSIgIk1lcmdlZCBjaGFuZ2VzIGZyb20gc3VicHJvamVjdCB1c2luZyBzcXVhc2giCisJKQorJworCituZXh0X3Rlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHRoZSBhZGRlZCBzdWJwcm9qIGFnYWluLCBzaG91bGQgZG8gbm90aGluZycgJworCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiBtYWluMSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMSAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBmZXRjaCAuLyJzdWIgcHJvaiIgbWFzdGVyICYmCisJCWdpdCBzdWJ0cmVlIGFkZCAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRCAmJgorCQkjIHRoaXMgc2hvdWxkbiBub3QgYWN0dWFsbHkgZG8gYW55dGhpbmcsIHNpbmNlIEZFVENIX0hFQUQKKwkJIyBpcyBhbHJlYWR5IGEgcGFyZW50CisJCXJlc3VsdD0kKGdpdCBtZXJnZSAtcyBvdXJzIC1tICJtZXJnZSAtcyAtb3VycyIgRkVUQ0hfSEVBRCkgJiYKKwkJY2hlY2tfZXF1YWwgIiR7cmVzdWx0fSIgIkFscmVhZHkgdXAgdG8gZGF0ZS4iCisJKQorJworCituZXh0X3Rlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG5ldyBzdWJwcm9qIGhpc3RvcnkgaW50byBzdWJkaXIvIHdpdGggYSBzbGFzaCBhcHBlbmRlZCB0byB0aGUgYXJndW1lbnQgb2YgLS1wcmVmaXgnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkdGVzdF9jb3VudCIgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkdGVzdF9jb3VudC9zdWJwcm9qIiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHRlc3RfY291bnQiIG1haW4xICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkdGVzdF9jb3VudC9zdWJwcm9qIiBzdWIxICYmCisJKAorCQljZCAiJHRlc3RfY291bnQiICYmCisJCWdpdCBmZXRjaCAuL3N1YnByb2ogbWFzdGVyICYmCisJCWdpdCBzdWJ0cmVlIGFkZCAtLXByZWZpeD1zdWJkaXIvIEZFVENIX0hFQUQKKwkpICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkdGVzdF9jb3VudC9zdWJwcm9qIiBzdWIyICYmCisJKAorCQljZCAiJHRlc3RfY291bnQiICYmCisJCWdpdCBmZXRjaCAuL3N1YnByb2ogbWFzdGVyICYmCisJCWdpdCBzdWJ0cmVlIG1lcmdlIC0tcHJlZml4PXN1YmRpci8gRkVUQ0hfSEVBRCAmJgorCQljaGVja19lcXVhbCAiJChsYXN0X2NvbW1pdF9tZXNzYWdlKSIgIk1lcmdlIGNvbW1pdCAnXCcnJChnaXQgcmV2LXBhcnNlIEZFVENIX0hFQUQpJ1wnJyIKKwkpCisnCisKKyMKKyMgVGVzdHMgZm9yICdnaXQgc3VidHJlZSBzcGxpdCcKKyMKKworbmV4dF90ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdCByZXF1aXJlcyBvcHRpb24gLS1wcmVmaXgnICcKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjEgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjEgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBhZGQgLS1wcmVmaXg9InN1YiBkaXIiIEZFVENIX0hFQUQgJiYKKwkJZWNobyAiWW91IG11c3QgcHJvdmlkZSB0aGUgLS1wcmVmaXggb3B0aW9uLiIgPiBleHBlY3RlZCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3VidHJlZSBzcGxpdCA+IGFjdHVhbCAyPiYxICYmCisJCXRlc3RfZGVidWcgInByaW50ZiAnImV4cGVjdGVkOiAiJyIgJiYKKwkJdGVzdF9kZWJ1ZyAiY2F0IGV4cGVjdGVkIiAmJgorCQl0ZXN0X2RlYnVnICJwcmludGYgJyJhY3R1YWw6ICInIiAmJgorCQl0ZXN0X2RlYnVnICJjYXQgYWN0dWFsIiAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpCisnCisKK25leHRfdGVzdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgcmVxdWlyZXMgcGF0aCBnaXZlbiBieSBvcHRpb24gLS1wcmVmaXggbXVzdCBleGlzdCcgJworCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiBtYWluMSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMSAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBmZXRjaCAuLyJzdWIgcHJvaiIgbWFzdGVyICYmCisJCWdpdCBzdWJ0cmVlIGFkZCAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRCAmJgorCQllY2hvICInXCcnbm9uLWV4aXN0ZW50LWRpcmVjdG9yeSdcJycgZG9lcyBub3QgZXhpc3Q7IHVzZSAnXCcnZ2l0IHN1YnRyZWUgYWRkJ1wnJyIgPiBleHBlY3RlZCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD1ub24tZXhpc3RlbnQtZGlyZWN0b3J5ID4gYWN0dWFsIDI+JjEgJiYKKwkJdGVzdF9kZWJ1ZyAicHJpbnRmICciZXhwZWN0ZWQ6ICInIiAmJgorCQl0ZXN0X2RlYnVnICJjYXQgZXhwZWN0ZWQiICYmCisJCXRlc3RfZGVidWcgInByaW50ZiAnImFjdHVhbDogIiciICYmCisJCXRlc3RfZGVidWcgImNhdCBhY3R1YWwiICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKworbmV4dF90ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdCBzdWIgZGlyLyB3aXRoIC0tcmVqb2luJyAnCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIG1haW4xICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIxICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4PSJzdWIgZGlyIiBGRVRDSF9IRUFECisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIiL21haW4tc3ViMSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjIgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRCAmJgorCQlzcGxpdF9oYXNoPSQoZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9InN1YiBkaXIiIC0tYW5ub3RhdGU9IioiKSAmJgorCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1hbm5vdGF0ZT0iKiIgLS1yZWpvaW4gJiYKKwkJY2hlY2tfZXF1YWwgIiQobGFzdF9jb21taXRfbWVzc2FnZSkiICJTcGxpdCAnXCcnc3ViIGRpci8nXCcnIGludG8gY29tbWl0ICdcJyckc3BsaXRfaGFzaCdcJyciCisJKQorICcKKworbmV4dF90ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdCBzdWIgZGlyLyB3aXRoIC0tcmVqb2luIGZyb20gc2NyYXRjaCcgJworCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIG1haW4xICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJbWtkaXIgInN1YiBkaXIiICYmCisJCWVjaG8gZmlsZSA+InN1YiBkaXIiL2ZpbGUgJiYKKwkJZ2l0IGFkZCAic3ViIGRpci9maWxlIiAmJgorCQlnaXQgY29tbWl0IC1tInN1YiBkaXIgZmlsZSIgJiYKKwkJc3BsaXRfaGFzaD0kKGdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PSJzdWIgZGlyIiAtLXJlam9pbikgJiYKKwkJZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9InN1YiBkaXIiIC0tcmVqb2luICYmCisJCWNoZWNrX2VxdWFsICIkKGxhc3RfY29tbWl0X21lc3NhZ2UpIiAiU3BsaXQgJ1wnJ3N1YiBkaXIvJ1wnJyBpbnRvIGNvbW1pdCAnXCcnJHNwbGl0X2hhc2gnXCcnIgorCSkKKyAnCisKK25leHRfdGVzdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgc3ViIGRpci8gd2l0aCAtLXJlam9pbiBhbmQgLS1tZXNzYWdlJyAnCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIG1haW4xICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIxICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4PSJzdWIgZGlyIiBGRVRDSF9IRUFECisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIiL21haW4tc3ViMSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjIgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRCAmJgorCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1tZXNzYWdlPSJTcGxpdCAmIHJlam9pbiIgLS1hbm5vdGF0ZT0iKiIgLS1yZWpvaW4gJiYKKwkJY2hlY2tfZXF1YWwgIiQobGFzdF9jb21taXRfbWVzc2FnZSkiICJTcGxpdCAmIHJlam9pbiIKKwkpCisnCisKK25leHRfdGVzdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgInN1YiBkaXIiLyB3aXRoIC0tYnJhbmNoJyAnCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIG1haW4xICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIxICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4PSJzdWIgZGlyIiBGRVRDSF9IRUFECisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIiL21haW4tc3ViMSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjIgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRCAmJgorCQlzcGxpdF9oYXNoPSQoZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9InN1YiBkaXIiIC0tYW5ub3RhdGU9IioiKSAmJgorCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1hbm5vdGF0ZT0iKiIgLS1icmFuY2ggc3VicHJvai1iciAmJgorCQljaGVja19lcXVhbCAiJChnaXQgcmV2LXBhcnNlIHN1YnByb2otYnIpIiAiJHNwbGl0X2hhc2giCisJKQorJworCituZXh0X3Rlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGhhc2ggb2Ygc3BsaXQnICcKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjEgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjEgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBhZGQgLS1wcmVmaXg9InN1YiBkaXIiIEZFVENIX0hFQUQKKwkpICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiAic3ViIGRpciIvbWFpbi1zdWIxICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiBtYWluMiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIiL21haW4tc3ViMiAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBmZXRjaCAuLyJzdWIgcHJvaiIgbWFzdGVyICYmCisJCWdpdCBzdWJ0cmVlIG1lcmdlIC0tcHJlZml4PSJzdWIgZGlyIiBGRVRDSF9IRUFEICYmCisJCXNwbGl0X2hhc2g9JChnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1hbm5vdGF0ZT0iKiIpICYmCisJCWdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PSJzdWIgZGlyIiAtLWFubm90YXRlPSIqIiAtLWJyYW5jaCBzdWJwcm9qLWJyICYmCisJCWNoZWNrX2VxdWFsICIkKGdpdCByZXYtcGFyc2Ugc3VicHJvai1icikiICIkc3BsaXRfaGFzaCIgJiYKKwkJIyBDaGVjayBoYXNoIG9mIHNwbGl0CisJCW5ld19oYXNoPSQoZ2l0IHJldi1wYXJzZSBzdWJwcm9qLWJyXjIpICYmCisJCSgKKwkJCWNkIC4vInN1YiBwcm9qIiAmJgorCQkJc3ViZGlyX2hhc2g9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCQljaGVja19lcXVhbCAnJyIkbmV3X2hhc2giJycgIiRzdWJkaXJfaGFzaCIKKwkJKQorCSkKKycKKworbmV4dF90ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdCAic3ViIGRpciIvIHdpdGggLS1icmFuY2ggZm9yIGFuIGV4aXN0aW5nIGJyYW5jaCcgJworCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiBtYWluMSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMSAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBmZXRjaCAuLyJzdWIgcHJvaiIgbWFzdGVyICYmCisJCWdpdCBicmFuY2ggc3VicHJvai1iciBGRVRDSF9IRUFEICYmCisJCWdpdCBzdWJ0cmVlIGFkZCAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRAorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjEgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIG1haW4yICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIyICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiAic3ViIGRpciIvbWFpbi1zdWIyICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgbWVyZ2UgLS1wcmVmaXg9InN1YiBkaXIiIEZFVENIX0hFQUQgJiYKKwkJc3BsaXRfaGFzaD0kKGdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PSJzdWIgZGlyIiAtLWFubm90YXRlPSIqIikgJiYKKwkJZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9InN1YiBkaXIiIC0tYW5ub3RhdGU9IioiIC0tYnJhbmNoIHN1YnByb2otYnIgJiYKKwkJY2hlY2tfZXF1YWwgIiQoZ2l0IHJldi1wYXJzZSBzdWJwcm9qLWJyKSIgIiRzcGxpdF9oYXNoIgorCSkKKycKKworbmV4dF90ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdCAic3ViIGRpciIvIHdpdGggLS1icmFuY2ggZm9yIGFuIGluY29tcGF0aWJsZSBicmFuY2gnICcKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjEgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjEgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgYnJhbmNoIGluaXQgSEVBRCAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBhZGQgLS1wcmVmaXg9InN1YiBkaXIiIEZFVENIX0hFQUQKKwkpICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiAic3ViIGRpciIvbWFpbi1zdWIxICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiBtYWluMiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIiL21haW4tc3ViMiAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBmZXRjaCAuLyJzdWIgcHJvaiIgbWFzdGVyICYmCisJCWdpdCBzdWJ0cmVlIG1lcmdlIC0tcHJlZml4PSJzdWIgZGlyIiBGRVRDSF9IRUFEICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PSJzdWIgZGlyIiAtLWJyYW5jaCBpbml0CisJKQorJworCisjCisjIFZhbGlkaXR5IGNoZWNraW5nCisjCisKK25leHRfdGVzdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBzdXJlIGV4YWN0bHkgdGhlIHJpZ2h0IHNldCBvZiBmaWxlcyBlbmRzIHVwIGluIHRoZSBzdWJwcm9qJyAnCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIG1haW4xICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIxICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4PSJzdWIgZGlyIiBGRVRDSF9IRUFECisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIiL21haW4tc3ViMSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjIgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRCAmJgorCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1hbm5vdGF0ZT0iKiIgLS1icmFuY2ggc3VicHJvai1iciAtLXJlam9pbgorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjMgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjMgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCQlnaXQgZmV0Y2ggLi4gc3VicHJvai1iciAmJgorCQlnaXQgbWVyZ2UgRkVUQ0hfSEVBRAorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjQgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1hbm5vdGF0ZT0iKiIgLS1icmFuY2ggc3VicHJvai1iciAtLXJlam9pbgorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjQgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1hbm5vdGF0ZT0iKiIgLS1icmFuY2ggc3VicHJvai1iciAtLXJlam9pbgorCSkgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCQlnaXQgZmV0Y2ggLi4gc3VicHJvai1iciAmJgorCQlnaXQgbWVyZ2UgRkVUQ0hfSEVBRCAmJgorCisJCXRlc3Rfd3JpdGVfbGluZXMgbWFpbi1zdWIxIG1haW4tc3ViMiBtYWluLXN1YjMgbWFpbi1zdWI0IFwKKwkJCXN1YjEgc3ViMiBzdWIzIHN1YjQgPmV4cGVjdCAmJgorCQlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCituZXh0X3Rlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2Ugc3VyZSB0aGUgc3VicHJvaiAqb25seSogY29udGFpbnMgY29tbWl0cyB0aGF0IGFmZmVjdCB0aGUgInN1YiBkaXIiJyAnCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIG1haW4xICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIxICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4PSJzdWIgZGlyIiBGRVRDSF9IRUFECisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIiL21haW4tc3ViMSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjIgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRCAmJgorCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1hbm5vdGF0ZT0iKiIgLS1icmFuY2ggc3VicHJvai1iciAtLXJlam9pbgorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjMgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjMgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCQlnaXQgZmV0Y2ggLi4gc3VicHJvai1iciAmJgorCQlnaXQgbWVyZ2UgRkVUQ0hfSEVBRAorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjQgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1hbm5vdGF0ZT0iKiIgLS1icmFuY2ggc3VicHJvai1iciAtLXJlam9pbgorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjQgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1hbm5vdGF0ZT0iKiIgLS1icmFuY2ggc3VicHJvai1iciAtLXJlam9pbgorCSkgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCQlnaXQgZmV0Y2ggLi4gc3VicHJvai1iciAmJgorCQlnaXQgbWVyZ2UgRkVUQ0hfSEVBRCAmJgorCisJCXRlc3Rfd3JpdGVfbGluZXMgbWFpbi1zdWIxIG1haW4tc3ViMiBtYWluLXN1YjMgbWFpbi1zdWI0IFwKKwkJCXN1YjEgc3ViMiBzdWIzIHN1YjQgPmV4cGVjdCAmJgorCQlnaXQgbG9nIC0tbmFtZS1vbmx5IC0tcHJldHR5PWZvcm1hdDoiIiA+bG9nICYmCisJCXNvcnQgPGxvZyB8IHNlZCAiL15cJC8gZCIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCituZXh0X3Rlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2Ugc3VyZSBleGFjdGx5IHRoZSByaWdodCBzZXQgb2YgZmlsZXMgZW5kcyB1cCBpbiB0aGUgbWFpbmxpbmUnICcKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjEgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjEgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBhZGQgLS1wcmVmaXg9InN1YiBkaXIiIEZFVENIX0hFQUQKKwkpICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiAic3ViIGRpciIvbWFpbi1zdWIxICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiBtYWluMiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIiL21haW4tc3ViMiAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBmZXRjaCAuLyJzdWIgcHJvaiIgbWFzdGVyICYmCisJCWdpdCBzdWJ0cmVlIG1lcmdlIC0tcHJlZml4PSJzdWIgZGlyIiBGRVRDSF9IRUFEICYmCisJCWdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PSJzdWIgZGlyIiAtLWFubm90YXRlPSIqIiAtLWJyYW5jaCBzdWJwcm9qLWJyIC0tcmVqb2luCisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMyAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIiL21haW4tc3ViMyAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiICYmCisJCWdpdCBmZXRjaCAuLiBzdWJwcm9qLWJyICYmCisJCWdpdCBtZXJnZSBGRVRDSF9IRUFECisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViNCAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PSJzdWIgZGlyIiAtLWFubm90YXRlPSIqIiAtLWJyYW5jaCBzdWJwcm9qLWJyIC0tcmVqb2luCisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIiL21haW4tc3ViNCAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PSJzdWIgZGlyIiAtLWFubm90YXRlPSIqIiAtLWJyYW5jaCBzdWJwcm9qLWJyIC0tcmVqb2luCisJKSAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiICYmCisJCWdpdCBmZXRjaCAuLiBzdWJwcm9qLWJyICYmCisJCWdpdCBtZXJnZSBGRVRDSF9IRUFECisJKSAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBzdWJ0cmVlIHB1bGwgLS1wcmVmaXg9InN1YiBkaXIiIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKworCQl0ZXN0X3dyaXRlX2xpbmVzIG1haW4xIG1haW4yID5jaGttICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgbWFpbi1zdWIxIG1haW4tc3ViMiBtYWluLXN1YjMgbWFpbi1zdWI0ID5jaGttcyAmJgorCQlzZWQgInMsXixzdWIgZGlyLywiIGNoa21zID5jaGttc19zdWIgJiYKKwkJdGVzdF93cml0ZV9saW5lcyBzdWIxIHN1YjIgc3ViMyBzdWI0ID5jaGtzICYmCisJCXNlZCAicyxeLHN1YiBkaXIvLCIgY2hrcyA+Y2hrc19zdWIgJiYKKworCQljYXQgY2hrbSBjaGttc19zdWIgY2hrc19zdWIgPmV4cGVjdCAmJgorCQlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCituZXh0X3Rlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2Ugc3VyZSBlYWNoIGZpbGVuYW1lIGNoYW5nZWQgZXhhY3RseSBvbmNlIGluIHRoZSBlbnRpcmUgaGlzdG9yeScgJworCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiBtYWluMSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMSAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBjb25maWcgbG9nLmRhdGUgcmVsYXRpdmUgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4PSJzdWIgZGlyIiBGRVRDSF9IRUFECisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIiL21haW4tc3ViMSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjIgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRCAmJgorCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1hbm5vdGF0ZT0iKiIgLS1icmFuY2ggc3VicHJvai1iciAtLXJlam9pbgorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjMgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjMgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCQlnaXQgZmV0Y2ggLi4gc3VicHJvai1iciAmJgorCQlnaXQgbWVyZ2UgRkVUQ0hfSEVBRAorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjQgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1hbm5vdGF0ZT0iKiIgLS1icmFuY2ggc3VicHJvai1iciAtLXJlam9pbgorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjQgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1hbm5vdGF0ZT0iKiIgLS1icmFuY2ggc3VicHJvai1iciAtLXJlam9pbgorCSkgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCQlnaXQgZmV0Y2ggLi4gc3VicHJvai1iciAmJgorCQlnaXQgbWVyZ2UgRkVUQ0hfSEVBRAorCSkgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgc3VidHJlZSBwdWxsIC0tcHJlZml4PSJzdWIgZGlyIiAuLyJzdWIgcHJvaiIgbWFzdGVyICYmCisKKwkJdGVzdF93cml0ZV9saW5lcyBtYWluMSBtYWluMiA+Y2hrbSAmJgorCQl0ZXN0X3dyaXRlX2xpbmVzIHN1YjEgc3ViMiBzdWIzIHN1YjQgPmNoa3MgJiYKKwkJdGVzdF93cml0ZV9saW5lcyBtYWluLXN1YjEgbWFpbi1zdWIyIG1haW4tc3ViMyBtYWluLXN1YjQgPmNoa21zICYmCisJCXNlZCAicyxeLHN1YiBkaXIvLCIgY2hrbXMgPmNoa21zX3N1YiAmJgorCisJCSMgbWFpbi1zdWI/PyBhbmQgLyJzdWIgZGlyIi9tYWluLXN1Yj8/IGJvdGggY2hhbmdlLCBiZWNhdXNlIHRob3NlIGFyZSB0aGUKKwkJIyBjaGFuZ2VzIHRoYXQgd2VyZSBzcGxpdCBpbnRvIHRoZWlyIG93biBoaXN0b3J5LiAgQW5kICJzdWIgZGlyIi9zdWI/PyBuZXZlcgorCQkjIGNoYW5nZSwgc2luY2UgdGhleSB3ZXJlICpvbmx5KiBjaGFuZ2VkIGluIHRoZSBzdWJ0cmVlIGJyYW5jaC4KKwkJZ2l0IGxvZyAtLW5hbWUtb25seSAtLXByZXR0eT1mb3JtYXQ6IiIgPmxvZyAmJgorCQlzb3J0IDxsb2cgPnNvcnRlZC1sb2cgJiYKKwkJc2VkICIvXiQvIGQiIHNvcnRlZC1sb2cgPmFjdHVhbCAmJgorCisJCWNhdCBjaGttcyBjaGttIGNoa3MgY2hrbXNfc3ViID5leHBlY3QtdW5zb3J0ZWQgJiYKKwkJc29ydCBleHBlY3QtdW5zb3J0ZWQgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCituZXh0X3Rlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2Ugc3VyZSB0aGUgLS1yZWpvaW4gY29tbWl0cyBuZXZlciBtYWtlIGl0IGludG8gc3VicHJvaicgJworCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiBtYWluMSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMSAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBmZXRjaCAuLyJzdWIgcHJvaiIgbWFzdGVyICYmCisJCWdpdCBzdWJ0cmVlIGFkZCAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRAorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjEgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIG1haW4yICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIyICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiAic3ViIGRpciIvbWFpbi1zdWIyICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgbWVyZ2UgLS1wcmVmaXg9InN1YiBkaXIiIEZFVENIX0hFQUQgJiYKKwkJZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9InN1YiBkaXIiIC0tYW5ub3RhdGU9IioiIC0tYnJhbmNoIHN1YnByb2otYnIgLS1yZWpvaW4KKwkpICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIzICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiAic3ViIGRpciIvbWFpbi1zdWIzICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgJiYKKwkJZ2l0IGZldGNoIC4uIHN1YnByb2otYnIgJiYKKwkJZ2l0IG1lcmdlIEZFVENIX0hFQUQKKwkpICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWI0ICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9InN1YiBkaXIiIC0tYW5ub3RhdGU9IioiIC0tYnJhbmNoIHN1YnByb2otYnIgLS1yZWpvaW4KKwkpICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiAic3ViIGRpciIvbWFpbi1zdWI0ICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9InN1YiBkaXIiIC0tYW5ub3RhdGU9IioiIC0tYnJhbmNoIHN1YnByb2otYnIgLS1yZWpvaW4KKwkpICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgJiYKKwkJZ2l0IGZldGNoIC4uIHN1YnByb2otYnIgJiYKKwkJZ2l0IG1lcmdlIEZFVENIX0hFQUQKKwkpICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IHN1YnRyZWUgcHVsbCAtLXByZWZpeD0ic3ViIGRpciIgLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQljaGVja19lcXVhbCAiJChnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDoiJXMiIEhFQUReMiB8IGdyZXAgLWkgc3BsaXQpIiAiIgorCSkKKycKKworbmV4dF90ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIHN1cmUgbm8gImdpdCBzdWJ0cmVlIiB0YWdnZWQgY29tbWl0cyBtYWtlIGl0IGludG8gc3VicHJvaicgJworCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiBtYWluMSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMSAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBmZXRjaCAuLyJzdWIgcHJvaiIgbWFzdGVyICYmCisJCWdpdCBzdWJ0cmVlIGFkZCAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRAorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjEgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIG1haW4yICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIyICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiAic3ViIGRpciIvbWFpbi1zdWIyICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgbWVyZ2UgLS1wcmVmaXg9InN1YiBkaXIiIEZFVENIX0hFQUQgJiYKKwkJZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9InN1YiBkaXIiIC0tYW5ub3RhdGU9IioiIC0tYnJhbmNoIHN1YnByb2otYnIgLS1yZWpvaW4KKwkpICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIzICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiAic3ViIGRpciIvbWFpbi1zdWIzICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgJiYKKwkJZ2l0IGZldGNoIC4uIHN1YnByb2otYnIgJiYKKwkJIGdpdCBtZXJnZSBGRVRDSF9IRUFECisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViNCAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PSJzdWIgZGlyIiAtLWFubm90YXRlPSIqIiAtLWJyYW5jaCBzdWJwcm9qLWJyIC0tcmVqb2luCisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIiL21haW4tc3ViNCAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PSJzdWIgZGlyIiAtLWFubm90YXRlPSIqIiAtLWJyYW5jaCBzdWJwcm9qLWJyIC0tcmVqb2luCisJKSAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiICYmCisJCWdpdCBmZXRjaCAuLiBzdWJwcm9qLWJyICYmCisJCWdpdCBtZXJnZSBGRVRDSF9IRUFECisJKSAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBzdWJ0cmVlIHB1bGwgLS1wcmVmaXg9InN1YiBkaXIiIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKworCQkjIFRoZXkgYXJlIG1lYW5pbmdsZXNzIHRvIHN1YnByb2ogc2luY2Ugb25lIHNpZGUgb2YgdGhlIG1lcmdlIHJlZmVycyB0byB0aGUgbWFpbmxpbmUKKwkJY2hlY2tfZXF1YWwgIiQoZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6IiVzJW4lYiIgSEVBRF4yIHwgZ3JlcCAiZ2l0LXN1YnRyZWUuKjoiKSIgIiIKKwkpCisnCisKKyMKKyMgQSBuZXcgc2V0IG9mIHRlc3RzCisjCisKK25leHRfdGVzdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBzdXJlICJnaXQgc3VidHJlZSBzcGxpdCIgZmluZCB0aGUgY29ycmVjdCBwYXJlbnQnICcKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjEgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjEgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBhZGQgLS1wcmVmaXg9InN1YiBkaXIiIEZFVENIX0hFQUQKKwkpICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIyICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IGJyYW5jaCBzdWJwcm9qLXJlZiBGRVRDSF9IRUFEICYmCisJCWdpdCBzdWJ0cmVlIG1lcmdlIC0tcHJlZml4PSJzdWIgZGlyIiBGRVRDSF9IRUFECisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIiL21haW4tc3ViMSAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PSJzdWIgZGlyIiAtLWJyYW5jaCBzdWJwcm9qLWJyICYmCisKKwkJIyBhdCB0aGlzIHBvaW50LCB0aGUgbmV3IGNvbW1pdCBwYXJlbnQgc2hvdWxkIGJlIHN1YnByb2otcmVmLCBpZiBpdCBpcworCQkjIG5vdCwgc29tZXRoaW5nIHdlbnQgd3JvbmcgKHRoZSAibmV3cGFyZW50IiBvZiAibWFzdGVyfiIgY29tbWl0IHNob3VsZAorCQkjIGhhdmUgYmVlbiBzdWIyLCBidXQgaXQgd2FzIG5vdCwgYmVjYXVzZSBpdHMgY2FjaGUgd2FzIG5vdCBzZXQgdG8KKwkJIyBpdHNlbGYpCisJCWNoZWNrX2VxdWFsICIkKGdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVQIC0xIHN1YnByb2otYnIpIiAiJChnaXQgcmV2LXBhcnNlIHN1YnByb2otcmVmKSIKKwkpCisnCisKK25leHRfdGVzdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgYSBuZXcgc3VidHJlZSB3aXRob3V0IC0tb250byBvcHRpb24nICcKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjEgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjEgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBhZGQgLS1wcmVmaXg9InN1YiBkaXIiIEZFVENIX0hFQUQKKwkpICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiBzdWIyICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgbWVyZ2UgLS1wcmVmaXg9InN1YiBkaXIiIEZFVENIX0hFQUQKKwkpICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiAic3ViIGRpciIvbWFpbi1zdWIxICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkJZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9InN1YiBkaXIiIC0tYnJhbmNoIHN1YnByb2otYnIKKwkpICYmCisJbWtkaXIgIiRzdWJ0cmVlX3Rlc3RfY291bnQiLyJzdWIgZGlyMiIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyMiIvbWFpbi1zdWIyICYmCisJKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKworCQkjIGFsc28gdGVzdCB0aGF0IHdlIHN0aWxsIGNhbiBzcGxpdCBvdXQgYW4gZW50aXJlbHkgbmV3IHN1YnRyZWUKKwkJIyBpZiB0aGUgcGFyZW50IG9mIHRoZSBmaXJzdCBjb21taXQgaW4gdGhlIHRyZWUgaXMgbm90IGVtcHR5LAorCQkjIHRoZW4gdGhlIG5ldyBzdWJ0cmVlIGhhcyBhY2NpZGVudGFsbHkgYmVlbiBhdHRhY2hlZCB0byBzb21ldGhpbmcKKwkJZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9InN1YiBkaXIyIiAtLWJyYW5jaCBzdWJwcm9qMi1iciAmJgorCQljaGVja19lcXVhbCAiJChnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolUCAtMSBzdWJwcm9qMi1icikiICIiCisJKQorJworCituZXh0X3Rlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBvbmUgZmlsZSBjaGFuZ2UgcGVyIGNvbW1pdCcgJworCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiBtYWluMSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMSAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBmZXRjaCAuLyJzdWIgcHJvaiIgbWFzdGVyICYmCisJCWdpdCBicmFuY2ggc3ViMSBGRVRDSF9IRUFEICYmCisJCWdpdCBzdWJ0cmVlIGFkZCAtLXByZWZpeD0ic3ViIGRpciIgc3ViMQorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjIgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRAorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjEgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpciIgLS1icmFuY2ggc3VicHJvai1icgorCSkgJiYKKwlta2RpciAiJHN1YnRyZWVfdGVzdF9jb3VudCIvInN1YiBkaXIyIiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIyIi9tYWluLXN1YjIgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0ic3ViIGRpcjIiIC0tYnJhbmNoIHN1YnByb2oyLWJyICYmCisKKwkJeD0gJiYKKwkJZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6ImNvbW1pdDogJUgiIHwgam9pbl9jb21taXRzIHwKKwkJKAorCQkJd2hpbGUgcmVhZCBjb21taXQgYSBiOyBkbworCQkJCXRlc3RfZGVidWcgImVjaG8gVmVyaWZ5aW5nIGNvbW1pdCAkY29tbWl0IgorCQkJCXRlc3RfZGVidWcgImVjaG8gYTogJGEiCisJCQkJdGVzdF9kZWJ1ZyAiZWNobyBiOiAkYiIKKwkJCQljaGVja19lcXVhbCAiJGIiICIiCisJCQkJeD0xCisJCQlkb25lCisJCQljaGVja19lcXVhbCAiJHgiIDEKKwkJKQorCSkKKycKKworbmV4dF90ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHNwbGl0IHRvIHN1YnByb2onICcKKwlzdWJ0cmVlX3Rlc3RfY3JlYXRlX3JlcG8gIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJc3VidHJlZV90ZXN0X2NyZWF0ZV9yZXBvICIkc3VidHJlZV90ZXN0X2NvdW50L3N1YiBwcm9qIiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbWFpbjEgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQvc3ViIHByb2oiIHN1YjEgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBhZGQgLS1wcmVmaXg9InN1YiBkaXIiIEZFVENIX0hFQUQKKwkpICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiAic3ViIGRpciIvbWFpbi1zdWIxICYmCisJdGVzdF9jcmVhdGVfY29tbWl0ICIkc3VidHJlZV90ZXN0X2NvdW50IiBtYWluMiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudC9zdWIgcHJvaiIgc3ViMiAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgInN1YiBkaXIiL21haW4tc3ViMiAmJgorCSgKKwkJY2QgJHN1YnRyZWVfdGVzdF9jb3VudC8ic3ViIHByb2oiICYmCisgICAgICAgICAgICAgICAgZ2l0IGJyYW5jaCBzdWItYnJhbmNoLTEgJiYKKyAgICAgICAgICAgICAgICBjZCAuLiAmJgorCQlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIG1hc3RlciAmJgorCQlnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeD0ic3ViIGRpciIgRkVUQ0hfSEVBRAorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICJzdWIgZGlyIi9tYWluLXN1YjMgJiYKKyAgICAgICAgKAorCQljZCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwkgICAgICAgIGdpdCBzdWJ0cmVlIHB1c2ggLi8ic3ViIHByb2oiIC0tcHJlZml4ICJzdWIgZGlyIiBzdWItYnJhbmNoLTEgJiYKKyAgICAgICAgICAgICAgICBjZCAuLyJzdWIgcHJvaiIgJiYKKyAgICAgICAgICAgICAgICBnaXQgY2hlY2tvdXQgc3ViLWJyYW5jaC0xICYmCisgICAgICAgICAJY2hlY2tfZXF1YWwgIiQobGFzdF9jb21taXRfbWVzc2FnZSkiICJzdWIgZGlyL21haW4tc3ViMyIKKwkpCisnCisKKyMKKyMgVGhpcyB0ZXN0IGNvdmVycyAyIGNhc2VzIGluIHN1YnRyZWUgc3BsaXQgY29weV9vcl9za2lwIGNvZGUKKyMgMSkgTWVyZ2VzIHdoZXJlIG9uZSBwYXJlbnQgaXMgYSBzdXBlcnNldCBvZiB0aGUgY2hhbmdlcyBvZiB0aGUgb3RoZXIKKyMgICAgcGFyZW50IHJlZ2FyZGluZyBjaGFuZ2VzIHRvIHRoZSBzdWJ0cmVlLCBpbiB0aGlzIGNhc2UgdGhlIG1lcmdlCisjICAgIGNvbW1pdCBzaG91bGQgYmUgY29waWVkCisjIDIpIE1lcmdlcyB3aGVyZSBvbmx5IG9uZSBwYXJlbnQgb3BlcmF0ZSBvbiB0aGUgc3VidHJlZSwgYW5kIHRoZSBtZXJnZQorIyAgICBjb21taXQgc2hvdWxkIGJlIHNraXBwZWQKKyMKKyMgKDEpIGlzIGNoZWNrZWQgYnkgZW5zdXJpbmcgc3VidHJlZV90aXAgaXMgYSBkZXNjZW5kZW50IG9mIHN1YnRyZWVfYnJhbmNoCisjICgyKSBzaG91bGQgaGF2ZSBhIGNoZWNrIGFkZGVkIChub3RfYV9zdWJ0cmVlX2NoYW5nZSBzaG91bGRuJ3QgYmUgcHJlc2VudAorIyAgICAgb24gdGhlIHByb2R1Y2VkIHN1YnRyZWUpCisjCisjIE90aGVyIHJlbGF0ZWQgY2FzZXMgd2hpY2ggYXJlIG5vdCB0ZXN0ZWQgKG9yIGN1cnJlbnRseSBoYW5kbGVkIGNvcnJlY3RseSkKKyMgLSBDYXNlICgxKSB3aGVyZSB0aGVyZSBhcmUgbW9yZSB0aGFuIDIgcGFyZW50cywgaXQgd2lsbCBzb21ldGltZXMgY29ycmVjdGx5IGNvcHkKKyMgICB0aGUgbWVyZ2UsIGFuZCBzb21ldGltZXMgbm90CisjIC0gTWVyZ2UgY29tbWl0IHdoZXJlIGJvdGggcGFyZW50cyBoYXZlIHNhbWUgdHJlZSBhcyB0aGUgbWVyZ2UsIGN1cnJlbnRseQorIyAgIHdpbGwgYWx3YXlzIGJlIHNraXBwZWQsIGV2ZW4gaWYgdGhleSByZWFjaGVkIHRoYXQgc3RhdGUgdmlhIGRpZmZlcmVudAorIyAgIHNldCBvZiBjb21taXRzLgorIworCituZXh0X3Rlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YnRyZWUgZGVzY2VuZGFudCBjaGVjaycgJworCXN1YnRyZWVfdGVzdF9jcmVhdGVfcmVwbyAiJHN1YnRyZWVfdGVzdF9jb3VudCIgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIGZvbGRlcl9zdWJ0cmVlL2EgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgYnJhbmNoIGJyYW5jaAorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIGZvbGRlcl9zdWJ0cmVlLzAgJiYKKwl0ZXN0X2NyZWF0ZV9jb21taXQgIiRzdWJ0cmVlX3Rlc3RfY291bnQiIGZvbGRlcl9zdWJ0cmVlL2IgJiYKKwljaGVycnk9JChjZCAiJHN1YnRyZWVfdGVzdF9jb3VudCI7IGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgY2hlY2tvdXQgYnJhbmNoCisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgY29tbWl0X29uX2JyYW5jaCAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBjaGVycnktcGljayAkY2hlcnJ5ICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IG1lcmdlIC1tICJtZXJnZSBzaG91bGQgYmUga2VwdCBvbiBzdWJ0cmVlIiBicmFuY2ggJiYKKwkJZ2l0IGJyYW5jaCBub19zdWJ0cmVlX3dvcmtfYnJhbmNoCisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgZm9sZGVyX3N1YnRyZWUvZCAmJgorCSgKKwkJY2QgIiRzdWJ0cmVlX3Rlc3RfY291bnQiICYmCisJCWdpdCBjaGVja291dCBub19zdWJ0cmVlX3dvcmtfYnJhbmNoCisJKSAmJgorCXRlc3RfY3JlYXRlX2NvbW1pdCAiJHN1YnRyZWVfdGVzdF9jb3VudCIgbm90X2Ffc3VidHJlZV9jaGFuZ2UgJiYKKwkoCisJCWNkICIkc3VidHJlZV90ZXN0X2NvdW50IiAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBtZXJnZSAtbSAibWVyZ2Ugc2hvdWxkIGJlIHNraXBwZWQgb24gc3VidHJlZSIgbm9fc3VidHJlZV93b3JrX2JyYW5jaCAmJgorCisJCWdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4IGZvbGRlcl9zdWJ0cmVlLyAtLWJyYW5jaCBzdWJ0cmVlX3RpcCBtYXN0ZXIgJiYKKwkJZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXggZm9sZGVyX3N1YnRyZWUvIC0tYnJhbmNoIHN1YnRyZWVfYnJhbmNoIGJyYW5jaCAmJgorCQljaGVja19lcXVhbCAkKGdpdCByZXYtbGlzdCAtLWNvdW50IHN1YnRyZWVfdGlwLi5zdWJ0cmVlX2JyYW5jaCkgMAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS9jb250cmliL3N1YnRyZWUvdG9kbyBiL2NvbnRyaWIvc3VidHJlZS90b2RvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGU3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N1YnRyZWUvdG9kbwpAQCAtMCwwICsxLDQ4IEBACisKKwlkZWxldGUgdGVtcGRpcgorCisJJ2dpdCBzdWJ0cmVlIHJlam9pbicgb3B0aW9uIHRvIGRvIHRoZSBzYW1lIGFzIC0tcmVqb2luLCBlZy4gYWZ0ZXIgYQorCSAgcmViYXNlCisKKwktLXByZWZpeCBkb2Vzbid0IGZvcmNlIHRoZSBzdWJ0cmVlIGNvcnJlY3RseSBpbiBtZXJnZS9wdWxsOgorCSItcyBzdWJ0cmVlIiBzaG91bGQgYmUgZ2l2ZW4gYW4gZXhwbGljaXQgc3VidHJlZSBvcHRpb24/CisJCVRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHdheSB0byBkbyB0aGlzLiAgV2UnZCBoYXZlIHRvCisJCXBhdGNoIGdpdC1tZXJnZS1zdWJ0cmVlLiAgVWdoLgorCQkoYnV0IHdlIGNvdWxkIGF2b2lkIHRoaXMgcHJvYmxlbSBieSBnZW5lcmF0aW5nIHNxdWFzaGVzIHdpdGgKKwkJZXhhY3RseSB0aGUgcmlnaHQgc3VidHJlZSBzdHJ1Y3R1cmUsIHJhdGhlciB0aGFuIHVzaW5nCisJCXN1YnRyZWUgbWVyZ2UuLi4pCisKKwlhZGQgYSAnbG9nJyBzdWJjb21tYW5kIHRvIHNlZSB3aGF0J3MgbmV3IGluIGEgc3VidHJlZT8KKworCWFkZCB0by1zdWJtb2R1bGUgYW5kIGZyb20tc3VibW9kdWxlIGNvbW1hbmRzCisKKwlhdXRvbWF0ZWQgdGVzdHMgZm9yIC0tc3F1YXNoIHN0dWZmCisKKwkiYWRkIiBjb21tYW5kIG5vbi1vYnZpb3VzbHkgcmVxdWlyZXMgYSBjb21taXRpZDsgd291bGQgYmUgZWFzaWVyIGlmCisJCWl0IGhhZCBhICJwdWxsIiBzb3J0IG9mIG1vZGUgaW5zdGVhZAorCisJInB1bGwiIGFuZCAibWVyZ2UiIGNvbW1hbmRzIHNob3VsZCBmYWlsIGlmIHlvdSd2ZSBuZXZlciBtZXJnZWQKKwkJdGhhdCAtLXByZWZpeCBiZWZvcmUKKwkJCisJZG9jcyBzaG91bGQgcHJvdmlkZSBhbiBleGFtcGxlIG9mICJhZGQiCisJCisJbm90ZSB0aGF0IHRoZSBpbml0aWFsIHNwbGl0IGRvZXNuJ3QgKmhhdmUqIHRvIGhhdmUgYSBjb21taXRpZAorCQlzcGVjaWZpZWQuLi4gdGhhdCdzIGp1c3QgYW4gb3B0aW1pemF0aW9uCisKKwlpZiB5b3UgdHJ5IHRvIGFkZCAob3IgbWF5YmUgbWVyZ2U/KSB3aXRoIGFuIGludmFsaWQgY29tbWl0aWQsIHlvdQorCQlnZXQgYSBtaXNsZWFkaW5nICJwcmVmaXggbXVzdCBlbmQgd2l0aCAvIiBtZXNzYWdlIGZyb20KKwkJb25lIG9mIHRoZSBvdGhlciBnaXQgdG9vbHMgdGhhdCBnaXQtc3VidHJlZSBjYWxscy4gIFNob3VsZAorCQlkZXRlY3QgdGhpcyBzaXR1YXRpb24gYW5kIHByaW50IHRoZSAqcmVhbCogcHJvYmxlbS4KKwkKKwkicHVsbCAtLXNxdWFzaCIgc2hvdWxkIGRvIGZldGNoLXN5bnRoZXNpemUtbWVyZ2UsIGJ1dCBpbnN0ZWFkIGp1c3QKKwkJZG9lcyAicHVsbCIgZGlyZWN0bHksIHdoaWNoIGRvZXNuJ3Qgd29yayBhdCBhbGwuCisKKwltYWtlIGEgJ2ZvcmNlLXVwZGF0ZScgdGhhdCBkb2VzIHdoYXQgJ2FkZCcgZG9lcyBldmVuIGlmIHRoZSBzdWJ0cmVlCisJCWFscmVhZHkgZXhpc3RzLiAgVGhhdCB3YXkgd2UgY2FuIGhlbHAgcGVvcGxlIHdobyBpbXBvcnRlZAorCQlzdWJ0cmVlcyAiaW5jb3JyZWN0bHkiIChlZy4gYnkganVzdCBjb3B5aW5nIGluIHRoZSBmaWxlcykgaW4KKwkJdGhlIHBhc3QuCisKKwlndWVzcyAtLXByZWZpeCBhdXRvbWF0aWNhbGx5IGlmIHBvc3NpYmxlIGJhc2VkIG9uIHB3ZAorCisJbWFrZSBhICdnaXQgc3VidHJlZSBncmFmdHMnIHRoYXQgYXV0b21hdGljYWxseSBleHBhbmRzIC0tc3F1YXNoJ2QKKwkJY29tbWl0cyBzbyB5b3UgY2FuIHNlZSB0aGUgZnVsbCBoaXN0b3J5IGlmIHlvdSB3YW50IGl0LgpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdm4tZmUvLmdpdGlnbm9yZSBiL2NvbnRyaWIvc3ZuLWZlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhNzc5MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3ZuLWZlLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACisvKi54bWwKKy8qLjEKKy8qLmh0bWwKKy9zdm4tZmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3ZuLWZlL01ha2VmaWxlIGIvY29udHJpYi9zdm4tZmUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg2NTFhYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3ZuLWZlL01ha2VmaWxlCkBAIC0wLDAgKzEsMTA1IEBACithbGw6OiBzdm4tZmUkWAorCitDQyA9IGNjCitSTSA9IHJtIC1mCitNViA9IG12CisKK0NGTEFHUyA9IC1nIC1PMiAtV2FsbAorTERGTEFHUyA9CitFWFRMSUJTID0gLWx6CisKK2luY2x1ZGUgLi4vLi4vY29uZmlnLm1hay51bmFtZQorLWluY2x1ZGUgLi4vLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi8uLi9jb25maWcubWFrCisKK2lmZXEgKCQodW5hbWVfUyksRGFyd2luKQorCWlmbmRlZiBOT19GSU5LCisJCWlmZXEgKCQoc2hlbGwgdGVzdCAtZCAvc3cvbGliICYmIGVjaG8geSkseSkKKwkJCUNGTEFHUyArPSAtSS9zdy9pbmNsdWRlCisJCQlMREZMQUdTICs9IC1ML3N3L2xpYgorCQllbmRpZgorCWVuZGlmCisJaWZuZGVmIE5PX0RBUldJTl9QT1JUUworCQlpZmVxICgkKHNoZWxsIHRlc3QgLWQgL29wdC9sb2NhbC9saWIgJiYgZWNobyB5KSx5KQorCQkJQ0ZMQUdTICs9IC1JL29wdC9sb2NhbC9pbmNsdWRlCisJCQlMREZMQUdTICs9IC1ML29wdC9sb2NhbC9saWIKKwkJZW5kaWYKKwllbmRpZgorZW5kaWYKKworaWZuZGVmIE5PX09QRU5TU0wKKwlFWFRMSUJTICs9IC1sc3NsCisJaWZkZWYgTkVFRFNfQ1JZUFRPX1dJVEhfU1NMCisJCUVYVExJQlMgKz0gLWxjcnlwdG8KKwllbmRpZgorZW5kaWYKKworaWZuZGVmIE5PX1BUSFJFQURTCisJQ0ZMQUdTICs9ICQoUFRIUkVBRFNfQ0ZMQUdTKQorCUVYVExJQlMgKz0gJChQVEhSRUFEX0xJQlMpCitlbmRpZgorCitpZmRlZiBIQVZFX0NMT0NLX0dFVFRJTUUKKwlDRkxBR1MgKz0gLURIQVZFX0NMT0NLX0dFVFRJTUUKKwlFWFRMSUJTICs9IC1scnQKK2VuZGlmCisKK2lmZGVmIE5FRURTX0xJQklDT05WCisJRVhUTElCUyArPSAtbGljb252CitlbmRpZgorCitHSVRfTElCID0gLi4vLi4vbGliZ2l0LmEKK1ZDU1NWTl9MSUIgPSAuLi8uLi92Y3Mtc3ZuL2xpYi5hCitYRElGRl9MSUIgPSAuLi8uLi94ZGlmZi9saWIuYQorCitMSUJTID0gJChWQ1NTVk5fTElCKSAkKEdJVF9MSUIpICQoWERJRkZfTElCKQorCitRVUlFVF9TVUJESVIwID0gKyQoTUFLRSkgLUMgIyBzcGFjZSB0byBzZXBhcmF0ZSAtQyBhbmQgc3ViZGlyCitRVUlFVF9TVUJESVIxID0KKworaWZuZXEgKCQoZmluZHN0cmluZyAkKE1BS0VGTEFHUyksdyksdykKK1BSSU5UX0RJUiA9IC0tbm8tcHJpbnQtZGlyZWN0b3J5CitlbHNlICMgIm1ha2UgLXciCitOT19TVUJESVIgPSA6CitlbmRpZgorCitpZm5lcSAoJChmaW5kc3RyaW5nICQoTUFLRUZMQUdTKSxzKSxzKQoraWZuZGVmIFYKKwlRVUlFVF9DQyAgICAgID0gQGVjaG8gJyAgICcgQ0MgJEA7CisJUVVJRVRfTElOSyAgICA9IEBlY2hvICcgICAnIExJTksgJEA7CisJUVVJRVRfU1VCRElSMCA9ICtAc3ViZGlyPQorCVFVSUVUX1NVQkRJUjEgPSA7JChOT19TVUJESVIpIGVjaG8gJyAgICcgU1VCRElSICQkc3ViZGlyOyBcCisJICAgICAgICAgICAgICAgICQoTUFLRSkgJChQUklOVF9ESVIpIC1DICQkc3ViZGlyCitlbmRpZgorZW5kaWYKKworc3ZuLWZlJFg6IHN2bi1mZS5vICQoVkNTU1ZOX0xJQikgJChYRElGRl9MSUIpICQoR0lUX0xJQikKKwkkKFFVSUVUX0xJTkspJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJChFWFRMSUJTKSAtbyAkQCBzdm4tZmUubyAkKExJQlMpCisKK3N2bi1mZS5vOiBzdm4tZmUuYyAuLi8uLi92Y3Mtc3ZuL3N2bmR1bXAuaAorCSQoUVVJRVRfQ0MpJChDQykgJChDRkxBR1MpIC1JLi4vLi4vdmNzLXN2biAtbyAkKi5vIC1jICQ8CisKK3N2bi1mZS5odG1sOiBzdm4tZmUudHh0CisJJChRVUlFVF9TVUJESVIwKS4uLy4uL0RvY3VtZW50YXRpb24gJChRVUlFVF9TVUJESVIxKSBcCisJCU1BTl9UWFQ9Li4vY29udHJpYi9zdm4tZmUvc3ZuLWZlLnR4dCBcCisJCS4uL2NvbnRyaWIvc3ZuLWZlLyRACisKK3N2bi1mZS4xOiBzdm4tZmUudHh0CisJJChRVUlFVF9TVUJESVIwKS4uLy4uL0RvY3VtZW50YXRpb24gJChRVUlFVF9TVUJESVIxKSBcCisJCU1BTl9UWFQ9Li4vY29udHJpYi9zdm4tZmUvc3ZuLWZlLnR4dCBcCisJCS4uL2NvbnRyaWIvc3ZuLWZlLyRACisJJChNVikgLi4vLi4vRG9jdW1lbnRhdGlvbi9zdm4tZmUuMSAuCisKKy4uLy4uL3Zjcy1zdm4vbGliLmE6IEZPUkNFCisJJChRVUlFVF9TVUJESVIwKS4uLy4uICQoUVVJRVRfU1VCRElSMSkgdmNzLXN2bi9saWIuYQorCisuLi8uLi94ZGlmZi9saWIuYTogRk9SQ0UKKwkkKFFVSUVUX1NVQkRJUjApLi4vLi4gJChRVUlFVF9TVUJESVIxKSB4ZGlmZi9saWIuYQorCisuLi8uLi9saWJnaXQuYTogRk9SQ0UKKwkkKFFVSUVUX1NVQkRJUjApLi4vLi4gJChRVUlFVF9TVUJESVIxKSBsaWJnaXQuYQorCitjbGVhbjoKKwkkKFJNKSBzdm4tZmUkWCBzdm4tZmUubyBzdm4tZmUuaHRtbCBzdm4tZmUueG1sIHN2bi1mZS4xCisKKy5QSE9OWTogYWxsIGNsZWFuIEZPUkNFCmRpZmYgLS1naXQgYS9jb250cmliL3N2bi1mZS9zdm4tZmUuYyBiL2NvbnRyaWIvc3ZuLWZlL3N2bi1mZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNjM1MDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N2bi1mZS9zdm4tZmUuYwpAQCAtMCwwICsxLDE4IEBACisvKgorICogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLgorICogWW91IG1heSBmcmVlbHkgdXNlLCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCByZWxpY2Vuc2UgaXQuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInN2bmR1bXAuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWlmIChzdm5kdW1wX2luaXQoTlVMTCkpCisJCXJldHVybiAxOworCXN2bmR1bXBfcmVhZCgoYXJnYyA+IDEpID8gYXJndlsxXSA6IE5VTEwsICJyZWZzL2hlYWRzL21hc3RlciIsCisJCQkicmVmcy9ub3Rlcy9zdm4vcmV2cyIpOworCXN2bmR1bXBfZGVpbml0KCk7CisJc3ZuZHVtcF9yZXNldCgpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdm4tZmUvc3ZuLWZlLnR4dCBiL2NvbnRyaWIvc3ZuLWZlL3N2bi1mZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzMzNmYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3ZuLWZlL3N2bi1mZS50eHQKQEAgLTAsMCArMSw3MSBAQAorc3ZuLWZlKDEpCis9PT09PT09PT0KKworTkFNRQorLS0tLQorc3ZuLWZlIC0gY29udmVydCBhbiBTVk4gImR1bXBmaWxlIiB0byBhIGZhc3QtaW1wb3J0IHN0cmVhbQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KK21rZmlmbyBiYWNrY2hhbm5lbCAmJgorc3ZuYWRtaW4gZHVtcCAtLWRlbHRhcyBSRVBPIHwKKwlzdm4tZmUgW3VybF0gMzxiYWNrY2hhbm5lbCB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9MyAzPmJhY2tjaGFubmVsCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitDb252ZXJ0cyBhIFN1YnZlcnNpb24gZHVtcGZpbGUgaW50byBpbnB1dCBzdWl0YWJsZSBmb3IKK2dpdC1mYXN0LWltcG9ydCgxKSBhbmQgc2ltaWxhciBpbXBvcnRlcnMuIFJFUE8gaXMgYSBwYXRoIHRvIGEKK1N1YnZlcnNpb24gcmVwb3NpdG9yeSBtaXJyb3JlZCBvbiB0aGUgbG9jYWwgZGlzay4gUmVtb3RlIFN1YnZlcnNpb24KK3JlcG9zaXRvcmllcyBjYW4gYmUgbWlycm9yZWQgb24gbG9jYWwgZGlzayB1c2luZyB0aGUgYHN2bnN5bmNgCitjb21tYW5kLgorCitOb3RlOiB0aGlzIHRvb2wgaXMgdmVyeSB5b3VuZy4gIFRoZSBkZXRhaWxzIG9mIGl0cyBjb21tYW5kbGluZQoraW50ZXJmYWNlIG1heSBjaGFuZ2UgaW4gYmFja3dhcmQgaW5jb21wYXRpYmxlIHdheXMuCisKK0lOUFVUIEZPUk1BVAorLS0tLS0tLS0tLS0tCitTdWJ2ZXJzaW9uJ3MgcmVwb3NpdG9yeSBkdW1wIGZvcm1hdCBpcyBkb2N1bWVudGVkIGluIGZ1bGwgaW4KK2Bub3Rlcy9kdW1wLWxvYWQtZm9ybWF0LnR4dGAgZnJvbSB0aGUgU3VidmVyc2lvbiBzb3VyY2UgdHJlZS4KK0ZpbGVzIGluIHRoaXMgZm9ybWF0IGNhbiBiZSBnZW5lcmF0ZWQgdXNpbmcgdGhlICdzdm5hZG1pbiBkdW1wJyBvcgorJ3N2ayBhZG1pbiBkdW1wJyBjb21tYW5kLgorCitPVVRQVVQgRk9STUFUCistLS0tLS0tLS0tLS0tCitUaGUgZmFzdC1pbXBvcnQgZm9ybWF0IGlzIGRvY3VtZW50ZWQgYnkgdGhlIGdpdC1mYXN0LWltcG9ydCgxKQorbWFudWFsIHBhZ2UuCisKK05PVEVTCistLS0tLQorU3VidmVyc2lvbiBkdW1wcyBkbyBub3QgcmVjb3JkIGEgc2VwYXJhdGUgYXV0aG9yIGFuZCBjb21taXR0ZXIgZm9yCitlYWNoIHJldmlzaW9uLCBub3IgZG8gdGhleSByZWNvcmQgYSBzZXBhcmF0ZSBkaXNwbGF5IG5hbWUgYW5kIGVtYWlsCithZGRyZXNzIGZvciBlYWNoIGF1dGhvci4gIExpa2UgZ2l0LXN2bigxKSwgJ3N2bi1mZScgd2lsbCB1c2UgdGhlIG5hbWUKKworLS0tLS0tLS0tCit1c2VyIDx1c2VyQFVVSUQ+CistLS0tLS0tLS0KKworYXMgY29tbWl0dGVyLCB3aGVyZSAndXNlcicgaXMgdGhlIHZhbHVlIG9mIHRoZSBgc3ZuOmF1dGhvcmAgcHJvcGVydHkKK2FuZCAnVVVJRCcgdGhlIHJlcG9zaXRvcnkncyBpZGVudGlmaWVyLgorCitUbyBzdXBwb3J0IGluY3JlbWVudGFsIGltcG9ydHMsICdzdm4tZmUnIHB1dHMgYSBgZ2l0LXN2bi1pZGAgbGluZSBhdAordGhlIGVuZCBvZiBlYWNoIGNvbW1pdCBsb2cgbWVzc2FnZSBpZiBwYXNzZWQgYSBVUkwgb24gdGhlIGNvbW1hbmQKK2xpbmUuICBUaGlzIGxpbmUgaGFzIHRoZSBmb3JtIGBnaXQtc3ZuLWlkOiBVUkxAUkVWTk8gVVVJRGAuCisKK1RoZSByZXN1bHRpbmcgcmVwb3NpdG9yeSB3aWxsIGdlbmVyYWxseSByZXF1aXJlIGZ1cnRoZXIgcHJvY2Vzc2luZwordG8gcHV0IGVhY2ggcHJvamVjdCBpbiBpdHMgb3duIHJlcG9zaXRvcnkgYW5kIHRvIHNlcGFyYXRlIHRoZSBoaXN0b3J5CitvZiBlYWNoIGJyYW5jaC4gIFRoZSAnZ2l0IGZpbHRlci1yZXBvIC0tc3ViZGlyZWN0b3J5LWZpbHRlcicgY29tbWFuZAorbWF5IGJlIHVzZWZ1bCBmb3IgdGhpcyBwdXJwb3NlLgorCitCVUdTCistLS0tCitFbXB0eSBkaXJlY3RvcmllcyBhbmQgdW5rbm93biBwcm9wZXJ0aWVzIGFyZSBzaWxlbnRseSBkaXNjYXJkZWQuCisKK1RoZSBleGl0IHN0YXR1cyBkb2VzIG5vdCByZWZsZWN0IHdoZXRoZXIgYW4gZXJyb3Igd2FzIGRldGVjdGVkLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2dpdC1zdm4oMSksIHN2bjJnaXQoMSksIHN2aygxKSwgZ2l0LWZpbHRlci1yZXBvKDEpLCBnaXQtZmFzdC1pbXBvcnQoMSksCitodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9zdWJ2ZXJzaW9uL3RydW5rL25vdGVzL2R1bXAtbG9hZC1mb3JtYXQudHh0CmRpZmYgLS1naXQgYS9jb250cmliL3N2bi1mZS9zdm5yZHVtcF9zaW0ucHkgYi9jb250cmliL3N2bi1mZS9zdm5yZHVtcF9zaW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGEzY2VlNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3ZuLWZlL3N2bnJkdW1wX3NpbS5weQpAQCAtMCwwICsxLDY4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyIiIgorU2ltdWxhdGVzIHN2bnJkdW1wIGJ5IHJlcGxheWluZyBhbiBleGlzdGluZyBkdW1wIGZyb20gYSBmaWxlLCB0YWtpbmcgY2FyZQorb2YgdGhlIHNwZWNpZmllZCByZXZpc2lvbiByYW5nZS4KK1RvIHNpbXVsYXRlIGluY3JlbWVudGFsIGltcG9ydHMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFNWTlJNQVggY2FuIGJlIHNldAordG8gdGhlIGhpZ2hlc3QgcmV2aXNpb24gdGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlLgorIiIiCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKKworaWYgc3lzLmhleHZlcnNpb24gPCAweDAyMDQwMDAwOgorICAgICMgVGhlIGxpbWl0ZXIgaXMgdGhlIFZhbHVlRXJyb3IoKSBjYWxscy4gVGhpcyBtYXkgYmUgdG9vIGNvbnNlcnZhdGl2ZQorICAgIHN5cy5zdGRlcnIud3JpdGUoInN2bnJkdW1wLXNpbS5weTogcmVxdWlyZXMgUHl0aG9uIDIuNCBvciBsYXRlci5cbiIpCisgICAgc3lzLmV4aXQoMSkKKworCitkZWYgZ2V0cmV2bGltaXQoKToKKyAgICB2YXIgPSAnU1ZOUk1BWCcKKyAgICBpZiB2YXIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgcmV0dXJuIG9zLmVudmlyb25bdmFyXQorICAgIHJldHVybiBOb25lCisKKworZGVmIHdyaXRlZHVtcCh1cmwsIGxvd2VyLCB1cHBlcik6CisgICAgaWYgdXJsLnN0YXJ0c3dpdGgoJ3NpbTovLycpOgorICAgICAgICBmaWxlbmFtZSA9IHVybFs2Ol0KKyAgICAgICAgaWYgZmlsZW5hbWVbLTFdID09ICcvJzoKKyAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVbOi0xXSAgIyByZW1vdmUgdGVybWluYXRpbmcgc2xhc2gKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzaW06Ly8gdXJsIHJlcXVpcmVkJykKKyAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3InKQorICAgIHN0YXRlID0gJ2hlYWRlcicKKyAgICB3cm90ZXJldiA9IEZhbHNlCisgICAgd2hpbGUoVHJ1ZSk6CisgICAgICAgIGwgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgaWYgbCA9PSAnJzoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIHN0YXRlID09ICdoZWFkZXInIGFuZCBsLnN0YXJ0c3dpdGgoJ1JldmlzaW9uLW51bWJlcjogJyk6CisgICAgICAgICAgICBzdGF0ZSA9ICdwcmVmaXgnCisgICAgICAgIGlmIHN0YXRlID09ICdwcmVmaXgnIGFuZCBsID09ICdSZXZpc2lvbi1udW1iZXI6ICVzXG4nICUgbG93ZXI6CisgICAgICAgICAgICBzdGF0ZSA9ICdzZWxlY3Rpb24nCisgICAgICAgIGlmIG5vdCB1cHBlciA9PSAnSEVBRCcgYW5kIHN0YXRlID09ICdzZWxlY3Rpb24nIGFuZCBcCisgICAgICAgICAgICAgICAgbCA9PSAnUmV2aXNpb24tbnVtYmVyOiAlc1xuJyAlIHVwcGVyOgorICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBzdGF0ZSA9PSAnaGVhZGVyJyBvciBzdGF0ZSA9PSAnc2VsZWN0aW9uJzoKKyAgICAgICAgICAgIGlmIHN0YXRlID09ICdzZWxlY3Rpb24nOgorICAgICAgICAgICAgICAgIHdyb3RlcmV2ID0gVHJ1ZQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShsKQorICAgIHJldHVybiB3cm90ZXJldgorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGlmIG5vdCAobGVuKHN5cy5hcmd2KSBpbiAoMywgNCwgNSkpOgorICAgICAgICBwcmludCgidXNhZ2U6ICVzIGR1bXAgVVJMIC1yTE9XRVI6VVBQRVIiKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIGlmIG5vdCBzeXMuYXJndlsxXSA9PSAnZHVtcCc6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ29ubHkgImR1bXAiIGlzIHN1cHBvcnRlZC4nKQorICAgIHVybCA9IHN5cy5hcmd2WzJdCisgICAgciA9ICgnMCcsICdIRUFEJykKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDQgYW5kIHN5cy5hcmd2WzNdWzA6Ml0gPT0gJy1yJzoKKyAgICAgICAgciA9IHN5cy5hcmd2WzNdWzI6XS5sc3RyaXAoKS5zcGxpdCgnOicpCisgICAgaWYgbm90IGdldHJldmxpbWl0KCkgaXMgTm9uZToKKyAgICAgICAgclsxXSA9IGdldHJldmxpbWl0KCkKKyAgICBpZiB3cml0ZWR1bXAodXJsLCByWzBdLCByWzFdKToKKyAgICAgICAgcmV0ID0gMAorICAgIGVsc2U6CisgICAgICAgIHJldCA9IDEKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS9jb250cmliL3RodW5kZXJiaXJkLXBhdGNoLWlubGluZS9SRUFETUUgYi9jb250cmliL3RodW5kZXJiaXJkLXBhdGNoLWlubGluZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwMTQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvdGh1bmRlcmJpcmQtcGF0Y2gtaW5saW5lL1JFQURNRQpAQCAtMCwwICsxLDIwIEBACithcHBwLnNoIGlzIGEgc2NyaXB0IHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoIEV4dGVybmFsRWRpdG9yCitmb3IgTW96aWxsYSBUaHVuZGVyYmlyZC4gSXQgd2lsbCBsZXQgeW91IGluY2x1ZGUgcGF0Y2hlcyBpbmxpbmUgaW4gZS1tYWlscworaW4gYW4gZWFzeSB3YXkuCisKK1VzYWdlOgorLSBHZW5lcmF0ZSB0aGUgcGF0Y2ggd2l0aCBnaXQgZm9ybWF0LXBhdGNoLgorLSBTdGFydCB3cml0aW5nIGEgbmV3IGUtbWFpbCBpbiBUaHVuZGVyYmlyZC4KKy0gUHJlc3MgdGhlIGV4dGVybmFsIGVkaXRvciBidXR0b24gKG9yIEN0cmwtRSkgdG8gcnVuIGFwcHAuc2gKKy0gU2VsZWN0IHRoZSBwcmV2aW91c2x5IGdlbmVyYXRlZCBwYXRjaCBmaWxlLgorLSBGaW5pc2ggZWRpdGluZyB0aGUgZS1tYWlsLgorCitBbnkgdGV4dCB0aGF0IGlzIGVudGVyZWQgaW50byB0aGUgbWVzc2FnZSBlZGl0b3IgYmVmb3JlIGFwcHAuc2ggaXMgY2FsbGVkCit3aWxsIGJlIG1vdmVkIHRvIHRoZSBzZWN0aW9uIGJldHdlZW4gdGhlIC0tLSBhbmQgdGhlIGRpZmZzdGF0LgorCitBbGwgUy1PLUI6cyBhbmQgQ2M6cyBpbiB0aGUgcGF0Y2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgQ0MgbGlzdC4KKworVG8gc2V0IGl0IHVwLCBqdXN0IGluc3RhbGwgRXh0ZXJuYWwgRWRpdG9yIGFuZCB0ZWxsIGl0IHRvIHVzZSBhcHBwLnNoIGFzIHRoZQorZWRpdG9yLgorCitaZW5pdHkgaXMgYSByZXF1aXJlZCBkZXBlbmRlbmN5LgpkaWZmIC0tZ2l0IGEvY29udHJpYi90aHVuZGVyYmlyZC1wYXRjaC1pbmxpbmUvYXBwcC5zaCBiL2NvbnRyaWIvdGh1bmRlcmJpcmQtcGF0Y2gtaW5saW5lL2FwcHAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTA1Mzg3MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvdGh1bmRlcmJpcmQtcGF0Y2gtaW5saW5lL2FwcHAuc2gKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAyMDA4IEx1a2FzIFNhbmRzdHLDtm0gPGx1a3NhbkBnbWFpbC5jb20+CisjCisjIEFwcGVuZFBhdGNoIC0gQSBzY3JpcHQgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoIEV4dGVybmFsRWRpdG9yCisjIGZvciBNb3ppbGxhIFRodW5kZXJiaXJkIHRvIHByb3Blcmx5IGluY2x1ZGUgcGF0Y2hlcyBpbmxpbmUgaW4gZS1tYWlscy4KKworIyBFeHRlcm5hbEVkaXRvciBjYW4gYmUgZG93bmxvYWRlZCBhdCBodHRwOi8vZ2xvYnMub3JnL2FydGljbGVzLnBocD9sbmc9ZW4mcGc9MgorCitDT05GRklMRT1+Ly5hcHBwcmMKKworU0VQPSItPS09LT0tPS09LT0tPS09LT0jIERvbid0IHJlbW92ZSB0aGlzIGxpbmUgIz0tPS09LT0tPS09LT0tPS09LSIKK2lmIFsgLWUgIiRDT05GRklMRSIgXSA7IHRoZW4KKwlMQVNUX0RJUj0kKGdyZXAgLW0gMSAiXkxBU1RfRElSPSIgIiR7Q09ORkZJTEV9InxzZWQgLWUgJ3MvXkxBU1RfRElSPS8vJykKKwljZCAiJHtMQVNUX0RJUn0iCitlbHNlCisJY2QgPiAvZGV2L251bGwKK2ZpCisKK1BBVENIPSQoemVuaXR5IC0tZmlsZS1zZWxlY3Rpb24pCisKK2lmIFsgIiQ/IiAhPSAiMCIgXSA7IHRoZW4KKwkjemVuaXR5IC0tZXJyb3IgLS10ZXh0ICJObyBwYXRjaGZpbGUgZ2l2ZW4uIgorCWV4aXQgMQorZmkKKworY2QgLSA+IC9kZXYvbnVsbAorCitTVUJKRUNUPSQoc2VkIC1uIC1lICcvXlN1YmplY3Q6IC9wJyAiJHtQQVRDSH0iKQorSEVBREVSUz0kKHNlZCAtZSAnL14nIiR7U0VQfSInJC8sJGQnICQxKQorQk9EWT0kKHNlZCAtZSAiMSwvJHtTRVB9L2QiICQxKQorQ01UX01TRz0kKHNlZCAtZSAnMSwvXiQvZCcgLWUgJy9eLS0tJC8sJGQnICIke1BBVENIfSIpCitESUZGPSQoc2VkIC1lICcxLC9eLS0tJC9kJyAiJHtQQVRDSH0iKQorCitDQ1M9JChlY2hvIC1lICIkQ01UX01TR1xuJEhFQURFUlMiIHwgc2VkIC1uIC1lICdzL15DYzogXCguKlwpJC9cMSwvZ3AnIFwKKwktZSAncy9eU2lnbmVkLW9mZi1ieTogXCguKlwpL1wxLC9ncCcpCisKK2VjaG8gIiRTVUJKRUNUIiA+ICQxCitlY2hvICJDYzogJENDUyIgPj4gJDEKK2VjaG8gIiRIRUFERVJTIiB8IHNlZCAtZSAnL15TdWJqZWN0OiAvZCcgLWUgJy9eQ2M6IC9kJyA+PiAkMQorZWNobyAiJFNFUCIgPj4gJDEKKworZWNobyAiJENNVF9NU0ciID4+ICQxCitlY2hvICItLS0iID4+ICQxCitpZiBbICJ4JHtCT0RZfXgiICE9ICJ4eCIgXSA7IHRoZW4KKwllY2hvID4+ICQxCisJZWNobyAiJEJPRFkiID4+ICQxCisJZWNobyA+PiAkMQorZmkKK2VjaG8gIiRESUZGIiA+PiAkMQorCitMQVNUX0RJUj0kKGRpcm5hbWUgIiR7UEFUQ0h9IikKKworZ3JlcCAtdiAiXkxBU1RfRElSPSIgIiR7Q09ORkZJTEV9IiA+ICIke0NPTkZGSUxFfV8iCitlY2hvICJMQVNUX0RJUj0ke0xBU1RfRElSfSIgPj4gIiR7Q09ORkZJTEV9XyIKK212ICIke0NPTkZGSUxFfV8iICIke0NPTkZGSUxFfSIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdXBkYXRlLXVuaWNvZGUvLmdpdGlnbm9yZSBiL2NvbnRyaWIvdXBkYXRlLXVuaWNvZGUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGViYzZhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi91cGRhdGUtdW5pY29kZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAordW5pc2V0LworVW5pY29kZURhdGEudHh0CitFYXN0QXNpYW5XaWR0aC50eHQKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdXBkYXRlLXVuaWNvZGUvUkVBRE1FIGIvY29udHJpYi91cGRhdGUtdW5pY29kZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUxYTE5NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvdXBkYXRlLXVuaWNvZGUvUkVBRE1FCkBAIC0wLDAgKzEsMjAgQEAKK1RMO0RSOiBSdW4gdXBkYXRlX3VuaWNvZGUuc2ggYWZ0ZXIgdGhlIHB1YmxpY2F0aW9uIG9mIGEgbmV3IFVuaWNvZGUKK3N0YW5kYXJkIGFuZCBjb21taXQgdGhlIHJlc3VsdGluZyB1bmljb2RlLXdpZHRocy5oIGZpbGUuCisKK1RoZSBsb25nIHZlcnNpb24KKz09PT09PT09PT09PT09PT0KKworVGhlIEdpdCBzb3VyY2UgY29kZSBzaGlwcyB0aGUgZmlsZSB1bmljb2RlLXdpZHRocy5oIHdoaWNoIGNvbnRhaW5zCit0YWJsZXMgb2YgemVybyBhbmQgZG91YmxlIHdpZHRoIFVuaWNvZGUgY29kZSBwb2ludHMsIHJlc3BlY3RpdmVseS4KK1RoZXNlIHRhYmxlcyBhcmUgZ2VuZXJhdGVkIHVzaW5nIHVwZGF0ZV91bmljb2RlLnNoIGluIHRoaXMgZGlyZWN0b3J5LgordXBkYXRlX3VuaWNvZGUuc2ggaXRzZWxmIHVzZXMgYSB0aGlyZC1wYXJ0eSB0b29sLCB1bmlzZXQsIHRvIHF1ZXJ5IHR3bworVW5pY29kZSBkYXRhIGZpbGVzIGZvciB0aGUgaW50ZXJlc3RpbmcgY29kZSBwb2ludHMuCisKK09uIGZpcnN0IHJ1biwgdXBkYXRlX3VuaWNvZGUuc2ggY2xvbmVzIHVuaXNldCBmcm9tIEdpdGh1YiBhbmQgYnVpbGRzIGl0LgorVGhpcyByZXF1aXJlcyBhIGN1cnJlbnQtaXNoIHZlcnNpb24gb2YgYXV0b2NvbmYgKDIuNjkgd29ya3MgcGVyIERlY2VtYmVyCisyMDE2KS4KKworT24gZWFjaCBydW4sIHVwZGF0ZV91bmljb2RlLnNoIGNoZWNrcyB3aGV0aGVyIG1vcmUgcmVjZW50IFVuaWNvZGUgZGF0YQorZmlsZXMgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBVbmljb2RlIGNvbnNvcnRpdW0sIGFuZCByZWJ1aWxkcyB0aGUgaGVhZGVyCit1bmljb2RlLXdpZHRocy5oIHdpdGggdGhlIG5ldyBkYXRhLiBUaGUgbmV3IGhlYWRlciBjYW4gdGhlbiBiZQorY29tbWl0dGVkLgpkaWZmIC0tZ2l0IGEvY29udHJpYi91cGRhdGUtdW5pY29kZS91cGRhdGVfdW5pY29kZS5zaCBiL2NvbnRyaWIvdXBkYXRlLXVuaWNvZGUvdXBkYXRlX3VuaWNvZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWE5MDg2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvdXBkYXRlLXVuaWNvZGUvdXBkYXRlX3VuaWNvZGUuc2gKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisjU2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjQ0LworIworI01lIEVuY2xvc2luZ19NYXJrICBhbiBlbmNsb3NpbmcgY29tYmluaW5nIG1hcmsKKyNNbiBOb25zcGFjaW5nX01hcmsgYSBub25zcGFjaW5nIGNvbWJpbmluZyBtYXJrICh6ZXJvIGFkdmFuY2Ugd2lkdGgpCisjQ2YgRm9ybWF0ICAgICAgICAgIGEgZm9ybWF0IGNvbnRyb2wgY2hhcmFjdGVyCisjCitjZCAiJChkaXJuYW1lICIkMCIpIgorVU5JQ09ERVdJRFRIX0g9JChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkvdW5pY29kZS13aWR0aC5oCisKK3dnZXQgLU4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVUNEL2xhdGVzdC91Y2QvVW5pY29kZURhdGEudHh0IFwKKwlodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9VQ0QvbGF0ZXN0L3VjZC9FYXN0QXNpYW5XaWR0aC50eHQgJiYKK2lmICEgdGVzdCAtZCB1bmlzZXQ7IHRoZW4KKwlnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL2RlcHAvdW5pc2V0LmdpdCAmJgorCSggY2QgdW5pc2V0ICYmIGdpdCBjaGVja291dCA0YjE4NjE5NmRkICkKK2ZpICYmCisoCisJY2QgdW5pc2V0ICYmCisJaWYgISB0ZXN0IC14IHVuaXNldDsgdGhlbgorCQlhdXRvcmVjb25mIC1pICYmCisJCS4vY29uZmlndXJlIC0tZW5hYmxlLXdhcm5pbmdzPS1XZXJyb3IgQ0ZMQUdTPSctTzAgLWdnZGInCisJZmkgJiYKKwltYWtlCispICYmCitVTklDT0RFX0RJUj0uICYmIGV4cG9ydCBVTklDT0RFX0RJUiAmJgorY2F0ID4kVU5JQ09ERVdJRFRIX0ggPDwtRU9GCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVydmFsIHplcm9fd2lkdGhbXSA9IHsKKwkkKHVuaXNldC91bmlzZXQgLS0zMiBjYXQ6TWUsTW4sQ2YgKyBVKzExNjAuLlUrMTFGRiAtIFUrMDBBRCkKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVydmFsIGRvdWJsZV93aWR0aFtdID0geworCSQodW5pc2V0L3VuaXNldCAtLTMyIGVhdzpGLFcpCit9OworRU9GCmRpZmYgLS1naXQgYS9jb250cmliL3ZzY29kZS8uZ2l0YXR0cmlidXRlcyBiL2NvbnRyaWIvdnNjb2RlLy5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OWYyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3ZzY29kZS8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACitpbml0LnNoIHdoaXRlc3BhY2U9LWluZGVudC13aXRoLW5vbi10YWIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdnNjb2RlL1JFQURNRS5tZCBiL2NvbnRyaWIvdnNjb2RlL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjAyZDYyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi92c2NvZGUvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTQgQEAKK0NvbmZpZ3VyYXRpb24gZm9yIFZTIENvZGUKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworW1ZTIENvZGVdKGh0dHBzOi8vY29kZS52aXN1YWxzdHVkaW8uY29tLykgaXMgYSBsaWdodHdlaWdodCBidXQgcG93ZXJmdWwgc291cmNlCitjb2RlIGVkaXRvciB3aGljaCBydW5zIG9uIHlvdXIgZGVza3RvcCBhbmQgaXMgYXZhaWxhYmxlIGZvcgorW1dpbmRvd3NdKGh0dHBzOi8vY29kZS52aXN1YWxzdHVkaW8uY29tL2RvY3Mvc2V0dXAvd2luZG93cyksCitbbWFjT1NdKGh0dHBzOi8vY29kZS52aXN1YWxzdHVkaW8uY29tL2RvY3Mvc2V0dXAvbWFjKSBhbmQKK1tMaW51eF0oaHR0cHM6Ly9jb2RlLnZpc3VhbHN0dWRpby5jb20vZG9jcy9zZXR1cC9saW51eCkuIEFtb25nIG90aGVyIGxhbmd1YWdlcywKK2l0IGhhcyBbc3VwcG9ydCBmb3IgQy9DKysgdmlhIGFuIGV4dGVuc2lvbl0oaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC92c2NvZGUtY3BwdG9vbHMpLgorCitUbyBzdGFydCBkZXZlbG9waW5nIEdpdCB3aXRoIFZTIENvZGUsIHNpbXBseSBydW4gdGhlIFVuaXggc2hlbGwgc2NyaXB0IGNhbGxlZAorYGluaXQuc2hgIGluIHRoaXMgZGlyZWN0b3J5LCB3aGljaCBjcmVhdGVzIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGluCitgLnZzY29kZS9gIHRoYXQgVlMgQ29kZSBjb25zdW1lcy4gYGluaXQuc2hgIG5lZWRzIGFjY2VzcyB0byBgbWFrZWAgYW5kIGBnY2NgLAorc28gcnVuIHRoZSBzY3JpcHQgaW4gYSBHaXQgU0RLIHNoZWxsIGlmIHlvdSBhcmUgdXNpbmcgV2luZG93cy4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvdnNjb2RlL2luaXQuc2ggYi9jb250cmliL3ZzY29kZS9pbml0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI3ZGU5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3ZzY29kZS9pbml0LnNoCkBAIC0wLDAgKzEsMzc1IEBACisjIS9iaW4vc2gKKworZGllICgpIHsKKwllY2hvICIkKiIgPiYyCisJZXhpdCAxCit9CisKK2NkICIkKGRpcm5hbWUgIiQwIikiLy4uLy4uIHx8CitkaWUgIkNvdWxkIG5vdCBjZCB0byB0b3AtbGV2ZWwgZGlyZWN0b3J5IgorCitta2RpciAtcCAudnNjb2RlIHx8CitkaWUgIkNvdWxkIG5vdCBjcmVhdGUgLnZzY29kZS8iCisKKyMgR2VuZXJhbCBzZXR0aW5ncworCitjYXQgPi52c2NvZGUvc2V0dGluZ3MuanNvbi5uZXcgPDxcRU9GIHx8Cit7CisgICAgIkNfQ3BwLmludGVsbGlTZW5zZUVuZ2luZSI6ICJEZWZhdWx0IiwKKyAgICAiQ19DcHAuaW50ZWxsaVNlbnNlRW5naW5lRmFsbGJhY2siOiAiRGlzYWJsZWQiLAorICAgICJbZ2l0LWNvbW1pdF0iOiB7CisgICAgICAgICJlZGl0b3Iud29yZFdyYXAiOiAid29yZFdyYXBDb2x1bW4iLAorICAgICAgICAiZWRpdG9yLndvcmRXcmFwQ29sdW1uIjogNzIKKyAgICB9LAorICAgICJbY10iOiB7CisgICAgICAgICJlZGl0b3IuZGV0ZWN0SW5kZW50YXRpb24iOiBmYWxzZSwKKyAgICAgICAgImVkaXRvci5pbnNlcnRTcGFjZXMiOiBmYWxzZSwKKyAgICAgICAgImVkaXRvci50YWJTaXplIjogOCwKKyAgICAgICAgImVkaXRvci53b3JkV3JhcCI6ICJ3b3JkV3JhcENvbHVtbiIsCisgICAgICAgICJlZGl0b3Iud29yZFdyYXBDb2x1bW4iOiA4MCwKKyAgICAgICAgImZpbGVzLnRyaW1UcmFpbGluZ1doaXRlc3BhY2UiOiB0cnVlCisgICAgfSwKKyAgICAiZmlsZXMuYXNzb2NpYXRpb25zIjogeworICAgICAgICAiKi5oIjogImMiLAorICAgICAgICAiKi5jIjogImMiCisgICAgfSwKKyAgICAiY1NwZWxsLmlnbm9yZVBhdGhzIjogWworICAgIF0sCisgICAgImNTcGVsbC53b3JkcyI6IFsKKyAgICAgICAgIkRBVEFXIiwKKyAgICAgICAgIkRCQ0FDSEVEIiwKKyAgICAgICAgIkRGQ0hFQ0siLAorICAgICAgICAiRFRZUEUiLAorICAgICAgICAiSGFtYW5vIiwKKyAgICAgICAgIkhDQVNUIiwKKyAgICAgICAgIkhFWFNaIiwKKyAgICAgICAgIkhLRVkiLAorICAgICAgICAiSEtMTSIsCisgICAgICAgICJJRkdJVExJTksiLAorICAgICAgICAiSUZJTlZBTElEIiwKKyAgICAgICAgIklTQlJPS0VOIiwKKyAgICAgICAgIklTR0lUTElOSyIsCisgICAgICAgICJJU1NZTVJFRiIsCisgICAgICAgICJKdW5pbyIsCisgICAgICAgICJMUERXT1JEIiwKKyAgICAgICAgIkxQUFJPQyIsCisgICAgICAgICJMUFdTVFIiLAorICAgICAgICAiTVNWQ1JUIiwKKyAgICAgICAgIk5PQVJHIiwKKyAgICAgICAgIk5PQ09NUExFVEUiLAorICAgICAgICAiTk9JTkhFUklUIiwKKyAgICAgICAgIlJFTk9STUFMSVpFIiwKKyAgICAgICAgIlNUQVJURiIsCisgICAgICAgICJTVEFSVFVQSU5GT0VYVyIsCisgICAgICAgICJTY2hpbmRlbGluIiwKKyAgICAgICAgIlVDUlQiLAorICAgICAgICAiWUVTTk8iLAorICAgICAgICAiYXJnY3AiLAorICAgICAgICAiYmVnaW50aHJlYWRleCIsCisgICAgICAgICJjb21taXR0aXNoIiwKKyAgICAgICAgImNvbnRlbnRwIiwKKyAgICAgICAgImNwYXRoIiwKKyAgICAgICAgImNwaWR4IiwKKyAgICAgICAgImN0aW0iLAorICAgICAgICAiZGVxdW90ZSIsCisgICAgICAgICJlbnZ3IiwKKyAgICAgICAgImV3YWgiLAorICAgICAgICAiZmRhdGEiLAorICAgICAgICAiZmhlcnIiLAorICAgICAgICAiZmhpbiIsCisgICAgICAgICJmaG91dCIsCisgICAgICAgICJmcmFncCIsCisgICAgICAgICJmc21vbml0b3IiLAorICAgICAgICAiaG5zZWMiLAorICAgICAgICAiaWRlbnRzIiwKKyAgICAgICAgImluY2x1ZGVpZiIsCisgICAgICAgICJpbnRlcnByIiwKKyAgICAgICAgImlwcm9nIiwKKyAgICAgICAgImlzZXhlIiwKKyAgICAgICAgImlza2V5Y2hhciIsCisgICAgICAgICJrb21wYXJlIiwKKyAgICAgICAgIm1rc25wYXRoIiwKKyAgICAgICAgIm1rdGFnIiwKKyAgICAgICAgIm1rdHJlZSIsCisgICAgICAgICJtbWJsb2IiLAorICAgICAgICAibW1idWZmZXIiLAorICAgICAgICAibW1maWxlIiwKKyAgICAgICAgIm5vZW52IiwKKyAgICAgICAgIm5wYXJlbnRzIiwKKyAgICAgICAgIm50cGF0aCIsCisgICAgICAgICJvbmRpc2siLAorICAgICAgICAib29pZCIsCisgICAgICAgICJvcGxlbiIsCisgICAgICAgICJvc2RsIiwKKyAgICAgICAgInBuZXciLAorICAgICAgICAicG9sZCIsCisgICAgICAgICJwcGluZm8iLAorICAgICAgICAicHVzaGYiLAorICAgICAgICAicHVzaHYiLAorICAgICAgICAicmF3c3oiLAorICAgICAgICAicmViYXNpbmciLAorICAgICAgICAicmVlbmNvZGUiLAorICAgICAgICAicmVwbyIsCisgICAgICAgICJyZXJlcmUiLAorICAgICAgICAic2NsZCIsCisgICAgICAgICJzaGFyZWRyZXBvIiwKKyAgICAgICAgInNwYXdudiIsCisgICAgICAgICJzcGF3bnZlIiwKKyAgICAgICAgInNwYXdudnBlIiwKKyAgICAgICAgInN0cmR1cCdpbmciLAorICAgICAgICAic3VibW9kdWxlIiwKKyAgICAgICAgInN1Ym1vZHVsZXMiLAorICAgICAgICAidG9wYXRoIiwKKyAgICAgICAgInRvcG8iLAorICAgICAgICAidHBhdGNoIiwKKyAgICAgICAgInVuZXhlY3V0YWJsZSIsCisgICAgICAgICJ1bmhpZGUiLAorICAgICAgICAidW5rYyIsCisgICAgICAgICJ1bmt2IiwKKyAgICAgICAgInVubWFyayIsCisgICAgICAgICJ1bm1hdGNoIiwKKyAgICAgICAgInVuc2V0cyIsCisgICAgICAgICJ1bnNob3duIiwKKyAgICAgICAgInVudHJhY2tlZCIsCisgICAgICAgICJ1bnRyYWNrZWRjYWNoZSIsCisgICAgICAgICJ1bnVzZSIsCisgICAgICAgICJ1cG9zIiwKKyAgICAgICAgInV2YWwiLAorICAgICAgICAidnJlcG9ydGYiLAorICAgICAgICAid2FyZ3MiLAorICAgICAgICAid2FyZ3YiLAorICAgICAgICAid2J1ZmZlciIsCisgICAgICAgICJ3Y21kIiwKKyAgICAgICAgIndjc25pY21wIiwKKyAgICAgICAgIndjc3RvdXRmZHVwIiwKKyAgICAgICAgIndkZWx0YWVudiIsCisgICAgICAgICJ3ZGlyIiwKKyAgICAgICAgIndlbnYiLAorICAgICAgICAid2VudmJsayIsCisgICAgICAgICJ3ZW52Y21wIiwKKyAgICAgICAgIndlbnZpcm9uIiwKKyAgICAgICAgIndlbnZwb3MiLAorICAgICAgICAid2VudnN6IiwKKyAgICAgICAgIndmaWxlIiwKKyAgICAgICAgIndmaWxlbmFtZSIsCisgICAgICAgICJ3Zm9wZW4iLAorICAgICAgICAid2ZyZW9wZW4iLAorICAgICAgICAid2Z1bGxwYXRoIiwKKyAgICAgICAgIndoaWNoJ2xsIiwKKyAgICAgICAgIndsaW5rIiwKKyAgICAgICAgIndtYWluIiwKKyAgICAgICAgIndta2RpciIsCisgICAgICAgICJ3bWt0ZW1wIiwKKyAgICAgICAgInduZXdwYXRoIiwKKyAgICAgICAgIndvdHlwZSIsCisgICAgICAgICJ3cGF0aCIsCisgICAgICAgICJ3cGF0aG5hbWUiLAorICAgICAgICAid3BnbXB0ciIsCisgICAgICAgICJ3cG5ldyIsCisgICAgICAgICJ3cG9pbnRlciIsCisgICAgICAgICJ3cG9sZCIsCisgICAgICAgICJ3cG9zIiwKKyAgICAgICAgIndwdXRlbnYiLAorICAgICAgICAid3JtZGlyIiwKKyAgICAgICAgIndzaGlwIiwKKyAgICAgICAgInd0YXJnZXQiLAorICAgICAgICAid3RlbXBsYXRlIiwKKyAgICAgICAgInd1bmxpbmsiLAorICAgICAgICAieGNhbGxvYyIsCisgICAgICAgICJ4Z2V0Y3dkIiwKKyAgICAgICAgInhtYWxsb2N6IiwKKyAgICAgICAgInhtZW1kdXB6IiwKKyAgICAgICAgInhtbWFwIiwKKyAgICAgICAgInhvcHRzIiwKKyAgICAgICAgInhyZWFsbG9jIiwKKyAgICAgICAgInhzbnByaW50ZiIsCisgICAgICAgICJ4dXRmdG93Y3MiLAorICAgICAgICAieHV0ZnRvd2NzbiIsCisgICAgICAgICJ4d2NzdG91dGYiCisgICAgXSwKKyAgICAiY1NwZWxsLmlnbm9yZVJlZ0V4cExpc3QiOiBbCisgICAgICAgICJcXFwiKERJUkN8RlNNTnxSRVVDfFVOVFIpXFxcIiIsCisgICAgICAgICJcXFxcdVswLTlhLWZBLUZ4XXs0fVxcYiIsCisgICAgICAgICJcXGIoZmlsZnJlfGZyb3R6fHh5enp5KVxcYiIsCisgICAgICAgICJcXGJDTUlUX0ZNVF9ERUZBVUxUXFxiIiwKKyAgICAgICAgIlxcYmRlLW11bmdlXFxiIiwKKyAgICAgICAgIlxcYkdFVF9PSURfRElTQU1CSUdVQVRPUlNcXGIiLAorICAgICAgICAiXFxiSEFTSF9SRU5PUk1BTElaRVxcYiIsCisgICAgICAgICJcXGJUUkVFU0FNRW5lc3NcXGIiLAorICAgICAgICAiXFxiVVNFX1NUREVWXFxiIiwKKyAgICAgICAgIlxcV2NoYXIgKlxcKlxcVyp1dGZzXFxXIiwKKyAgICAgICAgImNVUkwncyIsCisgICAgICAgICJuZWRtYWxsb2MnZWQiLAorICAgICAgICAibnRpZnNcXC5oIiwKKyAgICBdLAorfQorRU9GCitkaWUgIkNvdWxkIG5vdCB3cml0ZSBzZXR0aW5ncy5qc29uIgorCisjIEluZmVyIHNvbWUgc2V0dXAtc3BlY2lmaWMgbG9jYXRpb25zL25hbWVzCisKK0dDQ1BBVEg9IiQod2hpY2ggZ2NjKSIKK0dEQlBBVEg9IiQod2hpY2ggZ2RiKSIKK01BS0VDT01NQU5EPSJtYWtlIC1qNSBERVZFTE9QRVI9MSIKK09TTkFNRT0KK1g9CitjYXNlICIkKHVuYW1lIC1zKSIgaW4KK01JTkdXKikKKwlHQ0NQQVRIPSIkKGN5Z3BhdGggLWFtICIkR0NDUEFUSCIpIgorCUdEQlBBVEg9IiQoY3lncGF0aCAtYW0gIiRHREJQQVRIIikiCisJTUFLRV9CQVNIPSIkKGN5Z3BhdGggLWFtIC9naXQtY21kLmV4ZSkgLS1jb21tYW5kPXVzclxcXFxiaW5cXFxcYmFzaC5leGUiCisJTUFLRUNPTU1BTkQ9IiRNQUtFX0JBU0ggLWxjIFxcXCIkTUFLRUNPTU1BTkRcXFwiIgorCU9TTkFNRT1XaW4zMgorCVg9LmV4ZQorCTs7CitMaW51eCkKKwlPU05BTUU9TGludXgKKwk7OworRGFyd2luKQorCU9TTkFNRT1tYWNPUworCTs7Citlc2FjCisKKyMgRGVmYXVsdCBidWlsZCB0YXNrCisKK2NhdCA+LnZzY29kZS90YXNrcy5qc29uLm5ldyA8PEVPRiB8fAoreworICAgIC8vIFNlZSBodHRwczovL2dvLm1pY3Jvc29mdC5jb20vZndsaW5rLz9MaW5rSWQ9NzMzNTU4CisgICAgLy8gZm9yIHRoZSBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSB0YXNrcy5qc29uIGZvcm1hdAorICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAidGFza3MiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJsYWJlbCI6ICJtYWtlIiwKKyAgICAgICAgICAgICJ0eXBlIjogInNoZWxsIiwKKyAgICAgICAgICAgICJjb21tYW5kIjogIiRNQUtFQ09NTUFORCIsCisgICAgICAgICAgICAiZ3JvdXAiOiB7CisgICAgICAgICAgICAgICAgImtpbmQiOiAiYnVpbGQiLAorICAgICAgICAgICAgICAgICJpc0RlZmF1bHQiOiB0cnVlCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBdCit9CitFT0YKK2RpZSAiQ291bGQgbm90IGluc3RhbGwgZGVmYXVsdCBidWlsZCB0YXNrIgorCisjIERlYnVnZ2VyIHNldHRpbmdzCisKK2NhdCA+LnZzY29kZS9sYXVuY2guanNvbi5uZXcgPDxFT0YgfHwKK3sKKyAgICAvLyBVc2UgSW50ZWxsaVNlbnNlIHRvIGxlYXJuIGFib3V0IHBvc3NpYmxlIGF0dHJpYnV0ZXMuCisgICAgLy8gSG92ZXIgdG8gdmlldyBkZXNjcmlwdGlvbnMgb2YgZXhpc3RpbmcgYXR0cmlidXRlcy4KKyAgICAvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgdmlzaXQ6CisgICAgLy8gaHR0cHM6Ly9nby5taWNyb3NvZnQuY29tL2Z3bGluay8/bGlua2lkPTgzMDM4NworICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwKKyAgICAiY29uZmlndXJhdGlvbnMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIihnZGIpIExhdW5jaCIsCisgICAgICAgICAgICAidHlwZSI6ICJjcHBkYmciLAorICAgICAgICAgICAgInJlcXVlc3QiOiAibGF1bmNoIiwKKyAgICAgICAgICAgICJwcm9ncmFtIjogIlwke3dvcmtzcGFjZUZvbGRlcn0vZ2l0JFgiLAorICAgICAgICAgICAgImFyZ3MiOiBbXSwKKyAgICAgICAgICAgICJzdG9wQXRFbnRyeSI6IGZhbHNlLAorICAgICAgICAgICAgImN3ZCI6ICJcJHt3b3Jrc3BhY2VGb2xkZXJ9IiwKKyAgICAgICAgICAgICJlbnZpcm9ubWVudCI6IFtdLAorICAgICAgICAgICAgImV4dGVybmFsQ29uc29sZSI6IHRydWUsCisgICAgICAgICAgICAiTUlNb2RlIjogImdkYiIsCisgICAgICAgICAgICAibWlEZWJ1Z2dlclBhdGgiOiAiJEdEQlBBVEgiLAorICAgICAgICAgICAgInNldHVwQ29tbWFuZHMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW5hYmxlIHByZXR0eS1wcmludGluZyBmb3IgZ2RiIiwKKyAgICAgICAgICAgICAgICAgICAgInRleHQiOiAiLWVuYWJsZS1wcmV0dHktcHJpbnRpbmciLAorICAgICAgICAgICAgICAgICAgICAiaWdub3JlRmFpbHVyZXMiOiB0cnVlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorRU9GCitkaWUgIkNvdWxkIG5vdCB3cml0ZSBsYXVuY2ggY29uZmlndXJhdGlvbiIKKworIyBDL0MrKyBleHRlbnNpb24gc2V0dGluZ3MKKworbWFrZSAtZiAtIE9TTkFNRT0kT1NOQU1FIEdDQ1BBVEg9IiRHQ0NQQVRIIiB2c2NvZGUtaW5pdCBcCisJPi52c2NvZGUvY19jcHBfcHJvcGVydGllcy5qc29uIDw8XEVPRiB8fAoraW5jbHVkZSBNYWtlZmlsZQorCit2c2NvZGUtaW5pdDoKKwlAbWtkaXIgLXAgLnZzY29kZSAmJiBcCisJaW5jcz0gJiYgZGVmcz0gJiYgXAorCWZvciBlIGluICQoQUxMX0NGTEFHUykgXAorCQkJJy1ER0lUX0VYRUNfUEFUSD0iJChnaXRleGVjZGlyX1NRKSInIFwKKwkJCSctREdJVF9MT0NBTEVfUEFUSD0iJChsb2NhbGVkaXJfcmVsYXRpdmVfU1EpIicgXAorCQkJJy1EQklORElSPSIkKGJpbmRpcl9yZWxhdGl2ZV9TUSkiJyBcCisJCQknLURGQUxMQkFDS19SVU5USU1FX1BSRUZJWD0iJChwcmVmaXhfU1EpIicgXAorCQkJJy1EREVGQVVMVF9HSVRfVEVNUExBVEVfRElSPSIkKHRlbXBsYXRlX2Rpcl9TUSkiJyBcCisJCQknLURFVENfR0lUQ09ORklHPSIkKEVUQ19HSVRDT05GSUdfU1EpIicgXAorCQkJJy1ERVRDX0dJVEFUVFJJQlVURVM9IiQoRVRDX0dJVEFUVFJJQlVURVNfU1EpIicgXAorCQkJJy1ER0lUX0xPQ0FMRV9QQVRIPSIkKGxvY2FsZWRpcl9yZWxhdGl2ZV9TUSkiJyBcCisJCQknLURDVVJMX0RJU0FCTEVfVFlQRUNIRUNLJywgXAorCQkJJy1ER0lUX0hUTUxfUEFUSD0iJChodG1sZGlyX3JlbGF0aXZlX1NRKSInIFwKKwkJCSctREdJVF9NQU5fUEFUSD0iJChtYW5kaXJfcmVsYXRpdmVfU1EpIicgXAorCQkJJy1ER0lUX0lORk9fUEFUSD0iJChpbmZvZGlyX3JlbGF0aXZlX1NRKSInOyBkbyBcCisJCWNhc2UgIiQkZSIgaW4gXAorCQktSS4pIFwKKwkJCWluY3M9IiQkKHByaW50ZiAnJSAxNnMiJCR7d29ya3NwYWNlUm9vdH0iLFxuJXMnIFwKKwkJCQkiIiAiJCRpbmNzIikiIFwKKwkJCTs7IFwKKwkJLUkvKikgXAorCQkJaW5jcz0iJCQocHJpbnRmICclIDE2cyIlcyIsXG4lcycgXAorCQkJCSIiICIkJHtlIy1JfSIgIiQkaW5jcyIpIiBcCisJCQk7OyBcCisJCS1JKikgXAorCQkJaW5jcz0iJCQocHJpbnRmICclIDE2cyIkJHt3b3Jrc3BhY2VSb290fS8lcyIsXG4lcycgXAorCQkJCSIiICIkJHtlIy1JfSIgIiQkaW5jcyIpIiBcCisJCQk7OyBcCisJCS1EKikgXAorCQkJZGVmcz0iJCQocHJpbnRmICclIDE2cyIlcyIsXG4lcycgXAorCQkJCSIiICIkJChlY2hvICIkJHtlIy1EfSIgfCBzZWQgJ3MvIi9cXCYvZycpIiBcCisJCQkJIiQkZGVmcyIpIiBcCisJCQk7OyBcCisJCWVzYWM7IFwKKwlkb25lICYmIFwKKwllY2hvICd7JyAmJiBcCisJZWNobyAnICAgICJjb25maWd1cmF0aW9ucyI6IFsnICYmIFwKKwllY2hvICcgICAgICAgIHsnICYmIFwKKwllY2hvICcgICAgICAgICAgICAibmFtZSI6ICIkKE9TTkFNRSkiLCcgJiYgXAorCWVjaG8gJyAgICAgICAgICAgICJpbnRlbGxpU2Vuc2VNb2RlIjogImNsYW5nLXg2NCIsJyAmJiBcCisJZWNobyAnICAgICAgICAgICAgImluY2x1ZGVQYXRoIjogWycgJiYgXAorCWVjaG8gIiQkaW5jcyIgfCBzb3J0IHwgc2VkICckJHMvLCQkLy8nICYmIFwKKwllY2hvICcgICAgICAgICAgICBdLCcgJiYgXAorCWVjaG8gJyAgICAgICAgICAgICJkZWZpbmVzIjogWycgJiYgXAorCWVjaG8gIiQkZGVmcyIgfCBzb3J0IHwgc2VkICckJHMvLCQkLy8nICYmIFwKKwllY2hvICcgICAgICAgICAgICBdLCcgJiYgXAorCWVjaG8gJyAgICAgICAgICAgICJicm93c2UiOiB7JyAmJiBcCisJZWNobyAnICAgICAgICAgICAgICAgICJsaW1pdFN5bWJvbHNUb0luY2x1ZGVkSGVhZGVycyI6IHRydWUsJyAmJiBcCisJZWNobyAnICAgICAgICAgICAgICAgICJkYXRhYmFzZUZpbGVuYW1lIjogIiIsJyAmJiBcCisJZWNobyAnICAgICAgICAgICAgICAgICJwYXRoIjogWycgJiYgXAorCWVjaG8gJyAgICAgICAgICAgICAgICAgICAgIiQke3dvcmtzcGFjZVJvb3R9IicgJiYgXAorCWVjaG8gJyAgICAgICAgICAgICAgICBdJyAmJiBcCisJZWNobyAnICAgICAgICAgICAgfSwnICYmIFwKKwllY2hvICcgICAgICAgICAgICAiY1N0YW5kYXJkIjogImMxMSIsJyAmJiBcCisJZWNobyAnICAgICAgICAgICAgImNwcFN0YW5kYXJkIjogImMrKzE3IiwnICYmIFwKKwllY2hvICcgICAgICAgICAgICAiY29tcGlsZXJQYXRoIjogIiQoR0NDUEFUSCkiJyAmJiBcCisJZWNobyAnICAgICAgICB9JyAmJiBcCisJZWNobyAnICAgIF0sJyAmJiBcCisJZWNobyAnICAgICJ2ZXJzaW9uIjogNCcgJiYgXAorCWVjaG8gJ30nCitFT0YKK2RpZSAiQ291bGQgbm90IHdyaXRlIHNldHRpbmdzIGZvciB0aGUgQy9DKysgZXh0ZW5zaW9uIgorCitmb3IgZmlsZSBpbiAudnNjb2RlL3NldHRpbmdzLmpzb24gLnZzY29kZS90YXNrcy5qc29uIC52c2NvZGUvbGF1bmNoLmpzb24KK2RvCisJaWYgdGVzdCAtZiAkZmlsZQorCXRoZW4KKwkJaWYgZ2l0IGRpZmYgLS1uby1pbmRleCAtLXF1aWV0IC0tZXhpdC1jb2RlICRmaWxlICRmaWxlLm5ldworCQl0aGVuCisJCQlybSAkZmlsZS5uZXcKKwkJZWxzZQorCQkJcHJpbnRmICJUaGUgZmlsZSAkZmlsZS5uZXcgaGFzIHRoZXNlIGNoYW5nZXM6XG5cbiIKKwkJCWdpdCAtLW5vLXBhZ2VyIGRpZmYgLS1uby1pbmRleCAkZmlsZSAkZmlsZS5uZXcKKwkJCXByaW50ZiAiXG5cbk1heWJlIFxgbXYgJGZpbGUubmV3ICRmaWxlXGA/XG5cbiIKKwkJZmkKKwllbHNlCisJCW12ICRmaWxlLm5ldyAkZmlsZQorCWZpCitkb25lCmRpZmYgLS1naXQgYS9jb250cmliL3dvcmtkaXIvLmdpdGF0dHJpYnV0ZXMgYi9jb250cmliL3dvcmtkaXIvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3OGM1ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvd29ya2Rpci8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisvZ2l0LW5ldy13b3JrZGlyIGVvbD1sZgpkaWZmIC0tZ2l0IGEvY29udHJpYi93b3JrZGlyL2dpdC1uZXctd29ya2RpciBiL2NvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODg4YzM0YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIKQEAgLTAsMCArMSwxMDUgQEAKKyMhL2Jpbi9zaAorCit1c2FnZSAoKSB7CisJZWNobyAidXNhZ2U6IiAkQAorCWV4aXQgMTI3Cit9CisKK2RpZSAoKSB7CisJZWNobyAkQAorCWV4aXQgMTI4Cit9CisKK2ZhaWxlZCAoKSB7CisJZGllICJ1bmFibGUgdG8gY3JlYXRlIG5ldyB3b3JrZGlyICckbmV3X3dvcmtkaXInISIKK30KKworaWYgdGVzdCAkIyAtbHQgMiB8fCB0ZXN0ICQjIC1ndCAzCit0aGVuCisJdXNhZ2UgIiQwIDxyZXBvc2l0b3J5PiA8bmV3X3dvcmtkaXI+IFs8YnJhbmNoPl0iCitmaQorCitvcmlnX2dpdD0kMQorbmV3X3dvcmtkaXI9JDIKK2JyYW5jaD0kMworCisjIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgd2hhdCBpcyBwb2ludGVkIHRvIGhhcyBhIC5naXQgZGlyZWN0b3J5IC4uLgorZ2l0X2Rpcj0kKGNkICIkb3JpZ19naXQiIDI+L2Rldi9udWxsICYmCisgIGdpdCByZXYtcGFyc2UgLS1naXQtZGlyIDI+L2Rldi9udWxsKSB8fAorICBkaWUgIk5vdCBhIGdpdCByZXBvc2l0b3J5OiBcIiRvcmlnX2dpdFwiIgorCitjYXNlICIkZ2l0X2RpciIgaW4KKy5naXQpCisJZ2l0X2Rpcj0iJG9yaWdfZ2l0Ly5naXQiCisJOzsKKy4pCisJZ2l0X2Rpcj0kb3JpZ19naXQKKwk7OworZXNhYworCisjIGRvbid0IGxpbmsgdG8gYSBjb25maWd1cmVkIGJhcmUgcmVwb3NpdG9yeQoraXNiYXJlPSQoZ2l0IC0tZ2l0LWRpcj0iJGdpdF9kaXIiIGNvbmZpZyAtLWJvb2wgLS1nZXQgY29yZS5iYXJlKQoraWYgdGVzdCB6dHJ1ZSA9ICJ6JGlzYmFyZSIKK3RoZW4KKwlkaWUgIlwiJGdpdF9kaXJcIiBoYXMgY29yZS5iYXJlIHNldCB0byB0cnVlLCIgXAorCQkiIHJlbW92ZSBmcm9tIFwiJGdpdF9kaXIvY29uZmlnXCIgdG8gdXNlICQwIgorZmkKKworIyBkb24ndCBsaW5rIHRvIGEgd29ya2RpcgoraWYgdGVzdCAtaCAiJGdpdF9kaXIvY29uZmlnIgordGhlbgorCWRpZSAiXCIkb3JpZ19naXRcIiBpcyBhIHdvcmtpbmcgZGlyZWN0b3J5IG9ubHksIHBsZWFzZSBzcGVjaWZ5IiBcCisJCSJhIGNvbXBsZXRlIHJlcG9zaXRvcnkuIgorZmkKKworIyBtYWtlIHN1cmUgdGhlIGxpbmtzIGluIHRoZSB3b3JrZGlyIGhhdmUgZnVsbCBwYXRocyB0byB0aGUgb3JpZ2luYWwgcmVwbworZ2l0X2Rpcj0kKGNkICIkZ2l0X2RpciIgJiYgcHdkKSB8fCBleGl0IDEKKworIyBkb24ndCByZWNyZWF0ZSBhIHdvcmtkaXIgb3ZlciBhbiBleGlzdGluZyBkaXJlY3RvcnksIHVubGVzcyBpdCdzIGVtcHR5CitpZiB0ZXN0IC1kICIkbmV3X3dvcmtkaXIiCit0aGVuCisJaWYgdGVzdCAkKGxzIC1hMSAiJG5ld193b3JrZGlyLy4iIHwgd2MgLWwpIC1uZSAyCisJdGhlbgorCQlkaWUgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSAnJG5ld193b3JrZGlyJyBpcyBub3QgZW1wdHkuIgorCWZpCisJY2xlYW5kaXI9IiRuZXdfd29ya2Rpci8uZ2l0IgorZWxzZQorCWNsZWFuZGlyPSIkbmV3X3dvcmtkaXIiCitmaQorCitta2RpciAtcCAiJG5ld193b3JrZGlyLy5naXQiIHx8IGZhaWxlZAorY2xlYW5kaXI9JChjZCAiJGNsZWFuZGlyIiAmJiBwd2QpIHx8IGZhaWxlZAorCitjbGVhbnVwICgpIHsKKwlybSAtcmYgIiRjbGVhbmRpciIKK30KK3NpZ2xpc3Q9IjAgMSAyIDE1IgordHJhcCBjbGVhbnVwICRzaWdsaXN0CisKKyMgY3JlYXRlIHRoZSBsaW5rcyB0byB0aGUgb3JpZ2luYWwgcmVwby4gIGV4cGxpY2l0bHkgZXhjbHVkZSBpbmRleCwgSEVBRCBhbmQKKyMgbG9ncy9IRUFEIGZyb20gdGhlIGxpc3Qgc2luY2UgdGhleSBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgd29ya2luZworIyBkaXJlY3RvcnksIGFuZCBzaG91bGQgbm90IGJlIHNoYXJlZC4KK2ZvciB4IGluIGNvbmZpZyByZWZzIGxvZ3MvcmVmcyBvYmplY3RzIGluZm8gaG9va3MgcGFja2VkLXJlZnMgcmVtb3RlcyByci1jYWNoZSBzdm4KK2RvCisJIyBjcmVhdGUgYSBjb250YWluaW5nIGRpcmVjdG9yeSBpZiBuZWVkZWQKKwljYXNlICR4IGluCisJKi8qKQorCQlta2RpciAtcCAiJG5ld193b3JrZGlyLy5naXQvJHt4JS8qfSIKKwkJOzsKKwllc2FjCisKKwlsbiAtcyAiJGdpdF9kaXIvJHgiICIkbmV3X3dvcmtkaXIvLmdpdC8keCIgfHwgZmFpbGVkCitkb25lCisKKyMgY29tbWFuZHMgYmVsb3cgdGhpcyBhcmUgcnVuIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgd29ya2RpcgorY2QgIiRuZXdfd29ya2RpciIgfHwgZmFpbGVkCisKKyMgY29weSB0aGUgSEVBRCBmcm9tIHRoZSBvcmlnaW5hbCByZXBvc2l0b3J5IGFzIGEgZGVmYXVsdCBicmFuY2gKK2NwICIkZ2l0X2Rpci9IRUFEIiAuZ2l0L0hFQUQgfHwgZmFpbGVkCisKKyMgdGhlIHdvcmtkaXIgaXMgc2V0IHVwLiAgaWYgdGhlIGNoZWNrb3V0IGZhaWxzLCB0aGUgdXNlciBjYW4gZml4IGl0LgordHJhcCAtICRzaWdsaXN0CisKKyMgY2hlY2tvdXQgdGhlIGJyYW5jaCAoZWl0aGVyIHRoZSBzYW1lIGFzIEhFQUQgZnJvbSB0aGUgb3JpZ2luYWwgcmVwb3NpdG9yeSwKKyMgb3IgdGhlIG9uZSB0aGF0IHdhcyBhc2tlZCBmb3IpCitnaXQgY2hlY2tvdXQgLWYgJGJyYW5jaApkaWZmIC0tZ2l0IGEvY29udmVydC5jIGIvY29udmVydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MjQ0OTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb252ZXJ0LmMKQEAgLTAsMCArMSwyMDMwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJzdWItcHJvY2Vzcy5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJsbC1tZXJnZS5oIgorCisvKgorICogY29udmVydC5jIC0gY29udmVydCBhIGZpbGUgd2hlbiBjaGVja2luZyBpdCBvdXQgYW5kIGNoZWNraW5nIGl0IGluLgorICoKKyAqIFRoaXMgc2hvdWxkIHVzZSB0aGUgcGF0aG5hbWUgdG8gZGVjaWRlIG9uIHdoZXRoZXIgaXQgd2FudHMgdG8gZG8gc29tZQorICogbW9yZSBpbnRlcmVzdGluZyBjb252ZXJzaW9ucyAoYXV0b21hdGljIGd6aXAvdW56aXAsIGdlbmVyYWwgZm9ybWF0CisgKiBjb252ZXJzaW9ucyBldGMgZXRjKSwgYnV0IGJ5IGRlZmF1bHQgaXQganVzdCBkb2VzIGF1dG9tYXRpYyBDUkxGPC0+TEYKKyAqIHRyYW5zbGF0aW9uIHdoZW4gdGhlICJ0ZXh0IiBhdHRyaWJ1dGUgb3IgImF1dG9fY3JsZiIgb3B0aW9uIGlzIHNldC4KKyAqLworCisvKiBTdGF0IGJpdHM6IFdoZW4gQklOIGlzIHNldCwgdGhlIHR4dCBiaXRzIGFyZSB1bnNldCAqLworI2RlZmluZSBDT05WRVJUX1NUQVRfQklUU19UWFRfTEYgICAgMHgxCisjZGVmaW5lIENPTlZFUlRfU1RBVF9CSVRTX1RYVF9DUkxGICAweDIKKyNkZWZpbmUgQ09OVkVSVF9TVEFUX0JJVFNfQklOICAgICAgIDB4NAorCitlbnVtIGNybGZfYWN0aW9uIHsKKwlDUkxGX1VOREVGSU5FRCwKKwlDUkxGX0JJTkFSWSwKKwlDUkxGX1RFWFQsCisJQ1JMRl9URVhUX0lOUFVULAorCUNSTEZfVEVYVF9DUkxGLAorCUNSTEZfQVVUTywKKwlDUkxGX0FVVE9fSU5QVVQsCisJQ1JMRl9BVVRPX0NSTEYKK307CisKK3N0cnVjdCB0ZXh0X3N0YXQgeworCS8qIE5VTCwgQ1IsIExGIGFuZCBDUkxGIGNvdW50cyAqLworCXVuc2lnbmVkIG51bCwgbG9uZWNyLCBsb25lbGYsIGNybGY7CisKKwkvKiBUaGVzZSBhcmUganVzdCBhcHByb3hpbWF0aW9ucyEgKi8KKwl1bnNpZ25lZCBwcmludGFibGUsIG5vbnByaW50YWJsZTsKK307CisKK3N0YXRpYyB2b2lkIGdhdGhlcl9zdGF0cyhjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHRleHRfc3RhdCAqc3RhdHMpCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoKnN0YXRzKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9IGJ1ZltpXTsKKwkJaWYgKGMgPT0gJ1xyJykgeworCQkJaWYgKGkrMSA8IHNpemUgJiYgYnVmW2krMV0gPT0gJ1xuJykgeworCQkJCXN0YXRzLT5jcmxmKys7CisJCQkJaSsrOworCQkJfSBlbHNlCisJCQkJc3RhdHMtPmxvbmVjcisrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgPT0gJ1xuJykgeworCQkJc3RhdHMtPmxvbmVsZisrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgPT0gMTI3KQorCQkJLyogREVMICovCisJCQlzdGF0cy0+bm9ucHJpbnRhYmxlKys7CisJCWVsc2UgaWYgKGMgPCAzMikgeworCQkJc3dpdGNoIChjKSB7CisJCQkJLyogQlMsIEhULCBFU0MgYW5kIEZGICovCisJCQljYXNlICdcYic6IGNhc2UgJ1x0JzogY2FzZSAnXDAzMyc6IGNhc2UgJ1wwMTQnOgorCQkJCXN0YXRzLT5wcmludGFibGUrKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgMDoKKwkJCQlzdGF0cy0+bnVsKys7CisJCQkJLyogZmFsbCB0aHJvdWdoICovCisJCQlkZWZhdWx0OgorCQkJCXN0YXRzLT5ub25wcmludGFibGUrKzsKKwkJCX0KKwkJfQorCQllbHNlCisJCQlzdGF0cy0+cHJpbnRhYmxlKys7CisJfQorCisJLyogSWYgZmlsZSBlbmRzIHdpdGggRU9GIHRoZW4gZG9uJ3QgY291bnQgdGhpcyBFT0YgYXMgbm9uLXByaW50YWJsZS4gKi8KKwlpZiAoc2l6ZSA+PSAxICYmIGJ1ZltzaXplLTFdID09ICdcMDMyJykKKwkJc3RhdHMtPm5vbnByaW50YWJsZS0tOworfQorCisvKgorICogVGhlIHNhbWUgaGV1cmlzdGljcyBhcyBkaWZmLmM6Om1tZmlsZV9pc19iaW5hcnkoKQorICogV2UgdHJlYXQgZmlsZXMgd2l0aCBiYXJlIENSIGFzIGJpbmFyeQorICovCitzdGF0aWMgaW50IGNvbnZlcnRfaXNfYmluYXJ5KGNvbnN0IHN0cnVjdCB0ZXh0X3N0YXQgKnN0YXRzKQoreworCWlmIChzdGF0cy0+bG9uZWNyKQorCQlyZXR1cm4gMTsKKwlpZiAoc3RhdHMtPm51bCkKKwkJcmV0dXJuIDE7CisJaWYgKChzdGF0cy0+cHJpbnRhYmxlID4+IDcpIDwgc3RhdHMtPm5vbnByaW50YWJsZSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2F0aGVyX2NvbnZlcnRfc3RhdHMoY29uc3QgY2hhciAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCB0ZXh0X3N0YXQgc3RhdHM7CisJaW50IHJldCA9IDA7CisJaWYgKCFkYXRhIHx8ICFzaXplKQorCQlyZXR1cm4gMDsKKwlnYXRoZXJfc3RhdHMoZGF0YSwgc2l6ZSwgJnN0YXRzKTsKKwlpZiAoY29udmVydF9pc19iaW5hcnkoJnN0YXRzKSkKKwkJcmV0IHw9IENPTlZFUlRfU1RBVF9CSVRTX0JJTjsKKwlpZiAoc3RhdHMuY3JsZikKKwkJcmV0IHw9IENPTlZFUlRfU1RBVF9CSVRTX1RYVF9DUkxGOworCWlmIChzdGF0cy5sb25lbGYpCisJCXJldCB8PSAgQ09OVkVSVF9TVEFUX0JJVFNfVFhUX0xGOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdhdGhlcl9jb252ZXJ0X3N0YXRzX2FzY2lpKGNvbnN0IGNoYXIgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgY29udmVydF9zdGF0cyA9IGdhdGhlcl9jb252ZXJ0X3N0YXRzKGRhdGEsIHNpemUpOworCisJaWYgKGNvbnZlcnRfc3RhdHMgJiBDT05WRVJUX1NUQVRfQklUU19CSU4pCisJCXJldHVybiAiLXRleHQiOworCXN3aXRjaCAoY29udmVydF9zdGF0cykgeworCWNhc2UgQ09OVkVSVF9TVEFUX0JJVFNfVFhUX0xGOgorCQlyZXR1cm4gImxmIjsKKwljYXNlIENPTlZFUlRfU1RBVF9CSVRTX1RYVF9DUkxGOgorCQlyZXR1cm4gImNybGYiOworCWNhc2UgQ09OVkVSVF9TVEFUX0JJVFNfVFhUX0xGIHwgQ09OVkVSVF9TVEFUX0JJVFNfVFhUX0NSTEY6CisJCXJldHVybiAibWl4ZWQiOworCWRlZmF1bHQ6CisJCXJldHVybiAibm9uZSI7CisJfQorfQorCitjb25zdCBjaGFyICpnZXRfY2FjaGVkX2NvbnZlcnRfc3RhdHNfYXNjaWkoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCSAgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqcmV0OworCXVuc2lnbmVkIGxvbmcgc3o7CisJdm9pZCAqZGF0YSA9IHJlYWRfYmxvYl9kYXRhX2Zyb21faW5kZXgoaXN0YXRlLCBwYXRoLCAmc3opOworCXJldCA9IGdhdGhlcl9jb252ZXJ0X3N0YXRzX2FzY2lpKGRhdGEsIHN6KTsKKwlmcmVlKGRhdGEpOworCXJldHVybiByZXQ7Cit9CisKK2NvbnN0IGNoYXIgKmdldF93dF9jb252ZXJ0X3N0YXRzX2FzY2lpKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqcmV0ID0gIiI7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgcGF0aCwgMCkgPj0gMCkKKwkJcmV0ID0gZ2F0aGVyX2NvbnZlcnRfc3RhdHNfYXNjaWkoc2IuYnVmLCBzYi5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0ZXh0X2VvbF9pc19jcmxmKHZvaWQpCit7CisJaWYgKGF1dG9fY3JsZiA9PSBBVVRPX0NSTEZfVFJVRSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoYXV0b19jcmxmID09IEFVVE9fQ1JMRl9JTlBVVCkKKwkJcmV0dXJuIDA7CisJaWYgKGNvcmVfZW9sID09IEVPTF9DUkxGKQorCQlyZXR1cm4gMTsKKwlpZiAoY29yZV9lb2wgPT0gRU9MX1VOU0VUICYmIEVPTF9OQVRJVkUgPT0gRU9MX0NSTEYpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBlb2wgb3V0cHV0X2VvbChlbnVtIGNybGZfYWN0aW9uIGNybGZfYWN0aW9uKQoreworCXN3aXRjaCAoY3JsZl9hY3Rpb24pIHsKKwljYXNlIENSTEZfQklOQVJZOgorCQlyZXR1cm4gRU9MX1VOU0VUOworCWNhc2UgQ1JMRl9URVhUX0NSTEY6CisJCXJldHVybiBFT0xfQ1JMRjsKKwljYXNlIENSTEZfVEVYVF9JTlBVVDoKKwkJcmV0dXJuIEVPTF9MRjsKKwljYXNlIENSTEZfVU5ERUZJTkVEOgorCWNhc2UgQ1JMRl9BVVRPX0NSTEY6CisJCXJldHVybiBFT0xfQ1JMRjsKKwljYXNlIENSTEZfQVVUT19JTlBVVDoKKwkJcmV0dXJuIEVPTF9MRjsKKwljYXNlIENSTEZfVEVYVDoKKwljYXNlIENSTEZfQVVUTzoKKwkJLyogZmFsbCB0aHJvdWdoICovCisJCXJldHVybiB0ZXh0X2VvbF9pc19jcmxmKCkgPyBFT0xfQ1JMRiA6IEVPTF9MRjsKKwl9CisJd2FybmluZyhfKCJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIiksIChpbnQpY3JsZl9hY3Rpb24pOworCXJldHVybiBjb3JlX2VvbDsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfZ2xvYmFsX2NvbnZfZmxhZ3NfZW9sKGNvbnN0IGNoYXIgKnBhdGgsIGVudW0gY3JsZl9hY3Rpb24gY3JsZl9hY3Rpb24sCisJCQkgICAgc3RydWN0IHRleHRfc3RhdCAqb2xkX3N0YXRzLCBzdHJ1Y3QgdGV4dF9zdGF0ICpuZXdfc3RhdHMsCisJCQkgICAgaW50IGNvbnZfZmxhZ3MpCit7CisJaWYgKG9sZF9zdGF0cy0+Y3JsZiAmJiAhbmV3X3N0YXRzLT5jcmxmICkgeworCQkvKgorCQkgKiBDUkxGcyB3b3VsZCBub3QgYmUgcmVzdG9yZWQgYnkgY2hlY2tvdXQKKwkJICovCisJCWlmIChjb252X2ZsYWdzICYgQ09OVl9FT0xfUk5EVFJQX0RJRSkKKwkJCWRpZShfKCJDUkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzIiksIHBhdGgpOworCQllbHNlIGlmIChjb252X2ZsYWdzICYgQ09OVl9FT0xfUk5EVFJQX1dBUk4pCisJCQl3YXJuaW5nKF8oIkNSTEYgd2lsbCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcy5cbiIKKwkJCQkgICJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUiCisJCQkJICAiIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIpLCBwYXRoKTsKKwl9IGVsc2UgaWYgKG9sZF9zdGF0cy0+bG9uZWxmICYmICFuZXdfc3RhdHMtPmxvbmVsZiApIHsKKwkJLyoKKwkJICogQ1JMRnMgd291bGQgYmUgYWRkZWQgYnkgY2hlY2tvdXQKKwkJICovCisJCWlmIChjb252X2ZsYWdzICYgQ09OVl9FT0xfUk5EVFJQX0RJRSkKKwkJCWRpZShfKCJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIiksIHBhdGgpOworCQllbHNlIGlmIChjb252X2ZsYWdzICYgQ09OVl9FT0xfUk5EVFJQX1dBUk4pCisJCQl3YXJuaW5nKF8oIkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcy5cbiIKKwkJCQkgICJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUiCisJCQkJICAiIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIpLCBwYXRoKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaGFzX2NybGZfaW5faW5kZXgoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJdW5zaWduZWQgbG9uZyBzejsKKwl2b2lkICpkYXRhOworCWNvbnN0IGNoYXIgKmNycDsKKwlpbnQgaGFzX2NybGYgPSAwOworCisJZGF0YSA9IHJlYWRfYmxvYl9kYXRhX2Zyb21faW5kZXgoaXN0YXRlLCBwYXRoLCAmc3opOworCWlmICghZGF0YSkKKwkJcmV0dXJuIDA7CisKKwljcnAgPSBtZW1jaHIoZGF0YSwgJ1xyJywgc3opOworCWlmIChjcnApIHsKKwkJdW5zaWduZWQgaW50IHJldF9zdGF0czsKKwkJcmV0X3N0YXRzID0gZ2F0aGVyX2NvbnZlcnRfc3RhdHMoZGF0YSwgc3opOworCQlpZiAoIShyZXRfc3RhdHMgJiBDT05WRVJUX1NUQVRfQklUU19CSU4pICYmCisJCSAgICAocmV0X3N0YXRzICYgQ09OVkVSVF9TVEFUX0JJVFNfVFhUX0NSTEYpKQorCQkJaGFzX2NybGYgPSAxOworCX0KKwlmcmVlKGRhdGEpOworCXJldHVybiBoYXNfY3JsZjsKK30KKworc3RhdGljIGludCB3aWxsX2NvbnZlcnRfbGZfdG9fY3JsZihzdHJ1Y3QgdGV4dF9zdGF0ICpzdGF0cywKKwkJCQkgICBlbnVtIGNybGZfYWN0aW9uIGNybGZfYWN0aW9uKQoreworCWlmIChvdXRwdXRfZW9sKGNybGZfYWN0aW9uKSAhPSBFT0xfQ1JMRikKKwkJcmV0dXJuIDA7CisJLyogTm8gIm5ha2VkIiBMRj8gTm90aGluZyB0byBjb252ZXJ0LCByZWdhcmRsZXNzLiAqLworCWlmICghc3RhdHMtPmxvbmVsZikKKwkJcmV0dXJuIDA7CisKKwlpZiAoY3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPIHx8IGNybGZfYWN0aW9uID09IENSTEZfQVVUT19JTlBVVCB8fCBjcmxmX2FjdGlvbiA9PSBDUkxGX0FVVE9fQ1JMRikgeworCQkvKiBJZiB3ZSBoYXZlIGFueSBDUiBvciBDUkxGIGxpbmUgZW5kaW5ncywgd2UgZG8gbm90IHRvdWNoIGl0ICovCisJCS8qIFRoaXMgaXMgdGhlIG5ldyBzYWZlciBhdXRvY3JsZi1oYW5kbGluZyAqLworCQlpZiAoc3RhdHMtPmxvbmVjciB8fCBzdGF0cy0+Y3JsZikKKwkJCXJldHVybiAwOworCisJCWlmIChjb252ZXJ0X2lzX2JpbmFyeShzdGF0cykpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7CisKK30KKworc3RhdGljIGludCB2YWxpZGF0ZV9lbmNvZGluZyhjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICplbmMsCisJCSAgICAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW4sIGludCBkaWVfb25fZXJyb3IpCit7CisJY29uc3QgY2hhciAqc3RyaXBwZWQ7CisKKwkvKiBXZSBvbmx5IGNoZWNrIGZvciBVVEYgaGVyZSBhcyBVVEY/PyBjYW4gYmUgYW4gYWxpYXMgZm9yIFVURi0/PyAqLworCWlmIChza2lwX2lwcmVmaXgoZW5jLCAiVVRGIiwgJnN0cmlwcGVkKSkgeworCQlza2lwX3ByZWZpeChzdHJpcHBlZCwgIi0iLCAmc3RyaXBwZWQpOworCisJCS8qCisJCSAqIENoZWNrIGZvciBkZXRlY3RhYmxlIGVycm9ycyBpbiBVVEYgZW5jb2RpbmdzCisJCSAqLworCQlpZiAoaGFzX3Byb2hpYml0ZWRfdXRmX2JvbShlbmMsIGRhdGEsIGxlbikpIHsKKwkJCWNvbnN0IGNoYXIgKmVycm9yX21zZyA9IF8oCisJCQkJIkJPTSBpcyBwcm9oaWJpdGVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIpOworCQkJLyoKKwkJCSAqIFRoaXMgYWR2aWNlIGlzIHNob3duIGZvciBVVEYtPz9CRSBhbmQgVVRGLT8/TEUgZW5jb2RpbmdzLgorCQkJICogV2UgY3V0IG9mZiB0aGUgbGFzdCB0d28gY2hhcmFjdGVycyBvZiB0aGUgZW5jb2RpbmcgbmFtZQorCQkJICogdG8gZ2VuZXJhdGUgdGhlIGVuY29kaW5nIG5hbWUgc3VpdGFibGUgZm9yIEJPTXMuCisJCQkgKi8KKwkJCWNvbnN0IGNoYXIgKmFkdmlzZV9tc2cgPSBfKAorCQkJCSJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciAiCisJCQkJIm1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSUuKnMgYXMgIgorCQkJCSJ3b3JraW5nLXRyZWUtZW5jb2RpbmcuIik7CisJCQlpbnQgc3RyaXBwZWRfbGVuID0gc3RybGVuKHN0cmlwcGVkKSAtIHN0cmxlbigiQkUiKTsKKwkJCWFkdmlzZShhZHZpc2VfbXNnLCBwYXRoLCBzdHJpcHBlZF9sZW4sIHN0cmlwcGVkKTsKKwkJCWlmIChkaWVfb25fZXJyb3IpCisJCQkJZGllKGVycm9yX21zZywgcGF0aCwgZW5jKTsKKwkJCWVsc2UgeworCQkJCXJldHVybiBlcnJvcihlcnJvcl9tc2csIHBhdGgsIGVuYyk7CisJCQl9CisKKwkJfSBlbHNlIGlmIChpc19taXNzaW5nX3JlcXVpcmVkX3V0Zl9ib20oZW5jLCBkYXRhLCBsZW4pKSB7CisJCQljb25zdCBjaGFyICplcnJvcl9tc2cgPSBfKAorCQkJCSJCT00gaXMgcmVxdWlyZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIik7CisJCQljb25zdCBjaGFyICphZHZpc2VfbXNnID0gXygKKwkJCQkiVGhlIGZpbGUgJyVzJyBpcyBtaXNzaW5nIGEgYnl0ZSBvcmRlciAiCisJCQkJIm1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSVzQkUgb3IgVVRGLSVzTEUgIgorCQkJCSIoZGVwZW5kaW5nIG9uIHRoZSBieXRlIG9yZGVyKSBhcyAiCisJCQkJIndvcmtpbmctdHJlZS1lbmNvZGluZy4iKTsKKwkJCWFkdmlzZShhZHZpc2VfbXNnLCBwYXRoLCBzdHJpcHBlZCwgc3RyaXBwZWQpOworCQkJaWYgKGRpZV9vbl9lcnJvcikKKwkJCQlkaWUoZXJyb3JfbXNnLCBwYXRoLCBlbmMpOworCQkJZWxzZSB7CisJCQkJcmV0dXJuIGVycm9yKGVycm9yX21zZywgcGF0aCwgZW5jKTsKKwkJCX0KKwkJfQorCisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0cmFjZV9lbmNvZGluZyhjb25zdCBjaGFyICpjb250ZXh0LCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdGF0aWMgc3RydWN0IHRyYWNlX2tleSBjb2UgPSBUUkFDRV9LRVlfSU5JVChXT1JLSU5HX1RSRUVfRU5DT0RJTkcpOworCXN0cnVjdCBzdHJidWYgdHJhY2UgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaTsKKworCXN0cmJ1Zl9hZGRmKCZ0cmFjZSwgIiVzICglcywgY29uc2lkZXJlZCAlcyk6XG4iLCBjb250ZXh0LCBwYXRoLCBlbmNvZGluZyk7CisJZm9yIChpID0gMDsgaSA8IGxlbiAmJiBidWY7ICsraSkgeworCQlzdHJidWZfYWRkZigKKwkJCSZ0cmFjZSwgInwgXDAzM1sybSUyaTpcMDMzWzBtICUyeCBcMDMzWzJtJWNcMDMzWzBtJWMiLAorCQkJaSwKKwkJCSh1bnNpZ25lZCBjaGFyKSBidWZbaV0sCisJCQkoYnVmW2ldID4gMzIgJiYgYnVmW2ldIDwgMTI3ID8gYnVmW2ldIDogJyAnKSwKKwkJCSgoaSsxKSAlIDggJiYgKGkrMSkgPCBsZW4gPyAnICcgOiAnXG4nKQorCQkpOworCX0KKwlzdHJidWZfYWRkY2hhcnMoJnRyYWNlLCAnXG4nLCAxKTsKKworCXRyYWNlX3N0cmJ1ZigmY29lLCAmdHJhY2UpOworCXN0cmJ1Zl9yZWxlYXNlKCZ0cmFjZSk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcm91bmR0cmlwKGNvbnN0IGNoYXIgKmVuY19uYW1lKQoreworCS8qCisJICogY2hlY2tfcm91bmR0cmlwX2VuY29kaW5nIGNvbnRhaW5zIGEgc3RyaW5nIG9mIGNvbW1hIGFuZC9vcgorCSAqIHNwYWNlIHNlcGFyYXRlZCBlbmNvZGluZ3MgKGVnLiAiVVRGLTE2LCBBU0NJSSwgQ1AxMTI1IikuCisJICogU2VhcmNoIGZvciB0aGUgZ2l2ZW4gZW5jb2RpbmcgaW4gdGhhdCBzdHJpbmcuCisJICovCisJY29uc3QgY2hhciAqZm91bmQgPSBzdHJjYXNlc3RyKGNoZWNrX3JvdW5kdHJpcF9lbmNvZGluZywgZW5jX25hbWUpOworCWNvbnN0IGNoYXIgKm5leHQ7CisJaW50IGxlbjsKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gMDsKKwluZXh0ID0gZm91bmQgKyBzdHJsZW4oZW5jX25hbWUpOworCWxlbiA9IHN0cmxlbihjaGVja19yb3VuZHRyaXBfZW5jb2RpbmcpOworCXJldHVybiAoZm91bmQgJiYgKAorCQkJLyoKKwkJCSAqIGNoZWNrIHRoYXQgdGhlIGZvdW5kIGVuY29kaW5nIGlzIGF0IHRoZQorCQkJICogYmVnaW5uaW5nIG9mIGNoZWNrX3JvdW5kdHJpcF9lbmNvZGluZyBvcgorCQkJICogdGhhdCBpdCBpcyBwcmVmaXhlZCB3aXRoIGEgc3BhY2Ugb3IgY29tbWEKKwkJCSAqLworCQkJZm91bmQgPT0gY2hlY2tfcm91bmR0cmlwX2VuY29kaW5nIHx8ICgKKwkJCQkoaXNzcGFjZShmb3VuZFstMV0pIHx8IGZvdW5kWy0xXSA9PSAnLCcpCisJCQkpCisJCSkgJiYgKAorCQkJLyoKKwkJCSAqIGNoZWNrIHRoYXQgdGhlIGZvdW5kIGVuY29kaW5nIGlzIGF0IHRoZQorCQkJICogZW5kIG9mIGNoZWNrX3JvdW5kdHJpcF9lbmNvZGluZyBvcgorCQkJICogdGhhdCBpdCBpcyBzdWZmaXhlZCB3aXRoIGEgc3BhY2Ugb3IgY29tbWEKKwkJCSAqLworCQkJbmV4dCA9PSBjaGVja19yb3VuZHRyaXBfZW5jb2RpbmcgKyBsZW4gfHwgKAorCQkJCW5leHQgPCBjaGVja19yb3VuZHRyaXBfZW5jb2RpbmcgKyBsZW4gJiYKKwkJCQkoaXNzcGFjZShuZXh0WzBdKSB8fCBuZXh0WzBdID09ICcsJykKKwkJCSkKKwkJKSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpkZWZhdWx0X2VuY29kaW5nID0gIlVURi04IjsKKworc3RhdGljIGludCBlbmNvZGVfdG9fZ2l0KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY19sZW4sCisJCQkgc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICplbmMsIGludCBjb252X2ZsYWdzKQoreworCWNoYXIgKmRzdDsKKwlzaXplX3QgZHN0X2xlbjsKKwlpbnQgZGllX29uX2Vycm9yID0gY29udl9mbGFncyAmIENPTlZfV1JJVEVfT0JKRUNUOworCisJLyoKKwkgKiBObyBlbmNvZGluZyBpcyBzcGVjaWZpZWQgb3IgdGhlcmUgaXMgbm90aGluZyB0byBlbmNvZGUuCisJICogVGVsbCB0aGUgY2FsbGVyIHRoYXQgdGhlIGNvbnRlbnQgd2FzIG5vdCBtb2RpZmllZC4KKwkgKi8KKwlpZiAoIWVuYyB8fCAoc3JjICYmICFzcmNfbGVuKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIExvb2tzIGxpa2Ugd2UgZ290IGNhbGxlZCBmcm9tICJ3b3VsZF9jb252ZXJ0X3RvX2dpdCgpIi4KKwkgKiBUaGlzIG1lYW5zIEdpdCB3YW50cyB0byBrbm93IGlmIGl0IHdvdWxkIGVuY29kZSAoPSBtb2RpZnkhKQorCSAqIHRoZSBjb250ZW50LiBMZXQncyBhbnN3ZXIgd2l0aCAieWVzIiwgc2luY2UgYW4gZW5jb2Rpbmcgd2FzCisJICogc3BlY2lmaWVkLgorCSAqLworCWlmICghYnVmICYmICFzcmMpCisJCXJldHVybiAxOworCisJaWYgKHZhbGlkYXRlX2VuY29kaW5nKHBhdGgsIGVuYywgc3JjLCBzcmNfbGVuLCBkaWVfb25fZXJyb3IpKQorCQlyZXR1cm4gMDsKKworCXRyYWNlX2VuY29kaW5nKCJzb3VyY2UiLCBwYXRoLCBlbmMsIHNyYywgc3JjX2xlbik7CisJZHN0ID0gcmVlbmNvZGVfc3RyaW5nX2xlbihzcmMsIHNyY19sZW4sIGRlZmF1bHRfZW5jb2RpbmcsIGVuYywKKwkJCQkgICZkc3RfbGVuKTsKKwlpZiAoIWRzdCkgeworCQkvKgorCQkgKiBXZSBjb3VsZCBhZGQgdGhlIGJsb2IgImFzLWlzIiB0byBHaXQuIEhvd2V2ZXIsIG9uIGNoZWNrb3V0CisJCSAqIHdlIHdvdWxkIHRyeSB0byByZS1lbmNvZGUgdG8gdGhlIG9yaWdpbmFsIGVuY29kaW5nLiBUaGlzCisJCSAqIHdvdWxkIGZhaWwgYW5kIHdlIHdvdWxkIGxlYXZlIHRoZSB1c2VyIHdpdGggYSBtZXNzZWQtdXAKKwkJICogd29ya2luZyB0cmVlLiBMZXQncyB0cnkgdG8gYXZvaWQgdGhpcyBieSBzY3JlYW1pbmcgbG91ZC4KKwkJICovCisJCWNvbnN0IGNoYXIqIG1zZyA9IF8oImZhaWxlZCB0byBlbmNvZGUgJyVzJyBmcm9tICVzIHRvICVzIik7CisJCWlmIChkaWVfb25fZXJyb3IpCisJCQlkaWUobXNnLCBwYXRoLCBlbmMsIGRlZmF1bHRfZW5jb2RpbmcpOworCQllbHNlIHsKKwkJCWVycm9yKG1zZywgcGF0aCwgZW5jLCBkZWZhdWx0X2VuY29kaW5nKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXRyYWNlX2VuY29kaW5nKCJkZXN0aW5hdGlvbiIsIHBhdGgsIGRlZmF1bHRfZW5jb2RpbmcsIGRzdCwgZHN0X2xlbik7CisKKwkvKgorCSAqIFVURiBzdXBwb3J0cyBsb3NzbGVzcyBjb252ZXJzaW9uIHJvdW5kIHRyaXBwaW5nIFsxXSBhbmQgY29udmVyc2lvbnMKKwkgKiBiZXR3ZWVuIFVURiBhbmQgb3RoZXIgZW5jb2RpbmdzIGFyZSBtb3N0bHkgcm91bmQgdHJpcCBzYWZlIGFzCisJICogVW5pY29kZSBhaW1zIHRvIGJlIGEgc3VwZXJzZXQgb2YgYWxsIG90aGVyIGNoYXJhY3RlciBlbmNvZGluZ3MuCisJICogSG93ZXZlciwgY2VydGFpbiBlbmNvZGluZ3MgKGUuZy4gU0hJRlQtSklTKSBhcmUga25vd24gdG8gaGF2ZSByb3VuZAorCSAqIHRyaXAgaXNzdWVzIFsyXS4gQ2hlY2sgdGhlIHJvdW5kIHRyaXAgY29udmVyc2lvbiBmb3IgYWxsIGVuY29kaW5ncworCSAqIGxpc3RlZCBpbiBjb3JlLmNoZWNrUm91bmR0cmlwRW5jb2RpbmcuCisJICoKKwkgKiBUaGUgcm91bmQgdHJpcCBjaGVjayBpcyBvbmx5IHBlcmZvcm1lZCBpZiBjb250ZW50IGlzIHdyaXR0ZW4gdG8gR2l0LgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IG5vIGluZm9ybWF0aW9uIGlzIGxvc3QgZHVyaW5nIGNvbnZlcnNpb24gdG8vZnJvbQorCSAqIHRoZSBpbnRlcm5hbCBVVEYtOCByZXByZXNlbnRhdGlvbi4KKwkgKgorCSAqIFBsZWFzZSBub3RlLCB0aGUgY29kZSBiZWxvdyBpcyBub3QgdGVzdGVkIGJlY2F1c2UgSSB3YXMgbm90IGFibGUgdG8KKwkgKiBnZW5lcmF0ZSBhIGZhdWx0eSByb3VuZCB0cmlwIHdpdGhvdXQgYW4gaWNvbnYgZXJyb3IuIEljb252IGVycm9ycworCSAqIGFyZSBhbHJlYWR5IGNhdWdodCBhYm92ZS4KKwkgKgorCSAqIFsxXSBodHRwOi8vdW5pY29kZS5vcmcvZmFxL3V0Zl9ib20uaHRtbCNnZW4yCisJICogWzJdIGh0dHBzOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2VuLXVzL2hlbHAvMTcwNTU5L3ByYi1jb252ZXJzaW9uLXByb2JsZW0tYmV0d2Vlbi1zaGlmdC1qaXMtYW5kLXVuaWNvZGUKKwkgKi8KKwlpZiAoZGllX29uX2Vycm9yICYmIGNoZWNrX3JvdW5kdHJpcChlbmMpKSB7CisJCWNoYXIgKnJlX3NyYzsKKwkJc2l6ZV90IHJlX3NyY19sZW47CisKKwkJcmVfc3JjID0gcmVlbmNvZGVfc3RyaW5nX2xlbihkc3QsIGRzdF9sZW4sCisJCQkJCSAgICAgZW5jLCBkZWZhdWx0X2VuY29kaW5nLAorCQkJCQkgICAgICZyZV9zcmNfbGVuKTsKKworCQl0cmFjZV9wcmludGYoIkNoZWNraW5nIHJvdW5kdHJpcCBlbmNvZGluZyBmb3IgJXMuLi5cbiIsIGVuYyk7CisJCXRyYWNlX2VuY29kaW5nKCJyZWVuY29kZWQgc291cmNlIiwgcGF0aCwgZW5jLAorCQkJICAgICAgIHJlX3NyYywgcmVfc3JjX2xlbik7CisKKwkJaWYgKCFyZV9zcmMgfHwgc3JjX2xlbiAhPSByZV9zcmNfbGVuIHx8CisJCSAgICBtZW1jbXAoc3JjLCByZV9zcmMsIHNyY19sZW4pKSB7CisJCQljb25zdCBjaGFyKiBtc2cgPSBfKCJlbmNvZGluZyAnJXMnIGZyb20gJXMgdG8gJXMgYW5kICIKKwkJCQkJICAgICJiYWNrIGlzIG5vdCB0aGUgc2FtZSIpOworCQkJZGllKG1zZywgcGF0aCwgZW5jLCBkZWZhdWx0X2VuY29kaW5nKTsKKwkJfQorCisJCWZyZWUocmVfc3JjKTsKKwl9CisKKwlzdHJidWZfYXR0YWNoKGJ1ZiwgZHN0LCBkc3RfbGVuLCBkc3RfbGVuICsgMSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZW5jb2RlX3RvX3dvcmt0cmVlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY19sZW4sCisJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmVuYykKK3sKKwljaGFyICpkc3Q7CisJc2l6ZV90IGRzdF9sZW47CisKKwkvKgorCSAqIE5vIGVuY29kaW5nIGlzIHNwZWNpZmllZCBvciB0aGVyZSBpcyBub3RoaW5nIHRvIGVuY29kZS4KKwkgKiBUZWxsIHRoZSBjYWxsZXIgdGhhdCB0aGUgY29udGVudCB3YXMgbm90IG1vZGlmaWVkLgorCSAqLworCWlmICghZW5jIHx8IChzcmMgJiYgIXNyY19sZW4pKQorCQlyZXR1cm4gMDsKKworCWRzdCA9IHJlZW5jb2RlX3N0cmluZ19sZW4oc3JjLCBzcmNfbGVuLCBlbmMsIGRlZmF1bHRfZW5jb2RpbmcsCisJCQkJICAmZHN0X2xlbik7CisJaWYgKCFkc3QpIHsKKwkJZXJyb3IoXygiZmFpbGVkIHRvIGVuY29kZSAnJXMnIGZyb20gJXMgdG8gJXMiKSwKKwkJICAgICAgcGF0aCwgZGVmYXVsdF9lbmNvZGluZywgZW5jKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RyYnVmX2F0dGFjaChidWYsIGRzdCwgZHN0X2xlbiwgZHN0X2xlbiArIDEpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNybGZfdG9fZ2l0KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQkgICAgICAgZW51bSBjcmxmX2FjdGlvbiBjcmxmX2FjdGlvbiwgaW50IGNvbnZfZmxhZ3MpCit7CisJc3RydWN0IHRleHRfc3RhdCBzdGF0czsKKwljaGFyICpkc3Q7CisJaW50IGNvbnZlcnRfY3JsZl9pbnRvX2xmOworCisJaWYgKGNybGZfYWN0aW9uID09IENSTEZfQklOQVJZIHx8CisJICAgIChzcmMgJiYgIWxlbikpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgZG9pbmcgYSBkcnktcnVuIGFuZCBoYXZlIG5vIHNvdXJjZSBidWZmZXIsIHRoZXJlIGlzCisJICogbm90aGluZyB0byBhbmFseXplOyB3ZSBtdXN0IGFzc3VtZSB3ZSB3b3VsZCBjb252ZXJ0LgorCSAqLworCWlmICghYnVmICYmICFzcmMpCisJCXJldHVybiAxOworCisJZ2F0aGVyX3N0YXRzKHNyYywgbGVuLCAmc3RhdHMpOworCS8qIE9wdGltaXphdGlvbjogTm8gQ1JMRj8gTm90aGluZyB0byBjb252ZXJ0LCByZWdhcmRsZXNzLiAqLworCWNvbnZlcnRfY3JsZl9pbnRvX2xmID0gISFzdGF0cy5jcmxmOworCisJaWYgKGNybGZfYWN0aW9uID09IENSTEZfQVVUTyB8fCBjcmxmX2FjdGlvbiA9PSBDUkxGX0FVVE9fSU5QVVQgfHwgY3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPX0NSTEYpIHsKKwkJaWYgKGNvbnZlcnRfaXNfYmluYXJ5KCZzdGF0cykpCisJCQlyZXR1cm4gMDsKKwkJLyoKKwkJICogSWYgdGhlIGZpbGUgaW4gdGhlIGluZGV4IGhhcyBhbnkgQ1IgaW4gaXQsIGRvIG5vdAorCQkgKiBjb252ZXJ0LiAgVGhpcyBpcyB0aGUgbmV3IHNhZmVyIGF1dG9jcmxmIGhhbmRsaW5nLAorCQkgKiB1bmxlc3Mgd2Ugd2FudCB0byByZW5vcm1hbGl6ZSBpbiBhIG1lcmdlIG9yCisJCSAqIGNoZXJyeS1waWNrLgorCQkgKi8KKwkJaWYgKCghKGNvbnZfZmxhZ3MgJiBDT05WX0VPTF9SRU5PUk1BTElaRSkpICYmCisJCSAgICBoYXNfY3JsZl9pbl9pbmRleChpc3RhdGUsIHBhdGgpKQorCQkJY29udmVydF9jcmxmX2ludG9fbGYgPSAwOworCX0KKwlpZiAoKChjb252X2ZsYWdzICYgQ09OVl9FT0xfUk5EVFJQX1dBUk4pIHx8CisJICAgICAoKGNvbnZfZmxhZ3MgJiBDT05WX0VPTF9STkRUUlBfRElFKSAmJiBsZW4pKSkgeworCQlzdHJ1Y3QgdGV4dF9zdGF0IG5ld19zdGF0czsKKwkJbWVtY3B5KCZuZXdfc3RhdHMsICZzdGF0cywgc2l6ZW9mKG5ld19zdGF0cykpOworCQkvKiBzaW11bGF0ZSAiZ2l0IGFkZCIgKi8KKwkJaWYgKGNvbnZlcnRfY3JsZl9pbnRvX2xmKSB7CisJCQluZXdfc3RhdHMubG9uZWxmICs9IG5ld19zdGF0cy5jcmxmOworCQkJbmV3X3N0YXRzLmNybGYgPSAwOworCQl9CisJCS8qIHNpbXVsYXRlICJnaXQgY2hlY2tvdXQiICovCisJCWlmICh3aWxsX2NvbnZlcnRfbGZfdG9fY3JsZigmbmV3X3N0YXRzLCBjcmxmX2FjdGlvbikpIHsKKwkJCW5ld19zdGF0cy5jcmxmICs9IG5ld19zdGF0cy5sb25lbGY7CisJCQluZXdfc3RhdHMubG9uZWxmID0gMDsKKwkJfQorCQljaGVja19nbG9iYWxfY29udl9mbGFnc19lb2wocGF0aCwgY3JsZl9hY3Rpb24sICZzdGF0cywgJm5ld19zdGF0cywgY29udl9mbGFncyk7CisJfQorCWlmICghY29udmVydF9jcmxmX2ludG9fbGYpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50IGFsbCBvZiBvdXIgc291cmNlIGFuYWx5c2lzIGlzIGRvbmUsIGFuZCB3ZSBhcmUgc3VyZSB3ZQorCSAqIHdvdWxkIGNvbnZlcnQuIElmIHdlIGFyZSBpbiBkcnktcnVuIG1vZGUsIHdlIGNhbiBnaXZlIGFuIGFuc3dlci4KKwkgKi8KKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDE7CisKKwkvKiBvbmx5IGdyb3cgaWYgbm90IGluIHBsYWNlICovCisJaWYgKHN0cmJ1Zl9hdmFpbChidWYpICsgYnVmLT5sZW4gPCBsZW4pCisJCXN0cmJ1Zl9ncm93KGJ1ZiwgbGVuIC0gYnVmLT5sZW4pOworCWRzdCA9IGJ1Zi0+YnVmOworCWlmIChjcmxmX2FjdGlvbiA9PSBDUkxGX0FVVE8gfHwgY3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPX0lOUFVUIHx8IGNybGZfYWN0aW9uID09IENSTEZfQVVUT19DUkxGKSB7CisJCS8qCisJCSAqIElmIHdlIGd1ZXNzZWQsIHdlIGFscmVhZHkga25vdyB3ZSByZWplY3RlZCBhIGZpbGUgd2l0aAorCQkgKiBsb25lIENSLCBhbmQgd2UgY2FuIHN0cmlwIGEgQ1Igd2l0aG91dCBsb29raW5nIGF0IHdoYXQKKwkJICogZm9sbG93IGl0LgorCQkgKi8KKwkJZG8geworCQkJdW5zaWduZWQgY2hhciBjID0gKnNyYysrOworCQkJaWYgKGMgIT0gJ1xyJykKKwkJCQkqZHN0KysgPSBjOworCQl9IHdoaWxlICgtLWxlbik7CisJfSBlbHNlIHsKKwkJZG8geworCQkJdW5zaWduZWQgY2hhciBjID0gKnNyYysrOworCQkJaWYgKCEgKGMgPT0gJ1xyJyAmJiAoMSA8IGxlbiAmJiAqc3JjID09ICdcbicpKSkKKwkJCQkqZHN0KysgPSBjOworCQl9IHdoaWxlICgtLWxlbik7CisJfQorCXN0cmJ1Zl9zZXRsZW4oYnVmLCBkc3QgLSBidWYtPmJ1Zik7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY3JsZl90b193b3JrdHJlZShjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLCBlbnVtIGNybGZfYWN0aW9uIGNybGZfYWN0aW9uKQoreworCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOworCXN0cnVjdCB0ZXh0X3N0YXQgc3RhdHM7CisKKwlpZiAoIWxlbiB8fCBvdXRwdXRfZW9sKGNybGZfYWN0aW9uKSAhPSBFT0xfQ1JMRikKKwkJcmV0dXJuIDA7CisKKwlnYXRoZXJfc3RhdHMoc3JjLCBsZW4sICZzdGF0cyk7CisJaWYgKCF3aWxsX2NvbnZlcnRfbGZfdG9fY3JsZigmc3RhdHMsIGNybGZfYWN0aW9uKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBhcmUgd2UgImZha2luZyIgaW4gcGxhY2UgZWRpdGluZyA/ICovCisJaWYgKHNyYyA9PSBidWYtPmJ1ZikKKwkJdG9fZnJlZSA9IHN0cmJ1Zl9kZXRhY2goYnVmLCBOVUxMKTsKKworCXN0cmJ1Zl9ncm93KGJ1ZiwgbGVuICsgc3RhdHMubG9uZWxmKTsKKwlmb3IgKDs7KSB7CisJCWNvbnN0IGNoYXIgKm5sID0gbWVtY2hyKHNyYywgJ1xuJywgbGVuKTsKKwkJaWYgKCFubCkKKwkJCWJyZWFrOworCQlpZiAobmwgPiBzcmMgJiYgbmxbLTFdID09ICdccicpIHsKKwkJCXN0cmJ1Zl9hZGQoYnVmLCBzcmMsIG5sICsgMSAtIHNyYyk7CisJCX0gZWxzZSB7CisJCQlzdHJidWZfYWRkKGJ1Ziwgc3JjLCBubCAtIHNyYyk7CisJCQlzdHJidWZfYWRkc3RyKGJ1ZiwgIlxyXG4iKTsKKwkJfQorCQlsZW4gLT0gbmwgKyAxIC0gc3JjOworCQlzcmMgID0gbmwgKyAxOworCX0KKwlzdHJidWZfYWRkKGJ1Ziwgc3JjLCBsZW4pOworCisJZnJlZSh0b19mcmVlKTsKKwlyZXR1cm4gMTsKK30KKworc3RydWN0IGZpbHRlcl9wYXJhbXMgeworCWNvbnN0IGNoYXIgKnNyYzsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IGZkOworCWNvbnN0IGNoYXIgKmNtZDsKKwljb25zdCBjaGFyICpwYXRoOworfTsKKworc3RhdGljIGludCBmaWx0ZXJfYnVmZmVyX29yX2ZkKGludCBpbiwgaW50IG91dCwgdm9pZCAqZGF0YSkKK3sKKwkvKgorCSAqIFNwYXduIGNtZCBhbmQgZmVlZCB0aGUgYnVmZmVyIGNvbnRlbnRzIHRocm91Z2ggaXRzIHN0ZGluLgorCSAqLworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkX3Byb2Nlc3MgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGZpbHRlcl9wYXJhbXMgKnBhcmFtcyA9IChzdHJ1Y3QgZmlsdGVyX3BhcmFtcyAqKWRhdGE7CisJaW50IHdyaXRlX2Vyciwgc3RhdHVzOworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgTlVMTCwgTlVMTCB9OworCisJLyogYXBwbHkgJSBzdWJzdGl0dXRpb24gdG8gY21kICovCisJc3RydWN0IHN0cmJ1ZiBjbWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmX2V4cGFuZF9kaWN0X2VudHJ5IGRpY3RbXSA9IHsKKwkJeyAiZiIsIE5VTEwsIH0sCisJCXsgTlVMTCwgTlVMTCwgfSwKKwl9OworCisJLyogcXVvdGUgdGhlIHBhdGggdG8gcHJlc2VydmUgc3BhY2VzLCBldGMuICovCisJc3FfcXVvdGVfYnVmKCZwYXRoLCBwYXJhbXMtPnBhdGgpOworCWRpY3RbMF0udmFsdWUgPSBwYXRoLmJ1ZjsKKworCS8qIGV4cGFuZCBhbGwgJWYgd2l0aCB0aGUgcXVvdGVkIHBhdGggKi8KKwlzdHJidWZfZXhwYW5kKCZjbWQsIHBhcmFtcy0+Y21kLCBzdHJidWZfZXhwYW5kX2RpY3RfY2IsICZkaWN0KTsKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisKKwlhcmd2WzBdID0gY21kLmJ1ZjsKKworCWNoaWxkX3Byb2Nlc3MuYXJndiA9IGFyZ3Y7CisJY2hpbGRfcHJvY2Vzcy51c2Vfc2hlbGwgPSAxOworCWNoaWxkX3Byb2Nlc3MuaW4gPSAtMTsKKwljaGlsZF9wcm9jZXNzLm91dCA9IG91dDsKKworCWlmIChzdGFydF9jb21tYW5kKCZjaGlsZF9wcm9jZXNzKSkgeworCQlzdHJidWZfcmVsZWFzZSgmY21kKTsKKwkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCBmb3JrIHRvIHJ1biBleHRlcm5hbCBmaWx0ZXIgJyVzJyIpLAorCQkJICAgICBwYXJhbXMtPmNtZCk7CisJfQorCisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKworCWlmIChwYXJhbXMtPnNyYykgeworCQl3cml0ZV9lcnIgPSAod3JpdGVfaW5fZnVsbChjaGlsZF9wcm9jZXNzLmluLAorCQkJCQkgICBwYXJhbXMtPnNyYywgcGFyYW1zLT5zaXplKSA8IDApOworCQlpZiAoZXJybm8gPT0gRVBJUEUpCisJCQl3cml0ZV9lcnIgPSAwOworCX0gZWxzZSB7CisJCXdyaXRlX2VyciA9IGNvcHlfZmQocGFyYW1zLT5mZCwgY2hpbGRfcHJvY2Vzcy5pbik7CisJCWlmICh3cml0ZV9lcnIgPT0gQ09QWV9XUklURV9FUlJPUiAmJiBlcnJubyA9PSBFUElQRSkKKwkJCXdyaXRlX2VyciA9IDA7CisJfQorCisJaWYgKGNsb3NlKGNoaWxkX3Byb2Nlc3MuaW4pKQorCQl3cml0ZV9lcnIgPSAxOworCWlmICh3cml0ZV9lcnIpCisJCWVycm9yKF8oImNhbm5vdCBmZWVkIHRoZSBpbnB1dCB0byBleHRlcm5hbCBmaWx0ZXIgJyVzJyIpLAorCQkgICAgICBwYXJhbXMtPmNtZCk7CisKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisKKwlzdGF0dXMgPSBmaW5pc2hfY29tbWFuZCgmY2hpbGRfcHJvY2Vzcyk7CisJaWYgKHN0YXR1cykKKwkJZXJyb3IoXygiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkICVkIiksIHBhcmFtcy0+Y21kLCBzdGF0dXMpOworCisJc3RyYnVmX3JlbGVhc2UoJmNtZCk7CisJcmV0dXJuICh3cml0ZV9lcnIgfHwgc3RhdHVzKTsKK30KKworc3RhdGljIGludCBhcHBseV9zaW5nbGVfZmlsZV9maWx0ZXIoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLCBpbnQgZmQsCisJCQkJICAgIHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3QgY2hhciAqY21kKQoreworCS8qCisJICogQ3JlYXRlIGEgcGlwZWxpbmUgdG8gaGF2ZSB0aGUgY29tbWFuZCBmaWx0ZXIgdGhlIGJ1ZmZlcidzCisJICogY29udGVudHMuCisJICoKKwkgKiAoY2hpbGQgLS0+IGNtZCkgLS0+IHVzCisJICovCisJaW50IGVyciA9IDA7CisJc3RydWN0IHN0cmJ1ZiBuYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGFzeW5jIGFzeW5jOworCXN0cnVjdCBmaWx0ZXJfcGFyYW1zIHBhcmFtczsKKworCW1lbXNldCgmYXN5bmMsIDAsIHNpemVvZihhc3luYykpOworCWFzeW5jLnByb2MgPSBmaWx0ZXJfYnVmZmVyX29yX2ZkOworCWFzeW5jLmRhdGEgPSAmcGFyYW1zOworCWFzeW5jLm91dCA9IC0xOworCXBhcmFtcy5zcmMgPSBzcmM7CisJcGFyYW1zLnNpemUgPSBsZW47CisJcGFyYW1zLmZkID0gZmQ7CisJcGFyYW1zLmNtZCA9IGNtZDsKKwlwYXJhbXMucGF0aCA9IHBhdGg7CisKKwlmZmx1c2goTlVMTCk7CisJaWYgKHN0YXJ0X2FzeW5jKCZhc3luYykpCisJCXJldHVybiAwOwkvKiBlcnJvciB3YXMgYWxyZWFkeSByZXBvcnRlZCAqLworCisJaWYgKHN0cmJ1Zl9yZWFkKCZuYnVmLCBhc3luYy5vdXQsIDApIDwgMCkgeworCQllcnIgPSBlcnJvcihfKCJyZWFkIGZyb20gZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIiksIGNtZCk7CisJfQorCWlmIChjbG9zZShhc3luYy5vdXQpKSB7CisJCWVyciA9IGVycm9yKF8oInJlYWQgZnJvbSBleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiKSwgY21kKTsKKwl9CisJaWYgKGZpbmlzaF9hc3luYygmYXN5bmMpKSB7CisJCWVyciA9IGVycm9yKF8oImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIpLCBjbWQpOworCX0KKworCWlmICghZXJyKSB7CisJCXN0cmJ1Zl9zd2FwKGRzdCwgJm5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmbmJ1Zik7CisJcmV0dXJuICFlcnI7Cit9CisKKyNkZWZpbmUgQ0FQX0NMRUFOICAgICgxdTw8MCkKKyNkZWZpbmUgQ0FQX1NNVURHRSAgICgxdTw8MSkKKyNkZWZpbmUgQ0FQX0RFTEFZICAgICgxdTw8MikKKworc3RydWN0IGNtZDJwcm9jZXNzIHsKKwlzdHJ1Y3Qgc3VicHJvY2Vzc19lbnRyeSBzdWJwcm9jZXNzOyAvKiBtdXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIhICovCisJdW5zaWduZWQgaW50IHN1cHBvcnRlZF9jYXBhYmlsaXRpZXM7Cit9OworCitzdGF0aWMgaW50IHN1YnByb2Nlc3NfbWFwX2luaXRpYWxpemVkOworc3RhdGljIHN0cnVjdCBoYXNobWFwIHN1YnByb2Nlc3NfbWFwOworCitzdGF0aWMgaW50IHN0YXJ0X211bHRpX2ZpbGVfZmlsdGVyX2ZuKHN0cnVjdCBzdWJwcm9jZXNzX2VudHJ5ICpzdWJwcm9jZXNzKQoreworCXN0YXRpYyBpbnQgdmVyc2lvbnNbXSA9IHsyLCAwfTsKKwlzdGF0aWMgc3RydWN0IHN1YnByb2Nlc3NfY2FwYWJpbGl0eSBjYXBhYmlsaXRpZXNbXSA9IHsKKwkJeyAiY2xlYW4iLCAgQ0FQX0NMRUFOICB9LAorCQl7ICJzbXVkZ2UiLCBDQVBfU01VREdFIH0sCisJCXsgImRlbGF5IiwgIENBUF9ERUxBWSAgfSwKKwkJeyBOVUxMLCAwIH0KKwl9OworCXN0cnVjdCBjbWQycHJvY2VzcyAqZW50cnkgPSAoc3RydWN0IGNtZDJwcm9jZXNzICopc3VicHJvY2VzczsKKwlyZXR1cm4gc3VicHJvY2Vzc19oYW5kc2hha2Uoc3VicHJvY2VzcywgImdpdC1maWx0ZXIiLCB2ZXJzaW9ucywgTlVMTCwKKwkJCQkgICAgY2FwYWJpbGl0aWVzLAorCQkJCSAgICAmZW50cnktPnN1cHBvcnRlZF9jYXBhYmlsaXRpZXMpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZmlsdGVyX2Vycm9yKGNvbnN0IHN0cnVjdCBzdHJidWYgKmZpbHRlcl9zdGF0dXMsCisJCQkJc3RydWN0IGNtZDJwcm9jZXNzICplbnRyeSwKKwkJCQljb25zdCB1bnNpZ25lZCBpbnQgd2FudGVkX2NhcGFiaWxpdHkpCit7CisJaWYgKCFzdHJjbXAoZmlsdGVyX3N0YXR1cy0+YnVmLCAiZXJyb3IiKSkKKwkJOyAvKiBUaGUgZmlsdGVyIHNpZ25hbGVkIGEgcHJvYmxlbSB3aXRoIHRoZSBmaWxlLiAqLworCWVsc2UgaWYgKCFzdHJjbXAoZmlsdGVyX3N0YXR1cy0+YnVmLCAiYWJvcnQiKSAmJiB3YW50ZWRfY2FwYWJpbGl0eSkgeworCQkvKgorCQkgKiBUaGUgZmlsdGVyIHNpZ25hbGVkIGEgcGVybWFuZW50IHByb2JsZW0uIERvbid0IHRyeSB0byBmaWx0ZXIKKwkJICogZmlsZXMgd2l0aCB0aGUgc2FtZSBjb21tYW5kIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGN1cnJlbnQKKwkJICogR2l0IHByb2Nlc3MuCisJCSAqLworCQkgZW50cnktPnN1cHBvcnRlZF9jYXBhYmlsaXRpZXMgJj0gfndhbnRlZF9jYXBhYmlsaXR5OworCX0gZWxzZSB7CisJCS8qCisJCSAqIFNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIHByb3RvY29sIGZpbHRlci4KKwkJICogRm9yY2Ugc2h1dGRvd24gYW5kIHJlc3RhcnQgaWYgYW5vdGhlciBibG9iIHJlcXVpcmVzIGZpbHRlcmluZy4KKwkJICovCisJCWVycm9yKF8oImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIpLCBlbnRyeS0+c3VicHJvY2Vzcy5jbWQpOworCQlzdWJwcm9jZXNzX3N0b3AoJnN1YnByb2Nlc3NfbWFwLCAmZW50cnktPnN1YnByb2Nlc3MpOworCQlmcmVlKGVudHJ5KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfbXVsdGlfZmlsZV9maWx0ZXIoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorCQkJCSAgIGludCBmZCwgc3RydWN0IHN0cmJ1ZiAqZHN0LCBjb25zdCBjaGFyICpjbWQsCisJCQkJICAgY29uc3QgdW5zaWduZWQgaW50IHdhbnRlZF9jYXBhYmlsaXR5LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBjaGVja291dF9tZXRhZGF0YSAqbWV0YSwKKwkJCQkgICBzdHJ1Y3QgZGVsYXllZF9jaGVja291dCAqZGNvKQoreworCWludCBlcnI7CisJaW50IGNhbl9kZWxheSA9IDA7CisJc3RydWN0IGNtZDJwcm9jZXNzICplbnRyeTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqcHJvY2VzczsKKwlzdHJ1Y3Qgc3RyYnVmIG5idWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGZpbHRlcl9zdGF0dXMgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpmaWx0ZXJfdHlwZTsKKworCWlmICghc3VicHJvY2Vzc19tYXBfaW5pdGlhbGl6ZWQpIHsKKwkJc3VicHJvY2Vzc19tYXBfaW5pdGlhbGl6ZWQgPSAxOworCQloYXNobWFwX2luaXQoJnN1YnByb2Nlc3NfbWFwLCBjbWQycHJvY2Vzc19jbXAsIE5VTEwsIDApOworCQllbnRyeSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJZW50cnkgPSAoc3RydWN0IGNtZDJwcm9jZXNzICopc3VicHJvY2Vzc19maW5kX2VudHJ5KCZzdWJwcm9jZXNzX21hcCwgY21kKTsKKwl9CisKKwlmZmx1c2goTlVMTCk7CisKKwlpZiAoIWVudHJ5KSB7CisJCWVudHJ5ID0geG1hbGxvYyhzaXplb2YoKmVudHJ5KSk7CisJCWVudHJ5LT5zdXBwb3J0ZWRfY2FwYWJpbGl0aWVzID0gMDsKKworCQlpZiAoc3VicHJvY2Vzc19zdGFydCgmc3VicHJvY2Vzc19tYXAsICZlbnRyeS0+c3VicHJvY2VzcywgY21kLCBzdGFydF9tdWx0aV9maWxlX2ZpbHRlcl9mbikpIHsKKwkJCWZyZWUoZW50cnkpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcHJvY2VzcyA9ICZlbnRyeS0+c3VicHJvY2Vzcy5wcm9jZXNzOworCisJaWYgKCEoZW50cnktPnN1cHBvcnRlZF9jYXBhYmlsaXRpZXMgJiB3YW50ZWRfY2FwYWJpbGl0eSkpCisJCXJldHVybiAwOworCisJaWYgKHdhbnRlZF9jYXBhYmlsaXR5ICYgQ0FQX0NMRUFOKQorCQlmaWx0ZXJfdHlwZSA9ICJjbGVhbiI7CisJZWxzZSBpZiAod2FudGVkX2NhcGFiaWxpdHkgJiBDQVBfU01VREdFKQorCQlmaWx0ZXJfdHlwZSA9ICJzbXVkZ2UiOworCWVsc2UKKwkJZGllKF8oInVuZXhwZWN0ZWQgZmlsdGVyIHR5cGUiKSk7CisKKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCisJYXNzZXJ0KHN0cmxlbihmaWx0ZXJfdHlwZSkgPCBMQVJHRV9QQUNLRVRfREFUQV9NQVggLSBzdHJsZW4oImNvbW1hbmQ9XG4iKSk7CisJZXJyID0gcGFja2V0X3dyaXRlX2ZtdF9nZW50bHkocHJvY2Vzcy0+aW4sICJjb21tYW5kPSVzXG4iLCBmaWx0ZXJfdHlwZSk7CisJaWYgKGVycikKKwkJZ290byBkb25lOworCisJZXJyID0gc3RybGVuKHBhdGgpID4gTEFSR0VfUEFDS0VUX0RBVEFfTUFYIC0gc3RybGVuKCJwYXRobmFtZT1cbiIpOworCWlmIChlcnIpIHsKKwkJZXJyb3IoXygicGF0aCBuYW1lIHRvbyBsb25nIGZvciBleHRlcm5hbCBmaWx0ZXIiKSk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwllcnIgPSBwYWNrZXRfd3JpdGVfZm10X2dlbnRseShwcm9jZXNzLT5pbiwgInBhdGhuYW1lPSVzXG4iLCBwYXRoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CisKKwlpZiAobWV0YSAmJiBtZXRhLT5yZWZuYW1lKSB7CisJCWVyciA9IHBhY2tldF93cml0ZV9mbXRfZ2VudGx5KHByb2Nlc3MtPmluLCAicmVmPSVzXG4iLCBtZXRhLT5yZWZuYW1lKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAobWV0YSAmJiAhaXNfbnVsbF9vaWQoJm1ldGEtPnRyZWVpc2gpKSB7CisJCWVyciA9IHBhY2tldF93cml0ZV9mbXRfZ2VudGx5KHByb2Nlc3MtPmluLCAidHJlZWlzaD0lc1xuIiwgb2lkX3RvX2hleCgmbWV0YS0+dHJlZWlzaCkpOworCQlpZiAoZXJyKQorCQkJZ290byBkb25lOworCX0KKworCWlmIChtZXRhICYmICFpc19udWxsX29pZCgmbWV0YS0+YmxvYikpIHsKKwkJZXJyID0gcGFja2V0X3dyaXRlX2ZtdF9nZW50bHkocHJvY2Vzcy0+aW4sICJibG9iPSVzXG4iLCBvaWRfdG9faGV4KCZtZXRhLT5ibG9iKSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKChlbnRyeS0+c3VwcG9ydGVkX2NhcGFiaWxpdGllcyAmIENBUF9ERUxBWSkgJiYKKwkgICAgZGNvICYmIGRjby0+c3RhdGUgPT0gQ0VfQ0FOX0RFTEFZKSB7CisJCWNhbl9kZWxheSA9IDE7CisJCWVyciA9IHBhY2tldF93cml0ZV9mbXRfZ2VudGx5KHByb2Nlc3MtPmluLCAiY2FuLWRlbGF5PTFcbiIpOworCQlpZiAoZXJyKQorCQkJZ290byBkb25lOworCX0KKworCWVyciA9IHBhY2tldF9mbHVzaF9nZW50bHkocHJvY2Vzcy0+aW4pOworCWlmIChlcnIpCisJCWdvdG8gZG9uZTsKKworCWlmIChmZCA+PSAwKQorCQllcnIgPSB3cml0ZV9wYWNrZXRpemVkX2Zyb21fZmQoZmQsIHByb2Nlc3MtPmluKTsKKwllbHNlCisJCWVyciA9IHdyaXRlX3BhY2tldGl6ZWRfZnJvbV9idWYoc3JjLCBsZW4sIHByb2Nlc3MtPmluKTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CisKKwllcnIgPSBzdWJwcm9jZXNzX3JlYWRfc3RhdHVzKHByb2Nlc3MtPm91dCwgJmZpbHRlcl9zdGF0dXMpOworCWlmIChlcnIpCisJCWdvdG8gZG9uZTsKKworCWlmIChjYW5fZGVsYXkgJiYgIXN0cmNtcChmaWx0ZXJfc3RhdHVzLmJ1ZiwgImRlbGF5ZWQiKSkgeworCQlzdHJpbmdfbGlzdF9pbnNlcnQoJmRjby0+ZmlsdGVycywgY21kKTsKKwkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZkY28tPnBhdGhzLCBwYXRoKTsKKwl9IGVsc2UgeworCQkvKiBUaGUgZmlsdGVyIGdvdCB0aGUgYmxvYiBhbmQgd2FudHMgdG8gc2VuZCB1cyBhIHJlc3BvbnNlLiAqLworCQllcnIgPSBzdHJjbXAoZmlsdGVyX3N0YXR1cy5idWYsICJzdWNjZXNzIik7CisJCWlmIChlcnIpCisJCQlnb3RvIGRvbmU7CisKKwkJZXJyID0gcmVhZF9wYWNrZXRpemVkX3RvX3N0cmJ1Zihwcm9jZXNzLT5vdXQsICZuYnVmKSA8IDA7CisJCWlmIChlcnIpCisJCQlnb3RvIGRvbmU7CisKKwkJZXJyID0gc3VicHJvY2Vzc19yZWFkX3N0YXR1cyhwcm9jZXNzLT5vdXQsICZmaWx0ZXJfc3RhdHVzKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZG9uZTsKKworCQllcnIgPSBzdHJjbXAoZmlsdGVyX3N0YXR1cy5idWYsICJzdWNjZXNzIik7CisJfQorCitkb25lOgorCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKworCWlmIChlcnIpCisJCWhhbmRsZV9maWx0ZXJfZXJyb3IoJmZpbHRlcl9zdGF0dXMsIGVudHJ5LCB3YW50ZWRfY2FwYWJpbGl0eSk7CisJZWxzZQorCQlzdHJidWZfc3dhcChkc3QsICZuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmbmJ1Zik7CisJcmV0dXJuICFlcnI7Cit9CisKKworaW50IGFzeW5jX3F1ZXJ5X2F2YWlsYWJsZV9ibG9icyhjb25zdCBjaGFyICpjbWQsIHN0cnVjdCBzdHJpbmdfbGlzdCAqYXZhaWxhYmxlX3BhdGhzKQoreworCWludCBlcnI7CisJY2hhciAqbGluZTsKKwlzdHJ1Y3QgY21kMnByb2Nlc3MgKmVudHJ5OworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpwcm9jZXNzOworCXN0cnVjdCBzdHJidWYgZmlsdGVyX3N0YXR1cyA9IFNUUkJVRl9JTklUOworCisJYXNzZXJ0KHN1YnByb2Nlc3NfbWFwX2luaXRpYWxpemVkKTsKKwllbnRyeSA9IChzdHJ1Y3QgY21kMnByb2Nlc3MgKilzdWJwcm9jZXNzX2ZpbmRfZW50cnkoJnN1YnByb2Nlc3NfbWFwLCBjbWQpOworCWlmICghZW50cnkpIHsKKwkJZXJyb3IoXygiZXh0ZXJuYWwgZmlsdGVyICclcycgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGFsdGhvdWdoICIKKwkJCSJub3QgYWxsIHBhdGhzIGhhdmUgYmVlbiBmaWx0ZXJlZCIpLCBjbWQpOworCQlyZXR1cm4gMDsKKwl9CisJcHJvY2VzcyA9ICZlbnRyeS0+c3VicHJvY2Vzcy5wcm9jZXNzOworCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgU0lHX0lHTik7CisKKwllcnIgPSBwYWNrZXRfd3JpdGVfZm10X2dlbnRseSgKKwkJcHJvY2Vzcy0+aW4sICJjb21tYW5kPWxpc3RfYXZhaWxhYmxlX2Jsb2JzXG4iKTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CisKKwllcnIgPSBwYWNrZXRfZmx1c2hfZ2VudGx5KHByb2Nlc3MtPmluKTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CisKKwl3aGlsZSAoKGxpbmUgPSBwYWNrZXRfcmVhZF9saW5lKHByb2Nlc3MtPm91dCwgTlVMTCkpKSB7CisJCWNvbnN0IGNoYXIgKnBhdGg7CisJCWlmIChza2lwX3ByZWZpeChsaW5lLCAicGF0aG5hbWU9IiwgJnBhdGgpKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KGF2YWlsYWJsZV9wYXRocywgeHN0cmR1cChwYXRoKSk7CisJCWVsc2UKKwkJCTsgLyogaWdub3JlIHVua25vd24ga2V5cyAqLworCX0KKworCWVyciA9IHN1YnByb2Nlc3NfcmVhZF9zdGF0dXMocHJvY2Vzcy0+b3V0LCAmZmlsdGVyX3N0YXR1cyk7CisJaWYgKGVycikKKwkJZ290byBkb25lOworCisJZXJyID0gc3RyY21wKGZpbHRlcl9zdGF0dXMuYnVmLCAic3VjY2VzcyIpOworCitkb25lOgorCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKworCWlmIChlcnIpCisJCWhhbmRsZV9maWx0ZXJfZXJyb3IoJmZpbHRlcl9zdGF0dXMsIGVudHJ5LCAwKTsKKwlyZXR1cm4gIWVycjsKK30KKworc3RhdGljIHN0cnVjdCBjb252ZXJ0X2RyaXZlciB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgY29udmVydF9kcml2ZXIgKm5leHQ7CisJY29uc3QgY2hhciAqc211ZGdlOworCWNvbnN0IGNoYXIgKmNsZWFuOworCWNvbnN0IGNoYXIgKnByb2Nlc3M7CisJaW50IHJlcXVpcmVkOworfSAqdXNlcl9jb252ZXJ0LCAqKnVzZXJfY29udmVydF90YWlsOworCitzdGF0aWMgaW50IGFwcGx5X2ZpbHRlcihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sCisJCQlpbnQgZmQsIHN0cnVjdCBzdHJidWYgKmRzdCwgc3RydWN0IGNvbnZlcnRfZHJpdmVyICpkcnYsCisJCQljb25zdCB1bnNpZ25lZCBpbnQgd2FudGVkX2NhcGFiaWxpdHksCisJCQljb25zdCBzdHJ1Y3QgY2hlY2tvdXRfbWV0YWRhdGEgKm1ldGEsCisJCQlzdHJ1Y3QgZGVsYXllZF9jaGVja291dCAqZGNvKQoreworCWNvbnN0IGNoYXIgKmNtZCA9IE5VTEw7CisKKwlpZiAoIWRydikKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWRzdCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKHdhbnRlZF9jYXBhYmlsaXR5ICYgQ0FQX0NMRUFOKSAmJiAhZHJ2LT5wcm9jZXNzICYmIGRydi0+Y2xlYW4pCisJCWNtZCA9IGRydi0+Y2xlYW47CisJZWxzZSBpZiAoKHdhbnRlZF9jYXBhYmlsaXR5ICYgQ0FQX1NNVURHRSkgJiYgIWRydi0+cHJvY2VzcyAmJiBkcnYtPnNtdWRnZSkKKwkJY21kID0gZHJ2LT5zbXVkZ2U7CisKKwlpZiAoY21kICYmICpjbWQpCisJCXJldHVybiBhcHBseV9zaW5nbGVfZmlsZV9maWx0ZXIocGF0aCwgc3JjLCBsZW4sIGZkLCBkc3QsIGNtZCk7CisJZWxzZSBpZiAoZHJ2LT5wcm9jZXNzICYmICpkcnYtPnByb2Nlc3MpCisJCXJldHVybiBhcHBseV9tdWx0aV9maWxlX2ZpbHRlcihwYXRoLCBzcmMsIGxlbiwgZmQsIGRzdCwKKwkJCWRydi0+cHJvY2Vzcywgd2FudGVkX2NhcGFiaWxpdHksIG1ldGEsIGRjbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX2NvbnZlcnRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWNvbnN0IGNoYXIgKmtleSwgKm5hbWU7CisJc2l6ZV90IG5hbWVsZW47CisJc3RydWN0IGNvbnZlcnRfZHJpdmVyICpkcnY7CisKKwkvKgorCSAqIEV4dGVybmFsIGNvbnZlcnNpb24gZHJpdmVycyBhcmUgY29uZmlndXJlZCB1c2luZworCSAqICJmaWx0ZXIuPG5hbWU+LnZhcmlhYmxlIi4KKwkgKi8KKwlpZiAocGFyc2VfY29uZmlnX2tleSh2YXIsICJmaWx0ZXIiLCAmbmFtZSwgJm5hbWVsZW4sICZrZXkpIDwgMCB8fCAhbmFtZSkKKwkJcmV0dXJuIDA7CisJZm9yIChkcnYgPSB1c2VyX2NvbnZlcnQ7IGRydjsgZHJ2ID0gZHJ2LT5uZXh0KQorCQlpZiAoIXN0cm5jbXAoZHJ2LT5uYW1lLCBuYW1lLCBuYW1lbGVuKSAmJiAhZHJ2LT5uYW1lW25hbWVsZW5dKQorCQkJYnJlYWs7CisJaWYgKCFkcnYpIHsKKwkJZHJ2ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNvbnZlcnRfZHJpdmVyKSk7CisJCWRydi0+bmFtZSA9IHhtZW1kdXB6KG5hbWUsIG5hbWVsZW4pOworCQkqdXNlcl9jb252ZXJ0X3RhaWwgPSBkcnY7CisJCXVzZXJfY29udmVydF90YWlsID0gJihkcnYtPm5leHQpOworCX0KKworCS8qCisJICogZmlsdGVyLjxuYW1lPi5zbXVkZ2UgYW5kIGZpbHRlci48bmFtZT4uY2xlYW4gc3BlY2lmaWVzCisJICogdGhlIGNvbW1hbmQgbGluZToKKwkgKgorCSAqCWNvbW1hbmQtbGluZQorCSAqCisJICogVGhlIGNvbW1hbmQtbGluZSB3aWxsIG5vdCBiZSBpbnRlcnBvbGF0ZWQgaW4gYW55IHdheS4KKwkgKi8KKworCWlmICghc3RyY21wKCJzbXVkZ2UiLCBrZXkpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRydi0+c211ZGdlLCB2YXIsIHZhbHVlKTsKKworCWlmICghc3RyY21wKCJjbGVhbiIsIGtleSkpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZHJ2LT5jbGVhbiwgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCgicHJvY2VzcyIsIGtleSkpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZHJ2LT5wcm9jZXNzLCB2YXIsIHZhbHVlKTsKKworCWlmICghc3RyY21wKCJyZXF1aXJlZCIsIGtleSkpIHsKKwkJZHJ2LT5yZXF1aXJlZCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfaWRlbnQoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwkvKgorCSAqICIkSWQ6IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgJCIgPD0+ICIkSWQkIgorCSAqLworCWludCBjbnQgPSAwOworCWNoYXIgY2g7CisKKwl3aGlsZSAoc2l6ZSkgeworCQljaCA9ICpjcCsrOworCQlzaXplLS07CisJCWlmIChjaCAhPSAnJCcpCisJCQljb250aW51ZTsKKwkJaWYgKHNpemUgPCAzKQorCQkJYnJlYWs7CisJCWlmIChtZW1jbXAoIklkIiwgY3AsIDIpKQorCQkJY29udGludWU7CisJCWNoID0gY3BbMl07CisJCWNwICs9IDM7CisJCXNpemUgLT0gMzsKKwkJaWYgKGNoID09ICckJykKKwkJCWNudCsrOyAvKiAkSWQkICovCisJCWlmIChjaCAhPSAnOicpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiAiJElkOiAuLi4gIjsgc2NhbiB1cCB0byB0aGUgY2xvc2luZyBkb2xsYXIgc2lnbiBhbmQgZGlzY2FyZC4KKwkJICovCisJCXdoaWxlIChzaXplKSB7CisJCQljaCA9ICpjcCsrOworCQkJc2l6ZS0tOworCQkJaWYgKGNoID09ICckJykgeworCQkJCWNudCsrOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGNoID09ICdcbicpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGludCBpZGVudF90b19naXQoY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorCQkJc3RydWN0IHN0cmJ1ZiAqYnVmLCBpbnQgaWRlbnQpCit7CisJY2hhciAqZHN0LCAqZG9sbGFyOworCisJaWYgKCFpZGVudCB8fCAoc3JjICYmICFjb3VudF9pZGVudChzcmMsIGxlbikpKQorCQlyZXR1cm4gMDsKKworCWlmICghYnVmKQorCQlyZXR1cm4gMTsKKworCS8qIG9ubHkgZ3JvdyBpZiBub3QgaW4gcGxhY2UgKi8KKwlpZiAoc3RyYnVmX2F2YWlsKGJ1ZikgKyBidWYtPmxlbiA8IGxlbikKKwkJc3RyYnVmX2dyb3coYnVmLCBsZW4gLSBidWYtPmxlbik7CisJZHN0ID0gYnVmLT5idWY7CisJZm9yICg7OykgeworCQlkb2xsYXIgPSBtZW1jaHIoc3JjLCAnJCcsIGxlbik7CisJCWlmICghZG9sbGFyKQorCQkJYnJlYWs7CisJCW1lbW1vdmUoZHN0LCBzcmMsIGRvbGxhciArIDEgLSBzcmMpOworCQlkc3QgKz0gZG9sbGFyICsgMSAtIHNyYzsKKwkJbGVuIC09IGRvbGxhciArIDEgLSBzcmM7CisJCXNyYyAgPSBkb2xsYXIgKyAxOworCisJCWlmIChsZW4gPiAzICYmICFtZW1jbXAoc3JjLCAiSWQ6IiwgMykpIHsKKwkJCWRvbGxhciA9IG1lbWNocihzcmMgKyAzLCAnJCcsIGxlbiAtIDMpOworCQkJaWYgKCFkb2xsYXIpCisJCQkJYnJlYWs7CisJCQlpZiAobWVtY2hyKHNyYyArIDMsICdcbicsIGRvbGxhciAtIHNyYyAtIDMpKSB7CisJCQkJLyogTGluZSBicmVhayBiZWZvcmUgdGhlIG5leHQgZG9sbGFyLiAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQltZW1jcHkoZHN0LCAiSWQkIiwgMyk7CisJCQlkc3QgKz0gMzsKKwkJCWxlbiAtPSBkb2xsYXIgKyAxIC0gc3JjOworCQkJc3JjICA9IGRvbGxhciArIDE7CisJCX0KKwl9CisJbWVtbW92ZShkc3QsIHNyYywgbGVuKTsKKwlzdHJidWZfc2V0bGVuKGJ1ZiwgZHN0ICsgbGVuIC0gYnVmLT5idWYpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGlkZW50X3RvX3dvcmt0cmVlKGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwKKwkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLCBpbnQgaWRlbnQpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY2hhciAqdG9fZnJlZSA9IE5VTEwsICpkb2xsYXIsICpzcGM7CisJaW50IGNudDsKKworCWlmICghaWRlbnQpCisJCXJldHVybiAwOworCisJY250ID0gY291bnRfaWRlbnQoc3JjLCBsZW4pOworCWlmICghY250KQorCQlyZXR1cm4gMDsKKworCS8qIGFyZSB3ZSAiZmFraW5nIiBpbiBwbGFjZSBlZGl0aW5nID8gKi8KKwlpZiAoc3JjID09IGJ1Zi0+YnVmKQorCQl0b19mcmVlID0gc3RyYnVmX2RldGFjaChidWYsIE5VTEwpOworCWhhc2hfb2JqZWN0X2ZpbGUodGhlX2hhc2hfYWxnbywgc3JjLCBsZW4sICJibG9iIiwgJm9pZCk7CisKKwlzdHJidWZfZ3JvdyhidWYsIGxlbiArIGNudCAqICh0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDMpKTsKKwlmb3IgKDs7KSB7CisJCS8qIHN0ZXAgMTogcnVuIHRvIHRoZSBuZXh0ICckJyAqLworCQlkb2xsYXIgPSBtZW1jaHIoc3JjLCAnJCcsIGxlbik7CisJCWlmICghZG9sbGFyKQorCQkJYnJlYWs7CisJCXN0cmJ1Zl9hZGQoYnVmLCBzcmMsIGRvbGxhciArIDEgLSBzcmMpOworCQlsZW4gLT0gZG9sbGFyICsgMSAtIHNyYzsKKwkJc3JjICA9IGRvbGxhciArIDE7CisKKwkJLyogc3RlcCAyOiBkb2VzIGl0IGxvb2tzIGxpa2UgYSBiaXQgbGlrZSBJZDp4eHgkIG9yIElkJCA/ICovCisJCWlmIChsZW4gPCAzIHx8IG1lbWNtcCgiSWQiLCBzcmMsIDIpKQorCQkJY29udGludWU7CisKKwkJLyogc3RlcCAzOiBza2lwIG92ZXIgSWQkIG9yIElkOnh4eHh4JCAqLworCQlpZiAoc3JjWzJdID09ICckJykgeworCQkJc3JjICs9IDM7CisJCQlsZW4gLT0gMzsKKwkJfSBlbHNlIGlmIChzcmNbMl0gPT0gJzonKSB7CisJCQkvKgorCQkJICogSXQncyBwb3NzaWJsZSB0aGF0IGFuIGV4cGFuZGVkIElkIGhhcyBjcmVwdCBpdHMgd2F5IGludG8gdGhlCisJCQkgKiByZXBvc2l0b3J5LCB3ZSBjb3BlIHdpdGggdGhhdCBieSBzdHJpcHBpbmcgdGhlIGV4cGFuc2lvbiBvdXQuCisJCQkgKiBUaGlzIGlzIHByb2JhYmx5IG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgd2lsbCBjYXVzZSBjaGFuZ2VzCisJCQkgKiBvbiBjaGVja291dCwgd2hpY2ggd29uJ3QgZ28gYXdheSBieSBzdGFzaCwgYnV0IGxldCdzIGtlZXAgaXQKKwkJCSAqIGZvciBnaXQtc3R5bGUgaWRzLgorCQkJICovCisJCQlkb2xsYXIgPSBtZW1jaHIoc3JjICsgMywgJyQnLCBsZW4gLSAzKTsKKwkJCWlmICghZG9sbGFyKSB7CisJCQkJLyogaW5jb21wbGV0ZSBrZXl3b3JkLCBubyBtb3JlICckJywgc28ganVzdCBxdWl0IHRoZSBsb29wICovCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChtZW1jaHIoc3JjICsgMywgJ1xuJywgZG9sbGFyIC0gc3JjIC0gMykpIHsKKwkJCQkvKiBMaW5lIGJyZWFrIGJlZm9yZSB0aGUgbmV4dCBkb2xsYXIuICovCisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXNwYyA9IG1lbWNocihzcmMgKyA0LCAnICcsIGRvbGxhciAtIHNyYyAtIDQpOworCQkJaWYgKHNwYyAmJiBzcGMgPCBkb2xsYXItMSkgeworCQkJCS8qIFRoZXJlIGFyZSBzcGFjZXMgaW4gdW5leHBlY3RlZCBwbGFjZXMuCisJCQkJICogVGhpcyBpcyBwcm9iYWJseSBhbiBpZCBmcm9tIHNvbWUgb3RoZXIKKwkJCQkgKiB2ZXJzaW9uaW5nIHN5c3RlbS4gS2VlcCBpdCBmb3Igbm93LgorCQkJCSAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlsZW4gLT0gZG9sbGFyICsgMSAtIHNyYzsKKwkJCXNyYyAgPSBkb2xsYXIgKyAxOworCQl9IGVsc2UgeworCQkJLyogaXQgd2Fzbid0IGEgIklkJCIgb3IgIklkOnh4eHgkIiAqLworCQkJY29udGludWU7CisJCX0KKworCQkvKiBzdGVwIDQ6IHN1YnN0aXR1dGUgKi8KKwkJc3RyYnVmX2FkZHN0cihidWYsICJJZDogIik7CisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBvaWRfdG9faGV4KCZvaWQpKTsKKwkJc3RyYnVmX2FkZHN0cihidWYsICIgJCIpOworCX0KKwlzdHJidWZfYWRkKGJ1Ziwgc3JjLCBsZW4pOworCisJZnJlZSh0b19mcmVlKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdpdF9wYXRoX2NoZWNrX2VuY29kaW5nKHN0cnVjdCBhdHRyX2NoZWNrX2l0ZW0gKmNoZWNrKQoreworCWNvbnN0IGNoYXIgKnZhbHVlID0gY2hlY2stPnZhbHVlOworCisJaWYgKEFUVFJfVU5TRVQodmFsdWUpIHx8ICFzdHJsZW4odmFsdWUpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChBVFRSX1RSVUUodmFsdWUpIHx8IEFUVFJfRkFMU0UodmFsdWUpKSB7CisJCWRpZShfKCJ0cnVlL2ZhbHNlIGFyZSBubyB2YWxpZCB3b3JraW5nLXRyZWUtZW5jb2RpbmdzIikpOworCX0KKworCS8qIERvbid0IGVuY29kZSB0byB0aGUgZGVmYXVsdCBlbmNvZGluZyAqLworCWlmIChzYW1lX2VuY29kaW5nKHZhbHVlLCBkZWZhdWx0X2VuY29kaW5nKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBlbnVtIGNybGZfYWN0aW9uIGdpdF9wYXRoX2NoZWNrX2NybGYoc3RydWN0IGF0dHJfY2hlY2tfaXRlbSAqY2hlY2spCit7CisJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVjay0+dmFsdWU7CisKKwlpZiAoQVRUUl9UUlVFKHZhbHVlKSkKKwkJcmV0dXJuIENSTEZfVEVYVDsKKwllbHNlIGlmIChBVFRSX0ZBTFNFKHZhbHVlKSkKKwkJcmV0dXJuIENSTEZfQklOQVJZOworCWVsc2UgaWYgKEFUVFJfVU5TRVQodmFsdWUpKQorCQk7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImlucHV0IikpCisJCXJldHVybiBDUkxGX1RFWFRfSU5QVVQ7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImF1dG8iKSkKKwkJcmV0dXJuIENSTEZfQVVUTzsKKwlyZXR1cm4gQ1JMRl9VTkRFRklORUQ7Cit9CisKK3N0YXRpYyBlbnVtIGVvbCBnaXRfcGF0aF9jaGVja19lb2woc3RydWN0IGF0dHJfY2hlY2tfaXRlbSAqY2hlY2spCit7CisJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVjay0+dmFsdWU7CisKKwlpZiAoQVRUUl9VTlNFVCh2YWx1ZSkpCisJCTsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibGYiKSkKKwkJcmV0dXJuIEVPTF9MRjsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiY3JsZiIpKQorCQlyZXR1cm4gRU9MX0NSTEY7CisJcmV0dXJuIEVPTF9VTlNFVDsKK30KKworc3RhdGljIHN0cnVjdCBjb252ZXJ0X2RyaXZlciAqZ2l0X3BhdGhfY2hlY2tfY29udmVydChzdHJ1Y3QgYXR0cl9jaGVja19pdGVtICpjaGVjaykKK3sKKwljb25zdCBjaGFyICp2YWx1ZSA9IGNoZWNrLT52YWx1ZTsKKwlzdHJ1Y3QgY29udmVydF9kcml2ZXIgKmRydjsKKworCWlmIChBVFRSX1RSVUUodmFsdWUpIHx8IEFUVFJfRkFMU0UodmFsdWUpIHx8IEFUVFJfVU5TRVQodmFsdWUpKQorCQlyZXR1cm4gTlVMTDsKKwlmb3IgKGRydiA9IHVzZXJfY29udmVydDsgZHJ2OyBkcnYgPSBkcnYtPm5leHQpCisJCWlmICghc3RyY21wKHZhbHVlLCBkcnYtPm5hbWUpKQorCQkJcmV0dXJuIGRydjsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBnaXRfcGF0aF9jaGVja19pZGVudChzdHJ1Y3QgYXR0cl9jaGVja19pdGVtICpjaGVjaykKK3sKKwljb25zdCBjaGFyICp2YWx1ZSA9IGNoZWNrLT52YWx1ZTsKKworCXJldHVybiAhIUFUVFJfVFJVRSh2YWx1ZSk7Cit9CisKK3N0cnVjdCBjb252X2F0dHJzIHsKKwlzdHJ1Y3QgY29udmVydF9kcml2ZXIgKmRydjsKKwllbnVtIGNybGZfYWN0aW9uIGF0dHJfYWN0aW9uOyAvKiBXaGF0IGF0dHIgc2F5cyAqLworCWVudW0gY3JsZl9hY3Rpb24gY3JsZl9hY3Rpb247IC8qIFdoZW4gbm8gYXR0ciBpcyBzZXQsIHVzZSBjb3JlLmF1dG9jcmxmICovCisJaW50IGlkZW50OworCWNvbnN0IGNoYXIgKndvcmtpbmdfdHJlZV9lbmNvZGluZzsgLyogU3VwcG9ydGVkIGVuY29kaW5nIG9yIGRlZmF1bHQgZW5jb2RpbmcgaWYgTlVMTCAqLworfTsKKworc3RhdGljIHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKKworc3RhdGljIHZvaWQgY29udmVydF9hdHRycyhjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgc3RydWN0IGNvbnZfYXR0cnMgKmNhLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBhdHRyX2NoZWNrX2l0ZW0gKmNjaGVjayA9IE5VTEw7CisKKwlpZiAoIWNoZWNrKSB7CisJCWNoZWNrID0gYXR0cl9jaGVja19pbml0bCgiY3JsZiIsICJpZGVudCIsICJmaWx0ZXIiLAorCQkJCQkgImVvbCIsICJ0ZXh0IiwgIndvcmtpbmctdHJlZS1lbmNvZGluZyIsCisJCQkJCSBOVUxMKTsKKwkJdXNlcl9jb252ZXJ0X3RhaWwgPSAmdXNlcl9jb252ZXJ0OworCQlnaXRfY29uZmlnKHJlYWRfY29udmVydF9jb25maWcsIE5VTEwpOworCX0KKworCWdpdF9jaGVja19hdHRyKGlzdGF0ZSwgcGF0aCwgY2hlY2spOworCWNjaGVjayA9IGNoZWNrLT5pdGVtczsKKwljYS0+Y3JsZl9hY3Rpb24gPSBnaXRfcGF0aF9jaGVja19jcmxmKGNjaGVjayArIDQpOworCWlmIChjYS0+Y3JsZl9hY3Rpb24gPT0gQ1JMRl9VTkRFRklORUQpCisJCWNhLT5jcmxmX2FjdGlvbiA9IGdpdF9wYXRoX2NoZWNrX2NybGYoY2NoZWNrICsgMCk7CisJY2EtPmlkZW50ID0gZ2l0X3BhdGhfY2hlY2tfaWRlbnQoY2NoZWNrICsgMSk7CisJY2EtPmRydiA9IGdpdF9wYXRoX2NoZWNrX2NvbnZlcnQoY2NoZWNrICsgMik7CisJaWYgKGNhLT5jcmxmX2FjdGlvbiAhPSBDUkxGX0JJTkFSWSkgeworCQllbnVtIGVvbCBlb2xfYXR0ciA9IGdpdF9wYXRoX2NoZWNrX2VvbChjY2hlY2sgKyAzKTsKKwkJaWYgKGNhLT5jcmxmX2FjdGlvbiA9PSBDUkxGX0FVVE8gJiYgZW9sX2F0dHIgPT0gRU9MX0xGKQorCQkJY2EtPmNybGZfYWN0aW9uID0gQ1JMRl9BVVRPX0lOUFVUOworCQllbHNlIGlmIChjYS0+Y3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPICYmIGVvbF9hdHRyID09IEVPTF9DUkxGKQorCQkJY2EtPmNybGZfYWN0aW9uID0gQ1JMRl9BVVRPX0NSTEY7CisJCWVsc2UgaWYgKGVvbF9hdHRyID09IEVPTF9MRikKKwkJCWNhLT5jcmxmX2FjdGlvbiA9IENSTEZfVEVYVF9JTlBVVDsKKwkJZWxzZSBpZiAoZW9sX2F0dHIgPT0gRU9MX0NSTEYpCisJCQljYS0+Y3JsZl9hY3Rpb24gPSBDUkxGX1RFWFRfQ1JMRjsKKwl9CisJY2EtPndvcmtpbmdfdHJlZV9lbmNvZGluZyA9IGdpdF9wYXRoX2NoZWNrX2VuY29kaW5nKGNjaGVjayArIDUpOworCisJLyogU2F2ZSBhdHRyIGFuZCBtYWtlIGEgZGVjaXNpb24gZm9yIGFjdGlvbiAqLworCWNhLT5hdHRyX2FjdGlvbiA9IGNhLT5jcmxmX2FjdGlvbjsKKwlpZiAoY2EtPmNybGZfYWN0aW9uID09IENSTEZfVEVYVCkKKwkJY2EtPmNybGZfYWN0aW9uID0gdGV4dF9lb2xfaXNfY3JsZigpID8gQ1JMRl9URVhUX0NSTEYgOiBDUkxGX1RFWFRfSU5QVVQ7CisJaWYgKGNhLT5jcmxmX2FjdGlvbiA9PSBDUkxGX1VOREVGSU5FRCAmJiBhdXRvX2NybGYgPT0gQVVUT19DUkxGX0ZBTFNFKQorCQljYS0+Y3JsZl9hY3Rpb24gPSBDUkxGX0JJTkFSWTsKKwlpZiAoY2EtPmNybGZfYWN0aW9uID09IENSTEZfVU5ERUZJTkVEICYmIGF1dG9fY3JsZiA9PSBBVVRPX0NSTEZfVFJVRSkKKwkJY2EtPmNybGZfYWN0aW9uID0gQ1JMRl9BVVRPX0NSTEY7CisJaWYgKGNhLT5jcmxmX2FjdGlvbiA9PSBDUkxGX1VOREVGSU5FRCAmJiBhdXRvX2NybGYgPT0gQVVUT19DUkxGX0lOUFVUKQorCQljYS0+Y3JsZl9hY3Rpb24gPSBDUkxGX0FVVE9fSU5QVVQ7Cit9CisKK3ZvaWQgcmVzZXRfcGFyc2VkX2F0dHJpYnV0ZXModm9pZCkKK3sKKwlzdHJ1Y3QgY29udmVydF9kcml2ZXIgKmRydiwgKm5leHQ7CisKKwlhdHRyX2NoZWNrX2ZyZWUoY2hlY2spOworCWNoZWNrID0gTlVMTDsKKwlyZXNldF9tZXJnZV9hdHRyaWJ1dGVzKCk7CisKKwlmb3IgKGRydiA9IHVzZXJfY29udmVydDsgZHJ2OyBkcnYgPSBuZXh0KSB7CisJCW5leHQgPSBkcnYtPm5leHQ7CisJCWZyZWUoKHZvaWQgKilkcnYtPm5hbWUpOworCQlmcmVlKGRydik7CisJfQorCXVzZXJfY29udmVydCA9IE5VTEw7CisJdXNlcl9jb252ZXJ0X3RhaWwgPSBOVUxMOworfQorCitpbnQgd291bGRfY29udmVydF90b19naXRfZmlsdGVyX2ZkKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBjb252X2F0dHJzIGNhOworCisJY29udmVydF9hdHRycyhpc3RhdGUsICZjYSwgcGF0aCk7CisJaWYgKCFjYS5kcnYpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBBcHBseSBhIGZpbHRlciB0byBhbiBmZCBvbmx5IGlmIHRoZSBmaWx0ZXIgaXMgcmVxdWlyZWQgdG8gc3VjY2VlZC4KKwkgKiBXZSBtdXN0IGRpZSBpZiB0aGUgZmlsdGVyIGZhaWxzLCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBkYXRhIGJlZm9yZQorCSAqIGZpbHRlcmluZyBpcyBub3QgYXZhaWxhYmxlLgorCSAqLworCWlmICghY2EuZHJ2LT5yZXF1aXJlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYXBwbHlfZmlsdGVyKHBhdGgsIE5VTEwsIDAsIC0xLCBOVUxMLCBjYS5kcnYsIENBUF9DTEVBTiwgTlVMTCwgTlVMTCk7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9jb252ZXJ0X2F0dHJfYXNjaWkoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGNvbnZfYXR0cnMgY2E7CisKKwljb252ZXJ0X2F0dHJzKGlzdGF0ZSwgJmNhLCBwYXRoKTsKKwlzd2l0Y2ggKGNhLmF0dHJfYWN0aW9uKSB7CisJY2FzZSBDUkxGX1VOREVGSU5FRDoKKwkJcmV0dXJuICIiOworCWNhc2UgQ1JMRl9CSU5BUlk6CisJCXJldHVybiAiLXRleHQiOworCWNhc2UgQ1JMRl9URVhUOgorCQlyZXR1cm4gInRleHQiOworCWNhc2UgQ1JMRl9URVhUX0lOUFVUOgorCQlyZXR1cm4gInRleHQgZW9sPWxmIjsKKwljYXNlIENSTEZfVEVYVF9DUkxGOgorCQlyZXR1cm4gInRleHQgZW9sPWNybGYiOworCWNhc2UgQ1JMRl9BVVRPOgorCQlyZXR1cm4gInRleHQ9YXV0byI7CisJY2FzZSBDUkxGX0FVVE9fQ1JMRjoKKwkJcmV0dXJuICJ0ZXh0PWF1dG8gZW9sPWNybGYiOworCWNhc2UgQ1JMRl9BVVRPX0lOUFVUOgorCQlyZXR1cm4gInRleHQ9YXV0byBlb2w9bGYiOworCX0KKwlyZXR1cm4gIiI7Cit9CisKK2ludCBjb252ZXJ0X3RvX2dpdChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJICAgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorCQkgICBzdHJ1Y3Qgc3RyYnVmICpkc3QsIGludCBjb252X2ZsYWdzKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBjb252X2F0dHJzIGNhOworCisJY29udmVydF9hdHRycyhpc3RhdGUsICZjYSwgcGF0aCk7CisKKwlyZXQgfD0gYXBwbHlfZmlsdGVyKHBhdGgsIHNyYywgbGVuLCAtMSwgZHN0LCBjYS5kcnYsIENBUF9DTEVBTiwgTlVMTCwgTlVMTCk7CisJaWYgKCFyZXQgJiYgY2EuZHJ2ICYmIGNhLmRydi0+cmVxdWlyZWQpCisJCWRpZShfKCIlczogY2xlYW4gZmlsdGVyICclcycgZmFpbGVkIiksIHBhdGgsIGNhLmRydi0+bmFtZSk7CisKKwlpZiAocmV0ICYmIGRzdCkgeworCQlzcmMgPSBkc3QtPmJ1ZjsKKwkJbGVuID0gZHN0LT5sZW47CisJfQorCisJcmV0IHw9IGVuY29kZV90b19naXQocGF0aCwgc3JjLCBsZW4sIGRzdCwgY2Eud29ya2luZ190cmVlX2VuY29kaW5nLCBjb252X2ZsYWdzKTsKKwlpZiAocmV0ICYmIGRzdCkgeworCQlzcmMgPSBkc3QtPmJ1ZjsKKwkJbGVuID0gZHN0LT5sZW47CisJfQorCisJaWYgKCEoY29udl9mbGFncyAmIENPTlZfRU9MX0tFRVBfQ1JMRikpIHsKKwkJcmV0IHw9IGNybGZfdG9fZ2l0KGlzdGF0ZSwgcGF0aCwgc3JjLCBsZW4sIGRzdCwgY2EuY3JsZl9hY3Rpb24sIGNvbnZfZmxhZ3MpOworCQlpZiAocmV0ICYmIGRzdCkgeworCQkJc3JjID0gZHN0LT5idWY7CisJCQlsZW4gPSBkc3QtPmxlbjsKKwkJfQorCX0KKwlyZXR1cm4gcmV0IHwgaWRlbnRfdG9fZ2l0KHNyYywgbGVuLCBkc3QsIGNhLmlkZW50KTsKK30KKwordm9pZCBjb252ZXJ0X3RvX2dpdF9maWx0ZXJfZmQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICAgICBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIHN0cnVjdCBzdHJidWYgKmRzdCwKKwkJCSAgICAgIGludCBjb252X2ZsYWdzKQoreworCXN0cnVjdCBjb252X2F0dHJzIGNhOworCWNvbnZlcnRfYXR0cnMoaXN0YXRlLCAmY2EsIHBhdGgpOworCisJYXNzZXJ0KGNhLmRydik7CisJYXNzZXJ0KGNhLmRydi0+Y2xlYW4gfHwgY2EuZHJ2LT5wcm9jZXNzKTsKKworCWlmICghYXBwbHlfZmlsdGVyKHBhdGgsIE5VTEwsIDAsIGZkLCBkc3QsIGNhLmRydiwgQ0FQX0NMRUFOLCBOVUxMLCBOVUxMKSkKKwkJZGllKF8oIiVzOiBjbGVhbiBmaWx0ZXIgJyVzJyBmYWlsZWQiKSwgcGF0aCwgY2EuZHJ2LT5uYW1lKTsKKworCWVuY29kZV90b19naXQocGF0aCwgZHN0LT5idWYsIGRzdC0+bGVuLCBkc3QsIGNhLndvcmtpbmdfdHJlZV9lbmNvZGluZywgY29udl9mbGFncyk7CisJY3JsZl90b19naXQoaXN0YXRlLCBwYXRoLCBkc3QtPmJ1ZiwgZHN0LT5sZW4sIGRzdCwgY2EuY3JsZl9hY3Rpb24sIGNvbnZfZmxhZ3MpOworCWlkZW50X3RvX2dpdChkc3QtPmJ1ZiwgZHN0LT5sZW4sIGRzdCwgY2EuaWRlbnQpOworfQorCitzdGF0aWMgaW50IGNvbnZlcnRfdG9fd29ya2luZ190cmVlX2ludGVybmFsKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQkgICAgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLAorCQkJCQkgICAgc2l6ZV90IGxlbiwgc3RydWN0IHN0cmJ1ZiAqZHN0LAorCQkJCQkgICAgaW50IG5vcm1hbGl6aW5nLAorCQkJCQkgICAgY29uc3Qgc3RydWN0IGNoZWNrb3V0X21ldGFkYXRhICptZXRhLAorCQkJCQkgICAgc3RydWN0IGRlbGF5ZWRfY2hlY2tvdXQgKmRjbykKK3sKKwlpbnQgcmV0ID0gMCwgcmV0X2ZpbHRlciA9IDA7CisJc3RydWN0IGNvbnZfYXR0cnMgY2E7CisKKwljb252ZXJ0X2F0dHJzKGlzdGF0ZSwgJmNhLCBwYXRoKTsKKworCXJldCB8PSBpZGVudF90b193b3JrdHJlZShzcmMsIGxlbiwgZHN0LCBjYS5pZGVudCk7CisJaWYgKHJldCkgeworCQlzcmMgPSBkc3QtPmJ1ZjsKKwkJbGVuID0gZHN0LT5sZW47CisJfQorCS8qCisJICogQ1JMRiBjb252ZXJzaW9uIGNhbiBiZSBza2lwcGVkIGlmIG5vcm1hbGl6aW5nLCB1bmxlc3MgdGhlcmUKKwkgKiBpcyBhIHNtdWRnZSBvciBwcm9jZXNzIGZpbHRlciAoZXZlbiBpZiB0aGUgcHJvY2VzcyBmaWx0ZXIgZG9lc24ndAorCSAqIHN1cHBvcnQgc211ZGdlKS4gIFRoZSBmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBDUkxGcy4KKwkgKi8KKwlpZiAoKGNhLmRydiAmJiAoY2EuZHJ2LT5zbXVkZ2UgfHwgY2EuZHJ2LT5wcm9jZXNzKSkgfHwgIW5vcm1hbGl6aW5nKSB7CisJCXJldCB8PSBjcmxmX3RvX3dvcmt0cmVlKHNyYywgbGVuLCBkc3QsIGNhLmNybGZfYWN0aW9uKTsKKwkJaWYgKHJldCkgeworCQkJc3JjID0gZHN0LT5idWY7CisJCQlsZW4gPSBkc3QtPmxlbjsKKwkJfQorCX0KKworCXJldCB8PSBlbmNvZGVfdG9fd29ya3RyZWUocGF0aCwgc3JjLCBsZW4sIGRzdCwgY2Eud29ya2luZ190cmVlX2VuY29kaW5nKTsKKwlpZiAocmV0KSB7CisJCXNyYyA9IGRzdC0+YnVmOworCQlsZW4gPSBkc3QtPmxlbjsKKwl9CisKKwlyZXRfZmlsdGVyID0gYXBwbHlfZmlsdGVyKAorCQlwYXRoLCBzcmMsIGxlbiwgLTEsIGRzdCwgY2EuZHJ2LCBDQVBfU01VREdFLCBtZXRhLCBkY28pOworCWlmICghcmV0X2ZpbHRlciAmJiBjYS5kcnYgJiYgY2EuZHJ2LT5yZXF1aXJlZCkKKwkJZGllKF8oIiVzOiBzbXVkZ2UgZmlsdGVyICVzIGZhaWxlZCIpLCBwYXRoLCBjYS5kcnYtPm5hbWUpOworCisJcmV0dXJuIHJldCB8IHJldF9maWx0ZXI7Cit9CisKK2ludCBhc3luY19jb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywKKwkJCQkgIHNpemVfdCBsZW4sIHN0cnVjdCBzdHJidWYgKmRzdCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBjaGVja291dF9tZXRhZGF0YSAqbWV0YSwKKwkJCQkgIHZvaWQgKmRjbykKK3sKKwlyZXR1cm4gY29udmVydF90b193b3JraW5nX3RyZWVfaW50ZXJuYWwoaXN0YXRlLCBwYXRoLCBzcmMsIGxlbiwgZHN0LCAwLCBtZXRhLCBkY28pOworfQorCitpbnQgY29udmVydF90b193b3JraW5nX3RyZWUoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICAgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLAorCQkJICAgIHNpemVfdCBsZW4sIHN0cnVjdCBzdHJidWYgKmRzdCwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgY2hlY2tvdXRfbWV0YWRhdGEgKm1ldGEpCit7CisJcmV0dXJuIGNvbnZlcnRfdG9fd29ya2luZ190cmVlX2ludGVybmFsKGlzdGF0ZSwgcGF0aCwgc3JjLCBsZW4sIGRzdCwgMCwgbWV0YSwgTlVMTCk7Cit9CisKK2ludCByZW5vcm1hbGl6ZV9idWZmZXIoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgICAgICBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sIHN0cnVjdCBzdHJidWYgKmRzdCkKK3sKKwlpbnQgcmV0ID0gY29udmVydF90b193b3JraW5nX3RyZWVfaW50ZXJuYWwoaXN0YXRlLCBwYXRoLCBzcmMsIGxlbiwgZHN0LCAxLCBOVUxMLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCXNyYyA9IGRzdC0+YnVmOworCQlsZW4gPSBkc3QtPmxlbjsKKwl9CisJcmV0dXJuIHJldCB8IGNvbnZlcnRfdG9fZ2l0KGlzdGF0ZSwgcGF0aCwgc3JjLCBsZW4sIGRzdCwgQ09OVl9FT0xfUkVOT1JNQUxJWkUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTdHJlYW1pbmcgY29udmVyc2lvbiBzdXBwb3J0CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIGludCAoKmZpbHRlcl9mbikoc3RydWN0IHN0cmVhbV9maWx0ZXIgKiwKKwkJCSBjb25zdCBjaGFyICppbnB1dCwgc2l6ZV90ICppc2l6ZV9wLAorCQkJIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvc2l6ZV9wKTsKK3R5cGVkZWYgdm9pZCAoKmZyZWVfZm4pKHN0cnVjdCBzdHJlYW1fZmlsdGVyICopOworCitzdHJ1Y3Qgc3RyZWFtX2ZpbHRlcl92dGJsIHsKKwlmaWx0ZXJfZm4gZmlsdGVyOworCWZyZWVfZm4gZnJlZTsKK307CisKK3N0cnVjdCBzdHJlYW1fZmlsdGVyIHsKKwlzdHJ1Y3Qgc3RyZWFtX2ZpbHRlcl92dGJsICp2dGJsOworfTsKKworc3RhdGljIGludCBudWxsX2ZpbHRlcl9mbihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyLAorCQkJICBjb25zdCBjaGFyICppbnB1dCwgc2l6ZV90ICppc2l6ZV9wLAorCQkJICBjaGFyICpvdXRwdXQsIHNpemVfdCAqb3NpemVfcCkKK3sKKwlzaXplX3QgY291bnQ7CisKKwlpZiAoIWlucHV0KQorCQlyZXR1cm4gMDsgLyogd2UgZG8gbm90IGtlZXAgYW55IHN0YXRlcyAqLworCWNvdW50ID0gKmlzaXplX3A7CisJaWYgKCpvc2l6ZV9wIDwgY291bnQpCisJCWNvdW50ID0gKm9zaXplX3A7CisJaWYgKGNvdW50KSB7CisJCW1lbW1vdmUob3V0cHV0LCBpbnB1dCwgY291bnQpOworCQkqaXNpemVfcCAtPSBjb3VudDsKKwkJKm9zaXplX3AgLT0gY291bnQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBudWxsX2ZyZWVfZm4oc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlcikKK3sKKwk7IC8qIG5vdGhpbmcgLS0gbnVsbCBpbnN0YW5jZXMgYXJlIHNoYXJlZCAqLworfQorCitzdGF0aWMgc3RydWN0IHN0cmVhbV9maWx0ZXJfdnRibCBudWxsX3Z0YmwgPSB7CisJbnVsbF9maWx0ZXJfZm4sCisJbnVsbF9mcmVlX2ZuLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHJlYW1fZmlsdGVyIG51bGxfZmlsdGVyX3NpbmdsZXRvbiA9IHsKKwkmbnVsbF92dGJsLAorfTsKKworaW50IGlzX251bGxfc3RyZWFtX2ZpbHRlcihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyKQoreworCXJldHVybiBmaWx0ZXIgPT0gJm51bGxfZmlsdGVyX3NpbmdsZXRvbjsKK30KKworCisvKgorICogTEYtdG8tQ1JMRiBmaWx0ZXIKKyAqLworCitzdHJ1Y3QgbGZfdG9fY3JsZl9maWx0ZXIgeworCXN0cnVjdCBzdHJlYW1fZmlsdGVyIGZpbHRlcjsKKwl1bnNpZ25lZCBoYXNfaGVsZDoxOworCWNoYXIgaGVsZDsKK307CisKK3N0YXRpYyBpbnQgbGZfdG9fY3JsZl9maWx0ZXJfZm4oc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciwKKwkJCQljb25zdCBjaGFyICppbnB1dCwgc2l6ZV90ICppc2l6ZV9wLAorCQkJCWNoYXIgKm91dHB1dCwgc2l6ZV90ICpvc2l6ZV9wKQoreworCXNpemVfdCBjb3VudCwgbyA9IDA7CisJc3RydWN0IGxmX3RvX2NybGZfZmlsdGVyICpsZl90b19jcmxmID0gKHN0cnVjdCBsZl90b19jcmxmX2ZpbHRlciAqKWZpbHRlcjsKKworCS8qCisJICogV2UgbWF5IGJlIGhvbGRpbmcgb250byB0aGUgQ1IgdG8gc2VlIGlmIGl0IGlzIGZvbGxvd2VkIGJ5IGEKKwkgKiBMRiwgaW4gd2hpY2ggY2FzZSB3ZSB3b3VsZCBuZWVkIHRvIGdvIHRvIHRoZSBtYWluIGxvb3AuCisJICogT3RoZXJ3aXNlLCBqdXN0IGVtaXQgaXQgdG8gdGhlIG91dHB1dCBzdHJlYW0uCisJICovCisJaWYgKGxmX3RvX2NybGYtPmhhc19oZWxkICYmIChsZl90b19jcmxmLT5oZWxkICE9ICdccicgfHwgIWlucHV0KSkgeworCQlvdXRwdXRbbysrXSA9IGxmX3RvX2NybGYtPmhlbGQ7CisJCWxmX3RvX2NybGYtPmhhc19oZWxkID0gMDsKKwl9CisKKwkvKiBXZSBhcmUgdG9sZCB0byBkcmFpbiAqLworCWlmICghaW5wdXQpIHsKKwkJKm9zaXplX3AgLT0gbzsKKwkJcmV0dXJuIDA7CisJfQorCisJY291bnQgPSAqaXNpemVfcDsKKwlpZiAoY291bnQgfHwgbGZfdG9fY3JsZi0+aGFzX2hlbGQpIHsKKwkJc2l6ZV90IGk7CisJCWludCB3YXNfY3IgPSAwOworCisJCWlmIChsZl90b19jcmxmLT5oYXNfaGVsZCkgeworCQkJd2FzX2NyID0gMTsKKwkJCWxmX3RvX2NybGYtPmhhc19oZWxkID0gMDsKKwkJfQorCisJCWZvciAoaSA9IDA7IG8gPCAqb3NpemVfcCAmJiBpIDwgY291bnQ7IGkrKykgeworCQkJY2hhciBjaCA9IGlucHV0W2ldOworCisJCQlpZiAoY2ggPT0gJ1xuJykgeworCQkJCW91dHB1dFtvKytdID0gJ1xyJzsKKwkJCX0gZWxzZSBpZiAod2FzX2NyKSB7CisJCQkJLyoKKwkJCQkgKiBQcmV2aW91cyByb3VuZCBzYXcgQ1IgYW5kIGl0IGlzIG5vdCBmb2xsb3dlZAorCQkJCSAqIGJ5IGEgTEY7IGVtaXQgdGhlIENSIGJlZm9yZSBwcm9jZXNzaW5nIHRoZQorCQkJCSAqIGN1cnJlbnQgY2hhcmFjdGVyLgorCQkJCSAqLworCQkJCW91dHB1dFtvKytdID0gJ1xyJzsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFdlIG1heSBoYXZlIGNvbnN1bWVkIHRoZSBsYXN0IG91dHB1dCBzbG90LAorCQkJICogaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGJyZWFrIG91dCBvZiB0aGlzCisJCQkgKiBsb29wOyBob2xkIHRoZSBjdXJyZW50IGNoYXJhY3RlciBiZWZvcmUKKwkJCSAqIHJldHVybmluZy4KKwkJCSAqLworCQkJaWYgKCpvc2l6ZV9wIDw9IG8pIHsKKwkJCQlsZl90b19jcmxmLT5oYXNfaGVsZCA9IDE7CisJCQkJbGZfdG9fY3JsZi0+aGVsZCA9IGNoOworCQkJCWNvbnRpbnVlOyAvKiBicmVhayBidXQgaW5jcmVtZW50IGkgKi8KKwkJCX0KKworCQkJaWYgKGNoID09ICdccicpIHsKKwkJCQl3YXNfY3IgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQl3YXNfY3IgPSAwOworCQkJb3V0cHV0W28rK10gPSBjaDsKKwkJfQorCisJCSpvc2l6ZV9wIC09IG87CisJCSppc2l6ZV9wIC09IGk7CisKKwkJaWYgKCFsZl90b19jcmxmLT5oYXNfaGVsZCAmJiB3YXNfY3IpIHsKKwkJCWxmX3RvX2NybGYtPmhhc19oZWxkID0gMTsKKwkJCWxmX3RvX2NybGYtPmhlbGQgPSAnXHInOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsZl90b19jcmxmX2ZyZWVfZm4oc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlcikKK3sKKwlmcmVlKGZpbHRlcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlcl92dGJsIGxmX3RvX2NybGZfdnRibCA9IHsKKwlsZl90b19jcmxmX2ZpbHRlcl9mbiwKKwlsZl90b19jcmxmX2ZyZWVfZm4sCit9OworCitzdGF0aWMgc3RydWN0IHN0cmVhbV9maWx0ZXIgKmxmX3RvX2NybGZfZmlsdGVyKHZvaWQpCit7CisJc3RydWN0IGxmX3RvX2NybGZfZmlsdGVyICpsZl90b19jcmxmID0geGNhbGxvYygxLCBzaXplb2YoKmxmX3RvX2NybGYpKTsKKworCWxmX3RvX2NybGYtPmZpbHRlci52dGJsID0gJmxmX3RvX2NybGZfdnRibDsKKwlyZXR1cm4gKHN0cnVjdCBzdHJlYW1fZmlsdGVyICopbGZfdG9fY3JsZjsKK30KKworLyoKKyAqIENhc2NhZGUgZmlsdGVyCisgKi8KKyNkZWZpbmUgRklMVEVSX0JVRkZFUiAxMDI0CitzdHJ1Y3QgY2FzY2FkZV9maWx0ZXIgeworCXN0cnVjdCBzdHJlYW1fZmlsdGVyIGZpbHRlcjsKKwlzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqb25lOworCXN0cnVjdCBzdHJlYW1fZmlsdGVyICp0d287CisJY2hhciBidWZbRklMVEVSX0JVRkZFUl07CisJaW50IGVuZCwgcHRyOworfTsKKworc3RhdGljIGludCBjYXNjYWRlX2ZpbHRlcl9mbihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyLAorCQkJICAgICBjb25zdCBjaGFyICppbnB1dCwgc2l6ZV90ICppc2l6ZV9wLAorCQkJICAgICBjaGFyICpvdXRwdXQsIHNpemVfdCAqb3NpemVfcCkKK3sKKwlzdHJ1Y3QgY2FzY2FkZV9maWx0ZXIgKmNhcyA9IChzdHJ1Y3QgY2FzY2FkZV9maWx0ZXIgKikgZmlsdGVyOworCXNpemVfdCBmaWxsZWQgPSAwOworCXNpemVfdCBzeiA9ICpvc2l6ZV9wOworCXNpemVfdCB0b19mZWVkLCByZW1haW5pbmc7CisKKwkvKgorCSAqIGlucHV0IC0tIChvbmUpIC0tPiBidWYgLS0gKHR3bykgLS0+IG91dHB1dAorCSAqLworCXdoaWxlIChmaWxsZWQgPCBzeikgeworCQlyZW1haW5pbmcgPSBzeiAtIGZpbGxlZDsKKworCQkvKiBkbyB3ZSBhbHJlYWR5IGhhdmUgc29tZXRoaW5nIHRvIGZlZWQgdHdvIHdpdGg/ICovCisJCWlmIChjYXMtPnB0ciA8IGNhcy0+ZW5kKSB7CisJCQl0b19mZWVkID0gY2FzLT5lbmQgLSBjYXMtPnB0cjsKKwkJCWlmIChzdHJlYW1fZmlsdGVyKGNhcy0+dHdvLAorCQkJCQkgIGNhcy0+YnVmICsgY2FzLT5wdHIsICZ0b19mZWVkLAorCQkJCQkgIG91dHB1dCArIGZpbGxlZCwgJnJlbWFpbmluZykpCisJCQkJcmV0dXJuIC0xOworCQkJY2FzLT5wdHIgKz0gKGNhcy0+ZW5kIC0gY2FzLT5wdHIpIC0gdG9fZmVlZDsKKwkJCWZpbGxlZCA9IHN6IC0gcmVtYWluaW5nOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBmZWVkIG9uZSBmcm9tIHVwc3RyZWFtIGFuZCBoYXZlIGl0IGVtaXQgaW50byBvdXIgYnVmZmVyICovCisJCXRvX2ZlZWQgPSBpbnB1dCA/ICppc2l6ZV9wIDogMDsKKwkJaWYgKGlucHV0ICYmICF0b19mZWVkKQorCQkJYnJlYWs7CisJCXJlbWFpbmluZyA9IHNpemVvZihjYXMtPmJ1Zik7CisJCWlmIChzdHJlYW1fZmlsdGVyKGNhcy0+b25lLAorCQkJCSAgaW5wdXQsICZ0b19mZWVkLAorCQkJCSAgY2FzLT5idWYsICZyZW1haW5pbmcpKQorCQkJcmV0dXJuIC0xOworCQljYXMtPmVuZCA9IHNpemVvZihjYXMtPmJ1ZikgLSByZW1haW5pbmc7CisJCWNhcy0+cHRyID0gMDsKKwkJaWYgKGlucHV0KSB7CisJCQlzaXplX3QgZmVkID0gKmlzaXplX3AgLSB0b19mZWVkOworCQkJKmlzaXplX3AgLT0gZmVkOworCQkJaW5wdXQgKz0gZmVkOworCQl9CisKKwkJLyogZG8gd2Uga25vdyB0aGF0IHdlIGRyYWluZWQgb25lIGNvbXBsZXRlbHk/ICovCisJCWlmIChpbnB1dCB8fCBjYXMtPmVuZCkKKwkJCWNvbnRpbnVlOworCisJCS8qIHRlbGwgdHdvIHRvIGRyYWluOyB3ZSBoYXZlIG5vdGhpbmcgbW9yZSB0byBnaXZlIGl0ICovCisJCXRvX2ZlZWQgPSAwOworCQlyZW1haW5pbmcgPSBzeiAtIGZpbGxlZDsKKwkJaWYgKHN0cmVhbV9maWx0ZXIoY2FzLT50d28sCisJCQkJICBOVUxMLCAmdG9fZmVlZCwKKwkJCQkgIG91dHB1dCArIGZpbGxlZCwgJnJlbWFpbmluZykpCisJCQlyZXR1cm4gLTE7CisJCWlmIChyZW1haW5pbmcgPT0gKHN6IC0gZmlsbGVkKSkKKwkJCWJyZWFrOyAvKiBjb21wbGV0ZWx5IGRyYWluZWQgdHdvICovCisJCWZpbGxlZCA9IHN6IC0gcmVtYWluaW5nOworCX0KKwkqb3NpemVfcCAtPSBmaWxsZWQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNhc2NhZGVfZnJlZV9mbihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyKQoreworCXN0cnVjdCBjYXNjYWRlX2ZpbHRlciAqY2FzID0gKHN0cnVjdCBjYXNjYWRlX2ZpbHRlciAqKWZpbHRlcjsKKwlmcmVlX3N0cmVhbV9maWx0ZXIoY2FzLT5vbmUpOworCWZyZWVfc3RyZWFtX2ZpbHRlcihjYXMtPnR3byk7CisJZnJlZShmaWx0ZXIpOworfQorCitzdGF0aWMgc3RydWN0IHN0cmVhbV9maWx0ZXJfdnRibCBjYXNjYWRlX3Z0YmwgPSB7CisJY2FzY2FkZV9maWx0ZXJfZm4sCisJY2FzY2FkZV9mcmVlX2ZuLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHJlYW1fZmlsdGVyICpjYXNjYWRlX2ZpbHRlcihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqb25lLAorCQkJCQkgICAgc3RydWN0IHN0cmVhbV9maWx0ZXIgKnR3bykKK3sKKwlzdHJ1Y3QgY2FzY2FkZV9maWx0ZXIgKmNhc2NhZGU7CisKKwlpZiAoIW9uZSB8fCBpc19udWxsX3N0cmVhbV9maWx0ZXIob25lKSkKKwkJcmV0dXJuIHR3bzsKKwlpZiAoIXR3byB8fCBpc19udWxsX3N0cmVhbV9maWx0ZXIodHdvKSkKKwkJcmV0dXJuIG9uZTsKKworCWNhc2NhZGUgPSB4bWFsbG9jKHNpemVvZigqY2FzY2FkZSkpOworCWNhc2NhZGUtPm9uZSA9IG9uZTsKKwljYXNjYWRlLT50d28gPSB0d287CisJY2FzY2FkZS0+ZW5kID0gY2FzY2FkZS0+cHRyID0gMDsKKwljYXNjYWRlLT5maWx0ZXIudnRibCA9ICZjYXNjYWRlX3Z0Ymw7CisJcmV0dXJuIChzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqKWNhc2NhZGU7Cit9CisKKy8qCisgKiBpZGVudCBmaWx0ZXIKKyAqLworI2RlZmluZSBJREVOVF9EUkFJTklORyAoLTEpCisjZGVmaW5lIElERU5UX1NLSVBQSU5HICgtMikKK3N0cnVjdCBpZGVudF9maWx0ZXIgeworCXN0cnVjdCBzdHJlYW1fZmlsdGVyIGZpbHRlcjsKKwlzdHJ1Y3Qgc3RyYnVmIGxlZnQ7CisJaW50IHN0YXRlOworCWNoYXIgaWRlbnRbR0lUX01BWF9IRVhTWiArIDVdOyAvKiAiOiB4NDAgJCIgKi8KK307CisKK3N0YXRpYyBpbnQgaXNfZm9yZWlnbl9pZGVudChjb25zdCBjaGFyICpzdHIpCit7CisJaW50IGk7CisKKwlpZiAoIXNraXBfcHJlZml4KHN0ciwgIiRJZDogIiwgJnN0cikpCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IHN0cltpXTsgaSsrKSB7CisJCWlmIChpc3NwYWNlKHN0cltpXSkgJiYgc3RyW2krMV0gIT0gJyQnKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpZGVudF9kcmFpbihzdHJ1Y3QgaWRlbnRfZmlsdGVyICppZGVudCwgY2hhciAqKm91dHB1dF9wLCBzaXplX3QgKm9zaXplX3ApCit7CisJc2l6ZV90IHRvX2RyYWluID0gaWRlbnQtPmxlZnQubGVuOworCisJaWYgKCpvc2l6ZV9wIDwgdG9fZHJhaW4pCisJCXRvX2RyYWluID0gKm9zaXplX3A7CisJaWYgKHRvX2RyYWluKSB7CisJCW1lbWNweSgqb3V0cHV0X3AsIGlkZW50LT5sZWZ0LmJ1ZiwgdG9fZHJhaW4pOworCQlzdHJidWZfcmVtb3ZlKCZpZGVudC0+bGVmdCwgMCwgdG9fZHJhaW4pOworCQkqb3V0cHV0X3AgKz0gdG9fZHJhaW47CisJCSpvc2l6ZV9wIC09IHRvX2RyYWluOworCX0KKwlpZiAoIWlkZW50LT5sZWZ0LmxlbikKKwkJaWRlbnQtPnN0YXRlID0gMDsKK30KKworc3RhdGljIGludCBpZGVudF9maWx0ZXJfZm4oc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciwKKwkJCSAgIGNvbnN0IGNoYXIgKmlucHV0LCBzaXplX3QgKmlzaXplX3AsCisJCQkgICBjaGFyICpvdXRwdXQsIHNpemVfdCAqb3NpemVfcCkKK3sKKwlzdHJ1Y3QgaWRlbnRfZmlsdGVyICppZGVudCA9IChzdHJ1Y3QgaWRlbnRfZmlsdGVyICopZmlsdGVyOworCXN0YXRpYyBjb25zdCBjaGFyIGhlYWRbXSA9ICIkSWQiOworCisJaWYgKCFpbnB1dCkgeworCQkvKiBkcmFpbiB1cG9uIGVvZiAqLworCQlzd2l0Y2ggKGlkZW50LT5zdGF0ZSkgeworCQlkZWZhdWx0OgorCQkJc3RyYnVmX2FkZCgmaWRlbnQtPmxlZnQsIGhlYWQsIGlkZW50LT5zdGF0ZSk7CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIElERU5UX1NLSVBQSU5HOgorCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSBJREVOVF9EUkFJTklORzoKKwkJCWlkZW50X2RyYWluKGlkZW50LCAmb3V0cHV0LCBvc2l6ZV9wKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwl3aGlsZSAoKmlzaXplX3AgfHwgKGlkZW50LT5zdGF0ZSA9PSBJREVOVF9EUkFJTklORykpIHsKKwkJaW50IGNoOworCisJCWlmIChpZGVudC0+c3RhdGUgPT0gSURFTlRfRFJBSU5JTkcpIHsKKwkJCWlkZW50X2RyYWluKGlkZW50LCAmb3V0cHV0LCBvc2l6ZV9wKTsKKwkJCWlmICghKm9zaXplX3ApCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNoID0gKihpbnB1dCsrKTsKKwkJKCppc2l6ZV9wKS0tOworCisJCWlmIChpZGVudC0+c3RhdGUgPT0gSURFTlRfU0tJUFBJTkcpIHsKKwkJCS8qCisJCQkgKiBTa2lwcGluZyB1bnRpbCAnJCcgb3IgTEYsIGJ1dCBrZWVwaW5nIHRoZW0KKwkJCSAqIGluIGNhc2UgaXQgaXMgYSBmb3JlaWduIGlkZW50LgorCQkJICovCisJCQlzdHJidWZfYWRkY2goJmlkZW50LT5sZWZ0LCBjaCk7CisJCQlpZiAoY2ggIT0gJ1xuJyAmJiBjaCAhPSAnJCcpCisJCQkJY29udGludWU7CisJCQlpZiAoY2ggPT0gJyQnICYmICFpc19mb3JlaWduX2lkZW50KGlkZW50LT5sZWZ0LmJ1ZikpIHsKKwkJCQlzdHJidWZfc2V0bGVuKCZpZGVudC0+bGVmdCwgc2l6ZW9mKGhlYWQpIC0gMSk7CisJCQkJc3RyYnVmX2FkZHN0cigmaWRlbnQtPmxlZnQsIGlkZW50LT5pZGVudCk7CisJCQl9CisJCQlpZGVudC0+c3RhdGUgPSBJREVOVF9EUkFJTklORzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGlkZW50LT5zdGF0ZSA8IHNpemVvZihoZWFkKSAmJgorCQkgICAgaGVhZFtpZGVudC0+c3RhdGVdID09IGNoKSB7CisJCQlpZGVudC0+c3RhdGUrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGlkZW50LT5zdGF0ZSkKKwkJCXN0cmJ1Zl9hZGQoJmlkZW50LT5sZWZ0LCBoZWFkLCBpZGVudC0+c3RhdGUpOworCQlpZiAoaWRlbnQtPnN0YXRlID09IHNpemVvZihoZWFkKSAtIDEpIHsKKwkJCWlmIChjaCAhPSAnOicgJiYgY2ggIT0gJyQnKSB7CisJCQkJc3RyYnVmX2FkZGNoKCZpZGVudC0+bGVmdCwgY2gpOworCQkJCWlkZW50LT5zdGF0ZSA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChjaCA9PSAnOicpIHsKKwkJCQlzdHJidWZfYWRkY2goJmlkZW50LT5sZWZ0LCBjaCk7CisJCQkJaWRlbnQtPnN0YXRlID0gSURFTlRfU0tJUFBJTkc7CisJCQl9IGVsc2UgeworCQkJCXN0cmJ1Zl9hZGRzdHIoJmlkZW50LT5sZWZ0LCBpZGVudC0+aWRlbnQpOworCQkJCWlkZW50LT5zdGF0ZSA9IElERU5UX0RSQUlOSU5HOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQlzdHJidWZfYWRkY2goJmlkZW50LT5sZWZ0LCBjaCk7CisJCWlkZW50LT5zdGF0ZSA9IElERU5UX0RSQUlOSU5HOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWRlbnRfZnJlZV9mbihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyKQoreworCXN0cnVjdCBpZGVudF9maWx0ZXIgKmlkZW50ID0gKHN0cnVjdCBpZGVudF9maWx0ZXIgKilmaWx0ZXI7CisJc3RyYnVmX3JlbGVhc2UoJmlkZW50LT5sZWZ0KTsKKwlmcmVlKGZpbHRlcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlcl92dGJsIGlkZW50X3Z0YmwgPSB7CisJaWRlbnRfZmlsdGVyX2ZuLAorCWlkZW50X2ZyZWVfZm4sCit9OworCitzdGF0aWMgc3RydWN0IHN0cmVhbV9maWx0ZXIgKmlkZW50X2ZpbHRlcihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IGlkZW50X2ZpbHRlciAqaWRlbnQgPSB4bWFsbG9jKHNpemVvZigqaWRlbnQpKTsKKworCXhzbnByaW50ZihpZGVudC0+aWRlbnQsIHNpemVvZihpZGVudC0+aWRlbnQpLAorCQkgICI6ICVzICQiLCBvaWRfdG9faGV4KG9pZCkpOworCXN0cmJ1Zl9pbml0KCZpZGVudC0+bGVmdCwgMCk7CisJaWRlbnQtPmZpbHRlci52dGJsID0gJmlkZW50X3Z0Ymw7CisJaWRlbnQtPnN0YXRlID0gMDsKKwlyZXR1cm4gKHN0cnVjdCBzdHJlYW1fZmlsdGVyICopaWRlbnQ7Cit9CisKKy8qCisgKiBSZXR1cm4gYW4gYXBwcm9wcmlhdGVseSBjb25zdHJ1Y3RlZCBmaWx0ZXIgZm9yIHRoZSBwYXRoLCBvciBOVUxMIGlmCisgKiB0aGUgY29udGVudHMgY2Fubm90IGJlIGZpbHRlcmVkIHdpdGhvdXQgcmVhZGluZyB0aGUgd2hvbGUgdGhpbmcKKyAqIGluLWNvcmUuCisgKgorICogTm90ZSB0aGF0IHlvdSB3b3VsZCBiZSBjcmF6eSB0byBzZXQgQ1JMRiwgc211ZGdlL2NsZWFuIG9yIGlkZW50IHRvIGEKKyAqIGxhcmdlIGJpbmFyeSBibG9iIHlvdSB3b3VsZCB3YW50IHVzIG5vdCB0byBzbHVycCBpbnRvIHRoZSBtZW1vcnkhCisgKi8KK3N0cnVjdCBzdHJlYW1fZmlsdGVyICpnZXRfc3RyZWFtX2ZpbHRlcihjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkJY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBjb252X2F0dHJzIGNhOworCXN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIgPSBOVUxMOworCisJY29udmVydF9hdHRycyhpc3RhdGUsICZjYSwgcGF0aCk7CisJaWYgKGNhLmRydiAmJiAoY2EuZHJ2LT5wcm9jZXNzIHx8IGNhLmRydi0+c211ZGdlIHx8IGNhLmRydi0+Y2xlYW4pKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChjYS53b3JraW5nX3RyZWVfZW5jb2RpbmcpCisJCXJldHVybiBOVUxMOworCisJaWYgKGNhLmNybGZfYWN0aW9uID09IENSTEZfQVVUTyB8fCBjYS5jcmxmX2FjdGlvbiA9PSBDUkxGX0FVVE9fQ1JMRikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoY2EuaWRlbnQpCisJCWZpbHRlciA9IGlkZW50X2ZpbHRlcihvaWQpOworCisJaWYgKG91dHB1dF9lb2woY2EuY3JsZl9hY3Rpb24pID09IEVPTF9DUkxGKQorCQlmaWx0ZXIgPSBjYXNjYWRlX2ZpbHRlcihmaWx0ZXIsIGxmX3RvX2NybGZfZmlsdGVyKCkpOworCWVsc2UKKwkJZmlsdGVyID0gY2FzY2FkZV9maWx0ZXIoZmlsdGVyLCAmbnVsbF9maWx0ZXJfc2luZ2xldG9uKTsKKworCXJldHVybiBmaWx0ZXI7Cit9CisKK3ZvaWQgZnJlZV9zdHJlYW1fZmlsdGVyKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIpCit7CisJZmlsdGVyLT52dGJsLT5mcmVlKGZpbHRlcik7Cit9CisKK2ludCBzdHJlYW1fZmlsdGVyKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIsCisJCSAgY29uc3QgY2hhciAqaW5wdXQsIHNpemVfdCAqaXNpemVfcCwKKwkJICBjaGFyICpvdXRwdXQsIHNpemVfdCAqb3NpemVfcCkKK3sKKwlyZXR1cm4gZmlsdGVyLT52dGJsLT5maWx0ZXIoZmlsdGVyLCBpbnB1dCwgaXNpemVfcCwgb3V0cHV0LCBvc2l6ZV9wKTsKK30KKwordm9pZCBpbml0X2NoZWNrb3V0X21ldGFkYXRhKHN0cnVjdCBjaGVja291dF9tZXRhZGF0YSAqbWV0YSwgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlaXNoLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmJsb2IpCit7CisJbWVtc2V0KG1ldGEsIDAsIHNpemVvZigqbWV0YSkpOworCWlmIChyZWZuYW1lKQorCQltZXRhLT5yZWZuYW1lID0gcmVmbmFtZTsKKwlpZiAodHJlZWlzaCkKKwkJb2lkY3B5KCZtZXRhLT50cmVlaXNoLCB0cmVlaXNoKTsKKwlpZiAoYmxvYikKKwkJb2lkY3B5KCZtZXRhLT5ibG9iLCBibG9iKTsKK30KKwordm9pZCBjbG9uZV9jaGVja291dF9tZXRhZGF0YShzdHJ1Y3QgY2hlY2tvdXRfbWV0YWRhdGEgKmRzdCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGNoZWNrb3V0X21ldGFkYXRhICpzcmMsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmJsb2IpCit7CisJbWVtY3B5KGRzdCwgc3JjLCBzaXplb2YoKmRzdCkpOworCWlmIChibG9iKQorCQlvaWRjcHkoJmRzdC0+YmxvYiwgYmxvYik7Cit9CmRpZmYgLS1naXQgYS9jb252ZXJ0LmggYi9jb252ZXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI5ZDEwMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnZlcnQuaApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4KKyAqLworI2lmbmRlZiBDT05WRVJUX0gKKyNkZWZpbmUgQ09OVkVSVF9ICisKKyNpbmNsdWRlICJoYXNoLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworc3RydWN0IGluZGV4X3N0YXRlOworc3RydWN0IHN0cmJ1ZjsKKworI2RlZmluZSBDT05WX0VPTF9STkRUUlBfRElFICAgKDE8PDApIC8qIERpZSBpZiBDUkxGIHRvIExGIHRvIENSTEYgaXMgZGlmZmVyZW50ICovCisjZGVmaW5lIENPTlZfRU9MX1JORFRSUF9XQVJOICAoMTw8MSkgLyogV2FybiBpZiBDUkxGIHRvIExGIHRvIENSTEYgaXMgZGlmZmVyZW50ICovCisjZGVmaW5lIENPTlZfRU9MX1JFTk9STUFMSVpFICAoMTw8MikgLyogQ29udmVydCBDUkxGIHRvIExGICovCisjZGVmaW5lIENPTlZfRU9MX0tFRVBfQ1JMRiAgICAoMTw8MykgLyogS2VlcCBDUkxGIGxpbmUgZW5kaW5ncyBhcyBpcyAqLworI2RlZmluZSBDT05WX1dSSVRFX09CSkVDVCAgICAgKDE8PDQpIC8qIENvbnRlbnQgaXMgd3JpdHRlbiB0byB0aGUgaW5kZXggKi8KKworZXh0ZXJuIGludCBnbG9iYWxfY29udl9mbGFnc19lb2w7CisKK2VudW0gYXV0b19jcmxmIHsKKwlBVVRPX0NSTEZfRkFMU0UgPSAwLAorCUFVVE9fQ1JMRl9UUlVFID0gMSwKKwlBVVRPX0NSTEZfSU5QVVQgPSAtMQorfTsKKworZXh0ZXJuIGVudW0gYXV0b19jcmxmIGF1dG9fY3JsZjsKKworZW51bSBlb2wgeworCUVPTF9VTlNFVCwKKwlFT0xfQ1JMRiwKKwlFT0xfTEYsCisjaWZkZWYgTkFUSVZFX0NSTEYKKwlFT0xfTkFUSVZFID0gRU9MX0NSTEYKKyNlbHNlCisJRU9MX05BVElWRSA9IEVPTF9MRgorI2VuZGlmCit9OworCitlbnVtIGNlX2RlbGF5X3N0YXRlIHsKKwlDRV9OT19ERUxBWSA9IDAsCisJQ0VfQ0FOX0RFTEFZID0gMSwKKwlDRV9SRVRSWSA9IDIKK307CisKK3N0cnVjdCBkZWxheWVkX2NoZWNrb3V0IHsKKwkvKgorCSAqIFN0YXRlIG9mIHRoZSBjdXJyZW50bHkgcHJvY2Vzc2VkIGNhY2hlIGVudHJ5LiBJZiB0aGUgc3RhdGUgaXMKKwkgKiBDRV9DQU5fREVMQVksIHRoZW4gdGhlIGZpbHRlciBjYW4gZGVsYXkgdGhlIGN1cnJlbnQgY2FjaGUgZW50cnkuCisJICogSWYgdGhlIHN0YXRlIGlzIENFX1JFVFJZLCB0aGVuIHRoaXMgc2lnbmFscyB0aGUgZmlsdGVyIHRoYXQgdGhlCisJICogY2FjaGUgZW50cnkgd2FzIHJlcXVlc3RlZCBiZWZvcmUuCisJICovCisJZW51bSBjZV9kZWxheV9zdGF0ZSBzdGF0ZTsKKwkvKiBMaXN0IG9mIGZpbHRlciBkcml2ZXJzIHRoYXQgc2lnbmFsZWQgZGVsYXllZCBibG9icy4gKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZmlsdGVyczsKKwkvKiBMaXN0IG9mIGRlbGF5ZWQgYmxvYnMgaWRlbnRpZmllZCBieSB0aGVpciBwYXRoLiAqLworCXN0cnVjdCBzdHJpbmdfbGlzdCBwYXRoczsKK307CisKK3N0cnVjdCBjaGVja291dF9tZXRhZGF0YSB7CisJY29uc3QgY2hhciAqcmVmbmFtZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHRyZWVpc2g7CisJc3RydWN0IG9iamVjdF9pZCBibG9iOworfTsKKworZXh0ZXJuIGVudW0gZW9sIGNvcmVfZW9sOworZXh0ZXJuIGNoYXIgKmNoZWNrX3JvdW5kdHJpcF9lbmNvZGluZzsKK2NvbnN0IGNoYXIgKmdldF9jYWNoZWRfY29udmVydF9zdGF0c19hc2NpaShjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkJICAgY29uc3QgY2hhciAqcGF0aCk7Citjb25zdCBjaGFyICpnZXRfd3RfY29udmVydF9zdGF0c19hc2NpaShjb25zdCBjaGFyICpwYXRoKTsKK2NvbnN0IGNoYXIgKmdldF9jb252ZXJ0X2F0dHJfYXNjaWkoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJICAgY29uc3QgY2hhciAqcGF0aCk7CisKKy8qIHJldHVybnMgMSBpZiAqZHN0IHdhcyB1c2VkICovCitpbnQgY29udmVydF90b19naXQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCSAgIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwKKwkJICAgc3RydWN0IHN0cmJ1ZiAqZHN0LCBpbnQgY29udl9mbGFncyk7CitpbnQgY29udmVydF90b193b3JraW5nX3RyZWUoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICAgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLAorCQkJICAgIHNpemVfdCBsZW4sIHN0cnVjdCBzdHJidWYgKmRzdCwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgY2hlY2tvdXRfbWV0YWRhdGEgKm1ldGEpOworaW50IGFzeW5jX2NvbnZlcnRfdG9fd29ya2luZ190cmVlKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLAorCQkJCSAgc2l6ZV90IGxlbiwgc3RydWN0IHN0cmJ1ZiAqZHN0LAorCQkJCSAgY29uc3Qgc3RydWN0IGNoZWNrb3V0X21ldGFkYXRhICptZXRhLAorCQkJCSAgdm9pZCAqZGNvKTsKK2ludCBhc3luY19xdWVyeV9hdmFpbGFibGVfYmxvYnMoY29uc3QgY2hhciAqY21kLAorCQkJCXN0cnVjdCBzdHJpbmdfbGlzdCAqYXZhaWxhYmxlX3BhdGhzKTsKK2ludCByZW5vcm1hbGl6ZV9idWZmZXIoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCSAgICAgICBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sCisJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICpkc3QpOworc3RhdGljIGlubGluZSBpbnQgd291bGRfY29udmVydF90b19naXQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIGNvbnZlcnRfdG9fZ2l0KGlzdGF0ZSwgcGF0aCwgTlVMTCwgMCwgTlVMTCwgMCk7Cit9CisvKiBQcmVjb25kaXRpb246IHdvdWxkX2NvbnZlcnRfdG9fZ2l0X2ZpbHRlcl9mZChwYXRoKSA9PSB0cnVlICovCit2b2lkIGNvbnZlcnRfdG9fZ2l0X2ZpbHRlcl9mZChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwKKwkJCSAgICAgIHN0cnVjdCBzdHJidWYgKmRzdCwKKwkJCSAgICAgIGludCBjb252X2ZsYWdzKTsKK2ludCB3b3VsZF9jb252ZXJ0X3RvX2dpdF9maWx0ZXJfZmQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJICAgY29uc3QgY2hhciAqcGF0aCk7CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBjaGVja291dCBtZXRhZGF0YSB3aXRoIHRoZSBnaXZlbiB2YWx1ZXMuICBBbnkgYXJndW1lbnQgbWF5IGJlCisgKiBOVUxMIGlmIGl0IGlzIG5vdCBhcHBsaWNhYmxlLiAgVGhlIHRyZWVpc2ggc2hvdWxkIGJlIGEgY29tbWl0IGlmIHRoYXQgaXMKKyAqIGF2YWlsYWJsZSwgYW5kIGEgdHJlZSBvdGhlcndpc2UuCisgKgorICogVGhlIHJlZm5hbWUgaXMgbm90IGNvcGllZCBhbmQgbXVzdCBiZSB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBzdHJ1Y3QuCisgKiBUSGUgb2JqZWN0IElEcyBhcmUgY29waWVkLgorICovCit2b2lkIGluaXRfY2hlY2tvdXRfbWV0YWRhdGEoc3RydWN0IGNoZWNrb3V0X21ldGFkYXRhICptZXRhLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnRyZWVpc2gsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYmxvYik7CisKKy8qIENvcHkgdGhlIG1ldGFkYXRhIGZyb20gc3JjIHRvIGRzdCwgdXBkYXRpbmcgdGhlIGJsb2IuICovCit2b2lkIGNsb25lX2NoZWNrb3V0X21ldGFkYXRhKHN0cnVjdCBjaGVja291dF9tZXRhZGF0YSAqZHN0LAorCQkJICAgICBjb25zdCBzdHJ1Y3QgY2hlY2tvdXRfbWV0YWRhdGEgKnNyYywKKwkJCSAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYmxvYik7CisKKy8qCisgKiBSZXNldCB0aGUgaW50ZXJuYWwgbGlzdCBvZiBhdHRyaWJ1dGVzIHVzZWQgYnkgY29udmVydF90b19naXQgYW5kCisgKiBjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZS4KKyAqLwordm9pZCByZXNldF9wYXJzZWRfYXR0cmlidXRlcyh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU3RyZWFtaW5nIGNvbnZlcnNpb24gc3VwcG9ydAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IHN0cmVhbV9maWx0ZXI7IC8qIG9wYXF1ZSAqLworCitzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZ2V0X3N0cmVhbV9maWx0ZXIoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCWNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKik7Cit2b2lkIGZyZWVfc3RyZWFtX2ZpbHRlcihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqKTsKK2ludCBpc19udWxsX3N0cmVhbV9maWx0ZXIoc3RydWN0IHN0cmVhbV9maWx0ZXIgKik7CisKKy8qCisgKiBVc2UgYXMgbXVjaCBpbnB1dCB1cCB0byAqaXNpemVfcCBhbmQgZmlsbCBvdXRwdXQgdXAgdG8gKm9zaXplX3A7CisgKiB1cGRhdGUgaXNpemVfcCBhbmQgb3NpemVfcCB0byBpbmRpY2F0ZSBob3cgbXVjaCBidWZmZXIgc3BhY2Ugd2FzCisgKiBjb25zdW1lZCBhbmQgZmlsbGVkLiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBub24temVybyBvbiBlcnJvci4KKyAqCisgKiBTb21lIGZpbHRlcnMgbWF5IG5lZWQgdG8gYnVmZmVyIHRoZSBpbnB1dCBhbmQgbG9vay1haGVhZCBpbnNpZGUgaXQKKyAqIHRvIGRlY2lkZSB3aGF0IHRvIG91dHB1dCwgYW5kIHRoZXkgbWF5IGNvbnN1bWUgbW9yZSB0aGFuIHplcm8gYnl0ZXMKKyAqIG9mIGlucHV0IGFuZCBzdGlsbCBub3QgcHJvZHVjZSBhbnkgb3V0cHV0LiBBZnRlciBmZWVkaW5nIGFsbCB0aGUKKyAqIGlucHV0LCBwYXNzIE5VTEwgYXMgaW5wdXQgYW5kIGtlZXAgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0byBsZXQKKyAqIHN1Y2ggZmlsdGVycyBrbm93IHRoZXJlIGlzIG5vIG1vcmUgaW5wdXQgY29taW5nIGFuZCBpdCBpcyB0aW1lIGZvcgorICogdGhlbSB0byBwcm9kdWNlIHRoZSByZW1haW5pbmcgb3V0cHV0IGJhc2VkIG9uIHRoZSBidWZmZXJlZCBpbnB1dC4KKyAqLworaW50IHN0cmVhbV9maWx0ZXIoc3RydWN0IHN0cmVhbV9maWx0ZXIgKiwKKwkJICBjb25zdCBjaGFyICppbnB1dCwgc2l6ZV90ICppc2l6ZV9wLAorCQkgIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvc2l6ZV9wKTsKKworI2VuZGlmIC8qIENPTlZFUlRfSCAqLwpkaWZmIC0tZ2l0IGEvY29weS5jIGIvY29weS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZTZhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3B5LmMKQEAgLTAsMCArMSw2NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK2ludCBjb3B5X2ZkKGludCBpZmQsIGludCBvZmQpCit7CisJd2hpbGUgKDEpIHsKKwkJY2hhciBidWZmZXJbODE5Ml07CisJCXNzaXplX3QgbGVuID0geHJlYWQoaWZkLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwkJaWYgKCFsZW4pCisJCQlicmVhazsKKwkJaWYgKGxlbiA8IDApCisJCQlyZXR1cm4gQ09QWV9SRUFEX0VSUk9SOworCQlpZiAod3JpdGVfaW5fZnVsbChvZmQsIGJ1ZmZlciwgbGVuKSA8IDApCisJCQlyZXR1cm4gQ09QWV9XUklURV9FUlJPUjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29weV90aW1lcyhjb25zdCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3QgdXRpbWJ1ZiB0aW1lczsKKwlpZiAoc3RhdChzcmMsICZzdCkgPCAwKQorCQlyZXR1cm4gLTE7CisJdGltZXMuYWN0aW1lID0gc3Quc3RfYXRpbWU7CisJdGltZXMubW9kdGltZSA9IHN0LnN0X210aW1lOworCWlmICh1dGltZShkc3QsICZ0aW1lcykgPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjb3B5X2ZpbGUoY29uc3QgY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGludCBtb2RlKQoreworCWludCBmZGksIGZkbywgc3RhdHVzOworCisJbW9kZSA9IChtb2RlICYgMDExMSkgPyAwNzc3IDogMDY2NjsKKwlpZiAoKGZkaSA9IG9wZW4oc3JjLCBPX1JET05MWSkpIDwgMCkKKwkJcmV0dXJuIGZkaTsKKwlpZiAoKGZkbyA9IG9wZW4oZHN0LCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIG1vZGUpKSA8IDApIHsKKwkJY2xvc2UoZmRpKTsKKwkJcmV0dXJuIGZkbzsKKwl9CisJc3RhdHVzID0gY29weV9mZChmZGksIGZkbyk7CisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIENPUFlfUkVBRF9FUlJPUjoKKwkJZXJyb3JfZXJybm8oImNvcHktZmQ6IHJlYWQgcmV0dXJuZWQiKTsKKwkJYnJlYWs7CisJY2FzZSBDT1BZX1dSSVRFX0VSUk9SOgorCQllcnJvcl9lcnJubygiY29weS1mZDogd3JpdGUgcmV0dXJuZWQiKTsKKwkJYnJlYWs7CisJfQorCWNsb3NlKGZkaSk7CisJaWYgKGNsb3NlKGZkbykgIT0gMCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKCIlczogY2xvc2UgZXJyb3IiLCBkc3QpOworCisJaWYgKCFzdGF0dXMgJiYgYWRqdXN0X3NoYXJlZF9wZXJtKGRzdCkpCisJCXJldHVybiAtMTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBjb3B5X2ZpbGVfd2l0aF90aW1lKGNvbnN0IGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgbW9kZSkKK3sKKwlpbnQgc3RhdHVzID0gY29weV9maWxlKGRzdCwgc3JjLCBtb2RlKTsKKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuIGNvcHlfdGltZXMoZHN0LCBzcmMpOworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYyBiL2NyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMTI3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYwpAQCAtMCwwICsxLDI5NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKyNpbmNsdWRlICJjcmVkZW50aWFsLmgiCisjaW5jbHVkZSAidW5peC1zb2NrZXQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0cnVjdCBjcmVkZW50aWFsX2NhY2hlX2VudHJ5IHsKKwlzdHJ1Y3QgY3JlZGVudGlhbCBpdGVtOworCXRpbWVzdGFtcF90IGV4cGlyYXRpb247Cit9Oworc3RhdGljIHN0cnVjdCBjcmVkZW50aWFsX2NhY2hlX2VudHJ5ICplbnRyaWVzOworc3RhdGljIGludCBlbnRyaWVzX25yOworc3RhdGljIGludCBlbnRyaWVzX2FsbG9jOworCitzdGF0aWMgdm9pZCBjYWNoZV9jcmVkZW50aWFsKHN0cnVjdCBjcmVkZW50aWFsICpjLCBpbnQgdGltZW91dCkKK3sKKwlzdHJ1Y3QgY3JlZGVudGlhbF9jYWNoZV9lbnRyeSAqZTsKKworCUFMTE9DX0dST1coZW50cmllcywgZW50cmllc19uciArIDEsIGVudHJpZXNfYWxsb2MpOworCWUgPSAmZW50cmllc1tlbnRyaWVzX25yKytdOworCisJLyogdGFrZSBvd25lcnNoaXAgb2YgcG9pbnRlcnMgKi8KKwltZW1jcHkoJmUtPml0ZW0sIGMsIHNpemVvZigqYykpOworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwllLT5leHBpcmF0aW9uID0gdGltZShOVUxMKSArIHRpbWVvdXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3JlZGVudGlhbF9jYWNoZV9lbnRyeSAqbG9va3VwX2NyZWRlbnRpYWwoY29uc3Qgc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGVudHJpZXNfbnI7IGkrKykgeworCQlzdHJ1Y3QgY3JlZGVudGlhbCAqZSA9ICZlbnRyaWVzW2ldLml0ZW07CisJCWlmIChjcmVkZW50aWFsX21hdGNoKGMsIGUpKQorCQkJcmV0dXJuICZlbnRyaWVzW2ldOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2NyZWRlbnRpYWwoY29uc3Qgc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJc3RydWN0IGNyZWRlbnRpYWxfY2FjaGVfZW50cnkgKmU7CisKKwllID0gbG9va3VwX2NyZWRlbnRpYWwoYyk7CisJaWYgKGUpCisJCWUtPmV4cGlyYXRpb24gPSAwOworfQorCitzdGF0aWMgdGltZXN0YW1wX3QgY2hlY2tfZXhwaXJhdGlvbnModm9pZCkKK3sKKwlzdGF0aWMgdGltZXN0YW1wX3Qgd2FpdF9mb3JfZW50cnlfdW50aWw7CisJaW50IGkgPSAwOworCXRpbWVzdGFtcF90IG5vdyA9IHRpbWUoTlVMTCk7CisJdGltZXN0YW1wX3QgbmV4dCA9IFRJTUVfTUFYOworCisJLyoKKwkgKiBJbml0aWFsbHkgZ2l2ZSB0aGUgY2xpZW50IDMwIHNlY29uZHMgdG8gYWN0dWFsbHkgY29udGFjdCB1cworCSAqIGFuZCBzdG9yZSBhIGNyZWRlbnRpYWwgYmVmb3JlIHdlIGRlY2lkZSB0aGVyZSdzIG5vIHBvaW50IGluCisJICoga2VlcGluZyB0aGUgZGFlbW9uIGFyb3VuZC4KKwkgKi8KKwlpZiAoIXdhaXRfZm9yX2VudHJ5X3VudGlsKQorCQl3YWl0X2Zvcl9lbnRyeV91bnRpbCA9IG5vdyArIDMwOworCisJd2hpbGUgKGkgPCBlbnRyaWVzX25yKSB7CisJCWlmIChlbnRyaWVzW2ldLmV4cGlyYXRpb24gPD0gbm93KSB7CisJCQllbnRyaWVzX25yLS07CisJCQljcmVkZW50aWFsX2NsZWFyKCZlbnRyaWVzW2ldLml0ZW0pOworCQkJaWYgKGkgIT0gZW50cmllc19ucikKKwkJCQltZW1jcHkoJmVudHJpZXNbaV0sICZlbnRyaWVzW2VudHJpZXNfbnJdLCBzaXplb2YoKmVudHJpZXMpKTsKKwkJCS8qCisJCQkgKiBTdGljayBhcm91bmQgMzAgc2Vjb25kcyBpbiBjYXNlIGEgbmV3IGNyZWRlbnRpYWwKKwkJCSAqIHNob3dzIHVwIChlLmcuLCBiZWNhdXNlIHdlIGp1c3QgcmVtb3ZlZCBhIGZhaWxlZAorCQkJICogb25lLCBhbmQgd2Ugd2lsbCBzb29uIGdldCB0aGUgY29ycmVjdCBvbmUpLgorCQkJICovCisJCQl3YWl0X2Zvcl9lbnRyeV91bnRpbCA9IG5vdyArIDMwOworCQl9CisJCWVsc2UgeworCQkJaWYgKGVudHJpZXNbaV0uZXhwaXJhdGlvbiA8IG5leHQpCisJCQkJbmV4dCA9IGVudHJpZXNbaV0uZXhwaXJhdGlvbjsKKwkJCWkrKzsKKwkJfQorCX0KKworCWlmICghZW50cmllc19ucikgeworCQlpZiAod2FpdF9mb3JfZW50cnlfdW50aWwgPD0gbm93KQorCQkJcmV0dXJuIDA7CisJCW5leHQgPSB3YWl0X2Zvcl9lbnRyeV91bnRpbDsKKwl9CisKKwlyZXR1cm4gbmV4dCAtIG5vdzsKK30KKworc3RhdGljIGludCByZWFkX3JlcXVlc3QoRklMRSAqZmgsIHN0cnVjdCBjcmVkZW50aWFsICpjLAorCQkJc3RydWN0IHN0cmJ1ZiAqYWN0aW9uLCBpbnQgKnRpbWVvdXQpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgaXRlbSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnA7CisKKwlzdHJidWZfZ2V0bGluZV9sZigmaXRlbSwgZmgpOworCWlmICghc2tpcF9wcmVmaXgoaXRlbS5idWYsICJhY3Rpb249IiwgJnApKQorCQlyZXR1cm4gZXJyb3IoImNsaWVudCBzZW50IGJvZ3VzIGFjdGlvbiBsaW5lOiAlcyIsIGl0ZW0uYnVmKTsKKwlzdHJidWZfYWRkc3RyKGFjdGlvbiwgcCk7CisKKwlzdHJidWZfZ2V0bGluZV9sZigmaXRlbSwgZmgpOworCWlmICghc2tpcF9wcmVmaXgoaXRlbS5idWYsICJ0aW1lb3V0PSIsICZwKSkKKwkJcmV0dXJuIGVycm9yKCJjbGllbnQgc2VudCBib2d1cyB0aW1lb3V0IGxpbmU6ICVzIiwgaXRlbS5idWYpOworCSp0aW1lb3V0ID0gYXRvaShwKTsKKworCWlmIChjcmVkZW50aWFsX3JlYWQoYywgZmgpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZV9vbmVfY2xpZW50KEZJTEUgKmluLCBGSUxFICpvdXQpCit7CisJc3RydWN0IGNyZWRlbnRpYWwgYyA9IENSRURFTlRJQUxfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGFjdGlvbiA9IFNUUkJVRl9JTklUOworCWludCB0aW1lb3V0ID0gLTE7CisKKwlpZiAocmVhZF9yZXF1ZXN0KGluLCAmYywgJmFjdGlvbiwgJnRpbWVvdXQpIDwgMCkKKwkJLyogaWdub3JlIGVycm9yICovIDsKKwllbHNlIGlmICghc3RyY21wKGFjdGlvbi5idWYsICJnZXQiKSkgeworCQlzdHJ1Y3QgY3JlZGVudGlhbF9jYWNoZV9lbnRyeSAqZSA9IGxvb2t1cF9jcmVkZW50aWFsKCZjKTsKKwkJaWYgKGUpIHsKKwkJCWZwcmludGYob3V0LCAidXNlcm5hbWU9JXNcbiIsIGUtPml0ZW0udXNlcm5hbWUpOworCQkJZnByaW50ZihvdXQsICJwYXNzd29yZD0lc1xuIiwgZS0+aXRlbS5wYXNzd29yZCk7CisJCX0KKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhY3Rpb24uYnVmLCAiZXhpdCIpKSB7CisJCS8qCisJCSAqIEl0J3MgaW1wb3J0YW50IHRoYXQgd2UgY2xlYW4gdXAgb3VyIHNvY2tldCBmaXJzdCwgYW5kIHRoZW4KKwkJICogc2lnbmFsIHRoZSBjbGllbnQgb25seSBvbmNlIHdlIGhhdmUgZmluaXNoZWQgdGhlIGNsZWFudXAuCisJCSAqIENhbGxpbmcgZXhpdCgpIGRpcmVjdGx5IGRvZXMgdGhpcywgYmVjYXVzZSB3ZSBjbGVhbiB1cCBpbgorCQkgKiBvdXIgYXRleGl0KCkgaGFuZGxlciwgYW5kIHRoZW4gc2lnbmFsIHRoZSBjbGllbnQgd2hlbiBvdXIKKwkJICogcHJvY2VzcyBhY3R1YWxseSBlbmRzLCB3aGljaCBjbG9zZXMgdGhlIHNvY2tldCBhbmQgZ2l2ZXMKKwkJICogdGhlbSBFT0YuCisJCSAqLworCQlleGl0KDApOworCX0KKwllbHNlIGlmICghc3RyY21wKGFjdGlvbi5idWYsICJlcmFzZSIpKQorCQlyZW1vdmVfY3JlZGVudGlhbCgmYyk7CisJZWxzZSBpZiAoIXN0cmNtcChhY3Rpb24uYnVmLCAic3RvcmUiKSkgeworCQlpZiAodGltZW91dCA8IDApCisJCQl3YXJuaW5nKCJjYWNoZSBjbGllbnQgZGlkbid0IHNwZWNpZnkgYSB0aW1lb3V0Iik7CisJCWVsc2UgaWYgKCFjLnVzZXJuYW1lIHx8ICFjLnBhc3N3b3JkKQorCQkJd2FybmluZygiY2FjaGUgY2xpZW50IGdhdmUgdXMgYSBwYXJ0aWFsIGNyZWRlbnRpYWwiKTsKKwkJZWxzZSB7CisJCQlyZW1vdmVfY3JlZGVudGlhbCgmYyk7CisJCQljYWNoZV9jcmVkZW50aWFsKCZjLCB0aW1lb3V0KTsKKwkJfQorCX0KKwllbHNlCisJCXdhcm5pbmcoImNhY2hlIGNsaWVudCBzZW50IHVua25vd24gYWN0aW9uOiAlcyIsIGFjdGlvbi5idWYpOworCisJY3JlZGVudGlhbF9jbGVhcigmYyk7CisJc3RyYnVmX3JlbGVhc2UoJmFjdGlvbik7Cit9CisKK3N0YXRpYyBpbnQgc2VydmVfY2FjaGVfbG9vcChpbnQgZmQpCit7CisJc3RydWN0IHBvbGxmZCBwZmQ7CisJdGltZXN0YW1wX3Qgd2FrZXVwOworCisJd2FrZXVwID0gY2hlY2tfZXhwaXJhdGlvbnMoKTsKKwlpZiAoIXdha2V1cCkKKwkJcmV0dXJuIDA7CisKKwlwZmQuZmQgPSBmZDsKKwlwZmQuZXZlbnRzID0gUE9MTElOOworCWlmIChwb2xsKCZwZmQsIDEsIDEwMDAgKiB3YWtldXApIDwgMCkgeworCQlpZiAoZXJybm8gIT0gRUlOVFIpCisJCQlkaWVfZXJybm8oInBvbGwgZmFpbGVkIik7CisJCXJldHVybiAxOworCX0KKworCWlmIChwZmQucmV2ZW50cyAmIFBPTExJTikgeworCQlpbnQgY2xpZW50LCBjbGllbnQyOworCQlGSUxFICppbiwgKm91dDsKKworCQljbGllbnQgPSBhY2NlcHQoZmQsIE5VTEwsIE5VTEwpOworCQlpZiAoY2xpZW50IDwgMCkgeworCQkJd2FybmluZ19lcnJubygiYWNjZXB0IGZhaWxlZCIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJY2xpZW50MiA9IGR1cChjbGllbnQpOworCQlpZiAoY2xpZW50MiA8IDApIHsKKwkJCXdhcm5pbmdfZXJybm8oImR1cCBmYWlsZWQiKTsKKwkJCWNsb3NlKGNsaWVudCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWluID0geGZkb3BlbihjbGllbnQsICJyIik7CisJCW91dCA9IHhmZG9wZW4oY2xpZW50MiwgInciKTsKKwkJc2VydmVfb25lX2NsaWVudChpbiwgb3V0KTsKKwkJZmNsb3NlKGluKTsKKwkJZmNsb3NlKG91dCk7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZV9jYWNoZShjb25zdCBjaGFyICpzb2NrZXRfcGF0aCwgaW50IGRlYnVnKQoreworCWludCBmZDsKKworCWZkID0gdW5peF9zdHJlYW1fbGlzdGVuKHNvY2tldF9wYXRoKTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBiaW5kIHRvICclcyciLCBzb2NrZXRfcGF0aCk7CisKKwlwcmludGYoIm9rXG4iKTsKKwlmY2xvc2Uoc3Rkb3V0KTsKKwlpZiAoIWRlYnVnKSB7CisJCWlmICghZnJlb3BlbigiL2Rldi9udWxsIiwgInciLCBzdGRlcnIpKQorCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gcG9pbnQgc3RkZXJyIHRvIC9kZXYvbnVsbCIpOworCX0KKworCXdoaWxlIChzZXJ2ZV9jYWNoZV9sb29wKGZkKSkKKwkJOyAvKiBub3RoaW5nICovCisKKwljbG9zZShmZCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHBlcm1pc3Npb25zX2FkdmljZVtdID0gTl8oCisiVGhlIHBlcm1pc3Npb25zIG9uIHlvdXIgc29ja2V0IGRpcmVjdG9yeSBhcmUgdG9vIGxvb3NlOyBvdGhlclxuIgorInVzZXJzIG1heSBiZSBhYmxlIHRvIHJlYWQgeW91ciBjYWNoZWQgY3JlZGVudGlhbHMuIENvbnNpZGVyIHJ1bm5pbmc6XG4iCisiXG4iCisiCWNobW9kIDA3MDAgJXMiKTsKK3N0YXRpYyB2b2lkIGluaXRfc29ja2V0X2RpcmVjdG9yeShjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIgKnBhdGhfY29weSA9IHhzdHJkdXAocGF0aCk7CisJY2hhciAqZGlyID0gZGlybmFtZShwYXRoX2NvcHkpOworCisJaWYgKCFzdGF0KGRpciwgJnN0KSkgeworCQlpZiAoc3Quc3RfbW9kZSAmIDA3NykKKwkJCWRpZShfKHBlcm1pc3Npb25zX2FkdmljZSksIGRpcik7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogV2UgbXVzdCBiZSBzdXJlIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IHdpdGggdGhlIGNvcnJlY3QgbW9kZSwKKwkJICogbm90IGp1c3QgY2htb2QgaXQgYWZ0ZXIgdGhlIGZhY3Q7IG90aGVyd2lzZSwgdGhlcmUgaXMgYSByYWNlCisJCSAqIGNvbmRpdGlvbiBpbiB3aGljaCBzb21lYm9keSBjYW4gY2hkaXIgdG8gaXQsIHNsZWVwLCB0aGVuIHRyeSB0byBvcGVuCisJCSAqIG91ciBwcm90ZWN0ZWQgc29ja2V0LgorCQkgKi8KKwkJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoZGlyKSA8IDApCisJCQlkaWVfZXJybm8oInVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICclcyciLCBkaXIpOworCQlpZiAobWtkaXIoZGlyLCAwNzAwKSA8IDApCisJCQlkaWVfZXJybm8oInVuYWJsZSB0byBta2RpciAnJXMnIiwgZGlyKTsKKwl9CisKKwlpZiAoY2hkaXIoZGlyKSkKKwkJLyoKKwkJICogV2UgZG9uJ3QgYWN0dWFsbHkgY2FyZSB3aGF0IG91ciBjd2QgaXM7IHdlIGNoZGlyIGhlcmUganVzdCB0bworCQkgKiBiZSBhIGZyaWVuZGx5IGRhZW1vbiBhbmQgYXZvaWQgdHlpbmcgdXAgb3VyIG9yaWdpbmFsIGN3ZC4KKwkJICogSWYgdGhpcyBmYWlscywgaXQncyBPSyB0byBqdXN0IGNvbnRpbnVlIHdpdGhvdXQgdGhhdCBiZW5lZml0LgorCQkgKi8KKwkJOworCisJZnJlZShwYXRoX2NvcHkpOworfQorCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCB0ZW1wZmlsZSAqc29ja2V0X2ZpbGU7CisJY29uc3QgY2hhciAqc29ja2V0X3BhdGg7CisJaW50IGlnbm9yZV9zaWdodXAgPSAwOworCXN0YXRpYyBjb25zdCBjaGFyICp1c2FnZVtdID0geworCQkiZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbiBbb3B0c10gPHNvY2tldF9wYXRoPiIsCisJCU5VTEwKKwl9OworCWludCBkZWJ1ZyA9IDA7CisJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKDAsICJkZWJ1ZyIsICZkZWJ1ZywKKwkJCSBOXygicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWdfZ2V0X2Jvb2woImNyZWRlbnRpYWxjYWNoZS5pZ25vcmVzaWdodXAiLCAmaWdub3JlX3NpZ2h1cCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCB1c2FnZSwgMCk7CisJc29ja2V0X3BhdGggPSBhcmd2WzBdOworCisJaWYgKCFzb2NrZXRfcGF0aCkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVzYWdlLCBvcHRpb25zKTsKKworCWlmICghaXNfYWJzb2x1dGVfcGF0aChzb2NrZXRfcGF0aCkpCisJCWRpZSgic29ja2V0IGRpcmVjdG9yeSBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGgiKTsKKworCWluaXRfc29ja2V0X2RpcmVjdG9yeShzb2NrZXRfcGF0aCk7CisJc29ja2V0X2ZpbGUgPSByZWdpc3Rlcl90ZW1wZmlsZShzb2NrZXRfcGF0aCk7CisKKwlpZiAoaWdub3JlX3NpZ2h1cCkKKwkJc2lnbmFsKFNJR0hVUCwgU0lHX0lHTik7CisKKwlzZXJ2ZV9jYWNoZShzb2NrZXRfcGF0aCwgZGVidWcpOworCWRlbGV0ZV90ZW1wZmlsZSgmc29ja2V0X2ZpbGUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jcmVkZW50aWFsLWNhY2hlLmMgYi9jcmVkZW50aWFsLWNhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjY2MzYQotLS0gL2Rldi9udWxsCisrKyBiL2NyZWRlbnRpYWwtY2FjaGUuYwpAQCAtMCwwICsxLDEzNiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY3JlZGVudGlhbC5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInVuaXgtc29ja2V0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKworI2RlZmluZSBGTEFHX1NQQVdOIDB4MQorI2RlZmluZSBGTEFHX1JFTEFZIDB4MgorCitzdGF0aWMgaW50IHNlbmRfcmVxdWVzdChjb25zdCBjaGFyICpzb2NrZXQsIGNvbnN0IHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlpbnQgZ290X2RhdGEgPSAwOworCWludCBmZCA9IHVuaXhfc3RyZWFtX2Nvbm5lY3Qoc29ja2V0KTsKKworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBvdXQtPmJ1Ziwgb3V0LT5sZW4pIDwgMCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gd3JpdGUgdG8gY2FjaGUgZGFlbW9uIik7CisJc2h1dGRvd24oZmQsIFNIVVRfV1IpOworCisJd2hpbGUgKDEpIHsKKwkJY2hhciBpblsxMDI0XTsKKwkJaW50IHI7CisKKwkJciA9IHJlYWRfaW5fZnVsbChmZCwgaW4sIHNpemVvZihpbikpOworCQlpZiAociA9PSAwIHx8IChyIDwgMCAmJiBlcnJubyA9PSBFQ09OTlJFU0VUKSkKKwkJCWJyZWFrOworCQlpZiAociA8IDApCisJCQlkaWVfZXJybm8oInJlYWQgZXJyb3IgZnJvbSBjYWNoZSBkYWVtb24iKTsKKwkJd3JpdGVfb3JfZGllKDEsIGluLCByKTsKKwkJZ290X2RhdGEgPSAxOworCX0KKwljbG9zZShmZCk7CisJcmV0dXJuIGdvdF9kYXRhOworfQorCitzdGF0aWMgdm9pZCBzcGF3bl9kYWVtb24oY29uc3QgY2hhciAqc29ja2V0KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGRhZW1vbiA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICphcmd2W10gPSB7IE5VTEwsIE5VTEwsIE5VTEwgfTsKKwljaGFyIGJ1ZlsxMjhdOworCWludCByOworCisJYXJndlswXSA9ICJnaXQtY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uIjsKKwlhcmd2WzFdID0gc29ja2V0OworCWRhZW1vbi5hcmd2ID0gYXJndjsKKwlkYWVtb24ubm9fc3RkaW4gPSAxOworCWRhZW1vbi5vdXQgPSAtMTsKKworCWlmIChzdGFydF9jb21tYW5kKCZkYWVtb24pKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBzdGFydCBjYWNoZSBkYWVtb24iKTsKKwlyID0gcmVhZF9pbl9mdWxsKGRhZW1vbi5vdXQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlmIChyIDwgMCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gcmVhZCByZXN1bHQgY29kZSBmcm9tIGNhY2hlIGRhZW1vbiIpOworCWlmIChyICE9IDMgfHwgbWVtY21wKGJ1ZiwgIm9rXG4iLCAzKSkKKwkJZGllKCJjYWNoZSBkYWVtb24gZGlkIG5vdCBzdGFydDogJS4qcyIsIHIsIGJ1Zik7CisJY2xvc2UoZGFlbW9uLm91dCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2NhY2hlKGNvbnN0IGNoYXIgKnNvY2tldCwgY29uc3QgY2hhciAqYWN0aW9uLCBpbnQgdGltZW91dCwKKwkJICAgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICJhY3Rpb249JXNcbiIsIGFjdGlvbik7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgInRpbWVvdXQ9JWRcbiIsIHRpbWVvdXQpOworCWlmIChmbGFncyAmIEZMQUdfUkVMQVkpIHsKKwkJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDApIDwgMCkKKwkJCWRpZV9lcnJubygidW5hYmxlIHRvIHJlbGF5IGNyZWRlbnRpYWwiKTsKKwl9CisKKwlpZiAoc2VuZF9yZXF1ZXN0KHNvY2tldCwgJmJ1ZikgPCAwKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQgJiYgZXJybm8gIT0gRUNPTk5SRUZVU0VEKQorCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY29ubmVjdCB0byBjYWNoZSBkYWVtb24iKTsKKwkJaWYgKGZsYWdzICYgRkxBR19TUEFXTikgeworCQkJc3Bhd25fZGFlbW9uKHNvY2tldCk7CisJCQlpZiAoc2VuZF9yZXF1ZXN0KHNvY2tldCwgJmJ1ZikgPCAwKQorCQkJCWRpZV9lcnJubygidW5hYmxlIHRvIGNvbm5lY3QgdG8gY2FjaGUgZGFlbW9uIik7CisJCX0KKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfc29ja2V0X3BhdGgodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzYjsKKwljaGFyICpvbGRfZGlyLCAqc29ja2V0OworCW9sZF9kaXIgPSBleHBhbmRfdXNlcl9wYXRoKCJ+Ly5naXQtY3JlZGVudGlhbC1jYWNoZSIsIDApOworCWlmIChvbGRfZGlyICYmICFzdGF0KG9sZF9kaXIsICZzYikgJiYgU19JU0RJUihzYi5zdF9tb2RlKSkKKwkJc29ja2V0ID0geHN0cmZtdCgiJXMvc29ja2V0Iiwgb2xkX2Rpcik7CisJZWxzZQorCQlzb2NrZXQgPSB4ZGdfY2FjaGVfaG9tZSgiY3JlZGVudGlhbC9zb2NrZXQiKTsKKwlmcmVlKG9sZF9kaXIpOworCXJldHVybiBzb2NrZXQ7Cit9CisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY2hhciAqc29ja2V0X3BhdGggPSBOVUxMOworCWludCB0aW1lb3V0ID0gOTAwOworCWNvbnN0IGNoYXIgKm9wOworCWNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZVtdID0geworCQkiZ2l0IGNyZWRlbnRpYWwtY2FjaGUgWzxvcHRpb25zPl0gPGFjdGlvbj4iLAorCQlOVUxMCisJfTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0lOVEVHRVIoMCwgInRpbWVvdXQiLCAmdGltZW91dCwKKwkJCSAgICAibnVtYmVyIG9mIHNlY29uZHMgdG8gY2FjaGUgY3JlZGVudGlhbHMiKSwKKwkJT1BUX1NUUklORygwLCAic29ja2V0IiwgJnNvY2tldF9wYXRoLCAicGF0aCIsCisJCQkgICAicGF0aCBvZiBjYWNoZS1kYWVtb24gc29ja2V0IiksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCB1c2FnZSwgMCk7CisJaWYgKCFhcmdjKQorCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2UsIG9wdGlvbnMpOworCW9wID0gYXJndlswXTsKKworCWlmICghc29ja2V0X3BhdGgpCisJCXNvY2tldF9wYXRoID0gZ2V0X3NvY2tldF9wYXRoKCk7CisJaWYgKCFzb2NrZXRfcGF0aCkKKwkJZGllKCJ1bmFibGUgdG8gZmluZCBhIHN1aXRhYmxlIHNvY2tldCBwYXRoOyB1c2UgLS1zb2NrZXQiKTsKKworCWlmICghc3RyY21wKG9wLCAiZXhpdCIpKQorCQlkb19jYWNoZShzb2NrZXRfcGF0aCwgb3AsIHRpbWVvdXQsIDApOworCWVsc2UgaWYgKCFzdHJjbXAob3AsICJnZXQiKSB8fCAhc3RyY21wKG9wLCAiZXJhc2UiKSkKKwkJZG9fY2FjaGUoc29ja2V0X3BhdGgsIG9wLCB0aW1lb3V0LCBGTEFHX1JFTEFZKTsKKwllbHNlIGlmICghc3RyY21wKG9wLCAic3RvcmUiKSkKKwkJZG9fY2FjaGUoc29ja2V0X3BhdGgsIG9wLCB0aW1lb3V0LCBGTEFHX1JFTEFZfEZMQUdfU1BBV04pOworCWVsc2UKKwkJOyAvKiBpZ25vcmUgdW5rbm93biBvcGVyYXRpb24gKi8KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3JlZGVudGlhbC1zdG9yZS5jIGIvY3JlZGVudGlhbC1zdG9yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NGU3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9jcmVkZW50aWFsLXN0b3JlLmMKQEAgLTAsMCArMSwxOTUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiY3JlZGVudGlhbC5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBjcmVkZW50aWFsX2xvY2s7CisKK3N0YXRpYyBpbnQgcGFyc2VfY3JlZGVudGlhbF9maWxlKGNvbnN0IGNoYXIgKmZuLAorCQkJCSAgc3RydWN0IGNyZWRlbnRpYWwgKmMsCisJCQkJICB2b2lkICgqbWF0Y2hfY2IpKHN0cnVjdCBjcmVkZW50aWFsICopLAorCQkJCSAgdm9pZCAoKm90aGVyX2NiKShzdHJ1Y3Qgc3RyYnVmICopKQoreworCUZJTEUgKmZoOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBjcmVkZW50aWFsIGVudHJ5ID0gQ1JFREVOVElBTF9JTklUOworCWludCBmb3VuZF9jcmVkZW50aWFsID0gMDsKKworCWZoID0gZm9wZW4oZm4sICJyIik7CisJaWYgKCFmaCkgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UICYmIGVycm5vICE9IEVBQ0NFUykKKwkJCWRpZV9lcnJubygidW5hYmxlIHRvIG9wZW4gJXMiLCBmbik7CisJCXJldHVybiBmb3VuZF9jcmVkZW50aWFsOworCX0KKworCXdoaWxlIChzdHJidWZfZ2V0bGluZV9sZigmbGluZSwgZmgpICE9IEVPRikgeworCQlpZiAoIWNyZWRlbnRpYWxfZnJvbV91cmxfZ2VudGx5KCZlbnRyeSwgbGluZS5idWYsIDEpICYmCisJCSAgICBlbnRyeS51c2VybmFtZSAmJiBlbnRyeS5wYXNzd29yZCAmJgorCQkgICAgY3JlZGVudGlhbF9tYXRjaChjLCAmZW50cnkpKSB7CisJCQlmb3VuZF9jcmVkZW50aWFsID0gMTsKKwkJCWlmIChtYXRjaF9jYikgeworCQkJCW1hdGNoX2NiKCZlbnRyeSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAob3RoZXJfY2IpCisJCQlvdGhlcl9jYigmbGluZSk7CisJfQorCisJY3JlZGVudGlhbF9jbGVhcigmZW50cnkpOworCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwlmY2xvc2UoZmgpOworCXJldHVybiBmb3VuZF9jcmVkZW50aWFsOworfQorCitzdGF0aWMgdm9pZCBwcmludF9lbnRyeShzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlwcmludGYoInVzZXJuYW1lPSVzXG4iLCBjLT51c2VybmFtZSk7CisJcHJpbnRmKCJwYXNzd29yZD0lc1xuIiwgYy0+cGFzc3dvcmQpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9saW5lKHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKwl3cml0ZV9vcl9kaWUoZ2V0X2xvY2tfZmlsZV9mZCgmY3JlZGVudGlhbF9sb2NrKSwgYnVmLT5idWYsIGJ1Zi0+bGVuKTsKK30KKworc3RhdGljIHZvaWQgcmV3cml0ZV9jcmVkZW50aWFsX2ZpbGUoY29uc3QgY2hhciAqZm4sIHN0cnVjdCBjcmVkZW50aWFsICpjLAorCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpleHRyYSkKK3sKKwlpZiAoaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmY3JlZGVudGlhbF9sb2NrLCBmbiwgMCkgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBnZXQgY3JlZGVudGlhbCBzdG9yYWdlIGxvY2siKTsKKwlpZiAoZXh0cmEpCisJCXByaW50X2xpbmUoZXh0cmEpOworCXBhcnNlX2NyZWRlbnRpYWxfZmlsZShmbiwgYywgTlVMTCwgcHJpbnRfbGluZSk7CisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJmNyZWRlbnRpYWxfbG9jaykgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSBjcmVkZW50aWFsIHN0b3JlIik7Cit9CisKK3N0YXRpYyB2b2lkIHN0b3JlX2NyZWRlbnRpYWxfZmlsZShjb25zdCBjaGFyICpmbiwgc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlczovLyIsIGMtPnByb3RvY29sKTsKKwlzdHJidWZfYWRkc3RyX3VybGVuY29kZSgmYnVmLCBjLT51c2VybmFtZSwgaXNfcmZjMzk4Nl91bnJlc2VydmVkKTsKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJzonKTsKKwlzdHJidWZfYWRkc3RyX3VybGVuY29kZSgmYnVmLCBjLT5wYXNzd29yZCwgaXNfcmZjMzk4Nl91bnJlc2VydmVkKTsKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJ0AnKTsKKwlpZiAoYy0+aG9zdCkKKwkJc3RyYnVmX2FkZHN0cl91cmxlbmNvZGUoJmJ1ZiwgYy0+aG9zdCwgaXNfcmZjMzk4Nl91bnJlc2VydmVkKTsKKwlpZiAoYy0+cGF0aCkgeworCQlzdHJidWZfYWRkY2goJmJ1ZiwgJy8nKTsKKwkJc3RyYnVmX2FkZHN0cl91cmxlbmNvZGUoJmJ1ZiwgYy0+cGF0aCwKKwkJCQkJaXNfcmZjMzk4Nl9yZXNlcnZlZF9vcl91bnJlc2VydmVkKTsKKwl9CisKKwlyZXdyaXRlX2NyZWRlbnRpYWxfZmlsZShmbiwgYywgJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHN0b3JlX2NyZWRlbnRpYWwoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpmbnMsIHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpmbjsKKworCS8qCisJICogU2FuaXR5IGNoZWNrIHRoYXQgd2hhdCB3ZSBhcmUgc3RvcmluZyBpcyBhY3R1YWxseSBzZW5zaWJsZS4KKwkgKiBJbiBwYXJ0aWN1bGFyLCB3ZSBjYW4ndCBtYWtlIGEgVVJMIHdpdGhvdXQgYSBwcm90b2NvbCBmaWVsZC4KKwkgKiBXaXRob3V0IGVpdGhlciBhIGhvc3Qgb3IgcGF0aG5hbWUgKGRlcGVuZGluZyBvbiB0aGUgc2NoZW1lKSwKKwkgKiB3ZSBoYXZlIG5vIHByaW1hcnkga2V5LiBBbmQgd2l0aG91dCBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwKKwkgKiB3ZSBhcmUgbm90IGFjdHVhbGx5IHN0b3JpbmcgYSBjcmVkZW50aWFsLgorCSAqLworCWlmICghYy0+cHJvdG9jb2wgfHwgIShjLT5ob3N0IHx8IGMtPnBhdGgpIHx8ICFjLT51c2VybmFtZSB8fCAhYy0+cGFzc3dvcmQpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oZm4sIGZucykKKwkJaWYgKCFhY2Nlc3MoZm4tPnN0cmluZywgRl9PSykpIHsKKwkJCXN0b3JlX2NyZWRlbnRpYWxfZmlsZShmbi0+c3RyaW5nLCBjKTsKKwkJCXJldHVybjsKKwkJfQorCS8qCisJICogV3JpdGUgY3JlZGVudGlhbCB0byB0aGUgZmlsZW5hbWUgc3BlY2lmaWVkIGJ5IGZucy0+aXRlbXNbMF0sIHRodXMKKwkgKiBjcmVhdGluZyBpdAorCSAqLworCWlmIChmbnMtPm5yKQorCQlzdG9yZV9jcmVkZW50aWFsX2ZpbGUoZm5zLT5pdGVtc1swXS5zdHJpbmcsIGMpOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfY3JlZGVudGlhbChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmZucywgc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmZuOworCisJLyoKKwkgKiBTYW5pdHkgY2hlY2sgdGhhdCB3ZSBhY3R1YWxseSBoYXZlIHNvbWV0aGluZyB0byBtYXRjaAorCSAqIGFnYWluc3QuIFRoZSBpbnB1dCB3ZSBnZXQgaXMgYSByZXN0cmljdGl2ZSBwYXR0ZXJuLAorCSAqIHNvIHRlY2huaWNhbGx5IGEgYmxhbmsgY3JlZGVudGlhbCBtZWFucyAiZXJhc2UgZXZlcnl0aGluZyIuCisJICogQnV0IGl0IGlzIHRvbyBlYXN5IHRvIGFjY2lkZW50YWxseSBzZW5kIHRoaXMsIHNpbmNlIGl0IGlzIGVxdWl2YWxlbnQKKwkgKiB0byBlbXB0eSBpbnB1dC4gU28gZXhwbGljaXRseSBkaXNhbGxvdyBpdCwgYW5kIHJlcXVpcmUgdGhhdCB0aGUKKwkgKiBwYXR0ZXJuIGhhdmUgc29tZSBhY3R1YWwgY29udGVudCB0byBtYXRjaC4KKwkgKi8KKwlpZiAoIWMtPnByb3RvY29sICYmICFjLT5ob3N0ICYmICFjLT5wYXRoICYmICFjLT51c2VybmFtZSkKKwkJcmV0dXJuOworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oZm4sIGZucykKKwkJaWYgKCFhY2Nlc3MoZm4tPnN0cmluZywgRl9PSykpCisJCQlyZXdyaXRlX2NyZWRlbnRpYWxfZmlsZShmbi0+c3RyaW5nLCBjLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgbG9va3VwX2NyZWRlbnRpYWwoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpmbnMsIHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpmbjsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oZm4sIGZucykKKwkJaWYgKHBhcnNlX2NyZWRlbnRpYWxfZmlsZShmbi0+c3RyaW5nLCBjLCBwcmludF9lbnRyeSwgTlVMTCkpCisJCQlyZXR1cm47IC8qIEZvdW5kIGNyZWRlbnRpYWwgKi8KK30KKworaW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICogY29uc3QgdXNhZ2VbXSA9IHsKKwkJImdpdCBjcmVkZW50aWFsLXN0b3JlIFs8b3B0aW9ucz5dIDxhY3Rpb24+IiwKKwkJTlVMTAorCX07CisJY29uc3QgY2hhciAqb3A7CisJc3RydWN0IGNyZWRlbnRpYWwgYyA9IENSRURFTlRJQUxfSU5JVDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZm5zID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJY2hhciAqZmlsZSA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoMCwgImZpbGUiLCAmZmlsZSwgInBhdGgiLAorCQkJICAgImZldGNoIGFuZCBzdG9yZSBjcmVkZW50aWFscyBpbiA8cGF0aD4iKSwKKwkJT1BUX0VORCgpCisJfTsKKworCXVtYXNrKDA3Nyk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCAoY29uc3QgY2hhciAqKilhcmd2LCBOVUxMLCBvcHRpb25zLCB1c2FnZSwgMCk7CisJaWYgKGFyZ2MgIT0gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVzYWdlLCBvcHRpb25zKTsKKwlvcCA9IGFyZ3ZbMF07CisKKwlpZiAoZmlsZSkgeworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmZucywgZmlsZSk7CisJfSBlbHNlIHsKKwkJaWYgKChmaWxlID0gZXhwYW5kX3VzZXJfcGF0aCgifi8uZ2l0LWNyZWRlbnRpYWxzIiwgMCkpKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKCZmbnMsIGZpbGUpOworCQlmaWxlID0geGRnX2NvbmZpZ19ob21lKCJjcmVkZW50aWFscyIpOworCQlpZiAoZmlsZSkKKwkJCXN0cmluZ19saXN0X2FwcGVuZF9ub2R1cCgmZm5zLCBmaWxlKTsKKwl9CisJaWYgKCFmbnMubnIpCisJCWRpZSgidW5hYmxlIHRvIHNldCB1cCBkZWZhdWx0IHBhdGg7IHVzZSAtLWZpbGUiKTsKKworCWlmIChjcmVkZW50aWFsX3JlYWQoJmMsIHN0ZGluKSA8IDApCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgY3JlZGVudGlhbCIpOworCisJaWYgKCFzdHJjbXAob3AsICJnZXQiKSkKKwkJbG9va3VwX2NyZWRlbnRpYWwoJmZucywgJmMpOworCWVsc2UgaWYgKCFzdHJjbXAob3AsICJlcmFzZSIpKQorCQlyZW1vdmVfY3JlZGVudGlhbCgmZm5zLCAmYyk7CisJZWxzZSBpZiAoIXN0cmNtcChvcCwgInN0b3JlIikpCisJCXN0b3JlX2NyZWRlbnRpYWwoJmZucywgJmMpOworCWVsc2UKKwkJOyAvKiBJZ25vcmUgdW5rbm93biBvcGVyYXRpb24uICovCisKKwlzdHJpbmdfbGlzdF9jbGVhcigmZm5zLCAwKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NyZWRlbnRpYWwuYyBiL2NyZWRlbnRpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGQyMjZiCi0tLSAvZGV2L251bGwKKysrIGIvY3JlZGVudGlhbC5jCkBAIC0wLDAgKzEsNTE0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjcmVkZW50aWFsLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgInByb21wdC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAidXJsbWF0Y2guaCIKKwordm9pZCBjcmVkZW50aWFsX2luaXQoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCWMtPmhlbHBlcnMuc3RyZHVwX3N0cmluZ3MgPSAxOworfQorCit2b2lkIGNyZWRlbnRpYWxfY2xlYXIoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJZnJlZShjLT5wcm90b2NvbCk7CisJZnJlZShjLT5ob3N0KTsKKwlmcmVlKGMtPnBhdGgpOworCWZyZWUoYy0+dXNlcm5hbWUpOworCWZyZWUoYy0+cGFzc3dvcmQpOworCXN0cmluZ19saXN0X2NsZWFyKCZjLT5oZWxwZXJzLCAwKTsKKworCWNyZWRlbnRpYWxfaW5pdChjKTsKK30KKworaW50IGNyZWRlbnRpYWxfbWF0Y2goY29uc3Qgc3RydWN0IGNyZWRlbnRpYWwgKndhbnQsCisJCSAgICAgY29uc3Qgc3RydWN0IGNyZWRlbnRpYWwgKmhhdmUpCit7CisjZGVmaW5lIENIRUNLKHgpICghd2FudC0+eCB8fCAoaGF2ZS0+eCAmJiAhc3RyY21wKHdhbnQtPngsIGhhdmUtPngpKSkKKwlyZXR1cm4gQ0hFQ0socHJvdG9jb2wpICYmCisJICAgICAgIENIRUNLKGhvc3QpICYmCisJICAgICAgIENIRUNLKHBhdGgpICYmCisJICAgICAgIENIRUNLKHVzZXJuYW1lKTsKKyN1bmRlZiBDSEVDSworfQorCisKK3N0YXRpYyBpbnQgY3JlZGVudGlhbF9mcm9tX3BvdGVudGlhbGx5X3BhcnRpYWxfdXJsKHN0cnVjdCBjcmVkZW50aWFsICpjLAorCQkJCQkJICAgY29uc3QgY2hhciAqdXJsKTsKKworc3RhdGljIGludCBjcmVkZW50aWFsX2NvbmZpZ19jYWxsYmFjayhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNyZWRlbnRpYWwgKmMgPSBkYXRhOworCWNvbnN0IGNoYXIgKmtleTsKKworCWlmICghc2tpcF9wcmVmaXgodmFyLCAiY3JlZGVudGlhbC4iLCAma2V5KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKworCWlmICghc3RyY21wKGtleSwgImhlbHBlciIpKSB7CisJCWlmICgqdmFsdWUpCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmMtPmhlbHBlcnMsIHZhbHVlKTsKKwkJZWxzZQorCQkJc3RyaW5nX2xpc3RfY2xlYXIoJmMtPmhlbHBlcnMsIDApOworCX0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJ1c2VybmFtZSIpKSB7CisJCWlmICghYy0+dXNlcm5hbWVfZnJvbV9wcm90bykgeworCQkJZnJlZShjLT51c2VybmFtZSk7CisJCQljLT51c2VybmFtZSA9IHhzdHJkdXAodmFsdWUpOworCQl9CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAidXNlaHR0cHBhdGgiKSkKKwkJYy0+dXNlX2h0dHBfcGF0aCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb3RvX2lzX2h0dHAoY29uc3QgY2hhciAqcykKK3sKKwlpZiAoIXMpCisJCXJldHVybiAwOworCXJldHVybiAhc3RyY21wKHMsICJodHRwcyIpIHx8ICFzdHJjbXAocywgImh0dHAiKTsKK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF9kZXNjcmliZShzdHJ1Y3QgY3JlZGVudGlhbCAqYywgc3RydWN0IHN0cmJ1ZiAqb3V0KTsKK3N0YXRpYyB2b2lkIGNyZWRlbnRpYWxfZm9ybWF0KHN0cnVjdCBjcmVkZW50aWFsICpjLCBzdHJ1Y3Qgc3RyYnVmICpvdXQpOworCitzdGF0aWMgaW50IHNlbGVjdF9hbGwoY29uc3Qgc3RydWN0IHVybG1hdGNoX2l0ZW0gKmEsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1cmxtYXRjaF9pdGVtICpiKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hdGNoX3BhcnRpYWxfdXJsKGNvbnN0IGNoYXIgKnVybCwgdm9pZCAqY2IpCit7CisJc3RydWN0IGNyZWRlbnRpYWwgKmMgPSBjYjsKKwlzdHJ1Y3QgY3JlZGVudGlhbCB3YW50ID0gQ1JFREVOVElBTF9JTklUOworCWludCBtYXRjaGVzID0gMDsKKworCWlmIChjcmVkZW50aWFsX2Zyb21fcG90ZW50aWFsbHlfcGFydGlhbF91cmwoJndhbnQsIHVybCkgPCAwKQorCQl3YXJuaW5nKF8oInNraXBwaW5nIGNyZWRlbnRpYWwgbG9va3VwIGZvciBrZXk6IGNyZWRlbnRpYWwuJXMiKSwKKwkJCXVybCk7CisJZWxzZQorCQltYXRjaGVzID0gY3JlZGVudGlhbF9tYXRjaCgmd2FudCwgYyk7CisJY3JlZGVudGlhbF9jbGVhcigmd2FudCk7CisKKwlyZXR1cm4gbWF0Y2hlczsKK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF9hcHBseV9jb25maWcoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJY2hhciAqbm9ybWFsaXplZF91cmw7CisJc3RydWN0IHVybG1hdGNoX2NvbmZpZyBjb25maWcgPSB7IFNUUklOR19MSVNUX0lOSVRfRFVQIH07CisJc3RydWN0IHN0cmJ1ZiB1cmwgPSBTVFJCVUZfSU5JVDsKKworCWlmICghYy0+aG9zdCkKKwkJZGllKF8oInJlZnVzaW5nIHRvIHdvcmsgd2l0aCBjcmVkZW50aWFsIG1pc3NpbmcgaG9zdCBmaWVsZCIpKTsKKwlpZiAoIWMtPnByb3RvY29sKQorCQlkaWUoXygicmVmdXNpbmcgdG8gd29yayB3aXRoIGNyZWRlbnRpYWwgbWlzc2luZyBwcm90b2NvbCBmaWVsZCIpKTsKKworCWlmIChjLT5jb25maWd1cmVkKQorCQlyZXR1cm47CisKKwljb25maWcuc2VjdGlvbiA9ICJjcmVkZW50aWFsIjsKKwljb25maWcua2V5ID0gTlVMTDsKKwljb25maWcuY29sbGVjdF9mbiA9IGNyZWRlbnRpYWxfY29uZmlnX2NhbGxiYWNrOworCWNvbmZpZy5jYXNjYWRlX2ZuID0gTlVMTDsKKwljb25maWcuc2VsZWN0X2ZuID0gc2VsZWN0X2FsbDsKKwljb25maWcuZmFsbGJhY2tfbWF0Y2hfZm4gPSBtYXRjaF9wYXJ0aWFsX3VybDsKKwljb25maWcuY2IgPSBjOworCisJY3JlZGVudGlhbF9mb3JtYXQoYywgJnVybCk7CisJbm9ybWFsaXplZF91cmwgPSB1cmxfbm9ybWFsaXplKHVybC5idWYsICZjb25maWcudXJsKTsKKworCWdpdF9jb25maWcodXJsbWF0Y2hfY29uZmlnX2VudHJ5LCAmY29uZmlnKTsKKwlmcmVlKG5vcm1hbGl6ZWRfdXJsKTsKKwlzdHJidWZfcmVsZWFzZSgmdXJsKTsKKworCWMtPmNvbmZpZ3VyZWQgPSAxOworCisJaWYgKCFjLT51c2VfaHR0cF9wYXRoICYmIHByb3RvX2lzX2h0dHAoYy0+cHJvdG9jb2wpKSB7CisJCUZSRUVfQU5EX05VTEwoYy0+cGF0aCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX2Rlc2NyaWJlKHN0cnVjdCBjcmVkZW50aWFsICpjLCBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJaWYgKCFjLT5wcm90b2NvbCkKKwkJcmV0dXJuOworCXN0cmJ1Zl9hZGRmKG91dCwgIiVzOi8vIiwgYy0+cHJvdG9jb2wpOworCWlmIChjLT51c2VybmFtZSAmJiAqYy0+dXNlcm5hbWUpCisJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzQCIsIGMtPnVzZXJuYW1lKTsKKwlpZiAoYy0+aG9zdCkKKwkJc3RyYnVmX2FkZHN0cihvdXQsIGMtPmhvc3QpOworCWlmIChjLT5wYXRoKQorCQlzdHJidWZfYWRkZihvdXQsICIvJXMiLCBjLT5wYXRoKTsKK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF9mb3JtYXQoc3RydWN0IGNyZWRlbnRpYWwgKmMsIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlpZiAoIWMtPnByb3RvY29sKQorCQlyZXR1cm47CisJc3RyYnVmX2FkZGYob3V0LCAiJXM6Ly8iLCBjLT5wcm90b2NvbCk7CisJaWYgKGMtPnVzZXJuYW1lICYmICpjLT51c2VybmFtZSkgeworCQlzdHJidWZfYWRkX3BlcmNlbnRlbmNvZGUob3V0LCBjLT51c2VybmFtZSwgU1RSQlVGX0VOQ09ERV9TTEFTSCk7CisJCXN0cmJ1Zl9hZGRjaChvdXQsICdAJyk7CisJfQorCWlmIChjLT5ob3N0KQorCQlzdHJidWZfYWRkc3RyKG91dCwgYy0+aG9zdCk7CisJaWYgKGMtPnBhdGgpIHsKKwkJc3RyYnVmX2FkZGNoKG91dCwgJy8nKTsKKwkJc3RyYnVmX2FkZF9wZXJjZW50ZW5jb2RlKG91dCwgYy0+cGF0aCwgMCk7CisJfQorfQorCitzdGF0aWMgY2hhciAqY3JlZGVudGlhbF9hc2tfb25lKGNvbnN0IGNoYXIgKndoYXQsIHN0cnVjdCBjcmVkZW50aWFsICpjLAorCQkJCWludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGRlc2MgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHByb21wdCA9IFNUUkJVRl9JTklUOworCWNoYXIgKnI7CisKKwljcmVkZW50aWFsX2Rlc2NyaWJlKGMsICZkZXNjKTsKKwlpZiAoZGVzYy5sZW4pCisJCXN0cmJ1Zl9hZGRmKCZwcm9tcHQsICIlcyBmb3IgJyVzJzogIiwgd2hhdCwgZGVzYy5idWYpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoJnByb21wdCwgIiVzOiAiLCB3aGF0KTsKKworCXIgPSBnaXRfcHJvbXB0KHByb21wdC5idWYsIGZsYWdzKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZkZXNjKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJvbXB0KTsKKwlyZXR1cm4geHN0cmR1cChyKTsKK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF9nZXRwYXNzKHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWlmICghYy0+dXNlcm5hbWUpCisJCWMtPnVzZXJuYW1lID0gY3JlZGVudGlhbF9hc2tfb25lKCJVc2VybmFtZSIsIGMsCisJCQkJCQkgUFJPTVBUX0FTS1BBU1N8UFJPTVBUX0VDSE8pOworCWlmICghYy0+cGFzc3dvcmQpCisJCWMtPnBhc3N3b3JkID0gY3JlZGVudGlhbF9hc2tfb25lKCJQYXNzd29yZCIsIGMsCisJCQkJCQkgUFJPTVBUX0FTS1BBU1MpOworfQorCitpbnQgY3JlZGVudGlhbF9yZWFkKHN0cnVjdCBjcmVkZW50aWFsICpjLCBGSUxFICpmcCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKworCXdoaWxlIChzdHJidWZfZ2V0bGluZV9sZigmbGluZSwgZnApICE9IEVPRikgeworCQljaGFyICprZXkgPSBsaW5lLmJ1ZjsKKwkJY2hhciAqdmFsdWUgPSBzdHJjaHIoa2V5LCAnPScpOworCisJCWlmICghbGluZS5sZW4pCisJCQlicmVhazsKKworCQlpZiAoIXZhbHVlKSB7CisJCQl3YXJuaW5nKCJpbnZhbGlkIGNyZWRlbnRpYWwgbGluZTogJXMiLCBrZXkpOworCQkJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCQkJcmV0dXJuIC0xOworCQl9CisJCSp2YWx1ZSsrID0gJ1wwJzsKKworCQlpZiAoIXN0cmNtcChrZXksICJ1c2VybmFtZSIpKSB7CisJCQlmcmVlKGMtPnVzZXJuYW1lKTsKKwkJCWMtPnVzZXJuYW1lID0geHN0cmR1cCh2YWx1ZSk7CisJCQljLT51c2VybmFtZV9mcm9tX3Byb3RvID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInBhc3N3b3JkIikpIHsKKwkJCWZyZWUoYy0+cGFzc3dvcmQpOworCQkJYy0+cGFzc3dvcmQgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInByb3RvY29sIikpIHsKKwkJCWZyZWUoYy0+cHJvdG9jb2wpOworCQkJYy0+cHJvdG9jb2wgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgImhvc3QiKSkgeworCQkJZnJlZShjLT5ob3N0KTsKKwkJCWMtPmhvc3QgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInBhdGgiKSkgeworCQkJZnJlZShjLT5wYXRoKTsKKwkJCWMtPnBhdGggPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInVybCIpKSB7CisJCQljcmVkZW50aWFsX2Zyb21fdXJsKGMsIHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInF1aXQiKSkgeworCQkJYy0+cXVpdCA9ICEhZ2l0X2NvbmZpZ19ib29sKCJxdWl0IiwgdmFsdWUpOworCQl9CisJCS8qCisJCSAqIElnbm9yZSBvdGhlciBsaW5lczsgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZXkgbWVhbiwgYnV0CisJCSAqIHRoaXMgZnV0dXJlLXByb29mcyB1cyB3aGVuIGxhdGVyIHZlcnNpb25zIG9mIGdpdCBkbworCQkgKiBsZWFybiBuZXcgbGluZXMsIGFuZCB0aGUgaGVscGVycyBhcmUgdXBkYXRlZCB0byBtYXRjaC4KKwkJICovCisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX3dyaXRlX2l0ZW0oRklMRSAqZnAsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsCisJCQkJICBpbnQgcmVxdWlyZWQpCit7CisJaWYgKCF2YWx1ZSAmJiByZXF1aXJlZCkKKwkJQlVHKCJjcmVkZW50aWFsIHZhbHVlIGZvciAlcyBpcyBtaXNzaW5nIiwga2V5KTsKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm47CisJaWYgKHN0cmNocih2YWx1ZSwgJ1xuJykpCisJCWRpZSgiY3JlZGVudGlhbCB2YWx1ZSBmb3IgJXMgY29udGFpbnMgbmV3bGluZSIsIGtleSk7CisJZnByaW50ZihmcCwgIiVzPSVzXG4iLCBrZXksIHZhbHVlKTsKK30KKwordm9pZCBjcmVkZW50aWFsX3dyaXRlKGNvbnN0IHN0cnVjdCBjcmVkZW50aWFsICpjLCBGSUxFICpmcCkKK3sKKwljcmVkZW50aWFsX3dyaXRlX2l0ZW0oZnAsICJwcm90b2NvbCIsIGMtPnByb3RvY29sLCAxKTsKKwljcmVkZW50aWFsX3dyaXRlX2l0ZW0oZnAsICJob3N0IiwgYy0+aG9zdCwgMSk7CisJY3JlZGVudGlhbF93cml0ZV9pdGVtKGZwLCAicGF0aCIsIGMtPnBhdGgsIDApOworCWNyZWRlbnRpYWxfd3JpdGVfaXRlbShmcCwgInVzZXJuYW1lIiwgYy0+dXNlcm5hbWUsIDApOworCWNyZWRlbnRpYWxfd3JpdGVfaXRlbShmcCwgInBhc3N3b3JkIiwgYy0+cGFzc3dvcmQsIDApOworfQorCitzdGF0aWMgaW50IHJ1bl9jcmVkZW50aWFsX2hlbHBlcihzdHJ1Y3QgY3JlZGVudGlhbCAqYywKKwkJCQkgY29uc3QgY2hhciAqY21kLAorCQkJCSBpbnQgd2FudF9vdXRwdXQpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgaGVscGVyID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgTlVMTCwgTlVMTCB9OworCUZJTEUgKmZwOworCisJYXJndlswXSA9IGNtZDsKKwloZWxwZXIuYXJndiA9IGFyZ3Y7CisJaGVscGVyLnVzZV9zaGVsbCA9IDE7CisJaGVscGVyLmluID0gLTE7CisJaWYgKHdhbnRfb3V0cHV0KQorCQloZWxwZXIub3V0ID0gLTE7CisJZWxzZQorCQloZWxwZXIubm9fc3Rkb3V0ID0gMTsKKworCWlmIChzdGFydF9jb21tYW5kKCZoZWxwZXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJZnAgPSB4ZmRvcGVuKGhlbHBlci5pbiwgInciKTsKKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCWNyZWRlbnRpYWxfd3JpdGUoYywgZnApOworCWZjbG9zZShmcCk7CisJc2lnY2hhaW5fcG9wKFNJR1BJUEUpOworCisJaWYgKHdhbnRfb3V0cHV0KSB7CisJCWludCByOworCQlmcCA9IHhmZG9wZW4oaGVscGVyLm91dCwgInIiKTsKKwkJciA9IGNyZWRlbnRpYWxfcmVhZChjLCBmcCk7CisJCWZjbG9zZShmcCk7CisJCWlmIChyIDwgMCkgeworCQkJZmluaXNoX2NvbW1hbmQoJmhlbHBlcik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmhlbHBlcikpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcmVkZW50aWFsX2RvKHN0cnVjdCBjcmVkZW50aWFsICpjLCBjb25zdCBjaGFyICpoZWxwZXIsCisJCQkgY29uc3QgY2hhciAqb3BlcmF0aW9uKQoreworCXN0cnVjdCBzdHJidWYgY21kID0gU1RSQlVGX0lOSVQ7CisJaW50IHI7CisKKwlpZiAoaGVscGVyWzBdID09ICchJykKKwkJc3RyYnVmX2FkZHN0cigmY21kLCBoZWxwZXIgKyAxKTsKKwllbHNlIGlmIChpc19hYnNvbHV0ZV9wYXRoKGhlbHBlcikpCisJCXN0cmJ1Zl9hZGRzdHIoJmNtZCwgaGVscGVyKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKCZjbWQsICJnaXQgY3JlZGVudGlhbC0lcyIsIGhlbHBlcik7CisKKwlzdHJidWZfYWRkZigmY21kLCAiICVzIiwgb3BlcmF0aW9uKTsKKwlyID0gcnVuX2NyZWRlbnRpYWxfaGVscGVyKGMsIGNtZC5idWYsICFzdHJjbXAob3BlcmF0aW9uLCAiZ2V0IikpOworCisJc3RyYnVmX3JlbGVhc2UoJmNtZCk7CisJcmV0dXJuIHI7Cit9CisKK3ZvaWQgY3JlZGVudGlhbF9maWxsKHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWludCBpOworCisJaWYgKGMtPnVzZXJuYW1lICYmIGMtPnBhc3N3b3JkKQorCQlyZXR1cm47CisKKwljcmVkZW50aWFsX2FwcGx5X2NvbmZpZyhjKTsKKworCWZvciAoaSA9IDA7IGkgPCBjLT5oZWxwZXJzLm5yOyBpKyspIHsKKwkJY3JlZGVudGlhbF9kbyhjLCBjLT5oZWxwZXJzLml0ZW1zW2ldLnN0cmluZywgImdldCIpOworCQlpZiAoYy0+dXNlcm5hbWUgJiYgYy0+cGFzc3dvcmQpCisJCQlyZXR1cm47CisJCWlmIChjLT5xdWl0KQorCQkJZGllKCJjcmVkZW50aWFsIGhlbHBlciAnJXMnIHRvbGQgdXMgdG8gcXVpdCIsCisJCQkgICAgYy0+aGVscGVycy5pdGVtc1tpXS5zdHJpbmcpOworCX0KKworCWNyZWRlbnRpYWxfZ2V0cGFzcyhjKTsKKwlpZiAoIWMtPnVzZXJuYW1lICYmICFjLT5wYXNzd29yZCkKKwkJZGllKCJ1bmFibGUgdG8gZ2V0IHBhc3N3b3JkIGZyb20gdXNlciIpOworfQorCit2b2lkIGNyZWRlbnRpYWxfYXBwcm92ZShzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlpbnQgaTsKKworCWlmIChjLT5hcHByb3ZlZCkKKwkJcmV0dXJuOworCWlmICghYy0+dXNlcm5hbWUgfHwgIWMtPnBhc3N3b3JkKQorCQlyZXR1cm47CisKKwljcmVkZW50aWFsX2FwcGx5X2NvbmZpZyhjKTsKKworCWZvciAoaSA9IDA7IGkgPCBjLT5oZWxwZXJzLm5yOyBpKyspCisJCWNyZWRlbnRpYWxfZG8oYywgYy0+aGVscGVycy5pdGVtc1tpXS5zdHJpbmcsICJzdG9yZSIpOworCWMtPmFwcHJvdmVkID0gMTsKK30KKwordm9pZCBjcmVkZW50aWFsX3JlamVjdChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlpbnQgaTsKKworCWNyZWRlbnRpYWxfYXBwbHlfY29uZmlnKGMpOworCisJZm9yIChpID0gMDsgaSA8IGMtPmhlbHBlcnMubnI7IGkrKykKKwkJY3JlZGVudGlhbF9kbyhjLCBjLT5oZWxwZXJzLml0ZW1zW2ldLnN0cmluZywgImVyYXNlIik7CisKKwlGUkVFX0FORF9OVUxMKGMtPnVzZXJuYW1lKTsKKwlGUkVFX0FORF9OVUxMKGMtPnBhc3N3b3JkKTsKKwljLT5hcHByb3ZlZCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfdXJsX2NvbXBvbmVudChjb25zdCBjaGFyICp1cmwsIGludCBxdWlldCwKKwkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gMDsKKwlpZiAoIXN0cmNocih2YWx1ZSwgJ1xuJykpCisJCXJldHVybiAwOworCisJaWYgKCFxdWlldCkKKwkJd2FybmluZyhfKCJ1cmwgY29udGFpbnMgYSBuZXdsaW5lIGluIGl0cyAlcyBjb21wb25lbnQ6ICVzIiksCisJCQluYW1lLCB1cmwpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFBvdGVudGlhbGx5LXBhcnRpYWwgVVJMcyBjYW4sIGJ1dCBkbyBub3QgaGF2ZSB0bywgY29udGFpbgorICoKKyAqIC0gYSBwcm90b2NvbCAob3Igc2NoZW1lKSBvZiB0aGUgZm9ybSAiPHByb3RvY29sPjovLyIKKyAqCisgKiAtIGEgaG9zdCBuYW1lICh0aGUgcGFydCBhZnRlciB0aGUgcHJvdG9jb2wgYW5kIGJlZm9yZSB0aGUgZmlyc3Qgc2xhc2ggYWZ0ZXIKKyAqICAgdGhhdCwgaWYgYW55KQorICoKKyAqIC0gYSB1c2VyIG5hbWUgYW5kIHBvdGVudGlhbGx5IGEgcGFzc3dvcmQgKGFzICI8dXNlcj5bOjxwYXNzd29yZD5dQCIgcGFydCBvZgorICogICB0aGUgaG9zdCBuYW1lKQorICoKKyAqIC0gYSBwYXRoICh0aGUgcGFydCBhZnRlciB0aGUgaG9zdCBuYW1lLCBpZiBhbnksIHN0YXJ0aW5nIHdpdGggdGhlIHNsYXNoKQorICoKKyAqIE1pc3NpbmcgcGFydHMgd2lsbCBiZSBsZWZ0IHVuc2V0IGluIGBzdHJ1Y3QgY3JlZGVudGlhbGAuIFRodXMsIGBodHRwczovL2AKKyAqIHdpbGwgaGF2ZSBvbmx5IHRoZSBgcHJvdG9jb2xgIHNldCwgYGV4YW1wbGUuY29tYCBvbmx5IHRoZSBob3N0IG5hbWUsIGFuZAorICogYC9naXRgIG9ubHkgdGhlIHBhdGguCisgKgorICogTm90ZSB0aGF0IGFuIGVtcHR5IGhvc3QgbmFtZSBpbiBhbiBvdGhlcndpc2UgZnVsbHktcXVhbGlmaWVkIFVSTCAoZS5nLgorICogYGNlcnQ6Ly8vcGF0aC90by9jZXJ0LnBlbWApIHdpbGwgYmUgdHJlYXRlZCBhcyB1bnNldCBpZiB3ZSBleHBlY3QgdGhlIFVSTCB0bworICogYmUgcG90ZW50aWFsbHkgcGFydGlhbCwgYW5kIG9ubHkgdGhlbiAob3RoZXJ3aXNlLCB0aGUgZW1wdHkgc3RyaW5nIGlzIHVzZWQpLgorICoKKyAqIFRoZSBjcmVkZW50aWFsX2Zyb21fdXJsKCkgZnVuY3Rpb24gZG9lcyBub3QgYWxsb3cgcGFydGlhbCBVUkxzLgorICovCitzdGF0aWMgaW50IGNyZWRlbnRpYWxfZnJvbV91cmxfMShzdHJ1Y3QgY3JlZGVudGlhbCAqYywgY29uc3QgY2hhciAqdXJsLAorCQkJCSBpbnQgYWxsb3dfcGFydGlhbF91cmwsIGludCBxdWlldCkKK3sKKwljb25zdCBjaGFyICphdCwgKmNvbG9uLCAqY3AsICpzbGFzaCwgKmhvc3QsICpwcm90b19lbmQ7CisKKwljcmVkZW50aWFsX2NsZWFyKGMpOworCisJLyoKKwkgKiBNYXRjaCBvbmUgb2Y6CisJICogICAoMSkgcHJvdG86Ly88aG9zdD4vLi4uCisJICogICAoMikgcHJvdG86Ly88dXNlcj5APGhvc3Q+Ly4uLgorCSAqICAgKDMpIHByb3RvOi8vPHVzZXI+OjxwYXNzPkA8aG9zdD4vLi4uCisJICovCisJcHJvdG9fZW5kID0gc3Ryc3RyKHVybCwgIjovLyIpOworCWlmICghYWxsb3dfcGFydGlhbF91cmwgJiYgKCFwcm90b19lbmQgfHwgcHJvdG9fZW5kID09IHVybCkpIHsKKwkJaWYgKCFxdWlldCkKKwkJCXdhcm5pbmcoXygidXJsIGhhcyBubyBzY2hlbWU6ICVzIiksIHVybCk7CisJCXJldHVybiAtMTsKKwl9CisJY3AgPSBwcm90b19lbmQgPyBwcm90b19lbmQgKyAzIDogdXJsOworCWF0ID0gc3RyY2hyKGNwLCAnQCcpOworCWNvbG9uID0gc3RyY2hyKGNwLCAnOicpOworCisJLyoKKwkgKiBBIHF1ZXJ5IG9yIGZyYWdtZW50IG1hcmtlciBiZWZvcmUgdGhlIHNsYXNoIGVuZHMgdGhlIGhvc3QgcG9ydGlvbi4KKwkgKiBXZSdsbCBqdXN0IGNvbnRpbnVlIHRvIGNhbGwgdGhpcyAic2xhc2giIGZvciBzaW1wbGljaXR5LiBOb3RhYmx5IG91cgorCSAqICJ0cmltIGxlYWRpbmcgc2xhc2hlcyIgcGFydCB3b24ndCBza2lwIG92ZXIgdGhpcyBwYXJ0IG9mIHRoZSBwYXRoLAorCSAqIGJ1dCB0aGF0J3Mgd2hhdCB3ZSdkIHdhbnQuCisJICovCisJc2xhc2ggPSBjcCArIHN0cmNzcG4oY3AsICIvPyMiKTsKKworCWlmICghYXQgfHwgc2xhc2ggPD0gYXQpIHsKKwkJLyogQ2FzZSAoMSkgKi8KKwkJaG9zdCA9IGNwOworCX0KKwllbHNlIGlmICghY29sb24gfHwgYXQgPD0gY29sb24pIHsKKwkJLyogQ2FzZSAoMikgKi8KKwkJYy0+dXNlcm5hbWUgPSB1cmxfZGVjb2RlX21lbShjcCwgYXQgLSBjcCk7CisJCWlmIChjLT51c2VybmFtZSAmJiAqYy0+dXNlcm5hbWUpCisJCQljLT51c2VybmFtZV9mcm9tX3Byb3RvID0gMTsKKwkJaG9zdCA9IGF0ICsgMTsKKwl9IGVsc2UgeworCQkvKiBDYXNlICgzKSAqLworCQljLT51c2VybmFtZSA9IHVybF9kZWNvZGVfbWVtKGNwLCBjb2xvbiAtIGNwKTsKKwkJaWYgKGMtPnVzZXJuYW1lICYmICpjLT51c2VybmFtZSkKKwkJCWMtPnVzZXJuYW1lX2Zyb21fcHJvdG8gPSAxOworCQljLT5wYXNzd29yZCA9IHVybF9kZWNvZGVfbWVtKGNvbG9uICsgMSwgYXQgLSAoY29sb24gKyAxKSk7CisJCWhvc3QgPSBhdCArIDE7CisJfQorCisJaWYgKHByb3RvX2VuZCAmJiBwcm90b19lbmQgLSB1cmwgPiAwKQorCQljLT5wcm90b2NvbCA9IHhtZW1kdXB6KHVybCwgcHJvdG9fZW5kIC0gdXJsKTsKKwlpZiAoIWFsbG93X3BhcnRpYWxfdXJsIHx8IHNsYXNoIC0gaG9zdCA+IDApCisJCWMtPmhvc3QgPSB1cmxfZGVjb2RlX21lbShob3N0LCBzbGFzaCAtIGhvc3QpOworCS8qIFRyaW0gbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHBhdGggKi8KKwl3aGlsZSAoKnNsYXNoID09ICcvJykKKwkJc2xhc2grKzsKKwlpZiAoKnNsYXNoKSB7CisJCWNoYXIgKnA7CisJCWMtPnBhdGggPSB1cmxfZGVjb2RlKHNsYXNoKTsKKwkJcCA9IGMtPnBhdGggKyBzdHJsZW4oYy0+cGF0aCkgLSAxOworCQl3aGlsZSAocCA+IGMtPnBhdGggJiYgKnAgPT0gJy8nKQorCQkJKnAtLSA9ICdcMCc7CisJfQorCisJaWYgKGNoZWNrX3VybF9jb21wb25lbnQodXJsLCBxdWlldCwgInVzZXJuYW1lIiwgYy0+dXNlcm5hbWUpIDwgMCB8fAorCSAgICBjaGVja191cmxfY29tcG9uZW50KHVybCwgcXVpZXQsICJwYXNzd29yZCIsIGMtPnBhc3N3b3JkKSA8IDAgfHwKKwkgICAgY2hlY2tfdXJsX2NvbXBvbmVudCh1cmwsIHF1aWV0LCAicHJvdG9jb2wiLCBjLT5wcm90b2NvbCkgPCAwIHx8CisJICAgIGNoZWNrX3VybF9jb21wb25lbnQodXJsLCBxdWlldCwgImhvc3QiLCBjLT5ob3N0KSA8IDAgfHwKKwkgICAgY2hlY2tfdXJsX2NvbXBvbmVudCh1cmwsIHF1aWV0LCAicGF0aCIsIGMtPnBhdGgpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3JlZGVudGlhbF9mcm9tX3BvdGVudGlhbGx5X3BhcnRpYWxfdXJsKHN0cnVjdCBjcmVkZW50aWFsICpjLAorCQkJCQkJICAgY29uc3QgY2hhciAqdXJsKQoreworCXJldHVybiBjcmVkZW50aWFsX2Zyb21fdXJsXzEoYywgdXJsLCAxLCAwKTsKK30KKworaW50IGNyZWRlbnRpYWxfZnJvbV91cmxfZ2VudGx5KHN0cnVjdCBjcmVkZW50aWFsICpjLCBjb25zdCBjaGFyICp1cmwsIGludCBxdWlldCkKK3sKKwlyZXR1cm4gY3JlZGVudGlhbF9mcm9tX3VybF8xKGMsIHVybCwgMCwgcXVpZXQpOworfQorCit2b2lkIGNyZWRlbnRpYWxfZnJvbV91cmwoc3RydWN0IGNyZWRlbnRpYWwgKmMsIGNvbnN0IGNoYXIgKnVybCkKK3sKKwlpZiAoY3JlZGVudGlhbF9mcm9tX3VybF9nZW50bHkoYywgdXJsLCAwKSA8IDApCisJCWRpZShfKCJjcmVkZW50aWFsIHVybCBjYW5ub3QgYmUgcGFyc2VkOiAlcyIpLCB1cmwpOworfQpkaWZmIC0tZ2l0IGEvY3JlZGVudGlhbC5oIGIvY3JlZGVudGlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZTE3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9jcmVkZW50aWFsLmgKQEAgLTAsMCArMSwxOTUgQEAKKyNpZm5kZWYgQ1JFREVOVElBTF9ICisjZGVmaW5lIENSRURFTlRJQUxfSAorCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworLyoqCisgKiBUaGUgY3JlZGVudGlhbHMgQVBJIHByb3ZpZGVzIGFuIGFic3RyYWN0ZWQgd2F5IG9mIGdhdGhlcmluZyB1c2VybmFtZSBhbmQKKyAqIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGZyb20gdGhlIHVzZXIuCisgKgorICogVHlwaWNhbCBzZXR1cAorICogLS0tLS0tLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLQorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfCBHaXQgY29kZSAoQykgICAgICAgICAgfC0tLSB0byBzZXJ2ZXIgcmVxdWlyaW5nIC0tLT4KKyAqIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIGF1dGhlbnRpY2F0aW9uCisgKiB8Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi58CisgKiB8IEMgY3JlZGVudGlhbCBBUEkgICAgICB8LS0tIHByb21wdCAtLS0+IFVzZXIKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIAleICAgICAgfAorICogCXwgcGlwZSB8CisgKiAJfCAgICAgIHYKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgR2l0IGNyZWRlbnRpYWwgaGVscGVyIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSBHaXQgY29kZSAodHlwaWNhbGx5IGEgcmVtb3RlLWhlbHBlcikgd2lsbCBjYWxsIHRoZSBDIEFQSSB0byBvYnRhaW4KKyAqIGNyZWRlbnRpYWwgZGF0YSBsaWtlIGEgbG9naW4vcGFzc3dvcmQgcGFpciAoY3JlZGVudGlhbF9maWxsKS4gVGhlCisgKiBBUEkgd2lsbCBpdHNlbGYgY2FsbCBhIHJlbW90ZSBoZWxwZXIgKGUuZy4gImdpdCBjcmVkZW50aWFsLWNhY2hlIiBvcgorICogImdpdCBjcmVkZW50aWFsLXN0b3JlIikgdGhhdCBtYXkgcmV0cmlldmUgY3JlZGVudGlhbCBkYXRhIGZyb20gYQorICogc3RvcmUuIElmIHRoZSBjcmVkZW50aWFsIGhlbHBlciBjYW5ub3QgZmluZCB0aGUgaW5mb3JtYXRpb24sIHRoZSBDIEFQSQorICogd2lsbCBwcm9tcHQgdGhlIHVzZXIuIFRoZW4sIHRoZSBjYWxsZXIgb2YgdGhlIEFQSSB0YWtlcyBjYXJlIG9mCisgKiBjb250YWN0aW5nIHRoZSBzZXJ2ZXIsIGFuZCBkb2VzIHRoZSBhY3R1YWwgYXV0aGVudGljYXRpb24uCisgKgorICogQyBBUEkKKyAqIC0tLS0tCisgKgorICogVGhlIGNyZWRlbnRpYWwgQyBBUEkgaXMgbWVhbnQgdG8gYmUgY2FsbGVkIGJ5IEdpdCBjb2RlIHdoaWNoIG5lZWRzIHRvCisgKiBhY3F1aXJlIG9yIHN0b3JlIGEgY3JlZGVudGlhbC4gSXQgaXMgY2VudGVyZWQgYXJvdW5kIGFuIG9iamVjdAorICogcmVwcmVzZW50aW5nIGEgc2luZ2xlIGNyZWRlbnRpYWwgYW5kIHByb3ZpZGVzIHRocmVlIGJhc2ljIG9wZXJhdGlvbnM6CisgKiBmaWxsIChhY3F1aXJlIGNyZWRlbnRpYWxzIGJ5IGNhbGxpbmcgaGVscGVycyBhbmQvb3IgcHJvbXB0aW5nIHRoZSB1c2VyKSwKKyAqIGFwcHJvdmUgKG1hcmsgYSBjcmVkZW50aWFsIGFzIHN1Y2Nlc3NmdWxseSB1c2VkIHNvIHRoYXQgaXQgY2FuIGJlIHN0b3JlZAorICogZm9yIGxhdGVyIHVzZSksIGFuZCByZWplY3QgKG1hcmsgYSBjcmVkZW50aWFsIGFzIHVuc3VjY2Vzc2Z1bCBzbyB0aGF0IGl0CisgKiBjYW4gYmUgZXJhc2VkIGZyb20gYW55IHBlcnNpc3RlbnQgc3RvcmFnZSkuCisgKgorICogRXhhbXBsZQorICogfn5+fn5+fgorICoKKyAqIFRoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyB0aGUgZnVuY3Rpb25zIG9mIHRoZSBjcmVkZW50aWFsIEFQSSBjb3VsZCBiZQorICogdXNlZCB0byBsb2dpbiB0byBhIGZpY3RpdGlvdXMgImZvbyIgc2VydmljZSBvbiBhIHJlbW90ZSBob3N0OgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBpbnQgZm9vX2xvZ2luKHN0cnVjdCBmb29fY29ubmVjdGlvbiAqZikKKyAqIHsKKyAqIAlpbnQgc3RhdHVzOworICogCS8vIENyZWF0ZSBhIGNyZWRlbnRpYWwgd2l0aCBzb21lIGNvbnRleHQ7IHdlIGRvbid0IHlldCBrbm93IHRoZQorICogCS8vIHVzZXJuYW1lIG9yIHBhc3N3b3JkLgorICoKKyAqIHN0cnVjdCBjcmVkZW50aWFsIGMgPSBDUkVERU5USUFMX0lOSVQ7CisgKiBjLnByb3RvY29sID0geHN0cmR1cCgiZm9vIik7CisgKiBjLmhvc3QgPSB4c3RyZHVwKGYtPmhvc3RuYW1lKTsKKyAqCisgKiAvLyBGaWxsIGluIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGRzIGJ5IGNvbnRhY3RpbmcKKyAqIC8vIGhlbHBlcnMgYW5kL29yIGFza2luZyB0aGUgdXNlci4gVGhlIGZ1bmN0aW9uIHdpbGwgZGllIGlmIGl0CisgKiAvLyBmYWlscy4KKyAqIGNyZWRlbnRpYWxfZmlsbCgmYyk7CisgKgorICogLy8gT3RoZXJ3aXNlLCB3ZSBoYXZlIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLiBUcnkgdG8gdXNlIGl0LgorICoKKyAqIHN0YXR1cyA9IHNlbmRfZm9vX2xvZ2luKGYsIGMudXNlcm5hbWUsIGMucGFzc3dvcmQpOworICogc3dpdGNoIChzdGF0dXMpIHsKKyAqIGNhc2UgRk9PX09LOgorICogLy8gSXQgd29ya2VkLiBTdG9yZSB0aGUgY3JlZGVudGlhbCBmb3IgbGF0ZXIgdXNlLgorICogY3JlZGVudGlhbF9hY2NlcHQoJmMpOworICogYnJlYWs7CisgKiBjYXNlIEZPT19CQURfTE9HSU46CisgKiAvLyBFcmFzZSB0aGUgY3JlZGVudGlhbCBmcm9tIHN0b3JhZ2Ugc28gd2UgZG9uJ3QgdHJ5IGl0IGFnYWluLgorICogY3JlZGVudGlhbF9yZWplY3QoJmMpOworICogYnJlYWs7CisgKiBkZWZhdWx0OgorICogLy8gU29tZSBvdGhlciBlcnJvciBvY2N1cnJlZC4gV2UgZG9uJ3Qga25vdyBpZiB0aGUKKyAqIC8vIGNyZWRlbnRpYWwgaXMgZ29vZCBvciBiYWQsIHNvIHJlcG9ydCBub3RoaW5nIHRvIHRoZQorICogLy8gY3JlZGVudGlhbCBzdWJzeXN0ZW0uCisgKiB9CisgKgorICogLy8gRnJlZSBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgKiBjcmVkZW50aWFsX2NsZWFyKCZjKTsKKyAqCisgKiByZXR1cm4gc3RhdHVzOworICogfQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisKKy8qKgorICogVGhpcyBzdHJ1Y3QgcmVwcmVzZW50cyBhIHNpbmdsZSB1c2VybmFtZS9wYXNzd29yZCBjb21iaW5hdGlvbgorICogYWxvbmcgd2l0aCBhbnkgYXNzb2NpYXRlZCBjb250ZXh0LiBBbGwgc3RyaW5nIGZpZWxkcyBzaG91bGQgYmUKKyAqIGhlYXAtYWxsb2NhdGVkIChvciBOVUxMIGlmIHRoZXkgYXJlIG5vdCBrbm93biBvciBub3QgYXBwbGljYWJsZSkuCisgKiBUaGUgbWVhbmluZyBvZiB0aGUgaW5kaXZpZHVhbCBjb250ZXh0IGZpZWxkcyBpcyB0aGUgc2FtZSBhcworICogdGhlaXIgY291bnRlcnBhcnRzIGluIHRoZSBoZWxwZXIgcHJvdG9jb2wuCisgKgorICogVGhpcyBzdHJ1Y3Qgc2hvdWxkIGFsd2F5cyBiZSBpbml0aWFsaXplZCB3aXRoIGBDUkVERU5USUFMX0lOSVRgIG9yCisgKiBgY3JlZGVudGlhbF9pbml0YC4KKyAqLworc3RydWN0IGNyZWRlbnRpYWwgeworCisJLyoqCisJICogQSBgc3RyaW5nX2xpc3RgIG9mIGhlbHBlcnMuIEVhY2ggc3RyaW5nIHNwZWNpZmllcyBhbiBleHRlcm5hbAorCSAqIGhlbHBlciB3aGljaCB3aWxsIGJlIHJ1biwgaW4gb3JkZXIsIHRvIGVpdGhlciBhY3F1aXJlIG9yIHN0b3JlCisJICogY3JlZGVudGlhbHMuIFRoaXMgbGlzdCBpcyBmaWxsZWQtaW4gYnkgdGhlIEFQSSBmdW5jdGlvbnMKKwkgKiBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYmVmb3JlCisJICogY29uc3VsdGluZyBoZWxwZXJzLCBzbyB0aGVyZSB1c3VhbGx5IGlzIG5vIG5lZWQgZm9yIGEgY2FsbGVyIHRvCisJICogbW9kaWZ5IHRoZSBoZWxwZXJzIGZpZWxkIGF0IGFsbC4KKwkgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgaGVscGVyczsKKworCXVuc2lnbmVkIGFwcHJvdmVkOjEsCisJCSBjb25maWd1cmVkOjEsCisJCSBxdWl0OjEsCisJCSB1c2VfaHR0cF9wYXRoOjEsCisJCSB1c2VybmFtZV9mcm9tX3Byb3RvOjE7CisKKwljaGFyICp1c2VybmFtZTsKKwljaGFyICpwYXNzd29yZDsKKwljaGFyICpwcm90b2NvbDsKKwljaGFyICpob3N0OworCWNoYXIgKnBhdGg7Cit9OworCisjZGVmaW5lIENSRURFTlRJQUxfSU5JVCB7IFNUUklOR19MSVNUX0lOSVRfRFVQIH0KKworLyogSW5pdGlhbGl6ZSBhIGNyZWRlbnRpYWwgc3RydWN0dXJlLCBzZXR0aW5nIGFsbCBmaWVsZHMgdG8gZW1wdHkuICovCit2b2lkIGNyZWRlbnRpYWxfaW5pdChzdHJ1Y3QgY3JlZGVudGlhbCAqKTsKKworLyoqCisgKiBGcmVlIGFueSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjcmVkZW50aWFsIHN0cnVjdHVyZSwgcmV0dXJuaW5nCisgKiBpdCB0byBhIHByaXN0aW5lIGluaXRpYWxpemVkIHN0YXRlLgorICovCit2b2lkIGNyZWRlbnRpYWxfY2xlYXIoc3RydWN0IGNyZWRlbnRpYWwgKik7CisKKy8qKgorICogSW5zdHJ1Y3QgdGhlIGNyZWRlbnRpYWwgc3Vic3lzdGVtIHRvIGZpbGwgdGhlIHVzZXJuYW1lIGFuZAorICogcGFzc3dvcmQgZmllbGRzIG9mIHRoZSBwYXNzZWQgY3JlZGVudGlhbCBzdHJ1Y3QgYnkgZmlyc3QKKyAqIGNvbnN1bHRpbmcgaGVscGVycywgdGhlbiBhc2tpbmcgdGhlIHVzZXIuIEFmdGVyIHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMsIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGRzIG9mIHRoZSBjcmVkZW50aWFsIGFyZQorICogZ3VhcmFudGVlZCB0byBiZSBub24tTlVMTC4gSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgZnVuY3Rpb24gd2lsbAorICogZGllKCkuCisgKi8KK3ZvaWQgY3JlZGVudGlhbF9maWxsKHN0cnVjdCBjcmVkZW50aWFsICopOworCisvKioKKyAqIEluZm9ybSB0aGUgY3JlZGVudGlhbCBzdWJzeXN0ZW0gdGhhdCB0aGUgcHJvdmlkZWQgY3JlZGVudGlhbHMKKyAqIHdlcmUgc3VjY2Vzc2Z1bGx5IHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uLiAgVGhpcyB3aWxsIGNhdXNlIHRoZQorICogY3JlZGVudGlhbCBzdWJzeXN0ZW0gdG8gbm90aWZ5IGFueSBoZWxwZXJzIG9mIHRoZSBhcHByb3ZhbCwgc28KKyAqIHRoYXQgdGhleSBtYXkgc3RvcmUgdGhlIHJlc3VsdCB0byBiZSB1c2VkIGFnYWluLiAgQW55IGVycm9ycworICogZnJvbSBoZWxwZXJzIGFyZSBpZ25vcmVkLgorICovCit2b2lkIGNyZWRlbnRpYWxfYXBwcm92ZShzdHJ1Y3QgY3JlZGVudGlhbCAqKTsKKworLyoqCisgKiBJbmZvcm0gdGhlIGNyZWRlbnRpYWwgc3Vic3lzdGVtIHRoYXQgdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzCisgKiBoYXZlIGJlZW4gcmVqZWN0ZWQuIFRoaXMgd2lsbCBjYXVzZSB0aGUgY3JlZGVudGlhbCBzdWJzeXN0ZW0gdG8KKyAqIG5vdGlmeSBhbnkgaGVscGVycyBvZiB0aGUgcmVqZWN0aW9uICh3aGljaCBhbGxvd3MgdGhlbSwgZm9yCisgKiBleGFtcGxlLCB0byBwdXJnZSB0aGUgaW52YWxpZCBjcmVkZW50aWFscyBmcm9tIHN0b3JhZ2UpLiBJdAorICogd2lsbCBhbHNvIGZyZWUoKSB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkcyBvZiB0aGUKKyAqIGNyZWRlbnRpYWwgYW5kIHNldCB0aGVtIHRvIE5VTEwgKHJlYWR5aW5nIHRoZSBjcmVkZW50aWFsIGZvcgorICogYW5vdGhlciBjYWxsIHRvIGBjcmVkZW50aWFsX2ZpbGxgKS4gQW55IGVycm9ycyBmcm9tIGhlbHBlcnMgYXJlCisgKiBpZ25vcmVkLgorICovCit2b2lkIGNyZWRlbnRpYWxfcmVqZWN0KHN0cnVjdCBjcmVkZW50aWFsICopOworCitpbnQgY3JlZGVudGlhbF9yZWFkKHN0cnVjdCBjcmVkZW50aWFsICosIEZJTEUgKik7Cit2b2lkIGNyZWRlbnRpYWxfd3JpdGUoY29uc3Qgc3RydWN0IGNyZWRlbnRpYWwgKiwgRklMRSAqKTsKKworLyoKKyAqIFBhcnNlIGEgdXJsIGludG8gYSBjcmVkZW50aWFsIHN0cnVjdCwgcmVwbGFjaW5nIGFueSBleGlzdGluZyBjb250ZW50cy4KKyAqCisgKiBJZiB0aGUgdXJsIGNhbid0IGJlIHBhcnNlZCAoZS5nLiwgYSBtaXNzaW5nICJwcm90bzovLyIgY29tcG9uZW50KSwgdGhlCisgKiByZXN1bHRpbmcgY3JlZGVudGlhbCB3aWxsIGJlIGVtcHR5IGFuZCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gYW4KKyAqIGVycm9yIChldmVuIGluIHRoZSAiZ2VudGx5IiBmb3JtKS4KKyAqCisgKiBJZiB3ZSBlbmNvdW50ZXIgYSBjb21wb25lbnQgd2hpY2ggY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIGEgY3JlZGVudGlhbAorICogdmFsdWUgKGUuZy4sIGJlY2F1c2UgaXQgY29udGFpbnMgYSBuZXdsaW5lKSwgdGhlICJnZW50bHkiIGZvcm0gd2lsbCByZXR1cm4KKyAqIGFuIGVycm9yIGJ1dCBsZWF2ZSB0aGUgYnJva2VuIHN0YXRlIGluIHRoZSBjcmVkZW50aWFsIG9iamVjdCBmb3IgZnVydGhlcgorICogZXhhbWluYXRpb24uICBUaGUgbm9uLWdlbnRsZSBmb3JtIHdpbGwgaXNzdWUgYSB3YXJuaW5nIHRvIHN0ZGVyciBhbmQgcmV0dXJuCisgKiBhbiBlbXB0eSBjcmVkZW50aWFsLgorICovCit2b2lkIGNyZWRlbnRpYWxfZnJvbV91cmwoc3RydWN0IGNyZWRlbnRpYWwgKiwgY29uc3QgY2hhciAqdXJsKTsKK2ludCBjcmVkZW50aWFsX2Zyb21fdXJsX2dlbnRseShzdHJ1Y3QgY3JlZGVudGlhbCAqLCBjb25zdCBjaGFyICp1cmwsIGludCBxdWlldCk7CisKK2ludCBjcmVkZW50aWFsX21hdGNoKGNvbnN0IHN0cnVjdCBjcmVkZW50aWFsICp3YW50LAorCQkgICAgIGNvbnN0IHN0cnVjdCBjcmVkZW50aWFsICpoYXZlKTsKKworI2VuZGlmIC8qIENSRURFTlRJQUxfSCAqLwpkaWZmIC0tZ2l0IGEvY3N1bS1maWxlLmMgYi9jc3VtLWZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjM1ZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvY3N1bS1maWxlLmMKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBjc3VtLWZpbGUuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBMaW51cyBUb3J2YWxkcworICoKKyAqIFNpbXBsZSBmaWxlIHdyaXRlIGluZnJhc3RydWN0dXJlIGZvciB3cml0aW5nIFNIQTEtc3VtbWVkCisgKiBmaWxlcy4gVXNlZnVsIHdoZW4geW91IHdyaXRlIGEgZmlsZSB0aGF0IHlvdSB3YW50IHRvIGJlCisgKiBhYmxlIHRvIHZlcmlmeSBoYXNuJ3QgYmVlbiBtZXNzZWQgd2l0aCBhZnRlcndhcmRzLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgImNzdW0tZmlsZS5oIgorCitzdGF0aWMgdm9pZCBmbHVzaChzdHJ1Y3QgaGFzaGZpbGUgKmYsIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KQoreworCWlmICgwIDw9IGYtPmNoZWNrX2ZkICYmIGNvdW50KSAgeworCQl1bnNpZ25lZCBjaGFyIGNoZWNrX2J1ZmZlcls4MTkyXTsKKwkJc3NpemVfdCByZXQgPSByZWFkX2luX2Z1bGwoZi0+Y2hlY2tfZmQsIGNoZWNrX2J1ZmZlciwgY291bnQpOworCisJCWlmIChyZXQgPCAwKQorCQkJZGllX2Vycm5vKCIlczogc2hhMSBmaWxlIHJlYWQgZXJyb3IiLCBmLT5uYW1lKTsKKwkJaWYgKHJldCAhPSBjb3VudCkKKwkJCWRpZSgiJXM6IHNoYTEgZmlsZSB0cnVuY2F0ZWQiLCBmLT5uYW1lKTsKKwkJaWYgKG1lbWNtcChidWYsIGNoZWNrX2J1ZmZlciwgY291bnQpKQorCQkJZGllKCJzaGExIGZpbGUgJyVzJyB2YWxpZGF0aW9uIGVycm9yIiwgZi0+bmFtZSk7CisJfQorCisJZm9yICg7OykgeworCQlpbnQgcmV0ID0geHdyaXRlKGYtPmZkLCBidWYsIGNvdW50KTsKKwkJaWYgKHJldCA+IDApIHsKKwkJCWYtPnRvdGFsICs9IHJldDsKKwkJCWRpc3BsYXlfdGhyb3VnaHB1dChmLT50cCwgZi0+dG90YWwpOworCQkJYnVmID0gKGNoYXIgKikgYnVmICsgcmV0OworCQkJY291bnQgLT0gcmV0OworCQkJaWYgKGNvdW50KQorCQkJCWNvbnRpbnVlOworCQkJcmV0dXJuOworCQl9CisJCWlmICghcmV0KQorCQkJZGllKCJzaGExIGZpbGUgJyVzJyB3cml0ZSBlcnJvci4gT3V0IG9mIGRpc2tzcGFjZSIsIGYtPm5hbWUpOworCQlkaWVfZXJybm8oInNoYTEgZmlsZSAnJXMnIHdyaXRlIGVycm9yIiwgZi0+bmFtZSk7CisJfQorfQorCit2b2lkIGhhc2hmbHVzaChzdHJ1Y3QgaGFzaGZpbGUgKmYpCit7CisJdW5zaWduZWQgb2Zmc2V0ID0gZi0+b2Zmc2V0OworCisJaWYgKG9mZnNldCkgeworCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmYtPmN0eCwgZi0+YnVmZmVyLCBvZmZzZXQpOworCQlmbHVzaChmLCBmLT5idWZmZXIsIG9mZnNldCk7CisJCWYtPm9mZnNldCA9IDA7CisJfQorfQorCitpbnQgZmluYWxpemVfaGFzaGZpbGUoc3RydWN0IGhhc2hmaWxlICpmLCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpbnQgZmQ7CisKKwloYXNoZmx1c2goZik7CisJdGhlX2hhc2hfYWxnby0+ZmluYWxfZm4oZi0+YnVmZmVyLCAmZi0+Y3R4KTsKKwlpZiAocmVzdWx0KQorCQloYXNoY3B5KHJlc3VsdCwgZi0+YnVmZmVyKTsKKwlpZiAoZmxhZ3MgJiBDU1VNX0hBU0hfSU5fU1RSRUFNKQorCQlmbHVzaChmLCBmLT5idWZmZXIsIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKKwlpZiAoZmxhZ3MgJiBDU1VNX0ZTWU5DKQorCQlmc3luY19vcl9kaWUoZi0+ZmQsIGYtPm5hbWUpOworCWlmIChmbGFncyAmIENTVU1fQ0xPU0UpIHsKKwkJaWYgKGNsb3NlKGYtPmZkKSkKKwkJCWRpZV9lcnJubygiJXM6IHNoYTEgZmlsZSBlcnJvciBvbiBjbG9zZSIsIGYtPm5hbWUpOworCQlmZCA9IDA7CisJfSBlbHNlCisJCWZkID0gZi0+ZmQ7CisJaWYgKDAgPD0gZi0+Y2hlY2tfZmQpIHsKKwkJY2hhciBkaXNjYXJkOworCQlpbnQgY250ID0gcmVhZF9pbl9mdWxsKGYtPmNoZWNrX2ZkLCAmZGlzY2FyZCwgMSk7CisJCWlmIChjbnQgPCAwKQorCQkJZGllX2Vycm5vKCIlczogZXJyb3Igd2hlbiByZWFkaW5nIHRoZSB0YWlsIG9mIHNoYTEgZmlsZSIsCisJCQkJICBmLT5uYW1lKTsKKwkJaWYgKGNudCkKKwkJCWRpZSgiJXM6IHNoYTEgZmlsZSBoYXMgdHJhaWxpbmcgZ2FyYmFnZSIsIGYtPm5hbWUpOworCQlpZiAoY2xvc2UoZi0+Y2hlY2tfZmQpKQorCQkJZGllX2Vycm5vKCIlczogc2hhMSBmaWxlIGVycm9yIG9uIGNsb3NlIiwgZi0+bmFtZSk7CisJfQorCWZyZWUoZik7CisJcmV0dXJuIGZkOworfQorCit2b2lkIGhhc2h3cml0ZShzdHJ1Y3QgaGFzaGZpbGUgKmYsIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXdoaWxlIChjb3VudCkgeworCQl1bnNpZ25lZCBvZmZzZXQgPSBmLT5vZmZzZXQ7CisJCXVuc2lnbmVkIGxlZnQgPSBzaXplb2YoZi0+YnVmZmVyKSAtIG9mZnNldDsKKwkJdW5zaWduZWQgbnIgPSBjb3VudCA+IGxlZnQgPyBsZWZ0IDogY291bnQ7CisJCWNvbnN0IHZvaWQgKmRhdGE7CisKKwkJaWYgKGYtPmRvX2NyYykKKwkJCWYtPmNyYzMyID0gY3JjMzIoZi0+Y3JjMzIsIGJ1ZiwgbnIpOworCisJCWlmIChuciA9PSBzaXplb2YoZi0+YnVmZmVyKSkgeworCQkJLyogcHJvY2VzcyBmdWxsIGJ1ZmZlciBkaXJlY3RseSB3aXRob3V0IGNvcHkgKi8KKwkJCWRhdGEgPSBidWY7CisJCX0gZWxzZSB7CisJCQltZW1jcHkoZi0+YnVmZmVyICsgb2Zmc2V0LCBidWYsIG5yKTsKKwkJCWRhdGEgPSBmLT5idWZmZXI7CisJCX0KKworCQljb3VudCAtPSBucjsKKwkJb2Zmc2V0ICs9IG5yOworCQlidWYgPSAoY2hhciAqKSBidWYgKyBucjsKKwkJbGVmdCAtPSBucjsKKwkJaWYgKCFsZWZ0KSB7CisJCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmYtPmN0eCwgZGF0YSwgb2Zmc2V0KTsKKwkJCWZsdXNoKGYsIGRhdGEsIG9mZnNldCk7CisJCQlvZmZzZXQgPSAwOworCQl9CisJCWYtPm9mZnNldCA9IG9mZnNldDsKKwl9Cit9CisKK3N0cnVjdCBoYXNoZmlsZSAqaGFzaGZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gaGFzaGZkX3Rocm91Z2hwdXQoZmQsIG5hbWUsIE5VTEwpOworfQorCitzdHJ1Y3QgaGFzaGZpbGUgKmhhc2hmZF9jaGVjayhjb25zdCBjaGFyICpuYW1lKQoreworCWludCBzaW5rLCBjaGVjazsKKwlzdHJ1Y3QgaGFzaGZpbGUgKmY7CisKKwlzaW5rID0gb3BlbigiL2Rldi9udWxsIiwgT19XUk9OTFkpOworCWlmIChzaW5rIDwgMCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gb3BlbiAvZGV2L251bGwiKTsKKwljaGVjayA9IG9wZW4obmFtZSwgT19SRE9OTFkpOworCWlmIChjaGVjayA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIG9wZW4gJyVzJyIsIG5hbWUpOworCWYgPSBoYXNoZmQoc2luaywgbmFtZSk7CisJZi0+Y2hlY2tfZmQgPSBjaGVjazsKKwlyZXR1cm4gZjsKK30KKworc3RydWN0IGhhc2hmaWxlICpoYXNoZmRfdGhyb3VnaHB1dChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwcm9ncmVzcyAqdHApCit7CisJc3RydWN0IGhhc2hmaWxlICpmID0geG1hbGxvYyhzaXplb2YoKmYpKTsKKwlmLT5mZCA9IGZkOworCWYtPmNoZWNrX2ZkID0gLTE7CisJZi0+b2Zmc2V0ID0gMDsKKwlmLT50b3RhbCA9IDA7CisJZi0+dHAgPSB0cDsKKwlmLT5uYW1lID0gbmFtZTsKKwlmLT5kb19jcmMgPSAwOworCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJmYtPmN0eCk7CisJcmV0dXJuIGY7Cit9CisKK3ZvaWQgaGFzaGZpbGVfY2hlY2twb2ludChzdHJ1Y3QgaGFzaGZpbGUgKmYsIHN0cnVjdCBoYXNoZmlsZV9jaGVja3BvaW50ICpjaGVja3BvaW50KQoreworCWhhc2hmbHVzaChmKTsKKwljaGVja3BvaW50LT5vZmZzZXQgPSBmLT50b3RhbDsKKwl0aGVfaGFzaF9hbGdvLT5jbG9uZV9mbigmY2hlY2twb2ludC0+Y3R4LCAmZi0+Y3R4KTsKK30KKworaW50IGhhc2hmaWxlX3RydW5jYXRlKHN0cnVjdCBoYXNoZmlsZSAqZiwgc3RydWN0IGhhc2hmaWxlX2NoZWNrcG9pbnQgKmNoZWNrcG9pbnQpCit7CisJb2ZmX3Qgb2Zmc2V0ID0gY2hlY2twb2ludC0+b2Zmc2V0OworCisJaWYgKGZ0cnVuY2F0ZShmLT5mZCwgb2Zmc2V0KSB8fAorCSAgICBsc2VlayhmLT5mZCwgb2Zmc2V0LCBTRUVLX1NFVCkgIT0gb2Zmc2V0KQorCQlyZXR1cm4gLTE7CisJZi0+dG90YWwgPSBvZmZzZXQ7CisJZi0+Y3R4ID0gY2hlY2twb2ludC0+Y3R4OworCWYtPm9mZnNldCA9IDA7IC8qIGhhc2hmbHVzaCgpIHdhcyBjYWxsZWQgaW4gY2hlY2twb2ludCAqLworCXJldHVybiAwOworfQorCit2b2lkIGNyYzMyX2JlZ2luKHN0cnVjdCBoYXNoZmlsZSAqZikKK3sKKwlmLT5jcmMzMiA9IGNyYzMyKDAsIE5VTEwsIDApOworCWYtPmRvX2NyYyA9IDE7Cit9CisKK3VpbnQzMl90IGNyYzMyX2VuZChzdHJ1Y3QgaGFzaGZpbGUgKmYpCit7CisJZi0+ZG9fY3JjID0gMDsKKwlyZXR1cm4gZi0+Y3JjMzI7Cit9CmRpZmYgLS1naXQgYS9jc3VtLWZpbGUuaCBiL2NzdW0tZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5Y2JkMzEKLS0tIC9kZXYvbnVsbAorKysgYi9jc3VtLWZpbGUuaApAQCAtMCwwICsxLDY1IEBACisjaWZuZGVmIENTVU1fRklMRV9ICisjZGVmaW5lIENTVU1fRklMRV9ICisKKyNpbmNsdWRlICJoYXNoLmgiCisKK3N0cnVjdCBwcm9ncmVzczsKKworLyogQSBTSEExLXByb3RlY3RlZCBmaWxlICovCitzdHJ1Y3QgaGFzaGZpbGUgeworCWludCBmZDsKKwlpbnQgY2hlY2tfZmQ7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwlnaXRfaGFzaF9jdHggY3R4OworCW9mZl90IHRvdGFsOworCXN0cnVjdCBwcm9ncmVzcyAqdHA7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZG9fY3JjOworCXVpbnQzMl90IGNyYzMyOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzgxOTJdOworfTsKKworLyogQ2hlY2twb2ludCAqLworc3RydWN0IGhhc2hmaWxlX2NoZWNrcG9pbnQgeworCW9mZl90IG9mZnNldDsKKwlnaXRfaGFzaF9jdHggY3R4OworfTsKKwordm9pZCBoYXNoZmlsZV9jaGVja3BvaW50KHN0cnVjdCBoYXNoZmlsZSAqLCBzdHJ1Y3QgaGFzaGZpbGVfY2hlY2twb2ludCAqKTsKK2ludCBoYXNoZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaGFzaGZpbGUgKiwgc3RydWN0IGhhc2hmaWxlX2NoZWNrcG9pbnQgKik7CisKKy8qIGZpbmFsaXplX2hhc2hmaWxlIGZsYWdzICovCisjZGVmaW5lIENTVU1fQ0xPU0UJCTEKKyNkZWZpbmUgQ1NVTV9GU1lOQwkJMgorI2RlZmluZSBDU1VNX0hBU0hfSU5fU1RSRUFNCTQKKworc3RydWN0IGhhc2hmaWxlICpoYXNoZmQoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lKTsKK3N0cnVjdCBoYXNoZmlsZSAqaGFzaGZkX2NoZWNrKGNvbnN0IGNoYXIgKm5hbWUpOworc3RydWN0IGhhc2hmaWxlICpoYXNoZmRfdGhyb3VnaHB1dChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwcm9ncmVzcyAqdHApOworaW50IGZpbmFsaXplX2hhc2hmaWxlKHN0cnVjdCBoYXNoZmlsZSAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGludCk7Cit2b2lkIGhhc2h3cml0ZShzdHJ1Y3QgaGFzaGZpbGUgKiwgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwordm9pZCBoYXNoZmx1c2goc3RydWN0IGhhc2hmaWxlICpmKTsKK3ZvaWQgY3JjMzJfYmVnaW4oc3RydWN0IGhhc2hmaWxlICopOwordWludDMyX3QgY3JjMzJfZW5kKHN0cnVjdCBoYXNoZmlsZSAqKTsKKworLyoKKyAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBmZWQgdG8gdGhlIGhhc2hmaWxlIHNvIGZhciAoaW5jbHVkaW5nIG9uZXMKKyAqIHRoYXQgaGF2ZSBub3QgYmVlbiB3cml0dGVuIG91dCB0byB0aGUgZGVzY3JpcHRvciB5ZXQpLgorICovCitzdGF0aWMgaW5saW5lIG9mZl90IGhhc2hmaWxlX3RvdGFsKHN0cnVjdCBoYXNoZmlsZSAqZikKK3sKKwlyZXR1cm4gZi0+dG90YWwgKyBmLT5vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYXNod3JpdGVfdTgoc3RydWN0IGhhc2hmaWxlICpmLCB1aW50OF90IGRhdGEpCit7CisJaGFzaHdyaXRlKGYsICZkYXRhLCBzaXplb2YoZGF0YSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGFzaHdyaXRlX2JlMzIoc3RydWN0IGhhc2hmaWxlICpmLCB1aW50MzJfdCBkYXRhKQoreworCWRhdGEgPSBodG9ubChkYXRhKTsKKwloYXNod3JpdGUoZiwgJmRhdGEsIHNpemVvZihkYXRhKSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3R5cGUuYyBiL2N0eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMwMjI1YwotLS0gL2Rldi9udWxsCisrKyBiL2N0eXBlLmMKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIFNhbmUgbG9jYWxlLWluZGVwZW5kZW50LCBBU0NJSSBjdHlwZS4KKyAqCisgKiBObyBzdXJwcmlzZXMsIGFuZCB3b3JrcyB3aXRoIHNpZ25lZCBhbmQgdW5zaWduZWQgY2hhcnMuCisgKi8KKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKworZW51bSB7CisJUyA9IEdJVF9TUEFDRSwKKwlBID0gR0lUX0FMUEhBLAorCUQgPSBHSVRfRElHSVQsCisJRyA9IEdJVF9HTE9CX1NQRUNJQUwsCS8qICosID8sIFssIFxcICovCisJUiA9IEdJVF9SRUdFWF9TUEVDSUFMLAkvKiAkLCAoLCApLCArLCAuLCBeLCB7LCB8ICovCisJUCA9IEdJVF9QQVRIU1BFQ19NQUdJQywgLyogb3RoZXIgbm9uLWFsbnVtLCBleGNlcHQgZm9yIF0gYW5kIH0gKi8KKwlYID0gR0lUX0NOVFJMLAorCVUgPSBHSVRfUFVOQ1QsCisJWiA9IEdJVF9DTlRSTCB8IEdJVF9TUEFDRQorfTsKKworY29uc3QgdW5zaWduZWQgY2hhciBzYW5lX2N0eXBlWzI1Nl0gPSB7CisJWCwgWCwgWCwgWCwgWCwgWCwgWCwgWCwgWCwgWiwgWiwgWCwgWCwgWiwgWCwgWCwJCS8qICAgMC4uIDE1ICovCisJWCwgWCwgWCwgWCwgWCwgWCwgWCwgWCwgWCwgWCwgWCwgWCwgWCwgWCwgWCwgWCwJCS8qICAxNi4uIDMxICovCisJUywgUCwgUCwgUCwgUiwgUCwgUCwgUCwgUiwgUiwgRywgUiwgUCwgUCwgUiwgUCwJCS8qICAzMi4uIDQ3ICovCisJRCwgRCwgRCwgRCwgRCwgRCwgRCwgRCwgRCwgRCwgUCwgUCwgUCwgUCwgUCwgRywJCS8qICA0OC4uIDYzICovCisJUCwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwJCS8qICA2NC4uIDc5ICovCisJQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgRywgRywgVSwgUiwgUCwJCS8qICA4MC4uIDk1ICovCisJUCwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwJCS8qICA5Ni4uMTExICovCisJQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgQSwgUiwgUiwgVSwgUCwgWCwJCS8qIDExMi4uMTI3ICovCisJLyogTm90aGluZyBpbiB0aGUgMTI4Li4gcmFuZ2UgKi8KK307CisKKy8qIEZvciBjYXNlLWluc2Vuc2l0aXZlIGt3c2V0ICovCitjb25zdCB1bnNpZ25lZCBjaGFyIHRvbG93ZXJfdHJhbnNfdGJsWzI1Nl0gPSB7CisJMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAorCTB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisJMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKKwkgJyAnLCAgJyEnLCAgJyInLCAgJyMnLCAgJyQnLCAgJyUnLCAgJyYnLCAweDI3LAorCSAnKCcsICAnKScsICAnKicsICAnKycsICAnLCcsICAnLScsICAnLicsICAnLycsCisJICcwJywgICcxJywgICcyJywgICczJywgICc0JywgICc1JywgICc2JywgICc3JywKKwkgJzgnLCAgJzknLCAgJzonLCAgJzsnLCAgJzwnLCAgJz0nLCAgJz4nLCAgJz8nLAorCSAnQCcsICAnYScsICAnYicsICAnYycsICAnZCcsICAnZScsICAnZicsICAnZycsCisJICdoJywgICdpJywgICdqJywgICdrJywgICdsJywgICdtJywgICduJywgICdvJywKKwkgJ3AnLCAgJ3EnLCAgJ3InLCAgJ3MnLCAgJ3QnLCAgJ3UnLCAgJ3YnLCAgJ3cnLAorCSAneCcsICAneScsICAneicsICAnWycsIDB4NWMsICAnXScsICAnXicsICAnXycsCisJICdgJywgICdhJywgICdiJywgICdjJywgICdkJywgICdlJywgICdmJywgICdnJywKKwkgJ2gnLCAgJ2knLCAgJ2onLCAgJ2snLCAgJ2wnLCAgJ20nLCAgJ24nLCAgJ28nLAorCSAncCcsICAncScsICAncicsICAncycsICAndCcsICAndScsICAndicsICAndycsCisJICd4JywgICd5JywgICd6JywgICd7JywgICd8JywgICd9JywgICd+JywgMHg3ZiwKKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmLAorCTB4YTAsIDB4YTEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsCisJMHhhOCwgMHhhOSwgMHhhYSwgMHhhYiwgMHhhYywgMHhhZCwgMHhhZSwgMHhhZiwKKwkweGIwLCAweGIxLCAweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGI2LCAweGI3LAorCTB4YjgsIDB4YjksIDB4YmEsIDB4YmIsIDB4YmMsIDB4YmQsIDB4YmUsIDB4YmYsCisJMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywKKwkweGM4LCAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAweGNlLCAweGNmLAorCTB4ZDAsIDB4ZDEsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsCisJMHhkOCwgMHhkOSwgMHhkYSwgMHhkYiwgMHhkYywgMHhkZCwgMHhkZSwgMHhkZiwKKwkweGUwLCAweGUxLCAweGUyLCAweGUzLCAweGU0LCAweGU1LCAweGU2LCAweGU3LAorCTB4ZTgsIDB4ZTksIDB4ZWEsIDB4ZWIsIDB4ZWMsIDB4ZWQsIDB4ZWUsIDB4ZWYsCisJMHhmMCwgMHhmMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywKKwkweGY4LCAweGY5LCAweGZhLCAweGZiLCAweGZjLCAweGZkLCAweGZlLCAweGZmLAorfTsKZGlmZiAtLWdpdCBhL2RhZW1vbi5jIGIvZGFlbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2NjllZAotLS0gL2Rldi9udWxsCisrKyBiL2RhZW1vbi5jCkBAIC0wLDAgKzEsMTQ4NSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKKyNpZmRlZiBOT19JTklUR1JPVVBTCisjZGVmaW5lIGluaXRncm91cHMoeCwgeSkgKDApIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCitzdGF0aWMgZW51bSBsb2dfZGVzdGluYXRpb24geworCUxPR19ERVNUSU5BVElPTl9VTlNFVCA9IC0xLAorCUxPR19ERVNUSU5BVElPTl9OT05FID0gMCwKKwlMT0dfREVTVElOQVRJT05fU1RERVJSID0gMSwKKwlMT0dfREVTVElOQVRJT05fU1lTTE9HID0gMiwKK30gbG9nX2Rlc3RpbmF0aW9uID0gTE9HX0RFU1RJTkFUSU9OX1VOU0VUOworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCByZXVzZWFkZHI7CitzdGF0aWMgaW50IGluZm9ybWF0aXZlX2Vycm9yczsKKworc3RhdGljIGNvbnN0IGNoYXIgZGFlbW9uX3VzYWdlW10gPQorImdpdCBkYWVtb24gWy0tdmVyYm9zZV0gWy0tc3lzbG9nXSBbLS1leHBvcnQtYWxsXVxuIgorIiAgICAgICAgICAgWy0tdGltZW91dD08bj5dIFstLWluaXQtdGltZW91dD08bj5dIFstLW1heC1jb25uZWN0aW9ucz08bj5dXG4iCisiICAgICAgICAgICBbLS1zdHJpY3QtcGF0aHNdIFstLWJhc2UtcGF0aD08cGF0aD5dIFstLWJhc2UtcGF0aC1yZWxheGVkXVxuIgorIiAgICAgICAgICAgWy0tdXNlci1wYXRoIHwgLS11c2VyLXBhdGg9PHBhdGg+XVxuIgorIiAgICAgICAgICAgWy0taW50ZXJwb2xhdGVkLXBhdGg9PHBhdGg+XVxuIgorIiAgICAgICAgICAgWy0tcmV1c2VhZGRyXSBbLS1waWQtZmlsZT08ZmlsZT5dXG4iCisiICAgICAgICAgICBbLS0oZW5hYmxlfGRpc2FibGV8YWxsb3ctb3ZlcnJpZGV8Zm9yYmlkLW92ZXJyaWRlKT08c2VydmljZT5dXG4iCisiICAgICAgICAgICBbLS1hY2Nlc3MtaG9vaz08cGF0aD5dXG4iCisiICAgICAgICAgICBbLS1pbmV0ZCB8IFstLWxpc3Rlbj08aG9zdF9vcl9pcGFkZHI+XSBbLS1wb3J0PTxuPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgWy0tZGV0YWNoXSBbLS11c2VyPTx1c2VyPiBbLS1ncm91cD08Z3JvdXA+XV1cbiIKKyIgICAgICAgICAgIFstLWxvZy1kZXN0aW5hdGlvbj0oc3RkZXJyfHN5c2xvZ3xub25lKV1cbiIKKyIgICAgICAgICAgIFs8ZGlyZWN0b3J5Pi4uLl0iOworCisvKiBMaXN0IG9mIGFjY2VwdGFibGUgcGF0aG5hbWUgcHJlZml4ZXMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoqb2tfcGF0aHM7CitzdGF0aWMgaW50IHN0cmljdF9wYXRoczsKKworLyogSWYgdGhpcyBpcyBzZXQsIGdpdC1kYWVtb24tZXhwb3J0LW9rIGlzIG5vdCByZXF1aXJlZCAqLworc3RhdGljIGludCBleHBvcnRfYWxsX3RyZWVzOworCisvKiBUYWtlIGFsbCBwYXRocyByZWxhdGl2ZSB0byB0aGlzIG9uZSBpZiBub24tTlVMTCAqLworc3RhdGljIGNvbnN0IGNoYXIgKmJhc2VfcGF0aDsKK3N0YXRpYyBjb25zdCBjaGFyICppbnRlcnBvbGF0ZWRfcGF0aDsKK3N0YXRpYyBpbnQgYmFzZV9wYXRoX3JlbGF4ZWQ7CisKKy8qIElmIGRlZmluZWQsIH51c2VyIG5vdGF0aW9uIGlzIGFsbG93ZWQgYW5kIHRoZSBzdHJpbmcgaXMgaW5zZXJ0ZWQKKyAqIGFmdGVyIH51c2VyLy4gIEUuZy4gYSByZXF1ZXN0IHRvIGdpdDovL2hvc3QvfmFsaWNlL2Zyb3R6IHdvdWxkCisgKiBnbyB0byAvaG9tZS9hbGljZS9wdWJfZ2l0L2Zyb3R6IHdpdGggLS11c2VyLXBhdGg9cHViX2dpdC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnVzZXJfcGF0aDsKKworLyogVGltZW91dCwgYW5kIGluaXRpYWwgdGltZW91dCAqLworc3RhdGljIHVuc2lnbmVkIGludCB0aW1lb3V0Oworc3RhdGljIHVuc2lnbmVkIGludCBpbml0X3RpbWVvdXQ7CisKK3N0cnVjdCBob3N0aW5mbyB7CisJc3RydWN0IHN0cmJ1ZiBob3N0bmFtZTsKKwlzdHJ1Y3Qgc3RyYnVmIGNhbm9uX2hvc3RuYW1lOworCXN0cnVjdCBzdHJidWYgaXBfYWRkcmVzczsKKwlzdHJ1Y3Qgc3RyYnVmIHRjcF9wb3J0OworCXVuc2lnbmVkIGludCBob3N0bmFtZV9sb29rdXBfZG9uZToxOworCXVuc2lnbmVkIGludCBzYXdfZXh0ZW5kZWRfYXJnczoxOworfTsKKworc3RhdGljIHZvaWQgbG9va3VwX2hvc3RuYW1lKHN0cnVjdCBob3N0aW5mbyAqaGkpOworCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2Nhbm9uX2hvc3RuYW1lKHN0cnVjdCBob3N0aW5mbyAqaGkpCit7CisJbG9va3VwX2hvc3RuYW1lKGhpKTsKKwlyZXR1cm4gaGktPmNhbm9uX2hvc3RuYW1lLmJ1ZjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9pcF9hZGRyZXNzKHN0cnVjdCBob3N0aW5mbyAqaGkpCit7CisJbG9va3VwX2hvc3RuYW1lKGhpKTsKKwlyZXR1cm4gaGktPmlwX2FkZHJlc3MuYnVmOworfQorCitzdGF0aWMgdm9pZCBsb2dyZXBvcnQoaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCXN3aXRjaCAobG9nX2Rlc3RpbmF0aW9uKSB7CisJY2FzZSBMT0dfREVTVElOQVRJT05fU1lTTE9HOiB7CisJCWNoYXIgYnVmWzEwMjRdOworCQl2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZXJyLCBwYXJhbXMpOworCQlzeXNsb2cocHJpb3JpdHksICIlcyIsIGJ1Zik7CisJCWJyZWFrOworCX0KKwljYXNlIExPR19ERVNUSU5BVElPTl9TVERFUlI6CisJCS8qCisJCSAqIFNpbmNlIHN0ZGVyciBpcyBzZXQgdG8gYnVmZmVyZWQgbW9kZSwgdGhlCisJCSAqIGxvZ2dpbmcgb2YgZGlmZmVyZW50IHByb2Nlc3NlcyB3aWxsIG5vdCBvdmVybGFwCisJCSAqIHVubGVzcyB0aGV5IG92ZXJmbG93IHRoZSAocmF0aGVyIGJpZykgYnVmZmVycy4KKwkJICovCisJCWZwcmludGYoc3RkZXJyLCAiWyUiUFJJdU1BWCJdICIsICh1aW50bWF4X3QpZ2V0cGlkKCkpOworCQl2ZnByaW50ZihzdGRlcnIsIGVyciwgcGFyYW1zKTsKKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwkJZmZsdXNoKHN0ZGVycik7CisJCWJyZWFrOworCWNhc2UgTE9HX0RFU1RJTkFUSU9OX05PTkU6CisJCWJyZWFrOworCWNhc2UgTE9HX0RFU1RJTkFUSU9OX1VOU0VUOgorCQlCVUcoImxvZyBkZXN0aW5hdGlvbiBub3QgaW5pdGlhbGl6ZWQgY29ycmVjdGx5Iik7CisJfQorfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorc3RhdGljIHZvaWQgbG9nZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCWxvZ3JlcG9ydChMT0dfRVJSLCBlcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCitzdGF0aWMgdm9pZCBsb2dpbmZvKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCWlmICghdmVyYm9zZSkKKwkJcmV0dXJuOworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwlsb2dyZXBvcnQoTE9HX0lORk8sIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKworc3RhdGljIHZvaWQgTk9SRVRVUk4gZGFlbW9uX2RpZShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCWxvZ3JlcG9ydChMT0dfRVJSLCBlcnIsIHBhcmFtcyk7CisJZXhpdCgxKTsKK30KKworc3RydWN0IGV4cGFuZF9wYXRoX2NvbnRleHQgeworCWNvbnN0IGNoYXIgKmRpcmVjdG9yeTsKKwlzdHJ1Y3QgaG9zdGluZm8gKmhvc3RpbmZvOworfTsKKworc3RhdGljIHNpemVfdCBleHBhbmRfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGxhY2Vob2xkZXIsIHZvaWQgKmN0eCkKK3sKKwlzdHJ1Y3QgZXhwYW5kX3BhdGhfY29udGV4dCAqY29udGV4dCA9IGN0eDsKKwlzdHJ1Y3QgaG9zdGluZm8gKmhpID0gY29udGV4dC0+aG9zdGluZm87CisKKwlzd2l0Y2ggKHBsYWNlaG9sZGVyWzBdKSB7CisJY2FzZSAnSCc6CisJCXN0cmJ1Zl9hZGRidWYoc2IsICZoaS0+aG9zdG5hbWUpOworCQlyZXR1cm4gMTsKKwljYXNlICdDJzoKKwkJaWYgKHBsYWNlaG9sZGVyWzFdID09ICdIJykgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgZ2V0X2Nhbm9uX2hvc3RuYW1lKGhpKSk7CisJCQlyZXR1cm4gMjsKKwkJfQorCQlicmVhazsKKwljYXNlICdJJzoKKwkJaWYgKHBsYWNlaG9sZGVyWzFdID09ICdQJykgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgZ2V0X2lwX2FkZHJlc3MoaGkpKTsKKwkJCXJldHVybiAyOworCQl9CisJCWJyZWFrOworCWNhc2UgJ1AnOgorCQlzdHJidWZfYWRkYnVmKHNiLCAmaGktPnRjcF9wb3J0KTsKKwkJcmV0dXJuIDE7CisJY2FzZSAnRCc6CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIGNvbnRleHQtPmRpcmVjdG9yeSk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfb2soY29uc3QgY2hhciAqZGlyZWN0b3J5LCBzdHJ1Y3QgaG9zdGluZm8gKmhpKQoreworCXN0YXRpYyBjaGFyIHJwYXRoW1BBVEhfTUFYXTsKKwlzdGF0aWMgY2hhciBpbnRlcnBfcGF0aFtQQVRIX01BWF07CisJc2l6ZV90IHJsZW47CisJY29uc3QgY2hhciAqcGF0aDsKKwljb25zdCBjaGFyICpkaXI7CisKKwlkaXIgPSBkaXJlY3Rvcnk7CisKKwlpZiAoZGFlbW9uX2F2b2lkX2FsaWFzKGRpcikpIHsKKwkJbG9nZXJyb3IoIiclcyc6IGFsaWFzZWQiLCBkaXIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoKmRpciA9PSAnficpIHsKKwkJaWYgKCF1c2VyX3BhdGgpIHsKKwkJCWxvZ2Vycm9yKCInJXMnOiBVc2VyLXBhdGggbm90IGFsbG93ZWQiLCBkaXIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaWYgKCp1c2VyX3BhdGgpIHsKKwkJCS8qIEdvdCBlaXRoZXIgIn5hbGljZSIgb3IgIn5hbGljZS9mb28iOworCQkJICogcmV3cml0ZSB0aGVtIHRvICJ+YWxpY2UvJXMiIG9yCisJCQkgKiAifmFsaWNlLyVzL2ZvbyIuCisJCQkgKi8KKwkJCWludCBuYW1sZW4sIHJlc3RsZW4gPSBzdHJsZW4oZGlyKTsKKwkJCWNvbnN0IGNoYXIgKnNsYXNoID0gc3RyY2hyKGRpciwgJy8nKTsKKwkJCWlmICghc2xhc2gpCisJCQkJc2xhc2ggPSBkaXIgKyByZXN0bGVuOworCQkJbmFtbGVuID0gc2xhc2ggLSBkaXI7CisJCQlyZXN0bGVuIC09IG5hbWxlbjsKKwkJCWxvZ2luZm8oInVzZXJwYXRoIDwlcz4sIHJlcXVlc3QgPCVzPiwgbmFtbGVuICVkLCByZXN0bGVuICVkLCBzbGFzaCA8JXM+IiwgdXNlcl9wYXRoLCBkaXIsIG5hbWxlbiwgcmVzdGxlbiwgc2xhc2gpOworCQkJcmxlbiA9IHNucHJpbnRmKHJwYXRoLCBzaXplb2YocnBhdGgpLCAiJS4qcy8lcyUuKnMiLAorCQkJCQluYW1sZW4sIGRpciwgdXNlcl9wYXRoLCByZXN0bGVuLCBzbGFzaCk7CisJCQlpZiAocmxlbiA+PSBzaXplb2YocnBhdGgpKSB7CisJCQkJbG9nZXJyb3IoInVzZXItcGF0aCB0b28gbGFyZ2U6ICVzIiwgcnBhdGgpOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJZGlyID0gcnBhdGg7CisJCX0KKwl9CisJZWxzZSBpZiAoaW50ZXJwb2xhdGVkX3BhdGggJiYgaGktPnNhd19leHRlbmRlZF9hcmdzKSB7CisJCXN0cnVjdCBzdHJidWYgZXhwYW5kZWRfcGF0aCA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3QgZXhwYW5kX3BhdGhfY29udGV4dCBjb250ZXh0OworCisJCWNvbnRleHQuZGlyZWN0b3J5ID0gZGlyZWN0b3J5OworCQljb250ZXh0Lmhvc3RpbmZvID0gaGk7CisKKwkJaWYgKCpkaXIgIT0gJy8nKSB7CisJCQkvKiBBbGxvdyBvbmx5IGFic29sdXRlICovCisJCQlsb2dlcnJvcigiJyVzJzogTm9uLWFic29sdXRlIHBhdGggZGVuaWVkIChpbnRlcnBvbGF0ZWQtcGF0aCBhY3RpdmUpIiwgZGlyKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJc3RyYnVmX2V4cGFuZCgmZXhwYW5kZWRfcGF0aCwgaW50ZXJwb2xhdGVkX3BhdGgsCisJCQkgICAgICBleHBhbmRfcGF0aCwgJmNvbnRleHQpOworCisJCXJsZW4gPSBzdHJsY3B5KGludGVycF9wYXRoLCBleHBhbmRlZF9wYXRoLmJ1ZiwKKwkJCSAgICAgICBzaXplb2YoaW50ZXJwX3BhdGgpKTsKKwkJaWYgKHJsZW4gPj0gc2l6ZW9mKGludGVycF9wYXRoKSkgeworCQkJbG9nZXJyb3IoImludGVycG9sYXRlZCBwYXRoIHRvbyBsYXJnZTogJXMiLAorCQkJCSBpbnRlcnBfcGF0aCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCXN0cmJ1Zl9yZWxlYXNlKCZleHBhbmRlZF9wYXRoKTsKKwkJbG9naW5mbygiSW50ZXJwb2xhdGVkIGRpciAnJXMnIiwgaW50ZXJwX3BhdGgpOworCisJCWRpciA9IGludGVycF9wYXRoOworCX0KKwllbHNlIGlmIChiYXNlX3BhdGgpIHsKKwkJaWYgKCpkaXIgIT0gJy8nKSB7CisJCQkvKiBBbGxvdyBvbmx5IGFic29sdXRlICovCisJCQlsb2dlcnJvcigiJyVzJzogTm9uLWFic29sdXRlIHBhdGggZGVuaWVkIChiYXNlLXBhdGggYWN0aXZlKSIsIGRpcik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlybGVuID0gc25wcmludGYocnBhdGgsIHNpemVvZihycGF0aCksICIlcyVzIiwgYmFzZV9wYXRoLCBkaXIpOworCQlpZiAocmxlbiA+PSBzaXplb2YocnBhdGgpKSB7CisJCQlsb2dlcnJvcigiYmFzZS1wYXRoIHRvbyBsYXJnZTogJXMiLCBycGF0aCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlkaXIgPSBycGF0aDsKKwl9CisKKwlwYXRoID0gZW50ZXJfcmVwbyhkaXIsIHN0cmljdF9wYXRocyk7CisJaWYgKCFwYXRoICYmIGJhc2VfcGF0aCAmJiBiYXNlX3BhdGhfcmVsYXhlZCkgeworCQkvKgorCQkgKiBpZiB3ZSBmYWlsIGFuZCBiYXNlX3BhdGhfcmVsYXhlZCBpcyBlbmFibGVkLCB0cnkgd2l0aG91dAorCQkgKiBwcmVmaXhpbmcgdGhlIGJhc2UgcGF0aAorCQkgKi8KKwkJZGlyID0gZGlyZWN0b3J5OworCQlwYXRoID0gZW50ZXJfcmVwbyhkaXIsIHN0cmljdF9wYXRocyk7CisJfQorCisJaWYgKCFwYXRoKSB7CisJCWxvZ2Vycm9yKCInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIGdpdCByZXBvc2l0b3J5IiwgZGlyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCBva19wYXRocyAmJiAqb2tfcGF0aHMgKSB7CisJCWNvbnN0IGNoYXIgKipwcDsKKwkJaW50IHBhdGhsZW4gPSBzdHJsZW4ocGF0aCk7CisKKwkJLyogVGhlIHZhbGlkYXRpb24gaXMgZG9uZSBvbiB0aGUgcGF0aHMgYWZ0ZXIgZW50ZXJfcmVwbworCQkgKiBhcHBlbmRzIG9wdGlvbmFsIHsuZ2l0LC5naXQvLmdpdH0gYW5kIGZyaWVuZHMsIGJ1dAorCQkgKiBpdCBkb2VzIG5vdCB1c2UgZ2V0Y3dkKCkuICBTbyBpZiB5b3VyIC9wdWIgaXMKKwkJICogYSBzeW1saW5rIHRvIC9tbnQvcHViLCB5b3UgY2FuIHdoaXRlbGlzdCAvcHViIGFuZAorCQkgKiBkbyBub3QgaGF2ZSB0byBzYXkgL21udC9wdWIuCisJCSAqIERvIG5vdCBzYXkgL3B1Yi8uCisJCSAqLworCQlmb3IgKCBwcCA9IG9rX3BhdGhzIDsgKnBwIDsgcHArKyApIHsKKwkJCWludCBsZW4gPSBzdHJsZW4oKnBwKTsKKwkJCWlmIChsZW4gPD0gcGF0aGxlbiAmJgorCQkJICAgICFtZW1jbXAoKnBwLCBwYXRoLCBsZW4pICYmCisJCQkgICAgKHBhdGhbbGVuXSA9PSAnXDAnIHx8CisJCQkgICAgICghc3RyaWN0X3BhdGhzICYmIHBhdGhbbGVuXSA9PSAnLycpKSkKKwkJCQlyZXR1cm4gcGF0aDsKKwkJfQorCX0KKwllbHNlIHsKKwkJLyogYmUgYmFja3dhcmRzIGNvbXBhdGlibGUgKi8KKwkJaWYgKCFzdHJpY3RfcGF0aHMpCisJCQlyZXR1cm4gcGF0aDsKKwl9CisKKwlsb2dlcnJvcigiJyVzJzogbm90IGluIHdoaXRlbGlzdCIsIHBhdGgpOworCXJldHVybiBOVUxMOwkJLyogRmFsbHRocm91Z2guIERlbnkgYnkgZGVmYXVsdCAqLworfQorCit0eXBlZGVmIGludCAoKmRhZW1vbl9zZXJ2aWNlX2ZuKShjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqZW52KTsKK3N0cnVjdCBkYWVtb25fc2VydmljZSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpjb25maWdfbmFtZTsKKwlkYWVtb25fc2VydmljZV9mbiBmbjsKKwlpbnQgZW5hYmxlZDsKKwlpbnQgb3ZlcnJpZGFibGU7Cit9OworCitzdGF0aWMgaW50IGRhZW1vbl9lcnJvcihjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlpZiAoIWluZm9ybWF0aXZlX2Vycm9ycykKKwkJbXNnID0gImFjY2VzcyBkZW5pZWQgb3IgcmVwb3NpdG9yeSBub3QgZXhwb3J0ZWQiOworCXBhY2tldF93cml0ZV9mbXQoMSwgIkVSUiAlczogJXMiLCBtc2csIGRpcik7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYWNjZXNzX2hvb2s7CisKK3N0YXRpYyBpbnQgcnVuX2FjY2Vzc19ob29rKHN0cnVjdCBkYWVtb25fc2VydmljZSAqc2VydmljZSwgY29uc3QgY2hhciAqZGlyLAorCQkJICAgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGhvc3RpbmZvICpoaSkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmFyZ3ZbOF07CisJY29uc3QgY2hhciAqKmFyZyA9IGFyZ3Y7CisJY2hhciAqZW9sOworCWludCBzZWVuX2Vycm9ycyA9IDA7CisKKwkqYXJnKysgPSBhY2Nlc3NfaG9vazsKKwkqYXJnKysgPSBzZXJ2aWNlLT5uYW1lOworCSphcmcrKyA9IHBhdGg7CisJKmFyZysrID0gaGktPmhvc3RuYW1lLmJ1ZjsKKwkqYXJnKysgPSBnZXRfY2Fub25faG9zdG5hbWUoaGkpOworCSphcmcrKyA9IGdldF9pcF9hZGRyZXNzKGhpKTsKKwkqYXJnKysgPSBoaS0+dGNwX3BvcnQuYnVmOworCSphcmcgPSBOVUxMOworCisJY2hpbGQudXNlX3NoZWxsID0gMTsKKwljaGlsZC5hcmd2ID0gYXJndjsKKwljaGlsZC5ub19zdGRpbiA9IDE7CisJY2hpbGQubm9fc3RkZXJyID0gMTsKKwljaGlsZC5vdXQgPSAtMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2hpbGQpKSB7CisJCWxvZ2Vycm9yKCJkYWVtb24gYWNjZXNzIGhvb2sgJyVzJyBmYWlsZWQgdG8gc3RhcnQiLAorCQkJIGFjY2Vzc19ob29rKTsKKwkJZ290byBlcnJvcl9yZXR1cm47CisJfQorCWlmIChzdHJidWZfcmVhZCgmYnVmLCBjaGlsZC5vdXQsIDApIDwgMCkgeworCQlsb2dlcnJvcigiZmFpbGVkIHRvIHJlYWQgZnJvbSBwaXBlIHRvIGRhZW1vbiBhY2Nlc3MgaG9vayAnJXMnIiwKKwkJCSBhY2Nlc3NfaG9vayk7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc2Vlbl9lcnJvcnMgPSAxOworCX0KKwlpZiAoY2xvc2UoY2hpbGQub3V0KSA8IDApIHsKKwkJbG9nZXJyb3IoImZhaWxlZCB0byBjbG9zZSBwaXBlIHRvIGRhZW1vbiBhY2Nlc3MgaG9vayAnJXMnIiwKKwkJCSBhY2Nlc3NfaG9vayk7CisJCXNlZW5fZXJyb3JzID0gMTsKKwl9CisJaWYgKGZpbmlzaF9jb21tYW5kKCZjaGlsZCkpCisJCXNlZW5fZXJyb3JzID0gMTsKKworCWlmICghc2Vlbl9lcnJvcnMpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybiAwOworCX0KKworZXJyb3JfcmV0dXJuOgorCXN0cmJ1Zl9sdHJpbSgmYnVmKTsKKwlpZiAoIWJ1Zi5sZW4pCisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgInNlcnZpY2UgcmVqZWN0ZWQiKTsKKwllb2wgPSBzdHJjaHIoYnVmLmJ1ZiwgJ1xuJyk7CisJaWYgKGVvbCkKKwkJKmVvbCA9ICdcMCc7CisJZXJybm8gPSBFQUNDRVM7CisJZGFlbW9uX2Vycm9yKGRpciwgYnVmLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHJ1bl9zZXJ2aWNlKGNvbnN0IGNoYXIgKmRpciwgc3RydWN0IGRhZW1vbl9zZXJ2aWNlICpzZXJ2aWNlLAorCQkgICAgICAgc3RydWN0IGhvc3RpbmZvICpoaSwgY29uc3Qgc3RydWN0IGFyZ3ZfYXJyYXkgKmVudikKK3sKKwljb25zdCBjaGFyICpwYXRoOworCWludCBlbmFibGVkID0gc2VydmljZS0+ZW5hYmxlZDsKKwlzdHJ1Y3Qgc3RyYnVmIHZhciA9IFNUUkJVRl9JTklUOworCisJbG9naW5mbygiUmVxdWVzdCAlcyBmb3IgJyVzJyIsIHNlcnZpY2UtPm5hbWUsIGRpcik7CisKKwlpZiAoIWVuYWJsZWQgJiYgIXNlcnZpY2UtPm92ZXJyaWRhYmxlKSB7CisJCWxvZ2Vycm9yKCInJXMnOiBzZXJ2aWNlIG5vdCBlbmFibGVkLiIsIHNlcnZpY2UtPm5hbWUpOworCQllcnJubyA9IEVBQ0NFUzsKKwkJcmV0dXJuIGRhZW1vbl9lcnJvcihkaXIsICJzZXJ2aWNlIG5vdCBlbmFibGVkIik7CisJfQorCisJaWYgKCEocGF0aCA9IHBhdGhfb2soZGlyLCBoaSkpKQorCQlyZXR1cm4gZGFlbW9uX2Vycm9yKGRpciwgIm5vIHN1Y2ggcmVwb3NpdG9yeSIpOworCisJLyoKKwkgKiBTZWN1cml0eSBvbiB0aGUgY2hlYXAuCisJICoKKwkgKiBXZSB3YW50IGEgcmVhZGFibGUgSEVBRCwgdXNhYmxlICJvYmplY3RzIiBkaXJlY3RvcnksIGFuZAorCSAqIGEgImdpdC1kYWVtb24tZXhwb3J0LW9rIiBmbGFnIHRoYXQgc2F5cyB0aGF0IHRoZSBvdGhlciBzaWRlCisJICogaXMgb2sgd2l0aCB1cyBkb2luZyB0aGlzLgorCSAqCisJICogcGF0aF9vaygpIHVzZXMgZW50ZXJfcmVwbygpIGFuZCBkb2VzIHdoaXRlbGlzdCBjaGVja2luZy4KKwkgKiBXZSBvbmx5IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZXBvc2l0b3J5IGlzIGV4cG9ydGVkLgorCSAqLworCisJaWYgKCFleHBvcnRfYWxsX3RyZWVzICYmIGFjY2VzcygiZ2l0LWRhZW1vbi1leHBvcnQtb2siLCBGX09LKSkgeworCQlsb2dlcnJvcigiJyVzJzogcmVwb3NpdG9yeSBub3QgZXhwb3J0ZWQuIiwgcGF0aCk7CisJCWVycm5vID0gRUFDQ0VTOworCQlyZXR1cm4gZGFlbW9uX2Vycm9yKGRpciwgInJlcG9zaXRvcnkgbm90IGV4cG9ydGVkIik7CisJfQorCisJaWYgKHNlcnZpY2UtPm92ZXJyaWRhYmxlKSB7CisJCXN0cmJ1Zl9hZGRmKCZ2YXIsICJkYWVtb24uJXMiLCBzZXJ2aWNlLT5jb25maWdfbmFtZSk7CisJCWdpdF9jb25maWdfZ2V0X2Jvb2wodmFyLmJ1ZiwgJmVuYWJsZWQpOworCQlzdHJidWZfcmVsZWFzZSgmdmFyKTsKKwl9CisJaWYgKCFlbmFibGVkKSB7CisJCWxvZ2Vycm9yKCInJXMnOiBzZXJ2aWNlIG5vdCBlbmFibGVkIGZvciAnJXMnIiwKKwkJCSBzZXJ2aWNlLT5uYW1lLCBwYXRoKTsKKwkJZXJybm8gPSBFQUNDRVM7CisJCXJldHVybiBkYWVtb25fZXJyb3IoZGlyLCAic2VydmljZSBub3QgZW5hYmxlZCIpOworCX0KKworCS8qCisJICogT3B0aW9uYWxseSwgYSBob29rIGNhbiBjaG9vc2UgdG8gZGVueSBhY2Nlc3MgdG8gdGhlCisJICogcmVwb3NpdG9yeSBkZXBlbmRpbmcgb24gdGhlIHBoYXNlIG9mIHRoZSBtb29uLgorCSAqLworCWlmIChhY2Nlc3NfaG9vayAmJiBydW5fYWNjZXNzX2hvb2soc2VydmljZSwgZGlyLCBwYXRoLCBoaSkpCisJCXJldHVybiAtMTsKKworCS8qCisJICogV2UnbGwgaWdub3JlIFNJR1RFUk0gZnJvbSBub3cgb24sIHdlIGhhdmUgYQorCSAqIGdvb2QgY2xpZW50LgorCSAqLworCXNpZ25hbChTSUdURVJNLCBTSUdfSUdOKTsKKworCXJldHVybiBzZXJ2aWNlLT5mbihlbnYpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3RvX2xvZyhpbnQgZmQpCit7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqZnA7CisKKwlmcCA9IGZkb3BlbihmZCwgInIiKTsKKwlpZiAoZnAgPT0gTlVMTCkgeworCQlsb2dlcnJvcigiZmRvcGVuIG9mIGVycm9yIGNoYW5uZWwgZmFpbGVkIik7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlIChzdHJidWZfZ2V0bGluZV9sZigmbGluZSwgZnApICE9IEVPRikgeworCQlsb2dlcnJvcigiJXMiLCBsaW5lLmJ1Zik7CisJCXN0cmJ1Zl9zZXRsZW4oJmxpbmUsIDApOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwlmY2xvc2UoZnApOworfQorCitzdGF0aWMgaW50IHJ1bl9zZXJ2aWNlX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNsZCkKK3sKKwlhcmd2X2FycmF5X3B1c2goJmNsZC0+YXJncywgIi4iKTsKKwljbGQtPmdpdF9jbWQgPSAxOworCWNsZC0+ZXJyID0gLTE7CisJaWYgKHN0YXJ0X2NvbW1hbmQoY2xkKSkKKwkJcmV0dXJuIC0xOworCisJY2xvc2UoMCk7CisJY2xvc2UoMSk7CisKKwljb3B5X3RvX2xvZyhjbGQtPmVycik7CisKKwlyZXR1cm4gZmluaXNoX2NvbW1hbmQoY2xkKTsKK30KKworc3RhdGljIGludCB1cGxvYWRfcGFjayhjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqZW52KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlhcmd2X2FycmF5X3B1c2hsKCZjbGQuYXJncywgInVwbG9hZC1wYWNrIiwgIi0tc3RyaWN0IiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNoZigmY2xkLmFyZ3MsICItLXRpbWVvdXQ9JXUiLCB0aW1lb3V0KTsKKworCWFyZ3ZfYXJyYXlfcHVzaHYoJmNsZC5lbnZfYXJyYXksIGVudi0+YXJndik7CisKKwlyZXR1cm4gcnVuX3NlcnZpY2VfY29tbWFuZCgmY2xkKTsKK30KKworc3RhdGljIGludCB1cGxvYWRfYXJjaGl2ZShjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqZW52KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlhcmd2X2FycmF5X3B1c2goJmNsZC5hcmdzLCAidXBsb2FkLWFyY2hpdmUiKTsKKworCWFyZ3ZfYXJyYXlfcHVzaHYoJmNsZC5lbnZfYXJyYXksIGVudi0+YXJndik7CisKKwlyZXR1cm4gcnVuX3NlcnZpY2VfY29tbWFuZCgmY2xkKTsKK30KKworc3RhdGljIGludCByZWNlaXZlX3BhY2soY29uc3Qgc3RydWN0IGFyZ3ZfYXJyYXkgKmVudikKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbGQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJYXJndl9hcnJheV9wdXNoKCZjbGQuYXJncywgInJlY2VpdmUtcGFjayIpOworCisJYXJndl9hcnJheV9wdXNodigmY2xkLmVudl9hcnJheSwgZW52LT5hcmd2KTsKKworCXJldHVybiBydW5fc2VydmljZV9jb21tYW5kKCZjbGQpOworfQorCitzdGF0aWMgc3RydWN0IGRhZW1vbl9zZXJ2aWNlIGRhZW1vbl9zZXJ2aWNlW10gPSB7CisJeyAidXBsb2FkLWFyY2hpdmUiLCAidXBsb2FkYXJjaCIsIHVwbG9hZF9hcmNoaXZlLCAwLCAxIH0sCisJeyAidXBsb2FkLXBhY2siLCAidXBsb2FkcGFjayIsIHVwbG9hZF9wYWNrLCAxLCAxIH0sCisJeyAicmVjZWl2ZS1wYWNrIiwgInJlY2VpdmVwYWNrIiwgcmVjZWl2ZV9wYWNrLCAwLCAxIH0sCit9OworCitzdGF0aWMgdm9pZCBlbmFibGVfc2VydmljZShjb25zdCBjaGFyICpuYW1lLCBpbnQgZW5hKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhZW1vbl9zZXJ2aWNlKTsgaSsrKSB7CisJCWlmICghc3RyY21wKGRhZW1vbl9zZXJ2aWNlW2ldLm5hbWUsIG5hbWUpKSB7CisJCQlkYWVtb25fc2VydmljZVtpXS5lbmFibGVkID0gZW5hOworCQkJcmV0dXJuOworCQl9CisJfQorCWRpZSgiTm8gc3VjaCBzZXJ2aWNlICVzIiwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIG1ha2Vfc2VydmljZV9vdmVycmlkYWJsZShjb25zdCBjaGFyICpuYW1lLCBpbnQgZW5hKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhZW1vbl9zZXJ2aWNlKTsgaSsrKSB7CisJCWlmICghc3RyY21wKGRhZW1vbl9zZXJ2aWNlW2ldLm5hbWUsIG5hbWUpKSB7CisJCQlkYWVtb25fc2VydmljZVtpXS5vdmVycmlkYWJsZSA9IGVuYTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlkaWUoIk5vIHN1Y2ggc2VydmljZSAlcyIsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9ob3N0X2FuZF9wb3J0KGNoYXIgKmhvc3Rwb3J0LCBjaGFyICoqaG9zdCwKKwljaGFyICoqcG9ydCkKK3sKKwlpZiAoKmhvc3Rwb3J0ID09ICdbJykgeworCQljaGFyICplbmQ7CisKKwkJZW5kID0gc3RyY2hyKGhvc3Rwb3J0LCAnXScpOworCQlpZiAoIWVuZCkKKwkJCWRpZSgiSW52YWxpZCByZXF1ZXN0ICgnWycgd2l0aG91dCAnXScpIik7CisJCSplbmQgPSAnXDAnOworCQkqaG9zdCA9IGhvc3Rwb3J0ICsgMTsKKwkJaWYgKCFlbmRbMV0pCisJCQkqcG9ydCA9IE5VTEw7CisJCWVsc2UgaWYgKGVuZFsxXSA9PSAnOicpCisJCQkqcG9ydCA9IGVuZCArIDI7CisJCWVsc2UKKwkJCWRpZSgiR2FyYmFnZSBhZnRlciBlbmQgb2YgaG9zdCBwYXJ0Iik7CisJfSBlbHNlIHsKKwkJKmhvc3QgPSBob3N0cG9ydDsKKwkJKnBvcnQgPSBzdHJyY2hyKGhvc3Rwb3J0LCAnOicpOworCQlpZiAoKnBvcnQpIHsKKwkJCSoqcG9ydCA9ICdcMCc7CisJCQkrKypwb3J0OworCQl9CisJfQorfQorCisvKgorICogU2FuaXRpemUgYSBzdHJpbmcgZnJvbSB0aGUgY2xpZW50IHNvIHRoYXQgaXQncyBPSyB0byBiZSBpbnNlcnRlZCBpbnRvIGEKKyAqIGZpbGVzeXN0ZW0gcGF0aC4gU3BlY2lmaWNhbGx5LCB3ZSBkaXNhbGxvdyBzbGFzaGVzLCBydW5zIG9mICIuLiIsIGFuZAorICogdHJhaWxpbmcgYW5kIGxlYWRpbmcgZG90cywgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY2xpZW50IGNhbm5vdCBlc2NhcGUKKyAqIG91ciBiYXNlIHBhdGggdmlhICIuLiIgdHJhdmVyc2FsLgorICovCitzdGF0aWMgdm9pZCBzYW5pdGl6ZV9jbGllbnQoc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICppbikKK3sKKwlmb3IgKDsgKmluOyBpbisrKSB7CisJCWlmICgqaW4gPT0gJy8nKQorCQkJY29udGludWU7CisJCWlmICgqaW4gPT0gJy4nICYmICghb3V0LT5sZW4gfHwgb3V0LT5idWZbb3V0LT5sZW4gLSAxXSA9PSAnLicpKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9hZGRjaChvdXQsICppbik7CisJfQorCisJd2hpbGUgKG91dC0+bGVuICYmIG91dC0+YnVmW291dC0+bGVuIC0gMV0gPT0gJy4nKQorCQlzdHJidWZfc2V0bGVuKG91dCwgb3V0LT5sZW4gLSAxKTsKK30KKworLyoKKyAqIExpa2Ugc2FuaXRpemVfY2xpZW50LCBidXQgd2UgYWxzbyBwZXJmb3JtIGFueSBjYW5vbmljYWxpemF0aW9uCisgKiB0byBtYWtlIGxpZmUgZWFzaWVyIG9uIHRoZSBhZG1pbi4KKyAqLworc3RhdGljIHZvaWQgY2Fub25pY2FsaXplX2NsaWVudChzdHJ1Y3Qgc3RyYnVmICpvdXQsIGNvbnN0IGNoYXIgKmluKQoreworCXNhbml0aXplX2NsaWVudChvdXQsIGluKTsKKwlzdHJidWZfdG9sb3dlcihvdXQpOworfQorCisvKgorICogUmVhZCB0aGUgaG9zdCBhcyBzdXBwbGllZCBieSB0aGUgY2xpZW50IGNvbm5lY3Rpb24uCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgTlVMIGJ5dGUgdGVybWluYXRpbmcgdGhlIGhvc3QKKyAqIGFyZ3VtZW50LCBvciAnZXh0cmFfYXJncycgaWYgdGhlcmUgaXMgbm8gaG9zdCBhcmd1bWVudC4KKyAqLworc3RhdGljIGNoYXIgKnBhcnNlX2hvc3RfYXJnKHN0cnVjdCBob3N0aW5mbyAqaGksIGNoYXIgKmV4dHJhX2FyZ3MsIGludCBidWZsZW4pCit7CisJY2hhciAqdmFsOworCWludCB2YWxsZW47CisJY2hhciAqZW5kID0gZXh0cmFfYXJncyArIGJ1ZmxlbjsKKworCWlmIChleHRyYV9hcmdzIDwgZW5kICYmICpleHRyYV9hcmdzKSB7CisJCWhpLT5zYXdfZXh0ZW5kZWRfYXJncyA9IDE7CisJCWlmIChzdHJuY2FzZWNtcCgiaG9zdD0iLCBleHRyYV9hcmdzLCA1KSA9PSAwKSB7CisJCQl2YWwgPSBleHRyYV9hcmdzICsgNTsKKwkJCXZhbGxlbiA9IHN0cmxlbih2YWwpICsgMTsKKwkJCWxvZ2luZm8oIkV4dGVuZGVkIGF0dHJpYnV0ZSBcImhvc3RcIjogJXMiLCB2YWwpOworCQkJaWYgKCp2YWwpIHsKKwkJCQkvKiBTcGxpdCA8aG9zdD46PHBvcnQ+IGF0IGNvbG9uLiAqLworCQkJCWNoYXIgKmhvc3Q7CisJCQkJY2hhciAqcG9ydDsKKwkJCQlwYXJzZV9ob3N0X2FuZF9wb3J0KHZhbCwgJmhvc3QsICZwb3J0KTsKKwkJCQlpZiAocG9ydCkKKwkJCQkJc2FuaXRpemVfY2xpZW50KCZoaS0+dGNwX3BvcnQsIHBvcnQpOworCQkJCWNhbm9uaWNhbGl6ZV9jbGllbnQoJmhpLT5ob3N0bmFtZSwgaG9zdCk7CisJCQkJaGktPmhvc3RuYW1lX2xvb2t1cF9kb25lID0gMDsKKwkJCX0KKworCQkJLyogT24gdG8gdGhlIG5leHQgb25lICovCisJCQlleHRyYV9hcmdzID0gdmFsICsgdmFsbGVuOworCQl9CisJCWlmIChleHRyYV9hcmdzIDwgZW5kICYmICpleHRyYV9hcmdzKQorCQkJZGllKCJJbnZhbGlkIHJlcXVlc3QiKTsKKwl9CisKKwlyZXR1cm4gZXh0cmFfYXJnczsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZXh0cmFfYXJncyhzdHJ1Y3QgaG9zdGluZm8gKmhpLCBzdHJ1Y3QgYXJndl9hcnJheSAqZW52LAorCQkJICAgICBjaGFyICpleHRyYV9hcmdzLCBpbnQgYnVmbGVuKQoreworCWNvbnN0IGNoYXIgKmVuZCA9IGV4dHJhX2FyZ3MgKyBidWZsZW47CisJc3RydWN0IHN0cmJ1ZiBnaXRfcHJvdG9jb2wgPSBTVFJCVUZfSU5JVDsKKworCS8qIEZpcnN0IGxvb2sgZm9yIHRoZSBob3N0IGFyZ3VtZW50ICovCisJZXh0cmFfYXJncyA9IHBhcnNlX2hvc3RfYXJnKGhpLCBleHRyYV9hcmdzLCBidWZsZW4pOworCisJLyogTG9vayBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgcGxhY2VzIGFmdGVyIGEgc2Vjb25kIE5VTCBieXRlICovCisJZm9yICg7IGV4dHJhX2FyZ3MgPCBlbmQ7IGV4dHJhX2FyZ3MgKz0gc3RybGVuKGV4dHJhX2FyZ3MpICsgMSkgeworCQljb25zdCBjaGFyICphcmcgPSBleHRyYV9hcmdzOworCisJCS8qCisJCSAqIFBhcnNlIHRoZSBleHRyYSBhcmd1bWVudHMsIGFkZGluZyBtb3N0IHRvICdnaXRfcHJvdG9jb2wnCisJCSAqIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBzZXQgdGhlICdHSVRfUFJPVE9DT0wnIGVudnZhciBpbiB0aGUKKwkJICogc2VydmljZSB0aGF0IHdpbGwgYmUgcnVuLgorCQkgKgorCQkgKiBJZiB0aGVyZSBlbmRzIHVwIGJlaW5nIGEgcGFydGljdWxhciBhcmcgaW4gdGhlIGZ1dHVyZSB0aGF0CisJCSAqIGdpdC1kYWVtb24gbmVlZHMgdG8gcGFyc2Ugc3BlY2lmaWNhbGx5IChsaWtlIHRoZSAnaG9zdCcgYXJnKQorCQkgKiB0aGVuIGl0IGNhbiBiZSBwYXJzZWQgaGVyZSBhbmQgbm90IGFkZGVkIHRvICdnaXRfcHJvdG9jb2wnLgorCQkgKi8KKwkJaWYgKCphcmcpIHsKKwkJCWlmIChnaXRfcHJvdG9jb2wubGVuID4gMCkKKwkJCQlzdHJidWZfYWRkY2goJmdpdF9wcm90b2NvbCwgJzonKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmdpdF9wcm90b2NvbCwgYXJnKTsKKwkJfQorCX0KKworCWlmIChnaXRfcHJvdG9jb2wubGVuID4gMCkgeworCQlsb2dpbmZvKCJFeHRlbmRlZCBhdHRyaWJ1dGUgXCJwcm90b2NvbFwiOiAlcyIsIGdpdF9wcm90b2NvbC5idWYpOworCQlhcmd2X2FycmF5X3B1c2hmKGVudiwgR0lUX1BST1RPQ09MX0VOVklST05NRU5UICI9JXMiLAorCQkJCSBnaXRfcHJvdG9jb2wuYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmdpdF9wcm90b2NvbCk7Cit9CisKKy8qCisgKiBMb2NhdGUgY2Fub25pY2FsIGhvc3RuYW1lIGFuZCBpdHMgSVAgYWRkcmVzcy4KKyAqLworc3RhdGljIHZvaWQgbG9va3VwX2hvc3RuYW1lKHN0cnVjdCBob3N0aW5mbyAqaGkpCit7CisJaWYgKCFoaS0+aG9zdG5hbWVfbG9va3VwX2RvbmUgJiYgaGktPmhvc3RuYW1lLmxlbikgeworI2lmbmRlZiBOT19JUFY2CisJCXN0cnVjdCBhZGRyaW5mbyBoaW50czsKKwkJc3RydWN0IGFkZHJpbmZvICphaTsKKwkJaW50IGdhaTsKKwkJc3RhdGljIGNoYXIgYWRkcmJ1ZltIT1NUX05BTUVfTUFYICsgMV07CisKKwkJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisJCWhpbnRzLmFpX2ZsYWdzID0gQUlfQ0FOT05OQU1FOworCisJCWdhaSA9IGdldGFkZHJpbmZvKGhpLT5ob3N0bmFtZS5idWYsIE5VTEwsICZoaW50cywgJmFpKTsKKwkJaWYgKCFnYWkpIHsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luX2FkZHIgPSAodm9pZCAqKWFpLT5haV9hZGRyOworCisJCQlpbmV0X250b3AoQUZfSU5FVCwgJnNpbl9hZGRyLT5zaW5fYWRkciwKKwkJCQkgIGFkZHJidWYsIHNpemVvZihhZGRyYnVmKSk7CisJCQlzdHJidWZfYWRkc3RyKCZoaS0+aXBfYWRkcmVzcywgYWRkcmJ1Zik7CisKKwkJCWlmIChhaS0+YWlfY2Fub25uYW1lKQorCQkJCXNhbml0aXplX2NsaWVudCgmaGktPmNhbm9uX2hvc3RuYW1lLAorCQkJCQkJYWktPmFpX2Nhbm9ubmFtZSk7CisJCQllbHNlCisJCQkJc3RyYnVmX2FkZGJ1ZigmaGktPmNhbm9uX2hvc3RuYW1lLAorCQkJCQkgICAgICAmaGktPmlwX2FkZHJlc3MpOworCisJCQlmcmVlYWRkcmluZm8oYWkpOworCQl9CisjZWxzZQorCQlzdHJ1Y3QgaG9zdGVudCAqaGVudDsKKwkJc3RydWN0IHNvY2thZGRyX2luIHNhOworCQljaGFyICoqYXA7CisJCXN0YXRpYyBjaGFyIGFkZHJidWZbSE9TVF9OQU1FX01BWCArIDFdOworCisJCWhlbnQgPSBnZXRob3N0YnluYW1lKGhpLT5ob3N0bmFtZS5idWYpOworCQlpZiAoaGVudCkgeworCQkJYXAgPSBoZW50LT5oX2FkZHJfbGlzdDsKKwkJCW1lbXNldCgmc2EsIDAsIHNpemVvZiBzYSk7CisJCQlzYS5zaW5fZmFtaWx5ID0gaGVudC0+aF9hZGRydHlwZTsKKwkJCXNhLnNpbl9wb3J0ID0gaHRvbnMoMCk7CisJCQltZW1jcHkoJnNhLnNpbl9hZGRyLCAqYXAsIGhlbnQtPmhfbGVuZ3RoKTsKKworCQkJaW5ldF9udG9wKGhlbnQtPmhfYWRkcnR5cGUsICZzYS5zaW5fYWRkciwKKwkJCQkgIGFkZHJidWYsIHNpemVvZihhZGRyYnVmKSk7CisKKwkJCXNhbml0aXplX2NsaWVudCgmaGktPmNhbm9uX2hvc3RuYW1lLCBoZW50LT5oX25hbWUpOworCQkJc3RyYnVmX2FkZHN0cigmaGktPmlwX2FkZHJlc3MsIGFkZHJidWYpOworCQl9CisjZW5kaWYKKwkJaGktPmhvc3RuYW1lX2xvb2t1cF9kb25lID0gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhvc3RpbmZvX2luaXQoc3RydWN0IGhvc3RpbmZvICpoaSkKK3sKKwltZW1zZXQoaGksIDAsIHNpemVvZigqaGkpKTsKKwlzdHJidWZfaW5pdCgmaGktPmhvc3RuYW1lLCAwKTsKKwlzdHJidWZfaW5pdCgmaGktPmNhbm9uX2hvc3RuYW1lLCAwKTsKKwlzdHJidWZfaW5pdCgmaGktPmlwX2FkZHJlc3MsIDApOworCXN0cmJ1Zl9pbml0KCZoaS0+dGNwX3BvcnQsIDApOworfQorCitzdGF0aWMgdm9pZCBob3N0aW5mb19jbGVhcihzdHJ1Y3QgaG9zdGluZm8gKmhpKQoreworCXN0cmJ1Zl9yZWxlYXNlKCZoaS0+aG9zdG5hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZoaS0+Y2Fub25faG9zdG5hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZoaS0+aXBfYWRkcmVzcyk7CisJc3RyYnVmX3JlbGVhc2UoJmhpLT50Y3BfcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9rZWVwX2FsaXZlKGludCBzb2NrZmQpCit7CisJaW50IGthID0gMTsKKworCWlmIChzZXRzb2Nrb3B0KHNvY2tmZCwgU09MX1NPQ0tFVCwgU09fS0VFUEFMSVZFLCAma2EsIHNpemVvZihrYSkpIDwgMCkgeworCQlpZiAoZXJybm8gIT0gRU5PVFNPQ0spCisJCQlsb2dlcnJvcigidW5hYmxlIHRvIHNldCBTT19LRUVQQUxJVkUgb24gc29ja2V0OiAlcyIsCisJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZXhlY3V0ZSh2b2lkKQoreworCWNoYXIgKmxpbmUgPSBwYWNrZXRfYnVmZmVyOworCWludCBwa3RsZW4sIGxlbiwgaTsKKwljaGFyICphZGRyID0gZ2V0ZW52KCJSRU1PVEVfQUREUiIpLCAqcG9ydCA9IGdldGVudigiUkVNT1RFX1BPUlQiKTsKKwlzdHJ1Y3QgaG9zdGluZm8gaGk7CisJc3RydWN0IGFyZ3ZfYXJyYXkgZW52ID0gQVJHVl9BUlJBWV9JTklUOworCisJaG9zdGluZm9faW5pdCgmaGkpOworCisJaWYgKGFkZHIpCisJCWxvZ2luZm8oIkNvbm5lY3Rpb24gZnJvbSAlczolcyIsIGFkZHIsIHBvcnQpOworCisJc2V0X2tlZXBfYWxpdmUoMCk7CisJYWxhcm0oaW5pdF90aW1lb3V0ID8gaW5pdF90aW1lb3V0IDogdGltZW91dCk7CisJcGt0bGVuID0gcGFja2V0X3JlYWQoMCwgTlVMTCwgTlVMTCwgcGFja2V0X2J1ZmZlciwgc2l6ZW9mKHBhY2tldF9idWZmZXIpLCAwKTsKKwlhbGFybSgwKTsKKworCWxlbiA9IHN0cmxlbihsaW5lKTsKKwlpZiAobGVuICYmIGxpbmVbbGVuLTFdID09ICdcbicpCisJCWxpbmVbbGVuLTFdID0gMDsKKworCS8qIHBhcnNlIGFkZGl0aW9uYWwgYXJncyBoaWRkZW4gYmVoaW5kIGEgTlVMIGJ5dGUgKi8KKwlpZiAobGVuICE9IHBrdGxlbikKKwkJcGFyc2VfZXh0cmFfYXJncygmaGksICZlbnYsIGxpbmUgKyBsZW4gKyAxLCBwa3RsZW4gLSBsZW4gLSAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhZW1vbl9zZXJ2aWNlKTsgaSsrKSB7CisJCXN0cnVjdCBkYWVtb25fc2VydmljZSAqcyA9ICYoZGFlbW9uX3NlcnZpY2VbaV0pOworCQljb25zdCBjaGFyICphcmc7CisKKwkJaWYgKHNraXBfcHJlZml4KGxpbmUsICJnaXQtIiwgJmFyZykgJiYKKwkJICAgIHNraXBfcHJlZml4KGFyZywgcy0+bmFtZSwgJmFyZykgJiYKKwkJICAgICphcmcrKyA9PSAnICcpIHsKKwkJCS8qCisJCQkgKiBOb3RlOiBUaGUgZGlyZWN0b3J5IGhlcmUgaXMgcHJvYmFibHkgY29udGV4dCBzZW5zaXRpdmUsCisJCQkgKiBhbmQgbWlnaHQgZGVwZW5kIG9uIHRoZSBhY3R1YWwgc2VydmljZSBiZWluZyBwZXJmb3JtZWQuCisJCQkgKi8KKwkJCWludCByYyA9IHJ1bl9zZXJ2aWNlKGFyZywgcywgJmhpLCAmZW52KTsKKwkJCWhvc3RpbmZvX2NsZWFyKCZoaSk7CisJCQlhcmd2X2FycmF5X2NsZWFyKCZlbnYpOworCQkJcmV0dXJuIHJjOworCQl9CisJfQorCisJaG9zdGluZm9fY2xlYXIoJmhpKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZlbnYpOworCWxvZ2Vycm9yKCJQcm90b2NvbCBlcnJvcjogJyVzJyIsIGxpbmUpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBhZGRyY21wKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpzMSwKKyAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqczIpCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTEgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikgczE7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTIgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikgczI7CisKKwlpZiAoc2ExLT5zYV9mYW1pbHkgIT0gc2EyLT5zYV9mYW1pbHkpCisJCXJldHVybiBzYTEtPnNhX2ZhbWlseSAtIHNhMi0+c2FfZmFtaWx5OworCWlmIChzYTEtPnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQlyZXR1cm4gbWVtY21wKCYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXMxKS0+c2luX2FkZHIsCisJCSAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzMiktPnNpbl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisjaWZuZGVmIE5PX0lQVjYKKwlpZiAoc2ExLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisJCXJldHVybiBtZW1jbXAoJigoc3RydWN0IHNvY2thZGRyX2luNiAqKXMxKS0+c2luNl9hZGRyLAorCQkgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKXMyKS0+c2luNl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4X2Nvbm5lY3Rpb25zID0gMzI7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGl2ZV9jaGlsZHJlbjsKKworc3RhdGljIHN0cnVjdCBjaGlsZCB7CisJc3RydWN0IGNoaWxkICpuZXh0OworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNsZDsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyZXNzOworfSAqZmlyc3Rib3JuOworCitzdGF0aWMgdm9pZCBhZGRfY2hpbGQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNsZCwgc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWRkcmxlbikKK3sKKwlzdHJ1Y3QgY2hpbGQgKm5ld2Jvcm4sICoqY3JhZGxlOworCisJbmV3Ym9ybiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpuZXdib3JuKSk7CisJbGl2ZV9jaGlsZHJlbisrOworCW1lbWNweSgmbmV3Ym9ybi0+Y2xkLCBjbGQsIHNpemVvZigqY2xkKSk7CisJbWVtY3B5KCZuZXdib3JuLT5hZGRyZXNzLCBhZGRyLCBhZGRybGVuKTsKKwlmb3IgKGNyYWRsZSA9ICZmaXJzdGJvcm47ICpjcmFkbGU7IGNyYWRsZSA9ICYoKmNyYWRsZSktPm5leHQpCisJCWlmICghYWRkcmNtcCgmKCpjcmFkbGUpLT5hZGRyZXNzLCAmbmV3Ym9ybi0+YWRkcmVzcykpCisJCQlicmVhazsKKwluZXdib3JuLT5uZXh0ID0gKmNyYWRsZTsKKwkqY3JhZGxlID0gbmV3Ym9ybjsKK30KKworLyoKKyAqIFRoaXMgZ2V0cyBjYWxsZWQgaWYgdGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyBncm93cworICogcGFzdCAibWF4X2Nvbm5lY3Rpb25zIi4KKyAqCisgKiBXZSBraWxsIHRoZSBuZXdlc3QgY29ubmVjdGlvbiBmcm9tIGEgZHVwbGljYXRlIElQLgorICovCitzdGF0aWMgdm9pZCBraWxsX3NvbWVfY2hpbGQodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgY2hpbGQgKmJsYW5rZXQsICpuZXh0OworCisJaWYgKCEoYmxhbmtldCA9IGZpcnN0Ym9ybikpCisJCXJldHVybjsKKworCWZvciAoOyAobmV4dCA9IGJsYW5rZXQtPm5leHQpOyBibGFua2V0ID0gbmV4dCkKKwkJaWYgKCFhZGRyY21wKCZibGFua2V0LT5hZGRyZXNzLCAmbmV4dC0+YWRkcmVzcykpIHsKKwkJCWtpbGwoYmxhbmtldC0+Y2xkLnBpZCwgU0lHVEVSTSk7CisJCQlicmVhazsKKwkJfQorfQorCitzdGF0aWMgdm9pZCBjaGVja19kZWFkX2NoaWxkcmVuKHZvaWQpCit7CisJaW50IHN0YXR1czsKKwlwaWRfdCBwaWQ7CisKKwlzdHJ1Y3QgY2hpbGQgKipjcmFkbGUsICpibGFua2V0OworCWZvciAoY3JhZGxlID0gJmZpcnN0Ym9ybjsgKGJsYW5rZXQgPSAqY3JhZGxlKTspCisJCWlmICgocGlkID0gd2FpdHBpZChibGFua2V0LT5jbGQucGlkLCAmc3RhdHVzLCBXTk9IQU5HKSkgPiAxKSB7CisJCQljb25zdCBjaGFyICpkZWFkID0gIiI7CisJCQlpZiAoc3RhdHVzKQorCQkJCWRlYWQgPSAiICh3aXRoIGVycm9yKSI7CisJCQlsb2dpbmZvKCJbJSJQUkl1TUFYIl0gRGlzY29ubmVjdGVkJXMiLCAodWludG1heF90KXBpZCwgZGVhZCk7CisKKwkJCS8qIHJlbW92ZSB0aGUgY2hpbGQgKi8KKwkJCSpjcmFkbGUgPSBibGFua2V0LT5uZXh0OworCQkJbGl2ZV9jaGlsZHJlbi0tOworCQkJY2hpbGRfcHJvY2Vzc19jbGVhcigmYmxhbmtldC0+Y2xkKTsKKwkJCWZyZWUoYmxhbmtldCk7CisJCX0gZWxzZQorCQkJY3JhZGxlID0gJmJsYW5rZXQtPm5leHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXJndl9hcnJheSBjbGRfYXJndiA9IEFSR1ZfQVJSQVlfSU5JVDsKK3N0YXRpYyB2b2lkIGhhbmRsZShpbnQgaW5jb21pbmcsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFkZHJsZW4pCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2xkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJaWYgKG1heF9jb25uZWN0aW9ucyAmJiBsaXZlX2NoaWxkcmVuID49IG1heF9jb25uZWN0aW9ucykgeworCQlraWxsX3NvbWVfY2hpbGQoKTsKKwkJc2xlZXAoMSk7ICAvKiBnaXZlIGl0IHNvbWUgdGltZSB0byBkaWUgKi8KKwkJY2hlY2tfZGVhZF9jaGlsZHJlbigpOworCQlpZiAobGl2ZV9jaGlsZHJlbiA+PSBtYXhfY29ubmVjdGlvbnMpIHsKKwkJCWNsb3NlKGluY29taW5nKTsKKwkJCWxvZ2Vycm9yKCJUb28gbWFueSBjaGlsZHJlbiwgZHJvcHBpbmcgY29ubmVjdGlvbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCWNoYXIgYnVmWzEyOF0gPSAiIjsKKwkJc3RydWN0IHNvY2thZGRyX2luICpzaW5fYWRkciA9ICh2b2lkICopIGFkZHI7CisJCWluZXRfbnRvcChhZGRyLT5zYV9mYW1pbHksICZzaW5fYWRkci0+c2luX2FkZHIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjbGQuZW52X2FycmF5LCAiUkVNT1RFX0FERFI9JXMiLCBidWYpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjbGQuZW52X2FycmF5LCAiUkVNT1RFX1BPUlQ9JWQiLAorCQkJCSBudG9ocyhzaW5fYWRkci0+c2luX3BvcnQpKTsKKyNpZm5kZWYgTk9fSVBWNgorCX0gZWxzZSBpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCWNoYXIgYnVmWzEyOF0gPSAiIjsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNl9hZGRyID0gKHZvaWQgKikgYWRkcjsKKwkJaW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNl9hZGRyLT5zaW42X2FkZHIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjbGQuZW52X2FycmF5LCAiUkVNT1RFX0FERFI9WyVzXSIsIGJ1Zik7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNsZC5lbnZfYXJyYXksICJSRU1PVEVfUE9SVD0lZCIsCisJCQkJIG50b2hzKHNpbjZfYWRkci0+c2luNl9wb3J0KSk7CisjZW5kaWYKKwl9CisKKwljbGQuYXJndiA9IGNsZF9hcmd2LmFyZ3Y7CisJY2xkLmluID0gaW5jb21pbmc7CisJY2xkLm91dCA9IGR1cChpbmNvbWluZyk7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2xkKSkKKwkJbG9nZXJyb3IoInVuYWJsZSB0byBmb3JrIik7CisJZWxzZQorCQlhZGRfY2hpbGQoJmNsZCwgYWRkciwgYWRkcmxlbik7Cit9CisKK3N0YXRpYyB2b2lkIGNoaWxkX2hhbmRsZXIoaW50IHNpZ25vKQoreworCS8qCisJICogT3RoZXJ3aXNlIGVtcHR5IGhhbmRsZXIgYmVjYXVzZSBzeXN0ZW1jYWxscyB3aWxsIGdldCBpbnRlcnJ1cHRlZAorCSAqIHVwb24gc2lnbmFsIHJlY2VpcHQKKwkgKiBTeXNWIG5lZWRzIHRoZSBoYW5kbGVyIHRvIGJlIHJlYXJtZWQKKwkgKi8KKwlzaWduYWwoU0lHQ0hMRCwgY2hpbGRfaGFuZGxlcik7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3JldXNlX2FkZHIoaW50IHNvY2tmZCkKK3sKKwlpbnQgb24gPSAxOworCisJaWYgKCFyZXVzZWFkZHIpCisJCXJldHVybiAwOworCXJldHVybiBzZXRzb2Nrb3B0KHNvY2tmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLAorCQkJICAmb24sIHNpemVvZihvbikpOworfQorCitzdHJ1Y3Qgc29ja2V0bGlzdCB7CisJaW50ICpsaXN0OworCXNpemVfdCBucjsKKwlzaXplX3QgYWxsb2M7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqaXAyc3RyKGludCBmYW1pbHksIHN0cnVjdCBzb2NrYWRkciAqc2luLCBzb2NrbGVuX3QgbGVuKQoreworI2lmZGVmIE5PX0lQVjYKKwlzdGF0aWMgY2hhciBpcFtJTkVUX0FERFJTVFJMRU5dOworI2Vsc2UKKwlzdGF0aWMgY2hhciBpcFtJTkVUNl9BRERSU1RSTEVOXTsKKyNlbmRpZgorCisJc3dpdGNoIChmYW1pbHkpIHsKKyNpZm5kZWYgTk9fSVBWNgorCWNhc2UgQUZfSU5FVDY6CisJCWluZXRfbnRvcChmYW1pbHksICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYqKXNpbiktPnNpbjZfYWRkciwgaXAsIGxlbik7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSBBRl9JTkVUOgorCQlpbmV0X250b3AoZmFtaWx5LCAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4qKXNpbiktPnNpbl9hZGRyLCBpcCwgbGVuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJeHNucHJpbnRmKGlwLCBzaXplb2YoaXApLCAiPHVua25vd24+Iik7CisJfQorCXJldHVybiBpcDsKK30KKworI2lmbmRlZiBOT19JUFY2CisKK3N0YXRpYyBpbnQgc2V0dXBfbmFtZWRfc29jayhjaGFyICpsaXN0ZW5fYWRkciwgaW50IGxpc3Rlbl9wb3J0LCBzdHJ1Y3Qgc29ja2V0bGlzdCAqc29ja2xpc3QpCit7CisJaW50IHNvY2tudW0gPSAwOworCWNoYXIgcGJ1ZltOSV9NQVhTRVJWXTsKKwlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTAsICphaTsKKwlpbnQgZ2FpOworCWxvbmcgZmxhZ3M7CisKKwl4c25wcmludGYocGJ1Ziwgc2l6ZW9mKHBidWYpLCAiJWQiLCBsaXN0ZW5fcG9ydCk7CisJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisJaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOworCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisJaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKwloaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkU7CisKKwlnYWkgPSBnZXRhZGRyaW5mbyhsaXN0ZW5fYWRkciwgcGJ1ZiwgJmhpbnRzLCAmYWkwKTsKKwlpZiAoZ2FpKSB7CisJCWxvZ2Vycm9yKCJnZXRhZGRyaW5mbygpIGZvciAlcyBmYWlsZWQ6ICVzIiwgbGlzdGVuX2FkZHIsIGdhaV9zdHJlcnJvcihnYWkpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yIChhaSA9IGFpMDsgYWk7IGFpID0gYWktPmFpX25leHQpIHsKKwkJaW50IHNvY2tmZDsKKworCQlzb2NrZmQgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOworCQlpZiAoc29ja2ZkIDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoc29ja2ZkID49IEZEX1NFVFNJWkUpIHsKKwkJCWxvZ2Vycm9yKCJTb2NrZXQgZGVzY3JpcHRvciB0b28gbGFyZ2UiKTsKKwkJCWNsb3NlKHNvY2tmZCk7CisJCQljb250aW51ZTsKKwkJfQorCisjaWZkZWYgSVBWNl9WNk9OTFkKKwkJaWYgKGFpLT5haV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCWludCBvbiA9IDE7CisJCQlzZXRzb2Nrb3B0KHNvY2tmZCwgSVBQUk9UT19JUFY2LCBJUFY2X1Y2T05MWSwKKwkJCQkgICAmb24sIHNpemVvZihvbikpOworCQkJLyogTm90ZTogZXJyb3IgaXMgbm90IGZhdGFsICovCisJCX0KKyNlbmRpZgorCisJCWlmIChzZXRfcmV1c2VfYWRkcihzb2NrZmQpKSB7CisJCQlsb2dlcnJvcigiQ291bGQgbm90IHNldCBTT19SRVVTRUFERFI6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWNsb3NlKHNvY2tmZCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXNldF9rZWVwX2FsaXZlKHNvY2tmZCk7CisKKwkJaWYgKGJpbmQoc29ja2ZkLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pIDwgMCkgeworCQkJbG9nZXJyb3IoIkNvdWxkIG5vdCBiaW5kIHRvICVzOiAlcyIsCisJCQkJIGlwMnN0cihhaS0+YWlfZmFtaWx5LCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pLAorCQkJCSBzdHJlcnJvcihlcnJubykpOworCQkJY2xvc2Uoc29ja2ZkKTsKKwkJCWNvbnRpbnVlOwkvKiBub3QgZmF0YWwgKi8KKwkJfQorCQlpZiAobGlzdGVuKHNvY2tmZCwgNSkgPCAwKSB7CisJCQlsb2dlcnJvcigiQ291bGQgbm90IGxpc3RlbiB0byAlczogJXMiLAorCQkJCSBpcDJzdHIoYWktPmFpX2ZhbWlseSwgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSwKKwkJCQkgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWNsb3NlKHNvY2tmZCk7CisJCQljb250aW51ZTsJLyogbm90IGZhdGFsICovCisJCX0KKworCQlmbGFncyA9IGZjbnRsKHNvY2tmZCwgRl9HRVRGRCwgMCk7CisJCWlmIChmbGFncyA+PSAwKQorCQkJZmNudGwoc29ja2ZkLCBGX1NFVEZELCBmbGFncyB8IEZEX0NMT0VYRUMpOworCisJCUFMTE9DX0dST1coc29ja2xpc3QtPmxpc3QsIHNvY2tsaXN0LT5uciArIDEsIHNvY2tsaXN0LT5hbGxvYyk7CisJCXNvY2tsaXN0LT5saXN0W3NvY2tsaXN0LT5ucisrXSA9IHNvY2tmZDsKKwkJc29ja251bSsrOworCX0KKworCWZyZWVhZGRyaW5mbyhhaTApOworCisJcmV0dXJuIHNvY2tudW07Cit9CisKKyNlbHNlIC8qIE5PX0lQVjYgKi8KKworc3RhdGljIGludCBzZXR1cF9uYW1lZF9zb2NrKGNoYXIgKmxpc3Rlbl9hZGRyLCBpbnQgbGlzdGVuX3BvcnQsIHN0cnVjdCBzb2NrZXRsaXN0ICpzb2NrbGlzdCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworCWludCBzb2NrZmQ7CisJbG9uZyBmbGFnczsKKworCW1lbXNldCgmc2luLCAwLCBzaXplb2Ygc2luKTsKKwlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJc2luLnNpbl9wb3J0ID0gaHRvbnMobGlzdGVuX3BvcnQpOworCisJaWYgKGxpc3Rlbl9hZGRyKSB7CisJCS8qIFdlbGwsIGhvc3QgYmV0dGVyIGJlIGFuIElQIGFkZHJlc3MgaGVyZS4gKi8KKwkJaWYgKGluZXRfcHRvbihBRl9JTkVULCBsaXN0ZW5fYWRkciwgJnNpbi5zaW5fYWRkci5zX2FkZHIpIDw9IDApCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlzaW4uc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisJfQorCisJc29ja2ZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKwlpZiAoc29ja2ZkIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc2V0X3JldXNlX2FkZHIoc29ja2ZkKSkgeworCQlsb2dlcnJvcigiQ291bGQgbm90IHNldCBTT19SRVVTRUFERFI6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJY2xvc2Uoc29ja2ZkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2V0X2tlZXBfYWxpdmUoc29ja2ZkKTsKKworCWlmICggYmluZChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Ygc2luKSA8IDAgKSB7CisJCWxvZ2Vycm9yKCJDb3VsZCBub3QgYmluZCB0byAlczogJXMiLAorCQkJIGlwMnN0cihBRl9JTkVULCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHNpbikpLAorCQkJIHN0cmVycm9yKGVycm5vKSk7CisJCWNsb3NlKHNvY2tmZCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChsaXN0ZW4oc29ja2ZkLCA1KSA8IDApIHsKKwkJbG9nZXJyb3IoIkNvdWxkIG5vdCBsaXN0ZW4gdG8gJXM6ICVzIiwKKwkJCSBpcDJzdHIoQUZfSU5FVCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzaW4pKSwKKwkJCSBzdHJlcnJvcihlcnJubykpOworCQljbG9zZShzb2NrZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmbGFncyA9IGZjbnRsKHNvY2tmZCwgRl9HRVRGRCwgMCk7CisJaWYgKGZsYWdzID49IDApCisJCWZjbnRsKHNvY2tmZCwgRl9TRVRGRCwgZmxhZ3MgfCBGRF9DTE9FWEVDKTsKKworCUFMTE9DX0dST1coc29ja2xpc3QtPmxpc3QsIHNvY2tsaXN0LT5uciArIDEsIHNvY2tsaXN0LT5hbGxvYyk7CisJc29ja2xpc3QtPmxpc3Rbc29ja2xpc3QtPm5yKytdID0gc29ja2ZkOworCXJldHVybiAxOworfQorCisjZW5kaWYKKworc3RhdGljIHZvaWQgc29ja3NldHVwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdGVuX2FkZHIsIGludCBsaXN0ZW5fcG9ydCwgc3RydWN0IHNvY2tldGxpc3QgKnNvY2tsaXN0KQoreworCWlmICghbGlzdGVuX2FkZHItPm5yKQorCQlzZXR1cF9uYW1lZF9zb2NrKE5VTEwsIGxpc3Rlbl9wb3J0LCBzb2NrbGlzdCk7CisJZWxzZSB7CisJCWludCBpLCBzb2NrbnVtOworCQlmb3IgKGkgPSAwOyBpIDwgbGlzdGVuX2FkZHItPm5yOyBpKyspIHsKKwkJCXNvY2tudW0gPSBzZXR1cF9uYW1lZF9zb2NrKGxpc3Rlbl9hZGRyLT5pdGVtc1tpXS5zdHJpbmcsCisJCQkJCQkgICBsaXN0ZW5fcG9ydCwgc29ja2xpc3QpOworCisJCQlpZiAoc29ja251bSA9PSAwKQorCQkJCWxvZ2Vycm9yKCJ1bmFibGUgdG8gYWxsb2NhdGUgYW55IGxpc3RlbiBzb2NrZXRzIGZvciBob3N0ICVzIG9uIHBvcnQgJXUiLAorCQkJCQkgbGlzdGVuX2FkZHItPml0ZW1zW2ldLnN0cmluZywgbGlzdGVuX3BvcnQpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHNlcnZpY2VfbG9vcChzdHJ1Y3Qgc29ja2V0bGlzdCAqc29ja2xpc3QpCit7CisJc3RydWN0IHBvbGxmZCAqcGZkOworCWludCBpOworCisJcGZkID0geGNhbGxvYyhzb2NrbGlzdC0+bnIsIHNpemVvZihzdHJ1Y3QgcG9sbGZkKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc29ja2xpc3QtPm5yOyBpKyspIHsKKwkJcGZkW2ldLmZkID0gc29ja2xpc3QtPmxpc3RbaV07CisJCXBmZFtpXS5ldmVudHMgPSBQT0xMSU47CisJfQorCisJc2lnbmFsKFNJR0NITEQsIGNoaWxkX2hhbmRsZXIpOworCisJZm9yICg7OykgeworCQlpbnQgaTsKKworCQljaGVja19kZWFkX2NoaWxkcmVuKCk7CisKKwkJaWYgKHBvbGwocGZkLCBzb2NrbGlzdC0+bnIsIC0xKSA8IDApIHsKKwkJCWlmIChlcnJubyAhPSBFSU5UUikgeworCQkJCWxvZ2Vycm9yKCJQb2xsIGZhaWxlZCwgcmVzdW1pbmc6ICVzIiwKKwkJCQkgICAgICBzdHJlcnJvcihlcnJubykpOworCQkJCXNsZWVwKDEpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgc29ja2xpc3QtPm5yOyBpKyspIHsKKwkJCWlmIChwZmRbaV0ucmV2ZW50cyAmIFBPTExJTikgeworCQkJCXVuaW9uIHsKKwkJCQkJc3RydWN0IHNvY2thZGRyIHNhOworCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FpOworI2lmbmRlZiBOT19JUFY2CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2FpNjsKKyNlbmRpZgorCQkJCX0gc3M7CisJCQkJc29ja2xlbl90IHNzbGVuID0gc2l6ZW9mKHNzKTsKKwkJCQlpbnQgaW5jb21pbmcgPSBhY2NlcHQocGZkW2ldLmZkLCAmc3Muc2EsICZzc2xlbik7CisJCQkJaWYgKGluY29taW5nIDwgMCkgeworCQkJCQlzd2l0Y2ggKGVycm5vKSB7CisJCQkJCWNhc2UgRUFHQUlOOgorCQkJCQljYXNlIEVJTlRSOgorCQkJCQljYXNlIEVDT05OQUJPUlRFRDoKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlkZWZhdWx0OgorCQkJCQkJZGllX2Vycm5vKCJhY2NlcHQgcmV0dXJuZWQiKTsKKwkJCQkJfQorCQkJCX0KKwkJCQloYW5kbGUoaW5jb21pbmcsICZzcy5zYSwgc3NsZW4pOworCQkJfQorCQl9CisJfQorfQorCisjaWZkZWYgTk9fUE9TSVhfR09PRElFUworCitzdHJ1Y3QgY3JlZGVudGlhbHM7CisKK3N0YXRpYyB2b2lkIGRyb3BfcHJpdmlsZWdlcyhzdHJ1Y3QgY3JlZGVudGlhbHMgKmNyZWQpCit7CisJLyogbm90aGluZyAqLworfQorCitzdGF0aWMgc3RydWN0IGNyZWRlbnRpYWxzICpwcmVwYXJlX2NyZWRlbnRpYWxzKGNvbnN0IGNoYXIgKnVzZXJfbmFtZSwKKyAgICBjb25zdCBjaGFyICpncm91cF9uYW1lKQoreworCWRpZSgiLS11c2VyIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpOworfQorCisjZWxzZQorCitzdHJ1Y3QgY3JlZGVudGlhbHMgeworCXN0cnVjdCBwYXNzd2QgKnBhc3M7CisJZ2lkX3QgZ2lkOworfTsKKworc3RhdGljIHZvaWQgZHJvcF9wcml2aWxlZ2VzKHN0cnVjdCBjcmVkZW50aWFscyAqY3JlZCkKK3sKKwlpZiAoY3JlZCAmJiAoaW5pdGdyb3VwcyhjcmVkLT5wYXNzLT5wd19uYW1lLCBjcmVkLT5naWQpIHx8CisJICAgIHNldGdpZCAoY3JlZC0+Z2lkKSB8fCBzZXR1aWQoY3JlZC0+cGFzcy0+cHdfdWlkKSkpCisJCWRpZSgiY2Fubm90IGRyb3AgcHJpdmlsZWdlcyIpOworfQorCitzdGF0aWMgc3RydWN0IGNyZWRlbnRpYWxzICpwcmVwYXJlX2NyZWRlbnRpYWxzKGNvbnN0IGNoYXIgKnVzZXJfbmFtZSwKKyAgICBjb25zdCBjaGFyICpncm91cF9uYW1lKQoreworCXN0YXRpYyBzdHJ1Y3QgY3JlZGVudGlhbHMgYzsKKworCWMucGFzcyA9IGdldHB3bmFtKHVzZXJfbmFtZSk7CisJaWYgKCFjLnBhc3MpCisJCWRpZSgidXNlciBub3QgZm91bmQgLSAlcyIsIHVzZXJfbmFtZSk7CisKKwlpZiAoIWdyb3VwX25hbWUpCisJCWMuZ2lkID0gYy5wYXNzLT5wd19naWQ7CisJZWxzZSB7CisJCXN0cnVjdCBncm91cCAqZ3JvdXAgPSBnZXRncm5hbShncm91cF9uYW1lKTsKKwkJaWYgKCFncm91cCkKKwkJCWRpZSgiZ3JvdXAgbm90IGZvdW5kIC0gJXMiLCBncm91cF9uYW1lKTsKKworCQljLmdpZCA9IGdyb3VwLT5ncl9naWQ7CisJfQorCisJcmV0dXJuICZjOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc2VydmUoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0ZW5fYWRkciwgaW50IGxpc3Rlbl9wb3J0LAorICAgIHN0cnVjdCBjcmVkZW50aWFscyAqY3JlZCkKK3sKKwlzdHJ1Y3Qgc29ja2V0bGlzdCBzb2NrbGlzdCA9IHsgTlVMTCwgMCwgMCB9OworCisJc29ja3NldHVwKGxpc3Rlbl9hZGRyLCBsaXN0ZW5fcG9ydCwgJnNvY2tsaXN0KTsKKwlpZiAoc29ja2xpc3QubnIgPT0gMCkKKwkJZGllKCJ1bmFibGUgdG8gYWxsb2NhdGUgYW55IGxpc3RlbiBzb2NrZXRzIG9uIHBvcnQgJXUiLAorCQkgICAgbGlzdGVuX3BvcnQpOworCisJZHJvcF9wcml2aWxlZ2VzKGNyZWQpOworCisJbG9naW5mbygiUmVhZHkgdG8gcnVtYmxlIik7CisKKwlyZXR1cm4gc2VydmljZV9sb29wKCZzb2NrbGlzdCk7Cit9CisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGxpc3Rlbl9wb3J0ID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdGVuX2FkZHIgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWludCBzZXJ2ZV9tb2RlID0gMCwgaW5ldGRfbW9kZSA9IDA7CisJY29uc3QgY2hhciAqcGlkX2ZpbGUgPSBOVUxMLCAqdXNlcl9uYW1lID0gTlVMTCwgKmdyb3VwX25hbWUgPSBOVUxMOworCWludCBkZXRhY2ggPSAwOworCXN0cnVjdCBjcmVkZW50aWFscyAqY3JlZCA9IE5VTEw7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWNvbnN0IGNoYXIgKnY7CisKKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tbGlzdGVuPSIsICZ2KSkgeworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZsaXN0ZW5fYWRkciwgeHN0cmR1cF90b2xvd2VyKHYpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLXBvcnQ9IiwgJnYpKSB7CisJCQljaGFyICplbmQ7CisJCQl1bnNpZ25lZCBsb25nIG47CisJCQluID0gc3RydG91bCh2LCAmZW5kLCAwKTsKKwkJCWlmICgqdiAmJiAhKmVuZCkgeworCQkJCWxpc3Rlbl9wb3J0ID0gbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXNlcnZlIikpIHsKKwkJCXNlcnZlX21vZGUgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1pbmV0ZCIpKSB7CisJCQlpbmV0ZF9tb2RlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tdmVyYm9zZSIpKSB7CisJCQl2ZXJib3NlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tc3lzbG9nIikpIHsKKwkJCWxvZ19kZXN0aW5hdGlvbiA9IExPR19ERVNUSU5BVElPTl9TWVNMT0c7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1sb2ctZGVzdGluYXRpb249IiwgJnYpKSB7CisJCQlpZiAoIXN0cmNtcCh2LCAic3lzbG9nIikpIHsKKwkJCQlsb2dfZGVzdGluYXRpb24gPSBMT0dfREVTVElOQVRJT05fU1lTTE9HOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmICghc3RyY21wKHYsICJzdGRlcnIiKSkgeworCQkJCWxvZ19kZXN0aW5hdGlvbiA9IExPR19ERVNUSU5BVElPTl9TVERFUlI7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAodiwgIm5vbmUiKSkgeworCQkJCWxvZ19kZXN0aW5hdGlvbiA9IExPR19ERVNUSU5BVElPTl9OT05FOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlCisJCQkJZGllKCJ1bmtub3duIGxvZyBkZXN0aW5hdGlvbiAnJXMnIiwgdik7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1leHBvcnQtYWxsIikpIHsKKwkJCWV4cG9ydF9hbGxfdHJlZXMgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tYWNjZXNzLWhvb2s9IiwgJnYpKSB7CisJCQlhY2Nlc3NfaG9vayA9IHY7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS10aW1lb3V0PSIsICZ2KSkgeworCQkJdGltZW91dCA9IGF0b2kodik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1pbml0LXRpbWVvdXQ9IiwgJnYpKSB7CisJCQlpbml0X3RpbWVvdXQgPSBhdG9pKHYpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tbWF4LWNvbm5lY3Rpb25zPSIsICZ2KSkgeworCQkJbWF4X2Nvbm5lY3Rpb25zID0gYXRvaSh2KTsKKwkJCWlmIChtYXhfY29ubmVjdGlvbnMgPCAwKQorCQkJCW1heF9jb25uZWN0aW9ucyA9IDA7CSAgICAgICAgLyogdW5saW1pdGVkICovCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXN0cmljdC1wYXRocyIpKSB7CisJCQlzdHJpY3RfcGF0aHMgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tYmFzZS1wYXRoPSIsICZ2KSkgeworCQkJYmFzZV9wYXRoID0gdjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tYmFzZS1wYXRoLXJlbGF4ZWQiKSkgeworCQkJYmFzZV9wYXRoX3JlbGF4ZWQgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0taW50ZXJwb2xhdGVkLXBhdGg9IiwgJnYpKSB7CisJCQlpbnRlcnBvbGF0ZWRfcGF0aCA9IHY7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXJldXNlYWRkciIpKSB7CisJCQlyZXVzZWFkZHIgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS11c2VyLXBhdGgiKSkgeworCQkJdXNlcl9wYXRoID0gIiI7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS11c2VyLXBhdGg9IiwgJnYpKSB7CisJCQl1c2VyX3BhdGggPSB2OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tcGlkLWZpbGU9IiwgJnYpKSB7CisJCQlwaWRfZmlsZSA9IHY7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWRldGFjaCIpKSB7CisJCQlkZXRhY2ggPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tdXNlcj0iLCAmdikpIHsKKwkJCXVzZXJfbmFtZSA9IHY7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1ncm91cD0iLCAmdikpIHsKKwkJCWdyb3VwX25hbWUgPSB2OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tZW5hYmxlPSIsICZ2KSkgeworCQkJZW5hYmxlX3NlcnZpY2UodiwgMSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1kaXNhYmxlPSIsICZ2KSkgeworCQkJZW5hYmxlX3NlcnZpY2UodiwgMCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1hbGxvdy1vdmVycmlkZT0iLCAmdikpIHsKKwkJCW1ha2Vfc2VydmljZV9vdmVycmlkYWJsZSh2LCAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWZvcmJpZC1vdmVycmlkZT0iLCAmdikpIHsKKwkJCW1ha2Vfc2VydmljZV9vdmVycmlkYWJsZSh2LCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0taW5mb3JtYXRpdmUtZXJyb3JzIikpIHsKKwkJCWluZm9ybWF0aXZlX2Vycm9ycyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLW5vLWluZm9ybWF0aXZlLWVycm9ycyIpKSB7CisJCQlpbmZvcm1hdGl2ZV9lcnJvcnMgPSAwOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgeworCQkJb2tfcGF0aHMgPSAmYXJndltpKzFdOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoYXJnWzBdICE9ICctJykgeworCQkJb2tfcGF0aHMgPSAmYXJndltpXTsKKwkJCWJyZWFrOworCQl9CisKKwkJdXNhZ2UoZGFlbW9uX3VzYWdlKTsKKwl9CisKKwlpZiAobG9nX2Rlc3RpbmF0aW9uID09IExPR19ERVNUSU5BVElPTl9VTlNFVCkgeworCQlpZiAoaW5ldGRfbW9kZSB8fCBkZXRhY2gpCisJCQlsb2dfZGVzdGluYXRpb24gPSBMT0dfREVTVElOQVRJT05fU1lTTE9HOworCQllbHNlCisJCQlsb2dfZGVzdGluYXRpb24gPSBMT0dfREVTVElOQVRJT05fU1RERVJSOworCX0KKworCWlmIChsb2dfZGVzdGluYXRpb24gPT0gTE9HX0RFU1RJTkFUSU9OX1NZU0xPRykgeworCQlvcGVubG9nKCJnaXQtZGFlbW9uIiwgTE9HX1BJRCwgTE9HX0RBRU1PTik7CisJCXNldF9kaWVfcm91dGluZShkYWVtb25fZGllKTsKKwl9IGVsc2UKKwkJLyogYXZvaWQgc3BsaXR0aW5nIGEgbWVzc2FnZSBpbiB0aGUgbWlkZGxlICovCisJCXNldHZidWYoc3RkZXJyLCBOVUxMLCBfSU9GQkYsIDQwOTYpOworCisJaWYgKGluZXRkX21vZGUgJiYgKGRldGFjaCB8fCBncm91cF9uYW1lIHx8IHVzZXJfbmFtZSkpCisJCWRpZSgiLS1kZXRhY2gsIC0tdXNlciBhbmQgLS1ncm91cCBhcmUgaW5jb21wYXRpYmxlIHdpdGggLS1pbmV0ZCIpOworCisJaWYgKGluZXRkX21vZGUgJiYgKGxpc3Rlbl9wb3J0IHx8IChsaXN0ZW5fYWRkci5uciA+IDApKSkKKwkJZGllKCItLWxpc3Rlbj0gYW5kIC0tcG9ydD0gYXJlIGluY29tcGF0aWJsZSB3aXRoIC0taW5ldGQiKTsKKwllbHNlIGlmIChsaXN0ZW5fcG9ydCA9PSAwKQorCQlsaXN0ZW5fcG9ydCA9IERFRkFVTFRfR0lUX1BPUlQ7CisKKwlpZiAoZ3JvdXBfbmFtZSAmJiAhdXNlcl9uYW1lKQorCQlkaWUoIi0tZ3JvdXAgc3VwcGxpZWQgd2l0aG91dCAtLXVzZXIiKTsKKworCWlmICh1c2VyX25hbWUpCisJCWNyZWQgPSBwcmVwYXJlX2NyZWRlbnRpYWxzKHVzZXJfbmFtZSwgZ3JvdXBfbmFtZSk7CisKKwlpZiAoc3RyaWN0X3BhdGhzICYmICghb2tfcGF0aHMgfHwgISpva19wYXRocykpCisJCWRpZSgib3B0aW9uIC0tc3RyaWN0LXBhdGhzIHJlcXVpcmVzIGEgd2hpdGVsaXN0Iik7CisKKwlpZiAoYmFzZV9wYXRoICYmICFpc19kaXJlY3RvcnkoYmFzZV9wYXRoKSkKKwkJZGllKCJiYXNlLXBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSBkaXJlY3RvcnkiLAorCQkgICAgYmFzZV9wYXRoKTsKKworCWlmIChsb2dfZGVzdGluYXRpb24gIT0gTE9HX0RFU1RJTkFUSU9OX1NUREVSUikgeworCQlpZiAoIWZyZW9wZW4oIi9kZXYvbnVsbCIsICJ3Iiwgc3RkZXJyKSkKKwkJCWRpZV9lcnJubygiZmFpbGVkIHRvIHJlZGlyZWN0IHN0ZGVyciB0byAvZGV2L251bGwiKTsKKwl9CisKKwlpZiAoaW5ldGRfbW9kZSB8fCBzZXJ2ZV9tb2RlKQorCQlyZXR1cm4gZXhlY3V0ZSgpOworCisJaWYgKGRldGFjaCkgeworCQlpZiAoZGFlbW9uaXplKCkpCisJCQlkaWUoIi0tZGV0YWNoIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpOworCX0KKworCWlmIChwaWRfZmlsZSkKKwkJd3JpdGVfZmlsZShwaWRfZmlsZSwgIiUiUFJJdU1BWCwgKHVpbnRtYXhfdCkgZ2V0cGlkKCkpOworCisJLyogcHJlcGFyZSBhcmd2IGZvciBzZXJ2aW5nLXByb2Nlc3NlcyAqLworCWFyZ3ZfYXJyYXlfcHVzaCgmY2xkX2FyZ3YsIGFyZ3ZbMF0pOyAvKiBnaXQtZGFlbW9uICovCisJYXJndl9hcnJheV9wdXNoKCZjbGRfYXJndiwgIi0tc2VydmUiKTsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgKytpKQorCQlhcmd2X2FycmF5X3B1c2goJmNsZF9hcmd2LCBhcmd2W2ldKTsKKworCXJldHVybiBzZXJ2ZSgmbGlzdGVuX2FkZHIsIGxpc3Rlbl9wb3J0LCBjcmVkKTsKK30KZGlmZiAtLWdpdCBhL2RhdGUuYyBiL2RhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWVhODA3Ci0tLSAvZGV2L251bGwKKysrIGIvZGF0ZS5jCkBAIC0wLDAgKzEsMTM3MyBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKworLyoKKyAqIFRoaXMgaXMgbGlrZSBta3RpbWUsIGJ1dCB3aXRob3V0IG5vcm1hbGl6YXRpb24gb2YgdG1fd2RheSBhbmQgdG1feWRheS4KKyAqLworc3RhdGljIHRpbWVfdCB0bV90b190aW1lX3QoY29uc3Qgc3RydWN0IHRtICp0bSkKK3sKKwlzdGF0aWMgY29uc3QgaW50IG1kYXlzW10gPSB7CisJICAgIDAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0CisJfTsKKwlpbnQgeWVhciA9IHRtLT50bV95ZWFyIC0gNzA7CisJaW50IG1vbnRoID0gdG0tPnRtX21vbjsKKwlpbnQgZGF5ID0gdG0tPnRtX21kYXk7CisKKwlpZiAoeWVhciA8IDAgfHwgeWVhciA+IDEyOSkgLyogYWxnbyBvbmx5IHdvcmtzIGZvciAxOTcwLTIwOTkgKi8KKwkJcmV0dXJuIC0xOworCWlmIChtb250aCA8IDAgfHwgbW9udGggPiAxMSkgLyogYXJyYXkgYm91bmRzICovCisJCXJldHVybiAtMTsKKwlpZiAobW9udGggPCAyIHx8ICh5ZWFyICsgMikgJSA0KQorCQlkYXktLTsKKwlpZiAodG0tPnRtX2hvdXIgPCAwIHx8IHRtLT50bV9taW4gPCAwIHx8IHRtLT50bV9zZWMgPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuICh5ZWFyICogMzY1ICsgKHllYXIgKyAxKSAvIDQgKyBtZGF5c1ttb250aF0gKyBkYXkpICogMjQqNjAqNjBVTCArCisJCXRtLT50bV9ob3VyICogNjAqNjAgKyB0bS0+dG1fbWluICogNjAgKyB0bS0+dG1fc2VjOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbW9udGhfbmFtZXNbXSA9IHsKKwkiSmFudWFyeSIsICJGZWJydWFyeSIsICJNYXJjaCIsICJBcHJpbCIsICJNYXkiLCAiSnVuZSIsCisJIkp1bHkiLCAiQXVndXN0IiwgIlNlcHRlbWJlciIsICJPY3RvYmVyIiwgIk5vdmVtYmVyIiwgIkRlY2VtYmVyIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKndlZWtkYXlfbmFtZXNbXSA9IHsKKwkiU3VuZGF5cyIsICJNb25kYXlzIiwgIlR1ZXNkYXlzIiwgIldlZG5lc2RheXMiLCAiVGh1cnNkYXlzIiwgIkZyaWRheXMiLCAiU2F0dXJkYXlzIgorfTsKKworc3RhdGljIHRpbWVfdCBnbV90aW1lX3QodGltZXN0YW1wX3QgdGltZSwgaW50IHR6KQoreworCWludCBtaW51dGVzOworCisJbWludXRlcyA9IHR6IDwgMCA/IC10eiA6IHR6OworCW1pbnV0ZXMgPSAobWludXRlcyAvIDEwMCkqNjAgKyAobWludXRlcyAlIDEwMCk7CisJbWludXRlcyA9IHR6IDwgMCA/IC1taW51dGVzIDogbWludXRlczsKKworCWlmIChtaW51dGVzID4gMCkgeworCQlpZiAodW5zaWduZWRfYWRkX292ZXJmbG93cyh0aW1lLCBtaW51dGVzICogNjApKQorCQkJZGllKCJUaW1lc3RhbXArdHogdG9vIGxhcmdlOiAlIlBSSXRpbWUiICslMDRkIiwKKwkJCSAgICB0aW1lLCB0eik7CisJfSBlbHNlIGlmICh0aW1lIDwgLW1pbnV0ZXMgKiA2MCkKKwkJZGllKCJUaW1lc3RhbXAgYmVmb3JlIFVuaXggZXBvY2g6ICUiUFJJdGltZSIgJTA0ZCIsIHRpbWUsIHR6KTsKKwl0aW1lICs9IG1pbnV0ZXMgKiA2MDsKKwlpZiAoZGF0ZV9vdmVyZmxvd3ModGltZSkpCisJCWRpZSgiVGltZXN0YW1wIHRvbyBsYXJnZSBmb3IgdGhpcyBzeXN0ZW06ICUiUFJJdGltZSwgdGltZSk7CisJcmV0dXJuICh0aW1lX3QpdGltZTsKK30KKworLyoKKyAqIFRoZSAidHoiIHRoaW5nIGlzIHBhc3NlZCBpbiBhcyB0aGlzIHN0cmFuZ2UgImRlY2ltYWwgcGFyc2Ugb2YgdHoiCisgKiB0aGluZywgd2hpY2ggbWVhbnMgdGhhdCB0eiAtMDEwMCBpcyBwYXNzZWQgaW4gYXMgdGhlIGludGVnZXIgLTEwMCwKKyAqIGV2ZW4gdGhvdWdoIGl0IG1lYW5zICJzaXh0eSBtaW51dGVzIG9mZiIKKyAqLworc3RhdGljIHN0cnVjdCB0bSAqdGltZV90b190bSh0aW1lc3RhbXBfdCB0aW1lLCBpbnQgdHosIHN0cnVjdCB0bSAqdG0pCit7CisJdGltZV90IHQgPSBnbV90aW1lX3QodGltZSwgdHopOworCXJldHVybiBnbXRpbWVfcigmdCwgdG0pOworfQorCitzdGF0aWMgc3RydWN0IHRtICp0aW1lX3RvX3RtX2xvY2FsKHRpbWVzdGFtcF90IHRpbWUsIHN0cnVjdCB0bSAqdG0pCit7CisJdGltZV90IHQgPSB0aW1lOworCXJldHVybiBsb2NhbHRpbWVfcigmdCwgdG0pOworfQorCisvKgorICogRmlsbCBpbiB0aGUgbG9jYWx0aW1lICdzdHJ1Y3QgdG0nIGZvciB0aGUgc3VwcGxpZWQgdGltZSwKKyAqIGFuZCByZXR1cm4gdGhlIGxvY2FsIHR6LgorICovCitzdGF0aWMgaW50IGxvY2FsX3RpbWVfdHpvZmZzZXQodGltZV90IHQsIHN0cnVjdCB0bSAqdG0pCit7CisJdGltZV90IHRfbG9jYWw7CisJaW50IG9mZnNldCwgZWFzdHdlc3Q7CisKKwlsb2NhbHRpbWVfcigmdCwgdG0pOworCXRfbG9jYWwgPSB0bV90b190aW1lX3QodG0pOworCWlmICh0X2xvY2FsID09IC0xKQorCQlyZXR1cm4gMDsgLyogZXJyb3I7IGp1c3QgdXNlICswMDAwICovCisJaWYgKHRfbG9jYWwgPCB0KSB7CisJCWVhc3R3ZXN0ID0gLTE7CisJCW9mZnNldCA9IHQgLSB0X2xvY2FsOworCX0gZWxzZSB7CisJCWVhc3R3ZXN0ID0gMTsKKwkJb2Zmc2V0ID0gdF9sb2NhbCAtIHQ7CisJfQorCW9mZnNldCAvPSA2MDsgLyogaW4gbWludXRlcyAqLworCW9mZnNldCA9IChvZmZzZXQgJSA2MCkgKyAoKG9mZnNldCAvIDYwKSAqIDEwMCk7CisJcmV0dXJuIG9mZnNldCAqIGVhc3R3ZXN0OworfQorCisvKgorICogV2hhdCB2YWx1ZSBvZiAidHoiIHdhcyBpbiBlZmZlY3QgYmFjayB0aGVuIGF0ICJ0aW1lIiBpbiB0aGUKKyAqIGxvY2FsIHRpbWV6b25lPworICovCitzdGF0aWMgaW50IGxvY2FsX3R6b2Zmc2V0KHRpbWVzdGFtcF90IHRpbWUpCit7CisJc3RydWN0IHRtIHRtOworCisJaWYgKGRhdGVfb3ZlcmZsb3dzKHRpbWUpKQorCQlkaWUoIlRpbWVzdGFtcCB0b28gbGFyZ2UgZm9yIHRoaXMgc3lzdGVtOiAlIlBSSXRpbWUsIHRpbWUpOworCisJcmV0dXJuIGxvY2FsX3RpbWVfdHpvZmZzZXQoKHRpbWVfdCl0aW1lLCAmdG0pOworfQorCitzdGF0aWMgdm9pZCBnZXRfdGltZShzdHJ1Y3QgdGltZXZhbCAqbm93KQoreworCWNvbnN0IGNoYXIgKng7CisKKwl4ID0gZ2V0ZW52KCJHSVRfVEVTVF9EQVRFX05PVyIpOworCWlmICh4KSB7CisJCW5vdy0+dHZfc2VjID0gYXRvaSh4KTsKKwkJbm93LT50dl91c2VjID0gMDsKKwl9CisJZWxzZQorCQlnZXR0aW1lb2ZkYXkobm93LCBOVUxMKTsKK30KKwordm9pZCBzaG93X2RhdGVfcmVsYXRpdmUodGltZXN0YW1wX3QgdGltZSwgc3RydWN0IHN0cmJ1ZiAqdGltZWJ1ZikKK3sKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJdGltZXN0YW1wX3QgZGlmZjsKKworCWdldF90aW1lKCZub3cpOworCWlmIChub3cudHZfc2VjIDwgdGltZSkgeworCQlzdHJidWZfYWRkc3RyKHRpbWVidWYsIF8oImluIHRoZSBmdXR1cmUiKSk7CisJCXJldHVybjsKKwl9CisJZGlmZiA9IG5vdy50dl9zZWMgLSB0aW1lOworCWlmIChkaWZmIDwgOTApIHsKKwkJc3RyYnVmX2FkZGYodGltZWJ1ZiwKKwkJCSBRXygiJSJQUkl0aW1lIiBzZWNvbmQgYWdvIiwgIiUiUFJJdGltZSIgc2Vjb25kcyBhZ28iLCBkaWZmKSwgZGlmZik7CisJCXJldHVybjsKKwl9CisJLyogVHVybiBpdCBpbnRvIG1pbnV0ZXMgKi8KKwlkaWZmID0gKGRpZmYgKyAzMCkgLyA2MDsKKwlpZiAoZGlmZiA8IDkwKSB7CisJCXN0cmJ1Zl9hZGRmKHRpbWVidWYsCisJCQkgUV8oIiUiUFJJdGltZSIgbWludXRlIGFnbyIsICIlIlBSSXRpbWUiIG1pbnV0ZXMgYWdvIiwgZGlmZiksIGRpZmYpOworCQlyZXR1cm47CisJfQorCS8qIFR1cm4gaXQgaW50byBob3VycyAqLworCWRpZmYgPSAoZGlmZiArIDMwKSAvIDYwOworCWlmIChkaWZmIDwgMzYpIHsKKwkJc3RyYnVmX2FkZGYodGltZWJ1ZiwKKwkJCSBRXygiJSJQUkl0aW1lIiBob3VyIGFnbyIsICIlIlBSSXRpbWUiIGhvdXJzIGFnbyIsIGRpZmYpLCBkaWZmKTsKKwkJcmV0dXJuOworCX0KKwkvKiBXZSBkZWFsIHdpdGggbnVtYmVyIG9mIGRheXMgZnJvbSBoZXJlIG9uICovCisJZGlmZiA9IChkaWZmICsgMTIpIC8gMjQ7CisJaWYgKGRpZmYgPCAxNCkgeworCQlzdHJidWZfYWRkZih0aW1lYnVmLAorCQkJIFFfKCIlIlBSSXRpbWUiIGRheSBhZ28iLCAiJSJQUkl0aW1lIiBkYXlzIGFnbyIsIGRpZmYpLCBkaWZmKTsKKwkJcmV0dXJuOworCX0KKwkvKiBTYXkgd2Vla3MgZm9yIHRoZSBwYXN0IDEwIHdlZWtzIG9yIHNvICovCisJaWYgKGRpZmYgPCA3MCkgeworCQlzdHJidWZfYWRkZih0aW1lYnVmLAorCQkJIFFfKCIlIlBSSXRpbWUiIHdlZWsgYWdvIiwgIiUiUFJJdGltZSIgd2Vla3MgYWdvIiwgKGRpZmYgKyAzKSAvIDcpLAorCQkJIChkaWZmICsgMykgLyA3KTsKKwkJcmV0dXJuOworCX0KKwkvKiBTYXkgbW9udGhzIGZvciB0aGUgcGFzdCAxMiBtb250aHMgb3Igc28gKi8KKwlpZiAoZGlmZiA8IDM2NSkgeworCQlzdHJidWZfYWRkZih0aW1lYnVmLAorCQkJIFFfKCIlIlBSSXRpbWUiIG1vbnRoIGFnbyIsICIlIlBSSXRpbWUiIG1vbnRocyBhZ28iLCAoZGlmZiArIDE1KSAvIDMwKSwKKwkJCSAoZGlmZiArIDE1KSAvIDMwKTsKKwkJcmV0dXJuOworCX0KKwkvKiBHaXZlIHllYXJzIGFuZCBtb250aHMgZm9yIDUgeWVhcnMgb3Igc28gKi8KKwlpZiAoZGlmZiA8IDE4MjUpIHsKKwkJdGltZXN0YW1wX3QgdG90YWxtb250aHMgPSAoZGlmZiAqIDEyICogMiArIDM2NSkgLyAoMzY1ICogMik7CisJCXRpbWVzdGFtcF90IHllYXJzID0gdG90YWxtb250aHMgLyAxMjsKKwkJdGltZXN0YW1wX3QgbW9udGhzID0gdG90YWxtb250aHMgJSAxMjsKKwkJaWYgKG1vbnRocykgeworCQkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZGYoJnNiLCBRXygiJSJQUkl0aW1lIiB5ZWFyIiwgIiUiUFJJdGltZSIgeWVhcnMiLCB5ZWFycyksIHllYXJzKTsKKwkJCXN0cmJ1Zl9hZGRmKHRpbWVidWYsCisJCQkJIC8qIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiICovCisJCQkJIFFfKCIlcywgJSJQUkl0aW1lIiBtb250aCBhZ28iLCAiJXMsICUiUFJJdGltZSIgbW9udGhzIGFnbyIsIG1vbnRocyksCisJCQkJIHNiLmJ1ZiwgbW9udGhzKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCX0gZWxzZQorCQkJc3RyYnVmX2FkZGYodGltZWJ1ZiwKKwkJCQkgUV8oIiUiUFJJdGltZSIgeWVhciBhZ28iLCAiJSJQUkl0aW1lIiB5ZWFycyBhZ28iLCB5ZWFycyksIHllYXJzKTsKKwkJcmV0dXJuOworCX0KKwkvKiBPdGhlcndpc2UsIGp1c3QgeWVhcnMuIENlbnR1cmllcyBpcyBwcm9iYWJseSBvdmVya2lsbC4gKi8KKwlzdHJidWZfYWRkZih0aW1lYnVmLAorCQkgUV8oIiUiUFJJdGltZSIgeWVhciBhZ28iLCAiJSJQUkl0aW1lIiB5ZWFycyBhZ28iLCAoZGlmZiArIDE4MykgLyAzNjUpLAorCQkgKGRpZmYgKyAxODMpIC8gMzY1KTsKK30KKworc3RydWN0IGRhdGVfbW9kZSAqZGF0ZV9tb2RlX2Zyb21fdHlwZShlbnVtIGRhdGVfbW9kZV90eXBlIHR5cGUpCit7CisJc3RhdGljIHN0cnVjdCBkYXRlX21vZGUgbW9kZTsKKwlpZiAodHlwZSA9PSBEQVRFX1NUUkZUSU1FKQorCQlCVUcoImNhbm5vdCBjcmVhdGUgYW5vbnltb3VzIHN0cmZ0aW1lIGRhdGVfbW9kZSBzdHJ1Y3QiKTsKKwltb2RlLnR5cGUgPSB0eXBlOworCW1vZGUubG9jYWwgPSAwOworCXJldHVybiAmbW9kZTsKK30KKworc3RhdGljIHZvaWQgc2hvd19kYXRlX25vcm1hbChzdHJ1Y3Qgc3RyYnVmICpidWYsIHRpbWVzdGFtcF90IHRpbWUsIHN0cnVjdCB0bSAqdG0sIGludCB0eiwgc3RydWN0IHRtICpodW1hbl90bSwgaW50IGh1bWFuX3R6LCBpbnQgbG9jYWwpCit7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgaW50CXllYXI6MSwKKwkJCQlkYXRlOjEsCisJCQkJd2RheToxLAorCQkJCXRpbWU6MSwKKwkJCQlzZWNvbmRzOjEsCisJCQkJdHo6MTsKKwl9IGhpZGUgPSB7IDAgfTsKKworCWhpZGUudHogPSBsb2NhbCB8fCB0eiA9PSBodW1hbl90ejsKKwloaWRlLnllYXIgPSB0bS0+dG1feWVhciA9PSBodW1hbl90bS0+dG1feWVhcjsKKwlpZiAoaGlkZS55ZWFyKSB7CisJCWlmICh0bS0+dG1fbW9uID09IGh1bWFuX3RtLT50bV9tb24pIHsKKwkJCWlmICh0bS0+dG1fbWRheSA+IGh1bWFuX3RtLT50bV9tZGF5KSB7CisJCQkJLyogRnV0dXJlIGRhdGU6IHRoaW5rIHRpbWV6b25lcyAqLworCQkJfSBlbHNlIGlmICh0bS0+dG1fbWRheSA9PSBodW1hbl90bS0+dG1fbWRheSkgeworCQkJCWhpZGUuZGF0ZSA9IGhpZGUud2RheSA9IDE7CisJCQl9IGVsc2UgaWYgKHRtLT50bV9tZGF5ICsgNSA+IGh1bWFuX3RtLT50bV9tZGF5KSB7CisJCQkJLyogTGVhdmUganVzdCB3ZWVrZGF5IGlmIGl0IHdhcyBhIGZldyBkYXlzIGFnbyAqLworCQkJCWhpZGUuZGF0ZSA9IDE7CisJCQl9CisJCX0KKwl9CisKKwkvKiBTaG93ICJ0b2RheSIgdGltZXMgYXMganVzdCByZWxhdGl2ZSB0aW1lcyAqLworCWlmIChoaWRlLndkYXkpIHsKKwkJc2hvd19kYXRlX3JlbGF0aXZlKHRpbWUsIGJ1Zik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEFsd2F5cyBoaWRlIHNlY29uZHMgZm9yIGh1bWFuLXJlYWRhYmxlLgorCSAqIEhpZGUgdGltZXpvbmUgaWYgc2hvd2luZyBkYXRlLgorCSAqIEhpZGUgd2Vla2RheSBhbmQgdGltZSBpZiBzaG93aW5nIHllYXIuCisJICoKKwkgKiBUaGUgbG9naWMgaGVyZSBpcyB0d28tZm9sZDoKKwkgKiAgKGEpIG9ubHkgc2hvdyBkZXRhaWxzIHdoZW4gcmVjZW50IGVub3VnaCB0byBtYXR0ZXIKKwkgKiAgKGIpIGtlZXAgdGhlIG1heGltdW0gbGVuZ3RoICJzaW1pbGFyIiwgYW5kIGluIGNoZWNrCisJICovCisJaWYgKGh1bWFuX3RtLT50bV95ZWFyKSB7CisJCWhpZGUuc2Vjb25kcyA9IDE7CisJCWhpZGUudHogfD0gIWhpZGUuZGF0ZTsKKwkJaGlkZS53ZGF5ID0gaGlkZS50aW1lID0gIWhpZGUueWVhcjsKKwl9CisKKwlpZiAoIWhpZGUud2RheSkKKwkJc3RyYnVmX2FkZGYoYnVmLCAiJS4zcyAiLCB3ZWVrZGF5X25hbWVzW3RtLT50bV93ZGF5XSk7CisJaWYgKCFoaWRlLmRhdGUpCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUuM3MgJWQgIiwgbW9udGhfbmFtZXNbdG0tPnRtX21vbl0sIHRtLT50bV9tZGF5KTsKKworCS8qIERvIHdlIHdhbnQgQU0vUE0gZGVwZW5kaW5nIG9uIGxvY2FsZT8gKi8KKwlpZiAoIWhpZGUudGltZSkgeworCQlzdHJidWZfYWRkZihidWYsICIlMDJkOiUwMmQiLCB0bS0+dG1faG91ciwgdG0tPnRtX21pbik7CisJCWlmICghaGlkZS5zZWNvbmRzKQorCQkJc3RyYnVmX2FkZGYoYnVmLCAiOiUwMmQiLCB0bS0+dG1fc2VjKTsKKwl9IGVsc2UKKwkJc3RyYnVmX3J0cmltKGJ1Zik7CisKKwlpZiAoIWhpZGUueWVhcikKKwkJc3RyYnVmX2FkZGYoYnVmLCAiICVkIiwgdG0tPnRtX3llYXIgKyAxOTAwKTsKKworCWlmICghaGlkZS50eikKKwkJc3RyYnVmX2FkZGYoYnVmLCAiICUrMDVkIiwgdHopOworfQorCitjb25zdCBjaGFyICpzaG93X2RhdGUodGltZXN0YW1wX3QgdGltZSwgaW50IHR6LCBjb25zdCBzdHJ1Y3QgZGF0ZV9tb2RlICptb2RlKQoreworCXN0cnVjdCB0bSAqdG07CisJc3RydWN0IHRtIHRtYnVmID0geyAwIH07CisJc3RydWN0IHRtIGh1bWFuX3RtID0geyAwIH07CisJaW50IGh1bWFuX3R6ID0gLTE7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgdGltZWJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKG1vZGUtPnR5cGUgPT0gREFURV9VTklYKSB7CisJCXN0cmJ1Zl9yZXNldCgmdGltZWJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZ0aW1lYnVmLCAiJSJQUkl0aW1lLCB0aW1lKTsKKwkJcmV0dXJuIHRpbWVidWYuYnVmOworCX0KKworCWlmIChtb2RlLT50eXBlID09IERBVEVfSFVNQU4pIHsKKwkJc3RydWN0IHRpbWV2YWwgbm93OworCisJCWdldF90aW1lKCZub3cpOworCisJCS8qIEZpbGwgaW4gdGhlIGRhdGEgZm9yICJjdXJyZW50IHRpbWUiIGluIGh1bWFuX3R6IGFuZCBodW1hbl90bSAqLworCQlodW1hbl90eiA9IGxvY2FsX3RpbWVfdHpvZmZzZXQobm93LnR2X3NlYywgJmh1bWFuX3RtKTsKKwl9CisKKwlpZiAobW9kZS0+bG9jYWwpCisJCXR6ID0gbG9jYWxfdHpvZmZzZXQodGltZSk7CisKKwlpZiAobW9kZS0+dHlwZSA9PSBEQVRFX1JBVykgeworCQlzdHJidWZfcmVzZXQoJnRpbWVidWYpOworCQlzdHJidWZfYWRkZigmdGltZWJ1ZiwgIiUiUFJJdGltZSIgJSswNWQiLCB0aW1lLCB0eik7CisJCXJldHVybiB0aW1lYnVmLmJ1ZjsKKwl9CisKKwlpZiAobW9kZS0+dHlwZSA9PSBEQVRFX1JFTEFUSVZFKSB7CisJCXN0cmJ1Zl9yZXNldCgmdGltZWJ1Zik7CisJCXNob3dfZGF0ZV9yZWxhdGl2ZSh0aW1lLCAmdGltZWJ1Zik7CisJCXJldHVybiB0aW1lYnVmLmJ1ZjsKKwl9CisKKwlpZiAobW9kZS0+bG9jYWwpCisJCXRtID0gdGltZV90b190bV9sb2NhbCh0aW1lLCAmdG1idWYpOworCWVsc2UKKwkJdG0gPSB0aW1lX3RvX3RtKHRpbWUsIHR6LCAmdG1idWYpOworCWlmICghdG0pIHsKKwkJdG0gPSB0aW1lX3RvX3RtKDAsIDAsICZ0bWJ1Zik7CisJCXR6ID0gMDsKKwl9CisKKwlzdHJidWZfcmVzZXQoJnRpbWVidWYpOworCWlmIChtb2RlLT50eXBlID09IERBVEVfU0hPUlQpCisJCXN0cmJ1Zl9hZGRmKCZ0aW1lYnVmLCAiJTA0ZC0lMDJkLSUwMmQiLCB0bS0+dG1feWVhciArIDE5MDAsCisJCQkJdG0tPnRtX21vbiArIDEsIHRtLT50bV9tZGF5KTsKKwllbHNlIGlmIChtb2RlLT50eXBlID09IERBVEVfSVNPODYwMSkKKwkJc3RyYnVmX2FkZGYoJnRpbWVidWYsICIlMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6JTAyZCAlKzA1ZCIsCisJCQkJdG0tPnRtX3llYXIgKyAxOTAwLAorCQkJCXRtLT50bV9tb24gKyAxLAorCQkJCXRtLT50bV9tZGF5LAorCQkJCXRtLT50bV9ob3VyLCB0bS0+dG1fbWluLCB0bS0+dG1fc2VjLAorCQkJCXR6KTsKKwllbHNlIGlmIChtb2RlLT50eXBlID09IERBVEVfSVNPODYwMV9TVFJJQ1QpIHsKKwkJY2hhciBzaWduID0gKHR6ID49IDApID8gJysnIDogJy0nOworCQl0eiA9IGFicyh0eik7CisJCXN0cmJ1Zl9hZGRmKCZ0aW1lYnVmLCAiJTA0ZC0lMDJkLSUwMmRUJTAyZDolMDJkOiUwMmQlYyUwMmQ6JTAyZCIsCisJCQkJdG0tPnRtX3llYXIgKyAxOTAwLAorCQkJCXRtLT50bV9tb24gKyAxLAorCQkJCXRtLT50bV9tZGF5LAorCQkJCXRtLT50bV9ob3VyLCB0bS0+dG1fbWluLCB0bS0+dG1fc2VjLAorCQkJCXNpZ24sIHR6IC8gMTAwLCB0eiAlIDEwMCk7CisJfSBlbHNlIGlmIChtb2RlLT50eXBlID09IERBVEVfUkZDMjgyMikKKwkJc3RyYnVmX2FkZGYoJnRpbWVidWYsICIlLjNzLCAlZCAlLjNzICVkICUwMmQ6JTAyZDolMDJkICUrMDVkIiwKKwkJCXdlZWtkYXlfbmFtZXNbdG0tPnRtX3dkYXldLCB0bS0+dG1fbWRheSwKKwkJCW1vbnRoX25hbWVzW3RtLT50bV9tb25dLCB0bS0+dG1feWVhciArIDE5MDAsCisJCQl0bS0+dG1faG91ciwgdG0tPnRtX21pbiwgdG0tPnRtX3NlYywgdHopOworCWVsc2UgaWYgKG1vZGUtPnR5cGUgPT0gREFURV9TVFJGVElNRSkKKwkJc3RyYnVmX2FkZGZ0aW1lKCZ0aW1lYnVmLCBtb2RlLT5zdHJmdGltZV9mbXQsIHRtLCB0eiwKKwkJCQkhbW9kZS0+bG9jYWwpOworCWVsc2UKKwkJc2hvd19kYXRlX25vcm1hbCgmdGltZWJ1ZiwgdGltZSwgdG0sIHR6LCAmaHVtYW5fdG0sIGh1bWFuX3R6LCBtb2RlLT5sb2NhbCk7CisJcmV0dXJuIHRpbWVidWYuYnVmOworfQorCisvKgorICogQ2hlY2sgdGhlc2UuIEFuZCBub3RlIGhvdyBpdCBkb2Vzbid0IGRvIHRoZSBzdW1tZXItdGltZSBjb252ZXJzaW9uLgorICoKKyAqIEluIG15IHdvcmxkLCBpdCdzIGFsd2F5cyBzdW1tZXIsIGFuZCB0aGluZ3MgYXJlIHByb2JhYmx5IGEgYml0IG9mZgorICogaW4gb3RoZXIgd2F5cyB0b28uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IG9mZnNldDsKKwlpbnQgZHN0OworfSB0aW1lem9uZV9uYW1lc1tdID0geworCXsgIklETFciLCAtMTIsIDAsIH0sCS8qIEludGVybmF0aW9uYWwgRGF0ZSBMaW5lIFdlc3QgKi8KKwl7ICJOVCIsICAgLTExLCAwLCB9LAkvKiBOb21lICovCisJeyAiQ0FUIiwgIC0xMCwgMCwgfSwJLyogQ2VudHJhbCBBbGFza2EgKi8KKwl7ICJIU1QiLCAgLTEwLCAwLCB9LAkvKiBIYXdhaWkgU3RhbmRhcmQgKi8KKwl7ICJIRFQiLCAgLTEwLCAxLCB9LAkvKiBIYXdhaWkgRGF5bGlnaHQgKi8KKwl7ICJZU1QiLCAgIC05LCAwLCB9LAkvKiBZdWtvbiBTdGFuZGFyZCAqLworCXsgIllEVCIsICAgLTksIDEsIH0sCS8qIFl1a29uIERheWxpZ2h0ICovCisJeyAiUFNUIiwgICAtOCwgMCwgfSwJLyogUGFjaWZpYyBTdGFuZGFyZCAqLworCXsgIlBEVCIsICAgLTgsIDEsIH0sCS8qIFBhY2lmaWMgRGF5bGlnaHQgKi8KKwl7ICJNU1QiLCAgIC03LCAwLCB9LAkvKiBNb3VudGFpbiBTdGFuZGFyZCAqLworCXsgIk1EVCIsICAgLTcsIDEsIH0sCS8qIE1vdW50YWluIERheWxpZ2h0ICovCisJeyAiQ1NUIiwgICAtNiwgMCwgfSwJLyogQ2VudHJhbCBTdGFuZGFyZCAqLworCXsgIkNEVCIsICAgLTYsIDEsIH0sCS8qIENlbnRyYWwgRGF5bGlnaHQgKi8KKwl7ICJFU1QiLCAgIC01LCAwLCB9LAkvKiBFYXN0ZXJuIFN0YW5kYXJkICovCisJeyAiRURUIiwgICAtNSwgMSwgfSwJLyogRWFzdGVybiBEYXlsaWdodCAqLworCXsgIkFTVCIsICAgLTMsIDAsIH0sCS8qIEF0bGFudGljIFN0YW5kYXJkICovCisJeyAiQURUIiwgICAtMywgMSwgfSwJLyogQXRsYW50aWMgRGF5bGlnaHQgKi8KKwl7ICJXQVQiLCAgIC0xLCAwLCB9LAkvKiBXZXN0IEFmcmljYSAqLworCisJeyAiR01UIiwgICAgMCwgMCwgfSwJLyogR3JlZW53aWNoIE1lYW4gKi8KKwl7ICJVVEMiLCAgICAwLCAwLCB9LAkvKiBVbml2ZXJzYWwgKENvb3JkaW5hdGVkKSAqLworCXsgIloiLCAgICAgIDAsIDAsIH0sICAgIC8qIFp1bHUsIGFsaWFzIGZvciBVVEMgKi8KKworCXsgIldFVCIsICAgIDAsIDAsIH0sCS8qIFdlc3Rlcm4gRXVyb3BlYW4gKi8KKwl7ICJCU1QiLCAgICAwLCAxLCB9LAkvKiBCcml0aXNoIFN1bW1lciAqLworCXsgIkNFVCIsICAgKzEsIDAsIH0sCS8qIENlbnRyYWwgRXVyb3BlYW4gKi8KKwl7ICJNRVQiLCAgICsxLCAwLCB9LAkvKiBNaWRkbGUgRXVyb3BlYW4gKi8KKwl7ICJNRVdUIiwgICsxLCAwLCB9LAkvKiBNaWRkbGUgRXVyb3BlYW4gV2ludGVyICovCisJeyAiTUVTVCIsICArMSwgMSwgfSwJLyogTWlkZGxlIEV1cm9wZWFuIFN1bW1lciAqLworCXsgIkNFU1QiLCAgKzEsIDEsIH0sCS8qIENlbnRyYWwgRXVyb3BlYW4gU3VtbWVyICovCisJeyAiTUVTWiIsICArMSwgMSwgfSwJLyogTWlkZGxlIEV1cm9wZWFuIFN1bW1lciAqLworCXsgIkZXVCIsICAgKzEsIDAsIH0sCS8qIEZyZW5jaCBXaW50ZXIgKi8KKwl7ICJGU1QiLCAgICsxLCAxLCB9LAkvKiBGcmVuY2ggU3VtbWVyICovCisJeyAiRUVUIiwgICArMiwgMCwgfSwJLyogRWFzdGVybiBFdXJvcGUsIFVTU1IgWm9uZSAxICovCisJeyAiRUVTVCIsICArMiwgMSwgfSwJLyogRWFzdGVybiBFdXJvcGVhbiBEYXlsaWdodCAqLworCXsgIldBU1QiLCAgKzcsIDAsIH0sCS8qIFdlc3QgQXVzdHJhbGlhbiBTdGFuZGFyZCAqLworCXsgIldBRFQiLCAgKzcsIDEsIH0sCS8qIFdlc3QgQXVzdHJhbGlhbiBEYXlsaWdodCAqLworCXsgIkNDVCIsICAgKzgsIDAsIH0sCS8qIENoaW5hIENvYXN0LCBVU1NSIFpvbmUgNyAqLworCXsgIkpTVCIsICAgKzksIDAsIH0sCS8qIEphcGFuIFN0YW5kYXJkLCBVU1NSIFpvbmUgOCAqLworCXsgIkVBU1QiLCArMTAsIDAsIH0sCS8qIEVhc3Rlcm4gQXVzdHJhbGlhbiBTdGFuZGFyZCAqLworCXsgIkVBRFQiLCArMTAsIDEsIH0sCS8qIEVhc3Rlcm4gQXVzdHJhbGlhbiBEYXlsaWdodCAqLworCXsgIkdTVCIsICArMTAsIDAsIH0sCS8qIEd1YW0gU3RhbmRhcmQsIFVTU1IgWm9uZSA5ICovCisJeyAiTlpUIiwgICsxMiwgMCwgfSwJLyogTmV3IFplYWxhbmQgKi8KKwl7ICJOWlNUIiwgKzEyLCAwLCB9LAkvKiBOZXcgWmVhbGFuZCBTdGFuZGFyZCAqLworCXsgIk5aRFQiLCArMTIsIDEsIH0sCS8qIE5ldyBaZWFsYW5kIERheWxpZ2h0ICovCisJeyAiSURMRSIsICsxMiwgMCwgfSwJLyogSW50ZXJuYXRpb25hbCBEYXRlIExpbmUgRWFzdCAqLworfTsKKworc3RhdGljIGludCBtYXRjaF9zdHJpbmcoY29uc3QgY2hhciAqZGF0ZSwgY29uc3QgY2hhciAqc3RyKQoreworCWludCBpID0gMDsKKworCWZvciAoaSA9IDA7ICpkYXRlOyBkYXRlKyssIHN0cisrLCBpKyspIHsKKwkJaWYgKCpkYXRlID09ICpzdHIpCisJCQljb250aW51ZTsKKwkJaWYgKHRvdXBwZXIoKmRhdGUpID09IHRvdXBwZXIoKnN0cikpCisJCQljb250aW51ZTsKKwkJaWYgKCFpc2FsbnVtKCpkYXRlKSkKKwkJCWJyZWFrOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgc2tpcF9hbHBoYShjb25zdCBjaGFyICpkYXRlKQoreworCWludCBpID0gMDsKKwlkbyB7CisJCWkrKzsKKwl9IHdoaWxlIChpc2FscGhhKGRhdGVbaV0pKTsKKwlyZXR1cm4gaTsKK30KKworLyoKKyogUGFyc2UgbW9udGgsIHdlZWtkYXksIG9yIHRpbWV6b25lIG5hbWUKKyovCitzdGF0aWMgaW50IG1hdGNoX2FscGhhKGNvbnN0IGNoYXIgKmRhdGUsIHN0cnVjdCB0bSAqdG0sIGludCAqb2Zmc2V0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKKwkJaW50IG1hdGNoID0gbWF0Y2hfc3RyaW5nKGRhdGUsIG1vbnRoX25hbWVzW2ldKTsKKwkJaWYgKG1hdGNoID49IDMpIHsKKwkJCXRtLT50bV9tb24gPSBpOworCQkJcmV0dXJuIG1hdGNoOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQlpbnQgbWF0Y2ggPSBtYXRjaF9zdHJpbmcoZGF0ZSwgd2Vla2RheV9uYW1lc1tpXSk7CisJCWlmIChtYXRjaCA+PSAzKSB7CisJCQl0bS0+dG1fd2RheSA9IGk7CisJCQlyZXR1cm4gbWF0Y2g7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0aW1lem9uZV9uYW1lcyk7IGkrKykgeworCQlpbnQgbWF0Y2ggPSBtYXRjaF9zdHJpbmcoZGF0ZSwgdGltZXpvbmVfbmFtZXNbaV0ubmFtZSk7CisJCWlmIChtYXRjaCA+PSAzIHx8IG1hdGNoID09IHN0cmxlbih0aW1lem9uZV9uYW1lc1tpXS5uYW1lKSkgeworCQkJaW50IG9mZiA9IHRpbWV6b25lX25hbWVzW2ldLm9mZnNldDsKKworCQkJLyogVGhpcyBpcyBib2d1cywgYnV0IHdlIGxpa2Ugc3VtbWVyICovCisJCQlvZmYgKz0gdGltZXpvbmVfbmFtZXNbaV0uZHN0OworCisJCQkvKiBPbmx5IHVzZSB0aGUgdHogbmFtZSBvZmZzZXQgaWYgd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyBiZXR0ZXIgKi8KKwkJCWlmICgqb2Zmc2V0ID09IC0xKQorCQkJCSpvZmZzZXQgPSA2MCpvZmY7CisKKwkJCXJldHVybiBtYXRjaDsKKwkJfQorCX0KKworCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgIlBNIikgPT0gMikgeworCQl0bS0+dG1faG91ciA9ICh0bS0+dG1faG91ciAlIDEyKSArIDEyOworCQlyZXR1cm4gMjsKKwl9CisKKwlpZiAobWF0Y2hfc3RyaW5nKGRhdGUsICJBTSIpID09IDIpIHsKKwkJdG0tPnRtX2hvdXIgPSAodG0tPnRtX2hvdXIgJSAxMikgKyAwOworCQlyZXR1cm4gMjsKKwl9CisKKwkvKiBCQUQgQ1JBUCAqLworCXJldHVybiBza2lwX2FscGhhKGRhdGUpOworfQorCitzdGF0aWMgaW50IHNldF9kYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXksIHN0cnVjdCB0bSAqbm93X3RtLCB0aW1lX3Qgbm93LCBzdHJ1Y3QgdG0gKnRtKQoreworCWlmIChtb250aCA+IDAgJiYgbW9udGggPCAxMyAmJiBkYXkgPiAwICYmIGRheSA8IDMyKSB7CisJCXN0cnVjdCB0bSBjaGVjayA9ICp0bTsKKwkJc3RydWN0IHRtICpyID0gKG5vd190bSA/ICZjaGVjayA6IHRtKTsKKwkJdGltZV90IHNwZWNpZmllZDsKKworCQlyLT50bV9tb24gPSBtb250aCAtIDE7CisJCXItPnRtX21kYXkgPSBkYXk7CisJCWlmICh5ZWFyID09IC0xKSB7CisJCQlpZiAoIW5vd190bSkKKwkJCQlyZXR1cm4gMTsKKwkJCXItPnRtX3llYXIgPSBub3dfdG0tPnRtX3llYXI7CisJCX0KKwkJZWxzZSBpZiAoeWVhciA+PSAxOTcwICYmIHllYXIgPCAyMTAwKQorCQkJci0+dG1feWVhciA9IHllYXIgLSAxOTAwOworCQllbHNlIGlmICh5ZWFyID4gNzAgJiYgeWVhciA8IDEwMCkKKwkJCXItPnRtX3llYXIgPSB5ZWFyOworCQllbHNlIGlmICh5ZWFyIDwgMzgpCisJCQlyLT50bV95ZWFyID0geWVhciArIDEwMDsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCQlpZiAoIW5vd190bSkKKwkJCXJldHVybiAwOworCisJCXNwZWNpZmllZCA9IHRtX3RvX3RpbWVfdChyKTsKKworCQkvKiBCZSBpdCBjb21taXQgdGltZSBvciBhdXRob3IgdGltZSwgaXQgZG9lcyBub3QgbWFrZQorCQkgKiBzZW5zZSB0byBzcGVjaWZ5IHRpbWVzdGFtcCB3YXkgaW50byB0aGUgZnV0dXJlLiAgTWFrZQorCQkgKiBzdXJlIGl0IGlzIG5vdCBsYXRlciB0aGFuIHRlbiBkYXlzIGZyb20gbm93Li4uCisJCSAqLworCQlpZiAoKHNwZWNpZmllZCAhPSAtMSkgJiYgKG5vdyArIDEwKjI0KjM2MDAgPCBzcGVjaWZpZWQpKQorCQkJcmV0dXJuIC0xOworCQl0bS0+dG1fbW9uID0gci0+dG1fbW9uOworCQl0bS0+dG1fbWRheSA9IHItPnRtX21kYXk7CisJCWlmICh5ZWFyICE9IC0xKQorCQkJdG0tPnRtX3llYXIgPSByLT50bV95ZWFyOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHNldF90aW1lKGxvbmcgaG91ciwgbG9uZyBtaW51dGUsIGxvbmcgc2Vjb25kLCBzdHJ1Y3QgdG0gKnRtKQoreworCS8qIFdlIGFjY2VwdCA2MXN0IHNlY29uZCBiZWNhdXNlIG9mIGxlYXAgc2Vjb25kICovCisJaWYgKDAgPD0gaG91ciAmJiBob3VyIDw9IDI0ICYmCisJICAgIDAgPD0gbWludXRlICYmIG1pbnV0ZSA8IDYwICYmCisJICAgIDAgPD0gc2Vjb25kICYmIHNlY29uZCA8PSA2MCkgeworCQl0bS0+dG1faG91ciA9IGhvdXI7CisJCXRtLT50bV9taW4gPSBtaW51dGU7CisJCXRtLT50bV9zZWMgPSBzZWNvbmQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgaXNfZGF0ZV9rbm93bihzdHJ1Y3QgdG0gKnRtKQoreworCXJldHVybiB0bS0+dG1feWVhciAhPSAtMSAmJiB0bS0+dG1fbW9uICE9IC0xICYmIHRtLT50bV9tZGF5ICE9IC0xOworfQorCitzdGF0aWMgaW50IG1hdGNoX211bHRpX251bWJlcih0aW1lc3RhbXBfdCBudW0sIGNoYXIgYywgY29uc3QgY2hhciAqZGF0ZSwKKwkJCSAgICAgIGNoYXIgKmVuZCwgc3RydWN0IHRtICp0bSwgdGltZV90IG5vdykKK3sKKwlzdHJ1Y3QgdG0gbm93X3RtOworCXN0cnVjdCB0bSAqcmVmdXNlX2Z1dHVyZTsKKwlsb25nIG51bTIsIG51bTM7CisKKwludW0yID0gc3RydG9sKGVuZCsxLCAmZW5kLCAxMCk7CisJbnVtMyA9IC0xOworCWlmICgqZW5kID09IGMgJiYgaXNkaWdpdChlbmRbMV0pKQorCQludW0zID0gc3RydG9sKGVuZCsxLCAmZW5kLCAxMCk7CisKKwkvKiBUaW1lPyBEYXRlPyAqLworCXN3aXRjaCAoYykgeworCWNhc2UgJzonOgorCQlpZiAobnVtMyA8IDApCisJCQludW0zID0gMDsKKwkJaWYgKHNldF90aW1lKG51bSwgbnVtMiwgbnVtMywgdG0pID09IDApIHsKKwkJCS8qCisJCQkgKiBJZiAlSDolTTolUyB3YXMganVzdCBwYXJzZWQgZm9sbG93ZWQgYnk6IC48bnVtND4KKwkJCSAqIENvbnNpZGVyICgmIGRpc2NhcmQpIGl0IGFzIGZyYWN0aW9uYWwgc2Vjb25kCisJCQkgKiBpZiAlWSVtJWQgaXMgcGFyc2VkIGJlZm9yZS4KKwkJCSAqLworCQkJaWYgKCplbmQgPT0gJy4nICYmIGlzZGlnaXQoZW5kWzFdKSAmJiBpc19kYXRlX2tub3duKHRtKSkKKwkJCQlzdHJ0b2woZW5kICsgMSwgJmVuZCwgMTApOworCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlICctJzoKKwljYXNlICcvJzoKKwljYXNlICcuJzoKKwkJaWYgKCFub3cpCisJCQlub3cgPSB0aW1lKE5VTEwpOworCQlyZWZ1c2VfZnV0dXJlID0gTlVMTDsKKwkJaWYgKGdtdGltZV9yKCZub3csICZub3dfdG0pKQorCQkJcmVmdXNlX2Z1dHVyZSA9ICZub3dfdG07CisKKwkJaWYgKG51bSA+IDcwKSB7CisJCQkvKiB5eXl5LW1tLWRkPyAqLworCQkJaWYgKHNldF9kYXRlKG51bSwgbnVtMiwgbnVtMywgTlVMTCwgbm93LCB0bSkgPT0gMCkKKwkJCQlicmVhazsKKwkJCS8qIHl5eXktZGQtbW0/ICovCisJCQlpZiAoc2V0X2RhdGUobnVtLCBudW0zLCBudW0yLCBOVUxMLCBub3csIHRtKSA9PSAwKQorCQkJCWJyZWFrOworCQl9CisJCS8qIE91ciBlYXN0ZXJuIEV1cm9wZWFuIGZyaWVuZHMgc2F5IGRkLm1tLnl5W3l5XQorCQkgKiBpcyB0aGUgbm9ybSB0aGVyZSwgc28gZ2l2aW5nIHByZWNlZGVuY2UgdG8KKwkJICogbW0vZGQveXlbeXldIGZvcm0gb25seSB3aGVuIHNlcGFyYXRvciBpcyBub3QgJy4nCisJCSAqLworCQlpZiAoYyAhPSAnLicgJiYKKwkJICAgIHNldF9kYXRlKG51bTMsIG51bSwgbnVtMiwgcmVmdXNlX2Z1dHVyZSwgbm93LCB0bSkgPT0gMCkKKwkJCWJyZWFrOworCQkvKiBFdXJvcGVhbiBkZC5tbS55eVt5eV0gb3IgZnVubnkgVVMgZGQvbW0veXlbeXldICovCisJCWlmIChzZXRfZGF0ZShudW0zLCBudW0yLCBudW0sIHJlZnVzZV9mdXR1cmUsIG5vdywgdG0pID09IDApCisJCQlicmVhazsKKwkJLyogRnVubnkgRXVyb3BlYW4gbW0uZGQueXkgKi8KKwkJaWYgKGMgPT0gJy4nICYmCisJCSAgICBzZXRfZGF0ZShudW0zLCBudW0sIG51bTIsIHJlZnVzZV9mdXR1cmUsIG5vdywgdG0pID09IDApCisJCQlicmVhazsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBlbmQgLSBkYXRlOworfQorCisvKgorICogSGF2ZSB3ZSBmaWxsZWQgaW4gYW55IHBhcnQgb2YgdGhlIHRpbWUvZGF0ZSB5ZXQ/CisgKiBXZSBqdXN0IGRvIGEgYmluYXJ5ICdhbmQnIHRvIHNlZSBpZiB0aGUgc2lnbiBiaXQKKyAqIGlzIHNldCBpbiBhbGwgdGhlIHZhbHVlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbm9kYXRlKHN0cnVjdCB0bSAqdG0pCit7CisJcmV0dXJuICh0bS0+dG1feWVhciAmCisJCXRtLT50bV9tb24gJgorCQl0bS0+dG1fbWRheSAmCisJCXRtLT50bV9ob3VyICYKKwkJdG0tPnRtX21pbiAmCisJCXRtLT50bV9zZWMpIDwgMDsKK30KKworLyoKKyAqIFdlJ3ZlIHNlZW4gYSBkaWdpdC4gVGltZT8gWWVhcj8gRGF0ZT8KKyAqLworc3RhdGljIGludCBtYXRjaF9kaWdpdChjb25zdCBjaGFyICpkYXRlLCBzdHJ1Y3QgdG0gKnRtLCBpbnQgKm9mZnNldCwgaW50ICp0bV9nbXQpCit7CisJaW50IG47CisJY2hhciAqZW5kOworCXRpbWVzdGFtcF90IG51bTsKKworCW51bSA9IHBhcnNlX3RpbWVzdGFtcChkYXRlLCAmZW5kLCAxMCk7CisKKwkvKgorCSAqIFNlY29uZHMgc2luY2UgMTk3MD8gV2UgdHJpZ2dlciBvbiB0aGF0IGZvciBhbnkgbnVtYmVycyB3aXRoCisJICogbW9yZSB0aGFuIDggZGlnaXRzLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBydWxlIG91dAorCSAqIG51bWJlcnMgbGlrZSAyMDA3MDYwNiBhcyBhIFlZWVlNTUREIGRhdGUuCisJICovCisJaWYgKG51bSA+PSAxMDAwMDAwMDAgJiYgbm9kYXRlKHRtKSkgeworCQl0aW1lX3QgdGltZSA9IG51bTsKKwkJaWYgKGdtdGltZV9yKCZ0aW1lLCB0bSkpIHsKKwkJCSp0bV9nbXQgPSAxOworCQkJcmV0dXJuIGVuZCAtIGRhdGU7CisJCX0KKwl9CisKKwkvKgorCSAqIENoZWNrIGZvciBzcGVjaWFsIGZvcm1hdHM6IG51bVstLjovXW51bVtzYW1lXW51bQorCSAqLworCXN3aXRjaCAoKmVuZCkgeworCWNhc2UgJzonOgorCWNhc2UgJy4nOgorCWNhc2UgJy8nOgorCWNhc2UgJy0nOgorCQlpZiAoaXNkaWdpdChlbmRbMV0pKSB7CisJCQlpbnQgbWF0Y2ggPSBtYXRjaF9tdWx0aV9udW1iZXIobnVtLCAqZW5kLCBkYXRlLCBlbmQsIHRtLCAwKTsKKwkJCWlmIChtYXRjaCkKKwkJCQlyZXR1cm4gbWF0Y2g7CisJCX0KKwl9CisKKwkvKgorCSAqIE5vbmUgb2YgdGhlIHNwZWNpYWwgZm9ybWF0cz8gVHJ5IHRvIGd1ZXNzIHdoYXQKKwkgKiB0aGUgbnVtYmVyIG1lYW50LiBXZSB1c2UgdGhlIG51bWJlciBvZiBkaWdpdHMKKwkgKiB0byBtYWtlIGEgbW9yZSBlZHVjYXRlZCBndWVzcy4uCisJICovCisJbiA9IDA7CisJZG8geworCQluKys7CisJfSB3aGlsZSAoaXNkaWdpdChkYXRlW25dKSk7CisKKwkvKiA4IGRpZ2l0cywgY29tcGFjdCBzdHlsZSBvZiBJU08tODYwMSdzIGRhdGU6IFlZWVltbUREICovCisJLyogNiBkaWdpdHMsIGNvbXBhY3Qgc3R5bGUgb2YgSVNPLTg2MDEncyB0aW1lOiBISE1NU1MgKi8KKwlpZiAobiA9PSA4IHx8IG4gPT0gNikgeworCQl1bnNpZ25lZCBpbnQgbnVtMSA9IG51bSAvIDEwMDAwOworCQl1bnNpZ25lZCBpbnQgbnVtMiA9IChudW0gJSAxMDAwMCkgLyAxMDA7CisJCXVuc2lnbmVkIGludCBudW0zID0gbnVtICUgMTAwOworCQlpZiAobiA9PSA4KQorCQkJc2V0X2RhdGUobnVtMSwgbnVtMiwgbnVtMywgTlVMTCwgdGltZShOVUxMKSwgdG0pOworCQllbHNlIGlmIChuID09IDYgJiYgc2V0X3RpbWUobnVtMSwgbnVtMiwgbnVtMywgdG0pID09IDAgJiYKKwkJCSAqZW5kID09ICcuJyAmJiBpc2RpZ2l0KGVuZFsxXSkpCisJCQlzdHJ0b3VsKGVuZCArIDEsICZlbmQsIDEwKTsKKwkJcmV0dXJuIGVuZCAtIGRhdGU7CisJfQorCisJLyogRm91ci1kaWdpdCB5ZWFyIG9yIGEgdGltZXpvbmU/ICovCisJaWYgKG4gPT0gNCkgeworCQlpZiAobnVtIDw9IDE0MDAgJiYgKm9mZnNldCA9PSAtMSkgeworCQkJdW5zaWduZWQgaW50IG1pbnV0ZXMgPSBudW0gJSAxMDA7CisJCQl1bnNpZ25lZCBpbnQgaG91cnMgPSBudW0gLyAxMDA7CisJCQkqb2Zmc2V0ID0gaG91cnMqNjAgKyBtaW51dGVzOworCQl9IGVsc2UgaWYgKG51bSA+IDE5MDAgJiYgbnVtIDwgMjEwMCkKKwkJCXRtLT50bV95ZWFyID0gbnVtIC0gMTkwMDsKKwkJcmV0dXJuIG47CisJfQorCisJLyoKKwkgKiBJZ25vcmUgbG90cyBvZiBudW1lcmFscy4gV2UgdG9vayBjYXJlIG9mIDQtZGlnaXQgeWVhcnMgYWJvdmUuCisJICogRGF5cyBvciBtb250aHMgbXVzdCBiZSBvbmUgb3IgdHdvIGRpZ2l0cy4KKwkgKi8KKwlpZiAobiA+IDIpCisJCXJldHVybiBuOworCisJLyoKKwkgKiBOT1RFISBXZSB3aWxsIGdpdmUgcHJlY2VkZW5jZSB0byBkYXktb2YtbW9udGggb3ZlciBtb250aCBvcgorCSAqIHllYXIgbnVtYmVycyBpbiB0aGUgMS0xMiByYW5nZS4gU28gMDUgaXMgYWx3YXlzICJtZGF5IDUiLAorCSAqIHVubGVzcyB3ZSBhbHJlYWR5IGhhdmUgYSBtZGF5Li4KKwkgKgorCSAqIElPVywgMDEgQXByIDA1IHBhcnNlcyBhcyAiQXByaWwgMXN0LCAyMDA1Ii4KKwkgKi8KKwlpZiAobnVtID4gMCAmJiBudW0gPCAzMiAmJiB0bS0+dG1fbWRheSA8IDApIHsKKwkJdG0tPnRtX21kYXkgPSBudW07CisJCXJldHVybiBuOworCX0KKworCS8qIFR3by1kaWdpdCB5ZWFyPyAqLworCWlmIChuID09IDIgJiYgdG0tPnRtX3llYXIgPCAwKSB7CisJCWlmIChudW0gPCAxMCAmJiB0bS0+dG1fbWRheSA+PSAwKSB7CisJCQl0bS0+dG1feWVhciA9IG51bSArIDEwMDsKKwkJCXJldHVybiBuOworCQl9CisJCWlmIChudW0gPj0gNzApIHsKKwkJCXRtLT50bV95ZWFyID0gbnVtOworCQkJcmV0dXJuIG47CisJCX0KKwl9CisKKwlpZiAobnVtID4gMCAmJiBudW0gPCAxMyAmJiB0bS0+dG1fbW9uIDwgMCkKKwkJdG0tPnRtX21vbiA9IG51bS0xOworCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfdHooY29uc3QgY2hhciAqZGF0ZSwgaW50ICpvZmZwKQoreworCWNoYXIgKmVuZDsKKwlpbnQgaG91ciA9IHN0cnRvdWwoZGF0ZSArIDEsICZlbmQsIDEwKTsKKwlpbnQgbiA9IGVuZCAtIChkYXRlICsgMSk7CisJaW50IG1pbiA9IDA7CisKKwlpZiAobiA9PSA0KSB7CisJCS8qIGhobW0gKi8KKwkJbWluID0gaG91ciAlIDEwMDsKKwkJaG91ciA9IGhvdXIgLyAxMDA7CisJfSBlbHNlIGlmIChuICE9IDIpIHsKKwkJbWluID0gOTk7IC8qIHJhbmRvbSBjcmFwICovCisJfSBlbHNlIGlmICgqZW5kID09ICc6JykgeworCQkvKiBoaDptbT8gKi8KKwkJbWluID0gc3RydG91bChlbmQgKyAxLCAmZW5kLCAxMCk7CisJCWlmIChlbmQgLSAoZGF0ZSArIDEpICE9IDUpCisJCQltaW4gPSA5OTsgLyogcmFuZG9tIGNyYXAgKi8KKwl9IC8qIG90aGVyd2lzZSB3ZSBwYXJzZWQgImhoIiAqLworCisJLyoKKwkgKiBEb24ndCBhY2NlcHQgYW55IHJhbmRvbSBjcmFwLiBFdmVuIHRob3VnaCBzb21lIHBsYWNlcyBoYXZlCisJICogb2Zmc2V0IGxhcmdlciB0aGFuIDEyIGhvdXJzIChlLmcuIFBhY2lmaWMvS2lyaXRpbWF0aSBpcyBhdAorCSAqIFVUQysxNCksIHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyBpZiBob3VyIHBhcnQgaXMgbXVjaAorCSAqIGxhcmdlciB0aGFuIHRoYXQuIFdlIG1pZ2h0IGFsc28gd2FudCB0byBjaGVjayB0aGF0IHRoZQorCSAqIG1pbnV0ZXMgYXJlIGRpdmlzaWJsZSBieSAxNSBvciBzb21ldGhpbmcgdG9vLiAoT2Zmc2V0IG9mCisJICogS2F0aG1hbmR1LCBOZXBhbCBpcyBVVEMrNTo0NSkKKwkgKi8KKwlpZiAobWluIDwgNjAgJiYgaG91ciA8IDI0KSB7CisJCWludCBvZmZzZXQgPSBob3VyICogNjAgKyBtaW47CisJCWlmICgqZGF0ZSA9PSAnLScpCisJCQlvZmZzZXQgPSAtb2Zmc2V0OworCQkqb2ZmcCA9IG9mZnNldDsKKwl9CisJcmV0dXJuIGVuZCAtIGRhdGU7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGVfc3RyaW5nKHRpbWVzdGFtcF90IGRhdGUsIGludCBvZmZzZXQsIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlpbnQgc2lnbiA9ICcrJzsKKworCWlmIChvZmZzZXQgPCAwKSB7CisJCW9mZnNldCA9IC1vZmZzZXQ7CisJCXNpZ24gPSAnLSc7CisJfQorCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUiUFJJdGltZSIgJWMlMDJkJTAyZCIsIGRhdGUsIHNpZ24sIG9mZnNldCAvIDYwLCBvZmZzZXQgJSA2MCk7Cit9CisKKy8qCisgKiBQYXJzZSBhIHN0cmluZyBsaWtlICIwICswMDAwIiBhcyBhbmNpZW50IHRpbWVzdGFtcCBuZWFyIGVwb2NoLCBidXQKKyAqIG9ubHkgd2hlbiBpdCBhcHBlYXJzIG5vdCBhcyBwYXJ0IG9mIGFueSBvdGhlciBzdHJpbmcuCisgKi8KK3N0YXRpYyBpbnQgbWF0Y2hfb2JqZWN0X2hlYWRlcl9kYXRlKGNvbnN0IGNoYXIgKmRhdGUsIHRpbWVzdGFtcF90ICp0aW1lc3RhbXAsIGludCAqb2Zmc2V0KQoreworCWNoYXIgKmVuZDsKKwl0aW1lc3RhbXBfdCBzdGFtcDsKKwlpbnQgb2ZzOworCisJaWYgKCpkYXRlIDwgJzAnIHx8ICc5JyA8ICpkYXRlKQorCQlyZXR1cm4gLTE7CisJc3RhbXAgPSBwYXJzZV90aW1lc3RhbXAoZGF0ZSwgJmVuZCwgMTApOworCWlmICgqZW5kICE9ICcgJyB8fCBzdGFtcCA9PSBUSU1FX01BWCB8fCAoZW5kWzFdICE9ICcrJyAmJiBlbmRbMV0gIT0gJy0nKSkKKwkJcmV0dXJuIC0xOworCWRhdGUgPSBlbmQgKyAyOworCW9mcyA9IHN0cnRvbChkYXRlLCAmZW5kLCAxMCk7CisJaWYgKCgqZW5kICE9ICdcMCcgJiYgKCplbmQgIT0gJ1xuJykpIHx8IGVuZCAhPSBkYXRlICsgNCkKKwkJcmV0dXJuIC0xOworCW9mcyA9IChvZnMgLyAxMDApICogNjAgKyAob2ZzICUgMTAwKTsKKwlpZiAoZGF0ZVstMV0gPT0gJy0nKQorCQlvZnMgPSAtb2ZzOworCSp0aW1lc3RhbXAgPSBzdGFtcDsKKwkqb2Zmc2V0ID0gb2ZzOworCXJldHVybiAwOworfQorCisvKiBHci4gc3RycHRpbWUgaXMgY3JhcCBmb3IgdGhpczsgaXQgZG9lc24ndCBoYXZlIGEgd2F5IHRvIHJlcXVpcmUgUkZDMjgyMgorICAgKGkuZS4gRW5nbGlzaCkgZGF5L21vbnRoIG5hbWVzLCBhbmQgaXQgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoICV6LiAqLworaW50IHBhcnNlX2RhdGVfYmFzaWMoY29uc3QgY2hhciAqZGF0ZSwgdGltZXN0YW1wX3QgKnRpbWVzdGFtcCwgaW50ICpvZmZzZXQpCit7CisJc3RydWN0IHRtIHRtOworCWludCB0bV9nbXQ7CisJdGltZXN0YW1wX3QgZHVtbXlfdGltZXN0YW1wOworCWludCBkdW1teV9vZmZzZXQ7CisKKwlpZiAoIXRpbWVzdGFtcCkKKwkJdGltZXN0YW1wID0gJmR1bW15X3RpbWVzdGFtcDsKKwlpZiAoIW9mZnNldCkKKwkJb2Zmc2V0ID0gJmR1bW15X29mZnNldDsKKworCW1lbXNldCgmdG0sIDAsIHNpemVvZih0bSkpOworCXRtLnRtX3llYXIgPSAtMTsKKwl0bS50bV9tb24gPSAtMTsKKwl0bS50bV9tZGF5ID0gLTE7CisJdG0udG1faXNkc3QgPSAtMTsKKwl0bS50bV9ob3VyID0gLTE7CisJdG0udG1fbWluID0gLTE7CisJdG0udG1fc2VjID0gLTE7CisJKm9mZnNldCA9IC0xOworCXRtX2dtdCA9IDA7CisKKwlpZiAoKmRhdGUgPT0gJ0AnICYmCisJICAgICFtYXRjaF9vYmplY3RfaGVhZGVyX2RhdGUoZGF0ZSArIDEsIHRpbWVzdGFtcCwgb2Zmc2V0KSkKKwkJcmV0dXJuIDA7IC8qIHN1Y2Nlc3MgKi8KKwlmb3IgKDs7KSB7CisJCWludCBtYXRjaCA9IDA7CisJCXVuc2lnbmVkIGNoYXIgYyA9ICpkYXRlOworCisJCS8qIFN0b3AgYXQgZW5kIG9mIHN0cmluZyBvciBuZXdsaW5lICovCisJCWlmICghYyB8fCBjID09ICdcbicpCisJCQlicmVhazsKKworCQlpZiAoaXNhbHBoYShjKSkKKwkJCW1hdGNoID0gbWF0Y2hfYWxwaGEoZGF0ZSwgJnRtLCBvZmZzZXQpOworCQllbHNlIGlmIChpc2RpZ2l0KGMpKQorCQkJbWF0Y2ggPSBtYXRjaF9kaWdpdChkYXRlLCAmdG0sIG9mZnNldCwgJnRtX2dtdCk7CisJCWVsc2UgaWYgKChjID09ICctJyB8fCBjID09ICcrJykgJiYgaXNkaWdpdChkYXRlWzFdKSkKKwkJCW1hdGNoID0gbWF0Y2hfdHooZGF0ZSwgb2Zmc2V0KTsKKworCQlpZiAoIW1hdGNoKSB7CisJCQkvKiBCQUQgQ1JBUCAqLworCQkJbWF0Y2ggPSAxOworCQl9CisKKwkJZGF0ZSArPSBtYXRjaDsKKwl9CisKKwkvKiBkbyBub3QgdXNlIG1rdGltZSgpLCB3aGljaCB1c2VzIGxvY2FsIHRpbWV6b25lLCBoZXJlICovCisJKnRpbWVzdGFtcCA9IHRtX3RvX3RpbWVfdCgmdG0pOworCWlmICgqdGltZXN0YW1wID09IC0xKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoKm9mZnNldCA9PSAtMSkgeworCQl0aW1lX3QgdGVtcF90aW1lOworCisJCS8qIGdtdGltZV9yKCkgaW4gbWF0Y2hfZGlnaXQoKSBtYXkgaGF2ZSBjbG9iYmVyZWQgaXQgKi8KKwkJdG0udG1faXNkc3QgPSAtMTsKKwkJdGVtcF90aW1lID0gbWt0aW1lKCZ0bSk7CisJCWlmICgodGltZV90KSp0aW1lc3RhbXAgPiB0ZW1wX3RpbWUpIHsKKwkJCSpvZmZzZXQgPSAoKHRpbWVfdCkqdGltZXN0YW1wIC0gdGVtcF90aW1lKSAvIDYwOworCQl9IGVsc2UgeworCQkJKm9mZnNldCA9IC0oaW50KSgodGVtcF90aW1lIC0gKHRpbWVfdCkqdGltZXN0YW1wKSAvIDYwKTsKKwkJfQorCX0KKworCWlmICghdG1fZ210KQorCQkqdGltZXN0YW1wIC09ICpvZmZzZXQgKiA2MDsKKwlyZXR1cm4gMDsgLyogc3VjY2VzcyAqLworfQorCitpbnQgcGFyc2VfZXhwaXJ5X2RhdGUoY29uc3QgY2hhciAqZGF0ZSwgdGltZXN0YW1wX3QgKnRpbWVzdGFtcCkKK3sKKwlpbnQgZXJyb3JzID0gMDsKKworCWlmICghc3RyY21wKGRhdGUsICJuZXZlciIpIHx8ICFzdHJjbXAoZGF0ZSwgImZhbHNlIikpCisJCSp0aW1lc3RhbXAgPSAwOworCWVsc2UgaWYgKCFzdHJjbXAoZGF0ZSwgImFsbCIpIHx8ICFzdHJjbXAoZGF0ZSwgIm5vdyIpKQorCQkvKgorCQkgKiBXZSB0YWtlIG92ZXIgIm5vdyIgaGVyZSwgd2hpY2ggdXN1YWxseSB0cmFuc2xhdGVzCisJCSAqIHRvIHRoZSBjdXJyZW50IHRpbWVzdGFtcC4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgdXNlcgorCQkgKiByZWFsbHkgbWVhbnMgdG8gZXhwaXJlIGV2ZXJ5dGhpbmcgc2hlIGhhcyBkb25lIGluCisJCSAqIHRoZSBwYXN0LCBhbmQgYnkgZGVmaW5pdGlvbiByZWZsb2dzIGFyZSB0aGUgcmVjb3JkCisJCSAqIG9mIHRoZSBwYXN0LCBhbmQgdGhlcmUgaXMgbm90aGluZyBmcm9tIHRoZSBmdXR1cmUKKwkJICogdG8gYmUga2VwdC4KKwkJICovCisJCSp0aW1lc3RhbXAgPSBUSU1FX01BWDsKKwllbHNlCisJCSp0aW1lc3RhbXAgPSBhcHByb3hpZGF0ZV9jYXJlZnVsKGRhdGUsICZlcnJvcnMpOworCisJcmV0dXJuIGVycm9yczsKK30KKworaW50IHBhcnNlX2RhdGUoY29uc3QgY2hhciAqZGF0ZSwgc3RydWN0IHN0cmJ1ZiAqcmVzdWx0KQoreworCXRpbWVzdGFtcF90IHRpbWVzdGFtcDsKKwlpbnQgb2Zmc2V0OworCWlmIChwYXJzZV9kYXRlX2Jhc2ljKGRhdGUsICZ0aW1lc3RhbXAsICZvZmZzZXQpKQorCQlyZXR1cm4gLTE7CisJZGF0ZV9zdHJpbmcodGltZXN0YW1wLCBvZmZzZXQsIHJlc3VsdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIGRhdGVfbW9kZV90eXBlIHBhcnNlX2RhdGVfdHlwZShjb25zdCBjaGFyICpmb3JtYXQsIGNvbnN0IGNoYXIgKiplbmQpCit7CisJaWYgKHNraXBfcHJlZml4KGZvcm1hdCwgInJlbGF0aXZlIiwgZW5kKSkKKwkJcmV0dXJuIERBVEVfUkVMQVRJVkU7CisJaWYgKHNraXBfcHJlZml4KGZvcm1hdCwgImlzbzg2MDEtc3RyaWN0IiwgZW5kKSB8fAorCSAgICBza2lwX3ByZWZpeChmb3JtYXQsICJpc28tc3RyaWN0IiwgZW5kKSkKKwkJcmV0dXJuIERBVEVfSVNPODYwMV9TVFJJQ1Q7CisJaWYgKHNraXBfcHJlZml4KGZvcm1hdCwgImlzbzg2MDEiLCBlbmQpIHx8CisJICAgIHNraXBfcHJlZml4KGZvcm1hdCwgImlzbyIsIGVuZCkpCisJCXJldHVybiBEQVRFX0lTTzg2MDE7CisJaWYgKHNraXBfcHJlZml4KGZvcm1hdCwgInJmYzI4MjIiLCBlbmQpIHx8CisJICAgIHNraXBfcHJlZml4KGZvcm1hdCwgInJmYyIsIGVuZCkpCisJCXJldHVybiBEQVRFX1JGQzI4MjI7CisJaWYgKHNraXBfcHJlZml4KGZvcm1hdCwgInNob3J0IiwgZW5kKSkKKwkJcmV0dXJuIERBVEVfU0hPUlQ7CisJaWYgKHNraXBfcHJlZml4KGZvcm1hdCwgImRlZmF1bHQiLCBlbmQpKQorCQlyZXR1cm4gREFURV9OT1JNQUw7CisJaWYgKHNraXBfcHJlZml4KGZvcm1hdCwgImh1bWFuIiwgZW5kKSkKKwkJcmV0dXJuIERBVEVfSFVNQU47CisJaWYgKHNraXBfcHJlZml4KGZvcm1hdCwgInJhdyIsIGVuZCkpCisJCXJldHVybiBEQVRFX1JBVzsKKwlpZiAoc2tpcF9wcmVmaXgoZm9ybWF0LCAidW5peCIsIGVuZCkpCisJCXJldHVybiBEQVRFX1VOSVg7CisJaWYgKHNraXBfcHJlZml4KGZvcm1hdCwgImZvcm1hdCIsIGVuZCkpCisJCXJldHVybiBEQVRFX1NUUkZUSU1FOworCS8qCisJICogUGxlYXNlIHVwZGF0ZSAkX19naXRfbG9nX2RhdGVfZm9ybWF0cyBpbgorCSAqIGdpdC1jb21wbGV0aW9uLmJhc2ggd2hlbiB5b3UgYWRkIG5ldyBmb3JtYXRzLgorCSAqLworCisJZGllKCJ1bmtub3duIGRhdGUgZm9ybWF0ICVzIiwgZm9ybWF0KTsKK30KKwordm9pZCBwYXJzZV9kYXRlX2Zvcm1hdChjb25zdCBjaGFyICpmb3JtYXQsIHN0cnVjdCBkYXRlX21vZGUgKm1vZGUpCit7CisJY29uc3QgY2hhciAqcDsKKworCS8qICJhdXRvOmZvbyIgaXMgImlmIHR0eS9wYWdlciwgdGhlbiBmb28sIG90aGVyd2lzZSBub3JtYWwiICovCisJaWYgKHNraXBfcHJlZml4KGZvcm1hdCwgImF1dG86IiwgJnApKSB7CisJCWlmIChpc2F0dHkoMSkgfHwgcGFnZXJfaW5fdXNlKCkpCisJCQlmb3JtYXQgPSBwOworCQllbHNlCisJCQlmb3JtYXQgPSAiZGVmYXVsdCI7CisJfQorCisJLyogaGlzdG9yaWNhbCBhbGlhcyAqLworCWlmICghc3RyY21wKGZvcm1hdCwgImxvY2FsIikpCisJCWZvcm1hdCA9ICJkZWZhdWx0LWxvY2FsIjsKKworCW1vZGUtPnR5cGUgPSBwYXJzZV9kYXRlX3R5cGUoZm9ybWF0LCAmcCk7CisJbW9kZS0+bG9jYWwgPSAwOworCisJaWYgKHNraXBfcHJlZml4KHAsICItbG9jYWwiLCAmcCkpCisJCW1vZGUtPmxvY2FsID0gMTsKKworCWlmIChtb2RlLT50eXBlID09IERBVEVfU1RSRlRJTUUpIHsKKwkJaWYgKCFza2lwX3ByZWZpeChwLCAiOiIsICZwKSkKKwkJCWRpZSgiZGF0ZSBmb3JtYXQgbWlzc2luZyBjb2xvbiBzZXBhcmF0b3I6ICVzIiwgZm9ybWF0KTsKKwkJbW9kZS0+c3RyZnRpbWVfZm10ID0geHN0cmR1cChwKTsKKwl9IGVsc2UgaWYgKCpwKQorCQlkaWUoInVua25vd24gZGF0ZSBmb3JtYXQgJXMiLCBmb3JtYXQpOworfQorCit2b2lkIGRhdGVzdGFtcChzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJdGltZV90IG5vdzsKKwlpbnQgb2Zmc2V0OworCXN0cnVjdCB0bSB0bSA9IHsgMCB9OworCisJdGltZSgmbm93KTsKKworCW9mZnNldCA9IHRtX3RvX3RpbWVfdChsb2NhbHRpbWVfcigmbm93LCAmdG0pKSAtIG5vdzsKKwlvZmZzZXQgLz0gNjA7CisKKwlkYXRlX3N0cmluZyhub3csIG9mZnNldCwgb3V0KTsKK30KKworLyoKKyAqIFJlbGF0aXZlIHRpbWUgdXBkYXRlIChlZyAiMiBkYXlzIGFnbyIpLiAgSWYgd2UgaGF2ZW4ndCBzZXQgdGhlIHRpbWUKKyAqIHlldCwgd2UgbmVlZCB0byBzZXQgaXQgZnJvbSBjdXJyZW50IHRpbWUuCisgKi8KK3N0YXRpYyB0aW1lX3QgdXBkYXRlX3RtKHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCB0aW1lX3Qgc2VjKQoreworCXRpbWVfdCBuOworCisJaWYgKHRtLT50bV9tZGF5IDwgMCkKKwkJdG0tPnRtX21kYXkgPSBub3ctPnRtX21kYXk7CisJaWYgKHRtLT50bV9tb24gPCAwKQorCQl0bS0+dG1fbW9uID0gbm93LT50bV9tb247CisJaWYgKHRtLT50bV95ZWFyIDwgMCkgeworCQl0bS0+dG1feWVhciA9IG5vdy0+dG1feWVhcjsKKwkJaWYgKHRtLT50bV9tb24gPiBub3ctPnRtX21vbikKKwkJCXRtLT50bV95ZWFyLS07CisJfQorCisJbiA9IG1rdGltZSh0bSkgLSBzZWM7CisJbG9jYWx0aW1lX3IoJm4sIHRtKTsKKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIERvIHdlIGhhdmUgYSBwZW5kaW5nIG51bWJlciBhdCB0aGUgZW5kLCBvciB3aGVuCisgKiB3ZSBzZWUgYSBuZXcgb25lPyBMZXQncyBhc3N1bWUgaXQncyBhIG1vbnRoIGRheSwKKyAqIGFzIGluICJEZWMgNiwgMTk5MiIKKyAqLworc3RhdGljIHZvaWQgcGVuZGluZ19udW1iZXIoc3RydWN0IHRtICp0bSwgaW50ICpudW0pCit7CisJaW50IG51bWJlciA9ICpudW07CisKKwlpZiAobnVtYmVyKSB7CisJCSpudW0gPSAwOworCQlpZiAodG0tPnRtX21kYXkgPCAwICYmIG51bWJlciA8IDMyKQorCQkJdG0tPnRtX21kYXkgPSBudW1iZXI7CisJCWVsc2UgaWYgKHRtLT50bV9tb24gPCAwICYmIG51bWJlciA8IDEzKQorCQkJdG0tPnRtX21vbiA9IG51bWJlci0xOworCQllbHNlIGlmICh0bS0+dG1feWVhciA8IDApIHsKKwkJCWlmIChudW1iZXIgPiAxOTY5ICYmIG51bWJlciA8IDIxMDApCisJCQkJdG0tPnRtX3llYXIgPSBudW1iZXIgLSAxOTAwOworCQkJZWxzZSBpZiAobnVtYmVyID4gNjkgJiYgbnVtYmVyIDwgMTAwKQorCQkJCXRtLT50bV95ZWFyID0gbnVtYmVyOworCQkJZWxzZSBpZiAobnVtYmVyIDwgMzgpCisJCQkJdG0tPnRtX3llYXIgPSAxMDAgKyBudW1iZXI7CisJCQkvKiBXZSBzY3JldyB1cCBmb3IgbnVtYmVyID0gMDAgPyAqLworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBkYXRlX25vdyhzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50ICpudW0pCit7CisJKm51bSA9IDA7CisJdXBkYXRlX3RtKHRtLCBub3csIDApOworfQorCitzdGF0aWMgdm9pZCBkYXRlX3llc3RlcmRheShzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50ICpudW0pCit7CisJKm51bSA9IDA7CisJdXBkYXRlX3RtKHRtLCBub3csIDI0KjYwKjYwKTsKK30KKworc3RhdGljIHZvaWQgZGF0ZV90aW1lKHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCBpbnQgaG91cikKK3sKKwlpZiAodG0tPnRtX2hvdXIgPCBob3VyKQorCQl1cGRhdGVfdG0odG0sIG5vdywgMjQqNjAqNjApOworCXRtLT50bV9ob3VyID0gaG91cjsKKwl0bS0+dG1fbWluID0gMDsKKwl0bS0+dG1fc2VjID0gMDsKK30KKworc3RhdGljIHZvaWQgZGF0ZV9taWRuaWdodChzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50ICpudW0pCit7CisJcGVuZGluZ19udW1iZXIodG0sIG51bSk7CisJZGF0ZV90aW1lKHRtLCBub3csIDApOworfQorCitzdGF0aWMgdm9pZCBkYXRlX25vb24oc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCXBlbmRpbmdfbnVtYmVyKHRtLCBudW0pOworCWRhdGVfdGltZSh0bSwgbm93LCAxMik7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGVfdGVhKHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCBpbnQgKm51bSkKK3sKKwlwZW5kaW5nX251bWJlcih0bSwgbnVtKTsKKwlkYXRlX3RpbWUodG0sIG5vdywgMTcpOworfQorCitzdGF0aWMgdm9pZCBkYXRlX3BtKHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCBpbnQgKm51bSkKK3sKKwlpbnQgaG91ciwgbiA9ICpudW07CisJKm51bSA9IDA7CisKKwlob3VyID0gdG0tPnRtX2hvdXI7CisJaWYgKG4pIHsKKwkJaG91ciA9IG47CisJCXRtLT50bV9taW4gPSAwOworCQl0bS0+dG1fc2VjID0gMDsKKwl9CisJdG0tPnRtX2hvdXIgPSAoaG91ciAlIDEyKSArIDEyOworfQorCitzdGF0aWMgdm9pZCBkYXRlX2FtKHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCBpbnQgKm51bSkKK3sKKwlpbnQgaG91ciwgbiA9ICpudW07CisJKm51bSA9IDA7CisKKwlob3VyID0gdG0tPnRtX2hvdXI7CisJaWYgKG4pIHsKKwkJaG91ciA9IG47CisJCXRtLT50bV9taW4gPSAwOworCQl0bS0+dG1fc2VjID0gMDsKKwl9CisJdG0tPnRtX2hvdXIgPSAoaG91ciAlIDEyKTsKK30KKworc3RhdGljIHZvaWQgZGF0ZV9uZXZlcihzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50ICpudW0pCit7CisJdGltZV90IG4gPSAwOworCWxvY2FsdGltZV9yKCZuLCB0bSk7CisJKm51bSA9IDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BlY2lhbCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl2b2lkICgqZm4pKHN0cnVjdCB0bSAqLCBzdHJ1Y3QgdG0gKiwgaW50ICopOworfSBzcGVjaWFsW10gPSB7CisJeyAieWVzdGVyZGF5IiwgZGF0ZV95ZXN0ZXJkYXkgfSwKKwl7ICJub29uIiwgZGF0ZV9ub29uIH0sCisJeyAibWlkbmlnaHQiLCBkYXRlX21pZG5pZ2h0IH0sCisJeyAidGVhIiwgZGF0ZV90ZWEgfSwKKwl7ICJQTSIsIGRhdGVfcG0gfSwKKwl7ICJBTSIsIGRhdGVfYW0gfSwKKwl7ICJuZXZlciIsIGRhdGVfbmV2ZXIgfSwKKwl7ICJub3ciLCBkYXRlX25vdyB9LAorCXsgTlVMTCB9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqbnVtYmVyX25hbWVbXSA9IHsKKwkiemVybyIsICJvbmUiLCAidHdvIiwgInRocmVlIiwgImZvdXIiLAorCSJmaXZlIiwgInNpeCIsICJzZXZlbiIsICJlaWdodCIsICJuaW5lIiwgInRlbiIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHR5cGVsZW4geworCWNvbnN0IGNoYXIgKnR5cGU7CisJaW50IGxlbmd0aDsKK30gdHlwZWxlbltdID0geworCXsgInNlY29uZHMiLCAxIH0sCisJeyAibWludXRlcyIsIDYwIH0sCisJeyAiaG91cnMiLCA2MCo2MCB9LAorCXsgImRheXMiLCAyNCo2MCo2MCB9LAorCXsgIndlZWtzIiwgNyoyNCo2MCo2MCB9LAorCXsgTlVMTCB9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqYXBwcm94aWRhdGVfYWxwaGEoY29uc3QgY2hhciAqZGF0ZSwgc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtLCBpbnQgKnRvdWNoZWQpCit7CisJY29uc3Qgc3RydWN0IHR5cGVsZW4gKnRsOworCWNvbnN0IHN0cnVjdCBzcGVjaWFsICpzOworCWNvbnN0IGNoYXIgKmVuZCA9IGRhdGU7CisJaW50IGk7CisKKwl3aGlsZSAoaXNhbHBoYSgqKytlbmQpKQorCQk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgeworCQlpbnQgbWF0Y2ggPSBtYXRjaF9zdHJpbmcoZGF0ZSwgbW9udGhfbmFtZXNbaV0pOworCQlpZiAobWF0Y2ggPj0gMykgeworCQkJdG0tPnRtX21vbiA9IGk7CisJCQkqdG91Y2hlZCA9IDE7CisJCQlyZXR1cm4gZW5kOworCQl9CisJfQorCisJZm9yIChzID0gc3BlY2lhbDsgcy0+bmFtZTsgcysrKSB7CisJCWludCBsZW4gPSBzdHJsZW4ocy0+bmFtZSk7CisJCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgcy0+bmFtZSkgPT0gbGVuKSB7CisJCQlzLT5mbih0bSwgbm93LCBudW0pOworCQkJKnRvdWNoZWQgPSAxOworCQkJcmV0dXJuIGVuZDsKKwkJfQorCX0KKworCWlmICghKm51bSkgeworCQlmb3IgKGkgPSAxOyBpIDwgMTE7IGkrKykgeworCQkJaW50IGxlbiA9IHN0cmxlbihudW1iZXJfbmFtZVtpXSk7CisJCQlpZiAobWF0Y2hfc3RyaW5nKGRhdGUsIG51bWJlcl9uYW1lW2ldKSA9PSBsZW4pIHsKKwkJCQkqbnVtID0gaTsKKwkJCQkqdG91Y2hlZCA9IDE7CisJCQkJcmV0dXJuIGVuZDsKKwkJCX0KKwkJfQorCQlpZiAobWF0Y2hfc3RyaW5nKGRhdGUsICJsYXN0IikgPT0gNCkgeworCQkJKm51bSA9IDE7CisJCQkqdG91Y2hlZCA9IDE7CisJCX0KKwkJcmV0dXJuIGVuZDsKKwl9CisKKwl0bCA9IHR5cGVsZW47CisJd2hpbGUgKHRsLT50eXBlKSB7CisJCWludCBsZW4gPSBzdHJsZW4odGwtPnR5cGUpOworCQlpZiAobWF0Y2hfc3RyaW5nKGRhdGUsIHRsLT50eXBlKSA+PSBsZW4tMSkgeworCQkJdXBkYXRlX3RtKHRtLCBub3csIHRsLT5sZW5ndGggKiAqbnVtKTsKKwkJCSpudW0gPSAwOworCQkJKnRvdWNoZWQgPSAxOworCQkJcmV0dXJuIGVuZDsKKwkJfQorCQl0bCsrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKKwkJaW50IG1hdGNoID0gbWF0Y2hfc3RyaW5nKGRhdGUsIHdlZWtkYXlfbmFtZXNbaV0pOworCQlpZiAobWF0Y2ggPj0gMykgeworCQkJaW50IGRpZmYsIG4gPSAqbnVtIC0xOworCQkJKm51bSA9IDA7CisKKwkJCWRpZmYgPSB0bS0+dG1fd2RheSAtIGk7CisJCQlpZiAoZGlmZiA8PSAwKQorCQkJCW4rKzsKKwkJCWRpZmYgKz0gNypuOworCisJCQl1cGRhdGVfdG0odG0sIG5vdywgZGlmZiAqIDI0ICogNjAgKiA2MCk7CisJCQkqdG91Y2hlZCA9IDE7CisJCQlyZXR1cm4gZW5kOworCQl9CisJfQorCisJaWYgKG1hdGNoX3N0cmluZyhkYXRlLCAibW9udGhzIikgPj0gNSkgeworCQlpbnQgbjsKKwkJdXBkYXRlX3RtKHRtLCBub3csIDApOyAvKiBmaWxsIGluIGRhdGUgZmllbGRzIGlmIG5lZWRlZCAqLworCQluID0gdG0tPnRtX21vbiAtICpudW07CisJCSpudW0gPSAwOworCQl3aGlsZSAobiA8IDApIHsKKwkJCW4gKz0gMTI7CisJCQl0bS0+dG1feWVhci0tOworCQl9CisJCXRtLT50bV9tb24gPSBuOworCQkqdG91Y2hlZCA9IDE7CisJCXJldHVybiBlbmQ7CisJfQorCisJaWYgKG1hdGNoX3N0cmluZyhkYXRlLCAieWVhcnMiKSA+PSA0KSB7CisJCXVwZGF0ZV90bSh0bSwgbm93LCAwKTsgLyogZmlsbCBpbiBkYXRlIGZpZWxkcyBpZiBuZWVkZWQgKi8KKwkJdG0tPnRtX3llYXIgLT0gKm51bTsKKwkJKm51bSA9IDA7CisJCSp0b3VjaGVkID0gMTsKKwkJcmV0dXJuIGVuZDsKKwl9CisKKwlyZXR1cm4gZW5kOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYXBwcm94aWRhdGVfZGlnaXQoY29uc3QgY2hhciAqZGF0ZSwgc3RydWN0IHRtICp0bSwgaW50ICpudW0sCisJCQkJICAgICB0aW1lX3Qgbm93KQoreworCWNoYXIgKmVuZDsKKwl0aW1lc3RhbXBfdCBudW1iZXIgPSBwYXJzZV90aW1lc3RhbXAoZGF0ZSwgJmVuZCwgMTApOworCisJc3dpdGNoICgqZW5kKSB7CisJY2FzZSAnOic6CisJY2FzZSAnLic6CisJY2FzZSAnLyc6CisJY2FzZSAnLSc6CisJCWlmIChpc2RpZ2l0KGVuZFsxXSkpIHsKKwkJCWludCBtYXRjaCA9IG1hdGNoX211bHRpX251bWJlcihudW1iZXIsICplbmQsIGRhdGUsIGVuZCwKKwkJCQkJCSAgICAgICB0bSwgbm93KTsKKwkJCWlmIChtYXRjaCkKKwkJCQlyZXR1cm4gZGF0ZSArIG1hdGNoOworCQl9CisJfQorCisJLyogQWNjZXB0IHplcm8tcGFkZGluZyBvbmx5IGZvciBzbWFsbCBudW1iZXJzICgiRGVjIDAyIiwgbmV2ZXIgIkRlYyAwMDAyIikgKi8KKwlpZiAoZGF0ZVswXSAhPSAnMCcgfHwgZW5kIC0gZGF0ZSA8PSAyKQorCQkqbnVtID0gbnVtYmVyOworCXJldHVybiBlbmQ7Cit9CisKK3N0YXRpYyB0aW1lc3RhbXBfdCBhcHByb3hpZGF0ZV9zdHIoY29uc3QgY2hhciAqZGF0ZSwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYsCisJCQkJICAgaW50ICplcnJvcl9yZXQpCit7CisJaW50IG51bWJlciA9IDA7CisJaW50IHRvdWNoZWQgPSAwOworCXN0cnVjdCB0bSB0bSwgbm93OworCXRpbWVfdCB0aW1lX3NlYzsKKworCXRpbWVfc2VjID0gdHYtPnR2X3NlYzsKKwlsb2NhbHRpbWVfcigmdGltZV9zZWMsICZ0bSk7CisJbm93ID0gdG07CisKKwl0bS50bV95ZWFyID0gLTE7CisJdG0udG1fbW9uID0gLTE7CisJdG0udG1fbWRheSA9IC0xOworCisJZm9yICg7OykgeworCQl1bnNpZ25lZCBjaGFyIGMgPSAqZGF0ZTsKKwkJaWYgKCFjKQorCQkJYnJlYWs7CisJCWRhdGUrKzsKKwkJaWYgKGlzZGlnaXQoYykpIHsKKwkJCXBlbmRpbmdfbnVtYmVyKCZ0bSwgJm51bWJlcik7CisJCQlkYXRlID0gYXBwcm94aWRhdGVfZGlnaXQoZGF0ZS0xLCAmdG0sICZudW1iZXIsIHRpbWVfc2VjKTsKKwkJCXRvdWNoZWQgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGlzYWxwaGEoYykpCisJCQlkYXRlID0gYXBwcm94aWRhdGVfYWxwaGEoZGF0ZS0xLCAmdG0sICZub3csICZudW1iZXIsICZ0b3VjaGVkKTsKKwl9CisJcGVuZGluZ19udW1iZXIoJnRtLCAmbnVtYmVyKTsKKwlpZiAoIXRvdWNoZWQpCisJCSplcnJvcl9yZXQgPSAxOworCXJldHVybiAodGltZXN0YW1wX3QpdXBkYXRlX3RtKCZ0bSwgJm5vdywgMCk7Cit9CisKK3RpbWVzdGFtcF90IGFwcHJveGlkYXRlX3JlbGF0aXZlKGNvbnN0IGNoYXIgKmRhdGUpCit7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJdGltZXN0YW1wX3QgdGltZXN0YW1wOworCWludCBvZmZzZXQ7CisJaW50IGVycm9ycyA9IDA7CisKKwlpZiAoIXBhcnNlX2RhdGVfYmFzaWMoZGF0ZSwgJnRpbWVzdGFtcCwgJm9mZnNldCkpCisJCXJldHVybiB0aW1lc3RhbXA7CisKKwlnZXRfdGltZSgmdHYpOworCXJldHVybiBhcHByb3hpZGF0ZV9zdHIoZGF0ZSwgKGNvbnN0IHN0cnVjdCB0aW1ldmFsICopICZ0diwgJmVycm9ycyk7Cit9CisKK3RpbWVzdGFtcF90IGFwcHJveGlkYXRlX2NhcmVmdWwoY29uc3QgY2hhciAqZGF0ZSwgaW50ICplcnJvcl9yZXQpCit7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJdGltZXN0YW1wX3QgdGltZXN0YW1wOworCWludCBvZmZzZXQ7CisJaW50IGR1bW15ID0gMDsKKwlpZiAoIWVycm9yX3JldCkKKwkJZXJyb3JfcmV0ID0gJmR1bW15OworCisJaWYgKCFwYXJzZV9kYXRlX2Jhc2ljKGRhdGUsICZ0aW1lc3RhbXAsICZvZmZzZXQpKSB7CisJCSplcnJvcl9yZXQgPSAwOworCQlyZXR1cm4gdGltZXN0YW1wOworCX0KKworCWdldF90aW1lKCZ0dik7CisJcmV0dXJuIGFwcHJveGlkYXRlX3N0cihkYXRlLCAmdHYsIGVycm9yX3JldCk7Cit9CisKK2ludCBkYXRlX292ZXJmbG93cyh0aW1lc3RhbXBfdCB0KQoreworCXRpbWVfdCBzeXM7CisKKwkvKiBJZiB3ZSBvdmVyZmxvd2VkIG91ciB0aW1lc3RhbXAgZGF0YSB0eXBlLCB0aGF0J3MgYmFkLi4uICovCisJaWYgKCh1aW50bWF4X3QpdCA+PSBUSU1FX01BWCkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIC4uLmJ1dCB3ZSBhbHNvIGFyZSBnb2luZyB0byBmZWVkIHRoZSByZXN1bHQgdG8gc3lzdGVtCisJICogZnVuY3Rpb25zIHRoYXQgZXhwZWN0IHRpbWVfdCwgd2hpY2ggaXMgb2Z0ZW4gInNpZ25lZCBsb25nIi4KKwkgKiBNYWtlIHN1cmUgdGhhdCB3ZSBmaXQgaW50byB0aW1lX3QsIGFzIHdlbGwuCisJICovCisJc3lzID0gdDsKKwlyZXR1cm4gdCAhPSBzeXMgfHwgKHQgPCAxKSAhPSAoc3lzIDwgMSk7Cit9CmRpZmYgLS1naXQgYS9kZWNvcmF0ZS5jIGIvZGVjb3JhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjA1YjFiCi0tLSAvZGV2L251bGwKKysrIGIvZGVjb3JhdGUuYwpAQCAtMCwwICsxLDgzIEBACisvKgorICogZGVjb3JhdGUuYyAtIGRlY29yYXRlIGEgZ2l0IG9iamVjdCB3aXRoIHNvbWUgYXJiaXRyYXJ5CisgKiBkYXRhLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJkZWNvcmF0ZS5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IGhhc2hfb2JqKGNvbnN0IHN0cnVjdCBvYmplY3QgKm9iaiwgdW5zaWduZWQgaW50IG4pCit7CisJcmV0dXJuIG9pZGhhc2goJm9iai0+b2lkKSAlIG47Cit9CisKK3N0YXRpYyB2b2lkICppbnNlcnRfZGVjb3JhdGlvbihzdHJ1Y3QgZGVjb3JhdGlvbiAqbiwgY29uc3Qgc3RydWN0IG9iamVjdCAqYmFzZSwgdm9pZCAqZGVjb3JhdGlvbikKK3sKKwlpbnQgc2l6ZSA9IG4tPnNpemU7CisJc3RydWN0IGRlY29yYXRpb25fZW50cnkgKmVudHJpZXMgPSBuLT5lbnRyaWVzOworCXVuc2lnbmVkIGludCBqID0gaGFzaF9vYmooYmFzZSwgc2l6ZSk7CisKKwl3aGlsZSAoZW50cmllc1tqXS5iYXNlKSB7CisJCWlmIChlbnRyaWVzW2pdLmJhc2UgPT0gYmFzZSkgeworCQkJdm9pZCAqb2xkID0gZW50cmllc1tqXS5kZWNvcmF0aW9uOworCQkJZW50cmllc1tqXS5kZWNvcmF0aW9uID0gZGVjb3JhdGlvbjsKKwkJCXJldHVybiBvbGQ7CisJCX0KKwkJaWYgKCsraiA+PSBzaXplKQorCQkJaiA9IDA7CisJfQorCWVudHJpZXNbal0uYmFzZSA9IGJhc2U7CisJZW50cmllc1tqXS5kZWNvcmF0aW9uID0gZGVjb3JhdGlvbjsKKwluLT5ucisrOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBncm93X2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4pCit7CisJaW50IGk7CisJaW50IG9sZF9zaXplID0gbi0+c2l6ZTsKKwlzdHJ1Y3QgZGVjb3JhdGlvbl9lbnRyeSAqb2xkX2VudHJpZXMgPSBuLT5lbnRyaWVzOworCisJbi0+c2l6ZSA9IChvbGRfc2l6ZSArIDEwMDApICogMyAvIDI7CisJbi0+ZW50cmllcyA9IHhjYWxsb2Mobi0+c2l6ZSwgc2l6ZW9mKHN0cnVjdCBkZWNvcmF0aW9uX2VudHJ5KSk7CisJbi0+bnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG9sZF9zaXplOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IG9iamVjdCAqYmFzZSA9IG9sZF9lbnRyaWVzW2ldLmJhc2U7CisJCXZvaWQgKmRlY29yYXRpb24gPSBvbGRfZW50cmllc1tpXS5kZWNvcmF0aW9uOworCisJCWlmICghZGVjb3JhdGlvbikKKwkJCWNvbnRpbnVlOworCQlpbnNlcnRfZGVjb3JhdGlvbihuLCBiYXNlLCBkZWNvcmF0aW9uKTsKKwl9CisJZnJlZShvbGRfZW50cmllcyk7Cit9CisKK3ZvaWQgKmFkZF9kZWNvcmF0aW9uKHN0cnVjdCBkZWNvcmF0aW9uICpuLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJCXZvaWQgKmRlY29yYXRpb24pCit7CisJaW50IG5yID0gbi0+bnIgKyAxOworCisJaWYgKG5yID4gbi0+c2l6ZSAqIDIgLyAzKQorCQlncm93X2RlY29yYXRpb24obik7CisJcmV0dXJuIGluc2VydF9kZWNvcmF0aW9uKG4sIG9iaiwgZGVjb3JhdGlvbik7Cit9CisKK3ZvaWQgKmxvb2t1cF9kZWNvcmF0aW9uKHN0cnVjdCBkZWNvcmF0aW9uICpuLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJdW5zaWduZWQgaW50IGo7CisKKwkvKiBub3RoaW5nIHRvIGxvb2t1cCAqLworCWlmICghbi0+c2l6ZSkKKwkJcmV0dXJuIE5VTEw7CisJaiA9IGhhc2hfb2JqKG9iaiwgbi0+c2l6ZSk7CisJZm9yICg7OykgeworCQlzdHJ1Y3QgZGVjb3JhdGlvbl9lbnRyeSAqcmVmID0gbi0+ZW50cmllcyArIGo7CisJCWlmIChyZWYtPmJhc2UgPT0gb2JqKQorCQkJcmV0dXJuIHJlZi0+ZGVjb3JhdGlvbjsKKwkJaWYgKCFyZWYtPmJhc2UpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKCsraiA9PSBuLT5zaXplKQorCQkJaiA9IDA7CisJfQorfQpkaWZmIC0tZ2l0IGEvZGVjb3JhdGUuaCBiL2RlY29yYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0M2RlZQotLS0gL2Rldi9udWxsCisrKyBiL2RlY29yYXRlLmgKQEAgLTAsMCArMSw2MSBAQAorI2lmbmRlZiBERUNPUkFURV9ICisjZGVmaW5lIERFQ09SQVRFX0gKKworLyoKKyAqIEEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBhc3NvY2lhdGVzIEdpdCBvYmplY3RzIHRvIHZvaWQgcG9pbnRlcnMuIFNlZQorICogdC9oZWxwZXIvdGVzdC1leGFtcGxlLWRlY29yYXRlLmMgZm9yIGEgZGVtb25zdHJhdGlvbiBvZiBob3cgdG8gdXNlIHRoZXNlCisgKiBmdW5jdGlvbnMuCisgKi8KKworLyoKKyAqIEFuIGVudHJ5IGluIHRoZSBkYXRhIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IGRlY29yYXRpb25fZW50cnkgeworCWNvbnN0IHN0cnVjdCBvYmplY3QgKmJhc2U7CisJdm9pZCAqZGVjb3JhdGlvbjsKK307CisKKy8qCisgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBkYXRhIHN0cnVjdHVyZSBtdXN0IGJlIHplcm8taW5pdGlhbGl6ZWQuCisgKi8KK3N0cnVjdCBkZWNvcmF0aW9uIHsKKwkvKgorCSAqIE5vdCB1c2VkIGJ5IHRoZSBkZWNvcmF0aW9uIG1lY2hhbmlzbS4gQ2xpZW50cyBtYXkgdXNlIHRoaXMgZm9yCisJICogd2hhdGV2ZXIgdGhleSB3YW50LgorCSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkvKgorCSAqIFRoZSBjYXBhY2l0eSBvZiAiZW50cmllcyIuCisJICovCisJdW5zaWduZWQgaW50IHNpemU7CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgcmVhbCBHaXQgb2JqZWN0cyAodGhhdCBpcywgZW50cmllcyB3aXRoIG5vbi1OVUxMCisJICogImJhc2UiKS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgbnI7CisKKwkvKgorCSAqIFRoZSBlbnRyaWVzLiBUaGlzIGlzIGFuIGFycmF5IG9mIHNpemUgInNpemUiLCBjb250YWluaW5nIG5yIGVudHJpZXMKKwkgKiB3aXRoIG5vbi1OVUxMICJiYXNlIiBhbmQgKHNpemUgLSBucikgZW50cmllcyB3aXRoIE5VTEwgImJhc2UiLgorCSAqLworCXN0cnVjdCBkZWNvcmF0aW9uX2VudHJ5ICplbnRyaWVzOworfTsKKworLyoKKyAqIEFkZCBhbiBhc3NvY2lhdGlvbiBmcm9tIHRoZSBnaXZlbiBvYmplY3QgdG8gdGhlIGdpdmVuIHBvaW50ZXIgKHdoaWNoIG1heSBiZQorICogTlVMTCksIHJldHVybmluZyB0aGUgcHJldmlvdXNseSBhc3NvY2lhdGVkIHBvaW50ZXIuIElmIHRoZXJlIGlzIG5vIHByZXZpb3VzCisgKiBhc3NvY2lhdGlvbiwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCisgKi8KK3ZvaWQgKmFkZF9kZWNvcmF0aW9uKHN0cnVjdCBkZWNvcmF0aW9uICpuLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIHZvaWQgKmRlY29yYXRpb24pOworCisvKgorICogUmV0dXJuIHRoZSBwb2ludGVyIGFzc29jaWF0ZWQgdG8gdGhlIGdpdmVuIG9iamVjdC4gSWYgdGhlcmUgaXMgbm8KKyAqIGFzc29jaWF0aW9uLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTlVMTC4KKyAqLwordm9pZCAqbG9va3VwX2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4sIGNvbnN0IHN0cnVjdCBvYmplY3QgKm9iaik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZGVsdGEtaXNsYW5kcy5jIGIvZGVsdGEtaXNsYW5kcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOThiMmUKLS0tIC9kZXYvbnVsbAorKysgYi9kZWx0YS1pc2xhbmRzLmMKQEAgLTAsMCArMSw1MDcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImtoYXNoLmgiCisjaW5jbHVkZSAicGFjay1iaXRtYXAuaCIKKyNpbmNsdWRlICJwYWNrLW9iamVjdHMuaCIKKyNpbmNsdWRlICJkZWx0YS1pc2xhbmRzLmgiCisjaW5jbHVkZSAib2lkLWFycmF5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisKK0tIQVNIX0lOSVQoc3RyLCBjb25zdCBjaGFyICosIHZvaWQgKiwgMSwga2hfc3RyX2hhc2hfZnVuYywga2hfc3RyX2hhc2hfZXF1YWwpCisKK3N0YXRpYyBraF9vaWRfbWFwX3QgKmlzbGFuZF9tYXJrczsKK3N0YXRpYyB1bnNpZ25lZCBpc2xhbmRfY291bnRlcjsKK3N0YXRpYyB1bnNpZ25lZCBpc2xhbmRfY291bnRlcl9jb3JlOworCitzdGF0aWMga2hfc3RyX3QgKnJlbW90ZV9pc2xhbmRzOworCitzdHJ1Y3QgcmVtb3RlX2lzbGFuZCB7CisJdWludDY0X3QgaGFzaDsKKwlzdHJ1Y3Qgb2lkX2FycmF5IG9pZHM7Cit9OworCitzdHJ1Y3QgaXNsYW5kX2JpdG1hcCB7CisJdWludDMyX3QgcmVmY291bnQ7CisJdWludDMyX3QgYml0c1tGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyB1aW50MzJfdCBpc2xhbmRfYml0bWFwX3NpemU7CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBiaXRtYXA7IGlmICJvbGQiIGlzIG5vdCBOVUxMLCB0aGUgbmV3IGJpdG1hcCB3aWxsIGJlIGEgY29weQorICogb2YgIm9sZCIuIE90aGVyd2lzZSwgdGhlIG5ldyBiaXRtYXAgaXMgZW1wdHkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXNsYW5kX2JpdG1hcCAqaXNsYW5kX2JpdG1hcF9uZXcoY29uc3Qgc3RydWN0IGlzbGFuZF9iaXRtYXAgKm9sZCkKK3sKKwlzaXplX3Qgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXNsYW5kX2JpdG1hcCkgKyAoaXNsYW5kX2JpdG1hcF9zaXplICogNCk7CisJc3RydWN0IGlzbGFuZF9iaXRtYXAgKmIgPSB4Y2FsbG9jKDEsIHNpemUpOworCisJaWYgKG9sZCkKKwkJbWVtY3B5KGIsIG9sZCwgc2l6ZSk7CisKKwliLT5yZWZjb3VudCA9IDE7CisJcmV0dXJuIGI7Cit9CisKK3N0YXRpYyB2b2lkIGlzbGFuZF9iaXRtYXBfb3Ioc3RydWN0IGlzbGFuZF9iaXRtYXAgKmEsIGNvbnN0IHN0cnVjdCBpc2xhbmRfYml0bWFwICpiKQoreworCXVpbnQzMl90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaXNsYW5kX2JpdG1hcF9zaXplOyArK2kpCisJCWEtPmJpdHNbaV0gfD0gYi0+Yml0c1tpXTsKK30KKworc3RhdGljIGludCBpc2xhbmRfYml0bWFwX2lzX3N1YnNldChzdHJ1Y3QgaXNsYW5kX2JpdG1hcCAqc2VsZiwKKwkJc3RydWN0IGlzbGFuZF9iaXRtYXAgKnN1cGVyKQoreworCXVpbnQzMl90IGk7CisKKwlpZiAoc2VsZiA9PSBzdXBlcikKKwkJcmV0dXJuIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgaXNsYW5kX2JpdG1hcF9zaXplOyArK2kpIHsKKwkJaWYgKChzZWxmLT5iaXRzW2ldICYgc3VwZXItPmJpdHNbaV0pICE9IHNlbGYtPmJpdHNbaV0pCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBJU0xBTkRfQklUTUFQX0JMT0NLKHgpICh4IC8gMzIpCisjZGVmaW5lIElTTEFORF9CSVRNQVBfTUFTSyh4KSAoMSA8PCAoeCAlIDMyKSkKKworc3RhdGljIHZvaWQgaXNsYW5kX2JpdG1hcF9zZXQoc3RydWN0IGlzbGFuZF9iaXRtYXAgKnNlbGYsIHVpbnQzMl90IGkpCit7CisJc2VsZi0+Yml0c1tJU0xBTkRfQklUTUFQX0JMT0NLKGkpXSB8PSBJU0xBTkRfQklUTUFQX01BU0soaSk7Cit9CisKK3N0YXRpYyBpbnQgaXNsYW5kX2JpdG1hcF9nZXQoc3RydWN0IGlzbGFuZF9iaXRtYXAgKnNlbGYsIHVpbnQzMl90IGkpCit7CisJcmV0dXJuIChzZWxmLT5iaXRzW0lTTEFORF9CSVRNQVBfQkxPQ0soaSldICYgSVNMQU5EX0JJVE1BUF9NQVNLKGkpKSAhPSAwOworfQorCitpbnQgaW5fc2FtZV9pc2xhbmQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdHJnX29pZCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqc3JjX29pZCkKK3sKKwlraGl0ZXJfdCB0cmdfcG9zLCBzcmNfcG9zOworCisJLyogSWYgd2UgYXJlbid0IHVzaW5nIGlzbGFuZHMsIGFzc3VtZSBldmVyeXRoaW5nIGdvZXMgdG9nZXRoZXIuICovCisJaWYgKCFpc2xhbmRfbWFya3MpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBoYXZlIGEgYml0bWFwIGZvciB0aGUgdGFyZ2V0LCB3ZSBjYW4gZGVsdGEgaXQKKwkgKiBhZ2FpbnN0IGFueXRoaW5nIC0tIGl0J3Mgbm90IGFuIGltcG9ydGFudCBvYmplY3QKKwkgKi8KKwl0cmdfcG9zID0ga2hfZ2V0X29pZF9tYXAoaXNsYW5kX21hcmtzLCAqdHJnX29pZCk7CisJaWYgKHRyZ19wb3MgPj0ga2hfZW5kKGlzbGFuZF9tYXJrcykpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBpZiB0aGUgc291cmNlIChvdXIgZGVsdGEgYmFzZSkgZG9lc24ndCBoYXZlIGEgYml0bWFwLAorCSAqIHdlIGRvbid0IHdhbnQgdG8gYmFzZSBhbnkgZGVsdGFzIG9uIGl0IQorCSAqLworCXNyY19wb3MgPSBraF9nZXRfb2lkX21hcChpc2xhbmRfbWFya3MsICpzcmNfb2lkKTsKKwlpZiAoc3JjX3BvcyA+PSBraF9lbmQoaXNsYW5kX21hcmtzKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gaXNsYW5kX2JpdG1hcF9pc19zdWJzZXQoa2hfdmFsdWUoaXNsYW5kX21hcmtzLCB0cmdfcG9zKSwKKwkJCQlraF92YWx1ZShpc2xhbmRfbWFya3MsIHNyY19wb3MpKTsKK30KKworaW50IGlzbGFuZF9kZWx0YV9jbXAoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYikKK3sKKwlraGl0ZXJfdCBhX3BvcywgYl9wb3M7CisJc3RydWN0IGlzbGFuZF9iaXRtYXAgKmFfYml0bWFwID0gTlVMTCwgKmJfYml0bWFwID0gTlVMTDsKKworCWlmICghaXNsYW5kX21hcmtzKQorCQlyZXR1cm4gMDsKKworCWFfcG9zID0ga2hfZ2V0X29pZF9tYXAoaXNsYW5kX21hcmtzLCAqYSk7CisJaWYgKGFfcG9zIDwga2hfZW5kKGlzbGFuZF9tYXJrcykpCisJCWFfYml0bWFwID0ga2hfdmFsdWUoaXNsYW5kX21hcmtzLCBhX3Bvcyk7CisKKwliX3BvcyA9IGtoX2dldF9vaWRfbWFwKGlzbGFuZF9tYXJrcywgKmIpOworCWlmIChiX3BvcyA8IGtoX2VuZChpc2xhbmRfbWFya3MpKQorCQliX2JpdG1hcCA9IGtoX3ZhbHVlKGlzbGFuZF9tYXJrcywgYl9wb3MpOworCisJaWYgKGFfYml0bWFwKSB7CisJCWlmICghYl9iaXRtYXAgfHwgIWlzbGFuZF9iaXRtYXBfaXNfc3Vic2V0KGFfYml0bWFwLCBiX2JpdG1hcCkpCisJCQlyZXR1cm4gLTE7CisJfQorCWlmIChiX2JpdG1hcCkgeworCQlpZiAoIWFfYml0bWFwIHx8ICFpc2xhbmRfYml0bWFwX2lzX3N1YnNldChiX2JpdG1hcCwgYV9iaXRtYXApKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXNsYW5kX2JpdG1hcCAqY3JlYXRlX29yX2dldF9pc2xhbmRfbWFya3Moc3RydWN0IG9iamVjdCAqb2JqKQoreworCWtoaXRlcl90IHBvczsKKwlpbnQgaGFzaF9yZXQ7CisKKwlwb3MgPSBraF9wdXRfb2lkX21hcChpc2xhbmRfbWFya3MsIG9iai0+b2lkLCAmaGFzaF9yZXQpOworCWlmIChoYXNoX3JldCkKKwkJa2hfdmFsdWUoaXNsYW5kX21hcmtzLCBwb3MpID0gaXNsYW5kX2JpdG1hcF9uZXcoTlVMTCk7CisKKwlyZXR1cm4ga2hfdmFsdWUoaXNsYW5kX21hcmtzLCBwb3MpOworfQorCitzdGF0aWMgdm9pZCBzZXRfaXNsYW5kX21hcmtzKHN0cnVjdCBvYmplY3QgKm9iaiwgc3RydWN0IGlzbGFuZF9iaXRtYXAgKm1hcmtzKQoreworCXN0cnVjdCBpc2xhbmRfYml0bWFwICpiOworCWtoaXRlcl90IHBvczsKKwlpbnQgaGFzaF9yZXQ7CisKKwlwb3MgPSBraF9wdXRfb2lkX21hcChpc2xhbmRfbWFya3MsIG9iai0+b2lkLCAmaGFzaF9yZXQpOworCWlmIChoYXNoX3JldCkgeworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZlIG9uZSB5ZXQ7IG1ha2UgYSBjb3B5LW9uLXdyaXRlIG9mIHRoZQorCQkgKiBwYXJlbnQuCisJCSAqLworCQltYXJrcy0+cmVmY291bnQrKzsKKwkJa2hfdmFsdWUoaXNsYW5kX21hcmtzLCBwb3MpID0gbWFya3M7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFdlIGRvIGhhdmUgaXQuIE1ha2Ugc3VyZSB3ZSBzcGxpdCBhbnkgY29weS1vbi13cml0ZSBiZWZvcmUKKwkgKiB1cGRhdGluZy4KKwkgKi8KKwliID0ga2hfdmFsdWUoaXNsYW5kX21hcmtzLCBwb3MpOworCWlmIChiLT5yZWZjb3VudCA+IDEpIHsKKwkJYi0+cmVmY291bnQtLTsKKwkJYiA9IGtoX3ZhbHVlKGlzbGFuZF9tYXJrcywgcG9zKSA9IGlzbGFuZF9iaXRtYXBfbmV3KGIpOworCX0KKwlpc2xhbmRfYml0bWFwX29yKGIsIG1hcmtzKTsKK30KKworc3RhdGljIHZvaWQgbWFya19yZW1vdGVfaXNsYW5kXzEoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJIHN0cnVjdCByZW1vdGVfaXNsYW5kICpybCwKKwkJCQkgaW50IGlzX2NvcmVfaXNsYW5kKQoreworCXVpbnQzMl90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmwtPm9pZHMubnI7ICsraSkgeworCQlzdHJ1Y3QgaXNsYW5kX2JpdG1hcCAqbWFya3M7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHBhcnNlX29iamVjdChyLCAmcmwtPm9pZHMub2lkW2ldKTsKKworCQlpZiAoIW9iaikKKwkJCWNvbnRpbnVlOworCisJCW1hcmtzID0gY3JlYXRlX29yX2dldF9pc2xhbmRfbWFya3Mob2JqKTsKKwkJaXNsYW5kX2JpdG1hcF9zZXQobWFya3MsIGlzbGFuZF9jb3VudGVyKTsKKworCQlpZiAoaXNfY29yZV9pc2xhbmQgJiYgb2JqLT50eXBlID09IE9CSl9DT01NSVQpCisJCQlvYmotPmZsYWdzIHw9IE5FRURTX0JJVE1BUDsKKworCQkvKiBJZiBpdCB3YXMgYSB0YWcsIGFsc28gbWFrZSBzdXJlIHdlIGhpdCB0aGUgdW5kZXJseWluZyBvYmplY3QuICovCisJCXdoaWxlIChvYmogJiYgb2JqLT50eXBlID09IE9CSl9UQUcpIHsKKwkJCW9iaiA9ICgoc3RydWN0IHRhZyAqKW9iaiktPnRhZ2dlZDsKKwkJCWlmIChvYmopIHsKKwkJCQlwYXJzZV9vYmplY3QociwgJm9iai0+b2lkKTsKKwkJCQltYXJrcyA9IGNyZWF0ZV9vcl9nZXRfaXNsYW5kX21hcmtzKG9iaik7CisJCQkJaXNsYW5kX2JpdG1hcF9zZXQobWFya3MsIGlzbGFuZF9jb3VudGVyKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChpc19jb3JlX2lzbGFuZCkKKwkJaXNsYW5kX2NvdW50ZXJfY29yZSA9IGlzbGFuZF9jb3VudGVyOworCisJaXNsYW5kX2NvdW50ZXIrKzsKK30KKworc3RydWN0IHRyZWVfaXNsYW5kc190b2RvIHsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeTsKKwl1bnNpZ25lZCBpbnQgZGVwdGg7Cit9OworCitzdGF0aWMgaW50IHRyZWVfZGVwdGhfY29tcGFyZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCB0cmVlX2lzbGFuZHNfdG9kbyAqdG9kb19hID0gYTsKKwljb25zdCBzdHJ1Y3QgdHJlZV9pc2xhbmRzX3RvZG8gKnRvZG9fYiA9IGI7CisKKwlyZXR1cm4gdG9kb19hLT5kZXB0aCAtIHRvZG9fYi0+ZGVwdGg7Cit9CisKK3ZvaWQgcmVzb2x2ZV90cmVlX2lzbGFuZHMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgIGludCBwcm9ncmVzcywKKwkJCSAgc3RydWN0IHBhY2tpbmdfZGF0YSAqdG9fcGFjaykKK3sKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzX3N0YXRlID0gTlVMTDsKKwlzdHJ1Y3QgdHJlZV9pc2xhbmRzX3RvZG8gKnRvZG87CisJaW50IG5yID0gMDsKKwlpbnQgaTsKKworCWlmICghaXNsYW5kX21hcmtzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFdlIHByb2Nlc3Mgb25seSB0cmVlcywgYXMgY29tbWl0cyBhbmQgdGFncyBoYXZlIGFscmVhZHkgYmVlbiBoYW5kbGVkCisJICogKGFuZCBwYXNzZWQgdGhlaXIgbWFya3Mgb24gdG8gcm9vdCB0cmVlcywgYXMgd2VsbC4gV2UgbXVzdCBtYWtlIHN1cmUKKwkgKiB0byBwcm9jZXNzIHRoZW0gaW4gZGVzY2VuZGluZyB0cmVlLWRlcHRoIG9yZGVyIHNvIHRoYXQgbWFya3MKKwkgKiBwcm9wYWdhdGUgZG93biB0aGUgdHJlZSBwcm9wZXJseSwgZXZlbiBpZiBhIHN1Yi10cmVlIGlzIGZvdW5kIGluCisJICogbXVsdGlwbGUgcGFyZW50IHRyZWVzLgorCSAqLworCUFMTE9DX0FSUkFZKHRvZG8sIHRvX3BhY2stPm5yX29iamVjdHMpOworCWZvciAoaSA9IDA7IGkgPCB0b19wYWNrLT5ucl9vYmplY3RzOyBpKyspIHsKKwkJaWYgKG9lX3R5cGUoJnRvX3BhY2stPm9iamVjdHNbaV0pID09IE9CSl9UUkVFKSB7CisJCQl0b2RvW25yXS5lbnRyeSA9ICZ0b19wYWNrLT5vYmplY3RzW2ldOworCQkJdG9kb1tucl0uZGVwdGggPSBvZV90cmVlX2RlcHRoKHRvX3BhY2ssICZ0b19wYWNrLT5vYmplY3RzW2ldKTsKKwkJCW5yKys7CisJCX0KKwl9CisJUVNPUlQodG9kbywgbnIsIHRyZWVfZGVwdGhfY29tcGFyZSk7CisKKwlpZiAocHJvZ3Jlc3MpCisJCXByb2dyZXNzX3N0YXRlID0gc3RhcnRfcHJvZ3Jlc3MoXygiUHJvcGFnYXRpbmcgaXNsYW5kIG1hcmtzIiksIG5yKTsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudCA9IHRvZG9baV0uZW50cnk7CisJCXN0cnVjdCBpc2xhbmRfYml0bWFwICpyb290X21hcmtzOworCQlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwkJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCQlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKwkJa2hpdGVyX3QgcG9zOworCisJCXBvcyA9IGtoX2dldF9vaWRfbWFwKGlzbGFuZF9tYXJrcywgZW50LT5pZHgub2lkKTsKKwkJaWYgKHBvcyA+PSBraF9lbmQoaXNsYW5kX21hcmtzKSkKKwkJCWNvbnRpbnVlOworCisJCXJvb3RfbWFya3MgPSBraF92YWx1ZShpc2xhbmRfbWFya3MsIHBvcyk7CisKKwkJdHJlZSA9IGxvb2t1cF90cmVlKHIsICZlbnQtPmlkeC5vaWQpOworCQlpZiAoIXRyZWUgfHwgcGFyc2VfdHJlZSh0cmVlKSA8IDApCisJCQlkaWUoXygiYmFkIHRyZWUgb2JqZWN0ICVzIiksIG9pZF90b19oZXgoJmVudC0+aWR4Lm9pZCkpOworCisJCWluaXRfdHJlZV9kZXNjKCZkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCQl3aGlsZSAodHJlZV9lbnRyeSgmZGVzYywgJmVudHJ5KSkgeworCQkJc3RydWN0IG9iamVjdCAqb2JqOworCisJCQlpZiAoU19JU0dJVExJTksoZW50cnkubW9kZSkpCisJCQkJY29udGludWU7CisKKwkJCW9iaiA9IGxvb2t1cF9vYmplY3QociwgJmVudHJ5Lm9pZCk7CisJCQlpZiAoIW9iaikKKwkJCQljb250aW51ZTsKKworCQkJc2V0X2lzbGFuZF9tYXJrcyhvYmosIHJvb3RfbWFya3MpOworCQl9CisKKwkJZnJlZV90cmVlX2J1ZmZlcih0cmVlKTsKKworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzX3N0YXRlLCBpKzEpOworCX0KKworCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzX3N0YXRlKTsKKwlmcmVlKHRvZG8pOworfQorCitzdGF0aWMgcmVnZXhfdCAqaXNsYW5kX3JlZ2V4ZXM7CitzdGF0aWMgdW5zaWduZWQgaW50IGlzbGFuZF9yZWdleGVzX2FsbG9jLCBpc2xhbmRfcmVnZXhlc19ucjsKK3N0YXRpYyBjb25zdCBjaGFyICpjb3JlX2lzbGFuZF9uYW1lOworCitzdGF0aWMgaW50IGlzbGFuZF9jb25maWdfY2FsbGJhY2soY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAoaywgInBhY2suaXNsYW5kIikpIHsKKwkJc3RydWN0IHN0cmJ1ZiByZSA9IFNUUkJVRl9JTklUOworCisJCWlmICghdikKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrKTsKKworCQlBTExPQ19HUk9XKGlzbGFuZF9yZWdleGVzLCBpc2xhbmRfcmVnZXhlc19uciArIDEsIGlzbGFuZF9yZWdleGVzX2FsbG9jKTsKKworCQlpZiAoKnYgIT0gJ14nKQorCQkJc3RyYnVmX2FkZGNoKCZyZSwgJ14nKTsKKwkJc3RyYnVmX2FkZHN0cigmcmUsIHYpOworCisJCWlmIChyZWdjb21wKCZpc2xhbmRfcmVnZXhlc1tpc2xhbmRfcmVnZXhlc19ucl0sIHJlLmJ1ZiwgUkVHX0VYVEVOREVEKSkKKwkJCWRpZShfKCJmYWlsZWQgdG8gbG9hZCBpc2xhbmQgcmVnZXggZm9yICclcyc6ICVzIiksIGssIHJlLmJ1Zik7CisKKwkJc3RyYnVmX3JlbGVhc2UoJnJlKTsKKwkJaXNsYW5kX3JlZ2V4ZXNfbnIrKzsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAoaywgInBhY2suaXNsYW5kY29yZSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmNvcmVfaXNsYW5kX25hbWUsIGssIHYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9yZWZfdG9faXNsYW5kKGNvbnN0IGNoYXIgKmlzbGFuZF9uYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJdWludDY0X3Qgc2hhX2NvcmU7CisJc3RydWN0IHJlbW90ZV9pc2xhbmQgKnJsID0gTlVMTDsKKworCWludCBoYXNoX3JldDsKKwlraGl0ZXJfdCBwb3MgPSBraF9wdXRfc3RyKHJlbW90ZV9pc2xhbmRzLCBpc2xhbmRfbmFtZSwgJmhhc2hfcmV0KTsKKworCWlmIChoYXNoX3JldCkgeworCQlraF9rZXkocmVtb3RlX2lzbGFuZHMsIHBvcykgPSB4c3RyZHVwKGlzbGFuZF9uYW1lKTsKKwkJa2hfdmFsdWUocmVtb3RlX2lzbGFuZHMsIHBvcykgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcmVtb3RlX2lzbGFuZCkpOworCX0KKworCXJsID0ga2hfdmFsdWUocmVtb3RlX2lzbGFuZHMsIHBvcyk7CisJb2lkX2FycmF5X2FwcGVuZCgmcmwtPm9pZHMsIG9pZCk7CisKKwltZW1jcHkoJnNoYV9jb3JlLCBvaWQtPmhhc2gsIHNpemVvZih1aW50NjRfdCkpOworCXJsLT5oYXNoICs9IHNoYV9jb3JlOworfQorCitzdGF0aWMgaW50IGZpbmRfaXNsYW5kX2Zvcl9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgIGludCBmbGFncywgdm9pZCAqZGF0YSkKK3sKKwkvKgorCSAqIFdlIHNob3VsZCBhZHZlcnRpc2UgJ0FSUkFZX1NJWkUobWF0Y2hlcykgLSAyJyBhcyB0aGUgbWF4LAorCSAqIHNvIHdlIGNhbiBkaWFnbm9zZSBiZWxvdyBhIGNvbmZpZyB3aXRoIG1vcmUgY2FwdHVyZSBncm91cHMKKwkgKiB0aGFuIHdlIHN1cHBvcnQuCisJICovCisJcmVnbWF0Y2hfdCBtYXRjaGVzWzE2XTsKKwlpbnQgaSwgbTsKKwlzdHJ1Y3Qgc3RyYnVmIGlzbGFuZF9uYW1lID0gU1RSQlVGX0lOSVQ7CisKKwkvKiB3YWxrIGJhY2t3YXJkcyB0byBnZXQgbGFzdC1vbmUtd2lucyBvcmRlcmluZyAqLworCWZvciAoaSA9IGlzbGFuZF9yZWdleGVzX25yIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKCFyZWdleGVjKCZpc2xhbmRfcmVnZXhlc1tpXSwgcmVmbmFtZSwKKwkJCSAgICAgQVJSQVlfU0laRShtYXRjaGVzKSwgbWF0Y2hlcywgMCkpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA8IDApCisJCXJldHVybiAwOworCisJaWYgKG1hdGNoZXNbQVJSQVlfU0laRShtYXRjaGVzKSAtIDFdLnJtX3NvICE9IC0xKQorCQl3YXJuaW5nKF8oImlzbGFuZCByZWdleCBmcm9tIGNvbmZpZyBoYXMgIgorCQkJICAidG9vIG1hbnkgY2FwdHVyZSBncm91cHMgKG1heD0lZCkiKSwKKwkJCShpbnQpQVJSQVlfU0laRShtYXRjaGVzKSAtIDIpOworCisJZm9yIChtID0gMTsgbSA8IEFSUkFZX1NJWkUobWF0Y2hlcyk7IG0rKykgeworCQlyZWdtYXRjaF90ICptYXRjaCA9ICZtYXRjaGVzW21dOworCisJCWlmIChtYXRjaC0+cm1fc28gPT0gLTEpCisJCQljb250aW51ZTsKKworCQlpZiAoaXNsYW5kX25hbWUubGVuKQorCQkJc3RyYnVmX2FkZGNoKCZpc2xhbmRfbmFtZSwgJy0nKTsKKworCQlzdHJidWZfYWRkKCZpc2xhbmRfbmFtZSwgcmVmbmFtZSArIG1hdGNoLT5ybV9zbywgbWF0Y2gtPnJtX2VvIC0gbWF0Y2gtPnJtX3NvKTsKKwl9CisKKwlhZGRfcmVmX3RvX2lzbGFuZChpc2xhbmRfbmFtZS5idWYsIG9pZCk7CisJc3RyYnVmX3JlbGVhc2UoJmlzbGFuZF9uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZW1vdGVfaXNsYW5kICpnZXRfY29yZV9pc2xhbmQodm9pZCkKK3sKKwlpZiAoY29yZV9pc2xhbmRfbmFtZSkgeworCQlraGl0ZXJfdCBwb3MgPSBraF9nZXRfc3RyKHJlbW90ZV9pc2xhbmRzLCBjb3JlX2lzbGFuZF9uYW1lKTsKKwkJaWYgKHBvcyA8IGtoX2VuZChyZW1vdGVfaXNsYW5kcykpCisJCQlyZXR1cm4ga2hfdmFsdWUocmVtb3RlX2lzbGFuZHMsIHBvcyk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGRlZHVwbGljYXRlX2lzbGFuZHMoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJc3RydWN0IHJlbW90ZV9pc2xhbmQgKmlzbGFuZCwgKmNvcmUgPSBOVUxMLCAqKmxpc3Q7CisJdW5zaWduZWQgaW50IGlzbGFuZF9jb3VudCwgZHN0LCBzcmMsIHJlZiwgaSA9IDA7CisKKwlpc2xhbmRfY291bnQgPSBraF9zaXplKHJlbW90ZV9pc2xhbmRzKTsKKwlBTExPQ19BUlJBWShsaXN0LCBpc2xhbmRfY291bnQpOworCisJa2hfZm9yZWFjaF92YWx1ZShyZW1vdGVfaXNsYW5kcywgaXNsYW5kLCB7CisJCWxpc3RbaSsrXSA9IGlzbGFuZDsKKwl9KTsKKworCWZvciAocmVmID0gMDsgcmVmICsgMSA8IGlzbGFuZF9jb3VudDsgcmVmKyspIHsKKwkJZm9yIChzcmMgPSByZWYgKyAxLCBkc3QgPSBzcmM7IHNyYyA8IGlzbGFuZF9jb3VudDsgc3JjKyspIHsKKwkJCWlmIChsaXN0W3JlZl0tPmhhc2ggPT0gbGlzdFtzcmNdLT5oYXNoKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoc3JjICE9IGRzdCkKKwkJCQlsaXN0W2RzdF0gPSBsaXN0W3NyY107CisKKwkJCWRzdCsrOworCQl9CisJCWlzbGFuZF9jb3VudCA9IGRzdDsKKwl9CisKKwlpc2xhbmRfYml0bWFwX3NpemUgPSAoaXNsYW5kX2NvdW50IC8gMzIpICsgMTsKKwljb3JlID0gZ2V0X2NvcmVfaXNsYW5kKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaXNsYW5kX2NvdW50OyArK2kpIHsKKwkJbWFya19yZW1vdGVfaXNsYW5kXzEociwgbGlzdFtpXSwgY29yZSAmJiBsaXN0W2ldLT5oYXNoID09IGNvcmUtPmhhc2gpOworCX0KKworCWZyZWUobGlzdCk7Cit9CisKK3ZvaWQgbG9hZF9kZWx0YV9pc2xhbmRzKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBpbnQgcHJvZ3Jlc3MpCit7CisJaXNsYW5kX21hcmtzID0ga2hfaW5pdF9vaWRfbWFwKCk7CisJcmVtb3RlX2lzbGFuZHMgPSBraF9pbml0X3N0cigpOworCisJZ2l0X2NvbmZpZyhpc2xhbmRfY29uZmlnX2NhbGxiYWNrLCBOVUxMKTsKKwlmb3JfZWFjaF9yZWYoZmluZF9pc2xhbmRfZm9yX3JlZiwgTlVMTCk7CisJZGVkdXBsaWNhdGVfaXNsYW5kcyhyKTsKKworCWlmIChwcm9ncmVzcykKKwkJZnByaW50ZihzdGRlcnIsIF8oIk1hcmtlZCAlZCBpc2xhbmRzLCBkb25lLlxuIiksIGlzbGFuZF9jb3VudGVyKTsKK30KKwordm9pZCBwcm9wYWdhdGVfaXNsYW5kX21hcmtzKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlraGl0ZXJfdCBwb3MgPSBraF9nZXRfb2lkX21hcChpc2xhbmRfbWFya3MsIGNvbW1pdC0+b2JqZWN0Lm9pZCk7CisKKwlpZiAocG9zIDwga2hfZW5kKGlzbGFuZF9tYXJrcykpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCQlzdHJ1Y3QgaXNsYW5kX2JpdG1hcCAqcm9vdF9tYXJrcyA9IGtoX3ZhbHVlKGlzbGFuZF9tYXJrcywgcG9zKTsKKworCQlwYXJzZV9jb21taXQoY29tbWl0KTsKKwkJc2V0X2lzbGFuZF9tYXJrcygmZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCktPm9iamVjdCwgcm9vdF9tYXJrcyk7CisJCWZvciAocCA9IGNvbW1pdC0+cGFyZW50czsgcDsgcCA9IHAtPm5leHQpCisJCQlzZXRfaXNsYW5kX21hcmtzKCZwLT5pdGVtLT5vYmplY3QsIHJvb3RfbWFya3MpOworCX0KK30KKworaW50IGNvbXB1dGVfcGFja19sYXllcnMoc3RydWN0IHBhY2tpbmdfZGF0YSAqdG9fcGFjaykKK3sKKwl1aW50MzJfdCBpOworCisJaWYgKCFjb3JlX2lzbGFuZF9uYW1lIHx8ICFpc2xhbmRfbWFya3MpCisJCXJldHVybiAxOworCisJZm9yIChpID0gMDsgaSA8IHRvX3BhY2stPm5yX29iamVjdHM7ICsraSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSA9ICZ0b19wYWNrLT5vYmplY3RzW2ldOworCQlraGl0ZXJfdCBwb3MgPSBraF9nZXRfb2lkX21hcChpc2xhbmRfbWFya3MsIGVudHJ5LT5pZHgub2lkKTsKKworCQlvZV9zZXRfbGF5ZXIodG9fcGFjaywgZW50cnksIDEpOworCisJCWlmIChwb3MgPCBraF9lbmQoaXNsYW5kX21hcmtzKSkgeworCQkJc3RydWN0IGlzbGFuZF9iaXRtYXAgKmJpdG1hcCA9IGtoX3ZhbHVlKGlzbGFuZF9tYXJrcywgcG9zKTsKKworCQkJaWYgKGlzbGFuZF9iaXRtYXBfZ2V0KGJpdG1hcCwgaXNsYW5kX2NvdW50ZXJfY29yZSkpCisJCQkJb2Vfc2V0X2xheWVyKHRvX3BhY2ssIGVudHJ5LCAwKTsKKwkJfQorCX0KKworCXJldHVybiAyOworfQpkaWZmIC0tZ2l0IGEvZGVsdGEtaXNsYW5kcy5oIGIvZGVsdGEtaXNsYW5kcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMGY5NTIKLS0tIC9kZXYvbnVsbAorKysgYi9kZWx0YS1pc2xhbmRzLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBERUxUQV9JU0xBTkRTX0gKKyNkZWZpbmUgREVMVEFfSVNMQU5EU19ICisKK3N0cnVjdCBjb21taXQ7CitzdHJ1Y3Qgb2JqZWN0X2lkOworc3RydWN0IHBhY2tpbmdfZGF0YTsKK3N0cnVjdCByZXBvc2l0b3J5OworCitpbnQgaXNsYW5kX2RlbHRhX2NtcChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICphLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpiKTsKK2ludCBpbl9zYW1lX2lzbGFuZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKik7Cit2b2lkIHJlc29sdmVfdHJlZV9pc2xhbmRzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICBpbnQgcHJvZ3Jlc3MsCisJCQkgIHN0cnVjdCBwYWNraW5nX2RhdGEgKnRvX3BhY2spOwordm9pZCBsb2FkX2RlbHRhX2lzbGFuZHMoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGludCBwcm9ncmVzcyk7Cit2b2lkIHByb3BhZ2F0ZV9pc2xhbmRfbWFya3Moc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKK2ludCBjb21wdXRlX3BhY2tfbGF5ZXJzKHN0cnVjdCBwYWNraW5nX2RhdGEgKnRvX3BhY2spOworCisjZW5kaWYgLyogREVMVEFfSVNMQU5EU19IICovCmRpZmYgLS1naXQgYS9kZWx0YS5oIGIvZGVsdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGY1ZmUxCi0tLSAvZGV2L251bGwKKysrIGIvZGVsdGEuaApAQCAtMCwwICsxLDEwNCBAQAorI2lmbmRlZiBERUxUQV9ICisjZGVmaW5lIERFTFRBX0gKKworLyogb3BhcXVlIG9iamVjdCBmb3IgZGVsdGEgaW5kZXggKi8KK3N0cnVjdCBkZWx0YV9pbmRleDsKKworLyoKKyAqIGNyZWF0ZV9kZWx0YV9pbmRleDogY29tcHV0ZSBpbmRleCBkYXRhIGZyb20gZ2l2ZW4gYnVmZmVyCisgKgorICogVGhpcyByZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cnVjdCBkZWx0YV9pbmRleCB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8KKyAqIHN1YnNlcXVlbnQgY3JlYXRlX2RlbHRhKCkgY2FsbHMsIG9yIHRvIGZyZWVfZGVsdGFfaW5kZXgoKS4gIEEgTlVMTCBwb2ludGVyCisgKiBpcyByZXR1cm5lZCBvbiBmYWlsdXJlLiAgVGhlIGdpdmVuIGJ1ZmZlciBtdXN0IG5vdCBiZSBmcmVlZCBvciBhbHRlcmVkCisgKiBiZWZvcmUgZnJlZV9kZWx0YV9pbmRleCgpIGlzIGNhbGxlZC4gIFRoZSByZXR1cm5lZCBwb2ludGVyIG11c3QgYmUgZnJlZWQKKyAqIHVzaW5nIGZyZWVfZGVsdGFfaW5kZXgoKS4KKyAqLworc3RydWN0IGRlbHRhX2luZGV4ICoKK2NyZWF0ZV9kZWx0YV9pbmRleChjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgYnVmc2l6ZSk7CisKKy8qCisgKiBmcmVlX2RlbHRhX2luZGV4OiBmcmVlIHRoZSBpbmRleCBjcmVhdGVkIGJ5IGNyZWF0ZV9kZWx0YV9pbmRleCgpCisgKgorICogR2l2ZW4gcG9pbnRlciBtdXN0IGJlIHdoYXQgY3JlYXRlX2RlbHRhX2luZGV4KCkgcmV0dXJuZWQsIG9yIE5VTEwuCisgKi8KK3ZvaWQgZnJlZV9kZWx0YV9pbmRleChzdHJ1Y3QgZGVsdGFfaW5kZXggKmluZGV4KTsKKworLyoKKyAqIHNpemVvZl9kZWx0YV9pbmRleDogcmV0dXJucyBtZW1vcnkgdXNhZ2Ugb2YgZGVsdGEgaW5kZXgKKyAqCisgKiBHaXZlbiBwb2ludGVyIG11c3QgYmUgd2hhdCBjcmVhdGVfZGVsdGFfaW5kZXgoKSByZXR1cm5lZCwgb3IgTlVMTC4KKyAqLwordW5zaWduZWQgbG9uZyBzaXplb2ZfZGVsdGFfaW5kZXgoc3RydWN0IGRlbHRhX2luZGV4ICppbmRleCk7CisKKy8qCisgKiBjcmVhdGVfZGVsdGE6IGNyZWF0ZSBhIGRlbHRhIGZyb20gZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiBidWZmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgYnVmZmVycyB1c2luZworICogdGhlIHNhbWUgZGVsdGFfaW5kZXggcG9pbnRlci4gIElmIG1heF9kZWx0YV9zaXplIGlzIG5vbi16ZXJvIGFuZCB0aGUKKyAqIHJlc3VsdGluZyBkZWx0YSBpcyB0byBiZSBsYXJnZXIgdGhhbiBtYXhfZGVsdGFfc2l6ZSB0aGVuIE5VTEwgaXMgcmV0dXJuZWQuCisgKiBPbiBzdWNjZXNzLCBhIG5vbi1OVUxMIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB3aXRoIHRoZSBkZWx0YSBkYXRhIGlzCisgKiByZXR1cm5lZCBhbmQgKmRlbHRhX3NpemUgaXMgdXBkYXRlZCB3aXRoIGl0cyBzaXplLiAgVGhlIHJldHVybmVkIGJ1ZmZlcgorICogbXVzdCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLgorICovCit2b2lkICoKK2NyZWF0ZV9kZWx0YShjb25zdCBzdHJ1Y3QgZGVsdGFfaW5kZXggKmluZGV4LAorCSAgICAgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGJ1ZnNpemUsCisJICAgICB1bnNpZ25lZCBsb25nICpkZWx0YV9zaXplLCB1bnNpZ25lZCBsb25nIG1heF9kZWx0YV9zaXplKTsKKworLyoKKyAqIGRpZmZfZGVsdGE6IGNyZWF0ZSBhIGRlbHRhIGZyb20gc291cmNlIGJ1ZmZlciB0byB0YXJnZXQgYnVmZmVyCisgKgorICogSWYgbWF4X2RlbHRhX3NpemUgaXMgbm9uLXplcm8gYW5kIHRoZSByZXN1bHRpbmcgZGVsdGEgaXMgdG8gYmUgbGFyZ2VyCisgKiB0aGFuIG1heF9kZWx0YV9zaXplIHRoZW4gTlVMTCBpcyByZXR1cm5lZC4gIE9uIHN1Y2Nlc3MsIGEgbm9uLU5VTEwKKyAqIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB3aXRoIHRoZSBkZWx0YSBkYXRhIGlzIHJldHVybmVkIGFuZCAqZGVsdGFfc2l6ZSBpcworICogdXBkYXRlZCB3aXRoIGl0cyBzaXplLiAgVGhlIHJldHVybmVkIGJ1ZmZlciBtdXN0IGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitkaWZmX2RlbHRhKGNvbnN0IHZvaWQgKnNyY19idWYsIHVuc2lnbmVkIGxvbmcgc3JjX2J1ZnNpemUsCisJICAgY29uc3Qgdm9pZCAqdHJnX2J1ZiwgdW5zaWduZWQgbG9uZyB0cmdfYnVmc2l6ZSwKKwkgICB1bnNpZ25lZCBsb25nICpkZWx0YV9zaXplLCB1bnNpZ25lZCBsb25nIG1heF9kZWx0YV9zaXplKQoreworCXN0cnVjdCBkZWx0YV9pbmRleCAqaW5kZXggPSBjcmVhdGVfZGVsdGFfaW5kZXgoc3JjX2J1Ziwgc3JjX2J1ZnNpemUpOworCWlmIChpbmRleCkgeworCQl2b2lkICpkZWx0YSA9IGNyZWF0ZV9kZWx0YShpbmRleCwgdHJnX2J1ZiwgdHJnX2J1ZnNpemUsCisJCQkJCSAgIGRlbHRhX3NpemUsIG1heF9kZWx0YV9zaXplKTsKKwkJZnJlZV9kZWx0YV9pbmRleChpbmRleCk7CisJCXJldHVybiBkZWx0YTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBwYXRjaF9kZWx0YTogcmVjcmVhdGUgdGFyZ2V0IGJ1ZmZlciBnaXZlbiBzb3VyY2UgYnVmZmVyIGFuZCBkZWx0YSBkYXRhCisgKgorICogT24gc3VjY2VzcywgYSBub24tTlVMTCBwb2ludGVyIHRvIHRoZSB0YXJnZXQgYnVmZmVyIGlzIHJldHVybmVkIGFuZAorICogKnRyZ19idWZzaXplIGlzIHVwZGF0ZWQgd2l0aCBpdHMgc2l6ZS4gIE9uIGZhaWx1cmUgYSBOVUxMIHBvaW50ZXIgaXMKKyAqIHJldHVybmVkLiAgVGhlIHJldHVybmVkIGJ1ZmZlciBtdXN0IGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCisgKi8KK3ZvaWQgKnBhdGNoX2RlbHRhKGNvbnN0IHZvaWQgKnNyY19idWYsIHVuc2lnbmVkIGxvbmcgc3JjX3NpemUsCisJCSAgY29uc3Qgdm9pZCAqZGVsdGFfYnVmLCB1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUsCisJCSAgdW5zaWduZWQgbG9uZyAqZHN0X3NpemUpOworCisvKiB0aGUgc21hbGxlc3QgcG9zc2libGUgZGVsdGEgc2l6ZSBpcyA0IGJ5dGVzICovCisjZGVmaW5lIERFTFRBX1NJWkVfTUlOCTQKKworLyoKKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgdHdpY2Ugb24gdGhlIGRlbHRhIGRhdGEgYnVmZmVyLCBmaXJzdCB0byBnZXQgdGhlCisgKiBleHBlY3RlZCBzb3VyY2UgYnVmZmVyIHNpemUsIGFuZCBhZ2FpbiB0byBnZXQgdGhlIHRhcmdldCBidWZmZXIgc2l6ZS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9kZWx0YV9oZHJfc2l6ZShjb25zdCB1bnNpZ25lZCBjaGFyICoqZGF0YXAsCisJCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0b3ApCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9ICpkYXRhcDsKKwl1bnNpZ25lZCBsb25nIGNtZCwgc2l6ZSA9IDA7CisJaW50IGkgPSAwOworCWRvIHsKKwkJY21kID0gKmRhdGErKzsKKwkJc2l6ZSB8PSAoY21kICYgMHg3ZikgPDwgaTsKKwkJaSArPSA3OworCX0gd2hpbGUgKGNtZCAmIDB4ODAgJiYgZGF0YSA8IHRvcCk7CisJKmRhdGFwID0gZGF0YTsKKwlyZXR1cm4gc2l6ZTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kZXRlY3QtY29tcGlsZXIgYi9kZXRlY3QtY29tcGlsZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzBiNzU0NAotLS0gL2Rldi9udWxsCisrKyBiL2RldGVjdC1jb21waWxlcgpAQCAtMCwwICsxLDUzIEBACisjIS9iaW4vc2gKKyMKKyMgUHJvYmUgdGhlIGNvbXBpbGVyIGZvciB2aW50YWdlLCB2ZXJzaW9uLCBldGMuIFRoaXMgaXMgdXNlZCBmb3Igc2V0dGluZworIyBvcHRpb25hbCBtYWtlIGtub2JzIHVuZGVyIHRoZSBERVZFTE9QRVIga25vYi4KKworQ0M9IiQqIgorCisjIHdlIGdldCBzb21ldGhpbmcgbGlrZSAodGhpcyBpcyBhdCBsZWFzdCB0cnVlIGZvciBnY2MgYW5kIGNsYW5nKQorIworIyBGcmVlQlNEIGNsYW5nIHZlcnNpb24gMy40LjEgKHRhZ3MvUkVMRUFTRS4uLikKK2dldF92ZXJzaW9uX2xpbmUoKSB7CisJJENDIC12IDI+JjEgfCBncmVwICcgdmVyc2lvbiAnCit9CisKK2dldF9mYW1pbHkoKSB7CisJZ2V0X3ZlcnNpb25fbGluZSB8IHNlZCAncy9eXCguKlwpIHZlcnNpb24gWzAtOV1bXiBdKiAuKi9cMS8nCit9CisKK2dldF92ZXJzaW9uKCkgeworCWdldF92ZXJzaW9uX2xpbmUgfCBzZWQgJ3MvXi4qIHZlcnNpb24gXChbMC05XVteIF0qXCkgLiovXDEvJworfQorCitwcmludF9mbGFncygpIHsKKwlmYW1pbHk9JDEKKwl2ZXJzaW9uPSQoZ2V0X3ZlcnNpb24gfCBjdXQgLWYgMSAtZCAuKQorCisJIyBQcmludCBhIGZlYXR1cmUgZmxhZyBub3Qgb25seSBmb3IgdGhlIGN1cnJlbnQgdmVyc2lvbiwgYnV0IGFsc28KKwkjIGZvciBhbnkgcHJpb3IgdmVyc2lvbnMgd2UgZW5jb21wYXNzLiBUaGlzIGF2b2lkcyBuZWVkaW5nIHRvIGRvCisJIyBudW1lcmljIGNvbXBhcmlzb25zIGluIG1ha2UsIHdoaWNoIGFyZSBhd2t3YXJkLgorCXdoaWxlIHRlc3QgIiR2ZXJzaW9uIiAtZ3QgMAorCWRvCisJCWVjaG8gJGZhbWlseSR2ZXJzaW9uCisJCXZlcnNpb249JCgodmVyc2lvbiAtIDEpKQorCWRvbmUKK30KKworY2FzZSAiJChnZXRfZmFtaWx5KSIgaW4KK2djYykKKwlwcmludF9mbGFncyBnY2MKKwk7OworY2xhbmcpCisJcHJpbnRfZmxhZ3MgY2xhbmcKKwk7OworIkZyZWVCU0QgY2xhbmciKQorCXByaW50X2ZsYWdzIGNsYW5nCisJOzsKKyJBcHBsZSBMTFZNIikKKwlwcmludF9mbGFncyBjbGFuZworCTs7CisqKQorCTogdW5rbm93biBjb21waWxlciBmYW1pbHkKKwk7OworZXNhYwpkaWZmIC0tZ2l0IGEvZGlmZi1kZWx0YS5jIGIvZGlmZi1kZWx0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZmVhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9kaWZmLWRlbHRhLmMKQEAgLTAsMCArMSw0OTYgQEAKKy8qCisgKiBkaWZmLWRlbHRhLmM6IGdlbmVyYXRlIGEgZGVsdGEgYmV0d2VlbiB0d28gYnVmZmVycworICoKKyAqIFRoaXMgY29kZSB3YXMgZ3JlYXRseSBpbnNwaXJlZCBieSBwYXJ0cyBvZiBMaWJYRGlmZiBmcm9tIERhdmlkZSBMaWJlbnppCisgKiBodHRwOi8vd3d3LnhtYWlsc2VydmVyLm9yZy94ZGlmZi1saWIuaHRtbAorICoKKyAqIFJld3JpdHRlbiBmb3IgR0lUIGJ5IE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+LCAoQykgMjAwNS0yMDA3CisgKgorICogVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKworLyogbWF4aW11bSBoYXNoIGVudHJ5IGxpc3QgZm9yIHRoZSBzYW1lIGhhc2ggYnVja2V0ICovCisjZGVmaW5lIEhBU0hfTElNSVQgNjQKKworI2RlZmluZSBSQUJJTl9TSElGVCAyMworI2RlZmluZSBSQUJJTl9XSU5ET1cgMTYKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWzI1Nl0gPSB7CisJMHgwMDAwMDAwMCwgMHhhYjU5YjRkMSwgMHg1NmIzNjlhMiwgMHhmZGVhZGQ3MywgMHgwNjNmNjc5NSwgMHhhZDY2ZDM0NCwKKwkweDUwOGMwZTM3LCAweGZiZDViYWU2LCAweDBjN2VjZjJhLCAweGE3Mjc3YmZiLCAweDVhY2RhNjg4LCAweGYxOTQxMjU5LAorCTB4MGE0MWE4YmYsIDB4YTExODFjNmUsIDB4NWNmMmMxMWQsIDB4ZjdhYjc1Y2MsIDB4MThmZDllNTQsIDB4YjNhNDJhODUsCisJMHg0ZTRlZjdmNiwgMHhlNTE3NDMyNywgMHgxZWMyZjljMSwgMHhiNTliNGQxMCwgMHg0ODcxOTA2MywgMHhlMzI4MjRiMiwKKwkweDE0ODM1MTdlLCAweGJmZGFlNWFmLCAweDQyMzAzOGRjLCAweGU5Njk4YzBkLCAweDEyYmMzNmViLCAweGI5ZTU4MjNhLAorCTB4NDQwZjVmNDksIDB4ZWY1NmViOTgsIDB4MzFmYjNjYTgsIDB4OWFhMjg4NzksIDB4Njc0ODU1MGEsIDB4Y2MxMWUxZGIsCisJMHgzN2M0NWIzZCwgMHg5YzlkZWZlYywgMHg2MTc3MzI5ZiwgMHhjYTJlODY0ZSwgMHgzZDg1ZjM4MiwgMHg5NmRjNDc1MywKKwkweDZiMzY5YTIwLCAweGMwNmYyZWYxLCAweDNiYmE5NDE3LCAweDkwZTMyMGM2LCAweDZkMDlmZGI1LCAweGM2NTA0OTY0LAorCTB4MjkwNmEyZmMsIDB4ODI1ZjE2MmQsIDB4N2ZiNWNiNWUsIDB4ZDRlYzdmOGYsIDB4MmYzOWM1NjksIDB4ODQ2MDcxYjgsCisJMHg3OThhYWNjYiwgMHhkMmQzMTgxYSwgMHgyNTc4NmRkNiwgMHg4ZTIxZDkwNywgMHg3M2NiMDQ3NCwgMHhkODkyYjBhNSwKKwkweDIzNDcwYTQzLCAweDg4MWViZTkyLCAweDc1ZjQ2M2UxLCAweGRlYWRkNzMwLCAweDYzZjY3OTUwLCAweGM4YWZjZDgxLAorCTB4MzU0NTEwZjIsIDB4OWUxY2E0MjMsIDB4NjVjOTFlYzUsIDB4Y2U5MGFhMTQsIDB4MzM3YTc3NjcsIDB4OTgyM2MzYjYsCisJMHg2Zjg4YjY3YSwgMHhjNGQxMDJhYiwgMHgzOTNiZGZkOCwgMHg5MjYyNmIwOSwgMHg2OWI3ZDFlZiwgMHhjMmVlNjUzZSwKKwkweDNmMDRiODRkLCAweDk0NWQwYzljLCAweDdiMGJlNzA0LCAweGQwNTI1M2Q1LCAweDJkYjg4ZWE2LCAweDg2ZTEzYTc3LAorCTB4N2QzNDgwOTEsIDB4ZDY2ZDM0NDAsIDB4MmI4N2U5MzMsIDB4ODBkZTVkZTIsIDB4Nzc3NTI4MmUsIDB4ZGMyYzljZmYsCisJMHgyMWM2NDE4YywgMHg4YTlmZjU1ZCwgMHg3MTRhNGZiYiwgMHhkYTEzZmI2YSwgMHgyN2Y5MjYxOSwgMHg4Y2EwOTJjOCwKKwkweDUyMGQ0NWY4LCAweGY5NTRmMTI5LCAweDA0YmUyYzVhLCAweGFmZTc5ODhiLCAweDU0MzIyMjZkLCAweGZmNmI5NmJjLAorCTB4MDI4MTRiY2YsIDB4YTlkOGZmMWUsIDB4NWU3MzhhZDIsIDB4ZjUyYTNlMDMsIDB4MDhjMGUzNzAsIDB4YTM5OTU3YTEsCisJMHg1ODRjZWQ0NywgMHhmMzE1NTk5NiwgMHgwZWZmODRlNSwgMHhhNWE2MzAzNCwgMHg0YWYwZGJhYywgMHhlMWE5NmY3ZCwKKwkweDFjNDNiMjBlLCAweGI3MWEwNmRmLCAweDRjY2ZiYzM5LCAweGU3OTYwOGU4LCAweDFhN2NkNTliLCAweGIxMjU2MTRhLAorCTB4NDY4ZTE0ODYsIDB4ZWRkN2EwNTcsIDB4MTAzZDdkMjQsIDB4YmI2NGM5ZjUsIDB4NDBiMTczMTMsIDB4ZWJlOGM3YzIsCisJMHgxNjAyMWFiMSwgMHhiZDViYWU2MCwgMHg2Y2I1NDY3MSwgMHhjN2VjZjJhMCwgMHgzYTA2MmZkMywgMHg5MTVmOWIwMiwKKwkweDZhOGEyMWU0LCAweGMxZDM5NTM1LCAweDNjMzk0ODQ2LCAweDk3NjBmYzk3LCAweDYwY2I4OTViLCAweGNiOTIzZDhhLAorCTB4MzY3OGUwZjksIDB4OWQyMTU0MjgsIDB4NjZmNGVlY2UsIDB4Y2RhZDVhMWYsIDB4MzA0Nzg3NmMsIDB4OWIxZTMzYmQsCisJMHg3NDQ4ZDgyNSwgMHhkZjExNmNmNCwgMHgyMmZiYjE4NywgMHg4OWEyMDU1NiwgMHg3Mjc3YmZiMCwgMHhkOTJlMGI2MSwKKwkweDI0YzRkNjEyLCAweDhmOWQ2MmMzLCAweDc4MzYxNzBmLCAweGQzNmZhM2RlLCAweDJlODU3ZWFkLCAweDg1ZGNjYTdjLAorCTB4N2UwOTcwOWEsIDB4ZDU1MGM0NGIsIDB4MjhiYTE5MzgsIDB4ODNlM2FkZTksIDB4NWQ0ZTdhZDksIDB4ZjYxN2NlMDgsCisJMHgwYmZkMTM3YiwgMHhhMGE0YTdhYSwgMHg1YjcxMWQ0YywgMHhmMDI4YTk5ZCwgMHgwZGMyNzRlZSwgMHhhNjliYzAzZiwKKwkweDUxMzBiNWYzLCAweGZhNjkwMTIyLCAweDA3ODNkYzUxLCAweGFjZGE2ODgwLCAweDU3MGZkMjY2LCAweGZjNTY2NmI3LAorCTB4MDFiY2JiYzQsIDB4YWFlNTBmMTUsIDB4NDViM2U0OGQsIDB4ZWVlYTUwNWMsIDB4MTMwMDhkMmYsIDB4Yjg1OTM5ZmUsCisJMHg0MzhjODMxOCwgMHhlOGQ1MzdjOSwgMHgxNTNmZWFiYSwgMHhiZTY2NWU2YiwgMHg0OWNkMmJhNywgMHhlMjk0OWY3NiwKKwkweDFmN2U0MjA1LCAweGI0MjdmNmQ0LCAweDRmZjI0YzMyLCAweGU0YWJmOGUzLCAweDE5NDEyNTkwLCAweGIyMTg5MTQxLAorCTB4MGY0MzNmMjEsIDB4YTQxYThiZjAsIDB4NTlmMDU2ODMsIDB4ZjJhOWUyNTIsIDB4MDk3YzU4YjQsIDB4YTIyNWVjNjUsCisJMHg1ZmNmMzExNiwgMHhmNDk2ODVjNywgMHgwMzNkZjAwYiwgMHhhODY0NDRkYSwgMHg1NThlOTlhOSwgMHhmZWQ3MmQ3OCwKKwkweDA1MDI5NzllLCAweGFlNWIyMzRmLCAweDUzYjFmZTNjLCAweGY4ZTg0YWVkLCAweDE3YmVhMTc1LCAweGJjZTcxNWE0LAorCTB4NDEwZGM4ZDcsIDB4ZWE1NDdjMDYsIDB4MTE4MWM2ZTAsIDB4YmFkODcyMzEsIDB4NDczMmFmNDIsIDB4ZWM2YjFiOTMsCisJMHgxYmMwNmU1ZiwgMHhiMDk5ZGE4ZSwgMHg0ZDczMDdmZCwgMHhlNjJhYjMyYywgMHgxZGZmMDljYSwgMHhiNmE2YmQxYiwKKwkweDRiNGM2MDY4LCAweGUwMTVkNGI5LCAweDNlYjgwMzg5LCAweDk1ZTFiNzU4LCAweDY4MGI2YTJiLCAweGMzNTJkZWZhLAorCTB4Mzg4NzY0MWMsIDB4OTNkZWQwY2QsIDB4NmUzNDBkYmUsIDB4YzU2ZGI5NmYsIDB4MzJjNmNjYTMsIDB4OTk5Zjc4NzIsCisJMHg2NDc1YTUwMSwgMHhjZjJjMTFkMCwgMHgzNGY5YWIzNiwgMHg5ZmEwMWZlNywgMHg2MjRhYzI5NCwgMHhjOTEzNzY0NSwKKwkweDI2NDU5ZGRkLCAweDhkMWMyOTBjLCAweDcwZjZmNDdmLCAweGRiYWY0MGFlLCAweDIwN2FmYTQ4LCAweDhiMjM0ZTk5LAorCTB4NzZjOTkzZWEsIDB4ZGQ5MDI3M2IsIDB4MmEzYjUyZjcsIDB4ODE2MmU2MjYsIDB4N2M4ODNiNTUsIDB4ZDdkMThmODQsCisJMHgyYzA0MzU2MiwgMHg4NzVkODFiMywgMHg3YWI3NWNjMCwgMHhkMWVlZTgxMQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBVWzI1Nl0gPSB7CisJMHgwMDAwMDAwMCwgMHg3ZWI1MjAwZCwgMHg1NjMzZjRjYiwgMHgyODg2ZDRjNiwgMHgwNzNlNWQ0NywgMHg3OThiN2Q0YSwKKwkweDUxMGRhOThjLCAweDJmYjg4OTgxLCAweDBlN2NiYThlLCAweDcwYzk5YTgzLCAweDU4NGY0ZTQ1LCAweDI2ZmE2ZTQ4LAorCTB4MDk0MmU3YzksIDB4NzdmN2M3YzQsIDB4NWY3MTEzMDIsIDB4MjFjNDMzMGYsIDB4MWNmOTc1MWMsIDB4NjI0YzU1MTEsCisJMHg0YWNhODFkNywgMHgzNDdmYTFkYSwgMHgxYmM3Mjg1YiwgMHg2NTcyMDg1NiwgMHg0ZGY0ZGM5MCwgMHgzMzQxZmM5ZCwKKwkweDEyODVjZjkyLCAweDZjMzBlZjlmLCAweDQ0YjYzYjU5LCAweDNhMDMxYjU0LCAweDE1YmI5MmQ1LCAweDZiMGViMmQ4LAorCTB4NDM4ODY2MWUsIDB4M2QzZDQ2MTMsIDB4MzlmMmVhMzgsIDB4NDc0N2NhMzUsIDB4NmZjMTFlZjMsIDB4MTE3NDNlZmUsCisJMHgzZWNjYjc3ZiwgMHg0MDc5OTc3MiwgMHg2OGZmNDNiNCwgMHgxNjRhNjNiOSwgMHgzNzhlNTBiNiwgMHg0OTNiNzBiYiwKKwkweDYxYmRhNDdkLCAweDFmMDg4NDcwLCAweDMwYjAwZGYxLCAweDRlMDUyZGZjLCAweDY2ODNmOTNhLCAweDE4MzZkOTM3LAorCTB4MjUwYjlmMjQsIDB4NWJiZWJmMjksIDB4NzMzODZiZWYsIDB4MGQ4ZDRiZTIsIDB4MjIzNWMyNjMsIDB4NWM4MGUyNmUsCisJMHg3NDA2MzZhOCwgMHgwYWIzMTZhNSwgMHgyYjc3MjVhYSwgMHg1NWMyMDVhNywgMHg3ZDQ0ZDE2MSwgMHgwM2YxZjE2YywKKwkweDJjNDk3OGVkLCAweDUyZmM1OGUwLCAweDdhN2E4YzI2LCAweDA0Y2ZhYzJiLCAweDczZTVkNDcwLCAweDBkNTBmNDdkLAorCTB4MjVkNjIwYmIsIDB4NWI2MzAwYjYsIDB4NzRkYjg5MzcsIDB4MGE2ZWE5M2EsIDB4MjJlODdkZmMsIDB4NWM1ZDVkZjEsCisJMHg3ZDk5NmVmZSwgMHgwMzJjNGVmMywgMHgyYmFhOWEzNSwgMHg1NTFmYmEzOCwgMHg3YWE3MzNiOSwgMHgwNDEyMTNiNCwKKwkweDJjOTRjNzcyLCAweDUyMjFlNzdmLCAweDZmMWNhMTZjLCAweDExYTk4MTYxLCAweDM5MmY1NWE3LCAweDQ3OWE3NWFhLAorCTB4NjgyMmZjMmIsIDB4MTY5N2RjMjYsIDB4M2UxMTA4ZTAsIDB4NDBhNDI4ZWQsIDB4NjE2MDFiZTIsIDB4MWZkNTNiZWYsCisJMHgzNzUzZWYyOSwgMHg0OWU2Y2YyNCwgMHg2NjVlNDZhNSwgMHgxOGViNjZhOCwgMHgzMDZkYjI2ZSwgMHg0ZWQ4OTI2MywKKwkweDRhMTczZTQ4LCAweDM0YTIxZTQ1LCAweDFjMjRjYTgzLCAweDYyOTFlYThlLCAweDRkMjk2MzBmLCAweDMzOWM0MzAyLAorCTB4MWIxYTk3YzQsIDB4NjVhZmI3YzksIDB4NDQ2Yjg0YzYsIDB4M2FkZWE0Y2IsIDB4MTI1ODcwMGQsIDB4NmNlZDUwMDAsCisJMHg0MzU1ZDk4MSwgMHgzZGUwZjk4YywgMHgxNTY2MmQ0YSwgMHg2YmQzMGQ0NywgMHg1NmVlNGI1NCwgMHgyODViNmI1OSwKKwkweDAwZGRiZjlmLCAweDdlNjg5ZjkyLCAweDUxZDAxNjEzLCAweDJmNjUzNjFlLCAweDA3ZTNlMmQ4LCAweDc5NTZjMmQ1LAorCTB4NTg5MmYxZGEsIDB4MjYyN2QxZDcsIDB4MGVhMTA1MTEsIDB4NzAxNDI1MWMsIDB4NWZhY2FjOWQsIDB4MjExOThjOTAsCisJMHgwOTlmNTg1NiwgMHg3NzJhNzg1YiwgMHg0YzkyMWMzMSwgMHgzMjI3M2MzYywgMHgxYWExZThmYSwgMHg2NDE0YzhmNywKKwkweDRiYWM0MTc2LCAweDM1MTk2MTdiLCAweDFkOWZiNWJkLCAweDYzMmE5NWIwLCAweDQyZWVhNmJmLCAweDNjNWI4NmIyLAorCTB4MTRkZDUyNzQsIDB4NmE2ODcyNzksIDB4NDVkMGZiZjgsIDB4M2I2NWRiZjUsIDB4MTNlMzBmMzMsIDB4NmQ1NjJmM2UsCisJMHg1MDZiNjkyZCwgMHgyZWRlNDkyMCwgMHgwNjU4OWRlNiwgMHg3OGVkYmRlYiwgMHg1NzU1MzQ2YSwgMHgyOWUwMTQ2NywKKwkweDAxNjZjMGExLCAweDdmZDNlMGFjLCAweDVlMTdkM2EzLCAweDIwYTJmM2FlLCAweDA4MjQyNzY4LCAweDc2OTEwNzY1LAorCTB4NTkyOThlZTQsIDB4Mjc5Y2FlZTksIDB4MGYxYTdhMmYsIDB4NzFhZjVhMjIsIDB4NzU2MGY2MDksIDB4MGJkNWQ2MDQsCisJMHgyMzUzMDJjMiwgMHg1ZGU2MjJjZiwgMHg3MjVlYWI0ZSwgMHgwY2ViOGI0MywgMHgyNDZkNWY4NSwgMHg1YWQ4N2Y4OCwKKwkweDdiMWM0Yzg3LCAweDA1YTk2YzhhLCAweDJkMmZiODRjLCAweDUzOWE5ODQxLCAweDdjMjIxMWMwLCAweDAyOTczMWNkLAorCTB4MmExMWU1MGIsIDB4NTRhNGM1MDYsIDB4Njk5OTgzMTUsIDB4MTcyY2EzMTgsIDB4M2ZhYTc3ZGUsIDB4NDExZjU3ZDMsCisJMHg2ZWE3ZGU1MiwgMHgxMDEyZmU1ZiwgMHgzODk0MmE5OSwgMHg0NjIxMGE5NCwgMHg2N2U1Mzk5YiwgMHgxOTUwMTk5NiwKKwkweDMxZDZjZDUwLCAweDRmNjNlZDVkLCAweDYwZGI2NGRjLCAweDFlNmU0NGQxLCAweDM2ZTg5MDE3LCAweDQ4NWRiMDFhLAorCTB4M2Y3N2M4NDEsIDB4NDFjMmU4NGMsIDB4Njk0NDNjOGEsIDB4MTdmMTFjODcsIDB4Mzg0OTk1MDYsIDB4NDZmY2I1MGIsCisJMHg2ZTdhNjFjZCwgMHgxMGNmNDFjMCwgMHgzMTBiNzJjZiwgMHg0ZmJlNTJjMiwgMHg2NzM4ODYwNCwgMHgxOThkYTYwOSwKKwkweDM2MzUyZjg4LCAweDQ4ODAwZjg1LCAweDYwMDZkYjQzLCAweDFlYjNmYjRlLCAweDIzOGViZDVkLCAweDVkM2I5ZDUwLAorCTB4NzViZDQ5OTYsIDB4MGIwODY5OWIsIDB4MjRiMGUwMWEsIDB4NWEwNWMwMTcsIDB4NzI4MzE0ZDEsIDB4MGMzNjM0ZGMsCisJMHgyZGYyMDdkMywgMHg1MzQ3MjdkZSwgMHg3YmMxZjMxOCwgMHgwNTc0ZDMxNSwgMHgyYWNjNWE5NCwgMHg1NDc5N2E5OSwKKwkweDdjZmZhZTVmLCAweDAyNGE4ZTUyLCAweDA2ODUyMjc5LCAweDc4MzAwMjc0LCAweDUwYjZkNmIyLCAweDJlMDNmNmJmLAorCTB4MDFiYjdmM2UsIDB4N2YwZTVmMzMsIDB4NTc4ODhiZjUsIDB4MjkzZGFiZjgsIDB4MDhmOTk4ZjcsIDB4NzY0Y2I4ZmEsCisJMHg1ZWNhNmMzYywgMHgyMDdmNGMzMSwgMHgwZmM3YzViMCwgMHg3MTcyZTViZCwgMHg1OWY0MzE3YiwgMHgyNzQxMTE3NiwKKwkweDFhN2M1NzY1LCAweDY0Yzk3NzY4LCAweDRjNGZhM2FlLCAweDMyZmE4M2EzLCAweDFkNDIwYTIyLCAweDYzZjcyYTJmLAorCTB4NGI3MWZlZTksIDB4MzVjNGRlZTQsIDB4MTQwMGVkZWIsIDB4NmFiNWNkZTYsIDB4NDIzMzE5MjAsIDB4M2M4NjM5MmQsCisJMHgxMzNlYjBhYywgMHg2ZDhiOTBhMSwgMHg0NTBkNDQ2NywgMHgzYmI4NjQ2YQorfTsKKworc3RydWN0IGluZGV4X2VudHJ5IHsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwdHI7CisJdW5zaWduZWQgaW50IHZhbDsKK307CisKK3N0cnVjdCB1bnBhY2tlZF9pbmRleF9lbnRyeSB7CisJc3RydWN0IGluZGV4X2VudHJ5IGVudHJ5OworCXN0cnVjdCB1bnBhY2tlZF9pbmRleF9lbnRyeSAqbmV4dDsKK307CisKK3N0cnVjdCBkZWx0YV9pbmRleCB7CisJdW5zaWduZWQgbG9uZyBtZW1zaXplOworCWNvbnN0IHZvaWQgKnNyY19idWY7CisJdW5zaWduZWQgbG9uZyBzcmNfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaGFzaF9tYXNrOworCXN0cnVjdCBpbmRleF9lbnRyeSAqaGFzaFtGTEVYX0FSUkFZXTsKK307CisKK3N0cnVjdCBkZWx0YV9pbmRleCAqIGNyZWF0ZV9kZWx0YV9pbmRleChjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgYnVmc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgaHNpemUsIGhtYXNrLCBlbnRyaWVzLCBwcmV2X3ZhbCwgKmhhc2hfY291bnQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgKmJ1ZmZlciA9IGJ1ZjsKKwlzdHJ1Y3QgZGVsdGFfaW5kZXggKmluZGV4OworCXN0cnVjdCB1bnBhY2tlZF9pbmRleF9lbnRyeSAqZW50cnksICoqaGFzaDsKKwlzdHJ1Y3QgaW5kZXhfZW50cnkgKnBhY2tlZF9lbnRyeSwgKipwYWNrZWRfaGFzaDsKKwl2b2lkICptZW07CisJdW5zaWduZWQgbG9uZyBtZW1zaXplOworCisJaWYgKCFidWYgfHwgIWJ1ZnNpemUpCisJCXJldHVybiBOVUxMOworCisJLyogRGV0ZXJtaW5lIGluZGV4IGhhc2ggc2l6ZS4gIE5vdGUgdGhhdCBpbmRleGluZyBza2lwcyB0aGUKKwkgICBmaXJzdCBieXRlIHRvIGFsbG93IGZvciBvcHRpbWl6aW5nIHRoZSBSYWJpbidzIHBvbHlub21pYWwKKwkgICBpbml0aWFsaXphdGlvbiBpbiBjcmVhdGVfZGVsdGEoKS4gKi8KKwllbnRyaWVzID0gKGJ1ZnNpemUgLSAxKSAvIFJBQklOX1dJTkRPVzsKKwlpZiAoYnVmc2l6ZSA+PSAweGZmZmZmZmZmVUwpIHsKKwkJLyoKKwkJICogQ3VycmVudCBkZWx0YSBmb3JtYXQgY2FuJ3QgZW5jb2RlIG9mZnNldHMgaW50bworCQkgKiByZWZlcmVuY2UgYnVmZmVyIHdpdGggbW9yZSB0aGFuIDMyIGJpdHMuCisJCSAqLworCQllbnRyaWVzID0gMHhmZmZmZmZmZVUgLyBSQUJJTl9XSU5ET1c7CisJfQorCWhzaXplID0gZW50cmllcyAvIDQ7CisJZm9yIChpID0gNDsgKDF1IDw8IGkpIDwgaHNpemU7IGkrKyk7CisJaHNpemUgPSAxIDw8IGk7CisJaG1hc2sgPSBoc2l6ZSAtIDE7CisKKwkvKiBhbGxvY2F0ZSBsb29rdXAgaW5kZXggKi8KKwltZW1zaXplID0gc2l6ZW9mKCpoYXNoKSAqIGhzaXplICsKKwkJICBzaXplb2YoKmVudHJ5KSAqIGVudHJpZXM7CisJbWVtID0gbWFsbG9jKG1lbXNpemUpOworCWlmICghbWVtKQorCQlyZXR1cm4gTlVMTDsKKwloYXNoID0gbWVtOworCW1lbSA9IGhhc2ggKyBoc2l6ZTsKKwllbnRyeSA9IG1lbTsKKworCW1lbXNldChoYXNoLCAwLCBoc2l6ZSAqIHNpemVvZigqaGFzaCkpOworCisJLyogYWxsb2NhdGUgYW4gYXJyYXkgdG8gY291bnQgaGFzaCBlbnRyaWVzICovCisJaGFzaF9jb3VudCA9IGNhbGxvYyhoc2l6ZSwgc2l6ZW9mKCpoYXNoX2NvdW50KSk7CisJaWYgKCFoYXNoX2NvdW50KSB7CisJCWZyZWUoaGFzaCk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIHRoZW4gcG9wdWxhdGUgdGhlIGluZGV4ICovCisJcHJldl92YWwgPSB+MDsKKwlmb3IgKGRhdGEgPSBidWZmZXIgKyBlbnRyaWVzICogUkFCSU5fV0lORE9XIC0gUkFCSU5fV0lORE9XOworCSAgICAgZGF0YSA+PSBidWZmZXI7CisJICAgICBkYXRhIC09IFJBQklOX1dJTkRPVykgeworCQl1bnNpZ25lZCBpbnQgdmFsID0gMDsKKwkJZm9yIChpID0gMTsgaSA8PSBSQUJJTl9XSU5ET1c7IGkrKykKKwkJCXZhbCA9ICgodmFsIDw8IDgpIHwgZGF0YVtpXSkgXiBUW3ZhbCA+PiBSQUJJTl9TSElGVF07CisJCWlmICh2YWwgPT0gcHJldl92YWwpIHsKKwkJCS8qIGtlZXAgdGhlIGxvd2VzdCBvZiBjb25zZWN1dGl2ZSBpZGVudGljYWwgYmxvY2tzICovCisJCQllbnRyeVstMV0uZW50cnkucHRyID0gZGF0YSArIFJBQklOX1dJTkRPVzsKKwkJCS0tZW50cmllczsKKwkJfSBlbHNlIHsKKwkJCXByZXZfdmFsID0gdmFsOworCQkJaSA9IHZhbCAmIGhtYXNrOworCQkJZW50cnktPmVudHJ5LnB0ciA9IGRhdGEgKyBSQUJJTl9XSU5ET1c7CisJCQllbnRyeS0+ZW50cnkudmFsID0gdmFsOworCQkJZW50cnktPm5leHQgPSBoYXNoW2ldOworCQkJaGFzaFtpXSA9IGVudHJ5Kys7CisJCQloYXNoX2NvdW50W2ldKys7CisJCX0KKwl9CisKKwkvKgorCSAqIERldGVybWluZSBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc2FtZSBoYXNoCisJICogYnVja2V0LiAgVGhpcyBndWFyZHMgdXMgYWdhaW5zdCBwYXRob2xvZ2ljYWwgZGF0YSBzZXRzIGNhdXNpbmcKKwkgKiByZWFsbHkgYmFkIGhhc2ggZGlzdHJpYnV0aW9uIHdpdGggbW9zdCBlbnRyaWVzIGluIHRoZSBzYW1lIGhhc2gKKwkgKiBidWNrZXQgdGhhdCB3b3VsZCBicmluZyB1cyB0byBPKG0qbikgY29tcHV0aW5nIGNvc3RzIChtIGFuZCBuCisJICogY29ycmVzcG9uZGluZyB0byByZWZlcmVuY2UgYW5kIHRhcmdldCBidWZmZXIgc2l6ZXMpLgorCSAqCisJICogTWFrZSBzdXJlIG5vbmUgb2YgdGhlIGhhc2ggYnVja2V0cyBoYXMgbW9yZSBlbnRyaWVzIHRoYW4KKwkgKiB3ZSdyZSB3aWxsaW5nIHRvIHRlc3QuICBPdGhlcndpc2Ugd2UgY3VsbCB0aGUgZW50cnkgbGlzdAorCSAqIHVuaWZvcm1seSB0byBzdGlsbCBwcmVzZXJ2ZSBhIGdvb2QgcmVwYXJ0aXRpb24gYWNyb3NzCisJICogdGhlIHJlZmVyZW5jZSBidWZmZXIuCisJICovCisJZm9yIChpID0gMDsgaSA8IGhzaXplOyBpKyspIHsKKwkJaW50IGFjYzsKKworCQlpZiAoaGFzaF9jb3VudFtpXSA8PSBIQVNIX0xJTUlUKQorCQkJY29udGludWU7CisKKwkJLyogV2UgbGVhdmUgZXhhY3RseSBIQVNIX0xJTUlUIGVudHJpZXMgaW4gdGhlIGJ1Y2tldCAqLworCQllbnRyaWVzIC09IGhhc2hfY291bnRbaV0gLSBIQVNIX0xJTUlUOworCisJCWVudHJ5ID0gaGFzaFtpXTsKKwkJYWNjID0gMDsKKworCQkvKgorCQkgKiBBc3N1bWUgdGhhdCB0aGlzIGxvb3AgaXMgZ29uZSB0aHJvdWdoIGV4YWN0bHkKKwkJICogSEFTSF9MSU1JVCB0aW1lcyBhbmQgaXMgZW50ZXJlZCBhbmQgbGVmdCB3aXRoCisJCSAqIGFjYz09MC4gIFNvIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGxvb3AKKwkJICogY29udHJpYnV0ZXMgKGhhc2hfY291bnRbaV0tSEFTSF9MSU1JVCkqSEFTSF9MSU1JVAorCQkgKiB0byB0aGUgYWNjdW11bGF0b3IsIGFuZCB0aGUgaW5uZXIgbG9vcCBjb25zZXF1ZW50bHkKKwkJICogaXMgcnVuIChoYXNoX2NvdW50W2ldLUhBU0hfTElNSVQpIHRpbWVzLCByZW1vdmluZworCQkgKiBvbmUgZWxlbWVudCBmcm9tIHRoZSBsaXN0IGVhY2ggdGltZS4gIFNpbmNlIGFjYworCQkgKiBiYWxhbmNlcyBvdXQgdG8gMCBhdCB0aGUgZmluYWwgcnVuLCB0aGUgaW5uZXIgbG9vcAorCQkgKiBib2R5IGNhbid0IGJlIGxlZnQgd2l0aCBlbnRyeT09TlVMTC4gIFNvIHdlIGluZGVlZAorCQkgKiBlbmNvdW50ZXIgZW50cnk9PU5VTEwgaW4gdGhlIG91dGVyIGxvb3Agb25seS4KKwkJICovCisJCWRvIHsKKwkJCWFjYyArPSBoYXNoX2NvdW50W2ldIC0gSEFTSF9MSU1JVDsKKwkJCWlmIChhY2MgPiAwKSB7CisJCQkJc3RydWN0IHVucGFja2VkX2luZGV4X2VudHJ5ICprZWVwID0gZW50cnk7CisJCQkJZG8geworCQkJCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCQkJCQlhY2MgLT0gSEFTSF9MSU1JVDsKKwkJCQl9IHdoaWxlIChhY2MgPiAwKTsKKwkJCQlrZWVwLT5uZXh0ID0gZW50cnktPm5leHQ7CisJCQl9CisJCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCQl9IHdoaWxlIChlbnRyeSk7CisJfQorCWZyZWUoaGFzaF9jb3VudCk7CisKKwkvKgorCSAqIE5vdyBjcmVhdGUgdGhlIHBhY2tlZCBpbmRleCBpbiBhcnJheSBmb3JtCisJICogcmF0aGVyIHRoYW4gbGlua2VkIGxpc3RzLgorCSAqLworCW1lbXNpemUgPSBzaXplb2YoKmluZGV4KQorCQkrIHNpemVvZigqcGFja2VkX2hhc2gpICogKGhzaXplKzEpCisJCSsgc2l6ZW9mKCpwYWNrZWRfZW50cnkpICogZW50cmllczsKKwltZW0gPSBtYWxsb2MobWVtc2l6ZSk7CisJaWYgKCFtZW0pIHsKKwkJZnJlZShoYXNoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaW5kZXggPSBtZW07CisJaW5kZXgtPm1lbXNpemUgPSBtZW1zaXplOworCWluZGV4LT5zcmNfYnVmID0gYnVmOworCWluZGV4LT5zcmNfc2l6ZSA9IGJ1ZnNpemU7CisJaW5kZXgtPmhhc2hfbWFzayA9IGhtYXNrOworCisJbWVtID0gaW5kZXgtPmhhc2g7CisJcGFja2VkX2hhc2ggPSBtZW07CisJbWVtID0gcGFja2VkX2hhc2ggKyAoaHNpemUrMSk7CisJcGFja2VkX2VudHJ5ID0gbWVtOworCisJZm9yIChpID0gMDsgaSA8IGhzaXplOyBpKyspIHsKKwkJLyoKKwkJICogQ29hbGVzY2UgYWxsIGVudHJpZXMgYmVsb25naW5nIHRvIG9uZSBsaW5rZWQgbGlzdAorCQkgKiBpbnRvIGNvbnNlY3V0aXZlIGFycmF5IGVudHJpZXMuCisJCSAqLworCQlwYWNrZWRfaGFzaFtpXSA9IHBhY2tlZF9lbnRyeTsKKwkJZm9yIChlbnRyeSA9IGhhc2hbaV07IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0KQorCQkJKnBhY2tlZF9lbnRyeSsrID0gZW50cnktPmVudHJ5OworCX0KKworCS8qIFNlbnRpbmVsIHZhbHVlIHRvIGluZGljYXRlIHRoZSBsZW5ndGggb2YgdGhlIGxhc3QgaGFzaCBidWNrZXQgKi8KKwlwYWNrZWRfaGFzaFtoc2l6ZV0gPSBwYWNrZWRfZW50cnk7CisKKwlhc3NlcnQocGFja2VkX2VudHJ5IC0gKHN0cnVjdCBpbmRleF9lbnRyeSAqKW1lbSA9PSBlbnRyaWVzKTsKKwlmcmVlKGhhc2gpOworCisJcmV0dXJuIGluZGV4OworfQorCit2b2lkIGZyZWVfZGVsdGFfaW5kZXgoc3RydWN0IGRlbHRhX2luZGV4ICppbmRleCkKK3sKKwlmcmVlKGluZGV4KTsKK30KKwordW5zaWduZWQgbG9uZyBzaXplb2ZfZGVsdGFfaW5kZXgoc3RydWN0IGRlbHRhX2luZGV4ICppbmRleCkKK3sKKwlpZiAoaW5kZXgpCisJCXJldHVybiBpbmRleC0+bWVtc2l6ZTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKgorICogVGhlIG1heGltdW0gc2l6ZSBmb3IgYW55IG9wY29kZSBzZXF1ZW5jZSwgaW5jbHVkaW5nIHRoZSBpbml0aWFsIGhlYWRlcgorICogcGx1cyBSYWJpbiB3aW5kb3cgcGx1cyBiaWdnZXN0IGNvcHkuCisgKi8KKyNkZWZpbmUgTUFYX09QX1NJWkUJKDUgKyA1ICsgMSArIFJBQklOX1dJTkRPVyArIDcpCisKK3ZvaWQgKgorY3JlYXRlX2RlbHRhKGNvbnN0IHN0cnVjdCBkZWx0YV9pbmRleCAqaW5kZXgsCisJICAgICBjb25zdCB2b2lkICp0cmdfYnVmLCB1bnNpZ25lZCBsb25nIHRyZ19zaXplLAorCSAgICAgdW5zaWduZWQgbG9uZyAqZGVsdGFfc2l6ZSwgdW5zaWduZWQgbG9uZyBtYXhfc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgdmFsOworCW9mZl90IG91dHBvcywgbW9mZjsKKwlzaXplX3QgbCwgb3V0c2l6ZSwgbXNpemU7CisJaW50IGluc2NudDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpyZWZfZGF0YSwgKnJlZl90b3AsICpkYXRhLCAqdG9wOworCXVuc2lnbmVkIGNoYXIgKm91dDsKKworCSpkZWx0YV9zaXplID0gMDsKKworCWlmICghdHJnX2J1ZiB8fCAhdHJnX3NpemUpCisJCXJldHVybiBOVUxMOworCisJb3V0cG9zID0gMDsKKwlvdXRzaXplID0gODE5MjsKKwlpZiAobWF4X3NpemUgJiYgb3V0c2l6ZSA+PSBtYXhfc2l6ZSkKKwkJb3V0c2l6ZSA9IG1heF9zaXplICsgTUFYX09QX1NJWkUgKyAxOworCW91dCA9IG1hbGxvYyhvdXRzaXplKTsKKwlpZiAoIW91dCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBzdG9yZSByZWZlcmVuY2UgYnVmZmVyIHNpemUgKi8KKwlsID0gaW5kZXgtPnNyY19zaXplOworCXdoaWxlIChsID49IDB4ODApIHsKKwkJb3V0W291dHBvcysrXSA9IGwgfCAweDgwOworCQlsID4+PSA3OworCX0KKwlvdXRbb3V0cG9zKytdID0gbDsKKworCS8qIHN0b3JlIHRhcmdldCBidWZmZXIgc2l6ZSAqLworCWwgPSB0cmdfc2l6ZTsKKwl3aGlsZSAobCA+PSAweDgwKSB7CisJCW91dFtvdXRwb3MrK10gPSBsIHwgMHg4MDsKKwkJbCA+Pj0gNzsKKwl9CisJb3V0W291dHBvcysrXSA9IGw7CisKKwlyZWZfZGF0YSA9IGluZGV4LT5zcmNfYnVmOworCXJlZl90b3AgPSByZWZfZGF0YSArIGluZGV4LT5zcmNfc2l6ZTsKKwlkYXRhID0gdHJnX2J1ZjsKKwl0b3AgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSB0cmdfYnVmICsgdHJnX3NpemU7CisKKwlvdXRwb3MrKzsKKwl2YWwgPSAwOworCWZvciAoaSA9IDA7IGkgPCBSQUJJTl9XSU5ET1cgJiYgZGF0YSA8IHRvcDsgaSsrLCBkYXRhKyspIHsKKwkJb3V0W291dHBvcysrXSA9ICpkYXRhOworCQl2YWwgPSAoKHZhbCA8PCA4KSB8ICpkYXRhKSBeIFRbdmFsID4+IFJBQklOX1NISUZUXTsKKwl9CisJaW5zY250ID0gaTsKKworCW1vZmYgPSAwOworCW1zaXplID0gMDsKKwl3aGlsZSAoZGF0YSA8IHRvcCkgeworCQlpZiAobXNpemUgPCA0MDk2KSB7CisJCQlzdHJ1Y3QgaW5kZXhfZW50cnkgKmVudHJ5OworCQkJdmFsIF49IFVbZGF0YVstUkFCSU5fV0lORE9XXV07CisJCQl2YWwgPSAoKHZhbCA8PCA4KSB8ICpkYXRhKSBeIFRbdmFsID4+IFJBQklOX1NISUZUXTsKKwkJCWkgPSB2YWwgJiBpbmRleC0+aGFzaF9tYXNrOworCQkJZm9yIChlbnRyeSA9IGluZGV4LT5oYXNoW2ldOyBlbnRyeSA8IGluZGV4LT5oYXNoW2krMV07IGVudHJ5KyspIHsKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpyZWYgPSBlbnRyeS0+cHRyOworCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYyA9IGRhdGE7CisJCQkJdW5zaWduZWQgaW50IHJlZl9zaXplID0gcmVmX3RvcCAtIHJlZjsKKwkJCQlpZiAoZW50cnktPnZhbCAhPSB2YWwpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChyZWZfc2l6ZSA+IHRvcCAtIHNyYykKKwkJCQkJcmVmX3NpemUgPSB0b3AgLSBzcmM7CisJCQkJaWYgKHJlZl9zaXplIDw9IG1zaXplKQorCQkJCQlicmVhazsKKwkJCQl3aGlsZSAocmVmX3NpemUtLSAmJiAqc3JjKysgPT0gKnJlZikKKwkJCQkJcmVmKys7CisJCQkJaWYgKG1zaXplIDwgcmVmIC0gZW50cnktPnB0cikgeworCQkJCQkvKiB0aGlzIGlzIG91ciBiZXN0IG1hdGNoIHNvIGZhciAqLworCQkJCQltc2l6ZSA9IHJlZiAtIGVudHJ5LT5wdHI7CisJCQkJCW1vZmYgPSBlbnRyeS0+cHRyIC0gcmVmX2RhdGE7CisJCQkJCWlmIChtc2l6ZSA+PSA0MDk2KSAvKiBnb29kIGVub3VnaCAqLworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKG1zaXplIDwgNCkgeworCQkJaWYgKCFpbnNjbnQpCisJCQkJb3V0cG9zKys7CisJCQlvdXRbb3V0cG9zKytdID0gKmRhdGErKzsKKwkJCWluc2NudCsrOworCQkJaWYgKGluc2NudCA9PSAweDdmKSB7CisJCQkJb3V0W291dHBvcyAtIGluc2NudCAtIDFdID0gaW5zY250OworCQkJCWluc2NudCA9IDA7CisJCQl9CisJCQltc2l6ZSA9IDA7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgbGVmdDsKKwkJCXVuc2lnbmVkIGNoYXIgKm9wOworCisJCQlpZiAoaW5zY250KSB7CisJCQkJd2hpbGUgKG1vZmYgJiYgcmVmX2RhdGFbbW9mZi0xXSA9PSBkYXRhWy0xXSkgeworCQkJCQkvKiB3ZSBjYW4gbWF0Y2ggb25lIGJ5dGUgYmFjayAqLworCQkJCQltc2l6ZSsrOworCQkJCQltb2ZmLS07CisJCQkJCWRhdGEtLTsKKwkJCQkJb3V0cG9zLS07CisJCQkJCWlmICgtLWluc2NudCkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlvdXRwb3MtLTsgIC8qIHJlbW92ZSBjb3VudCBzbG90ICovCisJCQkJCWluc2NudC0tOyAgLyogbWFrZSBpdCAtMSAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJb3V0W291dHBvcyAtIGluc2NudCAtIDFdID0gaW5zY250OworCQkJCWluc2NudCA9IDA7CisJCQl9CisKKwkJCS8qIEEgY29weSBvcCBpcyBjdXJyZW50bHkgbGltaXRlZCB0byA2NEtCIChwYWNrIHYyKSAqLworCQkJbGVmdCA9IChtc2l6ZSA8IDB4MTAwMDApID8gMCA6IChtc2l6ZSAtIDB4MTAwMDApOworCQkJbXNpemUgLT0gbGVmdDsKKworCQkJb3AgPSBvdXQgKyBvdXRwb3MrKzsKKwkJCWkgPSAweDgwOworCisJCQlpZiAobW9mZiAmIDB4MDAwMDAwZmYpCisJCQkJb3V0W291dHBvcysrXSA9IG1vZmYgPj4gMCwgIGkgfD0gMHgwMTsKKwkJCWlmIChtb2ZmICYgMHgwMDAwZmYwMCkKKwkJCQlvdXRbb3V0cG9zKytdID0gbW9mZiA+PiA4LCAgaSB8PSAweDAyOworCQkJaWYgKG1vZmYgJiAweDAwZmYwMDAwKQorCQkJCW91dFtvdXRwb3MrK10gPSBtb2ZmID4+IDE2LCBpIHw9IDB4MDQ7CisJCQlpZiAobW9mZiAmIDB4ZmYwMDAwMDApCisJCQkJb3V0W291dHBvcysrXSA9IG1vZmYgPj4gMjQsIGkgfD0gMHgwODsKKworCQkJaWYgKG1zaXplICYgMHgwMGZmKQorCQkJCW91dFtvdXRwb3MrK10gPSBtc2l6ZSA+PiAwLCBpIHw9IDB4MTA7CisJCQlpZiAobXNpemUgJiAweGZmMDApCisJCQkJb3V0W291dHBvcysrXSA9IG1zaXplID4+IDgsIGkgfD0gMHgyMDsKKworCQkJKm9wID0gaTsKKworCQkJZGF0YSArPSBtc2l6ZTsKKwkJCW1vZmYgKz0gbXNpemU7CisJCQltc2l6ZSA9IGxlZnQ7CisKKwkJCWlmIChtb2ZmID4gMHhmZmZmZmZmZikKKwkJCQltc2l6ZSA9IDA7CisKKwkJCWlmIChtc2l6ZSA8IDQwOTYpIHsKKwkJCQlpbnQgajsKKwkJCQl2YWwgPSAwOworCQkJCWZvciAoaiA9IC1SQUJJTl9XSU5ET1c7IGogPCAwOyBqKyspCisJCQkJCXZhbCA9ICgodmFsIDw8IDgpIHwgZGF0YVtqXSkKKwkJCQkJICAgICAgXiBUW3ZhbCA+PiBSQUJJTl9TSElGVF07CisJCQl9CisJCX0KKworCQlpZiAob3V0cG9zID49IG91dHNpemUgLSBNQVhfT1BfU0laRSkgeworCQkJdm9pZCAqdG1wID0gb3V0OworCQkJb3V0c2l6ZSA9IG91dHNpemUgKiAzIC8gMjsKKwkJCWlmIChtYXhfc2l6ZSAmJiBvdXRzaXplID49IG1heF9zaXplKQorCQkJCW91dHNpemUgPSBtYXhfc2l6ZSArIE1BWF9PUF9TSVpFICsgMTsKKwkJCWlmIChtYXhfc2l6ZSAmJiBvdXRwb3MgPiBtYXhfc2l6ZSkKKwkJCQlicmVhazsKKwkJCW91dCA9IHJlYWxsb2Mob3V0LCBvdXRzaXplKTsKKwkJCWlmICghb3V0KSB7CisJCQkJZnJlZSh0bXApOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisJfQorCisJaWYgKGluc2NudCkKKwkJb3V0W291dHBvcyAtIGluc2NudCAtIDFdID0gaW5zY250OworCisJaWYgKG1heF9zaXplICYmIG91dHBvcyA+IG1heF9zaXplKSB7CisJCWZyZWUob3V0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJKmRlbHRhX3NpemUgPSBvdXRwb3M7CisJcmV0dXJuIG91dDsKK30KZGlmZiAtLWdpdCBhL2RpZmYtbGliLmMgYi9kaWZmLWxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxODEyZjQKLS0tIC9kZXYvbnVsbAorKysgYi9kaWZmLWxpYi5jCkBAIC0wLDAgKzEsNTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImZzbW9uaXRvci5oIgorCisvKgorICogZGlmZi1maWxlcworICovCisKKy8qCisgKiBIYXMgdGhlIHdvcmsgdHJlZSBlbnRpdHkgYmVlbiByZW1vdmVkPworICoKKyAqIFJldHVybiAxIGlmIGl0IHdhcyByZW1vdmVkIGZyb20gdGhlIHdvcmsgdHJlZSwgMCBpZiBhbiBlbnRpdHkgdG8gYmUKKyAqIGNvbXBhcmVkIHdpdGggdGhlIGNhY2hlIGVudHJ5IGNlIHN0aWxsIGV4aXN0cyAodGhlIGxhdHRlciBpbmNsdWRlcworICogdGhlIGNhc2Ugd2hlcmUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgYSBzdWJtb2R1bGUgcmVwb3NpdG9yeQorICogZXhpc3RzIGZvciBjZSB0aGF0IGlzIGEgc3VibW9kdWxlIC0tIGl0IGlzIGEgc3VibW9kdWxlIHRoYXQgaXMgbm90CisgKiBjaGVja2VkIG91dCkuICBSZXR1cm4gbmVnYXRpdmUgZm9yIGFuIGVycm9yLgorICovCitzdGF0aWMgaW50IGNoZWNrX3JlbW92ZWQoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KQoreworCWlmIChsc3RhdChjZS0+bmFtZSwgc3QpIDwgMCkgeworCQlpZiAoIWlzX21pc3NpbmdfZmlsZV9lcnJvcihlcnJubykpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAxOworCX0KKwlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSkpCisJCXJldHVybiAxOworCWlmIChTX0lTRElSKHN0LT5zdF9tb2RlKSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIHN1YjsKKworCQkvKgorCQkgKiBJZiBjZSBpcyBhbHJlYWR5IGEgZ2l0bGluaywgd2UgY2FuIGhhdmUgYSBwbGFpbgorCQkgKiBkaXJlY3RvcnkgKGkuZS4gdGhlIHN1Ym1vZHVsZSBpcyBub3QgY2hlY2tlZCBvdXQpLAorCQkgKiBvciBhIGNoZWNrZWQgb3V0IHN1Ym1vZHVsZS4gIEVpdGhlciBjYXNlIHRoaXMgaXMgbm90CisJCSAqIGEgY2FzZSB3aGVyZSBzb21ldGhpbmcgd2FzIHJlbW92ZWQgZnJvbSB0aGUgd29yayB0cmVlLAorCQkgKiBzbyB3ZSB3aWxsIHJldHVybiAwLgorCQkgKgorCQkgKiBPdGhlcndpc2UsIGlmIHRoZSBkaXJlY3RvcnkgaXMgbm90IGEgc3VibW9kdWxlCisJCSAqIHJlcG9zaXRvcnksIHRoYXQgbWVhbnMgY2Ugd2hpY2ggd2FzIGEgYmxvYiB0dXJuZWQgaW50bworCQkgKiBhIGRpcmVjdG9yeSAtLS0gdGhlIGJsb2Igd2FzIHJlbW92ZWQhCisJCSAqLworCQlpZiAoIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSAmJgorCQkgICAgcmVzb2x2ZV9naXRsaW5rX3JlZihjZS0+bmFtZSwgIkhFQUQiLCAmc3ViKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhhcyBhIGZpbGUgY2hhbmdlZCBvciBoYXMgYSBzdWJtb2R1bGUgbmV3IGNvbW1pdHMgb3IgYSBkaXJ0eSB3b3JrIHRyZWU/CisgKgorICogUmV0dXJuIDEgd2hlbiBjaGFuZ2VzIGFyZSBkZXRlY3RlZCwgMCBvdGhlcndpc2UuIElmIHRoZSBESVJUWV9TVUJNT0RVTEVTCisgKiBvcHRpb24gaXMgc2V0LCB0aGUgY2FsbGVyIGRvZXMgbm90IG9ubHkgd2FudCB0byBrbm93IGlmIGEgc3VibW9kdWxlIGlzCisgKiBtb2RpZmllZCBhdCBhbGwgYnV0IHdhbnRzIHRvIGtub3cgYWxsIHRoZSBjb25kaXRpb25zIHRoYXQgYXJlIG1ldCAobmV3CisgKiBjb21taXRzLCB1bnRyYWNrZWQgY29udGVudCBhbmQvb3IgbW9kaWZpZWQgY29udGVudCkuCisgKi8KK3N0YXRpYyBpbnQgbWF0Y2hfc3RhdF93aXRoX3N1Ym1vZHVsZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkgICAgIHN0cnVjdCBzdGF0ICpzdCwgdW5zaWduZWQgY2Vfb3B0aW9uLAorCQkJCSAgICAgdW5zaWduZWQgKmRpcnR5X3N1Ym1vZHVsZSkKK3sKKwlpbnQgY2hhbmdlZCA9IGllX21hdGNoX3N0YXQoZGlmZm9wdC0+cmVwby0+aW5kZXgsIGNlLCBzdCwgY2Vfb3B0aW9uKTsKKwlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpKSB7CisJCXN0cnVjdCBkaWZmX2ZsYWdzIG9yaWdfZmxhZ3MgPSBkaWZmb3B0LT5mbGFnczsKKwkJaWYgKCFkaWZmb3B0LT5mbGFncy5vdmVycmlkZV9zdWJtb2R1bGVfY29uZmlnKQorCQkJc2V0X2RpZmZvcHRfZmxhZ3NfZnJvbV9zdWJtb2R1bGVfY29uZmlnKGRpZmZvcHQsIGNlLT5uYW1lKTsKKwkJaWYgKGRpZmZvcHQtPmZsYWdzLmlnbm9yZV9zdWJtb2R1bGVzKQorCQkJY2hhbmdlZCA9IDA7CisJCWVsc2UgaWYgKCFkaWZmb3B0LT5mbGFncy5pZ25vcmVfZGlydHlfc3VibW9kdWxlcyAmJgorCQkJICghY2hhbmdlZCB8fCBkaWZmb3B0LT5mbGFncy5kaXJ0eV9zdWJtb2R1bGVzKSkKKwkJCSpkaXJ0eV9zdWJtb2R1bGUgPSBpc19zdWJtb2R1bGVfbW9kaWZpZWQoY2UtPm5hbWUsCisJCQkJCQkJCSBkaWZmb3B0LT5mbGFncy5pZ25vcmVfdW50cmFja2VkX2luX3N1Ym1vZHVsZXMpOworCQlkaWZmb3B0LT5mbGFncyA9IG9yaWdfZmxhZ3M7CisJfQorCXJldHVybiBjaGFuZ2VkOworfQorCitpbnQgcnVuX2RpZmZfZmlsZXMoc3RydWN0IHJldl9pbmZvICpyZXZzLCB1bnNpZ25lZCBpbnQgb3B0aW9uKQoreworCWludCBlbnRyaWVzLCBpOworCWludCBkaWZmX3VubWVyZ2VkX3N0YWdlID0gcmV2cy0+bWF4X2NvdW50OworCXVuc2lnbmVkIGNlX29wdGlvbiA9ICgob3B0aW9uICYgRElGRl9SQUNZX0lTX01PRElGSUVEKQorCQkJICAgICAgPyBDRV9NQVRDSF9SQUNZX0lTX0RJUlRZIDogMCk7CisJdWludDY0X3Qgc3RhcnQgPSBnZXRuYW5vdGltZSgpOworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlID0gcmV2cy0+ZGlmZm9wdC5yZXBvLT5pbmRleDsKKworCWRpZmZfc2V0X21uZW1vbmljX3ByZWZpeCgmcmV2cy0+ZGlmZm9wdCwgImkvIiwgIncvIik7CisKKwlpZiAoZGlmZl91bm1lcmdlZF9zdGFnZSA8IDApCisJCWRpZmZfdW5tZXJnZWRfc3RhZ2UgPSAyOworCWVudHJpZXMgPSBpc3RhdGUtPmNhY2hlX25yOworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IG9sZG1vZGUsIG5ld21vZGU7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQlpbnQgY2hhbmdlZDsKKwkJdW5zaWduZWQgZGlydHlfc3VibW9kdWxlID0gMDsKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCwgKm5ld19vaWQ7CisKKwkJaWYgKGRpZmZfY2FuX3F1aXRfZWFybHkoJnJldnMtPmRpZmZvcHQpKQorCQkJYnJlYWs7CisKKwkJaWYgKCFjZV9wYXRoX21hdGNoKGlzdGF0ZSwgY2UsICZyZXZzLT5wcnVuZV9kYXRhLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqZHBhdGg7CisJCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcjsKKwkJCXVuc2lnbmVkIGludCB3dF9tb2RlID0gMDsKKwkJCWludCBudW1fY29tcGFyZV9zdGFnZXMgPSAwOworCQkJc2l6ZV90IHBhdGhfbGVuOworCQkJc3RydWN0IHN0YXQgc3Q7CisKKwkJCXBhdGhfbGVuID0gY2VfbmFtZWxlbihjZSk7CisKKwkJCWRwYXRoID0geG1hbGxvYyhjb21iaW5lX2RpZmZfcGF0aF9zaXplKDUsIHBhdGhfbGVuKSk7CisJCQlkcGF0aC0+cGF0aCA9IChjaGFyICopICYoZHBhdGgtPnBhcmVudFs1XSk7CisKKwkJCWRwYXRoLT5uZXh0ID0gTlVMTDsKKwkJCW1lbWNweShkcGF0aC0+cGF0aCwgY2UtPm5hbWUsIHBhdGhfbGVuKTsKKwkJCWRwYXRoLT5wYXRoW3BhdGhfbGVuXSA9ICdcMCc7CisJCQlvaWRjbHIoJmRwYXRoLT5vaWQpOworCQkJbWVtc2V0KCYoZHBhdGgtPnBhcmVudFswXSksIDAsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjb21iaW5lX2RpZmZfcGFyZW50KSo1KTsKKworCQkJY2hhbmdlZCA9IGNoZWNrX3JlbW92ZWQoY2UsICZzdCk7CisJCQlpZiAoIWNoYW5nZWQpCisJCQkJd3RfbW9kZSA9IGNlX21vZGVfZnJvbV9zdGF0KGNlLCBzdC5zdF9tb2RlKTsKKwkJCWVsc2UgeworCQkJCWlmIChjaGFuZ2VkIDwgMCkgeworCQkJCQlwZXJyb3IoY2UtPm5hbWUpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJd3RfbW9kZSA9IDA7CisJCQl9CisJCQlkcGF0aC0+bW9kZSA9IHd0X21vZGU7CisKKwkJCXdoaWxlIChpIDwgZW50cmllcykgeworCQkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqbmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJCQlpbnQgc3RhZ2U7CisKKwkJCQlpZiAoc3RyY21wKGNlLT5uYW1lLCBuY2UtPm5hbWUpKQorCQkJCQlicmVhazsKKworCQkJCS8qIFN0YWdlICMyIChvdXJzKSBpcyB0aGUgZmlyc3QgcGFyZW50LAorCQkJCSAqIHN0YWdlICMzICh0aGVpcnMpIGlzIHRoZSBzZWNvbmQuCisJCQkJICovCisJCQkJc3RhZ2UgPSBjZV9zdGFnZShuY2UpOworCQkJCWlmICgyIDw9IHN0YWdlKSB7CisJCQkJCWludCBtb2RlID0gbmNlLT5jZV9tb2RlOworCQkJCQludW1fY29tcGFyZV9zdGFnZXMrKzsKKwkJCQkJb2lkY3B5KCZkcGF0aC0+cGFyZW50W3N0YWdlIC0gMl0ub2lkLAorCQkJCQkgICAgICAgJm5jZS0+b2lkKTsKKwkJCQkJZHBhdGgtPnBhcmVudFtzdGFnZS0yXS5tb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQobmNlLCBtb2RlKTsKKwkJCQkJZHBhdGgtPnBhcmVudFtzdGFnZS0yXS5zdGF0dXMgPQorCQkJCQkJRElGRl9TVEFUVVNfTU9ESUZJRUQ7CisJCQkJfQorCisJCQkJLyogZGlmZiBhZ2FpbnN0IHRoZSBwcm9wZXIgdW5tZXJnZWQgc3RhZ2UgKi8KKwkJCQlpZiAoc3RhZ2UgPT0gZGlmZl91bm1lcmdlZF9zdGFnZSkKKwkJCQkJY2UgPSBuY2U7CisJCQkJaSsrOworCQkJfQorCQkJLyoKKwkJCSAqIENvbXBlbnNhdGUgZm9yIGxvb3AgdXBkYXRlCisJCQkgKi8KKwkJCWktLTsKKworCQkJaWYgKHJldnMtPmNvbWJpbmVfbWVyZ2VzICYmIG51bV9jb21wYXJlX3N0YWdlcyA9PSAyKSB7CisJCQkJc2hvd19jb21iaW5lZF9kaWZmKGRwYXRoLCAyLAorCQkJCQkJICAgcmV2cy0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzLAorCQkJCQkJICAgcmV2cyk7CisJCQkJZnJlZShkcGF0aCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlGUkVFX0FORF9OVUxMKGRwYXRoKTsKKworCQkJLyoKKwkJCSAqIFNob3cgdGhlIGRpZmYgZm9yIHRoZSAnY2UnIGlmIHdlIGZvdW5kIHRoZSBvbmUKKwkJCSAqIGZyb20gdGhlIGRlc2lyZWQgc3RhZ2UuCisJCQkgKi8KKwkJCXBhaXIgPSBkaWZmX3VubWVyZ2UoJnJldnMtPmRpZmZvcHQsIGNlLT5uYW1lKTsKKwkJCWlmICh3dF9tb2RlKQorCQkJCXBhaXItPnR3by0+bW9kZSA9IHd0X21vZGU7CisJCQlpZiAoY2Vfc3RhZ2UoY2UpICE9IGRpZmZfdW5tZXJnZWRfc3RhZ2UpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY2VfdXB0b2RhdGUoY2UpIHx8IGNlX3NraXBfd29ya3RyZWUoY2UpKQorCQkJY29udGludWU7CisKKwkJLyogSWYgQ0VfVkFMSUQgaXMgc2V0LCBkb24ndCBsb29rIGF0IHdvcmtkaXIgZm9yIGZpbGUgcmVtb3ZhbCAqLworCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfVkFMSUQpIHsKKwkJCWNoYW5nZWQgPSAwOworCQkJbmV3bW9kZSA9IGNlLT5jZV9tb2RlOworCQl9IGVsc2UgeworCQkJc3RydWN0IHN0YXQgc3Q7CisKKwkJCWNoYW5nZWQgPSBjaGVja19yZW1vdmVkKGNlLCAmc3QpOworCQkJaWYgKGNoYW5nZWQpIHsKKwkJCQlpZiAoY2hhbmdlZCA8IDApIHsKKwkJCQkJcGVycm9yKGNlLT5uYW1lKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWRpZmZfYWRkcmVtb3ZlKCZyZXZzLT5kaWZmb3B0LCAnLScsIGNlLT5jZV9tb2RlLAorCQkJCQkgICAgICAgJmNlLT5vaWQsCisJCQkJCSAgICAgICAhaXNfbnVsbF9vaWQoJmNlLT5vaWQpLAorCQkJCQkgICAgICAgY2UtPm5hbWUsIDApOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChyZXZzLT5kaWZmb3B0Lml0YV9pbnZpc2libGVfaW5faW5kZXggJiYKKwkJCQkgICBjZV9pbnRlbnRfdG9fYWRkKGNlKSkgeworCQkJCWRpZmZfYWRkcmVtb3ZlKCZyZXZzLT5kaWZmb3B0LCAnKycsIGNlLT5jZV9tb2RlLAorCQkJCQkgICAgICAgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSwgMCwKKwkJCQkJICAgICAgIGNlLT5uYW1lLCAwKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJY2hhbmdlZCA9IG1hdGNoX3N0YXRfd2l0aF9zdWJtb2R1bGUoJnJldnMtPmRpZmZvcHQsIGNlLCAmc3QsCisJCQkJCQkJICAgIGNlX29wdGlvbiwgJmRpcnR5X3N1Ym1vZHVsZSk7CisJCQluZXdtb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoY2UsIHN0LnN0X21vZGUpOworCQl9CisKKwkJaWYgKCFjaGFuZ2VkICYmICFkaXJ0eV9zdWJtb2R1bGUpIHsKKwkJCWNlX21hcmtfdXB0b2RhdGUoY2UpOworCQkJbWFya19mc21vbml0b3JfdmFsaWQoaXN0YXRlLCBjZSk7CisJCQlpZiAoIXJldnMtPmRpZmZvcHQuZmxhZ3MuZmluZF9jb3BpZXNfaGFyZGVyKQorCQkJCWNvbnRpbnVlOworCQl9CisJCW9sZG1vZGUgPSBjZS0+Y2VfbW9kZTsKKwkJb2xkX29pZCA9ICZjZS0+b2lkOworCQluZXdfb2lkID0gY2hhbmdlZCA/ICZudWxsX29pZCA6ICZjZS0+b2lkOworCQlkaWZmX2NoYW5nZSgmcmV2cy0+ZGlmZm9wdCwgb2xkbW9kZSwgbmV3bW9kZSwKKwkJCSAgICBvbGRfb2lkLCBuZXdfb2lkLAorCQkJICAgICFpc19udWxsX29pZChvbGRfb2lkKSwKKwkJCSAgICAhaXNfbnVsbF9vaWQobmV3X29pZCksCisJCQkgICAgY2UtPm5hbWUsIDAsIGRpcnR5X3N1Ym1vZHVsZSk7CisKKwl9CisJZGlmZmNvcmVfc3RkKCZyZXZzLT5kaWZmb3B0KTsKKwlkaWZmX2ZsdXNoKCZyZXZzLT5kaWZmb3B0KTsKKwl0cmFjZV9wZXJmb3JtYW5jZV9zaW5jZShzdGFydCwgImRpZmYtZmlsZXMiKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGRpZmYtaW5kZXgKKyAqLworCisvKiBBIGZpbGUgZW50cnkgd2VudCBhd2F5IG9yIGFwcGVhcmVkICovCitzdGF0aWMgdm9pZCBkaWZmX2luZGV4X3Nob3dfZmlsZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgb2lkX3ZhbGlkLAorCQkJCSB1bnNpZ25lZCBpbnQgbW9kZSwKKwkJCQkgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlKQoreworCWRpZmZfYWRkcmVtb3ZlKCZyZXZzLT5kaWZmb3B0LCBwcmVmaXhbMF0sIG1vZGUsCisJCSAgICAgICBvaWQsIG9pZF92YWxpZCwgY2UtPm5hbWUsIGRpcnR5X3N1Ym1vZHVsZSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3N0YXRfZGF0YShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKipvaWRwLAorCQkJIHVuc2lnbmVkIGludCAqbW9kZXAsCisJCQkgaW50IGNhY2hlZCwgaW50IG1hdGNoX21pc3NpbmcsCisJCQkgdW5zaWduZWQgKmRpcnR5X3N1Ym1vZHVsZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCkKK3sKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSAmY2UtPm9pZDsKKwl1bnNpZ25lZCBpbnQgbW9kZSA9IGNlLT5jZV9tb2RlOworCisJaWYgKCFjYWNoZWQgJiYgIWNlX3VwdG9kYXRlKGNlKSkgeworCQlpbnQgY2hhbmdlZDsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWNoYW5nZWQgPSBjaGVja19yZW1vdmVkKGNlLCAmc3QpOworCQlpZiAoY2hhbmdlZCA8IDApCisJCQlyZXR1cm4gLTE7CisJCWVsc2UgaWYgKGNoYW5nZWQpIHsKKwkJCWlmIChtYXRjaF9taXNzaW5nKSB7CisJCQkJKm9pZHAgPSBvaWQ7CisJCQkJKm1vZGVwID0gbW9kZTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXJldHVybiAtMTsKKwkJfQorCQljaGFuZ2VkID0gbWF0Y2hfc3RhdF93aXRoX3N1Ym1vZHVsZShkaWZmb3B0LCBjZSwgJnN0LAorCQkJCQkJICAgIDAsIGRpcnR5X3N1Ym1vZHVsZSk7CisJCWlmIChjaGFuZ2VkKSB7CisJCQltb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoY2UsIHN0LnN0X21vZGUpOworCQkJb2lkID0gJm51bGxfb2lkOworCQl9CisJfQorCisJKm9pZHAgPSBvaWQ7CisJKm1vZGVwID0gbW9kZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hvd19uZXdfZmlsZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqbmV3X2ZpbGUsCisJCQkgIGludCBjYWNoZWQsIGludCBtYXRjaF9taXNzaW5nKQoreworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKwl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUgPSAwOworCisJLyoKKwkgKiBOZXcgZmlsZSBpbiB0aGUgaW5kZXg6IGl0IG1pZ2h0IGFjdHVhbGx5IGJlIGRpZmZlcmVudCBpbgorCSAqIHRoZSB3b3JraW5nIHRyZWUuCisJICovCisJaWYgKGdldF9zdGF0X2RhdGEobmV3X2ZpbGUsICZvaWQsICZtb2RlLCBjYWNoZWQsIG1hdGNoX21pc3NpbmcsCisJICAgICZkaXJ0eV9zdWJtb2R1bGUsICZyZXZzLT5kaWZmb3B0KSA8IDApCisJCXJldHVybjsKKworCWRpZmZfaW5kZXhfc2hvd19maWxlKHJldnMsICIrIiwgbmV3X2ZpbGUsIG9pZCwgIWlzX251bGxfb2lkKG9pZCksIG1vZGUsIGRpcnR5X3N1Ym1vZHVsZSk7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19tb2RpZmllZChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGRfZW50cnksCisJCQkgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpuZXdfZW50cnksCisJCQkgaW50IHJlcG9ydF9taXNzaW5nLAorCQkJIGludCBjYWNoZWQsIGludCBtYXRjaF9taXNzaW5nKQoreworCXVuc2lnbmVkIGludCBtb2RlLCBvbGRtb2RlOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUgPSAwOworCisJaWYgKGdldF9zdGF0X2RhdGEobmV3X2VudHJ5LCAmb2lkLCAmbW9kZSwgY2FjaGVkLCBtYXRjaF9taXNzaW5nLAorCQkJICAmZGlydHlfc3VibW9kdWxlLCAmcmV2cy0+ZGlmZm9wdCkgPCAwKSB7CisJCWlmIChyZXBvcnRfbWlzc2luZykKKwkJCWRpZmZfaW5kZXhfc2hvd19maWxlKHJldnMsICItIiwgb2xkX2VudHJ5LAorCQkJCQkgICAgICZvbGRfZW50cnktPm9pZCwgMSwgb2xkX2VudHJ5LT5jZV9tb2RlLAorCQkJCQkgICAgIDApOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHJldnMtPmNvbWJpbmVfbWVyZ2VzICYmICFjYWNoZWQgJiYKKwkgICAgKCFvaWRlcShvaWQsICZvbGRfZW50cnktPm9pZCkgfHwgIW9pZGVxKCZvbGRfZW50cnktPm9pZCwgJm5ld19lbnRyeS0+b2lkKSkpIHsKKwkJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwOworCQlpbnQgcGF0aGxlbiA9IGNlX25hbWVsZW4obmV3X2VudHJ5KTsKKworCQlwID0geG1hbGxvYyhjb21iaW5lX2RpZmZfcGF0aF9zaXplKDIsIHBhdGhsZW4pKTsKKwkJcC0+cGF0aCA9IChjaGFyICopICZwLT5wYXJlbnRbMl07CisJCXAtPm5leHQgPSBOVUxMOworCQltZW1jcHkocC0+cGF0aCwgbmV3X2VudHJ5LT5uYW1lLCBwYXRobGVuKTsKKwkJcC0+cGF0aFtwYXRobGVuXSA9IDA7CisJCXAtPm1vZGUgPSBtb2RlOworCQlvaWRjbHIoJnAtPm9pZCk7CisJCW1lbXNldChwLT5wYXJlbnQsIDAsIDIgKiBzaXplb2Yoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXJlbnQpKTsKKwkJcC0+cGFyZW50WzBdLnN0YXR1cyA9IERJRkZfU1RBVFVTX01PRElGSUVEOworCQlwLT5wYXJlbnRbMF0ubW9kZSA9IG5ld19lbnRyeS0+Y2VfbW9kZTsKKwkJb2lkY3B5KCZwLT5wYXJlbnRbMF0ub2lkLCAmbmV3X2VudHJ5LT5vaWQpOworCQlwLT5wYXJlbnRbMV0uc3RhdHVzID0gRElGRl9TVEFUVVNfTU9ESUZJRUQ7CisJCXAtPnBhcmVudFsxXS5tb2RlID0gb2xkX2VudHJ5LT5jZV9tb2RlOworCQlvaWRjcHkoJnAtPnBhcmVudFsxXS5vaWQsICZvbGRfZW50cnktPm9pZCk7CisJCXNob3dfY29tYmluZWRfZGlmZihwLCAyLCByZXZzLT5kZW5zZV9jb21iaW5lZF9tZXJnZXMsIHJldnMpOworCQlmcmVlKHApOworCQlyZXR1cm4gMDsKKwl9CisKKwlvbGRtb2RlID0gb2xkX2VudHJ5LT5jZV9tb2RlOworCWlmIChtb2RlID09IG9sZG1vZGUgJiYgb2lkZXEob2lkLCAmb2xkX2VudHJ5LT5vaWQpICYmICFkaXJ0eV9zdWJtb2R1bGUgJiYKKwkgICAgIXJldnMtPmRpZmZvcHQuZmxhZ3MuZmluZF9jb3BpZXNfaGFyZGVyKQorCQlyZXR1cm4gMDsKKworCWRpZmZfY2hhbmdlKCZyZXZzLT5kaWZmb3B0LCBvbGRtb2RlLCBtb2RlLAorCQkgICAgJm9sZF9lbnRyeS0+b2lkLCBvaWQsIDEsICFpc19udWxsX29pZChvaWQpLAorCQkgICAgb2xkX2VudHJ5LT5uYW1lLCAwLCBkaXJ0eV9zdWJtb2R1bGUpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBnZXRzIGEgbWl4IG9mIGFuIGV4aXN0aW5nIGluZGV4IGFuZCBhIHRyZWUsIG9uZSBwYXRobmFtZSBlbnRyeQorICogYXQgYSB0aW1lLiBUaGUgaW5kZXggZW50cnkgbWF5IGJlIGEgc2luZ2xlIHN0YWdlLTAgb25lLCBidXQgaXQgY291bGQKKyAqIGFsc28gYmUgbXVsdGlwbGUgdW5tZXJnZWQgZW50cmllcyAoaW4gd2hpY2ggY2FzZSBpZHhfcG9zL2lkeF9uciB3aWxsCisgKiBnaXZlIHlvdSB0aGUgcG9zaXRpb24gYW5kIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBpbmRleCkuCisgKi8KK3N0YXRpYyB2b2lkIGRvX29uZXdheV9kaWZmKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywKKwkJCSAgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqaWR4LAorCQkJICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICp0cmVlKQoreworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IG8tPnVucGFja19kYXRhOworCWludCBtYXRjaF9taXNzaW5nLCBjYWNoZWQ7CisKKwkvKgorCSAqIGktdC1hIGVudHJpZXMgZG8gbm90IGFjdHVhbGx5IGV4aXN0IGluIHRoZSBpbmRleCAoaWYgd2UncmUKKwkgKiBsb29raW5nIGF0IGl0cyBjb250ZW50KQorCSAqLworCWlmIChvLT5pbmRleF9vbmx5ICYmCisJICAgIHJldnMtPmRpZmZvcHQuaXRhX2ludmlzaWJsZV9pbl9pbmRleCAmJgorCSAgICBpZHggJiYgY2VfaW50ZW50X3RvX2FkZChpZHgpKSB7CisJCWlkeCA9IE5VTEw7CisJCWlmICghdHJlZSkKKwkJCXJldHVybjsJLyogbm90aGluZyB0byBkaWZmLi4gKi8KKwl9CisKKwkvKiBpZiB0aGUgZW50cnkgaXMgbm90IGNoZWNrZWQgb3V0LCBkb24ndCBleGFtaW5lIHdvcmsgdHJlZSAqLworCWNhY2hlZCA9IG8tPmluZGV4X29ubHkgfHwKKwkJKGlkeCAmJiAoKGlkeC0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkgfHwgY2Vfc2tpcF93b3JrdHJlZShpZHgpKSk7CisJLyoKKwkgKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdhcnQgLSAiZGlmZi1pbmRleCAtbSIgZG9lcworCSAqIG5vdCBtZWFuICJkbyBub3QgaWdub3JlIG1lcmdlcyIsIGJ1dCAibWF0Y2hfbWlzc2luZyIuCisJICoKKwkgKiBCdXQgd2l0aCB0aGUgcmV2aXNpb24gZmxhZyBwYXJzaW5nLCB0aGF0J3MgZm91bmQgaW4KKwkgKiAiIXJldnMtPmlnbm9yZV9tZXJnZXMiLgorCSAqLworCW1hdGNoX21pc3NpbmcgPSAhcmV2cy0+aWdub3JlX21lcmdlczsKKworCWlmIChjYWNoZWQgJiYgaWR4ICYmIGNlX3N0YWdlKGlkeCkpIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXI7CisJCXBhaXIgPSBkaWZmX3VubWVyZ2UoJnJldnMtPmRpZmZvcHQsIGlkeC0+bmFtZSk7CisJCWlmICh0cmVlKQorCQkJZmlsbF9maWxlc3BlYyhwYWlyLT5vbmUsICZ0cmVlLT5vaWQsIDEsCisJCQkJICAgICAgdHJlZS0+Y2VfbW9kZSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFNvbWV0aGluZyBhZGRlZCB0byB0aGUgdHJlZT8KKwkgKi8KKwlpZiAoIXRyZWUpIHsKKwkJc2hvd19uZXdfZmlsZShyZXZzLCBpZHgsIGNhY2hlZCwgbWF0Y2hfbWlzc2luZyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFNvbWV0aGluZyByZW1vdmVkIGZyb20gdGhlIHRyZWU/CisJICovCisJaWYgKCFpZHgpIHsKKwkJZGlmZl9pbmRleF9zaG93X2ZpbGUocmV2cywgIi0iLCB0cmVlLCAmdHJlZS0+b2lkLCAxLAorCQkJCSAgICAgdHJlZS0+Y2VfbW9kZSwgMCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBTaG93IGRpZmZlcmVuY2UgYmV0d2VlbiBvbGQgYW5kIG5ldyAqLworCXNob3dfbW9kaWZpZWQocmV2cywgdHJlZSwgaWR4LCAxLCBjYWNoZWQsIG1hdGNoX21pc3NpbmcpOworfQorCisvKgorICogVGhlIHVucGFja190cmVlcygpIGludGVyZmFjZSBpcyBkZXNpZ25lZCBmb3IgbWVyZ2luZywgc28KKyAqIHRoZSBkaWZmZXJlbnQgc291cmNlIGVudHJpZXMgYXJlIGRlc2lnbmVkIHByaW1hcmlseSBmb3IKKyAqIHRoZSBzb3VyY2UgdHJlZXMsIHdpdGggdGhlIG9sZCBpbmRleCBiZWluZyByZWFsbHkgbWFpbmx5CisgKiB1c2VkIGZvciBiZWluZyByZXBsYWNlZCBieSB0aGUgcmVzdWx0LgorICoKKyAqIEZvciBkaWZmaW5nLCB0aGUgaW5kZXggaXMgbW9yZSBpbXBvcnRhbnQsIGFuZCB3ZSBvbmx5IGhhdmUgYQorICogc2luZ2xlIHRyZWUuCisgKgorICogV2UncmUgc3VwcG9zZWQgdG8gYWR2YW5jZSBvLT5wb3MgdG8gc2tpcCB3aGF0IHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQuCisgKgorICogVGhpcyB3cmFwcGVyIG1ha2VzIGl0IGFsbCBtb3JlIHJlYWRhYmxlLCBhbmQgdGFrZXMgY2FyZSBvZiBhbGwKKyAqIHRoZSBmYWlybHkgY29tcGxleCB1bnBhY2tfdHJlZXMoKSBzZW1hbnRpYyByZXF1aXJlbWVudHMsIGluY2x1ZGluZworICogdGhlIHNraXBwaW5nLCB0aGUgcGF0aCBtYXRjaGluZywgdGhlIHR5cGUgY29uZmxpY3QgY2FzZXMgZXRjLgorICovCitzdGF0aWMgaW50IG9uZXdheV9kaWZmKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzcmMsCisJCSAgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICppZHggPSBzcmNbMF07CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICp0cmVlID0gc3JjWzFdOworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IG8tPnVucGFja19kYXRhOworCisJLyoKKwkgKiBVbnBhY2stdHJlZXMgZ2VuZXJhdGVzIGEgREYvY29uZmxpY3QgZW50cnkgaWYKKwkgKiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgaW4gdGhlIGluZGV4IGFuZCBhIHRyZWUKKwkgKiBpbiB0aGUgdHJlZS4gRnJvbSBhIGRpZmYgc3RhbmRwb2ludCwgdGhhdCdzIGEKKwkgKiBkZWxldGUgb2YgdGhlIHRyZWUgYW5kIGEgY3JlYXRlIG9mIHRoZSBmaWxlLgorCSAqLworCWlmICh0cmVlID09IG8tPmRmX2NvbmZsaWN0X2VudHJ5KQorCQl0cmVlID0gTlVMTDsKKworCWlmIChjZV9wYXRoX21hdGNoKHJldnMtPmRpZmZvcHQucmVwby0+aW5kZXgsCisJCQkgIGlkeCA/IGlkeCA6IHRyZWUsCisJCQkgICZyZXZzLT5wcnVuZV9kYXRhLCBOVUxMKSkgeworCQlkb19vbmV3YXlfZGlmZihvLCBpZHgsIHRyZWUpOworCQlpZiAoZGlmZl9jYW5fcXVpdF9lYXJseSgmcmV2cy0+ZGlmZm9wdCkpIHsKKwkJCW8tPmV4aXRpbmdfZWFybHkgPSAxOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9jYWNoZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnRyZWVfb2lkLAorCQkgICAgICBjb25zdCBjaGFyICp0cmVlX25hbWUsCisJCSAgICAgIGludCBjYWNoZWQpCit7CisJc3RydWN0IHRyZWUgKnRyZWU7CisJc3RydWN0IHRyZWVfZGVzYyB0OworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCisJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QodHJlZV9vaWQpOworCWlmICghdHJlZSkKKwkJcmV0dXJuIGVycm9yKCJiYWQgdHJlZSBvYmplY3QgJXMiLAorCQkJICAgICB0cmVlX25hbWUgPyB0cmVlX25hbWUgOiBvaWRfdG9faGV4KHRyZWVfb2lkKSk7CisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuaGVhZF9pZHggPSAxOworCW9wdHMuaW5kZXhfb25seSA9IGNhY2hlZDsKKwlvcHRzLmRpZmZfaW5kZXhfY2FjaGVkID0gKGNhY2hlZCAmJgorCQkJCSAgIXJldnMtPmRpZmZvcHQuZmxhZ3MuZmluZF9jb3BpZXNfaGFyZGVyKTsKKwlvcHRzLm1lcmdlID0gMTsKKwlvcHRzLmZuID0gb25ld2F5X2RpZmY7CisJb3B0cy51bnBhY2tfZGF0YSA9IHJldnM7CisJb3B0cy5zcmNfaW5kZXggPSByZXZzLT5kaWZmb3B0LnJlcG8tPmluZGV4OworCW9wdHMuZHN0X2luZGV4ID0gTlVMTDsKKwlvcHRzLnBhdGhzcGVjID0gJnJldnMtPmRpZmZvcHQucGF0aHNwZWM7CisJb3B0cy5wYXRoc3BlYy0+cmVjdXJzaXZlID0gMTsKKworCWluaXRfdHJlZV9kZXNjKCZ0LCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCXJldHVybiB1bnBhY2tfdHJlZXMoMSwgJnQsICZvcHRzKTsKK30KKworaW50IHJ1bl9kaWZmX2luZGV4KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IGNhY2hlZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnQ7CisKKwlpZiAocmV2cy0+cGVuZGluZy5uciAhPSAxKQorCQlCVUcoInJ1bl9kaWZmX2luZGV4IG11c3QgYmUgcGFzc2VkIGV4YWN0bHkgb25lIHRyZWUiKTsKKworCXRyYWNlX3BlcmZvcm1hbmNlX2VudGVyKCk7CisJZW50ID0gcmV2cy0+cGVuZGluZy5vYmplY3RzOworCWlmIChkaWZmX2NhY2hlKHJldnMsICZlbnQtPml0ZW0tPm9pZCwgZW50LT5uYW1lLCBjYWNoZWQpKQorCQlleGl0KDEyOCk7CisKKwlkaWZmX3NldF9tbmVtb25pY19wcmVmaXgoJnJldnMtPmRpZmZvcHQsICJjLyIsIGNhY2hlZCA/ICJpLyIgOiAidy8iKTsKKwlkaWZmY29yZV9maXhfZGlmZl9pbmRleCgpOworCWRpZmZjb3JlX3N0ZCgmcmV2cy0+ZGlmZm9wdCk7CisJZGlmZl9mbHVzaCgmcmV2cy0+ZGlmZm9wdCk7CisJdHJhY2VfcGVyZm9ybWFuY2VfbGVhdmUoImRpZmYtaW5kZXgiKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRvX2RpZmZfY2FjaGUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdHJlZV9vaWQsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKworCXJlcG9faW5pdF9yZXZpc2lvbnMob3B0LT5yZXBvLCAmcmV2cywgTlVMTCk7CisJY29weV9wYXRoc3BlYygmcmV2cy5wcnVuZV9kYXRhLCAmb3B0LT5wYXRoc3BlYyk7CisJcmV2cy5kaWZmb3B0ID0gKm9wdDsKKworCWlmIChkaWZmX2NhY2hlKCZyZXZzLCB0cmVlX29pZCwgTlVMTCwgMSkpCisJCWV4aXQoMTI4KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGluZGV4X2RpZmZlcnNfZnJvbShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmRlZiwgY29uc3Qgc3RydWN0IGRpZmZfZmxhZ3MgKmZsYWdzLAorCQkgICAgICAgaW50IGl0YV9pbnZpc2libGVfaW5faW5kZXgpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IG9wdDsKKworCXJlcG9faW5pdF9yZXZpc2lvbnMociwgJnJldiwgTlVMTCk7CisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwlvcHQuZGVmID0gZGVmOworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCAmb3B0KTsKKwlyZXYuZGlmZm9wdC5mbGFncy5xdWljayA9IDE7CisJcmV2LmRpZmZvcHQuZmxhZ3MuZXhpdF93aXRoX3N0YXR1cyA9IDE7CisJaWYgKGZsYWdzKQorCQlkaWZmX2ZsYWdzX29yKCZyZXYuZGlmZm9wdC5mbGFncywgZmxhZ3MpOworCXJldi5kaWZmb3B0Lml0YV9pbnZpc2libGVfaW5faW5kZXggPSBpdGFfaW52aXNpYmxlX2luX2luZGV4OworCXJ1bl9kaWZmX2luZGV4KCZyZXYsIDEpOworCW9iamVjdF9hcnJheV9jbGVhcigmcmV2LnBlbmRpbmcpOworCXJldHVybiAocmV2LmRpZmZvcHQuZmxhZ3MuaGFzX2NoYW5nZXMgIT0gMCk7Cit9CmRpZmYgLS1naXQgYS9kaWZmLW5vLWluZGV4LmMgYi9kaWZmLW5vLWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgxNGVhYgotLS0gL2Rldi9udWxsCisrKyBiL2RpZmYtbm8taW5kZXguYwpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqICJkaWZmIC0tbm8taW5kZXgiIHN1cHBvcnQKKyAqIENvcHlyaWdodCAoYykgMjAwNyBieSBKb2hhbm5lcyBTY2hpbmRlbGluCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggYnkgSnVuaW8gQyBIYW1hbm8KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImRpci5oIgorCitzdGF0aWMgaW50IHJlYWRfZGlyZWN0b3J5X2NvbnRlbnRzKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICplOworCisJaWYgKCEoZGlyID0gb3BlbmRpcihwYXRoKSkpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IG9wZW4gZGlyZWN0b3J5ICVzIiwgcGF0aCk7CisKKwl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpKQorCQlpZiAoIWlzX2RvdF9vcl9kb3Rkb3QoZS0+ZF9uYW1lKSkKKwkJCXN0cmluZ19saXN0X2luc2VydChsaXN0LCBlLT5kX25hbWUpOworCisJY2xvc2VkaXIoZGlyKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgc2hvdWxkIGJlICIoc3RhbmRhcmQgaW5wdXQpIiBvciBzb21ldGhpbmcsIGJ1dCBpdCB3aWxsCisgKiBwcm9iYWJseSBleHBvc2UgbWFueSBtb3JlIGJyZWFrYWdlcyBpbiB0aGUgd2F5IG5vLWluZGV4IGNvZGUKKyAqIGlzIGJvbHRlZCBvbnRvIHRoZSBkaWZmIGNhbGxjaGFpbi4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgZmlsZV9mcm9tX3N0YW5kYXJkX2lucHV0W10gPSAiLSI7CisKK3N0YXRpYyBpbnQgZ2V0X21vZGUoY29uc3QgY2hhciAqcGF0aCwgaW50ICptb2RlKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKCFwYXRoIHx8ICFzdHJjbXAocGF0aCwgIi9kZXYvbnVsbCIpKQorCQkqbW9kZSA9IDA7CisjaWZkZWYgR0lUX1dJTkRPV1NfTkFUSVZFCisJZWxzZSBpZiAoIXN0cmNhc2VjbXAocGF0aCwgIm51bCIpKQorCQkqbW9kZSA9IDA7CisjZW5kaWYKKwllbHNlIGlmIChwYXRoID09IGZpbGVfZnJvbV9zdGFuZGFyZF9pbnB1dCkKKwkJKm1vZGUgPSBjcmVhdGVfY2VfbW9kZSgwNjY2KTsKKwllbHNlIGlmIChsc3RhdChwYXRoLCAmc3QpKQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBhY2Nlc3MgJyVzJyIsIHBhdGgpOworCWVsc2UKKwkJKm1vZGUgPSBzdC5zdF9tb2RlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvcHVsYXRlX2Zyb21fc3RkaW4oc3RydWN0IGRpZmZfZmlsZXNwZWMgKnMpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzaXplX3Qgc2l6ZSA9IDA7CisKKwlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgMCwgMCkgPCAwKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oImVycm9yIHdoaWxlIHJlYWRpbmcgZnJvbSBzdGRpbiIpOworCisJcy0+c2hvdWxkX211bm1hcCA9IDA7CisJcy0+ZGF0YSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJnNpemUpOworCXMtPnNpemUgPSBzaXplOworCXMtPnNob3VsZF9mcmVlID0gMTsKKwlzLT5pc19zdGRpbiA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqbm9pbmRleF9maWxlc3BlYyhjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqczsKKworCWlmICghbmFtZSkKKwkJbmFtZSA9ICIvZGV2L251bGwiOworCXMgPSBhbGxvY19maWxlc3BlYyhuYW1lKTsKKwlmaWxsX2ZpbGVzcGVjKHMsICZudWxsX29pZCwgMCwgbW9kZSk7CisJaWYgKG5hbWUgPT0gZmlsZV9mcm9tX3N0YW5kYXJkX2lucHV0KQorCQlwb3B1bGF0ZV9mcm9tX3N0ZGluKHMpOworCXJldHVybiBzOworfQorCitzdGF0aWMgaW50IHF1ZXVlX2RpZmYoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJICAgICAgY29uc3QgY2hhciAqbmFtZTEsIGNvbnN0IGNoYXIgKm5hbWUyKQoreworCWludCBtb2RlMSA9IDAsIG1vZGUyID0gMDsKKworCWlmIChnZXRfbW9kZShuYW1lMSwgJm1vZGUxKSB8fCBnZXRfbW9kZShuYW1lMiwgJm1vZGUyKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKG1vZGUxICYmIG1vZGUyICYmIFNfSVNESVIobW9kZTEpICE9IFNfSVNESVIobW9kZTIpKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkMSwgKmQyOworCisJCWlmIChTX0lTRElSKG1vZGUxKSkgeworCQkJLyogMiBpcyBmaWxlIHRoYXQgaXMgY3JlYXRlZCAqLworCQkJZDEgPSBub2luZGV4X2ZpbGVzcGVjKE5VTEwsIDApOworCQkJZDIgPSBub2luZGV4X2ZpbGVzcGVjKG5hbWUyLCBtb2RlMik7CisJCQluYW1lMiA9IE5VTEw7CisJCQltb2RlMiA9IDA7CisJCX0gZWxzZSB7CisJCQkvKiAxIGlzIGZpbGUgdGhhdCBpcyBkZWxldGVkICovCisJCQlkMSA9IG5vaW5kZXhfZmlsZXNwZWMobmFtZTEsIG1vZGUxKTsKKwkJCWQyID0gbm9pbmRleF9maWxlc3BlYyhOVUxMLCAwKTsKKwkJCW5hbWUxID0gTlVMTDsKKwkJCW1vZGUxID0gMDsKKwkJfQorCQkvKiBlbWl0IHRoYXQgZmlsZSAqLworCQlkaWZmX3F1ZXVlKCZkaWZmX3F1ZXVlZF9kaWZmLCBkMSwgZDIpOworCisJCS8qIGFuZCB0aGVuIGxldCB0aGUgZW50aXJlIGRpcmVjdG9yeSBiZSBjcmVhdGVkIG9yIGRlbGV0ZWQgKi8KKwl9CisKKwlpZiAoU19JU0RJUihtb2RlMSkgfHwgU19JU0RJUihtb2RlMikpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWZmZXIxID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgYnVmZmVyMiA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcDEgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwkJc3RydWN0IHN0cmluZ19saXN0IHAyID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJCWludCBpMSwgaTIsIHJldCA9IDA7CisJCXNpemVfdCBsZW4xID0gMCwgbGVuMiA9IDA7CisKKwkJaWYgKG5hbWUxICYmIHJlYWRfZGlyZWN0b3J5X2NvbnRlbnRzKG5hbWUxLCAmcDEpKQorCQkJcmV0dXJuIC0xOworCQlpZiAobmFtZTIgJiYgcmVhZF9kaXJlY3RvcnlfY29udGVudHMobmFtZTIsICZwMikpIHsKKwkJCXN0cmluZ19saXN0X2NsZWFyKCZwMSwgMCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAobmFtZTEpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZmZlcjEsIG5hbWUxKTsKKwkJCXN0cmJ1Zl9jb21wbGV0ZSgmYnVmZmVyMSwgJy8nKTsKKwkJCWxlbjEgPSBidWZmZXIxLmxlbjsKKwkJfQorCisJCWlmIChuYW1lMikgeworCQkJc3RyYnVmX2FkZHN0cigmYnVmZmVyMiwgbmFtZTIpOworCQkJc3RyYnVmX2NvbXBsZXRlKCZidWZmZXIyLCAnLycpOworCQkJbGVuMiA9IGJ1ZmZlcjIubGVuOworCQl9CisKKwkJZm9yIChpMSA9IGkyID0gMDsgIXJldCAmJiAoaTEgPCBwMS5uciB8fCBpMiA8IHAyLm5yKTsgKSB7CisJCQljb25zdCBjaGFyICpuMSwgKm4yOworCQkJaW50IGNvbXA7CisKKwkJCXN0cmJ1Zl9zZXRsZW4oJmJ1ZmZlcjEsIGxlbjEpOworCQkJc3RyYnVmX3NldGxlbigmYnVmZmVyMiwgbGVuMik7CisKKwkJCWlmIChpMSA9PSBwMS5ucikKKwkJCQljb21wID0gMTsKKwkJCWVsc2UgaWYgKGkyID09IHAyLm5yKQorCQkJCWNvbXAgPSAtMTsKKwkJCWVsc2UKKwkJCQljb21wID0gc3RyY21wKHAxLml0ZW1zW2kxXS5zdHJpbmcsIHAyLml0ZW1zW2kyXS5zdHJpbmcpOworCisJCQlpZiAoY29tcCA+IDApCisJCQkJbjEgPSBOVUxMOworCQkJZWxzZSB7CisJCQkJc3RyYnVmX2FkZHN0cigmYnVmZmVyMSwgcDEuaXRlbXNbaTErK10uc3RyaW5nKTsKKwkJCQluMSA9IGJ1ZmZlcjEuYnVmOworCQkJfQorCisJCQlpZiAoY29tcCA8IDApCisJCQkJbjIgPSBOVUxMOworCQkJZWxzZSB7CisJCQkJc3RyYnVmX2FkZHN0cigmYnVmZmVyMiwgcDIuaXRlbXNbaTIrK10uc3RyaW5nKTsKKwkJCQluMiA9IGJ1ZmZlcjIuYnVmOworCQkJfQorCisJCQlyZXQgPSBxdWV1ZV9kaWZmKG8sIG4xLCBuMik7CisJCX0KKwkJc3RyaW5nX2xpc3RfY2xlYXIoJnAxLCAwKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJnAyLCAwKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcjEpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyMik7CisKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZDEsICpkMjsKKworCQlpZiAoby0+ZmxhZ3MucmV2ZXJzZV9kaWZmKSB7CisJCQlTV0FQKG1vZGUxLCBtb2RlMik7CisJCQlTV0FQKG5hbWUxLCBuYW1lMik7CisJCX0KKworCQlkMSA9IG5vaW5kZXhfZmlsZXNwZWMobmFtZTEsIG1vZGUxKTsKKwkJZDIgPSBub2luZGV4X2ZpbGVzcGVjKG5hbWUyLCBtb2RlMik7CisJCWRpZmZfcXVldWUoJmRpZmZfcXVldWVkX2RpZmYsIGQxLCBkMik7CisJCXJldHVybiAwOworCX0KK30KKworLyogYXBwZW5kIGJhc2VuYW1lIG9mIEYgdG8gRCAqLworc3RhdGljIHZvaWQgYXBwZW5kX2Jhc2VuYW1lKHN0cnVjdCBzdHJidWYgKnBhdGgsIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZSkKK3sKKwljb25zdCBjaGFyICp0YWlsID0gc3RycmNocihmaWxlLCAnLycpOworCisJc3RyYnVmX2FkZHN0cihwYXRoLCBkaXIpOworCXdoaWxlIChwYXRoLT5sZW4gJiYgcGF0aC0+YnVmW3BhdGgtPmxlbiAtIDFdID09ICcvJykKKwkJcGF0aC0+bGVuLS07CisJc3RyYnVmX2FkZGNoKHBhdGgsICcvJyk7CisJc3RyYnVmX2FkZHN0cihwYXRoLCB0YWlsID8gdGFpbCArIDEgOiBmaWxlKTsKK30KKworLyoKKyAqIERXSU0gImRpZmYgRCBGIiBpbnRvICJkaWZmIEQvRiBGIiBhbmQgImRpZmYgRiBEIiBpbnRvICJkaWZmIEYgRC9GIgorICogTm90ZSB0aGF0IHdlIGFwcGVuZCB0aGUgYmFzZW5hbWUgb2YgRiB0byBELywgc28gImRpZmYgYS9iL2ZpbGUgRCIKKyAqIGJlY29tZXMgImRpZmYgYS9iL2ZpbGUgRC9maWxlIiwgbm90ICJkaWZmIGEvYi9maWxlIEQvYS9iL2ZpbGUiLgorICovCitzdGF0aWMgdm9pZCBmaXh1cF9wYXRocyhjb25zdCBjaGFyICoqcGF0aCwgc3RydWN0IHN0cmJ1ZiAqcmVwbGFjZW1lbnQpCit7CisJdW5zaWduZWQgaW50IGlzZGlyMCwgaXNkaXIxOworCisJaWYgKHBhdGhbMF0gPT0gZmlsZV9mcm9tX3N0YW5kYXJkX2lucHV0IHx8CisJICAgIHBhdGhbMV0gPT0gZmlsZV9mcm9tX3N0YW5kYXJkX2lucHV0KQorCQlyZXR1cm47CisJaXNkaXIwID0gaXNfZGlyZWN0b3J5KHBhdGhbMF0pOworCWlzZGlyMSA9IGlzX2RpcmVjdG9yeShwYXRoWzFdKTsKKwlpZiAoaXNkaXIwID09IGlzZGlyMSkKKwkJcmV0dXJuOworCWlmIChpc2RpcjApIHsKKwkJYXBwZW5kX2Jhc2VuYW1lKHJlcGxhY2VtZW50LCBwYXRoWzBdLCBwYXRoWzFdKTsKKwkJcGF0aFswXSA9IHJlcGxhY2VtZW50LT5idWY7CisJfSBlbHNlIHsKKwkJYXBwZW5kX2Jhc2VuYW1lKHJlcGxhY2VtZW50LCBwYXRoWzFdLCBwYXRoWzBdKTsKKwkJcGF0aFsxXSA9IHJlcGxhY2VtZW50LT5idWY7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRpZmZfbm9faW5kZXhfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGRpZmYgLS1uby1pbmRleCBbPG9wdGlvbnM+XSA8cGF0aD4gPHBhdGg+IiksCisJTlVMTAorfTsKKworaW50IGRpZmZfbm9faW5kZXgoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkgIGludCBpbXBsaWNpdF9ub19pbmRleCwKKwkJICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGksIG5vX2luZGV4OworCWNvbnN0IGNoYXIgKnBhdGhzWzJdOworCXN0cnVjdCBzdHJidWYgcmVwbGFjZW1lbnQgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpwcmVmaXggPSByZXZzLT5wcmVmaXg7CisJc3RydWN0IG9wdGlvbiBub19pbmRleF9vcHRpb25zW10gPSB7CisJCU9QVF9CT09MX0YoMCwgIm5vLWluZGV4IiwgJm5vX2luZGV4LCAiIiwKKwkJCSAgIFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9ISURERU4pLAorCQlPUFRfRU5EKCksCisJfTsKKwlzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zOworCisJb3B0aW9ucyA9IHBhcnNlX29wdGlvbnNfY29uY2F0KG5vX2luZGV4X29wdGlvbnMsCisJCQkJICAgICAgIHJldnMtPmRpZmZvcHQucGFyc2VvcHRzKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCByZXZzLT5wcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGRpZmZfbm9faW5kZXhfdXNhZ2UsIDApOworCWlmIChhcmdjICE9IDIpIHsKKwkJaWYgKGltcGxpY2l0X25vX2luZGV4KQorCQkJd2FybmluZyhfKCJOb3QgYSBnaXQgcmVwb3NpdG9yeS4gVXNlIC0tbm8taW5kZXggdG8gIgorCQkJCSAgImNvbXBhcmUgdHdvIHBhdGhzIG91dHNpZGUgYSB3b3JraW5nIHRyZWUiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhkaWZmX25vX2luZGV4X3VzYWdlLCBvcHRpb25zKTsKKwl9CisJRlJFRV9BTkRfTlVMTChvcHRpb25zKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnAgPSBhcmd2W2FyZ2MgLSAyICsgaV07CisJCWlmICghc3RyY21wKHAsICItIikpCisJCQkvKgorCQkJICogc3RkaW4gc2hvdWxkIGJlIHNwZWxsZWQgYXMgIi0iOyBpZiB5b3UgaGF2ZQorCQkJICogcGF0aCB0aGF0IGlzICItIiwgc3BlbGwgaXQgYXMgIi4vLSIuCisJCQkgKi8KKwkJCXAgPSBmaWxlX2Zyb21fc3RhbmRhcmRfaW5wdXQ7CisJCWVsc2UgaWYgKHByZWZpeCkKKwkJCXAgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBwKTsKKwkJcGF0aHNbaV0gPSBwOworCX0KKworCWZpeHVwX3BhdGhzKHBhdGhzLCAmcmVwbGFjZW1lbnQpOworCisJcmV2cy0+ZGlmZm9wdC5za2lwX3N0YXRfdW5tYXRjaCA9IDE7CisJaWYgKCFyZXZzLT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpCisJCXJldnMtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOworCisJcmV2cy0+ZGlmZm9wdC5mbGFncy5ub19pbmRleCA9IDE7CisKKwlyZXZzLT5kaWZmb3B0LmZsYWdzLnJlbGF0aXZlX25hbWUgPSAxOworCXJldnMtPmRpZmZvcHQucHJlZml4ID0gcHJlZml4OworCisJcmV2cy0+bWF4X2NvdW50ID0gLTI7CisJZGlmZl9zZXR1cF9kb25lKCZyZXZzLT5kaWZmb3B0KTsKKworCXNldHVwX2RpZmZfcGFnZXIoJnJldnMtPmRpZmZvcHQpOworCXJldnMtPmRpZmZvcHQuZmxhZ3MuZXhpdF93aXRoX3N0YXR1cyA9IDE7CisKKwlpZiAocXVldWVfZGlmZigmcmV2cy0+ZGlmZm9wdCwgcGF0aHNbMF0sIHBhdGhzWzFdKSkKKwkJcmV0dXJuIDE7CisJZGlmZl9zZXRfbW5lbW9uaWNfcHJlZml4KCZyZXZzLT5kaWZmb3B0LCAiMS8iLCAiMi8iKTsKKwlkaWZmY29yZV9zdGQoJnJldnMtPmRpZmZvcHQpOworCWRpZmZfZmx1c2goJnJldnMtPmRpZmZvcHQpOworCisJc3RyYnVmX3JlbGVhc2UoJnJlcGxhY2VtZW50KTsKKworCS8qCisJICogVGhlIHJldHVybiBjb2RlIGZvciAtLW5vLWluZGV4IGltaXRhdGVzIGRpZmYoMSk6CisJICogMCA9IG5vIGNoYW5nZXMsIDEgPSBjaGFuZ2VzLCBlbHNlIGVycm9yCisJICovCisJcmV0dXJuIGRpZmZfcmVzdWx0X2NvZGUoJnJldnMtPmRpZmZvcHQsIDApOworfQpkaWZmIC0tZ2l0IGEvZGlmZi5jIGIvZGlmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYWQ2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9kaWZmLmMKQEAgLTAsMCArMSw2OTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInRlbXBmaWxlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInVzZXJkaWZmLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJsbC1tZXJnZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgImdyYXBoLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiaGVscC5oIgorI2luY2x1ZGUgInByb21pc29yLXJlbW90ZS5oIgorCisjaWZkZWYgTk9fRkFTVF9XT1JLSU5HX0RJUkVDVE9SWQorI2RlZmluZSBGQVNUX1dPUktJTkdfRElSRUNUT1JZIDAKKyNlbHNlCisjZGVmaW5lIEZBU1RfV09SS0lOR19ESVJFQ1RPUlkgMQorI2VuZGlmCisKK3N0YXRpYyBpbnQgZGlmZl9kZXRlY3RfcmVuYW1lX2RlZmF1bHQ7CitzdGF0aWMgaW50IGRpZmZfaW5kZW50X2hldXJpc3RpYyA9IDE7CitzdGF0aWMgaW50IGRpZmZfcmVuYW1lX2xpbWl0X2RlZmF1bHQgPSA0MDA7CitzdGF0aWMgaW50IGRpZmZfc3VwcHJlc3NfYmxhbmtfZW1wdHk7CitzdGF0aWMgaW50IGRpZmZfdXNlX2NvbG9yX2RlZmF1bHQgPSAtMTsKK3N0YXRpYyBpbnQgZGlmZl9jb2xvcl9tb3ZlZF9kZWZhdWx0Oworc3RhdGljIGludCBkaWZmX2NvbG9yX21vdmVkX3dzX2RlZmF1bHQ7CitzdGF0aWMgaW50IGRpZmZfY29udGV4dF9kZWZhdWx0ID0gMzsKK3N0YXRpYyBpbnQgZGlmZl9pbnRlcmh1bmtfY29udGV4dF9kZWZhdWx0Oworc3RhdGljIGNvbnN0IGNoYXIgKmRpZmZfd29yZF9yZWdleF9jZmc7CitzdGF0aWMgY29uc3QgY2hhciAqZXh0ZXJuYWxfZGlmZl9jbWRfY2ZnOworc3RhdGljIGNvbnN0IGNoYXIgKmRpZmZfb3JkZXJfZmlsZV9jZmc7CitpbnQgZGlmZl9hdXRvX3JlZnJlc2hfaW5kZXggPSAxOworc3RhdGljIGludCBkaWZmX21uZW1vbmljX3ByZWZpeDsKK3N0YXRpYyBpbnQgZGlmZl9ub19wcmVmaXg7CitzdGF0aWMgaW50IGRpZmZfc3RhdF9ncmFwaF93aWR0aDsKK3N0YXRpYyBpbnQgZGlmZl9kaXJzdGF0X3Blcm1pbGxlX2RlZmF1bHQgPSAzMDsKK3N0YXRpYyBzdHJ1Y3QgZGlmZl9vcHRpb25zIGRlZmF1bHRfZGlmZl9vcHRpb25zOworc3RhdGljIGxvbmcgZGlmZl9hbGdvcml0aG07CitzdGF0aWMgdW5zaWduZWQgd3NfZXJyb3JfaGlnaGxpZ2h0X2RlZmF1bHQgPSBXU0VIX05FVzsKKworc3RhdGljIGNoYXIgZGlmZl9jb2xvcnNbXVtDT0xPUl9NQVhMRU5dID0geworCUdJVF9DT0xPUl9SRVNFVCwKKwlHSVRfQ09MT1JfTk9STUFMLAkvKiBDT05URVhUICovCisJR0lUX0NPTE9SX0JPTEQsCQkvKiBNRVRBSU5GTyAqLworCUdJVF9DT0xPUl9DWUFOLAkJLyogRlJBR0lORk8gKi8KKwlHSVRfQ09MT1JfUkVELAkJLyogT0xEICovCisJR0lUX0NPTE9SX0dSRUVOLAkvKiBORVcgKi8KKwlHSVRfQ09MT1JfWUVMTE9XLAkvKiBDT01NSVQgKi8KKwlHSVRfQ09MT1JfQkdfUkVELAkvKiBXSElURVNQQUNFICovCisJR0lUX0NPTE9SX05PUk1BTCwJLyogRlVOQ0lORk8gKi8KKwlHSVRfQ09MT1JfQk9MRF9NQUdFTlRBLAkvKiBPTERfTU9WRUQgKi8KKwlHSVRfQ09MT1JfQk9MRF9CTFVFLAkvKiBPTERfTU9WRUQgQUxURVJOQVRJVkUgKi8KKwlHSVRfQ09MT1JfRkFJTlQsCS8qIE9MRF9NT1ZFRF9ESU0gKi8KKwlHSVRfQ09MT1JfRkFJTlRfSVRBTElDLAkvKiBPTERfTU9WRURfQUxURVJOQVRJVkVfRElNICovCisJR0lUX0NPTE9SX0JPTERfQ1lBTiwJLyogTkVXX01PVkVEICovCisJR0lUX0NPTE9SX0JPTERfWUVMTE9XLAkvKiBORVdfTU9WRUQgQUxURVJOQVRJVkUgKi8KKwlHSVRfQ09MT1JfRkFJTlQsCS8qIE5FV19NT1ZFRF9ESU0gKi8KKwlHSVRfQ09MT1JfRkFJTlRfSVRBTElDLAkvKiBORVdfTU9WRURfQUxURVJOQVRJVkVfRElNICovCisJR0lUX0NPTE9SX0ZBSU5ULAkvKiBDT05URVhUX0RJTSAqLworCUdJVF9DT0xPUl9GQUlOVF9SRUQsCS8qIE9MRF9ESU0gKi8KKwlHSVRfQ09MT1JfRkFJTlRfR1JFRU4sCS8qIE5FV19ESU0gKi8KKwlHSVRfQ09MT1JfQk9MRCwJCS8qIENPTlRFWFRfQk9MRCAqLworCUdJVF9DT0xPUl9CT0xEX1JFRCwJLyogT0xEX0JPTEQgKi8KKwlHSVRfQ09MT1JfQk9MRF9HUkVFTiwJLyogTkVXX0JPTEQgKi8KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb2xvcl9kaWZmX3Nsb3RzW10gPSB7CisJW0RJRkZfQ09OVEVYVF0JCSAgICAgID0gImNvbnRleHQiLAorCVtESUZGX01FVEFJTkZPXQkJICAgICAgPSAibWV0YSIsCisJW0RJRkZfRlJBR0lORk9dCQkgICAgICA9ICJmcmFnIiwKKwlbRElGRl9GSUxFX09MRF0JCSAgICAgID0gIm9sZCIsCisJW0RJRkZfRklMRV9ORVddCQkgICAgICA9ICJuZXciLAorCVtESUZGX0NPTU1JVF0JCSAgICAgID0gImNvbW1pdCIsCisJW0RJRkZfV0hJVEVTUEFDRV0JICAgICAgPSAid2hpdGVzcGFjZSIsCisJW0RJRkZfRlVOQ0lORk9dCQkgICAgICA9ICJmdW5jIiwKKwlbRElGRl9GSUxFX09MRF9NT1ZFRF0JICAgICAgPSAib2xkTW92ZWQiLAorCVtESUZGX0ZJTEVfT0xEX01PVkVEX0FMVF0gICAgID0gIm9sZE1vdmVkQWx0ZXJuYXRpdmUiLAorCVtESUZGX0ZJTEVfT0xEX01PVkVEX0RJTV0gICAgID0gIm9sZE1vdmVkRGltbWVkIiwKKwlbRElGRl9GSUxFX09MRF9NT1ZFRF9BTFRfRElNXSA9ICJvbGRNb3ZlZEFsdGVybmF0aXZlRGltbWVkIiwKKwlbRElGRl9GSUxFX05FV19NT1ZFRF0JICAgICAgPSAibmV3TW92ZWQiLAorCVtESUZGX0ZJTEVfTkVXX01PVkVEX0FMVF0gICAgID0gIm5ld01vdmVkQWx0ZXJuYXRpdmUiLAorCVtESUZGX0ZJTEVfTkVXX01PVkVEX0RJTV0gICAgID0gIm5ld01vdmVkRGltbWVkIiwKKwlbRElGRl9GSUxFX05FV19NT1ZFRF9BTFRfRElNXSA9ICJuZXdNb3ZlZEFsdGVybmF0aXZlRGltbWVkIiwKKwlbRElGRl9DT05URVhUX0RJTV0JICAgICAgPSAiY29udGV4dERpbW1lZCIsCisJW0RJRkZfRklMRV9PTERfRElNXQkgICAgICA9ICJvbGREaW1tZWQiLAorCVtESUZGX0ZJTEVfTkVXX0RJTV0JICAgICAgPSAibmV3RGltbWVkIiwKKwlbRElGRl9DT05URVhUX0JPTERdCSAgICAgID0gImNvbnRleHRCb2xkIiwKKwlbRElGRl9GSUxFX09MRF9CT0xEXQkgICAgICA9ICJvbGRCb2xkIiwKKwlbRElGRl9GSUxFX05FV19CT0xEXQkgICAgICA9ICJuZXdCb2xkIiwKK307CisKK2RlZmluZV9saXN0X2NvbmZpZ19hcnJheV9leHRyYShjb2xvcl9kaWZmX3Nsb3RzLCB7InBsYWluIn0pOworCitzdGF0aWMgaW50IHBhcnNlX2RpZmZfY29sb3Jfc2xvdChjb25zdCBjaGFyICp2YXIpCit7CisJaWYgKCFzdHJjYXNlY21wKHZhciwgInBsYWluIikpCisJCXJldHVybiBESUZGX0NPTlRFWFQ7CisJcmV0dXJuIExPT0tVUF9DT05GSUcoY29sb3JfZGlmZl9zbG90cywgdmFyKTsKK30KKworc3RhdGljIGludCBwYXJzZV9kaXJzdGF0X3BhcmFtcyhzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCBjb25zdCBjaGFyICpwYXJhbXNfc3RyaW5nLAorCQkJCXN0cnVjdCBzdHJidWYgKmVycm1zZykKK3sKKwljaGFyICpwYXJhbXNfY29weSA9IHhzdHJkdXAocGFyYW1zX3N0cmluZyk7CisJc3RydWN0IHN0cmluZ19saXN0IHBhcmFtcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwlpZiAoKnBhcmFtc19jb3B5KQorCQlzdHJpbmdfbGlzdF9zcGxpdF9pbl9wbGFjZSgmcGFyYW1zLCBwYXJhbXNfY29weSwgJywnLCAtMSk7CisJZm9yIChpID0gMDsgaSA8IHBhcmFtcy5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnAgPSBwYXJhbXMuaXRlbXNbaV0uc3RyaW5nOworCQlpZiAoIXN0cmNtcChwLCAiY2hhbmdlcyIpKSB7CisJCQlvcHRpb25zLT5mbGFncy5kaXJzdGF0X2J5X2xpbmUgPSAwOworCQkJb3B0aW9ucy0+ZmxhZ3MuZGlyc3RhdF9ieV9maWxlID0gMDsKKwkJfSBlbHNlIGlmICghc3RyY21wKHAsICJsaW5lcyIpKSB7CisJCQlvcHRpb25zLT5mbGFncy5kaXJzdGF0X2J5X2xpbmUgPSAxOworCQkJb3B0aW9ucy0+ZmxhZ3MuZGlyc3RhdF9ieV9maWxlID0gMDsKKwkJfSBlbHNlIGlmICghc3RyY21wKHAsICJmaWxlcyIpKSB7CisJCQlvcHRpb25zLT5mbGFncy5kaXJzdGF0X2J5X2xpbmUgPSAwOworCQkJb3B0aW9ucy0+ZmxhZ3MuZGlyc3RhdF9ieV9maWxlID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHAsICJub25jdW11bGF0aXZlIikpIHsKKwkJCW9wdGlvbnMtPmZsYWdzLmRpcnN0YXRfY3VtdWxhdGl2ZSA9IDA7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChwLCAiY3VtdWxhdGl2ZSIpKSB7CisJCQlvcHRpb25zLT5mbGFncy5kaXJzdGF0X2N1bXVsYXRpdmUgPSAxOworCQl9IGVsc2UgaWYgKGlzZGlnaXQoKnApKSB7CisJCQljaGFyICplbmQ7CisJCQlpbnQgcGVybWlsbGUgPSBzdHJ0b3VsKHAsICZlbmQsIDEwKSAqIDEwOworCQkJaWYgKCplbmQgPT0gJy4nICYmIGlzZGlnaXQoKisrZW5kKSkgeworCQkJCS8qIG9ubHkgdXNlIGZpcnN0IGRpZ2l0ICovCisJCQkJcGVybWlsbGUgKz0gKmVuZCAtICcwJzsKKwkJCQkvKiAuLiBhbmQgaWdub3JlIGFueSBmdXJ0aGVyIGRpZ2l0cyAqLworCQkJCXdoaWxlIChpc2RpZ2l0KCorK2VuZCkpCisJCQkJCTsgLyogbm90aGluZyAqLworCQkJfQorCQkJaWYgKCEqZW5kKQorCQkJCW9wdGlvbnMtPmRpcnN0YXRfcGVybWlsbGUgPSBwZXJtaWxsZTsKKwkJCWVsc2UgeworCQkJCXN0cmJ1Zl9hZGRmKGVycm1zZywgXygiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIiksCisJCQkJCSAgICBwKTsKKwkJCQlyZXQrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9hZGRmKGVycm1zZywgXygiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclcydcbiIpLCBwKTsKKwkJCXJldCsrOworCQl9CisKKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJnBhcmFtcywgMCk7CisJZnJlZShwYXJhbXNfY29weSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwYXJzZV9zdWJtb2R1bGVfcGFyYW1zKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKHZhbHVlLCAibG9nIikpCisJCW9wdGlvbnMtPnN1Ym1vZHVsZV9mb3JtYXQgPSBESUZGX1NVQk1PRFVMRV9MT0c7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInNob3J0IikpCisJCW9wdGlvbnMtPnN1Ym1vZHVsZV9mb3JtYXQgPSBESUZGX1NVQk1PRFVMRV9TSE9SVDsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiZGlmZiIpKQorCQlvcHRpb25zLT5zdWJtb2R1bGVfZm9ybWF0ID0gRElGRl9TVUJNT0RVTEVfSU5MSU5FX0RJRkY7CisJLyoKKwkgKiBQbGVhc2UgdXBkYXRlICRfX2dpdF9kaWZmX3N1Ym1vZHVsZV9mb3JtYXRzIGluCisJICogZ2l0LWNvbXBsZXRpb24uYmFzaCB3aGVuIHlvdSBhZGQgbmV3IGZvcm1hdHMuCisJICovCisJZWxzZQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfY29uZmlnX3JlbmFtZShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybiBESUZGX0RFVEVDVF9SRU5BTUU7CisJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAiY29waWVzIikgfHwgIXN0cmNhc2VjbXAodmFsdWUsICJjb3B5IikpCisJCXJldHVybiAgRElGRl9ERVRFQ1RfQ09QWTsKKwlyZXR1cm4gZ2l0X2NvbmZpZ19ib29sKHZhcix2YWx1ZSkgPyBESUZGX0RFVEVDVF9SRU5BTUUgOiAwOworfQorCitsb25nIHBhcnNlX2FsZ29yaXRobV92YWx1ZShjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJteWVycyIpIHx8ICFzdHJjYXNlY21wKHZhbHVlLCAiZGVmYXVsdCIpKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgIm1pbmltYWwiKSkKKwkJcmV0dXJuIFhERl9ORUVEX01JTklNQUw7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJwYXRpZW5jZSIpKQorCQlyZXR1cm4gWERGX1BBVElFTkNFX0RJRkY7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJoaXN0b2dyYW0iKSkKKwkJcmV0dXJuIFhERl9ISVNUT0dSQU1fRElGRjsKKwkvKgorCSAqIFBsZWFzZSB1cGRhdGUgJF9fZ2l0X2RpZmZfYWxnb3JpdGhtcyBpbiBnaXQtY29tcGxldGlvbi5iYXNoCisJICogd2hlbiB5b3UgYWRkIG5ldyBhbGdvcml0aG1zLgorCSAqLworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBwYXJzZV9vbmVfdG9rZW4oY29uc3QgY2hhciAqKmFyZywgY29uc3QgY2hhciAqdG9rZW4pCit7CisJY29uc3QgY2hhciAqcmVzdDsKKwlpZiAoc2tpcF9wcmVmaXgoKmFyZywgdG9rZW4sICZyZXN0KSAmJiAoISpyZXN0IHx8ICpyZXN0ID09ICcsJykpIHsKKwkJKmFyZyA9IHJlc3Q7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV93c19lcnJvcl9oaWdobGlnaHQoY29uc3QgY2hhciAqYXJnKQoreworCWNvbnN0IGNoYXIgKm9yaWdfYXJnID0gYXJnOworCXVuc2lnbmVkIHZhbCA9IDA7CisKKwl3aGlsZSAoKmFyZykgeworCQlpZiAocGFyc2Vfb25lX3Rva2VuKCZhcmcsICJub25lIikpCisJCQl2YWwgPSAwOworCQllbHNlIGlmIChwYXJzZV9vbmVfdG9rZW4oJmFyZywgImRlZmF1bHQiKSkKKwkJCXZhbCA9IFdTRUhfTkVXOworCQllbHNlIGlmIChwYXJzZV9vbmVfdG9rZW4oJmFyZywgImFsbCIpKQorCQkJdmFsID0gV1NFSF9ORVcgfCBXU0VIX09MRCB8IFdTRUhfQ09OVEVYVDsKKwkJZWxzZSBpZiAocGFyc2Vfb25lX3Rva2VuKCZhcmcsICJuZXciKSkKKwkJCXZhbCB8PSBXU0VIX05FVzsKKwkJZWxzZSBpZiAocGFyc2Vfb25lX3Rva2VuKCZhcmcsICJvbGQiKSkKKwkJCXZhbCB8PSBXU0VIX09MRDsKKwkJZWxzZSBpZiAocGFyc2Vfb25lX3Rva2VuKCZhcmcsICJjb250ZXh0IikpCisJCQl2YWwgfD0gV1NFSF9DT05URVhUOworCQllbHNlIHsKKwkJCXJldHVybiAtMSAtIChpbnQpKGFyZyAtIG9yaWdfYXJnKTsKKwkJfQorCQlpZiAoKmFyZykKKwkJCWFyZysrOworCX0KKwlyZXR1cm4gdmFsOworfQorCisvKgorICogVGhlc2UgYXJlIHRvIGdpdmUgVUkgbGF5ZXIgZGVmYXVsdHMuCisgKiBUaGUgY29yZS1sZXZlbCBjb21tYW5kcyBzdWNoIGFzIGdpdC1kaWZmLWZpbGVzIHNob3VsZAorICogbmV2ZXIgYmUgYWZmZWN0ZWQgYnkgdGhlIHNldHRpbmcgb2YgZGlmZi5yZW5hbWVzCisgKiB0aGUgdXNlciBoYXBwZW5zIHRvIGhhdmUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAqLwordm9pZCBpbml0X2RpZmZfdWlfZGVmYXVsdHModm9pZCkKK3sKKwlkaWZmX2RldGVjdF9yZW5hbWVfZGVmYXVsdCA9IERJRkZfREVURUNUX1JFTkFNRTsKK30KKworaW50IGdpdF9kaWZmX2hldXJpc3RpY19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5pbmRlbnRoZXVyaXN0aWMiKSkKKwkJZGlmZl9pbmRlbnRfaGV1cmlzdGljID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX2NvbG9yX21vdmVkKGNvbnN0IGNoYXIgKmFyZykKK3sKKwlzd2l0Y2ggKGdpdF9wYXJzZV9tYXliZV9ib29sKGFyZykpIHsKKwljYXNlIDA6CisJCXJldHVybiBDT0xPUl9NT1ZFRF9OTzsKKwljYXNlIDE6CisJCXJldHVybiBDT0xPUl9NT1ZFRF9ERUZBVUxUOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmICghc3RyY21wKGFyZywgIm5vIikpCisJCXJldHVybiBDT0xPUl9NT1ZFRF9OTzsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInBsYWluIikpCisJCXJldHVybiBDT0xPUl9NT1ZFRF9QTEFJTjsKKwllbHNlIGlmICghc3RyY21wKGFyZywgImJsb2NrcyIpKQorCQlyZXR1cm4gQ09MT1JfTU9WRURfQkxPQ0tTOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiemVicmEiKSkKKwkJcmV0dXJuIENPTE9SX01PVkVEX1pFQlJBOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZGVmYXVsdCIpKQorCQlyZXR1cm4gQ09MT1JfTU9WRURfREVGQVVMVDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgImRpbW1lZC16ZWJyYSIpKQorCQlyZXR1cm4gQ09MT1JfTU9WRURfWkVCUkFfRElNOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZGltbWVkX3plYnJhIikpCisJCXJldHVybiBDT0xPUl9NT1ZFRF9aRUJSQV9ESU07CisJZWxzZQorCQlyZXR1cm4gZXJyb3IoXygiY29sb3IgbW92ZWQgc2V0dGluZyBtdXN0IGJlIG9uZSBvZiAnbm8nLCAnZGVmYXVsdCcsICdibG9ja3MnLCAnemVicmEnLCAnZGltbWVkLXplYnJhJywgJ3BsYWluJyIpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHBhcnNlX2NvbG9yX21vdmVkX3dzKGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppOworCisJc3RyaW5nX2xpc3Rfc3BsaXQoJmwsIGFyZywgJywnLCAtMSk7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGksICZsKSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZHN0cigmc2IsIGktPnN0cmluZyk7CisJCXN0cmJ1Zl90cmltKCZzYik7CisKKwkJaWYgKCFzdHJjbXAoc2IuYnVmLCAibm8iKSkKKwkJCXJldCA9IDA7CisJCWVsc2UgaWYgKCFzdHJjbXAoc2IuYnVmLCAiaWdub3JlLXNwYWNlLWNoYW5nZSIpKQorCQkJcmV0IHw9IFhERl9JR05PUkVfV0hJVEVTUEFDRV9DSEFOR0U7CisJCWVsc2UgaWYgKCFzdHJjbXAoc2IuYnVmLCAiaWdub3JlLXNwYWNlLWF0LWVvbCIpKQorCQkJcmV0IHw9IFhERl9JR05PUkVfV0hJVEVTUEFDRV9BVF9FT0w7CisJCWVsc2UgaWYgKCFzdHJjbXAoc2IuYnVmLCAiaWdub3JlLWFsbC1zcGFjZSIpKQorCQkJcmV0IHw9IFhERl9JR05PUkVfV0hJVEVTUEFDRTsKKwkJZWxzZSBpZiAoIXN0cmNtcChzYi5idWYsICJhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UiKSkKKwkJCXJldCB8PSBDT0xPUl9NT1ZFRF9XU19BTExPV19JTkRFTlRBVElPTl9DSEFOR0U7CisJCWVsc2UgeworCQkJcmV0IHw9IENPTE9SX01PVkVEX1dTX0VSUk9SOworCQkJZXJyb3IoXygidW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcycsIHBvc3NpYmxlIHZhbHVlcyBhcmUgJ2lnbm9yZS1zcGFjZS1jaGFuZ2UnLCAnaWdub3JlLXNwYWNlLWF0LWVvbCcsICdpZ25vcmUtYWxsLXNwYWNlJywgJ2FsbG93LWluZGVudGF0aW9uLWNoYW5nZSciKSwgc2IuYnVmKTsKKwkJfQorCisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJfQorCisJaWYgKChyZXQgJiBDT0xPUl9NT1ZFRF9XU19BTExPV19JTkRFTlRBVElPTl9DSEFOR0UpICYmCisJICAgIChyZXQgJiBYREZfV0hJVEVTUEFDRV9GTEFHUykpIHsKKwkJZXJyb3IoXygiY29sb3ItbW92ZWQtd3M6IGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciB3aGl0ZXNwYWNlIG1vZGVzIikpOworCQlyZXQgfD0gQ09MT1JfTU9WRURfV1NfRVJST1I7CisJfQorCisJc3RyaW5nX2xpc3RfY2xlYXIoJmwsIDApOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGdpdF9kaWZmX3VpX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLmNvbG9yIikgfHwgIXN0cmNtcCh2YXIsICJjb2xvci5kaWZmIikpIHsKKwkJZGlmZl91c2VfY29sb3JfZGVmYXVsdCA9IGdpdF9jb25maWdfY29sb3Jib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5jb2xvcm1vdmVkIikpIHsKKwkJaW50IGNtID0gcGFyc2VfY29sb3JfbW92ZWQodmFsdWUpOworCQlpZiAoY20gPCAwKQorCQkJcmV0dXJuIC0xOworCQlkaWZmX2NvbG9yX21vdmVkX2RlZmF1bHQgPSBjbTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImRpZmYuY29sb3Jtb3ZlZHdzIikpIHsKKwkJdW5zaWduZWQgY20gPSBwYXJzZV9jb2xvcl9tb3ZlZF93cyh2YWx1ZSk7CisJCWlmIChjbSAmIENPTE9SX01PVkVEX1dTX0VSUk9SKQorCQkJcmV0dXJuIC0xOworCQlkaWZmX2NvbG9yX21vdmVkX3dzX2RlZmF1bHQgPSBjbTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImRpZmYuY29udGV4dCIpKSB7CisJCWRpZmZfY29udGV4dF9kZWZhdWx0ID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCWlmIChkaWZmX2NvbnRleHRfZGVmYXVsdCA8IDApCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLmludGVyaHVua2NvbnRleHQiKSkgeworCQlkaWZmX2ludGVyaHVua19jb250ZXh0X2RlZmF1bHQgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJaWYgKGRpZmZfaW50ZXJodW5rX2NvbnRleHRfZGVmYXVsdCA8IDApCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLnJlbmFtZXMiKSkgeworCQlkaWZmX2RldGVjdF9yZW5hbWVfZGVmYXVsdCA9IGdpdF9jb25maWdfcmVuYW1lKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5hdXRvcmVmcmVzaGluZGV4IikpIHsKKwkJZGlmZl9hdXRvX3JlZnJlc2hfaW5kZXggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLm1uZW1vbmljcHJlZml4IikpIHsKKwkJZGlmZl9tbmVtb25pY19wcmVmaXggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLm5vcHJlZml4IikpIHsKKwkJZGlmZl9ub19wcmVmaXggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLnN0YXRncmFwaHdpZHRoIikpIHsKKwkJZGlmZl9zdGF0X2dyYXBoX3dpZHRoID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLmV4dGVybmFsIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZXh0ZXJuYWxfZGlmZl9jbWRfY2ZnLCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLndvcmRyZWdleCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRpZmZfd29yZF9yZWdleF9jZmcsIHZhciwgdmFsdWUpOworCWlmICghc3RyY21wKHZhciwgImRpZmYub3JkZXJmaWxlIikpCisJCXJldHVybiBnaXRfY29uZmlnX3BhdGhuYW1lKCZkaWZmX29yZGVyX2ZpbGVfY2ZnLCB2YXIsIHZhbHVlKTsKKworCWlmICghc3RyY21wKHZhciwgImRpZmYuaWdub3Jlc3VibW9kdWxlcyIpKQorCQloYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKCZkZWZhdWx0X2RpZmZfb3B0aW9ucywgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5zdWJtb2R1bGUiKSkgeworCQlpZiAocGFyc2Vfc3VibW9kdWxlX3BhcmFtcygmZGVmYXVsdF9kaWZmX29wdGlvbnMsIHZhbHVlKSkKKwkJCXdhcm5pbmcoXygiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciKSwKKwkJCQl2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImRpZmYuYWxnb3JpdGhtIikpIHsKKwkJZGlmZl9hbGdvcml0aG0gPSBwYXJzZV9hbGdvcml0aG1fdmFsdWUodmFsdWUpOworCQlpZiAoZGlmZl9hbGdvcml0aG0gPCAwKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZ2l0X2NvbG9yX2NvbmZpZyh2YXIsIHZhbHVlLCBjYikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZ2l0X2RpZmZfYmFzaWNfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworaW50IGdpdF9kaWZmX2Jhc2ljX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwljb25zdCBjaGFyICpuYW1lOworCisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5yZW5hbWVsaW1pdCIpKSB7CisJCWRpZmZfcmVuYW1lX2xpbWl0X2RlZmF1bHQgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHVzZXJkaWZmX2NvbmZpZyh2YXIsIHZhbHVlKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChza2lwX3ByZWZpeCh2YXIsICJkaWZmLmNvbG9yLiIsICZuYW1lKSB8fAorCSAgICBza2lwX3ByZWZpeCh2YXIsICJjb2xvci5kaWZmLiIsICZuYW1lKSkgeworCQlpbnQgc2xvdCA9IHBhcnNlX2RpZmZfY29sb3Jfc2xvdChuYW1lKTsKKwkJaWYgKHNsb3QgPCAwKQorCQkJcmV0dXJuIDA7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcmV0dXJuIGNvbG9yX3BhcnNlKHZhbHVlLCBkaWZmX2NvbG9yc1tzbG90XSk7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi53c2Vycm9yaGlnaGxpZ2h0IikpIHsKKwkJaW50IHZhbCA9IHBhcnNlX3dzX2Vycm9yX2hpZ2hsaWdodCh2YWx1ZSk7CisJCWlmICh2YWwgPCAwKQorCQkJcmV0dXJuIC0xOworCQl3c19lcnJvcl9oaWdobGlnaHRfZGVmYXVsdCA9IHZhbDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogbGlrZSBHTlUgZGlmZidzIC0tc3VwcHJlc3MtYmxhbmstZW1wdHkgb3B0aW9uICAqLworCWlmICghc3RyY21wKHZhciwgImRpZmYuc3VwcHJlc3NibGFua2VtcHR5IikgfHwKKwkJCS8qIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworCQkJIXN0cmNtcCh2YXIsICJkaWZmLnN1cHByZXNzLWJsYW5rLWVtcHR5IikpIHsKKwkJZGlmZl9zdXBwcmVzc19ibGFua19lbXB0eSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5kaXJzdGF0IikpIHsKKwkJc3RydWN0IHN0cmJ1ZiBlcnJtc2cgPSBTVFJCVUZfSU5JVDsKKwkJZGVmYXVsdF9kaWZmX29wdGlvbnMuZGlyc3RhdF9wZXJtaWxsZSA9IGRpZmZfZGlyc3RhdF9wZXJtaWxsZV9kZWZhdWx0OworCQlpZiAocGFyc2VfZGlyc3RhdF9wYXJhbXMoJmRlZmF1bHRfZGlmZl9vcHRpb25zLCB2YWx1ZSwgJmVycm1zZykpCisJCQl3YXJuaW5nKF8oIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4lcyIpLAorCQkJCWVycm1zZy5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmZXJybXNnKTsKKwkJZGlmZl9kaXJzdGF0X3Blcm1pbGxlX2RlZmF1bHQgPSBkZWZhdWx0X2RpZmZfb3B0aW9ucy5kaXJzdGF0X3Blcm1pbGxlOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZ2l0X2RpZmZfaGV1cmlzdGljX2NvbmZpZyh2YXIsIHZhbHVlLCBjYikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGNoYXIgKnF1b3RlX3R3byhjb25zdCBjaGFyICpvbmUsIGNvbnN0IGNoYXIgKnR3bykKK3sKKwlpbnQgbmVlZF9vbmUgPSBxdW90ZV9jX3N0eWxlKG9uZSwgTlVMTCwgTlVMTCwgMSk7CisJaW50IG5lZWRfdHdvID0gcXVvdGVfY19zdHlsZSh0d28sIE5VTEwsIE5VTEwsIDEpOworCXN0cnVjdCBzdHJidWYgcmVzID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAobmVlZF9vbmUgKyBuZWVkX3R3bykgeworCQlzdHJidWZfYWRkY2goJnJlcywgJyInKTsKKwkJcXVvdGVfY19zdHlsZShvbmUsICZyZXMsIE5VTEwsIDEpOworCQlxdW90ZV9jX3N0eWxlKHR3bywgJnJlcywgTlVMTCwgMSk7CisJCXN0cmJ1Zl9hZGRjaCgmcmVzLCAnIicpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIoJnJlcywgb25lKTsKKwkJc3RyYnVmX2FkZHN0cigmcmVzLCB0d28pOworCX0KKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmcmVzLCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmV4dGVybmFsX2RpZmYodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqZXh0ZXJuYWxfZGlmZl9jbWQgPSBOVUxMOworCXN0YXRpYyBpbnQgZG9uZV9wcmVwYXJpbmcgPSAwOworCisJaWYgKGRvbmVfcHJlcGFyaW5nKQorCQlyZXR1cm4gZXh0ZXJuYWxfZGlmZl9jbWQ7CisJZXh0ZXJuYWxfZGlmZl9jbWQgPSB4c3RyZHVwX29yX251bGwoZ2V0ZW52KCJHSVRfRVhURVJOQUxfRElGRiIpKTsKKwlpZiAoIWV4dGVybmFsX2RpZmZfY21kKQorCQlleHRlcm5hbF9kaWZmX2NtZCA9IGV4dGVybmFsX2RpZmZfY21kX2NmZzsKKwlkb25lX3ByZXBhcmluZyA9IDE7CisJcmV0dXJuIGV4dGVybmFsX2RpZmZfY21kOworfQorCisvKgorICogS2VlcCB0cmFjayBvZiBmaWxlcyB1c2VkIGZvciBkaWZmaW5nLiBTb21ldGltZXMgc3VjaCBhbiBlbnRyeQorICogcmVmZXJzIHRvIGEgdGVtcG9yYXJ5IGZpbGUsIHNvbWV0aW1lcyB0byBhbiBleGlzdGluZyBmaWxlLCBhbmQKKyAqIHNvbWV0aW1lcyB0byAiL2Rldi9udWxsIi4KKyAqLworc3RhdGljIHN0cnVjdCBkaWZmX3RlbXBmaWxlIHsKKwkvKgorCSAqIGZpbGVuYW1lIGV4dGVybmFsIGRpZmYgc2hvdWxkIHJlYWQgZnJvbSwgb3IgTlVMTCBpZiB0aGlzCisJICogZW50cnkgaXMgY3VycmVudGx5IG5vdCBpbiB1c2U6CisJICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCWNoYXIgaGV4W0dJVF9NQVhfSEVYU1ogKyAxXTsKKwljaGFyIG1vZGVbMTBdOworCisJLyoKKwkgKiBJZiB0aGlzIGRpZmZfdGVtcGZpbGUgaW5zdGFuY2UgcmVmZXJzIHRvIGEgdGVtcG9yYXJ5IGZpbGUsCisJICogdGhpcyB0ZW1wZmlsZSBvYmplY3QgaXMgdXNlZCB0byBtYW5hZ2UgaXRzIGxpZmV0aW1lLgorCSAqLworCXN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGU7Cit9IGRpZmZfdGVtcFsyXTsKKworc3RydWN0IGVtaXRfY2FsbGJhY2sgeworCWludCBjb2xvcl9kaWZmOworCXVuc2lnbmVkIHdzX3J1bGU7CisJaW50IGJsYW5rX2F0X2VvZl9pbl9wcmVpbWFnZTsKKwlpbnQgYmxhbmtfYXRfZW9mX2luX3Bvc3RpbWFnZTsKKwlpbnQgbG5vX2luX3ByZWltYWdlOworCWludCBsbm9faW5fcG9zdGltYWdlOworCWNvbnN0IGNoYXIgKipsYWJlbF9wYXRoOworCXN0cnVjdCBkaWZmX3dvcmRzX2RhdGEgKmRpZmZfd29yZHM7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0OworCXN0cnVjdCBzdHJidWYgKmhlYWRlcjsKK307CisKK3N0YXRpYyBpbnQgY291bnRfbGluZXMoY29uc3QgY2hhciAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IGNvdW50LCBjaCwgY29tcGxldGVseV9lbXB0eSA9IDEsIG5sX2p1c3Rfc2VlbiA9IDA7CisJY291bnQgPSAwOworCXdoaWxlICgwIDwgc2l6ZS0tKSB7CisJCWNoID0gKmRhdGErKzsKKwkJaWYgKGNoID09ICdcbicpIHsKKwkJCWNvdW50Kys7CisJCQlubF9qdXN0X3NlZW4gPSAxOworCQkJY29tcGxldGVseV9lbXB0eSA9IDA7CisJCX0KKwkJZWxzZSB7CisJCQlubF9qdXN0X3NlZW4gPSAwOworCQkJY29tcGxldGVseV9lbXB0eSA9IDA7CisJCX0KKwl9CisJaWYgKGNvbXBsZXRlbHlfZW1wdHkpCisJCXJldHVybiAwOworCWlmICghbmxfanVzdF9zZWVuKQorCQljb3VudCsrOyAvKiBubyB0cmFpbGluZyBuZXdsaW5lICovCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGZpbGxfbW1maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBtbWZpbGVfdCAqbWYsCisJCSAgICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCWlmICghRElGRl9GSUxFX1ZBTElEKG9uZSkpIHsKKwkJbWYtPnB0ciA9IChjaGFyICopIiI7IC8qIGRvZXMgbm90IG1hdHRlciAqLworCQltZi0+c2l6ZSA9IDA7CisJCXJldHVybiAwOworCX0KKwllbHNlIGlmIChkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHIsIG9uZSwgTlVMTCkpCisJCXJldHVybiAtMTsKKworCW1mLT5wdHIgPSBvbmUtPmRhdGE7CisJbWYtPnNpemUgPSBvbmUtPnNpemU7CisJcmV0dXJuIDA7Cit9CisKKy8qIGxpa2UgZmlsbF9tbWZpbGUsIGJ1dCBvbmx5IGZvciBzaXplLCBzbyB3ZSBjYW4gYXZvaWQgcmV0cmlldmluZyBibG9iICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkaWZmX2ZpbGVzcGVjX3NpemUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpCit7CisJc3RydWN0IGRpZmZfcG9wdWxhdGVfZmlsZXNwZWNfb3B0aW9ucyBkcGZfb3B0aW9ucyA9IHsKKwkJLmNoZWNrX3NpemVfb25seSA9IDEsCisJfTsKKworCWlmICghRElGRl9GSUxFX1ZBTElEKG9uZSkpCisJCXJldHVybiAwOworCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMociwgb25lLCAmZHBmX29wdGlvbnMpOworCXJldHVybiBvbmUtPnNpemU7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfdHJhaWxpbmdfYmxhbmsobW1maWxlX3QgKm1mLCB1bnNpZ25lZCB3c19ydWxlKQoreworCWNoYXIgKnB0ciA9IG1mLT5wdHI7CisJbG9uZyBzaXplID0gbWYtPnNpemU7CisJaW50IGNudCA9IDA7CisKKwlpZiAoIXNpemUpCisJCXJldHVybiBjbnQ7CisJcHRyICs9IHNpemUgLSAxOyAvKiBwb2ludGluZyBhdCB0aGUgdmVyeSBlbmQgKi8KKwlpZiAoKnB0ciAhPSAnXG4nKQorCQk7IC8qIGluY29tcGxldGUgbGluZSAqLworCWVsc2UKKwkJcHRyLS07IC8qIHNraXAgdGhlIGxhc3QgTEYgKi8KKwl3aGlsZSAobWYtPnB0ciA8IHB0cikgeworCQljaGFyICpwcmV2X2VvbDsKKwkJZm9yIChwcmV2X2VvbCA9IHB0cjsgbWYtPnB0ciA8PSBwcmV2X2VvbDsgcHJldl9lb2wtLSkKKwkJCWlmICgqcHJldl9lb2wgPT0gJ1xuJykKKwkJCQlicmVhazsKKwkJaWYgKCF3c19ibGFua19saW5lKHByZXZfZW9sICsgMSwgcHRyIC0gcHJldl9lb2wsIHdzX3J1bGUpKQorCQkJYnJlYWs7CisJCWNudCsrOworCQlwdHIgPSBwcmV2X2VvbCAtIDE7CisJfQorCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2JsYW5rX2F0X2VvZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLAorCQkJICAgICAgIHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhKQoreworCWludCBsMSwgbDIsIGF0OworCXVuc2lnbmVkIHdzX3J1bGUgPSBlY2JkYXRhLT53c19ydWxlOworCWwxID0gY291bnRfdHJhaWxpbmdfYmxhbmsobWYxLCB3c19ydWxlKTsKKwlsMiA9IGNvdW50X3RyYWlsaW5nX2JsYW5rKG1mMiwgd3NfcnVsZSk7CisJaWYgKGwyIDw9IGwxKSB7CisJCWVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wcmVpbWFnZSA9IDA7CisJCWVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wb3N0aW1hZ2UgPSAwOworCQlyZXR1cm47CisJfQorCWF0ID0gY291bnRfbGluZXMobWYxLT5wdHIsIG1mMS0+c2l6ZSk7CisJZWNiZGF0YS0+YmxhbmtfYXRfZW9mX2luX3ByZWltYWdlID0gKGF0IC0gbDEpICsgMTsKKworCWF0ID0gY291bnRfbGluZXMobWYyLT5wdHIsIG1mMi0+c2l6ZSk7CisJZWNiZGF0YS0+YmxhbmtfYXRfZW9mX2luX3Bvc3RpbWFnZSA9IChhdCAtIGwyKSArIDE7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfbGluZV8wKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQljb25zdCBjaGFyICpzZXRfc2lnbiwgY29uc3QgY2hhciAqc2V0LCB1bnNpZ25lZCByZXZlcnNlLCBjb25zdCBjaGFyICpyZXNldCwKKwkJCWludCBmaXJzdCwgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwlpbnQgaGFzX3RyYWlsaW5nX25ld2xpbmUsIGhhc190cmFpbGluZ19jYXJyaWFnZV9yZXR1cm47CisJaW50IG5lZWRzX3Jlc2V0ID0gMDsgLyogYXQgdGhlIGVuZCBvZiB0aGUgbGluZSAqLworCUZJTEUgKmZpbGUgPSBvLT5maWxlOworCisJZnB1dHMoZGlmZl9saW5lX3ByZWZpeChvKSwgZmlsZSk7CisKKwloYXNfdHJhaWxpbmdfbmV3bGluZSA9IChsZW4gPiAwICYmIGxpbmVbbGVuLTFdID09ICdcbicpOworCWlmIChoYXNfdHJhaWxpbmdfbmV3bGluZSkKKwkJbGVuLS07CisKKwloYXNfdHJhaWxpbmdfY2FycmlhZ2VfcmV0dXJuID0gKGxlbiA+IDAgJiYgbGluZVtsZW4tMV0gPT0gJ1xyJyk7CisJaWYgKGhhc190cmFpbGluZ19jYXJyaWFnZV9yZXR1cm4pCisJCWxlbi0tOworCisJaWYgKCFsZW4gJiYgIWZpcnN0KQorCQlnb3RvIGVuZF9vZl9saW5lOworCisJaWYgKHJldmVyc2UgJiYgd2FudF9jb2xvcihvLT51c2VfY29sb3IpKSB7CisJCWZwdXRzKEdJVF9DT0xPUl9SRVZFUlNFLCBmaWxlKTsKKwkJbmVlZHNfcmVzZXQgPSAxOworCX0KKworCWlmIChzZXRfc2lnbikgeworCQlmcHV0cyhzZXRfc2lnbiwgZmlsZSk7CisJCW5lZWRzX3Jlc2V0ID0gMTsKKwl9CisKKwlpZiAoZmlyc3QpCisJCWZwdXRjKGZpcnN0LCBmaWxlKTsKKworCWlmICghbGVuKQorCQlnb3RvIGVuZF9vZl9saW5lOworCisJaWYgKHNldCkgeworCQlpZiAoc2V0X3NpZ24gJiYgc2V0ICE9IHNldF9zaWduKQorCQkJZnB1dHMocmVzZXQsIGZpbGUpOworCQlmcHV0cyhzZXQsIGZpbGUpOworCQluZWVkc19yZXNldCA9IDE7CisJfQorCWZ3cml0ZShsaW5lLCBsZW4sIDEsIGZpbGUpOworCW5lZWRzX3Jlc2V0ID0gMTsgLyogJ2xpbmUnIG1heSBjb250YWluIGNvbG9yIGNvZGVzLiAqLworCitlbmRfb2ZfbGluZToKKwlpZiAobmVlZHNfcmVzZXQpCisJCWZwdXRzKHJlc2V0LCBmaWxlKTsKKwlpZiAoaGFzX3RyYWlsaW5nX2NhcnJpYWdlX3JldHVybikKKwkJZnB1dGMoJ1xyJywgZmlsZSk7CisJaWYgKGhhc190cmFpbGluZ19uZXdsaW5lKQorCQlmcHV0YygnXG4nLCBmaWxlKTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9saW5lKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKnNldCwgY29uc3QgY2hhciAqcmVzZXQsCisJCSAgICAgIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJZW1pdF9saW5lXzAobywgc2V0LCBOVUxMLCAwLCByZXNldCwgMCwgbGluZSwgbGVuKTsKK30KKworZW51bSBkaWZmX3N5bWJvbCB7CisJRElGRl9TWU1CT0xfQklOQVJZX0RJRkZfSEVBREVSLAorCURJRkZfU1lNQk9MX0JJTkFSWV9ESUZGX0hFQURFUl9ERUxUQSwKKwlESUZGX1NZTUJPTF9CSU5BUllfRElGRl9IRUFERVJfTElURVJBTCwKKwlESUZGX1NZTUJPTF9CSU5BUllfRElGRl9CT0RZLAorCURJRkZfU1lNQk9MX0JJTkFSWV9ESUZGX0ZPT1RFUiwKKwlESUZGX1NZTUJPTF9TVEFUU19TVU1NQVJZX05PX0ZJTEVTLAorCURJRkZfU1lNQk9MX1NUQVRTX1NVTU1BUllfQUJCUkVWLAorCURJRkZfU1lNQk9MX1NUQVRTX1NVTU1BUllfSU5TRVJUU19ERUxFVEVTLAorCURJRkZfU1lNQk9MX1NUQVRTX0xJTkUsCisJRElGRl9TWU1CT0xfV09SRF9ESUZGLAorCURJRkZfU1lNQk9MX1NUQVRfU0VQLAorCURJRkZfU1lNQk9MX1NVTU1BUlksCisJRElGRl9TWU1CT0xfU1VCTU9EVUxFX0FERCwKKwlESUZGX1NZTUJPTF9TVUJNT0RVTEVfREVMLAorCURJRkZfU1lNQk9MX1NVQk1PRFVMRV9VTlRSQUNLRUQsCisJRElGRl9TWU1CT0xfU1VCTU9EVUxFX01PRElGSUVELAorCURJRkZfU1lNQk9MX1NVQk1PRFVMRV9IRUFERVIsCisJRElGRl9TWU1CT0xfU1VCTU9EVUxFX0VSUk9SLAorCURJRkZfU1lNQk9MX1NVQk1PRFVMRV9QSVBFVEhST1VHSCwKKwlESUZGX1NZTUJPTF9SRVdSSVRFX0RJRkYsCisJRElGRl9TWU1CT0xfQklOQVJZX0ZJTEVTLAorCURJRkZfU1lNQk9MX0hFQURFUiwKKwlESUZGX1NZTUJPTF9GSUxFUEFJUl9QTFVTLAorCURJRkZfU1lNQk9MX0ZJTEVQQUlSX01JTlVTLAorCURJRkZfU1lNQk9MX1dPUkRTX1BPUkNFTEFJTiwKKwlESUZGX1NZTUJPTF9XT1JEUywKKwlESUZGX1NZTUJPTF9DT05URVhULAorCURJRkZfU1lNQk9MX0NPTlRFWFRfSU5DT01QTEVURSwKKwlESUZGX1NZTUJPTF9QTFVTLAorCURJRkZfU1lNQk9MX01JTlVTLAorCURJRkZfU1lNQk9MX05PX0xGX0VPRiwKKwlESUZGX1NZTUJPTF9DT05URVhUX0ZSQUdJTkZPLAorCURJRkZfU1lNQk9MX0NPTlRFWFRfTUFSS0VSLAorCURJRkZfU1lNQk9MX1NFUEFSQVRPUgorfTsKKy8qCisgKiBGbGFncyBmb3IgY29udGVudCBsaW5lczoKKyAqIDAuLjEyIGFyZSB3aGl0ZXNwYWNlIHJ1bGVzCisgKiAxMy0xNSBhcmUgV1NFSF9ORVcgfCBXU0VIX09MRCB8IFdTRUhfQ09OVEVYVAorICogMTYgaXMgbWFya2luZyBpZiB0aGUgbGluZSBpcyBibGFuayBhdCBFT0YKKyAqLworI2RlZmluZSBESUZGX1NZTUJPTF9DT05URU5UX0JMQU5LX0xJTkVfRU9GCSgxPDwxNikKKyNkZWZpbmUgRElGRl9TWU1CT0xfTU9WRURfTElORQkJCSgxPDwxNykKKyNkZWZpbmUgRElGRl9TWU1CT0xfTU9WRURfTElORV9BTFQJCSgxPDwxOCkKKyNkZWZpbmUgRElGRl9TWU1CT0xfTU9WRURfTElORV9VTklOVEVSRVNUSU5HCSgxPDwxOSkKKyNkZWZpbmUgRElGRl9TWU1CT0xfQ09OVEVOVF9XU19NQVNLIChXU0VIX05FVyB8IFdTRUhfT0xEIHwgV1NFSF9DT05URVhUIHwgV1NfUlVMRV9NQVNLKQorCisvKgorICogVGhpcyBzdHJ1Y3QgaXMgdXNlZCB3aGVuIHdlIG5lZWQgdG8gYnVmZmVyIHRoZSBvdXRwdXQgb2YgdGhlIGRpZmYgb3V0cHV0LgorICoKKyAqIE5FRURTV09SSzogSW5zdGVhZCBvZiBzdG9yaW5nIGEgY29weSBvZiB0aGUgbGluZSwgYWRkIGFuIG9mZnNldCBwb2ludGVyCisgKiBpbnRvIHRoZSBwcmUvcG9zdCBpbWFnZSBmaWxlLiBUaGlzIHBvaW50ZXIgY291bGQgYmUgYSB1bmlvbiB3aXRoIHRoZQorICogbGluZSBwb2ludGVyLiBCeSBzdG9yaW5nIGFuIG9mZnNldCBpbnRvIHRoZSBmaWxlIGluc3RlYWQgb2YgdGhlIGxpdGVyYWwgbGluZSwKKyAqIHdlIGNhbiBkZWNyZWFzZSB0aGUgbWVtb3J5IGZvb3RwcmludCBmb3IgdGhlIGJ1ZmZlcmVkIG91dHB1dC4gQXQgZmlyc3Qgd2UKKyAqIG1heSB3YW50IHRvIG9ubHkgaGF2ZSBpbmRpcmVjdGlvbiBmb3IgdGhlIGNvbnRlbnQgbGluZXMsIGJ1dCB3ZSBjb3VsZCBhbHNvCisgKiBlbmhhbmNlIHRoZSBzdGF0ZSBmb3IgZW1pdHRpbmcgcHJlZmFicmljYXRlZCBsaW5lcywgZS5nLiB0aGUgc2ltaWxhcml0eQorICogc2NvcmUgbGluZSBvciBodW5rL2ZpbGUgaGVhZGVycyB3b3VsZCBvbmx5IG5lZWQgdG8gc3RvcmUgYSBudW1iZXIgb3IgcGF0aAorICogYW5kIHRoZW4gdGhlIG91dHB1dCBjYW4gYmUgY29uc3RydWN0ZWQgbGF0ZXIgb24gZGVwZW5kaW5nIG9uIHN0YXRlLgorICovCitzdHJ1Y3QgZW1pdHRlZF9kaWZmX3N5bWJvbCB7CisJY29uc3QgY2hhciAqbGluZTsKKwlpbnQgbGVuOworCWludCBmbGFnczsKKwlpbnQgaW5kZW50X29mZjsgICAvKiBPZmZzZXQgdG8gZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyICovCisJaW50IGluZGVudF93aWR0aDsgLyogVGhlIHZpc3VhbCB3aWR0aCBvZiB0aGUgaW5kZW50YXRpb24gKi8KKwllbnVtIGRpZmZfc3ltYm9sIHM7Cit9OworI2RlZmluZSBFTUlUVEVEX0RJRkZfU1lNQk9MX0lOSVQge05VTEx9CisKK3N0cnVjdCBlbWl0dGVkX2RpZmZfc3ltYm9scyB7CisJc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2wgKmJ1ZjsKKwlpbnQgbnIsIGFsbG9jOworfTsKKyNkZWZpbmUgRU1JVFRFRF9ESUZGX1NZTUJPTFNfSU5JVCB7TlVMTCwgMCwgMH0KKworc3RhdGljIHZvaWQgYXBwZW5kX2VtaXR0ZWRfZGlmZl9zeW1ib2woc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCQkgICAgICAgc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2wgKmUpCit7CisJc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2wgKmY7CisKKwlBTExPQ19HUk9XKG8tPmVtaXR0ZWRfc3ltYm9scy0+YnVmLAorCQkgICBvLT5lbWl0dGVkX3N5bWJvbHMtPm5yICsgMSwKKwkJICAgby0+ZW1pdHRlZF9zeW1ib2xzLT5hbGxvYyk7CisJZiA9ICZvLT5lbWl0dGVkX3N5bWJvbHMtPmJ1ZltvLT5lbWl0dGVkX3N5bWJvbHMtPm5yKytdOworCisJbWVtY3B5KGYsIGUsIHNpemVvZihzdHJ1Y3QgZW1pdHRlZF9kaWZmX3N5bWJvbCkpOworCWYtPmxpbmUgPSBlLT5saW5lID8geG1lbWR1cHooZS0+bGluZSwgZS0+bGVuKSA6IE5VTEw7Cit9CisKK3N0cnVjdCBtb3ZlZF9lbnRyeSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50OworCWNvbnN0IHN0cnVjdCBlbWl0dGVkX2RpZmZfc3ltYm9sICplczsKKwlzdHJ1Y3QgbW92ZWRfZW50cnkgKm5leHRfbGluZTsKK307CisKK3N0cnVjdCBtb3ZlZF9ibG9jayB7CisJc3RydWN0IG1vdmVkX2VudHJ5ICptYXRjaDsKKwlpbnQgd3NkOyAvKiBUaGUgd2hpdGVzcGFjZSBkZWx0YSBvZiB0aGlzIGJsb2NrICovCit9OworCitzdGF0aWMgdm9pZCBtb3ZlZF9ibG9ja19jbGVhcihzdHJ1Y3QgbW92ZWRfYmxvY2sgKmIpCit7CisJbWVtc2V0KGIsIDAsIHNpemVvZigqYikpOworfQorCisjZGVmaW5lIElOREVOVF9CTEFOS0xJTkUgSU5UX01JTgorCitzdGF0aWMgdm9pZCBmaWxsX2VzX2luZGVudF9kYXRhKHN0cnVjdCBlbWl0dGVkX2RpZmZfc3ltYm9sICplcykKK3sKKwl1bnNpZ25lZCBpbnQgb2ZmID0gMCwgaTsKKwlpbnQgd2lkdGggPSAwLCB0YWJfd2lkdGggPSBlcy0+ZmxhZ3MgJiBXU19UQUJfV0lEVEhfTUFTSzsKKwljb25zdCBjaGFyICpzID0gZXMtPmxpbmU7CisJY29uc3QgaW50IGxlbiA9IGVzLT5sZW47CisKKwkvKiBza2lwIGFueSBcdiBcZiBcciBhdCBzdGFydCBvZiBpbmRlbnRhdGlvbiAqLworCXdoaWxlIChzW29mZl0gPT0gJ1xmJyB8fCBzW29mZl0gPT0gJ1x2JyB8fAorCSAgICAgICAoc1tvZmZdID09ICdccicgJiYgb2ZmIDwgbGVuIC0gMSkpCisJCW9mZisrOworCisJLyogY2FsY3VsYXRlIHRoZSB2aXN1YWwgd2lkdGggb2YgaW5kZW50YXRpb24gKi8KKwl3aGlsZSgxKSB7CisJCWlmIChzW29mZl0gPT0gJyAnKSB7CisJCQl3aWR0aCsrOworCQkJb2ZmKys7CisJCX0gZWxzZSBpZiAoc1tvZmZdID09ICdcdCcpIHsKKwkJCXdpZHRoICs9IHRhYl93aWR0aCAtICh3aWR0aCAlIHRhYl93aWR0aCk7CisJCQl3aGlsZSAoc1srK29mZl0gPT0gJ1x0JykKKwkJCQl3aWR0aCArPSB0YWJfd2lkdGg7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIGNoZWNrIGlmIHRoaXMgbGluZSBpcyBibGFuayAqLworCWZvciAoaSA9IG9mZjsgaSA8IGxlbjsgaSsrKQorCQlpZiAoIWlzc3BhY2Uoc1tpXSkpCisJCSAgICBicmVhazsKKworCWlmIChpID09IGxlbikgeworCQllcy0+aW5kZW50X3dpZHRoID0gSU5ERU5UX0JMQU5LTElORTsKKwkJZXMtPmluZGVudF9vZmYgPSBsZW47CisJfSBlbHNlIHsKKwkJZXMtPmluZGVudF9vZmYgPSBvZmY7CisJCWVzLT5pbmRlbnRfd2lkdGggPSB3aWR0aDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY29tcHV0ZV93c19kZWx0YShjb25zdCBzdHJ1Y3QgZW1pdHRlZF9kaWZmX3N5bWJvbCAqYSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgZW1pdHRlZF9kaWZmX3N5bWJvbCAqYiwKKwkJCSAgICBpbnQgKm91dCkKK3sKKwlpbnQgYV9sZW4gPSBhLT5sZW4sCisJICAgIGJfbGVuID0gYi0+bGVuLAorCSAgICBhX29mZiA9IGEtPmluZGVudF9vZmYsCisJICAgIGFfd2lkdGggPSBhLT5pbmRlbnRfd2lkdGgsCisJICAgIGJfb2ZmID0gYi0+aW5kZW50X29mZiwKKwkgICAgYl93aWR0aCA9IGItPmluZGVudF93aWR0aDsKKwlpbnQgZGVsdGE7CisKKwlpZiAoYV93aWR0aCA9PSBJTkRFTlRfQkxBTktMSU5FICYmIGJfd2lkdGggPT0gSU5ERU5UX0JMQU5LTElORSkgeworCQkqb3V0ID0gSU5ERU5UX0JMQU5LTElORTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGEtPnMgPT0gRElGRl9TWU1CT0xfUExVUykKKwkJZGVsdGEgPSBhX3dpZHRoIC0gYl93aWR0aDsKKwllbHNlCisJCWRlbHRhID0gYl93aWR0aCAtIGFfd2lkdGg7CisKKwlpZiAoYV9sZW4gLSBhX29mZiAhPSBiX2xlbiAtIGJfb2ZmIHx8CisJICAgIG1lbWNtcChhLT5saW5lICsgYV9vZmYsIGItPmxpbmUgKyBiX29mZiwgYV9sZW4gLSBhX29mZikpCisJCXJldHVybiAwOworCisJKm91dCA9IGRlbHRhOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY21wX2luX2Jsb2NrX3dpdGhfd3NkKGNvbnN0IHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkJIGNvbnN0IHN0cnVjdCBtb3ZlZF9lbnRyeSAqY3VyLAorCQkJCSBjb25zdCBzdHJ1Y3QgbW92ZWRfZW50cnkgKm1hdGNoLAorCQkJCSBzdHJ1Y3QgbW92ZWRfYmxvY2sgKnBtYiwKKwkJCQkgaW50IG4pCit7CisJc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2wgKmwgPSAmby0+ZW1pdHRlZF9zeW1ib2xzLT5idWZbbl07CisJaW50IGFsID0gY3VyLT5lcy0+bGVuLCBibCA9IG1hdGNoLT5lcy0+bGVuLCBjbCA9IGwtPmxlbjsKKwljb25zdCBjaGFyICphID0gY3VyLT5lcy0+bGluZSwKKwkJICAgKmIgPSBtYXRjaC0+ZXMtPmxpbmUsCisJCSAgICpjID0gbC0+bGluZTsKKwlpbnQgYV9vZmYgPSBjdXItPmVzLT5pbmRlbnRfb2ZmLAorCSAgICBhX3dpZHRoID0gY3VyLT5lcy0+aW5kZW50X3dpZHRoLAorCSAgICBjX29mZiA9IGwtPmluZGVudF9vZmYsCisJICAgIGNfd2lkdGggPSBsLT5pbmRlbnRfd2lkdGg7CisJaW50IGRlbHRhOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIGNoZWNrIGlmICdjdXInIGlzIGVxdWFsIHRvICdtYXRjaCcuICBBcyB0aG9zZQorCSAqIGFyZSBmcm9tIHRoZSBzYW1lICgrLy0pIHNpZGUsIHdlIGRvIG5vdCBuZWVkIHRvIGFkanVzdCBmb3IKKwkgKiBpbmRlbnQgY2hhbmdlcy4gSG93ZXZlciB0aGVzZSB3ZXJlIGZvdW5kIHVzaW5nIGZ1enp5CisJICogbWF0Y2hpbmcgc28gd2UgZG8gaGF2ZSB0byBjaGVjayBpZiB0aGV5IGFyZSBlcXVhbC4gSGVyZSB3ZQorCSAqIGp1c3QgY2hlY2sgdGhlIGxlbmd0aHMuIFdlIGRlbGF5IGNhbGxpbmcgbWVtY21wKCkgdG8gY2hlY2sKKwkgKiB0aGUgY29udGVudHMgdW50aWwgbGF0ZXIgYXMgaWYgdGhlIGxlbmd0aCBjb21wYXJpc29uIGZvciBhCisJICogYW5kIGMgZmFpbHMgd2UgY2FuIGF2b2lkIHRoZSBjYWxsIGFsbCB0b2dldGhlci4KKwkgKi8KKwlpZiAoYWwgIT0gYmwpCisJCXJldHVybiAxOworCisJLyogSWYgJ2wnIGFuZCAnY3VyJyBhcmUgYm90aCBibGFuayB0aGVuIHRoZXkgbWF0Y2guICovCisJaWYgKGFfd2lkdGggPT0gSU5ERU5UX0JMQU5LTElORSAmJiBjX3dpZHRoID09IElOREVOVF9CTEFOS0xJTkUpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBUaGUgaW5kZW50IGNoYW5nZXMgb2YgdGhlIGJsb2NrIGFyZSBrbm93biBhbmQgc3RvcmVkIGluIHBtYi0+d3NkOworCSAqIGhvd2V2ZXIgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgaW5kZW50IGNoYW5nZXMgb2YgdGhlIGN1cnJlbnQgbGluZQorCSAqIG1hdGNoIHRob3NlIG9mIHRoZSBjdXJyZW50IGJsb2NrIGFuZCB0aGF0IHRoZSB0ZXh0IG9mICdsJyBhbmQgJ2N1cicKKwkgKiBhZnRlciB0aGUgaW5kZW50YXRpb24gbWF0Y2guCisJICovCisJaWYgKGN1ci0+ZXMtPnMgPT0gRElGRl9TWU1CT0xfUExVUykKKwkJZGVsdGEgPSBhX3dpZHRoIC0gY193aWR0aDsKKwllbHNlCisJCWRlbHRhID0gY193aWR0aCAtIGFfd2lkdGg7CisKKwkvKgorCSAqIElmIHRoZSBwcmV2aW91cyBsaW5lcyBvZiB0aGlzIGJsb2NrIHdlcmUgYWxsIGJsYW5rIHRoZW4gc2V0IGl0cworCSAqIHdoaXRlc3BhY2UgZGVsdGEuCisJICovCisJaWYgKHBtYi0+d3NkID09IElOREVOVF9CTEFOS0xJTkUpCisJCXBtYi0+d3NkID0gZGVsdGE7CisKKwlyZXR1cm4gIShkZWx0YSA9PSBwbWItPndzZCAmJiBhbCAtIGFfb2ZmID09IGNsIC0gY19vZmYgJiYKKwkJICFtZW1jbXAoYSwgYiwgYWwpICYmICEKKwkJIG1lbWNtcChhICsgYV9vZmYsIGMgKyBjX29mZiwgYWwgLSBhX29mZikpOworfQorCitzdGF0aWMgaW50IG1vdmVkX2VudHJ5X2NtcChjb25zdCB2b2lkICpoYXNobWFwX2NtcF9mbl9kYXRhLAorCQkJICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVwdHIsCisJCQkgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnlfb3Jfa2V5LAorCQkJICAgY29uc3Qgdm9pZCAqa2V5ZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0ID0gaGFzaG1hcF9jbXBfZm5fZGF0YTsKKwljb25zdCBzdHJ1Y3QgbW92ZWRfZW50cnkgKmEsICpiOworCXVuc2lnbmVkIGZsYWdzID0gZGlmZm9wdC0+Y29sb3JfbW92ZWRfd3NfaGFuZGxpbmcKKwkJCSAmIFhERl9XSElURVNQQUNFX0ZMQUdTOworCisJYSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3QgbW92ZWRfZW50cnksIGVudCk7CisJYiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIGNvbnN0IHN0cnVjdCBtb3ZlZF9lbnRyeSwgZW50KTsKKworCWlmIChkaWZmb3B0LT5jb2xvcl9tb3ZlZF93c19oYW5kbGluZyAmCisJICAgIENPTE9SX01PVkVEX1dTX0FMTE9XX0lOREVOVEFUSU9OX0NIQU5HRSkKKwkJLyoKKwkJICogQXMgdGhlcmUgaXMgbm90IHNwZWNpZmljIHdoaXRlIHNwYWNlIGNvbmZpZyBnaXZlbiwKKwkJICogd2UnZCBuZWVkIHRvIGNoZWNrIGZvciBhIG5ldyBibG9jaywgc28gaWdub3JlIGFsbAorCQkgKiB3aGl0ZSBzcGFjZS4gVGhlIHNldHVwIG9mIHRoZSB3aGl0ZSBzcGFjZQorCQkgKiBjb25maWd1cmF0aW9uIGZvciB0aGUgbmV4dCBibG9jayBpcyBkb25lIGVsc2Ugd2hlcmUKKwkJICovCisJCWZsYWdzIHw9IFhERl9JR05PUkVfV0hJVEVTUEFDRTsKKworCXJldHVybiAheGRpZmZfY29tcGFyZV9saW5lcyhhLT5lcy0+bGluZSwgYS0+ZXMtPmxlbiwKKwkJCQkgICAgYi0+ZXMtPmxpbmUsIGItPmVzLT5sZW4sCisJCQkJICAgIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBtb3ZlZF9lbnRyeSAqcHJlcGFyZV9lbnRyeShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJCQkgaW50IGxpbmVfbm8pCit7CisJc3RydWN0IG1vdmVkX2VudHJ5ICpyZXQgPSB4bWFsbG9jKHNpemVvZigqcmV0KSk7CisJc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2wgKmwgPSAmby0+ZW1pdHRlZF9zeW1ib2xzLT5idWZbbGluZV9ub107CisJdW5zaWduZWQgZmxhZ3MgPSBvLT5jb2xvcl9tb3ZlZF93c19oYW5kbGluZyAmIFhERl9XSElURVNQQUNFX0ZMQUdTOworCXVuc2lnbmVkIGludCBoYXNoID0geGRpZmZfaGFzaF9zdHJpbmcobC0+bGluZSwgbC0+bGVuLCBmbGFncyk7CisKKwloYXNobWFwX2VudHJ5X2luaXQoJnJldC0+ZW50LCBoYXNoKTsKKwlyZXQtPmVzID0gbDsKKwlyZXQtPm5leHRfbGluZSA9IE5VTEw7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhZGRfbGluZXNfdG9fbW92ZV9kZXRlY3Rpb24oc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCQkJc3RydWN0IGhhc2htYXAgKmFkZF9saW5lcywKKwkJCQkJc3RydWN0IGhhc2htYXAgKmRlbF9saW5lcykKK3sKKwlzdHJ1Y3QgbW92ZWRfZW50cnkgKnByZXZfbGluZSA9IE5VTEw7CisKKwlpbnQgbjsKKwlmb3IgKG4gPSAwOyBuIDwgby0+ZW1pdHRlZF9zeW1ib2xzLT5ucjsgbisrKSB7CisJCXN0cnVjdCBoYXNobWFwICpobTsKKwkJc3RydWN0IG1vdmVkX2VudHJ5ICprZXk7CisKKwkJc3dpdGNoIChvLT5lbWl0dGVkX3N5bWJvbHMtPmJ1ZltuXS5zKSB7CisJCWNhc2UgRElGRl9TWU1CT0xfUExVUzoKKwkJCWhtID0gYWRkX2xpbmVzOworCQkJYnJlYWs7CisJCWNhc2UgRElGRl9TWU1CT0xfTUlOVVM6CisJCQlobSA9IGRlbF9saW5lczsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJldl9saW5lID0gTlVMTDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKG8tPmNvbG9yX21vdmVkX3dzX2hhbmRsaW5nICYKKwkJICAgIENPTE9SX01PVkVEX1dTX0FMTE9XX0lOREVOVEFUSU9OX0NIQU5HRSkKKwkJCWZpbGxfZXNfaW5kZW50X2RhdGEoJm8tPmVtaXR0ZWRfc3ltYm9scy0+YnVmW25dKTsKKwkJa2V5ID0gcHJlcGFyZV9lbnRyeShvLCBuKTsKKwkJaWYgKHByZXZfbGluZSAmJiBwcmV2X2xpbmUtPmVzLT5zID09IG8tPmVtaXR0ZWRfc3ltYm9scy0+YnVmW25dLnMpCisJCQlwcmV2X2xpbmUtPm5leHRfbGluZSA9IGtleTsKKworCQloYXNobWFwX2FkZChobSwgJmtleS0+ZW50KTsKKwkJcHJldl9saW5lID0ga2V5OworCX0KK30KKworc3RhdGljIHZvaWQgcG1iX2FkdmFuY2Vfb3JfbnVsbChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJCXN0cnVjdCBtb3ZlZF9lbnRyeSAqbWF0Y2gsCisJCQkJc3RydWN0IGhhc2htYXAgKmhtLAorCQkJCXN0cnVjdCBtb3ZlZF9ibG9jayAqcG1iLAorCQkJCWludCBwbWJfbnIpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHBtYl9ucjsgaSsrKSB7CisJCXN0cnVjdCBtb3ZlZF9lbnRyeSAqcHJldiA9IHBtYltpXS5tYXRjaDsKKwkJc3RydWN0IG1vdmVkX2VudHJ5ICpjdXIgPSAocHJldiAmJiBwcmV2LT5uZXh0X2xpbmUpID8KKwkJCQlwcmV2LT5uZXh0X2xpbmUgOiBOVUxMOworCQlpZiAoY3VyICYmICFobS0+Y21wZm4obywgJmN1ci0+ZW50LCAmbWF0Y2gtPmVudCwgTlVMTCkpIHsKKwkJCXBtYltpXS5tYXRjaCA9IGN1cjsKKwkJfSBlbHNlIHsKKwkJCXBtYltpXS5tYXRjaCA9IE5VTEw7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBtYl9hZHZhbmNlX29yX251bGxfbXVsdGlfbWF0Y2goc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCQkJICAgIHN0cnVjdCBtb3ZlZF9lbnRyeSAqbWF0Y2gsCisJCQkJCSAgICBzdHJ1Y3QgaGFzaG1hcCAqaG0sCisJCQkJCSAgICBzdHJ1Y3QgbW92ZWRfYmxvY2sgKnBtYiwKKwkJCQkJICAgIGludCBwbWJfbnIsIGludCBuKQoreworCWludCBpOworCWNoYXIgKmdvdF9tYXRjaCA9IHhjYWxsb2MoMSwgcG1iX25yKTsKKworCWhhc2htYXBfZm9yX2VhY2hfZW50cnlfZnJvbShobSwgbWF0Y2gsIGVudCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcG1iX25yOyBpKyspIHsKKwkJCXN0cnVjdCBtb3ZlZF9lbnRyeSAqcHJldiA9IHBtYltpXS5tYXRjaDsKKwkJCXN0cnVjdCBtb3ZlZF9lbnRyeSAqY3VyID0gKHByZXYgJiYgcHJldi0+bmV4dF9saW5lKSA/CisJCQkJCXByZXYtPm5leHRfbGluZSA6IE5VTEw7CisJCQlpZiAoIWN1cikKKwkJCQljb250aW51ZTsKKwkJCWlmICghY21wX2luX2Jsb2NrX3dpdGhfd3NkKG8sIGN1ciwgbWF0Y2gsICZwbWJbaV0sIG4pKQorCQkJCWdvdF9tYXRjaFtpXSB8PSAxOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBtYl9ucjsgaSsrKSB7CisJCWlmIChnb3RfbWF0Y2hbaV0pIHsKKwkJCS8qIEFkdmFuY2UgdG8gdGhlIG5leHQgbGluZSAqLworCQkJcG1iW2ldLm1hdGNoID0gcG1iW2ldLm1hdGNoLT5uZXh0X2xpbmU7CisJCX0gZWxzZSB7CisJCQltb3ZlZF9ibG9ja19jbGVhcigmcG1iW2ldKTsKKwkJfQorCX0KKworCWZyZWUoZ290X21hdGNoKTsKK30KKworc3RhdGljIGludCBzaHJpbmtfcG90ZW50aWFsX21vdmVkX2Jsb2NrcyhzdHJ1Y3QgbW92ZWRfYmxvY2sgKnBtYiwKKwkJCQkJIGludCBwbWJfbnIpCit7CisJaW50IGxwLCBycDsKKworCS8qIFNocmluayB0aGUgc2V0IG9mIHBvdGVudGlhbCBibG9jayB0byB0aGUgcmVtYWluaW5nIHJ1bm5pbmcgKi8KKwlmb3IgKGxwID0gMCwgcnAgPSBwbWJfbnIgLSAxOyBscCA8PSBycDspIHsKKwkJd2hpbGUgKGxwIDwgcG1iX25yICYmIHBtYltscF0ubWF0Y2gpCisJCQlscCsrOworCQkvKiBscCBwb2ludHMgYXQgdGhlIGZpcnN0IE5VTEwgbm93ICovCisKKwkJd2hpbGUgKHJwID4gLTEgJiYgIXBtYltycF0ubWF0Y2gpCisJCQlycC0tOworCQkvKiBycCBwb2ludHMgYXQgdGhlIGxhc3Qgbm9uLU5VTEwgKi8KKworCQlpZiAobHAgPCBwbWJfbnIgJiYgcnAgPiAtMSAmJiBscCA8IHJwKSB7CisJCQlwbWJbbHBdID0gcG1iW3JwXTsKKwkJCW1lbXNldCgmcG1iW3JwXSwgMCwgc2l6ZW9mKHBtYltycF0pKTsKKwkJCXJwLS07CisJCQlscCsrOworCQl9CisJfQorCisJLyogUmVtZW1iZXIgdGhlIG51bWJlciBvZiBydW5uaW5nIHNldHMgKi8KKwlyZXR1cm4gcnAgKyAxOworfQorCisvKgorICogSWYgby0+Y29sb3JfbW92ZWQgaXMgQ09MT1JfTU9WRURfUExBSU4sIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLgorICoKKyAqIE90aGVyd2lzZSwgaWYgdGhlIGxhc3QgYmxvY2sgaGFzIGZld2VyIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHRoYW4KKyAqIENPTE9SX01PVkVEX01JTl9BTE5VTV9DT1VOVCwgdW5zZXQgRElGRl9TWU1CT0xfTU9WRURfTElORSBvbiBhbGwgbGluZXMgaW4KKyAqIHRoYXQgYmxvY2suCisgKgorICogVGhlIGxhc3QgYmxvY2sgY29uc2lzdHMgb2YgdGhlIChuIC0gYmxvY2tfbGVuZ3RoKSd0aCBsaW5lIHVwIHRvIGJ1dCBub3QKKyAqIGluY2x1ZGluZyB0aGUgbnRoIGxpbmUuCisgKgorICogUmV0dXJucyAwIGlmIHRoZSBsYXN0IGJsb2NrIGlzIGVtcHR5IG9yIGlzIHVuc2V0IGJ5IHRoaXMgZnVuY3Rpb24sIG5vbiB6ZXJvCisgKiBvdGhlcndpc2UuCisgKgorICogTkVFRFNXT1JLOiBUaGlzIHVzZXMgdGhlIHNhbWUgaGV1cmlzdGljIGFzIGJsYW1lX2VudHJ5X3Njb3JlKCkgaW4gYmxhbWUuYy4KKyAqIFRoaW5rIG9mIGEgd2F5IHRvIHVuaWZ5IHRoZW0uCisgKi8KK3N0YXRpYyBpbnQgYWRqdXN0X2xhc3RfYmxvY2soc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgaW50IG4sIGludCBibG9ja19sZW5ndGgpCit7CisJaW50IGksIGFsbnVtX2NvdW50ID0gMDsKKwlpZiAoby0+Y29sb3JfbW92ZWQgPT0gQ09MT1JfTU9WRURfUExBSU4pCisJCXJldHVybiBibG9ja19sZW5ndGg7CisJZm9yIChpID0gMTsgaSA8IGJsb2NrX2xlbmd0aCArIDE7IGkrKykgeworCQljb25zdCBjaGFyICpjID0gby0+ZW1pdHRlZF9zeW1ib2xzLT5idWZbbiAtIGldLmxpbmU7CisJCWZvciAoOyAqYzsgYysrKSB7CisJCQlpZiAoIWlzYWxudW0oKmMpKQorCQkJCWNvbnRpbnVlOworCQkJYWxudW1fY291bnQrKzsKKwkJCWlmIChhbG51bV9jb3VudCA+PSBDT0xPUl9NT1ZFRF9NSU5fQUxOVU1fQ09VTlQpCisJCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJZm9yIChpID0gMTsgaSA8IGJsb2NrX2xlbmd0aCArIDE7IGkrKykKKwkJby0+ZW1pdHRlZF9zeW1ib2xzLT5idWZbbiAtIGldLmZsYWdzICY9IH5ESUZGX1NZTUJPTF9NT1ZFRF9MSU5FOworCXJldHVybiAwOworfQorCisvKiBGaW5kIGJsb2NrcyBvZiBtb3ZlZCBjb2RlLCBkZWxlZ2F0ZSBhY3R1YWwgY29sb3JpbmcgZGVjaXNpb24gdG8gaGVscGVyICovCitzdGF0aWMgdm9pZCBtYXJrX2NvbG9yX2FzX21vdmVkKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkJc3RydWN0IGhhc2htYXAgKmFkZF9saW5lcywKKwkJCQlzdHJ1Y3QgaGFzaG1hcCAqZGVsX2xpbmVzKQoreworCXN0cnVjdCBtb3ZlZF9ibG9jayAqcG1iID0gTlVMTDsgLyogcG90ZW50aWFsbHkgbW92ZWQgYmxvY2tzICovCisJaW50IHBtYl9uciA9IDAsIHBtYl9hbGxvYyA9IDA7CisJaW50IG4sIGZsaXBwZWRfYmxvY2sgPSAwLCBibG9ja19sZW5ndGggPSAwOworCisKKwlmb3IgKG4gPSAwOyBuIDwgby0+ZW1pdHRlZF9zeW1ib2xzLT5ucjsgbisrKSB7CisJCXN0cnVjdCBoYXNobWFwICpobSA9IE5VTEw7CisJCXN0cnVjdCBtb3ZlZF9lbnRyeSAqa2V5OworCQlzdHJ1Y3QgbW92ZWRfZW50cnkgKm1hdGNoID0gTlVMTDsKKwkJc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2wgKmwgPSAmby0+ZW1pdHRlZF9zeW1ib2xzLT5idWZbbl07CisJCWVudW0gZGlmZl9zeW1ib2wgbGFzdF9zeW1ib2wgPSAwOworCisJCXN3aXRjaCAobC0+cykgeworCQljYXNlIERJRkZfU1lNQk9MX1BMVVM6CisJCQlobSA9IGRlbF9saW5lczsKKwkJCWtleSA9IHByZXBhcmVfZW50cnkobywgbik7CisJCQltYXRjaCA9IGhhc2htYXBfZ2V0X2VudHJ5KGhtLCBrZXksIGVudCwgTlVMTCk7CisJCQlmcmVlKGtleSk7CisJCQlicmVhazsKKwkJY2FzZSBESUZGX1NZTUJPTF9NSU5VUzoKKwkJCWhtID0gYWRkX2xpbmVzOworCQkJa2V5ID0gcHJlcGFyZV9lbnRyeShvLCBuKTsKKwkJCW1hdGNoID0gaGFzaG1hcF9nZXRfZW50cnkoaG0sIGtleSwgZW50LCBOVUxMKTsKKwkJCWZyZWUoa2V5KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZmxpcHBlZF9ibG9jayA9IDA7CisJCX0KKworCQlpZiAoIW1hdGNoKSB7CisJCQlpbnQgaTsKKworCQkJYWRqdXN0X2xhc3RfYmxvY2sobywgbiwgYmxvY2tfbGVuZ3RoKTsKKwkJCWZvcihpID0gMDsgaSA8IHBtYl9ucjsgaSsrKQorCQkJCW1vdmVkX2Jsb2NrX2NsZWFyKCZwbWJbaV0pOworCQkJcG1iX25yID0gMDsKKwkJCWJsb2NrX2xlbmd0aCA9IDA7CisJCQlmbGlwcGVkX2Jsb2NrID0gMDsKKwkJCWxhc3Rfc3ltYm9sID0gbC0+czsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKG8tPmNvbG9yX21vdmVkID09IENPTE9SX01PVkVEX1BMQUlOKSB7CisJCQlsYXN0X3N5bWJvbCA9IGwtPnM7CisJCQlsLT5mbGFncyB8PSBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoby0+Y29sb3JfbW92ZWRfd3NfaGFuZGxpbmcgJgorCQkgICAgQ09MT1JfTU9WRURfV1NfQUxMT1dfSU5ERU5UQVRJT05fQ0hBTkdFKQorCQkJcG1iX2FkdmFuY2Vfb3JfbnVsbF9tdWx0aV9tYXRjaChvLCBtYXRjaCwgaG0sIHBtYiwgcG1iX25yLCBuKTsKKwkJZWxzZQorCQkJcG1iX2FkdmFuY2Vfb3JfbnVsbChvLCBtYXRjaCwgaG0sIHBtYiwgcG1iX25yKTsKKworCQlwbWJfbnIgPSBzaHJpbmtfcG90ZW50aWFsX21vdmVkX2Jsb2NrcyhwbWIsIHBtYl9ucik7CisKKwkJaWYgKHBtYl9uciA9PSAwKSB7CisJCQkvKgorCQkJICogVGhlIGN1cnJlbnQgbGluZSBpcyB0aGUgc3RhcnQgb2YgYSBuZXcgYmxvY2suCisJCQkgKiBTZXR1cCB0aGUgc2V0IG9mIHBvdGVudGlhbCBibG9ja3MuCisJCQkgKi8KKwkJCWhhc2htYXBfZm9yX2VhY2hfZW50cnlfZnJvbShobSwgbWF0Y2gsIGVudCkgeworCQkJCUFMTE9DX0dST1cocG1iLCBwbWJfbnIgKyAxLCBwbWJfYWxsb2MpOworCQkJCWlmIChvLT5jb2xvcl9tb3ZlZF93c19oYW5kbGluZyAmCisJCQkJICAgIENPTE9SX01PVkVEX1dTX0FMTE9XX0lOREVOVEFUSU9OX0NIQU5HRSkgeworCQkJCQlpZiAoY29tcHV0ZV93c19kZWx0YShsLCBtYXRjaC0+ZXMsCisJCQkJCQkJICAgICAmcG1iW3BtYl9ucl0ud3NkKSkKKwkJCQkJCXBtYltwbWJfbnIrK10ubWF0Y2ggPSBtYXRjaDsKKwkJCQl9IGVsc2UgeworCQkJCQlwbWJbcG1iX25yXS53c2QgPSAwOworCQkJCQlwbWJbcG1iX25yKytdLm1hdGNoID0gbWF0Y2g7CisJCQkJfQorCQkJfQorCisJCQlpZiAoYWRqdXN0X2xhc3RfYmxvY2sobywgbiwgYmxvY2tfbGVuZ3RoKSAmJgorCQkJICAgIHBtYl9uciAmJiBsYXN0X3N5bWJvbCAhPSBsLT5zKQorCQkJCWZsaXBwZWRfYmxvY2sgPSAoZmxpcHBlZF9ibG9jayArIDEpICUgMjsKKwkJCWVsc2UKKwkJCQlmbGlwcGVkX2Jsb2NrID0gMDsKKworCQkJYmxvY2tfbGVuZ3RoID0gMDsKKwkJfQorCisJCWlmIChwbWJfbnIpIHsKKwkJCWJsb2NrX2xlbmd0aCsrOworCQkJbC0+ZmxhZ3MgfD0gRElGRl9TWU1CT0xfTU9WRURfTElORTsKKwkJCWlmIChmbGlwcGVkX2Jsb2NrICYmIG8tPmNvbG9yX21vdmVkICE9IENPTE9SX01PVkVEX0JMT0NLUykKKwkJCQlsLT5mbGFncyB8PSBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX0FMVDsKKwkJfQorCQlsYXN0X3N5bWJvbCA9IGwtPnM7CisJfQorCWFkanVzdF9sYXN0X2Jsb2NrKG8sIG4sIGJsb2NrX2xlbmd0aCk7CisKKwlmb3IobiA9IDA7IG4gPCBwbWJfbnI7IG4rKykKKwkJbW92ZWRfYmxvY2tfY2xlYXIoJnBtYltuXSk7CisJZnJlZShwbWIpOworfQorCisjZGVmaW5lIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfWkVCUkFfTUFTSyBcCisgIChESUZGX1NZTUJPTF9NT1ZFRF9MSU5FIHwgRElGRl9TWU1CT0xfTU9WRURfTElORV9BTFQpCitzdGF0aWMgdm9pZCBkaW1fbW92ZWRfbGluZXMoc3RydWN0IGRpZmZfb3B0aW9ucyAqbykKK3sKKwlpbnQgbjsKKwlmb3IgKG4gPSAwOyBuIDwgby0+ZW1pdHRlZF9zeW1ib2xzLT5ucjsgbisrKSB7CisJCXN0cnVjdCBlbWl0dGVkX2RpZmZfc3ltYm9sICpwcmV2ID0gKG4gIT0gMCkgPworCQkJCSZvLT5lbWl0dGVkX3N5bWJvbHMtPmJ1ZltuIC0gMV0gOiBOVUxMOworCQlzdHJ1Y3QgZW1pdHRlZF9kaWZmX3N5bWJvbCAqbCA9ICZvLT5lbWl0dGVkX3N5bWJvbHMtPmJ1ZltuXTsKKwkJc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2wgKm5leHQgPQorCQkJCShuIDwgby0+ZW1pdHRlZF9zeW1ib2xzLT5uciAtIDEpID8KKwkJCQkmby0+ZW1pdHRlZF9zeW1ib2xzLT5idWZbbiArIDFdIDogTlVMTDsKKworCQkvKiBOb3QgYSBwbHVzIG9yIG1pbnVzIGxpbmU/ICovCisJCWlmIChsLT5zICE9IERJRkZfU1lNQk9MX1BMVVMgJiYgbC0+cyAhPSBESUZGX1NZTUJPTF9NSU5VUykKKwkJCWNvbnRpbnVlOworCisJCS8qIE5vdCBhIG1vdmVkIGxpbmU/ICovCisJCWlmICghKGwtPmZsYWdzICYgRElGRl9TWU1CT0xfTU9WRURfTElORSkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZiBwcmV2IG9yIG5leHQgYXJlIG5vdCBhIHBsdXMgb3IgbWludXMgbGluZSwKKwkJICogcHJldGVuZCB0aGV5IGRvbid0IGV4aXN0CisJCSAqLworCQlpZiAocHJldiAmJiBwcmV2LT5zICE9IERJRkZfU1lNQk9MX1BMVVMgJiYKKwkJCSAgICBwcmV2LT5zICE9IERJRkZfU1lNQk9MX01JTlVTKQorCQkJcHJldiA9IE5VTEw7CisJCWlmIChuZXh0ICYmIG5leHQtPnMgIT0gRElGRl9TWU1CT0xfUExVUyAmJgorCQkJICAgIG5leHQtPnMgIT0gRElGRl9TWU1CT0xfTUlOVVMpCisJCQluZXh0ID0gTlVMTDsKKworCQkvKiBJbnNpZGUgYSBibG9jaz8gKi8KKwkJaWYgKChwcmV2ICYmCisJCSAgICAocHJldi0+ZmxhZ3MgJiBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX1pFQlJBX01BU0spID09CisJCSAgICAobC0+ZmxhZ3MgJiBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX1pFQlJBX01BU0spKSAmJgorCQkgICAgKG5leHQgJiYKKwkJICAgIChuZXh0LT5mbGFncyAmIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfWkVCUkFfTUFTSykgPT0KKwkJICAgIChsLT5mbGFncyAmIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfWkVCUkFfTUFTSykpKSB7CisJCQlsLT5mbGFncyB8PSBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX1VOSU5URVJFU1RJTkc7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIENoZWNrIGlmIHdlIGFyZSBhdCBhbiBpbnRlcmVzdGluZyBib3VuZDogKi8KKwkJaWYgKHByZXYgJiYgKHByZXYtPmZsYWdzICYgRElGRl9TWU1CT0xfTU9WRURfTElORSkgJiYKKwkJICAgIChwcmV2LT5mbGFncyAmIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfQUxUKSAhPQorCQkgICAgICAgKGwtPmZsYWdzICYgRElGRl9TWU1CT0xfTU9WRURfTElORV9BTFQpKQorCQkJY29udGludWU7CisJCWlmIChuZXh0ICYmIChuZXh0LT5mbGFncyAmIERJRkZfU1lNQk9MX01PVkVEX0xJTkUpICYmCisJCSAgICAobmV4dC0+ZmxhZ3MgJiBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX0FMVCkgIT0KKwkJICAgICAgIChsLT5mbGFncyAmIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfQUxUKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFRoZSBib3VuZGFyeSB0byBwcmV2IGFuZCBuZXh0IGFyZSBub3QgaW50ZXJlc3RpbmcsCisJCSAqIHNvIHRoaXMgbGluZSBpcyBub3QgaW50ZXJlc3RpbmcgYXMgYSB3aG9sZQorCQkgKi8KKwkJbC0+ZmxhZ3MgfD0gRElGRl9TWU1CT0xfTU9WRURfTElORV9VTklOVEVSRVNUSU5HOworCX0KK30KKworc3RhdGljIHZvaWQgZW1pdF9saW5lX3dzX21hcmt1cChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJCWNvbnN0IGNoYXIgKnNldF9zaWduLCBjb25zdCBjaGFyICpzZXQsCisJCQkJY29uc3QgY2hhciAqcmVzZXQsCisJCQkJaW50IHNpZ25faW5kZXgsIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sCisJCQkJdW5zaWduZWQgd3NfcnVsZSwgaW50IGJsYW5rX2F0X2VvZikKK3sKKwljb25zdCBjaGFyICp3cyA9IE5VTEw7CisJaW50IHNpZ24gPSBvLT5vdXRwdXRfaW5kaWNhdG9yc1tzaWduX2luZGV4XTsKKworCWlmIChvLT53c19lcnJvcl9oaWdobGlnaHQgJiB3c19ydWxlKSB7CisJCXdzID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfV0hJVEVTUEFDRSk7CisJCWlmICghKndzKQorCQkJd3MgPSBOVUxMOworCX0KKworCWlmICghd3MgJiYgIXNldF9zaWduKQorCQllbWl0X2xpbmVfMChvLCBzZXQsIE5VTEwsIDAsIHJlc2V0LCBzaWduLCBsaW5lLCBsZW4pOworCWVsc2UgaWYgKCF3cykgeworCQllbWl0X2xpbmVfMChvLCBzZXRfc2lnbiwgc2V0LCAhIXNldF9zaWduLCByZXNldCwgc2lnbiwgbGluZSwgbGVuKTsKKwl9IGVsc2UgaWYgKGJsYW5rX2F0X2VvZikKKwkJLyogQmxhbmsgbGluZSBhdCBFT0YgLSBwYWludCAnKycgYXMgd2VsbCAqLworCQllbWl0X2xpbmVfMChvLCB3cywgTlVMTCwgMCwgcmVzZXQsIHNpZ24sIGxpbmUsIGxlbik7CisJZWxzZSB7CisJCS8qIEVtaXQganVzdCB0aGUgcHJlZml4LCB0aGVuIHRoZSByZXN0LiAqLworCQllbWl0X2xpbmVfMChvLCBzZXRfc2lnbiA/IHNldF9zaWduIDogc2V0LCBOVUxMLCAhIXNldF9zaWduLCByZXNldCwKKwkJCSAgICBzaWduLCAiIiwgMCk7CisJCXdzX2NoZWNrX2VtaXQobGluZSwgbGVuLCB3c19ydWxlLAorCQkJICAgICAgby0+ZmlsZSwgc2V0LCByZXNldCwgd3MpOworCX0KK30KKworc3RhdGljIHZvaWQgZW1pdF9kaWZmX3N5bWJvbF9mcm9tX3N0cnVjdChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJCQkgc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2wgKmVkcykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqbm5lb2YgPSAiIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiI7CisJY29uc3QgY2hhciAqY29udGV4dCwgKnJlc2V0LCAqc2V0LCAqc2V0X3NpZ24sICptZXRhLCAqZnJhZ2luZm87CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJZW51bSBkaWZmX3N5bWJvbCBzID0gZWRzLT5zOworCWNvbnN0IGNoYXIgKmxpbmUgPSBlZHMtPmxpbmU7CisJaW50IGxlbiA9IGVkcy0+bGVuOworCXVuc2lnbmVkIGZsYWdzID0gZWRzLT5mbGFnczsKKworCXN3aXRjaCAocykgeworCWNhc2UgRElGRl9TWU1CT0xfTk9fTEZfRU9GOgorCQljb250ZXh0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfQ09OVEVYVCk7CisJCXJlc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfUkVTRVQpOworCQlwdXRjKCdcbicsIG8tPmZpbGUpOworCQllbWl0X2xpbmVfMChvLCBjb250ZXh0LCBOVUxMLCAwLCByZXNldCwgJ1xcJywKKwkJCSAgICBubmVvZiwgc3RybGVuKG5uZW9mKSk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfU1VCTU9EVUxFX0hFQURFUjoKKwljYXNlIERJRkZfU1lNQk9MX1NVQk1PRFVMRV9FUlJPUjoKKwljYXNlIERJRkZfU1lNQk9MX1NVQk1PRFVMRV9QSVBFVEhST1VHSDoKKwljYXNlIERJRkZfU1lNQk9MX1NUQVRTX1NVTU1BUllfSU5TRVJUU19ERUxFVEVTOgorCWNhc2UgRElGRl9TWU1CT0xfU1VNTUFSWToKKwljYXNlIERJRkZfU1lNQk9MX1NUQVRTX0xJTkU6CisJY2FzZSBESUZGX1NZTUJPTF9CSU5BUllfRElGRl9CT0RZOgorCWNhc2UgRElGRl9TWU1CT0xfQ09OVEVYVF9GUkFHSU5GTzoKKwkJZW1pdF9saW5lKG8sICIiLCAiIiwgbGluZSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9DT05URVhUX0lOQ09NUExFVEU6CisJY2FzZSBESUZGX1NZTUJPTF9DT05URVhUX01BUktFUjoKKwkJY29udGV4dCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0NPTlRFWFQpOworCQlyZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX1JFU0VUKTsKKwkJZW1pdF9saW5lKG8sIGNvbnRleHQsIHJlc2V0LCBsaW5lLCBsZW4pOworCQlicmVhazsKKwljYXNlIERJRkZfU1lNQk9MX1NFUEFSQVRPUjoKKwkJZnByaW50ZihvLT5maWxlLCAiJXMlYyIsCisJCQlkaWZmX2xpbmVfcHJlZml4KG8pLAorCQkJby0+bGluZV90ZXJtaW5hdGlvbik7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfQ09OVEVYVDoKKwkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfQ09OVEVYVCk7CisJCXJlc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfUkVTRVQpOworCQlzZXRfc2lnbiA9IE5VTEw7CisJCWlmIChvLT5mbGFncy5kdWFsX2NvbG9yX2RpZmZlZF9kaWZmcykgeworCQkJY2hhciBjID0gIWxlbiA/IDAgOiBsaW5lWzBdOworCisJCQlpZiAoYyA9PSAnKycpCisJCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9ORVcpOworCQkJZWxzZSBpZiAoYyA9PSAnQCcpCisJCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRlJBR0lORk8pOworCQkJZWxzZSBpZiAoYyA9PSAnLScpCisJCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9PTEQpOworCQl9CisJCWVtaXRfbGluZV93c19tYXJrdXAobywgc2V0X3NpZ24sIHNldCwgcmVzZXQsCisJCQkJICAgIE9VVFBVVF9JTkRJQ0FUT1JfQ09OVEVYVCwgbGluZSwgbGVuLAorCQkJCSAgICBmbGFncyAmIChESUZGX1NZTUJPTF9DT05URU5UX1dTX01BU0spLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9QTFVTOgorCQlzd2l0Y2ggKGZsYWdzICYgKERJRkZfU1lNQk9MX01PVkVEX0xJTkUgfAorCQkJCSBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX0FMVCB8CisJCQkJIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfVU5JTlRFUkVTVElORykpIHsKKwkJY2FzZSBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FIHwKKwkJICAgICBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX0FMVCB8CisJCSAgICAgRElGRl9TWU1CT0xfTU9WRURfTElORV9VTklOVEVSRVNUSU5HOgorCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9ORVdfTU9WRURfQUxUX0RJTSk7CisJCQlicmVhazsKKwkJY2FzZSBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FIHwKKwkJICAgICBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX0FMVDoKKwkJCXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0ZJTEVfTkVXX01PVkVEX0FMVCk7CisJCQlicmVhazsKKwkJY2FzZSBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FIHwKKwkJICAgICBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX1VOSU5URVJFU1RJTkc6CisJCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX05FV19NT1ZFRF9ESU0pOworCQkJYnJlYWs7CisJCWNhc2UgRElGRl9TWU1CT0xfTU9WRURfTElORToKKwkJCXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0ZJTEVfTkVXX01PVkVEKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9ORVcpOworCQl9CisJCXJlc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfUkVTRVQpOworCQlpZiAoIW8tPmZsYWdzLmR1YWxfY29sb3JfZGlmZmVkX2RpZmZzKQorCQkJc2V0X3NpZ24gPSBOVUxMOworCQllbHNlIHsKKwkJCWNoYXIgYyA9ICFsZW4gPyAwIDogbGluZVswXTsKKworCQkJc2V0X3NpZ24gPSBzZXQ7CisJCQlpZiAoYyA9PSAnLScpCisJCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9PTERfQk9MRCk7CisJCQllbHNlIGlmIChjID09ICdAJykKKwkJCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GUkFHSU5GTyk7CisJCQllbHNlIGlmIChjID09ICcrJykKKwkJCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX05FV19CT0xEKTsKKwkJCWVsc2UKKwkJCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9DT05URVhUX0JPTEQpOworCQkJZmxhZ3MgJj0gfkRJRkZfU1lNQk9MX0NPTlRFTlRfV1NfTUFTSzsKKwkJfQorCQllbWl0X2xpbmVfd3NfbWFya3VwKG8sIHNldF9zaWduLCBzZXQsIHJlc2V0LAorCQkJCSAgICBPVVRQVVRfSU5ESUNBVE9SX05FVywgbGluZSwgbGVuLAorCQkJCSAgICBmbGFncyAmIERJRkZfU1lNQk9MX0NPTlRFTlRfV1NfTUFTSywKKwkJCQkgICAgZmxhZ3MgJiBESUZGX1NZTUJPTF9DT05URU5UX0JMQU5LX0xJTkVfRU9GKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9NSU5VUzoKKwkJc3dpdGNoIChmbGFncyAmIChESUZGX1NZTUJPTF9NT1ZFRF9MSU5FIHwKKwkJCQkgRElGRl9TWU1CT0xfTU9WRURfTElORV9BTFQgfAorCQkJCSBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX1VOSU5URVJFU1RJTkcpKSB7CisJCWNhc2UgRElGRl9TWU1CT0xfTU9WRURfTElORSB8CisJCSAgICAgRElGRl9TWU1CT0xfTU9WRURfTElORV9BTFQgfAorCQkgICAgIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfVU5JTlRFUkVTVElORzoKKwkJCXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0ZJTEVfT0xEX01PVkVEX0FMVF9ESU0pOworCQkJYnJlYWs7CisJCWNhc2UgRElGRl9TWU1CT0xfTU9WRURfTElORSB8CisJCSAgICAgRElGRl9TWU1CT0xfTU9WRURfTElORV9BTFQ6CisJCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX09MRF9NT1ZFRF9BTFQpOworCQkJYnJlYWs7CisJCWNhc2UgRElGRl9TWU1CT0xfTU9WRURfTElORSB8CisJCSAgICAgRElGRl9TWU1CT0xfTU9WRURfTElORV9VTklOVEVSRVNUSU5HOgorCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9PTERfTU9WRURfRElNKTsKKwkJCWJyZWFrOworCQljYXNlIERJRkZfU1lNQk9MX01PVkVEX0xJTkU6CisJCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX09MRF9NT1ZFRCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0ZJTEVfT0xEKTsKKwkJfQorCQlyZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX1JFU0VUKTsKKwkJaWYgKCFvLT5mbGFncy5kdWFsX2NvbG9yX2RpZmZlZF9kaWZmcykKKwkJCXNldF9zaWduID0gTlVMTDsKKwkJZWxzZSB7CisJCQljaGFyIGMgPSAhbGVuID8gMCA6IGxpbmVbMF07CisKKwkJCXNldF9zaWduID0gc2V0OworCQkJaWYgKGMgPT0gJysnKQorCQkJCXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0ZJTEVfTkVXX0RJTSk7CisJCQllbHNlIGlmIChjID09ICdAJykKKwkJCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GUkFHSU5GTyk7CisJCQllbHNlIGlmIChjID09ICctJykKKwkJCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX09MRF9ESU0pOworCQkJZWxzZQorCQkJCXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0NPTlRFWFRfRElNKTsKKwkJfQorCQllbWl0X2xpbmVfd3NfbWFya3VwKG8sIHNldF9zaWduLCBzZXQsIHJlc2V0LAorCQkJCSAgICBPVVRQVVRfSU5ESUNBVE9SX09MRCwgbGluZSwgbGVuLAorCQkJCSAgICBmbGFncyAmIERJRkZfU1lNQk9MX0NPTlRFTlRfV1NfTUFTSywgMCk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfV09SRFNfUE9SQ0VMQUlOOgorCQljb250ZXh0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfQ09OVEVYVCk7CisJCXJlc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfUkVTRVQpOworCQllbWl0X2xpbmUobywgY29udGV4dCwgcmVzZXQsIGxpbmUsIGxlbik7CisJCWZwdXRzKCJ+XG4iLCBvLT5maWxlKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9XT1JEUzoKKwkJY29udGV4dCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0NPTlRFWFQpOworCQlyZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX1JFU0VUKTsKKwkJLyoKKwkJICogU2tpcCB0aGUgcHJlZml4IGNoYXJhY3RlciwgaWYgYW55LiAgV2l0aAorCQkgKiBkaWZmX3N1cHByZXNzX2JsYW5rX2VtcHR5LCB0aGVyZSBtYXkgYmUKKwkJICogbm9uZS4KKwkJICovCisJCWlmIChsaW5lWzBdICE9ICdcbicpIHsKKwkJCWxpbmUrKzsKKwkJCWxlbi0tOworCQl9CisJCWVtaXRfbGluZShvLCBjb250ZXh0LCByZXNldCwgbGluZSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9GSUxFUEFJUl9QTFVTOgorCQltZXRhID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfTUVUQUlORk8pOworCQlyZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX1JFU0VUKTsKKwkJZnByaW50ZihvLT5maWxlLCAiJXMlcysrKyAlcyVzJXNcbiIsIGRpZmZfbGluZV9wcmVmaXgobyksIG1ldGEsCisJCQlsaW5lLCByZXNldCwKKwkJCXN0cmNocihsaW5lLCAnICcpID8gIlx0IiA6ICIiKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9GSUxFUEFJUl9NSU5VUzoKKwkJbWV0YSA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX01FVEFJTkZPKTsKKwkJcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9SRVNFVCk7CisJCWZwcmludGYoby0+ZmlsZSwgIiVzJXMtLS0gJXMlcyVzXG4iLCBkaWZmX2xpbmVfcHJlZml4KG8pLCBtZXRhLAorCQkJbGluZSwgcmVzZXQsCisJCQlzdHJjaHIobGluZSwgJyAnKSA/ICJcdCIgOiAiIik7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfQklOQVJZX0ZJTEVTOgorCWNhc2UgRElGRl9TWU1CT0xfSEVBREVSOgorCQlmcHJpbnRmKG8tPmZpbGUsICIlcyIsIGxpbmUpOworCQlicmVhazsKKwljYXNlIERJRkZfU1lNQk9MX0JJTkFSWV9ESUZGX0hFQURFUjoKKwkJZnByaW50ZihvLT5maWxlLCAiJXNHSVQgYmluYXJ5IHBhdGNoXG4iLCBkaWZmX2xpbmVfcHJlZml4KG8pKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9CSU5BUllfRElGRl9IRUFERVJfREVMVEE6CisJCWZwcmludGYoby0+ZmlsZSwgIiVzZGVsdGEgJXNcbiIsIGRpZmZfbGluZV9wcmVmaXgobyksIGxpbmUpOworCQlicmVhazsKKwljYXNlIERJRkZfU1lNQk9MX0JJTkFSWV9ESUZGX0hFQURFUl9MSVRFUkFMOgorCQlmcHJpbnRmKG8tPmZpbGUsICIlc2xpdGVyYWwgJXNcbiIsIGRpZmZfbGluZV9wcmVmaXgobyksIGxpbmUpOworCQlicmVhazsKKwljYXNlIERJRkZfU1lNQk9MX0JJTkFSWV9ESUZGX0ZPT1RFUjoKKwkJZnB1dHMoZGlmZl9saW5lX3ByZWZpeChvKSwgby0+ZmlsZSk7CisJCWZwdXRjKCdcbicsIG8tPmZpbGUpOworCQlicmVhazsKKwljYXNlIERJRkZfU1lNQk9MX1JFV1JJVEVfRElGRjoKKwkJZnJhZ2luZm8gPSBkaWZmX2dldF9jb2xvcihvLT51c2VfY29sb3IsIERJRkZfRlJBR0lORk8pOworCQlyZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX1JFU0VUKTsKKwkJZW1pdF9saW5lKG8sIGZyYWdpbmZvLCByZXNldCwgbGluZSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9TVUJNT0RVTEVfQUREOgorCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX05FVyk7CisJCXJlc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfUkVTRVQpOworCQllbWl0X2xpbmUobywgc2V0LCByZXNldCwgbGluZSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9TVUJNT0RVTEVfREVMOgorCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX09MRCk7CisJCXJlc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfUkVTRVQpOworCQllbWl0X2xpbmUobywgc2V0LCByZXNldCwgbGluZSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9TVUJNT0RVTEVfVU5UUkFDS0VEOgorCQlmcHJpbnRmKG8tPmZpbGUsICIlc1N1Ym1vZHVsZSAlcyBjb250YWlucyB1bnRyYWNrZWQgY29udGVudFxuIiwKKwkJCWRpZmZfbGluZV9wcmVmaXgobyksIGxpbmUpOworCQlicmVhazsKKwljYXNlIERJRkZfU1lNQk9MX1NVQk1PRFVMRV9NT0RJRklFRDoKKwkJZnByaW50ZihvLT5maWxlLCAiJXNTdWJtb2R1bGUgJXMgY29udGFpbnMgbW9kaWZpZWQgY29udGVudFxuIiwKKwkJCWRpZmZfbGluZV9wcmVmaXgobyksIGxpbmUpOworCQlicmVhazsKKwljYXNlIERJRkZfU1lNQk9MX1NUQVRTX1NVTU1BUllfTk9fRklMRVM6CisJCWVtaXRfbGluZShvLCAiIiwgIiIsICIgMCBmaWxlcyBjaGFuZ2VkXG4iLAorCQkJICBzdHJsZW4oIiAwIGZpbGVzIGNoYW5nZWRcbiIpKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9TVEFUU19TVU1NQVJZX0FCQlJFVjoKKwkJZW1pdF9saW5lKG8sICIiLCAiIiwgIiAuLi5cbiIsIHN0cmxlbigiIC4uLlxuIikpOworCQlicmVhazsKKwljYXNlIERJRkZfU1lNQk9MX1dPUkRfRElGRjoKKwkJZnByaW50ZihvLT5maWxlLCAiJS4qcyIsIGxlbiwgbGluZSk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfU1RBVF9TRVA6CisJCWZwdXRzKG8tPnN0YXRfc2VwLCBvLT5maWxlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCJ1bmtub3duIGRpZmYgc3ltYm9sIik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfZGlmZl9zeW1ib2woc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgZW51bSBkaWZmX3N5bWJvbCBzLAorCQkJICAgICBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3QgZW1pdHRlZF9kaWZmX3N5bWJvbCBlID0ge2xpbmUsIGxlbiwgZmxhZ3MsIDAsIDAsIHN9OworCisJaWYgKG8tPmVtaXR0ZWRfc3ltYm9scykKKwkJYXBwZW5kX2VtaXR0ZWRfZGlmZl9zeW1ib2wobywgJmUpOworCWVsc2UKKwkJZW1pdF9kaWZmX3N5bWJvbF9mcm9tX3N0cnVjdChvLCAmZSk7Cit9CisKK3ZvaWQgZGlmZl9lbWl0X3N1Ym1vZHVsZV9kZWwoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqbGluZSkKK3sKKwllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX1NVQk1PRFVMRV9ERUwsIGxpbmUsIHN0cmxlbihsaW5lKSwgMCk7Cit9CisKK3ZvaWQgZGlmZl9lbWl0X3N1Ym1vZHVsZV9hZGQoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqbGluZSkKK3sKKwllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX1NVQk1PRFVMRV9BREQsIGxpbmUsIHN0cmxlbihsaW5lKSwgMCk7Cit9CisKK3ZvaWQgZGlmZl9lbWl0X3N1Ym1vZHVsZV91bnRyYWNrZWQoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqcGF0aCkKK3sKKwllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX1NVQk1PRFVMRV9VTlRSQUNLRUQsCisJCQkgcGF0aCwgc3RybGVuKHBhdGgpLCAwKTsKK30KKwordm9pZCBkaWZmX2VtaXRfc3VibW9kdWxlX21vZGlmaWVkKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9TVUJNT0RVTEVfTU9ESUZJRUQsCisJCQkgcGF0aCwgc3RybGVuKHBhdGgpLCAwKTsKK30KKwordm9pZCBkaWZmX2VtaXRfc3VibW9kdWxlX2hlYWRlcihzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLCBjb25zdCBjaGFyICpoZWFkZXIpCit7CisJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9TVUJNT0RVTEVfSEVBREVSLAorCQkJIGhlYWRlciwgc3RybGVuKGhlYWRlciksIDApOworfQorCit2b2lkIGRpZmZfZW1pdF9zdWJtb2R1bGVfZXJyb3Ioc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqZXJyKQoreworCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfU1VCTU9EVUxFX0VSUk9SLCBlcnIsIHN0cmxlbihlcnIpLCAwKTsKK30KKwordm9pZCBkaWZmX2VtaXRfc3VibW9kdWxlX3BpcGV0aHJvdWdoKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkJICAgICBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfU1VCTU9EVUxFX1BJUEVUSFJPVUdILCBsaW5lLCBsZW4sIDApOworfQorCitzdGF0aWMgaW50IG5ld19ibGFua19saW5lX2F0X2VvZihzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSwgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwlpZiAoISgoZWNiZGF0YS0+d3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikgJiYKKwkgICAgICBlY2JkYXRhLT5ibGFua19hdF9lb2ZfaW5fcHJlaW1hZ2UgJiYKKwkgICAgICBlY2JkYXRhLT5ibGFua19hdF9lb2ZfaW5fcG9zdGltYWdlICYmCisJICAgICAgZWNiZGF0YS0+YmxhbmtfYXRfZW9mX2luX3ByZWltYWdlIDw9IGVjYmRhdGEtPmxub19pbl9wcmVpbWFnZSAmJgorCSAgICAgIGVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wb3N0aW1hZ2UgPD0gZWNiZGF0YS0+bG5vX2luX3Bvc3RpbWFnZSkpCisJCXJldHVybiAwOworCXJldHVybiB3c19ibGFua19saW5lKGxpbmUsIGxlbiwgZWNiZGF0YS0+d3NfcnVsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfYWRkX2xpbmUoc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYmRhdGEsCisJCQkgIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJdW5zaWduZWQgZmxhZ3MgPSBXU0VIX05FVyB8IGVjYmRhdGEtPndzX3J1bGU7CisJaWYgKG5ld19ibGFua19saW5lX2F0X2VvZihlY2JkYXRhLCBsaW5lLCBsZW4pKQorCQlmbGFncyB8PSBESUZGX1NZTUJPTF9DT05URU5UX0JMQU5LX0xJTkVfRU9GOworCisJZW1pdF9kaWZmX3N5bWJvbChlY2JkYXRhLT5vcHQsIERJRkZfU1lNQk9MX1BMVVMsIGxpbmUsIGxlbiwgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBlbWl0X2RlbF9saW5lKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhLAorCQkJICBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGZsYWdzID0gV1NFSF9PTEQgfCBlY2JkYXRhLT53c19ydWxlOworCWVtaXRfZGlmZl9zeW1ib2woZWNiZGF0YS0+b3B0LCBESUZGX1NZTUJPTF9NSU5VUywgbGluZSwgbGVuLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfY29udGV4dF9saW5lKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhLAorCQkJICAgICAgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBmbGFncyA9IFdTRUhfQ09OVEVYVCB8IGVjYmRhdGEtPndzX3J1bGU7CisJZW1pdF9kaWZmX3N5bWJvbChlY2JkYXRhLT5vcHQsIERJRkZfU1lNQk9MX0NPTlRFWFQsIGxpbmUsIGxlbiwgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBlbWl0X2h1bmtfaGVhZGVyKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhLAorCQkJICAgICBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWNvbnN0IGNoYXIgKmNvbnRleHQgPSBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBESUZGX0NPTlRFWFQpOworCWNvbnN0IGNoYXIgKmZyYWcgPSBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBESUZGX0ZSQUdJTkZPKTsKKwljb25zdCBjaGFyICpmdW5jID0gZGlmZl9nZXRfY29sb3IoZWNiZGF0YS0+Y29sb3JfZGlmZiwgRElGRl9GVU5DSU5GTyk7CisJY29uc3QgY2hhciAqcmVzZXQgPSBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBESUZGX1JFU0VUKTsKKwljb25zdCBjaGFyICpyZXZlcnNlID0gZWNiZGF0YS0+Y29sb3JfZGlmZiA/IEdJVF9DT0xPUl9SRVZFUlNFIDogIiI7CisJc3RhdGljIGNvbnN0IGNoYXIgYXRhdFsyXSA9IHsgJ0AnLCAnQCcgfTsKKwljb25zdCBjaGFyICpjcCwgKmVwOworCXN0cnVjdCBzdHJidWYgbXNnYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IG9yZ19sZW4gPSBsZW47CisJaW50IGkgPSAxOworCisJLyoKKwkgKiBBcyBhIGh1bmsgaGVhZGVyIG11c3QgYmVnaW4gd2l0aCAiQEAgLTxvbGQ+LCArPG5ldz4gQEAiLAorCSAqIGl0IGFsd2F5cyBpcyBhdCBsZWFzdCAxMCBieXRlcyBsb25nLgorCSAqLworCWlmIChsZW4gPCAxMCB8fAorCSAgICBtZW1jbXAobGluZSwgYXRhdCwgMikgfHwKKwkgICAgIShlcCA9IG1lbW1lbShsaW5lICsgMiwgbGVuIC0gMiwgYXRhdCwgMikpKSB7CisJCWVtaXRfZGlmZl9zeW1ib2woZWNiZGF0YS0+b3B0LAorCQkJCSBESUZGX1NZTUJPTF9DT05URVhUX01BUktFUiwgbGluZSwgbGVuLCAwKTsKKwkJcmV0dXJuOworCX0KKwllcCArPSAyOyAvKiBza2lwIG92ZXIgQEAgKi8KKworCS8qIFRoZSBodW5rIGhlYWRlciBpbiBmcmFnaW5mbyBjb2xvciAqLworCWlmIChlY2JkYXRhLT5vcHQtPmZsYWdzLmR1YWxfY29sb3JfZGlmZmVkX2RpZmZzKQorCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIHJldmVyc2UpOworCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgZnJhZyk7CisJaWYgKGVjYmRhdGEtPm9wdC0+ZmxhZ3Muc3VwcHJlc3NfaHVua19oZWFkZXJfbGluZV9jb3VudCkKKwkJc3RyYnVmX2FkZCgmbXNnYnVmLCBhdGF0LCBzaXplb2YoYXRhdCkpOworCWVsc2UKKwkJc3RyYnVmX2FkZCgmbXNnYnVmLCBsaW5lLCBlcCAtIGxpbmUpOworCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgcmVzZXQpOworCisJLyoKKwkgKiB0cmFpbGluZyAiXHJcbiIKKwkgKi8KKwlmb3IgKCA7IGkgPCAzOyBpKyspCisJCWlmIChsaW5lW2xlbiAtIGldID09ICdccicgfHwgbGluZVtsZW4gLSBpXSA9PSAnXG4nKQorCQkJbGVuLS07CisKKwkvKiBibGFuayBiZWZvcmUgdGhlIGZ1bmMgaGVhZGVyICovCisJZm9yIChjcCA9IGVwOyBlcCAtIGxpbmUgPCBsZW47IGVwKyspCisJCWlmICgqZXAgIT0gJyAnICYmICplcCAhPSAnXHQnKQorCQkJYnJlYWs7CisJaWYgKGVwICE9IGNwKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgY29udGV4dCk7CisJCXN0cmJ1Zl9hZGQoJm1zZ2J1ZiwgY3AsIGVwIC0gY3ApOworCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIHJlc2V0KTsKKwl9CisKKwlpZiAoZXAgPCBsaW5lICsgbGVuKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgZnVuYyk7CisJCXN0cmJ1Zl9hZGQoJm1zZ2J1ZiwgZXAsIGxpbmUgKyBsZW4gLSBlcCk7CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgcmVzZXQpOworCX0KKworCXN0cmJ1Zl9hZGQoJm1zZ2J1ZiwgbGluZSArIGxlbiwgb3JnX2xlbiAtIGxlbik7CisJc3RyYnVmX2NvbXBsZXRlX2xpbmUoJm1zZ2J1Zik7CisJZW1pdF9kaWZmX3N5bWJvbChlY2JkYXRhLT5vcHQsCisJCQkgRElGRl9TWU1CT0xfQ09OVEVYVF9GUkFHSU5GTywgbXNnYnVmLmJ1ZiwgbXNnYnVmLmxlbiwgMCk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlmZl90ZW1wZmlsZSAqY2xhaW1fZGlmZl90ZW1wZmlsZSh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRpZmZfdGVtcCk7IGkrKykKKwkJaWYgKCFkaWZmX3RlbXBbaV0ubmFtZSkKKwkJCXJldHVybiBkaWZmX3RlbXAgKyBpOworCUJVRygiZGlmZiBpcyBmYWlsaW5nIHRvIGNsZWFuIHVwIGl0cyB0ZW1wZmlsZXMiKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3RlbXBmaWxlKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlmZl90ZW1wKTsgaSsrKSB7CisJCWlmIChpc190ZW1wZmlsZV9hY3RpdmUoZGlmZl90ZW1wW2ldLnRlbXBmaWxlKSkKKwkJCWRlbGV0ZV90ZW1wZmlsZSgmZGlmZl90ZW1wW2ldLnRlbXBmaWxlKTsKKwkJZGlmZl90ZW1wW2ldLm5hbWUgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgYWRkX2xpbmVfY291bnQoc3RydWN0IHN0cmJ1ZiAqb3V0LCBpbnQgY291bnQpCit7CisJc3dpdGNoIChjb3VudCkgeworCWNhc2UgMDoKKwkJc3RyYnVmX2FkZHN0cihvdXQsICIwLDAiKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzdHJidWZfYWRkc3RyKG91dCwgIjEiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RyYnVmX2FkZGYob3V0LCAiMSwlZCIsIGNvdW50KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBlbWl0X3Jld3JpdGVfbGluZXMoc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYiwKKwkJCSAgICAgICBpbnQgcHJlZml4LCBjb25zdCBjaGFyICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwljb25zdCBjaGFyICplbmRwID0gTlVMTDsKKworCXdoaWxlICgwIDwgc2l6ZSkgeworCQlpbnQgbGVuOworCisJCWVuZHAgPSBtZW1jaHIoZGF0YSwgJ1xuJywgc2l6ZSk7CisJCWxlbiA9IGVuZHAgPyAoZW5kcCAtIGRhdGEgKyAxKSA6IHNpemU7CisJCWlmIChwcmVmaXggIT0gJysnKSB7CisJCQllY2ItPmxub19pbl9wcmVpbWFnZSsrOworCQkJZW1pdF9kZWxfbGluZShlY2IsIGRhdGEsIGxlbik7CisJCX0gZWxzZSB7CisJCQllY2ItPmxub19pbl9wb3N0aW1hZ2UrKzsKKwkJCWVtaXRfYWRkX2xpbmUoZWNiLCBkYXRhLCBsZW4pOworCQl9CisJCXNpemUgLT0gbGVuOworCQlkYXRhICs9IGxlbjsKKwl9CisJaWYgKCFlbmRwKQorCQllbWl0X2RpZmZfc3ltYm9sKGVjYi0+b3B0LCBESUZGX1NZTUJPTF9OT19MRl9FT0YsIE5VTEwsIDAsIDApOworfQorCitzdGF0aWMgdm9pZCBlbWl0X3Jld3JpdGVfZGlmZihjb25zdCBjaGFyICpuYW1lX2EsCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lX2IsCisJCQkgICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkJICAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bywKKwkJCSAgICAgIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252X29uZSwKKwkJCSAgICAgIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252X3R3bywKKwkJCSAgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8pCit7CisJaW50IGxjX2EsIGxjX2I7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYV9uYW1lID0gU1RSQlVGX0lOSVQsIGJfbmFtZSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmFfcHJlZml4LCAqYl9wcmVmaXg7CisJY2hhciAqZGF0YV9vbmUsICpkYXRhX3R3bzsKKwlzaXplX3Qgc2l6ZV9vbmUsIHNpemVfdHdvOworCXN0cnVjdCBlbWl0X2NhbGxiYWNrIGVjYmRhdGE7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKworCWlmIChkaWZmX21uZW1vbmljX3ByZWZpeCAmJiBvLT5mbGFncy5yZXZlcnNlX2RpZmYpIHsKKwkJYV9wcmVmaXggPSBvLT5iX3ByZWZpeDsKKwkJYl9wcmVmaXggPSBvLT5hX3ByZWZpeDsKKwl9IGVsc2UgeworCQlhX3ByZWZpeCA9IG8tPmFfcHJlZml4OworCQliX3ByZWZpeCA9IG8tPmJfcHJlZml4OworCX0KKworCW5hbWVfYSArPSAoKm5hbWVfYSA9PSAnLycpOworCW5hbWVfYiArPSAoKm5hbWVfYiA9PSAnLycpOworCisJc3RyYnVmX3Jlc2V0KCZhX25hbWUpOworCXN0cmJ1Zl9yZXNldCgmYl9uYW1lKTsKKwlxdW90ZV90d29fY19zdHlsZSgmYV9uYW1lLCBhX3ByZWZpeCwgbmFtZV9hLCAwKTsKKwlxdW90ZV90d29fY19zdHlsZSgmYl9uYW1lLCBiX3ByZWZpeCwgbmFtZV9iLCAwKTsKKworCXNpemVfb25lID0gZmlsbF90ZXh0Y29udihvLT5yZXBvLCB0ZXh0Y29udl9vbmUsIG9uZSwgJmRhdGFfb25lKTsKKwlzaXplX3R3byA9IGZpbGxfdGV4dGNvbnYoby0+cmVwbywgdGV4dGNvbnZfdHdvLCB0d28sICZkYXRhX3R3byk7CisKKwltZW1zZXQoJmVjYmRhdGEsIDAsIHNpemVvZihlY2JkYXRhKSk7CisJZWNiZGF0YS5jb2xvcl9kaWZmID0gd2FudF9jb2xvcihvLT51c2VfY29sb3IpOworCWVjYmRhdGEud3NfcnVsZSA9IHdoaXRlc3BhY2VfcnVsZShvLT5yZXBvLT5pbmRleCwgbmFtZV9iKTsKKwllY2JkYXRhLm9wdCA9IG87CisJaWYgKGVjYmRhdGEud3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikgeworCQltbWZpbGVfdCBtZjEsIG1mMjsKKwkJbWYxLnB0ciA9IChjaGFyICopZGF0YV9vbmU7CisJCW1mMi5wdHIgPSAoY2hhciAqKWRhdGFfdHdvOworCQltZjEuc2l6ZSA9IHNpemVfb25lOworCQltZjIuc2l6ZSA9IHNpemVfdHdvOworCQljaGVja19ibGFua19hdF9lb2YoJm1mMSwgJm1mMiwgJmVjYmRhdGEpOworCX0KKwllY2JkYXRhLmxub19pbl9wcmVpbWFnZSA9IDE7CisJZWNiZGF0YS5sbm9faW5fcG9zdGltYWdlID0gMTsKKworCWxjX2EgPSBjb3VudF9saW5lcyhkYXRhX29uZSwgc2l6ZV9vbmUpOworCWxjX2IgPSBjb3VudF9saW5lcyhkYXRhX3R3bywgc2l6ZV90d28pOworCisJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9GSUxFUEFJUl9NSU5VUywKKwkJCSBhX25hbWUuYnVmLCBhX25hbWUubGVuLCAwKTsKKwllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0ZJTEVQQUlSX1BMVVMsCisJCQkgYl9uYW1lLmJ1ZiwgYl9uYW1lLmxlbiwgMCk7CisKKwlzdHJidWZfYWRkc3RyKCZvdXQsICJAQCAtIik7CisJaWYgKCFvLT5pcnJldmVyc2libGVfZGVsZXRlKQorCQlhZGRfbGluZV9jb3VudCgmb3V0LCBsY19hKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRzdHIoJm91dCwgIj8sPyIpOworCXN0cmJ1Zl9hZGRzdHIoJm91dCwgIiArIik7CisJYWRkX2xpbmVfY291bnQoJm91dCwgbGNfYik7CisJc3RyYnVmX2FkZHN0cigmb3V0LCAiIEBAXG4iKTsKKwllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX1JFV1JJVEVfRElGRiwgb3V0LmJ1Ziwgb3V0LmxlbiwgMCk7CisJc3RyYnVmX3JlbGVhc2UoJm91dCk7CisKKwlpZiAobGNfYSAmJiAhby0+aXJyZXZlcnNpYmxlX2RlbGV0ZSkKKwkJZW1pdF9yZXdyaXRlX2xpbmVzKCZlY2JkYXRhLCAnLScsIGRhdGFfb25lLCBzaXplX29uZSk7CisJaWYgKGxjX2IpCisJCWVtaXRfcmV3cml0ZV9saW5lcygmZWNiZGF0YSwgJysnLCBkYXRhX3R3bywgc2l6ZV90d28pOworCWlmICh0ZXh0Y29udl9vbmUpCisJCWZyZWUoKGNoYXIgKilkYXRhX29uZSk7CisJaWYgKHRleHRjb252X3R3bykKKwkJZnJlZSgoY2hhciAqKWRhdGFfdHdvKTsKK30KKworc3RydWN0IGRpZmZfd29yZHNfYnVmZmVyIHsKKwltbWZpbGVfdCB0ZXh0OworCXVuc2lnbmVkIGxvbmcgYWxsb2M7CisJc3RydWN0IGRpZmZfd29yZHNfb3JpZyB7CisJCWNvbnN0IGNoYXIgKmJlZ2luLCAqZW5kOworCX0gKm9yaWc7CisJaW50IG9yaWdfbnIsIG9yaWdfYWxsb2M7Cit9OworCitzdGF0aWMgdm9pZCBkaWZmX3dvcmRzX2FwcGVuZChjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJc3RydWN0IGRpZmZfd29yZHNfYnVmZmVyICpidWZmZXIpCit7CisJQUxMT0NfR1JPVyhidWZmZXItPnRleHQucHRyLCBidWZmZXItPnRleHQuc2l6ZSArIGxlbiwgYnVmZmVyLT5hbGxvYyk7CisJbGluZSsrOworCWxlbi0tOworCW1lbWNweShidWZmZXItPnRleHQucHRyICsgYnVmZmVyLT50ZXh0LnNpemUsIGxpbmUsIGxlbik7CisJYnVmZmVyLT50ZXh0LnNpemUgKz0gbGVuOworCWJ1ZmZlci0+dGV4dC5wdHJbYnVmZmVyLT50ZXh0LnNpemVdID0gJ1wwJzsKK30KKworc3RydWN0IGRpZmZfd29yZHNfc3R5bGVfZWxlbSB7CisJY29uc3QgY2hhciAqcHJlZml4OworCWNvbnN0IGNoYXIgKnN1ZmZpeDsKKwljb25zdCBjaGFyICpjb2xvcjsgLyogTlVMTDsgZmlsbGVkIGluIGJ5IHRoZSBzZXR1cCBjb2RlIGlmCisJCQkgICAgKiBjb2xvciBpcyBlbmFibGVkICovCit9OworCitzdHJ1Y3QgZGlmZl93b3Jkc19zdHlsZSB7CisJZW51bSBkaWZmX3dvcmRzX3R5cGUgdHlwZTsKKwlzdHJ1Y3QgZGlmZl93b3Jkc19zdHlsZV9lbGVtIG5ld193b3JkLCBvbGRfd29yZCwgY3R4OworCWNvbnN0IGNoYXIgKm5ld2xpbmU7Cit9OworCitzdGF0aWMgc3RydWN0IGRpZmZfd29yZHNfc3R5bGUgZGlmZl93b3Jkc19zdHlsZXNbXSA9IHsKKwl7IERJRkZfV09SRFNfUE9SQ0VMQUlOLCB7IisiLCAiXG4ifSwgeyItIiwgIlxuIn0sIHsiICIsICJcbiJ9LCAiflxuIiB9LAorCXsgRElGRl9XT1JEU19QTEFJTiwgeyJ7KyIsICIrfSJ9LCB7IlstIiwgIi1dIn0sIHsiIiwgIiJ9LCAiXG4iIH0sCisJeyBESUZGX1dPUkRTX0NPTE9SLCB7IiIsICIifSwgeyIiLCAiIn0sIHsiIiwgIiJ9LCAiXG4iIH0KK307CisKK3N0cnVjdCBkaWZmX3dvcmRzX2RhdGEgeworCXN0cnVjdCBkaWZmX3dvcmRzX2J1ZmZlciBtaW51cywgcGx1czsKKwljb25zdCBjaGFyICpjdXJyZW50X3BsdXM7CisJaW50IGxhc3RfbWludXM7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0OworCXJlZ2V4X3QgKndvcmRfcmVnZXg7CisJZW51bSBkaWZmX3dvcmRzX3R5cGUgdHlwZTsKKwlzdHJ1Y3QgZGlmZl93b3Jkc19zdHlsZSAqc3R5bGU7Cit9OworCitzdGF0aWMgaW50IGZuX291dF9kaWZmX3dvcmRzX3dyaXRlX2hlbHBlcihzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJCQkgIHN0cnVjdCBkaWZmX3dvcmRzX3N0eWxlX2VsZW0gKnN0X2VsLAorCQkJCQkgIGNvbnN0IGNoYXIgKm5ld2xpbmUsCisJCQkJCSAgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICpidWYpCit7CisJaW50IHByaW50ID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwl3aGlsZSAoY291bnQpIHsKKwkJY2hhciAqcCA9IG1lbWNocihidWYsICdcbicsIGNvdW50KTsKKwkJaWYgKHByaW50KQorCQkJc3RyYnVmX2FkZHN0cigmc2IsIGRpZmZfbGluZV9wcmVmaXgobykpOworCisJCWlmIChwICE9IGJ1ZikgeworCQkJY29uc3QgY2hhciAqcmVzZXQgPSBzdF9lbC0+Y29sb3IgJiYgKnN0X2VsLT5jb2xvciA/CisJCQkJCSAgICBHSVRfQ09MT1JfUkVTRVQgOiBOVUxMOworCQkJaWYgKHN0X2VsLT5jb2xvciAmJiAqc3RfZWwtPmNvbG9yKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBzdF9lbC0+Y29sb3IpOworCQkJc3RyYnVmX2FkZHN0cigmc2IsIHN0X2VsLT5wcmVmaXgpOworCQkJc3RyYnVmX2FkZCgmc2IsIGJ1ZiwgcCA/IHAgLSBidWYgOiBjb3VudCk7CisJCQlzdHJidWZfYWRkc3RyKCZzYiwgc3RfZWwtPnN1ZmZpeCk7CisJCQlpZiAocmVzZXQpCisJCQkJc3RyYnVmX2FkZHN0cigmc2IsIHJlc2V0KTsKKwkJfQorCQlpZiAoIXApCisJCQlnb3RvIG91dDsKKworCQlzdHJidWZfYWRkc3RyKCZzYiwgbmV3bGluZSk7CisJCWNvdW50IC09IHAgKyAxIC0gYnVmOworCQlidWYgPSBwICsgMTsKKwkJcHJpbnQgPSAxOworCQlpZiAoY291bnQpIHsKKwkJCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfV09SRF9ESUZGLAorCQkJCQkgc2IuYnVmLCBzYi5sZW4sIDApOworCQkJc3RyYnVmX3Jlc2V0KCZzYik7CisJCX0KKwl9CisKK291dDoKKwlpZiAoc2IubGVuKQorCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX1dPUkRfRElGRiwKKwkJCQkgc2IuYnVmLCBzYi5sZW4sIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAnLS1jb2xvci13b3JkcycgYWxnb3JpdGhtIGNhbiBiZSBkZXNjcmliZWQgYXM6CisgKgorICogICAxLiBjb2xsZWN0IHRoZSBtaW51cy9wbHVzIGxpbmVzIG9mIGEgZGlmZiBodW5rLCBkaXZpZGVkIGludG8KKyAqICAgICAgbWludXMtbGluZXMgYW5kIHBsdXMtbGluZXM7CisgKgorICogICAyLiBicmVhayBib3RoIG1pbnVzLWxpbmVzIGFuZCBwbHVzLWxpbmVzIGludG8gd29yZHMgYW5kCisgKiAgICAgIHBsYWNlIHRoZW0gaW50byB0d28gbW1maWxlX3Qgd2l0aCBvbmUgd29yZCBmb3IgZWFjaCBsaW5lOworICoKKyAqICAgMy4gdXNlIHhkaWZmIHRvIHJ1biBkaWZmIG9uIHRoZSB0d28gbW1maWxlX3QgdG8gZ2V0IHRoZSB3b3JkcyBsZXZlbCBkaWZmOworICoKKyAqIEFuZCBmb3IgdGhlIGNvbW1vbiBwYXJ0cyBvZiB0aGUgYm90aCBmaWxlLCB3ZSBvdXRwdXQgdGhlIHBsdXMgc2lkZSB0ZXh0LgorICogZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzIGlzIHVzZWQgdG8gdHJhY2UgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIHBsdXMgZmlsZQorICogd2hpY2ggcHJpbnRlZC4gZGlmZl93b3Jkcy0+bGFzdF9taW51cyBpcyB1c2VkIHRvIHRyYWNlIHRoZSBsYXN0IG1pbnVzIHdvcmQKKyAqIHByaW50ZWQuCisgKgorICogRm9yICctLWdyYXBoJyB0byB3b3JrIHdpdGggJy0tY29sb3Itd29yZHMnLCB3ZSBuZWVkIHRvIG91dHB1dCB0aGUgZ3JhcGggcHJlZml4CisgKiBvbiBlYWNoIGxpbmUgb2YgY29sb3Igd29yZHMgb3V0cHV0LiBHZW5lcmFsbHksIHRoZXJlIGFyZSB0d28gY29uZGl0aW9ucyBvbgorICogd2hpY2ggd2Ugc2hvdWxkIG91dHB1dCB0aGUgcHJlZml4LgorICoKKyAqICAgMS4gZGlmZl93b3Jkcy0+bGFzdF9taW51cyA9PSAwICYmCisgKiAgICAgIGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyA9PSBkaWZmX3dvcmRzLT5wbHVzLnRleHQucHRyCisgKgorICogICAgICB0aGF0IGlzOiB0aGUgcGx1cyB0ZXh0IG11c3Qgc3RhcnQgYXMgYSBuZXcgbGluZSwgYW5kIGlmIHRoZXJlIGlzIG5vIG1pbnVzCisgKiAgICAgIHdvcmQgcHJpbnRlZCwgYSBncmFwaCBwcmVmaXggbXVzdCBiZSBwcmludGVkLgorICoKKyAqICAgMi4gZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzID4gZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0ciAmJgorICogICAgICAqKGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyAtIDEpID09ICdcbicKKyAqCisgKiAgICAgIHRoYXQgaXM6IGEgZ3JhcGggcHJlZml4IG11c3QgYmUgcHJpbnRlZCBmb2xsb3dpbmcgYSAnXG4nCisgKi8KK3N0YXRpYyBpbnQgY29sb3Jfd29yZHNfb3V0cHV0X2dyYXBoX3ByZWZpeChzdHJ1Y3QgZGlmZl93b3Jkc19kYXRhICpkaWZmX3dvcmRzKQoreworCWlmICgoZGlmZl93b3Jkcy0+bGFzdF9taW51cyA9PSAwICYmCisJCWRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyA9PSBkaWZmX3dvcmRzLT5wbHVzLnRleHQucHRyKSB8fAorCQkoZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzID4gZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0ciAmJgorCQkqKGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyAtIDEpID09ICdcbicpKSB7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQgZm5fb3V0X2RpZmZfd29yZHNfYXV4KHZvaWQgKnByaXYsCisJCQkJICBsb25nIG1pbnVzX2ZpcnN0LCBsb25nIG1pbnVzX2xlbiwKKwkJCQkgIGxvbmcgcGx1c19maXJzdCwgbG9uZyBwbHVzX2xlbiwKKwkJCQkgIGNvbnN0IGNoYXIgKmZ1bmMsIGxvbmcgZnVuY2xlbikKK3sKKwlzdHJ1Y3QgZGlmZl93b3Jkc19kYXRhICpkaWZmX3dvcmRzID0gcHJpdjsKKwlzdHJ1Y3QgZGlmZl93b3Jkc19zdHlsZSAqc3R5bGUgPSBkaWZmX3dvcmRzLT5zdHlsZTsKKwljb25zdCBjaGFyICptaW51c19iZWdpbiwgKm1pbnVzX2VuZCwgKnBsdXNfYmVnaW4sICpwbHVzX2VuZDsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQgPSBkaWZmX3dvcmRzLT5vcHQ7CisJY29uc3QgY2hhciAqbGluZV9wcmVmaXg7CisKKwlhc3NlcnQob3B0KTsKKwlsaW5lX3ByZWZpeCA9IGRpZmZfbGluZV9wcmVmaXgob3B0KTsKKworCS8qIFBPU0lYIHJlcXVpcmVzIHRoYXQgZmlyc3QgYmUgZGVjcmVtZW50ZWQgYnkgb25lIGlmIGxlbiA9PSAwLi4uICovCisJaWYgKG1pbnVzX2xlbikgeworCQltaW51c19iZWdpbiA9IGRpZmZfd29yZHMtPm1pbnVzLm9yaWdbbWludXNfZmlyc3RdLmJlZ2luOworCQltaW51c19lbmQgPQorCQkJZGlmZl93b3Jkcy0+bWludXMub3JpZ1ttaW51c19maXJzdCArIG1pbnVzX2xlbiAtIDFdLmVuZDsKKwl9IGVsc2UKKwkJbWludXNfYmVnaW4gPSBtaW51c19lbmQgPQorCQkJZGlmZl93b3Jkcy0+bWludXMub3JpZ1ttaW51c19maXJzdF0uZW5kOworCisJaWYgKHBsdXNfbGVuKSB7CisJCXBsdXNfYmVnaW4gPSBkaWZmX3dvcmRzLT5wbHVzLm9yaWdbcGx1c19maXJzdF0uYmVnaW47CisJCXBsdXNfZW5kID0gZGlmZl93b3Jkcy0+cGx1cy5vcmlnW3BsdXNfZmlyc3QgKyBwbHVzX2xlbiAtIDFdLmVuZDsKKwl9IGVsc2UKKwkJcGx1c19iZWdpbiA9IHBsdXNfZW5kID0gZGlmZl93b3Jkcy0+cGx1cy5vcmlnW3BsdXNfZmlyc3RdLmVuZDsKKworCWlmIChjb2xvcl93b3Jkc19vdXRwdXRfZ3JhcGhfcHJlZml4KGRpZmZfd29yZHMpKSB7CisJCWZwdXRzKGxpbmVfcHJlZml4LCBkaWZmX3dvcmRzLT5vcHQtPmZpbGUpOworCX0KKwlpZiAoZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzICE9IHBsdXNfYmVnaW4pIHsKKwkJZm5fb3V0X2RpZmZfd29yZHNfd3JpdGVfaGVscGVyKGRpZmZfd29yZHMtPm9wdCwKKwkJCQkmc3R5bGUtPmN0eCwgc3R5bGUtPm5ld2xpbmUsCisJCQkJcGx1c19iZWdpbiAtIGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cywKKwkJCQlkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMpOworCX0KKwlpZiAobWludXNfYmVnaW4gIT0gbWludXNfZW5kKSB7CisJCWZuX291dF9kaWZmX3dvcmRzX3dyaXRlX2hlbHBlcihkaWZmX3dvcmRzLT5vcHQsCisJCQkJJnN0eWxlLT5vbGRfd29yZCwgc3R5bGUtPm5ld2xpbmUsCisJCQkJbWludXNfZW5kIC0gbWludXNfYmVnaW4sIG1pbnVzX2JlZ2luKTsKKwl9CisJaWYgKHBsdXNfYmVnaW4gIT0gcGx1c19lbmQpIHsKKwkJZm5fb3V0X2RpZmZfd29yZHNfd3JpdGVfaGVscGVyKGRpZmZfd29yZHMtPm9wdCwKKwkJCQkmc3R5bGUtPm5ld193b3JkLCBzdHlsZS0+bmV3bGluZSwKKwkJCQlwbHVzX2VuZCAtIHBsdXNfYmVnaW4sIHBsdXNfYmVnaW4pOworCX0KKworCWRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyA9IHBsdXNfZW5kOworCWRpZmZfd29yZHMtPmxhc3RfbWludXMgPSBtaW51c19maXJzdDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBzdGFydHMgbG9va2luZyBhdCAqYmVnaW4sIGFuZCByZXR1cm5zIDAgaWZmIGEgd29yZCB3YXMgZm91bmQuICovCitzdGF0aWMgaW50IGZpbmRfd29yZF9ib3VuZGFyaWVzKG1tZmlsZV90ICpidWZmZXIsIHJlZ2V4X3QgKndvcmRfcmVnZXgsCisJCWludCAqYmVnaW4sIGludCAqZW5kKQoreworCWlmICh3b3JkX3JlZ2V4ICYmICpiZWdpbiA8IGJ1ZmZlci0+c2l6ZSkgeworCQlyZWdtYXRjaF90IG1hdGNoWzFdOworCQlpZiAoIXJlZ2V4ZWNfYnVmKHdvcmRfcmVnZXgsIGJ1ZmZlci0+cHRyICsgKmJlZ2luLAorCQkJCSBidWZmZXItPnNpemUgLSAqYmVnaW4sIDEsIG1hdGNoLCAwKSkgeworCQkJY2hhciAqcCA9IG1lbWNocihidWZmZXItPnB0ciArICpiZWdpbiArIG1hdGNoWzBdLnJtX3NvLAorCQkJCQknXG4nLCBtYXRjaFswXS5ybV9lbyAtIG1hdGNoWzBdLnJtX3NvKTsKKwkJCSplbmQgPSBwID8gcCAtIGJ1ZmZlci0+cHRyIDogbWF0Y2hbMF0ucm1fZW8gKyAqYmVnaW47CisJCQkqYmVnaW4gKz0gbWF0Y2hbMF0ucm1fc287CisJCQlyZXR1cm4gKmJlZ2luID49ICplbmQ7CisJCX0KKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGZpbmQgdGhlIG5leHQgd29yZCAqLworCXdoaWxlICgqYmVnaW4gPCBidWZmZXItPnNpemUgJiYgaXNzcGFjZShidWZmZXItPnB0clsqYmVnaW5dKSkKKwkJKCpiZWdpbikrKzsKKwlpZiAoKmJlZ2luID49IGJ1ZmZlci0+c2l6ZSkKKwkJcmV0dXJuIC0xOworCisJLyogZmluZCB0aGUgZW5kIG9mIHRoZSB3b3JkICovCisJKmVuZCA9ICpiZWdpbiArIDE7CisJd2hpbGUgKCplbmQgPCBidWZmZXItPnNpemUgJiYgIWlzc3BhY2UoYnVmZmVyLT5wdHJbKmVuZF0pKQorCQkoKmVuZCkrKzsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzcGxpdHMgdGhlIHdvcmRzIGluIGJ1ZmZlci0+dGV4dCwgc3RvcmVzIHRoZSBsaXN0IHdpdGgKKyAqIG5ld2xpbmUgc2VwYXJhdG9yIGludG8gb3V0LCBhbmQgc2F2ZXMgdGhlIG9mZnNldHMgb2YgdGhlIG9yaWdpbmFsIHdvcmRzCisgKiBpbiBidWZmZXItPm9yaWcuCisgKi8KK3N0YXRpYyB2b2lkIGRpZmZfd29yZHNfZmlsbChzdHJ1Y3QgZGlmZl93b3Jkc19idWZmZXIgKmJ1ZmZlciwgbW1maWxlX3QgKm91dCwKKwkJcmVnZXhfdCAqd29yZF9yZWdleCkKK3sKKwlpbnQgaSwgajsKKwlsb25nIGFsbG9jID0gMDsKKworCW91dC0+c2l6ZSA9IDA7CisJb3V0LT5wdHIgPSBOVUxMOworCisJLyogZmFrZSBhbiBlbXB0eSAiMHRoIiB3b3JkICovCisJQUxMT0NfR1JPVyhidWZmZXItPm9yaWcsIDEsIGJ1ZmZlci0+b3JpZ19hbGxvYyk7CisJYnVmZmVyLT5vcmlnWzBdLmJlZ2luID0gYnVmZmVyLT5vcmlnWzBdLmVuZCA9IGJ1ZmZlci0+dGV4dC5wdHI7CisJYnVmZmVyLT5vcmlnX25yID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBidWZmZXItPnRleHQuc2l6ZTsgaSsrKSB7CisJCWlmIChmaW5kX3dvcmRfYm91bmRhcmllcygmYnVmZmVyLT50ZXh0LCB3b3JkX3JlZ2V4LCAmaSwgJmopKQorCQkJcmV0dXJuOworCisJCS8qIHN0b3JlIG9yaWdpbmFsIGJvdW5kYXJpZXMgKi8KKwkJQUxMT0NfR1JPVyhidWZmZXItPm9yaWcsIGJ1ZmZlci0+b3JpZ19uciArIDEsCisJCQkJYnVmZmVyLT5vcmlnX2FsbG9jKTsKKwkJYnVmZmVyLT5vcmlnW2J1ZmZlci0+b3JpZ19ucl0uYmVnaW4gPSBidWZmZXItPnRleHQucHRyICsgaTsKKwkJYnVmZmVyLT5vcmlnW2J1ZmZlci0+b3JpZ19ucl0uZW5kID0gYnVmZmVyLT50ZXh0LnB0ciArIGo7CisJCWJ1ZmZlci0+b3JpZ19ucisrOworCisJCS8qIHN0b3JlIG9uZSB3b3JkICovCisJCUFMTE9DX0dST1cob3V0LT5wdHIsIG91dC0+c2l6ZSArIGogLSBpICsgMSwgYWxsb2MpOworCQltZW1jcHkob3V0LT5wdHIgKyBvdXQtPnNpemUsIGJ1ZmZlci0+dGV4dC5wdHIgKyBpLCBqIC0gaSk7CisJCW91dC0+cHRyW291dC0+c2l6ZSArIGogLSBpXSA9ICdcbic7CisJCW91dC0+c2l6ZSArPSBqIC0gaSArIDE7CisKKwkJaSA9IGogLSAxOworCX0KK30KKworLyogdGhpcyBleGVjdXRlcyB0aGUgd29yZCBkaWZmIG9uIHRoZSBhY2N1bXVsYXRlZCBidWZmZXJzICovCitzdGF0aWMgdm9pZCBkaWZmX3dvcmRzX3Nob3coc3RydWN0IGRpZmZfd29yZHNfZGF0YSAqZGlmZl93b3JkcykKK3sKKwl4cHBhcmFtX3QgeHBwOworCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKwltbWZpbGVfdCBtaW51cywgcGx1czsKKwlzdHJ1Y3QgZGlmZl93b3Jkc19zdHlsZSAqc3R5bGUgPSBkaWZmX3dvcmRzLT5zdHlsZTsKKworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCA9IGRpZmZfd29yZHMtPm9wdDsKKwljb25zdCBjaGFyICpsaW5lX3ByZWZpeDsKKworCWFzc2VydChvcHQpOworCWxpbmVfcHJlZml4ID0gZGlmZl9saW5lX3ByZWZpeChvcHQpOworCisJLyogc3BlY2lhbCBjYXNlOiBvbmx5IHJlbW92YWwgKi8KKwlpZiAoIWRpZmZfd29yZHMtPnBsdXMudGV4dC5zaXplKSB7CisJCWVtaXRfZGlmZl9zeW1ib2woZGlmZl93b3Jkcy0+b3B0LCBESUZGX1NZTUJPTF9XT1JEX0RJRkYsCisJCQkJIGxpbmVfcHJlZml4LCBzdHJsZW4obGluZV9wcmVmaXgpLCAwKTsKKwkJZm5fb3V0X2RpZmZfd29yZHNfd3JpdGVfaGVscGVyKGRpZmZfd29yZHMtPm9wdCwKKwkJCSZzdHlsZS0+b2xkX3dvcmQsIHN0eWxlLT5uZXdsaW5lLAorCQkJZGlmZl93b3Jkcy0+bWludXMudGV4dC5zaXplLAorCQkJZGlmZl93b3Jkcy0+bWludXMudGV4dC5wdHIpOworCQlkaWZmX3dvcmRzLT5taW51cy50ZXh0LnNpemUgPSAwOworCQlyZXR1cm47CisJfQorCisJZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzID0gZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0cjsKKwlkaWZmX3dvcmRzLT5sYXN0X21pbnVzID0gMDsKKworCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CisJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJZGlmZl93b3Jkc19maWxsKCZkaWZmX3dvcmRzLT5taW51cywgJm1pbnVzLCBkaWZmX3dvcmRzLT53b3JkX3JlZ2V4KTsKKwlkaWZmX3dvcmRzX2ZpbGwoJmRpZmZfd29yZHMtPnBsdXMsICZwbHVzLCBkaWZmX3dvcmRzLT53b3JkX3JlZ2V4KTsKKwl4cHAuZmxhZ3MgPSAwOworCS8qIGFzIG9ubHkgdGhlIGh1bmsgaGVhZGVyIHdpbGwgYmUgcGFyc2VkLCB3ZSBuZWVkIGEgMC1jb250ZXh0ICovCisJeGVjZmcuY3R4bGVuID0gMDsKKwlpZiAoeGRpX2RpZmZfb3V0ZigmbWludXMsICZwbHVzLCBmbl9vdXRfZGlmZl93b3Jkc19hdXgsIE5VTEwsCisJCQkgIGRpZmZfd29yZHMsICZ4cHAsICZ4ZWNmZykpCisJCWRpZSgidW5hYmxlIHRvIGdlbmVyYXRlIHdvcmQgZGlmZiIpOworCWZyZWUobWludXMucHRyKTsKKwlmcmVlKHBsdXMucHRyKTsKKwlpZiAoZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzICE9IGRpZmZfd29yZHMtPnBsdXMudGV4dC5wdHIgKworCQkJZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnNpemUpIHsKKwkJaWYgKGNvbG9yX3dvcmRzX291dHB1dF9ncmFwaF9wcmVmaXgoZGlmZl93b3JkcykpCisJCQllbWl0X2RpZmZfc3ltYm9sKGRpZmZfd29yZHMtPm9wdCwgRElGRl9TWU1CT0xfV09SRF9ESUZGLAorCQkJCQkgbGluZV9wcmVmaXgsIHN0cmxlbihsaW5lX3ByZWZpeCksIDApOworCQlmbl9vdXRfZGlmZl93b3Jkc193cml0ZV9oZWxwZXIoZGlmZl93b3Jkcy0+b3B0LAorCQkJJnN0eWxlLT5jdHgsIHN0eWxlLT5uZXdsaW5lLAorCQkJZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0ciArIGRpZmZfd29yZHMtPnBsdXMudGV4dC5zaXplCisJCQktIGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cywgZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzKTsKKwl9CisJZGlmZl93b3Jkcy0+bWludXMudGV4dC5zaXplID0gZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnNpemUgPSAwOworfQorCisvKiBJbiAiY29sb3Itd29yZHMiIG1vZGUsIHNob3cgd29yZC1kaWZmIG9mIHdvcmRzIGFjY3VtdWxhdGVkIGluIHRoZSBidWZmZXIgKi8KK3N0YXRpYyB2b2lkIGRpZmZfd29yZHNfZmx1c2goc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYmRhdGEpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqd28gPSBlY2JkYXRhLT5kaWZmX3dvcmRzLT5vcHQ7CisKKwlpZiAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+bWludXMudGV4dC5zaXplIHx8CisJICAgIGVjYmRhdGEtPmRpZmZfd29yZHMtPnBsdXMudGV4dC5zaXplKQorCQlkaWZmX3dvcmRzX3Nob3coZWNiZGF0YS0+ZGlmZl93b3Jkcyk7CisKKwlpZiAod28tPmVtaXR0ZWRfc3ltYm9scykgeworCQlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvID0gZWNiZGF0YS0+b3B0OworCQlzdHJ1Y3QgZW1pdHRlZF9kaWZmX3N5bWJvbHMgKndvbCA9IHdvLT5lbWl0dGVkX3N5bWJvbHM7CisJCWludCBpOworCisJCS8qCisJCSAqIE5FRURTV09SSzoKKwkJICogSW5zdGVhZCBvZiBhcHBlbmRpbmcgZWFjaCwgY29uY2F0IGFsbCB3b3JkcyB0byBhIGxpbmU/CisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgd29sLT5ucjsgaSsrKQorCQkJYXBwZW5kX2VtaXR0ZWRfZGlmZl9zeW1ib2wobywgJndvbC0+YnVmW2ldKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgd29sLT5ucjsgaSsrKQorCQkJZnJlZSgodm9pZCAqKXdvbC0+YnVmW2ldLmxpbmUpOworCisJCXdvbC0+bnIgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgZGlmZl9maWxlc3BlY19sb2FkX2RyaXZlcihzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkJCSAgICAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCS8qIFVzZSBhbHJlYWR5LWxvYWRlZCBkcml2ZXIgKi8KKwlpZiAob25lLT5kcml2ZXIpCisJCXJldHVybjsKKworCWlmIChTX0lTUkVHKG9uZS0+bW9kZSkpCisJCW9uZS0+ZHJpdmVyID0gdXNlcmRpZmZfZmluZF9ieV9wYXRoKGlzdGF0ZSwgb25lLT5wYXRoKTsKKworCS8qIEZhbGxiYWNrIHRvIGRlZmF1bHQgc2V0dGluZ3MgKi8KKwlpZiAoIW9uZS0+ZHJpdmVyKQorCQlvbmUtPmRyaXZlciA9IHVzZXJkaWZmX2ZpbmRfYnlfbmFtZSgiZGVmYXVsdCIpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdXNlcmRpZmZfd29yZF9yZWdleChzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkJCSAgICAgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlkaWZmX2ZpbGVzcGVjX2xvYWRfZHJpdmVyKG9uZSwgaXN0YXRlKTsKKwlyZXR1cm4gb25lLT5kcml2ZXItPndvcmRfcmVnZXg7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfZGlmZl93b3Jkc19kYXRhKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhLAorCQkJCSBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcmlnX29wdHMsCisJCQkJIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkJIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28pCit7CisJaW50IGk7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqbyA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaWZmX29wdGlvbnMpKTsKKwltZW1jcHkobywgb3JpZ19vcHRzLCBzaXplb2Yoc3RydWN0IGRpZmZfb3B0aW9ucykpOworCisJZWNiZGF0YS0+ZGlmZl93b3JkcyA9CisJCXhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBkaWZmX3dvcmRzX2RhdGEpKTsKKwllY2JkYXRhLT5kaWZmX3dvcmRzLT50eXBlID0gby0+d29yZF9kaWZmOworCWVjYmRhdGEtPmRpZmZfd29yZHMtPm9wdCA9IG87CisKKwlpZiAob3JpZ19vcHRzLT5lbWl0dGVkX3N5bWJvbHMpCisJCW8tPmVtaXR0ZWRfc3ltYm9scyA9CisJCQl4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZW1pdHRlZF9kaWZmX3N5bWJvbHMpKTsKKworCWlmICghby0+d29yZF9yZWdleCkKKwkJby0+d29yZF9yZWdleCA9IHVzZXJkaWZmX3dvcmRfcmVnZXgob25lLCBvLT5yZXBvLT5pbmRleCk7CisJaWYgKCFvLT53b3JkX3JlZ2V4KQorCQlvLT53b3JkX3JlZ2V4ID0gdXNlcmRpZmZfd29yZF9yZWdleCh0d28sIG8tPnJlcG8tPmluZGV4KTsKKwlpZiAoIW8tPndvcmRfcmVnZXgpCisJCW8tPndvcmRfcmVnZXggPSBkaWZmX3dvcmRfcmVnZXhfY2ZnOworCWlmIChvLT53b3JkX3JlZ2V4KSB7CisJCWVjYmRhdGEtPmRpZmZfd29yZHMtPndvcmRfcmVnZXggPSAocmVnZXhfdCAqKQorCQkJeG1hbGxvYyhzaXplb2YocmVnZXhfdCkpOworCQlpZiAocmVnY29tcChlY2JkYXRhLT5kaWZmX3dvcmRzLT53b3JkX3JlZ2V4LAorCQkJICAgIG8tPndvcmRfcmVnZXgsCisJCQkgICAgUkVHX0VYVEVOREVEIHwgUkVHX05FV0xJTkUpKQorCQkJZGllKCJpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogJXMiLAorCQkJICAgIG8tPndvcmRfcmVnZXgpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkaWZmX3dvcmRzX3N0eWxlcyk7IGkrKykgeworCQlpZiAoby0+d29yZF9kaWZmID09IGRpZmZfd29yZHNfc3R5bGVzW2ldLnR5cGUpIHsKKwkJCWVjYmRhdGEtPmRpZmZfd29yZHMtPnN0eWxlID0KKwkJCQkmZGlmZl93b3Jkc19zdHlsZXNbaV07CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAod2FudF9jb2xvcihvLT51c2VfY29sb3IpKSB7CisJCXN0cnVjdCBkaWZmX3dvcmRzX3N0eWxlICpzdCA9IGVjYmRhdGEtPmRpZmZfd29yZHMtPnN0eWxlOworCQlzdC0+b2xkX3dvcmQuY29sb3IgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX09MRCk7CisJCXN0LT5uZXdfd29yZC5jb2xvciA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0ZJTEVfTkVXKTsKKwkJc3QtPmN0eC5jb2xvciA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0NPTlRFWFQpOworCX0KK30KKworc3RhdGljIHZvaWQgZnJlZV9kaWZmX3dvcmRzX2RhdGEoc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYmRhdGEpCit7CisJaWYgKGVjYmRhdGEtPmRpZmZfd29yZHMpIHsKKwkJZGlmZl93b3Jkc19mbHVzaChlY2JkYXRhKTsKKwkJZnJlZSAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+b3B0LT5lbWl0dGVkX3N5bWJvbHMpOworCQlmcmVlIChlY2JkYXRhLT5kaWZmX3dvcmRzLT5vcHQpOworCQlmcmVlIChlY2JkYXRhLT5kaWZmX3dvcmRzLT5taW51cy50ZXh0LnB0cik7CisJCWZyZWUgKGVjYmRhdGEtPmRpZmZfd29yZHMtPm1pbnVzLm9yaWcpOworCQlmcmVlIChlY2JkYXRhLT5kaWZmX3dvcmRzLT5wbHVzLnRleHQucHRyKTsKKwkJZnJlZSAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+cGx1cy5vcmlnKTsKKwkJaWYgKGVjYmRhdGEtPmRpZmZfd29yZHMtPndvcmRfcmVnZXgpIHsKKwkJCXJlZ2ZyZWUoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+d29yZF9yZWdleCk7CisJCQlmcmVlKGVjYmRhdGEtPmRpZmZfd29yZHMtPndvcmRfcmVnZXgpOworCQl9CisJCUZSRUVfQU5EX05VTEwoZWNiZGF0YS0+ZGlmZl93b3Jkcyk7CisJfQorfQorCitjb25zdCBjaGFyICpkaWZmX2dldF9jb2xvcihpbnQgZGlmZl91c2VfY29sb3IsIGVudW0gY29sb3JfZGlmZiBpeCkKK3sKKwlpZiAod2FudF9jb2xvcihkaWZmX3VzZV9jb2xvcikpCisJCXJldHVybiBkaWZmX2NvbG9yc1tpeF07CisJcmV0dXJuICIiOworfQorCitjb25zdCBjaGFyICpkaWZmX2xpbmVfcHJlZml4KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICptc2didWY7CisJaWYgKCFvcHQtPm91dHB1dF9wcmVmaXgpCisJCXJldHVybiAiIjsKKworCW1zZ2J1ZiA9IG9wdC0+b3V0cHV0X3ByZWZpeChvcHQsIG9wdC0+b3V0cHV0X3ByZWZpeF9kYXRhKTsKKwlyZXR1cm4gbXNnYnVmLT5idWY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhbmVfdHJ1bmNhdGVfbGluZShjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwljb25zdCBjaGFyICpjcDsKKwl1bnNpZ25lZCBsb25nIGFsbG90OworCXNpemVfdCBsID0gbGVuOworCisJY3AgPSBsaW5lOworCWFsbG90ID0gbDsKKwl3aGlsZSAoMCA8IGwpIHsKKwkJKHZvaWQpIHV0Zjhfd2lkdGgoJmNwLCAmbCk7CisJCWlmICghY3ApCisJCQlicmVhazsgLyogdHJ1bmNhdGVkIGluIHRoZSBtaWRkbGU/ICovCisJfQorCXJldHVybiBhbGxvdCAtIGw7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfbG5vKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhKQoreworCWNvbnN0IGNoYXIgKnA7CisJZWNiZGF0YS0+bG5vX2luX3ByZWltYWdlID0gMDsKKwllY2JkYXRhLT5sbm9faW5fcG9zdGltYWdlID0gMDsKKwlwID0gc3RyY2hyKGxpbmUsICctJyk7CisJaWYgKCFwKQorCQlyZXR1cm47IC8qIGNhbm5vdCBoYXBwZW4gKi8KKwllY2JkYXRhLT5sbm9faW5fcHJlaW1hZ2UgPSBzdHJ0b2wocCArIDEsIE5VTEwsIDEwKTsKKwlwID0gc3RyY2hyKHAsICcrJyk7CisJaWYgKCFwKQorCQlyZXR1cm47IC8qIGNhbm5vdCBoYXBwZW4gKi8KKwllY2JkYXRhLT5sbm9faW5fcG9zdGltYWdlID0gc3RydG9sKHAgKyAxLCBOVUxMLCAxMCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX291dF9jb25zdW1lKHZvaWQgKnByaXYsIGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhID0gcHJpdjsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvID0gZWNiZGF0YS0+b3B0OworCisJby0+Zm91bmRfY2hhbmdlcyA9IDE7CisKKwlpZiAoZWNiZGF0YS0+aGVhZGVyKSB7CisJCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfSEVBREVSLAorCQkJCSBlY2JkYXRhLT5oZWFkZXItPmJ1ZiwgZWNiZGF0YS0+aGVhZGVyLT5sZW4sIDApOworCQlzdHJidWZfcmVzZXQoZWNiZGF0YS0+aGVhZGVyKTsKKwkJZWNiZGF0YS0+aGVhZGVyID0gTlVMTDsKKwl9CisKKwlpZiAoZWNiZGF0YS0+bGFiZWxfcGF0aFswXSkgeworCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0ZJTEVQQUlSX01JTlVTLAorCQkJCSBlY2JkYXRhLT5sYWJlbF9wYXRoWzBdLAorCQkJCSBzdHJsZW4oZWNiZGF0YS0+bGFiZWxfcGF0aFswXSksIDApOworCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0ZJTEVQQUlSX1BMVVMsCisJCQkJIGVjYmRhdGEtPmxhYmVsX3BhdGhbMV0sCisJCQkJIHN0cmxlbihlY2JkYXRhLT5sYWJlbF9wYXRoWzFdKSwgMCk7CisJCWVjYmRhdGEtPmxhYmVsX3BhdGhbMF0gPSBlY2JkYXRhLT5sYWJlbF9wYXRoWzFdID0gTlVMTDsKKwl9CisKKwlpZiAoZGlmZl9zdXBwcmVzc19ibGFua19lbXB0eQorCSAgICAmJiBsZW4gPT0gMiAmJiBsaW5lWzBdID09ICcgJyAmJiBsaW5lWzFdID09ICdcbicpIHsKKwkJbGluZVswXSA9ICdcbic7CisJCWxlbiA9IDE7CisJfQorCisJaWYgKGxpbmVbMF0gPT0gJ0AnKSB7CisJCWlmIChlY2JkYXRhLT5kaWZmX3dvcmRzKQorCQkJZGlmZl93b3Jkc19mbHVzaChlY2JkYXRhKTsKKwkJbGVuID0gc2FuZV90cnVuY2F0ZV9saW5lKGxpbmUsIGxlbik7CisJCWZpbmRfbG5vKGxpbmUsIGVjYmRhdGEpOworCQllbWl0X2h1bmtfaGVhZGVyKGVjYmRhdGEsIGxpbmUsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZWNiZGF0YS0+ZGlmZl93b3JkcykgeworCQllbnVtIGRpZmZfc3ltYm9sIHMgPQorCQkJZWNiZGF0YS0+ZGlmZl93b3Jkcy0+dHlwZSA9PSBESUZGX1dPUkRTX1BPUkNFTEFJTiA/CisJCQlESUZGX1NZTUJPTF9XT1JEU19QT1JDRUxBSU4gOiBESUZGX1NZTUJPTF9XT1JEUzsKKwkJaWYgKGxpbmVbMF0gPT0gJy0nKSB7CisJCQlkaWZmX3dvcmRzX2FwcGVuZChsaW5lLCBsZW4sCisJCQkJCSAgJmVjYmRhdGEtPmRpZmZfd29yZHMtPm1pbnVzKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmIChsaW5lWzBdID09ICcrJykgeworCQkJZGlmZl93b3Jkc19hcHBlbmQobGluZSwgbGVuLAorCQkJCQkgICZlY2JkYXRhLT5kaWZmX3dvcmRzLT5wbHVzKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChsaW5lLCAiXFwgIikpIHsKKwkJCS8qCisJCQkgKiBFYXQgdGhlICJubyBuZXdsaW5lIGF0IGVvZiIgbWFya2VyIGFzIGlmIHdlCisJCQkgKiBzYXcgYSAiKyIgb3IgIi0iIGxpbmUgd2l0aCBub3RoaW5nIG9uIGl0LAorCQkJICogYW5kIHJldHVybiB3aXRob3V0IGRpZmZfd29yZHNfZmx1c2goKSB0bworCQkJICogZGVmZXIgcHJvY2Vzc2luZy4gSWYgdGhpcyBpcyB0aGUgZW5kIG9mCisJCQkgKiBwcmVpbWFnZSwgbW9yZSAiKyIgbGluZXMgbWF5IGNvbWUgYWZ0ZXIgaXQuCisJCQkgKi8KKwkJCXJldHVybjsKKwkJfQorCQlkaWZmX3dvcmRzX2ZsdXNoKGVjYmRhdGEpOworCQllbWl0X2RpZmZfc3ltYm9sKG8sIHMsIGxpbmUsIGxlbiwgMCk7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGxpbmVbMF0pIHsKKwljYXNlICcrJzoKKwkJZWNiZGF0YS0+bG5vX2luX3Bvc3RpbWFnZSsrOworCQllbWl0X2FkZF9saW5lKGVjYmRhdGEsIGxpbmUgKyAxLCBsZW4gLSAxKTsKKwkJYnJlYWs7CisJY2FzZSAnLSc6CisJCWVjYmRhdGEtPmxub19pbl9wcmVpbWFnZSsrOworCQllbWl0X2RlbF9saW5lKGVjYmRhdGEsIGxpbmUgKyAxLCBsZW4gLSAxKTsKKwkJYnJlYWs7CisJY2FzZSAnICc6CisJCWVjYmRhdGEtPmxub19pbl9wb3N0aW1hZ2UrKzsKKwkJZWNiZGF0YS0+bG5vX2luX3ByZWltYWdlKys7CisJCWVtaXRfY29udGV4dF9saW5lKGVjYmRhdGEsIGxpbmUgKyAxLCBsZW4gLSAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogaW5jb21wbGV0ZSBsaW5lIGF0IHRoZSBlbmQgKi8KKwkJZWNiZGF0YS0+bG5vX2luX3ByZWltYWdlKys7CisJCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfQ09OVEVYVF9JTkNPTVBMRVRFLAorCQkJCSBsaW5lLCBsZW4sIDApOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBwcmludF9yZW5hbWUoc3RydWN0IHN0cmJ1ZiAqbmFtZSwgY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKwljb25zdCBjaGFyICpvbGRfbmFtZSA9IGE7CisJY29uc3QgY2hhciAqbmV3X25hbWUgPSBiOworCWludCBwZnhfbGVuZ3RoLCBzZnhfbGVuZ3RoOworCWludCBwZnhfYWRqdXN0X2Zvcl9zbGFzaDsKKwlpbnQgbGVuX2EgPSBzdHJsZW4oYSk7CisJaW50IGxlbl9iID0gc3RybGVuKGIpOworCWludCBhX21pZGxlbiwgYl9taWRsZW47CisJaW50IHFsZW5fYSA9IHF1b3RlX2Nfc3R5bGUoYSwgTlVMTCwgTlVMTCwgMCk7CisJaW50IHFsZW5fYiA9IHF1b3RlX2Nfc3R5bGUoYiwgTlVMTCwgTlVMTCwgMCk7CisKKwlpZiAocWxlbl9hIHx8IHFsZW5fYikgeworCQlxdW90ZV9jX3N0eWxlKGEsIG5hbWUsIE5VTEwsIDApOworCQlzdHJidWZfYWRkc3RyKG5hbWUsICIgPT4gIik7CisJCXF1b3RlX2Nfc3R5bGUoYiwgbmFtZSwgTlVMTCwgMCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBGaW5kIGNvbW1vbiBwcmVmaXggKi8KKwlwZnhfbGVuZ3RoID0gMDsKKwl3aGlsZSAoKm9sZF9uYW1lICYmICpuZXdfbmFtZSAmJiAqb2xkX25hbWUgPT0gKm5ld19uYW1lKSB7CisJCWlmICgqb2xkX25hbWUgPT0gJy8nKQorCQkJcGZ4X2xlbmd0aCA9IG9sZF9uYW1lIC0gYSArIDE7CisJCW9sZF9uYW1lKys7CisJCW5ld19uYW1lKys7CisJfQorCisJLyogRmluZCBjb21tb24gc3VmZml4ICovCisJb2xkX25hbWUgPSBhICsgbGVuX2E7CisJbmV3X25hbWUgPSBiICsgbGVuX2I7CisJc2Z4X2xlbmd0aCA9IDA7CisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIGNvbW1vbiBwcmVmaXgsIGl0IG11c3QgZW5kIGluIGEgc2xhc2guICBJbgorCSAqIHRoYXQgY2FzZSB3ZSBsZXQgdGhpcyBsb29wIHJ1biAxIGludG8gdGhlIHByZWZpeCB0byBzZWUgdGhlCisJICogc2FtZSBzbGFzaC4KKwkgKgorCSAqIElmIHRoZXJlIGlzIG5vIGNvbW1vbiBwcmVmaXgsIHdlIGNhbm5vdCBkbyB0aGlzIGFzIGl0IHdvdWxkCisJICogdW5kZXJydW4gdGhlIGlucHV0IHN0cmluZ3MuCisJICovCisJcGZ4X2FkanVzdF9mb3Jfc2xhc2ggPSAocGZ4X2xlbmd0aCA/IDEgOiAwKTsKKwl3aGlsZSAoYSArIHBmeF9sZW5ndGggLSBwZnhfYWRqdXN0X2Zvcl9zbGFzaCA8PSBvbGRfbmFtZSAmJgorCSAgICAgICBiICsgcGZ4X2xlbmd0aCAtIHBmeF9hZGp1c3RfZm9yX3NsYXNoIDw9IG5ld19uYW1lICYmCisJICAgICAgICpvbGRfbmFtZSA9PSAqbmV3X25hbWUpIHsKKwkJaWYgKCpvbGRfbmFtZSA9PSAnLycpCisJCQlzZnhfbGVuZ3RoID0gbGVuX2EgLSAob2xkX25hbWUgLSBhKTsKKwkJb2xkX25hbWUtLTsKKwkJbmV3X25hbWUtLTsKKwl9CisKKwkvKgorCSAqIHBmeHttaWQtYSA9PiBtaWQtYn1zZngKKwkgKiB7cGZ4LWEgPT4gcGZ4LWJ9c2Z4CisJICogcGZ4e3NmeC1hID0+IHNmeC1ifQorCSAqIG5hbWUtYSA9PiBuYW1lLWIKKwkgKi8KKwlhX21pZGxlbiA9IGxlbl9hIC0gcGZ4X2xlbmd0aCAtIHNmeF9sZW5ndGg7CisJYl9taWRsZW4gPSBsZW5fYiAtIHBmeF9sZW5ndGggLSBzZnhfbGVuZ3RoOworCWlmIChhX21pZGxlbiA8IDApCisJCWFfbWlkbGVuID0gMDsKKwlpZiAoYl9taWRsZW4gPCAwKQorCQliX21pZGxlbiA9IDA7CisKKwlzdHJidWZfZ3JvdyhuYW1lLCBwZnhfbGVuZ3RoICsgYV9taWRsZW4gKyBiX21pZGxlbiArIHNmeF9sZW5ndGggKyA3KTsKKwlpZiAocGZ4X2xlbmd0aCArIHNmeF9sZW5ndGgpIHsKKwkJc3RyYnVmX2FkZChuYW1lLCBhLCBwZnhfbGVuZ3RoKTsKKwkJc3RyYnVmX2FkZGNoKG5hbWUsICd7Jyk7CisJfQorCXN0cmJ1Zl9hZGQobmFtZSwgYSArIHBmeF9sZW5ndGgsIGFfbWlkbGVuKTsKKwlzdHJidWZfYWRkc3RyKG5hbWUsICIgPT4gIik7CisJc3RyYnVmX2FkZChuYW1lLCBiICsgcGZ4X2xlbmd0aCwgYl9taWRsZW4pOworCWlmIChwZnhfbGVuZ3RoICsgc2Z4X2xlbmd0aCkgeworCQlzdHJidWZfYWRkY2gobmFtZSwgJ30nKTsKKwkJc3RyYnVmX2FkZChuYW1lLCBhICsgbGVuX2EgLSBzZnhfbGVuZ3RoLCBzZnhfbGVuZ3RoKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqZGlmZnN0YXRfYWRkKHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCwKKwkJCQkJICBjb25zdCBjaGFyICpuYW1lX2EsCisJCQkJCSAgY29uc3QgY2hhciAqbmFtZV9iKQoreworCXN0cnVjdCBkaWZmc3RhdF9maWxlICp4OworCXggPSB4Y2FsbG9jKDEsIHNpemVvZigqeCkpOworCUFMTE9DX0dST1coZGlmZnN0YXQtPmZpbGVzLCBkaWZmc3RhdC0+bnIgKyAxLCBkaWZmc3RhdC0+YWxsb2MpOworCWRpZmZzdGF0LT5maWxlc1tkaWZmc3RhdC0+bnIrK10gPSB4OworCWlmIChuYW1lX2IpIHsKKwkJeC0+ZnJvbV9uYW1lID0geHN0cmR1cChuYW1lX2EpOworCQl4LT5uYW1lID0geHN0cmR1cChuYW1lX2IpOworCQl4LT5pc19yZW5hbWVkID0gMTsKKwl9CisJZWxzZSB7CisJCXgtPmZyb21fbmFtZSA9IE5VTEw7CisJCXgtPm5hbWUgPSB4c3RyZHVwKG5hbWVfYSk7CisJfQorCXJldHVybiB4OworfQorCitzdGF0aWMgdm9pZCBkaWZmc3RhdF9jb25zdW1lKHZvaWQgKnByaXYsIGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCA9IHByaXY7CisJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKnggPSBkaWZmc3RhdC0+ZmlsZXNbZGlmZnN0YXQtPm5yIC0gMV07CisKKwlpZiAobGluZVswXSA9PSAnKycpCisJCXgtPmFkZGVkKys7CisJZWxzZSBpZiAobGluZVswXSA9PSAnLScpCisJCXgtPmRlbGV0ZWQrKzsKK30KKworY29uc3QgY2hhciBtaW1lX2JvdW5kYXJ5X2xlYWRlcltdID0gIi0tLS0tLS0tLS0tLSI7CisKK3N0YXRpYyBpbnQgc2NhbGVfbGluZWFyKGludCBpdCwgaW50IHdpZHRoLCBpbnQgbWF4X2NoYW5nZSkKK3sKKwlpZiAoIWl0KQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIG1ha2Ugc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSAnLScgb3IgJysnIGlzIHByaW50ZWQgaWYKKwkgKiB0aGVyZSBpcyBhbnkgY2hhbmdlIHRvIHRoaXMgcGF0aC4gVGhlIGVhc2llc3Qgd2F5IGlzIHRvCisJICogc2NhbGUgbGluZWFybHkgYXMgaWYgdGhlIGFsbG90dGVkIHdpZHRoIGlzIG9uZSBjb2x1bW4gc2hvcnRlcgorCSAqIHRoYW4gaXQgaXMsIGFuZCB0aGVuIGFkZCAxIHRvIHRoZSByZXN1bHQuCisJICovCisJcmV0dXJuIDEgKyAoaXQgKiAod2lkdGggLSAxKSAvIG1heF9jaGFuZ2UpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2dyYXBoKHN0cnVjdCBzdHJidWYgKm91dCwgY2hhciBjaCwgaW50IGNudCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnNldCwgY29uc3QgY2hhciAqcmVzZXQpCit7CisJaWYgKGNudCA8PSAwKQorCQlyZXR1cm47CisJc3RyYnVmX2FkZHN0cihvdXQsIHNldCk7CisJc3RyYnVmX2FkZGNoYXJzKG91dCwgY2gsIGNudCk7CisJc3RyYnVmX2FkZHN0cihvdXQsIHJlc2V0KTsKK30KKworc3RhdGljIHZvaWQgZmlsbF9wcmludF9uYW1lKHN0cnVjdCBkaWZmc3RhdF9maWxlICpmaWxlKQoreworCXN0cnVjdCBzdHJidWYgcG5hbWUgPSBTVFJCVUZfSU5JVDsKKworCWlmIChmaWxlLT5wcmludF9uYW1lKQorCQlyZXR1cm47CisKKwlpZiAoZmlsZS0+aXNfcmVuYW1lZCkKKwkJcHByaW50X3JlbmFtZSgmcG5hbWUsIGZpbGUtPmZyb21fbmFtZSwgZmlsZS0+bmFtZSk7CisJZWxzZQorCQlxdW90ZV9jX3N0eWxlKGZpbGUtPm5hbWUsICZwbmFtZSwgTlVMTCwgMCk7CisKKwlpZiAoZmlsZS0+Y29tbWVudHMpCisJCXN0cmJ1Zl9hZGRmKCZwbmFtZSwgIiAoJXMpIiwgZmlsZS0+Y29tbWVudHMpOworCisJZmlsZS0+cHJpbnRfbmFtZSA9IHN0cmJ1Zl9kZXRhY2goJnBuYW1lLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfc3RhdF9zdW1tYXJ5X2luc2VydHNfZGVsZXRlcyhzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQlpbnQgZmlsZXMsIGludCBpbnNlcnRpb25zLCBpbnQgZGVsZXRpb25zKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmICghZmlsZXMpIHsKKwkJYXNzZXJ0KGluc2VydGlvbnMgPT0gMCAmJiBkZWxldGlvbnMgPT0gMCk7CisJCWVtaXRfZGlmZl9zeW1ib2wob3B0aW9ucywgRElGRl9TWU1CT0xfU1RBVFNfU1VNTUFSWV9OT19GSUxFUywKKwkJCQkgTlVMTCwgMCwgMCk7CisJCXJldHVybjsKKwl9CisKKwlzdHJidWZfYWRkZigmc2IsCisJCSAgICAoZmlsZXMgPT0gMSkgPyAiICVkIGZpbGUgY2hhbmdlZCIgOiAiICVkIGZpbGVzIGNoYW5nZWQiLAorCQkgICAgZmlsZXMpOworCisJLyoKKwkgKiBGb3IgYmluYXJ5IGRpZmYsIHRoZSBjYWxsZXIgbWF5IHdhbnQgdG8gcHJpbnQgInggZmlsZXMKKwkgKiBjaGFuZ2VkIiB3aXRoIGluc2VydGlvbnMgPT0gMCAmJiBkZWxldGlvbnMgPT0gMC4KKwkgKgorCSAqIE5vdCBvbWl0dGluZyAiMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKSIgaW4gdGhpcyBjYXNlCisJICogaXMgcHJvYmFibHkgbGVzcyBjb25mdXNpbmcgKGkuZSBza2lwIG92ZXIgIjIgZmlsZXMgY2hhbmdlZAorCSAqIGJ1dCBub3RoaW5nIGFib3V0IGFkZGVkL3JlbW92ZWQgbGluZXM/IElzIHRoaXMgYSBidWcgaW4gR2l0PyIpLgorCSAqLworCWlmIChpbnNlcnRpb25zIHx8IGRlbGV0aW9ucyA9PSAwKSB7CisJCXN0cmJ1Zl9hZGRmKCZzYiwKKwkJCSAgICAoaW5zZXJ0aW9ucyA9PSAxKSA/ICIsICVkIGluc2VydGlvbigrKSIgOiAiLCAlZCBpbnNlcnRpb25zKCspIiwKKwkJCSAgICBpbnNlcnRpb25zKTsKKwl9CisKKwlpZiAoZGVsZXRpb25zIHx8IGluc2VydGlvbnMgPT0gMCkgeworCQlzdHJidWZfYWRkZigmc2IsCisJCQkgICAgKGRlbGV0aW9ucyA9PSAxKSA/ICIsICVkIGRlbGV0aW9uKC0pIiA6ICIsICVkIGRlbGV0aW9ucygtKSIsCisJCQkgICAgZGVsZXRpb25zKTsKKwl9CisJc3RyYnVmX2FkZGNoKCZzYiwgJ1xuJyk7CisJZW1pdF9kaWZmX3N5bWJvbChvcHRpb25zLCBESUZGX1NZTUJPTF9TVEFUU19TVU1NQVJZX0lOU0VSVFNfREVMRVRFUywKKwkJCSBzYi5idWYsIHNiLmxlbiwgMCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKwordm9pZCBwcmludF9zdGF0X3N1bW1hcnkoRklMRSAqZnAsIGludCBmaWxlcywKKwkJCWludCBpbnNlcnRpb25zLCBpbnQgZGVsZXRpb25zKQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgbzsKKwltZW1zZXQoJm8sIDAsIHNpemVvZihvKSk7CisJby5maWxlID0gZnA7CisKKwlwcmludF9zdGF0X3N1bW1hcnlfaW5zZXJ0c19kZWxldGVzKCZvLCBmaWxlcywgaW5zZXJ0aW9ucywgZGVsZXRpb25zKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19zdGF0cyhzdHJ1Y3QgZGlmZnN0YXRfdCAqZGF0YSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgaSwgbGVuLCBhZGQsIGRlbCwgYWRkcyA9IDAsIGRlbHMgPSAwOworCXVpbnRtYXhfdCBtYXhfY2hhbmdlID0gMCwgbWF4X2xlbiA9IDA7CisJaW50IHRvdGFsX2ZpbGVzID0gZGF0YS0+bnIsIGNvdW50OworCWludCB3aWR0aCwgbmFtZV93aWR0aCwgZ3JhcGhfd2lkdGgsIG51bWJlcl93aWR0aCA9IDAsIGJpbl93aWR0aCA9IDA7CisJY29uc3QgY2hhciAqcmVzZXQsICphZGRfYywgKmRlbF9jOworCWludCBleHRyYV9zaG93biA9IDA7CisJY29uc3QgY2hhciAqbGluZV9wcmVmaXggPSBkaWZmX2xpbmVfcHJlZml4KG9wdGlvbnMpOworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoZGF0YS0+bnIgPT0gMCkKKwkJcmV0dXJuOworCisJY291bnQgPSBvcHRpb25zLT5zdGF0X2NvdW50ID8gb3B0aW9ucy0+c3RhdF9jb3VudCA6IGRhdGEtPm5yOworCisJcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQob3B0aW9ucywgRElGRl9SRVNFVCk7CisJYWRkX2MgPSBkaWZmX2dldF9jb2xvcl9vcHQob3B0aW9ucywgRElGRl9GSUxFX05FVyk7CisJZGVsX2MgPSBkaWZmX2dldF9jb2xvcl9vcHQob3B0aW9ucywgRElGRl9GSUxFX09MRCk7CisKKwkvKgorCSAqIEZpbmQgdGhlIGxvbmdlc3QgZmlsZW5hbWUgYW5kIG1heCBudW1iZXIgb2YgY2hhbmdlcworCSAqLworCWZvciAoaSA9IDA7IChpIDwgY291bnQpICYmIChpIDwgZGF0YS0+bnIpOyBpKyspIHsKKwkJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmZpbGUgPSBkYXRhLT5maWxlc1tpXTsKKwkJdWludG1heF90IGNoYW5nZSA9IGZpbGUtPmFkZGVkICsgZmlsZS0+ZGVsZXRlZDsKKworCQlpZiAoIWZpbGUtPmlzX2ludGVyZXN0aW5nICYmIChjaGFuZ2UgPT0gMCkpIHsKKwkJCWNvdW50Kys7IC8qIG5vdCBzaG93biA9PSByb29tIGZvciBvbmUgbW9yZSAqLworCQkJY29udGludWU7CisJCX0KKwkJZmlsbF9wcmludF9uYW1lKGZpbGUpOworCQlsZW4gPSBzdHJsZW4oZmlsZS0+cHJpbnRfbmFtZSk7CisJCWlmIChtYXhfbGVuIDwgbGVuKQorCQkJbWF4X2xlbiA9IGxlbjsKKworCQlpZiAoZmlsZS0+aXNfdW5tZXJnZWQpIHsKKwkJCS8qICJVbm1lcmdlZCIgaXMgOCBjaGFyYWN0ZXJzICovCisJCQliaW5fd2lkdGggPSBiaW5fd2lkdGggPCA4ID8gOCA6IGJpbl93aWR0aDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChmaWxlLT5pc19iaW5hcnkpIHsKKwkJCS8qICJCaW4gWFhYIC0+IFlZWSBieXRlcyIgKi8KKwkJCWludCB3ID0gMTQgKyBkZWNpbWFsX3dpZHRoKGZpbGUtPmFkZGVkKQorCQkJCSsgZGVjaW1hbF93aWR0aChmaWxlLT5kZWxldGVkKTsKKwkJCWJpbl93aWR0aCA9IGJpbl93aWR0aCA8IHcgPyB3IDogYmluX3dpZHRoOworCQkJLyogRGlzcGxheSBjaGFuZ2UgY291bnRzIGFsaWduZWQgd2l0aCAiQmluIiAqLworCQkJbnVtYmVyX3dpZHRoID0gMzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKG1heF9jaGFuZ2UgPCBjaGFuZ2UpCisJCQltYXhfY2hhbmdlID0gY2hhbmdlOworCX0KKwljb3VudCA9IGk7IC8qIHdoZXJlIHdlIGNhbiBzdG9wIHNjYW5uaW5nIGluIGRhdGEtPmZpbGVzW10gKi8KKworCS8qCisJICogV2UgaGF2ZSB3aWR0aCA9IHN0YXRfd2lkdGggb3IgdGVybV9jb2x1bW5zKCkgY29sdW1ucyB0b3RhbC4KKwkgKiBXZSB3YW50IGEgbWF4aW11bSBvZiBtaW4obWF4X2xlbiwgc3RhdF9uYW1lX3dpZHRoKSBmb3IgdGhlIG5hbWUgcGFydC4KKwkgKiBXZSB3YW50IGEgbWF4aW11bSBvZiBtaW4obWF4X2NoYW5nZSwgc3RhdF9ncmFwaF93aWR0aCkgZm9yIHRoZSArLSBwYXJ0LgorCSAqIFdlIGFsc28gbmVlZCAxIGZvciAiICIgYW5kIDQgKyBkZWNpbWFsX3dpZHRoKG1heF9jaGFuZ2UpCisJICogZm9yICIgfCBOTk5OICIgYW5kIG9uZSB0aGUgZW1wdHkgY29sdW1uIGF0IHRoZSBlbmQsIGFsdG9nZXRoZXIKKwkgKiA2ICsgZGVjaW1hbF93aWR0aChtYXhfY2hhbmdlKS4KKwkgKgorCSAqIElmIHRoZXJlJ3Mgbm90IGVub3VnaCBzcGFjZSwgd2Ugd2lsbCB1c2UgdGhlIHNtYWxsZXIgb2YKKwkgKiBzdGF0X25hbWVfd2lkdGggKGlmIHNldCkgYW5kIDUvOCp3aWR0aCBmb3IgdGhlIGZpbGVuYW1lLAorCSAqIGFuZCB0aGUgcmVzdCBmb3IgY29uc3RhbnQgZWxlbWVudHMgKyBncmFwaCBwYXJ0LCBidXQgbm8gbW9yZQorCSAqIHRoYW4gc3RhdF9ncmFwaF93aWR0aCBmb3IgdGhlIGdyYXBoIHBhcnQuCisJICogKDUvOCBnaXZlcyA1MCBmb3IgZmlsZW5hbWUgYW5kIDMwIGZvciB0aGUgY29uc3RhbnQgcGFydHMgKyBncmFwaAorCSAqIGZvciB0aGUgc3RhbmRhcmQgdGVybWluYWwgc2l6ZSkuCisJICoKKwkgKiBJbiBvdGhlciB3b3Jkczogc3RhdF93aWR0aCBsaW1pdHMgdGhlIG1heGltdW0gd2lkdGgsIGFuZAorCSAqIHN0YXRfbmFtZV93aWR0aCBmaXhlcyB0aGUgbWF4aW11bSB3aWR0aCBvZiB0aGUgZmlsZW5hbWUsCisJICogYW5kIGlzIGFsc28gdXNlZCB0byBkaXZpZGUgYXZhaWxhYmxlIGNvbHVtbnMgaWYgdGhlcmUKKwkgKiBhcmVuJ3QgZW5vdWdoLgorCSAqCisJICogQmluYXJ5IGZpbGVzIGFyZSBkaXNwbGF5ZWQgd2l0aCAiQmluIFhYWCAtPiBZWVkgYnl0ZXMiCisJICogaW5zdGVhZCBvZiB0aGUgY2hhbmdlIGNvdW50IGFuZCBncmFwaC4gVGhpcyBwYXJ0IGlzIHRyZWF0ZWQKKwkgKiBzaW1pbGFybHkgdG8gdGhlIGdyYXBoIHBhcnQsIGV4Y2VwdCB0aGF0IGl0IGlzIG5vdAorCSAqICJzY2FsZWQiLiBJZiB0b3RhbCB3aWR0aCBpcyB0b28gc21hbGwgdG8gYWNjb21tb2RhdGUgdGhlCisJICogZ3VhcmFudGVlZCBtaW5pbXVtIHdpZHRoIG9mIHRoZSBmaWxlbmFtZSBwYXJ0IGFuZCB0aGUKKwkgKiBzZXBhcmF0b3JzIGFuZCB0aGlzIG1lc3NhZ2UsIHRoaXMgbWVzc2FnZSB3aWxsICJvdmVyZmxvdyIKKwkgKiBtYWtpbmcgdGhlIGxpbmUgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0gd2lkdGguCisJICovCisKKwlpZiAob3B0aW9ucy0+c3RhdF93aWR0aCA9PSAtMSkKKwkJd2lkdGggPSB0ZXJtX2NvbHVtbnMoKSAtIHN0cmxlbihsaW5lX3ByZWZpeCk7CisJZWxzZQorCQl3aWR0aCA9IG9wdGlvbnMtPnN0YXRfd2lkdGggPyBvcHRpb25zLT5zdGF0X3dpZHRoIDogODA7CisJbnVtYmVyX3dpZHRoID0gZGVjaW1hbF93aWR0aChtYXhfY2hhbmdlKSA+IG51bWJlcl93aWR0aCA/CisJCWRlY2ltYWxfd2lkdGgobWF4X2NoYW5nZSkgOiBudW1iZXJfd2lkdGg7CisKKwlpZiAob3B0aW9ucy0+c3RhdF9ncmFwaF93aWR0aCA9PSAtMSkKKwkJb3B0aW9ucy0+c3RhdF9ncmFwaF93aWR0aCA9IGRpZmZfc3RhdF9ncmFwaF93aWR0aDsKKworCS8qCisJICogR3VhcmFudGVlIDMvOCoxNj09NiBmb3IgdGhlIGdyYXBoIHBhcnQKKwkgKiBhbmQgNS84KjE2PT0xMCBmb3IgdGhlIGZpbGVuYW1lIHBhcnQKKwkgKi8KKwlpZiAod2lkdGggPCAxNiArIDYgKyBudW1iZXJfd2lkdGgpCisJCXdpZHRoID0gMTYgKyA2ICsgbnVtYmVyX3dpZHRoOworCisJLyoKKwkgKiBGaXJzdCBhc3NpZ24gc2l6ZXMgdGhhdCBhcmUgd2FudGVkLCBpZ25vcmluZyBhdmFpbGFibGUgd2lkdGguCisJICogc3RybGVuKCJCaW4gWFhYIC0+IFlZWSBieXRlcyIpID09IGJpbl93aWR0aCwgYW5kIHRoZSBwYXJ0CisJICogc3RhcnRpbmcgZnJvbSAiWFhYIiBzaG91bGQgZml0IGluIGdyYXBoX3dpZHRoLgorCSAqLworCWdyYXBoX3dpZHRoID0gbWF4X2NoYW5nZSArIDQgPiBiaW5fd2lkdGggPyBtYXhfY2hhbmdlIDogYmluX3dpZHRoIC0gNDsKKwlpZiAob3B0aW9ucy0+c3RhdF9ncmFwaF93aWR0aCAmJgorCSAgICBvcHRpb25zLT5zdGF0X2dyYXBoX3dpZHRoIDwgZ3JhcGhfd2lkdGgpCisJCWdyYXBoX3dpZHRoID0gb3B0aW9ucy0+c3RhdF9ncmFwaF93aWR0aDsKKworCW5hbWVfd2lkdGggPSAob3B0aW9ucy0+c3RhdF9uYW1lX3dpZHRoID4gMCAmJgorCQkgICAgICBvcHRpb25zLT5zdGF0X25hbWVfd2lkdGggPCBtYXhfbGVuKSA/CisJCW9wdGlvbnMtPnN0YXRfbmFtZV93aWR0aCA6IG1heF9sZW47CisKKwkvKgorCSAqIEFkanVzdCBhZGp1c3RhYmxlIHdpZHRocyBub3QgdG8gZXhjZWVkIG1heGltdW0gd2lkdGgKKwkgKi8KKwlpZiAobmFtZV93aWR0aCArIG51bWJlcl93aWR0aCArIDYgKyBncmFwaF93aWR0aCA+IHdpZHRoKSB7CisJCWlmIChncmFwaF93aWR0aCA+IHdpZHRoICogMy84IC0gbnVtYmVyX3dpZHRoIC0gNikgeworCQkJZ3JhcGhfd2lkdGggPSB3aWR0aCAqIDMvOCAtIG51bWJlcl93aWR0aCAtIDY7CisJCQlpZiAoZ3JhcGhfd2lkdGggPCA2KQorCQkJCWdyYXBoX3dpZHRoID0gNjsKKwkJfQorCisJCWlmIChvcHRpb25zLT5zdGF0X2dyYXBoX3dpZHRoICYmCisJCSAgICBncmFwaF93aWR0aCA+IG9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGgpCisJCQlncmFwaF93aWR0aCA9IG9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGg7CisJCWlmIChuYW1lX3dpZHRoID4gd2lkdGggLSBudW1iZXJfd2lkdGggLSA2IC0gZ3JhcGhfd2lkdGgpCisJCQluYW1lX3dpZHRoID0gd2lkdGggLSBudW1iZXJfd2lkdGggLSA2IC0gZ3JhcGhfd2lkdGg7CisJCWVsc2UKKwkJCWdyYXBoX3dpZHRoID0gd2lkdGggLSBudW1iZXJfd2lkdGggLSA2IC0gbmFtZV93aWR0aDsKKwl9CisKKwkvKgorCSAqIEZyb20gaGVyZSBuYW1lX3dpZHRoIGlzIHRoZSB3aWR0aCBvZiB0aGUgbmFtZSBhcmVhLAorCSAqIGFuZCBncmFwaF93aWR0aCBpcyB0aGUgd2lkdGggb2YgdGhlIGdyYXBoIGFyZWEuCisJICogbWF4X2NoYW5nZSBpcyB1c2VkIHRvIHNjYWxlIGdyYXBoIHByb3Blcmx5LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnByZWZpeCA9ICIiOworCQlzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqZmlsZSA9IGRhdGEtPmZpbGVzW2ldOworCQljaGFyICpuYW1lID0gZmlsZS0+cHJpbnRfbmFtZTsKKwkJdWludG1heF90IGFkZGVkID0gZmlsZS0+YWRkZWQ7CisJCXVpbnRtYXhfdCBkZWxldGVkID0gZmlsZS0+ZGVsZXRlZDsKKwkJaW50IG5hbWVfbGVuOworCisJCWlmICghZmlsZS0+aXNfaW50ZXJlc3RpbmcgJiYgKGFkZGVkICsgZGVsZXRlZCA9PSAwKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqICJzY2FsZSIgdGhlIGZpbGVuYW1lCisJCSAqLworCQlsZW4gPSBuYW1lX3dpZHRoOworCQluYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKKwkJaWYgKG5hbWVfd2lkdGggPCBuYW1lX2xlbikgeworCQkJY2hhciAqc2xhc2g7CisJCQlwcmVmaXggPSAiLi4uIjsKKwkJCWxlbiAtPSAzOworCQkJbmFtZSArPSBuYW1lX2xlbiAtIGxlbjsKKwkJCXNsYXNoID0gc3RyY2hyKG5hbWUsICcvJyk7CisJCQlpZiAoc2xhc2gpCisJCQkJbmFtZSA9IHNsYXNoOworCQl9CisKKwkJaWYgKGZpbGUtPmlzX2JpbmFyeSkgeworCQkJc3RyYnVmX2FkZGYoJm91dCwgIiAlcyUtKnMgfCIsIHByZWZpeCwgbGVuLCBuYW1lKTsKKwkJCXN0cmJ1Zl9hZGRmKCZvdXQsICIgJSpzIiwgbnVtYmVyX3dpZHRoLCAiQmluIik7CisJCQlpZiAoIWFkZGVkICYmICFkZWxldGVkKSB7CisJCQkJc3RyYnVmX2FkZGNoKCZvdXQsICdcbicpOworCQkJCWVtaXRfZGlmZl9zeW1ib2wob3B0aW9ucywgRElGRl9TWU1CT0xfU1RBVFNfTElORSwKKwkJCQkJCSBvdXQuYnVmLCBvdXQubGVuLCAwKTsKKwkJCQlzdHJidWZfcmVzZXQoJm91dCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdHJidWZfYWRkZigmb3V0LCAiICVzJSJQUkl1TUFYIiVzIiwKKwkJCQlkZWxfYywgZGVsZXRlZCwgcmVzZXQpOworCQkJc3RyYnVmX2FkZHN0cigmb3V0LCAiIC0+ICIpOworCQkJc3RyYnVmX2FkZGYoJm91dCwgIiVzJSJQUkl1TUFYIiVzIiwKKwkJCQlhZGRfYywgYWRkZWQsIHJlc2V0KTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm91dCwgIiBieXRlc1xuIik7CisJCQllbWl0X2RpZmZfc3ltYm9sKG9wdGlvbnMsIERJRkZfU1lNQk9MX1NUQVRTX0xJTkUsCisJCQkJCSBvdXQuYnVmLCBvdXQubGVuLCAwKTsKKwkJCXN0cmJ1Zl9yZXNldCgmb3V0KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKGZpbGUtPmlzX3VubWVyZ2VkKSB7CisJCQlzdHJidWZfYWRkZigmb3V0LCAiICVzJS0qcyB8IiwgcHJlZml4LCBsZW4sIG5hbWUpOworCQkJc3RyYnVmX2FkZHN0cigmb3V0LCAiIFVubWVyZ2VkXG4iKTsKKwkJCWVtaXRfZGlmZl9zeW1ib2wob3B0aW9ucywgRElGRl9TWU1CT0xfU1RBVFNfTElORSwKKwkJCQkJIG91dC5idWYsIG91dC5sZW4sIDApOworCQkJc3RyYnVmX3Jlc2V0KCZvdXQpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBzY2FsZSB0aGUgYWRkL2RlbGV0ZQorCQkgKi8KKwkJYWRkID0gYWRkZWQ7CisJCWRlbCA9IGRlbGV0ZWQ7CisKKwkJaWYgKGdyYXBoX3dpZHRoIDw9IG1heF9jaGFuZ2UpIHsKKwkJCWludCB0b3RhbCA9IHNjYWxlX2xpbmVhcihhZGQgKyBkZWwsIGdyYXBoX3dpZHRoLCBtYXhfY2hhbmdlKTsKKwkJCWlmICh0b3RhbCA8IDIgJiYgYWRkICYmIGRlbCkKKwkJCQkvKiB3aWR0aCA+PSAyIGR1ZSB0byB0aGUgc2FuaXR5IGNoZWNrICovCisJCQkJdG90YWwgPSAyOworCQkJaWYgKGFkZCA8IGRlbCkgeworCQkJCWFkZCA9IHNjYWxlX2xpbmVhcihhZGQsIGdyYXBoX3dpZHRoLCBtYXhfY2hhbmdlKTsKKwkJCQlkZWwgPSB0b3RhbCAtIGFkZDsKKwkJCX0gZWxzZSB7CisJCQkJZGVsID0gc2NhbGVfbGluZWFyKGRlbCwgZ3JhcGhfd2lkdGgsIG1heF9jaGFuZ2UpOworCQkJCWFkZCA9IHRvdGFsIC0gZGVsOworCQkJfQorCQl9CisJCXN0cmJ1Zl9hZGRmKCZvdXQsICIgJXMlLSpzIHwiLCBwcmVmaXgsIGxlbiwgbmFtZSk7CisJCXN0cmJ1Zl9hZGRmKCZvdXQsICIgJSoiUFJJdU1BWCIlcyIsCisJCQludW1iZXJfd2lkdGgsIGFkZGVkICsgZGVsZXRlZCwKKwkJCWFkZGVkICsgZGVsZXRlZCA/ICIgIiA6ICIiKTsKKwkJc2hvd19ncmFwaCgmb3V0LCAnKycsIGFkZCwgYWRkX2MsIHJlc2V0KTsKKwkJc2hvd19ncmFwaCgmb3V0LCAnLScsIGRlbCwgZGVsX2MsIHJlc2V0KTsKKwkJc3RyYnVmX2FkZGNoKCZvdXQsICdcbicpOworCQllbWl0X2RpZmZfc3ltYm9sKG9wdGlvbnMsIERJRkZfU1lNQk9MX1NUQVRTX0xJTkUsCisJCQkJIG91dC5idWYsIG91dC5sZW4sIDApOworCQlzdHJidWZfcmVzZXQoJm91dCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmZpbGUgPSBkYXRhLT5maWxlc1tpXTsKKwkJdWludG1heF90IGFkZGVkID0gZmlsZS0+YWRkZWQ7CisJCXVpbnRtYXhfdCBkZWxldGVkID0gZmlsZS0+ZGVsZXRlZDsKKworCQlpZiAoZmlsZS0+aXNfdW5tZXJnZWQgfHwKKwkJICAgICghZmlsZS0+aXNfaW50ZXJlc3RpbmcgJiYgKGFkZGVkICsgZGVsZXRlZCA9PSAwKSkpIHsKKwkJCXRvdGFsX2ZpbGVzLS07CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghZmlsZS0+aXNfYmluYXJ5KSB7CisJCQlhZGRzICs9IGFkZGVkOworCQkJZGVscyArPSBkZWxldGVkOworCQl9CisJCWlmIChpIDwgY291bnQpCisJCQljb250aW51ZTsKKwkJaWYgKCFleHRyYV9zaG93bikKKwkJCWVtaXRfZGlmZl9zeW1ib2wob3B0aW9ucywKKwkJCQkJIERJRkZfU1lNQk9MX1NUQVRTX1NVTU1BUllfQUJCUkVWLAorCQkJCQkgTlVMTCwgMCwgMCk7CisJCWV4dHJhX3Nob3duID0gMTsKKwl9CisKKwlwcmludF9zdGF0X3N1bW1hcnlfaW5zZXJ0c19kZWxldGVzKG9wdGlvbnMsIHRvdGFsX2ZpbGVzLCBhZGRzLCBkZWxzKTsKKwlzdHJidWZfcmVsZWFzZSgmb3V0KTsKK30KKworc3RhdGljIHZvaWQgc2hvd19zaG9ydHN0YXRzKHN0cnVjdCBkaWZmc3RhdF90ICpkYXRhLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWludCBpLCBhZGRzID0gMCwgZGVscyA9IDAsIHRvdGFsX2ZpbGVzID0gZGF0YS0+bnI7CisKKwlpZiAoZGF0YS0+bnIgPT0gMCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm5yOyBpKyspIHsKKwkJaW50IGFkZGVkID0gZGF0YS0+ZmlsZXNbaV0tPmFkZGVkOworCQlpbnQgZGVsZXRlZCA9IGRhdGEtPmZpbGVzW2ldLT5kZWxldGVkOworCisJCWlmIChkYXRhLT5maWxlc1tpXS0+aXNfdW5tZXJnZWQgfHwKKwkJICAgICghZGF0YS0+ZmlsZXNbaV0tPmlzX2ludGVyZXN0aW5nICYmIChhZGRlZCArIGRlbGV0ZWQgPT0gMCkpKSB7CisJCQl0b3RhbF9maWxlcy0tOworCQl9IGVsc2UgaWYgKCFkYXRhLT5maWxlc1tpXS0+aXNfYmluYXJ5KSB7IC8qIGRvbid0IGNvdW50IGJ5dGVzICovCisJCQlhZGRzICs9IGFkZGVkOworCQkJZGVscyArPSBkZWxldGVkOworCQl9CisJfQorCXByaW50X3N0YXRfc3VtbWFyeV9pbnNlcnRzX2RlbGV0ZXMob3B0aW9ucywgdG90YWxfZmlsZXMsIGFkZHMsIGRlbHMpOworfQorCitzdGF0aWMgdm9pZCBzaG93X251bXN0YXQoc3RydWN0IGRpZmZzdGF0X3QgKmRhdGEsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IGk7CisKKwlpZiAoZGF0YS0+bnIgPT0gMCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmZpbGUgPSBkYXRhLT5maWxlc1tpXTsKKworCQlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsICIlcyIsIGRpZmZfbGluZV9wcmVmaXgob3B0aW9ucykpOworCisJCWlmIChmaWxlLT5pc19iaW5hcnkpCisJCQlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsICItXHQtXHQiKTsKKwkJZWxzZQorCQkJZnByaW50ZihvcHRpb25zLT5maWxlLAorCQkJCSIlIlBSSXVNQVgiXHQlIlBSSXVNQVgiXHQiLAorCQkJCWZpbGUtPmFkZGVkLCBmaWxlLT5kZWxldGVkKTsKKwkJaWYgKG9wdGlvbnMtPmxpbmVfdGVybWluYXRpb24pIHsKKwkJCWZpbGxfcHJpbnRfbmFtZShmaWxlKTsKKwkJCWlmICghZmlsZS0+aXNfcmVuYW1lZCkKKwkJCQl3cml0ZV9uYW1lX3F1b3RlZChmaWxlLT5uYW1lLCBvcHRpb25zLT5maWxlLAorCQkJCQkJICBvcHRpb25zLT5saW5lX3Rlcm1pbmF0aW9uKTsKKwkJCWVsc2UgeworCQkJCWZwdXRzKGZpbGUtPnByaW50X25hbWUsIG9wdGlvbnMtPmZpbGUpOworCQkJCXB1dGMob3B0aW9ucy0+bGluZV90ZXJtaW5hdGlvbiwgb3B0aW9ucy0+ZmlsZSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoZmlsZS0+aXNfcmVuYW1lZCkgeworCQkJCXB1dGMoJ1wwJywgb3B0aW9ucy0+ZmlsZSk7CisJCQkJd3JpdGVfbmFtZV9xdW90ZWQoZmlsZS0+ZnJvbV9uYW1lLCBvcHRpb25zLT5maWxlLCAnXDAnKTsKKwkJCX0KKwkJCXdyaXRlX25hbWVfcXVvdGVkKGZpbGUtPm5hbWUsIG9wdGlvbnMtPmZpbGUsICdcMCcpOworCQl9CisJfQorfQorCitzdHJ1Y3QgZGlyc3RhdF9maWxlIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGxvbmcgY2hhbmdlZDsKK307CisKK3N0cnVjdCBkaXJzdGF0X2RpciB7CisJc3RydWN0IGRpcnN0YXRfZmlsZSAqZmlsZXM7CisJaW50IGFsbG9jLCBuciwgcGVybWlsbGUsIGN1bXVsYXRpdmU7Cit9OworCitzdGF0aWMgbG9uZyBnYXRoZXJfZGlyc3RhdChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHN0cnVjdCBkaXJzdGF0X2RpciAqZGlyLAorCQl1bnNpZ25lZCBsb25nIGNoYW5nZWQsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuKQoreworCXVuc2lnbmVkIGxvbmcgc3VtX2NoYW5nZXMgPSAwOworCXVuc2lnbmVkIGludCBzb3VyY2VzID0gMDsKKwljb25zdCBjaGFyICpsaW5lX3ByZWZpeCA9IGRpZmZfbGluZV9wcmVmaXgob3B0KTsKKworCXdoaWxlIChkaXItPm5yKSB7CisJCXN0cnVjdCBkaXJzdGF0X2ZpbGUgKmYgPSBkaXItPmZpbGVzOworCQlpbnQgbmFtZWxlbiA9IHN0cmxlbihmLT5uYW1lKTsKKwkJdW5zaWduZWQgbG9uZyBjaGFuZ2VzOworCQljaGFyICpzbGFzaDsKKworCQlpZiAobmFtZWxlbiA8IGJhc2VsZW4pCisJCQlicmVhazsKKwkJaWYgKG1lbWNtcChmLT5uYW1lLCBiYXNlLCBiYXNlbGVuKSkKKwkJCWJyZWFrOworCQlzbGFzaCA9IHN0cmNocihmLT5uYW1lICsgYmFzZWxlbiwgJy8nKTsKKwkJaWYgKHNsYXNoKSB7CisJCQlpbnQgbmV3YmFzZWxlbiA9IHNsYXNoICsgMSAtIGYtPm5hbWU7CisJCQljaGFuZ2VzID0gZ2F0aGVyX2RpcnN0YXQob3B0LCBkaXIsIGNoYW5nZWQsIGYtPm5hbWUsIG5ld2Jhc2VsZW4pOworCQkJc291cmNlcysrOworCQl9IGVsc2UgeworCQkJY2hhbmdlcyA9IGYtPmNoYW5nZWQ7CisJCQlkaXItPmZpbGVzKys7CisJCQlkaXItPm5yLS07CisJCQlzb3VyY2VzICs9IDI7CisJCX0KKwkJc3VtX2NoYW5nZXMgKz0gY2hhbmdlczsKKwl9CisKKwkvKgorCSAqIFdlIGRvbid0IHJlcG9ydCBkaXJzdGF0J3MgZm9yCisJICogIC0gdGhlIHRvcCBsZXZlbAorCSAqICAtIG9yIGNhc2VzIHdoZXJlIGV2ZXJ5dGhpbmcgY2FtZSBmcm9tIGEgc2luZ2xlIGRpcmVjdG9yeQorCSAqICAgIHVuZGVyIHRoaXMgZGlyZWN0b3J5IChzb3VyY2VzID09IDEpLgorCSAqLworCWlmIChiYXNlbGVuICYmIHNvdXJjZXMgIT0gMSkgeworCQlpZiAoc3VtX2NoYW5nZXMpIHsKKwkJCWludCBwZXJtaWxsZSA9IHN1bV9jaGFuZ2VzICogMTAwMCAvIGNoYW5nZWQ7CisJCQlpZiAocGVybWlsbGUgPj0gZGlyLT5wZXJtaWxsZSkgeworCQkJCWZwcmludGYob3B0LT5maWxlLCAiJXMlNGQuJTAxZCUlICUuKnNcbiIsIGxpbmVfcHJlZml4LAorCQkJCQlwZXJtaWxsZSAvIDEwLCBwZXJtaWxsZSAlIDEwLCBiYXNlbGVuLCBiYXNlKTsKKwkJCQlpZiAoIWRpci0+Y3VtdWxhdGl2ZSkKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHN1bV9jaGFuZ2VzOworfQorCitzdGF0aWMgaW50IGRpcnN0YXRfY29tcGFyZShjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJY29uc3Qgc3RydWN0IGRpcnN0YXRfZmlsZSAqYSA9IF9hOworCWNvbnN0IHN0cnVjdCBkaXJzdGF0X2ZpbGUgKmIgPSBfYjsKKwlyZXR1cm4gc3RyY21wKGEtPm5hbWUsIGItPm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2RpcnN0YXQoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGNoYW5nZWQ7CisJc3RydWN0IGRpcnN0YXRfZGlyIGRpcjsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEgPSAmZGlmZl9xdWV1ZWRfZGlmZjsKKworCWRpci5maWxlcyA9IE5VTEw7CisJZGlyLmFsbG9jID0gMDsKKwlkaXIubnIgPSAwOworCWRpci5wZXJtaWxsZSA9IG9wdGlvbnMtPmRpcnN0YXRfcGVybWlsbGU7CisJZGlyLmN1bXVsYXRpdmUgPSBvcHRpb25zLT5mbGFncy5kaXJzdGF0X2N1bXVsYXRpdmU7CisKKwljaGFuZ2VkID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQljb25zdCBjaGFyICpuYW1lOworCQl1bnNpZ25lZCBsb25nIGNvcGllZCwgYWRkZWQsIGRhbWFnZTsKKwkJc3RydWN0IGRpZmZfcG9wdWxhdGVfZmlsZXNwZWNfb3B0aW9ucyBkcGZfb3B0aW9ucyA9IHsKKwkJCS5jaGVja19zaXplX29ubHkgPSAxLAorCQl9OworCisJCW5hbWUgPSBwLT50d28tPnBhdGggPyBwLT50d28tPnBhdGggOiBwLT5vbmUtPnBhdGg7CisKKwkJaWYgKHAtPm9uZS0+b2lkX3ZhbGlkICYmIHAtPnR3by0+b2lkX3ZhbGlkICYmCisJCSAgICBvaWRlcSgmcC0+b25lLT5vaWQsICZwLT50d28tPm9pZCkpIHsKKwkJCS8qCisJCQkgKiBUaGUgU0hBMSBoYXMgbm90IGNoYW5nZWQsIHNvIHByZS0vcG9zdC1jb250ZW50IGlzCisJCQkgKiBpZGVudGljYWwuIFdlIGNhbiB0aGVyZWZvcmUgc2tpcCBsb29raW5nIGF0IHRoZQorCQkJICogZmlsZSBjb250ZW50cyBhbHRvZ2V0aGVyLgorCQkJICovCisJCQlkYW1hZ2UgPSAwOworCQkJZ290byBmb3VuZF9kYW1hZ2U7CisJCX0KKworCQlpZiAob3B0aW9ucy0+ZmxhZ3MuZGlyc3RhdF9ieV9maWxlKSB7CisJCQkvKgorCQkJICogSW4gLS1kaXJzdGF0LWJ5LWZpbGUgbW9kZSwgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8KKwkJCSAqIGxvb2sgYXQgdGhlIGFjdHVhbCBmaWxlIGNvbnRlbnRzIGF0IGFsbC4KKwkJCSAqIFRoZSBmYWN0IHRoYXQgdGhlIFNIQTEgY2hhbmdlZCBpcyBlbm91Z2ggZm9yIHVzIHRvCisJCQkgKiBhZGQgdGhpcyBmaWxlIHRvIHRoZSBsaXN0IG9mIHJlc3VsdHMKKwkJCSAqICh3aXRoIGVhY2ggZmlsZSBjb250cmlidXRpbmcgZXF1YWwgZGFtYWdlKS4KKwkJCSAqLworCQkJZGFtYWdlID0gMTsKKwkJCWdvdG8gZm91bmRfZGFtYWdlOworCQl9CisKKwkJaWYgKERJRkZfRklMRV9WQUxJRChwLT5vbmUpICYmIERJRkZfRklMRV9WQUxJRChwLT50d28pKSB7CisJCQlkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKG9wdGlvbnMtPnJlcG8sIHAtPm9uZSwgTlVMTCk7CisJCQlkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKG9wdGlvbnMtPnJlcG8sIHAtPnR3bywgTlVMTCk7CisJCQlkaWZmY29yZV9jb3VudF9jaGFuZ2VzKG9wdGlvbnMtPnJlcG8sCisJCQkJCSAgICAgICBwLT5vbmUsIHAtPnR3bywgTlVMTCwgTlVMTCwKKwkJCQkJICAgICAgICZjb3BpZWQsICZhZGRlZCk7CisJCQlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShwLT5vbmUpOworCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+dHdvKTsKKwkJfSBlbHNlIGlmIChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSkgeworCQkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhvcHRpb25zLT5yZXBvLCBwLT5vbmUsICZkcGZfb3B0aW9ucyk7CisJCQljb3BpZWQgPSBhZGRlZCA9IDA7CisJCQlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShwLT5vbmUpOworCQl9IGVsc2UgaWYgKERJRkZfRklMRV9WQUxJRChwLT50d28pKSB7CisJCQlkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKG9wdGlvbnMtPnJlcG8sIHAtPnR3bywgJmRwZl9vcHRpb25zKTsKKwkJCWNvcGllZCA9IDA7CisJCQlhZGRlZCA9IHAtPnR3by0+c2l6ZTsKKwkJCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHAtPnR3byk7CisJCX0gZWxzZQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogT3JpZ2luYWwgbWludXMgY29waWVkIGlzIHRoZSByZW1vdmVkIG1hdGVyaWFsLAorCQkgKiBhZGRlZCBpcyB0aGUgbmV3IG1hdGVyaWFsLiAgVGhleSBhcmUgYm90aCBkYW1hZ2VzCisJCSAqIG1hZGUgdG8gdGhlIHByZWltYWdlLgorCQkgKiBJZiB0aGUgcmVzdWx0aW5nIGRhbWFnZSBpcyB6ZXJvLCB3ZSBrbm93IHRoYXQKKwkJICogZGlmZmNvcmVfY291bnRfY2hhbmdlcygpIGNvbnNpZGVycyB0aGUgdHdvIGVudHJpZXMgdG8KKwkJICogYmUgaWRlbnRpY2FsLCBidXQgc2luY2UgdGhlIG9pZCBjaGFuZ2VkLCB3ZQorCQkgKiBrbm93IHRoYXQgdGhlcmUgbXVzdCBoYXZlIGJlZW4gX3NvbWVfIGtpbmQgb2YgY2hhbmdlLAorCQkgKiBzbyB3ZSBmb3JjZSBhbGwgZW50cmllcyB0byBoYXZlIGRhbWFnZSA+IDAuCisJCSAqLworCQlkYW1hZ2UgPSAocC0+b25lLT5zaXplIC0gY29waWVkKSArIGFkZGVkOworCQlpZiAoIWRhbWFnZSkKKwkJCWRhbWFnZSA9IDE7CisKK2ZvdW5kX2RhbWFnZToKKwkJQUxMT0NfR1JPVyhkaXIuZmlsZXMsIGRpci5uciArIDEsIGRpci5hbGxvYyk7CisJCWRpci5maWxlc1tkaXIubnJdLm5hbWUgPSBuYW1lOworCQlkaXIuZmlsZXNbZGlyLm5yXS5jaGFuZ2VkID0gZGFtYWdlOworCQljaGFuZ2VkICs9IGRhbWFnZTsKKwkJZGlyLm5yKys7CisJfQorCisJLyogVGhpcyBjYW4gaGFwcGVuIGV2ZW4gd2l0aCBtYW55IGZpbGVzLCBpZiBldmVyeXRoaW5nIHdhcyByZW5hbWVzICovCisJaWYgKCFjaGFuZ2VkKQorCQlyZXR1cm47CisKKwkvKiBTaG93IGFsbCBkaXJlY3RvcmllcyB3aXRoIG1vcmUgdGhhbiB4JSBvZiB0aGUgY2hhbmdlcyAqLworCVFTT1JUKGRpci5maWxlcywgZGlyLm5yLCBkaXJzdGF0X2NvbXBhcmUpOworCWdhdGhlcl9kaXJzdGF0KG9wdGlvbnMsICZkaXIsIGNoYW5nZWQsICIiLCAwKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19kaXJzdGF0X2J5X2xpbmUoc3RydWN0IGRpZmZzdGF0X3QgKmRhdGEsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBjaGFuZ2VkOworCXN0cnVjdCBkaXJzdGF0X2RpciBkaXI7CisKKwlpZiAoZGF0YS0+bnIgPT0gMCkKKwkJcmV0dXJuOworCisJZGlyLmZpbGVzID0gTlVMTDsKKwlkaXIuYWxsb2MgPSAwOworCWRpci5uciA9IDA7CisJZGlyLnBlcm1pbGxlID0gb3B0aW9ucy0+ZGlyc3RhdF9wZXJtaWxsZTsKKwlkaXIuY3VtdWxhdGl2ZSA9IG9wdGlvbnMtPmZsYWdzLmRpcnN0YXRfY3VtdWxhdGl2ZTsKKworCWNoYW5nZWQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmc3RhdF9maWxlICpmaWxlID0gZGF0YS0+ZmlsZXNbaV07CisJCXVuc2lnbmVkIGxvbmcgZGFtYWdlID0gZmlsZS0+YWRkZWQgKyBmaWxlLT5kZWxldGVkOworCQlpZiAoZmlsZS0+aXNfYmluYXJ5KQorCQkJLyoKKwkJCSAqIGJpbmFyeSBmaWxlcyBjb3VudHMgYnl0ZXMsIG5vdCBsaW5lcy4gTXVzdCBmaW5kIHNvbWUKKwkJCSAqIHdheSB0byBub3JtYWxpemUgYmluYXJ5IGJ5dGVzIHZzLiB0ZXh0dWFsIGxpbmVzLgorCQkJICogVGhlIGZvbGxvd2luZyBoZXVyaXN0aWMgYXNzdW1lcyB0aGF0IHRoZXJlIGFyZSA2NAorCQkJICogYnl0ZXMgcGVyICJsaW5lIi4KKwkJCSAqIFRoaXMgaXMgc3R1cGlkIGFuZCB1Z2x5LCBidXQgdmVyeSBjaGVhcC4uLgorCQkJICovCisJCQlkYW1hZ2UgPSBESVZfUk9VTkRfVVAoZGFtYWdlLCA2NCk7CisJCUFMTE9DX0dST1coZGlyLmZpbGVzLCBkaXIubnIgKyAxLCBkaXIuYWxsb2MpOworCQlkaXIuZmlsZXNbZGlyLm5yXS5uYW1lID0gZmlsZS0+bmFtZTsKKwkJZGlyLmZpbGVzW2Rpci5ucl0uY2hhbmdlZCA9IGRhbWFnZTsKKwkJY2hhbmdlZCArPSBkYW1hZ2U7CisJCWRpci5ucisrOworCX0KKworCS8qIFRoaXMgY2FuIGhhcHBlbiBldmVuIHdpdGggbWFueSBmaWxlcywgaWYgZXZlcnl0aGluZyB3YXMgcmVuYW1lcyAqLworCWlmICghY2hhbmdlZCkKKwkJcmV0dXJuOworCisJLyogU2hvdyBhbGwgZGlyZWN0b3JpZXMgd2l0aCBtb3JlIHRoYW4geCUgb2YgdGhlIGNoYW5nZXMgKi8KKwlRU09SVChkaXIuZmlsZXMsIGRpci5uciwgZGlyc3RhdF9jb21wYXJlKTsKKwlnYXRoZXJfZGlyc3RhdChvcHRpb25zLCAmZGlyLCBjaGFuZ2VkLCAiIiwgMCk7Cit9CisKK3ZvaWQgZnJlZV9kaWZmc3RhdF9pbmZvKHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZnN0YXQtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmYgPSBkaWZmc3RhdC0+ZmlsZXNbaV07CisJCWZyZWUoZi0+cHJpbnRfbmFtZSk7CisJCWZyZWUoZi0+bmFtZSk7CisJCWZyZWUoZi0+ZnJvbV9uYW1lKTsKKwkJZnJlZShmKTsKKwl9CisJZnJlZShkaWZmc3RhdC0+ZmlsZXMpOworfQorCitzdHJ1Y3QgY2hlY2tkaWZmX3QgeworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWludCBsaW5lbm87CisJaW50IGNvbmZsaWN0X21hcmtlcl9zaXplOworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm87CisJdW5zaWduZWQgd3NfcnVsZTsKKwl1bnNpZ25lZCBzdGF0dXM7Cit9OworCitzdGF0aWMgaW50IGlzX2NvbmZsaWN0X21hcmtlcihjb25zdCBjaGFyICpsaW5lLCBpbnQgbWFya2VyX3NpemUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCWNoYXIgZmlyc3RjaGFyOworCWludCBjbnQ7CisKKwlpZiAobGVuIDwgbWFya2VyX3NpemUgKyAxKQorCQlyZXR1cm4gMDsKKwlmaXJzdGNoYXIgPSBsaW5lWzBdOworCXN3aXRjaCAoZmlyc3RjaGFyKSB7CisJY2FzZSAnPSc6IGNhc2UgJz4nOiBjYXNlICc8JzogY2FzZSAnfCc6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlmb3IgKGNudCA9IDE7IGNudCA8IG1hcmtlcl9zaXplOyBjbnQrKykKKwkJaWYgKGxpbmVbY250XSAhPSBmaXJzdGNoYXIpCisJCQlyZXR1cm4gMDsKKwkvKiBsaW5lWzFdIHRocm91Z2ggbGluZVttYXJrZXJfc2l6ZS0xXSBhcmUgc2FtZSBhcyBmaXJzdGNoYXIgKi8KKwlpZiAobGVuIDwgbWFya2VyX3NpemUgKyAxIHx8ICFpc3NwYWNlKGxpbmVbbWFya2VyX3NpemVdKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrZGlmZl9jb25zdW1lX2h1bmsodm9pZCAqcHJpdiwKKwkJCQkgICBsb25nIG9iLCBsb25nIG9uLCBsb25nIG5iLCBsb25nIG5uLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZ1bmMsIGxvbmcgZnVuY2xlbikKKworeworCXN0cnVjdCBjaGVja2RpZmZfdCAqZGF0YSA9IHByaXY7CisJZGF0YS0+bGluZW5vID0gbmIgLSAxOworfQorCitzdGF0aWMgdm9pZCBjaGVja2RpZmZfY29uc3VtZSh2b2lkICpwcml2LCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlzdHJ1Y3QgY2hlY2tkaWZmX3QgKmRhdGEgPSBwcml2OworCWludCBtYXJrZXJfc2l6ZSA9IGRhdGEtPmNvbmZsaWN0X21hcmtlcl9zaXplOworCWNvbnN0IGNoYXIgKndzID0gZGlmZl9nZXRfY29sb3IoZGF0YS0+by0+dXNlX2NvbG9yLCBESUZGX1dISVRFU1BBQ0UpOworCWNvbnN0IGNoYXIgKnJlc2V0ID0gZGlmZl9nZXRfY29sb3IoZGF0YS0+by0+dXNlX2NvbG9yLCBESUZGX1JFU0VUKTsKKwljb25zdCBjaGFyICpzZXQgPSBkaWZmX2dldF9jb2xvcihkYXRhLT5vLT51c2VfY29sb3IsIERJRkZfRklMRV9ORVcpOworCWNoYXIgKmVycjsKKwljb25zdCBjaGFyICpsaW5lX3ByZWZpeDsKKworCWFzc2VydChkYXRhLT5vKTsKKwlsaW5lX3ByZWZpeCA9IGRpZmZfbGluZV9wcmVmaXgoZGF0YS0+byk7CisKKwlpZiAobGluZVswXSA9PSAnKycpIHsKKwkJdW5zaWduZWQgYmFkOworCQlkYXRhLT5saW5lbm8rKzsKKwkJaWYgKGlzX2NvbmZsaWN0X21hcmtlcihsaW5lICsgMSwgbWFya2VyX3NpemUsIGxlbiAtIDEpKSB7CisJCQlkYXRhLT5zdGF0dXMgfD0gMTsKKwkJCWZwcmludGYoZGF0YS0+by0+ZmlsZSwKKwkJCQkiJXMlczolZDogbGVmdG92ZXIgY29uZmxpY3QgbWFya2VyXG4iLAorCQkJCWxpbmVfcHJlZml4LCBkYXRhLT5maWxlbmFtZSwgZGF0YS0+bGluZW5vKTsKKwkJfQorCQliYWQgPSB3c19jaGVjayhsaW5lICsgMSwgbGVuIC0gMSwgZGF0YS0+d3NfcnVsZSk7CisJCWlmICghYmFkKQorCQkJcmV0dXJuOworCQlkYXRhLT5zdGF0dXMgfD0gYmFkOworCQllcnIgPSB3aGl0ZXNwYWNlX2Vycm9yX3N0cmluZyhiYWQpOworCQlmcHJpbnRmKGRhdGEtPm8tPmZpbGUsICIlcyVzOiVkOiAlcy5cbiIsCisJCQlsaW5lX3ByZWZpeCwgZGF0YS0+ZmlsZW5hbWUsIGRhdGEtPmxpbmVubywgZXJyKTsKKwkJZnJlZShlcnIpOworCQllbWl0X2xpbmUoZGF0YS0+bywgc2V0LCByZXNldCwgbGluZSwgMSk7CisJCXdzX2NoZWNrX2VtaXQobGluZSArIDEsIGxlbiAtIDEsIGRhdGEtPndzX3J1bGUsCisJCQkgICAgICBkYXRhLT5vLT5maWxlLCBzZXQsIHJlc2V0LCB3cyk7CisJfSBlbHNlIGlmIChsaW5lWzBdID09ICcgJykgeworCQlkYXRhLT5saW5lbm8rKzsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpkZWZsYXRlX2l0KGNoYXIgKmRhdGEsCisJCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgdW5zaWduZWQgbG9uZyAqcmVzdWx0X3NpemUpCit7CisJaW50IGJvdW5kOworCXVuc2lnbmVkIGNoYXIgKmRlZmxhdGVkOworCWdpdF96c3RyZWFtIHN0cmVhbTsKKworCWdpdF9kZWZsYXRlX2luaXQoJnN0cmVhbSwgemxpYl9jb21wcmVzc2lvbl9sZXZlbCk7CisJYm91bmQgPSBnaXRfZGVmbGF0ZV9ib3VuZCgmc3RyZWFtLCBzaXplKTsKKwlkZWZsYXRlZCA9IHhtYWxsb2MoYm91bmQpOworCXN0cmVhbS5uZXh0X291dCA9IGRlZmxhdGVkOworCXN0cmVhbS5hdmFpbF9vdXQgPSBib3VuZDsKKworCXN0cmVhbS5uZXh0X2luID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOworCXN0cmVhbS5hdmFpbF9pbiA9IHNpemU7CisJd2hpbGUgKGdpdF9kZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKSA9PSBaX09LKQorCQk7IC8qIG5vdGhpbmcgKi8KKwlnaXRfZGVmbGF0ZV9lbmQoJnN0cmVhbSk7CisJKnJlc3VsdF9zaXplID0gc3RyZWFtLnRvdGFsX291dDsKKwlyZXR1cm4gZGVmbGF0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfYmluYXJ5X2RpZmZfYm9keShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJCSAgbW1maWxlX3QgKm9uZSwgbW1maWxlX3QgKnR3bykKK3sKKwl2b2lkICpjcDsKKwl2b2lkICpkZWx0YTsKKwl2b2lkICpkZWZsYXRlZDsKKwl2b2lkICpkYXRhOworCXVuc2lnbmVkIGxvbmcgb3JpZ19zaXplOworCXVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGRlZmxhdGVfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGRhdGFfc2l6ZTsKKworCS8qIFdlIGNvdWxkIGRvIGRlZmxhdGVkIGRlbHRhLCBvciB3ZSBjb3VsZCBkbyBqdXN0IGRlZmxhdGVkIHR3bywKKwkgKiB3aGljaGV2ZXIgaXMgc21hbGxlci4KKwkgKi8KKwlkZWx0YSA9IE5VTEw7CisJZGVmbGF0ZWQgPSBkZWZsYXRlX2l0KHR3by0+cHRyLCB0d28tPnNpemUsICZkZWZsYXRlX3NpemUpOworCWlmIChvbmUtPnNpemUgJiYgdHdvLT5zaXplKSB7CisJCWRlbHRhID0gZGlmZl9kZWx0YShvbmUtPnB0ciwgb25lLT5zaXplLAorCQkJCSAgIHR3by0+cHRyLCB0d28tPnNpemUsCisJCQkJICAgJmRlbHRhX3NpemUsIGRlZmxhdGVfc2l6ZSk7CisJCWlmIChkZWx0YSkgeworCQkJdm9pZCAqdG9fZnJlZSA9IGRlbHRhOworCQkJb3JpZ19zaXplID0gZGVsdGFfc2l6ZTsKKwkJCWRlbHRhID0gZGVmbGF0ZV9pdChkZWx0YSwgZGVsdGFfc2l6ZSwgJmRlbHRhX3NpemUpOworCQkJZnJlZSh0b19mcmVlKTsKKwkJfQorCX0KKworCWlmIChkZWx0YSAmJiBkZWx0YV9zaXplIDwgZGVmbGF0ZV9zaXplKSB7CisJCWNoYXIgKnMgPSB4c3RyZm10KCIlIlBSSXVNQVggLCAodWludG1heF90KW9yaWdfc2l6ZSk7CisJCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfQklOQVJZX0RJRkZfSEVBREVSX0RFTFRBLAorCQkJCSBzLCBzdHJsZW4ocyksIDApOworCQlmcmVlKHMpOworCQlmcmVlKGRlZmxhdGVkKTsKKwkJZGF0YSA9IGRlbHRhOworCQlkYXRhX3NpemUgPSBkZWx0YV9zaXplOworCX0gZWxzZSB7CisJCWNoYXIgKnMgPSB4c3RyZm10KCIlbHUiLCB0d28tPnNpemUpOworCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0JJTkFSWV9ESUZGX0hFQURFUl9MSVRFUkFMLAorCQkJCSBzLCBzdHJsZW4ocyksIDApOworCQlmcmVlKHMpOworCQlmcmVlKGRlbHRhKTsKKwkJZGF0YSA9IGRlZmxhdGVkOworCQlkYXRhX3NpemUgPSBkZWZsYXRlX3NpemU7CisJfQorCisJLyogZW1pdCBkYXRhIGVuY29kZWQgaW4gYmFzZTg1ICovCisJY3AgPSBkYXRhOworCXdoaWxlIChkYXRhX3NpemUpIHsKKwkJaW50IGxlbjsKKwkJaW50IGJ5dGVzID0gKDUyIDwgZGF0YV9zaXplKSA/IDUyIDogZGF0YV9zaXplOworCQljaGFyIGxpbmVbNzFdOworCQlkYXRhX3NpemUgLT0gYnl0ZXM7CisJCWlmIChieXRlcyA8PSAyNikKKwkJCWxpbmVbMF0gPSBieXRlcyArICdBJyAtIDE7CisJCWVsc2UKKwkJCWxpbmVbMF0gPSBieXRlcyAtIDI2ICsgJ2EnIC0gMTsKKwkJZW5jb2RlXzg1KGxpbmUgKyAxLCBjcCwgYnl0ZXMpOworCQljcCA9IChjaGFyICopIGNwICsgYnl0ZXM7CisKKwkJbGVuID0gc3RybGVuKGxpbmUpOworCQlsaW5lW2xlbisrXSA9ICdcbic7CisJCWxpbmVbbGVuXSA9ICdcMCc7CisKKwkJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9CSU5BUllfRElGRl9CT0RZLAorCQkJCSBsaW5lLCBsZW4sIDApOworCX0KKwllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0JJTkFSWV9ESUZGX0ZPT1RFUiwgTlVMTCwgMCwgMCk7CisJZnJlZShkYXRhKTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9iaW5hcnlfZGlmZihzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJICAgICBtbWZpbGVfdCAqb25lLCBtbWZpbGVfdCAqdHdvKQoreworCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfQklOQVJZX0RJRkZfSEVBREVSLCBOVUxMLCAwLCAwKTsKKwllbWl0X2JpbmFyeV9kaWZmX2JvZHkobywgb25lLCB0d28pOworCWVtaXRfYmluYXJ5X2RpZmZfYm9keShvLCB0d28sIG9uZSk7Cit9CisKK2ludCBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCXN0cnVjdCBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjX29wdGlvbnMgZHBmX29wdGlvbnMgPSB7CisJCS5jaGVja19iaW5hcnkgPSAxLAorCX07CisKKwlpZiAob25lLT5pc19iaW5hcnkgPT0gLTEpIHsKKwkJZGlmZl9maWxlc3BlY19sb2FkX2RyaXZlcihvbmUsIHItPmluZGV4KTsKKwkJaWYgKG9uZS0+ZHJpdmVyLT5iaW5hcnkgIT0gLTEpCisJCQlvbmUtPmlzX2JpbmFyeSA9IG9uZS0+ZHJpdmVyLT5iaW5hcnk7CisJCWVsc2UgeworCQkJaWYgKCFvbmUtPmRhdGEgJiYgRElGRl9GSUxFX1ZBTElEKG9uZSkpCisJCQkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCBvbmUsICZkcGZfb3B0aW9ucyk7CisJCQlpZiAob25lLT5pc19iaW5hcnkgPT0gLTEgJiYgb25lLT5kYXRhKQorCQkJCW9uZS0+aXNfYmluYXJ5ID0gYnVmZmVyX2lzX2JpbmFyeShvbmUtPmRhdGEsCisJCQkJCQlvbmUtPnNpemUpOworCQkJaWYgKG9uZS0+aXNfYmluYXJ5ID09IC0xKQorCQkJCW9uZS0+aXNfYmluYXJ5ID0gMDsKKwkJfQorCX0KKwlyZXR1cm4gb25lLT5pc19iaW5hcnk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcmRpZmZfZnVuY25hbWUgKgorZGlmZl9mdW5jbmFtZV9wYXR0ZXJuKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpCit7CisJZGlmZl9maWxlc3BlY19sb2FkX2RyaXZlcihvbmUsIG8tPnJlcG8tPmluZGV4KTsKKwlyZXR1cm4gb25lLT5kcml2ZXItPmZ1bmNuYW1lLnBhdHRlcm4gPyAmb25lLT5kcml2ZXItPmZ1bmNuYW1lIDogTlVMTDsKK30KKwordm9pZCBkaWZmX3NldF9tbmVtb25pY19wcmVmaXgoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywgY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKwlpZiAoIW9wdGlvbnMtPmFfcHJlZml4KQorCQlvcHRpb25zLT5hX3ByZWZpeCA9IGE7CisJaWYgKCFvcHRpb25zLT5iX3ByZWZpeCkKKwkJb3B0aW9ucy0+Yl9wcmVmaXggPSBiOworfQorCitzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpnZXRfdGV4dGNvbnYoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCWlmICghRElGRl9GSUxFX1ZBTElEKG9uZSkpCisJCXJldHVybiBOVUxMOworCisJZGlmZl9maWxlc3BlY19sb2FkX2RyaXZlcihvbmUsIHItPmluZGV4KTsKKwlyZXR1cm4gdXNlcmRpZmZfZ2V0X3RleHRjb252KHIsIG9uZS0+ZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgYnVpbHRpbl9kaWZmKGNvbnN0IGNoYXIgKm5hbWVfYSwKKwkJCSBjb25zdCBjaGFyICpuYW1lX2IsCisJCQkgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwKKwkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvLAorCQkJIGNvbnN0IGNoYXIgKnhmcm1fbXNnLAorCQkJIGludCBtdXN0X3Nob3dfaGVhZGVyLAorCQkJIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkgaW50IGNvbXBsZXRlX3Jld3JpdGUpCit7CisJbW1maWxlX3QgbWYxLCBtZjI7CisJY29uc3QgY2hhciAqbGJsWzJdOworCWNoYXIgKmFfb25lLCAqYl90d287CisJY29uc3QgY2hhciAqbWV0YSA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX01FVEFJTkZPKTsKKwljb25zdCBjaGFyICpyZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX1JFU0VUKTsKKwljb25zdCBjaGFyICphX3ByZWZpeCwgKmJfcHJlZml4OworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252X29uZSA9IE5VTEw7CisJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqdGV4dGNvbnZfdHdvID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIGhlYWRlciA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4ID0gZGlmZl9saW5lX3ByZWZpeChvKTsKKworCWRpZmZfc2V0X21uZW1vbmljX3ByZWZpeChvLCAiYS8iLCAiYi8iKTsKKwlpZiAoby0+ZmxhZ3MucmV2ZXJzZV9kaWZmKSB7CisJCWFfcHJlZml4ID0gby0+Yl9wcmVmaXg7CisJCWJfcHJlZml4ID0gby0+YV9wcmVmaXg7CisJfSBlbHNlIHsKKwkJYV9wcmVmaXggPSBvLT5hX3ByZWZpeDsKKwkJYl9wcmVmaXggPSBvLT5iX3ByZWZpeDsKKwl9CisKKwlpZiAoby0+c3VibW9kdWxlX2Zvcm1hdCA9PSBESUZGX1NVQk1PRFVMRV9MT0cgJiYKKwkgICAgKCFvbmUtPm1vZGUgfHwgU19JU0dJVExJTksob25lLT5tb2RlKSkgJiYKKwkgICAgKCF0d28tPm1vZGUgfHwgU19JU0dJVExJTksodHdvLT5tb2RlKSkpIHsKKwkJc2hvd19zdWJtb2R1bGVfc3VtbWFyeShvLCBvbmUtPnBhdGggPyBvbmUtPnBhdGggOiB0d28tPnBhdGgsCisJCQkJJm9uZS0+b2lkLCAmdHdvLT5vaWQsCisJCQkJdHdvLT5kaXJ0eV9zdWJtb2R1bGUpOworCQlyZXR1cm47CisJfSBlbHNlIGlmIChvLT5zdWJtb2R1bGVfZm9ybWF0ID09IERJRkZfU1VCTU9EVUxFX0lOTElORV9ESUZGICYmCisJCSAgICghb25lLT5tb2RlIHx8IFNfSVNHSVRMSU5LKG9uZS0+bW9kZSkpICYmCisJCSAgICghdHdvLT5tb2RlIHx8IFNfSVNHSVRMSU5LKHR3by0+bW9kZSkpKSB7CisJCXNob3dfc3VibW9kdWxlX2lubGluZV9kaWZmKG8sIG9uZS0+cGF0aCA/IG9uZS0+cGF0aCA6IHR3by0+cGF0aCwKKwkJCQkmb25lLT5vaWQsICZ0d28tPm9pZCwKKwkJCQl0d28tPmRpcnR5X3N1Ym1vZHVsZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoby0+ZmxhZ3MuYWxsb3dfdGV4dGNvbnYpIHsKKwkJdGV4dGNvbnZfb25lID0gZ2V0X3RleHRjb252KG8tPnJlcG8sIG9uZSk7CisJCXRleHRjb252X3R3byA9IGdldF90ZXh0Y29udihvLT5yZXBvLCB0d28pOworCX0KKworCS8qIE5ldmVyIHVzZSBhIG5vbi12YWxpZCBmaWxlbmFtZSBhbnl3aGVyZSBpZiBhdCBhbGwgcG9zc2libGUgKi8KKwluYW1lX2EgPSBESUZGX0ZJTEVfVkFMSUQob25lKSA/IG5hbWVfYSA6IG5hbWVfYjsKKwluYW1lX2IgPSBESUZGX0ZJTEVfVkFMSUQodHdvKSA/IG5hbWVfYiA6IG5hbWVfYTsKKworCWFfb25lID0gcXVvdGVfdHdvKGFfcHJlZml4LCBuYW1lX2EgKyAoKm5hbWVfYSA9PSAnLycpKTsKKwliX3R3byA9IHF1b3RlX3R3byhiX3ByZWZpeCwgbmFtZV9iICsgKCpuYW1lX2IgPT0gJy8nKSk7CisJbGJsWzBdID0gRElGRl9GSUxFX1ZBTElEKG9uZSkgPyBhX29uZSA6ICIvZGV2L251bGwiOworCWxibFsxXSA9IERJRkZfRklMRV9WQUxJRCh0d28pID8gYl90d28gOiAiL2Rldi9udWxsIjsKKwlzdHJidWZfYWRkZigmaGVhZGVyLCAiJXMlc2RpZmYgLS1naXQgJXMgJXMlc1xuIiwgbGluZV9wcmVmaXgsIG1ldGEsIGFfb25lLCBiX3R3bywgcmVzZXQpOworCWlmIChsYmxbMF1bMF0gPT0gJy8nKSB7CisJCS8qIC9kZXYvbnVsbCAqLworCQlzdHJidWZfYWRkZigmaGVhZGVyLCAiJXMlc25ldyBmaWxlIG1vZGUgJTA2byVzXG4iLCBsaW5lX3ByZWZpeCwgbWV0YSwgdHdvLT5tb2RlLCByZXNldCk7CisJCWlmICh4ZnJtX21zZykKKwkJCXN0cmJ1Zl9hZGRzdHIoJmhlYWRlciwgeGZybV9tc2cpOworCQltdXN0X3Nob3dfaGVhZGVyID0gMTsKKwl9CisJZWxzZSBpZiAobGJsWzFdWzBdID09ICcvJykgeworCQlzdHJidWZfYWRkZigmaGVhZGVyLCAiJXMlc2RlbGV0ZWQgZmlsZSBtb2RlICUwNm8lc1xuIiwgbGluZV9wcmVmaXgsIG1ldGEsIG9uZS0+bW9kZSwgcmVzZXQpOworCQlpZiAoeGZybV9tc2cpCisJCQlzdHJidWZfYWRkc3RyKCZoZWFkZXIsIHhmcm1fbXNnKTsKKwkJbXVzdF9zaG93X2hlYWRlciA9IDE7CisJfQorCWVsc2UgeworCQlpZiAob25lLT5tb2RlICE9IHR3by0+bW9kZSkgeworCQkJc3RyYnVmX2FkZGYoJmhlYWRlciwgIiVzJXNvbGQgbW9kZSAlMDZvJXNcbiIsIGxpbmVfcHJlZml4LCBtZXRhLCBvbmUtPm1vZGUsIHJlc2V0KTsKKwkJCXN0cmJ1Zl9hZGRmKCZoZWFkZXIsICIlcyVzbmV3IG1vZGUgJTA2byVzXG4iLCBsaW5lX3ByZWZpeCwgbWV0YSwgdHdvLT5tb2RlLCByZXNldCk7CisJCQltdXN0X3Nob3dfaGVhZGVyID0gMTsKKwkJfQorCQlpZiAoeGZybV9tc2cpCisJCQlzdHJidWZfYWRkc3RyKCZoZWFkZXIsIHhmcm1fbXNnKTsKKworCQkvKgorCQkgKiB3ZSBkbyBub3QgcnVuIGRpZmYgYmV0d2VlbiBkaWZmZXJlbnQga2luZAorCQkgKiBvZiBvYmplY3RzLgorCQkgKi8KKwkJaWYgKChvbmUtPm1vZGUgXiB0d28tPm1vZGUpICYgU19JRk1UKQorCQkJZ290byBmcmVlX2FiX2FuZF9yZXR1cm47CisJCWlmIChjb21wbGV0ZV9yZXdyaXRlICYmCisJCSAgICAodGV4dGNvbnZfb25lIHx8ICFkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShvLT5yZXBvLCBvbmUpKSAmJgorCQkgICAgKHRleHRjb252X3R3byB8fCAhZGlmZl9maWxlc3BlY19pc19iaW5hcnkoby0+cmVwbywgdHdvKSkpIHsKKwkJCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfSEVBREVSLAorCQkJCQkgaGVhZGVyLmJ1ZiwgaGVhZGVyLmxlbiwgMCk7CisJCQlzdHJidWZfcmVzZXQoJmhlYWRlcik7CisJCQllbWl0X3Jld3JpdGVfZGlmZihuYW1lX2EsIG5hbWVfYiwgb25lLCB0d28sCisJCQkJCSAgdGV4dGNvbnZfb25lLCB0ZXh0Y29udl90d28sIG8pOworCQkJby0+Zm91bmRfY2hhbmdlcyA9IDE7CisJCQlnb3RvIGZyZWVfYWJfYW5kX3JldHVybjsKKwkJfQorCX0KKworCWlmIChvLT5pcnJldmVyc2libGVfZGVsZXRlICYmIGxibFsxXVswXSA9PSAnLycpIHsKKwkJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9IRUFERVIsIGhlYWRlci5idWYsCisJCQkJIGhlYWRlci5sZW4sIDApOworCQlzdHJidWZfcmVzZXQoJmhlYWRlcik7CisJCWdvdG8gZnJlZV9hYl9hbmRfcmV0dXJuOworCX0gZWxzZSBpZiAoIW8tPmZsYWdzLnRleHQgJiYKKwkJICAgKCAoIXRleHRjb252X29uZSAmJiBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShvLT5yZXBvLCBvbmUpKSB8fAorCQkgICAgICghdGV4dGNvbnZfdHdvICYmIGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KG8tPnJlcG8sIHR3bykpICkpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQlpZiAoIW9uZS0+ZGF0YSAmJiAhdHdvLT5kYXRhICYmCisJCSAgICBTX0lTUkVHKG9uZS0+bW9kZSkgJiYgU19JU1JFRyh0d28tPm1vZGUpICYmCisJCSAgICAhby0+ZmxhZ3MuYmluYXJ5KSB7CisJCQlpZiAob2lkZXEoJm9uZS0+b2lkLCAmdHdvLT5vaWQpKSB7CisJCQkJaWYgKG11c3Rfc2hvd19oZWFkZXIpCisJCQkJCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfSEVBREVSLAorCQkJCQkJCSBoZWFkZXIuYnVmLCBoZWFkZXIubGVuLAorCQkJCQkJCSAwKTsKKwkJCQlnb3RvIGZyZWVfYWJfYW5kX3JldHVybjsKKwkJCX0KKwkJCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfSEVBREVSLAorCQkJCQkgaGVhZGVyLmJ1ZiwgaGVhZGVyLmxlbiwgMCk7CisJCQlzdHJidWZfYWRkZigmc2IsICIlc0JpbmFyeSBmaWxlcyAlcyBhbmQgJXMgZGlmZmVyXG4iLAorCQkJCSAgICBkaWZmX2xpbmVfcHJlZml4KG8pLCBsYmxbMF0sIGxibFsxXSk7CisJCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0JJTkFSWV9GSUxFUywKKwkJCQkJIHNiLmJ1Ziwgc2IubGVuLCAwKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCQlnb3RvIGZyZWVfYWJfYW5kX3JldHVybjsKKwkJfQorCQlpZiAoZmlsbF9tbWZpbGUoby0+cmVwbywgJm1mMSwgb25lKSA8IDAgfHwKKwkJICAgIGZpbGxfbW1maWxlKG8tPnJlcG8sICZtZjIsIHR3bykgPCAwKQorCQkJZGllKCJ1bmFibGUgdG8gcmVhZCBmaWxlcyB0byBkaWZmIik7CisJCS8qIFF1aXRlIGNvbW1vbiBjb25mdXNpbmcgY2FzZSAqLworCQlpZiAobWYxLnNpemUgPT0gbWYyLnNpemUgJiYKKwkJICAgICFtZW1jbXAobWYxLnB0ciwgbWYyLnB0ciwgbWYxLnNpemUpKSB7CisJCQlpZiAobXVzdF9zaG93X2hlYWRlcikKKwkJCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0hFQURFUiwKKwkJCQkJCSBoZWFkZXIuYnVmLCBoZWFkZXIubGVuLCAwKTsKKwkJCWdvdG8gZnJlZV9hYl9hbmRfcmV0dXJuOworCQl9CisJCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfSEVBREVSLCBoZWFkZXIuYnVmLCBoZWFkZXIubGVuLCAwKTsKKwkJc3RyYnVmX3Jlc2V0KCZoZWFkZXIpOworCQlpZiAoby0+ZmxhZ3MuYmluYXJ5KQorCQkJZW1pdF9iaW5hcnlfZGlmZihvLCAmbWYxLCAmbWYyKTsKKwkJZWxzZSB7CisJCQlzdHJidWZfYWRkZigmc2IsICIlc0JpbmFyeSBmaWxlcyAlcyBhbmQgJXMgZGlmZmVyXG4iLAorCQkJCSAgICBkaWZmX2xpbmVfcHJlZml4KG8pLCBsYmxbMF0sIGxibFsxXSk7CisJCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0JJTkFSWV9GSUxFUywKKwkJCQkJIHNiLmJ1Ziwgc2IubGVuLCAwKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCX0KKwkJby0+Zm91bmRfY2hhbmdlcyA9IDE7CisJfSBlbHNlIHsKKwkJLyogQ3JhenkgeGRsIGludGVyZmFjZXMuLiAqLworCQljb25zdCBjaGFyICpkaWZmb3B0czsKKwkJY29uc3QgY2hhciAqdjsKKwkJeHBwYXJhbV90IHhwcDsKKwkJeGRlbWl0Y29uZl90IHhlY2ZnOworCQlzdHJ1Y3QgZW1pdF9jYWxsYmFjayBlY2JkYXRhOworCQljb25zdCBzdHJ1Y3QgdXNlcmRpZmZfZnVuY25hbWUgKnBlOworCisJCWlmIChtdXN0X3Nob3dfaGVhZGVyKSB7CisJCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0hFQURFUiwKKwkJCQkJIGhlYWRlci5idWYsIGhlYWRlci5sZW4sIDApOworCQkJc3RyYnVmX3Jlc2V0KCZoZWFkZXIpOworCQl9CisKKwkJbWYxLnNpemUgPSBmaWxsX3RleHRjb252KG8tPnJlcG8sIHRleHRjb252X29uZSwgb25lLCAmbWYxLnB0cik7CisJCW1mMi5zaXplID0gZmlsbF90ZXh0Y29udihvLT5yZXBvLCB0ZXh0Y29udl90d28sIHR3bywgJm1mMi5wdHIpOworCisJCXBlID0gZGlmZl9mdW5jbmFtZV9wYXR0ZXJuKG8sIG9uZSk7CisJCWlmICghcGUpCisJCQlwZSA9IGRpZmZfZnVuY25hbWVfcGF0dGVybihvLCB0d28pOworCisJCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CisJCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCQltZW1zZXQoJmVjYmRhdGEsIDAsIHNpemVvZihlY2JkYXRhKSk7CisJCWlmIChvLT5mbGFncy5zdXBwcmVzc19kaWZmX2hlYWRlcnMpCisJCQlsYmxbMF0gPSBOVUxMOworCQllY2JkYXRhLmxhYmVsX3BhdGggPSBsYmw7CisJCWVjYmRhdGEuY29sb3JfZGlmZiA9IHdhbnRfY29sb3Ioby0+dXNlX2NvbG9yKTsKKwkJZWNiZGF0YS53c19ydWxlID0gd2hpdGVzcGFjZV9ydWxlKG8tPnJlcG8tPmluZGV4LCBuYW1lX2IpOworCQlpZiAoZWNiZGF0YS53c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKQorCQkJY2hlY2tfYmxhbmtfYXRfZW9mKCZtZjEsICZtZjIsICZlY2JkYXRhKTsKKwkJZWNiZGF0YS5vcHQgPSBvOworCQlpZiAoaGVhZGVyLmxlbiAmJiAhby0+ZmxhZ3Muc3VwcHJlc3NfZGlmZl9oZWFkZXJzKQorCQkJZWNiZGF0YS5oZWFkZXIgPSAmaGVhZGVyOworCQl4cHAuZmxhZ3MgPSBvLT54ZGxfb3B0czsKKwkJeHBwLmFuY2hvcnMgPSBvLT5hbmNob3JzOworCQl4cHAuYW5jaG9yc19uciA9IG8tPmFuY2hvcnNfbnI7CisJCXhlY2ZnLmN0eGxlbiA9IG8tPmNvbnRleHQ7CisJCXhlY2ZnLmludGVyaHVua2N0eGxlbiA9IG8tPmludGVyaHVua2NvbnRleHQ7CisJCXhlY2ZnLmZsYWdzID0gWERMX0VNSVRfRlVOQ05BTUVTOworCQlpZiAoby0+ZmxhZ3MuZnVuY2NvbnRleHQpCisJCQl4ZWNmZy5mbGFncyB8PSBYRExfRU1JVF9GVU5DQ09OVEVYVDsKKwkJaWYgKHBlKQorCQkJeGRpZmZfc2V0X2ZpbmRfZnVuYygmeGVjZmcsIHBlLT5wYXR0ZXJuLCBwZS0+Y2ZsYWdzKTsKKworCQlkaWZmb3B0cyA9IGdldGVudigiR0lUX0RJRkZfT1BUUyIpOworCQlpZiAoIWRpZmZvcHRzKQorCQkJOworCQllbHNlIGlmIChza2lwX3ByZWZpeChkaWZmb3B0cywgIi0tdW5pZmllZD0iLCAmdikpCisJCQl4ZWNmZy5jdHhsZW4gPSBzdHJ0b3VsKHYsIE5VTEwsIDEwKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoZGlmZm9wdHMsICItdSIsICZ2KSkKKwkJCXhlY2ZnLmN0eGxlbiA9IHN0cnRvdWwodiwgTlVMTCwgMTApOworCisJCWlmIChvLT53b3JkX2RpZmYpCisJCQlpbml0X2RpZmZfd29yZHNfZGF0YSgmZWNiZGF0YSwgbywgb25lLCB0d28pOworCQlpZiAoeGRpX2RpZmZfb3V0ZigmbWYxLCAmbWYyLCBOVUxMLCBmbl9vdXRfY29uc3VtZSwKKwkJCQkgICZlY2JkYXRhLCAmeHBwLCAmeGVjZmcpKQorCQkJZGllKCJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZiBmb3IgJXMiLCBvbmUtPnBhdGgpOworCQlpZiAoby0+d29yZF9kaWZmKQorCQkJZnJlZV9kaWZmX3dvcmRzX2RhdGEoJmVjYmRhdGEpOworCQlpZiAodGV4dGNvbnZfb25lKQorCQkJZnJlZShtZjEucHRyKTsKKwkJaWYgKHRleHRjb252X3R3bykKKwkJCWZyZWUobWYyLnB0cik7CisJCXhkaWZmX2NsZWFyX2ZpbmRfZnVuYygmeGVjZmcpOworCX0KKworIGZyZWVfYWJfYW5kX3JldHVybjoKKwlzdHJidWZfcmVsZWFzZSgmaGVhZGVyKTsKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShvbmUpOworCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHR3byk7CisJZnJlZShhX29uZSk7CisJZnJlZShiX3R3byk7CisJcmV0dXJuOworfQorCitzdGF0aWMgY2hhciAqZ2V0X2NvbXBhY3Rfc3VtbWFyeShjb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwgaW50IGlzX3JlbmFtZWQpCit7CisJaWYgKCFpc19yZW5hbWVkKSB7CisJCWlmIChwLT5zdGF0dXMgPT0gRElGRl9TVEFUVVNfQURERUQpIHsKKwkJCWlmIChTX0lTTE5LKHAtPnR3by0+bW9kZSkpCisJCQkJcmV0dXJuICJuZXcgK2wiOworCQkJZWxzZSBpZiAoKHAtPnR3by0+bW9kZSAmIDA3NzcpID09IDA3NTUpCisJCQkJcmV0dXJuICJuZXcgK3giOworCQkJZWxzZQorCQkJCXJldHVybiAibmV3IjsKKwkJfSBlbHNlIGlmIChwLT5zdGF0dXMgPT0gRElGRl9TVEFUVVNfREVMRVRFRCkKKwkJCXJldHVybiAiZ29uZSI7CisJfQorCWlmIChTX0lTTE5LKHAtPm9uZS0+bW9kZSkgJiYgIVNfSVNMTksocC0+dHdvLT5tb2RlKSkKKwkJcmV0dXJuICJtb2RlIC1sIjsKKwllbHNlIGlmICghU19JU0xOSyhwLT5vbmUtPm1vZGUpICYmIFNfSVNMTksocC0+dHdvLT5tb2RlKSkKKwkJcmV0dXJuICJtb2RlICtsIjsKKwllbHNlIGlmICgocC0+b25lLT5tb2RlICYgMDc3NykgPT0gMDY0NCAmJgorCQkgKHAtPnR3by0+bW9kZSAmIDA3NzcpID09IDA3NTUpCisJCXJldHVybiAibW9kZSAreCI7CisJZWxzZSBpZiAoKHAtPm9uZS0+bW9kZSAmIDA3NzcpID09IDA3NTUgJiYKKwkJIChwLT50d28tPm1vZGUgJiAwNzc3KSA9PSAwNjQ0KQorCQlyZXR1cm4gIm1vZGUgLXgiOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBidWlsdGluX2RpZmZzdGF0KGNvbnN0IGNoYXIgKm5hbWVfYSwgY29uc3QgY2hhciAqbmFtZV9iLAorCQkJICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkJICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvLAorCQkJICAgICBzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQsCisJCQkgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkgICAgIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwKQoreworCW1tZmlsZV90IG1mMSwgbWYyOworCXN0cnVjdCBkaWZmc3RhdF9maWxlICpkYXRhOworCWludCBzYW1lX2NvbnRlbnRzOworCWludCBjb21wbGV0ZV9yZXdyaXRlID0gMDsKKworCWlmICghRElGRl9QQUlSX1VOTUVSR0VEKHApKSB7CisJCWlmIChwLT5zdGF0dXMgPT0gRElGRl9TVEFUVVNfTU9ESUZJRUQgJiYgcC0+c2NvcmUpCisJCQljb21wbGV0ZV9yZXdyaXRlID0gMTsKKwl9CisKKwlkYXRhID0gZGlmZnN0YXRfYWRkKGRpZmZzdGF0LCBuYW1lX2EsIG5hbWVfYik7CisJZGF0YS0+aXNfaW50ZXJlc3RpbmcgPSBwLT5zdGF0dXMgIT0gRElGRl9TVEFUVVNfVU5LTk9XTjsKKwlpZiAoby0+ZmxhZ3Muc3RhdF93aXRoX3N1bW1hcnkpCisJCWRhdGEtPmNvbW1lbnRzID0gZ2V0X2NvbXBhY3Rfc3VtbWFyeShwLCBkYXRhLT5pc19yZW5hbWVkKTsKKworCWlmICghb25lIHx8ICF0d28pIHsKKwkJZGF0YS0+aXNfdW5tZXJnZWQgPSAxOworCQlyZXR1cm47CisJfQorCisJc2FtZV9jb250ZW50cyA9IG9pZGVxKCZvbmUtPm9pZCwgJnR3by0+b2lkKTsKKworCWlmIChkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShvLT5yZXBvLCBvbmUpIHx8CisJICAgIGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KG8tPnJlcG8sIHR3bykpIHsKKwkJZGF0YS0+aXNfYmluYXJ5ID0gMTsKKwkJaWYgKHNhbWVfY29udGVudHMpIHsKKwkJCWRhdGEtPmFkZGVkID0gMDsKKwkJCWRhdGEtPmRlbGV0ZWQgPSAwOworCQl9IGVsc2UgeworCQkJZGF0YS0+YWRkZWQgPSBkaWZmX2ZpbGVzcGVjX3NpemUoby0+cmVwbywgdHdvKTsKKwkJCWRhdGEtPmRlbGV0ZWQgPSBkaWZmX2ZpbGVzcGVjX3NpemUoby0+cmVwbywgb25lKTsKKwkJfQorCX0KKworCWVsc2UgaWYgKGNvbXBsZXRlX3Jld3JpdGUpIHsKKwkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhvLT5yZXBvLCBvbmUsIE5VTEwpOworCQlkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKG8tPnJlcG8sIHR3bywgTlVMTCk7CisJCWRhdGEtPmRlbGV0ZWQgPSBjb3VudF9saW5lcyhvbmUtPmRhdGEsIG9uZS0+c2l6ZSk7CisJCWRhdGEtPmFkZGVkID0gY291bnRfbGluZXModHdvLT5kYXRhLCB0d28tPnNpemUpOworCX0KKworCWVsc2UgaWYgKCFzYW1lX2NvbnRlbnRzKSB7CisJCS8qIENyYXp5IHhkbCBpbnRlcmZhY2VzLi4gKi8KKwkJeHBwYXJhbV90IHhwcDsKKwkJeGRlbWl0Y29uZl90IHhlY2ZnOworCisJCWlmIChmaWxsX21tZmlsZShvLT5yZXBvLCAmbWYxLCBvbmUpIDwgMCB8fAorCQkgICAgZmlsbF9tbWZpbGUoby0+cmVwbywgJm1mMiwgdHdvKSA8IDApCisJCQlkaWUoInVuYWJsZSB0byByZWFkIGZpbGVzIHRvIGRpZmYiKTsKKworCQltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCQltZW1zZXQoJnhlY2ZnLCAwLCBzaXplb2YoeGVjZmcpKTsKKwkJeHBwLmZsYWdzID0gby0+eGRsX29wdHM7CisJCXhwcC5hbmNob3JzID0gby0+YW5jaG9yczsKKwkJeHBwLmFuY2hvcnNfbnIgPSBvLT5hbmNob3JzX25yOworCQl4ZWNmZy5jdHhsZW4gPSBvLT5jb250ZXh0OworCQl4ZWNmZy5pbnRlcmh1bmtjdHhsZW4gPSBvLT5pbnRlcmh1bmtjb250ZXh0OworCQlpZiAoeGRpX2RpZmZfb3V0ZigmbWYxLCAmbWYyLCBkaXNjYXJkX2h1bmtfbGluZSwKKwkJCQkgIGRpZmZzdGF0X2NvbnN1bWUsIGRpZmZzdGF0LCAmeHBwLCAmeGVjZmcpKQorCQkJZGllKCJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZnN0YXQgZm9yICVzIiwgb25lLT5wYXRoKTsKKwl9CisKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShvbmUpOworCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHR3byk7Cit9CisKK3N0YXRpYyB2b2lkIGJ1aWx0aW5fY2hlY2tkaWZmKGNvbnN0IGNoYXIgKm5hbWVfYSwgY29uc3QgY2hhciAqbmFtZV9iLAorCQkJICAgICAgY29uc3QgY2hhciAqYXR0cl9wYXRoLAorCQkJICAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwKKwkJCSAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28sCisJCQkgICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvKQoreworCW1tZmlsZV90IG1mMSwgbWYyOworCXN0cnVjdCBjaGVja2RpZmZfdCBkYXRhOworCisJaWYgKCF0d28pCisJCXJldHVybjsKKworCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKwlkYXRhLmZpbGVuYW1lID0gbmFtZV9iID8gbmFtZV9iIDogbmFtZV9hOworCWRhdGEubGluZW5vID0gMDsKKwlkYXRhLm8gPSBvOworCWRhdGEud3NfcnVsZSA9IHdoaXRlc3BhY2VfcnVsZShvLT5yZXBvLT5pbmRleCwgYXR0cl9wYXRoKTsKKwlkYXRhLmNvbmZsaWN0X21hcmtlcl9zaXplID0gbGxfbWVyZ2VfbWFya2VyX3NpemUoby0+cmVwby0+aW5kZXgsIGF0dHJfcGF0aCk7CisKKwlpZiAoZmlsbF9tbWZpbGUoby0+cmVwbywgJm1mMSwgb25lKSA8IDAgfHwKKwkgICAgZmlsbF9tbWZpbGUoby0+cmVwbywgJm1mMiwgdHdvKSA8IDApCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgZmlsZXMgdG8gZGlmZiIpOworCisJLyoKKwkgKiBBbGwgdGhlIG90aGVyIGNvZGVwYXRocyBjaGVjayBib3RoIHNpZGVzLCBidXQgbm90IGNoZWNraW5nCisJICogdGhlICJvbGQiIHNpZGUgaGVyZSBpcyBkZWxpYmVyYXRlLiAgV2UgYXJlIGNoZWNraW5nIHRoZSBuZXdseQorCSAqIGludHJvZHVjZWQgY2hhbmdlcywgYW5kIGFzIGxvbmcgYXMgdGhlICJuZXciIHNpZGUgaXMgdGV4dCwgd2UKKwkgKiBjYW4gYW5kIHNob3VsZCBjaGVjayB3aGF0IGl0IGludHJvZHVjZXMuCisJICovCisJaWYgKGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KG8tPnJlcG8sIHR3bykpCisJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOworCWVsc2UgeworCQkvKiBDcmF6eSB4ZGwgaW50ZXJmYWNlcy4uICovCisJCXhwcGFyYW1fdCB4cHA7CisJCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKworCQltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCQltZW1zZXQoJnhlY2ZnLCAwLCBzaXplb2YoeGVjZmcpKTsKKwkJeGVjZmcuY3R4bGVuID0gMTsgLyogYXQgbGVhc3Qgb25lIGNvbnRleHQgbGluZSAqLworCQl4cHAuZmxhZ3MgPSAwOworCQlpZiAoeGRpX2RpZmZfb3V0ZigmbWYxLCAmbWYyLCBjaGVja2RpZmZfY29uc3VtZV9odW5rLAorCQkJCSAgY2hlY2tkaWZmX2NvbnN1bWUsICZkYXRhLAorCQkJCSAgJnhwcCwgJnhlY2ZnKSkKKwkJCWRpZSgidW5hYmxlIHRvIGdlbmVyYXRlIGNoZWNrZGlmZiBmb3IgJXMiLCBvbmUtPnBhdGgpOworCisJCWlmIChkYXRhLndzX3J1bGUgJiBXU19CTEFOS19BVF9FT0YpIHsKKwkJCXN0cnVjdCBlbWl0X2NhbGxiYWNrIGVjYmRhdGE7CisJCQlpbnQgYmxhbmtfYXRfZW9mOworCisJCQllY2JkYXRhLndzX3J1bGUgPSBkYXRhLndzX3J1bGU7CisJCQljaGVja19ibGFua19hdF9lb2YoJm1mMSwgJm1mMiwgJmVjYmRhdGEpOworCQkJYmxhbmtfYXRfZW9mID0gZWNiZGF0YS5ibGFua19hdF9lb2ZfaW5fcG9zdGltYWdlOworCisJCQlpZiAoYmxhbmtfYXRfZW9mKSB7CisJCQkJc3RhdGljIGNoYXIgKmVycjsKKwkJCQlpZiAoIWVycikKKwkJCQkJZXJyID0gd2hpdGVzcGFjZV9lcnJvcl9zdHJpbmcoV1NfQkxBTktfQVRfRU9GKTsKKwkJCQlmcHJpbnRmKG8tPmZpbGUsICIlczolZDogJXMuXG4iLAorCQkJCQlkYXRhLmZpbGVuYW1lLCBibGFua19hdF9lb2YsIGVycik7CisJCQkJZGF0YS5zdGF0dXMgPSAxOyAvKiByZXBvcnQgZXJyb3JzICovCisJCQl9CisJCX0KKwl9CisgZnJlZV9hbmRfcmV0dXJuOgorCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKG9uZSk7CisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEodHdvKTsKKwlpZiAoZGF0YS5zdGF0dXMpCisJCW8tPmZsYWdzLmNoZWNrX2ZhaWxlZCA9IDE7Cit9CisKK3N0cnVjdCBkaWZmX2ZpbGVzcGVjICphbGxvY19maWxlc3BlYyhjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjOworCisJRkxFWFBUUl9BTExPQ19TVFIoc3BlYywgcGF0aCwgcGF0aCk7CisJc3BlYy0+Y291bnQgPSAxOworCXNwZWMtPmlzX2JpbmFyeSA9IC0xOworCXJldHVybiBzcGVjOworfQorCit2b2lkIGZyZWVfZmlsZXNwZWMoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNwZWMpCit7CisJaWYgKCEtLXNwZWMtPmNvdW50KSB7CisJCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHNwZWMpOworCQlmcmVlKHNwZWMpOworCX0KK30KKwordm9pZCBmaWxsX2ZpbGVzcGVjKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgIGludCBvaWRfdmFsaWQsIHVuc2lnbmVkIHNob3J0IG1vZGUpCit7CisJaWYgKG1vZGUpIHsKKwkJc3BlYy0+bW9kZSA9IGNhbm9uX21vZGUobW9kZSk7CisJCW9pZGNweSgmc3BlYy0+b2lkLCBvaWQpOworCQlzcGVjLT5vaWRfdmFsaWQgPSBvaWRfdmFsaWQ7CisJfQorfQorCisvKgorICogR2l2ZW4gYSBuYW1lIGFuZCBzaGExIHBhaXIsIGlmIHRoZSBpbmRleCB0ZWxscyB1cyB0aGUgZmlsZSBpbgorICogdGhlIHdvcmsgdHJlZSBoYXMgdGhhdCBvYmplY3QgY29udGVudHMsIHJldHVybiB0cnVlLCBzbyB0aGF0CisgKiBwcmVwYXJlX3RlbXBfZmlsZSgpIGRvZXMgbm90IGhhdmUgdG8gaW5mbGF0ZSBhbmQgZXh0cmFjdC4KKyAqLworc3RhdGljIGludCByZXVzZV93b3JrdHJlZV9maWxlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgIGludCB3YW50X2ZpbGUpCit7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgcG9zLCBsZW47CisKKwkvKgorCSAqIFdlIGRvIG5vdCByZWFkIHRoZSBjYWNoZSBvdXJzZWx2ZXMgaGVyZSwgYmVjYXVzZSB0aGUKKwkgKiBiZW5jaG1hcmsgd2l0aCBteSBwcmV2aW91cyB2ZXJzaW9uIHRoYXQgYWx3YXlzIHJlYWRzIGNhY2hlCisJICogc2hvd3MgdGhhdCBpdCBtYWtlcyB0aGluZ3Mgd29yc2UgZm9yIGRpZmYtdHJlZSBjb21wYXJpbmcKKwkgKiB0d28gbGludXgtMi42IGtlcm5lbCB0cmVlcyBpbiBhbiBhbHJlYWR5IGNoZWNrZWQgb3V0IHdvcmsKKwkgKiB0cmVlLiAgVGhpcyBpcyBiZWNhdXNlIG1vc3QgZGlmZi10cmVlIGNvbXBhcmlzb25zIGRlYWwgd2l0aAorCSAqIG9ubHkgYSBzbWFsbCBudW1iZXIgb2YgZmlsZXMsIHdoaWxlIHJlYWRpbmcgdGhlIGNhY2hlIGlzCisJICogZXhwZW5zaXZlIGZvciBhIGxhcmdlIHByb2plY3QsIGFuZCBpdHMgY29zdCBvdXR3ZWlnaHMgdGhlCisJICogc2F2aW5ncyB3ZSBnZXQgYnkgbm90IGluZmxhdGluZyB0aGUgb2JqZWN0IHRvIGEgdGVtcG9yYXJ5CisJICogZmlsZS4gIFByYWN0aWNhbGx5LCB0aGlzIGNvZGUgb25seSBoZWxwcyB3aGVuIHdlIGFyZSB1c2VkCisJICogYnkgZGlmZi1jYWNoZSAtLWNhY2hlZCwgd2hpY2ggZG9lcyByZWFkIHRoZSBjYWNoZSBiZWZvcmUKKwkgKiBjYWxsaW5nIHVzLgorCSAqLworCWlmICghaXN0YXRlLT5jYWNoZSkKKwkJcmV0dXJuIDA7CisKKwkvKiBXZSB3YW50IHRvIGF2b2lkIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpZiBvdXIgY2FsbGVyCisJICogZG9lc24ndCBuZWVkIHRoZSBkYXRhIGluIGEgbm9ybWFsIGZpbGUsIHRoaXMgc3lzdGVtCisJICogaXMgcmF0aGVyIHNsb3cgd2l0aCBpdHMgc3RhdC9vcGVuL21tYXAvY2xvc2Ugc3lzY2FsbHMsCisJICogYW5kIHRoZSBvYmplY3QgaXMgY29udGFpbmVkIGluIGEgcGFjayBmaWxlLiAgVGhlIHBhY2sKKwkgKiBpcyBwcm9iYWJseSBhbHJlYWR5IG9wZW4gYW5kIHdpbGwgYmUgZmFzdGVyIHRvIG9idGFpbgorCSAqIHRoZSBkYXRhIHRocm91Z2ggdGhhbiB0aGUgd29ya2luZyBkaXJlY3RvcnkuICBMb29zZQorCSAqIG9iamVjdHMgaG93ZXZlciB3b3VsZCB0ZW5kIHRvIGJlIHNsb3dlciBhcyB0aGV5IG5lZWQKKwkgKiB0byBiZSBpbmRpdmlkdWFsbHkgb3BlbmVkIGFuZCBpbmZsYXRlZC4KKwkgKi8KKwlpZiAoIUZBU1RfV09SS0lOR19ESVJFQ1RPUlkgJiYgIXdhbnRfZmlsZSAmJiBoYXNfb2JqZWN0X3BhY2sob2lkKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFNpbWlsYXJseSwgaWYgd2UnZCBoYXZlIHRvIGNvbnZlcnQgdGhlIGZpbGUgY29udGVudHMgYW55d2F5LCB0aGF0CisJICogbWFrZXMgdGhlIG9wdGltaXphdGlvbiBub3Qgd29ydGh3aGlsZS4KKwkgKi8KKwlpZiAoIXdhbnRfZmlsZSAmJiB3b3VsZF9jb252ZXJ0X3RvX2dpdChpc3RhdGUsIG5hbWUpKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IHN0cmxlbihuYW1lKTsKKwlwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIG5hbWUsIGxlbik7CisJaWYgKHBvcyA8IDApCisJCXJldHVybiAwOworCWNlID0gaXN0YXRlLT5jYWNoZVtwb3NdOworCisJLyoKKwkgKiBUaGlzIGlzIG5vdCB0aGUgc2hhMSB3ZSBhcmUgbG9va2luZyBmb3IsIG9yCisJICogdW5yZXVzYWJsZSBiZWNhdXNlIGl0IGlzIG5vdCBhIHJlZ3VsYXIgZmlsZS4KKwkgKi8KKwlpZiAoIW9pZGVxKG9pZCwgJmNlLT5vaWQpIHx8ICFTX0lTUkVHKGNlLT5jZV9tb2RlKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIGNlIGlzIG1hcmtlZCBhcyAiYXNzdW1lIHVuY2hhbmdlZCIsIHRoZXJlIGlzIG5vCisJICogZ3VhcmFudGVlIHRoYXQgd29yayB0cmVlIG1hdGNoZXMgd2hhdCB3ZSBhcmUgbG9va2luZyBmb3IuCisJICovCisJaWYgKChjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkgfHwgY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiBjZSBtYXRjaGVzIHRoZSBmaWxlIGluIHRoZSB3b3JrIHRyZWUsIHdlIGNhbiByZXVzZSBpdC4KKwkgKi8KKwlpZiAoY2VfdXB0b2RhdGUoY2UpIHx8CisJICAgICghbHN0YXQobmFtZSwgJnN0KSAmJiAhaWVfbWF0Y2hfc3RhdChpc3RhdGUsIGNlLCAmc3QsIDApKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX3BvcHVsYXRlX2dpdGxpbmsoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnMsIGludCBzaXplX29ubHkpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpkaXJ0eSA9ICIiOworCisJLyogQXJlIHdlIGxvb2tpbmcgYXQgdGhlIHdvcmsgdHJlZT8gKi8KKwlpZiAocy0+ZGlydHlfc3VibW9kdWxlKQorCQlkaXJ0eSA9ICItZGlydHkiOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIlN1YnByb2plY3QgY29tbWl0ICVzJXNcbiIsCisJCSAgICBvaWRfdG9faGV4KCZzLT5vaWQpLCBkaXJ0eSk7CisJcy0+c2l6ZSA9IGJ1Zi5sZW47CisJaWYgKHNpemVfb25seSkgeworCQlzLT5kYXRhID0gTlVMTDsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfSBlbHNlIHsKKwkJcy0+ZGF0YSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJCXMtPnNob3VsZF9mcmVlID0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXaGlsZSBkb2luZyByZW5hbWUgZGV0ZWN0aW9uIGFuZCBwaWNrYXhlIG9wZXJhdGlvbiwgd2UgbWF5IG5lZWQgdG8KKyAqIGdyYWIgdGhlIGRhdGEgZm9yIHRoZSBibG9iIChvciBmaWxlKSBmb3Igb3VyIG93biBpbi1jb3JlIGNvbXBhcmlzb24uCisgKiBkaWZmX2ZpbGVzcGVjIGhhcyBkYXRhIGFuZCBzaXplIGZpZWxkcyBmb3IgdGhpcyBwdXJwb3NlLgorICovCitpbnQgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzLAorCQkJICAgY29uc3Qgc3RydWN0IGRpZmZfcG9wdWxhdGVfZmlsZXNwZWNfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgc2l6ZV9vbmx5ID0gb3B0aW9ucyA/IG9wdGlvbnMtPmNoZWNrX3NpemVfb25seSA6IDA7CisJaW50IGNoZWNrX2JpbmFyeSA9IG9wdGlvbnMgPyBvcHRpb25zLT5jaGVja19iaW5hcnkgOiAwOworCWludCBlcnIgPSAwOworCWludCBjb252X2ZsYWdzID0gZ2xvYmFsX2NvbnZfZmxhZ3NfZW9sOworCS8qCisJICogZGVtb3RlIEZBSUwgdG8gV0FSTiB0byBhbGxvdyBpbnNwZWN0aW5nIHRoZSBzaXR1YXRpb24KKwkgKiBpbnN0ZWFkIG9mIHJlZnVzaW5nLgorCSAqLworCWlmIChjb252X2ZsYWdzICYgQ09OVl9FT0xfUk5EVFJQX0RJRSkKKwkJY29udl9mbGFncyA9IENPTlZfRU9MX1JORFRSUF9XQVJOOworCisJaWYgKCFESUZGX0ZJTEVfVkFMSUQocykpCisJCWRpZSgiaW50ZXJuYWwgZXJyb3I6IGFza2luZyB0byBwb3B1bGF0ZSBpbnZhbGlkIGZpbGUuIik7CisJaWYgKFNfSVNESVIocy0+bW9kZSkpCisJCXJldHVybiAtMTsKKworCWlmIChzLT5kYXRhKQorCQlyZXR1cm4gMDsKKworCWlmIChzaXplX29ubHkgJiYgMCA8IHMtPnNpemUpCisJCXJldHVybiAwOworCisJaWYgKFNfSVNHSVRMSU5LKHMtPm1vZGUpKQorCQlyZXR1cm4gZGlmZl9wb3B1bGF0ZV9naXRsaW5rKHMsIHNpemVfb25seSk7CisKKwlpZiAoIXMtPm9pZF92YWxpZCB8fAorCSAgICByZXVzZV93b3JrdHJlZV9maWxlKHItPmluZGV4LCBzLT5wYXRoLCAmcy0+b2lkLCAwKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaW50IGZkOworCisJCWlmIChsc3RhdChzLT5wYXRoLCAmc3QpIDwgMCkgeworCQllcnJfZW1wdHk6CisJCQllcnIgPSAtMTsKKwkJZW1wdHk6CisJCQlzLT5kYXRhID0gKGNoYXIgKikiIjsKKwkJCXMtPnNpemUgPSAwOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlzLT5zaXplID0geHNpemVfdChzdC5zdF9zaXplKTsKKwkJaWYgKCFzLT5zaXplKQorCQkJZ290byBlbXB0eTsKKwkJaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpIHsKKwkJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCQkJaWYgKHN0cmJ1Zl9yZWFkbGluaygmc2IsIHMtPnBhdGgsIHMtPnNpemUpKQorCQkJCWdvdG8gZXJyX2VtcHR5OworCQkJcy0+c2l6ZSA9IHNiLmxlbjsKKwkJCXMtPmRhdGEgPSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7CisJCQlzLT5zaG91bGRfZnJlZSA9IDE7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qCisJCSAqIEV2ZW4gaWYgdGhlIGNhbGxlciB3b3VsZCBiZSBoYXBweSB3aXRoIGdldHRpbmcKKwkJICogb25seSB0aGUgc2l6ZSwgd2UgY2Fubm90IHJldHVybiBlYXJseSBhdCB0aGlzCisJCSAqIHBvaW50IGlmIHRoZSBwYXRoIHJlcXVpcmVzIHVzIHRvIHJ1biB0aGUgY29udGVudAorCQkgKiBjb252ZXJzaW9uLgorCQkgKi8KKwkJaWYgKHNpemVfb25seSAmJiAhd291bGRfY29udmVydF90b19naXQoci0+aW5kZXgsIHMtPnBhdGgpKQorCQkJcmV0dXJuIDA7CisKKwkJLyoKKwkJICogTm90ZTogdGhpcyBjaGVjayB1c2VzIHhzaXplX3Qoc3Quc3Rfc2l6ZSkgdGhhdCBtYXkKKwkJICogbm90IGJlIHRoZSB0cnVlIHNpemUgb2YgdGhlIGJsb2IgYWZ0ZXIgaXQgZ29lcworCQkgKiB0aHJvdWdoIGNvbnZlcnRfdG9fZ2l0KCkuICBUaGlzIG1heSBub3Qgc3RyaWN0bHkgYmUKKwkJICogY29ycmVjdCwgYnV0IHRoZSB3aG9sZSBwb2ludCBvZiBiaWdfZmlsZV90aHJlc2hvbGQKKwkJICogYW5kIGlzX2JpbmFyeSBjaGVjayBiZWluZyB0aGF0IHdlIHdhbnQgdG8gYXZvaWQKKwkJICogb3BlbmluZyB0aGUgZmlsZSBhbmQgaW5zcGVjdGluZyB0aGUgY29udGVudHMsIHRoaXMKKwkJICogaXMgcHJvYmFibHkgZmluZS4KKwkJICovCisJCWlmIChjaGVja19iaW5hcnkgJiYKKwkJICAgIHMtPnNpemUgPiBiaWdfZmlsZV90aHJlc2hvbGQgJiYgcy0+aXNfYmluYXJ5ID09IC0xKSB7CisJCQlzLT5pc19iaW5hcnkgPSAxOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZmQgPSBvcGVuKHMtPnBhdGgsIE9fUkRPTkxZKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWdvdG8gZXJyX2VtcHR5OworCQlzLT5kYXRhID0geG1tYXAoTlVMTCwgcy0+c2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCQljbG9zZShmZCk7CisJCXMtPnNob3VsZF9tdW5tYXAgPSAxOworCisJCS8qCisJCSAqIENvbnZlcnQgZnJvbSB3b3JraW5nIHRyZWUgZm9ybWF0IHRvIGNhbm9uaWNhbCBnaXQgZm9ybWF0CisJCSAqLworCQlpZiAoY29udmVydF90b19naXQoci0+aW5kZXgsIHMtPnBhdGgsIHMtPmRhdGEsIHMtPnNpemUsICZidWYsIGNvbnZfZmxhZ3MpKSB7CisJCQlzaXplX3Qgc2l6ZSA9IDA7CisJCQltdW5tYXAocy0+ZGF0YSwgcy0+c2l6ZSk7CisJCQlzLT5zaG91bGRfbXVubWFwID0gMDsKKwkJCXMtPmRhdGEgPSBzdHJidWZfZGV0YWNoKCZidWYsICZzaXplKTsKKwkJCXMtPnNpemUgPSBzaXplOworCQkJcy0+c2hvdWxkX2ZyZWUgPSAxOworCQl9CisJfQorCWVsc2UgeworCQlzdHJ1Y3Qgb2JqZWN0X2luZm8gaW5mbyA9IHsKKwkJCS5zaXplcCA9ICZzLT5zaXplCisJCX07CisKKwkJaWYgKCEoc2l6ZV9vbmx5IHx8IGNoZWNrX2JpbmFyeSkpCisJCQkvKgorCQkJICogU2V0IGNvbnRlbnRwLCBzaW5jZSB0aGVyZSBpcyBubyBjaGFuY2UgdGhhdCBtZXJlbHkKKwkJCSAqIHRoZSBzaXplIGlzIHN1ZmZpY2llbnQuCisJCQkgKi8KKwkJCWluZm8uY29udGVudHAgPSAmcy0+ZGF0YTsKKworCQlpZiAob3B0aW9ucyAmJiBvcHRpb25zLT5taXNzaW5nX29iamVjdF9jYikgeworCQkJaWYgKCFvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQociwgJnMtPm9pZCwgJmluZm8sCisJCQkJCQkgICAgICBPQkpFQ1RfSU5GT19MT09LVVBfUkVQTEFDRSB8CisJCQkJCQkgICAgICBPQkpFQ1RfSU5GT19TS0lQX0ZFVENIX09CSkVDVCkpCisJCQkJZ290byBvYmplY3RfcmVhZDsKKwkJCW9wdGlvbnMtPm1pc3Npbmdfb2JqZWN0X2NiKG9wdGlvbnMtPm1pc3Npbmdfb2JqZWN0X2RhdGEpOworCQl9CisJCWlmIChvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQociwgJnMtPm9pZCwgJmluZm8sCisJCQkJCSAgICAgT0JKRUNUX0lORk9fTE9PS1VQX1JFUExBQ0UpKQorCQkJZGllKCJ1bmFibGUgdG8gcmVhZCAlcyIsIG9pZF90b19oZXgoJnMtPm9pZCkpOworCitvYmplY3RfcmVhZDoKKwkJaWYgKHNpemVfb25seSB8fCBjaGVja19iaW5hcnkpIHsKKwkJCWlmIChzaXplX29ubHkpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAocy0+c2l6ZSA+IGJpZ19maWxlX3RocmVzaG9sZCAmJiBzLT5pc19iaW5hcnkgPT0gLTEpIHsKKwkJCQlzLT5pc19iaW5hcnkgPSAxOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJCWlmICghaW5mby5jb250ZW50cCkgeworCQkJaW5mby5jb250ZW50cCA9ICZzLT5kYXRhOworCQkJaWYgKG9pZF9vYmplY3RfaW5mb19leHRlbmRlZChyLCAmcy0+b2lkLCAmaW5mbywKKwkJCQkJCSAgICAgT0JKRUNUX0lORk9fTE9PS1VQX1JFUExBQ0UpKQorCQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgJXMiLCBvaWRfdG9faGV4KCZzLT5vaWQpKTsKKwkJfQorCQlzLT5zaG91bGRfZnJlZSA9IDE7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIGRpZmZfZnJlZV9maWxlc3BlY19ibG9iKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzKQoreworCWlmIChzLT5zaG91bGRfZnJlZSkKKwkJZnJlZShzLT5kYXRhKTsKKwllbHNlIGlmIChzLT5zaG91bGRfbXVubWFwKQorCQltdW5tYXAocy0+ZGF0YSwgcy0+c2l6ZSk7CisKKwlpZiAocy0+c2hvdWxkX2ZyZWUgfHwgcy0+c2hvdWxkX211bm1hcCkgeworCQlzLT5zaG91bGRfZnJlZSA9IHMtPnNob3VsZF9tdW5tYXAgPSAwOworCQlzLT5kYXRhID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnMpCit7CisJZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2Iocyk7CisJRlJFRV9BTkRfTlVMTChzLT5jbnRfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBfdGVtcF9ibG9iKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGRpZmZfdGVtcGZpbGUgKnRlbXAsCisJCQkgICB2b2lkICpibG9iLAorCQkJICAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgaW50IG1vZGUpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHRlbXBmaWxlID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcGF0aF9kdXAgPSB4c3RyZHVwKHBhdGgpOworCWNvbnN0IGNoYXIgKmJhc2UgPSBiYXNlbmFtZShwYXRoX2R1cCk7CisJc3RydWN0IGNoZWNrb3V0X21ldGFkYXRhIG1ldGE7CisKKwlpbml0X2NoZWNrb3V0X21ldGFkYXRhKCZtZXRhLCBOVUxMLCBOVUxMLCBvaWQpOworCisJLyogR2VuZXJhdGUgIlhYWFhYWF9iYXNlbmFtZS5leHQiICovCisJc3RyYnVmX2FkZHN0cigmdGVtcGZpbGUsICJYWFhYWFhfIik7CisJc3RyYnVmX2FkZHN0cigmdGVtcGZpbGUsIGJhc2UpOworCisJdGVtcC0+dGVtcGZpbGUgPSBta3NfdGVtcGZpbGVfdHModGVtcGZpbGUuYnVmLCBzdHJsZW4oYmFzZSkgKyAxKTsKKwlpZiAoIXRlbXAtPnRlbXBmaWxlKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBjcmVhdGUgdGVtcC1maWxlIik7CisJaWYgKGNvbnZlcnRfdG9fd29ya2luZ190cmVlKGlzdGF0ZSwgcGF0aCwKKwkJCShjb25zdCBjaGFyICopYmxvYiwgKHNpemVfdClzaXplLCAmYnVmLCAmbWV0YSkpIHsKKwkJYmxvYiA9IGJ1Zi5idWY7CisJCXNpemUgPSBidWYubGVuOworCX0KKwlpZiAod3JpdGVfaW5fZnVsbCh0ZW1wLT50ZW1wZmlsZS0+ZmQsIGJsb2IsIHNpemUpIDwgMCB8fAorCSAgICBjbG9zZV90ZW1wZmlsZV9nZW50bHkodGVtcC0+dGVtcGZpbGUpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSB0ZW1wLWZpbGUiKTsKKwl0ZW1wLT5uYW1lID0gZ2V0X3RlbXBmaWxlX3BhdGgodGVtcC0+dGVtcGZpbGUpOworCW9pZF90b19oZXhfcih0ZW1wLT5oZXgsIG9pZCk7CisJeHNucHJpbnRmKHRlbXAtPm1vZGUsIHNpemVvZih0ZW1wLT5tb2RlKSwgIiUwNm8iLCBtb2RlKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmdGVtcGZpbGUpOworCWZyZWUocGF0aF9kdXApOworfQorCitzdGF0aWMgc3RydWN0IGRpZmZfdGVtcGZpbGUgKnByZXBhcmVfdGVtcF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJICAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpCit7CisJc3RydWN0IGRpZmZfdGVtcGZpbGUgKnRlbXAgPSBjbGFpbV9kaWZmX3RlbXBmaWxlKCk7CisKKwlpZiAoIURJRkZfRklMRV9WQUxJRChvbmUpKSB7CisJbm90X2FfdmFsaWRfZmlsZToKKwkJLyogQSAnLScgZW50cnkgcHJvZHVjZXMgdGhpcyBmb3IgZmlsZS0yLCBhbmQKKwkJICogYSAnKycgZW50cnkgcHJvZHVjZXMgdGhpcyBmb3IgZmlsZS0xLgorCQkgKi8KKwkJdGVtcC0+bmFtZSA9ICIvZGV2L251bGwiOworCQl4c25wcmludGYodGVtcC0+aGV4LCBzaXplb2YodGVtcC0+aGV4KSwgIi4iKTsKKwkJeHNucHJpbnRmKHRlbXAtPm1vZGUsIHNpemVvZih0ZW1wLT5tb2RlKSwgIi4iKTsKKwkJcmV0dXJuIHRlbXA7CisJfQorCisJaWYgKCFTX0lTR0lUTElOSyhvbmUtPm1vZGUpICYmCisJICAgICghb25lLT5vaWRfdmFsaWQgfHwKKwkgICAgIHJldXNlX3dvcmt0cmVlX2ZpbGUoci0+aW5kZXgsIG5hbWUsICZvbmUtPm9pZCwgMSkpKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQlpZiAobHN0YXQobmFtZSwgJnN0KSA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQkJZ290byBub3RfYV92YWxpZF9maWxlOworCQkJZGllX2Vycm5vKCJzdGF0KCVzKSIsIG5hbWUpOworCQl9CisJCWlmIChTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZzYiwgbmFtZSwgc3Quc3Rfc2l6ZSkgPCAwKQorCQkJCWRpZV9lcnJubygicmVhZGxpbmsoJXMpIiwgbmFtZSk7CisJCQlwcmVwX3RlbXBfYmxvYihyLT5pbmRleCwgbmFtZSwgdGVtcCwgc2IuYnVmLCBzYi5sZW4sCisJCQkJICAgICAgIChvbmUtPm9pZF92YWxpZCA/CisJCQkJCSZvbmUtPm9pZCA6ICZudWxsX29pZCksCisJCQkJICAgICAgIChvbmUtPm9pZF92YWxpZCA/CisJCQkJCW9uZS0+bW9kZSA6IFNfSUZMTkspKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCX0KKwkJZWxzZSB7CisJCQkvKiB3ZSBjYW4gYm9ycm93IGZyb20gdGhlIGZpbGUgaW4gdGhlIHdvcmsgdHJlZSAqLworCQkJdGVtcC0+bmFtZSA9IG5hbWU7CisJCQlpZiAoIW9uZS0+b2lkX3ZhbGlkKQorCQkJCW9pZF90b19oZXhfcih0ZW1wLT5oZXgsICZudWxsX29pZCk7CisJCQllbHNlCisJCQkJb2lkX3RvX2hleF9yKHRlbXAtPmhleCwgJm9uZS0+b2lkKTsKKwkJCS8qIEV2ZW4gdGhvdWdoIHdlIG1heSBzb21ldGltZXMgYm9ycm93IHRoZQorCQkJICogY29udGVudHMgZnJvbSB0aGUgd29yayB0cmVlLCB3ZSBhbHdheXMgd2FudAorCQkJICogb25lLT5tb2RlLiAgbW9kZSBpcyB0cnVzdHdvcnRoeSBldmVuIHdoZW4KKwkJCSAqICEob25lLT5vaWRfdmFsaWQpLCBhcyBsb25nIGFzCisJCQkgKiBESUZGX0ZJTEVfVkFMSUQob25lKS4KKwkJCSAqLworCQkJeHNucHJpbnRmKHRlbXAtPm1vZGUsIHNpemVvZih0ZW1wLT5tb2RlKSwgIiUwNm8iLCBvbmUtPm1vZGUpOworCQl9CisJCXJldHVybiB0ZW1wOworCX0KKwllbHNlIHsKKwkJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMociwgb25lLCBOVUxMKSkKKwkJCWRpZSgiY2Fubm90IHJlYWQgZGF0YSBibG9iIGZvciAlcyIsIG9uZS0+cGF0aCk7CisJCXByZXBfdGVtcF9ibG9iKHItPmluZGV4LCBuYW1lLCB0ZW1wLAorCQkJICAgICAgIG9uZS0+ZGF0YSwgb25lLT5zaXplLAorCQkJICAgICAgICZvbmUtPm9pZCwgb25lLT5tb2RlKTsKKwl9CisJcmV0dXJuIHRlbXA7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9leHRlcm5hbF9kaWZmX25hbWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgc3RydWN0IGFyZ3ZfYXJyYXkgKmFyZ3YsCisJCQkJICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGYpCit7CisJc3RydWN0IGRpZmZfdGVtcGZpbGUgKnRlbXAgPSBwcmVwYXJlX3RlbXBfZmlsZShyLCBuYW1lLCBkZik7CisJYXJndl9hcnJheV9wdXNoKGFyZ3YsIHRlbXAtPm5hbWUpOworCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCB0ZW1wLT5oZXgpOworCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCB0ZW1wLT5tb2RlKTsKK30KKworLyogQW4gZXh0ZXJuYWwgZGlmZiBjb21tYW5kIHRha2VzOgorICoKKyAqIGRpZmYtY21kIG5hbWUgaW5maWxlMSBpbmZpbGUxLXNoYTEgaW5maWxlMS1tb2RlIFwKKyAqICAgICAgICAgICAgICAgaW5maWxlMiBpbmZpbGUyLXNoYTEgaW5maWxlMi1tb2RlIFsgcmVuYW1lLXRvIF0KKyAqCisgKi8KK3N0YXRpYyB2b2lkIHJ1bl9leHRlcm5hbF9kaWZmKGNvbnN0IGNoYXIgKnBnbSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpvdGhlciwKKwkJCSAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkgICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvLAorCQkJICAgICAgY29uc3QgY2hhciAqeGZybV9tc2csCisJCQkgICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvKQoreworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisJc3RydWN0IGFyZ3ZfYXJyYXkgZW52ID0gQVJHVl9BUlJBWV9JTklUOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCisJYXJndl9hcnJheV9wdXNoKCZhcmd2LCBwZ20pOworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgbmFtZSk7CisKKwlpZiAob25lICYmIHR3bykgeworCQlhZGRfZXh0ZXJuYWxfZGlmZl9uYW1lKG8tPnJlcG8sICZhcmd2LCBuYW1lLCBvbmUpOworCQlpZiAoIW90aGVyKQorCQkJYWRkX2V4dGVybmFsX2RpZmZfbmFtZShvLT5yZXBvLCAmYXJndiwgbmFtZSwgdHdvKTsKKwkJZWxzZSB7CisJCQlhZGRfZXh0ZXJuYWxfZGlmZl9uYW1lKG8tPnJlcG8sICZhcmd2LCBvdGhlciwgdHdvKTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgb3RoZXIpOworCQkJYXJndl9hcnJheV9wdXNoKCZhcmd2LCB4ZnJtX21zZyk7CisJCX0KKwl9CisKKwlhcmd2X2FycmF5X3B1c2hmKCZlbnYsICJHSVRfRElGRl9QQVRIX0NPVU5URVI9JWQiLCArK28tPmRpZmZfcGF0aF9jb3VudGVyKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZlbnYsICJHSVRfRElGRl9QQVRIX1RPVEFMPSVkIiwgcS0+bnIpOworCisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEob25lKTsKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YSh0d28pOworCWlmIChydW5fY29tbWFuZF92X29wdF9jZF9lbnYoYXJndi5hcmd2LCBSVU5fVVNJTkdfU0hFTEwsIE5VTEwsIGVudi5hcmd2KSkKKwkJZGllKF8oImV4dGVybmFsIGRpZmYgZGllZCwgc3RvcHBpbmcgYXQgJXMiKSwgbmFtZSk7CisKKwlyZW1vdmVfdGVtcGZpbGUoKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmd2KTsKKwlhcmd2X2FycmF5X2NsZWFyKCZlbnYpOworfQorCitzdGF0aWMgaW50IHNpbWlsYXJpdHlfaW5kZXgoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnApCit7CisJcmV0dXJuIHAtPnNjb3JlICogMTAwIC8gTUFYX1NDT1JFOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZGlmZl9hYmJyZXZfb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGFiYnJldikKK3sKKwlpZiAoc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpCisJCXJldHVybiBmaW5kX3VuaXF1ZV9hYmJyZXYob2lkLCBhYmJyZXYpOworCWVsc2UgeworCQljaGFyICpoZXggPSBvaWRfdG9faGV4KG9pZCk7CisJCWlmIChhYmJyZXYgPCAwKQorCQkJYWJicmV2ID0gRkFMTEJBQ0tfREVGQVVMVF9BQkJSRVY7CisJCWlmIChhYmJyZXYgPiB0aGVfaGFzaF9hbGdvLT5oZXhzeikKKwkJCUJVRygib2lkIGFiYnJldmlhdGlvbiBvdXQgb2YgcmFuZ2U6ICVkIiwgYWJicmV2KTsKKwkJaWYgKGFiYnJldikKKwkJCWhleFthYmJyZXZdID0gJ1wwJzsKKwkJcmV0dXJuIGhleDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfbWV0YWluZm8oc3RydWN0IHN0cmJ1ZiAqbXNnLAorCQkJICBjb25zdCBjaGFyICpuYW1lLAorCQkJICBjb25zdCBjaGFyICpvdGhlciwKKwkJCSAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwKKwkJCSAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bywKKwkJCSAgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCSAgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsCisJCQkgIGludCAqbXVzdF9zaG93X2hlYWRlciwKKwkJCSAgaW50IHVzZV9jb2xvcikKK3sKKwljb25zdCBjaGFyICpzZXQgPSBkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfTUVUQUlORk8pOworCWNvbnN0IGNoYXIgKnJlc2V0ID0gZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX1JFU0VUKTsKKwljb25zdCBjaGFyICpsaW5lX3ByZWZpeCA9IGRpZmZfbGluZV9wcmVmaXgobyk7CisKKwkqbXVzdF9zaG93X2hlYWRlciA9IDE7CisJc3RyYnVmX2luaXQobXNnLCBQQVRIX01BWCAqIDIgKyAzMDApOworCXN3aXRjaCAocC0+c3RhdHVzKSB7CisJY2FzZSBESUZGX1NUQVRVU19DT1BJRUQ6CisJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzJXNzaW1pbGFyaXR5IGluZGV4ICVkJSUiLAorCQkJICAgIGxpbmVfcHJlZml4LCBzZXQsIHNpbWlsYXJpdHlfaW5kZXgocCkpOworCQlzdHJidWZfYWRkZihtc2csICIlc1xuJXMlc2NvcHkgZnJvbSAiLAorCQkJICAgIHJlc2V0LCAgbGluZV9wcmVmaXgsIHNldCk7CisJCXF1b3RlX2Nfc3R5bGUobmFtZSwgbXNnLCBOVUxMLCAwKTsKKwkJc3RyYnVmX2FkZGYobXNnLCAiJXNcbiVzJXNjb3B5IHRvICIsIHJlc2V0LCBsaW5lX3ByZWZpeCwgc2V0KTsKKwkJcXVvdGVfY19zdHlsZShvdGhlciwgbXNnLCBOVUxMLCAwKTsKKwkJc3RyYnVmX2FkZGYobXNnLCAiJXNcbiIsIHJlc2V0KTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NUQVRVU19SRU5BTUVEOgorCQlzdHJidWZfYWRkZihtc2csICIlcyVzc2ltaWxhcml0eSBpbmRleCAlZCUlIiwKKwkJCSAgICBsaW5lX3ByZWZpeCwgc2V0LCBzaW1pbGFyaXR5X2luZGV4KHApKTsKKwkJc3RyYnVmX2FkZGYobXNnLCAiJXNcbiVzJXNyZW5hbWUgZnJvbSAiLAorCQkJICAgIHJlc2V0LCBsaW5lX3ByZWZpeCwgc2V0KTsKKwkJcXVvdGVfY19zdHlsZShuYW1lLCBtc2csIE5VTEwsIDApOworCQlzdHJidWZfYWRkZihtc2csICIlc1xuJXMlc3JlbmFtZSB0byAiLAorCQkJICAgIHJlc2V0LCBsaW5lX3ByZWZpeCwgc2V0KTsKKwkJcXVvdGVfY19zdHlsZShvdGhlciwgbXNnLCBOVUxMLCAwKTsKKwkJc3RyYnVmX2FkZGYobXNnLCAiJXNcbiIsIHJlc2V0KTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NUQVRVU19NT0RJRklFRDoKKwkJaWYgKHAtPnNjb3JlKSB7CisJCQlzdHJidWZfYWRkZihtc2csICIlcyVzZGlzc2ltaWxhcml0eSBpbmRleCAlZCUlJXNcbiIsCisJCQkJICAgIGxpbmVfcHJlZml4LAorCQkJCSAgICBzZXQsIHNpbWlsYXJpdHlfaW5kZXgocCksIHJlc2V0KTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGZhbGx0aHJ1ICovCisJZGVmYXVsdDoKKwkJKm11c3Rfc2hvd19oZWFkZXIgPSAwOworCX0KKwlpZiAob25lICYmIHR3byAmJiAhb2lkZXEoJm9uZS0+b2lkLCAmdHdvLT5vaWQpKSB7CisJCWNvbnN0IHVuc2lnbmVkIGhleHN6ID0gdGhlX2hhc2hfYWxnby0+aGV4c3o7CisJCWludCBhYmJyZXYgPSBvLT5mbGFncy5mdWxsX2luZGV4ID8gaGV4c3ogOiBERUZBVUxUX0FCQlJFVjsKKworCQlpZiAoby0+ZmxhZ3MuYmluYXJ5KSB7CisJCQltbWZpbGVfdCBtZjsKKwkJCWlmICgoIWZpbGxfbW1maWxlKG8tPnJlcG8sICZtZiwgb25lKSAmJgorCQkJICAgICBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShvLT5yZXBvLCBvbmUpKSB8fAorCQkJICAgICghZmlsbF9tbWZpbGUoby0+cmVwbywgJm1mLCB0d28pICYmCisJCQkgICAgIGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KG8tPnJlcG8sIHR3bykpKQorCQkJCWFiYnJldiA9IGhleHN6OworCQl9CisJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzJXNpbmRleCAlcy4uJXMiLCBsaW5lX3ByZWZpeCwgc2V0LAorCQkJICAgIGRpZmZfYWJicmV2X29pZCgmb25lLT5vaWQsIGFiYnJldiksCisJCQkgICAgZGlmZl9hYmJyZXZfb2lkKCZ0d28tPm9pZCwgYWJicmV2KSk7CisJCWlmIChvbmUtPm1vZGUgPT0gdHdvLT5tb2RlKQorCQkJc3RyYnVmX2FkZGYobXNnLCAiICUwNm8iLCBvbmUtPm1vZGUpOworCQlzdHJidWZfYWRkZihtc2csICIlc1xuIiwgcmVzZXQpOworCX0KK30KKworc3RhdGljIHZvaWQgcnVuX2RpZmZfY21kKGNvbnN0IGNoYXIgKnBnbSwKKwkJCSBjb25zdCBjaGFyICpuYW1lLAorCQkJIGNvbnN0IGNoYXIgKm90aGVyLAorCQkJIGNvbnN0IGNoYXIgKmF0dHJfcGF0aCwKKwkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkJIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28sCisJCQkgc3RydWN0IHN0cmJ1ZiAqbXNnLAorCQkJIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnApCit7CisJY29uc3QgY2hhciAqeGZybV9tc2cgPSBOVUxMOworCWludCBjb21wbGV0ZV9yZXdyaXRlID0gKHAtPnN0YXR1cyA9PSBESUZGX1NUQVRVU19NT0RJRklFRCkgJiYgcC0+c2NvcmU7CisJaW50IG11c3Rfc2hvd19oZWFkZXIgPSAwOworCisKKwlpZiAoby0+ZmxhZ3MuYWxsb3dfZXh0ZXJuYWwpIHsKKwkJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJ2OworCisJCWRydiA9IHVzZXJkaWZmX2ZpbmRfYnlfcGF0aChvLT5yZXBvLT5pbmRleCwgYXR0cl9wYXRoKTsKKwkJaWYgKGRydiAmJiBkcnYtPmV4dGVybmFsKQorCQkJcGdtID0gZHJ2LT5leHRlcm5hbDsKKwl9CisKKwlpZiAobXNnKSB7CisJCS8qCisJCSAqIGRvbid0IHVzZSBjb2xvcnMgd2hlbiB0aGUgaGVhZGVyIGlzIGludGVuZGVkIGZvciBhbgorCQkgKiBleHRlcm5hbCBkaWZmIGRyaXZlcgorCQkgKi8KKwkJZmlsbF9tZXRhaW5mbyhtc2csIG5hbWUsIG90aGVyLCBvbmUsIHR3bywgbywgcCwKKwkJCSAgICAgICZtdXN0X3Nob3dfaGVhZGVyLAorCQkJICAgICAgd2FudF9jb2xvcihvLT51c2VfY29sb3IpICYmICFwZ20pOworCQl4ZnJtX21zZyA9IG1zZy0+bGVuID8gbXNnLT5idWYgOiBOVUxMOworCX0KKworCWlmIChwZ20pIHsKKwkJcnVuX2V4dGVybmFsX2RpZmYocGdtLCBuYW1lLCBvdGhlciwgb25lLCB0d28sIHhmcm1fbXNnLCBvKTsKKwkJcmV0dXJuOworCX0KKwlpZiAob25lICYmIHR3bykKKwkJYnVpbHRpbl9kaWZmKG5hbWUsIG90aGVyID8gb3RoZXIgOiBuYW1lLAorCQkJICAgICBvbmUsIHR3bywgeGZybV9tc2csIG11c3Rfc2hvd19oZWFkZXIsCisJCQkgICAgIG8sIGNvbXBsZXRlX3Jld3JpdGUpOworCWVsc2UKKwkJZnByaW50ZihvLT5maWxlLCAiKiBVbm1lcmdlZCBwYXRoICVzXG4iLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgZGlmZl9maWxsX29pZF9pbmZvKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWlmIChESUZGX0ZJTEVfVkFMSUQob25lKSkgeworCQlpZiAoIW9uZS0+b2lkX3ZhbGlkKSB7CisJCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJCWlmIChvbmUtPmlzX3N0ZGluKSB7CisJCQkJb2lkY2xyKCZvbmUtPm9pZCk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaWYgKGxzdGF0KG9uZS0+cGF0aCwgJnN0KSA8IDApCisJCQkJZGllX2Vycm5vKCJzdGF0ICclcyciLCBvbmUtPnBhdGgpOworCQkJaWYgKGluZGV4X3BhdGgoaXN0YXRlLCAmb25lLT5vaWQsIG9uZS0+cGF0aCwgJnN0LCAwKSkKKwkJCQlkaWUoImNhbm5vdCBoYXNoICVzIiwgb25lLT5wYXRoKTsKKwkJfQorCX0KKwllbHNlCisJCW9pZGNscigmb25lLT5vaWQpOworfQorCitzdGF0aWMgdm9pZCBzdHJpcF9wcmVmaXgoaW50IHByZWZpeF9sZW5ndGgsIGNvbnN0IGNoYXIgKipuYW1lcCwgY29uc3QgY2hhciAqKm90aGVycCkKK3sKKwkvKiBTdHJpcCB0aGUgcHJlZml4IGJ1dCBkbyBub3QgbW9sZXN0IC9kZXYvbnVsbCBhbmQgYWJzb2x1dGUgcGF0aHMgKi8KKwlpZiAoKm5hbWVwICYmICFpc19hYnNvbHV0ZV9wYXRoKCpuYW1lcCkpIHsKKwkJKm5hbWVwICs9IHByZWZpeF9sZW5ndGg7CisJCWlmICgqKm5hbWVwID09ICcvJykKKwkJCSsrKm5hbWVwOworCX0KKwlpZiAoKm90aGVycCAmJiAhaXNfYWJzb2x1dGVfcGF0aCgqb3RoZXJwKSkgeworCQkqb3RoZXJwICs9IHByZWZpeF9sZW5ndGg7CisJCWlmICgqKm90aGVycCA9PSAnLycpCisJCQkrKypvdGhlcnA7CisJfQorfQorCitzdGF0aWMgdm9pZCBydW5fZGlmZihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwgc3RydWN0IGRpZmZfb3B0aW9ucyAqbykKK3sKKwljb25zdCBjaGFyICpwZ20gPSBleHRlcm5hbF9kaWZmKCk7CisJc3RydWN0IHN0cmJ1ZiBtc2c7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSA9IHAtPm9uZTsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvID0gcC0+dHdvOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqb3RoZXI7CisJY29uc3QgY2hhciAqYXR0cl9wYXRoOworCisJbmFtZSAgPSBvbmUtPnBhdGg7CisJb3RoZXIgPSAoc3RyY21wKG5hbWUsIHR3by0+cGF0aCkgPyB0d28tPnBhdGggOiBOVUxMKTsKKwlhdHRyX3BhdGggPSBuYW1lOworCWlmIChvLT5wcmVmaXhfbGVuZ3RoKQorCQlzdHJpcF9wcmVmaXgoby0+cHJlZml4X2xlbmd0aCwgJm5hbWUsICZvdGhlcik7CisKKwlpZiAoIW8tPmZsYWdzLmFsbG93X2V4dGVybmFsKQorCQlwZ20gPSBOVUxMOworCisJaWYgKERJRkZfUEFJUl9VTk1FUkdFRChwKSkgeworCQlydW5fZGlmZl9jbWQocGdtLCBuYW1lLCBOVUxMLCBhdHRyX3BhdGgsCisJCQkgICAgIE5VTEwsIE5VTEwsIE5VTEwsIG8sIHApOworCQlyZXR1cm47CisJfQorCisJZGlmZl9maWxsX29pZF9pbmZvKG9uZSwgby0+cmVwby0+aW5kZXgpOworCWRpZmZfZmlsbF9vaWRfaW5mbyh0d28sIG8tPnJlcG8tPmluZGV4KTsKKworCWlmICghcGdtICYmCisJICAgIERJRkZfRklMRV9WQUxJRChvbmUpICYmIERJRkZfRklMRV9WQUxJRCh0d28pICYmCisJICAgIChTX0lGTVQgJiBvbmUtPm1vZGUpICE9IChTX0lGTVQgJiB0d28tPm1vZGUpKSB7CisJCS8qCisJCSAqIGEgZmlsZXBhaXIgdGhhdCBjaGFuZ2VzIGJldHdlZW4gZmlsZSBhbmQgc3ltbGluaworCQkgKiBuZWVkcyB0byBiZSBzcGxpdCBpbnRvIGRlbGV0aW9uIGFuZCBjcmVhdGlvbi4KKwkJICovCisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpudWxsID0gYWxsb2NfZmlsZXNwZWModHdvLT5wYXRoKTsKKwkJcnVuX2RpZmZfY21kKE5VTEwsIG5hbWUsIG90aGVyLCBhdHRyX3BhdGgsCisJCQkgICAgIG9uZSwgbnVsbCwgJm1zZywKKwkJCSAgICAgbywgcCk7CisJCWZyZWUobnVsbCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworCisJCW51bGwgPSBhbGxvY19maWxlc3BlYyhvbmUtPnBhdGgpOworCQlydW5fZGlmZl9jbWQoTlVMTCwgbmFtZSwgb3RoZXIsIGF0dHJfcGF0aCwKKwkJCSAgICAgbnVsbCwgdHdvLCAmbXNnLCBvLCBwKTsKKwkJZnJlZShudWxsKTsKKwl9CisJZWxzZQorCQlydW5fZGlmZl9jbWQocGdtLCBuYW1lLCBvdGhlciwgYXR0cl9wYXRoLAorCQkJICAgICBvbmUsIHR3bywgJm1zZywgbywgcCk7CisKKwlzdHJidWZfcmVsZWFzZSgmbXNnKTsKK30KKworc3RhdGljIHZvaWQgcnVuX2RpZmZzdGF0KHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJIHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCkKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm90aGVyOworCisJaWYgKERJRkZfUEFJUl9VTk1FUkdFRChwKSkgeworCQkvKiB1bm1lcmdlZCAqLworCQlidWlsdGluX2RpZmZzdGF0KHAtPm9uZS0+cGF0aCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgZGlmZnN0YXQsIG8sIHApOworCQlyZXR1cm47CisJfQorCisJbmFtZSA9IHAtPm9uZS0+cGF0aDsKKwlvdGhlciA9IChzdHJjbXAobmFtZSwgcC0+dHdvLT5wYXRoKSA/IHAtPnR3by0+cGF0aCA6IE5VTEwpOworCisJaWYgKG8tPnByZWZpeF9sZW5ndGgpCisJCXN0cmlwX3ByZWZpeChvLT5wcmVmaXhfbGVuZ3RoLCAmbmFtZSwgJm90aGVyKTsKKworCWRpZmZfZmlsbF9vaWRfaW5mbyhwLT5vbmUsIG8tPnJlcG8tPmluZGV4KTsKKwlkaWZmX2ZpbGxfb2lkX2luZm8ocC0+dHdvLCBvLT5yZXBvLT5pbmRleCk7CisKKwlidWlsdGluX2RpZmZzdGF0KG5hbWUsIG90aGVyLCBwLT5vbmUsIHAtPnR3bywKKwkJCSBkaWZmc3RhdCwgbywgcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9jaGVja2RpZmYoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8pCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpvdGhlcjsKKwljb25zdCBjaGFyICphdHRyX3BhdGg7CisKKwlpZiAoRElGRl9QQUlSX1VOTUVSR0VEKHApKSB7CisJCS8qIHVubWVyZ2VkICovCisJCXJldHVybjsKKwl9CisKKwluYW1lID0gcC0+b25lLT5wYXRoOworCW90aGVyID0gKHN0cmNtcChuYW1lLCBwLT50d28tPnBhdGgpID8gcC0+dHdvLT5wYXRoIDogTlVMTCk7CisJYXR0cl9wYXRoID0gb3RoZXIgPyBvdGhlciA6IG5hbWU7CisKKwlpZiAoby0+cHJlZml4X2xlbmd0aCkKKwkJc3RyaXBfcHJlZml4KG8tPnByZWZpeF9sZW5ndGgsICZuYW1lLCAmb3RoZXIpOworCisJZGlmZl9maWxsX29pZF9pbmZvKHAtPm9uZSwgby0+cmVwby0+aW5kZXgpOworCWRpZmZfZmlsbF9vaWRfaW5mbyhwLT50d28sIG8tPnJlcG8tPmluZGV4KTsKKworCWJ1aWx0aW5fY2hlY2tkaWZmKG5hbWUsIG90aGVyLCBhdHRyX3BhdGgsIHAtPm9uZSwgcC0+dHdvLCBvKTsKK30KKworc3RhdGljIHZvaWQgcHJlcF9wYXJzZV9vcHRpb25zKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpOworCit2b2lkIHJlcG9fZGlmZl9zZXR1cChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwltZW1jcHkob3B0aW9ucywgJmRlZmF1bHRfZGlmZl9vcHRpb25zLCBzaXplb2YoKm9wdGlvbnMpKTsKKworCW9wdGlvbnMtPmZpbGUgPSBzdGRvdXQ7CisJb3B0aW9ucy0+cmVwbyA9IHI7CisKKwlvcHRpb25zLT5vdXRwdXRfaW5kaWNhdG9yc1tPVVRQVVRfSU5ESUNBVE9SX05FV10gPSAnKyc7CisJb3B0aW9ucy0+b3V0cHV0X2luZGljYXRvcnNbT1VUUFVUX0lORElDQVRPUl9PTERdID0gJy0nOworCW9wdGlvbnMtPm91dHB1dF9pbmRpY2F0b3JzW09VVFBVVF9JTkRJQ0FUT1JfQ09OVEVYVF0gPSAnICc7CisJb3B0aW9ucy0+YWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CisJb3B0aW9ucy0+bGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CisJb3B0aW9ucy0+YnJlYWtfb3B0ID0gLTE7CisJb3B0aW9ucy0+cmVuYW1lX2xpbWl0ID0gLTE7CisJb3B0aW9ucy0+ZGlyc3RhdF9wZXJtaWxsZSA9IGRpZmZfZGlyc3RhdF9wZXJtaWxsZV9kZWZhdWx0OworCW9wdGlvbnMtPmNvbnRleHQgPSBkaWZmX2NvbnRleHRfZGVmYXVsdDsKKwlvcHRpb25zLT5pbnRlcmh1bmtjb250ZXh0ID0gZGlmZl9pbnRlcmh1bmtfY29udGV4dF9kZWZhdWx0OworCW9wdGlvbnMtPndzX2Vycm9yX2hpZ2hsaWdodCA9IHdzX2Vycm9yX2hpZ2hsaWdodF9kZWZhdWx0OworCW9wdGlvbnMtPmZsYWdzLnJlbmFtZV9lbXB0eSA9IDE7CisJb3B0aW9ucy0+b2JqZmluZCA9IE5VTEw7CisKKwkvKiBwYXRoY2hhbmdlIGxlZnQgPU5VTEwgYnkgZGVmYXVsdCAqLworCW9wdGlvbnMtPmNoYW5nZSA9IGRpZmZfY2hhbmdlOworCW9wdGlvbnMtPmFkZF9yZW1vdmUgPSBkaWZmX2FkZHJlbW92ZTsKKwlvcHRpb25zLT51c2VfY29sb3IgPSBkaWZmX3VzZV9jb2xvcl9kZWZhdWx0OworCW9wdGlvbnMtPmRldGVjdF9yZW5hbWUgPSBkaWZmX2RldGVjdF9yZW5hbWVfZGVmYXVsdDsKKwlvcHRpb25zLT54ZGxfb3B0cyB8PSBkaWZmX2FsZ29yaXRobTsKKwlpZiAoZGlmZl9pbmRlbnRfaGV1cmlzdGljKQorCQlESUZGX1hETF9TRVQob3B0aW9ucywgSU5ERU5UX0hFVVJJU1RJQyk7CisKKwlvcHRpb25zLT5vcmRlcmZpbGUgPSBkaWZmX29yZGVyX2ZpbGVfY2ZnOworCisJaWYgKGRpZmZfbm9fcHJlZml4KSB7CisJCW9wdGlvbnMtPmFfcHJlZml4ID0gb3B0aW9ucy0+Yl9wcmVmaXggPSAiIjsKKwl9IGVsc2UgaWYgKCFkaWZmX21uZW1vbmljX3ByZWZpeCkgeworCQlvcHRpb25zLT5hX3ByZWZpeCA9ICJhLyI7CisJCW9wdGlvbnMtPmJfcHJlZml4ID0gImIvIjsKKwl9CisKKwlvcHRpb25zLT5jb2xvcl9tb3ZlZCA9IGRpZmZfY29sb3JfbW92ZWRfZGVmYXVsdDsKKwlvcHRpb25zLT5jb2xvcl9tb3ZlZF93c19oYW5kbGluZyA9IGRpZmZfY29sb3JfbW92ZWRfd3NfZGVmYXVsdDsKKworCXByZXBfcGFyc2Vfb3B0aW9ucyhvcHRpb25zKTsKK30KKwordm9pZCBkaWZmX3NldHVwX2RvbmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwl1bnNpZ25lZCBjaGVja19tYXNrID0gRElGRl9GT1JNQVRfTkFNRSB8CisJCQkgICAgICBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUyB8CisJCQkgICAgICBESUZGX0ZPUk1BVF9DSEVDS0RJRkYgfAorCQkJICAgICAgRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCS8qCisJICogVGhpcyBtdXN0IGJlIHNpZ25lZCBiZWNhdXNlIHdlJ3JlIGNvbXBhcmluZyBhZ2FpbnN0IGEgcG90ZW50aWFsbHkKKwkgKiBuZWdhdGl2ZSB2YWx1ZS4KKwkgKi8KKwljb25zdCBpbnQgaGV4c3ogPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKworCWlmIChvcHRpb25zLT5zZXRfZGVmYXVsdCkKKwkJb3B0aW9ucy0+c2V0X2RlZmF1bHQob3B0aW9ucyk7CisKKwlpZiAoSEFTX01VTFRJX0JJVFMob3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCAmIGNoZWNrX21hc2spKQorCQlkaWUoXygiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKSk7CisKKwlpZiAoSEFTX01VTFRJX0JJVFMob3B0aW9ucy0+cGlja2F4ZV9vcHRzICYgRElGRl9QSUNLQVhFX0tJTkRTX01BU0spKQorCQlkaWUoXygiLUcsIC1TIGFuZCAtLWZpbmQtb2JqZWN0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKSk7CisKKwkvKgorCSAqIE1vc3Qgb2YgdGhlIHRpbWUgd2UgY2FuIHNheSAidGhlcmUgYXJlIGNoYW5nZXMiCisJICogb25seSBieSBjaGVja2luZyBpZiB0aGVyZSBhcmUgY2hhbmdlZCBwYXRocywgYnV0CisJICogLS1pZ25vcmUtd2hpdGVzcGFjZSogb3B0aW9ucyBmb3JjZSB1cyB0byBsb29rCisJICogaW5zaWRlIGNvbnRlbnRzLgorCSAqLworCisJaWYgKChvcHRpb25zLT54ZGxfb3B0cyAmIFhERl9XSElURVNQQUNFX0ZMQUdTKSkKKwkJb3B0aW9ucy0+ZmxhZ3MuZGlmZl9mcm9tX2NvbnRlbnRzID0gMTsKKwllbHNlCisJCW9wdGlvbnMtPmZsYWdzLmRpZmZfZnJvbV9jb250ZW50cyA9IDA7CisKKwlpZiAob3B0aW9ucy0+ZmxhZ3MuZmluZF9jb3BpZXNfaGFyZGVyKQorCQlvcHRpb25zLT5kZXRlY3RfcmVuYW1lID0gRElGRl9ERVRFQ1RfQ09QWTsKKworCWlmICghb3B0aW9ucy0+ZmxhZ3MucmVsYXRpdmVfbmFtZSkKKwkJb3B0aW9ucy0+cHJlZml4ID0gTlVMTDsKKwlpZiAob3B0aW9ucy0+cHJlZml4KQorCQlvcHRpb25zLT5wcmVmaXhfbGVuZ3RoID0gc3RybGVuKG9wdGlvbnMtPnByZWZpeCk7CisJZWxzZQorCQlvcHRpb25zLT5wcmVmaXhfbGVuZ3RoID0gMDsKKworCWlmIChvcHRpb25zLT5vdXRwdXRfZm9ybWF0ICYgKERJRkZfRk9STUFUX05BTUUgfAorCQkJCSAgICAgIERJRkZfRk9STUFUX05BTUVfU1RBVFVTIHwKKwkJCQkgICAgICBESUZGX0ZPUk1BVF9DSEVDS0RJRkYgfAorCQkJCSAgICAgIERJRkZfRk9STUFUX05PX09VVFBVVCkpCisJCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgJj0gfihESUZGX0ZPUk1BVF9SQVcgfAorCQkJCQkgICAgRElGRl9GT1JNQVRfTlVNU1RBVCB8CisJCQkJCSAgICBESUZGX0ZPUk1BVF9ESUZGU1RBVCB8CisJCQkJCSAgICBESUZGX0ZPUk1BVF9TSE9SVFNUQVQgfAorCQkJCQkgICAgRElGRl9GT1JNQVRfRElSU1RBVCB8CisJCQkJCSAgICBESUZGX0ZPUk1BVF9TVU1NQVJZIHwKKwkJCQkJICAgIERJRkZfRk9STUFUX1BBVENIKTsKKworCS8qCisJICogVGhlc2UgY2FzZXMgYWx3YXlzIG5lZWQgcmVjdXJzaXZlOyB3ZSBkbyBub3QgZHJvcCBjYWxsZXItc3VwcGxpZWQKKwkgKiByZWN1cnNpdmUgYml0cyBmb3Igb3RoZXIgZm9ybWF0cyBoZXJlLgorCSAqLworCWlmIChvcHRpb25zLT5vdXRwdXRfZm9ybWF0ICYgKERJRkZfRk9STUFUX1BBVENIIHwKKwkJCQkgICAgICBESUZGX0ZPUk1BVF9OVU1TVEFUIHwKKwkJCQkgICAgICBESUZGX0ZPUk1BVF9ESUZGU1RBVCB8CisJCQkJICAgICAgRElGRl9GT1JNQVRfU0hPUlRTVEFUIHwKKwkJCQkgICAgICBESUZGX0ZPUk1BVF9ESVJTVEFUIHwKKwkJCQkgICAgICBESUZGX0ZPUk1BVF9TVU1NQVJZIHwKKwkJCQkgICAgICBESUZGX0ZPUk1BVF9DSEVDS0RJRkYpKQorCQlvcHRpb25zLT5mbGFncy5yZWN1cnNpdmUgPSAxOworCS8qCisJICogQWxzbyBwaWNrYXhlIHdvdWxkIG5vdCB3b3JrIHZlcnkgd2VsbCBpZiB5b3UgZG8gbm90IHNheSByZWN1cnNpdmUKKwkgKi8KKwlpZiAob3B0aW9ucy0+cGlja2F4ZV9vcHRzICYgRElGRl9QSUNLQVhFX0tJTkRTX01BU0spCisJCW9wdGlvbnMtPmZsYWdzLnJlY3Vyc2l2ZSA9IDE7CisJLyoKKwkgKiBXaGVuIHBhdGNoZXMgYXJlIGdlbmVyYXRlZCwgc3VibW9kdWxlcyBkaWZmZWQgYWdhaW5zdCB0aGUgd29yayB0cmVlCisJICogbXVzdCBiZSBjaGVja2VkIGZvciBkaXJ0aW5lc3MgdG9vIHNvIGl0IGNhbiBiZSBzaG93biBpbiB0aGUgb3V0cHV0CisJICovCisJaWYgKG9wdGlvbnMtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9QQVRDSCkKKwkJb3B0aW9ucy0+ZmxhZ3MuZGlydHlfc3VibW9kdWxlcyA9IDE7CisKKwlpZiAob3B0aW9ucy0+ZGV0ZWN0X3JlbmFtZSAmJiBvcHRpb25zLT5yZW5hbWVfbGltaXQgPCAwKQorCQlvcHRpb25zLT5yZW5hbWVfbGltaXQgPSBkaWZmX3JlbmFtZV9saW1pdF9kZWZhdWx0OworCWlmIChoZXhzeiA8IG9wdGlvbnMtPmFiYnJldikKKwkJb3B0aW9ucy0+YWJicmV2ID0gaGV4c3o7IC8qIGZ1bGwgKi8KKworCS8qCisJICogSXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBzaG93IHRoZSBmaXJzdCBoaXQgd2UgaGFwcGVuZWQKKwkgKiB0byBoYXZlIGZvdW5kLiAgSXQgZG9lcyBub3QgbWFrZSBzZW5zZSBub3QgdG8gcmV0dXJuIHdpdGgKKwkgKiBleGl0IGNvZGUgaW4gc3VjaCBhIGNhc2UgZWl0aGVyLgorCSAqLworCWlmIChvcHRpb25zLT5mbGFncy5xdWljaykgeworCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCQlvcHRpb25zLT5mbGFncy5leGl0X3dpdGhfc3RhdHVzID0gMTsKKwl9CisKKwlvcHRpb25zLT5kaWZmX3BhdGhfY291bnRlciA9IDA7CisKKwlpZiAob3B0aW9ucy0+ZmxhZ3MuZm9sbG93X3JlbmFtZXMgJiYgb3B0aW9ucy0+cGF0aHNwZWMubnIgIT0gMSkKKwkJZGllKF8oIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIikpOworCisJaWYgKCFvcHRpb25zLT51c2VfY29sb3IgfHwgZXh0ZXJuYWxfZGlmZigpKQorCQlvcHRpb25zLT5jb2xvcl9tb3ZlZCA9IDA7CisKKwlGUkVFX0FORF9OVUxMKG9wdGlvbnMtPnBhcnNlb3B0cyk7Cit9CisKK2ludCBwYXJzZV9sb25nX29wdChjb25zdCBjaGFyICpvcHQsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkgICBjb25zdCBjaGFyICoqb3B0YXJnKQoreworCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbMF07CisJaWYgKCFza2lwX3ByZWZpeChhcmcsICItLSIsICZhcmcpKQorCQlyZXR1cm4gMDsKKwlpZiAoIXNraXBfcHJlZml4KGFyZywgb3B0LCAmYXJnKSkKKwkJcmV0dXJuIDA7CisJaWYgKCphcmcgPT0gJz0nKSB7IC8qIHN0dWNrIGZvcm06IC0tb3B0aW9uPXZhbHVlICovCisJCSpvcHRhcmcgPSBhcmcgKyAxOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKCphcmcgIT0gJ1wwJykKKwkJcmV0dXJuIDA7CisJLyogc2VwYXJhdGUgZm9ybTogLS1vcHRpb24gdmFsdWUgKi8KKwlpZiAoIWFyZ3ZbMV0pCisJCWRpZSgiT3B0aW9uICctLSVzJyByZXF1aXJlcyBhIHZhbHVlIiwgb3B0KTsKKwkqb3B0YXJnID0gYXJndlsxXTsKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkaWZmX29wdF9zdGF0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqdmFsdWUsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zID0gb3B0LT52YWx1ZTsKKwlpbnQgd2lkdGggPSBvcHRpb25zLT5zdGF0X3dpZHRoOworCWludCBuYW1lX3dpZHRoID0gb3B0aW9ucy0+c3RhdF9uYW1lX3dpZHRoOworCWludCBncmFwaF93aWR0aCA9IG9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGg7CisJaW50IGNvdW50ID0gb3B0aW9ucy0+c3RhdF9jb3VudDsKKwljaGFyICplbmQ7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlpZiAoIXN0cmNtcChvcHQtPmxvbmdfbmFtZSwgInN0YXQiKSkgeworCQlpZiAodmFsdWUpIHsKKwkJCXdpZHRoID0gc3RydG91bCh2YWx1ZSwgJmVuZCwgMTApOworCQkJaWYgKCplbmQgPT0gJywnKQorCQkJCW5hbWVfd2lkdGggPSBzdHJ0b3VsKGVuZCsxLCAmZW5kLCAxMCk7CisJCQlpZiAoKmVuZCA9PSAnLCcpCisJCQkJY291bnQgPSBzdHJ0b3VsKGVuZCsxLCAmZW5kLCAxMCk7CisJCQlpZiAoKmVuZCkKKwkJCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCAtLXN0YXQgdmFsdWU6ICVzIiksIHZhbHVlKTsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNtcChvcHQtPmxvbmdfbmFtZSwgInN0YXQtd2lkdGgiKSkgeworCQl3aWR0aCA9IHN0cnRvdWwodmFsdWUsICZlbmQsIDEwKTsKKwkJaWYgKCplbmQpCisJCQlyZXR1cm4gZXJyb3IoXygiJXMgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIpLAorCQkJCSAgICAgb3B0LT5sb25nX25hbWUpOworCX0gZWxzZSBpZiAoIXN0cmNtcChvcHQtPmxvbmdfbmFtZSwgInN0YXQtbmFtZS13aWR0aCIpKSB7CisJCW5hbWVfd2lkdGggPSBzdHJ0b3VsKHZhbHVlLCAmZW5kLCAxMCk7CisJCWlmICgqZW5kKQorCQkJcmV0dXJuIGVycm9yKF8oIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiKSwKKwkJCQkgICAgIG9wdC0+bG9uZ19uYW1lKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAob3B0LT5sb25nX25hbWUsICJzdGF0LWdyYXBoLXdpZHRoIikpIHsKKwkJZ3JhcGhfd2lkdGggPSBzdHJ0b3VsKHZhbHVlLCAmZW5kLCAxMCk7CisJCWlmICgqZW5kKQorCQkJcmV0dXJuIGVycm9yKF8oIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiKSwKKwkJCQkgICAgIG9wdC0+bG9uZ19uYW1lKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAob3B0LT5sb25nX25hbWUsICJzdGF0LWNvdW50IikpIHsKKwkJY291bnQgPSBzdHJ0b3VsKHZhbHVlLCAmZW5kLCAxMCk7CisJCWlmICgqZW5kKQorCQkJcmV0dXJuIGVycm9yKF8oIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiKSwKKwkJCQkgICAgIG9wdC0+bG9uZ19uYW1lKTsKKwl9IGVsc2UKKwkJQlVHKCIlcyBzaG91bGQgbm90IGdldCBoZXJlIiwgb3B0LT5sb25nX25hbWUpOworCisJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9ESUZGU1RBVDsKKwlvcHRpb25zLT5zdGF0X25hbWVfd2lkdGggPSBuYW1lX3dpZHRoOworCW9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGggPSBncmFwaF93aWR0aDsKKwlvcHRpb25zLT5zdGF0X3dpZHRoID0gd2lkdGg7CisJb3B0aW9ucy0+c3RhdF9jb3VudCA9IGNvdW50OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX2RpcnN0YXRfb3B0KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGVycm1zZyA9IFNUUkJVRl9JTklUOworCWlmIChwYXJzZV9kaXJzdGF0X3BhcmFtcyhvcHRpb25zLCBwYXJhbXMsICZlcnJtc2cpKQorCQlkaWUoXygiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuJXMiKSwKKwkJICAgIGVycm1zZy5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnJtc2cpOworCS8qCisJICogVGhlIGNhbGxlciBrbm93cyBhIGRpcnN0YXQtcmVsYXRlZCBvcHRpb24gaXMgZ2l2ZW4gZnJvbSB0aGUgY29tbWFuZAorCSAqIGxpbmU7IGFsbG93IGl0IHRvIHNheSAicmV0dXJuIHRoaXNfZnVuY3Rpb24oKTsiCisJICovCisJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9ESVJTVEFUOworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgY2hhciBkaWZmX3N0YXR1c19sZXR0ZXJzW10gPSB7CisJRElGRl9TVEFUVVNfQURERUQsCisJRElGRl9TVEFUVVNfQ09QSUVELAorCURJRkZfU1RBVFVTX0RFTEVURUQsCisJRElGRl9TVEFUVVNfTU9ESUZJRUQsCisJRElGRl9TVEFUVVNfUkVOQU1FRCwKKwlESUZGX1NUQVRVU19UWVBFX0NIQU5HRUQsCisJRElGRl9TVEFUVVNfVU5LTk9XTiwKKwlESUZGX1NUQVRVU19VTk1FUkdFRCwKKwlESUZGX1NUQVRVU19GSUxURVJfQU9OLAorCURJRkZfU1RBVFVTX0ZJTFRFUl9CUk9LRU4sCisJJ1wwJywKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmlsdGVyX2JpdFsnWicgKyAxXTsKKworc3RhdGljIHZvaWQgcHJlcGFyZV9maWx0ZXJfYml0cyh2b2lkKQoreworCWludCBpOworCisJaWYgKCFmaWx0ZXJfYml0W0RJRkZfU1RBVFVTX0FEREVEXSkgeworCQlmb3IgKGkgPSAwOyBkaWZmX3N0YXR1c19sZXR0ZXJzW2ldOyBpKyspCisJCQlmaWx0ZXJfYml0WyhpbnQpIGRpZmZfc3RhdHVzX2xldHRlcnNbaV1dID0gKDEgPDwgaSk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgZmlsdGVyX2JpdF90c3QoY2hhciBzdGF0dXMsIGNvbnN0IHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlyZXR1cm4gb3B0LT5maWx0ZXIgJiBmaWx0ZXJfYml0WyhpbnQpIHN0YXR1c107Cit9CisKK3Vuc2lnbmVkIGRpZmZfZmlsdGVyX2JpdChjaGFyIHN0YXR1cykKK3sKKwlwcmVwYXJlX2ZpbHRlcl9iaXRzKCk7CisJcmV0dXJuIGZpbHRlcl9iaXRbKGludCkgc3RhdHVzXTsKK30KKworc3RhdGljIGludCBkaWZmX29wdF9kaWZmX2ZpbHRlcihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb24sCisJCQkJY29uc3QgY2hhciAqb3B0YXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0ID0gb3B0aW9uLT52YWx1ZTsKKwlpbnQgaSwgb3B0Y2g7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJcHJlcGFyZV9maWx0ZXJfYml0cygpOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIG5lZ2F0aW9uIGUuZy4gJ2QnIGluIHRoZSBpbnB1dCwgYW5kIHdlIGhhdmVuJ3QKKwkgKiBpbml0aWFsaXplZCB0aGUgZmlsdGVyIGZpZWxkIHdpdGggYW5vdGhlciAtLWRpZmYtZmlsdGVyLCBzdGFydAorCSAqIGZyb20gZnVsbCBzZXQgb2YgYml0cywgZXhjZXB0IGZvciBBT04uCisJICovCisJaWYgKCFvcHQtPmZpbHRlcikgeworCQlmb3IgKGkgPSAwOyAob3B0Y2ggPSBvcHRhcmdbaV0pICE9ICdcMCc7IGkrKykgeworCQkJaWYgKG9wdGNoIDwgJ2EnIHx8ICd6JyA8IG9wdGNoKQorCQkJCWNvbnRpbnVlOworCQkJb3B0LT5maWx0ZXIgPSAoMSA8PCAoQVJSQVlfU0laRShkaWZmX3N0YXR1c19sZXR0ZXJzKSAtIDEpKSAtIDE7CisJCQlvcHQtPmZpbHRlciAmPSB+ZmlsdGVyX2JpdFtESUZGX1NUQVRVU19GSUxURVJfQU9OXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJZm9yIChpID0gMDsgKG9wdGNoID0gb3B0YXJnW2ldKSAhPSAnXDAnOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGJpdDsKKwkJaW50IG5lZ2F0ZTsKKworCQlpZiAoJ2EnIDw9IG9wdGNoICYmIG9wdGNoIDw9ICd6JykgeworCQkJbmVnYXRlID0gMTsKKwkJCW9wdGNoID0gdG91cHBlcihvcHRjaCk7CisJCX0gZWxzZSB7CisJCQluZWdhdGUgPSAwOworCQl9CisKKwkJYml0ID0gKDAgPD0gb3B0Y2ggJiYgb3B0Y2ggPD0gJ1onKSA/IGZpbHRlcl9iaXRbb3B0Y2hdIDogMDsKKwkJaWYgKCFiaXQpCisJCQlyZXR1cm4gZXJyb3IoXygidW5rbm93biBjaGFuZ2UgY2xhc3MgJyVjJyBpbiAtLWRpZmYtZmlsdGVyPSVzIiksCisJCQkJICAgICBvcHRhcmdbaV0sIG9wdGFyZyk7CisJCWlmIChuZWdhdGUpCisJCQlvcHQtPmZpbHRlciAmPSB+Yml0OworCQllbHNlCisJCQlvcHQtPmZpbHRlciB8PSBiaXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfcGF0Y2hfb3V0cHV0KGludCAqZm10KQoreworCSpmbXQgJj0gfkRJRkZfRk9STUFUX05PX09VVFBVVDsKKwkqZm10IHw9IERJRkZfRk9STUFUX1BBVENIOworfQorCitzdGF0aWMgaW50IGRpZmZfb3B0X3dzX2Vycm9yX2hpZ2hsaWdodChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb24sCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCA9IG9wdGlvbi0+dmFsdWU7CisJaW50IHZhbCA9IHBhcnNlX3dzX2Vycm9yX2hpZ2hsaWdodChhcmcpOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygidW5rbm93biB2YWx1ZSBhZnRlciB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIpLAorCQkJICAgICAtMSAtIHZhbCwgYXJnKTsKKwlvcHQtPndzX2Vycm9yX2hpZ2hsaWdodCA9IHZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX29wdF9maW5kX29iamVjdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb24sCisJCQkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0ID0gb3B0aW9uLT52YWx1ZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlpZiAoZ2V0X29pZChhcmcsICZvaWQpKQorCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIHJlc29sdmUgJyVzJyIpLCBhcmcpOworCisJaWYgKCFvcHQtPm9iamZpbmQpCisJCW9wdC0+b2JqZmluZCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpvcHQtPm9iamZpbmQpKTsKKworCW9wdC0+cGlja2F4ZV9vcHRzIHw9IERJRkZfUElDS0FYRV9LSU5EX09CSkZJTkQ7CisJb3B0LT5mbGFncy5yZWN1cnNpdmUgPSAxOworCW9wdC0+ZmxhZ3MudHJlZV9pbl9yZWN1cnNpdmUgPSAxOworCW9pZHNldF9pbnNlcnQob3B0LT5vYmpmaW5kLCAmb2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX29wdF9hbmNob3JlZChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCW9wdGlvbnMtPnhkbF9vcHRzID0gRElGRl9XSVRIX0FMRyhvcHRpb25zLCBQQVRJRU5DRV9ESUZGKTsKKwlBTExPQ19HUk9XKG9wdGlvbnMtPmFuY2hvcnMsIG9wdGlvbnMtPmFuY2hvcnNfbnIgKyAxLAorCQkgICBvcHRpb25zLT5hbmNob3JzX2FsbG9jKTsKKwlvcHRpb25zLT5hbmNob3JzW29wdGlvbnMtPmFuY2hvcnNfbnIrK10gPSB4c3RyZHVwKGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9vcHRfYmluYXJ5KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisJZW5hYmxlX3BhdGNoX291dHB1dCgmb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCk7CisJb3B0aW9ucy0+ZmxhZ3MuYmluYXJ5ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX29wdF9icmVha19yZXdyaXRlcyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50ICpicmVha19vcHQgPSBvcHQtPnZhbHVlOworCWludCBvcHQxLCBvcHQyOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCWlmICghYXJnKQorCQlhcmcgPSAiIjsKKwlvcHQxID0gcGFyc2VfcmVuYW1lX3Njb3JlKCZhcmcpOworCWlmICgqYXJnID09IDApCisJCW9wdDIgPSAwOworCWVsc2UgaWYgKCphcmcgIT0gJy8nKQorCQlyZXR1cm4gZXJyb3IoXygiJXMgZXhwZWN0cyA8bj4vPG0+IGZvcm0iKSwgb3B0LT5sb25nX25hbWUpOworCWVsc2UgeworCQlhcmcrKzsKKwkJb3B0MiA9IHBhcnNlX3JlbmFtZV9zY29yZSgmYXJnKTsKKwl9CisJaWYgKCphcmcgIT0gMCkKKwkJcmV0dXJuIGVycm9yKF8oIiVzIGV4cGVjdHMgPG4+LzxtPiBmb3JtIiksIG9wdC0+bG9uZ19uYW1lKTsKKwkqYnJlYWtfb3B0ID0gb3B0MSB8IChvcHQyIDw8IDE2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX29wdF9jaGFyKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwljaGFyICp2YWx1ZSA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJaWYgKGFyZ1sxXSkKKwkJcmV0dXJuIGVycm9yKF8oIiVzIGV4cGVjdHMgYSBjaGFyYWN0ZXIsIGdvdCAnJXMnIiksCisJCQkgICAgIG9wdC0+bG9uZ19uYW1lLCBhcmcpOworCSp2YWx1ZSA9IGFyZ1swXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX29wdF9jb2xvcl9tb3ZlZChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucyA9IG9wdC0+dmFsdWU7CisKKwlpZiAodW5zZXQpIHsKKwkJb3B0aW9ucy0+Y29sb3JfbW92ZWQgPSBDT0xPUl9NT1ZFRF9OTzsKKwl9IGVsc2UgaWYgKCFhcmcpIHsKKwkJaWYgKGRpZmZfY29sb3JfbW92ZWRfZGVmYXVsdCkKKwkJCW9wdGlvbnMtPmNvbG9yX21vdmVkID0gZGlmZl9jb2xvcl9tb3ZlZF9kZWZhdWx0OworCQlpZiAob3B0aW9ucy0+Y29sb3JfbW92ZWQgPT0gQ09MT1JfTU9WRURfTk8pCisJCQlvcHRpb25zLT5jb2xvcl9tb3ZlZCA9IENPTE9SX01PVkVEX0RFRkFVTFQ7CisJfSBlbHNlIHsKKwkJaW50IGNtID0gcGFyc2VfY29sb3JfbW92ZWQoYXJnKTsKKwkJaWYgKGNtIDwgMCkKKwkJCXJldHVybiBlcnJvcihfKCJiYWQgLS1jb2xvci1tb3ZlZCBhcmd1bWVudDogJXMiKSwgYXJnKTsKKwkJb3B0aW9ucy0+Y29sb3JfbW92ZWQgPSBjbTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9vcHRfY29sb3JfbW92ZWRfd3MoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMgPSBvcHQtPnZhbHVlOworCXVuc2lnbmVkIGNtOworCisJaWYgKHVuc2V0KSB7CisJCW9wdGlvbnMtPmNvbG9yX21vdmVkX3dzX2hhbmRsaW5nID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJY20gPSBwYXJzZV9jb2xvcl9tb3ZlZF93cyhhcmcpOworCWlmIChjbSAmIENPTE9SX01PVkVEX1dTX0VSUk9SKQorCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCBtb2RlICclcycgaW4gLS1jb2xvci1tb3ZlZC13cyIpLCBhcmcpOworCW9wdGlvbnMtPmNvbG9yX21vdmVkX3dzX2hhbmRsaW5nID0gY207CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9vcHRfY29sb3Jfd29yZHMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCW9wdGlvbnMtPnVzZV9jb2xvciA9IDE7CisJb3B0aW9ucy0+d29yZF9kaWZmID0gRElGRl9XT1JEU19DT0xPUjsKKwlvcHRpb25zLT53b3JkX3JlZ2V4ID0gYXJnOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpZmZfb3B0X2NvbXBhY3Rfc3VtbWFyeShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9BUkcoYXJnKTsKKwlpZiAodW5zZXQpIHsKKwkJb3B0aW9ucy0+ZmxhZ3Muc3RhdF93aXRoX3N1bW1hcnkgPSAwOworCX0gZWxzZSB7CisJCW9wdGlvbnMtPmZsYWdzLnN0YXRfd2l0aF9zdW1tYXJ5ID0gMTsKKwkJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9ESUZGU1RBVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9vcHRfZGlmZl9hbGdvcml0aG0oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMgPSBvcHQtPnZhbHVlOworCWxvbmcgdmFsdWUgPSBwYXJzZV9hbGdvcml0aG1fdmFsdWUoYXJnKTsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlpZiAodmFsdWUgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygib3B0aW9uIGRpZmYtYWxnb3JpdGhtIGFjY2VwdHMgXCJteWVyc1wiLCAiCisJCQkgICAgICAgIlwibWluaW1hbFwiLCBcInBhdGllbmNlXCIgYW5kIFwiaGlzdG9ncmFtXCIiKSk7CisKKwkvKiBjbGVhciBvdXQgcHJldmlvdXMgc2V0dGluZ3MgKi8KKwlESUZGX1hETF9DTFIob3B0aW9ucywgTkVFRF9NSU5JTUFMKTsKKwlvcHRpb25zLT54ZGxfb3B0cyAmPSB+WERGX0RJRkZfQUxHT1JJVEhNX01BU0s7CisJb3B0aW9ucy0+eGRsX29wdHMgfD0gdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9vcHRfZGlyc3RhdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucyA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJaWYgKCFzdHJjbXAob3B0LT5sb25nX25hbWUsICJjdW11bGF0aXZlIikpIHsKKwkJaWYgKGFyZykKKwkJCUJVRygiaG93IGNvbWUgLS1jdW11bGF0aXZlIHRha2UgYSB2YWx1ZT8iKTsKKwkJYXJnID0gImN1bXVsYXRpdmUiOworCX0gZWxzZSBpZiAoIXN0cmNtcChvcHQtPmxvbmdfbmFtZSwgImRpcnN0YXQtYnktZmlsZSIpKQorCQlwYXJzZV9kaXJzdGF0X29wdChvcHRpb25zLCAiZmlsZXMiKTsKKwlwYXJzZV9kaXJzdGF0X29wdChvcHRpb25zLCBhcmcgPyBhcmcgOiAiIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9vcHRfZmluZF9jb3BpZXMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCWlmICghYXJnKQorCQlhcmcgPSAiIjsKKwlvcHRpb25zLT5yZW5hbWVfc2NvcmUgPSBwYXJzZV9yZW5hbWVfc2NvcmUoJmFyZyk7CisJaWYgKCphcmcgIT0gMCkKKwkJcmV0dXJuIGVycm9yKF8oImludmFsaWQgYXJndW1lbnQgdG8gJXMiKSwgb3B0LT5sb25nX25hbWUpOworCisJaWYgKG9wdGlvbnMtPmRldGVjdF9yZW5hbWUgPT0gRElGRl9ERVRFQ1RfQ09QWSkKKwkJb3B0aW9ucy0+ZmxhZ3MuZmluZF9jb3BpZXNfaGFyZGVyID0gMTsKKwllbHNlCisJCW9wdGlvbnMtPmRldGVjdF9yZW5hbWUgPSBESUZGX0RFVEVDVF9DT1BZOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9vcHRfZmluZF9yZW5hbWVzKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucyA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJaWYgKCFhcmcpCisJCWFyZyA9ICIiOworCW9wdGlvbnMtPnJlbmFtZV9zY29yZSA9IHBhcnNlX3JlbmFtZV9zY29yZSgmYXJnKTsKKwlpZiAoKmFyZyAhPSAwKQorCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCBhcmd1bWVudCB0byAlcyIpLCBvcHQtPmxvbmdfbmFtZSk7CisKKwlvcHRpb25zLT5kZXRlY3RfcmVuYW1lID0gRElGRl9ERVRFQ1RfUkVOQU1FOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpZmZfb3B0X2ZvbGxvdyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisJaWYgKHVuc2V0KSB7CisJCW9wdGlvbnMtPmZsYWdzLmZvbGxvd19yZW5hbWVzID0gMDsKKwkJb3B0aW9ucy0+ZmxhZ3MuZGVmYXVsdF9mb2xsb3dfcmVuYW1lcyA9IDA7CisJfSBlbHNlIHsKKwkJb3B0aW9ucy0+ZmxhZ3MuZm9sbG93X3JlbmFtZXMgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX29wdF9pZ25vcmVfc3VibW9kdWxlcyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucyA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJaWYgKCFhcmcpCisJCWFyZyA9ICJhbGwiOworCW9wdGlvbnMtPmZsYWdzLm92ZXJyaWRlX3N1Ym1vZHVsZV9jb25maWcgPSAxOworCWhhbmRsZV9pZ25vcmVfc3VibW9kdWxlc19hcmcob3B0aW9ucywgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX29wdF9saW5lX3ByZWZpeChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJY29uc3QgY2hhciAqb3B0YXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucyA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJb3B0aW9ucy0+bGluZV9wcmVmaXggPSBvcHRhcmc7CisJb3B0aW9ucy0+bGluZV9wcmVmaXhfbGVuZ3RoID0gc3RybGVuKG9wdGlvbnMtPmxpbmVfcHJlZml4KTsKKwlncmFwaF9zZXR1cF9saW5lX3ByZWZpeChvcHRpb25zKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX29wdF9ub19wcmVmaXgoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICAgICAgY29uc3QgY2hhciAqb3B0YXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucyA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJQlVHX09OX09QVF9BUkcob3B0YXJnKTsKKwlvcHRpb25zLT5hX3ByZWZpeCA9ICIiOworCW9wdGlvbnMtPmJfcHJlZml4ID0gIiI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIHBhcnNlX29wdF9yZXN1bHQgZGlmZl9vcHRfb3V0cHV0KHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJCSAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucyA9IG9wdC0+dmFsdWU7CisJY2hhciAqcGF0aDsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlwYXRoID0gcHJlZml4X2ZpbGVuYW1lKGN0eC0+cHJlZml4LCBhcmcpOworCW9wdGlvbnMtPmZpbGUgPSB4Zm9wZW4ocGF0aCwgInciKTsKKwlvcHRpb25zLT5jbG9zZV9maWxlID0gMTsKKwlpZiAob3B0aW9ucy0+dXNlX2NvbG9yICE9IEdJVF9DT0xPUl9BTFdBWVMpCisJCW9wdGlvbnMtPnVzZV9jb2xvciA9IEdJVF9DT0xPUl9ORVZFUjsKKwlmcmVlKHBhdGgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpZmZfb3B0X3BhdGllbmNlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucyA9IG9wdC0+dmFsdWU7CisJaW50IGk7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJQlVHX09OX09QVF9BUkcoYXJnKTsKKwlvcHRpb25zLT54ZGxfb3B0cyA9IERJRkZfV0lUSF9BTEcob3B0aW9ucywgUEFUSUVOQ0VfRElGRik7CisJLyoKKwkgKiBCb3RoIC0tcGF0aWVuY2UgYW5kIC0tYW5jaG9yZWQgdXNlIFBBVElFTkNFX0RJRkYKKwkgKiBpbnRlcm5hbGx5LCBzbyByZW1vdmUgYW55IGFuY2hvcnMgcHJldmlvdXNseQorCSAqIHNwZWNpZmllZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy0+YW5jaG9yc19ucjsgaSsrKQorCQlmcmVlKG9wdGlvbnMtPmFuY2hvcnNbaV0pOworCW9wdGlvbnMtPmFuY2hvcnNfbnIgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpZmZfb3B0X3BpY2theGVfcmVnZXgoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucyA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJb3B0aW9ucy0+cGlja2F4ZSA9IGFyZzsKKwlvcHRpb25zLT5waWNrYXhlX29wdHMgfD0gRElGRl9QSUNLQVhFX0tJTkRfRzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX29wdF9waWNrYXhlX3N0cmluZyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucyA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJb3B0aW9ucy0+cGlja2F4ZSA9IGFyZzsKKwlvcHRpb25zLT5waWNrYXhlX29wdHMgfD0gRElGRl9QSUNLQVhFX0tJTkRfUzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX29wdF9yZWxhdGl2ZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCW9wdGlvbnMtPmZsYWdzLnJlbGF0aXZlX25hbWUgPSAxOworCWlmIChhcmcpCisJCW9wdGlvbnMtPnByZWZpeCA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX29wdF9zdWJtb2R1bGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucyA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJaWYgKCFhcmcpCisJCWFyZyA9ICJsb2ciOworCWlmIChwYXJzZV9zdWJtb2R1bGVfcGFyYW1zKG9wdGlvbnMsIGFyZykpCisJCXJldHVybiBlcnJvcihfKCJmYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIpLAorCQkJICAgICBhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpZmZfb3B0X3RleHRjb252KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucyA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCWlmICh1bnNldCkgeworCQlvcHRpb25zLT5mbGFncy5hbGxvd190ZXh0Y29udiA9IDA7CisJfSBlbHNlIHsKKwkJb3B0aW9ucy0+ZmxhZ3MuYWxsb3dfdGV4dGNvbnYgPSAxOworCQlvcHRpb25zLT5mbGFncy50ZXh0Y29udl9zZXRfdmlhX2NtZGxpbmUgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX29wdF91bmlmaWVkKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zID0gb3B0LT52YWx1ZTsKKwljaGFyICpzOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJaWYgKGFyZykgeworCQlvcHRpb25zLT5jb250ZXh0ID0gc3RydG9sKGFyZywgJnMsIDEwKTsKKwkJaWYgKCpzKQorCQkJcmV0dXJuIGVycm9yKF8oIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiKSwgIi0tdW5pZmllZCIpOworCX0KKwllbmFibGVfcGF0Y2hfb3V0cHV0KCZvcHRpb25zLT5vdXRwdXRfZm9ybWF0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpZmZfb3B0X3dvcmRfZGlmZihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlpZiAoYXJnKSB7CisJCWlmICghc3RyY21wKGFyZywgInBsYWluIikpCisJCQlvcHRpb25zLT53b3JkX2RpZmYgPSBESUZGX1dPUkRTX1BMQUlOOworCQllbHNlIGlmICghc3RyY21wKGFyZywgImNvbG9yIikpIHsKKwkJCW9wdGlvbnMtPnVzZV9jb2xvciA9IDE7CisJCQlvcHRpb25zLT53b3JkX2RpZmYgPSBESUZGX1dPUkRTX0NPTE9SOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAicG9yY2VsYWluIikpCisJCQlvcHRpb25zLT53b3JkX2RpZmYgPSBESUZGX1dPUkRTX1BPUkNFTEFJTjsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJub25lIikpCisJCQlvcHRpb25zLT53b3JkX2RpZmYgPSBESUZGX1dPUkRTX05PTkU7CisJCWVsc2UKKwkJCXJldHVybiBlcnJvcihfKCJiYWQgLS13b3JkLWRpZmYgYXJndW1lbnQ6ICVzIiksIGFyZyk7CisJfSBlbHNlIHsKKwkJaWYgKG9wdGlvbnMtPndvcmRfZGlmZiA9PSBESUZGX1dPUkRTX05PTkUpCisJCQlvcHRpb25zLT53b3JkX2RpZmYgPSBESUZGX1dPUkRTX1BMQUlOOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX29wdF93b3JkX2RpZmZfcmVnZXgoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlpZiAob3B0aW9ucy0+d29yZF9kaWZmID09IERJRkZfV09SRFNfTk9ORSkKKwkJb3B0aW9ucy0+d29yZF9kaWZmID0gRElGRl9XT1JEU19QTEFJTjsKKwlvcHRpb25zLT53b3JkX3JlZ2V4ID0gYXJnOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcmVwX3BhcnNlX29wdGlvbnMoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlzdHJ1Y3Qgb3B0aW9uIHBhcnNlb3B0c1tdID0geworCQlPUFRfR1JPVVAoTl8oIkRpZmYgb3V0cHV0IGZvcm1hdCBvcHRpb25zIikpLAorCQlPUFRfQklUT1AoJ3AnLCAicGF0Y2giLCAmb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCwKKwkJCSAgTl8oImdlbmVyYXRlIHBhdGNoIiksCisJCQkgIERJRkZfRk9STUFUX1BBVENILCBESUZGX0ZPUk1BVF9OT19PVVRQVVQpLAorCQlPUFRfQklUX0YoJ3MnLCAibm8tcGF0Y2giLCAmb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCwKKwkJCSAgTl8oInN1cHByZXNzIGRpZmYgb3V0cHV0IiksCisJCQkgIERJRkZfRk9STUFUX05PX09VVFBVVCwgUEFSU0VfT1BUX05PTkVHKSwKKwkJT1BUX0JJVE9QKCd1JywgTlVMTCwgJm9wdGlvbnMtPm91dHB1dF9mb3JtYXQsCisJCQkgIE5fKCJnZW5lcmF0ZSBwYXRjaCIpLAorCQkJICBESUZGX0ZPUk1BVF9QQVRDSCwgRElGRl9GT1JNQVRfTk9fT1VUUFVUKSwKKwkJT1BUX0NBTExCQUNLX0YoJ1UnLCAidW5pZmllZCIsIG9wdGlvbnMsIE5fKCI8bj4iKSwKKwkJCSAgICAgICBOXygiZ2VuZXJhdGUgZGlmZnMgd2l0aCA8bj4gbGluZXMgY29udGV4dCIpLAorCQkJICAgICAgIFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9PUFRBUkcsIGRpZmZfb3B0X3VuaWZpZWQpLAorCQlPUFRfQk9PTCgnVycsICJmdW5jdGlvbi1jb250ZXh0IiwgJm9wdGlvbnMtPmZsYWdzLmZ1bmNjb250ZXh0LAorCQkJIE5fKCJnZW5lcmF0ZSBkaWZmcyB3aXRoIDxuPiBsaW5lcyBjb250ZXh0IikpLAorCQlPUFRfQklUX0YoMCwgInJhdyIsICZvcHRpb25zLT5vdXRwdXRfZm9ybWF0LAorCQkJICBOXygiZ2VuZXJhdGUgdGhlIGRpZmYgaW4gcmF3IGZvcm1hdCIpLAorCQkJICBESUZGX0ZPUk1BVF9SQVcsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9CSVRPUCgwLCAicGF0Y2gtd2l0aC1yYXciLCAmb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCwKKwkJCSAgTl8oInN5bm9ueW0gZm9yICctcCAtLXJhdyciKSwKKwkJCSAgRElGRl9GT1JNQVRfUEFUQ0ggfCBESUZGX0ZPUk1BVF9SQVcsCisJCQkgIERJRkZfRk9STUFUX05PX09VVFBVVCksCisJCU9QVF9CSVRPUCgwLCAicGF0Y2gtd2l0aC1zdGF0IiwgJm9wdGlvbnMtPm91dHB1dF9mb3JtYXQsCisJCQkgIE5fKCJzeW5vbnltIGZvciAnLXAgLS1zdGF0JyIpLAorCQkJICBESUZGX0ZPUk1BVF9QQVRDSCB8IERJRkZfRk9STUFUX0RJRkZTVEFULAorCQkJICBESUZGX0ZPUk1BVF9OT19PVVRQVVQpLAorCQlPUFRfQklUX0YoMCwgIm51bXN0YXQiLCAmb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCwKKwkJCSAgTl8oIm1hY2hpbmUgZnJpZW5kbHkgLS1zdGF0IiksCisJCQkgIERJRkZfRk9STUFUX05VTVNUQVQsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9CSVRfRigwLCAic2hvcnRzdGF0IiwgJm9wdGlvbnMtPm91dHB1dF9mb3JtYXQsCisJCQkgIE5fKCJvdXRwdXQgb25seSB0aGUgbGFzdCBsaW5lIG9mIC0tc3RhdCIpLAorCQkJICBESUZGX0ZPUk1BVF9TSE9SVFNUQVQsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9DQUxMQkFDS19GKCdYJywgImRpcnN0YXQiLCBvcHRpb25zLCBOXygiPHBhcmFtMSxwYXJhbTI+Li4uIiksCisJCQkgICAgICAgTl8oIm91dHB1dCB0aGUgZGlzdHJpYnV0aW9uIG9mIHJlbGF0aXZlIGFtb3VudCBvZiBjaGFuZ2VzIGZvciBlYWNoIHN1Yi1kaXJlY3RvcnkiKSwKKwkJCSAgICAgICBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfT1BUQVJHLAorCQkJICAgICAgIGRpZmZfb3B0X2RpcnN0YXQpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAiY3VtdWxhdGl2ZSIsIG9wdGlvbnMsIE5VTEwsCisJCQkgICAgICAgTl8oInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1jdW11bGF0aXZlIiksCisJCQkgICAgICAgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PQVJHLAorCQkJICAgICAgIGRpZmZfb3B0X2RpcnN0YXQpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAiZGlyc3RhdC1ieS1maWxlIiwgb3B0aW9ucywgTl8oIjxwYXJhbTEscGFyYW0yPi4uLiIpLAorCQkJICAgICAgIE5fKCJzeW5vbnltIGZvciAtLWRpcnN0YXQ9ZmlsZXMscGFyYW0xLHBhcmFtMi4uLiIpLAorCQkJICAgICAgIFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9PUFRBUkcsCisJCQkgICAgICAgZGlmZl9vcHRfZGlyc3RhdCksCisJCU9QVF9CSVRfRigwLCAiY2hlY2siLCAmb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCwKKwkJCSAgTl8oIndhcm4gaWYgY2hhbmdlcyBpbnRyb2R1Y2UgY29uZmxpY3QgbWFya2VycyBvciB3aGl0ZXNwYWNlIGVycm9ycyIpLAorCQkJICBESUZGX0ZPUk1BVF9DSEVDS0RJRkYsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9CSVRfRigwLCAic3VtbWFyeSIsICZvcHRpb25zLT5vdXRwdXRfZm9ybWF0LAorCQkJICBOXygiY29uZGVuc2VkIHN1bW1hcnkgc3VjaCBhcyBjcmVhdGlvbnMsIHJlbmFtZXMgYW5kIG1vZGUgY2hhbmdlcyIpLAorCQkJICBESUZGX0ZPUk1BVF9TVU1NQVJZLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfQklUX0YoMCwgIm5hbWUtb25seSIsICZvcHRpb25zLT5vdXRwdXRfZm9ybWF0LAorCQkJICBOXygic2hvdyBvbmx5IG5hbWVzIG9mIGNoYW5nZWQgZmlsZXMiKSwKKwkJCSAgRElGRl9GT1JNQVRfTkFNRSwgUEFSU0VfT1BUX05PTkVHKSwKKwkJT1BUX0JJVF9GKDAsICJuYW1lLXN0YXR1cyIsICZvcHRpb25zLT5vdXRwdXRfZm9ybWF0LAorCQkJICBOXygic2hvdyBvbmx5IG5hbWVzIGFuZCBzdGF0dXMgb2YgY2hhbmdlZCBmaWxlcyIpLAorCQkJICBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUywgUEFSU0VfT1BUX05PTkVHKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgInN0YXQiLCBvcHRpb25zLCBOXygiPHdpZHRoPlssPG5hbWUtd2lkdGg+Wyw8Y291bnQ+XV0iKSwKKwkJCSAgICAgICBOXygiZ2VuZXJhdGUgZGlmZnN0YXQiKSwKKwkJCSAgICAgICBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfT1BUQVJHLCBkaWZmX29wdF9zdGF0KSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgInN0YXQtd2lkdGgiLCBvcHRpb25zLCBOXygiPHdpZHRoPiIpLAorCQkJICAgICAgIE5fKCJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gd2lkdGgiKSwKKwkJCSAgICAgICBQQVJTRV9PUFRfTk9ORUcsIGRpZmZfb3B0X3N0YXQpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAic3RhdC1uYW1lLXdpZHRoIiwgb3B0aW9ucywgTl8oIjx3aWR0aD4iKSwKKwkJCSAgICAgICBOXygiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIG5hbWUgd2lkdGgiKSwKKwkJCSAgICAgICBQQVJTRV9PUFRfTk9ORUcsIGRpZmZfb3B0X3N0YXQpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAic3RhdC1ncmFwaC13aWR0aCIsIG9wdGlvbnMsIE5fKCI8d2lkdGg+IiksCisJCQkgICAgICAgTl8oImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiBncmFwaCB3aWR0aCIpLAorCQkJICAgICAgIFBBUlNFX09QVF9OT05FRywgZGlmZl9vcHRfc3RhdCksCisJCU9QVF9DQUxMQkFDS19GKDAsICJzdGF0LWNvdW50Iiwgb3B0aW9ucywgTl8oIjxjb3VudD4iKSwKKwkJCSAgICAgICBOXygiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBsaW1pdGVkIGxpbmVzIiksCisJCQkgICAgICAgUEFSU0VfT1BUX05PTkVHLCBkaWZmX29wdF9zdGF0KSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgImNvbXBhY3Qtc3VtbWFyeSIsIG9wdGlvbnMsIE5VTEwsCisJCQkgICAgICAgTl8oImdlbmVyYXRlIGNvbXBhY3Qgc3VtbWFyeSBpbiBkaWZmc3RhdCIpLAorCQkJICAgICAgIFBBUlNFX09QVF9OT0FSRywgZGlmZl9vcHRfY29tcGFjdF9zdW1tYXJ5KSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgImJpbmFyeSIsIG9wdGlvbnMsIE5VTEwsCisJCQkgICAgICAgTl8oIm91dHB1dCBhIGJpbmFyeSBkaWZmIHRoYXQgY2FuIGJlIGFwcGxpZWQiKSwKKwkJCSAgICAgICBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9BUkcsIGRpZmZfb3B0X2JpbmFyeSksCisJCU9QVF9CT09MKDAsICJmdWxsLWluZGV4IiwgJm9wdGlvbnMtPmZsYWdzLmZ1bGxfaW5kZXgsCisJCQkgTl8oInNob3cgZnVsbCBwcmUtIGFuZCBwb3N0LWltYWdlIG9iamVjdCBuYW1lcyBvbiB0aGUgXCJpbmRleFwiIGxpbmVzIikpLAorCQlPUFRfQ09MT1JfRkxBRygwLCAiY29sb3IiLCAmb3B0aW9ucy0+dXNlX2NvbG9yLAorCQkJICAgICAgIE5fKCJzaG93IGNvbG9yZWQgZGlmZiIpKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgIndzLWVycm9yLWhpZ2hsaWdodCIsIG9wdGlvbnMsIE5fKCI8a2luZD4iKSwKKwkJCSAgICAgICBOXygiaGlnaGxpZ2h0IHdoaXRlc3BhY2UgZXJyb3JzIGluIHRoZSAnY29udGV4dCcsICdvbGQnIG9yICduZXcnIGxpbmVzIGluIHRoZSBkaWZmIiksCisJCQkgICAgICAgUEFSU0VfT1BUX05PTkVHLCBkaWZmX29wdF93c19lcnJvcl9oaWdobGlnaHQpLAorCQlPUFRfU0VUX0lOVCgneicsIE5VTEwsICZvcHRpb25zLT5saW5lX3Rlcm1pbmF0aW9uLAorCQkJICAgIE5fKCJkbyBub3QgbXVuZ2UgcGF0aG5hbWVzIGFuZCB1c2UgTlVMcyBhcyBvdXRwdXQgZmllbGQgdGVybWluYXRvcnMgaW4gLS1yYXcgb3IgLS1udW1zdGF0IiksCisJCQkgICAgMCksCisJCU9QVF9fQUJCUkVWKCZvcHRpb25zLT5hYmJyZXYpLAorCQlPUFRfU1RSSU5HX0YoMCwgInNyYy1wcmVmaXgiLCAmb3B0aW9ucy0+YV9wcmVmaXgsIE5fKCI8cHJlZml4PiIpLAorCQkJICAgICBOXygic2hvdyB0aGUgZ2l2ZW4gc291cmNlIHByZWZpeCBpbnN0ZWFkIG9mIFwiYS9cIiIpLAorCQkJICAgICBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfU1RSSU5HX0YoMCwgImRzdC1wcmVmaXgiLCAmb3B0aW9ucy0+Yl9wcmVmaXgsIE5fKCI8cHJlZml4PiIpLAorCQkJICAgICBOXygic2hvdyB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gcHJlZml4IGluc3RlYWQgb2YgXCJiL1wiIiksCisJCQkgICAgIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9DQUxMQkFDS19GKDAsICJsaW5lLXByZWZpeCIsIG9wdGlvbnMsIE5fKCI8cHJlZml4PiIpLAorCQkJICAgICAgIE5fKCJwcmVwZW5kIGFuIGFkZGl0aW9uYWwgcHJlZml4IHRvIGV2ZXJ5IGxpbmUgb2Ygb3V0cHV0IiksCisJCQkgICAgICAgUEFSU0VfT1BUX05PTkVHLCBkaWZmX29wdF9saW5lX3ByZWZpeCksCisJCU9QVF9DQUxMQkFDS19GKDAsICJuby1wcmVmaXgiLCBvcHRpb25zLCBOVUxMLAorCQkJICAgICAgIE5fKCJkbyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeCIpLAorCQkJICAgICAgIFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9OT0FSRywgZGlmZl9vcHRfbm9fcHJlZml4KSwKKwkJT1BUX0lOVEVHRVJfRigwLCAiaW50ZXItaHVuay1jb250ZXh0IiwgJm9wdGlvbnMtPmludGVyaHVua2NvbnRleHQsCisJCQkgICAgICBOXygic2hvdyBjb250ZXh0IGJldHdlZW4gZGlmZiBodW5rcyB1cCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBsaW5lcyIpLAorCQkJICAgICAgUEFSU0VfT1BUX05PTkVHKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgIm91dHB1dC1pbmRpY2F0b3ItbmV3IiwKKwkJCSAgICAgICAmb3B0aW9ucy0+b3V0cHV0X2luZGljYXRvcnNbT1VUUFVUX0lORElDQVRPUl9ORVddLAorCQkJICAgICAgIE5fKCI8Y2hhcj4iKSwKKwkJCSAgICAgICBOXygic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGEgbmV3IGxpbmUgaW5zdGVhZCBvZiAnKyciKSwKKwkJCSAgICAgICBQQVJTRV9PUFRfTk9ORUcsIGRpZmZfb3B0X2NoYXIpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAib3V0cHV0LWluZGljYXRvci1vbGQiLAorCQkJICAgICAgICZvcHRpb25zLT5vdXRwdXRfaW5kaWNhdG9yc1tPVVRQVVRfSU5ESUNBVE9SX09MRF0sCisJCQkgICAgICAgTl8oIjxjaGFyPiIpLAorCQkJICAgICAgIE5fKCJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYW4gb2xkIGxpbmUgaW5zdGVhZCBvZiAnLSciKSwKKwkJCSAgICAgICBQQVJTRV9PUFRfTk9ORUcsIGRpZmZfb3B0X2NoYXIpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAib3V0cHV0LWluZGljYXRvci1jb250ZXh0IiwKKwkJCSAgICAgICAmb3B0aW9ucy0+b3V0cHV0X2luZGljYXRvcnNbT1VUUFVUX0lORElDQVRPUl9DT05URVhUXSwKKwkJCSAgICAgICBOXygiPGNoYXI+IiksCisJCQkgICAgICAgTl8oInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIGNvbnRleHQgaW5zdGVhZCBvZiAnICciKSwKKwkJCSAgICAgICBQQVJTRV9PUFRfTk9ORUcsIGRpZmZfb3B0X2NoYXIpLAorCisJCU9QVF9HUk9VUChOXygiRGlmZiByZW5hbWUgb3B0aW9ucyIpKSwKKwkJT1BUX0NBTExCQUNLX0YoJ0InLCAiYnJlYWstcmV3cml0ZXMiLCAmb3B0aW9ucy0+YnJlYWtfb3B0LCBOXygiPG4+Wy88bT5dIiksCisJCQkgICAgICAgTl8oImJyZWFrIGNvbXBsZXRlIHJld3JpdGUgY2hhbmdlcyBpbnRvIHBhaXJzIG9mIGRlbGV0ZSBhbmQgY3JlYXRlIiksCisJCQkgICAgICAgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX09QVEFSRywKKwkJCSAgICAgICBkaWZmX29wdF9icmVha19yZXdyaXRlcyksCisJCU9QVF9DQUxMQkFDS19GKCdNJywgImZpbmQtcmVuYW1lcyIsIG9wdGlvbnMsIE5fKCI8bj4iKSwKKwkJCSAgICAgICBOXygiZGV0ZWN0IHJlbmFtZXMiKSwKKwkJCSAgICAgICBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfT1BUQVJHLAorCQkJICAgICAgIGRpZmZfb3B0X2ZpbmRfcmVuYW1lcyksCisJCU9QVF9TRVRfSU5UX0YoJ0QnLCAiaXJyZXZlcnNpYmxlLWRlbGV0ZSIsICZvcHRpb25zLT5pcnJldmVyc2libGVfZGVsZXRlLAorCQkJICAgICAgTl8oIm9taXQgdGhlIHByZWltYWdlIGZvciBkZWxldGVzIiksCisJCQkgICAgICAxLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfQ0FMTEJBQ0tfRignQycsICJmaW5kLWNvcGllcyIsIG9wdGlvbnMsIE5fKCI8bj4iKSwKKwkJCSAgICAgICBOXygiZGV0ZWN0IGNvcGllcyIpLAorCQkJICAgICAgIFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9PUFRBUkcsCisJCQkgICAgICAgZGlmZl9vcHRfZmluZF9jb3BpZXMpLAorCQlPUFRfQk9PTCgwLCAiZmluZC1jb3BpZXMtaGFyZGVyIiwgJm9wdGlvbnMtPmZsYWdzLmZpbmRfY29waWVzX2hhcmRlciwKKwkJCSBOXygidXNlIHVubW9kaWZpZWQgZmlsZXMgYXMgc291cmNlIHRvIGZpbmQgY29waWVzIikpLAorCQlPUFRfU0VUX0lOVF9GKDAsICJuby1yZW5hbWVzIiwgJm9wdGlvbnMtPmRldGVjdF9yZW5hbWUsCisJCQkgICAgICBOXygiZGlzYWJsZSByZW5hbWUgZGV0ZWN0aW9uIiksCisJCQkgICAgICAwLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfQk9PTCgwLCAicmVuYW1lLWVtcHR5IiwgJm9wdGlvbnMtPmZsYWdzLnJlbmFtZV9lbXB0eSwKKwkJCSBOXygidXNlIGVtcHR5IGJsb2JzIGFzIHJlbmFtZSBzb3VyY2UiKSksCisJCU9QVF9DQUxMQkFDS19GKDAsICJmb2xsb3ciLCBvcHRpb25zLCBOVUxMLAorCQkJICAgICAgIE5fKCJjb250aW51ZSBsaXN0aW5nIHRoZSBoaXN0b3J5IG9mIGEgZmlsZSBiZXlvbmQgcmVuYW1lcyIpLAorCQkJICAgICAgIFBBUlNFX09QVF9OT0FSRywgZGlmZl9vcHRfZm9sbG93KSwKKwkJT1BUX0lOVEVHRVIoJ2wnLCBOVUxMLCAmb3B0aW9ucy0+cmVuYW1lX2xpbWl0LAorCQkJICAgIE5fKCJwcmV2ZW50IHJlbmFtZS9jb3B5IGRldGVjdGlvbiBpZiB0aGUgbnVtYmVyIG9mIHJlbmFtZS9jb3B5IHRhcmdldHMgZXhjZWVkcyBnaXZlbiBsaW1pdCIpKSwKKworCQlPUFRfR1JPVVAoTl8oIkRpZmYgYWxnb3JpdGhtIG9wdGlvbnMiKSksCisJCU9QVF9CSVQoMCwgIm1pbmltYWwiLCAmb3B0aW9ucy0+eGRsX29wdHMsCisJCQlOXygicHJvZHVjZSB0aGUgc21hbGxlc3QgcG9zc2libGUgZGlmZiIpLAorCQkJWERGX05FRURfTUlOSU1BTCksCisJCU9QVF9CSVRfRigndycsICJpZ25vcmUtYWxsLXNwYWNlIiwgJm9wdGlvbnMtPnhkbF9vcHRzLAorCQkJICBOXygiaWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgbGluZXMiKSwKKwkJCSAgWERGX0lHTk9SRV9XSElURVNQQUNFLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfQklUX0YoJ2InLCAiaWdub3JlLXNwYWNlLWNoYW5nZSIsICZvcHRpb25zLT54ZGxfb3B0cywKKwkJCSAgTl8oImlnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZXNwYWNlIiksCisJCQkgIFhERl9JR05PUkVfV0hJVEVTUEFDRV9DSEFOR0UsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9CSVRfRigwLCAiaWdub3JlLXNwYWNlLWF0LWVvbCIsICZvcHRpb25zLT54ZGxfb3B0cywKKwkJCSAgTl8oImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgYXQgRU9MIiksCisJCQkgIFhERl9JR05PUkVfV0hJVEVTUEFDRV9BVF9FT0wsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9CSVRfRigwLCAiaWdub3JlLWNyLWF0LWVvbCIsICZvcHRpb25zLT54ZGxfb3B0cywKKwkJCSAgTl8oImlnbm9yZSBjYXJyaWVyLXJldHVybiBhdCB0aGUgZW5kIG9mIGxpbmUiKSwKKwkJCSAgWERGX0lHTk9SRV9DUl9BVF9FT0wsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9CSVRfRigwLCAiaWdub3JlLWJsYW5rLWxpbmVzIiwgJm9wdGlvbnMtPnhkbF9vcHRzLAorCQkJICBOXygiaWdub3JlIGNoYW5nZXMgd2hvc2UgbGluZXMgYXJlIGFsbCBibGFuayIpLAorCQkJICBYREZfSUdOT1JFX0JMQU5LX0xJTkVTLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfQklUKDAsICJpbmRlbnQtaGV1cmlzdGljIiwgJm9wdGlvbnMtPnhkbF9vcHRzLAorCQkJTl8oImhldXJpc3RpYyB0byBzaGlmdCBkaWZmIGh1bmsgYm91bmRhcmllcyBmb3IgZWFzeSByZWFkaW5nIiksCisJCQlYREZfSU5ERU5UX0hFVVJJU1RJQyksCisJCU9QVF9DQUxMQkFDS19GKDAsICJwYXRpZW5jZSIsIG9wdGlvbnMsIE5VTEwsCisJCQkgICAgICAgTl8oImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwicGF0aWVuY2UgZGlmZlwiIGFsZ29yaXRobSIpLAorCQkJICAgICAgIFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9OT0FSRywKKwkJCSAgICAgICBkaWZmX29wdF9wYXRpZW5jZSksCisJCU9QVF9CSVRPUCgwLCAiaGlzdG9ncmFtIiwgJm9wdGlvbnMtPnhkbF9vcHRzLAorCQkJICBOXygiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJoaXN0b2dyYW0gZGlmZlwiIGFsZ29yaXRobSIpLAorCQkJICBYREZfSElTVE9HUkFNX0RJRkYsIFhERl9ESUZGX0FMR09SSVRITV9NQVNLKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgImRpZmYtYWxnb3JpdGhtIiwgb3B0aW9ucywgTl8oIjxhbGdvcml0aG0+IiksCisJCQkgICAgICAgTl8oImNob29zZSBhIGRpZmYgYWxnb3JpdGhtIiksCisJCQkgICAgICAgUEFSU0VfT1BUX05PTkVHLCBkaWZmX29wdF9kaWZmX2FsZ29yaXRobSksCisJCU9QVF9DQUxMQkFDS19GKDAsICJhbmNob3JlZCIsIG9wdGlvbnMsIE5fKCI8dGV4dD4iKSwKKwkJCSAgICAgICBOXygiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJhbmNob3JlZCBkaWZmXCIgYWxnb3JpdGhtIiksCisJCQkgICAgICAgUEFSU0VfT1BUX05PTkVHLCBkaWZmX29wdF9hbmNob3JlZCksCisJCU9QVF9DQUxMQkFDS19GKDAsICJ3b3JkLWRpZmYiLCBvcHRpb25zLCBOXygiPG1vZGU+IiksCisJCQkgICAgICAgTl8oInNob3cgd29yZCBkaWZmLCB1c2luZyA8bW9kZT4gdG8gZGVsaW1pdCBjaGFuZ2VkIHdvcmRzIiksCisJCQkgICAgICAgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX09QVEFSRywgZGlmZl9vcHRfd29yZF9kaWZmKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgIndvcmQtZGlmZi1yZWdleCIsIG9wdGlvbnMsIE5fKCI8cmVnZXg+IiksCisJCQkgICAgICAgTl8oInVzZSA8cmVnZXg+IHRvIGRlY2lkZSB3aGF0IGEgd29yZCBpcyIpLAorCQkJICAgICAgIFBBUlNFX09QVF9OT05FRywgZGlmZl9vcHRfd29yZF9kaWZmX3JlZ2V4KSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgImNvbG9yLXdvcmRzIiwgb3B0aW9ucywgTl8oIjxyZWdleD4iKSwKKwkJCSAgICAgICBOXygiZXF1aXZhbGVudCB0byAtLXdvcmQtZGlmZj1jb2xvciAtLXdvcmQtZGlmZi1yZWdleD08cmVnZXg+IiksCisJCQkgICAgICAgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX09QVEFSRywgZGlmZl9vcHRfY29sb3Jfd29yZHMpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAiY29sb3ItbW92ZWQiLCBvcHRpb25zLCBOXygiPG1vZGU+IiksCisJCQkgICAgICAgTl8oIm1vdmVkIGxpbmVzIG9mIGNvZGUgYXJlIGNvbG9yZWQgZGlmZmVyZW50bHkiKSwKKwkJCSAgICAgICBQQVJTRV9PUFRfT1BUQVJHLCBkaWZmX29wdF9jb2xvcl9tb3ZlZCksCisJCU9QVF9DQUxMQkFDS19GKDAsICJjb2xvci1tb3ZlZC13cyIsIG9wdGlvbnMsIE5fKCI8bW9kZT4iKSwKKwkJCSAgICAgICBOXygiaG93IHdoaXRlIHNwYWNlcyBhcmUgaWdub3JlZCBpbiAtLWNvbG9yLW1vdmVkIiksCisJCQkgICAgICAgMCwgZGlmZl9vcHRfY29sb3JfbW92ZWRfd3MpLAorCisJCU9QVF9HUk9VUChOXygiT3RoZXIgZGlmZiBvcHRpb25zIikpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAicmVsYXRpdmUiLCBvcHRpb25zLCBOXygiPHByZWZpeD4iKSwKKwkJCSAgICAgICBOXygid2hlbiBydW4gZnJvbSBzdWJkaXIsIGV4Y2x1ZGUgY2hhbmdlcyBvdXRzaWRlIGFuZCBzaG93IHJlbGF0aXZlIHBhdGhzIiksCisJCQkgICAgICAgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX09QVEFSRywKKwkJCSAgICAgICBkaWZmX29wdF9yZWxhdGl2ZSksCisJCU9QVF9CT09MKCdhJywgInRleHQiLCAmb3B0aW9ucy0+ZmxhZ3MudGV4dCwKKwkJCSBOXygidHJlYXQgYWxsIGZpbGVzIGFzIHRleHQiKSksCisJCU9QVF9CT09MKCdSJywgTlVMTCwgJm9wdGlvbnMtPmZsYWdzLnJldmVyc2VfZGlmZiwKKwkJCSBOXygic3dhcCB0d28gaW5wdXRzLCByZXZlcnNlIHRoZSBkaWZmIikpLAorCQlPUFRfQk9PTCgwLCAiZXhpdC1jb2RlIiwgJm9wdGlvbnMtPmZsYWdzLmV4aXRfd2l0aF9zdGF0dXMsCisJCQkgTl8oImV4aXQgd2l0aCAxIGlmIHRoZXJlIHdlcmUgZGlmZmVyZW5jZXMsIDAgb3RoZXJ3aXNlIikpLAorCQlPUFRfQk9PTCgwLCAicXVpZXQiLCAmb3B0aW9ucy0+ZmxhZ3MucXVpY2ssCisJCQkgTl8oImRpc2FibGUgYWxsIG91dHB1dCBvZiB0aGUgcHJvZ3JhbSIpKSwKKwkJT1BUX0JPT0woMCwgImV4dC1kaWZmIiwgJm9wdGlvbnMtPmZsYWdzLmFsbG93X2V4dGVybmFsLAorCQkJIE5fKCJhbGxvdyBhbiBleHRlcm5hbCBkaWZmIGhlbHBlciB0byBiZSBleGVjdXRlZCIpKSwKKwkJT1BUX0NBTExCQUNLX0YoMCwgInRleHRjb252Iiwgb3B0aW9ucywgTlVMTCwKKwkJCSAgICAgICBOXygicnVuIGV4dGVybmFsIHRleHQgY29udmVyc2lvbiBmaWx0ZXJzIHdoZW4gY29tcGFyaW5nIGJpbmFyeSBmaWxlcyIpLAorCQkJICAgICAgIFBBUlNFX09QVF9OT0FSRywgZGlmZl9vcHRfdGV4dGNvbnYpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAiaWdub3JlLXN1Ym1vZHVsZXMiLCBvcHRpb25zLCBOXygiPHdoZW4+IiksCisJCQkgICAgICAgTl8oImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgaW4gdGhlIGRpZmYgZ2VuZXJhdGlvbiIpLAorCQkJICAgICAgIFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9PUFRBUkcsCisJCQkgICAgICAgZGlmZl9vcHRfaWdub3JlX3N1Ym1vZHVsZXMpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAic3VibW9kdWxlIiwgb3B0aW9ucywgTl8oIjxmb3JtYXQ+IiksCisJCQkgICAgICAgTl8oInNwZWNpZnkgaG93IGRpZmZlcmVuY2VzIGluIHN1Ym1vZHVsZXMgYXJlIHNob3duIiksCisJCQkgICAgICAgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX09QVEFSRywKKwkJCSAgICAgICBkaWZmX29wdF9zdWJtb2R1bGUpLAorCQlPUFRfU0VUX0lOVF9GKDAsICJpdGEtaW52aXNpYmxlLWluLWluZGV4IiwgJm9wdGlvbnMtPml0YV9pbnZpc2libGVfaW5faW5kZXgsCisJCQkgICAgICBOXygiaGlkZSAnZ2l0IGFkZCAtTicgZW50cmllcyBmcm9tIHRoZSBpbmRleCIpLAorCQkJICAgICAgMSwgUEFSU0VfT1BUX05PTkVHKSwKKwkJT1BUX1NFVF9JTlRfRigwLCAiaXRhLXZpc2libGUtaW4taW5kZXgiLCAmb3B0aW9ucy0+aXRhX2ludmlzaWJsZV9pbl9pbmRleCwKKwkJCSAgICAgIE5fKCJ0cmVhdCAnZ2l0IGFkZCAtTicgZW50cmllcyBhcyByZWFsIGluIHRoZSBpbmRleCIpLAorCQkJICAgICAgMCwgUEFSU0VfT1BUX05PTkVHKSwKKwkJT1BUX0NBTExCQUNLX0YoJ1MnLCBOVUxMLCBvcHRpb25zLCBOXygiPHN0cmluZz4iKSwKKwkJCSAgICAgICBOXygibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkIHN0cmluZyIpLAorCQkJICAgICAgIDAsIGRpZmZfb3B0X3BpY2theGVfc3RyaW5nKSwKKwkJT1BUX0NBTExCQUNLX0YoJ0cnLCBOVUxMLCBvcHRpb25zLCBOXygiPHJlZ2V4PiIpLAorCQkJICAgICAgIE5fKCJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgcmVnZXgiKSwKKwkJCSAgICAgICAwLCBkaWZmX29wdF9waWNrYXhlX3JlZ2V4KSwKKwkJT1BUX0JJVF9GKDAsICJwaWNrYXhlLWFsbCIsICZvcHRpb25zLT5waWNrYXhlX29wdHMsCisJCQkgIE5fKCJzaG93IGFsbCBjaGFuZ2VzIGluIHRoZSBjaGFuZ2VzZXQgd2l0aCAtUyBvciAtRyIpLAorCQkJICBESUZGX1BJQ0tBWEVfQUxMLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfQklUX0YoMCwgInBpY2theGUtcmVnZXgiLCAmb3B0aW9ucy0+cGlja2F4ZV9vcHRzLAorCQkJICBOXygidHJlYXQgPHN0cmluZz4gaW4gLVMgYXMgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9uIiksCisJCQkgIERJRkZfUElDS0FYRV9SRUdFWCwgUEFSU0VfT1BUX05PTkVHKSwKKwkJT1BUX0ZJTEVOQU1FKCdPJywgTlVMTCwgJm9wdGlvbnMtPm9yZGVyZmlsZSwKKwkJCSAgICAgTl8oImNvbnRyb2wgdGhlIG9yZGVyIGluIHdoaWNoIGZpbGVzIGFwcGVhciBpbiB0aGUgb3V0cHV0IikpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAiZmluZC1vYmplY3QiLCBvcHRpb25zLCBOXygiPG9iamVjdC1pZD4iKSwKKwkJCSAgICAgICBOXygibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkIG9iamVjdCIpLAorCQkJICAgICAgIFBBUlNFX09QVF9OT05FRywgZGlmZl9vcHRfZmluZF9vYmplY3QpLAorCQlPUFRfQ0FMTEJBQ0tfRigwLCAiZGlmZi1maWx0ZXIiLCBvcHRpb25zLCBOXygiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIiksCisJCQkgICAgICAgTl8oInNlbGVjdCBmaWxlcyBieSBkaWZmIHR5cGUiKSwKKwkJCSAgICAgICBQQVJTRV9PUFRfTk9ORUcsIGRpZmZfb3B0X2RpZmZfZmlsdGVyKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJvdXRwdXQiLCBvcHRpb25zLCBOXygiPGZpbGU+IiksCisJCSAgTl8oIk91dHB1dCB0byBhIHNwZWNpZmljIGZpbGUiKSwKKwkJICBQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIDAsIGRpZmZfb3B0X291dHB1dCB9LAorCisJCU9QVF9FTkQoKQorCX07CisKKwlBTExPQ19BUlJBWShvcHRpb25zLT5wYXJzZW9wdHMsIEFSUkFZX1NJWkUocGFyc2VvcHRzKSk7CisJbWVtY3B5KG9wdGlvbnMtPnBhcnNlb3B0cywgcGFyc2VvcHRzLCBzaXplb2YocGFyc2VvcHRzKSk7Cit9CisKK2ludCBkaWZmX29wdF9wYXJzZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgICBjb25zdCBjaGFyICoqYXYsIGludCBhYywgY29uc3QgY2hhciAqcHJlZml4KQoreworCWlmICghcHJlZml4KQorCQlwcmVmaXggPSAiIjsKKworCWFjID0gcGFyc2Vfb3B0aW9ucyhhYywgYXYsIHByZWZpeCwgb3B0aW9ucy0+cGFyc2VvcHRzLCBOVUxMLAorCQkJICAgUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggfAorCQkJICAgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTiB8CisJCQkgICBQQVJTRV9PUFRfTk9fSU5URVJOQUxfSEVMUCB8CisJCQkgICBQQVJTRV9PUFRfT05FX1NIT1QgfAorCQkJICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisKKwlyZXR1cm4gYWM7Cit9CisKK2ludCBwYXJzZV9yZW5hbWVfc2NvcmUoY29uc3QgY2hhciAqKmNwX3ApCit7CisJdW5zaWduZWQgbG9uZyBudW0sIHNjYWxlOworCWludCBjaCwgZG90OworCWNvbnN0IGNoYXIgKmNwID0gKmNwX3A7CisKKwludW0gPSAwOworCXNjYWxlID0gMTsKKwlkb3QgPSAwOworCWZvciAoOzspIHsKKwkJY2ggPSAqY3A7CisJCWlmICggIWRvdCAmJiBjaCA9PSAnLicgKSB7CisJCQlzY2FsZSA9IDE7CisJCQlkb3QgPSAxOworCQl9IGVsc2UgaWYgKCBjaCA9PSAnJScgKSB7CisJCQlzY2FsZSA9IGRvdCA/IHNjYWxlKjEwMCA6IDEwMDsKKwkJCWNwKys7CS8qICUgaXMgYWx3YXlzIGF0IHRoZSBlbmQgKi8KKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKCBjaCA+PSAnMCcgJiYgY2ggPD0gJzknICkgeworCQkJaWYgKCBzY2FsZSA8IDEwMDAwMCApIHsKKwkJCQlzY2FsZSAqPSAxMDsKKwkJCQludW0gPSAobnVtKjEwKSArIChjaC0nMCcpOworCQkJfQorCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwkJY3ArKzsKKwl9CisJKmNwX3AgPSBjcDsKKworCS8qIHVzZXIgc2F5cyBudW0gZGl2aWRlZCBieSBzY2FsZSBhbmQgd2Ugc2F5IGludGVybmFsbHkgdGhhdAorCSAqIGlzIE1BWF9TQ09SRSAqIG51bSAvIHNjYWxlLgorCSAqLworCXJldHVybiAoaW50KSgobnVtID49IHNjYWxlKSA/IE1BWF9TQ09SRSA6IChNQVhfU0NPUkUgKiBudW0gLyBzY2FsZSkpOworfQorCitzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgZGlmZl9xdWV1ZWRfZGlmZjsKKwordm9pZCBkaWZmX3Eoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxdWV1ZSwgc3RydWN0IGRpZmZfZmlsZXBhaXIgKmRwKQoreworCUFMTE9DX0dST1cocXVldWUtPnF1ZXVlLCBxdWV1ZS0+bnIgKyAxLCBxdWV1ZS0+YWxsb2MpOworCXF1ZXVlLT5xdWV1ZVtxdWV1ZS0+bnIrK10gPSBkcDsKK30KKworc3RydWN0IGRpZmZfZmlsZXBhaXIgKmRpZmZfcXVldWUoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxdWV1ZSwKKwkJCQkgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwKKwkJCQkgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bykKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqZHAgPSB4Y2FsbG9jKDEsIHNpemVvZigqZHApKTsKKwlkcC0+b25lID0gb25lOworCWRwLT50d28gPSB0d287CisJaWYgKHF1ZXVlKQorCQlkaWZmX3EocXVldWUsIGRwKTsKKwlyZXR1cm4gZHA7Cit9CisKK3ZvaWQgZGlmZl9mcmVlX2ZpbGVwYWlyKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwKQoreworCWZyZWVfZmlsZXNwZWMocC0+b25lKTsKKwlmcmVlX2ZpbGVzcGVjKHAtPnR3byk7CisJZnJlZShwKTsKK30KKworY29uc3QgY2hhciAqZGlmZl9hbGlnbmVkX2FiYnJldihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBsZW4pCit7CisJaW50IGFiYmxlbjsKKwljb25zdCBjaGFyICphYmJyZXY7CisKKwkvKiBEbyB3ZSB3YW50IGFsbCA0MCBoZXggY2hhcmFjdGVycz8gKi8KKwlpZiAobGVuID09IHRoZV9oYXNoX2FsZ28tPmhleHN6KQorCQlyZXR1cm4gb2lkX3RvX2hleChvaWQpOworCisJLyogQW4gYWJicmV2aWF0ZWQgdmFsdWUgaXMgZmluZSwgcG9zc2libHkgZm9sbG93ZWQgYnkgYW4gZWxsaXBzaXMuICovCisJYWJicmV2ID0gZGlmZl9hYmJyZXZfb2lkKG9pZCwgbGVuKTsKKworCWlmICghcHJpbnRfc2hhMV9lbGxpcHNpcygpKQorCQlyZXR1cm4gYWJicmV2OworCisJYWJibGVuID0gc3RybGVuKGFiYnJldik7CisKKwkvKgorCSAqIEluIHdlbGwtYmVoYXZlZCBjYXNlcywgd2hlcmUgdGhlIGFiYnJldmlhdGVkIHJlc3VsdCBpcyB0aGUKKwkgKiBzYW1lIGFzIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLCBhcHBlbmQgdGhyZWUgZG90cyBhZnRlciB0aGUKKwkgKiBhYmJyZXZpYXRpb24gKGhlbmNlIHRoZSB3aG9sZSBsb2dpYyBpcyBsaW1pdGVkIHRvIHRoZSBjYXNlCisJICogd2hlcmUgYWJibGVuIDwgMzcpOyB3aGVuIHRoZSBhY3R1YWwgYWJicmV2aWF0ZWQgcmVzdWx0IGlzIGEKKwkgKiBiaXQgbG9uZ2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBsZW5ndGgsIHdlIHJlZHVjZSB0aGUgbnVtYmVyCisJICogb2YgZG90cyBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIHdlbGwtYmVoYXZlZCBvbmVzLiAgSG93ZXZlciwKKwkgKiBpZiB0aGUgYWN0dWFsIGFiYnJldmlhdGlvbiBpcyBsb25nZXIgdGhhbiB0aGUgcmVxdWVzdGVkCisJICogbGVuZ3RoIGJ5IG1vcmUgdGhhbiB0aHJlZSwgd2UgZ2l2ZSB1cCBvbiBhbGlnbmluZywgYW5kIGFkZAorCSAqIHRocmVlIGRvdHMgYW55d2F5LCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBvdXRwdXQgaXMgbm90IHRoZQorCSAqIGZ1bGwgb2JqZWN0IG5hbWUuICBZZXMsIHRoaXMgbWF5IGJlIHN1Ym9wdGltYWwsIGJ1dCB0aGlzCisJICogYXBwZWFycyBvbmx5IGluICJkaWZmIC0tcmF3IC0tYWJicmV2IiBvdXRwdXQgYW5kIGl0IGlzIG5vdAorCSAqIHdvcnRoIHRoZSBlZmZvcnQgdG8gY2hhbmdlIGl0IG5vdy4gIE5vdGUgdGhhdCB0aGlzIHdvdWxkCisJICogbGlrZWx5IHRvIHdvcmsgZmluZSB3aGVuIHRoZSBhdXRvbWF0aWMgc2l6aW5nIG9mIGRlZmF1bHQKKwkgKiBhYmJyZXZpYXRpb24gbGVuZ3RoIGlzIHVzZWQtLXdlIHdvdWxkIGJlIGZlZCAtMSBpbiAibGVuIiBpbgorCSAqIHRoYXQgY2FzZSwgYW5kIHdpbGwgZW5kIHVwIGFsd2F5cyBhcHBlbmRpbmcgdGhyZWUtZG90cywgYnV0CisJICogdGhlIGF1dG9tYXRpYyBzaXppbmcgaXMgc3VwcG9zZWQgdG8gZ2l2ZSBhYmJsZW4gdGhhdCBlbnN1cmVzCisJICogdW5pcXVlbmVzcyBhY3Jvc3MgYWxsIG9iamVjdHMgKHN0YXRpc3RpY2FsbHkgc3BlYWtpbmcpLgorCSAqLworCWlmIChhYmJsZW4gPCB0aGVfaGFzaF9hbGdvLT5oZXhzeiAtIDMpIHsKKwkJc3RhdGljIGNoYXIgaGV4W0dJVF9NQVhfSEVYU1ogKyAxXTsKKwkJaWYgKGxlbiA8IGFiYmxlbiAmJiBhYmJsZW4gPD0gbGVuICsgMikKKwkJCXhzbnByaW50ZihoZXgsIHNpemVvZihoZXgpLCAiJXMlLipzIiwgYWJicmV2LCBsZW4rMy1hYmJsZW4sICIuLiIpOworCQllbHNlCisJCQl4c25wcmludGYoaGV4LCBzaXplb2YoaGV4KSwgIiVzLi4uIiwgYWJicmV2KTsKKwkJcmV0dXJuIGhleDsKKwl9CisKKwlyZXR1cm4gb2lkX3RvX2hleChvaWQpOworfQorCitzdGF0aWMgdm9pZCBkaWZmX2ZsdXNoX3JhdyhzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCWludCBsaW5lX3Rlcm1pbmF0aW9uID0gb3B0LT5saW5lX3Rlcm1pbmF0aW9uOworCWludCBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uID0gbGluZV90ZXJtaW5hdGlvbiA/ICdcdCcgOiAnXDAnOworCisJZnByaW50ZihvcHQtPmZpbGUsICIlcyIsIGRpZmZfbGluZV9wcmVmaXgob3B0KSk7CisJaWYgKCEob3B0LT5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfTkFNRV9TVEFUVVMpKSB7CisJCWZwcmludGYob3B0LT5maWxlLCAiOiUwNm8gJTA2byAlcyAiLCBwLT5vbmUtPm1vZGUsIHAtPnR3by0+bW9kZSwKKwkJCWRpZmZfYWxpZ25lZF9hYmJyZXYoJnAtPm9uZS0+b2lkLCBvcHQtPmFiYnJldikpOworCQlmcHJpbnRmKG9wdC0+ZmlsZSwgIiVzICIsCisJCQlkaWZmX2FsaWduZWRfYWJicmV2KCZwLT50d28tPm9pZCwgb3B0LT5hYmJyZXYpKTsKKwl9CisJaWYgKHAtPnNjb3JlKSB7CisJCWZwcmludGYob3B0LT5maWxlLCAiJWMlMDNkJWMiLCBwLT5zdGF0dXMsIHNpbWlsYXJpdHlfaW5kZXgocCksCisJCQlpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uKTsKKwl9IGVsc2UgeworCQlmcHJpbnRmKG9wdC0+ZmlsZSwgIiVjJWMiLCBwLT5zdGF0dXMsIGludGVyX25hbWVfdGVybWluYXRpb24pOworCX0KKworCWlmIChwLT5zdGF0dXMgPT0gRElGRl9TVEFUVVNfQ09QSUVEIHx8CisJICAgIHAtPnN0YXR1cyA9PSBESUZGX1NUQVRVU19SRU5BTUVEKSB7CisJCWNvbnN0IGNoYXIgKm5hbWVfYSwgKm5hbWVfYjsKKwkJbmFtZV9hID0gcC0+b25lLT5wYXRoOworCQluYW1lX2IgPSBwLT50d28tPnBhdGg7CisJCXN0cmlwX3ByZWZpeChvcHQtPnByZWZpeF9sZW5ndGgsICZuYW1lX2EsICZuYW1lX2IpOworCQl3cml0ZV9uYW1lX3F1b3RlZChuYW1lX2EsIG9wdC0+ZmlsZSwgaW50ZXJfbmFtZV90ZXJtaW5hdGlvbik7CisJCXdyaXRlX25hbWVfcXVvdGVkKG5hbWVfYiwgb3B0LT5maWxlLCBsaW5lX3Rlcm1pbmF0aW9uKTsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyICpuYW1lX2EsICpuYW1lX2I7CisJCW5hbWVfYSA9IHAtPm9uZS0+bW9kZSA/IHAtPm9uZS0+cGF0aCA6IHAtPnR3by0+cGF0aDsKKwkJbmFtZV9iID0gTlVMTDsKKwkJc3RyaXBfcHJlZml4KG9wdC0+cHJlZml4X2xlbmd0aCwgJm5hbWVfYSwgJm5hbWVfYik7CisJCXdyaXRlX25hbWVfcXVvdGVkKG5hbWVfYSwgb3B0LT5maWxlLCBsaW5lX3Rlcm1pbmF0aW9uKTsKKwl9Cit9CisKK2ludCBkaWZmX3VubW9kaWZpZWRfcGFpcihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCkKK3sKKwkvKiBUaGlzIGZ1bmN0aW9uIGlzIHdyaXR0ZW4gc3RyaWN0ZXIgdGhhbiBuZWNlc3NhcnkgdG8gc3VwcG9ydAorCSAqIHRoZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQgdHJhbnNmb3JtZXJzLCBidXQgdGhlIGlkZWEgaXMgdG8KKwkgKiBsZXQgdHJhbnNmb3JtZXJzIHRvIHByb2R1Y2UgZGlmZl9maWxlcGFpcnMgYW55IHdheSB0aGV5IHdhbnQsCisJICogYW5kIGZpbHRlciBhbmQgY2xlYW4gdGhlbSB1cCBoZXJlIGJlZm9yZSBwcm9kdWNpbmcgdGhlIG91dHB1dC4KKwkgKi8KKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lID0gcC0+b25lLCAqdHdvID0gcC0+dHdvOworCisJaWYgKERJRkZfUEFJUl9VTk1FUkdFRChwKSkKKwkJcmV0dXJuIDA7IC8qIHVubWVyZ2VkIGlzIGludGVyZXN0aW5nICovCisKKwkvKiBkZWxldGlvbiwgYWRkaXRpb24sIG1vZGUgb3IgdHlwZSBjaGFuZ2UKKwkgKiBhbmQgcmVuYW1lIGFyZSBhbGwgaW50ZXJlc3RpbmcuCisJICovCisJaWYgKERJRkZfRklMRV9WQUxJRChvbmUpICE9IERJRkZfRklMRV9WQUxJRCh0d28pIHx8CisJICAgIERJRkZfUEFJUl9NT0RFX0NIQU5HRUQocCkgfHwKKwkgICAgc3RyY21wKG9uZS0+cGF0aCwgdHdvLT5wYXRoKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBib3RoIGFyZSB2YWxpZCBhbmQgcG9pbnQgYXQgdGhlIHNhbWUgcGF0aC4gIHRoYXQgaXMsIHdlIGFyZQorCSAqIGRlYWxpbmcgd2l0aCBhIGNoYW5nZS4KKwkgKi8KKwlpZiAob25lLT5vaWRfdmFsaWQgJiYgdHdvLT5vaWRfdmFsaWQgJiYKKwkgICAgb2lkZXEoJm9uZS0+b2lkLCAmdHdvLT5vaWQpICYmCisJICAgICFvbmUtPmRpcnR5X3N1Ym1vZHVsZSAmJiAhdHdvLT5kaXJ0eV9zdWJtb2R1bGUpCisJCXJldHVybiAxOyAvKiBubyBjaGFuZ2UgKi8KKwlpZiAoIW9uZS0+b2lkX3ZhbGlkICYmICF0d28tPm9pZF92YWxpZCkKKwkJcmV0dXJuIDE7IC8qIGJvdGggbG9vayBhdCB0aGUgc2FtZSBmaWxlIG9uIHRoZSBmaWxlc3lzdGVtLiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaWZmX2ZsdXNoX3BhdGNoKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvKQoreworCWlmIChkaWZmX3VubW9kaWZpZWRfcGFpcihwKSkKKwkJcmV0dXJuOworCisJaWYgKChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJiBTX0lTRElSKHAtPm9uZS0+bW9kZSkpIHx8CisJICAgIChESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSAmJiBTX0lTRElSKHAtPnR3by0+bW9kZSkpKQorCQlyZXR1cm47IC8qIG5vIHRyZWUgZGlmZnMgaW4gcGF0Y2ggZm9ybWF0ICovCisKKwlydW5fZGlmZihwLCBvKTsKK30KKworc3RhdGljIHZvaWQgZGlmZl9mbHVzaF9zdGF0KHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJICAgIHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCkKK3sKKwlpZiAoZGlmZl91bm1vZGlmaWVkX3BhaXIocCkpCisJCXJldHVybjsKKworCWlmICgoRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkgJiYgU19JU0RJUihwLT5vbmUtPm1vZGUpKSB8fAorCSAgICAoRElGRl9GSUxFX1ZBTElEKHAtPnR3bykgJiYgU19JU0RJUihwLT50d28tPm1vZGUpKSkKKwkJcmV0dXJuOyAvKiBubyB1c2VmdWwgc3RhdCBmb3IgdHJlZSBkaWZmcyAqLworCisJcnVuX2RpZmZzdGF0KHAsIG8sIGRpZmZzdGF0KTsKK30KKworc3RhdGljIHZvaWQgZGlmZl9mbHVzaF9jaGVja2RpZmYoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsCisJCXN0cnVjdCBkaWZmX29wdGlvbnMgKm8pCit7CisJaWYgKGRpZmZfdW5tb2RpZmllZF9wYWlyKHApKQorCQlyZXR1cm47CisKKwlpZiAoKERJRkZfRklMRV9WQUxJRChwLT5vbmUpICYmIFNfSVNESVIocC0+b25lLT5tb2RlKSkgfHwKKwkgICAgKERJRkZfRklMRV9WQUxJRChwLT50d28pICYmIFNfSVNESVIocC0+dHdvLT5tb2RlKSkpCisJCXJldHVybjsgLyogbm90aGluZyB0byBjaGVjayBpbiB0cmVlIGRpZmZzICovCisKKwlydW5fY2hlY2tkaWZmKHAsIG8pOworfQorCitpbnQgZGlmZl9xdWV1ZV9pc19lbXB0eSh2b2lkKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKQorCQlpZiAoIWRpZmZfdW5tb2RpZmllZF9wYWlyKHEtPnF1ZXVlW2ldKSkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisjaWYgRElGRl9ERUJVRwordm9pZCBkaWZmX2RlYnVnX2ZpbGVzcGVjKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzLCBpbnQgeCwgY29uc3QgY2hhciAqb25lKQoreworCWZwcmludGYoc3RkZXJyLCAicXVldWVbJWRdICVzICglcykgJXMgJTA2byAlc1xuIiwKKwkJeCwgb25lID8gb25lIDogIiIsCisJCXMtPnBhdGgsCisJCURJRkZfRklMRV9WQUxJRChzKSA/ICJ2YWxpZCIgOiAiaW52YWxpZCIsCisJCXMtPm1vZGUsCisJCXMtPm9pZF92YWxpZCA/IG9pZF90b19oZXgoJnMtPm9pZCkgOiAiIik7CisJZnByaW50ZihzdGRlcnIsICJxdWV1ZVslZF0gJXMgc2l6ZSAlbHVcbiIsCisJCXgsIG9uZSA/IG9uZSA6ICIiLAorCQlzLT5zaXplKTsKK30KKwordm9pZCBkaWZmX2RlYnVnX2ZpbGVwYWlyKGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLCBpbnQgaSkKK3sKKwlkaWZmX2RlYnVnX2ZpbGVzcGVjKHAtPm9uZSwgaSwgIm9uZSIpOworCWRpZmZfZGVidWdfZmlsZXNwZWMocC0+dHdvLCBpLCAidHdvIik7CisJZnByaW50ZihzdGRlcnIsICJzY29yZSAlZCwgc3RhdHVzICVjIHJlbmFtZV91c2VkICVkIGJyb2tlbiAlZFxuIiwKKwkJcC0+c2NvcmUsIHAtPnN0YXR1cyA/IHAtPnN0YXR1cyA6ICc/JywKKwkJcC0+b25lLT5yZW5hbWVfdXNlZCwgcC0+YnJva2VuX3BhaXIpOworfQorCit2b2lkIGRpZmZfZGVidWdfcXVldWUoY29uc3QgY2hhciAqbXNnLCBzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEpCit7CisJaW50IGk7CisJaWYgKG1zZykKKwkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnKTsKKwlmcHJpbnRmKHN0ZGVyciwgInEtPm5yID0gJWRcbiIsIHEtPm5yKTsKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlkaWZmX2RlYnVnX2ZpbGVwYWlyKHAsIGkpOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBkaWZmX3Jlc29sdmVfcmVuYW1lX2NvcHkodm9pZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcDsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEgPSAmZGlmZl9xdWV1ZWRfZGlmZjsKKworCWRpZmZfZGVidWdfcXVldWUoInJlc29sdmUtcmVuYW1lLWNvcHkiLCBxKTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXAgPSBxLT5xdWV1ZVtpXTsKKwkJcC0+c3RhdHVzID0gMDsgLyogdW5kZWNpZGVkICovCisJCWlmIChESUZGX1BBSVJfVU5NRVJHRUQocCkpCisJCQlwLT5zdGF0dXMgPSBESUZGX1NUQVRVU19VTk1FUkdFRDsKKwkJZWxzZSBpZiAoIURJRkZfRklMRV9WQUxJRChwLT5vbmUpKQorCQkJcC0+c3RhdHVzID0gRElGRl9TVEFUVVNfQURERUQ7CisJCWVsc2UgaWYgKCFESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkKKwkJCXAtPnN0YXR1cyA9IERJRkZfU1RBVFVTX0RFTEVURUQ7CisJCWVsc2UgaWYgKERJRkZfUEFJUl9UWVBFX0NIQU5HRUQocCkpCisJCQlwLT5zdGF0dXMgPSBESUZGX1NUQVRVU19UWVBFX0NIQU5HRUQ7CisKKwkJLyogZnJvbSB0aGlzIHBvaW50IG9uLCB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcGFpcgorCQkgKiB3aG9zZSBib3RoIHNpZGVzIGFyZSB2YWxpZCBhbmQgb2YgdGhlIHNhbWUgdHlwZSwgaS5lLgorCQkgKiBlaXRoZXIgaW4tcGxhY2UgZWRpdCBvciByZW5hbWUvY29weSBlZGl0LgorCQkgKi8KKwkJZWxzZSBpZiAoRElGRl9QQUlSX1JFTkFNRShwKSkgeworCQkJLyoKKwkJCSAqIEEgcmVuYW1lIG1pZ2h0IGhhdmUgcmUtY29ubmVjdGVkIGEgYnJva2VuCisJCQkgKiBwYWlyIHVwLCBjYXVzaW5nIHRoZSBwYXRobmFtZXMgdG8gYmUgdGhlCisJCQkgKiBzYW1lIGFnYWluLiBJZiBzbywgdGhhdCdzIG5vdCBhIHJlbmFtZSBhdAorCQkJICogYWxsLCBqdXN0IGEgbW9kaWZpY2F0aW9uLi4KKwkJCSAqCisJCQkgKiBPdGhlcndpc2UsIHNlZSBpZiB0aGlzIHNvdXJjZSB3YXMgdXNlZCBmb3IKKwkJCSAqIG11bHRpcGxlIHJlbmFtZXMsIGluIHdoaWNoIGNhc2Ugd2UgZGVjcmVtZW50CisJCQkgKiB0aGUgY291bnQsIGFuZCBjYWxsIGl0IGEgY29weS4KKwkJCSAqLworCQkJaWYgKCFzdHJjbXAocC0+b25lLT5wYXRoLCBwLT50d28tPnBhdGgpKQorCQkJCXAtPnN0YXR1cyA9IERJRkZfU1RBVFVTX01PRElGSUVEOworCQkJZWxzZSBpZiAoLS1wLT5vbmUtPnJlbmFtZV91c2VkID4gMCkKKwkJCQlwLT5zdGF0dXMgPSBESUZGX1NUQVRVU19DT1BJRUQ7CisJCQllbHNlCisJCQkJcC0+c3RhdHVzID0gRElGRl9TVEFUVVNfUkVOQU1FRDsKKwkJfQorCQllbHNlIGlmICghb2lkZXEoJnAtPm9uZS0+b2lkLCAmcC0+dHdvLT5vaWQpIHx8CisJCQkgcC0+b25lLT5tb2RlICE9IHAtPnR3by0+bW9kZSB8fAorCQkJIHAtPm9uZS0+ZGlydHlfc3VibW9kdWxlIHx8CisJCQkgcC0+dHdvLT5kaXJ0eV9zdWJtb2R1bGUgfHwKKwkJCSBpc19udWxsX29pZCgmcC0+b25lLT5vaWQpKQorCQkJcC0+c3RhdHVzID0gRElGRl9TVEFUVVNfTU9ESUZJRUQ7CisJCWVsc2UgeworCQkJLyogVGhpcyBpcyBhICJuby1jaGFuZ2UiIGVudHJ5IGFuZCBzaG91bGQgbm90CisJCQkgKiBoYXBwZW4gYW55bW9yZSwgYnV0IHByZXBhcmUgZm9yIGJyb2tlbiBjYWxsZXJzLgorCQkJICovCisJCQllcnJvcigiZmVlZGluZyB1bm1vZGlmaWVkICVzIHRvIGRpZmZjb3JlIiwKKwkJCSAgICAgIHAtPm9uZS0+cGF0aCk7CisJCQlwLT5zdGF0dXMgPSBESUZGX1NUQVRVU19VTktOT1dOOworCQl9CisJfQorCWRpZmZfZGVidWdfcXVldWUoInJlc29sdmUtcmVuYW1lLWNvcHkgZG9uZSIsIHEpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3BhaXJfc3RhdHVzKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwKQoreworCXN3aXRjaCAocC0+c3RhdHVzKSB7CisJY2FzZSBESUZGX1NUQVRVU19VTktOT1dOOgorCQlyZXR1cm4gMDsKKwljYXNlIDA6CisJCWRpZSgiaW50ZXJuYWwgZXJyb3IgaW4gZGlmZi1yZXNvbHZlLXJlbmFtZS1jb3B5Iik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBmbHVzaF9vbmVfcGFpcihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCWludCBmbXQgPSBvcHQtPm91dHB1dF9mb3JtYXQ7CisKKwlpZiAoZm10ICYgRElGRl9GT1JNQVRfQ0hFQ0tESUZGKQorCQlkaWZmX2ZsdXNoX2NoZWNrZGlmZihwLCBvcHQpOworCWVsc2UgaWYgKGZtdCAmIChESUZGX0ZPUk1BVF9SQVcgfCBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUykpCisJCWRpZmZfZmx1c2hfcmF3KHAsIG9wdCk7CisJZWxzZSBpZiAoZm10ICYgRElGRl9GT1JNQVRfTkFNRSkgeworCQljb25zdCBjaGFyICpuYW1lX2EsICpuYW1lX2I7CisJCW5hbWVfYSA9IHAtPnR3by0+cGF0aDsKKwkJbmFtZV9iID0gTlVMTDsKKwkJc3RyaXBfcHJlZml4KG9wdC0+cHJlZml4X2xlbmd0aCwgJm5hbWVfYSwgJm5hbWVfYik7CisJCWZwcmludGYob3B0LT5maWxlLCAiJXMiLCBkaWZmX2xpbmVfcHJlZml4KG9wdCkpOworCQl3cml0ZV9uYW1lX3F1b3RlZChuYW1lX2EsIG9wdC0+ZmlsZSwgb3B0LT5saW5lX3Rlcm1pbmF0aW9uKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZmlsZV9tb2RlX25hbWUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LCBjb25zdCBjaGFyICpuZXdkZWxldGUsIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpmcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaWYgKGZzLT5tb2RlKQorCQlzdHJidWZfYWRkZigmc2IsICIgJXMgbW9kZSAlMDZvICIsIG5ld2RlbGV0ZSwgZnMtPm1vZGUpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoJnNiLCAiICVzICIsIG5ld2RlbGV0ZSk7CisKKwlxdW90ZV9jX3N0eWxlKGZzLT5wYXRoLCAmc2IsIE5VTEwsIDApOworCXN0cmJ1Zl9hZGRjaCgmc2IsICdcbicpOworCWVtaXRfZGlmZl9zeW1ib2wob3B0LCBESUZGX1NZTUJPTF9TVU1NQVJZLAorCQkJIHNiLmJ1Ziwgc2IubGVuLCAwKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgdm9pZCBzaG93X21vZGVfY2hhbmdlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsCisJCWludCBzaG93X25hbWUpCit7CisJaWYgKHAtPm9uZS0+bW9kZSAmJiBwLT50d28tPm1vZGUgJiYgcC0+b25lLT5tb2RlICE9IHAtPnR3by0+bW9kZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRmKCZzYiwgIiBtb2RlIGNoYW5nZSAlMDZvID0+ICUwNm8iLAorCQkJICAgIHAtPm9uZS0+bW9kZSwgcC0+dHdvLT5tb2RlKTsKKwkJaWYgKHNob3dfbmFtZSkgeworCQkJc3RyYnVmX2FkZGNoKCZzYiwgJyAnKTsKKwkJCXF1b3RlX2Nfc3R5bGUocC0+dHdvLT5wYXRoLCAmc2IsIE5VTEwsIDApOworCQl9CisJCXN0cmJ1Zl9hZGRjaCgmc2IsICdcbicpOworCQllbWl0X2RpZmZfc3ltYm9sKG9wdCwgRElGRl9TWU1CT0xfU1VNTUFSWSwKKwkJCQkgc2IuYnVmLCBzYi5sZW4sIDApOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19yZW5hbWVfY29weShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIGNvbnN0IGNoYXIgKnJlbmFtZWNvcHksCisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWVzID0gU1RSQlVGX0lOSVQ7CisKKwlwcHJpbnRfcmVuYW1lKCZuYW1lcywgcC0+b25lLT5wYXRoLCBwLT50d28tPnBhdGgpOworCXN0cmJ1Zl9hZGRmKCZzYiwgIiAlcyAlcyAoJWQlJSlcbiIsCisJCSAgICByZW5hbWVjb3B5LCBuYW1lcy5idWYsIHNpbWlsYXJpdHlfaW5kZXgocCkpOworCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lcyk7CisJZW1pdF9kaWZmX3N5bWJvbChvcHQsIERJRkZfU1lNQk9MX1NVTU1BUlksCisJCQkJIHNiLmJ1Ziwgc2IubGVuLCAwKTsKKwlzaG93X21vZGVfY2hhbmdlKG9wdCwgcCwgMCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RhdGljIHZvaWQgZGlmZl9zdW1tYXJ5KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnApCit7CisJc3dpdGNoKHAtPnN0YXR1cykgeworCWNhc2UgRElGRl9TVEFUVVNfREVMRVRFRDoKKwkJc2hvd19maWxlX21vZGVfbmFtZShvcHQsICJkZWxldGUiLCBwLT5vbmUpOworCQlicmVhazsKKwljYXNlIERJRkZfU1RBVFVTX0FEREVEOgorCQlzaG93X2ZpbGVfbW9kZV9uYW1lKG9wdCwgImNyZWF0ZSIsIHAtPnR3byk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TVEFUVVNfQ09QSUVEOgorCQlzaG93X3JlbmFtZV9jb3B5KG9wdCwgImNvcHkiLCBwKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NUQVRVU19SRU5BTUVEOgorCQlzaG93X3JlbmFtZV9jb3B5KG9wdCwgInJlbmFtZSIsIHApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAocC0+c2NvcmUpIHsKKwkJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCAiIHJld3JpdGUgIik7CisJCQlxdW90ZV9jX3N0eWxlKHAtPnR3by0+cGF0aCwgJnNiLCBOVUxMLCAwKTsKKwkJCXN0cmJ1Zl9hZGRmKCZzYiwgIiAoJWQlJSlcbiIsIHNpbWlsYXJpdHlfaW5kZXgocCkpOworCQkJZW1pdF9kaWZmX3N5bWJvbChvcHQsIERJRkZfU1lNQk9MX1NVTU1BUlksCisJCQkJCSBzYi5idWYsIHNiLmxlbiwgMCk7CisJCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQl9CisJCXNob3dfbW9kZV9jaGFuZ2Uob3B0LCBwLCAhcC0+c2NvcmUpOworCQlicmVhazsKKwl9Cit9CisKK3N0cnVjdCBwYXRjaF9pZF90IHsKKwlnaXRfaGFzaF9jdHggKmN0eDsKKwlpbnQgcGF0Y2hsZW47Cit9OworCitzdGF0aWMgaW50IHJlbW92ZV9zcGFjZShjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWludCBpOworCWNoYXIgKmRzdCA9IGxpbmU7CisJdW5zaWduZWQgY2hhciBjOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAoIWlzc3BhY2UoKGMgPSBsaW5lW2ldKSkpCisJCQkqZHN0KysgPSBjOworCisJcmV0dXJuIGRzdCAtIGxpbmU7Cit9CisKK3ZvaWQgZmx1c2hfb25lX2h1bmsoc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0LCBnaXRfaGFzaF9jdHggKmN0eCkKK3sKKwl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9SQVdTWl07CisJdW5zaWduZWQgc2hvcnQgY2FycnkgPSAwOworCWludCBpOworCisJdGhlX2hhc2hfYWxnby0+ZmluYWxfZm4oaGFzaCwgY3R4KTsKKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKGN0eCk7CisJLyogMjAtYnl0ZSBzdW0sIHdpdGggY2FycnkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdGhlX2hhc2hfYWxnby0+cmF3c3o7ICsraSkgeworCQljYXJyeSArPSByZXN1bHQtPmhhc2hbaV0gKyBoYXNoW2ldOworCQlyZXN1bHQtPmhhc2hbaV0gPSBjYXJyeTsKKwkJY2FycnkgPj49IDg7CisJfQorfQorCitzdGF0aWMgdm9pZCBwYXRjaF9pZF9jb25zdW1lKHZvaWQgKnByaXYsIGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXN0cnVjdCBwYXRjaF9pZF90ICpkYXRhID0gcHJpdjsKKwlpbnQgbmV3X2xlbjsKKworCW5ld19sZW4gPSByZW1vdmVfc3BhY2UobGluZSwgbGVuKTsKKworCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbihkYXRhLT5jdHgsIGxpbmUsIG5ld19sZW4pOworCWRhdGEtPnBhdGNobGVuICs9IG5ld19sZW47Cit9CisKK3N0YXRpYyB2b2lkIHBhdGNoX2lkX2FkZF9zdHJpbmcoZ2l0X2hhc2hfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oY3R4LCBzdHIsIHN0cmxlbihzdHIpKTsKK30KKworc3RhdGljIHZvaWQgcGF0Y2hfaWRfYWRkX21vZGUoZ2l0X2hhc2hfY3R4ICpjdHgsIHVuc2lnbmVkIG1vZGUpCit7CisJLyogbGFyZ2UgZW5vdWdoIGZvciAyXjMyIGluIG9jdGFsICovCisJY2hhciBidWZbMTJdOworCWludCBsZW4gPSB4c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwNm8iLCBtb2RlKTsKKwl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oY3R4LCBidWYsIGxlbik7Cit9CisKKy8qIHJldHVybnMgMCB1cG9uIHN1Y2Nlc3MsIGFuZCB3cml0ZXMgcmVzdWx0IGludG8gb2lkICovCitzdGF0aWMgaW50IGRpZmZfZ2V0X3BhdGNoX2lkKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGRpZmZfaGVhZGVyX29ubHksIGludCBzdGFibGUpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJaW50IGk7CisJZ2l0X2hhc2hfY3R4IGN0eDsKKwlzdHJ1Y3QgcGF0Y2hfaWRfdCBkYXRhOworCisJdGhlX2hhc2hfYWxnby0+aW5pdF9mbigmY3R4KTsKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcGF0Y2hfaWRfdCkpOworCWRhdGEuY3R4ID0gJmN0eDsKKwlvaWRjbHIob2lkKTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXhwcGFyYW1fdCB4cHA7CisJCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKwkJbW1maWxlX3QgbWYxLCBtZjI7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCWludCBsZW4xLCBsZW4yOworCisJCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CisJCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCQlpZiAocC0+c3RhdHVzID09IDApCisJCQlyZXR1cm4gZXJyb3IoImludGVybmFsIGRpZmYgc3RhdHVzIGVycm9yIik7CisJCWlmIChwLT5zdGF0dXMgPT0gRElGRl9TVEFUVVNfVU5LTk9XTikKKwkJCWNvbnRpbnVlOworCQlpZiAoZGlmZl91bm1vZGlmaWVkX3BhaXIocCkpCisJCQljb250aW51ZTsKKwkJaWYgKChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJiBTX0lTRElSKHAtPm9uZS0+bW9kZSkpIHx8CisJCSAgICAoRElGRl9GSUxFX1ZBTElEKHAtPnR3bykgJiYgU19JU0RJUihwLT50d28tPm1vZGUpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoRElGRl9QQUlSX1VOTUVSR0VEKHApKQorCQkJY29udGludWU7CisKKwkJZGlmZl9maWxsX29pZF9pbmZvKHAtPm9uZSwgb3B0aW9ucy0+cmVwby0+aW5kZXgpOworCQlkaWZmX2ZpbGxfb2lkX2luZm8ocC0+dHdvLCBvcHRpb25zLT5yZXBvLT5pbmRleCk7CisKKwkJbGVuMSA9IHJlbW92ZV9zcGFjZShwLT5vbmUtPnBhdGgsIHN0cmxlbihwLT5vbmUtPnBhdGgpKTsKKwkJbGVuMiA9IHJlbW92ZV9zcGFjZShwLT50d28tPnBhdGgsIHN0cmxlbihwLT50d28tPnBhdGgpKTsKKwkJcGF0Y2hfaWRfYWRkX3N0cmluZygmY3R4LCAiZGlmZi0tZ2l0Iik7CisJCXBhdGNoX2lkX2FkZF9zdHJpbmcoJmN0eCwgImEvIik7CisJCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmY3R4LCBwLT5vbmUtPnBhdGgsIGxlbjEpOworCQlwYXRjaF9pZF9hZGRfc3RyaW5nKCZjdHgsICJiLyIpOworCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmN0eCwgcC0+dHdvLT5wYXRoLCBsZW4yKTsKKworCQlpZiAocC0+b25lLT5tb2RlID09IDApIHsKKwkJCXBhdGNoX2lkX2FkZF9zdHJpbmcoJmN0eCwgIm5ld2ZpbGVtb2RlIik7CisJCQlwYXRjaF9pZF9hZGRfbW9kZSgmY3R4LCBwLT50d28tPm1vZGUpOworCQkJcGF0Y2hfaWRfYWRkX3N0cmluZygmY3R4LCAiLS0tL2Rldi9udWxsIik7CisJCQlwYXRjaF9pZF9hZGRfc3RyaW5nKCZjdHgsICIrKytiLyIpOworCQkJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjdHgsIHAtPnR3by0+cGF0aCwgbGVuMik7CisJCX0gZWxzZSBpZiAocC0+dHdvLT5tb2RlID09IDApIHsKKwkJCXBhdGNoX2lkX2FkZF9zdHJpbmcoJmN0eCwgImRlbGV0ZWRmaWxlbW9kZSIpOworCQkJcGF0Y2hfaWRfYWRkX21vZGUoJmN0eCwgcC0+b25lLT5tb2RlKTsKKwkJCXBhdGNoX2lkX2FkZF9zdHJpbmcoJmN0eCwgIi0tLWEvIik7CisJCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmN0eCwgcC0+b25lLT5wYXRoLCBsZW4xKTsKKwkJCXBhdGNoX2lkX2FkZF9zdHJpbmcoJmN0eCwgIisrKy9kZXYvbnVsbCIpOworCQl9IGVsc2UgeworCQkJcGF0Y2hfaWRfYWRkX3N0cmluZygmY3R4LCAiLS0tYS8iKTsKKwkJCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmY3R4LCBwLT5vbmUtPnBhdGgsIGxlbjEpOworCQkJcGF0Y2hfaWRfYWRkX3N0cmluZygmY3R4LCAiKysrYi8iKTsKKwkJCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmY3R4LCBwLT50d28tPnBhdGgsIGxlbjIpOworCQl9CisKKwkJaWYgKGRpZmZfaGVhZGVyX29ubHkpCisJCQljb250aW51ZTsKKworCQlpZiAoZmlsbF9tbWZpbGUob3B0aW9ucy0+cmVwbywgJm1mMSwgcC0+b25lKSA8IDAgfHwKKwkJICAgIGZpbGxfbW1maWxlKG9wdGlvbnMtPnJlcG8sICZtZjIsIHAtPnR3bykgPCAwKQorCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gcmVhZCBmaWxlcyB0byBkaWZmIik7CisKKwkJaWYgKGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KG9wdGlvbnMtPnJlcG8sIHAtPm9uZSkgfHwKKwkJICAgIGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KG9wdGlvbnMtPnJlcG8sIHAtPnR3bykpIHsKKwkJCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmY3R4LCBvaWRfdG9faGV4KCZwLT5vbmUtPm9pZCksCisJCQkJCXRoZV9oYXNoX2FsZ28tPmhleHN6KTsKKwkJCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmY3R4LCBvaWRfdG9faGV4KCZwLT50d28tPm9pZCksCisJCQkJCXRoZV9oYXNoX2FsZ28tPmhleHN6KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJeHBwLmZsYWdzID0gMDsKKwkJeGVjZmcuY3R4bGVuID0gMzsKKwkJeGVjZmcuZmxhZ3MgPSAwOworCQlpZiAoeGRpX2RpZmZfb3V0ZigmbWYxLCAmbWYyLCBkaXNjYXJkX2h1bmtfbGluZSwKKwkJCQkgIHBhdGNoX2lkX2NvbnN1bWUsICZkYXRhLCAmeHBwLCAmeGVjZmcpKQorCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gZ2VuZXJhdGUgcGF0Y2gtaWQgZGlmZiBmb3IgJXMiLAorCQkJCSAgICAgcC0+b25lLT5wYXRoKTsKKworCQlpZiAoc3RhYmxlKQorCQkJZmx1c2hfb25lX2h1bmsob2lkLCAmY3R4KTsKKwl9CisKKwlpZiAoIXN0YWJsZSkKKwkJdGhlX2hhc2hfYWxnby0+ZmluYWxfZm4ob2lkLT5oYXNoLCAmY3R4KTsKKworCXJldHVybiAwOworfQorCitpbnQgZGlmZl9mbHVzaF9wYXRjaF9pZChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBkaWZmX2hlYWRlcl9vbmx5LCBpbnQgc3RhYmxlKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCWludCBpOworCWludCByZXN1bHQgPSBkaWZmX2dldF9wYXRjaF9pZChvcHRpb25zLCBvaWQsIGRpZmZfaGVhZGVyX29ubHksIHN0YWJsZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykKKwkJZGlmZl9mcmVlX2ZpbGVwYWlyKHEtPnF1ZXVlW2ldKTsKKworCWZyZWUocS0+cXVldWUpOworCURJRkZfUVVFVUVfQ0xFQVIocSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGlzX3N1bW1hcnlfZW1wdHkoY29uc3Qgc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKworCQlzd2l0Y2ggKHAtPnN0YXR1cykgeworCQljYXNlIERJRkZfU1RBVFVTX0RFTEVURUQ6CisJCWNhc2UgRElGRl9TVEFUVVNfQURERUQ6CisJCWNhc2UgRElGRl9TVEFUVVNfQ09QSUVEOgorCQljYXNlIERJRkZfU1RBVFVTX1JFTkFNRUQ6CisJCQlyZXR1cm4gMDsKKwkJZGVmYXVsdDoKKwkJCWlmIChwLT5zY29yZSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmIChwLT5vbmUtPm1vZGUgJiYgcC0+dHdvLT5tb2RlICYmCisJCQkgICAgcC0+b25lLT5tb2RlICE9IHAtPnR3by0+bW9kZSkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgY2hhciByZW5hbWVfbGltaXRfd2FybmluZ1tdID0KK05fKCJpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24gd2FzIHNraXBwZWQgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIpOworCitzdGF0aWMgY29uc3QgY2hhciBkZWdyYWRlX2NjX3RvX2Nfd2FybmluZ1tdID0KK05fKCJvbmx5IGZvdW5kIGNvcGllcyBmcm9tIG1vZGlmaWVkIHBhdGhzIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgcmVuYW1lX2xpbWl0X2FkdmljZVtdID0KK05fKCJ5b3UgbWF5IHdhbnQgdG8gc2V0IHlvdXIgJXMgdmFyaWFibGUgdG8gYXQgbGVhc3QgIgorICAgIiVkIGFuZCByZXRyeSB0aGUgY29tbWFuZC4iKTsKKwordm9pZCBkaWZmX3dhcm5fcmVuYW1lX2xpbWl0KGNvbnN0IGNoYXIgKnZhcm5hbWUsIGludCBuZWVkZWQsIGludCBkZWdyYWRlZF9jYykKK3sKKwlmZmx1c2goc3Rkb3V0KTsKKwlpZiAoZGVncmFkZWRfY2MpCisJCXdhcm5pbmcoXyhkZWdyYWRlX2NjX3RvX2Nfd2FybmluZykpOworCWVsc2UgaWYgKG5lZWRlZCkKKwkJd2FybmluZyhfKHJlbmFtZV9saW1pdF93YXJuaW5nKSk7CisJZWxzZQorCQlyZXR1cm47CisJaWYgKDAgPCBuZWVkZWQpCisJCXdhcm5pbmcoXyhyZW5hbWVfbGltaXRfYWR2aWNlKSwgdmFybmFtZSwgbmVlZGVkKTsKK30KKworc3RhdGljIHZvaWQgZGlmZl9mbHVzaF9wYXRjaF9hbGxfZmlsZV9wYWlycyhzdHJ1Y3QgZGlmZl9vcHRpb25zICpvKQoreworCWludCBpOworCXN0YXRpYyBzdHJ1Y3QgZW1pdHRlZF9kaWZmX3N5bWJvbHMgZXNtID0gRU1JVFRFRF9ESUZGX1NZTUJPTFNfSU5JVDsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEgPSAmZGlmZl9xdWV1ZWRfZGlmZjsKKworCWlmIChXU0VIX05FVyAmIFdTX1JVTEVfTUFTSykKKwkJQlVHKCJXUyBydWxlcyBiaXQgbWFzayBvdmVybGFwcyB3aXRoIGRpZmYgc3ltYm9sIGZsYWdzIik7CisKKwlpZiAoby0+Y29sb3JfbW92ZWQpCisJCW8tPmVtaXR0ZWRfc3ltYm9scyA9ICZlc207CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlpZiAoY2hlY2tfcGFpcl9zdGF0dXMocCkpCisJCQlkaWZmX2ZsdXNoX3BhdGNoKHAsIG8pOworCX0KKworCWlmIChvLT5lbWl0dGVkX3N5bWJvbHMpIHsKKwkJaWYgKG8tPmNvbG9yX21vdmVkKSB7CisJCQlzdHJ1Y3QgaGFzaG1hcCBhZGRfbGluZXMsIGRlbF9saW5lczsKKworCQkJaWYgKG8tPmNvbG9yX21vdmVkX3dzX2hhbmRsaW5nICYKKwkJCSAgICBDT0xPUl9NT1ZFRF9XU19BTExPV19JTkRFTlRBVElPTl9DSEFOR0UpCisJCQkJby0+Y29sb3JfbW92ZWRfd3NfaGFuZGxpbmcgfD0gWERGX0lHTk9SRV9XSElURVNQQUNFOworCisJCQloYXNobWFwX2luaXQoJmRlbF9saW5lcywgbW92ZWRfZW50cnlfY21wLCBvLCAwKTsKKwkJCWhhc2htYXBfaW5pdCgmYWRkX2xpbmVzLCBtb3ZlZF9lbnRyeV9jbXAsIG8sIDApOworCisJCQlhZGRfbGluZXNfdG9fbW92ZV9kZXRlY3Rpb24obywgJmFkZF9saW5lcywgJmRlbF9saW5lcyk7CisJCQltYXJrX2NvbG9yX2FzX21vdmVkKG8sICZhZGRfbGluZXMsICZkZWxfbGluZXMpOworCQkJaWYgKG8tPmNvbG9yX21vdmVkID09IENPTE9SX01PVkVEX1pFQlJBX0RJTSkKKwkJCQlkaW1fbW92ZWRfbGluZXMobyk7CisKKwkJCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZhZGRfbGluZXMsIHN0cnVjdCBtb3ZlZF9lbnRyeSwKKwkJCQkJCWVudCk7CisJCQloYXNobWFwX2ZyZWVfZW50cmllcygmZGVsX2xpbmVzLCBzdHJ1Y3QgbW92ZWRfZW50cnksCisJCQkJCQllbnQpOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IGVzbS5ucjsgaSsrKQorCQkJZW1pdF9kaWZmX3N5bWJvbF9mcm9tX3N0cnVjdChvLCAmZXNtLmJ1ZltpXSk7CisKKwkJZm9yIChpID0gMDsgaSA8IGVzbS5ucjsgaSsrKQorCQkJZnJlZSgodm9pZCAqKWVzbS5idWZbaV0ubGluZSk7CisJCWVzbS5uciA9IDA7CisKKwkJby0+ZW1pdHRlZF9zeW1ib2xzID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgZGlmZl9mbHVzaChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCWludCBpLCBvdXRwdXRfZm9ybWF0ID0gb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdDsKKwlpbnQgc2VwYXJhdG9yID0gMDsKKwlpbnQgZGlyc3RhdF9ieV9saW5lID0gMDsKKworCS8qCisJICogT3JkZXI6IHJhdywgc3RhdCwgc3VtbWFyeSwgcGF0Y2gKKwkgKiBvcjogICAgbmFtZS9uYW1lLXN0YXR1cy9jaGVja2RpZmYgKG90aGVyIGJpdHMgY2xlYXIpCisJICovCisJaWYgKCFxLT5ucikKKwkJZ290byBmcmVlX3F1ZXVlOworCisJaWYgKG91dHB1dF9mb3JtYXQgJiAoRElGRl9GT1JNQVRfUkFXIHwKKwkJCSAgICAgRElGRl9GT1JNQVRfTkFNRSB8CisJCQkgICAgIERJRkZfRk9STUFUX05BTUVfU1RBVFVTIHwKKwkJCSAgICAgRElGRl9GT1JNQVRfQ0hFQ0tESUZGKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJCWlmIChjaGVja19wYWlyX3N0YXR1cyhwKSkKKwkJCQlmbHVzaF9vbmVfcGFpcihwLCBvcHRpb25zKTsKKwkJfQorCQlzZXBhcmF0b3IrKzsKKwl9CisKKwlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0RJUlNUQVQgJiYgb3B0aW9ucy0+ZmxhZ3MuZGlyc3RhdF9ieV9saW5lKQorCQlkaXJzdGF0X2J5X2xpbmUgPSAxOworCisJaWYgKG91dHB1dF9mb3JtYXQgJiAoRElGRl9GT1JNQVRfRElGRlNUQVR8RElGRl9GT1JNQVRfU0hPUlRTVEFUfERJRkZfRk9STUFUX05VTVNUQVQpIHx8CisJICAgIGRpcnN0YXRfYnlfbGluZSkgeworCQlzdHJ1Y3QgZGlmZnN0YXRfdCBkaWZmc3RhdDsKKworCQljb21wdXRlX2RpZmZzdGF0KG9wdGlvbnMsICZkaWZmc3RhdCwgcSk7CisJCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfTlVNU1RBVCkKKwkJCXNob3dfbnVtc3RhdCgmZGlmZnN0YXQsIG9wdGlvbnMpOworCQlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0RJRkZTVEFUKQorCQkJc2hvd19zdGF0cygmZGlmZnN0YXQsIG9wdGlvbnMpOworCQlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX1NIT1JUU1RBVCkKKwkJCXNob3dfc2hvcnRzdGF0cygmZGlmZnN0YXQsIG9wdGlvbnMpOworCQlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0RJUlNUQVQgJiYgZGlyc3RhdF9ieV9saW5lKQorCQkJc2hvd19kaXJzdGF0X2J5X2xpbmUoJmRpZmZzdGF0LCBvcHRpb25zKTsKKwkJZnJlZV9kaWZmc3RhdF9pbmZvKCZkaWZmc3RhdCk7CisJCXNlcGFyYXRvcisrOworCX0KKwlpZiAoKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9ESVJTVEFUKSAmJiAhZGlyc3RhdF9ieV9saW5lKQorCQlzaG93X2RpcnN0YXQob3B0aW9ucyk7CisKKwlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX1NVTU1BUlkgJiYgIWlzX3N1bW1hcnlfZW1wdHkocSkpIHsKKwkJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJCWRpZmZfc3VtbWFyeShvcHRpb25zLCBxLT5xdWV1ZVtpXSk7CisJCX0KKwkJc2VwYXJhdG9yKys7CisJfQorCisJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9OT19PVVRQVVQgJiYKKwkgICAgb3B0aW9ucy0+ZmxhZ3MuZXhpdF93aXRoX3N0YXR1cyAmJgorCSAgICBvcHRpb25zLT5mbGFncy5kaWZmX2Zyb21fY29udGVudHMpIHsKKwkJLyoKKwkJICogcnVuIGRpZmZfZmx1c2hfcGF0Y2ggZm9yIHRoZSBleGl0IHN0YXR1cy4gc2V0dGluZworCQkgKiBvcHRpb25zLT5maWxlIHRvIC9kZXYvbnVsbCBzaG91bGQgYmUgc2FmZSwgYmVjYXVzZSB3ZQorCQkgKiBhcmVuJ3Qgc3VwcG9zZWQgdG8gcHJvZHVjZSBhbnkgb3V0cHV0IGFueXdheS4KKwkJICovCisJCWlmIChvcHRpb25zLT5jbG9zZV9maWxlKQorCQkJZmNsb3NlKG9wdGlvbnMtPmZpbGUpOworCQlvcHRpb25zLT5maWxlID0geGZvcGVuKCIvZGV2L251bGwiLCAidyIpOworCQlvcHRpb25zLT5jbG9zZV9maWxlID0gMTsKKwkJb3B0aW9ucy0+Y29sb3JfbW92ZWQgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJCWlmIChjaGVja19wYWlyX3N0YXR1cyhwKSkKKwkJCQlkaWZmX2ZsdXNoX3BhdGNoKHAsIG9wdGlvbnMpOworCQkJaWYgKG9wdGlvbnMtPmZvdW5kX2NoYW5nZXMpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX1BBVENIKSB7CisJCWlmIChzZXBhcmF0b3IpIHsKKwkJCWVtaXRfZGlmZl9zeW1ib2wob3B0aW9ucywgRElGRl9TWU1CT0xfU0VQQVJBVE9SLCBOVUxMLCAwLCAwKTsKKwkJCWlmIChvcHRpb25zLT5zdGF0X3NlcCkKKwkJCQkvKiBhdHRhY2ggcGF0Y2ggaW5zdGVhZCBvZiBpbmxpbmUgKi8KKwkJCQllbWl0X2RpZmZfc3ltYm9sKG9wdGlvbnMsIERJRkZfU1lNQk9MX1NUQVRfU0VQLAorCQkJCQkJIE5VTEwsIDAsIDApOworCQl9CisKKwkJZGlmZl9mbHVzaF9wYXRjaF9hbGxfZmlsZV9wYWlycyhvcHRpb25zKTsKKwl9CisKKwlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NBTExCQUNLKQorCQlvcHRpb25zLT5mb3JtYXRfY2FsbGJhY2socSwgb3B0aW9ucywgb3B0aW9ucy0+Zm9ybWF0X2NhbGxiYWNrX2RhdGEpOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspCisJCWRpZmZfZnJlZV9maWxlcGFpcihxLT5xdWV1ZVtpXSk7CitmcmVlX3F1ZXVlOgorCWZyZWUocS0+cXVldWUpOworCURJRkZfUVVFVUVfQ0xFQVIocSk7CisJaWYgKG9wdGlvbnMtPmNsb3NlX2ZpbGUpCisJCWZjbG9zZShvcHRpb25zLT5maWxlKTsKKworCS8qCisJICogUmVwb3J0IHRoZSBjb250ZW50LWxldmVsIGRpZmZlcmVuY2VzIHdpdGggSEFTX0NIQU5HRVM7CisJICogZGlmZl9hZGRyZW1vdmUvZGlmZl9jaGFuZ2UgZG9lcyBub3Qgc2V0IHRoZSBiaXQgd2hlbgorCSAqIERJRkZfRlJPTV9DT05URU5UUyBpcyBpbiBlZmZlY3QgKGUuZy4gd2l0aCAtdykuCisJICovCisJaWYgKG9wdGlvbnMtPmZsYWdzLmRpZmZfZnJvbV9jb250ZW50cykgeworCQlpZiAob3B0aW9ucy0+Zm91bmRfY2hhbmdlcykKKwkJCW9wdGlvbnMtPmZsYWdzLmhhc19jaGFuZ2VzID0gMTsKKwkJZWxzZQorCQkJb3B0aW9ucy0+ZmxhZ3MuaGFzX2NoYW5nZXMgPSAwOworCX0KK30KKworc3RhdGljIGludCBtYXRjaF9maWx0ZXIoY29uc3Qgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnApCit7CisJcmV0dXJuICgoKHAtPnN0YXR1cyA9PSBESUZGX1NUQVRVU19NT0RJRklFRCkgJiYKKwkJICgocC0+c2NvcmUgJiYKKwkJICAgZmlsdGVyX2JpdF90c3QoRElGRl9TVEFUVVNfRklMVEVSX0JST0tFTiwgb3B0aW9ucykpIHx8CisJCSAgKCFwLT5zY29yZSAmJgorCQkgICBmaWx0ZXJfYml0X3RzdChESUZGX1NUQVRVU19NT0RJRklFRCwgb3B0aW9ucykpKSkgfHwKKwkJKChwLT5zdGF0dXMgIT0gRElGRl9TVEFUVVNfTU9ESUZJRUQpICYmCisJCSBmaWx0ZXJfYml0X3RzdChwLT5zdGF0dXMsIG9wdGlvbnMpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZmZjb3JlX2FwcGx5X2ZpbHRlcihzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWludCBpOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBvdXRxOworCisJRElGRl9RVUVVRV9DTEVBUigmb3V0cSk7CisKKwlpZiAoIW9wdGlvbnMtPmZpbHRlcikKKwkJcmV0dXJuOworCisJaWYgKGZpbHRlcl9iaXRfdHN0KERJRkZfU1RBVFVTX0ZJTFRFUl9BT04sIG9wdGlvbnMpKSB7CisJCWludCBmb3VuZDsKKwkJZm9yIChpID0gZm91bmQgPSAwOyAhZm91bmQgJiYgaSA8IHEtPm5yOyBpKyspIHsKKwkJCWlmIChtYXRjaF9maWx0ZXIob3B0aW9ucywgcS0+cXVldWVbaV0pKQorCQkJCWZvdW5kKys7CisJCX0KKwkJaWYgKGZvdW5kKQorCQkJcmV0dXJuOworCisJCS8qIG90aGVyd2lzZSB3ZSB3aWxsIGNsZWFyIHRoZSB3aG9sZSBxdWV1ZQorCQkgKiBieSBjb3B5aW5nIHRoZSBlbXB0eSBvdXRxIGF0IHRoZSBlbmQgb2YgdGhpcworCQkgKiBmdW5jdGlvbiwgYnV0IGZpcnN0IGNsZWFyIHRoZSBjdXJyZW50IGVudHJpZXMKKwkJICogaW4gdGhlIHF1ZXVlLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspCisJCQlkaWZmX2ZyZWVfZmlsZXBhaXIocS0+cXVldWVbaV0pOworCX0KKwllbHNlIHsKKwkJLyogT25seSB0aGUgbWF0Y2hpbmcgb25lcyAqLworCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJCWlmIChtYXRjaF9maWx0ZXIob3B0aW9ucywgcCkpCisJCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJCWVsc2UKKwkJCQlkaWZmX2ZyZWVfZmlsZXBhaXIocCk7CisJCX0KKwl9CisJZnJlZShxLT5xdWV1ZSk7CisJKnEgPSBvdXRxOworfQorCisvKiBDaGVjayB3aGV0aGVyIHR3byBmaWxlc3BlY3Mgd2l0aCB0aGUgc2FtZSBtb2RlIGFuZCBzaXplIGFyZSBpZGVudGljYWwgKi8KK3N0YXRpYyBpbnQgZGlmZl9maWxlc3BlY19pc19pZGVudGljYWwoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwKKwkJCQkgICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvKQoreworCWlmIChTX0lTR0lUTElOSyhvbmUtPm1vZGUpKQorCQlyZXR1cm4gMDsKKwlpZiAoZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCBvbmUsIE5VTEwpKQorCQlyZXR1cm4gMDsKKwlpZiAoZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCB0d28sIE5VTEwpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gIW1lbWNtcChvbmUtPmRhdGEsIHR3by0+ZGF0YSwgb25lLT5zaXplKTsKK30KKworc3RhdGljIGludCBkaWZmX2ZpbGVzcGVjX2NoZWNrX3N0YXRfdW5tYXRjaChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJICAgIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwKQoreworCXN0cnVjdCBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjX29wdGlvbnMgZHBmX29wdGlvbnMgPSB7CisJCS5jaGVja19zaXplX29ubHkgPSAxLAorCQkubWlzc2luZ19vYmplY3RfY2IgPSBkaWZmX3F1ZXVlZF9kaWZmX3ByZWZldGNoLAorCQkubWlzc2luZ19vYmplY3RfZGF0YSA9IHIsCisJfTsKKworCWlmIChwLT5kb25lX3NraXBfc3RhdF91bm1hdGNoKQorCQlyZXR1cm4gcC0+c2tpcF9zdGF0X3VubWF0Y2hfcmVzdWx0OworCisJcC0+ZG9uZV9za2lwX3N0YXRfdW5tYXRjaCA9IDE7CisJcC0+c2tpcF9zdGF0X3VubWF0Y2hfcmVzdWx0ID0gMDsKKwkvKgorCSAqIDEuIEVudHJpZXMgdGhhdCBjb21lIGZyb20gc3RhdCBpbmZvIGRpcnRpbmVzcworCSAqICAgIGFsd2F5cyBoYXZlIGJvdGggc2lkZXMgKGlvdywgbm90IGNyZWF0ZS9kZWxldGUpLAorCSAqICAgIG9uZSBzaWRlIG9mIHRoZSBvYmplY3QgbmFtZSBpcyB1bmtub3duLCB3aXRoCisJICogICAgdGhlIHNhbWUgbW9kZSBhbmQgc2l6ZS4gIEtlZXAgdGhlIG9uZXMgdGhhdAorCSAqICAgIGRvIG5vdCBtYXRjaCB0aGVzZSBjcml0ZXJpYS4gIFRoZXkgaGF2ZSByZWFsCisJICogICAgZGlmZmVyZW5jZXMuCisJICoKKwkgKiAyLiBBdCB0aGlzIHBvaW50LCB0aGUgZmlsZSBpcyBrbm93biB0byBiZSBtb2RpZmllZCwKKwkgKiAgICB3aXRoIHRoZSBzYW1lIG1vZGUgYW5kIHNpemUsIGFuZCB0aGUgb2JqZWN0CisJICogICAgbmFtZSBvZiBvbmUgc2lkZSBpcyB1bmtub3duLiAgTmVlZCB0byBpbnNwZWN0CisJICogICAgdGhlIGlkZW50aWNhbCBjb250ZW50cy4KKwkgKi8KKwlpZiAoIURJRkZfRklMRV9WQUxJRChwLT5vbmUpIHx8IC8qICgxKSAqLworCSAgICAhRElGRl9GSUxFX1ZBTElEKHAtPnR3bykgfHwKKwkgICAgKHAtPm9uZS0+b2lkX3ZhbGlkICYmIHAtPnR3by0+b2lkX3ZhbGlkKSB8fAorCSAgICAocC0+b25lLT5tb2RlICE9IHAtPnR3by0+bW9kZSkgfHwKKwkgICAgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCBwLT5vbmUsICZkcGZfb3B0aW9ucykgfHwKKwkgICAgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCBwLT50d28sICZkcGZfb3B0aW9ucykgfHwKKwkgICAgKHAtPm9uZS0+c2l6ZSAhPSBwLT50d28tPnNpemUpIHx8CisJICAgICFkaWZmX2ZpbGVzcGVjX2lzX2lkZW50aWNhbChyLCBwLT5vbmUsIHAtPnR3bykpIC8qICgyKSAqLworCQlwLT5za2lwX3N0YXRfdW5tYXRjaF9yZXN1bHQgPSAxOworCXJldHVybiBwLT5za2lwX3N0YXRfdW5tYXRjaF9yZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGRpZmZjb3JlX3NraXBfc3RhdF91bm1hdGNoKHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQpCit7CisJaW50IGk7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IG91dHE7CisJRElGRl9RVUVVRV9DTEVBUigmb3V0cSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCisJCWlmIChkaWZmX2ZpbGVzcGVjX2NoZWNrX3N0YXRfdW5tYXRjaChkaWZmb3B0LT5yZXBvLCBwKSkKKwkJCWRpZmZfcSgmb3V0cSwgcCk7CisJCWVsc2UgeworCQkJLyoKKwkJCSAqIFRoZSBjYWxsZXIgY2FuIHN1YnRyYWN0IDEgZnJvbSBza2lwX3N0YXRfdW5tYXRjaAorCQkJICogdG8gZGV0ZXJtaW5lIGhvdyBtYW55IHBhdGhzIHdlcmUgZGlydHkgb25seQorCQkJICogZHVlIHRvIHN0YXQgaW5mbyBtaXNtYXRjaC4KKwkJCSAqLworCQkJaWYgKCFkaWZmb3B0LT5mbGFncy5ub19pbmRleCkKKwkJCQlkaWZmb3B0LT5za2lwX3N0YXRfdW5tYXRjaCsrOworCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKHApOworCQl9CisJfQorCWZyZWUocS0+cXVldWUpOworCSpxID0gb3V0cTsKK30KKworc3RhdGljIGludCBkaWZmbmFtZWNtcChjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKmEgPSAqKChjb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKilhXyk7CisJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKmIgPSAqKChjb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKiliXyk7CisJY29uc3QgY2hhciAqbmFtZV9hLCAqbmFtZV9iOworCisJbmFtZV9hID0gYS0+b25lID8gYS0+b25lLT5wYXRoIDogYS0+dHdvLT5wYXRoOworCW5hbWVfYiA9IGItPm9uZSA/IGItPm9uZS0+cGF0aCA6IGItPnR3by0+cGF0aDsKKwlyZXR1cm4gc3RyY21wKG5hbWVfYSwgbmFtZV9iKTsKK30KKwordm9pZCBkaWZmY29yZV9maXhfZGlmZl9pbmRleCh2b2lkKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCVFTT1JUKHEtPnF1ZXVlLCBxLT5uciwgZGlmZm5hbWVjbXApOworfQorCit2b2lkIGRpZmZfYWRkX2lmX21pc3Npbmcoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgc3RydWN0IG9pZF9hcnJheSAqdG9fZmV0Y2gsCisJCQkgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmZpbGVzcGVjKQoreworCWlmIChmaWxlc3BlYyAmJiBmaWxlc3BlYy0+b2lkX3ZhbGlkICYmCisJICAgICFTX0lTR0lUTElOSyhmaWxlc3BlYy0+bW9kZSkgJiYKKwkgICAgb2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKHIsICZmaWxlc3BlYy0+b2lkLCBOVUxMLAorCQkJCSAgICAgT0JKRUNUX0lORk9fRk9SX1BSRUZFVENIKSkKKwkJb2lkX2FycmF5X2FwcGVuZCh0b19mZXRjaCwgJmZpbGVzcGVjLT5vaWQpOworfQorCit2b2lkIGRpZmZfcXVldWVkX2RpZmZfcHJlZmV0Y2godm9pZCAqcmVwb3NpdG9yeSkKK3sKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbyA9IHJlcG9zaXRvcnk7CisJaW50IGk7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJc3RydWN0IG9pZF9hcnJheSB0b19mZXRjaCA9IE9JRF9BUlJBWV9JTklUOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJZGlmZl9hZGRfaWZfbWlzc2luZyhyZXBvLCAmdG9fZmV0Y2gsIHAtPm9uZSk7CisJCWRpZmZfYWRkX2lmX21pc3NpbmcocmVwbywgJnRvX2ZldGNoLCBwLT50d28pOworCX0KKworCS8qCisJICogTkVFRFNXT1JLOiBDb25zaWRlciBkZWR1cGxpY2F0aW5nIHRoZSBPSURzIHNlbnQuCisJICovCisJcHJvbWlzb3JfcmVtb3RlX2dldF9kaXJlY3QocmVwbywgdG9fZmV0Y2gub2lkLCB0b19mZXRjaC5ucik7CisKKwlvaWRfYXJyYXlfY2xlYXIoJnRvX2ZldGNoKTsKK30KKwordm9pZCBkaWZmY29yZV9zdGQoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgb3V0cHV0X2Zvcm1hdHNfdG9fcHJlZmV0Y2ggPSBESUZGX0ZPUk1BVF9ESUZGU1RBVCB8CisJCURJRkZfRk9STUFUX05VTVNUQVQgfAorCQlESUZGX0ZPUk1BVF9QQVRDSCB8CisJCURJRkZfRk9STUFUX1NIT1JUU1RBVCB8CisJCURJRkZfRk9STUFUX0RJUlNUQVQ7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBhIGJsb2ItZGF0YS1yZXF1aXJpbmcgZGlmZiBvdXRwdXQgYW5kL29yCisJICogYnJlYWstcmV3cml0ZSBkZXRlY3Rpb24gKHdoaWNoIHJlcXVpcmVzIGJsb2IgZGF0YSkuIElmIHllcywgcHJlZmV0Y2gKKwkgKiB0aGUgZGlmZiBwYWlycy4KKwkgKgorCSAqIElmIG5vIHByZWZldGNoaW5nIG9jY3VycywgZGlmZmNvcmVfcmVuYW1lKCkgd2lsbCBwcmVmZXRjaCBpZiBpdAorCSAqIGRlY2lkZXMgdGhhdCBpdCBuZWVkcyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24uCisJICovCisJaWYgKG9wdGlvbnMtPnJlcG8gPT0gdGhlX3JlcG9zaXRvcnkgJiYgaGFzX3Byb21pc29yX3JlbW90ZSgpICYmCisJICAgIChvcHRpb25zLT5vdXRwdXRfZm9ybWF0ICYgb3V0cHV0X2Zvcm1hdHNfdG9fcHJlZmV0Y2ggfHwKKwkgICAgIG9wdGlvbnMtPnBpY2theGVfb3B0cyAmIERJRkZfUElDS0FYRV9LSU5EU19NQVNLKSkKKwkJZGlmZl9xdWV1ZWRfZGlmZl9wcmVmZXRjaChvcHRpb25zLT5yZXBvKTsKKworCS8qIE5PVEUgcGxlYXNlIGtlZXAgdGhlIGZvbGxvd2luZyBpbiBzeW5jIHdpdGggZGlmZl90cmVlX2NvbWJpbmVkKCkgKi8KKwlpZiAob3B0aW9ucy0+c2tpcF9zdGF0X3VubWF0Y2gpCisJCWRpZmZjb3JlX3NraXBfc3RhdF91bm1hdGNoKG9wdGlvbnMpOworCWlmICghb3B0aW9ucy0+Zm91bmRfZm9sbG93KSB7CisJCS8qIFNlZSB0cnlfdG9fZm9sbG93X3JlbmFtZXMoKSBpbiB0cmVlLWRpZmYuYyAqLworCQlpZiAob3B0aW9ucy0+YnJlYWtfb3B0ICE9IC0xKQorCQkJZGlmZmNvcmVfYnJlYWsob3B0aW9ucy0+cmVwbywKKwkJCQkgICAgICAgb3B0aW9ucy0+YnJlYWtfb3B0KTsKKwkJaWYgKG9wdGlvbnMtPmRldGVjdF9yZW5hbWUpCisJCQlkaWZmY29yZV9yZW5hbWUob3B0aW9ucyk7CisJCWlmIChvcHRpb25zLT5icmVha19vcHQgIT0gLTEpCisJCQlkaWZmY29yZV9tZXJnZV9icm9rZW4oKTsKKwl9CisJaWYgKG9wdGlvbnMtPnBpY2theGVfb3B0cyAmIERJRkZfUElDS0FYRV9LSU5EU19NQVNLKQorCQlkaWZmY29yZV9waWNrYXhlKG9wdGlvbnMpOworCWlmIChvcHRpb25zLT5vcmRlcmZpbGUpCisJCWRpZmZjb3JlX29yZGVyKG9wdGlvbnMtPm9yZGVyZmlsZSk7CisJaWYgKCFvcHRpb25zLT5mb3VuZF9mb2xsb3cpCisJCS8qIFNlZSB0cnlfdG9fZm9sbG93X3JlbmFtZXMoKSBpbiB0cmVlLWRpZmYuYyAqLworCQlkaWZmX3Jlc29sdmVfcmVuYW1lX2NvcHkoKTsKKwlkaWZmY29yZV9hcHBseV9maWx0ZXIob3B0aW9ucyk7CisKKwlpZiAoZGlmZl9xdWV1ZWRfZGlmZi5uciAmJiAhb3B0aW9ucy0+ZmxhZ3MuZGlmZl9mcm9tX2NvbnRlbnRzKQorCQlvcHRpb25zLT5mbGFncy5oYXNfY2hhbmdlcyA9IDE7CisJZWxzZQorCQlvcHRpb25zLT5mbGFncy5oYXNfY2hhbmdlcyA9IDA7CisKKwlvcHRpb25zLT5mb3VuZF9mb2xsb3cgPSAwOworfQorCitpbnQgZGlmZl9yZXN1bHRfY29kZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIGludCBzdGF0dXMpCit7CisJaW50IHJlc3VsdCA9IDA7CisKKwlkaWZmX3dhcm5fcmVuYW1lX2xpbWl0KCJkaWZmLnJlbmFtZUxpbWl0IiwKKwkJCSAgICAgICBvcHQtPm5lZWRlZF9yZW5hbWVfbGltaXQsCisJCQkgICAgICAgb3B0LT5kZWdyYWRlZF9jY190b19jKTsKKwlpZiAoIW9wdC0+ZmxhZ3MuZXhpdF93aXRoX3N0YXR1cyAmJgorCSAgICAhKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NIRUNLRElGRikpCisJCXJldHVybiBzdGF0dXM7CisJaWYgKG9wdC0+ZmxhZ3MuZXhpdF93aXRoX3N0YXR1cyAmJgorCSAgICBvcHQtPmZsYWdzLmhhc19jaGFuZ2VzKQorCQlyZXN1bHQgfD0gMDE7CisJaWYgKChvcHQtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9DSEVDS0RJRkYpICYmCisJICAgIG9wdC0+ZmxhZ3MuY2hlY2tfZmFpbGVkKQorCQlyZXN1bHQgfD0gMDI7CisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IGRpZmZfY2FuX3F1aXRfZWFybHkoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCXJldHVybiAob3B0LT5mbGFncy5xdWljayAmJgorCQkhb3B0LT5maWx0ZXIgJiYKKwkJb3B0LT5mbGFncy5oYXNfY2hhbmdlcyk7Cit9CisKKy8qCisgKiBTaGFsbCBjaGFuZ2VzIHRvIHRoaXMgc3VibW9kdWxlIGJlIGlnbm9yZWQ/CisgKgorICogU3VibW9kdWxlIGNoYW5nZXMgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gYmUgaWdub3JlZCBzZXBhcmF0ZWx5IGZvciBlYWNoIHBhdGgsCisgKiBidXQgdGhhdCBjb25maWd1cmF0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKyAqLworc3RhdGljIGludCBpc19zdWJtb2R1bGVfaWdub3JlZChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWludCBpZ25vcmVkID0gMDsKKwlzdHJ1Y3QgZGlmZl9mbGFncyBvcmlnX2ZsYWdzID0gb3B0aW9ucy0+ZmxhZ3M7CisJaWYgKCFvcHRpb25zLT5mbGFncy5vdmVycmlkZV9zdWJtb2R1bGVfY29uZmlnKQorCQlzZXRfZGlmZm9wdF9mbGFnc19mcm9tX3N1Ym1vZHVsZV9jb25maWcob3B0aW9ucywgcGF0aCk7CisJaWYgKG9wdGlvbnMtPmZsYWdzLmlnbm9yZV9zdWJtb2R1bGVzKQorCQlpZ25vcmVkID0gMTsKKwlvcHRpb25zLT5mbGFncyA9IG9yaWdfZmxhZ3M7CisJcmV0dXJuIGlnbm9yZWQ7Cit9CisKK3ZvaWQgY29tcHV0ZV9kaWZmc3RhdChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgICAgICBzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQsCisJCSAgICAgIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSkKK3sKKwlpbnQgaTsKKworCW1lbXNldChkaWZmc3RhdCwgMCwgc2l6ZW9mKHN0cnVjdCBkaWZmc3RhdF90KSk7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJaWYgKGNoZWNrX3BhaXJfc3RhdHVzKHApKQorCQkJZGlmZl9mbHVzaF9zdGF0KHAsIG9wdGlvbnMsIGRpZmZzdGF0KTsKKwl9Cit9CisKK3ZvaWQgZGlmZl9hZGRyZW1vdmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJICAgIGludCBhZGRyZW1vdmUsIHVuc2lnbmVkIG1vZGUsCisJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICBpbnQgb2lkX3ZhbGlkLAorCQkgICAgY29uc3QgY2hhciAqY29uY2F0cGF0aCwgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlKQoreworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsICp0d287CisKKwlpZiAoU19JU0dJVExJTksobW9kZSkgJiYgaXNfc3VibW9kdWxlX2lnbm9yZWQoY29uY2F0cGF0aCwgb3B0aW9ucykpCisJCXJldHVybjsKKworCS8qIFRoaXMgbWF5IGxvb2sgb2RkLCBidXQgaXQgaXMgYSBwcmVwYXJhdGlvbiBmb3IKKwkgKiBmZWVkaW5nICJ0aGVyZSBhcmUgdW5jaGFuZ2VkIGZpbGVzIHdoaWNoIHNob3VsZAorCSAqIG5vdCBwcm9kdWNlIGRpZmZzLCBidXQgd2hlbiB5b3UgYXJlIGRvaW5nIGNvcHkKKwkgKiBkZXRlY3Rpb24geW91IHdvdWxkIG5lZWQgdGhlbSwgc28gaGVyZSB0aGV5IGFyZSIKKwkgKiBlbnRyaWVzIHRvIHRoZSBkaWZmLWNvcmUuICBUaGV5IHdpbGwgYmUgcHJlZml4ZWQKKwkgKiB3aXRoIHNvbWV0aGluZyBsaWtlICc9JyBvciAnKicgKEkgaGF2ZW4ndCBkZWNpZGVkCisJICogd2hpY2ggYnV0IHNob3VsZCBub3QgbWFrZSBhbnkgZGlmZmVyZW5jZSkuCisJICogRmVlZGluZyB0aGUgc2FtZSBuZXcgYW5kIG9sZCB0byBkaWZmX2NoYW5nZSgpCisJICogYWxzbyBoYXMgdGhlIHNhbWUgZWZmZWN0LgorCSAqIEJlZm9yZSB0aGUgZmluYWwgb3V0cHV0IGhhcHBlbnMsIHRoZXkgYXJlIHBydW5lZCBhZnRlcgorCSAqIG1lcmdlZCBpbnRvIHJlbmFtZS9jb3B5IHBhaXJzIGFzIGFwcHJvcHJpYXRlLgorCSAqLworCWlmIChvcHRpb25zLT5mbGFncy5yZXZlcnNlX2RpZmYpCisJCWFkZHJlbW92ZSA9IChhZGRyZW1vdmUgPT0gJysnID8gJy0nIDoKKwkJCSAgICAgYWRkcmVtb3ZlID09ICctJyA/ICcrJyA6IGFkZHJlbW92ZSk7CisKKwlpZiAob3B0aW9ucy0+cHJlZml4ICYmCisJICAgIHN0cm5jbXAoY29uY2F0cGF0aCwgb3B0aW9ucy0+cHJlZml4LCBvcHRpb25zLT5wcmVmaXhfbGVuZ3RoKSkKKwkJcmV0dXJuOworCisJb25lID0gYWxsb2NfZmlsZXNwZWMoY29uY2F0cGF0aCk7CisJdHdvID0gYWxsb2NfZmlsZXNwZWMoY29uY2F0cGF0aCk7CisKKwlpZiAoYWRkcmVtb3ZlICE9ICcrJykKKwkJZmlsbF9maWxlc3BlYyhvbmUsIG9pZCwgb2lkX3ZhbGlkLCBtb2RlKTsKKwlpZiAoYWRkcmVtb3ZlICE9ICctJykgeworCQlmaWxsX2ZpbGVzcGVjKHR3bywgb2lkLCBvaWRfdmFsaWQsIG1vZGUpOworCQl0d28tPmRpcnR5X3N1Ym1vZHVsZSA9IGRpcnR5X3N1Ym1vZHVsZTsKKwl9CisKKwlkaWZmX3F1ZXVlKCZkaWZmX3F1ZXVlZF9kaWZmLCBvbmUsIHR3byk7CisJaWYgKCFvcHRpb25zLT5mbGFncy5kaWZmX2Zyb21fY29udGVudHMpCisJCW9wdGlvbnMtPmZsYWdzLmhhc19jaGFuZ2VzID0gMTsKK30KKwordm9pZCBkaWZmX2NoYW5nZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgdW5zaWduZWQgb2xkX21vZGUsIHVuc2lnbmVkIG5ld19tb2RlLAorCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCwKKwkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsCisJCSBpbnQgb2xkX29pZF92YWxpZCwgaW50IG5ld19vaWRfdmFsaWQsCisJCSBjb25zdCBjaGFyICpjb25jYXRwYXRoLAorCQkgdW5zaWduZWQgb2xkX2RpcnR5X3N1Ym1vZHVsZSwgdW5zaWduZWQgbmV3X2RpcnR5X3N1Ym1vZHVsZSkKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLCAqdHdvOworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwOworCisJaWYgKFNfSVNHSVRMSU5LKG9sZF9tb2RlKSAmJiBTX0lTR0lUTElOSyhuZXdfbW9kZSkgJiYKKwkgICAgaXNfc3VibW9kdWxlX2lnbm9yZWQoY29uY2F0cGF0aCwgb3B0aW9ucykpCisJCXJldHVybjsKKworCWlmIChvcHRpb25zLT5mbGFncy5yZXZlcnNlX2RpZmYpIHsKKwkJU1dBUChvbGRfbW9kZSwgbmV3X21vZGUpOworCQlTV0FQKG9sZF9vaWQsIG5ld19vaWQpOworCQlTV0FQKG9sZF9vaWRfdmFsaWQsIG5ld19vaWRfdmFsaWQpOworCQlTV0FQKG9sZF9kaXJ0eV9zdWJtb2R1bGUsIG5ld19kaXJ0eV9zdWJtb2R1bGUpOworCX0KKworCWlmIChvcHRpb25zLT5wcmVmaXggJiYKKwkgICAgc3RybmNtcChjb25jYXRwYXRoLCBvcHRpb25zLT5wcmVmaXgsIG9wdGlvbnMtPnByZWZpeF9sZW5ndGgpKQorCQlyZXR1cm47CisKKwlvbmUgPSBhbGxvY19maWxlc3BlYyhjb25jYXRwYXRoKTsKKwl0d28gPSBhbGxvY19maWxlc3BlYyhjb25jYXRwYXRoKTsKKwlmaWxsX2ZpbGVzcGVjKG9uZSwgb2xkX29pZCwgb2xkX29pZF92YWxpZCwgb2xkX21vZGUpOworCWZpbGxfZmlsZXNwZWModHdvLCBuZXdfb2lkLCBuZXdfb2lkX3ZhbGlkLCBuZXdfbW9kZSk7CisJb25lLT5kaXJ0eV9zdWJtb2R1bGUgPSBvbGRfZGlydHlfc3VibW9kdWxlOworCXR3by0+ZGlydHlfc3VibW9kdWxlID0gbmV3X2RpcnR5X3N1Ym1vZHVsZTsKKwlwID0gZGlmZl9xdWV1ZSgmZGlmZl9xdWV1ZWRfZGlmZiwgb25lLCB0d28pOworCisJaWYgKG9wdGlvbnMtPmZsYWdzLmRpZmZfZnJvbV9jb250ZW50cykKKwkJcmV0dXJuOworCisJaWYgKG9wdGlvbnMtPmZsYWdzLnF1aWNrICYmIG9wdGlvbnMtPnNraXBfc3RhdF91bm1hdGNoICYmCisJICAgICFkaWZmX2ZpbGVzcGVjX2NoZWNrX3N0YXRfdW5tYXRjaChvcHRpb25zLT5yZXBvLCBwKSkKKwkJcmV0dXJuOworCisJb3B0aW9ucy0+ZmxhZ3MuaGFzX2NoYW5nZXMgPSAxOworfQorCitzdHJ1Y3QgZGlmZl9maWxlcGFpciAqZGlmZl91bm1lcmdlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXI7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwgKnR3bzsKKworCWlmIChvcHRpb25zLT5wcmVmaXggJiYKKwkgICAgc3RybmNtcChwYXRoLCBvcHRpb25zLT5wcmVmaXgsIG9wdGlvbnMtPnByZWZpeF9sZW5ndGgpKQorCQlyZXR1cm4gTlVMTDsKKworCW9uZSA9IGFsbG9jX2ZpbGVzcGVjKHBhdGgpOworCXR3byA9IGFsbG9jX2ZpbGVzcGVjKHBhdGgpOworCXBhaXIgPSBkaWZmX3F1ZXVlKCZkaWZmX3F1ZXVlZF9kaWZmLCBvbmUsIHR3byk7CisJcGFpci0+aXNfdW5tZXJnZWQgPSAxOworCXJldHVybiBwYWlyOworfQorCitzdGF0aWMgY2hhciAqcnVuX3RleHRjb252KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICBjb25zdCBjaGFyICpwZ20sCisJCQkgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjLAorCQkJICBzaXplX3QgKm91dHNpemUpCit7CisJc3RydWN0IGRpZmZfdGVtcGZpbGUgKnRlbXA7CisJY29uc3QgY2hhciAqYXJndlszXTsKKwljb25zdCBjaGFyICoqYXJnID0gYXJndjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBlcnIgPSAwOworCisJdGVtcCA9IHByZXBhcmVfdGVtcF9maWxlKHIsIHNwZWMtPnBhdGgsIHNwZWMpOworCSphcmcrKyA9IHBnbTsKKwkqYXJnKysgPSB0ZW1wLT5uYW1lOworCSphcmcgPSBOVUxMOworCisJY2hpbGQudXNlX3NoZWxsID0gMTsKKwljaGlsZC5hcmd2ID0gYXJndjsKKwljaGlsZC5vdXQgPSAtMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2hpbGQpKSB7CisJCXJlbW92ZV90ZW1wZmlsZSgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgY2hpbGQub3V0LCAwKSA8IDApCisJCWVyciA9IGVycm9yKCJlcnJvciByZWFkaW5nIGZyb20gdGV4dGNvbnYgY29tbWFuZCAnJXMnIiwgcGdtKTsKKwljbG9zZShjaGlsZC5vdXQpOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZjaGlsZCkgfHwgZXJyKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlyZW1vdmVfdGVtcGZpbGUoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJlbW92ZV90ZW1wZmlsZSgpOworCisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1Ziwgb3V0c2l6ZSk7Cit9CisKK3NpemVfdCBmaWxsX3RleHRjb252KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICAgIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRyaXZlciwKKwkJICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGYsCisJCSAgICAgY2hhciAqKm91dGJ1ZikKK3sKKwlzaXplX3Qgc2l6ZTsKKworCWlmICghZHJpdmVyKSB7CisJCWlmICghRElGRl9GSUxFX1ZBTElEKGRmKSkgeworCQkJKm91dGJ1ZiA9ICIiOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMociwgZGYsIE5VTEwpKQorCQkJZGllKCJ1bmFibGUgdG8gcmVhZCBmaWxlcyB0byBkaWZmIik7CisJCSpvdXRidWYgPSBkZi0+ZGF0YTsKKwkJcmV0dXJuIGRmLT5zaXplOworCX0KKworCWlmICghZHJpdmVyLT50ZXh0Y29udikKKwkJQlVHKCJmaWxsX3RleHRjb252IGNhbGxlZCB3aXRoIG5vbi10ZXh0Y29udiBkcml2ZXIiKTsKKworCWlmIChkcml2ZXItPnRleHRjb252X2NhY2hlICYmIGRmLT5vaWRfdmFsaWQpIHsKKwkJKm91dGJ1ZiA9IG5vdGVzX2NhY2hlX2dldChkcml2ZXItPnRleHRjb252X2NhY2hlLAorCQkJCQkgICZkZi0+b2lkLAorCQkJCQkgICZzaXplKTsKKwkJaWYgKCpvdXRidWYpCisJCQlyZXR1cm4gc2l6ZTsKKwl9CisKKwkqb3V0YnVmID0gcnVuX3RleHRjb252KHIsIGRyaXZlci0+dGV4dGNvbnYsIGRmLCAmc2l6ZSk7CisJaWYgKCEqb3V0YnVmKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGZpbGVzIHRvIGRpZmYiKTsKKworCWlmIChkcml2ZXItPnRleHRjb252X2NhY2hlICYmIGRmLT5vaWRfdmFsaWQpIHsKKwkJLyogaWdub3JlIGVycm9ycywgYXMgd2UgbWlnaHQgYmUgaW4gYSByZWFkb25seSByZXBvc2l0b3J5ICovCisJCW5vdGVzX2NhY2hlX3B1dChkcml2ZXItPnRleHRjb252X2NhY2hlLCAmZGYtPm9pZCwgKm91dGJ1ZiwKKwkJCQlzaXplKTsKKwkJLyoKKwkJICogd2UgY291bGQgc2F2ZSB1cCBjaGFuZ2VzIGFuZCBmbHVzaCB0aGVtIGFsbCBhdCB0aGUgZW5kLAorCQkgKiBidXQgd2Ugd291bGQgbmVlZCBhbiBleHRyYSBjYWxsIGFmdGVyIGFsbCBkaWZmaW5nIGlzIGRvbmUuCisJCSAqIFNpbmNlIGdlbmVyYXRpbmcgYSBjYWNoZSBlbnRyeSBpcyB0aGUgc2xvdyBwYXRoIGFueXdheSwKKwkJICogdGhpcyBleHRyYSBvdmVyaGVhZCBwcm9iYWJseSBpc24ndCBhIGJpZyBkZWFsLgorCQkgKi8KKwkJbm90ZXNfY2FjaGVfd3JpdGUoZHJpdmVyLT50ZXh0Y29udl9jYWNoZSk7CisJfQorCisJcmV0dXJuIHNpemU7Cit9CisKK2ludCB0ZXh0Y29udl9vYmplY3Qoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICBjb25zdCBjaGFyICpwYXRoLAorCQkgICAgdW5zaWduZWQgbW9kZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgIGludCBvaWRfdmFsaWQsCisJCSAgICBjaGFyICoqYnVmLAorCQkgICAgdW5zaWduZWQgbG9uZyAqYnVmX3NpemUpCit7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRmOworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252OworCisJZGYgPSBhbGxvY19maWxlc3BlYyhwYXRoKTsKKwlmaWxsX2ZpbGVzcGVjKGRmLCBvaWQsIG9pZF92YWxpZCwgbW9kZSk7CisJdGV4dGNvbnYgPSBnZXRfdGV4dGNvbnYociwgZGYpOworCWlmICghdGV4dGNvbnYpIHsKKwkJZnJlZV9maWxlc3BlYyhkZik7CisJCXJldHVybiAwOworCX0KKworCSpidWZfc2l6ZSA9IGZpbGxfdGV4dGNvbnYociwgdGV4dGNvbnYsIGRmLCBidWYpOworCWZyZWVfZmlsZXNwZWMoZGYpOworCXJldHVybiAxOworfQorCit2b2lkIHNldHVwX2RpZmZfcGFnZXIoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCS8qCisJICogSWYgdGhlIHVzZXIgYXNrZWQgZm9yIG91ciBleGl0IGNvZGUsIHRoZW4gZWl0aGVyIHRoZXkgd2FudCAtLXF1aWV0CisJICogb3IgLS1leGl0LWNvZGUuIFdlIHNob3VsZCBkZWZpbml0ZWx5IG5vdCBib3RoZXIgd2l0aCBhIHBhZ2VyIGluIHRoZQorCSAqIGZvcm1lciBjYXNlLCBhcyB3ZSB3aWxsIGdlbmVyYXRlIG5vIG91dHB1dC4gU2luY2Ugd2Ugc3RpbGwgcHJvcGVybHkKKwkgKiByZXBvcnQgb3VyIGV4aXQgY29kZSBldmVuIHdoZW4gYSBwYWdlciBpcyBydW4sIHdlIF9jb3VsZF8gcnVuIGEKKwkgKiBwYWdlciB3aXRoIC0tZXhpdC1jb2RlLiBCdXQgc2luY2Ugd2UgaGF2ZSBub3QgZG9uZSBzbyBoaXN0b3JpY2FsbHksCisJICogYW5kIGJlY2F1c2UgaXQgaXMgZWFzeSB0byBmaW5kIHBlb3BsZSBvbmVsaW5lIGFkdmlzaW5nICJnaXQgZGlmZgorCSAqIC0tZXhpdC1jb2RlIiBpbiBob29rcyBhbmQgb3RoZXIgc2NyaXB0cywgd2UgZG8gbm90IGRvIHNvLgorCSAqLworCWlmICghb3B0LT5mbGFncy5leGl0X3dpdGhfc3RhdHVzICYmCisJICAgIGNoZWNrX3BhZ2VyX2NvbmZpZygiZGlmZiIpICE9IDApCisJCXNldHVwX3BhZ2VyKCk7Cit9CmRpZmYgLS1naXQgYS9kaWZmLmggYi9kaWZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ0M2RjMQotLS0gL2Rldi9udWxsCisrKyBiL2RpZmYuaApAQCAtMCwwICsxLDY0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBKdW5pbyBDIEhhbWFubworICovCisjaWZuZGVmIERJRkZfSAorI2RlZmluZSBESUZGX0gKKworI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAib2lkc2V0LmgiCisKKy8qKgorICogVGhlIGRpZmYgQVBJIGlzIGZvciBwcm9ncmFtcyB0aGF0IGNvbXBhcmUgdHdvIHNldHMgb2YgZmlsZXMgKGUuZy4gdHdvIHRyZWVzLAorICogb25lIHRyZWUgYW5kIHRoZSBpbmRleCkgYW5kIHByZXNlbnQgdGhlIGZvdW5kIGRpZmZlcmVuY2UgaW4gdmFyaW91cyB3YXlzLgorICogVGhlIGNhbGxpbmcgcHJvZ3JhbSBpcyByZXNwb25zaWJsZSBmb3IgZmVlZGluZyB0aGUgQVBJIHBhaXJzIG9mIGZpbGVzLCBvbmUKKyAqIGZyb20gdGhlICJvbGQiIHNldCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgb25lIGZyb20gIm5ldyIgc2V0LCB0aGF0IGFyZQorICogZGlmZmVyZW50LgorICogVGhlIGxpYnJhcnkgY2FsbGVkIHRocm91Z2ggdGhpcyBBUEkgaXMgY2FsbGVkIGRpZmZjb3JlLCBhbmQgaXMgcmVzcG9uc2libGUKKyAqIGZvciB0d28gdGhpbmdzLgorICoKKyAqIC0gZmluZGluZyB0b3RhbCByZXdyaXRlcyAoYC1CYCksIHJlbmFtZXMgKGAtTWApIGFuZCBjb3BpZXMgKGAtQ2ApLCBhbmQKKyAqIGNoYW5nZXMgdGhhdCB0b3VjaCBhIHN0cmluZyAoYC1TYCksIGFzIHNwZWNpZmllZCBieSB0aGUgY2FsbGVyLgorICoKKyAqIC0gb3V0cHV0dGluZyB0aGUgZGlmZmVyZW5jZXMgaW4gdmFyaW91cyBmb3JtYXRzLCBhcyBzcGVjaWZpZWQgYnkgdGhlIGNhbGxlci4KKyAqCisgKiBDYWxsaW5nIHNlcXVlbmNlCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKgorICogLSBQcmVwYXJlIGBzdHJ1Y3QgZGlmZl9vcHRpb25zYCB0byByZWNvcmQgdGhlIHNldCBvZiBkaWZmIG9wdGlvbnMsIGFuZCB0aGVuCisgKiBjYWxsIGByZXBvX2RpZmZfc2V0dXAoKWAgdG8gaW5pdGlhbGl6ZSB0aGlzIHN0cnVjdHVyZS4gIFRoaXMgc2V0cyB1cCB0aGUKKyAqIHZhbmlsbGEgZGVmYXVsdC4KKyAqCisgKiAtIEZpbGwgaW4gdGhlIG9wdGlvbnMgc3RydWN0dXJlIHRvIHNwZWNpZnkgZGVzaXJlZCBvdXRwdXQgZm9ybWF0LCByZW5hbWUKKyAqIGRldGVjdGlvbiwgZXRjLiAgYGRpZmZfb3B0X3BhcnNlKClgIGNhbiBiZSB1c2VkIHRvIHBhcnNlIG9wdGlvbnMgZ2l2ZW4KKyAqIGZyb20gdGhlIGNvbW1hbmQgbGluZSBpbiBhIHdheSBjb25zaXN0ZW50IHdpdGggZXhpc3RpbmcgZ2l0LWRpZmYgZmFtaWx5CisgKiBvZiBwcm9ncmFtcy4KKyAqCisgKiAtIENhbGwgYGRpZmZfc2V0dXBfZG9uZSgpYDsgdGhpcyBpbnNwZWN0cyB0aGUgb3B0aW9ucyBzZXQgdXAgc28gZmFyIGZvcgorICogaW50ZXJuYWwgY29uc2lzdGVuY3kgYW5kIG1ha2UgbmVjZXNzYXJ5IHR3ZWFraW5nIHRvIGl0IChlLmcuIGlmIHRleHR1YWwKKyAqIHBhdGNoIG91dHB1dCB3YXMgYXNrZWQsIHJlY3Vyc2l2ZSBiZWhhdmlvdXIgaXMgdHVybmVkIG9uKTsgdGhlIGNhbGxiYWNrCisgKiBzZXRfZGVmYXVsdCBpbiBkaWZmX29wdGlvbnMgY2FuIGJlIHVzZWQgdG8gdHdlYWsgdGhpcyBtb3JlLgorICoKKyAqIC0gQXMgeW91IGZpbmQgZGlmZmVyZW50IHBhaXJzIG9mIGZpbGVzLCBjYWxsIGBkaWZmX2NoYW5nZSgpYCB0byBmZWVkCisgKiBtb2RpZmllZCBmaWxlcywgYGRpZmZfYWRkcmVtb3ZlKClgIHRvIGZlZWQgY3JlYXRlZCBvciBkZWxldGVkIGZpbGVzLCBvcgorICogYGRpZmZfdW5tZXJnZSgpYCB0byBmZWVkIGEgZmlsZSB3aG9zZSBzdGF0ZSBpcyAndW5tZXJnZWQnIHRvIHRoZSBBUEkuCisgKiBUaGVzZSBhcmUgdGhpbiB3cmFwcGVycyB0byBhIGxvd2VyLWxldmVsIGBkaWZmX3F1ZXVlKClgIGZ1bmN0aW9uIHRoYXQgaXMKKyAqIGZsZXhpYmxlIGVub3VnaCB0byByZWNvcmQgYW55IG9mIHRoZXNlIGtpbmRzIG9mIGNoYW5nZXMuCisgKgorICogLSBPbmNlIHlvdSBmaW5pc2ggZmVlZGluZyB0aGUgcGFpcnMgb2YgZmlsZXMsIGNhbGwgYGRpZmZjb3JlX3N0ZCgpYC4KKyAqIFRoaXMgd2lsbCB0ZWxsIHRoZSBkaWZmY29yZSBsaWJyYXJ5IHRvIGdvIGFoZWFkIGFuZCBkbyBpdHMgd29yay4KKyAqCisgKiAtIENhbGxpbmcgYGRpZmZfZmx1c2goKWAgd2lsbCBwcm9kdWNlIHRoZSBvdXRwdXQuCisgKi8KKworc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoOworc3RydWN0IGNvbW1pdDsKK3N0cnVjdCBkaWZmX2ZpbGVzcGVjOworc3RydWN0IGRpZmZfb3B0aW9uczsKK3N0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdDsKK3N0cnVjdCBvaWRfYXJyYXk7CitzdHJ1Y3Qgb3B0aW9uOworc3RydWN0IHJlcG9zaXRvcnk7CitzdHJ1Y3QgcmV2X2luZm87CitzdHJ1Y3Qgc3RyYnVmOworc3RydWN0IHVzZXJkaWZmX2RyaXZlcjsKKwordHlwZWRlZiBpbnQgKCpwYXRoY2hhbmdlX2ZuX3QpKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSBzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnBhdGgpOworCit0eXBlZGVmIHZvaWQgKCpjaGFuZ2VfZm5fdCkoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJIHVuc2lnbmVkIG9sZF9tb2RlLCB1bnNpZ25lZCBuZXdfbW9kZSwKKwkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkLAorCQkgaW50IG9sZF9vaWRfdmFsaWQsIGludCBuZXdfb2lkX3ZhbGlkLAorCQkgY29uc3QgY2hhciAqZnVsbHBhdGgsCisJCSB1bnNpZ25lZCBvbGRfZGlydHlfc3VibW9kdWxlLCB1bnNpZ25lZCBuZXdfZGlydHlfc3VibW9kdWxlKTsKKwordHlwZWRlZiB2b2lkICgqYWRkX3JlbW92ZV9mbl90KShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgICAgaW50IGFkZHJlbW92ZSwgdW5zaWduZWQgbW9kZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgIGludCBvaWRfdmFsaWQsCisJCSAgICBjb25zdCBjaGFyICpmdWxscGF0aCwgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlKTsKKwordHlwZWRlZiB2b2lkICgqZGlmZl9mb3JtYXRfZm5fdCkoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCB2b2lkICpkYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3Qgc3RyYnVmICooKmRpZmZfcHJlZml4X2ZuX3QpKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgdm9pZCAqZGF0YSk7CisKKyNkZWZpbmUgRElGRl9GT1JNQVRfUkFXCQkweDAwMDEKKyNkZWZpbmUgRElGRl9GT1JNQVRfRElGRlNUQVQJMHgwMDAyCisjZGVmaW5lIERJRkZfRk9STUFUX05VTVNUQVQJMHgwMDA0CisjZGVmaW5lIERJRkZfRk9STUFUX1NVTU1BUlkJMHgwMDA4CisjZGVmaW5lIERJRkZfRk9STUFUX1BBVENICTB4MDAxMAorI2RlZmluZSBESUZGX0ZPUk1BVF9TSE9SVFNUQVQJMHgwMDIwCisjZGVmaW5lIERJRkZfRk9STUFUX0RJUlNUQVQJMHgwMDQwCisKKy8qIFRoZXNlIG92ZXJyaWRlIGFsbCBhYm92ZSAqLworI2RlZmluZSBESUZGX0ZPUk1BVF9OQU1FCTB4MDEwMAorI2RlZmluZSBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUwkweDAyMDAKKyNkZWZpbmUgRElGRl9GT1JNQVRfQ0hFQ0tESUZGCTB4MDQwMAorCisvKiBTYW1lIGFzIG91dHB1dF9mb3JtYXQgPSAwIGJ1dCB3ZSBrbm93IHRoYXQgLXMgZmxhZyB3YXMgZ2l2ZW4KKyAqIGFuZCB3ZSBzaG91bGQgbm90IGdpdmUgZGVmYXVsdCB2YWx1ZSB0byBvdXRwdXRfZm9ybWF0LgorICovCisjZGVmaW5lIERJRkZfRk9STUFUX05PX09VVFBVVAkweDA4MDAKKworI2RlZmluZSBESUZGX0ZPUk1BVF9DQUxMQkFDSwkweDEwMDAKKworI2RlZmluZSBESUZGX0ZMQUdTX0lOSVQgeyAwIH0KK3N0cnVjdCBkaWZmX2ZsYWdzIHsKKworCS8qKgorCSAqIFRlbGxzIGlmIHRyZWUgdHJhdmVyc2FsIGRvbmUgYnkgdHJlZS1kaWZmIHNob3VsZCByZWN1cnNpdmVseSBkZXNjZW5kCisJICogaW50byBhIHRyZWUgb2JqZWN0IHBhaXIgdGhhdCBhcmUgZGlmZmVyZW50IGluIHByZWltYWdlIGFuZCBwb3N0aW1hZ2Ugc2V0LgorCSAqLworCXVuc2lnbmVkIHJlY3Vyc2l2ZTsKKwl1bnNpZ25lZCB0cmVlX2luX3JlY3Vyc2l2ZTsKKworCS8qIEFmZmVjdHMgdGhlIHdheSBob3cgYSBmaWxlIHRoYXQgaXMgc2VlbWluZ2x5IGJpbmFyeSBpcyB0cmVhdGVkLiAqLworCXVuc2lnbmVkIGJpbmFyeTsKKwl1bnNpZ25lZCB0ZXh0OworCisJLyoqCisJICogVGVsbHMgdGhlIHBhdGNoIG91dHB1dCBmb3JtYXQgbm90IHRvIHVzZSBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZXMgb24gdGhlCisJICogImluZGV4IiBsaW5lcy4KKwkgKi8KKwl1bnNpZ25lZCBmdWxsX2luZGV4OworCisJLyogQWZmZWN0cyBpZiBkaWZmLWZpbGVzIHNob3dzIHJlbW92ZWQgZmlsZXMuICovCisJdW5zaWduZWQgc2lsZW50X29uX3JlbW92ZTsKKworCS8qKgorCSAqIFRlbGxzIHRoZSBkaWZmY29yZSBsaWJyYXJ5IHRoYXQgdGhlIGNhbGxlciBpcyBmZWVkaW5nIHVuY2hhbmdlZAorCSAqIGZpbGVwYWlycyB0byBhbGxvdyBjb3BpZXMgZnJvbSB1bm1vZGlmaWVkIGZpbGVzIGJlIGRldGVjdGVkLgorCSAqLworCXVuc2lnbmVkIGZpbmRfY29waWVzX2hhcmRlcjsKKworCXVuc2lnbmVkIGZvbGxvd19yZW5hbWVzOworCXVuc2lnbmVkIHJlbmFtZV9lbXB0eTsKKworCS8qIEludGVybmFsOyB1c2VkIGZvciBvcHRpbWl6YXRpb24gdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBjaGFuZ2UuICovCisJdW5zaWduZWQgaGFzX2NoYW5nZXM7CisKKwl1bnNpZ25lZCBxdWljazsKKworCS8qKgorCSAqIFRlbGxzIGRpZmYtZmlsZXMgdGhhdCB0aGUgaW5wdXQgaXMgbm90IHRyYWNrZWQgZmlsZXMgYnV0IGZpbGVzIGluIHJhbmRvbQorCSAqIGxvY2F0aW9ucyBvbiB0aGUgZmlsZXN5c3RlbS4KKwkgKi8KKwl1bnNpZ25lZCBub19pbmRleDsKKworCS8qKgorCSAqIFRlbGxzIG91dHB1dCByb3V0aW5lIHRoYXQgaXQgaXMgT2sgdG8gY2FsbCB1c2VyIHNwZWNpZmllZCBwYXRjaCBvdXRwdXQKKwkgKiByb3V0aW5lLiAgUGx1bWJpbmcgZGlzYWJsZXMgdGhpcyB0byBlbnN1cmUgc3RhYmxlIG91dHB1dC4KKwkgKi8KKwl1bnNpZ25lZCBhbGxvd19leHRlcm5hbDsKKworCS8qKgorCSAqIEZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIGNhbGxpbmcgcHJvZ3JhbSBhbmQgdGhlIG9wdGlvbnMgcGFyc2VyOworCSAqIHRlbGwgdGhlIGNhbGxpbmcgcHJvZ3JhbSB0byBzaWduYWwgdGhlIHByZXNlbmNlIG9mIGRpZmZlcmVuY2UgdXNpbmcKKwkgKiBwcm9ncmFtIGV4aXQgY29kZS4KKwkgKi8KKwl1bnNpZ25lZCBleGl0X3dpdGhfc3RhdHVzOworCisJLyoqCisJICogVGVsbHMgdGhlIGxpYnJhcnkgdGhhdCB0aGUgY2FsbGluZyBwcm9ncmFtIGlzIGZlZWRpbmcgdGhlIGZpbGVwYWlycworCSAqIHJldmVyc2VkOyBgb25lYCBpcyB0d28sIGFuZCBgdHdvYCBpcyBvbmUuCisJICovCisJdW5zaWduZWQgcmV2ZXJzZV9kaWZmOworCisJdW5zaWduZWQgY2hlY2tfZmFpbGVkOworCXVuc2lnbmVkIHJlbGF0aXZlX25hbWU7CisJdW5zaWduZWQgaWdub3JlX3N1Ym1vZHVsZXM7CisJdW5zaWduZWQgZGlyc3RhdF9jdW11bGF0aXZlOworCXVuc2lnbmVkIGRpcnN0YXRfYnlfZmlsZTsKKwl1bnNpZ25lZCBhbGxvd190ZXh0Y29udjsKKwl1bnNpZ25lZCB0ZXh0Y29udl9zZXRfdmlhX2NtZGxpbmU7CisJdW5zaWduZWQgZGlmZl9mcm9tX2NvbnRlbnRzOworCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZXM7CisJdW5zaWduZWQgaWdub3JlX3VudHJhY2tlZF9pbl9zdWJtb2R1bGVzOworCXVuc2lnbmVkIGlnbm9yZV9kaXJ0eV9zdWJtb2R1bGVzOworCXVuc2lnbmVkIG92ZXJyaWRlX3N1Ym1vZHVsZV9jb25maWc7CisJdW5zaWduZWQgZGlyc3RhdF9ieV9saW5lOworCXVuc2lnbmVkIGZ1bmNjb250ZXh0OworCXVuc2lnbmVkIGRlZmF1bHRfZm9sbG93X3JlbmFtZXM7CisJdW5zaWduZWQgc3RhdF93aXRoX3N1bW1hcnk7CisJdW5zaWduZWQgc3VwcHJlc3NfZGlmZl9oZWFkZXJzOworCXVuc2lnbmVkIGR1YWxfY29sb3JfZGlmZmVkX2RpZmZzOworCXVuc2lnbmVkIHN1cHByZXNzX2h1bmtfaGVhZGVyX2xpbmVfY291bnQ7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgZGlmZl9mbGFnc19vcihzdHJ1Y3QgZGlmZl9mbGFncyAqYSwKKwkJCQkgY29uc3Qgc3RydWN0IGRpZmZfZmxhZ3MgKmIpCit7CisJY2hhciAqdG1wX2EgPSAoY2hhciAqKWE7CisJY29uc3QgY2hhciAqdG1wX2IgPSAoY29uc3QgY2hhciAqKWI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBkaWZmX2ZsYWdzKTsgaSsrKQorCQl0bXBfYVtpXSB8PSB0bXBfYltpXTsKK30KKworI2RlZmluZSBESUZGX1hETF9UU1Qob3B0cywgZmxhZykgICAgKChvcHRzKS0+eGRsX29wdHMgJiBYREZfIyNmbGFnKQorI2RlZmluZSBESUZGX1hETF9TRVQob3B0cywgZmxhZykgICAgKChvcHRzKS0+eGRsX29wdHMgfD0gWERGXyMjZmxhZykKKyNkZWZpbmUgRElGRl9YRExfQ0xSKG9wdHMsIGZsYWcpICAgICgob3B0cyktPnhkbF9vcHRzICY9IH5YREZfIyNmbGFnKQorCisjZGVmaW5lIERJRkZfV0lUSF9BTEcob3B0cywgZmxhZykgICAoKChvcHRzKS0+eGRsX29wdHMgJiB+WERGX0RJRkZfQUxHT1JJVEhNX01BU0spIHwgWERGXyMjZmxhZykKKworZW51bSBkaWZmX3dvcmRzX3R5cGUgeworCURJRkZfV09SRFNfTk9ORSA9IDAsCisJRElGRl9XT1JEU19QT1JDRUxBSU4sCisJRElGRl9XT1JEU19QTEFJTiwKKwlESUZGX1dPUkRTX0NPTE9SCit9OworCitlbnVtIGRpZmZfc3VibW9kdWxlX2Zvcm1hdCB7CisJRElGRl9TVUJNT0RVTEVfU0hPUlQgPSAwLAorCURJRkZfU1VCTU9EVUxFX0xPRywKKwlESUZGX1NVQk1PRFVMRV9JTkxJTkVfRElGRgorfTsKKworLyoqCisgKiB0aGUgc2V0IG9mIG9wdGlvbnMgdGhlIGNhbGxpbmcgcHJvZ3JhbSB3YW50cyB0byBhZmZlY3QgdGhlIG9wZXJhdGlvbiBvZgorICogZGlmZmNvcmUgbGlicmFyeSB3aXRoLgorICovCitzdHJ1Y3QgZGlmZl9vcHRpb25zIHsKKwljb25zdCBjaGFyICpvcmRlcmZpbGU7CisKKwkvKioKKwkgKiBBIGNvbnN0YW50IHN0cmluZyAoY2FuIGFuZCB0eXBpY2FsbHkgZG9lcyBjb250YWluIG5ld2xpbmVzIHRvIGxvb2sgZm9yCisJICogYSBibG9jayBvZiB0ZXh0LCBub3QganVzdCBhIHNpbmdsZSBsaW5lKSB0byBmaWx0ZXIgb3V0IHRoZSBmaWxlcGFpcnMKKwkgKiB0aGF0IGRvIG5vdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBzdHJpbmdzIGNvbnRhaW5lZCBpbiBpdHMgcHJlaW1hZ2UgYW5kCisJICogcG9zdGltYWdlIG9mIHRoZSBkaWZmX3F1ZXVlLgorCSAqLworCWNvbnN0IGNoYXIgKnBpY2theGU7CisKKwljb25zdCBjaGFyICpzaW5nbGVfZm9sbG93OworCWNvbnN0IGNoYXIgKmFfcHJlZml4LCAqYl9wcmVmaXg7CisJY29uc3QgY2hhciAqbGluZV9wcmVmaXg7CisJc2l6ZV90IGxpbmVfcHJlZml4X2xlbmd0aDsKKworCS8qKgorCSAqIGNvbGxlY3Rpb24gb2YgYm9vbGVhbiBvcHRpb25zIHRoYXQgYWZmZWN0cyB0aGUgb3BlcmF0aW9uLCBidXQgc29tZSBkbworCSAqIG5vdCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhlIGRpZmZjb3JlIGxpYnJhcnkuCisJICovCisJc3RydWN0IGRpZmZfZmxhZ3MgZmxhZ3M7CisKKwkvKiBkaWZmLWZpbHRlciBiaXRzICovCisJdW5zaWduZWQgaW50IGZpbHRlcjsKKworCWludCB1c2VfY29sb3I7CisKKwkvKiBOdW1iZXIgb2YgY29udGV4dCBsaW5lcyB0byBnZW5lcmF0ZSBpbiBwYXRjaCBvdXRwdXQuICovCisJaW50IGNvbnRleHQ7CisKKwlpbnQgaW50ZXJodW5rY29udGV4dDsKKworCS8qIEFmZmVjdHMgdGhlIHdheSBkZXRlY3Rpb24gbG9naWMgZm9yIGNvbXBsZXRlIHJld3JpdGVzLCByZW5hbWVzIGFuZAorCSAqIGNvcGllcy4KKwkgKi8KKwlpbnQgYnJlYWtfb3B0OworCWludCBkZXRlY3RfcmVuYW1lOworCisJaW50IGlycmV2ZXJzaWJsZV9kZWxldGU7CisJaW50IHNraXBfc3RhdF91bm1hdGNoOworCWludCBsaW5lX3Rlcm1pbmF0aW9uOworCisJLyogVGhlIG91dHB1dCBmb3JtYXQgdXNlZCB3aGVuIGBkaWZmX2ZsdXNoKClgIGlzIHJ1bi4gKi8KKwlpbnQgb3V0cHV0X2Zvcm1hdDsKKworCXVuc2lnbmVkIHBpY2theGVfb3B0czsKKworCS8qIEFmZmVjdHMgdGhlIHdheSBkZXRlY3Rpb24gbG9naWMgZm9yIGNvbXBsZXRlIHJld3JpdGVzLCByZW5hbWVzIGFuZAorCSAqIGNvcGllcy4KKwkgKi8KKwlpbnQgcmVuYW1lX3Njb3JlOworCWludCByZW5hbWVfbGltaXQ7CisKKwlpbnQgbmVlZGVkX3JlbmFtZV9saW1pdDsKKwlpbnQgZGVncmFkZWRfY2NfdG9fYzsKKwlpbnQgc2hvd19yZW5hbWVfcHJvZ3Jlc3M7CisJaW50IGRpcnN0YXRfcGVybWlsbGU7CisJaW50IHNldHVwOworCisJLyogTnVtYmVyIG9mIGhleGRpZ2l0cyB0byBhYmJyZXZpYXRlIHJhdyBmb3JtYXQgb3V0cHV0IHRvLiAqLworCWludCBhYmJyZXY7CisKKwkvKiBJZiBub24temVybywgdGhlbiBzdG9wIGNvbXB1dGluZyBhZnRlciB0aGlzIG1hbnkgY2hhbmdlcy4gKi8KKwlpbnQgbWF4X2NoYW5nZXM7CisJLyogRm9yIGludGVybmFsIHVzZSBvbmx5LiAqLworCWludCBudW1fY2hhbmdlczsKKworCWludCBpdGFfaW52aXNpYmxlX2luX2luZGV4OworLyogd2hpdGUtc3BhY2UgZXJyb3IgaGlnaGxpZ2h0aW5nICovCisjZGVmaW5lIFdTRUhfTkVXICgxPDwxMikKKyNkZWZpbmUgV1NFSF9DT05URVhUICgxPDwxMykKKyNkZWZpbmUgV1NFSF9PTEQgKDE8PDE0KQorCXVuc2lnbmVkIHdzX2Vycm9yX2hpZ2hsaWdodDsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJaW50IHByZWZpeF9sZW5ndGg7CisJY29uc3QgY2hhciAqc3RhdF9zZXA7CisJaW50IHhkbF9vcHRzOworCisJLyogc2VlIERvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dCAqLworCWNoYXIgKiphbmNob3JzOworCXNpemVfdCBhbmNob3JzX25yLCBhbmNob3JzX2FsbG9jOworCisJaW50IHN0YXRfd2lkdGg7CisJaW50IHN0YXRfbmFtZV93aWR0aDsKKwlpbnQgc3RhdF9ncmFwaF93aWR0aDsKKwlpbnQgc3RhdF9jb3VudDsKKwljb25zdCBjaGFyICp3b3JkX3JlZ2V4OworCWVudW0gZGlmZl93b3Jkc190eXBlIHdvcmRfZGlmZjsKKwllbnVtIGRpZmZfc3VibW9kdWxlX2Zvcm1hdCBzdWJtb2R1bGVfZm9ybWF0OworCisJc3RydWN0IG9pZHNldCAqb2JqZmluZDsKKworCS8qIHRoaXMgaXMgc2V0IGJ5IGRpZmZjb3JlIGZvciBESUZGX0ZPUk1BVF9QQVRDSCAqLworCWludCBmb3VuZF9jaGFuZ2VzOworCisJLyogdG8gc3VwcG9ydCBpbnRlcm5hbCBkaWZmIHJlY3Vyc2lvbiBieSAtLWZvbGxvdyBoYWNrKi8KKwlpbnQgZm91bmRfZm9sbG93OworCisJLyogQ2FsbGJhY2sgd2hpY2ggYWxsb3dzIHR3ZWFraW5nIHRoZSBvcHRpb25zIGluIGRpZmZfc2V0dXBfZG9uZSgpLiAqLworCXZvaWQgKCpzZXRfZGVmYXVsdCkoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKKworCUZJTEUgKmZpbGU7CisJaW50IGNsb3NlX2ZpbGU7CisKKyNkZWZpbmUgT1VUUFVUX0lORElDQVRPUl9ORVcgMAorI2RlZmluZSBPVVRQVVRfSU5ESUNBVE9SX09MRCAxCisjZGVmaW5lIE9VVFBVVF9JTkRJQ0FUT1JfQ09OVEVYVCAyCisJY2hhciBvdXRwdXRfaW5kaWNhdG9yc1szXTsKKworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlwYXRoY2hhbmdlX2ZuX3QgcGF0aGNoYW5nZTsKKwljaGFuZ2VfZm5fdCBjaGFuZ2U7CisJYWRkX3JlbW92ZV9mbl90IGFkZF9yZW1vdmU7CisJdm9pZCAqY2hhbmdlX2ZuX2RhdGE7CisJZGlmZl9mb3JtYXRfZm5fdCBmb3JtYXRfY2FsbGJhY2s7CisJdm9pZCAqZm9ybWF0X2NhbGxiYWNrX2RhdGE7CisJZGlmZl9wcmVmaXhfZm5fdCBvdXRwdXRfcHJlZml4OworCXZvaWQgKm91dHB1dF9wcmVmaXhfZGF0YTsKKworCWludCBkaWZmX3BhdGhfY291bnRlcjsKKworCXN0cnVjdCBlbWl0dGVkX2RpZmZfc3ltYm9scyAqZW1pdHRlZF9zeW1ib2xzOworCWVudW0geworCQlDT0xPUl9NT1ZFRF9OTyA9IDAsCisJCUNPTE9SX01PVkVEX1BMQUlOID0gMSwKKwkJQ09MT1JfTU9WRURfQkxPQ0tTID0gMiwKKwkJQ09MT1JfTU9WRURfWkVCUkEgPSAzLAorCQlDT0xPUl9NT1ZFRF9aRUJSQV9ESU0gPSA0LAorCX0gY29sb3JfbW92ZWQ7CisJI2RlZmluZSBDT0xPUl9NT1ZFRF9ERUZBVUxUIENPTE9SX01PVkVEX1pFQlJBCisJI2RlZmluZSBDT0xPUl9NT1ZFRF9NSU5fQUxOVU1fQ09VTlQgMjAKKworCS8qIFhERl9XSElURVNQQUNFX0ZMQUdTIHJlZ2FyZGluZyBibG9jayBkZXRlY3Rpb24gYXJlIHNldCBhdCAyLCAzLCA0ICovCisJI2RlZmluZSBDT0xPUl9NT1ZFRF9XU19BTExPV19JTkRFTlRBVElPTl9DSEFOR0UgKDE8PDUpCisJI2RlZmluZSBDT0xPUl9NT1ZFRF9XU19FUlJPUiAoMTw8MCkKKwl1bnNpZ25lZCBjb2xvcl9tb3ZlZF93c19oYW5kbGluZzsKKworCXN0cnVjdCByZXBvc2l0b3J5ICpyZXBvOworCXN0cnVjdCBvcHRpb24gKnBhcnNlb3B0czsKK307CisKK3Vuc2lnbmVkIGRpZmZfZmlsdGVyX2JpdChjaGFyIHN0YXR1cyk7CisKK3ZvaWQgZGlmZl9lbWl0X3N1Ym1vZHVsZV9kZWwoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqbGluZSk7Cit2b2lkIGRpZmZfZW1pdF9zdWJtb2R1bGVfYWRkKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKmxpbmUpOwordm9pZCBkaWZmX2VtaXRfc3VibW9kdWxlX3VudHJhY2tlZChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLCBjb25zdCBjaGFyICpwYXRoKTsKK3ZvaWQgZGlmZl9lbWl0X3N1Ym1vZHVsZV9tb2RpZmllZChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLCBjb25zdCBjaGFyICpwYXRoKTsKK3ZvaWQgZGlmZl9lbWl0X3N1Ym1vZHVsZV9oZWFkZXIoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqaGVhZGVyKTsKK3ZvaWQgZGlmZl9lbWl0X3N1Ym1vZHVsZV9lcnJvcihzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLCBjb25zdCBjaGFyICplcnIpOwordm9pZCBkaWZmX2VtaXRfc3VibW9kdWxlX3BpcGV0aHJvdWdoKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkJICAgICBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKTsKKworc3RydWN0IGRpZmZzdGF0X3QgeworCWludCBucjsKKwlpbnQgYWxsb2M7CisJc3RydWN0IGRpZmZzdGF0X2ZpbGUgeworCQljaGFyICpmcm9tX25hbWU7CisJCWNoYXIgKm5hbWU7CisJCWNoYXIgKnByaW50X25hbWU7CisJCWNvbnN0IGNoYXIgKmNvbW1lbnRzOworCQl1bnNpZ25lZCBpc191bm1lcmdlZDoxOworCQl1bnNpZ25lZCBpc19iaW5hcnk6MTsKKwkJdW5zaWduZWQgaXNfcmVuYW1lZDoxOworCQl1bnNpZ25lZCBpc19pbnRlcmVzdGluZzoxOworCQl1aW50bWF4X3QgYWRkZWQsIGRlbGV0ZWQ7CisJfSAqKmZpbGVzOworfTsKKworZW51bSBjb2xvcl9kaWZmIHsKKwlESUZGX1JFU0VUID0gMCwKKwlESUZGX0NPTlRFWFQgPSAxLAorCURJRkZfTUVUQUlORk8gPSAyLAorCURJRkZfRlJBR0lORk8gPSAzLAorCURJRkZfRklMRV9PTEQgPSA0LAorCURJRkZfRklMRV9ORVcgPSA1LAorCURJRkZfQ09NTUlUID0gNiwKKwlESUZGX1dISVRFU1BBQ0UgPSA3LAorCURJRkZfRlVOQ0lORk8gPSA4LAorCURJRkZfRklMRV9PTERfTU9WRUQgPSA5LAorCURJRkZfRklMRV9PTERfTU9WRURfQUxUID0gMTAsCisJRElGRl9GSUxFX09MRF9NT1ZFRF9ESU0gPSAxMSwKKwlESUZGX0ZJTEVfT0xEX01PVkVEX0FMVF9ESU0gPSAxMiwKKwlESUZGX0ZJTEVfTkVXX01PVkVEID0gMTMsCisJRElGRl9GSUxFX05FV19NT1ZFRF9BTFQgPSAxNCwKKwlESUZGX0ZJTEVfTkVXX01PVkVEX0RJTSA9IDE1LAorCURJRkZfRklMRV9ORVdfTU9WRURfQUxUX0RJTSA9IDE2LAorCURJRkZfQ09OVEVYVF9ESU0gPSAxNywKKwlESUZGX0ZJTEVfT0xEX0RJTSA9IDE4LAorCURJRkZfRklMRV9ORVdfRElNID0gMTksCisJRElGRl9DT05URVhUX0JPTEQgPSAyMCwKKwlESUZGX0ZJTEVfT0xEX0JPTEQgPSAyMSwKKwlESUZGX0ZJTEVfTkVXX0JPTEQgPSAyMiwKK307CisKK2NvbnN0IGNoYXIgKmRpZmZfZ2V0X2NvbG9yKGludCBkaWZmX3VzZV9jb2xvciwgZW51bSBjb2xvcl9kaWZmIGl4KTsKKyNkZWZpbmUgZGlmZl9nZXRfY29sb3Jfb3B0KG8sIGl4KSBcCisJZGlmZl9nZXRfY29sb3IoKG8pLT51c2VfY29sb3IsIGl4KQorCisKK2NvbnN0IGNoYXIgKmRpZmZfbGluZV9wcmVmaXgoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKKworCitleHRlcm4gY29uc3QgY2hhciBtaW1lX2JvdW5kYXJ5X2xlYWRlcltdOworCitzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKmRpZmZfdHJlZV9wYXRocygKKwlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnAsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICoqcGFyZW50c19vaWQsIGludCBucGFyZW50LAorCXN0cnVjdCBzdHJidWYgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCk7CitpbnQgZGlmZl90cmVlX29pZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLAorCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsCisJCSAgY29uc3QgY2hhciAqYmFzZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KTsKK2ludCBkaWZmX3Jvb3RfdHJlZV9vaWQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwgY29uc3QgY2hhciAqYmFzZSwKKwkJICAgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCk7CisKK3N0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCB7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpuZXh0OworCWNoYXIgKnBhdGg7CisJdW5zaWduZWQgaW50IG1vZGU7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXJlbnQgeworCQljaGFyIHN0YXR1czsKKwkJdW5zaWduZWQgaW50IG1vZGU7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlzdHJ1Y3Qgc3RyYnVmIHBhdGg7CisJfSBwYXJlbnRbRkxFWF9BUlJBWV07Cit9OworI2RlZmluZSBjb21iaW5lX2RpZmZfcGF0aF9zaXplKG4sIGwpIFwKKwlzdF9hZGQ0KHNpemVvZihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGgpLCAobCksIDEsIFwKKwkJc3RfbXVsdChzaXplb2Yoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXJlbnQpLCAobikpKQorCit2b2lkIHNob3dfY29tYmluZWRfZGlmZihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKmVsZW0sIGludCBudW1fcGFyZW50LAorCQkJaW50IGRlbnNlLCBzdHJ1Y3QgcmV2X2luZm8gKik7CisKK3ZvaWQgZGlmZl90cmVlX2NvbWJpbmVkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3Qgc3RydWN0IG9pZF9hcnJheSAqcGFyZW50cywgaW50IGRlbnNlLCBzdHJ1Y3QgcmV2X2luZm8gKnJldik7CisKK3ZvaWQgZGlmZl90cmVlX2NvbWJpbmVkX21lcmdlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IGRlbnNlLCBzdHJ1Y3QgcmV2X2luZm8gKnJldik7CisKK3ZvaWQgZGlmZl9zZXRfbW5lbW9uaWNfcHJlZml4KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpOworCitpbnQgZGlmZl9jYW5fcXVpdF9lYXJseShzdHJ1Y3QgZGlmZl9vcHRpb25zICopOworCit2b2lkIGRpZmZfYWRkcmVtb3ZlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwKKwkJICAgIGludCBhZGRyZW1vdmUsCisJCSAgICB1bnNpZ25lZCBtb2RlLAorCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgaW50IG9pZF92YWxpZCwKKwkJICAgIGNvbnN0IGNoYXIgKmZ1bGxwYXRoLCB1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUpOworCit2b2lkIGRpZmZfY2hhbmdlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwKKwkJIHVuc2lnbmVkIG1vZGUxLCB1bnNpZ25lZCBtb2RlMiwKKwkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkLAorCQkgaW50IG9sZF9vaWRfdmFsaWQsIGludCBuZXdfb2lkX3ZhbGlkLAorCQkgY29uc3QgY2hhciAqZnVsbHBhdGgsCisJCSB1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUxLCB1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUyKTsKKworc3RydWN0IGRpZmZfZmlsZXBhaXIgKmRpZmZfdW5tZXJnZShzdHJ1Y3QgZGlmZl9vcHRpb25zICosIGNvbnN0IGNoYXIgKnBhdGgpOworCit2b2lkIGNvbXB1dGVfZGlmZnN0YXQoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywgc3RydWN0IGRpZmZzdGF0X3QgKmRpZmZzdGF0LAorCQkgICAgICBzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEpOwordm9pZCBmcmVlX2RpZmZzdGF0X2luZm8oc3RydWN0IGRpZmZzdGF0X3QgKmRpZmZzdGF0KTsKKworI2RlZmluZSBESUZGX1NFVFVQX1JFVkVSU0UgICAgICAJMQorI2RlZmluZSBESUZGX1NFVFVQX1VTRV9TSVpFX0NBQ0hFCTQKKworLyoKKyAqIFBvb3IgbWFuJ3MgYWx0ZXJuYXRpdmUgdG8gcGFyc2Utb3B0aW9uLCB0byBhbGxvdyBib3RoIHN0dWNrIGZvcm0KKyAqICgtLW9wdGlvbj12YWx1ZSkgYW5kIHNlcGFyYXRlIGZvcm0gKC0tb3B0aW9uIHZhbHVlKS4KKyAqLworaW50IHBhcnNlX2xvbmdfb3B0KGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqKmFyZ3YsCisJCSAgIGNvbnN0IGNoYXIgKipvcHRhcmcpOworCitpbnQgZ2l0X2RpZmZfYmFzaWNfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKK2ludCBnaXRfZGlmZl9oZXVyaXN0aWNfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKK3ZvaWQgaW5pdF9kaWZmX3VpX2RlZmF1bHRzKHZvaWQpOworaW50IGdpdF9kaWZmX3VpX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CisjaWZuZGVmIE5PX1RIRV9SRVBPU0lUT1JZX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjZGVmaW5lIGRpZmZfc2V0dXAoZGlmZm9wdHMpIHJlcG9fZGlmZl9zZXR1cCh0aGVfcmVwb3NpdG9yeSwgZGlmZm9wdHMpCisjZW5kaWYKK3ZvaWQgcmVwb19kaWZmX3NldHVwKHN0cnVjdCByZXBvc2l0b3J5ICosIHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CitpbnQgZGlmZl9vcHRfcGFyc2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqLCBjb25zdCBjaGFyICoqLCBpbnQsIGNvbnN0IGNoYXIgKik7Cit2b2lkIGRpZmZfc2V0dXBfZG9uZShzdHJ1Y3QgZGlmZl9vcHRpb25zICopOworaW50IGdpdF9jb25maWdfcmVuYW1lKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpOworCisjZGVmaW5lIERJRkZfREVURUNUX1JFTkFNRQkxCisjZGVmaW5lIERJRkZfREVURUNUX0NPUFkJMgorCisjZGVmaW5lIERJRkZfUElDS0FYRV9BTEwJMQorI2RlZmluZSBESUZGX1BJQ0tBWEVfUkVHRVgJMgorCisjZGVmaW5lIERJRkZfUElDS0FYRV9LSU5EX1MJNCAvKiB0cmFkaXRpb25hbCBwbHVtYmluZyBjb3VudGVyICovCisjZGVmaW5lIERJRkZfUElDS0FYRV9LSU5EX0cJOCAvKiBncmVwIGluIHRoZSBwYXRjaCAqLworI2RlZmluZSBESUZGX1BJQ0tBWEVfS0lORF9PQkpGSU5ECTE2IC8qIHNwZWNpZmljIG9iamVjdCBJRHMgKi8KKworI2RlZmluZSBESUZGX1BJQ0tBWEVfS0lORFNfTUFTSyAoRElGRl9QSUNLQVhFX0tJTkRfUyB8IFwKKwkJCQkgRElGRl9QSUNLQVhFX0tJTkRfRyB8IFwKKwkJCQkgRElGRl9QSUNLQVhFX0tJTkRfT0JKRklORCkKKworI2RlZmluZSBESUZGX1BJQ0tBWEVfSUdOT1JFX0NBU0UJMzIKKwordm9pZCBkaWZmY29yZV9zdGQoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKK3ZvaWQgZGlmZmNvcmVfZml4X2RpZmZfaW5kZXgodm9pZCk7CisKKyNkZWZpbmUgQ09NTU9OX0RJRkZfT1BUSU9OU19IRUxQIFwKKyJcbmNvbW1vbiBkaWZmIG9wdGlvbnM6XG4iIFwKKyIgIC16ICAgICAgICAgICAgb3V0cHV0IGRpZmYtcmF3IHdpdGggbGluZXMgdGVybWluYXRlZCB3aXRoIE5VTC5cbiIgXAorIiAgLXAgICAgICAgICAgICBvdXRwdXQgcGF0Y2ggZm9ybWF0LlxuIiBcCisiICAtdSAgICAgICAgICAgIHN5bm9ueW0gZm9yIC1wLlxuIiBcCisiICAtLXBhdGNoLXdpdGgtcmF3XG4iIFwKKyIgICAgICAgICAgICAgICAgb3V0cHV0IGJvdGggYSBwYXRjaCBhbmQgdGhlIGRpZmYtcmF3IGZvcm1hdC5cbiIgXAorIiAgLS1zdGF0ICAgICAgICBzaG93IGRpZmZzdGF0IGluc3RlYWQgb2YgcGF0Y2guXG4iIFwKKyIgIC0tbnVtc3RhdCAgICAgc2hvdyBudW1lcmljIGRpZmZzdGF0IGluc3RlYWQgb2YgcGF0Y2guXG4iIFwKKyIgIC0tcGF0Y2gtd2l0aC1zdGF0XG4iIFwKKyIgICAgICAgICAgICAgICAgb3V0cHV0IGEgcGF0Y2ggYW5kIHByZXBlbmQgaXRzIGRpZmZzdGF0LlxuIiBcCisiICAtLW5hbWUtb25seSAgIHNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzLlxuIiBcCisiICAtLW5hbWUtc3RhdHVzIHNob3cgbmFtZXMgYW5kIHN0YXR1cyBvZiBjaGFuZ2VkIGZpbGVzLlxuIiBcCisiICAtLWZ1bGwtaW5kZXggIHNob3cgZnVsbCBvYmplY3QgbmFtZSBvbiBpbmRleCBsaW5lcy5cbiIgXAorIiAgLS1hYmJyZXY9PG4+ICBhYmJyZXZpYXRlIG9iamVjdCBuYW1lcyBpbiBkaWZmLXRyZWUgaGVhZGVyIGFuZCBkaWZmLXJhdy5cbiIgXAorIiAgLVIgICAgICAgICAgICBzd2FwIGlucHV0IGZpbGUgcGFpcnMuXG4iIFwKKyIgIC1CICAgICAgICAgICAgZGV0ZWN0IGNvbXBsZXRlIHJld3JpdGVzLlxuIiBcCisiICAtTSAgICAgICAgICAgIGRldGVjdCByZW5hbWVzLlxuIiBcCisiICAtQyAgICAgICAgICAgIGRldGVjdCBjb3BpZXMuXG4iIFwKKyIgIC0tZmluZC1jb3BpZXMtaGFyZGVyXG4iIFwKKyIgICAgICAgICAgICAgICAgdHJ5IHVuY2hhbmdlZCBmaWxlcyBhcyBjYW5kaWRhdGUgZm9yIGNvcHkgZGV0ZWN0aW9uLlxuIiBcCisiICAtbDxuPiAgICAgICAgIGxpbWl0IHJlbmFtZSBhdHRlbXB0cyB1cCB0byA8bj4gcGF0aHMuXG4iIFwKKyIgIC1PPGZpbGU+ICAgICAgcmVvcmRlciBkaWZmcyBhY2NvcmRpbmcgdG8gdGhlIDxmaWxlPi5cbiIgXAorIiAgLVM8c3RyaW5nPiAgICBmaW5kIGZpbGVwYWlyIHdob3NlIG9ubHkgb25lIHNpZGUgY29udGFpbnMgdGhlIHN0cmluZy5cbiIgXAorIiAgLS1waWNrYXhlLWFsbFxuIiBcCisiICAgICAgICAgICAgICAgIHNob3cgYWxsIGZpbGVzIGRpZmYgd2hlbiAtUyBpcyB1c2VkIGFuZCBoaXQgaXMgZm91bmQuXG4iIFwKKyIgIC1hICAtLXRleHQgICAgdHJlYXQgYWxsIGZpbGVzIGFzIHRleHQuXG4iCisKK2ludCBkaWZmX3F1ZXVlX2lzX2VtcHR5KHZvaWQpOwordm9pZCBkaWZmX2ZsdXNoKHN0cnVjdCBkaWZmX29wdGlvbnMqKTsKK3ZvaWQgZGlmZl93YXJuX3JlbmFtZV9saW1pdChjb25zdCBjaGFyICp2YXJuYW1lLCBpbnQgbmVlZGVkLCBpbnQgZGVncmFkZWRfY2MpOworCisvKiBkaWZmLXJhdyBzdGF0dXMgbGV0dGVycyAqLworI2RlZmluZSBESUZGX1NUQVRVU19BRERFRAkJJ0EnCisjZGVmaW5lIERJRkZfU1RBVFVTX0NPUElFRAkJJ0MnCisjZGVmaW5lIERJRkZfU1RBVFVTX0RFTEVURUQJCSdEJworI2RlZmluZSBESUZGX1NUQVRVU19NT0RJRklFRAkJJ00nCisjZGVmaW5lIERJRkZfU1RBVFVTX1JFTkFNRUQJCSdSJworI2RlZmluZSBESUZGX1NUQVRVU19UWVBFX0NIQU5HRUQJJ1QnCisjZGVmaW5lIERJRkZfU1RBVFVTX1VOS05PV04JCSdYJworI2RlZmluZSBESUZGX1NUQVRVU19VTk1FUkdFRAkJJ1UnCisKKy8qIHRoZXNlIGFyZSBub3QgZGlmZi1yYXcgc3RhdHVzIGxldHRlcnMgcHJvcGVyLCBidXQgdXNlZCBieQorICogZGlmZmNvcmUtZmlsdGVyIGluc24gdG8gc3BlY2lmeSBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucy4KKyAqLworI2RlZmluZSBESUZGX1NUQVRVU19GSUxURVJfQU9OCQknKicKKyNkZWZpbmUgRElGRl9TVEFUVVNfRklMVEVSX0JST0tFTgknQicKKworLyoKKyAqIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gZmluZF91bmlxdWVfYWJicmV2KCkgaW4gdGhhdAorICogaXQgc3R1ZmZzIHRoZSByZXN1bHQgd2l0aCBkb3RzIGZvciBhbGlnbm1lbnQuCisgKi8KK2NvbnN0IGNoYXIgKmRpZmZfYWxpZ25lZF9hYmJyZXYoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqc2hhMSwgaW50KTsKKworLyogZG8gbm90IHJlcG9ydCBhbnl0aGluZyBvbiByZW1vdmVkIHBhdGhzICovCisjZGVmaW5lIERJRkZfU0lMRU5UX09OX1JFTU9WRUQgMDEKKy8qIHJlcG9ydCByYWNpbHktY2xlYW4gcGF0aHMgYXMgbW9kaWZpZWQgKi8KKyNkZWZpbmUgRElGRl9SQUNZX0lTX01PRElGSUVEIDAyCitpbnQgcnVuX2RpZmZfZmlsZXMoc3RydWN0IHJldl9pbmZvICpyZXZzLCB1bnNpZ25lZCBpbnQgb3B0aW9uKTsKK2ludCBydW5fZGlmZl9pbmRleChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBjYWNoZWQpOworCitpbnQgZG9fZGlmZl9jYWNoZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosIHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CitpbnQgZGlmZl9mbHVzaF9wYXRjaF9pZChzdHJ1Y3QgZGlmZl9vcHRpb25zICosIHN0cnVjdCBvYmplY3RfaWQgKiwgaW50LCBpbnQpOwordm9pZCBmbHVzaF9vbmVfaHVuayhzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHQsIGdpdF9oYXNoX2N0eCAqY3R4KTsKKworaW50IGRpZmZfcmVzdWx0X2NvZGUoc3RydWN0IGRpZmZfb3B0aW9ucyAqLCBpbnQpOworCitpbnQgZGlmZl9ub19pbmRleChzdHJ1Y3QgcmV2X2luZm8gKiwKKwkJICBpbnQgaW1wbGljaXRfbm9faW5kZXgsIGludCwgY29uc3QgY2hhciAqKik7CisKK2ludCBpbmRleF9kaWZmZXJzX2Zyb20oc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKmRlZiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBkaWZmX2ZsYWdzICpmbGFncywKKwkJICAgICAgIGludCBpdGFfaW52aXNpYmxlX2luX2luZGV4KTsKKworLyoKKyAqIEZpbGwgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlc3BlYyAiZGYiLCByZXNwZWN0aW5nIGFueSB0ZXh0Y29udiBkZWZpbmVkIGJ5CisgKiBpdHMgdXNlcmRpZmYgZHJpdmVyLiAgVGhlICJkcml2ZXIiIHBhcmFtZXRlciBtdXN0IGNvbWUgZnJvbSBhCisgKiBwcmV2aW91cyBjYWxsIHRvIGdldF90ZXh0Y29udigpLCBhbmQgdGhlcmVmb3JlIHNob3VsZCBlaXRoZXIgYmUgTlVMTCBvciBoYXZlCisgKiB0ZXh0Y29udiBlbmFibGVkLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgbWVtb3J5IG93bmVyc2hpcCBvZiB0aGUgcmVzdWx0aW5nIGJ1ZmZlciBkZXBlbmRzIG9uIHdoZXRoZXIKKyAqIHRoZSBkcml2ZXIgZmllbGQgaXMgTlVMTC4gSWYgaXQgaXMsIHRoZW4gdGhlIG1lbW9yeSBiZWxvbmdzIHRvIHRoZSBmaWxlc3BlYworICogc3RydWN0LiBJZiBpdCBpcyBub24tTlVMTCwgdGhlbiAib3V0YnVmIiBwb2ludHMgdG8gYSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyCisgKiB0aGF0IHNob3VsZCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLgorICovCitzaXplX3QgZmlsbF90ZXh0Y29udihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgICBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcml2ZXIsCisJCSAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRmLAorCQkgICAgIGNoYXIgKipvdXRidWYpOworCisvKgorICogTG9vayB1cCB0aGUgdXNlcmRpZmYgZHJpdmVyIGZvciB0aGUgZ2l2ZW4gZmlsZXNwZWMsIGFuZCByZXR1cm4gaXQgaWYKKyAqIGFuZCBvbmx5IGlmIGl0IGhhcyB0ZXh0Y29udiBlbmFibGVkIChvdGhlcndpc2UgcmV0dXJuIE5VTEwpLiBUaGUgcmVzdWx0CisgKiBjYW4gYmUgcGFzc2VkIHRvIGZpbGxfdGV4dGNvbnYoKS4KKyAqLworc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZ2V0X3RleHRjb252KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSk7CisKKy8qCisgKiBQcmVwYXJlIGRpZmZfZmlsZXNwZWMgYW5kIGNvbnZlcnQgaXQgdXNpbmcgZGlmZiB0ZXh0Y29udiBBUEkKKyAqIGlmIHRoZSB0ZXh0Y29udiBkcml2ZXIgZXhpc3RzLgorICogUmV0dXJuIDEgaWYgdGhlIGNvbnZlcnNpb24gc3VjY2VlZHMsIDAgb3RoZXJ3aXNlLgorICovCitpbnQgdGV4dGNvbnZfb2JqZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJICAgIHVuc2lnbmVkIG1vZGUsCisJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBvaWRfdmFsaWQsCisJCSAgICBjaGFyICoqYnVmLCB1bnNpZ25lZCBsb25nICpidWZfc2l6ZSk7CisKK2ludCBwYXJzZV9yZW5hbWVfc2NvcmUoY29uc3QgY2hhciAqKmNwX3ApOworCitsb25nIHBhcnNlX2FsZ29yaXRobV92YWx1ZShjb25zdCBjaGFyICp2YWx1ZSk7CisKK3ZvaWQgcHJpbnRfc3RhdF9zdW1tYXJ5KEZJTEUgKmZwLCBpbnQgZmlsZXMsCisJCQlpbnQgaW5zZXJ0aW9ucywgaW50IGRlbGV0aW9ucyk7Cit2b2lkIHNldHVwX2RpZmZfcGFnZXIoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKKworI2VuZGlmIC8qIERJRkZfSCAqLwpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUtYnJlYWsuYyBiL2RpZmZjb3JlLWJyZWFrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0YTE0OQotLS0gL2Rldi9udWxsCisrKyBiL2RpZmZjb3JlLWJyZWFrLmMKQEAgLTAsMCArMSwzMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicHJvbWlzb3ItcmVtb3RlLmgiCisKK3N0YXRpYyBpbnQgc2hvdWxkX2JyZWFrKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNyYywKKwkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkc3QsCisJCQlpbnQgYnJlYWtfc2NvcmUsCisJCQlpbnQgKm1lcmdlX3Njb3JlX3ApCit7CisJLyogZHN0IGlzIHJlY29yZGVkIGFzIGEgbW9kaWZpY2F0aW9uIG9mIHNyYy4gIEFyZSB0aGV5IHNvCisJICogZGlmZmVyZW50IHRoYXQgd2UgYXJlIGJldHRlciBvZmYgcmVjb3JkaW5nIHRoaXMgYXMgYSBwYWlyCisJICogb2YgZGVsZXRlIGFuZCBjcmVhdGU/CisJICoKKwkgKiBUaGVyZSBhcmUgdHdvIGNyaXRlcmlhIHVzZWQgaW4gdGhpcyBhbGdvcml0aG0uICBGb3IgdGhlCisJICogcHVycG9zZXMgb2YgaGVscGluZyBsYXRlciByZW5hbWUvY29weSwgd2UgdGFrZSBib3RoIGRlbGV0ZQorCSAqIGFuZCBpbnNlcnQgaW50byBhY2NvdW50IGFuZCBlc3RpbWF0ZSB0aGUgYW1vdW50IG9mICJlZGl0Ii4KKwkgKiBJZiB0aGUgZWRpdCBpcyB2ZXJ5IGxhcmdlLCB3ZSBicmVhayB0aGlzIHBhaXIgc28gdGhhdAorCSAqIHJlbmFtZS9jb3B5IGNhbiBwaWNrIHRoZSBwaWVjZXMgdXAgdG8gbWF0Y2ggd2l0aCBvdGhlcgorCSAqIGZpbGVzLgorCSAqCisJICogT24gdGhlIG90aGVyIGhhbmQsIHdlIHdvdWxkIHdhbnQgdG8gaWdub3JlIGluc2VydHMgZm9yIHRoZQorCSAqIHB1cmUgImNvbXBsZXRlIHJld3JpdGUiIGRldGVjdGlvbi4gIEFzIGxvbmcgYXMgbW9zdCBvZiB0aGUKKwkgKiBleGlzdGluZyBjb250ZW50cyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSwgaXQgaXMgYQorCSAqIGNvbXBsZXRlIHJld3JpdGUsIGFuZCBpZiBzaXphYmxlIGNodW5rIGZyb20gdGhlIG9yaWdpbmFsCisJICogc3RpbGwgcmVtYWlucyBpbiB0aGUgcmVzdWx0LCBpdCBpcyBub3QgYSByZXdyaXRlLiAgSXQgZG9lcworCSAqIG5vdCBtYXR0ZXIgaG93IG11Y2ggb3IgaG93IGxpdHRsZSBuZXcgbWF0ZXJpYWwgaXMgYWRkZWQgdG8KKwkgKiB0aGUgZmlsZS4KKwkgKgorCSAqIFRoZSBzY29yZSB3ZSBsZWF2ZSBmb3Igc3VjaCBhIGJyb2tlbiBmaWxlcGFpciB1c2VzIHRoZQorCSAqIGxhdHRlciBkZWZpbml0aW9uIHNvIHRoYXQgbGF0ZXIgY2xlYW4tdXAgc3RhZ2UgY2FuIGZpbmQgdGhlCisJICogcGllY2VzIHRoYXQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gYnJva2VuIGFjY29yZGluZyB0byB0aGUKKwkgKiBsYXR0ZXIgZGVmaW5pdGlvbiBhZnRlciByZW5hbWUvY29weSBydW5zLCBhbmQgbWVyZ2UgdGhlCisJICogYnJva2VuIHBhaXIgdGhhdCBoYXZlIGEgc2NvcmUgbG93ZXIgdGhhbiBnaXZlbiBjcml0ZXJpYQorCSAqIGJhY2sgdG9nZXRoZXIuICBUaGUgYnJlYWsgb3BlcmF0aW9uIGl0c2VsZiBoYXBwZW5zCisJICogYWNjb3JkaW5nIHRvIHRoZSBmb3JtZXIgZGVmaW5pdGlvbi4KKwkgKgorCSAqIFRoZSBtaW5pbXVtX2VkaXQgcGFyYW1ldGVyIHRlbGxzIHVzIHdoZW4gdG8gYnJlYWsgKHRoZQorCSAqIGFtb3VudCBvZiAiZWRpdCIgcmVxdWlyZWQgZm9yIHVzIHRvIGNvbnNpZGVyIGJyZWFraW5nIHRoZQorCSAqIHBhaXIpLiAgV2UgbGVhdmUgdGhlIGFtb3VudCBvZiBkZWxldGlvbiBpbiAqbWVyZ2Vfc2NvcmVfcAorCSAqIHdoZW4gd2UgcmV0dXJuLgorCSAqCisJICogVGhlIHZhbHVlIHdlIHJldHVybiBpcyAxIGlmIHdlIHdhbnQgdGhlIHBhaXIgdG8gYmUgYnJva2VuLAorCSAqIG9yIDAgaWYgd2UgZG8gbm90LgorCSAqLworCXVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZSwgbWF4X3NpemU7CisJdW5zaWduZWQgbG9uZyBzcmNfY29waWVkLCBsaXRlcmFsX2FkZGVkLCBzcmNfcmVtb3ZlZDsKKworCXN0cnVjdCBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjX29wdGlvbnMgb3B0aW9ucyA9IHsgMCB9OworCisJKm1lcmdlX3Njb3JlX3AgPSAwOyAvKiBhc3N1bWUgbm8gZGVsZXRpb24gLS0tICJkbyBub3QgYnJlYWsiCisJCQkgICAgICogaXMgdGhlIGRlZmF1bHQuCisJCQkgICAgICovCisKKwlpZiAoU19JU1JFRyhzcmMtPm1vZGUpICE9IFNfSVNSRUcoZHN0LT5tb2RlKSkgeworCQkqbWVyZ2Vfc2NvcmVfcCA9IChpbnQpTUFYX1NDT1JFOworCQlyZXR1cm4gMTsgLyogZXZlbiB0aGVpciB0eXBlcyBhcmUgZGlmZmVyZW50ICovCisJfQorCisJaWYgKHNyYy0+b2lkX3ZhbGlkICYmIGRzdC0+b2lkX3ZhbGlkICYmCisJICAgIG9pZGVxKCZzcmMtPm9pZCwgJmRzdC0+b2lkKSkKKwkJcmV0dXJuIDA7IC8qIHRoZXkgYXJlIHRoZSBzYW1lICovCisKKwlpZiAociA9PSB0aGVfcmVwb3NpdG9yeSAmJiBoYXNfcHJvbWlzb3JfcmVtb3RlKCkpIHsKKwkJb3B0aW9ucy5taXNzaW5nX29iamVjdF9jYiA9IGRpZmZfcXVldWVkX2RpZmZfcHJlZmV0Y2g7CisJCW9wdGlvbnMubWlzc2luZ19vYmplY3RfZGF0YSA9IHI7CisJfQorCisJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMociwgc3JjLCAmb3B0aW9ucykgfHwKKwkgICAgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCBkc3QsICZvcHRpb25zKSkKKwkJcmV0dXJuIDA7IC8qIGVycm9yIGJ1dCBjYXVnaHQgZG93bnN0cmVhbSAqLworCisJbWF4X3NpemUgPSAoKHNyYy0+c2l6ZSA+IGRzdC0+c2l6ZSkgPyBzcmMtPnNpemUgOiBkc3QtPnNpemUpOworCWlmIChtYXhfc2l6ZSA8IE1JTklNVU1fQlJFQUtfU0laRSkKKwkJcmV0dXJuIDA7IC8qIHdlIGRvIG5vdCBicmVhayB0b28gc21hbGwgZmlsZXBhaXIgKi8KKworCWlmICghc3JjLT5zaXplKQorCQlyZXR1cm4gMDsgLyogd2UgZG8gbm90IGxldCBlbXB0eSBmaWxlcyBnZXQgcmVuYW1lZCAqLworCisJaWYgKGRpZmZjb3JlX2NvdW50X2NoYW5nZXMociwgc3JjLCBkc3QsCisJCQkJICAgJnNyYy0+Y250X2RhdGEsICZkc3QtPmNudF9kYXRhLAorCQkJCSAgICZzcmNfY29waWVkLCAmbGl0ZXJhbF9hZGRlZCkpCisJCXJldHVybiAwOworCisJLyogc2FuaXR5ICovCisJaWYgKHNyYy0+c2l6ZSA8IHNyY19jb3BpZWQpCisJCXNyY19jb3BpZWQgPSBzcmMtPnNpemU7CisJaWYgKGRzdC0+c2l6ZSA8IGxpdGVyYWxfYWRkZWQgKyBzcmNfY29waWVkKSB7CisJCWlmIChzcmNfY29waWVkIDwgZHN0LT5zaXplKQorCQkJbGl0ZXJhbF9hZGRlZCA9IGRzdC0+c2l6ZSAtIHNyY19jb3BpZWQ7CisJCWVsc2UKKwkJCWxpdGVyYWxfYWRkZWQgPSAwOworCX0KKwlzcmNfcmVtb3ZlZCA9IHNyYy0+c2l6ZSAtIHNyY19jb3BpZWQ7CisKKwkvKiBDb21wdXRlIG1lcmdlLXNjb3JlLCB3aGljaCBpcyAiaG93IG11Y2ggaXMgcmVtb3ZlZAorCSAqIGZyb20gdGhlIHNvdXJjZSBtYXRlcmlhbCIuICBUaGUgY2xlYW4tdXAgc3RhZ2Ugd2lsbAorCSAqIG1lcmdlIHRoZSBzdXJ2aXZpbmcgcGFpciB0b2dldGhlciBpZiB0aGUgc2NvcmUgaXMKKwkgKiBsZXNzIHRoYW4gdGhlIG1pbmltdW0sIGFmdGVyIHJlbmFtZS9jb3B5IHJ1bnMuCisJICovCisJKm1lcmdlX3Njb3JlX3AgPSAoaW50KShzcmNfcmVtb3ZlZCAqIE1BWF9TQ09SRSAvIHNyYy0+c2l6ZSk7CisJaWYgKCptZXJnZV9zY29yZV9wID4gYnJlYWtfc2NvcmUpCisJCXJldHVybiAxOworCisJLyogRXh0ZW50IG9mIGRhbWFnZSwgd2hpY2ggY291bnRzIGJvdGggaW5zZXJ0cyBhbmQKKwkgKiBkZWxldGVzLgorCSAqLworCWRlbHRhX3NpemUgPSBzcmNfcmVtb3ZlZCArIGxpdGVyYWxfYWRkZWQ7CisJaWYgKGRlbHRhX3NpemUgKiBNQVhfU0NPUkUgLyBtYXhfc2l6ZSA8IGJyZWFrX3Njb3JlKQorCQlyZXR1cm4gMDsKKworCS8qIElmIHlvdSByZW1vdmVkIGEgbG90IHdpdGhvdXQgYWRkaW5nIG5ldyBtYXRlcmlhbCwgdGhhdCBpcworCSAqIG5vdCByZWFsbHkgYSByZXdyaXRlLgorCSAqLworCWlmICgoc3JjLT5zaXplICogYnJlYWtfc2NvcmUgPCBzcmNfcmVtb3ZlZCAqIE1BWF9TQ09SRSkgJiYKKwkgICAgKGxpdGVyYWxfYWRkZWQgKiAyMCA8IHNyY19yZW1vdmVkKSAmJgorCSAgICAobGl0ZXJhbF9hZGRlZCAqIDIwIDwgc3JjX2NvcGllZCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgZGlmZmNvcmVfYnJlYWsoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGludCBicmVha19zY29yZSkKK3sKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEgPSAmZGlmZl9xdWV1ZWRfZGlmZjsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3Qgb3V0cTsKKworCS8qIFdoZW4gdGhlIGZpbGVwYWlyIGhhcyB0aGlzIG11Y2ggZWRpdCAoaW5zZXJ0IGFuZCBkZWxldGUpLAorCSAqIGl0IGlzIGZpcnN0IGNvbnNpZGVyZWQgdG8gYmUgYSByZXdyaXRlIGFuZCBicm9rZW4gaW50byBhCisJICogY3JlYXRlIGFuZCBkZWxldGUgZmlsZXBhaXIuICBUaGlzIGlzIHRvIGhlbHAgYnJlYWtpbmcgYQorCSAqIGZpbGUgdGhhdCBoYWQgdG9vIG11Y2ggbmV3IHN0dWZmIGFkZGVkLCBwb3NzaWJseSBmcm9tCisJICogbW92aW5nIGNvbnRlbnRzIGZyb20gYW5vdGhlciBmaWxlLCBzbyB0aGF0IHJlbmFtZS9jb3B5IGNhbgorCSAqIG1hdGNoIGl0IHdpdGggdGhlIG90aGVyIGZpbGUuCisJICoKKwkgKiBpbnQgYnJlYWtfc2NvcmU7IHdlIHJldXNlIGluY29taW5nIHBhcmFtZXRlciBmb3IgdGhpcy4KKwkgKi8KKworCS8qIEFmdGVyIGEgcGFpciBpcyBicm9rZW4gYWNjb3JkaW5nIHRvIGJyZWFrX3Njb3JlIGFuZAorCSAqIHN1YmplY3RlZCB0byByZW5hbWUvY29weSwgYm90aCBvZiB0aGVtIG1heSBzdXJ2aXZlIGludGFjdCwKKwkgKiBkdWUgdG8gbGFjayBvZiBzdWl0YWJsZSByZW5hbWUvY29weSBwZWVyLiAgT3IsIHRoZSBjYWxsZXIKKwkgKiBtYXkgYmUgY2FsbGluZyB1cyB3aXRob3V0IHVzaW5nIHJlbmFtZS9jb3B5LiAgV2hlbiB0aGF0CisJICogaGFwcGVucywgd2UgbWVyZ2UgdGhlIGJyb2tlbiBwaWVjZXMgYmFjayBpbnRvIG9uZQorCSAqIG1vZGlmaWNhdGlvbiB0b2dldGhlciBpZiB0aGUgcGFpciBkaWQgbm90IGhhdmUgbW9yZSB0aGFuCisJICogdGhpcyBtdWNoIGRlbGV0ZS4gIEZvciB0aGlzIGNvbXB1dGF0aW9uLCB3ZSBkbyBub3QgdGFrZQorCSAqIGluc2VydCBpbnRvIGFjY291bnQgYXQgYWxsLiAgSWYgeW91IHN0YXJ0IGZyb20gYSAxMDAtbGluZQorCSAqIGZpbGUgYW5kIGRlbGV0ZSA5NyBsaW5lcyBvZiBpdCwgaXQgZG9lcyBub3QgbWF0dGVyIGlmIHlvdQorCSAqIGFkZCAyNyBsaW5lcyB0byBpdCB0byBtYWtlIGEgbmV3IDMwLWxpbmUgZmlsZSBvciBpZiB5b3UgYWRkCisJICogOTk3IGxpbmVzIHRvIGl0IHRvIG1ha2UgYSAxMDAwLWxpbmUgZmlsZS4gIEVpdGhlciB3YXkgd2hhdAorCSAqIHlvdSBkaWQgd2FzIGEgcmV3cml0ZSBvZiA5NyUuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91CisJICogZGVsZXRlIDMgbGluZXMsIGtlZXBpbmcgOTcgbGluZXMgaW50YWN0LCBpdCBkb2VzIG5vdCBtYXR0ZXIKKwkgKiBpZiB5b3UgYWRkIDMgbGluZXMgdG8gaXQgdG8gbWFrZSBhIG5ldyAxMDAtbGluZSBmaWxlIG9yIGlmCisJICogeW91IGFkZCA5MDMgbGluZXMgdG8gaXQgdG8gbWFrZSBhIG5ldyAxMDAwLWxpbmUgZmlsZS4KKwkgKiBFaXRoZXIgd2F5IHlvdSBkaWQgYSBsb3Qgb2YgYWRkaXRpb25zIGFuZCBub3QgYSByZXdyaXRlLgorCSAqIFRoaXMgbWVyZ2UgaGFwcGVucyB0byBjYXRjaCB0aGUgbGF0dGVyIGNhc2UuICBBIG1lcmdlX3Njb3JlCisJICogb2YgODAlIHdvdWxkIGJlIGEgZ29vZCBkZWZhdWx0IHZhbHVlIChhIGJyb2tlbiBwYWlyIHRoYXQKKwkgKiBoYXMgc2NvcmUgbG93ZXIgdGhhbiBtZXJnZV9zY29yZSB3aWxsIGJlIG1lcmdlZCBiYWNrCisJICogdG9nZXRoZXIpLgorCSAqLworCWludCBtZXJnZV9zY29yZTsKKwlpbnQgaTsKKworCS8qIFNlZSBjb21tZW50IG9uIERFRkFVTFRfQlJFQUtfU0NPUkUgYW5kCisJICogREVGQVVMVF9NRVJHRV9TQ09SRSBpbiBkaWZmY29yZS5oCisJICovCisJbWVyZ2Vfc2NvcmUgPSAoYnJlYWtfc2NvcmUgPj4gMTYpICYgMHhGRkZGOworCWJyZWFrX3Njb3JlID0gKGJyZWFrX3Njb3JlICYgMHhGRkZGKTsKKworCWlmICghYnJlYWtfc2NvcmUpCisJCWJyZWFrX3Njb3JlID0gREVGQVVMVF9CUkVBS19TQ09SRTsKKwlpZiAoIW1lcmdlX3Njb3JlKQorCQltZXJnZV9zY29yZSA9IERFRkFVTFRfTUVSR0VfU0NPUkU7CisKKwlESUZGX1FVRVVFX0NMRUFSKCZvdXRxKTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCWludCBzY29yZTsKKworCQkvKgorCQkgKiBXZSBkZWFsIG9ubHkgd2l0aCBpbi1wbGFjZSBlZGl0IG9mIGJsb2JzLgorCQkgKiBXZSBkbyBub3QgYnJlYWsgYW55dGhpbmcgZWxzZS4KKwkJICovCisJCWlmIChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJiBESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSAmJgorCQkgICAgb2JqZWN0X3R5cGUocC0+b25lLT5tb2RlKSA9PSBPQkpfQkxPQiAmJgorCQkgICAgb2JqZWN0X3R5cGUocC0+dHdvLT5tb2RlKSA9PSBPQkpfQkxPQiAmJgorCQkgICAgIXN0cmNtcChwLT5vbmUtPnBhdGgsIHAtPnR3by0+cGF0aCkpIHsKKwkJCWlmIChzaG91bGRfYnJlYWsociwgcC0+b25lLCBwLT50d28sCisJCQkJCSBicmVha19zY29yZSwgJnNjb3JlKSkgeworCQkJCS8qIFNwbGl0IHRoaXMgaW50byBkZWxldGUgYW5kIGNyZWF0ZSAqLworCQkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpudWxsX29uZSwgKm51bGxfdHdvOworCQkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpkcDsKKworCQkJCS8qIFNldCBzY29yZSB0byAwIGZvciB0aGUgcGFpciB0aGF0CisJCQkJICogbmVlZHMgdG8gYmUgbWVyZ2VkIGJhY2sgdG9nZXRoZXIKKwkJCQkgKiBzaG91bGQgdGhleSBzdXJ2aXZlIHJlbmFtZS9jb3B5LgorCQkJCSAqIEFsc28gd2UgZG8gbm90IHdhbnQgdG8gYnJlYWsgdmVyeQorCQkJCSAqIHNtYWxsIGZpbGVzLgorCQkJCSAqLworCQkJCWlmIChzY29yZSA8IG1lcmdlX3Njb3JlKQorCQkJCQlzY29yZSA9IDA7CisKKwkJCQkvKiBkZWxldGlvbiBvZiBvbmUgKi8KKwkJCQludWxsX29uZSA9IGFsbG9jX2ZpbGVzcGVjKHAtPm9uZS0+cGF0aCk7CisJCQkJZHAgPSBkaWZmX3F1ZXVlKCZvdXRxLCBwLT5vbmUsIG51bGxfb25lKTsKKwkJCQlkcC0+c2NvcmUgPSBzY29yZTsKKwkJCQlkcC0+YnJva2VuX3BhaXIgPSAxOworCisJCQkJLyogY3JlYXRpb24gb2YgdHdvICovCisJCQkJbnVsbF90d28gPSBhbGxvY19maWxlc3BlYyhwLT50d28tPnBhdGgpOworCQkJCWRwID0gZGlmZl9xdWV1ZSgmb3V0cSwgbnVsbF90d28sIHAtPnR3byk7CisJCQkJZHAtPnNjb3JlID0gc2NvcmU7CisJCQkJZHAtPmJyb2tlbl9wYWlyID0gMTsKKworCQkJCWRpZmZfZnJlZV9maWxlc3BlY19ibG9iKHAtPm9uZSk7CisJCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2IocC0+dHdvKTsKKwkJCQlmcmVlKHApOyAvKiBub3QgZGlmZl9mcmVlX2ZpbGVwYWlyKCksIHdlIGFyZQorCQkJCQkgICogcmV1c2luZyBvbmUgYW5kIHR3byBoZXJlLgorCQkJCQkgICovCisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+b25lKTsKKwkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+dHdvKTsKKwkJZGlmZl9xKCZvdXRxLCBwKTsKKwl9CisJZnJlZShxLT5xdWV1ZSk7CisJKnEgPSBvdXRxOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBtZXJnZV9icm9rZW4oc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsCisJCQkgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBwLAorCQkJIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqb3V0cSkKK3sKKwkvKiBwIGFuZCBwcCBhcmUgYnJva2VuIHBhaXJzIHdlIHdhbnQgdG8gbWVyZ2UgKi8KKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqYyA9IHAsICpkID0gcHAsICpkcDsKKwlpZiAoRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkpIHsKKwkJLyogdGhpcyBtdXN0IGJlIGEgZGVsZXRlIGhhbGYgKi8KKwkJZCA9IHA7IGMgPSBwcDsKKwl9CisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKCFESUZGX0ZJTEVfVkFMSUQoZC0+b25lKSkKKwkJZGllKCJpbnRlcm5hbCBlcnJvciBpbiBtZXJnZSAjMSIpOworCWlmIChESUZGX0ZJTEVfVkFMSUQoZC0+dHdvKSkKKwkJZGllKCJpbnRlcm5hbCBlcnJvciBpbiBtZXJnZSAjMiIpOworCWlmIChESUZGX0ZJTEVfVkFMSUQoYy0+b25lKSkKKwkJZGllKCJpbnRlcm5hbCBlcnJvciBpbiBtZXJnZSAjMyIpOworCWlmICghRElGRl9GSUxFX1ZBTElEKGMtPnR3bykpCisJCWRpZSgiaW50ZXJuYWwgZXJyb3IgaW4gbWVyZ2UgIzQiKTsKKworCWRwID0gZGlmZl9xdWV1ZShvdXRxLCBkLT5vbmUsIGMtPnR3byk7CisJZHAtPnNjb3JlID0gcC0+c2NvcmU7CisJLyoKKwkgKiBXZSB3aWxsIGJlIG9uZSBleHRyYSB1c2VyIG9mIHRoZSBzYW1lIHNyYyBzaWRlIG9mIHRoZQorCSAqIGJyb2tlbiBwYWlyLCBpZiBpdCB3YXMgdXNlZCBhcyB0aGUgcmVuYW1lIHNvdXJjZSBmb3Igb3RoZXIKKwkgKiBwYXRocyBlbHNld2hlcmUuICBJbmNyZW1lbnQgdG8gbWFyayB0aGF0IHRoZSBwYXRoIHN0YXlzCisJICogaW4gdGhlIHJlc3VsdGluZyB0cmVlLgorCSAqLworCWQtPm9uZS0+cmVuYW1lX3VzZWQrKzsKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShkLT50d28pOworCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKGMtPm9uZSk7CisJZnJlZShkKTsKKwlmcmVlKGMpOworfQorCit2b2lkIGRpZmZjb3JlX21lcmdlX2Jyb2tlbih2b2lkKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBvdXRxOworCWludCBpLCBqOworCisJRElGRl9RVUVVRV9DTEVBUigmb3V0cSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlpZiAoIXApCisJCQkvKiB3ZSBhbHJlYWR5IG1lcmdlZCB0aGlzIHdpdGggaXRzIHBlZXIgKi8KKwkJCWNvbnRpbnVlOworCQllbHNlIGlmIChwLT5icm9rZW5fcGFpciAmJgorCQkJICFzdHJjbXAocC0+b25lLT5wYXRoLCBwLT50d28tPnBhdGgpKSB7CisJCQkvKiBJZiB0aGUgcGVlciBhbHNvIHN1cnZpdmVkIHJlbmFtZS9jb3B5LCB0aGVuCisJCQkgKiB3ZSBtZXJnZSB0aGVtIGJhY2sgdG9nZXRoZXIuCisJCQkgKi8KKwkJCWZvciAoaiA9IGkgKyAxOyBqIDwgcS0+bnI7IGorKykgeworCQkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwcCA9IHEtPnF1ZXVlW2pdOworCQkJCWlmIChwcC0+YnJva2VuX3BhaXIgJiYKKwkJCQkgICAgIXN0cmNtcChwcC0+b25lLT5wYXRoLCBwcC0+dHdvLT5wYXRoKSAmJgorCQkJCSAgICAhc3RyY21wKHAtPm9uZS0+cGF0aCwgcHAtPnR3by0+cGF0aCkpIHsKKwkJCQkJLyogUGVlciBzdXJ2aXZlZC4gIE1lcmdlIHRoZW0gKi8KKwkJCQkJbWVyZ2VfYnJva2VuKHAsIHBwLCAmb3V0cSk7CisJCQkJCXEtPnF1ZXVlW2pdID0gTlVMTDsKKwkJCQkJZ290byBuZXh0OworCQkJCX0KKwkJCX0KKwkJCS8qIFRoZSBwZWVyIGRpZCBub3Qgc3Vydml2ZSwgc28gd2Uga2VlcAorCQkJICogaXQgaW4gdGhlIG91dHB1dC4KKwkJCSAqLworCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJfQorCQllbHNlCisJCQlkaWZmX3EoJm91dHEsIHApOworbmV4dDo7CisJfQorCWZyZWUocS0+cXVldWUpOworCSpxID0gb3V0cTsKKworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RpZmZjb3JlLWRlbHRhLmMgYi9kaWZmY29yZS1kZWx0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NjhhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kaWZmY29yZS1kZWx0YS5jCkBAIC0wLDAgKzEsMjMzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKworLyoKKyAqIElkZWEgaGVyZSBpcyB2ZXJ5IHNpbXBsZS4KKyAqCisgKiBBbG1vc3QgYWxsIGRhdGEgd2UgYXJlIGludGVyZXN0ZWQgaW4gYXJlIHRleHQsIGJ1dCBzb21ldGltZXMgd2UgaGF2ZQorICogdG8gZGVhbCB3aXRoIGJpbmFyeSBkYXRhLiAgU28gd2UgY3V0IHRoZW0gaW50byBjaHVua3MgZGVsaW1pdGVkIGJ5CisgKiBMRiBieXRlLCBvciA2NC1ieXRlIHNlcXVlbmNlLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QsIGFuZCBoYXNoIHRoZW0uCisgKgorICogRm9yIHRob3NlIGNodW5rcywgaWYgdGhlIHNvdXJjZSBidWZmZXIgaGFzIG1vcmUgaW5zdGFuY2VzIG9mIGl0CisgKiB0aGFuIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIsIHRoYXQgbWVhbnMgdGhlIGRpZmZlcmVuY2UgYXJlIHRoZQorICogbnVtYmVyIG9mIGJ5dGVzIG5vdCBjb3BpZWQgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24uICBJZiB0aGUKKyAqIGNvdW50cyBhcmUgdGhlIHNhbWUsIGV2ZXJ5dGhpbmcgd2FzIGNvcGllZCBmcm9tIHNvdXJjZSB0bworICogZGVzdGluYXRpb24uICBJZiB0aGUgZGVzdGluYXRpb24gaGFzIG1vcmUsIGV2ZXJ5dGhpbmcgd2FzIGNvcGllZCwKKyAqIGFuZCBkZXN0aW5hdGlvbiBhZGRlZCBtb3JlLgorICoKKyAqIFdlIGFyZSBkb2luZyBhbiBhcHByb3hpbWF0aW9uIHNvIHdlIGRvIG5vdCByZWFsbHkgaGF2ZSB0byB3YXN0ZQorICogbWVtb3J5IGJ5IGFjdHVhbGx5IHN0b3JpbmcgdGhlIHNlcXVlbmNlLiAgV2UganVzdCBoYXNoIHRoZW0gaW50bworICogc29tZXdoZXJlIGFyb3VuZCAyXjE2IGhhc2hidWNrZXRzIGFuZCBjb3VudCB0aGUgb2NjdXJyZW5jZXMuCisgKi8KKworLyogV2lsZCBndWVzcyBhdCB0aGUgaW5pdGlhbCBoYXNoIHNpemUgKi8KKyNkZWZpbmUgSU5JVElBTF9IQVNIX1NJWkUgOQorCisvKiBXZSBsZWF2ZSBtb3JlIHJvb20gaW4gc21hbGxlciBoYXNoIGJ1dCBkbyBub3QgbGV0IGl0CisgKiBncm93IHRvIGhhdmUgdW51c2VkIGhvbGUgdG9vIG11Y2guCisgKi8KKyNkZWZpbmUgSU5JVElBTF9GUkVFKHN6X2xvZzIpICgoMTw8KHN6X2xvZzIpKSooc3pfbG9nMi0zKS8oc3pfbG9nMikpCisKKy8qIEEgcHJpbWUgcmF0aGVyIGNhcmVmdWxseSBjaG9zZW4gYmV0d2VlbiAyXjE2Li4yXjE3LCBzbyB0aGF0CisgKiBIQVNIQkFTRSA8IElOSVRJQUxfRlJFRSgxNykuICBXZSB3YW50IHRvIGtlZXAgdGhlIG1heGltdW0gaGFzaHRhYmxlCisgKiBzaXplIHVuZGVyIHRoZSBjdXJyZW50IDI8PDE3IG1heGltdW0sIHdoaWNoIGNhbiBob2xkIHRoaXMgbWFueQorICogZGlmZmVyZW50IHZhbHVlcyBiZWZvcmUgb3ZlcmZsb3dpbmcgdG8gaGFzaHRhYmxlIG9mIHNpemUgMjw8MTguCisgKi8KKyNkZWZpbmUgSEFTSEJBU0UgMTA3OTI3CisKK3N0cnVjdCBzcGFuaGFzaCB7CisJdW5zaWduZWQgaW50IGhhc2h2YWw7CisJdW5zaWduZWQgaW50IGNudDsKK307CitzdHJ1Y3Qgc3Bhbmhhc2hfdG9wIHsKKwlpbnQgYWxsb2NfbG9nMjsKKwlpbnQgZnJlZTsKKwlzdHJ1Y3Qgc3Bhbmhhc2ggZGF0YVtGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3Bhbmhhc2hfdG9wICpzcGFuaGFzaF9yZWhhc2goc3RydWN0IHNwYW5oYXNoX3RvcCAqb3JpZykKK3sKKwlzdHJ1Y3Qgc3Bhbmhhc2hfdG9wICpuZXdfc3Bhbmhhc2g7CisJaW50IGk7CisJaW50IG9zeiA9IDEgPDwgb3JpZy0+YWxsb2NfbG9nMjsKKwlpbnQgc3ogPSBvc3ogPDwgMTsKKworCW5ld19zcGFuaGFzaCA9IHhtYWxsb2Moc3RfYWRkKHNpemVvZigqb3JpZyksCisJCQkgICAgIHN0X211bHQoc2l6ZW9mKHN0cnVjdCBzcGFuaGFzaCksIHN6KSkpOworCW5ld19zcGFuaGFzaC0+YWxsb2NfbG9nMiA9IG9yaWctPmFsbG9jX2xvZzIgKyAxOworCW5ld19zcGFuaGFzaC0+ZnJlZSA9IElOSVRJQUxfRlJFRShuZXdfc3Bhbmhhc2gtPmFsbG9jX2xvZzIpOworCW1lbXNldChuZXdfc3Bhbmhhc2gtPmRhdGEsIDAsIHNpemVvZihzdHJ1Y3Qgc3Bhbmhhc2gpICogc3opOworCWZvciAoaSA9IDA7IGkgPCBvc3o7IGkrKykgeworCQlzdHJ1Y3Qgc3Bhbmhhc2ggKm8gPSAmKG9yaWctPmRhdGFbaV0pOworCQlpbnQgYnVja2V0OworCQlpZiAoIW8tPmNudCkKKwkJCWNvbnRpbnVlOworCQlidWNrZXQgPSBvLT5oYXNodmFsICYgKHN6IC0gMSk7CisJCXdoaWxlICgxKSB7CisJCQlzdHJ1Y3Qgc3Bhbmhhc2ggKmggPSAmKG5ld19zcGFuaGFzaC0+ZGF0YVtidWNrZXQrK10pOworCQkJaWYgKCFoLT5jbnQpIHsKKwkJCQloLT5oYXNodmFsID0gby0+aGFzaHZhbDsKKwkJCQloLT5jbnQgPSBvLT5jbnQ7CisJCQkJbmV3X3NwYW5oYXNoLT5mcmVlLS07CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoc3ogPD0gYnVja2V0KQorCQkJCWJ1Y2tldCA9IDA7CisJCX0KKwl9CisJZnJlZShvcmlnKTsKKwlyZXR1cm4gbmV3X3NwYW5oYXNoOworfQorCitzdGF0aWMgc3RydWN0IHNwYW5oYXNoX3RvcCAqYWRkX3NwYW5oYXNoKHN0cnVjdCBzcGFuaGFzaF90b3AgKnRvcCwKKwkJCQkJIHVuc2lnbmVkIGludCBoYXNodmFsLCBpbnQgY250KQoreworCWludCBidWNrZXQsIGxpbTsKKwlzdHJ1Y3Qgc3Bhbmhhc2ggKmg7CisKKwlsaW0gPSAoMSA8PCB0b3AtPmFsbG9jX2xvZzIpOworCWJ1Y2tldCA9IGhhc2h2YWwgJiAobGltIC0gMSk7CisJd2hpbGUgKDEpIHsKKwkJaCA9ICYodG9wLT5kYXRhW2J1Y2tldCsrXSk7CisJCWlmICghaC0+Y250KSB7CisJCQloLT5oYXNodmFsID0gaGFzaHZhbDsKKwkJCWgtPmNudCA9IGNudDsKKwkJCXRvcC0+ZnJlZS0tOworCQkJaWYgKHRvcC0+ZnJlZSA8IDApCisJCQkJcmV0dXJuIHNwYW5oYXNoX3JlaGFzaCh0b3ApOworCQkJcmV0dXJuIHRvcDsKKwkJfQorCQlpZiAoaC0+aGFzaHZhbCA9PSBoYXNodmFsKSB7CisJCQloLT5jbnQgKz0gY250OworCQkJcmV0dXJuIHRvcDsKKwkJfQorCQlpZiAobGltIDw9IGJ1Y2tldCkKKwkJCWJ1Y2tldCA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IHNwYW5oYXNoX2NtcChjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IHNwYW5oYXNoICphID0gYV87CisJY29uc3Qgc3RydWN0IHNwYW5oYXNoICpiID0gYl87CisKKwkvKiBBIGNvdW50IG9mIHplcm8gY29tcGFyZXMgYXQgdGhlIGVuZC4uICovCisJaWYgKCFhLT5jbnQpCisJCXJldHVybiAhYi0+Y250ID8gMCA6IDE7CisJaWYgKCFiLT5jbnQpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gYS0+aGFzaHZhbCA8IGItPmhhc2h2YWwgPyAtMSA6CisJCWEtPmhhc2h2YWwgPiBiLT5oYXNodmFsID8gMSA6IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3Bhbmhhc2hfdG9wICpoYXNoX2NoYXJzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCWludCBpLCBuOworCXVuc2lnbmVkIGludCBhY2N1bTEsIGFjY3VtMiwgaGFzaHZhbDsKKwlzdHJ1Y3Qgc3Bhbmhhc2hfdG9wICpoYXNoOworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IG9uZS0+ZGF0YTsKKwl1bnNpZ25lZCBpbnQgc3ogPSBvbmUtPnNpemU7CisJaW50IGlzX3RleHQgPSAhZGlmZl9maWxlc3BlY19pc19iaW5hcnkociwgb25lKTsKKworCWkgPSBJTklUSUFMX0hBU0hfU0laRTsKKwloYXNoID0geG1hbGxvYyhzdF9hZGQoc2l6ZW9mKCpoYXNoKSwKKwkJCSAgICAgIHN0X211bHQoc2l6ZW9mKHN0cnVjdCBzcGFuaGFzaCksIDE8PGkpKSk7CisJaGFzaC0+YWxsb2NfbG9nMiA9IGk7CisJaGFzaC0+ZnJlZSA9IElOSVRJQUxfRlJFRShpKTsKKwltZW1zZXQoaGFzaC0+ZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBzcGFuaGFzaCkgKiAoMTw8aSkpOworCisJbiA9IDA7CisJYWNjdW0xID0gYWNjdW0yID0gMDsKKwl3aGlsZSAoc3opIHsKKwkJdW5zaWduZWQgaW50IGMgPSAqYnVmKys7CisJCXVuc2lnbmVkIGludCBvbGRfMSA9IGFjY3VtMTsKKwkJc3otLTsKKworCQkvKiBJZ25vcmUgQ1IgaW4gQ1JMRiBzZXF1ZW5jZSBpZiB0ZXh0ICovCisJCWlmIChpc190ZXh0ICYmIGMgPT0gJ1xyJyAmJiBzeiAmJiAqYnVmID09ICdcbicpCisJCQljb250aW51ZTsKKworCQlhY2N1bTEgPSAoYWNjdW0xIDw8IDcpIF4gKGFjY3VtMiA+PiAyNSk7CisJCWFjY3VtMiA9IChhY2N1bTIgPDwgNykgXiAob2xkXzEgPj4gMjUpOworCQlhY2N1bTEgKz0gYzsKKwkJaWYgKCsrbiA8IDY0ICYmIGMgIT0gJ1xuJykKKwkJCWNvbnRpbnVlOworCQloYXNodmFsID0gKGFjY3VtMSArIGFjY3VtMiAqIDB4NjEpICUgSEFTSEJBU0U7CisJCWhhc2ggPSBhZGRfc3Bhbmhhc2goaGFzaCwgaGFzaHZhbCwgbik7CisJCW4gPSAwOworCQlhY2N1bTEgPSBhY2N1bTIgPSAwOworCX0KKwlRU09SVChoYXNoLT5kYXRhLCAxdWwgPDwgaGFzaC0+YWxsb2NfbG9nMiwgc3Bhbmhhc2hfY21wKTsKKwlyZXR1cm4gaGFzaDsKK30KKworaW50IGRpZmZjb3JlX2NvdW50X2NoYW5nZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3JjLAorCQkJICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRzdCwKKwkJCSAgIHZvaWQgKipzcmNfY291bnRfcCwKKwkJCSAgIHZvaWQgKipkc3RfY291bnRfcCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKnNyY19jb3BpZWQsCisJCQkgICB1bnNpZ25lZCBsb25nICpsaXRlcmFsX2FkZGVkKQoreworCXN0cnVjdCBzcGFuaGFzaCAqcywgKmQ7CisJc3RydWN0IHNwYW5oYXNoX3RvcCAqc3JjX2NvdW50LCAqZHN0X2NvdW50OworCXVuc2lnbmVkIGxvbmcgc2MsIGxhOworCisJc3JjX2NvdW50ID0gZHN0X2NvdW50ID0gTlVMTDsKKwlpZiAoc3JjX2NvdW50X3ApCisJCXNyY19jb3VudCA9ICpzcmNfY291bnRfcDsKKwlpZiAoIXNyY19jb3VudCkgeworCQlzcmNfY291bnQgPSBoYXNoX2NoYXJzKHIsIHNyYyk7CisJCWlmIChzcmNfY291bnRfcCkKKwkJCSpzcmNfY291bnRfcCA9IHNyY19jb3VudDsKKwl9CisJaWYgKGRzdF9jb3VudF9wKQorCQlkc3RfY291bnQgPSAqZHN0X2NvdW50X3A7CisJaWYgKCFkc3RfY291bnQpIHsKKwkJZHN0X2NvdW50ID0gaGFzaF9jaGFycyhyLCBkc3QpOworCQlpZiAoZHN0X2NvdW50X3ApCisJCQkqZHN0X2NvdW50X3AgPSBkc3RfY291bnQ7CisJfQorCXNjID0gbGEgPSAwOworCisJcyA9IHNyY19jb3VudC0+ZGF0YTsKKwlkID0gZHN0X2NvdW50LT5kYXRhOworCWZvciAoOzspIHsKKwkJdW5zaWduZWQgZHN0X2NudCwgc3JjX2NudDsKKwkJaWYgKCFzLT5jbnQpCisJCQlicmVhazsgLyogd2UgY2hlY2tlZCBhbGwgaW4gc3JjICovCisJCXdoaWxlIChkLT5jbnQpIHsKKwkJCWlmIChkLT5oYXNodmFsID49IHMtPmhhc2h2YWwpCisJCQkJYnJlYWs7CisJCQlsYSArPSBkLT5jbnQ7CisJCQlkKys7CisJCX0KKwkJc3JjX2NudCA9IHMtPmNudDsKKwkJZHN0X2NudCA9IDA7CisJCWlmIChkLT5jbnQgJiYgZC0+aGFzaHZhbCA9PSBzLT5oYXNodmFsKSB7CisJCQlkc3RfY250ID0gZC0+Y250OworCQkJZCsrOworCQl9CisJCWlmIChzcmNfY250IDwgZHN0X2NudCkgeworCQkJbGEgKz0gZHN0X2NudCAtIHNyY19jbnQ7CisJCQlzYyArPSBzcmNfY250OworCQl9CisJCWVsc2UKKwkJCXNjICs9IGRzdF9jbnQ7CisJCXMrKzsKKwl9CisJd2hpbGUgKGQtPmNudCkgeworCQlsYSArPSBkLT5jbnQ7CisJCWQrKzsKKwl9CisKKwlpZiAoIXNyY19jb3VudF9wKQorCQlmcmVlKHNyY19jb3VudCk7CisJaWYgKCFkc3RfY291bnRfcCkKKwkJZnJlZShkc3RfY291bnQpOworCSpzcmNfY29waWVkID0gc2M7CisJKmxpdGVyYWxfYWRkZWQgPSBsYTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RpZmZjb3JlLW9yZGVyLmMgYi9kaWZmY29yZS1vcmRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTczMzEKLS0tIC9kZXYvbnVsbAorKysgYi9kaWZmY29yZS1vcmRlci5jCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorCitzdGF0aWMgY2hhciAqKm9yZGVyOworc3RhdGljIGludCBvcmRlcl9jbnQ7CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfb3JkZXIoY29uc3QgY2hhciAqb3JkZXJmaWxlKQoreworCWludCBjbnQsIHBhc3M7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXZvaWQgKm1hcDsKKwljaGFyICpjcCwgKmVuZHA7CisJc3NpemVfdCBzejsKKworCWlmIChvcmRlcikKKwkJcmV0dXJuOworCisJc3ogPSBzdHJidWZfcmVhZF9maWxlKCZzYiwgb3JkZXJmaWxlLCAwKTsKKwlpZiAoc3ogPCAwKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciKSwgb3JkZXJmaWxlKTsKKwltYXAgPSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7CisJZW5kcCA9IChjaGFyICopIG1hcCArIHN6OworCisJZm9yIChwYXNzID0gMDsgcGFzcyA8IDI7IHBhc3MrKykgeworCQljbnQgPSAwOworCQljcCA9IG1hcDsKKwkJd2hpbGUgKGNwIDwgZW5kcCkgeworCQkJY2hhciAqZXA7CisJCQlmb3IgKGVwID0gY3A7IGVwIDwgZW5kcCAmJiAqZXAgIT0gJ1xuJzsgZXArKykKKwkJCQk7CisJCQkvKiBjcCB0byBlcCBoYXMgb25lIGxpbmUgKi8KKwkJCWlmICgqY3AgPT0gJ1xuJyB8fCAqY3AgPT0gJyMnKQorCQkJCTsgLyogY29tbWVudCAqLworCQkJZWxzZSBpZiAocGFzcyA9PSAwKQorCQkJCWNudCsrOworCQkJZWxzZSB7CisJCQkJaWYgKCplcCA9PSAnXG4nKSB7CisJCQkJCSplcCA9IDA7CisJCQkJCW9yZGVyW2NudF0gPSBjcDsKKwkJCQl9IGVsc2UgeworCQkJCQlvcmRlcltjbnRdID0geG1lbWR1cHooY3AsIGVwIC0gY3ApOworCQkJCX0KKwkJCQljbnQrKzsKKwkJCX0KKwkJCWlmIChlcCA8IGVuZHApCisJCQkJZXArKzsKKwkJCWNwID0gZXA7CisJCX0KKwkJaWYgKHBhc3MgPT0gMCkgeworCQkJb3JkZXJfY250ID0gY250OworCQkJQUxMT0NfQVJSQVkob3JkZXIsIGNudCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfb3JkZXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgaTsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBwID0gU1RSQlVGX0lOSVQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgb3JkZXJfY250OyBpKyspIHsKKwkJc3RyYnVmX3Jlc2V0KCZwKTsKKwkJc3RyYnVmX2FkZHN0cigmcCwgcGF0aCk7CisJCXdoaWxlIChwLmJ1ZlswXSkgeworCQkJY2hhciAqY3A7CisJCQlpZiAoIXdpbGRtYXRjaChvcmRlcltpXSwgcC5idWYsIDApKQorCQkJCXJldHVybiBpOworCQkJY3AgPSBzdHJyY2hyKHAuYnVmLCAnLycpOworCQkJaWYgKCFjcCkKKwkJCQlicmVhazsKKwkJCSpjcCA9IDA7CisJCX0KKwl9CisJcmV0dXJuIG9yZGVyX2NudDsKK30KKworc3RhdGljIGludCBjb21wYXJlX29ianNfb3JkZXIoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCBvYmpfb3JkZXIgY29uc3QgKmEsICpiOworCWEgPSAoc3RydWN0IG9ial9vcmRlciBjb25zdCAqKWFfOworCWIgPSAoc3RydWN0IG9ial9vcmRlciBjb25zdCAqKWJfOworCWlmIChhLT5vcmRlciAhPSBiLT5vcmRlcikKKwkJcmV0dXJuIGEtPm9yZGVyIC0gYi0+b3JkZXI7CisJcmV0dXJuIGEtPm9yaWdfb3JkZXIgLSBiLT5vcmlnX29yZGVyOworfQorCit2b2lkIG9yZGVyX29iamVjdHMoY29uc3QgY2hhciAqb3JkZXJmaWxlLCBvYmpfcGF0aF9mbl90IG9ial9wYXRoLAorCQkgICBzdHJ1Y3Qgb2JqX29yZGVyICpvYmpzLCBpbnQgbnIpCit7CisJaW50IGk7CisKKwlpZiAoIW5yKQorCQlyZXR1cm47CisKKwlwcmVwYXJlX29yZGVyKG9yZGVyZmlsZSk7CisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJb2Jqc1tpXS5vcmlnX29yZGVyID0gaTsKKwkJb2Jqc1tpXS5vcmRlciA9IG1hdGNoX29yZGVyKG9ial9wYXRoKG9ianNbaV0ub2JqKSk7CisJfQorCVFTT1JUKG9ianMsIG5yLCBjb21wYXJlX29ianNfb3JkZXIpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFpcl9wYXRodHdvKHZvaWQgKm9iaikKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpciA9IChzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKW9iajsKKworCXJldHVybiBwYWlyLT50d28tPnBhdGg7Cit9CisKK3ZvaWQgZGlmZmNvcmVfb3JkZXIoY29uc3QgY2hhciAqb3JkZXJmaWxlKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBvYmpfb3JkZXIgKm87CisJaW50IGk7CisKKwlpZiAoIXEtPm5yKQorCQlyZXR1cm47CisKKwlBTExPQ19BUlJBWShvLCBxLT5ucik7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspCisJCW9baV0ub2JqID0gcS0+cXVldWVbaV07CisJb3JkZXJfb2JqZWN0cyhvcmRlcmZpbGUsIHBhaXJfcGF0aHR3bywgbywgcS0+bnIpOworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKQorCQlxLT5xdWV1ZVtpXSA9IG9baV0ub2JqOworCWZyZWUobyk7CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUtcGlja2F4ZS5jIGIvZGlmZmNvcmUtcGlja2F4ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YzZkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kaWZmY29yZS1waWNrYXhlLmMKQEAgLTAsMCArMSwyNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJrd3NldC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisKK3R5cGVkZWYgaW50ICgqcGlja2F4ZV9mbikobW1maWxlX3QgKm9uZSwgbW1maWxlX3QgKnR3bywKKwkJCSAgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCSAgcmVnZXhfdCAqcmVnZXhwLCBrd3NldF90IGt3cyk7CisKK3N0cnVjdCBkaWZmZ3JlcF9jYiB7CisJcmVnZXhfdCAqcmVnZXhwOworCWludCBoaXQ7Cit9OworCitzdGF0aWMgdm9pZCBkaWZmZ3JlcF9jb25zdW1lKHZvaWQgKnByaXYsIGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXN0cnVjdCBkaWZmZ3JlcF9jYiAqZGF0YSA9IHByaXY7CisJcmVnbWF0Y2hfdCByZWdtYXRjaDsKKworCWlmIChsaW5lWzBdICE9ICcrJyAmJiBsaW5lWzBdICE9ICctJykKKwkJcmV0dXJuOworCWlmIChkYXRhLT5oaXQpCisJCS8qCisJCSAqIE5FRURTV09SSzogd2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gdGVybWluYXRlIHRoZQorCQkgKiBjYWxsZXIgZWFybHkuCisJCSAqLworCQlyZXR1cm47CisJZGF0YS0+aGl0ID0gIXJlZ2V4ZWNfYnVmKGRhdGEtPnJlZ2V4cCwgbGluZSArIDEsIGxlbiAtIDEsIDEsCisJCQkJICZyZWdtYXRjaCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9ncmVwKG1tZmlsZV90ICpvbmUsIG1tZmlsZV90ICp0d28sCisJCSAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJICAgICByZWdleF90ICpyZWdleHAsIGt3c2V0X3Qga3dzKQoreworCXJlZ21hdGNoX3QgcmVnbWF0Y2g7CisJc3RydWN0IGRpZmZncmVwX2NiIGVjYmRhdGE7CisJeHBwYXJhbV90IHhwcDsKKwl4ZGVtaXRjb25mX3QgeGVjZmc7CisKKwlpZiAoIW9uZSkKKwkJcmV0dXJuICFyZWdleGVjX2J1ZihyZWdleHAsIHR3by0+cHRyLCB0d28tPnNpemUsCisJCQkJICAgIDEsICZyZWdtYXRjaCwgMCk7CisJaWYgKCF0d28pCisJCXJldHVybiAhcmVnZXhlY19idWYocmVnZXhwLCBvbmUtPnB0ciwgb25lLT5zaXplLAorCQkJCSAgICAxLCAmcmVnbWF0Y2gsIDApOworCisJLyoKKwkgKiBXZSBoYXZlIGJvdGggc2lkZXM7IG5lZWQgdG8gcnVuIHRleHR1YWwgZGlmZiBhbmQgc2VlIGlmCisJICogdGhlIHBhdHRlcm4gYXBwZWFycyBvbiBhZGRlZC9kZWxldGVkIGxpbmVzLgorCSAqLworCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CisJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJZWNiZGF0YS5yZWdleHAgPSByZWdleHA7CisJZWNiZGF0YS5oaXQgPSAwOworCXhlY2ZnLmN0eGxlbiA9IG8tPmNvbnRleHQ7CisJeGVjZmcuaW50ZXJodW5rY3R4bGVuID0gby0+aW50ZXJodW5rY29udGV4dDsKKwlpZiAoeGRpX2RpZmZfb3V0ZihvbmUsIHR3bywgZGlzY2FyZF9odW5rX2xpbmUsIGRpZmZncmVwX2NvbnN1bWUsCisJCQkgICZlY2JkYXRhLCAmeHBwLCAmeGVjZmcpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gZWNiZGF0YS5oaXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29udGFpbnMobW1maWxlX3QgKm1mLCByZWdleF90ICpyZWdleHAsIGt3c2V0X3Qga3dzKQoreworCXVuc2lnbmVkIGludCBjbnQ7CisJdW5zaWduZWQgbG9uZyBzejsKKwljb25zdCBjaGFyICpkYXRhOworCisJc3ogPSBtZi0+c2l6ZTsKKwlkYXRhID0gbWYtPnB0cjsKKwljbnQgPSAwOworCisJaWYgKHJlZ2V4cCkgeworCQlyZWdtYXRjaF90IHJlZ21hdGNoOworCQlpbnQgZmxhZ3MgPSAwOworCisJCXdoaWxlIChzeiAmJiAqZGF0YSAmJgorCQkgICAgICAgIXJlZ2V4ZWNfYnVmKHJlZ2V4cCwgZGF0YSwgc3osIDEsICZyZWdtYXRjaCwgZmxhZ3MpKSB7CisJCQlmbGFncyB8PSBSRUdfTk9UQk9MOworCQkJZGF0YSArPSByZWdtYXRjaC5ybV9lbzsKKwkJCXN6IC09IHJlZ21hdGNoLnJtX2VvOworCQkJaWYgKHN6ICYmICpkYXRhICYmIHJlZ21hdGNoLnJtX3NvID09IHJlZ21hdGNoLnJtX2VvKSB7CisJCQkJZGF0YSsrOworCQkJCXN6LS07CisJCQl9CisJCQljbnQrKzsKKwkJfQorCisJfSBlbHNlIHsgLyogQ2xhc3NpYyBleGFjdCBzdHJpbmcgbWF0Y2ggKi8KKwkJd2hpbGUgKHN6KSB7CisJCQlzdHJ1Y3Qga3dzbWF0Y2gga3dzbTsKKwkJCXNpemVfdCBvZmZzZXQgPSBrd3NleGVjKGt3cywgZGF0YSwgc3osICZrd3NtKTsKKwkJCWlmIChvZmZzZXQgPT0gLTEpCisJCQkJYnJlYWs7CisJCQlzeiAtPSBvZmZzZXQgKyBrd3NtLnNpemVbMF07CisJCQlkYXRhICs9IG9mZnNldCArIGt3c20uc2l6ZVswXTsKKwkJCWNudCsrOworCQl9CisJfQorCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBpbnQgaGFzX2NoYW5nZXMobW1maWxlX3QgKm9uZSwgbW1maWxlX3QgKnR3bywKKwkJICAgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCSAgICAgICByZWdleF90ICpyZWdleHAsIGt3c2V0X3Qga3dzKQoreworCXVuc2lnbmVkIGludCBvbmVfY29udGFpbnMgPSBvbmUgPyBjb250YWlucyhvbmUsIHJlZ2V4cCwga3dzKSA6IDA7CisJdW5zaWduZWQgaW50IHR3b19jb250YWlucyA9IHR3byA/IGNvbnRhaW5zKHR3bywgcmVnZXhwLCBrd3MpIDogMDsKKwlyZXR1cm4gb25lX2NvbnRhaW5zICE9IHR3b19jb250YWluczsKK30KKworc3RhdGljIGludCBwaWNrYXhlX21hdGNoKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJIHJlZ2V4X3QgKnJlZ2V4cCwga3dzZXRfdCBrd3MsIHBpY2theGVfZm4gZm4pCit7CisJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqdGV4dGNvbnZfb25lID0gTlVMTDsKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udl90d28gPSBOVUxMOworCW1tZmlsZV90IG1mMSwgbWYyOworCWludCByZXQ7CisKKwkvKiBpZ25vcmUgdW5tZXJnZWQgKi8KKwlpZiAoIURJRkZfRklMRV9WQUxJRChwLT5vbmUpICYmICFESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoby0+b2JqZmluZCkgeworCQlyZXR1cm4gIChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJgorCQkJIG9pZHNldF9jb250YWlucyhvLT5vYmpmaW5kLCAmcC0+b25lLT5vaWQpKSB8fAorCQkJKERJRkZfRklMRV9WQUxJRChwLT50d28pICYmCisJCQkgb2lkc2V0X2NvbnRhaW5zKG8tPm9iamZpbmQsICZwLT50d28tPm9pZCkpOworCX0KKworCWlmICghby0+cGlja2F4ZVswXSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoby0+ZmxhZ3MuYWxsb3dfdGV4dGNvbnYpIHsKKwkJdGV4dGNvbnZfb25lID0gZ2V0X3RleHRjb252KG8tPnJlcG8sIHAtPm9uZSk7CisJCXRleHRjb252X3R3byA9IGdldF90ZXh0Y29udihvLT5yZXBvLCBwLT50d28pOworCX0KKworCS8qCisJICogSWYgd2UgaGF2ZSBhbiB1bm1vZGlmaWVkIHBhaXIsIHdlIGtub3cgdGhhdCB0aGUgY291bnQgd2lsbCBiZSB0aGUKKwkgKiBzYW1lIGFuZCBkb24ndCBldmVuIGhhdmUgdG8gbG9hZCB0aGUgYmxvYnMuIFVubGVzcyB0ZXh0Y29udiBpcyBpbgorCSAqIHBsYXksIF9hbmRfIHdlIGFyZSB1c2luZyB0d28gZGlmZmVyZW50IHRleHRjb252IGZpbHRlcnMgKGUuZy4sCisJICogYmVjYXVzZSBhIHBhaXIgaXMgYW4gZXhhY3QgcmVuYW1lIHdpdGggZGlmZmVyZW50IHRleHRjb252IGF0dHJpYnV0ZXMKKwkgKiBmb3IgZWFjaCBzaWRlLCB3aGljaCBtaWdodCBnZW5lcmF0ZSBkaWZmZXJlbnQgY29udGVudCkuCisJICovCisJaWYgKHRleHRjb252X29uZSA9PSB0ZXh0Y29udl90d28gJiYgZGlmZl91bm1vZGlmaWVkX3BhaXIocCkpCisJCXJldHVybiAwOworCisJaWYgKChvLT5waWNrYXhlX29wdHMgJiBESUZGX1BJQ0tBWEVfS0lORF9HKSAmJgorCSAgICAhby0+ZmxhZ3MudGV4dCAmJgorCSAgICAoKCF0ZXh0Y29udl9vbmUgJiYgZGlmZl9maWxlc3BlY19pc19iaW5hcnkoby0+cmVwbywgcC0+b25lKSkgfHwKKwkgICAgICghdGV4dGNvbnZfdHdvICYmIGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KG8tPnJlcG8sIHAtPnR3bykpKSkKKwkJcmV0dXJuIDA7CisKKwltZjEuc2l6ZSA9IGZpbGxfdGV4dGNvbnYoby0+cmVwbywgdGV4dGNvbnZfb25lLCBwLT5vbmUsICZtZjEucHRyKTsKKwltZjIuc2l6ZSA9IGZpbGxfdGV4dGNvbnYoby0+cmVwbywgdGV4dGNvbnZfdHdvLCBwLT50d28sICZtZjIucHRyKTsKKworCXJldCA9IGZuKERJRkZfRklMRV9WQUxJRChwLT5vbmUpID8gJm1mMSA6IE5VTEwsCisJCSBESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSA/ICZtZjIgOiBOVUxMLAorCQkgbywgcmVnZXhwLCBrd3MpOworCisJaWYgKHRleHRjb252X29uZSkKKwkJZnJlZShtZjEucHRyKTsKKwlpZiAodGV4dGNvbnZfdHdvKQorCQlmcmVlKG1mMi5wdHIpOworCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHAtPm9uZSk7CisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+dHdvKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBpY2theGUoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkgICAgcmVnZXhfdCAqcmVnZXhwLCBrd3NldF90IGt3cywgcGlja2F4ZV9mbiBmbikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3Qgb3V0cTsKKworCURJRkZfUVVFVUVfQ0xFQVIoJm91dHEpOworCisJaWYgKG8tPnBpY2theGVfb3B0cyAmIERJRkZfUElDS0FYRV9BTEwpIHsKKwkJLyogU2hvd2luZyB0aGUgd2hvbGUgY2hhbmdlc2V0IGlmIG5lZWRsZSBleGlzdHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCQlpZiAocGlja2F4ZV9tYXRjaChwLCBvLCByZWdleHAsIGt3cywgZm4pKQorCQkJCXJldHVybjsgLyogZG8gbm90IG11bmdlIHRoZSBxdWV1ZSAqLworCQl9CisKKwkJLyoKKwkJICogT3RoZXJ3aXNlIHdlIHdpbGwgY2xlYXIgdGhlIHdob2xlIHF1ZXVlIGJ5IGNvcHlpbmcKKwkJICogdGhlIGVtcHR5IG91dHEgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLCBidXQKKwkJICogZmlyc3QgY2xlYXIgdGhlIGN1cnJlbnQgZW50cmllcyBpbiB0aGUgcXVldWUuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykKKwkJCWRpZmZfZnJlZV9maWxlcGFpcihxLT5xdWV1ZVtpXSk7CisJfSBlbHNlIHsKKwkJLyogU2hvd2luZyBvbmx5IHRoZSBmaWxlcGFpcnMgdGhhdCBoYXMgdGhlIG5lZWRsZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJCWlmIChwaWNrYXhlX21hdGNoKHAsIG8sIHJlZ2V4cCwga3dzLCBmbikpCisJCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJCWVsc2UKKwkJCQlkaWZmX2ZyZWVfZmlsZXBhaXIocCk7CisJCX0KKwl9CisKKwlmcmVlKHEtPnF1ZXVlKTsKKwkqcSA9IG91dHE7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ2NvbXBfb3JfZGllKHJlZ2V4X3QgKnJlZ2V4LCBjb25zdCBjaGFyICpuZWVkbGUsIGludCBjZmxhZ3MpCit7CisJaW50IGVyciA9IHJlZ2NvbXAocmVnZXgsIG5lZWRsZSwgY2ZsYWdzKTsKKwlpZiAoZXJyKSB7CisJCS8qIFRoZSBQT1NJWC4yIHBlb3BsZSBhcmUgc3VyZWx5IHNpY2sgKi8KKwkJY2hhciBlcnJidWZbMTAyNF07CisJCXJlZ2Vycm9yKGVyciwgcmVnZXgsIGVycmJ1ZiwgMTAyNCk7CisJCWRpZSgiaW52YWxpZCByZWdleDogJXMiLCBlcnJidWYpOworCX0KK30KKwordm9pZCBkaWZmY29yZV9waWNrYXhlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8pCit7CisJY29uc3QgY2hhciAqbmVlZGxlID0gby0+cGlja2F4ZTsKKwlpbnQgb3B0cyA9IG8tPnBpY2theGVfb3B0czsKKwlyZWdleF90IHJlZ2V4LCAqcmVnZXhwID0gTlVMTDsKKwlrd3NldF90IGt3cyA9IE5VTEw7CisKKwlpZiAob3B0cyAmIChESUZGX1BJQ0tBWEVfUkVHRVggfCBESUZGX1BJQ0tBWEVfS0lORF9HKSkgeworCQlpbnQgY2ZsYWdzID0gUkVHX0VYVEVOREVEIHwgUkVHX05FV0xJTkU7CisJCWlmIChvLT5waWNrYXhlX29wdHMgJiBESUZGX1BJQ0tBWEVfSUdOT1JFX0NBU0UpCisJCQljZmxhZ3MgfD0gUkVHX0lDQVNFOworCQlyZWdjb21wX29yX2RpZSgmcmVnZXgsIG5lZWRsZSwgY2ZsYWdzKTsKKwkJcmVnZXhwID0gJnJlZ2V4OworCX0gZWxzZSBpZiAob3B0cyAmIERJRkZfUElDS0FYRV9LSU5EX1MpIHsKKwkJaWYgKG8tPnBpY2theGVfb3B0cyAmIERJRkZfUElDS0FYRV9JR05PUkVfQ0FTRSAmJgorCQkgICAgaGFzX25vbl9hc2NpaShuZWVkbGUpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCQlpbnQgY2ZsYWdzID0gUkVHX05FV0xJTkUgfCBSRUdfSUNBU0U7CisKKwkJCWJhc2ljX3JlZ2V4X3F1b3RlX2J1Zigmc2IsIG5lZWRsZSk7CisJCQlyZWdjb21wX29yX2RpZSgmcmVnZXgsIHNiLmJ1ZiwgY2ZsYWdzKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCQlyZWdleHAgPSAmcmVnZXg7CisJCX0gZWxzZSB7CisJCQlrd3MgPSBrd3NhbGxvYyhvLT5waWNrYXhlX29wdHMgJiBESUZGX1BJQ0tBWEVfSUdOT1JFX0NBU0UKKwkJCQkgICAgICAgPyB0b2xvd2VyX3RyYW5zX3RibCA6IE5VTEwpOworCQkJa3dzaW5jcihrd3MsIG5lZWRsZSwgc3RybGVuKG5lZWRsZSkpOworCQkJa3dzcHJlcChrd3MpOworCQl9CisJfQorCisJcGlja2F4ZSgmZGlmZl9xdWV1ZWRfZGlmZiwgbywgcmVnZXhwLCBrd3MsCisJCShvcHRzICYgRElGRl9QSUNLQVhFX0tJTkRfRykgPyBkaWZmX2dyZXAgOiBoYXNfY2hhbmdlcyk7CisKKwlpZiAocmVnZXhwKQorCQlyZWdmcmVlKHJlZ2V4cCk7CisJaWYgKGt3cykKKwkJa3dzZnJlZShrd3MpOworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RpZmZjb3JlLXJlbmFtZS5jIGIvZGlmZmNvcmUtcmVuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTllNjNlOQotLS0gL2Rldi9udWxsCisrKyBiL2RpZmZjb3JlLXJlbmFtZS5jCkBAIC0wLDAgKzEsNzMzIEBACisvKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBKdW5pbyBDIEhhbWFubworICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJwcm9taXNvci1yZW1vdGUuaCIKKworLyogVGFibGUgb2YgcmVuYW1lL2NvcHkgZGVzdGluYXRpb25zICovCisKK3N0YXRpYyBzdHJ1Y3QgZGlmZl9yZW5hbWVfZHN0IHsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvOworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyOworfSAqcmVuYW1lX2RzdDsKK3N0YXRpYyBpbnQgcmVuYW1lX2RzdF9uciwgcmVuYW1lX2RzdF9hbGxvYzsKKworc3RhdGljIGludCBmaW5kX3JlbmFtZV9kc3Qoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bykKK3sKKwlpbnQgZmlyc3QsIGxhc3Q7CisKKwlmaXJzdCA9IDA7CisJbGFzdCA9IHJlbmFtZV9kc3RfbnI7CisJd2hpbGUgKGxhc3QgPiBmaXJzdCkgeworCQlpbnQgbmV4dCA9IGZpcnN0ICsgKChsYXN0IC0gZmlyc3QpID4+IDEpOworCQlzdHJ1Y3QgZGlmZl9yZW5hbWVfZHN0ICpkc3QgPSAmKHJlbmFtZV9kc3RbbmV4dF0pOworCQlpbnQgY21wID0gc3RyY21wKHR3by0+cGF0aCwgZHN0LT50d28tPnBhdGgpOworCQlpZiAoIWNtcCkKKwkJCXJldHVybiBuZXh0OworCQlpZiAoY21wIDwgMCkgeworCQkJbGFzdCA9IG5leHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlmaXJzdCA9IG5leHQrMTsKKwl9CisJcmV0dXJuIC1maXJzdCAtIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlmZl9yZW5hbWVfZHN0ICpsb2NhdGVfcmVuYW1lX2RzdChzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvKQoreworCWludCBvZnMgPSBmaW5kX3JlbmFtZV9kc3QodHdvKTsKKwlyZXR1cm4gb2ZzIDwgMCA/IE5VTEwgOiAmcmVuYW1lX2RzdFtvZnNdOworfQorCisvKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIGlmIHdlIGZvdW5kIGEgZHVwbGljYXRlLgorICovCitzdGF0aWMgaW50IGFkZF9yZW5hbWVfZHN0KHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28pCit7CisJaW50IGZpcnN0ID0gZmluZF9yZW5hbWVfZHN0KHR3byk7CisKKwlpZiAoZmlyc3QgPj0gMCkKKwkJcmV0dXJuIC0xOworCWZpcnN0ID0gLWZpcnN0IC0gMTsKKworCS8qIGluc2VydCB0byBtYWtlIGl0IGF0ICJmaXJzdCIgKi8KKwlBTExPQ19HUk9XKHJlbmFtZV9kc3QsIHJlbmFtZV9kc3RfbnIgKyAxLCByZW5hbWVfZHN0X2FsbG9jKTsKKwlyZW5hbWVfZHN0X25yKys7CisJaWYgKGZpcnN0IDwgcmVuYW1lX2RzdF9ucikKKwkJTU9WRV9BUlJBWShyZW5hbWVfZHN0ICsgZmlyc3QgKyAxLCByZW5hbWVfZHN0ICsgZmlyc3QsCisJCQkgICByZW5hbWVfZHN0X25yIC0gZmlyc3QgLSAxKTsKKwlyZW5hbWVfZHN0W2ZpcnN0XS50d28gPSBhbGxvY19maWxlc3BlYyh0d28tPnBhdGgpOworCWZpbGxfZmlsZXNwZWMocmVuYW1lX2RzdFtmaXJzdF0udHdvLCAmdHdvLT5vaWQsIHR3by0+b2lkX3ZhbGlkLAorCQkgICAgICB0d28tPm1vZGUpOworCXJlbmFtZV9kc3RbZmlyc3RdLnBhaXIgPSBOVUxMOworCXJldHVybiAwOworfQorCisvKiBUYWJsZSBvZiByZW5hbWUvY29weSBzcmMgZmlsZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgZGlmZl9yZW5hbWVfc3JjIHsKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcDsKKwl1bnNpZ25lZCBzaG9ydCBzY29yZTsgLyogdG8gcmVtZW1iZXIgdGhlIGJyZWFrIHNjb3JlICovCit9ICpyZW5hbWVfc3JjOworc3RhdGljIGludCByZW5hbWVfc3JjX25yLCByZW5hbWVfc3JjX2FsbG9jOworCitzdGF0aWMgc3RydWN0IGRpZmZfcmVuYW1lX3NyYyAqcmVnaXN0ZXJfcmVuYW1lX3NyYyhzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCkKK3sKKwlpbnQgZmlyc3QsIGxhc3Q7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSA9IHAtPm9uZTsKKwl1bnNpZ25lZCBzaG9ydCBzY29yZSA9IHAtPnNjb3JlOworCisJZmlyc3QgPSAwOworCWxhc3QgPSByZW5hbWVfc3JjX25yOworCXdoaWxlIChsYXN0ID4gZmlyc3QpIHsKKwkJaW50IG5leHQgPSBmaXJzdCArICgobGFzdCAtIGZpcnN0KSA+PiAxKTsKKwkJc3RydWN0IGRpZmZfcmVuYW1lX3NyYyAqc3JjID0gJihyZW5hbWVfc3JjW25leHRdKTsKKwkJaW50IGNtcCA9IHN0cmNtcChvbmUtPnBhdGgsIHNyYy0+cC0+b25lLT5wYXRoKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gc3JjOworCQlpZiAoY21wIDwgMCkgeworCQkJbGFzdCA9IG5leHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlmaXJzdCA9IG5leHQrMTsKKwl9CisKKwkvKiBpbnNlcnQgdG8gbWFrZSBpdCBhdCAiZmlyc3QiICovCisJQUxMT0NfR1JPVyhyZW5hbWVfc3JjLCByZW5hbWVfc3JjX25yICsgMSwgcmVuYW1lX3NyY19hbGxvYyk7CisJcmVuYW1lX3NyY19ucisrOworCWlmIChmaXJzdCA8IHJlbmFtZV9zcmNfbnIpCisJCU1PVkVfQVJSQVkocmVuYW1lX3NyYyArIGZpcnN0ICsgMSwgcmVuYW1lX3NyYyArIGZpcnN0LAorCQkJICAgcmVuYW1lX3NyY19uciAtIGZpcnN0IC0gMSk7CisJcmVuYW1lX3NyY1tmaXJzdF0ucCA9IHA7CisJcmVuYW1lX3NyY1tmaXJzdF0uc2NvcmUgPSBzY29yZTsKKwlyZXR1cm4gJihyZW5hbWVfc3JjW2ZpcnN0XSk7Cit9CisKK3N0YXRpYyBpbnQgYmFzZW5hbWVfc2FtZShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3JjLCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZHN0KQoreworCWludCBzcmNfbGVuID0gc3RybGVuKHNyYy0+cGF0aCksIGRzdF9sZW4gPSBzdHJsZW4oZHN0LT5wYXRoKTsKKwl3aGlsZSAoc3JjX2xlbiAmJiBkc3RfbGVuKSB7CisJCWNoYXIgYzEgPSBzcmMtPnBhdGhbLS1zcmNfbGVuXTsKKwkJY2hhciBjMiA9IGRzdC0+cGF0aFstLWRzdF9sZW5dOworCQlpZiAoYzEgIT0gYzIpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGMxID09ICcvJykKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gKCFzcmNfbGVuIHx8IHNyYy0+cGF0aFtzcmNfbGVuIC0gMV0gPT0gJy8nKSAmJgorCQkoIWRzdF9sZW4gfHwgZHN0LT5wYXRoW2RzdF9sZW4gLSAxXSA9PSAnLycpOworfQorCitzdHJ1Y3QgZGlmZl9zY29yZSB7CisJaW50IHNyYzsgLyogaW5kZXggaW4gcmVuYW1lX3NyYyAqLworCWludCBkc3Q7IC8qIGluZGV4IGluIHJlbmFtZV9kc3QgKi8KKwl1bnNpZ25lZCBzaG9ydCBzY29yZTsKKwlzaG9ydCBuYW1lX3Njb3JlOworfTsKKworc3RydWN0IHByZWZldGNoX29wdGlvbnMgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyZXBvOworCWludCBza2lwX3VubW9kaWZpZWQ7Cit9Oworc3RhdGljIHZvaWQgcHJlZmV0Y2godm9pZCAqcHJlZmV0Y2hfb3B0aW9ucykKK3sKKwlzdHJ1Y3QgcHJlZmV0Y2hfb3B0aW9ucyAqb3B0aW9ucyA9IHByZWZldGNoX29wdGlvbnM7CisJaW50IGk7CisJc3RydWN0IG9pZF9hcnJheSB0b19mZXRjaCA9IE9JRF9BUlJBWV9JTklUOworCisJZm9yIChpID0gMDsgaSA8IHJlbmFtZV9kc3RfbnI7IGkrKykgeworCQlpZiAocmVuYW1lX2RzdFtpXS5wYWlyKQorCQkJLyoKKwkJCSAqIFRoZSBsb29wIGluIGRpZmZjb3JlX3JlbmFtZSgpIHdpbGwgbm90IG5lZWQgdGhlc2UKKwkJCSAqIGJsb2JzLCBzbyBza2lwIHByZWZldGNoaW5nLgorCQkJICovCisJCQljb250aW51ZTsgLyogYWxyZWFkeSBmb3VuZCBleGFjdCBtYXRjaCAqLworCQlkaWZmX2FkZF9pZl9taXNzaW5nKG9wdGlvbnMtPnJlcG8sICZ0b19mZXRjaCwKKwkJCQkgICAgcmVuYW1lX2RzdFtpXS50d28pOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgcmVuYW1lX3NyY19ucjsgaSsrKSB7CisJCWlmIChvcHRpb25zLT5za2lwX3VubW9kaWZpZWQgJiYKKwkJICAgIGRpZmZfdW5tb2RpZmllZF9wYWlyKHJlbmFtZV9zcmNbaV0ucCkpCisJCQkvKgorCQkJICogVGhlIGxvb3AgaW4gZGlmZmNvcmVfcmVuYW1lKCkgd2lsbCBub3QgbmVlZCB0aGVzZQorCQkJICogYmxvYnMsIHNvIHNraXAgcHJlZmV0Y2hpbmcuCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQlkaWZmX2FkZF9pZl9taXNzaW5nKG9wdGlvbnMtPnJlcG8sICZ0b19mZXRjaCwKKwkJCQkgICAgcmVuYW1lX3NyY1tpXS5wLT5vbmUpOworCX0KKwlwcm9taXNvcl9yZW1vdGVfZ2V0X2RpcmVjdChvcHRpb25zLT5yZXBvLCB0b19mZXRjaC5vaWQsIHRvX2ZldGNoLm5yKTsKKwlvaWRfYXJyYXlfY2xlYXIoJnRvX2ZldGNoKTsKK30KKworc3RhdGljIGludCBlc3RpbWF0ZV9zaW1pbGFyaXR5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcmMsCisJCQkgICAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRzdCwKKwkJCSAgICAgICBpbnQgbWluaW11bV9zY29yZSwKKwkJCSAgICAgICBpbnQgc2tpcF91bm1vZGlmaWVkKQoreworCS8qIHNyYyBwb2ludHMgYXQgYSBmaWxlIHRoYXQgZXhpc3RlZCBpbiB0aGUgb3JpZ2luYWwgdHJlZSAob3IKKwkgKiBvcHRpb25hbGx5IGEgZmlsZSBpbiB0aGUgZGVzdGluYXRpb24gdHJlZSkgYW5kIGRzdCBwb2ludHMKKwkgKiBhdCBhIG5ld2x5IGNyZWF0ZWQgZmlsZS4gIFRoZXkgbWF5IGJlIHF1aXRlIHNpbWlsYXIsIGluIHdoaWNoCisJICogY2FzZSB3ZSB3YW50IHRvIHNheSBzcmMgaXMgcmVuYW1lZCB0byBkc3Qgb3Igc3JjIGlzIGNvcGllZCBpbnRvCisJICogZHN0LCBhbmQgdGhlbiBzb21lIGVkaXQgaGFzIGJlZW4gYXBwbGllZCB0byBkc3QuCisJICoKKwkgKiBDb21wYXJlIHRoZW0gYW5kIHJldHVybiBob3cgc2ltaWxhciB0aGV5IGFyZSwgcmVwcmVzZW50aW5nCisJICogdGhlIHNjb3JlIGFzIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCBNQVhfU0NPUkUuCisJICoKKwkgKiBXaGVuIHRoZXJlIGlzIGFuIGV4YWN0IG1hdGNoLCBpdCBpcyBjb25zaWRlcmVkIGEgYmV0dGVyCisJICogbWF0Y2ggdGhhbiBhbnl0aGluZyBlbHNlOyB0aGUgZGVzdGluYXRpb24gZG9lcyBub3QgZXZlbgorCSAqIGNhbGwgaW50byB0aGlzIGZ1bmN0aW9uIGluIHRoYXQgY2FzZS4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIG1heF9zaXplLCBkZWx0YV9zaXplLCBiYXNlX3NpemUsIHNyY19jb3BpZWQsIGxpdGVyYWxfYWRkZWQ7CisJaW50IHNjb3JlOworCXN0cnVjdCBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjX29wdGlvbnMgZHBmX29wdGlvbnMgPSB7CisJCS5jaGVja19zaXplX29ubHkgPSAxCisJfTsKKwlzdHJ1Y3QgcHJlZmV0Y2hfb3B0aW9ucyBwcmVmZXRjaF9vcHRpb25zID0ge3IsIHNraXBfdW5tb2RpZmllZH07CisKKwlpZiAociA9PSB0aGVfcmVwb3NpdG9yeSAmJiBoYXNfcHJvbWlzb3JfcmVtb3RlKCkpIHsKKwkJZHBmX29wdGlvbnMubWlzc2luZ19vYmplY3RfY2IgPSBwcmVmZXRjaDsKKwkJZHBmX29wdGlvbnMubWlzc2luZ19vYmplY3RfZGF0YSA9ICZwcmVmZXRjaF9vcHRpb25zOworCX0KKworCS8qIFdlIGRlYWwgb25seSB3aXRoIHJlZ3VsYXIgZmlsZXMuICBTeW1saW5rIHJlbmFtZXMgYXJlIGhhbmRsZWQKKwkgKiBvbmx5IHdoZW4gdGhleSBhcmUgZXhhY3QgbWF0Y2hlcyAtLS0gaW4gb3RoZXIgd29yZHMsIG5vIGVkaXRzCisJICogYWZ0ZXIgcmVuYW1pbmcuCisJICovCisJaWYgKCFTX0lTUkVHKHNyYy0+bW9kZSkgfHwgIVNfSVNSRUcoZHN0LT5tb2RlKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIE5lZWQgdG8gY2hlY2sgdGhhdCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHNpemVzIGFyZQorCSAqIGZpbGxlZCBpbiBiZWZvcmUgY29tcGFyaW5nIHRoZW0uCisJICoKKwkgKiBJZiB3ZSBhbHJlYWR5IGhhdmUgImNudF9kYXRhIiBmaWxsZWQgaW4sIHdlIGtub3cgaXQncworCSAqIGFsbCBnb29kIChhdm9pZCBjaGVja2luZyB0aGUgc2l6ZSBmb3IgemVybywgYXMgdGhhdAorCSAqIGlzIGEgcG9zc2libGUgc2l6ZSAtIHdlIHJlYWxseSBzaG91bGQgaGF2ZSBhIGZsYWcgdG8KKwkgKiBzYXkgd2hldGhlciB0aGUgc2l6ZSBpcyB2YWxpZCBvciBub3QhKQorCSAqLworCWlmICghc3JjLT5jbnRfZGF0YSAmJgorCSAgICBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHIsIHNyYywgJmRwZl9vcHRpb25zKSkKKwkJcmV0dXJuIDA7CisJaWYgKCFkc3QtPmNudF9kYXRhICYmCisJICAgIGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMociwgZHN0LCAmZHBmX29wdGlvbnMpKQorCQlyZXR1cm4gMDsKKworCW1heF9zaXplID0gKChzcmMtPnNpemUgPiBkc3QtPnNpemUpID8gc3JjLT5zaXplIDogZHN0LT5zaXplKTsKKwliYXNlX3NpemUgPSAoKHNyYy0+c2l6ZSA8IGRzdC0+c2l6ZSkgPyBzcmMtPnNpemUgOiBkc3QtPnNpemUpOworCWRlbHRhX3NpemUgPSBtYXhfc2l6ZSAtIGJhc2Vfc2l6ZTsKKworCS8qIFdlIHdvdWxkIG5vdCBjb25zaWRlciBlZGl0cyB0aGF0IGNoYW5nZSB0aGUgZmlsZSBzaXplIHNvCisJICogZHJhc3RpY2FsbHkuICBkZWx0YV9zaXplIG11c3QgYmUgc21hbGxlciB0aGFuCisJICogKE1BWF9TQ09SRS1taW5pbXVtX3Njb3JlKS9NQVhfU0NPUkUgKiBtaW4oc3JjLT5zaXplLCBkc3QtPnNpemUpLgorCSAqCisJICogTm90ZSB0aGF0IGJhc2Vfc2l6ZSA9PSAwIGNhc2UgaXMgaGFuZGxlZCBoZXJlIGFscmVhZHkKKwkgKiBhbmQgdGhlIGZpbmFsIHNjb3JlIGNvbXB1dGF0aW9uIGJlbG93IHdvdWxkIG5vdCBoYXZlIGEKKwkgKiBkaXZpZGUtYnktemVybyBpc3N1ZS4KKwkgKi8KKwlpZiAobWF4X3NpemUgKiAoTUFYX1NDT1JFLW1pbmltdW1fc2NvcmUpIDwgZGVsdGFfc2l6ZSAqIE1BWF9TQ09SRSkKKwkJcmV0dXJuIDA7CisKKwlkcGZfb3B0aW9ucy5jaGVja19zaXplX29ubHkgPSAwOworCisJaWYgKCFzcmMtPmNudF9kYXRhICYmIGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMociwgc3JjLCAmZHBmX29wdGlvbnMpKQorCQlyZXR1cm4gMDsKKwlpZiAoIWRzdC0+Y250X2RhdGEgJiYgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCBkc3QsICZkcGZfb3B0aW9ucykpCisJCXJldHVybiAwOworCisJaWYgKGRpZmZjb3JlX2NvdW50X2NoYW5nZXMociwgc3JjLCBkc3QsCisJCQkJICAgJnNyYy0+Y250X2RhdGEsICZkc3QtPmNudF9kYXRhLAorCQkJCSAgICZzcmNfY29waWVkLCAmbGl0ZXJhbF9hZGRlZCkpCisJCXJldHVybiAwOworCisJLyogSG93IHNpbWlsYXIgYXJlIHRoZXk/CisJICogd2hhdCBwZXJjZW50YWdlIG9mIG1hdGVyaWFsIGluIGRzdCBhcmUgZnJvbSBzb3VyY2U/CisJICovCisJaWYgKCFkc3QtPnNpemUpCisJCXNjb3JlID0gMDsgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwllbHNlCisJCXNjb3JlID0gKGludCkoc3JjX2NvcGllZCAqIE1BWF9TQ09SRSAvIG1heF9zaXplKTsKKwlyZXR1cm4gc2NvcmU7Cit9CisKK3N0YXRpYyB2b2lkIHJlY29yZF9yZW5hbWVfcGFpcihpbnQgZHN0X2luZGV4LCBpbnQgc3JjX2luZGV4LCBpbnQgc2NvcmUpCit7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNyYywgKmRzdDsKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqZHA7CisKKwlpZiAocmVuYW1lX2RzdFtkc3RfaW5kZXhdLnBhaXIpCisJCWRpZSgiaW50ZXJuYWwgZXJyb3I6IGRzdCBhbHJlYWR5IG1hdGNoZWQuIik7CisKKwlzcmMgPSByZW5hbWVfc3JjW3NyY19pbmRleF0ucC0+b25lOworCXNyYy0+cmVuYW1lX3VzZWQrKzsKKwlzcmMtPmNvdW50Kys7CisKKwlkc3QgPSByZW5hbWVfZHN0W2RzdF9pbmRleF0udHdvOworCWRzdC0+Y291bnQrKzsKKworCWRwID0gZGlmZl9xdWV1ZShOVUxMLCBzcmMsIGRzdCk7CisJZHAtPnJlbmFtZWRfcGFpciA9IDE7CisJaWYgKCFzdHJjbXAoc3JjLT5wYXRoLCBkc3QtPnBhdGgpKQorCQlkcC0+c2NvcmUgPSByZW5hbWVfc3JjW3NyY19pbmRleF0uc2NvcmU7CisJZWxzZQorCQlkcC0+c2NvcmUgPSBzY29yZTsKKwlyZW5hbWVfZHN0W2RzdF9pbmRleF0ucGFpciA9IGRwOworfQorCisvKgorICogV2Ugc29ydCB0aGUgcmVuYW1lIHNpbWlsYXJpdHkgbWF0cml4IHdpdGggdGhlIHNjb3JlLCBpbiBkZXNjZW5kaW5nCisgKiBvcmRlciAodGhlIG1vc3Qgc2ltaWxhciBmaXJzdCkuCisgKi8KK3N0YXRpYyBpbnQgc2NvcmVfY29tcGFyZShjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IGRpZmZfc2NvcmUgKmEgPSBhXywgKmIgPSBiXzsKKworCS8qIHNpbmsgdGhlIHVudXNlZCBvbmVzIHRvIHRoZSBib3R0b20gKi8KKwlpZiAoYS0+ZHN0IDwgMCkKKwkJcmV0dXJuICgwIDw9IGItPmRzdCk7CisJZWxzZSBpZiAoYi0+ZHN0IDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGEtPnNjb3JlID09IGItPnNjb3JlKQorCQlyZXR1cm4gYi0+bmFtZV9zY29yZSAtIGEtPm5hbWVfc2NvcmU7CisKKwlyZXR1cm4gYi0+c2NvcmUgLSBhLT5zY29yZTsKK30KKworc3RydWN0IGZpbGVfc2ltaWxhcml0eSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50cnk7CisJaW50IGluZGV4OworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpmaWxlc3BlYzsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaF9maWxlc3BlYyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpmaWxlc3BlYykKK3sKKwlpZiAoIWZpbGVzcGVjLT5vaWRfdmFsaWQpIHsKKwkJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMociwgZmlsZXNwZWMsIE5VTEwpKQorCQkJcmV0dXJuIDA7CisJCWhhc2hfb2JqZWN0X2ZpbGUoci0+aGFzaF9hbGdvLCBmaWxlc3BlYy0+ZGF0YSwgZmlsZXNwZWMtPnNpemUsCisJCQkJICJibG9iIiwgJmZpbGVzcGVjLT5vaWQpOworCX0KKwlyZXR1cm4gb2lkaGFzaCgmZmlsZXNwZWMtPm9pZCk7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9pZGVudGljYWxfZmlsZXMoc3RydWN0IGhhc2htYXAgKnNyY3MsCisJCQkJaW50IGRzdF9pbmRleCwKKwkJCQlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWludCByZW5hbWVzID0gMDsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdGFyZ2V0ID0gcmVuYW1lX2RzdFtkc3RfaW5kZXhdLnR3bzsKKwlzdHJ1Y3QgZmlsZV9zaW1pbGFyaXR5ICpwLCAqYmVzdCA9IE5VTEw7CisJaW50IGkgPSAxMDAsIGJlc3Rfc2NvcmUgPSAtMTsKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfZmlsZXNwZWMob3B0aW9ucy0+cmVwbywgdGFyZ2V0KTsKKworCS8qCisJICogRmluZCB0aGUgYmVzdCBzb3VyY2UgbWF0Y2ggZm9yIHNwZWNpZmllZCBkZXN0aW5hdGlvbi4KKwkgKi8KKwlwID0gaGFzaG1hcF9nZXRfZW50cnlfZnJvbV9oYXNoKHNyY3MsIGhhc2gsIE5VTEwsCisJCQkJCXN0cnVjdCBmaWxlX3NpbWlsYXJpdHksIGVudHJ5KTsKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5X2Zyb20oc3JjcywgcCwgZW50cnkpIHsKKwkJaW50IHNjb3JlOworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc291cmNlID0gcC0+ZmlsZXNwZWM7CisKKwkJLyogRmFsc2UgaGFzaCBjb2xsaXNpb24/ICovCisJCWlmICghb2lkZXEoJnNvdXJjZS0+b2lkLCAmdGFyZ2V0LT5vaWQpKQorCQkJY29udGludWU7CisJCS8qIE5vbi1yZWd1bGFyIGZpbGVzPyBJZiBzbywgdGhlIG1vZGVzIG11c3QgbWF0Y2ghICovCisJCWlmICghU19JU1JFRyhzb3VyY2UtPm1vZGUpIHx8ICFTX0lTUkVHKHRhcmdldC0+bW9kZSkpIHsKKwkJCWlmIChzb3VyY2UtPm1vZGUgIT0gdGFyZ2V0LT5tb2RlKQorCQkJCWNvbnRpbnVlOworCQl9CisJCS8qIEdpdmUgaGlnaGVyIHNjb3JlcyB0byBzb3VyY2VzIHRoYXQgaGF2ZW4ndCBiZWVuIHVzZWQgYWxyZWFkeSAqLworCQlzY29yZSA9ICFzb3VyY2UtPnJlbmFtZV91c2VkOworCQlpZiAoc291cmNlLT5yZW5hbWVfdXNlZCAmJiBvcHRpb25zLT5kZXRlY3RfcmVuYW1lICE9IERJRkZfREVURUNUX0NPUFkpCisJCQljb250aW51ZTsKKwkJc2NvcmUgKz0gYmFzZW5hbWVfc2FtZShzb3VyY2UsIHRhcmdldCk7CisJCWlmIChzY29yZSA+IGJlc3Rfc2NvcmUpIHsKKwkJCWJlc3QgPSBwOworCQkJYmVzdF9zY29yZSA9IHNjb3JlOworCQkJaWYgKHNjb3JlID09IDIpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBUb28gbWFueSBpZGVudGljYWwgYWx0ZXJuYXRpdmVzPyBQaWNrIG9uZSAqLworCQlpZiAoIS0taSkKKwkJCWJyZWFrOworCX0KKwlpZiAoYmVzdCkgeworCQlyZWNvcmRfcmVuYW1lX3BhaXIoZHN0X2luZGV4LCBiZXN0LT5pbmRleCwgTUFYX1NDT1JFKTsKKwkJcmVuYW1lcysrOworCX0KKwlyZXR1cm4gcmVuYW1lczsKK30KKworc3RhdGljIHZvaWQgaW5zZXJ0X2ZpbGVfdGFibGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICBzdHJ1Y3QgaGFzaG1hcCAqdGFibGUsIGludCBpbmRleCwKKwkJCSAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpmaWxlc3BlYykKK3sKKwlzdHJ1Y3QgZmlsZV9zaW1pbGFyaXR5ICplbnRyeSA9IHhtYWxsb2Moc2l6ZW9mKCplbnRyeSkpOworCisJZW50cnktPmluZGV4ID0gaW5kZXg7CisJZW50cnktPmZpbGVzcGVjID0gZmlsZXNwZWM7CisKKwloYXNobWFwX2VudHJ5X2luaXQoJmVudHJ5LT5lbnRyeSwgaGFzaF9maWxlc3BlYyhyLCBmaWxlc3BlYykpOworCWhhc2htYXBfYWRkKHRhYmxlLCAmZW50cnktPmVudHJ5KTsKK30KKworLyoKKyAqIEZpbmQgZXhhY3QgcmVuYW1lcyBmaXJzdC4KKyAqCisgKiBUaGUgZmlyc3Qgcm91bmQgbWF0Y2hlcyB1cCB0aGUgdXAtdG8tZGF0ZSBlbnRyaWVzLAorICogYW5kIHRoZW4gZHVyaW5nIHRoZSBzZWNvbmQgcm91bmQgd2UgdHJ5IHRvIG1hdGNoCisgKiBjYWNoZS1kaXJ0eSBlbnRyaWVzIGFzIHdlbGwuCisgKi8KK3N0YXRpYyBpbnQgZmluZF9leGFjdF9yZW5hbWVzKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IGksIHJlbmFtZXMgPSAwOworCXN0cnVjdCBoYXNobWFwIGZpbGVfdGFibGU7CisKKwkvKiBBZGQgYWxsIHNvdXJjZXMgdG8gdGhlIGhhc2ggdGFibGUgaW4gcmV2ZXJzZSBvcmRlciwgYmVjYXVzZQorCSAqIGxhdGVyIG9uIHRoZXkgd2lsbCBiZSByZXRyaWV2ZWQgaW4gTElGTyBvcmRlci4KKwkgKi8KKwloYXNobWFwX2luaXQoJmZpbGVfdGFibGUsIE5VTEwsIE5VTEwsIHJlbmFtZV9zcmNfbnIpOworCWZvciAoaSA9IHJlbmFtZV9zcmNfbnItMTsgaSA+PSAwOyBpLS0pCisJCWluc2VydF9maWxlX3RhYmxlKG9wdGlvbnMtPnJlcG8sCisJCQkJICAmZmlsZV90YWJsZSwgaSwKKwkJCQkgIHJlbmFtZV9zcmNbaV0ucC0+b25lKTsKKworCS8qIFdhbGsgdGhlIGRlc3RpbmF0aW9ucyBhbmQgZmluZCBiZXN0IHNvdXJjZSBtYXRjaCAqLworCWZvciAoaSA9IDA7IGkgPCByZW5hbWVfZHN0X25yOyBpKyspCisJCXJlbmFtZXMgKz0gZmluZF9pZGVudGljYWxfZmlsZXMoJmZpbGVfdGFibGUsIGksIG9wdGlvbnMpOworCisJLyogRnJlZSB0aGUgaGFzaCBkYXRhIHN0cnVjdHVyZSBhbmQgZW50cmllcyAqLworCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZmaWxlX3RhYmxlLCBzdHJ1Y3QgZmlsZV9zaW1pbGFyaXR5LCBlbnRyeSk7CisKKwlyZXR1cm4gcmVuYW1lczsKK30KKworI2RlZmluZSBOVU1fQ0FORElEQVRFX1BFUl9EU1QgNAorc3RhdGljIHZvaWQgcmVjb3JkX2lmX2JldHRlcihzdHJ1Y3QgZGlmZl9zY29yZSBtW10sIHN0cnVjdCBkaWZmX3Njb3JlICpvKQoreworCWludCBpLCB3b3JzdDsKKworCS8qIGZpbmQgdGhlIHdvcnN0IG9uZSAqLworCXdvcnN0ID0gMDsKKwlmb3IgKGkgPSAxOyBpIDwgTlVNX0NBTkRJREFURV9QRVJfRFNUOyBpKyspCisJCWlmIChzY29yZV9jb21wYXJlKCZtW2ldLCAmbVt3b3JzdF0pID4gMCkKKwkJCXdvcnN0ID0gaTsKKworCS8qIGlzIGl0IGJldHRlciB0aGFuIHRoZSB3b3JzdCBvbmU/ICovCisJaWYgKHNjb3JlX2NvbXBhcmUoJm1bd29yc3RdLCBvKSA+IDApCisJCW1bd29yc3RdID0gKm87Cit9CisKKy8qCisgKiBSZXR1cm5zOgorICogMCBpZiB3ZSBhcmUgdW5kZXIgdGhlIGxpbWl0OworICogMSBpZiB3ZSBuZWVkIHRvIGRpc2FibGUgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uOworICogMiBpZiB3ZSB3b3VsZCBiZSB1bmRlciB0aGUgbGltaXQgaWYgd2Ugd2VyZSBnaXZlbiAtQyBpbnN0ZWFkIG9mIC1DIC1DLgorICovCitzdGF0aWMgaW50IHRvb19tYW55X3JlbmFtZV9jYW5kaWRhdGVzKGludCBudW1fY3JlYXRlLAorCQkJCSAgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IHJlbmFtZV9saW1pdCA9IG9wdGlvbnMtPnJlbmFtZV9saW1pdDsKKwlpbnQgbnVtX3NyYyA9IHJlbmFtZV9zcmNfbnI7CisJaW50IGk7CisKKwlvcHRpb25zLT5uZWVkZWRfcmVuYW1lX2xpbWl0ID0gMDsKKworCS8qCisJICogVGhpcyBiYXNpY2FsbHkgZG9lcyBhIHRlc3QgZm9yIHRoZSByZW5hbWUgbWF0cml4IG5vdAorCSAqIGdyb3dpbmcgbGFyZ2VyIHRoYW4gYSAicmVuYW1lX2xpbWl0IiBzcXVhcmUgbWF0cml4LCBpZToKKwkgKgorCSAqICAgIG51bV9jcmVhdGUgKiBudW1fc3JjID4gcmVuYW1lX2xpbWl0ICogcmVuYW1lX2xpbWl0CisJICovCisJaWYgKHJlbmFtZV9saW1pdCA8PSAwKQorCQlyZW5hbWVfbGltaXQgPSAzMjc2NzsKKwlpZiAoKG51bV9jcmVhdGUgPD0gcmVuYW1lX2xpbWl0IHx8IG51bV9zcmMgPD0gcmVuYW1lX2xpbWl0KSAmJgorCSAgICAoKHVpbnQ2NF90KW51bV9jcmVhdGUgKiAodWludDY0X3QpbnVtX3NyYworCSAgICAgPD0gKHVpbnQ2NF90KXJlbmFtZV9saW1pdCAqICh1aW50NjRfdClyZW5hbWVfbGltaXQpKQorCQlyZXR1cm4gMDsKKworCW9wdGlvbnMtPm5lZWRlZF9yZW5hbWVfbGltaXQgPQorCQludW1fc3JjID4gbnVtX2NyZWF0ZSA/IG51bV9zcmMgOiBudW1fY3JlYXRlOworCisJLyogQXJlIHdlIHJ1bm5pbmcgdW5kZXIgLUMgLUM/ICovCisJaWYgKCFvcHRpb25zLT5mbGFncy5maW5kX2NvcGllc19oYXJkZXIpCisJCXJldHVybiAxOworCisJLyogV291bGQgd2UgYnVzdCB0aGUgbGltaXQgaWYgd2Ugd2VyZSBydW5uaW5nIHVuZGVyIC1DPyAqLworCWZvciAobnVtX3NyYyA9IGkgPSAwOyBpIDwgcmVuYW1lX3NyY19ucjsgaSsrKSB7CisJCWlmIChkaWZmX3VubW9kaWZpZWRfcGFpcihyZW5hbWVfc3JjW2ldLnApKQorCQkJY29udGludWU7CisJCW51bV9zcmMrKzsKKwl9CisJaWYgKChudW1fY3JlYXRlIDw9IHJlbmFtZV9saW1pdCB8fCBudW1fc3JjIDw9IHJlbmFtZV9saW1pdCkgJiYKKwkgICAgKCh1aW50NjRfdCludW1fY3JlYXRlICogKHVpbnQ2NF90KW51bV9zcmMKKwkgICAgIDw9ICh1aW50NjRfdClyZW5hbWVfbGltaXQgKiAodWludDY0X3QpcmVuYW1lX2xpbWl0KSkKKwkJcmV0dXJuIDI7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9yZW5hbWVzKHN0cnVjdCBkaWZmX3Njb3JlICpteCwgaW50IGRzdF9jbnQsIGludCBtaW5pbXVtX3Njb3JlLCBpbnQgY29waWVzKQoreworCWludCBjb3VudCA9IDAsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHN0X2NudCAqIE5VTV9DQU5ESURBVEVfUEVSX0RTVDsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX3JlbmFtZV9kc3QgKmRzdDsKKworCQlpZiAoKG14W2ldLmRzdCA8IDApIHx8CisJCSAgICAobXhbaV0uc2NvcmUgPCBtaW5pbXVtX3Njb3JlKSkKKwkJCWJyZWFrOyAvKiB0aGVyZSBpcyBubyBtb3JlIHVzYWJsZSBwYWlyLiAqLworCQlkc3QgPSAmcmVuYW1lX2RzdFtteFtpXS5kc3RdOworCQlpZiAoZHN0LT5wYWlyKQorCQkJY29udGludWU7IC8qIGFscmVhZHkgZG9uZSwgZWl0aGVyIGV4YWN0IG9yIGZ1enp5LiAqLworCQlpZiAoIWNvcGllcyAmJiByZW5hbWVfc3JjW214W2ldLnNyY10ucC0+b25lLT5yZW5hbWVfdXNlZCkKKwkJCWNvbnRpbnVlOworCQlyZWNvcmRfcmVuYW1lX3BhaXIobXhbaV0uZHN0LCBteFtpXS5zcmMsIG14W2ldLnNjb3JlKTsKKwkJY291bnQrKzsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCit2b2lkIGRpZmZjb3JlX3JlbmFtZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWludCBkZXRlY3RfcmVuYW1lID0gb3B0aW9ucy0+ZGV0ZWN0X3JlbmFtZTsKKwlpbnQgbWluaW11bV9zY29yZSA9IG9wdGlvbnMtPnJlbmFtZV9zY29yZTsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEgPSAmZGlmZl9xdWV1ZWRfZGlmZjsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3Qgb3V0cTsKKwlzdHJ1Y3QgZGlmZl9zY29yZSAqbXg7CisJaW50IGksIGosIHJlbmFtZV9jb3VudCwgc2tpcF91bm1vZGlmaWVkID0gMDsKKwlpbnQgbnVtX2NyZWF0ZSwgZHN0X2NudDsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKKworCWlmICghbWluaW11bV9zY29yZSkKKwkJbWluaW11bV9zY29yZSA9IERFRkFVTFRfUkVOQU1FX1NDT1JFOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJaWYgKCFESUZGX0ZJTEVfVkFMSUQocC0+b25lKSkgeworCQkJaWYgKCFESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkKKwkJCQljb250aW51ZTsgLyogdW5tZXJnZWQgKi8KKwkJCWVsc2UgaWYgKG9wdGlvbnMtPnNpbmdsZV9mb2xsb3cgJiYKKwkJCQkgc3RyY21wKG9wdGlvbnMtPnNpbmdsZV9mb2xsb3csIHAtPnR3by0+cGF0aCkpCisJCQkJY29udGludWU7IC8qIG5vdCBpbnRlcmVzdGVkICovCisJCQllbHNlIGlmICghb3B0aW9ucy0+ZmxhZ3MucmVuYW1lX2VtcHR5ICYmCisJCQkJIGlzX2VtcHR5X2Jsb2Jfb2lkKCZwLT50d28tPm9pZCkpCisJCQkJY29udGludWU7CisJCQllbHNlIGlmIChhZGRfcmVuYW1lX2RzdChwLT50d28pIDwgMCkgeworCQkJCXdhcm5pbmcoInNraXBwaW5nIHJlbmFtZSBkZXRlY3Rpb24sIGRldGVjdGVkIgorCQkJCQkiIGR1cGxpY2F0ZSBkZXN0aW5hdGlvbiAnJXMnIiwKKwkJCQkJcC0+dHdvLT5wYXRoKTsKKwkJCQlnb3RvIGNsZWFudXA7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIW9wdGlvbnMtPmZsYWdzLnJlbmFtZV9lbXB0eSAmJgorCQkJIGlzX2VtcHR5X2Jsb2Jfb2lkKCZwLT5vbmUtPm9pZCkpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAoIURJRkZfUEFJUl9VTk1FUkdFRChwKSAmJiAhRElGRl9GSUxFX1ZBTElEKHAtPnR3bykpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgc291cmNlIGlzIGEgYnJva2VuICJkZWxldGUiLCBhbmQKKwkJCSAqIHRoZXkgZGlkIG5vdCByZWFsbHkgd2FudCB0byBnZXQgYnJva2VuLAorCQkJICogdGhhdCBtZWFucyB0aGUgc291cmNlIGFjdHVhbGx5IHN0YXlzLgorCQkJICogU28gd2UgaW5jcmVtZW50IHRoZSAicmVuYW1lX3VzZWQiIHNjb3JlCisJCQkgKiBieSBvbmUsIHRvIGluZGljYXRlIG91cnNlbHZlcyBhcyBhIHVzZXIKKwkJCSAqLworCQkJaWYgKHAtPmJyb2tlbl9wYWlyICYmICFwLT5zY29yZSkKKwkJCQlwLT5vbmUtPnJlbmFtZV91c2VkKys7CisJCQlyZWdpc3Rlcl9yZW5hbWVfc3JjKHApOworCQl9CisJCWVsc2UgaWYgKGRldGVjdF9yZW5hbWUgPT0gRElGRl9ERVRFQ1RfQ09QWSkgeworCQkJLyoKKwkJCSAqIEluY3JlbWVudCB0aGUgInJlbmFtZV91c2VkIiBzY29yZSBieQorCQkJICogb25lLCB0byBpbmRpY2F0ZSBvdXJzZWx2ZXMgYXMgYSB1c2VyLgorCQkJICovCisJCQlwLT5vbmUtPnJlbmFtZV91c2VkKys7CisJCQlyZWdpc3Rlcl9yZW5hbWVfc3JjKHApOworCQl9CisJfQorCWlmIChyZW5hbWVfZHN0X25yID09IDAgfHwgcmVuYW1lX3NyY19uciA9PSAwKQorCQlnb3RvIGNsZWFudXA7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKworCS8qCisJICogV2UgcmVhbGx5IHdhbnQgdG8gY3VsbCB0aGUgY2FuZGlkYXRlcyBsaXN0IGVhcmx5CisJICogd2l0aCBjaGVhcCB0ZXN0cyBpbiBvcmRlciB0byBhdm9pZCBkb2luZyBkZWx0YXMuCisJICovCisJcmVuYW1lX2NvdW50ID0gZmluZF9leGFjdF9yZW5hbWVzKG9wdGlvbnMpOworCisJLyogRGlkIHdlIG9ubHkgd2FudCBleGFjdCByZW5hbWVzPyAqLworCWlmIChtaW5pbXVtX3Njb3JlID09IE1BWF9TQ09SRSkKKwkJZ290byBjbGVhbnVwOworCisJLyoKKwkgKiBDYWxjdWxhdGUgaG93IG1hbnkgcmVuYW1lcyBhcmUgbGVmdCAoYnV0IGFsbCB0aGUgc291cmNlCisJICogZmlsZXMgc3RpbGwgcmVtYWluIGFzIG9wdGlvbnMgZm9yIHJlbmFtZS9jb3BpZXMhKQorCSAqLworCW51bV9jcmVhdGUgPSAocmVuYW1lX2RzdF9uciAtIHJlbmFtZV9jb3VudCk7CisKKwkvKiBBbGwgZG9uZT8gKi8KKwlpZiAoIW51bV9jcmVhdGUpCisJCWdvdG8gY2xlYW51cDsKKworCXN3aXRjaCAodG9vX21hbnlfcmVuYW1lX2NhbmRpZGF0ZXMobnVtX2NyZWF0ZSwgb3B0aW9ucykpIHsKKwljYXNlIDE6CisJCWdvdG8gY2xlYW51cDsKKwljYXNlIDI6CisJCW9wdGlvbnMtPmRlZ3JhZGVkX2NjX3RvX2MgPSAxOworCQlza2lwX3VubW9kaWZpZWQgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAob3B0aW9ucy0+c2hvd19yZW5hbWVfcHJvZ3Jlc3MpIHsKKwkJcHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJCV8oIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIiksCisJCQkJKHVpbnQ2NF90KXJlbmFtZV9kc3RfbnIgKiAodWludDY0X3QpcmVuYW1lX3NyY19ucik7CisJfQorCisJbXggPSB4Y2FsbG9jKHN0X211bHQoTlVNX0NBTkRJREFURV9QRVJfRFNULCBudW1fY3JlYXRlKSwgc2l6ZW9mKCpteCkpOworCWZvciAoZHN0X2NudCA9IGkgPSAwOyBpIDwgcmVuYW1lX2RzdF9ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28gPSByZW5hbWVfZHN0W2ldLnR3bzsKKwkJc3RydWN0IGRpZmZfc2NvcmUgKm07CisKKwkJaWYgKHJlbmFtZV9kc3RbaV0ucGFpcikKKwkJCWNvbnRpbnVlOyAvKiBkZWFsdCB3aXRoIGV4YWN0IG1hdGNoIGFscmVhZHkuICovCisKKwkJbSA9ICZteFtkc3RfY250ICogTlVNX0NBTkRJREFURV9QRVJfRFNUXTsKKwkJZm9yIChqID0gMDsgaiA8IE5VTV9DQU5ESURBVEVfUEVSX0RTVDsgaisrKQorCQkJbVtqXS5kc3QgPSAtMTsKKworCQlmb3IgKGogPSAwOyBqIDwgcmVuYW1lX3NyY19ucjsgaisrKSB7CisJCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lID0gcmVuYW1lX3NyY1tqXS5wLT5vbmU7CisJCQlzdHJ1Y3QgZGlmZl9zY29yZSB0aGlzX3NyYzsKKworCQkJaWYgKHNraXBfdW5tb2RpZmllZCAmJgorCQkJICAgIGRpZmZfdW5tb2RpZmllZF9wYWlyKHJlbmFtZV9zcmNbal0ucCkpCisJCQkJY29udGludWU7CisKKwkJCXRoaXNfc3JjLnNjb3JlID0gZXN0aW1hdGVfc2ltaWxhcml0eShvcHRpb25zLT5yZXBvLAorCQkJCQkJCSAgICAgb25lLCB0d28sCisJCQkJCQkJICAgICBtaW5pbXVtX3Njb3JlLAorCQkJCQkJCSAgICAgc2tpcF91bm1vZGlmaWVkKTsKKwkJCXRoaXNfc3JjLm5hbWVfc2NvcmUgPSBiYXNlbmFtZV9zYW1lKG9uZSwgdHdvKTsKKwkJCXRoaXNfc3JjLmRzdCA9IGk7CisJCQl0aGlzX3NyYy5zcmMgPSBqOworCQkJcmVjb3JkX2lmX2JldHRlcihtLCAmdGhpc19zcmMpOworCQkJLyoKKwkJCSAqIE9uY2Ugd2UgcnVuIGVzdGltYXRlX3NpbWlsYXJpdHksCisJCQkgKiBXZSBkbyBub3QgbmVlZCB0aGUgdGV4dCBhbnltb3JlLgorCQkJICovCisJCQlkaWZmX2ZyZWVfZmlsZXNwZWNfYmxvYihvbmUpOworCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2IodHdvKTsKKwkJfQorCQlkc3RfY250Kys7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICh1aW50NjRfdCkoaSsxKSoodWludDY0X3QpcmVuYW1lX3NyY19ucik7CisJfQorCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKworCS8qIGNvc3QgbWF0cml4IHNvcnRlZCBieSBtb3N0IHRvIGxlYXN0IHNpbWlsYXIgcGFpciAqLworCVNUQUJMRV9RU09SVChteCwgZHN0X2NudCAqIE5VTV9DQU5ESURBVEVfUEVSX0RTVCwgc2NvcmVfY29tcGFyZSk7CisKKwlyZW5hbWVfY291bnQgKz0gZmluZF9yZW5hbWVzKG14LCBkc3RfY250LCBtaW5pbXVtX3Njb3JlLCAwKTsKKwlpZiAoZGV0ZWN0X3JlbmFtZSA9PSBESUZGX0RFVEVDVF9DT1BZKQorCQlyZW5hbWVfY291bnQgKz0gZmluZF9yZW5hbWVzKG14LCBkc3RfY250LCBtaW5pbXVtX3Njb3JlLCAxKTsKKwlmcmVlKG14KTsKKworIGNsZWFudXA6CisJLyogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBmb3VuZCBzb21lIHJlbmFtZXMgYW5kIGNvcGllcyBhbmQgdGhleQorCSAqIGFyZSByZWNvcmRlZCBpbiByZW5hbWVfZHN0LiAgVGhlIG9yaWdpbmFsIGxpc3QgaXMgc3RpbGwgaW4gKnEuCisJICovCisJRElGRl9RVUVVRV9DTEVBUigmb3V0cSk7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXJfdG9fZnJlZSA9IE5VTEw7CisKKwkJaWYgKERJRkZfUEFJUl9VTk1FUkdFRChwKSkgeworCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJfQorCQllbHNlIGlmICghRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkgJiYgRElGRl9GSUxFX1ZBTElEKHAtPnR3bykpIHsKKwkJCS8qCisJCQkgKiBDcmVhdGlvbgorCQkJICoKKwkJCSAqIFdlIHdvdWxkIG91dHB1dCB0aGlzIGNyZWF0ZSByZWNvcmQgaWYgaXQgaGFzCisJCQkgKiBub3QgYmVlbiB0dXJuZWQgaW50byBhIHJlbmFtZS9jb3B5IGFscmVhZHkuCisJCQkgKi8KKwkJCXN0cnVjdCBkaWZmX3JlbmFtZV9kc3QgKmRzdCA9IGxvY2F0ZV9yZW5hbWVfZHN0KHAtPnR3byk7CisJCQlpZiAoZHN0ICYmIGRzdC0+cGFpcikgeworCQkJCWRpZmZfcSgmb3V0cSwgZHN0LT5wYWlyKTsKKwkJCQlwYWlyX3RvX2ZyZWUgPSBwOworCQkJfQorCQkJZWxzZQorCQkJCS8qIG5vIG1hdGNoaW5nIHJlbmFtZS9jb3B5IHNvdXJjZSwgc28KKwkJCQkgKiByZWNvcmQgdGhpcyBhcyBhIGNyZWF0aW9uLgorCQkJCSAqLworCQkJCWRpZmZfcSgmb3V0cSwgcCk7CisJCX0KKwkJZWxzZSBpZiAoRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkgJiYgIURJRkZfRklMRV9WQUxJRChwLT50d28pKSB7CisJCQkvKgorCQkJICogRGVsZXRpb24KKwkJCSAqCisJCQkgKiBXZSB3b3VsZCBvdXRwdXQgdGhpcyBkZWxldGUgcmVjb3JkIGlmOgorCQkJICoKKwkJCSAqICgxKSB0aGlzIGlzIGEgYnJva2VuIGRlbGV0ZSBhbmQgdGhlIGNvdW50ZXJwYXJ0CisJCQkgKiAgICAgYnJva2VuIGNyZWF0ZSByZW1haW5zIGluIHRoZSBvdXRwdXQ7IG9yCisJCQkgKiAoMikgdGhpcyBpcyBub3QgYSBicm9rZW4gZGVsZXRlLCBhbmQgcmVuYW1lX2RzdAorCQkJICogICAgIGRvZXMgbm90IGhhdmUgYSByZW5hbWUvY29weSB0byBtb3ZlIHAtPm9uZS0+cGF0aAorCQkJICogICAgIG91dCBvZiBleGlzdGVuY2UuCisJCQkgKgorCQkJICogT3RoZXJ3aXNlLCB0aGUgY291bnRlcnBhcnQgYnJva2VuIGNyZWF0ZQorCQkJICogaGFzIGJlZW4gdHVybmVkIGludG8gYSByZW5hbWUtZWRpdDsgb3IKKwkJCSAqIGRlbGV0ZSBkaWQgbm90IGhhdmUgYSBtYXRjaGluZyBjcmVhdGUgdG8KKwkJCSAqIGJlZ2luIHdpdGguCisJCQkgKi8KKwkJCWlmIChESUZGX1BBSVJfQlJPS0VOKHApKSB7CisJCQkJLyogYnJva2VuIGRlbGV0ZSAqLworCQkJCXN0cnVjdCBkaWZmX3JlbmFtZV9kc3QgKmRzdCA9IGxvY2F0ZV9yZW5hbWVfZHN0KHAtPm9uZSk7CisJCQkJaWYgKGRzdCAmJiBkc3QtPnBhaXIpCisJCQkJCS8qIGNvdW50ZXJwYXJ0IGlzIG5vdyByZW5hbWUvY29weSAqLworCQkJCQlwYWlyX3RvX2ZyZWUgPSBwOworCQkJfQorCQkJZWxzZSB7CisJCQkJaWYgKHAtPm9uZS0+cmVuYW1lX3VzZWQpCisJCQkJCS8qIHRoaXMgcGF0aCByZW1haW5zICovCisJCQkJCXBhaXJfdG9fZnJlZSA9IHA7CisJCQl9CisKKwkJCWlmIChwYWlyX3RvX2ZyZWUpCisJCQkJOworCQkJZWxzZQorCQkJCWRpZmZfcSgmb3V0cSwgcCk7CisJCX0KKwkJZWxzZSBpZiAoIWRpZmZfdW5tb2RpZmllZF9wYWlyKHApKQorCQkJLyogYWxsIHRoZSB1c3VhbCBvbmVzIG5lZWQgdG8gYmUga2VwdCAqLworCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJZWxzZQorCQkJLyogbm8gbmVlZCB0byBrZWVwIHVubW9kaWZpZWQgcGFpcnMgKi8KKwkJCXBhaXJfdG9fZnJlZSA9IHA7CisKKwkJaWYgKHBhaXJfdG9fZnJlZSkKKwkJCWRpZmZfZnJlZV9maWxlcGFpcihwYWlyX3RvX2ZyZWUpOworCX0KKwlkaWZmX2RlYnVnX3F1ZXVlKCJkb25lIGNvcHlpbmcgb3JpZ2luYWwiLCAmb3V0cSk7CisKKwlmcmVlKHEtPnF1ZXVlKTsKKwkqcSA9IG91dHE7CisJZGlmZl9kZWJ1Z19xdWV1ZSgiZG9uZSBjb2xsYXBzaW5nIiwgcSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVuYW1lX2RzdF9ucjsgaSsrKQorCQlmcmVlX2ZpbGVzcGVjKHJlbmFtZV9kc3RbaV0udHdvKTsKKworCUZSRUVfQU5EX05VTEwocmVuYW1lX2RzdCk7CisJcmVuYW1lX2RzdF9uciA9IHJlbmFtZV9kc3RfYWxsb2MgPSAwOworCUZSRUVfQU5EX05VTEwocmVuYW1lX3NyYyk7CisJcmVuYW1lX3NyY19uciA9IHJlbmFtZV9zcmNfYWxsb2MgPSAwOworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RpZmZjb3JlLmggYi9kaWZmY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYTYzYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kaWZmY29yZS5oCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNpZm5kZWYgRElGRkNPUkVfSAorI2RlZmluZSBESUZGQ09SRV9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdHJ1Y3QgZGlmZl9vcHRpb25zOworc3RydWN0IHJlcG9zaXRvcnk7CitzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyOworCisvKiBUaGlzIGhlYWRlciBmaWxlIGlzIGludGVybmFsIGJldHdlZW4gZGlmZi5jIGFuZCBpdHMgZGlmZiB0cmFuc2Zvcm1lcnMKKyAqIChlLmcuIGRpZmZjb3JlLXJlbmFtZSwgZGlmZmNvcmUtcGlja2F4ZSkuICBOZXZlciBpbmNsdWRlIHRoaXMgaGVhZGVyCisgKiBpbiBhbnl0aGluZyBlbHNlLgorICovCisKKy8qIFdlIGludGVybmFsbHkgdXNlIHVuc2lnbmVkIHNob3J0IGFzIHRoZSBzY29yZSB2YWx1ZSwKKyAqIGFuZCByZWx5IG9uIGFuIGludCBjYXBhYmxlIHRvIGhvbGQgMzItYml0cy4gIC1CIGNhbiB0YWtlCisgKiAtQm1lcmdlX3Njb3JlL2JyZWFrX3Njb3JlIGZvcm1hdCBhbmQgdGhlIHR3byBzY29yZXMgYXJlCisgKiBwYXNzZWQgYXJvdW5kIGluIG9uZSBpbnQgKGhpZ2ggMTYtYml0IGZvciBtZXJnZSBhbmQgbG93IDE2LWJpdAorICogZm9yIGJyZWFrKS4KKyAqLworI2RlZmluZSBNQVhfU0NPUkUgNjAwMDAuMAorI2RlZmluZSBERUZBVUxUX1JFTkFNRV9TQ09SRSAzMDAwMCAvKiByZW5hbWUvY29weSBzaW1pbGFyaXR5IG1pbmltdW0gKDUwJSkgKi8KKyNkZWZpbmUgREVGQVVMVF9CUkVBS19TQ09SRSAgMzAwMDAgLyogbWluaW11bSBmb3IgYnJlYWsgdG8gaGFwcGVuICg1MCUpICovCisjZGVmaW5lIERFRkFVTFRfTUVSR0VfU0NPUkUgIDM2MDAwIC8qIG1heGltdW0gZm9yIGJyZWFrLW1lcmdlIHRvIGhhcHBlbiAoNjAlKSAqLworCisjZGVmaW5lIE1JTklNVU1fQlJFQUtfU0laRSAgICAgNDAwIC8qIGRvIG5vdCBicmVhayBhIGZpbGUgc21hbGxlciB0aGFuIHRoaXMgKi8KKworLyoqCisgKiB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gZm9yIGEgc2luZ2xlIGZpbGUgKGJsb2IpLiAgSXQgcmVjb3JkcyB0aGUgYmxvYgorICogb2JqZWN0IG5hbWUgKGlmIGtub3duIC0tIGZvciBhIHdvcmsgdHJlZSBmaWxlIGl0IHR5cGljYWxseSBpcyBhIE5VTCBTSEEtMSksCisgKiBmaWxlbW9kZSBhbmQgcGF0aG5hbWUuICBUaGlzIGlzIHdoYXQgdGhlIGBkaWZmX2FkZHJlbW92ZSgpYCwgYGRpZmZfY2hhbmdlKClgCisgKiBhbmQgYGRpZmZfdW5tZXJnZSgpYCBzeW50aGVzaXplIGFuZCBmZWVkIGBkaWZmX3F1ZXVlKClgIGZ1bmN0aW9uIHdpdGguCisgKi8KK3N0cnVjdCBkaWZmX2ZpbGVzcGVjIHsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljaGFyICpwYXRoOworCXZvaWQgKmRhdGE7CisJdm9pZCAqY250X2RhdGE7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBjb3VudDsgICAgICAgICAgICAgICAvKiBSZWZlcmVuY2UgY291bnQgKi8KKwlpbnQgcmVuYW1lX3VzZWQ7ICAgICAgICAgLyogQ291bnQgb2YgcmVuYW1lIHVzZXJzICovCisJdW5zaWduZWQgc2hvcnQgbW9kZTsJIC8qIGZpbGUgbW9kZSAqLworCXVuc2lnbmVkIG9pZF92YWxpZCA6IDE7ICAvKiBpZiB0cnVlLCB1c2Ugb2lkIGFuZCB0cnVzdCBtb2RlOworCQkJCSAgKiBpZiBmYWxzZSwgdXNlIHRoZSBuYW1lIGFuZCByZWFkIGZyb20KKwkJCQkgICogdGhlIGZpbGVzeXN0ZW0uCisJCQkJICAqLworI2RlZmluZSBESUZGX0ZJTEVfVkFMSUQoc3BlYykgKCgoc3BlYyktPm1vZGUpICE9IDApCisJdW5zaWduZWQgc2hvdWxkX2ZyZWUgOiAxOyAvKiBkYXRhIHNob3VsZCBiZSBmcmVlKCknZWQgKi8KKwl1bnNpZ25lZCBzaG91bGRfbXVubWFwIDogMTsgLyogZGF0YSBzaG91bGQgYmUgbXVubWFwKCknZWQgKi8KKwl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUgOiAyOyAgLyogRm9yIHN1Ym1vZHVsZXM6IGl0cyB3b3JrIHRyZWUgaXMgZGlydHkgKi8KKyNkZWZpbmUgRElSVFlfU1VCTU9EVUxFX1VOVFJBQ0tFRCAxCisjZGVmaW5lIERJUlRZX1NVQk1PRFVMRV9NT0RJRklFRCAgMgorCXVuc2lnbmVkIGlzX3N0ZGluIDogMTsKKwl1bnNpZ25lZCBoYXNfbW9yZV9lbnRyaWVzIDogMTsgLyogb25seSBhcHBlYXIgaW4gY29tYmluZWQgZGlmZiAqLworCS8qIGRhdGEgc2hvdWxkIGJlIGNvbnNpZGVyZWQgImJpbmFyeSI7IC0xIG1lYW5zICJkb24ndCBrbm93IHlldCIgKi8KKwlzaWduZWQgaW50IGlzX2JpbmFyeSA6IDI7CisJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJpdmVyOworfTsKKworc3RydWN0IGRpZmZfZmlsZXNwZWMgKmFsbG9jX2ZpbGVzcGVjKGNvbnN0IGNoYXIgKik7Cit2b2lkIGZyZWVfZmlsZXNwZWMoc3RydWN0IGRpZmZfZmlsZXNwZWMgKik7Cit2b2lkIGZpbGxfZmlsZXNwZWMoc3RydWN0IGRpZmZfZmlsZXNwZWMgKiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqLAorCQkgICBpbnQsIHVuc2lnbmVkIHNob3J0KTsKKworLyoKKyAqIFByZWZldGNoIHRoZSBlbnRyaWVzIGluIGRpZmZfcXVldWVkX2RpZmYuIFRoZSBwYXJhbWV0ZXIgaXMgYSBwb2ludGVyIHRvIGEKKyAqIHN0cnVjdCByZXBvc2l0b3J5LgorICovCit2b2lkIGRpZmZfcXVldWVkX2RpZmZfcHJlZmV0Y2godm9pZCAqcmVwb3NpdG9yeSk7CisKK3N0cnVjdCBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjX29wdGlvbnMgeworCXVuc2lnbmVkIGNoZWNrX3NpemVfb25seSA6IDE7CisJdW5zaWduZWQgY2hlY2tfYmluYXJ5IDogMTsKKworCS8qCisJICogSWYgYW4gb2JqZWN0IGlzIG1pc3NpbmcsIGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMoKSB3aWxsIGludm9rZSB0aGlzCisJICogY2FsbGJhY2sgYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmVhZCB0aGF0IG9iamVjdCBhZ2Fpbi4KKwkgKi8KKwl2b2lkICgqbWlzc2luZ19vYmplY3RfY2IpKHZvaWQgKik7CisJdm9pZCAqbWlzc2luZ19vYmplY3RfZGF0YTsKK307CitpbnQgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqLAorCQkJICAgY29uc3Qgc3RydWN0IGRpZmZfcG9wdWxhdGVfZmlsZXNwZWNfb3B0aW9ucyAqKTsKK3ZvaWQgZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEoc3RydWN0IGRpZmZfZmlsZXNwZWMgKik7Cit2b2lkIGRpZmZfZnJlZV9maWxlc3BlY19ibG9iKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICopOworaW50IGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KHN0cnVjdCByZXBvc2l0b3J5ICosIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICopOworCisvKioKKyAqIFRoaXMgcmVjb3JkcyBhIHBhaXIgb2YgYHN0cnVjdCBkaWZmX2ZpbGVzcGVjYDsgdGhlIGZpbGVzcGVjIGZvciBhIGZpbGUgaW4KKyAqIHRoZSAib2xkIiBzZXQgKGkuZS4gcHJlaW1hZ2UpIGlzIGNhbGxlZCBgb25lYCwgYW5kIHRoZSBmaWxlc3BlYyBmb3IgYSBmaWxlCisgKiBpbiB0aGUgIm5ldyIgc2V0IChpLmUuIHBvc3RpbWFnZSkgaXMgY2FsbGVkIGB0d29gLiAgQSBjaGFuZ2UgdGhhdCByZXByZXNlbnRzCisgKiBmaWxlIGNyZWF0aW9uIGhhcyBOVUxMIGluIGBvbmVgLCBhbmQgZmlsZSBkZWxldGlvbiBoYXMgTlVMTCBpbiBgdHdvYC4KKyAqCisgKiBBIGBmaWxlcGFpcmAgc3RhcnRzIHBvaW50aW5nIGF0IGBvbmVgIGFuZCBgdHdvYCB0aGF0IGFyZSBmcm9tIHRoZSBzYW1lCisgKiBmaWxlbmFtZSwgYnV0IGBkaWZmY29yZV9zdGQoKWAgY2FuIGJyZWFrIHBhaXJzIGFuZCBtYXRjaCBjb21wb25lbnQgZmlsZXNwZWNzCisgKiB3aXRoIG90aGVyIGZpbGVzcGVjcyBmcm9tIGEgZGlmZmVyZW50IGZpbGVwYWlyIHRvIGZvcm0gbmV3IGZpbGVwYWlyLiBUaGlzIGlzCisgKiBjYWxsZWQgJ3JlbmFtZSBkZXRlY3Rpb24nLgorICovCitzdHJ1Y3QgZGlmZl9maWxlcGFpciB7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZTsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvOworCXVuc2lnbmVkIHNob3J0IGludCBzY29yZTsKKwljaGFyIHN0YXR1czsgLyogTSBDIFIgQSBEIFUgZXRjLiAoc2VlIERvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0IG9yIERJRkZfU1RBVFVTXyogaW4gZGlmZi5oKSAqLworCXVuc2lnbmVkIGJyb2tlbl9wYWlyIDogMTsKKwl1bnNpZ25lZCByZW5hbWVkX3BhaXIgOiAxOworCXVuc2lnbmVkIGlzX3VubWVyZ2VkIDogMTsKKwl1bnNpZ25lZCBkb25lX3NraXBfc3RhdF91bm1hdGNoIDogMTsKKwl1bnNpZ25lZCBza2lwX3N0YXRfdW5tYXRjaF9yZXN1bHQgOiAxOworfTsKKworI2RlZmluZSBESUZGX1BBSVJfVU5NRVJHRUQocCkgKChwKS0+aXNfdW5tZXJnZWQpCisKKyNkZWZpbmUgRElGRl9QQUlSX1JFTkFNRShwKSAoKHApLT5yZW5hbWVkX3BhaXIpCisKKyNkZWZpbmUgRElGRl9QQUlSX0JST0tFTihwKSBcCisJKCAoIURJRkZfRklMRV9WQUxJRCgocCktPm9uZSkgIT0gIURJRkZfRklMRV9WQUxJRCgocCktPnR3bykpICYmIFwKKwkgICgocCktPmJyb2tlbl9wYWlyICE9IDApICkKKworI2RlZmluZSBESUZGX1BBSVJfVFlQRV9DSEFOR0VEKHApIFwKKwkoKFNfSUZNVCAmIChwKS0+b25lLT5tb2RlKSAhPSAoU19JRk1UICYgKHApLT50d28tPm1vZGUpKQorCisjZGVmaW5lIERJRkZfUEFJUl9NT0RFX0NIQU5HRUQocCkgKChwKS0+b25lLT5tb2RlICE9IChwKS0+dHdvLT5tb2RlKQorCit2b2lkIGRpZmZfZnJlZV9maWxlcGFpcihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKTsKKworaW50IGRpZmZfdW5tb2RpZmllZF9wYWlyKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICopOworCisvKioKKyAqIFRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGZpbGVwYWlycy4gIE5vdGFibGUgbWVtYmVycyBhcmU6CisgKgorICogLSBgcXVldWVgOgorICogQW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gYHN0cnVjdCBkaWZmX2ZpbGVwYWlyYC4gVGhpcyBkeW5hbWljYWxseSBncm93cyBhcworICogeW91IGFkZCBmaWxlcGFpcnM7CisgKgorICogLSBgYWxsb2NgOgorICogVGhlIGFsbG9jYXRlZCBzaXplIG9mIHRoZSBgcXVldWVgIGFycmF5OworICoKKyAqIC0gYG5yYDoKKyAqIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGBxdWV1ZWAgYXJyYXkuCisgKi8KK3N0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCB7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKipxdWV1ZTsKKwlpbnQgYWxsb2M7CisJaW50IG5yOworfTsKKworI2RlZmluZSBESUZGX1FVRVVFX0NMRUFSKHEpIFwKKwlkbyB7IFwKKwkJKHEpLT5xdWV1ZSA9IE5VTEw7IFwKKwkJKHEpLT5uciA9IChxKS0+YWxsb2MgPSAwOyBcCisJfSB3aGlsZSAoMCkKKworZXh0ZXJuIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBkaWZmX3F1ZXVlZF9kaWZmOworc3RydWN0IGRpZmZfZmlsZXBhaXIgKmRpZmZfcXVldWUoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICosCisJCQkJIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICosCisJCQkJIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICopOwordm9pZCBkaWZmX3Eoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICosIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICopOworCit2b2lkIGRpZmZjb3JlX2JyZWFrKHN0cnVjdCByZXBvc2l0b3J5ICosIGludCk7Cit2b2lkIGRpZmZjb3JlX3JlbmFtZShzdHJ1Y3QgZGlmZl9vcHRpb25zICopOwordm9pZCBkaWZmY29yZV9tZXJnZV9icm9rZW4odm9pZCk7Cit2b2lkIGRpZmZjb3JlX3BpY2theGUoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKK3ZvaWQgZGlmZmNvcmVfb3JkZXIoY29uc3QgY2hhciAqb3JkZXJmaWxlKTsKKworLyogbG93LWxldmVsIGludGVyZmFjZSB0byBkaWZmY29yZV9vcmRlciAqLworc3RydWN0IG9ial9vcmRlciB7CisJdm9pZCAqb2JqOwkvKiBzZXR1cCBieSBjYWxsZXIgKi8KKworCS8qIHNldHVwL3VzZWQgYnkgb3JkZXJfb2JqZWN0cygpICovCisJaW50IG9yaWdfb3JkZXI7CisJaW50IG9yZGVyOworfTsKKwordHlwZWRlZiBjb25zdCBjaGFyICooKm9ial9wYXRoX2ZuX3QpKHZvaWQgKm9iaik7CisKK3ZvaWQgb3JkZXJfb2JqZWN0cyhjb25zdCBjaGFyICpvcmRlcmZpbGUsIG9ial9wYXRoX2ZuX3Qgb2JqX3BhdGgsCisJCSAgIHN0cnVjdCBvYmpfb3JkZXIgKm9ianMsIGludCBucik7CisKKyNkZWZpbmUgRElGRl9ERUJVRyAwCisjaWYgRElGRl9ERUJVRwordm9pZCBkaWZmX2RlYnVnX2ZpbGVzcGVjKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICosIGludCwgY29uc3QgY2hhciAqKTsKK3ZvaWQgZGlmZl9kZWJ1Z19maWxlcGFpcihjb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqLCBpbnQpOwordm9pZCBkaWZmX2RlYnVnX3F1ZXVlKGNvbnN0IGNoYXIgKiwgc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICopOworI2Vsc2UKKyNkZWZpbmUgZGlmZl9kZWJ1Z19maWxlc3BlYyhhLGIsYykgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCisjZGVmaW5lIGRpZmZfZGVidWdfZmlsZXBhaXIoYSxiKSBkbyB7IC8qIG5vdGhpbmcgKi8gfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGlmZl9kZWJ1Z19xdWV1ZShhLGIpIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQorI2VuZGlmCisKK2ludCBkaWZmY29yZV9jb3VudF9jaGFuZ2VzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNyYywKKwkJCSAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkc3QsCisJCQkgICB2b2lkICoqc3JjX2NvdW50X3AsCisJCQkgICB2b2lkICoqZHN0X2NvdW50X3AsCisJCQkgICB1bnNpZ25lZCBsb25nICpzcmNfY29waWVkLAorCQkJICAgdW5zaWduZWQgbG9uZyAqbGl0ZXJhbF9hZGRlZCk7CisKKy8qCisgKiBJZiBmaWxlc3BlYyBjb250YWlucyBhbiBPSUQgYW5kIGlmIHRoYXQgb2JqZWN0IGlzIG1pc3NpbmcgZnJvbSB0aGUgZ2l2ZW4KKyAqIHJlcG9zaXRvcnksIGFkZCB0aGF0IE9JRCB0byB0b19mZXRjaC4KKyAqLwordm9pZCBkaWZmX2FkZF9pZl9taXNzaW5nKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJIHN0cnVjdCBvaWRfYXJyYXkgKnRvX2ZldGNoLAorCQkJIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpmaWxlc3BlYyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZGlyLWl0ZXJhdG9yLmMgYi9kaXItaXRlcmF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTdlOWY5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlyLWl0ZXJhdG9yLmMKQEAgLTAsMCArMSwyMzUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgIml0ZXJhdG9yLmgiCisjaW5jbHVkZSAiZGlyLWl0ZXJhdG9yLmgiCisKK3N0cnVjdCBkaXJfaXRlcmF0b3JfbGV2ZWwgeworCURJUiAqZGlyOworCisJLyoKKwkgKiBUaGUgbGVuZ3RoIG9mIHRoZSBkaXJlY3RvcnkgcGFydCBvZiBwYXRoIGF0IHRoaXMgbGV2ZWwKKwkgKiAoaW5jbHVkaW5nIGEgdHJhaWxpbmcgJy8nKToKKwkgKi8KKwlzaXplX3QgcHJlZml4X2xlbjsKK307CisKKy8qCisgKiBUaGUgZnVsbCBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIG1hbmFnZSB0aGUgaW50ZXJuYWwgZGlyZWN0b3J5CisgKiBpdGVyYXRpb24gc3RhdGUuIEl0IGluY2x1ZGVzIG1lbWJlcnMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlCisgKiBwdWJsaWMgaW50ZXJmYWNlLgorICovCitzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2ludCB7CisJc3RydWN0IGRpcl9pdGVyYXRvciBiYXNlOworCisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGxldmVscyBjdXJyZW50bHkgb24gdGhlIHN0YWNrLiBBZnRlciB0aGUgZmlyc3QKKwkgKiBjYWxsIHRvIGRpcl9pdGVyYXRvcl9iZWdpbigpLCBpZiBpdCBzdWNjZWVkcyB0byBvcGVuIHRoZQorCSAqIGZpcnN0IGxldmVsJ3MgZGlyLCB0aGlzIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IDEuIFRoZW4sCisJICogd2hlbiBpdCBjb21lcyB0byB6ZXJvIHRoZSBpdGVyYXRpb24gaXMgZW5kZWQgYW5kIHRoaXMKKwkgKiBzdHJ1Y3QgaXMgZnJlZWQuCisJICovCisJc2l6ZV90IGxldmVsc19ucjsKKworCS8qIFRoZSBudW1iZXIgb2YgbGV2ZWxzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgKi8KKwlzaXplX3QgbGV2ZWxzX2FsbG9jOworCisJLyoKKwkgKiBBIHN0YWNrIG9mIGxldmVscy4gbGV2ZWxzWzBdIGlzIHRoZSB1cHBlcm1vc3QgZGlyZWN0b3J5CisJICogdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoaXMgaXRlcmF0aW9uLgorCSAqLworCXN0cnVjdCBkaXJfaXRlcmF0b3JfbGV2ZWwgKmxldmVsczsKKworCS8qIENvbWJpbmF0aW9uIG9mIGZsYWdzIGZvciB0aGlzIGRpci1pdGVyYXRvciAqLworCXVuc2lnbmVkIGludCBmbGFnczsKK307CisKKy8qCisgKiBQdXNoIGEgbGV2ZWwgaW4gdGhlIGl0ZXIgc3RhY2sgYW5kIGluaXRpYWxpemUgaXQgd2l0aCBpbmZvcm1hdGlvbiBmcm9tCisgKiB0aGUgZGlyZWN0b3J5IHBvaW50ZWQgYnkgaXRlci0+YmFzZS0+cGF0aC4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoaXMKKyAqIHN0cmJ1ZiBwb2ludHMgdG8gYSB2YWxpZCBkaXJlY3RvcnkgcGF0aC4gUmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgLTEKKyAqIG90aGVyd2lzZSwgc2V0dGluZyBlcnJubyBhY2NvcmRpbmdseSBhbmQgbGVhdmluZyB0aGUgc3RhY2sgdW5jaGFuZ2VkLgorICovCitzdGF0aWMgaW50IHB1c2hfbGV2ZWwoc3RydWN0IGRpcl9pdGVyYXRvcl9pbnQgKml0ZXIpCit7CisJc3RydWN0IGRpcl9pdGVyYXRvcl9sZXZlbCAqbGV2ZWw7CisKKwlBTExPQ19HUk9XKGl0ZXItPmxldmVscywgaXRlci0+bGV2ZWxzX25yICsgMSwgaXRlci0+bGV2ZWxzX2FsbG9jKTsKKwlsZXZlbCA9ICZpdGVyLT5sZXZlbHNbaXRlci0+bGV2ZWxzX25yKytdOworCisJaWYgKCFpc19kaXJfc2VwKGl0ZXItPmJhc2UucGF0aC5idWZbaXRlci0+YmFzZS5wYXRoLmxlbiAtIDFdKSkKKwkJc3RyYnVmX2FkZGNoKCZpdGVyLT5iYXNlLnBhdGgsICcvJyk7CisJbGV2ZWwtPnByZWZpeF9sZW4gPSBpdGVyLT5iYXNlLnBhdGgubGVuOworCisJbGV2ZWwtPmRpciA9IG9wZW5kaXIoaXRlci0+YmFzZS5wYXRoLmJ1Zik7CisJaWYgKCFsZXZlbC0+ZGlyKSB7CisJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOworCQlpZiAoZXJybm8gIT0gRU5PRU5UKSB7CisJCQl3YXJuaW5nX2Vycm5vKCJlcnJvciBvcGVuaW5nIGRpcmVjdG9yeSAnJXMnIiwKKwkJCQkgICAgICBpdGVyLT5iYXNlLnBhdGguYnVmKTsKKwkJfQorCQlpdGVyLT5sZXZlbHNfbnItLTsKKwkJZXJybm8gPSBzYXZlZF9lcnJubzsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogUG9wIHRoZSB0b3AgbGV2ZWwgb24gdGhlIGl0ZXIgc3RhY2ssIHJlbGVhc2luZyBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQKKyAqIHdpdGggaXQuIFJldHVybiB0aGUgbmV3IHZhbHVlIG9mIGl0ZXItPmxldmVsc19uci4KKyAqLworc3RhdGljIGludCBwb3BfbGV2ZWwoc3RydWN0IGRpcl9pdGVyYXRvcl9pbnQgKml0ZXIpCit7CisJc3RydWN0IGRpcl9pdGVyYXRvcl9sZXZlbCAqbGV2ZWwgPQorCQkmaXRlci0+bGV2ZWxzW2l0ZXItPmxldmVsc19uciAtIDFdOworCisJaWYgKGxldmVsLT5kaXIgJiYgY2xvc2VkaXIobGV2ZWwtPmRpcikpCisJCXdhcm5pbmdfZXJybm8oImVycm9yIGNsb3NpbmcgZGlyZWN0b3J5ICclcyciLAorCQkJICAgICAgaXRlci0+YmFzZS5wYXRoLmJ1Zik7CisJbGV2ZWwtPmRpciA9IE5VTEw7CisKKwlyZXR1cm4gLS1pdGVyLT5sZXZlbHNfbnI7Cit9CisKKy8qCisgKiBQb3B1bGF0ZSBpdGVyLT5iYXNlIHdpdGggdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBvbiB0aGUgbmV4dCBpdGVyYXRpb24KKyAqIGVudHJ5LCByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gZGlyZW50IGRlLiBSZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtMQorICogb3RoZXJ3aXNlLCBzZXR0aW5nIGVycm5vIGFjY29yZGluZ2x5LgorICovCitzdGF0aWMgaW50IHByZXBhcmVfbmV4dF9lbnRyeV9kYXRhKHN0cnVjdCBkaXJfaXRlcmF0b3JfaW50ICppdGVyLAorCQkJCSAgIHN0cnVjdCBkaXJlbnQgKmRlKQoreworCWludCBlcnIsIHNhdmVkX2Vycm5vOworCisJc3RyYnVmX2FkZHN0cigmaXRlci0+YmFzZS5wYXRoLCBkZS0+ZF9uYW1lKTsKKwkvKgorCSAqIFdlIGhhdmUgdG8gcmVzZXQgdGhlc2UgYmVjYXVzZSB0aGUgcGF0aCBzdHJidWYgbWlnaHQgaGF2ZQorCSAqIGJlZW4gcmVhbGxvYygpZWQgYXQgdGhlIHByZXZpb3VzIHN0cmJ1Zl9hZGRzdHIoKS4KKwkgKi8KKwlpdGVyLT5iYXNlLnJlbGF0aXZlX3BhdGggPSBpdGVyLT5iYXNlLnBhdGguYnVmICsKKwkJCQkgICBpdGVyLT5sZXZlbHNbMF0ucHJlZml4X2xlbjsKKwlpdGVyLT5iYXNlLmJhc2VuYW1lID0gaXRlci0+YmFzZS5wYXRoLmJ1ZiArCisJCQkgICAgICBpdGVyLT5sZXZlbHNbaXRlci0+bGV2ZWxzX25yIC0gMV0ucHJlZml4X2xlbjsKKworCWlmIChpdGVyLT5mbGFncyAmIERJUl9JVEVSQVRPUl9GT0xMT1dfU1lNTElOS1MpCisJCWVyciA9IHN0YXQoaXRlci0+YmFzZS5wYXRoLmJ1ZiwgJml0ZXItPmJhc2Uuc3QpOworCWVsc2UKKwkJZXJyID0gbHN0YXQoaXRlci0+YmFzZS5wYXRoLmJ1ZiwgJml0ZXItPmJhc2Uuc3QpOworCisJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwlpZiAoZXJyICYmIGVycm5vICE9IEVOT0VOVCkKKwkJd2FybmluZ19lcnJubygiZmFpbGVkIHRvIHN0YXQgJyVzJyIsIGl0ZXItPmJhc2UucGF0aC5idWYpOworCisJZXJybm8gPSBzYXZlZF9lcnJubzsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgZGlyX2l0ZXJhdG9yX2FkdmFuY2Uoc3RydWN0IGRpcl9pdGVyYXRvciAqZGlyX2l0ZXJhdG9yKQoreworCXN0cnVjdCBkaXJfaXRlcmF0b3JfaW50ICppdGVyID0KKwkJKHN0cnVjdCBkaXJfaXRlcmF0b3JfaW50ICopZGlyX2l0ZXJhdG9yOworCisJaWYgKFNfSVNESVIoaXRlci0+YmFzZS5zdC5zdF9tb2RlKSAmJiBwdXNoX2xldmVsKGl0ZXIpKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQgJiYgaXRlci0+ZmxhZ3MgJiBESVJfSVRFUkFUT1JfUEVEQU5USUMpCisJCQlnb3RvIGVycm9yX291dDsKKwkJaWYgKGl0ZXItPmxldmVsc19uciA9PSAwKQorCQkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJLyogTG9vcCB1bnRpbCB3ZSBmaW5kIGFuIGVudHJ5IHRoYXQgd2UgY2FuIGdpdmUgYmFjayB0byB0aGUgY2FsbGVyLiAqLworCXdoaWxlICgxKSB7CisJCXN0cnVjdCBkaXJlbnQgKmRlOworCQlzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2xldmVsICpsZXZlbCA9CisJCQkmaXRlci0+bGV2ZWxzW2l0ZXItPmxldmVsc19uciAtIDFdOworCisJCXN0cmJ1Zl9zZXRsZW4oJml0ZXItPmJhc2UucGF0aCwgbGV2ZWwtPnByZWZpeF9sZW4pOworCQllcnJubyA9IDA7CisJCWRlID0gcmVhZGRpcihsZXZlbC0+ZGlyKTsKKworCQlpZiAoIWRlKSB7CisJCQlpZiAoZXJybm8pIHsKKwkJCQl3YXJuaW5nX2Vycm5vKCJlcnJvciByZWFkaW5nIGRpcmVjdG9yeSAnJXMnIiwKKwkJCQkJICAgICAgaXRlci0+YmFzZS5wYXRoLmJ1Zik7CisJCQkJaWYgKGl0ZXItPmZsYWdzICYgRElSX0lURVJBVE9SX1BFREFOVElDKQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCX0gZWxzZSBpZiAocG9wX2xldmVsKGl0ZXIpID09IDApIHsKKwkJCQlyZXR1cm4gZGlyX2l0ZXJhdG9yX2Fib3J0KGRpcl9pdGVyYXRvcik7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGRlLT5kX25hbWUpKQorCQkJY29udGludWU7CisKKwkJaWYgKHByZXBhcmVfbmV4dF9lbnRyeV9kYXRhKGl0ZXIsIGRlKSkgeworCQkJaWYgKGVycm5vICE9IEVOT0VOVCAmJiBpdGVyLT5mbGFncyAmIERJUl9JVEVSQVRPUl9QRURBTlRJQykKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0dXJuIElURVJfT0s7CisJfQorCitlcnJvcl9vdXQ6CisJZGlyX2l0ZXJhdG9yX2Fib3J0KGRpcl9pdGVyYXRvcik7CisJcmV0dXJuIElURVJfRVJST1I7Cit9CisKK2ludCBkaXJfaXRlcmF0b3JfYWJvcnQoc3RydWN0IGRpcl9pdGVyYXRvciAqZGlyX2l0ZXJhdG9yKQoreworCXN0cnVjdCBkaXJfaXRlcmF0b3JfaW50ICppdGVyID0gKHN0cnVjdCBkaXJfaXRlcmF0b3JfaW50ICopZGlyX2l0ZXJhdG9yOworCisJZm9yICg7IGl0ZXItPmxldmVsc19ucjsgaXRlci0+bGV2ZWxzX25yLS0pIHsKKwkJc3RydWN0IGRpcl9pdGVyYXRvcl9sZXZlbCAqbGV2ZWwgPQorCQkJJml0ZXItPmxldmVsc1tpdGVyLT5sZXZlbHNfbnIgLSAxXTsKKworCQlpZiAobGV2ZWwtPmRpciAmJiBjbG9zZWRpcihsZXZlbC0+ZGlyKSkgeworCQkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCQlzdHJidWZfc2V0bGVuKCZpdGVyLT5iYXNlLnBhdGgsIGxldmVsLT5wcmVmaXhfbGVuKTsKKwkJCWVycm5vID0gc2F2ZWRfZXJybm87CisJCQl3YXJuaW5nX2Vycm5vKCJlcnJvciBjbG9zaW5nIGRpcmVjdG9yeSAnJXMnIiwKKwkJCQkgICAgICBpdGVyLT5iYXNlLnBhdGguYnVmKTsKKwkJfQorCX0KKworCWZyZWUoaXRlci0+bGV2ZWxzKTsKKwlzdHJidWZfcmVsZWFzZSgmaXRlci0+YmFzZS5wYXRoKTsKKwlmcmVlKGl0ZXIpOworCXJldHVybiBJVEVSX0RPTkU7Cit9CisKK3N0cnVjdCBkaXJfaXRlcmF0b3IgKmRpcl9pdGVyYXRvcl9iZWdpbihjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGRpcl9pdGVyYXRvcl9pbnQgKml0ZXIgPSB4Y2FsbG9jKDEsIHNpemVvZigqaXRlcikpOworCXN0cnVjdCBkaXJfaXRlcmF0b3IgKmRpcl9pdGVyYXRvciA9ICZpdGVyLT5iYXNlOworCWludCBzYXZlZF9lcnJubzsKKworCXN0cmJ1Zl9pbml0KCZpdGVyLT5iYXNlLnBhdGgsIFBBVEhfTUFYKTsKKwlzdHJidWZfYWRkc3RyKCZpdGVyLT5iYXNlLnBhdGgsIHBhdGgpOworCisJQUxMT0NfR1JPVyhpdGVyLT5sZXZlbHMsIDEwLCBpdGVyLT5sZXZlbHNfYWxsb2MpOworCWl0ZXItPmxldmVsc19uciA9IDA7CisJaXRlci0+ZmxhZ3MgPSBmbGFnczsKKworCS8qCisJICogTm90ZTogc3RhdCBhbHJlYWR5IGNoZWNrcyBmb3IgTlVMTCBvciBlbXB0eSBzdHJpbmdzIGFuZAorCSAqIGluZXhpc3RlbnQgcGF0aHMuCisJICovCisJaWYgKHN0YXQoaXRlci0+YmFzZS5wYXRoLmJ1ZiwgJml0ZXItPmJhc2Uuc3QpIDwgMCkgeworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwlpZiAoIVNfSVNESVIoaXRlci0+YmFzZS5zdC5zdF9tb2RlKSkgeworCQlzYXZlZF9lcnJubyA9IEVOT1RESVI7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCXJldHVybiBkaXJfaXRlcmF0b3I7CisKK2Vycm9yX291dDoKKwlkaXJfaXRlcmF0b3JfYWJvcnQoZGlyX2l0ZXJhdG9yKTsKKwllcnJubyA9IHNhdmVkX2Vycm5vOworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZGlyLWl0ZXJhdG9yLmggYi9kaXItaXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODIyOTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlyLWl0ZXJhdG9yLmgKQEAgLTAsMCArMSwxMjcgQEAKKyNpZm5kZWYgRElSX0lURVJBVE9SX0gKKyNkZWZpbmUgRElSX0lURVJBVE9SX0gKKworI2luY2x1ZGUgInN0cmJ1Zi5oIgorCisvKgorICogSXRlcmF0ZSBvdmVyIGEgZGlyZWN0b3J5IHRyZWUuCisgKgorICogSXRlcmF0ZSBvdmVyIGEgZGlyZWN0b3J5IHRyZWUsIHJlY3Vyc2l2ZWx5LCBpbmNsdWRpbmcgcGF0aHMgb2YgYWxsCisgKiB0eXBlcyBhbmQgaGlkZGVuIHBhdGhzLiBTa2lwICIuIiBhbmQgIi4uIiBlbnRyaWVzIGFuZCBkb24ndCBmb2xsb3cKKyAqIHN5bWxpbmtzIGV4Y2VwdCBmb3IgdGhlIG9yaWdpbmFsIHBhdGguIE5vdGUgdGhhdCB0aGUgb3JpZ2luYWwgcGF0aAorICogaXMgbm90IGluY2x1ZGVkIGluIHRoZSBpdGVyYXRpb24uCisgKgorICogRXZlcnkgdGltZSBkaXJfaXRlcmF0b3JfYWR2YW5jZSgpIGlzIGNhbGxlZCwgdXBkYXRlIHRoZSBtZW1iZXJzIG9mCisgKiB0aGUgZGlyX2l0ZXJhdG9yIHN0cnVjdHVyZSB0byByZWZsZWN0IHRoZSBuZXh0IHBhdGggaW4gdGhlCisgKiBpdGVyYXRpb24uIFRoZSBvcmRlciB0aGF0IHBhdGhzIGFyZSBpdGVyYXRlZCBvdmVyIHdpdGhpbiBhCisgKiBkaXJlY3RvcnkgaXMgdW5kZWZpbmVkLCBkaXJlY3RvcnkgcGF0aHMgYXJlIGFsd2F5cyBnaXZlbiBiZWZvcmUKKyAqIHRoZWlyIGNvbnRlbnRzLgorICoKKyAqIEEgdHlwaWNhbCBpdGVyYXRpb24gbG9va3MgbGlrZSB0aGlzOgorICoKKyAqICAgICBpbnQgb2s7CisgKiAgICAgdW5zaWduZWQgaW50IGZsYWdzID0gRElSX0lURVJBVE9SX1BFREFOVElDOworICogICAgIHN0cnVjdCBkaXJfaXRlcmF0b3IgKml0ZXIgPSBkaXJfaXRlcmF0b3JfYmVnaW4ocGF0aCwgZmxhZ3MpOworICoKKyAqICAgICBpZiAoIWl0ZXIpCisgKiAgICAgICAgICAgICBnb3RvIGVycm9yX2hhbmRsZXI7CisgKgorICogICAgIHdoaWxlICgob2sgPSBkaXJfaXRlcmF0b3JfYWR2YW5jZShpdGVyKSkgPT0gSVRFUl9PSykgeworICogICAgICAgICAgICAgaWYgKHdhbnRfdG9fc3RvcF9pdGVyYXRpb24oKSkgeworICogICAgICAgICAgICAgICAgICAgICBvayA9IGRpcl9pdGVyYXRvcl9hYm9ydChpdGVyKTsKKyAqICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgKiAgICAgICAgICAgICB9CisgKgorICogICAgICAgICAgICAgLy8gQWNjZXNzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHBhdGg6CisgKiAgICAgICAgICAgICBpZiAoU19JU0RJUihpdGVyLT5zdC5zdF9tb2RlKSkKKyAqICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyBpcyBhIGRpcmVjdG9yeVxuIiwgaXRlci0+cmVsYXRpdmVfcGF0aCk7CisgKiAgICAgfQorICoKKyAqICAgICBpZiAob2sgIT0gSVRFUl9ET05FKQorICogICAgICAgICAgICAgaGFuZGxlX2Vycm9yKCk7CisgKgorICogQ2FsbGVycyBhcmUgYWxsb3dlZCB0byBtb2RpZnkgaXRlci0+cGF0aCB3aGlsZSB0aGV5IGFyZSB3b3JraW5nLAorICogYnV0IHRoZXkgbXVzdCByZXN0b3JlIGl0IHRvIGl0cyBvcmlnaW5hbCBjb250ZW50cyBiZWZvcmUgY2FsbGluZworICogZGlyX2l0ZXJhdG9yX2FkdmFuY2UoKSBhZ2Fpbi4KKyAqLworCisvKgorICogRmxhZ3MgZm9yIGRpcl9pdGVyYXRvcl9iZWdpbjoKKyAqCisgKiAtIERJUl9JVEVSQVRPUl9QRURBTlRJQzogb3ZlcnJpZGUgZGlyLWl0ZXJhdG9yJ3MgZGVmYXVsdCBiZWhhdmlvcgorICogICBpbiBjYXNlIG9mIGFuIGVycm9yIGF0IGRpcl9pdGVyYXRvcl9hZHZhbmNlKCksIHdoaWNoIGlzIHRvIGtlZXAKKyAqICAgbG9va2luZyBmb3IgYSBuZXh0IHZhbGlkIGVudHJ5LiBXaXRoIHRoaXMgZmxhZywgcmVzb3VyY2VzIGFyZSBmcmVlZAorICogICBhbmQgSVRFUl9FUlJPUiBpcyByZXR1cm5lZCBpbW1lZGlhdGVseS4gSW4gYm90aCBjYXNlcywgYSBtZWFuaW5nZnVsCisgKiAgIHdhcm5pbmcgaXMgZW1pdHRlZC4gTm90ZTogRU5PRU5UIGVycm9ycyBhcmUgYWx3YXlzIGlnbm9yZWQgc28gdGhhdAorICogICB0aGUgQVBJIHVzZXJzIG1heSByZW1vdmUgZmlsZXMgZHVyaW5nIGl0ZXJhdGlvbi4KKyAqCisgKiAtIERJUl9JVEVSQVRPUl9GT0xMT1dfU1lNTElOS1M6IG1ha2UgZGlyLWl0ZXJhdG9yIGZvbGxvdyBzeW1saW5rcy4KKyAqICAgaS5lLiwgbGlua2VkIGRpcmVjdG9yaWVzJyBjb250ZW50cyB3aWxsIGJlIGl0ZXJhdGVkIG92ZXIgYW5kCisgKiAgIGl0ZXItPmJhc2Uuc3Qgd2lsbCBjb250YWluIGluZm9ybWF0aW9uIG9uIHRoZSByZWZlcnJlZCBmaWxlcywKKyAqICAgbm90IHRoZSBzeW1saW5rcyB0aGVtc2VsdmVzLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gQnJva2VuCisgKiAgIHN5bWxpbmtzIGFyZSBpZ25vcmVkLgorICoKKyAqIFdhcm5pbmc6IGNpcmN1bGFyIHN5bWxpbmtzIGFyZSBhbHNvIGZvbGxvd2VkIHdoZW4KKyAqIERJUl9JVEVSQVRPUl9GT0xMT1dfU1lNTElOS1MgaXMgc2V0LiBUaGUgaXRlcmF0aW9uIG1heSBlbmQgdXAgd2l0aAorICogYW4gRUxPT1AgaWYgdGhleSBoYXBwZW4gYW5kIERJUl9JVEVSQVRPUl9QRURBTlRJQyBpcyBzZXQuCisgKi8KKyNkZWZpbmUgRElSX0lURVJBVE9SX1BFREFOVElDICgxIDw8IDApCisjZGVmaW5lIERJUl9JVEVSQVRPUl9GT0xMT1dfU1lNTElOS1MgKDEgPDwgMSkKKworc3RydWN0IGRpcl9pdGVyYXRvciB7CisJLyogVGhlIGN1cnJlbnQgcGF0aDogKi8KKwlzdHJ1Y3Qgc3RyYnVmIHBhdGg7CisKKwkvKgorCSAqIFRoZSBjdXJyZW50IHBhdGggcmVsYXRpdmUgdG8gdGhlIHN0YXJ0aW5nIHBhdGguIFRoaXMgcGFydAorCSAqIG9mIHRoZSBwYXRoIGFsd2F5cyB1c2VzICIvIiBjaGFyYWN0ZXJzIHRvIHNlcGFyYXRlIHBhdGgKKwkgKiBjb21wb25lbnRzOgorCSAqLworCWNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGg7CisKKwkvKiBUaGUgY3VycmVudCBiYXNlbmFtZTogKi8KKwljb25zdCBjaGFyICpiYXNlbmFtZTsKKworCS8qCisJICogVGhlIHJlc3VsdCBvZiBjYWxsaW5nIGxzdGF0KCkgb24gcGF0aDsgb3Igc3RhdCgpLCBpZiB0aGUKKwkgKiBESVJfSVRFUkFUT1JfRk9MTE9XX1NZTUxJTktTIGZsYWcgd2FzIHNldCBhdAorCSAqIGRpcl9pdGVyYXRvcidzIGluaXRpYWxpemF0aW9uLgorCSAqLworCXN0cnVjdCBzdGF0IHN0OworfTsKKworLyoKKyAqIFN0YXJ0IGEgZGlyZWN0b3J5IGl0ZXJhdGlvbiBvdmVyIHBhdGggd2l0aCB0aGUgY29tYmluYXRpb24gb2YKKyAqIG9wdGlvbnMgc3BlY2lmaWVkIGJ5IGZsYWdzLiBPbiBzdWNjZXNzLCByZXR1cm4gYSBkaXJfaXRlcmF0b3IKKyAqIHRoYXQgaG9sZHMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBpdGVyYXRpb24uIEluIGNhc2Ugb2YKKyAqIGZhaWx1cmUsIHJldHVybiBOVUxMIGFuZCBzZXQgZXJybm8gYWNjb3JkaW5nbHkuCisgKgorICogVGhlIGl0ZXJhdGlvbiBpbmNsdWRlcyBhbGwgcGF0aHMgdW5kZXIgcGF0aCwgbm90IGluY2x1ZGluZyBwYXRoCisgKiBpdHNlbGYgYW5kIG5vdCBpbmNsdWRpbmcgIi4iIG9yICIuLiIgZW50cmllcy4KKyAqCisgKiBQYXJhbWV0ZXJzIGFyZToKKyAqICAtIHBhdGggaXMgdGhlIHN0YXJ0aW5nIGRpcmVjdG9yeS4gQW4gaW50ZXJuYWwgY29weSB3aWxsIGJlIG1hZGUuCisgKiAgLSBmbGFncyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBwb3NzaWJsZSBmbGFncyB0byBpbml0aWFsaXplIGEKKyAqICAgIGRpci1pdGVyYXRvciBvciAwIGZvciBkZWZhdWx0IGJlaGF2aW9yLgorICovCitzdHJ1Y3QgZGlyX2l0ZXJhdG9yICpkaXJfaXRlcmF0b3JfYmVnaW4oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgaW50IGZsYWdzKTsKKworLyoKKyAqIEFkdmFuY2UgdGhlIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBvciBuZXh0IGl0ZW0gYW5kIHJldHVybiBJVEVSX09LLgorICogSWYgdGhlIGl0ZXJhdGlvbiBpcyBleGhhdXN0ZWQsIGZyZWUgdGhlIGRpcl9pdGVyYXRvciBhbmQgYW55CisgKiByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGFuZCByZXR1cm4gSVRFUl9ET05FLgorICoKKyAqIEl0IGlzIGEgYnVnIHRvIHVzZSBpdGVyYXRvciBvciBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4gYWZ0ZXIgaXQKKyAqIGhhcyByZXR1cm5lZCBJVEVSX0RPTkUgb3IgSVRFUl9FUlJPUiAod2hpY2ggbWF5IGJlIHJldHVybmVkIGlmZgorICogdGhlIERJUl9JVEVSQVRPUl9QRURBTlRJQyBmbGFnIHdhcyBzZXQpLgorICovCitpbnQgZGlyX2l0ZXJhdG9yX2FkdmFuY2Uoc3RydWN0IGRpcl9pdGVyYXRvciAqaXRlcmF0b3IpOworCisvKgorICogRW5kIHRoZSBpdGVyYXRpb24gYmVmb3JlIGl0IGhhcyBiZWVuIGV4aGF1c3RlZC4gRnJlZSB0aGUKKyAqIGRpcl9pdGVyYXRvciBhbmQgYW55IGFzc29jaWF0ZWQgcmVzb3VyY2VzIGFuZCByZXR1cm4gSVRFUl9ET05FLiBPbgorICogZXJyb3IsIGZyZWUgdGhlIGRpcl9pdGVyYXRvciBhbmQgcmV0dXJuIElURVJfRVJST1IuCisgKi8KK2ludCBkaXJfaXRlcmF0b3JfYWJvcnQoc3RydWN0IGRpcl9pdGVyYXRvciAqaXRlcmF0b3IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Rpci5jIGIvZGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3ZTk1NQotLS0gL2Rldi9udWxsCisrKyBiL2Rpci5jCkBAIC0wLDAgKzEsMzU2NCBAQAorLyoKKyAqIFRoaXMgaGFuZGxlcyByZWN1cnNpdmUgZmlsZW5hbWUgZGV0ZWN0aW9uIHdpdGggZXhjbHVkZQorICogZmlsZXMsIGluZGV4IGtub3dsZWRnZSBldGMuLgorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUtMjAwNgorICoJCSBKdW5pbyBIYW1hbm8sIDIwMDUtMjAwNgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgIndpbGRtYXRjaC5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInZhcmludC5oIgorI2luY2x1ZGUgImV3YWgvZXdvay5oIgorI2luY2x1ZGUgImZzbW9uaXRvci5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS1jb25maWcuaCIKKworLyoKKyAqIFRlbGxzIHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZSBob3cgYSBmaWxlIG9yIGRpcmVjdG9yeSBzaG91bGQgYmUgdHJlYXRlZC4KKyAqIFZhbHVlcyBhcmUgb3JkZXJlZCBieSBzaWduaWZpY2FuY2UsIGUuZy4gaWYgYSBkaXJlY3RvcnkgY29udGFpbnMgYm90aAorICogZXhjbHVkZWQgYW5kIHVudHJhY2tlZCBmaWxlcywgaXQgaXMgbGlzdGVkIGFzIHVudHJhY2tlZCBiZWNhdXNlCisgKiBwYXRoX3VudHJhY2tlZCA+IHBhdGhfZXhjbHVkZWQuCisgKi8KK2VudW0gcGF0aF90cmVhdG1lbnQgeworCXBhdGhfbm9uZSA9IDAsCisJcGF0aF9yZWN1cnNlLAorCXBhdGhfZXhjbHVkZWQsCisJcGF0aF91bnRyYWNrZWQKK307CisKKy8qCisgKiBTdXBwb3J0IGRhdGEgc3RydWN0dXJlIGZvciBvdXIgb3BlbmRpci9yZWFkZGlyL2Nsb3NlZGlyIHdyYXBwZXJzCisgKi8KK3N0cnVjdCBjYWNoZWRfZGlyIHsKKwlESVIgKmZkaXI7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZDsKKwlpbnQgbnJfZmlsZXM7CisJaW50IG5yX2RpcnM7CisKKwljb25zdCBjaGFyICpkX25hbWU7CisJaW50IGRfdHlwZTsKKwljb25zdCBjaGFyICpmaWxlOworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1Y2Q7Cit9OworCitzdGF0aWMgZW51bSBwYXRoX3RyZWF0bWVudCByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwKKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqdW50cmFja2VkLAorCWludCBjaGVja19vbmx5LCBpbnQgc3RvcF9hdF9maXJzdF9maWxlLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKTsKK3N0YXRpYyBpbnQgcmVzb2x2ZV9kdHlwZShpbnQgZHR5cGUsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pOworCitpbnQgY291bnRfc2xhc2hlcyhjb25zdCBjaGFyICpzKQoreworCWludCBjbnQgPSAwOworCXdoaWxlICgqcykKKwkJaWYgKCpzKysgPT0gJy8nKQorCQkJY250Kys7CisJcmV0dXJuIGNudDsKK30KKworaW50IGZzcGF0aGNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworCXJldHVybiBpZ25vcmVfY2FzZSA/IHN0cmNhc2VjbXAoYSwgYikgOiBzdHJjbXAoYSwgYik7Cit9CisKK2ludCBmc3BhdGhuY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gaWdub3JlX2Nhc2UgPyBzdHJuY2FzZWNtcChhLCBiLCBjb3VudCkgOiBzdHJuY21wKGEsIGIsIGNvdW50KTsKK30KKworaW50IGdpdF9mbm1hdGNoKGNvbnN0IHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtLAorCQljb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpzdHJpbmcsCisJCWludCBwcmVmaXgpCit7CisJaWYgKHByZWZpeCA+IDApIHsKKwkJaWYgKHBzX3N0cm5jbXAoaXRlbSwgcGF0dGVybiwgc3RyaW5nLCBwcmVmaXgpKQorCQkJcmV0dXJuIFdNX05PTUFUQ0g7CisJCXBhdHRlcm4gKz0gcHJlZml4OworCQlzdHJpbmcgKz0gcHJlZml4OworCX0KKwlpZiAoaXRlbS0+ZmxhZ3MgJiBQQVRIU1BFQ19PTkVTVEFSKSB7CisJCWludCBwYXR0ZXJuX2xlbiA9IHN0cmxlbigrK3BhdHRlcm4pOworCQlpbnQgc3RyaW5nX2xlbiA9IHN0cmxlbihzdHJpbmcpOworCQlyZXR1cm4gc3RyaW5nX2xlbiA8IHBhdHRlcm5fbGVuIHx8CisJCQlwc19zdHJjbXAoaXRlbSwgcGF0dGVybiwKKwkJCQkgIHN0cmluZyArIHN0cmluZ19sZW4gLSBwYXR0ZXJuX2xlbik7CisJfQorCWlmIChpdGVtLT5tYWdpYyAmIFBBVEhTUEVDX0dMT0IpCisJCXJldHVybiB3aWxkbWF0Y2gocGF0dGVybiwgc3RyaW5nLAorCQkJCSBXTV9QQVRITkFNRSB8CisJCQkJIChpdGVtLT5tYWdpYyAmIFBBVEhTUEVDX0lDQVNFID8gV01fQ0FTRUZPTEQgOiAwKSk7CisJZWxzZQorCQkvKiB3aWxkbWF0Y2ggaGFzIG5vdCBsZWFybmVkIG5vIEZOTV9QQVRITkFNRSBtb2RlIHlldCAqLworCQlyZXR1cm4gd2lsZG1hdGNoKHBhdHRlcm4sIHN0cmluZywKKwkJCQkgaXRlbS0+bWFnaWMgJiBQQVRIU1BFQ19JQ0FTRSA/IFdNX0NBU0VGT0xEIDogMCk7Cit9CisKK3N0YXRpYyBpbnQgZm5tYXRjaF9pY2FzZV9tZW0oY29uc3QgY2hhciAqcGF0dGVybiwgaW50IHBhdHRlcm5sZW4sCisJCQkgICAgIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IHN0cmluZ2xlbiwKKwkJCSAgICAgaW50IGZsYWdzKQoreworCWludCBtYXRjaF9zdGF0dXM7CisJc3RydWN0IHN0cmJ1ZiBwYXRfYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzdHJfYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqdXNlX3BhdCA9IHBhdHRlcm47CisJY29uc3QgY2hhciAqdXNlX3N0ciA9IHN0cmluZzsKKworCWlmIChwYXR0ZXJuW3BhdHRlcm5sZW5dKSB7CisJCXN0cmJ1Zl9hZGQoJnBhdF9idWYsIHBhdHRlcm4sIHBhdHRlcm5sZW4pOworCQl1c2VfcGF0ID0gcGF0X2J1Zi5idWY7CisJfQorCWlmIChzdHJpbmdbc3RyaW5nbGVuXSkgeworCQlzdHJidWZfYWRkKCZzdHJfYnVmLCBzdHJpbmcsIHN0cmluZ2xlbik7CisJCXVzZV9zdHIgPSBzdHJfYnVmLmJ1ZjsKKwl9CisKKwlpZiAoaWdub3JlX2Nhc2UpCisJCWZsYWdzIHw9IFdNX0NBU0VGT0xEOworCW1hdGNoX3N0YXR1cyA9IHdpbGRtYXRjaCh1c2VfcGF0LCB1c2Vfc3RyLCBmbGFncyk7CisKKwlzdHJidWZfcmVsZWFzZSgmcGF0X2J1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnN0cl9idWYpOworCisJcmV0dXJuIG1hdGNoX3N0YXR1czsKK30KKworc3RhdGljIHNpemVfdCBjb21tb25fcHJlZml4X2xlbihjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCWludCBuOworCXNpemVfdCBtYXggPSAwOworCisJLyoKKwkgKiAiOihpY2FzZSlwYXRoIiBpcyB0cmVhdGVkIGFzIGEgcGF0aHNwZWMgZnVsbCBvZgorCSAqIHdpbGRjYXJkLiBJbiBvdGhlciB3b3Jkcywgb25seSBwcmVmaXggaXMgY29uc2lkZXJlZCBjb21tb24KKwkgKiBwcmVmaXguIElmIHRoZSBwYXRoc3BlYyBpcyBhYmMvZm9vIGFiYy9iYXIsIHJ1bm5pbmcgaW4KKwkgKiBzdWJkaXIgeHl6LCB0aGUgY29tbW9uIHByZWZpeCBpcyBzdGlsbCB4eXosIG5vdCB4eXovYWJjIGFzCisJICogaW4gbm9uLTooaWNhc2UpLgorCSAqLworCUdVQVJEX1BBVEhTUEVDKHBhdGhzcGVjLAorCQkgICAgICAgUEFUSFNQRUNfRlJPTVRPUCB8CisJCSAgICAgICBQQVRIU1BFQ19NQVhERVBUSCB8CisJCSAgICAgICBQQVRIU1BFQ19MSVRFUkFMIHwKKwkJICAgICAgIFBBVEhTUEVDX0dMT0IgfAorCQkgICAgICAgUEFUSFNQRUNfSUNBU0UgfAorCQkgICAgICAgUEFUSFNQRUNfRVhDTFVERSB8CisJCSAgICAgICBQQVRIU1BFQ19BVFRSKTsKKworCWZvciAobiA9IDA7IG4gPCBwYXRoc3BlYy0+bnI7IG4rKykgeworCQlzaXplX3QgaSA9IDAsIGxlbiA9IDAsIGl0ZW1fbGVuOworCQlpZiAocGF0aHNwZWMtPml0ZW1zW25dLm1hZ2ljICYgUEFUSFNQRUNfRVhDTFVERSkKKwkJCWNvbnRpbnVlOworCQlpZiAocGF0aHNwZWMtPml0ZW1zW25dLm1hZ2ljICYgUEFUSFNQRUNfSUNBU0UpCisJCQlpdGVtX2xlbiA9IHBhdGhzcGVjLT5pdGVtc1tuXS5wcmVmaXg7CisJCWVsc2UKKwkJCWl0ZW1fbGVuID0gcGF0aHNwZWMtPml0ZW1zW25dLm5vd2lsZGNhcmRfbGVuOworCQl3aGlsZSAoaSA8IGl0ZW1fbGVuICYmIChuID09IDAgfHwgaSA8IG1heCkpIHsKKwkJCWNoYXIgYyA9IHBhdGhzcGVjLT5pdGVtc1tuXS5tYXRjaFtpXTsKKwkJCWlmIChjICE9IHBhdGhzcGVjLT5pdGVtc1swXS5tYXRjaFtpXSkKKwkJCQlicmVhazsKKwkJCWlmIChjID09ICcvJykKKwkJCQlsZW4gPSBpICsgMTsKKwkJCWkrKzsKKwkJfQorCQlpZiAobiA9PSAwIHx8IGxlbiA8IG1heCkgeworCQkJbWF4ID0gbGVuOworCQkJaWYgKCFtYXgpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIG1heDsKK30KKworLyoKKyAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSBsb25nZXN0IGxlYWRpbmcgcGF0aCBjb21tb24gYW1vbmcgYWxsCisgKiBwYXRoc3BlY3MuCisgKi8KK2NoYXIgKmNvbW1vbl9wcmVmaXgoY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwl1bnNpZ25lZCBsb25nIGxlbiA9IGNvbW1vbl9wcmVmaXhfbGVuKHBhdGhzcGVjKTsKKworCXJldHVybiBsZW4gPyB4bWVtZHVweihwYXRoc3BlYy0+aXRlbXNbMF0ubWF0Y2gsIGxlbikgOiBOVUxMOworfQorCitpbnQgZmlsbF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJICAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCSAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJY29uc3QgY2hhciAqcHJlZml4OworCXNpemVfdCBwcmVmaXhfbGVuOworCisJLyoKKwkgKiBDYWxjdWxhdGUgY29tbW9uIHByZWZpeCBmb3IgdGhlIHBhdGhzcGVjLCBhbmQKKwkgKiB1c2UgdGhhdCB0byBvcHRpbWl6ZSB0aGUgZGlyZWN0b3J5IHdhbGsKKwkgKi8KKwlwcmVmaXhfbGVuID0gY29tbW9uX3ByZWZpeF9sZW4ocGF0aHNwZWMpOworCXByZWZpeCA9IHByZWZpeF9sZW4gPyBwYXRoc3BlYy0+aXRlbXNbMF0ubWF0Y2ggOiAiIjsKKworCS8qIFJlYWQgdGhlIGRpcmVjdG9yeSBhbmQgcHJ1bmUgaXQgKi8KKwlyZWFkX2RpcmVjdG9yeShkaXIsIGlzdGF0ZSwgcHJlZml4LCBwcmVmaXhfbGVuLCBwYXRoc3BlYyk7CisKKwlyZXR1cm4gcHJlZml4X2xlbjsKK30KKworaW50IHdpdGhpbl9kZXB0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCWludCBkZXB0aCwgaW50IG1heF9kZXB0aCkKK3sKKwljb25zdCBjaGFyICpjcCA9IG5hbWUsICpjcGUgPSBuYW1lICsgbmFtZWxlbjsKKworCXdoaWxlIChjcCA8IGNwZSkgeworCQlpZiAoKmNwKysgIT0gJy8nKQorCQkJY29udGludWU7CisJCWRlcHRoKys7CisJCWlmIChkZXB0aCA+IG1heF9kZXB0aCkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBibG9iIHdpdGggdGhlIGdpdmVuIE9JRCBpbnRvIGEgYnVmZmVyLgorICogQXBwZW5kIGEgdHJhaWxpbmcgTEYgdG8gdGhlIGVuZCBpZiB0aGUgbGFzdCBsaW5lIGRvZXNuJ3QgaGF2ZSBvbmUuCisgKgorICogUmV0dXJuczoKKyAqICAgIC0xIHdoZW4gdGhlIE9JRCBpcyBpbnZhbGlkIG9yIHVua25vd24gb3IgZG9lcyBub3QgcmVmZXIgdG8gYSBibG9iLgorICogICAgIDAgd2hlbiB0aGUgYmxvYiBpcyBlbXB0eS4KKyAqICAgICAxIGFsb25nIHdpdGggeyBkYXRhLCBzaXplIH0gb2YgdGhlIChwb3NzaWJseSBhdWdtZW50ZWQpIGJ1ZmZlcgorICogICAgICAgd2hlbiBzdWNjZXNzZnVsLgorICoKKyAqIE9wdGlvbmFsbHkgdXBkYXRlcyB0aGUgZ2l2ZW4gb2lkX3N0YXQgd2l0aCB0aGUgZ2l2ZW4gT0lEICh3aGVuIHZhbGlkKS4KKyAqLworc3RhdGljIGludCBkb19yZWFkX2Jsb2IoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3Qgb2lkX3N0YXQgKm9pZF9zdGF0LAorCQkJc2l6ZV90ICpzaXplX291dCwgY2hhciAqKmRhdGFfb3V0KQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHN6OworCWNoYXIgKmRhdGE7CisKKwkqc2l6ZV9vdXQgPSAwOworCSpkYXRhX291dCA9IE5VTEw7CisKKwlkYXRhID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCAmc3opOworCWlmICghZGF0YSB8fCB0eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUoZGF0YSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAob2lkX3N0YXQpIHsKKwkJbWVtc2V0KCZvaWRfc3RhdC0+c3RhdCwgMCwgc2l6ZW9mKG9pZF9zdGF0LT5zdGF0KSk7CisJCW9pZGNweSgmb2lkX3N0YXQtPm9pZCwgb2lkKTsKKwl9CisKKwlpZiAoc3ogPT0gMCkgeworCQlmcmVlKGRhdGEpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZGF0YVtzeiAtIDFdICE9ICdcbicpIHsKKwkJZGF0YSA9IHhyZWFsbG9jKGRhdGEsIHN0X2FkZChzeiwgMSkpOworCQlkYXRhW3N6KytdID0gJ1xuJzsKKwl9CisKKwkqc2l6ZV9vdXQgPSB4c2l6ZV90KHN6KTsKKwkqZGF0YV9vdXQgPSBkYXRhOworCisJcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgRE9fTUFUQ0hfRVhDTFVERSAgICgxPDwwKQorI2RlZmluZSBET19NQVRDSF9ESVJFQ1RPUlkgKDE8PDEpCisjZGVmaW5lIERPX01BVENIX0xFQURJTkdfUEFUSFNQRUMgKDE8PDIpCisKKy8qCisgKiBEb2VzIHRoZSBnaXZlbiBwYXRoc3BlYyBtYXRjaCB0aGUgZ2l2ZW4gbmFtZT8gIEEgbWF0Y2ggaXMgZm91bmQgaWYKKyAqCisgKiAoMSkgdGhlIHBhdGhzcGVjIHN0cmluZyBpcyBsZWFkaW5nIGRpcmVjdG9yeSBvZiAnbmFtZScgKCJSRUNVUlNJVkVMWSIpLCBvcgorICogKDIpIHRoZSBwYXRoc3BlYyBzdHJpbmcgaGFzIGEgbGVhZGluZyBwYXJ0IG1hdGNoaW5nICduYW1lJyAoIkxFQURJTkciKSwgb3IKKyAqICgzKSB0aGUgcGF0aHNwZWMgc3RyaW5nIGlzIGEgd2lsZGNhcmQgYW5kIG1hdGNoZXMgJ25hbWUnICgiV0lMRENBUkQiKSwgb3IKKyAqICg0KSB0aGUgcGF0aHNwZWMgc3RyaW5nIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgJ25hbWUnICgiRVhBQ1QiKS4KKyAqCisgKiBSZXR1cm4gdmFsdWUgdGVsbHMgd2hpY2ggY2FzZSBpdCB3YXMgKDEtNCksIG9yIDAgd2hlbiB0aGVyZSBpcyBubyBtYXRjaC4KKyAqCisgKiBJdCBtYXkgYmUgaW5zdHJ1Y3RpdmUgdG8gbG9vayBhdCBhIHNtYWxsIHRhYmxlIG9mIGNvbmNyZXRlIGV4YW1wbGVzCisgKiB0byB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIDEsIDIsIGFuZCA0OgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0aHNwZWNzCisgKiAgICAgICAgICAgICAgICB8ICAgIGEvYiAgICB8ICAgYS9iLyAgICB8ICAgYS9iL2MKKyAqICAgICAgICAgIC0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyAqICAgICAgICAgIGEvYiAgIHwgIEVYQUNUICAgIHwgIEVYQUNUWzFdIHwgTEVBRElOR1syXQorICogIE5hbWVzICAgYS9iLyAgfCBSRUNVUlNJVkUgfCAgIEVYQUNUICAgfCBMRUFESU5HWzJdCisgKiAgICAgICAgICBhL2IvYyB8IFJFQ1VSU0lWRSB8IFJFQ1VSU0lWRSB8ICAgRVhBQ1QKKyAqCisgKiBbMV0gT25seSBpZiBET19NQVRDSF9ESVJFQ1RPUlkgaXMgcGFzc2VkOyBvdGhlcndpc2UsIHRoaXMgaXMgTk9UIGEgbWF0Y2guCisgKiBbMl0gT25seSBpZiBET19NQVRDSF9MRUFESU5HX1BBVEhTUEVDIGlzIHBhc3NlZDsgb3RoZXJ3aXNlLCBub3QgYSBtYXRjaC4KKyAqLworc3RhdGljIGludCBtYXRjaF9wYXRoc3BlY19pdGVtKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtLCBpbnQgcHJlZml4LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCB1bnNpZ25lZCBmbGFncykKK3sKKwkvKiBuYW1lL25hbWVsZW4gaGFzIHByZWZpeCBjdXQgb2ZmIGJ5IGNhbGxlciAqLworCWNvbnN0IGNoYXIgKm1hdGNoID0gaXRlbS0+bWF0Y2ggKyBwcmVmaXg7CisJaW50IG1hdGNobGVuID0gaXRlbS0+bGVuIC0gcHJlZml4OworCisJLyoKKwkgKiBUaGUgbm9ybWFsIGNhbGwgcGF0dGVybiBpczoKKwkgKiAxLiBwcmVmaXggPSBjb21tb25fcHJlZml4X2xlbihwcyk7CisJICogMi4gcHJ1bmUgc29tZXRoaW5nLCBvciBmaWxsX2RpcmVjdG9yeQorCSAqIDMuIG1hdGNoX3BhdGhzcGVjKCkKKwkgKgorCSAqICdwcmVmaXgnIGF0ICMxIG1heSBiZSBzaG9ydGVyIHRoYW4gdGhlIGNvbW1hbmQncyBwcmVmaXggYW5kCisJICogaXQncyBvayBmb3IgIzIgdG8gbWF0Y2ggZXh0cmEgZmlsZXMuIFRob3NlIGV4dHJhcyB3aWxsIGJlCisJICogdHJpbW1lZCBhdCAjMy4KKwkgKgorCSAqIFN1cHBvc2UgdGhlIHBhdGhzcGVjIGlzICdmb28nIGFuZCAnLi4vYmFyJyBydW5uaW5nIGZyb20KKwkgKiBzdWJkaXIgJ3h5eicuIFRoZSBjb21tb24gcHJlZml4IGF0ICMxIHdpbGwgYmUgZW1wdHksIHRoYW5rcworCSAqIHRvICIuLi8iLiBXZSBtYXkgaGF2ZSB4eXovZm9vIF9hbmRfIFhZWi9mb28gYWZ0ZXIgIzIuIFRoZQorCSAqIHVzZXIgZG9lcyBub3Qgd2FudCBYWVovZm9vLCBvbmx5IHRoZSAiZm9vIiBwYXJ0IHNob3VsZCBiZQorCSAqIGNhc2UtaW5zZW5zaXRpdmUuIFdlIG5lZWQgdG8gZmlsdGVyIG91dCBYWVovZm9vIGhlcmUuIEluCisJICogb3RoZXIgd29yZHMsIHdlIGRvIG5vdCB0cnVzdCB0aGUgY2FsbGVyIG9uIGNvbXBhcmluZyB0aGUKKwkgKiBwcmVmaXggcGFydCB3aGVuIDooaWNhc2UpIGlzIGludm9sdmVkLiBXZSBkbyBleGFjdAorCSAqIGNvbXBhcmlzb24gb3Vyc2VsdmVzLgorCSAqCisJICogTm9ybWFsbHkgdGhlIGNhbGxlciAoY29tbW9uX3ByZWZpeF9sZW4oKSBpbiBmYWN0KSBkb2VzCisJICogX2V4YWN0XyBtYXRjaGluZyBvbiBuYW1lWy1wcmVmaXgrMS4uLTFdIGFuZCB3ZSBkbyBub3QgbmVlZAorCSAqIHRvIGNoZWNrIHRoYXQgcGFydC4gQmUgZGVmZW5zaXZlIGFuZCBjaGVjayBpdCBhbnl3YXksIGluCisJICogY2FzZSBjb21tb25fcHJlZml4X2xlbiBpcyBjaGFuZ2VkLCBvciBhIG5ldyBjYWxsZXIgaXMKKwkgKiBpbnRyb2R1Y2VkIHRoYXQgZG9lcyBub3QgdXNlIGNvbW1vbl9wcmVmaXhfbGVuLgorCSAqCisJICogSWYgdGhlIHBlbmFsdHkgdHVybnMgb3V0IHRvbyBoaWdoIHdoZW4gcHJlZml4IGlzIHJlYWxseQorCSAqIGxvbmcsIG1heWJlIGNoYW5nZSBpdCB0bworCSAqIHN0cm5jbXAobWF0Y2gsIG5hbWUsIGl0ZW0tPnByZWZpeCAtIHByZWZpeCkKKwkgKi8KKwlpZiAoaXRlbS0+cHJlZml4ICYmIChpdGVtLT5tYWdpYyAmIFBBVEhTUEVDX0lDQVNFKSAmJgorCSAgICBzdHJuY21wKGl0ZW0tPm1hdGNoLCBuYW1lIC0gcHJlZml4LCBpdGVtLT5wcmVmaXgpKQorCQlyZXR1cm4gMDsKKworCWlmIChpdGVtLT5hdHRyX21hdGNoX25yICYmCisJICAgICFtYXRjaF9wYXRoc3BlY19hdHRycyhpc3RhdGUsIG5hbWUsIG5hbWVsZW4sIGl0ZW0pKQorCQlyZXR1cm4gMDsKKworCS8qIElmIHRoZSBtYXRjaCB3YXMganVzdCB0aGUgcHJlZml4LCB3ZSBtYXRjaGVkICovCisJaWYgKCEqbWF0Y2gpCisJCXJldHVybiBNQVRDSEVEX1JFQ1VSU0lWRUxZOworCisJaWYgKG1hdGNobGVuIDw9IG5hbWVsZW4gJiYgIXBzX3N0cm5jbXAoaXRlbSwgbWF0Y2gsIG5hbWUsIG1hdGNobGVuKSkgeworCQlpZiAobWF0Y2hsZW4gPT0gbmFtZWxlbikKKwkJCXJldHVybiBNQVRDSEVEX0VYQUNUTFk7CisKKwkJaWYgKG1hdGNoW21hdGNobGVuLTFdID09ICcvJyB8fCBuYW1lW21hdGNobGVuXSA9PSAnLycpCisJCQlyZXR1cm4gTUFUQ0hFRF9SRUNVUlNJVkVMWTsKKwl9IGVsc2UgaWYgKChmbGFncyAmIERPX01BVENIX0RJUkVDVE9SWSkgJiYKKwkJICAgbWF0Y2hbbWF0Y2hsZW4gLSAxXSA9PSAnLycgJiYKKwkJICAgbmFtZWxlbiA9PSBtYXRjaGxlbiAtIDEgJiYKKwkJICAgIXBzX3N0cm5jbXAoaXRlbSwgbWF0Y2gsIG5hbWUsIG5hbWVsZW4pKQorCQlyZXR1cm4gTUFUQ0hFRF9FWEFDVExZOworCisJaWYgKGl0ZW0tPm5vd2lsZGNhcmRfbGVuIDwgaXRlbS0+bGVuICYmCisJICAgICFnaXRfZm5tYXRjaChpdGVtLCBtYXRjaCwgbmFtZSwKKwkJCSBpdGVtLT5ub3dpbGRjYXJkX2xlbiAtIHByZWZpeCkpCisJCXJldHVybiBNQVRDSEVEX0ZOTUFUQ0g7CisKKwkvKiBQZXJmb3JtIGNoZWNrcyB0byBzZWUgaWYgIm5hbWUiIGlzIGEgbGVhZGluZyBzdHJpbmcgb2YgdGhlIHBhdGhzcGVjICovCisJaWYgKGZsYWdzICYgRE9fTUFUQ0hfTEVBRElOR19QQVRIU1BFQykgeworCQkvKiBuYW1lIGlzIGEgbGl0ZXJhbCBwcmVmaXggb2YgdGhlIHBhdGhzcGVjICovCisJCWludCBvZmZzZXQgPSBuYW1lW25hbWVsZW4tMV0gPT0gJy8nID8gMSA6IDA7CisJCWlmICgobmFtZWxlbiA8IG1hdGNobGVuKSAmJgorCQkgICAgKG1hdGNoW25hbWVsZW4tb2Zmc2V0XSA9PSAnLycpICYmCisJCSAgICAhcHNfc3RybmNtcChpdGVtLCBtYXRjaCwgbmFtZSwgbmFtZWxlbikpCisJCQlyZXR1cm4gTUFUQ0hFRF9SRUNVUlNJVkVMWV9MRUFESU5HX1BBVEhTUEVDOworCisJCS8qIG5hbWUgZG9lc24ndCBtYXRjaCB1cCB0byB0aGUgZmlyc3Qgd2lsZCBjaGFyYWN0ZXIgKi8KKwkJaWYgKGl0ZW0tPm5vd2lsZGNhcmRfbGVuIDwgaXRlbS0+bGVuICYmCisJCSAgICBwc19zdHJuY21wKGl0ZW0sIG1hdGNoLCBuYW1lLAorCQkJICAgICAgIGl0ZW0tPm5vd2lsZGNhcmRfbGVuIC0gcHJlZml4KSkKKwkJCXJldHVybiAwOworCisJCS8qCisJCSAqIG5hbWUgaGFzIG5vIHdpbGRjYXJkLCBhbmQgaXQgZGlkbid0IG1hdGNoIGFzIGEgbGVhZGluZworCQkgKiBwYXRoc3BlYyBzbyByZXR1cm4uCisJCSAqLworCQlpZiAoaXRlbS0+bm93aWxkY2FyZF9sZW4gPT0gaXRlbS0+bGVuKQorCQkJcmV0dXJuIDA7CisKKwkJLyoKKwkJICogSGVyZSBpcyB3aGVyZSB3ZSB3b3VsZCBwZXJmb3JtIGEgd2lsZG1hdGNoIHRvIGNoZWNrIGlmCisJCSAqICJuYW1lIiBjYW4gYmUgbWF0Y2hlZCBhcyBhIGRpcmVjdG9yeSAob3IgYSBwcmVmaXgpIGFnYWluc3QKKwkJICogdGhlIHBhdGhzcGVjLiAgU2luY2Ugd2lsZG1hdGNoIGRvZXNuJ3QgaGF2ZSB0aGlzIGNhcGFiaWxpdHkKKwkJICogYXQgdGhlIHByZXNlbnQgd2UgaGF2ZSB0byBwdW50IGFuZCBzYXkgdGhhdCBpdCBpcyBhIG1hdGNoLAorCQkgKiBwb3RlbnRpYWxseSByZXR1cm5pbmcgYSBmYWxzZSBwb3NpdGl2ZQorCQkgKiBUaGUgc3VibW9kdWxlcyB0aGVtc2VsdmVzIHdpbGwgYmUgYWJsZSB0byBwZXJmb3JtIG1vcmUKKwkJICogYWNjdXJhdGUgbWF0Y2hpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwYXRoc3BlYyBtYXRjaGVzLgorCQkgKi8KKwkJcmV0dXJuIE1BVENIRURfUkVDVVJTSVZFTFlfTEVBRElOR19QQVRIU1BFQzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdpdmVuIGEgbmFtZSBhbmQgYSBsaXN0IG9mIHBhdGhzcGVjcywgcmV0dXJucyB0aGUgbmF0dXJlIG9mIHRoZQorICogY2xvc2VzdCAoaS5lLiBtb3N0IHNwZWNpZmljKSBtYXRjaCBvZiB0aGUgbmFtZSB0byBhbnkgb2YgdGhlCisgKiBwYXRoc3BlY3MuCisgKgorICogVGhlIGNhbGxlciB0eXBpY2FsbHkgY2FsbHMgdGhpcyBtdWx0aXBsZSB0aW1lcyB3aXRoIHRoZSBzYW1lCisgKiBwYXRoc3BlYyBhbmQgc2VlbltdIGFycmF5IGJ1dCB3aXRoIGRpZmZlcmVudCBuYW1lL25hbWVsZW4KKyAqIChlLmcuIGVudHJpZXMgZnJvbSB0aGUgaW5kZXgpIGFuZCBpcyBpbnRlcmVzdGVkIGluIHNlZWluZyBpZiBhbmQKKyAqIGhvdyBlYWNoIHBhdGhzcGVjIG1hdGNoZXMgYWxsIHRoZSBuYW1lcyBpdCBjYWxscyB0aGlzIGZ1bmN0aW9uCisgKiB3aXRoLiAgQSBtYXJrIGlzIGxlZnQgaW4gdGhlIHNlZW5bXSBhcnJheSBmb3IgZWFjaCBwYXRoc3BlYyBlbGVtZW50CisgKiBpbmRpY2F0aW5nIHRoZSBjbG9zZXN0IHR5cGUgb2YgbWF0Y2ggdGhhdCBlbGVtZW50IGFjaGlldmVkLCBzbyBpZgorICogc2VlbltuXSByZW1haW5zIHplcm8gYWZ0ZXIgbXVsdGlwbGUgaW52b2NhdGlvbnMsIHRoYXQgbWVhbnMgdGhlIG50aAorICogcGF0aHNwZWMgZGlkIG5vdCBtYXRjaCBhbnkgbmFtZXMsIHdoaWNoIGNvdWxkIGluZGljYXRlIHRoYXQgdGhlCisgKiB1c2VyIG1pc3R5cGVkIHRoZSBudGggcGF0aHNwZWMuCisgKi8KK3N0YXRpYyBpbnQgZG9fbWF0Y2hfcGF0aHNwZWMoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkJICAgICBpbnQgcHJlZml4LCBjaGFyICpzZWVuLAorCQkJICAgICB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgaSwgcmV0dmFsID0gMCwgZXhjbHVkZSA9IGZsYWdzICYgRE9fTUFUQ0hfRVhDTFVERTsKKworCUdVQVJEX1BBVEhTUEVDKHBzLAorCQkgICAgICAgUEFUSFNQRUNfRlJPTVRPUCB8CisJCSAgICAgICBQQVRIU1BFQ19NQVhERVBUSCB8CisJCSAgICAgICBQQVRIU1BFQ19MSVRFUkFMIHwKKwkJICAgICAgIFBBVEhTUEVDX0dMT0IgfAorCQkgICAgICAgUEFUSFNQRUNfSUNBU0UgfAorCQkgICAgICAgUEFUSFNQRUNfRVhDTFVERSB8CisJCSAgICAgICBQQVRIU1BFQ19BVFRSKTsKKworCWlmICghcHMtPm5yKSB7CisJCWlmICghcHMtPnJlY3Vyc2l2ZSB8fAorCQkgICAgIShwcy0+bWFnaWMgJiBQQVRIU1BFQ19NQVhERVBUSCkgfHwKKwkJICAgIHBzLT5tYXhfZGVwdGggPT0gLTEpCisJCQlyZXR1cm4gTUFUQ0hFRF9SRUNVUlNJVkVMWTsKKworCQlpZiAod2l0aGluX2RlcHRoKG5hbWUsIG5hbWVsZW4sIDAsIHBzLT5tYXhfZGVwdGgpKQorCQkJcmV0dXJuIE1BVENIRURfRVhBQ1RMWTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJbmFtZSArPSBwcmVmaXg7CisJbmFtZWxlbiAtPSBwcmVmaXg7CisKKwlmb3IgKGkgPSBwcy0+bnIgLSAxOyBpID49IDA7IGktLSkgeworCQlpbnQgaG93OworCisJCWlmICgoIWV4Y2x1ZGUgJiYgICBwcy0+aXRlbXNbaV0ubWFnaWMgJiBQQVRIU1BFQ19FWENMVURFKSB8fAorCQkgICAgKCBleGNsdWRlICYmICEocHMtPml0ZW1zW2ldLm1hZ2ljICYgUEFUSFNQRUNfRVhDTFVERSkpKQorCQkJY29udGludWU7CisKKwkJaWYgKHNlZW4gJiYgc2VlbltpXSA9PSBNQVRDSEVEX0VYQUNUTFkpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogTWFrZSBleGNsdWRlIHBhdHRlcm5zIG9wdGlvbmFsIGFuZCBuZXZlciByZXBvcnQKKwkJICogInBhdGhzcGVjICc6KGV4Y2x1ZGUpZm9vJyBtYXRjaGVzIG5vIGZpbGVzIgorCQkgKi8KKwkJaWYgKHNlZW4gJiYgcHMtPml0ZW1zW2ldLm1hZ2ljICYgUEFUSFNQRUNfRVhDTFVERSkKKwkJCXNlZW5baV0gPSBNQVRDSEVEX0ZOTUFUQ0g7CisJCWhvdyA9IG1hdGNoX3BhdGhzcGVjX2l0ZW0oaXN0YXRlLCBwcy0+aXRlbXMraSwgcHJlZml4LCBuYW1lLAorCQkJCQkgIG5hbWVsZW4sIGZsYWdzKTsKKwkJaWYgKHBzLT5yZWN1cnNpdmUgJiYKKwkJICAgIChwcy0+bWFnaWMgJiBQQVRIU1BFQ19NQVhERVBUSCkgJiYKKwkJICAgIHBzLT5tYXhfZGVwdGggIT0gLTEgJiYKKwkJICAgIGhvdyAmJiBob3cgIT0gTUFUQ0hFRF9GTk1BVENIKSB7CisJCQlpbnQgbGVuID0gcHMtPml0ZW1zW2ldLmxlbjsKKwkJCWlmIChuYW1lW2xlbl0gPT0gJy8nKQorCQkJCWxlbisrOworCQkJaWYgKHdpdGhpbl9kZXB0aChuYW1lK2xlbiwgbmFtZWxlbi1sZW4sIDAsIHBzLT5tYXhfZGVwdGgpKQorCQkJCWhvdyA9IE1BVENIRURfRVhBQ1RMWTsKKwkJCWVsc2UKKwkJCQlob3cgPSAwOworCQl9CisJCWlmIChob3cpIHsKKwkJCWlmIChyZXR2YWwgPCBob3cpCisJCQkJcmV0dmFsID0gaG93OworCQkJaWYgKHNlZW4gJiYgc2VlbltpXSA8IGhvdykKKwkJCQlzZWVuW2ldID0gaG93OworCQl9CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBtYXRjaF9wYXRoc3BlYyhjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCSAgIGludCBwcmVmaXgsIGNoYXIgKnNlZW4sIGludCBpc19kaXIpCit7CisJaW50IHBvc2l0aXZlLCBuZWdhdGl2ZTsKKwl1bnNpZ25lZCBmbGFncyA9IGlzX2RpciA/IERPX01BVENIX0RJUkVDVE9SWSA6IDA7CisJcG9zaXRpdmUgPSBkb19tYXRjaF9wYXRoc3BlYyhpc3RhdGUsIHBzLCBuYW1lLCBuYW1lbGVuLAorCQkJCSAgICAgcHJlZml4LCBzZWVuLCBmbGFncyk7CisJaWYgKCEocHMtPm1hZ2ljICYgUEFUSFNQRUNfRVhDTFVERSkgfHwgIXBvc2l0aXZlKQorCQlyZXR1cm4gcG9zaXRpdmU7CisJbmVnYXRpdmUgPSBkb19tYXRjaF9wYXRoc3BlYyhpc3RhdGUsIHBzLCBuYW1lLCBuYW1lbGVuLAorCQkJCSAgICAgcHJlZml4LCBzZWVuLAorCQkJCSAgICAgZmxhZ3MgfCBET19NQVRDSF9FWENMVURFKTsKKwlyZXR1cm4gbmVnYXRpdmUgPyAwIDogcG9zaXRpdmU7Cit9CisKKy8qKgorICogQ2hlY2sgaWYgYSBzdWJtb2R1bGUgaXMgYSBzdXBlcnNldCBvZiB0aGUgcGF0aHNwZWMKKyAqLworaW50IHN1Ym1vZHVsZV9wYXRoX21hdGNoKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCQkgY29uc3QgY2hhciAqc3VibW9kdWxlX25hbWUsCisJCQkgY2hhciAqc2VlbikKK3sKKwlpbnQgbWF0Y2hlZCA9IGRvX21hdGNoX3BhdGhzcGVjKGlzdGF0ZSwgcHMsIHN1Ym1vZHVsZV9uYW1lLAorCQkJCQlzdHJsZW4oc3VibW9kdWxlX25hbWUpLAorCQkJCQkwLCBzZWVuLAorCQkJCQlET19NQVRDSF9ESVJFQ1RPUlkgfAorCQkJCQlET19NQVRDSF9MRUFESU5HX1BBVEhTUEVDKTsKKwlyZXR1cm4gbWF0Y2hlZDsKK30KKworaW50IHJlcG9ydF9wYXRoX2Vycm9yKGNvbnN0IGNoYXIgKnBzX21hdGNoZWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJLyoKKwkgKiBNYWtlIHN1cmUgYWxsIHBhdGhzcGVjIG1hdGNoZWQ7IG90aGVyd2lzZSBpdCBpcyBhbiBlcnJvci4KKwkgKi8KKwlpbnQgbnVtLCBlcnJvcnMgPSAwOworCWZvciAobnVtID0gMDsgbnVtIDwgcGF0aHNwZWMtPm5yOyBudW0rKykgeworCQlpbnQgb3RoZXIsIGZvdW5kX2R1cDsKKworCQlpZiAocHNfbWF0Y2hlZFtudW1dKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIFRoZSBjYWxsZXIgbWlnaHQgaGF2ZSBmZWQgaWRlbnRpY2FsIHBhdGhzcGVjCisJCSAqIHR3aWNlLiAgRG8gbm90IGJhcmYgb24gc3VjaCBhIG1pc3Rha2UuCisJCSAqIEZJWE1FOiBwYXJzZV9wYXRoc3BlYyBzaG91bGQgaGF2ZSBlbGltaW5hdGVkCisJCSAqIGR1cGxpY2F0ZSBwYXRoc3BlYy4KKwkJICovCisJCWZvciAoZm91bmRfZHVwID0gb3RoZXIgPSAwOworCQkgICAgICFmb3VuZF9kdXAgJiYgb3RoZXIgPCBwYXRoc3BlYy0+bnI7CisJCSAgICAgb3RoZXIrKykgeworCQkJaWYgKG90aGVyID09IG51bSB8fCAhcHNfbWF0Y2hlZFtvdGhlcl0pCisJCQkJY29udGludWU7CisJCQlpZiAoIXN0cmNtcChwYXRoc3BlYy0+aXRlbXNbb3RoZXJdLm9yaWdpbmFsLAorCQkJCSAgICBwYXRoc3BlYy0+aXRlbXNbbnVtXS5vcmlnaW5hbCkpCisJCQkJLyoKKwkJCQkgKiBPaywgd2UgaGF2ZSBhIG1hdGNoIGFscmVhZHkuCisJCQkJICovCisJCQkJZm91bmRfZHVwID0gMTsKKwkJfQorCQlpZiAoZm91bmRfZHVwKQorCQkJY29udGludWU7CisKKwkJZXJyb3IoXygicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdCIpLAorCQkgICAgICBwYXRoc3BlYy0+aXRlbXNbbnVtXS5vcmlnaW5hbCk7CisJCWVycm9ycysrOworCX0KKwlyZXR1cm4gZXJyb3JzOworfQorCisvKgorICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlICJzaW1wbGUiIHBhcnQgb2YgYSBwYXRoIG1hdGNoIGxpbWl0ZXIuCisgKi8KK2ludCBzaW1wbGVfbGVuZ3RoKGNvbnN0IGNoYXIgKm1hdGNoKQoreworCWludCBsZW4gPSAtMTsKKworCWZvciAoOzspIHsKKwkJdW5zaWduZWQgY2hhciBjID0gKm1hdGNoKys7CisJCWxlbisrOworCQlpZiAoYyA9PSAnXDAnIHx8IGlzX2dsb2Jfc3BlY2lhbChjKSkKKwkJCXJldHVybiBsZW47CisJfQorfQorCitpbnQgbm9fd2lsZGNhcmQoY29uc3QgY2hhciAqc3RyaW5nKQoreworCXJldHVybiBzdHJpbmdbc2ltcGxlX2xlbmd0aChzdHJpbmcpXSA9PSAnXDAnOworfQorCit2b2lkIHBhcnNlX3BhdGhfcGF0dGVybihjb25zdCBjaGFyICoqcGF0dGVybiwKKwkJCSAgIGludCAqcGF0dGVybmxlbiwKKwkJCSAgIHVuc2lnbmVkICpmbGFncywKKwkJCSAgIGludCAqbm93aWxkY2FyZGxlbikKK3sKKwljb25zdCBjaGFyICpwID0gKnBhdHRlcm47CisJc2l6ZV90IGksIGxlbjsKKworCSpmbGFncyA9IDA7CisJaWYgKCpwID09ICchJykgeworCQkqZmxhZ3MgfD0gUEFUVEVSTl9GTEFHX05FR0FUSVZFOworCQlwKys7CisJfQorCWxlbiA9IHN0cmxlbihwKTsKKwlpZiAobGVuICYmIHBbbGVuIC0gMV0gPT0gJy8nKSB7CisJCWxlbi0tOworCQkqZmxhZ3MgfD0gUEFUVEVSTl9GTEFHX01VU1RCRURJUjsKKwl9CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChwW2ldID09ICcvJykKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBsZW4pCisJCSpmbGFncyB8PSBQQVRURVJOX0ZMQUdfTk9ESVI7CisJKm5vd2lsZGNhcmRsZW4gPSBzaW1wbGVfbGVuZ3RoKHApOworCS8qCisJICogd2Ugc2hvdWxkIGhhdmUgZXhjbHVkZWQgdGhlIHRyYWlsaW5nIHNsYXNoIGZyb20gJ3AnIHRvbywKKwkgKiBidXQgdGhhdCdzIG9uZSBtb3JlIGFsbG9jYXRpb24uIEluc3RlYWQganVzdCBtYWtlIHN1cmUKKwkgKiBub3dpbGRjYXJkbGVuIGRvZXMgbm90IGV4Y2VlZCByZWFsIHBhdHRlcm5sZW4KKwkgKi8KKwlpZiAoKm5vd2lsZGNhcmRsZW4gPiBsZW4pCisJCSpub3dpbGRjYXJkbGVuID0gbGVuOworCWlmICgqcCA9PSAnKicgJiYgbm9fd2lsZGNhcmQocCArIDEpKQorCQkqZmxhZ3MgfD0gUEFUVEVSTl9GTEFHX0VORFNXSVRIOworCSpwYXR0ZXJuID0gcDsKKwkqcGF0dGVybmxlbiA9IGxlbjsKK30KKworaW50IHBsX2hhc2htYXBfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmEsCisJCSAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICpiLAorCQkgICBjb25zdCB2b2lkICprZXkpCit7CisJY29uc3Qgc3RydWN0IHBhdHRlcm5fZW50cnkgKmVlMSA9CisJCQljb250YWluZXJfb2YoYSwgc3RydWN0IHBhdHRlcm5fZW50cnksIGVudCk7CisJY29uc3Qgc3RydWN0IHBhdHRlcm5fZW50cnkgKmVlMiA9CisJCQljb250YWluZXJfb2YoYiwgc3RydWN0IHBhdHRlcm5fZW50cnksIGVudCk7CisKKwlzaXplX3QgbWluX2xlbiA9IGVlMS0+cGF0dGVybmxlbiA8PSBlZTItPnBhdHRlcm5sZW4KKwkJCSA/IGVlMS0+cGF0dGVybmxlbgorCQkJIDogZWUyLT5wYXR0ZXJubGVuOworCisJaWYgKGlnbm9yZV9jYXNlKQorCQlyZXR1cm4gc3RybmNhc2VjbXAoZWUxLT5wYXR0ZXJuLCBlZTItPnBhdHRlcm4sIG1pbl9sZW4pOworCXJldHVybiBzdHJuY21wKGVlMS0+cGF0dGVybiwgZWUyLT5wYXR0ZXJuLCBtaW5fbGVuKTsKK30KKworc3RhdGljIGNoYXIgKmR1cF9hbmRfZmlsdGVyX3BhdHRlcm4oY29uc3QgY2hhciAqcGF0dGVybikKK3sKKwljaGFyICpzZXQsICpyZWFkOworCXNpemVfdCBjb3VudCAgPSAwOworCWNoYXIgKnJlc3VsdCA9IHhzdHJkdXAocGF0dGVybik7CisKKwlzZXQgPSByZXN1bHQ7CisJcmVhZCA9IHJlc3VsdDsKKworCXdoaWxlICgqcmVhZCkgeworCQkvKiBza2lwIGVzY2FwZSBjaGFyYWN0ZXJzIChvbmNlKSAqLworCQlpZiAoKnJlYWQgPT0gJ1xcJykKKwkJCXJlYWQrKzsKKworCQkqc2V0ID0gKnJlYWQ7CisKKwkJc2V0Kys7CisJCXJlYWQrKzsKKwkJY291bnQrKzsKKwl9CisJKnNldCA9IDA7CisKKwlpZiAoY291bnQgPiAyICYmCisJICAgICooc2V0IC0gMSkgPT0gJyonICYmCisJICAgICooc2V0IC0gMikgPT0gJy8nKQorCQkqKHNldCAtIDIpID0gMDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wYXR0ZXJuX3RvX2hhc2hzZXRzKHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLCBzdHJ1Y3QgcGF0aF9wYXR0ZXJuICpnaXZlbikKK3sKKwlzdHJ1Y3QgcGF0dGVybl9lbnRyeSAqdHJhbnNsYXRlZDsKKwljaGFyICp0cnVuY2F0ZWQ7CisJY2hhciAqZGF0YSA9IE5VTEw7CisJY29uc3QgY2hhciAqcHJldiwgKmN1ciwgKm5leHQ7CisKKwlpZiAoIXBsLT51c2VfY29uZV9wYXR0ZXJucykKKwkJcmV0dXJuOworCisJaWYgKGdpdmVuLT5mbGFncyAmIFBBVFRFUk5fRkxBR19ORUdBVElWRSAmJgorCSAgICBnaXZlbi0+ZmxhZ3MgJiBQQVRURVJOX0ZMQUdfTVVTVEJFRElSICYmCisJICAgICFzdHJjbXAoZ2l2ZW4tPnBhdHRlcm4sICIvKiIpKSB7CisJCXBsLT5mdWxsX2NvbmUgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKCFnaXZlbi0+ZmxhZ3MgJiYgIXN0cmNtcChnaXZlbi0+cGF0dGVybiwgIi8qIikpIHsKKwkJcGwtPmZ1bGxfY29uZSA9IDE7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZ2l2ZW4tPnBhdHRlcm5sZW4gPCAyIHx8CisJICAgICpnaXZlbi0+cGF0dGVybiA9PSAnKicgfHwKKwkgICAgc3Ryc3RyKGdpdmVuLT5wYXR0ZXJuLCAiKioiKSkgeworCQkvKiBOb3QgYSBjb25lIHBhdHRlcm4uICovCisJCXdhcm5pbmcoXygidW5yZWNvZ25pemVkIHBhdHRlcm46ICclcyciKSwgZ2l2ZW4tPnBhdHRlcm4pOworCQlnb3RvIGNsZWFyX2hhc2htYXBzOworCX0KKworCXByZXYgPSBnaXZlbi0+cGF0dGVybjsKKwljdXIgPSBnaXZlbi0+cGF0dGVybiArIDE7CisJbmV4dCA9IGdpdmVuLT5wYXR0ZXJuICsgMjsKKworCXdoaWxlICgqY3VyKSB7CisJCS8qIFdhdGNoIGZvciBnbG9iIGNoYXJhY3RlcnMgJyonLCAnXCcsICdbJywgJz8nICovCisJCWlmICghaXNfZ2xvYl9zcGVjaWFsKCpjdXIpKQorCQkJZ290byBpbmNyZW1lbnQ7CisKKwkJLyogQnV0IG9ubHkgaWYgKnByZXYgIT0gJ1xcJyAqLworCQlpZiAoKnByZXYgPT0gJ1xcJykKKwkJCWdvdG8gaW5jcmVtZW50OworCisJCS8qIEJ1dCBhbGxvdyB0aGUgaW5pdGlhbCAnXCcgKi8KKwkJaWYgKCpjdXIgPT0gJ1xcJyAmJgorCQkgICAgaXNfZ2xvYl9zcGVjaWFsKCpuZXh0KSkKKwkJCWdvdG8gaW5jcmVtZW50OworCisJCS8qIEJ1dCBhIHRyYWlsaW5nICcvJyB0aGVuICcqJyBpcyBmaW5lICovCisJCWlmICgqcHJldiA9PSAnLycgJiYKKwkJICAgICpjdXIgPT0gJyonICYmCisJCSAgICAqbmV4dCA9PSAwKQorCQkJZ290byBpbmNyZW1lbnQ7CisKKwkJLyogTm90IGEgY29uZSBwYXR0ZXJuLiAqLworCQl3YXJuaW5nKF8oInVucmVjb2duaXplZCBwYXR0ZXJuOiAnJXMnIiksIGdpdmVuLT5wYXR0ZXJuKTsKKwkJZ290byBjbGVhcl9oYXNobWFwczsKKworCWluY3JlbWVudDoKKwkJcHJldisrOworCQljdXIrKzsKKwkJbmV4dCsrOworCX0KKworCWlmIChnaXZlbi0+cGF0dGVybmxlbiA+IDIgJiYKKwkgICAgIXN0cmNtcChnaXZlbi0+cGF0dGVybiArIGdpdmVuLT5wYXR0ZXJubGVuIC0gMiwgIi8qIikpIHsKKwkJaWYgKCEoZ2l2ZW4tPmZsYWdzICYgUEFUVEVSTl9GTEFHX05FR0FUSVZFKSkgeworCQkJLyogTm90IGEgY29uZSBwYXR0ZXJuLiAqLworCQkJd2FybmluZyhfKCJ1bnJlY29nbml6ZWQgcGF0dGVybjogJyVzJyIpLCBnaXZlbi0+cGF0dGVybik7CisJCQlnb3RvIGNsZWFyX2hhc2htYXBzOworCQl9CisKKwkJdHJ1bmNhdGVkID0gZHVwX2FuZF9maWx0ZXJfcGF0dGVybihnaXZlbi0+cGF0dGVybik7CisKKwkJdHJhbnNsYXRlZCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYXR0ZXJuX2VudHJ5KSk7CisJCXRyYW5zbGF0ZWQtPnBhdHRlcm4gPSB0cnVuY2F0ZWQ7CisJCXRyYW5zbGF0ZWQtPnBhdHRlcm5sZW4gPSBnaXZlbi0+cGF0dGVybmxlbiAtIDI7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmdHJhbnNsYXRlZC0+ZW50LAorCQkJCSAgIGlnbm9yZV9jYXNlID8KKwkJCQkgICBzdHJpaGFzaCh0cmFuc2xhdGVkLT5wYXR0ZXJuKSA6CisJCQkJICAgc3RyaGFzaCh0cmFuc2xhdGVkLT5wYXR0ZXJuKSk7CisKKwkJaWYgKCFoYXNobWFwX2dldF9lbnRyeSgmcGwtPnJlY3Vyc2l2ZV9oYXNobWFwLAorCQkJCSAgICAgICB0cmFuc2xhdGVkLCBlbnQsIE5VTEwpKSB7CisJCQkvKiBXZSBkaWQgbm90IHNlZSB0aGUgInBhcmVudCIgaW5jbHVkZWQgKi8KKwkJCXdhcm5pbmcoXygidW5yZWNvZ25pemVkIG5lZ2F0aXZlIHBhdHRlcm46ICclcyciKSwKKwkJCQlnaXZlbi0+cGF0dGVybik7CisJCQlmcmVlKHRydW5jYXRlZCk7CisJCQlmcmVlKHRyYW5zbGF0ZWQpOworCQkJZ290byBjbGVhcl9oYXNobWFwczsKKwkJfQorCisJCWhhc2htYXBfYWRkKCZwbC0+cGFyZW50X2hhc2htYXAsICZ0cmFuc2xhdGVkLT5lbnQpOworCQloYXNobWFwX3JlbW92ZSgmcGwtPnJlY3Vyc2l2ZV9oYXNobWFwLCAmdHJhbnNsYXRlZC0+ZW50LCAmZGF0YSk7CisJCWZyZWUoZGF0YSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZ2l2ZW4tPmZsYWdzICYgUEFUVEVSTl9GTEFHX05FR0FUSVZFKSB7CisJCXdhcm5pbmcoXygidW5yZWNvZ25pemVkIG5lZ2F0aXZlIHBhdHRlcm46ICclcyciKSwKKwkJCWdpdmVuLT5wYXR0ZXJuKTsKKwkJZ290byBjbGVhcl9oYXNobWFwczsKKwl9CisKKwl0cmFuc2xhdGVkID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBhdHRlcm5fZW50cnkpKTsKKworCXRyYW5zbGF0ZWQtPnBhdHRlcm4gPSBkdXBfYW5kX2ZpbHRlcl9wYXR0ZXJuKGdpdmVuLT5wYXR0ZXJuKTsKKwl0cmFuc2xhdGVkLT5wYXR0ZXJubGVuID0gZ2l2ZW4tPnBhdHRlcm5sZW47CisJaGFzaG1hcF9lbnRyeV9pbml0KCZ0cmFuc2xhdGVkLT5lbnQsCisJCQkgICBpZ25vcmVfY2FzZSA/CisJCQkgICBzdHJpaGFzaCh0cmFuc2xhdGVkLT5wYXR0ZXJuKSA6CisJCQkgICBzdHJoYXNoKHRyYW5zbGF0ZWQtPnBhdHRlcm4pKTsKKworCWhhc2htYXBfYWRkKCZwbC0+cmVjdXJzaXZlX2hhc2htYXAsICZ0cmFuc2xhdGVkLT5lbnQpOworCisJaWYgKGhhc2htYXBfZ2V0X2VudHJ5KCZwbC0+cGFyZW50X2hhc2htYXAsIHRyYW5zbGF0ZWQsIGVudCwgTlVMTCkpIHsKKwkJLyogd2UgYWxyZWFkeSBpbmNsdWRlZCB0aGlzIGF0IHRoZSBwYXJlbnQgbGV2ZWwgKi8KKwkJd2FybmluZyhfKCJ5b3VyIHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBoYXZlIGlzc3VlczogcGF0dGVybiAnJXMnIGlzIHJlcGVhdGVkIiksCisJCQlnaXZlbi0+cGF0dGVybik7CisJCWhhc2htYXBfcmVtb3ZlKCZwbC0+cGFyZW50X2hhc2htYXAsICZ0cmFuc2xhdGVkLT5lbnQsICZkYXRhKTsKKwkJZnJlZShkYXRhKTsKKwkJZnJlZSh0cmFuc2xhdGVkKTsKKwl9CisKKwlyZXR1cm47CisKK2NsZWFyX2hhc2htYXBzOgorCXdhcm5pbmcoXygiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIpKTsKKwloYXNobWFwX2ZyZWVfZW50cmllcygmcGwtPnBhcmVudF9oYXNobWFwLCBzdHJ1Y3QgcGF0dGVybl9lbnRyeSwgZW50KTsKKwloYXNobWFwX2ZyZWVfZW50cmllcygmcGwtPnJlY3Vyc2l2ZV9oYXNobWFwLCBzdHJ1Y3QgcGF0dGVybl9lbnRyeSwgZW50KTsKKwlwbC0+dXNlX2NvbmVfcGF0dGVybnMgPSAwOworfQorCitzdGF0aWMgaW50IGhhc2htYXBfY29udGFpbnNfcGF0aChzdHJ1Y3QgaGFzaG1hcCAqbWFwLAorCQkJCSBzdHJ1Y3Qgc3RyYnVmICpwYXR0ZXJuKQoreworCXN0cnVjdCBwYXR0ZXJuX2VudHJ5IHA7CisKKwkvKiBDaGVjayBzdHJhaWdodCBtYXBwaW5nICovCisJcC5wYXR0ZXJuID0gcGF0dGVybi0+YnVmOworCXAucGF0dGVybmxlbiA9IHBhdHRlcm4tPmxlbjsKKwloYXNobWFwX2VudHJ5X2luaXQoJnAuZW50LAorCQkJICAgaWdub3JlX2Nhc2UgPworCQkJICAgc3RyaWhhc2gocC5wYXR0ZXJuKSA6CisJCQkgICBzdHJoYXNoKHAucGF0dGVybikpOworCXJldHVybiAhIWhhc2htYXBfZ2V0X2VudHJ5KG1hcCwgJnAsIGVudCwgTlVMTCk7Cit9CisKK2ludCBoYXNobWFwX2NvbnRhaW5zX3BhcmVudChzdHJ1Y3QgaGFzaG1hcCAqbWFwLAorCQkJICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqYnVmZmVyKQoreworCWNoYXIgKnNsYXNoX3BvczsKKworCXN0cmJ1Zl9zZXRsZW4oYnVmZmVyLCAwKTsKKworCWlmIChwYXRoWzBdICE9ICcvJykKKwkJc3RyYnVmX2FkZGNoKGJ1ZmZlciwgJy8nKTsKKworCXN0cmJ1Zl9hZGRzdHIoYnVmZmVyLCBwYXRoKTsKKworCXNsYXNoX3BvcyA9IHN0cnJjaHIoYnVmZmVyLT5idWYsICcvJyk7CisKKwl3aGlsZSAoc2xhc2hfcG9zID4gYnVmZmVyLT5idWYpIHsKKwkJc3RyYnVmX3NldGxlbihidWZmZXIsIHNsYXNoX3BvcyAtIGJ1ZmZlci0+YnVmKTsKKworCQlpZiAoaGFzaG1hcF9jb250YWluc19wYXRoKG1hcCwgYnVmZmVyKSkKKwkJCXJldHVybiAxOworCisJCXNsYXNoX3BvcyA9IHN0cnJjaHIoYnVmZmVyLT5idWYsICcvJyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYWRkX3BhdHRlcm4oY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICpiYXNlLAorCQkgaW50IGJhc2VsZW4sIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLCBpbnQgc3JjcG9zKQoreworCXN0cnVjdCBwYXRoX3BhdHRlcm4gKnBhdHRlcm47CisJaW50IHBhdHRlcm5sZW47CisJdW5zaWduZWQgZmxhZ3M7CisJaW50IG5vd2lsZGNhcmRsZW47CisKKwlwYXJzZV9wYXRoX3BhdHRlcm4oJnN0cmluZywgJnBhdHRlcm5sZW4sICZmbGFncywgJm5vd2lsZGNhcmRsZW4pOworCWlmIChmbGFncyAmIFBBVFRFUk5fRkxBR19NVVNUQkVESVIpIHsKKwkJRkxFWFBUUl9BTExPQ19NRU0ocGF0dGVybiwgcGF0dGVybiwgc3RyaW5nLCBwYXR0ZXJubGVuKTsKKwl9IGVsc2UgeworCQlwYXR0ZXJuID0geG1hbGxvYyhzaXplb2YoKnBhdHRlcm4pKTsKKwkJcGF0dGVybi0+cGF0dGVybiA9IHN0cmluZzsKKwl9CisJcGF0dGVybi0+cGF0dGVybmxlbiA9IHBhdHRlcm5sZW47CisJcGF0dGVybi0+bm93aWxkY2FyZGxlbiA9IG5vd2lsZGNhcmRsZW47CisJcGF0dGVybi0+YmFzZSA9IGJhc2U7CisJcGF0dGVybi0+YmFzZWxlbiA9IGJhc2VsZW47CisJcGF0dGVybi0+ZmxhZ3MgPSBmbGFnczsKKwlwYXR0ZXJuLT5zcmNwb3MgPSBzcmNwb3M7CisJQUxMT0NfR1JPVyhwbC0+cGF0dGVybnMsIHBsLT5uciArIDEsIHBsLT5hbGxvYyk7CisJcGwtPnBhdHRlcm5zW3BsLT5ucisrXSA9IHBhdHRlcm47CisJcGF0dGVybi0+cGwgPSBwbDsKKworCWFkZF9wYXR0ZXJuX3RvX2hhc2hzZXRzKHBsLCBwYXR0ZXJuKTsKK30KKworc3RhdGljIGludCByZWFkX3NraXBfd29ya3RyZWVfZmlsZV9mcm9tX2luZGV4KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQkgICAgICBjb25zdCBjaGFyICpwYXRoLAorCQkJCQkgICAgICBzaXplX3QgKnNpemVfb3V0LCBjaGFyICoqZGF0YV9vdXQsCisJCQkJCSAgICAgIHN0cnVjdCBvaWRfc3RhdCAqb2lkX3N0YXQpCit7CisJaW50IHBvcywgbGVuOworCisJbGVuID0gc3RybGVuKHBhdGgpOworCXBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgcGF0aCwgbGVuKTsKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmICghY2Vfc2tpcF93b3JrdHJlZShpc3RhdGUtPmNhY2hlW3Bvc10pKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZG9fcmVhZF9ibG9iKCZpc3RhdGUtPmNhY2hlW3Bvc10tPm9pZCwgb2lkX3N0YXQsIHNpemVfb3V0LCBkYXRhX291dCk7Cit9CisKKy8qCisgKiBGcmVlcyBtZW1vcnkgd2l0aGluIHBsIHdoaWNoIHdhcyBhbGxvY2F0ZWQgZm9yIGV4Y2x1ZGUgcGF0dGVybnMgYW5kCisgKiB0aGUgZmlsZSBidWZmZXIuICBEb2VzIG5vdCBmcmVlIHBsIGl0c2VsZi4KKyAqLwordm9pZCBjbGVhcl9wYXR0ZXJuX2xpc3Qoc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGwtPm5yOyBpKyspCisJCWZyZWUocGwtPnBhdHRlcm5zW2ldKTsKKwlmcmVlKHBsLT5wYXR0ZXJucyk7CisJZnJlZShwbC0+ZmlsZWJ1Zik7CisKKwltZW1zZXQocGwsIDAsIHNpemVvZigqcGwpKTsKK30KKworc3RhdGljIHZvaWQgdHJpbV90cmFpbGluZ19zcGFjZXMoY2hhciAqYnVmKQoreworCWNoYXIgKnAsICpsYXN0X3NwYWNlID0gTlVMTDsKKworCWZvciAocCA9IGJ1ZjsgKnA7IHArKykKKwkJc3dpdGNoICgqcCkgeworCQljYXNlICcgJzoKKwkJCWlmICghbGFzdF9zcGFjZSkKKwkJCQlsYXN0X3NwYWNlID0gcDsKKwkJCWJyZWFrOworCQljYXNlICdcXCc6CisJCQlwKys7CisJCQlpZiAoISpwKQorCQkJCXJldHVybjsKKwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQlsYXN0X3NwYWNlID0gTlVMTDsKKwkJfQorCisJaWYgKGxhc3Rfc3BhY2UpCisJCSpsYXN0X3NwYWNlID0gJ1wwJzsKK30KKworLyoKKyAqIEdpdmVuIGEgc3ViZGlyZWN0b3J5IG5hbWUgYW5kICJkaXIiIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwKKyAqIHNlYXJjaCB0aGUgc3ViZGlyIGluICJkaXIiIGFuZCByZXR1cm4gaXQsIG9yIGNyZWF0ZSBhIG5ldyBvbmUgaWYgaXQKKyAqIGRvZXMgbm90IGV4aXN0IGluICJkaXIiLgorICoKKyAqIElmICJuYW1lIiBoYXMgdGhlIHRyYWlsaW5nIHNsYXNoLCBpdCdsbCBiZSBleGNsdWRlZCBpbiB0aGUgc2VhcmNoLgorICovCitzdGF0aWMgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKmxvb2t1cF91bnRyYWNrZWQoc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdWMsCisJCQkJCQkgICAgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKmRpciwKKwkJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCWludCBmaXJzdCwgbGFzdDsKKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqZDsKKwlpZiAoIWRpcikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGxlbiAmJiBuYW1lW2xlbiAtIDFdID09ICcvJykKKwkJbGVuLS07CisJZmlyc3QgPSAwOworCWxhc3QgPSBkaXItPmRpcnNfbnI7CisJd2hpbGUgKGxhc3QgPiBmaXJzdCkgeworCQlpbnQgY21wLCBuZXh0ID0gZmlyc3QgKyAoKGxhc3QgLSBmaXJzdCkgPj4gMSk7CisJCWQgPSBkaXItPmRpcnNbbmV4dF07CisJCWNtcCA9IHN0cm5jbXAobmFtZSwgZC0+bmFtZSwgbGVuKTsKKwkJaWYgKCFjbXAgJiYgc3RybGVuKGQtPm5hbWUpID4gbGVuKQorCQkJY21wID0gLTE7CisJCWlmICghY21wKQorCQkJcmV0dXJuIGQ7CisJCWlmIChjbXAgPCAwKSB7CisJCQlsYXN0ID0gbmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZpcnN0ID0gbmV4dCsxOworCX0KKworCXVjLT5kaXJfY3JlYXRlZCsrOworCUZMRVhfQUxMT0NfTUVNKGQsIG5hbWUsIG5hbWUsIGxlbik7CisKKwlBTExPQ19HUk9XKGRpci0+ZGlycywgZGlyLT5kaXJzX25yICsgMSwgZGlyLT5kaXJzX2FsbG9jKTsKKwlNT1ZFX0FSUkFZKGRpci0+ZGlycyArIGZpcnN0ICsgMSwgZGlyLT5kaXJzICsgZmlyc3QsCisJCSAgIGRpci0+ZGlyc19uciAtIGZpcnN0KTsKKwlkaXItPmRpcnNfbnIrKzsKKwlkaXItPmRpcnNbZmlyc3RdID0gZDsKKwlyZXR1cm4gZDsKK30KKworc3RhdGljIHZvaWQgZG9faW52YWxpZGF0ZV9naXRpZ25vcmUoc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKmRpcikKK3sKKwlpbnQgaTsKKwlkaXItPnZhbGlkID0gMDsKKwlkaXItPnVudHJhY2tlZF9uciA9IDA7CisJZm9yIChpID0gMDsgaSA8IGRpci0+ZGlyc19ucjsgaSsrKQorCQlkb19pbnZhbGlkYXRlX2dpdGlnbm9yZShkaXItPmRpcnNbaV0pOworfQorCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX2dpdGlnbm9yZShzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YywKKwkJCQkgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKmRpcikKK3sKKwl1Yy0+Z2l0aWdub3JlX2ludmFsaWRhdGVkKys7CisJZG9faW52YWxpZGF0ZV9naXRpZ25vcmUoZGlyKTsKK30KKworc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9kaXJlY3Rvcnkoc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdWMsCisJCQkJIHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpkaXIpCit7CisJaW50IGk7CisKKwkvKgorCSAqIEludmFsaWRhdGlvbiBpbmNyZW1lbnQgaGVyZSBpcyBqdXN0IHJvdWdobHkgY29ycmVjdC4gSWYKKwkgKiB1bnRyYWNrZWRfbnIgb3IgYW55IG9mIGRpcnNbXS5yZWN1cnNlIGlzIG5vbi16ZXJvLCB3ZQorCSAqIHNob3VsZCBpbmNyZW1lbnQgZGlyX2ludmFsaWRhdGVkIHRvby4gQnV0IHRoYXQncyBtb3JlCisJICogZXhwZW5zaXZlIHRvIGRvLgorCSAqLworCWlmIChkaXItPnZhbGlkKQorCQl1Yy0+ZGlyX2ludmFsaWRhdGVkKys7CisKKwlkaXItPnZhbGlkID0gMDsKKwlkaXItPnVudHJhY2tlZF9uciA9IDA7CisJZm9yIChpID0gMDsgaSA8IGRpci0+ZGlyc19ucjsgaSsrKQorCQlkaXItPmRpcnNbaV0tPnJlY3Vyc2UgPSAwOworfQorCitzdGF0aWMgaW50IGFkZF9wYXR0ZXJuc19mcm9tX2J1ZmZlcihjaGFyICpidWYsIHNpemVfdCBzaXplLAorCQkJCSAgICBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKKwkJCQkgICAgc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwpOworCisvKgorICogR2l2ZW4gYSBmaWxlIHdpdGggbmFtZSAiZm5hbWUiLCByZWFkIGl0IChlaXRoZXIgZnJvbSBkaXNrLCBvciBmcm9tCisgKiBhbiBpbmRleCBpZiAnaXN0YXRlJyBpcyBub24tbnVsbCksIHBhcnNlIGl0IGFuZCBzdG9yZSB0aGUKKyAqIGV4Y2x1ZGUgcnVsZXMgaW4gInBsIi4KKyAqCisgKiBJZiAic3MiIGlzIG5vdCBOVUxMLCBjb21wdXRlIFNIQS0xIG9mIHRoZSBleGNsdWRlIGZpbGUgYW5kIGZpbGwKKyAqIHN0YXQgZGF0YSBmcm9tIGRpc2sgKG9ubHkgdmFsaWQgaWYgYWRkX3BhdHRlcm5zIHJldHVybnMgemVybykuIElmCisgKiBzc192YWxpZCBpcyBub24temVybywgInNzIiBtdXN0IGNvbnRhaW4gZ29vZCB2YWx1ZSBhcyBpbnB1dC4KKyAqLworc3RhdGljIGludCBhZGRfcGF0dGVybnMoY29uc3QgY2hhciAqZm5hbWUsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkJc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJc3RydWN0IG9pZF9zdGF0ICpvaWRfc3RhdCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgcjsKKwlpbnQgZmQ7CisJc2l6ZV90IHNpemUgPSAwOworCWNoYXIgKmJ1ZjsKKworCWZkID0gb3BlbihmbmFtZSwgT19SRE9OTFkpOworCWlmIChmZCA8IDAgfHwgZnN0YXQoZmQsICZzdCkgPCAwKSB7CisJCWlmIChmZCA8IDApCisJCQl3YXJuX29uX2ZvcGVuX2Vycm9ycyhmbmFtZSk7CisJCWVsc2UKKwkJCWNsb3NlKGZkKTsKKwkJaWYgKCFpc3RhdGUpCisJCQlyZXR1cm4gLTE7CisJCXIgPSByZWFkX3NraXBfd29ya3RyZWVfZmlsZV9mcm9tX2luZGV4KGlzdGF0ZSwgZm5hbWUsCisJCQkJCQkgICAgICAgJnNpemUsICZidWYsCisJCQkJCQkgICAgICAgb2lkX3N0YXQpOworCQlpZiAociAhPSAxKQorCQkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJc2l6ZSA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisJCWlmIChzaXplID09IDApIHsKKwkJCWlmIChvaWRfc3RhdCkgeworCQkJCWZpbGxfc3RhdF9kYXRhKCZvaWRfc3RhdC0+c3RhdCwgJnN0KTsKKwkJCQlvaWRjcHkoJm9pZF9zdGF0LT5vaWQsIHRoZV9oYXNoX2FsZ28tPmVtcHR5X2Jsb2IpOworCQkJCW9pZF9zdGF0LT52YWxpZCA9IDE7CisJCQl9CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlidWYgPSB4bWFsbG9jeihzaXplKTsKKwkJaWYgKHJlYWRfaW5fZnVsbChmZCwgYnVmLCBzaXplKSAhPSBzaXplKSB7CisJCQlmcmVlKGJ1Zik7CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYnVmW3NpemUrK10gPSAnXG4nOworCQljbG9zZShmZCk7CisJCWlmIChvaWRfc3RhdCkgeworCQkJaW50IHBvczsKKwkJCWlmIChvaWRfc3RhdC0+dmFsaWQgJiYKKwkJCSAgICAhbWF0Y2hfc3RhdF9kYXRhX3JhY3koaXN0YXRlLCAmb2lkX3N0YXQtPnN0YXQsICZzdCkpCisJCQkJOyAvKiBubyBjb250ZW50IGNoYW5nZSwgc3MtPnNoYTEgc3RpbGwgZ29vZCAqLworCQkJZWxzZSBpZiAoaXN0YXRlICYmCisJCQkJIChwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIGZuYW1lLCBzdHJsZW4oZm5hbWUpKSkgPj0gMCAmJgorCQkJCSAhY2Vfc3RhZ2UoaXN0YXRlLT5jYWNoZVtwb3NdKSAmJgorCQkJCSBjZV91cHRvZGF0ZShpc3RhdGUtPmNhY2hlW3Bvc10pICYmCisJCQkJICF3b3VsZF9jb252ZXJ0X3RvX2dpdChpc3RhdGUsIGZuYW1lKSkKKwkJCQlvaWRjcHkoJm9pZF9zdGF0LT5vaWQsCisJCQkJICAgICAgICZpc3RhdGUtPmNhY2hlW3Bvc10tPm9pZCk7CisJCQllbHNlCisJCQkJaGFzaF9vYmplY3RfZmlsZSh0aGVfaGFzaF9hbGdvLCBidWYsIHNpemUsCisJCQkJCQkgImJsb2IiLCAmb2lkX3N0YXQtPm9pZCk7CisJCQlmaWxsX3N0YXRfZGF0YSgmb2lkX3N0YXQtPnN0YXQsICZzdCk7CisJCQlvaWRfc3RhdC0+dmFsaWQgPSAxOworCQl9CisJfQorCisJYWRkX3BhdHRlcm5zX2Zyb21fYnVmZmVyKGJ1Ziwgc2l6ZSwgYmFzZSwgYmFzZWxlbiwgcGwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9wYXR0ZXJuc19mcm9tX2J1ZmZlcihjaGFyICpidWYsIHNpemVfdCBzaXplLAorCQkJCSAgICBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKKwkJCQkgICAgc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwpCit7CisJaW50IGksIGxpbmVubyA9IDE7CisJY2hhciAqZW50cnk7CisKKwloYXNobWFwX2luaXQoJnBsLT5yZWN1cnNpdmVfaGFzaG1hcCwgcGxfaGFzaG1hcF9jbXAsIE5VTEwsIDApOworCWhhc2htYXBfaW5pdCgmcGwtPnBhcmVudF9oYXNobWFwLCBwbF9oYXNobWFwX2NtcCwgTlVMTCwgMCk7CisKKwlwbC0+ZmlsZWJ1ZiA9IGJ1ZjsKKworCWlmIChza2lwX3V0ZjhfYm9tKCZidWYsIHNpemUpKQorCQlzaXplIC09IGJ1ZiAtIHBsLT5maWxlYnVmOworCisJZW50cnkgPSBidWY7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCWlmIChidWZbaV0gPT0gJ1xuJykgeworCQkJaWYgKGVudHJ5ICE9IGJ1ZiArIGkgJiYgZW50cnlbMF0gIT0gJyMnKSB7CisJCQkJYnVmW2kgLSAoaSAmJiBidWZbaS0xXSA9PSAnXHInKV0gPSAwOworCQkJCXRyaW1fdHJhaWxpbmdfc3BhY2VzKGVudHJ5KTsKKwkJCQlhZGRfcGF0dGVybihlbnRyeSwgYmFzZSwgYmFzZWxlbiwgcGwsIGxpbmVubyk7CisJCQl9CisJCQlsaW5lbm8rKzsKKwkJCWVudHJ5ID0gYnVmICsgaSArIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBhZGRfcGF0dGVybnNfZnJvbV9maWxlX3RvX2xpc3QoY29uc3QgY2hhciAqZm5hbWUsIGNvbnN0IGNoYXIgKmJhc2UsCisJCQkJICAgaW50IGJhc2VsZW4sIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLAorCQkJCSAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXJldHVybiBhZGRfcGF0dGVybnMoZm5hbWUsIGJhc2UsIGJhc2VsZW4sIHBsLCBpc3RhdGUsIE5VTEwpOworfQorCitpbnQgYWRkX3BhdHRlcm5zX2Zyb21fYmxvYl90b19saXN0KAorCXN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwljb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKKwlzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCkKK3sKKwljaGFyICpidWY7CisJc2l6ZV90IHNpemU7CisJaW50IHI7CisKKwlyID0gZG9fcmVhZF9ibG9iKG9pZCwgTlVMTCwgJnNpemUsICZidWYpOworCWlmIChyICE9IDEpCisJCXJldHVybiByOworCisJYWRkX3BhdHRlcm5zX2Zyb21fYnVmZmVyKGJ1Ziwgc2l6ZSwgYmFzZSwgYmFzZWxlbiwgcGwpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGF0dGVybl9saXN0ICphZGRfcGF0dGVybl9saXN0KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkJICAgICAgaW50IGdyb3VwX3R5cGUsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwlzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbDsKKwlzdHJ1Y3QgZXhjbHVkZV9saXN0X2dyb3VwICpncm91cDsKKworCWdyb3VwID0gJmRpci0+ZXhjbHVkZV9saXN0X2dyb3VwW2dyb3VwX3R5cGVdOworCUFMTE9DX0dST1coZ3JvdXAtPnBsLCBncm91cC0+bnIgKyAxLCBncm91cC0+YWxsb2MpOworCXBsID0gJmdyb3VwLT5wbFtncm91cC0+bnIrK107CisJbWVtc2V0KHBsLCAwLCBzaXplb2YoKnBsKSk7CisJcGwtPnNyYyA9IHNyYzsKKwlyZXR1cm4gcGw7Cit9CisKKy8qCisgKiBVc2VkIHRvIHNldCB1cCBjb3JlLmV4Y2x1ZGVzZmlsZSBhbmQgLmdpdC9pbmZvL2V4Y2x1ZGUgbGlzdHMuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9wYXR0ZXJuc19mcm9tX2ZpbGVfMShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpmbmFtZSwKKwkJCQkgICAgIHN0cnVjdCBvaWRfc3RhdCAqb2lkX3N0YXQpCit7CisJc3RydWN0IHBhdHRlcm5fbGlzdCAqcGw7CisJLyoKKwkgKiBjYXRjaCBzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygpIHRoYXQncyBjYWxsZWQgYmVmb3JlCisJICogZGlyLT51bnRyYWNrZWQgaXMgYXNzaWduZWQuIFRoYXQgZnVuY3Rpb24gYmVoYXZlcworCSAqIGRpZmZlcmVudGx5IHdoZW4gZGlyLT51bnRyYWNrZWQgaXMgbm9uLU5VTEwuCisJICovCisJaWYgKCFkaXItPnVudHJhY2tlZCkKKwkJZGlyLT51bm1hbmFnZWRfZXhjbHVkZV9maWxlcysrOworCXBsID0gYWRkX3BhdHRlcm5fbGlzdChkaXIsIEVYQ19GSUxFLCBmbmFtZSk7CisJaWYgKGFkZF9wYXR0ZXJucyhmbmFtZSwgIiIsIDAsIHBsLCBOVUxMLCBvaWRfc3RhdCkgPCAwKQorCQlkaWUoXygiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiKSwgZm5hbWUpOworfQorCit2b2lkIGFkZF9wYXR0ZXJuc19mcm9tX2ZpbGUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqZm5hbWUpCit7CisJZGlyLT51bm1hbmFnZWRfZXhjbHVkZV9maWxlcysrOyAvKiBzZWUgdmFsaWRhdGVfdW50cmFja2VkX2NhY2hlKCkgKi8KKwlhZGRfcGF0dGVybnNfZnJvbV9maWxlXzEoZGlyLCBmbmFtZSwgTlVMTCk7Cit9CisKK2ludCBtYXRjaF9iYXNlbmFtZShjb25zdCBjaGFyICpiYXNlbmFtZSwgaW50IGJhc2VuYW1lbGVuLAorCQkgICBjb25zdCBjaGFyICpwYXR0ZXJuLCBpbnQgcHJlZml4LCBpbnQgcGF0dGVybmxlbiwKKwkJICAgdW5zaWduZWQgZmxhZ3MpCit7CisJaWYgKHByZWZpeCA9PSBwYXR0ZXJubGVuKSB7CisJCWlmIChwYXR0ZXJubGVuID09IGJhc2VuYW1lbGVuICYmCisJCSAgICAhZnNwYXRobmNtcChwYXR0ZXJuLCBiYXNlbmFtZSwgYmFzZW5hbWVsZW4pKQorCQkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChmbGFncyAmIFBBVFRFUk5fRkxBR19FTkRTV0lUSCkgeworCQkvKiAiKmxpdGVyYWwiIG1hdGNoaW5nIGFnYWluc3QgImZvb2xpdGVyYWwiICovCisJCWlmIChwYXR0ZXJubGVuIC0gMSA8PSBiYXNlbmFtZWxlbiAmJgorCQkgICAgIWZzcGF0aG5jbXAocGF0dGVybiArIDEsCisJCQkJICAgYmFzZW5hbWUgKyBiYXNlbmFtZWxlbiAtIChwYXR0ZXJubGVuIC0gMSksCisJCQkJICAgcGF0dGVybmxlbiAtIDEpKQorCQkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJaWYgKGZubWF0Y2hfaWNhc2VfbWVtKHBhdHRlcm4sIHBhdHRlcm5sZW4sCisJCQkJICAgICAgYmFzZW5hbWUsIGJhc2VuYW1lbGVuLAorCQkJCSAgICAgIDApID09IDApCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBtYXRjaF9wYXRobmFtZShjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IHBhdGhsZW4sCisJCSAgIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkgICBjb25zdCBjaGFyICpwYXR0ZXJuLCBpbnQgcHJlZml4LCBpbnQgcGF0dGVybmxlbiwKKwkJICAgdW5zaWduZWQgZmxhZ3MpCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgbmFtZWxlbjsKKworCS8qCisJICogbWF0Y2ggd2l0aCBGTk1fUEFUSE5BTUU7IHRoZSBwYXR0ZXJuIGhhcyBiYXNlIGltcGxpY2l0bHkKKwkgKiBpbiBmcm9udCBvZiBpdC4KKwkgKi8KKwlpZiAoKnBhdHRlcm4gPT0gJy8nKSB7CisJCXBhdHRlcm4rKzsKKwkJcGF0dGVybmxlbi0tOworCQlwcmVmaXgtLTsKKwl9CisKKwkvKgorCSAqIGJhc2VsZW4gZG9lcyBub3QgY291bnQgdGhlIHRyYWlsaW5nIHNsYXNoLiBiYXNlW10gbWF5IG9yCisJICogbWF5IG5vdCBlbmQgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIHRob3VnaC4KKwkgKi8KKwlpZiAocGF0aGxlbiA8IGJhc2VsZW4gKyAxIHx8CisJICAgIChiYXNlbGVuICYmIHBhdGhuYW1lW2Jhc2VsZW5dICE9ICcvJykgfHwKKwkgICAgZnNwYXRobmNtcChwYXRobmFtZSwgYmFzZSwgYmFzZWxlbikpCisJCXJldHVybiAwOworCisJbmFtZWxlbiA9IGJhc2VsZW4gPyBwYXRobGVuIC0gYmFzZWxlbiAtIDEgOiBwYXRobGVuOworCW5hbWUgPSBwYXRobmFtZSArIHBhdGhsZW4gLSBuYW1lbGVuOworCisJaWYgKHByZWZpeCkgeworCQkvKgorCQkgKiBpZiB0aGUgbm9uLXdpbGRjYXJkIHBhcnQgaXMgbG9uZ2VyIHRoYW4gdGhlCisJCSAqIHJlbWFpbmluZyBwYXRobmFtZSwgc3VyZWx5IGl0IGNhbm5vdCBtYXRjaC4KKwkJICovCisJCWlmIChwcmVmaXggPiBuYW1lbGVuKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKGZzcGF0aG5jbXAocGF0dGVybiwgbmFtZSwgcHJlZml4KSkKKwkJCXJldHVybiAwOworCQlwYXR0ZXJuICs9IHByZWZpeDsKKwkJcGF0dGVybmxlbiAtPSBwcmVmaXg7CisJCW5hbWUgICAgKz0gcHJlZml4OworCQluYW1lbGVuIC09IHByZWZpeDsKKworCQkvKgorCQkgKiBJZiB0aGUgd2hvbGUgcGF0dGVybiBkaWQgbm90IGhhdmUgYSB3aWxkY2FyZCwKKwkJICogdGhlbiBvdXIgcHJlZml4IG1hdGNoIGlzIGFsbCB3ZSBuZWVkOyB3ZQorCQkgKiBkbyBub3QgbmVlZCB0byBjYWxsIGZubWF0Y2ggYXQgYWxsLgorCQkgKi8KKwkJaWYgKCFwYXR0ZXJubGVuICYmICFuYW1lbGVuKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIGZubWF0Y2hfaWNhc2VfbWVtKHBhdHRlcm4sIHBhdHRlcm5sZW4sCisJCQkJIG5hbWUsIG5hbWVsZW4sCisJCQkJIFdNX1BBVEhOQU1FKSA9PSAwOworfQorCisvKgorICogU2NhbiB0aGUgZ2l2ZW4gZXhjbHVkZSBsaXN0IGluIHJldmVyc2UgdG8gc2VlIHdoZXRoZXIgcGF0aG5hbWUKKyAqIHNob3VsZCBiZSBpZ25vcmVkLiAgVGhlIGZpcnN0IG1hdGNoIChpLmUuIHRoZSBsYXN0IG9uIHRoZSBsaXN0KSwgaWYKKyAqIGFueSwgZGV0ZXJtaW5lcyB0aGUgZmF0ZS4gIFJldHVybnMgdGhlIGV4Y2x1ZGVfbGlzdCBlbGVtZW50IHdoaWNoCisgKiBtYXRjaGVkLCBvciBOVUxMIGZvciB1bmRlY2lkZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGF0aF9wYXR0ZXJuICpsYXN0X21hdGNoaW5nX3BhdHRlcm5fZnJvbV9saXN0KGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorCQkJCQkJICAgICAgIGludCBwYXRobGVuLAorCQkJCQkJICAgICAgIGNvbnN0IGNoYXIgKmJhc2VuYW1lLAorCQkJCQkJICAgICAgIGludCAqZHR5cGUsCisJCQkJCQkgICAgICAgc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwsCisJCQkJCQkgICAgICAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3RydWN0IHBhdGhfcGF0dGVybiAqcmVzID0gTlVMTDsgLyogdW5kZWNpZGVkICovCisJaW50IGk7CisKKwlpZiAoIXBsLT5ucikKKwkJcmV0dXJuIE5VTEw7CS8qIHVuZGVmaW5lZCAqLworCisJZm9yIChpID0gcGwtPm5yIC0gMTsgMCA8PSBpOyBpLS0pIHsKKwkJc3RydWN0IHBhdGhfcGF0dGVybiAqcGF0dGVybiA9IHBsLT5wYXR0ZXJuc1tpXTsKKwkJY29uc3QgY2hhciAqZXhjbHVkZSA9IHBhdHRlcm4tPnBhdHRlcm47CisJCWludCBwcmVmaXggPSBwYXR0ZXJuLT5ub3dpbGRjYXJkbGVuOworCisJCWlmIChwYXR0ZXJuLT5mbGFncyAmIFBBVFRFUk5fRkxBR19NVVNUQkVESVIpIHsKKwkJCSpkdHlwZSA9IHJlc29sdmVfZHR5cGUoKmR0eXBlLCBpc3RhdGUsIHBhdGhuYW1lLCBwYXRobGVuKTsKKwkJCWlmICgqZHR5cGUgIT0gRFRfRElSKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHBhdHRlcm4tPmZsYWdzICYgUEFUVEVSTl9GTEFHX05PRElSKSB7CisJCQlpZiAobWF0Y2hfYmFzZW5hbWUoYmFzZW5hbWUsCisJCQkJCSAgIHBhdGhsZW4gLSAoYmFzZW5hbWUgLSBwYXRobmFtZSksCisJCQkJCSAgIGV4Y2x1ZGUsIHByZWZpeCwgcGF0dGVybi0+cGF0dGVybmxlbiwKKwkJCQkJICAgcGF0dGVybi0+ZmxhZ3MpKSB7CisJCQkJcmVzID0gcGF0dGVybjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYXNzZXJ0KHBhdHRlcm4tPmJhc2VsZW4gPT0gMCB8fAorCQkgICAgICAgcGF0dGVybi0+YmFzZVtwYXR0ZXJuLT5iYXNlbGVuIC0gMV0gPT0gJy8nKTsKKwkJaWYgKG1hdGNoX3BhdGhuYW1lKHBhdGhuYW1lLCBwYXRobGVuLAorCQkJCSAgIHBhdHRlcm4tPmJhc2UsCisJCQkJICAgcGF0dGVybi0+YmFzZWxlbiA/IHBhdHRlcm4tPmJhc2VsZW4gLSAxIDogMCwKKwkJCQkgICBleGNsdWRlLCBwcmVmaXgsIHBhdHRlcm4tPnBhdHRlcm5sZW4sCisJCQkJICAgcGF0dGVybi0+ZmxhZ3MpKSB7CisJCQlyZXMgPSBwYXR0ZXJuOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIFNjYW4gdGhlIGxpc3Qgb2YgcGF0dGVybnMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBvcmRlcmVkIGxpc3QKKyAqIG9mIHBhdHRlcm5zIG1hdGNoZXMgb24gJ3BhdGhuYW1lJy4KKyAqCisgKiBSZXR1cm4gMSBmb3IgYSBtYXRjaCwgMCBmb3Igbm90IG1hdGNoZWQgYW5kIC0xIGZvciB1bmRlY2lkZWQuCisgKi8KK2VudW0gcGF0dGVybl9tYXRjaF9yZXN1bHQgcGF0aF9tYXRjaGVzX3BhdHRlcm5fbGlzdCgKKwkJCQljb25zdCBjaGFyICpwYXRobmFtZSwgaW50IHBhdGhsZW4sCisJCQkJY29uc3QgY2hhciAqYmFzZW5hbWUsIGludCAqZHR5cGUsCisJCQkJc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwsCisJCQkJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3RydWN0IHBhdGhfcGF0dGVybiAqcGF0dGVybjsKKwlzdHJ1Y3Qgc3RyYnVmIHBhcmVudF9wYXRobmFtZSA9IFNUUkJVRl9JTklUOworCWludCByZXN1bHQgPSBOT1RfTUFUQ0hFRDsKKwljb25zdCBjaGFyICpzbGFzaF9wb3M7CisKKwlpZiAoIXBsLT51c2VfY29uZV9wYXR0ZXJucykgeworCQlwYXR0ZXJuID0gbGFzdF9tYXRjaGluZ19wYXR0ZXJuX2Zyb21fbGlzdChwYXRobmFtZSwgcGF0aGxlbiwgYmFzZW5hbWUsCisJCQkJCQkJZHR5cGUsIHBsLCBpc3RhdGUpOworCQlpZiAocGF0dGVybikgeworCQkJaWYgKHBhdHRlcm4tPmZsYWdzICYgUEFUVEVSTl9GTEFHX05FR0FUSVZFKQorCQkJCXJldHVybiBOT1RfTUFUQ0hFRDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gTUFUQ0hFRDsKKwkJfQorCisJCXJldHVybiBVTkRFQ0lERUQ7CisJfQorCisJaWYgKHBsLT5mdWxsX2NvbmUpCisJCXJldHVybiBNQVRDSEVEOworCisJc3RyYnVmX2FkZGNoKCZwYXJlbnRfcGF0aG5hbWUsICcvJyk7CisJc3RyYnVmX2FkZCgmcGFyZW50X3BhdGhuYW1lLCBwYXRobmFtZSwgcGF0aGxlbik7CisKKwlpZiAoaGFzaG1hcF9jb250YWluc19wYXRoKCZwbC0+cmVjdXJzaXZlX2hhc2htYXAsCisJCQkJICAmcGFyZW50X3BhdGhuYW1lKSkgeworCQlyZXN1bHQgPSBNQVRDSEVEX1JFQ1VSU0lWRTsKKwkJZ290byBkb25lOworCX0KKworCXNsYXNoX3BvcyA9IHN0cnJjaHIocGFyZW50X3BhdGhuYW1lLmJ1ZiwgJy8nKTsKKworCWlmIChzbGFzaF9wb3MgPT0gcGFyZW50X3BhdGhuYW1lLmJ1ZikgeworCQkvKiBpbmNsdWRlIGV2ZXJ5IGZpbGUgaW4gcm9vdCAqLworCQlyZXN1bHQgPSBNQVRDSEVEOworCQlnb3RvIGRvbmU7CisJfQorCisJc3RyYnVmX3NldGxlbigmcGFyZW50X3BhdGhuYW1lLCBzbGFzaF9wb3MgLSBwYXJlbnRfcGF0aG5hbWUuYnVmKTsKKworCWlmIChoYXNobWFwX2NvbnRhaW5zX3BhdGgoJnBsLT5wYXJlbnRfaGFzaG1hcCwgJnBhcmVudF9wYXRobmFtZSkpIHsKKwkJcmVzdWx0ID0gTUFUQ0hFRDsKKwkJZ290byBkb25lOworCX0KKworCWlmIChoYXNobWFwX2NvbnRhaW5zX3BhcmVudCgmcGwtPnJlY3Vyc2l2ZV9oYXNobWFwLAorCQkJCSAgICBwYXRobmFtZSwKKwkJCQkgICAgJnBhcmVudF9wYXRobmFtZSkpCisJCXJlc3VsdCA9IE1BVENIRURfUkVDVVJTSVZFOworCitkb25lOgorCXN0cmJ1Zl9yZWxlYXNlKCZwYXJlbnRfcGF0aG5hbWUpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGF0aF9wYXR0ZXJuICpsYXN0X21hdGNoaW5nX3BhdHRlcm5fZnJvbV9saXN0cygKKwkJc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCWNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgcGF0aGxlbiwKKwkJY29uc3QgY2hhciAqYmFzZW5hbWUsIGludCAqZHR5cGVfcCkKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgZXhjbHVkZV9saXN0X2dyb3VwICpncm91cDsKKwlzdHJ1Y3QgcGF0aF9wYXR0ZXJuICpwYXR0ZXJuOworCWZvciAoaSA9IEVYQ19DTURMOyBpIDw9IEVYQ19GSUxFOyBpKyspIHsKKwkJZ3JvdXAgPSAmZGlyLT5leGNsdWRlX2xpc3RfZ3JvdXBbaV07CisJCWZvciAoaiA9IGdyb3VwLT5uciAtIDE7IGogPj0gMDsgai0tKSB7CisJCQlwYXR0ZXJuID0gbGFzdF9tYXRjaGluZ19wYXR0ZXJuX2Zyb21fbGlzdCgKKwkJCQlwYXRobmFtZSwgcGF0aGxlbiwgYmFzZW5hbWUsIGR0eXBlX3AsCisJCQkJJmdyb3VwLT5wbFtqXSwgaXN0YXRlKTsKKwkJCWlmIChwYXR0ZXJuKQorCQkJCXJldHVybiBwYXR0ZXJuOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogTG9hZHMgdGhlIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBsaXN0IGZvciB0aGUgc3Vic3RyaW5nIG9mIGJhc2UKKyAqIHdoaWNoIGhhcyBhIGNoYXIgbGVuZ3RoIG9mIGJhc2VsZW4uCisgKi8KK3N0YXRpYyB2b2lkIHByZXBfZXhjbHVkZShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuKQoreworCXN0cnVjdCBleGNsdWRlX2xpc3RfZ3JvdXAgKmdyb3VwOworCXN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsOworCXN0cnVjdCBleGNsdWRlX3N0YWNrICpzdGsgPSBOVUxMOworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQ7CisJaW50IGN1cnJlbnQ7CisKKwlncm91cCA9ICZkaXItPmV4Y2x1ZGVfbGlzdF9ncm91cFtFWENfRElSU107CisKKwkvKgorCSAqIFBvcCB0aGUgZXhjbHVkZSBsaXN0cyBmcm9tIHRoZSBFWENMX0RJUlMgZXhjbHVkZV9saXN0X2dyb3VwCisJICogd2hpY2ggb3JpZ2luYXRlIGZyb20gZGlyZWN0b3JpZXMgbm90IGluIHRoZSBwcmVmaXggb2YgdGhlCisJICogcGF0aCBiZWluZyBjaGVja2VkLgorCSAqLworCXdoaWxlICgoc3RrID0gZGlyLT5leGNsdWRlX3N0YWNrKSAhPSBOVUxMKSB7CisJCWlmIChzdGstPmJhc2VsZW4gPD0gYmFzZWxlbiAmJgorCQkgICAgIXN0cm5jbXAoZGlyLT5iYXNlYnVmLmJ1ZiwgYmFzZSwgc3RrLT5iYXNlbGVuKSkKKwkJCWJyZWFrOworCQlwbCA9ICZncm91cC0+cGxbZGlyLT5leGNsdWRlX3N0YWNrLT5leGNsdWRlX2l4XTsKKwkJZGlyLT5leGNsdWRlX3N0YWNrID0gc3RrLT5wcmV2OworCQlkaXItPnBhdHRlcm4gPSBOVUxMOworCQlmcmVlKChjaGFyICopcGwtPnNyYyk7IC8qIHNlZSBzdHJidWZfZGV0YWNoKCkgYmVsb3cgKi8KKwkJY2xlYXJfcGF0dGVybl9saXN0KHBsKTsKKwkJZnJlZShzdGspOworCQlncm91cC0+bnItLTsKKwl9CisKKwkvKiBTa2lwIHRyYXZlcnNpbmcgaW50byBzdWIgZGlyZWN0b3JpZXMgaWYgdGhlIHBhcmVudCBpcyBleGNsdWRlZCAqLworCWlmIChkaXItPnBhdHRlcm4pCisJCXJldHVybjsKKworCS8qCisJICogTGF6eSBpbml0aWFsaXphdGlvbi4gQWxsIGNhbGwgc2l0ZXMgY3VycmVudGx5IGp1c3QKKwkgKiBtZW1zZXQoZGlyLCAwLCBzaXplb2YoKmRpcikpIGJlZm9yZSB1c2UuIENoYW5naW5nIGFsbCBvZgorCSAqIHRoZW0gc2VlbXMgbG90cyBvZiB3b3JrIGZvciBsaXR0bGUgYmVuZWZpdC4KKwkgKi8KKwlpZiAoIWRpci0+YmFzZWJ1Zi5idWYpCisJCXN0cmJ1Zl9pbml0KCZkaXItPmJhc2VidWYsIFBBVEhfTUFYKTsKKworCS8qIFJlYWQgZnJvbSB0aGUgcGFyZW50IGRpcmVjdG9yaWVzIGFuZCBwdXNoIHRoZW0gZG93bi4gKi8KKwljdXJyZW50ID0gc3RrID8gc3RrLT5iYXNlbGVuIDogLTE7CisJc3RyYnVmX3NldGxlbigmZGlyLT5iYXNlYnVmLCBjdXJyZW50IDwgMCA/IDAgOiBjdXJyZW50KTsKKwlpZiAoZGlyLT51bnRyYWNrZWQpCisJCXVudHJhY2tlZCA9IHN0ayA/IHN0ay0+dWNkIDogZGlyLT51bnRyYWNrZWQtPnJvb3Q7CisJZWxzZQorCQl1bnRyYWNrZWQgPSBOVUxMOworCisJd2hpbGUgKGN1cnJlbnQgPCBiYXNlbGVuKSB7CisJCWNvbnN0IGNoYXIgKmNwOworCQlzdHJ1Y3Qgb2lkX3N0YXQgb2lkX3N0YXQ7CisKKwkJc3RrID0geGNhbGxvYygxLCBzaXplb2YoKnN0aykpOworCQlpZiAoY3VycmVudCA8IDApIHsKKwkJCWNwID0gYmFzZTsKKwkJCWN1cnJlbnQgPSAwOworCQl9IGVsc2UgeworCQkJY3AgPSBzdHJjaHIoYmFzZSArIGN1cnJlbnQgKyAxLCAnLycpOworCQkJaWYgKCFjcCkKKwkJCQlkaWUoIm9vcHMgaW4gcHJlcF9leGNsdWRlIik7CisJCQljcCsrOworCQkJdW50cmFja2VkID0KKwkJCQlsb29rdXBfdW50cmFja2VkKGRpci0+dW50cmFja2VkLCB1bnRyYWNrZWQsCisJCQkJCQkgYmFzZSArIGN1cnJlbnQsCisJCQkJCQkgY3AgLSBiYXNlIC0gY3VycmVudCk7CisJCX0KKwkJc3RrLT5wcmV2ID0gZGlyLT5leGNsdWRlX3N0YWNrOworCQlzdGstPmJhc2VsZW4gPSBjcCAtIGJhc2U7CisJCXN0ay0+ZXhjbHVkZV9peCA9IGdyb3VwLT5ucjsKKwkJc3RrLT51Y2QgPSB1bnRyYWNrZWQ7CisJCXBsID0gYWRkX3BhdHRlcm5fbGlzdChkaXIsIEVYQ19ESVJTLCBOVUxMKTsKKwkJc3RyYnVmX2FkZCgmZGlyLT5iYXNlYnVmLCBiYXNlICsgY3VycmVudCwgc3RrLT5iYXNlbGVuIC0gY3VycmVudCk7CisJCWFzc2VydChzdGstPmJhc2VsZW4gPT0gZGlyLT5iYXNlYnVmLmxlbik7CisKKwkJLyogQWJvcnQgaWYgdGhlIGRpcmVjdG9yeSBpcyBleGNsdWRlZCAqLworCQlpZiAoc3RrLT5iYXNlbGVuKSB7CisJCQlpbnQgZHQgPSBEVF9ESVI7CisJCQlkaXItPmJhc2VidWYuYnVmW3N0ay0+YmFzZWxlbiAtIDFdID0gMDsKKwkJCWRpci0+cGF0dGVybiA9IGxhc3RfbWF0Y2hpbmdfcGF0dGVybl9mcm9tX2xpc3RzKGRpciwKKwkJCQkJCQkJCWlzdGF0ZSwKKwkJCQlkaXItPmJhc2VidWYuYnVmLCBzdGstPmJhc2VsZW4gLSAxLAorCQkJCWRpci0+YmFzZWJ1Zi5idWYgKyBjdXJyZW50LCAmZHQpOworCQkJZGlyLT5iYXNlYnVmLmJ1ZltzdGstPmJhc2VsZW4gLSAxXSA9ICcvJzsKKwkJCWlmIChkaXItPnBhdHRlcm4gJiYKKwkJCSAgICBkaXItPnBhdHRlcm4tPmZsYWdzICYgUEFUVEVSTl9GTEFHX05FR0FUSVZFKQorCQkJCWRpci0+cGF0dGVybiA9IE5VTEw7CisJCQlpZiAoZGlyLT5wYXR0ZXJuKSB7CisJCQkJZGlyLT5leGNsdWRlX3N0YWNrID0gc3RrOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCS8qIFRyeSB0byByZWFkIHBlci1kaXJlY3RvcnkgZmlsZSAqLworCQlvaWRjbHIoJm9pZF9zdGF0Lm9pZCk7CisJCW9pZF9zdGF0LnZhbGlkID0gMDsKKwkJaWYgKGRpci0+ZXhjbHVkZV9wZXJfZGlyICYmCisJCSAgICAvKgorCQkgICAgICogSWYgd2Uga25vdyB0aGF0IG5vIGZpbGVzIGhhdmUgYmVlbiBhZGRlZCBpbgorCQkgICAgICogdGhpcyBkaXJlY3RvcnkgKGkuZS4gdmFsaWRfY2FjaGVkX2RpcigpIGhhcworCQkgICAgICogYmVlbiBleGVjdXRlZCBhbmQgc2V0IHVudHJhY2tlZC0+dmFsaWQpIC4uCisJCSAgICAgKi8KKwkJICAgICghdW50cmFja2VkIHx8ICF1bnRyYWNrZWQtPnZhbGlkIHx8CisJCSAgICAgLyoKKwkJICAgICAgKiAuLiBhbmQgLmdpdGlnbm9yZSBkb2VzIG5vdCBleGlzdCBiZWZvcmUKKwkJICAgICAgKiAoaS5lLiBudWxsIGV4Y2x1ZGVfb2lkKS4gVGhlbiB3ZSBjYW4gc2tpcAorCQkgICAgICAqIGxvYWRpbmcgLmdpdGlnbm9yZSwgd2hpY2ggd291bGQgcmVzdWx0IGluCisJCSAgICAgICogRU5PRU5UIGFueXdheS4KKwkJICAgICAgKi8KKwkJICAgICAhaXNfbnVsbF9vaWQoJnVudHJhY2tlZC0+ZXhjbHVkZV9vaWQpKSkgeworCQkJLyoKKwkJCSAqIGRpci0+YmFzZWJ1ZiBnZXRzIHJldXNlZCBieSB0aGUgdHJhdmVyc2FsLCBidXQgd2UKKwkJCSAqIG5lZWQgZm5hbWUgdG8gcmVtYWluIHVuY2hhbmdlZCB0byBlbnN1cmUgdGhlIHNyYworCQkJICogbWVtYmVyIG9mIGVhY2ggc3RydWN0IHBhdGhfcGF0dGVybiBjb3JyZWN0bHkKKwkJCSAqIGJhY2stcmVmZXJlbmNlcyBpdHMgc291cmNlIGZpbGUuICBPdGhlciBpbnZvY2F0aW9ucworCQkJICogb2YgYWRkX3BhdHRlcm5fbGlzdCBwcm92aWRlIHN0YWJsZSBzdHJpbmdzLCBzbyB3ZQorCQkJICogc3RyYnVmX2RldGFjaCgpIGFuZCBmcmVlKCkgaGVyZSBpbiB0aGUgY2FsbGVyLgorCQkJICovCisJCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJidWZfYWRkYnVmKCZzYiwgJmRpci0+YmFzZWJ1Zik7CisJCQlzdHJidWZfYWRkc3RyKCZzYiwgZGlyLT5leGNsdWRlX3Blcl9kaXIpOworCQkJcGwtPnNyYyA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwkJCWFkZF9wYXR0ZXJucyhwbC0+c3JjLCBwbC0+c3JjLCBzdGstPmJhc2VsZW4sIHBsLCBpc3RhdGUsCisJCQkJICAgICB1bnRyYWNrZWQgPyAmb2lkX3N0YXQgOiBOVUxMKTsKKwkJfQorCQkvKgorCQkgKiBORUVEU1dPUks6IHdoZW4gdW50cmFja2VkIGNhY2hlIGlzIGVuYWJsZWQsIHByZXBfZXhjbHVkZSgpCisJCSAqIHdpbGwgZmlyc3QgYmUgY2FsbGVkIGluIHZhbGlkX2NhY2hlZF9kaXIoKSB0aGVuIG1heWJlIG1hbnkKKwkJICogdGltZXMgbW9yZSBpbiBsYXN0X21hdGNoaW5nX3BhdHRlcm4oKS4gV2hlbiB0aGUgY2FjaGUgaXMKKwkJICogdXNlZCwgbGFzdF9tYXRjaGluZ19wYXR0ZXJuKCkgd2lsbCBub3QgYmUgY2FsbGVkIGFuZAorCQkgKiByZWFkaW5nIC5naXRpZ25vcmUgY29udGVudCB3aWxsIGJlIGEgd2FzdGUuCisJCSAqCisJCSAqIFNvIHdoZW4gaXQncyBjYWxsZWQgYnkgdmFsaWRfY2FjaGVkX2RpcigpIGFuZCB3ZSBjYW4gZ2V0CisJCSAqIC5naXRpZ25vcmUgU0hBLTEgZnJvbSB0aGUgaW5kZXggKGkuZS4gLmdpdGlnbm9yZSBpcyBub3QKKwkJICogbW9kaWZpZWQgb24gd29yayB0cmVlKSwgd2UgY291bGQgZGVsYXkgcmVhZGluZyB0aGUKKwkJICogLmdpdGlnbm9yZSBjb250ZW50IHVudGlsIHdlIGFic29sdXRlbHkgbmVlZCBpdCBpbgorCQkgKiBsYXN0X21hdGNoaW5nX3BhdHRlcm4oKS4gQmUgY2FyZWZ1bCBhYm91dCBpZ25vcmUgcnVsZQorCQkgKiBvcmRlciwgdGhvdWdoLCBpZiB5b3UgZG8gdGhhdC4KKwkJICovCisJCWlmICh1bnRyYWNrZWQgJiYKKwkJICAgICFvaWRlcSgmb2lkX3N0YXQub2lkLCAmdW50cmFja2VkLT5leGNsdWRlX29pZCkpIHsKKwkJCWludmFsaWRhdGVfZ2l0aWdub3JlKGRpci0+dW50cmFja2VkLCB1bnRyYWNrZWQpOworCQkJb2lkY3B5KCZ1bnRyYWNrZWQtPmV4Y2x1ZGVfb2lkLCAmb2lkX3N0YXQub2lkKTsKKwkJfQorCQlkaXItPmV4Y2x1ZGVfc3RhY2sgPSBzdGs7CisJCWN1cnJlbnQgPSBzdGstPmJhc2VsZW47CisJfQorCXN0cmJ1Zl9zZXRsZW4oJmRpci0+YmFzZWJ1ZiwgYmFzZWxlbik7Cit9CisKKy8qCisgKiBMb2FkcyB0aGUgZXhjbHVkZSBsaXN0cyBmb3IgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHBhdGhuYW1lLCB0aGVuCisgKiBzY2FucyBhbGwgZXhjbHVkZSBsaXN0cyB0byBkZXRlcm1pbmUgd2hldGhlciBwYXRobmFtZSBpcyBleGNsdWRlZC4KKyAqIFJldHVybnMgdGhlIGV4Y2x1ZGVfbGlzdCBlbGVtZW50IHdoaWNoIG1hdGNoZWQsIG9yIE5VTEwgZm9yCisgKiB1bmRlY2lkZWQuCisgKi8KK3N0cnVjdCBwYXRoX3BhdHRlcm4gKmxhc3RfbWF0Y2hpbmdfcGF0dGVybihzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJCSAgICAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorCQkJCSAgICAgIGludCAqZHR5cGVfcCkKK3sKKwlpbnQgcGF0aGxlbiA9IHN0cmxlbihwYXRobmFtZSk7CisJY29uc3QgY2hhciAqYmFzZW5hbWUgPSBzdHJyY2hyKHBhdGhuYW1lLCAnLycpOworCWJhc2VuYW1lID0gKGJhc2VuYW1lKSA/IGJhc2VuYW1lKzEgOiBwYXRobmFtZTsKKworCXByZXBfZXhjbHVkZShkaXIsIGlzdGF0ZSwgcGF0aG5hbWUsIGJhc2VuYW1lLXBhdGhuYW1lKTsKKworCWlmIChkaXItPnBhdHRlcm4pCisJCXJldHVybiBkaXItPnBhdHRlcm47CisKKwlyZXR1cm4gbGFzdF9tYXRjaGluZ19wYXR0ZXJuX2Zyb21fbGlzdHMoZGlyLCBpc3RhdGUsIHBhdGhuYW1lLCBwYXRobGVuLAorCQkJYmFzZW5hbWUsIGR0eXBlX3ApOworfQorCisvKgorICogTG9hZHMgdGhlIGV4Y2x1ZGUgbGlzdHMgZm9yIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBwYXRobmFtZSwgdGhlbgorICogc2NhbnMgYWxsIGV4Y2x1ZGUgbGlzdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgcGF0aG5hbWUgaXMgZXhjbHVkZWQuCisgKiBSZXR1cm5zIDEgaWYgdHJ1ZSwgb3RoZXJ3aXNlIDAuCisgKi8KK2ludCBpc19leGNsdWRlZChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCAqZHR5cGVfcCkKK3sKKwlzdHJ1Y3QgcGF0aF9wYXR0ZXJuICpwYXR0ZXJuID0KKwkJbGFzdF9tYXRjaGluZ19wYXR0ZXJuKGRpciwgaXN0YXRlLCBwYXRobmFtZSwgZHR5cGVfcCk7CisJaWYgKHBhdHRlcm4pCisJCXJldHVybiBwYXR0ZXJuLT5mbGFncyAmIFBBVFRFUk5fRkxBR19ORUdBVElWRSA/IDAgOiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRpcl9lbnRyeSAqZGlyX2VudHJ5X25ldyhjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQ7CisKKwlGTEVYX0FMTE9DX01FTShlbnQsIG5hbWUsIHBhdGhuYW1lLCBsZW4pOworCWVudC0+bGVuID0gbGVuOworCXJldHVybiBlbnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlyX2VudHJ5ICpkaXJfYWRkX25hbWUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCQkgICAgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgICAgICBjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGxlbikKK3sKKwlpZiAoaW5kZXhfZmlsZV9leGlzdHMoaXN0YXRlLCBwYXRobmFtZSwgbGVuLCBpZ25vcmVfY2FzZSkpCisJCXJldHVybiBOVUxMOworCisJQUxMT0NfR1JPVyhkaXItPmVudHJpZXMsIGRpci0+bnIrMSwgZGlyLT5hbGxvYyk7CisJcmV0dXJuIGRpci0+ZW50cmllc1tkaXItPm5yKytdID0gZGlyX2VudHJ5X25ldyhwYXRobmFtZSwgbGVuKTsKK30KKworc3RydWN0IGRpcl9lbnRyeSAqZGlyX2FkZF9pZ25vcmVkKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkJICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgbGVuKQoreworCWlmICghaW5kZXhfbmFtZV9pc19vdGhlcihpc3RhdGUsIHBhdGhuYW1lLCBsZW4pKQorCQlyZXR1cm4gTlVMTDsKKworCUFMTE9DX0dST1coZGlyLT5pZ25vcmVkLCBkaXItPmlnbm9yZWRfbnIrMSwgZGlyLT5pZ25vcmVkX2FsbG9jKTsKKwlyZXR1cm4gZGlyLT5pZ25vcmVkW2Rpci0+aWdub3JlZF9ucisrXSA9IGRpcl9lbnRyeV9uZXcocGF0aG5hbWUsIGxlbik7Cit9CisKK2VudW0gZXhpc3Rfc3RhdHVzIHsKKwlpbmRleF9ub25leGlzdGVudCA9IDAsCisJaW5kZXhfZGlyZWN0b3J5LAorCWluZGV4X2dpdGRpcgorfTsKKworLyoKKyAqIERvIG5vdCB1c2UgdGhlIGFscGhhYmV0aWNhbGx5IHNvcnRlZCBpbmRleCB0byBsb29rIHVwCisgKiB0aGUgZGlyZWN0b3J5IG5hbWU7IGluc3RlYWQsIHVzZSB0aGUgY2FzZSBpbnNlbnNpdGl2ZQorICogZGlyZWN0b3J5IGhhc2guCisgKi8KK3N0YXRpYyBlbnVtIGV4aXN0X3N0YXR1cyBkaXJlY3RvcnlfZXhpc3RzX2luX2luZGV4X2ljYXNlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQkJCSBjb25zdCBjaGFyICpkaXJuYW1lLCBpbnQgbGVuKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwlpZiAoaW5kZXhfZGlyX2V4aXN0cyhpc3RhdGUsIGRpcm5hbWUsIGxlbikpCisJCXJldHVybiBpbmRleF9kaXJlY3Rvcnk7CisKKwljZSA9IGluZGV4X2ZpbGVfZXhpc3RzKGlzdGF0ZSwgZGlybmFtZSwgbGVuLCBpZ25vcmVfY2FzZSk7CisJaWYgKGNlICYmIFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJcmV0dXJuIGluZGV4X2dpdGRpcjsKKworCXJldHVybiBpbmRleF9ub25leGlzdGVudDsKK30KKworLyoKKyAqIFRoZSBpbmRleCBzb3J0cyBhbHBoYWJldGljYWxseSBieSBlbnRyeSBuYW1lLCB3aGljaAorICogbWVhbnMgdGhhdCBhIGdpdGxpbmsgc29ydHMgYXMgJ1wwJyBhdCB0aGUgZW5kLCB3aGlsZQorICogYSBkaXJlY3RvcnkgKHdoaWNoIGlzIGRlZmluZWQgbm90IGFzIGFuIGVudHJ5LCBidXQgYXMKKyAqIHRoZSBmaWxlcyBpdCBjb250YWlucykgd2lsbCBzb3J0IHdpdGggdGhlICcvJyBhdCB0aGUKKyAqIGVuZC4KKyAqLworc3RhdGljIGVudW0gZXhpc3Rfc3RhdHVzIGRpcmVjdG9yeV9leGlzdHNfaW5faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCQkgICBjb25zdCBjaGFyICpkaXJuYW1lLCBpbnQgbGVuKQoreworCWludCBwb3M7CisKKwlpZiAoaWdub3JlX2Nhc2UpCisJCXJldHVybiBkaXJlY3RvcnlfZXhpc3RzX2luX2luZGV4X2ljYXNlKGlzdGF0ZSwgZGlybmFtZSwgbGVuKTsKKworCXBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgZGlybmFtZSwgbGVuKTsKKwlpZiAocG9zIDwgMCkKKwkJcG9zID0gLXBvcy0xOworCXdoaWxlIChwb3MgPCBpc3RhdGUtPmNhY2hlX25yKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW3BvcysrXTsKKwkJdW5zaWduZWQgY2hhciBlbmRjaGFyOworCisJCWlmIChzdHJuY21wKGNlLT5uYW1lLCBkaXJuYW1lLCBsZW4pKQorCQkJYnJlYWs7CisJCWVuZGNoYXIgPSBjZS0+bmFtZVtsZW5dOworCQlpZiAoZW5kY2hhciA+ICcvJykKKwkJCWJyZWFrOworCQlpZiAoZW5kY2hhciA9PSAnLycpCisJCQlyZXR1cm4gaW5kZXhfZGlyZWN0b3J5OworCQlpZiAoIWVuZGNoYXIgJiYgU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJcmV0dXJuIGluZGV4X2dpdGRpcjsKKwl9CisJcmV0dXJuIGluZGV4X25vbmV4aXN0ZW50OworfQorCisvKgorICogV2hlbiB3ZSBmaW5kIGEgZGlyZWN0b3J5IHdoZW4gdHJhdmVyc2luZyB0aGUgZmlsZXN5c3RlbSwgd2UKKyAqIGhhdmUgdGhyZWUgZGlzdGluY3QgY2FzZXM6CisgKgorICogIC0gaWdub3JlIGl0CisgKiAgLSBzZWUgaXQgYXMgYSBkaXJlY3RvcnkKKyAqICAtIHJlY3Vyc2UgaW50byBpdAorICoKKyAqIGFuZCB3aGljaCBvbmUgd2UgY2hvb3NlIGRlcGVuZHMgb24gYSBjb21iaW5hdGlvbiBvZiBleGlzdGluZworICogZ2l0IGluZGV4IGNvbnRlbnRzIGFuZCB0aGUgZmxhZ3MgcGFzc2VkIGludG8gdGhlIGRpcmVjdG9yeQorICogdHJhdmVyc2FsIHJvdXRpbmUuCisgKgorICogQ2FzZSAxOiBJZiB3ZSAqYWxyZWFkeSogaGF2ZSBlbnRyaWVzIGluIHRoZSBpbmRleCB1bmRlciB0aGF0CisgKiBkaXJlY3RvcnkgbmFtZSwgd2UgYWx3YXlzIHJlY3Vyc2UgaW50byB0aGUgZGlyZWN0b3J5IHRvIHNlZQorICogYWxsIHRoZSBmaWxlcy4KKyAqCisgKiBDYXNlIDI6IElmIHdlICphbHJlYWR5KiBoYXZlIHRoYXQgZGlyZWN0b3J5IG5hbWUgYXMgYSBnaXRsaW5rLAorICogd2UgYWx3YXlzIGNvbnRpbnVlIHRvIHNlZSBpdCBhcyBhIGdpdGxpbmssIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgorICogdGhlcmUgaXMgYW4gYWN0dWFsIGdpdCBkaXJlY3RvcnkgdGhlcmUgb3Igbm90IChpdCBtaWdodCBub3QKKyAqIGJlIGNoZWNrZWQgb3V0IGFzIGEgc3VicHJvamVjdCEpCisgKgorICogQ2FzZSAzOiBpZiB3ZSBkaWRuJ3QgaGF2ZSBpdCBpbiB0aGUgaW5kZXggcHJldmlvdXNseSwgd2UKKyAqIGhhdmUgYSBmZXcgc3ViLWNhc2VzOgorICoKKyAqICAoYSkgaWYgInNob3dfb3RoZXJfZGlyZWN0b3JpZXMiIGlzIHRydWUsIHdlIHNob3cgaXQgYXMKKyAqICAgICAganVzdCBhIGRpcmVjdG9yeSwgdW5sZXNzICJoaWRlX2VtcHR5X2RpcmVjdG9yaWVzIiBpcworICogICAgICBhbHNvIHRydWUsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0byBjaGVjayBpZiBpdCBjb250YWlucyBhbnkKKyAqICAgICAgdW50cmFja2VkIGFuZCAvIG9yIGlnbm9yZWQgZmlsZXMuCisgKiAgKGIpIGlmIGl0IGxvb2tzIGxpa2UgYSBnaXQgZGlyZWN0b3J5LCBhbmQgd2UgZG9uJ3QgaGF2ZQorICogICAgICAnbm9fZ2l0bGlua3MnIHNldCB3ZSB0cmVhdCBpdCBhcyBhIGdpdGxpbmssIGFuZCBzaG93IGl0CisgKiAgICAgIGFzIGEgZGlyZWN0b3J5LgorICogIChjKSBvdGhlcndpc2UsIHdlIHJlY3Vyc2UgaW50byBpdC4KKyAqLworc3RhdGljIGVudW0gcGF0aF90cmVhdG1lbnQgdHJlYXRfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZCwKKwljb25zdCBjaGFyICpkaXJuYW1lLCBpbnQgbGVuLCBpbnQgYmFzZWxlbiwgaW50IGV4Y2x1ZGVkLAorCWNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJLyoKKwkgKiBXQVJOSU5HOiBGcm9tIHRoaXMgZnVuY3Rpb24sIHlvdSBjYW4gcmV0dXJuIHBhdGhfcmVjdXJzZSBvciB5b3UKKwkgKiAgICAgICAgICBjYW4gY2FsbCByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoKSAob3IgbmVpdGhlciksIGJ1dAorCSAqICAgICAgICAgIHlvdSBDQU4nVCBETyBCT1RILgorCSAqLworCWVudW0gcGF0aF90cmVhdG1lbnQgc3RhdGU7CisJaW50IG1hdGNoZXNfaG93ID0gMDsKKwlpbnQgbmVzdGVkX3JlcG8gPSAwLCBjaGVja19vbmx5LCBzdG9wX2Vhcmx5OworCWludCBvbGRfaWdub3JlZF9uciwgb2xkX3VudHJhY2tlZF9ucjsKKwkvKiBUaGUgImxlbi0xIiBpcyB0byBzdHJpcCB0aGUgZmluYWwgJy8nICovCisJZW51bSBleGlzdF9zdGF0dXMgc3RhdHVzID0gZGlyZWN0b3J5X2V4aXN0c19pbl9pbmRleChpc3RhdGUsIGRpcm5hbWUsIGxlbi0xKTsKKworCWlmIChzdGF0dXMgPT0gaW5kZXhfZGlyZWN0b3J5KQorCQlyZXR1cm4gcGF0aF9yZWN1cnNlOworCWlmIChzdGF0dXMgPT0gaW5kZXhfZ2l0ZGlyKQorCQlyZXR1cm4gcGF0aF9ub25lOworCWlmIChzdGF0dXMgIT0gaW5kZXhfbm9uZXhpc3RlbnQpCisJCUJVRygiVW5oYW5kbGVkIHZhbHVlIGZvciBkaXJlY3RvcnlfZXhpc3RzX2luX2luZGV4OiAlZFxuIiwgc3RhdHVzKTsKKworCS8qCisJICogV2UgZG9uJ3Qgd2FudCB0byBkZXNjZW5kIGludG8gcGF0aHMgdGhhdCBkb24ndCBtYXRjaCB0aGUgbmVjZXNzYXJ5CisJICogcGF0dGVybnMuICBDbGVhcmx5LCBpZiB3ZSBkb24ndCBoYXZlIGEgcGF0aHNwZWMsIHRoZW4gd2UgY2FuJ3QgY2hlY2sKKwkgKiBmb3IgbWF0Y2hpbmcgcGF0dGVybnMuICBBbHNvLCBpZiAoZXhjbHVkZWQpIHRoZW4gd2Uga25vdyB3ZSBtYXRjaGVkCisJICogdGhlIGV4Y2x1c2lvbiBwYXR0ZXJucyBzbyBhcyBhbiBvcHRpbWl6YXRpb24gd2UgY2FuIHNraXAgY2hlY2tpbmcKKwkgKiBmb3IgbWF0Y2hpbmcgcGF0dGVybnMuCisJICovCisJaWYgKHBhdGhzcGVjICYmICFleGNsdWRlZCkgeworCQltYXRjaGVzX2hvdyA9IGRvX21hdGNoX3BhdGhzcGVjKGlzdGF0ZSwgcGF0aHNwZWMsIGRpcm5hbWUsIGxlbiwKKwkJCQkJCTAgLyogcHJlZml4ICovLCBOVUxMIC8qIHNlZW4gKi8sCisJCQkJCQlET19NQVRDSF9MRUFESU5HX1BBVEhTUEVDKTsKKwkJaWYgKCFtYXRjaGVzX2hvdykKKwkJCXJldHVybiBwYXRoX25vbmU7CisJfQorCisKKwlpZiAoKGRpci0+ZmxhZ3MgJiBESVJfU0tJUF9ORVNURURfR0lUKSB8fAorCQkhKGRpci0+ZmxhZ3MgJiBESVJfTk9fR0lUTElOS1MpKSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZHN0cigmc2IsIGRpcm5hbWUpOworCQluZXN0ZWRfcmVwbyA9IGlzX25vbmJhcmVfcmVwb3NpdG9yeV9kaXIoJnNiKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9CisJaWYgKG5lc3RlZF9yZXBvKQorCQlyZXR1cm4gKChkaXItPmZsYWdzICYgRElSX1NLSVBfTkVTVEVEX0dJVCkgPyBwYXRoX25vbmUgOgorCQkJKGV4Y2x1ZGVkID8gcGF0aF9leGNsdWRlZCA6IHBhdGhfdW50cmFja2VkKSk7CisKKwlpZiAoIShkaXItPmZsYWdzICYgRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVMpKSB7CisJCWlmIChleGNsdWRlZCAmJgorCQkgICAgKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEX1RPTykgJiYKKwkJICAgIChkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRF9UT09fTU9ERV9NQVRDSElORykpIHsKKworCQkJLyoKKwkJCSAqIFRoaXMgaXMgYW4gZXhjbHVkZWQgZGlyZWN0b3J5IGFuZCB3ZSBhcmUKKwkJCSAqIHNob3dpbmcgaWdub3JlZCBwYXRocyB0aGF0IG1hdGNoIGFuIGV4Y2x1ZGUKKwkJCSAqIHBhdHRlcm4uICAoZS5nLiBzaG93IGRpcmVjdG9yeSBhcyBpZ25vcmVkCisJCQkgKiBvbmx5IGlmIGl0IG1hdGNoZXMgYW4gZXhjbHVkZSBwYXR0ZXJuKS4KKwkJCSAqIFRoaXMgcGF0aCB3aWxsIGVpdGhlciBiZSAncGF0aF9leGNsdWRlZGAKKwkJCSAqIChpZiB3ZSBhcmUgc2hvd2luZyBlbXB0eSBkaXJlY3RvcmllcyBvciBpZgorCQkJICogdGhlIGRpcmVjdG9yeSBpcyBub3QgZW1wdHkpLCBvciB3aWxsIGJlCisJCQkgKiAncGF0aF9ub25lJyAoZW1wdHkgZGlyZWN0b3J5LCBhbmQgd2UgYXJlCisJCQkgKiBub3Qgc2hvd2luZyBlbXB0eSBkaXJlY3RvcmllcykuCisJCQkgKi8KKwkJCWlmICghKGRpci0+ZmxhZ3MgJiBESVJfSElERV9FTVBUWV9ESVJFQ1RPUklFUykpCisJCQkJcmV0dXJuIHBhdGhfZXhjbHVkZWQ7CisKKwkJCWlmIChyZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLCBpc3RhdGUsIGRpcm5hbWUsIGxlbiwKKwkJCQkJCSAgICAgdW50cmFja2VkLCAxLCAxLCBwYXRoc3BlYykgPT0gcGF0aF9leGNsdWRlZCkKKwkJCQlyZXR1cm4gcGF0aF9leGNsdWRlZDsKKworCQkJcmV0dXJuIHBhdGhfbm9uZTsKKwkJfQorCQlyZXR1cm4gcGF0aF9yZWN1cnNlOworCX0KKworCS8qIFRoaXMgaXMgdGhlICJzaG93X290aGVyX2RpcmVjdG9yaWVzIiBjYXNlICovCisKKwkvKgorCSAqIElmIHdlIGhhdmUgYSBwYXRoc3BlYyB3aGljaCBjb3VsZCBtYXRjaCBzb21ldGhpbmcgX2JlbG93XyB0aGlzCisJICogZGlyZWN0b3J5IChlLmcuIHdoZW4gY2hlY2tpbmcgJ3N1YmRpci8nIGhhdmluZyBhIHBhdGhzcGVjIGxpa2UKKwkgKiAnc3ViZGlyL3NvbWUvZGVlcC9wYXRoL2ZpbGUnIG9yICdzdWJkaXIvd2lkZ2V0LSouYycpLCB0aGVuIHdlCisJICogbmVlZCB0byByZWN1cnNlLgorCSAqLworCWlmIChtYXRjaGVzX2hvdyA9PSBNQVRDSEVEX1JFQ1VSU0lWRUxZX0xFQURJTkdfUEFUSFNQRUMpCisJCXJldHVybiBwYXRoX3JlY3Vyc2U7CisKKwkvKgorCSAqIE90aGVyIHRoYW4gdGhlIHBhdGhfcmVjdXJzZSBjYXNlIGltbWVkaWF0ZWx5IGFib3ZlLCB3ZSBvbmx5IG5lZWQKKwkgKiB0byByZWN1cnNlIGludG8gdW50cmFja2VkL2lnbm9yZWQgZGlyZWN0b3JpZXMgaWYgZWl0aGVyIG9mIHRoZQorCSAqIGZvbGxvd2luZyBiaXRzIGlzIHNldDoKKwkgKiAgIC0gRElSX1NIT1dfSUdOT1JFRF9UT08gKGJlY2F1c2UgdGhlbiB3ZSBuZWVkIHRvIGRldGVybWluZSBpZgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlcmUgYXJlIGlnbm9yZWQgZGlyZWN0b3JpZXMgYmVsb3cpCisJICogICAtIERJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTIChiZWNhdXNlIHdlIGhhdmUgdG8gZGV0ZXJtaW5lIGlmCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5KQorCSAqLworCWlmICghKGRpci0+ZmxhZ3MgJiAoRElSX1NIT1dfSUdOT1JFRF9UT08gfCBESVJfSElERV9FTVBUWV9ESVJFQ1RPUklFUykpKQorCQlyZXR1cm4gZXhjbHVkZWQgPyBwYXRoX2V4Y2x1ZGVkIDogcGF0aF91bnRyYWNrZWQ7CisKKwkvKgorCSAqIC4uLmFuZCBldmVuIGlmIERJUl9TSE9XX0lHTk9SRURfVE9PIGlzIHNldCwgd2UgY2FuIHN0aWxsIGF2b2lkCisJICogcmVjdXJzaW5nIGludG8gaWdub3JlZCBkaXJlY3RvcmllcyBpZiB0aGUgcGF0aCBpcyBleGNsdWRlZCBhbmQKKwkgKiBESVJfU0hPV19JR05PUkVEX1RPT19NT0RFX01BVENISU5HIGlzIGFsc28gc2V0LgorCSAqLworCWlmIChleGNsdWRlZCAmJgorCSAgICAoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRURfVE9PKSAmJgorCSAgICAoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRURfVE9PX01PREVfTUFUQ0hJTkcpKQorCQlyZXR1cm4gcGF0aF9leGNsdWRlZDsKKworCS8qCisJICogSWYgd2UgaGF2ZSB3ZSBkb24ndCB3YW50IHRvIGtub3cgdGhlIGFsbCB0aGUgcGF0aHMgdW5kZXIgYW4KKwkgKiB1bnRyYWNrZWQgb3IgaWdub3JlZCBkaXJlY3RvcnksIHdlIHN0aWxsIG5lZWQgdG8gZ28gaW50byB0aGUKKwkgKiBkaXJlY3RvcnkgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGVtcHR5IChiZWNhdXNlIGFuIGVtcHR5IGRpcmVjdG9yeQorCSAqIHNob3VsZCBiZSBwYXRoX25vbmUgaW5zdGVhZCBvZiBwYXRoX2V4Y2x1ZGVkIG9yIHBhdGhfdW50cmFja2VkKS4KKwkgKi8KKwljaGVja19vbmx5ID0gKChkaXItPmZsYWdzICYgRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVMpICYmCisJCSAgICAgICEoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRURfVE9PKSk7CisKKwkvKgorCSAqIEhvd2V2ZXIsIHRoZXJlJ3MgYW5vdGhlciBvcHRpbWl6YXRpb24gcG9zc2libGUgYXMgYSBzdWJzZXQgb2YKKwkgKiBjaGVja19vbmx5LCBiYXNlZCBvbiB0aGUgY2FzZXMgd2UgaGF2ZSB0byBjb25zaWRlcjoKKwkgKiAgIEEpIERpcmVjdG9yeSBtYXRjaGVzIG5vIGV4Y2x1ZGUgcGF0dGVybnM6CisJICogICAgICogRGlyZWN0b3J5IGlzIGVtcHR5ID0+IHBhdGhfbm9uZQorCSAqICAgICAqIERpcmVjdG9yeSBoYXMgYW4gdW50cmFja2VkIGZpbGUgdW5kZXIgaXQgPT4gcGF0aF91bnRyYWNrZWQKKwkgKiAgICAgKiBEaXJlY3RvcnkgaGFzIG9ubHkgaWdub3JlZCBmaWxlcyB1bmRlciBpdCA9PiBwYXRoX2V4Y2x1ZGVkCisJICogICBCKSBEaXJlY3RvcnkgbWF0Y2hlcyBhbiBleGNsdWRlIHBhdHRlcm46CisJICogICAgICogRGlyZWN0b3J5IGlzIGVtcHR5ID0+IHBhdGhfbm9uZQorCSAqICAgICAqIERpcmVjdG9yeSBoYXMgYW4gdW50cmFja2VkIGZpbGUgdW5kZXIgaXQgPT4gcGF0aF9leGNsdWRlZAorCSAqICAgICAqIERpcmVjdG9yeSBoYXMgb25seSBpZ25vcmVkIGZpbGVzIHVuZGVyIGl0ID0+IHBhdGhfZXhjbHVkZWQKKwkgKiBJbiBjYXNlIEEsIHdlIGNhbiBleGl0IGFzIHNvb24gYXMgd2UndmUgZm91bmQgYW4gdW50cmFja2VkCisJICogZmlsZSBidXQgb3RoZXJ3aXNlIGhhdmUgdG8gd2FsayBhbGwgZmlsZXMuICBJbiBjYXNlIEIsIHRob3VnaCwKKwkgKiB3ZSBjYW4gc3RvcCBhdCB0aGUgZmlyc3QgZmlsZSB3ZSBmaW5kIHVuZGVyIHRoZSBkaXJlY3RvcnkuCisJICovCisJc3RvcF9lYXJseSA9IGNoZWNrX29ubHkgJiYgZXhjbHVkZWQ7CisKKwkvKgorCSAqIElmIC9ldmVyeS8gZmlsZSB3aXRoaW4gYW4gdW50cmFja2VkIGRpcmVjdG9yeSBpcyBpZ25vcmVkLCB0aGVuCisJICogd2Ugd2FudCB0byB0cmVhdCB0aGUgZGlyZWN0b3J5IGFzIGlnbm9yZWQgKGZvciBlLmcuIHN0YXR1cworCSAqIC0tcG9yY2VsYWluKSwgd2l0aG91dCBsaXN0aW5nIHRoZSBpbmRpdmlkdWFsIGlnbm9yZWQgZmlsZXMKKwkgKiB1bmRlcm5lYXRoLiAgVG8gZG8gc28sIHdlJ2xsIHNhdmUgdGhlIGN1cnJlbnQgaWdub3JlZF9uciwgYW5kCisJICogcG9wIGFsbCB0aGUgb25lcyBhZGRlZCBhZnRlciBpdCBpZiBpdCB0dXJucyBvdXQgdGhlIGVudGlyZQorCSAqIGRpcmVjdG9yeSBpcyBpZ25vcmVkLiAgQWxzbywgd2hlbiBESVJfU0hPV19JR05PUkVEX1RPTyBhbmQKKwkgKiAhRElSX0tFRVBfVU5UUkFDS0VEX0NPTlRFTlRTIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBzaG93CisJICogdW50cmFja2VkIHBhdGhzIHNvIHdpbGwgbmVlZCB0byBwb3AgYWxsIHRob3NlIG9mZiB0aGUgbGFzdAorCSAqIGFmdGVyIHdlIHRyYXZlcnNlLgorCSAqLworCW9sZF9pZ25vcmVkX25yID0gZGlyLT5pZ25vcmVkX25yOworCW9sZF91bnRyYWNrZWRfbnIgPSBkaXItPm5yOworCisJLyogQWN0dWFsbHkgcmVjdXJzZSBpbnRvIGRpcm5hbWUgbm93LCB3ZSdsbCBmaXh1cCB0aGUgc3RhdGUgbGF0ZXIuICovCisJdW50cmFja2VkID0gbG9va3VwX3VudHJhY2tlZChkaXItPnVudHJhY2tlZCwgdW50cmFja2VkLAorCQkJCSAgICAgZGlybmFtZSArIGJhc2VsZW4sIGxlbiAtIGJhc2VsZW4pOworCXN0YXRlID0gcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKGRpciwgaXN0YXRlLCBkaXJuYW1lLCBsZW4sIHVudHJhY2tlZCwKKwkJCQkJIGNoZWNrX29ubHksIHN0b3BfZWFybHksIHBhdGhzcGVjKTsKKworCS8qIFRoZXJlIGFyZSBhIHZhcmlldHkgb2YgcmVhc29ucyB3ZSBtYXkgbmVlZCB0byBmaXh1cCB0aGUgc3RhdGUuLi4gKi8KKwlpZiAoc3RhdGUgPT0gcGF0aF9leGNsdWRlZCkgeworCQkvKiBzdGF0ZSA9PSBwYXRoX2V4Y2x1ZGVkIGltcGxpZXMgYWxsIHBhdGhzIHVuZGVyCisJCSAqIGRpcm5hbWUgd2VyZSBpZ25vcmVkLi4uCisJCSAqCisJCSAqIGlmIHJ1bm5pbmcgZS5nLiBgZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQ9bWF0Y2hpbmdgLAorCQkgKiB0aGVuIHdlIHdhbnQgdG8gc2VlIHRoZSBzdWJwYXRocyB0aGF0IGFyZSBpZ25vcmVkLgorCQkgKgorCQkgKiBpZiBydW5uaW5nIGUuZy4ganVzdCBgZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbmAsIHRoZW4KKwkJICogd2UganVzdCB3YW50IHRoZSBkaXJlY3RvcnkgaXRzZWxmIHRvIGJlIGxpc3RlZCBhcyBpZ25vcmVkCisJCSAqIGFuZCBub3QgdGhlIGluZGl2aWR1YWwgcGF0aHMgdW5kZXJuZWF0aC4KKwkJICovCisJCWludCB3YW50X2lnbm9yZWRfc3VicGF0aHMgPQorCQkJKChkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRF9UT08pICYmCisJCQkgKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEX1RPT19NT0RFX01BVENISU5HKSk7CisKKwkJaWYgKHdhbnRfaWdub3JlZF9zdWJwYXRocykgeworCQkJLyoKKwkJCSAqIHdpdGggLS1pZ25vcmVkPW1hdGNoaW5nLCB3ZSB3YW50IHRoZSBzdWJwYXRocworCQkJICogSU5TVEVBRCBvZiB0aGUgZGlyZWN0b3J5IGl0c2VsZi4KKwkJCSAqLworCQkJc3RhdGUgPSBwYXRoX25vbmU7CisJCX0gZWxzZSB7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IG9sZF9pZ25vcmVkX25yICsgMTsgaTxkaXItPmlnbm9yZWRfbnI7ICsraSkKKwkJCQlGUkVFX0FORF9OVUxMKGRpci0+aWdub3JlZFtpXSk7CisJCQlkaXItPmlnbm9yZWRfbnIgPSBvbGRfaWdub3JlZF9ucjsKKwkJfQorCX0KKworCS8qCisJICogV2UgbWF5IG5lZWQgdG8gaWdub3JlIHNvbWUgb2YgdGhlIHVudHJhY2tlZCBwYXRocyB3ZSBmb3VuZCB3aGlsZQorCSAqIHRyYXZlcnNpbmcgc3ViZGlyZWN0b3JpZXMuCisJICovCisJaWYgKChkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRF9UT08pICYmCisJICAgICEoZGlyLT5mbGFncyAmIERJUl9LRUVQX1VOVFJBQ0tFRF9DT05URU5UUykpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IG9sZF91bnRyYWNrZWRfbnIgKyAxOyBpPGRpci0+bnI7ICsraSkKKwkJCUZSRUVfQU5EX05VTEwoZGlyLT5lbnRyaWVzW2ldKTsKKwkJZGlyLT5uciA9IG9sZF91bnRyYWNrZWRfbnI7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBub3RoaW5nIHVuZGVyIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgd2UgYXJlIG5vdAorCSAqIGhpZGluZyBlbXB0eSBkaXJlY3RvcmllcywgdGhlbiB3ZSBuZWVkIHRvIHJlcG9ydCBvbiB0aGUKKwkgKiB1bnRyYWNrZWQgb3IgaWdub3JlZCBzdGF0dXMgb2YgdGhlIGRpcmVjdG9yeSBpdHNlbGYuCisJICovCisJaWYgKHN0YXRlID09IHBhdGhfbm9uZSAmJiAhKGRpci0+ZmxhZ3MgJiBESVJfSElERV9FTVBUWV9ESVJFQ1RPUklFUykpCisJCXN0YXRlID0gZXhjbHVkZWQgPyBwYXRoX2V4Y2x1ZGVkIDogcGF0aF91bnRyYWNrZWQ7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKKy8qCisgKiBUaGlzIGlzIGFuIGluZXhhY3QgZWFybHkgcHJ1bmluZyBvZiBhbnkgcmVjdXJzaXZlIGRpcmVjdG9yeQorICogcmVhZGluZyAtIGlmIHRoZSBwYXRoIGNhbm5vdCBwb3NzaWJseSBiZSBpbiB0aGUgcGF0aHNwZWMsCisgKiByZXR1cm4gdHJ1ZSwgYW5kIHdlJ2xsIHNraXAgaXQgZWFybHkuCisgKi8KK3N0YXRpYyBpbnQgc2ltcGxpZnlfYXdheShjb25zdCBjaGFyICpwYXRoLCBpbnQgcGF0aGxlbiwKKwkJCSBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCWludCBpOworCisJaWYgKCFwYXRoc3BlYyB8fCAhcGF0aHNwZWMtPm5yKQorCQlyZXR1cm4gMDsKKworCUdVQVJEX1BBVEhTUEVDKHBhdGhzcGVjLAorCQkgICAgICAgUEFUSFNQRUNfRlJPTVRPUCB8CisJCSAgICAgICBQQVRIU1BFQ19NQVhERVBUSCB8CisJCSAgICAgICBQQVRIU1BFQ19MSVRFUkFMIHwKKwkJICAgICAgIFBBVEhTUEVDX0dMT0IgfAorCQkgICAgICAgUEFUSFNQRUNfSUNBU0UgfAorCQkgICAgICAgUEFUSFNQRUNfRVhDTFVERSB8CisJCSAgICAgICBQQVRIU1BFQ19BVFRSKTsKKworCWZvciAoaSA9IDA7IGkgPCBwYXRoc3BlYy0+bnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqaXRlbSA9ICZwYXRoc3BlYy0+aXRlbXNbaV07CisJCWludCBsZW4gPSBpdGVtLT5ub3dpbGRjYXJkX2xlbjsKKworCQlpZiAobGVuID4gcGF0aGxlbikKKwkJCWxlbiA9IHBhdGhsZW47CisJCWlmICghcHNfc3RybmNtcChpdGVtLCBpdGVtLT5tYXRjaCwgcGF0aCwgbGVuKSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB0ZWxscyB1cyB3aGV0aGVyIGFuIGV4Y2x1ZGVkIHBhdGggbWF0Y2hlcyBhCisgKiBsaXN0IG9mICJpbnRlcmVzdGluZyIgcGF0aHNwZWNzLiBUaGF0IGlzLCB3aGV0aGVyIGEgcGF0aCBtYXRjaGVkCisgKiBieSBhbnkgb2YgdGhlIHBhdGhzcGVjcyBjb3VsZCBwb3NzaWJseSBiZSBpZ25vcmVkIGJ5IGV4Y2x1ZGluZworICogdGhlIHNwZWNpZmllZCBwYXRoLiBUaGlzIGNhbiBoYXBwZW4gaWY6CisgKgorICogICAxLiB0aGUgcGF0aCBpcyBtZW50aW9uZWQgZXhwbGljaXRseSBpbiB0aGUgcGF0aHNwZWMKKyAqCisgKiAgIDIuIHRoZSBwYXRoIGlzIGEgZGlyZWN0b3J5IHByZWZpeCBvZiBzb21lIGVsZW1lbnQgaW4gdGhlCisgKiAgICAgIHBhdGhzcGVjCisgKi8KK3N0YXRpYyBpbnQgZXhjbHVkZV9tYXRjaGVzX3BhdGhzcGVjKGNvbnN0IGNoYXIgKnBhdGgsIGludCBwYXRobGVuLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCWludCBpOworCisJaWYgKCFwYXRoc3BlYyB8fCAhcGF0aHNwZWMtPm5yKQorCQlyZXR1cm4gMDsKKworCUdVQVJEX1BBVEhTUEVDKHBhdGhzcGVjLAorCQkgICAgICAgUEFUSFNQRUNfRlJPTVRPUCB8CisJCSAgICAgICBQQVRIU1BFQ19NQVhERVBUSCB8CisJCSAgICAgICBQQVRIU1BFQ19MSVRFUkFMIHwKKwkJICAgICAgIFBBVEhTUEVDX0dMT0IgfAorCQkgICAgICAgUEFUSFNQRUNfSUNBU0UgfAorCQkgICAgICAgUEFUSFNQRUNfRVhDTFVERSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGF0aHNwZWMtPm5yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0gPSAmcGF0aHNwZWMtPml0ZW1zW2ldOworCQlpbnQgbGVuID0gaXRlbS0+bm93aWxkY2FyZF9sZW47CisKKwkJaWYgKGxlbiA9PSBwYXRobGVuICYmCisJCSAgICAhcHNfc3RybmNtcChpdGVtLCBpdGVtLT5tYXRjaCwgcGF0aCwgcGF0aGxlbikpCisJCQlyZXR1cm4gMTsKKwkJaWYgKGxlbiA+IHBhdGhsZW4gJiYKKwkJICAgIGl0ZW0tPm1hdGNoW3BhdGhsZW5dID09ICcvJyAmJgorCQkgICAgIXBzX3N0cm5jbXAoaXRlbSwgaXRlbS0+bWF0Y2gsIHBhdGgsIHBhdGhsZW4pKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9pbmRleF9kdHlwZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pCit7CisJaW50IHBvczsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJY2UgPSBpbmRleF9maWxlX2V4aXN0cyhpc3RhdGUsIHBhdGgsIGxlbiwgMCk7CisJaWYgKGNlKSB7CisJCWlmICghY2VfdXB0b2RhdGUoY2UpKQorCQkJcmV0dXJuIERUX1VOS05PV047CisJCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQlyZXR1cm4gRFRfRElSOworCQkvKgorCQkgKiBOb2JvZHkgYWN0dWFsbHkgY2FyZXMgYWJvdXQgdGhlCisJCSAqIGRpZmZlcmVuY2UgYmV0d2VlbiBEVF9MTksgYW5kIERUX1JFRworCQkgKi8KKwkJcmV0dXJuIERUX1JFRzsKKwl9CisKKwkvKiBUcnkgdG8gbG9vayBpdCB1cCBhcyBhIGRpcmVjdG9yeSAqLworCXBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgcGF0aCwgbGVuKTsKKwlpZiAocG9zID49IDApCisJCXJldHVybiBEVF9VTktOT1dOOworCXBvcyA9IC1wb3MtMTsKKwl3aGlsZSAocG9zIDwgaXN0YXRlLT5jYWNoZV9ucikgeworCQljZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zKytdOworCQlpZiAoc3RybmNtcChjZS0+bmFtZSwgcGF0aCwgbGVuKSkKKwkJCWJyZWFrOworCQlpZiAoY2UtPm5hbWVbbGVuXSA+ICcvJykKKwkJCWJyZWFrOworCQlpZiAoY2UtPm5hbWVbbGVuXSA8ICcvJykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNlX3VwdG9kYXRlKGNlKSkKKwkJCWJyZWFrOwkvKiBjb250aW51ZT8gKi8KKwkJcmV0dXJuIERUX0RJUjsKKwl9CisJcmV0dXJuIERUX1VOS05PV047Cit9CisKK3N0YXRpYyBpbnQgcmVzb2x2ZV9kdHlwZShpbnQgZHR5cGUsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoZHR5cGUgIT0gRFRfVU5LTk9XTikKKwkJcmV0dXJuIGR0eXBlOworCWR0eXBlID0gZ2V0X2luZGV4X2R0eXBlKGlzdGF0ZSwgcGF0aCwgbGVuKTsKKwlpZiAoZHR5cGUgIT0gRFRfVU5LTk9XTikKKwkJcmV0dXJuIGR0eXBlOworCWlmIChsc3RhdChwYXRoLCAmc3QpKQorCQlyZXR1cm4gZHR5cGU7CisJaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCXJldHVybiBEVF9SRUc7CisJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCisJCXJldHVybiBEVF9ESVI7CisJaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpCisJCXJldHVybiBEVF9MTks7CisJcmV0dXJuIGR0eXBlOworfQorCitzdGF0aWMgZW51bSBwYXRoX3RyZWF0bWVudCB0cmVhdF9wYXRoX2Zhc3Qoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCQkJICAgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZCwKKwkJCQkJICAgc3RydWN0IGNhY2hlZF9kaXIgKmNkaXIsCisJCQkJCSAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQkgICBzdHJ1Y3Qgc3RyYnVmICpwYXRoLAorCQkJCQkgICBpbnQgYmFzZWxlbiwKKwkJCQkJICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwkvKgorCSAqIFdBUk5JTkc6IEZyb20gdGhpcyBmdW5jdGlvbiwgeW91IGNhbiByZXR1cm4gcGF0aF9yZWN1cnNlIG9yIHlvdQorCSAqICAgICAgICAgIGNhbiBjYWxsIHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZSgpIChvciBuZWl0aGVyKSwgYnV0CisJICogICAgICAgICAgeW91IENBTidUIERPIEJPVEguCisJICovCisJc3RyYnVmX3NldGxlbihwYXRoLCBiYXNlbGVuKTsKKwlpZiAoIWNkaXItPnVjZCkgeworCQlzdHJidWZfYWRkc3RyKHBhdGgsIGNkaXItPmZpbGUpOworCQlyZXR1cm4gcGF0aF91bnRyYWNrZWQ7CisJfQorCXN0cmJ1Zl9hZGRzdHIocGF0aCwgY2Rpci0+dWNkLT5uYW1lKTsKKwkvKiB0cmVhdF9vbmVfcGF0aCgpIGRvZXMgdGhpcyBiZWZvcmUgaXQgY2FsbHMgdHJlYXRfZGlyZWN0b3J5KCkgKi8KKwlzdHJidWZfY29tcGxldGUocGF0aCwgJy8nKTsKKwlpZiAoY2Rpci0+dWNkLT5jaGVja19vbmx5KQorCQkvKgorCQkgKiBjaGVja19vbmx5IGlzIHNldCBhcyBhIHJlc3VsdCBvZiB0cmVhdF9kaXJlY3RvcnkoKSBnZXR0aW5nCisJCSAqIHRvIGl0cyBib3R0b20uIFZlcmlmeSBhZ2FpbiB0aGUgc2FtZSBzZXQgb2YgZGlyZWN0b3JpZXMKKwkJICogd2l0aCBjaGVja19vbmx5IHNldC4KKwkJICovCisJCXJldHVybiByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLCBpc3RhdGUsIHBhdGgtPmJ1ZiwgcGF0aC0+bGVuLAorCQkJCQkJY2Rpci0+dWNkLCAxLCAwLCBwYXRoc3BlYyk7CisJLyoKKwkgKiBXZSBnZXQgcGF0aF9yZWN1cnNlIGluIHRoZSBmaXJzdCBydW4gd2hlbgorCSAqIGRpcmVjdG9yeV9leGlzdHNfaW5faW5kZXgoKSByZXR1cm5zIGluZGV4X25vbmV4aXN0ZW50LiBXZQorCSAqIGFyZSBzdXJlIHRoYXQgbmV3IGNoYW5nZXMgaW4gdGhlIGluZGV4IGRvZXMgbm90IGltcGFjdCB0aGUKKwkgKiBvdXRjb21lLiBSZXR1cm4gbm93LgorCSAqLworCXJldHVybiBwYXRoX3JlY3Vyc2U7Cit9CisKK3N0YXRpYyBlbnVtIHBhdGhfdHJlYXRtZW50IHRyZWF0X3BhdGgoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCQkgICAgICBzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqdW50cmFja2VkLAorCQkJCSAgICAgIHN0cnVjdCBjYWNoZWRfZGlyICpjZGlyLAorCQkJCSAgICAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgICAgIHN0cnVjdCBzdHJidWYgKnBhdGgsCisJCQkJICAgICAgaW50IGJhc2VsZW4sCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwlpbnQgaGFzX3BhdGhfaW5faW5kZXgsIGR0eXBlLCBleGNsdWRlZDsKKworCWlmICghY2Rpci0+ZF9uYW1lKQorCQlyZXR1cm4gdHJlYXRfcGF0aF9mYXN0KGRpciwgdW50cmFja2VkLCBjZGlyLCBpc3RhdGUsIHBhdGgsCisJCQkJICAgICAgIGJhc2VsZW4sIHBhdGhzcGVjKTsKKwlpZiAoaXNfZG90X29yX2RvdGRvdChjZGlyLT5kX25hbWUpIHx8ICFmc3BhdGhjbXAoY2Rpci0+ZF9uYW1lLCAiLmdpdCIpKQorCQlyZXR1cm4gcGF0aF9ub25lOworCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgYmFzZWxlbik7CisJc3RyYnVmX2FkZHN0cihwYXRoLCBjZGlyLT5kX25hbWUpOworCWlmIChzaW1wbGlmeV9hd2F5KHBhdGgtPmJ1ZiwgcGF0aC0+bGVuLCBwYXRoc3BlYykpCisJCXJldHVybiBwYXRoX25vbmU7CisKKwlkdHlwZSA9IHJlc29sdmVfZHR5cGUoY2Rpci0+ZF90eXBlLCBpc3RhdGUsIHBhdGgtPmJ1ZiwgcGF0aC0+bGVuKTsKKworCS8qIEFsd2F5cyBleGNsdWRlIGluZGV4ZWQgZmlsZXMgKi8KKwloYXNfcGF0aF9pbl9pbmRleCA9ICEhaW5kZXhfZmlsZV9leGlzdHMoaXN0YXRlLCBwYXRoLT5idWYsIHBhdGgtPmxlbiwKKwkJCQkJCWlnbm9yZV9jYXNlKTsKKwlpZiAoZHR5cGUgIT0gRFRfRElSICYmIGhhc19wYXRoX2luX2luZGV4KQorCQlyZXR1cm4gcGF0aF9ub25lOworCisJLyoKKwkgKiBXaGVuIHdlIGFyZSBsb29raW5nIGF0IGEgZGlyZWN0b3J5IFAgaW4gdGhlIHdvcmtpbmcgdHJlZSwKKwkgKiB0aGVyZSBhcmUgdGhyZWUgY2FzZXM6CisJICoKKwkgKiAoMSkgUCBleGlzdHMgaW4gdGhlIGluZGV4LiAgRXZlcnl0aGluZyBpbnNpZGUgdGhlIGRpcmVjdG9yeSBQIGluCisJICogdGhlIHdvcmtpbmcgdHJlZSBuZWVkcyB0byBnbyB3aGVuIFAgaXMgY2hlY2tlZCBvdXQgZnJvbSB0aGUKKwkgKiBpbmRleC4KKwkgKgorCSAqICgyKSBQIGRvZXMgbm90IGV4aXN0IGluIHRoZSBpbmRleCwgYnV0IHRoZXJlIGlzIFAvUSBpbiB0aGUgaW5kZXguCisJICogV2Uga25vdyBQIHdpbGwgc3RheSBhIGRpcmVjdG9yeSB3aGVuIHdlIGNoZWNrIG91dCB0aGUgY29udGVudHMKKwkgKiBvZiB0aGUgaW5kZXgsIGJ1dCB3ZSBkbyBub3Qga25vdyB5ZXQgaWYgdGhlcmUgaXMgYSBkaXJlY3RvcnkKKwkgKiBQL1EgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byBiZSBraWxsZWQsIHNvIHdlIG5lZWQgdG8gcmVjdXJzZS4KKwkgKgorCSAqICgzKSBQIGRvZXMgbm90IGV4aXN0IGluIHRoZSBpbmRleCwgYW5kIHRoZXJlIGlzIG5vIFAvUSBpbiB0aGUgaW5kZXgKKwkgKiB0byByZXF1aXJlIFAgdG8gYmUgYSBkaXJlY3RvcnksIGVpdGhlci4gIE9ubHkgaW4gdGhpcyBjYXNlLCB3ZQorCSAqIGtub3cgdGhhdCBldmVyeXRoaW5nIGluc2lkZSBQIHdpbGwgbm90IGJlIGtpbGxlZCB3aXRob3V0CisJICogcmVjdXJzaW5nLgorCSAqLworCWlmICgoZGlyLT5mbGFncyAmIERJUl9DT0xMRUNUX0tJTExFRF9PTkxZKSAmJgorCSAgICAoZHR5cGUgPT0gRFRfRElSKSAmJgorCSAgICAhaGFzX3BhdGhfaW5faW5kZXggJiYKKwkgICAgKGRpcmVjdG9yeV9leGlzdHNfaW5faW5kZXgoaXN0YXRlLCBwYXRoLT5idWYsIHBhdGgtPmxlbikgPT0gaW5kZXhfbm9uZXhpc3RlbnQpKQorCQlyZXR1cm4gcGF0aF9ub25lOworCisJZXhjbHVkZWQgPSBpc19leGNsdWRlZChkaXIsIGlzdGF0ZSwgcGF0aC0+YnVmLCAmZHR5cGUpOworCisJLyoKKwkgKiBFeGNsdWRlZD8gSWYgd2UgZG9uJ3QgZXhwbGljaXRseSB3YW50IHRvIHNob3cKKwkgKiBpZ25vcmVkIGZpbGVzLCBpZ25vcmUgaXQKKwkgKi8KKwlpZiAoZXhjbHVkZWQgJiYgIShkaXItPmZsYWdzICYgKERJUl9TSE9XX0lHTk9SRUR8RElSX1NIT1dfSUdOT1JFRF9UT08pKSkKKwkJcmV0dXJuIHBhdGhfZXhjbHVkZWQ7CisKKwlzd2l0Y2ggKGR0eXBlKSB7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHBhdGhfbm9uZTsKKwljYXNlIERUX0RJUjoKKwkJLyoKKwkJICogV0FSTklORzogRG8gbm90IGlnbm9yZS9hbWVuZCB0aGUgcmV0dXJuIHZhbHVlIGZyb20KKwkJICogdHJlYXRfZGlyZWN0b3J5KCksIGFuZCBlc3BlY2lhbGx5IGRvIG5vdCBjaGFuZ2UgaXQgdG8gcmV0dXJuCisJCSAqIHBhdGhfcmVjdXJzZSBhcyB0aGF0IGNhbiBjYXVzZSBleHBvbmVudGlhbCBzbG93ZG93bi4KKwkJICogSW5zdGVhZCwgbW9kaWZ5IHRyZWF0X2RpcmVjdG9yeSgpIHRvIHJldHVybiB0aGUgcmlnaHQgdmFsdWUuCisJCSAqLworCQlzdHJidWZfYWRkY2gocGF0aCwgJy8nKTsKKwkJcmV0dXJuIHRyZWF0X2RpcmVjdG9yeShkaXIsIGlzdGF0ZSwgdW50cmFja2VkLAorCQkJCSAgICAgICBwYXRoLT5idWYsIHBhdGgtPmxlbiwKKwkJCQkgICAgICAgYmFzZWxlbiwgZXhjbHVkZWQsIHBhdGhzcGVjKTsKKwljYXNlIERUX1JFRzoKKwljYXNlIERUX0xOSzoKKwkJaWYgKGV4Y2x1ZGVkKQorCQkJcmV0dXJuIHBhdGhfZXhjbHVkZWQ7CisJCWlmIChwYXRoc3BlYyAmJgorCQkgICAgIWRvX21hdGNoX3BhdGhzcGVjKGlzdGF0ZSwgcGF0aHNwZWMsIHBhdGgtPmJ1ZiwgcGF0aC0+bGVuLAorCQkJCSAgICAgICAwIC8qIHByZWZpeCAqLywgTlVMTCAvKiBzZWVuICovLAorCQkJCSAgICAgICAwIC8qIGZsYWdzICovKSkKKwkJCXJldHVybiBwYXRoX25vbmU7CisJCXJldHVybiBwYXRoX3VudHJhY2tlZDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFkZF91bnRyYWNrZWQoc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKmRpciwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoIWRpcikKKwkJcmV0dXJuOworCUFMTE9DX0dST1coZGlyLT51bnRyYWNrZWQsIGRpci0+dW50cmFja2VkX25yICsgMSwKKwkJICAgZGlyLT51bnRyYWNrZWRfYWxsb2MpOworCWRpci0+dW50cmFja2VkW2Rpci0+dW50cmFja2VkX25yKytdID0geHN0cmR1cChuYW1lKTsKK30KKworc3RhdGljIGludCB2YWxpZF9jYWNoZWRfZGlyKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkgICAgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZCwKKwkJCSAgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpwYXRoLAorCQkJICAgIGludCBjaGVja19vbmx5KQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKCF1bnRyYWNrZWQpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBXaXRoIGZzbW9uaXRvciwgd2UgY2FuIHRydXN0IHRoZSB1bnRyYWNrZWQgY2FjaGUncyB2YWxpZCBmaWVsZC4KKwkgKi8KKwlyZWZyZXNoX2ZzbW9uaXRvcihpc3RhdGUpOworCWlmICghKGRpci0+dW50cmFja2VkLT51c2VfZnNtb25pdG9yICYmIHVudHJhY2tlZC0+dmFsaWQpKSB7CisJCWlmIChsc3RhdChwYXRoLT5sZW4gPyBwYXRoLT5idWYgOiAiLiIsICZzdCkpIHsKKwkJCW1lbXNldCgmdW50cmFja2VkLT5zdGF0X2RhdGEsIDAsIHNpemVvZih1bnRyYWNrZWQtPnN0YXRfZGF0YSkpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKCF1bnRyYWNrZWQtPnZhbGlkIHx8CisJCQltYXRjaF9zdGF0X2RhdGFfcmFjeShpc3RhdGUsICZ1bnRyYWNrZWQtPnN0YXRfZGF0YSwgJnN0KSkgeworCQkJZmlsbF9zdGF0X2RhdGEoJnVudHJhY2tlZC0+c3RhdF9kYXRhLCAmc3QpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAodW50cmFja2VkLT5jaGVja19vbmx5ICE9ICEhY2hlY2tfb25seSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIHByZXBfZXhjbHVkZSB3aWxsIGJlIGNhbGxlZCBldmVudHVhbGx5IG9uIHRoaXMgZGlyZWN0b3J5LAorCSAqIGJ1dCBpdCdzIGNhbGxlZCBtdWNoIGxhdGVyIGluIGxhc3RfbWF0Y2hpbmdfcGF0dGVybigpLiBXZQorCSAqIG5lZWQgaXQgbm93IHRvIGRldGVybWluZSB0aGUgdmFsaWRpdHkgb2YgdGhlIGNhY2hlIGZvciB0aGlzCisJICogcGF0aC4gVGhlIG5leHQgY2FsbHMgd2lsbCBiZSBuZWFybHkgbm8tb3AsIHRoZSB3YXkKKwkgKiBwcmVwX2V4Y2x1ZGUoKSBpcyBkZXNpZ25lZC4KKwkgKi8KKwlpZiAocGF0aC0+bGVuICYmIHBhdGgtPmJ1ZltwYXRoLT5sZW4gLSAxXSAhPSAnLycpIHsKKwkJc3RyYnVmX2FkZGNoKHBhdGgsICcvJyk7CisJCXByZXBfZXhjbHVkZShkaXIsIGlzdGF0ZSwgcGF0aC0+YnVmLCBwYXRoLT5sZW4pOworCQlzdHJidWZfc2V0bGVuKHBhdGgsIHBhdGgtPmxlbiAtIDEpOworCX0gZWxzZQorCQlwcmVwX2V4Y2x1ZGUoZGlyLCBpc3RhdGUsIHBhdGgtPmJ1ZiwgcGF0aC0+bGVuKTsKKworCS8qIGhvcGVmdWxseSBwcmVwX2V4Y2x1ZGUoKSBoYXZlbid0IGludmFsaWRhdGVkIHRoaXMgZW50cnkuLi4gKi8KKwlyZXR1cm4gdW50cmFja2VkLT52YWxpZDsKK30KKworc3RhdGljIGludCBvcGVuX2NhY2hlZF9kaXIoc3RydWN0IGNhY2hlZF9kaXIgKmNkaXIsCisJCQkgICBzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJICAgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZCwKKwkJCSAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqcGF0aCwKKwkJCSAgIGludCBjaGVja19vbmx5KQoreworCWNvbnN0IGNoYXIgKmNfcGF0aDsKKworCW1lbXNldChjZGlyLCAwLCBzaXplb2YoKmNkaXIpKTsKKwljZGlyLT51bnRyYWNrZWQgPSB1bnRyYWNrZWQ7CisJaWYgKHZhbGlkX2NhY2hlZF9kaXIoZGlyLCB1bnRyYWNrZWQsIGlzdGF0ZSwgcGF0aCwgY2hlY2tfb25seSkpCisJCXJldHVybiAwOworCWNfcGF0aCA9IHBhdGgtPmxlbiA/IHBhdGgtPmJ1ZiA6ICIuIjsKKwljZGlyLT5mZGlyID0gb3BlbmRpcihjX3BhdGgpOworCWlmICghY2Rpci0+ZmRpcikKKwkJd2FybmluZ19lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyVzJyIpLCBjX3BhdGgpOworCWlmIChkaXItPnVudHJhY2tlZCkgeworCQlpbnZhbGlkYXRlX2RpcmVjdG9yeShkaXItPnVudHJhY2tlZCwgdW50cmFja2VkKTsKKwkJZGlyLT51bnRyYWNrZWQtPmRpcl9vcGVuZWQrKzsKKwl9CisJaWYgKCFjZGlyLT5mZGlyKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9jYWNoZWRfZGlyKHN0cnVjdCBjYWNoZWRfZGlyICpjZGlyKQoreworCXN0cnVjdCBkaXJlbnQgKmRlOworCisJaWYgKGNkaXItPmZkaXIpIHsKKwkJZGUgPSByZWFkZGlyKGNkaXItPmZkaXIpOworCQlpZiAoIWRlKSB7CisJCQljZGlyLT5kX25hbWUgPSBOVUxMOworCQkJY2Rpci0+ZF90eXBlID0gRFRfVU5LTk9XTjsKKwkJCXJldHVybiAtMTsKKwkJfQorCQljZGlyLT5kX25hbWUgPSBkZS0+ZF9uYW1lOworCQljZGlyLT5kX3R5cGUgPSBEVFlQRShkZSk7CisJCXJldHVybiAwOworCX0KKwl3aGlsZSAoY2Rpci0+bnJfZGlycyA8IGNkaXItPnVudHJhY2tlZC0+ZGlyc19ucikgeworCQlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqZCA9IGNkaXItPnVudHJhY2tlZC0+ZGlyc1tjZGlyLT5ucl9kaXJzXTsKKwkJaWYgKCFkLT5yZWN1cnNlKSB7CisJCQljZGlyLT5ucl9kaXJzKys7CisJCQljb250aW51ZTsKKwkJfQorCQljZGlyLT51Y2QgPSBkOworCQljZGlyLT5ucl9kaXJzKys7CisJCXJldHVybiAwOworCX0KKwljZGlyLT51Y2QgPSBOVUxMOworCWlmIChjZGlyLT5ucl9maWxlcyA8IGNkaXItPnVudHJhY2tlZC0+dW50cmFja2VkX25yKSB7CisJCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpkID0gY2Rpci0+dW50cmFja2VkOworCQljZGlyLT5maWxlID0gZC0+dW50cmFja2VkW2NkaXItPm5yX2ZpbGVzKytdOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBjbG9zZV9jYWNoZWRfZGlyKHN0cnVjdCBjYWNoZWRfZGlyICpjZGlyKQoreworCWlmIChjZGlyLT5mZGlyKQorCQljbG9zZWRpcihjZGlyLT5mZGlyKTsKKwkvKgorCSAqIFdlIGhhdmUgZ29uZSB0aHJvdWdoIHRoaXMgZGlyZWN0b3J5IGFuZCBmb3VuZCBubyB1bnRyYWNrZWQKKwkgKiBlbnRyaWVzLiBNYXJrIGl0IHZhbGlkLgorCSAqLworCWlmIChjZGlyLT51bnRyYWNrZWQpIHsKKwkJY2Rpci0+dW50cmFja2VkLT52YWxpZCA9IDE7CisJCWNkaXItPnVudHJhY2tlZC0+cmVjdXJzZSA9IDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfcGF0aF90b19hcHByb3ByaWF0ZV9yZXN1bHRfbGlzdChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQsCisJc3RydWN0IGNhY2hlZF9kaXIgKmNkaXIsCisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJc3RydWN0IHN0cmJ1ZiAqcGF0aCwKKwlpbnQgYmFzZWxlbiwKKwljb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCWVudW0gcGF0aF90cmVhdG1lbnQgc3RhdGUpCit7CisJLyogYWRkIHRoZSBwYXRoIHRvIHRoZSBhcHByb3ByaWF0ZSByZXN1bHQgbGlzdCAqLworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIHBhdGhfZXhjbHVkZWQ6CisJCWlmIChkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCkKKwkJCWRpcl9hZGRfbmFtZShkaXIsIGlzdGF0ZSwgcGF0aC0+YnVmLCBwYXRoLT5sZW4pOworCQllbHNlIGlmICgoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRURfVE9PKSB8fAorCQkJKChkaXItPmZsYWdzICYgRElSX0NPTExFQ1RfSUdOT1JFRCkgJiYKKwkJCWV4Y2x1ZGVfbWF0Y2hlc19wYXRoc3BlYyhwYXRoLT5idWYsIHBhdGgtPmxlbiwKKwkJCQkJCSBwYXRoc3BlYykpKQorCQkJZGlyX2FkZF9pZ25vcmVkKGRpciwgaXN0YXRlLCBwYXRoLT5idWYsIHBhdGgtPmxlbik7CisJCWJyZWFrOworCisJY2FzZSBwYXRoX3VudHJhY2tlZDoKKwkJaWYgKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKQorCQkJYnJlYWs7CisJCWRpcl9hZGRfbmFtZShkaXIsIGlzdGF0ZSwgcGF0aC0+YnVmLCBwYXRoLT5sZW4pOworCQlpZiAoY2Rpci0+ZmRpcikKKwkJCWFkZF91bnRyYWNrZWQodW50cmFja2VkLCBwYXRoLT5idWYgKyBiYXNlbGVuKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBSZWFkIGEgZGlyZWN0b3J5IHRyZWUuIFdlIGN1cnJlbnRseSBpZ25vcmUgYW55dGhpbmcgYnV0CisgKiBkaXJlY3RvcmllcywgcmVndWxhciBmaWxlcyBhbmQgc3ltbGlua3MuIFRoYXQncyBiZWNhdXNlIGdpdAorICogZG9lc24ndCBoYW5kbGUgdGhlbSBhdCBhbGwgeWV0LiBNYXliZSB0aGF0IHdpbGwgY2hhbmdlIHNvbWUKKyAqIGRheS4KKyAqCisgKiBBbHNvLCB3ZSBpZ25vcmUgdGhlIG5hbWUgIi5naXQiIChldmVuIGlmIGl0IGlzIG5vdCBhIGRpcmVjdG9yeSkuCisgKiBUaGF0IGxpa2VseSB3aWxsIG5vdCBjaGFuZ2UuCisgKgorICogSWYgJ3N0b3BfYXRfZmlyc3RfZmlsZScgaXMgc3BlY2lmaWVkLCAncGF0aF9leGNsdWRlZCcgaXMgcmV0dXJuZWQKKyAqIHRvIHNpZ25hbCB0aGF0IGEgZmlsZSB3YXMgZm91bmQuIFRoaXMgaXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IHZhbHVlIHRoYXQKKyAqIGluZGljYXRlcyB0aGF0IGEgZmlsZSB3YXMgZW5jb3VudGVyZWQgdGhhdCBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIG9yZGVyIG9mCisgKiB3aGV0aGVyIGFuIHVudHJhY2tlZCBvciBleGNsdWRlZCBwYXRoIHdhcyBlbmNvdW50ZXJlZCBmaXJzdC4KKyAqCisgKiBSZXR1cm5zIHRoZSBtb3N0IHNpZ25pZmljYW50IHBhdGhfdHJlYXRtZW50IHZhbHVlIGVuY291bnRlcmVkIGluIHRoZSBzY2FuLgorICogSWYgJ3N0b3BfYXRfZmlyc3RfZmlsZScgaXMgc3BlY2lmaWVkLCBgcGF0aF9leGNsdWRlZGAgaXMgdGhlIG1vc3QKKyAqIHNpZ25pZmljYW50IHBhdGhfdHJlYXRtZW50IHZhbHVlIHRoYXQgd2lsbCBiZSByZXR1cm5lZC4KKyAqLworCitzdGF0aWMgZW51bSBwYXRoX3RyZWF0bWVudCByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sCisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZCwgaW50IGNoZWNrX29ubHksCisJaW50IHN0b3BfYXRfZmlyc3RfZmlsZSwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwkvKgorCSAqIFdBUk5JTkc6IERvIE5PVCByZWN1cnNlIHVubGVzcyBwYXRoX3JlY3Vyc2UgaXMgcmV0dXJuZWQgZnJvbQorCSAqICAgICAgICAgIHRyZWF0X3BhdGgoKS4gIFJlY3Vyc2luZyBvbiBhbnkgb3RoZXIgcmV0dXJuIHZhbHVlCisJICogICAgICAgICAgY2FuIHJlc3VsdCBpbiBleHBvbmVudGlhbCBzbG93ZG93bi4KKwkgKi8KKwlzdHJ1Y3QgY2FjaGVkX2RpciBjZGlyOworCWVudW0gcGF0aF90cmVhdG1lbnQgc3RhdGUsIHN1YmRpcl9zdGF0ZSwgZGlyX3N0YXRlID0gcGF0aF9ub25lOworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZCgmcGF0aCwgYmFzZSwgYmFzZWxlbik7CisKKwlpZiAob3Blbl9jYWNoZWRfZGlyKCZjZGlyLCBkaXIsIHVudHJhY2tlZCwgaXN0YXRlLCAmcGF0aCwgY2hlY2tfb25seSkpCisJCWdvdG8gb3V0OworCisJaWYgKHVudHJhY2tlZCkKKwkJdW50cmFja2VkLT5jaGVja19vbmx5ID0gISFjaGVja19vbmx5OworCisJd2hpbGUgKCFyZWFkX2NhY2hlZF9kaXIoJmNkaXIpKSB7CisJCS8qIGNoZWNrIGhvdyB0aGUgZmlsZSBvciBkaXJlY3Rvcnkgc2hvdWxkIGJlIHRyZWF0ZWQgKi8KKwkJc3RhdGUgPSB0cmVhdF9wYXRoKGRpciwgdW50cmFja2VkLCAmY2RpciwgaXN0YXRlLCAmcGF0aCwKKwkJCQkgICBiYXNlbGVuLCBwYXRoc3BlYyk7CisKKwkJaWYgKHN0YXRlID4gZGlyX3N0YXRlKQorCQkJZGlyX3N0YXRlID0gc3RhdGU7CisKKwkJLyogcmVjdXJzZSBpbnRvIHN1YmRpciBpZiBpbnN0cnVjdGVkIGJ5IHRyZWF0X3BhdGggKi8KKwkJaWYgKHN0YXRlID09IHBhdGhfcmVjdXJzZSkgeworCQkJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVkOworCQkJdWQgPSBsb29rdXBfdW50cmFja2VkKGRpci0+dW50cmFja2VkLCB1bnRyYWNrZWQsCisJCQkJCSAgICAgIHBhdGguYnVmICsgYmFzZWxlbiwKKwkJCQkJICAgICAgcGF0aC5sZW4gLSBiYXNlbGVuKTsKKwkJCXN1YmRpcl9zdGF0ZSA9CisJCQkJcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKGRpciwgaXN0YXRlLCBwYXRoLmJ1ZiwKKwkJCQkJCQkgcGF0aC5sZW4sIHVkLAorCQkJCQkJCSBjaGVja19vbmx5LCBzdG9wX2F0X2ZpcnN0X2ZpbGUsIHBhdGhzcGVjKTsKKwkJCWlmIChzdWJkaXJfc3RhdGUgPiBkaXJfc3RhdGUpCisJCQkJZGlyX3N0YXRlID0gc3ViZGlyX3N0YXRlOworCisJCQlpZiAocGF0aHNwZWMgJiYKKwkJCSAgICAhbWF0Y2hfcGF0aHNwZWMoaXN0YXRlLCBwYXRoc3BlYywgcGF0aC5idWYsIHBhdGgubGVuLAorCQkJCQkgICAgMCAvKiBwcmVmaXggKi8sIE5VTEwsCisJCQkJCSAgICAwIC8qIGRvIE5PVCBzcGVjaWFsIGNhc2UgZGlycyAqLykpCisJCQkJc3RhdGUgPSBwYXRoX25vbmU7CisJCX0KKworCQlpZiAoY2hlY2tfb25seSkgeworCQkJaWYgKHN0b3BfYXRfZmlyc3RfZmlsZSkgeworCQkJCS8qCisJCQkJICogSWYgc3RvcHBpbmcgYXQgZmlyc3QgZmlsZSwgdGhlbgorCQkJCSAqIHNpZ25hbCB0aGF0IGEgZmlsZSB3YXMgZm91bmQgYnkKKwkJCQkgKiByZXR1cm5pbmcgYHBhdGhfZXhjbHVkZWRgLiBUaGlzIGlzCisJCQkJICogdG8gcmV0dXJuIGEgY29uc2lzdGVudCB2YWx1ZQorCQkJCSAqIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhbiBpZ25vcmVkIG9yCisJCQkJICogZXhjbHVkZWQgZmlsZSBoYXBwZW5lZCB0byBiZQorCQkJCSAqIGVuY291bnRlcmVkIDFzdC4KKwkJCQkgKgorCQkJCSAqIEluIGN1cnJlbnQgdXNhZ2UsIHRoZQorCQkJCSAqIGBzdG9wX2F0X2ZpcnN0X2ZpbGVgIGlzIHBhc3NlZCB3aGVuCisJCQkJICogYW4gYW5jZXN0b3IgZGlyZWN0b3J5IGhhcyBtYXRjaGVkCisJCQkJICogYW4gZXhjbHVkZSBwYXR0ZXJuLCBzbyBhbnkgZm91bmQKKwkJCQkgKiBmaWxlcyB3aWxsIGJlIGV4Y2x1ZGVkLgorCQkJCSAqLworCQkJCWlmIChkaXJfc3RhdGUgPj0gcGF0aF9leGNsdWRlZCkgeworCQkJCQlkaXJfc3RhdGUgPSBwYXRoX2V4Y2x1ZGVkOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCS8qIGFib3J0IGVhcmx5IGlmIG1heGltdW0gc3RhdGUgaGFzIGJlZW4gcmVhY2hlZCAqLworCQkJaWYgKGRpcl9zdGF0ZSA9PSBwYXRoX3VudHJhY2tlZCkgeworCQkJCWlmIChjZGlyLmZkaXIpCisJCQkJCWFkZF91bnRyYWNrZWQodW50cmFja2VkLCBwYXRoLmJ1ZiArIGJhc2VsZW4pOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogc2tpcCB0aGUgYWRkX3BhdGhfdG9fYXBwcm9wcmlhdGVfcmVzdWx0X2xpc3QoKSAqLworCQkJY29udGludWU7CisJCX0KKworCQlhZGRfcGF0aF90b19hcHByb3ByaWF0ZV9yZXN1bHRfbGlzdChkaXIsIHVudHJhY2tlZCwgJmNkaXIsCisJCQkJCQkgICAgaXN0YXRlLCAmcGF0aCwgYmFzZWxlbiwKKwkJCQkJCSAgICBwYXRoc3BlYywgc3RhdGUpOworCX0KKwljbG9zZV9jYWNoZWRfZGlyKCZjZGlyKTsKKyBvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCisJcmV0dXJuIGRpcl9zdGF0ZTsKK30KKworaW50IGNtcF9kaXJfZW50cnkoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQoreworCWNvbnN0IHN0cnVjdCBkaXJfZW50cnkgKmUxID0gKihjb25zdCBzdHJ1Y3QgZGlyX2VudHJ5ICoqKXAxOworCWNvbnN0IHN0cnVjdCBkaXJfZW50cnkgKmUyID0gKihjb25zdCBzdHJ1Y3QgZGlyX2VudHJ5ICoqKXAyOworCisJcmV0dXJuIG5hbWVfY29tcGFyZShlMS0+bmFtZSwgZTEtPmxlbiwgZTItPm5hbWUsIGUyLT5sZW4pOworfQorCisvKiBjaGVjayBpZiAqb3V0IGxleGljYWxseSBzdHJpY3RseSBjb250YWlucyAqaW4gKi8KK2ludCBjaGVja19kaXJfZW50cnlfY29udGFpbnMoY29uc3Qgc3RydWN0IGRpcl9lbnRyeSAqb3V0LCBjb25zdCBzdHJ1Y3QgZGlyX2VudHJ5ICppbikKK3sKKwlyZXR1cm4gKG91dC0+bGVuIDwgaW4tPmxlbikgJiYKKwkJKG91dC0+bmFtZVtvdXQtPmxlbiAtIDFdID09ICcvJykgJiYKKwkJIW1lbWNtcChvdXQtPm5hbWUsIGluLT5uYW1lLCBvdXQtPmxlbik7Cit9CisKK3N0YXRpYyBpbnQgdHJlYXRfbGVhZGluZ19wYXRoKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkgICAgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHN1YmRpciA9IFNUUkJVRl9JTklUOworCWludCBwcmV2bGVuLCBiYXNlbGVuOworCWNvbnN0IGNoYXIgKmNwOworCXN0cnVjdCBjYWNoZWRfZGlyIGNkaXI7CisJZW51bSBwYXRoX3RyZWF0bWVudCBzdGF0ZSA9IHBhdGhfbm9uZTsKKworCS8qCisJICogRm9yIGVhY2ggZGlyZWN0b3J5IGNvbXBvbmVudCBvZiBwYXRoLCB3ZSBhcmUgZ29pbmcgdG8gY2hlY2sgd2hldGhlcgorCSAqIHRoYXQgcGF0aCBpcyByZWxldmFudCBnaXZlbiB0aGUgcGF0aHNwZWMuICBGb3IgZXhhbXBsZSwgaWYgcGF0aCBpcworCSAqICAgIGZvby9iYXIvYmF6LworCSAqIHRoZW4gd2Ugd2lsbCBhc2sgdHJlYXRfcGF0aCgpIHdoZXRoZXIgd2Ugc2hvdWxkIGdvIGludG8gZm9vLCB0aGVuCisJICogd2hldGhlciB3ZSBzaG91bGQgZ28gaW50byBiYXIsIHRoZW4gd2hldGhlciBiYXogaXMgcmVsZXZhbnQuCisJICogQ2hlY2tpbmcgZWFjaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBlLmcuIGlmIHBhdGggaXMKKwkgKiAgICAuZ2l0L2luZm8vCisJICogdGhlbiB3ZSBuZWVkIHRvIGNoZWNrIC5naXQgdG8ga25vdyB3ZSBzaG91bGRuJ3QgdHJhdmVyc2UgaXQuCisJICogSWYgdGhlIHJldHVybiBmcm9tIHRyZWF0X3BhdGgoKSBpczoKKwkgKiAgICAqIHBhdGhfbm9uZSwgZm9yIGFueSBwYXRoLCB3ZSByZXR1cm4gZmFsc2UuCisJICogICAgKiBwYXRoX3JlY3Vyc2UsIGZvciBhbGwgcGF0aCBjb21wb25lbnRzLCB3ZSByZXR1cm4gdHJ1ZQorCSAqICAgICogPGFueXRoaW5nIGVsc2U+IGZvciBzb21lIGludGVybWVkaWF0ZSBjb21wb25lbnQsIHdlIG1ha2Ugc3VyZQorCSAqICAgICAgICB0byBhZGQgdGhhdCBwYXRoIHRvIHRoZSByZWxldmFudCBsaXN0IGJ1dCByZXR1cm4gZmFsc2UKKwkgKiAgICAgICAgc2lnbmlmeWluZyB0aGF0IHdlIHNob3VsZG4ndCByZWN1cnNlIGludG8gaXQuCisJICovCisKKwl3aGlsZSAobGVuICYmIHBhdGhbbGVuIC0gMV0gPT0gJy8nKQorCQlsZW4tLTsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDE7CisKKwltZW1zZXQoJmNkaXIsIDAsIHNpemVvZihjZGlyKSk7CisJY2Rpci5kX3R5cGUgPSBEVF9ESVI7CisJYmFzZWxlbiA9IDA7CisJcHJldmxlbiA9IDA7CisJd2hpbGUgKDEpIHsKKwkJcHJldmxlbiA9IGJhc2VsZW4gKyAhIWJhc2VsZW47CisJCWNwID0gcGF0aCArIHByZXZsZW47CisJCWNwID0gbWVtY2hyKGNwLCAnLycsIHBhdGggKyBsZW4gLSBjcCk7CisJCWlmICghY3ApCisJCQliYXNlbGVuID0gbGVuOworCQllbHNlCisJCQliYXNlbGVuID0gY3AgLSBwYXRoOworCQlzdHJidWZfcmVzZXQoJnNiKTsKKwkJc3RyYnVmX2FkZCgmc2IsIHBhdGgsIGJhc2VsZW4pOworCQlpZiAoIWlzX2RpcmVjdG9yeShzYi5idWYpKQorCQkJYnJlYWs7CisJCXN0cmJ1Zl9yZXNldCgmc2IpOworCQlzdHJidWZfYWRkKCZzYiwgcGF0aCwgcHJldmxlbik7CisJCXN0cmJ1Zl9yZXNldCgmc3ViZGlyKTsKKwkJc3RyYnVmX2FkZCgmc3ViZGlyLCBwYXRoK3ByZXZsZW4sIGJhc2VsZW4tcHJldmxlbik7CisJCWNkaXIuZF9uYW1lID0gc3ViZGlyLmJ1ZjsKKwkJc3RhdGUgPSB0cmVhdF9wYXRoKGRpciwgTlVMTCwgJmNkaXIsIGlzdGF0ZSwgJnNiLCBwcmV2bGVuLCBwYXRoc3BlYyk7CisKKwkJaWYgKHN0YXRlICE9IHBhdGhfcmVjdXJzZSkKKwkJCWJyZWFrOyAvKiBkbyBub3QgcmVjdXJzZSBpbnRvIGl0ICovCisJCWlmIChsZW4gPD0gYmFzZWxlbikKKwkJCWJyZWFrOyAvKiBmaW5pc2hlZCBjaGVja2luZyAqLworCX0KKwlhZGRfcGF0aF90b19hcHByb3ByaWF0ZV9yZXN1bHRfbGlzdChkaXIsIE5VTEwsICZjZGlyLCBpc3RhdGUsCisJCQkJCSAgICAmc2IsIGJhc2VsZW4sIHBhdGhzcGVjLAorCQkJCQkgICAgc3RhdGUpOworCisJc3RyYnVmX3JlbGVhc2UoJnN1YmRpcik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gc3RhdGUgPT0gcGF0aF9yZWN1cnNlOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2lkZW50X3N0cmluZyh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHV0c25hbWUgdXRzOworCisJaWYgKHNiLmxlbikKKwkJcmV0dXJuIHNiLmJ1ZjsKKwlpZiAodW5hbWUoJnV0cykgPCAwKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iKSk7CisJc3RyYnVmX2FkZGYoJnNiLCAiTG9jYXRpb24gJXMsIHN5c3RlbSAlcyIsIGdldF9naXRfd29ya190cmVlKCksCisJCSAgICB1dHMuc3lzbmFtZSk7CisJcmV0dXJuIHNiLmJ1ZjsKK30KKworc3RhdGljIGludCBpZGVudF9pbl91bnRyYWNrZWQoY29uc3Qgc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdWMpCit7CisJLyoKKwkgKiBQcmV2aW91cyBnaXQgdmVyc2lvbnMgbWF5IGhhdmUgc2F2ZWQgbWFueSBOVUwgc2VwYXJhdGVkCisJICogc3RyaW5ncyBpbiB0aGUgImlkZW50IiBmaWVsZCwgYnV0IGl0IGlzIGluc2FuZSB0byBtYW5hZ2UKKwkgKiBtYW55IGxvY2F0aW9ucywgc28ganVzdCB0YWtlIGNhcmUgb2YgdGhlIGZpcnN0IG9uZS4KKwkgKi8KKworCXJldHVybiAhc3RyY21wKHVjLT5pZGVudC5idWYsIGdldF9pZGVudF9zdHJpbmcoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF91bnRyYWNrZWRfaWRlbnQoc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdWMpCit7CisJc3RyYnVmX3Jlc2V0KCZ1Yy0+aWRlbnQpOworCXN0cmJ1Zl9hZGRzdHIoJnVjLT5pZGVudCwgZ2V0X2lkZW50X3N0cmluZygpKTsKKworCS8qCisJICogVGhpcyBzdHJidWYgdXNlZCB0byBjb250YWluIGEgbGlzdCBvZiBOVUwgc2VwYXJhdGVkCisJICogc3RyaW5ncywgc28gc2F2ZSBOVUwgdG9vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCSAqLworCXN0cmJ1Zl9hZGRjaCgmdWMtPmlkZW50LCAwKTsKK30KKworc3RhdGljIHZvaWQgbmV3X3VudHJhY2tlZF9jYWNoZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCp1YykpOworCXN0cmJ1Zl9pbml0KCZ1Yy0+aWRlbnQsIDEwMCk7CisJdWMtPmV4Y2x1ZGVfcGVyX2RpciA9ICIuZ2l0aWdub3JlIjsKKwkvKiBzaG91bGQgYmUgdGhlIHNhbWUgZmxhZ3MgdXNlZCBieSBnaXQtc3RhdHVzICovCisJdWMtPmRpcl9mbGFncyA9IERJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTIHwgRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVM7CisJc2V0X3VudHJhY2tlZF9pZGVudCh1Yyk7CisJaXN0YXRlLT51bnRyYWNrZWQgPSB1YzsKKwlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gVU5UUkFDS0VEX0NIQU5HRUQ7Cit9CisKK3ZvaWQgYWRkX3VudHJhY2tlZF9jYWNoZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpZiAoIWlzdGF0ZS0+dW50cmFja2VkKSB7CisJCW5ld191bnRyYWNrZWRfY2FjaGUoaXN0YXRlKTsKKwl9IGVsc2UgeworCQlpZiAoIWlkZW50X2luX3VudHJhY2tlZChpc3RhdGUtPnVudHJhY2tlZCkpIHsKKwkJCWZyZWVfdW50cmFja2VkX2NhY2hlKGlzdGF0ZS0+dW50cmFja2VkKTsKKwkJCW5ld191bnRyYWNrZWRfY2FjaGUoaXN0YXRlKTsKKwkJfQorCX0KK30KKwordm9pZCByZW1vdmVfdW50cmFja2VkX2NhY2hlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWlmIChpc3RhdGUtPnVudHJhY2tlZCkgeworCQlmcmVlX3VudHJhY2tlZF9jYWNoZShpc3RhdGUtPnVudHJhY2tlZCk7CisJCWlzdGF0ZS0+dW50cmFja2VkID0gTlVMTDsKKwkJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IFVOVFJBQ0tFRF9DSEFOR0VEOworCX0KK30KKworc3RhdGljIHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp2YWxpZGF0ZV91bnRyYWNrZWRfY2FjaGUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCQkJCSAgICAgIGludCBiYXNlX2xlbiwKKwkJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnJvb3Q7CisJc3RhdGljIGludCB1bnRyYWNrZWRfY2FjaGVfZGlzYWJsZWQgPSAtMTsKKworCWlmICghZGlyLT51bnRyYWNrZWQpCisJCXJldHVybiBOVUxMOworCWlmICh1bnRyYWNrZWRfY2FjaGVfZGlzYWJsZWQgPCAwKQorCQl1bnRyYWNrZWRfY2FjaGVfZGlzYWJsZWQgPSBnaXRfZW52X2Jvb2woIkdJVF9ESVNBQkxFX1VOVFJBQ0tFRF9DQUNIRSIsIDApOworCWlmICh1bnRyYWNrZWRfY2FjaGVfZGlzYWJsZWQpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBXZSBvbmx5IHN1cHBvcnQgJEdJVF9ESVIvaW5mby9leGNsdWRlIGFuZCBjb3JlLmV4Y2x1ZGVzZmlsZQorCSAqIGFzIHRoZSBnbG9iYWwgaWdub3JlIHJ1bGUgZmlsZXMuIEFueSBvdGhlciBhZGRpdGlvbnMKKwkgKiAoZS5nLiBmcm9tIGNvbW1hbmQgbGluZSkgaW52YWxpZGF0ZSB0aGUgY2FjaGUuIFRoaXMKKwkgKiBjb25kaXRpb24gYWxzbyBjYXRjaGVzIHJ1bm5pbmcgc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoKQorCSAqIGJlZm9yZSBzZXR0aW5nIGRpci0+dW50cmFja2VkIQorCSAqLworCWlmIChkaXItPnVubWFuYWdlZF9leGNsdWRlX2ZpbGVzKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogT3B0aW1pemUgZm9yIHRoZSBtYWluIHVzZSBjYXNlIG9ubHk6IHdob2xlLXRyZWUgZ2l0CisJICogc3RhdHVzLiBNb3JlIHdvcmsgaW52b2x2ZWQgaW4gdHJlYXRfbGVhZGluZ19wYXRoKCkgaWYgd2UKKwkgKiB1c2UgY2FjaGUgb24ganVzdCBhIHN1YnNldCBvZiB0aGUgd29ya3RyZWUuIHBhdGhzcGVjCisJICogc3VwcG9ydCBjb3VsZCBtYWtlIHRoZSBtYXR0ZXIgZXZlbiB3b3JzZS4KKwkgKi8KKwlpZiAoYmFzZV9sZW4gfHwgKHBhdGhzcGVjICYmIHBhdGhzcGVjLT5ucikpCisJCXJldHVybiBOVUxMOworCisJLyogRGlmZmVyZW50IHNldCBvZiBmbGFncyBtYXkgcHJvZHVjZSBkaWZmZXJlbnQgcmVzdWx0cyAqLworCWlmIChkaXItPmZsYWdzICE9IGRpci0+dW50cmFja2VkLT5kaXJfZmxhZ3MgfHwKKwkgICAgLyoKKwkgICAgICogU2VlIHRyZWF0X2RpcmVjdG9yeSgpLCBjYXNlIGluZGV4X25vbmV4aXN0ZW50LiBXaXRob3V0CisJICAgICAqIHRoaXMgZmxhZywgd2UgbWF5IG5lZWQgdG8gYWxzbyBjYWNoZSAuZ2l0IGZpbGUgY29udGVudAorCSAgICAgKiBmb3IgdGhlIHJlc29sdmVfZ2l0bGlua19yZWYoKSBjYWxsLCB3aGljaCB3ZSBkb24ndC4KKwkgICAgICovCisJICAgICEoZGlyLT5mbGFncyAmIERJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTKSB8fAorCSAgICAvKiBXZSBkb24ndCBzdXBwb3J0IGNvbGxlY3RpbmcgaWdub3JlIGZpbGVzICovCisJICAgIChkaXItPmZsYWdzICYgKERJUl9TSE9XX0lHTk9SRUQgfCBESVJfU0hPV19JR05PUkVEX1RPTyB8CisJCQkgICBESVJfQ09MTEVDVF9JR05PUkVEKSkpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBJZiB3ZSB1c2UgLmdpdGlnbm9yZSBpbiB0aGUgY2FjaGUgYW5kIG5vdyB5b3UgY2hhbmdlIGl0IHRvCisJICogLmdpdGV4Y2x1ZGUsIGV2ZXJ5dGhpbmcgd2lsbCBnbyB3cm9uZy4KKwkgKi8KKwlpZiAoZGlyLT5leGNsdWRlX3Blcl9kaXIgIT0gZGlyLT51bnRyYWNrZWQtPmV4Y2x1ZGVfcGVyX2RpciAmJgorCSAgICBzdHJjbXAoZGlyLT5leGNsdWRlX3Blcl9kaXIsIGRpci0+dW50cmFja2VkLT5leGNsdWRlX3Blcl9kaXIpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogRVhDX0NNREwgaXMgbm90IGNvbnNpZGVyZWQgaW4gdGhlIGNhY2hlLiBJZiBwZW9wbGUgc2V0IGl0LAorCSAqIHNraXAgdGhlIGNhY2hlLgorCSAqLworCWlmIChkaXItPmV4Y2x1ZGVfbGlzdF9ncm91cFtFWENfQ01ETF0ubnIpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFpZGVudF9pbl91bnRyYWNrZWQoZGlyLT51bnRyYWNrZWQpKSB7CisJCXdhcm5pbmcoXygidW50cmFja2VkIGNhY2hlIGlzIGRpc2FibGVkIG9uIHRoaXMgc3lzdGVtIG9yIGxvY2F0aW9uIikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIWRpci0+dW50cmFja2VkLT5yb290KSB7CisJCWNvbnN0IGludCBsZW4gPSBzaXplb2YoKmRpci0+dW50cmFja2VkLT5yb290KTsKKwkJZGlyLT51bnRyYWNrZWQtPnJvb3QgPSB4bWFsbG9jKGxlbik7CisJCW1lbXNldChkaXItPnVudHJhY2tlZC0+cm9vdCwgMCwgbGVuKTsKKwl9CisKKwkvKiBWYWxpZGF0ZSAkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUgYW5kIGNvcmUuZXhjbHVkZXNmaWxlICovCisJcm9vdCA9IGRpci0+dW50cmFja2VkLT5yb290OworCWlmICghb2lkZXEoJmRpci0+c3NfaW5mb19leGNsdWRlLm9pZCwKKwkJICAgJmRpci0+dW50cmFja2VkLT5zc19pbmZvX2V4Y2x1ZGUub2lkKSkgeworCQlpbnZhbGlkYXRlX2dpdGlnbm9yZShkaXItPnVudHJhY2tlZCwgcm9vdCk7CisJCWRpci0+dW50cmFja2VkLT5zc19pbmZvX2V4Y2x1ZGUgPSBkaXItPnNzX2luZm9fZXhjbHVkZTsKKwl9CisJaWYgKCFvaWRlcSgmZGlyLT5zc19leGNsdWRlc19maWxlLm9pZCwKKwkJICAgJmRpci0+dW50cmFja2VkLT5zc19leGNsdWRlc19maWxlLm9pZCkpIHsKKwkJaW52YWxpZGF0ZV9naXRpZ25vcmUoZGlyLT51bnRyYWNrZWQsIHJvb3QpOworCQlkaXItPnVudHJhY2tlZC0+c3NfZXhjbHVkZXNfZmlsZSA9IGRpci0+c3NfZXhjbHVkZXNfZmlsZTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhpcyBkaXJlY3RvcnkgaXMgbm90IGRyb3BwZWQgb3V0IGF0IHNhdmluZyBwaGFzZSAqLworCXJvb3QtPnJlY3Vyc2UgPSAxOworCXJldHVybiByb290OworfQorCitpbnQgcmVhZF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCSAgIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZDsKKworCXRyYWNlX3BlcmZvcm1hbmNlX2VudGVyKCk7CisKKwlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKHBhdGgsIGxlbikpIHsKKwkJdHJhY2VfcGVyZm9ybWFuY2VfbGVhdmUoInJlYWQgZGlyZWN0b3J5ICUuKnMiLCBsZW4sIHBhdGgpOworCQlyZXR1cm4gZGlyLT5ucjsKKwl9CisKKwl1bnRyYWNrZWQgPSB2YWxpZGF0ZV91bnRyYWNrZWRfY2FjaGUoZGlyLCBsZW4sIHBhdGhzcGVjKTsKKwlpZiAoIXVudHJhY2tlZCkKKwkJLyoKKwkJICogbWFrZSBzdXJlIHVudHJhY2tlZCBjYWNoZSBjb2RlIHBhdGggaXMgZGlzYWJsZWQsCisJCSAqIGUuZy4gcHJlcF9leGNsdWRlKCkKKwkJICovCisJCWRpci0+dW50cmFja2VkID0gTlVMTDsKKwlpZiAoIWxlbiB8fCB0cmVhdF9sZWFkaW5nX3BhdGgoZGlyLCBpc3RhdGUsIHBhdGgsIGxlbiwgcGF0aHNwZWMpKQorCQlyZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLCBpc3RhdGUsIHBhdGgsIGxlbiwgdW50cmFja2VkLCAwLCAwLCBwYXRoc3BlYyk7CisJUVNPUlQoZGlyLT5lbnRyaWVzLCBkaXItPm5yLCBjbXBfZGlyX2VudHJ5KTsKKwlRU09SVChkaXItPmlnbm9yZWQsIGRpci0+aWdub3JlZF9uciwgY21wX2Rpcl9lbnRyeSk7CisKKwl0cmFjZV9wZXJmb3JtYW5jZV9sZWF2ZSgicmVhZCBkaXJlY3RvcnkgJS4qcyIsIGxlbiwgcGF0aCk7CisJaWYgKGRpci0+dW50cmFja2VkKSB7CisJCXN0YXRpYyBpbnQgZm9yY2VfdW50cmFja2VkX2NhY2hlID0gLTE7CisJCXN0YXRpYyBzdHJ1Y3QgdHJhY2Vfa2V5IHRyYWNlX3VudHJhY2tlZF9zdGF0cyA9IFRSQUNFX0tFWV9JTklUKFVOVFJBQ0tFRF9TVEFUUyk7CisKKwkJaWYgKGZvcmNlX3VudHJhY2tlZF9jYWNoZSA8IDApCisJCQlmb3JjZV91bnRyYWNrZWRfY2FjaGUgPQorCQkJCWdpdF9lbnZfYm9vbCgiR0lUX0ZPUkNFX1VOVFJBQ0tFRF9DQUNIRSIsIDApOworCQl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV91bnRyYWNrZWRfc3RhdHMsCisJCQkJICJub2RlIGNyZWF0aW9uOiAldVxuIgorCQkJCSAiZ2l0aWdub3JlIGludmFsaWRhdGlvbjogJXVcbiIKKwkJCQkgImRpcmVjdG9yeSBpbnZhbGlkYXRpb246ICV1XG4iCisJCQkJICJvcGVuZGlyOiAldVxuIiwKKwkJCQkgZGlyLT51bnRyYWNrZWQtPmRpcl9jcmVhdGVkLAorCQkJCSBkaXItPnVudHJhY2tlZC0+Z2l0aWdub3JlX2ludmFsaWRhdGVkLAorCQkJCSBkaXItPnVudHJhY2tlZC0+ZGlyX2ludmFsaWRhdGVkLAorCQkJCSBkaXItPnVudHJhY2tlZC0+ZGlyX29wZW5lZCk7CisJCWlmIChmb3JjZV91bnRyYWNrZWRfY2FjaGUgJiYKKwkJCWRpci0+dW50cmFja2VkID09IGlzdGF0ZS0+dW50cmFja2VkICYmCisJCSAgICAoZGlyLT51bnRyYWNrZWQtPmRpcl9vcGVuZWQgfHwKKwkJICAgICBkaXItPnVudHJhY2tlZC0+Z2l0aWdub3JlX2ludmFsaWRhdGVkIHx8CisJCSAgICAgZGlyLT51bnRyYWNrZWQtPmRpcl9pbnZhbGlkYXRlZCkpCisJCQlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gVU5UUkFDS0VEX0NIQU5HRUQ7CisJCWlmIChkaXItPnVudHJhY2tlZCAhPSBpc3RhdGUtPnVudHJhY2tlZCkgeworCQkJRlJFRV9BTkRfTlVMTChkaXItPnVudHJhY2tlZCk7CisJCX0KKwl9CisJcmV0dXJuIGRpci0+bnI7Cit9CisKK2ludCBmaWxlX2V4aXN0cyhjb25zdCBjaGFyICpmKQoreworCXN0cnVjdCBzdGF0IHNiOworCXJldHVybiBsc3RhdChmLCAmc2IpID09IDA7Cit9CisKK2ludCByZXBvX2ZpbGVfZXhpc3RzKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwYXRoKQoreworCWlmIChyZXBvICE9IHRoZV9yZXBvc2l0b3J5KQorCQlCVUcoImRvIG5vdCBrbm93IGhvdyB0byBjaGVjayBmaWxlIGV4aXN0ZW5jZSBpbiBhcmJpdHJhcnkgcmVwbyIpOworCisJcmV0dXJuIGZpbGVfZXhpc3RzKHBhdGgpOworfQorCitzdGF0aWMgaW50IGNtcF9pY2FzZShjaGFyIGEsIGNoYXIgYikKK3sKKwlpZiAoYSA9PSBiKQorCQlyZXR1cm4gMDsKKwlpZiAoaWdub3JlX2Nhc2UpCisJCXJldHVybiB0b3VwcGVyKGEpIC0gdG91cHBlcihiKTsKKwlyZXR1cm4gYSAtIGI7Cit9CisKKy8qCisgKiBHaXZlbiB0d28gbm9ybWFsaXplZCBwYXRocyAoYSB0cmFpbGluZyBzbGFzaCBpcyBvayksIGlmIHN1YmRpciBpcworICogb3V0c2lkZSBkaXIsIHJldHVybiAtMS4gIE90aGVyd2lzZSByZXR1cm4gdGhlIG9mZnNldCBpbiBzdWJkaXIgdGhhdAorICogY2FuIGJlIHVzZWQgYXMgcmVsYXRpdmUgcGF0aCB0byBkaXIuCisgKi8KK2ludCBkaXJfaW5zaWRlX29mKGNvbnN0IGNoYXIgKnN1YmRpciwgY29uc3QgY2hhciAqZGlyKQoreworCWludCBvZmZzZXQgPSAwOworCisJYXNzZXJ0KGRpciAmJiBzdWJkaXIgJiYgKmRpciAmJiAqc3ViZGlyKTsKKworCXdoaWxlICgqZGlyICYmICpzdWJkaXIgJiYgIWNtcF9pY2FzZSgqZGlyLCAqc3ViZGlyKSkgeworCQlkaXIrKzsKKwkJc3ViZGlyKys7CisJCW9mZnNldCsrOworCX0KKworCS8qIGhlbFtwXS9tZSB2cyBoZWxbbF0veWVhaCAqLworCWlmICgqZGlyICYmICpzdWJkaXIpCisJCXJldHVybiAtMTsKKworCWlmICghKnN1YmRpcikKKwkJcmV0dXJuICEqZGlyID8gb2Zmc2V0IDogLTE7IC8qIHNhbWUgZGlyICovCisKKwkvKiBmb28vW2JdYXIgdnMgZm9vL1tdICovCisJaWYgKGlzX2Rpcl9zZXAoZGlyWy0xXSkpCisJCXJldHVybiBpc19kaXJfc2VwKHN1YmRpclstMV0pID8gb2Zmc2V0IDogLTE7CisKKwkvKiBmb29bL11iYXIgdnMgZm9vW10gKi8KKwlyZXR1cm4gaXNfZGlyX3NlcCgqc3ViZGlyKSA/IG9mZnNldCArIDEgOiAtMTsKK30KKworaW50IGlzX2luc2lkZV9kaXIoY29uc3QgY2hhciAqZGlyKQoreworCWNoYXIgKmN3ZDsKKwlpbnQgcmM7CisKKwlpZiAoIWRpcikKKwkJcmV0dXJuIDA7CisKKwljd2QgPSB4Z2V0Y3dkKCk7CisJcmMgPSAoZGlyX2luc2lkZV9vZihjd2QsIGRpcikgPj0gMCk7CisJZnJlZShjd2QpOworCXJldHVybiByYzsKK30KKworaW50IGlzX2VtcHR5X2Rpcihjb25zdCBjaGFyICpwYXRoKQoreworCURJUiAqZGlyID0gb3BlbmRpcihwYXRoKTsKKwlzdHJ1Y3QgZGlyZW50ICplOworCWludCByZXQgPSAxOworCisJaWYgKCFkaXIpCisJCXJldHVybiAwOworCisJd2hpbGUgKChlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKQorCQlpZiAoIWlzX2RvdF9vcl9kb3Rkb3QoZS0+ZF9uYW1lKSkgeworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwljbG9zZWRpcihkaXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX2Rpcl9yZWN1cnNlKHN0cnVjdCBzdHJidWYgKnBhdGgsIGludCBmbGFnLCBpbnQgKmtlcHRfdXApCit7CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZTsKKwlpbnQgcmV0ID0gMCwgb3JpZ2luYWxfbGVuID0gcGF0aC0+bGVuLCBsZW4sIGtlcHRfZG93biA9IDA7CisJaW50IG9ubHlfZW1wdHkgPSAoZmxhZyAmIFJFTU9WRV9ESVJfRU1QVFlfT05MWSk7CisJaW50IGtlZXBfdG9wbGV2ZWwgPSAoZmxhZyAmIFJFTU9WRV9ESVJfS0VFUF9UT1BMRVZFTCk7CisJc3RydWN0IG9iamVjdF9pZCBzdWJtb2R1bGVfaGVhZDsKKworCWlmICgoZmxhZyAmIFJFTU9WRV9ESVJfS0VFUF9ORVNURURfR0lUKSAmJgorCSAgICAhcmVzb2x2ZV9naXRsaW5rX3JlZihwYXRoLT5idWYsICJIRUFEIiwgJnN1Ym1vZHVsZV9oZWFkKSkgeworCQkvKiBEbyBub3QgZGVzY2VuZCBhbmQgbnVrZSBhIG5lc3RlZCBnaXQgd29yayB0cmVlLiAqLworCQlpZiAoa2VwdF91cCkKKwkJCSprZXB0X3VwID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJZmxhZyAmPSB+UkVNT1ZFX0RJUl9LRUVQX1RPUExFVkVMOworCWRpciA9IG9wZW5kaXIocGF0aC0+YnVmKTsKKwlpZiAoIWRpcikgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuIGtlZXBfdG9wbGV2ZWwgPyAtMSA6IDA7CisJCWVsc2UgaWYgKGVycm5vID09IEVBQ0NFUyAmJiAha2VlcF90b3BsZXZlbCkKKwkJCS8qCisJCQkgKiBBbiBlbXB0eSBkaXIgY291bGQgYmUgcmVtb3ZhYmxlIGV2ZW4gaWYgaXQKKwkJCSAqIGlzIHVucmVhZGFibGU6CisJCQkgKi8KKwkJCXJldHVybiBybWRpcihwYXRoLT5idWYpOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQorCXN0cmJ1Zl9jb21wbGV0ZShwYXRoLCAnLycpOworCisJbGVuID0gcGF0aC0+bGVuOworCXdoaWxlICgoZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgbGVuKTsKKwkJc3RyYnVmX2FkZHN0cihwYXRoLCBlLT5kX25hbWUpOworCQlpZiAobHN0YXQocGF0aC0+YnVmLCAmc3QpKSB7CisJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJCS8qCisJCQkJICogZmlsZSBkaXNhcHBlYXJlZCwgd2hpY2ggaXMgd2hhdCB3ZQorCQkJCSAqIHdhbnRlZCBhbnl3YXkKKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQl9IGVsc2UgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCWlmICghcmVtb3ZlX2Rpcl9yZWN1cnNlKHBhdGgsIGZsYWcsICZrZXB0X2Rvd24pKQorCQkJCWNvbnRpbnVlOyAvKiBoYXBweSAqLworCQl9IGVsc2UgaWYgKCFvbmx5X2VtcHR5ICYmCisJCQkgICAoIXVubGluayhwYXRoLT5idWYpIHx8IGVycm5vID09IEVOT0VOVCkpIHsKKwkJCWNvbnRpbnVlOyAvKiBoYXBweSwgdG9vICovCisJCX0KKworCQkvKiBwYXRoIHRvbyBsb25nLCBzdGF0IGZhaWxzLCBvciBub24tZGlyZWN0b3J5IHN0aWxsIGV4aXN0cyAqLworCQlyZXQgPSAtMTsKKwkJYnJlYWs7CisJfQorCWNsb3NlZGlyKGRpcik7CisKKwlzdHJidWZfc2V0bGVuKHBhdGgsIG9yaWdpbmFsX2xlbik7CisJaWYgKCFyZXQgJiYgIWtlZXBfdG9wbGV2ZWwgJiYgIWtlcHRfZG93bikKKwkJcmV0ID0gKCFybWRpcihwYXRoLT5idWYpIHx8IGVycm5vID09IEVOT0VOVCkgPyAwIDogLTE7CisJZWxzZSBpZiAoa2VwdF91cCkKKwkJLyoKKwkJICogcmVwb3J0IHRoZSB1cGxldmVsIHRoYXQgaXQgaXMgbm90IGFuIGVycm9yIHRoYXQgd2UKKwkJICogZGlkIG5vdCBybWRpcigpIG91ciBkaXJlY3RvcnkuCisJCSAqLworCQkqa2VwdF91cCA9ICFyZXQ7CisJcmV0dXJuIHJldDsKK30KKworaW50IHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoc3RydWN0IHN0cmJ1ZiAqcGF0aCwgaW50IGZsYWcpCit7CisJcmV0dXJuIHJlbW92ZV9kaXJfcmVjdXJzZShwYXRoLCBmbGFnLCBOVUxMKTsKK30KKworc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfaW5mb19leGNsdWRlLCAiaW5mby9leGNsdWRlIikKKwordm9pZCBzZXR1cF9zdGFuZGFyZF9leGNsdWRlcyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKQoreworCWRpci0+ZXhjbHVkZV9wZXJfZGlyID0gIi5naXRpZ25vcmUiOworCisJLyogY29yZS5leGNsdWRlc2ZpbGUgZGVmYXVsdGluZyB0byAkWERHX0NPTkZJR19IT01FL2dpdC9pZ25vcmUgKi8KKwlpZiAoIWV4Y2x1ZGVzX2ZpbGUpCisJCWV4Y2x1ZGVzX2ZpbGUgPSB4ZGdfY29uZmlnX2hvbWUoImlnbm9yZSIpOworCWlmIChleGNsdWRlc19maWxlICYmICFhY2Nlc3Nfb3Jfd2FybihleGNsdWRlc19maWxlLCBSX09LLCAwKSkKKwkJYWRkX3BhdHRlcm5zX2Zyb21fZmlsZV8xKGRpciwgZXhjbHVkZXNfZmlsZSwKKwkJCQkJIGRpci0+dW50cmFja2VkID8gJmRpci0+c3NfZXhjbHVkZXNfZmlsZSA6IE5VTEwpOworCisJLyogcGVyIHJlcG9zaXRvcnkgdXNlciBwcmVmZXJlbmNlICovCisJaWYgKHN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KSB7CisJCWNvbnN0IGNoYXIgKnBhdGggPSBnaXRfcGF0aF9pbmZvX2V4Y2x1ZGUoKTsKKwkJaWYgKCFhY2Nlc3Nfb3Jfd2FybihwYXRoLCBSX09LLCAwKSkKKwkJCWFkZF9wYXR0ZXJuc19mcm9tX2ZpbGVfMShkaXIsIHBhdGgsCisJCQkJCQkgZGlyLT51bnRyYWNrZWQgPyAmZGlyLT5zc19pbmZvX2V4Y2x1ZGUgOiBOVUxMKTsKKwl9Cit9CisKK2ludCByZW1vdmVfcGF0aChjb25zdCBjaGFyICpuYW1lKQoreworCWNoYXIgKnNsYXNoOworCisJaWYgKHVubGluayhuYW1lKSAmJiAhaXNfbWlzc2luZ19maWxlX2Vycm9yKGVycm5vKSkKKwkJcmV0dXJuIC0xOworCisJc2xhc2ggPSBzdHJyY2hyKG5hbWUsICcvJyk7CisJaWYgKHNsYXNoKSB7CisJCWNoYXIgKmRpcnMgPSB4c3RyZHVwKG5hbWUpOworCQlzbGFzaCA9IGRpcnMgKyAoc2xhc2ggLSBuYW1lKTsKKwkJZG8geworCQkJKnNsYXNoID0gJ1wwJzsKKwkJfSB3aGlsZSAocm1kaXIoZGlycykgPT0gMCAmJiAoc2xhc2ggPSBzdHJyY2hyKGRpcnMsICcvJykpKTsKKwkJZnJlZShkaXJzKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGcmVlcyBtZW1vcnkgd2l0aGluIGRpciB3aGljaCB3YXMgYWxsb2NhdGVkIGZvciBleGNsdWRlIGxpc3RzIGFuZAorICogdGhlIGV4Y2x1ZGVfc3RhY2suICBEb2VzIG5vdCBmcmVlIGRpciBpdHNlbGYuCisgKi8KK3ZvaWQgY2xlYXJfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIpCit7CisJaW50IGksIGo7CisJc3RydWN0IGV4Y2x1ZGVfbGlzdF9ncm91cCAqZ3JvdXA7CisJc3RydWN0IHBhdHRlcm5fbGlzdCAqcGw7CisJc3RydWN0IGV4Y2x1ZGVfc3RhY2sgKnN0azsKKworCWZvciAoaSA9IEVYQ19DTURMOyBpIDw9IEVYQ19GSUxFOyBpKyspIHsKKwkJZ3JvdXAgPSAmZGlyLT5leGNsdWRlX2xpc3RfZ3JvdXBbaV07CisJCWZvciAoaiA9IDA7IGogPCBncm91cC0+bnI7IGorKykgeworCQkJcGwgPSAmZ3JvdXAtPnBsW2pdOworCQkJaWYgKGkgPT0gRVhDX0RJUlMpCisJCQkJZnJlZSgoY2hhciAqKXBsLT5zcmMpOworCQkJY2xlYXJfcGF0dGVybl9saXN0KHBsKTsKKwkJfQorCQlmcmVlKGdyb3VwLT5wbCk7CisJfQorCisJc3RrID0gZGlyLT5leGNsdWRlX3N0YWNrOworCXdoaWxlIChzdGspIHsKKwkJc3RydWN0IGV4Y2x1ZGVfc3RhY2sgKnByZXYgPSBzdGstPnByZXY7CisJCWZyZWUoc3RrKTsKKwkJc3RrID0gcHJldjsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmRpci0+YmFzZWJ1Zik7Cit9CisKK3N0cnVjdCBvbmRpc2tfdW50cmFja2VkX2NhY2hlIHsKKwlzdHJ1Y3Qgc3RhdF9kYXRhIGluZm9fZXhjbHVkZV9zdGF0OworCXN0cnVjdCBzdGF0X2RhdGEgZXhjbHVkZXNfZmlsZV9zdGF0OworCXVpbnQzMl90IGRpcl9mbGFnczsKK307CisKKyNkZWZpbmUgb3VjX29mZnNldCh4KSBvZmZzZXRvZihzdHJ1Y3Qgb25kaXNrX3VudHJhY2tlZF9jYWNoZSwgeCkKKworc3RydWN0IHdyaXRlX2RhdGEgeworCWludCBpbmRleDsJICAgLyogbnVtYmVyIG9mIHdyaXR0ZW4gdW50cmFja2VkX2NhY2hlX2RpciAqLworCXN0cnVjdCBld2FoX2JpdG1hcCAqY2hlY2tfb25seTsgLyogZnJvbSB1bnRyYWNrZWRfY2FjaGVfZGlyICovCisJc3RydWN0IGV3YWhfYml0bWFwICp2YWxpZDsJLyogZnJvbSB1bnRyYWNrZWRfY2FjaGVfZGlyICovCisJc3RydWN0IGV3YWhfYml0bWFwICpzaGExX3ZhbGlkOyAvKiBzZXQgaWYgZXhjbHVkZV9zaGExIGlzIG5vdCBudWxsICovCisJc3RydWN0IHN0cmJ1ZiBvdXQ7CisJc3RydWN0IHN0cmJ1ZiBzYl9zdGF0OworCXN0cnVjdCBzdHJidWYgc2Jfc2hhMTsKK307CisKK3N0YXRpYyB2b2lkIHN0YXRfZGF0YV90b19kaXNrKHN0cnVjdCBzdGF0X2RhdGEgKnRvLCBjb25zdCBzdHJ1Y3Qgc3RhdF9kYXRhICpmcm9tKQoreworCXRvLT5zZF9jdGltZS5zZWMgID0gaHRvbmwoZnJvbS0+c2RfY3RpbWUuc2VjKTsKKwl0by0+c2RfY3RpbWUubnNlYyA9IGh0b25sKGZyb20tPnNkX2N0aW1lLm5zZWMpOworCXRvLT5zZF9tdGltZS5zZWMgID0gaHRvbmwoZnJvbS0+c2RfbXRpbWUuc2VjKTsKKwl0by0+c2RfbXRpbWUubnNlYyA9IGh0b25sKGZyb20tPnNkX210aW1lLm5zZWMpOworCXRvLT5zZF9kZXYJICA9IGh0b25sKGZyb20tPnNkX2Rldik7CisJdG8tPnNkX2lubwkgID0gaHRvbmwoZnJvbS0+c2RfaW5vKTsKKwl0by0+c2RfdWlkCSAgPSBodG9ubChmcm9tLT5zZF91aWQpOworCXRvLT5zZF9naWQJICA9IGh0b25sKGZyb20tPnNkX2dpZCk7CisJdG8tPnNkX3NpemUJICA9IGh0b25sKGZyb20tPnNkX3NpemUpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9vbmVfZGlyKHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQsCisJCQkgIHN0cnVjdCB3cml0ZV9kYXRhICp3ZCkKK3sKKwlzdHJ1Y3Qgc3RhdF9kYXRhIHN0YXRfZGF0YTsKKwlzdHJ1Y3Qgc3RyYnVmICpvdXQgPSAmd2QtPm91dDsKKwl1bnNpZ25lZCBjaGFyIGludGJ1ZlsxNl07CisJdW5zaWduZWQgaW50IGludGxlbiwgdmFsdWU7CisJaW50IGkgPSB3ZC0+aW5kZXgrKzsKKworCS8qCisJICogdW50cmFja2VkX25yIHNob3VsZCBiZSByZXNldCB3aGVuZXZlciB2YWxpZCBpcyBjbGVhciwgYnV0CisJICogZm9yIHNhZmV0eS4uCisJICovCisJaWYgKCF1bnRyYWNrZWQtPnZhbGlkKSB7CisJCXVudHJhY2tlZC0+dW50cmFja2VkX25yID0gMDsKKwkJdW50cmFja2VkLT5jaGVja19vbmx5ID0gMDsKKwl9CisKKwlpZiAodW50cmFja2VkLT5jaGVja19vbmx5KQorCQlld2FoX3NldCh3ZC0+Y2hlY2tfb25seSwgaSk7CisJaWYgKHVudHJhY2tlZC0+dmFsaWQpIHsKKwkJZXdhaF9zZXQod2QtPnZhbGlkLCBpKTsKKwkJc3RhdF9kYXRhX3RvX2Rpc2soJnN0YXRfZGF0YSwgJnVudHJhY2tlZC0+c3RhdF9kYXRhKTsKKwkJc3RyYnVmX2FkZCgmd2QtPnNiX3N0YXQsICZzdGF0X2RhdGEsIHNpemVvZihzdGF0X2RhdGEpKTsKKwl9CisJaWYgKCFpc19udWxsX29pZCgmdW50cmFja2VkLT5leGNsdWRlX29pZCkpIHsKKwkJZXdhaF9zZXQod2QtPnNoYTFfdmFsaWQsIGkpOworCQlzdHJidWZfYWRkKCZ3ZC0+c2Jfc2hhMSwgdW50cmFja2VkLT5leGNsdWRlX29pZC5oYXNoLAorCQkJICAgdGhlX2hhc2hfYWxnby0+cmF3c3opOworCX0KKworCWludGxlbiA9IGVuY29kZV92YXJpbnQodW50cmFja2VkLT51bnRyYWNrZWRfbnIsIGludGJ1Zik7CisJc3RyYnVmX2FkZChvdXQsIGludGJ1ZiwgaW50bGVuKTsKKworCS8qIHNraXAgbm9uLXJlY3Vyc2UgZGlyZWN0b3JpZXMgKi8KKwlmb3IgKGkgPSAwLCB2YWx1ZSA9IDA7IGkgPCB1bnRyYWNrZWQtPmRpcnNfbnI7IGkrKykKKwkJaWYgKHVudHJhY2tlZC0+ZGlyc1tpXS0+cmVjdXJzZSkKKwkJCXZhbHVlKys7CisJaW50bGVuID0gZW5jb2RlX3ZhcmludCh2YWx1ZSwgaW50YnVmKTsKKwlzdHJidWZfYWRkKG91dCwgaW50YnVmLCBpbnRsZW4pOworCisJc3RyYnVmX2FkZChvdXQsIHVudHJhY2tlZC0+bmFtZSwgc3RybGVuKHVudHJhY2tlZC0+bmFtZSkgKyAxKTsKKworCWZvciAoaSA9IDA7IGkgPCB1bnRyYWNrZWQtPnVudHJhY2tlZF9ucjsgaSsrKQorCQlzdHJidWZfYWRkKG91dCwgdW50cmFja2VkLT51bnRyYWNrZWRbaV0sCisJCQkgICBzdHJsZW4odW50cmFja2VkLT51bnRyYWNrZWRbaV0pICsgMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdW50cmFja2VkLT5kaXJzX25yOyBpKyspCisJCWlmICh1bnRyYWNrZWQtPmRpcnNbaV0tPnJlY3Vyc2UpCisJCQl3cml0ZV9vbmVfZGlyKHVudHJhY2tlZC0+ZGlyc1tpXSwgd2QpOworfQorCit2b2lkIHdyaXRlX3VudHJhY2tlZF9leHRlbnNpb24oc3RydWN0IHN0cmJ1ZiAqb3V0LCBzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1bnRyYWNrZWQpCit7CisJc3RydWN0IG9uZGlza191bnRyYWNrZWRfY2FjaGUgKm91YzsKKwlzdHJ1Y3Qgd3JpdGVfZGF0YSB3ZDsKKwl1bnNpZ25lZCBjaGFyIHZhcmJ1ZlsxNl07CisJaW50IHZhcmludF9sZW47CisJY29uc3QgdW5zaWduZWQgaGFzaHN6ID0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisKKwlvdWMgPSB4Y2FsbG9jKDEsIHNpemVvZigqb3VjKSk7CisJc3RhdF9kYXRhX3RvX2Rpc2soJm91Yy0+aW5mb19leGNsdWRlX3N0YXQsICZ1bnRyYWNrZWQtPnNzX2luZm9fZXhjbHVkZS5zdGF0KTsKKwlzdGF0X2RhdGFfdG9fZGlzaygmb3VjLT5leGNsdWRlc19maWxlX3N0YXQsICZ1bnRyYWNrZWQtPnNzX2V4Y2x1ZGVzX2ZpbGUuc3RhdCk7CisJb3VjLT5kaXJfZmxhZ3MgPSBodG9ubCh1bnRyYWNrZWQtPmRpcl9mbGFncyk7CisKKwl2YXJpbnRfbGVuID0gZW5jb2RlX3ZhcmludCh1bnRyYWNrZWQtPmlkZW50LmxlbiwgdmFyYnVmKTsKKwlzdHJidWZfYWRkKG91dCwgdmFyYnVmLCB2YXJpbnRfbGVuKTsKKwlzdHJidWZfYWRkYnVmKG91dCwgJnVudHJhY2tlZC0+aWRlbnQpOworCisJc3RyYnVmX2FkZChvdXQsIG91Yywgc2l6ZW9mKCpvdWMpKTsKKwlzdHJidWZfYWRkKG91dCwgdW50cmFja2VkLT5zc19pbmZvX2V4Y2x1ZGUub2lkLmhhc2gsIGhhc2hzeik7CisJc3RyYnVmX2FkZChvdXQsIHVudHJhY2tlZC0+c3NfZXhjbHVkZXNfZmlsZS5vaWQuaGFzaCwgaGFzaHN6KTsKKwlzdHJidWZfYWRkKG91dCwgdW50cmFja2VkLT5leGNsdWRlX3Blcl9kaXIsIHN0cmxlbih1bnRyYWNrZWQtPmV4Y2x1ZGVfcGVyX2RpcikgKyAxKTsKKwlGUkVFX0FORF9OVUxMKG91Yyk7CisKKwlpZiAoIXVudHJhY2tlZC0+cm9vdCkgeworCQl2YXJpbnRfbGVuID0gZW5jb2RlX3ZhcmludCgwLCB2YXJidWYpOworCQlzdHJidWZfYWRkKG91dCwgdmFyYnVmLCB2YXJpbnRfbGVuKTsKKwkJcmV0dXJuOworCX0KKworCXdkLmluZGV4ICAgICAgPSAwOworCXdkLmNoZWNrX29ubHkgPSBld2FoX25ldygpOworCXdkLnZhbGlkICAgICAgPSBld2FoX25ldygpOworCXdkLnNoYTFfdmFsaWQgPSBld2FoX25ldygpOworCXN0cmJ1Zl9pbml0KCZ3ZC5vdXQsIDEwMjQpOworCXN0cmJ1Zl9pbml0KCZ3ZC5zYl9zdGF0LCAxMDI0KTsKKwlzdHJidWZfaW5pdCgmd2Quc2Jfc2hhMSwgMTAyNCk7CisJd3JpdGVfb25lX2Rpcih1bnRyYWNrZWQtPnJvb3QsICZ3ZCk7CisKKwl2YXJpbnRfbGVuID0gZW5jb2RlX3ZhcmludCh3ZC5pbmRleCwgdmFyYnVmKTsKKwlzdHJidWZfYWRkKG91dCwgdmFyYnVmLCB2YXJpbnRfbGVuKTsKKwlzdHJidWZfYWRkYnVmKG91dCwgJndkLm91dCk7CisJZXdhaF9zZXJpYWxpemVfc3RyYnVmKHdkLnZhbGlkLCBvdXQpOworCWV3YWhfc2VyaWFsaXplX3N0cmJ1Zih3ZC5jaGVja19vbmx5LCBvdXQpOworCWV3YWhfc2VyaWFsaXplX3N0cmJ1Zih3ZC5zaGExX3ZhbGlkLCBvdXQpOworCXN0cmJ1Zl9hZGRidWYob3V0LCAmd2Quc2Jfc3RhdCk7CisJc3RyYnVmX2FkZGJ1ZihvdXQsICZ3ZC5zYl9zaGExKTsKKwlzdHJidWZfYWRkY2gob3V0LCAnXDAnKTsgLyogc2FmZSBndWFyZCBmb3Igc3RyaW5nIGxpc3RzICovCisKKwlld2FoX2ZyZWUod2QudmFsaWQpOworCWV3YWhfZnJlZSh3ZC5jaGVja19vbmx5KTsKKwlld2FoX2ZyZWUod2Quc2hhMV92YWxpZCk7CisJc3RyYnVmX3JlbGVhc2UoJndkLm91dCk7CisJc3RyYnVmX3JlbGVhc2UoJndkLnNiX3N0YXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZ3ZC5zYl9zaGExKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV91bnRyYWNrZWQoc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVjZCkKK3sKKwlpbnQgaTsKKwlpZiAoIXVjZCkKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCB1Y2QtPmRpcnNfbnI7IGkrKykKKwkJZnJlZV91bnRyYWNrZWQodWNkLT5kaXJzW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgdWNkLT51bnRyYWNrZWRfbnI7IGkrKykKKwkJZnJlZSh1Y2QtPnVudHJhY2tlZFtpXSk7CisJZnJlZSh1Y2QtPnVudHJhY2tlZCk7CisJZnJlZSh1Y2QtPmRpcnMpOworCWZyZWUodWNkKTsKK30KKwordm9pZCBmcmVlX3VudHJhY2tlZF9jYWNoZShzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YykKK3sKKwlpZiAodWMpCisJCWZyZWVfdW50cmFja2VkKHVjLT5yb290KTsKKwlmcmVlKHVjKTsKK30KKworc3RydWN0IHJlYWRfZGF0YSB7CisJaW50IGluZGV4OworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICoqdWNkOworCXN0cnVjdCBld2FoX2JpdG1hcCAqY2hlY2tfb25seTsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnZhbGlkOworCXN0cnVjdCBld2FoX2JpdG1hcCAqc2hhMV92YWxpZDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZDsKK307CisKK3N0YXRpYyB2b2lkIHN0YXRfZGF0YV9mcm9tX2Rpc2soc3RydWN0IHN0YXRfZGF0YSAqdG8sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisJbWVtY3B5KHRvLCBkYXRhLCBzaXplb2YoKnRvKSk7CisJdG8tPnNkX2N0aW1lLnNlYyAgPSBudG9obCh0by0+c2RfY3RpbWUuc2VjKTsKKwl0by0+c2RfY3RpbWUubnNlYyA9IG50b2hsKHRvLT5zZF9jdGltZS5uc2VjKTsKKwl0by0+c2RfbXRpbWUuc2VjICA9IG50b2hsKHRvLT5zZF9tdGltZS5zZWMpOworCXRvLT5zZF9tdGltZS5uc2VjID0gbnRvaGwodG8tPnNkX210aW1lLm5zZWMpOworCXRvLT5zZF9kZXYJICA9IG50b2hsKHRvLT5zZF9kZXYpOworCXRvLT5zZF9pbm8JICA9IG50b2hsKHRvLT5zZF9pbm8pOworCXRvLT5zZF91aWQJICA9IG50b2hsKHRvLT5zZF91aWQpOworCXRvLT5zZF9naWQJICA9IG50b2hsKHRvLT5zZF9naWQpOworCXRvLT5zZF9zaXplCSAgPSBudG9obCh0by0+c2Rfc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9vbmVfZGlyKHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICoqdW50cmFja2VkXywKKwkJCXN0cnVjdCByZWFkX2RhdGEgKnJkKQoreworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyIHVkLCAqdW50cmFja2VkOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSByZC0+ZGF0YSwgKmVuZCA9IHJkLT5lbmQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZW9zOworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwlpbnQgaTsKKworCW1lbXNldCgmdWQsIDAsIHNpemVvZih1ZCkpOworCisJdmFsdWUgPSBkZWNvZGVfdmFyaW50KCZkYXRhKTsKKwlpZiAoZGF0YSA+IGVuZCkKKwkJcmV0dXJuIC0xOworCXVkLnJlY3Vyc2UJICAgPSAxOworCXVkLnVudHJhY2tlZF9hbGxvYyA9IHZhbHVlOworCXVkLnVudHJhY2tlZF9ucgkgICA9IHZhbHVlOworCWlmICh1ZC51bnRyYWNrZWRfbnIpCisJCUFMTE9DX0FSUkFZKHVkLnVudHJhY2tlZCwgdWQudW50cmFja2VkX25yKTsKKworCXVkLmRpcnNfYWxsb2MgPSB1ZC5kaXJzX25yID0gZGVjb2RlX3ZhcmludCgmZGF0YSk7CisJaWYgKGRhdGEgPiBlbmQpCisJCXJldHVybiAtMTsKKwlBTExPQ19BUlJBWSh1ZC5kaXJzLCB1ZC5kaXJzX25yKTsKKworCWVvcyA9IG1lbWNocihkYXRhLCAnXDAnLCBlbmQgLSBkYXRhKTsKKwlpZiAoIWVvcyB8fCBlb3MgPT0gZW5kKQorCQlyZXR1cm4gLTE7CisKKwkqdW50cmFja2VkXyA9IHVudHJhY2tlZCA9IHhtYWxsb2Moc3RfYWRkMyhzaXplb2YoKnVudHJhY2tlZCksIGVvcyAtIGRhdGEsIDEpKTsKKwltZW1jcHkodW50cmFja2VkLCAmdWQsIHNpemVvZih1ZCkpOworCW1lbWNweSh1bnRyYWNrZWQtPm5hbWUsIGRhdGEsIGVvcyAtIGRhdGEgKyAxKTsKKwlkYXRhID0gZW9zICsgMTsKKworCWZvciAoaSA9IDA7IGkgPCB1bnRyYWNrZWQtPnVudHJhY2tlZF9ucjsgaSsrKSB7CisJCWVvcyA9IG1lbWNocihkYXRhLCAnXDAnLCBlbmQgLSBkYXRhKTsKKwkJaWYgKCFlb3MgfHwgZW9zID09IGVuZCkKKwkJCXJldHVybiAtMTsKKwkJdW50cmFja2VkLT51bnRyYWNrZWRbaV0gPSB4bWVtZHVweihkYXRhLCBlb3MgLSBkYXRhKTsKKwkJZGF0YSA9IGVvcyArIDE7CisJfQorCisJcmQtPnVjZFtyZC0+aW5kZXgrK10gPSB1bnRyYWNrZWQ7CisJcmQtPmRhdGEgPSBkYXRhOworCisJZm9yIChpID0gMDsgaSA8IHVudHJhY2tlZC0+ZGlyc19ucjsgaSsrKSB7CisJCWlmIChyZWFkX29uZV9kaXIodW50cmFja2VkLT5kaXJzICsgaSwgcmQpIDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jaGVja19vbmx5KHNpemVfdCBwb3MsIHZvaWQgKmNiKQoreworCXN0cnVjdCByZWFkX2RhdGEgKnJkID0gY2I7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVkID0gcmQtPnVjZFtwb3NdOworCXVkLT5jaGVja19vbmx5ID0gMTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9zdGF0KHNpemVfdCBwb3MsIHZvaWQgKmNiKQoreworCXN0cnVjdCByZWFkX2RhdGEgKnJkID0gY2I7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVkID0gcmQtPnVjZFtwb3NdOworCWlmIChyZC0+ZGF0YSArIHNpemVvZihzdHJ1Y3Qgc3RhdF9kYXRhKSA+IHJkLT5lbmQpIHsKKwkJcmQtPmRhdGEgPSByZC0+ZW5kICsgMTsKKwkJcmV0dXJuOworCX0KKwlzdGF0X2RhdGFfZnJvbV9kaXNrKCZ1ZC0+c3RhdF9kYXRhLCByZC0+ZGF0YSk7CisJcmQtPmRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBzdGF0X2RhdGEpOworCXVkLT52YWxpZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfb2lkKHNpemVfdCBwb3MsIHZvaWQgKmNiKQoreworCXN0cnVjdCByZWFkX2RhdGEgKnJkID0gY2I7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVkID0gcmQtPnVjZFtwb3NdOworCWlmIChyZC0+ZGF0YSArIHRoZV9oYXNoX2FsZ28tPnJhd3N6ID4gcmQtPmVuZCkgeworCQlyZC0+ZGF0YSA9IHJkLT5lbmQgKyAxOworCQlyZXR1cm47CisJfQorCWhhc2hjcHkodWQtPmV4Y2x1ZGVfb2lkLmhhc2gsIHJkLT5kYXRhKTsKKwlyZC0+ZGF0YSArPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKK30KKworc3RhdGljIHZvaWQgbG9hZF9vaWRfc3RhdChzdHJ1Y3Qgb2lkX3N0YXQgKm9pZF9zdGF0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0YXRfZGF0YV9mcm9tX2Rpc2soJm9pZF9zdGF0LT5zdGF0LCBkYXRhKTsKKwloYXNoY3B5KG9pZF9zdGF0LT5vaWQuaGFzaCwgc2hhMSk7CisJb2lkX3N0YXQtPnZhbGlkID0gMTsKK30KKworc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqcmVhZF91bnRyYWNrZWRfZXh0ZW5zaW9uKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc3opCit7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdWM7CisJc3RydWN0IHJlYWRfZGF0YSByZDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuZXh0ID0gZGF0YSwgKmVuZCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopZGF0YSArIHN6OworCWNvbnN0IGNoYXIgKmlkZW50OworCWludCBpZGVudF9sZW47CisJc3NpemVfdCBsZW47CisJY29uc3QgY2hhciAqZXhjbHVkZV9wZXJfZGlyOworCWNvbnN0IHVuc2lnbmVkIGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCWNvbnN0IHVuc2lnbmVkIG9mZnNldCA9IHNpemVvZihzdHJ1Y3Qgb25kaXNrX3VudHJhY2tlZF9jYWNoZSk7CisJY29uc3QgdW5zaWduZWQgZXhjbHVkZV9wZXJfZGlyX29mZnNldCA9IG9mZnNldCArIDIgKiBoYXNoc3o7CisKKwlpZiAoc3ogPD0gMSB8fCBlbmRbLTFdICE9ICdcMCcpCisJCXJldHVybiBOVUxMOworCWVuZC0tOworCisJaWRlbnRfbGVuID0gZGVjb2RlX3ZhcmludCgmbmV4dCk7CisJaWYgKG5leHQgKyBpZGVudF9sZW4gPiBlbmQpCisJCXJldHVybiBOVUxMOworCWlkZW50ID0gKGNvbnN0IGNoYXIgKiluZXh0OworCW5leHQgKz0gaWRlbnRfbGVuOworCisJaWYgKG5leHQgKyBleGNsdWRlX3Blcl9kaXJfb2Zmc2V0ICsgMSA+IGVuZCkKKwkJcmV0dXJuIE5VTEw7CisKKwl1YyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCp1YykpOworCXN0cmJ1Zl9pbml0KCZ1Yy0+aWRlbnQsIGlkZW50X2xlbik7CisJc3RyYnVmX2FkZCgmdWMtPmlkZW50LCBpZGVudCwgaWRlbnRfbGVuKTsKKwlsb2FkX29pZF9zdGF0KCZ1Yy0+c3NfaW5mb19leGNsdWRlLAorCQkgICAgICBuZXh0ICsgb3VjX29mZnNldChpbmZvX2V4Y2x1ZGVfc3RhdCksCisJCSAgICAgIG5leHQgKyBvZmZzZXQpOworCWxvYWRfb2lkX3N0YXQoJnVjLT5zc19leGNsdWRlc19maWxlLAorCQkgICAgICBuZXh0ICsgb3VjX29mZnNldChleGNsdWRlc19maWxlX3N0YXQpLAorCQkgICAgICBuZXh0ICsgb2Zmc2V0ICsgaGFzaHN6KTsKKwl1Yy0+ZGlyX2ZsYWdzID0gZ2V0X2JlMzIobmV4dCArIG91Y19vZmZzZXQoZGlyX2ZsYWdzKSk7CisJZXhjbHVkZV9wZXJfZGlyID0gKGNvbnN0IGNoYXIgKiluZXh0ICsgZXhjbHVkZV9wZXJfZGlyX29mZnNldDsKKwl1Yy0+ZXhjbHVkZV9wZXJfZGlyID0geHN0cmR1cChleGNsdWRlX3Blcl9kaXIpOworCS8qIE5VTCBhZnRlciBleGNsdWRlX3Blcl9kaXIgaXMgY292ZXJlZCBieSBzaXplb2YoKm91YykgKi8KKwluZXh0ICs9IGV4Y2x1ZGVfcGVyX2Rpcl9vZmZzZXQgKyBzdHJsZW4oZXhjbHVkZV9wZXJfZGlyKSArIDE7CisJaWYgKG5leHQgPj0gZW5kKQorCQlnb3RvIGRvbmUyOworCisJbGVuID0gZGVjb2RlX3ZhcmludCgmbmV4dCk7CisJaWYgKG5leHQgPiBlbmQgfHwgbGVuID09IDApCisJCWdvdG8gZG9uZTI7CisKKwlyZC52YWxpZCAgICAgID0gZXdhaF9uZXcoKTsKKwlyZC5jaGVja19vbmx5ID0gZXdhaF9uZXcoKTsKKwlyZC5zaGExX3ZhbGlkID0gZXdhaF9uZXcoKTsKKwlyZC5kYXRhCSAgICAgID0gbmV4dDsKKwlyZC5lbmQJICAgICAgPSBlbmQ7CisJcmQuaW5kZXggICAgICA9IDA7CisJQUxMT0NfQVJSQVkocmQudWNkLCBsZW4pOworCisJaWYgKHJlYWRfb25lX2RpcigmdWMtPnJvb3QsICZyZCkgfHwgcmQuaW5kZXggIT0gbGVuKQorCQlnb3RvIGRvbmU7CisKKwluZXh0ID0gcmQuZGF0YTsKKwlsZW4gPSBld2FoX3JlYWRfbW1hcChyZC52YWxpZCwgbmV4dCwgZW5kIC0gbmV4dCk7CisJaWYgKGxlbiA8IDApCisJCWdvdG8gZG9uZTsKKworCW5leHQgKz0gbGVuOworCWxlbiA9IGV3YWhfcmVhZF9tbWFwKHJkLmNoZWNrX29ubHksIG5leHQsIGVuZCAtIG5leHQpOworCWlmIChsZW4gPCAwKQorCQlnb3RvIGRvbmU7CisKKwluZXh0ICs9IGxlbjsKKwlsZW4gPSBld2FoX3JlYWRfbW1hcChyZC5zaGExX3ZhbGlkLCBuZXh0LCBlbmQgLSBuZXh0KTsKKwlpZiAobGVuIDwgMCkKKwkJZ290byBkb25lOworCisJZXdhaF9lYWNoX2JpdChyZC5jaGVja19vbmx5LCBzZXRfY2hlY2tfb25seSwgJnJkKTsKKwlyZC5kYXRhID0gbmV4dCArIGxlbjsKKwlld2FoX2VhY2hfYml0KHJkLnZhbGlkLCByZWFkX3N0YXQsICZyZCk7CisJZXdhaF9lYWNoX2JpdChyZC5zaGExX3ZhbGlkLCByZWFkX29pZCwgJnJkKTsKKwluZXh0ID0gcmQuZGF0YTsKKworZG9uZToKKwlmcmVlKHJkLnVjZCk7CisJZXdhaF9mcmVlKHJkLnZhbGlkKTsKKwlld2FoX2ZyZWUocmQuY2hlY2tfb25seSk7CisJZXdhaF9mcmVlKHJkLnNoYTFfdmFsaWQpOworZG9uZTI6CisJaWYgKG5leHQgIT0gZW5kKSB7CisJCWZyZWVfdW50cmFja2VkX2NhY2hlKHVjKTsKKwkJdWMgPSBOVUxMOworCX0KKwlyZXR1cm4gdWM7Cit9CisKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfb25lX2RpcmVjdG9yeShzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YywKKwkJCQkgICAgIHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1Y2QpCit7CisJdWMtPmRpcl9pbnZhbGlkYXRlZCsrOworCXVjZC0+dmFsaWQgPSAwOworCXVjZC0+dW50cmFja2VkX25yID0gMDsKK30KKworLyoKKyAqIE5vcm1hbGx5IHdoZW4gYW4gZW50cnkgaXMgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIGEgZGlyZWN0b3J5LAorICogaW52YWxpZGF0aW5nIHRoYXQgZGlyZWN0b3J5IGlzIGVub3VnaC4gTm8gbmVlZCB0byB0b3VjaCBpdHMKKyAqIGFuY2VzdG9ycy4gV2hlbiBhIGRpcmVjdG9yeSBpcyBzaG93biBhcyAiZm9vL2Jhci8iIGluIGdpdC1zdGF0dXMKKyAqIGhvd2V2ZXIsIGRlbGV0aW5nIG9yIGFkZGluZyBhbiBlbnRyeSBtYXkgaGF2ZSBjYXNjYWRpbmcgZWZmZWN0LgorICoKKyAqIFNheSB0aGUgImZvby9iYXIvZmlsZSIgaGFzIGJlY29tZSB1bnRyYWNrZWQsIHdlIG5lZWQgdG8gdGVsbCB0aGUKKyAqIHVudHJhY2tlZF9jYWNoZV9kaXIgb2YgImZvbyIgdGhhdCAiYmFyLyIgaXMgbm90IGFuIHVudHJhY2tlZAorICogZGlyZWN0b3J5IGFueSBtb3JlIChiZWNhdXNlICJiYXIiIGlzIG1hbmFnZWQgYnkgZm9vIGFzIGFuIHVudHJhY2tlZAorICogImZpbGUiKS4KKyAqCisgKiBTaW1pbGFybHksIGlmICJmb28vYmFyL2ZpbGUiIG1vdmVzIGZyb20gdW50cmFja2VkIHRvIHRyYWNrZWQgYW5kIGl0CisgKiB3YXMgdGhlIGxhc3QgdW50cmFja2VkIGVudHJ5IGluIHRoZSBlbnRpcmUgImZvbyIsIHdlIHNob3VsZCBzaG93CisgKiAiZm9vLyIgaW5zdGVhZC4gV2hpY2ggbWVhbnMgd2UgaGF2ZSB0byBpbnZhbGlkYXRlIHBhc3QgImJhciIgdXAgdG8KKyAqICJmb28iLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIGFsbCBkaXJlY3RvcmllcyBmcm9tIHJvb3QgdG8gbGVhZi4gSWYgdGhlcmUKKyAqIGlzIGEgY2hhbmNlIG9mIG9uZSBvZiB0aGUgYWJvdmUgY2FzZXMgaGFwcGVuaW5nLCB3ZSBpbnZhbGlkYXRlIGJhY2sKKyAqIHRvIHJvb3QuIE90aGVyd2lzZSB3ZSBqdXN0IGludmFsaWRhdGUgdGhlIGxlYWYuIFRoZXJlIG1heSBiZSBhIG1vcmUKKyAqIHNvcGhpc3RpY2F0ZWQgd2F5IHRoYW4gY2hlY2tpbmcgZm9yIFNIT1dfT1RIRVJfRElSRUNUT1JJRVMgdG8KKyAqIGRldGVjdCB0aGVzZSBjYXNlcyBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgaW52YWxpZGF0aW9uLCBmb3IgZXhhbXBsZSwKKyAqIGNoZWNraW5nIGZvciB0aGUgdW50cmFja2VkIGVudHJ5IG5hbWVkICJiYXIvIiBpbiAiZm9vIiwgYnV0IGZvciBub3cKKyAqIHN0aWNrIHRvIHNvbWV0aGluZyBzYWZlIGFuZCBzaW1wbGUuCisgKi8KK3N0YXRpYyBpbnQgaW52YWxpZGF0ZV9vbmVfY29tcG9uZW50KHN0cnVjdCB1bnRyYWNrZWRfY2FjaGUgKnVjLAorCQkJCSAgICBzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqZGlyLAorCQkJCSAgICBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuKQoreworCWNvbnN0IGNoYXIgKnJlc3QgPSBzdHJjaHIocGF0aCwgJy8nKTsKKworCWlmIChyZXN0KSB7CisJCWludCBjb21wb25lbnRfbGVuID0gcmVzdCAtIHBhdGg7CisJCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpkID0KKwkJCWxvb2t1cF91bnRyYWNrZWQodWMsIGRpciwgcGF0aCwgY29tcG9uZW50X2xlbik7CisJCWludCByZXQgPQorCQkJaW52YWxpZGF0ZV9vbmVfY29tcG9uZW50KHVjLCBkLCByZXN0ICsgMSwKKwkJCQkJCSBsZW4gLSAoY29tcG9uZW50X2xlbiArIDEpKTsKKwkJaWYgKHJldCkKKwkJCWludmFsaWRhdGVfb25lX2RpcmVjdG9yeSh1YywgZGlyKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpbnZhbGlkYXRlX29uZV9kaXJlY3RvcnkodWMsIGRpcik7CisJcmV0dXJuIHVjLT5kaXJfZmxhZ3MgJiBESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUzsKK30KKwordm9pZCB1bnRyYWNrZWRfY2FjaGVfaW52YWxpZGF0ZV9wYXRoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgICAgY29uc3QgY2hhciAqcGF0aCwgaW50IHNhZmVfcGF0aCkKK3sKKwlpZiAoIWlzdGF0ZS0+dW50cmFja2VkIHx8ICFpc3RhdGUtPnVudHJhY2tlZC0+cm9vdCkKKwkJcmV0dXJuOworCWlmICghc2FmZV9wYXRoICYmICF2ZXJpZnlfcGF0aChwYXRoLCAwKSkKKwkJcmV0dXJuOworCWludmFsaWRhdGVfb25lX2NvbXBvbmVudChpc3RhdGUtPnVudHJhY2tlZCwgaXN0YXRlLT51bnRyYWNrZWQtPnJvb3QsCisJCQkJIHBhdGgsIHN0cmxlbihwYXRoKSk7Cit9CisKK3ZvaWQgdW50cmFja2VkX2NhY2hlX3JlbW92ZV9mcm9tX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpwYXRoKQoreworCXVudHJhY2tlZF9jYWNoZV9pbnZhbGlkYXRlX3BhdGgoaXN0YXRlLCBwYXRoLCAxKTsKK30KKwordm9pZCB1bnRyYWNrZWRfY2FjaGVfYWRkX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgY29uc3QgY2hhciAqcGF0aCkKK3sKKwl1bnRyYWNrZWRfY2FjaGVfaW52YWxpZGF0ZV9wYXRoKGlzdGF0ZSwgcGF0aCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbm5lY3Rfd3RfZ2l0ZGlyX2luX25lc3RlZChjb25zdCBjaGFyICpzdWJfd29ya3RyZWUsCisJCQkJCWNvbnN0IGNoYXIgKnN1Yl9naXRkaXIpCit7CisJaW50IGk7CisJc3RydWN0IHJlcG9zaXRvcnkgc3VicmVwbzsKKwlzdHJ1Y3Qgc3RyYnVmIHN1Yl93dCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgc3ViX2dkID0gU1RSQlVGX0lOSVQ7CisKKwljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWI7CisKKwkvKiBJZiB0aGUgc3VibW9kdWxlIGhhcyBubyB3b3JraW5nIHRyZWUsIHdlIGNhbiBpZ25vcmUgaXQuICovCisJaWYgKHJlcG9faW5pdCgmc3VicmVwbywgc3ViX2dpdGRpciwgc3ViX3dvcmt0cmVlKSkKKwkJcmV0dXJuOworCisJaWYgKHJlcG9fcmVhZF9pbmRleCgmc3VicmVwbykgPCAwKQorCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IGluIHJlcG8gJXMiKSwgc3VicmVwby5naXRkaXIpOworCisJZm9yIChpID0gMDsgaSA8IHN1YnJlcG8uaW5kZXgtPmNhY2hlX25yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IHN1YnJlcG8uaW5kZXgtPmNhY2hlW2ldOworCisJCWlmICghU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJY29udGludWU7CisKKwkJd2hpbGUgKGkgKyAxIDwgc3VicmVwby5pbmRleC0+Y2FjaGVfbnIgJiYKKwkJICAgICAgICFzdHJjbXAoY2UtPm5hbWUsIHN1YnJlcG8uaW5kZXgtPmNhY2hlW2kgKyAxXS0+bmFtZSkpCisJCQkvKgorCQkJICogU2tpcCBlbnRyaWVzIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBkaWZmZXJlbnQgc3RhZ2VzCisJCQkgKiB0byBtYWtlIHN1cmUgYW4gZW50cnkgaXMgcmV0dXJuZWQgb25seSBvbmNlLgorCQkJICovCisJCQlpKys7CisKKwkJc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aCgmc3VicmVwbywgJm51bGxfb2lkLCBjZS0+bmFtZSk7CisJCWlmICghc3ViIHx8ICFpc19zdWJtb2R1bGVfYWN0aXZlKCZzdWJyZXBvLCBjZS0+bmFtZSkpCisJCQkvKiAuZ2l0bW9kdWxlcyBicm9rZW4gb3IgaW5hY3RpdmUgc3ViICovCisJCQljb250aW51ZTsKKworCQlzdHJidWZfcmVzZXQoJnN1Yl93dCk7CisJCXN0cmJ1Zl9yZXNldCgmc3ViX2dkKTsKKwkJc3RyYnVmX2FkZGYoJnN1Yl93dCwgIiVzLyVzIiwgc3ViX3dvcmt0cmVlLCBzdWItPnBhdGgpOworCQlzdHJidWZfYWRkZigmc3ViX2dkLCAiJXMvbW9kdWxlcy8lcyIsIHN1Yl9naXRkaXIsIHN1Yi0+bmFtZSk7CisKKwkJY29ubmVjdF93b3JrX3RyZWVfYW5kX2dpdF9kaXIoc3ViX3d0LmJ1Ziwgc3ViX2dkLmJ1ZiwgMSk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzdWJfd3QpOworCXN0cmJ1Zl9yZWxlYXNlKCZzdWJfZ2QpOworCXJlcG9fY2xlYXIoJnN1YnJlcG8pOworfQorCit2b2lkIGNvbm5lY3Rfd29ya190cmVlX2FuZF9naXRfZGlyKGNvbnN0IGNoYXIgKndvcmtfdHJlZV8sCisJCQkJICAgY29uc3QgY2hhciAqZ2l0X2Rpcl8sCisJCQkJICAgaW50IHJlY3Vyc2VfaW50b19uZXN0ZWQpCit7CisJc3RydWN0IHN0cmJ1ZiBnaXRmaWxlX3NiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBjZmdfc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHJlbF9wYXRoID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqZ2l0X2RpciwgKndvcmtfdHJlZTsKKworCS8qIFByZXBhcmUgLmdpdCBmaWxlICovCisJc3RyYnVmX2FkZGYoJmdpdGZpbGVfc2IsICIlcy8uZ2l0Iiwgd29ya190cmVlXyk7CisJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoZ2l0ZmlsZV9zYi5idWYpKQorCQlkaWUoXygiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgJXMiKSwgZ2l0ZmlsZV9zYi5idWYpOworCisJLyogUHJlcGFyZSBjb25maWcgZmlsZSAqLworCXN0cmJ1Zl9hZGRmKCZjZmdfc2IsICIlcy9jb25maWciLCBnaXRfZGlyXyk7CisJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoY2ZnX3NiLmJ1ZikpCisJCWRpZShfKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciAlcyIpLCBjZmdfc2IuYnVmKTsKKworCWdpdF9kaXIgPSByZWFsX3BhdGhkdXAoZ2l0X2Rpcl8sIDEpOworCXdvcmtfdHJlZSA9IHJlYWxfcGF0aGR1cCh3b3JrX3RyZWVfLCAxKTsKKworCS8qIFdyaXRlIC5naXQgZmlsZSAqLworCXdyaXRlX2ZpbGUoZ2l0ZmlsZV9zYi5idWYsICJnaXRkaXI6ICVzIiwKKwkJICAgcmVsYXRpdmVfcGF0aChnaXRfZGlyLCB3b3JrX3RyZWUsICZyZWxfcGF0aCkpOworCS8qIFVwZGF0ZSBjb3JlLndvcmt0cmVlIHNldHRpbmcgKi8KKwlnaXRfY29uZmlnX3NldF9pbl9maWxlKGNmZ19zYi5idWYsICJjb3JlLndvcmt0cmVlIiwKKwkJCSAgICAgICByZWxhdGl2ZV9wYXRoKHdvcmtfdHJlZSwgZ2l0X2RpciwgJnJlbF9wYXRoKSk7CisKKwlzdHJidWZfcmVsZWFzZSgmZ2l0ZmlsZV9zYik7CisJc3RyYnVmX3JlbGVhc2UoJmNmZ19zYik7CisJc3RyYnVmX3JlbGVhc2UoJnJlbF9wYXRoKTsKKworCWlmIChyZWN1cnNlX2ludG9fbmVzdGVkKQorCQljb25uZWN0X3d0X2dpdGRpcl9pbl9uZXN0ZWQod29ya190cmVlLCBnaXRfZGlyKTsKKworCWZyZWUod29ya190cmVlKTsKKwlmcmVlKGdpdF9kaXIpOworfQorCisvKgorICogTWlncmF0ZSB0aGUgZ2l0IGRpcmVjdG9yeSBvZiB0aGUgZ2l2ZW4gcGF0aCBmcm9tIG9sZF9naXRfZGlyIHRvIG5ld19naXRfZGlyLgorICovCit2b2lkIHJlbG9jYXRlX2dpdGRpcihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpvbGRfZ2l0X2RpciwgY29uc3QgY2hhciAqbmV3X2dpdF9kaXIpCit7CisJaWYgKHJlbmFtZShvbGRfZ2l0X2RpciwgbmV3X2dpdF9kaXIpIDwgMCkKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBtaWdyYXRlIGdpdCBkaXJlY3RvcnkgZnJvbSAnJXMnIHRvICclcyciKSwKKwkJCW9sZF9naXRfZGlyLCBuZXdfZ2l0X2Rpcik7CisKKwljb25uZWN0X3dvcmtfdHJlZV9hbmRfZ2l0X2RpcihwYXRoLCBuZXdfZ2l0X2RpciwgMCk7Cit9CmRpZmYgLS1naXQgYS9kaXIuaCBiL2Rpci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NTVjMDYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXIuaApAQCAtMCwwICsxLDU0MyBAQAorI2lmbmRlZiBESVJfSAorI2RlZmluZSBESVJfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKKy8qKgorICogVGhlIGRpcmVjdG9yeSBsaXN0aW5nIEFQSSBpcyB1c2VkIHRvIGVudW1lcmF0ZSBwYXRocyBpbiB0aGUgd29yayB0cmVlLAorICogb3B0aW9uYWxseSB0YWtpbmcgYC5naXQvaW5mby9leGNsdWRlYCBhbmQgYC5naXRpZ25vcmVgIGZpbGVzIHBlciBkaXJlY3RvcnkKKyAqIGludG8gYWNjb3VudC4KKyAqLworCisvKioKKyAqIENhbGxpbmcgc2VxdWVuY2UKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBOb3RlOiBUaGUgaW5kZXggbWF5IGJlIGNoZWNrZWQgZm9yIC5naXRpZ25vcmUgZmlsZXMgdGhhdCBhcmUKKyAqIENFX1NLSVBfV09SS1RSRUUgbWFya2VkLiBJZiB5b3Ugd2FudCB0byBleGNsdWRlIGZpbGVzLCBtYWtlIHN1cmUgeW91IGhhdmUKKyAqIGxvYWRlZCB0aGUgaW5kZXggZmlyc3QuCisgKgorICogLSBQcmVwYXJlIGBzdHJ1Y3QgZGlyX3N0cnVjdCBkaXJgIGFuZCBjbGVhciBpdCB3aXRoIGBtZW1zZXQoJmRpciwgMCwKKyAqIHNpemVvZihkaXIpKWAuCisgKgorICogLSBUbyBhZGQgc2luZ2xlIGV4Y2x1ZGUgcGF0dGVybiwgY2FsbCBgYWRkX3BhdHRlcm5fbGlzdCgpYCBhbmQgdGhlbgorICogICBgYWRkX3BhdHRlcm4oKWAuCisgKgorICogLSBUbyBhZGQgcGF0dGVybnMgZnJvbSBhIGZpbGUgKGUuZy4gYC5naXQvaW5mby9leGNsdWRlYCksIGNhbGwKKyAqICAgYGFkZF9wYXR0ZXJuc19mcm9tX2ZpbGUoKWAgLCBhbmQvb3Igc2V0IGBkaXIuZXhjbHVkZV9wZXJfZGlyYC4gIEEKKyAqICAgc2hvcnQtaGFuZCBmdW5jdGlvbiBgc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoKWAgY2FuIGJlIHVzZWQgdG8gc2V0CisgKiAgIHVwIHRoZSBzdGFuZGFyZCBzZXQgb2YgZXhjbHVkZSBzZXR0aW5ncy4KKyAqCisgKiAtIFNldCBvcHRpb25zIGRlc2NyaWJlZCBpbiB0aGUgRGF0YSBTdHJ1Y3R1cmUgc2VjdGlvbiBhYm92ZS4KKyAqCisgKiAtIENhbGwgYHJlYWRfZGlyZWN0b3J5KClgLgorICoKKyAqIC0gVXNlIGBkaXIuZW50cmllc1tdYC4KKyAqCisgKiAtIENhbGwgYGNsZWFyX2RpcmVjdG9yeSgpYCB3aGVuIG5vbmUgb2YgdGhlIGNvbnRhaW5lZCBlbGVtZW50cyBhcmUgbm8gbG9uZ2VyIGluIHVzZS4KKyAqCisgKi8KKworc3RydWN0IGRpcl9lbnRyeSB7CisJdW5zaWduZWQgaW50IGxlbjsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKKyNkZWZpbmUgUEFUVEVSTl9GTEFHX05PRElSIDEKKyNkZWZpbmUgUEFUVEVSTl9GTEFHX0VORFNXSVRIIDQKKyNkZWZpbmUgUEFUVEVSTl9GTEFHX01VU1RCRURJUiA4CisjZGVmaW5lIFBBVFRFUk5fRkxBR19ORUdBVElWRSAxNgorCitzdHJ1Y3QgcGF0aF9wYXR0ZXJuIHsKKwkvKgorCSAqIFRoaXMgYWxsb3dzIGNhbGxlcnMgb2YgbGFzdF9tYXRjaGluZ19wYXR0ZXJuKCkgZXRjLgorCSAqIHRvIGRldGVybWluZSB0aGUgb3JpZ2luIG9mIHRoZSBtYXRjaGluZyBwYXR0ZXJuLgorCSAqLworCXN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsOworCisJY29uc3QgY2hhciAqcGF0dGVybjsKKwlpbnQgcGF0dGVybmxlbjsKKwlpbnQgbm93aWxkY2FyZGxlbjsKKwljb25zdCBjaGFyICpiYXNlOworCWludCBiYXNlbGVuOworCXVuc2lnbmVkIGZsYWdzOwkJLyogUEFUVEVSTl9GTEFHXyogKi8KKworCS8qCisJICogQ291bnRpbmcgc3RhcnRzIGZyb20gMSBmb3IgbGluZSBudW1iZXJzIGluIGlnbm9yZSBmaWxlcywKKwkgKiBhbmQgZnJvbSAtMSBkZWNyZW1lbnRpbmcgZm9yIHBhdHRlcm5zIGZyb20gQ0xJIGFyZ3MuCisJICovCisJaW50IHNyY3BvczsKK307CisKKy8qIHVzZWQgZm9yIGhhc2htYXBzIGZvciBjb25lIHBhdHRlcm5zICovCitzdHJ1Y3QgcGF0dGVybl9lbnRyeSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50OworCWNoYXIgKnBhdHRlcm47CisJc2l6ZV90IHBhdHRlcm5sZW47Cit9OworCisvKgorICogRWFjaCBleGNsdWRlcyBmaWxlIHdpbGwgYmUgcGFyc2VkIGludG8gYSBmcmVzaCBleGNsdWRlX2xpc3Qgd2hpY2gKKyAqIGlzIGFwcGVuZGVkIHRvIHRoZSByZWxldmFudCBleGNsdWRlX2xpc3RfZ3JvdXAgKGVpdGhlciBFWENfRElSUyBvcgorICogRVhDX0ZJTEUpLiAgQW4gZXhjbHVkZV9saXN0IHdpdGhpbiB0aGUgRVhDX0NNREwgZXhjbHVkZV9saXN0X2dyb3VwCisgKiBjYW4gYWxzbyBiZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgbGlzdCBvZiAtLWV4Y2x1ZGUgdmFsdWVzIHBhc3NlZAorICogdmlhIENMSSBhcmdzLgorICovCitzdHJ1Y3QgcGF0dGVybl9saXN0IHsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworCisJLyogcmVtZW1iZXIgcG9pbnRlciB0byBleGNsdWRlIGZpbGUgY29udGVudHMgc28gd2UgY2FuIGZyZWUoKSAqLworCWNoYXIgKmZpbGVidWY7CisKKwkvKiBvcmlnaW4gb2YgbGlzdCwgZS5nLiBwYXRoIHRvIGZpbGVuYW1lLCBvciBkZXNjcmlwdGl2ZSBzdHJpbmcgKi8KKwljb25zdCBjaGFyICpzcmM7CisKKwlzdHJ1Y3QgcGF0aF9wYXR0ZXJuICoqcGF0dGVybnM7CisKKwkvKgorCSAqIFdoaWxlIHNjYW5uaW5nIHRoZSBleGNsdWRlcywgd2UgYXR0ZW1wdCB0byBtYXRjaCB0aGUgcGF0dGVybnMKKwkgKiB3aXRoIGEgbW9yZSByZXN0cmljdGVkIHNldCB0aGF0IGFsbG93cyB1cyB0byB1c2UgaGFzaHNldHMgZm9yCisJICogbWF0Y2hpbmcgbG9naWMsIHdoaWNoIGlzIGZhc3RlciB0aGFuIHRoZSBsaW5lYXIgbG9va3VwIGluIHRoZQorCSAqIGV4Y2x1ZGVzIGFycmF5IGFib3ZlLiBJZiBub24temVybywgdGhhdCBjaGVjayBzdWNjZWVkZWQuCisJICovCisJdW5zaWduZWQgdXNlX2NvbmVfcGF0dGVybnM7CisJdW5zaWduZWQgZnVsbF9jb25lOworCisJLyoKKwkgKiBTdG9yZXMgcGF0aHMgd2hlcmUgZXZlcnl0aGluZyBzdGFydGluZyB3aXRoIHRob3NlIHBhdGhzCisJICogaXMgaW5jbHVkZWQuCisJICovCisJc3RydWN0IGhhc2htYXAgcmVjdXJzaXZlX2hhc2htYXA7CisKKwkvKgorCSAqIFVzZWQgdG8gY2hlY2sgc2luZ2xlLWxldmVsIHBhcmVudHMgb2YgYmxvYnMuCisJICovCisJc3RydWN0IGhhc2htYXAgcGFyZW50X2hhc2htYXA7Cit9OworCisvKgorICogVGhlIGNvbnRlbnRzIG9mIHRoZSBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUgZmlsZXMgYXJlIGxhemlseSByZWFkIG9uCisgKiBkZW1hbmQgYW5kIHRoZW4gY2FjaGVkIGluIG1lbW9yeSwgb25lIHBlciBleGNsdWRlX3N0YWNrIHN0cnVjdCwgaW4KKyAqIG9yZGVyIHRvIGF2b2lkIG9wZW5pbmcgYW5kIHBhcnNpbmcgZWFjaCBvbmUgZXZlcnkgdGltZSB0aGF0CisgKiBkaXJlY3RvcnkgaXMgdHJhdmVyc2VkLgorICovCitzdHJ1Y3QgZXhjbHVkZV9zdGFjayB7CisJc3RydWN0IGV4Y2x1ZGVfc3RhY2sgKnByZXY7IC8qIHRoZSBzdHJ1Y3QgZXhjbHVkZV9zdGFjayBmb3IgdGhlIHBhcmVudCBkaXJlY3RvcnkgKi8KKwlpbnQgYmFzZWxlbjsKKwlpbnQgZXhjbHVkZV9peDsgLyogaW5kZXggb2YgZXhjbHVkZV9saXN0IHdpdGhpbiBFWENfRElSUyBleGNsdWRlX2xpc3RfZ3JvdXAgKi8KKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqdWNkOworfTsKKworc3RydWN0IGV4Y2x1ZGVfbGlzdF9ncm91cCB7CisJaW50IG5yLCBhbGxvYzsKKwlzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbDsKK307CisKK3N0cnVjdCBvaWRfc3RhdCB7CisJc3RydWN0IHN0YXRfZGF0YSBzdGF0OworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCB2YWxpZDsKK307CisKKy8qCisgKiAgVW50cmFja2VkIGNhY2hlCisgKgorICogIFRoZSBmb2xsb3dpbmcgaW5wdXRzIGFyZSBzdWZmaWNpZW50IHRvIGRldGVybWluZSB3aGF0IGZpbGVzIGluIGEKKyAqICBkaXJlY3RvcnkgYXJlIGV4Y2x1ZGVkOgorICoKKyAqICAgLSBUaGUgbGlzdCBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBpbiBxdWVzdGlvbgorICogICAtIFRoZSAkR0lUX0RJUi9pbmRleAorICogICAtIGRpcl9zdHJ1Y3QgZmxhZ3MKKyAqICAgLSBUaGUgY29udGVudCBvZiAkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUKKyAqICAgLSBUaGUgY29udGVudCBvZiBjb3JlLmV4Y2x1ZGVzZmlsZQorICogICAtIFRoZSBjb250ZW50IChvciB0aGUgbGFjaykgb2YgLmdpdGlnbm9yZSBvZiBhbGwgcGFyZW50IGRpcmVjdG9yaWVzCisgKiAgICAgZnJvbSAkR0lUX1dPUktfVFJFRQorICogICAtIFRoZSBjaGVja19vbmx5IGZsYWcgaW4gcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlIChmb3IKKyAqICAgICBESVJfSElERV9FTVBUWV9ESVJFQ1RPUklFUykKKyAqCisgKiAgVGhlIGZpcnN0IGlucHV0IGNhbiBiZSBjaGVja2VkIHVzaW5nIGRpcmVjdG9yeSBtdGltZS4gSW4gbWFueQorICogIGZpbGVzeXN0ZW1zLCBkaXJlY3RvcnkgbXRpbWUgKHN0YXRfZGF0YSBmaWVsZCkgaXMgdXBkYXRlZCB3aGVuIGl0cworICogIGZpbGVzIG9yIGRpcmVjdCBzdWJkaXJzIGFyZSBhZGRlZCBvciByZW1vdmVkLgorICoKKyAqICBUaGUgc2Vjb25kIG9uZSBjYW4gYmUgaG9va2VkIGZyb20gY2FjaGVfdHJlZV9pbnZhbGlkYXRlX3BhdGgoKS4KKyAqICBXaGVuZXZlciBhIGZpbGUgKG9yIGEgc3VibW9kdWxlKSBpcyBhZGRlZCBvciByZW1vdmVkIGZyb20gYQorICogIGRpcmVjdG9yeSwgd2UgaW52YWxpZGF0ZSB0aGF0IGRpcmVjdG9yeS4KKyAqCisgKiAgVGhlIHJlbWFpbmluZyBpbnB1dHMgYXJlIGVhc3ksIHRoZWlyIFNIQS0xIGNvdWxkIGJlIHVzZWQgdG8gdmVyaWZ5CisgKiAgdGhlaXIgY29udGVudHMgKGV4Y2x1ZGVfc2hhMVtdLCBpbmZvX2V4Y2x1ZGVfc2hhMVtdIGFuZAorICogIGV4Y2x1ZGVzX2ZpbGVfc2hhMVtdKQorICovCitzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciB7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKipkaXJzOworCWNoYXIgKip1bnRyYWNrZWQ7CisJc3RydWN0IHN0YXRfZGF0YSBzdGF0X2RhdGE7CisJdW5zaWduZWQgaW50IHVudHJhY2tlZF9hbGxvYywgZGlyc19uciwgZGlyc19hbGxvYzsKKwl1bnNpZ25lZCBpbnQgdW50cmFja2VkX25yOworCXVuc2lnbmVkIGludCBjaGVja19vbmx5IDogMTsKKwkvKiBhbGwgZGF0YSBleGNlcHQgJ2RpcnMnIGluIHRoaXMgc3RydWN0IGFyZSBnb29kICovCisJdW5zaWduZWQgaW50IHZhbGlkIDogMTsKKwl1bnNpZ25lZCBpbnQgcmVjdXJzZSA6IDE7CisJLyogbnVsbCBvYmplY3QgSUQgbWVhbnMgdGhpcyBkaXJlY3RvcnkgZG9lcyBub3QgaGF2ZSAuZ2l0aWdub3JlICovCisJc3RydWN0IG9iamVjdF9pZCBleGNsdWRlX29pZDsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9OworCitzdHJ1Y3QgdW50cmFja2VkX2NhY2hlIHsKKwlzdHJ1Y3Qgb2lkX3N0YXQgc3NfaW5mb19leGNsdWRlOworCXN0cnVjdCBvaWRfc3RhdCBzc19leGNsdWRlc19maWxlOworCWNvbnN0IGNoYXIgKmV4Y2x1ZGVfcGVyX2RpcjsKKwlzdHJ1Y3Qgc3RyYnVmIGlkZW50OworCS8qCisJICogZGlyX3N0cnVjdCNmbGFncyBtdXN0IG1hdGNoIGRpcl9mbGFncyBvciB0aGUgdW50cmFja2VkCisJICogY2FjaGUgaXMgaWdub3JlZC4KKwkgKi8KKwl1bnNpZ25lZCBkaXJfZmxhZ3M7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnJvb3Q7CisJLyogU3RhdGlzdGljcyAqLworCWludCBkaXJfY3JlYXRlZDsKKwlpbnQgZ2l0aWdub3JlX2ludmFsaWRhdGVkOworCWludCBkaXJfaW52YWxpZGF0ZWQ7CisJaW50IGRpcl9vcGVuZWQ7CisJLyogZnNtb25pdG9yIGludmFsaWRhdGlvbiBkYXRhICovCisJdW5zaWduZWQgaW50IHVzZV9mc21vbml0b3IgOiAxOworfTsKKworLyoqCisgKiBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBwYXNzIGRpcmVjdG9yeSB0cmF2ZXJzYWwgb3B0aW9ucyB0byB0aGUgbGlicmFyeSBhbmQgdG8KKyAqIHJlY29yZCB0aGUgcGF0aHMgZGlzY292ZXJlZC4gQSBzaW5nbGUgYHN0cnVjdCBkaXJfc3RydWN0YCBpcyB1c2VkIHJlZ2FyZGxlc3MKKyAqIG9mIHdoZXRoZXIgb3Igbm90IHRoZSB0cmF2ZXJzYWwgcmVjdXJzaXZlbHkgZGVzY2VuZHMgaW50byBzdWJkaXJlY3Rvcmllcy4KKyAqLworc3RydWN0IGRpcl9zdHJ1Y3QgeworCisJLyogVGhlIG51bWJlciBvZiBtZW1iZXJzIGluIGBlbnRyaWVzW11gIGFycmF5LiAqLworCWludCBucjsKKworCS8qIEludGVybmFsIHVzZTsga2VlcHMgdHJhY2sgb2YgYWxsb2NhdGlvbiBvZiBgZW50cmllc1tdYCBhcnJheS4qLworCWludCBhbGxvYzsKKworCS8qIFRoZSBudW1iZXIgb2YgbWVtYmVycyBpbiBgaWdub3JlZFtdYCBhcnJheS4gKi8KKwlpbnQgaWdub3JlZF9ucjsKKworCWludCBpZ25vcmVkX2FsbG9jOworCisJLyogYml0LWZpZWxkIG9mIG9wdGlvbnMgKi8KKwllbnVtIHsKKworCQkvKioKKwkJICogUmV0dXJuIGp1c3QgaWdub3JlZCBmaWxlcyBpbiBgZW50cmllc1tdYCwgbm90IHVudHJhY2tlZCBmaWxlcy4KKwkJICogVGhpcyBmbGFnIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGBESVJfU0hPV19JR05PUkVEX1RPT2AuCisJCSAqLworCQlESVJfU0hPV19JR05PUkVEID0gMTw8MCwKKworCQkvKiBJbmNsdWRlIGEgZGlyZWN0b3J5IHRoYXQgaXMgbm90IHRyYWNrZWQuICovCisJCURJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTID0gMTw8MSwKKworCQkvKiBEbyBub3QgaW5jbHVkZSBhIGRpcmVjdG9yeSB0aGF0IGlzIG5vdCB0cmFja2VkIGFuZCBpcyBlbXB0eS4gKi8KKwkJRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVMgPSAxPDwyLAorCisJCS8qKgorCQkgKiBJZiBzZXQsIHJlY3Vyc2UgaW50byBhIGRpcmVjdG9yeSB0aGF0IGxvb2tzIGxpa2UgYSBHaXQgZGlyZWN0b3J5LgorCQkgKiBPdGhlcndpc2UgaXQgaXMgc2hvd24gYXMgYSBkaXJlY3RvcnkuCisJCSAqLworCQlESVJfTk9fR0lUTElOS1MgPSAxPDwzLAorCisJCS8qKgorCQkgKiBTcGVjaWFsIG1vZGUgZm9yIGdpdC1hZGQuIFJldHVybiBpZ25vcmVkIGZpbGVzIGluIGBpZ25vcmVkW11gIGFuZAorCQkgKiB1bnRyYWNrZWQgZmlsZXMgaW4gYGVudHJpZXNbXWAuIE9ubHkgcmV0dXJucyBpZ25vcmVkIGZpbGVzIHRoYXQgbWF0Y2gKKwkJICogcGF0aHNwZWMgZXhhY3RseSAobm8gd2lsZGNhcmRzKS4gRG9lcyBub3QgcmVjdXJzZSBpbnRvIGlnbm9yZWQKKwkJICogZGlyZWN0b3JpZXMuCisJCSAqLworCQlESVJfQ09MTEVDVF9JR05PUkVEID0gMTw8NCwKKworCQkvKioKKwkJICogU2ltaWxhciB0byBgRElSX1NIT1dfSUdOT1JFRGAsIGJ1dCByZXR1cm4gaWdub3JlZCBmaWxlcyBpbgorCQkgKiBgaWdub3JlZFtdYCBpbiBhZGRpdGlvbiB0byB1bnRyYWNrZWQgZmlsZXMgaW4gYGVudHJpZXNbXWAuCisJCSAqIFRoaXMgZmxhZyBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgRElSX1NIT1dfSUdOT1JFRGAuCisJCSAqLworCQlESVJfU0hPV19JR05PUkVEX1RPTyA9IDE8PDUsCisKKwkJRElSX0NPTExFQ1RfS0lMTEVEX09OTFkgPSAxPDw2LAorCisJCS8qKgorCQkgKiBPbmx5IGhhcyBtZWFuaW5nIGlmIGBESVJfU0hPV19JR05PUkVEX1RPT2AgaXMgYWxzbyBzZXQ7IGlmIHRoaXMgaXMKKwkJICogc2V0LCB0aGUgdW50cmFja2VkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBkaXJlY3RvcmllcyBhcmUgYWxzbworCQkgKiByZXR1cm5lZCBpbiBgZW50cmllc1tdYC4KKwkJICovCisJCURJUl9LRUVQX1VOVFJBQ0tFRF9DT05URU5UUyA9IDE8PDcsCisKKwkJLyoqCisJCSAqIE9ubHkgaGFzIG1lYW5pbmcgaWYgYERJUl9TSE9XX0lHTk9SRURfVE9PYCBpcyBhbHNvIHNldDsgaWYgdGhpcyBpcworCQkgKiBzZXQsIHJldHVybnMgaWdub3JlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBtYXRjaCBhbiBleGNsdWRlCisJCSAqIHBhdHRlcm4uIElmIGEgZGlyZWN0b3J5IG1hdGNoZXMgYW4gZXhjbHVkZSBwYXR0ZXJuLCB0aGVuIHRoZQorCQkgKiBkaXJlY3RvcnkgaXMgcmV0dXJuZWQgYW5kIHRoZSBjb250YWluZWQgcGF0aHMgYXJlIG5vdC4gQSBkaXJlY3RvcnkKKwkJICogdGhhdCBkb2VzIG5vdCBtYXRjaCBhbiBleGNsdWRlIHBhdHRlcm4gd2lsbCBub3QgYmUgcmV0dXJuZWQgZXZlbiBpZgorCQkgKiBhbGwgb2YgaXRzIGNvbnRlbnRzIGFyZSBpZ25vcmVkLiBJbiB0aGlzIGNhc2UsIHRoZSBjb250ZW50cyBhcmUKKwkJICogcmV0dXJuZWQgYXMgaW5kaXZpZHVhbCBlbnRyaWVzLgorCQkgKgorCQkgKiBJZiB0aGlzIGlzIHNldCwgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRoYXQgZXhwbGljaXRseSBtYXRjaCBhbiBpZ25vcmUKKwkJICogcGF0dGVybiBhcmUgcmVwb3J0ZWQuIEltcGxpY2l0bHkgaWdub3JlZCBkaXJlY3RvcmllcyAoZGlyZWN0b3JpZXMgdGhhdAorCQkgKiBkbyBub3QgbWF0Y2ggYW4gaWdub3JlIHBhdHRlcm4sIGJ1dCB3aG9zZSBjb250ZW50cyBhcmUgYWxsIGlnbm9yZWQpCisJCSAqIGFyZSBub3QgcmVwb3J0ZWQsIGluc3RlYWQgYWxsIG9mIHRoZSBjb250ZW50cyBhcmUgcmVwb3J0ZWQuCisJCSAqLworCQlESVJfU0hPV19JR05PUkVEX1RPT19NT0RFX01BVENISU5HID0gMTw8OCwKKworCQlESVJfU0tJUF9ORVNURURfR0lUID0gMTw8OQorCX0gZmxhZ3M7CisKKwkvKiBBbiBhcnJheSBvZiBgc3RydWN0IGRpcl9lbnRyeWAsIGVhY2ggZWxlbWVudCBvZiB3aGljaCBkZXNjcmliZXMgYSBwYXRoLiAqLworCXN0cnVjdCBkaXJfZW50cnkgKiplbnRyaWVzOworCisJLyoqCisJICogdXNlZCBmb3IgaWdub3JlZCBwYXRocyB3aXRoIHRoZSBgRElSX1NIT1dfSUdOT1JFRF9UT09gIGFuZAorCSAqIGBESVJfQ09MTEVDVF9JR05PUkVEYCBmbGFncy4KKwkgKi8KKwlzdHJ1Y3QgZGlyX2VudHJ5ICoqaWdub3JlZDsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHJlYWQgaW4gZWFjaCBkaXJlY3RvcnkgZm9yIGV4Y2x1ZGVkIGZpbGVzCisJICogKHR5cGljYWxseSBgLmdpdGlnbm9yZWApLgorCSAqLworCWNvbnN0IGNoYXIgKmV4Y2x1ZGVfcGVyX2RpcjsKKworCS8qCisJICogV2UgbWFpbnRhaW4gdGhyZWUgZ3JvdXBzIG9mIGV4Y2x1ZGUgcGF0dGVybiBsaXN0czoKKwkgKgorCSAqIEVYQ19DTURMIGxpc3RzIHBhdHRlcm5zIGV4cGxpY2l0bHkgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4KKwkgKiBFWENfRElSUyBsaXN0cyBwYXR0ZXJucyBvYnRhaW5lZCBmcm9tIHBlci1kaXJlY3RvcnkgaWdub3JlIGZpbGVzLgorCSAqIEVYQ19GSUxFIGxpc3RzIHBhdHRlcm5zIGZyb20gZmFsbGJhY2sgaWdub3JlIGZpbGVzLCBlLmcuCisJICogICAtIC5naXQvaW5mby9leGNsdWRlCisJICogICAtIGNvcmUuZXhjbHVkZXNmaWxlCisJICoKKwkgKiBFYWNoIGdyb3VwIGNvbnRhaW5zIG11bHRpcGxlIGV4Y2x1ZGUgbGlzdHMsIGEgc2luZ2xlIGxpc3QKKwkgKiBwZXIgc291cmNlLgorCSAqLworI2RlZmluZSBFWENfQ01ETCAwCisjZGVmaW5lIEVYQ19ESVJTIDEKKyNkZWZpbmUgRVhDX0ZJTEUgMgorCXN0cnVjdCBleGNsdWRlX2xpc3RfZ3JvdXAgZXhjbHVkZV9saXN0X2dyb3VwWzNdOworCisJLyoKKwkgKiBUZW1wb3JhcnkgdmFyaWFibGVzIHdoaWNoIGFyZSB1c2VkIGR1cmluZyBsb2FkaW5nIG9mIHRoZQorCSAqIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBsaXN0cy4KKwkgKgorCSAqIGV4Y2x1ZGVfc3RhY2sgcG9pbnRzIHRvIHRoZSB0b3Agb2YgdGhlIGV4Y2x1ZGVfc3RhY2ssIGFuZAorCSAqIGJhc2VidWYgY29udGFpbnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY3VycmVudAorCSAqIChzdWIpZGlyZWN0b3J5IGluIHRoZSB0cmF2ZXJzYWwuIEV4Y2x1ZGUgcG9pbnRzIHRvIHRoZQorCSAqIG1hdGNoaW5nIGV4Y2x1ZGUgc3RydWN0IGlmIHRoZSBkaXJlY3RvcnkgaXMgZXhjbHVkZWQuCisJICovCisJc3RydWN0IGV4Y2x1ZGVfc3RhY2sgKmV4Y2x1ZGVfc3RhY2s7CisJc3RydWN0IHBhdGhfcGF0dGVybiAqcGF0dGVybjsKKwlzdHJ1Y3Qgc3RyYnVmIGJhc2VidWY7CisKKwkvKiBFbmFibGUgdW50cmFja2VkIGZpbGUgY2FjaGUgaWYgc2V0ICovCisJc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdW50cmFja2VkOworCXN0cnVjdCBvaWRfc3RhdCBzc19pbmZvX2V4Y2x1ZGU7CisJc3RydWN0IG9pZF9zdGF0IHNzX2V4Y2x1ZGVzX2ZpbGU7CisJdW5zaWduZWQgdW5tYW5hZ2VkX2V4Y2x1ZGVfZmlsZXM7Cit9OworCisvKkNvdW50IHRoZSBudW1iZXIgb2Ygc2xhc2hlcyBmb3Igc3RyaW5nIHMqLworaW50IGNvdW50X3NsYXNoZXMoY29uc3QgY2hhciAqcyk7CisKKy8qCisgKiBUaGUgb3JkZXJpbmcgb2YgdGhlc2UgY29uc3RhbnRzIGlzIHNpZ25pZmljYW50LCB3aXRoCisgKiBoaWdoZXItbnVtYmVyZWQgbWF0Y2ggdHlwZXMgc2lnbmlmeWluZyAiY2xvc2VyIiAoaS5lLiBtb3JlCisgKiBzcGVjaWZpYykgbWF0Y2hlcyB3aGljaCB3aWxsIG92ZXJyaWRlIGxvd2VyLW51bWJlcmVkIG1hdGNoIHR5cGVzCisgKiB3aGVuIHBvcHVsYXRpbmcgdGhlIHNlZW5bXSBhcnJheS4KKyAqLworI2RlZmluZSBNQVRDSEVEX1JFQ1VSU0lWRUxZIDEKKyNkZWZpbmUgTUFUQ0hFRF9SRUNVUlNJVkVMWV9MRUFESU5HX1BBVEhTUEVDIDIKKyNkZWZpbmUgTUFUQ0hFRF9GTk1BVENIIDMKKyNkZWZpbmUgTUFUQ0hFRF9FWEFDVExZIDQKK2ludCBzaW1wbGVfbGVuZ3RoKGNvbnN0IGNoYXIgKm1hdGNoKTsKK2ludCBub193aWxkY2FyZChjb25zdCBjaGFyICpzdHJpbmcpOworY2hhciAqY29tbW9uX3ByZWZpeChjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKTsKK2ludCBtYXRjaF9wYXRoc3BlYyhjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCSAgIGludCBwcmVmaXgsIGNoYXIgKnNlZW4sIGludCBpc19kaXIpOworaW50IHJlcG9ydF9wYXRoX2Vycm9yKGNvbnN0IGNoYXIgKnBzX21hdGNoZWQsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpOworaW50IHdpdGhpbl9kZXB0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IGRlcHRoLCBpbnQgbWF4X2RlcHRoKTsKKworaW50IGZpbGxfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCSAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKTsKK2ludCByZWFkX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJICAgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwKKwkJICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYyk7CisKK2VudW0gcGF0dGVybl9tYXRjaF9yZXN1bHQgeworCVVOREVDSURFRCA9IC0xLAorCU5PVF9NQVRDSEVEID0gMCwKKwlNQVRDSEVEID0gMSwKKwlNQVRDSEVEX1JFQ1VSU0lWRSA9IDIsCit9OworCisvKgorICogU2NhbiB0aGUgbGlzdCBvZiBwYXR0ZXJucyB0byBkZXRlcm1pbmUgaWYgdGhlIG9yZGVyZWQgbGlzdAorICogb2YgcGF0dGVybnMgbWF0Y2hlcyBvbiAncGF0aG5hbWUnLgorICoKKyAqIFJldHVybiAxIGZvciBhIG1hdGNoLCAwIGZvciBub3QgbWF0Y2hlZCBhbmQgLTEgZm9yIHVuZGVjaWRlZC4KKyAqLworZW51bSBwYXR0ZXJuX21hdGNoX3Jlc3VsdCBwYXRoX21hdGNoZXNfcGF0dGVybl9saXN0KGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorCQkJCWludCBwYXRobGVuLAorCQkJCWNvbnN0IGNoYXIgKmJhc2VuYW1lLCBpbnQgKmR0eXBlLAorCQkJCXN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLAorCQkJCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKK3N0cnVjdCBkaXJfZW50cnkgKmRpcl9hZGRfaWdub3JlZChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJCSAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJICBjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGxlbik7CisKKy8qCisgKiB0aGVzZSBpbXBsZW1lbnQgdGhlIG1hdGNoaW5nIGxvZ2ljIGZvciBkaXIuYzpleGNsdWRlZF9mcm9tX2xpc3QgYW5kCisgKiBhdHRyLmM6cGF0aF9tYXRjaGVzKCkKKyAqLworaW50IG1hdGNoX2Jhc2VuYW1lKGNvbnN0IGNoYXIgKiwgaW50LAorCQkgICBjb25zdCBjaGFyICosIGludCwgaW50LCB1bnNpZ25lZCk7CitpbnQgbWF0Y2hfcGF0aG5hbWUoY29uc3QgY2hhciAqLCBpbnQsCisJCSAgIGNvbnN0IGNoYXIgKiwgaW50LAorCQkgICBjb25zdCBjaGFyICosIGludCwgaW50LCB1bnNpZ25lZCk7CisKK3N0cnVjdCBwYXRoX3BhdHRlcm4gKmxhc3RfbWF0Y2hpbmdfcGF0dGVybihzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJCQkgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkJICAgY29uc3QgY2hhciAqbmFtZSwgaW50ICpkdHlwZSk7CisKK2ludCBpc19leGNsdWRlZChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJY29uc3QgY2hhciAqbmFtZSwgaW50ICpkdHlwZSk7CisKK2ludCBwbF9oYXNobWFwX2NtcChjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCSAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICphLAorCQkgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqYiwKKwkJICAgY29uc3Qgdm9pZCAqa2V5KTsKK2ludCBoYXNobWFwX2NvbnRhaW5zX3BhcmVudChzdHJ1Y3QgaGFzaG1hcCAqbWFwLAorCQkJICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqYnVmZmVyKTsKK3N0cnVjdCBwYXR0ZXJuX2xpc3QgKmFkZF9wYXR0ZXJuX2xpc3Qoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCQkgICAgICBpbnQgZ3JvdXBfdHlwZSwgY29uc3QgY2hhciAqc3JjKTsKK2ludCBhZGRfcGF0dGVybnNfZnJvbV9maWxlX3RvX2xpc3QoY29uc3QgY2hhciAqZm5hbWUsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkJCSAgIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLCBzdHJ1Y3QgIGluZGV4X3N0YXRlICppc3RhdGUpOwordm9pZCBhZGRfcGF0dGVybnNfZnJvbV9maWxlKHN0cnVjdCBkaXJfc3RydWN0ICosIGNvbnN0IGNoYXIgKmZuYW1lKTsKK2ludCBhZGRfcGF0dGVybnNfZnJvbV9ibG9iX3RvX2xpc3Qoc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkJCSAgIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKTsKK3ZvaWQgcGFyc2VfcGF0aF9wYXR0ZXJuKGNvbnN0IGNoYXIgKipzdHJpbmcsIGludCAqcGF0dGVybmxlbiwgdW5zaWduZWQgKmZsYWdzLCBpbnQgKm5vd2lsZGNhcmRsZW4pOwordm9pZCBhZGRfcGF0dGVybihjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmJhc2UsCisJCSBpbnQgYmFzZWxlbiwgc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwsIGludCBzcmNwb3MpOwordm9pZCBjbGVhcl9wYXR0ZXJuX2xpc3Qoc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwpOwordm9pZCBjbGVhcl9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcik7CisKK2ludCByZXBvX2ZpbGVfZXhpc3RzKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwYXRoKTsKK2ludCBmaWxlX2V4aXN0cyhjb25zdCBjaGFyICopOworCitpbnQgaXNfaW5zaWRlX2Rpcihjb25zdCBjaGFyICpkaXIpOworaW50IGRpcl9pbnNpZGVfb2YoY29uc3QgY2hhciAqc3ViZGlyLCBjb25zdCBjaGFyICpkaXIpOworCitzdGF0aWMgaW5saW5lIGludCBpc19kb3Rfb3JfZG90ZG90KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIChuYW1lWzBdID09ICcuJyAmJgorCQkobmFtZVsxXSA9PSAnXDAnIHx8CisJCSAobmFtZVsxXSA9PSAnLicgJiYgbmFtZVsyXSA9PSAnXDAnKSkpOworfQorCitpbnQgaXNfZW1wdHlfZGlyKGNvbnN0IGNoYXIgKmRpcik7CisKK3ZvaWQgc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcik7CisKKworLyogQ29uc3RhbnRzIGZvciByZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5OiAqLworCisvKgorICogSWYgYSBub24tZGlyZWN0b3J5IGlzIGZvdW5kIHdpdGhpbiBwYXRoLCBzdG9wIGFuZCByZXR1cm4gYW4gZXJyb3IuCisgKiAoSW4gdGhpcyBjYXNlIHNvbWUgZW1wdHkgZGlyZWN0b3JpZXMgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4KKyAqIHJlbW92ZWQuKQorICovCisjZGVmaW5lIFJFTU9WRV9ESVJfRU1QVFlfT05MWSAwMQorCisvKgorICogSWYgYW55IEdpdCB3b3JrIHRyZWVzIGFyZSBmb3VuZCB3aXRoaW4gcGF0aCwgc2tpcCB0aGVtIHdpdGhvdXQKKyAqIGNvbnNpZGVyaW5nIGl0IGFuIGVycm9yLgorICovCisjZGVmaW5lIFJFTU9WRV9ESVJfS0VFUF9ORVNURURfR0lUIDAyCisKKy8qIFJlbW92ZSB0aGUgY29udGVudHMgb2YgcGF0aCwgYnV0IGxlYXZlIHBhdGggaXRzZWxmLiAqLworI2RlZmluZSBSRU1PVkVfRElSX0tFRVBfVE9QTEVWRUwgMDQKKworLyoKKyAqIFJlbW92ZSBwYXRoIGFuZCBpdHMgY29udGVudHMsIHJlY3Vyc2l2ZWx5LiBmbGFncyBpcyBhIGNvbWJpbmF0aW9uCisgKiBvZiB0aGUgYWJvdmUgUkVNT1ZFX0RJUl8qIGNvbnN0YW50cy4gUmV0dXJuIDAgb24gc3VjY2Vzcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgcGF0aCBhcyB0ZW1wb3Jhcnkgc2NyYXRjaCBzcGFjZSwgYnV0IHJlc3RvcmVzIGl0CisgKiBiZWZvcmUgcmV0dXJuaW5nLgorICovCitpbnQgcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseShzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBpbnQgZmxhZyk7CisKKy8qIHRyaWVzIHRvIHJlbW92ZSB0aGUgcGF0aCB3aXRoIGVtcHR5IGRpcmVjdG9yaWVzIGFsb25nIGl0LCBpZ25vcmVzIEVOT0VOVCAqLworaW50IHJlbW92ZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOworCitpbnQgZnNwYXRoY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpOworaW50IGZzcGF0aG5jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgc2l6ZV90IGNvdW50KTsKKworLyoKKyAqIFRoZSBwcmVmaXggcGFydCBvZiBwYXR0ZXJuIG11c3Qgbm90IGNvbnRhaW5zIHdpbGRjYXJkcy4KKyAqLworc3RydWN0IHBhdGhzcGVjX2l0ZW07CitpbnQgZ2l0X2ZubWF0Y2goY29uc3Qgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0sCisJCWNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJaW50IHByZWZpeCk7CisKK2ludCBzdWJtb2R1bGVfcGF0aF9tYXRjaChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLAorCQkJIGNvbnN0IGNoYXIgKnN1Ym1vZHVsZV9uYW1lLAorCQkJIGNoYXIgKnNlZW4pOworCitzdGF0aWMgaW5saW5lIGludCBjZV9wYXRoX21hdGNoKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCQljaGFyICpzZWVuKQoreworCXJldHVybiBtYXRjaF9wYXRoc3BlYyhpc3RhdGUsIHBhdGhzcGVjLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIDAsIHNlZW4sCisJCQkgICAgICBTX0lTRElSKGNlLT5jZV9tb2RlKSB8fCBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkaXJfcGF0aF9tYXRjaChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgY29uc3Qgc3RydWN0IGRpcl9lbnRyeSAqZW50LAorCQkJCSBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJCSBpbnQgcHJlZml4LCBjaGFyICpzZWVuKQoreworCWludCBoYXNfdHJhaWxpbmdfZGlyID0gZW50LT5sZW4gJiYgZW50LT5uYW1lW2VudC0+bGVuIC0gMV0gPT0gJy8nOworCWludCBsZW4gPSBoYXNfdHJhaWxpbmdfZGlyID8gZW50LT5sZW4gLSAxIDogZW50LT5sZW47CisJcmV0dXJuIG1hdGNoX3BhdGhzcGVjKGlzdGF0ZSwgcGF0aHNwZWMsIGVudC0+bmFtZSwgbGVuLCBwcmVmaXgsIHNlZW4sCisJCQkgICAgICBoYXNfdHJhaWxpbmdfZGlyKTsKK30KKworaW50IGNtcF9kaXJfZW50cnkoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKTsKK2ludCBjaGVja19kaXJfZW50cnlfY29udGFpbnMoY29uc3Qgc3RydWN0IGRpcl9lbnRyeSAqb3V0LCBjb25zdCBzdHJ1Y3QgZGlyX2VudHJ5ICppbik7CisKK3ZvaWQgdW50cmFja2VkX2NhY2hlX2ludmFsaWRhdGVfcGF0aChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqLCBpbnQgc2FmZV9wYXRoKTsKK3ZvaWQgdW50cmFja2VkX2NhY2hlX3JlbW92ZV9mcm9tX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICopOwordm9pZCB1bnRyYWNrZWRfY2FjaGVfYWRkX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICopOworCit2b2lkIGZyZWVfdW50cmFja2VkX2NhY2hlKHN0cnVjdCB1bnRyYWNrZWRfY2FjaGUgKik7CitzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICpyZWFkX3VudHJhY2tlZF9leHRlbnNpb24oY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzeik7Cit2b2lkIHdyaXRlX3VudHJhY2tlZF9leHRlbnNpb24oc3RydWN0IHN0cmJ1ZiAqb3V0LCBzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1bnRyYWNrZWQpOwordm9pZCBhZGRfdW50cmFja2VkX2NhY2hlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKK3ZvaWQgcmVtb3ZlX3VudHJhY2tlZF9jYWNoZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CisKKy8qCisgKiBDb25uZWN0IGEgd29ya3RyZWUgdG8gYSBnaXQgZGlyZWN0b3J5IGJ5IGNyZWF0aW5nIChvciBvdmVyd3JpdGluZykgYQorICogJy5naXQnIGZpbGUgY29udGFpbmluZyB0aGUgbG9jYXRpb24gb2YgdGhlIGdpdCBkaXJlY3RvcnkuIEluIHRoZSBnaXQKKyAqIGRpcmVjdG9yeSBzZXQgdGhlIGNvcmUud29ya3RyZWUgc2V0dGluZyB0byBpbmRpY2F0ZSB3aGVyZSB0aGUgd29ya3RyZWUgaXMuCisgKiBXaGVuIGByZWN1cnNlX2ludG9fbmVzdGVkYCBpcyBzZXQsIHJlY3Vyc2UgaW50byBhbnkgbmVzdGVkIHN1Ym1vZHVsZXMsCisgKiBjb25uZWN0aW5nIHRoZW0gYXMgd2VsbC4KKyAqLwordm9pZCBjb25uZWN0X3dvcmtfdHJlZV9hbmRfZ2l0X2Rpcihjb25zdCBjaGFyICp3b3JrX3RyZWUsCisJCQkJICAgY29uc3QgY2hhciAqZ2l0X2RpciwKKwkJCQkgICBpbnQgcmVjdXJzZV9pbnRvX25lc3RlZCk7Cit2b2lkIHJlbG9jYXRlX2dpdGRpcihjb25zdCBjaGFyICpwYXRoLAorCQkgICAgIGNvbnN0IGNoYXIgKm9sZF9naXRfZGlyLAorCQkgICAgIGNvbnN0IGNoYXIgKm5ld19naXRfZGlyKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZWRpdG9yLmMgYi9lZGl0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTk4OWVlCi0tLSAvZGV2L251bGwKKysrIGIvZWRpdG9yLmMKQEAgLTAsMCArMSwxMjggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKworI2lmbmRlZiBERUZBVUxUX0VESVRPUgorI2RlZmluZSBERUZBVUxUX0VESVRPUiAidmkiCisjZW5kaWYKKworaW50IGlzX3Rlcm1pbmFsX2R1bWIodm9pZCkKK3sKKwljb25zdCBjaGFyICp0ZXJtaW5hbCA9IGdldGVudigiVEVSTSIpOworCXJldHVybiAhdGVybWluYWwgfHwgIXN0cmNtcCh0ZXJtaW5hbCwgImR1bWIiKTsKK30KKworY29uc3QgY2hhciAqZ2l0X2VkaXRvcih2b2lkKQoreworCWNvbnN0IGNoYXIgKmVkaXRvciA9IGdldGVudigiR0lUX0VESVRPUiIpOworCWludCB0ZXJtaW5hbF9pc19kdW1iID0gaXNfdGVybWluYWxfZHVtYigpOworCisJaWYgKCFlZGl0b3IgJiYgZWRpdG9yX3Byb2dyYW0pCisJCWVkaXRvciA9IGVkaXRvcl9wcm9ncmFtOworCWlmICghZWRpdG9yICYmICF0ZXJtaW5hbF9pc19kdW1iKQorCQllZGl0b3IgPSBnZXRlbnYoIlZJU1VBTCIpOworCWlmICghZWRpdG9yKQorCQllZGl0b3IgPSBnZXRlbnYoIkVESVRPUiIpOworCisJaWYgKCFlZGl0b3IgJiYgdGVybWluYWxfaXNfZHVtYikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWVkaXRvcikKKwkJZWRpdG9yID0gREVGQVVMVF9FRElUT1I7CisKKwlyZXR1cm4gZWRpdG9yOworfQorCitjb25zdCBjaGFyICpnaXRfc2VxdWVuY2VfZWRpdG9yKHZvaWQpCit7CisJY29uc3QgY2hhciAqZWRpdG9yID0gZ2V0ZW52KCJHSVRfU0VRVUVOQ0VfRURJVE9SIik7CisKKwlpZiAoIWVkaXRvcikKKwkJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KCJzZXF1ZW5jZS5lZGl0b3IiLCAmZWRpdG9yKTsKKwlpZiAoIWVkaXRvcikKKwkJZWRpdG9yID0gZ2l0X2VkaXRvcigpOworCisJcmV0dXJuIGVkaXRvcjsKK30KKworc3RhdGljIGludCBsYXVuY2hfc3BlY2lmaWVkX2VkaXRvcihjb25zdCBjaGFyICplZGl0b3IsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICAgc3RydWN0IHN0cmJ1ZiAqYnVmZmVyLCBjb25zdCBjaGFyICpjb25zdCAqZW52KQoreworCWlmICghZWRpdG9yKQorCQlyZXR1cm4gZXJyb3IoIlRlcm1pbmFsIGlzIGR1bWIsIGJ1dCBFRElUT1IgdW5zZXQiKTsKKworCWlmIChzdHJjbXAoZWRpdG9yLCAiOiIpKSB7CisJCXN0cnVjdCBzdHJidWYgcmVhbHBhdGggPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqYXJnc1tdID0geyBlZGl0b3IsIE5VTEwsIE5VTEwgfTsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwkJaW50IHJldCwgc2lnOworCQlpbnQgcHJpbnRfd2FpdGluZ19mb3JfZWRpdG9yID0gYWR2aWNlX3dhaXRpbmdfZm9yX2VkaXRvciAmJiBpc2F0dHkoMik7CisKKwkJaWYgKHByaW50X3dhaXRpbmdfZm9yX2VkaXRvcikgeworCQkJLyoKKwkJCSAqIEEgZHVtYiB0ZXJtaW5hbCBjYW5ub3QgZXJhc2UgdGhlIGxpbmUgbGF0ZXIgb24uIEFkZCBhCisJCQkgKiBuZXdsaW5lIHRvIHNlcGFyYXRlIHRoZSBoaW50IGZyb20gc3Vic2VxdWVudCBvdXRwdXQuCisJCQkgKgorCQkJICogTWFrZSBzdXJlIHRoYXQgb3VyIG1lc3NhZ2UgaXMgc2VwYXJhdGVkIHdpdGggYSB3aGl0ZXNwYWNlCisJCQkgKiBmcm9tIGZ1cnRoZXIgY3J1ZnQgdGhhdCBtYXkgYmUgd3JpdHRlbiBieSB0aGUgZWRpdG9yLgorCQkJICovCisJCQljb25zdCBjaGFyIHRlcm0gPSBpc190ZXJtaW5hbF9kdW1iKCkgPyAnXG4nIDogJyAnOworCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJoaW50OiBXYWl0aW5nIGZvciB5b3VyIGVkaXRvciB0byBjbG9zZSB0aGUgZmlsZS4uLiVjIiksCisJCQkJdGVybSk7CisJCQlmZmx1c2goc3RkZXJyKTsKKwkJfQorCisJCXN0cmJ1Zl9yZWFscGF0aCgmcmVhbHBhdGgsIHBhdGgsIDEpOworCQlhcmdzWzFdID0gcmVhbHBhdGguYnVmOworCisJCXAuYXJndiA9IGFyZ3M7CisJCXAuZW52ID0gZW52OworCQlwLnVzZV9zaGVsbCA9IDE7CisJCXAudHJhY2UyX2NoaWxkX2NsYXNzID0gImVkaXRvciI7CisJCWlmIChzdGFydF9jb21tYW5kKCZwKSA8IDApIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZyZWFscGF0aCk7CisJCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byBzdGFydCBlZGl0b3IgJyVzJyIsIGVkaXRvcik7CisJCX0KKworCQlzaWdjaGFpbl9wdXNoKFNJR0lOVCwgU0lHX0lHTik7CisJCXNpZ2NoYWluX3B1c2goU0lHUVVJVCwgU0lHX0lHTik7CisJCXJldCA9IGZpbmlzaF9jb21tYW5kKCZwKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnJlYWxwYXRoKTsKKwkJc2lnID0gcmV0IC0gMTI4OworCQlzaWdjaGFpbl9wb3AoU0lHSU5UKTsKKwkJc2lnY2hhaW5fcG9wKFNJR1FVSVQpOworCQlpZiAoc2lnID09IFNJR0lOVCB8fCBzaWcgPT0gU0lHUVVJVCkKKwkJCXJhaXNlKHNpZyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gZXJyb3IoIlRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgZWRpdG9yICclcycuIiwKKwkJCQkJZWRpdG9yKTsKKworCQlpZiAocHJpbnRfd2FpdGluZ19mb3JfZWRpdG9yICYmICFpc190ZXJtaW5hbF9kdW1iKCkpCisJCQkvKgorCQkJICogRXJhc2UgdGhlIGVudGlyZSBsaW5lIHRvIGF2b2lkIHdhc3RpbmcgdGhlCisJCQkgKiB2ZXJ0aWNhbCBzcGFjZS4KKwkJCSAqLworCQkJdGVybV9jbGVhcl9saW5lKCk7CisJfQorCisJaWYgKCFidWZmZXIpCisJCXJldHVybiAwOworCWlmIChzdHJidWZfcmVhZF9maWxlKGJ1ZmZlciwgcGF0aCwgMCkgPCAwKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJyIsIHBhdGgpOworCXJldHVybiAwOworfQorCitpbnQgbGF1bmNoX2VkaXRvcihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIGNvbnN0IGNoYXIgKmNvbnN0ICplbnYpCit7CisJcmV0dXJuIGxhdW5jaF9zcGVjaWZpZWRfZWRpdG9yKGdpdF9lZGl0b3IoKSwgcGF0aCwgYnVmZmVyLCBlbnYpOworfQorCitpbnQgbGF1bmNoX3NlcXVlbmNlX2VkaXRvcihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsCisJCQkgICBjb25zdCBjaGFyICpjb25zdCAqZW52KQoreworCXJldHVybiBsYXVuY2hfc3BlY2lmaWVkX2VkaXRvcihnaXRfc2VxdWVuY2VfZWRpdG9yKCksIHBhdGgsIGJ1ZmZlciwgZW52KTsKK30KZGlmZiAtLWdpdCBhL2VudHJ5LmMgYi9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYjQ5MDMKLS0tIC9kZXYvbnVsbAorKysgYi9lbnRyeS5jCkBAIC0wLDAgKzEsNTQxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAic3RyZWFtaW5nLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJmc21vbml0b3IuaCIKKworc3RhdGljIHZvaWQgY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IGNoYXIgKnBhdGgsIGludCBwYXRoX2xlbiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlKQoreworCWNoYXIgKmJ1ZiA9IHhtYWxsb2N6KHBhdGhfbGVuKTsKKwlpbnQgbGVuID0gMDsKKworCXdoaWxlIChsZW4gPCBwYXRoX2xlbikgeworCQlkbyB7CisJCQlidWZbbGVuXSA9IHBhdGhbbGVuXTsKKwkJCWxlbisrOworCQl9IHdoaWxlIChsZW4gPCBwYXRoX2xlbiAmJiBwYXRoW2xlbl0gIT0gJy8nKTsKKwkJaWYgKGxlbiA+PSBwYXRoX2xlbikKKwkJCWJyZWFrOworCQlidWZbbGVuXSA9IDA7CisKKwkJLyoKKwkJICogRm9yICdjaGVja291dC1pbmRleCAtLXByZWZpeD08ZGlyPicsIDxkaXI+IGlzCisJCSAqIGFsbG93ZWQgdG8gYmUgYSBzeW1saW5rIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSwKKwkJICogYW5kIHdlIHNldCAnc3RhdGUtPmJhc2VfZGlyX2xlbicgYmVsb3csIHN1Y2ggdGhhdAorCQkgKiB3ZSB0ZXN0IHRoZSBwYXRoIGNvbXBvbmVudHMgb2YgdGhlIHByZWZpeCB3aXRoIHRoZQorCQkgKiBzdGF0KCkgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgbHN0YXQoKSBmdW5jdGlvbi4KKwkJICovCisJCWlmIChoYXNfZGlyc19vbmx5X3BhdGgoYnVmLCBsZW4sIHN0YXRlLT5iYXNlX2Rpcl9sZW4pKQorCQkJY29udGludWU7IC8qIG9rLCBpdCBpcyBhbHJlYWR5IGEgZGlyZWN0b3J5LiAqLworCisJCS8qCisJCSAqIElmIHRoaXMgbWtkaXIoKSB3b3VsZCBmYWlsLCBpdCBjb3VsZCBiZSB0aGF0IHRoZXJlCisJCSAqIGlzIGFscmVhZHkgYSBzeW1saW5rIG9yIHNvbWV0aGluZyBlbHNlIGV4aXN0cworCQkgKiB0aGVyZSwgdGhlcmVmb3JlIHdlIHRoZW4gdHJ5IHRvIHVubGluayBpdCBhbmQgdHJ5CisJCSAqIG9uZSBtb3JlIHRpbWUgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkuCisJCSAqLworCQlpZiAobWtkaXIoYnVmLCAwNzc3KSkgeworCQkJaWYgKGVycm5vID09IEVFWElTVCAmJiBzdGF0ZS0+Zm9yY2UgJiYKKwkJCSAgICAhdW5saW5rX29yX3dhcm4oYnVmKSAmJiAhbWtkaXIoYnVmLCAwNzc3KSkKKwkJCQljb250aW51ZTsKKwkJCWRpZV9lcnJubygiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgYXQgJyVzJyIsIGJ1Zik7CisJCX0KKwl9CisJZnJlZShidWYpOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfc3VidHJlZShzdHJ1Y3Qgc3RyYnVmICpwYXRoKQoreworCURJUiAqZGlyID0gb3BlbmRpcihwYXRoLT5idWYpOworCXN0cnVjdCBkaXJlbnQgKmRlOworCWludCBvcmlnbGVuID0gcGF0aC0+bGVuOworCisJaWYgKCFkaXIpCisJCWRpZV9lcnJubygiY2Fubm90IG9wZW5kaXIgJyVzJyIsIHBhdGgtPmJ1Zik7CisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQlpZiAoaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmJ1Zl9hZGRjaChwYXRoLCAnLycpOworCQlzdHJidWZfYWRkc3RyKHBhdGgsIGRlLT5kX25hbWUpOworCQlpZiAobHN0YXQocGF0aC0+YnVmLCAmc3QpKQorCQkJZGllX2Vycm5vKCJjYW5ub3QgbHN0YXQgJyVzJyIsIHBhdGgtPmJ1Zik7CisJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKQorCQkJcmVtb3ZlX3N1YnRyZWUocGF0aCk7CisJCWVsc2UgaWYgKHVubGluayhwYXRoLT5idWYpKQorCQkJZGllX2Vycm5vKCJjYW5ub3QgdW5saW5rICclcyciLCBwYXRoLT5idWYpOworCQlzdHJidWZfc2V0bGVuKHBhdGgsIG9yaWdsZW4pOworCX0KKwljbG9zZWRpcihkaXIpOworCWlmIChybWRpcihwYXRoLT5idWYpKQorCQlkaWVfZXJybm8oImNhbm5vdCBybWRpciAnJXMnIiwgcGF0aC0+YnVmKTsKK30KKworc3RhdGljIGludCBjcmVhdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwltb2RlID0gKG1vZGUgJiAwMTAwKSA/IDA3NzcgOiAwNjY2OworCXJldHVybiBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkICpyZWFkX2Jsb2JfZW50cnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdm9pZCAqYmxvYl9kYXRhID0gcmVhZF9vYmplY3RfZmlsZSgmY2UtPm9pZCwgJnR5cGUsIHNpemUpOworCisJaWYgKGJsb2JfZGF0YSkgeworCQlpZiAodHlwZSA9PSBPQkpfQkxPQikKKwkJCXJldHVybiBibG9iX2RhdGE7CisJCWZyZWUoYmxvYl9kYXRhKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9vdXRwdXRfZmQoY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHRvX3RlbXBmaWxlKQoreworCWludCBzeW1saW5rID0gKGNlLT5jZV9tb2RlICYgU19JRk1UKSAhPSBTX0lGUkVHOworCWlmICh0b190ZW1wZmlsZSkgeworCQl4c25wcmludGYocGF0aCwgVEVNUE9SQVJZX0ZJTEVOQU1FX0xFTkdUSCwgIiVzIiwKKwkJCSAgc3ltbGluayA/ICIubWVyZ2VfbGlua19YWFhYWFgiIDogIi5tZXJnZV9maWxlX1hYWFhYWCIpOworCQlyZXR1cm4gbWtzdGVtcChwYXRoKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gY3JlYXRlX2ZpbGUocGF0aCwgIXN5bWxpbmsgPyBjZS0+Y2VfbW9kZSA6IDA2NjYpOworCX0KK30KKworc3RhdGljIGludCBmc3RhdF9vdXRwdXQoaW50IGZkLCBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJLyogdXNlIGZzdGF0KCkgb25seSB3aGVuIHBhdGggPT0gY2UtPm5hbWUgKi8KKwlpZiAoZnN0YXRfaXNfcmVsaWFibGUoKSAmJgorCSAgICBzdGF0ZS0+cmVmcmVzaF9jYWNoZSAmJiAhc3RhdGUtPmJhc2VfZGlyX2xlbikgeworCQlmc3RhdChmZCwgc3QpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RyZWFtaW5nX3dyaXRlX2VudHJ5KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNoYXIgKnBhdGgsCisJCQkJIHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIsCisJCQkJIGNvbnN0IHN0cnVjdCBjaGVja291dCAqc3RhdGUsIGludCB0b190ZW1wZmlsZSwKKwkJCQkgaW50ICpmc3RhdF9kb25lLCBzdHJ1Y3Qgc3RhdCAqc3RhdGJ1ZikKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgZmQ7CisKKwlmZCA9IG9wZW5fb3V0cHV0X2ZkKHBhdGgsIGNlLCB0b190ZW1wZmlsZSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmVzdWx0IHw9IHN0cmVhbV9ibG9iX3RvX2ZkKGZkLCAmY2UtPm9pZCwgZmlsdGVyLCAxKTsKKwkqZnN0YXRfZG9uZSA9IGZzdGF0X291dHB1dChmZCwgc3RhdGUsIHN0YXRidWYpOworCXJlc3VsdCB8PSBjbG9zZShmZCk7CisKKwlpZiAocmVzdWx0KQorCQl1bmxpbmsocGF0aCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBlbmFibGVfZGVsYXllZF9jaGVja291dChzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlKQoreworCWlmICghc3RhdGUtPmRlbGF5ZWRfY2hlY2tvdXQpIHsKKwkJc3RhdGUtPmRlbGF5ZWRfY2hlY2tvdXQgPSB4bWFsbG9jKHNpemVvZigqc3RhdGUtPmRlbGF5ZWRfY2hlY2tvdXQpKTsKKwkJc3RhdGUtPmRlbGF5ZWRfY2hlY2tvdXQtPnN0YXRlID0gQ0VfQ0FOX0RFTEFZOworCQlzdHJpbmdfbGlzdF9pbml0KCZzdGF0ZS0+ZGVsYXllZF9jaGVja291dC0+ZmlsdGVycywgMCk7CisJCXN0cmluZ19saXN0X2luaXQoJnN0YXRlLT5kZWxheWVkX2NoZWNrb3V0LT5wYXRocywgMCk7CisJfQorfQorCitzdGF0aWMgaW50IHJlbW92ZV9hdmFpbGFibGVfcGF0aHMoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICphdmFpbGFibGVfcGF0aHMgPSBjYl9kYXRhOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICphdmFpbGFibGU7CisKKwlhdmFpbGFibGUgPSBzdHJpbmdfbGlzdF9sb29rdXAoYXZhaWxhYmxlX3BhdGhzLCBpdGVtLT5zdHJpbmcpOworCWlmIChhdmFpbGFibGUpCisJCWF2YWlsYWJsZS0+dXRpbCA9ICh2b2lkICopaXRlbS0+c3RyaW5nOworCXJldHVybiAhYXZhaWxhYmxlOworfQorCitpbnQgZmluaXNoX2RlbGF5ZWRfY2hlY2tvdXQoc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgaW50ICpucl9jaGVja291dHMpCit7CisJaW50IGVycnMgPSAwOworCXVuc2lnbmVkIGRlbGF5ZWRfb2JqZWN0X2NvdW50OworCW9mZl90IGZpbHRlcmVkX2J5dGVzID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqZmlsdGVyLCAqcGF0aDsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOworCXN0cnVjdCBkZWxheWVkX2NoZWNrb3V0ICpkY28gPSBzdGF0ZS0+ZGVsYXllZF9jaGVja291dDsKKworCWlmICghc3RhdGUtPmRlbGF5ZWRfY2hlY2tvdXQpCisJCXJldHVybiBlcnJzOworCisJZGNvLT5zdGF0ZSA9IENFX1JFVFJZOworCWRlbGF5ZWRfb2JqZWN0X2NvdW50ID0gZGNvLT5wYXRocy5ucjsKKwlwcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoXygiRmlsdGVyaW5nIGNvbnRlbnQiKSwgZGVsYXllZF9vYmplY3RfY291bnQpOworCXdoaWxlIChkY28tPmZpbHRlcnMubnIgPiAwKSB7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oZmlsdGVyLCAmZGNvLT5maWx0ZXJzKSB7CisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYXZhaWxhYmxlX3BhdGhzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGRlbGF5ZWRfb2JqZWN0X2NvdW50IC0gZGNvLT5wYXRocy5ucik7CisKKwkJCWlmICghYXN5bmNfcXVlcnlfYXZhaWxhYmxlX2Jsb2JzKGZpbHRlci0+c3RyaW5nLCAmYXZhaWxhYmxlX3BhdGhzKSkgeworCQkJCS8qIEZpbHRlciByZXBvcnRlZCBhbiBlcnJvciAqLworCQkJCWVycnMgPSAxOworCQkJCWZpbHRlci0+c3RyaW5nID0gIiI7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoYXZhaWxhYmxlX3BhdGhzLm5yIDw9IDApIHsKKwkJCQkvKgorCQkJCSAqIEZpbHRlciByZXNwb25kZWQgd2l0aCBubyBlbnRyaWVzLiBUaGF0IG1lYW5zCisJCQkJICogdGhlIGZpbHRlciBpcyBkb25lIGFuZCB3ZSBjYW4gcmVtb3ZlIHRoZQorCQkJCSAqIGZpbHRlciBmcm9tIHRoZSBsaXN0IChzZWUKKwkJCQkgKiAic3RyaW5nX2xpc3RfcmVtb3ZlX2VtcHR5X2l0ZW1zIiBjYWxsIGJlbG93KS4KKwkJCQkgKi8KKwkJCQlmaWx0ZXItPnN0cmluZyA9ICIiOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKgorCQkJICogSW4gZGNvLT5wYXRocyB3ZSBzdG9yZSBhIGxpc3Qgb2YgYWxsIGRlbGF5ZWQgcGF0aHMuCisJCQkgKiBUaGUgZmlsdGVyIGp1c3Qgc2VuZCB1cyBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhdGhzLgorCQkJICogUmVtb3ZlIHRoZW0gZnJvbSB0aGUgbGlzdC4KKwkJCSAqLworCQkJZmlsdGVyX3N0cmluZ19saXN0KCZkY28tPnBhdGhzLCAwLAorCQkJCSZyZW1vdmVfYXZhaWxhYmxlX3BhdGhzLCAmYXZhaWxhYmxlX3BhdGhzKTsKKworCQkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShwYXRoLCAmYXZhaWxhYmxlX3BhdGhzKSB7CisJCQkJc3RydWN0IGNhY2hlX2VudHJ5KiBjZTsKKworCQkJCWlmICghcGF0aC0+dXRpbCkgeworCQkJCQllcnJvcigiZXh0ZXJuYWwgZmlsdGVyICclcycgc2lnbmFsZWQgdGhhdCAnJXMnICIKKwkJCQkJICAgICAgImlzIG5vdyBhdmFpbGFibGUgYWx0aG91Z2ggaXQgaGFzIG5vdCBiZWVuICIKKwkJCQkJICAgICAgImRlbGF5ZWQgZWFybGllciIsCisJCQkJCSAgICAgIGZpbHRlci0+c3RyaW5nLCBwYXRoLT5zdHJpbmcpOworCQkJCQllcnJzIHw9IDE7CisKKwkJCQkJLyoKKwkJCQkJICogRG8gbm90IGFzayB0aGUgZmlsdGVyIGZvciBhdmFpbGFibGUgYmxvYnMsCisJCQkJCSAqIGFnYWluLCBhcyB0aGUgZmlsdGVyIGlzIGxpa2VseSBidWdneS4KKwkJCQkJICovCisJCQkJCWZpbHRlci0+c3RyaW5nID0gIiI7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQljZSA9IGluZGV4X2ZpbGVfZXhpc3RzKHN0YXRlLT5pc3RhdGUsIHBhdGgtPnN0cmluZywKKwkJCQkJCSAgICAgICBzdHJsZW4ocGF0aC0+c3RyaW5nKSwgMCk7CisJCQkJaWYgKGNlKSB7CisJCQkJCWVycnMgfD0gY2hlY2tvdXRfZW50cnkoY2UsIHN0YXRlLCBOVUxMLCBucl9jaGVja291dHMpOworCQkJCQlmaWx0ZXJlZF9ieXRlcyArPSBjZS0+Y2Vfc3RhdF9kYXRhLnNkX3NpemU7CisJCQkJCWRpc3BsYXlfdGhyb3VnaHB1dChwcm9ncmVzcywgZmlsdGVyZWRfYnl0ZXMpOworCQkJCX0gZWxzZQorCQkJCQllcnJzID0gMTsKKwkJCX0KKwkJfQorCQlzdHJpbmdfbGlzdF9yZW1vdmVfZW1wdHlfaXRlbXMoJmRjby0+ZmlsdGVycywgMCk7CisJfQorCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZGNvLT5maWx0ZXJzLCAwKTsKKworCS8qIEF0IHRoaXMgcG9pbnQgd2Ugc2hvdWxkIG5vdCBoYXZlIGFueSBkZWxheWVkIHBhdGhzIGFueW1vcmUuICovCisJZXJycyB8PSBkY28tPnBhdGhzLm5yOworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0ocGF0aCwgJmRjby0+cGF0aHMpIHsKKwkJZXJyb3IoIiclcycgd2FzIG5vdCBmaWx0ZXJlZCBwcm9wZXJseSIsIHBhdGgtPnN0cmluZyk7CisJfQorCXN0cmluZ19saXN0X2NsZWFyKCZkY28tPnBhdGhzLCAwKTsKKworCWZyZWUoZGNvKTsKKwlzdGF0ZS0+ZGVsYXllZF9jaGVja291dCA9IE5VTEw7CisKKwlyZXR1cm4gZXJyczsKK30KKworc3RhdGljIGludCB3cml0ZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkgICAgICAgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgaW50IHRvX3RlbXBmaWxlKQoreworCXVuc2lnbmVkIGludCBjZV9tb2RlX3NfaWZtdCA9IGNlLT5jZV9tb2RlICYgU19JRk1UOworCXN0cnVjdCBkZWxheWVkX2NoZWNrb3V0ICpkY28gPSBzdGF0ZS0+ZGVsYXllZF9jaGVja291dDsKKwlpbnQgZmQsIHJldCwgZnN0YXRfZG9uZSA9IDA7CisJY2hhciAqbmV3X2Jsb2I7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJc3NpemVfdCB3cm90ZTsKKwlzaXplX3QgbmV3c2l6ZSA9IDA7CisJc3RydWN0IHN0YXQgc3Q7CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViOworCXN0cnVjdCBjaGVja291dF9tZXRhZGF0YSBtZXRhOworCisJY2xvbmVfY2hlY2tvdXRfbWV0YWRhdGEoJm1ldGEsICZzdGF0ZS0+bWV0YSwgJmNlLT5vaWQpOworCisJaWYgKGNlX21vZGVfc19pZm10ID09IFNfSUZSRUcpIHsKKwkJc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciA9IGdldF9zdHJlYW1fZmlsdGVyKHN0YXRlLT5pc3RhdGUsIGNlLT5uYW1lLAorCQkJCQkJCQkgJmNlLT5vaWQpOworCQlpZiAoZmlsdGVyICYmCisJCSAgICAhc3RyZWFtaW5nX3dyaXRlX2VudHJ5KGNlLCBwYXRoLCBmaWx0ZXIsCisJCQkJCSAgIHN0YXRlLCB0b190ZW1wZmlsZSwKKwkJCQkJICAgJmZzdGF0X2RvbmUsICZzdCkpCisJCQlnb3RvIGZpbmlzaDsKKwl9CisKKwlzd2l0Y2ggKGNlX21vZGVfc19pZm10KSB7CisJY2FzZSBTX0lGTE5LOgorCQluZXdfYmxvYiA9IHJlYWRfYmxvYl9lbnRyeShjZSwgJnNpemUpOworCQlpZiAoIW5ld19ibG9iKQorCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gcmVhZCBzaGExIGZpbGUgb2YgJXMgKCVzKSIsCisJCQkJICAgICBwYXRoLCBvaWRfdG9faGV4KCZjZS0+b2lkKSk7CisKKwkJLyoKKwkJICogV2UgY2FuJ3QgbWFrZSBhIHJlYWwgc3ltbGluazsgd3JpdGUgb3V0IGEgcmVndWxhciBmaWxlIGVudHJ5CisJCSAqIHdpdGggdGhlIHN5bWxpbmsgZGVzdGluYXRpb24gYXMgaXRzIGNvbnRlbnRzLgorCQkgKi8KKwkJaWYgKCFoYXNfc3ltbGlua3MgfHwgdG9fdGVtcGZpbGUpCisJCQlnb3RvIHdyaXRlX2ZpbGVfZW50cnk7CisKKwkJcmV0ID0gc3ltbGluayhuZXdfYmxvYiwgcGF0aCk7CisJCWZyZWUobmV3X2Jsb2IpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIGVycm9yX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIHN5bWxpbmsgJXMiLCBwYXRoKTsKKwkJYnJlYWs7CisKKwljYXNlIFNfSUZSRUc6CisJCS8qCisJCSAqIFdlIGRvIG5vdCBzZW5kIHRoZSBibG9iIGluIGNhc2Ugb2YgYSByZXRyeSwgc28gZG8gbm90CisJCSAqIGJvdGhlciByZWFkaW5nIGl0IGF0IGFsbC4KKwkJICovCisJCWlmIChkY28gJiYgZGNvLT5zdGF0ZSA9PSBDRV9SRVRSWSkgeworCQkJbmV3X2Jsb2IgPSBOVUxMOworCQkJc2l6ZSA9IDA7CisJCX0gZWxzZSB7CisJCQluZXdfYmxvYiA9IHJlYWRfYmxvYl9lbnRyeShjZSwgJnNpemUpOworCQkJaWYgKCFuZXdfYmxvYikKKwkJCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byByZWFkIHNoYTEgZmlsZSBvZiAlcyAoJXMpIiwKKwkJCQkJICAgICBwYXRoLCBvaWRfdG9faGV4KCZjZS0+b2lkKSk7CisJCX0KKworCQkvKgorCQkgKiBDb252ZXJ0IGZyb20gZ2l0IGludGVybmFsIGZvcm1hdCB0byB3b3JraW5nIHRyZWUgZm9ybWF0CisJCSAqLworCQlpZiAoZGNvICYmIGRjby0+c3RhdGUgIT0gQ0VfTk9fREVMQVkpIHsKKwkJCXJldCA9IGFzeW5jX2NvbnZlcnRfdG9fd29ya2luZ190cmVlKHN0YXRlLT5pc3RhdGUsIGNlLT5uYW1lLCBuZXdfYmxvYiwKKwkJCQkJCQkgICAgc2l6ZSwgJmJ1ZiwgJm1ldGEsIGRjbyk7CisJCQlpZiAocmV0ICYmIHN0cmluZ19saXN0X2hhc19zdHJpbmcoJmRjby0+cGF0aHMsIGNlLT5uYW1lKSkgeworCQkJCWZyZWUobmV3X2Jsb2IpOworCQkJCWdvdG8gZGVsYXllZDsKKwkJCX0KKwkJfSBlbHNlCisJCQlyZXQgPSBjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShzdGF0ZS0+aXN0YXRlLCBjZS0+bmFtZSwgbmV3X2Jsb2IsIHNpemUsICZidWYsICZtZXRhKTsKKworCQlpZiAocmV0KSB7CisJCQlmcmVlKG5ld19ibG9iKTsKKwkJCW5ld19ibG9iID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmbmV3c2l6ZSk7CisJCQlzaXplID0gbmV3c2l6ZTsKKwkJfQorCQkvKgorCQkgKiBObyAiZWxzZSIgaGVyZSBhcyBlcnJvcnMgZnJvbSBjb252ZXJ0IGFyZSBPSyBhdCB0aGlzCisJCSAqIHBvaW50LiBJZiB0aGUgZXJyb3Igd291bGQgaGF2ZSBiZWVuIGZhdGFsIChlLmcuCisJCSAqIGZpbHRlciBpcyByZXF1aXJlZCksIHRoZW4gd2Ugd291bGQgaGF2ZSBkaWVkIGFscmVhZHkuCisJCSAqLworCisJd3JpdGVfZmlsZV9lbnRyeToKKwkJZmQgPSBvcGVuX291dHB1dF9mZChwYXRoLCBjZSwgdG9fdGVtcGZpbGUpOworCQlpZiAoZmQgPCAwKSB7CisJCQlmcmVlKG5ld19ibG9iKTsKKwkJCXJldHVybiBlcnJvcl9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSBmaWxlICVzIiwgcGF0aCk7CisJCX0KKworCQl3cm90ZSA9IHdyaXRlX2luX2Z1bGwoZmQsIG5ld19ibG9iLCBzaXplKTsKKwkJaWYgKCF0b190ZW1wZmlsZSkKKwkJCWZzdGF0X2RvbmUgPSBmc3RhdF9vdXRwdXQoZmQsIHN0YXRlLCAmc3QpOworCQljbG9zZShmZCk7CisJCWZyZWUobmV3X2Jsb2IpOworCQlpZiAod3JvdGUgPCAwKQorCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIsIHBhdGgpOworCQlicmVhazsKKworCWNhc2UgU19JRkdJVExJTks6CisJCWlmICh0b190ZW1wZmlsZSkKKwkJCXJldHVybiBlcnJvcigiY2Fubm90IGNyZWF0ZSB0ZW1wb3Jhcnkgc3VibW9kdWxlICVzIiwgcGF0aCk7CisJCWlmIChta2RpcihwYXRoLCAwNzc3KSA8IDApCisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBjcmVhdGUgc3VibW9kdWxlIGRpcmVjdG9yeSAlcyIsIHBhdGgpOworCQlzdWIgPSBzdWJtb2R1bGVfZnJvbV9jZShjZSk7CisJCWlmIChzdWIpCisJCQlyZXR1cm4gc3VibW9kdWxlX21vdmVfaGVhZChjZS0+bmFtZSwKKwkJCQlOVUxMLCBvaWRfdG9faGV4KCZjZS0+b2lkKSwKKwkJCQlzdGF0ZS0+Zm9yY2UgPyBTVUJNT0RVTEVfTU9WRV9IRUFEX0ZPUkNFIDogMCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIGVycm9yKCJ1bmtub3duIGZpbGUgbW9kZSBmb3IgJXMgaW4gaW5kZXgiLCBwYXRoKTsKKwl9CisKK2ZpbmlzaDoKKwlpZiAoc3RhdGUtPnJlZnJlc2hfY2FjaGUpIHsKKwkJYXNzZXJ0KHN0YXRlLT5pc3RhdGUpOworCQlpZiAoIWZzdGF0X2RvbmUpCisJCQlpZiAobHN0YXQoY2UtPm5hbWUsICZzdCkgPCAwKQorCQkJCXJldHVybiBlcnJvcl9lcnJubygidW5hYmxlIHRvIHN0YXQganVzdC13cml0dGVuIGZpbGUgJXMiLAorCQkJCQkJICAgY2UtPm5hbWUpOworCQlmaWxsX3N0YXRfY2FjaGVfaW5mbyhzdGF0ZS0+aXN0YXRlLCBjZSwgJnN0KTsKKwkJY2UtPmNlX2ZsYWdzIHw9IENFX1VQREFURV9JTl9CQVNFOworCQltYXJrX2ZzbW9uaXRvcl9pbnZhbGlkKHN0YXRlLT5pc3RhdGUsIGNlKTsKKwkJc3RhdGUtPmlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCB8PSBDRV9FTlRSWV9DSEFOR0VEOworCX0KK2RlbGF5ZWQ6CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGlzIGxpa2UgJ2xzdGF0KCknLCBleGNlcHQgaXQgcmVmdXNlcyB0byBmb2xsb3cgc3ltbGlua3MKKyAqIGluIHRoZSBwYXRoLCBhZnRlciBza2lwcGluZyAic2tpcGxlbiIuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfcGF0aChjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCBza2lwbGVuKQoreworCWNvbnN0IGNoYXIgKnNsYXNoID0gcGF0aCArIGxlbjsKKworCXdoaWxlIChwYXRoIDwgc2xhc2ggJiYgKnNsYXNoICE9ICcvJykKKwkJc2xhc2gtLTsKKwlpZiAoIWhhc19kaXJzX29ubHlfcGF0aChwYXRoLCBzbGFzaCAtIHBhdGgsIHNraXBsZW4pKSB7CisJCWVycm5vID0gRU5PRU5UOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBsc3RhdChwYXRoLCBzdCk7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfY29sbGlkaW5nX2VudHJpZXMoY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwKKwkJCQkgICBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJaW50IGksIHRydXN0X2lubyA9IGNoZWNrX3N0YXQ7CisKKyNpZiBkZWZpbmVkKEdJVF9XSU5ET1dTX05BVElWRSkgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorCXRydXN0X2lubyA9IDA7CisjZW5kaWYKKworCWNlLT5jZV9mbGFncyB8PSBDRV9NQVRDSEVEOworCisJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5pc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpkdXAgPSBzdGF0ZS0+aXN0YXRlLT5jYWNoZVtpXTsKKworCQlpZiAoZHVwID09IGNlKQorCQkJYnJlYWs7CisKKwkJaWYgKGR1cC0+Y2VfZmxhZ3MgJiAoQ0VfTUFUQ0hFRCB8IENFX1ZBTElEIHwgQ0VfU0tJUF9XT1JLVFJFRSkpCisJCQljb250aW51ZTsKKworCQlpZiAoKHRydXN0X2lubyAmJiAhbWF0Y2hfc3RhdF9kYXRhKCZkdXAtPmNlX3N0YXRfZGF0YSwgc3QpKSB8fAorCQkgICAgKCF0cnVzdF9pbm8gJiYgIWZzcGF0aGNtcChjZS0+bmFtZSwgZHVwLT5uYW1lKSkpIHsKKwkJCWR1cC0+Y2VfZmxhZ3MgfD0gQ0VfTUFUQ0hFRDsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogV3JpdGUgdGhlIGNvbnRlbnRzIGZyb20gY2Ugb3V0IHRvIHRoZSB3b3JraW5nIHRyZWUuCisgKgorICogV2hlbiB0b3BhdGhbXSBpcyBub3QgTlVMTCwgaW5zdGVhZCBvZiB3cml0aW5nIHRvIHRoZSB3b3JraW5nIHRyZWUKKyAqIGZpbGUgbmFtZWQgYnkgY2UsIGEgdGVtcG9yYXJ5IGZpbGUgaXMgY3JlYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGFuZAorICogaXRzIG5hbWUgaXMgcmV0dXJuZWQgaW4gdG9wYXRoW10sIHdoaWNoIG11c3QgYmUgYWJsZSB0byBob2xkIGF0CisgKiBsZWFzdCBURU1QT1JBUllfRklMRU5BTUVfTEVOR1RIIGJ5dGVzIGxvbmcuCisgKi8KK2ludCBjaGVja291dF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLAorCQkgICBjaGFyICp0b3BhdGgsIGludCAqbnJfY2hlY2tvdXRzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9XVF9SRU1PVkUpIHsKKwkJaWYgKHRvcGF0aCkKKwkJCS8qCisJCQkgKiBObyBjb250ZW50IGFuZCB0aHVzIG5vIHBhdGggdG8gY3JlYXRlLCBzbyB3ZSBoYXZlCisJCQkgKiBubyBwYXRobmFtZSB0byByZXR1cm4uCisJCQkgKi8KKwkJCUJVRygiQ2FuJ3QgcmVtb3ZlIGVudHJ5IHRvIGEgcGF0aCIpOworCQl1bmxpbmtfZW50cnkoY2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodG9wYXRoKQorCQlyZXR1cm4gd3JpdGVfZW50cnkoY2UsIHRvcGF0aCwgc3RhdGUsIDEpOworCisJc3RyYnVmX3Jlc2V0KCZwYXRoKTsKKwlzdHJidWZfYWRkKCZwYXRoLCBzdGF0ZS0+YmFzZV9kaXIsIHN0YXRlLT5iYXNlX2Rpcl9sZW4pOworCXN0cmJ1Zl9hZGQoJnBhdGgsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSk7CisKKwlpZiAoIWNoZWNrX3BhdGgocGF0aC5idWYsIHBhdGgubGVuLCAmc3QsIHN0YXRlLT5iYXNlX2Rpcl9sZW4pKSB7CisJCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKwkJdW5zaWduZWQgY2hhbmdlZCA9IGllX21hdGNoX3N0YXQoc3RhdGUtPmlzdGF0ZSwgY2UsICZzdCwKKwkJCQkJCSBDRV9NQVRDSF9JR05PUkVfVkFMSUQgfCBDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRSk7CisJCS8qCisJCSAqIE5lZWRzIHRvIGJlIGNoZWNrZWQgYmVmb3JlICFjaGFuZ2VkIHJldHVybnMgZWFybHksCisJCSAqIGFzIHRoZSBwb3NzaWJseSBlbXB0eSBkaXJlY3Rvcnkgd2FzIG5vdCBjaGFuZ2VkCisJCSAqLworCQlzdWIgPSBzdWJtb2R1bGVfZnJvbV9jZShjZSk7CisJCWlmIChzdWIpIHsKKwkJCWludCBlcnI7CisJCQlpZiAoIWlzX3N1Ym1vZHVsZV9wb3B1bGF0ZWRfZ2VudGx5KGNlLT5uYW1lLCAmZXJyKSkgeworCQkJCXN0cnVjdCBzdGF0IHNiOworCQkJCWlmIChsc3RhdChjZS0+bmFtZSwgJnNiKSkKKwkJCQkJZGllKF8oImNvdWxkIG5vdCBzdGF0IGZpbGUgJyVzJyIpLCBjZS0+bmFtZSk7CisJCQkJaWYgKCEoc3Quc3RfbW9kZSAmIFNfSUZESVIpKQorCQkJCQl1bmxpbmtfb3Jfd2FybihjZS0+bmFtZSk7CisKKwkJCQlyZXR1cm4gc3VibW9kdWxlX21vdmVfaGVhZChjZS0+bmFtZSwKKwkJCQkJTlVMTCwgb2lkX3RvX2hleCgmY2UtPm9pZCksIDApOworCQkJfSBlbHNlCisJCQkJcmV0dXJuIHN1Ym1vZHVsZV9tb3ZlX2hlYWQoY2UtPm5hbWUsCisJCQkJCSJIRUFEIiwgb2lkX3RvX2hleCgmY2UtPm9pZCksCisJCQkJCXN0YXRlLT5mb3JjZSA/IFNVQk1PRFVMRV9NT1ZFX0hFQURfRk9SQ0UgOiAwKTsKKwkJfQorCisJCWlmICghY2hhbmdlZCkKKwkJCXJldHVybiAwOworCQlpZiAoIXN0YXRlLT5mb3JjZSkgeworCQkJaWYgKCFzdGF0ZS0+cXVpZXQpCisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSIlcyBhbHJlYWR5IGV4aXN0cywgbm8gY2hlY2tvdXRcbiIsCisJCQkJCXBhdGguYnVmKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChzdGF0ZS0+Y2xvbmUpCisJCQltYXJrX2NvbGxpZGluZ19lbnRyaWVzKHN0YXRlLCBjZSwgJnN0KTsKKworCQkvKgorCQkgKiBXZSB1bmxpbmsgdGhlIG9sZCBmaWxlLCB0byBnZXQgdGhlIG5ldyBvbmUgd2l0aCB0aGUKKwkJICogcmlnaHQgcGVybWlzc2lvbnMgKGluY2x1ZGluZyB1bWFzaywgd2hpY2ggaXMgbmFzdHkKKwkJICogdG8gZW11bGF0ZSBieSBoYW5kIC0gbXVjaCBlYXNpZXIgdG8gbGV0IHRoZSBzeXN0ZW0KKwkJICoganVzdCBkbyB0aGUgcmlnaHQgdGhpbmcpCisJCSAqLworCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJLyogSWYgaXQgaXMgYSBnaXRsaW5rLCBsZWF2ZSBpdCBhbG9uZSEgKi8KKwkJCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoIXN0YXRlLT5mb3JjZSkKKwkJCQlyZXR1cm4gZXJyb3IoIiVzIGlzIGEgZGlyZWN0b3J5IiwgcGF0aC5idWYpOworCQkJcmVtb3ZlX3N1YnRyZWUoJnBhdGgpOworCQl9IGVsc2UgaWYgKHVubGluayhwYXRoLmJ1ZikpCisJCQlyZXR1cm4gZXJyb3JfZXJybm8oInVuYWJsZSB0byB1bmxpbmsgb2xkICclcyciLCBwYXRoLmJ1Zik7CisJfSBlbHNlIGlmIChzdGF0ZS0+bm90X25ldykKKwkJcmV0dXJuIDA7CisKKwljcmVhdGVfZGlyZWN0b3JpZXMocGF0aC5idWYsIHBhdGgubGVuLCBzdGF0ZSk7CisJaWYgKG5yX2NoZWNrb3V0cykKKwkJKCpucl9jaGVja291dHMpKys7CisJcmV0dXJuIHdyaXRlX2VudHJ5KGNlLCBwYXRoLmJ1Ziwgc3RhdGUsIDApOworfQorCit2b2lkIHVubGlua19lbnRyeShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YiA9IHN1Ym1vZHVsZV9mcm9tX2NlKGNlKTsKKwlpZiAoc3ViKSB7CisJCS8qIHN0YXRlLmZvcmNlIGlzIHNldCBhdCB0aGUgY2FsbGVyLiAqLworCQlzdWJtb2R1bGVfbW92ZV9oZWFkKGNlLT5uYW1lLCAiSEVBRCIsIE5VTEwsCisJCQkJICAgIFNVQk1PRFVMRV9NT1ZFX0hFQURfRk9SQ0UpOworCX0KKwlpZiAoIWNoZWNrX2xlYWRpbmdfcGF0aChjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpKQorCQlyZXR1cm47CisJaWYgKHJlbW92ZV9vcl93YXJuKGNlLT5jZV9tb2RlLCBjZS0+bmFtZSkpCisJCXJldHVybjsKKwlzY2hlZHVsZV9kaXJfZm9yX3JlbW92YWwoY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKTsKK30KZGlmZiAtLWdpdCBhL2Vudmlyb25tZW50LmMgYi9lbnZpcm9ubWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhY2EwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9lbnZpcm9ubWVudC5jCkBAIC0wLDAgKzEsNDI1IEBACisvKgorICogV2UgcHV0IGFsbCB0aGUgZ2l0IGNvbmZpZyB2YXJpYWJsZXMgaW4gdGhpcyBzYW1lIG9iamVjdAorICogZmlsZSwgc28gdGhhdCBwcm9ncmFtcyBjYW4gbGluayBhZ2FpbnN0IHRoZSBjb25maWcgcGFyc2VyCisgKiB3aXRob3V0IGhhdmluZyB0byBsaW5rIGFnYWluc3QgYWxsIHRoZSByZXN0IG9mIGdpdC4KKyAqCisgKiBJbiBwYXJ0aWN1bGFyLCBubyBuZWVkIHRvIGJyaW5nIGluIGxpYnogZXRjIHVubGVzcyBuZWVkZWQsCisgKiBldmVuIGlmIHlvdSBtaWdodCB3YW50IHRvIGtub3cgd2hlcmUgdGhlIGdpdCBkaXJlY3RvcnkgZXRjCisgKiBhcmUuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZm10LW1lcmdlLW1zZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJjaGRpci1ub3RpZnkuaCIKKyNpbmNsdWRlICJzaGFsbG93LmgiCisKK2ludCB0cnVzdF9leGVjdXRhYmxlX2JpdCA9IDE7CitpbnQgdHJ1c3RfY3RpbWUgPSAxOworaW50IGNoZWNrX3N0YXQgPSAxOworaW50IGhhc19zeW1saW5rcyA9IDE7CitpbnQgbWluaW11bV9hYmJyZXYgPSA0LCBkZWZhdWx0X2FiYnJldiA9IC0xOworaW50IGlnbm9yZV9jYXNlOworaW50IGFzc3VtZV91bmNoYW5nZWQ7CitpbnQgcHJlZmVyX3N5bWxpbmtfcmVmczsKK2ludCBpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID0gLTE7IC8qIHVuc3BlY2lmaWVkICovCitpbnQgd2Fybl9hbWJpZ3VvdXNfcmVmcyA9IDE7CitpbnQgd2Fybl9vbl9vYmplY3RfcmVmbmFtZV9hbWJpZ3VpdHkgPSAxOworaW50IHJlZl9wYXJhbm9pYSA9IC0xOworaW50IHJlcG9zaXRvcnlfZm9ybWF0X3ByZWNpb3VzX29iamVjdHM7CitpbnQgcmVwb3NpdG9yeV9mb3JtYXRfd29ya3RyZWVfY29uZmlnOworY29uc3QgY2hhciAqZ2l0X2NvbW1pdF9lbmNvZGluZzsKK2NvbnN0IGNoYXIgKmdpdF9sb2dfb3V0cHV0X2VuY29kaW5nOworY29uc3QgY2hhciAqYXBwbHlfZGVmYXVsdF93aGl0ZXNwYWNlOworY29uc3QgY2hhciAqYXBwbHlfZGVmYXVsdF9pZ25vcmV3aGl0ZXNwYWNlOworY29uc3QgY2hhciAqZ2l0X2F0dHJpYnV0ZXNfZmlsZTsKK2NvbnN0IGNoYXIgKmdpdF9ob29rc19wYXRoOworaW50IHpsaWJfY29tcHJlc3Npb25fbGV2ZWwgPSBaX0JFU1RfU1BFRUQ7CitpbnQgY29yZV9jb21wcmVzc2lvbl9sZXZlbDsKK2ludCBwYWNrX2NvbXByZXNzaW9uX2xldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworaW50IGZzeW5jX29iamVjdF9maWxlczsKK3NpemVfdCBwYWNrZWRfZ2l0X3dpbmRvd19zaXplID0gREVGQVVMVF9QQUNLRURfR0lUX1dJTkRPV19TSVpFOworc2l6ZV90IHBhY2tlZF9naXRfbGltaXQgPSBERUZBVUxUX1BBQ0tFRF9HSVRfTElNSVQ7CitzaXplX3QgZGVsdGFfYmFzZV9jYWNoZV9saW1pdCA9IDk2ICogMTAyNCAqIDEwMjQ7Cit1bnNpZ25lZCBsb25nIGJpZ19maWxlX3RocmVzaG9sZCA9IDUxMiAqIDEwMjQgKiAxMDI0OworaW50IHBhZ2VyX3VzZV9jb2xvciA9IDE7Citjb25zdCBjaGFyICplZGl0b3JfcHJvZ3JhbTsKK2NvbnN0IGNoYXIgKmFza3Bhc3NfcHJvZ3JhbTsKK2NvbnN0IGNoYXIgKmV4Y2x1ZGVzX2ZpbGU7CitlbnVtIGF1dG9fY3JsZiBhdXRvX2NybGYgPSBBVVRPX0NSTEZfRkFMU0U7CitpbnQgcmVhZF9yZXBsYWNlX3JlZnMgPSAxOworY2hhciAqZ2l0X3JlcGxhY2VfcmVmX2Jhc2U7CitlbnVtIGVvbCBjb3JlX2VvbCA9IEVPTF9VTlNFVDsKK2ludCBnbG9iYWxfY29udl9mbGFnc19lb2wgPSBDT05WX0VPTF9STkRUUlBfV0FSTjsKK2NoYXIgKmNoZWNrX3JvdW5kdHJpcF9lbmNvZGluZyA9ICJTSElGVC1KSVMiOwordW5zaWduZWQgd2hpdGVzcGFjZV9ydWxlX2NmZyA9IFdTX0RFRkFVTFRfUlVMRTsKK2VudW0gYnJhbmNoX3RyYWNrIGdpdF9icmFuY2hfdHJhY2sgPSBCUkFOQ0hfVFJBQ0tfUkVNT1RFOworZW51bSByZWJhc2Vfc2V0dXBfdHlwZSBhdXRvcmViYXNlID0gQVVUT1JFQkFTRV9ORVZFUjsKK2VudW0gcHVzaF9kZWZhdWx0X3R5cGUgcHVzaF9kZWZhdWx0ID0gUFVTSF9ERUZBVUxUX1VOU1BFQ0lGSUVEOworI2lmbmRlZiBPQkpFQ1RfQ1JFQVRJT05fTU9ERQorI2RlZmluZSBPQkpFQ1RfQ1JFQVRJT05fTU9ERSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19IQVJETElOS1MKKyNlbmRpZgorZW51bSBvYmplY3RfY3JlYXRpb25fbW9kZSBvYmplY3RfY3JlYXRpb25fbW9kZSA9IE9CSkVDVF9DUkVBVElPTl9NT0RFOworY2hhciAqbm90ZXNfcmVmX25hbWU7CitpbnQgZ3JhZnRzX3JlcGxhY2VfcGFyZW50cyA9IDE7CitpbnQgY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQ7CitpbnQgY29yZV9zcGFyc2VfY2hlY2tvdXRfY29uZTsKK2ludCBtZXJnZV9sb2dfY29uZmlnID0gLTE7CitpbnQgcHJlY29tcG9zZWRfdW5pY29kZSA9IC0xOyAvKiBzZWUgcHJvYmVfdXRmOF9wYXRobmFtZV9jb21wb3NpdGlvbigpICovCit1bnNpZ25lZCBsb25nIHBhY2tfc2l6ZV9saW1pdF9jZmc7CitlbnVtIGxvZ19yZWZzX2NvbmZpZyBsb2dfYWxsX3JlZl91cGRhdGVzID0gTE9HX1JFRlNfVU5TRVQ7CisKKyNpZm5kZWYgUFJPVEVDVF9IRlNfREVGQVVMVAorI2RlZmluZSBQUk9URUNUX0hGU19ERUZBVUxUIDAKKyNlbmRpZgoraW50IHByb3RlY3RfaGZzID0gUFJPVEVDVF9IRlNfREVGQVVMVDsKKworI2lmbmRlZiBQUk9URUNUX05URlNfREVGQVVMVAorI2RlZmluZSBQUk9URUNUX05URlNfREVGQVVMVCAxCisjZW5kaWYKK2ludCBwcm90ZWN0X250ZnMgPSBQUk9URUNUX05URlNfREVGQVVMVDsKK2NvbnN0IGNoYXIgKmNvcmVfZnNtb25pdG9yOworCisvKgorICogVGhlIGNoYXJhY3RlciB0aGF0IGJlZ2lucyBhIGNvbW1lbnRlZCBsaW5lIGluIHVzZXItZWRpdGFibGUgZmlsZQorICogdGhhdCBpcyBzdWJqZWN0IHRvIHN0cmlwc3BhY2UuCisgKi8KK2NoYXIgY29tbWVudF9saW5lX2NoYXIgPSAnIyc7CitpbnQgYXV0b19jb21tZW50X2xpbmVfY2hhcjsKKworLyogUGFyYWxsZWwgaW5kZXggc3RhdCBkYXRhIHByZWxvYWQ/ICovCitpbnQgY29yZV9wcmVsb2FkX2luZGV4ID0gMTsKKworLyoKKyAqIFRoaXMgaXMgYSBoYWNrIGZvciB0ZXN0IHByb2dyYW1zIGxpa2UgdGVzdC1kdW1wLXVudHJhY2tlZC1jYWNoZSB0bworICogZW5zdXJlIHRoYXQgdGhleSBkbyBub3QgbW9kaWZ5IHRoZSB1bnRyYWNrZWQgY2FjaGUgd2hlbiByZWFkaW5nIGl0LgorICogRG8gbm90IHVzZSBpdCBvdGhlcndpc2UhCisgKi8KK2ludCBpZ25vcmVfdW50cmFja2VkX2NhY2hlX2NvbmZpZzsKKworLyogVGhpcyBpcyBzZXQgYnkgc2V0dXBfZ2l0X2Rpcl9nZW50bHkoKSBhbmQvb3IgZ2l0X2RlZmF1bHRfY29uZmlnKCkgKi8KK2NoYXIgKmdpdF93b3JrX3RyZWVfY2ZnOworCitzdGF0aWMgY2hhciAqZ2l0X25hbWVzcGFjZTsKKworc3RhdGljIGNoYXIgKnN1cGVyX3ByZWZpeDsKKworLyoKKyAqIFJlcG9zaXRvcnktbG9jYWwgR0lUXyogZW52aXJvbm1lbnQgdmFyaWFibGVzOyBzZWUgY2FjaGUuaCBmb3IgZGV0YWlscy4KKyAqLworY29uc3QgY2hhciAqIGNvbnN0IGxvY2FsX3JlcG9fZW52W10gPSB7CisJQUxURVJOQVRFX0RCX0VOVklST05NRU5ULAorCUNPTkZJR19FTlZJUk9OTUVOVCwKKwlDT05GSUdfREFUQV9FTlZJUk9OTUVOVCwKKwlEQl9FTlZJUk9OTUVOVCwKKwlHSVRfRElSX0VOVklST05NRU5ULAorCUdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsCisJR0lUX0lNUExJQ0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCwKKwlHUkFGVF9FTlZJUk9OTUVOVCwKKwlJTkRFWF9FTlZJUk9OTUVOVCwKKwlOT19SRVBMQUNFX09CSkVDVFNfRU5WSVJPTk1FTlQsCisJR0lUX1JFUExBQ0VfUkVGX0JBU0VfRU5WSVJPTk1FTlQsCisJR0lUX1BSRUZJWF9FTlZJUk9OTUVOVCwKKwlHSVRfU1VQRVJfUFJFRklYX0VOVklST05NRU5ULAorCUdJVF9TSEFMTE9XX0ZJTEVfRU5WSVJPTk1FTlQsCisJR0lUX0NPTU1PTl9ESVJfRU5WSVJPTk1FTlQsCisJTlVMTAorfTsKKworc3RhdGljIGNoYXIgKmV4cGFuZF9uYW1lc3BhY2UoY29uc3QgY2hhciAqcmF3X25hbWVzcGFjZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgKipjb21wb25lbnRzLCAqKmM7CisKKwlpZiAoIXJhd19uYW1lc3BhY2UgfHwgISpyYXdfbmFtZXNwYWNlKQorCQlyZXR1cm4geHN0cmR1cCgiIik7CisKKwlzdHJidWZfYWRkc3RyKCZidWYsIHJhd19uYW1lc3BhY2UpOworCWNvbXBvbmVudHMgPSBzdHJidWZfc3BsaXQoJmJ1ZiwgJy8nKTsKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJZm9yIChjID0gY29tcG9uZW50czsgKmM7IGMrKykKKwkJaWYgKHN0cmNtcCgoKmMpLT5idWYsICIvIikgIT0gMCkKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICJyZWZzL25hbWVzcGFjZXMvJXMiLCAoKmMpLT5idWYpOworCXN0cmJ1Zl9saXN0X2ZyZWUoY29tcG9uZW50cyk7CisJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KGJ1Zi5idWYsIDApKQorCQlkaWUoXygiYmFkIGdpdCBuYW1lc3BhY2UgcGF0aCBcIiVzXCIiKSwgcmF3X25hbWVzcGFjZSk7CisJc3RyYnVmX2FkZGNoKCZidWYsICcvJyk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKKy8qCisgKiBXcmFwcGVyIG9mIGdldGVudigpIHRoYXQgcmV0dXJucyBhIHN0cmR1cCB2YWx1ZS4gVGhpcyB2YWx1ZSBpcyBrZXB0CisgKiBpbiBhcmd2IHRvIGJlIGZyZWVkIGxhdGVyLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0ZW52X3NhZmUoc3RydWN0IGFyZ3ZfYXJyYXkgKmFyZ3YsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY29uc3QgY2hhciAqdmFsdWUgPSBnZXRlbnYobmFtZSk7CisKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gTlVMTDsKKworCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCB2YWx1ZSk7CisJcmV0dXJuIGFyZ3YtPmFyZ3ZbYXJndi0+YXJnYyAtIDFdOworfQorCit2b2lkIHNldHVwX2dpdF9lbnYoY29uc3QgY2hhciAqZ2l0X2RpcikKK3sKKwljb25zdCBjaGFyICpzaGFsbG93X2ZpbGU7CisJY29uc3QgY2hhciAqcmVwbGFjZV9yZWZfYmFzZTsKKwlzdHJ1Y3Qgc2V0X2dpdGRpcl9hcmdzIGFyZ3MgPSB7IE5VTEwgfTsKKwlzdHJ1Y3QgYXJndl9hcnJheSB0b19mcmVlID0gQVJHVl9BUlJBWV9JTklUOworCisJYXJncy5jb21tb25kaXIgPSBnZXRlbnZfc2FmZSgmdG9fZnJlZSwgR0lUX0NPTU1PTl9ESVJfRU5WSVJPTk1FTlQpOworCWFyZ3Mub2JqZWN0X2RpciA9IGdldGVudl9zYWZlKCZ0b19mcmVlLCBEQl9FTlZJUk9OTUVOVCk7CisJYXJncy5ncmFmdF9maWxlID0gZ2V0ZW52X3NhZmUoJnRvX2ZyZWUsIEdSQUZUX0VOVklST05NRU5UKTsKKwlhcmdzLmluZGV4X2ZpbGUgPSBnZXRlbnZfc2FmZSgmdG9fZnJlZSwgSU5ERVhfRU5WSVJPTk1FTlQpOworCWFyZ3MuYWx0ZXJuYXRlX2RiID0gZ2V0ZW52X3NhZmUoJnRvX2ZyZWUsIEFMVEVSTkFURV9EQl9FTlZJUk9OTUVOVCk7CisJcmVwb19zZXRfZ2l0ZGlyKHRoZV9yZXBvc2l0b3J5LCBnaXRfZGlyLCAmYXJncyk7CisJYXJndl9hcnJheV9jbGVhcigmdG9fZnJlZSk7CisKKwlpZiAoZ2V0ZW52KE5PX1JFUExBQ0VfT0JKRUNUU19FTlZJUk9OTUVOVCkpCisJCXJlYWRfcmVwbGFjZV9yZWZzID0gMDsKKwlyZXBsYWNlX3JlZl9iYXNlID0gZ2V0ZW52KEdJVF9SRVBMQUNFX1JFRl9CQVNFX0VOVklST05NRU5UKTsKKwlmcmVlKGdpdF9yZXBsYWNlX3JlZl9iYXNlKTsKKwlnaXRfcmVwbGFjZV9yZWZfYmFzZSA9IHhzdHJkdXAocmVwbGFjZV9yZWZfYmFzZSA/IHJlcGxhY2VfcmVmX2Jhc2UKKwkJCQkJCQkgIDogInJlZnMvcmVwbGFjZS8iKTsKKwlmcmVlKGdpdF9uYW1lc3BhY2UpOworCWdpdF9uYW1lc3BhY2UgPSBleHBhbmRfbmFtZXNwYWNlKGdldGVudihHSVRfTkFNRVNQQUNFX0VOVklST05NRU5UKSk7CisJc2hhbGxvd19maWxlID0gZ2V0ZW52KEdJVF9TSEFMTE9XX0ZJTEVfRU5WSVJPTk1FTlQpOworCWlmIChzaGFsbG93X2ZpbGUpCisJCXNldF9hbHRlcm5hdGVfc2hhbGxvd19maWxlKHRoZV9yZXBvc2l0b3J5LCBzaGFsbG93X2ZpbGUsIDApOworfQorCitpbnQgaXNfYmFyZV9yZXBvc2l0b3J5KHZvaWQpCit7CisJLyogaWYgY29yZS5iYXJlIGlzIG5vdCAnZmFsc2UnLCBsZXQncyBzZWUgaWYgdGhlcmUgaXMgYSB3b3JrIHRyZWUgKi8KKwlyZXR1cm4gaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyAmJiAhZ2V0X2dpdF93b3JrX3RyZWUoKTsKK30KKworaW50IGhhdmVfZ2l0X2Rpcih2b2lkKQoreworCXJldHVybiBzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeQorCQl8fCB0aGVfcmVwb3NpdG9yeS0+Z2l0ZGlyOworfQorCitjb25zdCBjaGFyICpnZXRfZ2l0X2Rpcih2b2lkKQoreworCWlmICghdGhlX3JlcG9zaXRvcnktPmdpdGRpcikKKwkJQlVHKCJnaXQgZW52aXJvbm1lbnQgaGFzbid0IGJlZW4gc2V0dXAiKTsKKwlyZXR1cm4gdGhlX3JlcG9zaXRvcnktPmdpdGRpcjsKK30KKworY29uc3QgY2hhciAqZ2V0X2dpdF9jb21tb25fZGlyKHZvaWQpCit7CisJaWYgKCF0aGVfcmVwb3NpdG9yeS0+Y29tbW9uZGlyKQorCQlCVUcoImdpdCBlbnZpcm9ubWVudCBoYXNuJ3QgYmVlbiBzZXR1cCIpOworCXJldHVybiB0aGVfcmVwb3NpdG9yeS0+Y29tbW9uZGlyOworfQorCitjb25zdCBjaGFyICpnZXRfZ2l0X25hbWVzcGFjZSh2b2lkKQoreworCWlmICghZ2l0X25hbWVzcGFjZSkKKwkJQlVHKCJnaXQgZW52aXJvbm1lbnQgaGFzbid0IGJlZW4gc2V0dXAiKTsKKwlyZXR1cm4gZ2l0X25hbWVzcGFjZTsKK30KKworY29uc3QgY2hhciAqc3RyaXBfbmFtZXNwYWNlKGNvbnN0IGNoYXIgKm5hbWVzcGFjZWRfcmVmKQoreworCWNvbnN0IGNoYXIgKm91dDsKKwlpZiAoc2tpcF9wcmVmaXgobmFtZXNwYWNlZF9yZWYsIGdldF9naXRfbmFtZXNwYWNlKCksICZvdXQpKQorCQlyZXR1cm4gb3V0OworCXJldHVybiBOVUxMOworfQorCitjb25zdCBjaGFyICpnZXRfc3VwZXJfcHJlZml4KHZvaWQpCit7CisJc3RhdGljIGludCBpbml0aWFsaXplZDsKKwlpZiAoIWluaXRpYWxpemVkKSB7CisJCXN1cGVyX3ByZWZpeCA9IHhzdHJkdXBfb3JfbnVsbChnZXRlbnYoR0lUX1NVUEVSX1BSRUZJWF9FTlZJUk9OTUVOVCkpOworCQlpbml0aWFsaXplZCA9IDE7CisJfQorCXJldHVybiBzdXBlcl9wcmVmaXg7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3dvcmtfdHJlZV9pbml0aWFsaXplZDsKKworLyoKKyAqIE5vdGUuICBUaGlzIHdvcmtzIG9ubHkgYmVmb3JlIHlvdSB1c2VkIGEgd29yayB0cmVlLiAgVGhpcyB3YXMgYWRkZWQKKyAqIHByaW1hcmlseSB0byBzdXBwb3J0IGdpdC1jbG9uZSB0byB3b3JrIGluIGEgbmV3IHJlcG9zaXRvcnkgaXQganVzdAorICogY3JlYXRlZCwgYW5kIGlzIG5vdCBtZWFudCB0byBmbGlwIGJldHdlZW4gZGlmZmVyZW50IHdvcmsgdHJlZXMuCisgKi8KK3ZvaWQgc2V0X2dpdF93b3JrX3RyZWUoY29uc3QgY2hhciAqbmV3X3dvcmtfdHJlZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlYWxwYXRoID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoZ2l0X3dvcmtfdHJlZV9pbml0aWFsaXplZCkgeworCQlzdHJidWZfcmVhbHBhdGgoJnJlYWxwYXRoLCBuZXdfd29ya190cmVlLCAxKTsKKwkJbmV3X3dvcmtfdHJlZSA9IHJlYWxwYXRoLmJ1ZjsKKwkJaWYgKHN0cmNtcChuZXdfd29ya190cmVlLCB0aGVfcmVwb3NpdG9yeS0+d29ya3RyZWUpKQorCQkJZGllKCJpbnRlcm5hbCBlcnJvcjogd29yayB0cmVlIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4iCisJCQkgICAgIkN1cnJlbnQgd29ya3RyZWU6ICVzXG5OZXcgd29ya3RyZWU6ICVzIiwKKwkJCSAgICB0aGVfcmVwb3NpdG9yeS0+d29ya3RyZWUsIG5ld193b3JrX3RyZWUpOworCQlyZXR1cm47CisJfQorCWdpdF93b3JrX3RyZWVfaW5pdGlhbGl6ZWQgPSAxOworCXJlcG9fc2V0X3dvcmt0cmVlKHRoZV9yZXBvc2l0b3J5LCBuZXdfd29ya190cmVlKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWFscGF0aCk7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9naXRfd29ya190cmVlKHZvaWQpCit7CisJcmV0dXJuIHRoZV9yZXBvc2l0b3J5LT53b3JrdHJlZTsKK30KKworY2hhciAqZ2V0X29iamVjdF9kaXJlY3Rvcnkodm9pZCkKK3sKKwlpZiAoIXRoZV9yZXBvc2l0b3J5LT5vYmplY3RzLT5vZGIpCisJCUJVRygiZ2l0IGVudmlyb25tZW50IGhhc24ndCBiZWVuIHNldHVwIik7CisJcmV0dXJuIHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzLT5vZGItPnBhdGg7Cit9CisKK2ludCBvZGJfbWtzdGVtcChzdHJ1Y3Qgc3RyYnVmICp0ZW1wX2ZpbGVuYW1lLCBjb25zdCBjaGFyICpwYXR0ZXJuKQoreworCWludCBmZDsKKwkvKgorCSAqIHdlIGxldCB0aGUgdW1hc2sgZG8gaXRzIGpvYiwgZG9uJ3QgdHJ5IHRvIGJlIG1vcmUKKwkgKiByZXN0cmljdGl2ZSBleGNlcHQgdG8gcmVtb3ZlIHdyaXRlIHBlcm1pc3Npb24uCisJICovCisJaW50IG1vZGUgPSAwNDQ0OworCWdpdF9wYXRoX2J1Zih0ZW1wX2ZpbGVuYW1lLCAib2JqZWN0cy8lcyIsIHBhdHRlcm4pOworCWZkID0gZ2l0X21rc3RlbXBfbW9kZSh0ZW1wX2ZpbGVuYW1lLT5idWYsIG1vZGUpOworCWlmICgwIDw9IGZkKQorCQlyZXR1cm4gZmQ7CisKKwkvKiBzbG93IHBhdGggKi8KKwkvKiBzb21lIG1rc3RlbXAgaW1wbGVtZW50YXRpb25zIGVyYXNlIHRlbXBfZmlsZW5hbWUgb24gZmFpbHVyZSAqLworCWdpdF9wYXRoX2J1Zih0ZW1wX2ZpbGVuYW1lLCAib2JqZWN0cy8lcyIsIHBhdHRlcm4pOworCXNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXModGVtcF9maWxlbmFtZS0+YnVmKTsKKwlyZXR1cm4geG1rc3RlbXBfbW9kZSh0ZW1wX2ZpbGVuYW1lLT5idWYsIG1vZGUpOworfQorCitpbnQgb2RiX3BhY2tfa2VlcChjb25zdCBjaGFyICpuYW1lKQoreworCWludCBmZDsKKworCWZkID0gb3BlbihuYW1lLCBPX1JEV1J8T19DUkVBVHxPX0VYQ0wsIDA2MDApOworCWlmICgwIDw9IGZkKQorCQlyZXR1cm4gZmQ7CisKKwkvKiBzbG93IHBhdGggKi8KKwlzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KG5hbWUpOworCXJldHVybiBvcGVuKG5hbWUsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTCwgMDYwMCk7Cit9CisKK2NoYXIgKmdldF9pbmRleF9maWxlKHZvaWQpCit7CisJaWYgKCF0aGVfcmVwb3NpdG9yeS0+aW5kZXhfZmlsZSkKKwkJQlVHKCJnaXQgZW52aXJvbm1lbnQgaGFzbid0IGJlZW4gc2V0dXAiKTsKKwlyZXR1cm4gdGhlX3JlcG9zaXRvcnktPmluZGV4X2ZpbGU7Cit9CisKK2NoYXIgKmdldF9ncmFmdF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCWlmICghci0+Z3JhZnRfZmlsZSkKKwkJQlVHKCJnaXQgZW52aXJvbm1lbnQgaGFzbid0IGJlZW4gc2V0dXAiKTsKKwlyZXR1cm4gci0+Z3JhZnRfZmlsZTsKK30KKworc3RhdGljIHZvaWQgc2V0X2dpdF9kaXJfMShjb25zdCBjaGFyICpwYXRoKQoreworCWlmIChzZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCwgcGF0aCwgMSkpCisJCWRpZShfKCJjb3VsZCBub3Qgc2V0IEdJVF9ESVIgdG8gJyVzJyIpLCBwYXRoKTsKKwlzZXR1cF9naXRfZW52KHBhdGgpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfcmVsYXRpdmVfZ2l0ZGlyKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgY29uc3QgY2hhciAqb2xkX2N3ZCwKKwkJCQkgICBjb25zdCBjaGFyICpuZXdfY3dkLAorCQkJCSAgIHZvaWQgKmRhdGEpCit7CisJY2hhciAqcGF0aCA9IHJlcGFyZW50X3JlbGF0aXZlX3BhdGgob2xkX2N3ZCwgbmV3X2N3ZCwgZ2V0X2dpdF9kaXIoKSk7CisJdHJhY2VfcHJpbnRmX2tleSgmdHJhY2Vfc2V0dXBfa2V5LAorCQkJICJzZXR1cDogbW92ZSAkR0lUX0RJUiB0byAnJXMnIiwKKwkJCSBwYXRoKTsKKwlzZXRfZ2l0X2Rpcl8xKHBhdGgpOworCWZyZWUocGF0aCk7Cit9CisKK3ZvaWQgc2V0X2dpdF9kaXIoY29uc3QgY2hhciAqcGF0aCwgaW50IG1ha2VfcmVhbHBhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiByZWFscGF0aCA9IFNUUkJVRl9JTklUOworCisJaWYgKG1ha2VfcmVhbHBhdGgpIHsKKwkJc3RyYnVmX3JlYWxwYXRoKCZyZWFscGF0aCwgcGF0aCwgMSk7CisJCXBhdGggPSByZWFscGF0aC5idWY7CisJfQorCisJc2V0X2dpdF9kaXJfMShwYXRoKTsKKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgocGF0aCkpCisJCWNoZGlyX25vdGlmeV9yZWdpc3RlcihOVUxMLCB1cGRhdGVfcmVsYXRpdmVfZ2l0ZGlyLCBOVUxMKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWFscGF0aCk7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9sb2dfb3V0cHV0X2VuY29kaW5nKHZvaWQpCit7CisJcmV0dXJuIGdpdF9sb2dfb3V0cHV0X2VuY29kaW5nID8gZ2l0X2xvZ19vdXRwdXRfZW5jb2RpbmcKKwkJOiBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOworfQorCitjb25zdCBjaGFyICpnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZyh2b2lkKQoreworCXJldHVybiBnaXRfY29tbWl0X2VuY29kaW5nID8gZ2l0X2NvbW1pdF9lbmNvZGluZyA6ICJVVEYtOCI7Cit9CisKK3N0YXRpYyBpbnQgdGhlX3NoYXJlZF9yZXBvc2l0b3J5ID0gUEVSTV9VTUFTSzsKK3N0YXRpYyBpbnQgbmVlZF9zaGFyZWRfcmVwb3NpdG9yeV9mcm9tX2NvbmZpZyA9IDE7CisKK3ZvaWQgc2V0X3NoYXJlZF9yZXBvc2l0b3J5KGludCB2YWx1ZSkKK3sKKwl0aGVfc2hhcmVkX3JlcG9zaXRvcnkgPSB2YWx1ZTsKKwluZWVkX3NoYXJlZF9yZXBvc2l0b3J5X2Zyb21fY29uZmlnID0gMDsKK30KKworaW50IGdldF9zaGFyZWRfcmVwb3NpdG9yeSh2b2lkKQoreworCWlmIChuZWVkX3NoYXJlZF9yZXBvc2l0b3J5X2Zyb21fY29uZmlnKSB7CisJCWNvbnN0IGNoYXIgKnZhciA9ICJjb3JlLnNoYXJlZHJlcG9zaXRvcnkiOworCQljb25zdCBjaGFyICp2YWx1ZTsKKwkJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSh2YXIsICZ2YWx1ZSkpCisJCQl0aGVfc2hhcmVkX3JlcG9zaXRvcnkgPSBnaXRfY29uZmlnX3Blcm0odmFyLCB2YWx1ZSk7CisJCW5lZWRfc2hhcmVkX3JlcG9zaXRvcnlfZnJvbV9jb25maWcgPSAwOworCX0KKwlyZXR1cm4gdGhlX3NoYXJlZF9yZXBvc2l0b3J5OworfQorCit2b2lkIHJlc2V0X3NoYXJlZF9yZXBvc2l0b3J5KHZvaWQpCit7CisJbmVlZF9zaGFyZWRfcmVwb3NpdG9yeV9mcm9tX2NvbmZpZyA9IDE7Cit9CisKK2ludCB1c2Vfb3B0aW9uYWxfbG9ja3Modm9pZCkKK3sKKwlyZXR1cm4gZ2l0X2Vudl9ib29sKEdJVF9PUFRJT05BTF9MT0NLU19FTlZJUk9OTUVOVCwgMSk7Cit9CisKK2ludCBwcmludF9zaGExX2VsbGlwc2lzKHZvaWQpCit7CisJLyoKKwkgKiBEZXRlcm1pbmUgaWYgdGhlIGNhbGxpbmcgZW52aXJvbm1lbnQgY29udGFpbnMgdGhlIHZhcmlhYmxlCisJICogR0lUX1BSSU5UX1NIQTFfRUxMSVBTSVMgc2V0IHRvICJ5ZXMiLgorCSAqLworCXN0YXRpYyBpbnQgY2FjaGVkX3Jlc3VsdCA9IC0xOyAvKiB1bmtub3duICovCisKKwlpZiAoY2FjaGVkX3Jlc3VsdCA8IDApIHsKKwkJY29uc3QgY2hhciAqdiA9IGdldGVudigiR0lUX1BSSU5UX1NIQTFfRUxMSVBTSVMiKTsKKwkJY2FjaGVkX3Jlc3VsdCA9ICh2ICYmICFzdHJjYXNlY21wKHYsICJ5ZXMiKSk7CisJfQorCXJldHVybiBjYWNoZWRfcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZXdhaC9iaXRtYXAuYyBiL2V3YWgvYml0bWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhjZWM1OAotLS0gL2Rldi9udWxsCisrKyBiL2V3YWgvYml0bWFwLmMKQEAgLTAsMCArMSwxOTMgQEAKKy8qKgorICogQ29weXJpZ2h0IDIwMTMsIEdpdEh1YiwgSW5jCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEzLCBEYW5pZWwgTGVtaXJlLCBDbGlmZiBNb29uLAorICoJRGF2aWQgTWNJbnRvc2gsIFJvYmVydCBCZWNobywgR29vZ2xlIEluYy4gYW5kIFZlcm9uaWthIFplbnoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImV3b2suaCIKKworI2RlZmluZSBFV0FIX01BU0soeCkgKChld29yZF90KTEgPDwgKHggJSBCSVRTX0lOX0VXT1JEKSkKKyNkZWZpbmUgRVdBSF9CTE9DSyh4KSAoeCAvIEJJVFNfSU5fRVdPUkQpCisKK3N0cnVjdCBiaXRtYXAgKmJpdG1hcF93b3JkX2FsbG9jKHNpemVfdCB3b3JkX2FsbG9jKQoreworCXN0cnVjdCBiaXRtYXAgKmJpdG1hcCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBiaXRtYXApKTsKKwliaXRtYXAtPndvcmRzID0geGNhbGxvYyh3b3JkX2FsbG9jLCBzaXplb2YoZXdvcmRfdCkpOworCWJpdG1hcC0+d29yZF9hbGxvYyA9IHdvcmRfYWxsb2M7CisJcmV0dXJuIGJpdG1hcDsKK30KKworc3RydWN0IGJpdG1hcCAqYml0bWFwX25ldyh2b2lkKQoreworCXJldHVybiBiaXRtYXBfd29yZF9hbGxvYygzMik7Cit9CisKK3ZvaWQgYml0bWFwX3NldChzdHJ1Y3QgYml0bWFwICpzZWxmLCBzaXplX3QgcG9zKQoreworCXNpemVfdCBibG9jayA9IEVXQUhfQkxPQ0socG9zKTsKKworCWlmIChibG9jayA+PSBzZWxmLT53b3JkX2FsbG9jKSB7CisJCXNpemVfdCBvbGRfc2l6ZSA9IHNlbGYtPndvcmRfYWxsb2M7CisJCXNlbGYtPndvcmRfYWxsb2MgPSBibG9jayA/IGJsb2NrICogMiA6IDE7CisJCVJFQUxMT0NfQVJSQVkoc2VsZi0+d29yZHMsIHNlbGYtPndvcmRfYWxsb2MpOworCQltZW1zZXQoc2VsZi0+d29yZHMgKyBvbGRfc2l6ZSwgMHgwLAorCQkJKHNlbGYtPndvcmRfYWxsb2MgLSBvbGRfc2l6ZSkgKiBzaXplb2YoZXdvcmRfdCkpOworCX0KKworCXNlbGYtPndvcmRzW2Jsb2NrXSB8PSBFV0FIX01BU0socG9zKTsKK30KKwordm9pZCBiaXRtYXBfdW5zZXQoc3RydWN0IGJpdG1hcCAqc2VsZiwgc2l6ZV90IHBvcykKK3sKKwlzaXplX3QgYmxvY2sgPSBFV0FIX0JMT0NLKHBvcyk7CisKKwlpZiAoYmxvY2sgPCBzZWxmLT53b3JkX2FsbG9jKQorCQlzZWxmLT53b3Jkc1tibG9ja10gJj0gfkVXQUhfTUFTSyhwb3MpOworfQorCitpbnQgYml0bWFwX2dldChzdHJ1Y3QgYml0bWFwICpzZWxmLCBzaXplX3QgcG9zKQoreworCXNpemVfdCBibG9jayA9IEVXQUhfQkxPQ0socG9zKTsKKwlyZXR1cm4gYmxvY2sgPCBzZWxmLT53b3JkX2FsbG9jICYmCisJCShzZWxmLT53b3Jkc1tibG9ja10gJiBFV0FIX01BU0socG9zKSkgIT0gMDsKK30KKworc3RydWN0IGV3YWhfYml0bWFwICpiaXRtYXBfdG9fZXdhaChzdHJ1Y3QgYml0bWFwICpiaXRtYXApCit7CisJc3RydWN0IGV3YWhfYml0bWFwICpld2FoID0gZXdhaF9uZXcoKTsKKwlzaXplX3QgaSwgcnVubmluZ19lbXB0eV93b3JkcyA9IDA7CisJZXdvcmRfdCBsYXN0X3dvcmQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGJpdG1hcC0+d29yZF9hbGxvYzsgKytpKSB7CisJCWlmIChiaXRtYXAtPndvcmRzW2ldID09IDApIHsKKwkJCXJ1bm5pbmdfZW1wdHlfd29yZHMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGxhc3Rfd29yZCAhPSAwKQorCQkJZXdhaF9hZGQoZXdhaCwgbGFzdF93b3JkKTsKKworCQlpZiAocnVubmluZ19lbXB0eV93b3JkcyA+IDApIHsKKwkJCWV3YWhfYWRkX2VtcHR5X3dvcmRzKGV3YWgsIDAsIHJ1bm5pbmdfZW1wdHlfd29yZHMpOworCQkJcnVubmluZ19lbXB0eV93b3JkcyA9IDA7CisJCX0KKworCQlsYXN0X3dvcmQgPSBiaXRtYXAtPndvcmRzW2ldOworCX0KKworCWV3YWhfYWRkKGV3YWgsIGxhc3Rfd29yZCk7CisJcmV0dXJuIGV3YWg7Cit9CisKK3N0cnVjdCBiaXRtYXAgKmV3YWhfdG9fYml0bWFwKHN0cnVjdCBld2FoX2JpdG1hcCAqZXdhaCkKK3sKKwlzdHJ1Y3QgYml0bWFwICpiaXRtYXAgPSBiaXRtYXBfbmV3KCk7CisJc3RydWN0IGV3YWhfaXRlcmF0b3IgaXQ7CisJZXdvcmRfdCBibG93dXA7CisJc2l6ZV90IGkgPSAwOworCisJZXdhaF9pdGVyYXRvcl9pbml0KCZpdCwgZXdhaCk7CisKKwl3aGlsZSAoZXdhaF9pdGVyYXRvcl9uZXh0KCZibG93dXAsICZpdCkpIHsKKwkJQUxMT0NfR1JPVyhiaXRtYXAtPndvcmRzLCBpICsgMSwgYml0bWFwLT53b3JkX2FsbG9jKTsKKwkJYml0bWFwLT53b3Jkc1tpKytdID0gYmxvd3VwOworCX0KKworCWJpdG1hcC0+d29yZF9hbGxvYyA9IGk7CisJcmV0dXJuIGJpdG1hcDsKK30KKwordm9pZCBiaXRtYXBfYW5kX25vdChzdHJ1Y3QgYml0bWFwICpzZWxmLCBzdHJ1Y3QgYml0bWFwICpvdGhlcikKK3sKKwljb25zdCBzaXplX3QgY291bnQgPSAoc2VsZi0+d29yZF9hbGxvYyA8IG90aGVyLT53b3JkX2FsbG9jKSA/CisJCXNlbGYtPndvcmRfYWxsb2MgOiBvdGhlci0+d29yZF9hbGxvYzsKKworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisJCXNlbGYtPndvcmRzW2ldICY9IH5vdGhlci0+d29yZHNbaV07Cit9CisKK3ZvaWQgYml0bWFwX29yX2V3YWgoc3RydWN0IGJpdG1hcCAqc2VsZiwgc3RydWN0IGV3YWhfYml0bWFwICpvdGhlcikKK3sKKwlzaXplX3Qgb3JpZ2luYWxfc2l6ZSA9IHNlbGYtPndvcmRfYWxsb2M7CisJc2l6ZV90IG90aGVyX2ZpbmFsID0gKG90aGVyLT5iaXRfc2l6ZSAvIEJJVFNfSU5fRVdPUkQpICsgMTsKKwlzaXplX3QgaSA9IDA7CisJc3RydWN0IGV3YWhfaXRlcmF0b3IgaXQ7CisJZXdvcmRfdCB3b3JkOworCisJaWYgKHNlbGYtPndvcmRfYWxsb2MgPCBvdGhlcl9maW5hbCkgeworCQlzZWxmLT53b3JkX2FsbG9jID0gb3RoZXJfZmluYWw7CisJCVJFQUxMT0NfQVJSQVkoc2VsZi0+d29yZHMsIHNlbGYtPndvcmRfYWxsb2MpOworCQltZW1zZXQoc2VsZi0+d29yZHMgKyBvcmlnaW5hbF9zaXplLCAweDAsCisJCQkoc2VsZi0+d29yZF9hbGxvYyAtIG9yaWdpbmFsX3NpemUpICogc2l6ZW9mKGV3b3JkX3QpKTsKKwl9CisKKwlld2FoX2l0ZXJhdG9yX2luaXQoJml0LCBvdGhlcik7CisKKwl3aGlsZSAoZXdhaF9pdGVyYXRvcl9uZXh0KCZ3b3JkLCAmaXQpKQorCQlzZWxmLT53b3Jkc1tpKytdIHw9IHdvcmQ7Cit9CisKK3NpemVfdCBiaXRtYXBfcG9wY291bnQoc3RydWN0IGJpdG1hcCAqc2VsZikKK3sKKwlzaXplX3QgaSwgY291bnQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHNlbGYtPndvcmRfYWxsb2M7ICsraSkKKwkJY291bnQgKz0gZXdhaF9iaXRfcG9wY291bnQ2NChzZWxmLT53b3Jkc1tpXSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK2ludCBiaXRtYXBfZXF1YWxzKHN0cnVjdCBiaXRtYXAgKnNlbGYsIHN0cnVjdCBiaXRtYXAgKm90aGVyKQoreworCXN0cnVjdCBiaXRtYXAgKmJpZywgKnNtYWxsOworCXNpemVfdCBpOworCisJaWYgKHNlbGYtPndvcmRfYWxsb2MgPCBvdGhlci0+d29yZF9hbGxvYykgeworCQlzbWFsbCA9IHNlbGY7CisJCWJpZyA9IG90aGVyOworCX0gZWxzZSB7CisJCXNtYWxsID0gb3RoZXI7CisJCWJpZyA9IHNlbGY7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNtYWxsLT53b3JkX2FsbG9jOyArK2kpIHsKKwkJaWYgKHNtYWxsLT53b3Jkc1tpXSAhPSBiaWctPndvcmRzW2ldKQorCQkJcmV0dXJuIDA7CisJfQorCisJZm9yICg7IGkgPCBiaWctPndvcmRfYWxsb2M7ICsraSkgeworCQlpZiAoYmlnLT53b3Jkc1tpXSAhPSAwKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgYml0bWFwX3Jlc2V0KHN0cnVjdCBiaXRtYXAgKmJpdG1hcCkKK3sKKwltZW1zZXQoYml0bWFwLT53b3JkcywgMHgwLCBiaXRtYXAtPndvcmRfYWxsb2MgKiBzaXplb2YoZXdvcmRfdCkpOworfQorCit2b2lkIGJpdG1hcF9mcmVlKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCkKK3sKKwlpZiAoYml0bWFwID09IE5VTEwpCisJCXJldHVybjsKKworCWZyZWUoYml0bWFwLT53b3Jkcyk7CisJZnJlZShiaXRtYXApOworfQpkaWZmIC0tZ2l0IGEvZXdhaC9ld2FoX2JpdG1hcC5jIGIvZXdhaC9ld2FoX2JpdG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OWIxYWYKLS0tIC9kZXYvbnVsbAorKysgYi9ld2FoL2V3YWhfYml0bWFwLmMKQEAgLTAsMCArMSw0ODQgQEAKKy8qKgorICogQ29weXJpZ2h0IDIwMTMsIEdpdEh1YiwgSW5jCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEzLCBEYW5pZWwgTGVtaXJlLCBDbGlmZiBNb29uLAorICoJRGF2aWQgTWNJbnRvc2gsIFJvYmVydCBCZWNobywgR29vZ2xlIEluYy4gYW5kIFZlcm9uaWthIFplbnoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJld29rLmgiCisjaW5jbHVkZSAiZXdva19ybHcuaCIKKworc3RhdGljIGlubGluZSBzaXplX3QgbWluX3NpemUoc2l6ZV90IGEsIHNpemVfdCBiKQoreworCXJldHVybiBhIDwgYiA/IGEgOiBiOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBtYXhfc2l6ZShzaXplX3QgYSwgc2l6ZV90IGIpCit7CisJcmV0dXJuIGEgPiBiID8gYSA6IGI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidWZmZXJfZ3JvdyhzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKwlzaXplX3Qgcmx3X29mZnNldCA9ICh1aW50OF90ICopc2VsZi0+cmx3IC0gKHVpbnQ4X3QgKilzZWxmLT5idWZmZXI7CisKKwlpZiAoc2VsZi0+YWxsb2Nfc2l6ZSA+PSBuZXdfc2l6ZSkKKwkJcmV0dXJuOworCisJc2VsZi0+YWxsb2Nfc2l6ZSA9IG5ld19zaXplOworCVJFQUxMT0NfQVJSQVkoc2VsZi0+YnVmZmVyLCBzZWxmLT5hbGxvY19zaXplKTsKKwlzZWxmLT5ybHcgPSBzZWxmLT5idWZmZXIgKyAocmx3X29mZnNldCAvIHNpemVvZihld29yZF90KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidWZmZXJfcHVzaChzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGV3b3JkX3QgdmFsdWUpCit7CisJaWYgKHNlbGYtPmJ1ZmZlcl9zaXplICsgMSA+PSBzZWxmLT5hbGxvY19zaXplKQorCQlidWZmZXJfZ3JvdyhzZWxmLCBzZWxmLT5idWZmZXJfc2l6ZSAqIDMgLyAyKTsKKworCXNlbGYtPmJ1ZmZlcltzZWxmLT5idWZmZXJfc2l6ZSsrXSA9IHZhbHVlOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJfcHVzaF9ybHcoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBld29yZF90IHZhbHVlKQoreworCWJ1ZmZlcl9wdXNoKHNlbGYsIHZhbHVlKTsKKwlzZWxmLT5ybHcgPSBzZWxmLT5idWZmZXIgKyBzZWxmLT5idWZmZXJfc2l6ZSAtIDE7Cit9CisKK3N0YXRpYyBzaXplX3QgYWRkX2VtcHR5X3dvcmRzKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgaW50IHYsIHNpemVfdCBudW1iZXIpCit7CisJc2l6ZV90IGFkZGVkID0gMDsKKwlld29yZF90IHJ1bmxlbiwgY2FuX2FkZDsKKworCWlmIChybHdfZ2V0X3J1bl9iaXQoc2VsZi0+cmx3KSAhPSB2ICYmIHJsd19zaXplKHNlbGYtPnJsdykgPT0gMCkgeworCQlybHdfc2V0X3J1bl9iaXQoc2VsZi0+cmx3LCB2KTsKKwl9IGVsc2UgaWYgKHJsd19nZXRfbGl0ZXJhbF93b3JkcyhzZWxmLT5ybHcpICE9IDAgfHwKKwkJCXJsd19nZXRfcnVuX2JpdChzZWxmLT5ybHcpICE9IHYpIHsKKwkJYnVmZmVyX3B1c2hfcmx3KHNlbGYsIDApOworCQlpZiAodikgcmx3X3NldF9ydW5fYml0KHNlbGYtPnJsdywgdik7CisJCWFkZGVkKys7CisJfQorCisJcnVubGVuID0gcmx3X2dldF9ydW5uaW5nX2xlbihzZWxmLT5ybHcpOworCWNhbl9hZGQgPSBtaW5fc2l6ZShudW1iZXIsIFJMV19MQVJHRVNUX1JVTk5JTkdfQ09VTlQgLSBydW5sZW4pOworCisJcmx3X3NldF9ydW5uaW5nX2xlbihzZWxmLT5ybHcsIHJ1bmxlbiArIGNhbl9hZGQpOworCW51bWJlciAtPSBjYW5fYWRkOworCisJd2hpbGUgKG51bWJlciA+PSBSTFdfTEFSR0VTVF9SVU5OSU5HX0NPVU5UKSB7CisJCWJ1ZmZlcl9wdXNoX3JsdyhzZWxmLCAwKTsKKwkJYWRkZWQrKzsKKwkJaWYgKHYpIHJsd19zZXRfcnVuX2JpdChzZWxmLT5ybHcsIHYpOworCQlybHdfc2V0X3J1bm5pbmdfbGVuKHNlbGYtPnJsdywgUkxXX0xBUkdFU1RfUlVOTklOR19DT1VOVCk7CisJCW51bWJlciAtPSBSTFdfTEFSR0VTVF9SVU5OSU5HX0NPVU5UOworCX0KKworCWlmIChudW1iZXIgPiAwKSB7CisJCWJ1ZmZlcl9wdXNoX3JsdyhzZWxmLCAwKTsKKwkJYWRkZWQrKzsKKworCQlpZiAodikgcmx3X3NldF9ydW5fYml0KHNlbGYtPnJsdywgdik7CisJCXJsd19zZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3LCBudW1iZXIpOworCX0KKworCXJldHVybiBhZGRlZDsKK30KKworc2l6ZV90IGV3YWhfYWRkX2VtcHR5X3dvcmRzKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgaW50IHYsIHNpemVfdCBudW1iZXIpCit7CisJaWYgKG51bWJlciA9PSAwKQorCQlyZXR1cm4gMDsKKworCXNlbGYtPmJpdF9zaXplICs9IG51bWJlciAqIEJJVFNfSU5fRVdPUkQ7CisJcmV0dXJuIGFkZF9lbXB0eV93b3JkcyhzZWxmLCB2LCBudW1iZXIpOworfQorCitzdGF0aWMgc2l6ZV90IGFkZF9saXRlcmFsKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgZXdvcmRfdCBuZXdfZGF0YSkKK3sKKwlld29yZF90IGN1cnJlbnRfbnVtID0gcmx3X2dldF9saXRlcmFsX3dvcmRzKHNlbGYtPnJsdyk7CisKKwlpZiAoY3VycmVudF9udW0gPj0gUkxXX0xBUkdFU1RfTElURVJBTF9DT1VOVCkgeworCQlidWZmZXJfcHVzaF9ybHcoc2VsZiwgMCk7CisKKwkJcmx3X3NldF9saXRlcmFsX3dvcmRzKHNlbGYtPnJsdywgMSk7CisJCWJ1ZmZlcl9wdXNoKHNlbGYsIG5ld19kYXRhKTsKKwkJcmV0dXJuIDI7CisJfQorCisJcmx3X3NldF9saXRlcmFsX3dvcmRzKHNlbGYtPnJsdywgY3VycmVudF9udW0gKyAxKTsKKworCS8qIHNhbml0eSBjaGVjayAqLworCWFzc2VydChybHdfZ2V0X2xpdGVyYWxfd29yZHMoc2VsZi0+cmx3KSA9PSBjdXJyZW50X251bSArIDEpOworCisJYnVmZmVyX3B1c2goc2VsZiwgbmV3X2RhdGEpOworCXJldHVybiAxOworfQorCit2b2lkIGV3YWhfYWRkX2RpcnR5X3dvcmRzKAorCXN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgY29uc3QgZXdvcmRfdCAqYnVmZmVyLAorCXNpemVfdCBudW1iZXIsIGludCBuZWdhdGUpCit7CisJc2l6ZV90IGxpdGVyYWxzLCBjYW5fYWRkOworCisJd2hpbGUgKDEpIHsKKwkJbGl0ZXJhbHMgPSBybHdfZ2V0X2xpdGVyYWxfd29yZHMoc2VsZi0+cmx3KTsKKwkJY2FuX2FkZCA9IG1pbl9zaXplKG51bWJlciwgUkxXX0xBUkdFU1RfTElURVJBTF9DT1VOVCAtIGxpdGVyYWxzKTsKKworCQlybHdfc2V0X2xpdGVyYWxfd29yZHMoc2VsZi0+cmx3LCBsaXRlcmFscyArIGNhbl9hZGQpOworCisJCWlmIChzZWxmLT5idWZmZXJfc2l6ZSArIGNhbl9hZGQgPj0gc2VsZi0+YWxsb2Nfc2l6ZSkKKwkJCWJ1ZmZlcl9ncm93KHNlbGYsIChzZWxmLT5idWZmZXJfc2l6ZSArIGNhbl9hZGQpICogMyAvIDIpOworCisJCWlmIChuZWdhdGUpIHsKKwkJCXNpemVfdCBpOworCQkJZm9yIChpID0gMDsgaSA8IGNhbl9hZGQ7ICsraSkKKwkJCQlzZWxmLT5idWZmZXJbc2VsZi0+YnVmZmVyX3NpemUrK10gPSB+YnVmZmVyW2ldOworCQl9IGVsc2UgeworCQkJbWVtY3B5KHNlbGYtPmJ1ZmZlciArIHNlbGYtPmJ1ZmZlcl9zaXplLAorCQkJCWJ1ZmZlciwgY2FuX2FkZCAqIHNpemVvZihld29yZF90KSk7CisJCQlzZWxmLT5idWZmZXJfc2l6ZSArPSBjYW5fYWRkOworCQl9CisKKwkJc2VsZi0+Yml0X3NpemUgKz0gY2FuX2FkZCAqIEJJVFNfSU5fRVdPUkQ7CisKKwkJaWYgKG51bWJlciAtIGNhbl9hZGQgPT0gMCkKKwkJCWJyZWFrOworCisJCWJ1ZmZlcl9wdXNoX3JsdyhzZWxmLCAwKTsKKwkJYnVmZmVyICs9IGNhbl9hZGQ7CisJCW51bWJlciAtPSBjYW5fYWRkOworCX0KK30KKworc3RhdGljIHNpemVfdCBhZGRfZW1wdHlfd29yZChzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGludCB2KQoreworCWludCBub19saXRlcmFsID0gKHJsd19nZXRfbGl0ZXJhbF93b3JkcyhzZWxmLT5ybHcpID09IDApOworCWV3b3JkX3QgcnVuX2xlbiA9IHJsd19nZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3KTsKKworCWlmIChub19saXRlcmFsICYmIHJ1bl9sZW4gPT0gMCkgeworCQlybHdfc2V0X3J1bl9iaXQoc2VsZi0+cmx3LCB2KTsKKwkJYXNzZXJ0KHJsd19nZXRfcnVuX2JpdChzZWxmLT5ybHcpID09IHYpOworCX0KKworCWlmIChub19saXRlcmFsICYmIHJsd19nZXRfcnVuX2JpdChzZWxmLT5ybHcpID09IHYgJiYKKwkJcnVuX2xlbiA8IFJMV19MQVJHRVNUX1JVTk5JTkdfQ09VTlQpIHsKKwkJcmx3X3NldF9ydW5uaW5nX2xlbihzZWxmLT5ybHcsIHJ1bl9sZW4gKyAxKTsKKwkJYXNzZXJ0KHJsd19nZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3KSA9PSBydW5fbGVuICsgMSk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWJ1ZmZlcl9wdXNoX3JsdyhzZWxmLCAwKTsKKworCQlhc3NlcnQocmx3X2dldF9ydW5uaW5nX2xlbihzZWxmLT5ybHcpID09IDApOworCQlhc3NlcnQocmx3X2dldF9ydW5fYml0KHNlbGYtPnJsdykgPT0gMCk7CisJCWFzc2VydChybHdfZ2V0X2xpdGVyYWxfd29yZHMoc2VsZi0+cmx3KSA9PSAwKTsKKworCQlybHdfc2V0X3J1bl9iaXQoc2VsZi0+cmx3LCB2KTsKKwkJYXNzZXJ0KHJsd19nZXRfcnVuX2JpdChzZWxmLT5ybHcpID09IHYpOworCisJCXJsd19zZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3LCAxKTsKKwkJYXNzZXJ0KHJsd19nZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3KSA9PSAxKTsKKwkJYXNzZXJ0KHJsd19nZXRfbGl0ZXJhbF93b3JkcyhzZWxmLT5ybHcpID09IDApOworCQlyZXR1cm4gMTsKKwl9Cit9CisKK3NpemVfdCBld2FoX2FkZChzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGV3b3JkX3Qgd29yZCkKK3sKKwlzZWxmLT5iaXRfc2l6ZSArPSBCSVRTX0lOX0VXT1JEOworCisJaWYgKHdvcmQgPT0gMCkKKwkJcmV0dXJuIGFkZF9lbXB0eV93b3JkKHNlbGYsIDApOworCisJaWYgKHdvcmQgPT0gKGV3b3JkX3QpKH4wKSkKKwkJcmV0dXJuIGFkZF9lbXB0eV93b3JkKHNlbGYsIDEpOworCisJcmV0dXJuIGFkZF9saXRlcmFsKHNlbGYsIHdvcmQpOworfQorCit2b2lkIGV3YWhfc2V0KHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgc2l6ZV90IGkpCit7CisJY29uc3Qgc2l6ZV90IGRpc3QgPQorCQlESVZfUk9VTkRfVVAoaSArIDEsIEJJVFNfSU5fRVdPUkQpIC0KKwkJRElWX1JPVU5EX1VQKHNlbGYtPmJpdF9zaXplLCBCSVRTX0lOX0VXT1JEKTsKKworCWFzc2VydChpID49IHNlbGYtPmJpdF9zaXplKTsKKworCXNlbGYtPmJpdF9zaXplID0gaSArIDE7CisKKwlpZiAoZGlzdCA+IDApIHsKKwkJaWYgKGRpc3QgPiAxKQorCQkJYWRkX2VtcHR5X3dvcmRzKHNlbGYsIDAsIGRpc3QgLSAxKTsKKworCQlhZGRfbGl0ZXJhbChzZWxmLCAoZXdvcmRfdCkxIDw8IChpICUgQklUU19JTl9FV09SRCkpOworCQlyZXR1cm47CisJfQorCisJaWYgKHJsd19nZXRfbGl0ZXJhbF93b3JkcyhzZWxmLT5ybHcpID09IDApIHsKKwkJcmx3X3NldF9ydW5uaW5nX2xlbihzZWxmLT5ybHcsCisJCQlybHdfZ2V0X3J1bm5pbmdfbGVuKHNlbGYtPnJsdykgLSAxKTsKKwkJYWRkX2xpdGVyYWwoc2VsZiwgKGV3b3JkX3QpMSA8PCAoaSAlIEJJVFNfSU5fRVdPUkQpKTsKKwkJcmV0dXJuOworCX0KKworCXNlbGYtPmJ1ZmZlcltzZWxmLT5idWZmZXJfc2l6ZSAtIDFdIHw9CisJCSgoZXdvcmRfdCkxIDw8IChpICUgQklUU19JTl9FV09SRCkpOworCisJLyogY2hlY2sgaWYgd2UganVzdCBjb21wbGV0ZWQgYSBzdHJlYW0gb2YgMXMgKi8KKwlpZiAoc2VsZi0+YnVmZmVyW3NlbGYtPmJ1ZmZlcl9zaXplIC0gMV0gPT0gKGV3b3JkX3QpKH4wKSkgeworCQlzZWxmLT5idWZmZXJbLS1zZWxmLT5idWZmZXJfc2l6ZV0gPSAwOworCQlybHdfc2V0X2xpdGVyYWxfd29yZHMoc2VsZi0+cmx3LAorCQkJcmx3X2dldF9saXRlcmFsX3dvcmRzKHNlbGYtPnJsdykgLSAxKTsKKwkJYWRkX2VtcHR5X3dvcmQoc2VsZiwgMSk7CisJfQorfQorCit2b2lkIGV3YWhfZWFjaF9iaXQoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCB2b2lkICgqY2FsbGJhY2spKHNpemVfdCwgdm9pZCopLCB2b2lkICpwYXlsb2FkKQoreworCXNpemVfdCBwb3MgPSAwOworCXNpemVfdCBwb2ludGVyID0gMDsKKwlzaXplX3QgazsKKworCXdoaWxlIChwb2ludGVyIDwgc2VsZi0+YnVmZmVyX3NpemUpIHsKKwkJZXdvcmRfdCAqd29yZCA9ICZzZWxmLT5idWZmZXJbcG9pbnRlcl07CisKKwkJaWYgKHJsd19nZXRfcnVuX2JpdCh3b3JkKSkgeworCQkJc2l6ZV90IGxlbiA9IHJsd19nZXRfcnVubmluZ19sZW4od29yZCkgKiBCSVRTX0lOX0VXT1JEOworCQkJZm9yIChrID0gMDsgayA8IGxlbjsgKytrLCArK3BvcykKKwkJCQljYWxsYmFjayhwb3MsIHBheWxvYWQpOworCQl9IGVsc2UgeworCQkJcG9zICs9IHJsd19nZXRfcnVubmluZ19sZW4od29yZCkgKiBCSVRTX0lOX0VXT1JEOworCQl9CisKKwkJKytwb2ludGVyOworCisJCWZvciAoayA9IDA7IGsgPCBybHdfZ2V0X2xpdGVyYWxfd29yZHMod29yZCk7ICsraykgeworCQkJaW50IGM7CisKKwkJCS8qIHRvZG86IHplcm8gY291bnQgb3B0aW1pemF0aW9uICovCisJCQlmb3IgKGMgPSAwOyBjIDwgQklUU19JTl9FV09SRDsgKytjLCArK3BvcykgeworCQkJCWlmICgoc2VsZi0+YnVmZmVyW3BvaW50ZXJdICYgKChld29yZF90KTEgPDwgYykpICE9IDApCisJCQkJCWNhbGxiYWNrKHBvcywgcGF5bG9hZCk7CisJCQl9CisKKwkJCSsrcG9pbnRlcjsKKwkJfQorCX0KK30KKworLyoqCisgKiBDbGVhciBhbGwgdGhlIGJpdHMgaW4gdGhlIGJpdG1hcC4gRG9lcyBub3QgZnJlZSBvciByZXNpemUKKyAqIG1lbW9yeS4KKyAqLworc3RhdGljIHZvaWQgZXdhaF9jbGVhcihzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYpCit7CisJc2VsZi0+YnVmZmVyX3NpemUgPSAxOworCXNlbGYtPmJ1ZmZlclswXSA9IDA7CisJc2VsZi0+Yml0X3NpemUgPSAwOworCXNlbGYtPnJsdyA9IHNlbGYtPmJ1ZmZlcjsKK30KKworc3RydWN0IGV3YWhfYml0bWFwICpld2FoX25ldyh2b2lkKQoreworCXN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZjsKKworCXNlbGYgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgZXdhaF9iaXRtYXApKTsKKwlzZWxmLT5hbGxvY19zaXplID0gMzI7CisJQUxMT0NfQVJSQVkoc2VsZi0+YnVmZmVyLCBzZWxmLT5hbGxvY19zaXplKTsKKworCWV3YWhfY2xlYXIoc2VsZik7CisJcmV0dXJuIHNlbGY7Cit9CisKK3ZvaWQgZXdhaF9mcmVlKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZikKK3sKKwlpZiAoIXNlbGYpCisJCXJldHVybjsKKworCWlmIChzZWxmLT5hbGxvY19zaXplKQorCQlmcmVlKHNlbGYtPmJ1ZmZlcik7CisKKwlmcmVlKHNlbGYpOworfQorCitzdGF0aWMgdm9pZCByZWFkX25ld19ybHcoc3RydWN0IGV3YWhfaXRlcmF0b3IgKml0KQoreworCWNvbnN0IGV3b3JkX3QgKndvcmQgPSBOVUxMOworCisJaXQtPmxpdGVyYWxzID0gMDsKKwlpdC0+Y29tcHJlc3NlZCA9IDA7CisKKwl3aGlsZSAoMSkgeworCQl3b3JkID0gJml0LT5idWZmZXJbaXQtPnBvaW50ZXJdOworCisJCWl0LT5ybCA9IHJsd19nZXRfcnVubmluZ19sZW4od29yZCk7CisJCWl0LT5sdyA9IHJsd19nZXRfbGl0ZXJhbF93b3Jkcyh3b3JkKTsKKwkJaXQtPmIgPSBybHdfZ2V0X3J1bl9iaXQod29yZCk7CisKKwkJaWYgKGl0LT5ybCB8fCBpdC0+bHcpCisJCQlyZXR1cm47CisKKwkJaWYgKGl0LT5wb2ludGVyIDwgaXQtPmJ1ZmZlcl9zaXplIC0gMSkgeworCQkJaXQtPnBvaW50ZXIrKzsKKwkJfSBlbHNlIHsKKwkJCWl0LT5wb2ludGVyID0gaXQtPmJ1ZmZlcl9zaXplOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCitpbnQgZXdhaF9pdGVyYXRvcl9uZXh0KGV3b3JkX3QgKm5leHQsIHN0cnVjdCBld2FoX2l0ZXJhdG9yICppdCkKK3sKKwlpZiAoaXQtPnBvaW50ZXIgPj0gaXQtPmJ1ZmZlcl9zaXplKQorCQlyZXR1cm4gMDsKKworCWlmIChpdC0+Y29tcHJlc3NlZCA8IGl0LT5ybCkgeworCQlpdC0+Y29tcHJlc3NlZCsrOworCQkqbmV4dCA9IGl0LT5iID8gKGV3b3JkX3QpKH4wKSA6IDA7CisJfSBlbHNlIHsKKwkJYXNzZXJ0KGl0LT5saXRlcmFscyA8IGl0LT5sdyk7CisKKwkJaXQtPmxpdGVyYWxzKys7CisJCWl0LT5wb2ludGVyKys7CisKKwkJYXNzZXJ0KGl0LT5wb2ludGVyIDwgaXQtPmJ1ZmZlcl9zaXplKTsKKworCQkqbmV4dCA9IGl0LT5idWZmZXJbaXQtPnBvaW50ZXJdOworCX0KKworCWlmIChpdC0+Y29tcHJlc3NlZCA9PSBpdC0+cmwgJiYgaXQtPmxpdGVyYWxzID09IGl0LT5sdykgeworCQlpZiAoKytpdC0+cG9pbnRlciA8IGl0LT5idWZmZXJfc2l6ZSkKKwkJCXJlYWRfbmV3X3JsdyhpdCk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgZXdhaF9pdGVyYXRvcl9pbml0KHN0cnVjdCBld2FoX2l0ZXJhdG9yICppdCwgc3RydWN0IGV3YWhfYml0bWFwICpwYXJlbnQpCit7CisJaXQtPmJ1ZmZlciA9IHBhcmVudC0+YnVmZmVyOworCWl0LT5idWZmZXJfc2l6ZSA9IHBhcmVudC0+YnVmZmVyX3NpemU7CisJaXQtPnBvaW50ZXIgPSAwOworCisJaXQtPmx3ID0gMDsKKwlpdC0+cmwgPSAwOworCWl0LT5jb21wcmVzc2VkID0gMDsKKwlpdC0+bGl0ZXJhbHMgPSAwOworCWl0LT5iID0gMDsKKworCWlmIChpdC0+cG9pbnRlciA8IGl0LT5idWZmZXJfc2l6ZSkKKwkJcmVhZF9uZXdfcmx3KGl0KTsKK30KKwordm9pZCBld2FoX3hvcigKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmV3YWhfaSwKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmV3YWhfaiwKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKm91dCkKK3sKKwlzdHJ1Y3Qgcmx3X2l0ZXJhdG9yIHJsd19pOworCXN0cnVjdCBybHdfaXRlcmF0b3Igcmx3X2o7CisJc2l6ZV90IGxpdGVyYWxzOworCisJcmx3aXRfaW5pdCgmcmx3X2ksIGV3YWhfaSk7CisJcmx3aXRfaW5pdCgmcmx3X2osIGV3YWhfaik7CisKKwl3aGlsZSAocmx3aXRfd29yZF9zaXplKCZybHdfaSkgPiAwICYmIHJsd2l0X3dvcmRfc2l6ZSgmcmx3X2opID4gMCkgeworCQl3aGlsZSAocmx3X2kucmx3LnJ1bm5pbmdfbGVuID4gMCB8fCBybHdfai5ybHcucnVubmluZ19sZW4gPiAwKSB7CisJCQlzdHJ1Y3Qgcmx3X2l0ZXJhdG9yICpwcmV5LCAqcHJlZGF0b3I7CisJCQlzaXplX3QgaW5kZXg7CisJCQlpbnQgbmVnYXRlX3dvcmRzOworCisJCQlpZiAocmx3X2kucmx3LnJ1bm5pbmdfbGVuIDwgcmx3X2oucmx3LnJ1bm5pbmdfbGVuKSB7CisJCQkJcHJleSA9ICZybHdfaTsKKwkJCQlwcmVkYXRvciA9ICZybHdfajsKKwkJCX0gZWxzZSB7CisJCQkJcHJleSA9ICZybHdfajsKKwkJCQlwcmVkYXRvciA9ICZybHdfaTsKKwkJCX0KKworCQkJbmVnYXRlX3dvcmRzID0gISFwcmVkYXRvci0+cmx3LnJ1bm5pbmdfYml0OworCQkJaW5kZXggPSBybHdpdF9kaXNjaGFyZ2UocHJleSwgb3V0LAorCQkJCXByZWRhdG9yLT5ybHcucnVubmluZ19sZW4sIG5lZ2F0ZV93b3Jkcyk7CisKKwkJCWV3YWhfYWRkX2VtcHR5X3dvcmRzKG91dCwgbmVnYXRlX3dvcmRzLAorCQkJCXByZWRhdG9yLT5ybHcucnVubmluZ19sZW4gLSBpbmRleCk7CisKKwkJCXJsd2l0X2Rpc2NhcmRfZmlyc3Rfd29yZHMocHJlZGF0b3IsCisJCQkJcHJlZGF0b3ItPnJsdy5ydW5uaW5nX2xlbik7CisJCX0KKworCQlsaXRlcmFscyA9IG1pbl9zaXplKAorCQkJcmx3X2kucmx3LmxpdGVyYWxfd29yZHMsCisJCQlybHdfai5ybHcubGl0ZXJhbF93b3Jkcyk7CisKKwkJaWYgKGxpdGVyYWxzKSB7CisJCQlzaXplX3QgazsKKworCQkJZm9yIChrID0gMDsgayA8IGxpdGVyYWxzOyArK2spIHsKKwkJCQlld2FoX2FkZChvdXQsCisJCQkJCXJsd19pLmJ1ZmZlcltybHdfaS5saXRlcmFsX3dvcmRfc3RhcnQgKyBrXSBeCisJCQkJCXJsd19qLmJ1ZmZlcltybHdfai5saXRlcmFsX3dvcmRfc3RhcnQgKyBrXQorCQkJCSk7CisJCQl9CisKKwkJCXJsd2l0X2Rpc2NhcmRfZmlyc3Rfd29yZHMoJnJsd19pLCBsaXRlcmFscyk7CisJCQlybHdpdF9kaXNjYXJkX2ZpcnN0X3dvcmRzKCZybHdfaiwgbGl0ZXJhbHMpOworCQl9CisJfQorCisJaWYgKHJsd2l0X3dvcmRfc2l6ZSgmcmx3X2kpID4gMCkKKwkJcmx3aXRfZGlzY2hhcmdlKCZybHdfaSwgb3V0LCB+MCwgMCk7CisJZWxzZQorCQlybHdpdF9kaXNjaGFyZ2UoJnJsd19qLCBvdXQsIH4wLCAwKTsKKworCW91dC0+Yml0X3NpemUgPSBtYXhfc2l6ZShld2FoX2ktPmJpdF9zaXplLCBld2FoX2otPmJpdF9zaXplKTsKK30KKworI2RlZmluZSBCSVRNQVBfUE9PTF9NQVggMTYKK3N0YXRpYyBzdHJ1Y3QgZXdhaF9iaXRtYXAgKmJpdG1hcF9wb29sW0JJVE1BUF9QT09MX01BWF07CitzdGF0aWMgc2l6ZV90IGJpdG1hcF9wb29sX3NpemU7CisKK3N0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9wb29sX25ldyh2b2lkKQoreworCWlmIChiaXRtYXBfcG9vbF9zaXplKQorCQlyZXR1cm4gYml0bWFwX3Bvb2xbLS1iaXRtYXBfcG9vbF9zaXplXTsKKworCXJldHVybiBld2FoX25ldygpOworfQorCit2b2lkIGV3YWhfcG9vbF9mcmVlKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZikKK3sKKwlpZiAoc2VsZiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoYml0bWFwX3Bvb2xfc2l6ZSA9PSBCSVRNQVBfUE9PTF9NQVggfHwKKwkJc2VsZi0+YWxsb2Nfc2l6ZSA9PSAwKSB7CisJCWV3YWhfZnJlZShzZWxmKTsKKwkJcmV0dXJuOworCX0KKworCWV3YWhfY2xlYXIoc2VsZik7CisJYml0bWFwX3Bvb2xbYml0bWFwX3Bvb2xfc2l6ZSsrXSA9IHNlbGY7Cit9CisKK3VpbnQzMl90IGV3YWhfY2hlY2tzdW0oc3RydWN0IGV3YWhfYml0bWFwICpzZWxmKQoreworCWNvbnN0IHVpbnQ4X3QgKnAgPSAodWludDhfdCAqKXNlbGYtPmJ1ZmZlcjsKKwl1aW50MzJfdCBjcmMgPSAodWludDMyX3Qpc2VsZi0+Yml0X3NpemU7CisJc2l6ZV90IHNpemUgPSBzZWxmLT5idWZmZXJfc2l6ZSAqIHNpemVvZihld29yZF90KTsKKworCXdoaWxlIChzaXplLS0pCisJCWNyYyA9IChjcmMgPDwgNSkgLSBjcmMgKyAodWludDMyX3QpKnArKzsKKworCXJldHVybiBjcmM7Cit9CmRpZmYgLS1naXQgYS9ld2FoL2V3YWhfaW8uYyBiL2V3YWgvZXdhaF9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMzVlZTYKLS0tIC9kZXYvbnVsbAorKysgYi9ld2FoL2V3YWhfaW8uYwpAQCAtMCwwICsxLDEzNCBAQAorLyoqCisgKiBDb3B5cmlnaHQgMjAxMywgR2l0SHViLCBJbmMKKyAqIENvcHlyaWdodCAyMDA5LTIwMTMsIERhbmllbCBMZW1pcmUsIENsaWZmIE1vb24sCisgKglEYXZpZCBNY0ludG9zaCwgUm9iZXJ0IEJlY2hvLCBHb29nbGUgSW5jLiBhbmQgVmVyb25pa2EgWmVuegorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImV3b2suaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworaW50IGV3YWhfc2VyaWFsaXplX3RvKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwKKwkJICAgICAgaW50ICgqd3JpdGVfZnVuKSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KSwKKwkJICAgICAgdm9pZCAqZGF0YSkKK3sKKwlzaXplX3QgaTsKKwlld29yZF90IGR1bXBbMjA0OF07CisJY29uc3Qgc2l6ZV90IHdvcmRzX3Blcl9kdW1wID0gc2l6ZW9mKGR1bXApIC8gc2l6ZW9mKGV3b3JkX3QpOworCXVpbnQzMl90IGJpdHNpemUsIHdvcmRfY291bnQsIHJsd19wb3M7CisKKwljb25zdCBld29yZF90ICpidWZmZXI7CisJc2l6ZV90IHdvcmRzX2xlZnQ7CisKKwkvKiAzMiBiaXQgLS0gYml0IHNpemUgZm9yIHRoZSBtYXAgKi8KKwliaXRzaXplID0gIGh0b25sKCh1aW50MzJfdClzZWxmLT5iaXRfc2l6ZSk7CisJaWYgKHdyaXRlX2Z1bihkYXRhLCAmYml0c2l6ZSwgNCkgIT0gNCkKKwkJcmV0dXJuIC0xOworCisJLyoqIDMyIGJpdCAtLSBudW1iZXIgb2YgY29tcHJlc3NlZCA2NC1iaXQgd29yZHMgKi8KKwl3b3JkX2NvdW50ID0gIGh0b25sKCh1aW50MzJfdClzZWxmLT5idWZmZXJfc2l6ZSk7CisJaWYgKHdyaXRlX2Z1bihkYXRhLCAmd29yZF9jb3VudCwgNCkgIT0gNCkKKwkJcmV0dXJuIC0xOworCisJLyoqIDY0IGJpdCB4IE4gLS0gY29tcHJlc3NlZCB3b3JkcyAqLworCWJ1ZmZlciA9IHNlbGYtPmJ1ZmZlcjsKKwl3b3Jkc19sZWZ0ID0gc2VsZi0+YnVmZmVyX3NpemU7CisKKwl3aGlsZSAod29yZHNfbGVmdCA+PSB3b3Jkc19wZXJfZHVtcCkgeworCQlmb3IgKGkgPSAwOyBpIDwgd29yZHNfcGVyX2R1bXA7ICsraSwgKytidWZmZXIpCisJCQlkdW1wW2ldID0gaHRvbmxsKCpidWZmZXIpOworCisJCWlmICh3cml0ZV9mdW4oZGF0YSwgZHVtcCwgc2l6ZW9mKGR1bXApKSAhPSBzaXplb2YoZHVtcCkpCisJCQlyZXR1cm4gLTE7CisKKwkJd29yZHNfbGVmdCAtPSB3b3Jkc19wZXJfZHVtcDsKKwl9CisKKwlpZiAod29yZHNfbGVmdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgd29yZHNfbGVmdDsgKytpLCArK2J1ZmZlcikKKwkJCWR1bXBbaV0gPSBodG9ubGwoKmJ1ZmZlcik7CisKKwkJaWYgKHdyaXRlX2Z1bihkYXRhLCBkdW1wLCB3b3Jkc19sZWZ0ICogOCkgIT0gd29yZHNfbGVmdCAqIDgpCisJCQlyZXR1cm4gLTE7CisJfQorCisJLyoqIDMyIGJpdCAtLSBwb3NpdGlvbiBmb3IgdGhlIFJMVyAqLworCXJsd19wb3MgPSAodWludDhfdCopc2VsZi0+cmx3IC0gKHVpbnQ4X3QgKilzZWxmLT5idWZmZXI7CisJcmx3X3BvcyA9IGh0b25sKHJsd19wb3MgLyBzaXplb2YoZXdvcmRfdCkpOworCisJaWYgKHdyaXRlX2Z1bihkYXRhLCAmcmx3X3BvcywgNCkgIT0gNCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuICgzICogNCkgKyAoc2VsZi0+YnVmZmVyX3NpemUgKiA4KTsKK30KKworc3RhdGljIGludCB3cml0ZV9zdHJidWYodm9pZCAqdXNlcl9kYXRhLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzdHJidWYgKnNiID0gdXNlcl9kYXRhOworCXN0cmJ1Zl9hZGQoc2IsIGRhdGEsIGxlbik7CisJcmV0dXJuIGxlbjsKK30KKworaW50IGV3YWhfc2VyaWFsaXplX3N0cmJ1ZihzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIHN0cnVjdCBzdHJidWYgKnNiKQoreworCXJldHVybiBld2FoX3NlcmlhbGl6ZV90byhzZWxmLCB3cml0ZV9zdHJidWYsIHNiKTsKK30KKworc3NpemVfdCBld2FoX3JlYWRfbW1hcChzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGNvbnN0IHZvaWQgKm1hcCwgc2l6ZV90IGxlbikKK3sKKwljb25zdCB1aW50OF90ICpwdHIgPSBtYXA7CisJc2l6ZV90IGRhdGFfbGVuOworCXNpemVfdCBpOworCisJaWYgKGxlbiA8IHNpemVvZih1aW50MzJfdCkpCisJCXJldHVybiBlcnJvcigiY29ycnVwdCBld2FoIGJpdG1hcDogZW9mIGJlZm9yZSBiaXQgc2l6ZSIpOworCXNlbGYtPmJpdF9zaXplID0gZ2V0X2JlMzIocHRyKTsKKwlwdHIgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKwlsZW4gLT0gc2l6ZW9mKHVpbnQzMl90KTsKKworCWlmIChsZW4gPCBzaXplb2YodWludDMyX3QpKQorCQlyZXR1cm4gZXJyb3IoImNvcnJ1cHQgZXdhaCBiaXRtYXA6IGVvZiBiZWZvcmUgbGVuZ3RoIik7CisJc2VsZi0+YnVmZmVyX3NpemUgPSBzZWxmLT5hbGxvY19zaXplID0gZ2V0X2JlMzIocHRyKTsKKwlwdHIgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKwlsZW4gLT0gc2l6ZW9mKHVpbnQzMl90KTsKKworCVJFQUxMT0NfQVJSQVkoc2VsZi0+YnVmZmVyLCBzZWxmLT5hbGxvY19zaXplKTsKKworCS8qCisJICogQ29weSB0aGUgcmF3IGRhdGEgZm9yIHRoZSBiaXRtYXAgYXMgYSB3aG9sZSBjaHVuazsKKwkgKiBpZiB3ZSdyZSBpbiBhIGxpdHRsZS1lbmRpYW4gcGxhdGZvcm0sIHdlJ2xsIHBlcmZvcm0KKwkgKiB0aGUgZW5kaWFubmVzcyBjb252ZXJzaW9uIGluIGEgc2VwYXJhdGUgcGFzcyB0byBlbnN1cmUKKwkgKiB3ZSdyZSBsb2FkaW5nIDgtYnl0ZSBhbGlnbmVkIHdvcmRzLgorCSAqLworCWRhdGFfbGVuID0gc3RfbXVsdChzZWxmLT5idWZmZXJfc2l6ZSwgc2l6ZW9mKGV3b3JkX3QpKTsKKwlpZiAobGVuIDwgZGF0YV9sZW4pCisJCXJldHVybiBlcnJvcigiY29ycnVwdCBld2FoIGJpdG1hcDogZW9mIGluIGRhdGEgIgorCQkJICAgICAiKCUiUFJJdU1BWCIgYnl0ZXMgc2hvcnQpIiwKKwkJCSAgICAgKHVpbnRtYXhfdCkoZGF0YV9sZW4gLSBsZW4pKTsKKwltZW1jcHkoc2VsZi0+YnVmZmVyLCBwdHIsIGRhdGFfbGVuKTsKKwlwdHIgKz0gZGF0YV9sZW47CisJbGVuIC09IGRhdGFfbGVuOworCisJZm9yIChpID0gMDsgaSA8IHNlbGYtPmJ1ZmZlcl9zaXplOyArK2kpCisJCXNlbGYtPmJ1ZmZlcltpXSA9IG50b2hsbChzZWxmLT5idWZmZXJbaV0pOworCisJaWYgKGxlbiA8IHNpemVvZih1aW50MzJfdCkpCisJCXJldHVybiBlcnJvcigiY29ycnVwdCBld2FoIGJpdG1hcDogZW9mIGJlZm9yZSBybHciKTsKKwlzZWxmLT5ybHcgPSBzZWxmLT5idWZmZXIgKyBnZXRfYmUzMihwdHIpOworCXB0ciArPSBzaXplb2YodWludDMyX3QpOworCWxlbiAtPSBzaXplb2YodWludDMyX3QpOworCisJcmV0dXJuIHB0ciAtIChjb25zdCB1aW50OF90ICopbWFwOworfQpkaWZmIC0tZ2l0IGEvZXdhaC9ld2FoX3Jsdy5jIGIvZXdhaC9ld2FoX3Jsdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOTNkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9ld2FoL2V3YWhfcmx3LmMKQEAgLTAsMCArMSwxMDYgQEAKKy8qKgorICogQ29weXJpZ2h0IDIwMTMsIEdpdEh1YiwgSW5jCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEzLCBEYW5pZWwgTGVtaXJlLCBDbGlmZiBNb29uLAorICoJRGF2aWQgTWNJbnRvc2gsIFJvYmVydCBCZWNobywgR29vZ2xlIEluYy4gYW5kIFZlcm9uaWthIFplbnoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJld29rLmgiCisjaW5jbHVkZSAiZXdva19ybHcuaCIKKworc3RhdGljIGlubGluZSBpbnQgbmV4dF93b3JkKHN0cnVjdCBybHdfaXRlcmF0b3IgKml0KQoreworCWlmIChpdC0+cG9pbnRlciA+PSBpdC0+c2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpdC0+cmx3LndvcmQgPSAmaXQtPmJ1ZmZlcltpdC0+cG9pbnRlcl07CisJaXQtPnBvaW50ZXIgKz0gcmx3X2dldF9saXRlcmFsX3dvcmRzKGl0LT5ybHcud29yZCkgKyAxOworCisJaXQtPnJsdy5saXRlcmFsX3dvcmRzID0gcmx3X2dldF9saXRlcmFsX3dvcmRzKGl0LT5ybHcud29yZCk7CisJaXQtPnJsdy5ydW5uaW5nX2xlbiA9IHJsd19nZXRfcnVubmluZ19sZW4oaXQtPnJsdy53b3JkKTsKKwlpdC0+cmx3LnJ1bm5pbmdfYml0ID0gcmx3X2dldF9ydW5fYml0KGl0LT5ybHcud29yZCk7CisJaXQtPnJsdy5saXRlcmFsX3dvcmRfb2Zmc2V0ID0gMDsKKworCXJldHVybiAxOworfQorCit2b2lkIHJsd2l0X2luaXQoc3RydWN0IHJsd19pdGVyYXRvciAqaXQsIHN0cnVjdCBld2FoX2JpdG1hcCAqZnJvbV9ld2FoKQoreworCWl0LT5idWZmZXIgPSBmcm9tX2V3YWgtPmJ1ZmZlcjsKKwlpdC0+c2l6ZSA9IGZyb21fZXdhaC0+YnVmZmVyX3NpemU7CisJaXQtPnBvaW50ZXIgPSAwOworCisJbmV4dF93b3JkKGl0KTsKKworCWl0LT5saXRlcmFsX3dvcmRfc3RhcnQgPSBybHdpdF9saXRlcmFsX3dvcmRzKGl0KSArCisJCWl0LT5ybHcubGl0ZXJhbF93b3JkX29mZnNldDsKK30KKwordm9pZCBybHdpdF9kaXNjYXJkX2ZpcnN0X3dvcmRzKHN0cnVjdCBybHdfaXRlcmF0b3IgKml0LCBzaXplX3QgeCkKK3sKKwl3aGlsZSAoeCA+IDApIHsKKwkJc2l6ZV90IGRpc2NhcmQ7CisKKwkJaWYgKGl0LT5ybHcucnVubmluZ19sZW4gPiB4KSB7CisJCQlpdC0+cmx3LnJ1bm5pbmdfbGVuIC09IHg7CisJCQlyZXR1cm47CisJCX0KKworCQl4IC09IGl0LT5ybHcucnVubmluZ19sZW47CisJCWl0LT5ybHcucnVubmluZ19sZW4gPSAwOworCisJCWRpc2NhcmQgPSAoeCA+IGl0LT5ybHcubGl0ZXJhbF93b3JkcykgPyBpdC0+cmx3LmxpdGVyYWxfd29yZHMgOiB4OworCisJCWl0LT5saXRlcmFsX3dvcmRfc3RhcnQgKz0gZGlzY2FyZDsKKwkJaXQtPnJsdy5saXRlcmFsX3dvcmRzIC09IGRpc2NhcmQ7CisJCXggLT0gZGlzY2FyZDsKKworCQlpZiAoeCA+IDAgfHwgcmx3aXRfd29yZF9zaXplKGl0KSA9PSAwKSB7CisJCQlpZiAoIW5leHRfd29yZChpdCkpCisJCQkJYnJlYWs7CisKKwkJCWl0LT5saXRlcmFsX3dvcmRfc3RhcnQgPQorCQkJCXJsd2l0X2xpdGVyYWxfd29yZHMoaXQpICsgaXQtPnJsdy5saXRlcmFsX3dvcmRfb2Zmc2V0OworCQl9CisJfQorfQorCitzaXplX3Qgcmx3aXRfZGlzY2hhcmdlKAorCXN0cnVjdCBybHdfaXRlcmF0b3IgKml0LCBzdHJ1Y3QgZXdhaF9iaXRtYXAgKm91dCwgc2l6ZV90IG1heCwgaW50IG5lZ2F0ZSkKK3sKKwlzaXplX3QgaW5kZXggPSAwOworCisJd2hpbGUgKGluZGV4IDwgbWF4ICYmIHJsd2l0X3dvcmRfc2l6ZShpdCkgPiAwKSB7CisJCXNpemVfdCBwZCwgcGwgPSBpdC0+cmx3LnJ1bm5pbmdfbGVuOworCisJCWlmIChpbmRleCArIHBsID4gbWF4KQorCQkJcGwgPSBtYXggLSBpbmRleDsKKworCQlld2FoX2FkZF9lbXB0eV93b3JkcyhvdXQsIGl0LT5ybHcucnVubmluZ19iaXQgXiBuZWdhdGUsIHBsKTsKKwkJaW5kZXggKz0gcGw7CisKKwkJcGQgPSBpdC0+cmx3LmxpdGVyYWxfd29yZHM7CisJCWlmIChwZCArIGluZGV4ID4gbWF4KQorCQkJcGQgPSBtYXggLSBpbmRleDsKKworCQlld2FoX2FkZF9kaXJ0eV93b3JkcyhvdXQsCisJCQlpdC0+YnVmZmVyICsgaXQtPmxpdGVyYWxfd29yZF9zdGFydCwgcGQsIG5lZ2F0ZSk7CisKKwkJcmx3aXRfZGlzY2FyZF9maXJzdF93b3JkcyhpdCwgcGQgKyBwbCk7CisJCWluZGV4ICs9IHBkOworCX0KKworCXJldHVybiBpbmRleDsKK30KZGlmZiAtLWdpdCBhL2V3YWgvZXdvay5oIGIvZXdhaC9ld29rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExODUyYgotLS0gL2Rldi9udWxsCisrKyBiL2V3YWgvZXdvay5oCkBAIC0wLDAgKzEsMTkzIEBACisvKioKKyAqIENvcHlyaWdodCAyMDEzLCBHaXRIdWIsIEluYworICogQ29weXJpZ2h0IDIwMDktMjAxMywgRGFuaWVsIExlbWlyZSwgQ2xpZmYgTW9vbiwKKyAqCURhdmlkIE1jSW50b3NoLCBSb2JlcnQgQmVjaG8sIEdvb2dsZSBJbmMuIGFuZCBWZXJvbmlrYSBaZW56CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaWZuZGVmIF9fRVdPS19CSVRNQVBfSF9fCisjZGVmaW5lIF9fRVdPS19CSVRNQVBfSF9fCisKK3N0cnVjdCBzdHJidWY7Cit0eXBlZGVmIHVpbnQ2NF90IGV3b3JkX3Q7CisjZGVmaW5lIEJJVFNfSU5fRVdPUkQgKHNpemVvZihld29yZF90KSAqIDgpCisKKy8qKgorICogRG8gbm90IHVzZSBfX2J1aWx0aW5fcG9wY291bnRsbC4gVGhlIEdDQyBpbXBsZW1lbnRhdGlvbgorICogaXMgbm90b3Jpb3VzbHkgc2xvdyBvbiBhbGwgcGxhdGZvcm1zLgorICoKKyAqIFNlZTogaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0zNjA0MQorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGV3YWhfYml0X3BvcGNvdW50NjQodWludDY0X3QgeCkKK3sKKwl4ID0gKHggJiAweDU1NTU1NTU1NTU1NTU1NTVVTEwpICsgKCh4ID4+ICAxKSAmIDB4NTU1NTU1NTU1NTU1NTU1NVVMTCk7CisJeCA9ICh4ICYgMHgzMzMzMzMzMzMzMzMzMzMzVUxMKSArICgoeCA+PiAgMikgJiAweDMzMzMzMzMzMzMzMzMzMzNVTEwpOworCXggPSAoeCAmIDB4MEYwRjBGMEYwRjBGMEYwRlVMTCkgKyAoKHggPj4gIDQpICYgMHgwRjBGMEYwRjBGMEYwRjBGVUxMKTsKKwlyZXR1cm4gKHggKiAweDAxMDEwMTAxMDEwMTAxMDFVTEwpID4+IDU2OworfQorCisvKiBfX2J1aWx0aW5fY3R6bGwgd2FzIG5vdCBhdmFpbGFibGUgdW50aWwgMy40LjAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICAmJiBfX0dOVUNfTUlOT1IgPiAzKSkKKyNkZWZpbmUgZXdhaF9iaXRfY3R6NjQoeCkgX19idWlsdGluX2N0emxsKHgpCisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgZXdhaF9iaXRfY3R6NjQodWludDY0X3QgeCkKK3sKKwlpbnQgbiA9IDA7CisJaWYgKCh4ICYgMHhmZmZmZmZmZikgPT0gMCkgeyB4ID4+PSAzMjsgbiArPSAzMjsgfQorCWlmICgoeCAmICAgICAweGZmZmYpID09IDApIHsgeCA+Pj0gMTY7IG4gKz0gMTY7IH0KKwlpZiAoKHggJiAgICAgICAweGZmKSA9PSAwKSB7IHggPj49ICA4OyBuICs9ICA4OyB9CisJaWYgKCh4ICYgICAgICAgIDB4ZikgPT0gMCkgeyB4ID4+PSAgNDsgbiArPSAgNDsgfQorCWlmICgoeCAmICAgICAgICAweDMpID09IDApIHsgeCA+Pj0gIDI7IG4gKz0gIDI7IH0KKwlpZiAoKHggJiAgICAgICAgMHgxKSA9PSAwKSB7IHggPj49ICAxOyBuICs9ICAxOyB9CisJcmV0dXJuIG4gKyAheDsKK30KKyNlbmRpZgorCitzdHJ1Y3QgZXdhaF9iaXRtYXAgeworCWV3b3JkX3QgKmJ1ZmZlcjsKKwlzaXplX3QgYnVmZmVyX3NpemU7CisJc2l6ZV90IGFsbG9jX3NpemU7CisJc2l6ZV90IGJpdF9zaXplOworCWV3b3JkX3QgKnJsdzsKK307CisKK3R5cGVkZWYgdm9pZCAoKmV3YWhfY2FsbGJhY2spKHNpemVfdCBwb3MsIHZvaWQgKik7CisKK3N0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9wb29sX25ldyh2b2lkKTsKK3ZvaWQgZXdhaF9wb29sX2ZyZWUoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmKTsKKworLyoqCisgKiBBbGxvY2F0ZSBhIG5ldyBFV0FIIENvbXByZXNzZWQgYml0bWFwCisgKi8KK3N0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9uZXcodm9pZCk7CisKKy8qKgorICogRnJlZSBhbGwgdGhlIG1lbW9yeSBvZiB0aGUgYml0bWFwCisgKi8KK3ZvaWQgZXdhaF9mcmVlKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZik7CisKK2ludCBld2FoX3NlcmlhbGl6ZV90byhzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsCisJCSAgICAgIGludCAoKndyaXRlX2Z1bikodm9pZCAqb3V0LCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pLAorCQkgICAgICB2b2lkICpvdXQpOworaW50IGV3YWhfc2VyaWFsaXplX3N0cmJ1ZihzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIHN0cnVjdCBzdHJidWYgKik7CisKK3NzaXplX3QgZXdhaF9yZWFkX21tYXAoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBjb25zdCB2b2lkICptYXAsIHNpemVfdCBsZW4pOworCit1aW50MzJfdCBld2FoX2NoZWNrc3VtKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZik7CisKKy8qKgorICogQ2FsbCB0aGUgZ2l2ZW4gY2FsbGJhY2sgd2l0aCB0aGUgcG9zaXRpb24gb2YgZXZlcnkgc2luZ2xlIGJpdAorICogdGhhdCBoYXMgYmVlbiBzZXQgb24gdGhlIGJpdG1hcC4KKyAqCisgKiBUaGlzIGlzIGFuIGVmZmljaWVudCBvcGVyYXRpb24gdGhhdCBkb2VzIG5vdCBmdWxseSBkZWNvbXByZXNzCisgKiB0aGUgYml0bWFwLgorICovCit2b2lkIGV3YWhfZWFjaF9iaXQoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBld2FoX2NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpwYXlsb2FkKTsKKworLyoqCisgKiBTZXQgYSBnaXZlbiBiaXQgb24gdGhlIGJpdG1hcC4KKyAqCisgKiBUaGUgYml0IGF0IHBvc2l0aW9uIGBwb3NgIHdpbGwgYmUgc2V0IHRvIHRydWUuIEJlY2F1c2Ugb2YgdGhlCisgKiB3YXkgdGhhdCB0aGUgYml0bWFwIGlzIGNvbXByZXNzZWQsIGEgc2V0IGJpdCBjYW5ub3QgYmUgdW5zZXQKKyAqIGxhdGVyIG9uLgorICoKKyAqIEZ1cnRoZXJtb3JlLCBzaW5jZSB0aGUgYml0bWFwIHVzZXMgc3RyZWFtaW5nIGNvbXByZXNzaW9uLCBiaXRzCisgKiBjYW4gb25seSBzZXQgaW5jcmVtZW50YWxseS4KKyAqCisgKiBFLmcuCisgKgkJZXdhaF9zZXQoYml0bWFwLCAxKTsgLy8gb2sKKyAqCQlld2FoX3NldChiaXRtYXAsIDc2KTsgLy8gb2sKKyAqCQlld2FoX3NldChiaXRtYXAsIDc3KTsgLy8gb2sKKyAqCQlld2FoX3NldChiaXRtYXAsIDg3MTI4MDAxMjcpOyAvLyBvaworICoJCWV3YWhfc2V0KGJpdG1hcCwgMjUpOyAvLyBmYWlsZWQsIGFzc2VydCByYWlzZWQKKyAqLwordm9pZCBld2FoX3NldChzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIHNpemVfdCBpKTsKKworc3RydWN0IGV3YWhfaXRlcmF0b3IgeworCWNvbnN0IGV3b3JkX3QgKmJ1ZmZlcjsKKwlzaXplX3QgYnVmZmVyX3NpemU7CisKKwlzaXplX3QgcG9pbnRlcjsKKwlld29yZF90IGNvbXByZXNzZWQsIGxpdGVyYWxzOworCWV3b3JkX3QgcmwsIGx3OworCWludCBiOworfTsKKworLyoqCisgKiBJbml0aWFsaXplIGEgbmV3IGl0ZXJhdG9yIHRvIHJ1biB0aHJvdWdoIHRoZSBiaXRtYXAgaW4gdW5jb21wcmVzc2VkIGZvcm0uCisgKgorICogVGhlIGl0ZXJhdG9yIGNhbiBiZSBzdGFjayBhbGxvY2F0ZWQuIFRoZSB1bmRlcmx5aW5nIGJpdG1hcCBtdXN0IG5vdCBiZSBmcmVlZAorICogYmVmb3JlIHRoZSBpdGVyYXRpb24gaXMgb3Zlci4KKyAqCisgKiBFLmcuCisgKgorICoJCXN0cnVjdCBld2FoX2JpdG1hcCAqYml0bWFwID0gZXdhaF9uZXcoKTsKKyAqCQlzdHJ1Y3QgZXdhaF9pdGVyYXRvciBpdDsKKyAqCisgKgkJZXdhaF9pdGVyYXRvcl9pbml0KCZpdCwgYml0bWFwKTsKKyAqLwordm9pZCBld2FoX2l0ZXJhdG9yX2luaXQoc3RydWN0IGV3YWhfaXRlcmF0b3IgKml0LCBzdHJ1Y3QgZXdhaF9iaXRtYXAgKnBhcmVudCk7CisKKy8qKgorICogWWllbGQgZXZlcnkgc2luZ2xlIHdvcmQgaW4gdGhlIGJpdG1hcCBpbiB1bmNvbXByZXNzZWQgZm9ybS4gVGhpcyBpczoKKyAqIHlpZWxkIHNpbmdsZSB3b3JkcyAoMzItNjQgYml0cykgd2hlcmUgZWFjaCBiaXQgcmVwcmVzZW50cyBhbiBhY3R1YWwKKyAqIGJpdCBmcm9tIHRoZSBiaXRtYXAuCisgKgorICogUmV0dXJuOiB0cnVlIGlmIGEgd29yZCB3YXMgeWllbGQsIGZhbHNlIGlmIHRoZXJlIGFyZSBubyB3b3JkcyBsZWZ0CisgKi8KK2ludCBld2FoX2l0ZXJhdG9yX25leHQoZXdvcmRfdCAqbmV4dCwgc3RydWN0IGV3YWhfaXRlcmF0b3IgKml0KTsKKwordm9pZCBld2FoX3hvcigKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmV3YWhfaSwKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmV3YWhfaiwKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKm91dCk7CisKKy8qKgorICogRGlyZWN0IHdvcmQgYWNjZXNzCisgKi8KK3NpemVfdCBld2FoX2FkZF9lbXB0eV93b3JkcyhzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGludCB2LCBzaXplX3QgbnVtYmVyKTsKK3ZvaWQgZXdhaF9hZGRfZGlydHlfd29yZHMoCisJc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBjb25zdCBld29yZF90ICpidWZmZXIsIHNpemVfdCBudW1iZXIsIGludCBuZWdhdGUpOworc2l6ZV90IGV3YWhfYWRkKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgZXdvcmRfdCB3b3JkKTsKKworCisvKioKKyAqIFVuY29tcHJlc3NlZCwgb2xkLXNjaG9vbCBiaXRtYXAgdGhhdCBjYW4gYmUgZWZmaWNpZW50bHkgY29tcHJlc3NlZAorICogaW50byBhbiBgZXdhaF9iaXRtYXBgLgorICovCitzdHJ1Y3QgYml0bWFwIHsKKwlld29yZF90ICp3b3JkczsKKwlzaXplX3Qgd29yZF9hbGxvYzsKK307CisKK3N0cnVjdCBiaXRtYXAgKmJpdG1hcF9uZXcodm9pZCk7CitzdHJ1Y3QgYml0bWFwICpiaXRtYXBfd29yZF9hbGxvYyhzaXplX3Qgd29yZF9hbGxvYyk7Cit2b2lkIGJpdG1hcF9zZXQoc3RydWN0IGJpdG1hcCAqc2VsZiwgc2l6ZV90IHBvcyk7Cit2b2lkIGJpdG1hcF91bnNldChzdHJ1Y3QgYml0bWFwICpzZWxmLCBzaXplX3QgcG9zKTsKK2ludCBiaXRtYXBfZ2V0KHN0cnVjdCBiaXRtYXAgKnNlbGYsIHNpemVfdCBwb3MpOwordm9pZCBiaXRtYXBfcmVzZXQoc3RydWN0IGJpdG1hcCAqc2VsZik7Cit2b2lkIGJpdG1hcF9mcmVlKHN0cnVjdCBiaXRtYXAgKnNlbGYpOworaW50IGJpdG1hcF9lcXVhbHMoc3RydWN0IGJpdG1hcCAqc2VsZiwgc3RydWN0IGJpdG1hcCAqb3RoZXIpOworaW50IGJpdG1hcF9pc19zdWJzZXQoc3RydWN0IGJpdG1hcCAqc2VsZiwgc3RydWN0IGJpdG1hcCAqc3VwZXIpOworCitzdHJ1Y3QgZXdhaF9iaXRtYXAgKiBiaXRtYXBfdG9fZXdhaChzdHJ1Y3QgYml0bWFwICpiaXRtYXApOworc3RydWN0IGJpdG1hcCAqZXdhaF90b19iaXRtYXAoc3RydWN0IGV3YWhfYml0bWFwICpld2FoKTsKKwordm9pZCBiaXRtYXBfYW5kX25vdChzdHJ1Y3QgYml0bWFwICpzZWxmLCBzdHJ1Y3QgYml0bWFwICpvdGhlcik7Cit2b2lkIGJpdG1hcF9vcl9ld2FoKHN0cnVjdCBiaXRtYXAgKnNlbGYsIHN0cnVjdCBld2FoX2JpdG1hcCAqb3RoZXIpOwordm9pZCBiaXRtYXBfb3Ioc3RydWN0IGJpdG1hcCAqc2VsZiwgY29uc3Qgc3RydWN0IGJpdG1hcCAqb3RoZXIpOworCitzaXplX3QgYml0bWFwX3BvcGNvdW50KHN0cnVjdCBiaXRtYXAgKnNlbGYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2V3YWgvZXdva19ybHcuaCBiL2V3YWgvZXdva19ybHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWZhMjRmCi0tLSAvZGV2L251bGwKKysrIGIvZXdhaC9ld29rX3Jsdy5oCkBAIC0wLDAgKzEsMTE0IEBACisvKioKKyAqIENvcHlyaWdodCAyMDEzLCBHaXRIdWIsIEluYworICogQ29weXJpZ2h0IDIwMDktMjAxMywgRGFuaWVsIExlbWlyZSwgQ2xpZmYgTW9vbiwKKyAqCURhdmlkIE1jSW50b3NoLCBSb2JlcnQgQmVjaG8sIEdvb2dsZSBJbmMuIGFuZCBWZXJvbmlrYSBaZW56CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaWZuZGVmIF9fRVdPS19STFdfSF9fCisjZGVmaW5lIF9fRVdPS19STFdfSF9fCisKKyNpbmNsdWRlICJld29rLmgiCisKKyNkZWZpbmUgUkxXX1JVTk5JTkdfQklUUyAoc2l6ZW9mKGV3b3JkX3QpICogNCkKKyNkZWZpbmUgUkxXX0xJVEVSQUxfQklUUyAoc2l6ZW9mKGV3b3JkX3QpICogOCAtIDEgLSBSTFdfUlVOTklOR19CSVRTKQorCisjZGVmaW5lIFJMV19MQVJHRVNUX1JVTk5JTkdfQ09VTlQgKCgoZXdvcmRfdCkxIDw8IFJMV19SVU5OSU5HX0JJVFMpIC0gMSkKKyNkZWZpbmUgUkxXX0xBUkdFU1RfTElURVJBTF9DT1VOVCAoKChld29yZF90KTEgPDwgUkxXX0xJVEVSQUxfQklUUykgLSAxKQorCisjZGVmaW5lIFJMV19MQVJHRVNUX1JVTk5JTkdfQ09VTlRfU0hJRlQgKFJMV19MQVJHRVNUX1JVTk5JTkdfQ09VTlQgPDwgMSkKKworI2RlZmluZSBSTFdfUlVOTklOR19MRU5fUExVU19CSVQgKCgoZXdvcmRfdCkxIDw8IChSTFdfUlVOTklOR19CSVRTICsgMSkpIC0gMSkKKworc3RhdGljIGlubGluZSBpbnQgcmx3X2dldF9ydW5fYml0KGNvbnN0IGV3b3JkX3QgKndvcmQpCit7CisJcmV0dXJuICp3b3JkICYgKGV3b3JkX3QpMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJsd19zZXRfcnVuX2JpdChld29yZF90ICp3b3JkLCBpbnQgYikKK3sKKwlpZiAoYikgeworCQkqd29yZCB8PSAoZXdvcmRfdCkxOworCX0gZWxzZSB7CisJCSp3b3JkICY9IChld29yZF90KSh+MSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmx3X3hvcl9ydW5fYml0KGV3b3JkX3QgKndvcmQpCit7CisJaWYgKCp3b3JkICYgMSkgeworCQkqd29yZCAmPSAoZXdvcmRfdCkofjEpOworCX0gZWxzZSB7CisJCSp3b3JkIHw9IChld29yZF90KTE7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmx3X3NldF9ydW5uaW5nX2xlbihld29yZF90ICp3b3JkLCBld29yZF90IGwpCit7CisJKndvcmQgfD0gUkxXX0xBUkdFU1RfUlVOTklOR19DT1VOVF9TSElGVDsKKwkqd29yZCAmPSAobCA8PCAxKSB8ICh+UkxXX0xBUkdFU1RfUlVOTklOR19DT1VOVF9TSElGVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZXdvcmRfdCBybHdfZ2V0X3J1bm5pbmdfbGVuKGNvbnN0IGV3b3JkX3QgKndvcmQpCit7CisJcmV0dXJuICgqd29yZCA+PiAxKSAmIFJMV19MQVJHRVNUX1JVTk5JTkdfQ09VTlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgZXdvcmRfdCBybHdfZ2V0X2xpdGVyYWxfd29yZHMoY29uc3QgZXdvcmRfdCAqd29yZCkKK3sKKwlyZXR1cm4gKndvcmQgPj4gKDEgKyBSTFdfUlVOTklOR19CSVRTKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJsd19zZXRfbGl0ZXJhbF93b3Jkcyhld29yZF90ICp3b3JkLCBld29yZF90IGwpCit7CisJKndvcmQgfD0gflJMV19SVU5OSU5HX0xFTl9QTFVTX0JJVDsKKwkqd29yZCAmPSAobCA8PCAoUkxXX1JVTk5JTkdfQklUUyArIDEpKSB8IFJMV19SVU5OSU5HX0xFTl9QTFVTX0JJVDsKK30KKworc3RhdGljIGlubGluZSBld29yZF90IHJsd19zaXplKGNvbnN0IGV3b3JkX3QgKnNlbGYpCit7CisJcmV0dXJuIHJsd19nZXRfcnVubmluZ19sZW4oc2VsZikgKyBybHdfZ2V0X2xpdGVyYWxfd29yZHMoc2VsZik7Cit9CisKK3N0cnVjdCBybHdfaXRlcmF0b3IgeworCWNvbnN0IGV3b3JkX3QgKmJ1ZmZlcjsKKwlzaXplX3Qgc2l6ZTsKKwlzaXplX3QgcG9pbnRlcjsKKwlzaXplX3QgbGl0ZXJhbF93b3JkX3N0YXJ0OworCisJc3RydWN0IHsKKwkJY29uc3QgZXdvcmRfdCAqd29yZDsKKwkJaW50IGxpdGVyYWxfd29yZHM7CisJCWludCBydW5uaW5nX2xlbjsKKwkJaW50IGxpdGVyYWxfd29yZF9vZmZzZXQ7CisJCWludCBydW5uaW5nX2JpdDsKKwl9IHJsdzsKK307CisKK3ZvaWQgcmx3aXRfaW5pdChzdHJ1Y3Qgcmx3X2l0ZXJhdG9yICppdCwgc3RydWN0IGV3YWhfYml0bWFwICpiaXRtYXApOwordm9pZCBybHdpdF9kaXNjYXJkX2ZpcnN0X3dvcmRzKHN0cnVjdCBybHdfaXRlcmF0b3IgKml0LCBzaXplX3QgeCk7CitzaXplX3Qgcmx3aXRfZGlzY2hhcmdlKAorCXN0cnVjdCBybHdfaXRlcmF0b3IgKml0LCBzdHJ1Y3QgZXdhaF9iaXRtYXAgKm91dCwgc2l6ZV90IG1heCwgaW50IG5lZ2F0ZSk7CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHJsd2l0X3dvcmRfc2l6ZShzdHJ1Y3Qgcmx3X2l0ZXJhdG9yICppdCkKK3sKKwlyZXR1cm4gaXQtPnJsdy5ydW5uaW5nX2xlbiArIGl0LT5ybHcubGl0ZXJhbF93b3JkczsKK30KKworc3RhdGljIGlubGluZSBzaXplX3Qgcmx3aXRfbGl0ZXJhbF93b3JkcyhzdHJ1Y3Qgcmx3X2l0ZXJhdG9yICppdCkKK3sKKwlyZXR1cm4gaXQtPnBvaW50ZXIgLSBpdC0+cmx3LmxpdGVyYWxfd29yZHM7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZXhlYy1jbWQuYyBiL2V4ZWMtY21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlZWFiMwotLS0gL2Rldi9udWxsCisrKyBiL2V4ZWMtY21kLmMKQEAgLTAsMCArMSwzNjcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisKKyNpZiBkZWZpbmVkKFJVTlRJTUVfUFJFRklYKQorCisjaWYgZGVmaW5lZChIQVZFX05TX0dFVF9FWEVDVVRBQkxFX1BBVEgpCisjaW5jbHVkZSA8bWFjaC1vL2R5bGQuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0JTRF9LRVJOX1BST0NfU1lTQ1RMKQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNlbmRpZgorCisjZW5kaWYgLyogUlVOVElNRV9QUkVGSVggKi8KKworI2RlZmluZSBNQVhfQVJHUyAzMgorCitzdGF0aWMgY29uc3QgY2hhciAqc3lzdGVtX3ByZWZpeCh2b2lkKTsKKworI2lmZGVmIFJVTlRJTUVfUFJFRklYCisKKy8qKgorICogV2hlbiB1c2luZyBhIHJ1bnRpbWUgcHJlZml4LCBHaXQgZHluYW1pY2FsbHkgcmVzb2x2ZXMgcGF0aHMgcmVsYXRpdmUgdG8gaXRzCisgKiBleGVjdXRhYmxlLgorICoKKyAqIFRoZSBtZXRob2QgZm9yIGRldGVybWluaW5nIHRoZSBwYXRoIG9mIHRoZSBleGVjdXRhYmxlIGlzIGhpZ2hseQorICogcGxhdGZvcm0tc3BlY2lmaWMuCisgKi8KKworLyoqCisgKiBQYXRoIHRvIHRoZSBjdXJyZW50IEdpdCBleGVjdXRhYmxlLiBSZXNvbHZlZCBvbiBzdGFydHVwIGJ5CisgKiAnZ2l0X3Jlc29sdmVfZXhlY3V0YWJsZV9kaXInLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZXhlY3V0YWJsZV9kaXJuYW1lOworCitzdGF0aWMgY29uc3QgY2hhciAqc3lzdGVtX3ByZWZpeCh2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpwcmVmaXg7CisKKwlhc3NlcnQoZXhlY3V0YWJsZV9kaXJuYW1lKTsKKwlhc3NlcnQoaXNfYWJzb2x1dGVfcGF0aChleGVjdXRhYmxlX2Rpcm5hbWUpKTsKKworCWlmICghcHJlZml4ICYmCisJICAgICEocHJlZml4ID0gc3RyaXBfcGF0aF9zdWZmaXgoZXhlY3V0YWJsZV9kaXJuYW1lLCBHSVRfRVhFQ19QQVRIKSkgJiYKKwkgICAgIShwcmVmaXggPSBzdHJpcF9wYXRoX3N1ZmZpeChleGVjdXRhYmxlX2Rpcm5hbWUsIEJJTkRJUikpICYmCisJICAgICEocHJlZml4ID0gc3RyaXBfcGF0aF9zdWZmaXgoZXhlY3V0YWJsZV9kaXJuYW1lLCAiZ2l0IikpKSB7CisJCXByZWZpeCA9IEZBTExCQUNLX1JVTlRJTUVfUFJFRklYOworCQl0cmFjZV9wcmludGYoIlJVTlRJTUVfUFJFRklYIHJlcXVlc3RlZCwgIgorCQkJCSJidXQgcHJlZml4IGNvbXB1dGF0aW9uIGZhaWxlZC4gICIKKwkJCQkiVXNpbmcgc3RhdGljIGZhbGxiYWNrICclcycuXG4iLCBwcmVmaXgpOworCX0KKwlyZXR1cm4gcHJlZml4OworfQorCisvKgorICogUmVzb2x2ZXMgdGhlIGV4ZWN1dGFibGUgcGF0aCBmcm9tIGFyZ3ZbMF0sIG9ubHkgaWYgaXQgaXMgYWJzb2x1dGUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgZ2l0X2dldF9leGVjX3BhdGhfZnJvbV9hcmd2MChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmFyZ3YwKQoreworCWNvbnN0IGNoYXIgKnNsYXNoOworCisJaWYgKCFhcmd2MCB8fCAhKmFyZ3YwKQorCQlyZXR1cm4gLTE7CisKKwlzbGFzaCA9IGZpbmRfbGFzdF9kaXJfc2VwKGFyZ3YwKTsKKwlpZiAoc2xhc2gpIHsKKwkJdHJhY2VfcHJpbnRmKCJ0cmFjZTogcmVzb2x2ZWQgZXhlY3V0YWJsZSBwYXRoIGZyb20gYXJndjA6ICVzXG4iLAorCQkJICAgICBhcmd2MCk7CisJCXN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aChidWYsIGFyZ3YwKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKworI2lmZGVmIFBST0NGU19FWEVDVVRBQkxFX1BBVEgKKy8qCisgKiBSZXNvbHZlcyB0aGUgZXhlY3V0YWJsZSBwYXRoIGJ5IGV4YW1pbmluZyBhIHByb2NmcyBzeW1saW5rLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGdpdF9nZXRfZXhlY19wYXRoX3Byb2NmcyhzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJaWYgKHN0cmJ1Zl9yZWFscGF0aChidWYsIFBST0NGU19FWEVDVVRBQkxFX1BBVEgsIDApKSB7CisJCXRyYWNlX3ByaW50ZigKKwkJCSJ0cmFjZTogcmVzb2x2ZWQgZXhlY3V0YWJsZSBwYXRoIGZyb20gcHJvY2ZzOiAlc1xuIiwKKwkJCWJ1Zi0+YnVmKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKyNlbmRpZiAvKiBQUk9DRlNfRVhFQ1VUQUJMRV9QQVRIICovCisKKyNpZmRlZiBIQVZFX0JTRF9LRVJOX1BST0NfU1lTQ1RMCisvKgorICogUmVzb2x2ZXMgdGhlIGV4ZWN1dGFibGUgcGF0aCB1c2luZyBLRVJOX1BST0NfUEFUSE5BTUUgQlNEIHN5c2N0bC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBnaXRfZ2V0X2V4ZWNfcGF0aF9ic2Rfc3lzY3RsKHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlpbnQgbWliWzRdOworCWNoYXIgcGF0aFtNQVhQQVRITEVOXTsKKwlzaXplX3QgY2IgPSBzaXplb2YocGF0aCk7CisKKwltaWJbMF0gPSBDVExfS0VSTjsKKwltaWJbMV0gPSBLRVJOX1BST0M7CisJbWliWzJdID0gS0VSTl9QUk9DX1BBVEhOQU1FOworCW1pYlszXSA9IC0xOworCWlmICghc3lzY3RsKG1pYiwgNCwgcGF0aCwgJmNiLCBOVUxMLCAwKSkgeworCQl0cmFjZV9wcmludGYoCisJCQkidHJhY2U6IHJlc29sdmVkIGV4ZWN1dGFibGUgcGF0aCBmcm9tIHN5c2N0bDogJXNcbiIsCisJCQlwYXRoKTsKKwkJc3RyYnVmX2FkZHN0cihidWYsIHBhdGgpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorI2VuZGlmIC8qIEhBVkVfQlNEX0tFUk5fUFJPQ19TWVNDVEwgKi8KKworI2lmZGVmIEhBVkVfTlNfR0VUX0VYRUNVVEFCTEVfUEFUSAorLyoKKyAqIFJlc29sdmVzIHRoZSBleGVjdXRhYmxlIHBhdGggYnkgcXVlcnlpbmcgRGFyd2luIGFwcGxpY2F0aW9uIHN0YWNrLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGdpdF9nZXRfZXhlY19wYXRoX2RhcndpbihzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwl1aW50MzJfdCBzaXplID0gc2l6ZW9mKHBhdGgpOworCWlmICghX05TR2V0RXhlY3V0YWJsZVBhdGgocGF0aCwgJnNpemUpKSB7CisJCXRyYWNlX3ByaW50ZigKKwkJCSJ0cmFjZTogcmVzb2x2ZWQgZXhlY3V0YWJsZSBwYXRoIGZyb20gRGFyd2luIHN0YWNrOiAlc1xuIiwKKwkJCXBhdGgpOworCQlzdHJidWZfYWRkc3RyKGJ1ZiwgcGF0aCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYgLyogSEFWRV9OU19HRVRfRVhFQ1VUQUJMRV9QQVRIICovCisKKyNpZmRlZiBIQVZFX1dQR01QVFIKKy8qCisgKiBSZXNvbHZlcyB0aGUgZXhlY3V0YWJsZSBwYXRoIGJ5IHVzaW5nIHRoZSBnbG9iYWwgdmFyaWFibGUgX3dwZ21wdHIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgZ2l0X2dldF9leGVjX3BhdGhfd3BnbXB0cihzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJaW50IGxlbiA9IHdjc2xlbihfd3BnbXB0cikgKiAzICsgMTsKKwlzdHJidWZfZ3JvdyhidWYsIGxlbik7CisJbGVuID0geHdjc3RvdXRmKGJ1Zi0+YnVmLCBfd3BnbXB0ciwgbGVuKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIC0xOworCWJ1Zi0+bGVuICs9IGxlbjsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBIQVZFX1dQR01QVFIgKi8KKworLyoKKyAqIFJlc29sdmVzIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBjdXJyZW50IGV4ZWN1dGFibGUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgZ2l0X2dldF9leGVjX3BhdGgoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICphcmd2MCkKK3sKKwkvKgorCSAqIElkZW50aWZ5aW5nIHRoZSBleGVjdXRhYmxlIHBhdGggaXMgb3BlcmF0aW5nIHN5c3RlbSBzcGVjaWZpYy4KKwkgKiBTZWxlY3RpdmVseSBlbXBsb3kgYWxsIGF2YWlsYWJsZSBtZXRob2RzIGluIG9yZGVyIG9mIHByZWZlcmVuY2UsCisJICogcHJlZmVycmluZyBoaWdobHktYXZhaWxhYmxlIGF1dGhvcml0YXRpdmUgbWV0aG9kcyBvdmVyCisJICogc2VsZWN0aXZlbHktYXZhaWxhYmxlIG9yIG5vbi1hdXRob3JpdGF0aXZlIG1ldGhvZHMuCisJICoKKwkgKiBBbGwgY2FzZXMgZmFsbCBiYWNrIG9uIHJlc29sdmluZyBhZ2FpbnN0IGFyZ3ZbMF0gaWYgdGhlcmUgaXNuJ3QgYQorCSAqIGJldHRlciBmdW5jdGlvbmFsIG1ldGhvZC4gSG93ZXZlciwgbm90ZSB0aGF0IGFyZ3ZbMF0gY2FuIGJlCisJICogdXNlZC1zdXBwbGllZCBvbiBtYW55IG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQgaXMgbm90IGF1dGhvcml0YXRpdmUKKwkgKiBpbiB0aG9zZSBjYXNlcy4KKwkgKgorCSAqIEVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIHJldHVybnMgMCBvbiBzdWNjZXNzLCBzbyBldmFsdWF0aW9uIHdpbGwgc3RvcAorCSAqIGFmdGVyIHRoZSBmaXJzdCBzdWNjZXNzZnVsIG1ldGhvZC4KKwkgKi8KKwlpZiAoCisjaWZkZWYgSEFWRV9CU0RfS0VSTl9QUk9DX1NZU0NUTAorCQlnaXRfZ2V0X2V4ZWNfcGF0aF9ic2Rfc3lzY3RsKGJ1ZikgJiYKKyNlbmRpZiAvKiBIQVZFX0JTRF9LRVJOX1BST0NfU1lTQ1RMICovCisKKyNpZmRlZiBIQVZFX05TX0dFVF9FWEVDVVRBQkxFX1BBVEgKKwkJZ2l0X2dldF9leGVjX3BhdGhfZGFyd2luKGJ1ZikgJiYKKyNlbmRpZiAvKiBIQVZFX05TX0dFVF9FWEVDVVRBQkxFX1BBVEggKi8KKworI2lmZGVmIFBST0NGU19FWEVDVVRBQkxFX1BBVEgKKwkJZ2l0X2dldF9leGVjX3BhdGhfcHJvY2ZzKGJ1ZikgJiYKKyNlbmRpZiAvKiBQUk9DRlNfRVhFQ1VUQUJMRV9QQVRIICovCisKKyNpZmRlZiBIQVZFX1dQR01QVFIKKwkJZ2l0X2dldF9leGVjX3BhdGhfd3BnbXB0cihidWYpICYmCisjZW5kaWYgLyogSEFWRV9XUEdNUFRSICovCisKKwkJZ2l0X2dldF9leGVjX3BhdGhfZnJvbV9hcmd2MChidWYsIGFyZ3YwKSkgeworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHN0cmJ1Zl9ub3JtYWxpemVfcGF0aChidWYpKSB7CisJCXRyYWNlX3ByaW50ZigidHJhY2U6IGNvdWxkIG5vdCBub3JtYWxpemUgcGF0aDogJXNcbiIsIGJ1Zi0+YnVmKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXRyYWNlMl9jbWRfcGF0aChidWYtPmJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBnaXRfcmVzb2x2ZV9leGVjdXRhYmxlX2Rpcihjb25zdCBjaGFyICphcmd2MCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNoYXIgKnJlc29sdmVkOworCWNvbnN0IGNoYXIgKnNsYXNoOworCisJaWYgKGdpdF9nZXRfZXhlY19wYXRoKCZidWYsIGFyZ3YwKSkgeworCQl0cmFjZV9wcmludGYoCisJCQkidHJhY2U6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZXhlY3V0YWJsZSBwYXRoIGZyb206ICVzXG4iLAorCQkJYXJndjApOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmV0dXJuOworCX0KKworCXJlc29sdmVkID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwlzbGFzaCA9IGZpbmRfbGFzdF9kaXJfc2VwKHJlc29sdmVkKTsKKwlpZiAoc2xhc2gpCisJCXJlc29sdmVkW3NsYXNoIC0gcmVzb2x2ZWRdID0gJ1wwJzsKKworCWV4ZWN1dGFibGVfZGlybmFtZSA9IHJlc29sdmVkOworCXRyYWNlX3ByaW50ZigidHJhY2U6IHJlc29sdmVkIGV4ZWN1dGFibGUgZGlyOiAlc1xuIiwKKwkJICAgICBleGVjdXRhYmxlX2Rpcm5hbWUpOworfQorCisjZWxzZQorCisvKgorICogV2hlbiBub3QgdXNpbmcgYSBydW50aW1lIHByZWZpeCwgR2l0IHVzZXMgYSBoYXJkLWNvZGVkIHBhdGguCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpzeXN0ZW1fcHJlZml4KHZvaWQpCit7CisJcmV0dXJuIEZBTExCQUNLX1JVTlRJTUVfUFJFRklYOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCBidXQgTm8gd29yayBuZWVkcyB0byBiZSBkb25lIGhlcmUgd2hlbgorICogcnVudGltZSBwcmVmaXggaXMgbm90IGJlaW5nIHVzZWQuCisgKi8KK3ZvaWQgZ2l0X3Jlc29sdmVfZXhlY3V0YWJsZV9kaXIoY29uc3QgY2hhciAqYXJndjApCit7Cit9CisKKyNlbmRpZiAvKiBSVU5USU1FX1BSRUZJWCAqLworCitjaGFyICpzeXN0ZW1fcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJidWYgZCA9IFNUUkJVRl9JTklUOworCisJaWYgKGlzX2Fic29sdXRlX3BhdGgocGF0aCkpCisJCXJldHVybiB4c3RyZHVwKHBhdGgpOworCisJc3RyYnVmX2FkZGYoJmQsICIlcy8lcyIsIHN5c3RlbV9wcmVmaXgoKSwgcGF0aCk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmQsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZXhlY19wYXRoX3ZhbHVlOworCit2b2lkIGdpdF9zZXRfZXhlY19wYXRoKGNvbnN0IGNoYXIgKmV4ZWNfcGF0aCkKK3sKKwlleGVjX3BhdGhfdmFsdWUgPSBleGVjX3BhdGg7CisJLyoKKwkgKiBQcm9wYWdhdGUgdGhpcyBzZXR0aW5nIHRvIGV4dGVybmFsIHByb2dyYW1zLgorCSAqLworCXNldGVudihFWEVDX1BBVEhfRU5WSVJPTk1FTlQsIGV4ZWNfcGF0aCwgMSk7Cit9CisKKy8qIFJldHVybnMgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgbG9jYXRpb24gdG8gbG9vayBmb3IgZ2l0IHByb2dyYW1zLiAqLworY29uc3QgY2hhciAqZ2l0X2V4ZWNfcGF0aCh2b2lkKQoreworCWlmICghZXhlY19wYXRoX3ZhbHVlKSB7CisJCWNvbnN0IGNoYXIgKmVudiA9IGdldGVudihFWEVDX1BBVEhfRU5WSVJPTk1FTlQpOworCQlpZiAoZW52ICYmICplbnYpCisJCQlleGVjX3BhdGhfdmFsdWUgPSB4c3RyZHVwKGVudik7CisJCWVsc2UKKwkJCWV4ZWNfcGF0aF92YWx1ZSA9IHN5c3RlbV9wYXRoKEdJVF9FWEVDX1BBVEgpOworCX0KKwlyZXR1cm4gZXhlY19wYXRoX3ZhbHVlOworfQorCitzdGF0aWMgdm9pZCBhZGRfcGF0aChzdHJ1Y3Qgc3RyYnVmICpvdXQsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKHBhdGggJiYgKnBhdGgpIHsKKwkJc3RyYnVmX2FkZF9hYnNvbHV0ZV9wYXRoKG91dCwgcGF0aCk7CisJCXN0cmJ1Zl9hZGRjaChvdXQsIFBBVEhfU0VQKTsKKwl9Cit9CisKK3ZvaWQgc2V0dXBfcGF0aCh2b2lkKQoreworCWNvbnN0IGNoYXIgKmV4ZWNfcGF0aCA9IGdpdF9leGVjX3BhdGgoKTsKKwljb25zdCBjaGFyICpvbGRfcGF0aCA9IGdldGVudigiUEFUSCIpOworCXN0cnVjdCBzdHJidWYgbmV3X3BhdGggPSBTVFJCVUZfSU5JVDsKKworCWdpdF9zZXRfZXhlY19wYXRoKGV4ZWNfcGF0aCk7CisJYWRkX3BhdGgoJm5ld19wYXRoLCBleGVjX3BhdGgpOworCisJaWYgKG9sZF9wYXRoKQorCQlzdHJidWZfYWRkc3RyKCZuZXdfcGF0aCwgb2xkX3BhdGgpOworCWVsc2UKKwkJc3RyYnVmX2FkZHN0cigmbmV3X3BhdGgsIF9QQVRIX0RFRlBBVEgpOworCisJc2V0ZW52KCJQQVRIIiwgbmV3X3BhdGguYnVmLCAxKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZuZXdfcGF0aCk7Cit9CisKK2NvbnN0IGNoYXIgKipwcmVwYXJlX2dpdF9jbWQoc3RydWN0IGFyZ3ZfYXJyYXkgKm91dCwgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJYXJndl9hcnJheV9wdXNoKG91dCwgImdpdCIpOworCWFyZ3ZfYXJyYXlfcHVzaHYob3V0LCBhcmd2KTsKKwlyZXR1cm4gb3V0LT5hcmd2OworfQorCitpbnQgZXhlY3ZfZ2l0X2NtZChjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBuYXJndiA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCXByZXBhcmVfZ2l0X2NtZCgmbmFyZ3YsIGFyZ3YpOworCXRyYWNlX2FyZ3ZfcHJpbnRmKG5hcmd2LmFyZ3YsICJ0cmFjZTogZXhlYzoiKTsKKworCS8qIGV4ZWN2cCgpIGNhbiBvbmx5IGV2ZXIgcmV0dXJuIGlmIGl0IGZhaWxzICovCisJc2FuZV9leGVjdnAoImdpdCIsIChjaGFyICoqKW5hcmd2LmFyZ3YpOworCisJdHJhY2VfcHJpbnRmKCJ0cmFjZTogZXhlYyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCisJYXJndl9hcnJheV9jbGVhcigmbmFyZ3YpOworCXJldHVybiAtMTsKK30KKworaW50IGV4ZWNsX2dpdF9jbWQoY29uc3QgY2hhciAqY21kLCAuLi4pCit7CisJaW50IGFyZ2M7CisJY29uc3QgY2hhciAqYXJndltNQVhfQVJHUyArIDFdOworCWNvbnN0IGNoYXIgKmFyZzsKKwl2YV9saXN0IHBhcmFtOworCisJdmFfc3RhcnQocGFyYW0sIGNtZCk7CisJYXJndlswXSA9IGNtZDsKKwlhcmdjID0gMTsKKwl3aGlsZSAoYXJnYyA8IE1BWF9BUkdTKSB7CisJCWFyZyA9IGFyZ3ZbYXJnYysrXSA9IHZhX2FyZyhwYXJhbSwgY2hhciAqKTsKKwkJaWYgKCFhcmcpCisJCQlicmVhazsKKwl9CisJdmFfZW5kKHBhcmFtKTsKKwlpZiAoTUFYX0FSR1MgPD0gYXJnYykKKwkJcmV0dXJuIGVycm9yKF8oInRvbyBtYW55IGFyZ3MgdG8gcnVuICVzIiksIGNtZCk7CisKKwlhcmd2W2FyZ2NdID0gTlVMTDsKKwlyZXR1cm4gZXhlY3ZfZ2l0X2NtZChhcmd2KTsKK30KZGlmZiAtLWdpdCBhL2V4ZWMtY21kLmggYi9leGVjLWNtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZDFkZjIKLS0tIC9kZXYvbnVsbAorKysgYi9leGVjLWNtZC5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgR0lUX0VYRUNfQ01EX0gKKyNkZWZpbmUgR0lUX0VYRUNfQ01EX0gKKworc3RydWN0IGFyZ3ZfYXJyYXk7CisKK3ZvaWQgZ2l0X3NldF9leGVjX3BhdGgoY29uc3QgY2hhciAqZXhlY19wYXRoKTsKK3ZvaWQgZ2l0X3Jlc29sdmVfZXhlY3V0YWJsZV9kaXIoY29uc3QgY2hhciAqcGF0aCk7Citjb25zdCBjaGFyICpnaXRfZXhlY19wYXRoKHZvaWQpOwordm9pZCBzZXR1cF9wYXRoKHZvaWQpOworY29uc3QgY2hhciAqKnByZXBhcmVfZ2l0X2NtZChzdHJ1Y3QgYXJndl9hcnJheSAqb3V0LCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgZXhlY3ZfZ2l0X2NtZChjb25zdCBjaGFyICoqYXJndik7IC8qIE5VTEwgdGVybWluYXRlZCAqLworTEFTVF9BUkdfTVVTVF9CRV9OVUxMCitpbnQgZXhlY2xfZ2l0X2NtZChjb25zdCBjaGFyICpjbWQsIC4uLik7CitjaGFyICpzeXN0ZW1fcGF0aChjb25zdCBjaGFyICpwYXRoKTsKKworI2VuZGlmIC8qIEdJVF9FWEVDX0NNRF9IICovCmRpZmYgLS1naXQgYS9mYXN0LWltcG9ydC5jIGIvZmFzdC1pbXBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTg5NzAyCi0tLSAvZGV2L251bGwKKysrIGIvZmFzdC1pbXBvcnQuYwpAQCAtMCwwICsxLDM2MzIgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJjc3VtLWZpbGUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJtZW0tcG9vbC5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorI2luY2x1ZGUgImtoYXNoLmgiCisKKyNkZWZpbmUgUEFDS19JRF9CSVRTIDE2CisjZGVmaW5lIE1BWF9QQUNLX0lEICgoMTw8UEFDS19JRF9CSVRTKS0xKQorI2RlZmluZSBERVBUSF9CSVRTIDEzCisjZGVmaW5lIE1BWF9ERVBUSCAoKDE8PERFUFRIX0JJVFMpLTEpCisKKy8qCisgKiBXZSBhYnVzZSB0aGUgc2V0dWlkIGJpdCBvbiBkaXJlY3RvcmllcyB0byBtZWFuICJkbyBub3QgZGVsdGEiLgorICovCisjZGVmaW5lIE5PX0RFTFRBIFNfSVNVSUQKKworLyoKKyAqIFRoZSBhbW91bnQgb2YgYWRkaXRpb25hbCBzcGFjZSByZXF1aXJlZCBpbiBvcmRlciB0byB3cml0ZSBhbiBvYmplY3QgaW50byB0aGUKKyAqIGN1cnJlbnQgcGFjay4gVGhpcyBpcyB0aGUgaGFzaCBsZW5ndGhzIGF0IHRoZSBlbmQgb2YgdGhlIHBhY2ssIHBsdXMgdGhlCisgKiBsZW5ndGggb2Ygb25lIG9iamVjdCBJRC4KKyAqLworI2RlZmluZSBQQUNLX1NJWkVfVEhSRVNIT0xEICh0aGVfaGFzaF9hbGdvLT5yYXdzeiAqIDMpCisKK3N0cnVjdCBvYmplY3RfZW50cnkgeworCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSBpZHg7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50OworCXVpbnQzMl90IHR5cGUgOiBUWVBFX0JJVFMsCisJCXBhY2tfaWQgOiBQQUNLX0lEX0JJVFMsCisJCWRlcHRoIDogREVQVEhfQklUUzsKK307CisKK3N0YXRpYyBpbnQgb2JqZWN0X2VudHJ5X2hhc2hjbXAoY29uc3Qgdm9pZCAqbWFwX2RhdGEsCisJCQkJY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVwdHIsCisJCQkJY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCQljb25zdCB2b2lkICprZXlkYXRhKQoreworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCA9IGtleWRhdGE7CisJY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqZTEsICplMjsKKworCWUxID0gY29udGFpbmVyX29mKGVwdHIsIGNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnksIGVudCk7CisJaWYgKG9pZCkKKwkJcmV0dXJuIG9pZGNtcCgmZTEtPmlkeC5vaWQsIG9pZCk7CisKKwllMiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIGNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnksIGVudCk7CisJcmV0dXJuIG9pZGNtcCgmZTEtPmlkeC5vaWQsICZlMi0+aWR4Lm9pZCk7Cit9CisKK3N0cnVjdCBvYmplY3RfZW50cnlfcG9vbCB7CisJc3RydWN0IG9iamVjdF9lbnRyeV9wb29sICpuZXh0X3Bvb2w7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqbmV4dF9mcmVlOworCXN0cnVjdCBvYmplY3RfZW50cnkgKmVuZDsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5IGVudHJpZXNbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKK3N0cnVjdCBtYXJrX3NldCB7CisJdW5pb24geworCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWRzWzEwMjRdOworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICptYXJrZWRbMTAyNF07CisJCXN0cnVjdCBtYXJrX3NldCAqc2V0c1sxMDI0XTsKKwl9IGRhdGE7CisJdW5zaWduZWQgaW50IHNoaWZ0OworfTsKKworc3RydWN0IGxhc3Rfb2JqZWN0IHsKKwlzdHJ1Y3Qgc3RyYnVmIGRhdGE7CisJb2ZmX3Qgb2Zmc2V0OworCXVuc2lnbmVkIGludCBkZXB0aDsKKwl1bnNpZ25lZCBub19zd2FwIDogMTsKK307CisKK3N0cnVjdCBhdG9tX3N0ciB7CisJc3RydWN0IGF0b21fc3RyICpuZXh0X2F0b207CisJdW5zaWduZWQgc2hvcnQgc3RyX2xlbjsKKwljaGFyIHN0cl9kYXRbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKK3N0cnVjdCB0cmVlX2NvbnRlbnQ7CitzdHJ1Y3QgdHJlZV9lbnRyeSB7CisJc3RydWN0IHRyZWVfY29udGVudCAqdHJlZTsKKwlzdHJ1Y3QgYXRvbV9zdHIgKm5hbWU7CisJc3RydWN0IHRyZWVfZW50cnlfbXMgeworCQl1aW50MTZfdCBtb2RlOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwl9IHZlcnNpb25zWzJdOworfTsKKworc3RydWN0IHRyZWVfY29udGVudCB7CisJdW5zaWduZWQgaW50IGVudHJ5X2NhcGFjaXR5OyAvKiBtdXN0IG1hdGNoIGF2YWlsX3RyZWVfY29udGVudCAqLworCXVuc2lnbmVkIGludCBlbnRyeV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgZGVsdGFfZGVwdGg7CisJc3RydWN0IHRyZWVfZW50cnkgKmVudHJpZXNbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKK3N0cnVjdCBhdmFpbF90cmVlX2NvbnRlbnQgeworCXVuc2lnbmVkIGludCBlbnRyeV9jYXBhY2l0eTsgLyogbXVzdCBtYXRjaCB0cmVlX2NvbnRlbnQgKi8KKwlzdHJ1Y3QgYXZhaWxfdHJlZV9jb250ZW50ICpuZXh0X2F2YWlsOworfTsKKworc3RydWN0IGJyYW5jaCB7CisJc3RydWN0IGJyYW5jaCAqdGFibGVfbmV4dF9icmFuY2g7CisJc3RydWN0IGJyYW5jaCAqYWN0aXZlX25leHRfYnJhbmNoOworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHRyZWVfZW50cnkgYnJhbmNoX3RyZWU7CisJdWludG1heF90IGxhc3RfY29tbWl0OworCXVpbnRtYXhfdCBudW1fbm90ZXM7CisJdW5zaWduZWQgYWN0aXZlIDogMTsKKwl1bnNpZ25lZCBkZWxldGUgOiAxOworCXVuc2lnbmVkIHBhY2tfaWQgOiBQQUNLX0lEX0JJVFM7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7Cit9OworCitzdHJ1Y3QgdGFnIHsKKwlzdHJ1Y3QgdGFnICpuZXh0X3RhZzsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBwYWNrX2lkOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworfTsKKworc3RydWN0IGhhc2hfbGlzdCB7CisJc3RydWN0IGhhc2hfbGlzdCAqbmV4dDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKK307CisKK3R5cGVkZWYgZW51bSB7CisJV0hFTlNQRUNfUkFXID0gMSwKKwlXSEVOU1BFQ19SRkMyODIyLAorCVdIRU5TUEVDX05PVworfSB3aGVuc3BlY190eXBlOworCitzdHJ1Y3QgcmVjZW50X2NvbW1hbmQgeworCXN0cnVjdCByZWNlbnRfY29tbWFuZCAqcHJldjsKKwlzdHJ1Y3QgcmVjZW50X2NvbW1hbmQgKm5leHQ7CisJY2hhciAqYnVmOworfTsKKwordHlwZWRlZiB2b2lkICgqbWFya19zZXRfaW5zZXJ0ZXJfdCkoc3RydWN0IG1hcmtfc2V0ICpzLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHVpbnRtYXhfdCBtYXJrKTsKK3R5cGVkZWYgdm9pZCAoKmVhY2hfbWFya19mbl90KSh1aW50bWF4X3QgbWFyaywgdm9pZCAqb2JqLCB2b2lkICpjYnApOworCisvKiBDb25maWd1cmVkIGxpbWl0cyBvbiBvdXRwdXQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9kZXB0aCA9IDUwOworc3RhdGljIG9mZl90IG1heF9wYWNrc2l6ZTsKK3N0YXRpYyBpbnQgdW5wYWNrX2xpbWl0ID0gMTAwOworc3RhdGljIGludCBmb3JjZV91cGRhdGU7CisKKy8qIFN0YXRzIGFuZCBtaXNjLiBjb3VudGVycyAqLworc3RhdGljIHVpbnRtYXhfdCBhbGxvY19jb3VudDsKK3N0YXRpYyB1aW50bWF4X3QgbWFya3Nfc2V0X2NvdW50Oworc3RhdGljIHVpbnRtYXhfdCBvYmplY3RfY291bnRfYnlfdHlwZVsxIDw8IFRZUEVfQklUU107CitzdGF0aWMgdWludG1heF90IGR1cGxpY2F0ZV9jb3VudF9ieV90eXBlWzEgPDwgVFlQRV9CSVRTXTsKK3N0YXRpYyB1aW50bWF4X3QgZGVsdGFfY291bnRfYnlfdHlwZVsxIDw8IFRZUEVfQklUU107CitzdGF0aWMgdWludG1heF90IGRlbHRhX2NvdW50X2F0dGVtcHRzX2J5X3R5cGVbMSA8PCBUWVBFX0JJVFNdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb2JqZWN0X2NvdW50Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgYnJhbmNoX2NvdW50Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgYnJhbmNoX2xvYWRfY291bnQ7CitzdGF0aWMgaW50IGZhaWx1cmU7CitzdGF0aWMgRklMRSAqcGFja19lZGdlczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2hvd19zdGF0cyA9IDE7CitzdGF0aWMgaW50IGdsb2JhbF9hcmdjOworc3RhdGljIGNvbnN0IGNoYXIgKipnbG9iYWxfYXJndjsKKworLyogTWVtb3J5IHBvb2xzICovCitzdGF0aWMgc3RydWN0IG1lbV9wb29sIGZpX21lbV9wb29sID0gIHtOVUxMLCAyKjEwMjQqMTAyNCAtCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXBfYmxvY2spLCAwIH07CisKKy8qIEF0b20gbWFuYWdlbWVudCAqLworc3RhdGljIHVuc2lnbmVkIGludCBhdG9tX3RhYmxlX3N6ID0gNDQ1MTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRvbV9jbnQ7CitzdGF0aWMgc3RydWN0IGF0b21fc3RyICoqYXRvbV90YWJsZTsKKworLyogVGhlIC5wYWNrIGZpbGUgYmVpbmcgZ2VuZXJhdGVkICovCitzdGF0aWMgc3RydWN0IHBhY2tfaWR4X29wdGlvbiBwYWNrX2lkeF9vcHRzOworc3RhdGljIHVuc2lnbmVkIGludCBwYWNrX2lkOworc3RhdGljIHN0cnVjdCBoYXNoZmlsZSAqcGFja19maWxlOworc3RhdGljIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrX2RhdGE7CitzdGF0aWMgc3RydWN0IHBhY2tlZF9naXQgKiphbGxfcGFja3M7CitzdGF0aWMgb2ZmX3QgcGFja19zaXplOworCisvKiBUYWJsZSBvZiBvYmplY3RzIHdlJ3ZlIHdyaXR0ZW4uICovCitzdGF0aWMgdW5zaWduZWQgaW50IG9iamVjdF9lbnRyeV9hbGxvYyA9IDUwMDA7CitzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeV9wb29sICpibG9ja3M7CitzdGF0aWMgc3RydWN0IGhhc2htYXAgb2JqZWN0X3RhYmxlOworc3RhdGljIHN0cnVjdCBtYXJrX3NldCAqbWFya3M7CitzdGF0aWMgY29uc3QgY2hhciAqZXhwb3J0X21hcmtzX2ZpbGU7CitzdGF0aWMgY29uc3QgY2hhciAqaW1wb3J0X21hcmtzX2ZpbGU7CitzdGF0aWMgaW50IGltcG9ydF9tYXJrc19maWxlX2Zyb21fc3RyZWFtOworc3RhdGljIGludCBpbXBvcnRfbWFya3NfZmlsZV9pZ25vcmVfbWlzc2luZzsKK3N0YXRpYyBpbnQgaW1wb3J0X21hcmtzX2ZpbGVfZG9uZTsKK3N0YXRpYyBpbnQgcmVsYXRpdmVfbWFya3NfcGF0aHM7CisKKy8qIE91ciBsYXN0IGJsb2IgKi8KK3N0YXRpYyBzdHJ1Y3QgbGFzdF9vYmplY3QgbGFzdF9ibG9iID0geyBTVFJCVUZfSU5JVCwgMCwgMCwgMCB9OworCisvKiBUcmVlIG1hbmFnZW1lbnQgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHJlZV9lbnRyeV9hbGxvYyA9IDEwMDA7CitzdGF0aWMgdm9pZCAqYXZhaWxfdHJlZV9lbnRyeTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXZhaWxfdHJlZV90YWJsZV9zeiA9IDEwMDsKK3N0YXRpYyBzdHJ1Y3QgYXZhaWxfdHJlZV9jb250ZW50ICoqYXZhaWxfdHJlZV90YWJsZTsKK3N0YXRpYyBzaXplX3QgdHJlZV9lbnRyeV9hbGxvY2Q7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBvbGRfdHJlZSA9IFNUUkJVRl9JTklUOworc3RhdGljIHN0cnVjdCBzdHJidWYgbmV3X3RyZWUgPSBTVFJCVUZfSU5JVDsKKworLyogQnJhbmNoIGRhdGEgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9hY3RpdmVfYnJhbmNoZXMgPSA1Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3VyX2FjdGl2ZV9icmFuY2hlczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJyYW5jaF90YWJsZV9zeiA9IDEwMzk7CitzdGF0aWMgc3RydWN0IGJyYW5jaCAqKmJyYW5jaF90YWJsZTsKK3N0YXRpYyBzdHJ1Y3QgYnJhbmNoICphY3RpdmVfYnJhbmNoZXM7CisKKy8qIFRhZyBkYXRhICovCitzdGF0aWMgc3RydWN0IHRhZyAqZmlyc3RfdGFnOworc3RhdGljIHN0cnVjdCB0YWcgKmxhc3RfdGFnOworCisvKiBJbnB1dCBzdHJlYW0gcGFyc2luZyAqLworc3RhdGljIHdoZW5zcGVjX3R5cGUgd2hlbnNwZWMgPSBXSEVOU1BFQ19SQVc7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBjb21tYW5kX2J1ZiA9IFNUUkJVRl9JTklUOworc3RhdGljIGludCB1bnJlYWRfY29tbWFuZF9idWY7CitzdGF0aWMgc3RydWN0IHJlY2VudF9jb21tYW5kIGNtZF9oaXN0ID0geyZjbWRfaGlzdCwgJmNtZF9oaXN0LCBOVUxMfTsKK3N0YXRpYyBzdHJ1Y3QgcmVjZW50X2NvbW1hbmQgKmNtZF90YWlsID0gJmNtZF9oaXN0Oworc3RhdGljIHN0cnVjdCByZWNlbnRfY29tbWFuZCAqcmNfZnJlZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY21kX3NhdmUgPSAxMDA7CitzdGF0aWMgdWludG1heF90IG5leHRfbWFyazsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG5ld19kYXRhID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgaW50IHNlZW5fZGF0YV9jb21tYW5kOworc3RhdGljIGludCByZXF1aXJlX2V4cGxpY2l0X3Rlcm1pbmF0aW9uOworc3RhdGljIGludCBhbGxvd191bnNhZmVfZmVhdHVyZXM7CisKKy8qIFNpZ25hbCBoYW5kbGluZyAqLworc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBjaGVja3BvaW50X3JlcXVlc3RlZDsKKworLyogU3VibW9kdWxlIG1hcmtzICovCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IHN1Yl9tYXJrc19mcm9tID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IHN1Yl9tYXJrc190byA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworc3RhdGljIGtoX29pZF9tYXBfdCAqc3ViX29pZF9tYXA7CisKKy8qIFdoZXJlIHRvIHdyaXRlIG91dHB1dCBvZiBjYXQtYmxvYiBjb21tYW5kcyAqLworc3RhdGljIGludCBjYXRfYmxvYl9mZCA9IFNURE9VVF9GSUxFTk87CisKK3N0YXRpYyB2b2lkIHBhcnNlX2FyZ3Yodm9pZCk7CitzdGF0aWMgdm9pZCBwYXJzZV9nZXRfbWFyayhjb25zdCBjaGFyICpwKTsKK3N0YXRpYyB2b2lkIHBhcnNlX2NhdF9ibG9iKGNvbnN0IGNoYXIgKnApOworc3RhdGljIHZvaWQgcGFyc2VfbHMoY29uc3QgY2hhciAqcCwgc3RydWN0IGJyYW5jaCAqYik7CisKK3N0YXRpYyB2b2lkIGZvcl9lYWNoX21hcmsoc3RydWN0IG1hcmtfc2V0ICptLCB1aW50bWF4X3QgYmFzZSwgZWFjaF9tYXJrX2ZuX3QgY2FsbGJhY2ssIHZvaWQgKnApCit7CisJdWludG1heF90IGs7CisJaWYgKG0tPnNoaWZ0KSB7CisJCWZvciAoayA9IDA7IGsgPCAxMDI0OyBrKyspIHsKKwkJCWlmIChtLT5kYXRhLnNldHNba10pCisJCQkJZm9yX2VhY2hfbWFyayhtLT5kYXRhLnNldHNba10sIGJhc2UgKyAoayA8PCBtLT5zaGlmdCksIGNhbGxiYWNrLCBwKTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoayA9IDA7IGsgPCAxMDI0OyBrKyspIHsKKwkJCWlmIChtLT5kYXRhLm1hcmtlZFtrXSkKKwkJCQljYWxsYmFjayhiYXNlICsgaywgbS0+ZGF0YS5tYXJrZWRba10sIHApOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBkdW1wX21hcmtzX2ZuKHVpbnRtYXhfdCBtYXJrLCB2b2lkICpvYmplY3QsIHZvaWQgKmNicCkgeworCXN0cnVjdCBvYmplY3RfZW50cnkgKmUgPSBvYmplY3Q7CisJRklMRSAqZiA9IGNicDsKKworCWZwcmludGYoZiwgIjolIiBQUkl1TUFYICIgJXNcbiIsIG1hcmssIG9pZF90b19oZXgoJmUtPmlkeC5vaWQpKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfYnJhbmNoX3JlcG9ydChGSUxFICpycHQsIHN0cnVjdCBicmFuY2ggKmIpCit7CisJZnByaW50ZihycHQsICIlczpcbiIsIGItPm5hbWUpOworCisJZnByaW50ZihycHQsICIgIHN0YXR1cyAgICAgIDoiKTsKKwlpZiAoYi0+YWN0aXZlKQorCQlmcHV0cygiIGFjdGl2ZSIsIHJwdCk7CisJaWYgKGItPmJyYW5jaF90cmVlLnRyZWUpCisJCWZwdXRzKCIgbG9hZGVkIiwgcnB0KTsKKwlpZiAoaXNfbnVsbF9vaWQoJmItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLm9pZCkpCisJCWZwdXRzKCIgZGlydHkiLCBycHQpOworCWZwdXRjKCdcbicsIHJwdCk7CisKKwlmcHJpbnRmKHJwdCwgIiAgdGlwIGNvbW1pdCAgOiAlc1xuIiwgb2lkX3RvX2hleCgmYi0+b2lkKSk7CisJZnByaW50ZihycHQsICIgIG9sZCB0cmVlICAgIDogJXNcbiIsCisJCW9pZF90b19oZXgoJmItPmJyYW5jaF90cmVlLnZlcnNpb25zWzBdLm9pZCkpOworCWZwcmludGYocnB0LCAiICBjdXIgdHJlZSAgICA6ICVzXG4iLAorCQlvaWRfdG9faGV4KCZiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5vaWQpKTsKKwlmcHJpbnRmKHJwdCwgIiAgY29tbWl0IGNsb2NrOiAlIiBQUkl1TUFYICJcbiIsIGItPmxhc3RfY29tbWl0KTsKKworCWZwdXRzKCIgIGxhc3QgcGFjayAgIDogIiwgcnB0KTsKKwlpZiAoYi0+cGFja19pZCA8IE1BWF9QQUNLX0lEKQorCQlmcHJpbnRmKHJwdCwgIiV1IiwgYi0+cGFja19pZCk7CisJZnB1dGMoJ1xuJywgcnB0KTsKKworCWZwdXRjKCdcbicsIHJwdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2NyYXNoX3JlcG9ydChjb25zdCBjaGFyICplcnIpCit7CisJY2hhciAqbG9jID0gZ2l0X3BhdGhkdXAoImZhc3RfaW1wb3J0X2NyYXNoXyUiUFJJdU1BWCwgKHVpbnRtYXhfdCkgZ2V0cGlkKCkpOworCUZJTEUgKnJwdCA9IGZvcGVuKGxvYywgInciKTsKKwlzdHJ1Y3QgYnJhbmNoICpiOworCXVuc2lnbmVkIGxvbmcgbHU7CisJc3RydWN0IHJlY2VudF9jb21tYW5kICpyYzsKKworCWlmICghcnB0KSB7CisJCWVycm9yX2Vycm5vKCJjYW4ndCB3cml0ZSBjcmFzaCByZXBvcnQgJXMiLCBsb2MpOworCQlmcmVlKGxvYyk7CisJCXJldHVybjsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgImZhc3QtaW1wb3J0OiBkdW1waW5nIGNyYXNoIHJlcG9ydCB0byAlc1xuIiwgbG9jKTsKKworCWZwcmludGYocnB0LCAiZmFzdC1pbXBvcnQgY3Jhc2ggcmVwb3J0OlxuIik7CisJZnByaW50ZihycHQsICIgICAgZmFzdC1pbXBvcnQgcHJvY2VzczogJSJQUkl1TUFYIlxuIiwgKHVpbnRtYXhfdCkgZ2V0cGlkKCkpOworCWZwcmludGYocnB0LCAiICAgIHBhcmVudCBwcm9jZXNzICAgICA6ICUiUFJJdU1BWCJcbiIsICh1aW50bWF4X3QpIGdldHBwaWQoKSk7CisJZnByaW50ZihycHQsICIgICAgYXQgJXNcbiIsIHNob3dfZGF0ZSh0aW1lKE5VTEwpLCAwLCBEQVRFX01PREUoSVNPODYwMSkpKTsKKwlmcHV0YygnXG4nLCBycHQpOworCisJZnB1dHMoImZhdGFsOiAiLCBycHQpOworCWZwdXRzKGVyciwgcnB0KTsKKwlmcHV0YygnXG4nLCBycHQpOworCisJZnB1dGMoJ1xuJywgcnB0KTsKKwlmcHV0cygiTW9zdCBSZWNlbnQgQ29tbWFuZHMgQmVmb3JlIENyYXNoXG4iLCBycHQpOworCWZwdXRzKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsIHJwdCk7CisJZm9yIChyYyA9IGNtZF9oaXN0Lm5leHQ7IHJjICE9ICZjbWRfaGlzdDsgcmMgPSByYy0+bmV4dCkgeworCQlpZiAocmMtPm5leHQgPT0gJmNtZF9oaXN0KQorCQkJZnB1dHMoIiogIiwgcnB0KTsKKwkJZWxzZQorCQkJZnB1dHMoIiAgIiwgcnB0KTsKKwkJZnB1dHMocmMtPmJ1ZiwgcnB0KTsKKwkJZnB1dGMoJ1xuJywgcnB0KTsKKwl9CisKKwlmcHV0YygnXG4nLCBycHQpOworCWZwdXRzKCJBY3RpdmUgQnJhbmNoIExSVVxuIiwgcnB0KTsKKwlmcHV0cygiLS0tLS0tLS0tLS0tLS0tLS1cbiIsIHJwdCk7CisJZnByaW50ZihycHQsICIgICAgYWN0aXZlX2JyYW5jaGVzID0gJWx1IGN1ciwgJWx1IG1heFxuIiwKKwkJY3VyX2FjdGl2ZV9icmFuY2hlcywKKwkJbWF4X2FjdGl2ZV9icmFuY2hlcyk7CisJZnB1dGMoJ1xuJywgcnB0KTsKKwlmcHV0cygiICBwb3MgIGNsb2NrIG5hbWVcbiIsIHJwdCk7CisJZnB1dHMoIiAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG4iLCBycHQpOworCWZvciAoYiA9IGFjdGl2ZV9icmFuY2hlcywgbHUgPSAwOyBiOyBiID0gYi0+YWN0aXZlX25leHRfYnJhbmNoKQorCQlmcHJpbnRmKHJwdCwgIiAgJTJsdSkgJTYiIFBSSXVNQVgiICVzXG4iLAorCQkJKytsdSwgYi0+bGFzdF9jb21taXQsIGItPm5hbWUpOworCisJZnB1dGMoJ1xuJywgcnB0KTsKKwlmcHV0cygiSW5hY3RpdmUgQnJhbmNoZXNcbiIsIHJwdCk7CisJZnB1dHMoIi0tLS0tLS0tLS0tLS0tLS0tXG4iLCBycHQpOworCWZvciAobHUgPSAwOyBsdSA8IGJyYW5jaF90YWJsZV9zejsgbHUrKykgeworCQlmb3IgKGIgPSBicmFuY2hfdGFibGVbbHVdOyBiOyBiID0gYi0+dGFibGVfbmV4dF9icmFuY2gpCisJCQl3cml0ZV9icmFuY2hfcmVwb3J0KHJwdCwgYik7CisJfQorCisJaWYgKGZpcnN0X3RhZykgeworCQlzdHJ1Y3QgdGFnICp0ZzsKKwkJZnB1dGMoJ1xuJywgcnB0KTsKKwkJZnB1dHMoIkFubm90YXRlZCBUYWdzXG4iLCBycHQpOworCQlmcHV0cygiLS0tLS0tLS0tLS0tLS1cbiIsIHJwdCk7CisJCWZvciAodGcgPSBmaXJzdF90YWc7IHRnOyB0ZyA9IHRnLT5uZXh0X3RhZykgeworCQkJZnB1dHMob2lkX3RvX2hleCgmdGctPm9pZCksIHJwdCk7CisJCQlmcHV0YygnICcsIHJwdCk7CisJCQlmcHV0cyh0Zy0+bmFtZSwgcnB0KTsKKwkJCWZwdXRjKCdcbicsIHJwdCk7CisJCX0KKwl9CisKKwlmcHV0YygnXG4nLCBycHQpOworCWZwdXRzKCJNYXJrc1xuIiwgcnB0KTsKKwlmcHV0cygiLS0tLS1cbiIsIHJwdCk7CisJaWYgKGV4cG9ydF9tYXJrc19maWxlKQorCQlmcHJpbnRmKHJwdCwgIiAgZXhwb3J0ZWQgdG8gJXNcbiIsIGV4cG9ydF9tYXJrc19maWxlKTsKKwllbHNlCisJCWZvcl9lYWNoX21hcmsobWFya3MsIDAsIGR1bXBfbWFya3NfZm4sIHJwdCk7CisKKwlmcHV0YygnXG4nLCBycHQpOworCWZwdXRzKCItLS0tLS0tLS0tLS0tLS0tLS0tXG4iLCBycHQpOworCWZwdXRzKCJFTkQgT0YgQ1JBU0ggUkVQT1JUXG4iLCBycHQpOworCWZjbG9zZShycHQpOworCWZyZWUobG9jKTsKK30KKworc3RhdGljIHZvaWQgZW5kX3BhY2tmaWxlKHZvaWQpOworc3RhdGljIHZvaWQgdW5rZWVwX2FsbF9wYWNrcyh2b2lkKTsKK3N0YXRpYyB2b2lkIGR1bXBfbWFya3Modm9pZCk7CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGRpZV9uaWNlbHkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwlzdGF0aWMgaW50IHpvbWJpZTsKKwljaGFyIG1lc3NhZ2VbMiAqIFBBVEhfTUFYXTsKKworCXZzbnByaW50ZihtZXNzYWdlLCBzaXplb2YobWVzc2FnZSksIGVyciwgcGFyYW1zKTsKKwlmcHV0cygiZmF0YWw6ICIsIHN0ZGVycik7CisJZnB1dHMobWVzc2FnZSwgc3RkZXJyKTsKKwlmcHV0YygnXG4nLCBzdGRlcnIpOworCisJaWYgKCF6b21iaWUpIHsKKwkJem9tYmllID0gMTsKKwkJd3JpdGVfY3Jhc2hfcmVwb3J0KG1lc3NhZ2UpOworCQllbmRfcGFja2ZpbGUoKTsKKwkJdW5rZWVwX2FsbF9wYWNrcygpOworCQlkdW1wX21hcmtzKCk7CisJfQorCWV4aXQoMTI4KTsKK30KKworI2lmbmRlZiBTSUdVU1IxCS8qIFdpbmRvd3MsIGZvciBleGFtcGxlICovCisKK3N0YXRpYyB2b2lkIHNldF9jaGVja3BvaW50X3NpZ25hbCh2b2lkKQoreworfQorCisjZWxzZQorCitzdGF0aWMgdm9pZCBjaGVja3BvaW50X3NpZ25hbChpbnQgc2lnbm8pCit7CisJY2hlY2twb2ludF9yZXF1ZXN0ZWQgPSAxOworfQorCitzdGF0aWMgdm9pZCBzZXRfY2hlY2twb2ludF9zaWduYWwodm9pZCkKK3sKKwlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOworCisJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7CisJc2Euc2FfaGFuZGxlciA9IGNoZWNrcG9pbnRfc2lnbmFsOworCXNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKKwlzYS5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7CisJc2lnYWN0aW9uKFNJR1VTUjEsICZzYSwgTlVMTCk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBhbGxvY19vYmplY3RzKHVuc2lnbmVkIGludCBjbnQpCit7CisJc3RydWN0IG9iamVjdF9lbnRyeV9wb29sICpiOworCisJYiA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBvYmplY3RfZW50cnlfcG9vbCkKKwkJKyBjbnQgKiBzaXplb2Yoc3RydWN0IG9iamVjdF9lbnRyeSkpOworCWItPm5leHRfcG9vbCA9IGJsb2NrczsKKwliLT5uZXh0X2ZyZWUgPSBiLT5lbnRyaWVzOworCWItPmVuZCA9IGItPmVudHJpZXMgKyBjbnQ7CisJYmxvY2tzID0gYjsKKwlhbGxvY19jb3VudCArPSBjbnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpuZXdfb2JqZWN0KHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplOworCisJaWYgKGJsb2Nrcy0+bmV4dF9mcmVlID09IGJsb2Nrcy0+ZW5kKQorCQlhbGxvY19vYmplY3RzKG9iamVjdF9lbnRyeV9hbGxvYyk7CisKKwllID0gYmxvY2tzLT5uZXh0X2ZyZWUrKzsKKwlvaWRjcHkoJmUtPmlkeC5vaWQsIG9pZCk7CisJcmV0dXJuIGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpmaW5kX29iamVjdChzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJcmV0dXJuIGhhc2htYXBfZ2V0X2VudHJ5X2Zyb21faGFzaCgmb2JqZWN0X3RhYmxlLCBvaWRoYXNoKG9pZCksIG9pZCwKKwkJCQkJICAgc3RydWN0IG9iamVjdF9lbnRyeSwgZW50KTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKmluc2VydF9vYmplY3Qoc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisJdW5zaWduZWQgaW50IGhhc2ggPSBvaWRoYXNoKG9pZCk7CisKKwllID0gaGFzaG1hcF9nZXRfZW50cnlfZnJvbV9oYXNoKCZvYmplY3RfdGFibGUsIGhhc2gsIG9pZCwKKwkJCQkJc3RydWN0IG9iamVjdF9lbnRyeSwgZW50KTsKKwlpZiAoIWUpIHsKKwkJZSA9IG5ld19vYmplY3Qob2lkKTsKKwkJZS0+aWR4Lm9mZnNldCA9IDA7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmZS0+ZW50LCBoYXNoKTsKKwkJaGFzaG1hcF9hZGQoJm9iamVjdF90YWJsZSwgJmUtPmVudCk7CisJfQorCisJcmV0dXJuIGU7Cit9CisKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfcGFja19pZCh1bnNpZ25lZCBpbnQgaWQpCit7CisJdW5zaWduZWQgbG9uZyBsdTsKKwlzdHJ1Y3QgdGFnICp0OworCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplOworCisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeSgmb2JqZWN0X3RhYmxlLCAmaXRlciwgZSwgZW50KSB7CisJCWlmIChlLT5wYWNrX2lkID09IGlkKQorCQkJZS0+cGFja19pZCA9IE1BWF9QQUNLX0lEOworCX0KKworCWZvciAobHUgPSAwOyBsdSA8IGJyYW5jaF90YWJsZV9zejsgbHUrKykgeworCQlzdHJ1Y3QgYnJhbmNoICpiOworCisJCWZvciAoYiA9IGJyYW5jaF90YWJsZVtsdV07IGI7IGIgPSBiLT50YWJsZV9uZXh0X2JyYW5jaCkKKwkJCWlmIChiLT5wYWNrX2lkID09IGlkKQorCQkJCWItPnBhY2tfaWQgPSBNQVhfUEFDS19JRDsKKwl9CisKKwlmb3IgKHQgPSBmaXJzdF90YWc7IHQ7IHQgPSB0LT5uZXh0X3RhZykKKwkJaWYgKHQtPnBhY2tfaWQgPT0gaWQpCisJCQl0LT5wYWNrX2lkID0gTUFYX1BBQ0tfSUQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGNfc3RyKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4pCit7CisJdW5zaWduZWQgaW50IHIgPSAwOworCXdoaWxlIChsZW4tLSA+IDApCisJCXIgPSByICogMzEgKyAqcysrOworCXJldHVybiByOworfQorCitzdGF0aWMgY2hhciAqcG9vbF9zdHJkdXAoY29uc3QgY2hhciAqcykKK3sKKwlzaXplX3QgbGVuID0gc3RybGVuKHMpICsgMTsKKwljaGFyICpyID0gbWVtX3Bvb2xfYWxsb2MoJmZpX21lbV9wb29sLCBsZW4pOworCW1lbWNweShyLCBzLCBsZW4pOworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfbWFyayhzdHJ1Y3QgbWFya19zZXQgKnMsIHVpbnRtYXhfdCBpZG51bSwgc3RydWN0IG9iamVjdF9lbnRyeSAqb2UpCit7CisJd2hpbGUgKChpZG51bSA+PiBzLT5zaGlmdCkgPj0gMTAyNCkgeworCQlzID0gbWVtX3Bvb2xfY2FsbG9jKCZmaV9tZW1fcG9vbCwgMSwgc2l6ZW9mKHN0cnVjdCBtYXJrX3NldCkpOworCQlzLT5zaGlmdCA9IG1hcmtzLT5zaGlmdCArIDEwOworCQlzLT5kYXRhLnNldHNbMF0gPSBtYXJrczsKKwkJbWFya3MgPSBzOworCX0KKwl3aGlsZSAocy0+c2hpZnQpIHsKKwkJdWludG1heF90IGkgPSBpZG51bSA+PiBzLT5zaGlmdDsKKwkJaWRudW0gLT0gaSA8PCBzLT5zaGlmdDsKKwkJaWYgKCFzLT5kYXRhLnNldHNbaV0pIHsKKwkJCXMtPmRhdGEuc2V0c1tpXSA9IG1lbV9wb29sX2NhbGxvYygmZmlfbWVtX3Bvb2wsIDEsIHNpemVvZihzdHJ1Y3QgbWFya19zZXQpKTsKKwkJCXMtPmRhdGEuc2V0c1tpXS0+c2hpZnQgPSBzLT5zaGlmdCAtIDEwOworCQl9CisJCXMgPSBzLT5kYXRhLnNldHNbaV07CisJfQorCWlmICghcy0+ZGF0YS5tYXJrZWRbaWRudW1dKQorCQltYXJrc19zZXRfY291bnQrKzsKKwlzLT5kYXRhLm1hcmtlZFtpZG51bV0gPSBvZTsKK30KKworc3RhdGljIHZvaWQgKmZpbmRfbWFyayhzdHJ1Y3QgbWFya19zZXQgKnMsIHVpbnRtYXhfdCBpZG51bSkKK3sKKwl1aW50bWF4X3Qgb3JpZ19pZG51bSA9IGlkbnVtOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lID0gTlVMTDsKKwlpZiAoKGlkbnVtID4+IHMtPnNoaWZ0KSA8IDEwMjQpIHsKKwkJd2hpbGUgKHMgJiYgcy0+c2hpZnQpIHsKKwkJCXVpbnRtYXhfdCBpID0gaWRudW0gPj4gcy0+c2hpZnQ7CisJCQlpZG51bSAtPSBpIDw8IHMtPnNoaWZ0OworCQkJcyA9IHMtPmRhdGEuc2V0c1tpXTsKKwkJfQorCQlpZiAocykKKwkJCW9lID0gcy0+ZGF0YS5tYXJrZWRbaWRudW1dOworCX0KKwlpZiAoIW9lKQorCQlkaWUoIm1hcmsgOiUiIFBSSXVNQVggIiBub3QgZGVjbGFyZWQiLCBvcmlnX2lkbnVtKTsKKwlyZXR1cm4gb2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXRvbV9zdHIgKnRvX2F0b20oY29uc3QgY2hhciAqcywgdW5zaWduZWQgc2hvcnQgbGVuKQoreworCXVuc2lnbmVkIGludCBoYyA9IGhjX3N0cihzLCBsZW4pICUgYXRvbV90YWJsZV9zejsKKwlzdHJ1Y3QgYXRvbV9zdHIgKmM7CisKKwlmb3IgKGMgPSBhdG9tX3RhYmxlW2hjXTsgYzsgYyA9IGMtPm5leHRfYXRvbSkKKwkJaWYgKGMtPnN0cl9sZW4gPT0gbGVuICYmICFzdHJuY21wKHMsIGMtPnN0cl9kYXQsIGxlbikpCisJCQlyZXR1cm4gYzsKKworCWMgPSBtZW1fcG9vbF9hbGxvYygmZmlfbWVtX3Bvb2wsIHNpemVvZihzdHJ1Y3QgYXRvbV9zdHIpICsgbGVuICsgMSk7CisJYy0+c3RyX2xlbiA9IGxlbjsKKwltZW1jcHkoYy0+c3RyX2RhdCwgcywgbGVuKTsKKwljLT5zdHJfZGF0W2xlbl0gPSAwOworCWMtPm5leHRfYXRvbSA9IGF0b21fdGFibGVbaGNdOworCWF0b21fdGFibGVbaGNdID0gYzsKKwlhdG9tX2NudCsrOworCXJldHVybiBjOworfQorCitzdGF0aWMgc3RydWN0IGJyYW5jaCAqbG9va3VwX2JyYW5jaChjb25zdCBjaGFyICpuYW1lKQoreworCXVuc2lnbmVkIGludCBoYyA9IGhjX3N0cihuYW1lLCBzdHJsZW4obmFtZSkpICUgYnJhbmNoX3RhYmxlX3N6OworCXN0cnVjdCBicmFuY2ggKmI7CisKKwlmb3IgKGIgPSBicmFuY2hfdGFibGVbaGNdOyBiOyBiID0gYi0+dGFibGVfbmV4dF9icmFuY2gpCisJCWlmICghc3RyY21wKG5hbWUsIGItPm5hbWUpKQorCQkJcmV0dXJuIGI7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYnJhbmNoICpuZXdfYnJhbmNoKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJdW5zaWduZWQgaW50IGhjID0gaGNfc3RyKG5hbWUsIHN0cmxlbihuYW1lKSkgJSBicmFuY2hfdGFibGVfc3o7CisJc3RydWN0IGJyYW5jaCAqYiA9IGxvb2t1cF9icmFuY2gobmFtZSk7CisKKwlpZiAoYikKKwkJZGllKCJJbnZhbGlkIGF0dGVtcHQgdG8gY3JlYXRlIGR1cGxpY2F0ZSBicmFuY2g6ICVzIiwgbmFtZSk7CisJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KG5hbWUsIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwpKQorCQlkaWUoIkJyYW5jaCBuYW1lIGRvZXNuJ3QgY29uZm9ybSB0byBHSVQgc3RhbmRhcmRzOiAlcyIsIG5hbWUpOworCisJYiA9IG1lbV9wb29sX2NhbGxvYygmZmlfbWVtX3Bvb2wsIDEsIHNpemVvZihzdHJ1Y3QgYnJhbmNoKSk7CisJYi0+bmFtZSA9IHBvb2xfc3RyZHVwKG5hbWUpOworCWItPnRhYmxlX25leHRfYnJhbmNoID0gYnJhbmNoX3RhYmxlW2hjXTsKKwliLT5icmFuY2hfdHJlZS52ZXJzaW9uc1swXS5tb2RlID0gU19JRkRJUjsKKwliLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5tb2RlID0gU19JRkRJUjsKKwliLT5udW1fbm90ZXMgPSAwOworCWItPmFjdGl2ZSA9IDA7CisJYi0+cGFja19pZCA9IE1BWF9QQUNLX0lEOworCWJyYW5jaF90YWJsZVtoY10gPSBiOworCWJyYW5jaF9jb3VudCsrOworCXJldHVybiBiOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGhjX2VudHJpZXModW5zaWduZWQgaW50IGNudCkKK3sKKwljbnQgPSBjbnQgJiA3ID8gKGNudCAvIDgpICsgMSA6IGNudCAvIDg7CisJcmV0dXJuIGNudCA8IGF2YWlsX3RyZWVfdGFibGVfc3ogPyBjbnQgOiBhdmFpbF90cmVlX3RhYmxlX3N6IC0gMTsKK30KKworc3RhdGljIHN0cnVjdCB0cmVlX2NvbnRlbnQgKm5ld190cmVlX2NvbnRlbnQodW5zaWduZWQgaW50IGNudCkKK3sKKwlzdHJ1Y3QgYXZhaWxfdHJlZV9jb250ZW50ICpmLCAqbCA9IE5VTEw7CisJc3RydWN0IHRyZWVfY29udGVudCAqdDsKKwl1bnNpZ25lZCBpbnQgaGMgPSBoY19lbnRyaWVzKGNudCk7CisKKwlmb3IgKGYgPSBhdmFpbF90cmVlX3RhYmxlW2hjXTsgZjsgbCA9IGYsIGYgPSBmLT5uZXh0X2F2YWlsKQorCQlpZiAoZi0+ZW50cnlfY2FwYWNpdHkgPj0gY250KQorCQkJYnJlYWs7CisKKwlpZiAoZikgeworCQlpZiAobCkKKwkJCWwtPm5leHRfYXZhaWwgPSBmLT5uZXh0X2F2YWlsOworCQllbHNlCisJCQlhdmFpbF90cmVlX3RhYmxlW2hjXSA9IGYtPm5leHRfYXZhaWw7CisJfSBlbHNlIHsKKwkJY250ID0gY250ICYgNyA/ICgoY250IC8gOCkgKyAxKSAqIDggOiBjbnQ7CisJCWYgPSBtZW1fcG9vbF9hbGxvYygmZmlfbWVtX3Bvb2wsIHNpemVvZigqdCkgKyBzaXplb2YodC0+ZW50cmllc1swXSkgKiBjbnQpOworCQlmLT5lbnRyeV9jYXBhY2l0eSA9IGNudDsKKwl9CisKKwl0ID0gKHN0cnVjdCB0cmVlX2NvbnRlbnQqKWY7CisJdC0+ZW50cnlfY291bnQgPSAwOworCXQtPmRlbHRhX2RlcHRoID0gMDsKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV90cmVlX2VudHJ5KHN0cnVjdCB0cmVlX2VudHJ5ICplKTsKK3N0YXRpYyB2b2lkIHJlbGVhc2VfdHJlZV9jb250ZW50KHN0cnVjdCB0cmVlX2NvbnRlbnQgKnQpCit7CisJc3RydWN0IGF2YWlsX3RyZWVfY29udGVudCAqZiA9IChzdHJ1Y3QgYXZhaWxfdHJlZV9jb250ZW50Kil0OworCXVuc2lnbmVkIGludCBoYyA9IGhjX2VudHJpZXMoZi0+ZW50cnlfY2FwYWNpdHkpOworCWYtPm5leHRfYXZhaWwgPSBhdmFpbF90cmVlX3RhYmxlW2hjXTsKKwlhdmFpbF90cmVlX3RhYmxlW2hjXSA9IGY7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfdHJlZV9jb250ZW50X3JlY3Vyc2l2ZShzdHJ1Y3QgdHJlZV9jb250ZW50ICp0KQoreworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKQorCQlyZWxlYXNlX3RyZWVfZW50cnkodC0+ZW50cmllc1tpXSk7CisJcmVsZWFzZV90cmVlX2NvbnRlbnQodCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJlZV9jb250ZW50ICpncm93X3RyZWVfY29udGVudCgKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICp0LAorCWludCBhbXQpCit7CisJc3RydWN0IHRyZWVfY29udGVudCAqciA9IG5ld190cmVlX2NvbnRlbnQodC0+ZW50cnlfY291bnQgKyBhbXQpOworCXItPmVudHJ5X2NvdW50ID0gdC0+ZW50cnlfY291bnQ7CisJci0+ZGVsdGFfZGVwdGggPSB0LT5kZWx0YV9kZXB0aDsKKwlDT1BZX0FSUkFZKHItPmVudHJpZXMsIHQtPmVudHJpZXMsIHQtPmVudHJ5X2NvdW50KTsKKwlyZWxlYXNlX3RyZWVfY29udGVudCh0KTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHN0cnVjdCB0cmVlX2VudHJ5ICpuZXdfdHJlZV9lbnRyeSh2b2lkKQoreworCXN0cnVjdCB0cmVlX2VudHJ5ICplOworCisJaWYgKCFhdmFpbF90cmVlX2VudHJ5KSB7CisJCXVuc2lnbmVkIGludCBuID0gdHJlZV9lbnRyeV9hbGxvYzsKKwkJdHJlZV9lbnRyeV9hbGxvY2QgKz0gbiAqIHNpemVvZihzdHJ1Y3QgdHJlZV9lbnRyeSk7CisJCUFMTE9DX0FSUkFZKGUsIG4pOworCQlhdmFpbF90cmVlX2VudHJ5ID0gZTsKKwkJd2hpbGUgKG4tLSA+IDEpIHsKKwkJCSooKHZvaWQqKillKSA9IGUgKyAxOworCQkJZSsrOworCQl9CisJCSooKHZvaWQqKillKSA9IE5VTEw7CisJfQorCisJZSA9IGF2YWlsX3RyZWVfZW50cnk7CisJYXZhaWxfdHJlZV9lbnRyeSA9ICooKHZvaWQqKillKTsKKwlyZXR1cm4gZTsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV90cmVlX2VudHJ5KHN0cnVjdCB0cmVlX2VudHJ5ICplKQoreworCWlmIChlLT50cmVlKQorCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUoZS0+dHJlZSk7CisJKigodm9pZCoqKWUpID0gYXZhaWxfdHJlZV9lbnRyeTsKKwlhdmFpbF90cmVlX2VudHJ5ID0gZTsKK30KKworc3RhdGljIHN0cnVjdCB0cmVlX2NvbnRlbnQgKmR1cF90cmVlX2NvbnRlbnQoc3RydWN0IHRyZWVfY29udGVudCAqcykKK3sKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICpkOworCXN0cnVjdCB0cmVlX2VudHJ5ICphLCAqYjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICghcykKKwkJcmV0dXJuIE5VTEw7CisJZCA9IG5ld190cmVlX2NvbnRlbnQocy0+ZW50cnlfY291bnQpOworCWZvciAoaSA9IDA7IGkgPCBzLT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWEgPSBzLT5lbnRyaWVzW2ldOworCQliID0gbmV3X3RyZWVfZW50cnkoKTsKKwkJbWVtY3B5KGIsIGEsIHNpemVvZigqYSkpOworCQlpZiAoYS0+dHJlZSAmJiBpc19udWxsX29pZCgmYi0+dmVyc2lvbnNbMV0ub2lkKSkKKwkJCWItPnRyZWUgPSBkdXBfdHJlZV9jb250ZW50KGEtPnRyZWUpOworCQllbHNlCisJCQliLT50cmVlID0gTlVMTDsKKwkJZC0+ZW50cmllc1tpXSA9IGI7CisJfQorCWQtPmVudHJ5X2NvdW50ID0gcy0+ZW50cnlfY291bnQ7CisJZC0+ZGVsdGFfZGVwdGggPSBzLT5kZWx0YV9kZXB0aDsKKworCXJldHVybiBkOworfQorCitzdGF0aWMgdm9pZCBzdGFydF9wYWNrZmlsZSh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgdG1wX2ZpbGUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwlzdHJ1Y3QgcGFja19oZWFkZXIgaGRyOworCWludCBwYWNrX2ZkOworCisJcGFja19mZCA9IG9kYl9ta3N0ZW1wKCZ0bXBfZmlsZSwgInBhY2svdG1wX3BhY2tfWFhYWFhYIik7CisJRkxFWF9BTExPQ19TVFIocCwgcGFja19uYW1lLCB0bXBfZmlsZS5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZ0bXBfZmlsZSk7CisKKwlwLT5wYWNrX2ZkID0gcGFja19mZDsKKwlwLT5kb19ub3RfY2xvc2UgPSAxOworCXBhY2tfZmlsZSA9IGhhc2hmZChwYWNrX2ZkLCBwLT5wYWNrX25hbWUpOworCisJaGRyLmhkcl9zaWduYXR1cmUgPSBodG9ubChQQUNLX1NJR05BVFVSRSk7CisJaGRyLmhkcl92ZXJzaW9uID0gaHRvbmwoMik7CisJaGRyLmhkcl9lbnRyaWVzID0gMDsKKwloYXNod3JpdGUocGFja19maWxlLCAmaGRyLCBzaXplb2YoaGRyKSk7CisKKwlwYWNrX2RhdGEgPSBwOworCXBhY2tfc2l6ZSA9IHNpemVvZihoZHIpOworCW9iamVjdF9jb3VudCA9IDA7CisKKwlSRUFMTE9DX0FSUkFZKGFsbF9wYWNrcywgcGFja19pZCArIDEpOworCWFsbF9wYWNrc1twYWNrX2lkXSA9IHA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcmVhdGVfaW5kZXgodm9pZCkKK3sKKwljb25zdCBjaGFyICp0bXBmaWxlOworCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKmlkeCwgKipjLCAqKmxhc3Q7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5X3Bvb2wgKm87CisKKwkvKiBCdWlsZCB0aGUgdGFibGUgb2Ygb2JqZWN0IElEcy4gKi8KKwlBTExPQ19BUlJBWShpZHgsIG9iamVjdF9jb3VudCk7CisJYyA9IGlkeDsKKwlmb3IgKG8gPSBibG9ja3M7IG87IG8gPSBvLT5uZXh0X3Bvb2wpCisJCWZvciAoZSA9IG8tPm5leHRfZnJlZTsgZS0tICE9IG8tPmVudHJpZXM7KQorCQkJaWYgKHBhY2tfaWQgPT0gZS0+cGFja19pZCkKKwkJCQkqYysrID0gJmUtPmlkeDsKKwlsYXN0ID0gaWR4ICsgb2JqZWN0X2NvdW50OworCWlmIChjICE9IGxhc3QpCisJCWRpZSgiaW50ZXJuYWwgY29uc2lzdGVuY3kgZXJyb3IgY3JlYXRpbmcgdGhlIGluZGV4Iik7CisKKwl0bXBmaWxlID0gd3JpdGVfaWR4X2ZpbGUoTlVMTCwgaWR4LCBvYmplY3RfY291bnQsICZwYWNrX2lkeF9vcHRzLAorCQkJCSBwYWNrX2RhdGEtPmhhc2gpOworCWZyZWUoaWR4KTsKKwlyZXR1cm4gdG1wZmlsZTsKK30KKworc3RhdGljIGNoYXIgKmtlZXBfcGFjayhjb25zdCBjaGFyICpjdXJyX2luZGV4X25hbWUpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmtlZXBfbXNnID0gImZhc3QtaW1wb3J0IjsKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWUgPSBTVFJCVUZfSU5JVDsKKwlpbnQga2VlcF9mZDsKKworCW9kYl9wYWNrX25hbWUoJm5hbWUsIHBhY2tfZGF0YS0+aGFzaCwgImtlZXAiKTsKKwlrZWVwX2ZkID0gb2RiX3BhY2tfa2VlcChuYW1lLmJ1Zik7CisJaWYgKGtlZXBfZmQgPCAwKQorCQlkaWVfZXJybm8oImNhbm5vdCBjcmVhdGUga2VlcCBmaWxlIik7CisJd3JpdGVfb3JfZGllKGtlZXBfZmQsIGtlZXBfbXNnLCBzdHJsZW4oa2VlcF9tc2cpKTsKKwlpZiAoY2xvc2Uoa2VlcF9mZCkpCisJCWRpZV9lcnJubygiZmFpbGVkIHRvIHdyaXRlIGtlZXAgZmlsZSIpOworCisJb2RiX3BhY2tfbmFtZSgmbmFtZSwgcGFja19kYXRhLT5oYXNoLCAicGFjayIpOworCWlmIChmaW5hbGl6ZV9vYmplY3RfZmlsZShwYWNrX2RhdGEtPnBhY2tfbmFtZSwgbmFtZS5idWYpKQorCQlkaWUoImNhbm5vdCBzdG9yZSBwYWNrIGZpbGUiKTsKKworCW9kYl9wYWNrX25hbWUoJm5hbWUsIHBhY2tfZGF0YS0+aGFzaCwgImlkeCIpOworCWlmIChmaW5hbGl6ZV9vYmplY3RfZmlsZShjdXJyX2luZGV4X25hbWUsIG5hbWUuYnVmKSkKKwkJZGllKCJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIpOworCWZyZWUoKHZvaWQgKiljdXJyX2luZGV4X25hbWUpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZuYW1lLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgdW5rZWVwX2FsbF9wYWNrcyh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgbmFtZSA9IFNUUkJVRl9JTklUOworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IHBhY2tfaWQ7IGsrKykgeworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGFsbF9wYWNrc1trXTsKKwkJb2RiX3BhY2tfbmFtZSgmbmFtZSwgcC0+aGFzaCwgImtlZXAiKTsKKwkJdW5saW5rX29yX3dhcm4obmFtZS5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgbG9vc2VuX3NtYWxsX3BhY2soY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgdW5wYWNrID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJaWYgKGxzZWVrKHAtPnBhY2tfZmQsIDAsIFNFRUtfU0VUKSA8IDApCisJCWRpZV9lcnJubygiRmFpbGVkIHNlZWtpbmcgdG8gc3RhcnQgb2YgJyVzJyIsIHAtPnBhY2tfbmFtZSk7CisKKwl1bnBhY2suaW4gPSBwLT5wYWNrX2ZkOworCXVucGFjay5naXRfY21kID0gMTsKKwl1bnBhY2suc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisJYXJndl9hcnJheV9wdXNoKCZ1bnBhY2suYXJncywgInVucGFjay1vYmplY3RzIik7CisJaWYgKCFzaG93X3N0YXRzKQorCQlhcmd2X2FycmF5X3B1c2goJnVucGFjay5hcmdzLCAiLXEiKTsKKworCXJldHVybiBydW5fY29tbWFuZCgmdW5wYWNrKTsKK30KKworc3RhdGljIHZvaWQgZW5kX3BhY2tmaWxlKHZvaWQpCit7CisJc3RhdGljIGludCBydW5uaW5nOworCisJaWYgKHJ1bm5pbmcgfHwgIXBhY2tfZGF0YSkKKwkJcmV0dXJuOworCisJcnVubmluZyA9IDE7CisJY2xlYXJfZGVsdGFfYmFzZV9jYWNoZSgpOworCWlmIChvYmplY3RfY291bnQpIHsKKwkJc3RydWN0IHBhY2tlZF9naXQgKm5ld19wOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIGN1cl9wYWNrX29pZDsKKwkJY2hhciAqaWR4X25hbWU7CisJCWludCBpOworCQlzdHJ1Y3QgYnJhbmNoICpiOworCQlzdHJ1Y3QgdGFnICp0OworCisJCWNsb3NlX3BhY2tfd2luZG93cyhwYWNrX2RhdGEpOworCQlmaW5hbGl6ZV9oYXNoZmlsZShwYWNrX2ZpbGUsIGN1cl9wYWNrX29pZC5oYXNoLCAwKTsKKwkJZml4dXBfcGFja19oZWFkZXJfZm9vdGVyKHBhY2tfZGF0YS0+cGFja19mZCwgcGFja19kYXRhLT5oYXNoLAorCQkJCQkgcGFja19kYXRhLT5wYWNrX25hbWUsIG9iamVjdF9jb3VudCwKKwkJCQkJIGN1cl9wYWNrX29pZC5oYXNoLCBwYWNrX3NpemUpOworCisJCWlmIChvYmplY3RfY291bnQgPD0gdW5wYWNrX2xpbWl0KSB7CisJCQlpZiAoIWxvb3Nlbl9zbWFsbF9wYWNrKHBhY2tfZGF0YSkpIHsKKwkJCQlpbnZhbGlkYXRlX3BhY2tfaWQocGFja19pZCk7CisJCQkJZ290byBkaXNjYXJkX3BhY2s7CisJCQl9CisJCX0KKworCQljbG9zZShwYWNrX2RhdGEtPnBhY2tfZmQpOworCQlpZHhfbmFtZSA9IGtlZXBfcGFjayhjcmVhdGVfaW5kZXgoKSk7CisKKwkJLyogUmVnaXN0ZXIgdGhlIHBhY2tmaWxlIHdpdGggY29yZSBnaXQncyBtYWNoaW5lcnkuICovCisJCW5ld19wID0gYWRkX3BhY2tlZF9naXQoaWR4X25hbWUsIHN0cmxlbihpZHhfbmFtZSksIDEpOworCQlpZiAoIW5ld19wKQorCQkJZGllKCJjb3JlIGdpdCByZWplY3RlZCBpbmRleCAlcyIsIGlkeF9uYW1lKTsKKwkJYWxsX3BhY2tzW3BhY2tfaWRdID0gbmV3X3A7CisJCWluc3RhbGxfcGFja2VkX2dpdCh0aGVfcmVwb3NpdG9yeSwgbmV3X3ApOworCQlmcmVlKGlkeF9uYW1lKTsKKworCQkvKiBQcmludCB0aGUgYm91bmRhcnkgKi8KKwkJaWYgKHBhY2tfZWRnZXMpIHsKKwkJCWZwcmludGYocGFja19lZGdlcywgIiVzOiIsIG5ld19wLT5wYWNrX25hbWUpOworCQkJZm9yIChpID0gMDsgaSA8IGJyYW5jaF90YWJsZV9zejsgaSsrKSB7CisJCQkJZm9yIChiID0gYnJhbmNoX3RhYmxlW2ldOyBiOyBiID0gYi0+dGFibGVfbmV4dF9icmFuY2gpIHsKKwkJCQkJaWYgKGItPnBhY2tfaWQgPT0gcGFja19pZCkKKwkJCQkJCWZwcmludGYocGFja19lZGdlcywgIiAlcyIsCisJCQkJCQkJb2lkX3RvX2hleCgmYi0+b2lkKSk7CisJCQkJfQorCQkJfQorCQkJZm9yICh0ID0gZmlyc3RfdGFnOyB0OyB0ID0gdC0+bmV4dF90YWcpIHsKKwkJCQlpZiAodC0+cGFja19pZCA9PSBwYWNrX2lkKQorCQkJCQlmcHJpbnRmKHBhY2tfZWRnZXMsICIgJXMiLAorCQkJCQkJb2lkX3RvX2hleCgmdC0+b2lkKSk7CisJCQl9CisJCQlmcHV0YygnXG4nLCBwYWNrX2VkZ2VzKTsKKwkJCWZmbHVzaChwYWNrX2VkZ2VzKTsKKwkJfQorCisJCXBhY2tfaWQrKzsKKwl9CisJZWxzZSB7CitkaXNjYXJkX3BhY2s6CisJCWNsb3NlKHBhY2tfZGF0YS0+cGFja19mZCk7CisJCXVubGlua19vcl93YXJuKHBhY2tfZGF0YS0+cGFja19uYW1lKTsKKwl9CisJRlJFRV9BTkRfTlVMTChwYWNrX2RhdGEpOworCXJ1bm5pbmcgPSAwOworCisJLyogV2UgY2FuJ3QgY2FycnkgYSBkZWx0YSBhY3Jvc3MgcGFja2ZpbGVzLiAqLworCXN0cmJ1Zl9yZWxlYXNlKCZsYXN0X2Jsb2IuZGF0YSk7CisJbGFzdF9ibG9iLm9mZnNldCA9IDA7CisJbGFzdF9ibG9iLmRlcHRoID0gMDsKK30KKworc3RhdGljIHZvaWQgY3ljbGVfcGFja2ZpbGUodm9pZCkKK3sKKwllbmRfcGFja2ZpbGUoKTsKKwlzdGFydF9wYWNrZmlsZSgpOworfQorCitzdGF0aWMgaW50IHN0b3JlX29iamVjdCgKKwllbnVtIG9iamVjdF90eXBlIHR5cGUsCisJc3RydWN0IHN0cmJ1ZiAqZGF0LAorCXN0cnVjdCBsYXN0X29iamVjdCAqbGFzdCwKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWRvdXQsCisJdWludG1heF90IG1hcmspCit7CisJdm9pZCAqb3V0LCAqZGVsdGE7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZTsKKwl1bnNpZ25lZCBjaGFyIGhkcls5Nl07CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJdW5zaWduZWQgbG9uZyBoZHJsZW4sIGRlbHRhbGVuOworCWdpdF9oYXNoX2N0eCBjOworCWdpdF96c3RyZWFtIHM7CisKKwloZHJsZW4gPSB4c25wcmludGYoKGNoYXIgKiloZHIsIHNpemVvZihoZHIpLCAiJXMgJWx1IiwKKwkJCSAgIHR5cGVfbmFtZSh0eXBlKSwgKHVuc2lnbmVkIGxvbmcpZGF0LT5sZW4pICsgMTsKKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZjKTsKKwl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmMsIGhkciwgaGRybGVuKTsKKwl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmMsIGRhdC0+YnVmLCBkYXQtPmxlbik7CisJdGhlX2hhc2hfYWxnby0+ZmluYWxfZm4ob2lkLmhhc2gsICZjKTsKKwlpZiAob2lkb3V0KQorCQlvaWRjcHkob2lkb3V0LCAmb2lkKTsKKworCWUgPSBpbnNlcnRfb2JqZWN0KCZvaWQpOworCWlmIChtYXJrKQorCQlpbnNlcnRfbWFyayhtYXJrcywgbWFyaywgZSk7CisJaWYgKGUtPmlkeC5vZmZzZXQpIHsKKwkJZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbdHlwZV0rKzsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChmaW5kX3NoYTFfcGFjayhvaWQuaGFzaCwKKwkJCQkgIGdldF9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnkpKSkgeworCQllLT50eXBlID0gdHlwZTsKKwkJZS0+cGFja19pZCA9IE1BWF9QQUNLX0lEOworCQllLT5pZHgub2Zmc2V0ID0gMTsgLyoganVzdCBub3QgemVybyEgKi8KKwkJZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbdHlwZV0rKzsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGxhc3QgJiYgbGFzdC0+ZGF0YS5sZW4gJiYgbGFzdC0+ZGF0YS5idWYgJiYgbGFzdC0+ZGVwdGggPCBtYXhfZGVwdGgKKwkJJiYgZGF0LT5sZW4gPiB0aGVfaGFzaF9hbGdvLT5yYXdzeikgeworCisJCWRlbHRhX2NvdW50X2F0dGVtcHRzX2J5X3R5cGVbdHlwZV0rKzsKKwkJZGVsdGEgPSBkaWZmX2RlbHRhKGxhc3QtPmRhdGEuYnVmLCBsYXN0LT5kYXRhLmxlbiwKKwkJCWRhdC0+YnVmLCBkYXQtPmxlbiwKKwkJCSZkZWx0YWxlbiwgZGF0LT5sZW4gLSB0aGVfaGFzaF9hbGdvLT5yYXdzeik7CisJfSBlbHNlCisJCWRlbHRhID0gTlVMTDsKKworCWdpdF9kZWZsYXRlX2luaXQoJnMsIHBhY2tfY29tcHJlc3Npb25fbGV2ZWwpOworCWlmIChkZWx0YSkgeworCQlzLm5leHRfaW4gPSBkZWx0YTsKKwkJcy5hdmFpbF9pbiA9IGRlbHRhbGVuOworCX0gZWxzZSB7CisJCXMubmV4dF9pbiA9ICh2b2lkICopZGF0LT5idWY7CisJCXMuYXZhaWxfaW4gPSBkYXQtPmxlbjsKKwl9CisJcy5hdmFpbF9vdXQgPSBnaXRfZGVmbGF0ZV9ib3VuZCgmcywgcy5hdmFpbF9pbik7CisJcy5uZXh0X291dCA9IG91dCA9IHhtYWxsb2Mocy5hdmFpbF9vdXQpOworCXdoaWxlIChnaXRfZGVmbGF0ZSgmcywgWl9GSU5JU0gpID09IFpfT0spCisJCTsgLyogbm90aGluZyAqLworCWdpdF9kZWZsYXRlX2VuZCgmcyk7CisKKwkvKiBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGF1dG8tY2hlY2twb2ludC4gKi8KKwlpZiAoKG1heF9wYWNrc2l6ZQorCQkmJiAocGFja19zaXplICsgUEFDS19TSVpFX1RIUkVTSE9MRCArIHMudG90YWxfb3V0KSA+IG1heF9wYWNrc2l6ZSkKKwkJfHwgKHBhY2tfc2l6ZSArIFBBQ0tfU0laRV9USFJFU0hPTEQgKyBzLnRvdGFsX291dCkgPCBwYWNrX3NpemUpIHsKKworCQkvKiBUaGlzIG5ldyBvYmplY3QgbmVlZHMgdG8gKm5vdCogaGF2ZSB0aGUgY3VycmVudCBwYWNrX2lkLiAqLworCQllLT5wYWNrX2lkID0gcGFja19pZCArIDE7CisJCWN5Y2xlX3BhY2tmaWxlKCk7CisKKwkJLyogV2UgY2Fubm90IGNhcnJ5IGEgZGVsdGEgaW50byB0aGUgbmV3IHBhY2suICovCisJCWlmIChkZWx0YSkgeworCQkJRlJFRV9BTkRfTlVMTChkZWx0YSk7CisKKwkJCWdpdF9kZWZsYXRlX2luaXQoJnMsIHBhY2tfY29tcHJlc3Npb25fbGV2ZWwpOworCQkJcy5uZXh0X2luID0gKHZvaWQgKilkYXQtPmJ1ZjsKKwkJCXMuYXZhaWxfaW4gPSBkYXQtPmxlbjsKKwkJCXMuYXZhaWxfb3V0ID0gZ2l0X2RlZmxhdGVfYm91bmQoJnMsIHMuYXZhaWxfaW4pOworCQkJcy5uZXh0X291dCA9IG91dCA9IHhyZWFsbG9jKG91dCwgcy5hdmFpbF9vdXQpOworCQkJd2hpbGUgKGdpdF9kZWZsYXRlKCZzLCBaX0ZJTklTSCkgPT0gWl9PSykKKwkJCQk7IC8qIG5vdGhpbmcgKi8KKwkJCWdpdF9kZWZsYXRlX2VuZCgmcyk7CisJCX0KKwl9CisKKwllLT50eXBlID0gdHlwZTsKKwllLT5wYWNrX2lkID0gcGFja19pZDsKKwllLT5pZHgub2Zmc2V0ID0gcGFja19zaXplOworCW9iamVjdF9jb3VudCsrOworCW9iamVjdF9jb3VudF9ieV90eXBlW3R5cGVdKys7CisKKwljcmMzMl9iZWdpbihwYWNrX2ZpbGUpOworCisJaWYgKGRlbHRhKSB7CisJCW9mZl90IG9mcyA9IGUtPmlkeC5vZmZzZXQgLSBsYXN0LT5vZmZzZXQ7CisJCXVuc2lnbmVkIHBvcyA9IHNpemVvZihoZHIpIC0gMTsKKworCQlkZWx0YV9jb3VudF9ieV90eXBlW3R5cGVdKys7CisJCWUtPmRlcHRoID0gbGFzdC0+ZGVwdGggKyAxOworCisJCWhkcmxlbiA9IGVuY29kZV9pbl9wYWNrX29iamVjdF9oZWFkZXIoaGRyLCBzaXplb2YoaGRyKSwKKwkJCQkJCSAgICAgIE9CSl9PRlNfREVMVEEsIGRlbHRhbGVuKTsKKwkJaGFzaHdyaXRlKHBhY2tfZmlsZSwgaGRyLCBoZHJsZW4pOworCQlwYWNrX3NpemUgKz0gaGRybGVuOworCisJCWhkcltwb3NdID0gb2ZzICYgMTI3OworCQl3aGlsZSAob2ZzID4+PSA3KQorCQkJaGRyWy0tcG9zXSA9IDEyOCB8ICgtLW9mcyAmIDEyNyk7CisJCWhhc2h3cml0ZShwYWNrX2ZpbGUsIGhkciArIHBvcywgc2l6ZW9mKGhkcikgLSBwb3MpOworCQlwYWNrX3NpemUgKz0gc2l6ZW9mKGhkcikgLSBwb3M7CisJfSBlbHNlIHsKKwkJZS0+ZGVwdGggPSAwOworCQloZHJsZW4gPSBlbmNvZGVfaW5fcGFja19vYmplY3RfaGVhZGVyKGhkciwgc2l6ZW9mKGhkciksCisJCQkJCQkgICAgICB0eXBlLCBkYXQtPmxlbik7CisJCWhhc2h3cml0ZShwYWNrX2ZpbGUsIGhkciwgaGRybGVuKTsKKwkJcGFja19zaXplICs9IGhkcmxlbjsKKwl9CisKKwloYXNod3JpdGUocGFja19maWxlLCBvdXQsIHMudG90YWxfb3V0KTsKKwlwYWNrX3NpemUgKz0gcy50b3RhbF9vdXQ7CisKKwllLT5pZHguY3JjMzIgPSBjcmMzMl9lbmQocGFja19maWxlKTsKKworCWZyZWUob3V0KTsKKwlmcmVlKGRlbHRhKTsKKwlpZiAobGFzdCkgeworCQlpZiAobGFzdC0+bm9fc3dhcCkgeworCQkJbGFzdC0+ZGF0YSA9ICpkYXQ7CisJCX0gZWxzZSB7CisJCQlzdHJidWZfc3dhcCgmbGFzdC0+ZGF0YSwgZGF0KTsKKwkJfQorCQlsYXN0LT5vZmZzZXQgPSBlLT5pZHgub2Zmc2V0OworCQlsYXN0LT5kZXB0aCA9IGUtPmRlcHRoOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdHJ1bmNhdGVfcGFjayhzdHJ1Y3QgaGFzaGZpbGVfY2hlY2twb2ludCAqY2hlY2twb2ludCkKK3sKKwlpZiAoaGFzaGZpbGVfdHJ1bmNhdGUocGFja19maWxlLCBjaGVja3BvaW50KSkKKwkJZGllX2Vycm5vKCJjYW5ub3QgdHJ1bmNhdGUgcGFjayB0byBza2lwIGR1cGxpY2F0ZSIpOworCXBhY2tfc2l6ZSA9IGNoZWNrcG9pbnQtPm9mZnNldDsKK30KKworc3RhdGljIHZvaWQgc3RyZWFtX2Jsb2IodWludG1heF90IGxlbiwgc3RydWN0IG9iamVjdF9pZCAqb2lkb3V0LCB1aW50bWF4X3QgbWFyaykKK3sKKwlzaXplX3QgaW5fc3ogPSA2NCAqIDEwMjQsIG91dF9zeiA9IDY0ICogMTAyNDsKKwl1bnNpZ25lZCBjaGFyICppbl9idWYgPSB4bWFsbG9jKGluX3N6KTsKKwl1bnNpZ25lZCBjaGFyICpvdXRfYnVmID0geG1hbGxvYyhvdXRfc3opOworCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJdW5zaWduZWQgbG9uZyBoZHJsZW47CisJb2ZmX3Qgb2Zmc2V0OworCWdpdF9oYXNoX2N0eCBjOworCWdpdF96c3RyZWFtIHM7CisJc3RydWN0IGhhc2hmaWxlX2NoZWNrcG9pbnQgY2hlY2twb2ludDsKKwlpbnQgc3RhdHVzID0gWl9PSzsKKworCS8qIERldGVybWluZSBpZiB3ZSBzaG91bGQgYXV0by1jaGVja3BvaW50LiAqLworCWlmICgobWF4X3BhY2tzaXplCisJCSYmIChwYWNrX3NpemUgKyBQQUNLX1NJWkVfVEhSRVNIT0xEICsgbGVuKSA+IG1heF9wYWNrc2l6ZSkKKwkJfHwgKHBhY2tfc2l6ZSArIFBBQ0tfU0laRV9USFJFU0hPTEQgKyBsZW4pIDwgcGFja19zaXplKQorCQljeWNsZV9wYWNrZmlsZSgpOworCisJaGFzaGZpbGVfY2hlY2twb2ludChwYWNrX2ZpbGUsICZjaGVja3BvaW50KTsKKwlvZmZzZXQgPSBjaGVja3BvaW50Lm9mZnNldDsKKworCWhkcmxlbiA9IHhzbnByaW50ZigoY2hhciAqKW91dF9idWYsIG91dF9zeiwgImJsb2IgJSIgUFJJdU1BWCwgbGVuKSArIDE7CisKKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZjKTsKKwl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmMsIG91dF9idWYsIGhkcmxlbik7CisKKwljcmMzMl9iZWdpbihwYWNrX2ZpbGUpOworCisJZ2l0X2RlZmxhdGVfaW5pdCgmcywgcGFja19jb21wcmVzc2lvbl9sZXZlbCk7CisKKwloZHJsZW4gPSBlbmNvZGVfaW5fcGFja19vYmplY3RfaGVhZGVyKG91dF9idWYsIG91dF9zeiwgT0JKX0JMT0IsIGxlbik7CisKKwlzLm5leHRfb3V0ID0gb3V0X2J1ZiArIGhkcmxlbjsKKwlzLmF2YWlsX291dCA9IG91dF9zeiAtIGhkcmxlbjsKKworCXdoaWxlIChzdGF0dXMgIT0gWl9TVFJFQU1fRU5EKSB7CisJCWlmICgwIDwgbGVuICYmICFzLmF2YWlsX2luKSB7CisJCQlzaXplX3QgY250ID0gaW5fc3ogPCBsZW4gPyBpbl9zeiA6IChzaXplX3QpbGVuOworCQkJc2l6ZV90IG4gPSBmcmVhZChpbl9idWYsIDEsIGNudCwgc3RkaW4pOworCQkJaWYgKCFuICYmIGZlb2Yoc3RkaW4pKQorCQkJCWRpZSgiRU9GIGluIGRhdGEgKCUiIFBSSXVNQVggIiBieXRlcyByZW1haW5pbmcpIiwgbGVuKTsKKworCQkJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjLCBpbl9idWYsIG4pOworCQkJcy5uZXh0X2luID0gaW5fYnVmOworCQkJcy5hdmFpbF9pbiA9IG47CisJCQlsZW4gLT0gbjsKKwkJfQorCisJCXN0YXR1cyA9IGdpdF9kZWZsYXRlKCZzLCBsZW4gPyAwIDogWl9GSU5JU0gpOworCisJCWlmICghcy5hdmFpbF9vdXQgfHwgc3RhdHVzID09IFpfU1RSRUFNX0VORCkgeworCQkJc2l6ZV90IG4gPSBzLm5leHRfb3V0IC0gb3V0X2J1ZjsKKwkJCWhhc2h3cml0ZShwYWNrX2ZpbGUsIG91dF9idWYsIG4pOworCQkJcGFja19zaXplICs9IG47CisJCQlzLm5leHRfb3V0ID0gb3V0X2J1ZjsKKwkJCXMuYXZhaWxfb3V0ID0gb3V0X3N6OworCQl9CisKKwkJc3dpdGNoIChzdGF0dXMpIHsKKwkJY2FzZSBaX09LOgorCQljYXNlIFpfQlVGX0VSUk9SOgorCQljYXNlIFpfU1RSRUFNX0VORDoKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJZGllKCJ1bmV4cGVjdGVkIGRlZmxhdGUgZmFpbHVyZTogJWQiLCBzdGF0dXMpOworCQl9CisJfQorCWdpdF9kZWZsYXRlX2VuZCgmcyk7CisJdGhlX2hhc2hfYWxnby0+ZmluYWxfZm4ob2lkLmhhc2gsICZjKTsKKworCWlmIChvaWRvdXQpCisJCW9pZGNweShvaWRvdXQsICZvaWQpOworCisJZSA9IGluc2VydF9vYmplY3QoJm9pZCk7CisKKwlpZiAobWFyaykKKwkJaW5zZXJ0X21hcmsobWFya3MsIG1hcmssIGUpOworCisJaWYgKGUtPmlkeC5vZmZzZXQpIHsKKwkJZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbT0JKX0JMT0JdKys7CisJCXRydW5jYXRlX3BhY2soJmNoZWNrcG9pbnQpOworCisJfSBlbHNlIGlmIChmaW5kX3NoYTFfcGFjayhvaWQuaGFzaCwKKwkJCQkgIGdldF9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnkpKSkgeworCQllLT50eXBlID0gT0JKX0JMT0I7CisJCWUtPnBhY2tfaWQgPSBNQVhfUEFDS19JRDsKKwkJZS0+aWR4Lm9mZnNldCA9IDE7IC8qIGp1c3Qgbm90IHplcm8hICovCisJCWR1cGxpY2F0ZV9jb3VudF9ieV90eXBlW09CSl9CTE9CXSsrOworCQl0cnVuY2F0ZV9wYWNrKCZjaGVja3BvaW50KTsKKworCX0gZWxzZSB7CisJCWUtPmRlcHRoID0gMDsKKwkJZS0+dHlwZSA9IE9CSl9CTE9COworCQllLT5wYWNrX2lkID0gcGFja19pZDsKKwkJZS0+aWR4Lm9mZnNldCA9IG9mZnNldDsKKwkJZS0+aWR4LmNyYzMyID0gY3JjMzJfZW5kKHBhY2tfZmlsZSk7CisJCW9iamVjdF9jb3VudCsrOworCQlvYmplY3RfY291bnRfYnlfdHlwZVtPQkpfQkxPQl0rKzsKKwl9CisKKwlmcmVlKGluX2J1Zik7CisJZnJlZShvdXRfYnVmKTsKK30KKworLyogQWxsIGNhbGxzIG11c3QgYmUgZ3VhcmRlZCBieSBmaW5kX29iamVjdCgpIG9yIGZpbmRfbWFyaygpIHRvCisgKiBlbnN1cmUgdGhlICdzdHJ1Y3Qgb2JqZWN0X2VudHJ5JyBwYXNzZWQgd2FzIHdyaXR0ZW4gYnkgdGhpcworICogcHJvY2VzcyBpbnN0YW5jZS4gIFdlIHVucGFjayB0aGUgZW50cnkgYnkgdGhlIG9mZnNldCwgYXZvaWRpbmcKKyAqIHRoZSBuZWVkIGZvciB0aGUgY29ycmVzcG9uZGluZyAuaWR4IGZpbGUuICBUaGlzIHVucGFja2luZyBydWxlCisgKiB3b3JrcyBiZWNhdXNlIHdlIG9ubHkgdXNlIE9CSl9SRUZfREVMVEEgd2l0aGluIHRoZSBwYWNrZmlsZXMKKyAqIGNyZWF0ZWQgYnkgZmFzdC1pbXBvcnQuCisgKgorICogb2UgbXVzdCBub3QgYmUgTlVMTC4gIFN1Y2ggYW4gb2UgdXN1YWxseSBjb21lcyBmcm9tIGdpdmluZworICogYW4gdW5rbm93biBTSEEtMSB0byBmaW5kX29iamVjdCgpIG9yIGFuIHVuZGVmaW5lZCBtYXJrIHRvCisgKiBmaW5kX21hcmsoKS4gIENhbGxlcnMgbXVzdCB0ZXN0IGZvciB0aGlzIGNvbmRpdGlvbiBhbmQgdXNlCisgKiB0aGUgc3RhbmRhcmQgcmVhZF9zaGExX2ZpbGUoKSB3aGVuIGl0IGhhcHBlbnMuCisgKgorICogb2UtPnBhY2tfaWQgbXVzdCBub3QgYmUgTUFYX1BBQ0tfSUQuICBTdWNoIGFuIG9lIGlzIHVzdWFsbHkgZnJvbQorICogZmluZF9tYXJrKCksIHdoZXJlIHRoZSBtYXJrIHdhcyByZWxvYWRlZCBmcm9tIGFuIGV4aXN0aW5nIG1hcmtzCisgKiBmaWxlIGFuZCBpcyByZWZlcmVuY2luZyBhbiBvYmplY3QgdGhhdCB0aGlzIGZhc3QtaW1wb3J0IHByb2Nlc3MKKyAqIGluc3RhbmNlIGRpZCBub3Qgd3JpdGUgb3V0IHRvIGEgcGFja2ZpbGUuICBDYWxsZXJzIG11c3QgdGVzdCBmb3IKKyAqIHRoaXMgY29uZGl0aW9uIGFuZCB1c2UgcmVhZF9zaGExX2ZpbGUoKSBpbnN0ZWFkLgorICovCitzdGF0aWMgdm9pZCAqZ2ZpX3VucGFja19lbnRyeSgKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZSwKKwl1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBhbGxfcGFja3Nbb2UtPnBhY2tfaWRdOworCWlmIChwID09IHBhY2tfZGF0YSAmJiBwLT5wYWNrX3NpemUgPCAocGFja19zaXplICsgdGhlX2hhc2hfYWxnby0+cmF3c3opKSB7CisJCS8qIFRoZSBvYmplY3QgaXMgc3RvcmVkIGluIHRoZSBwYWNrZmlsZSB3ZSBhcmUgd3JpdGluZyB0bworCQkgKiBhbmQgd2UgaGF2ZSBtb2RpZmllZCBpdCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIHNjYW5uZWQKKwkJICogYmFjayB0byByZWFkIGEgcHJldmlvdXNseSB3cml0dGVuIG9iamVjdC4gIElmIGFuIG9sZAorCQkgKiB3aW5kb3cgY292ZXJlZCBbcC0+cGFja19zaXplLCBwLT5wYWNrX3NpemUgKyByYXdzeikgaXRzCisJCSAqIGRhdGEgaXMgc3RhbGUgYW5kIGlzIG5vdCB2YWxpZC4gIENsb3NpbmcgYWxsIHdpbmRvd3MKKwkJICogYW5kIHVwZGF0aW5nIHRoZSBwYWNrZmlsZSBsZW5ndGggZW5zdXJlcyB3ZSBjYW4gcmVhZAorCQkgKiB0aGUgbmV3bHkgd3JpdHRlbiBkYXRhLgorCQkgKi8KKwkJY2xvc2VfcGFja193aW5kb3dzKHApOworCQloYXNoZmx1c2gocGFja19maWxlKTsKKworCQkvKiBXZSBoYXZlIHRvIG9mZmVyIHJhd3N6IGJ5dGVzIGFkZGl0aW9uYWwgb24gdGhlIGVuZCBvZgorCQkgKiB0aGUgcGFja2ZpbGUgYXMgdGhlIGNvcmUgdW5wYWNrZXIgY29kZSBhc3N1bWVzIHRoZQorCQkgKiBmb290ZXIgaXMgcHJlc2VudCBhdCB0aGUgZmlsZSBlbmQgYW5kIG11c3QgcHJvbWlzZQorCQkgKiBhdCBsZWFzdCByYXdzeiBieXRlcyB3aXRoaW4gYW55IHdpbmRvdyBpdCBtYXBzLiAgQnV0CisJCSAqIHdlIGRvbid0IGFjdHVhbGx5IGNyZWF0ZSB0aGUgZm9vdGVyIGhlcmUuCisJCSAqLworCQlwLT5wYWNrX3NpemUgPSBwYWNrX3NpemUgKyB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKwl9CisJcmV0dXJuIHVucGFja19lbnRyeSh0aGVfcmVwb3NpdG9yeSwgcCwgb2UtPmlkeC5vZmZzZXQsICZ0eXBlLCBzaXplcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfbW9kZShjb25zdCBjaGFyICpzdHIsIHVpbnQxNl90ICptb2RlcCkKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisJdWludDE2X3QgbW9kZSA9IDA7CisKKwl3aGlsZSAoKGMgPSAqc3RyKyspICE9ICcgJykgeworCQlpZiAoYyA8ICcwJyB8fCBjID4gJzcnKQorCQkJcmV0dXJuIE5VTEw7CisJCW1vZGUgPSAobW9kZSA8PCAzKSArIChjIC0gJzAnKTsKKwl9CisJKm1vZGVwID0gbW9kZTsKKwlyZXR1cm4gc3RyOworfQorCitzdGF0aWMgdm9pZCBsb2FkX3RyZWUoc3RydWN0IHRyZWVfZW50cnkgKnJvb3QpCit7CisJc3RydWN0IG9iamVjdF9pZCAqb2lkID0gJnJvb3QtPnZlcnNpb25zWzFdLm9pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpteW9lOworCXN0cnVjdCB0cmVlX2NvbnRlbnQgKnQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWNoYXIgKmJ1ZjsKKwljb25zdCBjaGFyICpjOworCisJcm9vdC0+dHJlZSA9IHQgPSBuZXdfdHJlZV9jb250ZW50KDgpOworCWlmIChpc19udWxsX29pZChvaWQpKQorCQlyZXR1cm47CisKKwlteW9lID0gZmluZF9vYmplY3Qob2lkKTsKKwlpZiAobXlvZSAmJiBteW9lLT5wYWNrX2lkICE9IE1BWF9QQUNLX0lEKSB7CisJCWlmIChteW9lLT50eXBlICE9IE9CSl9UUkVFKQorCQkJZGllKCJOb3QgYSB0cmVlOiAlcyIsIG9pZF90b19oZXgob2lkKSk7CisJCXQtPmRlbHRhX2RlcHRoID0gbXlvZS0+ZGVwdGg7CisJCWJ1ZiA9IGdmaV91bnBhY2tfZW50cnkobXlvZSwgJnNpemUpOworCQlpZiAoIWJ1ZikKKwkJCWRpZSgiQ2FuJ3QgbG9hZCB0cmVlICVzIiwgb2lkX3RvX2hleChvaWQpKTsKKwl9IGVsc2UgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCQlpZiAoIWJ1ZiB8fCB0eXBlICE9IE9CSl9UUkVFKQorCQkJZGllKCJDYW4ndCBsb2FkIHRyZWUgJXMiLCBvaWRfdG9faGV4KG9pZCkpOworCX0KKworCWMgPSBidWY7CisJd2hpbGUgKGMgIT0gKGJ1ZiArIHNpemUpKSB7CisJCXN0cnVjdCB0cmVlX2VudHJ5ICplID0gbmV3X3RyZWVfZW50cnkoKTsKKworCQlpZiAodC0+ZW50cnlfY291bnQgPT0gdC0+ZW50cnlfY2FwYWNpdHkpCisJCQlyb290LT50cmVlID0gdCA9IGdyb3dfdHJlZV9jb250ZW50KHQsIHQtPmVudHJ5X2NvdW50KTsKKwkJdC0+ZW50cmllc1t0LT5lbnRyeV9jb3VudCsrXSA9IGU7CisKKwkJZS0+dHJlZSA9IE5VTEw7CisJCWMgPSBnZXRfbW9kZShjLCAmZS0+dmVyc2lvbnNbMV0ubW9kZSk7CisJCWlmICghYykKKwkJCWRpZSgiQ29ycnVwdCBtb2RlIGluICVzIiwgb2lkX3RvX2hleChvaWQpKTsKKwkJZS0+dmVyc2lvbnNbMF0ubW9kZSA9IGUtPnZlcnNpb25zWzFdLm1vZGU7CisJCWUtPm5hbWUgPSB0b19hdG9tKGMsIHN0cmxlbihjKSk7CisJCWMgKz0gZS0+bmFtZS0+c3RyX2xlbiArIDE7CisJCWhhc2hjcHkoZS0+dmVyc2lvbnNbMF0ub2lkLmhhc2gsICh1bnNpZ25lZCBjaGFyICopYyk7CisJCWhhc2hjcHkoZS0+dmVyc2lvbnNbMV0ub2lkLmhhc2gsICh1bnNpZ25lZCBjaGFyICopYyk7CisJCWMgKz0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJfQorCWZyZWUoYnVmKTsKK30KKworc3RhdGljIGludCB0ZWNtcDAgKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqYSA9ICooKHN0cnVjdCB0cmVlX2VudHJ5KiopX2EpOworCXN0cnVjdCB0cmVlX2VudHJ5ICpiID0gKigoc3RydWN0IHRyZWVfZW50cnkqKilfYik7CisJcmV0dXJuIGJhc2VfbmFtZV9jb21wYXJlKAorCQlhLT5uYW1lLT5zdHJfZGF0LCBhLT5uYW1lLT5zdHJfbGVuLCBhLT52ZXJzaW9uc1swXS5tb2RlLAorCQliLT5uYW1lLT5zdHJfZGF0LCBiLT5uYW1lLT5zdHJfbGVuLCBiLT52ZXJzaW9uc1swXS5tb2RlKTsKK30KKworc3RhdGljIGludCB0ZWNtcDEgKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqYSA9ICooKHN0cnVjdCB0cmVlX2VudHJ5KiopX2EpOworCXN0cnVjdCB0cmVlX2VudHJ5ICpiID0gKigoc3RydWN0IHRyZWVfZW50cnkqKilfYik7CisJcmV0dXJuIGJhc2VfbmFtZV9jb21wYXJlKAorCQlhLT5uYW1lLT5zdHJfZGF0LCBhLT5uYW1lLT5zdHJfbGVuLCBhLT52ZXJzaW9uc1sxXS5tb2RlLAorCQliLT5uYW1lLT5zdHJfZGF0LCBiLT5uYW1lLT5zdHJfbGVuLCBiLT52ZXJzaW9uc1sxXS5tb2RlKTsKK30KKworc3RhdGljIHZvaWQgbWt0cmVlKHN0cnVjdCB0cmVlX2NvbnRlbnQgKnQsIGludCB2LCBzdHJ1Y3Qgc3RyYnVmICpiKQoreworCXNpemVfdCBtYXhsZW4gPSAwOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCF2KQorCQlRU09SVCh0LT5lbnRyaWVzLCB0LT5lbnRyeV9jb3VudCwgdGVjbXAwKTsKKwllbHNlCisJCVFTT1JUKHQtPmVudHJpZXMsIHQtPmVudHJ5X2NvdW50LCB0ZWNtcDEpOworCisJZm9yIChpID0gMDsgaSA8IHQtPmVudHJ5X2NvdW50OyBpKyspIHsKKwkJaWYgKHQtPmVudHJpZXNbaV0tPnZlcnNpb25zW3ZdLm1vZGUpCisJCQltYXhsZW4gKz0gdC0+ZW50cmllc1tpXS0+bmFtZS0+c3RyX2xlbiArIDM0OworCX0KKworCXN0cmJ1Zl9yZXNldChiKTsKKwlzdHJidWZfZ3JvdyhiLCBtYXhsZW4pOworCWZvciAoaSA9IDA7IGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCB0cmVlX2VudHJ5ICplID0gdC0+ZW50cmllc1tpXTsKKwkJaWYgKCFlLT52ZXJzaW9uc1t2XS5tb2RlKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9hZGRmKGIsICIlbyAlcyVjIiwKKwkJCSh1bnNpZ25lZCBpbnQpKGUtPnZlcnNpb25zW3ZdLm1vZGUgJiB+Tk9fREVMVEEpLAorCQkJZS0+bmFtZS0+c3RyX2RhdCwgJ1wwJyk7CisJCXN0cmJ1Zl9hZGQoYiwgZS0+dmVyc2lvbnNbdl0ub2lkLmhhc2gsIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0b3JlX3RyZWUoc3RydWN0IHRyZWVfZW50cnkgKnJvb3QpCit7CisJc3RydWN0IHRyZWVfY29udGVudCAqdDsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgZGVsOworCXN0cnVjdCBsYXN0X29iamVjdCBsbyA9IHsgU1RSQlVGX0lOSVQsIDAsIDAsIC8qIG5vX3N3YXAgKi8gMSB9OworCXN0cnVjdCBvYmplY3RfZW50cnkgKmxlID0gTlVMTDsKKworCWlmICghaXNfbnVsbF9vaWQoJnJvb3QtPnZlcnNpb25zWzFdLm9pZCkpCisJCXJldHVybjsKKworCWlmICghcm9vdC0+dHJlZSkKKwkJbG9hZF90cmVlKHJvb3QpOworCXQgPSByb290LT50cmVlOworCisJZm9yIChpID0gMDsgaSA8IHQtPmVudHJ5X2NvdW50OyBpKyspIHsKKwkJaWYgKHQtPmVudHJpZXNbaV0tPnRyZWUpCisJCQlzdG9yZV90cmVlKHQtPmVudHJpZXNbaV0pOworCX0KKworCWlmICghKHJvb3QtPnZlcnNpb25zWzBdLm1vZGUgJiBOT19ERUxUQSkpCisJCWxlID0gZmluZF9vYmplY3QoJnJvb3QtPnZlcnNpb25zWzBdLm9pZCk7CisJaWYgKFNfSVNESVIocm9vdC0+dmVyc2lvbnNbMF0ubW9kZSkgJiYgbGUgJiYgbGUtPnBhY2tfaWQgPT0gcGFja19pZCkgeworCQlta3RyZWUodCwgMCwgJm9sZF90cmVlKTsKKwkJbG8uZGF0YSA9IG9sZF90cmVlOworCQlsby5vZmZzZXQgPSBsZS0+aWR4Lm9mZnNldDsKKwkJbG8uZGVwdGggPSB0LT5kZWx0YV9kZXB0aDsKKwl9CisKKwlta3RyZWUodCwgMSwgJm5ld190cmVlKTsKKwlzdG9yZV9vYmplY3QoT0JKX1RSRUUsICZuZXdfdHJlZSwgJmxvLCAmcm9vdC0+dmVyc2lvbnNbMV0ub2lkLCAwKTsKKworCXQtPmRlbHRhX2RlcHRoID0gbG8uZGVwdGg7CisJZm9yIChpID0gMCwgaiA9IDAsIGRlbCA9IDA7IGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCB0cmVlX2VudHJ5ICplID0gdC0+ZW50cmllc1tpXTsKKwkJaWYgKGUtPnZlcnNpb25zWzFdLm1vZGUpIHsKKwkJCWUtPnZlcnNpb25zWzBdLm1vZGUgPSBlLT52ZXJzaW9uc1sxXS5tb2RlOworCQkJb2lkY3B5KCZlLT52ZXJzaW9uc1swXS5vaWQsICZlLT52ZXJzaW9uc1sxXS5vaWQpOworCQkJdC0+ZW50cmllc1tqKytdID0gZTsKKwkJfSBlbHNlIHsKKwkJCXJlbGVhc2VfdHJlZV9lbnRyeShlKTsKKwkJCWRlbCsrOworCQl9CisJfQorCXQtPmVudHJ5X2NvdW50IC09IGRlbDsKK30KKworc3RhdGljIHZvaWQgdHJlZV9jb250ZW50X3JlcGxhY2UoCisJc3RydWN0IHRyZWVfZW50cnkgKnJvb3QsCisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCWNvbnN0IHVpbnQxNl90IG1vZGUsCisJc3RydWN0IHRyZWVfY29udGVudCAqbmV3dHJlZSkKK3sKKwlpZiAoIVNfSVNESVIobW9kZSkpCisJCWRpZSgiUm9vdCBjYW5ub3QgYmUgYSBub24tZGlyZWN0b3J5Iik7CisJb2lkY2xyKCZyb290LT52ZXJzaW9uc1swXS5vaWQpOworCW9pZGNweSgmcm9vdC0+dmVyc2lvbnNbMV0ub2lkLCBvaWQpOworCWlmIChyb290LT50cmVlKQorCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUocm9vdC0+dHJlZSk7CisJcm9vdC0+dHJlZSA9IG5ld3RyZWU7Cit9CisKK3N0YXRpYyBpbnQgdHJlZV9jb250ZW50X3NldCgKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCwKKwljb25zdCBjaGFyICpwLAorCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwljb25zdCB1aW50MTZfdCBtb2RlLAorCXN0cnVjdCB0cmVlX2NvbnRlbnQgKnN1YnRyZWUpCit7CisJc3RydWN0IHRyZWVfY29udGVudCAqdDsKKwljb25zdCBjaGFyICpzbGFzaDE7CisJdW5zaWduZWQgaW50IGksIG47CisJc3RydWN0IHRyZWVfZW50cnkgKmU7CisKKwlzbGFzaDEgPSBzdHJjaHJudWwocCwgJy8nKTsKKwluID0gc2xhc2gxIC0gcDsKKwlpZiAoIW4pCisJCWRpZSgiRW1wdHkgcGF0aCBjb21wb25lbnQgZm91bmQgaW4gaW5wdXQiKTsKKwlpZiAoISpzbGFzaDEgJiYgIVNfSVNESVIobW9kZSkgJiYgc3VidHJlZSkKKwkJZGllKCJOb24tZGlyZWN0b3JpZXMgY2Fubm90IGhhdmUgc3VidHJlZXMiKTsKKworCWlmICghcm9vdC0+dHJlZSkKKwkJbG9hZF90cmVlKHJvb3QpOworCXQgPSByb290LT50cmVlOworCWZvciAoaSA9IDA7IGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWUgPSB0LT5lbnRyaWVzW2ldOworCQlpZiAoZS0+bmFtZS0+c3RyX2xlbiA9PSBuICYmICFmc3BhdGhuY21wKHAsIGUtPm5hbWUtPnN0cl9kYXQsIG4pKSB7CisJCQlpZiAoISpzbGFzaDEpIHsKKwkJCQlpZiAoIVNfSVNESVIobW9kZSkKKwkJCQkJCSYmIGUtPnZlcnNpb25zWzFdLm1vZGUgPT0gbW9kZQorCQkJCQkJJiYgb2lkZXEoJmUtPnZlcnNpb25zWzFdLm9pZCwgb2lkKSkKKwkJCQkJcmV0dXJuIDA7CisJCQkJZS0+dmVyc2lvbnNbMV0ubW9kZSA9IG1vZGU7CisJCQkJb2lkY3B5KCZlLT52ZXJzaW9uc1sxXS5vaWQsIG9pZCk7CisJCQkJaWYgKGUtPnRyZWUpCisJCQkJCXJlbGVhc2VfdHJlZV9jb250ZW50X3JlY3Vyc2l2ZShlLT50cmVlKTsKKwkJCQllLT50cmVlID0gc3VidHJlZTsKKworCQkJCS8qCisJCQkJICogV2UgbmVlZCB0byBsZWF2ZSBlLT52ZXJzaW9uc1swXS5zaGExIGFsb25lCisJCQkJICogdG8gYXZvaWQgbW9kaWZ5aW5nIHRoZSBwcmVpbWFnZSB0cmVlIHVzZWQKKwkJCQkgKiB3aGVuIHdyaXRpbmcgb3V0IHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorCQkJCSAqIEJ1dCBhZnRlciByZXBsYWNpbmcgdGhlIHN1YmRpciB3aXRoIGEKKwkJCQkgKiBjb21wbGV0ZWx5IGRpZmZlcmVudCBvbmUsIGl0J3Mgbm90IGEgZ29vZAorCQkJCSAqIGRlbHRhIGJhc2UgYW55IG1vcmUsIGFuZCBiZXNpZGVzLCB3ZSd2ZQorCQkJCSAqIHRocm93biBhd2F5IHRoZSB0cmVlIGVudHJpZXMgbmVlZGVkIHRvCisJCQkJICogbWFrZSBhIGRlbHRhIGFnYWluc3QgaXQuCisJCQkJICoKKwkJCQkgKiBTbyBsZXQncyBqdXN0IGV4cGxpY2l0bHkgZGlzYWJsZSBkZWx0YXMKKwkJCQkgKiBmb3IgdGhlIHN1YnRyZWUuCisJCQkJICovCisJCQkJaWYgKFNfSVNESVIoZS0+dmVyc2lvbnNbMF0ubW9kZSkpCisJCQkJCWUtPnZlcnNpb25zWzBdLm1vZGUgfD0gTk9fREVMVEE7CisKKwkJCQlvaWRjbHIoJnJvb3QtPnZlcnNpb25zWzFdLm9pZCk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlpZiAoIVNfSVNESVIoZS0+dmVyc2lvbnNbMV0ubW9kZSkpIHsKKwkJCQllLT50cmVlID0gbmV3X3RyZWVfY29udGVudCg4KTsKKwkJCQllLT52ZXJzaW9uc1sxXS5tb2RlID0gU19JRkRJUjsKKwkJCX0KKwkJCWlmICghZS0+dHJlZSkKKwkJCQlsb2FkX3RyZWUoZSk7CisJCQlpZiAodHJlZV9jb250ZW50X3NldChlLCBzbGFzaDEgKyAxLCBvaWQsIG1vZGUsIHN1YnRyZWUpKSB7CisJCQkJb2lkY2xyKCZyb290LT52ZXJzaW9uc1sxXS5vaWQpOworCQkJCXJldHVybiAxOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAodC0+ZW50cnlfY291bnQgPT0gdC0+ZW50cnlfY2FwYWNpdHkpCisJCXJvb3QtPnRyZWUgPSB0ID0gZ3Jvd190cmVlX2NvbnRlbnQodCwgdC0+ZW50cnlfY291bnQpOworCWUgPSBuZXdfdHJlZV9lbnRyeSgpOworCWUtPm5hbWUgPSB0b19hdG9tKHAsIG4pOworCWUtPnZlcnNpb25zWzBdLm1vZGUgPSAwOworCW9pZGNscigmZS0+dmVyc2lvbnNbMF0ub2lkKTsKKwl0LT5lbnRyaWVzW3QtPmVudHJ5X2NvdW50KytdID0gZTsKKwlpZiAoKnNsYXNoMSkgeworCQllLT50cmVlID0gbmV3X3RyZWVfY29udGVudCg4KTsKKwkJZS0+dmVyc2lvbnNbMV0ubW9kZSA9IFNfSUZESVI7CisJCXRyZWVfY29udGVudF9zZXQoZSwgc2xhc2gxICsgMSwgb2lkLCBtb2RlLCBzdWJ0cmVlKTsKKwl9IGVsc2UgeworCQllLT50cmVlID0gc3VidHJlZTsKKwkJZS0+dmVyc2lvbnNbMV0ubW9kZSA9IG1vZGU7CisJCW9pZGNweSgmZS0+dmVyc2lvbnNbMV0ub2lkLCBvaWQpOworCX0KKwlvaWRjbHIoJnJvb3QtPnZlcnNpb25zWzFdLm9pZCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdHJlZV9jb250ZW50X3JlbW92ZSgKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCwKKwljb25zdCBjaGFyICpwLAorCXN0cnVjdCB0cmVlX2VudHJ5ICpiYWNrdXBfbGVhZiwKKwlpbnQgYWxsb3dfcm9vdCkKK3sKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICp0OworCWNvbnN0IGNoYXIgKnNsYXNoMTsKKwl1bnNpZ25lZCBpbnQgaSwgbjsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqZTsKKworCXNsYXNoMSA9IHN0cmNocm51bChwLCAnLycpOworCW4gPSBzbGFzaDEgLSBwOworCisJaWYgKCFyb290LT50cmVlKQorCQlsb2FkX3RyZWUocm9vdCk7CisKKwlpZiAoISpwICYmIGFsbG93X3Jvb3QpIHsKKwkJZSA9IHJvb3Q7CisJCWdvdG8gZGVsX2VudHJ5OworCX0KKworCXQgPSByb290LT50cmVlOworCWZvciAoaSA9IDA7IGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWUgPSB0LT5lbnRyaWVzW2ldOworCQlpZiAoZS0+bmFtZS0+c3RyX2xlbiA9PSBuICYmICFmc3BhdGhuY21wKHAsIGUtPm5hbWUtPnN0cl9kYXQsIG4pKSB7CisJCQlpZiAoKnNsYXNoMSAmJiAhU19JU0RJUihlLT52ZXJzaW9uc1sxXS5tb2RlKSkKKwkJCQkvKgorCQkJCSAqIElmIHAgbmFtZXMgYSBmaWxlIGluIHNvbWUgc3ViZGlyZWN0b3J5LCBhbmQgYQorCQkJCSAqIGZpbGUgb3Igc3ltbGluayBtYXRjaGluZyB0aGUgbmFtZSBvZiB0aGUKKwkJCQkgKiBwYXJlbnQgZGlyZWN0b3J5IG9mIHAgZXhpc3RzLCB0aGVuIHAgY2Fubm90CisJCQkJICogZXhpc3QgYW5kIG5lZWQgbm90IGJlIGRlbGV0ZWQuCisJCQkJICovCisJCQkJcmV0dXJuIDE7CisJCQlpZiAoISpzbGFzaDEgfHwgIVNfSVNESVIoZS0+dmVyc2lvbnNbMV0ubW9kZSkpCisJCQkJZ290byBkZWxfZW50cnk7CisJCQlpZiAoIWUtPnRyZWUpCisJCQkJbG9hZF90cmVlKGUpOworCQkJaWYgKHRyZWVfY29udGVudF9yZW1vdmUoZSwgc2xhc2gxICsgMSwgYmFja3VwX2xlYWYsIDApKSB7CisJCQkJZm9yIChuID0gMDsgbiA8IGUtPnRyZWUtPmVudHJ5X2NvdW50OyBuKyspIHsKKwkJCQkJaWYgKGUtPnRyZWUtPmVudHJpZXNbbl0tPnZlcnNpb25zWzFdLm1vZGUpIHsKKwkJCQkJCW9pZGNscigmcm9vdC0+dmVyc2lvbnNbMV0ub2lkKTsKKwkJCQkJCXJldHVybiAxOworCQkJCQl9CisJCQkJfQorCQkJCWJhY2t1cF9sZWFmID0gTlVMTDsKKwkJCQlnb3RvIGRlbF9lbnRyeTsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAwOworCitkZWxfZW50cnk6CisJaWYgKGJhY2t1cF9sZWFmKQorCQltZW1jcHkoYmFja3VwX2xlYWYsIGUsIHNpemVvZigqYmFja3VwX2xlYWYpKTsKKwllbHNlIGlmIChlLT50cmVlKQorCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUoZS0+dHJlZSk7CisJZS0+dHJlZSA9IE5VTEw7CisJZS0+dmVyc2lvbnNbMV0ubW9kZSA9IDA7CisJb2lkY2xyKCZlLT52ZXJzaW9uc1sxXS5vaWQpOworCW9pZGNscigmcm9vdC0+dmVyc2lvbnNbMV0ub2lkKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB0cmVlX2NvbnRlbnRfZ2V0KAorCXN0cnVjdCB0cmVlX2VudHJ5ICpyb290LAorCWNvbnN0IGNoYXIgKnAsCisJc3RydWN0IHRyZWVfZW50cnkgKmxlYWYsCisJaW50IGFsbG93X3Jvb3QpCit7CisJc3RydWN0IHRyZWVfY29udGVudCAqdDsKKwljb25zdCBjaGFyICpzbGFzaDE7CisJdW5zaWduZWQgaW50IGksIG47CisJc3RydWN0IHRyZWVfZW50cnkgKmU7CisKKwlzbGFzaDEgPSBzdHJjaHJudWwocCwgJy8nKTsKKwluID0gc2xhc2gxIC0gcDsKKwlpZiAoIW4gJiYgIWFsbG93X3Jvb3QpCisJCWRpZSgiRW1wdHkgcGF0aCBjb21wb25lbnQgZm91bmQgaW4gaW5wdXQiKTsKKworCWlmICghcm9vdC0+dHJlZSkKKwkJbG9hZF90cmVlKHJvb3QpOworCisJaWYgKCFuKSB7CisJCWUgPSByb290OworCQlnb3RvIGZvdW5kX2VudHJ5OworCX0KKworCXQgPSByb290LT50cmVlOworCWZvciAoaSA9IDA7IGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWUgPSB0LT5lbnRyaWVzW2ldOworCQlpZiAoZS0+bmFtZS0+c3RyX2xlbiA9PSBuICYmICFmc3BhdGhuY21wKHAsIGUtPm5hbWUtPnN0cl9kYXQsIG4pKSB7CisJCQlpZiAoISpzbGFzaDEpCisJCQkJZ290byBmb3VuZF9lbnRyeTsKKwkJCWlmICghU19JU0RJUihlLT52ZXJzaW9uc1sxXS5tb2RlKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmICghZS0+dHJlZSkKKwkJCQlsb2FkX3RyZWUoZSk7CisJCQlyZXR1cm4gdHJlZV9jb250ZW50X2dldChlLCBzbGFzaDEgKyAxLCBsZWFmLCAwKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKKworZm91bmRfZW50cnk6CisJbWVtY3B5KGxlYWYsIGUsIHNpemVvZigqbGVhZikpOworCWlmIChlLT50cmVlICYmIGlzX251bGxfb2lkKCZlLT52ZXJzaW9uc1sxXS5vaWQpKQorCQlsZWFmLT50cmVlID0gZHVwX3RyZWVfY29udGVudChlLT50cmVlKTsKKwllbHNlCisJCWxlYWYtPnRyZWUgPSBOVUxMOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9icmFuY2goc3RydWN0IGJyYW5jaCAqYikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqbXNnID0gImZhc3QtaW1wb3J0IjsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9sZF9vaWQ7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKworCWlmIChpc19udWxsX29pZCgmYi0+b2lkKSkgeworCQlpZiAoYi0+ZGVsZXRlKQorCQkJZGVsZXRlX3JlZihOVUxMLCBiLT5uYW1lLCBOVUxMLCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChyZWFkX3JlZihiLT5uYW1lLCAmb2xkX29pZCkpCisJCW9pZGNscigmb2xkX29pZCk7CisJaWYgKCFmb3JjZV91cGRhdGUgJiYgIWlzX251bGxfb2lkKCZvbGRfb2lkKSkgeworCQlzdHJ1Y3QgY29tbWl0ICpvbGRfY21pdCwgKm5ld19jbWl0OworCisJCW9sZF9jbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSAgJm9sZF9vaWQsIDApOworCQluZXdfY21pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQkgICZiLT5vaWQsIDApOworCQlpZiAoIW9sZF9jbWl0IHx8ICFuZXdfY21pdCkKKwkJCXJldHVybiBlcnJvcigiQnJhbmNoICVzIGlzIG1pc3NpbmcgY29tbWl0cy4iLCBiLT5uYW1lKTsKKworCQlpZiAoIWluX21lcmdlX2Jhc2VzKG9sZF9jbWl0LCBuZXdfY21pdCkpIHsKKwkJCXdhcm5pbmcoIk5vdCB1cGRhdGluZyAlcyIKKwkJCQkiIChuZXcgdGlwICVzIGRvZXMgbm90IGNvbnRhaW4gJXMpIiwKKwkJCQliLT5uYW1lLCBvaWRfdG9faGV4KCZiLT5vaWQpLAorCQkJCW9pZF90b19oZXgoJm9sZF9vaWQpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwl0cmFuc2FjdGlvbiA9IHJlZl90cmFuc2FjdGlvbl9iZWdpbigmZXJyKTsKKwlpZiAoIXRyYW5zYWN0aW9uIHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl91cGRhdGUodHJhbnNhY3Rpb24sIGItPm5hbWUsICZiLT5vaWQsICZvbGRfb2lkLAorCQkJCSAgIDAsIG1zZywgJmVycikgfHwKKwkgICAgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpIHsKKwkJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCQllcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCXJldHVybiAtMTsKKwl9CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2JyYW5jaGVzKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGJyYW5jaCAqYjsKKworCWZvciAoaSA9IDA7IGkgPCBicmFuY2hfdGFibGVfc3o7IGkrKykgeworCQlmb3IgKGIgPSBicmFuY2hfdGFibGVbaV07IGI7IGIgPSBiLT50YWJsZV9uZXh0X2JyYW5jaCkKKwkJCWZhaWx1cmUgfD0gdXBkYXRlX2JyYW5jaChiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfdGFncyh2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICptc2cgPSAiZmFzdC1pbXBvcnQiOworCXN0cnVjdCB0YWcgKnQ7CisJc3RydWN0IHN0cmJ1ZiByZWZfbmFtZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CisKKwl0cmFuc2FjdGlvbiA9IHJlZl90cmFuc2FjdGlvbl9iZWdpbigmZXJyKTsKKwlpZiAoIXRyYW5zYWN0aW9uKSB7CisJCWZhaWx1cmUgfD0gZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJZm9yICh0ID0gZmlyc3RfdGFnOyB0OyB0ID0gdC0+bmV4dF90YWcpIHsKKwkJc3RyYnVmX3Jlc2V0KCZyZWZfbmFtZSk7CisJCXN0cmJ1Zl9hZGRmKCZyZWZfbmFtZSwgInJlZnMvdGFncy8lcyIsIHQtPm5hbWUpOworCisJCWlmIChyZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCByZWZfbmFtZS5idWYsCisJCQkJCSAgICZ0LT5vaWQsIE5VTEwsIDAsIG1zZywgJmVycikpIHsKKwkJCWZhaWx1cmUgfD0gZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisJaWYgKHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sICZlcnIpKQorCQlmYWlsdXJlIHw9IGVycm9yKCIlcyIsIGVyci5idWYpOworCisgY2xlYW51cDoKKwlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJc3RyYnVmX3JlbGVhc2UoJnJlZl9uYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9tYXJrcyh2b2lkKQoreworCXN0cnVjdCBsb2NrX2ZpbGUgbWFya19sb2NrID0gTE9DS19JTklUOworCUZJTEUgKmY7CisKKwlpZiAoIWV4cG9ydF9tYXJrc19maWxlIHx8IChpbXBvcnRfbWFya3NfZmlsZSAmJiAhaW1wb3J0X21hcmtzX2ZpbGVfZG9uZSkpCisJCXJldHVybjsKKworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KGV4cG9ydF9tYXJrc19maWxlKSkgeworCQlmYWlsdXJlIHw9IGVycm9yX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJXMiLAorCQkJCSAgICAgICBleHBvcnRfbWFya3NfZmlsZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbWFya19sb2NrLCBleHBvcnRfbWFya3NfZmlsZSwgMCkgPCAwKSB7CisJCWZhaWx1cmUgfD0gZXJyb3JfZXJybm8oIlVuYWJsZSB0byB3cml0ZSBtYXJrcyBmaWxlICVzIiwKKwkJCQkgICAgICAgZXhwb3J0X21hcmtzX2ZpbGUpOworCQlyZXR1cm47CisJfQorCisJZiA9IGZkb3Blbl9sb2NrX2ZpbGUoJm1hcmtfbG9jaywgInciKTsKKwlpZiAoIWYpIHsKKwkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbWFya19sb2NrKTsKKwkJZmFpbHVyZSB8PSBlcnJvcigiVW5hYmxlIHRvIHdyaXRlIG1hcmtzIGZpbGUgJXM6ICVzIiwKKwkJCWV4cG9ydF9tYXJrc19maWxlLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCQlyZXR1cm47CisJfQorCisJZm9yX2VhY2hfbWFyayhtYXJrcywgMCwgZHVtcF9tYXJrc19mbiwgZik7CisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJm1hcmtfbG9jaykpIHsKKwkJZmFpbHVyZSB8PSBlcnJvcl9lcnJubygiVW5hYmxlIHRvIHdyaXRlIGZpbGUgJXMiLAorCQkJCSAgICAgICBleHBvcnRfbWFya3NfZmlsZSk7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGluc2VydF9vYmplY3RfZW50cnkoc3RydWN0IG1hcmtfc2V0ICpzLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHVpbnRtYXhfdCBtYXJrKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisJZSA9IGZpbmRfb2JqZWN0KG9pZCk7CisJaWYgKCFlKSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQlvaWQsIE5VTEwpOworCQlpZiAodHlwZSA8IDApCisJCQlkaWUoIm9iamVjdCBub3QgZm91bmQ6ICVzIiwgb2lkX3RvX2hleChvaWQpKTsKKwkJZSA9IGluc2VydF9vYmplY3Qob2lkKTsKKwkJZS0+dHlwZSA9IHR5cGU7CisJCWUtPnBhY2tfaWQgPSBNQVhfUEFDS19JRDsKKwkJZS0+aWR4Lm9mZnNldCA9IDE7IC8qIGp1c3Qgbm90IHplcm8hICovCisJfQorCWluc2VydF9tYXJrKHMsIG1hcmssIGUpOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfb2lkX2VudHJ5KHN0cnVjdCBtYXJrX3NldCAqcywgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB1aW50bWF4X3QgbWFyaykKK3sKKwlpbnNlcnRfbWFyayhzLCBtYXJrLCB4bWVtZHVweihvaWQsIHNpemVvZigqb2lkKSkpOworfQorCitzdGF0aWMgdm9pZCByZWFkX21hcmtfZmlsZShzdHJ1Y3QgbWFya19zZXQgKnMsIEZJTEUgKmYsIG1hcmtfc2V0X2luc2VydGVyX3QgaW5zZXJ0ZXIpCit7CisJY2hhciBsaW5lWzUxMl07CisJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKKwkJdWludG1heF90IG1hcms7CisJCWNoYXIgKmVuZDsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJLyogRW5zdXJlIFNIQS0xIG9iamVjdHMgYXJlIHBhZGRlZCB3aXRoIHplcm9zLiAqLworCQltZW1zZXQob2lkLmhhc2gsIDAsIHNpemVvZihvaWQuaGFzaCkpOworCisJCWVuZCA9IHN0cmNocihsaW5lLCAnXG4nKTsKKwkJaWYgKGxpbmVbMF0gIT0gJzonIHx8ICFlbmQpCisJCQlkaWUoImNvcnJ1cHQgbWFyayBsaW5lOiAlcyIsIGxpbmUpOworCQkqZW5kID0gMDsKKwkJbWFyayA9IHN0cnRvdW1heChsaW5lICsgMSwgJmVuZCwgMTApOworCQlpZiAoIW1hcmsgfHwgZW5kID09IGxpbmUgKyAxCisJCQl8fCAqZW5kICE9ICcgJworCQkJfHwgZ2V0X29pZF9oZXhfYW55KGVuZCArIDEsICZvaWQpID09IEdJVF9IQVNIX1VOS05PV04pCisJCQlkaWUoImNvcnJ1cHQgbWFyayBsaW5lOiAlcyIsIGxpbmUpOworCQlpbnNlcnRlcihzLCAmb2lkLCBtYXJrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfbWFya3Modm9pZCkKK3sKKwlGSUxFICpmID0gZm9wZW4oaW1wb3J0X21hcmtzX2ZpbGUsICJyIik7CisJaWYgKGYpCisJCTsKKwllbHNlIGlmIChpbXBvcnRfbWFya3NfZmlsZV9pZ25vcmVfbWlzc2luZyAmJiBlcnJubyA9PSBFTk9FTlQpCisJCWdvdG8gZG9uZTsgLyogTWFya3MgZmlsZSBkb2VzIG5vdCBleGlzdCAqLworCWVsc2UKKwkJZGllX2Vycm5vKCJjYW5ub3QgcmVhZCAnJXMnIiwgaW1wb3J0X21hcmtzX2ZpbGUpOworCXJlYWRfbWFya19maWxlKG1hcmtzLCBmLCBpbnNlcnRfb2JqZWN0X2VudHJ5KTsKKwlmY2xvc2UoZik7Citkb25lOgorCWltcG9ydF9tYXJrc19maWxlX2RvbmUgPSAxOworfQorCisKK3N0YXRpYyBpbnQgcmVhZF9uZXh0X2NvbW1hbmQodm9pZCkKK3sKKwlzdGF0aWMgaW50IHN0ZGluX2VvZiA9IDA7CisKKwlpZiAoc3RkaW5fZW9mKSB7CisJCXVucmVhZF9jb21tYW5kX2J1ZiA9IDA7CisJCXJldHVybiBFT0Y7CisJfQorCisJZm9yICg7OykgeworCQlpZiAodW5yZWFkX2NvbW1hbmRfYnVmKSB7CisJCQl1bnJlYWRfY29tbWFuZF9idWYgPSAwOworCQl9IGVsc2UgeworCQkJc3RydWN0IHJlY2VudF9jb21tYW5kICpyYzsKKworCQkJc3RkaW5fZW9mID0gc3RyYnVmX2dldGxpbmVfbGYoJmNvbW1hbmRfYnVmLCBzdGRpbik7CisJCQlpZiAoc3RkaW5fZW9mKQorCQkJCXJldHVybiBFT0Y7CisKKwkJCWlmICghc2Vlbl9kYXRhX2NvbW1hbmQKKwkJCQkmJiAhc3RhcnRzX3dpdGgoY29tbWFuZF9idWYuYnVmLCAiZmVhdHVyZSAiKQorCQkJCSYmICFzdGFydHNfd2l0aChjb21tYW5kX2J1Zi5idWYsICJvcHRpb24gIikpIHsKKwkJCQlwYXJzZV9hcmd2KCk7CisJCQl9CisKKwkJCXJjID0gcmNfZnJlZTsKKwkJCWlmIChyYykKKwkJCQlyY19mcmVlID0gcmMtPm5leHQ7CisJCQllbHNlIHsKKwkJCQlyYyA9IGNtZF9oaXN0Lm5leHQ7CisJCQkJY21kX2hpc3QubmV4dCA9IHJjLT5uZXh0OworCQkJCWNtZF9oaXN0Lm5leHQtPnByZXYgPSAmY21kX2hpc3Q7CisJCQkJZnJlZShyYy0+YnVmKTsKKwkJCX0KKworCQkJcmMtPmJ1ZiA9IHhzdHJkdXAoY29tbWFuZF9idWYuYnVmKTsKKwkJCXJjLT5wcmV2ID0gY21kX3RhaWw7CisJCQlyYy0+bmV4dCA9IGNtZF9oaXN0LnByZXY7CisJCQlyYy0+cHJldi0+bmV4dCA9IHJjOworCQkJY21kX3RhaWwgPSByYzsKKwkJfQorCQlpZiAoY29tbWFuZF9idWYuYnVmWzBdID09ICcjJykKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNraXBfb3B0aW9uYWxfbGYodm9pZCkKK3sKKwlpbnQgdGVybV9jaGFyID0gZmdldGMoc3RkaW4pOworCWlmICh0ZXJtX2NoYXIgIT0gJ1xuJyAmJiB0ZXJtX2NoYXIgIT0gRU9GKQorCQl1bmdldGModGVybV9jaGFyLCBzdGRpbik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX21hcmsodm9pZCkKK3sKKwljb25zdCBjaGFyICp2OworCWlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJtYXJrIDoiLCAmdikpIHsKKwkJbmV4dF9tYXJrID0gc3RydG91bWF4KHYsIE5VTEwsIDEwKTsKKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwl9CisJZWxzZQorCQluZXh0X21hcmsgPSAwOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9vcmlnaW5hbF9pZGVudGlmaWVyKHZvaWQpCit7CisJY29uc3QgY2hhciAqdjsKKwlpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAib3JpZ2luYWwtb2lkICIsICZ2KSkKKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKK30KKworc3RhdGljIGludCBwYXJzZV9kYXRhKHN0cnVjdCBzdHJidWYgKnNiLCB1aW50bWF4X3QgbGltaXQsIHVpbnRtYXhfdCAqbGVuX3JlcykKK3sKKwljb25zdCBjaGFyICpkYXRhOworCXN0cmJ1Zl9yZXNldChzYik7CisKKwlpZiAoIXNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgImRhdGEgIiwgJmRhdGEpKQorCQlkaWUoIkV4cGVjdGVkICdkYXRhIG4nIGNvbW1hbmQsIGZvdW5kOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisKKwlpZiAoc2tpcF9wcmVmaXgoZGF0YSwgIjw8IiwgJmRhdGEpKSB7CisJCWNoYXIgKnRlcm0gPSB4c3RyZHVwKGRhdGEpOworCQlzaXplX3QgdGVybV9sZW4gPSBjb21tYW5kX2J1Zi5sZW4gLSAoZGF0YSAtIGNvbW1hbmRfYnVmLmJ1Zik7CisKKwkJZm9yICg7OykgeworCQkJaWYgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZjb21tYW5kX2J1Ziwgc3RkaW4pID09IEVPRikKKwkJCQlkaWUoIkVPRiBpbiBkYXRhICh0ZXJtaW5hdG9yICclcycgbm90IGZvdW5kKSIsIHRlcm0pOworCQkJaWYgKHRlcm1fbGVuID09IGNvbW1hbmRfYnVmLmxlbgorCQkJCSYmICFzdHJjbXAodGVybSwgY29tbWFuZF9idWYuYnVmKSkKKwkJCQlicmVhazsKKwkJCXN0cmJ1Zl9hZGRidWYoc2IsICZjb21tYW5kX2J1Zik7CisJCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCQl9CisJCWZyZWUodGVybSk7CisJfQorCWVsc2UgeworCQl1aW50bWF4X3QgbGVuID0gc3RydG91bWF4KGRhdGEsIE5VTEwsIDEwKTsKKwkJc2l6ZV90IG4gPSAwLCBsZW5ndGggPSAoc2l6ZV90KWxlbjsKKworCQlpZiAobGltaXQgJiYgbGltaXQgPCBsZW4pIHsKKwkJCSpsZW5fcmVzID0gbGVuOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGxlbmd0aCA8IGxlbikKKwkJCWRpZSgiZGF0YSBpcyB0b28gbGFyZ2UgdG8gdXNlIGluIHRoaXMgY29udGV4dCIpOworCisJCXdoaWxlIChuIDwgbGVuZ3RoKSB7CisJCQlzaXplX3QgcyA9IHN0cmJ1Zl9mcmVhZChzYiwgbGVuZ3RoIC0gbiwgc3RkaW4pOworCQkJaWYgKCFzICYmIGZlb2Yoc3RkaW4pKQorCQkJCWRpZSgiRU9GIGluIGRhdGEgKCVsdSBieXRlcyByZW1haW5pbmcpIiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpKGxlbmd0aCAtIG4pKTsKKwkJCW4gKz0gczsKKwkJfQorCX0KKworCXNraXBfb3B0aW9uYWxfbGYoKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB2YWxpZGF0ZV9yYXdfZGF0ZShjb25zdCBjaGFyICpzcmMsIHN0cnVjdCBzdHJidWYgKnJlc3VsdCkKK3sKKwljb25zdCBjaGFyICpvcmlnX3NyYyA9IHNyYzsKKwljaGFyICplbmRwOworCXVuc2lnbmVkIGxvbmcgbnVtOworCisJZXJybm8gPSAwOworCisJbnVtID0gc3RydG91bChzcmMsICZlbmRwLCAxMCk7CisJLyogTkVFRFNXT1JLOiBwZXJoYXBzIGNoZWNrIGZvciByZWFzb25hYmxlIHZhbHVlcz8gKi8KKwlpZiAoZXJybm8gfHwgZW5kcCA9PSBzcmMgfHwgKmVuZHAgIT0gJyAnKQorCQlyZXR1cm4gLTE7CisKKwlzcmMgPSBlbmRwICsgMTsKKwlpZiAoKnNyYyAhPSAnLScgJiYgKnNyYyAhPSAnKycpCisJCXJldHVybiAtMTsKKworCW51bSA9IHN0cnRvdWwoc3JjICsgMSwgJmVuZHAsIDEwKTsKKwlpZiAoZXJybm8gfHwgZW5kcCA9PSBzcmMgKyAxIHx8ICplbmRwIHx8IDE0MDAgPCBudW0pCisJCXJldHVybiAtMTsKKworCXN0cmJ1Zl9hZGRzdHIocmVzdWx0LCBvcmlnX3NyYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpwYXJzZV9pZGVudChjb25zdCBjaGFyICpidWYpCit7CisJY29uc3QgY2hhciAqbHRndDsKKwlzaXplX3QgbmFtZV9sZW47CisJc3RydWN0IHN0cmJ1ZiBpZGVudCA9IFNUUkJVRl9JTklUOworCisJLyogZW5zdXJlIHRoZXJlIGlzIGEgc3BhY2UgZGVsaW1pdGVyIGV2ZW4gaWYgdGhlcmUgaXMgbm8gbmFtZSAqLworCWlmICgqYnVmID09ICc8JykKKwkJLS1idWY7CisKKwlsdGd0ID0gYnVmICsgc3RyY3NwbihidWYsICI8PiIpOworCWlmICgqbHRndCAhPSAnPCcpCisJCWRpZSgiTWlzc2luZyA8IGluIGlkZW50IHN0cmluZzogJXMiLCBidWYpOworCWlmIChsdGd0ICE9IGJ1ZiAmJiBsdGd0Wy0xXSAhPSAnICcpCisJCWRpZSgiTWlzc2luZyBzcGFjZSBiZWZvcmUgPCBpbiBpZGVudCBzdHJpbmc6ICVzIiwgYnVmKTsKKwlsdGd0ID0gbHRndCArIDEgKyBzdHJjc3BuKGx0Z3QgKyAxLCAiPD4iKTsKKwlpZiAoKmx0Z3QgIT0gJz4nKQorCQlkaWUoIk1pc3NpbmcgPiBpbiBpZGVudCBzdHJpbmc6ICVzIiwgYnVmKTsKKwlsdGd0Kys7CisJaWYgKCpsdGd0ICE9ICcgJykKKwkJZGllKCJNaXNzaW5nIHNwYWNlIGFmdGVyID4gaW4gaWRlbnQgc3RyaW5nOiAlcyIsIGJ1Zik7CisJbHRndCsrOworCW5hbWVfbGVuID0gbHRndCAtIGJ1ZjsKKwlzdHJidWZfYWRkKCZpZGVudCwgYnVmLCBuYW1lX2xlbik7CisKKwlzd2l0Y2ggKHdoZW5zcGVjKSB7CisJY2FzZSBXSEVOU1BFQ19SQVc6CisJCWlmICh2YWxpZGF0ZV9yYXdfZGF0ZShsdGd0LCAmaWRlbnQpIDwgMCkKKwkJCWRpZSgiSW52YWxpZCByYXcgZGF0ZSBcIiVzXCIgaW4gaWRlbnQ6ICVzIiwgbHRndCwgYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBXSEVOU1BFQ19SRkMyODIyOgorCQlpZiAocGFyc2VfZGF0ZShsdGd0LCAmaWRlbnQpIDwgMCkKKwkJCWRpZSgiSW52YWxpZCByZmMyODIyIGRhdGUgXCIlc1wiIGluIGlkZW50OiAlcyIsIGx0Z3QsIGJ1Zik7CisJCWJyZWFrOworCWNhc2UgV0hFTlNQRUNfTk9XOgorCQlpZiAoc3RyY21wKCJub3ciLCBsdGd0KSkKKwkJCWRpZSgiRGF0ZSBpbiBpZGVudCBtdXN0IGJlICdub3cnOiAlcyIsIGJ1Zik7CisJCWRhdGVzdGFtcCgmaWRlbnQpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmaWRlbnQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9hbmRfc3RvcmVfYmxvYigKKwlzdHJ1Y3QgbGFzdF9vYmplY3QgKmxhc3QsCisJc3RydWN0IG9iamVjdF9pZCAqb2lkb3V0LAorCXVpbnRtYXhfdCBtYXJrKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXVpbnRtYXhfdCBsZW47CisKKwlpZiAocGFyc2VfZGF0YSgmYnVmLCBiaWdfZmlsZV90aHJlc2hvbGQsICZsZW4pKQorCQlzdG9yZV9vYmplY3QoT0JKX0JMT0IsICZidWYsIGxhc3QsIG9pZG91dCwgbWFyayk7CisJZWxzZSB7CisJCWlmIChsYXN0KSB7CisJCQlzdHJidWZfcmVsZWFzZSgmbGFzdC0+ZGF0YSk7CisJCQlsYXN0LT5vZmZzZXQgPSAwOworCQkJbGFzdC0+ZGVwdGggPSAwOworCQl9CisJCXN0cmVhbV9ibG9iKGxlbiwgb2lkb3V0LCBtYXJrKTsKKwkJc2tpcF9vcHRpb25hbF9sZigpOworCX0KK30KKworc3RhdGljIHZvaWQgcGFyc2VfbmV3X2Jsb2Iodm9pZCkKK3sKKwlyZWFkX25leHRfY29tbWFuZCgpOworCXBhcnNlX21hcmsoKTsKKwlwYXJzZV9vcmlnaW5hbF9pZGVudGlmaWVyKCk7CisJcGFyc2VfYW5kX3N0b3JlX2Jsb2IoJmxhc3RfYmxvYiwgTlVMTCwgbmV4dF9tYXJrKTsKK30KKworc3RhdGljIHZvaWQgdW5sb2FkX29uZV9icmFuY2godm9pZCkKK3sKKwl3aGlsZSAoY3VyX2FjdGl2ZV9icmFuY2hlcworCQkmJiBjdXJfYWN0aXZlX2JyYW5jaGVzID49IG1heF9hY3RpdmVfYnJhbmNoZXMpIHsKKwkJdWludG1heF90IG1pbl9jb21taXQgPSBVTE9OR19NQVg7CisJCXN0cnVjdCBicmFuY2ggKmUsICpsID0gTlVMTCwgKnAgPSBOVUxMOworCisJCWZvciAoZSA9IGFjdGl2ZV9icmFuY2hlczsgZTsgZSA9IGUtPmFjdGl2ZV9uZXh0X2JyYW5jaCkgeworCQkJaWYgKGUtPmxhc3RfY29tbWl0IDwgbWluX2NvbW1pdCkgeworCQkJCXAgPSBsOworCQkJCW1pbl9jb21taXQgPSBlLT5sYXN0X2NvbW1pdDsKKwkJCX0KKwkJCWwgPSBlOworCQl9CisKKwkJaWYgKHApIHsKKwkJCWUgPSBwLT5hY3RpdmVfbmV4dF9icmFuY2g7CisJCQlwLT5hY3RpdmVfbmV4dF9icmFuY2ggPSBlLT5hY3RpdmVfbmV4dF9icmFuY2g7CisJCX0gZWxzZSB7CisJCQllID0gYWN0aXZlX2JyYW5jaGVzOworCQkJYWN0aXZlX2JyYW5jaGVzID0gZS0+YWN0aXZlX25leHRfYnJhbmNoOworCQl9CisJCWUtPmFjdGl2ZSA9IDA7CisJCWUtPmFjdGl2ZV9uZXh0X2JyYW5jaCA9IE5VTEw7CisJCWlmIChlLT5icmFuY2hfdHJlZS50cmVlKSB7CisJCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUoZS0+YnJhbmNoX3RyZWUudHJlZSk7CisJCQllLT5icmFuY2hfdHJlZS50cmVlID0gTlVMTDsKKwkJfQorCQljdXJfYWN0aXZlX2JyYW5jaGVzLS07CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2FkX2JyYW5jaChzdHJ1Y3QgYnJhbmNoICpiKQoreworCWxvYWRfdHJlZSgmYi0+YnJhbmNoX3RyZWUpOworCWlmICghYi0+YWN0aXZlKSB7CisJCWItPmFjdGl2ZSA9IDE7CisJCWItPmFjdGl2ZV9uZXh0X2JyYW5jaCA9IGFjdGl2ZV9icmFuY2hlczsKKwkJYWN0aXZlX2JyYW5jaGVzID0gYjsKKwkJY3VyX2FjdGl2ZV9icmFuY2hlcysrOworCQlicmFuY2hfbG9hZF9jb3VudCsrOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29udmVydF9udW1fbm90ZXNfdG9fZmFub3V0KHVpbnRtYXhfdCBudW1fbm90ZXMpCit7CisJdW5zaWduZWQgY2hhciBmYW5vdXQgPSAwOworCXdoaWxlICgobnVtX25vdGVzID4+PSA4KSkKKwkJZmFub3V0Kys7CisJcmV0dXJuIGZhbm91dDsKK30KKworc3RhdGljIHZvaWQgY29uc3RydWN0X3BhdGhfd2l0aF9mYW5vdXQoY29uc3QgY2hhciAqaGV4X3NoYTEsCisJCXVuc2lnbmVkIGNoYXIgZmFub3V0LCBjaGFyICpwYXRoKQoreworCXVuc2lnbmVkIGludCBpID0gMCwgaiA9IDA7CisJaWYgKGZhbm91dCA+PSB0aGVfaGFzaF9hbGdvLT5yYXdzeikKKwkJZGllKCJUb28gbGFyZ2UgZmFub3V0ICgldSkiLCBmYW5vdXQpOworCXdoaWxlIChmYW5vdXQpIHsKKwkJcGF0aFtpKytdID0gaGV4X3NoYTFbaisrXTsKKwkJcGF0aFtpKytdID0gaGV4X3NoYTFbaisrXTsKKwkJcGF0aFtpKytdID0gJy8nOworCQlmYW5vdXQtLTsKKwl9CisJbWVtY3B5KHBhdGggKyBpLCBoZXhfc2hhMSArIGosIHRoZV9oYXNoX2FsZ28tPmhleHN6IC0gaik7CisJcGF0aFtpICsgdGhlX2hhc2hfYWxnby0+aGV4c3ogLSBqXSA9ICdcMCc7Cit9CisKK3N0YXRpYyB1aW50bWF4X3QgZG9fY2hhbmdlX25vdGVfZmFub3V0KAorCQlzdHJ1Y3QgdHJlZV9lbnRyeSAqb3JpZ19yb290LCBzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCwKKwkJY2hhciAqaGV4X29pZCwgdW5zaWduZWQgaW50IGhleF9vaWRfbGVuLAorCQljaGFyICpmdWxscGF0aCwgdW5zaWduZWQgaW50IGZ1bGxwYXRoX2xlbiwKKwkJdW5zaWduZWQgY2hhciBmYW5vdXQpCit7CisJc3RydWN0IHRyZWVfY29udGVudCAqdDsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqZSwgbGVhZjsKKwl1bnNpZ25lZCBpbnQgaSwgdG1wX2hleF9vaWRfbGVuLCB0bXBfZnVsbHBhdGhfbGVuOworCXVpbnRtYXhfdCBudW1fbm90ZXMgPSAwOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCS8qIGhleCBvaWQgKyAnLycgYmV0d2VlbiBlYWNoIHBhaXIgb2YgaGV4IGRpZ2l0cyArIE5VTCAqLworCWNoYXIgcmVhbHBhdGhbR0lUX01BWF9IRVhTWiArICgoR0lUX01BWF9IRVhTWiAvIDIpIC0gMSkgKyAxXTsKKwljb25zdCB1bnNpZ25lZCBoZXhzeiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6OworCisJaWYgKCFyb290LT50cmVlKQorCQlsb2FkX3RyZWUocm9vdCk7CisJdCA9IHJvb3QtPnRyZWU7CisKKwlmb3IgKGkgPSAwOyB0ICYmIGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWUgPSB0LT5lbnRyaWVzW2ldOworCQl0bXBfaGV4X29pZF9sZW4gPSBoZXhfb2lkX2xlbiArIGUtPm5hbWUtPnN0cl9sZW47CisJCXRtcF9mdWxscGF0aF9sZW4gPSBmdWxscGF0aF9sZW47CisKKwkJLyoKKwkJICogV2UncmUgaW50ZXJlc3RlZCBpbiBFSVRIRVIgZXhpc3Rpbmcgbm90ZSBlbnRyaWVzIChlbnRyaWVzCisJCSAqIHdpdGggZXhhY3RseSA0MCBoZXggY2hhcnMgaW4gcGF0aCwgbm90IGluY2x1ZGluZyBkaXJlY3RvcnkKKwkJICogc2VwYXJhdG9ycyksIE9SIGRpcmVjdG9yeSBlbnRyaWVzIHRoYXQgbWF5IGNvbnRhaW4gbm90ZQorCQkgKiBlbnRyaWVzICh3aXRoIDwgNDAgaGV4IGNoYXJzIGluIHBhdGgpLgorCQkgKiBBbHNvLCBlYWNoIHBhdGggY29tcG9uZW50IGluIGEgbm90ZSBlbnRyeSBtdXN0IGJlIGEgbXVsdGlwbGUKKwkJICogb2YgMiBjaGFycy4KKwkJICovCisJCWlmICghZS0+dmVyc2lvbnNbMV0ubW9kZSB8fAorCQkgICAgdG1wX2hleF9vaWRfbGVuID4gaGV4c3ogfHwKKwkJICAgIGUtPm5hbWUtPnN0cl9sZW4gJSAyKQorCQkJY29udGludWU7CisKKwkJLyogVGhpcyBfbWF5XyBiZSBhIG5vdGUgZW50cnksIG9yIGEgc3ViZGlyIGNvbnRhaW5pbmcgbm90ZXMgKi8KKwkJbWVtY3B5KGhleF9vaWQgKyBoZXhfb2lkX2xlbiwgZS0+bmFtZS0+c3RyX2RhdCwKKwkJICAgICAgIGUtPm5hbWUtPnN0cl9sZW4pOworCQlpZiAodG1wX2Z1bGxwYXRoX2xlbikKKwkJCWZ1bGxwYXRoW3RtcF9mdWxscGF0aF9sZW4rK10gPSAnLyc7CisJCW1lbWNweShmdWxscGF0aCArIHRtcF9mdWxscGF0aF9sZW4sIGUtPm5hbWUtPnN0cl9kYXQsCisJCSAgICAgICBlLT5uYW1lLT5zdHJfbGVuKTsKKwkJdG1wX2Z1bGxwYXRoX2xlbiArPSBlLT5uYW1lLT5zdHJfbGVuOworCQlmdWxscGF0aFt0bXBfZnVsbHBhdGhfbGVuXSA9ICdcMCc7CisKKwkJaWYgKHRtcF9oZXhfb2lkX2xlbiA9PSBoZXhzeiAmJiAhZ2V0X29pZF9oZXgoaGV4X29pZCwgJm9pZCkpIHsKKwkJCS8qIFRoaXMgaXMgYSBub3RlIGVudHJ5ICovCisJCQlpZiAoZmFub3V0ID09IDB4ZmYpIHsKKwkJCQkvKiBDb3VudGluZyBtb2RlLCBubyByZW5hbWUgKi8KKwkJCQludW1fbm90ZXMrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNvbnN0cnVjdF9wYXRoX3dpdGhfZmFub3V0KGhleF9vaWQsIGZhbm91dCwgcmVhbHBhdGgpOworCQkJaWYgKCFzdHJjbXAoZnVsbHBhdGgsIHJlYWxwYXRoKSkgeworCQkJCS8qIE5vdGUgZW50cnkgaXMgaW4gY29ycmVjdCBsb2NhdGlvbiAqLworCQkJCW51bV9ub3RlcysrOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBSZW5hbWUgZnVsbHBhdGggdG8gcmVhbHBhdGggKi8KKwkJCWlmICghdHJlZV9jb250ZW50X3JlbW92ZShvcmlnX3Jvb3QsIGZ1bGxwYXRoLCAmbGVhZiwgMCkpCisJCQkJZGllKCJGYWlsZWQgdG8gcmVtb3ZlIHBhdGggJXMiLCBmdWxscGF0aCk7CisJCQl0cmVlX2NvbnRlbnRfc2V0KG9yaWdfcm9vdCwgcmVhbHBhdGgsCisJCQkJJmxlYWYudmVyc2lvbnNbMV0ub2lkLAorCQkJCWxlYWYudmVyc2lvbnNbMV0ubW9kZSwKKwkJCQlsZWFmLnRyZWUpOworCQl9IGVsc2UgaWYgKFNfSVNESVIoZS0+dmVyc2lvbnNbMV0ubW9kZSkpIHsKKwkJCS8qIFRoaXMgaXMgYSBzdWJkaXIgdGhhdCBtYXkgY29udGFpbiBub3RlIGVudHJpZXMgKi8KKwkJCW51bV9ub3RlcyArPSBkb19jaGFuZ2Vfbm90ZV9mYW5vdXQob3JpZ19yb290LCBlLAorCQkJCWhleF9vaWQsIHRtcF9oZXhfb2lkX2xlbiwKKwkJCQlmdWxscGF0aCwgdG1wX2Z1bGxwYXRoX2xlbiwgZmFub3V0KTsKKwkJfQorCisJCS8qIFRoZSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgY3VycmVudCB0cmVlX2NvbnRlbnQgKi8KKwkJdCA9IHJvb3QtPnRyZWU7CisJfQorCXJldHVybiBudW1fbm90ZXM7Cit9CisKK3N0YXRpYyB1aW50bWF4X3QgY2hhbmdlX25vdGVfZmFub3V0KHN0cnVjdCB0cmVlX2VudHJ5ICpyb290LAorCQl1bnNpZ25lZCBjaGFyIGZhbm91dCkKK3sKKwkvKgorCSAqIFRoZSBzaXplIG9mIHBhdGggaXMgZHVlIHRvIG9uZSBzbGFzaCBiZXR3ZWVuIGV2ZXJ5IHR3byBoZXggZGlnaXRzLAorCSAqIHBsdXMgdGhlIHRlcm1pbmF0aW5nIE5VTC4gIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBzbGFzaCBhdCB0aGUgZW5kLCBzbworCSAqIHRoZSBudW1iZXIgb2Ygc2xhc2hlcyBpcyBvbmUgbGVzcyB0aGFuIGhhbGYgdGhlIG51bWJlciBvZiBoZXgKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCWNoYXIgaGV4X29pZFtHSVRfTUFYX0hFWFNaXSwgcGF0aFtHSVRfTUFYX0hFWFNaICsgKEdJVF9NQVhfSEVYU1ogLyAyKSAtIDEgKyAxXTsKKwlyZXR1cm4gZG9fY2hhbmdlX25vdGVfZmFub3V0KHJvb3QsIHJvb3QsIGhleF9vaWQsIDAsIHBhdGgsIDAsIGZhbm91dCk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfbWFwcGVkX29pZF9oZXgoY29uc3QgY2hhciAqaGV4LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKiplbmQpCit7CisJaW50IGFsZ287CisJa2hpdGVyX3QgaXQ7CisKKwkvKiBNYWtlIFNIQS0xIG9iamVjdCBJRHMgaGF2ZSBhbGwtemVybyBwYWRkaW5nLiAqLworCW1lbXNldChvaWQtPmhhc2gsIDAsIHNpemVvZihvaWQtPmhhc2gpKTsKKworCWFsZ28gPSBwYXJzZV9vaWRfaGV4X2FueShoZXgsIG9pZCwgZW5kKTsKKwlpZiAoYWxnbyA9PSBHSVRfSEFTSF9VTktOT1dOKQorCQlyZXR1cm4gLTE7CisKKwlpdCA9IGtoX2dldF9vaWRfbWFwKHN1Yl9vaWRfbWFwLCAqb2lkKTsKKwkvKiBObyBzdWNoIG9iamVjdD8gKi8KKwlpZiAoaXQgPT0ga2hfZW5kKHN1Yl9vaWRfbWFwKSkgeworCQkvKiBJZiB3ZSdyZSB1c2luZyB0aGUgc2FtZSBhbGdvcml0aG0sIHBhc3MgaXQgdGhyb3VnaC4gKi8KKwkJaWYgKGhhc2hfYWxnb3NbYWxnb10uZm9ybWF0X2lkID09IHRoZV9oYXNoX2FsZ28tPmZvcm1hdF9pZCkKKwkJCXJldHVybiAwOworCQlyZXR1cm4gLTE7CisJfQorCW9pZGNweShvaWQsIGtoX3ZhbHVlKHN1Yl9vaWRfbWFwLCBpdCkpOworCXJldHVybiAwOworfQorCisvKgorICogR2l2ZW4gYSBwb2ludGVyIGludG8gYSBzdHJpbmcsIHBhcnNlIGEgbWFyayByZWZlcmVuY2U6CisgKgorICogICBpZG51bSA6Oj0gJzonIGJpZ2ludDsKKyAqCisgKiBSZXR1cm4gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgdmFsdWUgaW4gKmVuZHB0ci4KKyAqCisgKiBDb21wbGFpbiBpZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBpcyBub3Qgd2hhdCBpcyBleHBlY3RlZCwKKyAqIGVpdGhlciBhIHNwYWNlIG9yIGVuZCBvZiB0aGUgc3RyaW5nLgorICovCitzdGF0aWMgdWludG1heF90IHBhcnNlX21hcmtfcmVmKGNvbnN0IGNoYXIgKnAsIGNoYXIgKiplbmRwdHIpCit7CisJdWludG1heF90IG1hcms7CisKKwlhc3NlcnQoKnAgPT0gJzonKTsKKwlwKys7CisJbWFyayA9IHN0cnRvdW1heChwLCBlbmRwdHIsIDEwKTsKKwlpZiAoKmVuZHB0ciA9PSBwKQorCQlkaWUoIk5vIHZhbHVlIGFmdGVyICc6JyBpbiBtYXJrOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJcmV0dXJuIG1hcms7Cit9CisKKy8qCisgKiBQYXJzZSB0aGUgbWFyayByZWZlcmVuY2UsIGFuZCBjb21wbGFpbiBpZiB0aGlzIGlzIG5vdCB0aGUgZW5kIG9mCisgKiB0aGUgc3RyaW5nLgorICovCitzdGF0aWMgdWludG1heF90IHBhcnNlX21hcmtfcmVmX2VvbChjb25zdCBjaGFyICpwKQoreworCWNoYXIgKmVuZDsKKwl1aW50bWF4X3QgbWFyazsKKworCW1hcmsgPSBwYXJzZV9tYXJrX3JlZihwLCAmZW5kKTsKKwlpZiAoKmVuZCAhPSAnXDAnKQorCQlkaWUoIkdhcmJhZ2UgYWZ0ZXIgbWFyazogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCXJldHVybiBtYXJrOworfQorCisvKgorICogUGFyc2UgdGhlIG1hcmsgcmVmZXJlbmNlLCBkZW1hbmRpbmcgYSB0cmFpbGluZyBzcGFjZS4gIFJldHVybiBhCisgKiBwb2ludGVyIHRvIHRoZSBzcGFjZS4KKyAqLworc3RhdGljIHVpbnRtYXhfdCBwYXJzZV9tYXJrX3JlZl9zcGFjZShjb25zdCBjaGFyICoqcCkKK3sKKwl1aW50bWF4X3QgbWFyazsKKwljaGFyICplbmQ7CisKKwltYXJrID0gcGFyc2VfbWFya19yZWYoKnAsICZlbmQpOworCWlmICgqZW5kKysgIT0gJyAnKQorCQlkaWUoIk1pc3Npbmcgc3BhY2UgYWZ0ZXIgbWFyazogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCSpwID0gZW5kOworCXJldHVybiBtYXJrOworfQorCitzdGF0aWMgdm9pZCBmaWxlX2NoYW5nZV9tKGNvbnN0IGNoYXIgKnAsIHN0cnVjdCBicmFuY2ggKmIpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgdXEgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICplbmRwOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXVpbnQxNl90IG1vZGUsIGlubGluZV9kYXRhID0gMDsKKworCXAgPSBnZXRfbW9kZShwLCAmbW9kZSk7CisJaWYgKCFwKQorCQlkaWUoIkNvcnJ1cHQgbW9kZTogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMDY0NDoKKwljYXNlIDA3NTU6CisJCW1vZGUgfD0gU19JRlJFRzsKKwljYXNlIFNfSUZSRUcgfCAwNjQ0OgorCWNhc2UgU19JRlJFRyB8IDA3NTU6CisJY2FzZSBTX0lGTE5LOgorCWNhc2UgU19JRkRJUjoKKwljYXNlIFNfSUZHSVRMSU5LOgorCQkvKiBvayAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoIkNvcnJ1cHQgbW9kZTogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCX0KKworCWlmICgqcCA9PSAnOicpIHsKKwkJb2UgPSBmaW5kX21hcmsobWFya3MsIHBhcnNlX21hcmtfcmVmX3NwYWNlKCZwKSk7CisJCW9pZGNweSgmb2lkLCAmb2UtPmlkeC5vaWQpOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgocCwgImlubGluZSAiLCAmcCkpIHsKKwkJaW5saW5lX2RhdGEgPSAxOworCQlvZSA9IE5VTEw7IC8qIG5vdCB1c2VkIHdpdGggaW5saW5lX2RhdGEsIGJ1dCBtYWtlcyBnY2MgaGFwcHkgKi8KKwl9IGVsc2UgeworCQlpZiAocGFyc2VfbWFwcGVkX29pZF9oZXgocCwgJm9pZCwgJnApKQorCQkJZGllKCJJbnZhbGlkIGRhdGFyZWY6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJb2UgPSBmaW5kX29iamVjdCgmb2lkKTsKKwkJaWYgKCpwKysgIT0gJyAnKQorCQkJZGllKCJNaXNzaW5nIHNwYWNlIGFmdGVyIFNIQTE6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwl9CisKKwlzdHJidWZfcmVzZXQoJnVxKTsKKwlpZiAoIXVucXVvdGVfY19zdHlsZSgmdXEsIHAsICZlbmRwKSkgeworCQlpZiAoKmVuZHApCisJCQlkaWUoIkdhcmJhZ2UgYWZ0ZXIgcGF0aCBpbjogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlwID0gdXEuYnVmOworCX0KKworCS8qIEdpdCBkb2VzIG5vdCB0cmFjayBlbXB0eSwgbm9uLXRvcGxldmVsIGRpcmVjdG9yaWVzLiAqLworCWlmIChTX0lTRElSKG1vZGUpICYmIGlzX2VtcHR5X3RyZWVfb2lkKCZvaWQpICYmICpwKSB7CisJCXRyZWVfY29udGVudF9yZW1vdmUoJmItPmJyYW5jaF90cmVlLCBwLCBOVUxMLCAwKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChTX0lTR0lUTElOSyhtb2RlKSkgeworCQlpZiAoaW5saW5lX2RhdGEpCisJCQlkaWUoIkdpdCBsaW5rcyBjYW5ub3QgYmUgc3BlY2lmaWVkICdpbmxpbmUnOiAlcyIsCisJCQkJY29tbWFuZF9idWYuYnVmKTsKKwkJZWxzZSBpZiAob2UpIHsKKwkJCWlmIChvZS0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQkJCWRpZSgiTm90IGEgY29tbWl0IChhY3R1YWxseSBhICVzKTogJXMiLAorCQkJCQl0eXBlX25hbWUob2UtPnR5cGUpLCBjb21tYW5kX2J1Zi5idWYpOworCQl9CisJCS8qCisJCSAqIEFjY2VwdCB0aGUgc2hhMSB3aXRob3V0IGNoZWNraW5nOyBpdCBleHBlY3RlZCB0byBiZSBpbgorCQkgKiBhbm90aGVyIHJlcG9zaXRvcnkuCisJCSAqLworCX0gZWxzZSBpZiAoaW5saW5lX2RhdGEpIHsKKwkJaWYgKFNfSVNESVIobW9kZSkpCisJCQlkaWUoIkRpcmVjdG9yaWVzIGNhbm5vdCBiZSBzcGVjaWZpZWQgJ2lubGluZSc6ICVzIiwKKwkJCQljb21tYW5kX2J1Zi5idWYpOworCQlpZiAocCAhPSB1cS5idWYpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnVxLCBwKTsKKwkJCXAgPSB1cS5idWY7CisJCX0KKwkJd2hpbGUgKHJlYWRfbmV4dF9jb21tYW5kKCkgIT0gRU9GKSB7CisJCQljb25zdCBjaGFyICp2OworCQkJaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgImNhdC1ibG9iICIsICZ2KSkKKwkJCQlwYXJzZV9jYXRfYmxvYih2KTsKKwkJCWVsc2UgeworCQkJCXBhcnNlX2FuZF9zdG9yZV9ibG9iKCZsYXN0X2Jsb2IsICZvaWQsIDApOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZW51bSBvYmplY3RfdHlwZSBleHBlY3RlZCA9IFNfSVNESVIobW9kZSkgPworCQkJCQkJT0JKX1RSRUU6IE9CSl9CTE9COworCQllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBvZSA/IG9lLT50eXBlIDoKKwkJCQkJb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCAmb2lkLAorCQkJCQkJCU5VTEwpOworCQlpZiAodHlwZSA8IDApCisJCQlkaWUoIiVzIG5vdCBmb3VuZDogJXMiLAorCQkJCQlTX0lTRElSKG1vZGUpID8gICJUcmVlIiA6ICJCbG9iIiwKKwkJCQkJY29tbWFuZF9idWYuYnVmKTsKKwkJaWYgKHR5cGUgIT0gZXhwZWN0ZWQpCisJCQlkaWUoIk5vdCBhICVzIChhY3R1YWxseSBhICVzKTogJXMiLAorCQkJCXR5cGVfbmFtZShleHBlY3RlZCksIHR5cGVfbmFtZSh0eXBlKSwKKwkJCQljb21tYW5kX2J1Zi5idWYpOworCX0KKworCWlmICghKnApIHsKKwkJdHJlZV9jb250ZW50X3JlcGxhY2UoJmItPmJyYW5jaF90cmVlLCAmb2lkLCBtb2RlLCBOVUxMKTsKKwkJcmV0dXJuOworCX0KKwl0cmVlX2NvbnRlbnRfc2V0KCZiLT5icmFuY2hfdHJlZSwgcCwgJm9pZCwgbW9kZSwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGVfY2hhbmdlX2QoY29uc3QgY2hhciAqcCwgc3RydWN0IGJyYW5jaCAqYikKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB1cSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmVuZHA7CisKKwlzdHJidWZfcmVzZXQoJnVxKTsKKwlpZiAoIXVucXVvdGVfY19zdHlsZSgmdXEsIHAsICZlbmRwKSkgeworCQlpZiAoKmVuZHApCisJCQlkaWUoIkdhcmJhZ2UgYWZ0ZXIgcGF0aCBpbjogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlwID0gdXEuYnVmOworCX0KKwl0cmVlX2NvbnRlbnRfcmVtb3ZlKCZiLT5icmFuY2hfdHJlZSwgcCwgTlVMTCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGVfY2hhbmdlX2NyKGNvbnN0IGNoYXIgKnMsIHN0cnVjdCBicmFuY2ggKmIsIGludCByZW5hbWUpCit7CisJY29uc3QgY2hhciAqZDsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBzX3VxID0gU1RSQlVGX0lOSVQ7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgZF91cSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmVuZHA7CisJc3RydWN0IHRyZWVfZW50cnkgbGVhZjsKKworCXN0cmJ1Zl9yZXNldCgmc191cSk7CisJaWYgKCF1bnF1b3RlX2Nfc3R5bGUoJnNfdXEsIHMsICZlbmRwKSkgeworCQlpZiAoKmVuZHAgIT0gJyAnKQorCQkJZGllKCJNaXNzaW5nIHNwYWNlIGFmdGVyIHNvdXJjZTogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCX0gZWxzZSB7CisJCWVuZHAgPSBzdHJjaHIocywgJyAnKTsKKwkJaWYgKCFlbmRwKQorCQkJZGllKCJNaXNzaW5nIHNwYWNlIGFmdGVyIHNvdXJjZTogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlzdHJidWZfYWRkKCZzX3VxLCBzLCBlbmRwIC0gcyk7CisJfQorCXMgPSBzX3VxLmJ1ZjsKKworCWVuZHArKzsKKwlpZiAoISplbmRwKQorCQlkaWUoIk1pc3NpbmcgZGVzdDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCisJZCA9IGVuZHA7CisJc3RyYnVmX3Jlc2V0KCZkX3VxKTsKKwlpZiAoIXVucXVvdGVfY19zdHlsZSgmZF91cSwgZCwgJmVuZHApKSB7CisJCWlmICgqZW5kcCkKKwkJCWRpZSgiR2FyYmFnZSBhZnRlciBkZXN0IGluOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCWQgPSBkX3VxLmJ1ZjsKKwl9CisKKwltZW1zZXQoJmxlYWYsIDAsIHNpemVvZihsZWFmKSk7CisJaWYgKHJlbmFtZSkKKwkJdHJlZV9jb250ZW50X3JlbW92ZSgmYi0+YnJhbmNoX3RyZWUsIHMsICZsZWFmLCAxKTsKKwllbHNlCisJCXRyZWVfY29udGVudF9nZXQoJmItPmJyYW5jaF90cmVlLCBzLCAmbGVhZiwgMSk7CisJaWYgKCFsZWFmLnZlcnNpb25zWzFdLm1vZGUpCisJCWRpZSgiUGF0aCAlcyBub3QgaW4gYnJhbmNoIiwgcyk7CisJaWYgKCEqZCkgewkvKiBDICJwYXRoL3RvL3N1YmRpciIgIiIgKi8KKwkJdHJlZV9jb250ZW50X3JlcGxhY2UoJmItPmJyYW5jaF90cmVlLAorCQkJJmxlYWYudmVyc2lvbnNbMV0ub2lkLAorCQkJbGVhZi52ZXJzaW9uc1sxXS5tb2RlLAorCQkJbGVhZi50cmVlKTsKKwkJcmV0dXJuOworCX0KKwl0cmVlX2NvbnRlbnRfc2V0KCZiLT5icmFuY2hfdHJlZSwgZCwKKwkJJmxlYWYudmVyc2lvbnNbMV0ub2lkLAorCQlsZWFmLnZlcnNpb25zWzFdLm1vZGUsCisJCWxlYWYudHJlZSk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGVfY2hhbmdlX24oY29uc3QgY2hhciAqcCwgc3RydWN0IGJyYW5jaCAqYiwgdW5zaWduZWQgY2hhciAqb2xkX2Zhbm91dCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB1cSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lOworCXN0cnVjdCBicmFuY2ggKnM7CisJc3RydWN0IG9iamVjdF9pZCBvaWQsIGNvbW1pdF9vaWQ7CisJY2hhciBwYXRoW0dJVF9NQVhfUkFXU1ogKiAzXTsKKwl1aW50MTZfdCBpbmxpbmVfZGF0YSA9IDA7CisJdW5zaWduZWQgY2hhciBuZXdfZmFub3V0OworCisJLyoKKwkgKiBXaGVuIGxvYWRpbmcgYSBicmFuY2gsIHdlIGRvbid0IHRyYXZlcnNlIGl0cyB0cmVlIHRvIGNvdW50IHRoZSByZWFsCisJICogbnVtYmVyIG9mIG5vdGVzICh0b28gZXhwZW5zaXZlIHRvIGRvIHRoaXMgZm9yIGFsbCBub24tbm90ZSByZWZzKS4KKwkgKiBUaGlzIG1lYW5zIHRoYXQgcmVjZW50bHkgbG9hZGVkIG5vdGVzIHJlZnMgbWlnaHQgaW5jb3JyZWN0bHkgaGF2ZQorCSAqIGItPm51bV9ub3RlcyA9PSAwLCBhbmQgY29uc2VxdWVudGx5LCBvbGRfZmFub3V0IG1pZ2h0IGJlIHdyb25nLgorCSAqCisJICogRml4IHRoaXMgYnkgdHJhdmVyc2luZyB0aGUgdHJlZSBhbmQgY291bnRpbmcgdGhlIG51bWJlciBvZiBub3RlcworCSAqIHdoZW4gYi0+bnVtX25vdGVzID09IDAuIElmIHRoZSBub3RlcyB0cmVlIGlzIHRydWx5IGVtcHR5LCB0aGUKKwkgKiBjYWxjdWxhdGlvbiBzaG91bGQgbm90IHRha2UgbG9uZy4KKwkgKi8KKwlpZiAoYi0+bnVtX25vdGVzID09IDAgJiYgKm9sZF9mYW5vdXQgPT0gMCkgeworCQkvKiBJbnZva2UgY2hhbmdlX25vdGVfZmFub3V0KCkgaW4gImNvdW50aW5nIG1vZGUiLiAqLworCQliLT5udW1fbm90ZXMgPSBjaGFuZ2Vfbm90ZV9mYW5vdXQoJmItPmJyYW5jaF90cmVlLCAweGZmKTsKKwkJKm9sZF9mYW5vdXQgPSBjb252ZXJ0X251bV9ub3Rlc190b19mYW5vdXQoYi0+bnVtX25vdGVzKTsKKwl9CisKKwkvKiBOb3cgcGFyc2UgdGhlIG5vdGVtb2RpZnkgY29tbWFuZC4gKi8KKwkvKiA8ZGF0YXJlZj4gb3IgJ2lubGluZScgKi8KKwlpZiAoKnAgPT0gJzonKSB7CisJCW9lID0gZmluZF9tYXJrKG1hcmtzLCBwYXJzZV9tYXJrX3JlZl9zcGFjZSgmcCkpOworCQlvaWRjcHkoJm9pZCwgJm9lLT5pZHgub2lkKTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KHAsICJpbmxpbmUgIiwgJnApKSB7CisJCWlubGluZV9kYXRhID0gMTsKKwkJb2UgPSBOVUxMOyAvKiBub3QgdXNlZCB3aXRoIGlubGluZV9kYXRhLCBidXQgbWFrZXMgZ2NjIGhhcHB5ICovCisJfSBlbHNlIHsKKwkJaWYgKHBhcnNlX21hcHBlZF9vaWRfaGV4KHAsICZvaWQsICZwKSkKKwkJCWRpZSgiSW52YWxpZCBkYXRhcmVmOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCW9lID0gZmluZF9vYmplY3QoJm9pZCk7CisJCWlmICgqcCsrICE9ICcgJykKKwkJCWRpZSgiTWlzc2luZyBzcGFjZSBhZnRlciBTSEExOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJfQorCisJLyogPGNvbW1pdC1pc2g+ICovCisJcyA9IGxvb2t1cF9icmFuY2gocCk7CisJaWYgKHMpIHsKKwkJaWYgKGlzX251bGxfb2lkKCZzLT5vaWQpKQorCQkJZGllKCJDYW4ndCBhZGQgYSBub3RlIG9uIGVtcHR5IGJyYW5jaC4iKTsKKwkJb2lkY3B5KCZjb21taXRfb2lkLCAmcy0+b2lkKTsKKwl9IGVsc2UgaWYgKCpwID09ICc6JykgeworCQl1aW50bWF4X3QgY29tbWl0X21hcmsgPSBwYXJzZV9tYXJrX3JlZl9lb2wocCk7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmNvbW1pdF9vZSA9IGZpbmRfbWFyayhtYXJrcywgY29tbWl0X21hcmspOworCQlpZiAoY29tbWl0X29lLT50eXBlICE9IE9CSl9DT01NSVQpCisJCQlkaWUoIk1hcmsgOiUiIFBSSXVNQVggIiBub3QgYSBjb21taXQiLCBjb21taXRfbWFyayk7CisJCW9pZGNweSgmY29tbWl0X29pZCwgJmNvbW1pdF9vZS0+aWR4Lm9pZCk7CisJfSBlbHNlIGlmICghZ2V0X29pZChwLCAmY29tbWl0X29pZCkpIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQljaGFyICpidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSAgICAgICAmY29tbWl0X29pZCwKKwkJCQkJCSAgICAgICBjb21taXRfdHlwZSwgJnNpemUsCisJCQkJCQkgICAgICAgJmNvbW1pdF9vaWQpOworCQlpZiAoIWJ1ZiB8fCBzaXplIDwgdGhlX2hhc2hfYWxnby0+aGV4c3ogKyA2KQorCQkJZGllKCJOb3QgYSB2YWxpZCBjb21taXQ6ICVzIiwgcCk7CisJCWZyZWUoYnVmKTsKKwl9IGVsc2UKKwkJZGllKCJJbnZhbGlkIHJlZiBuYW1lIG9yIFNIQTEgZXhwcmVzc2lvbjogJXMiLCBwKTsKKworCWlmIChpbmxpbmVfZGF0YSkgeworCQlpZiAocCAhPSB1cS5idWYpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnVxLCBwKTsKKwkJCXAgPSB1cS5idWY7CisJCX0KKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwkJcGFyc2VfYW5kX3N0b3JlX2Jsb2IoJmxhc3RfYmxvYiwgJm9pZCwgMCk7CisJfSBlbHNlIGlmIChvZSkgeworCQlpZiAob2UtPnR5cGUgIT0gT0JKX0JMT0IpCisJCQlkaWUoIk5vdCBhIGJsb2IgKGFjdHVhbGx5IGEgJXMpOiAlcyIsCisJCQkJdHlwZV9uYW1lKG9lLT50eXBlKSwgY29tbWFuZF9idWYuYnVmKTsKKwl9IGVsc2UgaWYgKCFpc19udWxsX29pZCgmb2lkKSkgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksICZvaWQsCisJCQkJCQkJTlVMTCk7CisJCWlmICh0eXBlIDwgMCkKKwkJCWRpZSgiQmxvYiBub3QgZm91bmQ6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJaWYgKHR5cGUgIT0gT0JKX0JMT0IpCisJCQlkaWUoIk5vdCBhIGJsb2IgKGFjdHVhbGx5IGEgJXMpOiAlcyIsCisJCQkgICAgdHlwZV9uYW1lKHR5cGUpLCBjb21tYW5kX2J1Zi5idWYpOworCX0KKworCWNvbnN0cnVjdF9wYXRoX3dpdGhfZmFub3V0KG9pZF90b19oZXgoJmNvbW1pdF9vaWQpLCAqb2xkX2Zhbm91dCwgcGF0aCk7CisJaWYgKHRyZWVfY29udGVudF9yZW1vdmUoJmItPmJyYW5jaF90cmVlLCBwYXRoLCBOVUxMLCAwKSkKKwkJYi0+bnVtX25vdGVzLS07CisKKwlpZiAoaXNfbnVsbF9vaWQoJm9pZCkpCisJCXJldHVybjsgLyogbm90aGluZyB0byBpbnNlcnQgKi8KKworCWItPm51bV9ub3RlcysrOworCW5ld19mYW5vdXQgPSBjb252ZXJ0X251bV9ub3Rlc190b19mYW5vdXQoYi0+bnVtX25vdGVzKTsKKwljb25zdHJ1Y3RfcGF0aF93aXRoX2Zhbm91dChvaWRfdG9faGV4KCZjb21taXRfb2lkKSwgbmV3X2Zhbm91dCwgcGF0aCk7CisJdHJlZV9jb250ZW50X3NldCgmYi0+YnJhbmNoX3RyZWUsIHBhdGgsICZvaWQsIFNfSUZSRUcgfCAwNjQ0LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgZmlsZV9jaGFuZ2VfZGVsZXRlYWxsKHN0cnVjdCBicmFuY2ggKmIpCit7CisJcmVsZWFzZV90cmVlX2NvbnRlbnRfcmVjdXJzaXZlKGItPmJyYW5jaF90cmVlLnRyZWUpOworCW9pZGNscigmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0ub2lkKTsKKwlvaWRjbHIoJmItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLm9pZCk7CisJbG9hZF90cmVlKCZiLT5icmFuY2hfdHJlZSk7CisJYi0+bnVtX25vdGVzID0gMDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZnJvbV9jb21taXQoc3RydWN0IGJyYW5jaCAqYiwgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKCFidWYgfHwgc2l6ZSA8IHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgNikKKwkJZGllKCJOb3QgYSB2YWxpZCBjb21taXQ6ICVzIiwgb2lkX3RvX2hleCgmYi0+b2lkKSk7CisJaWYgKG1lbWNtcCgidHJlZSAiLCBidWYsIDUpCisJCXx8IGdldF9vaWRfaGV4KGJ1ZiArIDUsICZiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5vaWQpKQorCQlkaWUoIlRoZSBjb21taXQgJXMgaXMgY29ycnVwdCIsIG9pZF90b19oZXgoJmItPm9pZCkpOworCW9pZGNweSgmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0ub2lkLAorCSAgICAgICAmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0ub2lkKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZnJvbV9leGlzdGluZyhzdHJ1Y3QgYnJhbmNoICpiKQoreworCWlmIChpc19udWxsX29pZCgmYi0+b2lkKSkgeworCQlvaWRjbHIoJmItPmJyYW5jaF90cmVlLnZlcnNpb25zWzBdLm9pZCk7CisJCW9pZGNscigmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0ub2lkKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCWNoYXIgKmJ1ZjsKKworCQlidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSAmYi0+b2lkLCBjb21taXRfdHlwZSwgJnNpemUsCisJCQkJCQkgJmItPm9pZCk7CisJCXBhcnNlX2Zyb21fY29tbWl0KGIsIGJ1Ziwgc2l6ZSk7CisJCWZyZWUoYnVmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfb2JqZWN0aXNoKHN0cnVjdCBicmFuY2ggKmIsIGNvbnN0IGNoYXIgKm9iamVjdGlzaCkKK3sKKwlzdHJ1Y3QgYnJhbmNoICpzOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJb2lkY3B5KCZvaWQsICZiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5vaWQpOworCisJcyA9IGxvb2t1cF9icmFuY2gob2JqZWN0aXNoKTsKKwlpZiAoYiA9PSBzKQorCQlkaWUoIkNhbid0IGNyZWF0ZSBhIGJyYW5jaCBmcm9tIGl0c2VsZjogJXMiLCBiLT5uYW1lKTsKKwllbHNlIGlmIChzKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgKnQgPSAmcy0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0ub2lkOworCQlvaWRjcHkoJmItPm9pZCwgJnMtPm9pZCk7CisJCW9pZGNweSgmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0ub2lkLCB0KTsKKwkJb2lkY3B5KCZiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5vaWQsIHQpOworCX0gZWxzZSBpZiAoKm9iamVjdGlzaCA9PSAnOicpIHsKKwkJdWludG1heF90IGlkbnVtID0gcGFyc2VfbWFya19yZWZfZW9sKG9iamVjdGlzaCk7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lID0gZmluZF9tYXJrKG1hcmtzLCBpZG51bSk7CisJCWlmIChvZS0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQkJZGllKCJNYXJrIDolIiBQUkl1TUFYICIgbm90IGEgY29tbWl0IiwgaWRudW0pOworCQlpZiAoIW9pZGVxKCZiLT5vaWQsICZvZS0+aWR4Lm9pZCkpIHsKKwkJCW9pZGNweSgmYi0+b2lkLCAmb2UtPmlkeC5vaWQpOworCQkJaWYgKG9lLT5wYWNrX2lkICE9IE1BWF9QQUNLX0lEKSB7CisJCQkJdW5zaWduZWQgbG9uZyBzaXplOworCQkJCWNoYXIgKmJ1ZiA9IGdmaV91bnBhY2tfZW50cnkob2UsICZzaXplKTsKKwkJCQlwYXJzZV9mcm9tX2NvbW1pdChiLCBidWYsIHNpemUpOworCQkJCWZyZWUoYnVmKTsKKwkJCX0gZWxzZQorCQkJCXBhcnNlX2Zyb21fZXhpc3RpbmcoYik7CisJCX0KKwl9IGVsc2UgaWYgKCFnZXRfb2lkKG9iamVjdGlzaCwgJmItPm9pZCkpIHsKKwkJcGFyc2VfZnJvbV9leGlzdGluZyhiKTsKKwkJaWYgKGlzX251bGxfb2lkKCZiLT5vaWQpKQorCQkJYi0+ZGVsZXRlID0gMTsKKwl9CisJZWxzZQorCQlkaWUoIkludmFsaWQgcmVmIG5hbWUgb3IgU0hBMSBleHByZXNzaW9uOiAlcyIsIG9iamVjdGlzaCk7CisKKwlpZiAoYi0+YnJhbmNoX3RyZWUudHJlZSAmJiAhb2lkZXEoJm9pZCwgJmItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLm9pZCkpIHsKKwkJcmVsZWFzZV90cmVlX2NvbnRlbnRfcmVjdXJzaXZlKGItPmJyYW5jaF90cmVlLnRyZWUpOworCQliLT5icmFuY2hfdHJlZS50cmVlID0gTlVMTDsKKwl9CisKKwlyZWFkX25leHRfY29tbWFuZCgpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBhcnNlX2Zyb20oc3RydWN0IGJyYW5jaCAqYikKK3sKKwljb25zdCBjaGFyICpmcm9tOworCisJaWYgKCFza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJmcm9tICIsICZmcm9tKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcGFyc2Vfb2JqZWN0aXNoKGIsIGZyb20pOworfQorCitzdGF0aWMgaW50IHBhcnNlX29iamVjdGlzaF93aXRoX3ByZWZpeChzdHJ1Y3QgYnJhbmNoICpiLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqYmFzZTsKKworCWlmICghc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCBwcmVmaXgsICZiYXNlKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcGFyc2Vfb2JqZWN0aXNoKGIsIGJhc2UpOworfQorCitzdGF0aWMgc3RydWN0IGhhc2hfbGlzdCAqcGFyc2VfbWVyZ2UodW5zaWduZWQgaW50ICpjb3VudCkKK3sKKwlzdHJ1Y3QgaGFzaF9saXN0ICpsaXN0ID0gTlVMTCwgKip0YWlsID0gJmxpc3QsICpuOworCWNvbnN0IGNoYXIgKmZyb207CisJc3RydWN0IGJyYW5jaCAqczsKKworCSpjb3VudCA9IDA7CisJd2hpbGUgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgIm1lcmdlICIsICZmcm9tKSkgeworCQluID0geG1hbGxvYyhzaXplb2YoKm4pKTsKKwkJcyA9IGxvb2t1cF9icmFuY2goZnJvbSk7CisJCWlmIChzKQorCQkJb2lkY3B5KCZuLT5vaWQsICZzLT5vaWQpOworCQllbHNlIGlmICgqZnJvbSA9PSAnOicpIHsKKwkJCXVpbnRtYXhfdCBpZG51bSA9IHBhcnNlX21hcmtfcmVmX2VvbChmcm9tKTsKKwkJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lID0gZmluZF9tYXJrKG1hcmtzLCBpZG51bSk7CisJCQlpZiAob2UtPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJCQlkaWUoIk1hcmsgOiUiIFBSSXVNQVggIiBub3QgYSBjb21taXQiLCBpZG51bSk7CisJCQlvaWRjcHkoJm4tPm9pZCwgJm9lLT5pZHgub2lkKTsKKwkJfSBlbHNlIGlmICghZ2V0X29pZChmcm9tLCAmbi0+b2lkKSkgeworCQkJdW5zaWduZWQgbG9uZyBzaXplOworCQkJY2hhciAqYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJICAgICAgICZuLT5vaWQsCisJCQkJCQkJICAgICAgIGNvbW1pdF90eXBlLAorCQkJCQkJCSAgICAgICAmc2l6ZSwgJm4tPm9pZCk7CisJCQlpZiAoIWJ1ZiB8fCBzaXplIDwgdGhlX2hhc2hfYWxnby0+aGV4c3ogKyA2KQorCQkJCWRpZSgiTm90IGEgdmFsaWQgY29tbWl0OiAlcyIsIGZyb20pOworCQkJZnJlZShidWYpOworCQl9IGVsc2UKKwkJCWRpZSgiSW52YWxpZCByZWYgbmFtZSBvciBTSEExIGV4cHJlc3Npb246ICVzIiwgZnJvbSk7CisKKwkJbi0+bmV4dCA9IE5VTEw7CisJCSp0YWlsID0gbjsKKwkJdGFpbCA9ICZuLT5uZXh0OworCisJCSgqY291bnQpKys7CisJCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJfQorCXJldHVybiBsaXN0OworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9uZXdfY29tbWl0KGNvbnN0IGNoYXIgKmFyZykKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgYnJhbmNoICpiOworCWNoYXIgKmF1dGhvciA9IE5VTEw7CisJY2hhciAqY29tbWl0dGVyID0gTlVMTDsKKwljaGFyICplbmNvZGluZyA9IE5VTEw7CisJc3RydWN0IGhhc2hfbGlzdCAqbWVyZ2VfbGlzdCA9IE5VTEw7CisJdW5zaWduZWQgaW50IG1lcmdlX2NvdW50OworCXVuc2lnbmVkIGNoYXIgcHJldl9mYW5vdXQsIG5ld19mYW5vdXQ7CisJY29uc3QgY2hhciAqdjsKKworCWIgPSBsb29rdXBfYnJhbmNoKGFyZyk7CisJaWYgKCFiKQorCQliID0gbmV3X2JyYW5jaChhcmcpOworCisJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwlwYXJzZV9tYXJrKCk7CisJcGFyc2Vfb3JpZ2luYWxfaWRlbnRpZmllcigpOworCWlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJhdXRob3IgIiwgJnYpKSB7CisJCWF1dGhvciA9IHBhcnNlX2lkZW50KHYpOworCQlyZWFkX25leHRfY29tbWFuZCgpOworCX0KKwlpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiY29tbWl0dGVyICIsICZ2KSkgeworCQljb21taXR0ZXIgPSBwYXJzZV9pZGVudCh2KTsKKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwl9CisJaWYgKCFjb21taXR0ZXIpCisJCWRpZSgiRXhwZWN0ZWQgY29tbWl0dGVyIGJ1dCBkaWRuJ3QgZ2V0IG9uZSIpOworCWlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJlbmNvZGluZyAiLCAmdikpIHsKKwkJZW5jb2RpbmcgPSB4c3RyZHVwKHYpOworCQlyZWFkX25leHRfY29tbWFuZCgpOworCX0KKwlwYXJzZV9kYXRhKCZtc2csIDAsIE5VTEwpOworCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJcGFyc2VfZnJvbShiKTsKKwltZXJnZV9saXN0ID0gcGFyc2VfbWVyZ2UoJm1lcmdlX2NvdW50KTsKKworCS8qIGVuc3VyZSB0aGUgYnJhbmNoIGlzIGFjdGl2ZS9sb2FkZWQgKi8KKwlpZiAoIWItPmJyYW5jaF90cmVlLnRyZWUgfHwgIW1heF9hY3RpdmVfYnJhbmNoZXMpIHsKKwkJdW5sb2FkX29uZV9icmFuY2goKTsKKwkJbG9hZF9icmFuY2goYik7CisJfQorCisJcHJldl9mYW5vdXQgPSBjb252ZXJ0X251bV9ub3Rlc190b19mYW5vdXQoYi0+bnVtX25vdGVzKTsKKworCS8qIGZpbGVfY2hhbmdlKiAqLworCXdoaWxlIChjb21tYW5kX2J1Zi5sZW4gPiAwKSB7CisJCWlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJNICIsICZ2KSkKKwkJCWZpbGVfY2hhbmdlX20odiwgYik7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgIkQgIiwgJnYpKQorCQkJZmlsZV9jaGFuZ2VfZCh2LCBiKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiUiAiLCAmdikpCisJCQlmaWxlX2NoYW5nZV9jcih2LCBiLCAxKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiQyAiLCAmdikpCisJCQlmaWxlX2NoYW5nZV9jcih2LCBiLCAwKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiTiAiLCAmdikpCisJCQlub3RlX2NoYW5nZV9uKHYsIGIsICZwcmV2X2Zhbm91dCk7CisJCWVsc2UgaWYgKCFzdHJjbXAoImRlbGV0ZWFsbCIsIGNvbW1hbmRfYnVmLmJ1ZikpCisJCQlmaWxlX2NoYW5nZV9kZWxldGVhbGwoYik7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgImxzICIsICZ2KSkKKwkJCXBhcnNlX2xzKHYsIGIpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJjYXQtYmxvYiAiLCAmdikpCisJCQlwYXJzZV9jYXRfYmxvYih2KTsKKwkJZWxzZSB7CisJCQl1bnJlYWRfY29tbWFuZF9idWYgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJlYWRfbmV4dF9jb21tYW5kKCkgPT0gRU9GKQorCQkJYnJlYWs7CisJfQorCisJbmV3X2Zhbm91dCA9IGNvbnZlcnRfbnVtX25vdGVzX3RvX2Zhbm91dChiLT5udW1fbm90ZXMpOworCWlmIChuZXdfZmFub3V0ICE9IHByZXZfZmFub3V0KQorCQliLT5udW1fbm90ZXMgPSBjaGFuZ2Vfbm90ZV9mYW5vdXQoJmItPmJyYW5jaF90cmVlLCBuZXdfZmFub3V0KTsKKworCS8qIGJ1aWxkIHRoZSB0cmVlIGFuZCB0aGUgY29tbWl0ICovCisJc3RvcmVfdHJlZSgmYi0+YnJhbmNoX3RyZWUpOworCW9pZGNweSgmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0ub2lkLAorCSAgICAgICAmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0ub2lkKTsKKworCXN0cmJ1Zl9yZXNldCgmbmV3X2RhdGEpOworCXN0cmJ1Zl9hZGRmKCZuZXdfZGF0YSwgInRyZWUgJXNcbiIsCisJCW9pZF90b19oZXgoJmItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLm9pZCkpOworCWlmICghaXNfbnVsbF9vaWQoJmItPm9pZCkpCisJCXN0cmJ1Zl9hZGRmKCZuZXdfZGF0YSwgInBhcmVudCAlc1xuIiwKKwkJCSAgICBvaWRfdG9faGV4KCZiLT5vaWQpKTsKKwl3aGlsZSAobWVyZ2VfbGlzdCkgeworCQlzdHJ1Y3QgaGFzaF9saXN0ICpuZXh0ID0gbWVyZ2VfbGlzdC0+bmV4dDsKKwkJc3RyYnVmX2FkZGYoJm5ld19kYXRhLCAicGFyZW50ICVzXG4iLAorCQkJICAgIG9pZF90b19oZXgoJm1lcmdlX2xpc3QtPm9pZCkpOworCQlmcmVlKG1lcmdlX2xpc3QpOworCQltZXJnZV9saXN0ID0gbmV4dDsKKwl9CisJc3RyYnVmX2FkZGYoJm5ld19kYXRhLAorCQkiYXV0aG9yICVzXG4iCisJCSJjb21taXR0ZXIgJXNcbiIsCisJCWF1dGhvciA/IGF1dGhvciA6IGNvbW1pdHRlciwgY29tbWl0dGVyKTsKKwlpZiAoZW5jb2RpbmcpCisJCXN0cmJ1Zl9hZGRmKCZuZXdfZGF0YSwKKwkJCSJlbmNvZGluZyAlc1xuIiwKKwkJCWVuY29kaW5nKTsKKwlzdHJidWZfYWRkY2goJm5ld19kYXRhLCAnXG4nKTsKKwlzdHJidWZfYWRkYnVmKCZuZXdfZGF0YSwgJm1zZyk7CisJZnJlZShhdXRob3IpOworCWZyZWUoY29tbWl0dGVyKTsKKwlmcmVlKGVuY29kaW5nKTsKKworCWlmICghc3RvcmVfb2JqZWN0KE9CSl9DT01NSVQsICZuZXdfZGF0YSwgTlVMTCwgJmItPm9pZCwgbmV4dF9tYXJrKSkKKwkJYi0+cGFja19pZCA9IHBhY2tfaWQ7CisJYi0+bGFzdF9jb21taXQgPSBvYmplY3RfY291bnRfYnlfdHlwZVtPQkpfQ09NTUlUXTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfbmV3X3RhZyhjb25zdCBjaGFyICphcmcpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZnJvbTsKKwljaGFyICp0YWdnZXI7CisJc3RydWN0IGJyYW5jaCAqczsKKwlzdHJ1Y3QgdGFnICp0OworCXVpbnRtYXhfdCBmcm9tX21hcmsgPSAwOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljb25zdCBjaGFyICp2OworCisJdCA9IG1lbV9wb29sX2FsbG9jKCZmaV9tZW1fcG9vbCwgc2l6ZW9mKHN0cnVjdCB0YWcpKTsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKHN0cnVjdCB0YWcpKTsKKwl0LT5uYW1lID0gcG9vbF9zdHJkdXAoYXJnKTsKKwlpZiAobGFzdF90YWcpCisJCWxhc3RfdGFnLT5uZXh0X3RhZyA9IHQ7CisJZWxzZQorCQlmaXJzdF90YWcgPSB0OworCWxhc3RfdGFnID0gdDsKKwlyZWFkX25leHRfY29tbWFuZCgpOworCXBhcnNlX21hcmsoKTsKKworCS8qIGZyb20gLi4uICovCisJaWYgKCFza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJmcm9tICIsICZmcm9tKSkKKwkJZGllKCJFeHBlY3RlZCBmcm9tIGNvbW1hbmQsIGdvdCAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJcyA9IGxvb2t1cF9icmFuY2goZnJvbSk7CisJaWYgKHMpIHsKKwkJaWYgKGlzX251bGxfb2lkKCZzLT5vaWQpKQorCQkJZGllKCJDYW4ndCB0YWcgYW4gZW1wdHkgYnJhbmNoLiIpOworCQlvaWRjcHkoJm9pZCwgJnMtPm9pZCk7CisJCXR5cGUgPSBPQkpfQ09NTUlUOworCX0gZWxzZSBpZiAoKmZyb20gPT0gJzonKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lOworCQlmcm9tX21hcmsgPSBwYXJzZV9tYXJrX3JlZl9lb2woZnJvbSk7CisJCW9lID0gZmluZF9tYXJrKG1hcmtzLCBmcm9tX21hcmspOworCQl0eXBlID0gb2UtPnR5cGU7CisJCW9pZGNweSgmb2lkLCAmb2UtPmlkeC5vaWQpOworCX0gZWxzZSBpZiAoIWdldF9vaWQoZnJvbSwgJm9pZCkpIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2UgPSBmaW5kX29iamVjdCgmb2lkKTsKKwkJaWYgKCFvZSkgeworCQkJdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgJm9pZCwgTlVMTCk7CisJCQlpZiAodHlwZSA8IDApCisJCQkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3Q6ICVzIiwgZnJvbSk7CisJCX0gZWxzZQorCQkJdHlwZSA9IG9lLT50eXBlOworCX0gZWxzZQorCQlkaWUoIkludmFsaWQgcmVmIG5hbWUgb3IgU0hBMSBleHByZXNzaW9uOiAlcyIsIGZyb20pOworCXJlYWRfbmV4dF9jb21tYW5kKCk7CisKKwkvKiBvcmlnaW5hbC1vaWQgLi4uICovCisJcGFyc2Vfb3JpZ2luYWxfaWRlbnRpZmllcigpOworCisJLyogdGFnZ2VyIC4uLiAqLworCWlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJ0YWdnZXIgIiwgJnYpKSB7CisJCXRhZ2dlciA9IHBhcnNlX2lkZW50KHYpOworCQlyZWFkX25leHRfY29tbWFuZCgpOworCX0gZWxzZQorCQl0YWdnZXIgPSBOVUxMOworCisJLyogdGFnIHBheWxvYWQvbWVzc2FnZSAqLworCXBhcnNlX2RhdGEoJm1zZywgMCwgTlVMTCk7CisKKwkvKiBidWlsZCB0aGUgdGFnIG9iamVjdCAqLworCXN0cmJ1Zl9yZXNldCgmbmV3X2RhdGEpOworCisJc3RyYnVmX2FkZGYoJm5ld19kYXRhLAorCQkgICAgIm9iamVjdCAlc1xuIgorCQkgICAgInR5cGUgJXNcbiIKKwkJICAgICJ0YWcgJXNcbiIsCisJCSAgICBvaWRfdG9faGV4KCZvaWQpLCB0eXBlX25hbWUodHlwZSksIHQtPm5hbWUpOworCWlmICh0YWdnZXIpCisJCXN0cmJ1Zl9hZGRmKCZuZXdfZGF0YSwKKwkJCSAgICAidGFnZ2VyICVzXG4iLCB0YWdnZXIpOworCXN0cmJ1Zl9hZGRjaCgmbmV3X2RhdGEsICdcbicpOworCXN0cmJ1Zl9hZGRidWYoJm5ld19kYXRhLCAmbXNnKTsKKwlmcmVlKHRhZ2dlcik7CisKKwlpZiAoc3RvcmVfb2JqZWN0KE9CSl9UQUcsICZuZXdfZGF0YSwgTlVMTCwgJnQtPm9pZCwgbmV4dF9tYXJrKSkKKwkJdC0+cGFja19pZCA9IE1BWF9QQUNLX0lEOworCWVsc2UKKwkJdC0+cGFja19pZCA9IHBhY2tfaWQ7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3Jlc2V0X2JyYW5jaChjb25zdCBjaGFyICphcmcpCit7CisJc3RydWN0IGJyYW5jaCAqYjsKKwljb25zdCBjaGFyICp0YWdfbmFtZTsKKworCWIgPSBsb29rdXBfYnJhbmNoKGFyZyk7CisJaWYgKGIpIHsKKwkJb2lkY2xyKCZiLT5vaWQpOworCQlvaWRjbHIoJmItPmJyYW5jaF90cmVlLnZlcnNpb25zWzBdLm9pZCk7CisJCW9pZGNscigmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0ub2lkKTsKKwkJaWYgKGItPmJyYW5jaF90cmVlLnRyZWUpIHsKKwkJCXJlbGVhc2VfdHJlZV9jb250ZW50X3JlY3Vyc2l2ZShiLT5icmFuY2hfdHJlZS50cmVlKTsKKwkJCWItPmJyYW5jaF90cmVlLnRyZWUgPSBOVUxMOworCQl9CisJfQorCWVsc2UKKwkJYiA9IG5ld19icmFuY2goYXJnKTsKKwlyZWFkX25leHRfY29tbWFuZCgpOworCXBhcnNlX2Zyb20oYik7CisJaWYgKGItPmRlbGV0ZSAmJiBza2lwX3ByZWZpeChiLT5uYW1lLCAicmVmcy90YWdzLyIsICZ0YWdfbmFtZSkpIHsKKwkJLyoKKwkJICogRWxzZXdoZXJlLCB3ZSBjYWxsIGR1bXBfYnJhbmNoZXMoKSBiZWZvcmUgZHVtcF90YWdzKCksCisJCSAqIGFuZCBkdW1wX2JyYW5jaGVzKCkgd2lsbCBoYW5kbGUgcmVmIGRlbGV0aW9ucyBmaXJzdCwgc28KKwkJICogaW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRoZSBkZWxldGlvbiBhY3R1YWxseSB0YWtlcyBlZmZlY3QsCisJCSAqIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSB0YWcgZnJvbSBvdXIgbGlzdCBvZiB0YWdzIHRvIHVwZGF0ZS4KKwkJICoKKwkJICogTkVFRFNXT1JLOiByZXBsYWNlIGxpc3Qgb2YgdGFncyB3aXRoIGhhc2htYXAgZm9yIGZhc3RlcgorCQkgKiBkZWxldGlvbj8KKwkJICovCisJCXN0cnVjdCB0YWcgKnQsICpwcmV2ID0gTlVMTDsKKwkJZm9yICh0ID0gZmlyc3RfdGFnOyB0OyB0ID0gdC0+bmV4dF90YWcpIHsKKwkJCWlmICghc3RyY21wKHQtPm5hbWUsIHRhZ19uYW1lKSkKKwkJCQlicmVhazsKKwkJCXByZXYgPSB0OworCQl9CisJCWlmICh0KSB7CisJCQlpZiAocHJldikKKwkJCQlwcmV2LT5uZXh0X3RhZyA9IHQtPm5leHRfdGFnOworCQkJZWxzZQorCQkJCWZpcnN0X3RhZyA9IHQtPm5leHRfdGFnOworCQkJaWYgKCF0LT5uZXh0X3RhZykKKwkJCQlsYXN0X3RhZyA9IHByZXY7CisJCQkvKiBUaGVyZSBpcyBubyBtZW1fcG9vbF9mcmVlKHQpIGZ1bmN0aW9uIHRvIGNhbGwuICovCisJCX0KKwl9CisJaWYgKGNvbW1hbmRfYnVmLmxlbiA+IDApCisJCXVucmVhZF9jb21tYW5kX2J1ZiA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGNhdF9ibG9iX3dyaXRlKGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWlmICh3cml0ZV9pbl9mdWxsKGNhdF9ibG9iX2ZkLCBidWYsIHNpemUpIDwgMCkKKwkJZGllX2Vycm5vKCJXcml0ZSB0byBmcm9udGVuZCBmYWlsZWQiKTsKK30KKworc3RhdGljIHZvaWQgY2F0X2Jsb2Ioc3RydWN0IG9iamVjdF9lbnRyeSAqb2UsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gMDsKKwljaGFyICpidWY7CisKKwlpZiAoIW9lIHx8IG9lLT5wYWNrX2lkID09IE1BWF9QQUNLX0lEKSB7CisJCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCX0gZWxzZSB7CisJCXR5cGUgPSBvZS0+dHlwZTsKKwkJYnVmID0gZ2ZpX3VucGFja19lbnRyeShvZSwgJnNpemUpOworCX0KKworCS8qCisJICogT3V0cHV0IGJhc2VkIG9uIGJhdGNoX29uZV9vYmplY3QoKSBmcm9tIGNhdC1maWxlLmMuCisJICovCisJaWYgKHR5cGUgPD0gMCkgeworCQlzdHJidWZfcmVzZXQoJmxpbmUpOworCQlzdHJidWZfYWRkZigmbGluZSwgIiVzIG1pc3NpbmdcbiIsIG9pZF90b19oZXgob2lkKSk7CisJCWNhdF9ibG9iX3dyaXRlKGxpbmUuYnVmLCBsaW5lLmxlbik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwkJZnJlZShidWYpOworCQlyZXR1cm47CisJfQorCWlmICghYnVmKQorCQlkaWUoIkNhbid0IHJlYWQgb2JqZWN0ICVzIiwgb2lkX3RvX2hleChvaWQpKTsKKwlpZiAodHlwZSAhPSBPQkpfQkxPQikKKwkJZGllKCJPYmplY3QgJXMgaXMgYSAlcyBidXQgYSBibG9iIHdhcyBleHBlY3RlZC4iLAorCQkgICAgb2lkX3RvX2hleChvaWQpLCB0eXBlX25hbWUodHlwZSkpOworCXN0cmJ1Zl9yZXNldCgmbGluZSk7CisJc3RyYnVmX2FkZGYoJmxpbmUsICIlcyAlcyAlIlBSSXVNQVgiXG4iLCBvaWRfdG9faGV4KG9pZCksCisJCSAgICB0eXBlX25hbWUodHlwZSksICh1aW50bWF4X3Qpc2l6ZSk7CisJY2F0X2Jsb2Jfd3JpdGUobGluZS5idWYsIGxpbmUubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJY2F0X2Jsb2Jfd3JpdGUoYnVmLCBzaXplKTsKKwljYXRfYmxvYl93cml0ZSgiXG4iLCAxKTsKKwlpZiAob2UgJiYgb2UtPnBhY2tfaWQgPT0gcGFja19pZCkgeworCQlsYXN0X2Jsb2Iub2Zmc2V0ID0gb2UtPmlkeC5vZmZzZXQ7CisJCXN0cmJ1Zl9hdHRhY2goJmxhc3RfYmxvYi5kYXRhLCBidWYsIHNpemUsIHNpemUpOworCQlsYXN0X2Jsb2IuZGVwdGggPSBvZS0+ZGVwdGg7CisJfSBlbHNlCisJCWZyZWUoYnVmKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZ2V0X21hcmsoY29uc3QgY2hhciAqcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZTsKKwljaGFyIG91dHB1dFtHSVRfTUFYX0hFWFNaICsgMl07CisKKwkvKiBnZXQtbWFyayBTUCA8b2JqZWN0PiBMRiAqLworCWlmICgqcCAhPSAnOicpCisJCWRpZSgiTm90IGEgbWFyazogJXMiLCBwKTsKKworCW9lID0gZmluZF9tYXJrKG1hcmtzLCBwYXJzZV9tYXJrX3JlZl9lb2wocCkpOworCWlmICghb2UpCisJCWRpZSgiVW5rbm93biBtYXJrOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisKKwl4c25wcmludGYob3V0cHV0LCBzaXplb2Yob3V0cHV0KSwgIiVzXG4iLCBvaWRfdG9faGV4KCZvZS0+aWR4Lm9pZCkpOworCWNhdF9ibG9iX3dyaXRlKG91dHB1dCwgdGhlX2hhc2hfYWxnby0+aGV4c3ogKyAxKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfY2F0X2Jsb2IoY29uc3QgY2hhciAqcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCS8qIGNhdC1ibG9iIFNQIDxvYmplY3Q+IExGICovCisJaWYgKCpwID09ICc6JykgeworCQlvZSA9IGZpbmRfbWFyayhtYXJrcywgcGFyc2VfbWFya19yZWZfZW9sKHApKTsKKwkJaWYgKCFvZSkKKwkJCWRpZSgiVW5rbm93biBtYXJrOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCW9pZGNweSgmb2lkLCAmb2UtPmlkeC5vaWQpOworCX0gZWxzZSB7CisJCWlmIChwYXJzZV9tYXBwZWRfb2lkX2hleChwLCAmb2lkLCAmcCkpCisJCQlkaWUoIkludmFsaWQgZGF0YXJlZjogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlpZiAoKnApCisJCQlkaWUoIkdhcmJhZ2UgYWZ0ZXIgU0hBMTogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlvZSA9IGZpbmRfb2JqZWN0KCZvaWQpOworCX0KKworCWNhdF9ibG9iKG9lLCAmb2lkKTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKmRlcmVmZXJlbmNlKHN0cnVjdCBvYmplY3RfZW50cnkgKm9lLAorCQkJCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWNoYXIgKmJ1ZiA9IE5VTEw7CisJY29uc3QgdW5zaWduZWQgaGV4c3ogPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKworCWlmICghb2UpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBvaWQsCisJCQkJCQkJTlVMTCk7CisJCWlmICh0eXBlIDwgMCkKKwkJCWRpZSgib2JqZWN0IG5vdCBmb3VuZDogJXMiLCBvaWRfdG9faGV4KG9pZCkpOworCQkvKiBjYWNoZSBpdCEgKi8KKwkJb2UgPSBpbnNlcnRfb2JqZWN0KG9pZCk7CisJCW9lLT50eXBlID0gdHlwZTsKKwkJb2UtPnBhY2tfaWQgPSBNQVhfUEFDS19JRDsKKwkJb2UtPmlkeC5vZmZzZXQgPSAxOworCX0KKwlzd2l0Y2ggKG9lLT50eXBlKSB7CisJY2FzZSBPQkpfVFJFRToJLyogZWFzeSBjYXNlLiAqLworCQlyZXR1cm4gb2U7CisJY2FzZSBPQkpfQ09NTUlUOgorCWNhc2UgT0JKX1RBRzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJOb3QgYSB0cmVlLWlzaDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCX0KKworCWlmIChvZS0+cGFja19pZCAhPSBNQVhfUEFDS19JRCkgewkvKiBpbiBhIHBhY2sgYmVpbmcgd3JpdHRlbiAqLworCQlidWYgPSBnZmlfdW5wYWNrX2VudHJ5KG9lLCAmc2l6ZSk7CisJfSBlbHNlIHsKKwkJZW51bSBvYmplY3RfdHlwZSB1bnVzZWQ7CisJCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdW51c2VkLCAmc2l6ZSk7CisJfQorCWlmICghYnVmKQorCQlkaWUoIkNhbid0IGxvYWQgb2JqZWN0ICVzIiwgb2lkX3RvX2hleChvaWQpKTsKKworCS8qIFBlZWwgb25lIGxheWVyLiAqLworCXN3aXRjaCAob2UtPnR5cGUpIHsKKwljYXNlIE9CSl9UQUc6CisJCWlmIChzaXplIDwgaGV4c3ogKyBzdHJsZW4oIm9iamVjdCAiKSB8fAorCQkgICAgZ2V0X29pZF9oZXgoYnVmICsgc3RybGVuKCJvYmplY3QgIiksIG9pZCkpCisJCQlkaWUoIkludmFsaWQgU0hBMSBpbiB0YWc6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBPQkpfQ09NTUlUOgorCQlpZiAoc2l6ZSA8IGhleHN6ICsgc3RybGVuKCJ0cmVlICIpIHx8CisJCSAgICBnZXRfb2lkX2hleChidWYgKyBzdHJsZW4oInRyZWUgIiksIG9pZCkpCisJCQlkaWUoIkludmFsaWQgU0hBMSBpbiBjb21taXQ6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwl9CisKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIGZpbmRfb2JqZWN0KG9pZCk7Cit9CisKK3N0YXRpYyB2b2lkIGluc2VydF9tYXBwZWRfbWFyayh1aW50bWF4X3QgbWFyaywgdm9pZCAqb2JqZWN0LCB2b2lkICpjYnApCit7CisJc3RydWN0IG9iamVjdF9pZCAqZnJvbW9pZCA9IG9iamVjdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICp0b29pZCA9IGZpbmRfbWFyayhjYnAsIG1hcmspOworCWludCByZXQ7CisJa2hpdGVyX3QgaXQ7CisKKwlpdCA9IGtoX3B1dF9vaWRfbWFwKHN1Yl9vaWRfbWFwLCAqZnJvbW9pZCwgJnJldCk7CisJLyogV2UndmUgYWxyZWFkeSBzZWVuIHRoaXMgb2JqZWN0LiAqLworCWlmIChyZXQgPT0gMCkKKwkJcmV0dXJuOworCWtoX3ZhbHVlKHN1Yl9vaWRfbWFwLCBpdCkgPSB0b29pZDsKK30KKworc3RhdGljIHZvaWQgYnVpbGRfbWFya19tYXBfb25lKHN0cnVjdCBtYXJrX3NldCAqZnJvbSwgc3RydWN0IG1hcmtfc2V0ICp0bykKK3sKKwlmb3JfZWFjaF9tYXJrKGZyb20sIDAsIGluc2VydF9tYXBwZWRfbWFyaywgdG8pOworfQorCitzdGF0aWMgdm9pZCBidWlsZF9tYXJrX21hcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmZyb20sIHN0cnVjdCBzdHJpbmdfbGlzdCAqdG8pCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmZyb21wLCAqdG9wOworCisJc3ViX29pZF9tYXAgPSBraF9pbml0X29pZF9tYXAoKTsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oZnJvbXAsIGZyb20pIHsKKwkJdG9wID0gc3RyaW5nX2xpc3RfbG9va3VwKHRvLCBmcm9tcC0+c3RyaW5nKTsKKwkJaWYgKCFmcm9tcC0+dXRpbCkgeworCQkJZGllKF8oIk1pc3NpbmcgZnJvbSBtYXJrcyBmb3Igc3VibW9kdWxlICclcyciKSwgZnJvbXAtPnN0cmluZyk7CisJCX0gZWxzZSBpZiAoIXRvcCB8fCAhdG9wLT51dGlsKSB7CisJCQlkaWUoXygiTWlzc2luZyB0byBtYXJrcyBmb3Igc3VibW9kdWxlICclcyciKSwgZnJvbXAtPnN0cmluZyk7CisJCX0KKwkJYnVpbGRfbWFya19tYXBfb25lKGZyb21wLT51dGlsLCB0b3AtPnV0aWwpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKnBhcnNlX3RyZWVpc2hfZGF0YXJlZihjb25zdCBjaGFyICoqcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplOworCisJaWYgKCoqcCA9PSAnOicpIHsJLyogPG1hcms+ICovCisJCWUgPSBmaW5kX21hcmsobWFya3MsIHBhcnNlX21hcmtfcmVmX3NwYWNlKHApKTsKKwkJaWYgKCFlKQorCQkJZGllKCJVbmtub3duIG1hcms6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJb2lkY3B5KCZvaWQsICZlLT5pZHgub2lkKTsKKwl9IGVsc2UgewkvKiA8c2hhMT4gKi8KKwkJaWYgKHBhcnNlX21hcHBlZF9vaWRfaGV4KCpwLCAmb2lkLCBwKSkKKwkJCWRpZSgiSW52YWxpZCBkYXRhcmVmOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCWUgPSBmaW5kX29iamVjdCgmb2lkKTsKKwkJaWYgKCooKnApKysgIT0gJyAnKQorCQkJZGllKCJNaXNzaW5nIHNwYWNlIGFmdGVyIHRyZWUtaXNoOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJfQorCisJd2hpbGUgKCFlIHx8IGUtPnR5cGUgIT0gT0JKX1RSRUUpCisJCWUgPSBkZXJlZmVyZW5jZShlLCAmb2lkKTsKKwlyZXR1cm4gZTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfbHMoaW50IG1vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCisJLyogU2VlIHNob3dfdHJlZSgpLiAqLworCWNvbnN0IGNoYXIgKnR5cGUgPQorCQlTX0lTR0lUTElOSyhtb2RlKSA/IGNvbW1pdF90eXBlIDoKKwkJU19JU0RJUihtb2RlKSA/IHRyZWVfdHlwZSA6CisJCWJsb2JfdHlwZTsKKworCWlmICghbW9kZSkgeworCQkvKiBtaXNzaW5nIFNQIHBhdGggTEYgKi8KKwkJc3RyYnVmX3Jlc2V0KCZsaW5lKTsKKwkJc3RyYnVmX2FkZHN0cigmbGluZSwgIm1pc3NpbmcgIik7CisJCXF1b3RlX2Nfc3R5bGUocGF0aCwgJmxpbmUsIE5VTEwsIDApOworCQlzdHJidWZfYWRkY2goJmxpbmUsICdcbicpOworCX0gZWxzZSB7CisJCS8qIG1vZGUgU1AgdHlwZSBTUCBvYmplY3RfbmFtZSBUQUIgcGF0aCBMRiAqLworCQlzdHJidWZfcmVzZXQoJmxpbmUpOworCQlzdHJidWZfYWRkZigmbGluZSwgIiUwNm8gJXMgJXNcdCIsCisJCQkJbW9kZSAmIH5OT19ERUxUQSwgdHlwZSwgaGFzaF90b19oZXgoaGFzaCkpOworCQlxdW90ZV9jX3N0eWxlKHBhdGgsICZsaW5lLCBOVUxMLCAwKTsKKwkJc3RyYnVmX2FkZGNoKCZsaW5lLCAnXG4nKTsKKwl9CisJY2F0X2Jsb2Jfd3JpdGUobGluZS5idWYsIGxpbmUubGVuKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfbHMoY29uc3QgY2hhciAqcCwgc3RydWN0IGJyYW5jaCAqYikKK3sKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCA9IE5VTEw7CisJc3RydWN0IHRyZWVfZW50cnkgbGVhZiA9IHtOVUxMfTsKKworCS8qIGxzIFNQICg8dHJlZS1pc2g+IFNQKT8gPHBhdGg+ICovCisJaWYgKCpwID09ICciJykgeworCQlpZiAoIWIpCisJCQlkaWUoIk5vdCBpbiBhIGNvbW1pdDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlyb290ID0gJmItPmJyYW5jaF90cmVlOworCX0gZWxzZSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmUgPSBwYXJzZV90cmVlaXNoX2RhdGFyZWYoJnApOworCQlyb290ID0gbmV3X3RyZWVfZW50cnkoKTsKKwkJb2lkY3B5KCZyb290LT52ZXJzaW9uc1sxXS5vaWQsICZlLT5pZHgub2lkKTsKKwkJaWYgKCFpc19udWxsX29pZCgmcm9vdC0+dmVyc2lvbnNbMV0ub2lkKSkKKwkJCXJvb3QtPnZlcnNpb25zWzFdLm1vZGUgPSBTX0lGRElSOworCQlsb2FkX3RyZWUocm9vdCk7CisJfQorCWlmICgqcCA9PSAnIicpIHsKKwkJc3RhdGljIHN0cnVjdCBzdHJidWYgdXEgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqZW5kcDsKKwkJc3RyYnVmX3Jlc2V0KCZ1cSk7CisJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnVxLCBwLCAmZW5kcCkpCisJCQlkaWUoIkludmFsaWQgcGF0aDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlpZiAoKmVuZHApCisJCQlkaWUoIkdhcmJhZ2UgYWZ0ZXIgcGF0aCBpbjogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlwID0gdXEuYnVmOworCX0KKwl0cmVlX2NvbnRlbnRfZ2V0KHJvb3QsIHAsICZsZWFmLCAxKTsKKwkvKgorCSAqIEEgZGlyZWN0b3J5IGluIHByZXBhcmF0aW9uIHdvdWxkIGhhdmUgYSBzaGExIG9mIHplcm8KKwkgKiB1bnRpbCBpdCBpcyBzYXZlZC4gIFNhdmUsIGZvciBzaW1wbGljaXR5LgorCSAqLworCWlmIChTX0lTRElSKGxlYWYudmVyc2lvbnNbMV0ubW9kZSkpCisJCXN0b3JlX3RyZWUoJmxlYWYpOworCisJcHJpbnRfbHMobGVhZi52ZXJzaW9uc1sxXS5tb2RlLCBsZWFmLnZlcnNpb25zWzFdLm9pZC5oYXNoLCBwKTsKKwlpZiAobGVhZi50cmVlKQorCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUobGVhZi50cmVlKTsKKwlpZiAoIWIgfHwgcm9vdCAhPSAmYi0+YnJhbmNoX3RyZWUpCisJCXJlbGVhc2VfdHJlZV9lbnRyeShyb290KTsKK30KKworc3RhdGljIHZvaWQgY2hlY2twb2ludCh2b2lkKQoreworCWNoZWNrcG9pbnRfcmVxdWVzdGVkID0gMDsKKwlpZiAob2JqZWN0X2NvdW50KSB7CisJCWN5Y2xlX3BhY2tmaWxlKCk7CisJfQorCWR1bXBfYnJhbmNoZXMoKTsKKwlkdW1wX3RhZ3MoKTsKKwlkdW1wX21hcmtzKCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NoZWNrcG9pbnQodm9pZCkKK3sKKwljaGVja3BvaW50X3JlcXVlc3RlZCA9IDE7CisJc2tpcF9vcHRpb25hbF9sZigpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9wcm9ncmVzcyh2b2lkKQoreworCWZ3cml0ZShjb21tYW5kX2J1Zi5idWYsIDEsIGNvbW1hbmRfYnVmLmxlbiwgc3Rkb3V0KTsKKwlmcHV0YygnXG4nLCBzdGRvdXQpOworCWZmbHVzaChzdGRvdXQpOworCXNraXBfb3B0aW9uYWxfbGYoKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfYWxpYXModm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplOworCXN0cnVjdCBicmFuY2ggYjsKKworCXNraXBfb3B0aW9uYWxfbGYoKTsKKwlyZWFkX25leHRfY29tbWFuZCgpOworCisJLyogbWFyayAuLi4gKi8KKwlwYXJzZV9tYXJrKCk7CisJaWYgKCFuZXh0X21hcmspCisJCWRpZShfKCJFeHBlY3RlZCAnbWFyaycgY29tbWFuZCwgZ290ICVzIiksIGNvbW1hbmRfYnVmLmJ1Zik7CisKKwkvKiB0byAuLi4gKi8KKwltZW1zZXQoJmIsIDAsIHNpemVvZihiKSk7CisJaWYgKCFwYXJzZV9vYmplY3Rpc2hfd2l0aF9wcmVmaXgoJmIsICJ0byAiKSkKKwkJZGllKF8oIkV4cGVjdGVkICd0bycgY29tbWFuZCwgZ290ICVzIiksIGNvbW1hbmRfYnVmLmJ1Zik7CisJZSA9IGZpbmRfb2JqZWN0KCZiLm9pZCk7CisJYXNzZXJ0KGUpOworCWluc2VydF9tYXJrKG1hcmtzLCBuZXh0X21hcmssIGUpOworfQorCitzdGF0aWMgY2hhciogbWFrZV9mYXN0X2ltcG9ydF9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKCFyZWxhdGl2ZV9tYXJrc19wYXRocyB8fCBpc19hYnNvbHV0ZV9wYXRoKHBhdGgpKQorCQlyZXR1cm4geHN0cmR1cChwYXRoKTsKKwlyZXR1cm4gZ2l0X3BhdGhkdXAoImluZm8vZmFzdC1pbXBvcnQvJXMiLCBwYXRoKTsKK30KKworc3RhdGljIHZvaWQgb3B0aW9uX2ltcG9ydF9tYXJrcyhjb25zdCBjaGFyICptYXJrcywKKwkJCQkJaW50IGZyb21fc3RyZWFtLCBpbnQgaWdub3JlX21pc3NpbmcpCit7CisJaWYgKGltcG9ydF9tYXJrc19maWxlKSB7CisJCWlmIChmcm9tX3N0cmVhbSkKKwkJCWRpZSgiT25seSBvbmUgaW1wb3J0LW1hcmtzIGNvbW1hbmQgYWxsb3dlZCBwZXIgc3RyZWFtIik7CisKKwkJLyogcmVhZCBwcmV2aW91cyBtYXJrIGZpbGUgKi8KKwkJaWYoIWltcG9ydF9tYXJrc19maWxlX2Zyb21fc3RyZWFtKQorCQkJcmVhZF9tYXJrcygpOworCX0KKworCWltcG9ydF9tYXJrc19maWxlID0gbWFrZV9mYXN0X2ltcG9ydF9wYXRoKG1hcmtzKTsKKwlpbXBvcnRfbWFya3NfZmlsZV9mcm9tX3N0cmVhbSA9IGZyb21fc3RyZWFtOworCWltcG9ydF9tYXJrc19maWxlX2lnbm9yZV9taXNzaW5nID0gaWdub3JlX21pc3Npbmc7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9kYXRlX2Zvcm1hdChjb25zdCBjaGFyICpmbXQpCit7CisJaWYgKCFzdHJjbXAoZm10LCAicmF3IikpCisJCXdoZW5zcGVjID0gV0hFTlNQRUNfUkFXOworCWVsc2UgaWYgKCFzdHJjbXAoZm10LCAicmZjMjgyMiIpKQorCQl3aGVuc3BlYyA9IFdIRU5TUEVDX1JGQzI4MjI7CisJZWxzZSBpZiAoIXN0cmNtcChmbXQsICJub3ciKSkKKwkJd2hlbnNwZWMgPSBXSEVOU1BFQ19OT1c7CisJZWxzZQorCQlkaWUoInVua25vd24gLS1kYXRlLWZvcm1hdCBhcmd1bWVudCAlcyIsIGZtdCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVsb25nX2FyZyhjb25zdCBjaGFyICpvcHRpb24sIGNvbnN0IGNoYXIgKmFyZykKK3sKKwljaGFyICplbmRwdHI7CisJdW5zaWduZWQgbG9uZyBydiA9IHN0cnRvdWwoYXJnLCAmZW5kcHRyLCAwKTsKKwlpZiAoc3RyY2hyKGFyZywgJy0nKSB8fCBlbmRwdHIgPT0gYXJnIHx8ICplbmRwdHIpCisJCWRpZSgiJXM6IGFyZ3VtZW50IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciIsIG9wdGlvbik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgdm9pZCBvcHRpb25fZGVwdGgoY29uc3QgY2hhciAqZGVwdGgpCit7CisJbWF4X2RlcHRoID0gdWxvbmdfYXJnKCItLWRlcHRoIiwgZGVwdGgpOworCWlmIChtYXhfZGVwdGggPiBNQVhfREVQVEgpCisJCWRpZSgiLS1kZXB0aCBjYW5ub3QgZXhjZWVkICV1IiwgTUFYX0RFUFRIKTsKK30KKworc3RhdGljIHZvaWQgb3B0aW9uX2FjdGl2ZV9icmFuY2hlcyhjb25zdCBjaGFyICpicmFuY2hlcykKK3sKKwltYXhfYWN0aXZlX2JyYW5jaGVzID0gdWxvbmdfYXJnKCItLWFjdGl2ZS1icmFuY2hlcyIsIGJyYW5jaGVzKTsKK30KKworc3RhdGljIHZvaWQgb3B0aW9uX2V4cG9ydF9tYXJrcyhjb25zdCBjaGFyICptYXJrcykKK3sKKwlleHBvcnRfbWFya3NfZmlsZSA9IG1ha2VfZmFzdF9pbXBvcnRfcGF0aChtYXJrcyk7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9jYXRfYmxvYl9mZChjb25zdCBjaGFyICpmZCkKK3sKKwl1bnNpZ25lZCBsb25nIG4gPSB1bG9uZ19hcmcoIi0tY2F0LWJsb2ItZmQiLCBmZCk7CisJaWYgKG4gPiAodW5zaWduZWQgbG9uZykgSU5UX01BWCkKKwkJZGllKCItLWNhdC1ibG9iLWZkIGNhbm5vdCBleGNlZWQgJWQiLCBJTlRfTUFYKTsKKwljYXRfYmxvYl9mZCA9IChpbnQpIG47Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9leHBvcnRfcGFja19lZGdlcyhjb25zdCBjaGFyICplZGdlcykKK3sKKwlpZiAocGFja19lZGdlcykKKwkJZmNsb3NlKHBhY2tfZWRnZXMpOworCXBhY2tfZWRnZXMgPSB4Zm9wZW4oZWRnZXMsICJhIik7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9yZXdyaXRlX3N1Ym1vZHVsZXMoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCit7CisJc3RydWN0IG1hcmtfc2V0ICptczsKKwlGSUxFICpmcDsKKwljaGFyICpzID0geHN0cmR1cChhcmcpOworCWNoYXIgKmYgPSBzdHJjaHIocywgJzonKTsKKwlpZiAoIWYpCisJCWRpZShfKCJFeHBlY3RlZCBmb3JtYXQgbmFtZTpmaWxlbmFtZSBmb3Igc3VibW9kdWxlIHJld3JpdGUgb3B0aW9uIikpOworCSpmID0gJ1wwJzsKKwlmKys7CisJbXMgPSB4Y2FsbG9jKDEsIHNpemVvZigqbXMpKTsKKwlzdHJpbmdfbGlzdF9pbnNlcnQobGlzdCwgcyktPnV0aWwgPSBtczsKKworCWZwID0gZm9wZW4oZiwgInIiKTsKKwlpZiAoIWZwKQorCQlkaWVfZXJybm8oImNhbm5vdCByZWFkICclcyciLCBmKTsKKwlyZWFkX21hcmtfZmlsZShtcywgZnAsIGluc2VydF9vaWRfZW50cnkpOworCWZjbG9zZShmcCk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfb25lX29wdGlvbihjb25zdCBjaGFyICpvcHRpb24pCit7CisJaWYgKHNraXBfcHJlZml4KG9wdGlvbiwgIm1heC1wYWNrLXNpemU9IiwgJm9wdGlvbikpIHsKKwkJdW5zaWduZWQgbG9uZyB2OworCQlpZiAoIWdpdF9wYXJzZV91bG9uZyhvcHRpb24sICZ2KSkKKwkJCXJldHVybiAwOworCQlpZiAodiA8IDgxOTIpIHsKKwkJCXdhcm5pbmcoIm1heC1wYWNrLXNpemUgaXMgbm93IGluIGJ5dGVzLCBhc3N1bWluZyAtLW1heC1wYWNrLXNpemU9JWx1bSIsIHYpOworCQkJdiAqPSAxMDI0ICogMTAyNDsKKwkJfSBlbHNlIGlmICh2IDwgMTAyNCAqIDEwMjQpIHsKKwkJCXdhcm5pbmcoIm1pbmltdW0gbWF4LXBhY2stc2l6ZSBpcyAxIE1pQiIpOworCQkJdiA9IDEwMjQgKiAxMDI0OworCQl9CisJCW1heF9wYWNrc2l6ZSA9IHY7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChvcHRpb24sICJiaWctZmlsZS10aHJlc2hvbGQ9IiwgJm9wdGlvbikpIHsKKwkJdW5zaWduZWQgbG9uZyB2OworCQlpZiAoIWdpdF9wYXJzZV91bG9uZyhvcHRpb24sICZ2KSkKKwkJCXJldHVybiAwOworCQliaWdfZmlsZV90aHJlc2hvbGQgPSB2OworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgob3B0aW9uLCAiZGVwdGg9IiwgJm9wdGlvbikpIHsKKwkJb3B0aW9uX2RlcHRoKG9wdGlvbik7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChvcHRpb24sICJhY3RpdmUtYnJhbmNoZXM9IiwgJm9wdGlvbikpIHsKKwkJb3B0aW9uX2FjdGl2ZV9icmFuY2hlcyhvcHRpb24pOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgob3B0aW9uLCAiZXhwb3J0LXBhY2stZWRnZXM9IiwgJm9wdGlvbikpIHsKKwkJb3B0aW9uX2V4cG9ydF9wYWNrX2VkZ2VzKG9wdGlvbik7CisJfSBlbHNlIGlmICghc3RyY21wKG9wdGlvbiwgInF1aWV0IikpIHsKKwkJc2hvd19zdGF0cyA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKG9wdGlvbiwgInN0YXRzIikpIHsKKwkJc2hvd19zdGF0cyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKG9wdGlvbiwgImFsbG93LXVuc2FmZS1mZWF0dXJlcyIpKSB7CisJCTsgLyogYWxyZWFkeSBoYW5kbGVkIGR1cmluZyBlYXJseSBvcHRpb24gcGFyc2luZyAqLworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBjaGVja191bnNhZmVfZmVhdHVyZShjb25zdCBjaGFyICpmZWF0dXJlLCBpbnQgZnJvbV9zdHJlYW0pCit7CisJaWYgKGZyb21fc3RyZWFtICYmICFhbGxvd191bnNhZmVfZmVhdHVyZXMpCisJCWRpZShfKCJmZWF0dXJlICclcycgZm9yYmlkZGVuIGluIGlucHV0IHdpdGhvdXQgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMiKSwKKwkJICAgIGZlYXR1cmUpOworfQorCitzdGF0aWMgaW50IHBhcnNlX29uZV9mZWF0dXJlKGNvbnN0IGNoYXIgKmZlYXR1cmUsIGludCBmcm9tX3N0cmVhbSkKK3sKKwljb25zdCBjaGFyICphcmc7CisKKwlpZiAoc2tpcF9wcmVmaXgoZmVhdHVyZSwgImRhdGUtZm9ybWF0PSIsICZhcmcpKSB7CisJCW9wdGlvbl9kYXRlX2Zvcm1hdChhcmcpOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoZmVhdHVyZSwgImltcG9ydC1tYXJrcz0iLCAmYXJnKSkgeworCQljaGVja191bnNhZmVfZmVhdHVyZSgiaW1wb3J0LW1hcmtzIiwgZnJvbV9zdHJlYW0pOworCQlvcHRpb25faW1wb3J0X21hcmtzKGFyZywgZnJvbV9zdHJlYW0sIDApOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoZmVhdHVyZSwgImltcG9ydC1tYXJrcy1pZi1leGlzdHM9IiwgJmFyZykpIHsKKwkJY2hlY2tfdW5zYWZlX2ZlYXR1cmUoImltcG9ydC1tYXJrcy1pZi1leGlzdHMiLCBmcm9tX3N0cmVhbSk7CisJCW9wdGlvbl9pbXBvcnRfbWFya3MoYXJnLCBmcm9tX3N0cmVhbSwgMSk7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChmZWF0dXJlLCAiZXhwb3J0LW1hcmtzPSIsICZhcmcpKSB7CisJCWNoZWNrX3Vuc2FmZV9mZWF0dXJlKGZlYXR1cmUsIGZyb21fc3RyZWFtKTsKKwkJb3B0aW9uX2V4cG9ydF9tYXJrcyhhcmcpOworCX0gZWxzZSBpZiAoIXN0cmNtcChmZWF0dXJlLCAiYWxpYXMiKSkgeworCQk7IC8qIERvbid0IGRpZSAtIHRoaXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGZlYXR1cmUsICJyZXdyaXRlLXN1Ym1vZHVsZXMtdG89IiwgJmFyZykpIHsKKwkJb3B0aW9uX3Jld3JpdGVfc3VibW9kdWxlcyhhcmcsICZzdWJfbWFya3NfdG8pOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoZmVhdHVyZSwgInJld3JpdGUtc3VibW9kdWxlcy1mcm9tPSIsICZhcmcpKSB7CisJCW9wdGlvbl9yZXdyaXRlX3N1Ym1vZHVsZXMoYXJnLCAmc3ViX21hcmtzX2Zyb20pOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoZmVhdHVyZSwgInJld3JpdGUtc3VibW9kdWxlcy1mcm9tPSIsICZhcmcpKSB7CisJfSBlbHNlIGlmICghc3RyY21wKGZlYXR1cmUsICJnZXQtbWFyayIpKSB7CisJCTsgLyogRG9uJ3QgZGllIC0gdGhpcyBmZWF0dXJlIGlzIHN1cHBvcnRlZCAqLworCX0gZWxzZSBpZiAoIXN0cmNtcChmZWF0dXJlLCAiY2F0LWJsb2IiKSkgeworCQk7IC8qIERvbid0IGRpZSAtIHRoaXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKwl9IGVsc2UgaWYgKCFzdHJjbXAoZmVhdHVyZSwgInJlbGF0aXZlLW1hcmtzIikpIHsKKwkJcmVsYXRpdmVfbWFya3NfcGF0aHMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChmZWF0dXJlLCAibm8tcmVsYXRpdmUtbWFya3MiKSkgeworCQlyZWxhdGl2ZV9tYXJrc19wYXRocyA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKGZlYXR1cmUsICJkb25lIikpIHsKKwkJcmVxdWlyZV9leHBsaWNpdF90ZXJtaW5hdGlvbiA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGZlYXR1cmUsICJmb3JjZSIpKSB7CisJCWZvcmNlX3VwZGF0ZSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGZlYXR1cmUsICJub3RlcyIpIHx8ICFzdHJjbXAoZmVhdHVyZSwgImxzIikpIHsKKwkJOyAvKiBkbyBub3RoaW5nOyB3ZSBoYXZlIHRoZSBmZWF0dXJlICovCisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2ZlYXR1cmUoY29uc3QgY2hhciAqZmVhdHVyZSkKK3sKKwlpZiAoc2Vlbl9kYXRhX2NvbW1hbmQpCisJCWRpZSgiR290IGZlYXR1cmUgY29tbWFuZCAnJXMnIGFmdGVyIGRhdGEgY29tbWFuZCIsIGZlYXR1cmUpOworCisJaWYgKHBhcnNlX29uZV9mZWF0dXJlKGZlYXR1cmUsIDEpKQorCQlyZXR1cm47CisKKwlkaWUoIlRoaXMgdmVyc2lvbiBvZiBmYXN0LWltcG9ydCBkb2VzIG5vdCBzdXBwb3J0IGZlYXR1cmUgJXMuIiwgZmVhdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX29wdGlvbihjb25zdCBjaGFyICpvcHRpb24pCit7CisJaWYgKHNlZW5fZGF0YV9jb21tYW5kKQorCQlkaWUoIkdvdCBvcHRpb24gY29tbWFuZCAnJXMnIGFmdGVyIGRhdGEgY29tbWFuZCIsIG9wdGlvbik7CisKKwlpZiAocGFyc2Vfb25lX29wdGlvbihvcHRpb24pKQorCQlyZXR1cm47CisKKwlkaWUoIlRoaXMgdmVyc2lvbiBvZiBmYXN0LWltcG9ydCBkb2VzIG5vdCBzdXBwb3J0IG9wdGlvbjogJXMiLCBvcHRpb24pOworfQorCitzdGF0aWMgdm9pZCBnaXRfcGFja19jb25maWcodm9pZCkKK3sKKwlpbnQgaW5kZXh2ZXJzaW9uX3ZhbHVlOworCWludCBsaW1pdDsKKwl1bnNpZ25lZCBsb25nIHBhY2tzaXplbGltaXRfdmFsdWU7CisKKwlpZiAoIWdpdF9jb25maWdfZ2V0X3Vsb25nKCJwYWNrLmRlcHRoIiwgJm1heF9kZXB0aCkpIHsKKwkJaWYgKG1heF9kZXB0aCA+IE1BWF9ERVBUSCkKKwkJCW1heF9kZXB0aCA9IE1BWF9ERVBUSDsKKwl9CisJaWYgKCFnaXRfY29uZmlnX2dldF9pbnQoInBhY2suaW5kZXh2ZXJzaW9uIiwgJmluZGV4dmVyc2lvbl92YWx1ZSkpIHsKKwkJcGFja19pZHhfb3B0cy52ZXJzaW9uID0gaW5kZXh2ZXJzaW9uX3ZhbHVlOworCQlpZiAocGFja19pZHhfb3B0cy52ZXJzaW9uID4gMikKKwkJCWdpdF9kaWVfY29uZmlnKCJwYWNrLmluZGV4dmVyc2lvbiIsCisJCQkJCSJiYWQgcGFjay5pbmRleHZlcnNpb249JSJQUkl1MzIsIHBhY2tfaWR4X29wdHMudmVyc2lvbik7CisJfQorCWlmICghZ2l0X2NvbmZpZ19nZXRfdWxvbmcoInBhY2sucGFja3NpemVsaW1pdCIsICZwYWNrc2l6ZWxpbWl0X3ZhbHVlKSkKKwkJbWF4X3BhY2tzaXplID0gcGFja3NpemVsaW1pdF92YWx1ZTsKKworCWlmICghZ2l0X2NvbmZpZ19nZXRfaW50KCJmYXN0aW1wb3J0LnVucGFja2xpbWl0IiwgJmxpbWl0KSkKKwkJdW5wYWNrX2xpbWl0ID0gbGltaXQ7CisJZWxzZSBpZiAoIWdpdF9jb25maWdfZ2V0X2ludCgidHJhbnNmZXIudW5wYWNrbGltaXQiLCAmbGltaXQpKQorCQl1bnBhY2tfbGltaXQgPSBsaW1pdDsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgZmFzdF9pbXBvcnRfdXNhZ2VbXSA9CisiZ2l0IGZhc3QtaW1wb3J0IFstLWRhdGUtZm9ybWF0PTxmPl0gWy0tbWF4LXBhY2stc2l6ZT08bj5dIFstLWJpZy1maWxlLXRocmVzaG9sZD08bj5dIFstLWRlcHRoPTxuPl0gWy0tYWN0aXZlLWJyYW5jaGVzPTxuPl0gWy0tZXhwb3J0LW1hcmtzPTxtYXJrcy5maWxlPl0iOworCitzdGF0aWMgdm9pZCBwYXJzZV9hcmd2KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgZ2xvYmFsX2FyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphID0gZ2xvYmFsX2FyZ3ZbaV07CisKKwkJaWYgKCphICE9ICctJyB8fCAhc3RyY21wKGEsICItLSIpKQorCQkJYnJlYWs7CisKKwkJaWYgKCFza2lwX3ByZWZpeChhLCAiLS0iLCAmYSkpCisJCQlkaWUoInVua25vd24gb3B0aW9uICVzIiwgYSk7CisKKwkJaWYgKHBhcnNlX29uZV9vcHRpb24oYSkpCisJCQljb250aW51ZTsKKworCQlpZiAocGFyc2Vfb25lX2ZlYXR1cmUoYSwgMCkpCisJCQljb250aW51ZTsKKworCQlpZiAoc2tpcF9wcmVmaXgoYSwgImNhdC1ibG9iLWZkPSIsICZhKSkgeworCQkJb3B0aW9uX2NhdF9ibG9iX2ZkKGEpOworCQkJY29udGludWU7CisJCX0KKworCQlkaWUoInVua25vd24gb3B0aW9uIC0tJXMiLCBhKTsKKwl9CisJaWYgKGkgIT0gZ2xvYmFsX2FyZ2MpCisJCXVzYWdlKGZhc3RfaW1wb3J0X3VzYWdlKTsKKworCXNlZW5fZGF0YV9jb21tYW5kID0gMTsKKwlpZiAoaW1wb3J0X21hcmtzX2ZpbGUpCisJCXJlYWRfbWFya3MoKTsKKwlidWlsZF9tYXJrX21hcCgmc3ViX21hcmtzX2Zyb20sICZzdWJfbWFya3NfdG8pOworfQorCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGludCBpOworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZShmYXN0X2ltcG9ydF91c2FnZSk7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJcmVzZXRfcGFja19pZHhfb3B0aW9uKCZwYWNrX2lkeF9vcHRzKTsKKwlnaXRfcGFja19jb25maWcoKTsKKworCWFsbG9jX29iamVjdHMob2JqZWN0X2VudHJ5X2FsbG9jKTsKKwlzdHJidWZfaW5pdCgmY29tbWFuZF9idWYsIDApOworCWF0b21fdGFibGUgPSB4Y2FsbG9jKGF0b21fdGFibGVfc3osIHNpemVvZihzdHJ1Y3QgYXRvbV9zdHIqKSk7CisJYnJhbmNoX3RhYmxlID0geGNhbGxvYyhicmFuY2hfdGFibGVfc3osIHNpemVvZihzdHJ1Y3QgYnJhbmNoKikpOworCWF2YWlsX3RyZWVfdGFibGUgPSB4Y2FsbG9jKGF2YWlsX3RyZWVfdGFibGVfc3osIHNpemVvZihzdHJ1Y3QgYXZhaWxfdHJlZV9jb250ZW50KikpOworCW1hcmtzID0gbWVtX3Bvb2xfY2FsbG9jKCZmaV9tZW1fcG9vbCwgMSwgc2l6ZW9mKHN0cnVjdCBtYXJrX3NldCkpOworCisJaGFzaG1hcF9pbml0KCZvYmplY3RfdGFibGUsIG9iamVjdF9lbnRyeV9oYXNoY21wLCBOVUxMLCAwKTsKKworCS8qCisJICogV2UgZG9uJ3QgcGFyc2UgbW9zdCBvcHRpb25zIHVudGlsIGFmdGVyIHdlJ3ZlIHNlZW4gdGhlIHNldCBvZgorCSAqICJmZWF0dXJlIiBsaW5lcyBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmVhbSAod2hpY2ggYWxsb3dzIHRoZSBjb21tYW5kCisJICogbGluZSB0byBvdmVycmlkZSBzdHJlYW0gZGF0YSkuIEJ1dCB3ZSBtdXN0IGRvIGFuIGVhcmx5IHBhcnNlIG9mIGFueQorCSAqIGNvbW1hbmQtbGluZSBvcHRpb25zIHRoYXQgaW1wYWN0IGhvdyB3ZSBpbnRlcnByZXQgdGhlIGZlYXR1cmUgbGluZXMuCisJICovCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQlpZiAoKmFyZyAhPSAnLScgfHwgIXN0cmNtcChhcmcsICItLSIpKQorCQkJYnJlYWs7CisJCWlmICghc3RyY21wKGFyZywgIi0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIikpCisJCQlhbGxvd191bnNhZmVfZmVhdHVyZXMgPSAxOworCX0KKworCWdsb2JhbF9hcmdjID0gYXJnYzsKKwlnbG9iYWxfYXJndiA9IGFyZ3Y7CisKKwlyY19mcmVlID0gbWVtX3Bvb2xfYWxsb2MoJmZpX21lbV9wb29sLCBjbWRfc2F2ZSAqIHNpemVvZigqcmNfZnJlZSkpOworCWZvciAoaSA9IDA7IGkgPCAoY21kX3NhdmUgLSAxKTsgaSsrKQorCQlyY19mcmVlW2ldLm5leHQgPSAmcmNfZnJlZVtpICsgMV07CisJcmNfZnJlZVtjbWRfc2F2ZSAtIDFdLm5leHQgPSBOVUxMOworCisJc3RhcnRfcGFja2ZpbGUoKTsKKwlzZXRfZGllX3JvdXRpbmUoZGllX25pY2VseSk7CisJc2V0X2NoZWNrcG9pbnRfc2lnbmFsKCk7CisJd2hpbGUgKHJlYWRfbmV4dF9jb21tYW5kKCkgIT0gRU9GKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmICghc3RyY21wKCJibG9iIiwgY29tbWFuZF9idWYuYnVmKSkKKwkJCXBhcnNlX25ld19ibG9iKCk7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgImNvbW1pdCAiLCAmdikpCisJCQlwYXJzZV9uZXdfY29tbWl0KHYpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJ0YWcgIiwgJnYpKQorCQkJcGFyc2VfbmV3X3RhZyh2KTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAicmVzZXQgIiwgJnYpKQorCQkJcGFyc2VfcmVzZXRfYnJhbmNoKHYpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJscyAiLCAmdikpCisJCQlwYXJzZV9scyh2LCBOVUxMKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiY2F0LWJsb2IgIiwgJnYpKQorCQkJcGFyc2VfY2F0X2Jsb2Iodik7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgImdldC1tYXJrICIsICZ2KSkKKwkJCXBhcnNlX2dldF9tYXJrKHYpOworCQllbHNlIGlmICghc3RyY21wKCJjaGVja3BvaW50IiwgY29tbWFuZF9idWYuYnVmKSkKKwkJCXBhcnNlX2NoZWNrcG9pbnQoKTsKKwkJZWxzZSBpZiAoIXN0cmNtcCgiZG9uZSIsIGNvbW1hbmRfYnVmLmJ1ZikpCisJCQlicmVhazsKKwkJZWxzZSBpZiAoIXN0cmNtcCgiYWxpYXMiLCBjb21tYW5kX2J1Zi5idWYpKQorCQkJcGFyc2VfYWxpYXMoKTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgoY29tbWFuZF9idWYuYnVmLCAicHJvZ3Jlc3MgIikpCisJCQlwYXJzZV9wcm9ncmVzcygpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJmZWF0dXJlICIsICZ2KSkKKwkJCXBhcnNlX2ZlYXR1cmUodik7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgIm9wdGlvbiBnaXQgIiwgJnYpKQorCQkJcGFyc2Vfb3B0aW9uKHYpOworCQllbHNlIGlmIChzdGFydHNfd2l0aChjb21tYW5kX2J1Zi5idWYsICJvcHRpb24gIikpCisJCQkvKiBpZ25vcmUgbm9uLWdpdCBvcHRpb25zKi87CisJCWVsc2UKKwkJCWRpZSgiVW5zdXBwb3J0ZWQgY29tbWFuZDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCisJCWlmIChjaGVja3BvaW50X3JlcXVlc3RlZCkKKwkJCWNoZWNrcG9pbnQoKTsKKwl9CisKKwkvKiBhcmd2IGhhc24ndCBiZWVuIHBhcnNlZCB5ZXQsIGRvIHNvICovCisJaWYgKCFzZWVuX2RhdGFfY29tbWFuZCkKKwkJcGFyc2VfYXJndigpOworCisJaWYgKHJlcXVpcmVfZXhwbGljaXRfdGVybWluYXRpb24gJiYgZmVvZihzdGRpbikpCisJCWRpZSgic3RyZWFtIGVuZHMgZWFybHkiKTsKKworCWVuZF9wYWNrZmlsZSgpOworCisJZHVtcF9icmFuY2hlcygpOworCWR1bXBfdGFncygpOworCXVua2VlcF9hbGxfcGFja3MoKTsKKwlkdW1wX21hcmtzKCk7CisKKwlpZiAocGFja19lZGdlcykKKwkJZmNsb3NlKHBhY2tfZWRnZXMpOworCisJaWYgKHNob3dfc3RhdHMpIHsKKwkJdWludG1heF90IHRvdGFsX2NvdW50ID0gMCwgZHVwbGljYXRlX2NvdW50ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob2JqZWN0X2NvdW50X2J5X3R5cGUpOyBpKyspCisJCQl0b3RhbF9jb3VudCArPSBvYmplY3RfY291bnRfYnlfdHlwZVtpXTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHVwbGljYXRlX2NvdW50X2J5X3R5cGUpOyBpKyspCisJCQlkdXBsaWNhdGVfY291bnQgKz0gZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbaV07CisKKwkJZnByaW50ZihzdGRlcnIsICIlcyBzdGF0aXN0aWNzOlxuIiwgYXJndlswXSk7CisJCWZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJZnByaW50ZihzdGRlcnIsICJBbGxvYydkIG9iamVjdHM6ICUxMCIgUFJJdU1BWCAiXG4iLCBhbGxvY19jb3VudCk7CisJCWZwcmludGYoc3RkZXJyLCAiVG90YWwgb2JqZWN0czogICAlMTAiIFBSSXVNQVggIiAoJTEwIiBQUkl1TUFYICIgZHVwbGljYXRlcyAgICAgICAgICAgICAgICAgIClcbiIsIHRvdGFsX2NvdW50LCBkdXBsaWNhdGVfY291bnQpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIGJsb2JzICA6ICAgJTEwIiBQUkl1TUFYICIgKCUxMCIgUFJJdU1BWCAiIGR1cGxpY2F0ZXMgJTEwIiBQUkl1TUFYICIgZGVsdGFzIG9mICUxMCIgUFJJdU1BWCIgYXR0ZW1wdHMpXG4iLCBvYmplY3RfY291bnRfYnlfdHlwZVtPQkpfQkxPQl0sIGR1cGxpY2F0ZV9jb3VudF9ieV90eXBlW09CSl9CTE9CXSwgZGVsdGFfY291bnRfYnlfdHlwZVtPQkpfQkxPQl0sIGRlbHRhX2NvdW50X2F0dGVtcHRzX2J5X3R5cGVbT0JKX0JMT0JdKTsKKwkJZnByaW50ZihzdGRlcnIsICIgICAgICB0cmVlcyAgOiAgICUxMCIgUFJJdU1BWCAiICglMTAiIFBSSXVNQVggIiBkdXBsaWNhdGVzICUxMCIgUFJJdU1BWCAiIGRlbHRhcyBvZiAlMTAiIFBSSXVNQVgiIGF0dGVtcHRzKVxuIiwgb2JqZWN0X2NvdW50X2J5X3R5cGVbT0JKX1RSRUVdLCBkdXBsaWNhdGVfY291bnRfYnlfdHlwZVtPQkpfVFJFRV0sIGRlbHRhX2NvdW50X2J5X3R5cGVbT0JKX1RSRUVdLCBkZWx0YV9jb3VudF9hdHRlbXB0c19ieV90eXBlW09CSl9UUkVFXSk7CisJCWZwcmludGYoc3RkZXJyLCAiICAgICAgY29tbWl0czogICAlMTAiIFBSSXVNQVggIiAoJTEwIiBQUkl1TUFYICIgZHVwbGljYXRlcyAlMTAiIFBSSXVNQVggIiBkZWx0YXMgb2YgJTEwIiBQUkl1TUFYIiBhdHRlbXB0cylcbiIsIG9iamVjdF9jb3VudF9ieV90eXBlW09CSl9DT01NSVRdLCBkdXBsaWNhdGVfY291bnRfYnlfdHlwZVtPQkpfQ09NTUlUXSwgZGVsdGFfY291bnRfYnlfdHlwZVtPQkpfQ09NTUlUXSwgZGVsdGFfY291bnRfYXR0ZW1wdHNfYnlfdHlwZVtPQkpfQ09NTUlUXSk7CisJCWZwcmludGYoc3RkZXJyLCAiICAgICAgdGFncyAgIDogICAlMTAiIFBSSXVNQVggIiAoJTEwIiBQUkl1TUFYICIgZHVwbGljYXRlcyAlMTAiIFBSSXVNQVggIiBkZWx0YXMgb2YgJTEwIiBQUkl1TUFYIiBhdHRlbXB0cylcbiIsIG9iamVjdF9jb3VudF9ieV90eXBlW09CSl9UQUddLCBkdXBsaWNhdGVfY291bnRfYnlfdHlwZVtPQkpfVEFHXSwgZGVsdGFfY291bnRfYnlfdHlwZVtPQkpfVEFHXSwgZGVsdGFfY291bnRfYXR0ZW1wdHNfYnlfdHlwZVtPQkpfVEFHXSk7CisJCWZwcmludGYoc3RkZXJyLCAiVG90YWwgYnJhbmNoZXM6ICAlMTBsdSAoJTEwbHUgbG9hZHMgICAgIClcbiIsIGJyYW5jaF9jb3VudCwgYnJhbmNoX2xvYWRfY291bnQpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIG1hcmtzOiAgICAgJTEwIiBQUkl1TUFYICIgKCUxMCIgUFJJdU1BWCAiIHVuaXF1ZSAgICApXG4iLCAoKCh1aW50bWF4X3QpMSkgPDwgbWFya3MtPnNoaWZ0KSAqIDEwMjQsIG1hcmtzX3NldF9jb3VudCk7CisJCWZwcmludGYoc3RkZXJyLCAiICAgICAgYXRvbXM6ICAgICAlMTB1XG4iLCBhdG9tX2NudCk7CisJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IHRvdGFsOiAgICAlMTAiIFBSSXVNQVggIiBLaUJcbiIsICh0cmVlX2VudHJ5X2FsbG9jZCArIGZpX21lbV9wb29sLnBvb2xfYWxsb2MgKyBhbGxvY19jb3VudCpzaXplb2Yoc3RydWN0IG9iamVjdF9lbnRyeSkpLzEwMjQpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgICBwb29sczogICAgJTEwbHUgS2lCXG4iLCAodW5zaWduZWQgbG9uZykoKHRyZWVfZW50cnlfYWxsb2NkICsgZmlfbWVtX3Bvb2wucG9vbF9hbGxvYykgLzEwMjQpKTsKKwkJZnByaW50ZihzdGRlcnIsICIgICAgIG9iamVjdHM6ICAgICUxMCIgUFJJdU1BWCAiIEtpQlxuIiwgKGFsbG9jX2NvdW50KnNpemVvZihzdHJ1Y3Qgb2JqZWN0X2VudHJ5KSkvMTAyNCk7CisJCWZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJcGFja19yZXBvcnQoKTsKKwkJZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJfQorCisJcmV0dXJuIGZhaWx1cmUgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL2ZldGNoLW5lZ290aWF0b3IuYyBiL2ZldGNoLW5lZ290aWF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTEzNTdkCi0tLSAvZGV2L251bGwKKysrIGIvZmV0Y2gtbmVnb3RpYXRvci5jCkBAIC0wLDAgKzEsMjEgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJmZXRjaC1uZWdvdGlhdG9yLmgiCisjaW5jbHVkZSAibmVnb3RpYXRvci9kZWZhdWx0LmgiCisjaW5jbHVkZSAibmVnb3RpYXRvci9za2lwcGluZy5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKwordm9pZCBmZXRjaF9uZWdvdGlhdG9yX2luaXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvcikKK3sKKwlwcmVwYXJlX3JlcG9fc2V0dGluZ3Mocik7CisJc3dpdGNoKHItPnNldHRpbmdzLmZldGNoX25lZ290aWF0aW9uX2FsZ29yaXRobSkgeworCWNhc2UgRkVUQ0hfTkVHT1RJQVRJT05fU0tJUFBJTkc6CisJCXNraXBwaW5nX25lZ290aWF0b3JfaW5pdChuZWdvdGlhdG9yKTsKKwkJcmV0dXJuOworCisJY2FzZSBGRVRDSF9ORUdPVElBVElPTl9ERUZBVUxUOgorCWRlZmF1bHQ6CisJCWRlZmF1bHRfbmVnb3RpYXRvcl9pbml0KG5lZ290aWF0b3IpOworCQlyZXR1cm47CisJfQorfQpkaWZmIC0tZ2l0IGEvZmV0Y2gtbmVnb3RpYXRvci5oIGIvZmV0Y2gtbmVnb3RpYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNzg4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9mZXRjaC1uZWdvdGlhdG9yLmgKQEAgLTAsMCArMSw1OSBAQAorI2lmbmRlZiBGRVRDSF9ORUdPVElBVE9SX0gKKyNkZWZpbmUgRkVUQ0hfTkVHT1RJQVRPUl9ICisKK3N0cnVjdCBjb21taXQ7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKKworLyoKKyAqIEFuIG9iamVjdCB0aGF0IHN1cHBsaWVzIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gbmVnb3RpYXRlIHRoZSBjb250ZW50cyBvZgorICogdGhlIHRvLWJlLXNlbnQgcGFja2ZpbGUgZHVyaW5nIGEgZmV0Y2guCisgKgorICogVG8gc2V0IHVwIHRoZSBuZWdvdGlhdG9yLCBjYWxsIGZldGNoX25lZ290aWF0b3JfaW5pdCgpLCB0aGVuIGtub3duX2NvbW1vbigpCisgKiAoMCBvciBtb3JlIHRpbWVzKSwgdGhlbiBhZGRfdGlwKCkgKDAgb3IgbW9yZSB0aW1lcykuCisgKgorICogVGhlbiwgd2hlbiAiaGF2ZSIgbGluZXMgYXJlIHJlcXVpcmVkLCBjYWxsIG5leHQoKS4gQ2FsbCBhY2soKSB0byByZXBvcnQgd2hhdAorICogdGhlIHNlcnZlciB0ZWxscyB1cy4KKyAqCisgKiBPbmNlIG5lZ290aWF0aW9uIGlzIGRvbmUsIGNhbGwgcmVsZWFzZSgpLiBUaGUgbmVnb3RpYXRvciB0aGVuIGNhbm5vdCBiZSB1c2VkCisgKiAodW5sZXNzIHJlaW5pdGlhbGl6ZWQgd2l0aCBmZXRjaF9uZWdvdGlhdG9yX2luaXQoKSkuCisgKi8KK3N0cnVjdCBmZXRjaF9uZWdvdGlhdG9yIHsKKwkvKgorCSAqIEJlZm9yZSBuZWdvdGlhdGlvbiBzdGFydHMsIGluZGljYXRlIHRoYXQgdGhlIHNlcnZlciBpcyBrbm93biB0byBoYXZlCisJICogdGhpcyBjb21taXQuCisJICovCisJdm9pZCAoKmtub3duX2NvbW1vbikoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKiwgc3RydWN0IGNvbW1pdCAqKTsKKworCS8qCisJICogT25jZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQsIGtub3duX2NvbW1vbigpIGNhbm5vdCBiZSBpbnZva2VkIGFueQorCSAqIG1vcmUuCisJICoKKwkgKiBJbmRpY2F0ZSB0aGF0IHRoaXMgY29tbWl0IGFuZCBhbGwgaXRzIGFuY2VzdG9ycyBhcmUgdG8gYmUgY2hlY2tlZAorCSAqIGZvciBjb21tb25hbGl0eSB3aXRoIHRoZSBzZXJ2ZXIuCisJICovCisJdm9pZCAoKmFkZF90aXApKHN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICosIHN0cnVjdCBjb21taXQgKik7CisKKwkvKgorCSAqIE9uY2UgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLCBrbm93bl9jb21tb24oKSBhbmQgYWRkX3RpcCgpIGNhbm5vdAorCSAqIGJlIGludm9rZWQgYW55IG1vcmUuCisJICoKKwkgKiBSZXR1cm4gdGhlIG5leHQgY29tbWl0IHRoYXQgdGhlIGNsaWVudCBzaG91bGQgc2VuZCBhcyBhICJoYXZlIiBsaW5lLgorCSAqLworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKigqbmV4dCkoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKik7CisKKwkvKgorCSAqIEluZm9ybSB0aGUgbmVnb3RpYXRvciB0aGF0IHRoZSBzZXJ2ZXIgaGFzIHRoZSBnaXZlbiBjb21taXQuIFRoaXMKKwkgKiBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCBvbiBjb21taXRzIHJldHVybmVkIGJ5IG5leHQoKS4KKwkgKi8KKwlpbnQgKCphY2spKHN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICosIHN0cnVjdCBjb21taXQgKik7CisKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKik7CisKKwkvKiBpbnRlcm5hbCB1c2UgKi8KKwl2b2lkICpkYXRhOworfTsKKwordm9pZCBmZXRjaF9uZWdvdGlhdG9yX2luaXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZmV0Y2gtcGFjay5jIGIvZmV0Y2gtcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYWExOWQKLS0tIC9kZXYvbnVsbAorKysgYi9mZXRjaC1wYWNrLmMKQEAgLTAsMCArMSwxODQ5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorI2luY2x1ZGUgImZldGNoLXBhY2suaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAib2lkLWFycmF5LmgiCisjaW5jbHVkZSAib2lkc2V0LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJjb25uZWN0ZWQuaCIKKyNpbmNsdWRlICJmZXRjaC1uZWdvdGlhdG9yLmgiCisjaW5jbHVkZSAiZnNjay5oIgorI2luY2x1ZGUgInNoYWxsb3cuaCIKKworc3RhdGljIGludCB0cmFuc2Zlcl91bnBhY2tfbGltaXQgPSAtMTsKK3N0YXRpYyBpbnQgZmV0Y2hfdW5wYWNrX2xpbWl0ID0gLTE7CitzdGF0aWMgaW50IHVucGFja19saW1pdCA9IDEwMDsKK3N0YXRpYyBpbnQgcHJlZmVyX29mc19kZWx0YSA9IDE7CitzdGF0aWMgaW50IG5vX2RvbmU7CitzdGF0aWMgaW50IGRlZXBlbl9zaW5jZV9vazsKK3N0YXRpYyBpbnQgZGVlcGVuX25vdF9vazsKK3N0YXRpYyBpbnQgZmV0Y2hfZnNja19vYmplY3RzID0gLTE7CitzdGF0aWMgaW50IHRyYW5zZmVyX2ZzY2tfb2JqZWN0cyA9IC0xOworc3RhdGljIGludCBhZ2VudF9zdXBwb3J0ZWQ7CitzdGF0aWMgaW50IHNlcnZlcl9zdXBwb3J0c19maWx0ZXJpbmc7CitzdGF0aWMgc3RydWN0IHNoYWxsb3dfbG9jayBzaGFsbG93X2xvY2s7CitzdGF0aWMgY29uc3QgY2hhciAqYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZTsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGZzY2tfbXNnX3R5cGVzID0gU1RSQlVGX0lOSVQ7CisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIENPTVBMRVRFCSgxVSA8PCAwKQorI2RlZmluZSBBTFRFUk5BVEUJKDFVIDw8IDEpCisKKy8qCisgKiBBZnRlciBzZW5kaW5nIHRoaXMgbWFueSAiaGF2ZSJzIGlmIHdlIGRvIG5vdCBnZXQgYW55IG5ldyBBQ0sgLCB3ZQorICogZ2l2ZSB1cCB0cmF2ZXJzaW5nIG91ciBoaXN0b3J5LgorICovCisjZGVmaW5lIE1BWF9JTl9WQUlOIDI1NgorCitzdGF0aWMgaW50IG11bHRpX2FjaywgdXNlX3NpZGViYW5kOworLyogQWxsb3cgc3BlY2lmeWluZyBzaGExIGlmIGl0IGlzIGEgcmVmIHRpcC4gKi8KKyNkZWZpbmUgQUxMT1dfVElQX1NIQTEJMDEKKy8qIEFsbG93IHJlcXVlc3Qgb2YgYSBzaGExIGlmIGl0IGlzIHJlYWNoYWJsZSBmcm9tIGEgcmVmIChwb3NzaWJseSBoaWRkZW4gcmVmKS4gKi8KKyNkZWZpbmUgQUxMT1dfUkVBQ0hBQkxFX1NIQTEJMDIKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dfdW5hZHZlcnRpc2VkX29iamVjdF9yZXF1ZXN0OworCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQorc3RhdGljIGlubGluZSB2b2lkIHByaW50X3ZlcmJvc2UoY29uc3Qgc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywKKwkJCQkgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisKKwlpZiAoIWFyZ3MtPnZlcmJvc2UpCisJCXJldHVybjsKKworCXZhX3N0YXJ0KHBhcmFtcywgZm10KTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlmcHV0YygnXG4nLCBzdGRlcnIpOworfQorCitzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9jYWNoZSB7CisJc3RydWN0IG9iamVjdCAqKml0ZW1zOworCXNpemVfdCBuciwgYWxsb2M7Cit9OworCitzdGF0aWMgdm9pZCBjYWNoZV9vbmVfYWx0ZXJuYXRlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQl2b2lkICp2Y2FjaGUpCit7CisJc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfY2FjaGUgKmNhY2hlID0gdmNhY2hlOworCXN0cnVjdCBvYmplY3QgKm9iaiA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKworCWlmICghb2JqIHx8IChvYmotPmZsYWdzICYgQUxURVJOQVRFKSkKKwkJcmV0dXJuOworCisJb2JqLT5mbGFncyB8PSBBTFRFUk5BVEU7CisJQUxMT0NfR1JPVyhjYWNoZS0+aXRlbXMsIGNhY2hlLT5uciArIDEsIGNhY2hlLT5hbGxvYyk7CisJY2FjaGUtPml0ZW1zW2NhY2hlLT5ucisrXSA9IG9iajsKK30KKworc3RhdGljIHZvaWQgZm9yX2VhY2hfY2FjaGVkX2FsdGVybmF0ZShzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvciwKKwkJCQkgICAgICB2b2lkICgqY2IpKHN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICosCisJCQkJCQkgc3RydWN0IG9iamVjdCAqKSkKK3sKKwlzdGF0aWMgaW50IGluaXRpYWxpemVkOworCXN0YXRpYyBzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9jYWNoZSBjYWNoZTsKKwlzaXplX3QgaTsKKworCWlmICghaW5pdGlhbGl6ZWQpIHsKKwkJZm9yX2VhY2hfYWx0ZXJuYXRlX3JlZihjYWNoZV9vbmVfYWx0ZXJuYXRlLCAmY2FjaGUpOworCQlpbml0aWFsaXplZCA9IDE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNhY2hlLm5yOyBpKyspCisJCWNiKG5lZ290aWF0b3IsIGNhY2hlLml0ZW1zW2ldKTsKK30KKworc3RhdGljIGludCByZXZfbGlzdF9pbnNlcnRfcmVmKHN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICpuZWdvdGlhdG9yLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3QgKm8gPSBkZXJlZl90YWcodGhlX3JlcG9zaXRvcnksCisJCQkJICAgICBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCksCisJCQkJICAgICByZWZuYW1lLCAwKTsKKworCWlmIChvICYmIG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJbmVnb3RpYXRvci0+YWRkX3RpcChuZWdvdGlhdG9yLCAoc3RydWN0IGNvbW1pdCAqKW8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmV2X2xpc3RfaW5zZXJ0X3JlZl9vaWQoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiByZXZfbGlzdF9pbnNlcnRfcmVmKGNiX2RhdGEsIHJlZm5hbWUsIG9pZCk7Cit9CisKK2VudW0gYWNrX3R5cGUgeworCU5BSyA9IDAsCisJQUNLLAorCUFDS19jb250aW51ZSwKKwlBQ0tfY29tbW9uLAorCUFDS19yZWFkeQorfTsKKworc3RhdGljIHZvaWQgY29uc3VtZV9zaGFsbG93X2xpc3Qoc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywKKwkJCQkgc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlcikKK3sKKwlpZiAoYXJncy0+c3RhdGVsZXNzX3JwYyAmJiBhcmdzLT5kZWVwZW4pIHsKKwkJLyogSWYgd2Ugc2VudCBhIGRlcHRoIHdlIHdpbGwgZ2V0IGJhY2sgImR1cGxpY2F0ZSIKKwkJICogc2hhbGxvdyBhbmQgdW5zaGFsbG93IGNvbW1hbmRzIGV2ZXJ5IHRpbWUgdGhlcmUKKwkJICogaXMgYSBibG9jayBvZiBoYXZlIGxpbmVzIGV4Y2hhbmdlZC4KKwkJICovCisJCXdoaWxlIChwYWNrZXRfcmVhZGVyX3JlYWQocmVhZGVyKSA9PSBQQUNLRVRfUkVBRF9OT1JNQUwpIHsKKwkJCWlmIChzdGFydHNfd2l0aChyZWFkZXItPmxpbmUsICJzaGFsbG93ICIpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHN0YXJ0c193aXRoKHJlYWRlci0+bGluZSwgInVuc2hhbGxvdyAiKSkKKwkJCQljb250aW51ZTsKKwkJCWRpZShfKCJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgc2hhbGxvdyBsaXN0IikpOworCQl9CisJCWlmIChyZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9GTFVTSCkKKwkJCWRpZShfKCJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgYSBmbHVzaCBwYWNrZXQgYWZ0ZXIgc2hhbGxvdyBsaXN0IikpOworCX0KK30KKworc3RhdGljIGVudW0gYWNrX3R5cGUgZ2V0X2FjayhzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVhZGVyLAorCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHRfb2lkKQoreworCWludCBsZW47CisJY29uc3QgY2hhciAqYXJnOworCisJaWYgKHBhY2tldF9yZWFkZXJfcmVhZChyZWFkZXIpICE9IFBBQ0tFVF9SRUFEX05PUk1BTCkKKwkJZGllKF8oImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiKSk7CisJbGVuID0gcmVhZGVyLT5wa3RsZW47CisKKwlpZiAoIXN0cmNtcChyZWFkZXItPmxpbmUsICJOQUsiKSkKKwkJcmV0dXJuIE5BSzsKKwlpZiAoc2tpcF9wcmVmaXgocmVhZGVyLT5saW5lLCAiQUNLICIsICZhcmcpKSB7CisJCWNvbnN0IGNoYXIgKnA7CisJCWlmICghcGFyc2Vfb2lkX2hleChhcmcsIHJlc3VsdF9vaWQsICZwKSkgeworCQkJbGVuIC09IHAgLSByZWFkZXItPmxpbmU7CisJCQlpZiAobGVuIDwgMSkKKwkJCQlyZXR1cm4gQUNLOworCQkJaWYgKHN0cnN0cihwLCAiY29udGludWUiKSkKKwkJCQlyZXR1cm4gQUNLX2NvbnRpbnVlOworCQkJaWYgKHN0cnN0cihwLCAiY29tbW9uIikpCisJCQkJcmV0dXJuIEFDS19jb21tb247CisJCQlpZiAoc3Ryc3RyKHAsICJyZWFkeSIpKQorCQkJCXJldHVybiBBQ0tfcmVhZHk7CisJCQlyZXR1cm4gQUNLOworCQl9CisJfQorCWRpZShfKCJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290ICclcyciKSwgcmVhZGVyLT5saW5lKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9yZXF1ZXN0KHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCQkgaW50IGZkLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpIHsKKwkJc2VuZF9zaWRlYmFuZChmZCwgLTEsIGJ1Zi0+YnVmLCBidWYtPmxlbiwgTEFSR0VfUEFDS0VUX01BWCk7CisJCXBhY2tldF9mbHVzaChmZCk7CisJfSBlbHNlIHsKKwkJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1Zi0+YnVmLCBidWYtPmxlbikgPCAwKQorCQkJZGllX2Vycm5vKF8oInVuYWJsZSB0byB3cml0ZSB0byByZW1vdGUiKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfb25lX2FsdGVybmF0ZV9vYmplY3Qoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKm5lZ290aWF0b3IsCisJCQkJCXN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwlyZXZfbGlzdF9pbnNlcnRfcmVmKG5lZ290aWF0b3IsIE5VTEwsICZvYmotPm9pZCk7Cit9CisKKyNkZWZpbmUgSU5JVElBTF9GTFVTSCAxNgorI2RlZmluZSBQSVBFU0FGRV9GTFVTSCAzMgorI2RlZmluZSBMQVJHRV9GTFVTSCAxNjM4NAorCitzdGF0aWMgaW50IG5leHRfZmx1c2goaW50IHN0YXRlbGVzc19ycGMsIGludCBjb3VudCkKK3sKKwlpZiAoc3RhdGVsZXNzX3JwYykgeworCQlpZiAoY291bnQgPCBMQVJHRV9GTFVTSCkKKwkJCWNvdW50IDw8PSAxOworCQllbHNlCisJCQljb3VudCA9IGNvdW50ICogMTEgLyAxMDsKKwl9IGVsc2UgeworCQlpZiAoY291bnQgPCBQSVBFU0FGRV9GTFVTSCkKKwkJCWNvdW50IDw8PSAxOworCQllbHNlCisJCQljb3VudCArPSBQSVBFU0FGRV9GTFVTSDsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCBtYXJrX3RpcHMoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKm5lZ290aWF0b3IsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBvaWRfYXJyYXkgKm5lZ290aWF0aW9uX3RpcHMpCit7CisJaW50IGk7CisKKwlpZiAoIW5lZ290aWF0aW9uX3RpcHMpIHsKKwkJZm9yX2VhY2hfcmVmKHJldl9saXN0X2luc2VydF9yZWZfb2lkLCBuZWdvdGlhdG9yKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuZWdvdGlhdGlvbl90aXBzLT5ucjsgaSsrKQorCQlyZXZfbGlzdF9pbnNlcnRfcmVmKG5lZ290aWF0b3IsIE5VTEwsCisJCQkJICAgICZuZWdvdGlhdGlvbl90aXBzLT5vaWRbaV0pOworCXJldHVybjsKK30KKworc3RhdGljIGludCBmaW5kX2NvbW1vbihzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvciwKKwkJICAgICAgIHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCSAgICAgICBpbnQgZmRbMl0sIHN0cnVjdCBvYmplY3RfaWQgKnJlc3VsdF9vaWQsCisJCSAgICAgICBzdHJ1Y3QgcmVmICpyZWZzKQoreworCWludCBmZXRjaGluZzsKKwlpbnQgY291bnQgPSAwLCBmbHVzaGVzID0gMCwgZmx1c2hfYXQgPSBJTklUSUFMX0ZMVVNILCByZXR2YWw7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkOworCXVuc2lnbmVkIGluX3ZhaW4gPSAwOworCWludCBnb3RfY29udGludWUgPSAwOworCWludCBnb3RfcmVhZHkgPSAwOworCXN0cnVjdCBzdHJidWYgcmVxX2J1ZiA9IFNUUkJVRl9JTklUOworCXNpemVfdCBzdGF0ZV9sZW4gPSAwOworCXN0cnVjdCBwYWNrZXRfcmVhZGVyIHJlYWRlcjsKKworCWlmIChhcmdzLT5zdGF0ZWxlc3NfcnBjICYmIG11bHRpX2FjayA9PSAxKQorCQlkaWUoXygiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpcmVzIG11bHRpX2Fja19kZXRhaWxlZCIpKTsKKworCXBhY2tldF9yZWFkZXJfaW5pdCgmcmVhZGVyLCBmZFswXSwgTlVMTCwgMCwKKwkJCSAgIFBBQ0tFVF9SRUFEX0NIT01QX05FV0xJTkUgfAorCQkJICAgUEFDS0VUX1JFQURfRElFX09OX0VSUl9QQUNLRVQpOworCisJaWYgKCFhcmdzLT5ub19kZXBlbmRlbnRzKSB7CisJCW1hcmtfdGlwcyhuZWdvdGlhdG9yLCBhcmdzLT5uZWdvdGlhdGlvbl90aXBzKTsKKwkJZm9yX2VhY2hfY2FjaGVkX2FsdGVybmF0ZShuZWdvdGlhdG9yLCBpbnNlcnRfb25lX2FsdGVybmF0ZV9vYmplY3QpOworCX0KKworCWZldGNoaW5nID0gMDsKKwlmb3IgKCA7IHJlZnMgOyByZWZzID0gcmVmcy0+bmV4dCkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkICpyZW1vdGUgPSAmcmVmcy0+b2xkX29pZDsKKwkJY29uc3QgY2hhciAqcmVtb3RlX2hleDsKKwkJc3RydWN0IG9iamVjdCAqbzsKKworCQkvKgorCQkgKiBJZiB0aGF0IG9iamVjdCBpcyBjb21wbGV0ZSAoaS5lLiBpdCBpcyBhbiBhbmNlc3RvciBvZiBhCisJCSAqIGxvY2FsIHJlZiksIHdlIHRlbGwgdGhlbSB3ZSBoYXZlIGl0IGJ1dCBkbyBub3QgaGF2ZSB0bworCQkgKiB0ZWxsIHRoZW0gYWJvdXQgaXRzIGFuY2VzdG9ycywgd2hpY2ggdGhleSBhbHJlYWR5IGtub3cKKwkJICogYWJvdXQuCisJCSAqCisJCSAqIFdlIHVzZSBsb29rdXBfb2JqZWN0IGhlcmUgYmVjYXVzZSB3ZSBhcmUgb25seQorCQkgKiBpbnRlcmVzdGVkIGluIHRoZSBjYXNlIHdlICprbm93KiB0aGUgb2JqZWN0IGlzCisJCSAqIHJlYWNoYWJsZSBhbmQgd2UgaGF2ZSBhbHJlYWR5IHNjYW5uZWQgaXQuCisJCSAqCisJCSAqIERvIHRoaXMgb25seSBpZiBhcmdzLT5ub19kZXBlbmRlbnRzIGlzIGZhbHNlIChpZiBpdCBpcyB0cnVlLAorCQkgKiB3ZSBjYW5ub3QgdHJ1c3QgdGhlIG9iamVjdCBmbGFncykuCisJCSAqLworCQlpZiAoIWFyZ3MtPm5vX2RlcGVuZGVudHMgJiYKKwkJICAgICgobyA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksIHJlbW90ZSkpICE9IE5VTEwpICYmCisJCQkJKG8tPmZsYWdzICYgQ09NUExFVEUpKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJlbW90ZV9oZXggPSBvaWRfdG9faGV4KHJlbW90ZSk7CisJCWlmICghZmV0Y2hpbmcpIHsKKwkJCXN0cnVjdCBzdHJidWYgYyA9IFNUUkJVRl9JTklUOworCQkJaWYgKG11bHRpX2FjayA9PSAyKSAgICAgc3RyYnVmX2FkZHN0cigmYywgIiBtdWx0aV9hY2tfZGV0YWlsZWQiKTsKKwkJCWlmIChtdWx0aV9hY2sgPT0gMSkgICAgIHN0cmJ1Zl9hZGRzdHIoJmMsICIgbXVsdGlfYWNrIik7CisJCQlpZiAobm9fZG9uZSkgICAgICAgICAgICBzdHJidWZfYWRkc3RyKCZjLCAiIG5vLWRvbmUiKTsKKwkJCWlmICh1c2Vfc2lkZWJhbmQgPT0gMikgIHN0cmJ1Zl9hZGRzdHIoJmMsICIgc2lkZS1iYW5kLTY0ayIpOworCQkJaWYgKHVzZV9zaWRlYmFuZCA9PSAxKSAgc3RyYnVmX2FkZHN0cigmYywgIiBzaWRlLWJhbmQiKTsKKwkJCWlmIChhcmdzLT5kZWVwZW5fcmVsYXRpdmUpIHN0cmJ1Zl9hZGRzdHIoJmMsICIgZGVlcGVuLXJlbGF0aXZlIik7CisJCQlpZiAoYXJncy0+dXNlX3RoaW5fcGFjaykgc3RyYnVmX2FkZHN0cigmYywgIiB0aGluLXBhY2siKTsKKwkJCWlmIChhcmdzLT5ub19wcm9ncmVzcykgICBzdHJidWZfYWRkc3RyKCZjLCAiIG5vLXByb2dyZXNzIik7CisJCQlpZiAoYXJncy0+aW5jbHVkZV90YWcpICAgc3RyYnVmX2FkZHN0cigmYywgIiBpbmNsdWRlLXRhZyIpOworCQkJaWYgKHByZWZlcl9vZnNfZGVsdGEpICAgc3RyYnVmX2FkZHN0cigmYywgIiBvZnMtZGVsdGEiKTsKKwkJCWlmIChkZWVwZW5fc2luY2Vfb2spICAgIHN0cmJ1Zl9hZGRzdHIoJmMsICIgZGVlcGVuLXNpbmNlIik7CisJCQlpZiAoZGVlcGVuX25vdF9vaykgICAgICBzdHJidWZfYWRkc3RyKCZjLCAiIGRlZXBlbi1ub3QiKTsKKwkJCWlmIChhZ2VudF9zdXBwb3J0ZWQpICAgIHN0cmJ1Zl9hZGRmKCZjLCAiIGFnZW50PSVzIiwKKwkJCQkJCQkgICAgZ2l0X3VzZXJfYWdlbnRfc2FuaXRpemVkKCkpOworCQkJaWYgKGFyZ3MtPmZpbHRlcl9vcHRpb25zLmNob2ljZSkKKwkJCQlzdHJidWZfYWRkc3RyKCZjLCAiIGZpbHRlciIpOworCQkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgIndhbnQgJXMlc1xuIiwgcmVtb3RlX2hleCwgYy5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJmMpOworCQl9IGVsc2UKKwkJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJ3YW50ICVzXG4iLCByZW1vdGVfaGV4KTsKKwkJZmV0Y2hpbmcrKzsKKwl9CisKKwlpZiAoIWZldGNoaW5nKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZyZXFfYnVmKTsKKwkJcGFja2V0X2ZsdXNoKGZkWzFdKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGlzX3JlcG9zaXRvcnlfc2hhbGxvdyh0aGVfcmVwb3NpdG9yeSkpCisJCXdyaXRlX3NoYWxsb3dfY29tbWl0cygmcmVxX2J1ZiwgMSwgTlVMTCk7CisJaWYgKGFyZ3MtPmRlcHRoID4gMCkKKwkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgImRlZXBlbiAlZCIsIGFyZ3MtPmRlcHRoKTsKKwlpZiAoYXJncy0+ZGVlcGVuX3NpbmNlKSB7CisJCXRpbWVzdGFtcF90IG1heF9hZ2UgPSBhcHByb3hpZGF0ZShhcmdzLT5kZWVwZW5fc2luY2UpOworCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAiZGVlcGVuLXNpbmNlICUiUFJJdGltZSwgbWF4X2FnZSk7CisJfQorCWlmIChhcmdzLT5kZWVwZW5fbm90KSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgYXJncy0+ZGVlcGVuX25vdC0+bnI7IGkrKykgeworCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnMgPSBhcmdzLT5kZWVwZW5fbm90LT5pdGVtcyArIGk7CisJCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAiZGVlcGVuLW5vdCAlcyIsIHMtPnN0cmluZyk7CisJCX0KKwl9CisJaWYgKHNlcnZlcl9zdXBwb3J0c19maWx0ZXJpbmcgJiYgYXJncy0+ZmlsdGVyX29wdGlvbnMuY2hvaWNlKSB7CisJCWNvbnN0IGNoYXIgKnNwZWMgPQorCQkJZXhwYW5kX2xpc3Rfb2JqZWN0c19maWx0ZXJfc3BlYygmYXJncy0+ZmlsdGVyX29wdGlvbnMpOworCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAiZmlsdGVyICVzIiwgc3BlYyk7CisJfQorCXBhY2tldF9idWZfZmx1c2goJnJlcV9idWYpOworCXN0YXRlX2xlbiA9IHJlcV9idWYubGVuOworCisJaWYgKGFyZ3MtPmRlZXBlbikgeworCQljb25zdCBjaGFyICphcmc7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCXNlbmRfcmVxdWVzdChhcmdzLCBmZFsxXSwgJnJlcV9idWYpOworCQl3aGlsZSAocGFja2V0X3JlYWRlcl9yZWFkKCZyZWFkZXIpID09IFBBQ0tFVF9SRUFEX05PUk1BTCkgeworCQkJaWYgKHNraXBfcHJlZml4KHJlYWRlci5saW5lLCAic2hhbGxvdyAiLCAmYXJnKSkgeworCQkJCWlmIChnZXRfb2lkX2hleChhcmcsICZvaWQpKQorCQkJCQlkaWUoXygiaW52YWxpZCBzaGFsbG93IGxpbmU6ICVzIiksIHJlYWRlci5saW5lKTsKKwkJCQlyZWdpc3Rlcl9zaGFsbG93KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChza2lwX3ByZWZpeChyZWFkZXIubGluZSwgInVuc2hhbGxvdyAiLCAmYXJnKSkgeworCQkJCWlmIChnZXRfb2lkX2hleChhcmcsICZvaWQpKQorCQkJCQlkaWUoXygiaW52YWxpZCB1bnNoYWxsb3cgbGluZTogJXMiKSwgcmVhZGVyLmxpbmUpOworCQkJCWlmICghbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm9pZCkpCisJCQkJCWRpZShfKCJvYmplY3Qgbm90IGZvdW5kOiAlcyIpLCByZWFkZXIubGluZSk7CisJCQkJLyogbWFrZSBzdXJlIHRoYXQgaXQgaXMgcGFyc2VkIGFzIHNoYWxsb3cgKi8KKwkJCQlpZiAoIXBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm9pZCkpCisJCQkJCWRpZShfKCJlcnJvciBpbiBvYmplY3Q6ICVzIiksIHJlYWRlci5saW5lKTsKKwkJCQlpZiAodW5yZWdpc3Rlcl9zaGFsbG93KCZvaWQpKQorCQkJCQlkaWUoXygibm8gc2hhbGxvdyBmb3VuZDogJXMiKSwgcmVhZGVyLmxpbmUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZGllKF8oImV4cGVjdGVkIHNoYWxsb3cvdW5zaGFsbG93LCBnb3QgJXMiKSwgcmVhZGVyLmxpbmUpOworCQl9CisJfSBlbHNlIGlmICghYXJncy0+c3RhdGVsZXNzX3JwYykKKwkJc2VuZF9yZXF1ZXN0KGFyZ3MsIGZkWzFdLCAmcmVxX2J1Zik7CisKKwlpZiAoIWFyZ3MtPnN0YXRlbGVzc19ycGMpIHsKKwkJLyogSWYgd2UgYXJlbid0IHVzaW5nIHRoZSBzdGF0ZWxlc3MtcnBjIGludGVyZmFjZQorCQkgKiB3ZSBkb24ndCBuZWVkIHRvIHJldGFpbiB0aGUgaGVhZGVycy4KKwkJICovCisJCXN0cmJ1Zl9zZXRsZW4oJnJlcV9idWYsIDApOworCQlzdGF0ZV9sZW4gPSAwOworCX0KKworCXRyYWNlMl9yZWdpb25fZW50ZXIoImZldGNoLXBhY2siLCAibmVnb3RpYXRpb25fdjBfdjEiLCB0aGVfcmVwb3NpdG9yeSk7CisJZmx1c2hlcyA9IDA7CisJcmV0dmFsID0gLTE7CisJaWYgKGFyZ3MtPm5vX2RlcGVuZGVudHMpCisJCWdvdG8gZG9uZTsKKwl3aGlsZSAoKG9pZCA9IG5lZ290aWF0b3ItPm5leHQobmVnb3RpYXRvcikpKSB7CisJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJoYXZlICVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOworCQlwcmludF92ZXJib3NlKGFyZ3MsICJoYXZlICVzIiwgb2lkX3RvX2hleChvaWQpKTsKKwkJaW5fdmFpbisrOworCQlpZiAoZmx1c2hfYXQgPD0gKytjb3VudCkgeworCQkJaW50IGFjazsKKworCQkJcGFja2V0X2J1Zl9mbHVzaCgmcmVxX2J1Zik7CisJCQlzZW5kX3JlcXVlc3QoYXJncywgZmRbMV0sICZyZXFfYnVmKTsKKwkJCXN0cmJ1Zl9zZXRsZW4oJnJlcV9idWYsIHN0YXRlX2xlbik7CisJCQlmbHVzaGVzKys7CisJCQlmbHVzaF9hdCA9IG5leHRfZmx1c2goYXJncy0+c3RhdGVsZXNzX3JwYywgY291bnQpOworCisJCQkvKgorCQkJICogV2Uga2VlcCBvbmUgd2luZG93ICJhaGVhZCIgb2YgdGhlIG90aGVyIHNpZGUsIGFuZAorCQkJICogd2lsbCB3YWl0IGZvciBhbiBBQ0sgb25seSBvbiB0aGUgbmV4dCBvbmUKKwkJCSAqLworCQkJaWYgKCFhcmdzLT5zdGF0ZWxlc3NfcnBjICYmIGNvdW50ID09IElOSVRJQUxfRkxVU0gpCisJCQkJY29udGludWU7CisKKwkJCWNvbnN1bWVfc2hhbGxvd19saXN0KGFyZ3MsICZyZWFkZXIpOworCQkJZG8geworCQkJCWFjayA9IGdldF9hY2soJnJlYWRlciwgcmVzdWx0X29pZCk7CisJCQkJaWYgKGFjaykKKwkJCQkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJnb3QgJXMgJWQgJXMiKSwgImFjayIsCisJCQkJCQkgICAgICBhY2ssIG9pZF90b19oZXgocmVzdWx0X29pZCkpOworCQkJCXN3aXRjaCAoYWNrKSB7CisJCQkJY2FzZSBBQ0s6CisJCQkJCWZsdXNoZXMgPSAwOworCQkJCQltdWx0aV9hY2sgPSAwOworCQkJCQlyZXR2YWwgPSAwOworCQkJCQlnb3RvIGRvbmU7CisJCQkJY2FzZSBBQ0tfY29tbW9uOgorCQkJCWNhc2UgQUNLX3JlYWR5OgorCQkJCWNhc2UgQUNLX2NvbnRpbnVlOiB7CisJCQkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9CisJCQkJCQlsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSAgICAgIHJlc3VsdF9vaWQpOworCQkJCQlpbnQgd2FzX2NvbW1vbjsKKworCQkJCQlpZiAoIWNvbW1pdCkKKwkJCQkJCWRpZShfKCJpbnZhbGlkIGNvbW1pdCAlcyIpLCBvaWRfdG9faGV4KHJlc3VsdF9vaWQpKTsKKwkJCQkJd2FzX2NvbW1vbiA9IG5lZ290aWF0b3ItPmFjayhuZWdvdGlhdG9yLCBjb21taXQpOworCQkJCQlpZiAoYXJncy0+c3RhdGVsZXNzX3JwYworCQkJCQkgJiYgYWNrID09IEFDS19jb21tb24KKwkJCQkJICYmICF3YXNfY29tbW9uKSB7CisJCQkJCQkvKiBXZSBuZWVkIHRvIHJlcGxheSB0aGUgaGF2ZSBmb3IgdGhpcyBvYmplY3QKKwkJCQkJCSAqIG9uIHRoZSBuZXh0IFJQQyByZXF1ZXN0IHNvIHRoZSBwZWVyIGtub3dzCisJCQkJCQkgKiBpdCBpcyBpbiBjb21tb24gd2l0aCB1cy4KKwkJCQkJCSAqLworCQkJCQkJY29uc3QgY2hhciAqaGV4ID0gb2lkX3RvX2hleChyZXN1bHRfb2lkKTsKKwkJCQkJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJoYXZlICVzXG4iLCBoZXgpOworCQkJCQkJc3RhdGVfbGVuID0gcmVxX2J1Zi5sZW47CisJCQkJCQkvKgorCQkJCQkJICogUmVzZXQgaW5fdmFpbiBiZWNhdXNlIGFuIGFjaworCQkJCQkJICogZm9yIHRoaXMgY29tbWl0IGhhcyBub3QgYmVlbgorCQkJCQkJICogc2Vlbi4KKwkJCQkJCSAqLworCQkJCQkJaW5fdmFpbiA9IDA7CisJCQkJCX0gZWxzZSBpZiAoIWFyZ3MtPnN0YXRlbGVzc19ycGMKKwkJCQkJCSAgIHx8IGFjayAhPSBBQ0tfY29tbW9uKQorCQkJCQkJaW5fdmFpbiA9IDA7CisJCQkJCXJldHZhbCA9IDA7CisJCQkJCWdvdF9jb250aW51ZSA9IDE7CisJCQkJCWlmIChhY2sgPT0gQUNLX3JlYWR5KQorCQkJCQkJZ290X3JlYWR5ID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9IHdoaWxlIChhY2spOworCQkJZmx1c2hlcy0tOworCQkJaWYgKGdvdF9jb250aW51ZSAmJiBNQVhfSU5fVkFJTiA8IGluX3ZhaW4pIHsKKwkJCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oImdpdmluZyB1cCIpKTsKKwkJCQlicmVhazsgLyogZ2l2ZSB1cCAqLworCQkJfQorCQkJaWYgKGdvdF9yZWFkeSkKKwkJCQlicmVhazsKKwkJfQorCX0KK2RvbmU6CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgiZmV0Y2gtcGFjayIsICJuZWdvdGlhdGlvbl92MF92MSIsIHRoZV9yZXBvc2l0b3J5KTsKKwlpZiAoIWdvdF9yZWFkeSB8fCAhbm9fZG9uZSkgeworCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAiZG9uZVxuIik7CisJCXNlbmRfcmVxdWVzdChhcmdzLCBmZFsxXSwgJnJlcV9idWYpOworCX0KKwlwcmludF92ZXJib3NlKGFyZ3MsIF8oImRvbmUiKSk7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCW11bHRpX2FjayA9IDA7CisJCWZsdXNoZXMrKzsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnJlcV9idWYpOworCisJaWYgKCFnb3RfcmVhZHkgfHwgIW5vX2RvbmUpCisJCWNvbnN1bWVfc2hhbGxvd19saXN0KGFyZ3MsICZyZWFkZXIpOworCXdoaWxlIChmbHVzaGVzIHx8IG11bHRpX2FjaykgeworCQlpbnQgYWNrID0gZ2V0X2FjaygmcmVhZGVyLCByZXN1bHRfb2lkKTsKKwkJaWYgKGFjaykgeworCQkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJnb3QgJXMgKCVkKSAlcyIpLCAiYWNrIiwKKwkJCQkgICAgICBhY2ssIG9pZF90b19oZXgocmVzdWx0X29pZCkpOworCQkJaWYgKGFjayA9PSBBQ0spCisJCQkJcmV0dXJuIDA7CisJCQltdWx0aV9hY2sgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJZmx1c2hlcy0tOworCX0KKwkvKiBpdCBpcyBubyBlcnJvciB0byBmZXRjaCBpbnRvIGEgY29tcGxldGVseSBlbXB0eSByZXBvICovCisJcmV0dXJuIGNvdW50ID8gcmV0dmFsIDogMDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqY29tcGxldGU7CisKK3N0YXRpYyBpbnQgbWFya19jb21wbGV0ZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IG9iamVjdCAqbyA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKworCXdoaWxlIChvICYmIG8tPnR5cGUgPT0gT0JKX1RBRykgeworCQlzdHJ1Y3QgdGFnICp0ID0gKHN0cnVjdCB0YWcgKikgbzsKKwkJaWYgKCF0LT50YWdnZWQpCisJCQlicmVhazsgLyogYnJva2VuIHJlcG9zaXRvcnkgKi8KKwkJby0+ZmxhZ3MgfD0gQ09NUExFVEU7CisJCW8gPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZ0LT50YWdnZWQtPm9pZCk7CisJfQorCWlmIChvICYmIG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW87CisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NUExFVEUpKSB7CisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBDT01QTEVURTsKKwkJCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsICZjb21wbGV0ZSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFya19jb21wbGV0ZV9vaWQoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gbWFya19jb21wbGV0ZShvaWQpOworfQorCitzdGF0aWMgdm9pZCBtYXJrX3JlY2VudF9jb21wbGV0ZV9jb21taXRzKHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCQkJCSB0aW1lc3RhbXBfdCBjdXRvZmYpCit7CisJd2hpbGUgKGNvbXBsZXRlICYmIGN1dG9mZiA8PSBjb21wbGV0ZS0+aXRlbS0+ZGF0ZSkgeworCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIk1hcmtpbmcgJXMgYXMgY29tcGxldGUiKSwKKwkJCSAgICAgIG9pZF90b19oZXgoJmNvbXBsZXRlLT5pdGVtLT5vYmplY3Qub2lkKSk7CisJCXBvcF9tb3N0X3JlY2VudF9jb21taXQoJmNvbXBsZXRlLCBDT01QTEVURSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfcmVmc190b19vaWRzZXQoc3RydWN0IG9pZHNldCAqb2lkcywgc3RydWN0IHJlZiAqcmVmcykKK3sKKwlmb3IgKDsgcmVmczsgcmVmcyA9IHJlZnMtPm5leHQpCisJCW9pZHNldF9pbnNlcnQob2lkcywgJnJlZnMtPm9sZF9vaWQpOworfQorCitzdGF0aWMgaW50IGlzX3VubWF0Y2hlZF9yZWYoY29uc3Qgc3RydWN0IHJlZiAqcmVmKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNvbnN0IGNoYXIgKnA7CisJcmV0dXJuCXJlZi0+bWF0Y2hfc3RhdHVzID09IFJFRl9OT1RfTUFUQ0hFRCAmJgorCQkhcGFyc2Vfb2lkX2hleChyZWYtPm5hbWUsICZvaWQsICZwKSAmJgorCQkqcCA9PSAnXDAnICYmCisJCW9pZGVxKCZvaWQsICZyZWYtPm9sZF9vaWQpOworfQorCitzdGF0aWMgdm9pZCBmaWx0ZXJfcmVmcyhzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzICphcmdzLAorCQkJc3RydWN0IHJlZiAqKnJlZnMsCisJCQlzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0KQoreworCXN0cnVjdCByZWYgKm5ld2xpc3QgPSBOVUxMOworCXN0cnVjdCByZWYgKipuZXd0YWlsID0gJm5ld2xpc3Q7CisJc3RydWN0IHJlZiAqdW5tYXRjaGVkID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICpyZWYsICpuZXh0OworCXN0cnVjdCBvaWRzZXQgdGlwX29pZHMgPSBPSURTRVRfSU5JVDsKKwlpbnQgaTsKKwlpbnQgc3RyaWN0ID0gIShhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgJgorCQkgICAgICAgKEFMTE9XX1RJUF9TSEExIHwgQUxMT1dfUkVBQ0hBQkxFX1NIQTEpKTsKKworCWkgPSAwOworCWZvciAocmVmID0gKnJlZnM7IHJlZjsgcmVmID0gbmV4dCkgeworCQlpbnQga2VlcCA9IDA7CisJCW5leHQgPSByZWYtPm5leHQ7CisKKwkJaWYgKHN0YXJ0c193aXRoKHJlZi0+bmFtZSwgInJlZnMvIikgJiYKKwkJICAgIGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJlZi0+bmFtZSwgMCkpIHsKKwkJCS8qCisJCQkgKiB0cmFzaCBvciBhIHBlZWxlZCB2YWx1ZTsgZG8gbm90IGV2ZW4gYWRkIGl0IHRvCisJCQkgKiB1bm1hdGNoZWQgbGlzdAorCQkJICovCisJCQlmcmVlX29uZV9yZWYocmVmKTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJd2hpbGUgKGkgPCBucl9zb3VnaHQpIHsKKwkJCQlpbnQgY21wID0gc3RyY21wKHJlZi0+bmFtZSwgc291Z2h0W2ldLT5uYW1lKTsKKwkJCQlpZiAoY21wIDwgMCkKKwkJCQkJYnJlYWs7IC8qIGRlZmluaXRlbHkgZG8gbm90IGhhdmUgaXQgKi8KKwkJCQllbHNlIGlmIChjbXAgPT0gMCkgeworCQkJCQlrZWVwID0gMTsgLyogZGVmaW5pdGVseSBoYXZlIGl0ICovCisJCQkJCXNvdWdodFtpXS0+bWF0Y2hfc3RhdHVzID0gUkVGX01BVENIRUQ7CisJCQkJfQorCQkJCWkrKzsKKwkJCX0KKworCQkJaWYgKCFrZWVwICYmIGFyZ3MtPmZldGNoX2FsbCAmJgorCQkJICAgICghYXJncy0+ZGVlcGVuIHx8ICFzdGFydHNfd2l0aChyZWYtPm5hbWUsICJyZWZzL3RhZ3MvIikpKQorCQkJCWtlZXAgPSAxOworCQl9CisKKwkJaWYgKGtlZXApIHsKKwkJCSpuZXd0YWlsID0gcmVmOworCQkJcmVmLT5uZXh0ID0gTlVMTDsKKwkJCW5ld3RhaWwgPSAmcmVmLT5uZXh0OworCQl9IGVsc2UgeworCQkJcmVmLT5uZXh0ID0gdW5tYXRjaGVkOworCQkJdW5tYXRjaGVkID0gcmVmOworCQl9CisJfQorCisJaWYgKHN0cmljdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnJfc291Z2h0OyBpKyspIHsKKwkJCXJlZiA9IHNvdWdodFtpXTsKKwkJCWlmICghaXNfdW5tYXRjaGVkX3JlZihyZWYpKQorCQkJCWNvbnRpbnVlOworCisJCQlhZGRfcmVmc190b19vaWRzZXQoJnRpcF9vaWRzLCB1bm1hdGNoZWQpOworCQkJYWRkX3JlZnNfdG9fb2lkc2V0KCZ0aXBfb2lkcywgbmV3bGlzdCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIEFwcGVuZCB1bm1hdGNoZWQgcmVxdWVzdHMgdG8gdGhlIGxpc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfc291Z2h0OyBpKyspIHsKKwkJcmVmID0gc291Z2h0W2ldOworCQlpZiAoIWlzX3VubWF0Y2hlZF9yZWYocmVmKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghc3RyaWN0IHx8IG9pZHNldF9jb250YWlucygmdGlwX29pZHMsICZyZWYtPm9sZF9vaWQpKSB7CisJCQlyZWYtPm1hdGNoX3N0YXR1cyA9IFJFRl9NQVRDSEVEOworCQkJKm5ld3RhaWwgPSBjb3B5X3JlZihyZWYpOworCQkJbmV3dGFpbCA9ICYoKm5ld3RhaWwpLT5uZXh0OworCQl9IGVsc2UgeworCQkJcmVmLT5tYXRjaF9zdGF0dXMgPSBSRUZfVU5BRFZFUlRJU0VEX05PVF9BTExPV0VEOworCQl9CisJfQorCisJb2lkc2V0X2NsZWFyKCZ0aXBfb2lkcyk7CisJZnJlZV9yZWZzKHVubWF0Y2hlZCk7CisKKwkqcmVmcyA9IG5ld2xpc3Q7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfYWx0ZXJuYXRlX2NvbXBsZXRlKHN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICp1bnVzZWQsCisJCQkJICAgIHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwltYXJrX2NvbXBsZXRlKCZvYmotPm9pZCk7Cit9CisKK3N0cnVjdCBsb29zZV9vYmplY3RfaXRlciB7CisJc3RydWN0IG9pZHNldCAqbG9vc2Vfb2JqZWN0X3NldDsKKwlzdHJ1Y3QgcmVmICpyZWZzOworfTsKKworLyoKKyAqIE1hcmsgcmVjZW50IGNvbW1pdHMgYXZhaWxhYmxlIGxvY2FsbHkgYW5kIHJlYWNoYWJsZSBmcm9tIGEgbG9jYWwgcmVmIGFzCisgKiBDT01QTEVURS4gSWYgYXJncy0+bm9fZGVwZW5kZW50cyBpcyBmYWxzZSwgYWxzbyBtYXJrIENPTVBMRVRFIHJlbW90ZSByZWZzIGFzCisgKiBDT01NT05fUkVGIChvdGhlcndpc2UsIHdlIGFyZSBub3QgcGxhbm5pbmcgdG8gcGFydGljaXBhdGUgaW4gbmVnb3RpYXRpb24sIGFuZAorICogdGh1cyBkbyBub3QgbmVlZCBDT01NT05fUkVGIG1hcmtzKS4KKyAqCisgKiBUaGUgY3V0b2ZmIHRpbWUgZm9yIHJlY2VuY3kgaXMgZGV0ZXJtaW5lZCBieSB0aGlzIGhldXJpc3RpYzogaXQgaXMgdGhlCisgKiBlYXJsaWVzdCBjb21taXQgdGltZSBvZiB0aGUgb2JqZWN0cyBpbiByZWZzIHRoYXQgYXJlIGNvbW1pdHMgYW5kIHRoYXQgd2Uga25vdworICogdGhlIGNvbW1pdCB0aW1lIG9mLgorICovCitzdGF0aWMgdm9pZCBtYXJrX2NvbXBsZXRlX2FuZF9jb21tb25fcmVmKHN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICpuZWdvdGlhdG9yLAorCQkJCQkgc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywKKwkJCQkJIHN0cnVjdCByZWYgKipyZWZzKQoreworCXN0cnVjdCByZWYgKnJlZjsKKwlpbnQgb2xkX3NhdmVfY29tbWl0X2J1ZmZlciA9IHNhdmVfY29tbWl0X2J1ZmZlcjsKKwl0aW1lc3RhbXBfdCBjdXRvZmYgPSAwOworCisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKworCXRyYWNlMl9yZWdpb25fZW50ZXIoImZldGNoLXBhY2siLCAicGFyc2VfcmVtb3RlX3JlZnNfYW5kX2ZpbmRfY3V0b2ZmIiwgTlVMTCk7CisJZm9yIChyZWYgPSAqcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3RydWN0IG9iamVjdCAqbzsKKworCQlpZiAoIWhhc19vYmplY3RfZmlsZV93aXRoX2ZsYWdzKCZyZWYtPm9sZF9vaWQsCisJCQkJCQlPQkpFQ1RfSU5GT19RVUlDSyB8CisJCQkJCQkJT0JKRUNUX0lORk9fU0tJUF9GRVRDSF9PQkpFQ1QpKQorCQkJY29udGludWU7CisJCW8gPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZyZWYtPm9sZF9vaWQpOworCQlpZiAoIW8pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBhbHJlYWR5IGhhdmUgaXQgLS0gd2hpY2ggbWF5IG1lYW4gdGhhdCB3ZSB3ZXJlCisJCSAqIGluIHN5bmMgd2l0aCB0aGUgb3RoZXIgc2lkZSBhdCBzb21lIHRpbWUgYWZ0ZXIKKwkJICogdGhhdCAoaXQgaXMgT0sgaWYgd2UgZ3Vlc3Mgd3JvbmcgaGVyZSkuCisJCSAqLworCQlpZiAoby0+dHlwZSA9PSBPQkpfQ09NTUlUKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW87CisJCQlpZiAoIWN1dG9mZiB8fCBjdXRvZmYgPCBjb21taXQtPmRhdGUpCisJCQkJY3V0b2ZmID0gY29tbWl0LT5kYXRlOworCQl9CisJfQorCXRyYWNlMl9yZWdpb25fbGVhdmUoImZldGNoLXBhY2siLCAicGFyc2VfcmVtb3RlX3JlZnNfYW5kX2ZpbmRfY3V0b2ZmIiwgTlVMTCk7CisKKwkvKgorCSAqIFRoaXMgYmxvY2sgbWFya3MgYWxsIGxvY2FsIHJlZnMgYXMgQ09NUExFVEUsIGFuZCB0aGVuIHJlY3Vyc2l2ZWx5IG1hcmtzIGFsbAorCSAqIHBhcmVudHMgb2YgdGhvc2UgcmVmcyBhcyBDT01QTEVURS4KKwkgKi8KKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJmZXRjaC1wYWNrIiwgIm1hcmtfY29tcGxldGVfbG9jYWxfcmVmcyIsIE5VTEwpOworCWlmICghYXJncy0+ZGVlcGVuKSB7CisJCWZvcl9lYWNoX3JlZihtYXJrX2NvbXBsZXRlX29pZCwgTlVMTCk7CisJCWZvcl9lYWNoX2NhY2hlZF9hbHRlcm5hdGUoTlVMTCwgbWFya19hbHRlcm5hdGVfY29tcGxldGUpOworCQljb21taXRfbGlzdF9zb3J0X2J5X2RhdGUoJmNvbXBsZXRlKTsKKwkJaWYgKGN1dG9mZikKKwkJCW1hcmtfcmVjZW50X2NvbXBsZXRlX2NvbW1pdHMoYXJncywgY3V0b2ZmKTsKKwl9CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgiZmV0Y2gtcGFjayIsICJtYXJrX2NvbXBsZXRlX2xvY2FsX3JlZnMiLCBOVUxMKTsKKworCS8qCisJICogTWFyayBhbGwgY29tcGxldGUgcmVtb3RlIHJlZnMgYXMgY29tbW9uIHJlZnMuCisJICogRG9uJ3QgbWFyayB0aGVtIGNvbW1vbiB5ZXQ7IHRoZSBzZXJ2ZXIgaGFzIHRvIGJlIHRvbGQgc28gZmlyc3QuCisJICovCisJdHJhY2UyX3JlZ2lvbl9lbnRlcigiZmV0Y2gtcGFjayIsICJtYXJrX2NvbW1vbl9yZW1vdGVfcmVmcyIsIE5VTEwpOworCWZvciAocmVmID0gKnJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN0cnVjdCBvYmplY3QgKm8gPSBkZXJlZl90YWcodGhlX3JlcG9zaXRvcnksCisJCQkJCSAgICAgbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJICAgICAmcmVmLT5vbGRfb2lkKSwKKwkJCQkJICAgICBOVUxMLCAwKTsKKworCQlpZiAoIW8gfHwgby0+dHlwZSAhPSBPQkpfQ09NTUlUIHx8ICEoby0+ZmxhZ3MgJiBDT01QTEVURSkpCisJCQljb250aW51ZTsKKworCQluZWdvdGlhdG9yLT5rbm93bl9jb21tb24obmVnb3RpYXRvciwKKwkJCQkJIChzdHJ1Y3QgY29tbWl0ICopbyk7CisJfQorCXRyYWNlMl9yZWdpb25fbGVhdmUoImZldGNoLXBhY2siLCAibWFya19jb21tb25fcmVtb3RlX3JlZnMiLCBOVUxMKTsKKworCXNhdmVfY29tbWl0X2J1ZmZlciA9IG9sZF9zYXZlX2NvbW1pdF9idWZmZXI7Cit9CisKKy8qCisgKiBSZXR1cm5zIDEgaWYgZXZlcnkgb2JqZWN0IHBvaW50ZWQgdG8gYnkgdGhlIGdpdmVuIHJlbW90ZSByZWZzIGlzIGF2YWlsYWJsZQorICogbG9jYWxseSBhbmQgcmVhY2hhYmxlIGZyb20gYSBsb2NhbCByZWYsIGFuZCAwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBldmVyeXRoaW5nX2xvY2FsKHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCQkgICAgc3RydWN0IHJlZiAqKnJlZnMpCit7CisJc3RydWN0IHJlZiAqcmVmOworCWludCByZXR2YWw7CisKKwlmb3IgKHJldHZhbCA9IDEsIHJlZiA9ICpyZWZzOyByZWYgOyByZWYgPSByZWYtPm5leHQpIHsKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqcmVtb3RlID0gJnJlZi0+b2xkX29pZDsKKwkJc3RydWN0IG9iamVjdCAqbzsKKworCQlvID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgcmVtb3RlKTsKKwkJaWYgKCFvIHx8ICEoby0+ZmxhZ3MgJiBDT01QTEVURSkpIHsKKwkJCXJldHZhbCA9IDA7CisJCQlwcmludF92ZXJib3NlKGFyZ3MsICJ3YW50ICVzICglcykiLCBvaWRfdG9faGV4KHJlbW90ZSksCisJCQkJICAgICAgcmVmLT5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXByaW50X3ZlcmJvc2UoYXJncywgXygiYWxyZWFkeSBoYXZlICVzICglcykiKSwgb2lkX3RvX2hleChyZW1vdGUpLAorCQkJICAgICAgcmVmLT5uYW1lKTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHNpZGViYW5kX2RlbXV4KGludCBpbiwgaW50IG91dCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgKnhkID0gZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVjdl9zaWRlYmFuZCgiZmV0Y2gtcGFjayIsIHhkWzBdLCBvdXQpOworCWNsb3NlKG91dCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfcHJvbWlzb3JfZmlsZShjb25zdCBjaGFyICprZWVwX25hbWUsCisJCQkJc3RydWN0IHJlZiAqKnNvdWdodCwgaW50IG5yX3NvdWdodCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHByb21pc29yX25hbWUgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc3VmZml4X3N0cmlwcGVkOworCUZJTEUgKm91dHB1dDsKKwlpbnQgaTsKKworCXN0cmJ1Zl9hZGRzdHIoJnByb21pc29yX25hbWUsIGtlZXBfbmFtZSk7CisJc3VmZml4X3N0cmlwcGVkID0gc3RyYnVmX3N0cmlwX3N1ZmZpeCgmcHJvbWlzb3JfbmFtZSwgIi5rZWVwIik7CisJaWYgKCFzdWZmaXhfc3RyaXBwZWQpCisJCUJVRygibmFtZSBvZiBwYWNrIGxvY2tmaWxlIHNob3VsZCBlbmQgd2l0aCAua2VlcCAod2FzICclcycpIiwKKwkJICAgIGtlZXBfbmFtZSk7CisJc3RyYnVmX2FkZHN0cigmcHJvbWlzb3JfbmFtZSwgIi5wcm9taXNvciIpOworCisJb3V0cHV0ID0geGZvcGVuKHByb21pc29yX25hbWUuYnVmLCAidyIpOworCWZvciAoaSA9IDA7IGkgPCBucl9zb3VnaHQ7IGkrKykKKwkJZnByaW50ZihvdXRwdXQsICIlcyAlc1xuIiwgb2lkX3RvX2hleCgmc291Z2h0W2ldLT5vbGRfb2lkKSwKKwkJCXNvdWdodFtpXS0+bmFtZSk7CisJZmNsb3NlKG91dHB1dCk7CisKKwlzdHJidWZfcmVsZWFzZSgmcHJvbWlzb3JfbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3BhY2soc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywKKwkJICAgIGludCB4ZFsyXSwgY2hhciAqKnBhY2tfbG9ja2ZpbGUsCisJCSAgICBzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0KQoreworCXN0cnVjdCBhc3luYyBkZW11eDsKKwlpbnQgZG9fa2VlcCA9IGFyZ3MtPmtlZXBfcGFjazsKKwljb25zdCBjaGFyICpjbWRfbmFtZTsKKwlzdHJ1Y3QgcGFja19oZWFkZXIgaGVhZGVyOworCWludCBwYXNzX2hlYWRlciA9IDA7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCByZXQ7CisKKwltZW1zZXQoJmRlbXV4LCAwLCBzaXplb2YoZGVtdXgpKTsKKwlpZiAodXNlX3NpZGViYW5kKSB7CisJCS8qIHhkW10gaXMgdGFsa2luZyB3aXRoIHVwbG9hZC1wYWNrOyBzdWJwcm9jZXNzIHJlYWRzIGZyb20KKwkJICogeGRbMF0sIHNwaXRzIG91dCBiYW5kIzIgdG8gc3RkZXJyLCBhbmQgZmVlZHMgdXMgYmFuZCMxCisJCSAqIHRocm91Z2ggZGVtdXgtPm91dC4KKwkJICovCisJCWRlbXV4LnByb2MgPSBzaWRlYmFuZF9kZW11eDsKKwkJZGVtdXguZGF0YSA9IHhkOworCQlkZW11eC5vdXQgPSAtMTsKKwkJZGVtdXguaXNvbGF0ZV9zaWdwaXBlID0gMTsKKwkJaWYgKHN0YXJ0X2FzeW5jKCZkZW11eCkpCisJCQlkaWUoXygiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiKSk7CisJfQorCWVsc2UKKwkJZGVtdXgub3V0ID0geGRbMF07CisKKwlpZiAoIWFyZ3MtPmtlZXBfcGFjayAmJiB1bnBhY2tfbGltaXQpIHsKKworCQlpZiAocmVhZF9wYWNrX2hlYWRlcihkZW11eC5vdXQsICZoZWFkZXIpKQorCQkJZGllKF8oInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiKSk7CisJCXBhc3NfaGVhZGVyID0gMTsKKwkJaWYgKG50b2hsKGhlYWRlci5oZHJfZW50cmllcykgPCB1bnBhY2tfbGltaXQpCisJCQlkb19rZWVwID0gMDsKKwkJZWxzZQorCQkJZG9fa2VlcCA9IDE7CisJfQorCisJaWYgKGFsdGVybmF0ZV9zaGFsbG93X2ZpbGUpIHsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tc2hhbGxvdy1maWxlIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIGFsdGVybmF0ZV9zaGFsbG93X2ZpbGUpOworCX0KKworCWlmIChkb19rZWVwIHx8IGFyZ3MtPmZyb21fcHJvbWlzb3IpIHsKKwkJaWYgKHBhY2tfbG9ja2ZpbGUpCisJCQljbWQub3V0ID0gLTE7CisJCWNtZF9uYW1lID0gImluZGV4LXBhY2siOworCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCBjbWRfbmFtZSk7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLXN0ZGluIik7CisJCWlmICghYXJncy0+cXVpZXQgJiYgIWFyZ3MtPm5vX3Byb2dyZXNzKQorCQkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi12Iik7CisJCWlmIChhcmdzLT51c2VfdGhpbl9wYWNrKQorCQkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tZml4LXRoaW4iKTsKKwkJaWYgKGRvX2tlZXAgJiYgKGFyZ3MtPmxvY2tfcGFjayB8fCB1bnBhY2tfbGltaXQpKSB7CisJCQljaGFyIGhvc3RuYW1lW0hPU1RfTkFNRV9NQVggKyAxXTsKKwkJCWlmICh4Z2V0aG9zdG5hbWUoaG9zdG5hbWUsIHNpemVvZihob3N0bmFtZSkpKQorCQkJCXhzbnByaW50Zihob3N0bmFtZSwgc2l6ZW9mKGhvc3RuYW1lKSwgImxvY2FsaG9zdCIpOworCQkJYXJndl9hcnJheV9wdXNoZigmY21kLmFyZ3MsCisJCQkJCSItLWtlZXA9ZmV0Y2gtcGFjayAlIlBSSXVNQVggIiBvbiAlcyIsCisJCQkJCSh1aW50bWF4X3QpZ2V0cGlkKCksIGhvc3RuYW1lKTsKKwkJfQorCQlpZiAoYXJncy0+Y2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCkKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLWNoZWNrLXNlbGYtY29udGFpbmVkLWFuZC1jb25uZWN0ZWQiKTsKKwkJLyoKKwkJICogSWYgd2UncmUgb2J0YWluaW5nIHRoZSBmaWxlbmFtZSBvZiBhIGxvY2tmaWxlLCB3ZSdsbCB1c2UKKwkJICogdGhhdCBmaWxlbmFtZSB0byB3cml0ZSBhIC5wcm9taXNvciBmaWxlIHdpdGggbW9yZQorCQkgKiBpbmZvcm1hdGlvbiBiZWxvdy4gSWYgbm90LCB3ZSBuZWVkIGluZGV4LXBhY2sgdG8gZG8gaXQgZm9yCisJCSAqIHVzLgorCQkgKi8KKwkJaWYgKCEoZG9fa2VlcCAmJiBwYWNrX2xvY2tmaWxlKSAmJiBhcmdzLT5mcm9tX3Byb21pc29yKQorCQkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tcHJvbWlzb3IiKTsKKwl9CisJZWxzZSB7CisJCWNtZF9uYW1lID0gInVucGFjay1vYmplY3RzIjsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgY21kX25hbWUpOworCQlpZiAoYXJncy0+cXVpZXQgfHwgYXJncy0+bm9fcHJvZ3Jlc3MpCisJCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLXEiKTsKKwkJYXJncy0+Y2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCA9IDA7CisJfQorCisJaWYgKHBhc3NfaGVhZGVyKQorCQlhcmd2X2FycmF5X3B1c2hmKCZjbWQuYXJncywgIi0tcGFja19oZWFkZXI9JSJQUkl1MzIiLCUiUFJJdTMyLAorCQkJCSBudG9obChoZWFkZXIuaGRyX3ZlcnNpb24pLAorCQkJCSBudG9obChoZWFkZXIuaGRyX2VudHJpZXMpKTsKKwlpZiAoZmV0Y2hfZnNja19vYmplY3RzID49IDAKKwkgICAgPyBmZXRjaF9mc2NrX29iamVjdHMKKwkgICAgOiB0cmFuc2Zlcl9mc2NrX29iamVjdHMgPj0gMAorCSAgICA/IHRyYW5zZmVyX2ZzY2tfb2JqZWN0cworCSAgICA6IDApIHsKKwkJaWYgKGFyZ3MtPmZyb21fcHJvbWlzb3IpCisJCQkvKgorCQkJICogV2UgY2Fubm90IHVzZSAtLXN0cmljdCBpbiBpbmRleC1wYWNrIGJlY2F1c2UgaXQKKwkJCSAqIGNoZWNrcyBib3RoIGJyb2tlbiBvYmplY3RzIGFuZCBsaW5rcywgYnV0IHdlIG9ubHkKKwkJCSAqIHdhbnQgdG8gY2hlY2sgZm9yIGJyb2tlbiBvYmplY3RzLgorCQkJICovCisJCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1mc2NrLW9iamVjdHMiKTsKKwkJZWxzZQorCQkJYXJndl9hcnJheV9wdXNoZigmY21kLmFyZ3MsICItLXN0cmljdCVzIiwKKwkJCQkJIGZzY2tfbXNnX3R5cGVzLmJ1Zik7CisJfQorCisJY21kLmluID0gZGVtdXgub3V0OworCWNtZC5naXRfY21kID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY21kKSkKKwkJZGllKF8oImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiAlcyIpLCBjbWRfbmFtZSk7CisJaWYgKGRvX2tlZXAgJiYgcGFja19sb2NrZmlsZSkgeworCQkqcGFja19sb2NrZmlsZSA9IGluZGV4X3BhY2tfbG9ja2ZpbGUoY21kLm91dCk7CisJCWNsb3NlKGNtZC5vdXQpOworCX0KKworCWlmICghdXNlX3NpZGViYW5kKQorCQkvKiBDbG9zZWQgYnkgc3RhcnRfY29tbWFuZCgpICovCisJCXhkWzBdID0gLTE7CisKKwlyZXQgPSBmaW5pc2hfY29tbWFuZCgmY21kKTsKKwlpZiAoIXJldCB8fCAoYXJncy0+Y2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCAmJiByZXQgPT0gMSkpCisJCWFyZ3MtPnNlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgPQorCQkJYXJncy0+Y2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCAmJgorCQkJcmV0ID09IDA7CisJZWxzZQorCQlkaWUoXygiJXMgZmFpbGVkIiksIGNtZF9uYW1lKTsKKwlpZiAodXNlX3NpZGViYW5kICYmIGZpbmlzaF9hc3luYygmZGVtdXgpKQorCQlkaWUoXygiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIpKTsKKworCS8qCisJICogTm93IHRoYXQgaW5kZXgtcGFjayBoYXMgc3VjY2VlZGVkLCB3cml0ZSB0aGUgcHJvbWlzb3IgZmlsZSB1c2luZyB0aGUKKwkgKiBvYnRhaW5lZCAua2VlcCBmaWxlbmFtZSBpZiBuZWNlc3NhcnkKKwkgKi8KKwlpZiAoZG9fa2VlcCAmJiBwYWNrX2xvY2tmaWxlICYmIGFyZ3MtPmZyb21fcHJvbWlzb3IpCisJCXdyaXRlX3Byb21pc29yX2ZpbGUoKnBhY2tfbG9ja2ZpbGUsIHNvdWdodCwgbnJfc291Z2h0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtcF9yZWZfYnlfbmFtZShjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IHJlZiAqYSA9ICooKGNvbnN0IHN0cnVjdCByZWYgKiopYV8pOworCWNvbnN0IHN0cnVjdCByZWYgKmIgPSAqKChjb25zdCBzdHJ1Y3QgcmVmICoqKWJfKTsKKwlyZXR1cm4gc3RyY21wKGEtPm5hbWUsIGItPm5hbWUpOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZG9fZmV0Y2hfcGFjayhzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzICphcmdzLAorCQkJCSBpbnQgZmRbMl0sCisJCQkJIGNvbnN0IHN0cnVjdCByZWYgKm9yaWdfcmVmLAorCQkJCSBzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0LAorCQkJCSBzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSwKKwkJCQkgY2hhciAqKnBhY2tfbG9ja2ZpbGUpCit7CisJc3RydWN0IHJlcG9zaXRvcnkgKnIgPSB0aGVfcmVwb3NpdG9yeTsKKwlzdHJ1Y3QgcmVmICpyZWYgPSBjb3B5X3JlZl9saXN0KG9yaWdfcmVmKTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljb25zdCBjaGFyICphZ2VudF9mZWF0dXJlOworCWludCBhZ2VudF9sZW47CisJc3RydWN0IGZldGNoX25lZ290aWF0b3IgbmVnb3RpYXRvcl9hbGxvYzsKKwlzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvcjsKKworCWlmIChhcmdzLT5ub19kZXBlbmRlbnRzKSB7CisJCW5lZ290aWF0b3IgPSBOVUxMOworCX0gZWxzZSB7CisJCW5lZ290aWF0b3IgPSAmbmVnb3RpYXRvcl9hbGxvYzsKKwkJZmV0Y2hfbmVnb3RpYXRvcl9pbml0KHIsIG5lZ290aWF0b3IpOworCX0KKworCXNvcnRfcmVmX2xpc3QoJnJlZiwgcmVmX2NvbXBhcmVfbmFtZSk7CisJUVNPUlQoc291Z2h0LCBucl9zb3VnaHQsIGNtcF9yZWZfYnlfbmFtZSk7CisKKwlpZiAoKGFnZW50X2ZlYXR1cmUgPSBzZXJ2ZXJfZmVhdHVyZV92YWx1ZSgiYWdlbnQiLCAmYWdlbnRfbGVuKSkpIHsKKwkJYWdlbnRfc3VwcG9ydGVkID0gMTsKKwkJaWYgKGFnZW50X2xlbikKKwkJCXByaW50X3ZlcmJvc2UoYXJncywgXygiU2VydmVyIHZlcnNpb24gaXMgJS4qcyIpLAorCQkJCSAgICAgIGFnZW50X2xlbiwgYWdlbnRfZmVhdHVyZSk7CisJfQorCisJaWYgKHNlcnZlcl9zdXBwb3J0cygic2hhbGxvdyIpKQorCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyAlcyIpLCAic2hhbGxvdyIpOworCWVsc2UgaWYgKGFyZ3MtPmRlcHRoID4gMCB8fCBpc19yZXBvc2l0b3J5X3NoYWxsb3cocikpCisJCWRpZShfKCJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiKSk7CisJaWYgKGFyZ3MtPmRlcHRoID4gMCB8fCBhcmdzLT5kZWVwZW5fc2luY2UgfHwgYXJncy0+ZGVlcGVuX25vdCkKKwkJYXJncy0+ZGVlcGVuID0gMTsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJtdWx0aV9hY2tfZGV0YWlsZWQiKSkgeworCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyAlcyIpLCAibXVsdGlfYWNrX2RldGFpbGVkIik7CisJCW11bHRpX2FjayA9IDI7CisJCWlmIChzZXJ2ZXJfc3VwcG9ydHMoIm5vLWRvbmUiKSkgeworCQkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgJXMiKSwgIm5vLWRvbmUiKTsKKwkJCWlmIChhcmdzLT5zdGF0ZWxlc3NfcnBjKQorCQkJCW5vX2RvbmUgPSAxOworCQl9CisJfQorCWVsc2UgaWYgKHNlcnZlcl9zdXBwb3J0cygibXVsdGlfYWNrIikpIHsKKwkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgJXMiKSwgIm11bHRpX2FjayIpOworCQltdWx0aV9hY2sgPSAxOworCX0KKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJzaWRlLWJhbmQtNjRrIikpIHsKKwkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgJXMiKSwgInNpZGUtYmFuZC02NGsiKTsKKwkJdXNlX3NpZGViYW5kID0gMjsKKwl9CisJZWxzZSBpZiAoc2VydmVyX3N1cHBvcnRzKCJzaWRlLWJhbmQiKSkgeworCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyAlcyIpLCAic2lkZS1iYW5kIik7CisJCXVzZV9zaWRlYmFuZCA9IDE7CisJfQorCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImFsbG93LXRpcC1zaGExLWluLXdhbnQiKSkgeworCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyAlcyIpLCAiYWxsb3ctdGlwLXNoYTEtaW4td2FudCIpOworCQlhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgfD0gQUxMT1dfVElQX1NIQTE7CisJfQorCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQiKSkgeworCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyAlcyIpLCAiYWxsb3ctcmVhY2hhYmxlLXNoYTEtaW4td2FudCIpOworCQlhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgfD0gQUxMT1dfUkVBQ0hBQkxFX1NIQTE7CisJfQorCWlmIChzZXJ2ZXJfc3VwcG9ydHMoInRoaW4tcGFjayIpKQorCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyAlcyIpLCAidGhpbi1wYWNrIik7CisJZWxzZQorCQlhcmdzLT51c2VfdGhpbl9wYWNrID0gMDsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJuby1wcm9ncmVzcyIpKQorCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyAlcyIpLCAibm8tcHJvZ3Jlc3MiKTsKKwllbHNlCisJCWFyZ3MtPm5vX3Byb2dyZXNzID0gMDsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJpbmNsdWRlLXRhZyIpKQorCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyAlcyIpLCAiaW5jbHVkZS10YWciKTsKKwllbHNlCisJCWFyZ3MtPmluY2x1ZGVfdGFnID0gMDsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJvZnMtZGVsdGEiKSkKKwkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgJXMiKSwgIm9mcy1kZWx0YSIpOworCWVsc2UKKwkJcHJlZmVyX29mc19kZWx0YSA9IDA7CisKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJmaWx0ZXIiKSkgeworCQlzZXJ2ZXJfc3VwcG9ydHNfZmlsdGVyaW5nID0gMTsKKwkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgJXMiKSwgImZpbHRlciIpOworCX0gZWxzZSBpZiAoYXJncy0+ZmlsdGVyX29wdGlvbnMuY2hvaWNlKSB7CisJCXdhcm5pbmcoImZpbHRlcmluZyBub3QgcmVjb2duaXplZCBieSBzZXJ2ZXIsIGlnbm9yaW5nIik7CisJfQorCisJaWYgKHNlcnZlcl9zdXBwb3J0cygiZGVlcGVuLXNpbmNlIikpIHsKKwkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgJXMiKSwgImRlZXBlbi1zaW5jZSIpOworCQlkZWVwZW5fc2luY2Vfb2sgPSAxOworCX0gZWxzZSBpZiAoYXJncy0+ZGVlcGVuX3NpbmNlKQorCQlkaWUoXygiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LXNpbmNlIikpOworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImRlZXBlbi1ub3QiKSkgeworCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyAlcyIpLCAiZGVlcGVuLW5vdCIpOworCQlkZWVwZW5fbm90X29rID0gMTsKKwl9IGVsc2UgaWYgKGFyZ3MtPmRlZXBlbl9ub3QpCisJCWRpZShfKCJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIpKTsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJkZWVwZW4tcmVsYXRpdmUiKSkKKwkJcHJpbnRfdmVyYm9zZShhcmdzLCBfKCJTZXJ2ZXIgc3VwcG9ydHMgJXMiKSwgImRlZXBlbi1yZWxhdGl2ZSIpOworCWVsc2UgaWYgKGFyZ3MtPmRlZXBlbl9yZWxhdGl2ZSkKKwkJZGllKF8oIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIikpOworCisJaWYgKCFhcmdzLT5ub19kZXBlbmRlbnRzKSB7CisJCW1hcmtfY29tcGxldGVfYW5kX2NvbW1vbl9yZWYobmVnb3RpYXRvciwgYXJncywgJnJlZik7CisJCWZpbHRlcl9yZWZzKGFyZ3MsICZyZWYsIHNvdWdodCwgbnJfc291Z2h0KTsKKwkJaWYgKGV2ZXJ5dGhpbmdfbG9jYWwoYXJncywgJnJlZikpIHsKKwkJCXBhY2tldF9mbHVzaChmZFsxXSk7CisJCQlnb3RvIGFsbF9kb25lOworCQl9CisJfSBlbHNlIHsKKwkJZmlsdGVyX3JlZnMoYXJncywgJnJlZiwgc291Z2h0LCBucl9zb3VnaHQpOworCX0KKwlpZiAoZmluZF9jb21tb24obmVnb3RpYXRvciwgYXJncywgZmQsICZvaWQsIHJlZikgPCAwKQorCQlpZiAoIWFyZ3MtPmtlZXBfcGFjaykKKwkJCS8qIFdoZW4gY2xvbmluZywgaXQgaXMgbm90IHVudXN1YWwgdG8gaGF2ZQorCQkJICogbm8gY29tbW9uIGNvbW1pdC4KKwkJCSAqLworCQkJd2FybmluZyhfKCJubyBjb21tb24gY29tbWl0cyIpKTsKKworCWlmIChhcmdzLT5zdGF0ZWxlc3NfcnBjKQorCQlwYWNrZXRfZmx1c2goZmRbMV0pOworCWlmIChhcmdzLT5kZWVwZW4pCisJCXNldHVwX2FsdGVybmF0ZV9zaGFsbG93KCZzaGFsbG93X2xvY2ssICZhbHRlcm5hdGVfc2hhbGxvd19maWxlLAorCQkJCQlOVUxMKTsKKwllbHNlIGlmIChzaS0+bnJfb3VycyB8fCBzaS0+bnJfdGhlaXJzKQorCQlhbHRlcm5hdGVfc2hhbGxvd19maWxlID0gc2V0dXBfdGVtcG9yYXJ5X3NoYWxsb3coc2ktPnNoYWxsb3cpOworCWVsc2UKKwkJYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSA9IE5VTEw7CisJaWYgKGdldF9wYWNrKGFyZ3MsIGZkLCBwYWNrX2xvY2tmaWxlLCBzb3VnaHQsIG5yX3NvdWdodCkpCisJCWRpZShfKCJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIpKTsKKworIGFsbF9kb25lOgorCWlmIChuZWdvdGlhdG9yKQorCQluZWdvdGlhdG9yLT5yZWxlYXNlKG5lZ290aWF0b3IpOworCXJldHVybiByZWY7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9zaGFsbG93X3JlcXVlc3RzKHN0cnVjdCBzdHJidWYgKnJlcV9idWYsCisJCQkJIGNvbnN0IHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MpCit7CisJaWYgKGlzX3JlcG9zaXRvcnlfc2hhbGxvdyh0aGVfcmVwb3NpdG9yeSkpCisJCXdyaXRlX3NoYWxsb3dfY29tbWl0cyhyZXFfYnVmLCAxLCBOVUxMKTsKKwlpZiAoYXJncy0+ZGVwdGggPiAwKQorCQlwYWNrZXRfYnVmX3dyaXRlKHJlcV9idWYsICJkZWVwZW4gJWQiLCBhcmdzLT5kZXB0aCk7CisJaWYgKGFyZ3MtPmRlZXBlbl9zaW5jZSkgeworCQl0aW1lc3RhbXBfdCBtYXhfYWdlID0gYXBwcm94aWRhdGUoYXJncy0+ZGVlcGVuX3NpbmNlKTsKKwkJcGFja2V0X2J1Zl93cml0ZShyZXFfYnVmLCAiZGVlcGVuLXNpbmNlICUiUFJJdGltZSwgbWF4X2FnZSk7CisJfQorCWlmIChhcmdzLT5kZWVwZW5fbm90KSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgYXJncy0+ZGVlcGVuX25vdC0+bnI7IGkrKykgeworCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnMgPSBhcmdzLT5kZWVwZW5fbm90LT5pdGVtcyArIGk7CisJCQlwYWNrZXRfYnVmX3dyaXRlKHJlcV9idWYsICJkZWVwZW4tbm90ICVzIiwgcy0+c3RyaW5nKTsKKwkJfQorCX0KKwlpZiAoYXJncy0+ZGVlcGVuX3JlbGF0aXZlKQorCQlwYWNrZXRfYnVmX3dyaXRlKHJlcV9idWYsICJkZWVwZW4tcmVsYXRpdmVcbiIpOworfQorCitzdGF0aWMgdm9pZCBhZGRfd2FudHMoaW50IG5vX2RlcGVuZGVudHMsIGNvbnN0IHN0cnVjdCByZWYgKndhbnRzLCBzdHJ1Y3Qgc3RyYnVmICpyZXFfYnVmKQoreworCWludCB1c2VfcmVmX2luX3dhbnQgPSBzZXJ2ZXJfc3VwcG9ydHNfZmVhdHVyZSgiZmV0Y2giLCAicmVmLWluLXdhbnQiLCAwKTsKKworCWZvciAoIDsgd2FudHMgOyB3YW50cyA9IHdhbnRzLT5uZXh0KSB7CisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnJlbW90ZSA9ICZ3YW50cy0+b2xkX29pZDsKKwkJc3RydWN0IG9iamVjdCAqbzsKKworCQkvKgorCQkgKiBJZiB0aGF0IG9iamVjdCBpcyBjb21wbGV0ZSAoaS5lLiBpdCBpcyBhbiBhbmNlc3RvciBvZiBhCisJCSAqIGxvY2FsIHJlZiksIHdlIHRlbGwgdGhlbSB3ZSBoYXZlIGl0IGJ1dCBkbyBub3QgaGF2ZSB0bworCQkgKiB0ZWxsIHRoZW0gYWJvdXQgaXRzIGFuY2VzdG9ycywgd2hpY2ggdGhleSBhbHJlYWR5IGtub3cKKwkJICogYWJvdXQuCisJCSAqCisJCSAqIFdlIHVzZSBsb29rdXBfb2JqZWN0IGhlcmUgYmVjYXVzZSB3ZSBhcmUgb25seQorCQkgKiBpbnRlcmVzdGVkIGluIHRoZSBjYXNlIHdlICprbm93KiB0aGUgb2JqZWN0IGlzCisJCSAqIHJlYWNoYWJsZSBhbmQgd2UgaGF2ZSBhbHJlYWR5IHNjYW5uZWQgaXQuCisJCSAqCisJCSAqIERvIHRoaXMgb25seSBpZiBhcmdzLT5ub19kZXBlbmRlbnRzIGlzIGZhbHNlIChpZiBpdCBpcyB0cnVlLAorCQkgKiB3ZSBjYW5ub3QgdHJ1c3QgdGhlIG9iamVjdCBmbGFncykuCisJCSAqLworCQlpZiAoIW5vX2RlcGVuZGVudHMgJiYKKwkJICAgICgobyA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksIHJlbW90ZSkpICE9IE5VTEwpICYmCisJCSAgICAoby0+ZmxhZ3MgJiBDT01QTEVURSkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCF1c2VfcmVmX2luX3dhbnQgfHwgd2FudHMtPmV4YWN0X29pZCkKKwkJCXBhY2tldF9idWZfd3JpdGUocmVxX2J1ZiwgIndhbnQgJXNcbiIsIG9pZF90b19oZXgocmVtb3RlKSk7CisJCWVsc2UKKwkJCXBhY2tldF9idWZfd3JpdGUocmVxX2J1ZiwgIndhbnQtcmVmICVzXG4iLCB3YW50cy0+bmFtZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfY29tbW9uKHN0cnVjdCBzdHJidWYgKnJlcV9idWYsIHN0cnVjdCBvaWRzZXQgKmNvbW1vbikKK3sKKwlzdHJ1Y3Qgb2lkc2V0X2l0ZXIgaXRlcjsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQ7CisJb2lkc2V0X2l0ZXJfaW5pdChjb21tb24sICZpdGVyKTsKKworCXdoaWxlICgob2lkID0gb2lkc2V0X2l0ZXJfbmV4dCgmaXRlcikpKSB7CisJCXBhY2tldF9idWZfd3JpdGUocmVxX2J1ZiwgImhhdmUgJXNcbiIsIG9pZF90b19oZXgob2lkKSk7CisJfQorfQorCitzdGF0aWMgaW50IGFkZF9oYXZlcyhzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvciwKKwkJICAgICBpbnQgc2Vlbl9hY2ssCisJCSAgICAgc3RydWN0IHN0cmJ1ZiAqcmVxX2J1ZiwKKwkJICAgICBpbnQgKmhhdmVzX3RvX3NlbmQsIGludCAqaW5fdmFpbikKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaGF2ZXNfYWRkZWQgPSAwOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKworCXdoaWxlICgob2lkID0gbmVnb3RpYXRvci0+bmV4dChuZWdvdGlhdG9yKSkpIHsKKwkJcGFja2V0X2J1Zl93cml0ZShyZXFfYnVmLCAiaGF2ZSAlc1xuIiwgb2lkX3RvX2hleChvaWQpKTsKKwkJaWYgKCsraGF2ZXNfYWRkZWQgPj0gKmhhdmVzX3RvX3NlbmQpCisJCQlicmVhazsKKwl9CisKKwkqaW5fdmFpbiArPSBoYXZlc19hZGRlZDsKKwlpZiAoIWhhdmVzX2FkZGVkIHx8IChzZWVuX2FjayAmJiAqaW5fdmFpbiA+PSBNQVhfSU5fVkFJTikpIHsKKwkJLyogU2VuZCBEb25lICovCisJCXBhY2tldF9idWZfd3JpdGUocmVxX2J1ZiwgImRvbmVcbiIpOworCQlyZXQgPSAxOworCX0KKworCS8qIEluY3JlYXNlIGhhdmVzIHRvIHNlbmQgb24gbmV4dCByb3VuZCAqLworCSpoYXZlc190b19zZW5kID0gbmV4dF9mbHVzaCgxLCAqaGF2ZXNfdG9fc2VuZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNlbmRfZmV0Y2hfcmVxdWVzdChzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvciwgaW50IGZkX291dCwKKwkJCSAgICAgIHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVmICp3YW50cywgc3RydWN0IG9pZHNldCAqY29tbW9uLAorCQkJICAgICAgaW50ICpoYXZlc190b19zZW5kLCBpbnQgKmluX3ZhaW4sCisJCQkgICAgICBpbnQgc2lkZWJhbmRfYWxsLCBpbnQgc2Vlbl9hY2spCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHN0cmJ1ZiByZXFfYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoc2VydmVyX3N1cHBvcnRzX3YyKCJmZXRjaCIsIDEpKQorCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAiY29tbWFuZD1mZXRjaCIpOworCWlmIChzZXJ2ZXJfc3VwcG9ydHNfdjIoImFnZW50IiwgMCkpCisJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJhZ2VudD0lcyIsIGdpdF91c2VyX2FnZW50X3Nhbml0aXplZCgpKTsKKwlpZiAoYXJncy0+c2VydmVyX29wdGlvbnMgJiYgYXJncy0+c2VydmVyX29wdGlvbnMtPm5yICYmCisJICAgIHNlcnZlcl9zdXBwb3J0c192Migic2VydmVyLW9wdGlvbiIsIDEpKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgYXJncy0+c2VydmVyX29wdGlvbnMtPm5yOyBpKyspCisJCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAic2VydmVyLW9wdGlvbj0lcyIsCisJCQkJCSBhcmdzLT5zZXJ2ZXJfb3B0aW9ucy0+aXRlbXNbaV0uc3RyaW5nKTsKKwl9CisKKwlwYWNrZXRfYnVmX2RlbGltKCZyZXFfYnVmKTsKKwlpZiAoYXJncy0+dXNlX3RoaW5fcGFjaykKKwkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgInRoaW4tcGFjayIpOworCWlmIChhcmdzLT5ub19wcm9ncmVzcykKKwkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgIm5vLXByb2dyZXNzIik7CisJaWYgKGFyZ3MtPmluY2x1ZGVfdGFnKQorCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAiaW5jbHVkZS10YWciKTsKKwlpZiAocHJlZmVyX29mc19kZWx0YSkKKwkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgIm9mcy1kZWx0YSIpOworCWlmIChzaWRlYmFuZF9hbGwpCisJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJzaWRlYmFuZC1hbGwiKTsKKworCS8qIEFkZCBzaGFsbG93LWluZm8gYW5kIGRlZXBlbiByZXF1ZXN0ICovCisJaWYgKHNlcnZlcl9zdXBwb3J0c19mZWF0dXJlKCJmZXRjaCIsICJzaGFsbG93IiwgMCkpCisJCWFkZF9zaGFsbG93X3JlcXVlc3RzKCZyZXFfYnVmLCBhcmdzKTsKKwllbHNlIGlmIChpc19yZXBvc2l0b3J5X3NoYWxsb3codGhlX3JlcG9zaXRvcnkpIHx8IGFyZ3MtPmRlZXBlbikKKwkJZGllKF8oIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgcmVxdWVzdHMiKSk7CisKKwkvKiBBZGQgZmlsdGVyICovCisJaWYgKHNlcnZlcl9zdXBwb3J0c19mZWF0dXJlKCJmZXRjaCIsICJmaWx0ZXIiLCAwKSAmJgorCSAgICBhcmdzLT5maWx0ZXJfb3B0aW9ucy5jaG9pY2UpIHsKKwkJY29uc3QgY2hhciAqc3BlYyA9CisJCQlleHBhbmRfbGlzdF9vYmplY3RzX2ZpbHRlcl9zcGVjKCZhcmdzLT5maWx0ZXJfb3B0aW9ucyk7CisJCXByaW50X3ZlcmJvc2UoYXJncywgXygiU2VydmVyIHN1cHBvcnRzIGZpbHRlciIpKTsKKwkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgImZpbHRlciAlcyIsIHNwZWMpOworCX0gZWxzZSBpZiAoYXJncy0+ZmlsdGVyX29wdGlvbnMuY2hvaWNlKSB7CisJCXdhcm5pbmcoImZpbHRlcmluZyBub3QgcmVjb2duaXplZCBieSBzZXJ2ZXIsIGlnbm9yaW5nIik7CisJfQorCisJLyogYWRkIHdhbnRzICovCisJYWRkX3dhbnRzKGFyZ3MtPm5vX2RlcGVuZGVudHMsIHdhbnRzLCAmcmVxX2J1Zik7CisKKwlpZiAoYXJncy0+bm9fZGVwZW5kZW50cykgeworCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAiZG9uZSIpOworCQlyZXQgPSAxOworCX0gZWxzZSB7CisJCS8qIEFkZCBhbGwgb2YgdGhlIGNvbW1vbiBjb21taXRzIHdlJ3ZlIGZvdW5kIGluIHByZXZpb3VzIHJvdW5kcyAqLworCQlhZGRfY29tbW9uKCZyZXFfYnVmLCBjb21tb24pOworCisJCS8qIEFkZCBpbml0aWFsIGhhdmVzICovCisJCXJldCA9IGFkZF9oYXZlcyhuZWdvdGlhdG9yLCBzZWVuX2FjaywgJnJlcV9idWYsCisJCQkJaGF2ZXNfdG9fc2VuZCwgaW5fdmFpbik7CisJfQorCisJLyogU2VuZCByZXF1ZXN0ICovCisJcGFja2V0X2J1Zl9mbHVzaCgmcmVxX2J1Zik7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmRfb3V0LCByZXFfYnVmLmJ1ZiwgcmVxX2J1Zi5sZW4pIDwgMCkKKwkJZGllX2Vycm5vKF8oInVuYWJsZSB0byB3cml0ZSByZXF1ZXN0IHRvIHJlbW90ZSIpKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZyZXFfYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUHJvY2Vzc2VzIGEgc2VjdGlvbiBoZWFkZXIgaW4gYSBzZXJ2ZXIncyByZXNwb25zZSBhbmQgY2hlY2tzIGlmIGl0IG1hdGNoZXMKKyAqIGBzZWN0aW9uYC4gIElmIHRoZSB2YWx1ZSBvZiBgcGVla2AgaXMgMSwgdGhlIGhlYWRlciBsaW5lIHdpbGwgYmUgcGVla2VkIChhbmQKKyAqIG5vdCBjb25zdW1lZCk7IGlmIDAsIHRoZSBsaW5lIHdpbGwgYmUgY29uc3VtZWQgYW5kIHRoZSBmdW5jdGlvbiB3aWxsIGRpZSBpZgorICogdGhlIHNlY3Rpb24gaGVhZGVyIGRvZXNuJ3QgbWF0Y2ggd2hhdCB3YXMgZXhwZWN0ZWQuCisgKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19zZWN0aW9uX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVhZGVyLAorCQkJCSAgY29uc3QgY2hhciAqc2VjdGlvbiwgaW50IHBlZWspCit7CisJaW50IHJldDsKKworCWlmIChwYWNrZXRfcmVhZGVyX3BlZWsocmVhZGVyKSAhPSBQQUNLRVRfUkVBRF9OT1JNQUwpCisJCWRpZShfKCJlcnJvciByZWFkaW5nIHNlY3Rpb24gaGVhZGVyICclcyciKSwgc2VjdGlvbik7CisKKwlyZXQgPSAhc3RyY21wKHJlYWRlci0+bGluZSwgc2VjdGlvbik7CisKKwlpZiAoIXBlZWspIHsKKwkJaWYgKCFyZXQpCisJCQlkaWUoXygiZXhwZWN0ZWQgJyVzJywgcmVjZWl2ZWQgJyVzJyIpLAorCQkJICAgIHNlY3Rpb24sIHJlYWRlci0+bGluZSk7CisJCXBhY2tldF9yZWFkZXJfcmVhZChyZWFkZXIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2VudW0gY29tbW9uX2ZvdW5kIHsKKwkvKgorCSAqIE5vIGNvbW1pdCB3YXMgZm91bmQgdG8gYmUgcG9zc2Vzc2VkIGJ5IGJvdGggdGhlIGNsaWVudCBhbmQgdGhlCisJICogc2VydmVyLCBhbmQgInJlYWR5IiB3YXMgbm90IHJlY2VpdmVkLgorCSAqLworCU5PX0NPTU1PTl9GT1VORCwKKworCS8qCisJICogQXQgbGVhc3Qgb25lIGNvbW1pdCB3YXMgZm91bmQgdG8gYmUgcG9zc2Vzc2VkIGJ5IGJvdGggdGhlIGNsaWVudCBhbmQKKwkgKiB0aGUgc2VydmVyLCBhbmQgInJlYWR5IiB3YXMgbm90IHJlY2VpdmVkLgorCSAqLworCUNPTU1PTl9GT1VORCwKKworCS8qCisJICogInJlYWR5IiB3YXMgcmVjZWl2ZWQsIGluZGljYXRpbmcgdGhhdCB0aGUgc2VydmVyIGlzIHJlYWR5IHRvIHNlbmQKKwkgKiB0aGUgcGFja2ZpbGUgd2l0aG91dCBhbnkgZnVydGhlciBuZWdvdGlhdGlvbi4KKwkgKi8KKwlSRUFEWQorfTsKKworc3RhdGljIGVudW0gY29tbW9uX2ZvdW5kIHByb2Nlc3NfYWNrcyhzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvciwKKwkJCQkgICAgICBzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVhZGVyLAorCQkJCSAgICAgIHN0cnVjdCBvaWRzZXQgKmNvbW1vbikKK3sKKwkvKiByZWNlaXZlZCAqLworCWludCByZWNlaXZlZF9yZWFkeSA9IDA7CisJaW50IHJlY2VpdmVkX2FjayA9IDA7CisKKwlwcm9jZXNzX3NlY3Rpb25faGVhZGVyKHJlYWRlciwgImFja25vd2xlZGdtZW50cyIsIDApOworCXdoaWxlIChwYWNrZXRfcmVhZGVyX3JlYWQocmVhZGVyKSA9PSBQQUNLRVRfUkVBRF9OT1JNQUwpIHsKKwkJY29uc3QgY2hhciAqYXJnOworCisJCWlmICghc3RyY21wKHJlYWRlci0+bGluZSwgIk5BSyIpKQorCQkJY29udGludWU7CisKKwkJaWYgKHNraXBfcHJlZml4KHJlYWRlci0+bGluZSwgIkFDSyAiLCAmYXJnKSkgeworCQkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCQlyZWNlaXZlZF9hY2sgPSAxOworCQkJaWYgKCFnZXRfb2lkX2hleChhcmcsICZvaWQpKSB7CisJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQkJCW9pZHNldF9pbnNlcnQoY29tbW9uLCAmb2lkKTsKKwkJCQljb21taXQgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwkJCQlpZiAobmVnb3RpYXRvcikKKwkJCQkJbmVnb3RpYXRvci0+YWNrKG5lZ290aWF0b3IsIGNvbW1pdCk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghc3RyY21wKHJlYWRlci0+bGluZSwgInJlYWR5IikpIHsKKwkJCXJlY2VpdmVkX3JlYWR5ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZGllKF8oInVuZXhwZWN0ZWQgYWNrbm93bGVkZ21lbnQgbGluZTogJyVzJyIpLCByZWFkZXItPmxpbmUpOworCX0KKworCWlmIChyZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9GTFVTSCAmJgorCSAgICByZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9ERUxJTSkKKwkJZGllKF8oImVycm9yIHByb2Nlc3NpbmcgYWNrczogJWQiKSwgcmVhZGVyLT5zdGF0dXMpOworCisJLyoKKwkgKiBJZiBhbiAiYWNrbm93bGVkZ21lbnRzIiBzZWN0aW9uIGlzIHNlbnQsIGEgcGFja2ZpbGUgaXMgc2VudCBpZiBhbmQKKwkgKiBvbmx5IGlmICJyZWFkeSIgd2FzIHNlbnQgaW4gdGhpcyBzZWN0aW9uLiBUaGUgb3RoZXIgc2VjdGlvbnMKKwkgKiAoInNoYWxsb3ctaW5mbyIgYW5kICJ3YW50ZWQtcmVmcyIpIGFyZSBzZW50IG9ubHkgaWYgYSBwYWNrZmlsZSBpcworCSAqIHNlbnQuIFRoZXJlZm9yZSwgYSBERUxJTSBpcyBleHBlY3RlZCBpZiAicmVhZHkiIGlzIHNlbnQsIGFuZCBhIEZMVVNICisJICogb3RoZXJ3aXNlLgorCSAqLworCWlmIChyZWNlaXZlZF9yZWFkeSAmJiByZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9ERUxJTSkKKwkJZGllKF8oImV4cGVjdGVkIHBhY2tmaWxlIHRvIGJlIHNlbnQgYWZ0ZXIgJ3JlYWR5JyIpKTsKKwlpZiAoIXJlY2VpdmVkX3JlYWR5ICYmIHJlYWRlci0+c3RhdHVzICE9IFBBQ0tFVF9SRUFEX0ZMVVNIKQorCQlkaWUoXygiZXhwZWN0ZWQgbm8gb3RoZXIgc2VjdGlvbnMgdG8gYmUgc2VudCBhZnRlciBubyAncmVhZHknIikpOworCisJcmV0dXJuIHJlY2VpdmVkX3JlYWR5ID8gUkVBRFkgOgorCQkocmVjZWl2ZWRfYWNrID8gQ09NTU9OX0ZPVU5EIDogTk9fQ09NTU9OX0ZPVU5EKTsKK30KKworc3RhdGljIHZvaWQgcmVjZWl2ZV9zaGFsbG93X2luZm8oc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywKKwkJCQkgc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlciwKKwkJCQkgc3RydWN0IG9pZF9hcnJheSAqc2hhbGxvd3MsCisJCQkJIHN0cnVjdCBzaGFsbG93X2luZm8gKnNpKQoreworCWludCB1bnNoYWxsb3dfcmVjZWl2ZWQgPSAwOworCisJcHJvY2Vzc19zZWN0aW9uX2hlYWRlcihyZWFkZXIsICJzaGFsbG93LWluZm8iLCAwKTsKKwl3aGlsZSAocGFja2V0X3JlYWRlcl9yZWFkKHJlYWRlcikgPT0gUEFDS0VUX1JFQURfTk9STUFMKSB7CisJCWNvbnN0IGNoYXIgKmFyZzsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJaWYgKHNraXBfcHJlZml4KHJlYWRlci0+bGluZSwgInNoYWxsb3cgIiwgJmFyZykpIHsKKwkJCWlmIChnZXRfb2lkX2hleChhcmcsICZvaWQpKQorCQkJCWRpZShfKCJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiKSwgcmVhZGVyLT5saW5lKTsKKwkJCW9pZF9hcnJheV9hcHBlbmQoc2hhbGxvd3MsICZvaWQpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KHJlYWRlci0+bGluZSwgInVuc2hhbGxvdyAiLCAmYXJnKSkgeworCQkJaWYgKGdldF9vaWRfaGV4KGFyZywgJm9pZCkpCisJCQkJZGllKF8oImludmFsaWQgdW5zaGFsbG93IGxpbmU6ICVzIiksIHJlYWRlci0+bGluZSk7CisJCQlpZiAoIWxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvaWQpKQorCQkJCWRpZShfKCJvYmplY3Qgbm90IGZvdW5kOiAlcyIpLCByZWFkZXItPmxpbmUpOworCQkJLyogbWFrZSBzdXJlIHRoYXQgaXQgaXMgcGFyc2VkIGFzIHNoYWxsb3cgKi8KKwkJCWlmICghcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKSkKKwkJCQlkaWUoXygiZXJyb3IgaW4gb2JqZWN0OiAlcyIpLCByZWFkZXItPmxpbmUpOworCQkJaWYgKHVucmVnaXN0ZXJfc2hhbGxvdygmb2lkKSkKKwkJCQlkaWUoXygibm8gc2hhbGxvdyBmb3VuZDogJXMiKSwgcmVhZGVyLT5saW5lKTsKKwkJCXVuc2hhbGxvd19yZWNlaXZlZCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlkaWUoXygiZXhwZWN0ZWQgc2hhbGxvdy91bnNoYWxsb3csIGdvdCAlcyIpLCByZWFkZXItPmxpbmUpOworCX0KKworCWlmIChyZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9GTFVTSCAmJgorCSAgICByZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9ERUxJTSkKKwkJZGllKF8oImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIpLCByZWFkZXItPnN0YXR1cyk7CisKKwlpZiAoYXJncy0+ZGVlcGVuIHx8IHVuc2hhbGxvd19yZWNlaXZlZCkgeworCQkvKgorCQkgKiBUcmVhdCB0aGVzZSBhcyBzaGFsbG93IGxpbmVzIGNhdXNlZCBieSBvdXIgZGVwdGggc2V0dGluZ3MuCisJCSAqIEluIHYwLCB0aGVzZSBsaW5lcyBjYW5ub3QgY2F1c2UgcmVmcyB0byBiZSByZWplY3RlZDsgZG8gdGhlCisJCSAqIHNhbWUuCisJCSAqLworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2hhbGxvd3MtPm5yOyBpKyspCisJCQlyZWdpc3Rlcl9zaGFsbG93KHRoZV9yZXBvc2l0b3J5LCAmc2hhbGxvd3MtPm9pZFtpXSk7CisJCXNldHVwX2FsdGVybmF0ZV9zaGFsbG93KCZzaGFsbG93X2xvY2ssICZhbHRlcm5hdGVfc2hhbGxvd19maWxlLAorCQkJCQlOVUxMKTsKKwkJYXJncy0+ZGVlcGVuID0gMTsKKwl9IGVsc2UgaWYgKHNoYWxsb3dzLT5ucikgeworCQkvKgorCQkgKiBUcmVhdCB0aGVzZSBhcyBzaGFsbG93IGxpbmVzIGNhdXNlZCBieSB0aGUgcmVtb3RlIGJlaW5nCisJCSAqIHNoYWxsb3cuIEluIHYwLCByZW1vdGUgcmVmcyB0aGF0IHJlYWNoIHRoZXNlIG9iamVjdHMgYXJlCisJCSAqIHJlamVjdGVkICh1bmxlc3MgLS11cGRhdGUtc2hhbGxvdyBpcyBzZXQpOyBkbyB0aGUgc2FtZS4KKwkJICovCisJCXByZXBhcmVfc2hhbGxvd19pbmZvKHNpLCBzaGFsbG93cyk7CisJCWlmIChzaS0+bnJfb3VycyB8fCBzaS0+bnJfdGhlaXJzKQorCQkJYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSA9CisJCQkJc2V0dXBfdGVtcG9yYXJ5X3NoYWxsb3coc2ktPnNoYWxsb3cpOworCQllbHNlCisJCQlhbHRlcm5hdGVfc2hhbGxvd19maWxlID0gTlVMTDsKKwl9IGVsc2UgeworCQlhbHRlcm5hdGVfc2hhbGxvd19maWxlID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY21wX25hbWVfcmVmKGNvbnN0IHZvaWQgKm5hbWUsIGNvbnN0IHZvaWQgKnJlZikKK3sKKwlyZXR1cm4gc3RyY21wKG5hbWUsICgqKHN0cnVjdCByZWYgKiopcmVmKS0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlY2VpdmVfd2FudGVkX3JlZnMoc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlciwKKwkJCQlzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0KQoreworCXByb2Nlc3Nfc2VjdGlvbl9oZWFkZXIocmVhZGVyLCAid2FudGVkLXJlZnMiLCAwKTsKKwl3aGlsZSAocGFja2V0X3JlYWRlcl9yZWFkKHJlYWRlcikgPT0gUEFDS0VUX1JFQURfTk9STUFMKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljb25zdCBjaGFyICplbmQ7CisJCXN0cnVjdCByZWYgKipmb3VuZDsKKworCQlpZiAocGFyc2Vfb2lkX2hleChyZWFkZXItPmxpbmUsICZvaWQsICZlbmQpIHx8ICplbmQrKyAhPSAnICcpCisJCQlkaWUoXygiZXhwZWN0ZWQgd2FudGVkLXJlZiwgZ290ICclcyciKSwgcmVhZGVyLT5saW5lKTsKKworCQlmb3VuZCA9IGJzZWFyY2goZW5kLCBzb3VnaHQsIG5yX3NvdWdodCwgc2l6ZW9mKCpzb3VnaHQpLAorCQkJCWNtcF9uYW1lX3JlZik7CisJCWlmICghZm91bmQpCisJCQlkaWUoXygidW5leHBlY3RlZCB3YW50ZWQtcmVmOiAnJXMnIiksIHJlYWRlci0+bGluZSk7CisJCW9pZGNweSgmKCpmb3VuZCktPm9sZF9vaWQsICZvaWQpOworCX0KKworCWlmIChyZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9ERUxJTSkKKwkJZGllKF8oImVycm9yIHByb2Nlc3Npbmcgd2FudGVkIHJlZnM6ICVkIiksIHJlYWRlci0+c3RhdHVzKTsKK30KKworZW51bSBmZXRjaF9zdGF0ZSB7CisJRkVUQ0hfQ0hFQ0tfTE9DQUwgPSAwLAorCUZFVENIX1NFTkRfUkVRVUVTVCwKKwlGRVRDSF9QUk9DRVNTX0FDS1MsCisJRkVUQ0hfR0VUX1BBQ0ssCisJRkVUQ0hfRE9ORSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpkb19mZXRjaF9wYWNrX3YyKHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCQkJICAgIGludCBmZFsyXSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHJlZiAqb3JpZ19yZWYsCisJCQkJICAgIHN0cnVjdCByZWYgKipzb3VnaHQsIGludCBucl9zb3VnaHQsCisJCQkJICAgIHN0cnVjdCBvaWRfYXJyYXkgKnNoYWxsb3dzLAorCQkJCSAgICBzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSwKKwkJCQkgICAgY2hhciAqKnBhY2tfbG9ja2ZpbGUpCit7CisJc3RydWN0IHJlcG9zaXRvcnkgKnIgPSB0aGVfcmVwb3NpdG9yeTsKKwlzdHJ1Y3QgcmVmICpyZWYgPSBjb3B5X3JlZl9saXN0KG9yaWdfcmVmKTsKKwllbnVtIGZldGNoX3N0YXRlIHN0YXRlID0gRkVUQ0hfQ0hFQ0tfTE9DQUw7CisJc3RydWN0IG9pZHNldCBjb21tb24gPSBPSURTRVRfSU5JVDsKKwlzdHJ1Y3QgcGFja2V0X3JlYWRlciByZWFkZXI7CisJaW50IGluX3ZhaW4gPSAwLCBuZWdvdGlhdGlvbl9zdGFydGVkID0gMDsKKwlpbnQgaGF2ZXNfdG9fc2VuZCA9IElOSVRJQUxfRkxVU0g7CisJc3RydWN0IGZldGNoX25lZ290aWF0b3IgbmVnb3RpYXRvcl9hbGxvYzsKKwlzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvcjsKKwlpbnQgc2Vlbl9hY2sgPSAwOworCisJaWYgKGFyZ3MtPm5vX2RlcGVuZGVudHMpIHsKKwkJbmVnb3RpYXRvciA9IE5VTEw7CisJfSBlbHNlIHsKKwkJbmVnb3RpYXRvciA9ICZuZWdvdGlhdG9yX2FsbG9jOworCQlmZXRjaF9uZWdvdGlhdG9yX2luaXQociwgbmVnb3RpYXRvcik7CisJfQorCisJcGFja2V0X3JlYWRlcl9pbml0KCZyZWFkZXIsIGZkWzBdLCBOVUxMLCAwLAorCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSB8CisJCQkgICBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCk7CisJaWYgKGdpdF9lbnZfYm9vbCgiR0lUX1RFU1RfU0lERUJBTkRfQUxMIiwgMSkgJiYKKwkgICAgc2VydmVyX3N1cHBvcnRzX2ZlYXR1cmUoImZldGNoIiwgInNpZGViYW5kLWFsbCIsIDApKSB7CisJCXJlYWRlci51c2Vfc2lkZWJhbmQgPSAxOworCQlyZWFkZXIubWUgPSAiZmV0Y2gtcGFjayI7CisJfQorCisJd2hpbGUgKHN0YXRlICE9IEZFVENIX0RPTkUpIHsKKwkJc3dpdGNoIChzdGF0ZSkgeworCQljYXNlIEZFVENIX0NIRUNLX0xPQ0FMOgorCQkJc29ydF9yZWZfbGlzdCgmcmVmLCByZWZfY29tcGFyZV9uYW1lKTsKKwkJCVFTT1JUKHNvdWdodCwgbnJfc291Z2h0LCBjbXBfcmVmX2J5X25hbWUpOworCisJCQkvKiB2MiBzdXBwb3J0cyB0aGVzZSBieSBkZWZhdWx0ICovCisJCQlhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgfD0gQUxMT1dfUkVBQ0hBQkxFX1NIQTE7CisJCQl1c2Vfc2lkZWJhbmQgPSAyOworCQkJaWYgKGFyZ3MtPmRlcHRoID4gMCB8fCBhcmdzLT5kZWVwZW5fc2luY2UgfHwgYXJncy0+ZGVlcGVuX25vdCkKKwkJCQlhcmdzLT5kZWVwZW4gPSAxOworCisJCQkvKiBGaWx0ZXIgJ3JlZicgYnkgJ3NvdWdodCcgYW5kIHRob3NlIHRoYXQgYXJlbid0IGxvY2FsICovCisJCQlpZiAoIWFyZ3MtPm5vX2RlcGVuZGVudHMpIHsKKwkJCQltYXJrX2NvbXBsZXRlX2FuZF9jb21tb25fcmVmKG5lZ290aWF0b3IsIGFyZ3MsICZyZWYpOworCQkJCWZpbHRlcl9yZWZzKGFyZ3MsICZyZWYsIHNvdWdodCwgbnJfc291Z2h0KTsKKwkJCQlpZiAoZXZlcnl0aGluZ19sb2NhbChhcmdzLCAmcmVmKSkKKwkJCQkJc3RhdGUgPSBGRVRDSF9ET05FOworCQkJCWVsc2UKKwkJCQkJc3RhdGUgPSBGRVRDSF9TRU5EX1JFUVVFU1Q7CisKKwkJCQltYXJrX3RpcHMobmVnb3RpYXRvciwgYXJncy0+bmVnb3RpYXRpb25fdGlwcyk7CisJCQkJZm9yX2VhY2hfY2FjaGVkX2FsdGVybmF0ZShuZWdvdGlhdG9yLAorCQkJCQkJCSAgaW5zZXJ0X29uZV9hbHRlcm5hdGVfb2JqZWN0KTsKKwkJCX0gZWxzZSB7CisJCQkJZmlsdGVyX3JlZnMoYXJncywgJnJlZiwgc291Z2h0LCBucl9zb3VnaHQpOworCQkJCXN0YXRlID0gRkVUQ0hfU0VORF9SRVFVRVNUOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgRkVUQ0hfU0VORF9SRVFVRVNUOgorCQkJaWYgKCFuZWdvdGlhdGlvbl9zdGFydGVkKSB7CisJCQkJbmVnb3RpYXRpb25fc3RhcnRlZCA9IDE7CisJCQkJdHJhY2UyX3JlZ2lvbl9lbnRlcigiZmV0Y2gtcGFjayIsCisJCQkJCQkgICAgIm5lZ290aWF0aW9uX3YyIiwKKwkJCQkJCSAgICB0aGVfcmVwb3NpdG9yeSk7CisJCQl9CisJCQlpZiAoc2VuZF9mZXRjaF9yZXF1ZXN0KG5lZ290aWF0b3IsIGZkWzFdLCBhcmdzLCByZWYsCisJCQkJCSAgICAgICAmY29tbW9uLAorCQkJCQkgICAgICAgJmhhdmVzX3RvX3NlbmQsICZpbl92YWluLAorCQkJCQkgICAgICAgcmVhZGVyLnVzZV9zaWRlYmFuZCwKKwkJCQkJICAgICAgIHNlZW5fYWNrKSkKKwkJCQlzdGF0ZSA9IEZFVENIX0dFVF9QQUNLOworCQkJZWxzZQorCQkJCXN0YXRlID0gRkVUQ0hfUFJPQ0VTU19BQ0tTOworCQkJYnJlYWs7CisJCWNhc2UgRkVUQ0hfUFJPQ0VTU19BQ0tTOgorCQkJLyogUHJvY2VzcyBBQ0tzL05BS3MgKi8KKwkJCXN3aXRjaCAocHJvY2Vzc19hY2tzKG5lZ290aWF0b3IsICZyZWFkZXIsICZjb21tb24pKSB7CisJCQljYXNlIFJFQURZOgorCQkJCXN0YXRlID0gRkVUQ0hfR0VUX1BBQ0s7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTU1PTl9GT1VORDoKKwkJCQlpbl92YWluID0gMDsKKwkJCQlzZWVuX2FjayA9IDE7CisJCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJCWNhc2UgTk9fQ09NTU9OX0ZPVU5EOgorCQkJCXN0YXRlID0gRkVUQ0hfU0VORF9SRVFVRVNUOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgRkVUQ0hfR0VUX1BBQ0s6CisJCQl0cmFjZTJfcmVnaW9uX2xlYXZlKCJmZXRjaC1wYWNrIiwKKwkJCQkJICAgICJuZWdvdGlhdGlvbl92MiIsCisJCQkJCSAgICB0aGVfcmVwb3NpdG9yeSk7CisJCQkvKiBDaGVjayBmb3Igc2hhbGxvdy1pbmZvIHNlY3Rpb24gKi8KKwkJCWlmIChwcm9jZXNzX3NlY3Rpb25faGVhZGVyKCZyZWFkZXIsICJzaGFsbG93LWluZm8iLCAxKSkKKwkJCQlyZWNlaXZlX3NoYWxsb3dfaW5mbyhhcmdzLCAmcmVhZGVyLCBzaGFsbG93cywgc2kpOworCisJCQlpZiAocHJvY2Vzc19zZWN0aW9uX2hlYWRlcigmcmVhZGVyLCAid2FudGVkLXJlZnMiLCAxKSkKKwkJCQlyZWNlaXZlX3dhbnRlZF9yZWZzKCZyZWFkZXIsIHNvdWdodCwgbnJfc291Z2h0KTsKKworCQkJLyogZ2V0IHRoZSBwYWNrICovCisJCQlwcm9jZXNzX3NlY3Rpb25faGVhZGVyKCZyZWFkZXIsICJwYWNrZmlsZSIsIDApOworCQkJaWYgKGdldF9wYWNrKGFyZ3MsIGZkLCBwYWNrX2xvY2tmaWxlLCBzb3VnaHQsIG5yX3NvdWdodCkpCisJCQkJZGllKF8oImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIikpOworCisJCQlzdGF0ZSA9IEZFVENIX0RPTkU7CisJCQlicmVhazsKKwkJY2FzZSBGRVRDSF9ET05FOgorCQkJY29udGludWU7CisJCX0KKwl9CisKKwlpZiAobmVnb3RpYXRvcikKKwkJbmVnb3RpYXRvci0+cmVsZWFzZShuZWdvdGlhdG9yKTsKKwlvaWRzZXRfY2xlYXIoJmNvbW1vbik7CisJcmV0dXJuIHJlZjsKK30KKworc3RhdGljIGludCBmZXRjaF9wYWNrX2NvbmZpZ19jYihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoc3RyY21wKHZhciwgImZldGNoLmZzY2suc2tpcGxpc3QiKSA9PSAwKSB7CisJCWNvbnN0IGNoYXIgKnBhdGg7CisKKwkJaWYgKGdpdF9jb25maWdfcGF0aG5hbWUoJnBhdGgsIHZhciwgdmFsdWUpKQorCQkJcmV0dXJuIDE7CisJCXN0cmJ1Zl9hZGRmKCZmc2NrX21zZ190eXBlcywgIiVjc2tpcGxpc3Q9JXMiLAorCQkJZnNja19tc2dfdHlwZXMubGVuID8gJywnIDogJz0nLCBwYXRoKTsKKwkJZnJlZSgoY2hhciAqKXBhdGgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2tpcF9wcmVmaXgodmFyLCAiZmV0Y2guZnNjay4iLCAmdmFyKSkgeworCQlpZiAoaXNfdmFsaWRfbXNnX3R5cGUodmFyLCB2YWx1ZSkpCisJCQlzdHJidWZfYWRkZigmZnNja19tc2dfdHlwZXMsICIlYyVzPSVzIiwKKwkJCQlmc2NrX21zZ190eXBlcy5sZW4gPyAnLCcgOiAnPScsIHZhciwgdmFsdWUpOworCQllbHNlCisJCQl3YXJuaW5nKCJTa2lwcGluZyB1bmtub3duIG1zZyBpZCAnJXMnIiwgdmFyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyB2b2lkIGZldGNoX3BhY2tfY29uZmlnKHZvaWQpCit7CisJZ2l0X2NvbmZpZ19nZXRfaW50KCJmZXRjaC51bnBhY2tsaW1pdCIsICZmZXRjaF91bnBhY2tfbGltaXQpOworCWdpdF9jb25maWdfZ2V0X2ludCgidHJhbnNmZXIudW5wYWNrbGltaXQiLCAmdHJhbnNmZXJfdW5wYWNrX2xpbWl0KTsKKwlnaXRfY29uZmlnX2dldF9ib29sKCJyZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IiwgJnByZWZlcl9vZnNfZGVsdGEpOworCWdpdF9jb25maWdfZ2V0X2Jvb2woImZldGNoLmZzY2tvYmplY3RzIiwgJmZldGNoX2ZzY2tfb2JqZWN0cyk7CisJZ2l0X2NvbmZpZ19nZXRfYm9vbCgidHJhbnNmZXIuZnNja29iamVjdHMiLCAmdHJhbnNmZXJfZnNja19vYmplY3RzKTsKKworCWdpdF9jb25maWcoZmV0Y2hfcGFja19jb25maWdfY2IsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBmZXRjaF9wYWNrX3NldHVwKHZvaWQpCit7CisJc3RhdGljIGludCBkaWRfc2V0dXA7CisJaWYgKGRpZF9zZXR1cCkKKwkJcmV0dXJuOworCWZldGNoX3BhY2tfY29uZmlnKCk7CisJaWYgKDAgPD0gdHJhbnNmZXJfdW5wYWNrX2xpbWl0KQorCQl1bnBhY2tfbGltaXQgPSB0cmFuc2Zlcl91bnBhY2tfbGltaXQ7CisJZWxzZSBpZiAoMCA8PSBmZXRjaF91bnBhY2tfbGltaXQpCisJCXVucGFja19saW1pdCA9IGZldGNoX3VucGFja19saW1pdDsKKwlkaWRfc2V0dXAgPSAxOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9kdXBsaWNhdGVzX2luX3JlZnMoc3RydWN0IHJlZiAqKnJlZiwgaW50IG5yKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBuYW1lcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJaW50IHNyYywgZHN0OworCisJZm9yIChzcmMgPSBkc3QgPSAwOyBzcmMgPCBucjsgc3JjKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoJm5hbWVzLCByZWZbc3JjXS0+bmFtZSk7CisJCWlmIChpdGVtLT51dGlsKQorCQkJY29udGludWU7IC8qIGFscmVhZHkgaGF2ZSBpdCAqLworCQlpdGVtLT51dGlsID0gcmVmW3NyY107CisJCWlmIChzcmMgIT0gZHN0KQorCQkJcmVmW2RzdF0gPSByZWZbc3JjXTsKKwkJZHN0Kys7CisJfQorCWZvciAoc3JjID0gZHN0OyBzcmMgPCBucjsgc3JjKyspCisJCXJlZltzcmNdID0gTlVMTDsKKwlzdHJpbmdfbGlzdF9jbGVhcigmbmFtZXMsIDApOworCXJldHVybiBkc3Q7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9zaGFsbG93KHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCQkgICBzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0LAorCQkJICAgc3RydWN0IHNoYWxsb3dfaW5mbyAqc2kpCit7CisJc3RydWN0IG9pZF9hcnJheSByZWYgPSBPSURfQVJSQVlfSU5JVDsKKwlpbnQgKnN0YXR1czsKKwlpbnQgaTsKKworCWlmIChhcmdzLT5kZWVwZW4gJiYgYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSkgeworCQlpZiAoKmFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPT0gJ1wwJykgeyAvKiAtLXVuc2hhbGxvdyAqLworCQkJdW5saW5rX29yX3dhcm4oZ2l0X3BhdGhfc2hhbGxvdyh0aGVfcmVwb3NpdG9yeSkpOworCQkJcm9sbGJhY2tfc2hhbGxvd19maWxlKHRoZV9yZXBvc2l0b3J5LCAmc2hhbGxvd19sb2NrKTsKKwkJfSBlbHNlCisJCQljb21taXRfc2hhbGxvd19maWxlKHRoZV9yZXBvc2l0b3J5LCAmc2hhbGxvd19sb2NrKTsKKwkJYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXNpLT5zaGFsbG93IHx8ICFzaS0+c2hhbGxvdy0+bnIpCisJCXJldHVybjsKKworCWlmIChhcmdzLT5jbG9uaW5nKSB7CisJCS8qCisJCSAqIHJlbW90ZSBpcyBzaGFsbG93LCBidXQgdGhpcyBpcyBhIGNsb25lLCB0aGVyZSBhcmUKKwkJICogbm8gb2JqZWN0cyBpbiByZXBvIHRvIHdvcnJ5IGFib3V0LiBBY2NlcHQgYW55CisJCSAqIHNoYWxsb3cgcG9pbnRzIHRoYXQgZXhpc3QgaW4gdGhlIHBhY2sgKGlvdyBpbiByZXBvCisJCSAqIGFmdGVyIGdldF9wYWNrKCkgYW5kIHJlcHJlcGFyZV9wYWNrZWRfZ2l0KCkpCisJCSAqLworCQlzdHJ1Y3Qgb2lkX2FycmF5IGV4dHJhID0gT0lEX0FSUkFZX0lOSVQ7CisJCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9IHNpLT5zaGFsbG93LT5vaWQ7CisJCWZvciAoaSA9IDA7IGkgPCBzaS0+c2hhbGxvdy0+bnI7IGkrKykKKwkJCWlmIChoYXNfb2JqZWN0X2ZpbGUoJm9pZFtpXSkpCisJCQkJb2lkX2FycmF5X2FwcGVuZCgmZXh0cmEsICZvaWRbaV0pOworCQlpZiAoZXh0cmEubnIpIHsKKwkJCXNldHVwX2FsdGVybmF0ZV9zaGFsbG93KCZzaGFsbG93X2xvY2ssCisJCQkJCQkmYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSwKKwkJCQkJCSZleHRyYSk7CisJCQljb21taXRfc2hhbGxvd19maWxlKHRoZV9yZXBvc2l0b3J5LCAmc2hhbGxvd19sb2NrKTsKKwkJCWFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPSBOVUxMOworCQl9CisJCW9pZF9hcnJheV9jbGVhcigmZXh0cmEpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFzaS0+bnJfb3VycyAmJiAhc2ktPm5yX3RoZWlycykKKwkJcmV0dXJuOworCisJcmVtb3ZlX25vbmV4aXN0ZW50X3RoZWlyc19zaGFsbG93KHNpKTsKKwlpZiAoIXNpLT5ucl9vdXJzICYmICFzaS0+bnJfdGhlaXJzKQorCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8IG5yX3NvdWdodDsgaSsrKQorCQlvaWRfYXJyYXlfYXBwZW5kKCZyZWYsICZzb3VnaHRbaV0tPm9sZF9vaWQpOworCXNpLT5yZWYgPSAmcmVmOworCisJaWYgKGFyZ3MtPnVwZGF0ZV9zaGFsbG93KSB7CisJCS8qCisJCSAqIHJlbW90ZSBpcyBhbHNvIHNoYWxsb3csIC5naXQvc2hhbGxvdyBtYXkgYmUgdXBkYXRlZAorCQkgKiBzbyBhbGwgcmVmcyBjYW4gYmUgYWNjZXB0ZWQuIE1ha2Ugc3VyZSB3ZSBvbmx5IGFkZAorCQkgKiBzaGFsbG93IHJvb3RzIHRoYXQgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZSBmcm9tIG5ldworCQkgKiByZWZzLgorCQkgKi8KKwkJc3RydWN0IG9pZF9hcnJheSBleHRyYSA9IE9JRF9BUlJBWV9JTklUOworCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSBzaS0+c2hhbGxvdy0+b2lkOworCQlhc3NpZ25fc2hhbGxvd19jb21taXRzX3RvX3JlZnMoc2ksIE5VTEwsIE5VTEwpOworCQlpZiAoIXNpLT5ucl9vdXJzICYmICFzaS0+bnJfdGhlaXJzKSB7CisJCQlvaWRfYXJyYXlfY2xlYXIoJnJlZik7CisJCQlyZXR1cm47CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHNpLT5ucl9vdXJzOyBpKyspCisJCQlvaWRfYXJyYXlfYXBwZW5kKCZleHRyYSwgJm9pZFtzaS0+b3Vyc1tpXV0pOworCQlmb3IgKGkgPSAwOyBpIDwgc2ktPm5yX3RoZWlyczsgaSsrKQorCQkJb2lkX2FycmF5X2FwcGVuZCgmZXh0cmEsICZvaWRbc2ktPnRoZWlyc1tpXV0pOworCQlzZXR1cF9hbHRlcm5hdGVfc2hhbGxvdygmc2hhbGxvd19sb2NrLAorCQkJCQkmYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSwKKwkJCQkJJmV4dHJhKTsKKwkJY29tbWl0X3NoYWxsb3dfZmlsZSh0aGVfcmVwb3NpdG9yeSwgJnNoYWxsb3dfbG9jayk7CisJCW9pZF9hcnJheV9jbGVhcigmZXh0cmEpOworCQlvaWRfYXJyYXlfY2xlYXIoJnJlZik7CisJCWFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiByZW1vdGUgaXMgYWxzbyBzaGFsbG93LCBjaGVjayB3aGF0IHJlZiBpcyBzYWZlIHRvIHVwZGF0ZQorCSAqIHdpdGhvdXQgdXBkYXRpbmcgLmdpdC9zaGFsbG93CisJICovCisJc3RhdHVzID0geGNhbGxvYyhucl9zb3VnaHQsIHNpemVvZigqc3RhdHVzKSk7CisJYXNzaWduX3NoYWxsb3dfY29tbWl0c190b19yZWZzKHNpLCBOVUxMLCBzdGF0dXMpOworCWlmIChzaS0+bnJfb3VycyB8fCBzaS0+bnJfdGhlaXJzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBucl9zb3VnaHQ7IGkrKykKKwkJCWlmIChzdGF0dXNbaV0pCisJCQkJc291Z2h0W2ldLT5zdGF0dXMgPSBSRUZfU1RBVFVTX1JFSkVDVF9TSEFMTE9XOworCX0KKwlmcmVlKHN0YXR1cyk7CisJb2lkX2FycmF5X2NsZWFyKCZyZWYpOworfQorCitzdGF0aWMgaW50IGl0ZXJhdGVfcmVmX21hcCh2b2lkICpjYl9kYXRhLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IHJlZiAqKnJtID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmICpyZWYgPSAqcm07CisKKwlpZiAoIXJlZikKKwkJcmV0dXJuIC0xOyAvKiBlbmQgb2YgdGhlIGxpc3QgKi8KKwkqcm0gPSByZWYtPm5leHQ7CisJb2lkY3B5KG9pZCwgJnJlZi0+b2xkX29pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByZWYgKmZldGNoX3BhY2soc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywKKwkJICAgICAgIGludCBmZFtdLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHJlZiAqcmVmLAorCQkgICAgICAgc3RydWN0IHJlZiAqKnNvdWdodCwgaW50IG5yX3NvdWdodCwKKwkJICAgICAgIHN0cnVjdCBvaWRfYXJyYXkgKnNoYWxsb3csCisJCSAgICAgICBjaGFyICoqcGFja19sb2NrZmlsZSwKKwkJICAgICAgIGVudW0gcHJvdG9jb2xfdmVyc2lvbiB2ZXJzaW9uKQoreworCXN0cnVjdCByZWYgKnJlZl9jcHk7CisJc3RydWN0IHNoYWxsb3dfaW5mbyBzaTsKKwlzdHJ1Y3Qgb2lkX2FycmF5IHNoYWxsb3dzX3NjcmF0Y2ggPSBPSURfQVJSQVlfSU5JVDsKKworCWZldGNoX3BhY2tfc2V0dXAoKTsKKwlpZiAobnJfc291Z2h0KQorCQlucl9zb3VnaHQgPSByZW1vdmVfZHVwbGljYXRlc19pbl9yZWZzKHNvdWdodCwgbnJfc291Z2h0KTsKKworCWlmIChhcmdzLT5ub19kZXBlbmRlbnRzICYmICFhcmdzLT5maWx0ZXJfb3B0aW9ucy5jaG9pY2UpIHsKKwkJLyoKKwkJICogVGhlIHByb3RvY29sIGRvZXMgbm90IHN1cHBvcnQgcmVxdWVzdGluZyB0aGF0IG9ubHkgdGhlCisJCSAqIHdhbnRlZCBvYmplY3RzIGJlIHNlbnQsIHNvIGFwcHJveGltYXRlIHRoaXMgYnkgc2V0dGluZyBhCisJCSAqICJibG9iOm5vbmUiIGZpbHRlciBpZiBubyBmaWx0ZXIgaXMgYWxyZWFkeSBzZXQuIFRoaXMgd29ya3MKKwkJICogZm9yIGFsbCBvYmplY3QgdHlwZXM6IG5vdGUgdGhhdCB3YW50ZWQgYmxvYnMgd2lsbCBzdGlsbCBiZQorCQkgKiBzZW50IGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgc3BlY2lmaWVkIGFzIGEgIndhbnQiLgorCQkgKgorCQkgKiBORUVEU1dPUks6IEFkZCBhbiBvcHRpb24gaW4gdGhlIHByb3RvY29sIHRvIHJlcXVlc3QgdGhhdAorCQkgKiBvbmx5IHRoZSB3YW50ZWQgb2JqZWN0cyBiZSBzZW50LCBhbmQgaW1wbGVtZW50IGl0LgorCQkgKi8KKwkJcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcigmYXJncy0+ZmlsdGVyX29wdGlvbnMsICJibG9iOm5vbmUiKTsKKwl9CisKKwlpZiAodmVyc2lvbiAhPSBwcm90b2NvbF92MiAmJiAhcmVmKSB7CisJCXBhY2tldF9mbHVzaChmZFsxXSk7CisJCWRpZShfKCJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIpKTsKKwl9CisJaWYgKHZlcnNpb24gPT0gcHJvdG9jb2xfdjIpIHsKKwkJaWYgKHNoYWxsb3ctPm5yKQorCQkJQlVHKCJQcm90b2NvbCBWMiBkb2VzIG5vdCBwcm92aWRlIHNoYWxsb3dzIGF0IHRoaXMgcG9pbnQgaW4gdGhlIGZldGNoIik7CisJCW1lbXNldCgmc2ksIDAsIHNpemVvZihzaSkpOworCQlyZWZfY3B5ID0gZG9fZmV0Y2hfcGFja192MihhcmdzLCBmZCwgcmVmLCBzb3VnaHQsIG5yX3NvdWdodCwKKwkJCQkJICAgJnNoYWxsb3dzX3NjcmF0Y2gsICZzaSwKKwkJCQkJICAgcGFja19sb2NrZmlsZSk7CisJfSBlbHNlIHsKKwkJcHJlcGFyZV9zaGFsbG93X2luZm8oJnNpLCBzaGFsbG93KTsKKwkJcmVmX2NweSA9IGRvX2ZldGNoX3BhY2soYXJncywgZmQsIHJlZiwgc291Z2h0LCBucl9zb3VnaHQsCisJCQkJCSZzaSwgcGFja19sb2NrZmlsZSk7CisJfQorCXJlcHJlcGFyZV9wYWNrZWRfZ2l0KHRoZV9yZXBvc2l0b3J5KTsKKworCWlmICghYXJncy0+Y2xvbmluZyAmJiBhcmdzLT5kZWVwZW4pIHsKKwkJc3RydWN0IGNoZWNrX2Nvbm5lY3RlZF9vcHRpb25zIG9wdCA9IENIRUNLX0NPTk5FQ1RFRF9JTklUOworCQlzdHJ1Y3QgcmVmICppdGVyYXRvciA9IHJlZl9jcHk7CisJCW9wdC5zaGFsbG93X2ZpbGUgPSBhbHRlcm5hdGVfc2hhbGxvd19maWxlOworCQlpZiAoYXJncy0+ZGVlcGVuKQorCQkJb3B0LmlzX2RlZXBlbmluZ19mZXRjaCA9IDE7CisJCWlmIChjaGVja19jb25uZWN0ZWQoaXRlcmF0ZV9yZWZfbWFwLCAmaXRlcmF0b3IsICZvcHQpKSB7CisJCQllcnJvcihfKCJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIpKTsKKwkJCWZyZWVfcmVmcyhyZWZfY3B5KTsKKwkJCXJlZl9jcHkgPSBOVUxMOworCQkJcm9sbGJhY2tfc2hhbGxvd19maWxlKHRoZV9yZXBvc2l0b3J5LCAmc2hhbGxvd19sb2NrKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlhcmdzLT5jb25uZWN0aXZpdHlfY2hlY2tlZCA9IDE7CisJfQorCisJdXBkYXRlX3NoYWxsb3coYXJncywgc291Z2h0LCBucl9zb3VnaHQsICZzaSk7CitjbGVhbnVwOgorCWNsZWFyX3NoYWxsb3dfaW5mbygmc2kpOworCW9pZF9hcnJheV9jbGVhcigmc2hhbGxvd3Nfc2NyYXRjaCk7CisJcmV0dXJuIHJlZl9jcHk7Cit9CisKK2ludCByZXBvcnRfdW5tYXRjaGVkX3JlZnMoc3RydWN0IHJlZiAqKnNvdWdodCwgaW50IG5yX3NvdWdodCkKK3sKKwlpbnQgaSwgcmV0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBucl9zb3VnaHQ7IGkrKykgeworCQlpZiAoIXNvdWdodFtpXSkKKwkJCWNvbnRpbnVlOworCQlzd2l0Y2ggKHNvdWdodFtpXS0+bWF0Y2hfc3RhdHVzKSB7CisJCWNhc2UgUkVGX01BVENIRUQ6CisJCQljb250aW51ZTsKKwkJY2FzZSBSRUZfTk9UX01BVENIRUQ6CisJCQllcnJvcihfKCJubyBzdWNoIHJlbW90ZSByZWYgJXMiKSwgc291Z2h0W2ldLT5uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIFJFRl9VTkFEVkVSVElTRURfTk9UX0FMTE9XRUQ6CisJCQllcnJvcihfKCJTZXJ2ZXIgZG9lcyBub3QgYWxsb3cgcmVxdWVzdCBmb3IgdW5hZHZlcnRpc2VkIG9iamVjdCAlcyIpLAorCQkJICAgICAgc291Z2h0W2ldLT5uYW1lKTsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IDE7CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9mZXRjaC1wYWNrLmggYi9mZXRjaC1wYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmNjg0MgotLS0gL2Rldi9udWxsCisrKyBiL2ZldGNoLXBhY2suaApAQCAtMCwwICsxLDk1IEBACisjaWZuZGVmIEZFVENIX1BBQ0tfSAorI2RlZmluZSBGRVRDSF9QQUNLX0gKKworI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oIgorCitzdHJ1Y3Qgb2lkX2FycmF5OworCitzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzIHsKKwljb25zdCBjaGFyICp1cGxvYWRwYWNrOworCWludCB1bnBhY2tsaW1pdDsKKwlpbnQgZGVwdGg7CisJY29uc3QgY2hhciAqZGVlcGVuX3NpbmNlOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZGVlcGVuX25vdDsKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zIGZpbHRlcl9vcHRpb25zOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqc2VydmVyX29wdGlvbnM7CisKKwkvKgorCSAqIElmIG5vdCBOVUxMLCBkdXJpbmcgcGFja2ZpbGUgbmVnb3RpYXRpb24sIGZldGNoLXBhY2sgd2lsbCBzZW5kICJoYXZlIgorCSAqIGxpbmVzIG9ubHkgd2l0aCB0aGVzZSB0aXBzIGFuZCB0aGVpciBhbmNlc3RvcnMuCisJICovCisJY29uc3Qgc3RydWN0IG9pZF9hcnJheSAqbmVnb3RpYXRpb25fdGlwczsKKworCXVuc2lnbmVkIGRlZXBlbl9yZWxhdGl2ZToxOworCXVuc2lnbmVkIHF1aWV0OjE7CisJdW5zaWduZWQga2VlcF9wYWNrOjE7CisJdW5zaWduZWQgbG9ja19wYWNrOjE7CisJdW5zaWduZWQgdXNlX3RoaW5fcGFjazoxOworCXVuc2lnbmVkIGZldGNoX2FsbDoxOworCXVuc2lnbmVkIHN0ZGluX3JlZnM6MTsKKwl1bnNpZ25lZCBkaWFnX3VybDoxOworCXVuc2lnbmVkIHZlcmJvc2U6MTsKKwl1bnNpZ25lZCBub19wcm9ncmVzczoxOworCXVuc2lnbmVkIGluY2x1ZGVfdGFnOjE7CisJdW5zaWduZWQgc3RhdGVsZXNzX3JwYzoxOworCXVuc2lnbmVkIGNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQ6MTsKKwl1bnNpZ25lZCBzZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkOjE7CisJdW5zaWduZWQgY2xvbmluZzoxOworCXVuc2lnbmVkIHVwZGF0ZV9zaGFsbG93OjE7CisJdW5zaWduZWQgZGVlcGVuOjE7CisJdW5zaWduZWQgZnJvbV9wcm9taXNvcjoxOworCisJLyoKKwkgKiBBdHRlbXB0IHRvIGZldGNoIG9ubHkgdGhlIHdhbnRlZCBvYmplY3RzLCBhbmQgbm90IGFueSBvYmplY3RzCisJICogcmVmZXJyZWQgdG8gYnkgdGhlbS4gRHVlIHRvIHByb3RvY29sIGxpbWl0YXRpb25zLCBleHRyYW5lb3VzCisJICogb2JqZWN0cyBtYXkgc3RpbGwgYmUgaW5jbHVkZWQuIChXaGVuIGZldGNoaW5nIG5vbi1ibG9iCisJICogb2JqZWN0cywgb25seSBibG9icyBhcmUgZXhjbHVkZWQ7IHdoZW4gZmV0Y2hpbmcgYSBibG9iLCB0aGUKKwkgKiBibG9iIGl0c2VsZiB3aWxsIHN0aWxsIGJlIHNlbnQuIFRoZSBjbGllbnQgZG9lcyBub3QgbmVlZCB0bworCSAqIGtub3cgd2hldGhlciBhIHdhbnRlZCBvYmplY3QgaXMgYSBibG9iIG9yIG5vdC4pCisJICoKKwkgKiBJZiAxLCBmZXRjaF9wYWNrKCkgd2lsbCBhbHNvIG5vdCBtb2RpZnkgYW55IG9iamVjdCBmbGFncy4KKwkgKiBUaGlzIGFsbG93cyBmZXRjaF9wYWNrKCkgdG8gc2FmZWx5IGJlIGNhbGxlZCBieSBhbnkgZnVuY3Rpb24sCisJICogcmVnYXJkbGVzcyBvZiB3aGljaCBvYmplY3QgZmxhZ3MgaXQgdXNlcyAoaWYgYW55KS4KKwkgKi8KKwl1bnNpZ25lZCBub19kZXBlbmRlbnRzOjE7CisKKwkvKgorCSAqIEJlY2F1c2UgZmV0Y2hfcGFjaygpIG92ZXJ3cml0ZXMgdGhlIHNoYWxsb3cgZmlsZSB1cG9uIGEKKwkgKiBzdWNjZXNzZnVsIGRlZXBlbmluZyBub24tY2xvbmUgZmV0Y2gsIGlmIHRoaXMgc3RydWN0CisJICogc3BlY2lmaWVzIHN1Y2ggYSBmZXRjaCwgZmV0Y2hfcGFjaygpIG5lZWRzIHRvIHBlcmZvcm0gYQorCSAqIGNvbm5lY3Rpdml0eSBjaGVjayBiZWZvcmUgZGVjaWRpbmcgaWYgYSBmZXRjaCBpcyBzdWNjZXNzZnVsCisJICogKGFuZCBvdmVyd3JpdGluZyB0aGUgc2hhbGxvdyBmaWxlKS4gZmV0Y2hfcGFjaygpIHNldHMgdGhpcworCSAqIGZpZWxkIHRvIDEgaWYgc3VjaCBhIGNvbm5lY3Rpdml0eSBjaGVjayB3YXMgcGVyZm9ybWVkLgorCSAqCisJICogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBjaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkCisJICogaW4gdGhhdCB0aGUgZm9ybWVyIGFsbG93cyBleGlzdGluZyBvYmplY3RzIGluIHRoZQorCSAqIHJlcG9zaXRvcnkgdG8gc2F0aXNmeSBjb25uZWN0aXZpdHkgbmVlZHMsIHdoZXJlYXMgdGhlCisJICogbGF0dGVyIGRvZXNuJ3QuCisJICovCisJdW5zaWduZWQgY29ubmVjdGl2aXR5X2NoZWNrZWQ6MTsKK307CisKKy8qCisgKiBzb3VnaHQgcmVwcmVzZW50cyByZW1vdGUgcmVmZXJlbmNlcyB0aGF0IHNob3VsZCBiZSB1cGRhdGVkIGZyb20uCisgKiBPbiByZXR1cm4sIHRoZSBuYW1lcyB0aGF0IHdlcmUgZm91bmQgb24gdGhlIHJlbW90ZSB3aWxsIGhhdmUgYmVlbgorICogbWFya2VkIGFzIHN1Y2guCisgKi8KK3N0cnVjdCByZWYgKmZldGNoX3BhY2soc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywKKwkJICAgICAgIGludCBmZFtdLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHJlZiAqcmVmLAorCQkgICAgICAgc3RydWN0IHJlZiAqKnNvdWdodCwKKwkJICAgICAgIGludCBucl9zb3VnaHQsCisJCSAgICAgICBzdHJ1Y3Qgb2lkX2FycmF5ICpzaGFsbG93LAorCQkgICAgICAgY2hhciAqKnBhY2tfbG9ja2ZpbGUsCisJCSAgICAgICBlbnVtIHByb3RvY29sX3ZlcnNpb24gdmVyc2lvbik7CisKKy8qCisgKiBQcmludCBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIGZvciBlYWNoIHNvdWdodCByZWYgdGhhdCB3YXNuJ3QKKyAqIG1hdGNoZWQuICBSZXR1cm4gMCBpZiBhbGwgc291Z2h0IHJlZnMgd2VyZSBtYXRjaGVkLCBvdGhlcndpc2UgMS4KKyAqLworaW50IHJlcG9ydF91bm1hdGNoZWRfcmVmcyhzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9mbXQtbWVyZ2UtbXNnLmMgYi9mbXQtbWVyZ2UtbXNnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkMzJiZAotLS0gL2Rldi9udWxsCisrKyBiL2ZtdC1tZXJnZS1tc2cuYwpAQCAtMCwwICsxLDY1NiBAQAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgImZtdC1tZXJnZS1tc2cuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKworc3RhdGljIGludCB1c2VfYnJhbmNoX2Rlc2M7CisKK2ludCBmbXRfbWVyZ2VfbXNnX2NvbmZpZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcChrZXksICJtZXJnZS5sb2ciKSB8fCAhc3RyY21wKGtleSwgIm1lcmdlLnN1bW1hcnkiKSkgeworCQlpbnQgaXNfYm9vbDsKKwkJbWVyZ2VfbG9nX2NvbmZpZyA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmlzX2Jvb2wpOworCQlpZiAoIWlzX2Jvb2wgJiYgbWVyZ2VfbG9nX2NvbmZpZyA8IDApCisJCQlyZXR1cm4gZXJyb3IoIiVzOiBuZWdhdGl2ZSBsZW5ndGggJXMiLCBrZXksIHZhbHVlKTsKKwkJaWYgKGlzX2Jvb2wgJiYgbWVyZ2VfbG9nX2NvbmZpZykKKwkJCW1lcmdlX2xvZ19jb25maWcgPSBERUZBVUxUX01FUkdFX0xPR19MRU47CisJfSBlbHNlIGlmICghc3RyY21wKGtleSwgIm1lcmdlLmJyYW5jaGRlc2MiKSkgeworCQl1c2VfYnJhbmNoX2Rlc2MgPSBnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWx1ZSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyhrZXksIHZhbHVlLCBjYik7CisJfQorCXJldHVybiAwOworfQorCisvKiBtZXJnZSBkYXRhIHBlciByZXBvc2l0b3J5IHdoZXJlIHRoZSBtZXJnZWQgdGlwcyBjYW1lIGZyb20gKi8KK3N0cnVjdCBzcmNfZGF0YSB7CisJc3RydWN0IHN0cmluZ19saXN0IGJyYW5jaCwgdGFnLCByX2JyYW5jaCwgZ2VuZXJpYzsKKwlpbnQgaGVhZF9zdGF0dXM7Cit9OworCitzdHJ1Y3Qgb3JpZ2luX2RhdGEgeworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXVuc2lnbmVkIGlzX2xvY2FsX2JyYW5jaDoxOworfTsKKworc3RhdGljIHZvaWQgaW5pdF9zcmNfZGF0YShzdHJ1Y3Qgc3JjX2RhdGEgKmRhdGEpCit7CisJZGF0YS0+YnJhbmNoLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlkYXRhLT50YWcuc3RyZHVwX3N0cmluZ3MgPSAxOworCWRhdGEtPnJfYnJhbmNoLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlkYXRhLT5nZW5lcmljLnN0cmR1cF9zdHJpbmdzID0gMTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBzcmNzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG9yaWdpbnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworc3RydWN0IG1lcmdlX3BhcmVudHMgeworCWludCBhbGxvYywgbnI7CisJc3RydWN0IG1lcmdlX3BhcmVudCB7CisJCXN0cnVjdCBvYmplY3RfaWQgZ2l2ZW47CisJCXN0cnVjdCBvYmplY3RfaWQgY29tbWl0OworCQl1bnNpZ25lZCBjaGFyIHVzZWQ7CisJfSAqaXRlbTsKK307CisKKy8qCisgKiBJIGtub3csIEkga25vdywgdGhpcyBpcyBpbmVmZmljaWVudCwgYnV0IHlvdSB3b24ndCBiZSBwdWxsaW5nIGFuZCBtZXJnaW5nCisgKiBodW5kcmVkcyBvZiBoZWFkcyBhdCBhIHRpbWUgYW55d2F5LgorICovCitzdGF0aWMgc3RydWN0IG1lcmdlX3BhcmVudCAqZmluZF9tZXJnZV9wYXJlbnQoc3RydWN0IG1lcmdlX3BhcmVudHMgKnRhYmxlLAorCQkJCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpnaXZlbiwKKwkJCQkJICAgICAgc3RydWN0IG9iamVjdF9pZCAqY29tbWl0KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCB0YWJsZS0+bnI7IGkrKykgeworCQlpZiAoZ2l2ZW4gJiYgIW9pZGVxKCZ0YWJsZS0+aXRlbVtpXS5naXZlbiwgZ2l2ZW4pKQorCQkJY29udGludWU7CisJCWlmIChjb21taXQgJiYgIW9pZGVxKCZ0YWJsZS0+aXRlbVtpXS5jb21taXQsIGNvbW1pdCkpCisJCQljb250aW51ZTsKKwkJcmV0dXJuICZ0YWJsZS0+aXRlbVtpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9tZXJnZV9wYXJlbnQoc3RydWN0IG1lcmdlX3BhcmVudHMgKnRhYmxlLAorCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpnaXZlbiwKKwkJCSAgICAgc3RydWN0IG9iamVjdF9pZCAqY29tbWl0KQoreworCWlmICh0YWJsZS0+bnIgJiYgZmluZF9tZXJnZV9wYXJlbnQodGFibGUsIGdpdmVuLCBjb21taXQpKQorCQlyZXR1cm47CisJQUxMT0NfR1JPVyh0YWJsZS0+aXRlbSwgdGFibGUtPm5yICsgMSwgdGFibGUtPmFsbG9jKTsKKwlvaWRjcHkoJnRhYmxlLT5pdGVtW3RhYmxlLT5ucl0uZ2l2ZW4sIGdpdmVuKTsKKwlvaWRjcHkoJnRhYmxlLT5pdGVtW3RhYmxlLT5ucl0uY29tbWl0LCBjb21taXQpOworCXRhYmxlLT5pdGVtW3RhYmxlLT5ucl0udXNlZCA9IDA7CisJdGFibGUtPm5yKys7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2xpbmUoY2hhciAqbGluZSwgc3RydWN0IG1lcmdlX3BhcmVudHMgKm1lcmdlX3BhcmVudHMpCit7CisJaW50IGksIGxlbiA9IHN0cmxlbihsaW5lKTsKKwlzdHJ1Y3Qgb3JpZ2luX2RhdGEgKm9yaWdpbl9kYXRhOworCWNoYXIgKnNyYzsKKwljb25zdCBjaGFyICpvcmlnaW4sICp0YWdfbmFtZTsKKwlzdHJ1Y3Qgc3JjX2RhdGEgKnNyY19kYXRhOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWludCBwdWxsaW5nX2hlYWQgPSAwOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNvbnN0IHVuc2lnbmVkIGhleHN6ID0gdGhlX2hhc2hfYWxnby0+aGV4c3o7CisKKwlpZiAobGVuIDwgaGV4c3ogKyAzIHx8IGxpbmVbaGV4c3pdICE9ICdcdCcpCisJCXJldHVybiAxOworCisJaWYgKHN0YXJ0c193aXRoKGxpbmUgKyBoZXhzeiArIDEsICJub3QtZm9yLW1lcmdlIikpCisJCXJldHVybiAwOworCisJaWYgKGxpbmVbaGV4c3ogKyAxXSAhPSAnXHQnKQorCQlyZXR1cm4gMjsKKworCWkgPSBnZXRfb2lkX2hleChsaW5lLCAmb2lkKTsKKwlpZiAoaSkKKwkJcmV0dXJuIDM7CisKKwlpZiAoIWZpbmRfbWVyZ2VfcGFyZW50KG1lcmdlX3BhcmVudHMsICZvaWQsIE5VTEwpKQorCQlyZXR1cm4gMDsgLyogc3Vic3VtZWQgYnkgb3RoZXIgcGFyZW50cyAqLworCisJb3JpZ2luX2RhdGEgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgb3JpZ2luX2RhdGEpKTsKKwlvaWRjcHkoJm9yaWdpbl9kYXRhLT5vaWQsICZvaWQpOworCisJaWYgKGxpbmVbbGVuIC0gMV0gPT0gJ1xuJykKKwkJbGluZVtsZW4gLSAxXSA9IDA7CisJbGluZSArPSBoZXhzeiArIDI7CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIGxpbmUgcG9pbnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgY29tbWVudCBlLmcuCisJICogImJyYW5jaCAnZnJvdHonIG9mIGdpdDovL3RoYXQvcmVwb3NpdG9yeS5naXQiLgorCSAqIEZpbmQgdGhlIHJlcG9zaXRvcnkgbmFtZSBhbmQgcG9pbnQgaXQgd2l0aCBzcmMuCisJICovCisJc3JjID0gc3Ryc3RyKGxpbmUsICIgb2YgIik7CisJaWYgKHNyYykgeworCQkqc3JjID0gMDsKKwkJc3JjICs9IDQ7CisJCXB1bGxpbmdfaGVhZCA9IDA7CisJfSBlbHNlIHsKKwkJc3JjID0gbGluZTsKKwkJcHVsbGluZ19oZWFkID0gMTsKKwl9CisKKwlpdGVtID0gdW5zb3J0ZWRfc3RyaW5nX2xpc3RfbG9va3VwKCZzcmNzLCBzcmMpOworCWlmICghaXRlbSkgeworCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZzcmNzLCBzcmMpOworCQlpdGVtLT51dGlsID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHNyY19kYXRhKSk7CisJCWluaXRfc3JjX2RhdGEoaXRlbS0+dXRpbCk7CisJfQorCXNyY19kYXRhID0gaXRlbS0+dXRpbDsKKworCWlmIChwdWxsaW5nX2hlYWQpIHsKKwkJb3JpZ2luID0gc3JjOworCQlzcmNfZGF0YS0+aGVhZF9zdGF0dXMgfD0gMTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGxpbmUsICJicmFuY2ggIiwgJm9yaWdpbikpIHsKKwkJb3JpZ2luX2RhdGEtPmlzX2xvY2FsX2JyYW5jaCA9IDE7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmc3JjX2RhdGEtPmJyYW5jaCwgb3JpZ2luKTsKKwkJc3JjX2RhdGEtPmhlYWRfc3RhdHVzIHw9IDI7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChsaW5lLCAidGFnICIsICZ0YWdfbmFtZSkpIHsKKwkJb3JpZ2luID0gbGluZTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzcmNfZGF0YS0+dGFnLCB0YWdfbmFtZSk7CisJCXNyY19kYXRhLT5oZWFkX3N0YXR1cyB8PSAyOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgobGluZSwgInJlbW90ZS10cmFja2luZyBicmFuY2ggIiwgJm9yaWdpbikpIHsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzcmNfZGF0YS0+cl9icmFuY2gsIG9yaWdpbik7CisJCXNyY19kYXRhLT5oZWFkX3N0YXR1cyB8PSAyOworCX0gZWxzZSB7CisJCW9yaWdpbiA9IHNyYzsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzcmNfZGF0YS0+Z2VuZXJpYywgbGluZSk7CisJCXNyY19kYXRhLT5oZWFkX3N0YXR1cyB8PSAyOworCX0KKworCWlmICghc3RyY21wKCIuIiwgc3JjKSB8fCAhc3RyY21wKHNyYywgb3JpZ2luKSkgeworCQlpbnQgbGVuID0gc3RybGVuKG9yaWdpbik7CisJCWlmIChvcmlnaW5bMF0gPT0gJ1wnJyAmJiBvcmlnaW5bbGVuIC0gMV0gPT0gJ1wnJykKKwkJCW9yaWdpbiA9IHhtZW1kdXB6KG9yaWdpbiArIDEsIGxlbiAtIDIpOworCX0gZWxzZQorCQlvcmlnaW4gPSB4c3RyZm10KCIlcyBvZiAlcyIsIG9yaWdpbiwgc3JjKTsKKwlpZiAoc3RyY21wKCIuIiwgc3JjKSkKKwkJb3JpZ2luX2RhdGEtPmlzX2xvY2FsX2JyYW5jaCA9IDA7CisJc3RyaW5nX2xpc3RfYXBwZW5kKCZvcmlnaW5zLCBvcmlnaW4pLT51dGlsID0gb3JpZ2luX2RhdGE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2pvaW5lZChjb25zdCBjaGFyICpzaW5ndWxhciwgY29uc3QgY2hhciAqcGx1cmFsLAorCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlpZiAobGlzdC0+bnIgPT0gMCkKKwkJcmV0dXJuOworCWlmIChsaXN0LT5uciA9PSAxKSB7CisJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzJXMiLCBzaW5ndWxhciwgbGlzdC0+aXRlbXNbMF0uc3RyaW5nKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJc3RyYnVmX2FkZHN0cihvdXQsIHBsdXJhbCk7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5uciAtIDE7IGkrKykKKwkJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzJXMiLCBpID4gMCA/ICIsICIgOiAiIiwKKwkJCQkgICAgbGlzdC0+aXRlbXNbaV0uc3RyaW5nKTsKKwkJc3RyYnVmX2FkZGYob3V0LCAiIGFuZCAlcyIsIGxpc3QtPml0ZW1zW2xpc3QtPm5yIC0gMV0uc3RyaW5nKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9icmFuY2hfZGVzYyhzdHJ1Y3Qgc3RyYnVmICpvdXQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN0cmJ1ZiBkZXNjID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIXJlYWRfYnJhbmNoX2Rlc2MoJmRlc2MsIG5hbWUpKSB7CisJCWNvbnN0IGNoYXIgKmJwID0gZGVzYy5idWY7CisJCXdoaWxlICgqYnApIHsKKwkJCWNvbnN0IGNoYXIgKmVwID0gc3RyY2hybnVsKGJwLCAnXG4nKTsKKwkJCWlmICgqZXApCisJCQkJZXArKzsKKwkJCXN0cmJ1Zl9hZGRmKG91dCwgIiAgOiAlLipzIiwgKGludCkoZXAgLSBicCksIGJwKTsKKwkJCWJwID0gZXA7CisJCX0KKwkJc3RyYnVmX2NvbXBsZXRlX2xpbmUob3V0KTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmRlc2MpOworfQorCisjZGVmaW5lIHV0aWxfYXNfaW50ZWdyYWwoZWxlbSkgKChpbnRwdHJfdCkoKGVsZW0pLT51dGlsKSkKKworc3RhdGljIHZvaWQgcmVjb3JkX3BlcnNvbl9mcm9tX2J1ZihpbnQgd2hpY2gsIHN0cnVjdCBzdHJpbmdfbGlzdCAqcGVvcGxlLAorCQkJCSAgIGNvbnN0IGNoYXIgKmJ1ZmZlcikKK3sKKwljaGFyICpuYW1lX2J1ZiwgKm5hbWUsICpuYW1lX2VuZDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqZWxlbTsKKwljb25zdCBjaGFyICpmaWVsZDsKKworCWZpZWxkID0gKHdoaWNoID09ICdhJykgPyAiXG5hdXRob3IgIiA6ICJcbmNvbW1pdHRlciAiOworCW5hbWUgPSBzdHJzdHIoYnVmZmVyLCBmaWVsZCk7CisJaWYgKCFuYW1lKQorCQlyZXR1cm47CisJbmFtZSArPSBzdHJsZW4oZmllbGQpOworCW5hbWVfZW5kID0gc3RyY2hybnVsKG5hbWUsICc8Jyk7CisJaWYgKCpuYW1lX2VuZCkKKwkJbmFtZV9lbmQtLTsKKwl3aGlsZSAoaXNzcGFjZSgqbmFtZV9lbmQpICYmIG5hbWUgPD0gbmFtZV9lbmQpCisJCW5hbWVfZW5kLS07CisJaWYgKG5hbWVfZW5kIDwgbmFtZSkKKwkJcmV0dXJuOworCW5hbWVfYnVmID0geG1lbWR1cHoobmFtZSwgbmFtZV9lbmQgLSBuYW1lICsgMSk7CisKKwllbGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKHBlb3BsZSwgbmFtZV9idWYpOworCWlmICghZWxlbSkgeworCQllbGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KHBlb3BsZSwgbmFtZV9idWYpOworCQllbGVtLT51dGlsID0gKHZvaWQgKikwOworCX0KKwllbGVtLT51dGlsID0gKHZvaWQqKSh1dGlsX2FzX2ludGVncmFsKGVsZW0pICsgMSk7CisJZnJlZShuYW1lX2J1Zik7Cit9CisKKworc3RhdGljIHZvaWQgcmVjb3JkX3BlcnNvbihpbnQgd2hpY2gsIHN0cnVjdCBzdHJpbmdfbGlzdCAqcGVvcGxlLAorCQkJICBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJY29uc3QgY2hhciAqYnVmZmVyID0gZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCBOVUxMKTsKKwlyZWNvcmRfcGVyc29uX2Zyb21fYnVmKHdoaWNoLCBwZW9wbGUsIGJ1ZmZlcik7CisJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIGJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQgY21wX3N0cmluZ19saXN0X3V0aWxfYXNfaW50ZWdyYWwoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICphID0gYV8sICpiID0gYl87CisJcmV0dXJuIHV0aWxfYXNfaW50ZWdyYWwoYikgLSB1dGlsX2FzX2ludGVncmFsKGEpOworfQorCitzdGF0aWMgdm9pZCBhZGRfcGVvcGxlX2NvdW50KHN0cnVjdCBzdHJidWYgKm91dCwgc3RydWN0IHN0cmluZ19saXN0ICpwZW9wbGUpCit7CisJaWYgKHBlb3BsZS0+bnIgPT0gMSkKKwkJc3RyYnVmX2FkZHN0cihvdXQsIHBlb3BsZS0+aXRlbXNbMF0uc3RyaW5nKTsKKwllbHNlIGlmIChwZW9wbGUtPm5yID09IDIpCisJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzICglZCkgYW5kICVzICglZCkiLAorCQkJICAgIHBlb3BsZS0+aXRlbXNbMF0uc3RyaW5nLAorCQkJICAgIChpbnQpdXRpbF9hc19pbnRlZ3JhbCgmcGVvcGxlLT5pdGVtc1swXSksCisJCQkgICAgcGVvcGxlLT5pdGVtc1sxXS5zdHJpbmcsCisJCQkgICAgKGludCl1dGlsX2FzX2ludGVncmFsKCZwZW9wbGUtPml0ZW1zWzFdKSk7CisJZWxzZSBpZiAocGVvcGxlLT5ucikKKwkJc3RyYnVmX2FkZGYob3V0LCAiJXMgKCVkKSBhbmQgb3RoZXJzIiwKKwkJCSAgICBwZW9wbGUtPml0ZW1zWzBdLnN0cmluZywKKwkJCSAgICAoaW50KXV0aWxfYXNfaW50ZWdyYWwoJnBlb3BsZS0+aXRlbXNbMF0pKTsKK30KKworc3RhdGljIHZvaWQgY3JlZGl0X3Blb3BsZShzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCQkgIHN0cnVjdCBzdHJpbmdfbGlzdCAqdGhlbSwKKwkJCSAgaW50IGtpbmQpCit7CisJY29uc3QgY2hhciAqbGFiZWw7CisJY29uc3QgY2hhciAqbWU7CisKKwlpZiAoa2luZCA9PSAnYScpIHsKKwkJbGFiZWwgPSAiQnkiOworCQltZSA9IGdpdF9hdXRob3JfaW5mbyhJREVOVF9OT19EQVRFKTsKKwl9IGVsc2UgeworCQlsYWJlbCA9ICJWaWEiOworCQltZSA9IGdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9OT19EQVRFKTsKKwl9CisKKwlpZiAoIXRoZW0tPm5yIHx8CisJICAgICh0aGVtLT5uciA9PSAxICYmCisJICAgICBtZSAmJgorCSAgICAgc2tpcF9wcmVmaXgobWUsIHRoZW0tPml0ZW1zLT5zdHJpbmcsICZtZSkgJiYKKwkgICAgIHN0YXJ0c193aXRoKG1lLCAiIDwiKSkpCisJCXJldHVybjsKKwlzdHJidWZfYWRkZihvdXQsICJcbiVjICVzICIsIGNvbW1lbnRfbGluZV9jaGFyLCBsYWJlbCk7CisJYWRkX3Blb3BsZV9jb3VudChvdXQsIHRoZW0pOworfQorCitzdGF0aWMgdm9pZCBhZGRfcGVvcGxlX2luZm8oc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqYXV0aG9ycywKKwkJCSAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNvbW1pdHRlcnMpCit7CisJUVNPUlQoYXV0aG9ycy0+aXRlbXMsIGF1dGhvcnMtPm5yLAorCSAgICAgIGNtcF9zdHJpbmdfbGlzdF91dGlsX2FzX2ludGVncmFsKTsKKwlRU09SVChjb21taXR0ZXJzLT5pdGVtcywgY29tbWl0dGVycy0+bnIsCisJICAgICAgY21wX3N0cmluZ19saXN0X3V0aWxfYXNfaW50ZWdyYWwpOworCisJY3JlZGl0X3Blb3BsZShvdXQsIGF1dGhvcnMsICdhJyk7CisJY3JlZGl0X3Blb3BsZShvdXQsIGNvbW1pdHRlcnMsICdjJyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3J0bG9nKGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgc3RydWN0IG9yaWdpbl9kYXRhICpvcmlnaW5fZGF0YSwKKwkJICAgICBzdHJ1Y3QgY29tbWl0ICpoZWFkLAorCQkgICAgIHN0cnVjdCByZXZfaW5mbyAqcmV2LAorCQkgICAgIHN0cnVjdCBmbXRfbWVyZ2VfbXNnX29wdHMgKm9wdHMsCisJCSAgICAgc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCWludCBpLCBjb3VudCA9IDA7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBvYmplY3QgKmJyYW5jaDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3ViamVjdHMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYXV0aG9ycyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBjb21taXR0ZXJzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJaW50IGZsYWdzID0gVU5JTlRFUkVTVElORyB8IFRSRUVTQU1FIHwgU0VFTiB8IFNIT1dOIHwgQURERUQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCA9ICZvcmlnaW5fZGF0YS0+b2lkOworCWludCBsaW1pdCA9IG9wdHMtPnNob3J0bG9nX2xlbjsKKworCWJyYW5jaCA9IGRlcmVmX3RhZyh0aGVfcmVwb3NpdG9yeSwgcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpLAorCQkJICAgb2lkX3RvX2hleChvaWQpLAorCQkJICAgdGhlX2hhc2hfYWxnby0+aGV4c3opOworCWlmICghYnJhbmNoIHx8IGJyYW5jaC0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQlyZXR1cm47CisKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgcmV2LCBOVUxMKTsKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2LCBicmFuY2gsIG5hbWUpOworCWFkZF9wZW5kaW5nX29iamVjdChyZXYsICZoZWFkLT5vYmplY3QsICJeSEVBRCIpOworCWhlYWQtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsocmV2KSkKKwkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKHJldikpICE9IE5VTEwpIHsKKwkJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKworCQlpZiAoY29tbWl0LT5wYXJlbnRzICYmIGNvbW1pdC0+cGFyZW50cy0+bmV4dCkgeworCQkJLyogZG8gbm90IGxpc3QgYSBtZXJnZSBidXQgY291bnQgY29tbWl0dGVyICovCisJCQlpZiAob3B0cy0+Y3JlZGl0X3Blb3BsZSkKKwkJCQlyZWNvcmRfcGVyc29uKCdjJywgJmNvbW1pdHRlcnMsIGNvbW1pdCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIWNvdW50ICYmIG9wdHMtPmNyZWRpdF9wZW9wbGUpCisJCQkvKiB0aGUgJ3RpcCcgY29tbWl0dGVyICovCisJCQlyZWNvcmRfcGVyc29uKCdjJywgJmNvbW1pdHRlcnMsIGNvbW1pdCk7CisJCWlmIChvcHRzLT5jcmVkaXRfcGVvcGxlKQorCQkJcmVjb3JkX3BlcnNvbignYScsICZhdXRob3JzLCBjb21taXQpOworCQljb3VudCsrOworCQlpZiAoc3ViamVjdHMubnIgPiBsaW1pdCkKKwkJCWNvbnRpbnVlOworCisJCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICIlcyIsICZzYiwgJmN0eCk7CisJCXN0cmJ1Zl9sdHJpbSgmc2IpOworCisJCWlmICghc2IubGVuKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdWJqZWN0cywKKwkJCQkJICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCWVsc2UKKwkJCXN0cmluZ19saXN0X2FwcGVuZF9ub2R1cCgmc3ViamVjdHMsCisJCQkJCQkgc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpKTsKKwl9CisKKwlpZiAob3B0cy0+Y3JlZGl0X3Blb3BsZSkKKwkJYWRkX3Blb3BsZV9pbmZvKG91dCwgJmF1dGhvcnMsICZjb21taXR0ZXJzKTsKKwlpZiAoY291bnQgPiBsaW1pdCkKKwkJc3RyYnVmX2FkZGYob3V0LCAiXG4qICVzOiAoJWQgY29tbWl0cylcbiIsIG5hbWUsIGNvdW50KTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKG91dCwgIlxuKiAlczpcbiIsIG5hbWUpOworCisJaWYgKG9yaWdpbl9kYXRhLT5pc19sb2NhbF9icmFuY2ggJiYgdXNlX2JyYW5jaF9kZXNjKQorCQlhZGRfYnJhbmNoX2Rlc2Mob3V0LCBuYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBzdWJqZWN0cy5ucjsgaSsrKQorCQlpZiAoaSA+PSBsaW1pdCkKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCAiICAuLi5cbiIpOworCQllbHNlCisJCQlzdHJidWZfYWRkZihvdXQsICIgICVzXG4iLCBzdWJqZWN0cy5pdGVtc1tpXS5zdHJpbmcpOworCisJY2xlYXJfY29tbWl0X21hcmtzKChzdHJ1Y3QgY29tbWl0ICopYnJhbmNoLCBmbGFncyk7CisJY2xlYXJfY29tbWl0X21hcmtzKGhlYWQsIGZsYWdzKTsKKwlmcmVlX2NvbW1pdF9saXN0KHJldi0+Y29tbWl0cyk7CisJcmV2LT5jb21taXRzID0gTlVMTDsKKwlyZXYtPnBlbmRpbmcubnIgPSAwOworCisJc3RyaW5nX2xpc3RfY2xlYXIoJmF1dGhvcnMsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZjb21taXR0ZXJzLCAwKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3ViamVjdHMsIDApOworfQorCitzdGF0aWMgdm9pZCBmbXRfbWVyZ2VfbXNnX3RpdGxlKHN0cnVjdCBzdHJidWYgKm91dCwKKwkJCQljb25zdCBjaGFyICpjdXJyZW50X2JyYW5jaCkKK3sKKwlpbnQgaSA9IDA7CisJY2hhciAqc2VwID0gIiI7CisKKwlzdHJidWZfYWRkc3RyKG91dCwgIk1lcmdlICIpOworCWZvciAoaSA9IDA7IGkgPCBzcmNzLm5yOyBpKyspIHsKKwkJc3RydWN0IHNyY19kYXRhICpzcmNfZGF0YSA9IHNyY3MuaXRlbXNbaV0udXRpbDsKKwkJY29uc3QgY2hhciAqc3Vic2VwID0gIiI7CisKKwkJc3RyYnVmX2FkZHN0cihvdXQsIHNlcCk7CisJCXNlcCA9ICI7ICI7CisKKwkJaWYgKHNyY19kYXRhLT5oZWFkX3N0YXR1cyA9PSAxKSB7CisJCQlzdHJidWZfYWRkc3RyKG91dCwgc3Jjcy5pdGVtc1tpXS5zdHJpbmcpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNyY19kYXRhLT5oZWFkX3N0YXR1cyA9PSAzKSB7CisJCQlzdWJzZXAgPSAiLCAiOworCQkJc3RyYnVmX2FkZHN0cihvdXQsICJIRUFEIik7CisJCX0KKwkJaWYgKHNyY19kYXRhLT5icmFuY2gubnIpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCBzdWJzZXApOworCQkJc3Vic2VwID0gIiwgIjsKKwkJCXByaW50X2pvaW5lZCgiYnJhbmNoICIsICJicmFuY2hlcyAiLCAmc3JjX2RhdGEtPmJyYW5jaCwKKwkJCQkJb3V0KTsKKwkJfQorCQlpZiAoc3JjX2RhdGEtPnJfYnJhbmNoLm5yKSB7CisJCQlzdHJidWZfYWRkc3RyKG91dCwgc3Vic2VwKTsKKwkJCXN1YnNlcCA9ICIsICI7CisJCQlwcmludF9qb2luZWQoInJlbW90ZS10cmFja2luZyBicmFuY2ggIiwgInJlbW90ZS10cmFja2luZyBicmFuY2hlcyAiLAorCQkJCQkmc3JjX2RhdGEtPnJfYnJhbmNoLCBvdXQpOworCQl9CisJCWlmIChzcmNfZGF0YS0+dGFnLm5yKSB7CisJCQlzdHJidWZfYWRkc3RyKG91dCwgc3Vic2VwKTsKKwkJCXN1YnNlcCA9ICIsICI7CisJCQlwcmludF9qb2luZWQoInRhZyAiLCAidGFncyAiLCAmc3JjX2RhdGEtPnRhZywgb3V0KTsKKwkJfQorCQlpZiAoc3JjX2RhdGEtPmdlbmVyaWMubnIpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCBzdWJzZXApOworCQkJcHJpbnRfam9pbmVkKCJjb21taXQgIiwgImNvbW1pdHMgIiwgJnNyY19kYXRhLT5nZW5lcmljLAorCQkJCQlvdXQpOworCQl9CisJCWlmIChzdHJjbXAoIi4iLCBzcmNzLml0ZW1zW2ldLnN0cmluZykpCisJCQlzdHJidWZfYWRkZihvdXQsICIgb2YgJXMiLCBzcmNzLml0ZW1zW2ldLnN0cmluZyk7CisJfQorCisJaWYgKCFzdHJjbXAoIm1hc3RlciIsIGN1cnJlbnRfYnJhbmNoKSkKKwkJc3RyYnVmX2FkZGNoKG91dCwgJ1xuJyk7CisJZWxzZQorCQlzdHJidWZfYWRkZihvdXQsICIgaW50byAlc1xuIiwgY3VycmVudF9icmFuY2gpOworfQorCitzdGF0aWMgdm9pZCBmbXRfdGFnX3NpZ25hdHVyZShzdHJ1Y3Qgc3RyYnVmICp0YWdidWYsCisJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICpzaWcsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwljb25zdCBjaGFyICp0YWdfYm9keSA9IHN0cnN0cihidWYsICJcblxuIik7CisJaWYgKHRhZ19ib2R5KSB7CisJCXRhZ19ib2R5ICs9IDI7CisJCXN0cmJ1Zl9hZGQodGFnYnVmLCB0YWdfYm9keSwgYnVmICsgbGVuIC0gdGFnX2JvZHkpOworCX0KKwlzdHJidWZfY29tcGxldGVfbGluZSh0YWdidWYpOworCWlmIChzaWctPmxlbikgeworCQlzdHJidWZfYWRkY2godGFnYnVmLCAnXG4nKTsKKwkJc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXModGFnYnVmLCBzaWctPmJ1Ziwgc2lnLT5sZW4pOworCX0KK30KKworc3RhdGljIHZvaWQgZm10X21lcmdlX21zZ19zaWdzKHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlpbnQgaSwgdGFnX251bWJlciA9IDAsIGZpcnN0X3RhZyA9IDA7CisJc3RydWN0IHN0cmJ1ZiB0YWdidWYgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoaSA9IDA7IGkgPCBvcmlnaW5zLm5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9pZCAqb2lkID0gb3JpZ2lucy5pdGVtc1tpXS51dGlsOworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgbGVuOworCQljaGFyICpidWYgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnR5cGUsICZzaXplKTsKKwkJc3RydWN0IHNpZ25hdHVyZV9jaGVjayBzaWdjID0geyBOVUxMIH07CisJCXN0cnVjdCBzdHJidWYgc2lnID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKCFidWYgfHwgdHlwZSAhPSBPQkpfVEFHKQorCQkJZ290byBuZXh0OworCQlsZW4gPSBwYXJzZV9zaWduYXR1cmUoYnVmLCBzaXplKTsKKworCQlpZiAoc2l6ZSA9PSBsZW4pCisJCQk7IC8qIG1lcmVseSBhbm5vdGF0ZWQgKi8KKwkJZWxzZSBpZiAoY2hlY2tfc2lnbmF0dXJlKGJ1ZiwgbGVuLCBidWYgKyBsZW4sIHNpemUgLSBsZW4sICZzaWdjKSAmJgorCQkJIXNpZ2MuZ3BnX291dHB1dCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNpZywgImdwZyB2ZXJpZmljYXRpb24gZmFpbGVkLlxuIik7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNpZywgc2lnYy5ncGdfb3V0cHV0KTsKKwkJc2lnbmF0dXJlX2NoZWNrX2NsZWFyKCZzaWdjKTsKKworCQlpZiAoIXRhZ19udW1iZXIrKykgeworCQkJZm10X3RhZ19zaWduYXR1cmUoJnRhZ2J1ZiwgJnNpZywgYnVmLCBsZW4pOworCQkJZmlyc3RfdGFnID0gaTsKKwkJfSBlbHNlIHsKKwkJCWlmICh0YWdfbnVtYmVyID09IDIpIHsKKwkJCQlzdHJ1Y3Qgc3RyYnVmIHRhZ2xpbmUgPSBTVFJCVUZfSU5JVDsKKwkJCQlzdHJidWZfYWRkY2goJnRhZ2xpbmUsICdcbicpOworCQkJCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKCZ0YWdsaW5lLAorCQkJCQkJb3JpZ2lucy5pdGVtc1tmaXJzdF90YWddLnN0cmluZywKKwkJCQkJCXN0cmxlbihvcmlnaW5zLml0ZW1zW2ZpcnN0X3RhZ10uc3RyaW5nKSk7CisJCQkJc3RyYnVmX2luc2VydCgmdGFnYnVmLCAwLCB0YWdsaW5lLmJ1ZiwKKwkJCQkJICAgICAgdGFnbGluZS5sZW4pOworCQkJCXN0cmJ1Zl9yZWxlYXNlKCZ0YWdsaW5lKTsKKwkJCX0KKwkJCXN0cmJ1Zl9hZGRjaCgmdGFnYnVmLCAnXG4nKTsKKwkJCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKCZ0YWdidWYsCisJCQkJCW9yaWdpbnMuaXRlbXNbaV0uc3RyaW5nLAorCQkJCQlzdHJsZW4ob3JpZ2lucy5pdGVtc1tpXS5zdHJpbmcpKTsKKwkJCWZtdF90YWdfc2lnbmF0dXJlKCZ0YWdidWYsICZzaWcsIGJ1ZiwgbGVuKTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmc2lnKTsKKwluZXh0OgorCQlmcmVlKGJ1Zik7CisJfQorCWlmICh0YWdidWYubGVuKSB7CisJCXN0cmJ1Zl9hZGRjaChvdXQsICdcbicpOworCQlzdHJidWZfYWRkYnVmKG91dCwgJnRhZ2J1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZ0YWdidWYpOworfQorCitzdGF0aWMgdm9pZCBmaW5kX21lcmdlX3BhcmVudHMoc3RydWN0IG1lcmdlX3BhcmVudHMgKnJlc3VsdCwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICppbiwgc3RydWN0IG9iamVjdF9pZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQ7CisJaW50IHBvcyA9IDAsIGksIGo7CisKKwlwYXJlbnRzID0gTlVMTDsKKwl3aGlsZSAocG9zIDwgaW4tPmxlbikgeworCQlpbnQgbGVuOworCQljaGFyICpwID0gaW4tPmJ1ZiArIHBvczsKKwkJY2hhciAqbmV3bGluZSA9IHN0cmNocihwLCAnXG4nKTsKKwkJY29uc3QgY2hhciAqcTsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudDsKKwkJc3RydWN0IG9iamVjdCAqb2JqOworCisJCWxlbiA9IG5ld2xpbmUgPyBuZXdsaW5lIC0gcCA6IHN0cmxlbihwKTsKKwkJcG9zICs9IGxlbiArICEhbmV3bGluZTsKKworCQlpZiAocGFyc2Vfb2lkX2hleChwLCAmb2lkLCAmcSkgfHwKKwkJICAgIHFbMF0gIT0gJ1x0JyB8fAorCQkgICAgcVsxXSAhPSAnXHQnKQorCQkJY29udGludWU7IC8qIHNraXAgbm90LWZvci1tZXJnZSAqLworCQkvKgorCQkgKiBEbyBub3QgdXNlIGdldF9tZXJnZV9wYXJlbnQoKSBoZXJlOyB3ZSBkbyBub3QgaGF2ZQorCQkgKiAibmFtZSIgaGVyZSBhbmQgd2UgZG8gbm90IHdhbnQgdG8gY29udGFtaW5hdGUgaXRzCisJCSAqIHV0aWwgZmllbGQgeWV0LgorCQkgKi8KKwkJb2JqID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwkJcGFyZW50ID0gKHN0cnVjdCBjb21taXQgKilwZWVsX3RvX3R5cGUoTlVMTCwgMCwgb2JqLCBPQkpfQ09NTUlUKTsKKwkJaWYgKCFwYXJlbnQpCisJCQljb250aW51ZTsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KHBhcmVudCwgJnBhcmVudHMpOworCQlhZGRfbWVyZ2VfcGFyZW50KHJlc3VsdCwgJm9iai0+b2lkLCAmcGFyZW50LT5vYmplY3Qub2lkKTsKKwl9CisJaGVhZF9jb21taXQgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCBoZWFkKTsKKwlpZiAoaGVhZF9jb21taXQpCisJCWNvbW1pdF9saXN0X2luc2VydChoZWFkX2NvbW1pdCwgJnBhcmVudHMpOworCXJlZHVjZV9oZWFkc19yZXBsYWNlKCZwYXJlbnRzKTsKKworCXdoaWxlIChwYXJlbnRzKSB7CisJCXN0cnVjdCBjb21taXQgKmNtaXQgPSBwb3BfY29tbWl0KCZwYXJlbnRzKTsKKwkJZm9yIChpID0gMDsgaSA8IHJlc3VsdC0+bnI7IGkrKykKKwkJCWlmIChvaWRlcSgmcmVzdWx0LT5pdGVtW2ldLmNvbW1pdCwgJmNtaXQtPm9iamVjdC5vaWQpKQorCQkJCXJlc3VsdC0+aXRlbVtpXS51c2VkID0gMTsKKwl9CisKKwlmb3IgKGkgPSBqID0gMDsgaSA8IHJlc3VsdC0+bnI7IGkrKykgeworCQlpZiAocmVzdWx0LT5pdGVtW2ldLnVzZWQpIHsKKwkJCWlmIChpICE9IGopCisJCQkJcmVzdWx0LT5pdGVtW2pdID0gcmVzdWx0LT5pdGVtW2ldOworCQkJaisrOworCQl9CisJfQorCXJlc3VsdC0+bnIgPSBqOworfQorCisKK2ludCBmbXRfbWVyZ2VfbXNnKHN0cnVjdCBzdHJidWYgKmluLCBzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCSAgc3RydWN0IGZtdF9tZXJnZV9tc2dfb3B0cyAqb3B0cykKK3sKKwlpbnQgaSA9IDAsIHBvcyA9IDA7CisJc3RydWN0IG9iamVjdF9pZCBoZWFkX29pZDsKKwljb25zdCBjaGFyICpjdXJyZW50X2JyYW5jaDsKKwl2b2lkICpjdXJyZW50X2JyYW5jaF90b19mcmVlOworCXN0cnVjdCBtZXJnZV9wYXJlbnRzIG1lcmdlX3BhcmVudHM7CisKKwltZW1zZXQoJm1lcmdlX3BhcmVudHMsIDAsIHNpemVvZihtZXJnZV9wYXJlbnRzKSk7CisKKwkvKiBnZXQgY3VycmVudCBicmFuY2ggKi8KKwljdXJyZW50X2JyYW5jaCA9IGN1cnJlbnRfYnJhbmNoX3RvX2ZyZWUgPQorCQlyZXNvbHZlX3JlZmR1cCgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsICZoZWFkX29pZCwgTlVMTCk7CisJaWYgKCFjdXJyZW50X2JyYW5jaCkKKwkJZGllKCJObyBjdXJyZW50IGJyYW5jaCIpOworCWlmIChzdGFydHNfd2l0aChjdXJyZW50X2JyYW5jaCwgInJlZnMvaGVhZHMvIikpCisJCWN1cnJlbnRfYnJhbmNoICs9IDExOworCisJZmluZF9tZXJnZV9wYXJlbnRzKCZtZXJnZV9wYXJlbnRzLCBpbiwgJmhlYWRfb2lkKTsKKworCS8qIGdldCBhIGxpbmUgKi8KKwl3aGlsZSAocG9zIDwgaW4tPmxlbikgeworCQlpbnQgbGVuOworCQljaGFyICpuZXdsaW5lLCAqcCA9IGluLT5idWYgKyBwb3M7CisKKwkJbmV3bGluZSA9IHN0cmNocihwLCAnXG4nKTsKKwkJbGVuID0gbmV3bGluZSA/IG5ld2xpbmUgLSBwIDogc3RybGVuKHApOworCQlwb3MgKz0gbGVuICsgISFuZXdsaW5lOworCQlpKys7CisJCXBbbGVuXSA9IDA7CisJCWlmIChoYW5kbGVfbGluZShwLCAmbWVyZ2VfcGFyZW50cykpCisJCQlkaWUoImVycm9yIGluIGxpbmUgJWQ6ICUuKnMiLCBpLCBsZW4sIHApOworCX0KKworCWlmIChvcHRzLT5hZGRfdGl0bGUgJiYgc3Jjcy5ucikKKwkJZm10X21lcmdlX21zZ190aXRsZShvdXQsIGN1cnJlbnRfYnJhbmNoKTsKKworCWlmIChvcmlnaW5zLm5yKQorCQlmbXRfbWVyZ2VfbXNnX3NpZ3Mob3V0KTsKKworCWlmIChvcHRzLT5zaG9ydGxvZ19sZW4pIHsKKwkJc3RydWN0IGNvbW1pdCAqaGVhZDsKKwkJc3RydWN0IHJldl9pbmZvIHJldjsKKworCQloZWFkID0gbG9va3VwX2NvbW1pdF9vcl9kaWUoJmhlYWRfb2lkLCAiSEVBRCIpOworCQlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2LCBOVUxMKTsKKwkJcmV2LmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9PTkVMSU5FOworCQlyZXYuaWdub3JlX21lcmdlcyA9IDE7CisJCXJldi5saW1pdGVkID0gMTsKKworCQlzdHJidWZfY29tcGxldGVfbGluZShvdXQpOworCisJCWZvciAoaSA9IDA7IGkgPCBvcmlnaW5zLm5yOyBpKyspCisJCQlzaG9ydGxvZyhvcmlnaW5zLml0ZW1zW2ldLnN0cmluZywKKwkJCQkgb3JpZ2lucy5pdGVtc1tpXS51dGlsLAorCQkJCSBoZWFkLCAmcmV2LCBvcHRzLCBvdXQpOworCX0KKworCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKG91dCk7CisJZnJlZShjdXJyZW50X2JyYW5jaF90b19mcmVlKTsKKwlmcmVlKG1lcmdlX3BhcmVudHMuaXRlbSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9mbXQtbWVyZ2UtbXNnLmggYi9mbXQtbWVyZ2UtbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhYjBlMAotLS0gL2Rldi9udWxsCisrKyBiL2ZtdC1tZXJnZS1tc2cuaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIEZNVF9NRVJHRV9NU0dfSAorI2RlZmluZSBGTVRfTUVSR0VfTVNHX0gKKworI2luY2x1ZGUgInN0cmJ1Zi5oIgorCisjZGVmaW5lIERFRkFVTFRfTUVSR0VfTE9HX0xFTiAyMAorCitzdHJ1Y3QgZm10X21lcmdlX21zZ19vcHRzIHsKKwl1bnNpZ25lZCBhZGRfdGl0bGU6MSwKKwkJY3JlZGl0X3Blb3BsZToxOworCWludCBzaG9ydGxvZ19sZW47Cit9OworCitleHRlcm4gaW50IG1lcmdlX2xvZ19jb25maWc7CitpbnQgZm10X21lcmdlX21zZ19jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOworaW50IGZtdF9tZXJnZV9tc2coc3RydWN0IHN0cmJ1ZiAqaW4sIHN0cnVjdCBzdHJidWYgKm91dCwKKwkJICBzdHJ1Y3QgZm10X21lcmdlX21zZ19vcHRzICopOworCisKKyNlbmRpZiAvKiBGTVRfTUVSR0VfTVNHX0ggKi8KZGlmZiAtLWdpdCBhL2ZzY2suYyBiL2ZzY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmIzZWNmCi0tLSAvZGV2L251bGwKKysrIGIvZnNjay5jCkBAIC0wLDAgKzEsMTI4NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiZnNjay5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAiZGVjb3JhdGUuaCIKKyNpbmNsdWRlICJvaWRzZXQuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS1jb25maWcuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjcmVkZW50aWFsLmgiCisjaW5jbHVkZSAiaGVscC5oIgorCitzdGF0aWMgc3RydWN0IG9pZHNldCBnaXRtb2R1bGVzX2ZvdW5kID0gT0lEU0VUX0lOSVQ7CitzdGF0aWMgc3RydWN0IG9pZHNldCBnaXRtb2R1bGVzX2RvbmUgPSBPSURTRVRfSU5JVDsKKworI2RlZmluZSBGU0NLX0ZBVEFMIC0xCisjZGVmaW5lIEZTQ0tfSU5GTyAtMgorCisjZGVmaW5lIEZPUkVBQ0hfTVNHX0lEKEZVTkMpIFwKKwkvKiBmYXRhbCBlcnJvcnMgKi8gXAorCUZVTkMoTlVMX0lOX0hFQURFUiwgRkFUQUwpIFwKKwlGVU5DKFVOVEVSTUlOQVRFRF9IRUFERVIsIEZBVEFMKSBcCisJLyogZXJyb3JzICovIFwKKwlGVU5DKEJBRF9EQVRFLCBFUlJPUikgXAorCUZVTkMoQkFEX0RBVEVfT1ZFUkZMT1csIEVSUk9SKSBcCisJRlVOQyhCQURfRU1BSUwsIEVSUk9SKSBcCisJRlVOQyhCQURfTkFNRSwgRVJST1IpIFwKKwlGVU5DKEJBRF9PQkpFQ1RfU0hBMSwgRVJST1IpIFwKKwlGVU5DKEJBRF9QQVJFTlRfU0hBMSwgRVJST1IpIFwKKwlGVU5DKEJBRF9UQUdfT0JKRUNULCBFUlJPUikgXAorCUZVTkMoQkFEX1RJTUVaT05FLCBFUlJPUikgXAorCUZVTkMoQkFEX1RSRUUsIEVSUk9SKSBcCisJRlVOQyhCQURfVFJFRV9TSEExLCBFUlJPUikgXAorCUZVTkMoQkFEX1RZUEUsIEVSUk9SKSBcCisJRlVOQyhEVVBMSUNBVEVfRU5UUklFUywgRVJST1IpIFwKKwlGVU5DKE1JU1NJTkdfQVVUSE9SLCBFUlJPUikgXAorCUZVTkMoTUlTU0lOR19DT01NSVRURVIsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX0VNQUlMLCBFUlJPUikgXAorCUZVTkMoTUlTU0lOR19OQU1FX0JFRk9SRV9FTUFJTCwgRVJST1IpIFwKKwlGVU5DKE1JU1NJTkdfT0JKRUNULCBFUlJPUikgXAorCUZVTkMoTUlTU0lOR19TUEFDRV9CRUZPUkVfREFURSwgRVJST1IpIFwKKwlGVU5DKE1JU1NJTkdfU1BBQ0VfQkVGT1JFX0VNQUlMLCBFUlJPUikgXAorCUZVTkMoTUlTU0lOR19UQUcsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX1RBR19FTlRSWSwgRVJST1IpIFwKKwlGVU5DKE1JU1NJTkdfVFJFRSwgRVJST1IpIFwKKwlGVU5DKE1JU1NJTkdfVFJFRV9PQkpFQ1QsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX1RZUEUsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX1RZUEVfRU5UUlksIEVSUk9SKSBcCisJRlVOQyhNVUxUSVBMRV9BVVRIT1JTLCBFUlJPUikgXAorCUZVTkMoVFJFRV9OT1RfU09SVEVELCBFUlJPUikgXAorCUZVTkMoVU5LTk9XTl9UWVBFLCBFUlJPUikgXAorCUZVTkMoWkVST19QQURERURfREFURSwgRVJST1IpIFwKKwlGVU5DKEdJVE1PRFVMRVNfTUlTU0lORywgRVJST1IpIFwKKwlGVU5DKEdJVE1PRFVMRVNfQkxPQiwgRVJST1IpIFwKKwlGVU5DKEdJVE1PRFVMRVNfTEFSR0UsIEVSUk9SKSBcCisJRlVOQyhHSVRNT0RVTEVTX05BTUUsIEVSUk9SKSBcCisJRlVOQyhHSVRNT0RVTEVTX1NZTUxJTkssIEVSUk9SKSBcCisJRlVOQyhHSVRNT0RVTEVTX1VSTCwgRVJST1IpIFwKKwlGVU5DKEdJVE1PRFVMRVNfUEFUSCwgRVJST1IpIFwKKwlGVU5DKEdJVE1PRFVMRVNfVVBEQVRFLCBFUlJPUikgXAorCS8qIHdhcm5pbmdzICovIFwKKwlGVU5DKEJBRF9GSUxFTU9ERSwgV0FSTikgXAorCUZVTkMoRU1QVFlfTkFNRSwgV0FSTikgXAorCUZVTkMoRlVMTF9QQVRITkFNRSwgV0FSTikgXAorCUZVTkMoSEFTX0RPVCwgV0FSTikgXAorCUZVTkMoSEFTX0RPVERPVCwgV0FSTikgXAorCUZVTkMoSEFTX0RPVEdJVCwgV0FSTikgXAorCUZVTkMoTlVMTF9TSEExLCBXQVJOKSBcCisJRlVOQyhaRVJPX1BBRERFRF9GSUxFTU9ERSwgV0FSTikgXAorCUZVTkMoTlVMX0lOX0NPTU1JVCwgV0FSTikgXAorCS8qIGluZm9zIChyZXBvcnRlZCBhcyB3YXJuaW5ncywgYnV0IGlnbm9yZWQgYnkgZGVmYXVsdCkgKi8gXAorCUZVTkMoR0lUTU9EVUxFU19QQVJTRSwgSU5GTykgXAorCUZVTkMoQkFEX1RBR19OQU1FLCBJTkZPKSBcCisJRlVOQyhNSVNTSU5HX1RBR0dFUl9FTlRSWSwgSU5GTykKKworI2RlZmluZSBNU0dfSUQoaWQsIG1zZ190eXBlKSBGU0NLX01TR18jI2lkLAorZW51bSBmc2NrX21zZ19pZCB7CisJRk9SRUFDSF9NU0dfSUQoTVNHX0lEKQorCUZTQ0tfTVNHX01BWAorfTsKKyN1bmRlZiBNU0dfSUQKKworI2RlZmluZSBTVFIoeCkgI3gKKyNkZWZpbmUgTVNHX0lEKGlkLCBtc2dfdHlwZSkgeyBTVFIoaWQpLCBOVUxMLCBOVUxMLCBGU0NLXyMjbXNnX3R5cGUgfSwKK3N0YXRpYyBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKmlkX3N0cmluZzsKKwljb25zdCBjaGFyICpkb3duY2FzZWQ7CisJY29uc3QgY2hhciAqY2FtZWxjYXNlZDsKKwlpbnQgbXNnX3R5cGU7Cit9IG1zZ19pZF9pbmZvW0ZTQ0tfTVNHX01BWCArIDFdID0geworCUZPUkVBQ0hfTVNHX0lEKE1TR19JRCkKKwl7IE5VTEwsIE5VTEwsIE5VTEwsIC0xIH0KK307CisjdW5kZWYgTVNHX0lECisKK3N0YXRpYyB2b2lkIHByZXBhcmVfbXNnX2lkcyh2b2lkKQoreworCWludCBpOworCisJaWYgKG1zZ19pZF9pbmZvWzBdLmRvd25jYXNlZCkKKwkJcmV0dXJuOworCisJLyogY29udmVydCBpZF9zdHJpbmcgdG8gbG93ZXIgY2FzZSwgd2l0aG91dCB1bmRlcnNjb3Jlcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgRlNDS19NU0dfTUFYOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcCA9IG1zZ19pZF9pbmZvW2ldLmlkX3N0cmluZzsKKwkJaW50IGxlbiA9IHN0cmxlbihwKTsKKwkJY2hhciAqcSA9IHhtYWxsb2MobGVuKTsKKworCQltc2dfaWRfaW5mb1tpXS5kb3duY2FzZWQgPSBxOworCQl3aGlsZSAoKnApCisJCQlpZiAoKnAgPT0gJ18nKQorCQkJCXArKzsKKwkJCWVsc2UKKwkJCQkqKHEpKysgPSB0b2xvd2VyKCoocCkrKyk7CisJCSpxID0gJ1wwJzsKKworCQlwID0gbXNnX2lkX2luZm9baV0uaWRfc3RyaW5nOworCQlxID0geG1hbGxvYyhsZW4pOworCQltc2dfaWRfaW5mb1tpXS5jYW1lbGNhc2VkID0gcTsKKwkJd2hpbGUgKCpwKSB7CisJCQlpZiAoKnAgPT0gJ18nKSB7CisJCQkJcCsrOworCQkJCWlmICgqcCkKKwkJCQkJKnErKyA9ICpwKys7CisJCQl9IGVsc2UgeworCQkJCSpxKysgPSB0b2xvd2VyKCpwKyspOworCQkJfQorCQl9CisJCSpxID0gJ1wwJzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfbXNnX2lkKGNvbnN0IGNoYXIgKnRleHQpCit7CisJaW50IGk7CisKKwlwcmVwYXJlX21zZ19pZHMoKTsKKworCWZvciAoaSA9IDA7IGkgPCBGU0NLX01TR19NQVg7IGkrKykKKwkJaWYgKCFzdHJjbXAodGV4dCwgbXNnX2lkX2luZm9baV0uZG93bmNhc2VkKSkKKwkJCXJldHVybiBpOworCisJcmV0dXJuIC0xOworfQorCit2b2lkIGxpc3RfY29uZmlnX2ZzY2tfbXNnX2lkcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKworCXByZXBhcmVfbXNnX2lkcygpOworCisJZm9yIChpID0gMDsgaSA8IEZTQ0tfTVNHX01BWDsgaSsrKQorCQlsaXN0X2NvbmZpZ19pdGVtKGxpc3QsIHByZWZpeCwgbXNnX2lkX2luZm9baV0uY2FtZWxjYXNlZCk7Cit9CisKK3N0YXRpYyBpbnQgZnNja19tc2dfdHlwZShlbnVtIGZzY2tfbXNnX2lkIG1zZ19pZCwKKwlzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWludCBtc2dfdHlwZTsKKworCWFzc2VydChtc2dfaWQgPj0gMCAmJiBtc2dfaWQgPCBGU0NLX01TR19NQVgpOworCisJaWYgKG9wdGlvbnMtPm1zZ190eXBlKQorCQltc2dfdHlwZSA9IG9wdGlvbnMtPm1zZ190eXBlW21zZ19pZF07CisJZWxzZSB7CisJCW1zZ190eXBlID0gbXNnX2lkX2luZm9bbXNnX2lkXS5tc2dfdHlwZTsKKwkJaWYgKG9wdGlvbnMtPnN0cmljdCAmJiBtc2dfdHlwZSA9PSBGU0NLX1dBUk4pCisJCQltc2dfdHlwZSA9IEZTQ0tfRVJST1I7CisJfQorCisJcmV0dXJuIG1zZ190eXBlOworfQorCitzdGF0aWMgaW50IHBhcnNlX21zZ190eXBlKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpZiAoIXN0cmNtcChzdHIsICJlcnJvciIpKQorCQlyZXR1cm4gRlNDS19FUlJPUjsKKwllbHNlIGlmICghc3RyY21wKHN0ciwgIndhcm4iKSkKKwkJcmV0dXJuIEZTQ0tfV0FSTjsKKwllbHNlIGlmICghc3RyY21wKHN0ciwgImlnbm9yZSIpKQorCQlyZXR1cm4gRlNDS19JR05PUkU7CisJZWxzZQorCQlkaWUoIlVua25vd24gZnNjayBtZXNzYWdlIHR5cGU6ICclcyciLCBzdHIpOworfQorCitpbnQgaXNfdmFsaWRfbXNnX3R5cGUoY29uc3QgY2hhciAqbXNnX2lkLCBjb25zdCBjaGFyICptc2dfdHlwZSkKK3sKKwlpZiAocGFyc2VfbXNnX2lkKG1zZ19pZCkgPCAwKQorCQlyZXR1cm4gMDsKKwlwYXJzZV9tc2dfdHlwZShtc2dfdHlwZSk7CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgZnNja19zZXRfbXNnX3R5cGUoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywKKwkJY29uc3QgY2hhciAqbXNnX2lkLCBjb25zdCBjaGFyICptc2dfdHlwZSkKK3sKKwlpbnQgaWQgPSBwYXJzZV9tc2dfaWQobXNnX2lkKSwgdHlwZTsKKworCWlmIChpZCA8IDApCisJCWRpZSgiVW5oYW5kbGVkIG1lc3NhZ2UgaWQ6ICVzIiwgbXNnX2lkKTsKKwl0eXBlID0gcGFyc2VfbXNnX3R5cGUobXNnX3R5cGUpOworCisJaWYgKHR5cGUgIT0gRlNDS19FUlJPUiAmJiBtc2dfaWRfaW5mb1tpZF0ubXNnX3R5cGUgPT0gRlNDS19GQVRBTCkKKwkJZGllKCJDYW5ub3QgZGVtb3RlICVzIHRvICVzIiwgbXNnX2lkLCBtc2dfdHlwZSk7CisKKwlpZiAoIW9wdGlvbnMtPm1zZ190eXBlKSB7CisJCWludCBpOworCQlpbnQgKm1zZ190eXBlOworCQlBTExPQ19BUlJBWShtc2dfdHlwZSwgRlNDS19NU0dfTUFYKTsKKwkJZm9yIChpID0gMDsgaSA8IEZTQ0tfTVNHX01BWDsgaSsrKQorCQkJbXNnX3R5cGVbaV0gPSBmc2NrX21zZ190eXBlKGksIG9wdGlvbnMpOworCQlvcHRpb25zLT5tc2dfdHlwZSA9IG1zZ190eXBlOworCX0KKworCW9wdGlvbnMtPm1zZ190eXBlW2lkXSA9IHR5cGU7Cit9CisKK3ZvaWQgZnNja19zZXRfbXNnX3R5cGVzKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKnZhbHVlcykKK3sKKwljaGFyICpidWYgPSB4c3RyZHVwKHZhbHVlcyksICp0b19mcmVlID0gYnVmOworCWludCBkb25lID0gMDsKKworCXdoaWxlICghZG9uZSkgeworCQlpbnQgbGVuID0gc3RyY3NwbihidWYsICIgLHwiKSwgZXF1YWw7CisKKwkJZG9uZSA9ICFidWZbbGVuXTsKKwkJaWYgKCFsZW4pIHsKKwkJCWJ1ZisrOworCQkJY29udGludWU7CisJCX0KKwkJYnVmW2xlbl0gPSAnXDAnOworCisJCWZvciAoZXF1YWwgPSAwOworCQkgICAgIGVxdWFsIDwgbGVuICYmIGJ1ZltlcXVhbF0gIT0gJz0nICYmIGJ1ZltlcXVhbF0gIT0gJzonOworCQkgICAgIGVxdWFsKyspCisJCQlidWZbZXF1YWxdID0gdG9sb3dlcihidWZbZXF1YWxdKTsKKwkJYnVmW2VxdWFsXSA9ICdcMCc7CisKKwkJaWYgKCFzdHJjbXAoYnVmLCAic2tpcGxpc3QiKSkgeworCQkJaWYgKGVxdWFsID09IGxlbikKKwkJCQlkaWUoInNraXBsaXN0IHJlcXVpcmVzIGEgcGF0aCIpOworCQkJb2lkc2V0X3BhcnNlX2ZpbGUoJm9wdGlvbnMtPnNraXBsaXN0LCBidWYgKyBlcXVhbCArIDEpOworCQkJYnVmICs9IGxlbiArIDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChlcXVhbCA9PSBsZW4pCisJCQlkaWUoIk1pc3NpbmcgJz0nOiAnJXMnIiwgYnVmKTsKKworCQlmc2NrX3NldF9tc2dfdHlwZShvcHRpb25zLCBidWYsIGJ1ZiArIGVxdWFsICsgMSk7CisJCWJ1ZiArPSBsZW4gKyAxOworCX0KKwlmcmVlKHRvX2ZyZWUpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfbXNnX2lkKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICptc2dfaWQpCit7CisJZm9yICg7OykgeworCQljaGFyIGMgPSAqKG1zZ19pZCkrKzsKKworCQlpZiAoIWMpCisJCQlicmVhazsKKwkJaWYgKGMgIT0gJ18nKQorCQkJc3RyYnVmX2FkZGNoKHNiLCB0b2xvd2VyKGMpKTsKKwkJZWxzZSB7CisJCQlhc3NlcnQoKm1zZ19pZCk7CisJCQlzdHJidWZfYWRkY2goc2IsICoobXNnX2lkKSsrKTsKKwkJfQorCX0KKworCXN0cmJ1Zl9hZGRzdHIoc2IsICI6ICIpOworfQorCitzdGF0aWMgaW50IG9iamVjdF9vbl9za2lwbGlzdChzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRzLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXJldHVybiBvcHRzICYmIG9pZCAmJiBvaWRzZXRfY29udGFpbnMoJm9wdHMtPnNraXBsaXN0LCBvaWQpOworfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgNSwgNikpKQorc3RhdGljIGludCByZXBvcnQoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywKKwkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGVudW0gb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGUsCisJCSAgZW51bSBmc2NrX21zZ19pZCBpZCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IG1zZ190eXBlID0gZnNja19tc2dfdHlwZShpZCwgb3B0aW9ucyksIHJlc3VsdDsKKworCWlmIChtc2dfdHlwZSA9PSBGU0NLX0lHTk9SRSkKKwkJcmV0dXJuIDA7CisKKwlpZiAob2JqZWN0X29uX3NraXBsaXN0KG9wdGlvbnMsIG9pZCkpCisJCXJldHVybiAwOworCisJaWYgKG1zZ190eXBlID09IEZTQ0tfRkFUQUwpCisJCW1zZ190eXBlID0gRlNDS19FUlJPUjsKKwllbHNlIGlmIChtc2dfdHlwZSA9PSBGU0NLX0lORk8pCisJCW1zZ190eXBlID0gRlNDS19XQVJOOworCisJYXBwZW5kX21zZ19pZCgmc2IsIG1zZ19pZF9pbmZvW2lkXS5pZF9zdHJpbmcpOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKCZzYiwgZm10LCBhcCk7CisJcmVzdWx0ID0gb3B0aW9ucy0+ZXJyb3JfZnVuYyhvcHRpb25zLCBvaWQsIG9iamVjdF90eXBlLAorCQkJCSAgICAgbXNnX3R5cGUsIHNiLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl2YV9lbmQoYXApOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBmc2NrX2VuYWJsZV9vYmplY3RfbmFtZXMoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpZiAoIW9wdGlvbnMtPm9iamVjdF9uYW1lcykKKwkJb3B0aW9ucy0+b2JqZWN0X25hbWVzID0ga2hfaW5pdF9vaWRfbWFwKCk7Cit9CisKK2NvbnN0IGNoYXIgKmZzY2tfZ2V0X29iamVjdF9uYW1lKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsCisJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlraGl0ZXJfdCBwb3M7CisJaWYgKCFvcHRpb25zLT5vYmplY3RfbmFtZXMpCisJCXJldHVybiBOVUxMOworCXBvcyA9IGtoX2dldF9vaWRfbWFwKG9wdGlvbnMtPm9iamVjdF9uYW1lcywgKm9pZCk7CisJaWYgKHBvcyA+PSBraF9lbmQob3B0aW9ucy0+b2JqZWN0X25hbWVzKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGtoX3ZhbHVlKG9wdGlvbnMtPm9iamVjdF9uYW1lcywgcG9zKTsKK30KKwordm9pZCBmc2NrX3B1dF9vYmplY3RfbmFtZShzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLAorCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlraGl0ZXJfdCBwb3M7CisJaW50IGhhc2hyZXQ7CisKKwlpZiAoIW9wdGlvbnMtPm9iamVjdF9uYW1lcykKKwkJcmV0dXJuOworCisJcG9zID0ga2hfcHV0X29pZF9tYXAob3B0aW9ucy0+b2JqZWN0X25hbWVzLCAqb2lkLCAmaGFzaHJldCk7CisJaWYgKCFoYXNocmV0KQorCQlyZXR1cm47CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKCZidWYsIGZtdCwgYXApOworCWtoX3ZhbHVlKG9wdGlvbnMtPm9iamVjdF9uYW1lcywgcG9zKSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJdmFfZW5kKGFwKTsKK30KKworY29uc3QgY2hhciAqZnNja19kZXNjcmliZV9vYmplY3Qoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywKKwkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZnNbXSA9IHsKKwkJU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQKKwl9OworCXN0YXRpYyBpbnQgYiA9IDA7CisJc3RydWN0IHN0cmJ1ZiAqYnVmOworCWNvbnN0IGNoYXIgKm5hbWUgPSBmc2NrX2dldF9vYmplY3RfbmFtZShvcHRpb25zLCBvaWQpOworCisJYnVmID0gYnVmcyArIGI7CisJYiA9IChiICsgMSkgJSBBUlJBWV9TSVpFKGJ1ZnMpOworCXN0cmJ1Zl9yZXNldChidWYpOworCXN0cmJ1Zl9hZGRzdHIoYnVmLCBvaWRfdG9faGV4KG9pZCkpOworCWlmIChuYW1lKQorCQlzdHJidWZfYWRkZihidWYsICIgKCVzKSIsIG5hbWUpOworCisJcmV0dXJuIGJ1Zi0+YnVmOworfQorCitzdGF0aWMgaW50IGZzY2tfd2Fsa190cmVlKHN0cnVjdCB0cmVlICp0cmVlLCB2b2lkICpkYXRhLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKwlpbnQgcmVzID0gMDsKKwljb25zdCBjaGFyICpuYW1lOworCisJaWYgKHBhcnNlX3RyZWUodHJlZSkpCisJCXJldHVybiAtMTsKKworCW5hbWUgPSBmc2NrX2dldF9vYmplY3RfbmFtZShvcHRpb25zLCAmdHJlZS0+b2JqZWN0Lm9pZCk7CisJaWYgKGluaXRfdHJlZV9kZXNjX2dlbnRseSgmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKSkKKwkJcmV0dXJuIC0xOworCXdoaWxlICh0cmVlX2VudHJ5X2dlbnRseSgmZGVzYywgJmVudHJ5KSkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJCWludCByZXN1bHQ7CisKKwkJaWYgKFNfSVNHSVRMSU5LKGVudHJ5Lm1vZGUpKQorCQkJY29udGludWU7CisKKwkJaWYgKFNfSVNESVIoZW50cnkubW9kZSkpIHsKKwkJCW9iaiA9IChzdHJ1Y3Qgb2JqZWN0ICopbG9va3VwX3RyZWUodGhlX3JlcG9zaXRvcnksICZlbnRyeS5vaWQpOworCQkJaWYgKG5hbWUgJiYgb2JqKQorCQkJCWZzY2tfcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsICZlbnRyeS5vaWQsICIlcyVzLyIsCisJCQkJCQkgICAgIG5hbWUsIGVudHJ5LnBhdGgpOworCQkJcmVzdWx0ID0gb3B0aW9ucy0+d2FsayhvYmosIE9CSl9UUkVFLCBkYXRhLCBvcHRpb25zKTsKKwkJfQorCQllbHNlIGlmIChTX0lTUkVHKGVudHJ5Lm1vZGUpIHx8IFNfSVNMTksoZW50cnkubW9kZSkpIHsKKwkJCW9iaiA9IChzdHJ1Y3Qgb2JqZWN0ICopbG9va3VwX2Jsb2IodGhlX3JlcG9zaXRvcnksICZlbnRyeS5vaWQpOworCQkJaWYgKG5hbWUgJiYgb2JqKQorCQkJCWZzY2tfcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsICZlbnRyeS5vaWQsICIlcyVzIiwKKwkJCQkJCSAgICAgbmFtZSwgZW50cnkucGF0aCk7CisJCQlyZXN1bHQgPSBvcHRpb25zLT53YWxrKG9iaiwgT0JKX0JMT0IsIGRhdGEsIG9wdGlvbnMpOworCQl9CisJCWVsc2UgeworCQkJcmVzdWx0ID0gZXJyb3IoImluIHRyZWUgJXM6IGVudHJ5ICVzIGhhcyBiYWQgbW9kZSAlLjZvIiwKKwkJCQkgICAgICAgZnNja19kZXNjcmliZV9vYmplY3Qob3B0aW9ucywgJnRyZWUtPm9iamVjdC5vaWQpLAorCQkJCSAgICAgICBlbnRyeS5wYXRoLCBlbnRyeS5tb2RlKTsKKwkJfQorCQlpZiAocmVzdWx0IDwgMCkKKwkJCXJldHVybiByZXN1bHQ7CisJCWlmICghcmVzKQorCQkJcmVzID0gcmVzdWx0OworCX0KKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGZzY2tfd2Fsa19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWludCBjb3VudGVyID0gMCwgZ2VuZXJhdGlvbiA9IDAsIG5hbWVfcHJlZml4X2xlbiA9IDA7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCWludCByZXM7CisJaW50IHJlc3VsdDsKKwljb25zdCBjaGFyICpuYW1lOworCisJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQorCQlyZXR1cm4gLTE7CisKKwluYW1lID0gZnNja19nZXRfb2JqZWN0X25hbWUob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0Lm9pZCk7CisJaWYgKG5hbWUpCisJCWZzY2tfcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsIGdldF9jb21taXRfdHJlZV9vaWQoY29tbWl0KSwKKwkJCQkgICAgICIlczoiLCBuYW1lKTsKKworCXJlc3VsdCA9IG9wdGlvbnMtPndhbGsoKHN0cnVjdCBvYmplY3QgKilnZXRfY29tbWl0X3RyZWUoY29tbWl0KSwKKwkJCSAgICAgICBPQkpfVFJFRSwgZGF0YSwgb3B0aW9ucyk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisJcmVzID0gcmVzdWx0OworCisJcGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKKwlpZiAobmFtZSAmJiBwYXJlbnRzKSB7CisJCWludCBsZW4gPSBzdHJsZW4obmFtZSksIHBvd2VyOworCisJCWlmIChsZW4gJiYgbmFtZVtsZW4gLSAxXSA9PSAnXicpIHsKKwkJCWdlbmVyYXRpb24gPSAxOworCQkJbmFtZV9wcmVmaXhfbGVuID0gbGVuIC0gMTsKKwkJfQorCQllbHNlIHsgLyogcGFyc2UgfjxnZW5lcmF0aW9uPiBzdWZmaXggKi8KKwkJCWZvciAoZ2VuZXJhdGlvbiA9IDAsIHBvd2VyID0gMTsKKwkJCSAgICAgbGVuICYmIGlzZGlnaXQobmFtZVtsZW4gLSAxXSk7CisJCQkgICAgIHBvd2VyICo9IDEwKQorCQkJCWdlbmVyYXRpb24gKz0gcG93ZXIgKiAobmFtZVstLWxlbl0gLSAnMCcpOworCQkJaWYgKHBvd2VyID4gMSAmJiBsZW4gJiYgbmFtZVtsZW4gLSAxXSA9PSAnficpCisJCQkJbmFtZV9wcmVmaXhfbGVuID0gbGVuIC0gMTsKKwkJfQorCX0KKworCXdoaWxlIChwYXJlbnRzKSB7CisJCWlmIChuYW1lKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSAmcGFyZW50cy0+aXRlbS0+b2JqZWN0Lm9pZDsKKworCQkJaWYgKGNvdW50ZXIrKykKKwkJCQlmc2NrX3B1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvaWQsICIlc14lZCIsCisJCQkJCQkgICAgIG5hbWUsIGNvdW50ZXIpOworCQkJZWxzZSBpZiAoZ2VuZXJhdGlvbiA+IDApCisJCQkJZnNja19wdXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2lkLCAiJS4qc34lZCIsCisJCQkJCQkgICAgIG5hbWVfcHJlZml4X2xlbiwgbmFtZSwKKwkJCQkJCSAgICAgZ2VuZXJhdGlvbiArIDEpOworCQkJZWxzZQorCQkJCWZzY2tfcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsIG9pZCwgIiVzXiIsIG5hbWUpOworCQl9CisJCXJlc3VsdCA9IG9wdGlvbnMtPndhbGsoKHN0cnVjdCBvYmplY3QgKilwYXJlbnRzLT5pdGVtLCBPQkpfQ09NTUlULCBkYXRhLCBvcHRpb25zKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlyZXR1cm4gcmVzdWx0OworCQlpZiAoIXJlcykKKwkJCXJlcyA9IHJlc3VsdDsKKwkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgZnNja193YWxrX3RhZyhzdHJ1Y3QgdGFnICp0YWcsIHZvaWQgKmRhdGEsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCit7CisJY29uc3QgY2hhciAqbmFtZSA9IGZzY2tfZ2V0X29iamVjdF9uYW1lKG9wdGlvbnMsICZ0YWctPm9iamVjdC5vaWQpOworCisJaWYgKHBhcnNlX3RhZyh0YWcpKQorCQlyZXR1cm4gLTE7CisJaWYgKG5hbWUpCisJCWZzY2tfcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsICZ0YWctPnRhZ2dlZC0+b2lkLCAiJXMiLCBuYW1lKTsKKwlyZXR1cm4gb3B0aW9ucy0+d2Fsayh0YWctPnRhZ2dlZCwgT0JKX0FOWSwgZGF0YSwgb3B0aW9ucyk7Cit9CisKK2ludCBmc2NrX3dhbGsoc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpkYXRhLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWlmICghb2JqKQorCQlyZXR1cm4gLTE7CisKKwlpZiAob2JqLT50eXBlID09IE9CSl9OT05FKQorCQlwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvYmotPm9pZCk7CisKKwlzd2l0Y2ggKG9iai0+dHlwZSkgeworCWNhc2UgT0JKX0JMT0I6CisJCXJldHVybiAwOworCWNhc2UgT0JKX1RSRUU6CisJCXJldHVybiBmc2NrX3dhbGtfdHJlZSgoc3RydWN0IHRyZWUgKilvYmosIGRhdGEsIG9wdGlvbnMpOworCWNhc2UgT0JKX0NPTU1JVDoKKwkJcmV0dXJuIGZzY2tfd2Fsa19jb21taXQoKHN0cnVjdCBjb21taXQgKilvYmosIGRhdGEsIG9wdGlvbnMpOworCWNhc2UgT0JKX1RBRzoKKwkJcmV0dXJuIGZzY2tfd2Fsa190YWcoKHN0cnVjdCB0YWcgKilvYmosIGRhdGEsIG9wdGlvbnMpOworCWRlZmF1bHQ6CisJCWVycm9yKCJVbmtub3duIG9iamVjdCB0eXBlIGZvciAlcyIsCisJCSAgICAgIGZzY2tfZGVzY3JpYmVfb2JqZWN0KG9wdGlvbnMsICZvYmotPm9pZCkpOworCQlyZXR1cm4gLTE7CisJfQorfQorCitzdHJ1Y3QgbmFtZV9zdGFjayB7CisJY29uc3QgY2hhciAqKm5hbWVzOworCXNpemVfdCBuciwgYWxsb2M7Cit9OworCitzdGF0aWMgdm9pZCBuYW1lX3N0YWNrX3B1c2goc3RydWN0IG5hbWVfc3RhY2sgKnN0YWNrLCBjb25zdCBjaGFyICpuYW1lKQoreworCUFMTE9DX0dST1coc3RhY2stPm5hbWVzLCBzdGFjay0+bnIgKyAxLCBzdGFjay0+YWxsb2MpOworCXN0YWNrLT5uYW1lc1tzdGFjay0+bnIrK10gPSBuYW1lOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbmFtZV9zdGFja19wb3Aoc3RydWN0IG5hbWVfc3RhY2sgKnN0YWNrKQoreworCXJldHVybiBzdGFjay0+bnIgPyBzdGFjay0+bmFtZXNbLS1zdGFjay0+bnJdIDogTlVMTDsKK30KKworc3RhdGljIHZvaWQgbmFtZV9zdGFja19jbGVhcihzdHJ1Y3QgbmFtZV9zdGFjayAqc3RhY2spCit7CisJRlJFRV9BTkRfTlVMTChzdGFjay0+bmFtZXMpOworCXN0YWNrLT5uciA9IHN0YWNrLT5hbGxvYyA9IDA7Cit9CisKKy8qCisgKiBUaGUgZW50cmllcyBpbiBhIHRyZWUgYXJlIG9yZGVyZWQgaW4gdGhlIF9wYXRoXyBvcmRlciwKKyAqIHdoaWNoIG1lYW5zIHRoYXQgYSBkaXJlY3RvcnkgZW50cnkgaXMgb3JkZXJlZCBieSBhZGRpbmcKKyAqIGEgc2xhc2ggdG8gdGhlIGVuZCBvZiBpdC4KKyAqCisgKiBTbyBhIGRpcmVjdG9yeSBjYWxsZWQgImEiIGlzIG9yZGVyZWQgX2FmdGVyXyBhIGZpbGUKKyAqIGNhbGxlZCAiYS5jIiwgYmVjYXVzZSAiYS8iIHNvcnRzIGFmdGVyICJhLmMiLgorICovCisjZGVmaW5lIFRSRUVfVU5PUkRFUkVEICgtMSkKKyNkZWZpbmUgVFJFRV9IQVNfRFVQUyAgKC0yKQorCitzdGF0aWMgaW50IGlzX2xlc3NfdGhhbl9zbGFzaCh1bnNpZ25lZCBjaGFyIGMpCit7CisJcmV0dXJuICdcMCcgPCBjICYmIGMgPCAnLyc7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X29yZGVyZWQodW5zaWduZWQgbW9kZTEsIGNvbnN0IGNoYXIgKm5hbWUxLAorCQkJICB1bnNpZ25lZCBtb2RlMiwgY29uc3QgY2hhciAqbmFtZTIsCisJCQkgIHN0cnVjdCBuYW1lX3N0YWNrICpjYW5kaWRhdGVzKQoreworCWludCBsZW4xID0gc3RybGVuKG5hbWUxKTsKKwlpbnQgbGVuMiA9IHN0cmxlbihuYW1lMik7CisJaW50IGxlbiA9IGxlbjEgPCBsZW4yID8gbGVuMSA6IGxlbjI7CisJdW5zaWduZWQgY2hhciBjMSwgYzI7CisJaW50IGNtcDsKKworCWNtcCA9IG1lbWNtcChuYW1lMSwgbmFtZTIsIGxlbik7CisJaWYgKGNtcCA8IDApCisJCXJldHVybiAwOworCWlmIChjbXAgPiAwKQorCQlyZXR1cm4gVFJFRV9VTk9SREVSRUQ7CisKKwkvKgorCSAqIE9rLCB0aGUgZmlyc3QgPGxlbj4gY2hhcmFjdGVycyBhcmUgdGhlIHNhbWUuCisJICogTm93IHdlIG5lZWQgdG8gb3JkZXIgdGhlIG5leHQgb25lLCBidXQgdHVybgorCSAqIGEgJ1wwJyBpbnRvIGEgJy8nIGZvciBhIGRpcmVjdG9yeSBlbnRyeS4KKwkgKi8KKwljMSA9IG5hbWUxW2xlbl07CisJYzIgPSBuYW1lMltsZW5dOworCWlmICghYzEgJiYgIWMyKQorCQkvKgorCQkgKiBnaXQtd3JpdGUtdHJlZSB1c2VkIHRvIHdyaXRlIG91dCBhIG5vbnNlbnNlIHRyZWUgdGhhdCBoYXMKKwkJICogZW50cmllcyB3aXRoIHRoZSBzYW1lIG5hbWUsIG9uZSBibG9iIGFuZCBvbmUgdHJlZS4gIE1ha2UKKwkJICogc3VyZSB3ZSBkbyBub3QgaGF2ZSBkdXBsaWNhdGUgZW50cmllcy4KKwkJICovCisJCXJldHVybiBUUkVFX0hBU19EVVBTOworCWlmICghYzEgJiYgU19JU0RJUihtb2RlMSkpCisJCWMxID0gJy8nOworCWlmICghYzIgJiYgU19JU0RJUihtb2RlMikpCisJCWMyID0gJy8nOworCisJLyoKKwkgKiBUaGVyZSBjYW4gYmUgbm9uLWNvbnNlY3V0aXZlIGR1cGxpY2F0ZXMgZHVlIHRvIHRoZSBpbXBsaWNpdGx5CisJICogYWRkIHNsYXNoLCBlLmcuOgorCSAqCisJICogICBmb28KKwkgKiAgIGZvby5iYXIKKwkgKiAgIGZvby5iYXIuYmF6CisJICogICBmb28uYmFyLworCSAqICAgZm9vLworCSAqCisJICogUmVjb3JkIG5vbi1kaXJlY3RvcnkgY2FuZGlkYXRlcyAobGlrZSAiZm9vIiBhbmQgImZvby5iYXIiIGluCisJICogdGhlIGV4YW1wbGUpIG9uIGEgc3RhY2sgYW5kIGNoZWNrIGRpcmVjdG9yeSBjYW5kaWRhdGVzIChsaWtlCisJICogZm9vLyIgYW5kICJmb28uYmFyLyIpIGFnYWluc3QgdGhhdCBzdGFjay4KKwkgKi8KKwlpZiAoIWMxICYmIGlzX2xlc3NfdGhhbl9zbGFzaChjMikpIHsKKwkJbmFtZV9zdGFja19wdXNoKGNhbmRpZGF0ZXMsIG5hbWUxKTsKKwl9IGVsc2UgaWYgKGMyID09ICcvJyAmJiBpc19sZXNzX3RoYW5fc2xhc2goYzEpKSB7CisJCWZvciAoOzspIHsKKwkJCWNvbnN0IGNoYXIgKnA7CisJCQljb25zdCBjaGFyICpmX25hbWUgPSBuYW1lX3N0YWNrX3BvcChjYW5kaWRhdGVzKTsKKworCQkJaWYgKCFmX25hbWUpCisJCQkJYnJlYWs7CisJCQlpZiAoIXNraXBfcHJlZml4KG5hbWUyLCBmX25hbWUsICZwKSkKKwkJCQlicmVhazsKKwkJCWlmICghKnApCisJCQkJcmV0dXJuIFRSRUVfSEFTX0RVUFM7CisJCQlpZiAoaXNfbGVzc190aGFuX3NsYXNoKCpwKSkgeworCQkJCW5hbWVfc3RhY2tfcHVzaChjYW5kaWRhdGVzLCBmX25hbWUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIGMxIDwgYzIgPyAwIDogVFJFRV9VTk9SREVSRUQ7Cit9CisKK3N0YXRpYyBpbnQgZnNja190cmVlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICBjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJICAgICBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWludCByZXR2YWwgPSAwOworCWludCBoYXNfbnVsbF9zaGExID0gMDsKKwlpbnQgaGFzX2Z1bGxfcGF0aCA9IDA7CisJaW50IGhhc19lbXB0eV9uYW1lID0gMDsKKwlpbnQgaGFzX2RvdCA9IDA7CisJaW50IGhhc19kb3Rkb3QgPSAwOworCWludCBoYXNfZG90Z2l0ID0gMDsKKwlpbnQgaGFzX3plcm9fcGFkID0gMDsKKwlpbnQgaGFzX2JhZF9tb2RlcyA9IDA7CisJaW50IGhhc19kdXBfZW50cmllcyA9IDA7CisJaW50IG5vdF9wcm9wZXJseV9zb3J0ZWQgPSAwOworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwl1bnNpZ25lZCBvX21vZGU7CisJY29uc3QgY2hhciAqb19uYW1lOworCXN0cnVjdCBuYW1lX3N0YWNrIGRmX2R1cF9jYW5kaWRhdGVzID0geyBOVUxMIH07CisKKwlpZiAoaW5pdF90cmVlX2Rlc2NfZ2VudGx5KCZkZXNjLCBidWZmZXIsIHNpemUpKSB7CisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfQkFEX1RSRUUsICJjYW5ub3QgYmUgcGFyc2VkIGFzIGEgdHJlZSIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCW9fbW9kZSA9IDA7CisJb19uYW1lID0gTlVMTDsKKworCXdoaWxlIChkZXNjLnNpemUpIHsKKwkJdW5zaWduZWQgc2hvcnQgbW9kZTsKKwkJY29uc3QgY2hhciAqbmFtZSwgKmJhY2tzbGFzaDsKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkOworCisJCW9pZCA9IHRyZWVfZW50cnlfZXh0cmFjdCgmZGVzYywgJm5hbWUsICZtb2RlKTsKKworCQloYXNfbnVsbF9zaGExIHw9IGlzX251bGxfb2lkKG9pZCk7CisJCWhhc19mdWxsX3BhdGggfD0gISFzdHJjaHIobmFtZSwgJy8nKTsKKwkJaGFzX2VtcHR5X25hbWUgfD0gISpuYW1lOworCQloYXNfZG90IHw9ICFzdHJjbXAobmFtZSwgIi4iKTsKKwkJaGFzX2RvdGRvdCB8PSAhc3RyY21wKG5hbWUsICIuLiIpOworCQloYXNfZG90Z2l0IHw9IGlzX2hmc19kb3RnaXQobmFtZSkgfHwgaXNfbnRmc19kb3RnaXQobmFtZSk7CisJCWhhc196ZXJvX3BhZCB8PSAqKGNoYXIgKilkZXNjLmJ1ZmZlciA9PSAnMCc7CisKKwkJaWYgKGlzX2hmc19kb3RnaXRtb2R1bGVzKG5hbWUpIHx8IGlzX250ZnNfZG90Z2l0bW9kdWxlcyhuYW1lKSkgeworCQkJaWYgKCFTX0lTTE5LKG1vZGUpKQorCQkJCW9pZHNldF9pbnNlcnQoJmdpdG1vZHVsZXNfZm91bmQsIG9pZCk7CisJCQllbHNlCisJCQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLAorCQkJCQkJIG9pZCwgT0JKX1RSRUUsCisJCQkJCQkgRlNDS19NU0dfR0lUTU9EVUxFU19TWU1MSU5LLAorCQkJCQkJICIuZ2l0bW9kdWxlcyBpcyBhIHN5bWJvbGljIGxpbmsiKTsKKwkJfQorCisJCWlmICgoYmFja3NsYXNoID0gc3RyY2hyKG5hbWUsICdcXCcpKSkgeworCQkJd2hpbGUgKGJhY2tzbGFzaCkgeworCQkJCWJhY2tzbGFzaCsrOworCQkJCWhhc19kb3RnaXQgfD0gaXNfbnRmc19kb3RnaXQoYmFja3NsYXNoKTsKKwkJCQlpZiAoaXNfbnRmc19kb3RnaXRtb2R1bGVzKGJhY2tzbGFzaCkpIHsKKwkJCQkJaWYgKCFTX0lTTE5LKG1vZGUpKQorCQkJCQkJb2lkc2V0X2luc2VydCgmZ2l0bW9kdWxlc19mb3VuZCwgb2lkKTsKKwkJCQkJZWxzZQorCQkJCQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLAorCQkJCQkJCQkgRlNDS19NU0dfR0lUTU9EVUxFU19TWU1MSU5LLAorCQkJCQkJCQkgIi5naXRtb2R1bGVzIGlzIGEgc3ltYm9saWMgbGluayIpOworCQkJCX0KKwkJCQliYWNrc2xhc2ggPSBzdHJjaHIoYmFja3NsYXNoLCAnXFwnKTsKKwkJCX0KKwkJfQorCisJCWlmICh1cGRhdGVfdHJlZV9lbnRyeV9nZW50bHkoJmRlc2MpKSB7CisJCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0JBRF9UUkVFLCAiY2Fubm90IGJlIHBhcnNlZCBhcyBhIHRyZWUiKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3dpdGNoIChtb2RlKSB7CisJCS8qCisJCSAqIFN0YW5kYXJkIG1vZGVzLi4KKwkJICovCisJCWNhc2UgU19JRlJFRyB8IDA3NTU6CisJCWNhc2UgU19JRlJFRyB8IDA2NDQ6CisJCWNhc2UgU19JRkxOSzoKKwkJY2FzZSBTX0lGRElSOgorCQljYXNlIFNfSUZHSVRMSU5LOgorCQkJYnJlYWs7CisJCS8qCisJCSAqIFRoaXMgaXMgbm9uc3RhbmRhcmQsIGJ1dCB3ZSBoYWQgYSBmZXcgb2YgdGhlc2UKKwkJICogZWFybHkgb24gd2hlbiB3ZSBob25vcmVkIHRoZSBmdWxsIHNldCBvZiBtb2RlCisJCSAqIGJpdHMuLgorCQkgKi8KKwkJY2FzZSBTX0lGUkVHIHwgMDY2NDoKKwkJCWlmICghb3B0aW9ucy0+c3RyaWN0KQorCQkJCWJyZWFrOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJZGVmYXVsdDoKKwkJCWhhc19iYWRfbW9kZXMgPSAxOworCQl9CisKKwkJaWYgKG9fbmFtZSkgeworCQkJc3dpdGNoICh2ZXJpZnlfb3JkZXJlZChvX21vZGUsIG9fbmFtZSwgbW9kZSwgbmFtZSwKKwkJCQkJICAgICAgICZkZl9kdXBfY2FuZGlkYXRlcykpIHsKKwkJCWNhc2UgVFJFRV9VTk9SREVSRUQ6CisJCQkJbm90X3Byb3Blcmx5X3NvcnRlZCA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlIFRSRUVfSEFTX0RVUFM6CisJCQkJaGFzX2R1cF9lbnRyaWVzID0gMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlvX21vZGUgPSBtb2RlOworCQlvX25hbWUgPSBuYW1lOworCX0KKworCW5hbWVfc3RhY2tfY2xlYXIoJmRmX2R1cF9jYW5kaWRhdGVzKTsKKworCWlmIChoYXNfbnVsbF9zaGExKQorCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX05VTExfU0hBMSwgImNvbnRhaW5zIGVudHJpZXMgcG9pbnRpbmcgdG8gbnVsbCBzaGExIik7CisJaWYgKGhhc19mdWxsX3BhdGgpCisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfRlVMTF9QQVRITkFNRSwgImNvbnRhaW5zIGZ1bGwgcGF0aG5hbWVzIik7CisJaWYgKGhhc19lbXB0eV9uYW1lKQorCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0VNUFRZX05BTUUsICJjb250YWlucyBlbXB0eSBwYXRobmFtZSIpOworCWlmIChoYXNfZG90KQorCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0hBU19ET1QsICJjb250YWlucyAnLiciKTsKKwlpZiAoaGFzX2RvdGRvdCkKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19IQVNfRE9URE9ULCAiY29udGFpbnMgJy4uJyIpOworCWlmIChoYXNfZG90Z2l0KQorCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0hBU19ET1RHSVQsICJjb250YWlucyAnLmdpdCciKTsKKwlpZiAoaGFzX3plcm9fcGFkKQorCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX1pFUk9fUEFEREVEX0ZJTEVNT0RFLCAiY29udGFpbnMgemVyby1wYWRkZWQgZmlsZSBtb2RlcyIpOworCWlmIChoYXNfYmFkX21vZGVzKQorCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0JBRF9GSUxFTU9ERSwgImNvbnRhaW5zIGJhZCBmaWxlIG1vZGVzIik7CisJaWYgKGhhc19kdXBfZW50cmllcykKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19EVVBMSUNBVEVfRU5UUklFUywgImNvbnRhaW5zIGR1cGxpY2F0ZSBmaWxlIGVudHJpZXMiKTsKKwlpZiAobm90X3Byb3Blcmx5X3NvcnRlZCkKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19UUkVFX05PVF9TT1JURUQsICJub3QgcHJvcGVybHkgc29ydGVkIik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCB2ZXJpZnlfaGVhZGVycyhjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJICBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWNvbnN0IGNoYXIgKmJ1ZmZlciA9IChjb25zdCBjaGFyICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXN3aXRjaCAoYnVmZmVyW2ldKSB7CisJCWNhc2UgJ1wwJzoKKwkJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCB0eXBlLAorCQkJCUZTQ0tfTVNHX05VTF9JTl9IRUFERVIsCisJCQkJInVudGVybWluYXRlZCBoZWFkZXI6IE5VTCBhdCBvZmZzZXQgJWxkIiwgaSk7CisJCWNhc2UgJ1xuJzoKKwkJCWlmIChpICsgMSA8IHNpemUgJiYgYnVmZmVyW2kgKyAxXSA9PSAnXG4nKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJLyoKKwkgKiBXZSBkaWQgbm90IGZpbmQgZG91YmxlLUxGIHRoYXQgc2VwYXJhdGVzIHRoZSBoZWFkZXIKKwkgKiBhbmQgdGhlIGJvZHkuICBOb3QgaGF2aW5nIGEgYm9keSBpcyBub3QgYSBjcmltZSBidXQKKwkgKiB3ZSBkbyB3YW50IHRvIHNlZSB0aGUgdGVybWluYXRpbmcgTEYgZm9yIHRoZSBsYXN0IGhlYWRlcgorCSAqIGxpbmUuCisJICovCisJaWYgKHNpemUgJiYgYnVmZmVyW3NpemUgLSAxXSA9PSAnXG4nKQorCQlyZXR1cm4gMDsKKworCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCB0eXBlLAorCQlGU0NLX01TR19VTlRFUk1JTkFURURfSEVBREVSLCAidW50ZXJtaW5hdGVkIGhlYWRlciIpOworfQorCitzdGF0aWMgaW50IGZzY2tfaWRlbnQoY29uc3QgY2hhciAqKmlkZW50LAorCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJICAgICAgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwljb25zdCBjaGFyICpwID0gKmlkZW50OworCWNoYXIgKmVuZDsKKworCSppZGVudCA9IHN0cmNocm51bCgqaWRlbnQsICdcbicpOworCWlmICgqKmlkZW50ID09ICdcbicpCisJCSgqaWRlbnQpKys7CisKKwlpZiAoKnAgPT0gJzwnKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfTUlTU0lOR19OQU1FX0JFRk9SRV9FTUFJTCwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gbWlzc2luZyBzcGFjZSBiZWZvcmUgZW1haWwiKTsKKwlwICs9IHN0cmNzcG4ocCwgIjw+XG4iKTsKKwlpZiAoKnAgPT0gJz4nKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfQkFEX05BTUUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGJhZCBuYW1lIik7CisJaWYgKCpwICE9ICc8JykKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX01JU1NJTkdfRU1BSUwsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3NpbmcgZW1haWwiKTsKKwlpZiAocFstMV0gIT0gJyAnKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfTUlTU0lOR19TUEFDRV9CRUZPUkVfRU1BSUwsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3Npbmcgc3BhY2UgYmVmb3JlIGVtYWlsIik7CisJcCsrOworCXAgKz0gc3RyY3NwbihwLCAiPD5cbiIpOworCWlmICgqcCAhPSAnPicpCisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCB0eXBlLCBGU0NLX01TR19CQURfRU1BSUwsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGJhZCBlbWFpbCIpOworCXArKzsKKwlpZiAoKnAgIT0gJyAnKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfTUlTU0lOR19TUEFDRV9CRUZPUkVfREFURSwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gbWlzc2luZyBzcGFjZSBiZWZvcmUgZGF0ZSIpOworCXArKzsKKwlpZiAoKnAgPT0gJzAnICYmIHBbMV0gIT0gJyAnKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfWkVST19QQURERURfREFURSwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gemVyby1wYWRkZWQgZGF0ZSIpOworCWlmIChkYXRlX292ZXJmbG93cyhwYXJzZV90aW1lc3RhbXAocCwgJmVuZCwgMTApKSkKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX0JBRF9EQVRFX09WRVJGTE9XLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBkYXRlIGNhdXNlcyBpbnRlZ2VyIG92ZXJmbG93Iik7CisJaWYgKChlbmQgPT0gcCB8fCAqZW5kICE9ICcgJykpCisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCB0eXBlLCBGU0NLX01TR19CQURfREFURSwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gYmFkIGRhdGUiKTsKKwlwID0gZW5kICsgMTsKKwlpZiAoKCpwICE9ICcrJyAmJiAqcCAhPSAnLScpIHx8CisJICAgICFpc2RpZ2l0KHBbMV0pIHx8CisJICAgICFpc2RpZ2l0KHBbMl0pIHx8CisJICAgICFpc2RpZ2l0KHBbM10pIHx8CisJICAgICFpc2RpZ2l0KHBbNF0pIHx8CisJICAgIChwWzVdICE9ICdcbicpKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfQkFEX1RJTUVaT05FLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgdGltZSB6b25lIik7CisJcCArPSA2OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzY2tfY29tbWl0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICAgICAgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHRyZWVfb2lkLCBwYXJlbnRfb2lkOworCXVuc2lnbmVkIGF1dGhvcl9jb3VudDsKKwlpbnQgZXJyOworCWNvbnN0IGNoYXIgKmJ1ZmZlcl9iZWdpbiA9IGJ1ZmZlcjsKKwljb25zdCBjaGFyICpwOworCisJaWYgKHZlcmlmeV9oZWFkZXJzKGJ1ZmZlciwgc2l6ZSwgb2lkLCBPQkpfQ09NTUlULCBvcHRpb25zKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFza2lwX3ByZWZpeChidWZmZXIsICJ0cmVlICIsICZidWZmZXIpKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0NPTU1JVCwgRlNDS19NU0dfTUlTU0lOR19UUkVFLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAndHJlZScgbGluZSIpOworCWlmIChwYXJzZV9vaWRfaGV4KGJ1ZmZlciwgJnRyZWVfb2lkLCAmcCkgfHwgKnAgIT0gJ1xuJykgeworCQllcnIgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfQ09NTUlULCBGU0NLX01TR19CQURfVFJFRV9TSEExLCAiaW52YWxpZCAndHJlZScgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJYnVmZmVyID0gcCArIDE7CisJd2hpbGUgKHNraXBfcHJlZml4KGJ1ZmZlciwgInBhcmVudCAiLCAmYnVmZmVyKSkgeworCQlpZiAocGFyc2Vfb2lkX2hleChidWZmZXIsICZwYXJlbnRfb2lkLCAmcCkgfHwgKnAgIT0gJ1xuJykgeworCQkJZXJyID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0NPTU1JVCwgRlNDS19NU0dfQkFEX1BBUkVOVF9TSEExLCAiaW52YWxpZCAncGFyZW50JyBsaW5lIGZvcm1hdCAtIGJhZCBzaGExIik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwkJYnVmZmVyID0gcCArIDE7CisJfQorCWF1dGhvcl9jb3VudCA9IDA7CisJd2hpbGUgKHNraXBfcHJlZml4KGJ1ZmZlciwgImF1dGhvciAiLCAmYnVmZmVyKSkgeworCQlhdXRob3JfY291bnQrKzsKKwkJZXJyID0gZnNja19pZGVudCgmYnVmZmVyLCBvaWQsIE9CSl9DT01NSVQsIG9wdGlvbnMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJaWYgKGF1dGhvcl9jb3VudCA8IDEpCisJCWVyciA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9DT01NSVQsIEZTQ0tfTVNHX01JU1NJTkdfQVVUSE9SLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAnYXV0aG9yJyBsaW5lIik7CisJZWxzZSBpZiAoYXV0aG9yX2NvdW50ID4gMSkKKwkJZXJyID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0NPTU1JVCwgRlNDS19NU0dfTVVMVElQTEVfQVVUSE9SUywgImludmFsaWQgZm9ybWF0IC0gbXVsdGlwbGUgJ2F1dGhvcicgbGluZXMiKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmICghc2tpcF9wcmVmaXgoYnVmZmVyLCAiY29tbWl0dGVyICIsICZidWZmZXIpKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0NPTU1JVCwgRlNDS19NU0dfTUlTU0lOR19DT01NSVRURVIsICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICdjb21taXR0ZXInIGxpbmUiKTsKKwllcnIgPSBmc2NrX2lkZW50KCZidWZmZXIsIG9pZCwgT0JKX0NPTU1JVCwgb3B0aW9ucyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAobWVtY2hyKGJ1ZmZlcl9iZWdpbiwgJ1wwJywgc2l6ZSkpIHsKKwkJZXJyID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0NPTU1JVCwgRlNDS19NU0dfTlVMX0lOX0NPTU1JVCwKKwkJCSAgICAgIk5VTCBieXRlIGluIHRoZSBjb21taXQgb2JqZWN0IGJvZHkiKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzY2tfdGFnKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqYnVmZmVyLAorCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCXN0cnVjdCBvYmplY3RfaWQgdGFnZ2VkX29pZDsKKwlpbnQgcmV0ID0gMDsKKwljaGFyICplb2w7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnA7CisKKwlyZXQgPSB2ZXJpZnlfaGVhZGVycyhidWZmZXIsIHNpemUsIG9pZCwgT0JKX1RBRywgb3B0aW9ucyk7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCisJaWYgKCFza2lwX3ByZWZpeChidWZmZXIsICJvYmplY3QgIiwgJmJ1ZmZlcikpIHsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywgRlNDS19NU0dfTUlTU0lOR19PQkpFQ1QsICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICdvYmplY3QnIGxpbmUiKTsKKwkJZ290byBkb25lOworCX0KKwlpZiAocGFyc2Vfb2lkX2hleChidWZmZXIsICZ0YWdnZWRfb2lkLCAmcCkgfHwgKnAgIT0gJ1xuJykgeworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLCBGU0NLX01TR19CQURfT0JKRUNUX1NIQTEsICJpbnZhbGlkICdvYmplY3QnIGxpbmUgZm9ybWF0IC0gYmFkIHNoYTEiKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZG9uZTsKKwl9CisJYnVmZmVyID0gcCArIDE7CisKKwlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgInR5cGUgIiwgJmJ1ZmZlcikpIHsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywgRlNDS19NU0dfTUlTU0lOR19UWVBFX0VOVFJZLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAndHlwZScgbGluZSIpOworCQlnb3RvIGRvbmU7CisJfQorCWVvbCA9IHN0cmNocihidWZmZXIsICdcbicpOworCWlmICghZW9sKSB7CisJCXJldCA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UQUcsIEZTQ0tfTVNHX01JU1NJTkdfVFlQRSwgImludmFsaWQgZm9ybWF0IC0gdW5leHBlY3RlZCBlbmQgYWZ0ZXIgJ3R5cGUnIGxpbmUiKTsKKwkJZ290byBkb25lOworCX0KKwlpZiAodHlwZV9mcm9tX3N0cmluZ19nZW50bHkoYnVmZmVyLCBlb2wgLSBidWZmZXIsIDEpIDwgMCkKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywgRlNDS19NU0dfQkFEX1RZUEUsICJpbnZhbGlkICd0eXBlJyB2YWx1ZSIpOworCWlmIChyZXQpCisJCWdvdG8gZG9uZTsKKwlidWZmZXIgPSBlb2wgKyAxOworCisJaWYgKCFza2lwX3ByZWZpeChidWZmZXIsICJ0YWcgIiwgJmJ1ZmZlcikpIHsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywgRlNDS19NU0dfTUlTU0lOR19UQUdfRU5UUlksICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICd0YWcnIGxpbmUiKTsKKwkJZ290byBkb25lOworCX0KKwllb2wgPSBzdHJjaHIoYnVmZmVyLCAnXG4nKTsKKwlpZiAoIWVvbCkgeworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLCBGU0NLX01TR19NSVNTSU5HX1RBRywgImludmFsaWQgZm9ybWF0IC0gdW5leHBlY3RlZCBlbmQgYWZ0ZXIgJ3R5cGUnIGxpbmUiKTsKKwkJZ290byBkb25lOworCX0KKwlzdHJidWZfYWRkZigmc2IsICJyZWZzL3RhZ3MvJS4qcyIsIChpbnQpKGVvbCAtIGJ1ZmZlciksIGJ1ZmZlcik7CisJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHNiLmJ1ZiwgMCkpIHsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywKKwkJCSAgICAgRlNDS19NU0dfQkFEX1RBR19OQU1FLAorCQkJICAgICAiaW52YWxpZCAndGFnJyBuYW1lOiAlLipzIiwKKwkJCSAgICAgKGludCkoZW9sIC0gYnVmZmVyKSwgYnVmZmVyKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZG9uZTsKKwl9CisJYnVmZmVyID0gZW9sICsgMTsKKworCWlmICghc2tpcF9wcmVmaXgoYnVmZmVyLCAidGFnZ2VyICIsICZidWZmZXIpKSB7CisJCS8qIGVhcmx5IHRhZ3MgZG8gbm90IGNvbnRhaW4gJ3RhZ2dlcicgbGluZXM7IHdhcm4gb25seSAqLworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLCBGU0NLX01TR19NSVNTSU5HX1RBR0dFUl9FTlRSWSwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ3RhZ2dlcicgbGluZSIpOworCQlpZiAocmV0KQorCQkJZ290byBkb25lOworCX0KKwllbHNlCisJCXJldCA9IGZzY2tfaWRlbnQoJmJ1ZmZlciwgb2lkLCBPQkpfVEFHLCBvcHRpb25zKTsKKworZG9uZToKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBMaWtlIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYydzIHN0YXJ0c193aXRoX2RvdF9zbGFzaCwgYnV0IHdpdGhvdXQKKyAqIHJlbHlpbmcgb24gdGhlIHBsYXRmb3JtLWRlcGVuZGVudCBpc19kaXJfc2VwIGhlbHBlci4KKyAqCisgKiBUaGlzIGlzIGZvciB1c2UgaW4gY2hlY2tpbmcgd2hldGhlciBhIHN1Ym1vZHVsZSBVUkwgaXMgaW50ZXJwcmV0ZWQgYXMKKyAqIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBvbiBhbnkgcGxhdGZvcm0sIHNpbmNlIFwgaXMgYQorICogZGlyZWN0b3J5IHNlcGFyYXRvciBvbiBXaW5kb3dzIGJ1dCBub3Qgb24gb3RoZXIgcGxhdGZvcm1zLgorICovCitzdGF0aWMgaW50IHN0YXJ0c193aXRoX2RvdF9zbGFzaChjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuIHN0clswXSA9PSAnLicgJiYgKHN0clsxXSA9PSAnLycgfHwgc3RyWzFdID09ICdcXCcpOworfQorCisvKgorICogTGlrZSBzdGFydHNfd2l0aF9kb3Rfc2xhc2gsIHRoaXMgaXMgYSB2YXJpYW50IG9mIHN1Ym1vZHVsZS0taGVscGVyJ3MKKyAqIGhlbHBlciBvZiB0aGUgc2FtZSBuYW1lIHdpdGggdGhlIHR3aXN0IHRoYXQgaXQgYWNjZXB0cyBiYWNrc2xhc2ggYXMgYQorICogZGlyZWN0b3J5IHNlcGFyYXRvciBldmVuIG9uIG5vbi1XaW5kb3dzIHBsYXRmb3Jtcy4KKyAqLworc3RhdGljIGludCBzdGFydHNfd2l0aF9kb3RfZG90X3NsYXNoKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gc3RyWzBdID09ICcuJyAmJiBzdGFydHNfd2l0aF9kb3Rfc2xhc2goc3RyICsgMSk7Cit9CisKK3N0YXRpYyBpbnQgc3VibW9kdWxlX3VybF9pc19yZWxhdGl2ZShjb25zdCBjaGFyICp1cmwpCit7CisJcmV0dXJuIHN0YXJ0c193aXRoX2RvdF9zbGFzaCh1cmwpIHx8IHN0YXJ0c193aXRoX2RvdF9kb3Rfc2xhc2godXJsKTsKK30KKworLyoKKyAqIENvdW50IGRpcmVjdG9yeSBjb21wb25lbnRzIHRoYXQgYSByZWxhdGl2ZSBzdWJtb2R1bGUgVVJMIHNob3VsZCBjaG9wCisgKiBmcm9tIHRoZSByZW1vdGVfdXJsIGl0IGlzIHRvIGJlIHJlc29sdmVkIGFnYWluc3QuCisgKgorICogSW4gb3RoZXIgd29yZHMsIHRoaXMgY291bnRzICIuLi8iIGNvbXBvbmVudHMgYXQgdGhlIHN0YXJ0IG9mIGEKKyAqIHN1Ym1vZHVsZSBVUkwuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpcmVjdG9yeSBjb21wb25lbnRzIHRvIGNob3AgYW5kIHdyaXRlcyBhCisgKiBwb2ludGVyIHRvIHRoZSBuZXh0IGNoYXJhY3RlciBvZiB1cmwgYWZ0ZXIgYWxsIGxlYWRpbmcgIi4vIiBhbmQKKyAqICIuLi8iIGNvbXBvbmVudHMgdG8gb3V0LgorICovCitzdGF0aWMgaW50IGNvdW50X2xlYWRpbmdfZG90ZG90cyhjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKipvdXQpCit7CisJaW50IHJlc3VsdCA9IDA7CisJd2hpbGUgKDEpIHsKKwkJaWYgKHN0YXJ0c193aXRoX2RvdF9kb3Rfc2xhc2godXJsKSkgeworCQkJcmVzdWx0Kys7CisJCQl1cmwgKz0gc3RybGVuKCIuLi8iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzdGFydHNfd2l0aF9kb3Rfc2xhc2godXJsKSkgeworCQkJdXJsICs9IHN0cmxlbigiLi8iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCSpvdXQgPSB1cmw7CisJCXJldHVybiByZXN1bHQ7CisJfQorfQorLyoKKyAqIENoZWNrIHdoZXRoZXIgYSB0cmFuc3BvcnQgaXMgaW1wbGVtZW50ZWQgYnkgZ2l0LXJlbW90ZS1jdXJsLgorICoKKyAqIElmIGl0IGlzLCByZXR1cm5zIDEgYW5kIHdyaXRlcyB0aGUgVVJMIHRoYXQgd291bGQgYmUgcGFzc2VkIHRvCisgKiBnaXQtcmVtb3RlLWN1cmwgdG8gdGhlICJvdXQiIHBhcmFtZXRlci4KKyAqCisgKiBPdGhlcndpc2UsIHJldHVybnMgMCBhbmQgbGVhdmVzICJvdXQiIHVudG91Y2hlZC4KKyAqCisgKiBFeGFtcGxlczoKKyAqICAgaHR0cDo6aHR0cHM6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdCAtPiAxLCBodHRwczovL2V4YW1wbGUuY29tL3JlcG8uZ2l0CisgKiAgIGh0dHBzOi8vZXhhbXBsZS5jb20vcmVwby5naXQgLT4gMSwgaHR0cHM6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdAorICogICBnaXQ6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdCAtPiAwCisgKgorICogVGhpcyBpcyBmb3IgdXNlIGluIGNoZWNraW5nIGZvciBwcmV2aW91c2x5IGV4cGxvaXRhYmxlIGJ1Z3MgdGhhdAorICogcmVxdWlyZWQgYSBzdWJtb2R1bGUgVVJMIHRvIGJlIHBhc3NlZCB0byBnaXQtcmVtb3RlLWN1cmwuCisgKi8KK3N0YXRpYyBpbnQgdXJsX3RvX2N1cmxfdXJsKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqKm91dCkKK3sKKwkvKgorCSAqIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGNhc2UtYWxpYXNlcywgImh0dHAuZXhlIiwgYW5kIHNvCisJICogb24gYmVjYXVzZSBpbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBpc190cmFuc3BvcnRfYWxsb3dlZAorCSAqIHByZXZlbnRzIFVSTHMgd2l0aCB0aG9zZSBzY2hlbWVzIGZyb20gYmVpbmcgY2xvbmVkCisJICogYXV0b21hdGljYWxseS4KKwkgKi8KKwlpZiAoc2tpcF9wcmVmaXgodXJsLCAiaHR0cDo6Iiwgb3V0KSB8fAorCSAgICBza2lwX3ByZWZpeCh1cmwsICJodHRwczo6Iiwgb3V0KSB8fAorCSAgICBza2lwX3ByZWZpeCh1cmwsICJmdHA6OiIsIG91dCkgfHwKKwkgICAgc2tpcF9wcmVmaXgodXJsLCAiZnRwczo6Iiwgb3V0KSkKKwkJcmV0dXJuIDE7CisJaWYgKHN0YXJ0c193aXRoKHVybCwgImh0dHA6Ly8iKSB8fAorCSAgICBzdGFydHNfd2l0aCh1cmwsICJodHRwczovLyIpIHx8CisJICAgIHN0YXJ0c193aXRoKHVybCwgImZ0cDovLyIpIHx8CisJICAgIHN0YXJ0c193aXRoKHVybCwgImZ0cHM6Ly8iKSkgeworCQkqb3V0ID0gdXJsOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfc3VibW9kdWxlX3VybChjb25zdCBjaGFyICp1cmwpCit7CisJY29uc3QgY2hhciAqY3VybF91cmw7CisKKwlpZiAobG9va3NfbGlrZV9jb21tYW5kX2xpbmVfb3B0aW9uKHVybCkpCisJCXJldHVybiAtMTsKKworCWlmIChzdWJtb2R1bGVfdXJsX2lzX3JlbGF0aXZlKHVybCkpIHsKKwkJY2hhciAqZGVjb2RlZDsKKwkJY29uc3QgY2hhciAqbmV4dDsKKwkJaW50IGhhc19ubDsKKworCQkvKgorCQkgKiBUaGlzIGNvdWxkIGJlIGFwcGVuZGVkIHRvIGFuIGh0dHAgVVJMIGFuZCB1cmwtZGVjb2RlZDsKKwkJICogY2hlY2sgZm9yIG1hbGljaW91cyBjaGFyYWN0ZXJzLgorCQkgKi8KKwkJZGVjb2RlZCA9IHVybF9kZWNvZGUodXJsKTsKKwkJaGFzX25sID0gISFzdHJjaHIoZGVjb2RlZCwgJ1xuJyk7CisKKwkJZnJlZShkZWNvZGVkKTsKKwkJaWYgKGhhc19ubCkKKwkJCXJldHVybiAtMTsKKworCQkvKgorCQkgKiBVUkxzIHdoaWNoIGVzY2FwZSB0aGVpciByb290IHZpYSAiLi4vIiBjYW4gb3ZlcndyaXRlCisJCSAqIHRoZSBob3N0IGZpZWxkIGFuZCBwcmV2aW91cyBjb21wb25lbnRzLCByZXNvbHZpbmcgdG8KKwkJICogVVJMcyBsaWtlIGh0dHBzOjpleGFtcGxlLmNvbS9zdWJtb2R1bGUuZ2l0IGFuZAorCQkgKiBodHRwczovLy9leGFtcGxlLmNvbS9zdWJtb2R1bGUuZ2l0IHRoYXQgd2VyZQorCQkgKiBzdXNjZXB0aWJsZSB0byBDVkUtMjAyMC0xMTAwOC4KKwkJICovCisJCWlmIChjb3VudF9sZWFkaW5nX2RvdGRvdHModXJsLCAmbmV4dCkgPiAwICYmCisJCSAgICAoKm5leHQgPT0gJzonIHx8ICpuZXh0ID09ICcvJykpCisJCQlyZXR1cm4gLTE7CisJfQorCisJZWxzZSBpZiAodXJsX3RvX2N1cmxfdXJsKHVybCwgJmN1cmxfdXJsKSkgeworCQlzdHJ1Y3QgY3JlZGVudGlhbCBjID0gQ1JFREVOVElBTF9JTklUOworCQlpbnQgcmV0ID0gMDsKKwkJaWYgKGNyZWRlbnRpYWxfZnJvbV91cmxfZ2VudGx5KCZjLCBjdXJsX3VybCwgMSkgfHwKKwkJICAgICEqYy5ob3N0KQorCQkJcmV0ID0gLTE7CisJCWNyZWRlbnRpYWxfY2xlYXIoJmMpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZnNja19naXRtb2R1bGVzX2RhdGEgeworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwlzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zOworCWludCByZXQ7Cit9OworCitzdGF0aWMgaW50IGZzY2tfZ2l0bW9kdWxlc19mbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICp2ZGF0YSkKK3sKKwlzdHJ1Y3QgZnNja19naXRtb2R1bGVzX2RhdGEgKmRhdGEgPSB2ZGF0YTsKKwljb25zdCBjaGFyICpzdWJzZWN0aW9uLCAqa2V5OworCXNpemVfdCBzdWJzZWN0aW9uX2xlbjsKKwljaGFyICpuYW1lOworCisJaWYgKHBhcnNlX2NvbmZpZ19rZXkodmFyLCAic3VibW9kdWxlIiwgJnN1YnNlY3Rpb24sICZzdWJzZWN0aW9uX2xlbiwgJmtleSkgPCAwIHx8CisJICAgICFzdWJzZWN0aW9uKQorCQlyZXR1cm4gMDsKKworCW5hbWUgPSB4bWVtZHVweihzdWJzZWN0aW9uLCBzdWJzZWN0aW9uX2xlbik7CisJaWYgKGNoZWNrX3N1Ym1vZHVsZV9uYW1lKG5hbWUpIDwgMCkKKwkJZGF0YS0+cmV0IHw9IHJlcG9ydChkYXRhLT5vcHRpb25zLAorCQkJCSAgICBkYXRhLT5vaWQsIE9CSl9CTE9CLAorCQkJCSAgICBGU0NLX01TR19HSVRNT0RVTEVTX05BTUUsCisJCQkJICAgICJkaXNhbGxvd2VkIHN1Ym1vZHVsZSBuYW1lOiAlcyIsCisJCQkJICAgIG5hbWUpOworCWlmICghc3RyY21wKGtleSwgInVybCIpICYmIHZhbHVlICYmCisJICAgIGNoZWNrX3N1Ym1vZHVsZV91cmwodmFsdWUpIDwgMCkKKwkJZGF0YS0+cmV0IHw9IHJlcG9ydChkYXRhLT5vcHRpb25zLAorCQkJCSAgICBkYXRhLT5vaWQsIE9CSl9CTE9CLAorCQkJCSAgICBGU0NLX01TR19HSVRNT0RVTEVTX1VSTCwKKwkJCQkgICAgImRpc2FsbG93ZWQgc3VibW9kdWxlIHVybDogJXMiLAorCQkJCSAgICB2YWx1ZSk7CisJaWYgKCFzdHJjbXAoa2V5LCAicGF0aCIpICYmIHZhbHVlICYmCisJICAgIGxvb2tzX2xpa2VfY29tbWFuZF9saW5lX29wdGlvbih2YWx1ZSkpCisJCWRhdGEtPnJldCB8PSByZXBvcnQoZGF0YS0+b3B0aW9ucywKKwkJCQkgICAgZGF0YS0+b2lkLCBPQkpfQkxPQiwKKwkJCQkgICAgRlNDS19NU0dfR0lUTU9EVUxFU19QQVRILAorCQkJCSAgICAiZGlzYWxsb3dlZCBzdWJtb2R1bGUgcGF0aDogJXMiLAorCQkJCSAgICB2YWx1ZSk7CisJaWYgKCFzdHJjbXAoa2V5LCAidXBkYXRlIikgJiYgdmFsdWUgJiYKKwkgICAgcGFyc2Vfc3VibW9kdWxlX3VwZGF0ZV90eXBlKHZhbHVlKSA9PSBTTV9VUERBVEVfQ09NTUFORCkKKwkJZGF0YS0+cmV0IHw9IHJlcG9ydChkYXRhLT5vcHRpb25zLCBkYXRhLT5vaWQsIE9CSl9CTE9CLAorCQkJCSAgICBGU0NLX01TR19HSVRNT0RVTEVTX1VQREFURSwKKwkJCQkgICAgImRpc2FsbG93ZWQgc3VibW9kdWxlIHVwZGF0ZSBzZXR0aW5nOiAlcyIsCisJCQkJICAgIHZhbHVlKTsKKwlmcmVlKG5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnNja19ibG9iKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqYnVmLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlzdHJ1Y3QgZnNja19naXRtb2R1bGVzX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgY29uZmlnX29wdGlvbnMgY29uZmlnX29wdHMgPSB7IDAgfTsKKworCWlmICghb2lkc2V0X2NvbnRhaW5zKCZnaXRtb2R1bGVzX2ZvdW5kLCBvaWQpKQorCQlyZXR1cm4gMDsKKwlvaWRzZXRfaW5zZXJ0KCZnaXRtb2R1bGVzX2RvbmUsIG9pZCk7CisKKwlpZiAob2JqZWN0X29uX3NraXBsaXN0KG9wdGlvbnMsIG9pZCkpCisJCXJldHVybiAwOworCisJaWYgKCFidWYpIHsKKwkJLyoKKwkJICogQSBtaXNzaW5nIGJ1ZmZlciBoZXJlIGlzIGEgc2lnbiB0aGF0IHRoZSBjYWxsZXIgZm91bmQgdGhlCisJCSAqIGJsb2IgdG9vIGdpZ2FudGljIHRvIGxvYWQgaW50byBtZW1vcnkuIExldCdzIGp1c3QgY29uc2lkZXIKKwkJICogdGhhdCBhbiBlcnJvci4KKwkJICovCisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfQkxPQiwKKwkJCSAgICAgIEZTQ0tfTVNHX0dJVE1PRFVMRVNfTEFSR0UsCisJCQkgICAgICAiLmdpdG1vZHVsZXMgdG9vIGxhcmdlIHRvIHBhcnNlIik7CisJfQorCisJZGF0YS5vaWQgPSBvaWQ7CisJZGF0YS5vcHRpb25zID0gb3B0aW9uczsKKwlkYXRhLnJldCA9IDA7CisJY29uZmlnX29wdHMuZXJyb3JfYWN0aW9uID0gQ09ORklHX0VSUk9SX1NJTEVOVDsKKwlpZiAoZ2l0X2NvbmZpZ19mcm9tX21lbShmc2NrX2dpdG1vZHVsZXNfZm4sIENPTkZJR19PUklHSU5fQkxPQiwKKwkJCQkiLmdpdG1vZHVsZXMiLCBidWYsIHNpemUsICZkYXRhLCAmY29uZmlnX29wdHMpKQorCQlkYXRhLnJldCB8PSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfQkxPQiwKKwkJCQkgICBGU0NLX01TR19HSVRNT0RVTEVTX1BBUlNFLAorCQkJCSAgICJjb3VsZCBub3QgcGFyc2UgZ2l0bW9kdWxlcyBibG9iIik7CisKKwlyZXR1cm4gZGF0YS5yZXQ7Cit9CisKK2ludCBmc2NrX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwlzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWlmICghb2JqKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIE5VTEwsIE9CSl9OT05FLCBGU0NLX01TR19CQURfT0JKRUNUX1NIQTEsICJubyB2YWxpZCBvYmplY3QgdG8gZnNjayIpOworCisJaWYgKG9iai0+dHlwZSA9PSBPQkpfQkxPQikKKwkJcmV0dXJuIGZzY2tfYmxvYigmb2JqLT5vaWQsIGRhdGEsIHNpemUsIG9wdGlvbnMpOworCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpCisJCXJldHVybiBmc2NrX3RyZWUoJm9iai0+b2lkLCBkYXRhLCBzaXplLCBvcHRpb25zKTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpCisJCXJldHVybiBmc2NrX2NvbW1pdCgmb2JqLT5vaWQsIGRhdGEsIHNpemUsIG9wdGlvbnMpOworCWlmIChvYmotPnR5cGUgPT0gT0JKX1RBRykKKwkJcmV0dXJuIGZzY2tfdGFnKCZvYmotPm9pZCwgZGF0YSwgc2l6ZSwgb3B0aW9ucyk7CisKKwlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsICZvYmotPm9pZCwgb2JqLT50eXBlLAorCQkgICAgICBGU0NLX01TR19VTktOT1dOX1RZUEUsCisJCSAgICAgICJ1bmtub3duIHR5cGUgJyVkJyAoaW50ZXJuYWwgZnNjayBlcnJvcikiLAorCQkgICAgICBvYmotPnR5cGUpOworfQorCitpbnQgZnNja19lcnJvcl9mdW5jdGlvbihzdHJ1Y3QgZnNja19vcHRpb25zICpvLAorCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJZW51bSBvYmplY3RfdHlwZSBvYmplY3RfdHlwZSwKKwkJCWludCBtc2dfdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlpZiAobXNnX3R5cGUgPT0gRlNDS19XQVJOKSB7CisJCXdhcm5pbmcoIm9iamVjdCAlczogJXMiLCBmc2NrX2Rlc2NyaWJlX29iamVjdChvLCBvaWQpLCBtZXNzYWdlKTsKKwkJcmV0dXJuIDA7CisJfQorCWVycm9yKCJvYmplY3QgJXM6ICVzIiwgZnNja19kZXNjcmliZV9vYmplY3Qobywgb2lkKSwgbWVzc2FnZSk7CisJcmV0dXJuIDE7Cit9CisKK2ludCBmc2NrX2ZpbmlzaChzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBvaWRzZXRfaXRlciBpdGVyOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKworCW9pZHNldF9pdGVyX2luaXQoJmdpdG1vZHVsZXNfZm91bmQsICZpdGVyKTsKKwl3aGlsZSAoKG9pZCA9IG9pZHNldF9pdGVyX25leHQoJml0ZXIpKSkgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJY2hhciAqYnVmOworCisJCWlmIChvaWRzZXRfY29udGFpbnMoJmdpdG1vZHVsZXNfZG9uZSwgb2lkKSkKKwkJCWNvbnRpbnVlOworCisJCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCQlpZiAoIWJ1ZikgeworCQkJaWYgKGlzX3Byb21pc29yX29iamVjdChvaWQpKQorCQkJCWNvbnRpbnVlOworCQkJcmV0IHw9IHJlcG9ydChvcHRpb25zLAorCQkJCSAgICAgIG9pZCwgT0JKX0JMT0IsCisJCQkJICAgICAgRlNDS19NU0dfR0lUTU9EVUxFU19NSVNTSU5HLAorCQkJCSAgICAgICJ1bmFibGUgdG8gcmVhZCAuZ2l0bW9kdWxlcyBibG9iIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICh0eXBlID09IE9CSl9CTE9CKQorCQkJcmV0IHw9IGZzY2tfYmxvYihvaWQsIGJ1Ziwgc2l6ZSwgb3B0aW9ucyk7CisJCWVsc2UKKwkJCXJldCB8PSByZXBvcnQob3B0aW9ucywKKwkJCQkgICAgICBvaWQsIHR5cGUsCisJCQkJICAgICAgRlNDS19NU0dfR0lUTU9EVUxFU19CTE9CLAorCQkJCSAgICAgICJub24tYmxvYiBmb3VuZCBhdCAuZ2l0bW9kdWxlcyIpOworCQlmcmVlKGJ1Zik7CisJfQorCisKKwlvaWRzZXRfY2xlYXIoJmdpdG1vZHVsZXNfZm91bmQpOworCW9pZHNldF9jbGVhcigmZ2l0bW9kdWxlc19kb25lKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZnNjay5oIGIvZnNjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5Y2Y3MTUKLS0tIC9kZXYvbnVsbAorKysgYi9mc2NrLmgKQEAgLTAsMCArMSw5NyBAQAorI2lmbmRlZiBHSVRfRlNDS19ICisjZGVmaW5lIEdJVF9GU0NLX0gKKworI2luY2x1ZGUgIm9pZHNldC5oIgorCisjZGVmaW5lIEZTQ0tfRVJST1IgMQorI2RlZmluZSBGU0NLX1dBUk4gMgorI2RlZmluZSBGU0NLX0lHTk9SRSAzCisKK3N0cnVjdCBmc2NrX29wdGlvbnM7CitzdHJ1Y3Qgb2JqZWN0OworCit2b2lkIGZzY2tfc2V0X21zZ190eXBlKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsCisJCWNvbnN0IGNoYXIgKm1zZ19pZCwgY29uc3QgY2hhciAqbXNnX3R5cGUpOwordm9pZCBmc2NrX3NldF9tc2dfdHlwZXMoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywgY29uc3QgY2hhciAqdmFsdWVzKTsKK2ludCBpc192YWxpZF9tc2dfdHlwZShjb25zdCBjaGFyICptc2dfaWQsIGNvbnN0IGNoYXIgKm1zZ190eXBlKTsKKworLyoKKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBmc2NrX3dhbGsKKyAqIHR5cGUgaXMgdGhlIGV4cGVjdGVkIHR5cGUgb2YgdGhlIG9iamVjdCBvciBPQkpfQU5ZCisgKiB0aGUgcmV0dXJuIHZhbHVlIGlzOgorICogICAgIDAJZXZlcnl0aGluZyBPSworICogICAgIDwwCWVycm9yIHNpZ25hbGVkIGFuZCBhYm9ydAorICogICAgID4wCWVycm9yIHNpZ25hbGVkIGFuZCBkbyBub3QgYWJvcnQKKyAqLwordHlwZWRlZiBpbnQgKCpmc2NrX3dhbGtfZnVuYykoc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucyk7CisKKy8qIGNhbGxiYWNrIGZvciBmc2NrX29iamVjdCwgdHlwZSBpcyBGU0NLX0VSUk9SIG9yIEZTQ0tfV0FSTiAqLwordHlwZWRlZiBpbnQgKCpmc2NrX2Vycm9yKShzdHJ1Y3QgZnNja19vcHRpb25zICpvLAorCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGVudW0gb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGUsCisJCQkgIGludCBtc2dfdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKK2ludCBmc2NrX2Vycm9yX2Z1bmN0aW9uKHN0cnVjdCBmc2NrX29wdGlvbnMgKm8sCisJCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGVudW0gb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGUsCisJCQlpbnQgbXNnX3R5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCitzdHJ1Y3QgZnNja19vcHRpb25zIHsKKwlmc2NrX3dhbGtfZnVuYyB3YWxrOworCWZzY2tfZXJyb3IgZXJyb3JfZnVuYzsKKwl1bnNpZ25lZCBzdHJpY3Q6MTsKKwlpbnQgKm1zZ190eXBlOworCXN0cnVjdCBvaWRzZXQgc2tpcGxpc3Q7CisJa2hfb2lkX21hcF90ICpvYmplY3RfbmFtZXM7Cit9OworCisjZGVmaW5lIEZTQ0tfT1BUSU9OU19ERUZBVUxUIHsgTlVMTCwgZnNja19lcnJvcl9mdW5jdGlvbiwgMCwgTlVMTCwgT0lEU0VUX0lOSVQgfQorI2RlZmluZSBGU0NLX09QVElPTlNfU1RSSUNUIHsgTlVMTCwgZnNja19lcnJvcl9mdW5jdGlvbiwgMSwgTlVMTCwgT0lEU0VUX0lOSVQgfQorCisvKiBkZXNjZW5kIGluIGFsbCBsaW5rZWQgY2hpbGQgb2JqZWN0cworICogdGhlIHJldHVybiB2YWx1ZSBpczoKKyAqICAgIC0xCWVycm9yIGluIHByb2Nlc3NpbmcgdGhlIG9iamVjdAorICogICAgPDAJcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsYmFjaywgd2hpY2ggbGVhZCB0byBhbiBhYm9ydAorICogICAgPjAJcmV0dXJuIHZhbHVlIG9mIHRoZSBmaXJzdCBzaWduYWxlZCBlcnJvciA+MCAoaW4gdGhlIGNhc2Ugb2Ygbm8gb3RoZXIgZXJyb3JzKQorICogICAgMAkJZXZlcnl0aGluZyBPSworICovCitpbnQgZnNja193YWxrKHN0cnVjdCBvYmplY3QgKm9iaiwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucyk7CisKKy8qCisgKiBCbG9iIG9iamVjdHMgbXkgcGFzcyBhIE5VTEwgZGF0YSBwb2ludGVyLCB3aGljaCBpbmRpY2F0ZXMgdGhleSBhcmUgdG9vIGxhcmdlCisgKiB0byBmaXQgaW4gbWVtb3J5LiBBbGwgb3RoZXIgdHlwZXMgbXVzdCBwYXNzIGEgcmVhbCBidWZmZXIuCisgKi8KK2ludCBmc2NrX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwlzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKTsKKworLyoKKyAqIFNvbWUgZnNjayBjaGVja3MgYXJlIGNvbnRleHQtZGVwZW5kZW50LCBhbmQgbWF5IGVuZCB1cCBxdWV1ZWQ7IHJ1biB0aGlzCisgKiBhZnRlciBjb21wbGV0aW5nIGFsbCBmc2NrX29iamVjdCgpIGNhbGxzIGluIG9yZGVyIHRvIHJlc29sdmUgYW55IHJlbWFpbmluZworICogY2hlY2tzLgorICovCitpbnQgZnNja19maW5pc2goc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucyk7CisKKy8qCisgKiBTdWJzeXN0ZW0gZm9yIHN0b3JpbmcgaHVtYW4tcmVhZGFibGUgbmFtZXMgZm9yIGVhY2ggb2JqZWN0LgorICoKKyAqIElmIGZzY2tfZW5hYmxlX29iamVjdF9uYW1lcygpIGhhcyBub3QgYmVlbiBjYWxsZWQsIGFsbCBvdGhlciBmdW5jdGlvbnMgYXJlCisgKiBub29wcy4KKyAqCisgKiBVc2UgZnNja19wdXRfb2JqZWN0X25hbWUoKSB0byBzZWVkIGluaXRpYWwgbmFtZXMgKGUuZy4gZnJvbSByZWZuYW1lcyk7IHRoZQorICogZnNjayBjb2RlIHdpbGwgZXh0ZW5kIHRoYXQgd2hpbGUgd2Fsa2luZyB0cmVlcywgZXRjLgorICoKKyAqIFVzZSBmc2NrX2dldF9vYmplY3RfbmFtZSgpIHRvIGdldCBhIHNpbmdsZSBuYW1lIChvciBOVUxMIGlmIG5vbmUpLiBPciB0aGUKKyAqIG1vcmUgY29udmVuaWVudCBkZXNjcmliZV9vYmplY3QoKSwgd2hpY2ggYWx3YXlzIHByb2R1Y2VzIGFuIG91dHB1dCBzdHJpbmcKKyAqIHdpdGggdGhlIG9pZCBjb21iaW5lZCB3aXRoIHRoZSBuYW1lIChpZiBhbnkpLiBOb3RlIHRoYXQgdGhlIHJldHVybiB2YWx1ZQorICogcG9pbnRzIHRvIGEgcm90YXRpbmcgYXJyYXkgb2Ygc3RhdGljIGJ1ZmZlcnMsIGFuZCBtYXkgYmUgaW52YWxpZGF0ZWQgYnkgYQorICogc3Vic2VxdWVudCBjYWxsLgorICovCit2b2lkIGZzY2tfZW5hYmxlX29iamVjdF9uYW1lcyhzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKTsKK2NvbnN0IGNoYXIgKmZzY2tfZ2V0X29iamVjdF9uYW1lKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsCisJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwzLDQpKSkKK3ZvaWQgZnNja19wdXRfb2JqZWN0X25hbWUoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywKKwkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICBjb25zdCBjaGFyICpmbXQsIC4uLik7Citjb25zdCBjaGFyICpmc2NrX2Rlc2NyaWJlX29iamVjdChzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLAorCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzbW9uaXRvci5jIGIvZnNtb25pdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMyYmQ5MAotLS0gL2Rldi9udWxsCisrKyBiL2ZzbW9uaXRvci5jCkBAIC0wLDAgKzEsMzYyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJld2FoL2V3b2suaCIKKyNpbmNsdWRlICJmc21vbml0b3IuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCisjZGVmaW5lIElOREVYX0VYVEVOU0lPTl9WRVJTSU9OMQkoMSkKKyNkZWZpbmUgSU5ERVhfRVhURU5TSU9OX1ZFUlNJT04yCSgyKQorI2RlZmluZSBIT09LX0lOVEVSRkFDRV9WRVJTSU9OMQkJKDEpCisjZGVmaW5lIEhPT0tfSU5URVJGQUNFX1ZFUlNJT04yCQkoMikKKworc3RydWN0IHRyYWNlX2tleSB0cmFjZV9mc21vbml0b3IgPSBUUkFDRV9LRVlfSU5JVChGU01PTklUT1IpOworCitzdGF0aWMgdm9pZCBmc21vbml0b3JfZXdhaF9jYWxsYmFjayhzaXplX3QgcG9zLCB2b2lkICppcykKK3sKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSA9IChzdHJ1Y3QgaW5kZXhfc3RhdGUgKilpczsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJaWYgKHBvcyA+PSBpc3RhdGUtPmNhY2hlX25yKQorCQlCVUcoImZzbW9uaXRvcl9kaXJ0eSBoYXMgbW9yZSBlbnRyaWVzIHRoYW4gdGhlIGluZGV4ICglIlBSSXVNQVgiID49ICV1KSIsCisJCSAgICAodWludG1heF90KXBvcywgaXN0YXRlLT5jYWNoZV9ucik7CisKKwljZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zXTsKKwljZS0+Y2VfZmxhZ3MgJj0gfkNFX0ZTTU9OSVRPUl9WQUxJRDsKK30KKworc3RhdGljIGludCBmc21vbml0b3JfaG9va192ZXJzaW9uKHZvaWQpCit7CisJaW50IGhvb2tfdmVyc2lvbjsKKworCWlmIChnaXRfY29uZmlnX2dldF9pbnQoImNvcmUuZnNtb25pdG9yaG9va3ZlcnNpb24iLCAmaG9va192ZXJzaW9uKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGhvb2tfdmVyc2lvbiA9PSBIT09LX0lOVEVSRkFDRV9WRVJTSU9OMSB8fAorCSAgICBob29rX3ZlcnNpb24gPT0gSE9PS19JTlRFUkZBQ0VfVkVSU0lPTjIpCisJCXJldHVybiBob29rX3ZlcnNpb247CisKKwl3YXJuaW5nKCJJbnZhbGlkIGhvb2sgdmVyc2lvbiAnJWknIGluIGNvcmUuZnNtb25pdG9yaG9va3ZlcnNpb24uICIKKwkJIk11c3QgYmUgMSBvciAyLiIsIGhvb2tfdmVyc2lvbik7CisJcmV0dXJuIC0xOworfQorCitpbnQgcmVhZF9mc21vbml0b3JfZXh0ZW5zaW9uKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCB2b2lkICpkYXRhLAorCXVuc2lnbmVkIGxvbmcgc3opCit7CisJY29uc3QgY2hhciAqaW5kZXggPSBkYXRhOworCXVpbnQzMl90IGhkcl92ZXJzaW9uOworCXVpbnQzMl90IGV3YWhfc2l6ZTsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmZzbW9uaXRvcl9kaXJ0eTsKKwlpbnQgcmV0OworCXVpbnQ2NF90IHRpbWVzdGFtcDsKKwlzdHJ1Y3Qgc3RyYnVmIGxhc3RfdXBkYXRlID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoc3ogPCBzaXplb2YodWludDMyX3QpICsgMSArIHNpemVvZih1aW50MzJfdCkpCisJCXJldHVybiBlcnJvcigiY29ycnVwdCBmc21vbml0b3IgZXh0ZW5zaW9uICh0b28gc2hvcnQpIik7CisKKwloZHJfdmVyc2lvbiA9IGdldF9iZTMyKGluZGV4KTsKKwlpbmRleCArPSBzaXplb2YodWludDMyX3QpOworCWlmIChoZHJfdmVyc2lvbiA9PSBJTkRFWF9FWFRFTlNJT05fVkVSU0lPTjEpIHsKKwkJdGltZXN0YW1wID0gZ2V0X2JlNjQoaW5kZXgpOworCQlzdHJidWZfYWRkZigmbGFzdF91cGRhdGUsICIlIlBSSXU2NCIiLCB0aW1lc3RhbXApOworCQlpbmRleCArPSBzaXplb2YodWludDY0X3QpOworCX0gZWxzZSBpZiAoaGRyX3ZlcnNpb24gPT0gSU5ERVhfRVhURU5TSU9OX1ZFUlNJT04yKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmxhc3RfdXBkYXRlLCBpbmRleCk7CisJCWluZGV4ICs9IGxhc3RfdXBkYXRlLmxlbiArIDE7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGVycm9yKCJiYWQgZnNtb25pdG9yIHZlcnNpb24gJWQiLCBoZHJfdmVyc2lvbik7CisJfQorCisJaXN0YXRlLT5mc21vbml0b3JfbGFzdF91cGRhdGUgPSBzdHJidWZfZGV0YWNoKCZsYXN0X3VwZGF0ZSwgTlVMTCk7CisKKwlld2FoX3NpemUgPSBnZXRfYmUzMihpbmRleCk7CisJaW5kZXggKz0gc2l6ZW9mKHVpbnQzMl90KTsKKworCWZzbW9uaXRvcl9kaXJ0eSA9IGV3YWhfbmV3KCk7CisJcmV0ID0gZXdhaF9yZWFkX21tYXAoZnNtb25pdG9yX2RpcnR5LCBpbmRleCwgZXdhaF9zaXplKTsKKwlpZiAocmV0ICE9IGV3YWhfc2l6ZSkgeworCQlld2FoX2ZyZWUoZnNtb25pdG9yX2RpcnR5KTsKKwkJcmV0dXJuIGVycm9yKCJmYWlsZWQgdG8gcGFyc2UgZXdhaCBiaXRtYXAgcmVhZGluZyBmc21vbml0b3IgaW5kZXggZXh0ZW5zaW9uIik7CisJfQorCWlzdGF0ZS0+ZnNtb25pdG9yX2RpcnR5ID0gZnNtb25pdG9yX2RpcnR5OworCisJaWYgKCFpc3RhdGUtPnNwbGl0X2luZGV4ICYmCisJICAgIGlzdGF0ZS0+ZnNtb25pdG9yX2RpcnR5LT5iaXRfc2l6ZSA+IGlzdGF0ZS0+Y2FjaGVfbnIpCisJCUJVRygiZnNtb25pdG9yX2RpcnR5IGhhcyBtb3JlIGVudHJpZXMgdGhhbiB0aGUgaW5kZXggKCUiUFJJdU1BWCIgPiAldSkiLAorCQkgICAgKHVpbnRtYXhfdClpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUsIGlzdGF0ZS0+Y2FjaGVfbnIpOworCisJdHJhY2VfcHJpbnRmX2tleSgmdHJhY2VfZnNtb25pdG9yLCAicmVhZCBmc21vbml0b3IgZXh0ZW5zaW9uIHN1Y2Nlc3NmdWwiKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmaWxsX2ZzbW9uaXRvcl9iaXRtYXAoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJdW5zaWduZWQgaW50IGksIHNraXBwZWQgPSAwOworCWlzdGF0ZS0+ZnNtb25pdG9yX2RpcnR5ID0gZXdhaF9uZXcoKTsKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCWlmIChpc3RhdGUtPmNhY2hlW2ldLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJCXNraXBwZWQrKzsKKwkJZWxzZSBpZiAoIShpc3RhdGUtPmNhY2hlW2ldLT5jZV9mbGFncyAmIENFX0ZTTU9OSVRPUl9WQUxJRCkpCisJCQlld2FoX3NldChpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eSwgaSAtIHNraXBwZWQpOworCX0KK30KKwordm9pZCB3cml0ZV9mc21vbml0b3JfZXh0ZW5zaW9uKHN0cnVjdCBzdHJidWYgKnNiLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwl1aW50MzJfdCBoZHJfdmVyc2lvbjsKKwl1aW50MzJfdCBld2FoX3N0YXJ0OworCXVpbnQzMl90IGV3YWhfc2l6ZSA9IDA7CisJaW50IGZpeHVwID0gMDsKKworCWlmICghaXN0YXRlLT5zcGxpdF9pbmRleCAmJgorCSAgICBpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUgPiBpc3RhdGUtPmNhY2hlX25yKQorCQlCVUcoImZzbW9uaXRvcl9kaXJ0eSBoYXMgbW9yZSBlbnRyaWVzIHRoYW4gdGhlIGluZGV4ICglIlBSSXVNQVgiID4gJXUpIiwKKwkJICAgICh1aW50bWF4X3QpaXN0YXRlLT5mc21vbml0b3JfZGlydHktPmJpdF9zaXplLCBpc3RhdGUtPmNhY2hlX25yKTsKKworCXB1dF9iZTMyKCZoZHJfdmVyc2lvbiwgSU5ERVhfRVhURU5TSU9OX1ZFUlNJT04yKTsKKwlzdHJidWZfYWRkKHNiLCAmaGRyX3ZlcnNpb24sIHNpemVvZih1aW50MzJfdCkpOworCisJc3RyYnVmX2FkZHN0cihzYiwgaXN0YXRlLT5mc21vbml0b3JfbGFzdF91cGRhdGUpOworCXN0cmJ1Zl9hZGRjaChzYiwgMCk7IC8qIFdhbnQgdG8ga2VlcCBhIE5VTCAqLworCisJZml4dXAgPSBzYi0+bGVuOworCXN0cmJ1Zl9hZGQoc2IsICZld2FoX3NpemUsIHNpemVvZih1aW50MzJfdCkpOyAvKiB3ZSdsbCBmaXggdGhpcyB1cCBsYXRlciAqLworCisJZXdhaF9zdGFydCA9IHNiLT5sZW47CisJZXdhaF9zZXJpYWxpemVfc3RyYnVmKGlzdGF0ZS0+ZnNtb25pdG9yX2RpcnR5LCBzYik7CisJZXdhaF9mcmVlKGlzdGF0ZS0+ZnNtb25pdG9yX2RpcnR5KTsKKwlpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eSA9IE5VTEw7CisKKwkvKiBmaXggdXAgc2l6ZSBmaWVsZCAqLworCXB1dF9iZTMyKCZld2FoX3NpemUsIHNiLT5sZW4gLSBld2FoX3N0YXJ0KTsKKwltZW1jcHkoc2ItPmJ1ZiArIGZpeHVwLCAmZXdhaF9zaXplLCBzaXplb2YodWludDMyX3QpKTsKKworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX2ZzbW9uaXRvciwgIndyaXRlIGZzbW9uaXRvciBleHRlbnNpb24gc3VjY2Vzc2Z1bCIpOworfQorCisvKgorICogQ2FsbCB0aGUgcXVlcnktZnNtb25pdG9yIGhvb2sgcGFzc2luZyB0aGUgbGFzdCB1cGRhdGUgdG9rZW4gb2YgdGhlIHNhdmVkIHJlc3VsdHMuCisgKi8KK3N0YXRpYyBpbnQgcXVlcnlfZnNtb25pdG9yKGludCB2ZXJzaW9uLCBjb25zdCBjaGFyICpsYXN0X3VwZGF0ZSwgc3RydWN0IHN0cmJ1ZiAqcXVlcnlfcmVzdWx0KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJaWYgKCFjb3JlX2ZzbW9uaXRvcikKKwkJcmV0dXJuIC0xOworCisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBjb3JlX2ZzbW9uaXRvcik7CisJYXJndl9hcnJheV9wdXNoZigmY3AuYXJncywgIiVkIiwgdmVyc2lvbik7CisJYXJndl9hcnJheV9wdXNoZigmY3AuYXJncywgIiVzIiwgbGFzdF91cGRhdGUpOworCWNwLnVzZV9zaGVsbCA9IDE7CisJY3AuZGlyID0gZ2V0X2dpdF93b3JrX3RyZWUoKTsKKworCXJldHVybiBjYXB0dXJlX2NvbW1hbmQoJmNwLCBxdWVyeV9yZXN1bHQsIDEwMjQpOworfQorCitzdGF0aWMgdm9pZCBmc21vbml0b3JfcmVmcmVzaF9jYWxsYmFjayhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBuYW1lLCBzdHJsZW4obmFtZSkpOworCisJaWYgKHBvcyA+PSAwKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW3Bvc107CisJCWNlLT5jZV9mbGFncyAmPSB+Q0VfRlNNT05JVE9SX1ZBTElEOworCX0KKworCS8qCisJICogTWFyayB0aGUgdW50cmFja2VkIGNhY2hlIGRpcnR5IGV2ZW4gaWYgaXQgd2Fzbid0IGZvdW5kIGluIHRoZSBpbmRleAorCSAqIGFzIGl0IGNvdWxkIGJlIGEgbmV3IHVudHJhY2tlZCBmaWxlLgorCSAqLworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX2ZzbW9uaXRvciwgImZzbW9uaXRvcl9yZWZyZXNoX2NhbGxiYWNrICclcyciLCBuYW1lKTsKKwl1bnRyYWNrZWRfY2FjaGVfaW52YWxpZGF0ZV9wYXRoKGlzdGF0ZSwgbmFtZSwgMCk7Cit9CisKK3ZvaWQgcmVmcmVzaF9mc21vbml0b3Ioc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3RydWN0IHN0cmJ1ZiBxdWVyeV9yZXN1bHQgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcXVlcnlfc3VjY2VzcyA9IDAsIGhvb2tfdmVyc2lvbiA9IC0xOworCXNpemVfdCBib2wgPSAwOyAvKiBiZWdpbm5pbmcgb2YgbGluZSAqLworCXVpbnQ2NF90IGxhc3RfdXBkYXRlOworCXN0cnVjdCBzdHJidWYgbGFzdF91cGRhdGVfdG9rZW4gPSBTVFJCVUZfSU5JVDsKKwljaGFyICpidWY7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoIWNvcmVfZnNtb25pdG9yIHx8IGlzdGF0ZS0+ZnNtb25pdG9yX2hhc19ydW5fb25jZSkKKwkJcmV0dXJuOworCisJaG9va192ZXJzaW9uID0gZnNtb25pdG9yX2hvb2tfdmVyc2lvbigpOworCisJaXN0YXRlLT5mc21vbml0b3JfaGFzX3J1bl9vbmNlID0gMTsKKworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX2ZzbW9uaXRvciwgInJlZnJlc2ggZnNtb25pdG9yIik7CisJLyoKKwkgKiBUaGlzIGNvdWxkIGJlIHJhY3kgc28gc2F2ZSB0aGUgZGF0ZS90aW1lIG5vdyBhbmQgcXVlcnlfZnNtb25pdG9yCisJICogc2hvdWxkIGJlIGluY2x1c2l2ZSB0byBlbnN1cmUgd2UgZG9uJ3QgbWlzcyBwb3RlbnRpYWwgY2hhbmdlcy4KKwkgKi8KKwlsYXN0X3VwZGF0ZSA9IGdldG5hbm90aW1lKCk7CisJaWYgKGhvb2tfdmVyc2lvbiA9PSBIT09LX0lOVEVSRkFDRV9WRVJTSU9OMSkKKwkJc3RyYnVmX2FkZGYoJmxhc3RfdXBkYXRlX3Rva2VuLCAiJSJQUkl1NjQiIiwgbGFzdF91cGRhdGUpOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGEgbGFzdCB1cGRhdGUgdG9rZW4sIGNhbGwgcXVlcnlfZnNtb25pdG9yIGZvciB0aGUgc2V0IG9mCisJICogY2hhbmdlcyBzaW5jZSB0aGF0IHRva2VuLCBlbHNlIGFzc3VtZSBldmVyeXRoaW5nIGlzIHBvc3NpYmx5IGRpcnR5CisJICogYW5kIGNoZWNrIGl0IGFsbC4KKwkgKi8KKwlpZiAoaXN0YXRlLT5mc21vbml0b3JfbGFzdF91cGRhdGUpIHsKKwkJaWYgKGhvb2tfdmVyc2lvbiA9PSAtMSB8fCBob29rX3ZlcnNpb24gPT0gSE9PS19JTlRFUkZBQ0VfVkVSU0lPTjIpIHsKKwkJCXF1ZXJ5X3N1Y2Nlc3MgPSAhcXVlcnlfZnNtb25pdG9yKEhPT0tfSU5URVJGQUNFX1ZFUlNJT04yLAorCQkJCWlzdGF0ZS0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlLCAmcXVlcnlfcmVzdWx0KTsKKworCQkJaWYgKHF1ZXJ5X3N1Y2Nlc3MpIHsKKwkJCQlpZiAoaG9va192ZXJzaW9uIDwgMCkKKwkJCQkJaG9va192ZXJzaW9uID0gSE9PS19JTlRFUkZBQ0VfVkVSU0lPTjI7CisKKwkJCQkvKgorCQkJCSAqIEZpcnN0IGVudHJ5IHdpbGwgYmUgdGhlIGxhc3QgdXBkYXRlIHRva2VuCisJCQkJICogTmVlZCB0byB1c2UgYSBjaGFyICogdmFyaWFibGUgYmVjYXVzZSBzdGF0aWMKKwkJCQkgKiBhbmFseXNpcyB3YXMgc3VnZ2VzdGluZyB0byB1c2Ugc3RyYnVmX2FkZGJ1ZgorCQkJCSAqIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGNvcHkgdGhlIGVudGlyZSBzdHJidWYKKwkJCQkgKiBvbmx5IHRoZSB0aGUgY2hhcnMgdXAgdG8gdGhlIGZpcnN0IE5VTAorCQkJCSAqLworCQkJCWJ1ZiA9IHF1ZXJ5X3Jlc3VsdC5idWY7CisJCQkJc3RyYnVmX2FkZHN0cigmbGFzdF91cGRhdGVfdG9rZW4sIGJ1Zik7CisJCQkJaWYgKCFsYXN0X3VwZGF0ZV90b2tlbi5sZW4pIHsKKwkJCQkJd2FybmluZygiRW1wdHkgbGFzdCB1cGRhdGUgdG9rZW4uIik7CisJCQkJCXF1ZXJ5X3N1Y2Nlc3MgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCWJvbCA9IGxhc3RfdXBkYXRlX3Rva2VuLmxlbiArIDE7CisJCQkJfQorCQkJfSBlbHNlIGlmIChob29rX3ZlcnNpb24gPCAwKSB7CisJCQkJaG9va192ZXJzaW9uID0gSE9PS19JTlRFUkZBQ0VfVkVSU0lPTjE7CisJCQkJaWYgKCFsYXN0X3VwZGF0ZV90b2tlbi5sZW4pCisJCQkJCXN0cmJ1Zl9hZGRmKCZsYXN0X3VwZGF0ZV90b2tlbiwgIiUiUFJJdTY0IiIsIGxhc3RfdXBkYXRlKTsKKwkJCX0KKwkJfQorCisJCWlmIChob29rX3ZlcnNpb24gPT0gSE9PS19JTlRFUkZBQ0VfVkVSU0lPTjEpIHsKKwkJCXF1ZXJ5X3N1Y2Nlc3MgPSAhcXVlcnlfZnNtb25pdG9yKEhPT0tfSU5URVJGQUNFX1ZFUlNJT04xLAorCQkJCWlzdGF0ZS0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlLCAmcXVlcnlfcmVzdWx0KTsKKwkJfQorCisJCXRyYWNlX3BlcmZvcm1hbmNlX3NpbmNlKGxhc3RfdXBkYXRlLCAiZnNtb25pdG9yIHByb2Nlc3MgJyVzJyIsIGNvcmVfZnNtb25pdG9yKTsKKwkJdHJhY2VfcHJpbnRmX2tleSgmdHJhY2VfZnNtb25pdG9yLCAiZnNtb25pdG9yIHByb2Nlc3MgJyVzJyByZXR1cm5lZCAlcyIsCisJCQljb3JlX2ZzbW9uaXRvciwgcXVlcnlfc3VjY2VzcyA/ICJzdWNjZXNzIiA6ICJmYWlsdXJlIik7CisJfQorCisJLyogYSBmc21vbml0b3IgcHJvY2VzcyBjYW4gcmV0dXJuICcvJyB0byBpbmRpY2F0ZSBhbGwgZW50cmllcyBhcmUgaW52YWxpZCAqLworCWlmIChxdWVyeV9zdWNjZXNzICYmIHF1ZXJ5X3Jlc3VsdC5idWZbYm9sXSAhPSAnLycpIHsKKwkJLyogTWFyayBhbGwgZW50cmllcyByZXR1cm5lZCBieSB0aGUgbW9uaXRvciBhcyBkaXJ0eSAqLworCQlidWYgPSBxdWVyeV9yZXN1bHQuYnVmOworCQlmb3IgKGkgPSBib2w7IGkgPCBxdWVyeV9yZXN1bHQubGVuOyBpKyspIHsKKwkJCWlmIChidWZbaV0gIT0gJ1wwJykKKwkJCQljb250aW51ZTsKKwkJCWZzbW9uaXRvcl9yZWZyZXNoX2NhbGxiYWNrKGlzdGF0ZSwgYnVmICsgYm9sKTsKKwkJCWJvbCA9IGkgKyAxOworCQl9CisJCWlmIChib2wgPCBxdWVyeV9yZXN1bHQubGVuKQorCQkJZnNtb25pdG9yX3JlZnJlc2hfY2FsbGJhY2soaXN0YXRlLCBidWYgKyBib2wpOworCisJCS8qIE5vdyBtYXJrIHRoZSB1bnRyYWNrZWQgY2FjaGUgZm9yIGZzbW9uaXRvciB1c2FnZSAqLworCQlpZiAoaXN0YXRlLT51bnRyYWNrZWQpCisJCQlpc3RhdGUtPnVudHJhY2tlZC0+dXNlX2ZzbW9uaXRvciA9IDE7CisJfSBlbHNlIHsKKworCQkvKiBXZSBvbmx5IHdhbnQgdG8gcnVuIHRoZSBwb3N0IGluZGV4IGNoYW5nZWQgaG9vayBpZiB3ZSd2ZSBhY3R1YWxseSBjaGFuZ2VkIGVudHJpZXMsIHNvIGtlZXAgdHJhY2sKKwkJICogaWYgd2UgYWN0dWFsbHkgY2hhbmdlZCBlbnRyaWVzIG9yIG5vdCAqLworCQlpbnQgaXNfY2FjaGVfY2hhbmdlZCA9IDA7CisJCS8qIE1hcmsgYWxsIGVudHJpZXMgaW52YWxpZCAqLworCQlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCQlpZiAoaXN0YXRlLT5jYWNoZVtpXS0+Y2VfZmxhZ3MgJiBDRV9GU01PTklUT1JfVkFMSUQpIHsKKwkJCQlpc19jYWNoZV9jaGFuZ2VkID0gMTsKKwkJCQlpc3RhdGUtPmNhY2hlW2ldLT5jZV9mbGFncyAmPSB+Q0VfRlNNT05JVE9SX1ZBTElEOworCQkJfQorCQl9CisKKwkJLyogSWYgd2UncmUgZ29pbmcgdG8gY2hlY2sgZXZlcnkgZmlsZSwgZW5zdXJlIHdlIHNhdmUgdGhlIHJlc3VsdHMgKi8KKwkJaWYgKGlzX2NhY2hlX2NoYW5nZWQpCisJCQlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gRlNNT05JVE9SX0NIQU5HRUQ7CisKKwkJaWYgKGlzdGF0ZS0+dW50cmFja2VkKQorCQkJaXN0YXRlLT51bnRyYWNrZWQtPnVzZV9mc21vbml0b3IgPSAwOworCX0KKwlzdHJidWZfcmVsZWFzZSgmcXVlcnlfcmVzdWx0KTsKKworCS8qIE5vdyB0aGF0IHdlJ3ZlIHVwZGF0ZWQgaXN0YXRlLCBzYXZlIHRoZSBsYXN0X3VwZGF0ZV90b2tlbiAqLworCUZSRUVfQU5EX05VTEwoaXN0YXRlLT5mc21vbml0b3JfbGFzdF91cGRhdGUpOworCWlzdGF0ZS0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlID0gc3RyYnVmX2RldGFjaCgmbGFzdF91cGRhdGVfdG9rZW4sIE5VTEwpOworfQorCit2b2lkIGFkZF9mc21vbml0b3Ioc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHN0cmJ1ZiBsYXN0X3VwZGF0ZSA9IFNUUkJVRl9JTklUOworCisJaWYgKCFpc3RhdGUtPmZzbW9uaXRvcl9sYXN0X3VwZGF0ZSkgeworCQl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9mc21vbml0b3IsICJhZGQgZnNtb25pdG9yIik7CisJCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCB8PSBGU01PTklUT1JfQ0hBTkdFRDsKKwkJc3RyYnVmX2FkZGYoJmxhc3RfdXBkYXRlLCAiJSJQUkl1NjQiIiwgZ2V0bmFub3RpbWUoKSk7CisJCWlzdGF0ZS0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlID0gc3RyYnVmX2RldGFjaCgmbGFzdF91cGRhdGUsIE5VTEwpOworCisJCS8qIHJlc2V0IHRoZSBmc21vbml0b3Igc3RhdGUgKi8KKwkJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykKKwkJCWlzdGF0ZS0+Y2FjaGVbaV0tPmNlX2ZsYWdzICY9IH5DRV9GU01PTklUT1JfVkFMSUQ7CisKKwkJLyogcmVzZXQgdGhlIHVudHJhY2tlZCBjYWNoZSAqLworCQlpZiAoaXN0YXRlLT51bnRyYWNrZWQpIHsKKwkJCWFkZF91bnRyYWNrZWRfY2FjaGUoaXN0YXRlKTsKKwkJCWlzdGF0ZS0+dW50cmFja2VkLT51c2VfZnNtb25pdG9yID0gMTsKKwkJfQorCisJCS8qIFVwZGF0ZSB0aGUgZnNtb25pdG9yIHN0YXRlICovCisJCXJlZnJlc2hfZnNtb25pdG9yKGlzdGF0ZSk7CisJfQorfQorCit2b2lkIHJlbW92ZV9mc21vbml0b3Ioc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaWYgKGlzdGF0ZS0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlKSB7CisJCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX2ZzbW9uaXRvciwgInJlbW92ZSBmc21vbml0b3IiKTsKKwkJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IEZTTU9OSVRPUl9DSEFOR0VEOworCQlGUkVFX0FORF9OVUxMKGlzdGF0ZS0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlKTsKKwl9Cit9CisKK3ZvaWQgdHdlYWtfZnNtb25pdG9yKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXVuc2lnbmVkIGludCBpOworCWludCBmc21vbml0b3JfZW5hYmxlZCA9IGdpdF9jb25maWdfZ2V0X2ZzbW9uaXRvcigpOworCisJaWYgKGlzdGF0ZS0+ZnNtb25pdG9yX2RpcnR5KSB7CisJCWlmIChmc21vbml0b3JfZW5hYmxlZCkgeworCQkJLyogTWFyayBhbGwgZW50cmllcyB2YWxpZCAqLworCQkJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQkJCWlzdGF0ZS0+Y2FjaGVbaV0tPmNlX2ZsYWdzIHw9IENFX0ZTTU9OSVRPUl9WQUxJRDsKKwkJCX0KKworCQkJLyogTWFyayBhbGwgcHJldmlvdXNseSBzYXZlZCBlbnRyaWVzIGFzIGRpcnR5ICovCisJCQlpZiAoaXN0YXRlLT5mc21vbml0b3JfZGlydHktPmJpdF9zaXplID4gaXN0YXRlLT5jYWNoZV9ucikKKwkJCQlCVUcoImZzbW9uaXRvcl9kaXJ0eSBoYXMgbW9yZSBlbnRyaWVzIHRoYW4gdGhlIGluZGV4ICglIlBSSXVNQVgiID4gJXUpIiwKKwkJCQkgICAgKHVpbnRtYXhfdClpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUsIGlzdGF0ZS0+Y2FjaGVfbnIpOworCQkJZXdhaF9lYWNoX2JpdChpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eSwgZnNtb25pdG9yX2V3YWhfY2FsbGJhY2ssIGlzdGF0ZSk7CisKKwkJCXJlZnJlc2hfZnNtb25pdG9yKGlzdGF0ZSk7CisJCX0KKworCQlld2FoX2ZyZWUoaXN0YXRlLT5mc21vbml0b3JfZGlydHkpOworCQlpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eSA9IE5VTEw7CisJfQorCisJc3dpdGNoIChmc21vbml0b3JfZW5hYmxlZCkgeworCWNhc2UgLTE6IC8qIGtlZXA6IGRvIG5vdGhpbmcgKi8KKwkJYnJlYWs7CisJY2FzZSAwOiAvKiBmYWxzZSAqLworCQlyZW1vdmVfZnNtb25pdG9yKGlzdGF0ZSk7CisJCWJyZWFrOworCWNhc2UgMTogLyogdHJ1ZSAqLworCQlhZGRfZnNtb25pdG9yKGlzdGF0ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIHVua25vd24gdmFsdWU6IGRvIG5vdGhpbmcgKi8KKwkJYnJlYWs7CisJfQorfQpkaWZmIC0tZ2l0IGEvZnNtb25pdG9yLmggYi9mc21vbml0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzkzMThhCi0tLSAvZGV2L251bGwKKysrIGIvZnNtb25pdG9yLmgKQEAgLTAsMCArMSw3NyBAQAorI2lmbmRlZiBGU01PTklUT1JfSAorI2RlZmluZSBGU01PTklUT1JfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKworZXh0ZXJuIHN0cnVjdCB0cmFjZV9rZXkgdHJhY2VfZnNtb25pdG9yOworCisvKgorICogUmVhZCB0aGUgZnNtb25pdG9yIGluZGV4IGV4dGVuc2lvbiBhbmQgKGlmIGNvbmZpZ3VyZWQpIHJlc3RvcmUgdGhlCisgKiBDRV9GU01PTklUT1JfVkFMSUQgc3RhdGUuCisgKi8KK2ludCByZWFkX2ZzbW9uaXRvcl9leHRlbnNpb24oc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc3opOworCisvKgorICogRmlsbCB0aGUgZnNtb25pdG9yX2RpcnR5IGV3YWggYml0cyB3aXRoIHRoZWlyIHN0YXRlIGZyb20gdGhlIGluZGV4LAorICogYmVmb3JlIGl0IGlzIHNwbGl0IGR1cmluZyB3cml0aW5nLgorICovCit2b2lkIGZpbGxfZnNtb25pdG9yX2JpdG1hcChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CisKKy8qCisgKiBXcml0ZSB0aGUgQ0VfRlNNT05JVE9SX1ZBTElEIHN0YXRlIGludG8gdGhlIGZzbW9uaXRvciBpbmRleAorICogZXh0ZW5zaW9uLiAgUmVhZHMgZnJvbSB0aGUgZnNtb25pdG9yX2RpcnR5IGV3YWggaW4gdGhlIGluZGV4LgorICovCit2b2lkIHdyaXRlX2ZzbW9uaXRvcl9leHRlbnNpb24oc3RydWN0IHN0cmJ1ZiAqc2IsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKKworLyoKKyAqIEFkZC9yZW1vdmUgdGhlIGZzbW9uaXRvciBpbmRleCBleHRlbnNpb24KKyAqLwordm9pZCBhZGRfZnNtb25pdG9yKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKK3ZvaWQgcmVtb3ZlX2ZzbW9uaXRvcihzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CisKKy8qCisgKiBBZGQvcmVtb3ZlIHRoZSBmc21vbml0b3IgaW5kZXggZXh0ZW5zaW9uIGFzIG5lY2Vzc2FyeSBiYXNlZCBvbiB0aGUgY3VycmVudAorICogY29yZS5mc21vbml0b3Igc2V0dGluZy4KKyAqLwordm9pZCB0d2Vha19mc21vbml0b3Ioc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOworCisvKgorICogUnVuIHRoZSBjb25maWd1cmVkIGZzbW9uaXRvciBpbnRlZ3JhdGlvbiBzY3JpcHQgYW5kIGNsZWFyIHRoZQorICogQ0VfRlNNT05JVE9SX1ZBTElEIGJpdCBmb3IgYW55IGZpbGVzIHJldHVybmVkIGFzIGRpcnR5LiAgQWxzbyBpbnZhbGlkYXRlCisgKiBhbnkgY29ycmVzcG9uZGluZyB1bnRyYWNrZWQgY2FjaGUgZGlyZWN0b3J5IHN0cnVjdHVyZXMuIE9wdGltaXplZCB0byBvbmx5CisgKiBydW4gdGhlIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkLgorICovCit2b2lkIHJlZnJlc2hfZnNtb25pdG9yKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKKworLyoKKyAqIFNldCB0aGUgZ2l2ZW4gY2FjaGUgZW50cmllcyBDRV9GU01PTklUT1JfVkFMSUQgYml0LiBUaGlzIHNob3VsZCBiZQorICogY2FsbGVkIGFueSB0aW1lIHRoZSBjYWNoZSBlbnRyeSBoYXMgYmVlbiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlCisgKiBjdXJyZW50IHN0YXRlIG9mIHRoZSBmaWxlIG9uIGRpc2suCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2ZzbW9uaXRvcl92YWxpZChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpZiAoY29yZV9mc21vbml0b3IgJiYgIShjZS0+Y2VfZmxhZ3MgJiBDRV9GU01PTklUT1JfVkFMSUQpKSB7CisJCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCA9IDE7CisJCWNlLT5jZV9mbGFncyB8PSBDRV9GU01PTklUT1JfVkFMSUQ7CisJCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX2ZzbW9uaXRvciwgIm1hcmtfZnNtb25pdG9yX2NsZWFuICclcyciLCBjZS0+bmFtZSk7CisJfQorfQorCisvKgorICogQ2xlYXIgdGhlIGdpdmVuIGNhY2hlIGVudHJ5J3MgQ0VfRlNNT05JVE9SX1ZBTElEIGJpdCBhbmQgaW52YWxpZGF0ZQorICogYW55IGNvcnJlc3BvbmRpbmcgdW50cmFja2VkIGNhY2hlIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzLiBUaGlzIHNob3VsZAorICogYmUgY2FsbGVkIGFueSB0aW1lIGdpdCBjcmVhdGVzIG9yIG1vZGlmaWVzIGEgZmlsZSB0aGF0IHNob3VsZAorICogdHJpZ2dlciBhbiBsc3RhdCgpIG9yIGludmFsaWRhdGUgdGhlIHVudHJhY2tlZCBjYWNoZSBmb3IgdGhlCisgKiBjb3JyZXNwb25kaW5nIGRpcmVjdG9yeQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya19mc21vbml0b3JfaW52YWxpZChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpZiAoY29yZV9mc21vbml0b3IpIHsKKwkJY2UtPmNlX2ZsYWdzICY9IH5DRV9GU01PTklUT1JfVkFMSUQ7CisJCXVudHJhY2tlZF9jYWNoZV9pbnZhbGlkYXRlX3BhdGgoaXN0YXRlLCBjZS0+bmFtZSwgMSk7CisJCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX2ZzbW9uaXRvciwgIm1hcmtfZnNtb25pdG9yX2ludmFsaWQgJyVzJyIsIGNlLT5uYW1lKTsKKwl9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnV6ei1jb21taXQtZ3JhcGguYyBiL2Z1enotY29tbWl0LWdyYXBoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkMWMwNAotLS0gL2Rldi9udWxsCisrKyBiL2Z1enotY29tbWl0LWdyYXBoLmMKQEAgLTAsMCArMSwxOCBAQAorI2luY2x1ZGUgImNvbW1pdC1ncmFwaC5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKworc3RydWN0IGNvbW1pdF9ncmFwaCAqcGFyc2VfY29tbWl0X2dyYXBoKHZvaWQgKmdyYXBoX21hcCwgc2l6ZV90IGdyYXBoX3NpemUpOworCitpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisKK2ludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBjb21taXRfZ3JhcGggKmc7CisKKwlpbml0aWFsaXplX3RoZV9yZXBvc2l0b3J5KCk7CisJZyA9IHBhcnNlX2NvbW1pdF9ncmFwaCgodm9pZCAqKWRhdGEsIHNpemUpOworCXJlcG9fY2xlYXIodGhlX3JlcG9zaXRvcnkpOworCWZyZWUoZyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2Z1enotcGFjay1oZWFkZXJzLmMgYi9mdXp6LXBhY2staGVhZGVycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZGExZDAKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6LXBhY2staGVhZGVycy5jCkBAIC0wLDAgKzEsMTQgQEAKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorCitpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisKK2ludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKworCXVucGFja19vYmplY3RfaGVhZGVyX2J1ZmZlcigoY29uc3QgdW5zaWduZWQgY2hhciAqKWRhdGEsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKXNpemUsICZ0eXBlLCAmbGVuKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZnV6ei1wYWNrLWlkeC5jIGIvZnV6ei1wYWNrLWlkeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjM2Q3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6LXBhY2staWR4LmMKQEAgLTAsMCArMSwxMyBAQAorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisKK2ludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKTsKKworaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHBhY2tlZF9naXQgcDsKKworCWxvYWRfaWR4KCJmdXp6LWlucHV0IiwgR0lUX1NIQTFfUkFXU1osICh2b2lkICopZGF0YSwgc2l6ZSwgJnApOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9nZW5lcmF0ZS1jbWRsaXN0LnNoIGIvZ2VuZXJhdGUtY21kbGlzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NWZlY2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2VuZXJhdGUtY21kbGlzdC5zaApAQCAtMCwwICsxLDk4IEBACisjIS9iaW4vc2gKKworZGllICgpIHsKKwllY2hvICIkQCIgPiYyCisJZXhpdCAxCit9CisKK2NvbW1hbmRfbGlzdCAoKSB7CisJZXZhbCAiZ3JlcCAtdmUgJ14jJyAkZXhjbHVkZV9wcm9ncmFtcyIgPCIkMSIKK30KKworZ2V0X2NhdGVnb3JpZXMgKCkgeworCXRyICcgJyAnXG4nfAorCWdyZXAgLXYgJ14kJyB8CisJc29ydCB8CisJdW5pcQorfQorCitjYXRlZ29yeV9saXN0ICgpIHsKKwljb21tYW5kX2xpc3QgIiQxIiB8CisJY3V0IC1jIDQwLSB8CisJZ2V0X2NhdGVnb3JpZXMKK30KKworZ2V0X3N5bm9wc2lzICgpIHsKKwlzZWQgLW4gJworCQkvXk5BTUUvLC8nIiQxIicvSAorCQkkeworCQkJeAorCQkJcy8uKiciJDEiJyAtIFwoLipcKS9OXygiXDEiKS8KKwkJCXAKKwkJfScgIkRvY3VtZW50YXRpb24vJDEudHh0IgorfQorCitkZWZpbmVfY2F0ZWdvcmllcyAoKSB7CisJZWNobworCWVjaG8gIi8qIENvbW1hbmQgY2F0ZWdvcmllcyAqLyIKKwliaXQ9MAorCWNhdGVnb3J5X2xpc3QgIiQxIiB8CisJd2hpbGUgcmVhZCBjYXQKKwlkbworCQllY2hvICIjZGVmaW5lIENBVF8kY2F0ICgxVUwgPDwgJGJpdCkiCisJCWJpdD0kKCgkYml0KzEpKQorCWRvbmUKKwl0ZXN0ICIkYml0IiAtZ3QgMzIgJiYgZGllICJVcmdoLi4gdG9vIG1hbnkgY2F0ZWdvcmllcz8iCit9CisKK2RlZmluZV9jYXRlZ29yeV9uYW1lcyAoKSB7CisJZWNobworCWVjaG8gIi8qIENhdGVnb3J5IG5hbWVzICovIgorCWVjaG8gInN0YXRpYyBjb25zdCBjaGFyICpjYXRlZ29yeV9uYW1lc1tdID0geyIKKwliaXQ9MAorCWNhdGVnb3J5X2xpc3QgIiQxIiB8CisJd2hpbGUgcmVhZCBjYXQKKwlkbworCQllY2hvICIJXCIkY2F0XCIsIC8qICgxVUwgPDwgJGJpdCkgKi8iCisJCWJpdD0kKCgkYml0KzEpKQorCWRvbmUKKwllY2hvICIJTlVMTCIKKwllY2hvICJ9OyIKK30KKworcHJpbnRfY29tbWFuZF9saXN0ICgpIHsKKwllY2hvICJzdGF0aWMgc3RydWN0IGNtZG5hbWVfaGVscCBjb21tYW5kX2xpc3RbXSA9IHsiCisKKwljb21tYW5kX2xpc3QgIiQxIiB8CisJd2hpbGUgcmVhZCBjbWQgcmVzdAorCWRvCisJCXByaW50ZiAiCXsgXCIkY21kXCIsICQoZ2V0X3N5bm9wc2lzICRjbWQpLCAwIgorCQlmb3IgY2F0IGluICQoZWNobyAiJHJlc3QiIHwgZ2V0X2NhdGVnb3JpZXMpCisJCWRvCisJCQlwcmludGYgIiB8IENBVF8kY2F0IgorCQlkb25lCisJCWVjaG8gIiB9LCIKKwlkb25lCisJZWNobyAifTsiCit9CisKK2V4Y2x1ZGVfcHJvZ3JhbXM9Cit3aGlsZSB0ZXN0ICItLWV4Y2x1ZGUtcHJvZ3JhbSIgPSAiJDEiCitkbworCXNoaWZ0CisJZXhjbHVkZV9wcm9ncmFtcz0iJGV4Y2x1ZGVfcHJvZ3JhbXMgLWUgXCJeJDEgXCIiCisJc2hpZnQKK2RvbmUKKworZWNobyAiLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtY21kbGlzdC5zaCAqLworc3RydWN0IGNtZG5hbWVfaGVscCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpoZWxwOworCXVpbnQzMl90IGNhdGVnb3J5OworfTsKKyIKK2RlZmluZV9jYXRlZ29yaWVzICIkMSIKK2VjaG8KK2RlZmluZV9jYXRlZ29yeV9uYW1lcyAiJDEiCitlY2hvCitwcmludF9jb21tYW5kX2xpc3QgIiQxIgpkaWZmIC0tZ2l0IGEvZ2VuZXJhdGUtY29uZmlnbGlzdC5zaCBiL2dlbmVyYXRlLWNvbmZpZ2xpc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODY5MmZlNQotLS0gL2Rldi9udWxsCisrKyBiL2dlbmVyYXRlLWNvbmZpZ2xpc3Quc2gKQEAgLTAsMCArMSwyMSBAQAorIyEvYmluL3NoCisKK2VjaG8gIi8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWNvbmZpZ2xpc3Quc2ggKi8iCitlY2hvCisKK3ByaW50X2NvbmZpZ19saXN0ICgpIHsKKwljYXQgPDxFT0YKK3N0YXRpYyBjb25zdCBjaGFyICpjb25maWdfbmFtZV9saXN0W10gPSB7CitFT0YKKwlncmVwIC1oICdeW2EtekEtWl0uKlwuLio6OiQnIERvY3VtZW50YXRpb24vKmNvbmZpZy50eHQgRG9jdW1lbnRhdGlvbi9jb25maWcvKi50eHQgfAorCXNlZCAnL2RlcHJlY2F0ZWQvZDsgcy86OiQvLzsgcy8sICAqL1xuL2cnIHwKKwlzb3J0IHwKKwlzZWQgJ3MvXi4qJC8JIiYiLC8nCisJY2F0IDw8RU9GCisJTlVMTCwKK307CitFT0YKK30KKworZWNobworcHJpbnRfY29uZmlnX2xpc3QKZGlmZiAtLWdpdCBhL2dldHRleHQuYyBiL2dldHRleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWQyYzEyCi0tLSAvZGV2L251bGwKKysrIGIvZ2V0dGV4dC5jCkBAIC0wLDAgKzEsMjI4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJnZXR0ZXh0LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWZuZGVmIE5PX0dFVFRFWFQKKyMJaW5jbHVkZSA8bG9jYWxlLmg+CisjCWluY2x1ZGUgPGxpYmludGwuaD4KKyMJaWZkZWYgR0lUX1dJTkRPV1NfTkFUSVZFCisKK3N0YXRpYyBjb25zdCBjaGFyICpsb2NhbGVfY2hhcnNldCh2b2lkKQoreworCWNvbnN0IGNoYXIgKmVudiA9IGdldGVudigiTENfQUxMIiksICpkb3Q7CisKKwlpZiAoIWVudiB8fCAhKmVudikKKwkJZW52ID0gZ2V0ZW52KCJMQ19DVFlQRSIpOworCWlmICghZW52IHx8ICEqZW52KQorCQllbnYgPSBnZXRlbnYoIkxBTkciKTsKKworCWlmICghZW52KQorCQlyZXR1cm4gIlVURi04IjsKKworCWRvdCA9IHN0cmNocihlbnYsICcuJyk7CisJcmV0dXJuICFkb3QgPyBlbnYgOiBkb3QgKyAxOworfQorCisjCWVsaWYgZGVmaW5lZCBIQVZFX0xJQkNIQVJTRVRfSAorIwkJaW5jbHVkZSA8bGliY2hhcnNldC5oPgorIwllbHNlCisjCQlpbmNsdWRlIDxsYW5naW5mby5oPgorIwkJZGVmaW5lIGxvY2FsZV9jaGFyc2V0KCkgbmxfbGFuZ2luZm8oQ09ERVNFVCkKKyMJZW5kaWYKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqY2hhcnNldDsKKworLyoKKyAqIEd1ZXNzIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1YWdlcyBmcm9tIHRoZSB2YWx1ZSBpbiBMQU5HVUFHRSBlbnZpcm9ubWVudAorICogdmFyaWFibGUgYW5kIExDX01FU1NBR0VTIGxvY2FsZSBjYXRlZ29yeSBpZiBOT19HRVRURVhUIGlzIG5vdCBkZWZpbmVkLgorICoKKyAqIFRoZSByZXN1bHQgY2FuIGJlIGEgY29sb24tc2VwYXJhdGVkIGxpc3QgbGlrZSAia286amE6ZW4iLgorICovCitjb25zdCBjaGFyICpnZXRfcHJlZmVycmVkX2xhbmd1YWdlcyh2b2lkKQoreworCWNvbnN0IGNoYXIgKnJldHZhbDsKKworCXJldHZhbCA9IGdldGVudigiTEFOR1VBR0UiKTsKKwlpZiAocmV0dmFsICYmICpyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKyNpZm5kZWYgTk9fR0VUVEVYVAorCXJldHZhbCA9IHNldGxvY2FsZShMQ19NRVNTQUdFUywgTlVMTCk7CisJaWYgKHJldHZhbCAmJiAqcmV0dmFsICYmCisJCXN0cmNtcChyZXR2YWwsICJDIikgJiYKKwkJc3RyY21wKHJldHZhbCwgIlBPU0lYIikpCisJCXJldHVybiByZXR2YWw7CisjZW5kaWYKKworCXJldHVybiBOVUxMOworfQorCitpbnQgdXNlX2dldHRleHRfcG9pc29uKHZvaWQpCit7CisJc3RhdGljIGludCBwb2lzb25fcmVxdWVzdGVkID0gLTE7CisJaWYgKHBvaXNvbl9yZXF1ZXN0ZWQgPT0gLTEpCisJCXBvaXNvbl9yZXF1ZXN0ZWQgPSBnaXRfZW52X2Jvb2woIkdJVF9URVNUX0dFVFRFWFRfUE9JU09OIiwgMCk7CisJcmV0dXJuIHBvaXNvbl9yZXF1ZXN0ZWQ7Cit9CisKKyNpZm5kZWYgTk9fR0VUVEVYVAorc3RhdGljIGludCB0ZXN0X3ZzbnByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwljaGFyIGJ1ZlsyNl07CisJaW50IHJldDsKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfZ2V0dGV4dF9jaGFyc2V0KGNvbnN0IGNoYXIgKmRvbWFpbikKK3sKKwkvKgorCSAgIFRoaXMgdHJpY2sgYXJyYW5nZXMgZm9yIG1lc3NhZ2VzIHRvIGJlIGVtaXR0ZWQgaW4gdGhlIHVzZXIncworCSAgIHJlcXVlc3RlZCBlbmNvZGluZywgYnV0IGF2b2lkcyBzZXR0aW5nIExDX0NUWVBFIGZyb20gdGhlCisJICAgZW52aXJvbm1lbnQgZm9yIHRoZSB3aG9sZSBwcm9ncmFtLgorCisJICAgVGhpcyBwcmltYXJpbHkgZG9uZSB0byBhdm9pZCBhIGJ1ZyBpbiB2c25wcmludGYgaW4gdGhlIEdOVSBDCisJICAgTGlicmFyeSBbMV0uIHdoaWNoIHRyaWdnZXJlZCBhICJ5b3VyIHZzbnByaW50ZiBpcyBicm9rZW4iIGVycm9yCisJICAgb24gR2l0J3Mgb3duIHJlcG9zaXRvcnkgd2hlbiBpbnNwZWN0aW5nIHYwLjk5LjZ+MSB1bmRlciBhIFVURi04CisJICAgbG9jYWxlLgorCisJICAgVGhhdCBjb21taXQgY29udGFpbnMgYSBJU08tODg1OS0xIGVuY29kZWQgYXV0aG9yIG5hbWUsIHdoaWNoCisJICAgdGhlIGxvY2FsZSBhd2FyZSB2c25wcmludGYoMykgd29uJ3QgaW50ZXJwb2xhdGUgaW4gdGhlIGZvcm1hdAorCSAgIGFyZ3VtZW50LCBkdWUgdG8gbWlzbWF0Y2ggYmV0d2VlbiB0aGUgZGF0YSBlbmNvZGluZyBhbmQgdGhlCisJICAgbG9jYWxlLgorCisJICAgRXZlbiBpZiBpdCB3YXNuJ3QgZm9yIHRoYXQgYnVnIHdlIHdvdWxkbid0IHdhbnQgdG8gdXNlIExDX0NUWVBFIGF0CisJICAgdGhpcyBwb2ludCwgYmVjYXVzZSBpdCdkIHJlcXVpcmUgYXVkaXRpbmcgYWxsIHRoZSBjb2RlIHRoYXQgdXNlcyBDCisJICAgZnVuY3Rpb25zIHdob3NlIHNlbWFudGljcyBhcmUgbW9kaWZpZWQgYnkgTENfQ1RZUEUuCisKKwkgICBCdXQgb25seSBzZXR0aW5nIExDX01FU1NBR0VTIGFzIHdlIGRvIGNyZWF0ZXMgYSBwcm9ibGVtLCBzaW5jZQorCSAgIHdlIGRlY2xhcmUgdGhlIGVuY29kaW5nIG9mIG91ciBQTyBmaWxlc1syXSB0aGUgZ2V0dGV4dAorCSAgIGltcGxlbWVudGF0aW9uIHdpbGwgdHJ5IHRvIHJlY29kZSBpdCB0byB0aGUgdXNlcidzIGxvY2FsZSwgYnV0CisJICAgd2l0aG91dCBMQ19DVFlQRSBpdCdsbCBlbWl0IHNvbWV0aGluZyBsaWtlIHRoaXMgb24gJ2dpdCBpbml0JworCSAgIHVuZGVyIHRoZSBJY2VsYW5kaWMgbG9jYWxlOgorCisJICAgICAgIEJqPyB0aWwgdD9tYSBHaXQgbGluZCA/IC9obGFnaC8uZ2l0LworCisJICAgR2V0dGV4dCBrbm93cyBhYm91dCB0aGUgZW5jb2Rpbmcgb2Ygb3VyIFBPIGZpbGUsIGJ1dCB3ZSBoYXZlbid0CisJICAgdG9sZCBpdCBhYm91dCB0aGUgdXNlcidzIGVuY29kaW5nLCBzbyBhbGwgdGhlIG5vbi1VUy1BU0NJSQorCSAgIGNoYXJhY3RlcnMgZ2V0IGVuY29kZWQgdG8gcXVlc3Rpb24gbWFya3MuCisKKwkgICBCdXQgd2UncmUgaW4gbHVjayEgV2UgY2FuIHNldCBMQ19DVFlQRSBmcm9tIHRoZSBlbnZpcm9ubWVudAorCSAgIG9ubHkgd2hpbGUgd2UgY2FsbCBubF9sYW5naW5mbyBhbmQKKwkgICBiaW5kX3RleHRkb21haW5fY29kZXNldC4gVGhhdCBzdWZmaWNlcyB0byB0ZWxsIGdldHRleHQgd2hhdAorCSAgIGVuY29kaW5nIGl0IHNob3VsZCBlbWl0IGluLCBzbyBpdCdsbCBub3cgc2F5OgorCisJICAgICAgIEJqw7MgdGlsIHTDs21hIEdpdCBsaW5kIMOtIC9obGFnaC8uZ2l0LworCisJICAgQW5kIHRoZSBlcXVpdmFsZW50IElTTy04ODU5LTEgc3RyaW5nIHdpbGwgYmUgZW1pdHRlZCB1bmRlciBhCisJICAgSVNPLTg4NTktMSBsb2NhbGUuCisKKwkgICBXaXRoIHRoaXMgY2hhbmdlIHdheSB3ZSBnZXQgdGhlIGFkdmFudGFnZXMgb2Ygc2V0dGluZyBMQ19DVFlQRQorCSAgICh0YWxrIHRvIHRoZSB1c2VyIGluIGhpcyBsYW5ndWFnZS9lbmNvZGluZyksIHdpdGhvdXQgdGhlIG1ham9yCisJICAgZHJhd2JhY2tzIChjaGFuZ2VkIHNlbWFudGljcyBmb3IgQyBmdW5jdGlvbnMgd2UgcmVseSBvbikuCisKKwkgICBIb3dldmVyIGZvcmVpZ24gZnVuY3Rpb25zIHVzaW5nIG90aGVyIG1lc3NhZ2UgY2F0YWxvZ3MgdGhhdAorCSAgIGFyZW4ndCB1c2luZyBvdXIgbmVhdCB0cmljayB3aWxsIHN0aWxsIGhhdmUgYSBwcm9ibGVtLCBlLmcuIGlmCisJICAgd2UgaGF2ZSB0byBjYWxsIHBlcnJvcigzKToKKworCSAgICNpbmNsdWRlIDxzdGRpby5oPgorCSAgICNpbmNsdWRlIDxsb2NhbGUuaD4KKwkgICAjaW5jbHVkZSA8ZXJybm8uaD4KKworCSAgIGludCBtYWluKHZvaWQpCisJICAgeworCQkgICBzZXRsb2NhbGUoTENfTUVTU0FHRVMsICIiKTsKKwkJICAgc2V0bG9jYWxlKExDX0NUWVBFLCAiQyIpOworCQkgICBlcnJubyA9IEVOT0RFVjsKKwkJICAgcGVycm9yKCJ0ZXN0Iik7CisJCSAgIHJldHVybiAwOworCSAgIH0KKworCSAgIFJ1bm5pbmcgdGhhdCB3aWxsIGdpdmUgeW91IGEgbWVzc2FnZSB3aXRoIHF1ZXN0aW9uIG1hcmtzOgorCisJICAgJCBMQU5HVUFHRT0gTEFORz1kZV9ERS51dGY4IC4vdGVzdAorCSAgIHRlc3Q6IEtlaW4gcGFzc2VuZGVzIEdlcj90IGdlZnVuZGVuCisKKwkgICBUaGUgdnNucHJpbnRmIGJ1ZyBoYXMgYmVlbiBmaXhlZCBzaW5jZSBnbGliYyAyLjE3LgorCisJICAgVGhlbiB3ZSBjb3VsZCBzaW1wbHkgc2V0IExDX0NUWVBFIGZyb20gdGhlIGVudmlyb25tZW50LCB3aGljaCB3b3VsZAorCSAgIG1ha2UgdGhpbmdzIGxpa2UgdGhlIGV4dGVybmFsIHBlcnJvcigzKSBtZXNzYWdlcyB3b3JrLgorCisJICAgU2VlIHQvdDAyMDMtZ2V0dGV4dC1zZXRsb2NhbGUtc2FuaXR5LnNoJ3MgImdldHRleHQuYyIgdGVzdHMgZm9yCisJICAgcmVncmVzc2lvbiB0ZXN0cy4KKworCSAgIDEuIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjUzMAorCSAgIDIuIEUuZy4gIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIiBpbiBwby9pcy5wbworCSovCisJc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7CisJY2hhcnNldCA9IGxvY2FsZV9jaGFyc2V0KCk7CisJYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoZG9tYWluLCBjaGFyc2V0KTsKKwkvKiB0aGUgc3RyaW5nIGlzIHRha2VuIGZyb20gdjAuOTkuNn4xICovCisJaWYgKHRlc3RfdnNucHJpbnRmKCIlLipzIiwgMTMsICJEYXZpZF9LXDM0NWdlZGFsIikgPCAwKQorCQlzZXRsb2NhbGUoTENfQ1RZUEUsICJDIik7Cit9CisKK3ZvaWQgZ2l0X3NldHVwX2dldHRleHQodm9pZCkKK3sKKwljb25zdCBjaGFyICpwb2RpciA9IGdldGVudihHSVRfVEVYVF9ET01BSU5fRElSX0VOVklST05NRU5UKTsKKwljaGFyICpwID0gTlVMTDsKKworCWlmICghcG9kaXIpCisJCXBvZGlyID0gcCA9IHN5c3RlbV9wYXRoKEdJVF9MT0NBTEVfUEFUSCk7CisKKwl1c2VfZ2V0dGV4dF9wb2lzb24oKTsgLyogZ2V0ZW52KCkgcmVlbnRyYW5jeSBwYXJhbm9pYSAqLworCisJaWYgKCFpc19kaXJlY3RvcnkocG9kaXIpKSB7CisJCWZyZWUocCk7CisJCXJldHVybjsKKwl9CisKKwliaW5kdGV4dGRvbWFpbigiZ2l0IiwgcG9kaXIpOworCXNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpOworCXNldGxvY2FsZShMQ19USU1FLCAiIik7CisJaW5pdF9nZXR0ZXh0X2NoYXJzZXQoImdpdCIpOworCXRleHRkb21haW4oImdpdCIpOworCisJZnJlZShwKTsKK30KKworLyogcmV0dXJuIHRoZSBudW1iZXIgb2YgY29sdW1ucyBvZiBzdHJpbmcgJ3MnIGluIGN1cnJlbnQgbG9jYWxlICovCitpbnQgZ2V0dGV4dF93aWR0aChjb25zdCBjaGFyICpzKQoreworCXN0YXRpYyBpbnQgaXNfdXRmOCA9IC0xOworCWlmIChpc191dGY4ID09IC0xKQorCQlpc191dGY4ID0gaXNfdXRmOF9sb2NhbGUoKTsKKworCXJldHVybiBpc191dGY4ID8gdXRmOF9zdHJ3aWR0aChzKSA6IHN0cmxlbihzKTsKK30KKyNlbmRpZgorCitpbnQgaXNfdXRmOF9sb2NhbGUodm9pZCkKK3sKKyNpZmRlZiBOT19HRVRURVhUCisJaWYgKCFjaGFyc2V0KSB7CisJCWNvbnN0IGNoYXIgKmVudiA9IGdldGVudigiTENfQUxMIik7CisJCWlmICghZW52IHx8ICEqZW52KQorCQkJZW52ID0gZ2V0ZW52KCJMQ19DVFlQRSIpOworCQlpZiAoIWVudiB8fCAhKmVudikKKwkJCWVudiA9IGdldGVudigiTEFORyIpOworCQlpZiAoIWVudikKKwkJCWVudiA9ICIiOworCQlpZiAoc3RyY2hyKGVudiwgJy4nKSkKKwkJCWVudiA9IHN0cmNocihlbnYsICcuJykgKyAxOworCQljaGFyc2V0ID0geHN0cmR1cChlbnYpOworCX0KKyNlbmRpZgorCXJldHVybiBpc19lbmNvZGluZ191dGY4KGNoYXJzZXQpOworfQpkaWZmIC0tZ2l0IGEvZ2V0dGV4dC5oIGIvZ2V0dGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZTUyZWIKLS0tIC9kZXYvbnVsbAorKysgYi9nZXR0ZXh0LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uCisgKgorICogVGhpcyBpcyBhIHNrZWxldG9uIG5vLW9wIGltcGxlbWVudGF0aW9uIG9mIGdldHRleHQgZm9yIEdpdC4KKyAqIFlvdSBjYW4gcmVwbGFjZSBpdCB3aXRoIHNvbWV0aGluZyB0aGF0IHVzZXMgbGliaW50bC5oIGFuZCB3cmFwcworICogZ2V0dGV4dCgpIHRvIHRyeSBvdXQgdGhlIHRyYW5zbGF0aW9ucy4KKyAqLworCisjaWZuZGVmIEdFVFRFWFRfSAorI2RlZmluZSBHRVRURVhUX0gKKworI2lmIGRlZmluZWQoXykgfHwgZGVmaW5lZChRXykKKyNlcnJvciAibmFtZXNwYWNlIGNvbmZsaWN0OiAnXycgb3IgJ1FfJyBpcyBwcmUtZGVmaW5lZD8iCisjZW5kaWYKKworI2lmbmRlZiBOT19HRVRURVhUCisjCWluY2x1ZGUgPGxpYmludGwuaD4KKyNlbHNlCisjCWlmZGVmIGdldHRleHQKKyMJCXVuZGVmIGdldHRleHQKKyMJZW5kaWYKKyMJZGVmaW5lIGdldHRleHQocykgKHMpCisjCWlmZGVmIG5nZXR0ZXh0CisjCQl1bmRlZiBuZ2V0dGV4dAorIwllbmRpZgorIwlkZWZpbmUgbmdldHRleHQocywgcCwgbikgKChuID09IDEpID8gKHMpIDogKHApKQorI2VuZGlmCisKKyNkZWZpbmUgRk9STUFUX1BSRVNFUlZJTkcobikgX19hdHRyaWJ1dGVfXygoZm9ybWF0X2FyZyhuKSkpCisKK2ludCB1c2VfZ2V0dGV4dF9wb2lzb24odm9pZCk7CisKKyNpZm5kZWYgTk9fR0VUVEVYVAordm9pZCBnaXRfc2V0dXBfZ2V0dGV4dCh2b2lkKTsKK2ludCBnZXR0ZXh0X3dpZHRoKGNvbnN0IGNoYXIgKnMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBnaXRfc2V0dXBfZ2V0dGV4dCh2b2lkKQoreworCXVzZV9nZXR0ZXh0X3BvaXNvbigpOyAvKiBnZXRlbnYoKSByZWVudHJhbmN5IHBhcmFub2lhICovCit9CitzdGF0aWMgaW5saW5lIGludCBnZXR0ZXh0X3dpZHRoKGNvbnN0IGNoYXIgKnMpCit7CisJcmV0dXJuIHN0cmxlbihzKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIEZPUk1BVF9QUkVTRVJWSU5HKDEpIGNvbnN0IGNoYXIgKl8oY29uc3QgY2hhciAqbXNnaWQpCit7CisJaWYgKCEqbXNnaWQpCisJCXJldHVybiAiIjsKKwlyZXR1cm4gdXNlX2dldHRleHRfcG9pc29uKCkgPyAiIyBHRVRURVhUIFBPSVNPTiAjIiA6IGdldHRleHQobXNnaWQpOworfQorCitzdGF0aWMgaW5saW5lIEZPUk1BVF9QUkVTRVJWSU5HKDEpIEZPUk1BVF9QUkVTRVJWSU5HKDIpCitjb25zdCBjaGFyICpRXyhjb25zdCBjaGFyICptc2dpZCwgY29uc3QgY2hhciAqcGx1LCB1bnNpZ25lZCBsb25nIG4pCit7CisJaWYgKHVzZV9nZXR0ZXh0X3BvaXNvbigpKQorCQlyZXR1cm4gIiMgR0VUVEVYVCBQT0lTT04gIyI7CisJcmV0dXJuIG5nZXR0ZXh0KG1zZ2lkLCBwbHUsIG4pOworfQorCisvKiBNYXJrIG1zZ2lkIGZvciB0cmFuc2xhdGlvbiBidXQgZG8gbm90IHRyYW5zbGF0ZSBpdC4gKi8KKyNpZiAhVVNFX1BBUkVOU19BUk9VTkRfR0VUVEVYVF9OCisjZGVmaW5lIE5fKG1zZ2lkKSBtc2dpZAorI2Vsc2UKKy8qCisgKiBTdHJpY3RseSBzcGVha2luZywgdGhpcyB3aWxsIGxlYWQgdG8gaW52YWxpZCBDIHdoZW4KKyAqIHVzZWQgdGhpcyB3YXk6CisgKglzdGF0aWMgY29uc3QgY2hhciBzW10gPSBOXygiRk9PIik7CisgKiB3aGljaCB3aWxsIGV4cGFuZCB0bworICoJc3RhdGljIGNvbnN0IGNoYXIgc1tdID0gKCJGT08iKTsKKyAqIGFuZCBpbiB2YWxpZCBDLCB0aGUgaW5pdGlhbGl6ZXIgb24gdGhlIHJpZ2h0IGhhbmQgc2lkZSBtdXN0CisgKiBiZSB3aXRob3V0IHRoZSBwYXJlbnRoZXNlcy4gIEJ1dCBtYW55IGNvbXBpbGVycyBkbyBhY2NlcHQgaXQKKyAqIGFzIGEgbGFuZ3VhZ2UgZXh0ZW5zaW9uIGFuZCBpdCB3aWxsIGFsbG93IHVzIHRvIGNhdGNoIG1pc3Rha2VzCisgKiBsaWtlOgorICoJc3RhdGljIGNvbnN0IGNoYXIgKm1zZ3NbXSA9IHsKKyAqCQlOXygib25lIikKKyAqCQlOXygidHdvIiksCisgKgkJTl8oInRocmVlIiksCisgKgkJTlVMTAorICoJfTsKKyAqIChub3RpY2UgdGhlIG1pc3NpbmcgY29tbWEgb24gb25lIG9mIHRoZSBsaW5lcykgYnkgZm9yY2luZworICogYSBjb21waWxhdGlvbiBlcnJvciwgYmVjYXVzZSBwYXJlbnRoZXNpc2VkICgib25lIikgKCJ0d28iKQorICogd2lsbCBub3QgZ2V0IHNpbGVudGx5IHR1cm5lZCBpbnRvICgib25ldHdvIikuCisgKi8KKyNkZWZpbmUgTl8obXNnaWQpIChtc2dpZCkKKyNlbmRpZgorCitjb25zdCBjaGFyICpnZXRfcHJlZmVycmVkX2xhbmd1YWdlcyh2b2lkKTsKK2ludCBpc191dGY4X2xvY2FsZSh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsIGIvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMGZkMzBhCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybApAQCAtMCwwICsxLDE4NzMgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEdpdCBxdyh1bnF1b3RlX3BhdGgpOwordXNlIEdpdDo6STE4TjsKKworYmlubW9kZShTVERPVVQsICI6cmF3Iik7CisKK215ICRyZXBvID0gR2l0LT5yZXBvc2l0b3J5KCk7CisKK215ICRtZW51X3VzZV9jb2xvciA9ICRyZXBvLT5nZXRfY29sb3Jib29sKCdjb2xvci5pbnRlcmFjdGl2ZScpOworbXkgKCRwcm9tcHRfY29sb3IsICRoZWFkZXJfY29sb3IsICRoZWxwX2NvbG9yKSA9CisJJG1lbnVfdXNlX2NvbG9yID8gKAorCQkkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5pbnRlcmFjdGl2ZS5wcm9tcHQnLCAnYm9sZCBibHVlJyksCisJCSRyZXBvLT5nZXRfY29sb3IoJ2NvbG9yLmludGVyYWN0aXZlLmhlYWRlcicsICdib2xkJyksCisJCSRyZXBvLT5nZXRfY29sb3IoJ2NvbG9yLmludGVyYWN0aXZlLmhlbHAnLCAncmVkIGJvbGQnKSwKKwkpIDogKCk7CitteSAkZXJyb3JfY29sb3IgPSAoKTsKK2lmICgkbWVudV91c2VfY29sb3IpIHsKKwlteSAkaGVscF9jb2xvcl9zcGVjID0gKCRyZXBvLT5jb25maWcoJ2NvbG9yLmludGVyYWN0aXZlLmhlbHAnKSBvcgorCQkJCSdyZWQgYm9sZCcpOworCSRlcnJvcl9jb2xvciA9ICRyZXBvLT5nZXRfY29sb3IoJ2NvbG9yLmludGVyYWN0aXZlLmVycm9yJywKKwkJCQkJJGhlbHBfY29sb3Jfc3BlYyk7Cit9CisKK215ICRkaWZmX3VzZV9jb2xvciA9ICRyZXBvLT5nZXRfY29sb3Jib29sKCdjb2xvci5kaWZmJyk7CitteSAoJGZyYWdpbmZvX2NvbG9yKSA9CisJJGRpZmZfdXNlX2NvbG9yID8gKAorCQkkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5kaWZmLmZyYWcnLCAnY3lhbicpLAorCSkgOiAoKTsKK215ICgkZGlmZl9wbGFpbl9jb2xvcikgPQorCSRkaWZmX3VzZV9jb2xvciA/ICgKKwkJJHJlcG8tPmdldF9jb2xvcignY29sb3IuZGlmZi5wbGFpbicsICcnKSwKKwkpIDogKCk7CitteSAoJGRpZmZfb2xkX2NvbG9yKSA9CisJJGRpZmZfdXNlX2NvbG9yID8gKAorCQkkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5kaWZmLm9sZCcsICdyZWQnKSwKKwkpIDogKCk7CitteSAoJGRpZmZfbmV3X2NvbG9yKSA9CisJJGRpZmZfdXNlX2NvbG9yID8gKAorCQkkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5kaWZmLm5ldycsICdncmVlbicpLAorCSkgOiAoKTsKKworbXkgJG5vcm1hbF9jb2xvciA9ICRyZXBvLT5nZXRfY29sb3IoIiIsICJyZXNldCIpOworCitteSAkZGlmZl9hbGdvcml0aG0gPSAkcmVwby0+Y29uZmlnKCdkaWZmLmFsZ29yaXRobScpOworbXkgJGRpZmZfZmlsdGVyID0gJHJlcG8tPmNvbmZpZygnaW50ZXJhY3RpdmUuZGlmZmZpbHRlcicpOworCitteSAkdXNlX3JlYWRrZXkgPSAwOworbXkgJHVzZV90ZXJtY2FwID0gMDsKK215ICV0ZXJtX2VzY2FwZXM7CisKK3N1YiBSZWFkTW9kZTsKK3N1YiBSZWFkS2V5OworaWYgKCRyZXBvLT5jb25maWdfYm9vbCgiaW50ZXJhY3RpdmUuc2luZ2xla2V5IikpIHsKKwlldmFsIHsKKwkJcmVxdWlyZSBUZXJtOjpSZWFkS2V5OworCQlUZXJtOjpSZWFkS2V5LT5pbXBvcnQ7CisJCSR1c2VfcmVhZGtleSA9IDE7CisJfTsKKwlpZiAoISR1c2VfcmVhZGtleSkgeworCQlwcmludCBTVERFUlIgIm1pc3NpbmcgVGVybTo6UmVhZEtleSwgZGlzYWJsaW5nIGludGVyYWN0aXZlLnNpbmdsZWtleVxuIjsKKwl9CisJZXZhbCB7CisJCXJlcXVpcmUgVGVybTo6Q2FwOworCQlteSAkdGVybWNhcCA9IFRlcm06OkNhcC0+VGdldGVudDsKKwkJZm9yZWFjaCAodmFsdWVzICUkdGVybWNhcCkgeworCQkJJHRlcm1fZXNjYXBlc3skX30gPSAxIGlmIC9eXGUvOworCQl9CisJCSR1c2VfdGVybWNhcCA9IDE7CisJfTsKK30KKworc3ViIGNvbG9yZWQgeworCW15ICRjb2xvciA9IHNoaWZ0OworCW15ICRzdHJpbmcgPSBqb2luKCIiLCBAXyk7CisKKwlpZiAoZGVmaW5lZCAkY29sb3IpIHsKKwkJIyBQdXQgYSBjb2xvciBjb2RlIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lLCBhIHJlc2V0IGF0IHRoZSBlbmQKKwkJIyBjb2xvciBhZnRlciBuZXdsaW5lcyB0aGF0IGFyZSBub3QgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCisJCSRzdHJpbmcgPX4gcy8oXG4rKSguKS8kMSRjb2xvciQyL2c7CisJCSMgcmVzZXQgYmVmb3JlIG5ld2xpbmVzCisJCSRzdHJpbmcgPX4gcy8oXG4rKS8kbm9ybWFsX2NvbG9yJDEvZzsKKwkJIyBjb2RlcyBhdCBiZWdpbm5pbmcgYW5kIGVuZCAoaWYgbmVjZXNzYXJ5KToKKwkJJHN0cmluZyA9fiBzL14vJGNvbG9yLzsKKwkJJHN0cmluZyA9fiBzLyQvJG5vcm1hbF9jb2xvci8gdW5sZXNzICRzdHJpbmcgPX4gL1xuJC87CisJfQorCXJldHVybiAkc3RyaW5nOworfQorCisjIGNvbW1hbmQgbGluZSBvcHRpb25zCitteSAkcGF0Y2hfbW9kZV9vbmx5OworbXkgJHBhdGNoX21vZGU7CitteSAkcGF0Y2hfbW9kZV9yZXZpc2lvbjsKKworc3ViIGFwcGx5X3BhdGNoOworc3ViIGFwcGx5X3BhdGNoX2Zvcl9jaGVja291dF9jb21taXQ7CitzdWIgYXBwbHlfcGF0Y2hfZm9yX3N0YXNoOworCitteSAlcGF0Y2hfbW9kZXMgPSAoCisJJ3N0YWdlJyA9PiB7CisJCURJRkYgPT4gJ2RpZmYtZmlsZXMgLXAnLAorCQlBUFBMWSA9PiBzdWIgeyBhcHBseV9wYXRjaCAnYXBwbHkgLS1jYWNoZWQnLCBAXzsgfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5IC0tY2FjaGVkJywKKwkJRklMVEVSID0+ICdmaWxlLW9ubHknLAorCQlJU19SRVZFUlNFID0+IDAsCisJfSwKKwknc3Rhc2gnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1pbmRleCAtcCBIRUFEJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2ggJ2FwcGx5IC0tY2FjaGVkJywgQF87IH0sCisJCUFQUExZX0NIRUNLID0+ICdhcHBseSAtLWNhY2hlZCcsCisJCUZJTFRFUiA9PiB1bmRlZiwKKwkJSVNfUkVWRVJTRSA9PiAwLAorCX0sCisJJ3Jlc2V0X2hlYWQnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1pbmRleCAtcCAtLWNhY2hlZCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoICdhcHBseSAtUiAtLWNhY2hlZCcsIEBfOyB9LAorCQlBUFBMWV9DSEVDSyA9PiAnYXBwbHkgLVIgLS1jYWNoZWQnLAorCQlGSUxURVIgPT4gJ2luZGV4LW9ubHknLAorCQlJU19SRVZFUlNFID0+IDEsCisJfSwKKwkncmVzZXRfbm90aGVhZCcgPT4geworCQlESUZGID0+ICdkaWZmLWluZGV4IC1SIC1wIC0tY2FjaGVkJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2ggJ2FwcGx5IC0tY2FjaGVkJywgQF87IH0sCisJCUFQUExZX0NIRUNLID0+ICdhcHBseSAtLWNhY2hlZCcsCisJCUZJTFRFUiA9PiAnaW5kZXgtb25seScsCisJCUlTX1JFVkVSU0UgPT4gMCwKKwl9LAorCSdjaGVja291dF9pbmRleCcgPT4geworCQlESUZGID0+ICdkaWZmLWZpbGVzIC1wJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2ggJ2FwcGx5IC1SJywgQF87IH0sCisJCUFQUExZX0NIRUNLID0+ICdhcHBseSAtUicsCisJCUZJTFRFUiA9PiAnZmlsZS1vbmx5JywKKwkJSVNfUkVWRVJTRSA9PiAxLAorCX0sCisJJ2NoZWNrb3V0X2hlYWQnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1pbmRleCAtcCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoX2Zvcl9jaGVja291dF9jb21taXQgJy1SJywgQF8gfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5IC1SJywKKwkJRklMVEVSID0+IHVuZGVmLAorCQlJU19SRVZFUlNFID0+IDEsCisJfSwKKwknY2hlY2tvdXRfbm90aGVhZCcgPT4geworCQlESUZGID0+ICdkaWZmLWluZGV4IC1SIC1wJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2hfZm9yX2NoZWNrb3V0X2NvbW1pdCAnJywgQF8gfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5JywKKwkJRklMVEVSID0+IHVuZGVmLAorCQlJU19SRVZFUlNFID0+IDAsCisJfSwKKwknd29ya3RyZWVfaGVhZCcgPT4geworCQlESUZGID0+ICdkaWZmLWluZGV4IC1wJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2ggJ2FwcGx5IC1SJywgQF8gfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5IC1SJywKKwkJRklMVEVSID0+IHVuZGVmLAorCQlJU19SRVZFUlNFID0+IDEsCisJfSwKKwknd29ya3RyZWVfbm90aGVhZCcgPT4geworCQlESUZGID0+ICdkaWZmLWluZGV4IC1SIC1wJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2ggJ2FwcGx5JywgQF8gfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5JywKKwkJRklMVEVSID0+IHVuZGVmLAorCQlJU19SRVZFUlNFID0+IDAsCisJfSwKKyk7CisKKyRwYXRjaF9tb2RlID0gJ3N0YWdlJzsKK215ICVwYXRjaF9tb2RlX2ZsYXZvdXIgPSAleyRwYXRjaF9tb2Rlc3skcGF0Y2hfbW9kZX19OworCitzdWIgcnVuX2NtZF9waXBlIHsKKwlpZiAoJF5PIGVxICdNU1dpbjMyJykgeworCQlteSBAaW52YWxpZCA9IGdyZXAge20vWyI6Kl0vfSBAXzsKKwkJZGllICIkXk8gZG9lcyBub3Qgc3VwcG9ydDogQGludmFsaWRcbiIgaWYgQGludmFsaWQ7CisJCW15IEBhcmdzID0gbWFwIHsgbS8gL28gPyAiXCIkX1wiIjogJF8gfSBAXzsKKwkJcmV0dXJuIHF4e0BhcmdzfTsKKwl9IGVsc2UgeworCQlteSAkZmggPSB1bmRlZjsKKwkJb3BlbigkZmgsICctfCcsIEBfKSBvciBkaWU7CisJCW15IEBvdXQgPSA8JGZoPjsKKwkJY2xvc2UgJGZoIHx8IGRpZSAiQ2Fubm90IGNsb3NlIEBfICgkISkiOworCQlyZXR1cm4gQG91dDsKKwl9Cit9CisKK215ICgkR0lUX0RJUikgPSBydW5fY21kX3BpcGUocXcoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpKTsKKworaWYgKCFkZWZpbmVkICRHSVRfRElSKSB7CisJZXhpdCgxKTsgIyByZXYtcGFyc2Ugd291bGQgaGF2ZSBhbHJlYWR5IHNhaWQgIm5vdCBhIGdpdCByZXBvIgorfQorY2hvbXAoJEdJVF9ESVIpOworCitzdWIgcmVmcmVzaCB7CisJbXkgJGZoOworCW9wZW4gJGZoLCAnZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggfCcKKwkgICAgb3IgZGllOworCXdoaWxlICg8JGZoPikgeworCQk7IyBpZ25vcmUgJ25lZWRzIHVwZGF0ZScKKwl9CisJY2xvc2UgJGZoOworfQorCitzdWIgbGlzdF91bnRyYWNrZWQgeworCW1hcCB7CisJCWNob21wICRfOworCQl1bnF1b3RlX3BhdGgoJF8pOworCX0KKwlydW5fY21kX3BpcGUocXcoZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZS1zdGFuZGFyZCAtLSksIEBBUkdWKTsKK30KKworIyBUUkFOU0xBVE9SUzogeW91IGNhbiBhZGp1c3QgdGhpcyB0byBhbGlnbiAiZ2l0IGFkZCAtaSIgc3RhdHVzIG1lbnUKK215ICRzdGF0dXNfZm10ID0gX18oJyUxMnMgJTEycyAlcycpOworbXkgJHN0YXR1c19oZWFkID0gc3ByaW50Zigkc3RhdHVzX2ZtdCwgX18oJ3N0YWdlZCcpLCBfXygndW5zdGFnZWQnKSwgX18oJ3BhdGgnKSk7CisKK3sKKwlteSAkaW5pdGlhbDsKKwlzdWIgaXNfaW5pdGlhbF9jb21taXQgeworCQkkaW5pdGlhbCA9IHN5c3RlbSgnZ2l0IHJldi1wYXJzZSBIRUFEIC0tID4vZGV2L251bGwgMj4mMScpICE9IDAKKwkJCXVubGVzcyBkZWZpbmVkICRpbml0aWFsOworCQlyZXR1cm4gJGluaXRpYWw7CisJfQorfQorCit7CisJbXkgJGVtcHR5X3RyZWU7CisJc3ViIGdldF9lbXB0eV90cmVlIHsKKwkJcmV0dXJuICRlbXB0eV90cmVlIGlmIGRlZmluZWQgJGVtcHR5X3RyZWU7CisKKwkJKCRlbXB0eV90cmVlKSA9IHJ1bl9jbWRfcGlwZShxdyhnaXQgaGFzaC1vYmplY3QgLXQgdHJlZSAvZGV2L251bGwpKTsKKwkJY2hvbXAgJGVtcHR5X3RyZWU7CisJCXJldHVybiAkZW1wdHlfdHJlZTsKKwl9Cit9CisKK3N1YiBnZXRfZGlmZl9yZWZlcmVuY2UgeworCW15ICRyZWYgPSBzaGlmdDsKKwlpZiAoZGVmaW5lZCAkcmVmIGFuZCAkcmVmIG5lICdIRUFEJykgeworCQlyZXR1cm4gJHJlZjsKKwl9IGVsc2lmIChpc19pbml0aWFsX2NvbW1pdCgpKSB7CisJCXJldHVybiBnZXRfZW1wdHlfdHJlZSgpOworCX0gZWxzZSB7CisJCXJldHVybiAnSEVBRCc7CisJfQorfQorCisjIFJldHVybnMgbGlzdCBvZiBoYXNoZXMsIGNvbnRlbnRzIG9mIGVhY2ggb2Ygd2hpY2ggYXJlOgorIyBWQUxVRToJcGF0aG5hbWUKKyMgQklOQVJZOglpcyBhIGJpbmFyeSBwYXRoCisjIElOREVYOglpcyBpbmRleCBkaWZmZXJlbnQgZnJvbSBIRUFEPworIyBGSUxFOgkJaXMgZmlsZSBkaWZmZXJlbnQgZnJvbSBpbmRleD8KKyMgSU5ERVhfQUREREVMOglpcyBpdCBhZGQvZGVsZXRlIGJldHdlZW4gSEVBRCBhbmQgaW5kZXg/CisjIEZJTEVfQUREREVMOglpcyBpdCBhZGQvZGVsZXRlIGJldHdlZW4gaW5kZXggYW5kIGZpbGU/CisjIFVOTUVSR0VEOglpcyB0aGUgcGF0aCB1bm1lcmdlZAorCitzdWIgbGlzdF9tb2RpZmllZCB7CisJbXkgKCRvbmx5KSA9IEBfOworCW15ICglZGF0YSwgQHJldHVybik7CisJbXkgKCRhZGQsICRkZWwsICRhZGRkZWwsICRmaWxlKTsKKworCW15ICRyZWZlcmVuY2UgPSBnZXRfZGlmZl9yZWZlcmVuY2UoJHBhdGNoX21vZGVfcmV2aXNpb24pOworCWZvciAocnVuX2NtZF9waXBlKHF3KGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkCisJCQkgICAgIC0tbnVtc3RhdCAtLXN1bW1hcnkpLCAkcmVmZXJlbmNlLAorCQkJICAgICAnLS0nLCBAQVJHVikpIHsKKwkJaWYgKCgkYWRkLCAkZGVsLCAkZmlsZSkgPQorCQkgICAgL14oWy1cZF0rKQkoWy1cZF0rKQkoLiopLykgeworCQkJbXkgKCRjaGFuZ2UsICRiaW4pOworCQkJJGZpbGUgPSB1bnF1b3RlX3BhdGgoJGZpbGUpOworCQkJaWYgKCRhZGQgZXEgJy0nICYmICRkZWwgZXEgJy0nKSB7CisJCQkJJGNoYW5nZSA9IF9fKCdiaW5hcnknKTsKKwkJCQkkYmluID0gMTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCSRjaGFuZ2UgPSAiKyRhZGQvLSRkZWwiOworCQkJfQorCQkJJGRhdGF7JGZpbGV9ID0geworCQkJCUlOREVYID0+ICRjaGFuZ2UsCisJCQkJQklOQVJZID0+ICRiaW4sCisJCQkJRklMRSA9PiBfXygnbm90aGluZycpLAorCQkJfQorCQl9CisJCWVsc2lmICgoJGFkZGRlbCwgJGZpbGUpID0KKwkJICAgICAgIC9eIChjcmVhdGV8ZGVsZXRlKSBtb2RlIFswLTddKyAoLiopJC8pIHsKKwkJCSRmaWxlID0gdW5xdW90ZV9wYXRoKCRmaWxlKTsKKwkJCSRkYXRheyRmaWxlfXtJTkRFWF9BRERERUx9ID0gJGFkZGRlbDsKKwkJfQorCX0KKworCWZvciAocnVuX2NtZF9waXBlKHF3KGdpdCBkaWZmLWZpbGVzIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgLS1udW1zdGF0IC0tc3VtbWFyeSAtLXJhdyAtLSksIEBBUkdWKSkgeworCQlpZiAoKCRhZGQsICRkZWwsICRmaWxlKSA9CisJCSAgICAvXihbLVxkXSspCShbLVxkXSspCSguKikvKSB7CisJCQkkZmlsZSA9IHVucXVvdGVfcGF0aCgkZmlsZSk7CisJCQlteSAoJGNoYW5nZSwgJGJpbik7CisJCQlpZiAoJGFkZCBlcSAnLScgJiYgJGRlbCBlcSAnLScpIHsKKwkJCQkkY2hhbmdlID0gX18oJ2JpbmFyeScpOworCQkJCSRiaW4gPSAxOworCQkJfQorCQkJZWxzZSB7CisJCQkJJGNoYW5nZSA9ICIrJGFkZC8tJGRlbCI7CisJCQl9CisJCQkkZGF0YXskZmlsZX17RklMRX0gPSAkY2hhbmdlOworCQkJaWYgKCRiaW4pIHsKKwkJCQkkZGF0YXskZmlsZX17QklOQVJZfSA9IDE7CisJCQl9CisJCX0KKwkJZWxzaWYgKCgkYWRkZGVsLCAkZmlsZSkgPQorCQkgICAgICAgL14gKGNyZWF0ZXxkZWxldGUpIG1vZGUgWzAtN10rICguKikkLykgeworCQkJJGZpbGUgPSB1bnF1b3RlX3BhdGgoJGZpbGUpOworCQkJJGRhdGF7JGZpbGV9e0ZJTEVfQUREREVMfSA9ICRhZGRkZWw7CisJCX0KKwkJZWxzaWYgKC9eOlswLTddKyBbMC03XSsgWzAtOWEtZl0rIFswLTlhLWZdKyAoLikJKC4qKSQvKSB7CisJCQkkZmlsZSA9IHVucXVvdGVfcGF0aCgkMik7CisJCQlpZiAoIWV4aXN0cyAkZGF0YXskZmlsZX0pIHsKKwkJCQkkZGF0YXskZmlsZX0gPSAreworCQkJCQlJTkRFWCA9PiBfXygndW5jaGFuZ2VkJyksCisJCQkJCUJJTkFSWSA9PiAwLAorCQkJCX07CisJCQl9CisJCQlpZiAoJDEgZXEgJ1UnKSB7CisJCQkJJGRhdGF7JGZpbGV9e1VOTUVSR0VEfSA9IDE7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKHNvcnQga2V5cyAlZGF0YSkgeworCQlteSAkaXQgPSAkZGF0YXskX307CisKKwkJaWYgKCRvbmx5KSB7CisJCQlpZiAoJG9ubHkgZXEgJ2luZGV4LW9ubHknKSB7CisJCQkJbmV4dCBpZiAoJGl0LT57SU5ERVh9IGVxIF9fKCd1bmNoYW5nZWQnKSk7CisJCQl9CisJCQlpZiAoJG9ubHkgZXEgJ2ZpbGUtb25seScpIHsKKwkJCQluZXh0IGlmICgkaXQtPntGSUxFfSBlcSBfXygnbm90aGluZycpKTsKKwkJCX0KKwkJfQorCQlwdXNoIEByZXR1cm4sICt7CisJCQlWQUxVRSA9PiAkXywKKwkJCSUkaXQsCisJCX07CisJfQorCXJldHVybiBAcmV0dXJuOworfQorCitzdWIgZmluZF91bmlxdWUgeworCW15ICgkc3RyaW5nLCBAc3R1ZmYpID0gQF87CisJbXkgJGZvdW5kID0gdW5kZWY7CisJZm9yIChteSAkaSA9IDA7ICRpIDwgQHN0dWZmOyAkaSsrKSB7CisJCW15ICRpdCA9ICRzdHVmZlskaV07CisJCW15ICRoaXQgPSB1bmRlZjsKKwkJaWYgKHJlZiAkaXQpIHsKKwkJCWlmICgocmVmICRpdCkgZXEgJ0FSUkFZJykgeworCQkJCSRpdCA9ICRpdC0+WzBdOworCQkJfQorCQkJZWxzZSB7CisJCQkJJGl0ID0gJGl0LT57VkFMVUV9OworCQkJfQorCQl9CisJCWV2YWwgeworCQkJaWYgKCRpdCA9fiAvXiRzdHJpbmcvKSB7CisJCQkJJGhpdCA9IDE7CisJCQl9OworCQl9OworCQlpZiAoZGVmaW5lZCAkaGl0ICYmIGRlZmluZWQgJGZvdW5kKSB7CisJCQlyZXR1cm4gdW5kZWY7CisJCX0KKwkJaWYgKCRoaXQpIHsKKwkJCSRmb3VuZCA9ICRpICsgMTsKKwkJfQorCX0KKwlyZXR1cm4gJGZvdW5kOworfQorCisjIGluc2VydHMgc3RyaW5nIGludG8gdHJpZSBhbmQgdXBkYXRlcyBjb3VudCBmb3IgZWFjaCBjaGFyYWN0ZXIKK3N1YiB1cGRhdGVfdHJpZSB7CisJbXkgKCR0cmllLCAkc3RyaW5nKSA9IEBfOworCWZvcmVhY2ggKHNwbGl0IC8vLCAkc3RyaW5nKSB7CisJCSR0cmllID0gJHRyaWUtPnskX30gfHw9IHtDT1VOVCA9PiAwfTsKKwkJJHRyaWUtPntDT1VOVH0rKzsKKwl9Cit9CisKKyMgcmV0dXJucyBhbiBhcnJheSBvZiB0dXBsZXMgKHByZWZpeCwgcmVtYWluZGVyKQorc3ViIGZpbmRfdW5pcXVlX3ByZWZpeGVzIHsKKwlteSBAc3R1ZmYgPSBAXzsKKwlteSBAcmV0dXJuID0gKCk7CisKKwkjIGFueSBzaW5nbGUgcHJlZml4IGV4Y2VlZGluZyB0aGUgc29mdCBsaW1pdCBpcyBvbWl0dGVkCisJIyBpZiBhbnkgcHJlZml4IGV4Y2VlZHMgdGhlIGhhcmQgbGltaXQgYWxsIGFyZSBvbWl0dGVkCisJIyAwIGluZGljYXRlcyBubyBsaW1pdAorCW15ICRzb2Z0X2xpbWl0ID0gMDsKKwlteSAkaGFyZF9saW1pdCA9IDM7CisKKwkjIGJ1aWxkIGEgdHJpZSBtb2RlbGxpbmcgYWxsIHBvc3NpYmxlIG9wdGlvbnMKKwlteSAldHJpZTsKKwlmb3JlYWNoIG15ICRwcmludCAoQHN0dWZmKSB7CisJCWlmICgocmVmICRwcmludCkgZXEgJ0FSUkFZJykgeworCQkJJHByaW50ID0gJHByaW50LT5bMF07CisJCX0KKwkJZWxzaWYgKChyZWYgJHByaW50KSBlcSAnSEFTSCcpIHsKKwkJCSRwcmludCA9ICRwcmludC0+e1ZBTFVFfTsKKwkJfQorCQl1cGRhdGVfdHJpZShcJXRyaWUsICRwcmludCk7CisJCXB1c2ggQHJldHVybiwgJHByaW50OworCX0KKworCSMgdXNlIHRoZSB0cmllIHRvIGZpbmQgdGhlIHVuaXF1ZSBwcmVmaXhlcworCWZvciAobXkgJGkgPSAwOyAkaSA8IEByZXR1cm47ICRpKyspIHsKKwkJbXkgJHJldCA9ICRyZXR1cm5bJGldOworCQlteSBAbGV0dGVycyA9IHNwbGl0IC8vLCAkcmV0OworCQlteSAlc2VhcmNoID0gJXRyaWU7CisJCW15ICgkcHJlZml4LCAkcmVtYWluZGVyKTsKKwkJbXkgJGo7CisJCWZvciAoJGogPSAwOyAkaiA8IEBsZXR0ZXJzOyAkaisrKSB7CisJCQlteSAkbGV0dGVyID0gJGxldHRlcnNbJGpdOworCQkJaWYgKCRzZWFyY2h7JGxldHRlcn17Q09VTlR9ID09IDEpIHsKKwkJCQkkcHJlZml4ID0gc3Vic3RyICRyZXQsIDAsICRqICsgMTsKKwkJCQkkcmVtYWluZGVyID0gc3Vic3RyICRyZXQsICRqICsgMTsKKwkJCQlsYXN0OworCQkJfQorCQkJZWxzZSB7CisJCQkJbXkgJHByZWZpeCA9IHN1YnN0ciAkcmV0LCAwLCAkajsKKwkJCQlyZXR1cm4gKCkKKwkJCQkgICAgaWYgKCRoYXJkX2xpbWl0ICYmICRqICsgMSA+ICRoYXJkX2xpbWl0KTsKKwkJCX0KKwkJCSVzZWFyY2ggPSAleyRzZWFyY2h7JGxldHRlcn19OworCQl9CisJCWlmIChvcmQoJGxldHRlcnNbMF0pID4gMTI3IHx8CisJCSAgICAoJHNvZnRfbGltaXQgJiYgJGogKyAxID4gJHNvZnRfbGltaXQpKSB7CisJCQkkcHJlZml4ID0gdW5kZWY7CisJCQkkcmVtYWluZGVyID0gJHJldDsKKwkJfQorCQkkcmV0dXJuWyRpXSA9IFskcHJlZml4LCAkcmVtYWluZGVyXTsKKwl9CisJcmV0dXJuIEByZXR1cm47Cit9CisKKyMgZmlsdGVycyBvdXQgcHJlZml4ZXMgd2hpY2ggaGF2ZSBzcGVjaWFsIG1lYW5pbmcgdG8gbGlzdF9hbmRfY2hvb3NlKCkKK3N1YiBpc192YWxpZF9wcmVmaXggeworCW15ICRwcmVmaXggPSBzaGlmdDsKKwlyZXR1cm4gKGRlZmluZWQgJHByZWZpeCkgJiYKKwkgICAgISgkcHJlZml4ID1+IC9bXHMsXS8pICYmICMgc2VwYXJhdG9ycworCSAgICAhKCRwcmVmaXggPX4gL14tLykgJiYgICAgIyBkZXNlbGVjdGlvbgorCSAgICAhKCRwcmVmaXggPX4gL15cZCsvKSAmJiAgIyBzZWxlY3Rpb24KKwkgICAgKCRwcmVmaXggbmUgJyonKSAmJiAgICAgICMgImFsbCIgd2lsZGNhcmQKKwkgICAgKCRwcmVmaXggbmUgJz8nKTsgICAgICAgICMgcHJvbXB0IGhlbHAKK30KKworIyBnaXZlbiBhIHByZWZpeC9yZW1haW5kZXIgdHVwbGUgcmV0dXJuIGEgc3RyaW5nIHdpdGggdGhlIHByZWZpeCBoaWdobGlnaHRlZAorIyBmb3Igbm93IHVzZSBzcXVhcmUgYnJhY2tldHM7IGxhdGVyIG1pZ2h0IHVzZSBBTlNJIGNvbG9ycyAodW5kZXJsaW5lLCBib2xkKQorc3ViIGhpZ2hsaWdodF9wcmVmaXggeworCW15ICRwcmVmaXggPSBzaGlmdDsKKwlteSAkcmVtYWluZGVyID0gc2hpZnQ7CisKKwlpZiAoIWRlZmluZWQgJHByZWZpeCkgeworCQlyZXR1cm4gJHJlbWFpbmRlcjsKKwl9CisKKwlpZiAoIWlzX3ZhbGlkX3ByZWZpeCgkcHJlZml4KSkgeworCQlyZXR1cm4gIiRwcmVmaXgkcmVtYWluZGVyIjsKKwl9CisKKwlpZiAoISRtZW51X3VzZV9jb2xvcikgeworCQlyZXR1cm4gIlskcHJlZml4XSRyZW1haW5kZXIiOworCX0KKworCXJldHVybiAiJHByb21wdF9jb2xvciRwcmVmaXgkbm9ybWFsX2NvbG9yJHJlbWFpbmRlciI7Cit9CisKK3N1YiBlcnJvcl9tc2cgeworCXByaW50IFNUREVSUiBjb2xvcmVkICRlcnJvcl9jb2xvciwgQF87Cit9CisKK3N1YiBsaXN0X2FuZF9jaG9vc2UgeworCW15ICgkb3B0cywgQHN0dWZmKSA9IEBfOworCW15IChAY2hvc2VuLCBAcmV0dXJuKTsKKwlpZiAoIUBzdHVmZikgeworCSAgICByZXR1cm4gQHJldHVybjsKKwl9CisJbXkgJGk7CisJbXkgQHByZWZpeGVzID0gZmluZF91bmlxdWVfcHJlZml4ZXMoQHN0dWZmKSB1bmxlc3MgJG9wdHMtPntMSVNUX09OTFl9OworCisgICAgICBUT1BMT09QOgorCXdoaWxlICgxKSB7CisJCW15ICRsYXN0X2xmID0gMDsKKworCQlpZiAoJG9wdHMtPntIRUFERVJ9KSB7CisJCQlpZiAoISRvcHRzLT57TElTVF9GTEFUfSkgeworCQkJCXByaW50ICIgICAgICI7CisJCQl9CisJCQlwcmludCBjb2xvcmVkICRoZWFkZXJfY29sb3IsICIkb3B0cy0+e0hFQURFUn1cbiI7CisJCX0KKwkJZm9yICgkaSA9IDA7ICRpIDwgQHN0dWZmOyAkaSsrKSB7CisJCQlteSAkY2hvc2VuID0gJGNob3NlblskaV0gPyAnKicgOiAnICc7CisJCQlteSAkcHJpbnQgPSAkc3R1ZmZbJGldOworCQkJbXkgJHJlZiA9IHJlZiAkcHJpbnQ7CisJCQlteSAkaGlnaGxpZ2h0ZWQgPSBoaWdobGlnaHRfcHJlZml4KEB7JHByZWZpeGVzWyRpXX0pCisJCQkgICAgaWYgQHByZWZpeGVzOworCQkJaWYgKCRyZWYgZXEgJ0FSUkFZJykgeworCQkJCSRwcmludCA9ICRoaWdobGlnaHRlZCB8fCAkcHJpbnQtPlswXTsKKwkJCX0KKwkJCWVsc2lmICgkcmVmIGVxICdIQVNIJykgeworCQkJCW15ICR2YWx1ZSA9ICRoaWdobGlnaHRlZCB8fCAkcHJpbnQtPntWQUxVRX07CisJCQkJJHByaW50ID0gc3ByaW50Zigkc3RhdHVzX2ZtdCwKKwkJCQkgICAgJHByaW50LT57SU5ERVh9LAorCQkJCSAgICAkcHJpbnQtPntGSUxFfSwKKwkJCQkgICAgJHZhbHVlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCSRwcmludCA9ICRoaWdobGlnaHRlZCB8fCAkcHJpbnQ7CisJCQl9CisJCQlwcmludGYoIiVzJTJkOiAlcyIsICRjaG9zZW4sICRpKzEsICRwcmludCk7CisJCQlpZiAoKCRvcHRzLT57TElTVF9GTEFUfSkgJiYKKwkJCSAgICAoKCRpICsgMSkgJSAoJG9wdHMtPntMSVNUX0ZMQVR9KSkpIHsKKwkJCQlwcmludCAiXHQiOworCQkJCSRsYXN0X2xmID0gMDsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXByaW50ICJcbiI7CisJCQkJJGxhc3RfbGYgPSAxOworCQkJfQorCQl9CisJCWlmICghJGxhc3RfbGYpIHsKKwkJCXByaW50ICJcbiI7CisJCX0KKworCQlyZXR1cm4gaWYgKCRvcHRzLT57TElTVF9PTkxZfSk7CisKKwkJcHJpbnQgY29sb3JlZCAkcHJvbXB0X2NvbG9yLCAkb3B0cy0+e1BST01QVH07CisJCWlmICgkb3B0cy0+e1NJTkdMRVRPTn0pIHsKKwkJCXByaW50ICI+ICI7CisJCX0KKwkJZWxzZSB7CisJCQlwcmludCAiPj4gIjsKKwkJfQorCQlteSAkbGluZSA9IDxTVERJTj47CisJCWlmICghJGxpbmUpIHsKKwkJCXByaW50ICJcbiI7CisJCQkkb3B0cy0+e09OX0VPRn0tPigpIGlmICRvcHRzLT57T05fRU9GfTsKKwkJCWxhc3Q7CisJCX0KKwkJY2hvbXAgJGxpbmU7CisJCWxhc3QgaWYgJGxpbmUgZXEgJyc7CisJCWlmICgkbGluZSBlcSAnPycpIHsKKwkJCSRvcHRzLT57U0lOR0xFVE9OfSA/CisJCQkgICAgc2luZ2xldG9uX3Byb21wdF9oZWxwX2NtZCgpIDoKKwkJCSAgICBwcm9tcHRfaGVscF9jbWQoKTsKKwkJCW5leHQgVE9QTE9PUDsKKwkJfQorCQlmb3IgbXkgJGNob2ljZSAoc3BsaXQoL1tccyxdKy8sICRsaW5lKSkgeworCQkJbXkgJGNob29zZSA9IDE7CisJCQlteSAoJGJvdHRvbSwgJHRvcCk7CisKKwkJCSMgSW5wdXQgdGhhdCBiZWdpbnMgd2l0aCAnLSc7IHVuY2hvb3NlCisJCQlpZiAoJGNob2ljZSA9fiBzL14tLy8pIHsKKwkJCQkkY2hvb3NlID0gMDsKKwkJCX0KKwkJCSMgQSByYW5nZSBjYW4gYmUgc3BlY2lmaWVkIGxpa2UgNS03IG9yIDUtLgorCQkJaWYgKCRjaG9pY2UgPX4gL14oXGQrKS0oXGQqKSQvKSB7CisJCQkJKCRib3R0b20sICR0b3ApID0gKCQxLCBsZW5ndGgoJDIpID8gJDIgOiAxICsgQHN0dWZmKTsKKwkJCX0KKwkJCWVsc2lmICgkY2hvaWNlID1+IC9eXGQrJC8pIHsKKwkJCQkkYm90dG9tID0gJHRvcCA9ICRjaG9pY2U7CisJCQl9CisJCQllbHNpZiAoJGNob2ljZSBlcSAnKicpIHsKKwkJCQkkYm90dG9tID0gMTsKKwkJCQkkdG9wID0gMSArIEBzdHVmZjsKKwkJCX0KKwkJCWVsc2UgeworCQkJCSRib3R0b20gPSAkdG9wID0gZmluZF91bmlxdWUoJGNob2ljZSwgQHN0dWZmKTsKKwkJCQlpZiAoIWRlZmluZWQgJGJvdHRvbSkgeworCQkJCQllcnJvcl9tc2cgc3ByaW50ZihfXygiSHVoICglcyk/XG4iKSwgJGNob2ljZSk7CisJCQkJCW5leHQgVE9QTE9PUDsKKwkJCQl9CisJCQl9CisJCQlpZiAoJG9wdHMtPntTSU5HTEVUT059ICYmICRib3R0b20gIT0gJHRvcCkgeworCQkJCWVycm9yX21zZyBzcHJpbnRmKF9fKCJIdWggKCVzKT9cbiIpLCAkY2hvaWNlKTsKKwkJCQluZXh0IFRPUExPT1A7CisJCQl9CisJCQlmb3IgKCRpID0gJGJvdHRvbS0xOyAkaSA8PSAkdG9wLTE7ICRpKyspIHsKKwkJCQluZXh0IGlmIChAc3R1ZmYgPD0gJGkgfHwgJGkgPCAwKTsKKwkJCQkkY2hvc2VuWyRpXSA9ICRjaG9vc2U7CisJCQl9CisJCX0KKwkJbGFzdCBpZiAoJG9wdHMtPntJTU1FRElBVEV9IHx8ICRsaW5lIGVxICcqJyk7CisJfQorCWZvciAoJGkgPSAwOyAkaSA8IEBzdHVmZjsgJGkrKykgeworCQlpZiAoJGNob3NlblskaV0pIHsKKwkJCXB1c2ggQHJldHVybiwgJHN0dWZmWyRpXTsKKwkJfQorCX0KKwlyZXR1cm4gQHJldHVybjsKK30KKworc3ViIHNpbmdsZXRvbl9wcm9tcHRfaGVscF9jbWQgeworCXByaW50IGNvbG9yZWQgJGhlbHBfY29sb3IsIF9fIDw8J0VPRicgOworUHJvbXB0IGhlbHA6CisxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbQorZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXgKKyAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nCitFT0YKK30KKworc3ViIHByb21wdF9oZWxwX2NtZCB7CisJcHJpbnQgY29sb3JlZCAkaGVscF9jb2xvciwgX18gPDwnRU9GJyA7CitQcm9tcHQgaGVscDoKKzEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbQorMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zCisyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlcworZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXgKKy0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXMKKyogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zCisgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nCitFT0YKK30KKworc3ViIHN0YXR1c19jbWQgeworCWxpc3RfYW5kX2Nob29zZSh7IExJU1RfT05MWSA9PiAxLCBIRUFERVIgPT4gJHN0YXR1c19oZWFkIH0sCisJCQlsaXN0X21vZGlmaWVkKCkpOworCXByaW50ICJcbiI7Cit9CisKK3N1YiBzYXlfbl9wYXRocyB7CisJbXkgJGRpZCA9IHNoaWZ0IEBfOworCW15ICRjbnQgPSBzY2FsYXIgQF87CisJaWYgKCRkaWQgZXEgJ2FkZGVkJykgeworCQlwcmludGYoX19uKCJhZGRlZCAlZCBwYXRoXG4iLCAiYWRkZWQgJWQgcGF0aHNcbiIsCisJCQkgICAkY250KSwgJGNudCk7CisJfSBlbHNpZiAoJGRpZCBlcSAndXBkYXRlZCcpIHsKKwkJcHJpbnRmKF9fbigidXBkYXRlZCAlZCBwYXRoXG4iLCAidXBkYXRlZCAlZCBwYXRoc1xuIiwKKwkJCSAgICRjbnQpLCAkY250KTsKKwl9IGVsc2lmICgkZGlkIGVxICdyZXZlcnRlZCcpIHsKKwkJcHJpbnRmKF9fbigicmV2ZXJ0ZWQgJWQgcGF0aFxuIiwgInJldmVydGVkICVkIHBhdGhzXG4iLAorCQkJICAgJGNudCksICRjbnQpOworCX0gZWxzZSB7CisJCXByaW50ZihfX24oInRvdWNoZWQgJWQgcGF0aFxuIiwgInRvdWNoZWQgJWQgcGF0aHNcbiIsCisJCQkgICAkY250KSwgJGNudCk7CisJfQorfQorCitzdWIgdXBkYXRlX2NtZCB7CisJbXkgQG1vZHMgPSBsaXN0X21vZGlmaWVkKCdmaWxlLW9ubHknKTsKKwlyZXR1cm4gaWYgKCFAbW9kcyk7CisKKwlteSBAdXBkYXRlID0gbGlzdF9hbmRfY2hvb3NlKHsgUFJPTVBUID0+IF9fKCdVcGRhdGUnKSwKKwkJCQkgICAgICAgSEVBREVSID0+ICRzdGF0dXNfaGVhZCwgfSwKKwkJCQkgICAgIEBtb2RzKTsKKwlpZiAoQHVwZGF0ZSkgeworCQlzeXN0ZW0ocXcoZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSAtLSksCisJCSAgICAgICBtYXAgeyAkXy0+e1ZBTFVFfSB9IEB1cGRhdGUpOworCQlzYXlfbl9wYXRocygndXBkYXRlZCcsIEB1cGRhdGUpOworCX0KKwlwcmludCAiXG4iOworfQorCitzdWIgcmV2ZXJ0X2NtZCB7CisJbXkgQHVwZGF0ZSA9IGxpc3RfYW5kX2Nob29zZSh7IFBST01QVCA9PiBfXygnUmV2ZXJ0JyksCisJCQkJICAgICAgIEhFQURFUiA9PiAkc3RhdHVzX2hlYWQsIH0sCisJCQkJICAgICBsaXN0X21vZGlmaWVkKCkpOworCWlmIChAdXBkYXRlKSB7CisJCWlmIChpc19pbml0aWFsX2NvbW1pdCgpKSB7CisJCQlzeXN0ZW0ocXcoZ2l0IHJtIC0tY2FjaGVkKSwKKwkJCQltYXAgeyAkXy0+e1ZBTFVFfSB9IEB1cGRhdGUpOworCQl9CisJCWVsc2UgeworCQkJbXkgQGxpbmVzID0gcnVuX2NtZF9waXBlKHF3KGdpdCBscy10cmVlIEhFQUQgLS0pLAorCQkJCQkJIG1hcCB7ICRfLT57VkFMVUV9IH0gQHVwZGF0ZSk7CisJCQlteSAkZmg7CisJCQlvcGVuICRmaCwgJ3wgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8nCisJCQkgICAgb3IgZGllOworCQkJZm9yIChAbGluZXMpIHsKKwkJCQlwcmludCAkZmggJF87CisJCQl9CisJCQljbG9zZSgkZmgpOworCQkJZm9yIChAdXBkYXRlKSB7CisJCQkJaWYgKCRfLT57SU5ERVhfQUREREVMfSAmJgorCQkJCSAgICAkXy0+e0lOREVYX0FERERFTH0gZXEgJ2NyZWF0ZScpIHsKKwkJCQkJc3lzdGVtKHF3KGdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgLS0pLAorCQkJCQkgICAgICAgJF8tPntWQUxVRX0pOworCQkJCQlwcmludGYoX18oIm5vdGU6ICVzIGlzIHVudHJhY2tlZCBub3cuXG4iKSwgJF8tPntWQUxVRX0pOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZWZyZXNoKCk7CisJCXNheV9uX3BhdGhzKCdyZXZlcnRlZCcsIEB1cGRhdGUpOworCX0KKwlwcmludCAiXG4iOworfQorCitzdWIgYWRkX3VudHJhY2tlZF9jbWQgeworCW15IEBhZGQgPSBsaXN0X2FuZF9jaG9vc2UoeyBQUk9NUFQgPT4gX18oJ0FkZCB1bnRyYWNrZWQnKSB9LAorCQkJCSAgbGlzdF91bnRyYWNrZWQoKSk7CisJaWYgKEBhZGQpIHsKKwkJc3lzdGVtKHF3KGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0pLCBAYWRkKTsKKwkJc2F5X25fcGF0aHMoJ2FkZGVkJywgQGFkZCk7CisJfSBlbHNlIHsKKwkJcHJpbnQgX18oIk5vIHVudHJhY2tlZCBmaWxlcy5cbiIpOworCX0KKwlwcmludCAiXG4iOworfQorCitzdWIgcnVuX2dpdF9hcHBseSB7CisJbXkgJGNtZCA9IHNoaWZ0OworCW15ICRmaDsKKwlvcGVuICRmaCwgJ3wgZ2l0ICcgLiAkY21kIC4gIiAtLWFsbG93LW92ZXJsYXAiOworCXByaW50ICRmaCBAXzsKKwlyZXR1cm4gY2xvc2UgJGZoOworfQorCitzdWIgcGFyc2VfZGlmZiB7CisJbXkgKCRwYXRoKSA9IEBfOworCW15IEBkaWZmX2NtZCA9IHNwbGl0KCIgIiwgJHBhdGNoX21vZGVfZmxhdm91cntESUZGfSk7CisJaWYgKGRlZmluZWQgJGRpZmZfYWxnb3JpdGhtKSB7CisJCXNwbGljZSBAZGlmZl9jbWQsIDEsIDAsICItLWRpZmYtYWxnb3JpdGhtPSR7ZGlmZl9hbGdvcml0aG19IjsKKwl9CisJaWYgKGRlZmluZWQgJHBhdGNoX21vZGVfcmV2aXNpb24pIHsKKwkJcHVzaCBAZGlmZl9jbWQsIGdldF9kaWZmX3JlZmVyZW5jZSgkcGF0Y2hfbW9kZV9yZXZpc2lvbik7CisJfQorCW15IEBkaWZmID0gcnVuX2NtZF9waXBlKCJnaXQiLCBAZGlmZl9jbWQsICItLSIsICRwYXRoKTsKKwlteSBAY29sb3JlZCA9ICgpOworCWlmICgkZGlmZl91c2VfY29sb3IpIHsKKwkJbXkgQGRpc3BsYXlfY21kID0gKCJnaXQiLCBAZGlmZl9jbWQsIHF3KC0tY29sb3IgLS0pLCAkcGF0aCk7CisJCWlmIChkZWZpbmVkICRkaWZmX2ZpbHRlcikgeworCQkJIyBxdW90ZW1ldGEgaXMgb3ZlcmtpbGwsIGJ1dCBzdWZmaWNpZW50IGZvciBzaGVsbC1xdW90aW5nCisJCQlteSAkZGlmZiA9IGpvaW4oJyAnLCBtYXAgeyBxdW90ZW1ldGEgfSBAZGlzcGxheV9jbWQpOworCQkJQGRpc3BsYXlfY21kID0gKCIkZGlmZiB8ICRkaWZmX2ZpbHRlciIpOworCQl9CisKKwkJQGNvbG9yZWQgPSBydW5fY21kX3BpcGUoQGRpc3BsYXlfY21kKTsKKwl9CisJbXkgKEBodW5rKSA9IHsgVEVYVCA9PiBbXSwgRElTUExBWSA9PiBbXSwgVFlQRSA9PiAnaGVhZGVyJyB9OworCisJaWYgKEBjb2xvcmVkICYmIEBjb2xvcmVkICE9IEBkaWZmKSB7CisJCXByaW50IFNUREVSUgorCQkgICJmYXRhbDogbWlzbWF0Y2hlZCBvdXRwdXQgZnJvbSBpbnRlcmFjdGl2ZS5kaWZmRmlsdGVyXG4iLAorCQkgICJoaW50OiBZb3VyIGZpbHRlciBtdXN0IG1haW50YWluIGEgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZVxuIiwKKwkJICAiaGludDogYmV0d2VlbiBpdHMgaW5wdXQgYW5kIG91dHB1dCBsaW5lcy5cbiI7CisJCWV4aXQgMTsKKwl9CisKKwlmb3IgKG15ICRpID0gMDsgJGkgPCBAZGlmZjsgJGkrKykgeworCQlpZiAoJGRpZmZbJGldID1+IC9eQEAgLykgeworCQkJcHVzaCBAaHVuaywgeyBURVhUID0+IFtdLCBESVNQTEFZID0+IFtdLAorCQkJCVRZUEUgPT4gJ2h1bmsnIH07CisJCX0KKwkJcHVzaCBAeyRodW5rWy0xXXtURVhUfX0sICRkaWZmWyRpXTsKKwkJcHVzaCBAeyRodW5rWy0xXXtESVNQTEFZfX0sCisJCQkoQGNvbG9yZWQgPyAkY29sb3JlZFskaV0gOiAkZGlmZlskaV0pOworCX0KKwlyZXR1cm4gQGh1bms7Cit9CisKK3N1YiBwYXJzZV9kaWZmX2hlYWRlciB7CisJbXkgJHNyYyA9IHNoaWZ0OworCisJbXkgJGhlYWQgPSB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10sIFRZUEUgPT4gJ2hlYWRlcicgfTsKKwlteSAkbW9kZSA9IHsgVEVYVCA9PiBbXSwgRElTUExBWSA9PiBbXSwgVFlQRSA9PiAnbW9kZScgfTsKKwlteSAkZGVsZXRpb24gPSB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10sIFRZUEUgPT4gJ2RlbGV0aW9uJyB9OworCisJZm9yIChteSAkaSA9IDA7ICRpIDwgQHskc3JjLT57VEVYVH19OyAkaSsrKSB7CisJCW15ICRkZXN0ID0KKwkJICAgJHNyYy0+e1RFWFR9LT5bJGldID1+IC9eKG9sZHxuZXcpIG1vZGUgKFxkKykkLyA/ICRtb2RlIDoKKwkJICAgJHNyYy0+e1RFWFR9LT5bJGldID1+IC9eZGVsZXRlZCBmaWxlLyA/ICRkZWxldGlvbiA6CisJCSAgICRoZWFkOworCQlwdXNoIEB7JGRlc3QtPntURVhUfX0sICRzcmMtPntURVhUfS0+WyRpXTsKKwkJcHVzaCBAeyRkZXN0LT57RElTUExBWX19LCAkc3JjLT57RElTUExBWX0tPlskaV07CisJfQorCXJldHVybiAoJGhlYWQsICRtb2RlLCAkZGVsZXRpb24pOworfQorCitzdWIgaHVua19zcGxpdHRhYmxlIHsKKwlteSAoJHRleHQpID0gQF87CisKKwlteSBAcyA9IHNwbGl0X2h1bmsoJHRleHQpOworCXJldHVybiAoMSA8IEBzKTsKK30KKworc3ViIHBhcnNlX2h1bmtfaGVhZGVyIHsKKwlteSAoJGxpbmUpID0gQF87CisJbXkgKCRvX29mcywgJG9fY250LCAkbl9vZnMsICRuX2NudCkgPQorCSAgICAkbGluZSA9fiAvXkBAIC0oXGQrKSg/OiwoXGQrKSk/IFwrKFxkKykoPzosKFxkKykpPyBAQC87CisJJG9fY250ID0gMSB1bmxlc3MgZGVmaW5lZCAkb19jbnQ7CisJJG5fY250ID0gMSB1bmxlc3MgZGVmaW5lZCAkbl9jbnQ7CisJcmV0dXJuICgkb19vZnMsICRvX2NudCwgJG5fb2ZzLCAkbl9jbnQpOworfQorCitzdWIgZm9ybWF0X2h1bmtfaGVhZGVyIHsKKwlteSAoJG9fb2ZzLCAkb19jbnQsICRuX29mcywgJG5fY250KSA9IEBfOworCXJldHVybiAoIkBAIC0kb19vZnMiIC4KKwkJKCgkb19jbnQgIT0gMSkgPyAiLCRvX2NudCIgOiAnJykgLgorCQkiICskbl9vZnMiIC4KKwkJKCgkbl9jbnQgIT0gMSkgPyAiLCRuX2NudCIgOiAnJykgLgorCQkiIEBAXG4iKTsKK30KKworc3ViIHNwbGl0X2h1bmsgeworCW15ICgkdGV4dCwgJGRpc3BsYXkpID0gQF87CisJbXkgQHNwbGl0ID0gKCk7CisJaWYgKCFkZWZpbmVkICRkaXNwbGF5KSB7CisJCSRkaXNwbGF5ID0gJHRleHQ7CisJfQorCSMgSWYgdGhlcmUgYXJlIGNvbnRleHQgbGluZXMgaW4gdGhlIG1pZGRsZSBvZiBhIGh1bmssCisJIyBpdCBjYW4gYmUgc3BsaXQsIGJ1dCB3ZSB3b3VsZCBuZWVkIHRvIHRha2UgY2FyZSBvZgorCSMgb3ZlcmxhcHMgbGF0ZXIuCisKKwlteSAoJG9fb2ZzLCB1bmRlZiwgJG5fb2ZzKSA9IHBhcnNlX2h1bmtfaGVhZGVyKCR0ZXh0LT5bMF0pOworCW15ICRodW5rX3N0YXJ0ID0gMTsKKworICAgICAgT1VURVI6CisJd2hpbGUgKDEpIHsKKwkJbXkgJG5leHRfaHVua19zdGFydCA9IHVuZGVmOworCQlteSAkaSA9ICRodW5rX3N0YXJ0IC0gMTsKKwkJbXkgJHRoaXMgPSAreworCQkJVEVYVCA9PiBbXSwKKwkJCURJU1BMQVkgPT4gW10sCisJCQlUWVBFID0+ICdodW5rJywKKwkJCU9MRCA9PiAkb19vZnMsCisJCQlORVcgPT4gJG5fb2ZzLAorCQkJT0NOVCA9PiAwLAorCQkJTkNOVCA9PiAwLAorCQkJQUREREVMID0+IDAsCisJCQlQT1NUQ1RYID0+IDAsCisJCQlVU0UgPT4gdW5kZWYsCisJCX07CisKKwkJd2hpbGUgKCsrJGkgPCBAJHRleHQpIHsKKwkJCW15ICRsaW5lID0gJHRleHQtPlskaV07CisJCQlteSAkZGlzcGxheSA9ICRkaXNwbGF5LT5bJGldOworCQkJaWYgKCRsaW5lID1+IC9eXFwvKSB7CisJCQkJcHVzaCBAeyR0aGlzLT57VEVYVH19LCAkbGluZTsKKwkJCQlwdXNoIEB7JHRoaXMtPntESVNQTEFZfX0sICRkaXNwbGF5OworCQkJCW5leHQ7CisJCQl9CisJCQlpZiAoJGxpbmUgPX4gL14gLykgeworCQkJCWlmICgkdGhpcy0+e0FERERFTH0gJiYKKwkJCQkgICAgIWRlZmluZWQgJG5leHRfaHVua19zdGFydCkgeworCQkJCQkjIFdlIGhhdmUgc2VlbiBsZWFkaW5nIGNvbnRleHQgYW5kCisJCQkJCSMgYWRkcy9kZWxzIGFuZCB0aGVuIGhlcmUgaXMgYW5vdGhlcgorCQkJCQkjIGNvbnRleHQsIHdoaWNoIGlzIHRyYWlsaW5nIGZvciB0aGlzCisJCQkJCSMgc3BsaXQgaHVuayBhbmQgbGVhZGluZyBmb3IgdGhlIG5leHQKKwkJCQkJIyBvbmUuCisJCQkJCSRuZXh0X2h1bmtfc3RhcnQgPSAkaTsKKwkJCQl9CisJCQkJcHVzaCBAeyR0aGlzLT57VEVYVH19LCAkbGluZTsKKwkJCQlwdXNoIEB7JHRoaXMtPntESVNQTEFZfX0sICRkaXNwbGF5OworCQkJCSR0aGlzLT57T0NOVH0rKzsKKwkJCQkkdGhpcy0+e05DTlR9Kys7CisJCQkJaWYgKGRlZmluZWQgJG5leHRfaHVua19zdGFydCkgeworCQkJCQkkdGhpcy0+e1BPU1RDVFh9Kys7CisJCQkJfQorCQkJCW5leHQ7CisJCQl9CisKKwkJCSMgYWRkL2RlbAorCQkJaWYgKGRlZmluZWQgJG5leHRfaHVua19zdGFydCkgeworCQkJCSMgV2UgYXJlIGRvbmUgd2l0aCB0aGUgY3VycmVudCBodW5rIGFuZAorCQkJCSMgdGhpcyBpcyB0aGUgZmlyc3QgcmVhbCBjaGFuZ2UgZm9yIHRoZQorCQkJCSMgbmV4dCBzcGxpdCBvbmUuCisJCQkJJGh1bmtfc3RhcnQgPSAkbmV4dF9odW5rX3N0YXJ0OworCQkJCSRvX29mcyA9ICR0aGlzLT57T0xEfSArICR0aGlzLT57T0NOVH07CisJCQkJJG5fb2ZzID0gJHRoaXMtPntORVd9ICsgJHRoaXMtPntOQ05UfTsKKwkJCQkkb19vZnMgLT0gJHRoaXMtPntQT1NUQ1RYfTsKKwkJCQkkbl9vZnMgLT0gJHRoaXMtPntQT1NUQ1RYfTsKKwkJCQlwdXNoIEBzcGxpdCwgJHRoaXM7CisJCQkJcmVkbyBPVVRFUjsKKwkJCX0KKwkJCXB1c2ggQHskdGhpcy0+e1RFWFR9fSwgJGxpbmU7CisJCQlwdXNoIEB7JHRoaXMtPntESVNQTEFZfX0sICRkaXNwbGF5OworCQkJJHRoaXMtPntBRERERUx9Kys7CisJCQlpZiAoJGxpbmUgPX4gL14tLykgeworCQkJCSR0aGlzLT57T0NOVH0rKzsKKwkJCX0KKwkJCWVsc2UgeworCQkJCSR0aGlzLT57TkNOVH0rKzsKKwkJCX0KKwkJfQorCisJCXB1c2ggQHNwbGl0LCAkdGhpczsKKwkJbGFzdDsKKwl9CisKKwlmb3IgbXkgJGh1bmsgKEBzcGxpdCkgeworCQkkb19vZnMgPSAkaHVuay0+e09MRH07CisJCSRuX29mcyA9ICRodW5rLT57TkVXfTsKKwkJbXkgJG9fY250ID0gJGh1bmstPntPQ05UfTsKKwkJbXkgJG5fY250ID0gJGh1bmstPntOQ05UfTsKKworCQlteSAkaGVhZCA9IGZvcm1hdF9odW5rX2hlYWRlcigkb19vZnMsICRvX2NudCwgJG5fb2ZzLCAkbl9jbnQpOworCQlteSAkZGlzcGxheV9oZWFkID0gJGhlYWQ7CisJCXVuc2hpZnQgQHskaHVuay0+e1RFWFR9fSwgJGhlYWQ7CisJCWlmICgkZGlmZl91c2VfY29sb3IpIHsKKwkJCSRkaXNwbGF5X2hlYWQgPSBjb2xvcmVkKCRmcmFnaW5mb19jb2xvciwgJGhlYWQpOworCQl9CisJCXVuc2hpZnQgQHskaHVuay0+e0RJU1BMQVl9fSwgJGRpc3BsYXlfaGVhZDsKKwl9CisJcmV0dXJuIEBzcGxpdDsKK30KKworc3ViIGZpbmRfbGFzdF9vX2N0eCB7CisJbXkgKCRpdCkgPSBAXzsKKwlteSAkdGV4dCA9ICRpdC0+e1RFWFR9OworCW15ICgkb19vZnMsICRvX2NudCkgPSBwYXJzZV9odW5rX2hlYWRlcigkdGV4dC0+WzBdKTsKKwlteSAkaSA9IEB7JHRleHR9OworCW15ICRsYXN0X29fY3R4ID0gJG9fb2ZzICsgJG9fY250OworCXdoaWxlICgwIDwgLS0kaSkgeworCQlteSAkbGluZSA9ICR0ZXh0LT5bJGldOworCQlpZiAoJGxpbmUgPX4gL14gLykgeworCQkJJGxhc3Rfb19jdHgtLTsKKwkJCW5leHQ7CisJCX0KKwkJbGFzdDsKKwl9CisJcmV0dXJuICRsYXN0X29fY3R4OworfQorCitzdWIgbWVyZ2VfaHVuayB7CisJbXkgKCRwcmV2LCAkdGhpcykgPSBAXzsKKwlteSAoJG8wX29mcywgJG8wX2NudCwgJG4wX29mcywgJG4wX2NudCkgPQorCSAgICBwYXJzZV9odW5rX2hlYWRlcigkcHJldi0+e1RFWFR9WzBdKTsKKwlteSAoJG8xX29mcywgJG8xX2NudCwgJG4xX29mcywgJG4xX2NudCkgPQorCSAgICBwYXJzZV9odW5rX2hlYWRlcigkdGhpcy0+e1RFWFR9WzBdKTsKKworCW15IChAbGluZSwgJGksICRvZnMsICRvX2NudCwgJG5fY250KTsKKwkkb2ZzID0gJG8wX29mczsKKwkkb19jbnQgPSAkbl9jbnQgPSAwOworCWZvciAoJGkgPSAxOyAkaSA8IEB7JHByZXYtPntURVhUfX07ICRpKyspIHsKKwkJbXkgJGxpbmUgPSAkcHJldi0+e1RFWFR9WyRpXTsKKwkJaWYgKCRsaW5lID1+IC9eXCsvKSB7CisJCQkkbl9jbnQrKzsKKwkJCXB1c2ggQGxpbmUsICRsaW5lOworCQkJbmV4dDsKKwkJfSBlbHNpZiAoJGxpbmUgPX4gL15cXC8pIHsKKwkJCXB1c2ggQGxpbmUsICRsaW5lOworCQkJbmV4dDsKKwkJfQorCisJCWxhc3QgaWYgKCRvMV9vZnMgPD0gJG9mcyk7CisKKwkJJG9fY250Kys7CisJCSRvZnMrKzsKKwkJaWYgKCRsaW5lID1+IC9eIC8pIHsKKwkJCSRuX2NudCsrOworCQl9CisJCXB1c2ggQGxpbmUsICRsaW5lOworCX0KKworCWZvciAoJGkgPSAxOyAkaSA8IEB7JHRoaXMtPntURVhUfX07ICRpKyspIHsKKwkJbXkgJGxpbmUgPSAkdGhpcy0+e1RFWFR9WyRpXTsKKwkJaWYgKCRsaW5lID1+IC9eXCsvKSB7CisJCQkkbl9jbnQrKzsKKwkJCXB1c2ggQGxpbmUsICRsaW5lOworCQkJbmV4dDsKKwkJfSBlbHNpZiAoJGxpbmUgPX4gL15cXC8pIHsKKwkJCXB1c2ggQGxpbmUsICRsaW5lOworCQkJbmV4dDsKKwkJfQorCQkkb2ZzKys7CisJCSRvX2NudCsrOworCQlpZiAoJGxpbmUgPX4gL14gLykgeworCQkJJG5fY250Kys7CisJCX0KKwkJcHVzaCBAbGluZSwgJGxpbmU7CisJfQorCW15ICRoZWFkID0gZm9ybWF0X2h1bmtfaGVhZGVyKCRvMF9vZnMsICRvX2NudCwgJG4wX29mcywgJG5fY250KTsKKwlAeyRwcmV2LT57VEVYVH19ID0gKCRoZWFkLCBAbGluZSk7Cit9CisKK3N1YiBjb2FsZXNjZV9vdmVybGFwcGluZ19odW5rcyB7CisJbXkgKEBpbikgPSBAXzsKKwlteSBAb3V0ID0gKCk7CisKKwlteSAoJGxhc3Rfb19jdHgsICRsYXN0X3dhc19kaXJ0eSk7CisJbXkgJG9mc19kZWx0YSA9IDA7CisKKwlmb3IgKEBpbikgeworCQlpZiAoJF8tPntUWVBFfSBuZSAnaHVuaycpIHsKKwkJCXB1c2ggQG91dCwgJF87CisJCQluZXh0OworCQl9CisJCW15ICR0ZXh0ID0gJF8tPntURVhUfTsKKwkJbXkgKCRvX29mcywgJG9fY250LCAkbl9vZnMsICRuX2NudCkgPQorCQkJCQkJcGFyc2VfaHVua19oZWFkZXIoJHRleHQtPlswXSk7CisJCXVubGVzcyAoJF8tPntVU0V9KSB7CisJCQkkb2ZzX2RlbHRhICs9ICRvX2NudCAtICRuX2NudDsKKwkJCSMgSWYgdGhpcyBodW5rIGhhcyBiZWVuIGVkaXRlZCB0aGVuIHN1YnRyYWN0CisJCQkjIHRoZSBkZWx0YSB0aGF0IGlzIGR1ZSB0byB0aGUgZWRpdC4KKwkJCWlmICgkXy0+e09GU19ERUxUQX0pIHsKKwkJCQkkb2ZzX2RlbHRhIC09ICRfLT57T0ZTX0RFTFRBfTsKKwkJCX0KKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRvZnNfZGVsdGEpIHsKKwkJCWlmICgkcGF0Y2hfbW9kZV9mbGF2b3Vye0lTX1JFVkVSU0V9KSB7CisJCQkJJG9fb2ZzIC09ICRvZnNfZGVsdGE7CisJCQl9IGVsc2UgeworCQkJCSRuX29mcyArPSAkb2ZzX2RlbHRhOworCQkJfQorCQkJJF8tPntURVhUfS0+WzBdID0gZm9ybWF0X2h1bmtfaGVhZGVyKCRvX29mcywgJG9fY250LAorCQkJCQkJCSAgICAgJG5fb2ZzLCAkbl9jbnQpOworCQl9CisJCSMgSWYgdGhpcyBodW5rIHdhcyBlZGl0ZWQgdGhlbiBhZGp1c3QgdGhlIG9mZnNldCBkZWx0YQorCQkjIHRvIHJlZmxlY3QgdGhlIGVkaXQuCisJCWlmICgkXy0+e09GU19ERUxUQX0pIHsKKwkJCSRvZnNfZGVsdGEgKz0gJF8tPntPRlNfREVMVEF9OworCQl9CisJCWlmIChkZWZpbmVkICRsYXN0X29fY3R4ICYmCisJCSAgICAkb19vZnMgPD0gJGxhc3Rfb19jdHggJiYKKwkJICAgICEkXy0+e0RJUlRZfSAmJgorCQkgICAgISRsYXN0X3dhc19kaXJ0eSkgeworCQkJbWVyZ2VfaHVuaygkb3V0Wy0xXSwgJF8pOworCQl9CisJCWVsc2UgeworCQkJcHVzaCBAb3V0LCAkXzsKKwkJfQorCQkkbGFzdF9vX2N0eCA9IGZpbmRfbGFzdF9vX2N0eCgkb3V0Wy0xXSk7CisJCSRsYXN0X3dhc19kaXJ0eSA9ICRfLT57RElSVFl9OworCX0KKwlyZXR1cm4gQG91dDsKK30KKworc3ViIHJlYXNzZW1ibGVfcGF0Y2ggeworCW15ICRoZWFkID0gc2hpZnQ7CisJbXkgQHBhdGNoOworCisJIyBJbmNsdWRlIGV2ZXJ5dGhpbmcgaW4gdGhlIGhlYWRlciBleGNlcHQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGlmZi4KKwlwdXNoIEBwYXRjaCwgKGdyZXAgeyAhL15bLStdezN9LyB9IEAkaGVhZCk7CisKKwkjIFRoZW4gaW5jbHVkZSBhbnkgaGVhZGVycyBmcm9tIHRoZSBodW5rIGxpbmVzLCB3aGljaCBtdXN0CisJIyBjb21lIGJlZm9yZSBhbnkgYWN0dWFsIGh1bmsuCisJd2hpbGUgKEBfICYmICRfWzBdICF+IC9eQC8pIHsKKwkJcHVzaCBAcGF0Y2gsIHNoaWZ0OworCX0KKworCSMgVGhlbiBiZWdpbiB0aGUgZGlmZi4KKwlwdXNoIEBwYXRjaCwgZ3JlcCB7IC9eWy0rXXszfS8gfSBAJGhlYWQ7CisKKwkjIEFuZCB0aGVuIHRoZSBhY3R1YWwgaHVua3MuCisJcHVzaCBAcGF0Y2gsIEBfOworCisJcmV0dXJuIEBwYXRjaDsKK30KKworc3ViIGNvbG9yX2RpZmYgeworCXJldHVybiBtYXAgeworCQljb2xvcmVkKCgvXkAvICA/ICRmcmFnaW5mb19jb2xvciA6CisJCQkgL15cKy8gPyAkZGlmZl9uZXdfY29sb3IgOgorCQkJIC9eLS8gID8gJGRpZmZfb2xkX2NvbG9yIDoKKwkJCSAkZGlmZl9wbGFpbl9jb2xvciksCisJCQkkXyk7CisJfSBAXzsKK30KKworbXkgJWVkaXRfaHVua19tYW51YWxseV9tb2RlcyA9ICgKKwlzdGFnZSA9PiBOX18oCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUKK21hcmtlZCBmb3Igc3RhZ2luZy4iKSwKKwlzdGFzaCA9PiBOX18oCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUKK21hcmtlZCBmb3Igc3Rhc2hpbmcuIiksCisJcmVzZXRfaGVhZCA9PiBOX18oCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUKK21hcmtlZCBmb3IgdW5zdGFnaW5nLiIpLAorCXJlc2V0X25vdGhlYWQgPT4gTl9fKAorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlCittYXJrZWQgZm9yIGFwcGx5aW5nLiIpLAorCWNoZWNrb3V0X2luZGV4ID0+IE5fXygKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZQorbWFya2VkIGZvciBkaXNjYXJkaW5nLiIpLAorCWNoZWNrb3V0X2hlYWQgPT4gTl9fKAorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlCittYXJrZWQgZm9yIGRpc2NhcmRpbmcuIiksCisJY2hlY2tvdXRfbm90aGVhZCA9PiBOX18oCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUKK21hcmtlZCBmb3IgYXBwbHlpbmcuIiksCisJd29ya3RyZWVfaGVhZCA9PiBOX18oCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUKK21hcmtlZCBmb3IgZGlzY2FyZGluZy4iKSwKKwl3b3JrdHJlZV9ub3RoZWFkID0+IE5fXygKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZQorbWFya2VkIGZvciBhcHBseWluZy4iKSwKKyk7CisKK3N1YiByZWNvdW50X2VkaXRlZF9odW5rIHsKKwlsb2NhbCAkXzsKKwlteSAoJG9sZHRleHQsICRuZXd0ZXh0KSA9IEBfOworCW15ICgkb19jbnQsICRuX2NudCkgPSAoMCwgMCk7CisJZm9yIChAeyRuZXd0ZXh0fVsxLi4kI3skbmV3dGV4dH1dKSB7CisJCW15ICRtb2RlID0gc3Vic3RyKCRfLCAwLCAxKTsKKwkJaWYgKCRtb2RlIGVxICctJykgeworCQkJJG9fY250Kys7CisJCX0gZWxzaWYgKCRtb2RlIGVxICcrJykgeworCQkJJG5fY250Kys7CisJCX0gZWxzaWYgKCRtb2RlIGVxICcgJyBvciAkbW9kZSBlcSAiXG4iKSB7CisJCQkkb19jbnQrKzsKKwkJCSRuX2NudCsrOworCQl9CisJfQorCW15ICgkb19vZnMsIHVuZGVmLCAkbl9vZnMsIHVuZGVmKSA9CisJCQkJCXBhcnNlX2h1bmtfaGVhZGVyKCRuZXd0ZXh0LT5bMF0pOworCSRuZXd0ZXh0LT5bMF0gPSBmb3JtYXRfaHVua19oZWFkZXIoJG9fb2ZzLCAkb19jbnQsICRuX29mcywgJG5fY250KTsKKwlteSAodW5kZWYsICRvcmlnX29fY250LCB1bmRlZiwgJG9yaWdfbl9jbnQpID0KKwkJCQkJcGFyc2VfaHVua19oZWFkZXIoJG9sZHRleHQtPlswXSk7CisJIyBSZXR1cm4gdGhlIGNoYW5nZSBpbiB0aGUgbnVtYmVyIG9mIGxpbmVzIGluc2VydGVkIGJ5IHRoaXMgaHVuaworCXJldHVybiAkb3JpZ19vX2NudCAtICRvcmlnX25fY250IC0gJG9fY250ICsgJG5fY250OworfQorCitzdWIgZWRpdF9odW5rX21hbnVhbGx5IHsKKwlteSAoJG9sZHRleHQpID0gQF87CisKKwlteSAkaHVua2ZpbGUgPSAkcmVwby0+cmVwb19wYXRoIC4gIi9hZGRwLWh1bmstZWRpdC5kaWZmIjsKKwlteSAkZmg7CisJb3BlbiAkZmgsICc+JywgJGh1bmtmaWxlCisJCW9yIGRpZSBzcHJpbnRmKF9fKCJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3Igd3JpdGluZzogJXMiKSwgJCEpOworCXByaW50ICRmaCBHaXQ6OmNvbW1lbnRfbGluZXMgX18oIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlLlxuIik7CisJcHJpbnQgJGZoIEAkb2xkdGV4dDsKKwlteSAkaXNfcmV2ZXJzZSA9ICRwYXRjaF9tb2RlX2ZsYXZvdXJ7SVNfUkVWRVJTRX07CisJbXkgKCRyZW1vdmVfcGx1cywgJHJlbW92ZV9taW51cykgPSAkaXNfcmV2ZXJzZSA/ICgnLScsICcrJykgOiAoJysnLCAnLScpOworCW15ICRjb21tZW50X2xpbmVfY2hhciA9IEdpdDo6Z2V0X2NvbW1lbnRfbGluZV9jaGFyOworCXByaW50ICRmaCBHaXQ6OmNvbW1lbnRfbGluZXMgc3ByaW50ZihfXyA8PEVPRiwgJHJlbW92ZV9taW51cywgJHJlbW92ZV9wbHVzLCAkY29tbWVudF9saW5lX2NoYXIpLAorLS0tCitUbyByZW1vdmUgJyVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuCitUbyByZW1vdmUgJyVzJyBsaW5lcywgZGVsZXRlIHRoZW0uCitMaW5lcyBzdGFydGluZyB3aXRoICVzIHdpbGwgYmUgcmVtb3ZlZC4KK0VPRgorX18oJGVkaXRfaHVua19tYW51YWxseV9tb2Rlc3skcGF0Y2hfbW9kZX0pLAorIyBUUkFOU0xBVE9SUzogJ2l0JyByZWZlcnMgdG8gdGhlIHBhdGNoIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgbWVzc2FnZXMuCitfXyA8PEVPRjIgOworSWYgaXQgZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgeW91IHdpbGwgYmUgZ2l2ZW4gYW4gb3Bwb3J0dW5pdHkgdG8KK2VkaXQgYWdhaW4uICBJZiBhbGwgbGluZXMgb2YgdGhlIGh1bmsgYXJlIHJlbW92ZWQsIHRoZW4gdGhlIGVkaXQgaXMKK2Fib3J0ZWQgYW5kIHRoZSBodW5rIGlzIGxlZnQgdW5jaGFuZ2VkLgorRU9GMgorCWNsb3NlICRmaDsKKworCWNob21wKG15ICgkZWRpdG9yKSA9IHJ1bl9jbWRfcGlwZShxdyhnaXQgdmFyIEdJVF9FRElUT1IpKSk7CisJc3lzdGVtKCdzaCcsICctYycsICRlZGl0b3IuJyAiJEAiJywgJGVkaXRvciwgJGh1bmtmaWxlKTsKKworCWlmICgkPyAhPSAwKSB7CisJCXJldHVybiB1bmRlZjsKKwl9CisKKwlvcGVuICRmaCwgJzwnLCAkaHVua2ZpbGUKKwkJb3IgZGllIHNwcmludGYoX18oImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciByZWFkaW5nOiAlcyIpLCAkISk7CisJbXkgQG5ld3RleHQgPSBncmVwIHsgIS9eXFEkY29tbWVudF9saW5lX2NoYXJcRS8gfSA8JGZoPjsKKwljbG9zZSAkZmg7CisJdW5saW5rICRodW5rZmlsZTsKKworCSMgQWJvcnQgaWYgbm90aGluZyByZW1haW5zCisJaWYgKCFncmVwIHsgL1xTLyB9IEBuZXd0ZXh0KSB7CisJCXJldHVybiB1bmRlZjsKKwl9CisKKwkjIFJlaW5zZXJ0IHRoZSBmaXJzdCBodW5rIGhlYWRlciBpZiB0aGUgdXNlciBhY2NpZGVudGFsbHkgZGVsZXRlZCBpdAorCWlmICgkbmV3dGV4dFswXSAhfiAvXkAvKSB7CisJCXVuc2hpZnQgQG5ld3RleHQsICRvbGR0ZXh0LT5bMF07CisJfQorCXJldHVybiBcQG5ld3RleHQ7Cit9CisKK3N1YiBkaWZmX2FwcGxpZXMgeworCXJldHVybiBydW5fZ2l0X2FwcGx5KCRwYXRjaF9tb2RlX2ZsYXZvdXJ7QVBQTFlfQ0hFQ0t9IC4gJyAtLWNoZWNrJywKKwkJCSAgICAgbWFwIHsgQHskXy0+e1RFWFR9fSB9IEBfKTsKK30KKworc3ViIF9yZXN0b3JlX3Rlcm1pbmFsX2FuZF9kaWUgeworCVJlYWRNb2RlICdyZXN0b3JlJzsKKwlwcmludCAiXG4iOworCWV4aXQgMTsKK30KKworc3ViIHByb21wdF9zaW5nbGVfY2hhcmFjdGVyIHsKKwlpZiAoJHVzZV9yZWFka2V5KSB7CisJCWxvY2FsICRTSUd7VEVSTX0gPSBcJl9yZXN0b3JlX3Rlcm1pbmFsX2FuZF9kaWU7CisJCWxvY2FsICRTSUd7SU5UfSA9IFwmX3Jlc3RvcmVfdGVybWluYWxfYW5kX2RpZTsKKwkJUmVhZE1vZGUgJ2NicmVhayc7CisJCW15ICRrZXkgPSBSZWFkS2V5IDA7CisJCVJlYWRNb2RlICdyZXN0b3JlJzsKKwkJaWYgKCR1c2VfdGVybWNhcCBhbmQgJGtleSBlcSAiXGUiKSB7CisJCQl3aGlsZSAoIWRlZmluZWQgJHRlcm1fZXNjYXBlc3ska2V5fSkgeworCQkJCW15ICRuZXh0ID0gUmVhZEtleSAwLjU7CisJCQkJbGFzdCBpZiAoIWRlZmluZWQgJG5leHQpOworCQkJCSRrZXkgLj0gJG5leHQ7CisJCQl9CisJCQkka2V5ID1+IHMvXGUvXlsvOworCQl9CisJCXByaW50ICIka2V5IiBpZiBkZWZpbmVkICRrZXk7CisJCXByaW50ICJcbiI7CisJCXJldHVybiAka2V5OworCX0gZWxzZSB7CisJCXJldHVybiA8U1RESU4+OworCX0KK30KKworc3ViIHByb21wdF95ZXNubyB7CisJbXkgKCRwcm9tcHQpID0gQF87CisJd2hpbGUgKDEpIHsKKwkJcHJpbnQgY29sb3JlZCAkcHJvbXB0X2NvbG9yLCAkcHJvbXB0OworCQlteSAkbGluZSA9IHByb21wdF9zaW5nbGVfY2hhcmFjdGVyOworCQlyZXR1cm4gdW5kZWYgdW5sZXNzIGRlZmluZWQgJGxpbmU7CisJCXJldHVybiAwIGlmICRsaW5lID1+IC9ebi9pOworCQlyZXR1cm4gMSBpZiAkbGluZSA9fiAvXnkvaTsKKwl9Cit9CisKK3N1YiBlZGl0X2h1bmtfbG9vcCB7CisJbXkgKCRoZWFkLCAkaHVua3MsICRpeCkgPSBAXzsKKwlteSAkaHVuayA9ICRodW5rcy0+WyRpeF07CisJbXkgJHRleHQgPSAkaHVuay0+e1RFWFR9OworCisJd2hpbGUgKDEpIHsKKwkJbXkgJG5ld3RleHQgPSBlZGl0X2h1bmtfbWFudWFsbHkoJHRleHQpOworCQlpZiAoIWRlZmluZWQgJG5ld3RleHQpIHsKKwkJCXJldHVybiB1bmRlZjsKKwkJfQorCQlteSAkbmV3aHVuayA9IHsKKwkJCVRFWFQgPT4gJG5ld3RleHQsCisJCQlUWVBFID0+ICRodW5rLT57VFlQRX0sCisJCQlVU0UgPT4gMSwKKwkJCURJUlRZID0+IDEsCisJCX07CisJCSRuZXdodW5rLT57T0ZTX0RFTFRBfSA9IHJlY291bnRfZWRpdGVkX2h1bmsoJHRleHQsICRuZXd0ZXh0KTsKKwkJIyBJZiB0aGlzIGh1bmsgaGFzIGFscmVhZHkgYmVlbiBlZGl0ZWQgdGhlbiBhZGQgdGhlCisJCSMgb2Zmc2V0IGRlbHRhIG9mIHRoZSBwcmV2aW91cyBlZGl0IHRvIGdldCB0aGUgcmVhbAorCQkjIGRlbHRhIGZyb20gdGhlIG9yaWdpbmFsIHVuZWRpdGVkIGh1bmsuCisJCSRodW5rLT57T0ZTX0RFTFRBfSBhbmQKKwkJCQkkbmV3aHVuay0+e09GU19ERUxUQX0gKz0gJGh1bmstPntPRlNfREVMVEF9OworCQlpZiAoZGlmZl9hcHBsaWVzKCRoZWFkLAorCQkJCSBAeyRodW5rc31bMC4uJGl4LTFdLAorCQkJCSAkbmV3aHVuaywKKwkJCQkgQHskaHVua3N9WyRpeCsxLi4kI3skaHVua3N9XSkpIHsKKwkJCSRuZXdodW5rLT57RElTUExBWX0gPSBbY29sb3JfZGlmZihAeyRuZXd0ZXh0fSldOworCQkJcmV0dXJuICRuZXdodW5rOworCQl9CisJCWVsc2UgeworCQkJcHJvbXB0X3llc25vKAorCQkJCSMgVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKwkJCQkjIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgdGhhdCBpbnB1dAorCQkJCSMgYXQgdGhpcyBwb2ludC4KKwkJCQkjIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisJCQkJIyAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorCQkJCSMgb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisJCQkJX18oJ1lvdXIgZWRpdGVkIGh1bmsgZG9lcyBub3QgYXBwbHkuIEVkaXQgYWdhaW4gJworCQkJCSAgIC4gJyhzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIFt5L25dPyAnKQorCQkJCSkgb3IgcmV0dXJuIHVuZGVmOworCQl9CisJfQorfQorCitteSAlaGVscF9wYXRjaF9tb2RlcyA9ICgKKwlzdGFnZSA9PiBOX18oCisieSAtIHN0YWdlIHRoaXMgaHVuaworbiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsKK3EgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXMKK2EgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZQorZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIpLAorCXN0YXNoID0+IE5fXygKKyJ5IC0gc3Rhc2ggdGhpcyBodW5rCituIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuaworcSAtIHF1aXQ7IGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lcworYSAtIHN0YXNoIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlCitkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIiksCisJcmVzZXRfaGVhZCA9PiBOX18oCisieSAtIHVuc3RhZ2UgdGhpcyBodW5rCituIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rCitxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXMKK2EgLSB1bnN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlCitkIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiKSwKKwlyZXNldF9ub3RoZWFkID0+IE5fXygKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4CituIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleAorcSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lcworYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlCitkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIiksCisJY2hlY2tvdXRfaW5kZXggPT4gTl9fKAorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlCituIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUKK3EgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lcworYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUKK2QgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIpLAorCWNoZWNrb3V0X2hlYWQgPT4gTl9fKAorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZQorbiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZQorcSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzCithIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZQorZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIiksCisJY2hlY2tvdXRfbm90aGVhZCA9PiBOX18oCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWUKK24gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZQorcSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lcworYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlCitkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIiksCisJd29ya3RyZWVfaGVhZCA9PiBOX18oCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUKK24gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZQorcSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzCithIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZQorZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIiksCisJd29ya3RyZWVfbm90aGVhZCA9PiBOX18oCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZQorbiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWUKK3EgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXMKK2EgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZQorZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIpLAorKTsKKworc3ViIGhlbHBfcGF0Y2hfY21kIHsKKwlsb2NhbCAkXzsKKwlteSAkb3RoZXIgPSAkX1swXSAuICIsPyI7CisJcHJpbnQgY29sb3JlZCAkaGVscF9jb2xvciwgX18oJGhlbHBfcGF0Y2hfbW9kZXN7JHBhdGNoX21vZGV9KSwgIlxuIiwKKwkJbWFwIHsgIiRfXG4iIH0gZ3JlcCB7CisJCQlteSAkYyA9IHF1b3RlbWV0YShzdWJzdHIoJF8sIDAsIDEpKTsKKwkJCSRvdGhlciA9fiAvLCRjLworCQl9IHNwbGl0ICJcbiIsIF9fIDw8RU9GIDsKK2cgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvCisvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4CitqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmsKK0ogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rCitrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rCitLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmsKK3MgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rcworZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVuaworPyAtIHByaW50IGhlbHAKK0VPRgorfQorCitzdWIgYXBwbHlfcGF0Y2ggeworCW15ICRjbWQgPSBzaGlmdDsKKwlteSAkcmV0ID0gcnVuX2dpdF9hcHBseSAkY21kLCBAXzsKKwlpZiAoISRyZXQpIHsKKwkJcHJpbnQgU1RERVJSIEBfOworCX0KKwlyZXR1cm4gJHJldDsKK30KKworc3ViIGFwcGx5X3BhdGNoX2Zvcl9jaGVja291dF9jb21taXQgeworCW15ICRyZXZlcnNlID0gc2hpZnQ7CisJbXkgJGFwcGxpZXNfaW5kZXggPSBydW5fZ2l0X2FwcGx5ICdhcHBseSAnLiRyZXZlcnNlLicgLS1jYWNoZWQgLS1jaGVjaycsIEBfOworCW15ICRhcHBsaWVzX3dvcmt0cmVlID0gcnVuX2dpdF9hcHBseSAnYXBwbHkgJy4kcmV2ZXJzZS4nIC0tY2hlY2snLCBAXzsKKworCWlmICgkYXBwbGllc193b3JrdHJlZSAmJiAkYXBwbGllc19pbmRleCkgeworCQlydW5fZ2l0X2FwcGx5ICdhcHBseSAnLiRyZXZlcnNlLicgLS1jYWNoZWQnLCBAXzsKKwkJcnVuX2dpdF9hcHBseSAnYXBwbHkgJy4kcmV2ZXJzZSwgQF87CisJCXJldHVybiAxOworCX0gZWxzaWYgKCEkYXBwbGllc19pbmRleCkgeworCQlwcmludCBjb2xvcmVkICRlcnJvcl9jb2xvciwgX18oIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIik7CisJCWlmIChwcm9tcHRfeWVzbm8gX18oIkFwcGx5IHRoZW0gdG8gdGhlIHdvcmt0cmVlIGFueXdheT8gIikpIHsKKwkJCXJldHVybiBydW5fZ2l0X2FwcGx5ICdhcHBseSAnLiRyZXZlcnNlLCBAXzsKKwkJfSBlbHNlIHsKKwkJCXByaW50IGNvbG9yZWQgJGVycm9yX2NvbG9yLCBfXygiTm90aGluZyB3YXMgYXBwbGllZC5cbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlwcmludCBTVERFUlIgQF87CisJCXJldHVybiAwOworCX0KK30KKworc3ViIHBhdGNoX3VwZGF0ZV9jbWQgeworCW15IEBhbGxfbW9kcyA9IGxpc3RfbW9kaWZpZWQoJHBhdGNoX21vZGVfZmxhdm91cntGSUxURVJ9KTsKKwllcnJvcl9tc2cgc3ByaW50ZihfXygiaWdub3JpbmcgdW5tZXJnZWQ6ICVzXG4iKSwgJF8tPntWQUxVRX0pCisJCWZvciBncmVwIHsgJF8tPntVTk1FUkdFRH0gfSBAYWxsX21vZHM7CisJQGFsbF9tb2RzID0gZ3JlcCB7ICEkXy0+e1VOTUVSR0VEfSB9IEBhbGxfbW9kczsKKworCW15IEBtb2RzID0gZ3JlcCB7ICEoJF8tPntCSU5BUll9KSB9IEBhbGxfbW9kczsKKwlteSBAdGhlbTsKKworCWlmICghQG1vZHMpIHsKKwkJaWYgKEBhbGxfbW9kcykgeworCQkJcHJpbnQgU1RERVJSIF9fKCJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkLlxuIik7CisJCX0gZWxzZSB7CisJCQlwcmludCBTVERFUlIgX18oIk5vIGNoYW5nZXMuXG4iKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJaWYgKCRwYXRjaF9tb2RlX29ubHkpIHsKKwkJQHRoZW0gPSBAbW9kczsKKwl9CisJZWxzZSB7CisJCUB0aGVtID0gbGlzdF9hbmRfY2hvb3NlKHsgUFJPTVBUID0+IF9fKCdQYXRjaCB1cGRhdGUnKSwKKwkJCQkJICBIRUFERVIgPT4gJHN0YXR1c19oZWFkLCB9LAorCQkJCQlAbW9kcyk7CisJfQorCWZvciAoQHRoZW0pIHsKKwkJcmV0dXJuIDAgaWYgcGF0Y2hfdXBkYXRlX2ZpbGUoJF8tPntWQUxVRX0pOworCX0KK30KKworIyBHZW5lcmF0ZSBhIG9uZSBsaW5lIHN1bW1hcnkgb2YgYSBodW5rLgorc3ViIHN1bW1hcml6ZV9odW5rIHsKKwlteSAkcmh1bmsgPSBzaGlmdDsKKwlteSAkc3VtbWFyeSA9ICRyaHVuay0+e1RFWFR9WzBdOworCisJIyBLZWVwIHRoZSBsaW5lIG51bWJlcnMsIGRpc2NhcmQgZXh0cmEgY29udGV4dC4KKwkkc3VtbWFyeSA9fiBzL0BAKC4qPylAQC4qLyQxIC9zOworCSRzdW1tYXJ5IC49ICIgIiB4ICgyMCAtIGxlbmd0aCAkc3VtbWFyeSk7CisKKwkjIEFkZCBzb21lIHVzZXIgY29udGV4dC4KKwlmb3IgbXkgJGxpbmUgKEB7JHJodW5rLT57VEVYVH19KSB7CisJCWlmICgkbGluZSA9fiBtL15bKy1dLipcdy8pIHsKKwkJCSRzdW1tYXJ5IC49ICRsaW5lOworCQkJbGFzdDsKKwkJfQorCX0KKworCWNob21wICRzdW1tYXJ5OworCXJldHVybiBzdWJzdHIoJHN1bW1hcnksIDAsIDgwKSAuICJcbiI7Cit9CisKKworIyBQcmludCBhIG9uZS1saW5lIHN1bW1hcnkgb2YgZWFjaCBodW5rIGluIHRoZSBhcnJheSByZWYgaW4KKyMgdGhlIGZpcnN0IGFyZ3VtZW50LCBzdGFydGluZyB3aXRoIHRoZSBpbmRleCBpbiB0aGUgMm5kLgorc3ViIGRpc3BsYXlfaHVua3MgeworCW15ICgkaHVua3MsICRpKSA9IEBfOworCW15ICRjdHIgPSAwOworCSRpIHx8PSAwOworCWZvciAoOyAkaSA8IEAkaHVua3MgJiYgJGN0ciA8IDIwOyAkaSsrLCAkY3RyKyspIHsKKwkJbXkgJHN0YXR1cyA9ICIgIjsKKwkJaWYgKGRlZmluZWQgJGh1bmtzLT5bJGlde1VTRX0pIHsKKwkJCSRzdGF0dXMgPSAkaHVua3MtPlskaV17VVNFfSA/ICIrIiA6ICItIjsKKwkJfQorCQlwcmludGYgIiVzJTJkOiAlcyIsCisJCQkkc3RhdHVzLAorCQkJJGkgKyAxLAorCQkJc3VtbWFyaXplX2h1bmsoJGh1bmtzLT5bJGldKTsKKwl9CisJcmV0dXJuICRpOworfQorCitteSAlcGF0Y2hfdXBkYXRlX3Byb21wdF9tb2RlcyA9ICgKKwlzdGFnZSA9PiB7CisJCW1vZGUgPT4gTl9fKCJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlkZWxldGlvbiA9PiBOX18oIlN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCWh1bmsgPT4gTl9fKCJTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwl9LAorCXN0YXNoID0+IHsKKwkJbW9kZSA9PiBOX18oIlN0YXNoIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCWRlbGV0aW9uID0+IE5fXygiU3Rhc2ggZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJaHVuayA9PiBOX18oIlN0YXNoIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIpLAorCX0sCisJcmVzZXRfaGVhZCA9PiB7CisJCW1vZGUgPT4gTl9fKCJVbnN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCWRlbGV0aW9uID0+IE5fXygiVW5zdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlodW5rID0+IE5fXygiVW5zdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwl9LAorCXJlc2V0X25vdGhlYWQgPT4geworCQltb2RlID0+IE5fXygiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJZGVsZXRpb24gPT4gTl9fKCJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlodW5rID0+IE5fXygiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIiksCisJfSwKKwljaGVja291dF9pbmRleCA9PiB7CisJCW1vZGUgPT4gTl9fKCJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJZGVsZXRpb24gPT4gTl9fKCJEaXNjYXJkIGRlbGV0aW9uIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJaHVuayA9PiBOX18oIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwl9LAorCWNoZWNrb3V0X2hlYWQgPT4geworCQltb2RlID0+IE5fXygiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlkZWxldGlvbiA9PiBOX18oIkRpc2NhcmQgZGVsZXRpb24gZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJaHVuayA9PiBOX18oIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJfSwKKwljaGVja291dF9ub3RoZWFkID0+IHsKKwkJbW9kZSA9PiBOX18oIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlkZWxldGlvbiA9PiBOX18oIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlodW5rID0+IE5fXygiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCX0sCisJd29ya3RyZWVfaGVhZCA9PiB7CisJCW1vZGUgPT4gTl9fKCJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJZGVsZXRpb24gPT4gTl9fKCJEaXNjYXJkIGRlbGV0aW9uIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJaHVuayA9PiBOX18oIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwl9LAorCXdvcmt0cmVlX25vdGhlYWQgPT4geworCQltb2RlID0+IE5fXygiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJZGVsZXRpb24gPT4gTl9fKCJBcHBseSBkZWxldGlvbiB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlodW5rID0+IE5fXygiQXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJfSwKKyk7CisKK3N1YiBwYXRjaF91cGRhdGVfZmlsZSB7CisJbXkgJHF1aXQgPSAwOworCW15ICgkaXgsICRudW0pOworCW15ICRwYXRoID0gc2hpZnQ7CisJbXkgKCRoZWFkLCBAaHVuaykgPSBwYXJzZV9kaWZmKCRwYXRoKTsKKwkoJGhlYWQsIG15ICRtb2RlLCBteSAkZGVsZXRpb24pID0gcGFyc2VfZGlmZl9oZWFkZXIoJGhlYWQpOworCWZvciAoQHskaGVhZC0+e0RJU1BMQVl9fSkgeworCQlwcmludDsKKwl9CisKKwlpZiAoQHskbW9kZS0+e1RFWFR9fSkgeworCQl1bnNoaWZ0IEBodW5rLCAkbW9kZTsKKwl9CisJaWYgKEB7JGRlbGV0aW9uLT57VEVYVH19KSB7CisJCWZvcmVhY2ggbXkgJGh1bmsgKEBodW5rKSB7CisJCQlwdXNoIEB7JGRlbGV0aW9uLT57VEVYVH19LCBAeyRodW5rLT57VEVYVH19OworCQkJcHVzaCBAeyRkZWxldGlvbi0+e0RJU1BMQVl9fSwgQHskaHVuay0+e0RJU1BMQVl9fTsKKwkJfQorCQlAaHVuayA9ICgkZGVsZXRpb24pOworCX0KKworCSRudW0gPSBzY2FsYXIgQGh1bms7CisJJGl4ID0gMDsKKworCXdoaWxlICgxKSB7CisJCW15ICgkcHJldiwgJG5leHQsICRvdGhlciwgJHVuZGVjaWRlZCwgJGkpOworCQkkb3RoZXIgPSAnJzsKKworCQlpZiAoJG51bSA8PSAkaXgpIHsKKwkJCSRpeCA9IDA7CisJCX0KKwkJZm9yICgkaSA9IDA7ICRpIDwgJGl4OyAkaSsrKSB7CisJCQlpZiAoIWRlZmluZWQgJGh1bmtbJGlde1VTRX0pIHsKKwkJCQkkcHJldiA9IDE7CisJCQkJJG90aGVyIC49ICcsayc7CisJCQkJbGFzdDsKKwkJCX0KKwkJfQorCQlpZiAoJGl4KSB7CisJCQkkb3RoZXIgLj0gJyxLJzsKKwkJfQorCQlmb3IgKCRpID0gJGl4ICsgMTsgJGkgPCAkbnVtOyAkaSsrKSB7CisJCQlpZiAoIWRlZmluZWQgJGh1bmtbJGlde1VTRX0pIHsKKwkJCQkkbmV4dCA9IDE7CisJCQkJJG90aGVyIC49ICcsaic7CisJCQkJbGFzdDsKKwkJCX0KKwkJfQorCQlpZiAoJGl4IDwgJG51bSAtIDEpIHsKKwkJCSRvdGhlciAuPSAnLEonOworCQl9CisJCWlmICgkbnVtID4gMSkgeworCQkJJG90aGVyIC49ICcsZywvJzsKKwkJfQorCQlmb3IgKCRpID0gMDsgJGkgPCAkbnVtOyAkaSsrKSB7CisJCQlpZiAoIWRlZmluZWQgJGh1bmtbJGlde1VTRX0pIHsKKwkJCQkkdW5kZWNpZGVkID0gMTsKKwkJCQlsYXN0OworCQkJfQorCQl9CisJCWxhc3QgaWYgKCEkdW5kZWNpZGVkKTsKKworCQlpZiAoJGh1bmtbJGl4XXtUWVBFfSBlcSAnaHVuaycgJiYKKwkJICAgIGh1bmtfc3BsaXR0YWJsZSgkaHVua1skaXhde1RFWFR9KSkgeworCQkJJG90aGVyIC49ICcscyc7CisJCX0KKwkJaWYgKCRodW5rWyRpeF17VFlQRX0gZXEgJ2h1bmsnKSB7CisJCQkkb3RoZXIgLj0gJyxlJzsKKwkJfQorCQlmb3IgKEB7JGh1bmtbJGl4XXtESVNQTEFZfX0pIHsKKwkJCXByaW50OworCQl9CisJCXByaW50IGNvbG9yZWQgJHByb21wdF9jb2xvciwgIigiLCAoJGl4KzEpLCAiLyRudW0pICIsCisJCQlzcHJpbnRmKF9fKCRwYXRjaF91cGRhdGVfcHJvbXB0X21vZGVzeyRwYXRjaF9tb2RlfXskaHVua1skaXhde1RZUEV9fSksICRvdGhlcik7CisKKwkJbXkgJGxpbmUgPSBwcm9tcHRfc2luZ2xlX2NoYXJhY3RlcjsKKwkJbGFzdCB1bmxlc3MgZGVmaW5lZCAkbGluZTsKKwkJaWYgKCRsaW5lKSB7CisJCQlpZiAoJGxpbmUgPX4gL155L2kpIHsKKwkJCQkkaHVua1skaXhde1VTRX0gPSAxOworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9ebi9pKSB7CisJCQkJJGh1bmtbJGl4XXtVU0V9ID0gMDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXmEvaSkgeworCQkJCXdoaWxlICgkaXggPCAkbnVtKSB7CisJCQkJCWlmICghZGVmaW5lZCAkaHVua1skaXhde1VTRX0pIHsKKwkJCQkJCSRodW5rWyRpeF17VVNFfSA9IDE7CisJCQkJCX0KKwkJCQkJJGl4Kys7CisJCQkJfQorCQkJCW5leHQ7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15nKC4qKS8pIHsKKwkJCQlteSAkcmVzcG9uc2UgPSAkMTsKKwkJCQl1bmxlc3MgKCRvdGhlciA9fiAvZy8pIHsKKwkJCQkJZXJyb3JfbXNnIF9fKCJObyBvdGhlciBodW5rcyB0byBnb3RvXG4iKTsKKwkJCQkJbmV4dDsKKwkJCQl9CisJCQkJbXkgJG5vID0gJGl4ID4gMTAgPyAkaXggLSAxMCA6IDA7CisJCQkJd2hpbGUgKCRyZXNwb25zZSBlcSAnJykgeworCQkJCQkkbm8gPSBkaXNwbGF5X2h1bmtzKFxAaHVuaywgJG5vKTsKKwkJCQkJaWYgKCRubyA8ICRudW0pIHsKKwkJCQkJCXByaW50IF9fKCJnbyB0byB3aGljaCBodW5rICg8cmV0PiB0byBzZWUgbW9yZSk/ICIpOworCQkJCQl9IGVsc2UgeworCQkJCQkJcHJpbnQgX18oImdvIHRvIHdoaWNoIGh1bms/ICIpOworCQkJCQl9CisJCQkJCSRyZXNwb25zZSA9IDxTVERJTj47CisJCQkJCWlmICghZGVmaW5lZCAkcmVzcG9uc2UpIHsKKwkJCQkJCSRyZXNwb25zZSA9ICcnOworCQkJCQl9CisJCQkJCWNob21wICRyZXNwb25zZTsKKwkJCQl9CisJCQkJaWYgKCRyZXNwb25zZSAhfiAvXlxzKlxkK1xzKiQvKSB7CisJCQkJCWVycm9yX21zZyBzcHJpbnRmKF9fKCJJbnZhbGlkIG51bWJlcjogJyVzJ1xuIiksCisJCQkJCQkJICAgICAkcmVzcG9uc2UpOworCQkJCX0gZWxzaWYgKDAgPCAkcmVzcG9uc2UgJiYgJHJlc3BvbnNlIDw9ICRudW0pIHsKKwkJCQkJJGl4ID0gJHJlc3BvbnNlIC0gMTsKKwkJCQl9IGVsc2UgeworCQkJCQllcnJvcl9tc2cgc3ByaW50ZihfX24oIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLlxuIiwKKwkJCQkJCQkgICAgICAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLlxuIiwgJG51bSksICRudW0pOworCQkJCX0KKwkJCQluZXh0OworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9eZC9pKSB7CisJCQkJd2hpbGUgKCRpeCA8ICRudW0pIHsKKwkJCQkJaWYgKCFkZWZpbmVkICRodW5rWyRpeF17VVNFfSkgeworCQkJCQkJJGh1bmtbJGl4XXtVU0V9ID0gMDsKKwkJCQkJfQorCQkJCQkkaXgrKzsKKwkJCQl9CisJCQkJbmV4dDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXnEvaSkgeworCQkJCWZvciAoJGkgPSAwOyAkaSA8ICRudW07ICRpKyspIHsKKwkJCQkJaWYgKCFkZWZpbmVkICRodW5rWyRpXXtVU0V9KSB7CisJCQkJCQkkaHVua1skaV17VVNFfSA9IDA7CisJCQkJCX0KKwkJCQl9CisJCQkJJHF1aXQgPSAxOworCQkJCWxhc3Q7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gbXxeLyguKil8KSB7CisJCQkJbXkgJHJlZ2V4ID0gJDE7CisJCQkJdW5sZXNzICgkb3RoZXIgPX4gbXwvfCkgeworCQkJCQllcnJvcl9tc2cgX18oIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaFxuIik7CisJCQkJCW5leHQ7CisJCQkJfQorCQkJCWlmICgkcmVnZXggZXEgIiIpIHsKKwkJCQkJcHJpbnQgY29sb3JlZCAkcHJvbXB0X2NvbG9yLCBfXygic2VhcmNoIGZvciByZWdleD8gIik7CisJCQkJCSRyZWdleCA9IDxTVERJTj47CisJCQkJCWlmIChkZWZpbmVkICRyZWdleCkgeworCQkJCQkJY2hvbXAgJHJlZ2V4OworCQkJCQl9CisJCQkJfQorCQkJCW15ICRzZWFyY2hfc3RyaW5nOworCQkJCWV2YWwgeworCQkJCQkkc2VhcmNoX3N0cmluZyA9IHFyeyRyZWdleH1tOworCQkJCX07CisJCQkJaWYgKCRAKSB7CisJCQkJCW15ICgkZXJyLCRleHApID0gKCRALCAkMSk7CisJCQkJCSRlcnIgPX4gcy8gYXQgLipnaXQtYWRkLS1pbnRlcmFjdGl2ZSBsaW5lIFxkKywgPFNURElOPiBsaW5lIFxkKy4qJC8vOworCQkJCQllcnJvcl9tc2cgc3ByaW50ZihfXygiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzXG4iKSwgJGV4cCwgJGVycik7CisJCQkJCW5leHQ7CisJCQkJfQorCQkJCW15ICRpeSA9ICRpeDsKKwkJCQl3aGlsZSAoMSkgeworCQkJCQlteSAkdGV4dCA9IGpvaW4gKCIiLCBAeyRodW5rWyRpeV17VEVYVH19KTsKKwkJCQkJbGFzdCBpZiAoJHRleHQgPX4gJHNlYXJjaF9zdHJpbmcpOworCQkJCQkkaXkrKzsKKwkJCQkJJGl5ID0gMCBpZiAoJGl5ID49ICRudW0pOworCQkJCQlpZiAoJGl4ID09ICRpeSkgeworCQkJCQkJZXJyb3JfbXNnIF9fKCJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm5cbiIpOworCQkJCQkJbGFzdDsKKwkJCQkJfQorCQkJCX0KKwkJCQkkaXggPSAkaXk7CisJCQkJbmV4dDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXksvKSB7CisJCQkJaWYgKCRvdGhlciA9fiAvSy8pIHsKKwkJCQkJJGl4LS07CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllcnJvcl9tc2cgX18oIk5vIHByZXZpb3VzIGh1bmtcbiIpOworCQkJCX0KKwkJCQluZXh0OworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9eSi8pIHsKKwkJCQlpZiAoJG90aGVyID1+IC9KLykgeworCQkJCQkkaXgrKzsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWVycm9yX21zZyBfXygiTm8gbmV4dCBodW5rXG4iKTsKKwkJCQl9CisJCQkJbmV4dDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXmsvKSB7CisJCQkJaWYgKCRvdGhlciA9fiAvay8pIHsKKwkJCQkJd2hpbGUgKDEpIHsKKwkJCQkJCSRpeC0tOworCQkJCQkJbGFzdCBpZiAoISRpeCB8fAorCQkJCQkJCSAhZGVmaW5lZCAkaHVua1skaXhde1VTRX0pOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllcnJvcl9tc2cgX18oIk5vIHByZXZpb3VzIGh1bmtcbiIpOworCQkJCX0KKwkJCQluZXh0OworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9eai8pIHsKKwkJCQlpZiAoJG90aGVyICF+IC9qLykgeworCQkJCQllcnJvcl9tc2cgX18oIk5vIG5leHQgaHVua1xuIik7CisJCQkJCW5leHQ7CisJCQkJfQorCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9ecy8pIHsKKwkJCQl1bmxlc3MgKCRvdGhlciA9fiAvcy8pIHsKKwkJCQkJZXJyb3JfbXNnIF9fKCJTb3JyeSwgY2Fubm90IHNwbGl0IHRoaXMgaHVua1xuIik7CisJCQkJCW5leHQ7CisJCQkJfQorCQkJCW15IEBzcGxpdCA9IHNwbGl0X2h1bmsoJGh1bmtbJGl4XXtURVhUfSwgJGh1bmtbJGl4XXtESVNQTEFZfSk7CisJCQkJaWYgKDEgPCBAc3BsaXQpIHsKKwkJCQkJcHJpbnQgY29sb3JlZCAkaGVhZGVyX2NvbG9yLCBzcHJpbnRmKAorCQkJCQkJX19uKCJTcGxpdCBpbnRvICVkIGh1bmsuXG4iLAorCQkJCQkJICAgICJTcGxpdCBpbnRvICVkIGh1bmtzLlxuIiwKKwkJCQkJCSAgICBzY2FsYXIoQHNwbGl0KSksIHNjYWxhcihAc3BsaXQpKTsKKwkJCQl9CisJCQkJc3BsaWNlIChAaHVuaywgJGl4LCAxLCBAc3BsaXQpOworCQkJCSRudW0gPSBzY2FsYXIgQGh1bms7CisJCQkJbmV4dDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXmUvKSB7CisJCQkJdW5sZXNzICgkb3RoZXIgPX4gL2UvKSB7CisJCQkJCWVycm9yX21zZyBfXygiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVua1xuIik7CisJCQkJCW5leHQ7CisJCQkJfQorCQkJCW15ICRuZXdodW5rID0gZWRpdF9odW5rX2xvb3AoJGhlYWQsIFxAaHVuaywgJGl4KTsKKwkJCQlpZiAoZGVmaW5lZCAkbmV3aHVuaykgeworCQkJCQlzcGxpY2UgQGh1bmssICRpeCwgMSwgJG5ld2h1bms7CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJaGVscF9wYXRjaF9jbWQoJG90aGVyKTsKKwkJCQluZXh0OworCQkJfQorCQkJIyBzb2Z0IGluY3JlbWVudAorCQkJd2hpbGUgKDEpIHsKKwkJCQkkaXgrKzsKKwkJCQlsYXN0IGlmICgkaXggPj0gJG51bSB8fAorCQkJCQkgIWRlZmluZWQgJGh1bmtbJGl4XXtVU0V9KTsKKwkJCX0KKwkJfQorCX0KKworCUBodW5rID0gY29hbGVzY2Vfb3ZlcmxhcHBpbmdfaHVua3MoQGh1bmspOworCisJbXkgJG5fbG9mcyA9IDA7CisJbXkgQHJlc3VsdCA9ICgpOworCWZvciAoQGh1bmspIHsKKwkJaWYgKCRfLT57VVNFfSkgeworCQkJcHVzaCBAcmVzdWx0LCBAeyRfLT57VEVYVH19OworCQl9CisJfQorCisJaWYgKEByZXN1bHQpIHsKKwkJbXkgQHBhdGNoID0gcmVhc3NlbWJsZV9wYXRjaCgkaGVhZC0+e1RFWFR9LCBAcmVzdWx0KTsKKwkJbXkgJGFwcGx5X3JvdXRpbmUgPSAkcGF0Y2hfbW9kZV9mbGF2b3Vye0FQUExZfTsKKwkJJiRhcHBseV9yb3V0aW5lKEBwYXRjaCk7CisJCXJlZnJlc2goKTsKKwl9CisKKwlwcmludCAiXG4iOworCXJldHVybiAkcXVpdDsKK30KKworc3ViIGRpZmZfY21kIHsKKwlteSBAbW9kcyA9IGxpc3RfbW9kaWZpZWQoJ2luZGV4LW9ubHknKTsKKwlAbW9kcyA9IGdyZXAgeyAhKCRfLT57QklOQVJZfSkgfSBAbW9kczsKKwlyZXR1cm4gaWYgKCFAbW9kcyk7CisJbXkgKEB0aGVtKSA9IGxpc3RfYW5kX2Nob29zZSh7IFBST01QVCA9PiBfXygnUmV2aWV3IGRpZmYnKSwKKwkJCQkgICAgIElNTUVESUFURSA9PiAxLAorCQkJCSAgICAgSEVBREVSID0+ICRzdGF0dXNfaGVhZCwgfSwKKwkJCQkgICBAbW9kcyk7CisJcmV0dXJuIGlmICghQHRoZW0pOworCW15ICRyZWZlcmVuY2UgPSAoaXNfaW5pdGlhbF9jb21taXQoKSkgPyBnZXRfZW1wdHlfdHJlZSgpIDogJ0hFQUQnOworCXN5c3RlbShxdyhnaXQgZGlmZiAtcCAtLWNhY2hlZCksICRyZWZlcmVuY2UsICctLScsCisJCW1hcCB7ICRfLT57VkFMVUV9IH0gQHRoZW0pOworfQorCitzdWIgcXVpdF9jbWQgeworCXByaW50IF9fKCJCeWUuXG4iKTsKKwlleGl0KDApOworfQorCitzdWIgaGVscF9jbWQgeworIyBUUkFOU0xBVE9SUzogcGxlYXNlIGRvIG5vdCB0cmFuc2xhdGUgdGhlIGNvbW1hbmQgbmFtZXMKKyMgJ3N0YXR1cycsICd1cGRhdGUnLCAncmV2ZXJ0JywgZXRjLgorCXByaW50IGNvbG9yZWQgJGhlbHBfY29sb3IsIF9fIDw8J0VPRicgOworc3RhdHVzICAgICAgICAtIHNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzCit1cGRhdGUgICAgICAgIC0gYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzCityZXZlcnQgICAgICAgIC0gcmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb24KK3BhdGNoICAgICAgICAgLSBwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHkKK2RpZmYgICAgICAgICAgLSB2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleAorYWRkIHVudHJhY2tlZCAtIGFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcworRU9GCit9CisKK3N1YiBwcm9jZXNzX2FyZ3MgeworCXJldHVybiB1bmxlc3MgQEFSR1Y7CisJbXkgJGFyZyA9IHNoaWZ0IEBBUkdWOworCWlmICgkYXJnID1+IC8tLXBhdGNoKD86PSguKikpPy8pIHsKKwkJaWYgKGRlZmluZWQgJDEpIHsKKwkJCWlmICgkMSBlcSAncmVzZXQnKSB7CisJCQkJJHBhdGNoX21vZGUgPSAncmVzZXRfaGVhZCc7CisJCQkJJHBhdGNoX21vZGVfcmV2aXNpb24gPSAnSEVBRCc7CisJCQkJJGFyZyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSBfXygibWlzc2luZyAtLSIpOworCQkJCWlmICgkYXJnIG5lICctLScpIHsKKwkJCQkJJHBhdGNoX21vZGVfcmV2aXNpb24gPSAkYXJnOworCQkJCQkkcGF0Y2hfbW9kZSA9ICgkYXJnIGVxICdIRUFEJyA/CisJCQkJCQkgICAgICAgJ3Jlc2V0X2hlYWQnIDogJ3Jlc2V0X25vdGhlYWQnKTsKKwkJCQkJJGFyZyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSBfXygibWlzc2luZyAtLSIpOworCQkJCX0KKwkJCX0gZWxzaWYgKCQxIGVxICdjaGVja291dCcpIHsKKwkJCQkkYXJnID0gc2hpZnQgQEFSR1Ygb3IgZGllIF9fKCJtaXNzaW5nIC0tIik7CisJCQkJaWYgKCRhcmcgZXEgJy0tJykgeworCQkJCQkkcGF0Y2hfbW9kZSA9ICdjaGVja291dF9pbmRleCc7CisJCQkJfSBlbHNlIHsKKwkJCQkJJHBhdGNoX21vZGVfcmV2aXNpb24gPSAkYXJnOworCQkJCQkkcGF0Y2hfbW9kZSA9ICgkYXJnIGVxICdIRUFEJyA/CisJCQkJCQkgICAgICAgJ2NoZWNrb3V0X2hlYWQnIDogJ2NoZWNrb3V0X25vdGhlYWQnKTsKKwkJCQkJJGFyZyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSBfXygibWlzc2luZyAtLSIpOworCQkJCX0KKwkJCX0gZWxzaWYgKCQxIGVxICd3b3JrdHJlZScpIHsKKwkJCQkkYXJnID0gc2hpZnQgQEFSR1Ygb3IgZGllIF9fKCJtaXNzaW5nIC0tIik7CisJCQkJaWYgKCRhcmcgZXEgJy0tJykgeworCQkJCQkkcGF0Y2hfbW9kZSA9ICdjaGVja291dF9pbmRleCc7CisJCQkJfSBlbHNlIHsKKwkJCQkJJHBhdGNoX21vZGVfcmV2aXNpb24gPSAkYXJnOworCQkJCQkkcGF0Y2hfbW9kZSA9ICgkYXJnIGVxICdIRUFEJyA/CisJCQkJCQkgICAgICAgJ3dvcmt0cmVlX2hlYWQnIDogJ3dvcmt0cmVlX25vdGhlYWQnKTsKKwkJCQkJJGFyZyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSBfXygibWlzc2luZyAtLSIpOworCQkJCX0KKwkJCX0gZWxzaWYgKCQxIGVxICdzdGFnZScgb3IgJDEgZXEgJ3N0YXNoJykgeworCQkJCSRwYXRjaF9tb2RlID0gJDE7CisJCQkJJGFyZyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSBfXygibWlzc2luZyAtLSIpOworCQkJfSBlbHNlIHsKKwkJCQlkaWUgc3ByaW50ZihfXygidW5rbm93biAtLXBhdGNoIG1vZGU6ICVzIiksICQxKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCSRwYXRjaF9tb2RlID0gJ3N0YWdlJzsKKwkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgX18oIm1pc3NpbmcgLS0iKTsKKwkJfQorCQlkaWUgc3ByaW50ZihfXygiaW52YWxpZCBhcmd1bWVudCAlcywgZXhwZWN0aW5nIC0tIiksCisJCQkgICAgICAgJGFyZykgdW5sZXNzICRhcmcgZXEgIi0tIjsKKwkJJXBhdGNoX21vZGVfZmxhdm91ciA9ICV7JHBhdGNoX21vZGVzeyRwYXRjaF9tb2RlfX07CisJCSRwYXRjaF9tb2RlX29ubHkgPSAxOworCX0KKwllbHNpZiAoJGFyZyBuZSAiLS0iKSB7CisJCWRpZSBzcHJpbnRmKF9fKCJpbnZhbGlkIGFyZ3VtZW50ICVzLCBleHBlY3RpbmcgLS0iKSwgJGFyZyk7CisJfQorfQorCitzdWIgbWFpbl9sb29wIHsKKwlteSBAY21kID0gKFsgJ3N0YXR1cycsIFwmc3RhdHVzX2NtZCwgXSwKKwkJICAgWyAndXBkYXRlJywgXCZ1cGRhdGVfY21kLCBdLAorCQkgICBbICdyZXZlcnQnLCBcJnJldmVydF9jbWQsIF0sCisJCSAgIFsgJ2FkZCB1bnRyYWNrZWQnLCBcJmFkZF91bnRyYWNrZWRfY21kLCBdLAorCQkgICBbICdwYXRjaCcsIFwmcGF0Y2hfdXBkYXRlX2NtZCwgXSwKKwkJICAgWyAnZGlmZicsIFwmZGlmZl9jbWQsIF0sCisJCSAgIFsgJ3F1aXQnLCBcJnF1aXRfY21kLCBdLAorCQkgICBbICdoZWxwJywgXCZoZWxwX2NtZCwgXSwKKwkpOworCXdoaWxlICgxKSB7CisJCW15ICgkaXQpID0gbGlzdF9hbmRfY2hvb3NlKHsgUFJPTVBUID0+IF9fKCdXaGF0IG5vdycpLAorCQkJCQkgICAgIFNJTkdMRVRPTiA9PiAxLAorCQkJCQkgICAgIExJU1RfRkxBVCA9PiA0LAorCQkJCQkgICAgIEhFQURFUiA9PiBfXygnKioqIENvbW1hbmRzICoqKicpLAorCQkJCQkgICAgIE9OX0VPRiA9PiBcJnF1aXRfY21kLAorCQkJCQkgICAgIElNTUVESUFURSA9PiAxIH0sIEBjbWQpOworCQlpZiAoJGl0KSB7CisJCQlldmFsIHsKKwkJCQkkaXQtPlsxXS0+KCk7CisJCQl9OworCQkJaWYgKCRAKSB7CisJCQkJcHJpbnQgIiRAIjsKKwkJCX0KKwkJfQorCX0KK30KKworcHJvY2Vzc19hcmdzKCk7CityZWZyZXNoKCk7CitpZiAoJHBhdGNoX21vZGVfb25seSkgeworCXBhdGNoX3VwZGF0ZV9jbWQoKTsKK30KK2Vsc2UgeworCXN0YXR1c19jbWQoKTsKKwltYWluX2xvb3AoKTsKK30KZGlmZiAtLWdpdCBhL2dpdC1hcmNoaW1wb3J0LnBlcmwgYi9naXQtYXJjaGltcG9ydC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3YzE3M2MKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtYXJjaGltcG9ydC5wZXJsCkBAIC0wLDAgKzEsMTEzNCBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIFRoaXMgdG9vbCBpcyBjb3B5cmlnaHQgKGMpIDIwMDUsIE1hcnRpbiBMYW5naG9mZi4KKyMgSXQgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdudSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorIworIyBUaGUgYmFzaWMgaWRlYSBpcyB0byB3YWxrIHRoZSBvdXRwdXQgb2YgdGxhIGFicm93c2UsCisjIGZldGNoIHRoZSBjaGFuZ2VzZXRzIGFuZCBhcHBseSB0aGVtLgorIworCis9aGVhZDEgSW52b2NhdGlvbgorCisgICAgZ2l0IGFyY2hpbXBvcnQgWyAtaCBdIFsgLXYgXSBbIC1vIF0gWyAtYSBdIFsgLWYgXSBbIC1UIF0KKwlbIC1EIGRlcHRoXSBbIC10IHRlbXBkaXIgXSA8YXJjaGl2ZT4vPGJyYW5jaD4gWyA8YXJjaGl2ZT4vPGJyYW5jaD4gXQorCitJbXBvcnRzIGEgcHJvamVjdCBmcm9tIG9uZSBvciBtb3JlIEFyY2ggcmVwb3NpdG9yaWVzLiBJdCB3aWxsIGZvbGxvdyBicmFuY2hlcworYW5kIHJlcG9zaXRvcmllcyB3aXRoaW4gdGhlIG5hbWVzcGFjZXMgZGVmaW5lZCBieSB0aGUgPGFyY2hpdmUvYnJhbmNoPgorcGFyYW1ldGVycyBzdXBwbGllZC4gSWYgaXQgY2Fubm90IGZpbmQgdGhlIHJlbW90ZSBicmFuY2ggYSBtZXJnZSBjb21lcyBmcm9tCitpdCB3aWxsIGp1c3QgaW1wb3J0IGl0IGFzIGEgcmVndWxhciBjb21taXQuIElmIGl0IGNhbiBmaW5kIGl0LCBpdCB3aWxsIG1hcmsgaXQKK2FzIGEgbWVyZ2Ugd2hlbmV2ZXIgcG9zc2libGUuCisKK1NlZSBtYW4gKDEpIGdpdC1hcmNoaW1wb3J0IGZvciBtb3JlIGRldGFpbHMuCisKKz1oZWFkMSBUT0RPCisKKyAtIGNyZWF0ZSB0YWcgb2JqZWN0cyBpbnN0ZWFkIG9mIHJlZiB0YWdzCisgLSBhdWRpdCBzaGVsbC1lc2NhcGluZyBvZiBmaWxlbmFtZXMKKyAtIGhpZGUgb3VyIHByaXZhdGUgdGFncyBzb21ld2hlcmUgc21hcnRlcgorIC0gZmluZCBhIHdheSB0byBtYWtlICJjYXQgKnBhdGNoZXMgfCBwYXRjaCIgc2FmZSBldmVuIHdoZW4gcGF0Y2hmaWxlcyBhcmUgbWlzc2luZyBuZXdsaW5lcworIC0gc29ydCBhbmQgYXBwbHkgcGF0Y2hlcyBieSBncmFwaGluZyBhbmNlc3RyeSByZWxhdGlvbnMgaW5zdGVhZCBvZiBqdXN0CisgICByZWx5aW5nIGluIGRhdGVzIHN1cHBsaWVkIGluIHRoZSBjaGFuZ2VzZXQgaXRzZWxmLgorICAgdGxhIGFuY2VzdHJ5LWdyYXBoIC1tIGNvdWxkIGJlIGhlbHBmdWwgaGVyZS4uLgorCis9aGVhZDEgRGV2ZWwgdHJpY2tzCisKK0FkZCBwcmludCBpbiBmcm9udCBvZiB0aGUgc2hlbGwgY29tbWFuZHMgaW52b2tlZCB2aWEgYmFja3RpY2tzLgorCis9aGVhZDEgRGV2ZWwgTm90ZXMKKworVGhlcmUgYXJlIHNldmVyYWwgcGxhY2VzIHdoZXJlIEFyY2ggYW5kIGdpdCB0ZXJtaW5vbG9neSBhcmUgaW50ZXJtaXhlZAorYW5kIHBvdGVudGlhbGx5IGNvbmZ1c2VkLgorCitUaGUgbm90aW9uIG9mIGEgImJyYW5jaCIgaW4gZ2l0IGlzIGFwcHJveGltYXRlbHkgZXF1aXZhbGVudCB0bworYSAiYXJjaGl2ZS9jYXRlZ29yeS0tYnJhbmNoLS12ZXJzaW9uIiBpbiBBcmNoLiAgQWxzbywgaXQgc2hvdWxkIGJlIG5vdGVkCit0aGF0IHRoZSAiLS1icmFuY2giIHBvcnRpb24gb2YgImFyY2hpdmUvY2F0ZWdvcnktLWJyYW5jaC0tdmVyc2lvbiIgaXMgcmVhbGx5CitvcHRpb25hbCBpbiBBcmNoIGFsdGhvdWdoIG5vdCBtYW55IHBlb3BsZSAobm9yIHRvb2xzISkgc2VlbSB0byBrbm93IHRoaXMuCitUaGlzIG1lYW5zIHRoYXQgImFyY2hpdmUvY2F0ZWdvcnktLXZlcnNpb24iIGlzIGFsc28gYSB2YWxpZCAiYnJhbmNoIgoraW4gZ2l0IHRlcm1zLgorCitXZSBhbHdheXMgcmVmZXIgdG8gQXJjaCBuYW1lcyBieSB0aGVpciBmdWxseSBxdWFsaWZpZWQgdmFyaWFudCAod2hpY2gKK21lYW5zIHRoZSAiYXJjaGl2ZSIgbmFtZSBpcyBwcmVmaXhlZC4KKworRm9yIHBlb3BsZSB1bmZhbWlsaWFyIHdpdGggQXJjaCwgYW4gImFyY2hpdmUiIGlzIHRoZSB0ZXJtIGZvciAicmVwb3NpdG9yeSIsCithbmQgY2FuIGNvbnRhaW4gbXVsdGlwbGUsIHVucmVsYXRlZCBicmFuY2hlcy4KKworPWN1dAorCit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEdldG9wdDo6U3RkOwordXNlIEZpbGU6OlRlbXAgcXcodGVtcGRpcik7Cit1c2UgRmlsZTo6UGF0aCBxdyhta3BhdGggcm10cmVlKTsKK3VzZSBGaWxlOjpCYXNlbmFtZSBxdyhiYXNlbmFtZSBkaXJuYW1lKTsKK3VzZSBEYXRhOjpEdW1wZXIgcXcvIER1bXBlciAvOwordXNlIElQQzo6T3BlbjI7CisKKyRTSUd7J1BJUEUnfT0iSUdOT1JFIjsKKyRFTlZ7J1RaJ309IlVUQyI7CisKK215ICRnaXRfZGlyID0gJEVOVnsiR0lUX0RJUiJ9IHx8ICIuZ2l0IjsKKyRFTlZ7IkdJVF9ESVIifSA9ICRnaXRfZGlyOworbXkgJHB0YWdfZGlyID0gIiRnaXRfZGlyL2FyY2hpbXBvcnQvdGFncyI7CisKK291cigkb3B0X2gsJG9wdF9mLCRvcHRfdiwkb3B0X1QsJG9wdF90LCRvcHRfRCwkb3B0X2EsJG9wdF9vKTsKKworc3ViIHVzYWdlKCkgeworICAgIHByaW50IFNUREVSUiA8PEVORDsKK3VzYWdlOiBnaXQgYXJjaGltcG9ydCAgICAgIyBmZXRjaC91cGRhdGUgR0lUIGZyb20gQXJjaAorICAgICAgIFsgLWggXSBbIC12IF0gWyAtbyBdIFsgLWEgXSBbIC1mIF0gWyAtVCBdIFsgLUQgZGVwdGggXSBbIC10IHRlbXBkaXIgXQorICAgICAgIHJlcG9zaXRvcnkvYXJjaC1icmFuY2ggWyByZXBvc2l0b3J5L2FyY2gtYnJhbmNoXSAuLi4KK0VORAorICAgIGV4aXQoMSk7Cit9CisKK2dldG9wdHMoImZUaHZhdDpEOiIpIG9yIHVzYWdlKCk7Cit1c2FnZSBpZiAkb3B0X2g7CisKK0BBUkdWID49IDEgb3IgdXNhZ2UoKTsKKyMgJGFyY2hfYnJhbmNoZXM6CisjIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGgga2V5czoKKyMgICA9MSAtIEFyY2ggdmVyc2lvbiAvIGdpdCAnYnJhbmNoJyBkZXRlY3RlZCB2aWEgYWJyb3dzZSBvbiBhIGxpbWl0CisjICAgPjEgLSBBcmNoIHZlcnNpb24gLyBnaXQgJ2JyYW5jaCcgb2YgYW4gYXV4aWxpYXJ5IGJyYW5jaCB3ZSd2ZSBtZXJnZWQKK215ICVhcmNoX2JyYW5jaGVzID0gbWFwIHsgbXkgJGJyYW5jaCA9ICRfOyAkYnJhbmNoID1+IHMvOlteOl0qJC8vOyAkYnJhbmNoID0+IDEgfSBAQVJHVjsKKworIyAkYnJhbmNoX25hbWVfbWFwOgorIyBtYXBzIGFyY2ggYnJhbmNoZXMgdG8gZ2l0IGJyYW5jaCBuYW1lcworbXkgJWJyYW5jaF9uYW1lX21hcCA9IG1hcCB7IG0vXiguKik6KFteOl0qKSQvOyAkMSA9PiAkMiB9IGdyZXAgeyBtLzovIH0gQEFSR1Y7CisKKyRFTlZ7J1RNUERJUid9ID0gJG9wdF90IGlmICRvcHRfdDsgIyAkRU5We1RNUERJUn0gd2lsbCBhZmZlY3QgdGVtcGRpcigpIGNhbGxzOgorbXkgJHRtcCA9IHRlbXBkaXIoJ2dpdC1hcmNoaW1wb3J0LVhYWFhYWCcsIFRNUERJUiA9PiAxLCBDTEVBTlVQID0+IDEpOworJG9wdF92ICYmIHByaW50ICIrIFVzaW5nICR0bXAgYXMgdGVtcG9yYXJ5IGRpcmVjdG9yeVxuIjsKKwordW5sZXNzICgtZCAkZ2l0X2RpcikgeyAjIGluaXRpYWwgaW1wb3J0IG5lZWRzIGVtcHR5IGRpcmVjdG9yeQorICAgIG9wZW5kaXIgRElSLCAnLicgb3IgZGllICJVbmFibGUgdG8gb3BlbiBjdXJyZW50IGRpcmVjdG9yeTogJCFcbiI7CisgICAgd2hpbGUgKG15ICRlbnRyeSA9IHJlYWRkaXIgRElSKSB7CisgICAgICAgICRlbnRyeSA9fiAvXlwuXC4/JC8gb3IKKyAgICAgICAgICAgIGRpZSAiSW5pdGlhbCBpbXBvcnQgbmVlZHMgYW4gZW1wdHkgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiIKKyAgICB9CisgICAgY2xvc2VkaXIgRElSCit9CisKK215ICRkZWZhdWx0X2FyY2hpdmU7CQkjIGRlZmF1bHQgQXJjaCBhcmNoaXZlCitteSAlcmVhY2hhYmxlID0gKCk7ICAgICAgICAgICAgICMgQXJjaCByZXBvc2l0b3JpZXMgd2UgY2FuIGFjY2VzcworbXkgJXVucmVhY2hhYmxlID0gKCk7ICAgICAgICAgICAjIEFyY2ggcmVwb3NpdG9yaWVzIHdlIGNhbid0IGFjY2VzcyA6PAorbXkgQHBzZXRzICA9ICgpOyAgICAgICAgICAgICAgICAjIHRoZSBjb2xsZWN0aW9uCitteSAlcHNldHMgID0gKCk7ICAgICAgICAgICAgICAgICMgdGhlIGNvbGxlY3Rpb24sIGJ5IG5hbWUKK215ICVzdGF0cyAgPSAoCQkJIyBUcmFjayB3aGljaCBzdHJhdGVneSB3ZSB1c2VkIHRvIGltcG9ydDoKKwlnZXRfdGFnID0+IDAsIHJlcGxheSA9PiAwLCBnZXRfbmV3ID0+IDAsIGdldF9kZWx0YSA9PiAwLAorICAgICAgICBzaW1wbGVfY2hhbmdlc2V0ID0+IDAsIGltcG9ydF9vcl90YWcgPT4gMAorKTsKKworbXkgJXJwdGFncyA9ICgpOyAgICAgICAgICAgICAgICAjIG15IHJldmVyc2UgcHJpdmF0ZSB0YWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdG8gbWFwIGEgU0hBMSB0byBhIGNvbW1pdGlkCitteSAkVExBID0gJEVOVnsnQVJDSF9DTElFTlQnfSB8fCAndGxhJzsKKworc3ViIGRvX2Ficm93c2UgeworICAgIG15ICRzdGFnZSA9IHNoaWZ0OworICAgIHdoaWxlIChteSAoJGxpbWl0LCAkbGV2ZWwpID0gZWFjaCAlYXJjaF9icmFuY2hlcykgeworICAgICAgICBuZXh0IHVubGVzcyAkbGV2ZWwgPT0gJHN0YWdlOworCisJb3BlbiBBQlJPV1NFLCAiJFRMQSBhYnJvd3NlIC1ma0QgLS1tZXJnZXMgJGxpbWl0IHwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGRpZSAiUHJvYmxlbXMgd2l0aCB0bGEgYWJyb3dzZTogJCEiOworCisgICAgICAgIG15ICVwcyAgICAgICAgPSAoKTsgICAgICAgICAjIHRoZSBjdXJyZW50IG9uZQorICAgICAgICBteSAkbGFzdHNlZW4gID0gJyc7CisKKyAgICAgICAgd2hpbGUgKDxBQlJPV1NFPikgeworICAgICAgICAgICAgY2hvbXA7CisKKyAgICAgICAgICAgICMgZmlyc3QgcmVjb3JkIHBhZGRlZCB3IDggc3BhY2VzCisgICAgICAgICAgICBpZiAocy9eXHN7OH1cYi8vKSB7CisgICAgICAgICAgICAgICAgbXkgKCRpZCwgJHR5cGUpID0gc3BsaXQobS9ccysvLCAkXywgMik7CisKKyAgICAgICAgICAgICAgICBteSAlbGFzdF9wczsKKyAgICAgICAgICAgICAgICAjIHN0b3JlIHRoZSByZWNvcmQgd2UganVzdCBjYXB0dXJlZAorICAgICAgICAgICAgICAgIGlmICglcHMgJiYgIWV4aXN0cyAkcHNldHN7ICRwc3tpZH0gfSkgeworICAgICAgICAgICAgICAgICAgICAlbGFzdF9wcyA9ICVwczsgIyBicmVhayByZWZlcmVuY2VzCisgICAgICAgICAgICAgICAgICAgIHB1c2ggKEBwc2V0cywgXCVsYXN0X3BzKTsKKyAgICAgICAgICAgICAgICAgICAgJHBzZXRzeyAkbGFzdF9wc3tpZH0gfSA9IFwlbGFzdF9wczsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBteSAkYnJhbmNoID0gZXh0cmFjdF92ZXJzaW9ubmFtZSgkaWQpOworICAgICAgICAgICAgICAgICVwcyA9ICggaWQgPT4gJGlkLCBicmFuY2ggPT4gJGJyYW5jaCApOworICAgICAgICAgICAgICAgIGlmICglbGFzdF9wcyAmJiAoJGxhc3RfcHN7YnJhbmNofSBlcSAkYnJhbmNoKSkgeworICAgICAgICAgICAgICAgICAgICAkcHN7cGFyZW50X2lkfSA9ICRsYXN0X3Bze2lkfTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAkYXJjaF9icmFuY2hlc3skYnJhbmNofSA9IDE7CisgICAgICAgICAgICAgICAgJGxhc3RzZWVuID0gJ2lkJzsKKworICAgICAgICAgICAgICAgICMgZGVhbCB3aXRoIHR5cGVzIChzaG91bGQgd29yayB3aXRoIGJheiBvciB0bGEpOgorICAgICAgICAgICAgICAgIGlmICgkdHlwZSA9fiBtL1woLipjaGFuZ2VzZXRcKS8pIHsKKyAgICAgICAgICAgICAgICAgICAgJHBze3R5cGV9ID0gJ3MnOworICAgICAgICAgICAgICAgIH0gZWxzaWYgKCR0eXBlID1+IC9cKC4qaW1wb3J0XCkvKSB7CisgICAgICAgICAgICAgICAgICAgICRwc3t0eXBlfSA9ICdpJzsKKyAgICAgICAgICAgICAgICB9IGVsc2lmICgkdHlwZSA9fiBtL1wodGFnLio/KFxTK1xAXFMrKS4qP1wpLykgeworICAgICAgICAgICAgICAgICAgICAkcHN7dHlwZX0gPSAndCc7CisgICAgICAgICAgICAgICAgICAgICMgcmVhZCB3aGljaCByZXZpc2lvbiB3ZSd2ZSB0YWdnZWQgd2hlbiB3ZSBwYXJzZSB0aGUgbG9nCisgICAgICAgICAgICAgICAgICAgICRwc3t0YWd9ICA9ICQxOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHdhcm4gIlVua25vd24gdHlwZSAkdHlwZSI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgJGFyY2hfYnJhbmNoZXN7JGJyYW5jaH0gPSAxOworICAgICAgICAgICAgICAgICRsYXN0c2VlbiA9ICdpZCc7CisgICAgICAgICAgICB9IGVsc2lmIChzL15cc3sxMH0vLykgeworICAgICAgICAgICAgICAgICMgMTAgbGVhZGluZyBzcGFjZXMgb3IgbW9yZQorICAgICAgICAgICAgICAgICMgaW5kaWNhdGUgY29tbWl0IG1ldGFkYXRhCisKKyAgICAgICAgICAgICAgICAjIGRhdGUKKyAgICAgICAgICAgICAgICBpZiAoJGxhc3RzZWVuIGVxICdpZCcgJiYgbS9eKFxkezR9LVxkXGQtXGRcZCBcZFxkOlxkXGQ6XGRcZCkvKXsKKyAgICAgICAgICAgICAgICAgICAgJHBze2RhdGV9ICAgPSAkMTsKKyAgICAgICAgICAgICAgICAgICAgJGxhc3RzZWVuID0gJ2RhdGUnOworICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRfIGVxICdtZXJnZXMgaW46JykgeworICAgICAgICAgICAgICAgICAgICAkcHN7bWVyZ2VzfSA9IFtdOworICAgICAgICAgICAgICAgICAgICAkbGFzdHNlZW4gPSAnbWVyZ2VzJzsKKyAgICAgICAgICAgICAgICB9IGVsc2lmICgkbGFzdHNlZW4gZXEgJ21lcmdlcycgJiYgcy9eXHN7Mn0vLykgeworICAgICAgICAgICAgICAgICAgICBteSAkaWQgPSAkXzsKKyAgICAgICAgICAgICAgICAgICAgcHVzaCAoQHskcHN7bWVyZ2VzfX0sICRpZCk7CisKKyAgICAgICAgICAgICAgICAgICAgIyBhZ2dyZXNzaXZlIGJyYW5jaCBmaW5kaW5nOgorICAgICAgICAgICAgICAgICAgICBpZiAoJG9wdF9EKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBteSAkYnJhbmNoID0gZXh0cmFjdF92ZXJzaW9ubmFtZSgkaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHJlcG8gPSBleHRyYWN0X3JlcG9uYW1lKCRicmFuY2gpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJjaGl2ZV9yZWFjaGFibGUoJHJlcG8pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZpbmVkICRhcmNoX2JyYW5jaGVzeyRicmFuY2h9KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFyY2hfYnJhbmNoZXN7JGJyYW5jaH0gPSAkc3RhZ2UgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgd2FybiAibW9yZSBtZXRhZGF0YSBhZnRlciBtZXJnZXMhPzogJF9cbiIgdW5sZXNzIC9eXHMqJC87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCVwcyAmJiAhZXhpc3RzICRwc2V0c3sgJHBze2lkfSB9KSB7CisgICAgICAgICAgICBteSAldGVtcCA9ICVwczsgICAgICAgICAjIGJyZWFrIHJlZmVyZW5jZXMKKyAgICAgICAgICAgIGlmIChAcHNldHMgJiYgJHBzZXRzWyQjcHNldHNde2JyYW5jaH0gZXEgJHBze2JyYW5jaH0pIHsKKyAgICAgICAgICAgICAgICAkdGVtcHtwYXJlbnRfaWR9ID0gJHBzZXRzWyQjcHNldHNde2lkfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1c2ggKEBwc2V0cywgXCV0ZW1wKTsKKyAgICAgICAgICAgICRwc2V0c3sgJHRlbXB7aWR9IH0gPSBcJXRlbXA7CisgICAgICAgIH0KKworICAgICAgICBjbG9zZSBBQlJPV1NFIG9yIGRpZSAiJFRMQSBhYnJvd3NlIGZhaWxlZCBvbiAkbGltaXRcbiI7CisgICAgfQorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGVuZCBmb3JlYWNoICRyb290CisKK2RvX2Ficm93c2UoMSk7CitteSAkZGVwdGggPSAyOworJG9wdF9EIHx8PSAwOword2hpbGUgKCRkZXB0aCA8PSAkb3B0X0QpIHsKKyAgICBkb19hYnJvd3NlKCRkZXB0aCk7CisgICAgJGRlcHRoKys7Cit9CisKKyMjIE9yZGVyIHBhdGNoZXMgYnkgdGltZQorIyBGSVhNRSBzZWUgaWYgd2UgY2FuIGZpbmQgYSBtb3JlIG9wdGltYWwgd2F5IHRvIGRvIHRoaXMgYnkgZ3JhcGhpbmcKKyMgdGhlIGFuY2VzdHJ5IGRhdGEgYW5kIHdhbGtpbmcgaXQsIHRoYXQgd2F5IHdlIHdvbid0IGhhdmUgdG8gcmVseSBvbgorIyBjbGllbnQtc3VwcGxpZWQgZGF0ZXMKK0Bwc2V0cyA9IHNvcnQgeyRhLT57ZGF0ZX0uJGItPntpZH0gY21wICRiLT57ZGF0ZX0uJGItPntpZH19IEBwc2V0czsKKworI3ByaW50IER1bXBlciBcQHBzZXRzOworCisjIworIyMgVE9ETyBjbGVhbnVwIGlycmVsZXZhbnQgcGF0Y2hlcworIyMgICAgICBhbmQgcHV0IGFuIGluaXRpYWwgaW1wb3J0CisjIyAgICAgIG9yIGEgZnVsbCB0YWcKK215ICRpbXBvcnQgPSAwOwordW5sZXNzICgtZCAkZ2l0X2RpcikgeyAjIGluaXRpYWwgaW1wb3J0CisgICAgaWYgKCRwc2V0c1swXXt0eXBlfSBlcSAnaScgfHwgJHBzZXRzWzBde3R5cGV9IGVxICd0JykgeworICAgICAgICBwcmludCAiU3RhcnRpbmcgaW1wb3J0IGZyb20gJHBzZXRzWzBde2lkfVxuIjsKKwlgZ2l0LWluaXRgOworCWRpZSAkISBpZiAkPzsKKwkkaW1wb3J0ID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBkaWUgIk5lZWQgdG8gc3RhcnQgZnJvbSBhbiBpbXBvcnQgb3IgYSB0YWcgLS0gY2Fubm90IHVzZSAkcHNldHNbMF17aWR9IjsKKyAgICB9Cit9IGVsc2UgeyAgICAjIHByb2dyZXNzaW5nIGFuIGltcG9ydAorICAgICMgbG9hZCB0aGUgcnB0YWdzCisgICAgb3BlbmRpcihESVIsICRwdGFnX2RpcikKKwl8fCBkaWUgImNhbid0IG9wZW5kaXI6ICQhIjsKKyAgICB3aGlsZSAobXkgJGZpbGUgPSByZWFkZGlyKERJUikpIHsKKyAgICAgICAgIyBza2lwIG5vbi1pbnRlcmVzdGluZy1maWxlcworICAgICAgICBuZXh0IHVubGVzcyAtZiAiJHB0YWdfZGlyLyRmaWxlIjsKKworICAgICAgICAjIGNvbnZlcnQgZmlyc3QgJy0tJyB0byAnLycgZnJvbSBvbGQgZ2l0LWFyY2hpbXBvcnQgdG8gdXNlCisgICAgICAgICMgYXMgYW4gYXJjaGl2ZW5hbWUvYy0tYi0tdiBwcml2YXRlIHRhZworICAgICAgICBpZiAoJGZpbGUgIX4gbSEsISkgeworICAgICAgICAgICAgbXkgJG9sZGZpbGUgPSAkZmlsZTsKKyAgICAgICAgICAgICRmaWxlID1+IHMhLS0hLCE7CisgICAgICAgICAgICBwcmludCBTVERFUlIgImNvbnZlcnRpbmcgb2xkIHRhZyAkb2xkZmlsZSB0byAkZmlsZVxuIjsKKyAgICAgICAgICAgIHJlbmFtZSgiJHB0YWdfZGlyLyRvbGRmaWxlIiwgIiRwdGFnX2Rpci8kZmlsZSIpIG9yIGRpZSAkITsKKyAgICAgICAgfQorCW15ICRzaGEgPSBwdGFnKCRmaWxlKTsKKwljaG9tcCAkc2hhOworCSRycHRhZ3N7JHNoYX0gPSAkZmlsZTsKKyAgICB9CisgICAgY2xvc2VkaXIgRElSOworfQorCisjIHByb2Nlc3MgcGF0Y2hzZXRzCisjIGV4dHJhY3QgdGhlIEFyY2ggcmVwb3NpdG9yeSBuYW1lIChBcmNoICJhcmNoaXZlIiBpbiBBcmNoLXNwZWFrKQorc3ViIGV4dHJhY3RfcmVwb25hbWUgeworICAgIG15ICRmcV9jdmJyID0gc2hpZnQ7ICMgYXJjaGl2ZW5hbWUvW1tbW2NhdGVnb3J5XWJyYW5jaF12ZXJzaW9uXXJldmlzaW9uXQorICAgIHJldHVybiAoc3BsaXQoL1wvLywgJGZxX2N2YnIpKVswXTsKK30KKworc3ViIGV4dHJhY3RfdmVyc2lvbm5hbWUgeworICAgIG15ICRuYW1lID0gc2hpZnQ7CisgICAgJG5hbWUgPX4gcy8tLSg/OnBhdGNofHZlcnNpb24oPzpmaXgpP3xiYXNlKS1cZCskLy87CisgICAgcmV0dXJuICRuYW1lOworfQorCisjIGNvbnZlcnQgYSBmdWxseS1xdWFsaWZpZWQgcmV2aXNpb24gb3IgdmVyc2lvbiB0byBhIHVuaXF1ZSBkaXJuYW1lOgorIyAgIG5vcm1hbHBlcnNvbkB5aGJ0Lm5ldC0wNS9tcGQtLXVjbGludXgtLTEtLXBhdGNoLTIKKyMgYmVjb21lczogbm9ybWFscGVyc29uQHloYnQubmV0LTA1LG1wZC0tdWNsaW51eC0tMQorIworIyB0aGUgZ2l0IG5vdGlvbiBvZiBhIGJyYW5jaCBpcyBjbG9zZXIgdG8KKyMgYXJjaGl2ZS9jYXRlZ29yeS0tYnJhbmNoLS12ZXJzaW9uIHRoYW4gYXJjaGl2ZS9jYXRlZ29yeS0tYnJhbmNoLCBzbyB3ZQorIyB1c2UgdGhpcyB0byBjb252ZXJ0IHRvIGdpdCBicmFuY2ggbmFtZXMuCisjIEFsc28sIGtlZXAgYXJjaGl2ZSBuYW1lcyBidXQgcmVwbGFjZSAnLycgd2l0aCAnLCcgc2luY2UgaXQgd29uJ3QgcmVxdWlyZQorIyBzdWJkaXJlY3RvcmllcywgYW5kIGlzIHNhZmVyIHRoYW4gc3dhcHBpbmcgJy0tJyB3aGljaCBjb3VsZCBjb25mdXNlCisjIHJldmVyc2UtbWFwcGluZyB3aGVuIGRlYWxpbmcgd2l0aCBiYXN0YXJkIGJyYW5jaGVzIHRoYXQKKyMgYXJlIGp1c3QgYXJjaGl2ZS9jYXRlZ29yeS0tdmVyc2lvbiAgKG5vIC0tYnJhbmNoKQorc3ViIHRyZWVfZGlybmFtZSB7CisgICAgbXkgJHJldmlzaW9uID0gc2hpZnQ7CisgICAgbXkgJG5hbWUgPSBleHRyYWN0X3ZlcnNpb25uYW1lKCRyZXZpc2lvbik7CisgICAgJG5hbWUgPX4gcyMvIywjOworICAgIHJldHVybiAkbmFtZTsKK30KKworIyBvbGQgdmVyc2lvbnMgb2YgZ2l0LWFyY2hpbXBvcnQganVzdCB1c2UgdGhlIDxjYXRlZ29yeS0tYnJhbmNoPiBwYXJ0Ogorc3ViIG9sZF9zdHlsZV9icmFuY2huYW1lIHsKKyAgICBteSAkaWQgPSBzaGlmdDsKKyAgICBteSAkcmV0ID0gc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwncGFyc2UtcGFja2FnZS1uYW1lJywnLXAnLCRpZCk7CisgICAgY2hvbXAgJHJldDsKKyAgICByZXR1cm4gJHJldDsKK30KKworKmdpdF9kZWZhdWx0X2JyYW5jaG5hbWUgPSAkb3B0X28gPyAqb2xkX3N0eWxlX2JyYW5jaG5hbWUgOiAqdHJlZV9kaXJuYW1lOworCisjIHJldHJpZXZlIGRlZmF1bHQgYXJjaGl2ZSwgc2luY2UgJGJyYW5jaF9uYW1lX21hcCBrZXlzIG1pZ2h0IG5vdCBpbmNsdWRlIGl0CitzdWIgZ2V0X2RlZmF1bHRfYXJjaGl2ZSB7CisgICAgaWYgKCFkZWZpbmVkICRkZWZhdWx0X2FyY2hpdmUpIHsKKyAgICAgICAgJGRlZmF1bHRfYXJjaGl2ZSA9IHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ215LWRlZmF1bHQtYXJjaGl2ZScpOworICAgICAgICBjaG9tcCAkZGVmYXVsdF9hcmNoaXZlOworICAgIH0KKyAgICByZXR1cm4gJGRlZmF1bHRfYXJjaGl2ZTsKK30KKworc3ViIGdpdF9icmFuY2huYW1lIHsKKyAgICBteSAkcmV2aXNpb24gPSBzaGlmdDsKKyAgICBteSAkbmFtZSA9IGV4dHJhY3RfdmVyc2lvbm5hbWUoJHJldmlzaW9uKTsKKworICAgIGlmIChleGlzdHMgJGJyYW5jaF9uYW1lX21hcHskbmFtZX0pIHsKKwlyZXR1cm4gJGJyYW5jaF9uYW1lX21hcHskbmFtZX07CisKKyAgICB9IGVsc2lmICgkbmFtZSA9fiBtI14oW14vXSopLyguKikkIworCSAgICAgJiYgJDEgZXEgZ2V0X2RlZmF1bHRfYXJjaGl2ZSgpCisJICAgICAmJiBleGlzdHMgJGJyYW5jaF9uYW1lX21hcHskMn0pIHsKKwkjIHRoZSBuYW1lcyBnaXZlbiBpbiB0aGUgY29tbWFuZC1saW5lIGxhY2tlZCB0aGUgYXJjaGl2ZS4KKwlyZXR1cm4gJGJyYW5jaF9uYW1lX21hcHskMn07CisKKyAgICB9IGVsc2UgeworCXJldHVybiBnaXRfZGVmYXVsdF9icmFuY2huYW1lKCRyZXZpc2lvbik7CisgICAgfQorfQorCitzdWIgcHJvY2Vzc19wYXRjaHNldF9hY2N1cmF0ZSB7CisgICAgbXkgJHBzID0gc2hpZnQ7CisKKyAgICAjIHN3aXRjaCB0byB0aGF0IGJyYW5jaCBpZiB3ZSdyZSBub3QgYWxyZWFkeSBpbiB0aGF0IGJyYW5jaDoKKyAgICBpZiAoLWUgIiRnaXRfZGlyL3JlZnMvaGVhZHMvJHBzLT57YnJhbmNofSIpIHsKKyAgICAgICBzeXN0ZW0oJ2dpdC1jaGVja291dCcsJy1mJywkcHMtPnticmFuY2h9KSA9PSAwIG9yIGRpZSAiJCEgJD9cbiI7CisKKyAgICAgICAjIHJlbW92ZSBhbnkgb2xkIHN0dWZmIHRoYXQgZ290IGxlZnRvdmVyOgorICAgICAgIG15ICRybSA9IHNhZmVfcGlwZV9jYXB0dXJlKCdnaXQtbHMtZmlsZXMnLCctLW90aGVycycsJy16Jyk7CisgICAgICAgcm10cmVlKHNwbGl0KC9cMC8sJHJtKSkgaWYgJHJtOworICAgIH0KKworICAgICMgQXBwbHkgdGhlIGltcG9ydC9jaGFuZ2VzZXQvbWVyZ2UgaW50byB0aGUgd29ya2luZyB0cmVlCisgICAgbXkgJGRpciA9IHN5bmNfdG9fcHMoJHBzKTsKKyAgICAjIHJlYWQgdGhlIG5ldyBsb2cgZW50cnk6CisgICAgbXkgQGNvbW1pdGxvZyA9IHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ2NhdC1sb2cnLCctZCcsJGRpciwkcHMtPntpZH0pOworICAgIGRpZSAiRXJyb3IgaW4gY2F0LWxvZzogJCEiIGlmICQ/OworICAgIGNob21wIEBjb21taXRsb2c7CisKKyAgICAjIGdyYWIgdmFyaWFibGVzIHdlIHdhbnQgZnJvbSB0aGUgbG9nLCBuZXcgZmllbGRzIGdldCBhZGRlZCB0byAkcHM6CisgICAgIyAoYXV0aG9yLCBkYXRlLCBlbWFpbCwgc3VtbWFyeSwgbWVzc2FnZSBib2R5IC4uLikKKyAgICBwYXJzZWxvZygkcHMsIFxAY29tbWl0bG9nKTsKKworICAgIGlmICgkcHMtPntpZH0gPX4gLy0tYmFzZS0wJC8gJiYgJHBzLT57aWR9IG5lICRwc2V0c1swXXtpZH0pIHsKKyAgICAgICAgIyB0aGlzIHNob3VsZCB3b3JrIHdoZW4gaW1wb3J0aW5nIGNvbnRpbnVhdGlvbnMKKyAgICAgICAgaWYgKCRwcy0+e3RhZ30gJiYgKG15ICRicmFuY2hwb2ludCA9IGV2YWwgeyBwdGFnKCRwcy0+e3RhZ30pIH0pKSB7CisKKyAgICAgICAgICAgICMgZmluZCB3aGVyZSB3ZSBhcmUgc3VwcG9zZWQgdG8gYnJhbmNoIGZyb20KKwkgICAgaWYgKCEgLWUgIiRnaXRfZGlyL3JlZnMvaGVhZHMvJHBzLT57YnJhbmNofSIpIHsKKwkJc3lzdGVtKCdnaXQtYnJhbmNoJywkcHMtPnticmFuY2h9LCRicmFuY2hwb2ludCkgPT0gMCBvciBkaWUgIiQhICQ/XG4iOworCisJCSMgV2UgdHJ1c3QgQXJjaCB3aXRoIHRoZSBmYWN0IHRoYXQgdGhpcyBpcyBqdXN0IGEgdGFnLAorCQkjIGFuZCBpdCBkb2VzIG5vdCBhZmZlY3QgdGhlIHN0YXRlIG9mIHRoZSB0cmVlLCBzbworCQkjIHdlIGp1c3QgdGFnIGFuZCBtb3ZlIG9uLiAgSWYgdGhlIHVzZXIgcmVhbGx5IHdhbnRzIHVzCisJCSMgdG8gY29uc29saWRhdGUgbW9yZSBicmFuY2hlcyBpbnRvIG9uZSwgZG9uJ3QgdGFnIGJlY2F1c2UKKwkJIyB0aGUgdGFnIG5hbWUgd291bGQgYmUgYWxyZWFkeSB0YWtlbi4KKwkJdGFnKCRwcy0+e2lkfSwgJGJyYW5jaHBvaW50KTsKKwkJcHRhZygkcHMtPntpZH0sICRicmFuY2hwb2ludCk7CisJCXByaW50ICIgKiBUYWdnZWQgJHBzLT57aWR9IGF0ICRicmFuY2hwb2ludFxuIjsKKwkgICAgfQorCSAgICBzeXN0ZW0oJ2dpdC1jaGVja291dCcsJy1mJywkcHMtPnticmFuY2h9KSA9PSAwIG9yIGRpZSAiJCEgJD9cbiI7CisKKyAgICAgICAgICAgICMgcmVtb3ZlIGFueSBvbGQgc3R1ZmYgdGhhdCBnb3QgbGVmdG92ZXI6CisgICAgICAgICAgICBteSAkcm0gPSBzYWZlX3BpcGVfY2FwdHVyZSgnZ2l0LWxzLWZpbGVzJywnLS1vdGhlcnMnLCcteicpOworICAgICAgICAgICAgcm10cmVlKHNwbGl0KC9cMC8sJHJtKSkgaWYgJHJtOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3YXJuICJUYWdnaW5nIGZyb20gdW5rbm93biBpZCB1bnN1cHBvcnRlZFxuIiBpZiAkcHMtPnt0YWd9OworICAgICAgICB9CisgICAgICAgICMgYWxsb3cgbXVsdGlwbGUgYmFzZXMvaW1wb3J0cyBoZXJlIHNpbmNlIEFyY2ggc3VwcG9ydHMgY2hlcnJ5LXBpY2tzCisgICAgICAgICMgZnJvbSB1bnJlbGF0ZWQgdHJlZXMKKyAgICB9CisKKyAgICAjIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCBhbGwgdGhlIGNoYW5nZXMgd2UgZ290CisgICAgc3lzdGVtKCdnaXQtZGlmZi1maWxlcyAtLW5hbWUtb25seSAteiB8ICcuCisgICAgICAgICAgICAnZ2l0LXVwZGF0ZS1pbmRleCAtLXJlbW92ZSAteiAtLXN0ZGluJykgPT0gMCBvciBkaWUgIiQhICQ/XG4iOworICAgIHN5c3RlbSgnZ2l0LWxzLWZpbGVzIC0tb3RoZXJzIC16IHwgJy4KKyAgICAgICAgICAgICdnaXQtdXBkYXRlLWluZGV4IC0tYWRkIC16IC0tc3RkaW4nKSA9PSAwIG9yIGRpZSAiJCEgJD9cbiI7CisgICAgcmV0dXJuIDE7Cit9CisKKyMgdGhlIG5hdGl2ZSBjaGFuZ2VzZXQgcHJvY2Vzc2luZyBzdHJhdGVneS4gIFRoaXMgaXMgdmVyeSBmYXN0LCBidXQKKyMgZG9lcyBub3QgaGFuZGxlIHBlcm1pc3Npb25zIG9yIGFueSByZW5hbWVzIGludm9sdmluZyBkaXJlY3Rvcmllcworc3ViIHByb2Nlc3NfcGF0Y2hzZXRfZmFzdCB7CisgICAgbXkgJHBzID0gc2hpZnQ7CisgICAgIworICAgICMgY3JlYXRlIHRoZSBicmFuY2ggaWYgbmVlZGVkCisgICAgIworICAgIGlmICgkcHMtPnt0eXBlfSBlcSAnaScgJiYgISRpbXBvcnQpIHsKKyAgICAgICAgZGllICJTaG91bGQgbm90IGhhdmUgbW9yZSB0aGFuIG9uZSAnSW5pdGlhbCBpbXBvcnQnIHBlciBHSVQgaW1wb3J0OiAkcHMtPntpZH0iOworICAgIH0KKworICAgIHVubGVzcyAoJGltcG9ydCkgeyAjIHNraXAgZm9yIGltcG9ydAorICAgICAgICBpZiAoIC1lICIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRwcy0+e2JyYW5jaH0iKSB7CisgICAgICAgICAgICAjIHdlIGtub3cgYWJvdXQgdGhpcyBicmFuY2gKKyAgICAgICAgICAgIHN5c3RlbSgnZ2l0LWNoZWNrb3V0JywkcHMtPnticmFuY2h9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICMgbmV3IGJyYW5jaCEgd2UgbmVlZCB0byB2ZXJpZnkgYSBmZXcgdGhpbmdzCisgICAgICAgICAgICBkaWUgIkJyYW5jaCBvbiBhIG5vbi10YWchIiB1bmxlc3MgJHBzLT57dHlwZX0gZXEgJ3QnOworICAgICAgICAgICAgbXkgJGJyYW5jaHBvaW50ID0gcHRhZygkcHMtPnt0YWd9KTsKKyAgICAgICAgICAgIGRpZSAiVGFnZ2luZyBmcm9tIHVua25vd24gaWQgdW5zdXBwb3J0ZWQ6ICRwcy0+e3RhZ30iCisgICAgICAgICAgICAgICAgdW5sZXNzICRicmFuY2hwb2ludDsKKworICAgICAgICAgICAgIyBmaW5kIHdoZXJlIHdlIGFyZSBzdXBwb3NlZCB0byBicmFuY2ggZnJvbQorCSAgICBpZiAoISAtZSAiJGdpdF9kaXIvcmVmcy9oZWFkcy8kcHMtPnticmFuY2h9IikgeworCQlzeXN0ZW0oJ2dpdC1icmFuY2gnLCRwcy0+e2JyYW5jaH0sJGJyYW5jaHBvaW50KSA9PSAwIG9yIGRpZSAiJCEgJD9cbiI7CisKKwkJIyBXZSB0cnVzdCBBcmNoIHdpdGggdGhlIGZhY3QgdGhhdCB0aGlzIGlzIGp1c3QgYSB0YWcsCisJCSMgYW5kIGl0IGRvZXMgbm90IGFmZmVjdCB0aGUgc3RhdGUgb2YgdGhlIHRyZWUsIHNvCisJCSMgd2UganVzdCB0YWcgYW5kIG1vdmUgb24uICBJZiB0aGUgdXNlciByZWFsbHkgd2FudHMgdXMKKwkJIyB0byBjb25zb2xpZGF0ZSBtb3JlIGJyYW5jaGVzIGludG8gb25lLCBkb24ndCB0YWcgYmVjYXVzZQorCQkjIHRoZSB0YWcgbmFtZSB3b3VsZCBiZSBhbHJlYWR5IHRha2VuLgorCQl0YWcoJHBzLT57aWR9LCAkYnJhbmNocG9pbnQpOworCQlwdGFnKCRwcy0+e2lkfSwgJGJyYW5jaHBvaW50KTsKKwkJcHJpbnQgIiAqIFRhZ2dlZCAkcHMtPntpZH0gYXQgJGJyYW5jaHBvaW50XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3lzdGVtKCdnaXQtY2hlY2tvdXQnLCRwcy0+e2JyYW5jaH0pID09IDAgb3IgZGllICIkISAkP1xuIjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGRpZSAkISBpZiAkPzsKKyAgICB9CisKKyAgICAjCisgICAgIyBBcHBseSB0aGUgaW1wb3J0L2NoYW5nZXNldC9tZXJnZSBpbnRvIHRoZSB3b3JraW5nIHRyZWUKKyAgICAjCisgICAgaWYgKCRwcy0+e3R5cGV9IGVxICdpJyB8fCAkcHMtPnt0eXBlfSBlcSAndCcpIHsKKyAgICAgICAgYXBwbHlfaW1wb3J0KCRwcykgb3IgZGllICQhOworICAgICAgICAkc3RhdHN7aW1wb3J0X29yX3RhZ30rKzsKKyAgICAgICAgJGltcG9ydD0wOworICAgIH0gZWxzaWYgKCRwcy0+e3R5cGV9IGVxICdzJykgeworICAgICAgICBhcHBseV9jc2V0KCRwcyk7CisgICAgICAgICRzdGF0c3tzaW1wbGVfY2hhbmdlc2V0fSsrOworICAgIH0KKworICAgICMKKyAgICAjIHByZXBhcmUgdXBkYXRlIGdpdCdzIGluZGV4LCBiYXNlZCBvbiB3aGF0IGFyY2gga25vd3MKKyAgICAjIGFib3V0IHRoZSBwc2V0LCByZXNvbHZlIHBhcmVudHMsIGV0YworICAgICMKKworICAgIG15IEBjb21taXRsb2cgPSBzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdjYXQtYXJjaGl2ZS1sb2cnLCRwcy0+e2lkfSk7CisgICAgZGllICJFcnJvciBpbiBjYXQtYXJjaGl2ZS1sb2c6ICQhIiBpZiAkPzsKKworICAgIHBhcnNlbG9nKCRwcyxcQGNvbW1pdGxvZyk7CisKKyAgICAjIGltcG9ydHMgZG9uJ3QgZ2l2ZSB1cyBnb29kIGluZm8KKyAgICAjIG9uIGFkZGVkIGZpbGVzLiBTaGFtZSBvbiB0aGVtCisgICAgaWYgKCRwcy0+e3R5cGV9IGVxICdpJyB8fCAkcHMtPnt0eXBlfSBlcSAndCcpIHsKKyAgICAgICAgc3lzdGVtKCdnaXQtbHMtZmlsZXMgLS1kZWxldGVkIC16IHwgJy4KKyAgICAgICAgICAgICAgICAnZ2l0LXVwZGF0ZS1pbmRleCAtLXJlbW92ZSAteiAtLXN0ZGluJykgPT0gMCBvciBkaWUgIiQhICQ/XG4iOworICAgICAgICBzeXN0ZW0oJ2dpdC1scy1maWxlcyAtLW90aGVycyAteiB8ICcuCisgICAgICAgICAgICAgICAgJ2dpdC11cGRhdGUtaW5kZXggLS1hZGQgLXogLS1zdGRpbicpID09IDAgb3IgZGllICIkISAkP1xuIjsKKyAgICB9CisKKyAgICAjIFRPRE86IGhhbmRsZSByZW1vdmVkX2RpcmVjdG9yaWVzIGFuZCByZW5hbWVkX2RpcmVjdG9yaWVzOgorCisgICAgaWYgKG15ICRkZWwgPSAkcHMtPntyZW1vdmVkX2ZpbGVzfSkgeworICAgICAgICB1bmxpbmsgQCRkZWw7CisgICAgICAgIHdoaWxlIChAJGRlbCkgeworICAgICAgICAgICAgbXkgQHNsaWNlID0gc3BsaWNlKEAkZGVsLCAwLCAxMDApOworICAgICAgICAgICAgc3lzdGVtKCdnaXQtdXBkYXRlLWluZGV4JywnLS1yZW1vdmUnLCctLScsQHNsaWNlKSA9PSAwIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllICJFcnJvciBpbiBnaXQtdXBkYXRlLWluZGV4IC0tcmVtb3ZlOiAkISAkP1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChteSAkcmVuID0gJHBzLT57cmVuYW1lZF9maWxlc30pIHsgICAgICAgICAgICAgICAgIyByZW5hbWVkCisgICAgICAgIGlmIChAJHJlbiAlIDIpIHsKKyAgICAgICAgICAgIGRpZSAiT2RkIG51bWJlciBvZiBlbnRyaWVzIGluIHJlbmFtZSE/IjsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChAJHJlbikgeworICAgICAgICAgICAgbXkgJGZyb20gPSBzaGlmdCBAJHJlbjsKKyAgICAgICAgICAgIG15ICR0byAgID0gc2hpZnQgQCRyZW47CisKKyAgICAgICAgICAgIHVubGVzcyAoLWQgZGlybmFtZSgkdG8pKSB7CisgICAgICAgICAgICAgICAgbWtwYXRoKGRpcm5hbWUoJHRvKSk7ICMgd2lsbCBkaWUgb24gZXJyCisgICAgICAgICAgICB9CisgICAgICAgICAgICAjIHByaW50ICJtb3ZpbmcgJGZyb20gJHRvIjsKKyAgICAgICAgICAgIHJlbmFtZSgkZnJvbSwgJHRvKSBvciBkaWUgIkVycm9yIHJlbmFtaW5nICckZnJvbScgJyR0byc6ICQhXG4iOworICAgICAgICAgICAgc3lzdGVtKCdnaXQtdXBkYXRlLWluZGV4JywnLS1yZW1vdmUnLCctLScsJGZyb20pID09IDAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUgIkVycm9yIGluIGdpdC11cGRhdGUtaW5kZXggLS1yZW1vdmU6ICQhICQ/XG4iOworICAgICAgICAgICAgc3lzdGVtKCdnaXQtdXBkYXRlLWluZGV4JywnLS1hZGQnLCctLScsJHRvKSA9PSAwIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllICJFcnJvciBpbiBnaXQtdXBkYXRlLWluZGV4IC0tYWRkOiAkISAkP1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChteSAkYWRkID0gJHBzLT57bmV3X2ZpbGVzfSkgeworICAgICAgICB3aGlsZSAoQCRhZGQpIHsKKyAgICAgICAgICAgIG15IEBzbGljZSA9IHNwbGljZShAJGFkZCwgMCwgMTAwKTsKKyAgICAgICAgICAgIHN5c3RlbSgnZ2l0LXVwZGF0ZS1pbmRleCcsJy0tYWRkJywnLS0nLEBzbGljZSkgPT0gMCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAiRXJyb3IgaW4gZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZDogJCEgJD9cbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobXkgJG1vZCA9ICRwcy0+e21vZGlmaWVkX2ZpbGVzfSkgeworICAgICAgICB3aGlsZSAoQCRtb2QpIHsKKyAgICAgICAgICAgIG15IEBzbGljZSA9IHNwbGljZShAJG1vZCwgMCwgMTAwKTsKKyAgICAgICAgICAgIHN5c3RlbSgnZ2l0LXVwZGF0ZS1pbmRleCcsJy0tJyxAc2xpY2UpID09IDAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUgIkVycm9yIGluIGdpdC11cGRhdGUtaW5kZXg6ICQhICQ/XG4iOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAxOyAjIHdlIHN1Y2Nlc3NmdWxseSBhcHBsaWVkIHRoZSBjaGFuZ2VzZXQKK30KKworaWYgKCRvcHRfZikgeworICAgIHByaW50ICJXaWxsIGltcG9ydCBwYXRjaHNldHMgdXNpbmcgdGhlIGZhc3Qgc3RyYXRlZ3lcbiIsCisgICAgICAgICAgICAiUmVuYW1lZCBkaXJlY3RvcmllcyBhbmQgcGVybWlzc2lvbiBjaGFuZ2VzIHdpbGwgYmUgbWlzc2VkXG4iOworICAgICpwcm9jZXNzX3BhdGNoc2V0ID0gKnByb2Nlc3NfcGF0Y2hzZXRfZmFzdDsKK30gZWxzZSB7CisgICAgcHJpbnQgIlVzaW5nIHRoZSBkZWZhdWx0IChhY2N1cmF0ZSkgaW1wb3J0IHN0cmF0ZWd5LlxuIiwKKyAgICAgICAgICAgICJUaGluZ3MgbWF5IGJlIGEgYml0IHNsb3dcbiI7CisgICAgKnByb2Nlc3NfcGF0Y2hzZXQgPSAqcHJvY2Vzc19wYXRjaHNldF9hY2N1cmF0ZTsKK30KKworZm9yZWFjaCBteSAkcHMgKEBwc2V0cykgeworICAgICMgcHJvY2VzcyBwYXRjaHNldHMKKyAgICAkcHMtPnticmFuY2h9ID0gZ2l0X2JyYW5jaG5hbWUoJHBzLT57aWR9KTsKKworICAgICMKKyAgICAjIGVuc3VyZSB3ZSBoYXZlIGEgY2xlYW4gc3RhdGUKKyAgICAjCisgICAgaWYgKG15ICRkaXJ0eSA9IGBnaXQtZGlmZi1maWxlc2ApIHsKKyAgICAgICAgZGllICJVbmNsZWFuIHRyZWUgd2hlbiBhYm91dCB0byBwcm9jZXNzICRwcy0+e2lkfSAiIC4KKyAgICAgICAgICAgICIgLSBkaWQgd2UgZmFpbCB0byBjb21taXQgY2xlYW5seSBiZWZvcmU/XG4kZGlydHkiOworICAgIH0KKyAgICBkaWUgJCEgaWYgJD87CisKKyAgICAjCisgICAgIyBza2lwIGNvbW1pdHMgYWxyZWFkeSBpbiByZXBvCisgICAgIworICAgIGlmIChwdGFnKCRwcy0+e2lkfSkpIHsKKyAgICAgICRvcHRfdiAmJiBwcmludCAiICogU2tpcHBpbmcgYWxyZWFkeSBpbXBvcnRlZDogJHBzLT57aWR9XG4iOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBwcmludCAiICogU3RhcnRpbmcgdG8gd29yayBvbiAkcHMtPntpZH1cbiI7CisKKyAgICBwcm9jZXNzX3BhdGNoc2V0KCRwcykgb3IgbmV4dDsKKworICAgICMgd2FybiAiZXJyb3JzIHdoZW4gcnVubmluZyBnaXQtdXBkYXRlLWluZGV4ISAkISI7CisgICAgbXkgJHRyZWUgPSBgZ2l0LXdyaXRlLXRyZWVgOworICAgIGRpZSAiY2Fubm90IHdyaXRlIHRyZWUgJCEiIGlmICQ/OworICAgIGNob21wICR0cmVlOworCisgICAgIworICAgICMgV2hvJ3MgeW91ciBkYWRkeT8KKyAgICAjCisgICAgbXkgQHBhcjsKKyAgICBpZiAoIC1lICIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRwcy0+e2JyYW5jaH0iKSB7CisgICAgICAgIGlmIChvcGVuIEhFQUQsICI8IiwiJGdpdF9kaXIvcmVmcy9oZWFkcy8kcHMtPnticmFuY2h9IikgeworICAgICAgICAgICAgbXkgJHAgPSA8SEVBRD47CisgICAgICAgICAgICBjbG9zZSBIRUFEOworICAgICAgICAgICAgY2hvbXAgJHA7CisgICAgICAgICAgICBwdXNoIEBwYXIsICctcCcsICRwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCRwcy0+e3R5cGV9IGVxICdzJykgeworICAgICAgICAgICAgICAgIHdhcm4gIkNvdWxkIG5vdCBmaW5kIHRoZSByaWdodCBoZWFkIGZvciB0aGUgYnJhbmNoICRwcy0+e2JyYW5jaH0iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCRwcy0+e21lcmdlc30pIHsKKyAgICAgICAgcHVzaCBAcGFyLCBmaW5kX3BhcmVudHMoJHBzKTsKKyAgICB9CisKKyAgICAjCisgICAgIyBDb21taXQsIHRhZyBhbmQgY2xlYW4gc3RhdGUKKyAgICAjCisgICAgJEVOVntUWn0gICAgICAgICAgICAgICAgICA9ICdHTVQnOworICAgICRFTlZ7R0lUX0FVVEhPUl9OQU1FfSAgICAgPSAkcHMtPnthdXRob3J9OworICAgICRFTlZ7R0lUX0FVVEhPUl9FTUFJTH0gICAgPSAkcHMtPntlbWFpbH07CisgICAgJEVOVntHSVRfQVVUSE9SX0RBVEV9ICAgICA9ICRwcy0+e2RhdGV9OworICAgICRFTlZ7R0lUX0NPTU1JVFRFUl9OQU1FfSAgPSAkcHMtPnthdXRob3J9OworICAgICRFTlZ7R0lUX0NPTU1JVFRFUl9FTUFJTH0gPSAkcHMtPntlbWFpbH07CisgICAgJEVOVntHSVRfQ09NTUlUVEVSX0RBVEV9ICA9ICRwcy0+e2RhdGV9OworCisgICAgbXkgJHBpZCA9IG9wZW4yKCpSRUFERVIsICpXUklURVIsJ2dpdC1jb21taXQtdHJlZScsJHRyZWUsQHBhcikKKyAgICAgICAgb3IgZGllICQhOworICAgIHByaW50IFdSSVRFUiAkcHMtPntzdW1tYXJ5fSwiXG5cbiI7CisKKyAgICAjIG9ubHkgcHJpbnQgbWVzc2FnZSBpZiBpdCdzIG5vdCBlbXB0eSwgdG8gYXZvaWQgYSBzcHVyaW91cyBibGFuayBsaW5lOworICAgICMgYWxzbyBhcHBlbmQgYW4gZXh0cmEgbmV3bGluZSwgc28gdGhlcmUncyBhIGJsYW5rIGxpbmUgYmVmb3JlIHRoZQorICAgICMgZm9sbG93aW5nICJnaXQtYXJjaGltcG9ydC1pZDoiIGxpbmUuCisgICAgcHJpbnQgV1JJVEVSICRwcy0+e21lc3NhZ2V9LCJcblxuIiBpZiAoJHBzLT57bWVzc2FnZX0gbmUgIiIpOworCisgICAgIyBtYWtlIGl0IGVhc3kgdG8gYmFja3RyYWNrIGFuZCBmaWd1cmUgb3V0IHdoaWNoIEFyY2ggcmV2aXNpb24gdGhpcyB3YXM6CisgICAgcHJpbnQgV1JJVEVSICdnaXQtYXJjaGltcG9ydC1pZDogJywkcHMtPntpZH0sIlxuIjsKKworICAgIGNsb3NlIFdSSVRFUjsKKyAgICBteSAkY29tbWl0aWQgPSA8UkVBREVSPjsgICAgIyByZWFkCisgICAgY2hvbXAgJGNvbW1pdGlkOworICAgIGNsb3NlIFJFQURFUjsKKyAgICB3YWl0cGlkICRwaWQsMDsgICAgICAgICAgICAgIyBjbG9zZTsKKworICAgIGlmIChsZW5ndGggJGNvbW1pdGlkICE9IDQwKSB7CisgICAgICAgIGRpZSAiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY29tbWl0ISAkISAkY29tbWl0aWQiOworICAgIH0KKyAgICAjCisgICAgIyBVcGRhdGUgdGhlIGJyYW5jaAorICAgICMKKyAgICBvcGVuICBIRUFELCAiPiIsIiRnaXRfZGlyL3JlZnMvaGVhZHMvJHBzLT57YnJhbmNofSI7CisgICAgcHJpbnQgSEVBRCAkY29tbWl0aWQ7CisgICAgY2xvc2UgSEVBRDsKKyAgICBzeXN0ZW0oJ2dpdC11cGRhdGUtcmVmJywgJ0hFQUQnLCAiJHBzLT57YnJhbmNofSIpOworCisgICAgIyB0YWcgYWNjb3JkaW5nbHkKKyAgICBwdGFnKCRwcy0+e2lkfSwgJGNvbW1pdGlkKTsgIyBwcml2YXRlIHRhZworICAgIGlmICgkb3B0X1QgfHwgJHBzLT57dHlwZX0gZXEgJ3QnIHx8ICRwcy0+e3R5cGV9IGVxICdpJykgeworICAgICAgICB0YWcoJHBzLT57aWR9LCAkY29tbWl0aWQpOworICAgIH0KKyAgICBwcmludCAiICogQ29tbWl0dGVkICRwcy0+e2lkfVxuIjsKKyAgICBwcmludCAiICAgKyB0cmVlICAgJHRyZWVcbiI7CisgICAgcHJpbnQgIiAgICsgY29tbWl0ICRjb21taXRpZFxuIjsKKyAgICAkb3B0X3YgJiYgcHJpbnQgIiAgICsgY29tbWl0IGRhdGUgaXMgICRwcy0+e2RhdGV9IFxuIjsKKyAgICAkb3B0X3YgJiYgcHJpbnQgIiAgICsgcGFyZW50czogICIsam9pbignICcsQHBhciksIlxuIjsKK30KKworaWYgKCRvcHRfdikgeworICAgIGZvcmVhY2ggKHNvcnQga2V5cyAlc3RhdHMpIHsKKyAgICAgICAgcHJpbnQiICRfOiAkc3RhdHN7JF99XG4iOworICAgIH0KK30KK2V4aXQgMDsKKworIyB1c2VkIGJ5IHRoZSBhY2N1cmF0ZSBzdHJhdGVneToKK3N1YiBzeW5jX3RvX3BzIHsKKyAgICBteSAkcHMgPSBzaGlmdDsKKyAgICBteSAkdHJlZV9kaXIgPSAkdG1wLicvJy50cmVlX2Rpcm5hbWUoJHBzLT57aWR9KTsKKworICAgICRvcHRfdiAmJiBwcmludCAic3luY190b19wcygkcHMtPntpZH0pIG1ldGhvZDogIjsKKworICAgIGlmICgtZCAkdHJlZV9kaXIpIHsKKyAgICAgICAgaWYgKCRwcy0+e3R5cGV9IGVxICd0JykgeworCSAgICAkb3B0X3YgJiYgcHJpbnQgImdldCAodGFnKVxuIjsKKyAgICAgICAgICAgICMgbG9va3MgbGlrZSBhIHRhZy1vbmx5IG9yICh3b3JzZSwpIGEgbWl4ZWQgdGFncy9jaGFuZ2VzZXQgYnJhbmNoLAorICAgICAgICAgICAgIyBjYW4ndCByZWx5IG9uIHJlcGxheSB0byB3b3JrIGNvcnJlY3RseSBvbiB0aGVzZQorICAgICAgICAgICAgcm10cmVlKCR0cmVlX2Rpcik7CisgICAgICAgICAgICBzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdnZXQnLCctLW5vLXByaXN0aW5lJywkcHMtPntpZH0sJHRyZWVfZGlyKTsKKyAgICAgICAgICAgICRzdGF0c3tnZXRfdGFnfSsrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG15ICR0cmVlX2lkID0gYXJjaF90cmVlX2lkKCR0cmVlX2Rpcik7CisgICAgICAgICAgICAgICAgaWYgKCRwcy0+e3BhcmVudF9pZH0gJiYgKCRwcy0+e3BhcmVudF9pZH0gZXEgJHRyZWVfaWQpKSB7CisgICAgICAgICAgICAgICAgICAgICMgdGhlIGNvbW1vbiBjYXNlIChob3BlZnVsbHkpCisJCSAgICAkb3B0X3YgJiYgcHJpbnQgInJlcGxheVxuIjsKKyAgICAgICAgICAgICAgICAgICAgc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwncmVwbGF5JywnLWQnLCR0cmVlX2RpciwkcHMtPntpZH0pOworICAgICAgICAgICAgICAgICAgICAkc3RhdHN7cmVwbGF5fSsrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICMgZ2V0dGluZyBvbmUgdHJlZSBpcyB1c3VhbGx5IGZhc3RlciB0aGFuIGdldHRpbmcgdHdvIHRyZWVzCisgICAgICAgICAgICAgICAgICAgICMgYW5kIGFwcGx5aW5nIHRoZSBkZWx0YSAuLi4KKyAgICAgICAgICAgICAgICAgICAgcm10cmVlKCR0cmVlX2Rpcik7CisJCSAgICAkb3B0X3YgJiYgcHJpbnQgImFwcGx5LWRlbHRhXG4iOworICAgICAgICAgICAgICAgICAgICBzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdnZXQnLCctLW5vLXByaXN0aW5lJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHMtPntpZH0sJHRyZWVfZGlyKTsKKyAgICAgICAgICAgICAgICAgICAgJHN0YXRze2dldF9kZWx0YX0rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAjIG5ldyBicmFuY2ggd29yaworICAgICAgICAkb3B0X3YgJiYgcHJpbnQgImdldCAobmV3IHRyZWUpXG4iOworICAgICAgICBzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdnZXQnLCctLW5vLXByaXN0aW5lJywkcHMtPntpZH0sJHRyZWVfZGlyKTsKKyAgICAgICAgJHN0YXRze2dldF9uZXd9Kys7CisgICAgfQorCisgICAgIyBhZGRlZCAtSSBmbGFnIHRvIHJzeW5jIHNpbmNlIHdlJ3JlIGdvaW5nIHRvIGZhc3QhIEFJRUVFRUUhISEhCisgICAgc3lzdGVtKCdyc3luYycsJy1hSScsJy0tZGVsZXRlJywnLS1leGNsdWRlJywkZ2l0X2RpciwKKyMgICAgICAgICAgICAgICAnLS1leGNsdWRlJywnLmFyY2gtaW52ZW50b3J5JywKKyAgICAgICAgICAgICAgICAnLS1leGNsdWRlJywnLmFyY2gtaWRzJywnLS1leGNsdWRlJywne2FyY2h9JywKKyAgICAgICAgICAgICAgICAnLS1leGNsdWRlJywnKyonLCctLWV4Y2x1ZGUnLCcsKicsCisgICAgICAgICAgICAgICAgIiR0cmVlX2Rpci8iLCcuLycpID09IDAgb3IgZGllICJDYW5ub3QgcnN5bmMgJHRyZWVfZGlyOiAkISAkPyI7CisgICAgcmV0dXJuICR0cmVlX2RpcjsKK30KKworc3ViIGFwcGx5X2ltcG9ydCB7CisgICAgbXkgJHBzID0gc2hpZnQ7CisgICAgbXkgJGJuYW1lID0gZ2l0X2JyYW5jaG5hbWUoJHBzLT57aWR9KTsKKworICAgIG1rcGF0aCgkdG1wKTsKKworICAgIHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ2dldCcsJy1zJywnLS1uby1wcmlzdGluZScsJHBzLT57aWR9LCIkdG1wL2ltcG9ydCIpOworICAgIGRpZSAiQ2Fubm90IGdldCBpbXBvcnQ6ICQhIiBpZiAkPzsKKyAgICBzeXN0ZW0oJ3JzeW5jJywnLWFJJywnLS1kZWxldGUnLCAnLS1leGNsdWRlJywkZ2l0X2RpciwKKwkJJy0tZXhjbHVkZScsJy5hcmNoLWlkcycsJy0tZXhjbHVkZScsJ3thcmNofScsCisJCSIkdG1wL2ltcG9ydC8iLCAnLi8nKTsKKyAgICBkaWUgIkNhbm5vdCByc3luYyBpbXBvcnQ6JCEiIGlmICQ/OworCisgICAgcm10cmVlKCIkdG1wL2ltcG9ydCIpOworICAgIGRpZSAiQ2Fubm90IHJlbW92ZSB0ZW1wZGlyOiAkISIgaWYgJD87CisKKworICAgIHJldHVybiAxOworfQorCitzdWIgYXBwbHlfY3NldCB7CisgICAgbXkgJHBzID0gc2hpZnQ7CisKKyAgICBta3BhdGgoJHRtcCk7CisKKyAgICAjIGdldCB0aGUgY2hhbmdlc2V0CisgICAgc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwnZ2V0LWNoYW5nZXNldCcsJHBzLT57aWR9LCIkdG1wL2NoYW5nZXNldCIpOworICAgIGRpZSAiQ2Fubm90IGdldCBjaGFuZ2VzZXQ6ICQhIiBpZiAkPzsKKworICAgICMgYXBwbHkgcGF0Y2hlcworICAgIGlmIChgZmluZCAkdG1wL2NoYW5nZXNldC9wYXRjaGVzIC10eXBlIGYgLW5hbWUgJyoucGF0Y2gnYCkgeworICAgICAgICAjIHRoaXMgY2FuIGJlIHNwZWQgdXAgY29uc2lkZXJhYmx5IGJ5IGRvaW5nCisgICAgICAgICMgICAgKGZpbmQgfCB4YXJncyBjYXQpIHwgcGF0Y2gKKyAgICAgICAgIyBidXQgdGhhdCBjYW4gZ2V0IG11Y2tlZCB1cCBieSBwYXRjaGVzCisgICAgICAgICMgd2l0aCBtaXNzaW5nIHRyYWlsaW5nIG5ld2xpbmVzIG9yIHRoZSBzdGFuZGFyZAorICAgICAgICAjICdtaXNzaW5nIG5ld2xpbmUnIGZsYWcgaW4gdGhlIHBhdGNoIC0gcG9zc2libHkKKyAgICAgICAgIyBwcm9kdWNlZCB3aXRoIGFuIG9sZC9idWdneSBkaWZmLgorICAgICAgICAjIHNsb3cgYW5kIHNhZmUsIHdlIGludm9rZSBwYXRjaCBvbmNlIHBlciBwYXRjaGZpbGUKKyAgICAgICAgYGZpbmQgJHRtcC9jaGFuZ2VzZXQvcGF0Y2hlcyAtdHlwZSBmIC1uYW1lICcqLnBhdGNoJyAtcHJpbnQwIHwgZ3JlcCAtenYgJ3thcmNofScgfCB4YXJncyAtaUZJTEUgLTAgLS1uby1ydW4taWYtZW1wdHkgcGF0Y2ggLXAxIC0tZm9yd2FyZCAtaUZJTEVgOworICAgICAgICBkaWUgIlByb2JsZW0gYXBwbHlpbmcgcGF0Y2hlcyEgJCEiIGlmICQ/OworICAgIH0KKworICAgICMgYXBwbHkgY2hhbmdlZCBiaW5hcnkgZmlsZXMKKyAgICBpZiAobXkgQG1vZGlmaWVkID0gYGZpbmQgJHRtcC9jaGFuZ2VzZXQvcGF0Y2hlcyAtdHlwZSBmIC1uYW1lICcqLm1vZGlmaWVkJ2ApIHsKKyAgICAgICAgZm9yZWFjaCBteSAkbW9kIChAbW9kaWZpZWQpIHsKKyAgICAgICAgICAgIGNob21wICRtb2Q7CisgICAgICAgICAgICBteSAkb3JpZyA9ICRtb2Q7CisgICAgICAgICAgICAkb3JpZyA9fiBzL1wubW9kaWZpZWQkLy87ICMgbGF6eQorICAgICAgICAgICAgJG9yaWcgPX4gcyFeXFEkdG1wXEUvY2hhbmdlc2V0L3BhdGNoZXMvISE7CisgICAgICAgICAgICAjcHJpbnQgInJzeW5jIC1wICckbW9kJyAnJG9yaWcnIjsKKyAgICAgICAgICAgIHN5c3RlbSgncnN5bmMnLCctcCcsJG1vZCwiLi8kb3JpZyIpOworICAgICAgICAgICAgZGllICJQcm9ibGVtIGFwcGx5aW5nIGJpbmFyeSBjaGFuZ2VzISAkISIgaWYgJD87CisgICAgICAgIH0KKyAgICB9CisKKyAgICAjIGJyaW5nIGluIG5ldyBmaWxlcworICAgIHN5c3RlbSgncnN5bmMnLCctYUknLCctLWV4Y2x1ZGUnLCRnaXRfZGlyLAorCQknLS1leGNsdWRlJywnLmFyY2gtaWRzJywKKwkJJy0tZXhjbHVkZScsICd7YXJjaH0nLAorCQkiJHRtcC9jaGFuZ2VzZXQvbmV3LWZpbGVzLWFyY2hpdmUvIiwnLi8nKTsKKworICAgICMgZGVsZXRlZCBmaWxlcyBhcmUgaGludGVkIGZyb20gdGhlIGNvbW1pdGxvZyBwcm9jZXNzaW5nCisKKyAgICBybXRyZWUoIiR0bXAvY2hhbmdlc2V0Iik7Cit9CisKKworIyA9Zm9yIHJlZmVyZW5jZQorIyBub3RlczogKi1maWxlcy8tZGlyZWN0b3JpZXMga2V5cyBjYW5ub3QgaGF2ZSBzcGFjZXMsIHRoZXkncmUgYWx3YXlzCisjIHBpa2EtZXNjYXBlZC4gIEV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5ld2xpbmUKKyMgQSBsb2cgZW50cnkgbG9va3MgbGlrZToKKyMgUmV2aXNpb246IG1vb2RsZS1vcmctLW1vb2RsZS0tMS4zLjMtLXBhdGNoLTE1CisjIEFyY2hpdmU6IGFyY2gtZWR1Zm9yZ2VAY2F0YWx5c3QubmV0Lm56LS0yMDA0CisjIENyZWF0b3I6IFBlbm55IExlYWNoIDxwZW5ueUBjYXRhbHlzdC5uZXQubno+CisjIERhdGU6IFdlZCBNYXkgMjUgMTQ6MTU6MzQgTlpTVCAyMDA1CisjIFN0YW5kYXJkLWRhdGU6IDIwMDUtMDUtMjUgMDI6MTU6MzQgR01UCisjIE5ldy1maWxlczogbGFuZy9kZS8uYXJjaC1pZHMvYmxvY2tfZ2xvc3NhcnlfcmFuZG9tLnBocC5pZAorIyAgICAgbGFuZy9kZS8uYXJjaC1pZHMvYmxvY2tfaHRtbC5waHAuaWQKKyMgTmV3LWRpcmVjdG9yaWVzOiBsYW5nL2RlL2hlbHAvcXVlc3Rpb25uYWlyZQorIyAgICAgbGFuZy9kZS9oZWxwL3F1ZXN0aW9ubmFpcmUvLmFyY2gtaWRzCisjIFJlbmFtZWQtZmlsZXM6IC5hcmNoLWlkcy9kYl9zZWFycy5zcWwuaWQgZGIvLmFyY2gtaWRzL2RiX3NlYXJzLnNxbC5pZAorIyAgICBkYl9zZWFycy5zcWwgZGIvZGJfc2VhcnMuc3FsCisjIFJlbW92ZWQtZmlsZXM6IGxhbmcvYmUvZG9jcy8uYXJjaC1pZHMvcmVsZWFzZS5odG1sLmlkCisjICAgICBsYW5nL2JlL2RvY3MvLmFyY2gtaWRzL3JlbGVhc2VvbGQuaHRtbC5pZAorIyBNb2RpZmllZC1maWxlczogYWRtaW4vY3Jvbi5waHAgYWRtaW4vZGVsZXRlLnBocAorIyAgICAgYWRtaW4vZWRpdG9yLmh0bWwgYmFja3VwL2xpYi5waHAgYmFja3VwL3Jlc3RvcmUucGhwCisjIE5ldy1wYXRjaGVzOiBhcmNoLWVkdWZvcmdlQGNhdGFseXN0Lm5ldC5uei0tMjAwNC9tb29kbGUtb3JnLS1tb29kbGUtLTEuMy4zLS1wYXRjaC0xNQorIyBTdW1tYXJ5OiBVcGRhdGluZyB0byBsYXRlc3QgZnJvbSBNT09ETEVfMTRfU1RBQkxFICgxLjQuNSspCisjICAgc3VtbWFyeSBjYW4gYmUgbXVsdGlsaW5lIHdpdGggYSBsZWFkaW5nIHNwYWNlIGp1c3QgbGlrZSB0aGUgYWJvdmUgZmllbGRzCisjIEtleXdvcmRzOgorIworIyBVcGRhdGluZyB5YWRkYSB0YWRkYSB0YWRkYSBtYWRkYQorc3ViIHBhcnNlbG9nIHsKKyAgICBteSAoJHBzLCAkbG9nKSA9IEBfOworICAgIG15ICRrZXkgPSB1bmRlZjsKKworICAgICMgaGVhZGVycyB3ZSB3YW50IHRoYXQgY29udGFpbiBmaWxlbmFtZXM6CisgICAgbXkgJXdhbnRfaGVhZGVycyA9ICgKKyAgICAgICAgbmV3X2ZpbGVzID0+IDEsCisgICAgICAgIG1vZGlmaWVkX2ZpbGVzID0+IDEsCisgICAgICAgIHJlbmFtZWRfZmlsZXMgPT4gMSwKKyAgICAgICAgcmVuYW1lZF9kaXJlY3RvcmllcyA9PiAxLAorICAgICAgICByZW1vdmVkX2ZpbGVzID0+IDEsCisgICAgICAgIHJlbW92ZWRfZGlyZWN0b3JpZXMgPT4gMSwKKyAgICApOworCisgICAgY2hvbXAgKEAkbG9nKTsKKyAgICB3aGlsZSAoJF8gPSBzaGlmdCBAJGxvZykgeworICAgICAgICBpZiAoL15Db250aW51YXRpb24tb2Y6XHMqKC4qKS8pIHsKKyAgICAgICAgICAgICRwcy0+e3RhZ30gPSAkMTsKKyAgICAgICAgICAgICRrZXkgPSB1bmRlZjsKKyAgICAgICAgfSBlbHNpZiAoL15TdW1tYXJ5OlxzKiguKikkLyApIHsKKyAgICAgICAgICAgICMgc3VtbWFyeSBjYW4gYmUgbXVsdGlsaW5lIGFzIGxvbmcgYXMgaXQgaGFzIGEgbGVhZGluZyBzcGFjZS4KKwkgICAgIyB3ZSBzcXVlZXplIGl0IG9udG8gYSBzaW5nbGUgbGluZSwgdGhvdWdoLgorICAgICAgICAgICAgJHBzLT57c3VtbWFyeX0gPSBbICQxIF07CisgICAgICAgICAgICAka2V5ID0gJ3N1bW1hcnknOworICAgICAgICB9IGVsc2lmICgvXkNyZWF0b3I6ICguKilccyo8KFteXD5dKyk+LykgeworICAgICAgICAgICAgJHBzLT57YXV0aG9yfSA9ICQxOworICAgICAgICAgICAgJHBzLT57ZW1haWx9ID0gJDI7CisgICAgICAgICAgICAka2V5ID0gdW5kZWY7CisgICAgICAgICMgYW55ICotZmlsZXMgb3IgKi1kaXJlY3RvcmllcyBjYW4gYmUgcmVhZCBoZXJlOgorICAgICAgICB9IGVsc2lmICgvXihbQS1aXVthLXpcLV0rKTpccyooLiopJC8pIHsKKyAgICAgICAgICAgIG15ICR2YWwgPSAkMjsKKyAgICAgICAgICAgICRrZXkgPSBsYyAkMTsKKyAgICAgICAgICAgICRrZXkgPX4gdHIvLS9fLzsgIyB0b28gbGF6eSB0byBxdW90ZSA6UAorICAgICAgICAgICAgaWYgKCR3YW50X2hlYWRlcnN7JGtleX0pIHsKKyAgICAgICAgICAgICAgICBwdXNoIEB7JHBzLT57JGtleX19LCBzcGxpdCgvXHMrLywgJHZhbCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICRrZXkgPSB1bmRlZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNpZiAoL14kLykgeworICAgICAgICAgICAgbGFzdDsgIyByZW1haW5kZXIgb2YgQCRsb2cgdGhhdCBkaWRuJ3QgZ2V0IHNoaWZ0ZWQgb2ZmIGlzIG1lc3NhZ2UKKyAgICAgICAgfSBlbHNpZiAoJGtleSkgeworICAgICAgICAgICAgaWYgKC9eXHMrKC4qKSQvKSB7CisgICAgICAgICAgICAgICAgaWYgKCRrZXkgZXEgJ3N1bW1hcnknKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2ggQHskcHMtPnska2V5fX0sICQxOworICAgICAgICAgICAgICAgIH0gZWxzZSB7ICMgZmlsZXMvZGlyZWN0b3JpZXM6CisgICAgICAgICAgICAgICAgICAgIHB1c2ggQHskcHMtPnska2V5fX0sIHNwbGl0KC9ccysvLCAkMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAka2V5ID0gdW5kZWY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAjIGRyb3AgbGVhZGluZyBlbXB0eSBsaW5lcyBmcm9tIHRoZSBsb2cgbWVzc2FnZQorICAgIHdoaWxlIChAJGxvZyAmJiAkbG9nLT5bMF0gZXEgJycpIHsKKwlzaGlmdCBAJGxvZzsKKyAgICB9CisgICAgaWYgKGV4aXN0cyAkcHMtPntzdW1tYXJ5fSAmJiBAeyRwcy0+e3N1bW1hcnl9fSkgeworCSRwcy0+e3N1bW1hcnl9ID0gam9pbignICcsIEB7JHBzLT57c3VtbWFyeX19KTsKKyAgICB9CisgICAgZWxzaWYgKEAkbG9nID09IDApIHsKKwkkcHMtPntzdW1tYXJ5fSA9ICdlbXB0eSBjb21taXQgbWVzc2FnZSc7CisgICAgfSBlbHNlIHsKKwkkcHMtPntzdW1tYXJ5fSA9ICRsb2ctPlswXSAuICcuLi4nOworICAgIH0KKyAgICAkcHMtPnttZXNzYWdlfSA9IGpvaW4oIlxuIixAJGxvZyk7CisKKyAgICAjIHNraXAgQXJjaCBjb250cm9sIGZpbGVzLCB1bmVzY2FwZSBwaWthLWVzY2FwZWQgZmlsZXMKKyAgICBmb3JlYWNoIG15ICRrIChrZXlzICV3YW50X2hlYWRlcnMpIHsKKyAgICAgICAgbmV4dCB1bmxlc3MgKGRlZmluZWQgJHBzLT57JGt9KTsKKyAgICAgICAgbXkgQHRtcCA9ICgpOworICAgICAgICBmb3JlYWNoIG15ICR0IChAeyRwcy0+eyRrfX0pIHsKKyAgICAgICAgICAgbmV4dCB1bmxlc3MgbGVuZ3RoICgkdCk7CisgICAgICAgICAgIG5leHQgaWYgJHQgPX4gbSFce2FyY2hcfS8hOworICAgICAgICAgICBuZXh0IGlmICR0ID1+IG0hXC5hcmNoLWlkcy8hOworICAgICAgICAgICAjIHNob3VsZCB3ZSBza2lwIHRoaXM/CisgICAgICAgICAgIG5leHQgaWYgJHQgPX4gbSFcLmFyY2gtaW52ZW50b3J5JCE7CisgICAgICAgICAgICMgdGxhIGNhdC1hcmNoaXZlLWxvZyB3aWxsIGdpdmUgdXMgZmlsZW5hbWVzIHdpdGggc3BhY2VzIGFzIGZpbGVcKHNwKW5hbWUgLSB3aHk/CisgICAgICAgICAgICMgd2UgY2FuIGFzc3VtZSB0aGF0IGFueSBmaWxlbmFtZSB3aXRoIFwgaW5kaWNhdGVzIHNvbWUgcGlrYSBlc2NhcGluZyB0aGF0IHdlIHdhbnQgdG8gZ2V0IHJpZCBvZi4KKyAgICAgICAgICAgaWYgKCR0ID1+IC9cXC8gKXsKKyAgICAgICAgICAgICAgICR0ID0gKHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ2VzY2FwZScsJy0tdW5lc2NhcGVkJywkdCkpWzBdOworICAgICAgICAgICB9CisgICAgICAgICAgIHB1c2ggQHRtcCwgJHQ7CisgICAgICAgIH0KKyAgICAgICAgJHBzLT57JGt9ID0gXEB0bXA7CisgICAgfQorfQorCisjIHdyaXRlL3JlYWQgYSB0YWcKK3N1YiB0YWcgeworICAgIG15ICgkdGFnLCAkY29tbWl0KSA9IEBfOworCisgICAgaWYgKCRvcHRfbykgeworICAgICAgICAkdGFnID1+IHN8L3wtLXxnOworICAgIH0gZWxzZSB7CisJbXkgJHBhdGNobmFtZSA9ICR0YWc7CisJJHBhdGNobmFtZSA9fiBzLy4qLS0vLzsKKyAgICAgICAgJHRhZyA9IGdpdF9icmFuY2huYW1lICgkdGFnKSAuICctLScgLiAkcGF0Y2huYW1lOworICAgIH0KKworICAgIGlmICgkY29tbWl0KSB7CisgICAgICAgIG9wZW4oQywiPiIsIiRnaXRfZGlyL3JlZnMvdGFncy8kdGFnIikKKyAgICAgICAgICAgIG9yIGRpZSAiQ2Fubm90IGNyZWF0ZSB0YWcgJHRhZzogJCFcbiI7CisgICAgICAgIHByaW50IEMgIiRjb21taXRcbiIKKyAgICAgICAgICAgIG9yIGRpZSAiQ2Fubm90IHdyaXRlIHRhZyAkdGFnOiAkIVxuIjsKKyAgICAgICAgY2xvc2UoQykKKyAgICAgICAgICAgIG9yIGRpZSAiQ2Fubm90IHdyaXRlIHRhZyAkdGFnOiAkIVxuIjsKKyAgICAgICAgcHJpbnQgIiAqIENyZWF0ZWQgdGFnICckdGFnJyBvbiAnJGNvbW1pdCdcbiIgaWYgJG9wdF92OworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAjIHJlYWQKKyAgICAgICAgb3BlbihDLCI8IiwiJGdpdF9kaXIvcmVmcy90YWdzLyR0YWciKQorICAgICAgICAgICAgb3IgZGllICJDYW5ub3QgcmVhZCB0YWcgJHRhZzogJCFcbiI7CisgICAgICAgICRjb21taXQgPSA8Qz47CisgICAgICAgIGNob21wICRjb21taXQ7CisgICAgICAgIGRpZSAiRXJyb3IgcmVhZGluZyB0YWcgJHRhZzogJCFcbiIgdW5sZXNzIGxlbmd0aCAkY29tbWl0ID09IDQwOworICAgICAgICBjbG9zZShDKQorICAgICAgICAgICAgb3IgZGllICJDYW5ub3QgcmVhZCB0YWcgJHRhZzogJCFcbiI7CisgICAgICAgIHJldHVybiAkY29tbWl0OworICAgIH0KK30KKworIyB3cml0ZS9yZWFkIGEgcHJpdmF0ZSB0YWcKKyMgcmVhZHMgZmFpbCBzb2Z0bHkgaWYgdGhlIHRhZyBpc24ndCB0aGVyZQorc3ViIHB0YWcgeworICAgIG15ICgkdGFnLCAkY29tbWl0KSA9IEBfOworCisgICAgIyBkb24ndCB1c2Ugc3ViZGlycyBmb3IgdGFncyB5ZXQsIGl0IGNvdWxkIHNjcmV3IHVwIG90aGVyIHBvcmNlbGFpbnMKKyAgICAkdGFnID1+IHN8L3wsfGc7CisKKyAgICBteSAkdGFnX2ZpbGUgPSAiJHB0YWdfZGlyLyR0YWciOworICAgIG15ICR0YWdfYnJhbmNoX2RpciA9IGRpcm5hbWUoJHRhZ19maWxlKTsKKyAgICBta3BhdGgoJHRhZ19icmFuY2hfZGlyKSB1bmxlc3MgKC1kICR0YWdfYnJhbmNoX2Rpcik7CisKKyAgICBpZiAoJGNvbW1pdCkgeyAgICAgICAgICAgICAgIyB3cml0ZQorICAgICAgICBvcGVuKEMsIj4iLCR0YWdfZmlsZSkKKyAgICAgICAgICAgIG9yIGRpZSAiQ2Fubm90IGNyZWF0ZSB0YWcgJHRhZzogJCFcbiI7CisgICAgICAgIHByaW50IEMgIiRjb21taXRcbiIKKyAgICAgICAgICAgIG9yIGRpZSAiQ2Fubm90IHdyaXRlIHRhZyAkdGFnOiAkIVxuIjsKKyAgICAgICAgY2xvc2UoQykKKyAgICAgICAgICAgIG9yIGRpZSAiQ2Fubm90IHdyaXRlIHRhZyAkdGFnOiAkIVxuIjsKKwkkcnB0YWdzeyRjb21taXR9ID0gJHRhZworCSAgICB1bmxlc3MgJHRhZyA9fiBtLy0tYmFzZS0wJC87CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICMgcmVhZAorICAgICAgICAjIGlmIHRoZSB0YWcgaXNuJ3QgdGhlcmUsIHJldHVybiAwCisgICAgICAgIHVubGVzcyAoIC1zICR0YWdfZmlsZSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgb3BlbihDLCI8IiwkdGFnX2ZpbGUpCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCByZWFkIHRhZyAkdGFnOiAkIVxuIjsKKyAgICAgICAgJGNvbW1pdCA9IDxDPjsKKyAgICAgICAgY2hvbXAgJGNvbW1pdDsKKyAgICAgICAgZGllICJFcnJvciByZWFkaW5nIHRhZyAkdGFnOiAkIVxuIiB1bmxlc3MgbGVuZ3RoICRjb21taXQgPT0gNDA7CisgICAgICAgIGNsb3NlKEMpCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCByZWFkIHRhZyAkdGFnOiAkIVxuIjsKKwl1bmxlc3MgKGRlZmluZWQgJHJwdGFnc3skY29tbWl0fSkgeworCSAgICAkcnB0YWdzeyRjb21taXR9ID0gJHRhZzsKKwl9CisgICAgICAgIHJldHVybiAkY29tbWl0OworICAgIH0KK30KKworc3ViIGZpbmRfcGFyZW50cyB7CisgICAgIworICAgICMgSWRlbnRpZnkgd2hhdCBicmFuY2hlcyBhcmUgbWVyZ2luZyBpbnRvIG1lCisgICAgIyBhbmQgd2hldGhlciB3ZSBhcmUgZnVsbHkgbWVyZ2VkCisgICAgIyBnaXQtbWVyZ2UtYmFzZSA8aGVhZHNoYT4gPGhlYWRzaGE+IHNob3VsZCB0ZWxsCisgICAgIyBtZSB3aGF0IHRoZSBiYXNlIG9mIHRoZSBtZXJnZSBzaG91bGQgYmUKKyAgICAjCisgICAgbXkgJHBzID0gc2hpZnQ7CisKKyAgICBteSAlYnJhbmNoZXM7ICMgaG9sZHMgYW4gYXJyYXlyZWYgcGVyIGJyYW5jaAorICAgICAgICAgICAgICAgICAgIyB0aGUgYXJyYXlyZWYgY29udGFpbnMgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAjIG1lcmdlZCBwYXRjaGVzIGJldHdlZW4gdGhlIGJhc2UKKyAgICAgICAgICAgICAgICAgICMgb2YgdGhlIG1lcmdlIGFuZCB0aGUgY3VycmVudCBoZWFkCisKKyAgICBteSBAcGFyZW50czsgICMgcGFyZW50cyBmb3VuZCBmb3IgdGhpcyBjb21taXQKKworICAgICMgc2ltcGxlIGxvb3AgdG8gc3BsaXQgdGhlIG1lcmdlcworICAgICMgcGVyIGJyYW5jaAorICAgIGZvcmVhY2ggbXkgJG1lcmdlIChAeyRwcy0+e21lcmdlc319KSB7CisJbXkgJGJyYW5jaCA9IGdpdF9icmFuY2huYW1lKCRtZXJnZSk7CisJdW5sZXNzIChkZWZpbmVkICRicmFuY2hlc3skYnJhbmNofSApeworCSAgICAkYnJhbmNoZXN7JGJyYW5jaH0gPSBbXTsKKwl9CisJcHVzaCBAeyRicmFuY2hlc3skYnJhbmNofX0sICRtZXJnZTsKKyAgICB9CisKKyAgICAjCisgICAgIyBmb3JlYWNoIGJyYW5jaCBmaW5kIGEgbWVyZ2UgYmFzZSBhbmQgd2FsayBpdCB0byB0aGUKKyAgICAjIGhlYWQgd2hlcmUgd2UgYXJlLCBjb2xsZWN0aW5nIHRoZSBtZXJnZWQgcGF0Y2hzZXRzIHRoYXQKKyAgICAjIEFyY2ggaGFzIHJlY29yZGVkLiBLZWVwIHRoYXQgaW4gQGhhdmUKKyAgICAjIENvbXBhcmUgdGhhdCB3aXRoIHRoZSBjb21taXRzIG9uIHRoZSBvdGhlciBicmFuY2gKKyAgICAjIGJldHdlZW4gbWVyZ2UtYmFzZSBhbmQgdGhlIHRpcCBvZiB0aGUgYnJhbmNoIChAbmVlZCkKKyAgICAjIGFuZCBzZWUgaWYgd2UgaGF2ZSBhIHNlcmllcyBvZiBjb25zZWN1dGl2ZSBwYXRjaGVzCisgICAgIyBzdGFydGluZyBmcm9tIHRoZSBtZXJnZSBiYXNlLiBUaGUgdGlwIG9mIHRoZSBzZXJpZXMKKyAgICAjIG9mIGNvbnNlY3V0aXZlIHBhdGNoZXMgbWVyZ2VkIGlzIG91ciBuZXcgcGFyZW50IGZvcgorICAgICMgdGhhdCBicmFuY2guCisgICAgIworICAgIGZvcmVhY2ggbXkgJGJyYW5jaCAoa2V5cyAlYnJhbmNoZXMpIHsKKworCSMgY2hlY2sgdGhhdCB3ZSBhY3R1YWxseSBrbm93IGFib3V0IHRoZSBicmFuY2gKKwluZXh0IHVubGVzcyAtZSAiJGdpdF9kaXIvcmVmcy9oZWFkcy8kYnJhbmNoIjsKKworCW15ICRtZXJnZWJhc2UgPSBzYWZlX3BpcGVfY2FwdHVyZShxdyhnaXQtbWVyZ2UtYmFzZSksICRicmFuY2gsICRwcy0+e2JyYW5jaH0pOworCWlmICgkPykgeworCSAgICAjIERvbid0IGRpZSBoZXJlLCBBcmNoIHN1cHBvcnRzIG9uZS13YXkgY2hlcnJ5LXBpY2tpbmcKKwkgICAgIyBiZXR3ZWVuIGJyYW5jaGVzIHdpdGggbm8gY29tbW9uIGJhc2UgKG9yIGFueSByZWxhdGlvbnNoaXAKKwkgICAgIyBhdCBhbGwgYmVmb3JlaGFuZCkKKwkgICAgd2FybiAiQ2Fubm90IGZpbmQgbWVyZ2UgYmFzZSBmb3IgJGJyYW5jaCBhbmQgJHBzLT57YnJhbmNofSI7CisJICAgIG5leHQ7CisJfQorCWNob21wICRtZXJnZWJhc2U7CisKKwkjIG5vdyB3YWxrIHVwIHRvIHRoZSBtZXJnZXBvaW50IGNvbGxlY3Rpbmcgd2hhdCBwYXRjaGVzIHdlIGhhdmUKKwlteSAkYnJhbmNodGlwID0gZ2l0X3Jldl9wYXJzZSgkcHMtPnticmFuY2h9KTsKKwlteSBAYW5jZXN0b3JzID0gYGdpdC1yZXYtbGlzdCAtLXRvcG8tb3JkZXIgJGJyYW5jaHRpcCBeJG1lcmdlYmFzZWA7CisJbXkgJWhhdmU7ICMgY29sbGVjdGVkIG1lcmdlcyB0aGlzIGJyYW5jaCBoYXMKKwlmb3JlYWNoIG15ICRtZXJnZSAoQHskcHMtPnttZXJnZXN9fSkgeworCSAgICAkaGF2ZXskbWVyZ2V9ID0gMTsKKwl9CisJbXkgJWFuY2VzdG9yc2hhdmU7CisJZm9yZWFjaCBteSAkcGFyIChAYW5jZXN0b3JzKSB7CisJICAgICRwYXIgPSBjb21taXRpZDJwc2V0KCRwYXIpOworCSAgICBpZiAoZGVmaW5lZCAkcGFyLT57bWVyZ2VzfSkgeworCQlmb3JlYWNoIG15ICRtZXJnZSAoQHskcGFyLT57bWVyZ2VzfX0pIHsKKwkJICAgICRhbmNlc3RvcnNoYXZleyRtZXJnZX09MTsKKwkJfQorCSAgICB9CisJfQorCSMgcHJpbnQgIisrKysgTWVyZ2VzIGluICRwcy0+e2lkfSBhcmUuLi4uXG4iOworCSMgbXkgQGhhdmUgPSBzb3J0IGtleXMgJWhhdmU7CXByaW50IER1bXBlcihcQGhhdmUpOworCisJIyBtZXJnZSB3aGF0IHdlIGhhdmUgd2l0aCB3aGF0IGFuY2VzdG9ycyBoYXZlCisJJWhhdmUgPSAoJWhhdmUsICVhbmNlc3RvcnNoYXZlKTsKKworCSMgc2VlIHdoYXQgdGhlIHJlbW90ZSBicmFuY2ggaGFzIC0gdGhlc2UgYXJlIHRoZSBtZXJnZXMgd2UKKwkjIHdpbGwgd2FudCB0byBoYXZlIGluIGEgY29uc2VjdXRpdmUgc2VyaWVzIGZyb20gdGhlIG1lcmdlYmFzZQorCW15ICRvdGhlcmJyYW5jaHRpcCA9IGdpdF9yZXZfcGFyc2UoJGJyYW5jaCk7CisJbXkgQG5lZWRyYXcgPSBgZ2l0LXJldi1saXN0IC0tdG9wby1vcmRlciAkb3RoZXJicmFuY2h0aXAgXiRtZXJnZWJhc2VgOworCW15IEBuZWVkOworCWZvcmVhY2ggbXkgJG5lZWRwcyAoQG5lZWRyYXcpIHsgCSMgZ2V0IHRoZSBwc2V0cworCSAgICAkbmVlZHBzID0gY29tbWl0aWQycHNldCgkbmVlZHBzKTsKKwkgICAgIyBnaXQtcmV2LWxpc3Qgd2lsbCBhbHNvCisJICAgICMgbGlzdCBjb21taXRzIG1lcmdlZCBpbiB2aWEgZWFybGllcgorCSAgICAjIG1lcmdlcy4gd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBjb21taXRzCisJICAgICMgZnJvbSB0aGUgYnJhbmNoIHdlJ3JlIGxvb2tpbmcgYXQKKwkgICAgaWYgKCRicmFuY2ggZXEgJG5lZWRwcy0+e2JyYW5jaH0pIHsKKwkJcHVzaCBAbmVlZCwgJG5lZWRwcy0+e2lkfTsKKwkgICAgfQorCX0KKworCSMgcHJpbnQgIisrKysgTWVyZ2VzIGZyb20gJGJyYW5jaCB3ZSB3YW50IGFyZS4uLi5cbiI7CisJIyBwcmludCBEdW1wZXIoXEBuZWVkKTsKKworCW15ICRuZXdwYXJlbnQ7CisJd2hpbGUgKG15ICRuZWVkZWRfY29tbWl0ID0gcG9wIEBuZWVkKSB7CisJICAgIGlmICgkaGF2ZXskbmVlZGVkX2NvbW1pdH0pIHsKKwkJJG5ld3BhcmVudCA9ICRuZWVkZWRfY29tbWl0OworCSAgICB9IGVsc2UgeworCQlsYXN0OyAjIGJyZWFrIG91dCBvZiB0aGUgd2hpbGUKKwkgICAgfQorCX0KKwlpZiAoJG5ld3BhcmVudCkgeworCSAgICBwdXNoIEBwYXJlbnRzLCAkbmV3cGFyZW50OworCX0KKworCisgICAgfSAjIGVuZCBmb3JlYWNoIGJyYW5jaAorCisgICAgIyBwcnVuZSByZWR1bmRhbnQgcGFyZW50cworICAgIG15ICVwYXJlbnRzOworICAgIGZvcmVhY2ggbXkgJHAgKEBwYXJlbnRzKSB7CisJJHBhcmVudHN7JHB9ID0gMTsKKyAgICB9CisgICAgZm9yZWFjaCBteSAkcCAoQHBhcmVudHMpIHsKKwluZXh0IHVubGVzcyBleGlzdHMgJHBzZXRzeyRwfXttZXJnZXN9OworCW5leHQgdW5sZXNzIHJlZiAgICAkcHNldHN7JHB9e21lcmdlc307CisJbXkgQG1lcmdlcyA9IEB7JHBzZXRzeyRwfXttZXJnZXN9fTsKKwlmb3JlYWNoIG15ICRtZXJnZSAoQG1lcmdlcykgeworCSAgICBpZiAoJHBhcmVudHN7JG1lcmdlfSkgeworCQlkZWxldGUgJHBhcmVudHN7JG1lcmdlfTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBAcGFyZW50cyA9ICgpOworICAgIGZvcmVhY2ggKGtleXMgJXBhcmVudHMpIHsKKyAgICAgICAgcHVzaCBAcGFyZW50cywgJy1wJywgcHRhZygkXyk7CisgICAgfQorICAgIHJldHVybiBAcGFyZW50czsKK30KKworc3ViIGdpdF9yZXZfcGFyc2UgeworICAgIG15ICRuYW1lID0gc2hpZnQ7CisgICAgbXkgJHZhbCAgPSBzYWZlX3BpcGVfY2FwdHVyZShxdyhnaXQtcmV2LXBhcnNlKSwgJG5hbWUpOworICAgIGRpZSAiRXJyb3I6IGdpdC1yZXYtcGFyc2UgJG5hbWUiIGlmICQ/OworICAgIGNob21wICR2YWw7CisgICAgcmV0dXJuICR2YWw7Cit9CisKKyMgcmVzb2x2ZSBhIFNIQTEgdG8gYSBrbm93biBwYXRjaHNldAorc3ViIGNvbW1pdGlkMnBzZXQgeworICAgIG15ICRjb21taXRpZCA9IHNoaWZ0OworICAgIGNob21wICRjb21taXRpZDsKKyAgICBteSAkbmFtZSA9ICRycHRhZ3N7JGNvbW1pdGlkfQorCXx8IGRpZSAiQ2Fubm90IGZpbmQgcmV2ZXJzZSB0YWcgbWFwcGluZyBmb3IgJGNvbW1pdGlkIjsKKyAgICAkbmFtZSA9fiBzfCx8L3w7CisgICAgbXkgJHBzICAgPSAkcHNldHN7JG5hbWV9CisJfHwgKHByaW50IER1bXBlcihzb3J0IGtleXMgJXBzZXRzKSkgJiYgZGllICJDYW5ub3QgZmluZCBwYXRjaHNldCBmb3IgJG5hbWUiOworICAgIHJldHVybiAkcHM7Cit9CisKKworIyBhbiBhbHRlcm5hdGl2ZSB0byBgY29tbWFuZGAgdGhhdCBhbGxvd3MgaW5wdXQgdG8gYmUgcGFzc2VkIGFzIGFuIGFycmF5CisjIHRvIHdvcmsgYXJvdW5kIHNoZWxsIHByb2JsZW1zIHdpdGggd2VpcmQgY2hhcmFjdGVycyBpbiBhcmd1bWVudHMKK3N1YiBzYWZlX3BpcGVfY2FwdHVyZSB7CisgICAgbXkgQG91dHB1dDsKKyAgICBpZiAobXkgJHBpZCA9IG9wZW4gbXkgJGNoaWxkLCAnLXwnKSB7CisgICAgICAgIEBvdXRwdXQgPSAoPCRjaGlsZD4pOworICAgICAgICBjbG9zZSAkY2hpbGQgb3IgZGllIGpvaW4oJyAnLEBfKS4iOiAkISAkPyI7CisgICAgfSBlbHNlIHsKKwlleGVjKEBfKSBvciBkaWUgIiQhICQ/IjsgIyBleGVjKCkgY2FuIGZhaWwgdGhlIGV4ZWN1dGFibGUgY2FuJ3QgYmUgZm91bmQKKyAgICB9CisgICAgcmV0dXJuIHdhbnRhcnJheSA/IEBvdXRwdXQgOiBqb2luKCcnLEBvdXRwdXQpOworfQorCisjIGB0bGEgbG9ncyAtcmYgLWQgPGRpcj4gfCBoZWFkIC1uMWAgb3IgYGJheiB0cmVlLWlkIDxkaXI+YAorc3ViIGFyY2hfdHJlZV9pZCB7CisgICAgbXkgJGRpciA9IHNoaWZ0OworICAgIGNob21wKCBteSAkcmV0ID0gKHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ2xvZ3MnLCctcmYnLCctZCcsJGRpcikpWzBdICk7CisgICAgcmV0dXJuICRyZXQ7Cit9CisKK3N1YiBhcmNoaXZlX3JlYWNoYWJsZSB7CisgICAgbXkgJGFyY2hpdmUgPSBzaGlmdDsKKyAgICByZXR1cm4gMSBpZiAkcmVhY2hhYmxleyRhcmNoaXZlfTsKKyAgICByZXR1cm4gMCBpZiAkdW5yZWFjaGFibGV7JGFyY2hpdmV9OworCisgICAgaWYgKHN5c3RlbSAiJFRMQSB3aGVyZWlzLWFyY2hpdmUgJGFyY2hpdmUgPi9kZXYvbnVsbCIpIHsKKyAgICAgICAgaWYgKCRvcHRfYSAmJiAoc3lzdGVtKCRUTEEsJ3JlZ2lzdGVyLWFyY2hpdmUnLAorICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vbWlycm9ycy5zb3VyY2Vjb250cm9sLm5ldC8kYXJjaGl2ZSIpID09IDApKSB7CisgICAgICAgICAgICAkcmVhY2hhYmxleyRhcmNoaXZlfSA9IDE7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBwcmludCBTVERFUlIgIkFyY2hpdmUgaXMgdW5yZWFjaGFibGU6ICRhcmNoaXZlXG4iOworICAgICAgICAkdW5yZWFjaGFibGV7JGFyY2hpdmV9ID0gMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJHJlYWNoYWJsZXskYXJjaGl2ZX0gPSAxOworICAgICAgICByZXR1cm4gMTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9naXQtYmlzZWN0LnNoIGIvZ2l0LWJpc2VjdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MWIzNjdhCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWJpc2VjdC5zaApAQCAtMCwwICsxLDM1MCBAQAorIyEvYmluL3NoCisKK1VTQUdFPSdbaGVscHxzdGFydHxiYWR8Z29vZHxuZXd8b2xkfHRlcm1zfHNraXB8bmV4dHxyZXNldHx2aXN1YWxpemV8dmlld3xyZXBsYXl8bG9nfHJ1bl0nCitMT05HX1VTQUdFPSdnaXQgYmlzZWN0IGhlbHAKKwlwcmludCB0aGlzIGxvbmcgaGVscCBtZXNzYWdlLgorZ2l0IGJpc2VjdCBzdGFydCBbLS10ZXJtLXtvbGQsZ29vZH09PHRlcm0+IC0tdGVybS17bmV3LGJhZH09PHRlcm0+XQorCQkgWy0tbm8tY2hlY2tvdXRdIFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSBbPHBhdGhzcGVjPi4uLl0KKwlyZXNldCBiaXNlY3Qgc3RhdGUgYW5kIHN0YXJ0IGJpc2VjdGlvbi4KK2dpdCBiaXNlY3QgKGJhZHxuZXcpIFs8cmV2Pl0KKwltYXJrIDxyZXY+IGEga25vd24tYmFkIHJldmlzaW9uLworCQlhIHJldmlzaW9uIGFmdGVyIGNoYW5nZSBpbiBhIGdpdmVuIHByb3BlcnR5LgorZ2l0IGJpc2VjdCAoZ29vZHxvbGQpIFs8cmV2Pi4uLl0KKwltYXJrIDxyZXY+Li4uIGtub3duLWdvb2QgcmV2aXNpb25zLworCQlyZXZpc2lvbnMgYmVmb3JlIGNoYW5nZSBpbiBhIGdpdmVuIHByb3BlcnR5LgorZ2l0IGJpc2VjdCB0ZXJtcyBbLS10ZXJtLWdvb2QgfCAtLXRlcm0tYmFkXQorCXNob3cgdGhlIHRlcm1zIHVzZWQgZm9yIG9sZCBhbmQgbmV3IGNvbW1pdHMgKGRlZmF1bHQ6IGJhZCwgZ29vZCkKK2dpdCBiaXNlY3Qgc2tpcCBbKDxyZXY+fDxyYW5nZT4pLi4uXQorCW1hcmsgPHJldj4uLi4gdW50ZXN0YWJsZSByZXZpc2lvbnMuCitnaXQgYmlzZWN0IG5leHQKKwlmaW5kIG5leHQgYmlzZWN0aW9uIHRvIHRlc3QgYW5kIGNoZWNrIGl0IG91dC4KK2dpdCBiaXNlY3QgcmVzZXQgWzxjb21taXQ+XQorCWZpbmlzaCBiaXNlY3Rpb24gc2VhcmNoIGFuZCBnbyBiYWNrIHRvIGNvbW1pdC4KK2dpdCBiaXNlY3QgKHZpc3VhbGl6ZXx2aWV3KQorCXNob3cgYmlzZWN0IHN0YXR1cyBpbiBnaXRrLgorZ2l0IGJpc2VjdCByZXBsYXkgPGxvZ2ZpbGU+CisJcmVwbGF5IGJpc2VjdGlvbiBsb2cuCitnaXQgYmlzZWN0IGxvZworCXNob3cgYmlzZWN0IGxvZy4KK2dpdCBiaXNlY3QgcnVuIDxjbWQ+Li4uCisJdXNlIDxjbWQ+Li4uIHRvIGF1dG9tYXRpY2FsbHkgYmlzZWN0LgorCitQbGVhc2UgdXNlICJnaXQgaGVscCBiaXNlY3QiIHRvIGdldCB0aGUgZnVsbCBtYW4gcGFnZS4nCisKK09QVElPTlNfU1BFQz0KKy4gZ2l0LXNoLXNldHVwCisKK194NDA9J1swLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl0nCitfeDQwPSIkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwIgorVEVSTV9CQUQ9YmFkCitURVJNX0dPT0Q9Z29vZAorCitiaXNlY3RfaGVhZCgpCit7CisJaWYgdGVzdCAtZiAiJEdJVF9ESVIvQklTRUNUX0hFQUQiCisJdGhlbgorCQllY2hvIEJJU0VDVF9IRUFECisJZWxzZQorCQllY2hvIEhFQUQKKwlmaQorfQorCitiaXNlY3RfYXV0b3N0YXJ0KCkgeworCXRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9TVEFSVCIgfHwgeworCQlnZXR0ZXh0bG4gIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIiA+JjIKKwkJaWYgdGVzdCAtdCAwCisJCXRoZW4KKwkJCSMgVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKwkJCSMgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorCQkJIyBhdCB0aGlzIHBvaW50LgorCQkJZ2V0dGV4dCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIiA+JjIKKwkJCXJlYWQgeWVzbm8KKwkJCWNhc2UgIiR5ZXNubyIgaW4KKwkJCVtObl0qKQorCQkJCWV4aXQgOzsKKwkJCWVzYWMKKwkJCWJpc2VjdF9zdGFydAorCQllbHNlCisJCQlleGl0IDEKKwkJZmkKKwl9Cit9CisKK2Jpc2VjdF9zdGFydCgpIHsKKwlnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgJEAgfHwgZXhpdAorCisJIworCSMgQ2hhbmdlIHN0YXRlLgorCSMgSW4gY2FzZSBvZiBtaXN0YWtlbiByZXZzIG9yIGNoZWNrb3V0IGVycm9yLCBvciBzaWduYWxzIHJlY2VpdmVkLAorCSMgImJpc2VjdF9hdXRvX25leHQiIGJlbG93IG1heSBleGl0IG9yIG1pc2JlaGF2ZS4KKwkjIFdlIGhhdmUgdG8gdHJhcCB0aGlzIHRvIGJlIGFibGUgdG8gY2xlYW4gdXAgdXNpbmcKKwkjICJiaXNlY3RfY2xlYW5fc3RhdGUiLgorCSMKKwl0cmFwICdnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUnIDAKKwl0cmFwICdleGl0IDI1NScgMSAyIDMgMTUKKworCSMKKwkjIENoZWNrIGlmIHdlIGNhbiBwcm9jZWVkIHRvIHRoZSBuZXh0IGJpc2VjdCBzdGF0ZS4KKwkjCisJZ2V0X3Rlcm1zCisJYmlzZWN0X2F1dG9fbmV4dAorCisJdHJhcCAnLScgMAorfQorCitiaXNlY3Rfc2tpcCgpIHsKKwlhbGw9JycKKwlmb3IgYXJnIGluICIkQCIKKwlkbworCQljYXNlICIkYXJnIiBpbgorCQkqLi4qKQorCQkJcmV2cz0kKGdpdCByZXYtbGlzdCAiJGFyZyIpIHx8IGRpZSAiJChldmFsX2dldHRleHQgIkJhZCByZXYgaW5wdXQ6IFwkYXJnIikiIDs7CisJCSopCisJCQlyZXZzPSQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkYXJnIikgOzsKKwkJZXNhYworCQlhbGw9IiRhbGwgJHJldnMiCisJZG9uZQorCWV2YWwgYmlzZWN0X3N0YXRlICdza2lwJyAkYWxsCit9CisKK2Jpc2VjdF9zdGF0ZSgpIHsKKwliaXNlY3RfYXV0b3N0YXJ0CisJc3RhdGU9JDEKKwlnaXQgYmlzZWN0LS1oZWxwZXIgLS1jaGVjay1hbmQtc2V0LXRlcm1zICRzdGF0ZSAkVEVSTV9HT09EICRURVJNX0JBRCB8fCBleGl0CisJZ2V0X3Rlcm1zCisJY2FzZSAiJCMsJHN0YXRlIiBpbgorCTAsKikKKwkJZGllICJQbGVhc2UgY2FsbCAnYmlzZWN0X3N0YXRlJyB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iIDs7CisJMSwiJFRFUk1fQkFEInwxLCIkVEVSTV9HT09EInwxLHNraXApCisJCWJpc2VjdGVkX2hlYWQ9JChiaXNlY3RfaGVhZCkKKwkJcmV2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJGJpc2VjdGVkX2hlYWQiKSB8fAorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQmFkIHJldiBpbnB1dDogXCRiaXNlY3RlZF9oZWFkIikiCisJCWdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSAiJHN0YXRlIiAiJHJldiIgIiRURVJNX0dPT0QiICIkVEVSTV9CQUQiIHx8IGV4aXQKKwkJZ2l0IGJpc2VjdC0taGVscGVyIC0tY2hlY2stZXhwZWN0ZWQtcmV2cyAiJHJldiIgOzsKKwkyLCIkVEVSTV9CQUQifCosIiRURVJNX0dPT0QifCosc2tpcCkKKwkJc2hpZnQKKwkJaGFzaF9saXN0PScnCisJCWZvciByZXYgaW4gIiRAIgorCQlkbworCQkJc2hhPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHJldl57Y29tbWl0fSIpIHx8CisJCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQmFkIHJldiBpbnB1dDogXCRyZXYiKSIKKwkJCWhhc2hfbGlzdD0iJGhhc2hfbGlzdCAkc2hhIgorCQlkb25lCisJCWZvciByZXYgaW4gJGhhc2hfbGlzdAorCQlkbworCQkJZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlICIkc3RhdGUiICIkcmV2IiAiJFRFUk1fR09PRCIgIiRURVJNX0JBRCIgfHwgZXhpdAorCQlkb25lCisJCWdpdCBiaXNlY3QtLWhlbHBlciAtLWNoZWNrLWV4cGVjdGVkLXJldnMgJGhhc2hfbGlzdCA7OworCSosIiRURVJNX0JBRCIpCisJCWRpZSAiJChldmFsX2dldHRleHQgIidnaXQgYmlzZWN0IFwkVEVSTV9CQUQnIGNhbiB0YWtlIG9ubHkgb25lIGFyZ3VtZW50LiIpIiA7OworCSopCisJCXVzYWdlIDs7CisJZXNhYworCWJpc2VjdF9hdXRvX25leHQKK30KKworYmlzZWN0X2F1dG9fbmV4dCgpIHsKKwlnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayAkVEVSTV9HT09EICRURVJNX0JBRCAmJiBiaXNlY3RfbmV4dCB8fCA6Cit9CisKK2Jpc2VjdF9uZXh0KCkgeworCWNhc2UgIiQjIiBpbiAwKSA7OyAqKSB1c2FnZSA7OyBlc2FjCisJYmlzZWN0X2F1dG9zdGFydAorCWdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrICRURVJNX0dPT0QgJFRFUk1fQkFEICRURVJNX0dPT0R8fCBleGl0CisKKwkjIFBlcmZvcm0gYWxsIGJpc2VjdGlvbiBjb21wdXRhdGlvbiwgZGlzcGxheSBhbmQgY2hlY2tvdXQKKwlnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCAkKHRlc3QgLWYgIiRHSVRfRElSL0JJU0VDVF9IRUFEIiAmJiBlY2hvIC0tbm8tY2hlY2tvdXQpCisJcmVzPSQ/CisKKwkjIENoZWNrIGlmIHdlIHNob3VsZCBleGl0IGJlY2F1c2UgYmlzZWN0aW9uIGlzIGZpbmlzaGVkCisJaWYgdGVzdCAkcmVzIC1lcSAxMAorCXRoZW4KKwkJYmFkX3Jldj0kKGdpdCBzaG93LXJlZiAtLWhhc2ggLS12ZXJpZnkgcmVmcy9iaXNlY3QvJFRFUk1fQkFEKQorCQliYWRfY29tbWl0PSQoZ2l0IHNob3ctYnJhbmNoICRiYWRfcmV2KQorCQllY2hvICIjIGZpcnN0ICRURVJNX0JBRCBjb21taXQ6ICRiYWRfY29tbWl0IiA+PiIkR0lUX0RJUi9CSVNFQ1RfTE9HIgorCQlleGl0IDAKKwllbGlmIHRlc3QgJHJlcyAtZXEgMgorCXRoZW4KKwkJZWNobyAiIyBvbmx5IHNraXBwZWQgY29tbWl0cyBsZWZ0IHRvIHRlc3QiID4+IiRHSVRfRElSL0JJU0VDVF9MT0ciCisJCWdvb2RfcmV2cz0kKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUob2JqZWN0bmFtZSkiICJyZWZzL2Jpc2VjdC8kVEVSTV9HT09ELSoiKQorCQlmb3Igc2tpcHBlZCBpbiAkKGdpdCByZXYtbGlzdCByZWZzL2Jpc2VjdC8kVEVSTV9CQUQgLS1ub3QgJGdvb2RfcmV2cykKKwkJZG8KKwkJCXNraXBwZWRfY29tbWl0PSQoZ2l0IHNob3ctYnJhbmNoICRza2lwcGVkKQorCQkJZWNobyAiIyBwb3NzaWJsZSBmaXJzdCAkVEVSTV9CQUQgY29tbWl0OiAkc2tpcHBlZF9jb21taXQiID4+IiRHSVRfRElSL0JJU0VDVF9MT0ciCisJCWRvbmUKKwkJZXhpdCAkcmVzCisJZmkKKworCSMgQ2hlY2sgZm9yIGFuIGVycm9yIGluIHRoZSBiaXNlY3Rpb24gcHJvY2VzcworCXRlc3QgJHJlcyAtbmUgMCAmJiBleGl0ICRyZXMKKworCXJldHVybiAwCit9CisKK2Jpc2VjdF92aXN1YWxpemUoKSB7CisJZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgJFRFUk1fR09PRCAkVEVSTV9CQUQgZmFpbCB8fCBleGl0CisKKwlpZiB0ZXN0ICQjID0gMAorCXRoZW4KKwkJaWYgdGVzdCAtbiAiJHtESVNQTEFZK3NldH0ke1NFU1NJT05OQU1FK3NldH0ke01TWVNURU0rc2V0fSR7U0VDVVJJVFlTRVNTSU9OSUQrc2V0fSIgJiYKKwkJCXR5cGUgZ2l0ayA+L2Rldi9udWxsIDI+JjEKKwkJdGhlbgorCQkJc2V0IGdpdGsKKwkJZWxzZQorCQkJc2V0IGdpdCBsb2cKKwkJZmkKKwllbHNlCisJCWNhc2UgIiQxIiBpbgorCQlnaXQqfHRpZykgOzsKKwkJLSopCXNldCBnaXQgbG9nICIkQCIgOzsKKwkJKikJc2V0IGdpdCAiJEAiIDs7CisJCWVzYWMKKwlmaQorCisJZXZhbCAnIiRAIicgLS1iaXNlY3QgLS0gJChjYXQgIiRHSVRfRElSL0JJU0VDVF9OQU1FUyIpCit9CisKK2Jpc2VjdF9yZXBsYXkgKCkgeworCWZpbGU9IiQxIgorCXRlc3QgIiQjIiAtZXEgMSB8fCBkaWUgIiQoZ2V0dGV4dCAiTm8gbG9nZmlsZSBnaXZlbiIpIgorCXRlc3QgLXIgIiRmaWxlIiB8fCBkaWUgIiQoZXZhbF9nZXR0ZXh0ICJjYW5ub3QgcmVhZCBcJGZpbGUgZm9yIHJlcGxheWluZyIpIgorCWdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCB8fCBleGl0CisJb0lGUz0iJElGUyIgSUZTPSIkSUZTJChwcmludGYgJ1wwMTUnKSIKKwl3aGlsZSByZWFkIGdpdCBiaXNlY3QgY29tbWFuZCByZXYKKwlkbworCQl0ZXN0ICIkZ2l0ICRiaXNlY3QiID0gImdpdCBiaXNlY3QiIHx8IHRlc3QgIiRnaXQiID0gImdpdC1iaXNlY3QiIHx8IGNvbnRpbnVlCisJCWlmIHRlc3QgIiRnaXQiID0gImdpdC1iaXNlY3QiCisJCXRoZW4KKwkJCXJldj0iJGNvbW1hbmQiCisJCQljb21tYW5kPSIkYmlzZWN0IgorCQlmaQorCQlnZXRfdGVybXMKKwkJZ2l0IGJpc2VjdC0taGVscGVyIC0tY2hlY2stYW5kLXNldC10ZXJtcyAiJGNvbW1hbmQiICIkVEVSTV9HT09EIiAiJFRFUk1fQkFEIiB8fCBleGl0CisJCWdldF90ZXJtcworCQljYXNlICIkY29tbWFuZCIgaW4KKwkJc3RhcnQpCisJCQljbWQ9ImJpc2VjdF9zdGFydCAkcmV2IgorCQkJZXZhbCAiJGNtZCIgOzsKKwkJIiRURVJNX0dPT0QifCIkVEVSTV9CQUQifHNraXApCisJCQlnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgIiRjb21tYW5kIiAiJHJldiIgIiRURVJNX0dPT0QiICIkVEVSTV9CQUQiIHx8IGV4aXQ7OworCQl0ZXJtcykKKwkJCWdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC10ZXJtcyAkcmV2IHx8IGV4aXQ7OworCQkqKQorCQkJZGllICIkKGdldHRleHQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIpIiA7OworCQllc2FjCisJZG9uZSA8IiRmaWxlIgorCUlGUz0iJG9JRlMiCisJYmlzZWN0X2F1dG9fbmV4dAorfQorCitiaXNlY3RfcnVuICgpIHsKKwlnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayAkVEVSTV9HT09EICRURVJNX0JBRCBmYWlsIHx8IGV4aXQKKworCXRlc3QgLW4gIiQqIiB8fCBkaWUgIiQoZ2V0dGV4dCAiYmlzZWN0IHJ1biBmYWlsZWQ6IG5vIGNvbW1hbmQgcHJvdmlkZWQuIikiCisKKwl3aGlsZSB0cnVlCisJZG8KKwkJY29tbWFuZD0iJEAiCisJCWV2YWxfZ2V0dGV4dGxuICJydW5uaW5nIFwkY29tbWFuZCIKKwkJIiRAIgorCQlyZXM9JD8KKworCQkjIENoZWNrIGZvciByZWFsbHkgYmFkIHJ1biBlcnJvci4KKwkJaWYgWyAkcmVzIC1sdCAwIC1vICRyZXMgLWdlIDEyOCBdCisJCXRoZW4KKwkJCWV2YWxfZ2V0dGV4dGxuICJiaXNlY3QgcnVuIGZhaWxlZDoKK2V4aXQgY29kZSBcJHJlcyBmcm9tICdcJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiID4mMgorCQkJZXhpdCAkcmVzCisJCWZpCisKKwkJIyBGaW5kIGN1cnJlbnQgc3RhdGUgZGVwZW5kaW5nIG9uIHJ1biBzdWNjZXNzIG9yIGZhaWx1cmUuCisJCSMgQSBzcGVjaWFsIGV4aXQgY29kZSBvZiAxMjUgbWVhbnMgY2Fubm90IHRlc3QuCisJCWlmIFsgJHJlcyAtZXEgMTI1IF0KKwkJdGhlbgorCQkJc3RhdGU9J3NraXAnCisJCWVsaWYgWyAkcmVzIC1ndCAwIF0KKwkJdGhlbgorCQkJc3RhdGU9IiRURVJNX0JBRCIKKwkJZWxzZQorCQkJc3RhdGU9IiRURVJNX0dPT0QiCisJCWZpCisKKwkJIyBXZSBoYXZlIHRvIHVzZSBhIHN1YnNoZWxsIGJlY2F1c2UgImJpc2VjdF9zdGF0ZSIgY2FuIGV4aXQuCisJCSggYmlzZWN0X3N0YXRlICRzdGF0ZSA+IiRHSVRfRElSL0JJU0VDVF9SVU4iICkKKwkJcmVzPSQ/CisKKwkJY2F0ICIkR0lUX0RJUi9CSVNFQ1RfUlVOIgorCisJCWlmIHNhbmVfZ3JlcCAiZmlyc3QgJFRFUk1fQkFEIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiICIkR0lUX0RJUi9CSVNFQ1RfUlVOIiBcCisJCQk+L2Rldi9udWxsCisJCXRoZW4KKwkJCWdldHRleHRsbiAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiID4mMgorCQkJZXhpdCAkcmVzCisJCWZpCisKKwkJaWYgWyAkcmVzIC1uZSAwIF0KKwkJdGhlbgorCQkJZXZhbF9nZXR0ZXh0bG4gImJpc2VjdCBydW4gZmFpbGVkOgorJ2Jpc2VjdF9zdGF0ZSBcJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlIFwkcmVzIiA+JjIKKwkJCWV4aXQgJHJlcworCQlmaQorCisJCWlmIHNhbmVfZ3JlcCAiaXMgdGhlIGZpcnN0ICRURVJNX0JBRCBjb21taXQiICIkR0lUX0RJUi9CSVNFQ1RfUlVOIiA+L2Rldi9udWxsCisJCXRoZW4KKwkJCWdldHRleHRsbiAiYmlzZWN0IHJ1biBzdWNjZXNzIgorCQkJZXhpdCAwOworCQlmaQorCisJZG9uZQorfQorCitiaXNlY3RfbG9nICgpIHsKKwl0ZXN0IC1zICIkR0lUX0RJUi9CSVNFQ1RfTE9HIiB8fCBkaWUgIiQoZ2V0dGV4dCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIikiCisJY2F0ICIkR0lUX0RJUi9CSVNFQ1RfTE9HIgorfQorCitnZXRfdGVybXMgKCkgeworCWlmIHRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9URVJNUyIKKwl0aGVuCisJCXsKKwkJcmVhZCBURVJNX0JBRAorCQlyZWFkIFRFUk1fR09PRAorCQl9IDwiJEdJVF9ESVIvQklTRUNUX1RFUk1TIgorCWZpCit9CisKK2Nhc2UgIiQjIiBpbgorMCkKKwl1c2FnZSA7OworKikKKwljbWQ9IiQxIgorCWdldF90ZXJtcworCXNoaWZ0CisJY2FzZSAiJGNtZCIgaW4KKwloZWxwKQorCQlnaXQgYmlzZWN0IC1oIDs7CisJc3RhcnQpCisJCWJpc2VjdF9zdGFydCAiJEAiIDs7CisJYmFkfGdvb2R8bmV3fG9sZHwiJFRFUk1fQkFEInwiJFRFUk1fR09PRCIpCisJCWJpc2VjdF9zdGF0ZSAiJGNtZCIgIiRAIiA7OworCXNraXApCisJCWJpc2VjdF9za2lwICIkQCIgOzsKKwluZXh0KQorCQkjIE5vdCBzdXJlIHdlIHdhbnQgIm5leHQiIGF0IHRoZSBVSSBsZXZlbCBhbnltb3JlLgorCQliaXNlY3RfbmV4dCAiJEAiIDs7CisJdmlzdWFsaXplfHZpZXcpCisJCWJpc2VjdF92aXN1YWxpemUgIiRAIiA7OworCXJlc2V0KQorCQlnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgIiRAIiA7OworCXJlcGxheSkKKwkJYmlzZWN0X3JlcGxheSAiJEAiIDs7CisJbG9nKQorCQliaXNlY3RfbG9nIDs7CisJcnVuKQorCQliaXNlY3RfcnVuICIkQCIgOzsKKwl0ZXJtcykKKwkJZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zICIkQCIgfHwgZXhpdDs7CisJKikKKwkJdXNhZ2UgOzsKKwllc2FjCitlc2FjCmRpZmYgLS1naXQgYS9naXQtY29tcGF0LXV0aWwuaCBiL2dpdC1jb21wYXQtdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MzYzMmUKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtY29tcGF0LXV0aWwuaApAQCAtMCwwICsxLDEzMzkgQEAKKyNpZm5kZWYgR0lUX0NPTVBBVF9VVElMX0gKKyNkZWZpbmUgR0lUX0NPTVBBVF9VVElMX0gKKworI2lmZGVmIFVTRV9NU1ZDX0NSVERCRworLyoKKyAqIEZvciB0aGVzZSB0byB3b3JrIHRoZXkgbXVzdCBhcHBlYXIgdmVyeSBlYXJseSBpbiBlYWNoCisgKiBmaWxlIC0tIGJlZm9yZSBtb3N0IG9mIHRoZSBzdGFuZGFyZCBoZWFkZXIgZmlsZXMuCisgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjcnRkYmcuaD4KKyNlbmRpZgorCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisKKworLyogRGVyaXZlZCBmcm9tIExpbnV4ICJGZWF0dXJlcyBUZXN0IE1hY3JvIiBoZWFkZXIKKyAqIENvbnZlbmllbmNlIG1hY3JvcyB0byB0ZXN0IHRoZSB2ZXJzaW9ucyBvZiBnY2MgKG9yCisgKiBhIGNvbXBhdGlibGUgY29tcGlsZXIpLgorICogVXNlIHRoZW0gbGlrZSB0aGlzOgorICogICNpZiBHSVRfR05VQ19QUkVSRVEgKDIsOCkKKyAqICAgLi4uIGNvZGUgcmVxdWlyaW5nIGdjYyAyLjggb3IgbGF0ZXIgLi4uCisgKiAgI2VuZGlmCisqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19HTlVDX01JTk9SX18pCisjIGRlZmluZSBHSVRfR05VQ19QUkVSRVEobWFqLCBtaW4pIFwKKwkoKF9fR05VQ19fIDw8IDE2KSArIF9fR05VQ19NSU5PUl9fID49ICgobWFqKSA8PCAxNikgKyAobWluKSkKKyNlbHNlCisgI2RlZmluZSBHSVRfR05VQ19QUkVSRVEobWFqLCBtaW4pIDAKKyNlbmRpZgorCisKKyNpZm5kZWYgRkxFWF9BUlJBWQorLyoKKyAqIFNlZSBpZiBvdXIgY29tcGlsZXIgaXMga25vd24gdG8gc3VwcG9ydCBmbGV4aWJsZSBhcnJheSBtZW1iZXJzLgorICovCisjaWYgZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiAoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKSAmJiAoIWRlZmluZWQoX19TVU5QUk9fQykgfHwgKF9fU1VOUFJPX0MgPiAweDU4MCkpCisjIGRlZmluZSBGTEVYX0FSUkFZIC8qIGVtcHR5ICovCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorIyBpZiAoX19HTlVDX18gPj0gMykKKyMgIGRlZmluZSBGTEVYX0FSUkFZIC8qIGVtcHR5ICovCisjIGVsc2UKKyMgIGRlZmluZSBGTEVYX0FSUkFZIDAgLyogb2xkZXIgR05VIGV4dGVuc2lvbiAqLworIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBPdGhlcndpc2UsIGRlZmF1bHQgdG8gc2FmZXIgYnV0IGEgYml0IHdhc3RlZnVsIHRyYWRpdGlvbmFsIHN0eWxlCisgKi8KKyNpZm5kZWYgRkxFWF9BUlJBWQorIyBkZWZpbmUgRkxFWF9BUlJBWSAxCisjZW5kaWYKKyNlbmRpZgorCisKKy8qCisgKiBCVUlMRF9BU1NFUlRfT1JfWkVSTyAtIGFzc2VydCBhIGJ1aWxkLXRpbWUgZGVwZW5kZW5jeSwgYXMgYW4gZXhwcmVzc2lvbi4KKyAqIEBjb25kOiB0aGUgY29tcGlsZS10aW1lIGNvbmRpdGlvbiB3aGljaCBtdXN0IGJlIHRydWUuCisgKgorICogWW91ciBjb21waWxlIHdpbGwgZmFpbCBpZiB0aGUgY29uZGl0aW9uIGlzbid0IHRydWUsIG9yIGNhbid0IGJlIGV2YWx1YXRlZAorICogYnkgdGhlIGNvbXBpbGVyLiAgVGhpcyBjYW4gYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uOiBpdHMgdmFsdWUgaXMgIjAiLgorICoKKyAqIEV4YW1wbGU6CisgKgkjZGVmaW5lIGZvb190b19jaGFyKGZvbykJCQkJCVwKKyAqCQkgKChjaGFyICopKGZvbykJCQkJCQlcCisgKgkJICArIEJVSUxEX0FTU0VSVF9PUl9aRVJPKG9mZnNldG9mKHN0cnVjdCBmb28sIHN0cmluZykgPT0gMCkpCisgKi8KKyNkZWZpbmUgQlVJTERfQVNTRVJUX09SX1pFUk8oY29uZCkgXAorCShzaXplb2YoY2hhciBbMSAtIDIqIShjb25kKV0pIC0gMSkKKworI2lmIEdJVF9HTlVDX1BSRVJFUSgzLCAxKQorIC8qICZhcnJbMF0gZGVncmFkZXMgdG8gYSBwb2ludGVyOiBhIGRpZmZlcmVudCB0eXBlIGZyb20gYW4gYXJyYXkgKi8KKyMgZGVmaW5lIEJBUkZfVU5MRVNTX0FOX0FSUkFZKGFycikJCQkJCQlcCisJQlVJTERfQVNTRVJUX09SX1pFUk8oIV9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhhcnIpLCBcCisJCQkJCQkJICAgX190eXBlb2ZfXygmKGFycilbMF0pKSkKKyNlbHNlCisjIGRlZmluZSBCQVJGX1VOTEVTU19BTl9BUlJBWShhcnIpIDAKKyNlbmRpZgorLyoKKyAqIEFSUkFZX1NJWkUgLSBnZXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIHZpc2libGUgYXJyYXkKKyAqIEB4OiB0aGUgYXJyYXkgd2hvc2Ugc2l6ZSB5b3Ugd2FudC4KKyAqCisgKiBUaGlzIGRvZXMgbm90IHdvcmsgb24gcG9pbnRlcnMsIG9yIGFycmF5cyBkZWNsYXJlZCBhcyBbXSwgb3IKKyAqIGZ1bmN0aW9uIHBhcmFtZXRlcnMuICBXaXRoIGNvcnJlY3QgY29tcGlsZXIgc3VwcG9ydCwgc3VjaCB1c2FnZQorICogd2lsbCBjYXVzZSBhIGJ1aWxkIGVycm9yIChzZWUgdGhlIGJ1aWxkX2Fzc2VydF9vcl96ZXJvIG1hY3JvKS4KKyAqLworI2RlZmluZSBBUlJBWV9TSVpFKHgpIChzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSArIEJBUkZfVU5MRVNTX0FOX0FSUkFZKHgpKQorCisjZGVmaW5lIGJpdHNpemVvZih4KSAgKENIQVJfQklUICogc2l6ZW9mKHgpKQorCisjZGVmaW5lIG1heGltdW1fc2lnbmVkX3ZhbHVlX29mX3R5cGUoYSkgXAorICAgIChJTlRNQVhfTUFYID4+IChiaXRzaXplb2YoaW50bWF4X3QpIC0gYml0c2l6ZW9mKGEpKSkKKworI2RlZmluZSBtYXhpbXVtX3Vuc2lnbmVkX3ZhbHVlX29mX3R5cGUoYSkgXAorICAgIChVSU5UTUFYX01BWCA+PiAoYml0c2l6ZW9mKHVpbnRtYXhfdCkgLSBiaXRzaXplb2YoYSkpKQorCisvKgorICogU2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgaXMgdW5kZWZpbmVkIGluIEMsIHNvIGhlcmUncyBhIGhlbHBlciBtYWNybworICogdG8gZGV0ZWN0IGlmIHRoZSBzdW0gb2YgdHdvIGludGVnZXJzIHdpbGwgb3ZlcmZsb3cuCisgKgorICogUmVxdWlyZXM6IGEgPj0gMCwgdHlwZW9mKGEpIGVxdWFscyB0eXBlb2YoYikKKyAqLworI2RlZmluZSBzaWduZWRfYWRkX292ZXJmbG93cyhhLCBiKSBcCisgICAgKChiKSA+IG1heGltdW1fc2lnbmVkX3ZhbHVlX29mX3R5cGUoYSkgLSAoYSkpCisKKyNkZWZpbmUgdW5zaWduZWRfYWRkX292ZXJmbG93cyhhLCBiKSBcCisgICAgKChiKSA+IG1heGltdW1fdW5zaWduZWRfdmFsdWVfb2ZfdHlwZShhKSAtIChhKSkKKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbXVsdGlwbGljYXRpb24gb2YgImEiIGFuZCAiYiIgd2lsbAorICogb3ZlcmZsb3cuIFRoZSB0eXBlcyBvZiAiYSIgYW5kICJiIiBtdXN0IG1hdGNoIGFuZCBtdXN0IGJlIHVuc2lnbmVkLgorICogTm90ZSB0aGF0IHRoaXMgbWFjcm8gZXZhbHVhdGVzICJhIiB0d2ljZSEKKyAqLworI2RlZmluZSB1bnNpZ25lZF9tdWx0X292ZXJmbG93cyhhLCBiKSBcCisgICAgKChhKSAmJiAoYikgPiBtYXhpbXVtX3Vuc2lnbmVkX3ZhbHVlX29mX3R5cGUoYSkgLyAoYSkpCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBUWVBFT0YoeCkgKF9fdHlwZW9mX18oeCkpCisjZWxzZQorI2RlZmluZSBUWVBFT0YoeCkKKyNlbmRpZgorCisjZGVmaW5lIE1TQih4LCBiaXRzKSAoKHgpICYgVFlQRU9GKHgpKH4wVUxMIDw8IChiaXRzaXplb2YoeCkgLSAoYml0cykpKSkKKyNkZWZpbmUgSEFTX01VTFRJX0JJVFMoaSkgICgoaSkgJiAoKGkpIC0gMSkpICAvKiBjaGVja3MgaWYgYW4gaW50ZWdlciBoYXMgbW9yZSB0aGFuIDEgYml0IHNldCAqLworCisjZGVmaW5lIERJVl9ST1VORF9VUChuLGQpICgoKG4pICsgKGQpIC0gMSkgLyAoZCkpCisKKy8qIEFwcHJveGltYXRpb24gb2YgdGhlIGxlbmd0aCBvZiB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHR5cGUuICovCisjZGVmaW5lIGRlY2ltYWxfbGVuZ3RoKHgpCSgoaW50KShzaXplb2YoeCkgKiAyLjU2ICsgMC41KSArIDEpCisKKyNpZiBkZWZpbmVkKF9fc3VuX18pCisgLyoKKyAgKiBPbiBTb2xhcmlzLCB3aGVuIF9YT1BFTl9FWFRFTkRFRCBpcyBzZXQsIGl0cyBoZWFkZXIgZmlsZQorICAqIGZvcmNlcyB0aGUgcHJvZ3JhbXMgdG8gYmUgWFBHNHYyLCBkZWZlYXRpbmcgYW55IF9YT1BFTl9TT1VSQ0UKKyAgKiBzZXR0aW5nIHRvIHNheSB3ZSBhcmUgWFBHNSBvciBYUEc2LiAgQWxzbyBvbiBTb2xhcmlzLAorICAqIFhQRzYgcHJvZ3JhbXMgbXVzdCBiZSBjb21waWxlZCB3aXRoIGEgYzk5IGNvbXBpbGVyLCB3aGlsZQorICAqIG5vbiBYUEc2IHByb2dyYW1zIG11c3QgYmUgY29tcGlsZWQgd2l0aCBhIHByZS1jOTkgY29tcGlsZXIuCisgICovCisjIGlmIF9fU1REQ19WRVJTSU9OX18gLSAwID49IDE5OTkwMUwKKyMgZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNjAwCisjIGVsc2UKKyMgZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNTAwCisjIGVuZGlmCisjZWxpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VTTENfXykgJiYgXAorICAgICAgIWRlZmluZWQoX01fVU5JWCkgJiYgIWRlZmluZWQoX19zZ2kpICYmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pICYmIFwKKyAgICAgICFkZWZpbmVkKF9fVEFOREVNKSAmJiAhZGVmaW5lZChfX1FOWF9fKSAmJiAhZGVmaW5lZChfX01pckJTRF9fKSAmJiBcCisgICAgICAhZGVmaW5lZChfX0NZR1dJTl9fKQorI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMCAvKiBnbGliYzIgYW5kIEFJWCA1LjNMIG5lZWQgNTAwLCBPcGVuQlNEIG5lZWRzIDYwMCBmb3IgU19JU0xOSygpICovCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMSAvKiBBSVggNS4zTCBuZWVkcyB0aGlzICovCisjZW5kaWYKKyNkZWZpbmUgX0FMTF9TT1VSQ0UgMQorI2RlZmluZSBfR05VX1NPVVJDRSAxCisjZGVmaW5lIF9CU0RfU09VUkNFIDEKKyNkZWZpbmUgX0RFRkFVTFRfU09VUkNFIDEKKyNkZWZpbmUgX05FVEJTRF9TT1VSQ0UgMQorI2RlZmluZSBfU0dJX1NPVVJDRSAxCisKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKSAvKiBCb3RoIE1pbkdXIGFuZCBNU1ZDICovCisjIGlmICFkZWZpbmVkKF9XSU4zMl9XSU5OVCkKKyMgIGRlZmluZSBfV0lOMzJfV0lOTlQgMHgwNjAwCisjIGVuZGlmCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4gIC8qIHN0b3BzIHdpbmRvd3MuaCBpbmNsdWRpbmcgd2luc29jay5oICovCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZGVmaW5lIEdJVF9XSU5ET1dTX05BVElWRQorI2VuZGlmCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorI2luY2x1ZGUgPHN0cmluZ3MuaD4gLyogZm9yIHN0cmNhc2VjbXAoKSAqLworI2VuZGlmCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZmRlZiBORUVEU19TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8cmVnZXguaD4KKyNpbmNsdWRlIDx1dGltZS5oPgorI2luY2x1ZGUgPHN5c2xvZy5oPgorI2lmICFkZWZpbmVkKE5PX1BPTExfSCkKKyNpbmNsdWRlIDxwb2xsLmg+CisjZWxpZiAhZGVmaW5lZChOT19TWVNfUE9MTF9IKQorI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisjZWxzZQorLyogUHVsbCB0aGUgY29tcGF0IHN0dWZmICovCisjaW5jbHVkZSA8cG9sbC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9CU0RfU1lTQ1RMCisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjaW5jbHVkZSAiY29tcGF0L3dpbjMyL3BhdGgtdXRpbHMuaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisvKiBwdWxsIGluIFdpbmRvd3MgY29tcGF0aWJpbGl0eSBzdHVmZiAqLworI2luY2x1ZGUgImNvbXBhdC93aW4zMi9wYXRoLXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGF0L21pbmd3LmgiCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2luY2x1ZGUgImNvbXBhdC93aW4zMi9wYXRoLXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGF0L21zdmMuaCIKKyNlbHNlCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaWZuZGVmIE5PX1NZU19TRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaWZuZGVmIE5PX0lOVFRZUEVTX0gKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmZGVmIE5PX0lOVFBUUl9UCisvKgorICogT24gSTE2TFAzMiwgSUxQMzIgYW5kIExQNjQgImxvbmciIGlzIHRoZSBzYWZlIGJldCwgaG93ZXZlcgorICogb24gTExQODYsIElMMzNMTFA2NCBhbmQgUDY0IGl0IG5lZWRzIHRvIGJlICJsb25nIGxvbmciLAorICogd2hpbGUgb24gSVAxNiBhbmQgSVAxNkwzMiBpdCBpcyAiaW50IiAocmVzcC4gInNob3J0IikKKyAqIFNpemUgbmVlZHMgdG8gbWF0Y2ggKG9yIGV4Y2VlZCkgJ3NpemVvZih2b2lkICopJy4KKyAqIFdlIGNhbid0IHRha2UgImxvbmcgbG9uZyIgaGVyZSBhcyBub3QgZXZlcnlib2R5IGhhcyBpdC4KKyAqLwordHlwZWRlZiBsb25nIGludHB0cl90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnRwdHJfdDsKKyNlbmRpZgorI3VuZGVmIF9BTExfU09VUkNFIC8qIEFJWCA1LjNMIGRlZmluZXMgYSBzdHJ1Y3QgbGlzdCB3aXRoIF9BTExfU09VUkNFLiAqLworI2luY2x1ZGUgPGdycC5oPgorI2RlZmluZSBfQUxMX1NPVVJDRSAxCisjZW5kaWYKKworLyogdXNlZCBvbiBNYWMgT1MgWCAqLworI2lmZGVmIFBSRUNPTVBPU0VfVU5JQ09ERQorI2luY2x1ZGUgImNvbXBhdC9wcmVjb21wb3NlX3V0ZjguaCIKKyNlbHNlCisjZGVmaW5lIHByZWNvbXBvc2Vfc3RyKGluLGlfbmZkMm5mYykKKyNkZWZpbmUgcHJlY29tcG9zZV9hcmd2KGMsdikKKyNkZWZpbmUgcHJvYmVfdXRmOF9wYXRobmFtZV9jb21wb3NpdGlvbigpCisjZW5kaWYKKworI2lmZGVmIE1LRElSX1dPX1RSQUlMSU5HX1NMQVNICisjZGVmaW5lIG1rZGlyKGEsYikgY29tcGF0X21rZGlyX3dvX3RyYWlsaW5nX3NsYXNoKChhKSwoYikpCitpbnQgY29tcGF0X21rZGlyX3dvX3RyYWlsaW5nX3NsYXNoKGNvbnN0IGNoYXIqLCBtb2RlX3QpOworI2VuZGlmCisKKyNpZmRlZiBOT19TVFJVQ1RfSVRJTUVSVkFMCitzdHJ1Y3QgaXRpbWVydmFsIHsKKwlzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKKwlzdHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsKK307CisjZW5kaWYKKworI2lmZGVmIE5PX1NFVElUSU1FUgorI2RlZmluZSBzZXRpdGltZXIod2hpY2gsdmFsdWUsb3ZhbHVlKQorI2VuZGlmCisKKyNpZm5kZWYgTk9fTElCR0VOX0gKKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbHNlCisjZGVmaW5lIGJhc2VuYW1lIGdpdGJhc2VuYW1lCitjaGFyICpnaXRiYXNlbmFtZShjaGFyICopOworI2RlZmluZSBkaXJuYW1lIGdpdGRpcm5hbWUKK2NoYXIgKmdpdGRpcm5hbWUoY2hhciAqKTsKKyNlbmRpZgorCisjaWZuZGVmIE5PX0lDT05WCisjaW5jbHVkZSA8aWNvbnYuaD4KKyNlbmRpZgorCisjaWZuZGVmIE5PX09QRU5TU0wKKyNpZmRlZiBfX0FQUExFX18KKyNkZWZpbmUgX19BVkFJTEFCSUxJVFlfTUFDUk9TX1VTRVNfQVZBSUxBQklMSVRZIDAKKyNpbmNsdWRlIDxBdmFpbGFiaWxpdHlNYWNyb3MuaD4KKyN1bmRlZiBERVBSRUNBVEVEX0FUVFJJQlVURQorI2RlZmluZSBERVBSRUNBVEVEX0FUVFJJQlVURQorI3VuZGVmIF9fQVZBSUxBQklMSVRZX01BQ1JPU19VU0VTX0FWQUlMQUJJTElUWQorI2VuZGlmCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU0lORk8KKyMgaW5jbHVkZSA8c3lzL3N5c2luZm8uaD4KKyNlbmRpZgorCisvKiBPbiBtb3N0IHN5c3RlbXMgPG5ldGRiLmg+IHdvdWxkIGhhdmUgZ2l2ZW4gdXMgdGhpcywgYnV0CisgKiBub3Qgb24gc29tZSBzeXN0ZW1zIChlLmcuIHovT1MpLgorICovCisjaWZuZGVmIE5JX01BWEhPU1QKKyNkZWZpbmUgTklfTUFYSE9TVCAxMDI1CisjZW5kaWYKKworI2lmbmRlZiBOSV9NQVhTRVJWCisjZGVmaW5lIE5JX01BWFNFUlYgMzIKKyNlbmRpZgorCisvKiBPbiBtb3N0IHN5c3RlbXMgPGxpbWl0cy5oPiB3b3VsZCBoYXZlIGdpdmVuIHVzIHRoaXMsIGJ1dAorICogbm90IG9uIHNvbWUgc3lzdGVtcyAoZS5nLiBHTlUvSHVyZCkuCisgKi8KKyNpZm5kZWYgUEFUSF9NQVgKKyNkZWZpbmUgUEFUSF9NQVggNDA5NgorI2VuZGlmCisKK3R5cGVkZWYgdWludG1heF90IHRpbWVzdGFtcF90OworI2RlZmluZSBQUkl0aW1lIFBSSXVNQVgKKyNkZWZpbmUgcGFyc2VfdGltZXN0YW1wIHN0cnRvdW1heAorI2RlZmluZSBUSU1FX01BWCBVSU5UTUFYX01BWAorI2RlZmluZSBUSU1FX01JTiAwCisKKyNpZm5kZWYgUEFUSF9TRVAKKyNkZWZpbmUgUEFUSF9TRVAgJzonCisjZW5kaWYKKworI2lmZGVmIEhBVkVfUEFUSFNfSAorI2luY2x1ZGUgPHBhdGhzLmg+CisjZW5kaWYKKyNpZm5kZWYgX1BBVEhfREVGUEFUSAorI2RlZmluZSBfUEFUSF9ERUZQQVRIICIvdXNyL2xvY2FsL2JpbjovdXNyL2JpbjovYmluIgorI2VuZGlmCisKKyNpZm5kZWYgcGxhdGZvcm1fY29yZV9jb25maWcKK3N0YXRpYyBpbmxpbmUgaW50IG5vb3BfY29yZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJcmV0dXJuIDA7Cit9CisjZGVmaW5lIHBsYXRmb3JtX2NvcmVfY29uZmlnIG5vb3BfY29yZV9jb25maWcKKyNlbmRpZgorCisjaWZuZGVmIGhhc19kb3NfZHJpdmVfcHJlZml4CitzdGF0aWMgaW5saW5lIGludCBnaXRfaGFzX2Rvc19kcml2ZV9wcmVmaXgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gMDsKK30KKyNkZWZpbmUgaGFzX2Rvc19kcml2ZV9wcmVmaXggZ2l0X2hhc19kb3NfZHJpdmVfcHJlZml4CisjZW5kaWYKKworI2lmbmRlZiBza2lwX2Rvc19kcml2ZV9wcmVmaXgKK3N0YXRpYyBpbmxpbmUgaW50IGdpdF9za2lwX2Rvc19kcml2ZV9wcmVmaXgoY2hhciAqKnBhdGgpCit7CisJcmV0dXJuIDA7Cit9CisjZGVmaW5lIHNraXBfZG9zX2RyaXZlX3ByZWZpeCBnaXRfc2tpcF9kb3NfZHJpdmVfcHJlZml4CisjZW5kaWYKKworI2lmbmRlZiBpc19kaXJfc2VwCitzdGF0aWMgaW5saW5lIGludCBnaXRfaXNfZGlyX3NlcChpbnQgYykKK3sKKwlyZXR1cm4gYyA9PSAnLyc7Cit9CisjZGVmaW5lIGlzX2Rpcl9zZXAgZ2l0X2lzX2Rpcl9zZXAKKyNlbmRpZgorCisjaWZuZGVmIG9mZnNldF8xc3RfY29tcG9uZW50CitzdGF0aWMgaW5saW5lIGludCBnaXRfb2Zmc2V0XzFzdF9jb21wb25lbnQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gaXNfZGlyX3NlcChwYXRoWzBdKTsKK30KKyNkZWZpbmUgb2Zmc2V0XzFzdF9jb21wb25lbnQgZ2l0X29mZnNldF8xc3RfY29tcG9uZW50CisjZW5kaWYKKworI2lmbmRlZiBpc192YWxpZF9wYXRoCisjZGVmaW5lIGlzX3ZhbGlkX3BhdGgocGF0aCkgMQorI2VuZGlmCisKKyNpZm5kZWYgZmluZF9sYXN0X2Rpcl9zZXAKK3N0YXRpYyBpbmxpbmUgY2hhciAqZ2l0X2ZpbmRfbGFzdF9kaXJfc2VwKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIHN0cnJjaHIocGF0aCwgJy8nKTsKK30KKyNkZWZpbmUgZmluZF9sYXN0X2Rpcl9zZXAgZ2l0X2ZpbmRfbGFzdF9kaXJfc2VwCisjZW5kaWYKKworI2lmbmRlZiBoYXNfZGlyX3NlcAorc3RhdGljIGlubGluZSBpbnQgZ2l0X2hhc19kaXJfc2VwKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuICEhc3RyY2hyKHBhdGgsICcvJyk7Cit9CisjZGVmaW5lIGhhc19kaXJfc2VwKHBhdGgpIGdpdF9oYXNfZGlyX3NlcChwYXRoKQorI2VuZGlmCisKKyNpZm5kZWYgcXVlcnlfdXNlcl9lbWFpbAorI2RlZmluZSBxdWVyeV91c2VyX2VtYWlsKCkgTlVMTAorI2VuZGlmCisKKyNpZmRlZiBfX1RBTkRFTQorI2luY2x1ZGUgPGZsb3NzLmgoZmxvc3NfZXhlY2wsZmxvc3NfZXhlY2xwLGZsb3NzX2V4ZWN2LGZsb3NzX2V4ZWN2cCk+CisjaW5jbHVkZSA8Zmxvc3MuaChmbG9zc19nZXRwd3VpZCk+CisjaWZuZGVmIE5TSUcKKy8qCisgKiBOb25TdG9wIE5TRSBhbmQgTlNYIGRvIG5vdCBwcm92aWRlIE5TSUcuIFNJR0dVQVJESUFOKDk5KSBpcyB0aGUgaGlnaGVzdAorICoga25vd24sIGJ5IGRldGVjdGl2ZSB3b3JrIHVzaW5nIGtpbGwgLWwgYXMgYSBsaXN0IGlzIGFsbCBzaWduYWxzCisgKiBpbnN0ZWFkIG9mIHNpZ25hbC5oIHdoZXJlIGl0IHNob3VsZCBiZS4KKyAqLworIyBkZWZpbmUgTlNJRyAxMDAKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fSFBfY2MpICYmIChfX0hQX2NjID49IDYxMDAwKQorI2RlZmluZSBOT1JFVFVSTiBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpCisjZGVmaW5lIE5PUkVUVVJOX1BUUgorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoTk9fTk9SRVRVUk4pCisjZGVmaW5lIE5PUkVUVVJOIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCisjZGVmaW5lIE5PUkVUVVJOX1BUUiBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTk9SRVRVUk4gX19kZWNsc3BlYyhub3JldHVybikKKyNkZWZpbmUgTk9SRVRVUk5fUFRSCisjZWxzZQorI2RlZmluZSBOT1JFVFVSTgorI2RlZmluZSBOT1JFVFVSTl9QVFIKKyNpZm5kZWYgX19HTlVDX18KKyNpZm5kZWYgX19hdHRyaWJ1dGVfXworI2RlZmluZSBfX2F0dHJpYnV0ZV9fKHgpCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBzZW50aW5lbCBhdHRyaWJ1dGUgaXMgdmFsaWQgZnJvbSBnY2MgdmVyc2lvbiA0LjAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPj0gNCkKKyNkZWZpbmUgTEFTVF9BUkdfTVVTVF9CRV9OVUxMIF9fYXR0cmlidXRlX18oKHNlbnRpbmVsKSkKKyNlbHNlCisjZGVmaW5lIExBU1RfQVJHX01VU1RfQkVfTlVMTAorI2VuZGlmCisKKyNkZWZpbmUgTUFZQkVfVU5VU0VEIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorCisjaW5jbHVkZSAiY29tcGF0L2Jzd2FwLmgiCisKKyNpbmNsdWRlICJ3aWxkbWF0Y2guaCIKKworc3RydWN0IHN0cmJ1ZjsKKworLyogR2VuZXJhbCBoZWxwZXIgZnVuY3Rpb25zICovCit2b2lkIHZyZXBvcnRmKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcyk7CitOT1JFVFVSTiB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKmVycik7CitOT1JFVFVSTiB2b2lkIHVzYWdlZihjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitOT1JFVFVSTiB2b2lkIGRpZShjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitOT1JFVFVSTiB2b2lkIGRpZV9lcnJubyhjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitpbnQgZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworaW50IGVycm9yX2Vycm5vKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK3ZvaWQgd2FybmluZyhjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7Cit2b2lkIHdhcm5pbmdfZXJybm8oY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworCisjaWZuZGVmIE5PX09QRU5TU0wKKyNpZmRlZiBBUFBMRV9DT01NT05fQ1JZUFRPCisjaW5jbHVkZSAiY29tcGF0L2FwcGxlLWNvbW1vbi1jcnlwdG8uaCIKKyNlbHNlCisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKyNlbmRpZiAvKiBBUFBMRV9DT01NT05fQ1JZUFRPICovCisjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKyNlbmRpZiAvKiBOT19PUEVOU1NMICovCisKKy8qCisgKiBMZXQgY2FsbGVycyBiZSBhd2FyZSBvZiB0aGUgY29uc3RhbnQgcmV0dXJuIHZhbHVlOyB0aGlzIGNhbiBoZWxwCisgKiBnY2Mgd2l0aCAtV3VuaW5pdGlhbGl6ZWQgYW5hbHlzaXMuIFdlIHJlc3RyaWN0IHRoaXMgdHJpY2sgdG8gZ2NjLCB0aG91Z2gsCisgKiBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIG1heSBub3Qgc3VwcG9ydCB2YXJpYWRpYyBtYWNyb3MuIFNpbmNlIHdlJ3JlIG9ubHkKKyAqIHRyeWluZyB0byBoZWxwIGdjYywgYW55d2F5LCBpdCdzIE9LOyBvdGhlciBjb21waWxlcnMgd2lsbCBmYWxsIGJhY2sgdG8KKyAqIHVzaW5nIHRoZSBmdW5jdGlvbiBhcyB1c3VhbC4KKyAqLworI2lmIGRlZmluZWQoX19HTlVDX18pCitzdGF0aWMgaW5saW5lIGludCBjb25zdF9lcnJvcih2b2lkKQoreworCXJldHVybiAtMTsKK30KKyNkZWZpbmUgZXJyb3IoLi4uKSAoZXJyb3IoX19WQV9BUkdTX18pLCBjb25zdF9lcnJvcigpKQorI2RlZmluZSBlcnJvcl9lcnJubyguLi4pIChlcnJvcl9lcnJubyhfX1ZBX0FSR1NfXyksIGNvbnN0X2Vycm9yKCkpCisjZW5kaWYKKwordm9pZCBzZXRfZGllX3JvdXRpbmUoTk9SRVRVUk5fUFRSIHZvaWQgKCpyb3V0aW5lKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKSk7Cit2b2lkIHNldF9lcnJvcl9yb3V0aW5lKHZvaWQgKCpyb3V0aW5lKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKSk7CitleHRlcm4gdm9pZCAoKmdldF9lcnJvcl9yb3V0aW5lKHZvaWQpKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKTsKK3ZvaWQgc2V0X3dhcm5fcm91dGluZSh2b2lkICgqcm91dGluZSkoY29uc3QgY2hhciAqd2FybiwgdmFfbGlzdCBwYXJhbXMpKTsKK2V4dGVybiB2b2lkICgqZ2V0X3dhcm5fcm91dGluZSh2b2lkKSkoY29uc3QgY2hhciAqd2FybiwgdmFfbGlzdCBwYXJhbXMpOwordm9pZCBzZXRfZGllX2lzX3JlY3Vyc2luZ19yb3V0aW5lKGludCAoKnJvdXRpbmUpKHZvaWQpKTsKKworaW50IHN0YXJ0c193aXRoKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBpc3RhcnRzX3dpdGgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgpOworCisvKgorICogSWYgdGhlIHN0cmluZyAic3RyIiBiZWdpbnMgd2l0aCB0aGUgc3RyaW5nIGZvdW5kIGluICJwcmVmaXgiLCByZXR1cm4gMS4KKyAqIFRoZSAib3V0IiBwYXJhbWV0ZXIgaXMgc2V0IHRvICJzdHIgKyBzdHJsZW4ocHJlZml4KSIgKGkuZS4sIHRvIHRoZSBwb2ludCBpbgorICogdGhlIHN0cmluZyByaWdodCBhZnRlciB0aGUgcHJlZml4KS4KKyAqCisgKiBPdGhlcndpc2UsIHJldHVybiAwIGFuZCBsZWF2ZSAib3V0IiB1bnRvdWNoZWQuCisgKgorICogRXhhbXBsZXM6CisgKgorICogICBbZXh0cmFjdCBicmFuY2ggbmFtZSwgZmFpbCBpZiBub3QgYSBicmFuY2hdCisgKiAgIGlmICghc2tpcF9wcmVmaXgocmVmLCAicmVmcy9oZWFkcy8iLCAmYnJhbmNoKQorICoJcmV0dXJuIC0xOworICoKKyAqICAgW3NraXAgcHJlZml4IGlmIHByZXNlbnQsIG90aGVyd2lzZSB1c2Ugd2hvbGUgc3RyaW5nXQorICogICBza2lwX3ByZWZpeChuYW1lLCAicmVmcy9oZWFkcy8iLCAmbmFtZSk7CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNraXBfcHJlZml4KGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICAgY29uc3QgY2hhciAqKm91dCkKK3sKKwlkbyB7CisJCWlmICghKnByZWZpeCkgeworCQkJKm91dCA9IHN0cjsKKwkJCXJldHVybiAxOworCQl9CisJfSB3aGlsZSAoKnN0cisrID09ICpwcmVmaXgrKyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJZiB0aGUgc3RyaW5nICJzdHIiIGlzIHRoZSBzYW1lIGFzIHRoZSBzdHJpbmcgaW4gInByZWZpeCIsIHRoZW4gdGhlICJhcmciCisgKiBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRoZSAiZGVmIiBwYXJhbWV0ZXIgYW5kIDEgaXMgcmV0dXJuZWQuCisgKiBJZiB0aGUgc3RyaW5nICJzdHIiIGJlZ2lucyB3aXRoIHRoZSBzdHJpbmcgZm91bmQgaW4gInByZWZpeCIgYW5kIHRoZW4gYQorICogIj0iIHNpZ24sIHRoZW4gdGhlICJhcmciIHBhcmFtZXRlciBpcyBzZXQgdG8gInN0ciArIHN0cmxlbihwcmVmaXgpICsgMSIKKyAqIChpLmUuLCB0byB0aGUgcG9pbnQgaW4gdGhlIHN0cmluZyByaWdodCBhZnRlciB0aGUgcHJlZml4IGFuZCB0aGUgIj0iIHNpZ24pLAorICogYW5kIDEgaXMgcmV0dXJuZWQuCisgKgorICogT3RoZXJ3aXNlLCByZXR1cm4gMCBhbmQgbGVhdmUgImFyZyIgdW50b3VjaGVkLgorICoKKyAqIFdoZW4gd2UgYWNjZXB0IGJvdGggYSAiLS1rZXkiIGFuZCBhICItLWtleT08dmFsPiIgb3B0aW9uLCB0aGlzIGZ1bmN0aW9uCisgKiBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mICFzdHJjbXAoYXJnLCAiLS1rZXkiKSBhbmQgdGhlbgorICogc2tpcF9wcmVmaXgoYXJnLCAiLS1rZXk9IiwgJmFyZykgdG8gcGFyc2Ugc3VjaCBhbiBvcHRpb24uCisgKi8KK2ludCBza2lwX3RvX29wdGlvbmFsX2FyZ19kZWZhdWx0KGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSBjb25zdCBjaGFyICoqYXJnLCBjb25zdCBjaGFyICpkZWYpOworCitzdGF0aWMgaW5saW5lIGludCBza2lwX3RvX29wdGlvbmFsX2FyZyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqKmFyZykKK3sKKwlyZXR1cm4gc2tpcF90b19vcHRpb25hbF9hcmdfZGVmYXVsdChzdHIsIHByZWZpeCwgYXJnLCAiIik7Cit9CisKKy8qCisgKiBMaWtlIHNraXBfcHJlZml4LCBidXQgcHJvbWlzZXMgbmV2ZXIgdG8gcmVhZCBwYXN0ICJsZW4iIGJ5dGVzIG9mIHRoZSBpbnB1dAorICogYnVmZmVyLCBhbmQgcmV0dXJucyB0aGUgcmVtYWluaW5nIG51bWJlciBvZiBieXRlcyBpbiAib3V0IiB2aWEgIm91dGxlbiIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNraXBfcHJlZml4X21lbShjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCisJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJICBjb25zdCBjaGFyICoqb3V0LCBzaXplX3QgKm91dGxlbikKK3sKKwlzaXplX3QgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpOworCWlmIChwcmVmaXhfbGVuIDw9IGxlbiAmJiAhbWVtY21wKGJ1ZiwgcHJlZml4LCBwcmVmaXhfbGVuKSkgeworCQkqb3V0ID0gYnVmICsgcHJlZml4X2xlbjsKKwkJKm91dGxlbiA9IGxlbiAtIHByZWZpeF9sZW47CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElmIGJ1ZiBlbmRzIHdpdGggc3VmZml4LCByZXR1cm4gMSBhbmQgc3VidHJhY3QgdGhlIGxlbmd0aCBvZiB0aGUgc3VmZml4CisgKiBmcm9tICpsZW4uIE90aGVyd2lzZSwgcmV0dXJuIDAgYW5kIGxlYXZlICpsZW4gdW50b3VjaGVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBzdHJpcF9zdWZmaXhfbWVtKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90ICpsZW4sCisJCQkJICAgY29uc3QgY2hhciAqc3VmZml4KQoreworCXNpemVfdCBzdWZsZW4gPSBzdHJsZW4oc3VmZml4KTsKKwlpZiAoKmxlbiA8IHN1ZmxlbiB8fCBtZW1jbXAoYnVmICsgKCpsZW4gLSBzdWZsZW4pLCBzdWZmaXgsIHN1ZmxlbikpCisJCXJldHVybiAwOworCSpsZW4gLT0gc3VmbGVuOworCXJldHVybiAxOworfQorCisvKgorICogSWYgc3RyIGVuZHMgd2l0aCBzdWZmaXgsIHJldHVybiAxIGFuZCBzZXQgKmxlbiB0byB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nCisgKiB3aXRob3V0IHRoZSBzdWZmaXguIE90aGVyd2lzZSwgcmV0dXJuIDAgYW5kIHNldCAqbGVuIHRvIHRoZSBzaXplIG9mIHRoZQorICogc3RyaW5nLgorICoKKyAqIE5vdGUgdGhhdCB3ZSBkbyBfbm90XyBOVUwtdGVybWluYXRlIHN0ciB0byB0aGUgbmV3IGxlbmd0aC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc3RyaXBfc3VmZml4KGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqc3VmZml4LCBzaXplX3QgKmxlbikKK3sKKwkqbGVuID0gc3RybGVuKHN0cik7CisJcmV0dXJuIHN0cmlwX3N1ZmZpeF9tZW0oc3RyLCBsZW4sIHN1ZmZpeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGVuZHNfd2l0aChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKK3sKKwlzaXplX3QgbGVuOworCXJldHVybiBzdHJpcF9zdWZmaXgoc3RyLCBzdWZmaXgsICZsZW4pOworfQorCisjZGVmaW5lIFNXQVAoYSwgYikgZG8gewkJCQkJCVwKKwl2b2lkICpfc3dhcF9hX3B0ciA9ICYoYSk7CQkJCVwKKwl2b2lkICpfc3dhcF9iX3B0ciA9ICYoYik7CQkJCVwKKwl1bnNpZ25lZCBjaGFyIF9zd2FwX2J1ZmZlcltzaXplb2YoYSldOwkJCVwKKwltZW1jcHkoX3N3YXBfYnVmZmVyLCBfc3dhcF9hX3B0ciwgc2l6ZW9mKGEpKTsJCVwKKwltZW1jcHkoX3N3YXBfYV9wdHIsIF9zd2FwX2JfcHRyLCBzaXplb2YoYSkgKwkJXAorCSAgICAgICBCVUlMRF9BU1NFUlRfT1JfWkVSTyhzaXplb2YoYSkgPT0gc2l6ZW9mKGIpKSk7CVwKKwltZW1jcHkoX3N3YXBfYl9wdHIsIF9zd2FwX2J1ZmZlciwgc2l6ZW9mKGEpKTsJCVwKK30gd2hpbGUgKDApCisKKyNpZiBkZWZpbmVkKE5PX01NQVApIHx8IGRlZmluZWQoVVNFX1dJTjMyX01NQVApCisKKyNpZm5kZWYgUFJPVF9SRUFECisjZGVmaW5lIFBST1RfUkVBRCAxCisjZGVmaW5lIFBST1RfV1JJVEUgMgorI2RlZmluZSBNQVBfUFJJVkFURSAxCisjZW5kaWYKKworI2RlZmluZSBtbWFwIGdpdF9tbWFwCisjZGVmaW5lIG11bm1hcCBnaXRfbXVubWFwCit2b2lkICpnaXRfbW1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCwgaW50IHByb3QsIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpOworaW50IGdpdF9tdW5tYXAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgpOworCisjZWxzZSAvKiBOT19NTUFQIHx8IFVTRV9XSU4zMl9NTUFQICovCisKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisjZW5kaWYgLyogTk9fTU1BUCB8fCBVU0VfV0lOMzJfTU1BUCAqLworCisjaWZkZWYgTk9fTU1BUAorCisvKiBUaGlzIHZhbHVlIG11c3QgYmUgbXVsdGlwbGUgb2YgKHBhZ2VzaXplICogMikgKi8KKyNkZWZpbmUgREVGQVVMVF9QQUNLRURfR0lUX1dJTkRPV19TSVpFICgxICogMTAyNCAqIDEwMjQpCisKKyNlbHNlIC8qIE5PX01NQVAgKi8KKworLyogVGhpcyB2YWx1ZSBtdXN0IGJlIG11bHRpcGxlIG9mIChwYWdlc2l6ZSAqIDIpICovCisjZGVmaW5lIERFRkFVTFRfUEFDS0VEX0dJVF9XSU5ET1dfU0laRSBcCisJKHNpemVvZih2b2lkKikgPj0gOCBcCisJCT8gIDEgKiAxMDI0ICogMTAyNCAqIDEwMjQgXAorCQk6IDMyICogMTAyNCAqIDEwMjQpCisKKyNlbmRpZiAvKiBOT19NTUFQICovCisKKyNpZm5kZWYgTUFQX0ZBSUxFRAorI2RlZmluZSBNQVBfRkFJTEVEICgodm9pZCAqKS0xKQorI2VuZGlmCisKKyNpZmRlZiBOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQKKyNkZWZpbmUgb25fZGlza19ieXRlcyhzdCkgKChzdCkuc3Rfc2l6ZSkKKyNlbHNlCisjZGVmaW5lIG9uX2Rpc2tfYnl0ZXMoc3QpICgoc3QpLnN0X2Jsb2NrcyAqIDUxMikKKyNlbmRpZgorCisjaWZkZWYgTkVFRFNfTU9ERV9UUkFOU0xBVElPTgorI3VuZGVmIFNfSUZNVAorI3VuZGVmIFNfSUZSRUcKKyN1bmRlZiBTX0lGRElSCisjdW5kZWYgU19JRkxOSworI3VuZGVmIFNfSUZCTEsKKyN1bmRlZiBTX0lGQ0hSCisjdW5kZWYgU19JRklGTworI3VuZGVmIFNfSUZTT0NLCisjZGVmaW5lIFNfSUZNVCAgIDAxNzAwMDAKKyNkZWZpbmUgU19JRlJFRyAgMDEwMDAwMAorI2RlZmluZSBTX0lGRElSICAwMDQwMDAwCisjZGVmaW5lIFNfSUZMTksgIDAxMjAwMDAKKyNkZWZpbmUgU19JRkJMSyAgMDA2MDAwMAorI2RlZmluZSBTX0lGQ0hSICAwMDIwMDAwCisjZGVmaW5lIFNfSUZJRk8gIDAwMTAwMDAKKyNkZWZpbmUgU19JRlNPQ0sgMDE0MDAwMAorI2lmZGVmIHN0YXQKKyN1bmRlZiBzdGF0CisjZW5kaWYKKyNkZWZpbmUgc3RhdChwYXRoLCBidWYpIGdpdF9zdGF0KHBhdGgsIGJ1ZikKK2ludCBnaXRfc3RhdChjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0ICopOworI2lmZGVmIGZzdGF0CisjdW5kZWYgZnN0YXQKKyNlbmRpZgorI2RlZmluZSBmc3RhdChmZCwgYnVmKSBnaXRfZnN0YXQoZmQsIGJ1ZikKK2ludCBnaXRfZnN0YXQoaW50LCBzdHJ1Y3Qgc3RhdCAqKTsKKyNpZmRlZiBsc3RhdAorI3VuZGVmIGxzdGF0CisjZW5kaWYKKyNkZWZpbmUgbHN0YXQocGF0aCwgYnVmKSBnaXRfbHN0YXQocGF0aCwgYnVmKQoraW50IGdpdF9sc3RhdChjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0ICopOworI2VuZGlmCisKKyNkZWZpbmUgREVGQVVMVF9QQUNLRURfR0lUX0xJTUlUIFwKKwkoKDEwMjRMICogMTAyNEwpICogKHNpemVfdCkoc2l6ZW9mKHZvaWQqKSA+PSA4ID8gKDMyICogMTAyNEwgKiAxMDI0TCkgOiAyNTYpKQorCisjaWZkZWYgTk9fUFJFQUQKKyNkZWZpbmUgcHJlYWQgZ2l0X3ByZWFkCitzc2l6ZV90IGdpdF9wcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBvZmZfdCBvZmZzZXQpOworI2VuZGlmCisvKgorICogRm9yd2FyZCBkZWNsIHRoYXQgd2lsbCByZW1pbmQgdXMgaWYgaXRzIHR3aW4gaW4gY2FjaGUuaCBjaGFuZ2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGNvbXBhdC9wcmVhZC5jLiAgQnV0IHdlIGNhbid0IGluY2x1ZGUKKyAqIGNhY2hlLmggdGhlcmUuCisgKi8KK3NzaXplX3QgcmVhZF9pbl9mdWxsKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOworCisjaWZkZWYgTk9fU0VURU5WCisjZGVmaW5lIHNldGVudiBnaXRzZXRlbnYKK2ludCBnaXRzZXRlbnYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisjZW5kaWYKKworI2lmZGVmIE5PX01LRFRFTVAKKyNkZWZpbmUgbWtkdGVtcCBnaXRta2R0ZW1wCitjaGFyICpnaXRta2R0ZW1wKGNoYXIgKik7CisjZW5kaWYKKworI2lmZGVmIE5PX1VOU0VURU5WCisjZGVmaW5lIHVuc2V0ZW52IGdpdHVuc2V0ZW52Cit2b2lkIGdpdHVuc2V0ZW52KGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKworI2lmZGVmIE5PX1NUUkNBU0VTVFIKKyNkZWZpbmUgc3RyY2FzZXN0ciBnaXRzdHJjYXNlc3RyCitjaGFyICpnaXRzdHJjYXNlc3RyKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpOworI2VuZGlmCisKKyNpZmRlZiBOT19TVFJMQ1BZCisjZGVmaW5lIHN0cmxjcHkgZ2l0c3RybGNweQorc2l6ZV90IGdpdHN0cmxjcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CisjZW5kaWYKKworI2lmZGVmIE5PX1NUUlRPVU1BWAorI2RlZmluZSBzdHJ0b3VtYXggZ2l0c3RydG91bWF4Cit1aW50bWF4X3QgZ2l0c3RydG91bWF4KGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKKyNkZWZpbmUgc3RydG9pbWF4IGdpdHN0cnRvaW1heAoraW50bWF4X3QgZ2l0c3RydG9pbWF4KGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKKyNlbmRpZgorCisjaWZkZWYgTk9fSFNUUkVSUk9SCisjZGVmaW5lIGhzdHJlcnJvciBnaXRoc3RyZXJyb3IKK2NvbnN0IGNoYXIgKmdpdGhzdHJlcnJvcihpbnQgaGVycm9yKTsKKyNlbmRpZgorCisjaWZkZWYgTk9fTUVNTUVNCisjZGVmaW5lIG1lbW1lbSBnaXRtZW1tZW0KK3ZvaWQgKmdpdG1lbW1lbShjb25zdCB2b2lkICpoYXlzdGFjaywgc2l6ZV90IGhheXN0YWNrbGVuLAorCQljb25zdCB2b2lkICpuZWVkbGUsIHNpemVfdCBuZWVkbGVsZW4pOworI2VuZGlmCisKKyNpZmRlZiBPVkVSUklERV9TVFJEVVAKKyNpZmRlZiBzdHJkdXAKKyN1bmRlZiBzdHJkdXAKKyNlbmRpZgorI2RlZmluZSBzdHJkdXAgZ2l0c3RyZHVwCitjaGFyICpnaXRzdHJkdXAoY29uc3QgY2hhciAqcyk7CisjZW5kaWYKKworI2lmZGVmIE5PX0dFVFBBR0VTSVpFCisjZGVmaW5lIGdldHBhZ2VzaXplKCkgc3lzY29uZihfU0NfUEFHRVNJWkUpCisjZW5kaWYKKworI2lmbmRlZiBPX0NMT0VYRUMKKyNkZWZpbmUgT19DTE9FWEVDIDAKKyNlbmRpZgorCisjaWZkZWYgRlJFQURfUkVBRFNfRElSRUNUT1JJRVMKKyMgaWYgIWRlZmluZWQoU1VQUFJFU1NfRk9QRU5fUkVERUZJTklUSU9OKQorIyAgaWZkZWYgZm9wZW4KKyMgICB1bmRlZiBmb3BlbgorIyAgZW5kaWYKKyMgIGRlZmluZSBmb3BlbihhLGIpIGdpdF9mb3BlbihhLGIpCisjIGVuZGlmCitGSUxFICpnaXRfZm9wZW4oY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKKyNlbmRpZgorCisjaWZkZWYgU05QUklOVEZfUkVUVVJOU19CT0dVUworI2lmZGVmIHNucHJpbnRmCisjdW5kZWYgc25wcmludGYKKyNlbmRpZgorI2RlZmluZSBzbnByaW50ZiBnaXRfc25wcmludGYKK2ludCBnaXRfc25wcmludGYoY2hhciAqc3RyLCBzaXplX3QgbWF4c2l6ZSwKKwkJIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKyNpZmRlZiB2c25wcmludGYKKyN1bmRlZiB2c25wcmludGYKKyNlbmRpZgorI2RlZmluZSB2c25wcmludGYgZ2l0X3ZzbnByaW50ZgoraW50IGdpdF92c25wcmludGYoY2hhciAqc3RyLCBzaXplX3QgbWF4c2l6ZSwKKwkJICBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXApOworI2VuZGlmCisKKyNpZmRlZiBfX0dMSUJDX1BSRVJFUQorI2lmIF9fR0xJQkNfUFJFUkVRKDIsIDEpCisjZGVmaW5lIEhBVkVfU1RSQ0hSTlVMCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfU1RSQ0hSTlVMCisjZGVmaW5lIHN0cmNocm51bCBnaXRzdHJjaHJudWwKK3N0YXRpYyBpbmxpbmUgY2hhciAqZ2l0c3RyY2hybnVsKGNvbnN0IGNoYXIgKnMsIGludCBjKQoreworCXdoaWxlICgqcyAmJiAqcyAhPSBjKQorCQlzKys7CisJcmV0dXJuIChjaGFyICopczsKK30KKyNlbmRpZgorCisjaWZkZWYgTk9fSU5FVF9QVE9OCitpbnQgaW5ldF9wdG9uKGludCBhZiwgY29uc3QgY2hhciAqc3JjLCB2b2lkICpkc3QpOworI2VuZGlmCisKKyNpZmRlZiBOT19JTkVUX05UT1AKK2NvbnN0IGNoYXIgKmluZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSk7CisjZW5kaWYKKworI2lmZGVmIE5PX1BUSFJFQURTCisjZGVmaW5lIGF0ZXhpdCBnaXRfYXRleGl0CitpbnQgZ2l0X2F0ZXhpdCh2b2lkICgqaGFuZGxlcikodm9pZCkpOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHN0X2FkZChzaXplX3QgYSwgc2l6ZV90IGIpCit7CisJaWYgKHVuc2lnbmVkX2FkZF9vdmVyZmxvd3MoYSwgYikpCisJCWRpZSgic2l6ZV90IG92ZXJmbG93OiAlIlBSSXVNQVgiICsgJSJQUkl1TUFYLAorCQkgICAgKHVpbnRtYXhfdClhLCAodWludG1heF90KWIpOworCXJldHVybiBhICsgYjsKK30KKyNkZWZpbmUgc3RfYWRkMyhhLGIsYykgICBzdF9hZGQoc3RfYWRkKChhKSwoYikpLChjKSkKKyNkZWZpbmUgc3RfYWRkNChhLGIsYyxkKSBzdF9hZGQoc3RfYWRkMygoYSksKGIpLChjKSksKGQpKQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBzdF9tdWx0KHNpemVfdCBhLCBzaXplX3QgYikKK3sKKwlpZiAodW5zaWduZWRfbXVsdF9vdmVyZmxvd3MoYSwgYikpCisJCWRpZSgic2l6ZV90IG92ZXJmbG93OiAlIlBSSXVNQVgiICogJSJQUkl1TUFYLAorCQkgICAgKHVpbnRtYXhfdClhLCAodWludG1heF90KWIpOworCXJldHVybiBhICogYjsKK30KKworc3RhdGljIGlubGluZSBzaXplX3Qgc3Rfc3ViKHNpemVfdCBhLCBzaXplX3QgYikKK3sKKwlpZiAoYSA8IGIpCisJCWRpZSgic2l6ZV90IHVuZGVyZmxvdzogJSJQUkl1TUFYIiAtICUiUFJJdU1BWCwKKwkJICAgICh1aW50bWF4X3QpYSwgKHVpbnRtYXhfdCliKTsKKwlyZXR1cm4gYSAtIGI7Cit9CisKKyNpZmRlZiBIQVZFX0FMTE9DQV9ICisjIGluY2x1ZGUgPGFsbG9jYS5oPgorIyBkZWZpbmUgeGFsbG9jYShzaXplKSAgICAgIChhbGxvY2Eoc2l6ZSkpCisjIGRlZmluZSB4YWxsb2NhX2ZyZWUocCkgICAgZG8ge30gd2hpbGUgKDApCisjZWxzZQorIyBkZWZpbmUgeGFsbG9jYShzaXplKSAgICAgICh4bWFsbG9jKHNpemUpKQorIyBkZWZpbmUgeGFsbG9jYV9mcmVlKHApICAgIChmcmVlKHApKQorI2VuZGlmCitjaGFyICp4c3RyZHVwKGNvbnN0IGNoYXIgKnN0cik7Cit2b2lkICp4bWFsbG9jKHNpemVfdCBzaXplKTsKK3ZvaWQgKnhtYWxsb2N6KHNpemVfdCBzaXplKTsKK3ZvaWQgKnhtYWxsb2N6X2dlbnRseShzaXplX3Qgc2l6ZSk7Cit2b2lkICp4bWVtZHVweihjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2NoYXIgKnhzdHJuZHVwKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbik7Cit2b2lkICp4cmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKK3ZvaWQgKnhjYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSk7Cit2b2lkICp4bW1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCwgaW50IHByb3QsIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpOwordm9pZCAqeG1tYXBfZ2VudGx5KHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoLCBpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIG9mZl90IG9mZnNldCk7CitpbnQgeG9wZW4oY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLCAuLi4pOworc3NpemVfdCB4cmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Citzc2l6ZV90IHh3cml0ZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Citzc2l6ZV90IHhwcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgb2ZmX3Qgb2Zmc2V0KTsKK2ludCB4ZHVwKGludCBmZCk7CitGSUxFICp4Zm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSk7CitGSUxFICp4ZmRvcGVuKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSk7CitpbnQgeG1rc3RlbXAoY2hhciAqdGVtcF9maWxlbmFtZSk7CitpbnQgeG1rc3RlbXBfbW9kZShjaGFyICp0ZW1wX2ZpbGVuYW1lLCBpbnQgbW9kZSk7CitjaGFyICp4Z2V0Y3dkKHZvaWQpOworRklMRSAqZm9wZW5fZm9yX3dyaXRpbmcoY29uc3QgY2hhciAqcGF0aCk7CitGSUxFICpmb3Blbl9vcl93YXJuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpOworCisvKgorICogRlJFRV9BTkRfTlVMTChwdHIpIGlzIGxpa2UgZnJlZShwdHIpIGZvbGxvd2VkIGJ5IHB0ciA9IE5VTEwuIE5vdGUKKyAqIHRoYXQgcHRyIGlzIHVzZWQgdHdpY2UsIHNvIGRvbid0IHBhc3MgZS5nLiBwdHIrKy4KKyAqLworI2RlZmluZSBGUkVFX0FORF9OVUxMKHApIGRvIHsgZnJlZShwKTsgKHApID0gTlVMTDsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBBTExPQ19BUlJBWSh4LCBhbGxvYykgKHgpID0geG1hbGxvYyhzdF9tdWx0KHNpemVvZigqKHgpKSwgKGFsbG9jKSkpCisjZGVmaW5lIENBTExPQ19BUlJBWSh4LCBhbGxvYykgKHgpID0geGNhbGxvYygoYWxsb2MpLCBzaXplb2YoKih4KSkpOworI2RlZmluZSBSRUFMTE9DX0FSUkFZKHgsIGFsbG9jKSAoeCkgPSB4cmVhbGxvYygoeCksIHN0X211bHQoc2l6ZW9mKCooeCkpLCAoYWxsb2MpKSkKKworI2RlZmluZSBDT1BZX0FSUkFZKGRzdCwgc3JjLCBuKSBjb3B5X2FycmF5KChkc3QpLCAoc3JjKSwgKG4pLCBzaXplb2YoKihkc3QpKSArIFwKKwlCVUlMRF9BU1NFUlRfT1JfWkVSTyhzaXplb2YoKihkc3QpKSA9PSBzaXplb2YoKihzcmMpKSkpCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9hcnJheSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4sIHNpemVfdCBzaXplKQoreworCWlmIChuKQorCQltZW1jcHkoZHN0LCBzcmMsIHN0X211bHQoc2l6ZSwgbikpOworfQorCisjZGVmaW5lIE1PVkVfQVJSQVkoZHN0LCBzcmMsIG4pIG1vdmVfYXJyYXkoKGRzdCksIChzcmMpLCAobiksIHNpemVvZigqKGRzdCkpICsgXAorCUJVSUxEX0FTU0VSVF9PUl9aRVJPKHNpemVvZigqKGRzdCkpID09IHNpemVvZigqKHNyYykpKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2FycmF5KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbiwgc2l6ZV90IHNpemUpCit7CisJaWYgKG4pCisJCW1lbW1vdmUoZHN0LCBzcmMsIHN0X211bHQoc2l6ZSwgbikpOworfQorCisvKgorICogVGhlc2UgZnVuY3Rpb25zIGhlbHAgeW91IGFsbG9jYXRlIHN0cnVjdHMgd2l0aCBmbGV4IGFycmF5cywgYW5kIGNvcHkKKyAqIHRoZSBkYXRhIGRpcmVjdGx5IGludG8gdGhlIGFycmF5LiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZDoKKyAqCisgKiAgIHN0cnVjdCBmb28geworICogICAgIGludCBiYXI7CisgKiAgICAgY2hhciBuYW1lW0ZMRVhfQVJSQVldOworICogICB9OworICoKKyAqIHlvdSBjYW4gZG86CisgKgorICogICBzdHJ1Y3QgZm9vICpmOworICogICBGTEVYX0FMTE9DX01FTShmLCBuYW1lLCBzcmMsIGxlbik7CisgKgorICogdG8gYWxsb2NhdGUgYSAiZm9vIiB3aXRoIHRoZSBjb250ZW50cyBvZiAic3JjIiBpbiB0aGUgIm5hbWUiIGZpZWxkLgorICogVGhlIHJlc3VsdGluZyBzdHJ1Y3QgaXMgYXV0b21hdGljYWxseSB6ZXJvJ2QsIGFuZCB0aGUgZmxleC1hcnJheSBmaWVsZAorICogaXMgTlVMLXRlcm1pbmF0ZWQgKHdoZXRoZXIgdGhlIGluY29taW5nIHNyYyBidWZmZXIgd2FzIG9yIG5vdCkuCisgKgorICogVGhlIEZMRVhQVFJfKiB2YXJpYW50cyBvcGVyYXRlIG9uIHN0cnVjdHMgdGhhdCBkb24ndCB1c2UgZmxleC1hcnJheXMsCisgKiBidXQgZG8gd2FudCB0byBzdG9yZSBhIHBvaW50ZXIgdG8gc29tZSBleHRyYSBkYXRhIGluIHRoZSBzYW1lIGFsbG9jYXRlZAorICogYmxvY2suIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZToKKyAqCisgKiAgIHN0cnVjdCBmb28geworICogICAgIGNoYXIgKm5hbWU7CisgKiAgICAgaW50IGJhcjsKKyAqICAgfTsKKyAqCisgKiB5b3UgY2FuIGRvOgorICoKKyAqICAgc3RydWN0IGZvbyAqZjsKKyAqICAgRkxFWFBUUl9BTExPQ19TVFIoZiwgbmFtZSwgc3JjKTsKKyAqCisgKiBhbmQgIm5hbWUiIHdpbGwgcG9pbnQgdG8gYSBibG9jayBvZiBtZW1vcnkgYWZ0ZXIgdGhlIHN0cnVjdCwgd2hpY2ggd2lsbCBiZQorICogZnJlZWQgYWxvbmcgd2l0aCB0aGUgc3RydWN0IChidXQgdGhlIHBvaW50ZXIgY2FuIGJlIHJlcG9pbnRlZCBhbnl3aGVyZSkuCisgKgorICogVGhlICpfU1RSIHZhcmlhbnRzIGFjY2VwdCBhIHN0cmluZyBwYXJhbWV0ZXIgcmF0aGVyIHRoYW4gYSBwdHIvbGVuCisgKiBjb21iaW5hdGlvbi4KKyAqCisgKiBOb3RlIHRoYXQgdGhlc2UgbWFjcm9zIHdpbGwgZXZhbHVhdGUgdGhlIGZpcnN0IHBhcmFtZXRlciBtdWx0aXBsZQorICogdGltZXMsIGFuZCBpdCBtdXN0IGJlIGFzc2lnbmFibGUgYXMgYW4gbHZhbHVlLgorICovCisjZGVmaW5lIEZMRVhfQUxMT0NfTUVNKHgsIGZsZXhuYW1lLCBidWYsIGxlbikgZG8geyBcCisJc2l6ZV90IGZsZXhfYXJyYXlfbGVuXyA9IChsZW4pOyBcCisJKHgpID0geGNhbGxvYygxLCBzdF9hZGQzKHNpemVvZigqKHgpKSwgZmxleF9hcnJheV9sZW5fLCAxKSk7IFwKKwltZW1jcHkoKHZvaWQgKikoeCktPmZsZXhuYW1lLCAoYnVmKSwgZmxleF9hcnJheV9sZW5fKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgRkxFWFBUUl9BTExPQ19NRU0oeCwgcHRybmFtZSwgYnVmLCBsZW4pIGRvIHsgXAorCXNpemVfdCBmbGV4X2FycmF5X2xlbl8gPSAobGVuKTsgXAorCSh4KSA9IHhjYWxsb2MoMSwgc3RfYWRkMyhzaXplb2YoKih4KSksIGZsZXhfYXJyYXlfbGVuXywgMSkpOyBcCisJbWVtY3B5KCh4KSArIDEsIChidWYpLCBmbGV4X2FycmF5X2xlbl8pOyBcCisJKHgpLT5wdHJuYW1lID0gKHZvaWQgKikoKHgpKzEpOyBcCit9IHdoaWxlKDApCisjZGVmaW5lIEZMRVhfQUxMT0NfU1RSKHgsIGZsZXhuYW1lLCBzdHIpIFwKKwlGTEVYX0FMTE9DX01FTSgoeCksIGZsZXhuYW1lLCAoc3RyKSwgc3RybGVuKHN0cikpCisjZGVmaW5lIEZMRVhQVFJfQUxMT0NfU1RSKHgsIHB0cm5hbWUsIHN0cikgXAorCUZMRVhQVFJfQUxMT0NfTUVNKCh4KSwgcHRybmFtZSwgKHN0ciksIHN0cmxlbihzdHIpKQorCitzdGF0aWMgaW5saW5lIGNoYXIgKnhzdHJkdXBfb3JfbnVsbChjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuIHN0ciA/IHhzdHJkdXAoc3RyKSA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHhzaXplX3Qob2ZmX3QgbGVuKQoreworCXNpemVfdCBzaXplID0gKHNpemVfdCkgbGVuOworCisJaWYgKGxlbiAhPSAob2ZmX3QpIHNpemUpCisJCWRpZSgiQ2Fubm90IGhhbmRsZSBmaWxlcyB0aGlzIGJpZyIpOworCXJldHVybiBzaXplOworfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQoraW50IHhzbnByaW50ZihjaGFyICpkc3QsIHNpemVfdCBtYXgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworI2lmbmRlZiBIT1NUX05BTUVfTUFYCisjZGVmaW5lIEhPU1RfTkFNRV9NQVggMjU2CisjZW5kaWYKKworaW50IHhnZXRob3N0bmFtZShjaGFyICpidWYsIHNpemVfdCBsZW4pOworCisvKiBpbiBjdHlwZS5jLCBmb3Iga3dzZXQgdXNlcnMgKi8KK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHRvbG93ZXJfdHJhbnNfdGJsWzI1Nl07CisKKy8qIFNhbmUgY3R5cGUgLSBubyBsb2NhbGUsIGFuZCB3b3JrcyB3aXRoIHNpZ25lZCBjaGFycyAqLworI3VuZGVmIGlzYXNjaWkKKyN1bmRlZiBpc3NwYWNlCisjdW5kZWYgaXNkaWdpdAorI3VuZGVmIGlzYWxwaGEKKyN1bmRlZiBpc2FsbnVtCisjdW5kZWYgaXNwcmludAorI3VuZGVmIGlzbG93ZXIKKyN1bmRlZiBpc3VwcGVyCisjdW5kZWYgdG9sb3dlcgorI3VuZGVmIHRvdXBwZXIKKyN1bmRlZiBpc2NudHJsCisjdW5kZWYgaXNwdW5jdAorI3VuZGVmIGlzeGRpZ2l0CisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHNhbmVfY3R5cGVbMjU2XTsKKyNkZWZpbmUgR0lUX1NQQUNFIDB4MDEKKyNkZWZpbmUgR0lUX0RJR0lUIDB4MDIKKyNkZWZpbmUgR0lUX0FMUEhBIDB4MDQKKyNkZWZpbmUgR0lUX0dMT0JfU1BFQ0lBTCAweDA4CisjZGVmaW5lIEdJVF9SRUdFWF9TUEVDSUFMIDB4MTAKKyNkZWZpbmUgR0lUX1BBVEhTUEVDX01BR0lDIDB4MjAKKyNkZWZpbmUgR0lUX0NOVFJMIDB4NDAKKyNkZWZpbmUgR0lUX1BVTkNUIDB4ODAKKyNkZWZpbmUgc2FuZV9pc3Rlc3QoeCxtYXNrKSAoKHNhbmVfY3R5cGVbKHVuc2lnbmVkIGNoYXIpKHgpXSAmIChtYXNrKSkgIT0gMCkKKyNkZWZpbmUgaXNhc2NpaSh4KSAoKCh4KSAmIH4weDdmKSA9PSAwKQorI2RlZmluZSBpc3NwYWNlKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX1NQQUNFKQorI2RlZmluZSBpc2RpZ2l0KHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0RJR0lUKQorI2RlZmluZSBpc2FscGhhKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0FMUEhBKQorI2RlZmluZSBpc2FsbnVtKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0FMUEhBIHwgR0lUX0RJR0lUKQorI2RlZmluZSBpc3ByaW50KHgpICgoeCkgPj0gMHgyMCAmJiAoeCkgPD0gMHg3ZSkKKyNkZWZpbmUgaXNsb3dlcih4KSBzYW5lX2lzY2FzZSh4LCAxKQorI2RlZmluZSBpc3VwcGVyKHgpIHNhbmVfaXNjYXNlKHgsIDApCisjZGVmaW5lIGlzX2dsb2Jfc3BlY2lhbCh4KSBzYW5lX2lzdGVzdCh4LEdJVF9HTE9CX1NQRUNJQUwpCisjZGVmaW5lIGlzX3JlZ2V4X3NwZWNpYWwoeCkgc2FuZV9pc3Rlc3QoeCxHSVRfR0xPQl9TUEVDSUFMIHwgR0lUX1JFR0VYX1NQRUNJQUwpCisjZGVmaW5lIGlzY250cmwoeCkgKHNhbmVfaXN0ZXN0KHgsR0lUX0NOVFJMKSkKKyNkZWZpbmUgaXNwdW5jdCh4KSBzYW5lX2lzdGVzdCh4LCBHSVRfUFVOQ1QgfCBHSVRfUkVHRVhfU1BFQ0lBTCB8IFwKKwkJR0lUX0dMT0JfU1BFQ0lBTCB8IEdJVF9QQVRIU1BFQ19NQUdJQykKKyNkZWZpbmUgaXN4ZGlnaXQoeCkgKGhleHZhbF90YWJsZVsodW5zaWduZWQgY2hhcikoeCldICE9IC0xKQorI2RlZmluZSB0b2xvd2VyKHgpIHNhbmVfY2FzZSgodW5zaWduZWQgY2hhcikoeCksIDB4MjApCisjZGVmaW5lIHRvdXBwZXIoeCkgc2FuZV9jYXNlKCh1bnNpZ25lZCBjaGFyKSh4KSwgMCkKKyNkZWZpbmUgaXNfcGF0aHNwZWNfbWFnaWMoeCkgc2FuZV9pc3Rlc3QoeCxHSVRfUEFUSFNQRUNfTUFHSUMpCisKK3N0YXRpYyBpbmxpbmUgaW50IHNhbmVfY2FzZShpbnQgeCwgaW50IGhpZ2gpCit7CisJaWYgKHNhbmVfaXN0ZXN0KHgsIEdJVF9BTFBIQSkpCisJCXggPSAoeCAmIH4weDIwKSB8IGhpZ2g7CisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNhbmVfaXNjYXNlKGludCB4LCBpbnQgaXNfbG93ZXIpCit7CisJaWYgKCFzYW5lX2lzdGVzdCh4LCBHSVRfQUxQSEEpKQorCQlyZXR1cm4gMDsKKworCWlmIChpc19sb3dlcikKKwkJcmV0dXJuICh4ICYgMHgyMCkgIT0gMDsKKwllbHNlCisJCXJldHVybiAoeCAmIDB4MjApID09IDA7Cit9CisKKy8qCisgKiBMaWtlIHNraXBfcHJlZml4LCBidXQgY29tcGFyZSBjYXNlLWluc2Vuc2l0aXZlbHkuIE5vdGUgdGhhdCB0aGUgY29tcGFyaXNvbgorICogaXMgZG9uZSB2aWEgdG9sb3dlcigpLCBzbyBpdCBpcyBzdHJpY3RseSBBU0NJSSAobm8gbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIG9yCisgKiBsb2NhbGUtc3BlY2lmaWMgY29udmVyc2lvbnMpLgorICovCitzdGF0aWMgaW5saW5lIGludCBza2lwX2lwcmVmaXgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgICAgY29uc3QgY2hhciAqKm91dCkKK3sKKwlkbyB7CisJCWlmICghKnByZWZpeCkgeworCQkJKm91dCA9IHN0cjsKKwkJCXJldHVybiAxOworCQl9CisJfSB3aGlsZSAodG9sb3dlcigqc3RyKyspID09IHRvbG93ZXIoKnByZWZpeCsrKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN0cnRvdWxfdWkoY2hhciBjb25zdCAqcywgaW50IGJhc2UsIHVuc2lnbmVkIGludCAqcmVzdWx0KQoreworCXVuc2lnbmVkIGxvbmcgdWw7CisJY2hhciAqcDsKKworCWVycm5vID0gMDsKKwkvKiBuZWdhdGl2ZSB2YWx1ZXMgd291bGQgYmUgYWNjZXB0ZWQgYnkgc3RydG91bCAqLworCWlmIChzdHJjaHIocywgJy0nKSkKKwkJcmV0dXJuIC0xOworCXVsID0gc3RydG91bChzLCAmcCwgYmFzZSk7CisJaWYgKGVycm5vIHx8ICpwIHx8IHAgPT0gcyB8fCAodW5zaWduZWQgaW50KSB1bCAhPSB1bCkKKwkJcmV0dXJuIC0xOworCSpyZXN1bHQgPSB1bDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3RydG9sX2koY2hhciBjb25zdCAqcywgaW50IGJhc2UsIGludCAqcmVzdWx0KQoreworCWxvbmcgdWw7CisJY2hhciAqcDsKKworCWVycm5vID0gMDsKKwl1bCA9IHN0cnRvbChzLCAmcCwgYmFzZSk7CisJaWYgKGVycm5vIHx8ICpwIHx8IHAgPT0gcyB8fCAoaW50KSB1bCAhPSB1bCkKKwkJcmV0dXJuIC0xOworCSpyZXN1bHQgPSB1bDsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBnaXRfc3RhYmxlX3Fzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUsCisJCSAgICAgIGludCgqY29tcGFyKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOworI2lmZGVmIElOVEVSTkFMX1FTT1JUCisjZGVmaW5lIHFzb3J0IGdpdF9zdGFibGVfcXNvcnQKKyNlbmRpZgorCisjZGVmaW5lIFFTT1JUKGJhc2UsIG4sIGNvbXBhcikgc2FuZV9xc29ydCgoYmFzZSksIChuKSwgc2l6ZW9mKCooYmFzZSkpLCBjb21wYXIpCitzdGF0aWMgaW5saW5lIHZvaWQgc2FuZV9xc29ydCh2b2lkICpiYXNlLCBzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplLAorCQkJICAgICAgaW50KCpjb21wYXIpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkKK3sKKwlpZiAobm1lbWIgPiAxKQorCQlxc29ydChiYXNlLCBubWVtYiwgc2l6ZSwgY29tcGFyKTsKK30KKworI2RlZmluZSBTVEFCTEVfUVNPUlQoYmFzZSwgbiwgY29tcGFyKSBcCisJZ2l0X3N0YWJsZV9xc29ydCgoYmFzZSksIChuKSwgc2l6ZW9mKCooYmFzZSkpLCBjb21wYXIpCisKKyNpZm5kZWYgSEFWRV9JU09fUVNPUlRfUworaW50IGdpdF9xc29ydF9zKHZvaWQgKmJhc2UsIHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUsCisJCWludCAoKmNvbXBhcikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHZvaWQgKiksIHZvaWQgKmN0eCk7CisjZGVmaW5lIHFzb3J0X3MgZ2l0X3Fzb3J0X3MKKyNlbmRpZgorCisjZGVmaW5lIFFTT1JUX1MoYmFzZSwgbiwgY29tcGFyLCBjdHgpIGRvIHsJCQlcCisJaWYgKHFzb3J0X3MoKGJhc2UpLCAobiksIHNpemVvZigqKGJhc2UpKSwgY29tcGFyLCBjdHgpKQlcCisJCUJVRygicXNvcnRfcygpIGZhaWxlZCIpOwkJCVwKK30gd2hpbGUgKDApCisKKyNpZm5kZWYgUkVHX1NUQVJURU5ECisjZXJyb3IgIkdpdCByZXF1aXJlcyBSRUdfU1RBUlRFTkQgc3VwcG9ydC4gQ29tcGlsZSB3aXRoIE5PX1JFR0VYPU5lZWRzU3RhcnRFbmQiCisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgcmVnZXhlY19idWYoY29uc3QgcmVnZXhfdCAqcHJlZywgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgIHNpemVfdCBubWF0Y2gsIHJlZ21hdGNoX3QgcG1hdGNoW10sIGludCBlZmxhZ3MpCit7CisJYXNzZXJ0KG5tYXRjaCA+IDAgJiYgcG1hdGNoKTsKKwlwbWF0Y2hbMF0ucm1fc28gPSAwOworCXBtYXRjaFswXS5ybV9lbyA9IHNpemU7CisJcmV0dXJuIHJlZ2V4ZWMocHJlZywgYnVmLCBubWF0Y2gsIHBtYXRjaCwgZWZsYWdzIHwgUkVHX1NUQVJURU5EKTsKK30KKworI2lmbmRlZiBESVJfSEFTX0JTRF9HUk9VUF9TRU1BTlRJQ1MKKyMgZGVmaW5lIEZPUkNFX0RJUl9TRVRfR0lEIFNfSVNHSUQKKyNlbHNlCisjIGRlZmluZSBGT1JDRV9ESVJfU0VUX0dJRCAwCisjZW5kaWYKKworI2lmZGVmIE5PX05TRUMKKyN1bmRlZiBVU0VfTlNFQworI2RlZmluZSBTVF9DVElNRV9OU0VDKHN0KSAwCisjZGVmaW5lIFNUX01USU1FX05TRUMoc3QpIDAKKyNlbHNlCisjaWZkZWYgVVNFX1NUX1RJTUVTUEVDCisjZGVmaW5lIFNUX0NUSU1FX05TRUMoc3QpICgodW5zaWduZWQgaW50KSgoc3QpLnN0X2N0aW1lc3BlYy50dl9uc2VjKSkKKyNkZWZpbmUgU1RfTVRJTUVfTlNFQyhzdCkgKCh1bnNpZ25lZCBpbnQpKChzdCkuc3RfbXRpbWVzcGVjLnR2X25zZWMpKQorI2Vsc2UKKyNkZWZpbmUgU1RfQ1RJTUVfTlNFQyhzdCkgKCh1bnNpZ25lZCBpbnQpKChzdCkuc3RfY3RpbS50dl9uc2VjKSkKKyNkZWZpbmUgU1RfTVRJTUVfTlNFQyhzdCkgKCh1bnNpZ25lZCBpbnQpKChzdCkuc3RfbXRpbS50dl9uc2VjKSkKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBVTlJFTElBQkxFX0ZTVEFUCisjZGVmaW5lIGZzdGF0X2lzX3JlbGlhYmxlKCkgMAorI2Vsc2UKKyNkZWZpbmUgZnN0YXRfaXNfcmVsaWFibGUoKSAxCisjZW5kaWYKKworI2lmbmRlZiB2YV9jb3B5CisvKgorICogU2luY2UgYW4gb2J2aW91cyBpbXBsZW1lbnRhdGlvbiBvZiB2YV9saXN0IHdvdWxkIGJlIHRvIG1ha2UgaXQgYQorICogcG9pbnRlciBpbnRvIHRoZSBzdGFjayBmcmFtZSwgYSBzaW1wbGUgYXNzaWdubWVudCB3aWxsIHdvcmsgb24KKyAqIG1hbnkgc3lzdGVtcy4gIEJ1dCBsZXQncyB0cnkgdG8gYmUgbW9yZSBwb3J0YWJsZS4KKyAqLworI2lmZGVmIF9fdmFfY29weQorI2RlZmluZSB2YV9jb3B5KGRzdCwgc3JjKSBfX3ZhX2NvcHkoZHN0LCBzcmMpCisjZWxzZQorI2RlZmluZSB2YV9jb3B5KGRzdCwgc3JjKSAoKGRzdCkgPSAoc3JjKSkKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCAoX01TQ19WRVIgPj0gMTQwMCkgfHwgZGVmaW5lZChfX0M5OV9NQUNST19XSVRIX1ZBX0FSR1MpCisjZGVmaW5lIEhBVkVfVkFSSUFESUNfTUFDUk9TIDEKKyNlbmRpZgorCisvKiB1c2FnZS5jOiBvbmx5IHRvIGJlIHVzZWQgZm9yIHRlc3RpbmcgQlVHKCkgaW1wbGVtZW50YXRpb24gKHNlZSB0ZXN0LXRvb2wpICovCitleHRlcm4gaW50IEJVR19leGl0X2NvZGU7CisKKyNpZmRlZiBIQVZFX1ZBUklBRElDX01BQ1JPUworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDMsIDQpKSkgTk9SRVRVUk4KK3ZvaWQgQlVHX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisjZGVmaW5lIEJVRyguLi4pIEJVR19mbChfX0ZJTEVfXywgX19MSU5FX18sIF9fVkFfQVJHU19fKQorI2Vsc2UKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpIE5PUkVUVVJOCit2b2lkIEJVRyhjb25zdCBjaGFyICpmbXQsIC4uLik7CisjZW5kaWYKKworLyoKKyAqIFByZXNlcnZlcyBlcnJubywgcHJpbnRzIGEgbWVzc2FnZSwgYnV0IGdpdmVzIG5vIHdhcm5pbmcgZm9yIEVOT0VOVC4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCB3aGljaCBpbmNsdWRlcyB0cnlpbmcgdG8gdW5saW5rIGFuIG9iamVjdCB0aGF0IGRvZXMKKyAqIG5vdCBleGlzdC4KKyAqLworaW50IHVubGlua19vcl93YXJuKGNvbnN0IGNoYXIgKnBhdGgpOworIC8qCisgICogVHJpZXMgdG8gdW5saW5rIGZpbGUuICBSZXR1cm5zIDAgaWYgdW5saW5rIHN1Y2NlZWRlZAorICAqIG9yIHRoZSBmaWxlIGFscmVhZHkgZGlkbid0IGV4aXN0LiAgUmV0dXJucyAtMSBhbmQKKyAgKiBhcHBlbmRzIGEgbWVzc2FnZSB0byBlcnIgc3VpdGFibGUgZm9yCisgICogJ2Vycm9yKCIlcyIsIGVyci0+YnVmKScgb24gZXJyb3IuCisgICovCitpbnQgdW5saW5rX29yX21zZyhjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3Qgc3RyYnVmICplcnIpOworLyoKKyAqIFByZXNlcnZlcyBlcnJubywgcHJpbnRzIGEgbWVzc2FnZSwgYnV0IGdpdmVzIG5vIHdhcm5pbmcgZm9yIEVOT0VOVC4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCB3aGljaCBpbmNsdWRlcyB0cnlpbmcgdG8gcmVtb3ZlIGEgZGlyZWN0b3J5IHRoYXQgZG9lcworICogbm90IGV4aXN0LgorICovCitpbnQgcm1kaXJfb3Jfd2Fybihjb25zdCBjaGFyICpwYXRoKTsKKy8qCisgKiBDYWxscyB0aGUgY29ycmVjdCBmdW5jdGlvbiBvdXQgb2Yge3VubGluayxybWRpcn1fb3Jfd2FybiBiYXNlZCBvbgorICogdGhlIHN1cHBsaWVkIGZpbGUgbW9kZS4KKyAqLworaW50IHJlbW92ZV9vcl93YXJuKHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCBjaGFyICpwYXRoKTsKKworLyoKKyAqIENhbGwgYWNjZXNzKDIpLCBidXQgd2FybiBmb3IgYW55IGVycm9yIGV4Y2VwdCAibWlzc2luZyBmaWxlIgorICogKEVOT0VOVCBvciBFTk9URElSKS4KKyAqLworI2RlZmluZSBBQ0NFU1NfRUFDQ0VTX09LICgxVSA8PCAwKQoraW50IGFjY2Vzc19vcl93YXJuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlLCB1bnNpZ25lZCBmbGFnKTsKK2ludCBhY2Nlc3Nfb3JfZGllKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlLCB1bnNpZ25lZCBmbGFnKTsKKworLyogV2FybiBvbiBhbiBpbmFjY2Vzc2libGUgZmlsZSBpZiBlcnJubyBpbmRpY2F0ZXMgdGhpcyBpcyBhbiBlcnJvciAqLworaW50IHdhcm5fb25fZm9wZW5fZXJyb3JzKGNvbnN0IGNoYXIgKnBhdGgpOworCisjaWYgIWRlZmluZWQoVVNFX1BBUkVOU19BUk9VTkRfR0VUVEVYVF9OKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBVU0VfUEFSRU5TX0FST1VORF9HRVRURVhUX04gMQorI2VuZGlmCisKKyNpZm5kZWYgU0hFTExfUEFUSAorIyBkZWZpbmUgU0hFTExfUEFUSCAiL2Jpbi9zaCIKKyNlbmRpZgorCisjaWZuZGVmIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMKKyNkZWZpbmUgZmxvY2tmaWxlKGZoKQorI2RlZmluZSBmdW5sb2NrZmlsZShmaCkKKyNkZWZpbmUgZ2V0Y191bmxvY2tlZChmaCkgZ2V0YyhmaCkKKyNlbmRpZgorCisjaWZkZWYgRklMRU5PX0lTX0FfTUFDUk8KK2ludCBnaXRfZmlsZW5vKEZJTEUgKnN0cmVhbSk7CisjIGlmbmRlZiBDT01QQVRfQ09ERV9GSUxFTk8KKyMgIHVuZGVmIGZpbGVubworIyAgZGVmaW5lIGZpbGVubyhwKSBnaXRfZmlsZW5vKHApCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIE5FRURfQUNDRVNTX1JPT1RfSEFORExFUgoraW50IGdpdF9hY2Nlc3MoY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUpOworIyBpZm5kZWYgQ09NUEFUX0NPREVfQUNDRVNTCisjICBpZmRlZiBhY2Nlc3MKKyMgIHVuZGVmIGFjY2VzcworIyAgZW5kaWYKKyMgIGRlZmluZSBhY2Nlc3MocGF0aCwgbW9kZSkgZ2l0X2FjY2VzcyhwYXRoLCBtb2RlKQorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBPdXIgY29kZSBvZnRlbiBvcGVucyBhIHBhdGggdG8gYW4gb3B0aW9uYWwgZmlsZSwgdG8gd29yayBvbiBpdHMKKyAqIGNvbnRlbnRzIHdoZW4gd2UgY2FuIHN1Y2Nlc3NmdWxseSBvcGVuIGl0LiAgV2UgY2FuIGlnbm9yZSBhIGZhaWx1cmUKKyAqIHRvIG9wZW4gaWYgc3VjaCBhbiBvcHRpb25hbCBmaWxlIGRvZXMgbm90IGV4aXN0LCBidXQgd2UgZG8gd2FudCB0bworICogcmVwb3J0IGEgZmFpbHVyZSBpbiBvcGVuaW5nIGZvciBvdGhlciByZWFzb25zIChlLmcuIHdlIGdvdCBhbiBJL08KKyAqIGVycm9yLCBvciB0aGUgZmlsZSBpcyB0aGVyZSwgYnV0IHdlIGxhY2sgdGhlIHBlcm1pc3Npb24gdG8gb3BlbikuCisgKgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIHNlZWluZyBhbiBlcnJvciBmcm9tIG9wZW4oKSBvciBmb3BlbigpIHRvCisgKiBzZWUgaWYgdGhlIGVycm5vIGluZGljYXRlcyBhIG1pc3NpbmcgZmlsZSB0aGF0IHdlIGNhbiBzYWZlbHkgaWdub3JlLgorICovCitzdGF0aWMgaW5saW5lIGludCBpc19taXNzaW5nX2ZpbGVfZXJyb3IoaW50IGVycm5vXykKK3sKKwlyZXR1cm4gKGVycm5vXyA9PSBFTk9FTlQgfHwgZXJybm9fID09IEVOT1RESVIpOworfQorCitpbnQgY21kX21haW4oaW50LCBjb25zdCBjaGFyICoqKTsKKworLyoKKyAqIEludGVyY2VwdCBhbGwgY2FsbHMgdG8gZXhpdCgpIGFuZCByb3V0ZSB0aGVtIHRvIHRyYWNlMiB0bworICogb3B0aW9uYWxseSBlbWl0IGEgbWVzc2FnZSBiZWZvcmUgY2FsbGluZyB0aGUgcmVhbCBleGl0KCkuCisgKi8KK2ludCB0cmFjZTJfY21kX2V4aXRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBjb2RlKTsKKyNkZWZpbmUgZXhpdChjb2RlKSBleGl0KHRyYWNlMl9jbWRfZXhpdF9mbChfX0ZJTEVfXywgX19MSU5FX18sIChjb2RlKSkpCisKKy8qCisgKiBZb3UgY2FuIG1hcmsgYSBzdGFjayB2YXJpYWJsZSB3aXRoIFVOTEVBSyh2YXIpIHRvIGF2b2lkIGl0IGJlaW5nCisgKiByZXBvcnRlZCBhcyBhIGxlYWsgYnkgdG9vbHMgbGlrZSBMU0FOIG9yIHZhbGdyaW5kLiBUaGUgYXJndW1lbnQKKyAqIHNob3VsZCBnZW5lcmFsbHkgYmUgdGhlIHZhcmlhYmxlIGl0c2VsZiAobm90IGl0cyBhZGRyZXNzIGFuZCBub3Qgd2hhdAorICogaXQgcG9pbnRzIHRvKS4gSXQncyBzYWZlIHRvIHVzZSB0aGlzIG9uIHBvaW50ZXJzIHdoaWNoIG1heSBhbHJlYWR5CisgKiBoYXZlIGJlZW4gZnJlZWQsIG9yIG9uIHBvaW50ZXJzIHdoaWNoIG1heSBzdGlsbCBiZSBpbiB1c2UuCisgKgorICogVXNlIHRoaXMgX29ubHlfIGZvciBhIHZhcmlhYmxlIHRoYXQgbGVha3MgYnkgZ29pbmcgb3V0IG9mIHNjb3BlIGF0CisgKiBwcm9ncmFtIGV4aXQgKHNvIG9ubHkgZnJvbSBjbWRfKiBmdW5jdGlvbnMgb3IgdGhlaXIgZGlyZWN0IGhlbHBlcnMpLgorICogTm9ybWFsIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSB3aGljaCBtYXkgYmUgY2FsbGVkIG11bHRpcGxlCisgKiB0aW1lcywgc2hvdWxkIGFjdHVhbGx5IGZyZWUgdGhlaXIgbWVtb3J5LiBUaGlzIGlzIG9ubHkgbWVhbnQgYXMKKyAqIGFuIGFubm90YXRpb24sIGFuZCBkb2VzIG5vdGhpbmcgaW4gbm9uLWxlYWstY2hlY2tpbmcgYnVpbGRzLgorICovCisjaWZkZWYgU1VQUFJFU1NfQU5OT1RBVEVEX0xFQUtTCit2b2lkIHVubGVha19tZW1vcnkoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuKTsKKyNkZWZpbmUgVU5MRUFLKHZhcikgdW5sZWFrX21lbW9yeSgmKHZhciksIHNpemVvZih2YXIpKQorI2Vsc2UKKyNkZWZpbmUgVU5MRUFLKHZhcikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworLyoKKyAqIFRoaXMgaW5jbHVkZSBtdXN0IGNvbWUgYWZ0ZXIgc3lzdGVtIGhlYWRlcnMsIHNpbmNlIGl0IGludHJvZHVjZXMgbWFjcm9zIHRoYXQKKyAqIHJlcGxhY2Ugc3lzdGVtIG5hbWVzLgorICovCisjaW5jbHVkZSAiYmFubmVkLmgiCisKKy8qCisgKiBjb250YWluZXJfb2YgLSBHZXQgdGhlIGFkZHJlc3Mgb2YgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYSBmaWVsZC4KKyAqCisgKiBAcHRyOiBwb2ludGVyIHRvIHRoZSBmaWVsZC4KKyAqIEB0eXBlOiB0eXBlIG9mIHRoZSBvYmplY3QuCisgKiBAbWVtYmVyOiBuYW1lIG9mIHRoZSBmaWVsZCB3aXRoaW4gdGhlIG9iamVjdC4KKyAqLworI2RlZmluZSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpIFwKKwkoKHR5cGUgKikgKChjaGFyICopKHB0cikgLSBvZmZzZXRvZih0eXBlLCBtZW1iZXIpKSkKKworLyoKKyAqIGhlbHBlciBmdW5jdGlvbiBmb3IgYGNvbnRhaW5lcl9vZl9vcl9udWxsJyB0byBhdm9pZCBtdWx0aXBsZQorICogZXZhbHVhdGlvbiBvZiBAcHRyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqY29udGFpbmVyX29mX29yX251bGxfb2Zmc2V0KHZvaWQgKnB0ciwgc2l6ZV90IG9mZnNldCkKK3sKKwlyZXR1cm4gcHRyID8gKGNoYXIgKilwdHIgLSBvZmZzZXQgOiBOVUxMOworfQorCisvKgorICogbGlrZSBgY29udGFpbmVyX29mJywgYnV0IGFsbG93cyByZXR1cm5lZCB2YWx1ZSB0byBiZSBOVUxMCisgKi8KKyNkZWZpbmUgY29udGFpbmVyX29mX29yX251bGwocHRyLCB0eXBlLCBtZW1iZXIpIFwKKwkodHlwZSAqKWNvbnRhaW5lcl9vZl9vcl9udWxsX29mZnNldChwdHIsIG9mZnNldG9mKHR5cGUsIG1lbWJlcikpCisKKy8qCisgKiBsaWtlIG9mZnNldG9mKCksIGJ1dCB0YWtlcyBhIHBvaW50ZXIgdG8gYSBhIHZhcmlhYmxlIG9mIHR5cGUgd2hpY2gKKyAqIGNvbnRhaW5zIEBtZW1iZXIsIGluc3RlYWQgb2YgYSBzcGVjaWZpZWQgdHlwZS4KKyAqIEBwdHIgaXMgc3ViamVjdCB0byBtdWx0aXBsZSBldmFsdWF0aW9uIHNpbmNlIHdlIGNhbid0IHJlbHkgb24gX190eXBlb2ZfXworICogZXZlcnl3aGVyZS4KKyAqLworI2lmIGRlZmluZWQoX19HTlVDX18pIC8qIGNsYW5nIHNldHMgdGhpcywgdG9vICovCisjZGVmaW5lIE9GRlNFVE9GX1ZBUihwdHIsIG1lbWJlcikgb2Zmc2V0b2YoX190eXBlb2ZfXygqcHRyKSwgbWVtYmVyKQorI2Vsc2UgLyogIV9fR05VQ19fICovCisjZGVmaW5lIE9GRlNFVE9GX1ZBUihwdHIsIG1lbWJlcikgXAorCSgodWludHB0cl90KSYocHRyKS0+bWVtYmVyIC0gKHVpbnRwdHJfdCkocHRyKSkKKyNlbmRpZiAvKiAhX19HTlVDX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9naXQtY3ZzZXhwb3J0Y29tbWl0LnBlcmwgYi9naXQtY3ZzZXhwb3J0Y29tbWl0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmMwMGQ1OQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1jdnNleHBvcnRjb21taXQucGVybApAQCAtMCwwICsxLDQ2MyBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSA1LjAwODsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgR2V0b3B0OjpTdGQ7Cit1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZGlyKTsKK3VzZSBEYXRhOjpEdW1wZXI7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoYmFzZW5hbWUgZGlybmFtZSk7Cit1c2UgRmlsZTo6U3BlYzsKK3VzZSBHaXQ7CisKK291ciAoJG9wdF9oLCAkb3B0X1AsICRvcHRfcCwgJG9wdF92LCAkb3B0X2MsICRvcHRfZiwgJG9wdF9hLCAkb3B0X20sICRvcHRfZCwgJG9wdF91LCAkb3B0X3csICRvcHRfVywgJG9wdF9rKTsKKworZ2V0b3B0cygndWhQcHZjZmthbTpkOnc6VycpOworCiskb3B0X2ggJiYgdXNhZ2UoKTsKKworZGllICJOZWVkIGF0IGxlYXN0IG9uZSBjb21taXQgaWRlbnRpZmllciEiIHVubGVzcyBAQVJHVjsKKworIyBHZXQgZ2l0LWNvbmZpZyBzZXR0aW5ncworbXkgJHJlcG8gPSBHaXQtPnJlcG9zaXRvcnkoKTsKKyRvcHRfdyA9ICRyZXBvLT5jb25maWcoJ2N2c2V4cG9ydGNvbW1pdC5jdnNkaXInKSB1bmxlc3MgZGVmaW5lZCAkb3B0X3c7CisKK2lmICgkb3B0X3cgfHwgJG9wdF9XKSB7CisJIyBSZW1lbWJlciB3aGVyZSBHSVRfRElSIGlzIGJlZm9yZSBjaGFuZ2luZyB0byBDVlMgY2hlY2tvdXQKKwl1bmxlc3MgKCRFTlZ7R0lUX0RJUn0pIHsKKwkJIyBObyBHSVRfRElSIHNldC4gRmlndXJlIGl0IG91dCBmb3Igb3Vyc2VsdmVzCisJCW15ICRnZCA9YGdpdC1yZXYtcGFyc2UgLS1naXQtZGlyYDsKKwkJY2hvbXAoJGdkKTsKKwkJJEVOVntHSVRfRElSfSA9ICRnZDsKKwl9CisKKwkjIE9uIE1TWVMsIGNvbnZlcnQgYSBXaW5kb3dzLXN0eWxlIHBhdGggdG8gYW4gTVNZUy1zdHlsZSBwYXRoCisJIyBzbyB0aGF0IHJlbDJhYnMoKSBiZWxvdyB3b3JrcyBjb3JyZWN0bHkuCisJaWYgKCReTyBlcSAnbXN5cycpIHsKKwkJJEVOVntHSVRfRElSfSA9fiBzI14oW1s6YWxwaGE6XV0pOi8jLyQxLyM7CisJfQorCisJIyBNYWtlIHN1cmUgR0lUX0RJUiBpcyBhYnNvbHV0ZQorCSRFTlZ7R0lUX0RJUn0gPSBGaWxlOjpTcGVjLT5yZWwyYWJzKCRFTlZ7R0lUX0RJUn0pOworfQorCitpZiAoJG9wdF93KSB7CisJaWYgKCEgLWQgJG9wdF93LiIvQ1ZTIiApIHsKKwkJZGllICIkb3B0X3cgaXMgbm90IGEgQ1ZTIGNoZWNrb3V0IjsKKwl9CisJY2hkaXIgJG9wdF93IG9yIGRpZSAiQ2Fubm90IGNoYW5nZSB0byBDVlMgY2hlY2tvdXQgYXQgJG9wdF93IjsKK30KK3VubGVzcyAoJEVOVntHSVRfRElSfSAmJiAtciAkRU5We0dJVF9ESVJ9KXsKKyAgICBkaWUgIkdJVF9ESVIgaXMgbm90IGRlZmluZWQgb3IgaXMgdW5yZWFkYWJsZSI7Cit9CisKKworbXkgQGN2czsKK2lmICgkb3B0X2QpIHsKKwlAY3ZzID0gKCdjdnMnLCAnLWQnLCAkb3B0X2QpOworfSBlbHNlIHsKKwlAY3ZzID0gKCdjdnMnKTsKK30KKworIyByZXNvbHZlIHRhcmdldCBjb21taXQKK215ICRjb21taXQ7CiskY29tbWl0ID0gcG9wIEBBUkdWOworJGNvbW1pdCA9IHNhZmVfcGlwZV9jYXB0dXJlKCdnaXQtcmV2LXBhcnNlJywgJy0tdmVyaWZ5JywgIiRjb21taXReMCIpOworY2hvbXAgJGNvbW1pdDsKK2lmICgkPykgeworICAgIGRpZSAiVGhlIGNvbW1pdCByZWZlcmVuY2UgJGNvbW1pdCBkaWQgbm90IHJlc29sdmUhIjsKK30KKworIyByZXNvbHZlIHdoYXQgcGFyZW50IHdlIHdhbnQKK215ICRwYXJlbnQ7CitpZiAoQEFSR1YpIHsKKyAgICAkcGFyZW50ID0gcG9wIEBBUkdWOworICAgICRwYXJlbnQgPSAgc2FmZV9waXBlX2NhcHR1cmUoJ2dpdC1yZXYtcGFyc2UnLCAnLS12ZXJpZnknLCAiJHBhcmVudF4wIik7CisgICAgY2hvbXAgJHBhcmVudDsKKyAgICBpZiAoJD8pIHsKKwlkaWUgIlRoZSBwYXJlbnQgcmVmZXJlbmNlIGRpZCBub3QgcmVzb2x2ZSEiOworICAgIH0KK30KKworIyBmaW5kIHBhcmVudHMgZnJvbSB0aGUgY29tbWl0IGl0c2VsZgorbXkgQGNvbW1pdCAgPSBzYWZlX3BpcGVfY2FwdHVyZSgnZ2l0LWNhdC1maWxlJywgJ2NvbW1pdCcsICRjb21taXQpOworbXkgQHBhcmVudHM7CitteSAkY29tbWl0dGVyOworbXkgJGF1dGhvcjsKK215ICRzdGFnZSA9ICdoZWFkZXJzJzsgIyBoZWFkZXJzLCBtc2cKK215ICR0aXRsZTsKK215ICRtc2cgPSAnJzsKKworZm9yZWFjaCBteSAkbGluZSAoQGNvbW1pdCkgeworICAgIGNob21wICRsaW5lOworICAgIGlmICgkc3RhZ2UgZXEgJ2hlYWRlcnMnICYmICRsaW5lIGVxICcnKSB7CisJJHN0YWdlID0gJ21zZyc7CisJbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJHN0YWdlIGVxICdoZWFkZXJzJykgeworCWlmICgkbGluZSA9fiBtL15wYXJlbnQgKFx3ezQwfSkkLykgeyAjIGZvdW5kIGEgcGFyZW50CisJICAgIHB1c2ggQHBhcmVudHMsICQxOworCX0gZWxzaWYgKCRsaW5lID1+IG0vXmF1dGhvciAoLispIFxkKyBbLStdXGQrJC8pIHsKKwkgICAgJGF1dGhvciA9ICQxOworCX0gZWxzaWYgKCRsaW5lID1+IG0vXmNvbW1pdHRlciAoLispIFxkKyBbLStdXGQrJC8pIHsKKwkgICAgJGNvbW1pdHRlciA9ICQxOworCX0KKyAgICB9IGVsc2UgeworCSRtc2cgLj0gJGxpbmUgLiAiXG4iOworCXVubGVzcyAoJHRpdGxlKSB7CisJICAgICR0aXRsZSA9ICRsaW5lOworCX0KKyAgICB9Cit9CisKK215ICRub3BhcmVudCA9ICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjsKK2lmICgkcGFyZW50KSB7CisgICAgbXkgJGZvdW5kOworICAgICMgZG91YmxlIGNoZWNrIHRoYXQgaXQncyBhIHZhbGlkIHBhcmVudAorICAgIGZvcmVhY2ggbXkgJHAgKEBwYXJlbnRzKSB7CisJaWYgKCRwIGVxICRwYXJlbnQpIHsKKwkgICAgJGZvdW5kID0gMTsKKwkgICAgbGFzdDsKKwl9OyAjIGZvdW5kIGl0CisgICAgfQorICAgIGRpZSAiRGlkIG5vdCBmaW5kICRwYXJlbnQgaW4gdGhlIHBhcmVudHMgZm9yIHRoaXMgY29tbWl0ISIgaWYgISRmb3VuZCBhbmQgISRvcHRfUDsKK30gZWxzZSB7ICMgd2UgZG9uJ3QgaGF2ZSBhIHBhcmVudCBmcm9tIHRoZSBjbWRsaW5lLi4uCisgICAgaWYgKEBwYXJlbnRzID09IDEpIHsgIyBpdCdzIHNhZmUgdG8gZ2V0IGl0IGZyb20gdGhlIGNvbW1pdAorCSRwYXJlbnQgPSAkcGFyZW50c1swXTsKKyAgICB9IGVsc2lmIChAcGFyZW50cyA9PSAwKSB7ICMgdGhlcmUgaXMgbm8gcGFyZW50CisgICAgICAgICRwYXJlbnQgPSAkbm9wYXJlbnQ7CisgICAgfSBlbHNlIHsgIyBjYW5ub3QgY2hvb3NlIGF1dG9tYXRpY2FsbHkgZnJvbSBtdWx0aXBsZSBwYXJlbnRzCisgICAgICAgIGRpZSAiVGhpcyBjb21taXQgaGFzIG1vcmUgdGhhbiBvbmUgcGFyZW50IC0tIHBsZWFzZSBuYW1lIHRoZSBwYXJlbnQgeW91IHdhbnQgdG8gdXNlIGV4cGxpY2l0bHkiOworICAgIH0KK30KKworbXkgJGdvX2JhY2tfdG8gPSAwOworCitpZiAoJG9wdF9XKSB7CisgICAgJG9wdF92ICYmIHByaW50ICJSZXNldHRpbmcgdG8gJHBhcmVudFxuIjsKKyAgICAkZ29fYmFja190byA9IGBnaXQgc3ltYm9saWMtcmVmIEhFQUQgMj4gL2Rldi9udWxsIHx8CisJZ2l0IHJldi1wYXJzZSBIRUFEYCB8fCBkaWUgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCBicmFuY2giOworICAgIHN5c3RlbSgiZ2l0IGNoZWNrb3V0IC1xICRwYXJlbnReMCIpICYmIGRpZSAiQ291bGQgbm90IGNoZWNrIG91dCAkcGFyZW50XjAiOworfQorCiskb3B0X3YgJiYgcHJpbnQgIkFwcGx5aW5nIHRvIENWUyBjb21taXQgJGNvbW1pdCBmcm9tIHBhcmVudCAkcGFyZW50XG4iOworCisjIGdyYWIgdGhlIGNvbW1pdCBtZXNzYWdlCitvcGVuKE1TRywgIj4ubXNnIikgb3IgZGllICJDYW5ub3Qgb3BlbiAubXNnIGZvciB3cml0aW5nIjsKK2lmICgkb3B0X20pIHsKKyAgICBwcmludCBNU0cgJG9wdF9tOworfQorcHJpbnQgTVNHICRtc2c7CitpZiAoJG9wdF9hKSB7CisgICAgcHJpbnQgTVNHICJcblxuQXV0aG9yOiAkYXV0aG9yXG4iOworICAgIGlmICgkYXV0aG9yIG5lICRjb21taXR0ZXIpIHsKKwlwcmludCBNU0cgIkNvbW1pdHRlcjogJGNvbW1pdHRlclxuIjsKKyAgICB9Cit9CitjbG9zZSBNU0c7CisKK2lmICgkcGFyZW50IGVxICRub3BhcmVudCkgeworICAgIGBnaXQtZGlmZi10cmVlIC0tYmluYXJ5IC1wIC0tcm9vdCAkY29tbWl0ID4uY3ZzZXhwb3J0Y29tbWl0LmRpZmZgOyMgfHwgZGllICJDYW5ub3QgZGlmZiI7Cit9IGVsc2UgeworICAgIGBnaXQtZGlmZi10cmVlIC0tYmluYXJ5IC1wICRwYXJlbnQgJGNvbW1pdCA+LmN2c2V4cG9ydGNvbW1pdC5kaWZmYDsjIHx8IGRpZSAiQ2Fubm90IGRpZmYiOworfQorCisjIyBhcHBseSBub24tYmluYXJ5IGNoYW5nZXMKKworIyBJbiBwZWRhbnRpYyBtb2RlIHJlcXVpcmUgYWxsIGxpbmVzIG9mIGNvbnRleHQgdG8gbWF0Y2guICBJbiBub3JtYWwKKyMgbW9kZSwgYmUgY29tcGF0aWJsZSB3aXRoIGRpZmYvcGF0Y2g6IGFzc3VtZSAzIGxpbmVzIG9mIGNvbnRleHQgYW5kCisjIHJlcXVpcmUgYXQgbGVhc3Qgb25lIGxpbmUgbWF0Y2gsIGkuZS4gaWdub3JlIGF0IG1vc3QgMiBsaW5lcyBvZgorIyBjb250ZXh0LCBsaWtlIGRpZmYvcGF0Y2ggZG8gYnkgZGVmYXVsdC4KK215ICRjb250ZXh0ID0gJG9wdF9wID8gJycgOiAnLUMxJzsKKworcHJpbnQgIkNoZWNraW5nIGlmIHBhdGNoIHdpbGwgYXBwbHlcbiI7CisKK215IEBzdGF0Oworb3BlbiBBUFBMWSwgIkdJVF9ESVI9IGdpdC1hcHBseSAkY29udGV4dCAtLXN1bW1hcnkgLS1udW1zdGF0PC5jdnNleHBvcnRjb21taXQuZGlmZnwiIHx8IGRpZSAiY2Fubm90IHBhdGNoIjsKK0BzdGF0PTxBUFBMWT47CitjbG9zZSBBUFBMWSB8fCBkaWUgIkNhbm5vdCBwYXRjaCI7CitteSAoQGJmaWxlcyxAZmlsZXMsQGFmaWxlcyxAZGZpbGVzKTsKK2Nob21wIEBzdGF0OworZm9yZWFjaCAoQHN0YXQpIHsKKwlwdXNoIChAYmZpbGVzLCQxKSBpZiBtL14tXHQtXHQoLiopJC87CisJcHVzaCAoQGZpbGVzLCAkMSkgaWYgbS9eLVx0LVx0KC4qKSQvOworCXB1c2ggKEBmaWxlcywgJDEpIGlmIG0vXlxkK1x0XGQrXHQoLiopJC87CisJcHVzaCAoQGFmaWxlcywkMSkgaWYgbS9eIGNyZWF0ZSBtb2RlIFswLTddKyAoLiopJC87CisJcHVzaCAoQGRmaWxlcywkMSkgaWYgbS9eIGRlbGV0ZSBtb2RlIFswLTddKyAoLiopJC87Cit9CittYXAgeyBzL14iKC4qKSIkLyQxL2cgfSBAYmZpbGVzLEBmaWxlczsKK21hcCB7IHMvXFwoWzAtN117M30pL3NwcmludGYoJyVjJyxvY3QgJDEpL2VnIH0gQGJmaWxlcyxAZmlsZXM7CisKKyMgY2hlY2sgdGhhdCB0aGUgZmlsZXMgYXJlIGNsZWFuIGFuZCB1cCB0byBkYXRlIGFjY29yZGluZyB0byBjdnMKK215ICRkaXJ0eTsKK215IEBkaXJzOworZm9yZWFjaCBteSAkcCAoQGFmaWxlcykgeworICAgIG15ICRwYXRoID0gZGlybmFtZSAkcDsKKyAgICB3aGlsZSAoIS1kICRwYXRoIGFuZCAhIGdyZXAgeyAkXyBlcSAkcGF0aCB9IEBkaXJzKSB7CisJdW5zaGlmdCBAZGlycywgJHBhdGg7CisJJHBhdGggPSBkaXJuYW1lICRwYXRoOworICAgIH0KK30KKworIyAuLi4gY2hlY2sgZGlycywKK2ZvcmVhY2ggbXkgJGQgKEBkaXJzKSB7CisgICAgaWYgKC1lICRkKSB7CisJJGRpcnR5ID0gMTsKKwl3YXJuICIkZCBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSFcbiI7CisgICAgfQorfQorCisjIC4uLiBxdWVyeSBzdGF0dXMgb2YgYWxsIGZpbGVzIHRoYXQgd2UgaGF2ZSBhIGRpcmVjdG9yeSBmb3IgYW5kIHBhcnNlIG91dHB1dCBvZiAnY3ZzIHN0YXR1cycgdG8gJWN2c3N0YXQuCitteSBAY2Fuc3RhdHVzZmlsZXM7Citmb3JlYWNoIG15ICRmIChAZmlsZXMpIHsKKyAgICBteSAkcGF0aCA9IGRpcm5hbWUgJGY7CisgICAgbmV4dCBpZiAoZ3JlcCB7ICRfIGVxICRwYXRoIH0gQGRpcnMpOworICAgIHB1c2ggQGNhbnN0YXR1c2ZpbGVzLCAkZjsKK30KKworbXkgJWN2c3N0YXQ7CitpZiAoQGNhbnN0YXR1c2ZpbGVzKSB7CisgICAgaWYgKCRvcHRfdSkgeworICAgICAgbXkgQHVwZGF0ZWQgPSB4YXJnc19zYWZlX3BpcGVfY2FwdHVyZShbQGN2cywgJ3VwZGF0ZSddLCBAY2Fuc3RhdHVzZmlsZXMpOworICAgICAgcHJpbnQgQHVwZGF0ZWQ7CisgICAgfQorICAgICMgImN2cyBzdGF0dXMiIHJlb3JkZXJzIHRoZSBwYXJhbWV0ZXJzLCBub3RhYmx5IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlCisgICAgIyBhcmd1bWVudHMgd2l0aCB0aGUgc2FtZSBiYXNlbmFtZS4gIFNvIGJlIHByZWNpc2UgaGVyZS4KKworICAgIG15ICVhZGRlZCA9IG1hcCB7ICRfID0+IDEgfSBAYWZpbGVzOworICAgIG15ICV0b2RvID0gbWFwIHsgJF8gPT4gMSB9IEBjYW5zdGF0dXNmaWxlczsKKworICAgIHdoaWxlICgldG9kbykgeworICAgICAgbXkgQGNhbnN0YXR1c2ZpbGVzMiA9ICgpOworICAgICAgbXkgJWZ1bGxuYW1lID0gKCk7CisgICAgICBmb3JlYWNoIG15ICRuYW1lIChrZXlzICV0b2RvKSB7CisJbXkgJGJhc2VuYW1lID0gYmFzZW5hbWUoJG5hbWUpOworCisJIyBDVlMgcmVwb3J0cyBmaWxlcyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzCisJIyAibm8gZmlsZSAkYmFzZW5hbWUiIGluIGl0cyAic3RhdHVzIiBvdXRwdXQsIHNvIHdlIHNob3VsZAorCSMgYW50aWNpcGF0ZSB0aGF0LiAgVG90YWxseSB1bmtub3duIGZpbGVzIHdpbGwgaGF2ZSBhIHN0YXR1cworCSMgIlVua25vd24iLiBIb3dldmVyLCBpZiB0aGV5IGV4aXN0IGluIHRoZSBBdHRpYywgdGhlaXIgc3RhdHVzCisJIyB3aWxsIGJlICJVcC10by1kYXRlIiAodGhpcyBtZWFucyB0aGV5IHdlcmUgYWRkZWQgb25jZSBidXQgaGF2ZQorCSMgYmVlbiByZW1vdmVkKS4KKwkkYmFzZW5hbWUgPSAibm8gZmlsZSAkYmFzZW5hbWUiIGlmICRhZGRlZHskYmFzZW5hbWV9OworCisJJGJhc2VuYW1lID1+IHMvXlxzKy8vOworCSRiYXNlbmFtZSA9fiBzL1xzKyQvLzsKKworCWlmICghZXhpc3RzKCRmdWxsbmFtZXskYmFzZW5hbWV9KSkgeworCSAgJGZ1bGxuYW1leyRiYXNlbmFtZX0gPSAkbmFtZTsKKwkgIHB1c2ggKEBjYW5zdGF0dXNmaWxlczIsICRuYW1lKTsKKwkgIGRlbGV0ZSgkdG9kb3skbmFtZX0pOworCX0KKyAgICAgIH0KKyAgICAgIG15IEBjdnNvdXRwdXQ7CisgICAgICBAY3Zzb3V0cHV0ID0geGFyZ3Nfc2FmZV9waXBlX2NhcHR1cmUoW0BjdnMsICdzdGF0dXMnXSwgQGNhbnN0YXR1c2ZpbGVzMik7CisgICAgICBmb3JlYWNoIG15ICRsIChAY3Zzb3V0cHV0KSB7CisJY2hvbXAgJGw7CisJbmV4dCB1bmxlc3MKKwkgICAgbXkgKCRmaWxlLCAkc3RhdHVzKSA9ICRsID1+IC9eRmlsZTpccysoLipcUylccytTdGF0dXM6ICguKikkLzsKKworCW15ICRmdWxsbmFtZSA9ICRmdWxsbmFtZXskZmlsZX07CisJcHJpbnQgU1RERVJSICJIdWg/IFN0YXR1cyAnJHN0YXR1cycgcmVwb3J0ZWQgZm9yIHVuZXhwZWN0ZWQgZmlsZSAnJGZpbGUnXG4iCisJICAgIHVubGVzcyBkZWZpbmVkICRmdWxsbmFtZTsKKworCSMgVGhpcyByZXNwb25zZSBtZWFucyB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBleGNlcHQgaW4KKwkjIENWUydzIGF0dGljLCBzbyBzZXQgdGhlIHN0YXR1cyBhY2NvcmRpbmdseQorCSRzdGF0dXMgPSAiSW4tYXR0aWMiCisJICAgIGlmICRmaWxlID1+IC9ebm8gZmlsZSAvCisJCSYmICRzdGF0dXMgZXEgJ1VwLXRvLWRhdGUnOworCisJJGN2c3N0YXR7JGZ1bGxuYW1leyRmaWxlfX0gPSAkc3RhdHVzCisJICAgIGlmIGRlZmluZWQgJGZ1bGxuYW1leyRmaWxlfTsKKyAgICAgIH0KKyAgICB9Cit9CisKKyMgLi4uIFZhbGlkYXRlIHRoYXQgbmV3IGZpbGVzIGhhdmUgdGhlIGNvcnJlY3Qgc3RhdHVzCitmb3JlYWNoIG15ICRmIChAYWZpbGVzKSB7CisgICAgbmV4dCB1bmxlc3MgZGVmaW5lZChteSAkc3RhdCA9ICRjdnNzdGF0eyRmfSk7CisKKyAgICAjIFRoaXMgbWVhbnMgdGhlIGZpbGUgaGFzIG5ldmVyIGJlZW4gc2VlbiBiZWZvcmUKKyAgICBuZXh0IGlmICRzdGF0IGVxICdVbmtub3duJzsKKworICAgICMgVGhpcyBtZWFucyB0aGUgZmlsZSBoYXMgYmVlbiBzZWVuIGJlZm9yZSBidXQgd2FzIHJlbW92ZWQKKyAgICBuZXh0IGlmICRzdGF0IGVxICdJbi1hdHRpYyc7CisKKyAgICAkZGlydHkgPSAxOworCXdhcm4gIkZpbGUgJGYgaXMgYWxyZWFkeSBrbm93biBpbiB5b3VyIENWUyBjaGVja291dCAtLSBwZXJoYXBzIGl0IGhhcyBiZWVuIGFkZGVkIGJ5IGFub3RoZXIgdXNlci4gT3IgdGhpcyBtYXkgaW5kaWNhdGUgdGhhdCBpdCBleGlzdHMgb24gYSBkaWZmZXJlbnQgYnJhbmNoLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB1c2UgLWYgdG8gZm9yY2UgdGhlIG1lcmdlLlxuIjsKKwl3YXJuICJTdGF0dXMgd2FzOiAkY3Zzc3RhdHskZn1cbiI7Cit9CisKKyMgLi4uIHZhbGlkYXRlIGtub3duIGZpbGVzLgorZm9yZWFjaCBteSAkZiAoQGZpbGVzKSB7CisgICAgbmV4dCBpZiBncmVwIHsgJF8gZXEgJGYgfSBAYWZpbGVzOworICAgICMgVE9ETzp3ZSBuZWVkIHRvIGhhbmRsZSByZW1vdmVkIGluIGN2cworICAgIHVubGVzcyAoZGVmaW5lZCAoJGN2c3N0YXR7JGZ9KSBhbmQgJGN2c3N0YXR7JGZ9IGVxICJVcC10by1kYXRlIikgeworCSRkaXJ0eSA9IDE7CisJd2FybiAiRmlsZSAkZiBub3QgdXAgdG8gZGF0ZSBidXQgaGFzIHN0YXR1cyAnJGN2c3N0YXR7JGZ9JyBpbiB5b3VyIENWUyBjaGVja291dCFcbiI7CisgICAgfQorCisgICAgIyBEZXBlbmRpbmcgb24gaG93IHlvdXIgR0lUIHRyZWUgZ290IGltcG9ydGVkIGZyb20gQ1ZTIHlvdSBtYXkKKyAgICAjIGhhdmUgYSBjb25mbGljdCBiZXR3ZWVuIGV4cGFuZGVkIGtleXdvcmRzIGluIHlvdXIgQ1ZTIHRyZWUgYW5kCisgICAgIyB1bmV4cGFuZGVkIGtleXdvcmRzIGluIHRoZSBwYXRjaCBhYm91dCB0byBiZSBhcHBsaWVkLgorICAgIGlmICgkb3B0X2spIHsKKwlteSAkb3JpZ19maWxlID0iJGYub3JpZyI7CisJcmVuYW1lICRmLCAkb3JpZ19maWxlOworCW9wZW4oRklMVEVSX0lOLCAiPCRvcmlnX2ZpbGUiKSBvciBkaWUgIkNhbm5vdCBvcGVuICRvcmlnX2ZpbGVcbiI7CisJb3BlbihGSUxURVJfT1VULCAiPiRmIikgb3IgZGllICJDYW5ub3Qgb3BlbiAkZlxuIjsKKwl3aGlsZSAoPEZJTFRFUl9JTj4pCisJeworCSAgICBteSAkbGluZSA9ICRfOworCSAgICAkbGluZSA9fiBzL1wkKFtBLVpdW2Etel0rKTpbXlwkXStcJC9cJCQxXCQvZzsKKwkgICAgcHJpbnQgRklMVEVSX09VVCAkbGluZTsKKwl9CisJY2xvc2UgRklMVEVSX0lOOworCWNsb3NlIEZJTFRFUl9PVVQ7CisgICAgfQorfQorCitpZiAoJGRpcnR5KSB7CisgICAgaWYgKCRvcHRfZikgewl3YXJuICJUaGUgdHJlZSBpcyBub3QgY2xlYW4gLS0gZm9yY2VkIG1lcmdlXG4iOworCSRkaXJ0eSA9IDA7CisgICAgfSBlbHNlIHsKKwlkaWUgIkV4aXRpbmc6IHlvdXIgQ1ZTIHRyZWUgaXMgbm90IGNsZWFuIGZvciB0aGlzIG1lcmdlLiI7CisgICAgfQorfQorCitwcmludCAiQXBwbHlpbmdcbiI7CitpZiAoJG9wdF9XKSB7CisgICAgc3lzdGVtKCJnaXQgY2hlY2tvdXQgLXEgJGNvbW1pdF4wIikgJiYgZGllICJjYW5ub3QgcGF0Y2giOworfSBlbHNlIHsKKyAgICBgR0lUX0RJUj0gZ2l0LWFwcGx5ICRjb250ZXh0IC0tc3VtbWFyeSAtLW51bXN0YXQgLS1hcHBseSA8LmN2c2V4cG9ydGNvbW1pdC5kaWZmYCB8fCBkaWUgImNhbm5vdCBwYXRjaCI7Cit9CisKK3ByaW50ICJQYXRjaCBhcHBsaWVkIHN1Y2Nlc3NmdWxseS4gQWRkaW5nIG5ldyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gQ1ZTXG4iOworbXkgJGRpcnR5cGF0Y2ggPSAwOworCisjCisjIFdlIGhhdmUgdG8gYWRkIHRoZSBkaXJlY3RvcmllcyBpbiBvcmRlciBvdGhlcndpc2Ugd2Ugd2lsbCBoYXZlCisjIHByb2JsZW1zIHdoZW4gd2UgdHJ5IGFuZCBhZGQgdGhlIHN1Yi1kaXJlY3Rvcnkgb2YgYSBkaXJlY3Rvcnkgd2UKKyMgaGF2ZSBub3QgYWRkZWQgeWV0LgorIworIyBMdWNraWx5IHRoaXMgaXMgZWFzeSB0byBkZWFsIHdpdGggYnkgc29ydGluZyB0aGUgZGlyZWN0b3JpZXMgYW5kCisjIGRlYWxpbmcgd2l0aCB0aGUgc2hvcnRlc3Qgb25lcyBmaXJzdC4KKyMKK0BkaXJzID0gc29ydCB7IGxlbmd0aCAkYSA8PT4gbGVuZ3RoICRifSBAZGlyczsKKworZm9yZWFjaCBteSAkZCAoQGRpcnMpIHsKKyAgICBpZiAoc3lzdGVtKEBjdnMsJ2FkZCcsJGQpKSB7CisJJGRpcnR5cGF0Y2ggPSAxOworCXdhcm4gIkZhaWxlZCB0byBjdnMgYWRkIGRpcmVjdG9yeSAkZCAtLSB5b3UgbWF5IG5lZWQgdG8gZG8gaXQgbWFudWFsbHkiOworICAgIH0KK30KKworZm9yZWFjaCBteSAkZiAoQGFmaWxlcykgeworICAgIGlmIChncmVwIHsgJF8gZXEgJGYgfSBAYmZpbGVzKSB7CisgICAgICBzeXN0ZW0oQGN2cywgJ2FkZCcsJy1rYicsJGYpOworICAgIH0gZWxzZSB7CisgICAgICBzeXN0ZW0oQGN2cywgJ2FkZCcsICRmKTsKKyAgICB9CisgICAgaWYgKCQ/KSB7CisJJGRpcnR5cGF0Y2ggPSAxOworCXdhcm4gIkZhaWxlZCB0byBjdnMgYWRkICRmIC0tIHlvdSBtYXkgbmVlZCB0byBkbyBpdCBtYW51YWxseSI7CisgICAgfQorfQorCitmb3JlYWNoIG15ICRmIChAZGZpbGVzKSB7CisgICAgc3lzdGVtKEBjdnMsICdybScsICctZicsICRmKTsKKyAgICBpZiAoJD8pIHsKKwkkZGlydHlwYXRjaCA9IDE7CisJd2FybiAiRmFpbGVkIHRvIGN2cyBybSAtZiAkZiAtLSB5b3UgbWF5IG5lZWQgdG8gZG8gaXQgbWFudWFsbHkiOworICAgIH0KK30KKworcHJpbnQgIkNvbW1pdCB0byBDVlNcbiI7CitwcmludCAiUGF0Y2ggdGl0bGUgKGZpcnN0IGNvbW1lbnQgbGluZSk6ICR0aXRsZVxuIjsKK215IEBjb21taXRmaWxlcyA9IG1hcCB7IHVubGVzcyAobS9ccy8pIHsgJ1wnJy4kXy4nXCcnOyB9IGVsc2UgeyAkXzsgfTsgfSAoQGZpbGVzKTsKK215ICRjbWQgPSBqb2luKCcgJywgQGN2cykuIiBjb21taXQgLUYgLm1zZyBAY29tbWl0ZmlsZXMiOworCitpZiAoJGRpcnR5cGF0Y2gpIHsKKyAgICBwcmludCAiTk9URTogT25lIG9yIG1vcmUgaHVua3MgZmFpbGVkIHRvIGFwcGx5IGNsZWFubHkuXG4iOworICAgIHByaW50ICJZb3UnbGwgbmVlZCB0byBhcHBseSB0aGUgcGF0Y2ggaW4gLmN2c2V4cG9ydGNvbW1pdC5kaWZmIG1hbnVhbGx5XG4iOworICAgIHByaW50ICJ1c2luZyBhIHBhdGNoIHByb2dyYW0uIEFmdGVyIGFwcGx5aW5nIHRoZSBwYXRjaCBhbmQgcmVzb2x2aW5nIHRoZVxuIjsKKyAgICBwcmludCAicHJvYmxlbXMgeW91IG1heSBjb21taXQgdXNpbmc6IjsKKyAgICBwcmludCAiXG4gICAgY2QgXCIkb3B0X3dcIiIgaWYgJG9wdF93OworICAgIHByaW50ICJcbiAgICAkY21kXG4iOworICAgIHByaW50ICJcbiAgICBnaXQgY2hlY2tvdXQgJGdvX2JhY2tfdG9cbiIgaWYgJGdvX2JhY2tfdG87CisgICAgcHJpbnQgIlxuIjsKKyAgICBleGl0KDEpOworfQorCitpZiAoJG9wdF9jKSB7CisgICAgcHJpbnQgIkF1dG9jb21taXRcbiAgJGNtZFxuIjsKKyAgICBwcmludCB4YXJnc19zYWZlX3BpcGVfY2FwdHVyZShbQGN2cywgJ2NvbW1pdCcsICctRicsICcubXNnJ10sIEBmaWxlcyk7CisgICAgaWYgKCQ/KSB7CisJZGllICJFeGl0aW5nOiBUaGUgY29tbWl0IGRpZCBub3Qgc3VjY2VlZCI7CisgICAgfQorICAgIHByaW50ICJDb21taXR0ZWQgc3VjY2Vzc2Z1bGx5IHRvIENWU1xuIjsKKyAgICAjIGNsZWFuIHVwCisgICAgdW5saW5rKCIubXNnIik7Cit9IGVsc2UgeworICAgIHByaW50ICJSZWFkeSBmb3IgeW91IHRvIGNvbW1pdCwganVzdCBydW46XG5cbiAgICRjbWRcbiI7Cit9CisKKyMgY2xlYW4gdXAKK3VubGluaygiLmN2c2V4cG9ydGNvbW1pdC5kaWZmIik7CisKK2lmICgkb3B0X1cpIHsKKyAgICBzeXN0ZW0oImdpdCBjaGVja291dCAkZ29fYmFja190byIpICYmIGRpZSAiY2Fubm90IG1vdmUgYmFjayB0byAkZ29fYmFja190byI7CisgICAgaWYgKCEoJGdvX2JhY2tfdG8gPX4gL15bMC05YS1mQS1GXXs0MH0kLykpIHsKKwlzeXN0ZW0oImdpdCBzeW1ib2xpYy1yZWYgSEVBRCAkZ29fYmFja190byIpICYmCisJICAgIGRpZSAiY2Fubm90IG1vdmUgYmFjayB0byAkZ29fYmFja190byI7CisgICAgfQorfQorCisjIENWUyB2ZXJzaW9uIDEuMTEueCBhbmQgMS4xMi54IHNsZWVwcyB0aGUgd3Jvbmcgd2F5IHRvIGVuc3VyZSB0aGUgdGltZXN0YW1wCisjIHVzZWQgYnkgQ1ZTIGFuZCB0aGUgb25lIHNldCBieSBzdWJzZXF1ZW5jZSBmaWxlIG1vZGlmaWNhdGlvbnMgYXJlIGRpZmZlcmVudC4KKyMgSWYgdGhleSBhcmUgbm90IGRpZmZlcmVudCBDVlMgd2lsbCBub3QgZGV0ZWN0IGNoYW5nZXMuCitzbGVlcCgxKTsKKworc3ViIHVzYWdlIHsKKwlwcmludCBTVERFUlIgPDxFTkQ7Cit1c2FnZTogR0lUX0RJUj0vcGF0aC90by8uZ2l0IGdpdCBjdnNleHBvcnRjb21taXQgWy1oXSBbLXBdIFstdl0gWy1jXSBbLWZdIFstdV0gWy1rXSBbLXcgY3Zzd29ya2Rpcl0gWy1tIG1zZ3ByZWZpeF0gWyBwYXJlbnQgXSBjb21taXQKK0VORAorCWV4aXQoMSk7Cit9CisKKyMgQW4gYWx0ZXJuYXRpdmUgdG8gYGNvbW1hbmRgIHRoYXQgYWxsb3dzIGlucHV0IHRvIGJlIHBhc3NlZCBhcyBhbiBhcnJheQorIyB0byB3b3JrIGFyb3VuZCBzaGVsbCBwcm9ibGVtcyB3aXRoIHdlaXJkIGNoYXJhY3RlcnMgaW4gYXJndW1lbnRzCisjIGlmIHRoZSBleGVjIHJldHVybnMgbm9uLXplcm8gd2UgZGllCitzdWIgc2FmZV9waXBlX2NhcHR1cmUgeworICAgIG15IEBvdXRwdXQ7CisgICAgaWYgKG15ICRwaWQgPSBvcGVuIG15ICRjaGlsZCwgJy18JykgeworCWJpbm1vZGUoJGNoaWxkLCAiOmNybGYiKTsKKwlAb3V0cHV0ID0gKDwkY2hpbGQ+KTsKKwljbG9zZSAkY2hpbGQgb3IgZGllIGpvaW4oJyAnLEBfKS4iOiAkISAkPyI7CisgICAgfSBlbHNlIHsKKwlleGVjKEBfKSBvciBkaWUgIiQhICQ/IjsgIyBleGVjKCkgY2FuIGZhaWwgdGhlIGV4ZWN1dGFibGUgY2FuJ3QgYmUgZm91bmQKKyAgICB9CisgICAgcmV0dXJuIHdhbnRhcnJheSA/IEBvdXRwdXQgOiBqb2luKCcnLEBvdXRwdXQpOworfQorCitzdWIgeGFyZ3Nfc2FmZV9waXBlX2NhcHR1cmUgeworCW15ICRNQVhfQVJHX0xFTkdUSCA9IDY1NTM2OworCW15ICRjbWQgPSBzaGlmdDsKKwlteSBAb3V0cHV0OworCW15ICRvdXRwdXQ7CisJd2hpbGUoQF8pIHsKKwkJbXkgQGFyZ3M7CisJCW15ICRsZW5ndGggPSAwOworCQl3aGlsZShAXyAmJiAkbGVuZ3RoIDwgJE1BWF9BUkdfTEVOR1RIKSB7CisJCQlwdXNoIEBhcmdzLCBzaGlmdDsKKwkJCSRsZW5ndGggKz0gbGVuZ3RoKCRhcmdzWyQjYXJnc10pOworCQl9CisJCWlmICh3YW50YXJyYXkpIHsKKwkJCXB1c2ggQG91dHB1dCwgc2FmZV9waXBlX2NhcHR1cmUoQCRjbWQsIEBhcmdzKTsKKwkJfQorCQllbHNlIHsKKwkJCSRvdXRwdXQgLj0gc2FmZV9waXBlX2NhcHR1cmUoQCRjbWQsIEBhcmdzKTsKKwkJfQorCX0KKwlyZXR1cm4gd2FudGFycmF5ID8gQG91dHB1dCA6ICRvdXRwdXQ7Cit9CmRpZmYgLS1naXQgYS9naXQtY3ZzaW1wb3J0LnBlcmwgYi9naXQtY3ZzaW1wb3J0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTA1N2YzOAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1jdnNpbXBvcnQucGVybApAQCAtMCwwICsxLDExODMgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIFRoaXMgdG9vbCBpcyBjb3B5cmlnaHQgKGMpIDIwMDUsIE1hdHRoaWFzIFVybGljaHMuCisjIEl0IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHbnUgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyMKKyMgVGhlIGJhc2ljIGlkZWEgaXMgdG8gYWdncmVnYXRlIENWUyBjaGVjay1pbnMgaW50byByZWxhdGVkIGNoYW5nZXMuCisjIEZvcnR1bmF0ZWx5LCAiY3ZzcHMiIGRvZXMgdGhhdCBmb3IgdXM7IGFsbCB3ZSBoYXZlIHRvIGRvIGlzIHRvIHBhcnNlCisjIGl0cyBvdXRwdXQuCisjCisjIENoZWNraW5nIG91dCB0aGUgZmlsZXMgaXMgZG9uZSBieSBhIHNpbmdsZSBsb25nLXJ1bm5pbmcgQ1ZTIGNvbm5lY3Rpb24KKyMgLyBzZXJ2ZXIgcHJvY2Vzcy4KKyMKKyMgVGhlIGhlYWQgcmV2aXNpb24gaXMgb24gYnJhbmNoICJvcmlnaW4iIGJ5IGRlZmF1bHQuCisjIFlvdSBjYW4gY2hhbmdlIHRoYXQgd2l0aCB0aGUgJy1vJyBvcHRpb24uCisKK3VzZSA1LjAwODsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgR2V0b3B0OjpMb25nOwordXNlIEZpbGU6OlNwZWM7Cit1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZmlsZSB0bXBuYW0pOwordXNlIEZpbGU6OlBhdGggcXcobWtwYXRoKTsKK3VzZSBGaWxlOjpCYXNlbmFtZSBxdyhiYXNlbmFtZSBkaXJuYW1lKTsKK3VzZSBUaW1lOjpMb2NhbDsKK3VzZSBJTzo6U29ja2V0OwordXNlIElPOjpQaXBlOwordXNlIFBPU0lYIHF3KHN0cmZ0aW1lIHR6c2V0IGR1cDIgRU5PRU5UKTsKK3VzZSBJUEM6Ok9wZW4yOwordXNlIEdpdCBxdyhnZXRfdHpfb2Zmc2V0KTsKKworJFNJR3snUElQRSd9PSJJR05PUkUiOworc2V0X3RpbWV6b25lKCdVVEMnKTsKKworb3VyICgkb3B0X2gsJG9wdF9vLCRvcHRfdiwkb3B0X2ssJG9wdF91LCRvcHRfZCwkb3B0X3AsJG9wdF9DLCRvcHRfeiwkb3B0X2ksJG9wdF9QLCAkb3B0X3MsJG9wdF9tLEBvcHRfTSwkb3B0X0EsJG9wdF9TLCRvcHRfTCwgJG9wdF9hLCAkb3B0X3IsICRvcHRfUik7CitteSAoJWNvbnZfYXV0aG9yX25hbWUsICVjb252X2F1dGhvcl9lbWFpbCwgJWNvbnZfYXV0aG9yX3R6KTsKKworc3ViIHVzYWdlKDskKSB7CisJbXkgJG1zZyA9IHNoaWZ0OworCXByaW50KFNUREVSUiAiRXJyb3I6ICRtc2dcbiIpIGlmICRtc2c7CisJcHJpbnQgU1RERVJSIDw8RU5EOwordXNhZ2U6IGdpdCBjdnNpbXBvcnQgICAgICMgZmV0Y2gvdXBkYXRlIEdJVCBmcm9tIENWUworICAgICAgIFstbyBicmFuY2gtZm9yLUhFQURdIFstaF0gWy12XSBbLWQgQ1ZTUk9PVF0gWy1BIGF1dGhvci1jb252LWZpbGVdCisgICAgICAgWy1wIG9wdHMtZm9yLWN2c3BzXSBbLVAgZmlsZV0gWy1DIEdJVF9yZXBvc2l0b3J5XSBbLXogZnV6el0gWy1pXSBbLWtdCisgICAgICAgWy11XSBbLXMgc3Vic3RdIFstYV0gWy1tXSBbLU0gcmVnZXhdIFstUyByZWdleF0gWy1MIGNvbW1pdGxpbWl0XQorICAgICAgIFstciByZW1vdGVdIFstUl0gW0NWU19tb2R1bGVdCitFTkQKKwlleGl0KDEpOworfQorCitzdWIgcmVhZF9hdXRob3JfaW5mbygkKSB7CisJbXkgKCRmaWxlKSA9IEBfOworCW15ICR1c2VyOworCW9wZW4gbXkgJGYsICc8JywgIiRmaWxlIiBvciBkaWUoIkZhaWxlZCB0byBvcGVuICRmaWxlOiAkIVxuIik7CisKKwl3aGlsZSAoPCRmPikgeworCQkjIEV4cGVjdGVkIGZvcm1hdCBpcyB0aGlzOgorCQkjICAgZXhvbj1BbmRyZWFzIEVyaWNzc29uIDxhZUBvcDUuc2U+CisJCWlmIChtL14oXFMrPylccyo9XHMqKC4rPylccyo8KC4rKT5ccyokLykgeworCQkJJHVzZXIgPSAkMTsKKwkJCSRjb252X2F1dGhvcl9uYW1leyR1c2VyfSA9ICQyOworCQkJJGNvbnZfYXV0aG9yX2VtYWlseyR1c2VyfSA9ICQzOworCQl9CisJCSMgb3Igd2l0aCBhbiBvcHRpb25hbCB0aW1lem9uZToKKwkJIyAgIHNwYXduPVNpbW9uIFBhd24gPHNwYXduQGZyb2ctcG9uZC5vcmc+IEFtZXJpY2EvQ2hpY2FnbworCQllbHNpZiAobS9eKFxTKz8pXHMqPVxzKiguKz8pXHMqPCguKyk+XHMqKFxTKz8pXHMqJC8pIHsKKwkJCSR1c2VyID0gJDE7CisJCQkkY29udl9hdXRob3JfbmFtZXskdXNlcn0gPSAkMjsKKwkJCSRjb252X2F1dGhvcl9lbWFpbHskdXNlcn0gPSAkMzsKKwkJCSRjb252X2F1dGhvcl90enskdXNlcn0gPSAkNDsKKwkJfQorCQkjIEhvd2V2ZXIsIHdlIGFsc28gcmVhZCBmcm9tIENWU1JPT1QvdXNlcnMgZm9ybWF0CisJCSMgdG8gZWFzZSBtaWdyYXRpb24uCisJCWVsc2lmICgvXihcdyspOihbJyJdPykoLis/KVwyXHMqJC8pIHsKKwkJCW15ICRtYXBwZWQ7CisJCQkoJHVzZXIsICRtYXBwZWQpID0gKCQxLCAkMyk7CisJCQlpZiAoJG1hcHBlZCA9fiAvXlxzKiguKj8pXHMqPCguKik+XHMqJC8pIHsKKwkJCQkkY29udl9hdXRob3JfbmFtZXskdXNlcn0gPSAkMTsKKwkJCQkkY29udl9hdXRob3JfZW1haWx7JHVzZXJ9ID0gJDI7CisJCQl9CisJCQllbHNpZiAoJG1hcHBlZCA9fiAvXjw/KC4qKT4/JC8pIHsKKwkJCQkkY29udl9hdXRob3JfbmFtZXskdXNlcn0gPSAkdXNlcjsKKwkJCQkkY29udl9hdXRob3JfZW1haWx7JHVzZXJ9ID0gJDE7CisJCQl9CisJCX0KKwkJIyBORUVEU1dPUks6IE1heWJlIHdhcm4gb24gdW5yZWNvZ25pemVkIGxpbmVzPworCX0KKwljbG9zZSAoJGYpOworfQorCitzdWIgd3JpdGVfYXV0aG9yX2luZm8oJCkgeworCW15ICgkZmlsZSkgPSBAXzsKKwlvcGVuIG15ICRmLCAnPicsICRmaWxlIG9yCisJICBkaWUoIkZhaWxlZCB0byBvcGVuICRmaWxlIGZvciB3cml0aW5nOiAkISIpOworCisJZm9yZWFjaCAoa2V5cyAlY29udl9hdXRob3JfbmFtZSkgeworCQlwcmludCAkZiAiJF89JGNvbnZfYXV0aG9yX25hbWV7JF99IDwkY29udl9hdXRob3JfZW1haWx7JF99PiI7CisJCXByaW50ICRmICIgJGNvbnZfYXV0aG9yX3R6eyRffSIgaWYgKCRjb252X2F1dGhvcl90enskX30pOworCQlwcmludCAkZiAiXG4iOworCX0KKwljbG9zZSAoJGYpOworfQorCisjIFZlcnNpb25zIG9mIHBlcmwgYmVmb3JlIDUuMTAuMCBtYXkgbm90IGF1dG9tYXRpY2FsbHkgY2hlY2sgJFRaIGVhY2gKKyMgdGltZSBsb2NhbHRpbWUgaXMgcnVuIChtb3N0IHBsYXRmb3JtcyB3aWxsIGRvIHNvIG9ubHkgdGhlIGZpcnN0IHRpbWUpLgorIyBXZSBjYW4gd29yayBhcm91bmQgdGhpcyBieSB1c2luZyB0enNldCgpIHRvIHVwZGF0ZSB0aGUgaW50ZXJuYWwKKyMgdmFyaWFibGUgd2hlbmV2ZXIgd2UgY2hhbmdlIHRoZSBlbnZpcm9ubWVudC4KK3N1YiBzZXRfdGltZXpvbmUgeworCSRFTlZ7VFp9ID0gc2hpZnQ7CisJdHpzZXQoKTsKK30KKworIyBjb252ZXJ0IGdldG9wdHMgc3BlY3MgZm9yIHVzZSBieSBnaXQgY29uZmlnCitteSAlbG9uZ21hcCA9ICgKKwknQTonID0+ICdhdXRob3JzLWZpbGUnLAorCSdNOicgPT4gJ21lcmdlLXJlZ2V4JywKKwknUDonID0+IHVuZGVmLAorCSdSJyA9PiAndHJhY2stcmV2aXNpb25zJywKKwknUzonID0+ICdpZ25vcmUtcGF0aHMnLAorKTsKKworc3ViIHJlYWRfcmVwb19jb25maWcgeworCSMgU3BsaXQgdGhlIHN0cmluZyBiZXR3ZWVuIGNoYXJhY3RlcnMsIHVubGVzcyB0aGVyZSBpcyBhICc6JworCSMgU28gImFiYzpkZSIgYmVjb21lcyBbImEiLCAiYiIsICJjOiIsICJkIiwgImUiXQorCW15IEBvcHRzID0gc3BsaXQoLyAqKD8hOikvLCBzaGlmdCk7CisJZm9yZWFjaCBteSAkbyAoQG9wdHMpIHsKKwkJbXkgJGtleSA9ICRvOworCQkka2V5ID1+IHMvOi8vZzsKKwkJbXkgJGFyZyA9ICdnaXQgY29uZmlnJzsKKwkJJGFyZyAuPSAnIC0tYm9vbCcgaWYgKCRvICF+IC86JC8pOworCQlteSAkY2tleSA9ICRrZXk7CisKKwkJaWYgKGV4aXN0cyAkbG9uZ21hcHskb30pIHsKKwkJCSMgQW4gdXBwZXJjYXNlIG9wdGlvbiBsaWtlIC1SIGNhbm5vdCBiZQorCQkJIyBleHByZXNzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24sIGFzIHRoZQorCQkJIyB2YXJpYWJsZSBuYW1lcyBhcmUgZG93bmNhc2VkLgorCQkJJGNrZXkgPSAkbG9uZ21hcHskb307CisJCQluZXh0IGlmICghIGRlZmluZWQgJGNrZXkpOworCQkJJGNrZXkgPX4gcy8tLy9nOworCQl9CisJCWNob21wKG15ICR0bXAgPSBgJGFyZyAtLWdldCBjdnNpbXBvcnQuJGNrZXlgKTsKKwkJaWYgKCR0bXAgJiYgISgkYXJnID1+IC8tLWJvb2wvICYmICR0bXAgZXEgJ2ZhbHNlJykpIHsKKwkJCW5vIHN0cmljdCAncmVmcyc7CisJCQlteSAkb3B0X25hbWUgPSAib3B0XyIgLiAka2V5OworCQkJaWYgKCEkJG9wdF9uYW1lKSB7CisJCQkJJCRvcHRfbmFtZSA9ICR0bXA7CisJCQl9CisJCX0KKwl9Cit9CisKK215ICRvcHRzID0gImhhaXZta3VvOmQ6cDpyOkM6ejpzOk06UDpBOlM6TDpSIjsKK3JlYWRfcmVwb19jb25maWcoJG9wdHMpOworR2V0b3B0OjpMb25nOjpDb25maWd1cmUoICdub19pZ25vcmVfY2FzZScsICdidW5kbGluZycgKTsKKworIyB0dXJuIHRoZSBHZXRvcHQ6OlN0ZCBzcGVjaWZpY2F0aW9uIGluIGEgR2V0b3B0OjpMb25nIG9uZSwKKyMgd2l0aCBzdXBwb3J0IGZvciBtdWx0aXBsZSAtTSBvcHRpb25zCitHZXRPcHRpb25zKCBtYXAgeyBzLzovPXMvOyAvTS8gPyAiJF9cQCIgOiAkXyB9IHNwbGl0KCAvKD8hOikvLCAkb3B0cyApICkKKyAgICBvciB1c2FnZSgpOwordXNhZ2UgaWYgJG9wdF9oOworCitpZiAoQEFSR1YgPT0gMCkgeworCQljaG9tcChteSAkbW9kdWxlID0gYGdpdCBjb25maWcgLS1nZXQgY3ZzaW1wb3J0Lm1vZHVsZWApOworCQlwdXNoKEBBUkdWLCAkbW9kdWxlKSBpZiAkPyA9PSAwOworfQorQEFSR1YgPD0gMSBvciB1c2FnZSgiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBDVlMgbW9kdWxlIik7CisKK2lmICgkb3B0X2QpIHsKKwkkRU5WeyJDVlNST09UIn0gPSAkb3B0X2Q7Cit9IGVsc2lmICgtZiAnQ1ZTL1Jvb3QnKSB7CisJb3BlbiBteSAkZiwgJzwnLCAnQ1ZTL1Jvb3QnIG9yIGRpZSAnRmFpbGVkIHRvIG9wZW4gQ1ZTL1Jvb3QnOworCSRvcHRfZCA9IDwkZj47CisJY2hvbXAgJG9wdF9kOworCWNsb3NlICRmOworCSRFTlZ7IkNWU1JPT1QifSA9ICRvcHRfZDsKK30gZWxzaWYgKCRFTlZ7IkNWU1JPT1QifSkgeworCSRvcHRfZCA9ICRFTlZ7IkNWU1JPT1QifTsKK30gZWxzZSB7CisJdXNhZ2UoIkNWU1JPT1QgbmVlZHMgdG8gYmUgc2V0Iik7Cit9Ciskb3B0X3MgfHw9ICItIjsKKyRvcHRfYSB8fD0gMDsKKworbXkgJGdpdF90cmVlID0gJG9wdF9DOworJGdpdF90cmVlIHx8PSAiLiI7CisKK215ICRyZW1vdGU7CitpZiAoZGVmaW5lZCAkb3B0X3IpIHsKKwkkcmVtb3RlID0gJ3JlZnMvcmVtb3Rlcy8nIC4gJG9wdF9yOworCSRvcHRfbyB8fD0gIm1hc3RlciI7Cit9IGVsc2UgeworCSRvcHRfbyB8fD0gIm9yaWdpbiI7CisJJHJlbW90ZSA9ICdyZWZzL2hlYWRzJzsKK30KKworbXkgJGN2c190cmVlOworaWYgKCQjQVJHViA9PSAwKSB7CisJJGN2c190cmVlID0gJEFSR1ZbMF07Cit9IGVsc2lmICgtZiAnQ1ZTL1JlcG9zaXRvcnknKSB7CisJb3BlbiBteSAkZiwgJzwnLCAnQ1ZTL1JlcG9zaXRvcnknIG9yCisJICAgIGRpZSAnRmFpbGVkIHRvIG9wZW4gQ1ZTL1JlcG9zaXRvcnknOworCSRjdnNfdHJlZSA9IDwkZj47CisJY2hvbXAgJGN2c190cmVlOworCWNsb3NlICRmOworfSBlbHNlIHsKKwl1c2FnZSgiQ1ZTIG1vZHVsZSBoYXMgdG8gYmUgc3BlY2lmaWVkIik7Cit9CisKK291ciBAbWVyZ2VyeCA9ICgpOworaWYgKCRvcHRfbSkgeworCUBtZXJnZXJ4ID0gKCBxci9cYig/OmZyb218b2Z8bWVyZ2V8bWVyZ2luZ3xtZXJnZWQpIChbLVx3XSspL2kgKTsKK30KK2lmIChAb3B0X00pIHsKKwlwdXNoIChAbWVyZ2VyeCwgbWFwIHsgcXIvJF8vIH0gQG9wdF9NKTsKK30KKworIyBSZW1lbWJlciBVVEMgb2Ygb3VyIHN0YXJ0aW5nIHRpbWUKKyMgd2UnbGwgd2FudCB0byBhdm9pZCBpbXBvcnRpbmcgY29tbWl0cworIyB0aGF0IGFyZSB0b28gcmVjZW50CitvdXIgJHN0YXJ0dGltZSA9IHRpbWUoKTsKKworc2VsZWN0KFNUREVSUik7ICR8PTE7IHNlbGVjdChTVERPVVQpOworCisKK3BhY2thZ2UgQ1ZTY29ubjsKKyMgQmFzaWMgQ1ZTIGRpYWxvZy4KKyMgV2UncmUgb25seSBpbnRlcmVzdGVkIGluIGNvbm5lY3RpbmcgYW5kIGRvd25sb2FkaW5nLCBzbyAuLi4KKwordXNlIEZpbGU6OlNwZWM7Cit1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZmlsZSk7Cit1c2UgUE9TSVggcXcoc3RyZnRpbWUgZHVwMik7CisKK3N1YiBuZXcgeworCW15ICgkd2hhdCwkcmVwbywkc3ViZGlyKSA9IEBfOworCSR3aGF0PXJlZigkd2hhdCkgaWYgcmVmKCR3aGF0KTsKKworCW15ICRzZWxmID0ge307CisJJHNlbGYtPnsnYnVmZmVyJ30gPSAiIjsKKwlibGVzcygkc2VsZiwkd2hhdCk7CisKKwkkcmVwbyA9fiBzIy8rJCMjOworCSRzZWxmLT57J2Z1bGxyZXAnfSA9ICRyZXBvOworCSRzZWxmLT5jb25uKCk7CisKKwkkc2VsZi0+eydzdWJkaXInfSA9ICRzdWJkaXI7CisJJHNlbGYtPnsnbGluZXMnfSA9IHVuZGVmOworCisJcmV0dXJuICRzZWxmOworfQorCitzdWIgZmluZF9wYXNzd29yZF9lbnRyeSB7CisJbXkgKCRjdnNwYXNzLCBAY3Zzcm9vdCkgPSBAXzsKKwlteSAoJGZpbGUsICRkZWxpbSkgPSBAJGN2c3Bhc3M7CisJbXkgJHBhc3M7CisJbG9jYWwgKCRfKTsKKworCWlmIChvcGVuKG15ICRmaCwgJGZpbGUpKSB7CisJCSMgOnBzZXJ2ZXI6Y3ZzQG1lYS50bXQudGVsZS5maTovY3Zzcm9vdC96bWFpbGVyIEFoPFoKKwkJQ1ZTUEFTU0ZJTEU6CisJCXdoaWxlICg8JGZoPikgeworCQkJY2hvbXA7CisJCQlzL15cL1xkK1xzKy8vOworCQkJbXkgKCR3LCAkcCkgPSBzcGxpdCgkZGVsaW0sJF8sMik7CisJCQlmb3IgbXkgJGN2c3Jvb3QgKEBjdnNyb290KSB7CisJCQkJaWYgKCR3IGVxICRjdnNyb290KSB7CisJCQkJCSRwYXNzID0gJHA7CisJCQkJCWxhc3QgQ1ZTUEFTU0ZJTEU7CisJCQkJfQorCQkJfQorCQl9CisJCWNsb3NlKCRmaCk7CisJfQorCXJldHVybiAkcGFzczsKK30KKworc3ViIGNvbm4geworCW15ICRzZWxmID0gc2hpZnQ7CisJbXkgJHJlcG8gPSAkc2VsZi0+eydmdWxscmVwJ307CisJaWYgKCRyZXBvID1+IHMvXjpwc2VydmVyKD86KFteOl0qKSk6KD86KC4qPykoPzo6KC4qPykpP0ApPyhbXjpcL10qKSg/OjooXGQqKSk/Ly8pIHsKKwkJbXkgKCRwYXJhbSwkdXNlciwkcGFzcywkc2VydiwkcG9ydCkgPSAoJDEsJDIsJDMsJDQsJDUpOworCisJCW15ICgkcHJveHlob3N0LCRwcm94eXBvcnQpOworCQlpZiAoJHBhcmFtICYmICgkcGFyYW0gPX4gbS9wcm94eT0oW147XSspLykpIHsKKwkJCSRwcm94eWhvc3QgPSAkMTsKKwkJCSMgRGVmYXVsdCBwcm94eXBvcnQsIGlmIG5vdCBzcGVjaWZpZWQsIGlzIDgwODAuCisJCQkkcHJveHlwb3J0ID0gODA4MDsKKwkJCWlmICgkRU5WeyJDVlNfUFJPWFlfUE9SVCJ9KSB7CisJCQkJJHByb3h5cG9ydCA9ICRFTlZ7IkNWU19QUk9YWV9QT1JUIn07CisJCQl9CisJCQlpZiAoJHBhcmFtID1+IG0vcHJveHlwb3J0PShbXjtdKykvKSB7CisJCQkJJHByb3h5cG9ydCA9ICQxOworCQkJfQorCQl9CisJCSRyZXBvIHx8PSAnLyc7CisKKwkJIyBpZiB1c2VybmFtZSBpcyBub3QgZXhwbGljaXQgaW4gQ1ZTUk9PVCwgdGhlbiB1c2UgY3VycmVudCB1c2VyLCBhcyBjdnMgd291bGQKKwkJJHVzZXI9KGdldGxvZ2luKCkgfHwgJEVOVnsnTE9HTkFNRSd9IHx8ICRFTlZ7J1VTRVInfSB8fCAiYW5vbnltb3VzIikgdW5sZXNzICR1c2VyOworCQlteSAkcnIyID0gIi0iOworCQl1bmxlc3MgKCRwb3J0KSB7CisJCQkkcnIyID0gIjpwc2VydmVyOiR1c2VyXEAkc2VydjokcmVwbyI7CisJCQkkcG9ydD0yNDAxOworCQl9CisJCW15ICRyciA9ICI6cHNlcnZlcjokdXNlclxAJHNlcnY6JHBvcnQkcmVwbyI7CisKKwkJaWYgKCRwYXNzKSB7CisJCQkkcGFzcyA9ICRzZWxmLT5fc2NyYW1ibGUoJHBhc3MpOworCQl9IGVsc2UgeworCQkJbXkgQGN2c3Bhc3MgPSAoWyRFTlZ7J0hPTUUnfS4iLy5jdnNwYXNzIiwgcXIvXHMvXSwKKwkJCQkgICAgICAgWyRFTlZ7J0hPTUUnfS4iLy5jdnMvY3ZzcGFzcyIsIHFyLz0vXSk7CisJCQlteSBAbG9jID0gKCk7CisJCQlmb3JlYWNoIG15ICRjdnNwYXNzIChAY3ZzcGFzcykgeworCQkJCW15ICRwID0gZmluZF9wYXNzd29yZF9lbnRyeSgkY3ZzcGFzcywgJHJyLCAkcnIyKTsKKwkJCQlpZiAoJHApIHsKKwkJCQkJcHVzaCBAbG9jLCAkY3ZzcGFzcy0+WzBdOworCQkJCQkkcGFzcyA9ICRwOworCQkJCX0KKwkJCX0KKworCQkJaWYgKDEgPCBAbG9jKSB7CisJCQkJZGllKCJNdWx0aXBsZSBjdnMgcGFzc3dvcmQgZmlsZXMgaGF2ZSAiLgorCQkJCSAgICAiZW50cmllcyBmb3IgQ1ZTUk9PVCAkb3B0X2Q6IEBsb2MiKTsKKwkJCX0gZWxzaWYgKCEkcGFzcykgeworCQkJCSRwYXNzID0gIkEiOworCQkJfQorCQl9CisKKwkJbXkgKCRzLCAkcmVwKTsKKwkJaWYgKCRwcm94eWhvc3QpIHsKKworCQkJIyBVc2UgYSBIVFRQIFByb3h5LiBPbmx5IHdvcmtzIGZvciBIVFRQIHByb3hpZXMgdGhhdAorCQkJIyBkb24ndCByZXF1aXJlIHVzZXIgYXV0aGVudGljYXRpb24KKwkJCSMKKwkJCSMgU2VlOiBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyODE3LnR4dAorCisJCQkkcyA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhQZWVySG9zdCA9PiAkcHJveHlob3N0LCBQZWVyUG9ydCA9PiAkcHJveHlwb3J0KTsKKwkJCWRpZSAiU29ja2V0IHRvICRwcm94eWhvc3Q6ICQhXG4iIHVubGVzcyBkZWZpbmVkICRzOworCQkJJHMtPndyaXRlKCJDT05ORUNUICRzZXJ2OiRwb3J0IEhUVFAvMS4xXHJcbkhvc3Q6ICRzZXJ2OiRwb3J0XHJcblxyXG4iKQorCSAgICAgICAgICAgICAgICAgICAgICAgIG9yIGRpZSAiV3JpdGUgdG8gJHByb3h5aG9zdDogJCFcbiI7CisJICAgICAgICAgICAgICAgICRzLT5mbHVzaCgpOworCisJCQkkcmVwID0gPCRzPjsKKworCQkJIyBUaGUgYW5zd2VyIHNob3VsZCBsb29rIGxpa2UgJ0hUVFAvMS54IDJ5eSAuLi4uJworCQkJaWYgKCEoJHJlcCA9fiBtI15IVFRQLzFcLi4gMlswLTldWzAtOV0jKSkgeworCQkJCWRpZSAiUHJveHkgY29ubmVjdDogJHJlcFxuIjsKKwkJCX0KKwkJCSMgU2tpcCB1cCB0byB0aGUgZW1wdHkgbGluZSBvZiB0aGUgcHJveHkgc2VydmVyIG91dHB1dAorCQkJIyBpbmNsdWRpbmcgdGhlIHJlc3BvbnNlIGhlYWRlcnMuCisJCQl3aGlsZSAoJHJlcCA9IDwkcz4pIHsKKwkJCQlsYXN0IGlmICghZGVmaW5lZCAkcmVwIHx8CisJCQkJCSAkcmVwIGVxICJcbiIgfHwKKwkJCQkJICRyZXAgZXEgIlxyXG4iKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCSRzID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KFBlZXJIb3N0ID0+ICRzZXJ2LCBQZWVyUG9ydCA9PiAkcG9ydCk7CisJCQlkaWUgIlNvY2tldCB0byAkc2VydjogJCFcbiIgdW5sZXNzIGRlZmluZWQgJHM7CisJCX0KKworCQkkcy0+d3JpdGUoIkJFR0lOIEFVVEggUkVRVUVTVFxuJHJlcG9cbiR1c2VyXG4kcGFzc1xuRU5EIEFVVEggUkVRVUVTVFxuIikKKwkJCW9yIGRpZSAiV3JpdGUgdG8gJHNlcnY6ICQhXG4iOworCQkkcy0+Zmx1c2goKTsKKworCQkkcmVwID0gPCRzPjsKKworCQlpZiAoJHJlcCBuZSAiSSBMT1ZFIFlPVVxuIikgeworCQkJJHJlcD0iPHVua25vd24+IiB1bmxlc3MgJHJlcDsKKwkJCWRpZSAiQXV0aFJlcGx5OiAkcmVwXG4iOworCQl9CisJCSRzZWxmLT57J3NvY2tldG8nfSA9ICRzOworCQkkc2VsZi0+eydzb2NrZXRpJ30gPSAkczsKKwl9IGVsc2UgeyAjIGxvY2FsIG9yIGV4dDogRm9yayBvZmYgb3VyIG93biBjdnMgc2VydmVyLgorCQlteSAkcHIgPSBJTzo6UGlwZS0+bmV3KCk7CisJCW15ICRwdyA9IElPOjpQaXBlLT5uZXcoKTsKKwkJbXkgJHBpZCA9IGZvcmsoKTsKKwkJZGllICJGb3JrOiAkIVxuIiB1bmxlc3MgZGVmaW5lZCAkcGlkOworCQlteSAkY3ZzID0gJ2N2cyc7CisJCSRjdnMgPSAkRU5We0NWU19TRVJWRVJ9IGlmIGV4aXN0cyAkRU5We0NWU19TRVJWRVJ9OworCQlteSAkcnNoID0gJ3JzaCc7CisJCSRyc2ggPSAkRU5We0NWU19SU0h9IGlmIGV4aXN0cyAkRU5We0NWU19SU0h9OworCisJCW15IEBjdnMgPSAoJGN2cywgJ3NlcnZlcicpOworCQlteSAoJGxvY2FsLCAkdXNlciwgJGhvc3QpOworCQkkbG9jYWwgPSAkcmVwbyA9fiBzLzpsb2NhbDovLzsKKwkJaWYgKCEkbG9jYWwpIHsKKwkJICAgICRyZXBvID1+IHMvOmV4dDovLzsKKwkJICAgICRsb2NhbCA9ICEoJHJlcG8gPX4gcy9eKD86KFteXEA6XSspXEApPyhbXjpdKyk6Ly8pOworCQkgICAgKCR1c2VyLCAkaG9zdCkgPSAoJDEsICQyKTsKKwkJfQorCQlpZiAoISRsb2NhbCkgeworCQkgICAgaWYgKCR1c2VyKSB7CisJCQl1bnNoaWZ0IEBjdnMsICRyc2gsICctbCcsICR1c2VyLCAkaG9zdDsKKwkJICAgIH0gZWxzZSB7CisJCQl1bnNoaWZ0IEBjdnMsICRyc2gsICRob3N0OworCQkgICAgfQorCQl9CisKKwkJdW5sZXNzICgkcGlkKSB7CisJCQkkcHItPndyaXRlcigpOworCQkJJHB3LT5yZWFkZXIoKTsKKwkJCWR1cDIoJHB3LT5maWxlbm8oKSwwKTsKKwkJCWR1cDIoJHByLT5maWxlbm8oKSwxKTsKKwkJCSRwci0+Y2xvc2UoKTsKKwkJCSRwdy0+Y2xvc2UoKTsKKwkJCWV4ZWMoQGN2cyk7CisJCX0KKwkJJHB3LT53cml0ZXIoKTsKKwkJJHByLT5yZWFkZXIoKTsKKwkJJHNlbGYtPnsnc29ja2V0byd9ID0gJHB3OworCQkkc2VsZi0+eydzb2NrZXRpJ30gPSAkcHI7CisJfQorCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIlJvb3QgJHJlcG9cbiIpOworCisJIyBUcmlhbCBhbmQgZXJyb3Igc2F5cyB0aGF0IHRoaXMgcHJvYmFibHkgaXMgdGhlIG1pbmltdW0gc2V0CisJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiVmFsaWQtcmVzcG9uc2VzIG9rIGVycm9yIFZhbGlkLXJlcXVlc3RzIE1vZGUgTSBNYmluYXJ5IEUgQ2hlY2tlZC1pbiBDcmVhdGVkIFVwZGF0ZWQgTWVyZ2VkIFJlbW92ZWRcbiIpOworCisJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgidmFsaWQtcmVxdWVzdHNcbiIpOworCSRzZWxmLT57J3NvY2tldG8nfS0+Zmx1c2goKTsKKworCW15ICRyZXA9JHNlbGYtPnJlYWRsaW5lKCk7CisJZGllICJGYWlsZWQgdG8gcmVhZCBmcm9tIHNlcnZlciIgdW5sZXNzIGRlZmluZWQgJHJlcDsKKwljaG9tcCgkcmVwKTsKKwlpZiAoJHJlcCAhfiBzL15WYWxpZC1yZXF1ZXN0c1xzKi8vKSB7CisJCSRyZXA9Ijx1bmtub3duPiIgdW5sZXNzICRyZXA7CisJCWRpZSAiRXhwZWN0ZWQgVmFsaWQtcmVxdWVzdHMgZnJvbSBzZXJ2ZXIsIGJ1dCBnb3Q6ICRyZXBcbiI7CisJfQorCWNob21wKG15ICRyZXM9JHNlbGYtPnJlYWRsaW5lKCkpOworCWRpZSAidmFsaWRSZXBseTogJHJlc1xuIiBpZiAkcmVzIG5lICJvayI7CisKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJVc2VVbmNoYW5nZWRcbiIpIGlmICRyZXAgPX4gL1xiVXNlVW5jaGFuZ2VkXGIvOworCSRzZWxmLT57J3JlcG8nfSA9ICRyZXBvOworfQorCitzdWIgcmVhZGxpbmUgeworCW15ICgkc2VsZikgPSBAXzsKKwlyZXR1cm4gJHNlbGYtPnsnc29ja2V0aSd9LT5nZXRsaW5lKCk7Cit9CisKK3N1YiBfZmlsZSB7CisJIyBSZXF1ZXN0IGEgZmlsZSB3aXRoIGEgZ2l2ZW4gcmV2aXNpb24uCisJIyBUcmlhbCBhbmQgZXJyb3Igc2F5cyB0aGlzIGlzIGEgZ29vZCB3YXkgdG8gZG8gaXQuIDotLworCW15ICgkc2VsZiwkZm4sJHJldikgPSBAXzsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJBcmd1bWVudCAtTlxuIikgb3IgcmV0dXJuIHVuZGVmOworCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIkFyZ3VtZW50IC1QXG4iKSBvciByZXR1cm4gdW5kZWY7CisJIyAta2s6IExpbnVzJyB2ZXJzaW9uIGRvZXNuJ3QgdXNlIGl0IC0gZGVmYXVsdHMgdG8gb2ZmCisJaWYgKCRvcHRfaykgeworCSAgICAkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJBcmd1bWVudCAta2tcbiIpIG9yIHJldHVybiB1bmRlZjsKKwl9CisJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiQXJndW1lbnQgLXJcbiIpIG9yIHJldHVybiB1bmRlZjsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJBcmd1bWVudCAkcmV2XG4iKSBvciByZXR1cm4gdW5kZWY7CisJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiQXJndW1lbnQgLS1cbiIpIG9yIHJldHVybiB1bmRlZjsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJBcmd1bWVudCAkc2VsZi0+eydzdWJkaXInfS8kZm5cbiIpIG9yIHJldHVybiB1bmRlZjsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJEaXJlY3RvcnkgLlxuIikgb3IgcmV0dXJuIHVuZGVmOworCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIiRzZWxmLT57J3JlcG8nfVxuIikgb3IgcmV0dXJuIHVuZGVmOworCSMgJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiU3RpY2t5IFQxLjBcbiIpIG9yIHJldHVybiB1bmRlZjsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJjb1xuIikgb3IgcmV0dXJuIHVuZGVmOworCSRzZWxmLT57J3NvY2tldG8nfS0+Zmx1c2goKSBvciByZXR1cm4gdW5kZWY7CisJJHNlbGYtPnsnbGluZXMnfSA9IDA7CisJcmV0dXJuIDE7Cit9CitzdWIgX2xpbmUgeworCSMgUmVhZCBhIGxpbmUgZnJvbSB0aGUgc2VydmVyLgorCSMgLi4uIGV4Y2VwdCB0aGF0ICdsaW5lJyBtYXkgYmUgYW4gZW50aXJlIGZpbGUuIDstKQorCW15ICgkc2VsZiwgJGZoKSA9IEBfOworCWRpZSAiTm90IGluIGxpbmVzIiB1bmxlc3MgZGVmaW5lZCAkc2VsZi0+eydsaW5lcyd9OworCisJbXkgJGxpbmU7CisJbXkgJHJlcz0wOworCXdoaWxlIChkZWZpbmVkKCRsaW5lID0gJHNlbGYtPnJlYWRsaW5lKCkpKSB7CisJCSMgTSBVIGdudXBnLWN2cy1yZXAvQVVUSE9SUworCQkjIFVwZGF0ZWQgZ251cGctY3ZzLXJlcC8KKwkJIyAvZGF0ZW4vc3JjL3JzeW5jL2dudXBnLWN2cy1yZXAvQVVUSE9SUworCQkjIC9BVVRIT1JTLzEuMS8vL1QxLjEKKwkJIyB1PXJ3LGc9cncsbz1ydworCQkjIDAKKwkJIyBvaworCisJCWlmICgkbGluZSA9fiBzL14oPzpDcmVhdGVkfFVwZGF0ZWQpIC8vKSB7CisJCQkkbGluZSA9ICRzZWxmLT5yZWFkbGluZSgpOyAjIHBhdGgKKwkJCSRsaW5lID0gJHNlbGYtPnJlYWRsaW5lKCk7ICMgRW50cmllcyBsaW5lCisJCQlteSAkbW9kZSA9ICRzZWxmLT5yZWFkbGluZSgpOyBjaG9tcCAkbW9kZTsKKwkJCSRzZWxmLT57J21vZGUnfSA9ICRtb2RlOworCQkJZGVmaW5lZCAobXkgJGNudCA9ICRzZWxmLT5yZWFkbGluZSgpKQorCQkJCW9yIGRpZSAiRU9GIGZyb20gc2VydmVyIGFmdGVyICdDaGFuZ2VkJ1xuIjsKKwkJCWNob21wICRjbnQ7CisJCQlkaWUgIkR1aDogRmlsZXNpemUgJGNudCIgaWYgJGNudCAhfiAvXlxkKyQvOworCQkJJGxpbmU9IiI7CisJCQkkcmVzID0gJHNlbGYtPl9mZXRjaGZpbGUoJGZoLCAkY250KTsKKwkJfSBlbHNpZiAoJGxpbmUgPX4gcy9eIC8vKSB7CisJCQlwcmludCAkZmggJGxpbmU7CisJCQkkcmVzICs9IGxlbmd0aCgkbGluZSk7CisJCX0gZWxzaWYgKCRsaW5lID1+IC9eTVxiLykgeworCQkJIyBvdXRwdXQsIGRvIG5vdGhpbmcKKwkJfSBlbHNpZiAoJGxpbmUgPX4gL15NYmluYXJ5XGIvKSB7CisJCQlteSAkY250OworCQkJZGllICJFT0YgZnJvbSBzZXJ2ZXIgYWZ0ZXIgJ01iaW5hcnknIiB1bmxlc3MgZGVmaW5lZCAoJGNudCA9ICRzZWxmLT5yZWFkbGluZSgpKTsKKwkJCWNob21wICRjbnQ7CisJCQlkaWUgIkR1aDogTWJpbmFyeSAkY250IiBpZiAkY250ICF+IC9eXGQrJC8gb3IgJGNudDwxOworCQkJJGxpbmU9IiI7CisJCQkkcmVzICs9ICRzZWxmLT5fZmV0Y2hmaWxlKCRmaCwgJGNudCk7CisJCX0gZWxzZSB7CisJCQljaG9tcCAkbGluZTsKKwkJCWlmICgkbGluZSBlcSAib2siKSB7CisJCQkJIyBwcmludCBTVERFUlIgIlM6IG9rICgiLmxlbmd0aCgkcmVzKS4iKVxuIjsKKwkJCQlyZXR1cm4gJHJlczsKKwkJCX0gZWxzaWYgKCRsaW5lID1+IHMvXkUgLy8pIHsKKwkJCQkjIHByaW50IFNUREVSUiAiUzogJGxpbmVcbiI7CisJCQl9IGVsc2lmICgkbGluZSA9fiAvXihSZW1vdmUtZW50cnl8UmVtb3ZlZCkgL2kpIHsKKwkJCQkkbGluZSA9ICRzZWxmLT5yZWFkbGluZSgpOyAjIGZpbGVuYW1lCisJCQkJJGxpbmUgPSAkc2VsZi0+cmVhZGxpbmUoKTsgIyBPSworCQkJCWNob21wICRsaW5lOworCQkJCWRpZSAiVW5rbm93bjogJGxpbmUiIGlmICRsaW5lIG5lICJvayI7CisJCQkJcmV0dXJuIC0xOworCQkJfSBlbHNlIHsKKwkJCQlkaWUgIlVua25vd246ICRsaW5lXG4iOworCQkJfQorCQl9CisJfQorCXJldHVybiB1bmRlZjsKK30KK3N1YiBmaWxlIHsKKwlteSAoJHNlbGYsJGZuLCRyZXYpID0gQF87CisJbXkgJHJlczsKKworCW15ICgkZmgsICRuYW1lKSA9IHRlbXBmaWxlKCdnaXRjdnMuWFhYWFhYJywKKwkJICAgIERJUiA9PiBGaWxlOjpTcGVjLT50bXBkaXIoKSwgVU5MSU5LID0+IDEpOworCisJJHNlbGYtPl9maWxlKCRmbiwkcmV2KSBhbmQgJHJlcyA9ICRzZWxmLT5fbGluZSgkZmgpOworCisJaWYgKCFkZWZpbmVkICRyZXMpIHsKKwkgICAgcHJpbnQgU1RERVJSICJTZXJ2ZXIgaGFzIGdvbmUgYXdheSB3aGlsZSBmZXRjaGluZyAkZm4gJHJldiwgcmV0cnlpbmcuLi5cbiI7CisJICAgIHRydW5jYXRlICRmaCwgMDsKKwkgICAgJHNlbGYtPmNvbm4oKTsKKwkgICAgJHNlbGYtPl9maWxlKCRmbiwkcmV2KSBvciBkaWUgIk5vIGZpbGUgY29tbWFuZCBzZW5kIjsKKwkgICAgJHJlcyA9ICRzZWxmLT5fbGluZSgkZmgpOworCSAgICBkaWUgIlJldHJ5IGZhaWxlZCIgdW5sZXNzIGRlZmluZWQgJHJlczsKKwl9CisJY2xvc2UgKCRmaCk7CisKKwlyZXR1cm4gKCRuYW1lLCAkcmVzKTsKK30KK3N1YiBfZmV0Y2hmaWxlIHsKKwlteSAoJHNlbGYsICRmaCwgJGNudCkgPSBAXzsKKwlteSAkcmVzID0gMDsKKwlteSAkYnVmc2l6ZSA9IDEwMjQgKiAxMDI0OworCXdoaWxlICgkY250KSB7CisJICAgIGlmICgkYnVmc2l6ZSA+ICRjbnQpIHsKKwkJJGJ1ZnNpemUgPSAkY250OworCSAgICB9CisJICAgIG15ICRidWY7CisJICAgIG15ICRudW0gPSAkc2VsZi0+eydzb2NrZXRpJ30tPnJlYWQoJGJ1ZiwkYnVmc2l6ZSk7CisJICAgIGRpZSAiU2VydmVyOiBGaWxlc2l6ZSAkY250OiAkbnVtOiAkIVxuIiBpZiBub3QgZGVmaW5lZCAkbnVtIG9yICRudW08PTA7CisJICAgIHByaW50ICRmaCAkYnVmOworCSAgICAkcmVzICs9ICRudW07CisJICAgICRjbnQgLT0gJG51bTsKKwl9CisJcmV0dXJuICRyZXM7Cit9CisKK3N1YiBfc2NyYW1ibGUgeworCW15ICgkc2VsZiwgJHBhc3MpID0gQF87CisJbXkgJHNjcmFtYmxlZCA9ICJBIjsKKworCXJldHVybiAkc2NyYW1ibGVkIHVubGVzcyAkcGFzczsKKworCW15ICRwYXNzX2xlbiA9IGxlbmd0aCgkcGFzcyk7CisJbXkgQHBhc3NfYXJyID0gc3BsaXQoIiIsICRwYXNzKTsKKwlteSAkaTsKKworCSMgZnJvbSBjdnMvc3JjL3NjcmFtYmxlLmMKKwlteSBAc2hpZnRzID0gKAorCQkgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCisJCSAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwKKwkJMTE0LDEyMCwgNTMsIDc5LCA5NiwxMDksIDcyLDEwOCwgNzAsIDY0LCA3NiwgNjcsMTE2LCA3NCwgNjgsIDg3LAorCQkxMTEsIDUyLCA3NSwxMTksIDQ5LCAzNCwgODIsIDgxLCA5NSwgNjUsMTEyLCA4NiwxMTgsMTEwLDEyMiwxMDUsCisJCSA0MSwgNTcsIDgzLCA0MywgNDYsMTAyLCA0MCwgODksIDM4LDEwMywgNDUsIDUwLCA0MiwxMjMsIDkxLCAzNSwKKwkJMTI1LCA1NSwgNTQsIDY2LDEyNCwxMjYsIDU5LCA0NywgOTIsIDcxLDExNSwgNzgsIDg4LDEwNywxMDYsIDU2LAorCQkgMzYsMTIxLDExNywxMDQsMTAxLDEwMCwgNjksIDczLCA5OSwgNjMsIDk0LCA5MywgMzksIDM3LCA2MSwgNDgsCisJCSA1OCwxMTMsIDMyLCA5MCwgNDQsIDk4LCA2MCwgNTEsIDMzLCA5NywgNjIsIDc3LCA4NCwgODAsIDg1LDIyMywKKwkJMjI1LDIxNiwxODcsMTY2LDIyOSwxODksMjIyLDE4OCwxNDEsMjQ5LDE0OCwyMDAsMTg0LDEzNiwyNDgsMTkwLAorCQkxOTksMTcwLDE4MSwyMDQsMTM4LDIzMiwyMTgsMTgzLDI1NSwyMzQsMjIwLDI0NywyMTMsMjAzLDIyNiwxOTMsCisJCTE3NCwxNzIsMjI4LDI1MiwyMTcsMjAxLDEzMSwyMzAsMTk3LDIxMSwxNDUsMjM4LDE2MSwxNzksMTYwLDIxMiwKKwkJMjA3LDIyMSwyNTQsMTczLDIwMiwxNDYsMjI0LDE1MSwxNDAsMTk2LDIwNSwxMzAsMTM1LDEzMywxNDMsMjQ2LAorCQkxOTIsMTU5LDI0NCwyMzksMTg1LDE2OCwyMTUsMTQ0LDEzOSwxNjUsMTgwLDE1NywxNDcsMTg2LDIxNCwxNzYsCisJCTIyNywyMzEsMjE5LDE2OSwxNzUsMTU2LDIwNiwxOTgsMTI5LDE2NCwxNTAsMjEwLDE1NCwxNzcsMTM0LDEyNywKKwkJMTgyLDEyOCwxNTgsMjA4LDE2MiwxMzIsMTY3LDIwOSwxNDksMjQxLDE1MywyNTEsMjM3LDIzNiwxNzEsMTk1LAorCQkyNDMsMjMzLDI1MywyNDAsMTk0LDI1MCwxOTEsMTU1LDE0MiwxMzcsMjQ1LDIzNSwxNjMsMjQyLDE3OCwxNTIKKwkpOworCisJZm9yICgkaSA9IDA7ICRpIDwgJHBhc3NfbGVuOyAkaSsrKSB7CisJCSRzY3JhbWJsZWQgLj0gcGFjaygiQyIsICRzaGlmdHNbb3JkKCRwYXNzX2FyclskaV0pXSk7CisJfQorCisJcmV0dXJuICRzY3JhbWJsZWQ7Cit9CisKK3BhY2thZ2UgbWFpbjsKKworbXkgJGN2cyA9IENWU2Nvbm4tPm5ldygkb3B0X2QsICRjdnNfdHJlZSk7CisKKworc3ViIHBkYXRlKCQpIHsKKwlteSAoJGQpID0gQF87CisJbSMoXGR7Miw0fSkvKFxkXGQpLyhcZFxkKVxzKFxkXGQpOihcZFxkKSg/OjooXGRcZCkpPyMKKwkJb3IgZGllICJVbnBhcnNhYmxlIGRhdGU6ICRkXG4iOworCW15ICR5PSQxOworCSR5Kz0xMDAgaWYgJHk8NzA7CisJJHkrPTE5MDAgaWYgJHk8MTAwMDsKKwlyZXR1cm4gdGltZWdtKCQ2fHwwLCQ1LCQ0LCQzLCQyLTEsJHkpOworfQorCitzdWIgcG1vZGUoJCkgeworCW15ICgkbW9kZSkgPSBAXzsKKwlteSAkbSA9IDA7CisJbXkgJG1tID0gMDsKKwlteSAkdW0gPSAwOworCWZvciBteSAkeChzcGxpdCgvLywkbW9kZSkpIHsKKwkJaWYgKCR4IGVxICIsIikgeworCQkJJG0gfD0gJG1tJiR1bTsKKwkJCSRtbSA9IDA7CisJCQkkdW0gPSAwOworCQl9IGVsc2lmICgkeCBlcSAidSIpIHsgJHVtIHw9IDA3MDA7CisJCX0gZWxzaWYgKCR4IGVxICJnIikgeyAkdW0gfD0gMDA3MDsKKwkJfSBlbHNpZiAoJHggZXEgIm8iKSB7ICR1bSB8PSAwMDA3OworCQl9IGVsc2lmICgkeCBlcSAiciIpIHsgJG1tIHw9IDA0NDQ7CisJCX0gZWxzaWYgKCR4IGVxICJ3IikgeyAkbW0gfD0gMDIyMjsKKwkJfSBlbHNpZiAoJHggZXEgIngiKSB7ICRtbSB8PSAwMTExOworCQl9IGVsc2lmICgkeCBlcSAiPSIpIHsgIyBkbyBub3RoaW5nCisJCX0gZWxzZSB7IGRpZSAiVW5rbm93biBtb2RlOiAkbW9kZVxuIjsKKwkJfQorCX0KKwkkbSB8PSAkbW0mJHVtOworCXJldHVybiAkbTsKK30KKworc3ViIGdldHdkKCkgeworCW15ICRwd2QgPSBgcHdkYDsKKwljaG9tcCAkcHdkOworCXJldHVybiAkcHdkOworfQorCitzdWIgaXNfc2hhMSB7CisJbXkgJHMgPSBzaGlmdDsKKwlyZXR1cm4gJHMgPX4gL15bYS1mMC05XXs0MH0kLzsKK30KKworc3ViIGdldF9oZWFkcmVmICgkKSB7CisJbXkgJG5hbWUgPSBzaGlmdDsKKwkkbmFtZSA9fiBzLycvJ1xcJycvZzsKKwlteSAkciA9IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICckbmFtZScgMj4vZGV2L251bGxgOworCXJldHVybiB1bmRlZiB1bmxlc3MgJD8gPT0gMDsKKwljaG9tcCAkcjsKKwlyZXR1cm4gJHI7Cit9CisKK215ICR1c2VyX2ZpbGVuYW1lX3ByZXBlbmQgPSAnJzsKK3N1YiBtdW5nZV91c2VyX2ZpbGVuYW1lIHsKKwlteSAkbmFtZSA9IHNoaWZ0OworCXJldHVybiBGaWxlOjpTcGVjLT5maWxlX25hbWVfaXNfYWJzb2x1dGUoJG5hbWUpID8KKwkJJG5hbWUgOgorCQkkdXNlcl9maWxlbmFtZV9wcmVwZW5kIC4gJG5hbWU7Cit9CisKKy1kICRnaXRfdHJlZQorCW9yIG1rZGlyKCRnaXRfdHJlZSwwNzc3KQorCW9yIGRpZSAiQ291bGQgbm90IGNyZWF0ZSAkZ2l0X3RyZWU6ICQhIjsKK2lmICgkZ2l0X3RyZWUgbmUgJy4nKSB7CisJJHVzZXJfZmlsZW5hbWVfcHJlcGVuZCA9IGdldHdkKCkgLiAnLyc7CisJY2hkaXIoJGdpdF90cmVlKTsKK30KKworbXkgJGxhc3RfYnJhbmNoID0gIiI7CitteSAkb3JpZ19icmFuY2ggPSAiIjsKK215ICVicmFuY2hfZGF0ZTsKK215ICR0aXBfYXRfc3RhcnQgPSB1bmRlZjsKKworbXkgJGdpdF9kaXIgPSAkRU5WeyJHSVRfRElSIn0gfHwgIi5naXQiOworJGdpdF9kaXIgPSBnZXR3ZCgpLiIvIi4kZ2l0X2RpciB1bmxlc3MgJGdpdF9kaXIgPX4gbSNeLyM7CiskRU5WeyJHSVRfRElSIn0gPSAkZ2l0X2RpcjsKK215ICRvcmlnX2dpdF9pbmRleDsKKyRvcmlnX2dpdF9pbmRleCA9ICRFTlZ7R0lUX0lOREVYX0ZJTEV9IGlmIGV4aXN0cyAkRU5We0dJVF9JTkRFWF9GSUxFfTsKKworbXkgJWluZGV4OyAjIGhvbGRzIGZpbGVuYW1lcyBvZiBvbmUgaW5kZXggcGVyIGJyYW5jaAorCit1bmxlc3MgKC1kICRnaXRfZGlyKSB7CisJc3lzdGVtKHF3KGdpdCBpbml0KSk7CisJZGllICJDYW5ub3QgaW5pdCB0aGUgR0lUIGRiIGF0ICRnaXRfdHJlZTogJD9cbiIgaWYgJD87CisJc3lzdGVtKHF3KGdpdCByZWFkLXRyZWUgLS1lbXB0eSkpOworCWRpZSAiQ2Fubm90IGluaXQgYW4gZW1wdHkgdHJlZTogJD9cbiIgaWYgJD87CisKKwkkbGFzdF9icmFuY2ggPSAkb3B0X287CisJJG9yaWdfYnJhbmNoID0gIiI7Cit9IGVsc2UgeworCW9wZW4oRiwgIi18IiwgcXcoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSkgb3IKKwkJZGllICJDYW5ub3QgcnVuIGdpdCBzeW1ib2xpYy1yZWY6ICQhXG4iOworCWNob21wICgkbGFzdF9icmFuY2ggPSA8Rj4pOworCSRsYXN0X2JyYW5jaCA9IGJhc2VuYW1lKCRsYXN0X2JyYW5jaCk7CisJY2xvc2UoRik7CisJdW5sZXNzICgkbGFzdF9icmFuY2gpIHsKKwkJd2FybiAiQ2Fubm90IHJlYWQgdGhlIGxhc3QgYnJhbmNoIG5hbWU6ICQhIC0tIGFzc3VtaW5nICdtYXN0ZXInXG4iOworCQkkbGFzdF9icmFuY2ggPSAibWFzdGVyIjsKKwl9CisJJG9yaWdfYnJhbmNoID0gJGxhc3RfYnJhbmNoOworCSR0aXBfYXRfc3RhcnQgPSBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEYDsKKworCSMgR2V0IHRoZSBsYXN0IGltcG9ydCB0aW1lc3RhbXBzCisJbXkgJGZtdCA9ICcoJHJlZiwgJGF1dGhvcikgPSAoJShyZWZuYW1lKSwgJShhdXRob3IpKTsnOworCW15IEBjbWQgPSAoJ2dpdCcsICdmb3ItZWFjaC1yZWYnLCAnLS1wZXJsJywgIi0tZm9ybWF0PSRmbXQiLCAkcmVtb3RlKTsKKwlvcGVuKEgsICItfCIsIEBjbWQpIG9yIGRpZSAiQ2Fubm90IHJ1biBnaXQgZm9yLWVhY2gtcmVmOiAkIVxuIjsKKwl3aGlsZSAoZGVmaW5lZChteSAkZW50cnkgPSA8SD4pKSB7CisJCW15ICgkcmVmLCAkYXV0aG9yKTsKKwkJZXZhbCgkZW50cnkpIHx8IGRpZSAiY2Fubm90IGV2YWwgcmVmcyBsaXN0OiAkQCI7CisJCW15ICgkaGVhZCkgPSAoJHJlZiA9fiBtfF4kcmVtb3RlLyguKil8KTsKKwkJJGF1dGhvciA9fiAvXi4qXHMoXGQrKVxzWy0rXVxkezR9JC87CisJCSRicmFuY2hfZGF0ZXskaGVhZH0gPSAkMTsKKwl9CisJY2xvc2UoSCk7CisgICAgICAgIGlmICghZXhpc3RzICRicmFuY2hfZGF0ZXskb3B0X299KSB7CisJCWRpZSAiQnJhbmNoICckb3B0X28nIGRvZXMgbm90IGV4aXN0LlxuIi4KKwkJICAgICAgICJFaXRoZXIgdXNlIHRoZSBjb3JyZWN0ICctbyBicmFuY2gnIG9wdGlvbixcbiIuCisJCSAgICAgICAib3IgaW1wb3J0IHRvIGEgbmV3IHJlcG9zaXRvcnkuXG4iOworICAgICAgICB9Cit9CisKKy1kICRnaXRfZGlyCisJb3IgZGllICJDb3VsZCBub3QgY3JlYXRlIGdpdCBzdWJkaXIgKCRnaXRfZGlyKS5cbiI7CisKKyMgbm93IHdlIHJlYWQgKGFuZCBwb3NzaWJseSBzYXZlKSBhdXRob3ItaW5mbyBhcyB3ZWxsCistZiAiJGdpdF9kaXIvY3ZzLWF1dGhvcnMiIGFuZAorICByZWFkX2F1dGhvcl9pbmZvKCIkZ2l0X2Rpci9jdnMtYXV0aG9ycyIpOworaWYgKCRvcHRfQSkgeworCXJlYWRfYXV0aG9yX2luZm8obXVuZ2VfdXNlcl9maWxlbmFtZSgkb3B0X0EpKTsKKwl3cml0ZV9hdXRob3JfaW5mbygiJGdpdF9kaXIvY3ZzLWF1dGhvcnMiKTsKK30KKworIyBvcGVuIC5naXQvY3ZzLXJldmlzaW9ucywgaWYgcmVxdWVzdGVkCitvcGVuIG15ICRyZXZpc2lvbl9tYXAsICc+PicsICIkZ2l0X2Rpci9jdnMtcmV2aXNpb25zIgorICAgIG9yIGRpZSAiQ2FuJ3Qgb3BlbiAkZ2l0X2Rpci9jdnMtcmV2aXNpb25zIGZvciBhcHBlbmRpbmc6ICQhXG4iCisJaWYgZGVmaW5lZCAkb3B0X1I7CisKKworIworIyBydW4gY3ZzcHMgaW50byBhIGZpbGUgdW5sZXNzIHdlIGFyZSBnZXR0aW5nCisjIGl0IHBhc3NlZCBhcyBhIGZpbGUgdmlhICRvcHRfUAorIworbXkgJGN2c3BzZmlsZTsKK3VubGVzcyAoJG9wdF9QKSB7CisJcHJpbnQgIlJ1bm5pbmcgY3ZzcHMuLi5cbiIgaWYgJG9wdF92OworCW15ICRwaWQgPSBvcGVuKENWU1BTLCItfCIpOworCW15ICRjdnNwc2ZoOworCWRpZSAiQ2Fubm90IGZvcms6ICQhXG4iIHVubGVzcyBkZWZpbmVkICRwaWQ7CisJdW5sZXNzICgkcGlkKSB7CisJCW15IEBvcHQ7CisJCUBvcHQgPSBzcGxpdCgvLC8sJG9wdF9wKSBpZiBkZWZpbmVkICRvcHRfcDsKKwkJdW5zaGlmdCBAb3B0LCAnLXonLCAkb3B0X3ogaWYgZGVmaW5lZCAkb3B0X3o7CisJCXVuc2hpZnQgQG9wdCwgJy1xJyAgICAgICAgIHVubGVzcyBkZWZpbmVkICRvcHRfdjsKKwkJdW5sZXNzIChkZWZpbmVkKCRvcHRfcCkgJiYgJG9wdF9wID1+IG0vLS1uby1jdnMtZGlyZWN0LykgeworCQkJcHVzaCBAb3B0LCAnLS1jdnMtZGlyZWN0JzsKKwkJfQorCQlleGVjKCJjdnNwcyIsIi0tbm9yYyIsQG9wdCwiLXUiLCItQSIsJy0tcm9vdCcsJG9wdF9kLCRjdnNfdHJlZSk7CisJCWRpZSAiQ291bGQgbm90IHN0YXJ0IGN2c3BzOiAkIVxuIjsKKwl9CisJKCRjdnNwc2ZoLCAkY3ZzcHNmaWxlKSA9IHRlbXBmaWxlKCdnaXRYWFhYWFgnLCBTVUZGSVggPT4gJy5jdnNwcycsCisJCQkJCSAgRElSID0+IEZpbGU6OlNwZWMtPnRtcGRpcigpKTsKKwl3aGlsZSAoPENWU1BTPikgeworCSAgICBwcmludCAkY3ZzcHNmaCAkXzsKKwl9CisJY2xvc2UgQ1ZTUFM7CisJJD8gPT0gMCBvciBkaWUgImdpdCBjdnNpbXBvcnQ6IGZhdGFsOiBjdnNwcyByZXBvcnRlZCBlcnJvclxuIjsKKwljbG9zZSAkY3ZzcHNmaDsKK30gZWxzZSB7CisJJGN2c3BzZmlsZSA9IG11bmdlX3VzZXJfZmlsZW5hbWUoJG9wdF9QKTsKK30KKworb3BlbihDVlMsICI8JGN2c3BzZmlsZSIpIG9yIGRpZSAkITsKKworIyMgY3ZzcHMgb3V0cHV0OgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI1BhdGNoU2V0IDMxNAorI0RhdGU6IDE5OTkvMDkvMTggMTM6MDM6NTkKKyNBdXRob3I6IHdrb2NoCisjQnJhbmNoOiBTVEFCTEUtQlJBTkNILTEtMAorI0FuY2VzdG9yIGJyYW5jaDogSEVBRAorI1RhZzogKG5vbmUpCisjTG9nOgorIyAgICBTZWUgQ2hhbmdlTG9nOiBTYXQgU2VwIDE4IDEzOjAzOjI4IENFU1QgMTk5OSAgV2VybmVyIEtvY2gKKyNNZW1iZXJzOgorIwlSRUFETUU6MS41Ny0+MS41Ny4yLjEKKyMJVkVSU0lPTjoxLjk2LT4xLjk2LjIuMQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitteSAkc3RhdGUgPSAwOworCitzdWIgdXBkYXRlX2luZGV4IChcQFxAKSB7CisJbXkgJG9sZCA9IHNoaWZ0OworCW15ICRuZXcgPSBzaGlmdDsKKwlvcGVuKG15ICRmaCwgJ3wtJywgcXcoZ2l0IHVwZGF0ZS1pbmRleCAteiAtLWluZGV4LWluZm8pKQorCQlvciBkaWUgInVuYWJsZSB0byBvcGVuIGdpdCB1cGRhdGUtaW5kZXg6ICQhIjsKKwlwcmludCAkZmgKKwkJKG1hcCB7ICIwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcdCRfXDAiIH0KKwkJCUAkb2xkKSwKKwkJKG1hcCB7ICcxMDAnIC4gc3ByaW50ZignJW8nLCAkXy0+WzBdKSAuICIgJF8tPlsxXVx0JF8tPlsyXVwwIiB9CisJCQlAJG5ldykKKwkJb3IgZGllICJ1bmFibGUgdG8gd3JpdGUgdG8gZ2l0IHVwZGF0ZS1pbmRleDogJCEiOworCWNsb3NlICRmaAorCQlvciBkaWUgInVuYWJsZSB0byB3cml0ZSB0byBnaXQgdXBkYXRlLWluZGV4OiAkISI7CisJJD8gYW5kIGRpZSAiZ2l0IHVwZGF0ZS1pbmRleCByZXBvcnRlZCBlcnJvcjogJD8iOworfQorCitzdWIgd3JpdGVfdHJlZSAoKSB7CisJb3BlbihteSAkZmgsICctfCcsIHF3KGdpdCB3cml0ZS10cmVlKSkKKwkJb3IgZGllICJ1bmFibGUgdG8gb3BlbiBnaXQgd3JpdGUtdHJlZTogJCEiOworCWNob21wKG15ICR0cmVlID0gPCRmaD4pOworCWlzX3NoYTEoJHRyZWUpCisJCW9yIGRpZSAiQ2Fubm90IGdldCB0cmVlIGlkICgkdHJlZSk6ICQhIjsKKwljbG9zZSgkZmgpCisJCW9yIGRpZSAiRXJyb3IgcnVubmluZyBnaXQgd3JpdGUtdHJlZTogJD9cbiI7CisJcHJpbnQgIlRyZWUgSUQgJHRyZWVcbiIgaWYgJG9wdF92OworCXJldHVybiAkdHJlZTsKK30KKworbXkgKCRwYXRjaHNldCwkZGF0ZSwkYXV0aG9yX25hbWUsJGF1dGhvcl9lbWFpbCwkYXV0aG9yX3R6LCRicmFuY2gsJGFuY2VzdG9yLCR0YWcsJGxvZ21zZyk7CitteSAoQG9sZCxAbmV3LEBza2lwcGVkLCVpZ25vcmVicmFuY2gsQGNvbW1pdF9yZXZpc2lvbnMpOworCisjIGNvbW1pdHMgdGhhdCBjdnNwcyBjYW5ub3QgcGxhY2UgYW55d2hlcmUuLi4KKyRpZ25vcmVicmFuY2h7JyNDVlNQU19OT19CUkFOQ0gnfSA9IDE7CisKK3N1YiBjb21taXQgeworCWlmICgkYnJhbmNoIGVxICRvcHRfbyAmJiAhJGluZGV4e2JyYW5jaH0gJiYKKwkJIWdldF9oZWFkcmVmKCIkcmVtb3RlLyRicmFuY2giKSkgeworCSAgICAjIGxvb2tzIGxpa2UgYW4gaW5pdGlhbCBjb21taXQKKwkgICAgIyB1c2UgdGhlIGluZGV4IHByaW1lZCBieSBnaXQgaW5pdAorCSAgICAkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICIkZ2l0X2Rpci9pbmRleCI7CisJICAgICRpbmRleHskYnJhbmNofSA9ICIkZ2l0X2Rpci9pbmRleCI7CisJfSBlbHNlIHsKKwkgICAgIyB1c2UgYW4gaW5kZXggcGVyIGJyYW5jaCB0byBzcGVlZCB1cAorCSAgICAjIGltcG9ydHMgb2YgcHJvamVjdHMgd2l0aCBtYW55IGJyYW5jaGVzCisJICAgIHVubGVzcyAoJGluZGV4eyRicmFuY2h9KSB7CisJCSRpbmRleHskYnJhbmNofSA9IHRtcG5hbSgpOworCQkkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICRpbmRleHskYnJhbmNofTsKKwkJaWYgKCRhbmNlc3RvcikgeworCQkgICAgc3lzdGVtKCJnaXQiLCAicmVhZC10cmVlIiwgIiRyZW1vdGUvJGFuY2VzdG9yIik7CisJCX0gZWxzZSB7CisJCSAgICBzeXN0ZW0oImdpdCIsICJyZWFkLXRyZWUiLCAiJHJlbW90ZS8kYnJhbmNoIik7CisJCX0KKwkJZGllICJyZWFkLXRyZWUgZmFpbGVkOiAkP1xuIiBpZiAkPzsKKwkgICAgfQorCX0KKyAgICAgICAgJEVOVntHSVRfSU5ERVhfRklMRX0gPSAkaW5kZXh7JGJyYW5jaH07CisKKwl1cGRhdGVfaW5kZXgoQG9sZCwgQG5ldyk7CisJQG9sZCA9IEBuZXcgPSAoKTsKKwlteSAkdHJlZSA9IHdyaXRlX3RyZWUoKTsKKwlteSAkcGFyZW50ID0gZ2V0X2hlYWRyZWYoIiRyZW1vdGUvJGxhc3RfYnJhbmNoIik7CisJcHJpbnQgIlBhcmVudCBJRCAiIC4gKCRwYXJlbnQgPyAkcGFyZW50IDogIihlbXB0eSkiKSAuICJcbiIgaWYgJG9wdF92OworCisJbXkgQGNvbW1pdF9hcmdzOworCXB1c2ggQGNvbW1pdF9hcmdzLCAoIi1wIiwgJHBhcmVudCkgaWYgJHBhcmVudDsKKworCSMgbG9vc2UgZGV0ZWN0aW9uIG9mIG1lcmdlcworCSMgYmFzZWQgb24gdGhlIGNvbW1pdCBtc2cKKwlmb3JlYWNoIG15ICRyeCAoQG1lcmdlcngpIHsKKwkJbmV4dCB1bmxlc3MgJGxvZ21zZyA9fiAkcnggJiYgJDE7CisJCW15ICRtcGFyZW50ID0gJDEgZXEgJ0hFQUQnID8gJG9wdF9vIDogJDE7CisJCWlmIChteSAkc2hhMSA9IGdldF9oZWFkcmVmKCIkcmVtb3RlLyRtcGFyZW50IikpIHsKKwkJCXB1c2ggQGNvbW1pdF9hcmdzLCAnLXAnLCAiJHJlbW90ZS8kbXBhcmVudCI7CisJCQlwcmludCAiTWVyZ2UgcGFyZW50IGJyYW5jaDogJG1wYXJlbnRcbiIgaWYgJG9wdF92OworCQl9CisJfQorCisJc2V0X3RpbWV6b25lKCRhdXRob3JfdHopOworCSMgJGRhdGUgaXMgaW4gdGhlIHNlY29uZHMgc2luY2UgZXBvY2ggZm9ybWF0CisJbXkgJHR6X29mZnNldCA9IGdldF90el9vZmZzZXQoJGRhdGUpOworCW15ICRjb21taXRfZGF0ZSA9ICIkZGF0ZSAkdHpfb2Zmc2V0IjsKKwlzZXRfdGltZXpvbmUoJ1VUQycpOworCSRFTlZ7R0lUX0FVVEhPUl9OQU1FfSA9ICRhdXRob3JfbmFtZTsKKwkkRU5We0dJVF9BVVRIT1JfRU1BSUx9ID0gJGF1dGhvcl9lbWFpbDsKKwkkRU5We0dJVF9BVVRIT1JfREFURX0gPSAkY29tbWl0X2RhdGU7CisJJEVOVntHSVRfQ09NTUlUVEVSX05BTUV9ID0gJGF1dGhvcl9uYW1lOworCSRFTlZ7R0lUX0NPTU1JVFRFUl9FTUFJTH0gPSAkYXV0aG9yX2VtYWlsOworCSRFTlZ7R0lUX0NPTU1JVFRFUl9EQVRFfSA9ICRjb21taXRfZGF0ZTsKKwlteSAkcGlkID0gb3BlbjIobXkgJGNvbW1pdF9yZWFkLCBteSAkY29tbWl0X3dyaXRlLAorCQknZ2l0JywgJ2NvbW1pdC10cmVlJywgJHRyZWUsIEBjb21taXRfYXJncyk7CisKKwkjIGNvbXBhdGliaWxpdHkgd2l0aCBnaXQyY3ZzCisJc3Vic3RyKCRsb2dtc2csMzI3NjcpID0gIiIgaWYgbGVuZ3RoKCRsb2dtc2cpID4gMzI3Njc7CisJJGxvZ21zZyA9fiBzL1tcc1xuXStcei8vOworCisJaWYgKEBza2lwcGVkKSB7CisJICAgICRsb2dtc2cgLj0gIlxuXG5cblNLSVBQRUQ6XG5cdCI7CisJICAgICRsb2dtc2cgLj0gam9pbigiXG5cdCIsIEBza2lwcGVkKSAuICJcbiI7CisJICAgIEBza2lwcGVkID0gKCk7CisJfQorCisJcHJpbnQoJGNvbW1pdF93cml0ZSAiJGxvZ21zZ1xuIikgJiYgY2xvc2UoJGNvbW1pdF93cml0ZSkKKwkJb3IgZGllICJFcnJvciB3cml0aW5nIHRvIGdpdCBjb21taXQtdHJlZTogJCFcbiI7CisKKwlwcmludCAiQ29tbWl0dGVkIHBhdGNoICRwYXRjaHNldCAoJGJyYW5jaCAkY29tbWl0X2RhdGUpXG4iIGlmICRvcHRfdjsKKwljaG9tcChteSAkY2lkID0gPCRjb21taXRfcmVhZD4pOworCWlzX3NoYTEoJGNpZCkgb3IgZGllICJDYW5ub3QgZ2V0IGNvbW1pdCBpZCAoJGNpZCk6ICQhXG4iOworCXByaW50ICJDb21taXQgSUQgJGNpZFxuIiBpZiAkb3B0X3Y7CisJY2xvc2UoJGNvbW1pdF9yZWFkKTsKKworCXdhaXRwaWQoJHBpZCwwKTsKKwlkaWUgIkVycm9yIHJ1bm5pbmcgZ2l0IGNvbW1pdC10cmVlOiAkP1xuIiBpZiAkPzsKKworCXN5c3RlbSgnZ2l0JyAsICd1cGRhdGUtcmVmJywgIiRyZW1vdGUvJGJyYW5jaCIsICRjaWQpID09IDAKKwkJb3IgZGllICJDYW5ub3Qgd3JpdGUgYnJhbmNoICRicmFuY2ggZm9yIHVwZGF0ZTogJCFcbiI7CisKKwlpZiAoJHJldmlzaW9uX21hcCkgeworCQlwcmludCAkcmV2aXNpb25fbWFwICJAJF8gJGNpZFxuIiBmb3IgQGNvbW1pdF9yZXZpc2lvbnM7CisJfQorCUBjb21taXRfcmV2aXNpb25zID0gKCk7CisKKwlpZiAoJHRhZykgeworCSAgICAgICAgbXkgKCR4dGFnKSA9ICR0YWc7CisJCSR4dGFnID1+IHMvXHMrXCpcKi4qJC8vOyAjIFJlbW92ZSBzdHVmZiBsaWtlICoqIElOVkFMSUQgKiogYW5kICoqIEZVTktZICoqCisJCSR4dGFnID1+IHRyL18vXC4vIGlmICggJG9wdF91ICk7CisJCSR4dGFnID1+IHMvW1wvXS8kb3B0X3MvZzsKKworCQkjIFNlZSByZWZzLmMgZm9yIHRoZXNlIHJ1bGVzLgorCQkjIFRhZyBjYW5ub3QgY29udGFpbiBiYWQgY2hhcnMuIChTZWUgYmFkX3JlZl9jaGFyIGluIHJlZnMuYy4pCisJCSR4dGFnID1+IHMvWyB+XF46XFxcKlw/XFtdLy9nOworCQkjIE90aGVyIGJhZCBzdHJpbmdzIGZvciB0YWdzOgorCQkjIChTZWUgY2hlY2tfcmVmbmFtZV9jb21wb25lbnQgaW4gcmVmcy5jLikKKwkJMSB3aGlsZSAkeHRhZyA9fiBzLworCQkJKD86IFwuXC4gICAgICAgICMgVGFnIGNhbm5vdCBjb250YWluICcuLicuCisJCQl8ICAgXEBceyAgICAgICAgIyBUYWcgY2Fubm90IGNvbnRhaW4gJ0B7Jy4KKwkJCXwgXiAtICAgICAgICAgICAjIFRhZyBjYW5ub3QgYmVnaW4gd2l0aCAnLScuCisJCQl8ICAgXC5sb2NrICQgICAgIyBUYWcgY2Fubm90IGVuZCB3aXRoICcubG9jaycuCisJCQl8IF4gXC4gICAgICAgICAgIyBUYWcgY2Fubm90IGJlZ2luLi4uCisJCQl8ICAgXC4gJCAgICAgICAgIyAuLi5vciBlbmQgd2l0aCAnLicKKwkJCSkvL3hnOworCQkjIFRhZyBjYW5ub3QgYmUgZW1wdHkuCisJCWlmICgkeHRhZyBlcSAnJykgeworCQkJd2Fybigid2FybmluZzogaWdub3JpbmcgdGFnICckdGFnJyIsCisJCQkiIHdpdGggaW52YWxpZCB0YWduYW1lXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChzeXN0ZW0oJ2dpdCcgLCAndGFnJywgJy1mJywgJHh0YWcsICRjaWQpICE9IDApIHsKKwkJCSMgV2UgZGlkIG91ciBiZXN0IHRvIHNhbml0aXplIHRoZSB0YWcsIGJ1dCBzdGlsbCBmYWlsZWQKKwkJCSMgZm9yIHdoYXRldmVyIHJlYXNvbi4gQmFpbCBvdXQsIGFuZCBnaXZlIHRoZSB1c2VyCisJCQkjIGVub3VnaCBpbmZvcm1hdGlvbiB0byB1bmRlcnN0YW5kIGlmL2hvdyB3ZSBzaG91bGQKKwkJCSMgaW1wcm92ZSB0aGUgdHJhbnNsYXRpb24gaW4gdGhlIGZ1dHVyZS4KKwkJCWlmICgkdGFnIG5lICR4dGFnKSB7CisJCQkJcHJpbnQgIlRyYW5zbGF0ZWQgJyR0YWcnIHRhZyB0byAnJHh0YWcnXG4iOworCQkJfQorCQkJZGllICJDYW5ub3QgY3JlYXRlIHRhZyAkeHRhZzogJCFcbiI7CisJCX0KKworCQlwcmludCAiQ3JlYXRlZCB0YWcgJyR4dGFnJyBvbiAnJGJyYW5jaCdcbiIgaWYgJG9wdF92OworCX0KK307CisKK215ICRjb21taXRjb3VudCA9IDE7Cit3aGlsZSAoPENWUz4pIHsKKwljaG9tcDsKKwlpZiAoJHN0YXRlID09IDAgYW5kIC9eLSskLykgeworCQkkc3RhdGUgPSAxOworCX0gZWxzaWYgKCRzdGF0ZSA9PSAwKSB7CisJCSRzdGF0ZSA9IDE7CisJCXJlZG87CisJfSBlbHNpZiAoKCRzdGF0ZT09MCBvciAkc3RhdGU9PTEpIGFuZCBzL15QYXRjaFNldFxzKy8vKSB7CisJCSRwYXRjaHNldCA9IDArJF87CisJCSRzdGF0ZT0yOworCX0gZWxzaWYgKCRzdGF0ZSA9PSAyIGFuZCBzL15EYXRlOlxzKy8vKSB7CisJCSRkYXRlID0gcGRhdGUoJF8pOworCQl1bmxlc3MgKCRkYXRlKSB7CisJCQlwcmludCBTVERFUlIgIkNvdWxkIG5vdCBwYXJzZSBkYXRlOiAkX1xuIjsKKwkJCSRzdGF0ZT0wOworCQkJbmV4dDsKKwkJfQorCQkkc3RhdGU9MzsKKwl9IGVsc2lmICgkc3RhdGUgPT0gMyBhbmQgcy9eQXV0aG9yOlxzKy8vKSB7CisJCSRhdXRob3JfdHogPSAiVVRDIjsKKwkJcy9ccyskLy87CisJCWlmICgvXiguKj8pXHMrPCguKik+LykgeworCQkgICAgKCRhdXRob3JfbmFtZSwgJGF1dGhvcl9lbWFpbCkgPSAoJDEsICQyKTsKKwkJfSBlbHNpZiAoJGNvbnZfYXV0aG9yX25hbWV7JF99KSB7CisJCQkkYXV0aG9yX25hbWUgPSAkY29udl9hdXRob3JfbmFtZXskX307CisJCQkkYXV0aG9yX2VtYWlsID0gJGNvbnZfYXV0aG9yX2VtYWlseyRffTsKKwkJCSRhdXRob3JfdHogPSAkY29udl9hdXRob3JfdHp7JF99IGlmICgkY29udl9hdXRob3JfdHp7JF99KTsKKwkJfSBlbHNlIHsKKwkJICAgICRhdXRob3JfbmFtZSA9ICRhdXRob3JfZW1haWwgPSAkXzsKKwkJfQorCQkkc3RhdGUgPSA0OworCX0gZWxzaWYgKCRzdGF0ZSA9PSA0IGFuZCBzL15CcmFuY2g6XHMrLy8pIHsKKwkJcy9ccyskLy87CisJCXRyL18vXC4vIGlmICggJG9wdF91ICk7CisJCXMvW1wvXS8kb3B0X3MvZzsKKwkJJGJyYW5jaCA9ICRfOworCQkkc3RhdGUgPSA1OworCX0gZWxzaWYgKCRzdGF0ZSA9PSA1IGFuZCBzL15BbmNlc3RvciBicmFuY2g6XHMrLy8pIHsKKwkJcy9ccyskLy87CisJCSRhbmNlc3RvciA9ICRfOworCQkkYW5jZXN0b3IgPSAkb3B0X28gaWYgJGFuY2VzdG9yIGVxICJIRUFEIjsKKwkJJHN0YXRlID0gNjsKKwl9IGVsc2lmICgkc3RhdGUgPT0gNSkgeworCQkkYW5jZXN0b3IgPSB1bmRlZjsKKwkJJHN0YXRlID0gNjsKKwkJcmVkbzsKKwl9IGVsc2lmICgkc3RhdGUgPT0gNiBhbmQgcy9eVGFnOlxzKy8vKSB7CisJCXMvXHMrJC8vOworCQlpZiAoJF8gZXEgIihub25lKSIpIHsKKwkJCSR0YWcgPSB1bmRlZjsKKwkJfSBlbHNlIHsKKwkJCSR0YWcgPSAkXzsKKwkJfQorCQkkc3RhdGUgPSA3OworCX0gZWxzaWYgKCRzdGF0ZSA9PSA3IGFuZCAvXkxvZzovKSB7CisJCSRsb2dtc2cgPSAiIjsKKwkJJHN0YXRlID0gODsKKwl9IGVsc2lmICgkc3RhdGUgPT0gOCBhbmQgL15NZW1iZXJzOi8pIHsKKwkJJGJyYW5jaCA9ICRvcHRfbyBpZiAkYnJhbmNoIGVxICJIRUFEIjsKKwkJaWYgKGRlZmluZWQgJGJyYW5jaF9kYXRleyRicmFuY2h9IGFuZCAkYnJhbmNoX2RhdGV7JGJyYW5jaH0gPj0gJGRhdGUpIHsKKwkJCSMgc2tpcAorCQkJcHJpbnQgInNraXAgcGF0Y2hzZXQgJHBhdGNoc2V0OiAkZGF0ZSBiZWZvcmUgJGJyYW5jaF9kYXRleyRicmFuY2h9XG4iIGlmICRvcHRfdjsKKwkJCSRzdGF0ZSA9IDExOworCQkJbmV4dDsKKwkJfQorCQlpZiAoISRvcHRfYSAmJiAkc3RhcnR0aW1lIC0gMzAwIC0gKGRlZmluZWQgJG9wdF96ID8gJG9wdF96IDogMzAwKSA8PSAkZGF0ZSkgeworCQkJIyBza2lwIGlmIHRoZSBjb21taXQgaXMgdG9vIHJlY2VudAorCQkJIyBnaXZlbiB0aGF0IHRoZSBjdnNwcyBkZWZhdWx0IGZ1enogaXMgMzAwcywgd2UgZ2l2ZSBvdXJzZWx2ZXMgYW5vdGhlcgorCQkJIyAzMDBzIGp1c3QgaW4gY2FzZSAtLSB0aGlzIGFsc28gcHJldmVudHMgc2tpcHBpbmcgY29tbWl0cworCQkJIyBkdWUgdG8gc2VydmVyIGNsb2NrIGRyaWZ0CisJCQlwcmludCAic2tpcCBwYXRjaHNldCAkcGF0Y2hzZXQ6ICRkYXRlIHRvbyByZWNlbnRcbiIgaWYgJG9wdF92OworCQkJJHN0YXRlID0gMTE7CisJCQluZXh0OworCQl9CisJCWlmIChleGlzdHMgJGlnbm9yZWJyYW5jaHskYnJhbmNofSkgeworCQkJcHJpbnQgU1RERVJSICJTa2lwcGluZyAkYnJhbmNoXG4iOworCQkJJHN0YXRlID0gMTE7CisJCQluZXh0OworCQl9CisJCWlmICgkYW5jZXN0b3IpIHsKKwkJCWlmICgkYW5jZXN0b3IgZXEgJGJyYW5jaCkgeworCQkJCXByaW50IFNUREVSUiAiQnJhbmNoICRicmFuY2ggZXJyb25lb3VzbHkgc3RlbXMgZnJvbSBpdHNlbGYgLS0gY2hhbmdlZCBhbmNlc3RvciB0byAkb3B0X29cbiI7CisJCQkJJGFuY2VzdG9yID0gJG9wdF9vOworCQkJfQorCQkJaWYgKGRlZmluZWQgZ2V0X2hlYWRyZWYoIiRyZW1vdGUvJGJyYW5jaCIpKSB7CisJCQkJcHJpbnQgU1RERVJSICJCcmFuY2ggJGJyYW5jaCBhbHJlYWR5IGV4aXN0cyFcbiI7CisJCQkJJHN0YXRlPTExOworCQkJCW5leHQ7CisJCQl9CisJCQlteSAkaWQgPSBnZXRfaGVhZHJlZigiJHJlbW90ZS8kYW5jZXN0b3IiKTsKKwkJCWlmICghJGlkKSB7CisJCQkJcHJpbnQgU1RERVJSICJCcmFuY2ggJGFuY2VzdG9yIGRvZXMgbm90IGV4aXN0IVxuIjsKKwkJCQkkaWdub3JlYnJhbmNoeyRicmFuY2h9ID0gMTsKKwkJCQkkc3RhdGU9MTE7CisJCQkJbmV4dDsKKwkJCX0KKworCQkJc3lzdGVtKHF3KGdpdCB1cGRhdGUtcmVmIC1tIGN2c2ltcG9ydCksCisJCQkJIiRyZW1vdGUvJGJyYW5jaCIsICRpZCk7CisJCQlpZigkPyAhPSAwKSB7CisJCQkJcHJpbnQgU1RERVJSICJDb3VsZCBub3QgY3JlYXRlIGJyYW5jaCAkYnJhbmNoXG4iOworCQkJCSRpZ25vcmVicmFuY2h7JGJyYW5jaH0gPSAxOworCQkJCSRzdGF0ZT0xMTsKKwkJCQluZXh0OworCQkJfQorCQl9CisJCSRsYXN0X2JyYW5jaCA9ICRicmFuY2ggaWYgJGJyYW5jaCBuZSAkbGFzdF9icmFuY2g7CisJCSRzdGF0ZSA9IDk7CisJfSBlbHNpZiAoJHN0YXRlID09IDgpIHsKKwkJJGxvZ21zZyAuPSAiJF9cbiI7CisJfSBlbHNpZiAoJHN0YXRlID09IDkgYW5kIC9eXHMrKC4rPyk6KElOSVRJQUx8XGQrKD86XC5cZCspKyktPihcZCsoPzpcLlxkKykrKVxzKiQvKSB7CisjCVZFUlNJT046MS45Ni0+MS45Ni4yLjEKKwkJbXkgJGluaXQgPSAoJDIgZXEgIklOSVRJQUwiKTsKKwkJbXkgJGZuID0gJDE7CisJCW15ICRyZXYgPSAkMzsKKwkJJGZuID1+IHMjXi8rIyM7CisJCWlmICgkb3B0X1MgJiYgJGZuID1+IG0vJG9wdF9TLykgeworCQkgICAgcHJpbnQgIlNLSVBQSU5HICRmbiB2ICRyZXZcbiI7CisJCSAgICBwdXNoKEBza2lwcGVkLCAkZm4pOworCQkgICAgbmV4dDsKKwkJfQorCQlwdXNoIEBjb21taXRfcmV2aXNpb25zLCBbJGZuLCAkcmV2XTsKKwkJcHJpbnQgIkZldGNoaW5nICRmbiAgIHYgJHJldlxuIiBpZiAkb3B0X3Y7CisJCW15ICgkdG1wbmFtZSwgJHNpemUpID0gJGN2cy0+ZmlsZSgkZm4sJHJldik7CisJCWlmICgkc2l6ZSA9PSAtMSkgeworCQkJcHVzaChAb2xkLCRmbik7CisJCQlwcmludCAiRHJvcCAkZm5cbiIgaWYgJG9wdF92OworCQl9IGVsc2UgeworCQkJcHJpbnQgIiIuKCRpbml0ID8gIk5ldyIgOiAiVXBkYXRlIikuIiAkZm46ICRzaXplIGJ5dGVzXG4iIGlmICRvcHRfdjsKKwkJCW15ICRwaWQgPSBvcGVuKG15ICRGLCAnLXwnKTsKKwkJCWRpZSAkISB1bmxlc3MgZGVmaW5lZCAkcGlkOworCQkJaWYgKCEkcGlkKSB7CisJCQkgICAgZXhlYygiZ2l0IiwgImhhc2gtb2JqZWN0IiwgIi13IiwgJHRtcG5hbWUpCisJCQkJb3IgZGllICJDYW5ub3QgY3JlYXRlIG9iamVjdDogJCFcbiI7CisJCQl9CisJCQlteSAkc2hhID0gPCRGPjsKKwkJCWNob21wICRzaGE7CisJCQljbG9zZSAkRjsKKwkJCW15ICRtb2RlID0gcG1vZGUoJGN2cy0+eydtb2RlJ30pOworCQkJcHVzaChAbmV3LFskbW9kZSwgJHNoYSwgJGZuXSk7ICMgbWF5IGJlIHJlc3VycmVjdGVkIQorCQl9CisJCXVubGluaygkdG1wbmFtZSk7CisJfSBlbHNpZiAoJHN0YXRlID09IDkgYW5kIC9eXHMrKC4rPyk6XGQrKD86XC5cZCspKy0+KFxkKyg/OlwuXGQrKSspXChERUFEXClccyokLykgeworCQlteSAkZm4gPSAkMTsKKwkJbXkgJHJldiA9ICQyOworCQkkZm4gPX4gcyNeLysjIzsKKwkJcHVzaCBAY29tbWl0X3JldmlzaW9ucywgWyRmbiwgJHJldl07CisJCXB1c2goQG9sZCwkZm4pOworCQlwcmludCAiRGVsZXRlICRmblxuIiBpZiAkb3B0X3Y7CisJfSBlbHNpZiAoJHN0YXRlID09IDkgYW5kIC9eXHMqJC8pIHsKKwkJJHN0YXRlID0gMTA7CisJfSBlbHNpZiAoKCRzdGF0ZSA9PSA5IG9yICRzdGF0ZSA9PSAxMCkgYW5kIC9eLSskLykgeworCQkkY29tbWl0Y291bnQrKzsKKwkJaWYgKCRvcHRfTCAmJiAkY29tbWl0Y291bnQgPiAkb3B0X0wpIHsKKwkJCWxhc3Q7CisJCX0KKwkJY29tbWl0KCk7CisJCWlmICgoJGNvbW1pdGNvdW50ICYgMTAyMykgPT0gMCkgeworCQkJc3lzdGVtKHF3KGdpdCByZXBhY2sgLWEgLWQpKTsKKwkJfQorCQkkc3RhdGUgPSAxOworCX0gZWxzaWYgKCRzdGF0ZSA9PSAxMSBhbmQgL14tKyQvKSB7CisJCSRzdGF0ZSA9IDE7CisJfSBlbHNpZiAoL14tKyQvKSB7ICMgZW5kIG9mIHVua25vd24tbGluZSBwcm9jZXNzaW5nCisJCSRzdGF0ZSA9IDE7CisJfSBlbHNpZiAoJHN0YXRlICE9IDExKSB7ICMgaWdub3JlIHN0dWZmIHdoZW4gc2tpcHBpbmcKKwkJcHJpbnQgU1RERVJSICIqIFVOS05PV04gTElORSAqICRfXG4iOworCX0KK30KK2NvbW1pdCgpIGlmICRicmFuY2ggYW5kICRzdGF0ZSAhPSAxMTsKKwordW5sZXNzICgkb3B0X1ApIHsKKwl1bmxpbmsoJGN2c3BzZmlsZSk7Cit9CisKKyMgVGhlIGhldXJpc3RpYyBvZiByZXBhY2tpbmcgZXZlcnkgMTAyNCBjb21taXRzIGNhbiBsZWF2ZSBhCisjIGxvdCBvZiB1bnBhY2tlZCBkYXRhLiAgSWYgdGhlcmUgaXMgbW9yZSB0aGFuIDFNQiB3b3J0aCBvZgorIyBub3QtcGFja2VkIG9iamVjdHMsIHJlcGFjayBvbmNlIG1vcmUuCitteSAkbGluZSA9IGBnaXQgY291bnQtb2JqZWN0c2A7CitpZiAoJGxpbmUgPX4gL14oXGQrKSBvYmplY3RzLCAoXGQrKSBraWxvYnl0ZXMkLykgeworICBteSAoJG5fb2JqZWN0cywgJGtiKSA9ICgkMSwgJDIpOworICAxMDI0IDwgJGtiCisgICAgYW5kIHN5c3RlbShxdyhnaXQgcmVwYWNrIC1hIC1kKSk7Cit9CisKK2ZvcmVhY2ggbXkgJGdpdF9pbmRleCAodmFsdWVzICVpbmRleCkgeworICAgIGlmICgkZ2l0X2luZGV4IG5lICIkZ2l0X2Rpci9pbmRleCIpIHsKKwl1bmxpbmsoJGdpdF9pbmRleCk7CisgICAgfQorfQorCitpZiAoZGVmaW5lZCAkb3JpZ19naXRfaW5kZXgpIHsKKwkkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICRvcmlnX2dpdF9pbmRleDsKK30gZWxzZSB7CisJZGVsZXRlICRFTlZ7R0lUX0lOREVYX0ZJTEV9OworfQorCisjIE5vdyBzd2l0Y2ggYmFjayB0byB0aGUgYnJhbmNoIHdlIHdlcmUgaW4gYmVmb3JlIGFsbCBvZiB0aGlzIGhhcHBlbmVkCitpZiAoJG9yaWdfYnJhbmNoKSB7CisJcHJpbnQgIkRPTkUuXG4iIGlmICRvcHRfdjsKKwlpZiAoJG9wdF9pKSB7CisJCWV4aXQgMDsKKwl9CisJbXkgJHRpcF9hdF9lbmQgPSBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEYDsKKwlpZiAoJHRpcF9hdF9zdGFydCBuZSAkdGlwX2F0X2VuZCkgeworCQlmb3IgKCR0aXBfYXRfc3RhcnQsICR0aXBfYXRfZW5kKSB7IGNob21wOyB9CisJCXByaW50ICJGZXRjaGVkIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLlxuIiBpZiAkb3B0X3Y7CisJCXN5c3RlbShxdyhnaXQgcmVhZC10cmVlIC11IC1tKSwKKwkJICAgICAgICR0aXBfYXRfc3RhcnQsICR0aXBfYXRfZW5kKTsKKwkJZGllICJGYXN0LWZvcndhcmQgdXBkYXRlIGZhaWxlZDogJD9cbiIgaWYgJD87CisJfQorCWVsc2UgeworCQlzeXN0ZW0ocXcoZ2l0IG1lcmdlIC1tIGN2c2ltcG9ydCksICIkcmVtb3RlLyRvcHRfbyIpOworCQlkaWUgIkNvdWxkIG5vdCBtZXJnZSAkb3B0X28gaW50byB0aGUgY3VycmVudCBicmFuY2guXG4iIGlmICQ/OworCX0KK30gZWxzZSB7CisJJG9yaWdfYnJhbmNoID0gIm1hc3RlciI7CisJcHJpbnQgIkRPTkU7IGNyZWF0aW5nICRvcmlnX2JyYW5jaCBicmFuY2hcbiIgaWYgJG9wdF92OworCXN5c3RlbSgiZ2l0IiwgInVwZGF0ZS1yZWYiLCAicmVmcy9oZWFkcy9tYXN0ZXIiLCAiJHJlbW90ZS8kb3B0X28iKQorCQl1bmxlc3MgZGVmaW5lZCBnZXRfaGVhZHJlZigncmVmcy9oZWFkcy9tYXN0ZXInKTsKKwlzeXN0ZW0oImdpdCIsICJzeW1ib2xpYy1yZWYiLCAiJHJlbW90ZS9IRUFEIiwgIiRyZW1vdGUvJG9wdF9vIikKKwkJaWYgKCRvcHRfciAmJiAkb3B0X28gbmUgJ0hFQUQnKTsKKwlzeXN0ZW0oJ2dpdCcsICd1cGRhdGUtcmVmJywgJ0hFQUQnLCAiJG9yaWdfYnJhbmNoIik7CisJdW5sZXNzICgkb3B0X2kpIHsKKwkJc3lzdGVtKHF3KGdpdCBjaGVja291dCAtZikpOworCQlkaWUgImNoZWNrb3V0IGZhaWxlZDogJD9cbiIgaWYgJD87CisJfQorfQpkaWZmIC0tZ2l0IGEvZ2l0LWN2c3NlcnZlci5wZXJsIGIvZ2l0LWN2c3NlcnZlci5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFlMTA0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtY3Zzc2VydmVyLnBlcmwKQEAgLTAsMCArMSw1MTA1IEBACisjIS91c3IvYmluL3BlcmwKKworIyMjIworIyMjIyBUaGlzIGFwcGxpY2F0aW9uIGlzIGEgQ1ZTIGVtdWxhdGlvbiBsYXllciBmb3IgZ2l0LgorIyMjIyBJdCBpcyBpbnRlbmRlZCBmb3IgY2xpZW50cyB0byBjb25uZWN0IG92ZXIgU1NILgorIyMjIyBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy4KKyMjIyMKKyMjIyMgQ29weXJpZ2h0IFRoZSBPcGVuIFVuaXZlcnNpdHkgVUsgLSAyMDA2LgorIyMjIworIyMjIyBBdXRob3JzOiBNYXJ0eW4gU21pdGggICAgPG1hcnR5bkBjYXRhbHlzdC5uZXQubno+CisjIyMjICAgICAgICAgIE1hcnRpbiBMYW5naG9mZiA8bWFydGluQGxhcHRvcC5vcmc+CisjIyMjCisjIyMjCisjIyMjIFJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyMjIyMKKyMjIyMKKwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBieXRlczsKKwordXNlIEZjbnRsOwordXNlIEZpbGU6OlRlbXAgcXcvdGVtcGRpciB0ZW1wZmlsZS87Cit1c2UgRmlsZTo6UGF0aCBxdy9ybXRyZWUvOwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIHJlcXVpcmVfb3JkZXIgbm9faWdub3JlX2Nhc2UpOworCitteSAkVkVSU0lPTiA9ICdAQEdJVF9WRVJTSU9OQEAnOworCitteSAkbG9nID0gR0lUQ1ZTOjpsb2ctPm5ldygpOworbXkgJGNmZzsKKworbXkgJERBVEVfTElTVCA9IHsKKyAgICBKYW4gPT4gIjAxIiwKKyAgICBGZWIgPT4gIjAyIiwKKyAgICBNYXIgPT4gIjAzIiwKKyAgICBBcHIgPT4gIjA0IiwKKyAgICBNYXkgPT4gIjA1IiwKKyAgICBKdW4gPT4gIjA2IiwKKyAgICBKdWwgPT4gIjA3IiwKKyAgICBBdWcgPT4gIjA4IiwKKyAgICBTZXAgPT4gIjA5IiwKKyAgICBPY3QgPT4gIjEwIiwKKyAgICBOb3YgPT4gIjExIiwKKyAgICBEZWMgPT4gIjEyIiwKK307CisKKyMgRW5hYmxlIGF1dG9mbHVzaCBmb3IgU1RET1VUIChvdGhlcndpc2UgdGhlIHdob2xlIHRoaW5nIGZhbGxzIGFwYXJ0KQorJHwgPSAxOworCisjIyMjIERlZmluaXRpb24gYW5kIG1hcHBpbmdzIG9mIGZ1bmN0aW9ucyAjIyMjCisKKyMgTk9URTogRGVzcGl0ZSB0aGUgZXhpc3RlbmNlIG9mIHJlcV9DQVRDSEFMTCBhbmQgcmVxX0VNUFRZIHVuaW1wbGVtZW50ZWQKKyMgIHJlcXVlc3RzLCB0aGlzIGxpc3QgaXMgaW5jb21wbGV0ZS4gIEl0IGlzIG1pc3NpbmcgbWFueSByYXJlci9vcHRpb25hbAorIyAgcmVxdWVzdHMuICBQZXJoYXBzIHNvbWUgY2xpZW50cyByZXF1aXJlIGEgY2xhaW0gb2Ygc3VwcG9ydCBmb3IKKyMgIHRoZXNlIHNwZWNpZmljIHJlcXVlc3RzIGZvciBtYWluIGZ1bmN0aW9uYWxpdHkgdG8gd29yaz8KK215ICRtZXRob2RzID0geworICAgICdSb290JyAgICAgICAgICAgID0+IFwmcmVxX1Jvb3QsCisgICAgJ1ZhbGlkLXJlc3BvbnNlcycgPT4gXCZyZXFfVmFsaWRyZXNwb25zZXMsCisgICAgJ3ZhbGlkLXJlcXVlc3RzJyAgPT4gXCZyZXFfdmFsaWRyZXF1ZXN0cywKKyAgICAnRGlyZWN0b3J5JyAgICAgICA9PiBcJnJlcV9EaXJlY3RvcnksCisgICAgJ1N0aWNreScgICAgICAgICAgPT4gXCZyZXFfU3RpY2t5LAorICAgICdFbnRyeScgICAgICAgICAgID0+IFwmcmVxX0VudHJ5LAorICAgICdNb2RpZmllZCcgICAgICAgID0+IFwmcmVxX01vZGlmaWVkLAorICAgICdVbmNoYW5nZWQnICAgICAgID0+IFwmcmVxX1VuY2hhbmdlZCwKKyAgICAnUXVlc3Rpb25hYmxlJyAgICA9PiBcJnJlcV9RdWVzdGlvbmFibGUsCisgICAgJ0FyZ3VtZW50JyAgICAgICAgPT4gXCZyZXFfQXJndW1lbnQsCisgICAgJ0FyZ3VtZW50eCcgICAgICAgPT4gXCZyZXFfQXJndW1lbnQsCisgICAgJ2V4cGFuZC1tb2R1bGVzJyAgPT4gXCZyZXFfZXhwYW5kbW9kdWxlcywKKyAgICAnYWRkJyAgICAgICAgICAgICA9PiBcJnJlcV9hZGQsCisgICAgJ3JlbW92ZScgICAgICAgICAgPT4gXCZyZXFfcmVtb3ZlLAorICAgICdjbycgICAgICAgICAgICAgID0+IFwmcmVxX2NvLAorICAgICd1cGRhdGUnICAgICAgICAgID0+IFwmcmVxX3VwZGF0ZSwKKyAgICAnY2knICAgICAgICAgICAgICA9PiBcJnJlcV9jaSwKKyAgICAnZGlmZicgICAgICAgICAgICA9PiBcJnJlcV9kaWZmLAorICAgICdsb2cnICAgICAgICAgICAgID0+IFwmcmVxX2xvZywKKyAgICAncmxvZycgICAgICAgICAgICA9PiBcJnJlcV9sb2csCisgICAgJ3RhZycgICAgICAgICAgICAgPT4gXCZyZXFfQ0FUQ0hBTEwsCisgICAgJ3N0YXR1cycgICAgICAgICAgPT4gXCZyZXFfc3RhdHVzLAorICAgICdhZG1pbicgICAgICAgICAgID0+IFwmcmVxX0NBVENIQUxMLAorICAgICdoaXN0b3J5JyAgICAgICAgID0+IFwmcmVxX0NBVENIQUxMLAorICAgICd3YXRjaGVycycgICAgICAgID0+IFwmcmVxX0VNUFRZLAorICAgICdlZGl0b3JzJyAgICAgICAgID0+IFwmcmVxX0VNUFRZLAorICAgICdub29wJyAgICAgICAgICAgID0+IFwmcmVxX0VNUFRZLAorICAgICdhbm5vdGF0ZScgICAgICAgID0+IFwmcmVxX2Fubm90YXRlLAorICAgICdHbG9iYWxfb3B0aW9uJyAgID0+IFwmcmVxX0dsb2JhbG9wdGlvbiwKK307CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjICRzdGF0ZSBob2xkcyBhbGwgdGhlIGJpdHMgb2YgaW5mb3JtYXRpb24gdGhlIGNsaWVudHMgc2VuZHMgdXMgdGhhdCBjb3VsZAorIyBwb3RlbnRpYWxseSBiZSB1c2VmdWwgd2hlbiBpdCBjb21lcyB0byBhY3R1YWxseSBfZG9pbmdfIHNvbWV0aGluZy4KK215ICRzdGF0ZSA9IHsgcHJlcGVuZGRpciA9PiAnJyB9OworCisjIFdvcmsgaXMgZm9yIG1hbmFnaW5nIHRlbXBvcmFyeSB3b3JraW5nIGRpcmVjdG9yeQorbXkgJHdvcmsgPQorICAgIHsKKyAgICAgICAgc3RhdGUgPT4gdW5kZWYsICAjIHVuZGVmLCAxIChlbXB0eSksIDIgKHdpdGggc3R1ZmYpCisgICAgICAgIHdvcmtEaXIgPT4gdW5kZWYsCisgICAgICAgIGluZGV4ID0+IHVuZGVmLAorICAgICAgICBlbXB0eURpciA9PiB1bmRlZiwKKyAgICAgICAgdG1wRGlyID0+IHVuZGVmCisgICAgfTsKKworJGxvZy0+aW5mbygiLS0tLS0tLS0tLS0tLS0tIFNUQVJUSU5HIC0tLS0tLS0tLS0tLS0tLS0tIik7CisKK215ICR1c2FnZSA9CisgICAgInVzYWdlOiBnaXQgY3Zzc2VydmVyIFtvcHRpb25zXSBbcHNlcnZlcnxzZXJ2ZXJdIFs8ZGlyZWN0b3J5PiAuLi5dXG4iLgorICAgICIgICAgLS1iYXNlLXBhdGggPHBhdGg+ICA6IFByZXBlbmQgdG8gcmVxdWVzdGVkIENWU1JPT1RcbiIuCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHJlYWQgZnJvbSBHSVRfQ1ZTU0VSVkVSX0JBU0VfUEFUSFxuIi4KKyAgICAiICAgIC0tc3RyaWN0LXBhdGhzICAgICAgOiBEb24ndCBhbGxvdyByZWN1cnNpbmcgaW50byBzdWJkaXJlY3Rvcmllc1xuIi4KKyAgICAiICAgIC0tZXhwb3J0LWFsbCAgICAgICAgOiBEb24ndCBjaGVjayBmb3IgZ2l0Y3ZzLmVuYWJsZWQgaW4gY29uZmlnXG4iLgorICAgICIgICAgLS12ZXJzaW9uLCAtViAgICAgICA6IFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIuCisgICAgIiAgICAtaCwgLUggICAgICAgICAgICAgIDogUHJpbnQgdXNhZ2UgaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIuCisgICAgIlxuIi4KKyAgICAiPGRpcmVjdG9yeT4gLi4uIGlzIGEgbGlzdCBvZiBhbGxvd2VkIGRpcmVjdG9yaWVzLiBJZiBubyBkaXJlY3Rvcmllc1xuIi4KKyAgICAiYXJlIGdpdmVuLCBhbGwgYXJlIGFsbG93ZWQuIFRoaXMgaXMgYW4gYWRkaXRpb25hbCByZXN0cmljdGlvbiwgZ2l0Y3ZzXG4iLgorICAgICJhY2Nlc3Mgc3RpbGwgbmVlZHMgdG8gYmUgZW5hYmxlZCBieSB0aGUgZ2l0Y3ZzLmVuYWJsZWQgY29uZmlnIG9wdGlvbi5cbiIuCisgICAgIkFsdGVybmF0ZWx5LCBvbmUgZGlyZWN0b3J5IG1heSBiZSBzcGVjaWZpZWQgaW4gR0lUX0NWU1NFUlZFUl9ST09ULlxuIjsKKworbXkgQG9wdHMgPSAoICdofEgnLCAndmVyc2lvbnxWJywKKwkgICAgICdiYXNlLXBhdGg9cycsICdzdHJpY3QtcGF0aHMnLCAnZXhwb3J0LWFsbCcgKTsKK0dldE9wdGlvbnMoICRzdGF0ZSwgQG9wdHMgKQorICAgIG9yIGRpZSAkdXNhZ2U7CisKK2lmICgkc3RhdGUtPnt2ZXJzaW9ufSkgeworICAgIHByaW50ICJnaXQtY3Zzc2VydmVyIHZlcnNpb24gJFZFUlNJT05cbiI7CisgICAgZXhpdDsKK30KK2lmICgkc3RhdGUtPntoZWxwfSkgeworICAgIHByaW50ICR1c2FnZTsKKyAgICBleGl0OworfQorCitteSAkVEVNUF9ESVIgPSB0ZW1wZGlyKCBDTEVBTlVQID0+IDEgKTsKKyRsb2ctPmRlYnVnKCJUZW1wb3JhcnkgZGlyZWN0b3J5IGlzICckVEVNUF9ESVInIik7CisKKyRzdGF0ZS0+e21ldGhvZH0gPSAnZXh0JzsKK2lmIChAQVJHVikgeworICAgIGlmICgkQVJHVlswXSBlcSAncHNlcnZlcicpIHsKKwkkc3RhdGUtPnttZXRob2R9ID0gJ3BzZXJ2ZXInOworCXNoaWZ0IEBBUkdWOworICAgIH0gZWxzaWYgKCRBUkdWWzBdIGVxICdzZXJ2ZXInKSB7CisJc2hpZnQgQEFSR1Y7CisgICAgfQorfQorCisjIGV2ZXJ5dGhpbmcgZWxzZSBpcyBhIGRpcmVjdG9yeQorJHN0YXRlLT57YWxsb3dlZF9yb290c30gPSBbIEBBUkdWIF07CisKKyMgZG9uJ3QgZXhwb3J0IHRoZSB3aG9sZSBzeXN0ZW0gdW5sZXNzIHRoZSB1c2VycyByZXF1ZXN0cyBpdAoraWYgKCRzdGF0ZS0+eydleHBvcnQtYWxsJ30gJiYgIUB7JHN0YXRlLT57YWxsb3dlZF9yb290c319KSB7CisgICAgZGllICItLWV4cG9ydC1hbGwgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIGFuIGV4cGxpY2l0IHdoaXRlbGlzdFxuIjsKK30KKworIyBFbnZpcm9ubWVudCBoYW5kbGluZyBmb3IgcnVubmluZyB1bmRlciBnaXQtc2hlbGwKK2lmIChleGlzdHMgJEVOVntHSVRfQ1ZTU0VSVkVSX0JBU0VfUEFUSH0pIHsKKyAgICBpZiAoJHN0YXRlLT57J2Jhc2UtcGF0aCd9KSB7CisJZGllICJDYW5ub3Qgc3BlY2lmeSBiYXNlIHBhdGggYm90aCB3YXlzLlxuIjsKKyAgICB9CisgICAgbXkgJGJhc2VfcGF0aCA9ICRFTlZ7R0lUX0NWU1NFUlZFUl9CQVNFX1BBVEh9OworICAgICRzdGF0ZS0+eydiYXNlLXBhdGgnfSA9ICRiYXNlX3BhdGg7CisgICAgJGxvZy0+ZGVidWcoIlBpY2tlZCB1cCBiYXNlIHBhdGggJyRiYXNlX3BhdGgnIGZyb20gZW52aXJvbm1lbnQuXG4iKTsKK30KK2lmIChleGlzdHMgJEVOVntHSVRfQ1ZTU0VSVkVSX1JPT1R9KSB7CisgICAgaWYgKEB7JHN0YXRlLT57YWxsb3dlZF9yb290c319KSB7CisJZGllICJDYW5ub3Qgc3BlY2lmeSByb290cyBib3RoIHdheXM6IEBBUkdWXG4iOworICAgIH0KKyAgICBteSAkYWxsb3dlZF9yb290ID0gJEVOVntHSVRfQ1ZTU0VSVkVSX1JPT1R9OworICAgICRzdGF0ZS0+e2FsbG93ZWRfcm9vdHN9ID0gWyAkYWxsb3dlZF9yb290IF07CisgICAgJGxvZy0+ZGVidWcoIlBpY2tlZCB1cCBhbGxvd2VkIHJvb3QgJyRhbGxvd2VkX3Jvb3QnIGZyb20gZW52aXJvbm1lbnQuXG4iKTsKK30KKworIyBpZiB3ZSBhcmUgY2FsbGVkIHdpdGggYSBwc2VydmVyIGFyZ3VtZW50LAorIyBkZWFsIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIGNhdCBiZWZvcmUgZW50ZXJpbmcgdGhlCisjIG1haW4gbG9vcAoraWYgKCRzdGF0ZS0+e21ldGhvZH0gZXEgJ3BzZXJ2ZXInKSB7CisgICAgbXkgJGxpbmUgPSA8U1RESU4+OyBjaG9tcCAkbGluZTsKKyAgICB1bmxlc3MoICRsaW5lID1+IC9eQkVHSU4gKEFVVEh8VkVSSUZJQ0FUSU9OKSBSRVFVRVNUJC8pIHsKKyAgICAgICBkaWUgIkUgRG8gbm90IHVuZGVyc3RhbmQgJGxpbmUgLSBleHBlY3RpbmcgQkVHSU4gQVVUSCBSRVFVRVNUXG4iOworICAgIH0KKyAgICBteSAkcmVxdWVzdCA9ICQxOworICAgICRsaW5lID0gPFNURElOPjsgY2hvbXAgJGxpbmU7CisgICAgdW5sZXNzIChyZXFfUm9vdCgncm9vdCcsICRsaW5lKSkgeyAjIHJldXNlIFJvb3QKKyAgICAgICBwcmludCAiRSBJbnZhbGlkIHJvb3QgJGxpbmUgXG4iOworICAgICAgIGV4aXQgMTsKKyAgICB9CisgICAgJGxpbmUgPSA8U1RESU4+OyBjaG9tcCAkbGluZTsKKyAgICBteSAkdXNlciA9ICRsaW5lOworICAgICRsaW5lID0gPFNURElOPjsgY2hvbXAgJGxpbmU7CisgICAgbXkgJHBhc3N3b3JkID0gJGxpbmU7CisKKyAgICBpZiAoJHVzZXIgZXEgJ2Fub255bW91cycpIHsKKyAgICAgICAgIyAiQSIgd2lsbCBiZSAxIGJ5dGUsIHVzZSBsZW5ndGggaW5zdGVhZCBpbiBjYXNlIHRoZQorICAgICAgICAjIGVuY3J5cHRpb24gbWV0aG9kIGV2ZXIgY2hhbmdlcyAoeWVhaCwgcmlnaHQhKQorICAgICAgICBpZiAobGVuZ3RoKCRwYXNzd29yZCkgPiAxICkgeworICAgICAgICAgICAgcHJpbnQgIkUgRG9uJ3Qgc3VwcGx5IGEgcGFzc3dvcmQgZm9yIHRoZSBgYW5vbnltb3VzJyB1c2VyXG4iOworICAgICAgICAgICAgcHJpbnQgIkkgSEFURSBZT1VcbiI7CisgICAgICAgICAgICBleGl0IDE7CisgICAgICAgIH0KKworICAgICAgICAjIEZhbGwgdGhyb3VnaCB0byBMT1ZFCisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBUcnlpbmcgdG8gYXV0aGVudGljYXRlIGEgdXNlcgorICAgICAgICBpZiAobm90IGV4aXN0cyAkY2ZnLT57Z2l0Y3ZzfS0+e2F1dGhkYn0pIHsKKyAgICAgICAgICAgIHByaW50ICJFIHRoZSByZXBvIGNvbmZpZyBmaWxlIG5lZWRzIGEgW2dpdGN2c10gc2VjdGlvbiB3aXRoIGFuICdhdXRoZGInIHBhcmFtZXRlciBzZXQgdG8gdGhlIGZpbGVuYW1lIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhYmFzZVxuIjsKKyAgICAgICAgICAgIHByaW50ICJJIEhBVEUgWU9VXG4iOworICAgICAgICAgICAgZXhpdCAxOworICAgICAgICB9CisKKyAgICAgICAgbXkgJGF1dGhkYiA9ICRjZmctPntnaXRjdnN9LT57YXV0aGRifTsKKworICAgICAgICB1bmxlc3MgKC1lICRhdXRoZGIpIHsKKyAgICAgICAgICAgIHByaW50ICJFIFRoZSBhdXRoZW50aWNhdGlvbiBkYXRhYmFzZSBzcGVjaWZpZWQgaW4gW2dpdGN2cy5hdXRoZGJdIGRvZXMgbm90IGV4aXN0XG4iOworICAgICAgICAgICAgcHJpbnQgIkkgSEFURSBZT1VcbiI7CisgICAgICAgICAgICBleGl0IDE7CisgICAgICAgIH0KKworICAgICAgICBteSAkYXV0aF9vazsKKyAgICAgICAgb3BlbiBteSAkcGFzc3dkLCAiPCIsICRhdXRoZGIgb3IgZGllICQhOworICAgICAgICB3aGlsZSAoPCRwYXNzd2Q+KSB7CisgICAgICAgICAgICBpZiAobXteXFEkdXNlclxFOiguKil9KSB7CisgICAgICAgICAgICAgICAgaWYgKGNyeXB0KCR1c2VyLCBkZXNjcmFtYmxlKCRwYXNzd29yZCkpIGVxICQxKSB7CisgICAgICAgICAgICAgICAgICAgICRhdXRoX29rID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGNsb3NlICRwYXNzd2Q7CisKKyAgICAgICAgdW5sZXNzICgkYXV0aF9vaykgeworICAgICAgICAgICAgcHJpbnQgIkkgSEFURSBZT1VcbiI7CisgICAgICAgICAgICBleGl0IDE7CisgICAgICAgIH0KKworICAgICAgICAjIEZhbGwgdGhyb3VnaCB0byBMT1ZFCisgICAgfQorCisgICAgIyBGb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgdXNlciBpcyBhbm9ueW1vdXMgb24gY29tbWl0CisgICAgJHN0YXRlLT57dXNlcn0gPSAkdXNlcjsKKworICAgICRsaW5lID0gPFNURElOPjsgY2hvbXAgJGxpbmU7CisgICAgdW5sZXNzICgkbGluZSBlcSAiRU5EICRyZXF1ZXN0IFJFUVVFU1QiKSB7CisgICAgICAgZGllICJFIERvIG5vdCB1bmRlcnN0YW5kICRsaW5lIC0tIGV4cGVjdGluZyBFTkQgJHJlcXVlc3QgUkVRVUVTVFxuIjsKKyAgICB9CisgICAgcHJpbnQgIkkgTE9WRSBZT1VcbiI7CisgICAgZXhpdCBpZiAkcmVxdWVzdCBlcSAnVkVSSUZJQ0FUSU9OJzsgIyBjdnMgbG9naW4KKyAgICAjIGFuZCBub3cgYmFjayB0byBvdXIgcmVndWxhciBwcm9ncmFtbWUuLi4KK30KKworIyBLZWVwIGdvaW5nIHVudGlsIHRoZSBjbGllbnQgY2xvc2VzIHRoZSBjb25uZWN0aW9uCit3aGlsZSAoPFNURElOPikKK3sKKyAgICBjaG9tcDsKKworICAgICMgQ2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIHNlZW4gdGhpcyBtZXRob2QsIGFuZCBjYWxsIGFwcHJvcHJpYXRlIGZ1bmN0aW9uLgorICAgIGlmICggL14oW1x3LV0rKSg/OlxzKyguKikpPyQvIGFuZCBkZWZpbmVkKCRtZXRob2RzLT57JDF9KSApCisgICAgeworICAgICAgICAjIHVzZSB0aGUgJG1ldGhvZHMgaGFzaCB0byBjYWxsIHRoZSBhcHByb3ByaWF0ZSBzdWIgZm9yIHRoaXMgY29tbWFuZAorICAgICAgICAjJGxvZy0+aW5mbygiTWV0aG9kIDogJDEiKTsKKyAgICAgICAgJnskbWV0aG9kcy0+eyQxfX0oJDEsJDIpOworICAgIH0gZWxzZSB7CisgICAgICAgICMgbG9nIGZhdGFsIGJlY2F1c2Ugd2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLiBJZiB0aGlzIGhhcHBlbnMKKyAgICAgICAgIyB3ZSdyZSBmYWlybHkgc2NyZXdlZCBiZWNhdXNlIHdlIGRvbid0IGtub3cgaWYgdGhlIGNsaWVudCBpcyBleHBlY3RpbmcKKyAgICAgICAgIyBhIHJlc3BvbnNlLiBJZiBpdCBpcywgdGhlIGNsaWVudCB3aWxsIGhhbmcsIHdlJ2xsIGhhbmcsIGFuZCB0aGUgd2hvbGUKKyAgICAgICAgIyB0aGluZyB3aWxsIGJlIGN1c3RhcmQuCisgICAgICAgICRsb2ctPmZhdGFsKCJEb24ndCB1bmRlcnN0YW5kIGNvbW1hbmQgJF9cbiIpOworICAgICAgICBkaWUoIlVua25vd24gY29tbWFuZCAkXyIpOworICAgIH0KK30KKworJGxvZy0+ZGVidWcoIlByb2Nlc3NpbmcgdGltZSA6IHVzZXI9IiAuICh0aW1lcylbMF0gLiAiIHN5c3RlbT0iIC4gKHRpbWVzKVsxXSk7CiskbG9nLT5pbmZvKCItLS0tLS0tLS0tLS0tLS0gRklOSVNIIC0tLS0tLS0tLS0tLS0tLS0tIik7CisKK2NoZGlyICcvJzsKK2V4aXQgMDsKKworIyBNYWdpYyBjYXRjaGFsbCBtZXRob2QuCisjICAgIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IHdpbGwgaGFuZGxlIGFsbCBjb21tYW5kcyB3ZSBoYXZlbid0IHlldAorIyAgICBpbXBsZW1lbnRlZC4gSXQgc2ltcGx5IHNlbmRzIGEgd2FybmluZyB0byB0aGUgbG9nIGZpbGUgaW5kaWNhdGluZyBhCisjICAgIGNvbW1hbmQgdGhhdCBoYXNuJ3QgYmVlbiBpbXBsZW1lbnRlZCBoYXMgYmVlbiBpbnZva2VkLgorc3ViIHJlcV9DQVRDSEFMTAoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworICAgICRsb2ctPndhcm4oIlVuaGFuZGxlZCBjb21tYW5kIDogcmVxXyRjbWQgOiAkZGF0YSIpOworfQorCisjIFRoaXMgbWV0aG9kIGludmFyaWFibHkgc3VjY2VlZHMgd2l0aCBhbiBlbXB0eSByZXNwb25zZS4KK3N1YiByZXFfRU1QVFkKK3sKKyAgICBwcmludCAib2tcbiI7Cit9CisKKyMgUm9vdCBwYXRobmFtZSBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBUZWxsIHRoZSBzZXJ2ZXIgd2hpY2ggQ1ZTUk9PVCB0byB1c2UuIE5vdGUgdGhhdAorIyAgICAgcGF0aG5hbWUgaXMgYSBsb2NhbCBkaXJlY3RvcnkgYW5kIG5vdCBhIGZ1bGx5IHF1YWxpZmllZCBDVlNST09UIHZhcmlhYmxlLgorIyAgICAgcGF0aG5hbWUgbXVzdCBhbHJlYWR5IGV4aXN0OyBpZiBjcmVhdGluZyBhIG5ldyByb290LCB1c2UgdGhlIGluaXQKKyMgICAgIHJlcXVlc3QsIG5vdCBSb290LiBwYXRobmFtZSBkb2VzIG5vdCBpbmNsdWRlIHRoZSBob3N0bmFtZSBvZiB0aGUgc2VydmVyLAorIyAgICAgaG93IHRvIGFjY2VzcyB0aGUgc2VydmVyLCBldGMuOyBieSB0aGUgdGltZSB0aGUgQ1ZTIHByb3RvY29sIGlzIGluIHVzZSwKKyMgICAgIGNvbm5lY3Rpb24sIGF1dGhlbnRpY2F0aW9uLCBldGMuLCBhcmUgYWxyZWFkeSB0YWtlbiBjYXJlIG9mLiBUaGUgUm9vdAorIyAgICAgcmVxdWVzdCBtdXN0IGJlIHNlbnQgb25seSBvbmNlLCBhbmQgaXQgbXVzdCBiZSBzZW50IGJlZm9yZSBhbnkgcmVxdWVzdHMKKyMgICAgIG90aGVyIHRoYW4gVmFsaWQtcmVzcG9uc2VzLCB2YWxpZC1yZXF1ZXN0cywgVXNlVW5jaGFuZ2VkLCBTZXQgb3IgaW5pdC4KK3N1YiByZXFfUm9vdAoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworICAgICRsb2ctPmRlYnVnKCJyZXFfUm9vdCA6ICRkYXRhIik7CisKKyAgICB1bmxlc3MgKCRkYXRhID1+IG0jXi8jKSB7CisJcHJpbnQgImVycm9yIDEgUm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGhuYW1lXG4iOworCXJldHVybiAwOworICAgIH0KKworICAgIG15ICRjdnNyb290ID0gJHN0YXRlLT57J2Jhc2UtcGF0aCd9IHx8ICcnOworICAgICRjdnNyb290ID1+IHMjLyskIyM7CisgICAgJGN2c3Jvb3QgLj0gJGRhdGE7CisKKyAgICBpZiAoJHN0YXRlLT57Q1ZTUk9PVH0KKwkmJiAoJHN0YXRlLT57Q1ZTUk9PVH0gbmUgJGN2c3Jvb3QpKSB7CisJcHJpbnQgImVycm9yIDEgQ29uZmxpY3Rpbmcgcm9vdHMgc3BlY2lmaWVkXG4iOworCXJldHVybiAwOworICAgIH0KKworICAgICRzdGF0ZS0+e0NWU1JPT1R9ID0gJGN2c3Jvb3Q7CisKKyAgICAkRU5We0dJVF9ESVJ9ID0gJHN0YXRlLT57Q1ZTUk9PVH0gLiAiLyI7CisKKyAgICBpZiAoQHskc3RhdGUtPnthbGxvd2VkX3Jvb3RzfX0pIHsKKwlteSAkYWxsb3dlZCA9IDA7CisJZm9yZWFjaCBteSAkZGlyIChAeyRzdGF0ZS0+e2FsbG93ZWRfcm9vdHN9fSkgeworCSAgICBuZXh0IHVubGVzcyAkZGlyID1+IG0jXi8jOworCSAgICAkZGlyID1+IHMjLyskIyM7CisJICAgIGlmICgkc3RhdGUtPnsnc3RyaWN0LXBhdGhzJ30pIHsKKwkJaWYgKCRFTlZ7R0lUX0RJUn0gPX4gbSNeXFEkZGlyXEUvPyQjKSB7CisJCSAgICAkYWxsb3dlZCA9IDE7CisJCSAgICBsYXN0OworCQl9CisJICAgIH0gZWxzaWYgKCRFTlZ7R0lUX0RJUn0gPX4gbSNeXFEkZGlyXEUoLz8kfC8pIykgeworCQkkYWxsb3dlZCA9IDE7CisJCWxhc3Q7CisJICAgIH0KKwl9CisKKwl1bmxlc3MgKCRhbGxvd2VkKSB7CisJICAgIHByaW50ICJFICRFTlZ7R0lUX0RJUn0gZG9lcyBub3Qgc2VlbSB0byBiZSBhIHZhbGlkIEdJVCByZXBvc2l0b3J5XG4iOworCSAgICBwcmludCAiRSBcbiI7CisJICAgIHByaW50ICJlcnJvciAxICRFTlZ7R0lUX0RJUn0gaXMgbm90IGEgdmFsaWQgcmVwb3NpdG9yeVxuIjsKKwkgICAgcmV0dXJuIDA7CisJfQorICAgIH0KKworICAgIHVubGVzcyAoLWQgJEVOVntHSVRfRElSfSAmJiAtZSAkRU5We0dJVF9ESVJ9LidIRUFEJykgeworICAgICAgIHByaW50ICJFICRFTlZ7R0lUX0RJUn0gZG9lcyBub3Qgc2VlbSB0byBiZSBhIHZhbGlkIEdJVCByZXBvc2l0b3J5XG4iOworICAgICAgIHByaW50ICJFIFxuIjsKKyAgICAgICBwcmludCAiZXJyb3IgMSAkRU5We0dJVF9ESVJ9IGlzIG5vdCBhIHZhbGlkIHJlcG9zaXRvcnlcbiI7CisgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgbXkgQGdpdHZhcnMgPSBzYWZlX3BpcGVfY2FwdHVyZShxdyhnaXQgY29uZmlnIC1sKSk7CisgICAgaWYgKCQ/KSB7CisgICAgICAgcHJpbnQgIkUgcHJvYmxlbXMgZXhlY3V0aW5nIGdpdC1jb25maWcgb24gdGhlIHNlcnZlciAtLSB0aGlzIGlzIG5vdCBhIGdpdCByZXBvc2l0b3J5IG9yIHRoZSBQQVRIIGlzIG5vdCBzZXQgY29ycmVjdGx5LlxuIjsKKyAgICAgICAgcHJpbnQgIkUgXG4iOworICAgICAgICBwcmludCAiZXJyb3IgMSAtIHByb2JsZW0gZXhlY3V0aW5nIGdpdC1jb25maWdcbiI7CisgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGZvcmVhY2ggbXkgJGxpbmUgKCBAZ2l0dmFycyApCisgICAgeworICAgICAgICBuZXh0IHVubGVzcyAoICRsaW5lID1+IC9eKGdpdGN2cylcLig/OihleHR8cHNlcnZlcilcLik/KFtcdy1dKyk9KC4qKSQvICk7CisgICAgICAgIHVubGVzcyAoJDIpIHsKKyAgICAgICAgICAgICRjZmctPnskMX17JDN9ID0gJDQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkY2ZnLT57JDF9eyQyfXskM30gPSAkNDsKKyAgICAgICAgfQorICAgIH0KKworICAgIG15ICRlbmFibGVkID0gKCRjZmctPntnaXRjdnN9eyRzdGF0ZS0+e21ldGhvZH19e2VuYWJsZWR9CisJCSAgIHx8ICRjZmctPntnaXRjdnN9e2VuYWJsZWR9KTsKKyAgICB1bmxlc3MgKCRzdGF0ZS0+eydleHBvcnQtYWxsJ30gfHwKKwkgICAgKCRlbmFibGVkICYmICRlbmFibGVkID1+IC9eXHMqKDF8dHJ1ZXx5ZXMpXHMqJC9pKSkgeworICAgICAgICBwcmludCAiRSBHSVRDVlMgZW11bGF0aW9uIG5lZWRzIHRvIGJlIGVuYWJsZWQgb24gdGhpcyByZXBvXG4iOworICAgICAgICBwcmludCAiRSB0aGUgcmVwbyBjb25maWcgZmlsZSBuZWVkcyBhIFtnaXRjdnNdIHNlY3Rpb24gYWRkZWQsIGFuZCB0aGUgcGFyYW1ldGVyICdlbmFibGVkJyBzZXQgdG8gMVxuIjsKKyAgICAgICAgcHJpbnQgIkUgXG4iOworICAgICAgICBwcmludCAiZXJyb3IgMSBHSVRDVlMgZW11bGF0aW9uIGRpc2FibGVkXG4iOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBteSAkbG9nZmlsZSA9ICRjZmctPntnaXRjdnN9eyRzdGF0ZS0+e21ldGhvZH19e2xvZ2ZpbGV9IHx8ICRjZmctPntnaXRjdnN9e2xvZ2ZpbGV9OworICAgIGlmICggJGxvZ2ZpbGUgKQorICAgIHsKKyAgICAgICAgJGxvZy0+c2V0ZmlsZSgkbG9nZmlsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJGxvZy0+bm9maWxlKCk7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKKyMgR2xvYmFsX29wdGlvbiBvcHRpb24gXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiBuby4gVHJhbnNtaXQgb25lIG9mIHRoZSBnbG9iYWwgb3B0aW9ucyBgLXEnLCBgLVEnLAorIyAgICAgYC1sJywgYC10JywgYC1yJywgb3IgYC1uJy4gb3B0aW9uIG11c3QgYmUgb25lIG9mIHRob3NlIHN0cmluZ3MsIG5vCisjICAgICB2YXJpYXRpb25zIChzdWNoIGFzIGNvbWJpbmluZyBvZiBvcHRpb25zKSBhcmUgYWxsb3dlZC4gRm9yIGdyYWNlZnVsCisjICAgICBoYW5kbGluZyBvZiB2YWxpZC1yZXF1ZXN0cywgaXQgaXMgcHJvYmFibHkgYmV0dGVyIHRvIG1ha2UgbmV3IGdsb2JhbAorIyAgICAgb3B0aW9ucyBzZXBhcmF0ZSByZXF1ZXN0cywgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGFkZCB0aGVtIHRvIHRoaXMKKyMgICAgIHJlcXVlc3QuCitzdWIgcmVxX0dsb2JhbG9wdGlvbgoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworICAgICRsb2ctPmRlYnVnKCJyZXFfR2xvYmFsb3B0aW9uIDogJGRhdGEiKTsKKyAgICAkc3RhdGUtPntnbG9iYWxvcHRpb25zfXskZGF0YX0gPSAxOworfQorCisjIFZhbGlkLXJlc3BvbnNlcyByZXF1ZXN0LWxpc3QgXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiBuby4gVGVsbCB0aGUgc2VydmVyIHdoYXQgcmVzcG9uc2VzIHRoZSBjbGllbnQgd2lsbAorIyAgICAgYWNjZXB0LiByZXF1ZXN0LWxpc3QgaXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiB0b2tlbnMuCitzdWIgcmVxX1ZhbGlkcmVzcG9uc2VzCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisgICAgJGxvZy0+ZGVidWcoInJlcV9WYWxpZHJlc3BvbnNlcyA6ICRkYXRhIik7CisKKyAgICAjIFRPRE8gOiByZS1lbmFibGUgdGhpcywgY3VycmVudGx5IGl0J3Mgbm90IHBhcnRpY3VsYXJseSB1c2VmdWwKKyAgICAjJHN0YXRlLT57dmFsaWRyZXNwb25zZXN9ID0gWyBzcGxpdCAvXHMrLywgJGRhdGEgXTsKK30KKworIyB2YWxpZC1yZXF1ZXN0cyBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IHllcy4gQXNrIHRoZSBzZXJ2ZXIgdG8gc2VuZCBiYWNrIGEgVmFsaWQtcmVxdWVzdHMKKyMgICAgIHJlc3BvbnNlLgorc3ViIHJlcV92YWxpZHJlcXVlc3RzCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICAkbG9nLT5kZWJ1ZygicmVxX3ZhbGlkcmVxdWVzdHMiKTsKKworICAgICRsb2ctPmRlYnVnKCJTRU5EIDogVmFsaWQtcmVxdWVzdHMgIiAuIGpvaW4oIiAiLHNvcnQga2V5cyAlJG1ldGhvZHMpKTsKKyAgICAkbG9nLT5kZWJ1ZygiU0VORCA6IG9rIik7CisKKyAgICBwcmludCAiVmFsaWQtcmVxdWVzdHMgIiAuIGpvaW4oIiAiLHNvcnQga2V5cyAlJG1ldGhvZHMpIC4gIlxuIjsKKyAgICBwcmludCAib2tcbiI7Cit9CisKKyMgRGlyZWN0b3J5IGxvY2FsLWRpcmVjdG9yeSBcbgorIyAgICAgQWRkaXRpb25hbCBkYXRhOiByZXBvc2l0b3J5IFxuLiBSZXNwb25zZSBleHBlY3RlZDogbm8uIFRlbGwgdGhlIHNlcnZlcgorIyAgICAgd2hhdCBkaXJlY3RvcnkgdG8gdXNlLiBUaGUgcmVwb3NpdG9yeSBzaG91bGQgYmUgYSBkaXJlY3RvcnkgbmFtZSBmcm9tIGEKKyMgICAgIHByZXZpb3VzIHNlcnZlciByZXNwb25zZS4gTm90ZSB0aGF0IHRoaXMgYm90aCBnaXZlcyBhIGRlZmF1bHQgZm9yIEVudHJ5CisjICAgICBhbmQgTW9kaWZpZWQgYW5kIGFsc28gZm9yIGNpIGFuZCB0aGUgb3RoZXIgY29tbWFuZHM7IG5vcm1hbCB1c2FnZSBpcyB0bworIyAgICAgc2VuZCBEaXJlY3RvcnkgZm9yIGVhY2ggZGlyZWN0b3J5IGluIHdoaWNoIHRoZXJlIHdpbGwgYmUgYW4gRW50cnkgb3IKKyMgICAgIE1vZGlmaWVkLCBhbmQgdGhlbiBhIGZpbmFsIERpcmVjdG9yeSBmb3IgdGhlIG9yaWdpbmFsIGRpcmVjdG9yeSwgdGhlbiB0aGUKKyMgICAgIGNvbW1hbmQuIFRoZSBsb2NhbC1kaXJlY3RvcnkgaXMgcmVsYXRpdmUgdG8gdGhlIHRvcCBsZXZlbCBhdCB3aGljaCB0aGUKKyMgICAgIGNvbW1hbmQgaXMgb2NjdXJyaW5nIChpLmUuIHRoZSBsYXN0IERpcmVjdG9yeSB3aGljaCBpcyBzZW50IGJlZm9yZSB0aGUKKyMgICAgIGNvbW1hbmQpOyB0byBpbmRpY2F0ZSB0aGF0IHRvcCBsZXZlbCwgYC4nIHNob3VsZCBiZSBzZW50IGZvcgorIyAgICAgbG9jYWwtZGlyZWN0b3J5Lgorc3ViIHJlcV9EaXJlY3RvcnkKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIG15ICRyZXBvc2l0b3J5ID0gPFNURElOPjsKKyAgICBjaG9tcCAkcmVwb3NpdG9yeTsKKworCisgICAgJHN0YXRlLT57bG9jYWxkaXJ9ID0gJGRhdGE7CisgICAgJHN0YXRlLT57cmVwb3NpdG9yeX0gPSAkcmVwb3NpdG9yeTsKKyAgICAkc3RhdGUtPntwYXRofSA9ICRyZXBvc2l0b3J5OworICAgICRzdGF0ZS0+e3BhdGh9ID1+IHMvXlxRJHN0YXRlLT57Q1ZTUk9PVH1cRVwvLy87CisgICAgJHN0YXRlLT57bW9kdWxlfSA9ICQxIGlmICgkc3RhdGUtPntwYXRofSA9fiBzL14oLio/KShcL3wkKS8vKTsKKyAgICAkc3RhdGUtPntwYXRofSAuPSAiLyIgaWYgKCAkc3RhdGUtPntwYXRofSA9fiAvXFMvICk7CisKKyAgICAkc3RhdGUtPntkaXJlY3Rvcnl9ID0gJHN0YXRlLT57bG9jYWxkaXJ9OworICAgICRzdGF0ZS0+e2RpcmVjdG9yeX0gPSAiIiBpZiAoICRzdGF0ZS0+e2RpcmVjdG9yeX0gZXEgIi4iICk7CisgICAgJHN0YXRlLT57ZGlyZWN0b3J5fSAuPSAiLyIgaWYgKCAkc3RhdGUtPntkaXJlY3Rvcnl9ID1+IC9cUy8gKTsKKworICAgIGlmICggKG5vdCBkZWZpbmVkKCRzdGF0ZS0+e3ByZXBlbmRkaXJ9KSBvciAkc3RhdGUtPntwcmVwZW5kZGlyfSBlcSAnJykgYW5kICRzdGF0ZS0+e2xvY2FsZGlyfSBlcSAiLiIgYW5kICRzdGF0ZS0+e3BhdGh9ID1+IC9cUy8gKQorICAgIHsKKyAgICAgICAgJGxvZy0+aW5mbygiU2V0dGluZyBwcmVwZW5kIHRvICckc3RhdGUtPntwYXRofSciKTsKKyAgICAgICAgJHN0YXRlLT57cHJlcGVuZGRpcn0gPSAkc3RhdGUtPntwYXRofTsKKyAgICAgICAgbXkgJWVudHJpZXM7CisgICAgICAgIGZvcmVhY2ggbXkgJGVudHJ5ICgga2V5cyAleyRzdGF0ZS0+e2VudHJpZXN9fSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRlbnRyaWVzeyRzdGF0ZS0+e3ByZXBlbmRkaXJ9IC4gJGVudHJ5fSA9ICRzdGF0ZS0+e2VudHJpZXN9eyRlbnRyeX07CisgICAgICAgIH0KKyAgICAgICAgJHN0YXRlLT57ZW50cmllc309XCVlbnRyaWVzOworCisgICAgICAgIG15ICVkaXJNYXA7CisgICAgICAgIGZvcmVhY2ggbXkgJGRpciAoIGtleXMgJXskc3RhdGUtPntkaXJNYXB9fSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRkaXJNYXB7JHN0YXRlLT57cHJlcGVuZGRpcn0gLiAkZGlyfSA9ICRzdGF0ZS0+e2Rpck1hcH17JGRpcn07CisgICAgICAgIH0KKyAgICAgICAgJHN0YXRlLT57ZGlyTWFwfT1cJWRpck1hcDsKKyAgICB9CisKKyAgICBpZiAoIGRlZmluZWQgKCAkc3RhdGUtPntwcmVwZW5kZGlyfSApICkKKyAgICB7CisgICAgICAgICRsb2ctPmRlYnVnKCJQcmVwZW5kaW5nICckc3RhdGUtPntwcmVwZW5kZGlyfScgdG8gc3RhdGV8ZGlyZWN0b3J5Iik7CisgICAgICAgICRzdGF0ZS0+e2RpcmVjdG9yeX0gPSAkc3RhdGUtPntwcmVwZW5kZGlyfSAuICRzdGF0ZS0+e2RpcmVjdG9yeX0KKyAgICB9CisKKyAgICBpZiAoICEgZGVmaW5lZCgkc3RhdGUtPntkaXJNYXB9eyRzdGF0ZS0+e2RpcmVjdG9yeX19KSApCisgICAgeworICAgICAgICAkc3RhdGUtPntkaXJNYXB9eyRzdGF0ZS0+e2RpcmVjdG9yeX19ID0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZXMnID0+IHt9CisgICAgICAgICAgICAgICAgIyd0YWdzcGVjJyA9PiB1bmRlZgorICAgICAgICAgICAgfTsKKyAgICB9CisKKyAgICAkbG9nLT5kZWJ1ZygicmVxX0RpcmVjdG9yeSA6IGxvY2FsZGlyPSRkYXRhIHJlcG9zaXRvcnk9JHJlcG9zaXRvcnkgcGF0aD0kc3RhdGUtPntwYXRofSBkaXJlY3Rvcnk9JHN0YXRlLT57ZGlyZWN0b3J5fSBtb2R1bGU9JHN0YXRlLT57bW9kdWxlfSIpOworfQorCisjIFN0aWNreSB0YWdzcGVjIFxuCisjICAgICBSZXNwb25zZSBleHBlY3RlZDogbm8uIFRlbGwgdGhlIHNlcnZlciB0aGF0IHRoZSBkaXJlY3RvcnkgbW9zdAorIyAgICAgcmVjZW50bHkgc3BlY2lmaWVkIHdpdGggRGlyZWN0b3J5IGhhcyBhIHN0aWNreSB0YWcgb3IgZGF0ZQorIyAgICAgdGFnc3BlYy4gVGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0YWdzcGVjIGlzIFQgZm9yIGEgdGFnLCBEIGZvcgorIyAgICAgYSBkYXRlLCBvciBzb21lIG90aGVyIGNoYXJhY3RlciBzdXBwbGllZCBieSBhIFNldC1zdGlja3kKKyMgICAgIHJlc3BvbnNlIGZyb20gYSBwcmV2aW91cyByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuIFRoZSByZW1haW5kZXIKKyMgICAgIG9mIHRhZ3NwZWMgY29udGFpbnMgdGhlIGFjdHVhbCB0YWcgb3IgZGF0ZSwgYWdhaW4gYXMgc3VwcGxpZWQKKyMgICAgIGJ5IFNldC1zdGlja3kuCisjICAgICAgICAgIFRoZSBzZXJ2ZXIgc2hvdWxkIHJlbWVtYmVyIFN0YXRpYy1kaXJlY3RvcnkgYW5kIFN0aWNreSByZXF1ZXN0cworIyAgICAgZm9yIGEgcGFydGljdWxhciBkaXJlY3Rvcnk7IHRoZSBjbGllbnQgbmVlZCBub3QgcmVzZW5kIHRoZW0gZWFjaAorIyAgICAgdGltZSBpdCBzZW5kcyBhIERpcmVjdG9yeSByZXF1ZXN0IGZvciBhIGdpdmVuIGRpcmVjdG9yeS4gSG93ZXZlciwKKyMgICAgIHRoZSBzZXJ2ZXIgaXMgbm90IG9ibGlnZWQgdG8gcmVtZW1iZXIgdGhlbSBiZXlvbmQgdGhlIGNvbnRleHQKKyMgICAgIG9mIGEgc2luZ2xlIGNvbW1hbmQuCitzdWIgcmVxX1N0aWNreQoreworICAgIG15ICggJGNtZCwgJHRhZ3NwZWMgKSA9IEBfOworCisgICAgbXkgKCAkc3RpY2t5SW5mbyApOworICAgIGlmKCR0YWdzcGVjIGVxICIiKQorICAgIHsKKyAgICAgICAgIyBub3RoaW5nCisgICAgfQorICAgIGVsc2lmKCR0YWdzcGVjPX4vXlQoW14gXSspXHMqJC8pCisgICAgeworICAgICAgICAkc3RpY2t5SW5mbyA9IHsgJ3RhZycgPT4gJDEgfTsKKyAgICB9CisgICAgZWxzaWYoJHRhZ3NwZWM9fi9eRChbMC05Ll0rKVxzKiQvKQorICAgIHsKKyAgICAgICAgJHN0aWNreUluZm89IHsgJ2RhdGUnID0+ICQxIH07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRpZSAiVW5rbm93biB0YWdfb3JfZGF0ZSBmb3JtYXRcbiI7CisgICAgfQorICAgICRzdGF0ZS0+e2Rpck1hcH17JHN0YXRlLT57ZGlyZWN0b3J5fX17c3RpY2t5SW5mb309JHN0aWNreUluZm87CisKKyAgICAkbG9nLT5kZWJ1ZygicmVxX1N0aWNreSA6IHRhZ3NwZWM9JHRhZ3NwZWMgcmVwb3NpdG9yeT0kc3RhdGUtPntyZXBvc2l0b3J5fSIKKyAgICAgICAgICAgICAgICAuICIgcGF0aD0kc3RhdGUtPntwYXRofSBkaXJlY3Rvcnk9JHN0YXRlLT57ZGlyZWN0b3J5fSIKKyAgICAgICAgICAgICAgICAuICIgbW9kdWxlPSRzdGF0ZS0+e21vZHVsZX0iKTsKK30KKworIyBFbnRyeSBlbnRyeS1saW5lIFxuCisjICAgICBSZXNwb25zZSBleHBlY3RlZDogbm8uIFRlbGwgdGhlIHNlcnZlciB3aGF0IHZlcnNpb24gb2YgYSBmaWxlIGlzIG9uIHRoZQorIyAgICAgbG9jYWwgbWFjaGluZS4gVGhlIG5hbWUgaW4gZW50cnktbGluZSBpcyBhIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeQorIyAgICAgbW9zdCByZWNlbnRseSBzcGVjaWZpZWQgd2l0aCBEaXJlY3RvcnkuIElmIHRoZSB1c2VyIGlzIG9wZXJhdGluZyBvbiBvbmx5CisjICAgICBzb21lIGZpbGVzIGluIGEgZGlyZWN0b3J5LCBFbnRyeSByZXF1ZXN0cyBmb3Igb25seSB0aG9zZSBmaWxlcyBuZWVkIGJlCisjICAgICBpbmNsdWRlZC4gSWYgYW4gRW50cnkgcmVxdWVzdCBpcyBzZW50IHdpdGhvdXQgTW9kaWZpZWQsIElzLW1vZGlmaWVkLCBvcgorIyAgICAgVW5jaGFuZ2VkLCBpdCBtZWFucyB0aGUgZmlsZSBpcyBsb3N0IChkb2VzIG5vdCBleGlzdCBpbiB0aGUgd29ya2luZworIyAgICAgZGlyZWN0b3J5KS4gSWYgYm90aCBFbnRyeSBhbmQgb25lIG9mIE1vZGlmaWVkLCBJcy1tb2RpZmllZCwgb3IgVW5jaGFuZ2VkCisjICAgICBhcmUgc2VudCBmb3IgdGhlIHNhbWUgZmlsZSwgRW50cnkgbXVzdCBiZSBzZW50IGZpcnN0LiBGb3IgYSBnaXZlbiBmaWxlLAorIyAgICAgb25lIGNhbiBzZW5kIE1vZGlmaWVkLCBJcy1tb2RpZmllZCwgb3IgVW5jaGFuZ2VkLCBidXQgbm90IG1vcmUgdGhhbiBvbmUKKyMgICAgIG9mIHRoZXNlIHRocmVlLgorc3ViIHJlcV9FbnRyeQoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworCisgICAgIyRsb2ctPmRlYnVnKCJyZXFfRW50cnkgOiAkZGF0YSIpOworCisgICAgbXkgQGRhdGEgPSBzcGxpdCgvXC8vLCAkZGF0YSwgLTEpOworCisgICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YVsxXX0gPSB7CisgICAgICAgIHJldmlzaW9uICAgID0+ICRkYXRhWzJdLAorICAgICAgICBjb25mbGljdCAgICA9PiAkZGF0YVszXSwKKyAgICAgICAgb3B0aW9ucyAgICAgPT4gJGRhdGFbNF0sCisgICAgICAgIHRhZ19vcl9kYXRlID0+ICRkYXRhWzVdLAorICAgIH07CisKKyAgICAkc3RhdGUtPntkaXJNYXB9eyRzdGF0ZS0+e2RpcmVjdG9yeX19e25hbWVzfXskZGF0YVsxXX0gPSAnRic7CisKKyAgICAkbG9nLT5pbmZvKCJSZWNlaXZlZCBlbnRyeSBsaW5lICckZGF0YScgPT4gJyIgLiAkc3RhdGUtPntkaXJlY3Rvcnl9IC4gJGRhdGFbMV0gLiAiJyIpOworfQorCisjIFF1ZXN0aW9uYWJsZSBmaWxlbmFtZSBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBBZGRpdGlvbmFsIGRhdGE6IG5vLiBUZWxsIHRoZSBzZXJ2ZXIgdG8gY2hlY2sKKyMgICAgIHdoZXRoZXIgZmlsZW5hbWUgc2hvdWxkIGJlIGlnbm9yZWQsIGFuZCBpZiBub3QsIG5leHQgdGltZSB0aGUgc2VydmVyCisjICAgICBzZW5kcyByZXNwb25zZXMsIHNlbmQgKGluIGEgTSByZXNwb25zZSkgYD8nIGZvbGxvd2VkIGJ5IHRoZSBkaXJlY3RvcnkgYW5kCisjICAgICBmaWxlbmFtZS4gZmlsZW5hbWUgbXVzdCBub3QgY29udGFpbiBgLyc7IGl0IG5lZWRzIHRvIGJlIGEgZmlsZSBpbiB0aGUKKyMgICAgIGRpcmVjdG9yeSBuYW1lZCBieSB0aGUgbW9zdCByZWNlbnQgRGlyZWN0b3J5IHJlcXVlc3QuCitzdWIgcmVxX1F1ZXN0aW9uYWJsZQoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworCisgICAgJGxvZy0+ZGVidWcoInJlcV9RdWVzdGlvbmFibGUgOiAkZGF0YSIpOworICAgICRzdGF0ZS0+e2VudHJpZXN9eyRzdGF0ZS0+e2RpcmVjdG9yeX0uJGRhdGF9e3F1ZXN0aW9uYWJsZX0gPSAxOworfQorCisjIGFkZCBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IHllcy4gQWRkIGEgZmlsZSBvciBkaXJlY3RvcnkuIFRoaXMgdXNlcyBhbnkgcHJldmlvdXMKKyMgICAgIEFyZ3VtZW50LCBEaXJlY3RvcnksIEVudHJ5LCBvciBNb2RpZmllZCByZXF1ZXN0cywgaWYgdGhleSBoYXZlIGJlZW4gc2VudC4KKyMgICAgIFRoZSBsYXN0IERpcmVjdG9yeSBzZW50IHNwZWNpZmllcyB0aGUgd29ya2luZyBkaXJlY3RvcnkgYXQgdGhlIHRpbWUgb2YKKyMgICAgIHRoZSBvcGVyYXRpb24uIFRvIGFkZCBhIGRpcmVjdG9yeSwgc2VuZCB0aGUgZGlyZWN0b3J5IHRvIGJlIGFkZGVkIHVzaW5nCisjICAgICBEaXJlY3RvcnkgYW5kIEFyZ3VtZW50IHJlcXVlc3RzLgorc3ViIHJlcV9hZGQKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJhZGQiKTsKKworICAgIG15ICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRzdGF0ZS0+e21vZHVsZX0sICRsb2cpOworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworICAgIG15ICRhZGRjb3VudCA9IDA7CisKKyAgICBmb3JlYWNoIG15ICRmaWxlbmFtZSAoIEB7JHN0YXRlLT57YXJnc319ICkKKyAgICB7CisgICAgICAgICRmaWxlbmFtZSA9IGZpbGVjbGVhbnVwKCRmaWxlbmFtZSk7CisKKyAgICAgICAgIyBubyAtciwgLUEsIG9yIC1EIHdpdGggYWRkCisgICAgICAgIG15ICRzdGlja3lJbmZvID0gcmVzb2x2ZVN0aWNreUluZm8oJGZpbGVuYW1lKTsKKworICAgICAgICBteSAkbWV0YSA9ICR1cGRhdGVyLT5nZXRtZXRhKCRmaWxlbmFtZSwkc3RpY2t5SW5mbyk7CisgICAgICAgIG15ICR3cmV2ID0gcmV2cGFyc2UoJGZpbGVuYW1lKTsKKworICAgICAgICBpZiAoJHdyZXYgJiYgJG1ldGEgJiYgKCR3cmV2PX4vXi0vKSkKKyAgICAgICAgeworICAgICAgICAgICAgIyBwcmV2aW91c2x5IHJlbW92ZWQgZmlsZSwgYWRkIGJhY2sKKyAgICAgICAgICAgICRsb2ctPmluZm8oImFkZGVkIGZpbGUgJGZpbGVuYW1lIHdhcyBwcmV2aW91c2x5IHJlbW92ZWQsIHNlbmQgJG1ldGEtPntyZXZpc2lvbn0iKTsKKworICAgICAgICAgICAgcHJpbnQgIk1UICt1cGRhdGVkXG4iOworICAgICAgICAgICAgcHJpbnQgIk1UIHRleHQgVSBcbiI7CisgICAgICAgICAgICBwcmludCAiTVQgZm5hbWUgJGZpbGVuYW1lXG4iOworICAgICAgICAgICAgcHJpbnQgIk1UIG5ld2xpbmVcbiI7CisgICAgICAgICAgICBwcmludCAiTVQgLXVwZGF0ZWRcbiI7CisKKyAgICAgICAgICAgIHVubGVzcyAoICRzdGF0ZS0+e2dsb2JhbG9wdGlvbnN9ey1ufSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbXkgKCAkZmlsZXBhcnQsICRkaXJwYXJ0ICkgPSBmaWxlbmFtZXNwbGl0KCRmaWxlbmFtZSwxKTsKKworICAgICAgICAgICAgICAgIHByaW50ICJDcmVhdGVkICRkaXJwYXJ0XG4iOworICAgICAgICAgICAgICAgIHByaW50ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kc3RhdGUtPnttb2R1bGV9LyRmaWxlbmFtZVxuIjsKKworICAgICAgICAgICAgICAgICMgdGhpcyBpcyBhbiAiZW50cmllcyIgbGluZQorICAgICAgICAgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZW5hbWUsInNoYTEiLCRtZXRhLT57ZmlsZWhhc2h9KTsKKyAgICAgICAgICAgICAgICBteSAkZW50cnlMaW5lID0gIi8kZmlsZXBhcnQvJG1ldGEtPntyZXZpc2lvbn0vLyRrb3B0cy8iOworICAgICAgICAgICAgICAgICRlbnRyeUxpbmUgLj0gZ2V0U3RpY2t5VGFnT3JEYXRlKCRzdGlja3lJbmZvKTsKKyAgICAgICAgICAgICAgICAkbG9nLT5kZWJ1ZygkZW50cnlMaW5lKTsKKyAgICAgICAgICAgICAgICBwcmludCAiJGVudHJ5TGluZVxuIjsKKyAgICAgICAgICAgICAgICAjIHBlcm1pc3Npb25zCisgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIlNFTkQgOiB1PSRtZXRhLT57bW9kZX0sZz0kbWV0YS0+e21vZGV9LG89JG1ldGEtPnttb2RlfSIpOworICAgICAgICAgICAgICAgIHByaW50ICJ1PSRtZXRhLT57bW9kZX0sZz0kbWV0YS0+e21vZGV9LG89JG1ldGEtPnttb2RlfVxuIjsKKyAgICAgICAgICAgICAgICAjIHRyYW5zbWl0IGZpbGUKKyAgICAgICAgICAgICAgICB0cmFuc21pdGZpbGUoJG1ldGEtPntmaWxlaGFzaH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgdW5sZXNzICggZGVmaW5lZCAoICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfZmlsZW5hbWV9ICkgKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludCAiRSBjdnMgYWRkOiBub3RoaW5nIGtub3duIGFib3V0IGAkZmlsZW5hbWUnXG4iOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgICAgICAjIFRPRE8gOiBjaGVjayB3ZSdyZSBub3Qgc3F1YXNoaW5nIGFuIGFscmVhZHkgZXhpc3RpbmcgZmlsZQorICAgICAgICBpZiAoIGRlZmluZWQgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3JldmlzaW9ufSApICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIkUgY3ZzIGFkZDogYCRmaWxlbmFtZScgaGFzIGFscmVhZHkgYmVlbiBlbnRlcmVkXG4iOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIG15ICggJGZpbGVwYXJ0LCAkZGlycGFydCApID0gZmlsZW5hbWVzcGxpdCgkZmlsZW5hbWUsIDEpOworCisgICAgICAgIHByaW50ICJFIGN2cyBhZGQ6IHNjaGVkdWxpbmcgZmlsZSBgJGZpbGVuYW1lJyBmb3IgYWRkaXRpb25cbiI7CisKKyAgICAgICAgcHJpbnQgIkNoZWNrZWQtaW4gJGRpcnBhcnRcbiI7CisgICAgICAgIHByaW50ICIkZmlsZW5hbWVcbiI7CisgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZW5hbWUsImZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX0pOworICAgICAgICBwcmludCAiLyRmaWxlcGFydC8wLy8ka29wdHMvIiAuCisgICAgICAgICAgICAgIGdldFN0aWNreVRhZ09yRGF0ZSgkc3RpY2t5SW5mbykgLiAiXG4iOworCisgICAgICAgIG15ICRyZXF1ZXN0ZWRLb3B0cyA9ICRzdGF0ZS0+e29wdH17a307CisgICAgICAgIGlmKGRlZmluZWQoJHJlcXVlc3RlZEtvcHRzKSkKKyAgICAgICAgeworICAgICAgICAgICAgJHJlcXVlc3RlZEtvcHRzID0gIi1rJHJlcXVlc3RlZEtvcHRzIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICRyZXF1ZXN0ZWRLb3B0cyA9ICIiOworICAgICAgICB9CisgICAgICAgIGlmKCAka29wdHMgbmUgJHJlcXVlc3RlZEtvcHRzICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+d2FybigiSWdub3JpbmcgcmVxdWVzdGVkIC1rPSckcmVxdWVzdGVkS29wdHMnIgorICAgICAgICAgICAgICAgICAgICAgICAgLiAiIGZvciAnJGZpbGVuYW1lJzsgZGV0ZWN0ZWQgLWs9JyRrb3B0cycgaW5zdGVhZCIpOworICAgICAgICAgICAgI1RPRE86IEFsc28gaGF2ZSBvcHRpb24gdG8gc2VuZCB3YXJuaW5nIHRvIHVzZXI/CisgICAgICAgIH0KKworICAgICAgICAkYWRkY291bnQrKzsKKyAgICB9CisKKyAgICBpZiAoICRhZGRjb3VudCA9PSAxICkKKyAgICB7CisgICAgICAgIHByaW50ICJFIGN2cyBhZGQ6IHVzZSBgY3ZzIGNvbW1pdCcgdG8gYWRkIHRoaXMgZmlsZSBwZXJtYW5lbnRseVxuIjsKKyAgICB9CisgICAgZWxzaWYgKCAkYWRkY291bnQgPiAxICkKKyAgICB7CisgICAgICAgIHByaW50ICJFIGN2cyBhZGQ6IHVzZSBgY3ZzIGNvbW1pdCcgdG8gYWRkIHRoZXNlIGZpbGVzIHBlcm1hbmVudGx5XG4iOworICAgIH0KKworICAgIHByaW50ICJva1xuIjsKK30KKworIyByZW1vdmUgXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiB5ZXMuIFJlbW92ZSBhIGZpbGUuIFRoaXMgdXNlcyBhbnkgcHJldmlvdXMgQXJndW1lbnQsCisjICAgICBEaXJlY3RvcnksIEVudHJ5LCBvciBNb2RpZmllZCByZXF1ZXN0cywgaWYgdGhleSBoYXZlIGJlZW4gc2VudC4gVGhlIGxhc3QKKyMgICAgIERpcmVjdG9yeSBzZW50IHNwZWNpZmllcyB0aGUgd29ya2luZyBkaXJlY3RvcnkgYXQgdGhlIHRpbWUgb2YgdGhlCisjICAgICBvcGVyYXRpb24uIE5vdGUgdGhhdCB0aGlzIHJlcXVlc3QgZG9lcyBub3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgdG8gdGhlCisjICAgICByZXBvc2l0b3J5OyB0aGUgb25seSBlZmZlY3Qgb2YgYSBzdWNjZXNzZnVsIHJlbW92ZSByZXF1ZXN0IGlzIHRvIHN1cHBseQorIyAgICAgdGhlIGNsaWVudCB3aXRoIGEgbmV3IGVudHJpZXMgbGluZSBjb250YWluaW5nIGAtJyB0byBpbmRpY2F0ZSBhIHJlbW92ZWQKKyMgICAgIGZpbGUuIEluIGZhY3QsIHRoZSBjbGllbnQgcHJvYmFibHkgY291bGQgcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiB3aXRob3V0CisjICAgICBjb250YWN0aW5nIHRoZSBzZXJ2ZXIsIGFsdGhvdWdoIHVzaW5nIHJlbW92ZSBtYXkgY2F1c2UgdGhlIHNlcnZlciB0bworIyAgICAgcGVyZm9ybSBhIGZldyBtb3JlIGNoZWNrcy4gVGhlIGNsaWVudCBzZW5kcyBhIHN1YnNlcXVlbnQgY2kgcmVxdWVzdCB0bworIyAgICAgYWN0dWFsbHkgcmVjb3JkIHRoZSByZW1vdmFsIGluIHRoZSByZXBvc2l0b3J5Lgorc3ViIHJlcV9yZW1vdmUKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJyZW1vdmUiKTsKKworICAgICMgR3JhYiBhIGhhbmRsZSB0byB0aGUgU1FMaXRlIGRiIGFuZCBkbyBhbnkgbmVjZXNzYXJ5IHVwZGF0ZXMKKyAgICBteSAkdXBkYXRlciA9IEdJVENWUzo6dXBkYXRlci0+bmV3KCRzdGF0ZS0+e0NWU1JPT1R9LCAkc3RhdGUtPnttb2R1bGV9LCAkbG9nKTsKKyAgICAkdXBkYXRlci0+dXBkYXRlKCk7CisKKyAgICAjJGxvZy0+ZGVidWcoImFkZCBzdGF0ZSA6ICIgLiBEdW1wZXIoJHN0YXRlKSk7CisKKyAgICBteSAkcm1jb3VudCA9IDA7CisKKyAgICBmb3JlYWNoIG15ICRmaWxlbmFtZSAoIEB7JHN0YXRlLT57YXJnc319ICkKKyAgICB7CisgICAgICAgICRmaWxlbmFtZSA9IGZpbGVjbGVhbnVwKCRmaWxlbmFtZSk7CisKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXt1bmNoYW5nZWR9ICkgb3IgZGVmaW5lZCAoICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfZmlsZW5hbWV9ICkgKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludCAiRSBjdnMgcmVtb3ZlOiBmaWxlIGAkZmlsZW5hbWUnIHN0aWxsIGluIHdvcmtpbmcgZGlyZWN0b3J5XG4iOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgICMgb25seSBmcm9tIGVudHJpZXMKKyAgICAgICAgbXkgJHN0aWNreUluZm8gPSByZXNvbHZlU3RpY2t5SW5mbygkZmlsZW5hbWUpOworCisgICAgICAgIG15ICRtZXRhID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lLCRzdGlja3lJbmZvKTsKKyAgICAgICAgbXkgJHdyZXYgPSByZXZwYXJzZSgkZmlsZW5hbWUpOworCisgICAgICAgIHVubGVzcyAoIGRlZmluZWQgKCAkd3JldiApICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIkUgY3ZzIHJlbW92ZTogbm90aGluZyBrbm93biBhYm91dCBgJGZpbGVuYW1lJ1xuIjsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGRlZmluZWQoJHdyZXYpIGFuZCAoJHdyZXY9fi9eLS8pICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIkUgY3ZzIHJlbW92ZTogZmlsZSBgJGZpbGVuYW1lJyBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgcmVtb3ZhbFxuIjsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICB1bmxlc3MgKCAkd3JldiBlcSAkbWV0YS0+e3JldmlzaW9ufSApCisgICAgICAgIHsKKyAgICAgICAgICAgICMgVE9ETyA6IG5vdCBzdXJlIGlmIHRoZSBmb3JtYXQgb2YgdGhpcyBtZXNzYWdlIGlzIHF1aXRlIGNvcnJlY3QuCisgICAgICAgICAgICBwcmludCAiRSBjdnMgcmVtb3ZlOiBVcCB0byBkYXRlIGNoZWNrIGZhaWxlZCBmb3IgYCRmaWxlbmFtZSdcbiI7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKworICAgICAgICBteSAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9IGZpbGVuYW1lc3BsaXQoJGZpbGVuYW1lLCAxKTsKKworICAgICAgICBwcmludCAiRSBjdnMgcmVtb3ZlOiBzY2hlZHVsaW5nIGAkZmlsZW5hbWUnIGZvciByZW1vdmFsXG4iOworCisgICAgICAgIHByaW50ICJDaGVja2VkLWluICRkaXJwYXJ0XG4iOworICAgICAgICBwcmludCAiJGZpbGVuYW1lXG4iOworICAgICAgICBteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoJGZpbGVuYW1lLCJzaGExIiwkbWV0YS0+e2ZpbGVoYXNofSk7CisgICAgICAgIHByaW50ICIvJGZpbGVwYXJ0Ly0kd3Jldi8vJGtvcHRzLyIgLiBnZXRTdGlja3lUYWdPckRhdGUoJHN0aWNreUluZm8pIC4gIlxuIjsKKworICAgICAgICAkcm1jb3VudCsrOworICAgIH0KKworICAgIGlmICggJHJtY291bnQgPT0gMSApCisgICAgeworICAgICAgICBwcmludCAiRSBjdnMgcmVtb3ZlOiB1c2UgYGN2cyBjb21taXQnIHRvIHJlbW92ZSB0aGlzIGZpbGUgcGVybWFuZW50bHlcbiI7CisgICAgfQorICAgIGVsc2lmICggJHJtY291bnQgPiAxICkKKyAgICB7CisgICAgICAgIHByaW50ICJFIGN2cyByZW1vdmU6IHVzZSBgY3ZzIGNvbW1pdCcgdG8gcmVtb3ZlIHRoZXNlIGZpbGVzIHBlcm1hbmVudGx5XG4iOworICAgIH0KKworICAgIHByaW50ICJva1xuIjsKK30KKworIyBNb2RpZmllZCBmaWxlbmFtZSBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBBZGRpdGlvbmFsIGRhdGE6IG1vZGUsIFxuLCBmaWxlIHRyYW5zbWlzc2lvbi4gU2VuZAorIyAgICAgdGhlIHNlcnZlciBhIGNvcHkgb2Ygb25lIGxvY2FsbHkgbW9kaWZpZWQgZmlsZS4gZmlsZW5hbWUgaXMgYSBmaWxlIHdpdGhpbgorIyAgICAgdGhlIG1vc3QgcmVjZW50IGRpcmVjdG9yeSBzZW50IHdpdGggRGlyZWN0b3J5OyBpdCBtdXN0IG5vdCBjb250YWluIGAvJy4KKyMgICAgIElmIHRoZSB1c2VyIGlzIG9wZXJhdGluZyBvbiBvbmx5IHNvbWUgZmlsZXMgaW4gYSBkaXJlY3RvcnksIG9ubHkgdGhvc2UKKyMgICAgIGZpbGVzIG5lZWQgdG8gYmUgaW5jbHVkZWQuIFRoaXMgY2FuIGFsc28gYmUgc2VudCB3aXRob3V0IEVudHJ5LCBpZiB0aGVyZQorIyAgICAgaXMgbm8gZW50cnkgZm9yIHRoZSBmaWxlLgorc3ViIHJlcV9Nb2RpZmllZAoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworCisgICAgbXkgJG1vZGUgPSA8U1RESU4+OworICAgIGRlZmluZWQgJG1vZGUKKyAgICAgICAgb3IgKHByaW50ICJFIGVuZCBvZiBmaWxlIHJlYWRpbmcgbW9kZSBmb3IgJGRhdGFcbiIpLCByZXR1cm47CisgICAgY2hvbXAgJG1vZGU7CisgICAgbXkgJHNpemUgPSA8U1RESU4+OworICAgIGRlZmluZWQgJHNpemUKKyAgICAgICAgb3IgKHByaW50ICJFIGVuZCBvZiBmaWxlIHJlYWRpbmcgc2l6ZSBvZiAkZGF0YVxuIiksIHJldHVybjsKKyAgICBjaG9tcCAkc2l6ZTsKKworICAgICMgR3JhYiBjb25maWcgaW5mb3JtYXRpb24KKyAgICBteSAkYmxvY2tzaXplID0gODE5MjsKKyAgICBteSAkYnl0ZXNsZWZ0ID0gJHNpemU7CisgICAgbXkgJHRtcDsKKworICAgICMgR2V0IGEgZmlsZWhhbmRsZS9uYW1lIHRvIHdyaXRlIGl0IHRvCisgICAgbXkgKCAkZmgsICRmaWxlbmFtZSApID0gdGVtcGZpbGUoIERJUiA9PiAkVEVNUF9ESVIgKTsKKworICAgICMgTG9vcCBvdmVyIGZpbGUgZGF0YSB3cml0aW5nIG91dCB0byB0ZW1wb3JhcnkgZmlsZS4KKyAgICB3aGlsZSAoICRieXRlc2xlZnQgKQorICAgIHsKKyAgICAgICAgJGJsb2Nrc2l6ZSA9ICRieXRlc2xlZnQgaWYgKCAkYnl0ZXNsZWZ0IDwgJGJsb2Nrc2l6ZSApOworICAgICAgICByZWFkIFNURElOLCAkdG1wLCAkYmxvY2tzaXplOworICAgICAgICBwcmludCAkZmggJHRtcDsKKyAgICAgICAgJGJ5dGVzbGVmdCAtPSAkYmxvY2tzaXplOworICAgIH0KKworICAgIGNsb3NlICRmaAorICAgICAgICBvciAocHJpbnQgIkUgZmFpbGVkIHRvIHdyaXRlIHRlbXBvcmFyeSwgJGZpbGVuYW1lOiAkIVxuIiksIHJldHVybjsKKworICAgICMgRW5zdXJlIHdlIGhhdmUgc29tZXRoaW5nIHNlbnNpYmxlIGZvciB0aGUgZmlsZSBtb2RlCisgICAgaWYgKCAkbW9kZSA9fiAvdT0oXHcrKS8gKQorICAgIHsKKyAgICAgICAgJG1vZGUgPSAkMTsKKyAgICB9IGVsc2UgeworICAgICAgICAkbW9kZSA9ICJydyI7CisgICAgfQorCisgICAgIyBTYXZlIHRoZSBmaWxlIGRhdGEgaW4gJHN0YXRlCisgICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YX17bW9kaWZpZWRfZmlsZW5hbWV9ID0gJGZpbGVuYW1lOworICAgICRzdGF0ZS0+e2VudHJpZXN9eyRzdGF0ZS0+e2RpcmVjdG9yeX0uJGRhdGF9e21vZGlmaWVkX21vZGV9ID0gJG1vZGU7CisgICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YX17bW9kaWZpZWRfaGFzaH0gPSBzYWZlX3BpcGVfY2FwdHVyZSgnZ2l0JywnaGFzaC1vYmplY3QnLCRmaWxlbmFtZSk7CisgICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YX17bW9kaWZpZWRfaGFzaH0gPX4gcy9ccy4qJC8vczsKKworICAgICMkbG9nLT5kZWJ1ZygicmVxX01vZGlmaWVkIDogZmlsZT0kZGF0YSBtb2RlPSRtb2RlIHNpemU9JHNpemUiKTsKK30KKworIyBVbmNoYW5nZWQgZmlsZW5hbWUgXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiBuby4gVGVsbCB0aGUgc2VydmVyIHRoYXQgZmlsZW5hbWUgaGFzIG5vdCBiZWVuCisjICAgICBtb2RpZmllZCBpbiB0aGUgY2hlY2tlZCBvdXQgZGlyZWN0b3J5LiBUaGUgZmlsZW5hbWUgaXMgYSBmaWxlIHdpdGhpbiB0aGUKKyMgICAgIG1vc3QgcmVjZW50IGRpcmVjdG9yeSBzZW50IHdpdGggRGlyZWN0b3J5OyBpdCBtdXN0IG5vdCBjb250YWluIGAvJy4KK3N1YiByZXFfVW5jaGFuZ2VkCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICAkc3RhdGUtPntlbnRyaWVzfXskc3RhdGUtPntkaXJlY3Rvcnl9LiRkYXRhfXt1bmNoYW5nZWR9ID0gMTsKKworICAgICMkbG9nLT5kZWJ1ZygicmVxX1VuY2hhbmdlZCA6ICRkYXRhIik7Cit9CisKKyMgQXJndW1lbnQgdGV4dCBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBTYXZlIGFyZ3VtZW50IGZvciB1c2UgaW4gYSBzdWJzZXF1ZW50IGNvbW1hbmQuCisjICAgICBBcmd1bWVudHMgYWNjdW11bGF0ZSB1bnRpbCBhbiBhcmd1bWVudC11c2luZyBjb21tYW5kIGlzIGdpdmVuLCBhdCB3aGljaAorIyAgICAgcG9pbnQgdGhleSBhcmUgZm9yZ290dGVuLgorIyBBcmd1bWVudHggdGV4dCBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBBcHBlbmQgXG4gZm9sbG93ZWQgYnkgdGV4dCB0byB0aGUgY3VycmVudCBhcmd1bWVudAorIyAgICAgYmVpbmcgc2F2ZWQuCitzdWIgcmVxX0FyZ3VtZW50Cit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICAjIEFyZ3VtZW50eCBtZWFuczogYXBwZW5kIHRvIGxhc3QgQXJndW1lbnQgKHdpdGggYSBuZXdsaW5lIGluIGZyb250KQorCisgICAgJGxvZy0+ZGVidWcoIiRjbWQgOiAkZGF0YSIpOworCisgICAgaWYgKCAkY21kIGVxICdBcmd1bWVudHgnKSB7CisgICAgICAgICR7JHN0YXRlLT57YXJndW1lbnRzfX1bJCN7JHN0YXRlLT57YXJndW1lbnRzfX1dIC49ICJcbiIgLiAkZGF0YTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdXNoIEB7JHN0YXRlLT57YXJndW1lbnRzfX0sICRkYXRhOworICAgIH0KK30KKworIyBleHBhbmQtbW9kdWxlcyBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IHllcy4gRXhwYW5kIHRoZSBtb2R1bGVzIHdoaWNoIGFyZSBzcGVjaWZpZWQgaW4gdGhlCisjICAgICBhcmd1bWVudHMuIFJldHVybnMgdGhlIGRhdGEgaW4gTW9kdWxlLWV4cGFuc2lvbiByZXNwb25zZXMuIE5vdGUgdGhhdCB0aGUKKyMgICAgIHNlcnZlciBjYW4gYXNzdW1lIHRoYXQgdGhpcyBpcyBjaGVja291dCBvciBleHBvcnQsIG5vdCBydGFnIG9yIHJkaWZmOyB0aGUKKyMgICAgIGxhdHRlciBkbyBub3QgYWNjZXNzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgdGh1cyBoYXZlIG5vIG5lZWQgdG8KKyMgICAgIGV4cGFuZCBtb2R1bGVzIG9uIHRoZSBjbGllbnQgc2lkZS4gRXhwYW5kIG1heSBub3QgYmUgdGhlIGJlc3Qgd29yZCBmb3IKKyMgICAgIHdoYXQgdGhpcyByZXF1ZXN0IGRvZXMuIEl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IHRlbGwgeW91IGFsbCB0aGUgZmlsZXMKKyMgICAgIGNvbnRhaW5lZCBpbiBhIG1vZHVsZSwgZm9yIGV4YW1wbGUuIEJhc2ljYWxseSBpdCBpcyBhIHdheSBvZiB0ZWxsaW5nIHlvdQorIyAgICAgd2hpY2ggd29ya2luZyBkaXJlY3RvcmllcyB0aGUgc2VydmVyIG5lZWRzIHRvIGtub3cgYWJvdXQgaW4gb3JkZXIgdG8KKyMgICAgIGhhbmRsZSBhIGNoZWNrb3V0IG9mIHRoZSBzcGVjaWZpZWQgbW9kdWxlcy4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhhdCB0aGUKKyMgICAgIHNlcnZlciBoYXMgYSBtb2R1bGUgZGVmaW5lZCBieQorIyAgIGFsaWFzbW9kdWxlIC1hIDFkaXIKKyMgICAgIFRoYXQgaXMsIG9uZSBjYW4gY2hlY2sgb3V0IGFsaWFzbW9kdWxlIGFuZCBpdCB3aWxsIHRha2UgMWRpciBpbiB0aGUKKyMgICAgIHJlcG9zaXRvcnkgYW5kIGNoZWNrIGl0IG91dCB0byAxZGlyIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gTm93IHN1cHBvc2UKKyMgICAgIHRoZSBjbGllbnQgYWxyZWFkeSBoYXMgdGhpcyBtb2R1bGUgY2hlY2tlZCBvdXQgYW5kIGlzIHBsYW5uaW5nIG9uIHVzaW5nCisjICAgICB0aGUgY28gcmVxdWVzdCB0byB1cGRhdGUgaXQuIFdpdGhvdXQgdXNpbmcgZXhwYW5kLW1vZHVsZXMsIHRoZSBjbGllbnQKKyMgICAgIHdvdWxkIGhhdmUgdHdvIGJhZCBjaG9pY2VzOiBpdCBjb3VsZCBlaXRoZXIgc2VuZCBpbmZvcm1hdGlvbiBhYm91dCBhbGwKKyMgICAgIHdvcmtpbmcgZGlyZWN0b3JpZXMgdW5kZXIgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGljaCBjb3VsZCBiZQorIyAgICAgdW5uZWNlc3NhcmlseSBzbG93LCBvciBpdCBjb3VsZCBiZSBpZ25vcmFudCBvZiB0aGUgZmFjdCB0aGF0IGFsaWFzbW9kdWxlCisjICAgICBzdGFuZHMgZm9yIDFkaXIsIGFuZCBuZWdsZWN0IHRvIHNlbmQgaW5mb3JtYXRpb24gZm9yIDFkaXIsIHdoaWNoIHdvdWxkCisjICAgICBsZWFkIHRvIGluY29ycmVjdCBvcGVyYXRpb24uIFdpdGggZXhwYW5kLW1vZHVsZXMsIHRoZSBjbGllbnQgd291bGQgZmlyc3QKKyMgICAgIGFzayBmb3IgdGhlIG1vZHVsZSB0byBiZSBleHBhbmRlZDoKK3N1YiByZXFfZXhwYW5kbW9kdWxlcworeworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworCisgICAgYXJnc3BsaXQoKTsKKworICAgICRsb2ctPmRlYnVnKCJyZXFfZXhwYW5kbW9kdWxlcyA6ICIgLiAoIGRlZmluZWQoJGRhdGEpID8gJGRhdGEgOiAiW05VTExdIiApICk7CisKKyAgICB1bmxlc3MgKCByZWYgJHN0YXRlLT57YXJndW1lbnRzfSBlcSAiQVJSQVkiICkKKyAgICB7CisgICAgICAgIHByaW50ICJva1xuIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvcmVhY2ggbXkgJG1vZHVsZSAoIEB7JHN0YXRlLT57YXJndW1lbnRzfX0gKQorICAgIHsKKyAgICAgICAgJGxvZy0+ZGVidWcoIlNFTkQgOiBNb2R1bGUtZXhwYW5zaW9uICRtb2R1bGUiKTsKKyAgICAgICAgcHJpbnQgIk1vZHVsZS1leHBhbnNpb24gJG1vZHVsZVxuIjsKKyAgICB9CisKKyAgICBwcmludCAib2tcbiI7CisgICAgc3RhdGVjbGVhbnVwKCk7Cit9CisKKyMgY28gXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiB5ZXMuIEdldCBmaWxlcyBmcm9tIHRoZSByZXBvc2l0b3J5LiBUaGlzIHVzZXMgYW55CisjICAgICBwcmV2aW91cyBBcmd1bWVudCwgRGlyZWN0b3J5LCBFbnRyeSwgb3IgTW9kaWZpZWQgcmVxdWVzdHMsIGlmIHRoZXkgaGF2ZQorIyAgICAgYmVlbiBzZW50LiBBcmd1bWVudHMgdG8gdGhpcyBjb21tYW5kIGFyZSBtb2R1bGUgbmFtZXM7IHRoZSBjbGllbnQgY2Fubm90CisjICAgICBrbm93IHdoYXQgZGlyZWN0b3JpZXMgdGhleSBjb3JyZXNwb25kIHRvIGV4Y2VwdCBieSAoMSkganVzdCBzZW5kaW5nIHRoZQorIyAgICAgY28gcmVxdWVzdCwgYW5kIHRoZW4gc2VlaW5nIHdoYXQgZGlyZWN0b3J5IG5hbWVzIHRoZSBzZXJ2ZXIgc2VuZHMgYmFjayBpbgorIyAgICAgaXRzIHJlc3BvbnNlcywgYW5kICgyKSB0aGUgZXhwYW5kLW1vZHVsZXMgcmVxdWVzdC4KK3N1YiByZXFfY28KK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJjbyIpOworCisgICAgIyBQcm92aWRlIGxpc3Qgb2YgbW9kdWxlcywgaWYgLWMgd2FzIHVzZWQuCisgICAgaWYgKGV4aXN0cyAkc3RhdGUtPntvcHR9e2N9KSB7CisgICAgICAgIG15ICRzaG93cmVmID0gc2FmZV9waXBlX2NhcHR1cmUocXcoZ2l0IHNob3ctcmVmIC0taGVhZHMpKTsKKyAgICAgICAgZm9yIG15ICRsaW5lIChzcGxpdCAnXG4nLCAkc2hvd3JlZikgeworICAgICAgICAgICAgaWYgKCAkbGluZSA9fiBtJSByZWZzL2hlYWRzLyguKikkJSApIHsKKyAgICAgICAgICAgICAgICBwcmludCAiTSAkMVx0JDFcbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgIm9rXG4iOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBteSAkc3RpY2t5SW5mbyA9IHsgJ3RhZycgPT4gJHN0YXRlLT57b3B0fXtyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGUnID0+ICRzdGF0ZS0+e29wdH17RH0gfTsKKworICAgIG15ICRtb2R1bGUgPSAkc3RhdGUtPnthcmdzfVswXTsKKyAgICAkc3RhdGUtPnttb2R1bGV9ID0gJG1vZHVsZTsKKyAgICBteSAkY2hlY2tvdXRfcGF0aCA9ICRtb2R1bGU7CisKKyAgICAjIHVzZSB0aGUgdXNlciBzcGVjaWZpZWQgZGlyZWN0b3J5IGlmIHdlJ3JlIGdpdmVuIGl0CisgICAgJGNoZWNrb3V0X3BhdGggPSAkc3RhdGUtPntvcHR9e2R9IGlmICggZXhpc3RzICggJHN0YXRlLT57b3B0fXtkfSApICk7CisKKyAgICAkbG9nLT5kZWJ1ZygicmVxX2NvIDogIiAuICggZGVmaW5lZCgkZGF0YSkgPyAkZGF0YSA6ICJbTlVMTF0iICkgKTsKKworICAgICRsb2ctPmluZm8oIkNoZWNraW5nIG91dCBtb2R1bGUgJyRtb2R1bGUnICgkc3RhdGUtPntDVlNST09UfSkgdG8gJyRjaGVja291dF9wYXRoJyIpOworCisgICAgJEVOVntHSVRfRElSfSA9ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8iOworCisgICAgIyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBTUUxpdGUgZGIgYW5kIGRvIGFueSBuZWNlc3NhcnkgdXBkYXRlcworICAgIG15ICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRtb2R1bGUsICRsb2cpOworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworICAgIG15ICRoZWFkSGFzaDsKKyAgICBpZiggZGVmaW5lZCgkc3RpY2t5SW5mbykgJiYgZGVmaW5lZCgkc3RpY2t5SW5mby0+e3RhZ30pICkKKyAgICB7CisgICAgICAgICRoZWFkSGFzaCA9ICR1cGRhdGVyLT5sb29rdXBDb21taXRSZWYoJHN0aWNreUluZm8tPnt0YWd9KTsKKyAgICAgICAgaWYoICFkZWZpbmVkKCRoZWFkSGFzaCkgKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludCAiZXJyb3IgMSBubyBzdWNoIHRhZyBgJHN0aWNreUluZm8tPnt0YWd9J1xuIjsKKyAgICAgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICAgICAgZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgICRjaGVja291dF9wYXRoID1+IHN8LyR8fDsgIyBnZXQgcmlkIG9mIHRyYWlsaW5nIHNsYXNoZXMKKworICAgIG15ICVzZWVuZGlycyA9ICgpOworICAgIG15ICRsYXN0ZGlyID0nJzsKKworICAgIHByZXBEaXJGb3JPdXRwdXQoCisgICAgICAgICAgICAiLiIsCisgICAgICAgICAgICAkc3RhdGUtPntDVlNST09UfSAuICIvJG1vZHVsZSIsCisgICAgICAgICAgICAkY2hlY2tvdXRfcGF0aCwKKyAgICAgICAgICAgIFwlc2VlbmRpcnMsCisgICAgICAgICAgICAnY2hlY2tvdXQnLAorICAgICAgICAgICAgJHN0YXRlLT57ZGlyQXJnc30gKTsKKworICAgIGZvcmVhY2ggbXkgJGdpdCAoIEB7JHVwZGF0ZXItPmdldEFueUhlYWQoJGhlYWRIYXNoKX0gKQorICAgIHsKKyAgICAgICAgIyBEb24ndCB3YW50IHRvIGNoZWNrIG91dCBkZWxldGVkIGZpbGVzCisgICAgICAgIG5leHQgaWYgKCAkZ2l0LT57ZmlsZWhhc2h9IGVxICJkZWxldGVkIiApOworCisgICAgICAgIG15ICRmdWxsTmFtZSA9ICRnaXQtPntuYW1lfTsKKyAgICAgICAgKCAkZ2l0LT57bmFtZX0sICRnaXQtPntkaXJ9ICkgPSBmaWxlbmFtZXNwbGl0KCRnaXQtPntuYW1lfSk7CisKKyAgICAgICAgdW5sZXNzIChleGlzdHMoJHNlZW5kaXJzeyRnaXQtPntkaXJ9fSkpIHsKKyAgICAgICAgICAgIHByZXBEaXJGb3JPdXRwdXQoJGdpdC0+e2Rpcn0sICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kbW9kdWxlLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaGVja291dF9wYXRoLCBcJXNlZW5kaXJzLCAnY2hlY2tvdXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhdGUtPntkaXJBcmdzfSApOworICAgICAgICAgICAgJGxhc3RkaXIgPSAkZ2l0LT57ZGlyfTsKKyAgICAgICAgICAgICRzZWVuZGlyc3skZ2l0LT57ZGlyfX0gPSAxOworICAgICAgICB9CisKKyAgICAgICAgIyBtb2RpZmljYXRpb24gdGltZSBvZiB0aGlzIGZpbGUKKyAgICAgICAgcHJpbnQgIk1vZC10aW1lICRnaXQtPnttb2RpZmllZH1cbiI7CisKKyAgICAgICAgIyBwcmludCBzb21lIGluZm9ybWF0aW9uIHRvIHRoZSBjbGllbnQKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJGdpdC0+e2Rpcn0gKSBhbmQgJGdpdC0+e2Rpcn0gbmUgIi4vIiApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJNIFUgJGNoZWNrb3V0X3BhdGgvJGdpdC0+e2Rpcn0kZ2l0LT57bmFtZX1cbiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludCAiTSBVICRjaGVja291dF9wYXRoLyRnaXQtPntuYW1lfVxuIjsKKyAgICAgICAgfQorCisgICAgICAgIyBpbnN0cnVjdCBjbGllbnQgd2UncmUgc2VuZGluZyBhIGZpbGUgdG8gcHV0IGluIHRoaXMgcGF0aAorICAgICAgIHByaW50ICJDcmVhdGVkICRjaGVja291dF9wYXRoLyIgLiAoIGRlZmluZWQgKCAkZ2l0LT57ZGlyfSApIGFuZCAkZ2l0LT57ZGlyfSBuZSAiLi8iID8gJGdpdC0+e2Rpcn0gLiAiLyIgOiAiIiApIC4gIlxuIjsKKworICAgICAgIHByaW50ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kbW9kdWxlLyIgLiAoIGRlZmluZWQgKCAkZ2l0LT57ZGlyfSApIGFuZCAkZ2l0LT57ZGlyfSBuZSAiLi8iID8gJGdpdC0+e2Rpcn0gLiAiLyIgOiAiIiApIC4gIiRnaXQtPntuYW1lfVxuIjsKKworICAgICAgICAjIHRoaXMgaXMgYW4gImVudHJpZXMiIGxpbmUKKyAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmdWxsTmFtZSwic2hhMSIsJGdpdC0+e2ZpbGVoYXNofSk7CisgICAgICAgIHByaW50ICIvJGdpdC0+e25hbWV9LyRnaXQtPntyZXZpc2lvbn0vLyRrb3B0cy8iIC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGdldFN0aWNreVRhZ09yRGF0ZSgkc3RpY2t5SW5mbykgLiAiXG4iOworICAgICAgICAjIHBlcm1pc3Npb25zCisgICAgICAgIHByaW50ICJ1PSRnaXQtPnttb2RlfSxnPSRnaXQtPnttb2RlfSxvPSRnaXQtPnttb2RlfVxuIjsKKworICAgICAgICAjIHRyYW5zbWl0IGZpbGUKKyAgICAgICAgdHJhbnNtaXRmaWxlKCRnaXQtPntmaWxlaGFzaH0pOworICAgIH0KKworICAgIHByaW50ICJva1xuIjsKKworICAgIHN0YXRlY2xlYW51cCgpOworfQorCisjIHVzZWQgYnkgcmVxX2NvIGFuZCByZXFfdXBkYXRlIHRvIHNldCB1cCBkaXJlY3RvcmllcyBmb3IgZmlsZXMKKyMgcmVjdXJzaXZlbHkgaGFuZGxlcyBwYXJlbnRzCitzdWIgcHJlcERpckZvck91dHB1dAoreworICAgIG15ICgkZGlyLCAkcmVwb2RpciwgJHJlbW90ZWRpciwgJHNlZW5kaXJzLCAkcmVxdWVzdCwgJGRpckFyZ3MpID0gQF87CisKKyAgICBteSAkcGFyZW50ID0gZGlybmFtZSgkZGlyKTsKKyAgICAkZGlyICAgICAgID1+IHN8LyskfHw7CisgICAgJHJlcG9kaXIgICA9fiBzfC8rJHx8OworICAgICRyZW1vdGVkaXIgPX4gc3wvKyR8fDsKKyAgICAkcGFyZW50ICAgID1+IHN8LyskfHw7CisKKyAgICBpZiAoJHBhcmVudCBlcSAnLicgfHwgJHBhcmVudCBlcSAnLi8nKQorICAgIHsKKyAgICAgICAgJHBhcmVudCA9ICcnOworICAgIH0KKyAgICAjIHJlY3Vyc2UgdG8gYW5ub3VuY2UgdW5zZWVuIHBhcmVudHMgZmlyc3QKKyAgICBpZiggbGVuZ3RoKCRwYXJlbnQpICYmCisgICAgICAgICFleGlzdHMoJHNlZW5kaXJzLT57JHBhcmVudH0pICYmCisgICAgICAgICggJHJlcXVlc3QgZXEgImNoZWNrb3V0IiB8fAorICAgICAgICAgIGV4aXN0cygkZGlyQXJncy0+eyRwYXJlbnR9KSApICkKKyAgICB7CisgICAgICAgIHByZXBEaXJGb3JPdXRwdXQoJHBhcmVudCwgJHJlcG9kaXIsICRyZW1vdGVkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJHNlZW5kaXJzLCAkcmVxdWVzdCwgJGRpckFyZ3MpOworICAgIH0KKyAgICAjIEFubm91bmNlIHRoYXQgd2UgYXJlIGdvaW5nIHRvIG1vZGlmeSBhdCB0aGUgcGFyZW50IGxldmVsCisgICAgaWYgKCRkaXIgZXEgJy4nIHx8ICRkaXIgZXEgJy4vJykKKyAgICB7CisgICAgICAgICRkaXIgPSAnJzsKKyAgICB9CisgICAgaWYoZXhpc3RzKCRzZWVuZGlycy0+eyRkaXJ9KSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgJGxvZy0+ZGVidWcoImFubm91bmNlZGlyICRkaXIsICRyZXBvZGlyLCAkcmVtb3RlZGlyIiApOworICAgIG15KCR0aGlzUmVtb3RlRGlyLCR0aGlzUmVwb0Rpcik7CisgICAgaWYgKCRkaXIgbmUgIiIpCisgICAgeworICAgICAgICAkdGhpc1JlcG9EaXI9IiRyZXBvZGlyLyRkaXIiOworICAgICAgICBpZigkcmVtb3RlZGlyIGVxICIuIikKKyAgICAgICAgeworICAgICAgICAgICAgJHRoaXNSZW1vdGVEaXI9JGRpcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICR0aGlzUmVtb3RlRGlyPSIkcmVtb3RlZGlyLyRkaXIiOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICR0aGlzUmVwb0Rpcj0kcmVwb2RpcjsKKyAgICAgICAgJHRoaXNSZW1vdGVEaXI9JHJlbW90ZWRpcjsKKyAgICB9CisgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LVF9IHx8ICRzdGF0ZS0+e2dsb2JhbG9wdGlvbnN9ey1xfSApCisgICAgeworICAgICAgICBwcmludCAiRSBjdnMgJHJlcXVlc3Q6IFVwZGF0aW5nICR0aGlzUmVtb3RlRGlyXG4iOworICAgIH0KKworICAgIG15ICgkb3B0X3IpPSRzdGF0ZS0+e29wdH17cn07CisgICAgbXkgJHN0aWNreUluZm87CisgICAgaWYoZXhpc3RzKCRzdGF0ZS0+e29wdH17QX0pKQorICAgIHsKKyAgICAgICAgIyAkc3RpY2t5SW5mbz11bmRlZjsKKyAgICB9CisgICAgZWxzaWYoIGRlZmluZWQoJG9wdF9yKSAmJiAkb3B0X3IgbmUgIiIgKQorICAgICAgICAgICAjIHx8ICggZGVmaW5lZCgkc3RhdGUtPntvcHR9e0R9KSAmJiAkc3RhdGUtPntvcHR9e0R9IG5lICIiICkgIyBUT0RPCisgICAgeworICAgICAgICAkc3RpY2t5SW5mbz17ICd0YWcnID0+IChkZWZpbmVkKCRvcHRfcik/JG9wdF9yOnVuZGVmKSB9OworCisgICAgICAgICMgVE9ETzogQ29udmVydCAtRCB2YWx1ZSBpbnRvIHRoZSBmb3JtIDIwMTEuMDQuMTAuMDQuNDYuNTcsCisgICAgICAgICMgICBzaW1pbGFyIHRvIGFuIGVudHJ5IGxpbmUncyBzdGlja3kgZGF0ZSwgd2l0aG91dCB0aGUgRCBwcmVmaXguCisgICAgICAgICMgICBJdCBzb21ldGltZXMgKGFsd2F5cz8pIGFycml2ZXMgYXMgc29tZXRoaW5nIG1vcmUgbGlrZQorICAgICAgICAjICAgJzEwIEFwciAyMDExIDA0OjQ2OjU3IC0wMDAwJy4uLgorICAgICAgICAjICRzdGlja3lJbmZvPXsgJ2RhdGUnID0+IChkZWZpbmVkKCRzdGlja3lEYXRlKT8kc3RpY2t5RGF0ZTp1bmRlZikgfTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgJHN0aWNreUluZm89Z2V0RGlyU3RpY2t5SW5mbygkc3RhdGUtPntwcmVwZW5kZGlyfSAuICRkaXIpOworICAgIH0KKworICAgIG15ICRzdGlja3lSZXNwb25zZTsKKyAgICBpZihkZWZpbmVkKCRzdGlja3lJbmZvKSkKKyAgICB7CisgICAgICAgICRzdGlja3lSZXNwb25zZSA9ICJTZXQtc3RpY2t5ICR0aGlzUmVtb3RlRGlyL1xuIiAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICIkdGhpc1JlcG9EaXIvXG4iIC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U3RpY2t5VGFnT3JEYXRlKCRzdGlja3lJbmZvKSAuICJcbiI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICRzdGlja3lSZXNwb25zZSA9ICJDbGVhci1zdGlja3kgJHRoaXNSZW1vdGVEaXIvXG4iIC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiR0aGlzUmVwb0Rpci9cbiI7CisgICAgfQorCisgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LW59ICkKKyAgICB7CisgICAgICAgIHByaW50ICRzdGlja3lSZXNwb25zZTsKKworICAgICAgICBwcmludCAiQ2xlYXItc3RhdGljLWRpcmVjdG9yeSAkdGhpc1JlbW90ZURpci9cbiI7CisgICAgICAgIHByaW50ICIkdGhpc1JlcG9EaXIvXG4iOworICAgICAgICBwcmludCAkc3RpY2t5UmVzcG9uc2U7ICMgeWVzLCB0d2ljZQorICAgICAgICBwcmludCAiVGVtcGxhdGUgJHRoaXNSZW1vdGVEaXIvXG4iOworICAgICAgICBwcmludCAiJHRoaXNSZXBvRGlyL1xuIjsKKyAgICAgICAgcHJpbnQgIjBcbiI7CisgICAgfQorCisgICAgJHNlZW5kaXJzLT57JGRpcn0gPSAxOworCisgICAgIyBGVVRVUkU6IFRoaXMgd291bGQgbW9yZSBhY2N1cmF0ZWx5IGVtdWxhdGUgQ1ZTIGJ5IHNlbmRpbmcKKyAgICAjICAgYW5vdGhlciBjb3B5IG9mIHN0aWNreSBhZnRlciBwcm9jZXNzaW5nIHRoZSBmaWxlcyBpbiB0aGF0CisgICAgIyAgIGRpcmVjdG9yeS4gIE9yIGludGVybWVkaWF0ZTogcGVyaGFwcyBzZW5kIGFsbCBzdGlja3kncyBmb3IKKyAgICAjICAgJHNlZW5kaXJzIGFmdGVyIHByb2Nlc3NpbmcgYWxsIGZpbGVzLgorfQorCisjIHVwZGF0ZSBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IHllcy4gQWN0dWFsbHkgZG8gYSBjdnMgdXBkYXRlIGNvbW1hbmQuIFRoaXMgdXNlcyBhbnkKKyMgICAgIHByZXZpb3VzIEFyZ3VtZW50LCBEaXJlY3RvcnksIEVudHJ5LCBvciBNb2RpZmllZCByZXF1ZXN0cywgaWYgdGhleSBoYXZlCisjICAgICBiZWVuIHNlbnQuIFRoZSBsYXN0IERpcmVjdG9yeSBzZW50IHNwZWNpZmllcyB0aGUgd29ya2luZyBkaXJlY3RvcnkgYXQgdGhlCisjICAgICB0aW1lIG9mIHRoZSBvcGVyYXRpb24uIFRoZSAtSSBvcHRpb24gaXMgbm90IHVzZWQtLWZpbGVzIHdoaWNoIHRoZSBjbGllbnQKKyMgICAgIGNhbiBkZWNpZGUgd2hldGhlciB0byBpZ25vcmUgYXJlIG5vdCBtZW50aW9uZWQgYW5kIHRoZSBjbGllbnQgc2VuZHMgdGhlCisjICAgICBRdWVzdGlvbmFibGUgcmVxdWVzdCBmb3Igb3RoZXJzLgorc3ViIHJlcV91cGRhdGUKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgICRsb2ctPmRlYnVnKCJyZXFfdXBkYXRlIDogIiAuICggZGVmaW5lZCgkZGF0YSkgPyAkZGF0YSA6ICJbTlVMTF0iICkpOworCisgICAgYXJnc3BsaXQoInVwZGF0ZSIpOworCisgICAgIworICAgICMgSXQgbWF5IGp1c3QgYmUgYSBjbGllbnQgZXhwbG9yaW5nIHRoZSBhdmFpbGFibGUgaGVhZHMvbW9kdWxlcworICAgICMgaW4gdGhhdCBjYXNlLCBsaXN0IHRoZW0gYXMgdG9wIGxldmVsIGRpcmVjdG9yaWVzIGFuZCBsZWF2ZSBpdAorICAgICMgYXQgdGhhdC4gRWNsaXBzZSB1c2VzIHRoaXMgdGVjaG5pcXVlIHRvIG9mZmVyIHlvdSBhIGxpc3Qgb2YKKyAgICAjIHByb2plY3RzIChoZWFkcyBpbiB0aGlzIGNhc2UpIHRvIGNoZWNrb3V0LgorICAgICMKKyAgICBpZiAoJHN0YXRlLT57bW9kdWxlfSBlcSAnJykgeworICAgICAgICBteSAkc2hvd3JlZiA9IHNhZmVfcGlwZV9jYXB0dXJlKHF3KGdpdCBzaG93LXJlZiAtLWhlYWRzKSk7CisgICAgICAgIHByaW50ICJFIGN2cyB1cGRhdGU6IFVwZGF0aW5nIC5cbiI7CisgICAgICAgIGZvciBteSAkbGluZSAoc3BsaXQgJ1xuJywgJHNob3dyZWYpIHsKKyAgICAgICAgICAgIGlmICggJGxpbmUgPX4gbSUgcmVmcy9oZWFkcy8oLiopJCUgKSB7CisgICAgICAgICAgICAgICAgcHJpbnQgIkUgY3ZzIHVwZGF0ZTogTmV3IGRpcmVjdG9yeSBgJDEnXG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByaW50ICJva1xuIjsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisKKyAgICAjIEdyYWIgYSBoYW5kbGUgdG8gdGhlIFNRTGl0ZSBkYiBhbmQgZG8gYW55IG5lY2Vzc2FyeSB1cGRhdGVzCisgICAgbXkgJHVwZGF0ZXIgPSBHSVRDVlM6OnVwZGF0ZXItPm5ldygkc3RhdGUtPntDVlNST09UfSwgJHN0YXRlLT57bW9kdWxlfSwgJGxvZyk7CisKKyAgICAkdXBkYXRlci0+dXBkYXRlKCk7CisKKyAgICBhcmdzZnJvbWRpcigkdXBkYXRlcik7CisKKyAgICAjJGxvZy0+ZGVidWcoInVwZGF0ZSBzdGF0ZSA6ICIgLiBEdW1wZXIoJHN0YXRlKSk7CisKKyAgICBteSgkcmVwb0Rpcik7CisgICAgJHJlcG9EaXI9JHN0YXRlLT57Q1ZTUk9PVH0gLiAiLyRzdGF0ZS0+e21vZHVsZX0vJHN0YXRlLT57cHJlcGVuZGRpcn0iOworCisgICAgbXkgJXNlZW5kaXJzID0gKCk7CisKKyAgICAjIGZvcmVhY2ggZmlsZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSAuLi4KKyAgICBmb3JlYWNoIG15ICRhcmdzRmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCisgICAgeworICAgICAgICBteSAkZmlsZW5hbWU7CisgICAgICAgICRmaWxlbmFtZSA9IGZpbGVjbGVhbnVwKCRhcmdzRmlsZW5hbWUpOworCisgICAgICAgICRsb2ctPmRlYnVnKCJQcm9jZXNzaW5nIGZpbGUgJGZpbGVuYW1lIik7CisKKyAgICAgICAgIyBpZiB3ZSBoYXZlIGEgLUMgd2Ugc2hvdWxkIHByZXRlbmQgd2UgbmV2ZXIgc2F3IG1vZGlmaWVkIHN0dWZmCisgICAgICAgIGlmICggZXhpc3RzICggJHN0YXRlLT57b3B0fXtDfSApICkKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfaGFzaH07CisgICAgICAgICAgICBkZWxldGUgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX07CisgICAgICAgICAgICAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3VuY2hhbmdlZH0gPSAxOworICAgICAgICB9CisKKyAgICAgICAgbXkgJHN0aWNreUluZm8gPSByZXNvbHZlU3RpY2t5SW5mbygkZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57b3B0fXtyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhdGUtPntvcHR9e0R9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0cygkc3RhdGUtPntvcHR9e0F9KSk7CisgICAgICAgIG15ICRtZXRhID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lLCAkc3RpY2t5SW5mbyk7CisKKyAgICAgICAgIyBJZiAtcCB3YXMgZ2l2ZW4sICJwcmludCIgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXF1ZXN0ZWQgcmV2aXNpb24uCisgICAgICAgIGlmICggZXhpc3RzICggJHN0YXRlLT57b3B0fXtwfSApICkgeworICAgICAgICAgICAgaWYgKCBkZWZpbmVkICggJG1ldGEtPntyZXZpc2lvbn0gKSApIHsKKyAgICAgICAgICAgICAgICAkbG9nLT5pbmZvKCJQcmludGluZyAnJGZpbGVuYW1lJyByZXZpc2lvbiAiIC4gJG1ldGEtPntyZXZpc2lvbn0pOworCisgICAgICAgICAgICAgICAgdHJhbnNtaXRmaWxlKCRtZXRhLT57ZmlsZWhhc2h9LCB7IHByaW50ID0+IDEgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICAjIERpcmVjdG9yaWVzOgorICAgICAgICBwcmVwRGlyRm9yT3V0cHV0KAorICAgICAgICAgICAgICAgIGRpcm5hbWUoJGFyZ3NGaWxlbmFtZSksCisgICAgICAgICAgICAgICAgJHJlcG9EaXIsCisgICAgICAgICAgICAgICAgIi4iLAorICAgICAgICAgICAgICAgIFwlc2VlbmRpcnMsCisgICAgICAgICAgICAgICAgInVwZGF0ZSIsCisgICAgICAgICAgICAgICAgJHN0YXRlLT57ZGlyQXJnc30gKTsKKworICAgICAgICBteSAkd3JldiA9IHJldnBhcnNlKCRmaWxlbmFtZSk7CisKKwlpZiAoICEgZGVmaW5lZCAkbWV0YSApCisJeworCSAgICAkbWV0YSA9IHsKKwkgICAgICAgIG5hbWUgPT4gJGZpbGVuYW1lLAorCSAgICAgICAgcmV2aXNpb24gPT4gJzAnLAorCSAgICAgICAgZmlsZWhhc2ggPT4gJ2FkZGVkJworCSAgICB9OworCSAgICBpZigkd3JldiBuZSAiMCIpCisJICAgIHsKKwkgICAgICAgICRtZXRhLT57ZmlsZWhhc2h9PSdkZWxldGVkJzsKKwkgICAgfQorCX0KKworICAgICAgICBteSAkb2xkbWV0YSA9ICRtZXRhOworCisgICAgICAgICMgSWYgdGhlIHdvcmtpbmcgY29weSBpcyBhbiBvbGQgcmV2aXNpb24sIGxldHMgZ2V0IHRoYXQgdmVyc2lvbiB0b28gZm9yIGNvbXBhcmlzb24uCisgICAgICAgIG15ICRvbGRXcmV2PSR3cmV2OworICAgICAgICBpZihkZWZpbmVkKCRvbGRXcmV2KSkKKyAgICAgICAgeworICAgICAgICAgICAgJG9sZFdyZXY9fnMvXi0vLzsKKyAgICAgICAgICAgIGlmKCRvbGRXcmV2IG5lICRtZXRhLT57cmV2aXNpb259KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICRvbGRtZXRhID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lLCAkb2xkV3Jldik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAjJGxvZy0+ZGVidWcoIlRhcmdldCByZXZpc2lvbiBpcyAkbWV0YS0+e3JldmlzaW9ufSwgY3VycmVudCB3b3JraW5nIHJldmlzaW9uIGlzICR3cmV2Iik7CisKKyAgICAgICAgIyBGaWxlcyBhcmUgdXAgdG8gZGF0ZSBpZiB0aGUgd29ya2luZyBjb3B5IGFuZCByZXBvIGNvcHkgaGF2ZSB0aGUgc2FtZSByZXZpc2lvbiwKKyAgICAgICAgIyBhbmQgdGhlIHdvcmtpbmcgY29weSBpcyB1bm1vZGlmaWVkIF9hbmRfIHRoZSB1c2VyIGhhc24ndCBzcGVjaWZpZWQgLUMKKyAgICAgICAgbmV4dCBpZiAoIGRlZmluZWQgKCAkd3JldiApCisgICAgICAgICAgICAgICAgICBhbmQgZGVmaW5lZCgkbWV0YS0+e3JldmlzaW9ufSkKKyAgICAgICAgICAgICAgICAgIGFuZCAkd3JldiBlcSAkbWV0YS0+e3JldmlzaW9ufQorICAgICAgICAgICAgICAgICAgYW5kICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17dW5jaGFuZ2VkfQorICAgICAgICAgICAgICAgICAgYW5kIG5vdCBleGlzdHMgKCAkc3RhdGUtPntvcHR9e0N9ICkgKTsKKworICAgICAgICAjIElmIHRoZSB3b3JraW5nIGNvcHkgYW5kIHJlcG8gY29weSBoYXZlIHRoZSBzYW1lIHJldmlzaW9uLAorICAgICAgICAjIGJ1dCB0aGUgd29ya2luZyBjb3B5IGlzIG1vZGlmaWVkLCB0ZWxsIHRoZSBjbGllbnQgaXQncyBtb2RpZmllZAorICAgICAgICBpZiAoIGRlZmluZWQgKCAkd3JldiApCisgICAgICAgICAgICAgYW5kIGRlZmluZWQoJG1ldGEtPntyZXZpc2lvbn0pCisgICAgICAgICAgICAgYW5kICR3cmV2IGVxICRtZXRhLT57cmV2aXNpb259CisgICAgICAgICAgICAgYW5kICR3cmV2IG5lICIwIgorICAgICAgICAgICAgIGFuZCBkZWZpbmVkKCRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfaGFzaH0pCisgICAgICAgICAgICAgYW5kIG5vdCBleGlzdHMgKCAkc3RhdGUtPntvcHR9e0N9ICkgKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT5pbmZvKCJUZWxsIHRoZSBjbGllbnQgdGhlIGZpbGUgaXMgbW9kaWZpZWQiKTsKKyAgICAgICAgICAgIHByaW50ICJNVCB0ZXh0IE0gXG4iOworICAgICAgICAgICAgcHJpbnQgIk1UIGZuYW1lICRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgIHByaW50ICJNVCBuZXdsaW5lXG4iOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggJG1ldGEtPntmaWxlaGFzaH0gZXEgImRlbGV0ZWQiICYmICR3cmV2IG5lICIwIiApCisgICAgICAgIHsKKyAgICAgICAgICAgICMgVE9ETzogSWYgaXQgaGFzIGJlZW4gbW9kaWZpZWQgaW4gdGhlIHNhbmRib3gsIGVycm9yIG91dAorICAgICAgICAgICAgIyAgIHdpdGggdGhlIGFwcHJvcHJpYXRlIG1lc3NhZ2UsIHJhdGhlciB0aGFuIGRlbGV0aW5nIGEgbW9kaWZpZWQKKyAgICAgICAgICAgICMgICBmaWxlLgorCisgICAgICAgICAgICBteSAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9IGZpbGVuYW1lc3BsaXQoJGZpbGVuYW1lLDEpOworCisgICAgICAgICAgICAkbG9nLT5pbmZvKCJSZW1vdmluZyAnJGZpbGVuYW1lJyBmcm9tIHdvcmtpbmcgY29weSAobm8gbG9uZ2VyIGluIHRoZSByZXBvKSIpOworCisgICAgICAgICAgICBwcmludCAiRSBjdnMgdXBkYXRlOiBgJGZpbGVuYW1lJyBpcyBubyBsb25nZXIgaW4gdGhlIHJlcG9zaXRvcnlcbiI7CisgICAgICAgICAgICAjIERvbid0IHdhbnQgdG8gYWN0dWFsbHkgX0RPXyB0aGUgdXBkYXRlIGlmIC1uIHNwZWNpZmllZAorICAgICAgICAgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LW59ICkgeworCQlwcmludCAiUmVtb3ZlZCAkZGlycGFydFxuIjsKKwkJcHJpbnQgIiRmaWxlcGFydFxuIjsKKwkgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmICggbm90IGRlZmluZWQgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2hhc2h9ICkKKwkJb3IgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9oYXNofSBlcSAkb2xkbWV0YS0+e2ZpbGVoYXNofQorCQlvciAkbWV0YS0+e2ZpbGVoYXNofSBlcSAnYWRkZWQnICkKKyAgICAgICAgeworICAgICAgICAgICAgIyBub3JtYWwgdXBkYXRlLCBqdXN0IHNlbmQgdGhlIG5ldyByZXZpc2lvbiAoZWl0aGVyIFU9VXBkYXRlLAorICAgICAgICAgICAgIyBvciBBPUFkZCwgb3IgUj1SZW1vdmUpCisJICAgIGlmICggZGVmaW5lZCgkd3JldikgJiYgKCR3cmV2PX4vXi0vKSApCisJICAgIHsKKwkgICAgICAgICRsb2ctPmluZm8oIlRlbGwgdGhlIGNsaWVudCB0aGUgZmlsZSBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwiKTsKKwkJcHJpbnQgIk1UIHRleHQgUiBcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgIk1UIGZuYW1lICRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgICAgICBwcmludCAiTVQgbmV3bGluZVxuIjsKKwkJbmV4dDsKKwkgICAgfQorCSAgICBlbHNpZiAoICghZGVmaW5lZCgkd3JldikgfHwgJHdyZXYgZXEgJzAnKSAmJgorICAgICAgICAgICAgICAgICAgICAoIWRlZmluZWQoJG1ldGEtPntyZXZpc2lvbn0pIHx8ICRtZXRhLT57cmV2aXNpb259IGVxICcwJykgKQorCSAgICB7CisJICAgICAgICAkbG9nLT5pbmZvKCJUZWxsIHRoZSBjbGllbnQgdGhlIGZpbGUgaXMgc2NoZWR1bGVkIGZvciBhZGRpdGlvbiIpOworCQlwcmludCAiTVQgdGV4dCBBIFxuIjsKKyAgICAgICAgICAgICAgICBwcmludCAiTVQgZm5hbWUgJGZpbGVuYW1lXG4iOworICAgICAgICAgICAgICAgIHByaW50ICJNVCBuZXdsaW5lXG4iOworCQluZXh0OworCisJICAgIH0KKwkgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgJGxvZy0+aW5mbygiVXBkYXRpbmdYMyAnJGZpbGVuYW1lJyB0byAiLiRtZXRhLT57cmV2aXNpb259KTsKKyAgICAgICAgICAgICAgICBwcmludCAiTVQgK3VwZGF0ZWRcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgIk1UIHRleHQgVSBcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgIk1UIGZuYW1lICRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgICAgICBwcmludCAiTVQgbmV3bGluZVxuIjsKKwkJcHJpbnQgIk1UIC11cGRhdGVkXG4iOworCSAgICB9CisKKyAgICAgICAgICAgIG15ICggJGZpbGVwYXJ0LCAkZGlycGFydCApID0gZmlsZW5hbWVzcGxpdCgkZmlsZW5hbWUsMSk7CisKKwkgICAgIyBEb24ndCB3YW50IHRvIGFjdHVhbGx5IF9ET18gdGhlIHVwZGF0ZSBpZiAtbiBzcGVjaWZpZWQKKwkgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LW59ICkKKwkgICAgeworCQlpZiAoIGRlZmluZWQgKCAkd3JldiApICkKKwkJeworCQkgICAgIyBpbnN0cnVjdCBjbGllbnQgd2UncmUgc2VuZGluZyBhIGZpbGUgdG8gcHV0IGluIHRoaXMgcGF0aCBhcyBhIHJlcGxhY2VtZW50CisJCSAgICBwcmludCAiVXBkYXRlLWV4aXN0aW5nICRkaXJwYXJ0XG4iOworCQkgICAgJGxvZy0+ZGVidWcoIlVwZGF0aW5nIGV4aXN0aW5nIGZpbGUgJ1VwZGF0ZS1leGlzdGluZyAkZGlycGFydCciKTsKKwkJfSBlbHNlIHsKKwkJICAgICMgaW5zdHJ1Y3QgY2xpZW50IHdlJ3JlIHNlbmRpbmcgYSBmaWxlIHRvIHB1dCBpbiB0aGlzIHBhdGggYXMgYSBuZXcgZmlsZQorCisJCSAgICAkbG9nLT5kZWJ1ZygiQ3JlYXRpbmcgbmV3IGZpbGUgJ0NyZWF0ZWQgJGRpcnBhcnQnIik7CisJCSAgICBwcmludCAiQ3JlYXRlZCAkZGlycGFydFxuIjsKKwkJfQorCQlwcmludCAkc3RhdGUtPntDVlNST09UfSAuICIvJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWVcbiI7CisKKwkJIyB0aGlzIGlzIGFuICJlbnRyaWVzIiBsaW5lCisJCW15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZW5hbWUsInNoYTEiLCRtZXRhLT57ZmlsZWhhc2h9KTsKKyAgICAgICAgICAgICAgICBteSAkZW50cmllc0xpbmUgPSAiLyRmaWxlcGFydC8kbWV0YS0+e3JldmlzaW9ufS8vJGtvcHRzLyI7CisgICAgICAgICAgICAgICAgJGVudHJpZXNMaW5lIC49IGdldFN0aWNreVRhZ09yRGF0ZSgkc3RpY2t5SW5mbyk7CisJCSRsb2ctPmRlYnVnKCRlbnRyaWVzTGluZSk7CisJCXByaW50ICIkZW50cmllc0xpbmVcbiI7CisKKwkJIyBwZXJtaXNzaW9ucworCQkkbG9nLT5kZWJ1ZygiU0VORCA6IHU9JG1ldGEtPnttb2RlfSxnPSRtZXRhLT57bW9kZX0sbz0kbWV0YS0+e21vZGV9Iik7CisJCXByaW50ICJ1PSRtZXRhLT57bW9kZX0sZz0kbWV0YS0+e21vZGV9LG89JG1ldGEtPnttb2RlfVxuIjsKKworCQkjIHRyYW5zbWl0IGZpbGUKKwkJdHJhbnNtaXRmaWxlKCRtZXRhLT57ZmlsZWhhc2h9KTsKKwkgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbXkgKCAkZmlsZXBhcnQsICRkaXJwYXJ0ICkgPSBmaWxlbmFtZXNwbGl0KCRtZXRhLT57bmFtZX0sMSk7CisKKyAgICAgICAgICAgIG15ICRtZXJnZURpciA9IHNldHVwVG1wRGlyKCk7CisKKyAgICAgICAgICAgIG15ICRmaWxlX2xvY2FsID0gJGZpbGVwYXJ0IC4gIi5taW5lIjsKKyAgICAgICAgICAgIG15ICRtZXJnZWRGaWxlID0gIiRtZXJnZURpci8kZmlsZV9sb2NhbCI7CisgICAgICAgICAgICBzeXN0ZW0oImxuIiwiLXMiLCRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfZmlsZW5hbWV9LCAkZmlsZV9sb2NhbCk7CisgICAgICAgICAgICBteSAkZmlsZV9vbGQgPSAkZmlsZXBhcnQgLiAiLiIgLiAkb2xkbWV0YS0+e3JldmlzaW9ufTsKKyAgICAgICAgICAgIHRyYW5zbWl0ZmlsZSgkb2xkbWV0YS0+e2ZpbGVoYXNofSwgeyB0YXJnZXRmaWxlID0+ICRmaWxlX29sZCB9KTsKKyAgICAgICAgICAgIG15ICRmaWxlX25ldyA9ICRmaWxlcGFydCAuICIuIiAuICRtZXRhLT57cmV2aXNpb259OworICAgICAgICAgICAgdHJhbnNtaXRmaWxlKCRtZXRhLT57ZmlsZWhhc2h9LCB7IHRhcmdldGZpbGUgPT4gJGZpbGVfbmV3IH0pOworCisgICAgICAgICAgICAjIHdlIG5lZWQgdG8gbWVyZ2Ugd2l0aCB0aGUgbG9jYWwgY2hhbmdlcyAoIE09c3VjY2Vzc2Z1bCBtZXJnZSwgQz1jb25mbGljdCBtZXJnZSApCisgICAgICAgICAgICAkbG9nLT5pbmZvKCJNZXJnaW5nICRmaWxlX2xvY2FsLCAkZmlsZV9vbGQsICRmaWxlX25ldyIpOworICAgICAgICAgICAgcHJpbnQgIk0gTWVyZ2luZyBkaWZmZXJlbmNlcyBiZXR3ZWVuICRvbGRtZXRhLT57cmV2aXNpb259IGFuZCAkbWV0YS0+e3JldmlzaW9ufSBpbnRvICRmaWxlbmFtZVxuIjsKKworICAgICAgICAgICAgJGxvZy0+ZGVidWcoIlRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIG1lcmdlIGlzICRtZXJnZURpciIpOworCisgICAgICAgICAgICBteSAkcmV0dXJuID0gc3lzdGVtKCJnaXQiLCAibWVyZ2UtZmlsZSIsICRmaWxlX2xvY2FsLCAkZmlsZV9vbGQsICRmaWxlX25ldyk7CisgICAgICAgICAgICAkcmV0dXJuID4+PSA4OworCisgICAgICAgICAgICBjbGVhbnVwVG1wRGlyKCk7CisKKyAgICAgICAgICAgIGlmICggJHJldHVybiA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkbG9nLT5pbmZvKCJNZXJnZWQgc3VjY2Vzc2Z1bGx5Iik7CisgICAgICAgICAgICAgICAgcHJpbnQgIk0gTSAkZmlsZW5hbWVcbiI7CisgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIk1lcmdlZCAkZGlycGFydCIpOworCisgICAgICAgICAgICAgICAgIyBEb24ndCB3YW50IHRvIGFjdHVhbGx5IF9ET18gdGhlIHVwZGF0ZSBpZiAtbiBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICB1bmxlc3MgKCAkc3RhdGUtPntnbG9iYWxvcHRpb25zfXstbn0gKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIk1lcmdlZCAkZGlycGFydFxuIjsKKyAgICAgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoJHN0YXRlLT57Q1ZTUk9PVH0gLiAiLyRzdGF0ZS0+e21vZHVsZX0vJGZpbGVuYW1lIik7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kc3RhdGUtPnttb2R1bGV9LyRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCIkZGlycGFydC8kZmlsZXBhcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiLCRtZXJnZWRGaWxlKTsKKyAgICAgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIi8kZmlsZXBhcnQvJG1ldGEtPntyZXZpc2lvbn0vLyRrb3B0cy8iKTsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGVudHJpZXNMaW5lPSIvJGZpbGVwYXJ0LyRtZXRhLT57cmV2aXNpb259Ly8ka29wdHMvIjsKKyAgICAgICAgICAgICAgICAgICAgJGVudHJpZXNMaW5lIC49IGdldFN0aWNreVRhZ09yRGF0ZSgkc3RpY2t5SW5mbyk7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIkZW50cmllc0xpbmVcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzaWYgKCAkcmV0dXJuID09IDEgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICRsb2ctPmluZm8oIk1lcmdlZCB3aXRoIGNvbmZsaWN0cyIpOworICAgICAgICAgICAgICAgIHByaW50ICJFIGN2cyB1cGRhdGU6IGNvbmZsaWN0cyBmb3VuZCBpbiAkZmlsZW5hbWVcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgIk0gQyAkZmlsZW5hbWVcbiI7CisKKyAgICAgICAgICAgICAgICAjIERvbid0IHdhbnQgdG8gYWN0dWFsbHkgX0RPXyB0aGUgdXBkYXRlIGlmIC1uIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIHVubGVzcyAoICRzdGF0ZS0+e2dsb2JhbG9wdGlvbnN9ey1ufSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcmludCAiTWVyZ2VkICRkaXJwYXJ0XG4iOworICAgICAgICAgICAgICAgICAgICBwcmludCAkc3RhdGUtPntDVlNST09UfSAuICIvJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWVcbiI7CisgICAgICAgICAgICAgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgiJGRpcnBhcnQvJGZpbGVwYXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIiwkbWVyZ2VkRmlsZSk7CisgICAgICAgICAgICAgICAgICAgIG15ICRlbnRyaWVzTGluZSA9ICIvJGZpbGVwYXJ0LyRtZXRhLT57cmV2aXNpb259LysvJGtvcHRzLyI7CisgICAgICAgICAgICAgICAgICAgICRlbnRyaWVzTGluZSAuPSBnZXRTdGlja3lUYWdPckRhdGUoJHN0aWNreUluZm8pOworICAgICAgICAgICAgICAgICAgICBwcmludCAiJGVudHJpZXNMaW5lXG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkbG9nLT53YXJuKCJNZXJnZSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAjIERvbid0IHdhbnQgdG8gYWN0dWFsbHkgX0RPXyB0aGUgdXBkYXRlIGlmIC1uIHNwZWNpZmllZAorICAgICAgICAgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LW59ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAjIHBlcm1pc3Npb25zCisgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIlNFTkQgOiB1PSRtZXRhLT57bW9kZX0sZz0kbWV0YS0+e21vZGV9LG89JG1ldGEtPnttb2RlfSIpOworICAgICAgICAgICAgICAgIHByaW50ICJ1PSRtZXRhLT57bW9kZX0sZz0kbWV0YS0+e21vZGV9LG89JG1ldGEtPnttb2RlfVxuIjsKKworICAgICAgICAgICAgICAgICMgdHJhbnNtaXQgZmlsZSwgZm9ybWF0IGlzIHNpbmdsZSBpbnRlZ2VyIG9uIGEgbGluZSBieSBpdHNlbGYgKGZpbGUKKyAgICAgICAgICAgICAgICAjIHNpemUpIGZvbGxvd2VkIGJ5IHRoZSBmaWxlIGNvbnRlbnRzCisgICAgICAgICAgICAgICAgIyBUT0RPIDogd2Ugc2hvdWxkIGNvcHkgZmlsZXMgaW4gYmxvY2tzCisgICAgICAgICAgICAgICAgbXkgJGRhdGEgPSBzYWZlX3BpcGVfY2FwdHVyZSgnY2F0JywgJG1lcmdlZEZpbGUpOworICAgICAgICAgICAgICAgICRsb2ctPmRlYnVnKCJGaWxlIHNpemUgOiAiIC4gbGVuZ3RoKCRkYXRhKSk7CisgICAgICAgICAgICAgICAgcHJpbnQgbGVuZ3RoKCRkYXRhKSAuICJcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgJGRhdGE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KKworICAgICMgcHJlcERpckZvck91dHB1dCgpIGFueSBvdGhlciBleGlzdGluZyBkaXJlY3RvcmllcyB1bmxlc3MgdGhleSBhbHJlYWR5CisgICAgIyBoYXZlIHRoZSByaWdodCBzdGlja3kgdGFnOgorICAgIHVubGVzcyAoICRzdGF0ZS0+e2dsb2JhbG9wdGlvbnN9e259ICkKKyAgICB7CisgICAgICAgIG15ICRkaXI7CisgICAgICAgIGZvcmVhY2ggJGRpciAoa2V5cygleyRzdGF0ZS0+e2Rpck1hcH19KSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICEgJHNlZW5kaXJzeyRkaXJ9ICYmCisgICAgICAgICAgICAgICAgZXhpc3RzKCRzdGF0ZS0+e2RpckFyZ3N9eyRkaXJ9KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbXkoJG9sZFRhZyk7CisgICAgICAgICAgICAgICAgJG9sZFRhZz0kc3RhdGUtPntkaXJNYXB9eyRkaXJ9e3RhZ3NwZWN9OworCisgICAgICAgICAgICAgICAgdW5sZXNzKCAoIGV4aXN0cygkc3RhdGUtPntvcHR9e0F9KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKCRvbGRUYWcpICkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCBkZWZpbmVkKCRzdGF0ZS0+e29wdH17cn0pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAhZGVmaW5lZCgkb2xkVGFnKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57b3B0fXtyfSBuZSAkb2xkVGFnICkgKSApCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRPRE8/OiBPUiBzdGlja3kgZGlyIGlzIGRpZmZlcmVudC4uLgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwcmVwRGlyRm9yT3V0cHV0KAorICAgICAgICAgICAgICAgICAgICAgICAgJGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICRyZXBvRGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgIi4iLAorICAgICAgICAgICAgICAgICAgICAgICAgXCVzZWVuZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICd1cGRhdGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57ZGlyQXJnc30gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIyBUT0RPPzogQ29uc2lkZXIgc2VuZGluZyBhIGZpbmFsIGR1cGxpY2F0ZSBTdGlja3kgcmVzcG9uc2UKKyAgICAgICAgICAgICMgICB0byBtb3JlIGNsb3NlbHkgbWltaWMgcmVhbCBDVlMuCisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcmludCAib2tcbiI7Cit9CisKK3N1YiByZXFfY2kKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJjaSIpOworCisgICAgIyRsb2ctPmRlYnVnKCJTdGF0ZSA6ICIgLiBEdW1wZXIoJHN0YXRlKSk7CisKKyAgICAkbG9nLT5pbmZvKCJyZXFfY2kgOiAiIC4gKCBkZWZpbmVkKCRkYXRhKSA/ICRkYXRhIDogIltOVUxMXSIgKSk7CisKKyAgICBpZiAoICRzdGF0ZS0+e21ldGhvZH0gZXEgJ3BzZXJ2ZXInIGFuZCAkc3RhdGUtPnt1c2VyfSBlcSAnYW5vbnltb3VzJyApCisgICAgeworICAgICAgICBwcmludCAiZXJyb3IgMSBhbm9ueW1vdXMgdXNlciBjYW5ub3QgY29tbWl0IHZpYSBwc2VydmVyXG4iOworICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKKyAgICAgICAgZXhpdDsKKyAgICB9CisKKyAgICBpZiAoIC1lICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi9pbmRleCIgKQorICAgIHsKKyAgICAgICAgJGxvZy0+d2FybigiZmlsZSAnaW5kZXgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBnaXQgcmVwb3NpdG9yeSIpOworICAgICAgICBwcmludCAiZXJyb3IgMSBJbmRleCBhbHJlYWR5IGV4aXN0cyBpbiBnaXQgcmVwb1xuIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgIGV4aXQ7CisgICAgfQorCisgICAgIyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBTUUxpdGUgZGIgYW5kIGRvIGFueSBuZWNlc3NhcnkgdXBkYXRlcworICAgIG15ICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRzdGF0ZS0+e21vZHVsZX0sICRsb2cpOworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworICAgIG15IEBjb21taXR0ZWRmaWxlcyA9ICgpOworICAgIG15ICVvbGRtZXRhOworICAgIG15ICRzdGlja3lJbmZvOworICAgIG15ICRicmFuY2hSZWY7CisgICAgbXkgJHBhcmVudGhhc2g7CisKKyAgICAjIGZvcmVhY2ggZmlsZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSAuLi4KKyAgICBmb3JlYWNoIG15ICRmaWxlbmFtZSAoIEB7JHN0YXRlLT57YXJnc319ICkKKyAgICB7CisgICAgICAgIG15ICRjb21taXR0ZWRmaWxlID0gJGZpbGVuYW1lOworICAgICAgICAkZmlsZW5hbWUgPSBmaWxlY2xlYW51cCgkZmlsZW5hbWUpOworCisgICAgICAgIG5leHQgdW5sZXNzICggZXhpc3RzICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfZmlsZW5hbWV9IG9yIG5vdCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3VuY2hhbmdlZH0gKTsKKworICAgICAgICAjIyMjIworICAgICAgICAjIEZpZ3VyZSBvdXQgd2hpY2ggYnJhbmNoIGFuZCBwYXJlbnRoYXNoIHdlIGFyZSBjb21taXR0aW5nCisgICAgICAgICMgdG8sIGFuZCBzZXR1cCB3b3JrdHJlZToKKworICAgICAgICAjIHNob3VsZCBhbHdheXMgY29tZSBmcm9tIGVudHJpZXM6CisgICAgICAgIG15ICRmaWxlU3RpY2t5SW5mbyA9IHJlc29sdmVTdGlja3lJbmZvKCRmaWxlbmFtZSk7CisgICAgICAgIGlmKCAhZGVmaW5lZCgkYnJhbmNoUmVmKSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRzdGlja3lJbmZvID0gJGZpbGVTdGlja3lJbmZvOworICAgICAgICAgICAgaWYoIGRlZmluZWQoJHN0aWNreUluZm8pICYmCisgICAgICAgICAgICAgICAgKCBkZWZpbmVkKCRzdGlja3lJbmZvLT57ZGF0ZX0pIHx8CisgICAgICAgICAgICAgICAgICAhZGVmaW5lZCgkc3RpY2t5SW5mby0+e3RhZ30pICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ICJlcnJvciAxIGNhbm5vdCBjb21taXQgd2l0aCBzdGlja3kgZGF0ZSBmb3IgZmlsZSBgJGZpbGVuYW1lJ1xuIjsKKyAgICAgICAgICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKKyAgICAgICAgICAgICAgICBleGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAkYnJhbmNoUmVmID0gInJlZnMvaGVhZHMvJHN0YXRlLT57bW9kdWxlfSI7CisgICAgICAgICAgICBpZiAoIGRlZmluZWQoJHN0aWNreUluZm8pICYmIGRlZmluZWQoJHN0aWNreUluZm8tPnt0YWd9KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJGJyYW5jaFJlZiA9ICJyZWZzL2hlYWRzLyRzdGlja3lJbmZvLT57dGFnfSI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICRwYXJlbnRoYXNoID0gc2FmZV9waXBlX2NhcHR1cmUoJ2dpdCcsICdzaG93LXJlZicsICctcycsICRicmFuY2hSZWYpOworICAgICAgICAgICAgY2hvbXAgJHBhcmVudGhhc2g7CisgICAgICAgICAgICBpZiAoJHBhcmVudGhhc2ggIX4gL15bMC05YS1mXXs0MH0kLykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJHN0aWNreUluZm8pICYmIGRlZmluZWQoJHN0aWNreUluZm8tPnt0YWd9KSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcmludCAiZXJyb3IgMSBzdGlja3kgdGFnIGAkc3RpY2t5SW5mby0+e3RhZ30nIGZvciBmaWxlIGAkZmlsZW5hbWUnIGlzIG5vdCBhIGJyYW5jaFxuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgImVycm9yIDEgcHNlcnZlciBjYW5ub3QgZmluZCB0aGUgY3VycmVudCBIRUFEIG9mIG1vZHVsZSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICAgICAgICAgIGV4aXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldHVwV29ya1RyZWUoJHBhcmVudGhhc2gpOworCisgICAgICAgICAgICAkbG9nLT5pbmZvKCJMb2NrbGVzcyBjb21taXQgc3RhcnQsIGJhc2luZyBjb21taXQgb24gJyR3b3JrLT57d29ya0Rpcn0nLCBpbmRleCBmaWxlIGlzICckd29yay0+e2luZGV4fSciKTsKKworICAgICAgICAgICAgJGxvZy0+aW5mbygiQ3JlYXRlZCBpbmRleCAnJHdvcmstPntpbmRleH0nIGZvciBoZWFkICRzdGF0ZS0+e21vZHVsZX0gLSBleGl0IHN0YXR1cyAkPyIpOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCAhcmVmSGFzaEVxdWFsKCRzdGlja3lJbmZvLCRmaWxlU3RpY2t5SW5mbykgKQorICAgICAgICB7CisgICAgICAgICAgICAjVE9ETzogV2UgY291bGQgc3BsaXQgdGhlIGN2cyBjb21taXQgaW50byBtdWx0aXBsZQorICAgICAgICAgICAgIyAgZ2l0IGNvbW1pdHMgYnkgZGlzdGluY3Qgc3RpY2t5VGFnIHZhbHVlcywgYnV0IHRoYXQKKyAgICAgICAgICAgICMgIGlzIGxvd2lzaCBwcmlvcml0eS4KKyAgICAgICAgICAgIHByaW50ICJlcnJvciAxIENvbW1pdHRpbmcgZGlmZmVyZW50IGZpbGVzIHRvIGRpZmZlcmVudCIKKyAgICAgICAgICAgICAgICAgIC4gIiBicmFuY2hlcyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZFxuIjsKKyAgICAgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICAgICAgZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgICMjIyMjCisgICAgICAgICMgUHJvY2VzcyB0aGlzIGZpbGU6CisKKyAgICAgICAgbXkgJG1ldGEgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUsJHN0aWNreUluZm8pOworCSRvbGRtZXRheyRmaWxlbmFtZX0gPSAkbWV0YTsKKworICAgICAgICBteSAkd3JldiA9IHJldnBhcnNlKCRmaWxlbmFtZSk7CisKKyAgICAgICAgbXkgKCAkZmlsZXBhcnQsICRkaXJwYXJ0ICkgPSBmaWxlbmFtZXNwbGl0KCRmaWxlbmFtZSk7CisKKwkjIGRvIGEgY2hlY2tvdXQgb2YgdGhlIGZpbGUgaWYgaXQgaXMgcGFydCBvZiB0aGlzIHRyZWUKKyAgICAgICAgaWYgKCR3cmV2KSB7CisgICAgICAgICAgICBzeXN0ZW0oJ2dpdCcsICdjaGVja291dC1pbmRleCcsICctZicsICctdScsICRmaWxlbmFtZSk7CisgICAgICAgICAgICB1bmxlc3MgKCQ/ID09IDApIHsKKyAgICAgICAgICAgICAgICBkaWUgIkVycm9yIHJ1bm5pbmcgZ2l0LWNoZWNrb3V0LWluZGV4IC1mIC11ICRmaWxlbmFtZSA6ICQhIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG15ICRhZGRmbGFnID0gMDsKKyAgICAgICAgbXkgJHJtZmxhZyA9IDA7CisgICAgICAgICRybWZsYWcgPSAxIGlmICggZGVmaW5lZCgkd3JldikgYW5kICgkd3Jldj1+L14tLykgKTsKKyAgICAgICAgJGFkZGZsYWcgPSAxIHVubGVzcyAoIC1lICRmaWxlbmFtZSApOworCisgICAgICAgICMgRG8gdXAgdG8gZGF0ZSBjaGVja2luZworICAgICAgICB1bmxlc3MgKCAkYWRkZmxhZyBvciAkd3JldiBlcSAkbWV0YS0+e3JldmlzaW9ufSBvcgorICAgICAgICAgICAgICAgICAoICRybWZsYWcgYW5kICR3cmV2IGVxICItJG1ldGEtPntyZXZpc2lvbn0iICkgKQorICAgICAgICB7CisgICAgICAgICAgICAjIGZhaWwgZXZlcnl0aGluZyBpZiBhbiB1cCB0byBkYXRlIGNoZWNrIGZhaWxzCisgICAgICAgICAgICBwcmludCAiZXJyb3IgMSBVcCB0byBkYXRlIGNoZWNrIGZhaWxlZCBmb3IgJGZpbGVuYW1lXG4iOworICAgICAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgICAgICBleGl0OworICAgICAgICB9CisKKyAgICAgICAgcHVzaCBAY29tbWl0dGVkZmlsZXMsICRjb21taXR0ZWRmaWxlOworICAgICAgICAkbG9nLT5pbmZvKCJDb21taXR0aW5nICRmaWxlbmFtZSIpOworCisgICAgICAgIHN5c3RlbSgibWtkaXIiLCItcCIsJGRpcnBhcnQpIHVubGVzcyAoIC1kICRkaXJwYXJ0ICk7CisKKyAgICAgICAgdW5sZXNzICggJHJtZmxhZyApCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPmRlYnVnKCJyZW5hbWUgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX0gJGZpbGVuYW1lIik7CisgICAgICAgICAgICByZW5hbWUgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX0sJGZpbGVuYW1lOworCisgICAgICAgICAgICAjIENhbGN1bGF0ZSBtb2RlcyB0byByZW1vdmUKKyAgICAgICAgICAgIG15ICRpbnZtb2RlID0gIiI7CisgICAgICAgICAgICBmb3JlYWNoICggcXcgKHIgdyB4KSApIHsgJGludm1vZGUgLj0gJF8gdW5sZXNzICggJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9tb2RlfSA9fiAvJF8vICk7IH0KKworICAgICAgICAgICAgJGxvZy0+ZGVidWcoImNobW9kIHUrIiAuICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfbW9kZX0gLiAiLSIgLiAkaW52bW9kZSAuICIgJGZpbGVuYW1lIik7CisgICAgICAgICAgICBzeXN0ZW0oImNobW9kIiwidSsiIC4gICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfbW9kZX0gLiAiLSIgLiAkaW52bW9kZSwgJGZpbGVuYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggJHJtZmxhZyApCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPmluZm8oIlJlbW92aW5nIGZpbGUgJyRmaWxlbmFtZSciKTsKKyAgICAgICAgICAgIHVubGluaygkZmlsZW5hbWUpOworICAgICAgICAgICAgc3lzdGVtKCJnaXQiLCAidXBkYXRlLWluZGV4IiwgIi0tcmVtb3ZlIiwgJGZpbGVuYW1lKTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiAoICRhZGRmbGFnICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+aW5mbygiQWRkaW5nIGZpbGUgJyRmaWxlbmFtZSciKTsKKyAgICAgICAgICAgIHN5c3RlbSgiZ2l0IiwgInVwZGF0ZS1pbmRleCIsICItLWFkZCIsICRmaWxlbmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkbG9nLT5pbmZvKCJVcGRhdGluZ1gyIGZpbGUgJyRmaWxlbmFtZSciKTsKKyAgICAgICAgICAgIHN5c3RlbSgiZ2l0IiwgInVwZGF0ZS1pbmRleCIsICRmaWxlbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bmxlc3MgKCBzY2FsYXIoQGNvbW1pdHRlZGZpbGVzKSA+IDAgKQorICAgIHsKKyAgICAgICAgcHJpbnQgIkUgTm8gZmlsZXMgdG8gY29tbWl0XG4iOworICAgICAgICBwcmludCAib2tcbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbXkgJHRyZWVoYXNoID0gc2FmZV9waXBlX2NhcHR1cmUocXcoZ2l0IHdyaXRlLXRyZWUpKTsKKyAgICBjaG9tcCAkdHJlZWhhc2g7CisKKyAgICAkbG9nLT5kZWJ1ZygiVHJlZWhhc2ggOiAkdHJlZWhhc2gsIFBhcmVudGhhc2ggOiAkcGFyZW50aGFzaCIpOworCisgICAgIyB3cml0ZSBvdXIgY29tbWl0IG1lc3NhZ2Ugb3V0IGlmIHdlIGhhdmUgb25lIC4uLgorICAgIG15ICggJG1zZ19maCwgJG1zZ19maWxlbmFtZSApID0gdGVtcGZpbGUoIERJUiA9PiAkVEVNUF9ESVIgKTsKKyAgICBwcmludCAkbXNnX2ZoICRzdGF0ZS0+e29wdH17bX07IyBpZiAoIGV4aXN0cyAoICRzdGF0ZS0+e29wdH17bX0gKSApOworICAgIGlmICggZGVmaW5lZCAoICRjZmctPntnaXRjdnN9e2NvbW1pdG1zZ2Fubm90YXRpb259ICkgKSB7CisgICAgICAgIGlmICgkY2ZnLT57Z2l0Y3ZzfXtjb21taXRtc2dhbm5vdGF0aW9ufSAhfiAvXlxzKiQvICkgeworICAgICAgICAgICAgcHJpbnQgJG1zZ19maCAiXG5cbiIuJGNmZy0+e2dpdGN2c317Y29tbWl0bXNnYW5ub3RhdGlvbn0uIlxuIgorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnQgJG1zZ19maCAiXG5cbnZpYSBnaXQtQ1ZTIGVtdWxhdG9yXG4iOworICAgIH0KKyAgICBjbG9zZSAkbXNnX2ZoOworCisgICAgbXkgJGNvbW1pdGhhc2ggPSBzYWZlX3BpcGVfY2FwdHVyZSgnZ2l0JywgJ2NvbW1pdC10cmVlJywgJHRyZWVoYXNoLCAnLXAnLCAkcGFyZW50aGFzaCwgJy1GJywgJG1zZ19maWxlbmFtZSk7CisgICAgY2hvbXAoJGNvbW1pdGhhc2gpOworICAgICRsb2ctPmluZm8oIkNvbW1pdCBoYXNoIDogJGNvbW1pdGhhc2giKTsKKworICAgIHVubGVzcyAoICRjb21taXRoYXNoID1+IC9bYS16QS1aMC05XXs0MH0vICkKKyAgICB7CisgICAgICAgICRsb2ctPndhcm4oIkNvbW1pdCBmYWlsZWQgKEludmFsaWQgY29tbWl0IGhhc2gpIik7CisgICAgICAgIHByaW50ICJlcnJvciAxIENvbW1pdCBmYWlsZWQgKHVua25vd24gcmVhc29uKVxuIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgIGV4aXQ7CisgICAgfQorCisJIyMjIEVtdWxhdGUgZ2l0LXJlY2VpdmUtcGFjayBieSBydW5uaW5nIGhvb2tzL3VwZGF0ZQorCW15IEBob29rID0gKCAkRU5We0dJVF9ESVJ9Lidob29rcy91cGRhdGUnLCAkYnJhbmNoUmVmLAorCQkJJHBhcmVudGhhc2gsICRjb21taXRoYXNoICk7CisJaWYoIC14ICRob29rWzBdICkgeworCQl1bmxlc3MoIHN5c3RlbSggQGhvb2sgKSA9PSAwICkKKwkJeworCQkJJGxvZy0+d2FybigiQ29tbWl0IGZhaWxlZCAodXBkYXRlIGhvb2sgZGVjbGluZWQgdG8gdXBkYXRlIHJlZikiKTsKKwkJCXByaW50ICJlcnJvciAxIENvbW1pdCBmYWlsZWQgKHVwZGF0ZSBob29rIGRlY2xpbmVkKVxuIjsKKwkJCWNsZWFudXBXb3JrVHJlZSgpOworCQkJZXhpdDsKKwkJfQorCX0KKworCSMjIyBVcGRhdGUgdGhlIHJlZgorCWlmIChzeXN0ZW0ocXcoZ2l0IHVwZGF0ZS1yZWYgLW0pLCAiY3Zzc2VydmVyIGNpIiwKKwkJCSRicmFuY2hSZWYsICRjb21taXRoYXNoLCAkcGFyZW50aGFzaCkpIHsKKwkJJGxvZy0+d2FybigidXBkYXRlLXJlZiBmb3IgJHN0YXRlLT57bW9kdWxlfSBmYWlsZWQuIik7CisJCXByaW50ICJlcnJvciAxIENhbm5vdCBjb21taXQgLS0gdXBkYXRlIGZpcnN0XG4iOworCQljbGVhbnVwV29ya1RyZWUoKTsKKwkJZXhpdDsKKwl9CisKKwkjIyMgRW11bGF0ZSBnaXQtcmVjZWl2ZS1wYWNrIGJ5IHJ1bm5pbmcgaG9va3MvcG9zdC1yZWNlaXZlCisJbXkgJGhvb2sgPSAkRU5We0dJVF9ESVJ9Lidob29rcy9wb3N0LXJlY2VpdmUnOworCWlmKCAteCAkaG9vayApIHsKKwkJb3BlbihteSAkcGlwZSwgInwgJGhvb2siKSB8fCBkaWUgImNhbid0IGZvcmsgJCEiOworCisJCWxvY2FsICRTSUd7UElQRX0gPSBzdWIgeyBkaWUgJ3BpcGUgYnJva2UnIH07CisKKwkJcHJpbnQgJHBpcGUgIiRwYXJlbnRoYXNoICRjb21taXRoYXNoICRicmFuY2hSZWZcbiI7CisKKwkJY2xvc2UgJHBpcGUgfHwgZGllICJiYWQgcGlwZTogJCEgJD8iOworCX0KKworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworCSMjIyBUaGVuIGhvb2tzL3Bvc3QtdXBkYXRlCisJJGhvb2sgPSAkRU5We0dJVF9ESVJ9Lidob29rcy9wb3N0LXVwZGF0ZSc7CisJaWYgKC14ICRob29rKSB7CisJCXN5c3RlbSgkaG9vaywgJGJyYW5jaFJlZik7CisJfQorCisgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCisgICAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKCBAY29tbWl0dGVkZmlsZXMgKQorICAgIHsKKyAgICAgICAgJGZpbGVuYW1lID0gZmlsZWNsZWFudXAoJGZpbGVuYW1lKTsKKworICAgICAgICBteSAkbWV0YSA9ICR1cGRhdGVyLT5nZXRtZXRhKCRmaWxlbmFtZSwkc3RpY2t5SW5mbyk7CisJdW5sZXNzIChkZWZpbmVkICRtZXRhLT57cmV2aXNpb259KSB7CisJICAkbWV0YS0+e3JldmlzaW9ufSA9ICIxLjEiOworCX0KKworICAgICAgICBteSAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9IGZpbGVuYW1lc3BsaXQoJGZpbGVuYW1lLCAxKTsKKworICAgICAgICAkbG9nLT5kZWJ1ZygiQ2hlY2tlZC1pbiAkZGlycGFydCA6ICRmaWxlbmFtZSIpOworCisJcHJpbnQgIk0gJHN0YXRlLT57Q1ZTUk9PVH0vJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWUsdiAgPC0tICAkZGlycGFydCRmaWxlcGFydFxuIjsKKyAgICAgICAgaWYgKCBkZWZpbmVkICRtZXRhLT57ZmlsZWhhc2h9ICYmICRtZXRhLT57ZmlsZWhhc2h9IGVxICJkZWxldGVkIiApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJNIG5ldyByZXZpc2lvbjogZGVsZXRlOyBwcmV2aW91cyByZXZpc2lvbjogJG9sZG1ldGF7JGZpbGVuYW1lfXtyZXZpc2lvbn1cbiI7CisgICAgICAgICAgICBwcmludCAiUmVtb3ZlLWVudHJ5ICRkaXJwYXJ0XG4iOworICAgICAgICAgICAgcHJpbnQgIiRmaWxlbmFtZVxuIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgkbWV0YS0+e3JldmlzaW9ufSBlcSAiMS4xIikgeworCSAgICAgICAgcHJpbnQgIk0gaW5pdGlhbCByZXZpc2lvbjogMS4xXG4iOworICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgIHByaW50ICJNIG5ldyByZXZpc2lvbjogJG1ldGEtPntyZXZpc2lvbn07IHByZXZpb3VzIHJldmlzaW9uOiAkb2xkbWV0YXskZmlsZW5hbWV9e3JldmlzaW9ufVxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ICJDaGVja2VkLWluICRkaXJwYXJ0XG4iOworICAgICAgICAgICAgcHJpbnQgIiRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZW5hbWUsInNoYTEiLCRtZXRhLT57ZmlsZWhhc2h9KTsKKyAgICAgICAgICAgIHByaW50ICIvJGZpbGVwYXJ0LyRtZXRhLT57cmV2aXNpb259Ly8ka29wdHMvIiAuCisgICAgICAgICAgICAgICAgICBnZXRTdGlja3lUYWdPckRhdGUoJHN0aWNreUluZm8pIC4gIlxuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgIHByaW50ICJva1xuIjsKK30KKworc3ViIHJlcV9zdGF0dXMKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJzdGF0dXMiKTsKKworICAgICRsb2ctPmluZm8oInJlcV9zdGF0dXMgOiAiIC4gKCBkZWZpbmVkKCRkYXRhKSA/ICRkYXRhIDogIltOVUxMXSIgKSk7CisgICAgIyRsb2ctPmRlYnVnKCJzdGF0dXMgc3RhdGUgOiAiIC4gRHVtcGVyKCRzdGF0ZSkpOworCisgICAgIyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBTUUxpdGUgZGIgYW5kIGRvIGFueSBuZWNlc3NhcnkgdXBkYXRlcworICAgIG15ICR1cGRhdGVyOworICAgICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRzdGF0ZS0+e21vZHVsZX0sICRsb2cpOworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworICAgICMgaWYgbm8gZmlsZXMgd2VyZSBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gd29yayBvdXQgd2hhdCBmaWxlcyB3ZSBzaG91bGQKKyAgICAjIGJlIHByb3ZpZGluZyBzdGF0dXMgb24gLi4uCisgICAgYXJnc2Zyb21kaXIoJHVwZGF0ZXIpOworCisgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCisgICAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCisgICAgeworICAgICAgICAkZmlsZW5hbWUgPSBmaWxlY2xlYW51cCgkZmlsZW5hbWUpOworCisgICAgICAgIGlmICggZXhpc3RzKCRzdGF0ZS0+e29wdH17bH0pICYmCisgICAgICAgICAgICAgaW5kZXgoJGZpbGVuYW1lLCAnLycsIGxlbmd0aCgkc3RhdGUtPntwcmVwZW5kZGlyfSkpID49IDAgKQorICAgICAgICB7CisgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICBteSAkd3JldiA9IHJldnBhcnNlKCRmaWxlbmFtZSk7CisKKyAgICAgICAgbXkgJHN0aWNreUluZm8gPSByZXNvbHZlU3RpY2t5SW5mbygkZmlsZW5hbWUpOworICAgICAgICBteSAkbWV0YSA9ICR1cGRhdGVyLT5nZXRtZXRhKCRmaWxlbmFtZSwkc3RpY2t5SW5mbyk7CisgICAgICAgIG15ICRvbGRtZXRhID0gJG1ldGE7CisKKyAgICAgICAgIyBJZiB0aGUgd29ya2luZyBjb3B5IGlzIGFuIG9sZCByZXZpc2lvbiwgbGV0cyBnZXQgdGhhdAorICAgICAgICAjIHZlcnNpb24gdG9vIGZvciBjb21wYXJpc29uLgorICAgICAgICBpZiAoIGRlZmluZWQoJHdyZXYpIGFuZCAkd3JldiBuZSAkbWV0YS0+e3JldmlzaW9ufSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG15KCRybVJldik9JHdyZXY7CisgICAgICAgICAgICAkcm1SZXY9fnMvXi0vLzsKKyAgICAgICAgICAgICRvbGRtZXRhID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lLCAkcm1SZXYpOworICAgICAgICB9CisKKyAgICAgICAgIyBUT0RPIDogQWxsIHBvc3NpYmxlIHN0YXR1c2VzIGFyZW4ndCB5ZXQgaW1wbGVtZW50ZWQKKyAgICAgICAgbXkgJHN0YXR1czsKKyAgICAgICAgIyBGaWxlcyBhcmUgdXAgdG8gZGF0ZSBpZiB0aGUgd29ya2luZyBjb3B5IGFuZCByZXBvIGNvcHkgaGF2ZQorICAgICAgICAjIHRoZSBzYW1lIHJldmlzaW9uLCBhbmQgdGhlIHdvcmtpbmcgY29weSBpcyB1bm1vZGlmaWVkCisgICAgICAgIGlmICggZGVmaW5lZCAoICR3cmV2ICkgYW5kIGRlZmluZWQoJG1ldGEtPntyZXZpc2lvbn0pIGFuZAorICAgICAgICAgICAgICR3cmV2IGVxICRtZXRhLT57cmV2aXNpb259IGFuZAorICAgICAgICAgICAgICggKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3VuY2hhbmdlZH0gYW5kCisgICAgICAgICAgICAgICAgICggbm90IGRlZmluZWQgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e2NvbmZsaWN0fSApIG9yCisgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXtjb25mbGljdH0gIX4gL15cKz0vICkgKSBvcgorICAgICAgICAgICAgICAgKCBkZWZpbmVkKCRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfaGFzaH0pIGFuZAorICAgICAgICAgICAgICAgICAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2hhc2h9IGVxCisgICAgICAgICAgICAgICAgICAgICAgICAkbWV0YS0+e2ZpbGVoYXNofSApICkgKQorICAgICAgICB7CisgICAgICAgICAgICAkc3RhdHVzID0gIlVwLXRvLWRhdGUiCisgICAgICAgIH0KKworICAgICAgICAjIE5lZWQgY2hlY2tvdXQgaWYgdGhlIHdvcmtpbmcgY29weSBoYXMgYSBkaWZmZXJlbnQgKHVzdWFsbHkKKyAgICAgICAgIyBvbGRlcikgcmV2aXNpb24gdGhhbiB0aGUgcmVwbyBjb3B5LCBhbmQgdGhlIHdvcmtpbmcgY29weSBpcworICAgICAgICAjIHVubW9kaWZpZWQKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJHdyZXYgKSBhbmQgZGVmaW5lZCAoICRtZXRhLT57cmV2aXNpb259ICkgYW5kCisgICAgICAgICAgICAgJG1ldGEtPntyZXZpc2lvbn0gbmUgJHdyZXYgYW5kCisgICAgICAgICAgICAgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3VuY2hhbmdlZH0gb3IKKyAgICAgICAgICAgICAgICggZGVmaW5lZCgkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2hhc2h9KSBhbmQKKyAgICAgICAgICAgICAgICAgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9oYXNofSBlcQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2xkbWV0YS0+e2ZpbGVoYXNofSApICkgKQorICAgICAgICB7CisgICAgICAgICAgICAkc3RhdHVzIHx8PSAiTmVlZHMgQ2hlY2tvdXQiOworICAgICAgICB9CisKKyAgICAgICAgIyBOZWVkIGNoZWNrb3V0IGlmIGl0IGV4aXN0cyBpbiB0aGUgcmVwbyBidXQgZG9lc24ndCBoYXZlIGEgd29ya2luZworICAgICAgICAjIGNvcHkKKyAgICAgICAgaWYgKCBub3QgZGVmaW5lZCAoICR3cmV2ICkgYW5kIGRlZmluZWQgKCAkbWV0YS0+e3JldmlzaW9ufSApICkKKyAgICAgICAgeworICAgICAgICAgICAgJHN0YXR1cyB8fD0gIk5lZWRzIENoZWNrb3V0IjsKKyAgICAgICAgfQorCisgICAgICAgICMgTG9jYWxseSBtb2RpZmllZCBpZiB3b3JraW5nIGNvcHkgYW5kIHJlcG8gY29weSBoYXZlIHRoZQorICAgICAgICAjIHNhbWUgcmV2aXNpb24gYnV0IHRoZXJlIGFyZSBsb2NhbCBjaGFuZ2VzCisgICAgICAgIGlmICggZGVmaW5lZCAoICR3cmV2ICkgYW5kIGRlZmluZWQoJG1ldGEtPntyZXZpc2lvbn0pIGFuZAorICAgICAgICAgICAgICR3cmV2IGVxICRtZXRhLT57cmV2aXNpb259IGFuZAorICAgICAgICAgICAgICR3cmV2IG5lICIwIiBhbmQKKyAgICAgICAgICAgICAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2ZpbGVuYW1lfSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRzdGF0dXMgfHw9ICJMb2NhbGx5IE1vZGlmaWVkIjsKKyAgICAgICAgfQorCisgICAgICAgICMgTmVlZHMgTWVyZ2UgaWYgd29ya2luZyBjb3B5IHJldmlzaW9uIGlzIGRpZmZlcmVudAorICAgICAgICAjICh1c3VhbGx5IG9sZGVyKSB0aGFuIHJlcG8gY29weSBhbmQgdGhlcmUgYXJlIGxvY2FsIGNoYW5nZXMKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJHdyZXYgKSBhbmQgZGVmaW5lZCAoICRtZXRhLT57cmV2aXNpb259ICkgYW5kCisgICAgICAgICAgICAgJG1ldGEtPntyZXZpc2lvbn0gbmUgJHdyZXYgYW5kCisgICAgICAgICAgICAgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX0gKQorICAgICAgICB7CisgICAgICAgICAgICAkc3RhdHVzIHx8PSAiTmVlZHMgTWVyZ2UiOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXtyZXZpc2lvbn0gKSBhbmQKKyAgICAgICAgICAgICAoICFkZWZpbmVkKCRtZXRhLT57cmV2aXNpb259KSB8fAorICAgICAgICAgICAgICAgJG1ldGEtPntyZXZpc2lvbn0gZXEgIjAiICkgKQorICAgICAgICB7CisgICAgICAgICAgICAkc3RhdHVzIHx8PSAiTG9jYWxseSBBZGRlZCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBkZWZpbmVkICggJHdyZXYgKSBhbmQgZGVmaW5lZCAoICRtZXRhLT57cmV2aXNpb259ICkgYW5kCisgICAgICAgICAgICAgJHdyZXYgZXEgIi0kbWV0YS0+e3JldmlzaW9ufSIgKQorICAgICAgICB7CisgICAgICAgICAgICAkc3RhdHVzIHx8PSAiTG9jYWxseSBSZW1vdmVkIjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGRlZmluZWQgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e2NvbmZsaWN0fSApIGFuZAorICAgICAgICAgICAgICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17Y29uZmxpY3R9ID1+IC9eXCs9LyApCisgICAgICAgIHsKKyAgICAgICAgICAgICRzdGF0dXMgfHw9ICJVbnJlc29sdmVkIENvbmZsaWN0IjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIDAgKQorICAgICAgICB7CisgICAgICAgICAgICAkc3RhdHVzIHx8PSAiRmlsZSBoYWQgY29uZmxpY3RzIG9uIG1lcmdlIjsKKyAgICAgICAgfQorCisgICAgICAgICRzdGF0dXMgfHw9ICJVbmtub3duIjsKKworICAgICAgICBteSAoJGZpbGVwYXJ0KSA9IGZpbGVuYW1lc3BsaXQoJGZpbGVuYW1lKTsKKworICAgICAgICBwcmludCAiTSA9PT09PT09IiAuICggIj0iIHggNjAgKSAuICJcbiI7CisgICAgICAgIHByaW50ICJNIEZpbGU6ICRmaWxlcGFydFx0U3RhdHVzOiAkc3RhdHVzXG4iOworICAgICAgICBpZiAoIGRlZmluZWQoJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXtyZXZpc2lvbn0pICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIk0gV29ya2luZyByZXZpc2lvbjpcdCIgLgorICAgICAgICAgICAgICAgICAgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXtyZXZpc2lvbn0gLiAiXG4iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnQgIk0gV29ya2luZyByZXZpc2lvbjpcdE5vIGVudHJ5IGZvciAkZmlsZW5hbWVcbiI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBkZWZpbmVkKCRtZXRhLT57cmV2aXNpb259KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJNIFJlcG9zaXRvcnkgcmV2aXNpb246XHQiIC4KKyAgICAgICAgICAgICAgICAgICAkbWV0YS0+e3JldmlzaW9ufSAuCisgICAgICAgICAgICAgICAgICAgIlx0JHN0YXRlLT57Q1ZTUk9PVH0vJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWUsdlxuIjsKKyAgICAgICAgICAgIG15KCR0YWdPckRhdGUpPSRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17dGFnX29yX2RhdGV9OworICAgICAgICAgICAgbXkoJHRhZyk9KCR0YWdPckRhdGU9fm0vXlQoLispJC8pOworICAgICAgICAgICAgaWYoICFkZWZpbmVkKCR0YWcpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkdGFnPSIobm9uZSkiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnQgIk0gU3RpY2t5IFRhZzpcdFx0JHRhZ1xuIjsKKyAgICAgICAgICAgIG15KCRkYXRlKT0oJHRhZ09yRGF0ZT1+bS9eRCguKykkLyk7CisgICAgICAgICAgICBpZiggIWRlZmluZWQoJGRhdGUpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkZGF0ZT0iKG5vbmUpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ICJNIFN0aWNreSBEYXRlOlx0XHQkZGF0ZVxuIjsKKyAgICAgICAgICAgIG15KCRvcHRpb25zKT0kc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e29wdGlvbnN9OworICAgICAgICAgICAgaWYoICRvcHRpb25zIGVxICIiICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkb3B0aW9ucz0iKG5vbmUpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ICJNIFN0aWNreSBPcHRpb25zOlx0XHQkb3B0aW9uc1xuIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ICJNIFJlcG9zaXRvcnkgcmV2aXNpb246XHRObyByZXZpc2lvbiBjb250cm9sIGZpbGVcbiI7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgIk1cbiI7CisgICAgfQorCisgICAgcHJpbnQgIm9rXG4iOworfQorCitzdWIgcmVxX2RpZmYKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJkaWZmIik7CisKKyAgICAkbG9nLT5kZWJ1ZygicmVxX2RpZmYgOiAiIC4gKCBkZWZpbmVkKCRkYXRhKSA/ICRkYXRhIDogIltOVUxMXSIgKSk7CisgICAgIyRsb2ctPmRlYnVnKCJzdGF0dXMgc3RhdGUgOiAiIC4gRHVtcGVyKCRzdGF0ZSkpOworCisgICAgbXkgKCRyZXZpc2lvbjEsICRyZXZpc2lvbjIpOworICAgIGlmICggZGVmaW5lZCAoICRzdGF0ZS0+e29wdH17cn0gKSBhbmQgcmVmICRzdGF0ZS0+e29wdH17cn0gZXEgIkFSUkFZIiApCisgICAgeworICAgICAgICAkcmV2aXNpb24xID0gJHN0YXRlLT57b3B0fXtyfVswXTsKKyAgICAgICAgJHJldmlzaW9uMiA9ICRzdGF0ZS0+e29wdH17cn1bMV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgJHJldmlzaW9uMSA9ICRzdGF0ZS0+e29wdH17cn07CisgICAgfQorCisgICAgJGxvZy0+ZGVidWcoIkRpZmZpbmcgcmV2aXNpb25zICIgLgorICAgICAgICAgICAgICAgICggZGVmaW5lZCgkcmV2aXNpb24xKSA/ICRyZXZpc2lvbjEgOiAiW05VTExdIiApIC4KKyAgICAgICAgICAgICAgICAiIGFuZCAiIC4gKCBkZWZpbmVkKCRyZXZpc2lvbjIpID8gJHJldmlzaW9uMiA6ICJbTlVMTF0iICkgKTsKKworICAgICMgR3JhYiBhIGhhbmRsZSB0byB0aGUgU1FMaXRlIGRiIGFuZCBkbyBhbnkgbmVjZXNzYXJ5IHVwZGF0ZXMKKyAgICBteSAkdXBkYXRlcjsKKyAgICAkdXBkYXRlciA9IEdJVENWUzo6dXBkYXRlci0+bmV3KCRzdGF0ZS0+e0NWU1JPT1R9LCAkc3RhdGUtPnttb2R1bGV9LCAkbG9nKTsKKyAgICAkdXBkYXRlci0+dXBkYXRlKCk7CisKKyAgICAjIGlmIG5vIGZpbGVzIHdlcmUgc3BlY2lmaWVkLCB3ZSBuZWVkIHRvIHdvcmsgb3V0IHdoYXQgZmlsZXMgd2Ugc2hvdWxkCisgICAgIyBiZSBwcm92aWRpbmcgc3RhdHVzIG9uIC4uLgorICAgIGFyZ3Nmcm9tZGlyKCR1cGRhdGVyKTsKKworICAgIG15KCRmb3VuZERpZmYpOworCisgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCisgICAgZm9yZWFjaCBteSAkYXJnRmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCisgICAgeworICAgICAgICBteSgkZmlsZW5hbWUpID0gZmlsZWNsZWFudXAoJGFyZ0ZpbGVuYW1lKTsKKworICAgICAgICBteSAoICRmaCwgJGZpbGUxLCAkZmlsZTIsICRtZXRhMSwgJG1ldGEyLCAkZmlsZWRpZmYgKTsKKworICAgICAgICBteSAkd3JldiA9IHJldnBhcnNlKCRmaWxlbmFtZSk7CisKKyAgICAgICAgIyBQcmlvcml0eSBmb3IgcmV2aXNpb24xOgorICAgICAgICAjICAxLiBGaXJzdCAtciAobWlzc2luZyBmaWxlOiBjaGVjayAtTikKKyAgICAgICAgIyAgMi4gd3JldiBmcm9tIGNsaWVudCdzIEVudHJ5IGxpbmUKKyAgICAgICAgIyAgICAgIC0gbWlzc2luZyBsaW5lL2ZpbGU6IGNoZWNrIC1OCisgICAgICAgICMgICAgICAtICIwIjogYWRkZWQgZmlsZSBub3QgY29tbWl0dGVkIChlbXB0eSBjb250ZW50cyBmb3IgcmV2MSkKKyAgICAgICAgIyAgICAgIC0gUHJlZml4ZWQgd2l0aCBkYXNoICh0byBiZSByZW1vdmVkKTogY2hlY2sgLU4KKworICAgICAgICBpZiAoIGRlZmluZWQgKCAkcmV2aXNpb24xICkgKQorICAgICAgICB7CisgICAgICAgICAgICAkbWV0YTEgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUsICRyZXZpc2lvbjEpOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCBkZWZpbmVkKCR3cmV2KSAmJiAkd3JldiBuZSAiMCIgKQorICAgICAgICB7CisgICAgICAgICAgICBteSgkcm1SZXYpPSR3cmV2OworICAgICAgICAgICAgJHJtUmV2PX5zL14tLy87CisgICAgICAgICAgICAkbWV0YTEgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUsICRybVJldik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAhZGVmaW5lZCgkbWV0YTEpIHx8CisgICAgICAgICAgICAgJG1ldGExLT57ZmlsZWhhc2h9IGVxICJkZWxldGVkIiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAhZXhpc3RzKCRzdGF0ZS0+e29wdH17Tn0pICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZighZGVmaW5lZCgkcmV2aXNpb24xKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJFIEZpbGUgJGZpbGVuYW1lIGF0IHJldmlzaW9uICRyZXZpc2lvbjEgZG9lc24ndCBleGlzdFxuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2lmKCAhZGVmaW5lZCgkbWV0YTEpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkbWV0YTEgPSB7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPT4gJGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiA9PiAnMCcsCisgICAgICAgICAgICAgICAgICAgIGZpbGVoYXNoID0+ICdkZWxldGVkJworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAjIFByaW9yaXR5IGZvciByZXZpc2lvbjI6CisgICAgICAgICMgIDEuIFNlY29uZCAtciAobWlzc2luZyBmaWxlOiBjaGVjayAtTikKKyAgICAgICAgIyAgMi4gTW9kaWZpZWQgZmlsZSBjb250ZW50cyBmcm9tIGNsaWVudAorICAgICAgICAjICAzLiB3cmV2IGZyb20gY2xpZW50J3MgRW50cnkgbGluZQorICAgICAgICAjICAgICAgLSBtaXNzaW5nIGxpbmUvZmlsZTogY2hlY2sgLU4KKyAgICAgICAgIyAgICAgIC0gUHJlZml4ZWQgd2l0aCBkYXNoICh0byBiZSByZW1vdmVkKTogY2hlY2sgLU4KKworICAgICAgICAjIGlmIHdlIGhhdmUgYSBzZWNvbmQgLXIgc3dpdGNoLCB1c2UgaXQgdG9vCisgICAgICAgIGlmICggZGVmaW5lZCAoICRyZXZpc2lvbjIgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRtZXRhMiA9ICR1cGRhdGVyLT5nZXRtZXRhKCRmaWxlbmFtZSwgJHJldmlzaW9uMik7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoZGVmaW5lZCgkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2ZpbGVuYW1lfSkpCisgICAgICAgIHsKKyAgICAgICAgICAgICRmaWxlMiA9ICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfZmlsZW5hbWV9OworCSAgICAkbWV0YTIgPSB7CisgICAgICAgICAgICAgICAgbmFtZSA9PiAkZmlsZW5hbWUsCisJICAgICAgICByZXZpc2lvbiA9PiAnMCcsCisJICAgICAgICBmaWxlaGFzaCA9PiAnbW9kaWZpZWQnCisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGVsc2lmKCBkZWZpbmVkKCR3cmV2KSAmJiAoJHdyZXYhfi9eLS8pICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIWRlZmluZWQoJHJldmlzaW9uMSkpICAjIG5vIHJldmlzaW9uIGFuZCBubyBtb2RpZmljYXRpb25zOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkbWV0YTIgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUsICR3cmV2KTsKKyAgICAgICAgfQorICAgICAgICBpZighZGVmaW5lZCgkZmlsZTIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRtZXRhMikgfHwKKyAgICAgICAgICAgICAgICAgJG1ldGEyLT57ZmlsZWhhc2h9IGVxICJkZWxldGVkIiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICFleGlzdHMoJHN0YXRlLT57b3B0fXtOfSkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIWRlZmluZWQoJHJldmlzaW9uMikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJFIEZpbGUgJGZpbGVuYW1lIGF0IHJldmlzaW9uICRyZXZpc2lvbjIgZG9lc24ndCBleGlzdFxuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNpZiggIWRlZmluZWQoJG1ldGEyKSApCisgICAgICAgICAgICAgICAgeworCSAgICAgICAgICAgICRtZXRhMiA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT4gJGZpbGVuYW1lLAorCSAgICAgICAgICAgICAgICByZXZpc2lvbiA9PiAnMCcsCisJICAgICAgICAgICAgICAgIGZpbGVoYXNoID0+ICdkZWxldGVkJworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCAkbWV0YTEtPntmaWxlaGFzaH0gZXEgJG1ldGEyLT57ZmlsZWhhc2h9ICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+aW5mbygidW5jaGFuZ2VkICRmaWxlbmFtZSIpOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgICMgUmV0cmlldmUgcmV2aXNpb24gY29udGVudHM6CisgICAgICAgICggdW5kZWYsICRmaWxlMSApID0gdGVtcGZpbGUoIERJUiA9PiAkVEVNUF9ESVIsIE9QRU4gPT4gMCApOworICAgICAgICB0cmFuc21pdGZpbGUoJG1ldGExLT57ZmlsZWhhc2h9LCB7IHRhcmdldGZpbGUgPT4gJGZpbGUxIH0pOworCisgICAgICAgIGlmKCFkZWZpbmVkKCRmaWxlMikpCisgICAgICAgIHsKKyAgICAgICAgICAgICggdW5kZWYsICRmaWxlMiApID0gdGVtcGZpbGUoIERJUiA9PiAkVEVNUF9ESVIsIE9QRU4gPT4gMCApOworICAgICAgICAgICAgdHJhbnNtaXRmaWxlKCRtZXRhMi0+e2ZpbGVoYXNofSwgeyB0YXJnZXRmaWxlID0+ICRmaWxlMiB9KTsKKyAgICAgICAgfQorCisgICAgICAgICMgR2VuZXJhdGUgdGhlIGFjdHVhbCBkaWZmOgorICAgICAgICBwcmludCAiTSBJbmRleDogJGFyZ0ZpbGVuYW1lXG4iOworICAgICAgICBwcmludCAiTSA9PT09PT09IiAuICggIj0iIHggNjAgKSAuICJcbiI7CisgICAgICAgIHByaW50ICJNIFJDUyBmaWxlOiAkc3RhdGUtPntDVlNST09UfS8kc3RhdGUtPnttb2R1bGV9LyRmaWxlbmFtZSx2XG4iOworICAgICAgICBpZiAoIGRlZmluZWQgKCAkbWV0YTEgKSAmJiAkbWV0YTEtPntyZXZpc2lvbn0gbmUgIjAiICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIk0gcmV0cmlldmluZyByZXZpc2lvbiAkbWV0YTEtPntyZXZpc2lvbn1cbiIKKyAgICAgICAgfQorICAgICAgICBpZiAoIGRlZmluZWQgKCAkbWV0YTIgKSAmJiAkbWV0YTItPntyZXZpc2lvbn0gbmUgIjAiICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIk0gcmV0cmlldmluZyByZXZpc2lvbiAkbWV0YTItPntyZXZpc2lvbn1cbiIKKyAgICAgICAgfQorICAgICAgICBwcmludCAiTSBkaWZmICI7CisgICAgICAgIGZvcmVhY2ggbXkgJG9wdCAoIHNvcnQga2V5cyAleyRzdGF0ZS0+e29wdH19ICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCByZWYgJHN0YXRlLT57b3B0fXskb3B0fSBlcSAiQVJSQVkiICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICR2YWx1ZSAoIEB7JHN0YXRlLT57b3B0fXskb3B0fX0gKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIi0kb3B0ICR2YWx1ZSAiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnQgIi0kb3B0ICI7CisgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkICggJHN0YXRlLT57b3B0fXskb3B0fSApICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIkc3RhdGUtPntvcHR9eyRvcHR9ICIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgIiRhcmdGaWxlbmFtZVxuIjsKKworICAgICAgICAkbG9nLT5pbmZvKCJEaWZmaW5nICRmaWxlbmFtZSAtciAkbWV0YTEtPntyZXZpc2lvbn0gLXIgIiAuCisgICAgICAgICAgICAgICAgICAgKCAkbWV0YTItPntyZXZpc2lvbn0gb3IgIndvcmtpbmdjb3B5IiApKTsKKworICAgICAgICAjIFRPRE86IFVzZSAtLWxhYmVsIGluc3RlYWQgb2YgLUwgYmVjYXVzZSAtTCBpcyBubyBsb25nZXIKKyAgICAgICAgIyAgZG9jdW1lbnRlZCBhbmQgbWF5IGdvIGF3YXkgc29tZWRheS4gIE5vdCBzdXJlIGlmIHRoZXJlIHRoZXJlIGFyZQorICAgICAgICAjICB2ZXJzaW9ucyB0aGF0IG9ubHkgc3VwcG9ydCAtTCwgd2hpY2ggd291bGQgbWFrZSB0aGlzIGNoYW5nZSByaXNreT8KKyAgICAgICAgIyAgaHR0cDovL29zZGlyLmNvbS9tbC9idWctZ251LXV0aWxzLWdudS8yMDEwLTEyL21zZzAwMDYwLmh0bWwKKyAgICAgICAgIyAgICAoIm1hbiBkaWZmIiBzaG91bGQgYWN0dWFsbHkgZG9jdW1lbnQgdGhlIGJlc3QgbWlncmF0aW9uIHN0cmF0ZWd5LAorICAgICAgICAjICBbY3VycmVudCBiZWhhdmlvciwgZnV0dXJlIGNoYW5nZXMsIG9sZCBjb21wYXRpYmlsaXR5IGlzc3VlcworICAgICAgICAjICBvciBsYWNrIHRoZXJlb2YsIGV0Y10sIG5vdCBqdXN0IHN0b3AgbWVudGlvbmluZyB0aGUgb3B0aW9uLi4uKQorICAgICAgICAjIFRPRE86IFJlYWwgQ1ZTIHNlZW1zIHRvIGluY2x1ZGUgYSBkYXRlIGluIHRoZSBsYWJlbCwgYmVmb3JlCisgICAgICAgICMgIHRoZSByZXZpc2lvbiBwYXJ0LCB3aXRob3V0IHRoZSBrZXl3b3JkICJyZXZpc2lvbiIuICBUaGUgZm9sbG93aW5nCisgICAgICAgICMgIGhhcyBtaW5pbWFsIGNoYW5nZXMgY29tcGFyZWQgdG8gb3JpZ2luYWwgdmVyc2lvbnMgb2YKKyAgICAgICAgIyAgZ2l0LWN2c3NlcnZlci5wZXJsLiAgKE1vc3RseSB0YWIgdnMgc3BhY2UgYWZ0ZXIgZmlsZW5hbWUuKQorCisgICAgICAgIG15IChAZGlmZkNtZCkgPSAoICdkaWZmJyApOworICAgICAgICBpZiAoIGV4aXN0cygkc3RhdGUtPntvcHR9e059KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2ggQGRpZmZDbWQsIi1OIjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGV4aXN0cyAkc3RhdGUtPntvcHR9e3V9ICkKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaCBAZGlmZkNtZCwoIi11IiwiLUwiKTsKKyAgICAgICAgICAgIGlmKCAkbWV0YTEtPntmaWxlaGFzaH0gZXEgImRlbGV0ZWQiICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwdXNoIEBkaWZmQ21kLCIvZGV2L251bGwiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoIEBkaWZmQ21kLCgiJGFyZ0ZpbGVuYW1lXHRyZXZpc2lvbiAkbWV0YTEtPntyZXZpc2lvbn0iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIGRlZmluZWQoJG1ldGEyLT57ZmlsZWhhc2h9KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICRtZXRhMi0+e2ZpbGVoYXNofSBlcSAiZGVsZXRlZCIgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaCBAZGlmZkNtZCwoIi1MIiwiL2Rldi9udWxsIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaCBAZGlmZkNtZCwoIi1MIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiRhcmdGaWxlbmFtZVx0cmV2aXNpb24gJG1ldGEyLT57cmV2aXNpb259Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoIEBkaWZmQ21kLCgiLUwiLCIkYXJnRmlsZW5hbWVcdHdvcmtpbmcgY29weSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHB1c2ggQGRpZmZDbWQsKCRmaWxlMSwkZmlsZTIpOworICAgICAgICBpZighb3BlbihESUZGLCItfCIsQGRpZmZDbWQpKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJVbmFibGUgdG8gcnVuIGRpZmY6ICQhIik7CisgICAgICAgIH0KKyAgICAgICAgbXkoJGRpZmZMaW5lKTsKKyAgICAgICAgd2hpbGUoZGVmaW5lZCgkZGlmZkxpbmU9PERJRkY+KSkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIk0gJGRpZmZMaW5lIjsKKyAgICAgICAgICAgICRmb3VuZERpZmY9MTsKKyAgICAgICAgfQorICAgICAgICBjbG9zZShESUZGKTsKKyAgICB9CisKKyAgICBpZigkZm91bmREaWZmKQorICAgIHsKKyAgICAgICAgcHJpbnQgImVycm9yICBcbiI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHByaW50ICJva1xuIjsKKyAgICB9Cit9CisKK3N1YiByZXFfbG9nCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICBhcmdzcGxpdCgibG9nIik7CisKKyAgICAkbG9nLT5kZWJ1ZygicmVxX2xvZyA6ICIgLiAoIGRlZmluZWQoJGRhdGEpID8gJGRhdGEgOiAiW05VTExdIiApKTsKKyAgICAjJGxvZy0+ZGVidWcoImxvZyBzdGF0ZSA6ICIgLiBEdW1wZXIoJHN0YXRlKSk7CisKKyAgICBteSAoICRyZXZGaWx0ZXIgKTsKKyAgICBpZiAoIGRlZmluZWQgKCAkc3RhdGUtPntvcHR9e3J9ICkgKQorICAgIHsKKyAgICAgICAgJHJldkZpbHRlciA9ICRzdGF0ZS0+e29wdH17cn07CisgICAgfQorCisgICAgIyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBTUUxpdGUgZGIgYW5kIGRvIGFueSBuZWNlc3NhcnkgdXBkYXRlcworICAgIG15ICR1cGRhdGVyOworICAgICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRzdGF0ZS0+e21vZHVsZX0sICRsb2cpOworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworICAgICMgaWYgbm8gZmlsZXMgd2VyZSBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gd29yayBvdXQgd2hhdCBmaWxlcyB3ZQorICAgICMgc2hvdWxkIGJlIHByb3ZpZGluZyBzdGF0dXMgb24gLi4uCisgICAgYXJnc2Zyb21kaXIoJHVwZGF0ZXIpOworCisgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCisgICAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCisgICAgeworICAgICAgICAkZmlsZW5hbWUgPSBmaWxlY2xlYW51cCgkZmlsZW5hbWUpOworCisgICAgICAgIG15ICRoZWFkbWV0YSA9ICR1cGRhdGVyLT5nZXRtZXRhKCRmaWxlbmFtZSk7CisKKyAgICAgICAgbXkgKCRyZXZpc2lvbnMsJHRvdGFscmV2aXNpb25zKSA9ICR1cGRhdGVyLT5nZXRsb2coJGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV2RmlsdGVyKTsKKworICAgICAgICBuZXh0IHVubGVzcyAoIHNjYWxhcihAJHJldmlzaW9ucykgKTsKKworICAgICAgICBwcmludCAiTSBcbiI7CisgICAgICAgIHByaW50ICJNIFJDUyBmaWxlOiAkc3RhdGUtPntDVlNST09UfS8kc3RhdGUtPnttb2R1bGV9LyRmaWxlbmFtZSx2XG4iOworICAgICAgICBwcmludCAiTSBXb3JraW5nIGZpbGU6ICRmaWxlbmFtZVxuIjsKKyAgICAgICAgcHJpbnQgIk0gaGVhZDogJGhlYWRtZXRhLT57cmV2aXNpb259XG4iOworICAgICAgICBwcmludCAiTSBicmFuY2g6XG4iOworICAgICAgICBwcmludCAiTSBsb2Nrczogc3RyaWN0XG4iOworICAgICAgICBwcmludCAiTSBhY2Nlc3MgbGlzdDpcbiI7CisgICAgICAgIHByaW50ICJNIHN5bWJvbGljIG5hbWVzOlxuIjsKKyAgICAgICAgcHJpbnQgIk0ga2V5d29yZCBzdWJzdGl0dXRpb246IGt2XG4iOworICAgICAgICBwcmludCAiTSB0b3RhbCByZXZpc2lvbnM6ICR0b3RhbHJldmlzaW9ucztcdHNlbGVjdGVkIHJldmlzaW9uczogIiAuCisgICAgICAgICAgICAgIHNjYWxhcihAJHJldmlzaW9ucykgLiAiXG4iOworICAgICAgICBwcmludCAiTSBkZXNjcmlwdGlvbjpcbiI7CisKKyAgICAgICAgZm9yZWFjaCBteSAkcmV2aXNpb24gKCBAJHJldmlzaW9ucyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJNIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CisgICAgICAgICAgICBwcmludCAiTSByZXZpc2lvbiAkcmV2aXNpb24tPntyZXZpc2lvbn1cbiI7CisgICAgICAgICAgICAjIHJlZm9ybWF0IHRoZSBkYXRlIGZvciBsb2cgb3V0cHV0CisgICAgICAgICAgICBpZiAoICRyZXZpc2lvbi0+e21vZGlmaWVkfSA9fiAvKFxkKylccysoXHcrKVxzKyhcZCspXHMrKFxTKykvIGFuZAorICAgICAgICAgICAgICAgICBkZWZpbmVkKCREQVRFX0xJU1QtPnskMn0pICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkcmV2aXNpb24tPnttb2RpZmllZH0gPSBzcHJpbnRmKCclMDRkLyUwMmQvJTAyZCAlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQzLCAkREFURV9MSVNULT57JDJ9LCAkMSwgJDQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICRyZXZpc2lvbi0+e2F1dGhvcn0gPSBjdnNfYXV0aG9yKCRyZXZpc2lvbi0+e2F1dGhvcn0pOworICAgICAgICAgICAgcHJpbnQgIk0gZGF0ZTogJHJldmlzaW9uLT57bW9kaWZpZWR9OyIgLgorICAgICAgICAgICAgICAgICAgIiAgYXV0aG9yOiAkcmV2aXNpb24tPnthdXRob3J9OyAgc3RhdGU6ICIgLgorICAgICAgICAgICAgICAgICAgKCAkcmV2aXNpb24tPntmaWxlaGFzaH0gZXEgImRlbGV0ZWQiID8gImRlYWQiIDogIkV4cCIgKSAuCisgICAgICAgICAgICAgICAgICAiOyAgbGluZXM6ICsyIC0zXG4iOworICAgICAgICAgICAgbXkgJGNvbW1pdG1lc3NhZ2U7CisgICAgICAgICAgICAkY29tbWl0bWVzc2FnZSA9ICR1cGRhdGVyLT5jb21taXRtZXNzYWdlKCRyZXZpc2lvbi0+e2NvbW1pdGhhc2h9KTsKKyAgICAgICAgICAgICRjb21taXRtZXNzYWdlID1+IHMvXi9NIC9tZzsKKyAgICAgICAgICAgIHByaW50ICRjb21taXRtZXNzYWdlIC4gIlxuIjsKKyAgICAgICAgfQorICAgICAgICBwcmludCAiTSA9PT09PT09IiAuICggIj0iIHggNzAgKSAuICJcbiI7CisgICAgfQorCisgICAgcHJpbnQgIm9rXG4iOworfQorCitzdWIgcmVxX2Fubm90YXRlCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICBhcmdzcGxpdCgiYW5ub3RhdGUiKTsKKworICAgICRsb2ctPmluZm8oInJlcV9hbm5vdGF0ZSA6ICIgLiAoIGRlZmluZWQoJGRhdGEpID8gJGRhdGEgOiAiW05VTExdIiApKTsKKyAgICAjJGxvZy0+ZGVidWcoInN0YXR1cyBzdGF0ZSA6ICIgLiBEdW1wZXIoJHN0YXRlKSk7CisKKyAgICAjIEdyYWIgYSBoYW5kbGUgdG8gdGhlIFNRTGl0ZSBkYiBhbmQgZG8gYW55IG5lY2Vzc2FyeSB1cGRhdGVzCisgICAgbXkgJHVwZGF0ZXIgPSBHSVRDVlM6OnVwZGF0ZXItPm5ldygkc3RhdGUtPntDVlNST09UfSwgJHN0YXRlLT57bW9kdWxlfSwgJGxvZyk7CisgICAgJHVwZGF0ZXItPnVwZGF0ZSgpOworCisgICAgIyBpZiBubyBmaWxlcyB3ZXJlIHNwZWNpZmllZCwgd2UgbmVlZCB0byB3b3JrIG91dCB3aGF0IGZpbGVzIHdlIHNob3VsZCBiZSBwcm92aWRpbmcgYW5ub3RhdGUgb24gLi4uCisgICAgYXJnc2Zyb21kaXIoJHVwZGF0ZXIpOworCisgICAgIyB3ZSdsbCBuZWVkIGEgdGVtcG9yYXJ5IGNoZWNrb3V0IGRpcgorICAgIHNldHVwV29ya1RyZWUoKTsKKworICAgICRsb2ctPmluZm8oIlRlbXAgY2hlY2tvdXRkaXIgY3JlYXRpb24gc3VjY2Vzc2Z1bCwgYmFzaW5nIGFubm90YXRlIHNlc3Npb24gd29yayBvbiAnJHdvcmstPnt3b3JrRGlyfScsIGluZGV4IGZpbGUgaXMgJyRFTlZ7R0lUX0lOREVYX0ZJTEV9JyIpOworCisgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCisgICAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCisgICAgeworICAgICAgICAkZmlsZW5hbWUgPSBmaWxlY2xlYW51cCgkZmlsZW5hbWUpOworCisgICAgICAgIG15ICRtZXRhID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lKTsKKworICAgICAgICBuZXh0IHVubGVzcyAoICRtZXRhLT57cmV2aXNpb259ICk7CisKKwkjIGdldCBhbGwgdGhlIGNvbW1pdHMgdGhhdCB0aGlzIGZpbGUgd2FzIGluCisJIyBpbiBkZW5zZSBmb3JtYXQgLS0gYWthIHNraXAgZGVhZCByZXZpc2lvbnMKKyAgICAgICAgbXkgJHJldmlzaW9ucyAgID0gJHVwZGF0ZXItPmdldGhpc3RvcnlkZW5zZSgkZmlsZW5hbWUpOworCW15ICRsYXN0c2VlbmluICA9ICRyZXZpc2lvbnMtPlswXVsyXTsKKworCSMgcG9wdWxhdGUgdGhlIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiB0aGUgbGF0ZXN0IGNvbW1pdCB3ZXJlIHdlIHNhdworCSMgdGhlIGZpbGUgLS0gYnV0IGRvIGl0IGNoZWFwbHkgd2l0aG91dCBjaGVja2luZyBvdXQgYW55IGZpbGVzCisJIyBUT0RPOiBpZiB3ZSBnb3QgYSByZXZpc2lvbiBmcm9tIHRoZSBjbGllbnQsIHVzZSB0aGF0IGluc3RlYWQKKwkjIHRvIGxvb2sgdXAgdGhlIGNvbW1pdGhhc2ggaW4gc3FsaXRlIChzdGlsbCBnb29kIHRvIGRlZmF1bHQgdG8KKwkjIHRoZSBjdXJyZW50IGhlYWQgYXMgd2UgZG8gbm93KQorCXN5c3RlbSgiZ2l0IiwgInJlYWQtdHJlZSIsICRsYXN0c2VlbmluKTsKKwl1bmxlc3MgKCQ/ID09IDApCisJeworCSAgICBwcmludCAiRSBlcnJvciBydW5uaW5nIGdpdC1yZWFkLXRyZWUgJGxhc3RzZWVuaW4gJEVOVntHSVRfSU5ERVhfRklMRX0gJCFcbiI7CisJICAgIHJldHVybjsKKwl9CisJJGxvZy0+aW5mbygiQ3JlYXRlZCBpbmRleCAnJEVOVntHSVRfSU5ERVhfRklMRX0nIHdpdGggY29tbWl0ICRsYXN0c2VlbmluIC0gZXhpdCBzdGF0dXMgJD8iKTsKKworICAgICAgICAjIGRvIGEgY2hlY2tvdXQgb2YgdGhlIGZpbGUKKyAgICAgICAgc3lzdGVtKCdnaXQnLCAnY2hlY2tvdXQtaW5kZXgnLCAnLWYnLCAnLXUnLCAkZmlsZW5hbWUpOworICAgICAgICB1bmxlc3MgKCQ/ID09IDApIHsKKyAgICAgICAgICAgIHByaW50ICJFIGVycm9yIHJ1bm5pbmcgZ2l0LWNoZWNrb3V0LWluZGV4IC1mIC11ICRmaWxlbmFtZSA6ICQhXG4iOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgJGxvZy0+aW5mbygiQW5ub3RhdGUgJGZpbGVuYW1lIik7CisKKyAgICAgICAgIyBQcmVwYXJlIGEgZmlsZSB3aXRoIHRoZSBjb21taXRzIGZyb20gdGhlIGxpbmVhcml6ZWQKKyAgICAgICAgIyBoaXN0b3J5IHRoYXQgYW5ub3RhdGUgc2hvdWxkIGtub3cgYWJvdXQuIFRoaXMgcHJldmVudHMKKyAgICAgICAgIyBnaXQtanNhbm5vdGF0ZSB0ZWxsaW5nIHVzIGFib3V0IGNvbW1pdHMgd2UgYXJlIGhpZGluZworICAgICAgICAjIGZyb20gdGhlIGNsaWVudC4KKworICAgICAgICBteSAkYV9oaW50cyA9ICIkd29yay0+e3dvcmtEaXJ9Ly5hbm5vdGF0ZV9oaW50cyI7CisgICAgICAgIGlmICghb3BlbihBTk5PVEFURUhJTlRTLCAnPicsICRhX2hpbnRzKSkgeworICAgICAgICAgICAgcHJpbnQgIkUgZmFpbGVkIHRvIG9wZW4gJyRhX2hpbnRzJyBmb3Igd3JpdGluZzogJCFcbiI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9yIChteSAkaT0wOyAkaSA8IEAkcmV2aXNpb25zOyAkaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludCBBTk5PVEFURUhJTlRTICRyZXZpc2lvbnMtPlskaV1bMl07CisgICAgICAgICAgICBpZiAoJGkrMSA8IEAkcmV2aXNpb25zKSB7ICMgaGF2ZSB3ZSBnb3QgYSBwYXJlbnQ/CisgICAgICAgICAgICAgICAgcHJpbnQgQU5OT1RBVEVISU5UUyAnICcgLiAkcmV2aXNpb25zLT5bJGkrMV1bMl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludCBBTk5PVEFURUhJTlRTICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBwcmludCBBTk5PVEFURUhJTlRTICJcbiI7CisgICAgICAgIGNsb3NlIEFOTk9UQVRFSElOVFMKKyAgICAgICAgICAgIG9yIChwcmludCAiRSBmYWlsZWQgdG8gd3JpdGUgJGFfaGludHM6ICQhXG4iKSwgcmV0dXJuOworCisgICAgICAgIG15IEBjbWQgPSAocXcoZ2l0IGFubm90YXRlIC1sIC1TKSwgJGFfaGludHMsICRmaWxlbmFtZSk7CisgICAgICAgIGlmICghb3BlbihBTk5PVEFURSwgIi18IiwgQGNtZCkpIHsKKyAgICAgICAgICAgIHByaW50ICJFIGVycm9yIGludm9raW5nICIuIGpvaW4oJyAnLEBjbWQpIC4iOiAkIVxuIjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBteSAkbWV0YWRhdGEgPSB7fTsKKyAgICAgICAgcHJpbnQgIkUgQW5ub3RhdGlvbnMgZm9yICRmaWxlbmFtZVxuIjsKKyAgICAgICAgcHJpbnQgIkUgKioqKioqKioqKioqKioqXG4iOworICAgICAgICB3aGlsZSAoIDxBTk5PVEFURT4gKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobS9eKFthLXpBLVowLTldezQwfSlcdFwoW15cKV0qXCkoLiopJC9pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG15ICRjb21taXRoYXNoID0gJDE7CisgICAgICAgICAgICAgICAgbXkgJGRhdGEgPSAkMjsKKyAgICAgICAgICAgICAgICB1bmxlc3MgKCBkZWZpbmVkICggJG1ldGFkYXRhLT57JGNvbW1pdGhhc2h9ICkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJG1ldGFkYXRhLT57JGNvbW1pdGhhc2h9ID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lLCAkY29tbWl0aGFzaCk7CisgICAgICAgICAgICAgICAgICAgICRtZXRhZGF0YS0+eyRjb21taXRoYXNofXthdXRob3J9ID0gY3ZzX2F1dGhvcigkbWV0YWRhdGEtPnskY29tbWl0aGFzaH17YXV0aG9yfSk7CisgICAgICAgICAgICAgICAgICAgICRtZXRhZGF0YS0+eyRjb21taXRoYXNofXttb2RpZmllZH0gPSBzcHJpbnRmKCIlMDJkLSVzLSUwMmQiLCAkMSwgJDIsICQzKSBpZiAoICRtZXRhZGF0YS0+eyRjb21taXRoYXNofXttb2RpZmllZH0gPX4gL14oXGQrKVxzKFx3Kylcc1xkXGQoXGRcZCkvICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByaW50ZigiTSAlLTdzICAgICAgKCUtOHMgJTEwcyk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGEtPnskY29tbWl0aGFzaH17cmV2aXNpb259LAorICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGEtPnskY29tbWl0aGFzaH17YXV0aG9yfSwKKyAgICAgICAgICAgICAgICAgICAgJG1ldGFkYXRhLT57JGNvbW1pdGhhc2h9e21vZGlmaWVkfSwKKyAgICAgICAgICAgICAgICAgICAgJGRhdGEKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAkbG9nLT53YXJuKCJFcnJvciBpbiBhbm5vdGF0ZSBvdXRwdXQhIExJTkU6ICRfIik7CisgICAgICAgICAgICAgICAgcHJpbnQgIkUgQW5ub3RhdGUgZXJyb3IgXG4iOworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2xvc2UgQU5OT1RBVEU7CisgICAgfQorCisgICAgIyBkb25lOyBnZXQgb3V0IG9mIHRoZSB0ZW1wZGlyCisgICAgY2xlYW51cFdvcmtUcmVlKCk7CisKKyAgICBwcmludCAib2tcbiI7CisKK30KKworIyBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc3RhdGUtPnthcmd1bWVudHN9IGFycmF5IGFuZCBwcm9kdWNlcyB0d28gbmV3IGFycmF5cy4KKyMgVGhlIGZpcnN0IGlzICRzdGF0ZS0+e2FyZ3N9IHdoaWNoIGlzIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSAnLS0nIGFyZ3VtZW50LCBhbmQKKyMgdGhlIHNlY29uZCBpcyAkc3RhdGUtPntmaWxlc30gd2hpY2ggaXMgZXZlcnl0aGluZyBhZnRlciBpdC4KK3N1YiBhcmdzcGxpdAoreworICAgICRzdGF0ZS0+e2FyZ3N9ID0gW107CisgICAgJHN0YXRlLT57ZmlsZXN9ID0gW107CisgICAgJHN0YXRlLT57b3B0fSA9IHt9OworCisgICAgcmV0dXJuIHVubGVzcyggZGVmaW5lZCgkc3RhdGUtPnthcmd1bWVudHN9KSBhbmQgcmVmICRzdGF0ZS0+e2FyZ3VtZW50c30gZXEgIkFSUkFZIiApOworCisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKworICAgIGlmICggZGVmaW5lZCgkdHlwZSkgKQorICAgIHsKKyAgICAgICAgbXkgJG9wdCA9IHt9OworICAgICAgICAkb3B0ID0geyBBID0+IDAsIE4gPT4gMCwgUCA9PiAwLCBSID0+IDAsIGMgPT4gMCwgZiA9PiAwLCBsID0+IDAsIG4gPT4gMCwgcCA9PiAwLCBzID0+IDAsIHIgPT4gMSwgRCA9PiAxLCBkID0+IDEsIGsgPT4gMSwgaiA9PiAxLCB9IGlmICggJHR5cGUgZXEgImNvIiApOworICAgICAgICAkb3B0ID0geyB2ID0+IDAsIGwgPT4gMCwgUiA9PiAwIH0gaWYgKCAkdHlwZSBlcSAic3RhdHVzIiApOworICAgICAgICAkb3B0ID0geyBBID0+IDAsIFAgPT4gMCwgQyA9PiAwLCBkID0+IDAsIGYgPT4gMCwgbCA9PiAwLCBSID0+IDAsIHAgPT4gMCwgayA9PiAxLCByID0+IDEsIEQgPT4gMSwgaiA9PiAxLCBJID0+IDEsIFcgPT4gMSB9IGlmICggJHR5cGUgZXEgInVwZGF0ZSIgKTsKKyAgICAgICAgJG9wdCA9IHsgbCA9PiAwLCBSID0+IDAsIGsgPT4gMSwgRCA9PiAxLCBEID0+IDEsIHIgPT4gMiwgTiA9PiAwIH0gaWYgKCAkdHlwZSBlcSAiZGlmZiIgKTsKKyAgICAgICAgJG9wdCA9IHsgYyA9PiAwLCBSID0+IDAsIGwgPT4gMCwgZiA9PiAwLCBGID0+IDEsIG0gPT4gMSwgciA9PiAxIH0gaWYgKCAkdHlwZSBlcSAiY2kiICk7CisgICAgICAgICRvcHQgPSB7IGsgPT4gMSwgbSA9PiAxIH0gaWYgKCAkdHlwZSBlcSAiYWRkIiApOworICAgICAgICAkb3B0ID0geyBmID0+IDAsIGwgPT4gMCwgUiA9PiAwIH0gaWYgKCAkdHlwZSBlcSAicmVtb3ZlIiApOworICAgICAgICAkb3B0ID0geyBsID0+IDAsIGIgPT4gMCwgaCA9PiAwLCBSID0+IDAsIHQgPT4gMCwgTiA9PiAwLCBTID0+IDAsIHIgPT4gMSwgZCA9PiAxLCBzID0+IDEsIHcgPT4gMSB9IGlmICggJHR5cGUgZXEgImxvZyIgKTsKKworCisgICAgICAgIHdoaWxlICggc2NhbGFyICggQHskc3RhdGUtPnthcmd1bWVudHN9fSApID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG15ICRhcmcgPSBzaGlmdCBAeyRzdGF0ZS0+e2FyZ3VtZW50c319OworCisgICAgICAgICAgICBuZXh0IGlmICggJGFyZyBlcSAiLS0iICk7CisgICAgICAgICAgICBuZXh0IHVubGVzcyAoICRhcmcgPX4gL1xTLyApOworCisgICAgICAgICAgICAjIGlmIHRoZSBhcmd1bWVudCBsb29rcyBsaWtlIGEgc3dpdGNoCisgICAgICAgICAgICBpZiAoICRhcmcgPX4gL14tKFx3KSguKikvICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAjIGlmIGl0J3MgYSBzd2l0Y2ggdGhhdCB0YWtlcyBhbiBhcmd1bWVudAorICAgICAgICAgICAgICAgIGlmICggJG9wdC0+eyQxfSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAjIElmIHRoaXMgc3dpdGNoIGhhcyBhbHJlYWR5IGJlZW4gcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAkb3B0LT57JDF9ID4gMSBhbmQgZXhpc3RzICggJHN0YXRlLT57b3B0fXskMX0gKSApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICRzdGF0ZS0+e29wdH17JDF9ID0gWyAkc3RhdGUtPntvcHR9eyQxfSBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBsZW5ndGgoJDIpID4gMCApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyRzdGF0ZS0+e29wdH17JDF9fSwkMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyRzdGF0ZS0+e29wdH17JDF9fSwgc2hpZnQgQHskc3RhdGUtPnthcmd1bWVudHN9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgdGhlcmUncyBleHRyYSBkYXRhIGluIHRoZSBhcmcsIHVzZSB0aGF0IGFzIHRoZSBhcmd1bWVudCBmb3IgdGhlIHN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBsZW5ndGgoJDIpID4gMCApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57b3B0fXskMX0gPSAkMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57b3B0fXskMX0gPSBzaGlmdCBAeyRzdGF0ZS0+e2FyZ3VtZW50c319OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57b3B0fXskMX0gPSB1bmRlZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHVzaCBAeyRzdGF0ZS0+e2FyZ3N9fSwgJGFyZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBteSAkbW9kZSA9IDA7CisKKyAgICAgICAgZm9yZWFjaCBteSAkdmFsdWUgKCBAeyRzdGF0ZS0+e2FyZ3VtZW50c319ICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCAkdmFsdWUgZXEgIi0tIiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJG1vZGUrKzsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVzaCBAeyRzdGF0ZS0+e2FyZ3N9fSwgJHZhbHVlIGlmICggJG1vZGUgPT0gMCApOworICAgICAgICAgICAgcHVzaCBAeyRzdGF0ZS0+e2ZpbGVzfX0sICR2YWx1ZSBpZiAoICRtb2RlID09IDEgKTsKKyAgICAgICAgfQorICAgIH0KK30KKworIyBVc2VkIGJ5IGFyZ3Nmcm9tZGlyCitzdWIgZXhwYW5kQXJnCit7CisgICAgbXkgKCR1cGRhdGVyLCRvdXROYW1lTWFwLCRvdXREaXJNYXAsJHBhdGgsJGlzRGlyKSA9IEBfOworCisgICAgbXkgJGZ1bGxQYXRoID0gZmlsZWNsZWFudXAoJHBhdGgpOworCisgICAgICAjIElzIGl0IGEgZGlyZWN0b3J5PworICAgIGlmKCBkZWZpbmVkKCRzdGF0ZS0+e2Rpck1hcH17JGZ1bGxQYXRofSkgfHwKKyAgICAgICAgZGVmaW5lZCgkc3RhdGUtPntkaXJNYXB9eyIkZnVsbFBhdGgvIn0pICkKKyAgICB7CisgICAgICAgICAgIyBJdCBpcyBhIGRpcmVjdG9yeSBpbiB0aGUgdXNlcidzIHNhbmRib3guCisgICAgICAgICRpc0Rpcj0xOworCisgICAgICAgIGlmKGRlZmluZWQoJHN0YXRlLT57ZW50cmllc317JGZ1bGxQYXRofSkpCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPmZhdGFsKCJJbmNvbnNpc3RlbnQgZmlsZS9kaXIgdHlwZSIpOworICAgICAgICAgICAgZGllICJJbmNvbnNpc3RlbnQgZmlsZS9kaXIgdHlwZSI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoZGVmaW5lZCgkc3RhdGUtPntlbnRyaWVzfXskZnVsbFBhdGh9KSkKKyAgICB7CisgICAgICAgICAgIyBJdCBpcyBhIGZpbGUgaW4gdGhlIHVzZXIncyBzYW5kYm94LgorICAgICAgICAkaXNEaXI9MDsKKyAgICB9CisgICAgbXkoJHJldkRpck1hcCwkb3RoZXJSZXZEaXJNYXApOworICAgIGlmKCFkZWZpbmVkKCRpc0RpcikgfHwgJGlzRGlyKQorICAgIHsKKyAgICAgICAgICAjIFJlc29sdmUgdmVyc2lvbiB0cmVlIGZvciBzdGlja3kgdGFnOgorICAgICAgICAgICMgKGZvciBub3cgd2Ugb25seSB3YW50IGxpc3Qgb2YgZmlsZXMgZm9yIHRoZSB2ZXJzaW9uLCBub3QKKyAgICAgICAgICAjIHBhcnRpY3VsYXIgdmVyc2lvbnMgb2YgdGhvc2UgZmlsZXM6IGFzc3VtZSBpdCBpcyBhIGRpcmVjdG9yeQorICAgICAgICAgICMgZm9yIHRoZSBtb21lbnQ7IGlnbm9yZSBFbnRyeSdzIHN0aWNrIHRhZykKKworICAgICAgICAgICMgT3JkZXIgb2YgcHJlY2VkZW5jZSBvZiBzdGlja3kgdGFnczoKKyAgICAgICAgICAjICAgIC1BICAgICAgIFtoZWFkXQorICAgICAgICAgICMgICAgLXIgL3RhZy8KKyAgICAgICAgICAjICAgIFtmaWxlIGVudHJ5IHN0aWNreSB0YWcsIGJ1dCB0aGF0IGlzIG9ubHkgcmVsZXZhbnQgdG8gZmlsZXNdCisgICAgICAgICAgIyAgICBbdGhlIHRhZyBzcGVjaWZpZWQgaW4gZGlyIHJlcV9TdGlja3ldCisgICAgICAgICAgIyAgICBbdGhlIHRhZyBzcGVjaWZpZWQgaW4gYSBwYXJlbnQgZGlyIHJlcV9TdGlja3ldCisgICAgICAgICAgIyAgICBbaGVhZF0KKyAgICAgICAgICAjIEFsc28sIC1yIG1heSBhcHBlYXIgdHdpY2UgKGZvciBkaWZmKS4KKyAgICAgICAgICAjCisgICAgICAgICAgIyBGVVRVUkU6IFdoZW4vaWYgLWogKG1lcmdlcykgYXJlIHN1cHBvcnRlZCwgd2UgYWxzbworICAgICAgICAgICMgIG5lZWQgdG8gYWRkIHJlbGV2YW50IGZpbGVzIGZyb20gb25lIG9yIHR3bworICAgICAgICAgICMgIHZlcnNpb25zIHNwZWNpZmllZCB3aXRoIC1qLgorCisgICAgICAgIGlmKGV4aXN0cygkc3RhdGUtPntvcHR9e0F9KSkKKyAgICAgICAgeworICAgICAgICAgICAgJHJldkRpck1hcD0kdXBkYXRlci0+Z2V0UmV2aXNpb25EaXJNYXAoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiggZGVmaW5lZCgkc3RhdGUtPntvcHR9e3J9KSBhbmQKKyAgICAgICAgICAgICAgIHJlZiAkc3RhdGUtPntvcHR9e3J9IGVxICJBUlJBWSIgKQorICAgICAgICB7CisgICAgICAgICAgICAkcmV2RGlyTWFwPSR1cGRhdGVyLT5nZXRSZXZpc2lvbkRpck1hcCgkc3RhdGUtPntvcHR9e3J9WzBdKTsKKyAgICAgICAgICAgICRvdGhlclJldkRpck1hcD0kdXBkYXRlci0+Z2V0UmV2aXNpb25EaXJNYXAoJHN0YXRlLT57b3B0fXtyfVsxXSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoZGVmaW5lZCgkc3RhdGUtPntvcHR9e3J9KSkKKyAgICAgICAgeworICAgICAgICAgICAgJHJldkRpck1hcD0kdXBkYXRlci0+Z2V0UmV2aXNpb25EaXJNYXAoJHN0YXRlLT57b3B0fXtyfSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBteSgkc3RpY2t5KT1nZXREaXJTdGlja3lJbmZvKCRmdWxsUGF0aCk7CisgICAgICAgICAgICAkcmV2RGlyTWFwPSR1cGRhdGVyLT5nZXRSZXZpc2lvbkRpck1hcCgkc3RpY2t5LT57dGFnfSk7CisgICAgICAgIH0KKworICAgICAgICAgICMgSXMgaXQgYSBkaXJlY3Rvcnk/CisgICAgICAgIGlmKCBkZWZpbmVkKCRyZXZEaXJNYXAtPnskZnVsbFBhdGh9KSB8fAorICAgICAgICAgICAgZGVmaW5lZCgkb3RoZXJSZXZEaXJNYXAtPnskZnVsbFBhdGh9KSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRpc0Rpcj0xOworICAgICAgICB9CisgICAgfQorCisgICAgICAjIFdoYXQgdG8gZG8gd2l0aCBpdD8KKyAgICBpZighJGlzRGlyKQorICAgIHsKKyAgICAgICAgJG91dE5hbWVNYXAtPnskZnVsbFBhdGh9PTE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICRvdXREaXJNYXAtPnskZnVsbFBhdGh9PTE7CisKKyAgICAgICAgaWYoZGVmaW5lZCgkcmV2RGlyTWFwLT57JGZ1bGxQYXRofSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFkZERpck1hcEZpbGVzKCR1cGRhdGVyLCRvdXROYW1lTWFwLCRvdXREaXJNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV2RGlyTWFwLT57JGZ1bGxQYXRofSk7CisgICAgICAgIH0KKyAgICAgICAgaWYoIGRlZmluZWQoJG90aGVyUmV2RGlyTWFwKSAmJgorICAgICAgICAgICAgZGVmaW5lZCgkb3RoZXJSZXZEaXJNYXAtPnskZnVsbFBhdGh9KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGFkZERpck1hcEZpbGVzKCR1cGRhdGVyLCRvdXROYW1lTWFwLCRvdXREaXJNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3RoZXJSZXZEaXJNYXAtPnskZnVsbFBhdGh9KTsKKyAgICAgICAgfQorICAgIH0KK30KKworIyBVc2VkIGJ5IGFyZ3Nmcm9tZGlyCisjIEFkZCBlbnRyaWVzIGZyb20gZGlyTWFwIHRvIG91dE5hbWVNYXAuICBBbHNvIHJlY3Vyc2UgaW50byBlbnRyaWVzCisjIHRoYXQgYXJlIHN1YmRpcmVjdG9yaWVzLgorc3ViIGFkZERpck1hcEZpbGVzCit7CisgICAgbXkoJHVwZGF0ZXIsJG91dE5hbWVNYXAsJG91dERpck1hcCwkZGlyTWFwKT1AXzsKKworICAgIG15KCRmdWxsTmFtZSk7CisgICAgZm9yZWFjaCAkZnVsbE5hbWUgKGtleXMoJSRkaXJNYXApKQorICAgIHsKKyAgICAgICAgbXkgJGNsZWFuTmFtZT0kZnVsbE5hbWU7CisgICAgICAgIGlmKGRlZmluZWQoJHN0YXRlLT57cHJlcGVuZGRpcn0pKQorICAgICAgICB7CisgICAgICAgICAgICBpZighKCRjbGVhbk5hbWU9fnMvXlxRJHN0YXRlLT57cHJlcGVuZGRpcn1cRS8vKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkbG9nLT5mYXRhbCgiaW50ZXJuYWwgZXJyb3Igc3RyaXBwaW5nIHByZXBlbmRkaXIiKTsKKyAgICAgICAgICAgICAgICBkaWUgImludGVybmFsIGVycm9yIHN0cmlwcGluZyBwcmVwZW5kZGlyIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCRkaXJNYXAtPnskZnVsbE5hbWV9IGVxICJGIikKKyAgICAgICAgeworICAgICAgICAgICAgJG91dE5hbWVNYXAtPnskY2xlYW5OYW1lfT0xOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCRkaXJNYXAtPnskZnVsbE5hbWV9IGVxICJEIikKKyAgICAgICAgeworICAgICAgICAgICAgaWYoISRzdGF0ZS0+e29wdH17bH0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXhwYW5kQXJnKCR1cGRhdGVyLCRvdXROYW1lTWFwLCRvdXREaXJNYXAsJGNsZWFuTmFtZSwxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPmZhdGFsKCJpbnRlcm5hbCBlcnJvciBpbiBhZGREaXJNYXBGaWxlcyIpOworICAgICAgICAgICAgZGllICJpbnRlcm5hbCBlcnJvciBpbiBhZGREaXJNYXBGaWxlcyI7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyMgVGhpcyBtZXRob2QgcmVwbGFjZXMgJHN0YXRlLT57YXJnc30gd2l0aCBhIGRpcmVjdG9yeS1leHBhbmRlZAorIyBsaXN0IG9mIGFsbCByZWxldmFudCBmaWxlbmFtZXMgKHJlY3Vyc2l2ZWx5IHVubGVzcyAtZCksIGJhc2VkCisjIG9uICRzdGF0ZS0+e2VudHJpZXN9LCBhbmQgdGhlICJjdXJyZW50IiBsaXN0IG9mIGZpbGVzIGluCisjIGVhY2ggZGlyZWN0b3J5LiAgIkN1cnJlbnQiIGZpbGVzIGFzIGRldGVybWluZWQgYnkKKyMgZWl0aGVyIHRoZSByZXF1ZXN0ZWQgKC1yLy1BKSBvciAicmVxX1N0aWNreSIgdmVyc2lvbiBvZgorIyB0aGF0IGRpcmVjdG9yeS4KKyMgICAgQm90aCB0aGUgaW5wdXQgYXJncyBhbmQgdGhlIG5ldyBvdXRwdXQgYXJncyBhcmUgcmVsYXRpdmUKKyMgdG8gdGhlIGN2cy1jbGllbnQncyBDV0QsIGFsdGhvdWdoIHNvbWUgb2YgdGhlIGludGVybmFsCisjIGNvbXB1dGF0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgcHJvamVjdC4KK3N1YiBhcmdzZnJvbWRpcgoreworICAgIG15ICR1cGRhdGVyID0gc2hpZnQ7CisKKyAgICAjIE5vdGVzIGFib3V0IHJlcXVpcmVtZW50cyBmb3Igc3BlY2lmaWMgY2FsbGVyczoKKyAgICAjICAgdXBkYXRlICMgInN0YW5kYXJkIiBjYXNlIChlbnRyaWVzOyBhIHNpbmdsZSAtci8tQS9kZWZhdWx0OyAtbCkKKyAgICAjICAgICAgICAgICMgU3BlY2lhbCBjYXNlOiAtZCBmb3IgY3JlYXRlIG1pc3NpbmcgZGlyZWN0b3JpZXMuCisgICAgIyAgIGRpZmYgIyAwIG9yIDEgLXInczogInN0YW5kYXJkIiBjYXNlLgorICAgICMgICAgICAgICMgMiAtcidzOiBXZSBjb3VsZCBpZ25vcmUgZW50cmllcyAoanVzdCB1c2UgdGhlIHR3byAtcidzKSwKKyAgICAjICAgICAgICAjIGJ1dCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCisgICAgIyAgIGFubm90YXRlICMgInN0YW5kYXJkIiBjYXNlCisgICAgIyAgIGxvZyAjIFB1bnRpbmc6IGxvZyAtciBoYXMgYSBtb3JlIGNvbXBsZXggbm9uLSJzdGFuZGFyZCIKKyAgICAjICAgICAgICMgbWVhbmluZywgYW5kIHdlIGRvbid0IGN1cnJlbnRseSB0cnkgdG8gc3VwcG9ydCBsb2cnaW5nCisgICAgIyAgICAgICAjIGJyYW5jaGVzIGF0IGFsbCAobmVlZCBhIGxvdCBvZiB3b3JrIHRvCisgICAgIyAgICAgICAjIHN1cHBvcnQgQ1ZTLWNvbnNpc3RlbnQgYnJhbmNoIHJlbGF0aXZlIHZlcnNpb24KKyAgICAjICAgICAgICMgbnVtYmVyaW5nKS4KKyNIRVJFOiBCdXQgd2Ugc3RpbGwgd2FudCB0byBleHBhbmQgZGlyZWN0b3JpZXMuICBNYXliZSB3ZSBzaG91bGQKKyMgIGVzc2VudGlhbGx5IGZvcmNlICItQSIuCisgICAgIyAgIHN0YXR1cyAjICJzdGFuZGFyZCIsIGV4Y2VwdCB0aGF0IC1yLy1BL2RlZmF1bHQgYXJlIG5vdCBwb3NzaWJsZS4KKyAgICAjICAgICAgICAgICMgTW9zdGx5IG9ubHkgdXNlZCB0byBleHBhbmQgZW50cmllcyBvbmx5KQorICAgICMKKyAgICAjIERvbid0IHVzZSBhcmdzZnJvbWRpciBhdCBhbGw6CisgICAgIyAgIGFkZCAjIEV4cGxpY2l0IGFyZ3VtZW50cyByZXF1aXJlZC4gIERpcmVjdG9yeSBhcmdzIGltcGx5IGFkZAorICAgICMgICAgICAgIyB0aGUgZGlyZWN0b3J5IGl0c2VsZiwgbm90IHRoZSBmaWxlcyBpbiBpdC4KKyAgICAjICAgY28gICMgT2J0YWluIGxpc3QgZGlyZWN0bHkuCisgICAgIyAgIHJlbW92ZSAjIEhFUkU6IFRFU1Q6IE1BWUJFIGNsaWVudCBkb2VzIHRoZSByZWN1cnNpb24gZm9yIHVzLAorICAgICMgICAgICAgICAgIyBzaW5jZSBpdCBvbmx5IG1ha2VzIHNlbnNlIHRvIHJlbW92ZSBzdHVmZiBhbHJlYWR5IGluCisgICAgIyAgICAgICAgICAjIHRoZSBzYW5kYm94PworICAgICMgICBjaSAjIEhFUkU6IFNpbWlsYXIgdG8gcmVtb3ZlLi4uCisgICAgIyAgICAgICMgRG9uJ3QgdHJ5IHRvIGltcGxlbWVudCB0aGUgY29uZnVzaW5nL3dlaXJkCisgICAgIyAgICAgICMgY2kgLXIgYnVnIGVyLi4iZmVhdHVyZSIuCisKKyAgICBpZihzY2FsYXIoQHskc3RhdGUtPnthcmdzfX0pPT0wKQorICAgIHsKKyAgICAgICAgJHN0YXRlLT57YXJnc30gPSBbICIuIiBdOworICAgIH0KKyAgICBteSAlYWxsQXJnczsKKyAgICBteSAlYWxsRGlyczsKKyAgICBmb3IgbXkgJGZpbGUgKEB7JHN0YXRlLT57YXJnc319KQorICAgIHsKKyAgICAgICAgZXhwYW5kQXJnKCR1cGRhdGVyLFwlYWxsQXJncyxcJWFsbERpcnMsJGZpbGUpOworICAgIH0KKworICAgICMgSW5jbHVkZSBhbnkgZW50cmllcyBmcm9tIHNhbmRib3guICBHZW5lcmFsbHkgY2xpZW50IHdvbid0CisgICAgIyBzZW5kIGVudHJpZXMgdGhhdCBzaG91bGRuJ3QgYmUgdXNlZC4KKyAgICBmb3JlYWNoIG15ICRmaWxlIChrZXlzICV7JHN0YXRlLT57ZW50cmllc319KQorICAgIHsKKyAgICAgICAgJGFsbEFyZ3N7cmVtb3ZlX3ByZXBlbmRkaXIoJGZpbGUpfSA9IDE7CisgICAgfQorCisgICAgJHN0YXRlLT57ZGlyQXJnc30gPSBcJWFsbERpcnM7CisgICAgJHN0YXRlLT57YXJnc30gPSBbCisgICAgICAgIHNvcnQgeworICAgICAgICAgICAgICAgICMgU29ydCBwcmlvcml0eTogYnkgZGlyZWN0b3J5IGRlcHRoLCB0aGVuIGFjdHVhbCBmaWxlIG5hbWU6CisgICAgICAgICAgICBteSBAcGllY2VzQT1zcGxpdCgnLycsJGEpOworICAgICAgICAgICAgbXkgQHBpZWNlc0I9c3BsaXQoJy8nLCRiKTsKKworICAgICAgICAgICAgbXkgJGNvdW50PXNjYWxhcihAcGllY2VzQSk7CisgICAgICAgICAgICBteSAkdG1wPXNjYWxhcihAcGllY2VzQik7CisgICAgICAgICAgICByZXR1cm4gJGNvdW50PD0+JHRtcCBpZigkY291bnQhPSR0bXApOworCisgICAgICAgICAgICBmb3IoJHRtcD0wOyR0bXA8JGNvdW50OyR0bXArKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZigkcGllY2VzQVskdG1wXSBuZSAkcGllY2VzQlskdG1wXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcGllY2VzQVskdG1wXSBjbXAgJHBpZWNlc0JbJHRtcF0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBrZXlzKCVhbGxBcmdzKSBdOworfQorCisjIyBsb29rIHVwIGRpcmVjdG9yeSBzdGlja3kgdGFnLCBvZiBlaXRoZXIgZnVsbFBhdGggb3IgYSBwYXJlbnQ6CitzdWIgZ2V0RGlyU3RpY2t5SW5mbworeworICAgIG15KCRmdWxsUGF0aCk9QF87CisKKyAgICAkZnVsbFBhdGg9fnMlLyskJSU7CisgICAgd2hpbGUoJGZ1bGxQYXRoIG5lICIiICYmICFkZWZpbmVkKCRzdGF0ZS0+e2Rpck1hcH17IiRmdWxsUGF0aC8ifSkpCisgICAgeworICAgICAgICAkZnVsbFBhdGg9fnMlLz9bXi9dKiQlJTsKKyAgICB9CisKKyAgICBpZiggIWRlZmluZWQoJHN0YXRlLT57ZGlyTWFwfXsiJGZ1bGxQYXRoLyJ9KSAmJgorICAgICAgICAoICRmdWxsUGF0aCBlcSAiIiB8fAorICAgICAgICAgICRmdWxsUGF0aCBlcSAiLiIgKSApCisgICAgeworICAgICAgICByZXR1cm4gJHN0YXRlLT57ZGlyTWFwfXsiIn17c3RpY2t5SW5mb307CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAkc3RhdGUtPntkaXJNYXB9eyIkZnVsbFBhdGgvIn17c3RpY2t5SW5mb307CisgICAgfQorfQorCisjIFJlc29sdmUgcHJlY2VkZW5jZSBvZiB2YXJpb3VzIHdheXMgb2Ygc3BlY2lmeWluZyB3aGljaCB2ZXJzaW9uIG9mCisjIGEgZmlsZSB5b3Ugd2FudC4gIFJldHVybnMgdW5kZWYgKGZvciBkZWZhdWx0IGhlYWQpLCBvciBhIHJlZiB0byBhIGhhc2gKKyMgdGhhdCBjb250YWlucyAidGFnIiBhbmQvb3IgImRhdGUiIGtleXMuCitzdWIgcmVzb2x2ZVN0aWNreUluZm8KK3sKKyAgICBteSgkZmlsZW5hbWUsJHN0aWNreVRhZywkc3RpY2t5RGF0ZSwkcmVzZXQpID0gQF87CisKKyAgICAjIE9yZGVyIG9mIHByZWNlZGVuY2Ugb2Ygc3RpY2t5IHRhZ3M6CisgICAgIyAgICAtQSAgICAgICBbaGVhZF0KKyAgICAjICAgIC1yIC90YWcvCisgICAgIyAgICBbZmlsZSBlbnRyeSBzdGlja3kgdGFnXQorICAgICMgICAgW3RoZSB0YWcgc3BlY2lmaWVkIGluIGRpciByZXFfU3RpY2t5XQorICAgICMgICAgW3RoZSB0YWcgc3BlY2lmaWVkIGluIGEgcGFyZW50IGRpciByZXFfU3RpY2t5XQorICAgICMgICAgW2hlYWRdCisKKyAgICBteSAkcmVzdWx0OworICAgIGlmKCRyZXNldCkKKyAgICB7CisgICAgICAgICMgJHJlc3VsdD11bmRlZjsKKyAgICB9CisgICAgZWxzaWYoIGRlZmluZWQoJHN0aWNreVRhZykgJiYgJHN0aWNreVRhZyBuZSAiIiApCisgICAgICAgICAgICMgfHwgKCBkZWZpbmVkKCRzdGlja3lEYXRlKSAmJiAkc3RpY2t5RGF0ZSBuZSAiIiApICAgIyBUT0RPCisgICAgeworICAgICAgICAkcmVzdWx0PXsgJ3RhZycgPT4gKGRlZmluZWQoJHN0aWNreVRhZyk/JHN0aWNreVRhZzp1bmRlZikgfTsKKworICAgICAgICAjIFRPRE86IENvbnZlcnQgLUQgdmFsdWUgaW50byB0aGUgZm9ybSAyMDExLjA0LjEwLjA0LjQ2LjU3LAorICAgICAgICAjICAgc2ltaWxhciB0byBhbiBlbnRyeSBsaW5lJ3Mgc3RpY2t5IGRhdGUsIHdpdGhvdXQgdGhlIEQgcHJlZml4LgorICAgICAgICAjICAgSXQgc29tZXRpbWVzIChhbHdheXM/KSBhcnJpdmVzIGFzIHNvbWV0aGluZyBtb3JlIGxpa2UKKyAgICAgICAgIyAgICcxMCBBcHIgMjAxMSAwNDo0Njo1NyAtMDAwMCcuLi4KKyAgICAgICAgIyAkcmVzdWx0PXsgJ2RhdGUnID0+IChkZWZpbmVkKCRzdGlja3lEYXRlKT8kc3RpY2t5RGF0ZTp1bmRlZikgfTsKKyAgICB9CisgICAgZWxzaWYoIGRlZmluZWQoJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfSkgJiYKKyAgICAgICAgICAgZGVmaW5lZCgkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3RhZ19vcl9kYXRlfSkgJiYKKyAgICAgICAgICAgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXt0YWdfb3JfZGF0ZX0gbmUgIiIgKQorICAgIHsKKyAgICAgICAgbXkoJHRhZ09yRGF0ZSk9JHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXt0YWdfb3JfZGF0ZX07CisgICAgICAgIGlmKCR0YWdPckRhdGU9fi9eVChbXiBdKylccyokLykKKyAgICAgICAgeworICAgICAgICAgICAgJHJlc3VsdCA9IHsgJ3RhZycgPT4gJDEgfTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkdGFnT3JEYXRlPX4vXkQoWzAtOS5dKylccyokLykKKyAgICAgICAgeworICAgICAgICAgICAgJHJlc3VsdD0geyAnZGF0ZScgPT4gJDEgfTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpZSAiVW5rbm93biB0YWdfb3JfZGF0ZSBmb3JtYXRcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgJHJlc3VsdD1nZXREaXJTdGlja3lJbmZvKCRmaWxlbmFtZSk7CisgICAgfQorCisgICAgcmV0dXJuICRyZXN1bHQ7Cit9CisKKyMgQ29udmVydCBhIHN0aWNreUluZm8gKHJlZiB0byBhIGhhc2gpIGFzIHJldHVybmVkIGJ5IHJlc29sdmVTdGlja3lJbmZvIGludG8KKyMgYSBmb3JtIGFwcHJvcHJpYXRlIGZvciB0aGUgc3RpY2t5IHRhZyBmaWVsZCBvZiBhbiBFbnRyaWVzCisjIGxpbmUgKGZpZWxkIGluZGV4IDUsIDAtYmFzZWQpLgorc3ViIGdldFN0aWNreVRhZ09yRGF0ZQoreworICAgIG15KCRzdGlja3lJbmZvKT1AXzsKKworICAgIG15ICRyZXN1bHQ7CisgICAgaWYoZGVmaW5lZCgkc3RpY2t5SW5mbykgJiYgZGVmaW5lZCgkc3RpY2t5SW5mby0+e3RhZ30pKQorICAgIHsKKyAgICAgICAgJHJlc3VsdD0iVCRzdGlja3lJbmZvLT57dGFnfSI7CisgICAgfQorICAgICMgVE9ETzogV2hlbi9pZiB3ZSBhY3R1YWxseSBwaWNrIHZlcnNpb25zIGJ5IHtkYXRlfSBwcm9wZXJseSwKKyAgICAjICAgYWxzbyBoYW5kbGUgaXQgaGVyZToKKyAgICAjICAgIkQkc3RpY2t5SW5mby0+e2RhdGV9IiAoZXhhbXBsZTogIkQyMDExLjA0LjEzLjIwLjM3LjA3IikuCisgICAgZWxzZQorICAgIHsKKyAgICAgICAgJHJlc3VsdD0iIjsKKyAgICB9CisKKyAgICByZXR1cm4gJHJlc3VsdDsKK30KKworIyBUaGlzIG1ldGhvZCBjbGVhbnMgdXAgdGhlICRzdGF0ZSB2YXJpYWJsZSBhZnRlciBhIGNvbW1hbmQgdGhhdCB1c2VzIGFyZ3VtZW50cyBoYXMgcnVuCitzdWIgc3RhdGVjbGVhbnVwCit7CisgICAgJHN0YXRlLT57ZmlsZXN9ID0gW107CisgICAgJHN0YXRlLT57ZGlyQXJnc30gPSB7fTsKKyAgICAkc3RhdGUtPnthcmdzfSA9IFtdOworICAgICRzdGF0ZS0+e2FyZ3VtZW50c30gPSBbXTsKKyAgICAkc3RhdGUtPntlbnRyaWVzfSA9IHt9OworICAgICRzdGF0ZS0+e2Rpck1hcH0gPSB7fTsKK30KKworIyBSZXR1cm4gd29ya2luZyBkaXJlY3RvcnkgQ1ZTIHJldmlzaW9uICIxLlgiIG91dAorIyBvZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgImVudHJpZXMiIHN0YXRlLCBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lLgorIyBUaGlzIGlzIHByZWZpeGVkIHdpdGggYSBkYXNoIGlmIHRoZSBmaWxlIGlzIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbAorIyB3aGVuIGl0IGlzIGNvbW1pdHRlZC4KK3N1YiByZXZwYXJzZQoreworICAgIG15ICRmaWxlbmFtZSA9IHNoaWZ0OworCisgICAgcmV0dXJuICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17cmV2aXNpb259OworfQorCisjIFRoaXMgbWV0aG9kIHRha2VzIGEgZmlsZSBoYXNoIGFuZCBkb2VzIGEgQ1ZTICJmaWxlIHRyYW5zZmVyIi4gIEl0cworIyBleGFjdCBiZWhhdmlvdXIgZGVwZW5kcyBvbiBhIHNlY29uZCwgb3B0aW9uYWwgaGFzaCB0YWJsZSBhcmd1bWVudDoKKyMgLSBJZiAkb3B0aW9ucy0+e3RhcmdldGZpbGV9LCBkdW1wIHRoZSBjb250ZW50cyB0byB0aGF0IGZpbGU7CisjIC0gSWYgJG9wdGlvbnMtPntwcmludH0sIHVzZSBNL01UIHRvIHRyYW5zbWl0IHRoZSBjb250ZW50cyBvbmUgbGluZQorIyAgIGF0IGEgdGltZTsKKyMgLSBPdGhlcndpc2UsIHRyYW5zbWl0IHRoZSBzaXplIG9mIHRoZSBmaWxlLCBmb2xsb3dlZCBieSB0aGUgZmlsZQorIyAgIGNvbnRlbnRzLgorc3ViIHRyYW5zbWl0ZmlsZQoreworICAgIG15ICRmaWxlaGFzaCA9IHNoaWZ0OworICAgIG15ICRvcHRpb25zID0gc2hpZnQ7CisKKyAgICBpZiAoIGRlZmluZWQgKCAkZmlsZWhhc2ggKSBhbmQgJGZpbGVoYXNoIGVxICJkZWxldGVkIiApCisgICAgeworICAgICAgICAkbG9nLT53YXJuKCJmaWxlaGFzaCBpcyAnZGVsZXRlZCciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRpZSAiTmVlZCBmaWxlaGFzaCIgdW5sZXNzICggZGVmaW5lZCAoICRmaWxlaGFzaCApIGFuZCAkZmlsZWhhc2ggPX4gL15bYS16QS1aMC05XXs0MH0kLyApOworCisgICAgbXkgJHR5cGUgPSBzYWZlX3BpcGVfY2FwdHVyZSgnZ2l0JywgJ2NhdC1maWxlJywgJy10JywgJGZpbGVoYXNoKTsKKyAgICBjaG9tcCAkdHlwZTsKKworICAgIGRpZSAoICJJbnZhbGlkIHR5cGUgJyR0eXBlJyAoZXhwZWN0ZWQgJ2Jsb2InKSIgKSB1bmxlc3MgKCBkZWZpbmVkICggJHR5cGUgKSBhbmQgJHR5cGUgZXEgImJsb2IiICk7CisKKyAgICBteSAkc2l6ZSA9IHNhZmVfcGlwZV9jYXB0dXJlKCdnaXQnLCAnY2F0LWZpbGUnLCAnLXMnLCAkZmlsZWhhc2gpOworICAgIGNob21wICRzaXplOworCisgICAgJGxvZy0+ZGVidWcoInRyYW5zbWl0ZmlsZSgkZmlsZWhhc2gpIHNpemU9JHNpemUsIHR5cGU9JHR5cGUiKTsKKworICAgIGlmICggb3BlbiBteSAkZmgsICctfCcsICJnaXQiLCAiY2F0LWZpbGUiLCAiYmxvYiIsICRmaWxlaGFzaCApCisgICAgeworICAgICAgICBpZiAoIGRlZmluZWQgKCAkb3B0aW9ucy0+e3RhcmdldGZpbGV9ICkgKQorICAgICAgICB7CisgICAgICAgICAgICBteSAkdGFyZ2V0ZmlsZSA9ICRvcHRpb25zLT57dGFyZ2V0ZmlsZX07CisgICAgICAgICAgICBvcGVuIE5FV0ZJTEUsICI+IiwgJHRhcmdldGZpbGUgb3IgZGllKCJDb3VsZG4ndCBvcGVuICckdGFyZ2V0ZmlsZScgZm9yIHdyaXRpbmcgOiAkISIpOworICAgICAgICAgICAgcHJpbnQgTkVXRklMRSAkXyB3aGlsZSAoIDwkZmg+ICk7CisgICAgICAgICAgICBjbG9zZSBORVdGSUxFIG9yIGRpZSgiRmFpbGVkIHRvIHdyaXRlICckdGFyZ2V0ZmlsZSc6ICQhIik7CisgICAgICAgIH0gZWxzaWYgKCBkZWZpbmVkICggJG9wdGlvbnMtPntwcmludH0gKSAmJiAkb3B0aW9ucy0+e3ByaW50fSApIHsKKyAgICAgICAgICAgIHdoaWxlICggPCRmaD4gKSB7CisgICAgICAgICAgICAgICAgaWYoIC9cblx6LyApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ00gJywgJF87CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ01UIHRleHQgJywgJF8sICJcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnQgIiRzaXplXG4iOworICAgICAgICAgICAgcHJpbnQgd2hpbGUgKCA8JGZoPiApOworICAgICAgICB9CisgICAgICAgIGNsb3NlICRmaCBvciBkaWUgKCJDb3VsZG4ndCBjbG9zZSBmaWxlaGFuZGxlIGZvciB0cmFuc21pdGZpbGUoKTogJCEiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkaWUoIkNvdWxkbid0IGV4ZWN1dGUgZ2l0LWNhdC1maWxlIik7CisgICAgfQorfQorCisjIFRoaXMgbWV0aG9kIHRha2VzIGEgZmlsZSBuYW1lLCBhbmQgcmV0dXJucyAoICRkaXJwYXJ0LCAkZmlsZXBhcnQgKSB3aGljaAorIyByZWZlcnMgdG8gdGhlIGRpcmVjdG9yeSBwb3J0aW9uIGFuZCB0aGUgZmlsZSBwb3J0aW9uIG9mIHRoZSBmaWxlbmFtZQorIyByZXNwZWN0aXZlbHkKK3N1YiBmaWxlbmFtZXNwbGl0Cit7CisgICAgbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisgICAgbXkgJGZpeGZvcmxvY2FsZGlyID0gc2hpZnQ7CisKKyAgICBteSAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9ICggJGZpbGVuYW1lLCAiLiIgKTsKKyAgICAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9ICggJDIsICQxICkgaWYgKCAkZmlsZW5hbWUgPX4gLyguKilcLyguKikvICk7CisgICAgJGRpcnBhcnQgLj0gIi8iOworCisgICAgaWYgKCAkZml4Zm9ybG9jYWxkaXIgKQorICAgIHsKKyAgICAgICAgJGRpcnBhcnQgPX4gcy9eJHN0YXRlLT57cHJlcGVuZGRpcn0vLzsKKyAgICB9CisKKyAgICByZXR1cm4gKCAkZmlsZXBhcnQsICRkaXJwYXJ0ICk7Cit9CisKKyMgQ2xlYW51cCB2YXJpb3VzIGp1bmsgaW4gZmlsZW5hbWUgKHRyeSB0byBjYW5vbmljYWxpemUgaXQpLCBhbmQKKyMgYWRkIHByZXBlbmRkaXIgdG8gYWNjb21tb2RhdGUgcnVubmluZyBDVlMgY2xpZW50IGZyb20gYQorIyBzdWJkaXJlY3RvcnkgKHNvIHRoZSBvdXRwdXQgaXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdCkuCitzdWIgZmlsZWNsZWFudXAKK3sKKyAgICBteSAkZmlsZW5hbWUgPSBzaGlmdDsKKworICAgIHJldHVybiB1bmRlZiB1bmxlc3MoZGVmaW5lZCgkZmlsZW5hbWUpKTsKKyAgICBpZiAoICRmaWxlbmFtZSA9fiAvXlwvLyApCisgICAgeworICAgICAgICBwcmludCAiRSBhYnNvbHV0ZSBmaWxlbmFtZXMgJyRmaWxlbmFtZScgbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXJcbiI7CisgICAgICAgIHJldHVybiB1bmRlZjsKKyAgICB9CisKKyAgICBpZigkZmlsZW5hbWUgZXEgIi4iKQorICAgIHsKKyAgICAgICAgJGZpbGVuYW1lPSIiOworICAgIH0KKyAgICAkZmlsZW5hbWUgPX4gcy9eXC5cLy8vZzsKKyAgICAkZmlsZW5hbWUgPX4gcyUvKyUvJWc7CisgICAgJGZpbGVuYW1lID0gJHN0YXRlLT57cHJlcGVuZGRpcn0gLiAkZmlsZW5hbWU7CisgICAgJGZpbGVuYW1lID1+IHMlLyQlJTsKKyAgICByZXR1cm4gJGZpbGVuYW1lOworfQorCisjIFJlbW92ZSBwcmVwZW5kZGlyIGZyb20gdGhlIHBhdGgsIHNvIHRoYXQgaXQgaXMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeQorIyB0aGUgQ1ZTIGNsaWVudCB3YXMgc3RhcnRlZCBmcm9tLCByYXRoZXIgdGhhbiB0aGUgdG9wIG9mIHRoZSBwcm9qZWN0LgorIyBFc3NlbnRpYWxseSB0aGUgaW52ZXJzZSBvZiBmaWxlY2xlYW51cCgpLgorc3ViIHJlbW92ZV9wcmVwZW5kZGlyCit7CisgICAgbXkoJHBhdGgpID0gQF87CisgICAgaWYoZGVmaW5lZCgkc3RhdGUtPntwcmVwZW5kZGlyfSkgJiYgJHN0YXRlLT57cHJlcGVuZGRpcn0gbmUgIiIpCisgICAgeworICAgICAgICBteSgkcHJlKT0kc3RhdGUtPntwcmVwZW5kZGlyfTsKKyAgICAgICAgJHByZT1+cyUvJCUlOworICAgICAgICBpZighKCRwYXRoPX5zJV5cUSRwcmVcRS8/JSUpKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT5mYXRhbCgiaW50ZXJuYWwgZXJyb3IgbWlzc2luZyBwcmVwZW5kZGlyIik7CisgICAgICAgICAgICBkaWUoImludGVybmFsIGVycm9yIG1pc3NpbmcgcHJlcGVuZGRpciIpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAkcGF0aDsKK30KKworc3ViIHZhbGlkYXRlR2l0RGlyCit7CisgICAgaWYoICFkZWZpbmVkKCRzdGF0ZS0+e0NWU1JPT1R9KSApCisgICAgeworICAgICAgICBwcmludCAiZXJyb3IgMSBDVlNST09UIG5vdCBzcGVjaWZpZWRcbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICBleGl0OworICAgIH0KKyAgICBpZiggJEVOVntHSVRfRElSfSBuZSAoJHN0YXRlLT57Q1ZTUk9PVH0gLiAnLycpICkKKyAgICB7CisgICAgICAgIHByaW50ICJlcnJvciAxIEludGVybmFsbHkgaW5jb25zaXN0ZW50IENWU1JPT1RcbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICBleGl0OworICAgIH0KK30KKworIyBTZXR1cCB3b3JraW5nIGRpcmVjdG9yeSBpbiBhIHdvcmsgdHJlZSB3aXRoIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbgorIyBsb2FkZWQgaW4gdGhlIGluZGV4Lgorc3ViIHNldHVwV29ya1RyZWUKK3sKKyAgICBteSAoJHZlcikgPSBAXzsKKworICAgIHZhbGlkYXRlR2l0RGlyKCk7CisKKyAgICBpZiggKCBkZWZpbmVkKCR3b3JrLT57c3RhdGV9KSAmJiAkd29yay0+e3N0YXRlfSAhPSAxICkgfHwKKyAgICAgICAgZGVmaW5lZCgkd29yay0+e3RtcERpcn0pICkKKyAgICB7CisgICAgICAgICRsb2ctPndhcm4oIkJhZCB3b3JrIHRyZWUgc3RhdGUgbWFuYWdlbWVudCIpOworICAgICAgICBwcmludCAiZXJyb3IgMSBJbnRlcm5hbCBzZXR1cCBtdWx0aXBsZSB3b3JrIHRyZWVzIHdpdGhvdXQgY2xlYW51cFxuIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgIGV4aXQ7CisgICAgfQorCisgICAgJHdvcmstPnt3b3JrRGlyfSA9IHRlbXBkaXIgKCBESVIgPT4gJFRFTVBfRElSICk7CisKKyAgICBpZiggIWRlZmluZWQoJHdvcmstPntpbmRleH0pICkKKyAgICB7CisgICAgICAgICh1bmRlZiwgJHdvcmstPntpbmRleH0pID0gdGVtcGZpbGUgKCBESVIgPT4gJFRFTVBfRElSLCBPUEVOID0+IDAgKTsKKyAgICB9CisKKyAgICBjaGRpciAkd29yay0+e3dvcmtEaXJ9IG9yCisgICAgICAgIGRpZSAiVW5hYmxlIHRvIGNoZGlyIHRvICR3b3JrLT57d29ya0Rpcn1cbiI7CisKKyAgICAkbG9nLT5pbmZvKCJTZXR0aW5nIHVwIEdJVF9XT1JLX1RSRUUgYXMgJy4nIGluICckd29yay0+e3dvcmtEaXJ9JywgaW5kZXggZmlsZSBpcyAnJHdvcmstPntpbmRleH0nIik7CisKKyAgICAkRU5We0dJVF9XT1JLX1RSRUV9ID0gIi4iOworICAgICRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJHdvcmstPntpbmRleH07CisgICAgJHdvcmstPntzdGF0ZX0gPSAyOworCisgICAgaWYoJHZlcikKKyAgICB7CisgICAgICAgIHN5c3RlbSgiZ2l0IiwicmVhZC10cmVlIiwkdmVyKTsKKyAgICAgICAgdW5sZXNzICgkPyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJFcnJvciBydW5uaW5nIGdpdC1yZWFkLXRyZWUiKTsKKyAgICAgICAgICAgIGRpZSAiRXJyb3IgcnVubmluZyBnaXQtcmVhZC10cmVlICR2ZXIgaW4gJHdvcmstPnt3b3JrRGlyfSAkIVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICAjIGVsc2UgIyByZXFfYW5ub3RhdGUgcmVhZHMgdHJlZSBmb3IgZWFjaCBmaWxlCit9CisKKyMgRW5zdXJlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGluIHNvbWUga2luZCBvZiB3b3JraW5nIGRpcmVjdG9yeSwKKyMgd2l0aCBhIHJlY2VudCB2ZXJzaW9uIGxvYWRlZCBpbiB0aGUgaW5kZXguCitzdWIgZW5zdXJlV29ya1RyZWUKK3sKKyAgICBpZiggZGVmaW5lZCgkd29yay0+e3RtcERpcn0pICkKKyAgICB7CisgICAgICAgICRsb2ctPndhcm4oIkJhZCB3b3JrIHRyZWUgc3RhdGUgbWFuYWdlbWVudCBbZW5zdXJlV29ya1RyZWUoKV0iKTsKKyAgICAgICAgcHJpbnQgImVycm9yIDEgSW50ZXJuYWwgc2V0dXAgbXVsdGlwbGUgZGlycyB3aXRob3V0IGNsZWFudXBcbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICBleGl0OworICAgIH0KKyAgICBpZiggJHdvcmstPntzdGF0ZX0gKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhbGlkYXRlR2l0RGlyKCk7CisKKyAgICBpZiggIWRlZmluZWQoJHdvcmstPntlbXB0eURpcn0pICkKKyAgICB7CisgICAgICAgICR3b3JrLT57ZW1wdHlEaXJ9ID0gdGVtcGRpciAoIERJUiA9PiAkVEVNUF9ESVIsIE9QRU4gPT4gMCk7CisgICAgfQorICAgIGNoZGlyICR3b3JrLT57ZW1wdHlEaXJ9IG9yCisgICAgICAgIGRpZSAiVW5hYmxlIHRvIGNoZGlyIHRvICR3b3JrLT57ZW1wdHlEaXJ9XG4iOworCisgICAgbXkgJHZlciA9IHNhZmVfcGlwZV9jYXB0dXJlKCdnaXQnLCAnc2hvdy1yZWYnLCAnLXMnLCAicmVmcy9oZWFkcy8kc3RhdGUtPnttb2R1bGV9Iik7CisgICAgY2hvbXAgJHZlcjsKKyAgICBpZiAoJHZlciAhfiAvXlswLTlhLWZdezQwfSQvKQorICAgIHsKKyAgICAgICAgJGxvZy0+d2FybigiRXJyb3IgZnJvbSBnaXQgc2hvdy1yZWYgLXMgcmVmcy9oZWFkJHN0YXRlLT57bW9kdWxlfSIpOworICAgICAgICBwcmludCAiZXJyb3IgMSBjYW5ub3QgZmluZCB0aGUgY3VycmVudCBIRUFEIG9mIG1vZHVsZSI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICBleGl0OworICAgIH0KKworICAgIGlmKCAhZGVmaW5lZCgkd29yay0+e2luZGV4fSkgKQorICAgIHsKKyAgICAgICAgKHVuZGVmLCAkd29yay0+e2luZGV4fSkgPSB0ZW1wZmlsZSAoIERJUiA9PiAkVEVNUF9ESVIsIE9QRU4gPT4gMCApOworICAgIH0KKworICAgICRFTlZ7R0lUX1dPUktfVFJFRX0gPSAiLiI7CisgICAgJEVOVntHSVRfSU5ERVhfRklMRX0gPSAkd29yay0+e2luZGV4fTsKKyAgICAkd29yay0+e3N0YXRlfSA9IDE7CisKKyAgICBzeXN0ZW0oImdpdCIsInJlYWQtdHJlZSIsJHZlcik7CisgICAgdW5sZXNzICgkPyA9PSAwKQorICAgIHsKKyAgICAgICAgZGllICJFcnJvciBydW5uaW5nIGdpdC1yZWFkLXRyZWUgJHZlciAkIVxuIjsKKyAgICB9Cit9CisKKyMgQ2xlYW51cCB3b3JraW5nIGRpcmVjdG9yeSB0aGF0IGlzIG5vdCBuZWVkZWQgYW55IGxvbmdlci4KK3N1YiBjbGVhbnVwV29ya1RyZWUKK3sKKyAgICBpZiggISAkd29yay0+e3N0YXRlfSApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2hkaXIgIi8iIG9yIGRpZSAiVW5hYmxlIHRvIGNoZGlyICcvJ1xuIjsKKworICAgIGlmKCBkZWZpbmVkKCR3b3JrLT57d29ya0Rpcn0pICkKKyAgICB7CisgICAgICAgIHJtdHJlZSggJHdvcmstPnt3b3JrRGlyfSApOworICAgICAgICB1bmRlZiAkd29yay0+e3dvcmtEaXJ9OworICAgIH0KKyAgICB1bmRlZiAkd29yay0+e3N0YXRlfTsKK30KKworIyBTZXR1cCBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgKG5vdCBhIHdvcmtpbmcgdHJlZSksIHR5cGljYWxseSBmb3IKKyMgbWVyZ2luZyBkaXJ0eSBzdGF0ZSBhcyBpbiByZXFfdXBkYXRlLgorc3ViIHNldHVwVG1wRGlyCit7CisgICAgJHdvcmstPnt0bXBEaXJ9ID0gdGVtcGRpciAoIERJUiA9PiAkVEVNUF9ESVIgKTsKKyAgICBjaGRpciAkd29yay0+e3RtcERpcn0gb3IgZGllICJVbmFibGUgdG8gY2hkaXIgJHdvcmstPnt0bXBEaXJ9XG4iOworCisgICAgcmV0dXJuICR3b3JrLT57dG1wRGlyfTsKK30KKworIyBDbGVhbiB1cCBhIHByZXZpb3VzbHkgc2V0dXBUbXBEaXIuICBSZXN0b3JlIHByZXZpb3VzIHdvcmsgdHJlZSBpZgorIyBhcHByb3ByaWF0ZS4KK3N1YiBjbGVhbnVwVG1wRGlyCit7CisgICAgaWYgKCAhZGVmaW5lZCgkd29yay0+e3RtcERpcn0pICkKKyAgICB7CisgICAgICAgICRsb2ctPndhcm4oImNsZWFudXAgdG1wZGlyIHRoYXQgaGFzIG5vdCBiZWVuIHNldHVwIik7CisgICAgICAgIGRpZSAiQ2xlYW51cCB0bXBEaXIgdGhhdCBoYXMgbm90IGJlZW4gc2V0dXBcbiI7CisgICAgfQorICAgIGlmKCBkZWZpbmVkKCR3b3JrLT57c3RhdGV9KSApCisgICAgeworICAgICAgICBpZiggJHdvcmstPntzdGF0ZX0gPT0gMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoZGlyICR3b3JrLT57ZW1wdHlEaXJ9IG9yCisgICAgICAgICAgICAgICAgZGllICJVbmFibGUgdG8gY2hkaXIgdG8gJHdvcmstPntlbXB0eURpcn1cbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoICR3b3JrLT57c3RhdGV9ID09IDIgKQorICAgICAgICB7CisgICAgICAgICAgICBjaGRpciAkd29yay0+e3dvcmtEaXJ9IG9yCisgICAgICAgICAgICAgICAgZGllICJVbmFibGUgdG8gY2hkaXIgdG8gJHdvcmstPntlbXB0eURpcn1cbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJJbmNvbnNpc3RlbnQgd29yayBkaXIgc3RhdGUiKTsKKyAgICAgICAgICAgIGRpZSAiSW5jb25zaXN0ZW50IHdvcmsgZGlyIHN0YXRlXG4iOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNoZGlyICIvIiBvciBkaWUgIlVuYWJsZSB0byBjaGRpciAnLydcbiI7CisgICAgfQorfQorCisjIEdpdmVuIGEgcGF0aCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGtvcHRzCisjIHRoYXQgc2hvdWxkIGdvIGludG8gdGhhdCBwYXRoJ3MgRW50cmllcyBsaW5lLiAgRm9yIGV4YW1wbGUsIGEgYmluYXJ5CisjIGZpbGUgc2hvdWxkIGdldCAta2IuCitzdWIga29wdHNfZnJvbV9wYXRoCit7CisgICAgbXkgKCRwYXRoLCAkc3JjVHlwZSwgJG5hbWUpID0gQF87CisKKyAgICBpZiAoIGRlZmluZWQgKCAkY2ZnLT57Z2l0Y3ZzfXt1c2VjcmxmYXR0cn0gKSBhbmQKKyAgICAgICAgICRjZmctPntnaXRjdnN9e3VzZWNybGZhdHRyfSA9fiAvXHMqKDF8dHJ1ZXx5ZXMpXHMqJC9pICkKKyAgICB7CisgICAgICAgIG15ICgkdmFsKSA9IGNoZWNrX2F0dHIoICJ0ZXh0IiwgJHBhdGggKTsKKyAgICAgICAgaWYgKCAkdmFsIGVxICJ1bnNwZWNpZmllZCIgKQorICAgICAgICB7CisgICAgICAgICAgICAkdmFsID0gY2hlY2tfYXR0ciggImNybGYiLCAkcGF0aCApOworICAgICAgICB9CisgICAgICAgIGlmICggJHZhbCBlcSAidW5zZXQiICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICIta2IiCisgICAgICAgIH0KKyAgICAgICAgZWxzaWYgKCBjaGVja19hdHRyKCAiZW9sIiwgJHBhdGggKSBuZSAidW5zcGVjaWZpZWQiIHx8CisgICAgICAgICAgICAgICAgJHZhbCBlcSAic2V0IiB8fCAkdmFsIGVxICJpbnB1dCIgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT5pbmZvKCJVbnJlY29nbml6ZWQgY2hlY2tfYXR0ciBjcmxmICRwYXRoIDogJHZhbCIpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCBkZWZpbmVkICggJGNmZy0+e2dpdGN2c317YWxsYmluYXJ5fSApICkKKyAgICB7CisgICAgICAgIGlmKCAoJGNmZy0+e2dpdGN2c317YWxsYmluYXJ5fSA9fiAvXlxzKigxfHRydWV8eWVzKVxzKiQvaSkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIi1rYiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoICgkY2ZnLT57Z2l0Y3ZzfXthbGxiaW5hcnl9ID1+IC9eXHMqZ3Vlc3NccyokL2kpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIGlzX2JpbmFyeSgkc3JjVHlwZSwkbmFtZSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICRsb2ctPmRlYnVnKCIuLi4gYXMgYmluYXJ5Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuICIta2IiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICRsb2ctPmRlYnVnKCIuLi4gYXMgdGV4dCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgICMgUmV0dXJuICIiIHRvIGdpdmUgbm8gc3BlY2lhbCB0cmVhdG1lbnQgdG8gYW55IHBhdGgKKyAgICByZXR1cm4gIiI7Cit9CisKK3N1YiBjaGVja19hdHRyCit7CisgICAgbXkgKCRhdHRyLCRwYXRoKSA9IEBfOworICAgIGVuc3VyZVdvcmtUcmVlKCk7CisgICAgaWYgKCBvcGVuIG15ICRmaCwgJy18JywgImdpdCIsICJjaGVjay1hdHRyIiwgJGF0dHIsICItLSIsICRwYXRoICkKKyAgICB7CisgICAgICAgIG15ICR2YWwgPSA8JGZoPjsKKyAgICAgICAgY2xvc2UgJGZoOworICAgICAgICAkdmFsID1+IHMvLio6IChbXjpcclxuXSopXHMqJC8kMS87CisgICAgICAgIHJldHVybiAkdmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gdW5kZWY7CisgICAgfQorfQorCisjIFRoaXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgaGV1cmlzdGljcyBhcyBjb252ZXJ0LmM6aXNfYmluYXJ5KCkgYW5kIHJlbGF0ZWQuCisjIE5vdGUgdGhhdCB0aGUgYmFyZSBDUiB0ZXN0IGlzIGRvbmUgYnkgY2FsbGVycyBpbiBjb252ZXJ0LmMuCitzdWIgaXNfYmluYXJ5Cit7CisgICAgbXkgKCRzcmNUeXBlLCRuYW1lKSA9IEBfOworICAgICRsb2ctPmRlYnVnKCJpc19iaW5hcnkoJHNyY1R5cGUsJG5hbWUpIik7CisKKyAgICAjIE1pbmltaXplIGFtb3VudCBvZiBpbnRlcnByZXRlZCBjb2RlIHJ1biBpbiB0aGUgaW5uZXIgcGVyLWNoYXJhY3RlcgorICAgICMgbG9vcCBmb3IgbGFyZ2UgZmlsZXMsIGJ5IHRvdGFsbGluZyBlYWNoIGNoYXJhY3RlciB2YWx1ZSBhbmQKKyAgICAjIHRoZW4gYW5hbHl6aW5nIHRoZSB0b3RhbHMuCisgICAgbXkgQGNvdW50czsKKyAgICBteSAkaTsKKyAgICBmb3IoJGk9MDskaTwyNTY7JGkrKykKKyAgICB7CisgICAgICAgICRjb3VudHNbJGldPTA7CisgICAgfQorCisgICAgbXkgJGZoID0gb3Blbl9ibG9iX29yX2RpZSgkc3JjVHlwZSwkbmFtZSk7CisgICAgbXkgJGxpbmU7CisgICAgd2hpbGUoIGRlZmluZWQoJGxpbmU9PCRmaD4pICkKKyAgICB7CisgICAgICAgICMgQW55ICdcMCcgYW5kIGJhcmUgQ1IgYXJlIGNvbnNpZGVyZWQgYmluYXJ5LgorICAgICAgICBpZiggJGxpbmUgPX4gL1wwfChcclteXG5dKS8gKQorICAgICAgICB7CisgICAgICAgICAgICBjbG9zZSgkZmgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICAjIENvdW50IHVwIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBsaW5lOgorICAgICAgICBteSAkbGVuPWxlbmd0aCgkbGluZSk7CisgICAgICAgIGZvcigkaT0wOyRpPCRsZW47JGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgJGNvdW50c1tvcmQoc3Vic3RyKCRsaW5lLCRpLDEpKV0rKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBjbG9zZSAkZmg7CisKKyAgICAjIERvbid0IGNvdW50IENSIGFuZCBMRiBhcyBlaXRoZXIgcHJpbnRhYmxlL25vbnByaW50YWJsZQorICAgICRjb3VudHNbb3JkKCJcbiIpXT0wOworICAgICRjb3VudHNbb3JkKCJcciIpXT0wOworCisgICAgIyBDYXRlZ29yaXplIGluZGl2aWR1YWwgY2hhcmFjdGVyIGNvdW50IGludG8gcHJpbnRhYmxlIGFuZCBub25wcmludGFibGU6CisgICAgbXkgJHByaW50YWJsZT0wOworICAgIG15ICRub25wcmludGFibGU9MDsKKyAgICBmb3IoJGk9MDskaTwyNTY7JGkrKykKKyAgICB7CisgICAgICAgIGlmKCAkaSA8IDMyICYmCisgICAgICAgICAgICAkaSAhPSBvcmQoIlxiIikgJiYKKyAgICAgICAgICAgICRpICE9IG9yZCgiXHQiKSAmJgorICAgICAgICAgICAgJGkgIT0gMDMzICYmICAgICAgICMgRVNDCisgICAgICAgICAgICAkaSAhPSAwMTQgKSAgICAgICAgIyBGRgorICAgICAgICB7CisgICAgICAgICAgICAkbm9ucHJpbnRhYmxlKz0kY291bnRzWyRpXTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiggJGk9PTEyNyApICAjIERFTAorICAgICAgICB7CisgICAgICAgICAgICAkbm9ucHJpbnRhYmxlKz0kY291bnRzWyRpXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICRwcmludGFibGUrPSRjb3VudHNbJGldOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICgkcHJpbnRhYmxlID4+IDcpIDwgJG5vbnByaW50YWJsZTsKK30KKworIyBSZXR1cm5zIG9wZW4gZmlsZSBoYW5kbGUuICBQb3NzaWJsZSBpbnZvY2F0aW9uczoKKyMgIC0gb3Blbl9ibG9iX29yX2RpZSgiZmlsZSIsJGZpbGVuYW1lKTsKKyMgIC0gb3Blbl9ibG9iX29yX2RpZSgic2hhMSIsJGZpbGVoYXNoKTsKK3N1YiBvcGVuX2Jsb2Jfb3JfZGllCit7CisgICAgbXkgKCRzcmNUeXBlLCRuYW1lKSA9IEBfOworICAgIG15ICgkZmgpOworICAgIGlmKCAkc3JjVHlwZSBlcSAiZmlsZSIgKQorICAgIHsKKyAgICAgICAgaWYoICFvcGVuICRmaCwiPCIsJG5hbWUgKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJVbmFibGUgdG8gb3BlbiBmaWxlICRuYW1lOiAkISIpOworICAgICAgICAgICAgZGllICJVbmFibGUgdG8gb3BlbiBmaWxlICRuYW1lOiAkIVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNpZiggJHNyY1R5cGUgZXEgInNoYTEiICkKKyAgICB7CisgICAgICAgIHVubGVzcyAoIGRlZmluZWQgKCAkbmFtZSApIGFuZCAkbmFtZSA9fiAvXlthLXpBLVowLTldezQwfSQvICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+d2FybigiTmVlZCBmaWxlaGFzaCIpOworICAgICAgICAgICAgZGllICJOZWVkIGZpbGVoYXNoXG4iOworICAgICAgICB9CisKKyAgICAgICAgbXkgJHR5cGUgPSBzYWZlX3BpcGVfY2FwdHVyZSgnZ2l0JywgJ2NhdC1maWxlJywgJy10JywgJG5hbWUpOworICAgICAgICBjaG9tcCAkdHlwZTsKKworICAgICAgICB1bmxlc3MgKCBkZWZpbmVkICggJHR5cGUgKSBhbmQgJHR5cGUgZXEgImJsb2IiICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+d2FybigiSW52YWxpZCB0eXBlICckdHlwZScgZm9yICckbmFtZSciKTsKKyAgICAgICAgICAgIGRpZSAoICJJbnZhbGlkIHR5cGUgJyR0eXBlJyAoZXhwZWN0ZWQgJ2Jsb2InKSIgKQorICAgICAgICB9CisKKyAgICAgICAgbXkgJHNpemUgPSBzYWZlX3BpcGVfY2FwdHVyZSgnZ2l0JywgJ2NhdC1maWxlJywgJy1zJywgJG5hbWUpOworICAgICAgICBjaG9tcCAkc2l6ZTsKKworICAgICAgICAkbG9nLT5kZWJ1Zygib3Blbl9ibG9iX29yX2RpZSgkbmFtZSkgc2l6ZT0kc2l6ZSwgdHlwZT0kdHlwZSIpOworCisgICAgICAgIHVubGVzcyggb3BlbiAkZmgsICctfCcsICJnaXQiLCAiY2F0LWZpbGUiLCAiYmxvYiIsICRuYW1lICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+d2FybigiVW5hYmxlIHRvIG9wZW4gc2hhMSAkbmFtZSIpOworICAgICAgICAgICAgZGllICJVbmFibGUgdG8gb3BlbiBzaGExICRuYW1lXG4iOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICRsb2ctPndhcm4oIlVua25vd24gdHlwZSBvZiBibG9iIHNvdXJjZTogJHNyY1R5cGUiKTsKKyAgICAgICAgZGllICJVbmtub3duIHR5cGUgb2YgYmxvYiBzb3VyY2U6ICRzcmNUeXBlXG4iOworICAgIH0KKyAgICByZXR1cm4gJGZoOworfQorCisjIEdlbmVyYXRlIGEgQ1ZTIGF1dGhvciBuYW1lIGZyb20gR2l0IGF1dGhvciBpbmZvcm1hdGlvbiwgYnkgdGFraW5nIHRoZSBsb2NhbAorIyBwYXJ0IG9mIHRoZSBlbWFpbCBhZGRyZXNzIGFuZCByZXBsYWNpbmcgY2hhcmFjdGVycyBub3QgaW4gdGhlIFBvcnRhYmxlCisjIEZpbGVuYW1lIENoYXJhY3RlciBTZXQgKHNlZSBJRUVFIFN0ZCAxMDAzLjEtMjAwMSwgMy4yNzYpIGJ5IHVuZGVyc2NvcmVzLiBDVlMKKyMgTG9naW4gbmFtZXMgYXJlIFVuaXggbG9naW4gbmFtZXMsIHdoaWNoIHNob3VsZCBiZSByZXN0cmljdGVkIHRvIHRoaXMKKyMgY2hhcmFjdGVyIHNldC4KK3N1YiBjdnNfYXV0aG9yCit7CisgICAgbXkgJGF1dGhvcl9saW5lID0gc2hpZnQ7CisgICAgKG15ICRhdXRob3IpID0gJGF1dGhvcl9saW5lID1+IC88KFteQD5dKikvOworCisgICAgJGF1dGhvciA9fiBzL1teLWEtekEtWjAtOV8uXS9fL2c7CisgICAgJGF1dGhvciA9fiBzL14tL18vOworCisgICAgJGF1dGhvcjsKK30KKworCitzdWIgZGVzY3JhbWJsZQoreworICAgICMgVGhpcyB0YWJsZSBpcyBmcm9tIHNyYy9zY3JhbWJsZS5jIGluIHRoZSBDVlMgc291cmNlCisgICAgbXkgQFNISUZUUyA9ICgKKyAgICAgICAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwKKyAgICAgICAgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsCisgICAgICAgIDExNCwxMjAsIDUzLCA3OSwgOTYsMTA5LCA3MiwxMDgsIDcwLCA2NCwgNzYsIDY3LDExNiwgNzQsIDY4LCA4NywKKyAgICAgICAgMTExLCA1MiwgNzUsMTE5LCA0OSwgMzQsIDgyLCA4MSwgOTUsIDY1LDExMiwgODYsMTE4LDExMCwxMjIsMTA1LAorICAgICAgICA0MSwgNTcsIDgzLCA0MywgNDYsMTAyLCA0MCwgODksIDM4LDEwMywgNDUsIDUwLCA0MiwxMjMsIDkxLCAzNSwKKyAgICAgICAgMTI1LCA1NSwgNTQsIDY2LDEyNCwxMjYsIDU5LCA0NywgOTIsIDcxLDExNSwgNzgsIDg4LDEwNywxMDYsIDU2LAorICAgICAgICAzNiwxMjEsMTE3LDEwNCwxMDEsMTAwLCA2OSwgNzMsIDk5LCA2MywgOTQsIDkzLCAzOSwgMzcsIDYxLCA0OCwKKyAgICAgICAgNTgsMTEzLCAzMiwgOTAsIDQ0LCA5OCwgNjAsIDUxLCAzMywgOTcsIDYyLCA3NywgODQsIDgwLCA4NSwyMjMsCisgICAgICAgIDIyNSwyMTYsMTg3LDE2NiwyMjksMTg5LDIyMiwxODgsMTQxLDI0OSwxNDgsMjAwLDE4NCwxMzYsMjQ4LDE5MCwKKyAgICAgICAgMTk5LDE3MCwxODEsMjA0LDEzOCwyMzIsMjE4LDE4MywyNTUsMjM0LDIyMCwyNDcsMjEzLDIwMywyMjYsMTkzLAorICAgICAgICAxNzQsMTcyLDIyOCwyNTIsMjE3LDIwMSwxMzEsMjMwLDE5NywyMTEsMTQ1LDIzOCwxNjEsMTc5LDE2MCwyMTIsCisgICAgICAgIDIwNywyMjEsMjU0LDE3MywyMDIsMTQ2LDIyNCwxNTEsMTQwLDE5NiwyMDUsMTMwLDEzNSwxMzMsMTQzLDI0NiwKKyAgICAgICAgMTkyLDE1OSwyNDQsMjM5LDE4NSwxNjgsMjE1LDE0NCwxMzksMTY1LDE4MCwxNTcsMTQ3LDE4NiwyMTQsMTc2LAorICAgICAgICAyMjcsMjMxLDIxOSwxNjksMTc1LDE1NiwyMDYsMTk4LDEyOSwxNjQsMTUwLDIxMCwxNTQsMTc3LDEzNCwxMjcsCisgICAgICAgIDE4MiwxMjgsMTU4LDIwOCwxNjIsMTMyLDE2NywyMDksMTQ5LDI0MSwxNTMsMjUxLDIzNywyMzYsMTcxLDE5NSwKKyAgICAgICAgMjQzLDIzMywyNTMsMjQwLDE5NCwyNTAsMTkxLDE1NSwxNDIsMTM3LDI0NSwyMzUsMTYzLDI0MiwxNzgsMTUyCisgICAgKTsKKyAgICBteSAoJHN0cikgPSBAXzsKKworICAgICMgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCB0aGUgc2FtZSBwYXNzd29yZCBmb3JtYXQgKEEpIGhhcyBiZWVuCisgICAgIyB1c2VkIGJ5IENWUyBzaW5jZSB0aGUgYmVnaW5uaW5nIG9mIHRpbWUKKyAgICB7CisgICAgICAgIG15ICRmbXQgPSBzdWJzdHIoJHN0ciwgMCwgMSk7CisgICAgICAgIGRpZSAiaW52YWxpZCBwYXNzd29yZCBmb3JtYXQgYCRmbXQnIiB1bmxlc3MgJGZtdCBlcSAnQSc7CisgICAgfQorCisgICAgbXkgQHN0ciA9IHVucGFjayAiQyoiLCBzdWJzdHIoJHN0ciwgMSk7CisgICAgbXkgJHJldCA9IGpvaW4gJycsIG1hcCB7IGNociAkU0hJRlRTWyRfXSB9IEBzdHI7CisgICAgcmV0dXJuICRyZXQ7Cit9CisKKyMgVGVzdCBpZiB0aGUgKGRlZXApIHZhbHVlcyBvZiB0d28gcmVmZXJlbmNlcyB0byBhIGhhc2ggYXJlIHRoZSBzYW1lLgorc3ViIHJlZkhhc2hFcXVhbAoreworICAgIG15KCR2MSwkdjIpID0gQF87CisKKyAgICBteSAkb3V0OworICAgIGlmKCFkZWZpbmVkKCR2MSkpCisgICAgeworICAgICAgICBpZighZGVmaW5lZCgkdjIpKQorICAgICAgICB7CisgICAgICAgICAgICAkb3V0PTE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoICFkZWZpbmVkKCR2MikgfHwKKyAgICAgICAgICAgc2NhbGFyKGtleXMoJXskdjF9KSkgIT0gc2NhbGFyKGtleXMoJXskdjJ9KSkgKQorICAgIHsKKyAgICAgICAgIyAkb3V0PXVuZGVmOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAkb3V0PTE7CisKKyAgICAgICAgbXkgJGtleTsKKyAgICAgICAgZm9yZWFjaCAka2V5IChrZXlzKCV7JHYxfSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAhZXhpc3RzKCR2Mi0+eyRrZXl9KSB8fAorICAgICAgICAgICAgICAgIGRlZmluZWQoJHYxLT57JGtleX0pIG5lIGRlZmluZWQoJHYyLT57JGtleX0pIHx8CisgICAgICAgICAgICAgICAgKCBkZWZpbmVkKCR2MS0+eyRrZXl9KSAmJgorICAgICAgICAgICAgICAgICAgJHYxLT57JGtleX0gbmUgJHYyLT57JGtleX0gKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAkb3V0PXVuZGVmOworICAgICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAkb3V0OworfQorCisjIGFuIGFsdGVybmF0aXZlIHRvIGBjb21tYW5kYCB0aGF0IGFsbG93cyBpbnB1dCB0byBiZSBwYXNzZWQgYXMgYW4gYXJyYXkKKyMgdG8gd29yayBhcm91bmQgc2hlbGwgcHJvYmxlbXMgd2l0aCB3ZWlyZCBjaGFyYWN0ZXJzIGluIGFyZ3VtZW50cworCitzdWIgc2FmZV9waXBlX2NhcHR1cmUgeworCisgICAgbXkgQG91dHB1dDsKKworICAgIGlmIChteSAkcGlkID0gb3BlbiBteSAkY2hpbGQsICctfCcpIHsKKyAgICAgICAgQG91dHB1dCA9ICg8JGNoaWxkPik7CisgICAgICAgIGNsb3NlICRjaGlsZCBvciBkaWUgam9pbignICcsQF8pLiI6ICQhICQ/IjsKKyAgICB9IGVsc2UgeworICAgICAgICBleGVjKEBfKSBvciBkaWUgIiQhICQ/IjsgIyBleGVjKCkgY2FuIGZhaWwgdGhlIGV4ZWN1dGFibGUgY2FuJ3QgYmUgZm91bmQKKyAgICB9CisgICAgcmV0dXJuIHdhbnRhcnJheSA/IEBvdXRwdXQgOiBqb2luKCcnLEBvdXRwdXQpOworfQorCisKK3BhY2thZ2UgR0lUQ1ZTOjpsb2c7CisKKyMjIyMKKyMjIyMgQ29weXJpZ2h0IFRoZSBPcGVuIFVuaXZlcnNpdHkgVUsgLSAyMDA2LgorIyMjIworIyMjIyBBdXRob3JzOiBNYXJ0eW4gU21pdGggICAgPG1hcnR5bkBjYXRhbHlzdC5uZXQubno+CisjIyMjICAgICAgICAgIE1hcnRpbiBMYW5naG9mZiA8bWFydGluQGxhcHRvcC5vcmc+CisjIyMjCisjIyMjCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKKz1oZWFkMSBOQU1FCisKK0dJVENWUzo6bG9nCisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIG1vZHVsZSBwcm92aWRlcyB2ZXJ5IGNydWRlIGxvZ2dpbmcgd2l0aCBhIHNpbWlsYXIgaW50ZXJmYWNlIHRvCitMb2c6OkxvZzRwZXJsCisKKz1oZWFkMSBNRVRIT0RTCisKKz1jdXQKKworPWhlYWQyIG5ldworCitDcmVhdGVzIGEgbmV3IGxvZyBvYmplY3QsIG9wdGlvbmFsbHkgeW91IGNhbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaGVyZSB0bworaW5kaWNhdGUgdGhlIGZpbGUgdG8gbG9nIHRvLiBJZiBubyBsb2cgZmlsZSBpcyBzcGVjaWZpZWQsIHlvdSBjYW4gc3BlY2lmeSBvbmUKK2xhdGVyIHdpdGggbWV0aG9kIHNldGZpbGUsIG9yIGluZGljYXRlIHlvdSBubyBsb25nZXIgd2FudCBsb2dnaW5nIHdpdGggbWV0aG9kCitub2ZpbGUuCisKK1VudGlsIG9uZSBvZiB0aGVzZSBtZXRob2RzIGlzIGNhbGxlZCwgYWxsIGxvZyBjYWxscyB3aWxsIGJ1ZmZlciBtZXNzYWdlcyByZWFkeQordG8gd3JpdGUgb3V0LgorCis9Y3V0CitzdWIgbmV3Cit7CisgICAgbXkgJGNsYXNzID0gc2hpZnQ7CisgICAgbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisKKyAgICBteSAkc2VsZiA9IHt9OworCisgICAgYmxlc3MgJHNlbGYsICRjbGFzczsKKworICAgIGlmICggZGVmaW5lZCAoICRmaWxlbmFtZSApICkKKyAgICB7CisgICAgICAgIG9wZW4gJHNlbGYtPntmaH0sICI+PiIsICRmaWxlbmFtZSBvciBkaWUoIkNvdWxkbid0IG9wZW4gJyRmaWxlbmFtZScgZm9yIHdyaXRpbmcgOiAkISIpOworICAgIH0KKworICAgIHJldHVybiAkc2VsZjsKK30KKworPWhlYWQyIHNldGZpbGUKKworVGhpcyBtZXRob2RzIHRha2VzIGEgZmlsZW5hbWUsIGFuZCBhdHRlbXB0cyB0byBvcGVuIHRoYXQgZmlsZSBhcyB0aGUgbG9nIGZpbGUuCitJZiBzdWNjZXNzZnVsLCBhbGwgYnVmZmVyZWQgZGF0YSBpcyB3cml0dGVuIG91dCB0byB0aGUgZmlsZSwgYW5kIGFueSBmdXJ0aGVyCitsb2dnaW5nIGlzIHdyaXR0ZW4gZGlyZWN0bHkgdG8gdGhlIGZpbGUuCisKKz1jdXQKK3N1YiBzZXRmaWxlCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkZmlsZW5hbWUgPSBzaGlmdDsKKworICAgIGlmICggZGVmaW5lZCAoICRmaWxlbmFtZSApICkKKyAgICB7CisgICAgICAgIG9wZW4gJHNlbGYtPntmaH0sICI+PiIsICRmaWxlbmFtZSBvciBkaWUoIkNvdWxkbid0IG9wZW4gJyRmaWxlbmFtZScgZm9yIHdyaXRpbmcgOiAkISIpOworICAgIH0KKworICAgIHJldHVybiB1bmxlc3MgKCBkZWZpbmVkICggJHNlbGYtPntidWZmZXJ9ICkgYW5kIHJlZiAkc2VsZi0+e2J1ZmZlcn0gZXEgIkFSUkFZIiApOworCisgICAgd2hpbGUgKCBteSAkbGluZSA9IHNoaWZ0IEB7JHNlbGYtPntidWZmZXJ9fSApCisgICAgeworICAgICAgICBwcmludCB7JHNlbGYtPntmaH19ICRsaW5lOworICAgIH0KK30KKworPWhlYWQyIG5vZmlsZQorCitUaGlzIG1ldGhvZCBpbmRpY2F0ZXMgbm8gbG9nZ2luZyBpcyBnb2luZyB0byBiZSB1c2VkLiBJdCBmbHVzaGVzIGFueSBlbnRyaWVzIGluCit0aGUgaW50ZXJuYWwgYnVmZmVyLCBhbmQgc2V0cyBhIGZsYWcgdG8gZW5zdXJlIG5vIGZ1cnRoZXIgZGF0YSBpcyBwdXQgdGhlcmUuCisKKz1jdXQKK3N1YiBub2ZpbGUKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworCisgICAgJHNlbGYtPntub2xvZ30gPSAxOworCisgICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQgKCAkc2VsZi0+e2J1ZmZlcn0gKSBhbmQgcmVmICRzZWxmLT57YnVmZmVyfSBlcSAiQVJSQVkiICk7CisKKyAgICAkc2VsZi0+e2J1ZmZlcn0gPSBbXTsKK30KKworPWhlYWQyIF9sb2dvcGVuCisKK0ludGVybmFsIG1ldGhvZC4gUmV0dXJucyB0cnVlIGlmIHRoZSBsb2cgZmlsZSBpcyBvcGVuLCBmYWxzZSBvdGhlcndpc2UuCisKKz1jdXQKK3N1YiBfbG9nb3BlbgoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisKKyAgICByZXR1cm4gMSBpZiAoIGRlZmluZWQgKCAkc2VsZi0+e2ZofSApIGFuZCByZWYgJHNlbGYtPntmaH0gZXEgIkdMT0IiICk7CisgICAgcmV0dXJuIDA7Cit9CisKKz1oZWFkMiBkZWJ1ZyBpbmZvIHdhcm4gZmF0YWwKKworVGhlc2UgZm91ciBtZXRob2RzIGFyZSB3cmFwcGVycyB0byBfbG9nLiBUaGV5IHByb3ZpZGUgdGhlIGFjdHVhbCBpbnRlcmZhY2UgZm9yCitsb2dnaW5nIGRhdGEuCisKKz1jdXQKK3N1YiBkZWJ1ZyB7IG15ICRzZWxmID0gc2hpZnQ7ICRzZWxmLT5fbG9nKCJkZWJ1ZyIsIEBfKTsgfQorc3ViIGluZm8gIHsgbXkgJHNlbGYgPSBzaGlmdDsgJHNlbGYtPl9sb2coImluZm8iICwgQF8pOyB9CitzdWIgd2FybiAgeyBteSAkc2VsZiA9IHNoaWZ0OyAkc2VsZi0+X2xvZygid2FybiIgLCBAXyk7IH0KK3N1YiBmYXRhbCB7IG15ICRzZWxmID0gc2hpZnQ7ICRzZWxmLT5fbG9nKCJmYXRhbCIsIEBfKTsgfQorCis9aGVhZDIgX2xvZworCitUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCBjYWxsZWQgYnkgdGhlIGxvZ2dpbmcgZnVuY3Rpb25zLiBJdCBnZW5lcmF0ZXMgYQordGltZXN0YW1wIGFuZCBwdXNoZXMgdGhlIGxvZ2dlZCBsaW5lIGVpdGhlciB0byBmaWxlLCBvciBpbnRlcm5hbCBidWZmZXIuCisKKz1jdXQKK3N1YiBfbG9nCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkbGV2ZWwgPSBzaGlmdDsKKworICAgIHJldHVybiBpZiAoICRzZWxmLT57bm9sb2d9ICk7CisKKyAgICBteSBAdGltZSA9IGxvY2FsdGltZTsKKyAgICBteSAkdGltZXN0cmluZyA9IHNwcmludGYoIiU0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQgOiAlLTVzIiwKKyAgICAgICAgJHRpbWVbNV0gKyAxOTAwLAorICAgICAgICAkdGltZVs0XSArIDEsCisgICAgICAgICR0aW1lWzNdLAorICAgICAgICAkdGltZVsyXSwKKyAgICAgICAgJHRpbWVbMV0sCisgICAgICAgICR0aW1lWzBdLAorICAgICAgICB1YyAkbGV2ZWwsCisgICAgKTsKKworICAgIGlmICggJHNlbGYtPl9sb2dvcGVuICkKKyAgICB7CisgICAgICAgIHByaW50IHskc2VsZi0+e2ZofX0gJHRpbWVzdHJpbmcgLiAiIC0gIiAuIGpvaW4oIiAiLEBfKSAuICJcbiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaCBAeyRzZWxmLT57YnVmZmVyfX0sICR0aW1lc3RyaW5nIC4gIiAtICIgLiBqb2luKCIgIixAXykgLiAiXG4iOworICAgIH0KK30KKworPWhlYWQyIERFU1RST1kKKworVGhpcyBtZXRob2Qgc2ltcGx5IGNsb3NlcyB0aGUgZmlsZSBoYW5kbGUgaWYgb25lIGlzIG9wZW4KKworPWN1dAorc3ViIERFU1RST1kKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworCisgICAgaWYgKCAkc2VsZi0+X2xvZ29wZW4gKQorICAgIHsKKyAgICAgICAgY2xvc2UgJHNlbGYtPntmaH07CisgICAgfQorfQorCitwYWNrYWdlIEdJVENWUzo6dXBkYXRlcjsKKworIyMjIworIyMjIyBDb3B5cmlnaHQgVGhlIE9wZW4gVW5pdmVyc2l0eSBVSyAtIDIwMDYuCisjIyMjCisjIyMjIEF1dGhvcnM6IE1hcnR5biBTbWl0aCAgICA8bWFydHluQGNhdGFseXN0Lm5ldC5uej4KKyMjIyMgICAgICAgICAgTWFydGluIExhbmdob2ZmIDxtYXJ0aW5AbGFwdG9wLm9yZz4KKyMjIyMKKyMjIyMKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBEQkk7CisKKz1oZWFkMSBNRVRIT0RTCisKKz1jdXQKKworPWhlYWQyIG5ldworCis9Y3V0CitzdWIgbmV3Cit7CisgICAgbXkgJGNsYXNzID0gc2hpZnQ7CisgICAgbXkgJGNvbmZpZyA9IHNoaWZ0OworICAgIG15ICRtb2R1bGUgPSBzaGlmdDsKKyAgICBteSAkbG9nID0gc2hpZnQ7CisKKyAgICBkaWUgIk5lZWQgdG8gc3BlY2lmeSBhIGdpdCByZXBvc2l0b3J5IiB1bmxlc3MgKCBkZWZpbmVkKCRjb25maWcpIGFuZCAtZCAkY29uZmlnICk7CisgICAgZGllICJOZWVkIHRvIHNwZWNpZnkgYSBtb2R1bGUiIHVubGVzcyAoIGRlZmluZWQoJG1vZHVsZSkgKTsKKworICAgICRjbGFzcyA9IHJlZigkY2xhc3MpIHx8ICRjbGFzczsKKworICAgIG15ICRzZWxmID0ge307CisKKyAgICBibGVzcyAkc2VsZiwgJGNsYXNzOworCisgICAgJHNlbGYtPnt2YWxpZF90YWJsZXN9ID0geydyZXZpc2lvbicgPT4gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldmlzaW9uX2l4MScgPT4gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldmlzaW9uX2l4MicgPT4gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlYWQnID0+IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWFkX2l4MScgPT4gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMnID0+IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21taXRtc2dzJyA9PiAxfTsKKworICAgICRzZWxmLT57bW9kdWxlfSA9ICRtb2R1bGU7CisgICAgJHNlbGYtPntnaXRfcGF0aH0gPSAkY29uZmlnIC4gIi8iOworCisgICAgJHNlbGYtPntsb2d9ID0gJGxvZzsKKworICAgIGRpZSAiR2l0IHJlcG8gJyRzZWxmLT57Z2l0X3BhdGh9JyBkb2Vzbid0IGV4aXN0IiB1bmxlc3MgKCAtZCAkc2VsZi0+e2dpdF9wYXRofSApOworCisgICAgIyBTdG9yZXMgZnVsbCBzaGExJ3MgZm9yIHZhcmlvdXMgYnJhbmNoL3RhZyBuYW1lcywgYWJicmV2aWF0aW9ucywgZXRjOgorICAgICRzZWxmLT57Y29tbWl0UmVmQ2FjaGV9ID0ge307CisKKyAgICAkc2VsZi0+e2RiZHJpdmVyfSA9ICRjZmctPntnaXRjdnN9eyRzdGF0ZS0+e21ldGhvZH19e2RiZHJpdmVyfSB8fAorICAgICAgICAkY2ZnLT57Z2l0Y3ZzfXtkYmRyaXZlcn0gfHwgIlNRTGl0ZSI7CisgICAgJHNlbGYtPntkYm5hbWV9ID0gJGNmZy0+e2dpdGN2c317JHN0YXRlLT57bWV0aG9kfX17ZGJuYW1lfSB8fAorICAgICAgICAkY2ZnLT57Z2l0Y3ZzfXtkYm5hbWV9IHx8ICIlR2dpdGN2cy4lbS5zcWxpdGUiOworICAgICRzZWxmLT57ZGJ1c2VyfSA9ICRjZmctPntnaXRjdnN9eyRzdGF0ZS0+e21ldGhvZH19e2RidXNlcn0gfHwKKyAgICAgICAgJGNmZy0+e2dpdGN2c317ZGJ1c2VyfSB8fCAiIjsKKyAgICAkc2VsZi0+e2RicGFzc30gPSAkY2ZnLT57Z2l0Y3ZzfXskc3RhdGUtPnttZXRob2R9fXtkYnBhc3N9IHx8CisgICAgICAgICRjZmctPntnaXRjdnN9e2RicGFzc30gfHwgIiI7CisgICAgJHNlbGYtPntkYnRhYmxlbmFtZXByZWZpeH0gPSAkY2ZnLT57Z2l0Y3ZzfXskc3RhdGUtPnttZXRob2R9fXtkYnRhYmxlbmFtZXByZWZpeH0gfHwKKyAgICAgICAgJGNmZy0+e2dpdGN2c317ZGJ0YWJsZW5hbWVwcmVmaXh9IHx8ICIiOworICAgIG15ICVtYXBwaW5nID0gKCBtID0+ICRtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgIGEgPT4gJHN0YXRlLT57bWV0aG9kfSwKKyAgICAgICAgICAgICAgICAgICAgdSA9PiBnZXRsb2dpbiB8fCBnZXRwd3VpZCgkPCkgfHwgJDwsCisgICAgICAgICAgICAgICAgICAgIEcgPT4gJHNlbGYtPntnaXRfcGF0aH0sCisgICAgICAgICAgICAgICAgICAgIGcgPT4gbWFuZ2xlX2Rpcm5hbWUoJHNlbGYtPntnaXRfcGF0aH0pLAorICAgICAgICAgICAgICAgICAgICApOworICAgICRzZWxmLT57ZGJuYW1lfSA9fiBzLyUoW21hdUdnXSkvJG1hcHBpbmd7JDF9L2VnOworICAgICRzZWxmLT57ZGJ1c2VyfSA9fiBzLyUoW21hdUdnXSkvJG1hcHBpbmd7JDF9L2VnOworICAgICRzZWxmLT57ZGJ0YWJsZW5hbWVwcmVmaXh9ID1+IHMvJShbbWF1R2ddKS8kbWFwcGluZ3skMX0vZWc7CisgICAgJHNlbGYtPntkYnRhYmxlbmFtZXByZWZpeH0gPSBtYW5nbGVfdGFibGVuYW1lKCRzZWxmLT57ZGJ0YWJsZW5hbWVwcmVmaXh9KTsKKworICAgIGRpZSAiSW52YWxpZCBjaGFyICc6JyBpbiBkYmRyaXZlciIgaWYgJHNlbGYtPntkYmRyaXZlcn0gPX4gLzovOworICAgIGRpZSAiSW52YWxpZCBjaGFyICc7JyBpbiBkYm5hbWUiIGlmICRzZWxmLT57ZGJuYW1lfSA9fiAvOy87CisgICAgJHNlbGYtPntkYmh9ID0gREJJLT5jb25uZWN0KCJkYmk6JHNlbGYtPntkYmRyaXZlcn06ZGJuYW1lPSRzZWxmLT57ZGJuYW1lfSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT57ZGJ1c2VyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPntkYnBhc3N9KTsKKyAgICBkaWUgIkVycm9yIGNvbm5lY3RpbmcgdG8gZGF0YWJhc2VcbiIgdW5sZXNzIGRlZmluZWQgJHNlbGYtPntkYmh9OworCisgICAgJHNlbGYtPnt0YWJsZXN9ID0ge307CisgICAgZm9yZWFjaCBteSAkdGFibGUgKCBrZXlzICV7JHNlbGYtPntkYmh9LT50YWJsZV9pbmZvKHVuZGVmLHVuZGVmLHVuZGVmLCdUQUJMRScpLT5mZXRjaGFsbF9oYXNocmVmKCdUQUJMRV9OQU1FJyl9ICkKKyAgICB7CisgICAgICAgICRzZWxmLT57dGFibGVzfXskdGFibGV9ID0gMTsKKyAgICB9CisKKyAgICAjIENvbnN0cnVjdCB0aGUgcmV2aXNpb24gdGFibGUgaWYgcmVxdWlyZWQKKyAgICAjIFRoZSByZXZpc2lvbiB0YWJsZSBzdG9yZXMgYW4gZW50cnkgZm9yIGVhY2ggZmlsZSwgZWFjaCB0aW1lIHRoYXQgZmlsZQorICAgICMgY2hhbmdlcy4KKyAgICAjICAgbnVtYmVyT2ZSZWNvcmRzID0gTyggbnVtQ29tbWl0cyAqIGF2ZXJhZ2VOdW1DaGFuZ2VkRmlsZXNQZXJDb21taXQgKQorICAgICMgVGhpcyBpcyBub3Qgc3VmZmljaWVudCB0byBzdXBwb3J0ICItciB7Y29tbWl0aGFzaH0iIGZvciBhbnkKKyAgICAjIGZpbGVzIGV4Y2VwdCBmaWxlcyB0aGF0IHdlcmUgbW9kaWZpZWQgYnkgdGhhdCBjb21taXQgKGFsc28sCisgICAgIyBzb21lIHBsYWNlcyBpbiB0aGUgY29kZSBpZ25vcmUvZWZmZWN0aXZlbHkgc3RyaXAgb3V0IC1yIGluCisgICAgIyBzb21lIGNhc2VzLCBiZWZvcmUgaXQgZ2V0cyBwYXNzZWQgdG8gZ2V0bWV0YSgpKS4KKyAgICAjIFRoZSAiZmlsZWhhc2giIGZpZWxkIHR5cGljYWxseSBoYXMgYSBnaXQgYmxvYiBoYXNoLCBidXQgY2FuIGFsc28KKyAgICAjIGJlIHNldCB0byAiZGVhZCIgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZ2l2ZW4gdmVyc2lvbiBvZiB0aGUgZmlsZQorICAgICMgc2hvdWxkIG5vdCBleGlzdCBpbiB0aGUgc2FuZGJveC4KKyAgICB1bmxlc3MgKCAkc2VsZi0+e3RhYmxlc317JHNlbGYtPnRhYmxlbmFtZSgicmV2aXNpb24iKX0gKQorICAgIHsKKyAgICAgICAgbXkgJHRhYmxlbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoInJldmlzaW9uIik7CisgICAgICAgIG15ICRpeDFuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgicmV2aXNpb25faXgxIik7CisgICAgICAgIG15ICRpeDJuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgicmV2aXNpb25faXgyIik7CisgICAgICAgICRzZWxmLT57ZGJofS0+ZG8oIgorICAgICAgICAgICAgQ1JFQVRFIFRBQkxFICR0YWJsZW5hbWUgKAorICAgICAgICAgICAgICAgIG5hbWUgICAgICAgVEVYVCBOT1QgTlVMTCwKKyAgICAgICAgICAgICAgICByZXZpc2lvbiAgIElOVEVHRVIgTk9UIE5VTEwsCisgICAgICAgICAgICAgICAgZmlsZWhhc2ggICBURVhUIE5PVCBOVUxMLAorICAgICAgICAgICAgICAgIGNvbW1pdGhhc2ggVEVYVCBOT1QgTlVMTCwKKyAgICAgICAgICAgICAgICBhdXRob3IgICAgIFRFWFQgTk9UIE5VTEwsCisgICAgICAgICAgICAgICAgbW9kaWZpZWQgICBURVhUIE5PVCBOVUxMLAorICAgICAgICAgICAgICAgIG1vZGUgICAgICAgVEVYVCBOT1QgTlVMTAorICAgICAgICAgICAgKQorICAgICAgICAiKTsKKyAgICAgICAgJHNlbGYtPntkYmh9LT5kbygiCisgICAgICAgICAgICBDUkVBVEUgSU5ERVggJGl4MW5hbWUKKyAgICAgICAgICAgIE9OICR0YWJsZW5hbWUgKG5hbWUscmV2aXNpb24pCisgICAgICAgICIpOworICAgICAgICAkc2VsZi0+e2RiaH0tPmRvKCIKKyAgICAgICAgICAgIENSRUFURSBJTkRFWCAkaXgybmFtZQorICAgICAgICAgICAgT04gJHRhYmxlbmFtZSAobmFtZSxjb21taXRoYXNoKQorICAgICAgICAiKTsKKyAgICB9CisKKyAgICAjIENvbnN0cnVjdCB0aGUgaGVhZCB0YWJsZSBpZiByZXF1aXJlZAorICAgICMgVGhlIGhlYWQgdGFibGUgKGFsb25nIHdpdGggdGhlICJsYXN0X2NvbW1pdCIgZW50cnkgaW4gdGhlIHByb3BlcnR5CisgICAgIyB0YWJsZSkgaXMgdGhlIHBlcnNpc3RlZCB3b3JraW5nIHN0YXRlIG9mIHRoZSAic3ViIHVwZGF0ZSIgc3Vicm91dGluZS4KKyAgICAjIEFsbCBvZiBpdCdzIGRhdGEgaXMgcmVhZCBlbnRpcmVseSBmaXJzdCwgYW5kIGNvbXBsZXRlbHkgcmVjcmVhdGVkCisgICAgIyBsYXN0LCBldmVyeSB0aW1lICJzdWIgdXBkYXRlIiBydW5zLgorICAgICMgVGhpcyBpcyBhbHNvIHVzZWQgYnkgInN1YiBnZXRtZXRhIiB3aGVuIGl0IGlzIGFza2VkIGZvciB0aGUgbGF0ZXN0CisgICAgIyB2ZXJzaW9uIG9mIGEgZmlsZSAoYXMgb3Bwb3NlZCB0byBzb21lIHNwZWNpZmljIHZlcnNpb24pLgorICAgICMgQW5vdGhlciB3YXkgb2YgdGhpbmtpbmcgYWJvdXQgaXQgaXMgYXMgYSBzaW5nbGUgc2xpY2Ugb3V0IG9mCisgICAgIyAicmV2aXNpb25zIiwgZ2l2aW5nIGp1c3QgdGhlIG1vc3QgcmVjZW50IHJldmlzaW9uIGluZm9ybWF0aW9uIGZvcgorICAgICMgZWFjaCBmaWxlLgorICAgIHVubGVzcyAoICRzZWxmLT57dGFibGVzfXskc2VsZi0+dGFibGVuYW1lKCJoZWFkIil9ICkKKyAgICB7CisgICAgICAgIG15ICR0YWJsZW5hbWUgPSAkc2VsZi0+dGFibGVuYW1lKCJoZWFkIik7CisgICAgICAgIG15ICRpeDFuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgiaGVhZF9peDEiKTsKKyAgICAgICAgJHNlbGYtPntkYmh9LT5kbygiCisgICAgICAgICAgICBDUkVBVEUgVEFCTEUgJHRhYmxlbmFtZSAoCisgICAgICAgICAgICAgICAgbmFtZSAgICAgICBURVhUIE5PVCBOVUxMLAorICAgICAgICAgICAgICAgIHJldmlzaW9uICAgSU5URUdFUiBOT1QgTlVMTCwKKyAgICAgICAgICAgICAgICBmaWxlaGFzaCAgIFRFWFQgTk9UIE5VTEwsCisgICAgICAgICAgICAgICAgY29tbWl0aGFzaCBURVhUIE5PVCBOVUxMLAorICAgICAgICAgICAgICAgIGF1dGhvciAgICAgVEVYVCBOT1QgTlVMTCwKKyAgICAgICAgICAgICAgICBtb2RpZmllZCAgIFRFWFQgTk9UIE5VTEwsCisgICAgICAgICAgICAgICAgbW9kZSAgICAgICBURVhUIE5PVCBOVUxMCisgICAgICAgICAgICApCisgICAgICAgICIpOworICAgICAgICAkc2VsZi0+e2RiaH0tPmRvKCIKKyAgICAgICAgICAgIENSRUFURSBJTkRFWCAkaXgxbmFtZQorICAgICAgICAgICAgT04gJHRhYmxlbmFtZSAobmFtZSkKKyAgICAgICAgIik7CisgICAgfQorCisgICAgIyBDb25zdHJ1Y3QgdGhlIHByb3BlcnRpZXMgdGFibGUgaWYgcmVxdWlyZWQKKyAgICAjICAtICJsYXN0X2NvbW1pdCIgLSBVc2VkIGJ5ICJzdWIgdXBkYXRlIi4KKyAgICB1bmxlc3MgKCAkc2VsZi0+e3RhYmxlc317JHNlbGYtPnRhYmxlbmFtZSgicHJvcGVydGllcyIpfSApCisgICAgeworICAgICAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgicHJvcGVydGllcyIpOworICAgICAgICAkc2VsZi0+e2RiaH0tPmRvKCIKKyAgICAgICAgICAgIENSRUFURSBUQUJMRSAkdGFibGVuYW1lICgKKyAgICAgICAgICAgICAgICBrZXkgICAgICAgIFRFWFQgTk9UIE5VTEwgUFJJTUFSWSBLRVksCisgICAgICAgICAgICAgICAgdmFsdWUgICAgICBURVhUCisgICAgICAgICAgICApCisgICAgICAgICIpOworICAgIH0KKworICAgICMgQ29uc3RydWN0IHRoZSBjb21taXRtc2dzIHRhYmxlIGlmIHJlcXVpcmVkCisgICAgIyBUaGUgY29tbWl0bXNncyB0YWJsZSBpcyBvbmx5IHVzZWQgZm9yIG1lcmdlIGNvbW1pdHMsIHNpbmNlCisgICAgIyAic3ViIHVwZGF0ZSIgd2lsbCBvbmx5IGtlZXAgb25lIGJyYW5jaCBvZiBwYXJlbnRzLiAgU2hvcnRsb2dzCisgICAgIyBmb3IgaWdub3JlZCBjb21taXRzIChpLmUuIG5vdCBvbiB0aGUgY2hvc2VuIGJyYW5jaCkgd2lsbCBiZSB1c2VkCisgICAgIyB0byBjb25zdHJ1Y3QgYSByZXBsYWNlbWVudCAiY29sbGFwc2VkIiBtZXJnZSBjb21taXQgbWVzc2FnZSwKKyAgICAjIHdoaWNoIHdpbGwgYmUgc3RvcmVkIGluIHRoaXMgdGFibGUuICBTZWUgYWxzbyAic3ViIGNvbW1pdG1lc3NhZ2UiLgorICAgIHVubGVzcyAoICRzZWxmLT57dGFibGVzfXskc2VsZi0+dGFibGVuYW1lKCJjb21taXRtc2dzIil9ICkKKyAgICB7CisgICAgICAgIG15ICR0YWJsZW5hbWUgPSAkc2VsZi0+dGFibGVuYW1lKCJjb21taXRtc2dzIik7CisgICAgICAgICRzZWxmLT57ZGJofS0+ZG8oIgorICAgICAgICAgICAgQ1JFQVRFIFRBQkxFICR0YWJsZW5hbWUgKAorICAgICAgICAgICAgICAgIGtleSAgICAgICAgVEVYVCBOT1QgTlVMTCBQUklNQVJZIEtFWSwKKyAgICAgICAgICAgICAgICB2YWx1ZSAgICAgIFRFWFQKKyAgICAgICAgICAgICkKKyAgICAgICAgIik7CisgICAgfQorCisgICAgcmV0dXJuICRzZWxmOworfQorCis9aGVhZDIgdGFibGVuYW1lCisKKz1jdXQKK3N1YiB0YWJsZW5hbWUKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICRuYW1lID0gc2hpZnQ7CisKKyAgICBpZiAoZXhpc3RzICRzZWxmLT57dmFsaWRfdGFibGVzfXskbmFtZX0pIHsKKyAgICAgICAgcmV0dXJuICRzZWxmLT57ZGJ0YWJsZW5hbWVwcmVmaXh9IC4gJG5hbWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHVuZGVmOworICAgIH0KK30KKworPWhlYWQyIHVwZGF0ZQorCitCcmluZyB0aGUgZGF0YWJhc2UgdXAgdG8gZGF0ZSB3aXRoIHRoZSBsYXRlc3QgY2hhbmdlcyBmcm9tCit0aGUgZ2l0IHJlcG9zaXRvcnkuCisKK0ludGVybmFsIHdvcmtpbmcgc3RhdGUgaXMgcmVhZCBvdXQgb2YgdGhlICJoZWFkIiB0YWJsZSBhbmQgdGhlCisibGFzdF9jb21taXQiIHByb3BlcnR5LCB0aGVuIGl0IHVwZGF0ZXMgInJldmlzaW9ucyIgYmFzZWQgb24gdGhhdCwgYW5kCitmaW5hbGx5IGl0IHdyaXRlcyB0aGUgbmV3IGludGVybmFsIHN0YXRlIGJhY2sgdG8gdGhlICJoZWFkIiB0YWJsZQorc28gaXQgY2FuIGJlIHVzZWQgYXMgYSBzdGFydGluZyBwb2ludCB0aGUgbmV4dCB0aW1lIHVwZGF0ZSBpcyBjYWxsZWQuCisKKz1jdXQKK3N1YiB1cGRhdGUKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworCisgICAgIyBmaXJzdCBsZXRzIGdldCB0aGUgY29tbWl0IGxpc3QKKyAgICAkRU5We0dJVF9ESVJ9ID0gJHNlbGYtPntnaXRfcGF0aH07CisKKyAgICBteSAkY29tbWl0c2hhMSA9IDo6c2FmZV9waXBlX2NhcHR1cmUoJ2dpdCcsICdyZXYtcGFyc2UnLCAkc2VsZi0+e21vZHVsZX0pOworICAgIGNob21wICRjb21taXRzaGExOworCisgICAgbXkgJGNvbW1pdGluZm8gPSA6OnNhZmVfcGlwZV9jYXB0dXJlKCdnaXQnLCAnY2F0LWZpbGUnLCAnY29tbWl0JywgJHNlbGYtPnttb2R1bGV9KTsKKyAgICB1bmxlc3MgKCAkY29tbWl0aW5mbyA9fiAvdHJlZVxzK1thLXpBLVowLTldezQwfS8gKQorICAgIHsKKyAgICAgICAgZGllKCJJbnZhbGlkIG1vZHVsZSAnJHNlbGYtPnttb2R1bGV9JyIpOworICAgIH0KKworCisgICAgbXkgJGdpdF9sb2c7CisgICAgbXkgJGxhc3Rjb21taXQgPSAkc2VsZi0+X2dldF9wcm9wKCJsYXN0X2NvbW1pdCIpOworCisgICAgaWYgKGRlZmluZWQgJGxhc3Rjb21taXQgJiYgJGxhc3Rjb21taXQgZXEgJGNvbW1pdHNoYTEpIHsgIyB1cC10by1kYXRlCisgICAgICAgICAjIGludmFsaWRhdGUgdGhlIGdldGhlYWQgY2FjaGUKKyAgICAgICAgICRzZWxmLT5jbGVhckNvbW1pdFJlZkNhY2hlcygpOworICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgIyBTdGFydCBleGNsdXNpdmUgbG9jayBoZXJlLi4uCisgICAgJHNlbGYtPntkYmh9LT5iZWdpbl93b3JrKCkgb3IgZGllICJDYW5ub3QgbG9jayBkYXRhYmFzZSBmb3IgQkVHSU4iOworCisgICAgIyBUT0RPOiBsb2cgcHJvY2Vzc2luZyBpcyBtZW1vcnkgYm91bmQKKyAgICAjIGlmIHdlIGNhbiBwYXJzZSBpbnRvIGEgMm5kIGZpbGUgdGhhdCBpcyBpbiByZXZlcnNlIG9yZGVyCisgICAgIyB3ZSBjYW4gcHJvYmFibHkgZG8gc29tZXRoaW5nIHJlYWxseSBlZmZpY2llbnQKKyAgICBteSBAZ2l0X2xvZ19wYXJhbXMgPSAoJy0tcHJldHR5JywgJy0tcGFyZW50cycsICctLXRvcG8tb3JkZXInKTsKKworICAgIGlmIChkZWZpbmVkICRsYXN0Y29tbWl0KSB7CisgICAgICAgIHB1c2ggQGdpdF9sb2dfcGFyYW1zLCAiJGxhc3Rjb21taXQuLiRzZWxmLT57bW9kdWxlfSI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaCBAZ2l0X2xvZ19wYXJhbXMsICRzZWxmLT57bW9kdWxlfTsKKyAgICB9CisgICAgIyBnaXQtcmV2LWxpc3QgaXMgdGhlIGJhY2tlbmQgLyBwbHVtYmluZyB2ZXJzaW9uIG9mIGdpdC1sb2cKKyAgICBvcGVuKG15ICRnaXRMb2dQaXBlLCAnLXwnLCAnZ2l0JywgJ3Jldi1saXN0JywgQGdpdF9sb2dfcGFyYW1zKQorICAgICAgICAgICAgICAgIG9yIGRpZSAiQ2Fubm90IGNhbGwgZ2l0LXJldi1saXN0OiAkISI7CisgICAgbXkgQGNvbW1pdHM9cmVhZENvbW1pdHMoJGdpdExvZ1BpcGUpOworICAgIGNsb3NlICRnaXRMb2dQaXBlOworCisgICAgIyBOb3cgYWxsIHRoZSBjb21taXRzIGFyZSBpbiB0aGUgQGNvbW1pdHMgYnVja2V0CisgICAgIyBvcmRlcmVkIGJ5IHRpbWUgREVTQy4gZm9yIGVhY2ggY29tbWl0IHRoYXQgbmVlZHMgcHJvY2Vzc2luZywKKyAgICAjIGRldGVybWluZSB3aGV0aGVyIGl0J3MgZm9sbG93aW5nIHRoZSBsYXN0IGhlYWQgd2UndmUgc2VlbiBvciBpZgorICAgICMgaXQncyBvbiBpdHMgb3duIGJyYW5jaCwgZ3JhYiBhIGZpbGUgbGlzdCwgYW5kIGFkZCB3aGF0ZXZlcidzIGNoYW5nZWQKKyAgICAjIE5PVEU6ICRsYXN0Y29tbWl0IHJlZmVycyB0byB0aGUgbGFzdCBjb21taXQgZnJvbSBwcmV2aW91cyBydW4KKyAgICAjICAgICAgICRsYXN0cGlja2VkIGlzIHRoZSBsYXN0IGNvbW1pdCB3ZSBwaWNrZWQgaW4gdGhpcyBydW4KKyAgICBteSAkbGFzdHBpY2tlZDsKKyAgICBteSAkaGVhZCA9IHt9OworICAgIGlmIChkZWZpbmVkICRsYXN0Y29tbWl0KSB7CisgICAgICAgICRsYXN0cGlja2VkID0gJGxhc3Rjb21taXQ7CisgICAgfQorCisgICAgbXkgJGNvbW1pdHRvdGFsID0gc2NhbGFyKEBjb21taXRzKTsKKyAgICBteSAkY29tbWl0Y291bnQgPSAwOworCisgICAgIyBMb2FkIHRoZSBoZWFkIHRhYmxlIGludG8gJGhlYWQgKGZvciBjYWNoZWQgbG9va3VwcyBkdXJpbmcgdGhlIHVwZGF0ZSBwcm9jZXNzKQorICAgIGZvcmVhY2ggbXkgJGZpbGUgKCBAeyRzZWxmLT5nZXRoZWFkKDEpfSApCisgICAgeworICAgICAgICAkaGVhZC0+eyRmaWxlLT57bmFtZX19ID0gJGZpbGU7CisgICAgfQorCisgICAgZm9yZWFjaCBteSAkY29tbWl0ICggQGNvbW1pdHMgKQorICAgIHsKKyAgICAgICAgJHNlbGYtPntsb2d9LT5kZWJ1ZygiR0lUQ1ZTOjp1cGRhdGVyIC0gUHJvY2Vzc2luZyBjb21taXQgJGNvbW1pdC0+e2hhc2h9ICgiIC4gKCsrJGNvbW1pdGNvdW50KSAuICIgb2YgJGNvbW1pdHRvdGFsKSIpOworICAgICAgICBpZiAoZGVmaW5lZCAkbGFzdHBpY2tlZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkbGFzdHBpY2tlZCwgQHskY29tbWl0LT57cGFyZW50c319KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAjIHNraXAsIHdlJ2xsIHNlZSB0aGlzIGRlbHRhCisgICAgICAgICAgICAgICAgIyBhcyBwYXJ0IG9mIGEgbWVyZ2UgbGF0ZXIKKyAgICAgICAgICAgICAgICAjIHdhcm4gInNraXBwaW5nIG9mZi10cmFjayAgJGNvbW1pdC0+e2hhc2h9XG4iOworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9IGVsc2lmIChAeyRjb21taXQtPntwYXJlbnRzfX0gPiAxKSB7CisgICAgICAgICAgICAgICAgIyBpdCBpcyBhIG1lcmdlIGNvbW1pdCwgZm9yIGVhY2ggcGFyZW50IHRoYXQgaXMKKyAgICAgICAgICAgICAgICAjIG5vdCAkbGFzdHBpY2tlZCAobm90IGdpdmVuIGEgQ1ZTIHJldmlzaW9uIG51bWJlciksCisgICAgICAgICAgICAgICAgIyBzZWUgaWYgd2UgY2FuIGdldCBhIGxvZworICAgICAgICAgICAgICAgICMgZnJvbSB0aGUgbWVyZ2UtYmFzZSB0byB0aGF0IHBhcmVudCB0byBwdXQgaXQKKyAgICAgICAgICAgICAgICAjIGluIHRoZSBtZXNzYWdlIGFzIGEgbWVyZ2Ugc3VtbWFyeS4KKyAgICAgICAgICAgICAgICBteSBAcGFyZW50cyA9IEB7JGNvbW1pdC0+e3BhcmVudHN9fTsKKyAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJlbnQgKEBwYXJlbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgkcGFyZW50IGVxICRsYXN0cGlja2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICMgZ2l0LW1lcmdlLWJhc2UgY2FuIHBvdGVudGlhbGx5IChidXQgcmFyZWx5KSB0aHJvdworICAgICAgICAgICAgICAgICAgICAjIHNldmVyYWwgY2FuZGlkYXRlIG1lcmdlIGJhc2VzLiBsZXQncyBhc3N1bWUKKyAgICAgICAgICAgICAgICAgICAgIyB0aGF0IHRoZSBmaXJzdCBvbmUgaXMgdGhlIGJlc3Qgb25lLgorCQkgICAgbXkgJGJhc2UgPSBldmFsIHsKKwkJCSAgICA6OnNhZmVfcGlwZV9jYXB0dXJlKCdnaXQnLCAnbWVyZ2UtYmFzZScsCisJCQkJCQkgJGxhc3RwaWNrZWQsICRwYXJlbnQpOworCQkgICAgfTsKKwkJICAgICMgVGhlIHR3byBicmFuY2hlcyBtYXkgbm90IGJlIHJlbGF0ZWQgYXQgYWxsLAorCQkgICAgIyBpbiB3aGljaCBjYXNlIG1lcmdlIGJhc2Ugc2ltcGx5IGZhaWxzIHRvIGZpbmQKKwkJICAgICMgYW55LCBidXQgdGhhdCdzIE9rLgorCQkgICAgbmV4dCBpZiAoJEApOworCisgICAgICAgICAgICAgICAgICAgIGNob21wICRiYXNlOworICAgICAgICAgICAgICAgICAgICBpZiAoJGJhc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15IEBtZXJnZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAjIHByaW50ICJ3YW50IHRvIGxvZyBiZXR3ZWVuICAkYmFzZSAkcGFyZW50IFxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZW4oR0lUTE9HLCAnLXwnLCAnZ2l0JywgJ2xvZycsICctLXByZXR0eT1tZWRpdW0nLCAiJGJhc2UuLiRwYXJlbnQiKQorCQkJICBvciBkaWUgIkNhbm5vdCBjYWxsIGdpdC1sb2c6ICQhIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15ICRtZXJnZWRoYXNoOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDxHSVRMT0c+KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvbXA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVkICRtZXJnZWRoYXNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtL15jb21taXRccysoLispJC8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtZXJnZWRoYXNoID0gJDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBncmFiIHRoZSBmaXJzdCBsaW5lIHRoYXQgbG9va3Mgbm9uLXJmYzgyMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFrYSBoYXMgY29udGVudCBhZnRlciBsZWFkaW5nIHNwYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtL15ccysoXFMuKikkLykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHRpdGxlID0gJDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGl0bGUgPSBzdWJzdHIoJHRpdGxlLDAsMTAwKTsgIyB0cnVuY2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaGlmdCBAbWVyZ2VkLCAiJG1lcmdlZGhhc2ggJHRpdGxlIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmICRtZXJnZWRoYXNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2UgR0lUTE9HOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEBtZXJnZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tbWl0LT57bWVyZ2Vtc2d9ID0gJGNvbW1pdC0+e21lc3NhZ2V9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21taXQtPnttZXJnZW1zZ30gLj0gIlxuU3VtbWFyeSBvZiBtZXJnZWQgY29tbWl0czpcblxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRzdW1tYXJ5IChAbWVyZ2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21taXQtPnttZXJnZW1zZ30gLj0gIlx0JHN1bW1hcnlcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21taXQtPnttZXJnZW1zZ30gLj0gIlxuXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJpbnQgIk1lc3NhZ2UgZm9yICRjb21taXQtPntoYXNofSBcbiRjb21taXQtPnttZXJnZW1zZ30iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgIyBjb252ZXJ0IHRoZSBkYXRlIHRvIENWUy1oYXBweSBmb3JtYXQKKyAgICAgICAgbXkgJGN2c0RhdGUgPSBjb252ZXJ0VG9DdnNEYXRlKCRjb21taXQtPntkYXRlfSk7CisKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJGxhc3RwaWNrZWQgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG15ICRmaWxlcGlwZSA9IG9wZW4oRklMRUxJU1QsICctfCcsICdnaXQnLCAnZGlmZi10cmVlJywgJy16JywgJy1yJywgJGxhc3RwaWNrZWQsICRjb21taXQtPntoYXNofSkgb3IgZGllKCJDYW5ub3QgY2FsbCBnaXQtZGlmZi10cmVlIDogJCEiKTsKKwkgICAgbG9jYWwgKCQvKSA9ICJcMCI7CisgICAgICAgICAgICB3aGlsZSAoIDxGSUxFTElTVD4gKQorICAgICAgICAgICAgeworCQljaG9tcDsKKyAgICAgICAgICAgICAgICB1bmxlc3MgKCAvXjpcZHs2fVxzKyhbMC03XXs2fSlccytbYS1mMC05XXs0MH1ccysoW2EtZjAtOV17NDB9KVxzKyhcdykkL28gKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGllKCJDb3VsZG4ndCBwcm9jZXNzIGdpdC1kaWZmLXRyZWUgbGluZSA6ICRfIik7CisgICAgICAgICAgICAgICAgfQorCQlteSAoJG1vZGUsICRoYXNoLCAkY2hhbmdlKSA9ICgkMSwgJDIsICQzKTsKKwkJbXkgJG5hbWUgPSA8RklMRUxJU1Q+OworCQljaG9tcCgkbmFtZSk7CisKKyAgICAgICAgICAgICAgICAjICRsb2ctPmRlYnVnKCJGaWxlIG1vZGU9JG1vZGUsIGhhc2g9JGhhc2gsIGNoYW5nZT0kY2hhbmdlLCBuYW1lPSRuYW1lIik7CisKKyAgICAgICAgICAgICAgICBteSAkZGJNb2RlID0gY29udmVydFRvRGJNb2RlKCRtb2RlKTsKKworICAgICAgICAgICAgICAgIGlmICggJGNoYW5nZSBlcSAiRCIgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIyRsb2ctPmRlYnVnKCJERUxFVEUgICAkbmFtZSIpOworICAgICAgICAgICAgICAgICAgICAkaGVhZC0+eyRuYW1lfSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT4gJG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiA9PiAkaGVhZC0+eyRuYW1lfXtyZXZpc2lvbn0gKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZWhhc2ggPT4gImRlbGV0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0aGFzaCA9PiAkY29tbWl0LT57aGFzaH0sCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9PiAkY3ZzRGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9PiAkY29tbWl0LT57YXV0aG9yfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPT4gJGRiTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmluc2VydF9yZXYoJG5hbWUsICRoZWFkLT57JG5hbWV9e3JldmlzaW9ufSwgJGhhc2gsICRjb21taXQtPntoYXNofSwgJGN2c0RhdGUsICRjb21taXQtPnthdXRob3J9LCAkZGJNb2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzaWYgKCAkY2hhbmdlIGVxICJNIiB8fCAkY2hhbmdlIGVxICJUIiApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAjJGxvZy0+ZGVidWcoIk1PRElGSUVEICRuYW1lIik7CisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JG5hbWV9ID0geworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PiAkbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uID0+ICRoZWFkLT57JG5hbWV9e3JldmlzaW9ufSArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlaGFzaCA9PiAkaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdGhhc2ggPT4gJGNvbW1pdC0+e2hhc2h9LAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgPT4gJGN2c0RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3IgPT4gJGNvbW1pdC0+e2F1dGhvcn0sCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0+ICRkYk1vZGUsCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICRzZWxmLT5pbnNlcnRfcmV2KCRuYW1lLCAkaGVhZC0+eyRuYW1lfXtyZXZpc2lvbn0sICRoYXNoLCAkY29tbWl0LT57aGFzaH0sICRjdnNEYXRlLCAkY29tbWl0LT57YXV0aG9yfSwgJGRiTW9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2lmICggJGNoYW5nZSBlcSAiQSIgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIyRsb2ctPmRlYnVnKCJBRERFRCAgICAkbmFtZSIpOworICAgICAgICAgICAgICAgICAgICAkaGVhZC0+eyRuYW1lfSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT4gJG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiA9PiAkaGVhZC0+eyRuYW1lfXtyZXZpc2lvbn0gPyAkaGVhZC0+eyRuYW1lfXtyZXZpc2lvbn0rMSA6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlaGFzaCA9PiAkaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdGhhc2ggPT4gJGNvbW1pdC0+e2hhc2h9LAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgPT4gJGN2c0RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3IgPT4gJGNvbW1pdC0+e2F1dGhvcn0sCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0+ICRkYk1vZGUsCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICRzZWxmLT5pbnNlcnRfcmV2KCRuYW1lLCAkaGVhZC0+eyRuYW1lfXtyZXZpc2lvbn0sICRoYXNoLCAkY29tbWl0LT57aGFzaH0sICRjdnNEYXRlLCAkY29tbWl0LT57YXV0aG9yfSwgJGRiTW9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICRsb2ctPndhcm4oIlVOS05PV04gRklMRSBDSEFOR0UgbW9kZT0kbW9kZSwgaGFzaD0kaGFzaCwgY2hhbmdlPSRjaGFuZ2UsIG5hbWU9JG5hbWUiKTsKKyAgICAgICAgICAgICAgICAgICAgZGllOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsb3NlIEZJTEVMSVNUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIyB0aGlzIGlzIHVzZWQgdG8gZGV0ZWN0IGZpbGVzIHJlbW92ZWQgZnJvbSB0aGUgcmVwbworICAgICAgICAgICAgbXkgJHNlZW5fZmlsZXMgPSB7fTsKKworICAgICAgICAgICAgbXkgJGZpbGVwaXBlID0gb3BlbihGSUxFTElTVCwgJy18JywgJ2dpdCcsICdscy10cmVlJywgJy16JywgJy1yJywgJGNvbW1pdC0+e2hhc2h9KSBvciBkaWUoIkNhbm5vdCBjYWxsIGdpdC1scy10cmVlIDogJCEiKTsKKwkgICAgbG9jYWwgJC8gPSAiXDAiOworICAgICAgICAgICAgd2hpbGUgKCA8RklMRUxJU1Q+ICkKKyAgICAgICAgICAgIHsKKwkJY2hvbXA7CisgICAgICAgICAgICAgICAgdW5sZXNzICggL14oXGQrKVxzKyhcdyspXHMrKFthLXpBLVowLTldKylcdCguKikkL28gKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGllKCJDb3VsZG4ndCBwcm9jZXNzIGdpdC1scy10cmVlIGxpbmUgOiAkXyIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG15ICggJG1vZGUsICRnaXRfdHlwZSwgJGdpdF9oYXNoLCAkZ2l0X2ZpbGVuYW1lICkgPSAoICQxLCAkMiwgJDMsICQ0ICk7CisKKyAgICAgICAgICAgICAgICAkc2Vlbl9maWxlcy0+eyRnaXRfZmlsZW5hbWV9ID0gMTsKKworICAgICAgICAgICAgICAgIG15ICggJG9sZGhhc2gsICRvbGRyZXZpc2lvbiwgJG9sZG1vZGUgKSA9ICgKKyAgICAgICAgICAgICAgICAgICAgJGhlYWQtPnskZ2l0X2ZpbGVuYW1lfXtmaWxlaGFzaH0sCisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JGdpdF9maWxlbmFtZX17cmV2aXNpb259LAorICAgICAgICAgICAgICAgICAgICAkaGVhZC0+eyRnaXRfZmlsZW5hbWV9e21vZGV9CisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgIG15ICRkYk1vZGUgPSBjb252ZXJ0VG9EYk1vZGUoJG1vZGUpOworCisgICAgICAgICAgICAgICAgIyB1bmxlc3MgdGhlIGZpbGUgZXhpc3RzIHdpdGggdGhlIHNhbWUgaGFzaCwgd2UgbmVlZCB0byB1cGRhdGUgaXQgLi4uCisgICAgICAgICAgICAgICAgdW5sZXNzICggZGVmaW5lZCgkb2xkaGFzaCkgYW5kICRvbGRoYXNoIGVxICRnaXRfaGFzaCBhbmQgZGVmaW5lZCgkb2xkbW9kZSkgYW5kICRvbGRtb2RlIGVxICRkYk1vZGUgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbXkgJG5ld3JldmlzaW9uID0gKCAkb2xkcmV2aXNpb24gb3IgMCApICsgMTsKKworICAgICAgICAgICAgICAgICAgICAkaGVhZC0+eyRnaXRfZmlsZW5hbWV9ID0geworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PiAkZ2l0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24gPT4gJG5ld3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZWhhc2ggPT4gJGdpdF9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0aGFzaCA9PiAkY29tbWl0LT57aGFzaH0sCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9PiAkY3ZzRGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9PiAkY29tbWl0LT57YXV0aG9yfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPT4gJGRiTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgfTsKKworCisgICAgICAgICAgICAgICAgICAgICRzZWxmLT5pbnNlcnRfcmV2KCRnaXRfZmlsZW5hbWUsICRuZXdyZXZpc2lvbiwgJGdpdF9oYXNoLCAkY29tbWl0LT57aGFzaH0sICRjdnNEYXRlLCAkY29tbWl0LT57YXV0aG9yfSwgJGRiTW9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY2xvc2UgRklMRUxJU1Q7CisKKyAgICAgICAgICAgICMgRGV0ZWN0IGRlbGV0ZWQgZmlsZXMKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGZpbGUgKCBzb3J0IGtleXMgJSRoZWFkICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bmxlc3MgKCBleGlzdHMgJHNlZW5fZmlsZXMtPnskZmlsZX0gb3IgJGhlYWQtPnskZmlsZX17ZmlsZWhhc2h9IGVxICJkZWxldGVkIiApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXtyZXZpc2lvbn0rKzsKKyAgICAgICAgICAgICAgICAgICAgJGhlYWQtPnskZmlsZX17ZmlsZWhhc2h9ID0gImRlbGV0ZWQiOworICAgICAgICAgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXtjb21taXRoYXNofSA9ICRjb21taXQtPntoYXNofTsKKyAgICAgICAgICAgICAgICAgICAgJGhlYWQtPnskZmlsZX17bW9kaWZpZWR9ID0gJGN2c0RhdGU7CisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JGZpbGV9e2F1dGhvcn0gPSAkY29tbWl0LT57YXV0aG9yfTsKKworICAgICAgICAgICAgICAgICAgICAkc2VsZi0+aW5zZXJ0X3JldigkZmlsZSwgJGhlYWQtPnskZmlsZX17cmV2aXNpb259LCAkaGVhZC0+eyRmaWxlfXtmaWxlaGFzaH0sICRjb21taXQtPntoYXNofSwgJGN2c0RhdGUsICRjb21taXQtPnthdXRob3J9LCAkaGVhZC0+eyRmaWxlfXttb2RlfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgIyBFTkQgOiAiRGV0ZWN0IGRlbGV0ZWQgZmlsZXMiCisgICAgICAgIH0KKworCisgICAgICAgIGlmIChleGlzdHMgJGNvbW1pdC0+e21lcmdlbXNnfSkKKyAgICAgICAgeworICAgICAgICAgICAgJHNlbGYtPmluc2VydF9tZXJnZWxvZygkY29tbWl0LT57aGFzaH0sICRjb21taXQtPnttZXJnZW1zZ30pOworICAgICAgICB9CisKKyAgICAgICAgJGxhc3RwaWNrZWQgPSAkY29tbWl0LT57aGFzaH07CisKKyAgICAgICAgJHNlbGYtPl9zZXRfcHJvcCgibGFzdF9jb21taXQiLCAkY29tbWl0LT57aGFzaH0pOworICAgIH0KKworICAgICRzZWxmLT5kZWxldGVfaGVhZCgpOworICAgIGZvcmVhY2ggbXkgJGZpbGUgKCBzb3J0IGtleXMgJSRoZWFkICkKKyAgICB7CisgICAgICAgICRzZWxmLT5pbnNlcnRfaGVhZCgKKyAgICAgICAgICAgICRmaWxlLAorICAgICAgICAgICAgJGhlYWQtPnskZmlsZX17cmV2aXNpb259LAorICAgICAgICAgICAgJGhlYWQtPnskZmlsZX17ZmlsZWhhc2h9LAorICAgICAgICAgICAgJGhlYWQtPnskZmlsZX17Y29tbWl0aGFzaH0sCisgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXttb2RpZmllZH0sCisgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXthdXRob3J9LAorICAgICAgICAgICAgJGhlYWQtPnskZmlsZX17bW9kZX0sCisgICAgICAgICk7CisgICAgfQorICAgICMgaW52YWxpZGF0ZSB0aGUgZ2V0aGVhZCBjYWNoZQorICAgICRzZWxmLT5jbGVhckNvbW1pdFJlZkNhY2hlcygpOworCisKKyAgICAjIEVuZGluZyBleGNsdXNpdmUgbG9jayBoZXJlCisgICAgJHNlbGYtPntkYmh9LT5jb21taXQoKSBvciBkaWUgIkZhaWxlZCB0byBjb21taXQgY2hhbmdlcyB0byBTUUxpdGUiOworfQorCitzdWIgcmVhZENvbW1pdHMKK3sKKyAgICBteSAkcGlwZUhhbmRsZSA9IHNoaWZ0OworICAgIG15IEBjb21taXRzOworCisgICAgbXkgJWNvbW1pdCA9ICgpOworCisgICAgd2hpbGUgKCA8JHBpcGVIYW5kbGU+ICkKKyAgICB7CisgICAgICAgIGNob21wOworICAgICAgICBpZiAobS9eY29tbWl0XHMrKC4qKSQvKSB7CisgICAgICAgICAgICAjIG9uIF5jb21taXQgbGluZXMgcHV0IHRoZSBqdXN0IHNlZW4gY29tbWl0IGluIHRoZSBzdGFjaworICAgICAgICAgICAgIyBhbmQgcHJpbWUgdGhpbmdzIGZvciB0aGUgbmV4dCBvbmUKKyAgICAgICAgICAgIGlmIChrZXlzICVjb21taXQpIHsKKyAgICAgICAgICAgICAgICBteSAlY29weSA9ICVjb21taXQ7CisgICAgICAgICAgICAgICAgdW5zaGlmdCBAY29tbWl0cywgXCVjb3B5OworICAgICAgICAgICAgICAgICVjb21taXQgPSAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG15IEBwYXJlbnRzID0gc3BsaXQobS9ccysvLCAkMSk7CisgICAgICAgICAgICAkY29tbWl0e2hhc2h9ID0gc2hpZnQgQHBhcmVudHM7CisgICAgICAgICAgICAkY29tbWl0e3BhcmVudHN9ID0gXEBwYXJlbnRzOworICAgICAgICB9IGVsc2lmIChtL14oXHcrPyk6XHMrKC4qKSQvICYmICFleGlzdHMoJGNvbW1pdHttZXNzYWdlfSkpIHsKKyAgICAgICAgICAgICMgb24gcmZjODIyLWxpa2UgbGluZXMgc2VlbiBiZWZvcmUgd2Ugc2VlIGFueSBtZXNzYWdlLAorICAgICAgICAgICAgIyBsb3dlcmNhc2UgdGhlIGVudHJ5IGFuZCBwdXQgaXQgaW4gdGhlIGhhc2ggYXMga2V5LXZhbHVlCisgICAgICAgICAgICAkY29tbWl0e2xjKCQxKX0gPSAkMjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICMgbWVzc2FnZSBsaW5lcyAtIHNraXAgaW5pdGlhbCBlbXB0eSBsaW5lCisgICAgICAgICAgICAjIGFuZCB0cmltIHdoaXRlc3BhY2UKKyAgICAgICAgICAgIGlmICghZXhpc3RzKCRjb21taXR7bWVzc2FnZX0pICYmIG0vXlxzKiQvKSB7CisgICAgICAgICAgICAgICAgIyBkZWZpbmUgaXQgdG8gbWFyayB0aGUgZW5kIG9mIGhlYWRlcnMKKyAgICAgICAgICAgICAgICAkY29tbWl0e21lc3NhZ2V9ID0gJyc7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHMvXlxzKy8vOyBzL1xzKyQvLzsgIyB0cmltIHdzCisgICAgICAgICAgICAkY29tbWl0e21lc3NhZ2V9IC49ICRfIC4gIlxuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2hpZnQgQGNvbW1pdHMsIFwlY29tbWl0IGlmICgga2V5cyAlY29tbWl0ICk7CisKKyAgICByZXR1cm4gQGNvbW1pdHM7Cit9CisKK3N1YiBjb252ZXJ0VG9DdnNEYXRlCit7CisgICAgbXkgJGRhdGUgPSBzaGlmdDsKKyAgICAjIENvbnZlcnQgZnJvbTogImdpdCByZXYtbGlzdCAtLXByZXR0eSIgZm9ybWF0dGVkIGRhdGUKKyAgICAjIENvbnZlcnQgdG86ICJ0aGUgZm9ybWF0IHNwZWNpZmllZCBieSBSRkM4MjIgYXMgbW9kaWZpZWQgYnkgUkZDMTEyMy4iCisgICAgIyBFeGFtcGxlOiAyNiBNYXkgMTk5NyAxMzowMTo0MCAtMDQwMAorICAgIGlmKCAkZGF0ZSA9fiAvXlx3K1xzKyhcdyspXHMrKFxkKylccysoXGQrOlxkKzpcZCspXHMrKFxkKylccysoWystXVxkKykkLyApCisgICAgeworICAgICAgICAkZGF0ZSA9ICIkMiAkMSAkNCAkMyAkNSI7CisgICAgfQorCisgICAgcmV0dXJuICRkYXRlOworfQorCitzdWIgY29udmVydFRvRGJNb2RlCit7CisgICAgbXkgJG1vZGUgPSBzaGlmdDsKKworICAgICMgTk9URTogVGhlIENWUyBwcm90b2NvbCB1c2VzIGEgc3RyaW5nIHNpbWlsYXIgInU9cncsZz1ydyxvPXJ3IiwKKyAgICAjICBidXQgdGhlIGRhdGFiYXNlICJtb2RlIiBjb2x1bW4gaGlzdG9yaWNhbGx5IChhbmQgY3VycmVudGx5KQorICAgICMgIG9ubHkgc3RvcmVzIHRoZSAicnciIChmb3IgdXNlcikgcGFydCBvZiB0aGUgc3RyaW5nLgorICAgICMgICAgRlVUVVJFOiBJdCBtaWdodCBtYWtlIG1vcmUgc2Vuc2UgdG8gcGVyc2lzdCB0aGUgcmF3CisgICAgIyAgb2N0YWwgbW9kZSAob3IgcGVyaGFwcyB0aGUgZmluYWwgZnVsbCBDVlMgZm9ybSkgaW5zdGVhZCBvZgorICAgICMgIHRoaXMgaGFsZi1jb252ZXJ0ZWQgZm9ybSwgYnV0IGl0IGlzbid0IGN1cnJlbnRseSB3b3J0aCB0aGUKKyAgICAjICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBoZWFkYWNoZXMuCisKKyAgICAkbW9kZT1+L15cZHszfShcZClcZFxkJC87CisgICAgbXkgJHVzZXJCaXRzPSQxOworCisgICAgbXkgJGRiTW9kZSA9ICIiOworICAgICRkYk1vZGUgLj0gInIiIGlmICggJHVzZXJCaXRzICYgNCApOworICAgICRkYk1vZGUgLj0gInciIGlmICggJHVzZXJCaXRzICYgMiApOworICAgICRkYk1vZGUgLj0gIngiIGlmICggJHVzZXJCaXRzICYgMSApOworICAgICRkYk1vZGUgPSAicnciIGlmICggJGRiTW9kZSBlcSAiIiApOworCisgICAgcmV0dXJuICRkYk1vZGU7Cit9CisKK3N1YiBpbnNlcnRfcmV2Cit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworICAgIG15ICRyZXZpc2lvbiA9IHNoaWZ0OworICAgIG15ICRmaWxlaGFzaCA9IHNoaWZ0OworICAgIG15ICRjb21taXRoYXNoID0gc2hpZnQ7CisgICAgbXkgJG1vZGlmaWVkID0gc2hpZnQ7CisgICAgbXkgJGF1dGhvciA9IHNoaWZ0OworICAgIG15ICRtb2RlID0gc2hpZnQ7CisgICAgbXkgJHRhYmxlbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoInJldmlzaW9uIik7CisKKyAgICBteSAkaW5zZXJ0X3JldiA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoIklOU0VSVCBJTlRPICR0YWJsZW5hbWUgKG5hbWUsIHJldmlzaW9uLCBmaWxlaGFzaCwgY29tbWl0aGFzaCwgbW9kaWZpZWQsIGF1dGhvciwgbW9kZSkgVkFMVUVTICg/LD8sPyw/LD8sPyw/KSIse30sMSk7CisgICAgJGluc2VydF9yZXYtPmV4ZWN1dGUoJG5hbWUsICRyZXZpc2lvbiwgJGZpbGVoYXNoLCAkY29tbWl0aGFzaCwgJG1vZGlmaWVkLCAkYXV0aG9yLCAkbW9kZSk7Cit9CisKK3N1YiBpbnNlcnRfbWVyZ2Vsb2cKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICRrZXkgPSBzaGlmdDsKKyAgICBteSAkdmFsdWUgPSBzaGlmdDsKKyAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgiY29tbWl0bXNncyIpOworCisgICAgbXkgJGluc2VydF9tZXJnZWxvZyA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoIklOU0VSVCBJTlRPICR0YWJsZW5hbWUgKGtleSwgdmFsdWUpIFZBTFVFUyAoPyw/KSIse30sMSk7CisgICAgJGluc2VydF9tZXJnZWxvZy0+ZXhlY3V0ZSgka2V5LCAkdmFsdWUpOworfQorCitzdWIgZGVsZXRlX2hlYWQKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICR0YWJsZW5hbWUgPSAkc2VsZi0+dGFibGVuYW1lKCJoZWFkIik7CisKKyAgICBteSAkZGVsZXRlX2hlYWQgPSAkc2VsZi0+e2RiaH0tPnByZXBhcmVfY2FjaGVkKCJERUxFVEUgRlJPTSAkdGFibGVuYW1lIix7fSwxKTsKKyAgICAkZGVsZXRlX2hlYWQtPmV4ZWN1dGUoKTsKK30KKworc3ViIGluc2VydF9oZWFkCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworICAgIG15ICRyZXZpc2lvbiA9IHNoaWZ0OworICAgIG15ICRmaWxlaGFzaCA9IHNoaWZ0OworICAgIG15ICRjb21taXRoYXNoID0gc2hpZnQ7CisgICAgbXkgJG1vZGlmaWVkID0gc2hpZnQ7CisgICAgbXkgJGF1dGhvciA9IHNoaWZ0OworICAgIG15ICRtb2RlID0gc2hpZnQ7CisgICAgbXkgJHRhYmxlbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoImhlYWQiKTsKKworICAgIG15ICRpbnNlcnRfaGVhZCA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoIklOU0VSVCBJTlRPICR0YWJsZW5hbWUgKG5hbWUsIHJldmlzaW9uLCBmaWxlaGFzaCwgY29tbWl0aGFzaCwgbW9kaWZpZWQsIGF1dGhvciwgbW9kZSkgVkFMVUVTICg/LD8sPyw/LD8sPyw/KSIse30sMSk7CisgICAgJGluc2VydF9oZWFkLT5leGVjdXRlKCRuYW1lLCAkcmV2aXNpb24sICRmaWxlaGFzaCwgJGNvbW1pdGhhc2gsICRtb2RpZmllZCwgJGF1dGhvciwgJG1vZGUpOworfQorCitzdWIgX2dldF9wcm9wCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAka2V5ID0gc2hpZnQ7CisgICAgbXkgJHRhYmxlbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoInByb3BlcnRpZXMiKTsKKworICAgIG15ICRkYl9xdWVyeSA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoIlNFTEVDVCB2YWx1ZSBGUk9NICR0YWJsZW5hbWUgV0hFUkUga2V5PT8iLHt9LDEpOworICAgICRkYl9xdWVyeS0+ZXhlY3V0ZSgka2V5KTsKKyAgICBteSAoICR2YWx1ZSApID0gJGRiX3F1ZXJ5LT5mZXRjaHJvd19hcnJheTsKKworICAgIHJldHVybiAkdmFsdWU7Cit9CisKK3N1YiBfc2V0X3Byb3AKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICRrZXkgPSBzaGlmdDsKKyAgICBteSAkdmFsdWUgPSBzaGlmdDsKKyAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgicHJvcGVydGllcyIpOworCisgICAgbXkgJGRiX3F1ZXJ5ID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgiVVBEQVRFICR0YWJsZW5hbWUgU0VUIHZhbHVlPT8gV0hFUkUga2V5PT8iLHt9LDEpOworICAgICRkYl9xdWVyeS0+ZXhlY3V0ZSgkdmFsdWUsICRrZXkpOworCisgICAgdW5sZXNzICggJGRiX3F1ZXJ5LT5yb3dzICkKKyAgICB7CisgICAgICAgICRkYl9xdWVyeSA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoIklOU0VSVCBJTlRPICR0YWJsZW5hbWUgKGtleSwgdmFsdWUpIFZBTFVFUyAoPyw/KSIse30sMSk7CisgICAgICAgICRkYl9xdWVyeS0+ZXhlY3V0ZSgka2V5LCAkdmFsdWUpOworICAgIH0KKworICAgIHJldHVybiAkdmFsdWU7Cit9CisKKz1oZWFkMiBnZXRoZWFkCisKKz1jdXQKKworc3ViIGdldGhlYWQKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICRpbnRSZXYgPSBzaGlmdDsKKyAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgiaGVhZCIpOworCisgICAgcmV0dXJuICRzZWxmLT57Z2V0aGVhZF9jYWNoZX0gaWYgKCBkZWZpbmVkICggJHNlbGYtPntnZXRoZWFkX2NhY2hlfSApICk7CisKKyAgICBteSAkZGJfcXVlcnkgPSAkc2VsZi0+e2RiaH0tPnByZXBhcmVfY2FjaGVkKCJTRUxFQ1QgbmFtZSwgZmlsZWhhc2gsIG1vZGUsIHJldmlzaW9uLCBtb2RpZmllZCwgY29tbWl0aGFzaCwgYXV0aG9yIEZST00gJHRhYmxlbmFtZSBPUkRFUiBCWSBuYW1lIEFTQyIse30sMSk7CisgICAgJGRiX3F1ZXJ5LT5leGVjdXRlKCk7CisKKyAgICBteSAkdHJlZSA9IFtdOworICAgIHdoaWxlICggbXkgJGZpbGUgPSAkZGJfcXVlcnktPmZldGNocm93X2hhc2hyZWYgKQorICAgIHsKKyAgICAgICAgaWYoISRpbnRSZXYpCisgICAgICAgIHsKKyAgICAgICAgICAgICRmaWxlLT57cmV2aXNpb259ID0gIjEuJGZpbGUtPntyZXZpc2lvbn0iCisgICAgICAgIH0KKyAgICAgICAgcHVzaCBAJHRyZWUsICRmaWxlOworICAgIH0KKworICAgICRzZWxmLT57Z2V0aGVhZF9jYWNoZX0gPSAkdHJlZTsKKworICAgIHJldHVybiAkdHJlZTsKK30KKworPWhlYWQyIGdldEFueUhlYWQKKworUmV0dXJucyBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBvZiBnZXRtZXRhIHN0cnVjdHVyZXMsIG9uZQorcGVyIGZpbGUgaW4gdGhlIHNwZWNpZmllZCB0cmVlIGhhc2guCisKKz1jdXQKKworc3ViIGdldEFueUhlYWQKK3sKKyAgICBteSAoJHNlbGYsJGhhc2gpID0gQF87CisKKyAgICBpZighZGVmaW5lZCgkaGFzaCkpCisgICAgeworICAgICAgICByZXR1cm4gJHNlbGYtPmdldGhlYWQoKTsKKyAgICB9CisKKyAgICBteSBAZmlsZXM7CisgICAgeworICAgICAgICBvcGVuKG15ICRmaWxlUGlwZSwgJy18JywgJ2dpdCcsICdscy10cmVlJywgJy16JywgJy1yJywgJGhhc2gpCisgICAgICAgICAgICAgICAgb3IgZGllKCJDYW5ub3QgY2FsbCBnaXQtbHMtdHJlZSA6ICQhIik7CisgICAgICAgIGxvY2FsICQvID0gIlwwIjsKKyAgICAgICAgQGZpbGVzPTwkZmlsZVBpcGU+OworICAgICAgICBjbG9zZSAkZmlsZVBpcGU7CisgICAgfQorCisgICAgbXkgJHRyZWU9W107CisgICAgbXkoJGxpbmUpOworICAgIGZvcmVhY2ggJGxpbmUgKEBmaWxlcykKKyAgICB7CisgICAgICAgICRsaW5lPX5zL1wwJC8vOworICAgICAgICB1bmxlc3MgKCAkbGluZT1+L14oXGQrKVxzKyhcdyspXHMrKFthLXpBLVowLTldKylcdCguKikkL28gKQorICAgICAgICB7CisgICAgICAgICAgICBkaWUoIkNvdWxkbid0IHByb2Nlc3MgZ2l0LWxzLXRyZWUgbGluZSA6ICRfIik7CisgICAgICAgIH0KKworICAgICAgICBteSgkbW9kZSwgJGdpdF90eXBlLCAkZ2l0X2hhc2gsICRnaXRfZmlsZW5hbWUpID0gKCQxLCAkMiwgJDMsICQ0KTsKKyAgICAgICAgcHVzaCBAJHRyZWUsICRzZWxmLT5nZXRNZXRhRnJvbUNvbW1pdGhhc2goJGdpdF9maWxlbmFtZSwkaGFzaCk7CisgICAgfQorCisgICAgcmV0dXJuICR0cmVlOworfQorCis9aGVhZDIgZ2V0UmV2aXNpb25EaXJNYXAKKworQSAicmV2aXNpb24gZGlyIG1hcCIgY29udGFpbnMgYWxsIHRoZSBwbGFpbi1maWxlIGZpbGVuYW1lcyBhc3NvY2lhdGVkCit3aXRoIGEgcGFydGljdWxhciByZXZpc2lvbiAodHJlZS1pc2gpLCBvcmdhbml6ZWQgYnkgZGlyZWN0b3J5OgorCisgICR0eXBlID0gJG91dC0+eyRkaXJ9eyRmdWxsTmFtZX0KKworVGhlIHR5cGUgb2YgZWFjaCBpcyAiRiIgKGZvciBvcmRpbmFyeSBmaWxlKSBvciAiRCIgKGZvciBkaXJlY3RvcnksCitmb3Igd2hpY2ggdGhlIG1hcCAkb3V0LT57JGZ1bGxOYW1lfSB3aWxsIGFsc28gZXhpc3QpLgorCis9Y3V0CisKK3N1YiBnZXRSZXZpc2lvbkRpck1hcAoreworICAgIG15ICgkc2VsZiwkdmVyKT1AXzsKKworICAgIGlmKCFkZWZpbmVkKCRzZWxmLT57cmV2aXNpb25EaXJNYXBDYWNoZX0pKQorICAgIHsKKyAgICAgICAgJHNlbGYtPntyZXZpc2lvbkRpck1hcENhY2hlfT17fTsKKyAgICB9CisKKyAgICAgICAgIyBHZXQgZmlsZSBsaXN0IChwcmV2aW91c2x5IGNhY2hlZCByZXN1bHRzIGFyZSBkZXBlbmRlbnQgb24gSEVBRCwKKyAgICAgICAgIyBidXQgYXJlIGVhcmx5IGluIGVhY2ggY2FzZSk6CisgICAgbXkgJGNhY2hlS2V5OworICAgIG15IChAZmlsZUxpc3QpOworICAgIGlmKCAhZGVmaW5lZCgkdmVyKSB8fCAkdmVyIGVxICIiICkKKyAgICB7CisgICAgICAgICRjYWNoZUtleT0iIjsKKyAgICAgICAgaWYoIGRlZmluZWQoJHNlbGYtPntyZXZpc2lvbkRpck1hcENhY2hlfXskY2FjaGVLZXl9KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAkc2VsZi0+e3JldmlzaW9uRGlyTWFwQ2FjaGV9eyRjYWNoZUtleX07CisgICAgICAgIH0KKworICAgICAgICBteSBAaGVhZCA9IEB7JHNlbGYtPmdldGhlYWQoKX07CisgICAgICAgIGZvcmVhY2ggbXkgJGZpbGUgKCBAaGVhZCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5leHQgaWYgKCAkZmlsZS0+e2ZpbGVoYXNofSBlcSAiZGVsZXRlZCIgKTsKKworICAgICAgICAgICAgcHVzaCBAZmlsZUxpc3QsJGZpbGUtPntuYW1lfTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBteSAoJGhhc2gpPSRzZWxmLT5sb29rdXBDb21taXRSZWYoJHZlcik7CisgICAgICAgIGlmKCAhZGVmaW5lZCgkaGFzaCkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdW5kZWY7CisgICAgICAgIH0KKworICAgICAgICAkY2FjaGVLZXk9JGhhc2g7CisgICAgICAgIGlmKCBkZWZpbmVkKCRzZWxmLT57cmV2aXNpb25EaXJNYXBDYWNoZX17JGNhY2hlS2V5fSkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJHNlbGYtPntyZXZpc2lvbkRpck1hcENhY2hlfXskY2FjaGVLZXl9OworICAgICAgICB9CisKKyAgICAgICAgb3BlbihteSAkZmlsZVBpcGUsICctfCcsICdnaXQnLCAnbHMtdHJlZScsICcteicsICctcicsICRoYXNoKQorICAgICAgICAgICAgICAgIG9yIGRpZSgiQ2Fubm90IGNhbGwgZ2l0LWxzLXRyZWUgOiAkISIpOworICAgICAgICBsb2NhbCAkLyA9ICJcMCI7CisgICAgICAgIHdoaWxlICggPCRmaWxlUGlwZT4gKQorICAgICAgICB7CisgICAgICAgICAgICBjaG9tcDsKKyAgICAgICAgICAgIHVubGVzcyAoIC9eKFxkKylccysoXHcrKVxzKyhbYS16QS1aMC05XSspXHQoLiopJC9vICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkaWUoIkNvdWxkbid0IHByb2Nlc3MgZ2l0LWxzLXRyZWUgbGluZSA6ICRfIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG15KCRtb2RlLCAkZ2l0X3R5cGUsICRnaXRfaGFzaCwgJGdpdF9maWxlbmFtZSkgPSAoJDEsICQyLCAkMywgJDQpOworCisgICAgICAgICAgICBwdXNoIEBmaWxlTGlzdCwgJGdpdF9maWxlbmFtZTsKKyAgICAgICAgfQorICAgICAgICBjbG9zZSAkZmlsZVBpcGU7CisgICAgfQorCisgICAgICAgICMgQ29udmVydCB0byBub3JtYWxpemVkIGZvcm06CisgICAgbXkgJXJldk1hcDsKKyAgICBteSAkZmlsZTsKKyAgICBmb3JlYWNoICRmaWxlIChAZmlsZUxpc3QpCisgICAgeworICAgICAgICBteSgkZGlyKSA9ICgkZmlsZT1+bSVeKD86KC4qKS8pPyhbXi9dKikkJSk7CisgICAgICAgICRkaXI9JycgaWYoIWRlZmluZWQoJGRpcikpOworCisgICAgICAgICAgICAjIHBhcmVudCBkaXJlY3RvcmllczoKKyAgICAgICAgICAgICMgLi4uIGNyZWF0ZSBlbXB0eSBkaXIgbWFwcyBmb3IgcGFyZW50IGRpcnM6CisgICAgICAgIG15KCR0ZCk9JGRpcjsKKyAgICAgICAgd2hpbGUoIWRlZmluZWQoJHJldk1hcHskdGR9KSkKKyAgICAgICAgeworICAgICAgICAgICAgJHJldk1hcHskdGR9PXt9OworCisgICAgICAgICAgICBteSgkdHApPSgkdGQ9fm0lXig/OiguKikvKT8oW14vXSopJCUpOworICAgICAgICAgICAgJHRwPScnIGlmKCFkZWZpbmVkKCR0cCkpOworICAgICAgICAgICAgJHRkPSR0cDsKKyAgICAgICAgfQorICAgICAgICAgICAgIyAuLi4gYWRkIGNoaWxkcmVuIHRvIHBhcmVudCBtYXBzIChub3cgdGhhdCB0aGV5IGV4aXN0KToKKyAgICAgICAgJHRkPSRkaXI7CisgICAgICAgIHdoaWxlKCR0ZCBuZSAiIikKKyAgICAgICAgeworICAgICAgICAgICAgbXkoJHRwKT0oJHRkPX5tJV4oPzooLiopLyk/KFteL10qKSQlKTsKKyAgICAgICAgICAgICR0cD0nJyBpZighZGVmaW5lZCgkdHApKTsKKworICAgICAgICAgICAgaWYoZGVmaW5lZCgkcmV2TWFweyR0cH17JHRkfSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoJHJldk1hcHskdHB9eyR0ZH0gbmUgJ0QnKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGllICJXZWlyZCBmaWxlL2RpcmVjdG9yeSBpbmNvbnNpc3RlbmN5IGluICRjYWNoZUtleSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxhc3Q7ICAgIyBsb29wIGV4aXQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICRyZXZNYXB7JHRwfXskdGR9PSdEJzsKKworICAgICAgICAgICAgJHRkPSR0cDsKKyAgICAgICAgfQorCisgICAgICAgICAgICAjIGZpbGUKKyAgICAgICAgJHJldk1hcHskZGlyfXskZmlsZX09J0YnOworICAgIH0KKworICAgICAgICAjIFNhdmUgaW4gY2FjaGU6CisgICAgJHNlbGYtPntyZXZpc2lvbkRpck1hcENhY2hlfXskY2FjaGVLZXl9PVwlcmV2TWFwOworICAgIHJldHVybiAkc2VsZi0+e3JldmlzaW9uRGlyTWFwQ2FjaGV9eyRjYWNoZUtleX07Cit9CisKKz1oZWFkMiBnZXRsb2cKKworU2VlIGFsc28gZ2V0aGlzdG9yeWRlbnNlKCkuCisKKz1jdXQKKworc3ViIGdldGxvZworeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisgICAgbXkgJHJldkZpbHRlciA9IHNoaWZ0OworCisgICAgbXkgJHRhYmxlbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoInJldmlzaW9uIik7CisKKyAgICAjIEZpbHRlcnM6CisgICAgIyBUT0RPOiBkYXRlLCBzdGF0ZSwgb3IgYnkgc3BlY2lmaWMgbG9naW5zIGZpbHRlcnM/CisgICAgIyBUT0RPOiBIYW5kbGUgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcmV2RmlsdGVyIGl0ZW1zLCBlYWNoIGl0ZW0KKyAgICAjICAgY2FuIGJlIGEgcmFuZ2UgW29ubHkgY2FzZSBjdXJyZW50bHkgaGFuZGxlZF0gb3IgaW5kaXZpZHVhbAorICAgICMgICByZXYgb3IgYnJhbmNoIG9yICJicmFuY2guIi4KKyAgICAjIFRPRE86IEFkanVzdCAkZGJfcXVlcnkgV0hFUkUgY2xhdXNlIGJhc2VkIG9uIHJldkZpbHRlciwgaW5zdGVhZCBvZgorICAgICMgICBtYW51YWxseSBmaWx0ZXJpbmcgdGhlIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5PworICAgIG15ICggJG1pbnJldiwgJG1heHJldiApOworICAgIGlmKCBkZWZpbmVkKCRyZXZGaWx0ZXIpIGFuZAorICAgICAgICAkc3RhdGUtPntvcHR9e3J9ID1+IC9eKDEuKFxkKykpPyg6Oj8pKDEuKFxkLispKT8kLyApCisgICAgeworICAgICAgICBteSAkY29udHJvbCA9ICQzOworICAgICAgICAkbWlucmV2ID0gJDI7CisgICAgICAgICRtYXhyZXYgPSAkNTsKKyAgICAgICAgJG1pbnJldisrIGlmICggZGVmaW5lZCgkbWlucmV2KSBhbmQgJGNvbnRyb2wgZXEgIjo6IiApOworICAgIH0KKworICAgIG15ICRkYl9xdWVyeSA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoIlNFTEVDVCBuYW1lLCBmaWxlaGFzaCwgYXV0aG9yLCBtb2RlLCByZXZpc2lvbiwgbW9kaWZpZWQsIGNvbW1pdGhhc2ggRlJPTSAkdGFibGVuYW1lIFdIRVJFIG5hbWU9PyBPUkRFUiBCWSByZXZpc2lvbiBERVNDIix7fSwxKTsKKyAgICAkZGJfcXVlcnktPmV4ZWN1dGUoJGZpbGVuYW1lKTsKKworICAgIG15ICR0b3RhbFJldnM9MDsKKyAgICBteSAkdHJlZSA9IFtdOworICAgIHdoaWxlICggbXkgJGZpbGUgPSAkZGJfcXVlcnktPmZldGNocm93X2hhc2hyZWYgKQorICAgIHsKKyAgICAgICAgJHRvdGFsUmV2cysrOworICAgICAgICBpZiggZGVmaW5lZCgkbWlucmV2KSBhbmQgJGZpbGUtPntyZXZpc2lvbn0gPCAkbWlucmV2ICkKKyAgICAgICAgeworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgICAgICBpZiggZGVmaW5lZCgkbWF4cmV2KSBhbmQgJGZpbGUtPntyZXZpc2lvbn0gPiAkbWF4cmV2ICkKKyAgICAgICAgeworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgICRmaWxlLT57cmV2aXNpb259ID0gIjEuIiAuICRmaWxlLT57cmV2aXNpb259OworICAgICAgICBwdXNoIEAkdHJlZSwgJGZpbGU7CisgICAgfQorCisgICAgcmV0dXJuICgkdHJlZSwkdG90YWxSZXZzKTsKK30KKworPWhlYWQyIGdldG1ldGEKKworVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGZpbGVuYW1lICh3aXRoIHBhdGgpIGFyZ3VtZW50IGFuZCByZXR1cm5zIGEgaGFzaHJlZiBvZgorbWV0YWRhdGEgZm9yIHRoYXQgZmlsZS4KKworVGhlcmUgYXJlIHNldmVyYWwgd2F5cyAkcmV2aXNpb24gY2FuIGJlIHNwZWNpZmllZDoKKworICAgLSBBIHJlZmVyZW5jZSB0byBoYXNoIHRoYXQgY29udGFpbnMgYSAidGFnIiB0aGF0IGlzIHRoZQorICAgICBhY3R1YWwgcmV2aXNpb24gKG9uZSBvZiB0aGUgYmVsb3cpLiAgVE9ETzogQWxzbyBhbGxvdyBpdCB0bworICAgICBzcGVjaWZ5IGEgImRhdGUiIGluIHRoZSBoYXNoLgorICAgLSB1bmRlZiwgdG8gcmVmZXIgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9uIHRoZSBtYWluIGJyYW5jaC4KKyAgIC0gRnVsbCBDVlMgY2xpZW50IHJldmlzaW9uIG51bWJlciAobWFwcGVkIHRvIGludGVnZXIgaW4gREIsIHdpdGhvdXQgdGhlCisgICAgICIxLiIgcHJlZml4KSwKKyAgIC0gQ29tcGxleCBDVlMtY29tcGF0aWJsZSAic3BlY2lhbCIgcmV2aXNpb24gbnVtYmVyIGZvcgorICAgICBub24tbGluZWFyIGhpc3RvcnkgKHNlZSBjb21tZW50IGJlbG93KQorICAgLSBnaXQgY29tbWl0IHNoYTEgaGFzaAorICAgLSBicmFuY2ggb3IgdGFnIG5hbWUKKworPWN1dAorCitzdWIgZ2V0bWV0YQoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisgICAgbXkgJHJldmlzaW9uID0gc2hpZnQ7CisgICAgbXkgJHRhYmxlbmFtZV9yZXYgPSAkc2VsZi0+dGFibGVuYW1lKCJyZXZpc2lvbiIpOworICAgIG15ICR0YWJsZW5hbWVfaGVhZCA9ICRzZWxmLT50YWJsZW5hbWUoImhlYWQiKTsKKworICAgIGlmICggcmVmKCRyZXZpc2lvbikgZXEgIkhBU0giICkKKyAgICB7CisgICAgICAgICRyZXZpc2lvbiA9ICRyZXZpc2lvbi0+e3RhZ307CisgICAgfQorCisgICAgIyBPdmVydmlldyBvZiBDVlMgcmV2aXNpb24gbnVtYmVyczoKKyAgICAjCisgICAgIyBHZW5lcmFsIENWUyBudW1iZXJpbmcgc2NoZW1lOgorICAgICMgICAtIEJhc2ljIG1haW5saW5lIGJyYW5jaCBudW1iZXJzOiAiMS4xIiwgIjEuMiIsICIxLjMiLCBldGMuCisgICAgIyAgIC0gUmVzdWx0IG9mICJjdnMgY2hlY2tpbiAtciIgKHBvc3NpYmxlLCBidXQgbm90IHJlYWxseQorICAgICMgICAgIHJlY29tbWVuZGVkKTogIjIuMSIsICIyLjIiLCBldGMKKyAgICAjICAgLSBCcmFuY2ggdGFnOiAiMS4yLjAubiIsIHdoZXJlICIxLjIiIGlzIHJldmlzaW9uIGl0IHdhcyBicmFuY2hlZAorICAgICMgICAgIGZyb20sICIwIiBpcyBhIG1hZ2ljIHBsYWNlaG9sZGVyIHRoYXQgaWRlbnRpZmllcyBpdCBhcyBhCisgICAgIyAgICAgYnJhbmNoIHRhZyBpbnN0ZWFkIG9mIGEgdmVyc2lvbiB0YWcsIGFuZCBuIGlzIDIgdGltZXMgdGhlCisgICAgIyAgICAgYnJhbmNoIG51bWJlciBvZmYgb2YgIjEuMiIsIHN0YXJ0aW5nIHdpdGggIjIiLgorICAgICMgICAtIFZlcnNpb24gb24gYSBicmFuY2g6ICIxLjIubi54Iiwgd2hlcmUgIjEuMiIgaXMgYnJhbmNoLWZyb20sICJuIgorICAgICMgICAgIGlzIGJyYW5jaCBudW1iZXIgb2ZmIG9mICIxLjIiIChsaWtlIG4gYWJvdmUpLCBhbmQgIngiIGlzCisgICAgIyAgICAgdGhlIHZlcnNpb24gbnVtYmVyIG9uIHRoZSBicmFuY2guCisgICAgIyAgIC0gQnJhbmNoZXMgY2FuIGJyYW5jaCBvZmYgb2YgYnJhbmNoZXM6ICIxLjMuMi43LjQuMSIgKGV2ZW4gbnVtYmVyCisgICAgIyAgICAgb2YgY29tcG9uZW50cykuCisgICAgIyAgIC0gT2RkICJuInMgYXJlIHVzZWQgYnkgInZlbmRvciBicmFuY2hlcyIgdGhhdCByZXN1bHQKKyAgICAjICAgICBmcm9tICJjdnMgaW1wb3J0Ii4gIFZlbmRvciBicmFuY2hlcyBoYXZlIGFkZGl0aW9uYWwKKyAgICAjICAgICBzdHJhbmdlbmVzcyBpbiB0aGUgc2Vuc2UgdGhhdCB0aGUgbWFpbiByY3MgImhlYWQiIG9mIHRoZSBtYWluCisgICAgIyAgICAgYnJhbmNoIHdpbGwgKHRlbXBvcmFyaWx5IHVudGlsIGZpcnN0IG5vcm1hbCBjb21taXQpIHBvaW50CisgICAgIyAgICAgdG8gdGhlIHZlcnNpb24gb24gdGhlIHZlbmRvciBicmFuY2gsIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwKKyAgICAjICAgICBtYWluIGJyYW5jaC4gIChGVVRVUkU6IFRoaXMgbWF5IHByb3ZpZGUgYW4gb3Bwb3J0dW5pdHkKKyAgICAjICAgICB0byB1c2UgInN0cmFuZ2UiIHJldmlzaW9uIG51bWJlcnMgZm9yIGZhc3QtZm9yd2FyZC1tZXJnZWQKKyAgICAjICAgICBicmFuY2ggdGlwIHdoZW4gQ1ZTIGNsaWVudCBpcyBhc2tpbmcgZm9yIHRoZSBtYWluIGJyYW5jaC4pCisgICAgIworICAgICMgZ2l0LWN2c3NlcnZlciBDVlMtY29tcGF0aWJsZSBzcGVjaWFsIG51bWJlcmluZyBzY2hlbWVzOgorICAgICMgICAtIEN1cnJlbnRseSBnaXQtY3Zzc2VydmVyIG9ubHkgdHJpZXMgdG8gYmUgaWRlbnRpY2FsIHRvIENWUyBmb3IKKyAgICAjICAgICBzaW1wbGUgIjEueCIgbnVtYmVycyBvbiB0aGUgIm1haW4iIGJyYW5jaCAoYXMgaWRlbnRpZmllZAorICAgICMgICAgIGJ5IHRoZSBtb2R1bGUgbmFtZSB0aGF0IHdhcyBvcmlnaW5hbGx5IGN2cyBjaGVja291dCdlZCkuCisgICAgIyAgIC0gVGhlIGRhdGFiYXNlIG9ubHkgc3RvcmVzIHRoZSAieCIgcGFydCwgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4KKyAgICAjICAgICBCdXQgbW9zdCBvZiB0aGUgcmVzdCBvZiB0aGUgY3Zzc2VydmVyIHByZXNlcnZlcworICAgICMgICAgIGFuZCB0aGlua3MgdXNpbmcgdGhlIGZ1bGwgcmV2aXNpb24gbnVtYmVyLgorICAgICMgICAtIFRvIGhhbmRsZSBub24tbGluZWFyIGhpc3RvcnksIGl0IHVzZXMgYSB2ZXJzaW9uIG9mIHRoZSBmb3JtCisgICAgIyAgICAgIjIuMS4xLjIwMDAuYi5iLmIuIi4uLiwgd2hlcmUgdGhlIDIuMS4xLjIwMDAgaXMgdG8gaGVscCB1bmlxdWVseQorICAgICMgICAgIGlkZW50aWZ5IHRoaXMgYXMgYSBzcGVjaWFsIHJldmlzaW9uIG51bWJlciwgYW5kIHRoZXJlIGFyZQorICAgICMgICAgIDIwIGIncyB0aGF0IHRvZ2V0aGVyIGVuY29kZSB0aGUgc2hhMSBnaXQgY29tbWl0IGZyb20gd2hpY2gKKyAgICAjICAgICB0aGlzIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9yaWdpbmF0ZWQuICBFYWNoIGIgaXMKKyAgICAjICAgICB0aGUgbnVtZXJpY2FsIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGJ5dGUgcGx1cworICAgICMgICAgIDEwMC4KKyAgICAjICAgICAgLSAicGx1cyAxMDAiIGF2b2lkcyAiMCJzLCBhbmQgYWxzbyByZWR1Y2VzIHRoZQorICAgICMgICAgICAgIGxpa2VsaWhvb2Qgb2YgYSBjb2xsaXNpb24gaW4gdGhlIGNhc2UgdGhhdCBzb21lb25lIHNvbWVkYXkKKyAgICAjICAgICAgICB3cml0ZXMgYW4gaW1wb3J0IHRvb2wgdGhhdCB0cmllcyB0byBwcmVzZXJ2ZSBvcmlnaW5hbAorICAgICMgICAgICAgIENWUyByZXZpc2lvbiBudW1iZXJzLCBhbmQgdGhlIG9yaWdpbmFsIENWUyBkYXRhIGhhZCBkb25lCisgICAgIyAgICAgICAgbG90cyBvZiBicmFuY2hlcyBvZmYgb2YgYnJhbmNoZXMgYW5kIG90aGVyIHN0cmFuZ2VuZXNzIHRvCisgICAgIyAgICAgICAgZW5kIHVwIHdpdGggYSByZWFsIHZlcnNpb24gbnVtYmVyIHRoYXQganVzdCBoYXBwZW5zIHRvIGxvb2sKKyAgICAjICAgICAgICBsaWtlIHRoaXMgc3BlY2lhbCByZXZpc2lvbiBudW1iZXIgZm9ybS4gIEFsc28sIGlmIG5lZWRlZAorICAgICMgICAgICAgIHRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZXh0ZW5kL2lkZW50aWZ5IGFsdGVybmF0aXZlIGVuY29kaW5ncworICAgICMgICAgICAgIHdpdGhpbiB0aGUgIjIuMS4xLjIwMDAiIHBhcnQgaWYgbmVjZXNzYXJ5LgorICAgICMgICAgICAtIFVubGlrZSByZWFsIENWUyByZXZpc2lvbnMsIHlvdSBjYW4ndCByZWFsbHkgcmVjb25zdHJ1Y3Qgd2hhdAorICAgICMgICAgICAgIHJlbGF0aW9uIGEgcmV2aXNpb24gb2YgdGhpcyBmb3JtIGhhcyB0byBvdGhlciByZXZpc2lvbnMuCisgICAgIyAgIC0gRlVUVVJFOiBUT0RPOiBSZXdvcmsgZGF0YWJhc2Ugc29tZWhvdyB0byBtYWtlIHVwIGFuZCByZW1lbWJlcgorICAgICMgICAgIGZ1bGx5LUNWUy1jb21wYXRpYmxlIGJyYW5jaGVzIGFuZCBicmFuY2ggdmVyc2lvbiBudW1iZXJzLgorCisgICAgbXkgJG1ldGE7CisgICAgaWYgKCBkZWZpbmVkKCRyZXZpc2lvbikgKQorICAgIHsKKyAgICAgICAgaWYgKCAkcmV2aXNpb24gPX4gL14xXC4oXGQrKSQvICkKKyAgICAgICAgeworICAgICAgICAgICAgbXkgKCRpbnRSZXYpID0gJDE7CisgICAgICAgICAgICBteSAkZGJfcXVlcnk7CisgICAgICAgICAgICAkZGJfcXVlcnkgPSAkc2VsZi0+e2RiaH0tPnByZXBhcmVfY2FjaGVkKAorICAgICAgICAgICAgICAgICJTRUxFQ1QgKiBGUk9NICR0YWJsZW5hbWVfcmV2IFdIRVJFIG5hbWU9PyBBTkQgcmV2aXNpb249PyIsCisgICAgICAgICAgICAgICAge30sMSk7CisgICAgICAgICAgICAkZGJfcXVlcnktPmV4ZWN1dGUoJGZpbGVuYW1lLCAkaW50UmV2KTsKKyAgICAgICAgICAgICRtZXRhID0gJGRiX3F1ZXJ5LT5mZXRjaHJvd19oYXNocmVmOworICAgICAgICB9CisgICAgICAgIGVsc2lmICggJHJldmlzaW9uID1+IC9eMlwuMVwuMVwuMjAwMChcLlsxLTNdWzAtOV1bMC05XSl7MjB9JC8gKQorICAgICAgICB7CisgICAgICAgICAgICBteSAoJGNvbW1pdEhhc2gpPSgkcmV2aXNpb249fi9eMlwuMVwuMVwuMjAwMCguKikkLyk7CisgICAgICAgICAgICAkY29tbWl0SGFzaD1+cy9cLihbMC05XSspL3NwcmludGYoIiUwMngiLCQxLTEwMCkvZWc7CisgICAgICAgICAgICBpZigkY29tbWl0SGFzaD1+L15bMC05YS1mXXs0MH0kLykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJHNlbGYtPmdldE1ldGFGcm9tQ29tbWl0aGFzaCgkZmlsZW5hbWUsJGNvbW1pdEhhc2gpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAjIGVycm9yIHJlY292ZXJ5OiBmYWxsIGJhY2sgb24gaGVhZCB2ZXJzaW9uIGJlbG93CisgICAgICAgICAgICBwcmludCAiRSBGYWlsZWQgdG8gZmluZCAkZmlsZW5hbWUgdmVyc2lvbj0kcmV2aXNpb24gb3IgY29tbWl0PSRjb21taXRIYXNoXG4iOworICAgICAgICAgICAgJGxvZy0+d2FybmluZygiZmFpbGVkIGdldCAkcmV2aXNpb24gd2l0aCBjb21taXRoYXNoPSRjb21taXRIYXNoIik7CisgICAgICAgICAgICB1bmRlZiAkcmV2aXNpb247CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYgKCAkcmV2aXNpb24gPX4gL15bMC05YS1mXXs0MH0kLyApCisgICAgICAgIHsKKyAgICAgICAgICAgICMgVHJ5IERCIGZpcnN0LiAgVGhpcyBpcyBtb3N0bHkgb25seSB1c2VmdWwgZm9yIHJlcV9hbm5vdGF0ZSgpLAorICAgICAgICAgICAgIyB3aGljaCBvbmx5IGNhbGxzIHRoaXMgZm9yIHN0dWZmIHRoYXQgc2hvdWxkIGFscmVhZHkgYmUgaW4KKyAgICAgICAgICAgICMgdGhlIERCLiAgSXQgaXMgZmFpcmx5IGxpa2VseSB0byBiZSBhIHdhc3RlIG9mIHRpbWUKKyAgICAgICAgICAgICMgaW4gbW9zdCBvdGhlciBjYXNlcyBbdW5sZXNzIHRoZSBmaWxlIGhhcHBlbmVkIHRvIGJlCisgICAgICAgICAgICAjIG1vZGlmaWVkIGluICRyZXZpc2lvbiBzcGVjaWZpY2FsbHldLCBidXQKKyAgICAgICAgICAgICMgaXQgaXMgcHJvYmFibHkgaW4gdGhlIG5vaXNlIGNvbXBhcmVkIHRvIGhvdyBsb25nCisgICAgICAgICAgICAjIGdldE1ldGFGcm9tQ29tbWl0aGFzaCgpIHdpbGwgdGFrZS4KKyAgICAgICAgICAgIG15ICRkYl9xdWVyeTsKKyAgICAgICAgICAgICRkYl9xdWVyeSA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoCisgICAgICAgICAgICAgICAgIlNFTEVDVCAqIEZST00gJHRhYmxlbmFtZV9yZXYgV0hFUkUgbmFtZT0/IEFORCBjb21taXRoYXNoPT8iLAorICAgICAgICAgICAgICAgIHt9LDEpOworICAgICAgICAgICAgJGRiX3F1ZXJ5LT5leGVjdXRlKCRmaWxlbmFtZSwgJHJldmlzaW9uKTsKKyAgICAgICAgICAgICRtZXRhID0gJGRiX3F1ZXJ5LT5mZXRjaHJvd19oYXNocmVmOworCisgICAgICAgICAgICBpZighICRtZXRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG15KCRyZXZDb21taXQpPSRzZWxmLT5sb29rdXBDb21taXRSZWYoJHJldmlzaW9uKTsKKyAgICAgICAgICAgICAgICBpZigkcmV2Q29tbWl0PX4vXlswLTlhLWZdezQwfSQvKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRzZWxmLT5nZXRNZXRhRnJvbUNvbW1pdGhhc2goJGZpbGVuYW1lLCRyZXZDb21taXQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgZXJyb3IgcmVjb3Zlcnk6IG5vdGhpbmcgZm91bmQ6CisgICAgICAgICAgICAgICAgcHJpbnQgIkUgRmFpbGVkIHRvIGZpbmQgJGZpbGVuYW1lIHZlcnNpb249JHJldmlzaW9uXG4iOworICAgICAgICAgICAgICAgICRsb2ctPndhcm5pbmcoImZhaWxlZCBnZXQgJHJldmlzaW9uIik7CisgICAgICAgICAgICAgICAgcmV0dXJuICRtZXRhOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbXkoJHJldkNvbW1pdCk9JHNlbGYtPmxvb2t1cENvbW1pdFJlZigkcmV2aXNpb24pOworICAgICAgICAgICAgaWYoJHJldkNvbW1pdD1+L15bMC05YS1mXXs0MH0kLykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJHNlbGYtPmdldE1ldGFGcm9tQ29tbWl0aGFzaCgkZmlsZW5hbWUsJHJldkNvbW1pdCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICMgZXJyb3IgcmVjb3Zlcnk6IGZhbGwgYmFjayBvbiBoZWFkIHZlcnNpb24gYmVsb3cKKyAgICAgICAgICAgIHByaW50ICJFIEZhaWxlZCB0byBmaW5kICRmaWxlbmFtZSB2ZXJzaW9uPSRyZXZpc2lvblxuIjsKKyAgICAgICAgICAgICRsb2ctPndhcm5pbmcoImZhaWxlZCBnZXQgJHJldmlzaW9uIik7CisgICAgICAgICAgICB1bmRlZiAkcmV2aXNpb247ICAjIEFsbG93IGZhbGxiYWNrCisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZighZGVmaW5lZCgkcmV2aXNpb24pKQorICAgIHsKKyAgICAgICAgbXkgJGRiX3F1ZXJ5OworICAgICAgICAkZGJfcXVlcnkgPSAkc2VsZi0+e2RiaH0tPnByZXBhcmVfY2FjaGVkKAorICAgICAgICAgICAgICAgICJTRUxFQ1QgKiBGUk9NICR0YWJsZW5hbWVfaGVhZCBXSEVSRSBuYW1lPT8iLHt9LDEpOworICAgICAgICAkZGJfcXVlcnktPmV4ZWN1dGUoJGZpbGVuYW1lKTsKKyAgICAgICAgJG1ldGEgPSAkZGJfcXVlcnktPmZldGNocm93X2hhc2hyZWY7CisgICAgfQorCisgICAgaWYoJG1ldGEpCisgICAgeworICAgICAgICAkbWV0YS0+e3JldmlzaW9ufSA9ICIxLiRtZXRhLT57cmV2aXNpb259IjsKKyAgICB9CisgICAgcmV0dXJuICRtZXRhOworfQorCitzdWIgZ2V0TWV0YUZyb21Db21taXRoYXNoCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkZmlsZW5hbWUgPSBzaGlmdDsKKyAgICBteSAkcmV2Q29tbWl0ID0gc2hpZnQ7CisKKyAgICAjIE5PVEU6IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBzY2FsZSB3ZWxsIChsb3RzIG9mIGZvcmtzKSwgZXNwZWNpYWxseQorICAgICMgICBpZiB5b3UgaGF2ZSBtYW55IGZpbGVzIHRoYXQgaGF2ZSBub3QgYmVlbiBtb2RpZmllZCBmb3IgbWFueSBjb21taXRzCisgICAgIyAgIChlYWNoIGdpdC1yZXYtcGFyc2UgcmVkb2VzIGEgbG90IG9mIHdvcmsgZm9yIGVhY2ggZmlsZQorICAgICMgICB0aGF0IHRoZW9yZXRpY2FsbHkgY291bGQgYmUgZG9uZSBpbiBwYXJhbGxlbCBieSBzbWFydGVyCisgICAgIyAgIGdyYXBoIHRyYXZlcnNhbCkuCisgICAgIworICAgICMgVE9ETzogUG9zc2libGUgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXM6CisgICAgIyAgIC0gU29sdmUgdGhlIGlzc3VlIG9mIGFzc2lnbmluZyBhbmQgcmVtZW1iZXJpbmcgInJlYWwiIENWUworICAgICMgICAgIHJldmlzaW9uIG51bWJlcnMgZm9yIGJyYW5jaGVzLCBhbmQgZW5zdXJlIHRoZQorICAgICMgICAgIGRhdGEgc3RydWN0dXJlIGNhbiBkbyB0aGlzIGVmZmljaWVudGx5LiAgUGVyaGFwcyBzb21ldGhpbmcKKyAgICAjICAgICBzaW1pbGFyIHRvICJnaXQgbm90ZXMiLCBhbmQgY2FyZWZ1bGx5IHN0cnVjdHVyZWQgdG8gdGFrZQorICAgICMgICAgIGFkdmFudGFnZSBzYW1lLXNoYTEtaXMtc2FtZS1jb250ZW50cywgdG8gcm9sbCB0aGUgc2FtZQorICAgICMgICAgIHVubW9kaWZpZWQgc3ViZGlyZWN0b3J5IGRhdGEgb250byBtdWx0aXBsZSBjb21taXRzPworICAgICMgICAtIFdyaXRlIGFuZCB1c2UgYSBDIHRvb2wgdGhhdCBpcyBsaWtlIGdpdC1ibGFtZSwgYnV0CisgICAgIyAgICAgb3BlcmF0ZXMgb24gbXVsdGlwbGUgZmlsZXMgd2l0aCBmaWxlIGdyYW51bGFyaXR5LCBpbnN0ZWFkCisgICAgIyAgICAgb2Ygb25lIGZpbGUgd2l0aCBsaW5lIGdyYW51bGFyaXR5LiAgQ2FjaGUKKyAgICAjICAgICBtb3N0LXJlY2VudGx5LW1vZGlmaWVkIGluICRzZWxmLT57Y29tbWl0UmVmQ2FjaGV9eyRyZXZDb21taXR9LgorICAgICMgICAgIFRyeSB0byBiZSBpbnRlbGxpZ2VudCBhYm91dCBob3cgbWFueSBmaWxlcyB3ZSBkbyB3aXRoCisgICAgIyAgICAgb25lIGZvcmsgKHBlcmhhcHMgb25lIGRpcmVjdG9yeSBhdCBhIHRpbWUsIHdpdGhvdXQgcmVjdXJzaW9uLAorICAgICMgICAgIGFuZC9vciBpbmNsdWRlIGRpcmVjdG9yeSBhcyBvbmUgbGluZSBpdGVtLCByZWN1cnNlIGZyb20gaGVyZQorICAgICMgICAgIGluc3RlYWQgb2YgaW4gQyB0b29sPykuCisgICAgIyAgIC0gUGVyaGFwcyB3ZSBjb3VsZCBhc2sgdGhlIERCIGZvciAoZmlsZW5hbWUsZmlsZUhhc2gpLAorICAgICMgICAgIGFuZCBqdXN0IGd1ZXNzIHRoYXQgaXQgaXMgY29ycmVjdCAodGhhdCB0aGUgZmlsZSBoYWRuJ3QKKyAgICAjICAgICBjaGFuZ2VkIGJldHdlZW4gJHJldkNvbW1pdCBhbmQgdGhlIGZvdW5kIGNvbW1pdCwgdGhlbgorICAgICMgICAgIGNoYW5nZWQgYmFjaywgY29uZnVzaW5nIGFueXRoaW5nIHRyeWluZyB0byBpbnRlcnByZXQKKyAgICAjICAgICBoaXN0b3J5KS4gIFByb2JhYmx5IG5lZWQgdG8gYWRkIGFub3RoZXIgaW5kZXggdG8gcmV2aXNpb25zCisgICAgIyAgICAgREIgdGFibGUgZm9yIHRoaXMuCisgICAgIyAgIC0gTk9URTogVHJ5aW5nIHRvIHN0b3JlIGFsbCAoY29tbWl0LGZpbGUpIGtleXMgaW4gREIgW3RvCisgICAgIyAgICAgZmluZCAibGFzdE1vZGZpZWRDb21taXRdIChpbnN0ZWFkIG9mCisgICAgIyAgICAganVzdCBmaWxlcyB0aGF0IGNoYW5nZWQgaW4gZWFjaCBjb21taXQgYXMgd2UgZG8gbm93KSBpcworICAgICMgICAgIHByb2JhYmx5IG5vdCBwcmFjdGljYWwgZnJvbSBhIGRpc2sgc3BhY2UgcGVyc3BlY3RpdmUuCisKKyAgICAgICAgIyBEb2VzIHRoZSBmaWxlIGV4aXN0IGluICRyZXZDb21taXQ/CisgICAgIyBUT0RPOiBJbmNsdWRlIGZpbGUgaGFzaCBpbiBkaXJtYXAgY2FjaGUuCisgICAgbXkoJGRpck1hcCk9JHNlbGYtPmdldFJldmlzaW9uRGlyTWFwKCRyZXZDb21taXQpOworICAgIG15KCRkaXIsJGZpbGUpPSgkZmlsZW5hbWU9fm0lXig/OiguKikvKT8oW14vXSokKSUpOworICAgIGlmKCFkZWZpbmVkKCRkaXIpKQorICAgIHsKKyAgICAgICAgJGRpcj0iIjsKKyAgICB9CisgICAgaWYoICFkZWZpbmVkKCRkaXJNYXAtPnskZGlyfSkgfHwKKyAgICAgICAgIWRlZmluZWQoJGRpck1hcC0+eyRkaXJ9eyRmaWxlbmFtZX0pICkKKyAgICB7CisgICAgICAgIG15KCRmaWxlSGFzaCk9ImRlbGV0ZWQiOworCisgICAgICAgIG15KCRyZXRWYWwpPXt9OworICAgICAgICAkcmV0VmFsLT57bmFtZX09JGZpbGVuYW1lOworICAgICAgICAkcmV0VmFsLT57ZmlsZWhhc2h9PSRmaWxlSGFzaDsKKworICAgICAgICAgICAgIyBub3QgbmVlZGVkIGFuZCBkaWZmaWN1bHQgdG8gY29tcHV0ZToKKyAgICAgICAgJHJldFZhbC0+e3JldmlzaW9ufT0iMCI7ICAjICRyZXZpc2lvbjsKKyAgICAgICAgJHJldFZhbC0+e2NvbW1pdGhhc2h9PSRyZXZDb21taXQ7CisgICAgICAgICMkcmV0VmFsLT57YXV0aG9yfT0kY29tbWl0LT57YXV0aG9yfTsKKyAgICAgICAgIyRyZXRWYWwtPnttb2RpZmllZH09Y29udmVydFRvQ3ZzRGF0ZSgkY29tbWl0LT57ZGF0ZX0pOworICAgICAgICAjJHJldFZhbC0+e21vZGV9PWNvbnZlcnRUb0RiTW9kZSgkbW9kZSk7CisKKyAgICAgICAgcmV0dXJuICRyZXRWYWw7CisgICAgfQorCisgICAgbXkoJGZpbGVIYXNoKSA9IDo6c2FmZV9waXBlX2NhcHR1cmUoImdpdCIsInJldi1wYXJzZSIsIiRyZXZDb21taXQ6JGZpbGVuYW1lIik7CisgICAgY2hvbXAgJGZpbGVIYXNoOworICAgIGlmKCEoJGZpbGVIYXNoPX4vXlswLTlhLWZdezQwfSQvKSkKKyAgICB7CisgICAgICAgIGRpZSAiSW52YWxpZCBmaWxlSGFzaCAnJGZpbGVIYXNoJyBsb29raW5nIHVwIgorICAgICAgICAgICAgICAgICAgICAuIiAnJHJldkNvbW1pdDokZmlsZW5hbWUnXG4iOworICAgIH0KKworICAgICMgaW5mb3JtYXRpb24gYWJvdXQgbW9zdCByZWNlbnQgY29tbWl0IHRvIG1vZGlmeSAkZmlsZW5hbWU6CisgICAgb3BlbihteSAkZ2l0TG9nUGlwZSwgJy18JywgJ2dpdCcsICdyZXYtbGlzdCcsCisgICAgICAgICAnLS1tYXgtY291bnQ9MScsICctLXByZXR0eScsICctLXBhcmVudHMnLAorICAgICAgICAgJHJldkNvbW1pdCwgJy0tJywgJGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIG9yIGRpZSAiQ2Fubm90IGNhbGwgZ2l0LXJldi1saXN0OiAkISI7CisgICAgbXkgQGNvbW1pdHM9cmVhZENvbW1pdHMoJGdpdExvZ1BpcGUpOworICAgIGNsb3NlICRnaXRMb2dQaXBlOworICAgIGlmKHNjYWxhcihAY29tbWl0cykhPTEpCisgICAgeworICAgICAgICBkaWUgIkNhbid0IGZpbmQgbW9zdCByZWNlbnQgY29tbWl0IGNoYW5naW5nICRmaWxlbmFtZVxuIjsKKyAgICB9CisgICAgbXkoJGNvbW1pdCk9JGNvbW1pdHNbMF07CisgICAgaWYoICFkZWZpbmVkKCRjb21taXQpIHx8ICFkZWZpbmVkKCRjb21taXQtPntoYXNofSkgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuZGVmOworICAgIH0KKworICAgICMgZG9lcyB0aGlzIChjb21taXQsZmlsZSkgaGF2ZSBhIHJlYWwgYXNzaWduZWQgQ1ZTIHJldmlzaW9uIG51bWJlcj8KKyAgICBteSAkdGFibGVuYW1lX3JldiA9ICRzZWxmLT50YWJsZW5hbWUoInJldmlzaW9uIik7CisgICAgbXkgJGRiX3F1ZXJ5OworICAgICRkYl9xdWVyeSA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoCisgICAgICAgICJTRUxFQ1QgKiBGUk9NICR0YWJsZW5hbWVfcmV2IFdIRVJFIG5hbWU9PyBBTkQgY29tbWl0aGFzaD0/IiwKKyAgICAgICAge30sMSk7CisgICAgJGRiX3F1ZXJ5LT5leGVjdXRlKCRmaWxlbmFtZSwgJGNvbW1pdC0+e2hhc2h9KTsKKyAgICBteSgkbWV0YSk9JGRiX3F1ZXJ5LT5mZXRjaHJvd19oYXNocmVmOworICAgIGlmKCRtZXRhKQorICAgIHsKKyAgICAgICAgJG1ldGEtPntyZXZpc2lvbn0gPSAiMS4kbWV0YS0+e3JldmlzaW9ufSI7CisgICAgICAgIHJldHVybiAkbWV0YTsKKyAgICB9CisKKyAgICAjIGZhbGwgYmFjayBvbiBzcGVjaWFsIHJldmlzaW9uIG51bWJlcgorICAgIG15KCRyZXZpc2lvbik9JGNvbW1pdC0+e2hhc2h9OworICAgICRyZXZpc2lvbj1+cy8oLi4pLycuJyAuIChoZXgoJDEpKzEwMCkvZWc7CisgICAgJHJldmlzaW9uPSIyLjEuMS4yMDAwJHJldmlzaW9uIjsKKworICAgICMgbWV0YSBkYXRhIGFib3V0ICRmaWxlbmFtZToKKyAgICBvcGVuKG15ICRmaWxlUGlwZSwgJy18JywgJ2dpdCcsICdscy10cmVlJywgJy16JywKKyAgICAgICAgICAgICAgICAkY29tbWl0LT57aGFzaH0sICctLScsICRmaWxlbmFtZSkKKyAgICAgICAgICAgIG9yIGRpZSgiQ2Fubm90IGNhbGwgZ2l0LWxzLXRyZWUgOiAkISIpOworICAgIGxvY2FsICQvID0gIlwwIjsKKyAgICBteSAkbGluZTsKKyAgICAkbGluZT08JGZpbGVQaXBlPjsKKyAgICBpZihkZWZpbmVkKDwkZmlsZVBpcGU+KSkKKyAgICB7CisgICAgICAgIGRpZSAiRXhwZWN0ZWQgb25seSBhIHNpbmdsZSBmaWxlIGZvciBnaXQtbHMtdHJlZSAkZmlsZW5hbWVcbiI7CisgICAgfQorICAgIGNsb3NlICRmaWxlUGlwZTsKKworICAgIGNob21wICRsaW5lOworICAgIHVubGVzcyAoICRsaW5lPX5tL14oXGQrKVxzKyhcdyspXHMrKFthLXpBLVowLTldKylcdCguKikkL28gKQorICAgIHsKKyAgICAgICAgZGllKCJDb3VsZG4ndCBwcm9jZXNzIGdpdC1scy10cmVlIGxpbmUgOiAkbGluZVxuIik7CisgICAgfQorICAgIG15ICggJG1vZGUsICRnaXRfdHlwZSwgJGdpdF9oYXNoLCAkZ2l0X2ZpbGVuYW1lICkgPSAoICQxLCAkMiwgJDMsICQ0ICk7CisKKyAgICAjIHNhdmUgcmVzdWx0OgorICAgIG15KCRyZXRWYWwpPXt9OworICAgICRyZXRWYWwtPntuYW1lfT0kZmlsZW5hbWU7CisgICAgJHJldFZhbC0+e3JldmlzaW9ufT0kcmV2aXNpb247CisgICAgJHJldFZhbC0+e2ZpbGVoYXNofT0kZmlsZUhhc2g7CisgICAgJHJldFZhbC0+e2NvbW1pdGhhc2h9PSRyZXZDb21taXQ7CisgICAgJHJldFZhbC0+e2F1dGhvcn09JGNvbW1pdC0+e2F1dGhvcn07CisgICAgJHJldFZhbC0+e21vZGlmaWVkfT1jb252ZXJ0VG9DdnNEYXRlKCRjb21taXQtPntkYXRlfSk7CisgICAgJHJldFZhbC0+e21vZGV9PWNvbnZlcnRUb0RiTW9kZSgkbW9kZSk7CisKKyAgICByZXR1cm4gJHJldFZhbDsKK30KKworPWhlYWQyIGxvb2t1cENvbW1pdFJlZgorCitDb252ZXJ0IHRhZy9icmFuY2gvYWJicmV2aWF0aW9uL2V0YyBpbnRvIGEgY29tbWl0IHNoYTEgaGFzaC4gIENhY2hlcwordGhlIHJlc3VsdCBzbyBsb29raW5nIGl0IHVwIGFnYWluIGlzIGZhc3QuCisKKz1jdXQKKworc3ViIGxvb2t1cENvbW1pdFJlZgoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJHJlZiA9IHNoaWZ0OworCisgICAgbXkgJGNvbW1pdEhhc2ggPSAkc2VsZi0+e2NvbW1pdFJlZkNhY2hlfXskcmVmfTsKKyAgICBpZihkZWZpbmVkKCRjb21taXRIYXNoKSkKKyAgICB7CisgICAgICAgIHJldHVybiAkY29tbWl0SGFzaDsKKyAgICB9CisKKyAgICAkY29tbWl0SGFzaCA9IDo6c2FmZV9waXBlX2NhcHR1cmUoImdpdCIsInJldi1wYXJzZSIsIi0tdmVyaWZ5IiwiLS1xdWlldCIsCisJCQkJICAgICAgJHNlbGYtPnVuZXNjYXBlUmVmTmFtZSgkcmVmKSk7CisgICAgJGNvbW1pdEhhc2g9fnMvXHMqJC8vOworICAgIGlmKCEoJGNvbW1pdEhhc2g9fi9eWzAtOWEtZl17NDB9JC8pKQorICAgIHsKKyAgICAgICAgJGNvbW1pdEhhc2g9dW5kZWY7CisgICAgfQorCisgICAgaWYoIGRlZmluZWQoJGNvbW1pdEhhc2gpICkKKyAgICB7CisgICAgICAgIG15ICR0eXBlID0gOjpzYWZlX3BpcGVfY2FwdHVyZSgiZ2l0IiwiY2F0LWZpbGUiLCItdCIsJGNvbW1pdEhhc2gpOworICAgICAgICBpZiggISAoJHR5cGU9fi9eY29tbWl0XHMqJC8gKSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRjb21taXRIYXNoPXVuZGVmOworICAgICAgICB9CisgICAgfQorICAgIGlmKGRlZmluZWQoJGNvbW1pdEhhc2gpKQorICAgIHsKKyAgICAgICAgJHNlbGYtPntjb21taXRSZWZDYWNoZX17JHJlZn09JGNvbW1pdEhhc2g7CisgICAgfQorICAgIHJldHVybiAkY29tbWl0SGFzaDsKK30KKworPWhlYWQyIGNsZWFyQ29tbWl0UmVmQ2FjaGVzCisKK0NsZWFycyBjYWNoZWQgY29tbWl0IGNhY2hlIChzaGExJ3MgZm9yIHZhcmlvdXMgdGFncy9hYmJldmlhdGlvbnMvZXRjKSwKK2FuZCByZWxhdGVkIGNhY2hlcy4KKworPWN1dAorCitzdWIgY2xlYXJDb21taXRSZWZDYWNoZXMKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgICRzZWxmLT57Y29tbWl0UmVmQ2FjaGV9ID0ge307CisgICAgJHNlbGYtPntyZXZpc2lvbkRpck1hcENhY2hlfSA9IHVuZGVmOworICAgICRzZWxmLT57Z2V0aGVhZF9jYWNoZX0gPSB1bmRlZjsKK30KKworPWhlYWQyIGNvbW1pdG1lc3NhZ2UKKwordGhpcyBmdW5jdGlvbiB0YWtlcyBhIGNvbW1pdGhhc2ggYW5kIHJldHVybnMgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB0aGF0IGNvbW1pdAorCis9Y3V0CitzdWIgY29tbWl0bWVzc2FnZQoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJGNvbW1pdGhhc2ggPSBzaGlmdDsKKyAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgiY29tbWl0bXNncyIpOworCisgICAgZGllKCJOZWVkIGNvbW1pdGhhc2giKSB1bmxlc3MgKCBkZWZpbmVkKCRjb21taXRoYXNoKSBhbmQgJGNvbW1pdGhhc2ggPX4gL15bYS16QS1aMC05XXs0MH0kLyApOworCisgICAgbXkgJGRiX3F1ZXJ5OworICAgICRkYl9xdWVyeSA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoIlNFTEVDVCB2YWx1ZSBGUk9NICR0YWJsZW5hbWUgV0hFUkUga2V5PT8iLHt9LDEpOworICAgICRkYl9xdWVyeS0+ZXhlY3V0ZSgkY29tbWl0aGFzaCk7CisKKyAgICBteSAoICRtZXNzYWdlICkgPSAkZGJfcXVlcnktPmZldGNocm93X2FycmF5OworCisgICAgaWYgKCBkZWZpbmVkICggJG1lc3NhZ2UgKSApCisgICAgeworICAgICAgICAkbWVzc2FnZSAuPSAiICIgaWYgKCAkbWVzc2FnZSA9fiAvXG4kLyApOworICAgICAgICByZXR1cm4gJG1lc3NhZ2U7CisgICAgfQorCisgICAgbXkgQGxpbmVzID0gOjpzYWZlX3BpcGVfY2FwdHVyZSgiZ2l0IiwgImNhdC1maWxlIiwgImNvbW1pdCIsICRjb21taXRoYXNoKTsKKyAgICBzaGlmdCBAbGluZXMgd2hpbGUgKCAkbGluZXNbMF0gPX4gL1xTLyApOworICAgICRtZXNzYWdlID0gam9pbigiIixAbGluZXMpOworICAgICRtZXNzYWdlIC49ICIgIiBpZiAoICRtZXNzYWdlID1+IC9cbiQvICk7CisgICAgcmV0dXJuICRtZXNzYWdlOworfQorCis9aGVhZDIgZ2V0aGlzdG9yeWRlbnNlCisKK1RoaXMgZnVuY3Rpb24gdGFrZXMgYSBmaWxlbmFtZSAod2l0aCBwYXRoKSBhcmd1bWVudCBhbmQgcmV0dXJucyBhbiBhcnJheW9mYXJyYXlzCitjb250YWluaW5nIHJldmlzaW9uLGZpbGVoYXNoLGNvbW1pdGhhc2ggb3JkZXJlZCBieSByZXZpc2lvbiBkZXNjZW5kaW5nLgorCitUaGlzIHZlcnNpb24gb2YgZ2V0aGlzdG9yeSBza2lwcyBkZWxldGVkIGVudHJpZXMgLS0gc28gaXQgaXMgdXNlZnVsIGZvciBhbm5vdGF0ZS4KK1RoZSAnZGVuc2UnIHBhcnQgaXMgYSByZWZlcmVuY2UgdG8gYSAnLS1kZW5zZScgb3B0aW9uIGF2YWlsYWJsZSBmb3IgZ2l0LXJldi1saXN0CithbmQgb3RoZXIgZ2l0IHRvb2xzIHRoYXQgZGVwZW5kIG9uIGl0LgorCitTZWUgYWxzbyBnZXRsb2coKS4KKworPWN1dAorc3ViIGdldGhpc3RvcnlkZW5zZQoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisgICAgbXkgJHRhYmxlbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoInJldmlzaW9uIik7CisKKyAgICBteSAkZGJfcXVlcnk7CisgICAgJGRiX3F1ZXJ5ID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgiU0VMRUNUIHJldmlzaW9uLCBmaWxlaGFzaCwgY29tbWl0aGFzaCBGUk9NICR0YWJsZW5hbWUgV0hFUkUgbmFtZT0/IEFORCBmaWxlaGFzaCE9J2RlbGV0ZWQnIE9SREVSIEJZIHJldmlzaW9uIERFU0MiLHt9LDEpOworICAgICRkYl9xdWVyeS0+ZXhlY3V0ZSgkZmlsZW5hbWUpOworCisgICAgbXkgJHJlc3VsdCA9ICRkYl9xdWVyeS0+ZmV0Y2hhbGxfYXJyYXlyZWY7CisKKyAgICBteSAkaTsKKyAgICBmb3IoJGk9MCA7ICRpPHNjYWxhcihAJHJlc3VsdCkgOyAkaSsrKQorICAgIHsKKyAgICAgICAgJHJlc3VsdC0+WyRpXVswXT0iMS4iIC4gJHJlc3VsdC0+WyRpXVswXTsKKyAgICB9CisKKyAgICByZXR1cm4gJHJlc3VsdDsKK30KKworPWhlYWQyIGVzY2FwZVJlZk5hbWUKKworQXBwbHkgYW4gZXNjYXBlIG1lY2hhbmlzbSB0byBjb21wZW5zYXRlIGZvciBjaGFyYWN0ZXJzIHRoYXQKK2dpdCByZWYgbmFtZXMgY2FuIGhhdmUgdGhhdCBDVlMgdGFncyBjYW4gbm90LgorCis9Y3V0CitzdWIgZXNjYXBlUmVmTmFtZQoreworICAgIG15KCRzZWxmLCRyZWZOYW1lKT1AXzsKKworICAgICMgQ1ZTIG9mZmljaWFsbHkgb25seSBhbGxvd3MgWy1fQS1aYS16MC05XSBpbiB0YWcgbmFtZXMgKG9yIGluCisgICAgIyBtYW55IGNvbnRleHRzIGl0IGNhbiBhbHNvIGJlIGEgQ1ZTIHJldmlzaW9uIG51bWJlcikuCisgICAgIworICAgICMgR2l0IHRhZ3MgY29tbW9ubHkgdXNlICcvJyBhbmQgJy4nIGFzIHdlbGwsIGJ1dCBhbHNvIGhhbmRsZQorICAgICMgYW55dGhpbmcgZWxzZSBqdXN0IGluIGNhc2U6CisgICAgIworICAgICMgICA9ICJfLXMtIiAgRm9yICcvJy4KKyAgICAjICAgPSAiXy1wLSIgIEZvciAnLicuCisgICAgIyAgID0gIl8tdS0iICBGb3IgdW5kZXJzY29yZSwgaW4gY2FzZSBzb21lb25lIHdhbnRzIGEgbGl0ZXJhbCAiXy0iIGluCisgICAgIyAgICAgYSB0YWcgbmFtZS4KKyAgICAjICAgPSAiXy14eC0iIFdoZXJlICJ4eCIgaXMgdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorICAgICMgICAgIGRlc2lyZWQgQVNDSUkgY2hhcmFjdGVyIGJ5dGUuIChmb3IgYW55dGhpbmcgZWxzZSkKKworICAgIGlmKCEgJHJlZk5hbWU9fi9eWzEtOV1bMC05XSooXC5bMS05XVswLTldKikqJC8pCisgICAgeworICAgICAgICAkcmVmTmFtZT1+cy9fLS9fLXUtLS9nOworICAgICAgICAkcmVmTmFtZT1+cy9cLi9fLXAtL2c7CisgICAgICAgICRyZWZOYW1lPX5zJS8lXy1zLSVnOworICAgICAgICAkcmVmTmFtZT1+cy9bXi1fYS16QS1aMC05XS9zcHJpbnRmKCJfLSUwMngtIiwkMSkvZWc7CisgICAgfQorfQorCis9aGVhZDIgdW5lc2NhcGVSZWZOYW1lCisKK1VuZG8gYW4gZXNjYXBlIG1lY2hhbmlzbSB0byBjb21wZW5zYXRlIGZvciBjaGFyYWN0ZXJzIHRoYXQKK2dpdCByZWYgbmFtZXMgY2FuIGhhdmUgdGhhdCBDVlMgdGFncyBjYW4gbm90LgorCis9Y3V0CitzdWIgdW5lc2NhcGVSZWZOYW1lCit7CisgICAgbXkoJHNlbGYsJHJlZk5hbWUpPUBfOworCisgICAgIyBzZWUgZXNjYXBlUmVmTmFtZSgpIGZvciBkZXNjcmlwdGlvbiBvZiBlc2NhcGUgbWVjaGFuaXNtLgorCisgICAgJHJlZk5hbWU9fnMvXy0oW3NwdV18WzAtOWEtZl1bMC05YS1mXSktL3VuZXNjYXBlUmVmTmFtZUNoYXIoJDEpL2VnOworCisgICAgIyBhbGxvd2VkIHRhZyBuYW1lcworICAgICMgVE9ETzogUGVyaGFwcyB1c2UgZ2l0IGNoZWNrLXJlZi1mb3JtYXQsIHdpdGggYW4gaW4tcHJvY2VzcyBjYWNoZSBvZgorICAgICMgIHZhbGlkYXRlZCBuYW1lcz8KKyAgICBpZiggISggJHJlZk5hbWU9fm0lXlteLV1bLWEtekEtWjAtOV8vLl0qJCUgKSB8fAorICAgICAgICAoICRyZWZOYW1lPX5tJVsvLl0kJSApIHx8CisgICAgICAgICggJHJlZk5hbWU9fi9cLmxvY2skLyApIHx8CisgICAgICAgICggJHJlZk5hbWU9fm0lXC5cLnwvXC58W1tcXDo/Kn5dfFxAXHslICkgKSAgIyBtYXRjaGluZyB9CisgICAgeworICAgICAgICAjIEVycm9yOgorICAgICAgICAkbG9nLT53YXJuKCJpbGxlZ2FsIHJlZk5hbWU6ICRyZWZOYW1lIik7CisgICAgICAgICRyZWZOYW1lPXVuZGVmOworICAgIH0KKyAgICByZXR1cm4gJHJlZk5hbWU7Cit9CisKK3N1YiB1bmVzY2FwZVJlZk5hbWVDaGFyCit7CisgICAgbXkoJGNoYXIpPUBfOworCisgICAgaWYoJGNoYXIgZXEgInMiKQorICAgIHsKKyAgICAgICAgJGNoYXI9Ii8iOworICAgIH0KKyAgICBlbHNpZigkY2hhciBlcSAicCIpCisgICAgeworICAgICAgICAkY2hhcj0iLiI7CisgICAgfQorICAgIGVsc2lmKCRjaGFyIGVxICJ1IikKKyAgICB7CisgICAgICAgICRjaGFyPSJfIjsKKyAgICB9CisgICAgZWxzaWYoJGNoYXI9fi9eWzAtOWEtZl1bMC05YS1mXSQvKQorICAgIHsKKyAgICAgICAgJGNoYXI9Y2hyKGhleCgkY2hhcikpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAjIEVycm9yIGNhc2U6IE1heWJlIGl0IGhhcyBjb21lIHN0cmFpZ2h0IGZyb20gdXNlciwgYW5kCisgICAgICAgICMgd2Fzbid0IHN1cHBvc2VkIHRvIGJlIGVzY2FwZWQ/ICBSZXN0b3JlIGl0IHRoZSB3YXkgd2UgZ290IGl0OgorICAgICAgICAkY2hhcj0iXy0kY2hhci0iOworICAgIH0KKworICAgIHJldHVybiAkY2hhcjsKK30KKworPWhlYWQyIGluX2FycmF5KCkKKworZnJvbSBBcnJheTo6UEFUIC0gbWltaWNzIHRoZSBpbl9hcnJheSgpIGZ1bmN0aW9uCitmb3VuZCBpbiBQSFAuIFl1Y2sgYnV0IHdvcmtzIGZvciBzbWFsbCBhcnJheXMuCisKKz1jdXQKK3N1YiBpbl9hcnJheQoreworICAgIG15ICgkY2hlY2ssIEBhcnJheSkgPSBAXzsKKyAgICBteSAkcmV0dmFsID0gMDsKKyAgICBmb3JlYWNoIG15ICR0ZXN0IChAYXJyYXkpeworICAgICAgICBpZigkY2hlY2sgZXEgJHRlc3QpeworICAgICAgICAgICAgJHJldHZhbCA9ICAxOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAkcmV0dmFsOworfQorCis9aGVhZDIgbWFuZ2xlX2Rpcm5hbWUKKworY3JlYXRlIGEgc3RyaW5nIGZyb20gYSBkaXJlY3RvcnkgbmFtZSB0aGF0IGlzIHN1aXRhYmxlIHRvIHVzZSBhcworcGFydCBvZiBhIGZpbGVuYW1lLCBtYWlubHkgYnkgY29udmVydGluZyBhbGwgY2hhcnMgZXhjZXB0IFx3Li0gdG8gXworCis9Y3V0CitzdWIgbWFuZ2xlX2Rpcm5hbWUgeworICAgIG15ICRkaXJuYW1lID0gc2hpZnQ7CisgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkICRkaXJuYW1lOworCisgICAgJGRpcm5hbWUgPX4gcy9bXlx3Li1dL18vZzsKKworICAgIHJldHVybiAkZGlybmFtZTsKK30KKworPWhlYWQyIG1hbmdsZV90YWJsZW5hbWUKKworY3JlYXRlIGEgc3RyaW5nIGZyb20gYSB0aGF0IGlzIHN1aXRhYmxlIHRvIHVzZSBhcyBwYXJ0IG9mIGFuIFNRTCB0YWJsZQorbmFtZSwgbWFpbmx5IGJ5IGNvbnZlcnRpbmcgYWxsIGNoYXJzIGV4Y2VwdCBcdyB0byBfCisKKz1jdXQKK3N1YiBtYW5nbGVfdGFibGVuYW1lIHsKKyAgICBteSAkdGFibGVuYW1lID0gc2hpZnQ7CisgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkICR0YWJsZW5hbWU7CisKKyAgICAkdGFibGVuYW1lID1+IHMvW15cd19dL18vZzsKKworICAgIHJldHVybiAkdGFibGVuYW1lOworfQorCisxOwpkaWZmIC0tZ2l0IGEvZ2l0LWRpZmZ0b29sLS1oZWxwZXIuc2ggYi9naXQtZGlmZnRvb2wtLWhlbHBlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NmFmM2U2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWRpZmZ0b29sLS1oZWxwZXIuc2gKQEAgLTAsMCArMSwxMDUgQEAKKyMhL2Jpbi9zaAorIyBnaXQtZGlmZnRvb2wtLWhlbHBlciBpcyBhIEdJVF9FWFRFUk5BTF9ESUZGLWNvbXBhdGlibGUgZGlmZiB0b29sIGxhdW5jaGVyLgorIyBUaGlzIHNjcmlwdCBpcyB0eXBpY2FsbHkgbGF1bmNoZWQgYnkgdXNpbmcgdGhlICdnaXQgZGlmZnRvb2wnCisjIGNvbnZlbmllbmNlIGNvbW1hbmQuCisjCisjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBEYXZpZCBBZ3VpbGFyCisKK1RPT0xfTU9ERT1kaWZmCisuIGdpdC1tZXJnZXRvb2wtLWxpYgorCisjIGRpZmZ0b29sLnByb21wdCBjb250cm9scyB0aGUgZGVmYXVsdCBwcm9tcHQvbm8tcHJvbXB0IGJlaGF2aW9yCisjIGFuZCBpcyBvdmVycmlkZGVuIHdpdGggJEdJVF9ESUZGVE9PTCpfUFJPTVBULgorc2hvdWxkX3Byb21wdCAoKSB7CisJcHJvbXB0X21lcmdlPSQoZ2l0IGNvbmZpZyAtLWJvb2wgbWVyZ2V0b29sLnByb21wdCB8fCBlY2hvIHRydWUpCisJcHJvbXB0PSQoZ2l0IGNvbmZpZyAtLWJvb2wgZGlmZnRvb2wucHJvbXB0IHx8IGVjaG8gJHByb21wdF9tZXJnZSkKKwlpZiB0ZXN0ICIkcHJvbXB0IiA9IHRydWUKKwl0aGVuCisJCXRlc3QgLXogIiRHSVRfRElGRlRPT0xfTk9fUFJPTVBUIgorCWVsc2UKKwkJdGVzdCAtbiAiJEdJVF9ESUZGVE9PTF9QUk9NUFQiCisJZmkKK30KKworIyBJbmRpY2F0ZXMgdGhhdCAtLWV4dGNtZD0uLi4gd2FzIHNwZWNpZmllZAordXNlX2V4dF9jbWQgKCkgeworCXRlc3QgLW4gIiRHSVRfRElGRlRPT0xfRVhUQ01EIgorfQorCitsYXVuY2hfbWVyZ2VfdG9vbCAoKSB7CisJIyBNZXJnZWQgaXMgdGhlIGZpbGVuYW1lIGFzIGl0IGFwcGVhcnMgaW4gdGhlIHdvcmsgdHJlZQorCSMgTG9jYWwgaXMgdGhlIGNvbnRlbnRzIG9mIGEvZmlsZW5hbWUKKwkjIFJlbW90ZSBpcyB0aGUgY29udGVudHMgb2YgYi9maWxlbmFtZQorCSMgQ3VzdG9tIG1lcmdlIHRvb2wgY29tbWFuZHMgbWlnaHQgdXNlICRCQVNFIHNvIHdlIHByb3ZpZGUgaXQKKwlNRVJHRUQ9IiQxIgorCUxPQ0FMPSIkMiIKKwlSRU1PVEU9IiQzIgorCUJBU0U9IiQxIgorCisJIyAkTE9DQUwgYW5kICRSRU1PVEUgYXJlIHRlbXBvcmFyeSBmaWxlcyBzbyBwcm9tcHQKKwkjIHRoZSB1c2VyIHdpdGggdGhlIHJlYWwgJE1FUkdFRCBuYW1lIGJlZm9yZSBsYXVuY2hpbmcgJG1lcmdlX3Rvb2wuCisJaWYgc2hvdWxkX3Byb21wdAorCXRoZW4KKwkJcHJpbnRmICJcblZpZXdpbmcgKCVzLyVzKTogJyVzJ1xuIiAiJEdJVF9ESUZGX1BBVEhfQ09VTlRFUiIgXAorCQkJIiRHSVRfRElGRl9QQVRIX1RPVEFMIiAiJE1FUkdFRCIKKwkJaWYgdXNlX2V4dF9jbWQKKwkJdGhlbgorCQkJcHJpbnRmICJMYXVuY2ggJyVzJyBbWS9uXT8gIiBcCisJCQkJIiRHSVRfRElGRlRPT0xfRVhUQ01EIgorCQllbHNlCisJCQlwcmludGYgIkxhdW5jaCAnJXMnIFtZL25dPyAiICIkbWVyZ2VfdG9vbCIKKwkJZmkKKwkJcmVhZCBhbnMgfHwgcmV0dXJuCisJCWlmIHRlc3QgIiRhbnMiID0gbgorCQl0aGVuCisJCQlyZXR1cm4KKwkJZmkKKwlmaQorCisJaWYgdXNlX2V4dF9jbWQKKwl0aGVuCisJCWV4cG9ydCBCQVNFCisJCWV2YWwgJEdJVF9ESUZGVE9PTF9FWFRDTUQgJyIkTE9DQUwiJyAnIiRSRU1PVEUiJworCWVsc2UKKwkJcnVuX21lcmdlX3Rvb2wgIiRtZXJnZV90b29sIgorCWZpCit9CisKK2lmICEgdXNlX2V4dF9jbWQKK3RoZW4KKwlpZiB0ZXN0IC1uICIkR0lUX0RJRkZfVE9PTCIKKwl0aGVuCisJCW1lcmdlX3Rvb2w9IiRHSVRfRElGRl9UT09MIgorCWVsc2UKKwkJbWVyZ2VfdG9vbD0iJChnZXRfbWVyZ2VfdG9vbCkiCisJZmkKK2ZpCisKK2lmIHRlc3QgLW4gIiRHSVRfRElGRlRPT0xfRElSRElGRiIKK3RoZW4KKwlMT0NBTD0iJDEiCisJUkVNT1RFPSIkMiIKKwlydW5fbWVyZ2VfdG9vbCAiJG1lcmdlX3Rvb2wiIGZhbHNlCitlbHNlCisJIyBMYXVuY2ggdGhlIG1lcmdlIHRvb2wgb24gZWFjaCBwYXRoIHByb3ZpZGVkIGJ5ICdnaXQgZGlmZicKKwl3aGlsZSB0ZXN0ICQjIC1ndCA2CisJZG8KKwkJbGF1bmNoX21lcmdlX3Rvb2wgIiQxIiAiJDIiICIkNSIKKwkJc3RhdHVzPSQ/CisJCWlmIHRlc3QgJHN0YXR1cyAtZ2UgMTI2CisJCXRoZW4KKwkJCSMgQ29tbWFuZCBub3QgZm91bmQgKDEyNyksIG5vdCBleGVjdXRhYmxlICgxMjYpIG9yCisJCQkjIGV4aXRlZCB2aWEgYSBzaWduYWwgKD49IDEyOCkuCisJCQlleGl0ICRzdGF0dXMKKwkJZmkKKworCQlpZiB0ZXN0ICIkc3RhdHVzIiAhPSAwICYmCisJCQl0ZXN0ICIkR0lUX0RJRkZUT09MX1RSVVNUX0VYSVRfQ09ERSIgPSB0cnVlCisJCXRoZW4KKwkJCWV4aXQgJHN0YXR1cworCQlmaQorCQlzaGlmdCA3CisJZG9uZQorZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS9naXQtZmlsdGVyLWJyYW5jaC5zaCBiL2dpdC1maWx0ZXItYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlYTc5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZmlsdGVyLWJyYW5jaC5zaApAQCAtMCwwICsxLDY3NiBAQAorIyEvYmluL3NoCisjCisjIFJld3JpdGUgcmV2aXNpb24gaGlzdG9yeQorIyBDb3B5cmlnaHQgKGMpIFBldHIgQmF1ZGlzLCAyMDA2CisjIE1pbmltYWwgY2hhbmdlcyB0byAicG9ydCIgaXQgdG8gY29yZS1naXQgKGMpIEpvaGFubmVzIFNjaGluZGVsaW4sIDIwMDcKKyMKKyMgTGV0cyB5b3UgcmV3cml0ZSB0aGUgcmV2aXNpb24gaGlzdG9yeSBvZiB0aGUgY3VycmVudCBicmFuY2gsIGNyZWF0aW5nCisjIGEgbmV3IGJyYW5jaC4gWW91IGNhbiBzcGVjaWZ5IGEgbnVtYmVyIG9mIGZpbHRlcnMgdG8gbW9kaWZ5IHRoZSBjb21taXRzLAorIyBmaWxlcyBhbmQgdHJlZXMuCisKKyMgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2lsbCBhbHNvIGJlIGF2YWlsYWJsZSBpbiB0aGUgY29tbWl0IGZpbHRlcjoKKworZnVuY3Rpb25zPSQoY2F0IDw8IFxFT0YKK0VNUFRZX1RSRUU9JChnaXQgaGFzaC1vYmplY3QgLXQgdHJlZSAvZGV2L251bGwpCisKK3dhcm4gKCkgeworCWVjaG8gIiQqIiA+JjIKK30KKworbWFwKCkKK3sKKwkjIGlmIGl0IHdhcyBub3QgcmV3cml0dGVuLCB0YWtlIHRoZSBvcmlnaW5hbAorCWlmIHRlc3QgLXIgIiR3b3JrZGlyLy4uL21hcC8kMSIKKwl0aGVuCisJCWNhdCAiJHdvcmtkaXIvLi4vbWFwLyQxIgorCWVsc2UKKwkJZWNobyAiJDEiCisJZmkKK30KKworIyBpZiB5b3UgcnVuICdza2lwX2NvbW1pdCAiJEAiJyBpbiBhIGNvbW1pdCBmaWx0ZXIsIGl0IHdpbGwgcHJpbnQKKyMgdGhlIChtYXBwZWQpIHBhcmVudHMsIGVmZmVjdGl2ZWx5IHNraXBwaW5nIHRoZSBjb21taXQuCisKK3NraXBfY29tbWl0KCkKK3sKKwlzaGlmdDsKKwl3aGlsZSBbIC1uICIkMSIgXTsKKwlkbworCQlzaGlmdDsKKwkJbWFwICIkMSI7CisJCXNoaWZ0OworCWRvbmU7Cit9CisKKyMgaWYgeW91IHJ1biAnZ2l0X2NvbW1pdF9ub25fZW1wdHlfdHJlZSAiJEAiJyBpbiBhIGNvbW1pdCBmaWx0ZXIsCisjIGl0IHdpbGwgc2tpcCBjb21taXRzIHRoYXQgbGVhdmUgdGhlIHRyZWUgdW50b3VjaGVkLCBjb21taXQgdGhlIG90aGVyLgorZ2l0X2NvbW1pdF9ub25fZW1wdHlfdHJlZSgpCit7CisJaWYgdGVzdCAkIyA9IDMgJiYgdGVzdCAiJDEiID0gJChnaXQgcmV2LXBhcnNlICIkM157dHJlZX0iKTsgdGhlbgorCQltYXAgIiQzIgorCWVsaWYgdGVzdCAkIyA9IDEgJiYgdGVzdCAiJDEiID0gJEVNUFRZX1RSRUU7IHRoZW4KKwkJOgorCWVsc2UKKwkJZ2l0IGNvbW1pdC10cmVlICIkQCIKKwlmaQorfQorIyBvdmVycmlkZSBkaWUoKTogdGhpcyB2ZXJzaW9uIHB1dHMgaW4gYW4gZXh0cmEgbGluZSBicmVhaywgc28gdGhhdAorIyB0aGUgcHJvZ3Jlc3MgaXMgc3RpbGwgdmlzaWJsZQorCitkaWUoKQoreworCWVjaG8gPiYyCisJZWNobyAiJCoiID4mMgorCWV4aXQgMQorfQorRU9GCispCisKK2V2YWwgIiRmdW5jdGlvbnMiCisKK2ZpbmlzaF9pZGVudCgpIHsKKwkjIEVuc3VyZSBub24tZW1wdHkgaWQgbmFtZS4KKwllY2hvICJjYXNlIFwiXCRHSVRfJDFfTkFNRVwiIGluIFwiXCIpIEdJVF8kMV9OQU1FPVwiXCR7R0lUXyQxX0VNQUlMJSVAKn1cIiAmJiBleHBvcnQgR0lUXyQxX05BTUU7OyBlc2FjIgorCSMgQW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGV4cG9ydGVkLgorCWVjaG8gImV4cG9ydCBHSVRfJDFfTkFNRSIKKwllY2hvICJleHBvcnQgR0lUXyQxX0VNQUlMIgorCWVjaG8gImV4cG9ydCBHSVRfJDFfREFURSIKK30KKworc2V0X2lkZW50ICgpIHsKKwlwYXJzZV9pZGVudF9mcm9tX2NvbW1pdCBhdXRob3IgQVVUSE9SIGNvbW1pdHRlciBDT01NSVRURVIKKwlmaW5pc2hfaWRlbnQgQVVUSE9SCisJZmluaXNoX2lkZW50IENPTU1JVFRFUgorfQorCitpZiB0ZXN0IC16ICIkRklMVEVSX0JSQU5DSF9TUVVFTENIX1dBUk5JTkckR0lUX1RFU1RfRElTQUxMT1dfQUJCUkVWSUFURURfT1BUSU9OUyIKK3RoZW4KKwljYXQgPDxFT0YKK1dBUk5JTkc6IGdpdC1maWx0ZXItYnJhbmNoIGhhcyBhIGdsdXQgb2YgZ290Y2hhcyBnZW5lcmF0aW5nIG1hbmdsZWQgaGlzdG9yeQorCSByZXdyaXRlcy4gIEhpdCBDdHJsLUMgYmVmb3JlIHByb2NlZWRpbmcgdG8gYWJvcnQsIHRoZW4gdXNlIGFuCisJIGFsdGVybmF0aXZlIGZpbHRlcmluZyB0b29sIHN1Y2ggYXMgJ2dpdCBmaWx0ZXItcmVwbycKKwkgKGh0dHBzOi8vZ2l0aHViLmNvbS9uZXdyZW4vZ2l0LWZpbHRlci1yZXBvLykgaW5zdGVhZC4gIFNlZSB0aGUKKwkgZmlsdGVyLWJyYW5jaCBtYW51YWwgcGFnZSBmb3IgbW9yZSBkZXRhaWxzOyB0byBzcXVlbGNoIHRoaXMgd2FybmluZywKKwkgc2V0IEZJTFRFUl9CUkFOQ0hfU1FVRUxDSF9XQVJOSU5HPTEuCitFT0YKKwlzbGVlcCAxMAorCXByaW50ZiAiUHJvY2VlZGluZyB3aXRoIGZpbHRlci1icmFuY2guLi5cblxuIgorZmkKKworVVNBR0U9IlstLXNldHVwIDxjb21tYW5kPl0gWy0tc3ViZGlyZWN0b3J5LWZpbHRlciA8ZGlyZWN0b3J5Pl0gWy0tZW52LWZpbHRlciA8Y29tbWFuZD5dCisJWy0tdHJlZS1maWx0ZXIgPGNvbW1hbmQ+XSBbLS1pbmRleC1maWx0ZXIgPGNvbW1hbmQ+XQorCVstLXBhcmVudC1maWx0ZXIgPGNvbW1hbmQ+XSBbLS1tc2ctZmlsdGVyIDxjb21tYW5kPl0KKwlbLS1jb21taXQtZmlsdGVyIDxjb21tYW5kPl0gWy0tdGFnLW5hbWUtZmlsdGVyIDxjb21tYW5kPl0KKwlbLS1vcmlnaW5hbCA8bmFtZXNwYWNlPl0KKwlbLWQgPGRpcmVjdG9yeT5dIFstZiB8IC0tZm9yY2VdIFstLXN0YXRlLWJyYW5jaCA8YnJhbmNoPl0KKwlbLS1dIFs8cmV2LWxpc3Qgb3B0aW9ucz4uLi5dIgorCitPUFRJT05TX1NQRUM9CisuIGdpdC1zaC1zZXR1cAorCitpZiBbICIkKGlzX2JhcmVfcmVwb3NpdG9yeSkiID0gZmFsc2UgXTsgdGhlbgorCXJlcXVpcmVfY2xlYW5fd29ya190cmVlICdyZXdyaXRlIGJyYW5jaGVzJworZmkKKwordGVtcGRpcj0uZ2l0LXJld3JpdGUKK2ZpbHRlcl9zZXR1cD0KK2ZpbHRlcl9lbnY9CitmaWx0ZXJfdHJlZT0KK2ZpbHRlcl9pbmRleD0KK2ZpbHRlcl9wYXJlbnQ9CitmaWx0ZXJfbXNnPWNhdAorZmlsdGVyX2NvbW1pdD0KK2ZpbHRlcl90YWdfbmFtZT0KK2ZpbHRlcl9zdWJkaXI9CitzdGF0ZV9icmFuY2g9CitvcmlnX25hbWVzcGFjZT1yZWZzL29yaWdpbmFsLworZm9yY2U9CitwcnVuZV9lbXB0eT0KK3JlbWFwX3RvX2FuY2VzdG9yPQord2hpbGUgOgorZG8KKwljYXNlICIkMSIgaW4KKwktLSkKKwkJc2hpZnQKKwkJYnJlYWsKKwkJOzsKKwktLWZvcmNlfC1mKQorCQlzaGlmdAorCQlmb3JjZT10CisJCWNvbnRpbnVlCisJCTs7CisJLS1yZW1hcC10by1hbmNlc3RvcikKKwkJIyBkZXByZWNhdGVkICgkcmVtYXBfdG9fYW5jZXN0b3IgaXMgc2V0IG5vdyBhdXRvbWF0aWNhbGx5KQorCQlzaGlmdAorCQlyZW1hcF90b19hbmNlc3Rvcj10CisJCWNvbnRpbnVlCisJCTs7CisJLS1wcnVuZS1lbXB0eSkKKwkJc2hpZnQKKwkJcHJ1bmVfZW1wdHk9dAorCQljb250aW51ZQorCQk7OworCS0qKQorCQk7OworCSopCisJCWJyZWFrOworCWVzYWMKKworCSMgYWxsIHN3aXRjaGVzIHRha2Ugb25lIGFyZ3VtZW50CisJQVJHPSIkMSIKKwljYXNlICIkIyIgaW4gMSkgdXNhZ2UgOzsgZXNhYworCXNoaWZ0CisJT1BUQVJHPSIkMSIKKwlzaGlmdAorCisJY2FzZSAiJEFSRyIgaW4KKwktZCkKKwkJdGVtcGRpcj0iJE9QVEFSRyIKKwkJOzsKKwktLXNldHVwKQorCQlmaWx0ZXJfc2V0dXA9IiRPUFRBUkciCisJCTs7CisJLS1zdWJkaXJlY3RvcnktZmlsdGVyKQorCQlmaWx0ZXJfc3ViZGlyPSIkT1BUQVJHIgorCQlyZW1hcF90b19hbmNlc3Rvcj10CisJCTs7CisJLS1lbnYtZmlsdGVyKQorCQlmaWx0ZXJfZW52PSIkT1BUQVJHIgorCQk7OworCS0tdHJlZS1maWx0ZXIpCisJCWZpbHRlcl90cmVlPSIkT1BUQVJHIgorCQk7OworCS0taW5kZXgtZmlsdGVyKQorCQlmaWx0ZXJfaW5kZXg9IiRPUFRBUkciCisJCTs7CisJLS1wYXJlbnQtZmlsdGVyKQorCQlmaWx0ZXJfcGFyZW50PSIkT1BUQVJHIgorCQk7OworCS0tbXNnLWZpbHRlcikKKwkJZmlsdGVyX21zZz0iJE9QVEFSRyIKKwkJOzsKKwktLWNvbW1pdC1maWx0ZXIpCisJCWZpbHRlcl9jb21taXQ9IiRmdW5jdGlvbnM7ICRPUFRBUkciCisJCTs7CisJLS10YWctbmFtZS1maWx0ZXIpCisJCWZpbHRlcl90YWdfbmFtZT0iJE9QVEFSRyIKKwkJOzsKKwktLW9yaWdpbmFsKQorCQlvcmlnX25hbWVzcGFjZT0kKGV4cHIgIiRPUFRBUkcvIiA6ICdcKC4qW14vXVwpLyokJykvCisJCTs7CisJLS1zdGF0ZS1icmFuY2gpCisJCXN0YXRlX2JyYW5jaD0iJE9QVEFSRyIKKwkJOzsKKwkqKQorCQl1c2FnZQorCQk7OworCWVzYWMKK2RvbmUKKworY2FzZSAiJHBydW5lX2VtcHR5LCRmaWx0ZXJfY29tbWl0IiBpbgorLCkKKwlmaWx0ZXJfY29tbWl0PSdnaXQgY29tbWl0LXRyZWUgIiRAIic7OwordCwpCisJZmlsdGVyX2NvbW1pdD0iJGZ1bmN0aW9uczsiJyBnaXRfY29tbWl0X25vbl9lbXB0eV90cmVlICIkQCInOzsKKywqKQorCTs7CisqKQorCWRpZSAiQ2Fubm90IHNldCAtLXBydW5lLWVtcHR5IGFuZCAtLWNvbW1pdC1maWx0ZXIgYXQgdGhlIHNhbWUgdGltZSIKK2VzYWMKKworY2FzZSAiJGZvcmNlIiBpbgordCkKKwlybSAtcmYgIiR0ZW1wZGlyIgorOzsKKycnKQorCXRlc3QgLWQgIiR0ZW1wZGlyIiAmJgorCQlkaWUgIiR0ZW1wZGlyIGFscmVhZHkgZXhpc3RzLCBwbGVhc2UgcmVtb3ZlIGl0IgorZXNhYworb3JpZ19kaXI9JChwd2QpCitta2RpciAtcCAiJHRlbXBkaXIvdCIgJiYKK3RlbXBkaXI9IiQoY2QgIiR0ZW1wZGlyIjsgcHdkKSIgJiYKK2NkICIkdGVtcGRpci90IiAmJgord29ya2Rpcj0iJChwd2QpIiB8fAorZGllICIiCisKKyMgUmVtb3ZlIHRlbXBkaXIgb24gZXhpdAordHJhcCAnY2QgIiRvcmlnX2RpciI7IHJtIC1yZiAiJHRlbXBkaXIiJyAwCisKK09SSUdfR0lUX0RJUj0iJEdJVF9ESVIiCitPUklHX0dJVF9XT1JLX1RSRUU9IiRHSVRfV09SS19UUkVFIgorT1JJR19HSVRfSU5ERVhfRklMRT0iJEdJVF9JTkRFWF9GSUxFIgorT1JJR19HSVRfQVVUSE9SX05BTUU9IiRHSVRfQVVUSE9SX05BTUUiCitPUklHX0dJVF9BVVRIT1JfRU1BSUw9IiRHSVRfQVVUSE9SX0VNQUlMIgorT1JJR19HSVRfQVVUSE9SX0RBVEU9IiRHSVRfQVVUSE9SX0RBVEUiCitPUklHX0dJVF9DT01NSVRURVJfTkFNRT0iJEdJVF9DT01NSVRURVJfTkFNRSIKK09SSUdfR0lUX0NPTU1JVFRFUl9FTUFJTD0iJEdJVF9DT01NSVRURVJfRU1BSUwiCitPUklHX0dJVF9DT01NSVRURVJfREFURT0iJEdJVF9DT01NSVRURVJfREFURSIKKworR0lUX1dPUktfVFJFRT0uCitleHBvcnQgR0lUX0RJUiBHSVRfV09SS19UUkVFCisKKyMgTWFrZSBzdXJlIHJlZnMvb3JpZ2luYWwgaXMgZW1wdHkKK2dpdCBmb3ItZWFjaC1yZWYgPiAiJHRlbXBkaXIiL2JhY2t1cC1yZWZzIHx8IGV4aXQKK3doaWxlIHJlYWQgc2hhMSB0eXBlIG5hbWUKK2RvCisJY2FzZSAiJGZvcmNlLCRuYW1lIiBpbgorCSwkb3JpZ19uYW1lc3BhY2UqKQorCQlkaWUgIkNhbm5vdCBjcmVhdGUgYSBuZXcgYmFja3VwLgorQSBwcmV2aW91cyBiYWNrdXAgYWxyZWFkeSBleGlzdHMgaW4gJG9yaWdfbmFtZXNwYWNlCitGb3JjZSBvdmVyd3JpdGluZyB0aGUgYmFja3VwIHdpdGggLWYiCisJOzsKKwl0LCRvcmlnX25hbWVzcGFjZSopCisJCWdpdCB1cGRhdGUtcmVmIC1kICIkbmFtZSIgJHNoYTEKKwk7OworCWVzYWMKK2RvbmUgPCAiJHRlbXBkaXIiL2JhY2t1cC1yZWZzCisKKyMgVGhlIHJlZnMgc2hvdWxkIGJlIHVwZGF0ZWQgaWYgdGhlaXIgaGVhZHMgd2VyZSByZXdyaXR0ZW4KK2dpdCByZXYtcGFyc2UgLS1uby1mbGFncyAtLXJldnMtb25seSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBcCisJLS1kZWZhdWx0IEhFQUQgIiRAIiA+ICIkdGVtcGRpciIvcmF3LXJlZnMgfHwgZXhpdAord2hpbGUgcmVhZCByZWYKK2RvCisJY2FzZSAiJHJlZiIgaW4gXj8qKSBjb250aW51ZSA7OyBlc2FjCisKKwlpZiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkcmVmIl4wID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJZWNobyAiJHJlZiIKKwllbHNlCisJCXdhcm4gIldBUk5JTkc6IG5vdCByZXdyaXRpbmcgJyRyZWYnIChub3QgYSBjb21taXR0aXNoKSIKKwlmaQorZG9uZSA+IiR0ZW1wZGlyIi9oZWFkcyA8IiR0ZW1wZGlyIi9yYXctcmVmcworCit0ZXN0IC1zICIkdGVtcGRpciIvaGVhZHMgfHwKKwlkaWUgIllvdSBtdXN0IHNwZWNpZnkgYSByZWYgdG8gcmV3cml0ZS4iCisKK0dJVF9JTkRFWF9GSUxFPSIkKHB3ZCkvLi4vaW5kZXgiCitleHBvcnQgR0lUX0lOREVYX0ZJTEUKKworIyBtYXAgb2xkLT5uZXcgY29tbWl0IGlkcyBmb3IgcmV3cml0aW5nIHBhcmVudHMKK21rZGlyIC4uL21hcCB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgbWFwLyBkaXJlY3RvcnkiCisKK2lmIHRlc3QgLW4gIiRzdGF0ZV9icmFuY2giCit0aGVuCisJc3RhdGVfY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAtLW5vLWZsYWdzIC0tcmV2cy1vbmx5ICIkc3RhdGVfYnJhbmNoIikKKwlpZiB0ZXN0IC1uICIkc3RhdGVfY29tbWl0IgorCXRoZW4KKwkJZWNobyAiUG9wdWxhdGluZyBtYXAgZnJvbSAkc3RhdGVfYnJhbmNoICgkc3RhdGVfY29tbWl0KSIgMT4mMgorCQlwZXJsIC1lJ29wZW4oTUFQLCAiLXwiLCAiZ2l0IHNob3cgJEFSR1ZbMF06ZmlsdGVyLm1hcCIpIG9yIGRpZTsKKwkJCXdoaWxlICg8TUFQPikgeworCQkJCW0vKC4qKTooLiopLyBvciBkaWU7CisJCQkJb3BlbiBGLCAiPi4uL21hcC8kMSIgb3IgZGllOworCQkJCXByaW50IEYgIiQyIiBvciBkaWU7CisJCQkJY2xvc2UoRikgb3IgZGllOworCQkJfQorCQkJY2xvc2UoTUFQKSBvciBkaWU7JyAiJHN0YXRlX2NvbW1pdCIgXAorCQkJCXx8IGRpZSAiVW5hYmxlIHRvIGxvYWQgc3RhdGUgZnJvbSAkc3RhdGVfYnJhbmNoOmZpbHRlci5tYXAiCisJZWxzZQorCQllY2hvICJCcmFuY2ggJHN0YXRlX2JyYW5jaCBkb2VzIG5vdCBleGlzdC4gV2lsbCBjcmVhdGUiIDE+JjIKKwlmaQorZmkKKworIyB3ZSBuZWVkICItLSIgb25seSBpZiB0aGVyZSBhcmUgbm8gcGF0aCBhcmd1bWVudHMgaW4gJEAKK25vbnJldnM9JChnaXQgcmV2LXBhcnNlIC0tbm8tcmV2cyAiJEAiKSB8fCBleGl0CitpZiB0ZXN0IC16ICIkbm9ucmV2cyIKK3RoZW4KKwlkYXNoZGFzaD0tLQorZWxzZQorCWRhc2hkYXNoPQorCXJlbWFwX3RvX2FuY2VzdG9yPXQKK2ZpCisKK2dpdCByZXYtcGFyc2UgLS1yZXZzLW9ubHkgIiRAIiA+Li4vcGFyc2UKKworY2FzZSAiJGZpbHRlcl9zdWJkaXIiIGluCisiIikKKwlldmFsIHNldCAtLSAiJChnaXQgcmV2LXBhcnNlIC0tc3EgLS1uby1yZXZzICIkQCIpIgorCTs7CisqKQorCWV2YWwgc2V0IC0tICIkKGdpdCByZXYtcGFyc2UgLS1zcSAtLW5vLXJldnMgIiRAIiAkZGFzaGRhc2ggXAorCQkiJGZpbHRlcl9zdWJkaXIiKSIKKwk7OworZXNhYworCitnaXQgcmV2LWxpc3QgLS1yZXZlcnNlIC0tdG9wby1vcmRlciAtLWRlZmF1bHQgSEVBRCBcCisJLS1wYXJlbnRzIC0tc2ltcGxpZnktbWVyZ2VzIC0tc3RkaW4gIiRAIiA8Li4vcGFyc2UgPi4uL3JldnMgfHwKKwlkaWUgIkNvdWxkIG5vdCBnZXQgdGhlIGNvbW1pdHMiCitjb21taXRzPSQod2MgLWwgPC4uL3JldnMgfCB0ciAtZCAiICIpCisKK3Rlc3QgJGNvbW1pdHMgLWVxIDAgJiYgZGllX3dpdGhfc3RhdHVzIDIgIkZvdW5kIG5vdGhpbmcgdG8gcmV3cml0ZSIKKworIyBSZXdyaXRlIHRoZSBjb21taXRzCityZXBvcnRfcHJvZ3Jlc3MgKCkKK3sKKwlpZiB0ZXN0IC1uICIkcHJvZ3Jlc3MiICYmCisJCXRlc3QgJGdpdF9maWx0ZXJfYnJhbmNoX19jb21taXRfY291bnQgLWd0ICRuZXh0X3NhbXBsZV9hdAorCXRoZW4KKwkJY291bnQ9JGdpdF9maWx0ZXJfYnJhbmNoX19jb21taXRfY291bnQKKworCQlub3c9JChkYXRlICslcykKKwkJZWxhcHNlZD0kKCgkbm93IC0gJHN0YXJ0X3RpbWVzdGFtcCkpCisJCXJlbWFpbmluZz0kKCggKCRjb21taXRzIC0gJGNvdW50KSAqICRlbGFwc2VkIC8gJGNvdW50ICkpCisJCWlmIHRlc3QgJGVsYXBzZWQgLWd0IDAKKwkJdGhlbgorCQkJbmV4dF9zYW1wbGVfYXQ9JCgoICgkZWxhcHNlZCArIDEpICogJGNvdW50IC8gJGVsYXBzZWQgKSkKKwkJZWxzZQorCQkJbmV4dF9zYW1wbGVfYXQ9JCgoJG5leHRfc2FtcGxlX2F0ICsgMSkpCisJCWZpCisJCXByb2dyZXNzPSIgKCRlbGFwc2VkIHNlY29uZHMgcGFzc2VkLCByZW1haW5pbmcgJHJlbWFpbmluZyBwcmVkaWN0ZWQpIgorCWZpCisJcHJpbnRmICJcclJld3JpdGUgJGNvbW1pdCAoJGNvdW50LyRjb21taXRzKSRwcm9ncmVzcyAgICAiCit9CisKK2dpdF9maWx0ZXJfYnJhbmNoX19jb21taXRfY291bnQ9MAorCitwcm9ncmVzcz0gc3RhcnRfdGltZXN0YW1wPQoraWYgZGF0ZSAnKyVzJyAyPi9kZXYvbnVsbCB8IGdyZXAgLXEgJ15bMC05XVswLTldKiQnCit0aGVuCisJbmV4dF9zYW1wbGVfYXQ9MAorCXByb2dyZXNzPSJkdW1teSB0byBlbnN1cmUgdGhpcyBpcyBub3QgZW1wdHkiCisJc3RhcnRfdGltZXN0YW1wPSQoZGF0ZSAnKyVzJykKK2ZpCisKK2lmIHRlc3QgLW4gIiRmaWx0ZXJfaW5kZXgiIHx8CisgICB0ZXN0IC1uICIkZmlsdGVyX3RyZWUiIHx8CisgICB0ZXN0IC1uICIkZmlsdGVyX3N1YmRpciIKK3RoZW4KKwluZWVkX2luZGV4PXQKK2Vsc2UKKwluZWVkX2luZGV4PQorZmkKKworZXZhbCAiJGZpbHRlcl9zZXR1cCIgPCAvZGV2L251bGwgfHwKKwlkaWUgImZpbHRlciBzZXR1cCBmYWlsZWQ6ICRmaWx0ZXJfc2V0dXAiCisKK3doaWxlIHJlYWQgY29tbWl0IHBhcmVudHM7IGRvCisJZ2l0X2ZpbHRlcl9icmFuY2hfX2NvbW1pdF9jb3VudD0kKCgkZ2l0X2ZpbHRlcl9icmFuY2hfX2NvbW1pdF9jb3VudCsxKSkKKworCXJlcG9ydF9wcm9ncmVzcworCXRlc3QgLWYgIiR3b3JrZGlyIi8uLi9tYXAvJGNvbW1pdCAmJiBjb250aW51ZQorCisJY2FzZSAiJGZpbHRlcl9zdWJkaXIiIGluCisJIiIpCisJCWlmIHRlc3QgLW4gIiRuZWVkX2luZGV4IgorCQl0aGVuCisJCQlHSVRfQUxMT1dfTlVMTF9TSEExPTEgZ2l0IHJlYWQtdHJlZSAtaSAtbSAkY29tbWl0CisJCWZpCisJCTs7CisJKikKKwkJIyBUaGUgY29tbWl0IG1heSBub3QgaGF2ZSB0aGUgc3ViZGlyZWN0b3J5IGF0IGFsbAorCQllcnI9JChHSVRfQUxMT1dfTlVMTF9TSEExPTEgXAorCQkgICAgICBnaXQgcmVhZC10cmVlIC1pIC1tICRjb21taXQ6IiRmaWx0ZXJfc3ViZGlyIiAyPiYxKSB8fCB7CisJCQlpZiAhIGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgJGNvbW1pdDoiJGZpbHRlcl9zdWJkaXIiCisJCQl0aGVuCisJCQkJcm0gLWYgIiRHSVRfSU5ERVhfRklMRSIKKwkJCWVsc2UKKwkJCQllY2hvID4mMiAiJGVyciIKKwkJCQlmYWxzZQorCQkJZmkKKwkJfQorCWVzYWMgfHwgZGllICJDb3VsZCBub3QgaW5pdGlhbGl6ZSB0aGUgaW5kZXgiCisKKwlHSVRfQ09NTUlUPSRjb21taXQKKwlleHBvcnQgR0lUX0NPTU1JVAorCWdpdCBjYXQtZmlsZSBjb21taXQgIiRjb21taXQiID4uLi9jb21taXQgfHwKKwkJZGllICJDYW5ub3QgcmVhZCBjb21taXQgJGNvbW1pdCIKKworCWV2YWwgIiQoc2V0X2lkZW50IDwuLi9jb21taXQpIiB8fAorCQlkaWUgInNldHRpbmcgYXV0aG9yL2NvbW1pdHRlciBmYWlsZWQgZm9yIGNvbW1pdCAkY29tbWl0IgorCWV2YWwgIiRmaWx0ZXJfZW52IiA8IC9kZXYvbnVsbCB8fAorCQlkaWUgImVudiBmaWx0ZXIgZmFpbGVkOiAkZmlsdGVyX2VudiIKKworCWlmIFsgIiRmaWx0ZXJfdHJlZSIgXTsgdGhlbgorCQlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXUgLWEgfHwKKwkJCWRpZSAiQ291bGQgbm90IGNoZWNrb3V0IHRoZSBpbmRleCIKKwkJIyBmaWxlcyB0aGF0ICRjb21taXQgcmVtb3ZlZCBhcmUgbm93IHN0aWxsIGluIHRoZSB3b3JraW5nIHRyZWU7CisJCSMgcmVtb3ZlIHRoZW0sIGVsc2UgdGhleSB3b3VsZCBiZSBhZGRlZCBhZ2FpbgorCQlnaXQgY2xlYW4gLWQgLXEgLWYgLXgKKwkJZXZhbCAiJGZpbHRlcl90cmVlIiA8IC9kZXYvbnVsbCB8fAorCQkJZGllICJ0cmVlIGZpbHRlciBmYWlsZWQ6ICRmaWx0ZXJfdHJlZSIKKworCQkoCisJCQlnaXQgZGlmZi1pbmRleCAtciAtLW5hbWUtb25seSAtLWlnbm9yZS1zdWJtb2R1bGVzICRjb21taXQgLS0gJiYKKwkJCWdpdCBscy1maWxlcyAtLW90aGVycworCQkpID4gIiR0ZW1wZGlyIi90cmVlLXN0YXRlIHx8IGV4aXQKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlcGxhY2UgLS1yZW1vdmUgLS1zdGRpbiBcCisJCQk8ICIkdGVtcGRpciIvdHJlZS1zdGF0ZSB8fCBleGl0CisJZmkKKworCWV2YWwgIiRmaWx0ZXJfaW5kZXgiIDwgL2Rldi9udWxsIHx8CisJCWRpZSAiaW5kZXggZmlsdGVyIGZhaWxlZDogJGZpbHRlcl9pbmRleCIKKworCXBhcmVudHN0cj0KKwlmb3IgcGFyZW50IGluICRwYXJlbnRzOyBkbworCQlmb3IgcmVwYXJlbnQgaW4gJChtYXAgIiRwYXJlbnQiKTsgZG8KKwkJCWNhc2UgIiRwYXJlbnRzdHIgIiBpbgorCQkJKiIgLXAgJHJlcGFyZW50ICIqKQorCQkJCTs7CisJCQkqKQorCQkJCXBhcmVudHN0cj0iJHBhcmVudHN0ciAtcCAkcmVwYXJlbnQiCisJCQkJOzsKKwkJCWVzYWMKKwkJZG9uZQorCWRvbmUKKwlpZiBbICIkZmlsdGVyX3BhcmVudCIgXTsgdGhlbgorCQlwYXJlbnRzdHI9IiQoZWNobyAiJHBhcmVudHN0ciIgfCBldmFsICIkZmlsdGVyX3BhcmVudCIpIiB8fAorCQkJCWRpZSAicGFyZW50IGZpbHRlciBmYWlsZWQ6ICRmaWx0ZXJfcGFyZW50IgorCWZpCisKKwl7CisJCXdoaWxlIElGUz0nJyByZWFkIC1yIGhlYWRlcl9saW5lICYmIHRlc3QgLW4gIiRoZWFkZXJfbGluZSIKKwkJZG8KKwkJCSMgc2tpcCBoZWFkZXIgbGluZXMuLi4KKwkJCTo7CisJCWRvbmUKKwkJIyBhbmQgb3V0cHV0IHRoZSBhY3R1YWwgY29tbWl0IG1lc3NhZ2UKKwkJY2F0CisJfSA8Li4vY29tbWl0IHwKKwkJZXZhbCAiJGZpbHRlcl9tc2ciID4gLi4vbWVzc2FnZSB8fAorCQkJZGllICJtc2cgZmlsdGVyIGZhaWxlZDogJGZpbHRlcl9tc2ciCisKKwlpZiB0ZXN0IC1uICIkbmVlZF9pbmRleCIKKwl0aGVuCisJCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkKKwllbHNlCisJCXRyZWU9JChnaXQgcmV2LXBhcnNlICIkY29tbWl0Xnt0cmVlfSIpCisJZmkKKwl3b3JrZGlyPSR3b3JrZGlyIEBTSEVMTF9QQVRIQCAtYyAiJGZpbHRlcl9jb21taXQiICJnaXQgY29tbWl0LXRyZWUiIFwKKwkJIiR0cmVlIiAkcGFyZW50c3RyIDwgLi4vbWVzc2FnZSA+IC4uL21hcC8kY29tbWl0IHx8CisJCQlkaWUgImNvdWxkIG5vdCB3cml0ZSByZXdyaXR0ZW4gY29tbWl0IgorZG9uZSA8Li4vcmV2cworCisjIElmIHdlIGFyZSBmaWx0ZXJpbmcgZm9yIHBhdGhzLCBhcyBpbiB0aGUgY2FzZSBvZiBhIHN1YmRpcmVjdG9yeQorIyBmaWx0ZXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgYSBzcGVjaWZpZWQgaGVhZCBpcyBub3QgaW4gdGhlIHNldCBvZgorIyByZXdyaXR0ZW4gY29tbWl0cywgYmVjYXVzZSBpdCB3YXMgcHJ1bmVkIGJ5IHRoZSByZXZpc2lvbiB3YWxrZXIuCisjIEFuY2VzdG9yIHJlbWFwcGluZyBmaXhlcyB0aGlzIGJ5IG1hcHBpbmcgdGhlc2UgaGVhZHMgdG8gdGhlIHVuaXF1ZQorIyBuZWFyZXN0IGFuY2VzdG9yIHRoYXQgc3Vydml2ZWQgdGhlIHBydW5pbmcuCisKK2lmIHRlc3QgIiRyZW1hcF90b19hbmNlc3RvciIgPSB0Cit0aGVuCisJd2hpbGUgcmVhZCByZWYKKwlkbworCQlzaGExPSQoZ2l0IHJldi1wYXJzZSAiJHJlZiJeMCkKKwkJdGVzdCAtZiAiJHdvcmtkaXIiLy4uL21hcC8kc2hhMSAmJiBjb250aW51ZQorCQlhbmNlc3Rvcj0kKGdpdCByZXYtbGlzdCAtLXNpbXBsaWZ5LW1lcmdlcyAtMSAiJHJlZiIgIiRAIikKKwkJdGVzdCAiJGFuY2VzdG9yIiAmJiBlY2hvICQobWFwICRhbmNlc3RvcikgPj4gIiR3b3JrZGlyIi8uLi9tYXAvJHNoYTEKKwlkb25lIDwgIiR0ZW1wZGlyIi9oZWFkcworZmkKKworIyBGaW5hbGx5IHVwZGF0ZSB0aGUgcmVmcworCitfeDQwPSdbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdJworX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKK2VjaG8KK3doaWxlIHJlYWQgcmVmCitkbworCSMgYXZvaWQgcmV3cml0aW5nIGEgcmVmIHR3aWNlCisJdGVzdCAtZiAiJG9yaWdfbmFtZXNwYWNlJHJlZiIgJiYgY29udGludWUKKworCXNoYTE9JChnaXQgcmV2LXBhcnNlICIkcmVmIl4wKQorCXJld3JpdHRlbj0kKG1hcCAkc2hhMSkKKworCXRlc3QgJHNoYTEgPSAiJHJld3JpdHRlbiIgJiYKKwkJd2FybiAiV0FSTklORzogUmVmICckcmVmJyBpcyB1bmNoYW5nZWQiICYmCisJCWNvbnRpbnVlCisKKwljYXNlICIkcmV3cml0dGVuIiBpbgorCScnKQorCQllY2hvICJSZWYgJyRyZWYnIHdhcyBkZWxldGVkIgorCQlnaXQgdXBkYXRlLXJlZiAtbSAiZmlsdGVyLWJyYW5jaDogZGVsZXRlIiAtZCAiJHJlZiIgJHNoYTEgfHwKKwkJCWRpZSAiQ291bGQgbm90IGRlbGV0ZSAkcmVmIgorCTs7CisJJF94NDApCisJCWVjaG8gIlJlZiAnJHJlZicgd2FzIHJld3JpdHRlbiIKKwkJaWYgISBnaXQgdXBkYXRlLXJlZiAtbSAiZmlsdGVyLWJyYW5jaDogcmV3cml0ZSIgXAorCQkJCQkiJHJlZiIgJHJld3JpdHRlbiAkc2hhMSAyPi9kZXYvbnVsbDsgdGhlbgorCQkJaWYgdGVzdCAkKGdpdCBjYXQtZmlsZSAtdCAiJHJlZiIpID0gdGFnOyB0aGVuCisJCQkJaWYgdGVzdCAteiAiJGZpbHRlcl90YWdfbmFtZSI7IHRoZW4KKwkJCQkJd2FybiAiV0FSTklORzogWW91IHNhaWQgdG8gcmV3cml0ZSB0YWdnZWQgY29tbWl0cywgYnV0IG5vdCB0aGUgY29ycmVzcG9uZGluZyB0YWcuIgorCQkJCQl3YXJuICJXQVJOSU5HOiBQZXJoYXBzIHVzZSAnLS10YWctbmFtZS1maWx0ZXIgY2F0JyB0byByZXdyaXRlIHRoZSB0YWcuIgorCQkJCWZpCisJCQllbHNlCisJCQkJZGllICJDb3VsZCBub3QgcmV3cml0ZSAkcmVmIgorCQkJZmkKKwkJZmkKKwk7OworCSopCisJCSMgTkVFRFNXT1JLOiBwb3NzaWJseSBhZGQgLVdlcnJvciwgbWFraW5nIHRoaXMgYW4gZXJyb3IKKwkJd2FybiAiV0FSTklORzogJyRyZWYnIHdhcyByZXdyaXR0ZW4gaW50byBtdWx0aXBsZSBjb21taXRzOiIKKwkJd2FybiAiJHJld3JpdHRlbiIKKwkJd2FybiAiV0FSTklORzogUmVmICckcmVmJyBwb2ludHMgdG8gdGhlIGZpcnN0IG9uZSBub3cuIgorCQlyZXdyaXR0ZW49JChlY2hvICIkcmV3cml0dGVuIiB8IGhlYWQgLW4gMSkKKwkJZ2l0IHVwZGF0ZS1yZWYgLW0gImZpbHRlci1icmFuY2g6IHJld3JpdGUgdG8gZmlyc3QiIFwKKwkJCQkiJHJlZiIgJHJld3JpdHRlbiAkc2hhMSB8fAorCQkJZGllICJDb3VsZCBub3QgcmV3cml0ZSAkcmVmIgorCTs7CisJZXNhYworCWdpdCB1cGRhdGUtcmVmIC1tICJmaWx0ZXItYnJhbmNoOiBiYWNrdXAiICIkb3JpZ19uYW1lc3BhY2UkcmVmIiAkc2hhMSB8fAorCQkgZXhpdAorZG9uZSA8ICIkdGVtcGRpciIvaGVhZHMKKworIyBUT0RPOiBUaGlzIHNob3VsZCBwb3NzaWJseSBnbywgd2l0aCB0aGUgc2VtYW50aWNzIHRoYXQgYWxsIHBvc2l0aXZlIGdpdmVuCisjICAgICAgIHJlZnMgYXJlIHVwZGF0ZWQsIGFuZCB0aGVpciBvcmlnaW5hbCBoZWFkcyBzdG9yZWQgaW4gcmVmcy9vcmlnaW5hbC8KKyMgRmlsdGVyIHRhZ3MKKworaWYgWyAiJGZpbHRlcl90YWdfbmFtZSIgXTsgdGhlbgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUob2JqZWN0bmFtZSkgJShvYmplY3R0eXBlKSAlKHJlZm5hbWUpJyByZWZzL3RhZ3MgfAorCXdoaWxlIHJlYWQgc2hhMSB0eXBlIHJlZjsgZG8KKwkJcmVmPSIke3JlZiNyZWZzL3RhZ3MvfSIKKwkJIyBYWFg6IFJld3JpdGUgdGFnZ2VkIHRyZWVzIGFzIHdlbGw/CisJCWlmIFsgIiR0eXBlIiAhPSAiY29tbWl0IiAtYSAiJHR5cGUiICE9ICJ0YWciIF07IHRoZW4KKwkJCWNvbnRpbnVlOworCQlmaQorCisJCWlmIFsgIiR0eXBlIiA9ICJ0YWciIF07IHRoZW4KKwkJCSMgRGVyZWZlcmVuY2UgdG8gYSBjb21taXQKKwkJCXNoYTF0PSIkc2hhMSIKKwkJCXNoYTE9IiQoZ2l0IHJldi1wYXJzZSAtcSAiJHNoYTEiXntjb21taXR9KSIgfHwgY29udGludWUKKwkJZmkKKworCQlbIC1mICIuLi9tYXAvJHNoYTEiIF0gfHwgY29udGludWUKKwkJbmV3X3NoYTE9IiQoY2F0ICIuLi9tYXAvJHNoYTEiKSIKKwkJR0lUX0NPTU1JVD0iJHNoYTEiCisJCWV4cG9ydCBHSVRfQ09NTUlUCisJCW5ld19yZWY9IiQoZWNobyAiJHJlZiIgfCBldmFsICIkZmlsdGVyX3RhZ19uYW1lIikiIHx8CisJCQlkaWUgInRhZyBuYW1lIGZpbHRlciBmYWlsZWQ6ICRmaWx0ZXJfdGFnX25hbWUiCisKKwkJZWNobyAiJHJlZiAtPiAkbmV3X3JlZiAoJHNoYTEgLT4gJG5ld19zaGExKSIKKworCQlpZiBbICIkdHlwZSIgPSAidGFnIiBdOyB0aGVuCisJCQluZXdfc2hhMT0kKCAoIHByaW50ZiAnb2JqZWN0ICVzXG50eXBlIGNvbW1pdFxudGFnICVzXG4nIFwKKwkJCQkJCSIkbmV3X3NoYTEiICIkbmV3X3JlZiIKKwkJCQlnaXQgY2F0LWZpbGUgdGFnICIkcmVmIiB8CisJCQkJc2VkIC1uIFwKKwkJCQkgICAgLWUgJzEsL14kL3sKKwkJCQkJICAvXm9iamVjdCAvZAorCQkJCQkgIC9edHlwZSAvZAorCQkJCQkgIC9edGFnIC9kCisJCQkJCX0nIFwKKwkJCQkgICAgLWUgJy9eLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0vcScgXAorCQkJCSAgICAtZSAncCcgKSB8CisJCQkJZ2l0IGhhc2gtb2JqZWN0IC10IHRhZyAtdyAtLXN0ZGluKSB8fAorCQkJCWRpZSAiQ291bGQgbm90IGNyZWF0ZSBuZXcgdGFnIG9iamVjdCBmb3IgJHJlZiIKKwkJCWlmIGdpdCBjYXQtZmlsZSB0YWcgIiRyZWYiIHwgXAorCQkJICAgc2FuZV9ncmVwICdeLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4vZGV2L251bGwgMj4mMQorCQkJdGhlbgorCQkJCXdhcm4gImdwZyBzaWduYXR1cmUgc3RyaXBwZWQgZnJvbSB0YWcgb2JqZWN0ICRzaGExdCIKKwkJCWZpCisJCWZpCisKKwkJZ2l0IHVwZGF0ZS1yZWYgInJlZnMvdGFncy8kbmV3X3JlZiIgIiRuZXdfc2hhMSIgfHwKKwkJCWRpZSAiQ291bGQgbm90IHdyaXRlIHRhZyAkbmV3X3JlZiIKKwlkb25lCitmaQorCit1bnNldCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgR0lUX0lOREVYX0ZJTEUKK3Vuc2V0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMIEdJVF9BVVRIT1JfREFURQordW5zZXQgR0lUX0NPTU1JVFRFUl9OQU1FIEdJVF9DT01NSVRURVJfRU1BSUwgR0lUX0NPTU1JVFRFUl9EQVRFCit0ZXN0IC16ICIkT1JJR19HSVRfRElSIiB8fCB7CisJR0lUX0RJUj0iJE9SSUdfR0lUX0RJUiIgJiYgZXhwb3J0IEdJVF9ESVIKK30KK3Rlc3QgLXogIiRPUklHX0dJVF9XT1JLX1RSRUUiIHx8IHsKKwlHSVRfV09SS19UUkVFPSIkT1JJR19HSVRfV09SS19UUkVFIiAmJgorCWV4cG9ydCBHSVRfV09SS19UUkVFCit9Cit0ZXN0IC16ICIkT1JJR19HSVRfSU5ERVhfRklMRSIgfHwgeworCUdJVF9JTkRFWF9GSUxFPSIkT1JJR19HSVRfSU5ERVhfRklMRSIgJiYKKwlleHBvcnQgR0lUX0lOREVYX0ZJTEUKK30KK3Rlc3QgLXogIiRPUklHX0dJVF9BVVRIT1JfTkFNRSIgfHwgeworCUdJVF9BVVRIT1JfTkFNRT0iJE9SSUdfR0lUX0FVVEhPUl9OQU1FIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUKK30KK3Rlc3QgLXogIiRPUklHX0dJVF9BVVRIT1JfRU1BSUwiIHx8IHsKKwlHSVRfQVVUSE9SX0VNQUlMPSIkT1JJR19HSVRfQVVUSE9SX0VNQUlMIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0VNQUlMCit9Cit0ZXN0IC16ICIkT1JJR19HSVRfQVVUSE9SX0RBVEUiIHx8IHsKKwlHSVRfQVVUSE9SX0RBVEU9IiRPUklHX0dJVF9BVVRIT1JfREFURSIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFCit9Cit0ZXN0IC16ICIkT1JJR19HSVRfQ09NTUlUVEVSX05BTUUiIHx8IHsKKwlHSVRfQ09NTUlUVEVSX05BTUU9IiRPUklHX0dJVF9DT01NSVRURVJfTkFNRSIgJiYKKwlleHBvcnQgR0lUX0NPTU1JVFRFUl9OQU1FCit9Cit0ZXN0IC16ICIkT1JJR19HSVRfQ09NTUlUVEVSX0VNQUlMIiB8fCB7CisJR0lUX0NPTU1JVFRFUl9FTUFJTD0iJE9SSUdfR0lUX0NPTU1JVFRFUl9FTUFJTCIgJiYKKwlleHBvcnQgR0lUX0NPTU1JVFRFUl9FTUFJTAorfQordGVzdCAteiAiJE9SSUdfR0lUX0NPTU1JVFRFUl9EQVRFIiB8fCB7CisJR0lUX0NPTU1JVFRFUl9EQVRFPSIkT1JJR19HSVRfQ09NTUlUVEVSX0RBVEUiICYmCisJZXhwb3J0IEdJVF9DT01NSVRURVJfREFURQorfQorCitpZiB0ZXN0IC1uICIkc3RhdGVfYnJhbmNoIgordGhlbgorCWVjaG8gIlNhdmluZyByZXdyaXRlIHN0YXRlIHRvICRzdGF0ZV9icmFuY2giIDE+JjIKKwlzdGF0ZV9ibG9iPSQoCisJCXBlcmwgLWUnb3BlbmRpciBELCAiLi4vbWFwIiBvciBkaWU7CisJCQlvcGVuIEgsICJ8LSIsICJnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiIgb3IgZGllOworCQkJZm9yZWFjaCAoc29ydCByZWFkZGlyKEQpKSB7CisJCQkJbmV4dCBpZiBtL15cLlwuPyQvOworCQkJCW9wZW4gRiwgIjwuLi9tYXAvJF8iIG9yIGRpZTsKKwkJCQljaG9tcCgkZiA9IDxGPik7CisJCQkJcHJpbnQgSCAiJF86JGZcbiIgb3IgZGllOworCQkJfQorCQkJY2xvc2UoSCkgb3IgZGllOycgfHwgZGllICJVbmFibGUgdG8gc2F2ZSBzdGF0ZSIpCisJc3RhdGVfdHJlZT0kKHByaW50ZiAnMTAwNjQ0IGJsb2IgJXNcdGZpbHRlci5tYXBcbicgIiRzdGF0ZV9ibG9iIiB8IGdpdCBta3RyZWUpCisJaWYgdGVzdCAtbiAiJHN0YXRlX2NvbW1pdCIKKwl0aGVuCisJCXN0YXRlX2NvbW1pdD0kKGVjaG8gIlN5bmMiIHwgZ2l0IGNvbW1pdC10cmVlICIkc3RhdGVfdHJlZSIgLXAgIiRzdGF0ZV9jb21taXQiKQorCWVsc2UKKwkJc3RhdGVfY29tbWl0PSQoZWNobyAiU3luYyIgfCBnaXQgY29tbWl0LXRyZWUgIiRzdGF0ZV90cmVlIiApCisJZmkKKwlnaXQgdXBkYXRlLXJlZiAiJHN0YXRlX2JyYW5jaCIgIiRzdGF0ZV9jb21taXQiCitmaQorCitjZCAiJG9yaWdfZGlyIgorcm0gLXJmICIkdGVtcGRpciIKKwordHJhcCAtIDAKKworaWYgWyAiJChpc19iYXJlX3JlcG9zaXRvcnkpIiA9IGZhbHNlIF07IHRoZW4KKwlnaXQgcmVhZC10cmVlIC11IC1tIEhFQUQgfHwgZXhpdAorZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS9naXQtZ3VpLy5naXRhdHRyaWJ1dGVzIGIvZ2l0LWd1aS8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWNkNDFkCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxLDUgQEAKKyogICAgICAgICAgIHdoaXRlc3BhY2U9aW5kZW50LXdpdGgtbm9uLXRhYix0cmFpbGluZy1zcGFjZSxzcGFjZS1iZWZvcmUtdGFiLHRhYndpZHRoPTQKKyogICAgICAgICAgIGVuY29kaW5nPVVTLUFTQ0lJCitnaXQtZ3VpLnNoICBlbmNvZGluZz1VVEYtOAorL3BvLyoucG8gICAgZW5jb2Rpbmc9VVRGLTgKKy9HSVQtVkVSU0lPTi1HRU4gZW9sPWxmCmRpZmYgLS1naXQgYS9naXQtZ3VpLy5naXRpZ25vcmUgYi9naXQtZ3VpLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4M2IyMQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDggQEAKKy5EU19TdG9yZQorY29uZmlnLm1haworR2l0IEd1aS5hcHAqCitnaXQtZ3VpLnRjbAorR0lULVZFUlNJT04tRklMRQorR0lULUdVSS1WQVJTCitnaXQtZ3VpCitsaWIvdGNsSW5kZXgKZGlmZiAtLWdpdCBhL2dpdC1ndWkvR0lULVZFUlNJT04tR0VOIGIvZ2l0LWd1aS9HSVQtVkVSU0lPTi1HRU4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTIzNzNkMgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvR0lULVZFUlNJT04tR0VOCkBAIC0wLDAgKzEsODAgQEAKKyMhL2Jpbi9zaAorCitHVkY9R0lULVZFUlNJT04tRklMRQorREVGX1ZFUj0wLjIxLkdJVEdVSQorCitMRj0nCisnCisKK3RyZWVfc2VhcmNoICgpCit7CisJaGVhZD0kMQorCXRyZWU9JDIKKwlmb3IgcCBpbiAkKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgLS1tYXgtY291bnQ9MSAkaGVhZCAyPi9kZXYvbnVsbCkKKwlkbworCQl0ZXN0ICR0cmVlID0gJChnaXQgcmV2LXBhcnNlICRwXnt0cmVlfSAyPi9kZXYvbnVsbCkgJiYKKwkJdm49JChnaXQgZGVzY3JpYmUgLS1hYmJyZXY9NCAkcCAyPi9kZXYvbnVsbCkgJiYKKwkJY2FzZSAiJHZuIiBpbgorCQlnaXRndWktWzAtOV0qKSBlY2hvICR2bjsgYnJlYWs7OworCQllc2FjCisJZG9uZQorfQorCisjIEFsd2F5cyB1c2UgdGhlIHRhcmJhbGwgdmVyc2lvbiBmaWxlIGlmIGZvdW5kLCBqdXN0CisjIGluIGNhc2Ugd2UgYXJlIHNvbWVob3cgY29udGFpbmVkIGluIGEgbGFyZ2VyIGdpdAorIyByZXBvc2l0b3J5IHRoYXQgZG9lc24ndCBhY3R1YWxseSB0cmFjayBvdXIgc3RhdGUuCisjIChBdCBsZWFzdCBvbmUgcGFja2FnZSBtYW5hZ2VyIGlzIGRvaW5nIHRoaXMuKQorIworIyBXZSBtYXkgYmUgYSBzdWJwcm9qZWN0LCBzbyB0cnkgbG9va2luZyBmb3IgdGhlIG1lcmdlCisjIGNvbW1pdCB0aGF0IHN1cHBsaWVkIHRoaXMgZGlyZWN0b3J5IGNvbnRlbnQgaWYgd2UgYXJlCisjIG5vdCBhdCB0aGUgdG9wbGV2ZWwuICBXZSBwcm9iYWJseSB3aWxsIGFsd2F5cyBiZSB0aGUKKyMgc2Vjb25kIHBhcmVudCBpbiB0aGUgY29tbWl0LCBidXQgd2Ugc2hvdWxkbid0IHJlbHkgb24KKyMgdGhhdCBmYWN0LgorIworIyBJZiB3ZSBhcmUgYXQgdGhlIHRvcGxldmVsIG9yIHRoZSBtZXJnZSBhc3N1bXB0aW9uIGZhaWxzCisjIHRyeSBsb29raW5nIGZvciBhIGdpdGd1aS0qIHRhZy4KKworaWYgdGVzdCAtZiB2ZXJzaW9uICYmCisgICBWTj0kKGNhdCB2ZXJzaW9uKQordGhlbgorCTogaGFwcHkKK2VsaWYgcHJlZml4PSIkKGdpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeCAyPi9kZXYvbnVsbCkiCisgICB0ZXN0IC1uICIkcHJlZml4IiAmJgorICAgaGVhZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQgLS0gLiAyPi9kZXYvbnVsbCkgJiYKKyAgIHRyZWU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJIRUFEOiRwcmVmaXgiIDI+L2Rldi9udWxsKSAmJgorICAgVk49JCh0cmVlX3NlYXJjaCAkaGVhZCAkdHJlZSkKKyAgIGNhc2UgIiRWTiIgaW4KKyAgIGdpdGd1aS1bMC05XSopIDogaGFwcHkgOzsKKyAgICopIChleGl0IDEpIDs7CisgICBlc2FjCit0aGVuCisJVk49JChlY2hvICIkVk4iIHwgc2VkIC1lICdzL15naXRndWktLy87cy8tLy4vZycpOworZWxpZiBWTj0kKGdpdCBkZXNjcmliZSAtLWFiYnJldj00IEhFQUQgMj4vZGV2L251bGwpICYmCisgICBjYXNlICIkVk4iIGluCisgICBnaXRndWktWzAtOV0qKSA6IGhhcHB5IDs7CisgICAqKSAoZXhpdCAxKSA7OworICAgZXNhYwordGhlbgorCVZOPSQoZWNobyAiJFZOIiB8IHNlZCAtZSAncy9eZ2l0Z3VpLS8vO3MvLS8uL2cnKTsKK2Vsc2UKKwlWTj0iJERFRl9WRVIiCitmaQorCitkaXJ0eT0kKHNoIC1jICdnaXQgZGlmZi1pbmRleCAtLW5hbWUtb25seSBIRUFEJyAyPi9kZXYvbnVsbCkgfHwgZGlydHk9CitjYXNlICIkZGlydHkiIGluCisnJykKKwk7OworKikKKwlWTj0iJFZOLWRpcnR5IiA7OworZXNhYworCitpZiB0ZXN0IC1yICRHVkYKK3RoZW4KKwlWQz0kKHNlZCAtZSAncy9eR0lUR1VJX1ZFUlNJT04gPSAvLycgPCRHVkYpCitlbHNlCisJVkM9dW5zZXQKK2ZpCit0ZXN0ICIkVk4iID0gIiRWQyIgfHwgeworCWVjaG8gPiYyICJHSVRHVUlfVkVSU0lPTiA9ICRWTiIKKwllY2hvICJHSVRHVUlfVkVSU0lPTiA9ICRWTiIgPiRHVkYKK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvTWFrZWZpbGUgYi9naXQtZ3VpL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMGNhZWQKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL01ha2VmaWxlCkBAIC0wLDAgKzEsMzQ3IEBACithbGw6OgorCisjIERlZmluZSBWPTEgdG8gaGF2ZSBhIG1vcmUgdmVyYm9zZSBjb21waWxlLgorIworIyBEZWZpbmUgTk9fTVNHRk1UIGlmIHlvdSBkbyBub3QgaGF2ZSBtc2dmbXQgZnJvbSB0aGUgR05VIGdldHRleHQKKyMgcGFja2FnZSBhbmQgd2FudCB0byB1c2Ugb3VyIHJvdWdoIHB1cmUgVGNsIHBvLT5tc2cgdHJhbnNsYXRvci4KKyMgVENMX1BBVEggbXVzdCBiZSB2YWxpZCBmb3IgdGhpcyB0byB3b3JrLgorIworCitHSVQtVkVSU0lPTi1GSUxFOiBGT1JDRQorCUAkKFNIRUxMX1BBVEgpIC4vR0lULVZFUlNJT04tR0VOCistaW5jbHVkZSBHSVQtVkVSU0lPTi1GSUxFCisKK3VuYW1lX1MgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXMgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQordW5hbWVfTyA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtbyAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCit1bmFtZV9SIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1yIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKKworU0NSSVBUX1NIID0gZ2l0LWd1aS5zaAorR0lUR1VJX01BSU4gOj0gZ2l0LWd1aQorR0lUR1VJX0JVSUxUX0lOUyA9IGdpdC1jaXRvb2wKK0FMTF9MSUJGSUxFUyA9ICQod2lsZGNhcmQgbGliLyoudGNsKQorUFJFTE9BRF9GSUxFUyA9IGxpYi9jbGFzcy50Y2wKK05PTlRDTF9MSUJGSUxFUyA9IFwKKwlsaWIvZ2l0LWd1aS5pY28gXAorCSQod2lsZGNhcmQgbGliL3dpbjMyXyouanMpIFwKKyNlbmQgTk9OVENMX0xJQkZJTEVTCisKK2lmbmRlZiBTSEVMTF9QQVRICisJU0hFTExfUEFUSCA9IC9iaW4vc2gKK2VuZGlmCisKK2lmbmRlZiBnaXRleGVjZGlyCisJZ2l0ZXhlY2RpciA6PSAkKHNoZWxsIGdpdCAtLWV4ZWMtcGF0aCkKK2VuZGlmCisKK2lmbmRlZiBzaGFyZWRpcgoraWZlcSAoZ2l0LWNvcmUsJChub3RkaXIgJChnaXRleGVjZGlyKSkpCisJc2hhcmVkaXIgOj0gJChkaXIgJChwYXRzdWJzdCAlLywlLCQoZGlyICQoZ2l0ZXhlY2RpcikpKSlzaGFyZQorZWxzZQorCXNoYXJlZGlyIDo9ICQoZGlyICQoZ2l0ZXhlY2Rpcikpc2hhcmUKK2VuZGlmCitlbmRpZgorCitpZm5kZWYgSU5TVEFMTAorCUlOU1RBTEwgPSBpbnN0YWxsCitlbmRpZgorCitSTV9SRiAgICAgPz0gcm0gLXJmCitSTURJUiAgICAgPz0gcm1kaXIKKworSU5TVEFMTF9EMCA9ICQoSU5TVEFMTCkgLWQgLW0gNzU1ICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQorSU5TVEFMTF9EMSA9CitJTlNUQUxMX1IwID0gJChJTlNUQUxMKSAtbSA2NDQgIyBzcGFjZSBpcyByZXF1aXJlZCBoZXJlCitJTlNUQUxMX1IxID0KK0lOU1RBTExfWDAgPSAkKElOU1RBTEwpIC1tIDc1NSAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKK0lOU1RBTExfWDEgPQorSU5TVEFMTF9BMCA9IGZpbmQgIyBzcGFjZSBpcyByZXF1aXJlZCBoZXJlCitJTlNUQUxMX0ExID0gfCBjcGlvIC1wdWQKK0lOU1RBTExfTDAgPSBybSAtZiAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKK0lOU1RBTExfTDEgPSAmJiBsbiAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKK0lOU1RBTExfTDIgPQorSU5TVEFMTF9MMyA9CisKK1JFTU9WRV9EMCAgPSAkKFJNRElSKSAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKK1JFTU9WRV9EMSAgPSB8fCB0cnVlCitSRU1PVkVfRjAgID0gJChSTV9SRikgIyBzcGFjZSBpcyByZXF1aXJlZCBoZXJlCitSRU1PVkVfRjEgID0KK0NMRUFOX0RTVCAgPSB0cnVlCisKK2lmbmRlZiBWCisJUVVJRVQgICAgICAgICAgPSBACisJUVVJRVRfR0VOICAgICAgPSAkKFFVSUVUKWVjaG8gJyAgICcgR0VOICckQCcgJiYKKwlRVUlFVF9JTkRFWCAgICA9ICQoUVVJRVQpZWNobyAnICAgJyBJTkRFWCAkKGRpciAkQCkgJiYKKwlRVUlFVF9NU0dGTVQwICA9ICQoUVVJRVQpcHJpbnRmICcgICAgTVNHRk1UICUxMnMgJyAkQCAmJiB2PWAKKwlRVUlFVF9NU0dGTVQxICA9IDI+JjFgICYmIGVjaG8gIiQkdiIgfCBzZWQgLWUgJ3MvZnV6enkgdHJhbnNsYXRpb25zL2Z1enp5LycgfCBzZWQgLWUgJ3MvIG1lc3NhZ2VzKi8vZycKKwlRVUlFVF8yREVWTlVMTCA9IDI+L2Rldi9udWxsCisKKwlJTlNUQUxMX0QwID0gZGlyPQorCUlOU1RBTExfRDEgPSAmJiBlY2hvICcgJyBERVNUICQkZGlyICYmICQoSU5TVEFMTCkgLWQgLW0gNzU1ICIkJGRpciIKKwlJTlNUQUxMX1IwID0gc3JjPQorCUlOU1RBTExfUjEgPSAmJiBlY2hvICcgICAnIElOU1RBTEwgNjQ0IGBiYXNlbmFtZSAkJHNyY2AgJiYgJChJTlNUQUxMKSAtbSA2NDQgJCRzcmMKKwlJTlNUQUxMX1gwID0gc3JjPQorCUlOU1RBTExfWDEgPSAmJiBlY2hvICcgICAnIElOU1RBTEwgNzU1IGBiYXNlbmFtZSAkJHNyY2AgJiYgJChJTlNUQUxMKSAtbSA3NTUgJCRzcmMKKwlJTlNUQUxMX0EwID0gc3JjPQorCUlOU1RBTExfQTEgPSAmJiBlY2hvICcgICAnIElOU1RBTEwgJyAgICcgYGJhc2VuYW1lICIkJHNyYyJgICYmIGZpbmQgIiQkc3JjIiB8IGNwaW8gLXB1ZAorCisJSU5TVEFMTF9MMCA9IGRzdD0KKwlJTlNUQUxMX0wxID0gJiYgc3JjPQorCUlOU1RBTExfTDIgPSAmJiBkc3Q9CisJSU5TVEFMTF9MMyA9ICYmIGVjaG8gJyAgICcgJ0xJTksgICAgICAgJyBgYmFzZW5hbWUgIiQkZHN0ImAgJy0+JyBgYmFzZW5hbWUgIiQkc3JjImAgJiYgcm0gLWYgIiQkZHN0IiAmJiBsbiAiJCRzcmMiICIkJGRzdCIKKworCUNMRUFOX0RTVCA9IGVjaG8gJyAnIFVOSU5TVEFMTAorCVJFTU9WRV9EMCA9IGRpcj0KKwlSRU1PVkVfRDEgPSAmJiBlY2hvICcgJyBSRU1PVkUgJCRkaXIgJiYgdGVzdCAtZCAiJCRkaXIiICYmICQoUk1ESVIpICIkJGRpciIgfHwgdHJ1ZQorCVJFTU9WRV9GMCA9IGRzdD0KKwlSRU1PVkVfRjEgPSAmJiBlY2hvICcgICAnIFJFTU9WRSBgYmFzZW5hbWUgIiQkZHN0ImAgJiYgJChSTV9SRikgIiQkZHN0IgorZW5kaWYKKworVENMVEtfUEFUSCA/PSB3aXNoCitpZmVxICguLywkKGRpciAkKFRDTFRLX1BBVEgpKSkKKwlUQ0xfUEFUSCA/PSAkKHN1YnN0IHdpc2gsdGNsc2gsJChUQ0xUS19QQVRIKSkKK2Vsc2UKKwlUQ0xfUEFUSCA/PSAkKGRpciAkKFRDTFRLX1BBVEgpKSQobm90ZGlyICQoc3Vic3Qgd2lzaCx0Y2xzaCwkKFRDTFRLX1BBVEgpKSkKK2VuZGlmCisKK2lmZXEgKCQodW5hbWVfUyksRGFyd2luKQorCVRLRlJBTUVXT1JLID0gL0xpYnJhcnkvRnJhbWV3b3Jrcy9Uay5mcmFtZXdvcmsvUmVzb3VyY2VzL1dpc2guYXBwCisJaWZlcSAoJChzaGVsbCBlY2hvICIkKHVuYW1lX1IpIiB8IGF3ayAtRi4gJ3tpZiAoJCQxID49IDkpIHByaW50ICJ5In0nKV8kKHNoZWxsIHRlc3QgLWQgJChUS0ZSQU1FV09SSykgfHwgZWNobyBuKSx5X24pCisJCVRLRlJBTUVXT1JLID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvVGsuZnJhbWV3b3JrL1Jlc291cmNlcy9XaXNoLmFwcAorCQlpZmVxICgkKHNoZWxsIHRlc3QgLWQgJChUS0ZSQU1FV09SSykgfHwgZWNobyBuKSxuKQorCQkJVEtGUkFNRVdPUksgPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Uay5mcmFtZXdvcmsvUmVzb3VyY2VzL1dpc2hcIFNoZWxsLmFwcAorCQllbmRpZgorCWVuZGlmCisJVEtFWEVDVVRBQkxFID0gJChzaGVsbCBiYXNlbmFtZSAiJChUS0ZSQU1FV09SSykiIC5hcHApCitlbmRpZgorCitpZmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHMpLHMpCitRVUlFVF9HRU4gPQorZW5kaWYKKworLWluY2x1ZGUgY29uZmlnLm1haworCitERVNURElSX1NRID0gJChzdWJzdCAnLCdcJycsJChERVNURElSKSkKK2dpdGV4ZWNkaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGdpdGV4ZWNkaXIpKQorU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSCkpCitUQ0xfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoVENMX1BBVEgpKQorVENMVEtfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoVENMVEtfUEFUSCkpCitUQ0xUS19QQVRIX1NFRCA9ICQoc3Vic3QgJywnXCcnLCQoc3Vic3QgXCxcXCwkKFRDTFRLX1BBVEgpKSkKKworZ2dfbGliZGlyID89ICQoc2hhcmVkaXIpL2dpdC1ndWkvbGliCitsaWJkaXJfU1EgID0gJChzdWJzdCAnLCdcJycsJChnZ19saWJkaXIpKQorbGliZGlyX1NFRCA9ICQoc3Vic3QgJywnXCcnLCQoc3Vic3QgXCxcXCwkKGdnX2xpYmRpcl9zZWRfaW4pKSkKK2V4ZWRpciAgICAgPSAkKGRpciAkKGdpdGV4ZWNkaXIpKXNoYXJlL2dpdC1ndWkvbGliCisKK0dJVEdVSV9TQ1JJUFQgICA6PSAkJDAKK0dJVEdVSV9SRUxBVElWRSA6PQorR0lUR1VJX01BQ09TWEFQUCA6PQorCitpZmVxICgkKHVuYW1lX08pLEN5Z3dpbikKKwlHSVRHVUlfU0NSSVBUIDo9IGBjeWdwYXRoIC0td2luZG93cyAtLWFic29sdXRlICIkKEdJVEdVSV9TQ1JJUFQpImAKKworCSMgSXMgdGhpcyBhIEN5Z3dpbiBUY2wvVGsgYmluYXJ5PyAgSWYgc28gaXQga25vd3MgaG93IHRvIGRvCisJIyBQT1NJWCBwYXRoIHRyYW5zbGF0aW9uIGp1c3QgbGlrZSBjeWdwYXRoIGRvZXMgYW5kIHdlIG11c3QKKwkjIGtlZXAgbGliZGlyIGluIFBPU0lYIGZvcm1hdCBzbyBDeWd3aW4gcGFja2FnZXMgb2YgZ2l0LWd1aQorCSMgd29yayBubyBtYXR0ZXIgd2hlcmUgdGhlIHVzZXIgaW5zdGFsbHMgdGhlbS4KKwkjCisJaWZlcSAoJChzaGVsbCBlY2hvICdwdXRzIFtmaWxlIG5vcm1hbGl6ZSAvXScgfCAnJChUQ0xfUEFUSF9TUSknKSwkKHNoZWxsIGN5Z3BhdGggLS1taXhlZCAtLWFic29sdXRlIC8pKQorCQlnZ19saWJkaXJfc2VkX2luIDo9ICQoZ2dfbGliZGlyKQorCWVsc2UKKwkJZ2dfbGliZGlyX3NlZF9pbiA6PSAkKHNoZWxsIGN5Z3BhdGggLS13aW5kb3dzIC0tYWJzb2x1dGUgIiQoZ2dfbGliZGlyKSIpCisJZW5kaWYKK2Vsc2UKKwlpZmVxICgkKGV4ZWRpciksJChnZ19saWJkaXIpKQorCQlHSVRHVUlfUkVMQVRJVkUgOj0gMQorCWVuZGlmCisJZ2dfbGliZGlyX3NlZF9pbiA6PSAkKGdnX2xpYmRpcikKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLERhcndpbikKKwlpZmVxICgkKHNoZWxsIHRlc3QgLWQgJChUS0ZSQU1FV09SSykgJiYgZWNobyB5KSx5KQorCQlHSVRHVUlfTUFDT1NYQVBQIDo9IFllc1BsZWFzZQorCWVuZGlmCitlbmRpZgoraWZuZXEgKCwkKGZpbmRzdHJpbmcgTUlOR1csJCh1bmFtZV9TKSkpCitpZmVxICgkKHNoZWxsIGV4cHIgIiQodW5hbWVfUikiIDogJzFcLicpLDIpCisJTk9fTVNHRk1UPTEKK2VuZGlmCisJR0lUR1VJX1dJTkRPV1NfV1JBUFBFUiA6PSBZZXNQbGVhc2UKKwlHSVRHVUlfUkVMQVRJVkUgOj0gMQorZW5kaWYKKworaWZkZWYgR0lUR1VJX01BQ09TWEFQUAorR0lUR1VJX01BSU4gOj0gZ2l0LWd1aS50Y2wKKworZ2l0LWd1aTogR0lULVZFUlNJT04tRklMRSBHSVQtR1VJLVZBUlMKKwkkKFFVSUVUX0dFTilybSAtZiAkQCAkQCsgJiYgXAorCWVjaG8gJyMhJChTSEVMTF9QQVRIX1NRKScgPiRAKyAmJiBcCisJZWNobyAnaWYgdGVzdCAieiQkKiIgPSB6dmVyc2lvbiB8fCcgPj4kQCsgJiYgXAorCWVjaG8gJyAgIHRlc3QgInokJCoiID0gei0tdmVyc2lvbicgPj4kQCsgJiYgXAorCWVjaG8gdGhlbiA+PiRAKyAmJiBcCisJZWNobyAnCSdlY2hvIFwnZ2l0LWd1aSB2ZXJzaW9uICckKEdJVEdVSV9WRVJTSU9OKSdcJyA+PiRAKyAmJiBcCisJZWNobyBlbHNlID4+JEArICYmIFwKKwllY2hvICcJbGliZGlyPSIkJHtHSVRfR1VJX0xJQl9ESVI6LSQobGliZGlyX1NRKX0iJyA+PiRAKyAmJiBcCisJZWNobyAnCSdleGVjIFwiJyQkbGliZGlyL0dpdCBHdWkuYXBwL0NvbnRlbnRzL01hY09TLyQoc3Vic3QgXCwsJChUS0VYRUNVVEFCTEUpKSdcIiBcCisJCSciJCQwIiAiJCRAIicgPj4kQCsgJiYgXAorCWVjaG8gZmkgPj4kQCsgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgJEArICRACisKK0dpdFwgR3VpLmFwcDogR0lULVZFUlNJT04tRklMRSBHSVQtR1VJLVZBUlMgXAorCQltYWNvc3gvSW5mby5wbGlzdCBcCisJCW1hY29zeC9naXQtZ3VpLmljbnMgXAorCQltYWNvc3gvQXBwTWFpbi50Y2wgXAorCQkkKFRLRlJBTUVXT1JLKS9Db250ZW50cy9NYWNPUy8kKFRLRVhFQ1VUQUJMRSkKKwkkKFFVSUVUX0dFTilybSAtcmYgJyRAJyAnJEAnKyAmJiBcCisJbWtkaXIgLXAgJyRAJysvQ29udGVudHMvTWFjT1MgJiYgXAorCW1rZGlyIC1wICckQCcrL0NvbnRlbnRzL1Jlc291cmNlcy9TY3JpcHRzICYmIFwKKwljcCAnJChzdWJzdCAnLCdcJycsJChzdWJzdCBcLCwkKFRLRlJBTUVXT1JLKS9Db250ZW50cy9NYWNPUy8kKFRLRVhFQ1VUQUJMRSkpKScgXAorCQknJEAnKy9Db250ZW50cy9NYWNPUyAmJiBcCisJY3AgbWFjb3N4L2dpdC1ndWkuaWNucyAnJEAnKy9Db250ZW50cy9SZXNvdXJjZXMgJiYgXAorCXNlZCAtZSAncy9AQEdJVEdVSV9WRVJTSU9OQEAvJChHSVRHVUlfVkVSU0lPTikvZycgXAorCQktZSAncy9AQEdJVEdVSV9US0VYRUNVVEFCTEVAQC8kKFRLRVhFQ1VUQUJMRSkvZycgXAorCQltYWNvc3gvSW5mby5wbGlzdCBcCisJCT4nJEAnKy9Db250ZW50cy9JbmZvLnBsaXN0ICYmIFwKKwlzZWQgLWUgJ3N8QEBnaXRleGVjZGlyQEB8JChnaXRleGVjZGlyX1NRKXwnIFwKKwkJLWUgJ3N8QEBHSVRHVUlfTElCRElSQEB8JChsaWJkaXJfU0VEKXwnIFwKKwkJbWFjb3N4L0FwcE1haW4udGNsIFwKKwkJPickQCcrL0NvbnRlbnRzL1Jlc291cmNlcy9TY3JpcHRzL0FwcE1haW4udGNsICYmIFwKKwltdiAnJEAnKyAnJEAnCitlbmRpZgorCitpZmRlZiBHSVRHVUlfV0lORE9XU19XUkFQUEVSCitHSVRHVUlfTUFJTiA6PSBnaXQtZ3VpLnRjbAorCitnaXQtZ3VpOiB3aW5kb3dzL2dpdC1ndWkuc2gKKwljcCAkPCAkQAorZW5kaWYKKworJChHSVRHVUlfTUFJTik6IGdpdC1ndWkuc2ggR0lULVZFUlNJT04tRklMRSBHSVQtR1VJLVZBUlMKKwkkKFFVSUVUX0dFTilybSAtZiAkQCAkQCsgJiYgXAorCXNlZCAtZSAnMXN8IyEuKi9zaHwjISQoU0hFTExfUEFUSF9TUSl8JyBcCisJCS1lICdzfEBAU0hFTExfUEFUSEBAfCQoU0hFTExfUEFUSF9TUSl8JyBcCisJCS1lICcxLDMwc3xeIGFyZ3YwPSQkMHwgYXJndjA9JChHSVRHVUlfU0NSSVBUKXwnIFwKKwkJLWUgJzEsMzBzfF4gZXhlYyB3aXNoIHwgZXhlYyAnXCcnJChUQ0xUS19QQVRIX1NFRCknXCcnIHwnIFwKKwkJLWUgJ3MvQEBHSVRHVUlfVkVSU0lPTkBALyQoR0lUR1VJX1ZFUlNJT04pL2cnIFwKKwkJLWUgJ3N8QEBHSVRHVUlfUkVMQVRJVkVAQHwkKEdJVEdVSV9SRUxBVElWRSl8JyBcCisJCS1lICckKEdJVEdVSV9SRUxBVElWRSlzfEBAR0lUR1VJX0xJQkRJUkBAfCQobGliZGlyX1NFRCl8JyBcCisJCWdpdC1ndWkuc2ggPiRAKyAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKKworWEdFVFRFWFQgICA/PSB4Z2V0dGV4dAoraWZkZWYgTk9fTVNHRk1UCisJTVNHRk1UID89ICQoVENMX1BBVEgpIHBvL3BvMm1zZy5zaAorZWxzZQorCU1TR0ZNVCA/PSBtc2dmbXQKKwlpZm5lcSAoJChzaGVsbCAkKE1TR0ZNVCkgLS10Y2wgLWwgQyAtZCAuIC9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgZWNobyAkJD8pLDApCisJCU1TR0ZNVCA6PSAkKFRDTF9QQVRIKSBwby9wbzJtc2cuc2gKKwllbmRpZgorZW5kaWYKKworbXNnc2RpciAgICAgPSAkKGdnX2xpYmRpcikvbXNncworbXNnc2Rpcl9TUSAgPSAkKHN1YnN0ICcsJ1wnJywkKG1zZ3NkaXIpKQorUE9fVEVNUExBVEUgPSBwby9naXQtZ3VpLnBvdAorQUxMX1BPRklMRVMgPSAkKHdpbGRjYXJkIHBvLyoucG8pCitBTExfTVNHRklMRVMgPSAkKHN1YnN0IC5wbywubXNnLCQoQUxMX1BPRklMRVMpKQorCiskKFBPX1RFTVBMQVRFKTogJChTQ1JJUFRfU0gpICQoQUxMX0xJQkZJTEVTKQorCSQoWEdFVFRFWFQpIC1rbWMgLUxUY2wgLW8gJEAgJChTQ1JJUFRfU0gpICQoQUxMX0xJQkZJTEVTKQordXBkYXRlLXBvOjogJChQT19URU1QTEFURSkKKwkkKGZvcmVhY2ggcCwgJChBTExfUE9GSUxFUyksIGVjaG8gVXBkYXRpbmcgJHAgOyBtc2dtZXJnZSAtVSAkcCAkKFBPX1RFTVBMQVRFKSA7ICkKKyQoQUxMX01TR0ZJTEVTKTogJS5tc2cgOiAlLnBvCisJJChRVUlFVF9NU0dGTVQwKSQoTVNHRk1UKSAtLXN0YXRpc3RpY3MgLS10Y2wgLWwgJChiYXNlbmFtZSAkKG5vdGRpciAkPCkpIC1kICQoZGlyICRAKSAkPCAkKFFVSUVUX01TR0ZNVDEpCisKK2xpYi90Y2xJbmRleDogJChBTExfTElCRklMRVMpIEdJVC1HVUktVkFSUworCSQoUVVJRVRfSU5ERVgpaWYgZWNobyBcCisJICAkKGZvcmVhY2ggcCwkKFBSRUxPQURfRklMRVMpLHNvdXJjZSAkcFw7KSBcCisJICBhdXRvX21raW5kZXggbGliICQocGF0c3Vic3QgbGliLyUsJSwkKHNvcnQgJChBTExfTElCRklMRVMpKSkgXAorCXwgJChUQ0xfUEFUSCkgJChRVUlFVF8yREVWTlVMTCk7IHRoZW4gOiBvazsgXAorCWVsc2UgXAorCSBlY2hvID4mMiAiICAgICogJChUQ0xfUEFUSCkgZmFpbGVkOyB1c2luZyB1bm9wdGltaXplZCBsb2FkaW5nIjsgXAorCSBybSAtZiAkQCA7IFwKKwkgZWNobyAnIyBBdXRvZ2VuZXJhdGVkIGJ5IGdpdC1ndWkgTWFrZWZpbGUnID4kQCAmJiBcCisJIGVjaG8gPj4kQCAmJiBcCisJICQoZm9yZWFjaCBwLCQoUFJFTE9BRF9GSUxFUykgJChzb3J0ICQoQUxMX0xJQkZJTEVTKSksZWNobyAnJChzdWJzdCBsaWIvLCwkcCknID4+JEAgJiYpIFwKKwkgZWNobyA+PiRAIDsgXAorCWZpCisKK1RSQUNLX1ZBUlMgPSBcCisJJChzdWJzdCAnLCdcJycsU0hFTExfUEFUSD0nJChTSEVMTF9QQVRIX1NRKScpIFwKKwkkKHN1YnN0ICcsJ1wnJyxUQ0xfUEFUSD0nJChUQ0xfUEFUSF9TUSknKSBcCisJJChzdWJzdCAnLCdcJycsVENMVEtfUEFUSD0nJChUQ0xUS19QQVRIX1NRKScpIFwKKwkkKHN1YnN0ICcsJ1wnJyxnaXRleGVjZGlyPSckKGdpdGV4ZWNkaXJfU1EpJykgXAorCSQoc3Vic3QgJywnXCcnLGdnX2xpYmRpcj0nJChsaWJkaXJfU1EpJykgXAorCUdJVEdVSV9NQUNPU1hBUFA9JChHSVRHVUlfTUFDT1NYQVBQKSBcCisjZW5kIFRSQUNLX1ZBUlMKKworR0lULUdVSS1WQVJTOiBGT1JDRQorCUBWQVJTPSckKFRSQUNLX1ZBUlMpJzsgXAorCWlmIHRlc3QgeCIkJFZBUlMiICE9IHgiYGNhdCAkQCAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gPiYyICIgICAgKiBuZXcgbG9jYXRpb25zIG9yIFRjbC9UayBpbnRlcnByZXRlciI7IFwKKwkJZWNobyA+JEAgIiQkVkFSUyI7IFwKKwlmaQorCitpZmRlZiBHSVRHVUlfTUFDT1NYQVBQCithbGw6OiBnaXQtZ3VpIEdpdFwgR3VpLmFwcAorZW5kaWYKK2lmZGVmIEdJVEdVSV9XSU5ET1dTX1dSQVBQRVIKK2FsbDo6IGdpdC1ndWkKK2VuZGlmCithbGw6OiAkKEdJVEdVSV9NQUlOKSBsaWIvdGNsSW5kZXggJChBTExfTVNHRklMRVMpCisKK2luc3RhbGw6IGFsbAorCSQoUVVJRVQpJChJTlNUQUxMX0QwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScgJChJTlNUQUxMX0QxKQorCSQoUVVJRVQpJChJTlNUQUxMX1gwKWdpdC1ndWkgJChJTlNUQUxMX1gxKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknCisJJChRVUlFVCkkKElOU1RBTExfWDApZ2l0LWd1aS0tYXNrcGFzcyAkKElOU1RBTExfWDEpICckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScKKwkkKFFVSUVUKSQoZm9yZWFjaCBwLCQoR0lUR1VJX0JVSUxUX0lOUyksICQoSU5TVEFMTF9MMCknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSkvJHAnICQoSU5TVEFMTF9MMSknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSkvZ2l0LWd1aScgJChJTlNUQUxMX0wyKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKS8kcCcgJChJTlNUQUxMX0wzKSAmJikgdHJ1ZQoraWZkZWYgR0lUR1VJX1dJTkRPV1NfV1JBUFBFUgorCSQoUVVJRVQpJChJTlNUQUxMX1IwKWdpdC1ndWkudGNsICQoSU5TVEFMTF9SMSkgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJworZW5kaWYKKwkkKFFVSUVUKSQoSU5TVEFMTF9EMCknJChERVNURElSX1NRKSQobGliZGlyX1NRKScgJChJTlNUQUxMX0QxKQorCSQoUVVJRVQpJChJTlNUQUxMX1IwKWxpYi90Y2xJbmRleCAkKElOU1RBTExfUjEpICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJworaWZkZWYgR0lUR1VJX01BQ09TWEFQUAorCSQoUVVJRVQpJChJTlNUQUxMX0EwKSdHaXQgR3VpLmFwcCcgJChJTlNUQUxMX0ExKSAnJChERVNURElSX1NRKSQobGliZGlyX1NRKScKKwkkKFFVSUVUKSQoSU5TVEFMTF9YMClnaXQtZ3VpLnRjbCAkKElOU1RBTExfWDEpICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJworZW5kaWYKKwkkKFFVSUVUKSQoZm9yZWFjaCBwLCQoQUxMX0xJQkZJTEVTKSAkKE5PTlRDTF9MSUJGSUxFUyksICQoSU5TVEFMTF9SMCkkcCAkKElOU1RBTExfUjEpICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJyAmJikgdHJ1ZQorCSQoUVVJRVQpJChJTlNUQUxMX0QwKSckKERFU1RESVJfU1EpJChtc2dzZGlyX1NRKScgJChJTlNUQUxMX0QxKQorCSQoUVVJRVQpJChmb3JlYWNoIHAsJChBTExfTVNHRklMRVMpLCAkKElOU1RBTExfUjApJHAgJChJTlNUQUxMX1IxKSAnJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknICYmKSB0cnVlCisKK3VuaW5zdGFsbDoKKwkkKFFVSUVUKSQoQ0xFQU5fRFNUKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknCisJJChRVUlFVCkkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknL2dpdC1ndWkgJChSRU1PVkVfRjEpCisJJChRVUlFVCkkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknL2dpdC1ndWktLWFza3Bhc3MgJChSRU1PVkVfRjEpCisJJChRVUlFVCkkKGZvcmVhY2ggcCwkKEdJVEdVSV9CVUlMVF9JTlMpLCAkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknLyRwICQoUkVNT1ZFX0YxKSAmJikgdHJ1ZQoraWZkZWYgR0lUR1VJX1dJTkRPV1NfV1JBUFBFUgorCSQoUVVJRVQpJChSRU1PVkVfRjApJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJy9naXQtZ3VpLnRjbCAkKFJFTU9WRV9GMSkKK2VuZGlmCisJJChRVUlFVCkkKENMRUFOX0RTVCkgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknCisJJChRVUlFVCkkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQobGliZGlyX1NRKScvdGNsSW5kZXggJChSRU1PVkVfRjEpCitpZmRlZiBHSVRHVUlfTUFDT1NYQVBQCisJJChRVUlFVCkkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQobGliZGlyX1NRKS9HaXQgR3VpLmFwcCcgJChSRU1PVkVfRjEpCisJJChRVUlFVCkkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQobGliZGlyX1NRKScvZ2l0LWd1aS50Y2wgJChSRU1PVkVfRjEpCitlbmRpZgorCSQoUVVJRVQpJChmb3JlYWNoIHAsJChBTExfTElCRklMRVMpICQoTk9OVENMX0xJQkZJTEVTKSwgJChSRU1PVkVfRjApJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknLyQobm90ZGlyICRwKSAkKFJFTU9WRV9GMSkgJiYpIHRydWUKKwkkKFFVSUVUKSQoQ0xFQU5fRFNUKSAnJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknCisJJChRVUlFVCkkKGZvcmVhY2ggcCwkKEFMTF9NU0dGSUxFUyksICQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChtc2dzZGlyX1NRKScvJChub3RkaXIgJHApICQoUkVNT1ZFX0YxKSAmJikgdHJ1ZQorCSQoUVVJRVQpJChSRU1PVkVfRDApJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJyAkKFJFTU9WRV9EMSkKKwkkKFFVSUVUKSQoUkVNT1ZFX0QwKSckKERFU1RESVJfU1EpJChtc2dzZGlyX1NRKScgJChSRU1PVkVfRDEpCisJJChRVUlFVCkkKFJFTU9WRV9EMCknJChERVNURElSX1NRKSQobGliZGlyX1NRKScgJChSRU1PVkVfRDEpCisJJChRVUlFVCkkKFJFTU9WRV9EMClgZGlybmFtZSAnJChERVNURElSX1NRKSQobGliZGlyX1NRKSdgICQoUkVNT1ZFX0QxKQorCitkaXN0LXZlcnNpb246CisJQG1rZGlyIC1wICQoVEFSRElSKQorCUBlY2hvICQoR0lUR1VJX1ZFUlNJT04pID4gJChUQVJESVIpL3ZlcnNpb24KKworY2xlYW46OgorCSQoUk1fUkYpICQoR0lUR1VJX01BSU4pIGxpYi90Y2xJbmRleCBwby8qLm1zZworCSQoUk1fUkYpIEdJVC1WRVJTSU9OLUZJTEUgR0lULUdVSS1WQVJTCitpZmRlZiBHSVRHVUlfTUFDT1NYQVBQCisJJChSTV9SRikgJ0dpdCBHdWkuYXBwJyogZ2l0LWd1aQorZW5kaWYKK2lmZGVmIEdJVEdVSV9XSU5ET1dTX1dSQVBQRVIKKwkkKFJNX1JGKSBnaXQtZ3VpCitlbmRpZgorCisuUEhPTlk6IGFsbCBpbnN0YWxsIHVuaW5zdGFsbCBkaXN0LXZlcnNpb24gY2xlYW4KKy5QSE9OWTogRk9SQ0UKZGlmZiAtLWdpdCBhL2dpdC1ndWkvUkVBRE1FLm1kIGIvZ2l0LWd1aS9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNlMjEyMgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTc0IEBACisjIEdpdCBHVUkgLSBBIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0CisKK0dpdCBHVUkgYWxsb3dzIHlvdSB0byB1c2UgdGhlIFtHaXQgc291cmNlIGNvbnRyb2wgbWFuYWdlbWVudAordG9vbHNdKGh0dHBzOi8vZ2l0LXNjbS5jb20vKSB2aWEgYSBHVUkuIFRoaXMgaW5jbHVkZXMgc3RhZ2luZywgY29tbWl0dGluZywKK2FkZGluZywgcHVzaGluZywgZXRjLiBJdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgYmxhbWUgdmlld2VyLCBhIHRyZWUgYnJvd3NlciwKK2FuZCBhIGNpdG9vbCAobWFrZSBleGFjdGx5IG9uZSBjb21taXQgYmVmb3JlIGV4aXRpbmcgYW5kIHJldHVybmluZyB0byBzaGVsbCkuCitNb3JlIGRldGFpbHMgYWJvdXQgR2l0IEdVSSBjYW4gYmUgZm91bmQgaW4gaXRzIG1hbnVhbCBwYWdlIGJ5IGVpdGhlciBydW5uaW5nCitgbWFuIGdpdC1ndWlgLCBvciBieSB2aXNpdGluZyB0aGUgW29ubGluZSBtYW51YWwKK3BhZ2VdKGh0dHBzOi8vZ2l0LXNjbS5jb20vZG9jcy9naXQtZ3VpKS4KKworR2l0IEdVSSB3YXMgaW5pdGlhbGx5IHdyaXR0ZW4gYnkgU2hhd24gTy4gUGVhcmNlLCBhbmQgaXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGUKK3N0YW5kYXJkIEdpdCBpbnN0YWxsYXRpb24uCisKKyMgQnVpbGRpbmcgYW5kIGluc3RhbGxpbmcKKworWW91IG5lZWQgdG8gaGF2ZSB0aGUgZm9sbG93aW5nIGRlcGVuZGVuY2llcyBpbnN0YWxsZWQgYmVmb3JlIHlvdSBiZWdpbjoKKworLSBHaXQKKy0gVGNsCistIFRrCistIHdpc2gKKy0gR2l0ayAobmVlZGVkIGZvciBicm93c2luZyBoaXN0b3J5KQorLSBtc2dmbXQKKworTW9zdCBvZiBHaXQgR1VJIGlzIHdyaXR0ZW4gaW4gVGNsLCBzbyB0aGVyZSBpcyBubyBjb21waWxhdGlvbiBpbnZvbHZlZC4gU3RpbGwsCitzb21lIHRoaW5ncyBkbyBuZWVkIHRvIGJlIGRvbmUgKG1vc3RseSBzb21lIHN1YnN0aXR1dGlvbnMpLCBzbyB5b3UgZG8gbmVlZCB0bworImJ1aWxkIiBpdC4KKworWW91IGNhbiBidWlsZCBHaXQgR1VJIHVzaW5nOgorCitgYGAKK21ha2UKK2BgYAorCitBbmQgdGhlbiBpbnN0YWxsIGl0IHVzaW5nOgorCitgYGAKK21ha2UgaW5zdGFsbAorYGBgCisKK1lvdSBwcm9iYWJseSBuZWVkIHRvIGhhdmUgcm9vdC9hZG1pbiBwZXJtaXNzaW9ucyB0byBpbnN0YWxsLgorCisjIENvbnRyaWJ1dGluZworCitUaGUgcHJvamVjdCBpcyBjdXJyZW50bHkgbWFpbnRhaW5lZCBieSBQcmF0eXVzaCBZYWRhdiBvdmVyIGF0CitodHRwczovL2dpdGh1Yi5jb20vcHJhdGkwMTAwL2dpdC1ndWkuIEV2ZW4gdGhvdWdoIHRoZSBwcm9qZWN0IGlzIGhvc3RlZCBhdAorR2l0SHViLCB0aGUgZGV2ZWxvcG1lbnQgZG9lcyBub3QgaGFwcGVuIG92ZXIgR2l0SHViIElzc3VlcyBhbmQgUHVsbCBSZXF1ZXN0cy4KK0luc3RlYWQsIGFuIGVtYWlsIGJhc2VkIHdvcmtmbG93IGlzIHVzZWQuIFRoZSBHaXQgbWFpbGluZyBsaXN0CitbZ2l0QHZnZXIua2VybmVsLm9yZ10obWFpbHRvOmdpdEB2Z2VyLmtlcm5lbC5vcmcpIGlzIHdoZXJlIHRoZSBwYXRjaGVzIGFyZQorZGlzY3Vzc2VkIGFuZCByZXZpZXdlZC4KKworTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgR2l0IG1haWxpbmcgbGlzdCBhbmQgaW5zdHJ1Y3Rpb25zIHRvIHN1YnNjcmliZSBjYW4KK2JlIGZvdW5kIFtoZXJlXShodHRwczovL2dpdC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0dpdENvbW11bml0eSkuCisKKyMjIFNlbmRpbmcgeW91ciBjaGFuZ2VzCisKK1NpbmNlIHRoZSBkZXZlbG9wbWVudCBoYXBwZW5zIG92ZXIgZW1haWwsIHlvdSBuZWVkIHRvIHNlbmQgaW4geW91ciBjb21taXRzIGluCit0ZXh0IGZvcm1hdC4gQ29tbWl0cyBjYW4gYmUgY29udmVydGVkIHRvIGVtYWlscyB2aWEgdGhlIHR3byB0b29scyBwcm92aWRlZCBieQorR2l0OiBgZ2l0LXNlbmQtZW1haWxgIGFuZCBgZ2l0LWZvcm1hdC1wYXRjaGAuCisKK1lvdSBjYW4gdXNlIGBnaXQtZm9ybWF0LXBhdGNoYCB0byBnZW5lcmF0ZSBwYXRjaGVzIGluIG1ib3ggZm9ybWF0IGZyb20geW91cgorY29tbWl0cyB0aGF0IGNhbiB0aGVuIGJlIHNlbnQgdmlhIGVtYWlsLiBMZXQncyBzYXkgeW91IGFyZSB3b3JraW5nIG9uIGEgYnJhbmNoCitjYWxsZWQgJ2ZvbycgdGhhdCB3YXMgY3JlYXRlZCBvbiB0b3Agb2YgJ21hc3RlcicuIFlvdSBjYW4gcnVuOgorCitgYGAKK2dpdCBmb3JtYXQtcGF0Y2ggLW8gb3V0cHV0X2RpciBtYXN0ZXIuLmZvbworYGBgCisKK3RvIGNvbnZlcnQgYWxsIHRoZSBleHRyYSBjb21taXRzIGluICdmb28nIGludG8gYSBzZXQgb2YgcGF0Y2hlcyBzYXZlZCBpbiB0aGUKK2ZvbGRlciBgb3V0cHV0X2RpcmAuCisKK0lmIHlvdSBhcmUgc2VuZGluZyBtdWx0aXBsZSBwYXRjaGVzLCBpdCBpcyByZWNvbW1lbmRlZCB0byBpbmNsdWRlIGEgY292ZXIKK2xldHRlci4gQSBjb3ZlciBsZXR0ZXIgaXMgYW4gZW1haWwgZXhwbGFpbmluZyBpbiBicmllZiB3aGF0IHRoZSBzZXJpZXMgaXMKK3N1cHBvc2VkIHRvIGRvLiBBIGNvdmVyIGxldHRlciB0ZW1wbGF0ZSBjYW4gYmUgZ2VuZXJhdGVkIGJ5IHBhc3NpbmcKK2AtLWNvdmVyLWxldHRlcmAgdG8gYGdpdC1mb3JtYXQtcGF0Y2hgLgorCitBZnRlciB5b3Ugc2VuZCB5b3VyIHBhdGNoZXMsIHlvdSBtaWdodCBnZXQgYSByZXZpZXcgc3VnZ2VzdGluZyBzb21lIGNoYW5nZXMuCitNYWtlIHRob3NlIGNoYW5nZXMsIGFuZCByZS1zZW5kIHlvdXIgcGF0Y2goZXMpIGluIHJlcGx5IHRvIHRoZSBmaXJzdCBwYXRjaCBvZgoreW91ciBpbml0aWFsIHZlcnNpb24uIEFsc28gcGxlYXNlIG1lbnRpb24gdGhlIHZlcnNpb24gb2YgdGhlIHBhdGNoLiBUaGlzIGNhbiBiZQorZG9uZSBieSBwYXNzaW5nIGAtdiBYYCB0byBgZ2l0LWZvcm1hdC1wYXRjaGAsIHdoZXJlICdYJyBpcyB0aGUgdmVyc2lvbiBudW1iZXIKK29mIHRoZSBwYXRjaChlcykuCisKKyMjIyBVc2luZyBnaXQtc2VuZC1lbWFpbAorCitZb3UgY2FuIHVzZSBgZ2l0LXNlbmQtZW1haWxgIHRvIHNlbmQgcGF0Y2hlcyBnZW5lcmF0ZWQgdmlhIGBnaXQtZm9ybWF0LXBhdGNoYC4KK1doaWxlIHlvdSBjYW4gZGlyZWN0bHkgc2VuZCBwYXRjaGVzIHZpYSBgZ2l0LXNlbmQtZW1haWxgLCBpdCBpcyByZWNvbW1lbmRlZAordGhhdCB5b3UgZmlyc3QgdXNlIGBnaXQtZm9ybWF0LXBhdGNoYCB0byBnZW5lcmF0ZSB0aGUgZW1haWxzLCBhdWRpdCB0aGVtLCBhbmQKK3RoZW4gc2VuZCB0aGVtIHZpYSBgZ2l0LXNlbmQtZW1haWxgLgorCitBIHByZXR0eSBnb29kIGd1aWRlIHRvIGNvbmZpZ3VyaW5nIGFuZCB1c2luZyBgZ2l0LXNlbmQtZW1haWxgIGNhbiBiZSBmb3VuZAorW2hlcmVdKGh0dHBzOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL1B1bHNlQXVkaW8vSG93VG9Vc2VHaXRTZW5kRW1haWwvKQorCisjIyMgVXNpbmcgeW91ciBlbWFpbCBjbGllbnQKKworSWYgeW91ciBlbWFpbCBjbGllbnQgc3VwcG9ydHMgc2VuZGluZyBtYm94IGZvcm1hdCBlbWFpbHMsIHlvdSBjYW4gdXNlCitgZ2l0LWZvcm1hdC1wYXRjaGAgdG8gZ2V0IGFuIG1ib3ggZmlsZSBmb3IgZWFjaCBjb21taXQsIGFuZCB0aGVuIHNlbmQgdGhlbS4gSWYKK3RoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGF0Y2ggaW4gdGhlIHNlcmllcywgdGhlbiBhbGwgcGF0Y2hlcyBhZnRlciB0aGUgZmlyc3QKK3BhdGNoIChvciB0aGUgY292ZXIgbGV0dGVyKSBuZWVkIHRvIGJlIHNlbnQgYXMgcmVwbGllcyB0byB0aGUgZmlyc3QuCitgZ2l0LXNlbmQtZW1haWxgIGRvZXMgdGhpcyBieSBkZWZhdWx0LgorCisjIyMgVXNpbmcgR2l0R2l0R2FkZ2V0CisKK1NpbmNlIHNvbWUgcGVvcGxlIHByZWZlciBhIEdpdEh1YiBwdWxsIHJlcXVlc3QgYmFzZWQgd29ya2Zsb3csIHRoZXkgY2FuIHVzZQorW0dpdEdpdEdhZGdldF0oaHR0cHM6Ly9naXRnaXRnYWRnZXQuZ2l0aHViLmlvLykgdG8gc2VuZCBpbiBwYXRjaGVzLiBUaGUgdG9vbAord2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBmb3Igc2VuZGluZyBwYXRjaGVzIHRvIHRoZSBHaXQgcHJvamVjdCwgYnV0IGl0IG5vdyBhbHNvCitzdXBwb3J0cyBzZW5kaW5nIHBhdGNoZXMgZm9yIGdpdC1ndWkuCisKK0luc3RydWN0aW9ucyBmb3IgdXNpbmcgR2l0R2l0R2FkZ2V0IHRvIHNlbmQgZ2l0LWd1aSBwYXRjaGVzLCBjb3VydGVzeSBvZgorSm9oYW5uZXMgU2NoaW5kZWxpbjoKKworSWYgeW91IGRvbid0IGFscmVhZHkgaGF2ZSBhIGZvcmsgb2YgdGhlIFtnaXQvZ2l0XShodHRwczovL2dpdGh1Yi5jb20vZ2l0L2dpdCkKK3JlcG8sIHlvdSBuZWVkIHRvIG1ha2Ugb25lLiBUaGVuIGNsb25lIHlvdXIgZm9yazoKKworYGBgCitnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tLzx5b3VyLXVzZXJuYW1lPi9naXQKK2BgYAorCitUaGVuIGFkZCBHaXRHaXRHYWRnZXQgYXMgYSByZW1vdGU6CisKK2BgYAorZ2l0IHJlbW90ZSBhZGQgZ2l0Z2l0Z2FkZ2V0IGh0dHBzOi8vZ2l0aHViLmNvbS9naXRnaXRnYWRnZXQvZ2l0CitgYGAKKworVGhlbiBmZXRjaCB0aGUgZ2l0LWd1aSBicmFuY2g6CisKK2BgYAorZ2l0IGZldGNoIGdpdGdpdGdhZGdldCBnaXQtZ3VpL21hc3RlcgorYGBgCisKK1RoZW4gY3JlYXRlIGEgbmV3IGJyYW5jaCBiYXNlZCBvbiBnaXQtZ3VpL21hc3RlcjoKKworYGBgCitnaXQgY2hlY2tvdXQgLWIgPHlvdXItYnJhbmNoLW5hbWU+IGdpdC1ndWkvbWFzdGVyCitgYGAKKworTWFrZSB3aGF0ZXZlciBjb21taXRzIHlvdSBuZWVkIHRvLCBwdXNoIHRoZW0gdG8geW91ciBmb3JrLCBhbmQgdGhlbiBoZWFkIG92ZXIKK3RvIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRnaXRnYWRnZXQvZ2l0L3B1bGxzIGFuZCBvcGVuIGEgUHVsbCBSZXF1ZXN0IHRhcmdldGluZworZ2l0LWd1aS9tYXN0ZXIuCisKK0dpdEdpdEdhZGdldCB3aWxsIHdlbGNvbWUgeW91IHdpdGggYSAoaG9wZWZ1bGx5KSBoZWxwZnVsIG1lc3NhZ2UuCisKKyMjIFNpZ25pbmcgb2ZmCisKK1lvdSBuZWVkIHRvIHNpZ24gb2ZmIHlvdXIgY29tbWl0cyBiZWZvcmUgc2VuZGluZyB0aGVtIHRvIHRoZSBsaXN0LiBZb3UgY2FuIGRvCit0aGF0IGJ5IHBhc3NpbmcgdGhlIGAtc2Agb3B0aW9uIHRvIGBnaXQtY29tbWl0YC4gWW91IGNhbiBhbHNvIHVzZSB0aGUgIlNpZ24KK09mZiIgb3B0aW9uIGluIEdpdCBHVUkuCisKK0Egc2lnbi1vZmYgaXMgYSBzaW1wbGUgJ1NpZ25lZC1vZmYtYnk6IEEgVSBUaG9yIFw8YXV0aG9yQGV4YW1wbGUuY29tXD4nIGxpbmUgYXQKK3RoZSBlbmQgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLCBhZnRlciB5b3VyIGV4cGxhbmF0aW9uIG9mIHRoZSBjb21taXQuCisKK0Egc2lnbi1vZmYgbWVhbnMgdGhhdCB5b3UgYXJlIGxlZ2FsbHkgYWxsb3dlZCB0byBzZW5kIHRoZSBjb2RlLCBhbmQgaXQgc2VydmVzCithcyBhIGNlcnRpZmljYXRlIG9mIG9yaWdpbi4gTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgYXQKK1tkZXZlbG9wZXJjZXJ0aWZpY2F0ZS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyY2VydGlmaWNhdGUub3JnLykuCisKKyMjIFJlc3BvbmRpbmcgdG8gcmV2aWV3IGNvbW1lbnRzCisKK0l0IGlzIHF1aXRlIGxpa2VseSB5b3VyIHBhdGNoZXMgd2lsbCBnZXQgcmV2aWV3IGNvbW1lbnRzLiBUaG9zZSBjb21tZW50cyBhcmUKK3NlbnQgb24gdGhlIEdpdCBtYWlsaW5nIGxpc3QgYXMgcmVwbGllcyB0byB5b3VyIHBhdGNoLCBhbmQgeW91IHdpbGwgdXN1YWxseSBiZQorQ2MnZWQgaW4gdGhvc2UgcmVwbGllcy4KKworWW91IGFyZSBleHBlY3RlZCB0byByZXNwb25kIGJ5IGVpdGhlciBleHBsYWluaW5nIHlvdXIgY29kZSBmdXJ0aGVyIHRvIGNvbnZpbmNlCit0aGUgcmV2aWV3ZXIgd2hhdCB5b3UgYXJlIGRvaW5nIGlzIGNvcnJlY3QsIG9yIGFja25vd2xlZGdlIHRoZSBjb21tZW50cyBhbmQKK3JlLXNlbmQgdGhlIHBhdGNoZXMgd2l0aCB0aG9zZSBjb21tZW50cyBhZGRyZXNzZWQuCisKK1NvbWUgdGlwcyBmb3IgdGhvc2Ugbm90IGZhbWlsaWFyIHdpdGggY29tbXVuaWNhdGlvbiBvbiBhIG1haWxpbmcgbGlzdDoKKworLSBVc2Ugb25seSBwbGFpbiB0ZXh0IGVtYWlscy4gTm8gSFRNTCBhdCBhbGwuCistIFdyYXAgbGluZXMgYXQgYXJvdW5kIDc1IGNoYXJhY3RlcnMuCistIERvIG5vdCBzZW5kIGF0dGFjaG1lbnRzLiBJZiB5b3UgZG8gbmVlZCB0byBzZW5kIHNvbWUgZmlsZXMsIGNvbnNpZGVyIHVzaW5nIGEKKyAgaG9zdGluZyBzZXJ2aWNlLCBhbmQgcGFzdGUgdGhlIGxpbmsgaW4geW91ciBlbWFpbC4KKy0gRG8gbm90IFt0b3AgcG9zdF0oaHR0cDovL3d3dy5pZGFsbGVuLmNvbS90b3Bwb3N0aW5nLmh0bWwpLgorLSBBbHdheXMgInJlcGx5IGFsbCIuIEtlZXAgYWxsIGNvcnJlc3BvbmRlbnRzIGFuZCB0aGUgbGlzdCBpbiBDYy4gSWYgeW91IHJlcGx5CisgIGRpcmVjdGx5IHRvIGEgcmV2aWV3ZXIsIGFuZCBub3QgQ2MgdGhlIGxpc3QsIG90aGVyIHBlb3BsZSB3b3VsZCBub3QgYmUgYWJsZQorICB0byBjaGltZSBpbi4KZGlmZiAtLWdpdCBhL2dpdC1ndWktLWFza3Bhc3MgYi9naXQtZ3VpL2dpdC1ndWktLWFza3Bhc3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdpdC1ndWktLWFza3Bhc3MKcmVuYW1lIHRvIGdpdC1ndWkvZ2l0LWd1aS0tYXNrcGFzcwpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS5zaCBiL2dpdC1ndWkvZ2l0LWd1aS5zaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ2l0LWd1aS5zaApyZW5hbWUgdG8gZ2l0LWd1aS9naXQtZ3VpLnNoCmRpZmYgLS1naXQgYS9saWIvYWJvdXQudGNsIGIvZ2l0LWd1aS9saWIvYWJvdXQudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvYWJvdXQudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9hYm91dC50Y2wKZGlmZiAtLWdpdCBhL2xpYi9ibGFtZS50Y2wgYi9naXQtZ3VpL2xpYi9ibGFtZS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9ibGFtZS50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2JsYW1lLnRjbApkaWZmIC0tZ2l0IGEvbGliL2JyYW5jaC50Y2wgYi9naXQtZ3VpL2xpYi9icmFuY2gudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvYnJhbmNoLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvYnJhbmNoLnRjbApkaWZmIC0tZ2l0IGEvbGliL2JyYW5jaF9jaGVja291dC50Y2wgYi9naXQtZ3VpL2xpYi9icmFuY2hfY2hlY2tvdXQudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvYnJhbmNoX2NoZWNrb3V0LnRjbApkaWZmIC0tZ2l0IGEvbGliL2JyYW5jaF9jcmVhdGUudGNsIGIvZ2l0LWd1aS9saWIvYnJhbmNoX2NyZWF0ZS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9icmFuY2hfY3JlYXRlLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvYnJhbmNoX2NyZWF0ZS50Y2wKZGlmZiAtLWdpdCBhL2xpYi9icmFuY2hfZGVsZXRlLnRjbCBiL2dpdC1ndWkvbGliL2JyYW5jaF9kZWxldGUudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvYnJhbmNoX2RlbGV0ZS50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2JyYW5jaF9kZWxldGUudGNsCmRpZmYgLS1naXQgYS9saWIvYnJhbmNoX3JlbmFtZS50Y2wgYi9naXQtZ3VpL2xpYi9icmFuY2hfcmVuYW1lLnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL2JyYW5jaF9yZW5hbWUudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9icmFuY2hfcmVuYW1lLnRjbApkaWZmIC0tZ2l0IGEvbGliL2Jyb3dzZXIudGNsIGIvZ2l0LWd1aS9saWIvYnJvd3Nlci50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9icm93c2VyLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvYnJvd3Nlci50Y2wKZGlmZiAtLWdpdCBhL2xpYi9jaGVja291dF9vcC50Y2wgYi9naXQtZ3VpL2xpYi9jaGVja291dF9vcC50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9jaGVja291dF9vcC50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2NoZWNrb3V0X29wLnRjbApkaWZmIC0tZ2l0IGEvbGliL2Nob29zZV9mb250LnRjbCBiL2dpdC1ndWkvbGliL2Nob29zZV9mb250LnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL2Nob29zZV9mb250LnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvY2hvb3NlX2ZvbnQudGNsCmRpZmYgLS1naXQgYS9saWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsIGIvZ2l0LWd1aS9saWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2wKZGlmZiAtLWdpdCBhL2xpYi9jaG9vc2VfcmV2LnRjbCBiL2dpdC1ndWkvbGliL2Nob29zZV9yZXYudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvY2hvb3NlX3Jldi50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2Nob29zZV9yZXYudGNsCmRpZmYgLS1naXQgYS9saWIvY2hvcmQudGNsIGIvZ2l0LWd1aS9saWIvY2hvcmQudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvY2hvcmQudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9jaG9yZC50Y2wKZGlmZiAtLWdpdCBhL2xpYi9jbGFzcy50Y2wgYi9naXQtZ3VpL2xpYi9jbGFzcy50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9jbGFzcy50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2NsYXNzLnRjbApkaWZmIC0tZ2l0IGEvbGliL2NvbW1pdC50Y2wgYi9naXQtZ3VpL2xpYi9jb21taXQudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvY29tbWl0LnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvY29tbWl0LnRjbApkaWZmIC0tZ2l0IGEvbGliL2NvbnNvbGUudGNsIGIvZ2l0LWd1aS9saWIvY29uc29sZS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9jb25zb2xlLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvY29uc29sZS50Y2wKZGlmZiAtLWdpdCBhL2xpYi9kYXRhYmFzZS50Y2wgYi9naXQtZ3VpL2xpYi9kYXRhYmFzZS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9kYXRhYmFzZS50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2RhdGFiYXNlLnRjbApkaWZmIC0tZ2l0IGEvbGliL2RhdGUudGNsIGIvZ2l0LWd1aS9saWIvZGF0ZS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9kYXRlLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvZGF0ZS50Y2wKZGlmZiAtLWdpdCBhL2xpYi9kaWZmLnRjbCBiL2dpdC1ndWkvbGliL2RpZmYudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvZGlmZi50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2RpZmYudGNsCmRpZmYgLS1naXQgYS9saWIvZW5jb2RpbmcudGNsIGIvZ2l0LWd1aS9saWIvZW5jb2RpbmcudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvZW5jb2RpbmcudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9lbmNvZGluZy50Y2wKZGlmZiAtLWdpdCBhL2xpYi9lcnJvci50Y2wgYi9naXQtZ3VpL2xpYi9lcnJvci50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9lcnJvci50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL2Vycm9yLnRjbApkaWZmIC0tZ2l0IGEvbGliL2dpdC1ndWkuaWNvIGIvZ2l0LWd1aS9saWIvZ2l0LWd1aS5pY28Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9naXQtZ3VpLmljbwpyZW5hbWUgdG8gZ2l0LWd1aS9saWIvZ2l0LWd1aS5pY28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL2luZGV4LnRjbCBiL2dpdC1ndWkvbGliL2luZGV4LnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL2luZGV4LnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvaW5kZXgudGNsCmRpZmYgLS1naXQgYS9saWIvbGluZS50Y2wgYi9naXQtZ3VpL2xpYi9saW5lLnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL2xpbmUudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9saW5lLnRjbApkaWZmIC0tZ2l0IGEvbGliL2xvZ28udGNsIGIvZ2l0LWd1aS9saWIvbG9nby50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9sb2dvLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvbG9nby50Y2wKZGlmZiAtLWdpdCBhL2xpYi9tZXJnZS50Y2wgYi9naXQtZ3VpL2xpYi9tZXJnZS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9tZXJnZS50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL21lcmdlLnRjbApkaWZmIC0tZ2l0IGEvbGliL21lcmdldG9vbC50Y2wgYi9naXQtZ3VpL2xpYi9tZXJnZXRvb2wudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvbWVyZ2V0b29sLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvbWVyZ2V0b29sLnRjbApkaWZmIC0tZ2l0IGEvbGliL29wdGlvbi50Y2wgYi9naXQtZ3VpL2xpYi9vcHRpb24udGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvb3B0aW9uLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvb3B0aW9uLnRjbApkaWZmIC0tZ2l0IGEvbGliL3JlbW90ZS50Y2wgYi9naXQtZ3VpL2xpYi9yZW1vdGUudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvcmVtb3RlLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvcmVtb3RlLnRjbApkaWZmIC0tZ2l0IGEvbGliL3JlbW90ZV9hZGQudGNsIGIvZ2l0LWd1aS9saWIvcmVtb3RlX2FkZC50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9yZW1vdGVfYWRkLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvcmVtb3RlX2FkZC50Y2wKZGlmZiAtLWdpdCBhL2xpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2wgYi9naXQtZ3VpL2xpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbApkaWZmIC0tZ2l0IGEvbGliL3NlYXJjaC50Y2wgYi9naXQtZ3VpL2xpYi9zZWFyY2gudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvc2VhcmNoLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvc2VhcmNoLnRjbApkaWZmIC0tZ2l0IGEvbGliL3Nob3J0Y3V0LnRjbCBiL2dpdC1ndWkvbGliL3Nob3J0Y3V0LnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL3Nob3J0Y3V0LnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvc2hvcnRjdXQudGNsCmRpZmYgLS1naXQgYS9saWIvc3BlbGxjaGVjay50Y2wgYi9naXQtZ3VpL2xpYi9zcGVsbGNoZWNrLnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL3NwZWxsY2hlY2sudGNsCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi9zcGVsbGNoZWNrLnRjbApkaWZmIC0tZ2l0IGEvbGliL3NzaGtleS50Y2wgYi9naXQtZ3VpL2xpYi9zc2hrZXkudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvc3Noa2V5LnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvc3Noa2V5LnRjbApkaWZmIC0tZ2l0IGEvbGliL3N0YXR1c19iYXIudGNsIGIvZ2l0LWd1aS9saWIvc3RhdHVzX2Jhci50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi9zdGF0dXNfYmFyLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvc3RhdHVzX2Jhci50Y2wKZGlmZiAtLWdpdCBhL2xpYi90aGVtZWQudGNsIGIvZ2l0LWd1aS9saWIvdGhlbWVkLnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL3RoZW1lZC50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL3RoZW1lZC50Y2wKZGlmZiAtLWdpdCBhL2xpYi90b29scy50Y2wgYi9naXQtZ3VpL2xpYi90b29scy50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYi90b29scy50Y2wKcmVuYW1lIHRvIGdpdC1ndWkvbGliL3Rvb2xzLnRjbApkaWZmIC0tZ2l0IGEvbGliL3Rvb2xzX2RsZy50Y2wgYi9naXQtZ3VpL2xpYi90b29sc19kbGcudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvdG9vbHNfZGxnLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvdG9vbHNfZGxnLnRjbApkaWZmIC0tZ2l0IGEvbGliL3RyYW5zcG9ydC50Y2wgYi9naXQtZ3VpL2xpYi90cmFuc3BvcnQudGNsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWIvdHJhbnNwb3J0LnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvdHJhbnNwb3J0LnRjbApkaWZmIC0tZ2l0IGEvbGliL3dpbjMyLnRjbCBiL2dpdC1ndWkvbGliL3dpbjMyLnRjbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL3dpbjMyLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9saWIvd2luMzIudGNsCmRpZmYgLS1naXQgYS9saWIvd2luMzJfc2hvcnRjdXQuanMgYi9naXQtZ3VpL2xpYi93aW4zMl9zaG9ydGN1dC5qcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL3dpbjMyX3Nob3J0Y3V0LmpzCnJlbmFtZSB0byBnaXQtZ3VpL2xpYi93aW4zMl9zaG9ydGN1dC5qcwpkaWZmIC0tZ2l0IGEvbWFjb3N4L0FwcE1haW4udGNsIGIvZ2l0LWd1aS9tYWNvc3gvQXBwTWFpbi50Y2wKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1hY29zeC9BcHBNYWluLnRjbApyZW5hbWUgdG8gZ2l0LWd1aS9tYWNvc3gvQXBwTWFpbi50Y2wKZGlmZiAtLWdpdCBhL21hY29zeC9JbmZvLnBsaXN0IGIvZ2l0LWd1aS9tYWNvc3gvSW5mby5wbGlzdApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWFjb3N4L0luZm8ucGxpc3QKcmVuYW1lIHRvIGdpdC1ndWkvbWFjb3N4L0luZm8ucGxpc3QKZGlmZiAtLWdpdCBhL21hY29zeC9naXQtZ3VpLmljbnMgYi9naXQtZ3VpL21hY29zeC9naXQtZ3VpLmljbnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1hY29zeC9naXQtZ3VpLmljbnMKcmVuYW1lIHRvIGdpdC1ndWkvbWFjb3N4L2dpdC1ndWkuaWNucwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvLy5naXRpZ25vcmUgYi9naXQtZ3VpL3BvLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5Y2Y0NAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKKyoubXNnCisqfgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9SRUFETUUgYi9naXQtZ3VpL3BvL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTE0YmMyCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9wby9SRUFETUUKQEAgLTAsMCArMSwyNTEgQEAKK0xvY2FsaXppbmcgZ2l0LWd1aSBmb3IgeW91ciBsYW5ndWFnZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2hvcnQgbm90ZSBpcyB0byBoZWxwIHlvdSwgd2hvIHJlYWRzIGFuZCB3cml0ZXMgRW5nbGlzaCBhbmQgeW91cgorb3duIGxhbmd1YWdlLCBoZWxwIHVzIGdldHRpbmcgZ2l0LWd1aSBsb2NhbGl6ZWQgZm9yIG1vcmUgbGFuZ3VhZ2VzLiAgSXQKK2RvZXMgbm90IHRyeSB0byBiZSBhIGNvbXByZWhlbnNpdmUgbWFudWFsIG9mIEdOVSBnZXR0ZXh0LCB3aGljaCBpcyB0aGUKK2kxOG4gZnJhbWV3b3JrIHdlIHVzZSwgYnV0IHRyaWVzIHRvIGhlbHAgeW91IGdldCBzdGFydGVkIGJ5IGNvdmVyaW5nIHRoZQorYmFzaWNzIGFuZCBob3cgaXQgaXMgdXNlZCBpbiB0aGlzIHByb2plY3QuCisKKzEuIEdldHRpbmcgc3RhcnRlZC4KKworWW91IHdvdWxkIGZpcnN0IG5lZWQgdG8gaGF2ZSBhIHdvcmtpbmcgImdpdCIuICBZb3VyIGRpc3RyaWJ1dGlvbiBtYXkKK2hhdmUgaXQgYXMgImdpdC1jb3JlIiBwYWNrYWdlIChkbyBub3QgZ2V0ICJHTlUgSW50ZXJhY3RpdmUgVG9vbHMiIC0tCit0aGF0IGlzIGEgZGlmZmVyZW50ICJnaXQiKS4gIFlvdSB3b3VsZCBhbHNvIG5lZWQgR05VIGdldHRleHQgdG9vbGNoYWluCit0byB0ZXN0IHRoZSByZXN1bHRpbmcgdHJhbnNsYXRpb24gb3V0LiAgQWx0aG91Z2ggeW91IGNhbiB3b3JrIG9uIG1lc3NhZ2UKK3RyYW5zbGF0aW9uIGZpbGVzIHdpdGggYSByZWd1bGFyIHRleHQgZWRpdG9yLCBpdCBpcyBhIGdvb2QgaWRlYSB0byBoYXZlCitzcGVjaWFsaXplZCBzby1jYWxsZWQgInBvIGZpbGUgZWRpdG9ycyIgKGUuZy4gZW1hY3MgcG8tbW9kZSwgS0JhYmVsLAorcG9lZGl0LCBHVHJhbnNsYXRvciAtLS0gYW55IG9mIHRoZW0gd291bGQgd29yayB3ZWxsKS4gIFBsZWFzZSBpbnN0YWxsCit0aGVtLgorCitZb3Ugd291bGQgdGhlbiBuZWVkIHRvIGNsb25lIHRoZSBnaXQtZ3VpIHByb2plY3QgcmVwb3NpdG9yeSBhbmQgY3JlYXRlCithIGZlYXR1cmUgYnJhbmNoIHRvIGJlZ2luIHdvcmtpbmc6CisKKwkkIGdpdCBjbG9uZSBnaXQ6Ly9yZXBvLm9yLmN6L2dpdC1ndWkuZ2l0CisJJCBjZCBnaXQtZ3VpLmdpdAorCSQgZ2l0IGNoZWNrb3V0IC1iIG15LXRyYW5zbGF0aW9uCisKK1RoZSAiZ2l0IGNoZWNrb3V0IiBjb21tYW5kIGNyZWF0ZXMgYSBuZXcgYnJhbmNoIHRvIGtlZXAgeW91ciB3b3JrCitpc29sYXRlZCBhbmQgdG8gbWFrZSBpdCBzaW1wbGUgdG8gcG9zdCB5b3VyIHBhdGNoIHNlcmllcyB3aGVuCitjb21wbGV0ZWQuICBZb3Ugd2lsbCBiZSB3b3JraW5nIG9uIHRoaXMgYnJhbmNoLgorCisKKzIuIFN0YXJ0aW5nIGEgbmV3IGxhbmd1YWdlLgorCitJbiB0aGUgZ2l0LWd1aSBkaXJlY3RvcnkgaXMgYSBwby8gc3ViZGlyZWN0b3J5LiAgSXQgaGFzIGEgaGFuZGZ1bCBvZgorZmlsZXMgd2hvc2UgbmFtZXMgZW5kIHdpdGggIi5wbyIuICBJcyB0aGVyZSBhIGZpbGUgdGhhdCBoYXMgbWVzc2FnZXMKK2luIHlvdXIgbGFuZ3VhZ2U/CisKK0lmIHlvdSBkbyBub3Qga25vdyB3aGF0IHlvdXIgbGFuZ3VhZ2Ugc2hvdWxkIGJlIG5hbWVkLCB5b3UgbmVlZCB0byBmaW5kCitpdC4gIFRoaXMgY3VycmVudGx5IGZvbGxvd3MgSVNPIDYzOS0xIHR3byBsZXR0ZXIgY29kZXM6CisKKwlodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yL3BocC9jb2RlX2xpc3QucGhwCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHByZXBhcmluZyBhIHRyYW5zbGF0aW9uIGZvciBBZnJpa2FhbnMsIHRoZQorbGFuZ3VhZ2UgY29kZSBpcyAiYWYiLiAgSWYgdGhlcmUgYWxyZWFkeSBpcyBhIHRyYW5zbGF0aW9uIGZvciB5b3VyCitsYW5ndWFnZSwgeW91IGRvIG5vdCBoYXZlIHRvIHBlcmZvcm0gYW55IHN0ZXAgaW4gdGhpcyBzZWN0aW9uLCBidXQga2VlcAorcmVhZGluZywgYmVjYXVzZSB3ZSBhcmUgY292ZXJpbmcgdGhlIGJhc2ljcy4KKworSWYgeW91IGRpZCBub3QgZmluZCB5b3VyIGxhbmd1YWdlLCB5b3Ugd291bGQgbmVlZCB0byBzdGFydCBvbmUgeW91cnNlbGYuCitDb3B5IHBvL2dpdC1ndWkucG90IGZpbGUgdG8gcG8vYWYucG8gKHJlcGxhY2UgImFmIiB3aXRoIHRoZSBjb2RlIGZvcgoreW91ciBsYW5ndWFnZSkuICBFZGl0IHRoZSBmaXJzdCBzZXZlcmFsIGxpbmVzIHRvIG1hdGNoIGV4aXN0aW5nICoucG8KK2ZpbGVzIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBpcyBhIHRyYW5zbGF0aW9uIHRhYmxlIGZvciBnaXQtZ3VpIHByb2plY3QsCithbmQgeW91IGFyZSB0aGUgcHJpbWFyeSB0cmFuc2xhdG9yLiAgVGhlIHJlc3VsdCBvZiB5b3VyIGVkaXRpbmcgd291bGQKK2xvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKKworICAgICMgVHJhbnNsYXRpb24gb2YgZ2l0LWd1aSB0byBBZnJpa2FhbnMKKyAgICAjIENvcHlyaWdodCAoQykgMjAwNyBTaGF3biBQZWFyY2UKKyAgICAjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtZ3VpIHBhY2thZ2UuCisgICAgIyBZT1VSIE5BTUUgPFlPVVJARS1NQUlMLkFERFJFU1M+LCAyMDA3LgorICAgICMKKyAgICAjLCBmdXp6eQorICAgIG1zZ2lkICIiCisgICAgbXNnc3RyICIiCisgICAgIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgorICAgICJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisgICAgIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA3LTA3LTI0IDIyOjE5KzAzMDBcbiIKKyAgICAiUE8tUmV2aXNpb24tRGF0ZTogMjAwNy0wNy0yNSAxODowMCswOTAwXG4iCisgICAgIkxhc3QtVHJhbnNsYXRvcjogWU9VUiBOQU1FIDxZT1VSQEUtTUFJTC5BRERSRVNTPlxuIgorICAgICJMYW5ndWFnZS1UZWFtOiBBZnJpa2FhbnNcbiIKKyAgICAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyAgICAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisgICAgIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworWW91IHdpbGwgZmluZCBtYW55IHBhaXJzIG9mIGEgIm1zZ2lkIiBsaW5lIGZvbGxvd2VkIGJ5IGEgIm1zZ3N0ciIgbGluZS4KK1RoZXNlIHBhaXJzIGRlZmluZSBob3cgbWVzc2FnZXMgaW4gZ2l0LWd1aSBhcHBsaWNhdGlvbiBhcmUgdHJhbnNsYXRlZCB0bworeW91ciBsYW5ndWFnZS4gIFlvdXIgcHJpbWFyaWx5IGpvYiBpcyB0byBmaWxsIGluIHRoZSBlbXB0eSBkb3VibGUgcXVvdGUKK3BhaXJzIG9uIG1zZ3N0ciBsaW5lcyB3aXRoIHRoZSB0cmFuc2xhdGlvbiBvZiB0aGUgc3RyaW5ncyBvbiB0aGVpcgorbWF0Y2hpbmcgbXNnaWQgbGluZXMuICBBIGZldyB0aXBzOgorCisgLSBDb250cm9sIGNoYXJhY3RlcnMsIHN1Y2ggYXMgbmV3bGluZXMsIGFyZSB3cml0dGVuIGluIGJhY2tzbGFzaAorICAgc2VxdWVuY2Ugc2ltaWxhciB0byBzdHJpbmcgbGl0ZXJhbHMgaW4gdGhlIEMgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuCisgICBXaGVuIHRoZSBzdHJpbmcgZ2l2ZW4gb24gYSBtc2dpZCBsaW5lIGhhcyBzdWNoIGEgYmFja3NsYXNoIHNlcXVlbmNlLAorICAgeW91IHdvdWxkIHR5cGljYWxseSB3YW50IHRvIGhhdmUgY29ycmVzcG9uZGluZyBvbmVzIGluIHRoZSBzdHJpbmcgb24KKyAgIHlvdXIgbXNnc3RyIGxpbmUuCisKKyAtIFNvbWUgbWVzc2FnZXMgY29udGFpbiBhbiBvcHRpb25hbCBjb250ZXh0IGluZGljYXRvciBhdCB0aGUgZW5kLAorICAgZm9yIGV4YW1wbGUgIkBAbm91biIgb3IgIkBAdmVyYiIuICBUaGlzIGluZGljYXRvciBhbGxvd3MgdGhlCisgICBzb2Z0d2FyZSB0byBzZWxlY3QgdGhlIGNvcnJlY3QgdHJhbnNsYXRpb24gZGVwZW5kaW5nIHVwb24gdGhlIHVzZS4KKyAgIFRoZSBpbmRpY2F0b3IgaXMgbm90IGFjdHVhbGx5IHBhcnQgb2YgdGhlIG1lc3NhZ2UgYW5kIHdpbGwgbm90CisgICBiZSBzaG93biB0byB0aGUgZW5kLXVzZXIuCisKKyAgIElmIHlvdXIgbGFuZ3VhZ2UgZG9lcyBub3QgcmVxdWlyZSBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiB5b3UKKyAgIHdpbGwgc3RpbGwgbmVlZCB0byB0cmFuc2xhdGUgYm90aCBtZXNzYWdlcy4KKworIC0gT2Z0ZW4gdGhlIG1lc3NhZ2VzIGJlaW5nIHRyYW5zbGF0ZWQgYXJlIGZvcm1hdCBzdHJpbmdzIGdpdmVuIHRvCisgICAicHJpbnRmKCkiLWxpa2UgZnVuY3Rpb25zLiAgTWFrZSBzdXJlICIlcyIsICIlZCIsIGFuZCAiJSUiIGluIHlvdXIKKyAgIHRyYW5zbGF0ZWQgbWVzc2FnZXMgbWF0Y2ggdGhlIG9yaWdpbmFsLgorCisgICBXaGVuIHlvdSBoYXZlIHRvIGNoYW5nZSB0aGUgb3JkZXIgb2Ygd29yZHMsIHlvdSBjYW4gYWRkICI8bnVtYmVyPiQiCisgICBiZXR3ZWVuICclJyBhbmQgdGhlIGNvbnZlcnNpb24gKCdzJywgJ2QnLCBldGMuKSB0byBzYXkgIjxudW1iZXI+LXRoCisgICBwYXJhbWV0ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcgaXMgdXNlZCBhdCB0aGlzIHBvaW50Ii4gIEZvciBleGFtcGxlLAorICAgaWYgdGhlIG9yaWdpbmFsIG1lc3NhZ2UgaXMgbGlrZSB0aGlzOgorCisJIkxlbmd0aCBpcyAlZCwgV2VpZ2h0IGlzICVkIgorCisgICBhbmQgaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB5b3VyIHRyYW5zbGF0aW9uIG5lZWRzIHRvIHNheSB3ZWlnaHQgZmlyc3QKKyAgIGFuZCB0aGVuIGxlbmd0aCwgeW91IGNhbiBzYXkgc29tZXRoaW5nIGxpa2U6CisKKwkiV0VJR0hUIElTICUyJGQsIExFTkdUSCBJUyAlMSRkIgorCisgICBBIGZvcm1hdCBzcGVjaWZpY2F0aW9uIHdpdGggYSAnKicgKGFzdGVyaXNrKSByZWZlcnMgdG8gKnR3byogYXJndW1lbnRzCisgICBpbnN0ZWFkIG9mIG9uZSwgaGVuY2UgdGhlIHN1Y2NlZWRpbmcgYXJndW1lbnQgbnVtYmVyIGlzIHR3byBoaWdoZXIKKyAgIGluc3RlYWQgb2Ygb25lLiBTbywgYSBtZXNzYWdlIGxpa2UgdGhpcworCisJIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCisKKyAgIGlzIGVxdWl2YWxlbnQgdG8KKworCSIlMSRzIC4uLiAlMiQqaSBvZiAlNCQqaSAlNiRzICglNyQzaSUlKSIKKworIC0gQSBsb25nIG1lc3NhZ2UgY2FuIGJlIHNwbGl0IGFjcm9zcyBtdWx0aXBsZSBsaW5lcyBieSBlbmRpbmcgdGhlCisgICBzdHJpbmcgd2l0aCBhIGRvdWJsZSBxdW90ZSwgYW5kIHN0YXJ0aW5nIGFub3RoZXIgc3RyaW5nIG9uIHRoZSBuZXh0CisgICBsaW5lIHdpdGggYW5vdGhlciBkb3VibGUgcXVvdGUuICBUaGV5IHdpbGwgYmUgY29uY2F0ZW5hdGVkIGluIHRoZQorICAgcmVzdWx0LiAgRm9yIGV4YW1wbGU6CisKKyAgICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg5CisgICAjLCB0Y2wtZm9ybWF0CisgICBtc2dpZCAiIgorICAgIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorICAgIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorICAgbXNnc3RyICIiCisgICAiSEVSRSBZT1UgV0lMTCBXUklURSBZT1VSIFRSQU5TTEFUSU9OIE9GIFRIRSBBQk9WRSBMT05HICIKKyAgICJNRVNTQUdFIElOIFlPVVIgTEFOR1VBR0UuIgorCitZb3UgY2FuIHRlc3QgeW91ciB0cmFuc2xhdGlvbiBieSBydW5uaW5nICJtYWtlIGluc3RhbGwiLCB3aGljaCB3b3VsZAorY3JlYXRlIHBvL2FmLm1zZyBmaWxlIGFuZCBpbnN0YWxscyB0aGUgcmVzdWx0LCBhbmQgdGhlbiBydW5uaW5nIHRoZQorcmVzdWx0aW5nIGdpdC1ndWkgdW5kZXIgeW91ciBsb2NhbGU6CisKKwkkIG1ha2UgaW5zdGFsbAorCSQgTEFORz1hZiBnaXQtZ3VpCisKK1RoZXJlIGlzIGEgdHJpY2sgdG8gdGVzdCB5b3VyIHRyYW5zbGF0aW9uIHdpdGhvdXQgZmlyc3QgaW5zdGFsbGluZzoKKworCSQgbWFrZQorCSQgTEFORz1hZiAuL2dpdC1ndWkuc2gKKworV2hlbiB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgdHJhbnNsYXRpb24sIGNvbW1pdCB5b3VyIGNoYW5nZXMgdGhlbiBzdWJtaXQKK3lvdXIgcGF0Y2ggc2VyaWVzIHRvIHRoZSBtYWludGFpbmVyIGFuZCB0aGUgR2l0IG1haWxpbmcgbGlzdDoKKworCSQgZWRpdCBwby9hZi5wbworCS4uLiBiZSBzdXJlIHRvIHVwZGF0ZSBMYXN0LVRyYW5zbGF0b3I6IGFuZAorCS4uLiBQTy1SZXZpc2lvbi1EYXRlOiBsaW5lcy4KKwkkIGdpdCBhZGQgcG8vYWYucG8KKwkkIGdpdCBjb21taXQgLXMgLW0gJ2dpdC1ndWk6IGFkZGVkIEFmcmlrYWFucyB0cmFuc2xhdGlvbi4nCisJJCBnaXQgc2VuZC1lbWFpbCAtLXRvICdnaXRAdmdlci5rZXJuZWwub3JnJyBcCisJICAgLS1jYyAnUGF0IFRob3l0cyA8cGF0dGhveXRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4nIFwKKwkgICAtLXN1YmplY3QgJ2dpdC1ndWk6IEFmcmlrYWFucyB0cmFuc2xhdGlvbicgXAorCSAgIG1hc3Rlci4uCisKKworMy4gVXBkYXRpbmcgeW91ciB0cmFuc2xhdGlvbi4KKworVGhlcmUgbWF5IGFscmVhZHkgYmUgYSB0cmFuc2xhdGlvbiBmb3IgeW91ciBsYW5ndWFnZSwgYW5kIHlvdSBtYXkgd2FudAordG8gY29udHJpYnV0ZSBhbiB1cGRhdGUuICBUaGlzIG1heSBiZSBiZWNhdXNlIHlvdSB3b3VsZCB3YW50IHRvIGltcHJvdmUKK3RoZSB0cmFuc2xhdGlvbiBvZiBleGlzdGluZyBtZXNzYWdlcywgb3IgYmVjYXVzZSB0aGUgZ2l0LWd1aSBzb2Z0d2FyZQoraXRzZWxmIHdhcyB1cGRhdGVkIGFuZCB0aGVyZSBhcmUgbmV3IG1lc3NhZ2VzIHRoYXQgbmVlZCB0cmFuc2xhdGlvbi4KKworSW4gYW55IGNhc2UsIG1ha2Ugc3VyZSB5b3UgYXJlIHVwIHRvIGRhdGUgYmVmb3JlIHN0YXJ0aW5nIHlvdXIgd29yazoKKworCSQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSQgZ2l0IHB1bGwKKworSW4gdGhlIGZvcm1lciBjYXNlLCB5b3Ugd2lsbCBlZGl0IHBvL2FmLnBvIChhZ2FpbiwgcmVwbGFjZSAiYWYiIHdpdGgKK3lvdXIgbGFuZ3VhZ2UgY29kZSksIGFuZCBhZnRlciB0ZXN0aW5nIGFuZCB1cGRhdGluZyB0aGUgTGFzdC1UcmFuc2xhdG9yOgorYW5kIFBPLVJldmlzaW9uLURhdGU6IGxpbmVzLCAiYWRkL2NvbW1pdC9wdXNoIiBhcyBpbiB0aGUgcHJldmlvdXMKK3NlY3Rpb24uCisKK0J5IGNvbXBhcmluZyAiUE9ULUNyZWF0aW9uLURhdGU6IiBsaW5lIGluIHBvL2dpdC1ndWkucG90IGZpbGUgYW5kCitwby9hZi5wbyBmaWxlLCB5b3UgY2FuIHRlbGwgaWYgdGhlcmUgYXJlIG5ldyBtZXNzYWdlcyB0aGF0IG5lZWQgdG8gYmUKK3RyYW5zbGF0ZWQuICBZb3Ugd291bGQgbmVlZCB0aGUgR05VIGdldHRleHQgcGFja2FnZSB0byBwZXJmb3JtIHRoaXMKK3N0ZXAuCisKKwkkIG1zZ21lcmdlIC1VIHBvL2FmLnBvIHBvL2dpdC1ndWkucG90CisKK1RoaXMgdXBkYXRlcyBwby9hZi5wbyAoYWdhaW4sIHJlcGxhY2UgImFmIiB3aXRoIHlvdXIgbGFuZ3VhZ2UKK2NvZGUpIHNvIHRoYXQgaXQgY29udGFpbnMgbXNnaWQgbGluZXMgKGkuZS4gdGhlIG9yaWdpbmFsKSB0aGF0Cit5b3VyIHRyYW5zbGF0aW9uIGRpZCBub3QgaGF2ZSBiZWZvcmUuICBUaGVyZSBhcmUgYSBmZXcgdGhpbmdzIHRvCit3YXRjaCBvdXQgZm9yOgorCisgLSBUaGUgb3JpZ2luYWwgdGV4dCBpbiBFbmdsaXNoIG9mIGFuIG9sZGVyIG1lc3NhZ2UgeW91IGFscmVhZHkKKyAgIHRyYW5zbGF0ZWQgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQuICBZb3Ugd2lsbCBub3RpY2UgYSBjb21tZW50IGxpbmUKKyAgIHRoYXQgYmVnaW5zIHdpdGggIiMsIGZ1enp5IiBpbiBmcm9udCBvZiBzdWNoIGEgbWVzc2FnZS4gIG1zZ21lcmdlCisgICB0b29sIG1hZGUgaXRzIGJlc3QgZWZmb3J0IHRvIG1hdGNoIHlvdXIgb2xkIHRyYW5zbGF0aW9uIHdpdGggdGhlCisgICBtZXNzYWdlIGZyb20gdGhlIHVwZGF0ZWQgc29mdHdhcmUsIGJ1dCB5b3UgbWF5IGZpbmQgY2FzZXMgdGhhdCBpdAorICAgbWF0Y2hlZCB5b3VyIG9sZCB0cmFuc2xhdGVkIG1lc3NhZ2UgdG8gYSBuZXcgbXNnaWQgYW5kIHRoZSBwYWlyaW5nCisgICBkb2VzIG5vdCBtYWtlIGFueSBzZW5zZSAtLSB5b3Ugd291bGQgbmVlZCB0byBmaXggdGhlbSwgYW5kIHRoZW4KKyAgIHJlbW92ZSB0aGUgIiMsIGZ1enp5IiBsaW5lIGZyb20gdGhlIG1lc3NhZ2UgKHlvdXIgZml4ZWQgdHJhbnNsYXRpb24KKyAgIG9mIHRoZSBtZXNzYWdlIHdpbGwgbm90IGJlIHVzZWQgYmVmb3JlIHlvdSByZW1vdmUgdGhlIG1hcmtlcikuCisKKyAtIE5ldyBtZXNzYWdlcyBhZGRlZCB0byB0aGUgc29mdHdhcmUgd2lsbCBoYXZlIG1zZ3N0ciBsaW5lcyB3aXRoIGVtcHR5CisgICBzdHJpbmdzLiAgWW91IHdvdWxkIG5lZWQgdG8gdHJhbnNsYXRlIHRoZW0uCisKK1RoZSBwby9naXQtZ3VpLnBvdCBmaWxlIGlzIHVwZGF0ZWQgYnkgdGhlIGludGVybmF0aW9uYWxpemF0aW9uCitjb29yZGluYXRvciBmcm9tIHRpbWUgdG8gdGltZS4gIFlvdSBfY291bGRfIHVwZGF0ZSBpdCB5b3Vyc2VsZiwgYnV0Cit0cmFuc2xhdG9ycyBhcmUgZGlzY291cmFnZWQgZnJvbSBkb2luZyBzbyBiZWNhdXNlIHdlIHdvdWxkIHdhbnQgYWxsCitsYW5ndWFnZSB0ZWFtcyB0byBiZSB3b3JraW5nIG9mZiBvZiB0aGUgc2FtZSB2ZXJzaW9uIG9mIGdpdC1ndWkucG90LgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoaXMgc2VjdGlvbiBpcyBhIG5vdGUgdG8gdGhlIGludGVybmF0aW9uYWxpemF0aW9uIGNvb3JkaW5hdG9yLCBhbmQKK3RyYW5zbGF0b3JzIGRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IGl0IHRvbyBtdWNoLgorCitUaGUgbWVzc2FnZSB0ZW1wbGF0ZSBmaWxlIHBvL2dpdC1ndWkucG90IG5lZWRzIHRvIGJlIGtlcHQgdXAgdG8gZGF0ZQorcmVsYXRpdmUgdG8gdGhlIHNvZnR3YXJlIHRoZSB0cmFuc2xhdGlvbnMgYXBwbHkgdG8sIGFuZCBpdCBpcyB0aGUKK3Jlc3BvbnNpYmlsaXR5IG9mIHRoZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBjb29yZGluYXRvci4KKworV2hlbiB1cGRhdGluZyBwby9naXQtZ3VpLnBvdCBmaWxlLCBob3dldmVyLCBfbmV2ZXJfIHJ1biAibXNnbWVyZ2UgLVUKK3BvL3h4LnBvIiBmb3IgaW5kaXZpZHVhbCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMsIHVubGVzcyB5b3UgYXJlIGFic29sdXRlbHkKK3N1cmUgdGhhdCB0aGVyZSBpcyBubyBvdXRzdGFuZGluZyB3b3JrIG9uIHRyYW5zbGF0aW9uIGZvciBsYW5ndWFnZSB4eC4KK0RvaW5nIHNvIHdpbGwgY3JlYXRlIHVubmVjZXNzYXJ5IG1lcmdlIGNvbmZsaWN0cyBhbmQgZm9yY2UgbmVlZGxlc3MKK3JlLXRyYW5zbGF0aW9uIG9uIHRyYW5zbGF0b3JzLiAgVGhlIHRyYW5zbGF0b3IgaG93ZXZlciBtYXkgbm90IGhhdmUgYWNjZXNzCit0byB0aGUgbXNnbWVyZ2UgdG9vbCwgaW4gd2hpY2ggY2FzZSB0aGUgY29vcmRpbmF0b3IgbWF5IHJ1biBpdCBmb3IgdGhlCit0cmFuc2xhdG9yIGFzIGEgc2VydmljZS4KKworQnV0IG1pc3Rha2VzIGRvIGhhcHBlbi4gIFN1cHBvc2UgYSB0cmFuc2xhdGlvbiB3YXMgYmFzZWQgb24gYW4gb2xkZXIKK3ZlcnNpb24gWCwgdGhlIFBPVCBmaWxlIHdhcyB1cGRhdGVkIGF0IHZlcnNpb24gWSBhbmQgdGhlbiBtc2dtZXJnZSB3YXMgcnVuCithdCB2ZXJzaW9uIFogZm9yIHRoZSBsYW5ndWFnZSwgYW5kIHRoZSB0cmFuc2xhdG9yIHNlbnQgaW4gYSBwYXRjaCBiYXNlZCBvbgordmVyc2lvbiBYOgorCisgICAgICAgICA/IHRyYW5zbGF0ZWQKKyAgICAgICAgLworICAgIC0tLVgtLS1ZLS0tWiAobWFzdGVyKQorCitUaGUgY29vcmRpbmF0b3IgY291bGQgcmVjb3ZlciBmcm9tIHN1Y2ggYSBtaXN0YWtlIGJ5IGZpcnN0IGFwcGx5aW5nIHRoZQorcGF0Y2ggdG8gWCwgcmVwbGFjZSB0aGUgdHJhbnNsYXRlZCBmaWxlIGluIFosIGFuZCB0aGVuIHJ1bm5pbmcgbXNnbWVyZ2UKK2FnYWluIGJhc2VkIG9uIHRoZSB1cGRhdGVkIFBPVCBmaWxlIGFuZCBjb21taXQgdGhlIHJlc3VsdC4gIFRoZSBzZXF1ZW5jZQord291bGQgbG9vayBsaWtlIHRoaXM6CisKKyAgICAkIGdpdCBjaGVja291dCBYCisgICAgJCBnaXQgYW0gLXMgeHgucGF0Y2gKKyAgICAkIGdpdCBjaGVja291dCBtYXN0ZXIKKyAgICAkIGdpdCBjaGVja291dCBIRUFEQHsxfSBwby94eC5wbworICAgICQgbXNnbWVyZ2UgLVUgcG8veHgucG8gcG8vZ2l0LWd1aS5wb3QKKyAgICAkIGdpdCBjb21taXQgLWMgSEVBREB7MX0gcG8veHgucG8KKworU3RhdGUgaW4gdGhlIG1lc3NhZ2UgdGhhdCB0aGUgdHJhbnNsYXRlZCBtZXNzYWdlcyBhcmUgYmFzZWQgb24gYSBzbGlnaHRseQorb2xkZXIgdmVyc2lvbiwgYW5kIG1zZ21lcmdlIHdhcyBydW4gdG8gaW5jb3Jwb3JhdGUgY2hhbmdlcyB0byBtZXNzYWdlCit0ZW1wbGF0ZXMgZnJvbSB0aGUgdXBkYXRlZCBQT1QgZmlsZS4gIFRoZSByZXN1bHQgbmVlZHMgdG8gYmUgZnVydGhlcgordHJhbnNsYXRlZCwgYnV0IGF0IGxlYXN0IHRoZSBtZXNzYWdlcyB0aGF0IHdlcmUgdXBkYXRlZCBieSB0aGUgcGF0Y2ggdGhhdAord2VyZSBub3QgY2hhbmdlZCBieSB0aGUgUE9UIHVwZGF0ZSB3aWxsIHN1cnZpdmUgdGhlIHByb2Nlc3MgYW5kIGRvIG5vdAorbmVlZCB0byBiZSByZS10cmFuc2xhdGVkLgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9iZy5wbyBiL2dpdC1ndWkvcG8vYmcucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFmNzhmMQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vYmcucG8KQEAgLTAsMCArMSwyODA3IEBACisjIEJ1bGdhcmlhbiB0cmFuc2xhdGlvbiBvZiBnaXQtZ3VpIHBvLWZpbGUuCisjIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCwgMjAxNSwgMjAxNiBBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+LgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0IHBhY2thZ2UuCisjIEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz4sIDIwMTIsIDIwMTMsIDIwMTQsIDIwMTUsIDIwMTYuCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpIG1hc3RlclxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNi0xMC0xMyAxNToxNiswMzAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0xMC0xMyAxNToxNiswMzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQnVsZ2FyaWFuIDxkaWN0QGZzYS1iZy5vcmc+XG4iCisiTGFuZ3VhZ2U6IGJnXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGdpdC1ndWkuc2g6ODY1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCittc2dzdHIgItCj0LrQsNC30LDQvSDQtSDQvdC10L/RgNCw0LLQuNC70LXQvSDRiNGA0LjRhNGCINCyIOKAniVz4oCcOiIKKworIzogZ2l0LWd1aS5zaDo5MTkKK21zZ2lkICJNYWluIEZvbnQiCittc2dzdHIgItCe0YHQvdC+0LLQtdC9INGI0YDQuNGE0YIiCisKKyM6IGdpdC1ndWkuc2g6OTIwCittc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCittc2dzdHIgItCo0YDQuNGE0YIg0LfQsCDRgNCw0LfQu9C40LrQuNGC0LUv0LrQvtC90LfQvtC70LDRgtCwIgorCisjOiBnaXQtZ3VpLnNoOjkzNSBnaXQtZ3VpLnNoOjk0OSBnaXQtZ3VpLnNoOjk2MiBnaXQtZ3VpLnNoOjEwNTIgZ2l0LWd1aS5zaDoxMDcxCisjOiBnaXQtZ3VpLnNoOjMxNDcKK21zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKK21zZ3N0ciAiZ2l0LWd1aTog0YTQsNGC0LDQu9C90LAg0LPRgNC10YjQutCwIgorCisjOiBnaXQtZ3VpLnNoOjkzNgorbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIGdpdCDQu9C40L/RgdCy0LAg0LIg0L/RitGC0Y8gKFBBVEgpLiIKKworIzogZ2l0LWd1aS5zaDo5NjMKK21zZ2lkICJDYW5ub3QgcGFyc2UgR2l0IHZlcnNpb24gc3RyaW5nOiIKK21zZ3N0ciAi0J3QuNC30YrRgiDRgSDQstC10YDRgdC40Y/RgtCwINC90LAgR2l0INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC90YLQtdGA0L/RgNC10YLQuNGA0LDQvToiCisKKyM6IGdpdC1ndWkuc2g6OTg4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgorIlxuIgorIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCisiXG4iCisiJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgorIlxuIgorIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCittc2dzdHIgIiIKKyLQktC10YDRgdC40Y/RgtCwINC90LAgR2l0INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtC/0YDQtdC00LXQu9C10L3QsC5cbiIKKyJcbiIKKyLQktC10YDRgdC40Y/RgtCwINC90LAg4oCeJXPigJwg0LjQt9Cz0LvQtdC20LTQsCwg0YfQtSDQtSDigJ4lc+KAnC5cbiIKKyJcbiIKKyLigJ4lc+KAnCDQuNC30LjRgdC60LLQsCBHaXQsINCy0LXRgNGB0LjRjyDQv9C+0L3QtSAxLjUuMC5cbiIKKyJcbiIKKyLQlNCwINGB0LUg0L/RgNC40LXQvNC1INC70LgsINGH0LUg4oCeJXPigJwg0LUg0LLQtdGA0YHQuNGPIOKAnjEuNS4w4oCcP1xuIgorCisjOiBnaXQtZ3VpLnNoOjEyODUKK21zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCittc2dzdHIgItCU0LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdCwIEdpdCDQvdC1INC1INC+0YLQutGA0LjRgtCwOiIKKworIzogZ2l0LWd1aS5zaDoxMzE5Cittc2dpZCAiQ2Fubm90IG1vdmUgdG8gdG9wIG9mIHdvcmtpbmcgZGlyZWN0b3J5OiIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC10LzQuNC90LUg0LrRitC8INGA0L7QtNC40YLQtdC70YHQutCw0YLQsCAg0LTQuNGA0LXQutGC0L7RgNC40Y8uIgorCisjOiBnaXQtZ3VpLnNoOjEzMjcKK21zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCittc2dzdHIgItCT0L7Qu9C+INGF0YDQsNC90LjQu9C40YnQtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/QvtC70LfQstCwOiIKKworIzogZ2l0LWd1aS5zaDoxMzM1Cittc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgItCg0LDQsdC+0YLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQu9C40L/RgdCy0LAiCisKKyM6IGdpdC1ndWkuc2g6MTUwNyBsaWIvY2hlY2tvdXRfb3AudGNsOjMwNgorbXNnaWQgIlJlZnJlc2hpbmcgZmlsZSBzdGF0dXMuLi4iCittc2dzdHIgItCe0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINGE0LDQudC70LDigKYiCisKKyM6IGdpdC1ndWkuc2g6MTU2NworbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0LfQsCDQv9GA0L7QvNC10L3QtdC90Lgg0YTQsNC50LvQvtCy0LXigKYiCisKKyM6IGdpdC1ndWkuc2g6MTY0NQorbXNnaWQgIkNhbGxpbmcgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgItCa0YPQutCw0YLQsCDigJ5wcmVwYXJlLWNvbW1pdC1tc2figJwg0YHQtSDQuNC30L/RitC70L3Rj9Cy0LAg0LIg0LzQvtC80LXQvdGC0LDigKYiCisKKyM6IGdpdC1ndWkuc2g6MTY2MgorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+INC1INC+0YLRhdCy0YrRgNC70LXQvdC+INC+0YIg0LrRg9C60LDRgtCwIOKAnnByZXBhcmUtY29tbWl0LW1zZ+KAnC4iCisKKyM6IGdpdC1ndWkuc2g6MTgyMCBsaWIvYnJvd3Nlci50Y2w6MjUyCittc2dpZCAiUmVhZHkuIgorbXNnc3RyICLQk9C+0YLQvtCy0L4uIgorCisjOiBnaXQtZ3VpLnNoOjE5ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRGlzcGxheSBsaW1pdCAoZ3VpLm1heGZpbGVzZGlzcGxheWVkID0gJXMpIHJlYWNoZWQsIG5vdCBzaG93aW5nIGFsbCAlcyBmaWxlcy4iCittc2dzdHIgIiIKKyLQlNC+0YHRgtC40LPQvdCw0YIg0LUg0LzQsNC60YHQuNC80LDQu9C90LjRj9GCINGA0LDQt9C80LXRgCDQvdCwINGB0L/QuNGB0YrQutCwINC30LAg0LjQt9Cy0LXQttC00LDQvdC1KGd1aS4iCisibWF4ZmlsZXNkaXNwbGF5ZWQgPSAlcyksINGB0YrQvtGC0LLQtdGC0L3QviDQvdC1INGB0LAg0L/QvtC60LDQt9Cw0L3QuCDQstGB0LjRh9C60LggJXMg0YTQsNC50LvQsC4iCisKKyM6IGdpdC1ndWkuc2g6MjEwNworbXNnaWQgIlVubW9kaWZpZWQiCittc2dzdHIgItCd0LXQv9GA0L7QvNC10L3QtdC9IgorCisjOiBnaXQtZ3VpLnNoOjIxMDkKK21zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90LXQvSwg0L3QviDQvdC1INC1INCyINC40L3QtNC10LrRgdCwIgorCisjOiBnaXQtZ3VpLnNoOjIxMTAgZ2l0LWd1aS5zaDoyMTIyCittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgItCSINC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyMTExIGdpdC1ndWkuc2g6MjEyMworbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICLQp9Cw0YHRgtC4INGB0LAg0LIg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjIxMTIgZ2l0LWd1aS5zaDoyMTI0Cittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQsIG1pc3NpbmciCittc2dzdHIgItCSINC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSwg0L3QviDQu9C40L/RgdCy0LAiCisKKyM6IGdpdC1ndWkuc2g6MjExNAorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICLQktC40LTRitGCINC90LAg0YTQsNC50LvQsCDQtSDRgdC80LXQvdC10L0sINC90L4g0L3QtSDQtSDQsiDQuNC90LTQtdC60YHQsCIKKworIzogZ2l0LWd1aS5zaDoyMTE1IGdpdC1ndWkuc2g6MjExNgorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBvbGQgdHlwZSBzdGFnZWQgZm9yIGNvbW1pdCIKK21zZ3N0ciAi0JLQuNC00YrRgiDQvdCwINGE0LDQudC70LAg0LUg0YHQvNC10L3QtdC9LCDQvdC+INC90L7QstC40Y/RgiDQstC40LQg0L3QtSDQtSDQsiDQuNC90LTQtdC60YHQsCIKKworIzogZ2l0LWd1aS5zaDoyMTE3Cittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIHN0YWdlZCIKK21zZ3N0ciAi0JLQuNC00YrRgiDQvdCwINGE0LDQudC70LAg0LUg0YHQvNC10L3QtdC9INC4INC1INCyINC40L3QtNC10LrRgdCwIgorCisjOiBnaXQtZ3VpLnNoOjIxMTgKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlIHN0YWdlZCwgbW9kaWZpY2F0aW9uIG5vdCBzdGFnZWQiCittc2dzdHIgItCS0LjQtNGK0YIg0L3QsCDRhNCw0LnQu9CwINC1INGB0LzQtdC90LXQvSDQsiDQuNC90LTQtdC60YHQsCwg0L3QviDQvdC1INC4INGB0YrQtNGK0YDQttCw0L3QuNC10YLQviIKKworIzogZ2l0LWd1aS5zaDoyMTE5Cittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZSBzdGFnZWQsIGZpbGUgbWlzc2luZyIKK21zZ3N0ciAi0JLQuNC00YrRgiDQvdCwINGE0LDQudC70LAg0LUg0YHQvNC10L3QtdC9INCyINC40L3QtNC10LrRgdCwLCDQvdC+INGE0LDQudC70YrRgiDQu9C40L/RgdCy0LAiCisKKyM6IGdpdC1ndWkuc2g6MjEyMQorbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAi0J3QtdGB0LvQtdC00LXQvSIKKworIzogZ2l0LWd1aS5zaDoyMTI2Cittc2dpZCAiTWlzc2luZyIKK21zZ3N0ciAi0JvQuNC/0YHQstCw0YkiCisKKyM6IGdpdC1ndWkuc2g6MjEyNworbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKK21zZ3N0ciAi0JIg0LjQvdC00LXQutGB0LAg0LfQsCDQuNC30YLRgNC40LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6MjEyOAorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAi0JIg0LjQvdC00LXQutGB0LAg0LfQsCDQuNC30YLRgNC40LLQsNC90LUsINC90L4g0L7RidC1INCz0L4g0LjQvNCwIgorCisjOiBnaXQtZ3VpLnNoOjIxMzAgZ2l0LWd1aS5zaDoyMTMxIGdpdC1ndWkuc2g6MjEzMiBnaXQtZ3VpLnNoOjIxMzMKKyM6IGdpdC1ndWkuc2g6MjEzNCBnaXQtZ3VpLnNoOjIxMzUKK21zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICLQmNC30LjRgdC60LLQsCDQutC+0YDQuNCz0LjRgNCw0L3QtSDQv9GA0Lgg0YHQu9C40LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6MjE3MAorbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgItCh0YLQsNGA0YLQuNGA0LDQvdC1INC90LAg4oCeZ2l0a+KAnOKApiwg0LjQt9GH0LDQutCw0LnRgtC14oCmIgorCisjOiBnaXQtZ3VpLnNoOjIxODIKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdGsgaW4gUEFUSCIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIOKAnmdpdGvigJwg0LvQuNC/0YHQstCwINCyINC/0YrRgtC40YnQsNGC0LAsINC+0L/RgNC10LTQtdC70LXQvdC4INC+0YIg0L/RgNC+0LzQtdC90LvQuNCy0LDRgtCwIFBBVEguIgorCisjOiBnaXQtZ3VpLnNoOjIyNDEKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiIgorItCa0L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgZ3Vp4oCcINC70LjQv9GB0LLQsCDQsiDQv9GK0YLQuNGJ0LDRgtCwLCDQvtC/0YDQtdC00LXQu9C10L3QuCDQvtGCINC/0YDQvtC80LXQvdC70LjQstCw0YLQsCBQQVRILiIKKworIzogZ2l0LWd1aS5zaDoyNjc2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDEKK21zZ2lkICJSZXBvc2l0b3J5IgorbXNnc3RyICLQpdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGdpdC1ndWkuc2g6MjY3NworbXNnaWQgIkVkaXQiCittc2dzdHIgItCg0LXQtNCw0LrRgtC40YDQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6MjY3OSBsaWIvY2hvb3NlX3Jldi50Y2w6NTY3Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICLQmtC70L7QvSIKKworIzogZ2l0LWd1aS5zaDoyNjgyIGxpYi9jaG9vc2VfcmV2LnRjbDo1NTQKK21zZ2lkICJDb21taXRAQG5vdW4iCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6MjY4NSBsaWIvbWVyZ2UudGNsOjEyNyBsaWIvbWVyZ2UudGNsOjE3NAorbXNnaWQgIk1lcmdlIgorbXNnc3RyICLQodC70LjQstCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyNjg2IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjMKK21zZ2lkICJSZW1vdGUiCittc2dzdHIgItCe0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogZ2l0LWd1aS5zaDoyNjg5Cittc2dpZCAiVG9vbHMiCittc2dzdHIgItCa0L7QvNCw0L3QtNC4IgorCisjOiBnaXQtZ3VpLnNoOjI2OTgKK21zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKK21zZ3N0ciAi0KDQsNC30LPQu9C10LbQtNCw0L3QtSDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQutC+0L/QuNC1IgorCisjOiBnaXQtZ3VpLnNoOjI3MDQKK21zZ2lkICJHaXQgQmFzaCIKK21zZ3N0ciAiQmFzaCDQt9CwIEdpdCIKKworIzogZ2l0LWd1aS5zaDoyNzE0Cittc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCittc2dzdHIgItCg0LDQt9Cz0LvQtdC20LTQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0LIg0YLQtdC60YPRidC40Y8g0LrQu9C+0L0iCisKKyM6IGdpdC1ndWkuc2g6MjcxOAorbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCittc2dzdHIgItCg0LDQt9Cz0LvQtdC20LTQsNC90LUg0L3QsCDRgtC10LrRg9GJ0LjRjyDQutC70L7QveKApiIKKworIzogZ2l0LWd1aS5zaDoyNzIzCittc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKK21zZ3N0ciAi0JLQuNC30YPQsNC70LjQt9Cw0YbQuNGPINC90LAg0LjRgdGC0L7RgNC40Y/RgtCwINC90LAg0YLQtdC60YPRidC40Y8g0LrQu9C+0L0iCisKKyM6IGdpdC1ndWkuc2g6MjcyNworbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCittc2dzdHIgItCS0LjQt9GD0LDQu9C40LfQsNGG0LjRjyDQvdCwINC40YHRgtC+0YDQuNGP0YLQsCDQvdCwINCy0YHQuNGH0LrQuCDQutC70L7QvdC+0LLQtSIKKworIzogZ2l0LWd1aS5zaDoyNzM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCittc2dzdHIgItCg0LDQt9Cz0LvQtdC20LTQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0LIg4oCeJXPigJwiCisKKyM6IGdpdC1ndWkuc2g6MjczNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCittc2dzdHIgItCS0LjQt9GD0LDQu9C40LfQsNGG0LjRjyDQvdCwINC40YHRgtC+0YDQuNGP0YLQsCDQvdCwIOKAniVz4oCcIgorCisjOiBnaXQtZ3VpLnNoOjI3NDEgbGliL2RhdGFiYXNlLnRjbDo0MAorbXNnaWQgIkRhdGFiYXNlIFN0YXRpc3RpY3MiCittc2dzdHIgItCh0YLQsNGC0LjRgdGC0LjQutCwINC90LAg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCIKKworIzogZ2l0LWd1aS5zaDoyNzQ0IGxpYi9kYXRhYmFzZS50Y2w6MzMKK21zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKK21zZ3N0ciAi0JrQvtC80L/RgNC10YHQuNGA0LDQvdC1INC90LAg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCIKKworIzogZ2l0LWd1aS5zaDoyNzQ3Cittc2dpZCAiVmVyaWZ5IERhdGFiYXNlIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC90LAg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCIKKworIzogZ2l0LWd1aS5zaDoyNzU0IGdpdC1ndWkuc2g6Mjc1OCBnaXQtZ3VpLnNoOjI3NjIKK21zZ2lkICJDcmVhdGUgRGVza3RvcCBJY29uIgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LjQutC+0L3QsCDQvdCwINGA0LDQsdC+0YLQvdC40Y8g0L/Qu9C+0YIiCisKKyM6IGdpdC1ndWkuc2g6Mjc3MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjIwMQorbXNnaWQgIlF1aXQiCittc2dzdHIgItCh0L/QuNGA0LDQvdC1INC90LAg0L/RgNC+0LPRgNCw0LzQsNGC0LAiCisKKyM6IGdpdC1ndWkuc2g6Mjc3OAorbXNnaWQgIlVuZG8iCittc2dzdHIgItCe0YLQvNGP0L3QsCIKKworIzogZ2l0LWd1aS5zaDoyNzgxCittc2dpZCAiUmVkbyIKK21zZ3N0ciAi0J/QvtCy0YLQvtGA0LXQvdC40LUiCisKKyM6IGdpdC1ndWkuc2g6Mjc4NSBnaXQtZ3VpLnNoOjMzOTkKK21zZ2lkICJDdXQiCittc2dzdHIgItCe0YLRgNGP0LfQstCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyNzg4IGdpdC1ndWkuc2g6MzQwMiBnaXQtZ3VpLnNoOjM0NzYgZ2l0LWd1aS5zaDozNTYyCisjOiBsaWIvY29uc29sZS50Y2w6NjkKK21zZ2lkICJDb3B5IgorbXNnc3RyICLQmtC+0L/QuNGA0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjI3OTEgZ2l0LWd1aS5zaDozNDA1Cittc2dpZCAiUGFzdGUiCittc2dzdHIgItCf0L7RgdGC0LDQstGP0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyNzk0IGdpdC1ndWkuc2g6MzQwOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjgKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzkKK21zZ2lkICJEZWxldGUiCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyNzk4IGdpdC1ndWkuc2g6MzQxMiBnaXQtZ3VpLnNoOjM1NjYgbGliL2NvbnNvbGUudGNsOjcxCittc2dpZCAiU2VsZWN0IEFsbCIKK21zZ3N0ciAi0JjQt9Cx0LjRgNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQviIKKworIzogZ2l0LWd1aS5zaDoyODA3Cittc2dpZCAiQ3JlYXRlLi4uIgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LXigKYiCisKKyM6IGdpdC1ndWkuc2g6MjgxMworbXNnaWQgIkNoZWNrb3V0Li4uIgorbXNnc3RyICLQmNC30YLQtdCz0LvRj9C90LXigKYiCisKKyM6IGdpdC1ndWkuc2g6MjgxOQorbXNnaWQgIlJlbmFtZS4uLiIKK21zZ3N0ciAi0J/RgNC10LjQvNC10L3Rg9Cy0LDQvdC14oCmIgorCisjOiBnaXQtZ3VpLnNoOjI4MjQKK21zZ2lkICJEZWxldGUuLi4iCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QteKApiIKKworIzogZ2l0LWd1aS5zaDoyODI5Cittc2dpZCAiUmVzZXQuLi4iCittc2dzdHIgItCe0YLQvNGP0L3QsCDQvdCwINC/0YDQvtC80LXQvdC40YLQteKApiIKKworIzogZ2l0LWd1aS5zaDoyODM5Cittc2dpZCAiRG9uZSIKK21zZ3N0ciAi0JPQvtGC0L7QstC+IgorCisjOiBnaXQtZ3VpLnNoOjI4NDEKK21zZ2lkICJDb21taXRAQHZlcmIiCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6Mjg1MCBnaXQtZ3VpLnNoOjMzMzUKK21zZ2lkICJOZXcgQ29tbWl0IgorbXNnc3RyICLQndC+0LLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjI4NTggZ2l0LWd1aS5zaDozMzQyCittc2dpZCAiQW1lbmQgTGFzdCBDb21taXQiCittc2dzdHIgItCf0L7Qv9GA0LDQstGP0L3QtSDQvdCwINC/0L7RgdC70LXQtNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6Mjg2OCBnaXQtZ3VpLnNoOjMyOTYgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDEKK21zZ2lkICJSZXNjYW4iCittc2dzdHIgItCe0LHQvdC+0LLRj9Cy0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjI4NzQKK21zZ2lkICJTdGFnZSBUbyBDb21taXQiCittc2dzdHIgItCa0YrQvCDQuNC90LTQtdC60YHQsCDQt9CwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6Mjg4MAorbXNnaWQgIlN0YWdlIENoYW5nZWQgRmlsZXMgVG8gQ29tbWl0IgorbXNnc3RyICLQktGB0LjRh9C60Lgg0L/RgNC+0LzQtdC90LXQvdC4INGE0LDQudC70L7QstC1INC60YrQvCDQuNC90LTQtdC60YHQsCDQt9CwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6Mjg4NgorbXNnaWQgIlVuc3RhZ2UgRnJvbSBDb21taXQiCittc2dzdHIgItCY0LfQstCw0LbQtNCw0L3QtSDQvtGCINC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyODkyIGxpYi9pbmRleC50Y2w6NDQyCittc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCittc2dzdHIgItCS0YDRitGJ0LDQvdC1INC90LAg0L7RgNC40LPQuNC90LDQu9CwIgorCisjOiBnaXQtZ3VpLnNoOjI5MDAgZ2l0LWd1aS5zaDozNjEzIGdpdC1ndWkuc2g6MzY0NAorbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgorbXNnc3RyICLQn9C+LdC80LDQu9C60L4g0LrQvtC90YLQtdC60YHRgiIKKworIzogZ2l0LWd1aS5zaDoyOTA0IGdpdC1ndWkuc2g6MzYxNyBnaXQtZ3VpLnNoOjM2NDgKK21zZ2lkICJTaG93IE1vcmUgQ29udGV4dCIKK21zZ3N0ciAi0J/QvtCy0LXRh9C1INC60L7QvdGC0LXQutGB0YIiCisKKyM6IGdpdC1ndWkuc2g6MjkxMSBnaXQtZ3VpLnNoOjMzMDkgZ2l0LWd1aS5zaDozNDIzCittc2dpZCAiU2lnbiBPZmYiCittc2dzdHIgItCf0L7QtNC/0LjRgdCy0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjI5MjcKK21zZ2lkICJMb2NhbCBNZXJnZS4uLiIKK21zZ3N0ciAi0JvQvtC60LDQu9C90L4g0YHQu9C40LLQsNC90LXigKYiCisKKyM6IGdpdC1ndWkuc2g6MjkzMgorbXNnaWQgIkFib3J0IE1lcmdlLi4uIgorbXNnc3RyICLQn9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUg0L3QsCDRgdC70LjQstCw0L3QteKApiIKKworIzogZ2l0LWd1aS5zaDoyOTQ0IGdpdC1ndWkuc2g6Mjk3MgorbXNnaWQgIkFkZC4uLiIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QteKApiIKKworIzogZ2l0LWd1aS5zaDoyOTQ4Cittc2dpZCAiUHVzaC4uLiIKK21zZ3N0ciAi0JjQt9GC0LvQsNGB0LrQstCw0L3QteKApiIKKworIzogZ2l0LWd1aS5zaDoyOTUyCittc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKK21zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LrQu9C+0L3igKYiCisKKyM6IGdpdC1ndWkuc2g6Mjk2MiBnaXQtZ3VpLnNoOjM1OTUKK21zZ2lkICJPcHRpb25zLi4uIgorbXNnc3RyICLQntC/0YbQuNC44oCmIgorCisjOiBnaXQtZ3VpLnNoOjI5NzMKK21zZ2lkICJSZW1vdmUuLi4iCittc2dzdHIgItCf0YDQtdC80LDRhdCy0LDQvdC14oCmIgorCisjOiBnaXQtZ3VpLnNoOjI5ODIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NQorbXNnaWQgIkhlbHAiCittc2dzdHIgItCf0L7QvNC+0YkiCisKKyM6IGdpdC1ndWkuc2g6Mjk4NiBnaXQtZ3VpLnNoOjI5OTAgbGliL2Fib3V0LnRjbDoxNAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvdXQgJXMiCittc2dzdHIgItCe0YLQvdC+0YHQvdC+ICVzIgorCisjOiBnaXQtZ3VpLnNoOjMwMTQKK21zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKK21zZ3N0ciAi0JTQvtC60YPQvNC10L3RgtCw0YbQuNGPINCyINCY0L3RgtC10YDQvdC10YIiCisKKyM6IGdpdC1ndWkuc2g6MzAxNyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjEKK21zZ2lkICJTaG93IFNTSCBLZXkiCittc2dzdHIgItCf0L7QutCw0LfQstCw0L3QtSDQvdCwINC60LvRjtGH0LAg0LfQsCBTU0giCisKKyM6IGdpdC1ndWkuc2g6MzAzMiBnaXQtZ3VpLnNoOjMxNjQKK21zZ2lkICJ1c2FnZToiCittc2dzdHIgItGD0L/QvtGC0YDQtdCx0LA6IgorCisjOiBnaXQtZ3VpLnNoOjMwMzYgZ2l0LWd1aS5zaDozMTY4Cittc2dpZCAiVXNhZ2UiCittc2dzdHIgItCj0L/QvtGC0YDQtdCx0LAiCisKKyM6IGdpdC1ndWkuc2g6MzExNyBsaWIvYmxhbWUudGNsOjU3MworbXNnaWQgIkVycm9yIgorbXNnc3RyICLQk9GA0LXRiNC60LAiCisKKyM6IGdpdC1ndWkuc2g6MzE0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBjYW5ub3Qgc3RhdCBwYXRoICVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgorbXNnc3RyICIiCisi0KTQkNCi0JDQm9Cd0JAg0JPQoNCV0KjQmtCQOiDQv9GK0YLRj9GCICVzINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YI6INGC0LDQutGK0LIg0YTQsNC50Lsg0LjQu9C4INC00LjRgNC10LrRgtC+0YDQuNGPICIKKyLQvdGP0LzQsCIKKworIzogZ2l0LWd1aS5zaDozMTgxCittc2dpZCAiQ3VycmVudCBCcmFuY2g6IgorbXNnc3RyICLQotC10LrRg9GJINC60LvQvtC9OiIKKworIzogZ2l0LWd1aS5zaDozMjA2Cittc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90Lgg0LjQt9Cy0YrQvSDQuNC90LTQtdC60YHQsCIKKworIzogZ2l0LWd1aS5zaDozMjI4Cittc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90Lgg0LIg0LjQvdC00LXQutGB0LAgKNC30LAg0L/QvtC00LDQstCw0L3QtSkiCisKKyM6IGdpdC1ndWkuc2g6MzMwMgorbXNnaWQgIlN0YWdlIENoYW5nZWQiCittc2dzdHIgItCY0L3QtNC10LrRgdGK0YIg0LUg0L/RgNC+0LzQtdC90LXQvSIKKworIzogZ2l0LWd1aS5zaDozMzIxIGxpYi90cmFuc3BvcnQudGNsOjEzNworbXNnaWQgIlB1c2giCittc2dzdHIgItCY0LfRgtC70LDRgdC60LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6MzM1NgorbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLQn9GK0YDQstC+0L3QsNGH0LDQu9C90L4g0YHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1OiIKKworIzogZ2l0LWd1aS5zaDozMzU3Cittc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgItCf0L7Qv9GA0LDQstC10L3QviDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LU6IgorCisjOiBnaXQtZ3VpLnNoOjMzNTgKK21zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLQn9C+0L/RgNCw0LLQtdC90L4g0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+INGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtToiCisKKyM6IGdpdC1ndWkuc2g6MzM1OQorbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLQn9C+0L/RgNCw0LLQtdC90L4g0YHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1INGB0YrRgSDRgdC70LjQstCw0L3QtToiCisKKyM6IGdpdC1ndWkuc2g6MzM2MAorbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi0KHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1INGB0YrRgSDRgdC70LjQstCw0L3QtToiCisKKyM6IGdpdC1ndWkuc2g6MzM2MQorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi0KHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1OiIKKworIzogZ2l0LWd1aS5zaDozNDE1IGdpdC1ndWkuc2g6MzU3MCBsaWIvY29uc29sZS50Y2w6NzMKK21zZ2lkICJDb3B5IEFsbCIKK21zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQviIKKworIzogZ2l0LWd1aS5zaDozNDM5IGxpYi9ibGFtZS50Y2w6MTA1Cittc2dpZCAiRmlsZToiCittc2dzdHIgItCk0LDQudC7OiIKKworIzogZ2l0LWd1aS5zaDozNTU4Cittc2dpZCAiUmVmcmVzaCIKK21zZ3N0ciAi0J7QsdC90L7QstGP0LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6MzU3OQorbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAi0J/Qvi3QtdC00YrRgCDRiNGA0LjRhNGCIgorCisjOiBnaXQtZ3VpLnNoOjM1ODMKK21zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCittc2dzdHIgItCf0L4t0LTRgNC10LHQtdC9INGI0YDQuNGE0YIiCisKKyM6IGdpdC1ndWkuc2g6MzU5MSBsaWIvYmxhbWUudGNsOjI5NAorbXNnaWQgIkVuY29kaW5nIgorbXNnc3RyICLQmtC+0LTQuNGA0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjM2MDIKK21zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCittc2dzdHIgItCf0YDQuNC70LDQs9Cw0L3QtS/QstGA0YrRidCw0L3QtSDQvdCwINC/0LDRgNGH0LUiCisKKyM6IGdpdC1ndWkuc2g6MzYwNworbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKK21zZ3N0ciAi0J/RgNC40LvQsNCz0LDQvdC1L9Cy0YDRitGJ0LDQvdC1INC90LAg0YDQtdC0IgorCisjOiBnaXQtZ3VpLnNoOjM2MjYKK21zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKK21zZ3N0ciAi0JjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQv9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9CwINGB0LvQuNCy0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjM2MzEKK21zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCittc2dzdHIgItCS0LXRgNGB0LjRjyDQvtGCINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGdpdC1ndWkuc2g6MzYzNQorbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgorbXNnc3RyICLQm9C+0LrQsNC70L3QsCDQstC10YDRgdC40Y8iCisKKyM6IGdpdC1ndWkuc2g6MzYzOQorbXNnaWQgIlJldmVydCBUbyBCYXNlIgorbXNnc3RyICLQktGA0YrRidCw0L3QtSDQutGK0Lwg0YDQvtC00LjRgtC10LvRgdC60LDRgtCwINCy0LXRgNGB0LjRjyIKKworIzogZ2l0LWd1aS5zaDozNjU3Cittc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAi0JLQuNC30YPQsNC70LjQt9C40YDQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0LIg0L/QvtC00LzQvtC00YPQu9CwIgorCisjOiBnaXQtZ3VpLnNoOjM2NjEKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICLQktC40LfRg9Cw0LvQuNC30LDRhtC40Y8g0L3QsCDQuNGB0YLQvtGA0LjRj9GC0LAg0L3QsCDRgtC10LrRg9GJ0LjRjyDQutC70L7QvSDQsiDQuNGB0YLQvtGA0LjRj9GC0LAg0LfQsCDQv9C+0LTQvNC+0LTRg9C70LAiCisKKyM6IGdpdC1ndWkuc2g6MzY2NQorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAi0JLQuNC30YPQsNC70LjQt9Cw0YbQuNGPINC90LAg0LjRgdGC0L7RgNC40Y/RgtCwINC90LAg0LLRgdC40YfQutC4INC60LvQvtC90Lgg0LIg0LjRgdGC0L7RgNC40Y/RgtCwINC30LAg0L/QvtC00LzQvtC00YPQu9CwIgorCisjOiBnaXQtZ3VpLnNoOjM2NzAKK21zZ2lkICJTdGFydCBnaXQgZ3VpIEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgItCh0YLQsNGA0YLQuNGA0LDQvdC1INC90LAg4oCeZ2l0IGd1aeKAnCDQt9CwINC/0L7QtNC80L7QtNGD0LvQsCIKKworIzogZ2l0LWd1aS5zaDozNzA1Cittc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgorbXNnc3RyICLQmNC30LLQsNC20LTQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQvtGCINC/0L7QtNCw0LLQsNC90LXRgtC+IgorCisjOiBnaXQtZ3VpLnNoOjM3MDcKK21zZ2lkICJVbnN0YWdlIExpbmVzIEZyb20gQ29tbWl0IgorbXNnc3RyICLQmNC30LLQsNC20LTQsNC90LUg0L3QsCDRgNC10LTQvtCy0LXRgtC1INC+0YIg0L/QvtC00LDQstCw0L3QtdGC0L4iCisKKyM6IGdpdC1ndWkuc2g6MzcwOQorbXNnaWQgIlVuc3RhZ2UgTGluZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAi0JjQt9Cy0LDQttC00LDQvdC1INC90LAg0YDQtdC00LAg0L7RgiDQv9C+0LTQsNCy0LDQvdC10YLQviIKKworIzogZ2l0LWd1aS5zaDozNzEyCittc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjM3MTQKK21zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0YDQtdC00L7QstC10YLQtSDQt9CwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6MzcxNgorbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGA0LXQtNCwINC30LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDozNzQxCittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC14oCmIgorCisjOiBnaXQtZ3VpLnNoOjM4ODYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisi0JLRitC30LzQvtC20L3QviDQtSDQtNCwINC40LzQsCDQv9GA0L7QsdC70LXQvCDRgdGK0YEg0YHRgNC10LTQsNGC0LAuXG4iCisiXG4iCisi0J3QsNC5LdCy0LXRgNC+0Y/RgtC90L4g0YHQu9C10LTQvdC40YLQtSDQv9GA0L7QvNC10L3Qu9C40LLQuCDQvdGP0LzQsCDQtNCwINCx0YrQtNCw0YJcbiIKKyLQstC30LXRgtC4INC/0L7QtCDQstC90LjQvNCw0L3QuNC1INC+0YIg0L/QvtC00L/RgNC+0YbQtdGB0LjRgtC1INC90LAgR2l0XG4iCisi0L7RgiAlczpcbiIKKyJcbiIKKworIzogZ2l0LWd1aS5zaDozOTE1Cittc2dpZCAiIgorIlxuIgorIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKKyJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCittc2dzdHIgIiIKKyJcbiIKKyLQotC+0LLQsCDQtSDQv9C+0LfQvdCw0YIg0L/RgNC+0LHQu9C10Lwg0Lgg0YHQtSDQtNGK0LvQttC4INC90LBcbiIKKyLQstC10YDRgdC40Y/RgtCwINC90LAgVGNsINCy0LrQu9GO0YfQtdC90LAg0LIgQ3lnd2luLiIKKworIzogZ2l0LWd1aS5zaDozOTIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIkEgZ29vZCByZXBsYWNlbWVudCBmb3IgJXNcbiIKKyJpcyBwbGFjaW5nIHZhbHVlcyBmb3IgdGhlIHVzZXIubmFtZSBhbmRcbiIKKyJ1c2VyLmVtYWlsIHNldHRpbmdzIGludG8geW91ciBwZXJzb25hbFxuIgorIn4vLmdpdGNvbmZpZyBmaWxlLlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisi0JTQvtCx0YrRgCDQt9Cw0LzQtdGB0YLQuNGC0LXQuyDQvdCwIOKAniVz4oCcXG4iCisi0LUg0LTQsCDQv9C+0YHRgtCw0LLQuNGC0LUg0L3QsNGB0YLRgNC+0LnQutC40YLQtSDigJ51c2VyLm5hbWXigJwg0LhcbiIKKyLigJ51c2VyLmVtYWls4oCcINCyINC70LjRh9C90LjRjyDRgdC4INGE0LDQudC7IOKAnn4vLmdpdGNvbmZpZ+KAnC5cbiIKKworIzogbGliL2Fib3V0LnRjbDoyNgorbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKK21zZ3N0ciAiZ2l0LWd1aSDigJQg0LPRgNCw0YTQuNGH0LXQvSDQuNC90YLQtdGA0YTQtdC50YEg0LfQsCBHaXQuIgorCisjOiBsaWIvYmxhbWUudGNsOjczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgKCVzKTogRmlsZSBWaWV3ZXIiCittc2dzdHIgIiVzICglcyk6INCf0YDQtdCz0LvQtdC0INC90LAg0YTQsNC50LvQvtCy0LUiCisKKyM6IGxpYi9ibGFtZS50Y2w6NzkKK21zZ2lkICJDb21taXQ6IgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC1OiIKKworIzogbGliL2JsYW1lLnRjbDoyODAKK21zZ2lkICJDb3B5IENvbW1pdCIKK21zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg0Cittc2dpZCAiRmluZCBUZXh0Li4uIgorbXNnc3RyICLQotGK0YDRgdC10L3QtSDQvdCwINGC0LXQutGB0YLigKYiCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg4Cittc2dpZCAiR290byBMaW5lLi4uIgorbXNnc3RyICLQmtGK0Lwg0YDQtdC04oCmIgorCisjOiBsaWIvYmxhbWUudGNsOjI5NworbXNnaWQgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iCittc2dzdHIgItCf0YrQu9C90L4g0YLRitGA0YHQtdC90LUg0L3QsCDQutC+0L/QuNGA0LDQvdC1IgorCisjOiBsaWIvYmxhbWUudGNsOjMwMQorbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgorbXNnc3RyICLQn9C+0LrQsNC30LLQsNC90LUg0L3QsCDQutC+0L3RgtC10LrRgdGC0LAg0L7RgiDQuNGB0YLQvtGA0LjRj9GC0LAiCisKKyM6IGxpYi9ibGFtZS50Y2w6MzA0Cittc2dpZCAiQmxhbWUgUGFyZW50IENvbW1pdCIKK21zZ3N0ciAi0JDQvdC+0YLQuNGA0LDQvdC1INC90LAg0YDQvtC00LjRgtC10LvRgdC60L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGxpYi9ibGFtZS50Y2w6NDY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVhZGluZyAlcy4uLiIKK21zZ3N0ciAi0KfQtdGC0LUg0YHQtSDigJ4lc+KAnOKApiIKKworIzogbGliL2JsYW1lLnRjbDo1OTQKK21zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAi0JfQsNGA0LXQttC00LDQvdC1INC90LAg0LDQvdC+0YLQsNGG0LjQuNGC0LUg0LfQsCDQv9GA0L7RgdC70LXQtNGP0LLQsNC90LUg0L3QsCDQutC+0L/QuNGA0LDQvdC10YLQvi/Qv9GA0LXQvNC10YHRgtCy0LDQvdC10YLQvuKApiIKKworIzogbGliL2JsYW1lLnRjbDo2MTQKK21zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCittc2dzdHIgItGA0LXQtNCwINCw0L3QvtGC0LjRgNCw0L3QuCIKKworIzogbGliL2JsYW1lLnRjbDo4MDYKK21zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgorbXNnc3RyICLQl9Cw0YDQtdC20LTQsNC90LUg0L3QsCDQsNC90L7RgtCw0YbQuNC40YLQtSDQt9CwINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQteKApiIKKworIzogbGliL2JsYW1lLnRjbDo4MDkKK21zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKK21zZ3N0ciAi0JDQvdC+0YLQuNGA0LDQvdC10YLQviDQt9Cw0LLRitGA0YjQuC4iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODM5Cittc2dpZCAiQnVzeSIKK21zZ3N0ciAi0J7Qv9C10YDQsNGG0LjRj9GC0LAg0L3QtSDQtSDQt9Cw0LLRitGA0YjQuNC70LAiCisKKyM6IGxpYi9ibGFtZS50Y2w6ODQwCittc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGC0LXRh9C1INC/0YDQvtGG0LXRgSDQvdCwINCw0L3QvtGC0LjRgNCw0L3QtS4iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODc5Cittc2dpZCAiUnVubmluZyB0aG9yb3VnaCBjb3B5IGRldGVjdGlvbi4uLiIKK21zZ3N0ciAi0JjQt9C/0YrQu9C90Y/QstCwINGB0LUg0YbRj9C70L7RgdGC0LXQvSDQv9GA0L7RhtC10YEg0L3QsCDQvtGC0LrRgNC40LLQsNC90LUg0L3QsCDQutC+0L/QuNGA0LDQvdC14oCmIgorCisjOiBsaWIvYmxhbWUudGNsOjk0NworbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKK21zZ3N0ciAi0JfQsNGA0LXQttC00LDQvdC1INC90LAg0LDQvdC+0YLQsNGG0LjQuOKApiIKKworIzogbGliL2JsYW1lLnRjbDoxMDAwCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAi0JDQstGC0L7RgDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTAwNAorbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgItCf0L7QtNCw0Ls6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwMDkKK21zZ2lkICJPcmlnaW5hbCBGaWxlOiIKK21zZ3N0ciAi0J/RitGA0LLQvtC90LDRh9Cw0LvQtdC9INGE0LDQudC7OiIKKworIzogbGliL2JsYW1lLnRjbDoxMDU3Cittc2dpZCAiQ2Fubm90IGZpbmQgSEVBRCBjb21taXQ6IgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC10YLQviDQt9CwINCy0YDRitGFIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC60YDQuNC1OiIKKworIzogbGliL2JsYW1lLnRjbDoxMTEyCittc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCittc2dzdHIgItCg0L7QtNC40YLQtdC70YHQutC+0YLQviDQv9C+0LTQsNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQviIKKworIzogbGliL2JsYW1lLnRjbDoxMTI3Cittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgorbXNnc3RyICLQoNC+0LTQuNGC0LXQu9GP0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7QutCw0LfQsNC9IgorCisjOiBsaWIvYmxhbWUudGNsOjExMjggbGliL2RpZmYudGNsOjM1OAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNGA0LXQttC00LDQvdC1INC90LAg0YDQsNC30LvQuNC60LA6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyNjkKK21zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKK21zZ3N0ciAi0J/RitGA0LLQvtC90LDRh9Cw0LvQvdC+INC+0YI6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyNzUKK21zZ2lkICJJbiBGaWxlOiIKK21zZ3N0ciAi0JLRitCyINGE0LDQudC7OiIKKworIzogbGliL2JsYW1lLnRjbDoxMjgwCittc2dpZCAiQ29waWVkIE9yIE1vdmVkIEhlcmUgQnk6IgorbXNnc3RyICLQmtC+0L/QuNGA0LDQvdC+INC40LvQuCDQv9GA0LXQvNC10YHRgtC10L3QviDRgtGD0Log0L7RgjoiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgKCVzKTogQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICIlcyAoJXMpOiDQmtC70L7QvSDQt9CwINC40LfRgtC10LPQu9GP0L3QtSIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjEKK21zZ2lkICJDaGVja291dCBCcmFuY2giCittc2dzdHIgItCa0LvQvtC9INC30LAg0LjQt9GC0LXQs9C70Y/QvdC1IgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNgorbXNnaWQgIkNoZWNrb3V0IgorbXNnc3RyICLQmNC30YLQtdCz0LvRj9C90LUiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMwIGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNyBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzQKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6MjkyIGxpYi9jaGVja291dF9vcC50Y2w6NTc5CisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQ1IGxpYi9tZXJnZS50Y2w6MTc4IGxpYi9vcHRpb24udGNsOjEyNworIzogbGliL3JlbW90ZV9hZGQudGNsOjM0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDMgbGliL3Rvb2xzX2RsZy50Y2w6NDEKKyM6IGxpYi90b29sc19kbGcudGNsOjIwMiBsaWIvdG9vbHNfZGxnLnRjbDozNDUgbGliL3RyYW5zcG9ydC50Y2w6MTQxCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICLQntGC0LrQsNC30LLQsNC90LUiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM1IGxpYi9icm93c2VyLnRjbDoyOTcgbGliL3Rvb2xzX2RsZy50Y2w6MzIxCittc2dpZCAiUmV2aXNpb24iCittc2dzdHIgItCS0LXRgNGB0LjRjyIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzkgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjMxMAorbXNnaWQgIk9wdGlvbnMiCittc2dzdHIgItCe0L/RhtC40LgiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgorbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAi0JjQt9GC0LXQs9C70Y/QvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INC+0YIg0YHQu9C10LTQtdC90LjRjyDQutC70L7QvSIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDcKK21zZ2lkICJEZXRhY2ggRnJvbSBMb2NhbCBCcmFuY2giCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvtGCINC70L7QutCw0LvQvdC40Y8g0LrQu9C+0L0iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IENyZWF0ZSBCcmFuY2giCittc2dzdHIgIiVzICglcyk6INCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC60LvQvtC9IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjgKK21zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0L3QvtCyINC60LvQvtC9IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MDcKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQyCittc2dpZCAiQnJhbmNoIE5hbWUiCittc2dzdHIgItCY0LzQtSDQvdCwINC60LvQvtC90LAiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0NCBsaWIvcmVtb3RlX2FkZC50Y2w6NDEgbGliL3Rvb2xzX2RsZy50Y2w6NTEKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAi0JjQvNC1OiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjU3Cittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoIE5hbWUiCittc2dzdHIgItCh0YrQstC/0LDQtNCw0L3QtSDQv9C+INC40LzQtdGC0L4g0L3QsCDRgdC70LXQtNC10L3QuNGPINC60LvQvtC9IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKK21zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKK21zZ3N0ciAi0J3QsNGH0LDQu9C90LAg0LLQtdGA0YHQuNGPIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzIKK21zZ2lkICJVcGRhdGUgRXhpc3RpbmcgQnJhbmNoOiIKK21zZ3N0ciAi0J7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDRgdGK0YnQtdGB0YLQstGD0LLQsNGJINC60LvQvtC9OiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjc1Cittc2dpZCAiTm8iCittc2dzdHIgItCd0LUiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAorbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgorbXNnc3RyICLQodCw0LzQviDRgtGA0LjQstC40LDQu9C90L4g0L/RgNC10LLRitGA0YLQsNGJ0L4g0YHQu9C40LLQsNC90LUiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MQorbXNnaWQgIlJlc2V0IgorbXNnc3RyICLQntGC0L3QsNGH0LDQu9C+IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTcKK21zZ2lkICJDaGVja291dCBBZnRlciBDcmVhdGlvbiIKK21zZ3N0ciAi0J/RgNC10LzQuNC90LDQstCw0L3QtSDQutGK0Lwg0LrQu9C+0L3QsCDRgdC70LXQtCDRgdGK0LfQtNCw0LLQsNC90LXRgtC+INC80YMiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzIKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKK21zZ3N0ciAi0JjQt9Cx0LXRgNC10YLQtSDQutC70L7QvSDQt9CwINGB0LvQtdC00LXQvdC4LiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRyYWNraW5nIGJyYW5jaCAlcyBpcyBub3QgYSBicmFuY2ggaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiIKK21zZ3N0ciAi0KHQu9C10LTRj9GJ0LjRj9GCINC60LvQvtC9IOKAlCDigJ4lc+KAnCwg0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQsiDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1LiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1NCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTIKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIgorbXNnc3RyICLQlNCw0LnRgtC1INC40LzQtSDQvdCwINC60LvQvtC90LAuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTY1IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDQt9CwINC40LzQtSDQvdCwINC60LvQvtC9LiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgKCVzKTogRGVsZXRlIEJyYW5jaCIKK21zZ3N0ciAiJXMgKCVzKTog0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LrQu9C+0L0iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMQorbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC70L7QutCw0LvQtdC9INC60LvQvtC9IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzkKK21zZ2lkICJMb2NhbCBCcmFuY2hlcyIKK21zZ3N0ciAi0JvQvtC60LDQu9C90Lgg0LrQu9C+0L3QuCIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUxCittc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSwg0YHQsNC80L4g0LDQutC+INC/0YDQvtC80LXQvdC40YLQtSDRgdCwINGB0LvQtdGC0Lgg0Lgg0LTRgNGD0LPQsNC00LUiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MyBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjEyMAorbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKK21zZ3N0ciAi0JLQuNC90LDQs9C4ICjQsdC10Lcg0L/RgNC+0LLQtdGA0LrQsCDQt9CwINGB0LvQuNCy0LDQvdC1KSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKK21zZ3N0ciAi0J3QtSDQstGB0LjRh9C60Lgg0L/RgNC+0LzQtdC90Lgg0LIg0LrQu9C+0L3QuNGC0LUg0YHQsCDRgdC70LXRgtC4INCyIOKAniVz4oCcOiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjExNSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxOAorbXNnaWQgIiIKKyJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgorIlxuIgorIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorbXNnc3RyICIiCisi0JLRitC30YHRgtCw0L3QvtCy0Y/QstCw0L3QtdGC0L4g0L3QsCDQuNC30YLRgNC40YLQuCDQutC70L7QvdC4INC80L7QttC1INC00LAg0LUg0YLRgNGD0LTQvdC+LlxuIgorIlxuIgorItCh0LjQs9GD0YDQvdC4INC70Lgg0YHRgtC1LCDRh9C1INC40YHQutCw0YLQtSDQtNCwINGC0YDQuNC10YLQtT8iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgLSAlczoiCittc2dzdHIgIiDigJQg4oCeJXM64oCcIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90L4g0YLRgNC40LXQvdC1INC90LAg0LrQu9C+0L3QuDpcbiIKKyIlcyIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgKCVzKTogUmVuYW1lIEJyYW5jaCIKK21zZ3N0ciAiJXMgKCVzKTog0J/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0LrQu9C+0L0iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMworbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgItCf0YDQtdC40LzQtdC90YPQstCw0L3QtSDQvdCwINC60LvQvtC9IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjgKK21zZ2lkICJSZW5hbWUiCittc2dzdHIgItCf0YDQtdC40LzQtdC90YPQstCw0L3QtSIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM4Cittc2dpZCAiQnJhbmNoOiIKK21zZ3N0ciAi0JrQu9C+0L06IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NDYKK21zZ2lkICJOZXcgTmFtZToiCittc2dzdHIgItCd0L7QstC+INC40LzQtToiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo4MQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKK21zZ3N0ciAi0JjQt9Cx0LXRgNC10YLQtSDQutC70L7QvSDQt9CwINC/0YDQtdC40LzQtdC90YPQstCw0L3QtS4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMDIgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCa0LvQvtC90YrRgiDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg4oCeJXPigJwuIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTcKK21zZ2lkICJTdGFydGluZy4uLiIKK21zZ3N0ciAi0KHRgtCw0YDRgtC40YDQsNC90LXigKYiCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IEZpbGUgQnJvd3NlciIKK21zZ3N0ciAiJXMgKCVzKTog0KTQsNC50LvQvtCyINCx0YDQsNGD0LfRitGAIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTMyIGxpYi9icm93c2VyLnRjbDoxNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nICVzLi4uIgorbXNnc3RyICLQl9Cw0YDQtdC20LTQsNC90LUg0L3QsCDigJ4lc+KAnOKApiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE5MworbXNnaWQgIltVcCBUbyBQYXJlbnRdIgorbXNnc3RyICJb0JrRitC8INGA0L7QtNC40YLQtdC70Y9dIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6Mjc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgKCVzKTogQnJvd3NlIEJyYW5jaCBGaWxlcyIKK21zZ3N0ciAiJXMgKCVzKTog0KDQsNC30LPQu9C10LbQtNCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSDQsiDQutC70L7QvdCwIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MjgyCittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKK21zZ3N0ciAi0KDQsNC30LPQu9C10LbQtNCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSDQsiDQutC70L7QvdCwIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6Mjg4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDIyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwOSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxOAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDc0Cittc2dpZCAiQnJvd3NlIgorbXNnc3RyICLQoNCw0LfQs9C70LXQttC00LDQvdC1IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKK21zZ3N0ciAi0JTQvtGB0YLQsNCy0Y/QvdC1INC90LAg4oCeJXPigJwg0L7RgiDigJ4lc+KAnCIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCittc2dzdHIgItGE0LDRgtCw0LvQvdCwINCz0YDQtdGI0LrQsDog4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC60YDQuNC1IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMAorIzogbGliL3NzaGtleS50Y2w6NTUKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAi0JfQsNGC0LLQsNGA0Y/QvdC1IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAi0JrQu9C+0L3RitGCIOKAniVz4oCcINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQvdCw0YHRgtGA0L7QudCy0LDQvdC1INC90LAg0L7Qv9GA0L7RgdGC0LXQvSBnaXQtcHVsbCDQt9CwIOKAniVz4oCcLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCisiXG4iCisiSXQgY2Fubm90IGZhc3QtZm9yd2FyZCB0byAlcy5cbiIKKyJBIG1lcmdlIGlzIHJlcXVpcmVkLiIKK21zZ3N0ciAiIgorItCa0LvQvtC90YrRgiDigJ4lc+KAnCDRgdGK0YnQtdGB0YLQstGD0LLQsC5cbiIKKyJcbiIKKyLQotC+0Lkg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGC0YDQuNCy0LjQsNC70L3QviDRgdC70Y/RgiDQtNC+IOKAniVz4oCcLlxuIgorItCd0LXQvtCx0YXQvtC00LjQvNC+INC1INGB0LvQuNCy0LDQvdC1LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICLQodGC0YDQsNGC0LXQs9C40Y8g0LfQsCDRgdC70LjQstCw0L3QtSAg4oCeJXPigJwg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwIOKAniVz4oCcLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKK21zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCittc2dzdHIgItCY0L3QtNC10LrRgdGK0YIg0LLQtdGH0LUg0LUg0LfQsNC60LvRjtGH0LXQvS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyLQodGK0YHRgtC+0Y/QvdC40LXRgtC+INC/0YDQuCDQv9C+0YHQu9C10LTQvdCw0YLQsCDQv9GA0L7QstC10YDQutCwINC90LUg0L7RgtCz0L7QstCw0YDRjyDQvdCwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCAiCisi0YXRgNCw0L3QuNC70LjRidC10YLQvi5cbiIKKyJcbiIKKyLQndGP0LrQvtC5INC00YDRg9CzINC/0YDQvtGG0LXRgSDQt9CwIEdpdCDQtSDQv9GA0L7QvNC10L3QuNC7INGF0YDQsNC90LjQu9C40YnQtdGC0L4g0LzQtdC20LTRg9Cy0YDQtdC80LXQvdC90L4uINCh0YrRgdGC0L7Rj9C90LjQtdGC0L4gIgorItGC0YDRj9Cx0LLQsCDQtNCwINCx0YrQtNC1INC/0YDQvtCy0LXRgNC10L3Qviwg0L/RgNC10LTQuCDQtNCwINGB0LUg0L/RgNC10LzQuNC90LUg0LrRitC8INC90L7QsiDQutC70L7QvS5cbiIKKyJcbiIKKyLQkNCy0YLQvtC80LDRgtC40YfQvdC+INGJ0LUg0LfQsNC/0L7Rh9C90LUg0L3QvtCy0LAg0L/RgNC+0LLQtdGA0LrQsC5cbiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgorbXNnc3RyICLQoNCw0LHQvtGC0L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0YHQtSDQv9GA0LjQstC10LbQtNCwINC60YrQvCDigJ4lc+KAnOKApiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDYKK21zZ2lkICJmaWxlcyBjaGVja2VkIG91dCIKK21zZ3N0ciAi0YTQsNC50LvQsCDRgdCwINC40LfRgtC10LPQu9C10L3QuCIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorbXNnc3RyICIiCisi0J/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LjQt9GC0LXQs9C70Y/QvdC10YLQviDQvdCwIOKAniVz4oCcICjQvdC10L7QsdGF0L7QtNC40LzQviDQtSDQv9C+0YTQsNC50LvQvtCy0L4g0YHQu9C40LLQsNC90LUpLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzcKK21zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKK21zZ3N0ciAi0J3QtdC+0LHRhdC+0LTQuNC80L4g0LUg0L/QvtGE0LDQudC70L7QstC+INGB0LvQuNCy0LDQvdC1LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAi0J7RgdGC0LDQstCw0L3QtSDQstGK0YDRhdGDINC60LvQvtC90LAg4oCeJXPigJwuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgorbXNnaWQgIiIKKyJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudGVkIHRvIGJlIG9uIGEgYnJhbmNoLCBjcmVhdGUgb25lIG5vdyBzdGFydGluZyBmcm9tICdUaGlzIERldGFjaGVkICIKKyJDaGVja291dCcuIgorbXNnc3RyICIiCisi0JLQtdGH0LUg0L3QtSDRgdGC0LUg0L3QsCDQu9C+0LrQsNC70LXQvSDQutC70L7QvS5cbiIKKyJcbiIKKyLQkNC60L4g0LjRgdC60LDRgtC1INC00LAg0YHRgtC1INC90LAg0LrQu9C+0L0sINGB0YrQt9C00LDQudGC0LUg0LHQsNC30LjRgNCw0L0g0L3QsCDigJ7QotC+0LLQsCDQvdC10YHQstGK0YDQt9Cw0L3QviDQuNC30YLQtdCz0LvRj9C90LXigJwuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMyBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgorbXNnc3RyICLigJ4lc+KAnCDQtSDQuNC30YLQtdCz0LvQtdC9LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgorbXNnc3RyICIiCisi0JfQsNC90YPQu9GP0LLQsNC90LXRgtC+INC90LAg4oCeJXPigJwg0LrRitC8IOKAniVz4oCcINGJ0LUg0LTQvtCy0LXQtNC1INC00L4g0LfQsNCz0YPQsdCy0LDQvdC10YLQviDQvdCwINGB0LvQtdC00L3QuNGC0LUg0L/QvtC00LDQstCw0L3QuNGPOiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NTcKK21zZ2lkICJSZWNvdmVyaW5nIGxvc3QgY29tbWl0cyBtYXkgbm90IGJlIGVhc3kuIgorbXNnc3RyICLQktGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC10YLQviDQvdCwINC30LDQs9GD0LHQtdC90LjRgtC1INC/0L7QtNCw0LLQsNC90LjRjyDQvNC+0LbQtSDQtNCwINC1INGC0YDRg9C00L3Qvi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJyVzJz8iCittc2dzdHIgItCX0LDQvdGD0LvRj9Cy0LDQvdC1INC90LAg4oCeJXPigJw/IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE3MCBsaWIvdG9vbHNfZGxnLnRjbDozMzYKK21zZ2lkICJWaXN1YWxpemUiCittc2dzdHIgItCS0LjQt9GD0LDQu9C40LfQsNGG0LjRjyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo2MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHNldCBjdXJyZW50IGJyYW5jaC5cbiIKKyJcbiIKKyJUaGlzIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG9ubHkgcGFydGlhbGx5IHN3aXRjaGVkLiAgV2Ugc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgIgorInlvdXIgZmlsZXMsIGJ1dCBmYWlsZWQgdG8gdXBkYXRlIGFuIGludGVybmFsIEdpdCBmaWxlLlxuIgorIlxuIgorIlRoaXMgc2hvdWxkIG5vdCBoYXZlIG9jY3VycmVkLiAgJXMgd2lsbCBub3cgY2xvc2UgYW5kIGdpdmUgdXAuIgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdC+INC30LDQtNCw0LLQsNC90LUg0L3QsCDRgtC10LrRg9GJ0LjRjyDQutC70L7QvS5cbiIKKyJcbiIKKyLQoNCw0LHQvtGC0L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0LUg0YHQsNC80L4g0YfQsNGB0YLQuNGH0L3QviDQvtCx0L3QvtCy0LXQvdCwOiDRhNCw0LnQu9C+0LLQtdGC0LUg0YHQsCDQvtCx0L3QvtCy0LXQvdC4ICIKKyLRg9GB0L/QtdGI0L3Qviwg0L3QviDQvdGP0LrQvtC5INC+0YIg0LLRitGC0YDQtdGI0L3QuNGC0LUsINGB0LvRg9C20LXQsdC90Lgg0YTQsNC50LvQvtCy0LUg0L3QsCBHaXQg0L3QtSDQtSDQsdC40LsuXG4iCisiXG4iCisi0KLQvtCy0LAg0YHRitGB0YLQvtGP0L3QuNC1INC1INCw0LLQsNGA0LjQudC90L4g0Lgg0L3QtSDRgtGA0Y/QsdCy0LAg0LTQsCDRgdC1INGB0LvRg9GH0LLQsC4g0J/RgNC+0LPRgNCw0LzQsNGC0LAg4oCeJXPigJwg0YnQtSAiCisi0L/RgNC10YPRgdGC0LDQvdC+0LLQuCDRgNCw0LHQvtGC0LAuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQxCittc2dpZCAiU2VsZWN0IgorbXNnc3RyICLQmNC30LHQvtGAIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjU1Cittc2dpZCAiRm9udCBGYW1pbHkiCittc2dzdHIgItCo0YDQuNGE0YIiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzYKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgItCg0LDQt9C80LXRgCIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo5MworbXNnaWQgIkZvbnQgRXhhbXBsZSIKK21zZ3N0ciAi0JzQvtGB0YLRgNCwIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwNQorbXNnaWQgIiIKKyJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKKyJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorbXNnc3RyICIiCisi0KLQvtCy0LAg0LUg0L/RgNC40LzQtdGA0LXQvSDRgtC10LrRgdGCLlxuIgorItCQ0LrQviDQstC4INGF0LDRgNC10YHQstCwINC60LDQuiDQuNC30LPQu9C10LbQtNCwLCDQuNC30LHQtdGA0LXRgtC1INGI0YDQuNGE0YLQsC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzMKK21zZ2lkICJHaXQgR3VpIgorbXNnc3RyICLQk9Cf0Jgg0L3QsCBHaXQiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MTIKK21zZ2lkICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC90L7QstC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5OAorbXNnaWQgIk5ldy4uLiIKK21zZ3N0ciAi0J3QvtCy0L7igKYiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk2Cittc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKK21zZ3N0ciAi0JrQu9C+0L3QuNGA0LDQvdC1INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTYKK21zZ2lkICJDbG9uZS4uLiIKK21zZ3N0ciAi0JrQu9C+0L3QuNGA0LDQvdC14oCmIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjQKK21zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgItCe0YLQstCw0YDRj9C90LUg0L3QsCDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyOQorbXNnaWQgIk9wZW4uLi4iCittc2dzdHIgItCe0YLQstCw0YDRj9C90LXigKYiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTQyCittc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKK21zZ3N0ciAi0KHQutC+0YDQviDQv9C+0LvQt9Cy0LDQvdC4IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE0OAorbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgorbXNnc3RyICLQntGC0LLQsNGA0Y/QvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC1INC/0L7Qu9C30LLQsNC90L4g0L3QsNGB0LrQvtGA0L46IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YHRitC30LTQsNCy0LDQvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQviDigJ4lc+KAnDoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDE3Cittc2dpZCAiRGlyZWN0b3J5OiIKK21zZ3N0ciAi0JTQuNGA0LXQutGC0L7RgNC40Y86IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU3MworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDk4Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkiCittc2dzdHIgItCl0YDQsNC90LjQu9C40YnQtSDQvdCwIEdpdCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLQktC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDigJ4lc+KAnC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCS0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINGE0LDQudC7IOKAniVz4oCcLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTEKK21zZ2lkICJDbG9uZSIKK21zZ3N0ciAi0JrQu9C+0L3QuNGA0LDQvdC1IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwNAorbXNnaWQgIlNvdXJjZSBMb2NhdGlvbjoiCittc2dzdHIgItCQ0LTRgNC10YEg0L3QsCDQuNC30YLQvtGH0L3QuNC60LA6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxMworbXNnaWQgIlRhcmdldCBEaXJlY3Rvcnk6IgorbXNnc3RyICLQptC10LvQtdCy0LAg0LTQuNGA0LXQutGC0L7RgNC40Y86IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyMworbXNnaWQgIkNsb25lIFR5cGU6IgorbXNnc3RyICLQktC40LQg0LrQu9C+0L3QuNGA0LDQvdC1OiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjgKK21zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCittc2dzdHIgItCh0YLQsNC90LTQsNGA0YLQvdC+ICjQsdGK0YDQt9C+LCDRh9Cw0YHRgtC40YfQvdC+INGB0L/QvtC00LXQu9GP0L3QtSDQvdCwINGE0LDQudC70L7QstC1LCDRgtCy0YrRgNC00Lgg0LLRgNGK0LfQutC4KSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MzMKK21zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCittc2dzdHIgItCf0YrQu9C90L4gKNCx0LDQstC90L4sINC/0YrQu9C90L7RhtC10L3QvdC+INGA0LXQt9C10YDQstC90L4g0LrQvtC/0LjQtSkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTM4Cittc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCittc2dzdHIgItCh0L/QvtC00LXQu9C10L3QviAo0L3QsNC5LdCx0YrRgNC30L4sINC90LUg0YHQtSDQv9GA0LXQv9C+0YDRitGH0LLQsCwg0L3QtSDQv9GA0LDQstC4INGA0LXQt9C10YDQstC90L4g0LrQvtC/0LjQtSkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTQ1Cittc2dpZCAiUmVjdXJzaXZlbHkgY2xvbmUgc3VibW9kdWxlcyB0b28iCittc2dzdHIgItCg0LXQutGD0YDRgdC40LLQvdC+INC60LvQvtC90LjRgNCw0L3QtSDQuCDQvdCwINC/0L7QtNC80L7QtNGD0LvQuNGC0LUiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTc5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc3MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg0MgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTA0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTExMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAi0KLQvtCy0LAg0L3QtSDQtSDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBHaXQ6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNQorbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAi0KHQsNC80L4g0LvQvtC60LDQu9C90Lgg0YXRgNCw0L3QuNC70LjRidCwINC80L7Qs9Cw0YIg0LTQsCDRgdC1INC60LvQvtC90LjRgNCw0YIg0YHRgtCw0L3QtNCw0YDRgtC90L4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE5Cittc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAi0KHQsNC80L4g0LvQvtC60LDQu9C90Lgg0YXRgNCw0L3QuNC70LjRidCwINC80L7Qs9Cw0YIg0LTQsCDRgdC1INC60LvQvtC90LjRgNCw0YIg0YHQv9C+0LTQtdC70LXQvdC+IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi0JzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtdGC0L4g4oCeJXPigJwg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY1MQorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L3QsNGB0YLRgNC+0LnQstCw0L3QtSDQvdCwINGF0YDQsNC90LjQu9C40YnQtdGC0L4t0LjQt9GC0L7Rh9C90LjQuiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NjMKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICLQn9GA0LXQsdGA0L7Rj9Cy0LDQvdC1INC90LAg0L7QsdC10LrRgtC4IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NAorbXNnaWQgImJ1Y2tldHMiCittc2dzdHIgItC60LvQtdGC0LrQuCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCittc2dzdHIgItCe0LHQtdC60YLQuNGC0LUv0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwL9GB0LjQvdC+0L3QuNC80LjRgtC1INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LrQvtC/0LjRgNCw0L3QuDogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKK21zZ3N0ciAi0J3Rj9C80LAg0LrQsNC60LLQviDQtNCwINGB0LUg0LrQu9C+0L3QuNGA0LAg0L7RgiDigJ4lc+KAnC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTQwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk1MgorbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKK21zZ3N0ciAi0J7RgdC90L7QstC90LjRj9GCINC60LvQvtC9IOKAlCDigJ5tYXN0ZXLigJwg0L3QtSDQtSDQuNC90LjRhtC40LDQu9C40LfQuNGA0LDQvS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzM5Cittc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKK21zZ3N0ciAi0J3QtSDRgdC1INC/0L7QtNC00YrRgNC20LDRgiDRgtCy0YrRgNC00Lgg0LLRgNGK0LfQutC4LiDQn9GA0LXQvNC40L3QsNCy0LAg0YHQtSDQutGK0Lwg0LrQvtC/0LjRgNCw0L3QtS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzUxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBmcm9tICVzIgorbXNnc3RyICLQmtC70L7QvdC40YDQsNC90LUg0L3QsCDigJ4lc+KAnCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODIKK21zZ2lkICJDb3B5aW5nIG9iamVjdHMiCittc2dzdHIgItCa0L7Qv9C40YDQsNC90LUg0L3QsCDQvtCx0LXQutGC0LgiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzgzCittc2dpZCAiS2lCIgorbXNnc3RyICJLaUIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC60L7Qv9C40YDQsNC90LUg0L3QsCDQvtCx0LXQutGCOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTcKK21zZ2lkICJMaW5raW5nIG9iamVjdHMiCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINCy0YDRitC30LrQuCDQutGK0Lwg0L7QsdC10LrRgtC40YLQtSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTgKK21zZ2lkICJvYmplY3RzIgorbXNnc3RyICLQvtCx0LXQutGC0LgiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDRgtCy0YrRgNC00LAg0LLRgNGK0LfQutCwINC60YrQvCDQvtCx0LXQutGCOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4ODEKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYnJhbmNoZXMgYW5kIG9iamVjdHMuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisi0JrQu9C+0L3QuNGC0LUg0Lgg0L7QsdC10LrRgtC40YLQtSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC40LfRgtC10LPQu9C10L3QuC4g0JfQsCDQv9C+0LLQtdGH0LUg0LjQvdGE0L7RgNC80LDRhtC40Y8gIgorItC/0L7Qs9C70LXQtNC90LXRgtC1INC40LfRhdC+0LTQsCDQvdCwINC60L7QvdC30L7Qu9Cw0YLQsC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkyCittc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisi0JXRgtC40LrQtdGC0LjRgtC1INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LjQt9GC0LXQs9C70LXQvdC4LiDQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQv9C+0LPQu9C10LTQvdC10YLQtSAiCisi0LjQt9GF0L7QtNCwINC90LAg0LrQvtC90LfQvtC70LDRgtCwLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTYKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIEhFQUQuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisi0JLRitGA0YXRitGCIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0L/RgNC10LTQtdC70LXQvS4g0JfQsCDQv9C+0LLQtdGH0LUg0LjQvdGE0L7RgNC80LDRhtC40Y8g0L/QvtCz0LvQtdC00L3QtdGC0LUgIgorItC40LfRhdC+0LTQsCDQvdCwINC60L7QvdC30L7Qu9Cw0YLQsC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDRh9C40YHRgtC4IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzMQorbXNnaWQgIkNsb25lIGZhaWxlZC4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQutC70L7QvdC40YDQsNC90LUuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOAorbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKK21zZ3N0ciAi0J3QtSDQtSDQv9C+0LvRg9GH0LXQvSDQutC70L7QvSDQv9C+INC/0L7QtNGA0LDQt9Cx0LjRgNCw0L3QtS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgorbXNnc3RyICLQndGP0LzQsCDQv9C+0LTQsNCy0LDQvdC1INC+0YLQs9C+0LLQsNGA0Y/RidC+INC90LAg4oCeJXPigJwuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2MQorbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDRgNCw0LHQvtGC0L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTYyIGxpYi9pbmRleC50Y2w6NzAgbGliL2luZGV4LnRjbDoxMzYKKyM6IGxpYi9pbmRleC50Y2w6MjA3Cittc2dpZCAiZmlsZXMiCittc2dzdHIgItGE0LDQudC70L7QstC1IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk4MQorbXNnaWQgIkNhbm5vdCBjbG9uZSBzdWJtb2R1bGVzLiIKK21zZ3N0ciAi0J/QvtC00LzQvtC00YPQu9C40YLQtSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDRgdC1INC60LvQvtC90LjRgNCw0YIuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk5MAorbXNnaWQgIkNsb25pbmcgc3VibW9kdWxlcyIKK21zZ3N0ciAi0JrQu9C+0L3QuNGA0LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9C4IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTUKK21zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QviDQuNC30YLQtdCz0LvRj9C90LUuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTkKK21zZ2lkICJPcGVuIgorbXNnc3RyICLQntGC0LLQsNGA0Y/QvdC1IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjkKK21zZ2lkICJSZXBvc2l0b3J5OiIKK21zZ3N0ciAi0KXRgNCw0L3QuNC70LjRidC1OiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQvtGC0LLQsNGA0Y/QvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQviDigJ4lc+KAnDoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MgorbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCittc2dzdHIgItCi0L7QstCwINC90LXRgdCy0YrRgNC30LDQvdC+INC40LfRgtC10LPQu9GP0L3QtSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjYwCittc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCittc2dzdHIgItCY0LfRgNCw0Lcg0LfQsCDQstC10YDRgdC40Y86IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzIKK21zZ2lkICJMb2NhbCBCcmFuY2giCittc2dzdHIgItCb0L7QutCw0LvQtdC9INC60LvQvtC9IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzcKK21zZ2lkICJUcmFja2luZyBCcmFuY2giCittc2dzdHIgItCh0LvQtdC00Y/RiSDQutC70L7QvSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjgyIGxpYi9jaG9vc2VfcmV2LnRjbDo1NDQKK21zZ2lkICJUYWciCittc2dzdHIgItCV0YLQuNC60LXRgiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjMyMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmV2aXNpb246ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QsCDQstC10YDRgdC40Y86ICVzIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzQyCittc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgorbXNnc3RyICLQndC1INC1INC40LfQsdGA0LDQvdCwINCy0LXRgNGB0LjRjy4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNTAKK21zZ2lkICJSZXZpc2lvbiBleHByZXNzaW9uIGlzIGVtcHR5LiIKK21zZ3N0ciAi0JjQt9GA0LDQt9GK0YIg0LfQsCDQstC10YDRgdC40Y8g0LUg0L/RgNCw0LfQtdC9LiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjUzNworbXNnaWQgIlVwZGF0ZWQiCittc2dzdHIgItCe0LHQvdC+0LLQtdC9IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTY1Cittc2dpZCAiVVJMIgorbXNnc3RyICLQkNC00YDQtdGBIgorCisjOiBsaWIvY29tbWl0LnRjbDo5Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCisiXG4iCisiWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKKyJ0byBhbWVuZC5cbiIKK21zZ3N0ciAiIgorItCd0Y/QvNCwINC60LDQutCy0L4g0LTQsCDRgdC1INC/0L7Qv9GA0LDQstC4LlxuIgorIlxuIgorItCp0LUg0YHRitC30LTQsNC00LXRgtC1INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtS4g0J/RgNC10LTQuCDQvdC10LPQviDQvdGP0LzQsCDQtNGA0YPQs9C4INC/0L7QtNCw0LLQsNC90LjRjywg0LrQvtC40YLQviAiCisi0LTQsCDQv9C+0L/RgNCw0LLQuNGC0LUuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4Cittc2dpZCAiIgorIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgorIlxuIgorIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCisiY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKKyJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorbXNnc3RyICIiCisi0J/QviDQstGA0LXQvNC1INC90LAg0YHQu9C40LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINC/0L7Qv9GA0LDQstGP0YLQtS5cbiIKKyJcbiIKKyLQkiDQvNC+0LzQtdC90YLQsCDQstGB0LUg0L7RidC1INC90LUg0YHRgtC1INC30LDQstGK0YDRiNC40LvQuCDQvtC/0LXRgNCw0YbQuNGPINC/0L4g0YHQu9C40LLQsNC90LUuINCd0LUg0LzQvtC20LUg0LTQsCDQv9C+0L/RgNCw0LLQuNGC0LUgIgorItC/0YDQtdC00LjRiNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUsINC+0YHQstC10L0g0LDQutC+INC/0YrRgNCy0L4g0L3QtSDQv9GA0LXRg9GB0YLQsNC90L7QstC40YLQtSDRgtC10LrRg9GJ0L7RgtC+INGB0LvQuNCy0LDQvdC1LlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDo0OAorbXNnaWQgIkVycm9yIGxvYWRpbmcgY29tbWl0IGRhdGEgZm9yIGFtZW5kOiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0YDQtdC20LTQsNC90LUg0L3QsCDQtNCw0L3QvdC40YLQtSDQvtGCINC/0L7QtNCw0LLQsNC90LUsINC60L7QuNGC0L4g0LTQsCDRgdC1INC/0L7Qv9GA0LDQstGP0YI6IgorCisjOiBsaWIvY29tbWl0LnRjbDo3NQorbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCittc2dzdHIgItCY0LTQtdC90YLQuNGE0LjQutCw0YbQuNGP0YLQsCDQstC4INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtC/0YDQtdC00LXQu9C10L3QsDoiCisKKyM6IGxpYi9jb21taXQudGNsOjgwCittc2dpZCAiSW52YWxpZCBHSVRfQ09NTUlUVEVSX0lERU5UOiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90L4g0L/QvtC70LUg4oCeR0lUX0NPTU1JVFRFUl9JREVOVOKAnDoiCisKKyM6IGxpYi9jb21taXQudGNsOjEyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgorbXNnc3RyICLQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiBUY2wg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC60L7QtNC40YDQsNC90LXRgtC+IOKAniVz4oCcLiIKKworIzogbGliL2NvbW1pdC50Y2w6MTQ5Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhbm90aGVyIGNvbW1pdCBjYW4gYmUgY3JlYXRlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorItCh0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L/RgNC4INC/0L7RgdC70LXQtNC90LDRgtCwINC/0YDQvtCy0LXRgNC60LAg0L3QtSDQvtGC0LPQvtCy0LDRgNGPINC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwICIKKyLRhdGA0LDQvdC40LvQuNGJ0LXRgtC+LlxuIgorIlxuIgorItCd0Y/QutC+0Lkg0LTRgNGD0LMg0L/RgNC+0YbQtdGBINC30LAgR2l0INC1INC/0YDQvtC80LXQvdC40Lsg0YXRgNCw0L3QuNC70LjRidC10YLQviDQvNC10LbQtNGD0LLRgNC10LzQtdC90L3Qvi4g0KHRitGB0YLQvtGP0L3QuNC10YLQviAiCisi0YLRgNGP0LHQstCwINC00LAg0LHRitC00LUg0L/RgNC+0LLQtdGA0LXQvdC+INC/0YDQtdC00Lgg0L3QvtCy0L4g0L/QvtC00LDQstCw0L3QtS5cbiIKKyJcbiIKKyLQkNCy0YLQvtC80LDRgtC40YfQvdC+INGJ0LUg0LfQsNC/0L7Rh9C90LUg0L3QvtCy0LAg0L/RgNC+0LLQtdGA0LrQsC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCisiYmVmb3JlIGNvbW1pdHRpbmcuXG4iCittc2dzdHIgIiIKKyLQndC10YHQu9C10YLQuNGC0LUg0YTQsNC50LvQvtCy0LUg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQv9C+0LTQsNCy0LDQvdC4LlxuIgorIlxuIgorItCS0YrQsiDRhNCw0LnQu9CwIOKAniVz4oCcINC40LzQsCDQutC+0L3RhNC70LjQutGC0Lgg0L/RgNC4INGB0LvQuNCy0LDQvdC1LiDQl9CwINC00LAg0LPQviDQv9C+0LTQsNC00LXRgtC1LCDRgtGA0Y/QsdCy0LAg0L/RitGA0LLQviDQtNCwICIKKyLQutC+0YDQuNCz0LjRgNCw0YLQtSDQutC+0L3RhNC70LjQutGC0LjRgtC1INC4INC00LAg0LTQvtCx0LDQstC40YLQtSDRhNCw0LnQu9CwINC60YrQvCDQuNC90LTQtdC60YHQsCDQt9CwINC/0L7QtNCw0LLQsNC90LUuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJVbmtub3duIGZpbGUgc3RhdGUgJXMgZGV0ZWN0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBjYW5ub3QgYmUgY29tbWl0dGVkIGJ5IHRoaXMgcHJvZ3JhbS5cbiIKK21zZ3N0ciAiIgorItCd0LXQv9C+0LfQvdCw0YLQviDRgdGK0YHRgtC+0Y/QvdC40LUg0L3QsCDRhNCw0LnQuyDigJ4lc+KAnC5cbiIKKyJcbiIKKyLQpNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7QtNCw0LTQtdC9INGH0YDQtdC3INGC0LXQutGD0YnQsNGC0LAg0L/RgNC+0LPRgNCw0LzQsC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTg5Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIllvdSBtdXN0IHN0YWdlIGF0IGxlYXN0IDEgZmlsZSBiZWZvcmUgeW91IGNhbiBjb21taXQuXG4iCittc2dzdHIgIiIKKyLQndGP0LzQsCDQv9GA0L7QvNC10L3QuCDQt9CwINC/0L7QtNCw0LLQsNC90LUuXG4iCisiXG4iCisi0KLRgNGP0LHQstCwINC00LAg0LTQvtCx0LDQstC40YLQtSDQv9C+0L3QtSDQtdC00LjQvSDRhNCw0LnQuyDQutGK0Lwg0LjQvdC00LXQutGB0LAsINC30LAg0LTQsCDQv9C+0LTQsNC00LXRgtC1LlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMDQKK21zZ2lkICIiCisiUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCisiXG4iCisiLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgorIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCisiLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgorbXNnc3RyICIiCisi0JfQsNC00LDQudGC0LUg0LTQvtCx0YDQviDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUuXG4iCisiXG4iCisi0JjQt9C/0L7Qu9C30LLQsNC50YLQtSDRgdC70LXQtNC90LjRjyDRhNC+0YDQvNCw0YI6XG4iCisiXG4iCisi4pePINCf0YrRgNCy0Lgg0YDQtdC0OiDQvtC/0LjRgdCw0L3QuNC1INCyINC10LTQvdC+INC40LfRgNC10YfQtdC90LjQtSDQvdCwINC/0YDQvtC80Y/QvdCw0YLQsC5cbiIKKyLil48g0JLRgtC+0YDQuCDRgNC10LQ6INC/0YDQsNC30LXQvS5cbiIKKyLil48g0J7RgdGC0LDQvdCw0LvQuNGC0LUg0YDQtdC00L7QstC1OiDQvtC/0LjRiNC10YLQtSDQt9Cw0YnQviDRgdC1INC90LDQu9Cw0LPQsCDRgtCw0LfQuCDQv9GA0L7QvNGP0L3QsC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MjM1Cittc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCittc2dzdHIgItCY0LfQv9GK0LvQvdGP0LLQsNC90LUg0L3QsCDQutGD0LrQsNGC0LAg0L/RgNC10LTQuCDQv9C+0LTQsNCy0LDQvdC14oCmIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNTAKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtdGC0L4g0LUg0L7RgtGF0LLRitGA0LvQtdC90L4g0L7RgiDQutGD0LrQsNGC0LAg0L/RgNC10LTQuCDQv9C+0LTQsNCy0LDQvdC1LiIKKworIzogbGliL2NvbW1pdC50Y2w6MjY5Cittc2dpZCAiIgorIllvdSBhcmUgYWJvdXQgdG8gY29tbWl0IG9uIGEgZGV0YWNoZWQgaGVhZC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IGRhbmdlcm91cyAiCisidGhpbmcgdG8gZG8gYmVjYXVzZSBpZiB5b3Ugc3dpdGNoIHRvIGFub3RoZXIgYnJhbmNoIHlvdSB3aWxsIGxvc2UgeW91ciAiCisiY2hhbmdlcyBhbmQgaXQgY2FuIGJlIGRpZmZpY3VsdCB0byByZXRyaWV2ZSB0aGVtIGxhdGVyIGZyb20gdGhlIHJlZmxvZy4gWW91ICIKKyJzaG91bGQgcHJvYmFibHkgY2FuY2VsIHRoaXMgY29tbWl0IGFuZCBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIGNvbnRpbnVlLlxuIgorIiBcbiIKKyIgRG8geW91IHJlYWxseSB3YW50IHRvIHByb2NlZWQgd2l0aCB5b3VyIENvbW1pdD8iCittc2dzdHIgIiIKKyLQqdC1INC/0L7QtNCw0LTQtdGC0LUg0LrRitC8INC90LXRgdCy0YrRgNC30LDQvSwg0L7RgtC00LXQu9GQ0L0g0YPQutCw0LfQsNGC0LXQuyDigJ5IRUFE4oCcLiDQotC+0LLQsCDQtSDQvtC/0LDRgdC90L4sINC30LDRidC+0YLQviAiCisi0L/RgNC4INC/0YDQtdC80LjQvdCw0LLQsNC90LXRgtC+INC60YrQvCDQutC70L7QvSDRidC1INC30LDQs9GD0LHQuNGC0LUg0L/RgNC+0LzQtdC90LjRgtC1INGB0LgsINC60LDRgtC+INC10LTQuNC90YHRgtCy0LXQvdC40Y/RgiDQvdCw0YfQuNC9ICIKKyLQtNCwINCz0Lgg0LLRitGA0L3QtdGC0LUg0YnQtSDQtSDRh9GA0LXQtyDQttGD0YDQvdCw0LvQsCDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUgKHJlZmxvZykuINCd0LDQuS3QstC10YDQvtGP0YLQvdC+INGC0YDRj9Cx0LLQsCAiCisi0LTQsCDQvdC1INC/0YDQsNCy0LjRgtC1INGC0L7QstCwINC/0L7QtNCw0LLQsNC90LUsINCwINC00LAg0YHRitC30LTQsNC00LXRgtC1INC90L7QsiDQutC70L7QvSwg0L/RgNC10LTQuCDQtNCwINC/0YDQvtC00YrQu9C20LjRgtC1LlxuIgorIiBcbiIKKyLQodC40LPRg9GA0L3QuCDQu9C4INGB0YLQtSwg0YfQtSDQuNGB0LrQsNGC0LUg0LTQsCDQuNC30LLRitGA0YjQuNGC0LUg0YLQtdC60YPRidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1PyIKKworIzogbGliL2NvbW1pdC50Y2w6MjkwCittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgItCY0LfQv9GK0LvQvdGP0LLQsNC90LUg0L3QsCDQutGD0LrQsNGC0LAg0LfQsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC14oCmIgorCisjOiBsaWIvY29tbWl0LnRjbDozMDUKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtdGC0L4g0LUg0L7RgtGF0LLRitGA0LvQtdC90L4g0L7RgiDQutGD0LrQsNGC0LAg0LfQsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1LiIKKworIzogbGliL2NvbW1pdC50Y2w6MzE4Cittc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC14oCmIgorCisjOiBsaWIvY29tbWl0LnRjbDozMzQKK21zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQtNGK0YDQstC+0YLQviAod3JpdGUtdHJlZSk6IgorCisjOiBsaWIvY29tbWl0LnRjbDozMzUgbGliL2NvbW1pdC50Y2w6MzgyIGxpYi9jb21taXQudGNsOjQwMworbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/QvtC00LDQstCw0L3QtS4iCisKKyM6IGxpYi9jb21taXQudGNsOjM1MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC40LfQs9C70LXQttC00LAg0L/QvtCy0YDQtdC00LXQvdC+IgorCisjOiBsaWIvY29tbWl0LnRjbDozNTcKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyLQndGP0LzQsCDQv9GA0L7QvNC10L3QuCDQt9CwINC/0L7QtNCw0LLQsNC90LUuXG4iCisiXG4iCisi0JIg0YLQvtCy0LAg0L/QvtC00LDQstCw0L3QtSDQvdC1INGB0LAg0L/RgNC+0LzQtdC90Y/QvdC4INC90LjQutCw0LrQstC4INGE0LDQudC70L7QstC1LCDQsCDQuCDQvdC1INC1INC/0L7QtNCw0LLQsNC90LUg0YHRitGBICIKKyLRgdC70LjQstCw0L3QtS5cbiIKKyJcbiIKKyLQkNCy0YLQvtC80LDRgtC40YfQvdC+INGJ0LUg0LfQsNC/0L7Rh9C90LUg0L3QvtCy0LAg0L/RgNC+0LLQtdGA0LrQsC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzY0Cittc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgorbXNnc3RyICLQndGP0LzQsCDQv9GA0L7QvNC10L3QuCDQt9CwINC/0L7QtNCw0LLQsNC90LUuIgorCisjOiBsaWIvY29tbWl0LnRjbDozODEKK21zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L/QvtC00LDQstCw0L3QtSDQvdCwINC00YrRgNCy0L7RgtC+IChjb21taXQtdHJlZSk6IgorCisjOiBsaWIvY29tbWl0LnRjbDo0MDIKK21zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUgKHVwZGF0ZS1yZWYpOiIKKworIzogbGliL2NvbW1pdC50Y2w6NDk1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgorbXNnc3RyICLQo9GB0L/QtdGI0L3QviDQv9C+0LTQsNCy0LDQvdC1ICVzOiAlcyIKKworIzogbGliL2NvbnNvbGUudGNsOjU5Cittc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0YHQtSDQuNC30LLRitGA0YjQstCwINC00LXQudGB0YLQstC40LUsINC40LfRh9Cw0LrQsNC50YLQteKApiIKKworIzogbGliL2NvbnNvbGUudGNsOjE4NgorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgItCj0YHQv9C10YUiCisKKyM6IGxpYi9jb25zb2xlLnRjbDoyMDAKK21zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCittc2dzdHIgItCT0YDQtdGI0LrQsDog0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrQvtC80LDQvdC00LAiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDIKK21zZ2lkICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAi0JHRgNC+0Lkg0L3QtdC/0LDQutC10YLQuNGA0LDQvdC4INC+0LHQtdC60YLQuCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0MworbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBsb29zZSBvYmplY3RzIgorbXNnc3RyICLQlNC40YHQutC+0LLQviDQv9GA0L7RgdGC0YDQsNC90YHRgtCy0L4g0LfQsNC10YLQviDQvtGCINC90LXQv9Cw0LrQtdGC0LjRgNCw0L3QuCDQvtCx0LXQutGC0LgiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKK21zZ2lkICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMiCittc2dzdHIgItCR0YDQvtC5INC/0LDQutC10YLQuNGA0LDQvdC4INC+0LHQtdC60YLQuCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NQorbXNnaWQgIk51bWJlciBvZiBwYWNrcyIKK21zZ3N0ciAi0JHRgNC+0Lkg0L/QsNC60LXRgtC4IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLQlNC40YHQutC+0LLQviDQv9GA0L7RgdGC0YDQsNC90YHRgtCy0L4g0LfQsNC10YLQviDQvtGCINC/0LDQutC10YLQuNGA0LDQvdC4INC+0LHQtdC60YLQuCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NworbXNnaWQgIlBhY2tlZCBvYmplY3RzIHdhaXRpbmcgZm9yIHBydW5pbmciCittc2dzdHIgItCf0LDQutC10YLQuNGA0LDQvdC4INC+0LHQtdC60YLQuCDQt9CwINC+0LrQsNGB0YLRgNGP0L3QtSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OAorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgItCk0LDQudC70L7QstC1INC30LAg0LHQvtC60LvRg9C60LAiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NTcgbGliL29wdGlvbi50Y2w6MTgyIGxpYi9vcHRpb24udGNsOjE5NyBsaWIvb3B0aW9uLnRjbDoyMjAKKyM6IGxpYi9vcHRpb24udGNsOjI4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzOiIKK21zZ3N0ciAiJXM6IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgKCVzKTogRGF0YWJhc2UgU3RhdGlzdGljcyIKK21zZ3N0ciAiJXMgKCVzKTog0KHRgtCw0YLQuNGB0YLQuNC60LAg0L3QsCDQsdCw0LfQsNGC0LAg0L7RgiDQtNCw0L3QvdC4IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjcyCittc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAi0JrQvtC80L/RgNC10YHQuNGA0LDQvdC1INC90LAg0LHQsNC30LDRgtCwINGBINC00LDQvdC90Lgg0LfQsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjgzCittc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L3QsCDQsdCw0LfQsNGC0LAg0YEg0LTQsNC90L3QuCDQt9CwINC+0LHQtdC60YLQuNGC0LUg0YEg0L/RgNC+0LPRgNCw0LzQsNGC0LAg4oCeZnNjay1vYmplY3Rz4oCcIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjEwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCisiXG4iCisiVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyAiCisidGhlIGRhdGFiYXNlLlxuIgorIlxuIgorIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgorbXNnc3RyICIiCisi0JIg0YLQvtCy0LAg0YXRgNCw0L3QuNC70LjRidC1INCyINC80L7QvNC10L3RgtCwINC40LzQsCDQutGK0LwgJWkg0L3QtdC/0LDQutC10YLQuNGA0LDQvdC4INC+0LHQtdC60YLQuC5cbiIKKyJcbiIKKyLQl9CwINC00L7QsdGA0LAg0L/RgNC+0LjQt9Cy0L7QtNC40YLQtdC70L3QvtGB0YIg0YHQtSDQv9GA0LXQv9C+0YDRitGH0LLQsCDQtNCwINC60L7QvNC/0YDQtdGB0LjRgNCw0YLQtSDQsdCw0LfQsNGC0LAg0YEg0LTQsNC90L3QuCDQt9CwICIKKyLQvtCx0LXQutGC0LjRgtC1LlxuIgorIlxuIgorItCU0LAg0YHQtSDQt9Cw0L/QvtGH0L3QtSDQu9C4INC60L7QvNC/0YDQtdGB0LjRgNCw0L3QtdGC0L4/IgorCisjOiBsaWIvZGF0ZS50Y2w6MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QuCDQtNCw0L3QvdC4INC+0YIgR2l0OiAlcyIKKworIzogbGliL2RpZmYudGNsOjc3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgorIlxuIgorIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgorIlxuIgorIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKKyJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgorIlxuIgorIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgorInRoZSBzYW1lIHN0YXRlLiIKK21zZ3N0ciAiIgorItCd0LUg0YHQsCDQvtGC0LrRgNC40YLQuCDRgNCw0LfQu9C40LrQuC5cbiIKKyJcbiIKKyLQndGP0LzQsCDQv9GA0L7QvNC10L3QuCDQsiDigJ4lc+KAnC5cbiIKKyJcbiIKKyLQktGA0LXQvNC10YLQviDQvdCwINC/0YDQvtC80Y/QvdCwINC90LAg0YTQsNC50LvQsCDQtSDQsdC40Lsg0LfQsNC00LDQtNC10L0g0L7RgiDQtNGA0YPQs9CwINC/0YDQvtCz0YDQsNC80LAsINC90L4g0YHRitC00YrRgNC20LDQvdC40LXRgtC+ICIKKyLQvNGDINC90LUg0LUg0L/RgNC+0LzQtdC90LXQvdC+LlxuIgorIlxuIgorItCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0YnQtSDQt9Cw0L/QvtGH0L3QtSDQvdC+0LLQsCDQv9GA0L7QstC10YDQutCwINC00LDQu9C4INC90Y/QvNCwINC00YDRg9Cz0Lgg0YTQsNC50LvQvtCy0LUg0LIg0YLQvtCy0LAgIgorItGB0YrRgdGC0L7Rj9C90LjQtS4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nIGRpZmYgb2YgJXMuLi4iCittc2dzdHIgItCX0LDRgNC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9C70LjQutC40YLQtSDQsiDigJ4lc+KAnOKApiIKKworIzogbGliL2RpZmYudGNsOjE0MworbXNnaWQgIiIKKyJMT0NBTDogZGVsZXRlZFxuIgorIlJFTU9URTpcbiIKK21zZ3N0ciAiIgorItCb0J7QmtCQ0JvQndCeOiDQuNC30YLRgNC40YJcbiIKKyLQntCi0JTQkNCb0JXQp9CV0J3QnjpcbiIKKworIzogbGliL2RpZmYudGNsOjE0OAorbXNnaWQgIiIKKyJSRU1PVEU6IGRlbGV0ZWRcbiIKKyJMT0NBTDpcbiIKK21zZ3N0ciAiIgorItCe0KLQlNCQ0JvQldCn0JXQndCeOiDQuNC30YLRgNC40YJcbiIKKyLQm9Ce0JrQkNCb0J3QnjpcbiIKKworIzogbGliL2RpZmYudGNsOjE1NQorbXNnaWQgIkxPQ0FMOlxuIgorbXNnc3RyICLQm9Ce0JrQkNCb0J3QnjpcbiIKKworIzogbGliL2RpZmYudGNsOjE1OAorbXNnaWQgIlJFTU9URTpcbiIKK21zZ3N0ciAi0J7QotCU0JDQm9CV0KfQldCd0J46XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoyMjAgbGliL2RpZmYudGNsOjM1NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgorbXNnc3RyICLQpNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7QutCw0LfQsNC9IgorCisjOiBsaWIvZGlmZi50Y2w6MjIxCittc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0YDQtdC20LTQsNC90LUg0L3QsCDRhNCw0LnQuzoiCisKKyM6IGxpYi9kaWZmLnRjbDoyMjcKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCittc2dzdHIgItCl0YDQsNC90LjQu9C40YnQtSDQvdCwIEdpdCAo0L/QvtC00LzQvtC00YPQuykiCisKKyM6IGxpYi9kaWZmLnRjbDoyMzkKK21zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCittc2dzdHIgIuKXjyDQlNCy0L7QuNGH0LXQvSDRhNCw0LnQuyAo0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC90LUg0YHQtSDQv9C+0LrQsNC30LLQsCkuIgorCisjOiBsaWIvZGlmZi50Y2w6MjQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCisiKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCittc2dzdHIgIiIKKyLil48g0J3QtdGB0LvQtdC00LXQvdC40Y/RgiDRhNCw0LnQuyDQtSAlZCDQsdCw0LnRgtCwLlxuIgorIuKXjyDQn9C+0LrQsNC30LLQsNGCINGB0LUg0YHQsNC80L4g0L/RitGA0LLQuNGC0LUgJWQg0LHQsNC50YLQsC5cbiIKKworIzogbGliL2RpZmYudGNsOjI1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIqIFVudHJhY2tlZCBmaWxlIGNsaXBwZWQgaGVyZSBieSAlcy5cbiIKKyIqIFRvIHNlZSB0aGUgZW50aXJlIGZpbGUsIHVzZSBhbiBleHRlcm5hbCBlZGl0b3IuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLil48g0J3QtdGB0LvQtdC00LXQvdC40Y/RgiDRhNCw0LnQuyDQtSDQvtGC0YDRj9C30LDQvSDQtNC+0YLRg9C6INC+0YIg0L/RgNC+0LPRgNCw0LzQsNGC0LAg4oCeJXPigJwuXG4iCisi4pePINCY0LfQv9C+0LvQt9Cy0LDQudGC0LUg0LLRitC90YjQtdC9INGA0LXQtNCw0LrRgtC+0YAsINC30LAg0LTQsCDQstC40LTQuNGC0LUg0YbQtdC70LjRjyDRhNCw0LnQuy5cbiIKKworIzogbGliL2RpZmYudGNsOjU4MAorbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgorbXNnc3RyICLQmNC30LHRgNCw0L3QvtGC0L4g0L/QsNGA0YfQtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9Cy0LDQtNC10L3QviDQvtGCINC40L3QtNC10LrRgdCwLiIKKworIzogbGliL2RpZmYudGNsOjU4NworbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAi0JjQt9Cx0YDQsNC90L7RgtC+INC/0LDRgNGH0LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC00L7QsdCw0LLQtdC90L4g0LrRitC8INC40L3QtNC10LrRgdCwLiIKKworIzogbGliL2RpZmYudGNsOjY2NgorbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGxpbmUuIgorbXNnc3RyICLQmNC30LHRgNCw0L3QuNGP0YIg0YDQtdC0INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30LLQsNC00LXQvSDQvtGCINC40L3QtNC10LrRgdCwLiIKKworIzogbGliL2RpZmYudGNsOjY3NAorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAi0JjQt9Cx0YDQsNC90LjRj9GCINGA0LXQtCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LTQvtCx0LDQstC10L0g0LrRitC8INC40L3QtNC10LrRgdCwLiIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDMKK21zZ2lkICJEZWZhdWx0IgorbXNnc3RyICLQodGC0LDQvdC00LDRgNGC0L3QvtGC0L4iCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU3lzdGVtICglcykiCittc2dzdHIgItCh0LjRgdGC0LXQvNC90L7RgtC+ICglcykiCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Cittc2dpZCAiT3RoZXIiCittc2dzdHIgItCU0YDRg9Cz0L4iCisKKyM6IGxpYi9lcnJvci50Y2w6MjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlczogZXJyb3IiCittc2dzdHIgIiVzOiDQs9GA0LXRiNC60LAiCisKKyM6IGxpYi9lcnJvci50Y2w6MzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlczogd2FybmluZyIKK21zZ3N0ciAiJXM6INC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LUiCisKKyM6IGxpYi9lcnJvci50Y2w6ODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyBob29rIGZhaWxlZDoiCittc2dzdHIgIiVzOiDQs9GA0LXRiNC60LAg0L7RgiDQutGD0LrQsNGC0LAiCisKKyM6IGxpYi9lcnJvci50Y2w6OTYKK21zZ2lkICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIgorbXNnc3RyICLQn9GA0LXQtNC4INC00LAg0LzQvtC20LXRgtC1INC00LAg0L/QvtC00LDQtNC10YLQtSwg0LrQvtGA0LjQs9C40YDQsNC50YLQtSDQs9C+0YDQvdC40YLQtSDQs9GA0LXRiNC60LguIgorCisjOiBsaWIvZXJyb3IudGNsOjExNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IGVycm9yIgorbXNnc3RyICIlcyAoJXMpOiDQs9GA0LXRiNC60LAiCisKKyM6IGxpYi9pbmRleC50Y2w6NgorbXNnaWQgIlVuYWJsZSB0byB1bmxvY2sgdGhlIGluZGV4LiIKK21zZ3N0ciAi0JjQvdC00LXQutGB0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60LvRjtGH0LXQvS4iCisKKyM6IGxpYi9pbmRleC50Y2w6MTcKK21zZ2lkICJJbmRleCBFcnJvciIKK21zZ3N0ciAi0JPRgNC10YjQutCwINCyINC40L3QtNC10LrRgdCwIgorCisjOiBsaWIvaW5kZXgudGNsOjE5Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgorInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90L4g0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCDQvdCwIEdpdC4g0JDQstGC0L7QvNCw0YLQuNGH0L3QviDRidC1INC30LDQv9C+0YfQvdC1INC90L7QstCwINC/0YDQvtCy0LXRgNC60LAgIgorItC30LAg0YHQuNC90YXRgNC+0L3QuNC30LjRgNCw0L3QtdGC0L4g0L3QsCBnaXQtZ3VpLiIKKworIzogbGliL2luZGV4LnRjbDozMAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICLQn9GA0L7QtNGK0LvQttCw0LLQsNC90LUiCisKKyM6IGxpYi9pbmRleC50Y2w6MzMKK21zZ2lkICJVbmxvY2sgSW5kZXgiCittc2dzdHIgItCe0YLQutC70Y7Rh9Cy0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGxpYi9pbmRleC50Y2w6Mjk0Cittc2dpZCAiVW5zdGFnaW5nIHNlbGVjdGVkIGZpbGVzIGZyb20gY29tbWl0IgorbXNnc3RyICLQmNC30LLQsNC20LTQsNC90LUg0L3QsCDQuNC30LHRgNCw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0L7RgiDQv9C+0LTQsNCy0LDQvdC10YLQviIKKworIzogbGliL2luZGV4LnRjbDoyOTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCittc2dzdHIgItCY0LfQstCw0LbQtNCw0L3QtSDQvdCwIOKAniVz4oCcINC+0YIg0L/QvtC00LDQstCw0L3QtdGC0L4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzM3Cittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAi0JPQvtGC0L7QstC90L7RgdGCINC30LAg0L/QvtC00LDQstCw0L3QtS4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzQ2Cittc2dpZCAiQWRkaW5nIHNlbGVjdGVkIGZpbGVzIgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LjQt9Cx0YDQsNC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBsaWIvaW5kZXgudGNsOjM1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBsaWIvaW5kZXgudGNsOjM4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YWdlICVkIHVudHJhY2tlZCBmaWxlcz8iCittc2dzdHIgItCU0LAg0YHQtSDQtNC+0LHQsNCy0Y/RgiDQu9C4ICVkINC90LXRgdC70LXQtNC10L3QuCDRhNCw0LnQu9CwINC60YrQvCDQuNC90LTQtdC60YHQsD8iCisKKyM6IGxpYi9pbmRleC50Y2w6Mzg4Cittc2dpZCAiQWRkaW5nIGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LLRgdC40YfQutC4INC/0YDQvtC80LXQvdC10L3QuCDRhNCw0LnQu9C+0LLQtSIKKworIzogbGliL2luZGV4LnRjbDo0MjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKK21zZ3N0ciAi0JTQsCDRgdC1INC80LDRhdC90LDRgiDQu9C4INC/0YDQvtC80LXQvdC40YLQtSDQstGK0LIg0YTQsNC50LvQsCDigJ4lc+KAnD8iCisKKyM6IGxpYi9pbmRleC50Y2w6NDMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgorbXNnc3RyICLQlNCwINGB0LUg0LzQsNGF0L3QsNGCINC70Lgg0L/RgNC+0LzQtdC90LjRgtC1INCyINGC0LXQt9C4ICVpINGE0LDQudC70LA/IgorCisjOiBsaWIvaW5kZXgudGNsOjQzOAorbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKK21zZ3N0ciAiIgorItCS0YHQuNGH0LrQuCDQv9GA0L7QvNC10L3QuCwg0LrQvtC40YLQviDQvdC1INGB0LAg0LHQuNC70Lgg0LLQutCw0YDQsNC90Lgg0LIg0LjQvdC00LXQutGB0LAsINGJ0LUg0LHRitC00LDRgiDQsdC10LfQstGK0LfQstGA0LDRgtC90L4gIgorItC30LDQs9GD0LHQtdC90LguIgorCisjOiBsaWIvaW5kZXgudGNsOjQ0MQorbXNnaWQgIkRvIE5vdGhpbmciCittc2dzdHIgItCd0LjRidC+INC00LAg0L3QtSDRgdC1INC/0YDQsNCy0LgiCisKKyM6IGxpYi9pbmRleC50Y2w6NDU5Cittc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgorbXNnc3RyICLQnNCw0YXQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0LIg0LjQt9Cx0YDQsNC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBsaWIvaW5kZXgudGNsOjQ2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydGluZyAlcyIKK21zZ3N0ciAi0JzQsNGF0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INCyIOKAniVz4oCcIgorCisjOiBsaWIvbGluZS50Y2w6MTcKK21zZ2lkICJHb3RvIExpbmU6IgorbXNnc3RyICLQmtGK0Lwg0YDQtdC0OiIKKworIzogbGliL2xpbmUudGNsOjIzCittc2dpZCAiR28iCittc2dzdHIgItCf0YDQuNC00LLQuNC20LLQsNC90LUiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMKK21zZ2lkICIiCisiQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyLQn9C+INCy0YDQtdC80LUg0L3QsCDQv9C+0L/RgNCw0LLRj9C90LUg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LvQuNCy0LDQvdC1LlxuIgorIlxuIgorItCi0YDRj9Cx0LLQsCDQtNCwINC30LDQstGK0YDRiNC40YLQtSDQv9C+0L/RgNCw0LLRj9C90LXRgtC+INC90LAg0YLQtdC60YPRidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1LCDQv9GA0LXQtNC4INC00LAg0LfQsNC/0L7Rh9C90LXRgtC1ICIKKyLRgdC70LjQstCw0L3QtS5cbiIKKworIzogbGliL21lcmdlLnRjbDoyNworbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYSBtZXJnZSBjYW4gYmUgcGVyZm9ybWVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisi0J/QvtGB0LvQtdC00L3QviDRg9GB0YLQsNC90L7QstC10L3QvtGC0L4g0YHRitGB0YLQvtGP0L3QuNC1INC90LUg0L7RgtCz0L7QstCw0YDRjyDQvdCwINGC0L7QstCwINCyINGF0YDQsNC90LjQu9C40YnQtdGC0L4uXG4iCisiXG4iCisi0J3Rj9C60L7QuSDQtNGA0YPQsyDQv9GA0L7RhtC10YEg0LfQsCBHaXQg0LUg0L/RgNC+0LzQtdC90LjQuyDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+INC80LXQttC00YPQstGA0LXQvNC10L3QvdC+LiDQodGK0YHRgtC+0Y/QvdC40LXRgtC+ICIKKyLRgtGA0Y/QsdCy0LAg0LTQsCDQsdGK0LTQtSDQv9GA0L7QstC10YDQtdC90L4sINC/0YDQtdC00Lgg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4INGB0LvQuNCy0LDQvdC1LlxuIgorIlxuIgorItCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0YnQtSDQt9Cw0L/QvtGH0L3QtSDQvdC+0LLQsCDQv9GA0L7QstC10YDQutCwLlxuIgorIlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgorIlxuIgorIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgorIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKK21zZ3N0ciAiIgorItCSINC80L7QvNC10L3RgtCwINGC0LXRh9C1INGB0LvQuNCy0LDQvdC1LCDQvdC+INC40LzQsCDQutC+0L3RhNC70LjQutGC0LguXG4iCisiXG4iCisi0J/QvtCz0LvQtdC00L3QtdGC0LUg0YTQsNC50LvQsCDigJ4lc+KAnC5cbiIKKyJcbiIKKyLQotGA0Y/QsdCy0LAg0LTQsCDQutC+0YDQuNCz0LjRgNCw0YLQtSDQutC+0L3RhNC70LjQutGC0LjRgtC1INCyINC90LXQs9C+LCDQtNCwINCz0L4g0LTQvtCx0LDQstC40YLQtSDQutGK0Lwg0LjQvdC00LXQutGB0LAg0Lgg0LTQsCAiCisi0LfQsNCy0YrRgNGI0LjRgtC1INGC0LXQutGD0YnQvtGC0L4g0YHQu9C40LLQsNC90LUg0YfRgNC10Lcg0L/QvtC00LDQstCw0L3QtS4g0KfQsNC6INGC0L7Qs9Cw0LLQsCDQvNC+0LbQtSDQtNCwINC30LDQv9C+0YfQvdC10YLQtSDQvdC+0LLQviAiCisi0YHQu9C40LLQsNC90LUuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhbmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaXMgbW9kaWZpZWQuXG4iCisiXG4iCisiWW91IHNob3VsZCBjb21wbGV0ZSB0aGUgY3VycmVudCBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGEgbWVyZ2UuICBEb2luZyBzbyAiCisid2lsbCBoZWxwIHlvdSBhYm9ydCBhIGZhaWxlZCBtZXJnZSwgc2hvdWxkIHRoZSBuZWVkIGFyaXNlLlxuIgorbXNnc3RyICIiCisi0JIg0LzQvtC80LXQvdGC0LAg0YLQtdGH0LUg0L/QvtC00LDQstCw0L3QtS5cbiIKKyJcbiIKKyLQpNCw0LnQu9GK0YIg4oCeJXPigJwg0LUg0L/RgNC+0LzQtdC90LXQvS5cbiIKKyJcbiIKKyLQotGA0Y/QsdCy0LAg0LTQsCDQt9Cw0LLRitGA0YjQuNGC0LUg0YLQtdC60YPRidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1LCDQv9GA0LXQtNC4INC00LAg0LfQsNC/0L7Rh9C90LXRgtC1INGB0LvQuNCy0LDQvdC1LiDQotCw0LrQsCDRidC1ICIKKyLQvNC+0LbQtdGC0LUg0LvQtdGB0L3QviDQtNCwINC/0YDQtdGD0YHRgtCw0L3QvtCy0LjRgtC1INGB0LvQuNCy0LDQvdC10YLQviwg0LDQutC+INCy0YrQt9C90LjQutC90LUg0L3Rg9C20LTQsC5cbiIKKworIzogbGliL21lcmdlLnRjbDoxMDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyBvZiAlcyIKK21zZ3N0ciAiJXMg0L7RgiDQvtCx0YnQviAlcyIKKworIzogbGliL21lcmdlLnRjbDoxMjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKK21zZ3N0ciAi0KHQu9C40LLQsNC90LUg0L3QsCDigJ4lc+KAnCDQuCDigJ4lc+KAnOKApiIKKworIzogbGliL21lcmdlLnRjbDoxMzcKK21zZ2lkICJNZXJnZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiIKK21zZ3N0ciAi0KHQu9C40LLQsNC90LXRgtC+INC30LDQstGK0YDRiNC4INGD0YHQv9C10YjQvdC+LiIKKworIzogbGliL21lcmdlLnRjbDoxMzkKK21zZ2lkICJNZXJnZSBmYWlsZWQuICBDb25mbGljdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkLiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1IOKAlCDQuNC80LAg0LrQvtC90YTQu9C40LrRgtC4INC30LAg0LrQvtGA0LjQs9C40YDQsNC90LUuIgorCisjOiBsaWIvbWVyZ2UudGNsOjE1NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IE1lcmdlIgorbXNnc3RyICIlcyAoJXMpOiDQodC70LjQstCw0L3QtSIKKworIzogbGliL21lcmdlLnRjbDoxNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBJbnRvICVzIgorbXNnc3RyICLQodC70LjQstCw0L3QtSDQsiDigJ4lc+KAnCIKKworIzogbGliL21lcmdlLnRjbDoxODMKK21zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKK21zZ3N0ciAi0JLQtdGA0YHQuNGPINC30LAg0YHQu9C40LLQsNC90LUiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjE4Cittc2dpZCAiIgorIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuXG4iCittc2dzdHIgIiIKKyLQn9C+0L/RgNCw0LLRj9C90LXRgtC+INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LXRg9GB0YLQsNC90L7QstC10L3Qvi5cbiIKKyJcbiIKKyLQotGA0Y/QsdCy0LAg0LTQsCDQt9Cw0LLRitGA0YjQuNGC0LUg0L/QvtC/0YDQsNCy0LrQsNGC0LAg0L3QsCDRgtC+0LLQsCDQv9C+0LTQsNCy0LDQvdC1LlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjIyOAorbXNnaWQgIiIKKyJBYm9ydCBtZXJnZT9cbiIKKyJcbiIKKyJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKK21zZ3N0ciAiIgorItCU0LAg0YHQtSDQv9GA0LXRg9GB0YLQsNC90L7QstC4INC70Lgg0YHQu9C40LLQsNC90LXRgtC+P1xuIgorIlxuIgorItCSINGC0LDQutGK0LIg0YHQu9GD0YfQsNC5IOKXj9CS0KHQmNCn0JrQmOKXjyDQvdC10L/QvtC00LDQtNC10L3QuCDQv9GA0L7QvNC10L3QuCDRidC1INCx0YrQtNCw0YIg0LHQtdC30LLRitC30LLRgNCw0YLQvdC+INC30LDQs9GD0LHQtdC90LguXG4iCisiXG4iCisi0J3QsNC40YHRgtC40L3QsCDQu9C4INC00LAg0YHQtSDQv9GA0LXRg9GB0YLQsNC90L7QstC4INGB0LvQuNCy0LDQvdC10YLQvj8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM0Cittc2dpZCAiIgorIlJlc2V0IGNoYW5nZXM/XG4iCisiXG4iCisiUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIlxuIgorIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgorbXNnc3RyICIiCisi0JTQsCDRgdC1INC30LDQvdGD0LvRj9GCINC70Lgg0L/RgNC+0LzQtdC90LjRgtC1P1xuIgorIlxuIgorItCSINGC0LDQutGK0LIg0YHQu9GD0YfQsNC5IOKXj9CS0KHQmNCn0JrQmOKXjyDQvdC10L/QvtC00LDQtNC10L3QuCDQv9GA0L7QvNC10L3QuCDRidC1INCx0YrQtNCw0YIg0LHQtdC30LLRitC30LLRgNCw0YLQvdC+INC30LDQs9GD0LHQtdC90LguXG4iCisiXG4iCisi0J3QsNC40YHRgtC40L3QsCDQu9C4INC00LAg0YHQtSDQt9Cw0L3Rg9C70Y/RgiDQv9GA0L7QvNC10L3QuNGC0LU/IgorCisjOiBsaWIvbWVyZ2UudGNsOjI0NQorbXNnaWQgIkFib3J0aW5nIgorbXNnc3RyICLQn9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjQ1Cittc2dpZCAiZmlsZXMgcmVzZXQiCittc2dzdHIgItGE0LDQudC70LAg0YHRitGBINC30LDQvdGD0LvQtdC90Lgg0L/RgNC+0LzQtdC90LgiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjczCittc2dpZCAiQWJvcnQgZmFpbGVkLiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtS4iCisKKyM6IGxpYi9tZXJnZS50Y2w6Mjc1Cittc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgorbXNnc3RyICLQo9GB0L/QtdGI0L3QviDQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUuINCT0L7RgtC+0LLQvdC+0YHRgiDQt9CwINGB0LvQtdC00LLQsNGJ0L4g0LTQtdC50YHRgtCy0LjQtS4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjgKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBiYXNlIHZlcnNpb24/IgorbXNnc3RyICLQlNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDQsdCw0LfQvtCy0LDRgtCwINCy0LXRgNGB0LjRjyIKKworIzogbGliL21lcmdldG9vbC50Y2w6OQorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhpcyBicmFuY2g/IgorbXNnc3RyICLQlNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDQstC10YDRgdC40Y/RgtCwINC+0YIg0YLQvtC30Lgg0LrQu9C+0L0iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKK21zZ3N0ciAi0JTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LLQtdGA0YHQuNGP0YLQsCDQvtGCINC00YDRg9Cz0LjRjyDQutC70L7QvSIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKKyJcbiIKKyIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgorIlxuIgorIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCittc2dzdHIgIiIKKyLQoNCw0LfQu9C40LrQsNGC0LAg0L/QvtC60LDQt9Cy0LAg0YHQsNC80L4g0YDQsNC30LvQuNC60LjRgtC1INGBINC60L7QvdGE0LvQuNC60YIuXG4iCisiXG4iCisi0KTQsNC50LvRitGCIOKAniVz4oCcINGJ0LUg0LHRitC00LUg0L/RgNC10LfQsNC/0LjRgdCw0L0uXG4iCisiXG4iCisi0KLQsNC30Lgg0L7Qv9C10YDQsNGG0LjRjyDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQvNC10L3QtdC90LAg0YHQsNC80L4g0YfRgNC10Lcg0LfQsNC/0L7Rh9Cy0LDQvdC1INC90LAg0YHQu9C40LLQsNC90LXRgtC+INC90LDQvdC+0LLQvi4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBzZWVtcyB0byBoYXZlIHVucmVzb2x2ZWQgY29uZmxpY3RzLCBzdGlsbCBzdGFnZT8iCittc2dzdHIgIiIKKyLQmNC30LPQu9C10LbQtNCwLCDRh9C1INCy0YHQtSDQvtGJ0LUg0LjQvNCwINC90LXQutC+0YDQuNCz0LjRgNCw0L3QuCDQutC+0L3RhNC70LjQutGC0Lgg0LLRitCyINGE0LDQudC70LAg4oCeJXPigJwuINCU0LAg0YHQtSDQtNC+0LHQsNCy0LggIgorItC70Lgg0YTQsNC50LvRitGCINC60YrQvCDQuNC90LTQtdC60YHQsD8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWRkaW5nIHJlc29sdXRpb24gZm9yICVzIgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LrQvtGA0LXQutGG0LjRjyDQvdCwINC60L7QvdGE0LvQuNC60YLQuNGC0LUg0LIg4oCeJXPigJwiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQorbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKK21zZ3N0ciAiIgorItCa0L7QvdGE0LvQuNC60YLQuNGC0LUg0L/RgNC4INGB0LjQvNCy0L7Qu9C90Lgg0LLRgNGK0LfQutC4INC40LvQuCDQuNC30YLRgNC40LLQsNC90LUg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQutC+0YDQuNCz0LjRgNCw0L3QuCDRgSAiCisi0LLRitC90YjQvdCwINC/0YDQvtCz0YDQsNC80LAuIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKK21zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQpNCw0LnQu9GK0YIsINCyINC60L7QudGC0L4g0LUg0LrQvtC90YTQu9C40LrRgtGK0YIsINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI0NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgorbXNnc3RyICLQotC+0LLQsCDQvdC1INC1INCz0YDQsNGE0LjRh9C90LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINGB0LvQuNCy0LDQvdC1OiDigJ4lc+KAnCIKKworIzogbGliL21lcmdldG9vbC50Y2w6Mjc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgorbXNnc3RyICLQndC10L/QvtC00LTRitGA0LbQsNC90LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINGB0LvQuNCy0LDQvdC1OiDigJ4lc+KAnCIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzEwCittc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LDRgtCwINC30LAg0YHQu9C40LLQsNC90LUg0LLQtdGH0LUg0LUg0YHRgtCw0YDRgtC40YDQsNC90LAuINCU0LAg0LHRitC00LUg0LvQuCDQuNC30LrQu9GO0YfQtdC90LA/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9GC0LXQs9C70Y/QvdC10YLQviDQvdCwINCy0LXRgNGB0LjQuDpcbiIKKyIlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBzdGFydCB0aGUgbWVyZ2UgdG9vbDpcbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorItCf0YDQvtCz0YDQsNC80LDRgtCwINC30LAg0YHQu9C40LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YLQsNGA0YLQuNGA0LDQvdCwOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNTQKK21zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCittc2dzdHIgItCh0YLQsNGA0YLQuNGA0LDQvdC1INC90LAg0L/RgNC+0LPRgNCw0LzQsNGC0LAg0LfQsCDRgdC70LjQstCw0L3QteKApiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzgyIGxpYi9tZXJnZXRvb2wudGNsOjM5MAorbXNnaWQgIk1lcmdlIHRvb2wgZmFpbGVkLiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINCyINC/0YDQvtCz0YDQsNC80LDRgtCwINC30LAg0YHQu9C40LLQsNC90LUuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZ2xvYmFsIGVuY29kaW5nICclcyciCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdC+INCz0LvQvtCx0LDQu9C90L4g0LrQvtC00LjRgNCw0L3QtSDigJ4lc+KAnCIKKworIzogbGliL29wdGlvbi50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90L4g0LrQvtC00LjRgNCw0L3QtSDigJ4lc+KAnCDQvdCwINGF0YDQsNC90LjQu9C40YnQtdGC0L4iCisKKyM6IGxpYi9vcHRpb24udGNsOjExOQorbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCittc2dzdHIgItCh0YLQsNC90LTQsNGA0YLQvdC4INC90LDRgdGC0YDQvtC50LrQuCIKKworIzogbGliL29wdGlvbi50Y2w6MTIzCittc2dpZCAiU2F2ZSIKK21zZ3N0ciAi0JfQsNC/0LDQt9Cy0LDQvdC1IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyBSZXBvc2l0b3J5IgorbXNnc3RyICLQpdGA0LDQvdC40LvQuNGJ0LUg4oCeJXPigJwiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzNAorbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCittc2dzdHIgItCT0LvQvtCx0LDQu9C90L4gKNC30LAg0LLRgdC40YfQutC4INGF0YDQsNC90LjQu9C40YnQsCkiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MAorbXNnaWQgIlVzZXIgTmFtZSIKK21zZ3N0ciAi0J/QvtGC0YDQtdCx0LjRgtC10LvRgdC60L4g0LjQvNC1IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDEKK21zZ2lkICJFbWFpbCBBZGRyZXNzIgorbXNnc3RyICLQkNC00YDQtdGBINC90LAg0LUt0L/QvtGJ0LAiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MworbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgorbXNnc3RyICLQntCx0L7QsdGJ0LDQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0L/RgNC4INGB0LvQuNCy0LDQvdC1IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDQKK21zZ2lkICJNZXJnZSBWZXJib3NpdHkiCittc2dzdHIgItCf0L7QtNGA0L7QsdC90L7RgdGC0Lgg0L/RgNC4INGB0LvQuNCy0LDQvdC40Y/RgtCwIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDUKK21zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0LDRgtC40YHRgtC40LrQsCDRgdC70LXQtCDRgdC70LjQstCw0L3QuNGP0YLQsCIKKworIzogbGliL29wdGlvbi50Y2w6MTQ2Cittc2dpZCAiVXNlIE1lcmdlIFRvb2wiCittc2dzdHIgItCY0LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINGB0LvQuNCy0LDQvdC1IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDgKK21zZ2lkICJUcnVzdCBGaWxlIE1vZGlmaWNhdGlvbiBUaW1lc3RhbXBzIgorbXNnc3RyICLQlNC+0LLQtdGA0LjQtSDQstGK0LIg0LLRgNC10LzQtdGC0L4g0L3QsCDQv9GA0L7QvNGP0L3QsCDQvdCwINGE0LDQudC70L7QstC10YLQtSIKKworIzogbGliL29wdGlvbi50Y2w6MTQ5Cittc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgorbXNnc3RyICLQntC60LDRgdGC0YDRj9C90LUg0L3QsCDRgdC70LXQtNGP0YnQuNGC0LUg0LrQu9C+0L3QvtCy0LUg0L/RgNC4INC00L7RgdGC0LDQstGP0L3QtSIKKworIzogbGliL29wdGlvbi50Y2w6MTUwCittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoZXMiCittc2dzdHIgItCd0LDQv9Cw0YHQstCw0L3QtSDQvdCwINGB0LvQtdC00Y/RidC40YLQtSDQutC70L7QvdC+0LLQtSIKKworIzogbGliL29wdGlvbi50Y2w6MTUxCittc2dpZCAiVXNlIFRleHRjb252IEZvciBEaWZmcyBhbmQgQmxhbWVzIgorbXNnc3RyICLQmNC30L/QvtC70LfQstCw0L3QtSDQvdCwIOKAnnRleHRjb2524oCcINC30LAg0YDQsNC30LvQuNC60LjRgtC1INC4INCw0L3QvtGC0LjRgNCw0L3QtdGC0L4iCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MgorbXNnaWQgIkJsYW1lIENvcHkgT25seSBPbiBDaGFuZ2VkIEZpbGVzIgorbXNnc3RyICLQkNC90L7RgtC40YDQsNC90LUg0L3QsCDQutC+0L/QuNC10YLQviDRgdCw0LzQviDQv9C+INC/0YDQvtC80LXQvdC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MworbXNnaWQgIk1heGltdW0gTGVuZ3RoIG9mIFJlY2VudCBSZXBvc2l0b3JpZXMgTGlzdCIKK21zZ3N0ciAi0JzQsNC60YHQuNC80LDQu9C10L0g0LHRgNC+0Lkg0L3QsCDRgdC/0LjRgdGK0LrQsCDigJ7QodC60L7RgNC+INC/0L7Qu9C30LLQsNC90LjigJwg0YXRgNCw0L3QuNC70LjRidCwIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTQKK21zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKK21zZ3N0ciAi0JzQuNC90LjQvNCw0LvQtdC9INCx0YDQvtC5INC30L3QsNGG0Lgg0LfQsCDQsNC90L7RgtC40YDQsNC90LUg0L3QsCDQutC+0L/QuNC10YLQviIKKworIzogbGliL29wdGlvbi50Y2w6MTU1Cittc2dpZCAiQmxhbWUgSGlzdG9yeSBDb250ZXh0IFJhZGl1cyAoZGF5cykiCittc2dzdHIgItCY0YHRgtC+0YDQuNGH0LXRgdC60Lgg0L7QsdGF0LLQsNGCINC30LAg0LDQvdC+0YLQuNGA0LDQvdC1INCyINC00L3QuCIKKworIzogbGliL29wdGlvbi50Y2w6MTU2Cittc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKK21zZ3N0ciAi0JHRgNC+0Lkg0YDQtdC00L7QstC1INC30LAg0LrQvtC90YLQtdC60YHRgtCwINC90LAg0YDQsNC30LvQuNC60LjRgtC1IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTcKK21zZ2lkICJBZGRpdGlvbmFsIERpZmYgUGFyYW1ldGVycyIKK21zZ3N0ciAi0JDRgNCz0YPQvNC10L3RgtC4INC60YrQvCDQutC+0LzQsNC90LTQsNGC0LAg0LfQsCDRgNCw0LfQu9C40LrQuNGC0LUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1OAorbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCittc2dzdHIgItCo0LjRgNC+0YfQuNC90LAg0L3QsCDRgtC10LrRgdGC0LAg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTkKK21zZ2lkICJOZXcgQnJhbmNoIE5hbWUgVGVtcGxhdGUiCittc2dzdHIgItCo0LDQsdC70L7QvSDQt9CwINC40LzQtdGC0L4g0L3QsCDQvdC+0LLQuNGC0LUg0LrQu9C+0L3QuCIKKworIzogbGliL29wdGlvbi50Y2w6MTYwCittc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgorbXNnc3RyICLQmtC+0LTQuNGA0LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNjEKK21zZ2lkICJXYXJuIGJlZm9yZSBjb21taXR0aW5nIHRvIGEgZGV0YWNoZWQgaGVhZCIKK21zZ3N0ciAi0J/RgNC10LTRg9C/0YDQtdC20LTQsNCy0LDQvdC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1INC60YrQvCDQvdC10YHQstGK0YDQt9Cw0L0g0YPQutCw0LfQsNGC0LXQuyIKKworIzogbGliL29wdGlvbi50Y2w6MTYyCittc2dpZCAiU3RhZ2luZyBvZiB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1INC60YrQvCDQuNC90LTQtdC60YHQsCIKKworIzogbGliL29wdGlvbi50Y2w6MTYzCittc2dpZCAiU2hvdyB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgItCf0L7QutCw0LfQstCw0L3QtSDQvdCwINC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE2NAorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICLQqNC40YDQuNC90LAg0L3QsCDRgtCw0LHRg9C70LDRhtC40Y/RgtCwIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMTAKK21zZ2lkICJDaGFuZ2UiCittc2dzdHIgItCh0LzRj9C90LAiCisKKyM6IGxpYi9vcHRpb24udGNsOjI1NAorbXNnaWQgIlNwZWxsaW5nIERpY3Rpb25hcnk6IgorbXNnc3RyICLQn9GA0LDQstC+0L/QuNGB0LXQvSDRgNC10YfQvdC40Lo6IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyODQKK21zZ2lkICJDaGFuZ2UgRm9udCIKK21zZ3N0ciAi0KHQvNGP0L3QsCDQvdCwINGI0YDQuNGE0YLQsCIKKworIzogbGliL29wdGlvbi50Y2w6Mjg4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hvb3NlICVzIgorbXNnc3RyICLQmNC30LHQvtGAINC90LAg4oCeJXPigJwiCisKKyM6IGxpYi9vcHRpb24udGNsOjI5NAorbXNnaWQgInB0LiIKK21zZ3N0ciAi0YLRh9C6LiIKKworIzogbGliL29wdGlvbi50Y2w6MzA4Cittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCIKKworIzogbGliL29wdGlvbi50Y2w6MzQ1Cittc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC90LDRgdGC0YDQvtC50LrQuNGC0LU6IgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMDAKK21zZ2lkICJQdXNoIHRvIgorbXNnc3RyICLQmNC30YLQu9Cw0YHQutCy0LDQvdC1INC60YrQvCIKKworIzogbGliL3JlbW90ZS50Y2w6MjE4Cittc2dpZCAiUmVtb3ZlIFJlbW90ZSIKK21zZ3N0ciAi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGxpYi9yZW1vdGUudGNsOjIyMworbXNnaWQgIlBydW5lIGZyb20iCittc2dzdHIgItCe0LrQsNGB0YLRgNGP0L3QtSDQvtGCIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMjgKK21zZ2lkICJGZXRjaCBmcm9tIgorbXNnc3RyICLQlNC+0YHRgtCw0LLRj9C90LUg0L7RgiIKKworIzogbGliL3JlbW90ZS50Y2w6MjUzIGxpYi9yZW1vdGUudGNsOjI1OAorbXNnaWQgIkFsbCIKK21zZ3N0ciAi0JLRgdC40YfQutC4IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyAoJXMpOiBBZGQgUmVtb3RlIgorbXNnc3RyICIlcyAoJXMpOiDQlNC+0LHQsNCy0Y/QvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjUKK21zZ2lkICJBZGQgTmV3IFJlbW90ZSIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjMwIGxpYi90b29sc19kbGcudGNsOjM3Cittc2dpZCAiQWRkIgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzkKK21zZ2lkICJSZW1vdGUgRGV0YWlscyIKK21zZ3N0ciAi0JTQsNC90L3QuCDQt9CwINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo1MAorbXNnaWQgIkxvY2F0aW9uOiIKK21zZ3N0ciAi0JzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtToiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MAorbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgorbXNnc3RyICLQodC70LXQtNCy0LDRidC+INC00LXQudGB0YLQstC40LUiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MworbXNnaWQgIkZldGNoIEltbWVkaWF0ZWx5IgorbXNnc3RyICLQndC10LfQsNCx0LDQstC90L4g0LTQvtGB0YLQsNCy0Y/QvdC1IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjkKK21zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgorbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDQuCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzUKK21zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgorbXNnc3RyICLQlNCwINC90LUg0YHQtSDQv9GA0LDQstC4INC90LjRidC+IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTAwCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAi0JfQsNC00LDQudGC0LUg0LjQvNC1INC30LAg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtS4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAi0J7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC60LDQt9Cy0LAg4oCeJXPigJwuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTI0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC00L7QsdCw0LLRj9C90LUg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IOKAniVz4oCcINC+0YIg0LDQtNGA0LXRgSDigJ4lc+KAnC4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzIgbGliL3RyYW5zcG9ydC50Y2w6NgorIywgdGNsLWZvcm1hdAorbXNnaWQgImZldGNoICVzIgorbXNnc3RyICLQtNC+0YHRgtCw0LLRj9C90LUg0L3QsCDigJ4lc+KAnCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIHRoZSAlcyIKK21zZ3N0ciAi0JTQvtGB0YLQsNCy0Y/QvdC1INC90LAg4oCeJXPigJwiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgorbXNnc3RyICLQpdGA0LDQvdC40LvQuNGJ0LXRgtC+INGBINC80LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LUg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40L3QuNGG0LjQsNC70LjQt9C40YDQsNC90L4uIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYyIGxpYi90cmFuc3BvcnQudGNsOjU0IGxpYi90cmFuc3BvcnQudGNsOjkyCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJwdXNoICVzIgorbXNnc3RyICLQuNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHVwIHRoZSAlcyAoYXQgJXMpIgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC1IOKAniVz4oCcICjRgSDQsNC00YDQtdGBIOKAniVz4oCcKSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IERlbGV0ZSBCcmFuY2ggUmVtb3RlbHkiCittc2dzdHIgIiVzICglcyk6INCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0LrQu9C+0L0iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QuNGPINC60LvQvtC9IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQ4Cittc2dpZCAiRnJvbSBSZXBvc2l0b3J5IgorbXNnc3RyICLQntGCINGF0YDQsNC90LjQu9C40YnQtSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MSBsaWIvdHJhbnNwb3J0LnRjbDoxNjUKK21zZ2lkICJSZW1vdGU6IgorbXNnc3RyICLQntGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LU6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjcyIGxpYi90cmFuc3BvcnQudGNsOjE4NworbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCittc2dzdHIgItCf0YDQvtC40LfQstC+0LvQvdC+INC80LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LU6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg4Cittc2dpZCAiQnJhbmNoZXMiCittc2dzdHIgItCa0LvQvtC90LgiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTEwCittc2dpZCAiRGVsZXRlIE9ubHkgSWYiCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSwg0YHQsNC80L4g0LDQutC+IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMgorbXNnaWQgIk1lcmdlZCBJbnRvOiIKK21zZ3N0ciAi0KHQu9GP0YIg0LI6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MworbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKK21zZ3N0ciAi0JfQsCDQtNCw0L3QvdC40YLQtSDigJ7QodC70Y/RgiDQsuKAnCDQtSDQvdC10L7QsdGF0L7QtNC40LzQviDQtNCwINC30LDQtNCw0LTQtdGC0LUg0LrQu9C+0L0uIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKKyJcbiIKKyIgLSAlcyIKK21zZ3N0ciAiIgorItCh0LvQtdC00L3QuNGC0LUg0LrQu9C+0L3QuCDQvdC1INGB0LAg0YHQu9C10YLQuCDQvdCw0L/RitC70L3QviDQsiDigJ4lc+KAnDpcbiIKKyJcbiIKKyIg4pePICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKKyJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKK21zZ3N0ciAiIgorItCf0L7QvdC1INC10LTQvdCwINC+0YIg0L/RgNC+0LHQuNGC0LUg0LfQsCDRgdC70LjQstCw0L3QtSDQtSDQvdC10YPRgdC/0LXRiNC90LAsINC30LDRidC+0YLQviDQvdC1INGB0YLQtSDQtNC+0YHRgtCw0LLQuNC70Lgg0LLRgdC40YfQutC4ICIKKyLQvdC10L7QsdGF0L7QtNC40LzQuCDQv9C+0LTQsNCy0LDQvdC40Y8uINCf0YDQvtCx0LLQsNC50YLQtSDQv9GK0YDQstC+INC00LAg0LTQvtGB0YLQsNCy0LjRgtC1INC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0L7RgiDigJ4lc+KAnC4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjA4Cittc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgorbXNnc3RyICLQmNC30LHQtdGA0LXRgtC1INC/0L7QvdC1INC10LTQuNC9INC60LvQvtC9INC30LAg0LjQt9GC0YDQuNCy0LDQvdC1LiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDQutC70L7QvdC4INC+0YIg4oCeJXPigJwiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzAwCittc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCittc2dzdHIgItCd0LUg0LUg0LjQt9Cx0YDQsNC90L4g0YXRgNCw0L3QuNC70LjRidC1LiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozMDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTY2FubmluZyAlcy4uLiIKK21zZ3N0ciAi0J/RgNC10YLRitGA0YHQstCw0L3QtSDQvdCwIOKAniVz4oCc4oCmIgorCisjOiBsaWIvc2VhcmNoLnRjbDo0OAorbXNnaWQgIkZpbmQ6IgorbXNnc3RyICLQotGK0YDRgdC10L3QtToiCisKKyM6IGxpYi9zZWFyY2gudGNsOjUwCittc2dpZCAiTmV4dCIKK21zZ3N0ciAi0KHQu9C10LTQstCw0YnQsCDQv9C+0Y/QstCwIgorCisjOiBsaWIvc2VhcmNoLnRjbDo1MQorbXNnaWQgIlByZXYiCittc2dzdHIgItCf0YDQtdC00LjRiNC90LAg0L/QvtGP0LLQsCIKKworIzogbGliL3NlYXJjaC50Y2w6NTIKK21zZ2lkICJSZWdFeHAiCittc2dzdHIgItCg0LXQs9CY0LfRgCIKKworIzogbGliL3NlYXJjaC50Y2w6NTQKK21zZ2lkICJDYXNlIgorbXNnc3RyICLQk9C70LDQstC90Lgv0LzQsNC70LrQuCIKKworIzogbGliL3Nob3J0Y3V0LnRjbDo4IGxpYi9zaG9ydGN1dC50Y2w6NDMgbGliL3Nob3J0Y3V0LnRjbDo3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IENyZWF0ZSBEZXNrdG9wIEljb24iCittc2dzdHIgIiVzICglcyk6INCU0L7QsdCw0LLRj9C90LUg0L3QsCDQuNC60L7QvdCwINC90LAg0YDQsNCx0L7RgtC90LjRjyDQv9C70L7RgiIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoyNCBsaWIvc2hvcnRjdXQudGNsOjY1Cittc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKK21zZ3N0ciAi0JrQu9Cw0LLQuNGI0L3QsNGC0LAg0LrQvtC80LHQuNC90LDRhtC40Y8g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC90LA6IgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjE0MAorbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKK21zZ3N0ciAi0JjQutC+0L3QsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC90LA6IgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKK21zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICLQotCw0LfQuCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC/0YDQsNCy0L7Qv9C40YHQsCDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsCIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjY1Cittc2dpZCAiU3BlbGwgY2hlY2tpbmcgaXMgdW5hdmFpbGFibGUiCittc2dzdHIgItCb0LjQv9GB0LLQsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC/0YDQsNCy0L7Qv9C40YHQsCIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjY4Cittc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QuCDQvdCw0YHRgtGA0L7QudC60Lgg0L3QsCDQv9GA0L7QstC10YDQutCw0YLQsCDQvdCwINC/0YDQsNCy0L7Qv9C40YHQsCIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgorbXNnc3RyICLQn9C+0LvQt9Cy0LDQvdC1INC90LAg0YDQtdGH0L3QuNC6INC30LAg0LXQt9C40Log4oCeJXPigJwuIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKK21zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgorbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9CwINC/0YDQsNCy0L7Qv9C40YEg0LTQsNC20LUg0L3QtSDRgdGC0LDRgNGC0LjRgNCwINGD0YHQv9C10YjQvdC+LiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCittc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgItCd0LXQv9C+0LfQvdCw0YLQsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC/0YDQsNCy0L7Qv9C40YHQsCIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgorbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgorbXNnc3RyICLQndGP0LzQsCDQv9GA0LXQtNC70L7QttC10L3QuNGPIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg4Cittc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgorbXNnc3RyICLQndC10L7Rh9Cw0LrQstCw0L0g0LrRgNCw0Lkg0L3QsCDRhNCw0LnQuyDQvtGCINC/0YDQvtCz0YDQsNC80LDRgtCwINC30LAg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC/0YDQsNCy0L7Qv9C40YHQsCIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjM5MgorbXNnaWQgIlNwZWxsIENoZWNrZXIgRmFpbGVkIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0LIg0L/RgNC+0LPRgNCw0LzQsNGC0LAg0LfQsCDQv9GA0L7QstC10YDQutCwINC90LAg0L/RgNCw0LLQvtC/0LjRgdCwIgorCisjOiBsaWIvc3Noa2V5LnRjbDozMQorbXNnaWQgIk5vIGtleXMgZm91bmQuIgorbXNnc3RyICLQndC1INGB0LAg0L7RgtC60YDQuNGC0Lgg0LrQu9GO0YfQvtCy0LUuIgorCisjOiBsaWIvc3Noa2V5LnRjbDozNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZvdW5kIGEgcHVibGljIGtleSBpbjogJXMiCittc2dzdHIgItCe0YLQutGA0LjRgiDQtSDQv9GD0LHQu9C40YfQtdC9INC60LvRjtGHINCyIOKAniVz4oCcIgorCisjOiBsaWIvc3Noa2V5LnRjbDo0MAorbXNnaWQgIkdlbmVyYXRlIEtleSIKK21zZ3N0ciAi0JPQtdC90LXRgNC40YDQsNC90LUg0L3QsCDQutC70Y7RhyIKKworIzogbGliL3NzaGtleS50Y2w6NTgKK21zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKK21zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSDQutGK0Lwg0YHQuNGB0YLQtdC80L3QuNGPINCx0YPRhNC10YAiCisKKyM6IGxpYi9zc2hrZXkudGNsOjcyCittc2dpZCAiWW91ciBPcGVuU1NIIFB1YmxpYyBLZXkiCittc2dzdHIgItCf0YPQsdC70LjRh9C90LjRj9GCINCy0Lgg0LrQu9GO0Ycg0LfQsCBPcGVuU1NIIgorCisjOiBsaWIvc3Noa2V5LnRjbDo4MAorbXNnaWQgIkdlbmVyYXRpbmcuLi4iCittc2dzdHIgItCT0LXQvdC10YDQuNGA0LDQvdC14oCmIgorCisjOiBsaWIvc3Noa2V5LnRjbDo4NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgc3NoLWtleWdlbjpcbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorItCf0YDQvtCz0YDQsNC80LDRgtCwIOKAnnNzaC1rZXlnZW7igJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YLQsNGA0YLQuNGA0LDQvdCwOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMTMKK21zZ2lkICJHZW5lcmF0aW9uIGZhaWxlZC4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQs9C10L3QtdGA0LjRgNCw0L3QtS4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjEyMAorbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VlZGVkLCBidXQgbm8ga2V5cyBmb3VuZC4iCittc2dzdHIgItCT0LXQvdC10YDQuNGA0LDQvdC10YLQviDQt9Cw0LLRitGA0YjQuCDRg9GB0L/QtdGI0L3Qviwg0LAg0L3QtSDRgdCwINC90LDQvNC10YDQtdC90Lgg0LrQu9GO0YfQvtCy0LUuIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJZb3VyIGtleSBpcyBpbjogJXMiCittc2dzdHIgItCa0LvRjtGH0YrRgiDQstC4INC1INCyIOKAniVz4oCcIgorCisjOiBsaWIvc3RhdHVzX2Jhci50Y2w6ODcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgorbXNnc3RyICIlc+KApiAlKmkg0L7RgiDQvtCx0YnQviAlKmkgJXMgKCUzaSUlKSIKKworIzogbGliL3Rvb2xzLnRjbDo3NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKK21zZ3N0ciAi0JfQsCDQuNC30L/RitC70L3QtdC90LjQtdGC0L4g0L3QsCDigJ4lc+KAnCDRgtGA0Y/QsdCy0LAg0LTQsCDQuNC30LHQtdGA0LXRgtC1INGE0LDQudC7LiIKKworIzogbGliL3Rvb2xzLnRjbDo5MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJTEkcyBvbiBmaWxlIFwiJTIkc1wiPyIKK21zZ3N0ciAi0KHQuNCz0YPRgNC90Lgg0LvQuCDRgdGC0LUsINGH0LUg0LjRgdC60LDRgtC1INC00LAg0LjQt9C/0YrQu9C90LjRgtC1IOKAniUxJHPigJwg0LLRitGA0YXRgyDRhNCw0LnQu9CwIOKAniUyJHPigJw/IgorCisjOiBsaWIvdG9vbHMudGNsOjk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCittc2dzdHIgItCh0LjQs9GD0YDQvdC4INC70Lgg0YHRgtC1LCDRh9C1INC40YHQutCw0YLQtSDQtNCwINC40LfQv9GK0LvQvdC40YLQtSDigJ4lc+KAnD8iCisKKyM6IGxpYi90b29scy50Y2w6MTE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbDogJXMiCittc2dzdHIgItCa0L7QvNCw0L3QtNCwOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nOiAlcyIKK21zZ3N0ciAi0JjQt9C/0YrQu9C90LXQvdC40LU6ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjE1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCittc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDQt9Cw0LLRitGA0YjQuCDRg9GB0L/QtdGI0L3QvjogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCBmYWlsZWQ6ICVzIgorbXNnc3RyICLQmtC+0LzQsNC90LTQsNGC0LAg0LLRitGA0L3QsCDQs9GA0LXRiNC60LA6ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IEFkZCBUb29sIgorbXNnc3RyICIlcyAoJXMpOiDQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LrQvtC80LDQvdC00LAiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI4Cittc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDQutC+0LzQsNC90LTQsCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQKK21zZ2lkICJBZGQgZ2xvYmFsbHkiCittc2dzdHIgItCT0LvQvtCx0LDQu9C90L4g0LTQvtCx0LDQstGP0L3QtSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDYKK21zZ2lkICJUb29sIERldGFpbHMiCittc2dzdHIgItCf0L7QtNGA0L7QsdC90L7RgdGC0Lgg0LfQsCDQutC+0LzQsNC90LTQsNGC0LAiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjQ5Cittc2dpZCAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiCittc2dzdHIgItCX0LAg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0L/QvtC00LzQtdC90Y7RgtCwINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0LfQvdCw0LrQsCDigJ4v4oCcINC30LAg0YDQsNC30LTQtdC70LjRgtC10Ls6IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo2MAorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICLQmtC+0LzQsNC90LTQsDoiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjcxCittc2dpZCAiU2hvdyBhIGRpYWxvZyBiZWZvcmUgcnVubmluZyIKK21zZ3N0ciAi0J/RgNC10LTQuCDQuNC30L/RitC70L3QtdC90LjQtSDQtNCwINGB0LUg0LjQt9Cy0LXQttC00LAg0LTQuNCw0LvQvtCz0L7QsiDQv9GA0L7Qt9C+0YDQtdGGIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo3NworbXNnaWQgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyAkUkVWSVNJT04pIgorbXNnc3RyICLQn9C+0YLRgNC10LHQuNGC0LXQu9GP0YIg0LTQsCDRg9C60LDQttC1INCy0LXRgNGB0LjRjyAo0LfQsNC00LDQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC70LjQstCw0YLQsCAkUkVWSVNJT04pIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4MgorbXNnaWQgIkFzayB0aGUgdXNlciBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgKHNldHMgJEFSR1MpIgorbXNnc3RyICIiCisi0J/QvtGC0YDQtdCx0LjRgtC10LvRj9GCINC00LAg0YPQutCw0LbQtSDQtNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0LDRgNCz0YPQvNC10L3RgtC4ICjQt9Cw0LTQsNCy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LvQuNCy0LDRgtCwICRBUkdTKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6ODkKK21zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCittc2dzdHIgItCR0LXQtyDQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDQv9GA0L7Qt9C+0YDQtdGGINGBINC40LfRhdC+0LTQsCDQvtGCINC60L7QvNCw0L3QtNCw0YLQsCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTQKK21zZ2lkICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKCRGSUxFTkFNRSBub3QgZW1wdHkpIgorbXNnc3RyICIiCisi0KHRgtCw0YDRgtC40YDQsNC90LUg0YHQsNC80L4g0YHQu9C10LQg0LjQt9Cx0L7RgCDQvdCwINGA0LDQt9C70LjQutCwICjQv9GA0L7QvNC10L3Qu9C40LLQsNGC0LAgJEZJTEVOQU1FINC90LUg0LUg0L/RgNCw0LfQvdCwKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTE4Cittc2dpZCAiUGxlYXNlIHN1cHBseSBhIG5hbWUgZm9yIHRoZSB0b29sLiIKK21zZ3N0ciAi0JfQsNC00LDQudGC0LUg0LjQvNC1INC30LAg0LrQvtC80LDQvdC00LDRgtCwLiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIOKAniVz4oCcINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwLiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhZGQgdG9vbDpcbiIKKyIlcyIKK21zZ3N0ciAiIgorItCa0L7QvNCw0L3QtNCw0YLQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LTQvtCx0LDQstC10L3QsDpcbiIKKyIlcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTg3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgKCVzKTogUmVtb3ZlIFRvb2wiCittc2dzdHIgIiVzICglcyk6INCf0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0LrQvtC80LDQvdC00LAiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5MworbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgorbXNnc3RyICLQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINC60L7QvNCw0L3QtNC4IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTgKK21zZ2lkICJSZW1vdmUiCittc2dzdHIgItCf0YDQtdC80LDRhdCy0LDQvdC1IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzEKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIo0LrQvtC80LDQvdC00LjRgtC1INC60YrQvCDQu9C+0LrQsNC70L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INGB0LAg0L7QsdC+0LfQvdCw0YfQtdC90Lgg0LIg0YHQuNC90YzQvikiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IgorbXNnc3RyICIlcyAoJXMpOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjkyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUnVuIENvbW1hbmQ6ICVzIgorbXNnc3RyICLQmNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QvNCw0L3QtNCw0YLQsCDigJ4lc+KAnCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzA2Cittc2dpZCAiQXJndW1lbnRzIgorbXNnc3RyICLQkNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjM0MQorbXNnaWQgIk9LIgorbXNnc3RyICLQlNC+0LHRgNC1IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSAlcyIKK21zZ3N0ciAi0JTQvtGB0YLQsNCy0Y/QvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INC+0YIg4oCeJXPigJwiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicmVtb3RlIHBydW5lICVzIgorbXNnc3RyICLQvtC60LDRgdGC0YDRj9C90LUg0L3QsCDRgdC70LXQtNGP0YnQuNGC0LUg0LrQu9C+0L3QuCDQutGK0Lwg4oCeJXPigJwiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gJXMiCittc2dzdHIgItCe0LrQsNGB0YLRgNGP0L3QtSDQvdCwINGB0LvQtdC00Y/RidC40YLQtSDQutC70L7QvdC4INC90LAg0LjQt9GC0YDQuNGC0LjRgtC1INC60LvQvtC90Lgg0L7RgiDigJ4lc+KAnCIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MjUKK21zZ2lkICJmZXRjaCBhbGwgcmVtb3RlcyIKK21zZ3N0ciAi0LTQvtGB0YLQsNCy0Y/QvdC1INC+0YIg0LLRgdC40YfQutC4INC+0YLQtNCw0LvQtdGH0LXQvdC4IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgItCU0L7RgdGC0LDQstGP0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQvtGCINCy0YHQuNGH0LrQuCDQvtGC0LTQsNC70LXRh9C10L3QuCDRhdGA0LDQvdC40LvQuNGJ0LAiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjQwCittc2dpZCAicmVtb3RlIHBydW5lIGFsbCByZW1vdGVzIgorbXNnc3RyICLQvtC60LDRgdGC0YDRj9C90LUg0L3QsCDRgdC70LXQtNGP0YnQuNGC0LUg0LjQt9GC0YDQuNGC0LgiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjQxCittc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIiIKKyLQntC60LDRgdGC0YDRj9C90LUg0L3QsCDRgdC70LXQtNGP0YnQuNGC0LUg0LrQu9C+0L3QuCDQvdCwINC40LfRgtGA0LjRgtC40YLQtSDQutC70L7QvdC4INC+0YIg0LLRgdC40YfQutC4INC+0YLQtNCw0LvQtdGH0LXQvdC4ICIKKyLRhdGA0LDQvdC40LvQuNGJ0LAiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyBjaGFuZ2VzIHRvICVzIgorbXNnc3RyICLQmNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INC60YrQvCDigJ4lc+KAnCIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCittc2dzdHIgItCY0LfRgtC70LDRgdC60LLQsNC90LUg0L3QsCDQstGB0LjRh9C60L4g0LrRitC8IOKAniVz4oCcIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQdXNoaW5nICVzICVzIHRvICVzIgorbXNnc3RyICLQmNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LAgJXMg4oCeJXPigJwg0LrRitC8IOKAniVz4oCcIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMzIKK21zZ2lkICJQdXNoIEJyYW5jaGVzIgorbXNnc3RyICLQmtC70L7QvdC4INC30LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTQ3Cittc2dpZCAiU291cmNlIEJyYW5jaGVzIgorbXNnc3RyICLQmtC70L7QvdC4LdC40LfRgtC+0YfQvdC40YbQuCIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTYyCittc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKK21zZ3N0ciAi0KbQtdC70LXQstC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MjA1Cittc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKK21zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4INC/0YDQuCDQv9GA0LXQvdCw0YHRj9C90LXRgtC+IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyMDcKK21zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorItCY0LfRgNC40YfQvdC+INC/0YDQtdC30LDQv9C40YHQstCw0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0Ykg0LrQu9C+0L0gKNC90Y/QutC+0Lgg0L/RgNC+0LzQtdC90Lgg0LzQvtC20LUg0LTQsCDQsdGK0LTQsNGCICIKKyLQt9Cw0LPRg9Cx0LXQvdC4KSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MjExCittc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCittc2dzdHIgItCc0LDQutGB0LjQvNCw0LvQvdCwINC60L7QvNC/0YDQtdGB0LjRjyAo0LfQsCDQsdCw0LLQvdC4INC80YDQtdC20L7QstC4INCy0YDRitC30LrQuCkiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjIxNQorbXNnaWQgIkluY2x1ZGUgdGFncyIKK21zZ3N0ciAi0JLQutC70Y7Rh9Cy0LDQvdC1INC90LAg0LXRgtC40LrQtdGC0LjRgtC1IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyAoJXMpOiBQdXNoIgorbXNnc3RyICIlcyAoJXMpOiDQmNC30YLQu9Cw0YHQutCy0LDQvdC1IgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9kZS5wbyBiL2dpdC1ndWkvcG8vZGUucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThkNWY2MQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vZGUucG8KQEAgLTAsMCArMSwyODc0IEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgdG8gR2VybWFuLgorIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2hhd24gUGVhcmNlLCBldCBhbC4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdCBwYWNrYWdlLgorIyBDaHJpc3RpYW4gU3RpbW1pbmcgPHN0aW1taW5nQHR1aGguZGU+LCAyMDA3CisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDIwLTAyLTA4IDIyOjU0KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDIwLTAyLTA5IDIyOjQwKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IENocmlzdGlhbiBTdGltbWluZyA8Y2hyaXN0aWFuQGNzdGltbWluZy5kZT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHZXJtYW5cbiIKKyJMYW5ndWFnZTogZGVfREVcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0LWd1aS5zaDo4NDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGZvbnQgc3BlY2lmaWVkIGluICVzOiIKK21zZ3N0ciAiVW5nw7xsdGlnZSBaZWljaGVuc2F0ei1BbmdhYmUgaW4gJXM6IgorCisjOiBnaXQtZ3VpLnNoOjkwMQorbXNnaWQgIk1haW4gRm9udCIKK21zZ3N0ciAiUHJvZ3JhbW1zY2hyaWZ0YXJ0IgorCisjOiBnaXQtZ3VpLnNoOjkwMgorbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgorbXNnc3RyICJWZXJnbGVpY2gtU2NocmlmdGFydCIKKworIzogZ2l0LWd1aS5zaDo5MTcgZ2l0LWd1aS5zaDo5MzEgZ2l0LWd1aS5zaDo5NDQgZ2l0LWd1aS5zaDoxMDM0IGdpdC1ndWkuc2g6MTA1MworIzogZ2l0LWd1aS5zaDozMjEyCittc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCittc2dzdHIgImdpdC1ndWk6IFByb2dyYW1tZmVobGVyIgorCisjOiBnaXQtZ3VpLnNoOjkxOAorbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKK21zZ3N0ciAiR2l0IGthbm4gaW0gUEFUSCBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4uIgorCisjOiBnaXQtZ3VpLnNoOjk0NQorbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgorbXNnc3RyICJHaXQgVmVyc2lvbnNhbmdhYmUga2FubiBuaWNodCBlcmthbm50IHdlcmRlbjoiCisKKyM6IGdpdC1ndWkuc2g6OTcwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgorIlxuIgorIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCisiXG4iCisiJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgorIlxuIgorIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCittc2dzdHIgIiIKKyJEaWUgVmVyc2lvbiB2b24gR2l0IGthbm4gbmljaHQgYmVzdGltbXQgd2VyZGVuLlxuIgorIlxuIgorIsK7JXPCqyBiZWhhdXB0ZXQsIGVzIHNlaSBWZXJzaW9uIMK7JXPCqy5cbiIKKyJcbiIKKyIlcyBiZW7DtnRpZ3QgbWluZGVzdGVucyBHaXQgMS41LjAgb2RlciBow7ZoZXIuXG4iCisiXG4iCisiU29sbCBhbmdlbm9tbWVuIHdlcmRlbiwgwrslc8KrIHNlaSBWZXJzaW9uIDEuNS4wP1xuIgorCisjOiBnaXQtZ3VpLnNoOjEyNjcKK21zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCittc2dzdHIgIkdpdC1WZXJ6ZWljaG5pcyBuaWNodCBnZWZ1bmRlbjoiCisKKyM6IGdpdC1ndWkuc2g6MTMwMQorbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCittc2dzdHIgIiIKKyJFcyBrb25udGUgbmljaHQgaW4gZGFzIG9iZXJzdGUgVmVyemVpY2huaXMgZGVyIEFyYmVpdHNrb3BpZSBnZXdlY2hzZWx0ICIKKyJ3ZXJkZW46IgorCisjOiBnaXQtZ3VpLnNoOjEzMDkKK21zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCittc2dzdHIgIkJsb8OfZXMgUmVwb3NpdG9yeSBrYW5uIG5pY2h0IGJlbnV0enQgd2VyZGVuOiIKKworIzogZ2l0LWd1aS5zaDoxMzE3Cittc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIktlaW4gQXJiZWl0c3ZlcnplaWNobmlzIgorCisjOiBnaXQtZ3VpLnNoOjE0OTEgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKK21zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgorbXNnc3RyICJEYXRlaXN0YXR1cyBha3R1YWxpc2llcmVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE1NTEKK21zZ2lkICJTY2FubmluZyBmb3IgbW9kaWZpZWQgZmlsZXMgLi4uIgorbXNnc3RyICJOYWNoIGdlw6RuZGVydGVuIERhdGVpZW4gc3VjaGVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE2MjkKK21zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICJBdWZydWZlbiBkZXMgwrtwcmVwYXJlLWNvbW1pdC1tc2cgaG9va8KrLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE2NDYKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suIgorbXNnc3RyICJDb21taXQgYWJnZWxlaG50IGR1cmNoIMK7cHJlcGFyZS1jb21taXQtbXNnIGhvb2vCqy4iCisKKyM6IGdpdC1ndWkuc2g6MTgwNCBsaWIvYnJvd3Nlci50Y2w6MjUyCittc2dpZCAiUmVhZHkuIgorbXNnc3RyICJCZXJlaXQuIgorCisjOiBnaXQtZ3VpLnNoOjE5NjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRGlzcGxheSBsaW1pdCAoZ3VpLm1heGZpbGVzZGlzcGxheWVkID0gJXMpIHJlYWNoZWQsIG5vdCBzaG93aW5nIGFsbCAlcyBmaWxlcy4iCittc2dzdHIgIiIKKyJBbnplaWdlbGltaXQgZXJyZWljaHQgKGd1aS5tYXhmaWxlc2Rpc3BsYXllZCA9ICVzKSBmw7xyIEFuemFobCBFaW50csOkZ2UuIEVzICIKKyJ3ZXJkZW4gbmljaHQgYWxsZSAlcyBEYXRlaWVuIGdlemVpZ3QuIgorCisjOiBnaXQtZ3VpLnNoOjIwOTEKK21zZ2lkICJVbm1vZGlmaWVkIgorbXNnc3RyICJVbnZlcsOkbmRlcnQiCisKKyM6IGdpdC1ndWkuc2g6MjA5MworbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJWZXLDpG5kZXJ0LCBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKKworIzogZ2l0LWd1aS5zaDoyMDk0IGdpdC1ndWkuc2g6MjEwNgorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICJCZXJlaXRnZXN0ZWxsdCB6dW0gQ29tbWl0dGVuIgorCisjOiBnaXQtZ3VpLnNoOjIwOTUgZ2l0LWd1aS5zaDoyMTA3Cittc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIlRlaWx3ZWlzZSBiZXJlaXRnZXN0ZWxsdCB6dW0gQ29tbWl0dGVuIgorCisjOiBnaXQtZ3VpLnNoOjIwOTYgZ2l0LWd1aS5zaDoyMTA4Cittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQsIG1pc3NpbmciCittc2dzdHIgIkJlcmVpdGdlc3RlbGx0IHp1bSBDb21taXR0ZW4sIGZlaGxlbmQiCisKKyM6IGdpdC1ndWkuc2g6MjA5OAorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJEYXRlaXR5cCBnZcOkbmRlcnQsIG5pY2h0IGJlcmVpdGdlc3RlbGx0IgorCisjOiBnaXQtZ3VpLnNoOjIwOTkgZ2l0LWd1aS5zaDoyMTAwCittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG9sZCB0eXBlIHN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICJEYXRlaXR5cCBnZcOkbmRlcnQsIGFsdGVyIERhdGVpdHlwIGJlcmVpdGdlc3RlbGx0IgorCisjOiBnaXQtZ3VpLnNoOjIxMDEKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgorbXNnc3RyICJEYXRlaXR5cCBnZcOkbmRlcnQsIGJlcmVpdGdlc3RlbGx0IgorCisjOiBnaXQtZ3VpLnNoOjIxMDIKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlIHN0YWdlZCwgbW9kaWZpY2F0aW9uIG5vdCBzdGFnZWQiCittc2dzdHIgIkRhdGVpdHlwLcOEbmRlcnVuZyBiZXJlaXRnZXN0ZWxsdCwgSW5oYWx0c8OkbmRlcnVuZyBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKKworIzogZ2l0LWd1aS5zaDoyMTAzCittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZSBzdGFnZWQsIGZpbGUgbWlzc2luZyIKK21zZ3N0ciAiRGF0ZWl0eXAtw4RuZGVydW5nIGJlcmVpdGdlc3RlbGx0LCBEYXRlaSBnZWzDtnNjaHQiCisKKyM6IGdpdC1ndWkuc2g6MjEwNQorbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiVW52ZXJzaW9uaWVydCwgbmljaHQgYmVyZWl0Z2VzdGVsbHQiCisKKyM6IGdpdC1ndWkuc2g6MjExMAorbXNnaWQgIk1pc3NpbmciCittc2dzdHIgIkZlaGxlbmQiCisKKyM6IGdpdC1ndWkuc2g6MjExMQorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKK21zZ3N0ciAiQmVyZWl0Z2VzdGVsbHQgenVtIEzDtnNjaGVuIgorCisjOiBnaXQtZ3VpLnNoOjIxMTIKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIkJlcmVpdGdlc3RlbGx0IHp1bSBMw7ZzY2hlbiwgdHJvdHpkZW0gdm9yaGFuZGVuIgorCisjOiBnaXQtZ3VpLnNoOjIxMTQgZ2l0LWd1aS5zaDoyMTE1IGdpdC1ndWkuc2g6MjExNiBnaXQtZ3VpLnNoOjIxMTcKKyM6IGdpdC1ndWkuc2g6MjExOCBnaXQtZ3VpLnNoOjIxMTkKK21zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICJLb25mbGlrdGF1ZmzDtnN1bmcgbsO2dGlnIgorCisjOiBnaXQtZ3VpLnNoOjIxNjQKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdGsgaW4gUEFUSCIKK21zZ3N0ciAiR2l0ayBrYW5uIGltIFBBVEggbmljaHQgZ2VmdW5kZW4gd2VyZGVuLiIKKworIzogZ2l0LWd1aS5zaDoyMjEwIGdpdC1ndWkuc2g6MjI0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YXJ0aW5nICVzLi4uIHBsZWFzZSB3YWl0Li4uIgorbXNnc3RyICIlcyB3aXJkIGdlc3RhcnRldC4uLiBiaXR0ZSB3YXJ0ZW4uIgorCisjOiBnaXQtZ3VpLnNoOjIyMjQKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiwrtHaXQgZ3Vpwqsga2FubiBpbSBQQVRIIG5pY2h0IGdlZnVuZGVuIHdlcmRlbi4iCisKKyM6IGdpdC1ndWkuc2g6MjcyNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzCittc2dpZCAiUmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVwb3NpdG9yeSIKKworIzogZ2l0LWd1aS5zaDoyNzI3Cittc2dpZCAiRWRpdCIKK21zZ3N0ciAiQmVhcmJlaXRlbiIKKworIzogZ2l0LWd1aS5zaDoyNzI5IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjcKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIkJyYW5jaCIKKworIzogZ2l0LWd1aS5zaDoyNzMyIGxpYi9jaG9vc2VfcmV2LnRjbDo1NTQKK21zZ2lkICJDb21taXRAQG5vdW4iCittc2dzdHIgIkNvbW1pdCIKKworIzogZ2l0LWd1aS5zaDoyNzM1IGxpYi9tZXJnZS50Y2w6MTI3IGxpYi9tZXJnZS50Y2w6MTc0Cittc2dpZCAiTWVyZ2UiCittc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiIKKworIzogZ2l0LWd1aS5zaDoyNzM2IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjMKK21zZ2lkICJSZW1vdGUiCittc2dzdHIgIkV4dGVybiIKKworIzogZ2l0LWd1aS5zaDoyNzM5Cittc2dpZCAiVG9vbHMiCittc2dzdHIgIldlcmt6ZXVnZSIKKworIzogZ2l0LWd1aS5zaDoyNzQ4Cittc2dpZCAiRXhwbG9yZSBXb3JraW5nIENvcHkiCittc2dzdHIgIkFyYmVpdHNrb3BpZSBpbSBEYXRlaW1hbmFnZXIgw7ZmZm5lbiIKKworIzogZ2l0LWd1aS5zaDoyNzYzCittc2dpZCAiR2l0IEJhc2giCittc2dzdHIgIkdpdCBCYXNoIgorCisjOiBnaXQtZ3VpLnNoOjI3NzIKK21zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKK21zZ3N0ciAiQWt0dWVsbGVuIEJyYW5jaCBkdXJjaGJsw6R0dGVybiIKKworIzogZ2l0LWd1aS5zaDoyNzc2Cittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKK21zZ3N0ciAiQnJhbmNoIGR1cmNoYmzDpHR0ZXJuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3ODEKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICJBa3R1ZWxsZW4gQnJhbmNoIGRhcnN0ZWxsZW4iCisKKyM6IGdpdC1ndWkuc2g6Mjc4NQorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCittc2dzdHIgIkhpc3RvcmllIGFsbGVyIEJyYW5jaGVzIGRhcnN0ZWxsZW4iCisKKyM6IGdpdC1ndWkuc2g6Mjc5MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgorbXNnc3RyICJCcmFuY2ggwrslc8KrIGR1cmNoYmzDpHR0ZXJuIgorCisjOiBnaXQtZ3VpLnNoOjI3OTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgorbXNnc3RyICJIaXN0b3JpZSB2b24gwrslc8KrIGRhcnN0ZWxsZW4iCisKKyM6IGdpdC1ndWkuc2g6Mjc5OSBsaWIvZGF0YWJhc2UudGNsOjQwCittc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKK21zZ3N0ciAiRGF0ZW5iYW5rc3RhdGlzdGlrIgorCisjOiBnaXQtZ3VpLnNoOjI4MDIgbGliL2RhdGFiYXNlLnRjbDozMworbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgorbXNnc3RyICJEYXRlbmJhbmsga29tcHJpbWllcmVuIgorCisjOiBnaXQtZ3VpLnNoOjI4MDUKK21zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCittc2dzdHIgIkRhdGVuYmFuayDDvGJlcnByw7xmZW4iCisKKyM6IGdpdC1ndWkuc2g6MjgxMiBnaXQtZ3VpLnNoOjI4MTYgZ2l0LWd1aS5zaDoyODIwCittc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKK21zZ3N0ciAiRGVza3RvcC1JY29uIGVyc3RlbGxlbiIKKworIzogZ2l0LWd1aS5zaDoyODI4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjA5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjE3Cittc2dpZCAiUXVpdCIKK21zZ3N0ciAiQmVlbmRlbiIKKworIzogZ2l0LWd1aS5zaDoyODM2Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAiUsO8Y2tnw6RuZ2lnIgorCisjOiBnaXQtZ3VpLnNoOjI4MzkKK21zZ2lkICJSZWRvIgorbXNnc3RyICJXaWVkZXJob2xlbiIKKworIzogZ2l0LWd1aS5zaDoyODQzIGdpdC1ndWkuc2g6MzQ2MQorbXNnaWQgIkN1dCIKK21zZ3N0ciAiQXVzc2NobmVpZGVuIgorCisjOiBnaXQtZ3VpLnNoOjI4NDYgZ2l0LWd1aS5zaDozNDY0IGdpdC1ndWkuc2g6MzU0MCBnaXQtZ3VpLnNoOjM2MzMKKyM6IGxpYi9jb25zb2xlLnRjbDo2OQorbXNnaWQgIkNvcHkiCittc2dzdHIgIktvcGllcmVuIgorCisjOiBnaXQtZ3VpLnNoOjI4NDkgZ2l0LWd1aS5zaDozNDY3Cittc2dpZCAiUGFzdGUiCittc2dzdHIgIkVpbmbDvGdlbiIKKworIzogZ2l0LWd1aS5zaDoyODUyIGdpdC1ndWkuc2g6MzQ3MCBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM5CisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjgKK21zZ2lkICJEZWxldGUiCittc2dzdHIgIkzDtnNjaGVuIgorCisjOiBnaXQtZ3VpLnNoOjI4NTYgZ2l0LWd1aS5zaDozNDc0IGdpdC1ndWkuc2g6MzYzNyBsaWIvY29uc29sZS50Y2w6NzEKK21zZ2lkICJTZWxlY3QgQWxsIgorbXNnc3RyICJBbGxlIGF1c3fDpGhsZW4iCisKKyM6IGdpdC1ndWkuc2g6Mjg2NQorbXNnaWQgIkNyZWF0ZS4uLiIKK21zZ3N0ciAiRXJzdGVsbGVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI4NzEKK21zZ2lkICJDaGVja291dC4uLiIKK21zZ3N0ciAiQXVzY2hlY2tlbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyODc3Cittc2dpZCAiUmVuYW1lLi4uIgorbXNnc3RyICJVbWJlbmVubmVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI4ODIKK21zZ2lkICJEZWxldGUuLi4iCittc2dzdHIgIkzDtnNjaGVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI4ODcKK21zZ2lkICJSZXNldC4uLiIKK21zZ3N0ciAiw4RuZGVydW5nZW4gdmVyd2VyZmVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI4OTcKK21zZ2lkICJEb25lIgorbXNnc3RyICJGZXJ0aWciCisKKyM6IGdpdC1ndWkuc2g6Mjg5OQorbXNnaWQgIkNvbW1pdEBAdmVyYiIKK21zZ3N0ciAiQ29tbWl0dGVuIgorCisjOiBnaXQtZ3VpLnNoOjI5MDggZ2l0LWd1aS5zaDozNDAwCittc2dpZCAiQW1lbmQgTGFzdCBDb21taXQiCittc2dzdHIgIkxldHp0ZW4gQ29tbWl0IG5hY2hiZXNzZXJuIgorCisjOiBnaXQtZ3VpLnNoOjI5MTggZ2l0LWd1aS5zaDozMzYxIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTAxCittc2dpZCAiUmVzY2FuIgorbXNnc3RyICJOZXUgbGFkZW4iCisKKyM6IGdpdC1ndWkuc2g6MjkyNAorbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKK21zZ3N0ciAiRsO8ciBDb21taXQgYmVyZWl0c3RlbGxlbiIKKworIzogZ2l0LWd1aS5zaDoyOTMwCittc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCittc2dzdHIgIkdlw6RuZGVydGUgRGF0ZWllbiBmw7xyIENvbW1pdCBiZXJlaXRzdGVsbGVuIgorCisjOiBnaXQtZ3VpLnNoOjI5MzYKK21zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgorbXNnc3RyICJBdXMgQ29tbWl0LUJlcmVpdHN0ZWxsdW5nIGhlcmF1c25laG1lbiIKKworIzogZ2l0LWd1aS5zaDoyOTQyIGxpYi9pbmRleC50Y2w6NTIxCittc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCittc2dzdHIgIsOEbmRlcnVuZ2VuIHZlcndlcmZlbiIKKworIzogZ2l0LWd1aS5zaDoyOTUwIGdpdC1ndWkuc2g6MzcwMCBnaXQtZ3VpLnNoOjM3MzEKK21zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKK21zZ3N0ciAiV2VuaWdlciBaZWlsZW4gYW56ZWlnZW4iCisKKyM6IGdpdC1ndWkuc2g6Mjk1NCBnaXQtZ3VpLnNoOjM3MDQgZ2l0LWd1aS5zaDozNzM1Cittc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCittc2dzdHIgIk1laHIgWmVpbGVuIGFuemVpZ2VuIgorCisjOiBnaXQtZ3VpLnNoOjI5NjEgZ2l0LWd1aS5zaDozMzc0IGdpdC1ndWkuc2g6MzQ4NQorbXNnaWQgIlNpZ24gT2ZmIgorbXNnc3RyICJBYnplaWNobmVuIgorCisjOiBnaXQtZ3VpLnNoOjI5NzcKK21zZ2lkICJMb2NhbCBNZXJnZS4uLiIKK21zZ3N0ciAiTG9rYWxlcyBadXNhbW1lbmbDvGhyZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjk4MgorbXNnaWQgIkFib3J0IE1lcmdlLi4uIgorbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gYWJicmVjaGVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI5OTQgZ2l0LWd1aS5zaDozMDIyCittc2dpZCAiQWRkLi4uIgorbXNnc3RyICJOZXVlcyBoaW56dWbDvGdlbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyOTk4Cittc2dpZCAiUHVzaC4uLiIKK21zZ3N0ciAiVmVyc2VuZGVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjMwMDIKK21zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgorbXNnc3RyICJCcmFuY2ggbMO2c2NoZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MzAxMiBnaXQtZ3VpLnNoOjM2NjYKK21zZ2lkICJPcHRpb25zLi4uIgorbXNnc3RyICJPcHRpb25lbi4uLiIKKworIzogZ2l0LWd1aS5zaDozMDIzCittc2dpZCAiUmVtb3ZlLi4uIgorbXNnc3RyICJFbnRmZXJuZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MzAzMiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY3Cittc2dpZCAiSGVscCIKK21zZ3N0ciAiSGlsZmUiCisKKyM6IGdpdC1ndWkuc2g6MzAzNiBnaXQtZ3VpLnNoOjMwNDAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MCBsaWIvYWJvdXQudGNsOjE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvdXQgJXMiCittc2dzdHIgIsOcYmVyICVzIgorCisjOiBnaXQtZ3VpLnNoOjMwNjQKK21zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKK21zZ3N0ciAiT25saW5lLURva3VtZW50YXRpb24iCisKKyM6IGdpdC1ndWkuc2g6MzA2NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzMKK21zZ2lkICJTaG93IFNTSCBLZXkiCittc2dzdHIgIlNTSC1TY2hsw7xzc2VsIGFuemVpZ2VuIgorCisjOiBnaXQtZ3VpLnNoOjMwOTcgZ2l0LWd1aS5zaDozMjI5Cittc2dpZCAidXNhZ2U6IgorbXNnc3RyICJWZXJ3ZW5kdW5nOiIKKworIzogZ2l0LWd1aS5zaDozMTAxIGdpdC1ndWkuc2g6MzIzMworbXNnaWQgIlVzYWdlIgorbXNnc3RyICJWZXJ3ZW5kdW5nIgorCisjOiBnaXQtZ3VpLnNoOjMxODIgbGliL2JsYW1lLnRjbDo1NzUKK21zZ2lkICJFcnJvciIKK21zZ3N0ciAiRmVobGVyIgorCisjOiBnaXQtZ3VpLnNoOjMyMTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIkZlaGxlcjogVmVyemVpY2huaXMgwrslc8KrIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW46IERhdGVpIG9kZXIgVmVyemVpY2huaXMgIgorIm5pY2h0IGdlZnVuZGVuIgorCisjOiBnaXQtZ3VpLnNoOjMyNDYKK21zZ2lkICJDdXJyZW50IEJyYW5jaDoiCittc2dzdHIgIkFrdHVlbGxlciBCcmFuY2g6IgorCisjOiBnaXQtZ3VpLnNoOjMyNzEKK21zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIgorbXNnc3RyICJOaWNodCBiZXJlaXRnZXN0ZWxsdGUgw4RuZGVydW5nZW4iCisKKyM6IGdpdC1ndWkuc2g6MzI5MworbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCittc2dzdHIgIkJlcmVpdHN0ZWxsdW5nICh6dW0gQ29tbWl0dGVuKSIKKworIzogZ2l0LWd1aS5zaDozMzY3Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAiQWxsZXMgYmVyZWl0c3RlbGxlbiIKKworIzogZ2l0LWd1aS5zaDozMzg2IGxpYi90cmFuc3BvcnQudGNsOjEzNworbXNnaWQgIlB1c2giCittc2dzdHIgIlZlcnNlbmRlbiIKKworIzogZ2l0LWd1aS5zaDozNDEzCittc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIkVyc3RlIENvbW1pdC1CZXNjaHJlaWJ1bmc6IgorCisjOiBnaXQtZ3VpLnNoOjM0MTQKK21zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiTmFjaGdlYmVzc2VydGUgQmVzY2hyZWlidW5nOiIKKworIzogZ2l0LWd1aS5zaDozNDE1Cittc2dpZCAiQW1lbmRlZCBJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiTmFjaGdlYmVzc2VydGUgZXJzdGUgQmVzY2hyZWlidW5nOiIKKworIzogZ2l0LWd1aS5zaDozNDE2Cittc2dpZCAiQW1lbmRlZCBNZXJnZSBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIk5hY2hnZWJlc3NlcnRlIFp1c2FtbWVuZsO8aHJ1bmdzLUJlc2NocmVpYnVuZzoiCisKKyM6IGdpdC1ndWkuc2g6MzQxNworbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3MtQmVzY2hyZWlidW5nOiIKKworIzogZ2l0LWd1aS5zaDozNDE4Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJDb21taXQtQmVzY2hyZWlidW5nOiIKKworIzogZ2l0LWd1aS5zaDozNDc3IGdpdC1ndWkuc2g6MzY0MSBsaWIvY29uc29sZS50Y2w6NzMKK21zZ2lkICJDb3B5IEFsbCIKK21zZ3N0ciAiQWxsZSBrb3BpZXJlbiIKKworIzogZ2l0LWd1aS5zaDozNTAxIGxpYi9ibGFtZS50Y2w6MTA2Cittc2dpZCAiRmlsZToiCittc2dzdHIgIkRhdGVpOiIKKworIzogZ2l0LWd1aS5zaDozNTQ5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEwMAorbXNnaWQgIk9wZW4iCittc2dzdHIgIsOWZmZuZW4iCisKKyM6IGdpdC1ndWkuc2g6MzYyOQorbXNnaWQgIlJlZnJlc2giCittc2dzdHIgIkFrdHVhbGlzaWVyZW4iCisKKyM6IGdpdC1ndWkuc2g6MzY1MAorbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAiU2NocmlmdGdyw7bDn2UgdmVya2xlaW5lcm4iCisKKyM6IGdpdC1ndWkuc2g6MzY1NAorbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAiU2NocmlmdGdyw7bDn2UgdmVyZ3LDtsOfZXJuIgorCisjOiBnaXQtZ3VpLnNoOjM2NjIgbGliL2JsYW1lLnRjbDoyOTYKK21zZ2lkICJFbmNvZGluZyIKK21zZ3N0ciAiWmVpY2hlbmtvZGllcnVuZyIKKworIzogZ2l0LWd1aS5zaDozNjczCittc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgorbXNnc3RyICJQYXRjaC1CbG9jayBhbndlbmRlbi96dXLDvGNrbmVobWVuIgorCisjOiBnaXQtZ3VpLnNoOjM2NzgKK21zZ2lkICJBcHBseS9SZXZlcnNlIExpbmUiCittc2dzdHIgIlplaWxlIGFud2VuZGVuL3p1csO8Y2tuZWhtZW4iCisKKyM6IGdpdC1ndWkuc2g6MzY4NCBnaXQtZ3VpLnNoOjM3OTQgZ2l0LWd1aS5zaDozODA1Cittc2dpZCAiUmV2ZXJ0IEh1bmsiCittc2dzdHIgIlBhdGNoLUJsb2NrIHp1csO8Y2tuZWhtZW4iCisKKyM6IGdpdC1ndWkuc2g6MzY4OSBnaXQtZ3VpLnNoOjM4MDEgZ2l0LWd1aS5zaDozODEyCittc2dpZCAiUmV2ZXJ0IExpbmUiCittc2dzdHIgIlplaWxlbsOkbmRlcnVuZ2VuIHp1csO8Y2tuZWhtZW4iCisKKyM6IGdpdC1ndWkuc2g6MzY5NCBnaXQtZ3VpLnNoOjM3OTEKK21zZ2lkICJVbmRvIExhc3QgUmV2ZXJ0IgorbXNnc3RyICJMZXR6dGVzIFp1csO8Y2tuZWhtZW4gcsO8Y2tnw6RuZ2lnIgorCisjOiBnaXQtZ3VpLnNoOjM3MTMKK21zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1ZyIKKworIzogZ2l0LWd1aS5zaDozNzE4Cittc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgorbXNnc3RyICJFeHRlcm5lIFZlcnNpb24gYmVudXR6ZW4iCisKKyM6IGdpdC1ndWkuc2g6MzcyMgorbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgorbXNnc3RyICJMb2thbGUgVmVyc2lvbiBiZW51dHplbiIKKworIzogZ2l0LWd1aS5zaDozNzI2Cittc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCittc2dzdHIgIlp1csO8Y2tzZXR6ZW4gYXVmIHVyc3Byw7xuZ2xpY2hlbiBDb21taXQiCisKKyM6IGdpdC1ndWkuc2g6Mzc0NAorbXNnaWQgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIkRpZXNlIMOEbmRlcnVuZ2VuIGltIFN1Ym1vZHVsIGRhcnN0ZWxsZW4iCisKKyM6IGdpdC1ndWkuc2g6Mzc0OAorbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIkFrdHVlbGxlbiBCcmFuY2ggaW0gU3VibW9kdWwgZGFyc3RlbGxlbiIKKworIzogZ2l0LWd1aS5zaDozNzUyCittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJBbGxlIEJyYW5jaGVzIGltIFN1Ym1vZHVsIGRhcnN0ZWxsZW4iCisKKyM6IGdpdC1ndWkuc2g6Mzc1NworbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiR2l0IGd1aSBpbSBTdWJtb2R1bCBzdGFydGVuIgorCisjOiBnaXQtZ3VpLnNoOjM3OTMKK21zZ2lkICJVbnN0YWdlIEh1bmsgRnJvbSBDb21taXQiCittc2dzdHIgIlBhdGNoLUJsb2NrIGF1cyBCZXJlaXRzdGVsbHVuZyBoZXJhdXNuZWhtZW4iCisKKyM6IGdpdC1ndWkuc2g6Mzc5NworbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCittc2dzdHIgIlplaWxlbiBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nIGhlcmF1c25laG1lbiIKKworIzogZ2l0LWd1aS5zaDozNzk4IGdpdC1ndWkuc2g6MzgwOQorbXNnaWQgIlJldmVydCBMaW5lcyIKK21zZ3N0ciAiWmVpbGVuw6RuZGVydW5nIHp1csO8Y2tuZWhtZW4iCisKKyM6IGdpdC1ndWkuc2g6MzgwMAorbXNnaWQgIlVuc3RhZ2UgTGluZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAiWmVpbGUgYXVzIGRlciBCZXJlaXRzdGVsbHVuZyBoZXJhdXNuZWhtZW4iCisKKyM6IGdpdC1ndWkuc2g6MzgwNAorbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKK21zZ3N0ciAiUGF0Y2gtQmxvY2sgenVyIEJlcmVpdHN0ZWxsdW5nIGhpbnp1ZsO8Z2VuIgorCisjOiBnaXQtZ3VpLnNoOjM4MDgKK21zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgorbXNnc3RyICJaZWlsZW4genVyIEJlcmVpdHN0ZWxsdW5nIGhpbnp1ZsO8Z2VuIgorCisjOiBnaXQtZ3VpLnNoOjM4MTEKK21zZ2lkICJTdGFnZSBMaW5lIEZvciBDb21taXQiCittc2dzdHIgIlplaWxlIHp1ciBCZXJlaXRzdGVsbHVuZyBoaW56dWbDvGdlbiIKKworIzogZ2l0LWd1aS5zaDozODYxCittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICJJbml0aWFsaXNpZXJlbi4uLiIKKworIzogZ2l0LWd1aS5zaDo0MDE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKKyJcbiIKKyJUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHlcbiIKKyJnb2luZyB0byBiZSBpZ25vcmVkIGJ5IGFueSBHaXQgc3VicHJvY2VzcyBydW5cbiIKKyJieSAlczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk3DtmdsaWNoZXJ3ZWlzZSBnaWJ0IGVzIFByb2JsZW1lIG1pdCBtYW5jaGVuIFVtZ2VidW5nc3ZhcmlhYmxlbi5cbiIKKyJcbiIKKyJEaWUgZm9sZ2VuZGVuIFVtZ2VidW5nc3ZhcmlhYmxlbiBrw7ZubmVuIHZlcm11dGxpY2ggbmljaHQgXG4iCisidm9uICVzIGFuIEdpdCB3ZWl0ZXJnZWdlYmVuIHdlcmRlbjpcbiIKKyJcbiIKKworIzogZ2l0LWd1aS5zaDo0MDQ2Cittc2dpZCAiIgorIlxuIgorIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKKyJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCittc2dzdHIgIiIKKyJcbiIKKyJEaWVzIGlzdCBlaW4gYmVrYW5udGVzIFByb2JsZW0gZGVyIFRjbC1WZXJzaW9uLCBkaWVcbiIKKyJpbiBDeWd3aW4gbWl0Z2VsaWVmZXJ0IHdpcmQuIgorCisjOiBnaXQtZ3VpLnNoOjQwNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgorImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgorInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCisifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJVbSBkZW4gTmFtZW4gwrslc8KrIHp1IMOkbmRlcm4sIHNvbGx0ZW4gU2llIGRpZSBcbiIKKyJnZXfDvG5zY2h0ZW4gV2VydGUgZsO8ciBkaWUgRWluc3RlbGx1bmcgdXNlci5uYW1lIHVuZCBcbiIKKyJ1c2VyLmVtYWlsIGluIElocmUgRGF0ZWkgfi8uZ2l0Y29uZmlnIGVpbmbDvGdlbi5cbiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Cittc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiUmVjaHRzY2hyZWlicHLDvGZ1bmdzcHJvZ3JhbW0gbmljaHQgdW50ZXJzdMO8dHp0IgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NjUKK21zZ2lkICJTcGVsbCBjaGVja2luZyBpcyB1bmF2YWlsYWJsZSIKK21zZ3N0ciAiUmVjaHRzY2hyZWlicHLDvGZ1bmcgbmljaHQgdmVyZsO8Z2JhciIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjY4Cittc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgorbXNnc3RyICJVbmJlbnV0emJhcmUgS29uZmlndXJhdGlvbiBkZXIgUmVjaHRzY2hyZWlicHLDvGZ1bmciCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydGluZyBkaWN0aW9uYXJ5IHRvICVzLiIKK21zZ3N0ciAiV8O2cnRlcmJ1Y2ggYXVmICVzIHp1csO8Y2tnZXNldHp0LiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjczCittc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKK21zZ3N0ciAiUmVjaHRzY2hyZWlicHLDvGZ1bmdzcHJvZ3JhbW0gbWl0IEZlaGxlciBhYmdlYnJvY2hlbiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCittc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIlVuYmVrYW5udGVzIFJlY2h0c2NocmVpYnByw7xmdW5nc3Byb2dyYW1tIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTg2Cittc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCittc2dzdHIgIktlaW5lIFZvcnNjaGzDpGdlIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg4Cittc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJVbmVyd2FydGV0ZXMgRU9GIHZvbSBSZWNodHNjaHJlaWJwcsO8ZnVuZ3Nwcm9ncmFtbSIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjM5MgorbXNnaWQgIlNwZWxsIENoZWNrZXIgRmFpbGVkIgorbXNnc3RyICJSZWNodHNjaHJlaWJwcsO8ZnVuZyBmZWhsZ2VzY2hsYWdlbiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmV0Y2ggJXMiCittc2dzdHIgIsK7JXPCqyBhbmZvcmRlcm4iCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgorbXNnc3RyICJOZXVlIMOEbmRlcnVuZ2VuIHZvbiDCuyVzwqsgaG9sZW4iCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicmVtb3RlIHBydW5lICVzIgorbXNnc3RyICJHZWzDtnNjaHRlIGV4dGVybmUgQnJhbmNoZXMgYXVzIMK7JXPCqyBlbnRmZXJuZW4iCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gJXMiCittc2dzdHIgIkdlbMO2c2NodGUgZXh0ZXJuZSBUcmFja2luZ2JyYW5jaGVzIGF1cyDCuyVzwqsgd2VyZGVuIGVudGZlcm50IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNQorbXNnaWQgImZldGNoIGFsbCByZW1vdGVzIgorbXNnc3RyICJBYnJ1ZmVuIGFsbGVyIGV4dGVybmVuIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIk5ldWUgw4RuZGVydW5nZW4gdm9uIGFsbGVuIGV4dGVybmVuIGFuZm9yZGVybiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NDAKK21zZ2lkICJyZW1vdGUgcHJ1bmUgYWxsIHJlbW90ZXMiCittc2dzdHIgIkV4dGVybiB2ZXJhbHRldGUgQnJhbmNoZXMgZW50ZmVybmVuIGFsbGVyIFJlcG9zaXRvcmllcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NDEKK21zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAiIgorIkdlbMO2c2NodGUgZXh0ZXJuZSBUcmFja2luZ2JyYW5jaGVzIGF1cyBhbGxlbiBSZXBvc2l0b3JpZXMgd2VyZGVuIGVudGZlcm50IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo1NCBsaWIvdHJhbnNwb3J0LnRjbDo5MiBsaWIvdHJhbnNwb3J0LnRjbDoxMTAKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJwdXNoICVzIgorbXNnc3RyICLCuyVzwqsgdmVyc2VuZGVuLi4uIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKK21zZ3N0ciAiw4RuZGVydW5nZW4gbmFjaCDCuyVzwqsgdmVyc2VuZGVuIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIk1pcnJvcmluZyB0byAlcyIKK21zZ3N0ciAiU3BpZWdlbG4gbmFjaCAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKK21zZ3N0ciAiJXMgJXMgbmFjaCAlcyB2ZXJzZW5kZW4iCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEzMgorbXNnaWQgIlB1c2ggQnJhbmNoZXMiCittc2dzdHIgIkJyYW5jaGVzIHZlcnNlbmRlbiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTQxIGxpYi9jaGVja291dF9vcC50Y2w6NTgwIGxpYi9yZW1vdGVfYWRkLnRjbDozNAorIzogbGliL2Jyb3dzZXIudGNsOjI5MiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzIKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NDUgbGliL29wdGlvbi50Y2w6MTI3IGxpYi90b29sc19kbGcudGNsOjQxCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMDIgbGliL3Rvb2xzX2RsZy50Y2w6MzQ1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDMKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNyBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzQgbGliL21lcmdlLnRjbDoxNzgKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkFiYnJlY2hlbiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTQ3Cittc2dpZCAiU291cmNlIEJyYW5jaGVzIgorbXNnc3RyICJMb2thbGUgQnJhbmNoZXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2MgorbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCittc2dzdHIgIlppZWwtUmVwb3NpdG9yeSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTY1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTEKK21zZ2lkICJSZW1vdGU6IgorbXNnc3RyICJFeHRlcm5lcyBSZXBvc2l0b3J5OiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTg3IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NzIKK21zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgorbXNnc3RyICJCZWxpZWJpZ2UgQWRyZXNzZToiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjIwNQorbXNnaWQgIlRyYW5zZmVyIE9wdGlvbnMiCittc2dzdHIgIk5ldHp3ZXJrLUVpbnN0ZWxsdW5nZW4iCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjIwNworbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgorbXNnc3RyICIiCisiw5xiZXJzY2hyZWliZW4gdm9uIGV4aXN0aWVyZW5kZW4gQnJhbmNoZXMgZXJ6d2luZ2VuIChrw7ZubnRlIMOEbmRlcnVuZ2VuICIKKyJsw7ZzY2hlbikiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjIxMQorbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgorbXNnc3RyICJLb21wYWt0ZXMgRGF0ZW5mb3JtYXQgYmVudXR6ZW4gKGbDvHIgbGFuZ3NhbWUgTmV0enZlcmJpbmR1bmdlbikiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjIxNQorbXNnaWQgIkluY2x1ZGUgdGFncyIKK21zZ3N0ciAiTWl0IFRhZ3MgdmVyc2VuZGVuIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyAoJXMpOiBQdXNoIgorbXNnc3RyICIlcyAoJXMpOiBWZXJzZW5kZW4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6ODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgorbXNnc3RyICLDhG5kZXJ1bmdlbiDCuyVzwqsgdm9uIMK7JXPCqyBhbmZvcmRlcm4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgorbXNnc3RyICJGZWhsZXI6IMK7JXPCqyBrYW5uIG5pY2h0IGFscyBCcmFuY2ggb2RlciBWZXJzaW9uIGVya2FubnQgd2VyZGVuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvc3Noa2V5LnRjbDo1OCBsaWIvY29uc29sZS50Y2w6ODEKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MzAKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiU2NobGllw59lbiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIkJyYW5jaCDCuyVzwqsgZXhpc3RpZXJ0IG5pY2h0LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBFaW5yaWNodGVuIGRlciB2ZXJlaW5mYWNodGVuIGdpdC1wdWxsIGbDvHIgwrslc8KrLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMDIgbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiQnJhbmNoIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgorIlxuIgorIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCisiQSBtZXJnZSBpcyByZXF1aXJlZC4iCittc2dzdHIgIiIKKyJCcmFuY2ggwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLlxuIgorIlxuIgorIkJyYW5jaCBrYW5uIG5pY2h0IGF1ZiDCuyVzwqsgdm9yZ2VzcHVsdCB3ZXJkZW4uIFJlZ3Vsw6RyZXMgWnVzYW1tZW5mw7xocmVuIGlzdCAiCisibm90d2VuZGlnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJadXNhbW1lbmbDvGhydW5nc21ldGhvZGUgwrslc8KrIG5pY2h0IHVudGVyc3TDvHR6dC4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKK21zZ3N0ciAiQWt0dWFsaXNpZXJlbiB2b24gwrslc8KrIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKK21zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCittc2dzdHIgIkJlcmVpdHN0ZWxsdW5nICjCu2luZGV4wqspIGlzdCB6dXIgQmVhcmJlaXR1bmcgZ2VzcGVycnQgKMK7bG9ja2VkwqspLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIkRlciBsZXR6dGUgZ2VsYWRlbmUgU3RhdHVzIHN0aW1tdCBuaWNodCBtZWhyIG1pdCBkZW0gUmVwb3NpdG9yeSDDvGJlcmVpbi5cbiIKKyJcbiIKKyJFaW4gYW5kZXJlcyBHaXQtUHJvZ3JhbW0gaGF0IGRhcyBSZXBvc2l0b3J5IHNlaXQgZGVtIGxldHp0ZW4gTGFkZW4gIgorImdlw6RuZGVydC4gIFZvciBkZW0gV2VjaHNlbG4gZGVzIGxva2FsZW4gQnJhbmNoZXMgbXVzcyBuZXUgZ2VsYWRlbiB3ZXJkZW4uXG4iCisiXG4iCisiRXMgd2lyZCBnbGVpY2ggbmV1IGdlbGFkZW4uXG4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKK21zZ3N0ciAiQXJiZWl0c2tvcGllIGFrdHVhbGlzaWVyZW4gYXVmIMK7JXPCqy4uLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDYKK21zZ2lkICJmaWxlcyBjaGVja2VkIG91dCIKK21zZ3N0ciAiRGF0ZWllbiBha3R1YWxpc2llcnQiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKK21zZ3N0ciAiIgorIkJyYW5jaCDCuyVzwqsgQXVzY2hlY2tlbiBhYmdlYnJvY2hlbiAoWnVzYW1tZW5mw7xocmVuIGRlciBEYXRlaWVuIGlzdCAiCisibm90d2VuZGlnKS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc4Cittc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCittc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiBkZXIgRGF0ZWllbiBpc3Qgbm90d2VuZGlnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiRXMgd2lyZCBhdWYgQnJhbmNoIMK7JXPCqyB2ZXJibGllYmVuLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTMKK21zZ2lkICIiCisiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCisiQ2hlY2tvdXQnLiIKK21zZ3N0ciAiIgorIkRpZSBBcmJlaXRza29waWUgaXN0IG5pY2h0IGF1ZiBlaW5lbSBsb2thbGVuIEJyYW5jaC5cbiIKKyJcbiIKKyJXZW5uIFNpZSBhdWYgZWluZW0gQnJhbmNoIGFyYmVpdGVuIG3DtmNodGVuLCBlcnN0ZWxsZW4gU2llIGJpdHRlIGpldHp0IGVpbmVuICIKKyJCcmFuY2ggbWl0IGRlciBBdXN3YWhsIMK7TG9zZ2Vsw7ZzdGUgQXJiZWl0c2tvcGllLVZlcnNpb27Cqy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTA0IGxpYi9jaGVja291dF9vcC50Y2w6NTA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCittc2dzdHIgIlVtZ2VzdGVsbHQgYXVmIMK7JXPCqy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKK21zZ3N0ciAiVW1zZXR6ZW4gdm9uIMK7JXPCqyBuYWNoIMK7JXPCqyB3aXJkIGZvbGdlbmRlIENvbW1pdHMgdmVybGllcmVuOiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NTgKK21zZ2lkICJSZWNvdmVyaW5nIGxvc3QgY29tbWl0cyBtYXkgbm90IGJlIGVhc3kuIgorbXNnc3RyICIiCisiVmVybG9yZW5lIENvbW1pdHMga8O2bm5lbiBudXIgbWl0IGdyw7bDn2VyZW0gQXVmd2FuZCB3aWVkZXJoZXJnZXN0ZWxsdCB3ZXJkZW4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICclcyc/IgorbXNnc3RyICLCuyVzwqsgdW1zZXR6ZW4/IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2OCBsaWIvdG9vbHNfZGxnLnRjbDozMzYgbGliL21lcmdlLnRjbDoxNzAKK21zZ2lkICJWaXN1YWxpemUiCittc2dzdHIgIkRhcnN0ZWxsZW4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTcyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NQorbXNnaWQgIlJlc2V0IgorbXNnc3RyICJVbXNldHplbiAoUmVzZXQpIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYzNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgorIlxuIgorIlRoaXMgd29ya2luZyBkaXJlY3RvcnkgaXMgb25seSBwYXJ0aWFsbHkgc3dpdGNoZWQuICBXZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCAiCisieW91ciBmaWxlcywgYnV0IGZhaWxlZCB0byB1cGRhdGUgYW4gaW50ZXJuYWwgR2l0IGZpbGUuXG4iCisiXG4iCisiVGhpcyBzaG91bGQgbm90IGhhdmUgb2NjdXJyZWQuICAlcyB3aWxsIG5vdyBjbG9zZSBhbmQgZ2l2ZSB1cC4iCittc2dzdHIgIiIKKyJMb2thbGVyIEJyYW5jaCBrYW5uIG5pY2h0IGdlc2V0enQgd2VyZGVuLlxuIgorIlxuIgorIkRpZXNlIEFyYmVpdHNrb3BpZSBpc3QgbnVyIHRlaWx3ZWlzZSB1bWdlc3RlbGx0LiBEaWUgRGF0ZWllbiBzaW5kIGtvcnJla3QgIgorImFrdHVhbGlzaWVydCwgYWJlciBlaW5pZ2UgaW50ZXJuZSBHaXQtRGF0ZWllbiBrb25udGVuIG5pY2h0IGdlw6RuZGVydCAiCisid2VyZGVuLlxuIgorIlxuIgorIkRpZXMgaXN0IGVpbiBpbnRlcm5lciBQcm9ncmFtbWZlaGxlciB2b24gJXMuIFByb2dyYW1tIHdpcmQgamV0enQgYWJnZWJyb2NoZW4uIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyAoJXMpOiBBZGQgUmVtb3RlIgorbXNnc3RyICIlcyAoJXMpOiBFeHRlcm5lcyBSZXBvc2l0b3J5IGhpbnp1ZsO8Z2VuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjUKK21zZ2lkICJBZGQgTmV3IFJlbW90ZSIKK21zZ3N0ciAiTmV1ZXMgZXh0ZXJuZXMgUmVwb3NpdG9yeSBoaW56dWbDvGdlbiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjMwIGxpYi90b29sc19kbGcudGNsOjM3Cittc2dpZCAiQWRkIgorbXNnc3RyICJIaW56dWbDvGdlbiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjM5Cittc2dpZCAiUmVtb3RlIERldGFpbHMiCittc2dzdHIgIkVpbnplbGhlaXRlbiBkZXMgZXh0ZXJuZW4gUmVwb3NpdG9yeSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjQxIGxpYi90b29sc19kbGcudGNsOjUxIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0NAorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJOYW1lOiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjUwCittc2dpZCAiTG9jYXRpb246IgorbXNnc3RyICJBZHJlc3NlOiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjYwCittc2dpZCAiRnVydGhlciBBY3Rpb24iCittc2dzdHIgIldlaXRlcmUgQWt0aW9uIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjMKK21zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKK21zZ3N0ciAiSmV0enQgYW5mb3JkZXJuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjkKK21zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgorbXNnc3RyICJFeHRlcm5lcyBSZXBvc2l0b3J5IGluaXRpYWxpc2llcmVuIHVuZCBkYWhpbiB2ZXJzZW5kZW4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3NQorbXNnaWQgIkRvIE5vdGhpbmcgRWxzZSBOb3ciCittc2dzdHIgIktlaW5lIHdlaXRlcmUgQWt0aW9uIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTAwCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAiQml0dGUgZ2ViZW4gU2llIGVpbmVuIE5hbWVuIGRlcyBleHRlcm5lbiBSZXBvc2l0b3J5IGFuLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjExMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgcmVtb3RlIG5hbWUuIgorbXNnc3RyICLCuyVzwqsgaXN0IGtlaW4genVsw6Rzc2lnZXIgTmFtZSBlaW5lcyBleHRlcm5lbiBSZXBvc2l0b3J5LiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEyNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgcmVtb3RlICclcycgb2YgbG9jYXRpb24gJyVzJy4iCittc2dzdHIgIkZlaGxlciBiZWltIEhpbnp1ZsO8Z2VuIGRlcyBleHRlcm5lbiBSZXBvc2l0b3J5IMK7JXPCqyBhdXMgQWRyZXNzZSDCuyVzwqsuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgdGhlICVzIgorbXNnc3RyICLCuyVzwqsgYW5mb3JkZXJuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAiIgorIkluaXRpYWxpc2llcmVuIGVpbmVzIGV4dGVybmVuIFJlcG9zaXRvcmllcyBhbiBBZHJlc3NlIMK7JXPCqyBpc3QgbmljaHQgbcO2Z2xpY2guIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB1cCB0aGUgJXMgKGF0ICVzKSIKK21zZ3N0ciAiRWlucmljaHRlbiB2b24gwrslc8KrIGFuIMK7JXPCqyIKKworIzogbGliL2Jyb3dzZXIudGNsOjE3Cittc2dpZCAiU3RhcnRpbmcuLi4iCittc2dzdHIgIlN0YXJ0ZW4uLi4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IEZpbGUgQnJvd3NlciIKK21zZ3N0ciAiJXMgKCVzKTogRGF0ZWktQnJvd3NlciIKKworIzogbGliL2Jyb3dzZXIudGNsOjEzMiBsaWIvYnJvd3Nlci50Y2w6MTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyAlcy4uLiIKK21zZ3N0ciAiJXMgbGFkZW4uLi4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoxOTMKK21zZ2lkICJbVXAgVG8gUGFyZW50XSIKK21zZ3N0ciAiW05hY2ggb2Jlbl0iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyAoJXMpOiBCcm93c2UgQnJhbmNoIEZpbGVzIgorbXNnc3RyICIlcyAoJXMpOiBEYXRlaWVuIGRlcyBCcmFuY2hlcyBkdXJjaGJsw6R0dGVybiIKKworIzogbGliL2Jyb3dzZXIudGNsOjI4MgorbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCittc2dzdHIgIkRhdGVpZW4gZGVzIEJyYW5jaGVzIGR1cmNoYmzDpHR0ZXJuIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6Mjg4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDM3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyNCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTE1Cittc2dpZCAiQnJvd3NlIgorbXNnc3RyICJCbMOkdHRlcm4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyOTcgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzUgbGliL3Rvb2xzX2RsZy50Y2w6MzIxCittc2dpZCAiUmV2aXNpb24iCittc2dzdHIgIlZlcnNpb24iCisKKyM6IGxpYi9pbmRleC50Y2w6NgorbXNnaWQgIlVuYWJsZSB0byB1bmxvY2sgdGhlIGluZGV4LiIKK21zZ3N0ciAiQmVyZWl0c3RlbGx1bmcga2FubiBuaWNodCB3aWVkZXIgZnJlaWdlZ2ViZW4gd2VyZGVuLiIKKworIzogbGliL2luZGV4LnRjbDozMAorbXNnaWQgIkluZGV4IEVycm9yIgorbXNnc3RyICJGZWhsZXIgaW4gQmVyZWl0c3RlbGx1bmciCisKKyM6IGxpYi9pbmRleC50Y2w6MzIKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCisicmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKK21zZ3N0ciAiIgorIkRhcyBBa3R1YWxpc2llcmVuIGRlciBHaXQtQmVyZWl0c3RlbGx1bmcgaXN0IGZlaGxnZXNjaGxhZ2VuLiBFaW5lIGFsbGdlbWVpbmUgIgorIkdpdC1Ba3R1YWxpc2llcnVuZyB3aXJkIGpldHp0IGdlc3RhcnRldCwgdW0gZ2l0LWd1aSB3aWVkZXIgbWl0IGdpdCB6dSAiCisic3luY2hyb25pc2llcmVuLiIKKworIzogbGliL2luZGV4LnRjbDo0MworbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICJGb3J0c2V0emVuIgorCisjOiBsaWIvaW5kZXgudGNsOjQ2Cittc2dpZCAiVW5sb2NrIEluZGV4IgorbXNnc3RyICJCZXJlaXRzdGVsbHVuZyBmcmVpZ2ViZW4iCisKKyM6IGxpYi9pbmRleC50Y2w6NzcgbGliL2luZGV4LnRjbDoxNDYgbGliL2luZGV4LnRjbDoyMjAgbGliL2luZGV4LnRjbDo1ODcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTk5Cittc2dpZCAiZmlsZXMiCittc2dzdHIgIkRhdGVpZW4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzI2Cittc2dpZCAiVW5zdGFnaW5nIHNlbGVjdGVkIGZpbGVzIGZyb20gY29tbWl0IgorbXNnc3RyICJHZXfDpGhsdGUgRGF0ZWllbiBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nIGhlcmF1c25laG1lbiIKKworIzogbGliL2luZGV4LnRjbDozMzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCittc2dzdHIgIkRhdGVpIMK7JXPCqyBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nIGhlcmF1c25laG1lbiIKKworIzogbGliL2luZGV4LnRjbDozNjkKK21zZ2lkICJSZWFkeSB0byBjb21taXQuIgorbXNnc3RyICJCZXJlaXQgenVtIENvbW1pdHRlbi4iCisKKyM6IGxpYi9pbmRleC50Y2w6Mzc4Cittc2dpZCAiQWRkaW5nIHNlbGVjdGVkIGZpbGVzIgorbXNnc3RyICJHZXfDpGhsdGUgRGF0ZWllbiBoaW56dWbDvGdlbiIKKworIzogbGliL2luZGV4LnRjbDozODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIsK7JXPCqyBoaW56dWbDvGdlbiIKKworIzogbGliL2luZGV4LnRjbDo0MTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTdGFnZSAlZCB1bnRyYWNrZWQgZmlsZXM/IgorbXNnc3RyICIlZCB1bnZlcnNpb25pZXJ0ZSBEYXRlaWVuIGJlcmVpdHN0ZWxsZW4/IgorCisjOiBsaWIvaW5kZXgudGNsOjQyMAorbXNnaWQgIkFkZGluZyBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiQWxsZSBnZcOkbmRlcnRlbiBEYXRlaWVuIGhpbnp1ZsO8Z2VuIgorCisjOiBsaWIvaW5kZXgudGNsOjUwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIGZpbGUgJXM/IgorbXNnc3RyICLDhG5kZXJ1bmdlbiBpbiBEYXRlaSDCuyVzwqsgdmVyd2VyZmVuPyIKKworIzogbGliL2luZGV4LnRjbDo1MDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCittc2dzdHIgIsOEbmRlcnVuZ2VuIGluIGRpZXNlbiAlaSBEYXRlaWVuIHZlcndlcmZlbj8iCisKKyM6IGxpYi9pbmRleC50Y2w6NTE3Cittc2dpZCAiQW55IHVuc3RhZ2VkIGNoYW5nZXMgd2lsbCBiZSBwZXJtYW5lbnRseSBsb3N0IGJ5IHRoZSByZXZlcnQuIgorbXNnc3RyICIiCisiQWxsZSBuaWNodCBiZXJlaXRnZXN0ZWxsdGVuIMOEbmRlcnVuZ2VuIHdlcmRlbiBiZWltIFZlcndlcmZlbiB2ZXJsb3JlbiBnZWhlbi4iCisKKyM6IGxpYi9pbmRleC50Y2w6NTIwIGxpYi9pbmRleC50Y2w6NTYzCittc2dpZCAiRG8gTm90aGluZyIKK21zZ3N0ciAiTmljaHRzIHR1biIKKworIzogbGliL2luZGV4LnRjbDo1NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEZWxldGUgdW50cmFja2VkIGZpbGUgJXM/IgorbXNnc3RyICJVbnZlcnNpb25pZXJ0ZSBEYXRlaSDCuyVzwqsgbMO2c2NoZW4/IgorCisjOiBsaWIvaW5kZXgudGNsOjU1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRlbGV0ZSB0aGVzZSAlaSB1bnRyYWNrZWQgZmlsZXM/IgorbXNnc3RyICJEaWVzZSAlaSB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiBsw7ZzY2hlbj8iCisKKyM6IGxpYi9pbmRleC50Y2w6NTYwCittc2dpZCAiRmlsZXMgd2lsbCBiZSBwZXJtYW5lbnRseSBkZWxldGVkLiIKK21zZ3N0ciAiRGF0ZWllbiB3ZXJkZW4gZW5kZ8O8bHRpZyBnZWzDtnNjaHQuIgorCisjOiBsaWIvaW5kZXgudGNsOjU2NAorbXNnaWQgIkRlbGV0ZSBGaWxlcyIKK21zZ3N0ciAiRGF0ZWllbiBsw7ZzY2hlbiIKKworIzogbGliL2luZGV4LnRjbDo1ODYKK21zZ2lkICJEZWxldGluZyIKK21zZ3N0ciAiTMO2c2NoZW4iCisKKyM6IGxpYi9pbmRleC50Y2w6NjY1Cittc2dpZCAiRW5jb3VudGVyZWQgZXJyb3JzIGRlbGV0aW5nIGZpbGVzOlxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMw7ZzY2hlbiBkZXIgRGF0ZWllbjpcbiIKKworIzogbGliL2luZGV4LnRjbDo2NzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb25lIG9mIHRoZSAlZCBzZWxlY3RlZCBmaWxlcyBjb3VsZCBiZSBkZWxldGVkLiIKK21zZ3N0ciAiS2VpbmUgZGVyICVkIGdld8OkaGx0ZW4gRGF0ZWllbiBrb25udGVuIGdlbMO2c2NodCB3ZXJkZW4uIgorCisjOiBsaWIvaW5kZXgudGNsOjY3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVkIG9mIHRoZSAlZCBzZWxlY3RlZCBmaWxlcyBjb3VsZCBub3QgYmUgZGVsZXRlZC4iCittc2dzdHIgIiVkIGRlciAlZCBnZXfDpGhsdGVuIERhdGVpZW4ga29ubnRlbiBuaWNodCBnZWzDtnNjaHQgd2VyZGVuLiIKKworIzogbGliL2luZGV4LnRjbDo3MjYKK21zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCittc2dzdHIgIsOEbmRlcnVuZ2VuIGluIGdld8OkaGx0ZW4gRGF0ZWllbiB2ZXJ3ZXJmZW4iCisKKyM6IGxpYi9pbmRleC50Y2w6NzMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nICVzIgorbXNnc3RyICLDhG5kZXJ1bmdlbiBpbiAlcyB2ZXJ3ZXJmZW4iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgKCVzKTogQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICIlcyAoJXMpOiBCcmFuY2ggYXVzY2hlY2tlbiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjEKK21zZ2lkICJDaGVja291dCBCcmFuY2giCittc2dzdHIgIkJyYW5jaCBhdXNjaGVja2VuIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNgorbXNnaWQgIkNoZWNrb3V0IgorbXNnc3RyICJBdXNjaGVja2VuIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvb3B0aW9uLnRjbDozMTAgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5Cittc2dpZCAiT3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9uZW4iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgorbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiVHJhY2tpbmdicmFuY2ggYW5mb3JkZXJuIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0NworbXNnaWQgIkRldGFjaCBGcm9tIExvY2FsIEJyYW5jaCIKK21zZ3N0ciAiVmVyYmluZHVuZyB6dSBsb2thbGVtIEJyYW5jaCBsw7ZzZW4iCisKKyM6IGxpYi9zdGF0dXNfYmFyLnRjbDoyNjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgorbXNnc3RyICIlcyAuLi4gJSppIHZvbiAlKmkgJXMgKCUzaSUlKSIKKworIzogbGliL3JlbW90ZS50Y2w6MjAwCittc2dpZCAiUHVzaCB0byIKK21zZ3N0ciAiVmVyc2VuZGVuIG5hY2giCisKKyM6IGxpYi9yZW1vdGUudGNsOjIxOAorbXNnaWQgIlJlbW92ZSBSZW1vdGUiCittc2dzdHIgIkV4dGVybmVzIFJlcG9zaXRvcnkgZW50ZmVybmVuIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMjMKK21zZ2lkICJQcnVuZSBmcm9tIgorbXNnc3RyICJWZXJhbHRldGUgQnJhbmNoZXMgZW50ZmVybmVuIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMjgKK21zZ2lkICJGZXRjaCBmcm9tIgorbXNnc3RyICJBbmZvcmRlcm4iCisKKyM6IGxpYi9yZW1vdGUudGNsOjI0OSBsaWIvcmVtb3RlLnRjbDoyNTMgbGliL3JlbW90ZS50Y2w6MjU4IGxpYi9yZW1vdGUudGNsOjI2NAorbXNnaWQgIkFsbCIKK21zZ3N0ciAiQWxsZSIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgKCVzKTogUmVuYW1lIEJyYW5jaCIKK21zZ3N0ciAiJXMgKCVzKTogQnJhbmNoIHVtYmVuZW5uZW4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMworbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgIkJyYW5jaCB1bWJlbmVubmVuIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjgKK21zZ2lkICJSZW5hbWUiCittc2dzdHIgIlVtYmVuZW5uZW4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozOAorbXNnaWQgIkJyYW5jaDoiCittc2dzdHIgIkJyYW5jaDoiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo0NgorbXNnaWQgIk5ldyBOYW1lOiIKK21zZ3N0ciAiTmV1ZXIgTmFtZToiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo4MQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKK21zZ3N0ciAiQml0dGUgd8OkaGxlbiBTaWUgZWluZW4gQnJhbmNoIHp1bSB1bWJlbmVubmVuLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjkyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIgorbXNnc3RyICJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gQnJhbmNobmFtZW4gYW4uIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTEyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiwrslc8KrIGlzdCBrZWluIHp1bMOkc3NpZ2VyIEJyYW5jaG5hbWUuIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTIzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlbmFtZSAnJXMnLiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gVW1iZW5lbm5lbiB2b24gwrslc8KrLiIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo0MQorbXNnaWQgIlNlbGVjdCIKK21zZ3N0ciAiQXVzd8OkaGxlbiIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo1NQorbXNnaWQgIkZvbnQgRmFtaWx5IgorbXNnc3RyICJTY2hyaWZ0ZmFtaWxpZSIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo3NgorbXNnaWQgIkZvbnQgU2l6ZSIKK21zZ3N0ciAiU2NocmlmdGdyw7bDn2UiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTMKK21zZ2lkICJGb250IEV4YW1wbGUiCittc2dzdHIgIlNjaHJpZnRiZWlzcGllbCIKKworIzogbGliL2Nob29zZV9mb250LnRjbDoxMDUKK21zZ2lkICIiCisiVGhpcyBpcyBleGFtcGxlIHRleHQuXG4iCisiSWYgeW91IGxpa2UgdGhpcyB0ZXh0LCBpdCBjYW4gYmUgeW91ciBmb250LiIKK21zZ3N0ciAiIgorIkRpZXMgaXN0IGVpbiBCZWlzcGllbHRleHQuXG4iCisiV2VubiBJaG5lbiBkaWVzZXIgVGV4dCBnZWbDpGxsdCwgc29sbHRlbiBTaWUgZGllc2UgU2NocmlmdGFydCB3w6RobGVuLiIKKworIzogbGliL29wdGlvbi50Y2w6MTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGdsb2JhbCBlbmNvZGluZyAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlIGdsb2JhbGUgWmVpY2hlbmtvZGllcnVuZyDCuyVzwqsiCisKKyM6IGxpYi9vcHRpb24udGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXBvIGVuY29kaW5nICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2UgUmVwb3NpdG9yeS1aZWljaGVua29kaWVydW5nIMK7JXPCqyIKKworIzogbGliL29wdGlvbi50Y2w6MTE5Cittc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKK21zZ3N0ciAiVm9yZWluc3RlbGx1bmdlbiB3aWVkZXJoZXJzdGVsbGVuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMjMKK21zZ2lkICJTYXZlIgorbXNnc3RyICJTcGVpY2hlcm4iCisKKyM6IGxpYi9vcHRpb24udGNsOjEzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIFJlcG9zaXRvcnkiCittc2dzdHIgIiVzIFJlcG9zaXRvcnkiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzNAorbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCittc2dzdHIgIkdsb2JhbCAoQWxsZSBSZXBvc2l0b3JpZXMpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDAKK21zZ2lkICJVc2VyIE5hbWUiCittc2dzdHIgIkJlbnV0emVybmFtZSIKKworIzogbGliL29wdGlvbi50Y2w6MTQxCittc2dpZCAiRW1haWwgQWRkcmVzcyIKK21zZ3N0ciAiRS1NYWlsLUFkcmVzc2UiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MworbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgorbXNnc3RyICJadXNhbW1lbmbDvGhydW5ncy1Db21taXRzIHp1c2FtbWVuZmFzc2VuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDQKK21zZ2lkICJNZXJnZSBWZXJib3NpdHkiCittc2dzdHIgIkF1c2bDvGhybGljaGtlaXQgZGVyIFp1c2FtbWVuZsO8aHJlbi1NZWxkdW5nZW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NQorbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCittc2dzdHIgIlZlcmdsZWljaHNzdGF0aXN0aWsgbmFjaCBadXNhbW1lbmbDvGhyZW4gYW56ZWlnZW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NgorbXNnaWQgIlVzZSBNZXJnZSBUb29sIgorbXNnc3RyICJadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDgKK21zZ2lkICJUcnVzdCBGaWxlIE1vZGlmaWNhdGlvbiBUaW1lc3RhbXBzIgorbXNnc3RyICJBdWYgRGF0ZWnDpG5kZXJ1bmdzZGF0dW0gdmVybGFzc2VuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDkKK21zZ2lkICJQcnVuZSBUcmFja2luZyBCcmFuY2hlcyBEdXJpbmcgRmV0Y2giCittc2dzdHIgIlZlcmFsdGV0ZSBUcmFja2luZ2JyYW5jaGVzIGVudGZlcm5lbiB3w6RocmVuZCBBbmZvcmRlcnVuZyIKKworIzogbGliL29wdGlvbi50Y2w6MTUwCittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoZXMiCittc2dzdHIgIk5ldWUgQnJhbmNoZXMgYXV0b21hdGlzY2ggYWxzIFRyYWNraW5nYnJhbmNoIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTEKK21zZ2lkICJVc2UgVGV4dGNvbnYgRm9yIERpZmZzIGFuZCBCbGFtZXMiCittc2dzdHIgIkJlbnV0emUgwrt0ZXh0Y29udsKrIGbDvHIgVmVyZ2xlaWNoIHVuZCBBbm5vdGllcmVuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTIKK21zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKK21zZ3N0ciAiS29waWUtQW5ub3RpZXJlbiBudXIgYmVpIGdlw6RuZGVydGVuIERhdGVpZW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MworbXNnaWQgIk1heGltdW0gTGVuZ3RoIG9mIFJlY2VudCBSZXBvc2l0b3JpZXMgTGlzdCIKK21zZ3N0ciAiQW56YWhsIEVpbnRyw6RnZSBpbiDCu0xldHp0ZSBSZXBvc2l0b3JpZXPCqyIKKworIzogbGliL29wdGlvbi50Y2w6MTU0Cittc2dpZCAiTWluaW11bSBMZXR0ZXJzIFRvIEJsYW1lIENvcHkgT24iCittc2dzdHIgIk1pbmRlc3R6YWhsIFplaWNoZW4gZsO8ciBLb3BpZS1Bbm5vdGllcmVuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTUKK21zZ2lkICJCbGFtZSBIaXN0b3J5IENvbnRleHQgUmFkaXVzIChkYXlzKSIKK21zZ3N0ciAiQW56YWhsIFRhZ2UgZsO8ciBBbm5vdGllcmVuLUhpc3Rvcmllbi1Lb250ZXh0IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTYKK21zZ2lkICJOdW1iZXIgb2YgRGlmZiBDb250ZXh0IExpbmVzIgorbXNnc3RyICJBbnphaGwgZGVyIEtvbnRleHR6ZWlsZW4gYmVpbSBWZXJnbGVpY2giCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NworbXNnaWQgIkFkZGl0aW9uYWwgRGlmZiBQYXJhbWV0ZXJzIgorbXNnc3RyICJadXPDpHR6bGljaGUgVmVyZ2xlaWNoLS9kaWZmLVBhcmFtZXRlciIKKworIzogbGliL29wdGlvbi50Y2w6MTU4Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKK21zZ3N0ciAiVGV4dGJyZWl0ZSBkZXIgQ29tbWl0LUJlc2NocmVpYnVuZyIKKworIzogbGliL29wdGlvbi50Y2w6MTU5Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICJOYW1lbnN2b3JsYWdlIGbDvHIgbmV1ZSBCcmFuY2hlcyIKKworIzogbGliL29wdGlvbi50Y2w6MTYwCittc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgorbXNnc3RyICJWb3JlaW5nZXN0ZWxsdGUgWmVpY2hlbmtvZGllcnVuZyIKKworIzogbGliL29wdGlvbi50Y2w6MTYxCittc2dpZCAiV2FybiBiZWZvcmUgY29tbWl0dGluZyB0byBhIGRldGFjaGVkIGhlYWQiCittc2dzdHIgIldhcm5lbiB2b3IgQ29tbWl0dGVuIGF1ZiBsb3NnZWzDtnN0ZSBCcmFuY2hzcGl0emUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE2MgorbXNnaWQgIlN0YWdpbmcgb2YgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJVbnZlcnNpb25pZXJ0ZSBEYXRlaWVuIGJlcmVpdHN0ZWxsZW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjE2MworbXNnaWQgIlNob3cgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJVbnZlcnNpb25pZXJ0ZSBEYXRlaWVuIGFuemVpZ2VuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNjQKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAiVGFidWxhdG9yLUJyZWl0ZSIKKworIzogbGliL29wdGlvbi50Y2w6MTgyIGxpYi9vcHRpb24udGNsOjE5NyBsaWIvb3B0aW9uLnRjbDoyMjAgbGliL29wdGlvbi50Y2w6MjgyCisjOiBsaWIvZGF0YWJhc2UudGNsOjU3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXM6IgorbXNnc3RyICIlczoiCisKKyM6IGxpYi9vcHRpb24udGNsOjIxMAorbXNnaWQgIkNoYW5nZSIKK21zZ3N0ciAiw4RuZGVybiIKKworIzogbGliL29wdGlvbi50Y2w6MjU0Cittc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCittc2dzdHIgIlfDtnJ0ZXJidWNoIFJlY2h0c2NocmVpYnByw7xmdW5nOiIKKworIzogbGliL29wdGlvbi50Y2w6Mjg0Cittc2dpZCAiQ2hhbmdlIEZvbnQiCittc2dzdHIgIlNjaHJpZnRhcnQgw6RuZGVybiIKKworIzogbGliL29wdGlvbi50Y2w6Mjg4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hvb3NlICVzIgorbXNnc3RyICIlcyB3w6RobGVuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyOTQKK21zZ2lkICJwdC4iCittc2dzdHIgInB0LiIKKworIzogbGliL29wdGlvbi50Y2w6MzA4Cittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgIkVpbnN0ZWxsdW5nZW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjM0NQorbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCittc2dzdHIgIk9wdGlvbmVuIGtvbm50ZW4gbmljaHQgZ2VzcGVpY2hlcnQgd2VyZGVuOiIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDMKK21zZ2lkICJEZWZhdWx0IgorbXNnc3RyICJWb3JlaW5zdGVsbHVuZyIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gKCVzKSIKK21zZ3N0ciAiU3lzdGVtd2VpdCAoJXMpIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ1OSBsaWIvZW5jb2RpbmcudGNsOjQ2NQorbXNnaWQgIk90aGVyIgorbXNnc3RyICJBbmRlcmUiCisKKyM6IGxpYi90b29scy50Y2w6NzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCittc2dzdHIgIlVtIMK7JXPCqyB6dSBzdGFydGVuLCBtdXNzIGVpbmUgRGF0ZWkgYXVzZ2V3w6RobHQgc2Vpbi4iCisKKyM6IGxpYi90b29scy50Y2w6OTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICUxJHMgb24gZmlsZSBcIiUyJHNcIj8iCittc2dzdHIgIldvbGxlbiBTaWUgJTEkcyB3aXJrbGljaCBhdWYgRGF0ZWkgwrslMiRzwqsgc3RhcnRlbj8iCisKKyM6IGxpYi90b29scy50Y2w6OTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKK21zZ3N0ciAiV29sbGVuIFNpZSAlcyB3aXJrbGljaCBzdGFydGVuPyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sOiAlcyIKK21zZ3N0ciAiV2Vya3pldWc6ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjExOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmc6ICVzIgorbXNnc3RyICJTdGFydGVuOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIgorbXNnc3RyICJXZXJremV1ZyBlcmZvbGdyZWljaCBhYmdlc2NobG9zc2VuOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGZhaWxlZDogJXMiCittc2dzdHIgIldlcmt6ZXVnIGZlaGxnZXNjaGxhZ2VuOiAlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6OAorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIGJhc2UgdmVyc2lvbj8iCittc2dzdHIgIktvbmZsaWt0IGR1cmNoIEJhc2lzdmVyc2lvbiBlcnNldHplbj8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjkKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoaXMgYnJhbmNoPyIKK21zZ3N0ciAiS29uZmxpa3QgZHVyY2ggZGllc2VuIEJyYW5jaCBlcnNldHplbj8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKK21zZ3N0ciAiS29uZmxpa3QgZHVyY2ggYW5kZXJlbiBCcmFuY2ggZXJzZXR6ZW4/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlIHRoYXQgdGhlIGRpZmYgc2hvd3Mgb25seSBjb25mbGljdGluZyBjaGFuZ2VzLlxuIgorIlxuIgorIiVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4iCisiXG4iCisiVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVuZG9uZSBvbmx5IGJ5IHJlc3RhcnRpbmcgdGhlIG1lcmdlLiIKK21zZ3N0ciAiIgorIkhpbndlaXM6IERlciBWZXJnbGVpY2ggemVpZ3QgbnVyIGtvbmZsaWt0dmVydXJzYWNoZW5kZSDDhG5kZXJ1bmdlbiBhbi5cbiIKKyJcbiIKKyLCuyVzwqsgd2lyZCDDvGJlcnNjaHJpZWJlbi5cbiIKKyJcbiIKKyJEaWVzZSBPcGVyYXRpb24ga2FubiBudXIgcsO8Y2tnw6RuZ2lnIGdlbWFjaHQgd2VyZGVuLCB3ZW5uIGRpZVxuIgorIlp1c2FtbWVuZsO8aHJ1bmcgZXJuZXV0IGdlc3RhcnRldCB3aXJkLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIHNlZW1zIHRvIGhhdmUgdW5yZXNvbHZlZCBjb25mbGljdHMsIHN0aWxsIHN0YWdlPyIKK21zZ3N0ciAiRGF0ZWkgwrslc8KrIGhhdCBuaWNodCBhdWZnZWzDtnN0ZSBLb25mbGlrdGUuIFRyb3R6ZGVtIGJlcmVpdHN0ZWxsZW4/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKK21zZ3N0ciAiQXVmbMO2c3VuZyBoaW56dWdlZsO8Z3QgZsO8ciAlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQxCittc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgorbXNnc3RyICIiCisiS29uZmxpa3RlIGR1cmNoIGdlbMO2c2NodGUgRGF0ZWllbiBvZGVyIHN5bWJvbGlzY2hlIExpbmtzIGvDtm5uZW4gbmljaHQgZHVyY2ggIgorImRhcyBadXNhbWVuZsO8aHJ1bmdzd2Vya3pldWcgZ2Vsw7ZzdCB3ZXJkZW4uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKK21zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJLb25mbGlrdC1EYXRlaSBleGlzdGllcnQgbmljaHQiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI0NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgorbXNnc3RyICJLZWluIEdVSSBadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnOiDCuyVzwqsiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuc3VwcG9ydGVkIG1lcmdlIHRvb2wgJyVzJyIKK21zZ3N0ciAiVW5iZWthbm50ZXMgWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1Zzogwrslc8KrIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMTAKK21zZ2lkICJNZXJnZSB0b29sIGlzIGFscmVhZHkgcnVubmluZywgdGVybWluYXRlIGl0PyIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1ZyBsw6R1ZnQgYmVyZWl0cy4gU29sbCBlcyBhYmdlYnJvY2hlbiB3ZXJkZW4/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkZlaGxlciBiZWltIEFicnVmZW4gZGVyIERhdGVpdmVyc2lvbmVuOlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHRoZSBtZXJnZSB0b29sOlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1ZyBrb25udGUgbmljaHQgZ2VzdGFydGV0IHdlcmRlbjpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzU0Cittc2dpZCAiUnVubmluZyBtZXJnZSB0b29sLi4uIgorbXNnc3RyICJadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnIHN0YXJ0ZW4uLi4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM4MiBsaWIvbWVyZ2V0b29sLnRjbDozOTAKK21zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCittc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWcgZmVobGdlc2NobGFnZW4uIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IEFkZCBUb29sIgorbXNnc3RyICIlcyAoJXMpOiBXZXJremV1ZyBoaW56dWbDvGdlbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjgKK21zZ2lkICJBZGQgTmV3IFRvb2wgQ29tbWFuZCIKK21zZ3N0ciAiTmV1ZXMgS29tbWFuZG8gZsO8ciBXZXJremV1ZyBoaW56dWbDvGdlbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQKK21zZ2lkICJBZGQgZ2xvYmFsbHkiCittc2dzdHIgIkdsb2JhbCBoaW56dWbDvGdlbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDYKK21zZ2lkICJUb29sIERldGFpbHMiCittc2dzdHIgIkVpbnplbGhlaXRlbiBkZXMgV2Vya3pldWdzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0OQorbXNnaWQgIlVzZSAnLycgc2VwYXJhdG9ycyB0byBjcmVhdGUgYSBzdWJtZW51IHRyZWU6IgorbXNnc3RyICJCZW51dHplbiBTaWUgZWluZW4gU2NocsOkZ3N0cmljaCDCuy/CqywgdW0gVW50ZXJtZW7DvHMgenUgZXJzdGVsbGVuOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NjAKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiS29tbWFuZG86IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo3MQorbXNnaWQgIlNob3cgYSBkaWFsb2cgYmVmb3JlIHJ1bm5pbmciCittc2dzdHIgIkJlc3TDpHRpZ3VuZ3NmcmFnZSB2b3IgU3RhcnRlbiBhbnplaWdlbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzcKK21zZ2lkICJBc2sgdGhlIHVzZXIgdG8gc2VsZWN0IGEgcmV2aXNpb24gKHNldHMgJFJFVklTSU9OKSIKK21zZ3N0ciAiQmVudXR6ZXIgbmFjaCBWZXJzaW9uIGZyYWdlbiAoc2V0enQgJFJFVklTSU9OKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6ODIKK21zZ2lkICJBc2sgdGhlIHVzZXIgZm9yIGFkZGl0aW9uYWwgYXJndW1lbnRzIChzZXRzICRBUkdTKSIKK21zZ3N0ciAiQmVudXR6ZXIgbmFjaCB6dXPDpHR6bGljaGVuIEFyZ3VtZW50ZW4gZnJhZ2VuIChzZXR6dCAkQVJHUykiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjg5Cittc2dpZCAiRG9uJ3Qgc2hvdyB0aGUgY29tbWFuZCBvdXRwdXQgd2luZG93IgorbXNnc3RyICJLZWluIEF1c2dhYmVmZW5zdGVyIHplaWdlbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTQKK21zZ2lkICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKCRGSUxFTkFNRSBub3QgZW1wdHkpIgorbXNnc3RyICJOdXIgc3RhcnRlbiwgd2VubiBlaW4gVmVyZ2xlaWNoIGdld8OkaGx0IGlzdCAoJEZJTEVOQU1FIGlzdCBuaWNodCBsZWVyKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTE4Cittc2dpZCAiUGxlYXNlIHN1cHBseSBhIG5hbWUgZm9yIHRoZSB0b29sLiIKK21zZ3N0ciAiQml0dGUgZ2ViZW4gU2llIGVpbmVuIFdlcmt6ZXVnbmFtZW4gYW4uIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJXZXJremV1ZyDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxNDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFkZCB0b29sOlxuIgorIiVzIgorbXNnc3RyICIiCisiV2Vya3pldWcga29ubnRlIG5pY2h0IGhpbnp1Z2Vmw7xndCB3ZXJkZW46XG4iCisiXG4iCisiJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE4NworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IFJlbW92ZSBUb29sIgorbXNnc3RyICIlcyAoJXMpOiBXZXJremV1ZyBlbnRmZXJuZW4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5MworbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgorbXNnc3RyICJXZXJremV1Z2tvbW1hbmRvcyBlbnRmZXJuZW4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5OAorbXNnaWQgIlJlbW92ZSIKK21zZ3N0ciAiRW50ZmVybmVuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzEKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIoV2Vya3pldWdlIGbDvHIgbG9rYWxlcyBSZXBvc2l0b3J5IHdlcmRlbiBpbiBCbGF1IGFuZ2V6ZWlndCkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IgorbXNnc3RyICIlcyAoJXMpOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjkyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUnVuIENvbW1hbmQ6ICVzIgorbXNnc3RyICJLb21tYW5kbyBhdWZydWZlbjogJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjMwNgorbXNnaWQgIkFyZ3VtZW50cyIKK21zZ3N0ciAiQXJndW1lbnRlIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNDEKK21zZ2lkICJPSyIKK21zZ3N0ciAiT2siCisKKyM6IGxpYi9zZWFyY2gudGNsOjQ4Cittc2dpZCAiRmluZDoiCittc2dzdHIgIlN1Y2hlbjoiCisKKyM6IGxpYi9zZWFyY2gudGNsOjUwCittc2dpZCAiTmV4dCIKK21zZ3N0ciAiTsOkY2hzdGVyIgorCisjOiBsaWIvc2VhcmNoLnRjbDo1MQorbXNnaWQgIlByZXYiCittc2dzdHIgIlZvcmlnZXIiCisKKyM6IGxpYi9zZWFyY2gudGNsOjUyCittc2dpZCAiUmVnRXhwIgorbXNnc3RyICJSZWdBdXNkcnVjayIKKworIzogbGliL3NlYXJjaC50Y2w6NTQKK21zZ2lkICJDYXNlIgorbXNnc3RyICJHcm/Dny9rbGVpbiIKKworIzogbGliL3Nob3J0Y3V0LnRjbDo4IGxpYi9zaG9ydGN1dC50Y2w6NDMgbGliL3Nob3J0Y3V0LnRjbDo3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IENyZWF0ZSBEZXNrdG9wIEljb24iCittc2dzdHIgIiVzICglcyk6IERlc2t0b3AtSWNvbiBlcnN0ZWxsZW4iCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MjQgbGliL3Nob3J0Y3V0LnRjbDo2NQorbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXIgVmVya27DvHBmdW5nOiIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoxNDAKK21zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCittc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiBkZXMgSWNvbnM6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgKCVzKTogRGVsZXRlIEJyYW5jaCBSZW1vdGVseSIKK21zZ3N0ciAiJXMgKCVzKTogQnJhbmNoIGluIGV4dGVybmVtIFJlcG9zaXRvcnkgbMO2c2NoZW4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgorbXNnc3RyICJCcmFuY2ggaW4gZXh0ZXJuZW0gUmVwb3NpdG9yeSBsw7ZzY2hlbiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0OAorbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKK21zZ3N0ciAiSW4gUmVwb3NpdG9yeSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4OAorbXNnaWQgIkJyYW5jaGVzIgorbXNnc3RyICJCcmFuY2hlcyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTAKK21zZ2lkICJEZWxldGUgT25seSBJZiIKK21zZ3N0ciAiTnVyIGzDtnNjaGVuLCB3ZW5uIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMgorbXNnaWQgIk1lcmdlZCBJbnRvOiIKK21zZ3N0ciAiWnVzYW1tZW5nZWbDvGhydCBtaXQ6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjEyMCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTMKK21zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCittc2dzdHIgIkltbWVyIChLZWluZSBadXNhbW1lbmbDvGhydW5nc3Byw7xmdW5nKSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTMKK21zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCittc2dzdHIgIkbDvHIgwrtadXNhbW1lbmbDvGhyZW4gbWl0wqsgbXVzcyBlaW4gQnJhbmNoIGFuZ2VnZWJlbiB3ZXJkZW4uIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKKyJcbiIKKyIgLSAlcyIKK21zZ3N0ciAiIgorIkZvbGdlbmRlIEJyYW5jaGVzIHNpbmQgbm9jaCBuaWNodCBtaXQgwrslc8KrIHp1c2FtbWVuZ2Vmw7xocnQ6XG4iCisiXG4iCisiIC0gJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorbXNnc3RyICIiCisiRWluIG9kZXIgbWVocmVyZSBadXNhbW1lbmbDvGhydW5nZW4gc2luZCBmZWhsZ2VzY2hsYWdlbiwgZGEgU2llIG5pY2h0IGRpZSAiCisibm90d2VuZGlnZW4gQ29tbWl0cyB2b3JoZXIgYW5nZWZvcmRlcnQgaGFiZW4uICBTaWUgc29sbHRlbiB2ZXJzdWNoZW4sIHp1ZXJzdCAiCisidm9uIMK7JXPCqyBhbnp1Zm9yZGVybi4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjA4Cittc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgorbXNnc3RyICJCaXR0ZSB3w6RobGVuIFNpZSBtaW5kZXN0ZW5zIGVpbmVuIEJyYW5jaCwgZGVyIGdlbMO2c2NodCB3ZXJkZW4gc29sbC4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUKK21zZ2lkICIiCisiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKKyJcbiIKKyJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKK21zZ3N0ciAiIgorIkRhcyBXaWVkZXJoZXJzdGVsbGVuIHZvbiBnZWzDtnNjaHRlbiBCcmFuY2hlcyBpc3QgbnVyIG1pdCBncsO2w59lcmVtIEF1ZndhbmQgIgorIm3DtmdsaWNoLlxuIgorIlxuIgorIlNvbGxlbiBkaWUgYXVzZ2V3w6RobHRlbiBCcmFuY2hlcyBnZWzDtnNjaHQgd2VyZGVuPyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgorbXNnc3RyICJCcmFuY2hlcyBhdWYgwrslc8KrIHdlcmRlbiBnZWzDtnNjaHQiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzAwCittc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCittc2dzdHIgIktlaW4gUmVwb3NpdG9yeSBhdXNnZXfDpGhsdC4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzA1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCittc2dzdHIgIsK7JXPCqyBsYWRlbi4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NQorbXNnaWQgIkdpdCBHdWkiCittc2dzdHIgIkdpdCBHdWkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDI3Cittc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgorbXNnc3RyICJSZXBvc2l0b3J5IG5ldSBlcnN0ZWxsZW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEwCittc2dpZCAiTmV3Li4uIgorbXNnc3RyICJOZXUuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTExCittc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVwb3NpdG9yeSBrbG9uZW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTI4Cittc2dpZCAiQ2xvbmUuLi4iCittc2dzdHIgIktsb25lbi4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTA1Cittc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICJSZXBvc2l0b3J5IMO2ZmZuZW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTQxCittc2dpZCAiT3Blbi4uLiIKK21zZ3N0ciAiw5ZmZm5lbi4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxNTQKK21zZ2lkICJSZWNlbnQgUmVwb3NpdG9yaWVzIgorbXNnc3RyICJMZXR6dGUgUmVwb3NpdG9yaWVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE2NAorbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgorbXNnc3RyICJadWxldHp0IGJlbnV0enRlcyBSZXBvc2l0b3J5IMO2ZmZuZW46IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMzMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMzOAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJSZXBvc2l0b3J5IMK7JXPCqyBrb25udGUgbmljaHQgZXJzdGVsbHQgd2VyZGVuOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MjIgbGliL2JyYW5jaF9jcmVhdGUudGNsOjMzCittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJFcnN0ZWxsZW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDMyCittc2dpZCAiRGlyZWN0b3J5OiIKK21zZ3N0ciAiVmVyemVpY2huaXM6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU4OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTM5Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkiCittc2dzdHIgIkdpdCBSZXBvc2l0b3J5IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIlZlcnplaWNobmlzIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkRhdGVpIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA2Cittc2dpZCAiQ2xvbmUiCittc2dzdHIgIktsb25lbiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTkKK21zZ2lkICJTb3VyY2UgTG9jYXRpb246IgorbXNnc3RyICJIZXJrdW5mdHMtQWRyZXNzZToiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTI4Cittc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCittc2dzdHIgIlppZWx2ZXJ6ZWljaG5pczoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTM4Cittc2dpZCAiQ2xvbmUgVHlwZToiCittc2dzdHIgIkFydCBkZXMgS2xvbmVuczoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTQzCittc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgorbXNnc3RyICJTdGFuZGFyZCAoc2NobmVsbCwgdGVpbHdlaXNlIHJlZHVuZGFudCwgSGFyZGxpbmtzKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NDgKK21zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCittc2dzdHIgIkFsbGVzIGtvcGllcmVuIChsYW5nc2FtZXIsIHZvbGxlIFJlZHVuZGFueikiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUzCittc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCittc2dzdHIgIlZlcmtuw7xwZnQgKHNjaG5lbGwsIG5pY2h0IGVtcGZvaGxlbiwga2VpbiBCYWNrdXApIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2MAorbXNnaWQgIlJlY3Vyc2l2ZWx5IGNsb25lIHN1Ym1vZHVsZXMgdG9vIgorbXNnc3RyICJSZWt1cnNpdiB3ZWl0ZXJlIFN1Ym1vZHVsZSBrbG9uZW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQxCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg2NAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTQ1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE1MworIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAiS2VpbiBHaXQtUmVwb3NpdG9yeTogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjMwCittc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJTdGFuZGFyZCBpc3QgbnVyIGbDvHIgbG9rYWxlIFJlcG9zaXRvcmllcyB2ZXJmw7xnYmFyLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MzQKK21zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJWZXJrbsO8cGZ0IGlzdCBudXIgZsO8ciBsb2thbGUgUmVwb3NpdG9yaWVzIHZlcmbDvGdiYXIuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiQWRyZXNzZSDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NgorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgorbXNnc3RyICJEZXIgVXJzcHJ1bmdzb3J0IGtvbm50ZSBuaWNodCBlaW5nZXJpY2h0ZXQgd2VyZGVuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY3OAorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIk9iamVrdGUgd2VyZGVuIGdlesOkaGx0IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY3OQorbXNnaWQgImJ1Y2tldHMiCittc2dzdHIgIkJ1Y2tldHMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgorbXNnc3RyICJLb3BpZW4gdm9uIE9iamVrdGVuL0luZm8vQWx0ZXJuYXRlcyBrb25udGVuIG5pY2h0IGVyc3RlbGx0IHdlcmRlbjogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKK21zZ3N0ciAiVm9uIMK7JXPCqyBrb25udGUgbmljaHRzIGdla2xvbnQgd2VyZGVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTc0Cittc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgorbXNnc3RyICJEZXIgwrttYXN0ZXLCqy1CcmFuY2ggd3VyZGUgbm9jaCBuaWNodCBpbml0aWFsaXNpZXJ0LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTUKK21zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgorbXNnc3RyICJIYXJkbGlua3MgbmljaHQgdmVyZsO8Z2Jhci4gU3RhdHRkZXNzZW4gd2lyZCBrb3BpZXJ0LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGZyb20gJXMiCittc2dzdHIgIktvcGllcmVuIHZvbiDCuyVzwqsiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAwCittc2dpZCAiQ29weWluZyBvYmplY3RzIgorbXNnc3RyICJPYmpla3RkYXRlbmJhbmsga29waWVyZW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAxCittc2dpZCAiS2lCIgorbXNnc3RyICJLQiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgorbXNnc3RyICJPYmpla3Qga2FubiBuaWNodCBrb3BpZXJ0IHdlcmRlbjogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODM3Cittc2dpZCAiTGlua2luZyBvYmplY3RzIgorbXNnc3RyICJPYmpla3RlIHZlcmxpbmtlbiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MzgKK21zZ2lkICJvYmplY3RzIgorbXNnc3RyICJPYmpla3RlIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg0NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgorbXNnc3RyICJGw7xyIE9iamVrdCBrb25udGUga2VpbiBIYXJkbGluayBlcnN0ZWxsdCB3ZXJkZW46ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMworbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJCcmFuY2hlcyB1bmQgT2JqZWt0ZSBrb25udGVuIG5pY2h0IGFuZ2Vmb3JkZXJ0IHdlcmRlbi4gIEtvbnRyb2xsaWVyZW4gU2llICIKKyJkaWUgQXVzZ2FiZW4gYXVmIGRlciBLb25zb2xlIGbDvHIgd2VpdGVyZSBBbmdhYmVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTQKK21zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJUYWdzIGtvbm50ZW4gbmljaHQgYW5nZWZvcmRlcnQgd2VyZGVuLiAgS29udHJvbGxpZXJlbiBTaWUgZGllIEF1c2dhYmVuIGF1ZiAiCisiZGVyIEtvbnNvbGUgZsO8ciB3ZWl0ZXJlIEFuZ2FiZW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOAorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJEaWUgQnJhbmNoc3BpdHplIChIRUFEKSBrb25udGUgbmljaHQgZ2VmdW5kZW4gd2VyZGVuLiAgS29udHJvbGxpZXJlbiBTaWUgZGllICIKKyJBdXNnYWJlbiBhdWYgZGVyIEtvbnNvbGUgZsO8ciB3ZWl0ZXJlIEFuZ2FiZW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk0NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgorbXNnc3RyICJWZXJ6ZWljaG5pcyDCuyVzwqsga2FubiBuaWNodCBhdWZnZXLDpHVtdCB3ZXJkZW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk1MworbXNnaWQgIkNsb25lIGZhaWxlZC4iCittc2dzdHIgIktsb25lbiBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTYwCittc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgorbXNnc3RyICJLZWluIHZvcmVpbmdlc3RlbGx0ZXIgQnJhbmNoIGdlZnVuZGVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCittc2dzdHIgIsK7JXPCqyB3dXJkZSBuaWNodCBhbHMgQ29tbWl0IGdlZnVuZGVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5OTgKK21zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiQXJiZWl0c2tvcGllIGVyc3RlbGxlbiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI4Cittc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCittc2dzdHIgIkVyc3RlbGxlbiBkZXIgQXJiZWl0c2tvcGllIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDcyCittc2dpZCAiQ2xvbmluZyBzdWJtb2R1bGVzIgorbXNnc3RyICJLbG9uZSBTdWJtb2R1bCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDg3Cittc2dpZCAiQ2Fubm90IGNsb25lIHN1Ym1vZHVsZXMuIgorbXNnc3RyICJTdWJtb2R1bCBrb25udGUgbmljaHQgZ2VrbG9udCB3ZXJkZW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMTAKK21zZ2lkICJSZXBvc2l0b3J5OiIKK21zZ3N0ciAiUmVwb3NpdG9yeToiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJSZXBvc2l0b3J5IMK7JXPCqyBrb25udGUgbmljaHQgZ2XDtmZmbmV0IHdlcmRlbi4iCisKKyM6IGxpYi9hYm91dC50Y2w6MjYKK21zZ2lkICJnaXQtZ3VpIC0gYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIEdpdC4iCittc2dzdHIgImdpdC1ndWkgLSBlaW5lIGdyYWZpc2NoZSBPYmVyZmzDpGNoZSBmw7xyIEdpdC4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyAoJXMpOiBGaWxlIFZpZXdlciIKK21zZ3N0ciAiJXMgKCVzKTogRGF0ZWktQnJvd3NlciIKKworIzogbGliL2JsYW1lLnRjbDo4MAorbXNnaWQgIkNvbW1pdDoiCittc2dzdHIgIkNvbW1pdDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MjgyCittc2dpZCAiQ29weSBDb21taXQiCittc2dzdHIgIkNvbW1pdCBrb3BpZXJlbiIKKworIzogbGliL2JsYW1lLnRjbDoyODYKK21zZ2lkICJGaW5kIFRleHQuLi4iCittc2dzdHIgIlRleHQgc3VjaGVuLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjI5MAorbXNnaWQgIkdvdG8gTGluZS4uLiIKK21zZ3N0ciAiR2VoZSB6dSBaZWlsZS4uLiIKKworIzogbGliL2JsYW1lLnRjbDoyOTkKK21zZ2lkICJEbyBGdWxsIENvcHkgRGV0ZWN0aW9uIgorbXNnc3RyICJWb2xsZSBLb3BpZS1Fcmtlbm51bmciCisKKyM6IGxpYi9ibGFtZS50Y2w6MzAzCittc2dpZCAiU2hvdyBIaXN0b3J5IENvbnRleHQiCittc2dzdHIgIkhpc3Rvcmllbi1Lb250ZXh0IGFuemVpZ2VuIgorCisjOiBsaWIvYmxhbWUudGNsOjMwNgorbXNnaWQgIkJsYW1lIFBhcmVudCBDb21taXQiCittc2dzdHIgIkVsdGVybmNvbW1pdCBhbm5vdGllcmVuIgorCisjOiBsaWIvYmxhbWUudGNsOjQ2OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgJXMuLi4iCittc2dzdHIgIiVzIGxlc2VuLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjU5NgorbXNnaWQgIkxvYWRpbmcgY29weS9tb3ZlIHRyYWNraW5nIGFubm90YXRpb25zLi4uIgorbXNnc3RyICJBbm5vdGllcnVuZ2VuIGbDvHIgS29waWVyZW4vVmVyc2NoaWViZW4gd2VyZGVuIGdlbGFkZW4uLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NjEzCittc2dpZCAibGluZXMgYW5ub3RhdGVkIgorbXNnc3RyICJaZWlsZW4gYW5ub3RpZXJ0IgorCisjOiBsaWIvYmxhbWUudGNsOjgxNQorbXNnaWQgIkxvYWRpbmcgb3JpZ2luYWwgbG9jYXRpb24gYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgIkFubm90aWVydW5nZW4gZsO8ciB1cnNwcsO8bmdsaWNoZW4gT3J0IHdlcmRlbiBnZWxhZGVuLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjgxOAorbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgorbXNnc3RyICJBbm5vdGllcnVuZyB2b2xsc3TDpG5kaWcuIgorCisjOiBsaWIvYmxhbWUudGNsOjg0OQorbXNnaWQgIkJ1c3kiCittc2dzdHIgIlZlcmFyYmVpdHVuZyBsw6R1ZnQiCisKKyM6IGxpYi9ibGFtZS50Y2w6ODUwCittc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCittc2dzdHIgIkFubm90aWVydW5nIGzDpHVmdCBiZXJlaXRzLiIKKworIzogbGliL2JsYW1lLnRjbDo4ODkKK21zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgorbXNnc3RyICJJbnRlbnNpdmUgS29waWUtRXJrZW5udW5nIGzDpHVmdC4uLiIKKworIzogbGliL2JsYW1lLnRjbDo5NTcKK21zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCittc2dzdHIgIkFubm90aWVydW5nIGxhZGVuLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjEwMTAKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRvcjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTAxNAorbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIkNvbW1pdHRlcjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTAxOQorbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgorbXNnc3RyICJVcnNwcsO8bmdsaWNoZSBEYXRlaToiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA2NworbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKK21zZ3N0ciAiQnJhbmNoc3BpdHplICjCu0hFQUQgY29tbWl0wqspIGthbm4gbmljaHQgZ2VmdW5kZW4gd2VyZGVuOiIKKworIzogbGliL2JsYW1lLnRjbDoxMTIyCittc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCittc2dzdHIgIkVsdGVybmNvbW1pdCBrYW5uIG5pY2h0IGdlZnVuZGVuIHdlcmRlbjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTEzNworbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKK21zZ3N0ciAiRWx0ZXJuY29tbWl0IGthbm4gbmljaHQgYW5nZXplaWd0IHdlcmRlbiIKKworIzogbGliL2JsYW1lLnRjbDoxMTM4IGxpYi9kaWZmLnRjbDozNDUKK21zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXMgVmVyZ2xlaWNoczoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI3OQorbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgorbXNnc3RyICJVcnNwcsO8bmdsaWNoIHZvbjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI4NQorbXNnaWQgIkluIEZpbGU6IgorbXNnc3RyICJJbiBEYXRlaToiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI5MAorbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKK21zZ3N0ciAiS29waWVydCBvZGVyIHZlcnNjaG9iZW4gZHVyY2g6IgorCisjOiBsaWIvZGlmZi50Y2w6NzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCisiXG4iCisiJXMgaGFzIG5vIGNoYW5nZXMuXG4iCisiXG4iCisiVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgIgorInRoZSBjb250ZW50IHdpdGhpbiB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gZmluZCBvdGhlciBmaWxlcyB3aGljaCBtYXkgaGF2ZSAiCisidGhlIHNhbWUgc3RhdGUuIgorbXNnc3RyICIiCisiS2VpbmUgw4RuZGVydW5nZW4gZmVzdHN0ZWxsYmFyLlxuIgorIlxuIgorIsK7JXPCqyBlbnRow6RsdCBrZWluZSDDhG5kZXJ1bmdlbi4gWndhciB3dXJkZSBkYXMgw4RuZGVydW5nc2RhdHVtIGRpZXNlciBEYXRlaSAiCisidm9uIGVpbmVtIGFuZGVyZW4gUHJvZ3JhbW0gbW9kaWZpemllcnQsIGFiZXIgZGVyIEluaGFsdCBkZXIgRGF0ZWkgaXN0ICIKKyJ1bnZlcsOkbmRlcnQuXG4iCisiXG4iCisiRGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3aXJkIGpldHp0IG5ldSBnZWxhZGVuLCB1bSBkaWVzZSDDhG5kZXJ1bmcgYmVpIGFsbGVuICIKKyJEYXRlaWVuIHp1IHByw7xmZW4uIgorCisjOiBsaWIvZGlmZi50Y2w6MTE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgorbXNnc3RyICJWZXJnbGVpY2ggdm9uIMK7JXPCqyBsYWRlbi4uLiIKKworIzogbGliL2RpZmYudGNsOjE0MworbXNnaWQgIiIKKyJMT0NBTDogZGVsZXRlZFxuIgorIlJFTU9URTpcbiIKK21zZ3N0ciAiIgorIkxPS0FMOiBnZWzDtnNjaHRcbiIKKyJFWFRFUk46XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxNDgKK21zZ2lkICIiCisiUkVNT1RFOiBkZWxldGVkXG4iCisiTE9DQUw6XG4iCittc2dzdHIgIiIKKyJFWFRFUk46IGdlbMO2c2NodFxuIgorIkxPS0FMOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTU1Cittc2dpZCAiTE9DQUw6XG4iCittc2dzdHIgIkxPS0FMOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTU4Cittc2dpZCAiUkVNT1RFOlxuIgorbXNnc3RyICJFWFRFUk46XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoyMjAgbGliL2RpZmYudGNsOjM0NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgorbXNnc3RyICJEYXRlaSDCuyVzwqsga2FubiBuaWNodCBhbmdlemVpZ3Qgd2VyZGVuIgorCisjOiBsaWIvZGlmZi50Y2w6MjIxCittc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGFkZW4gZGVyIERhdGVpOiIKKworIzogbGliL2RpZmYudGNsOjIyNworbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKK21zZ3N0ciAiR2l0LVJlcG9zaXRvcnkgKFN1YnByb2pla3QpIgorCisjOiBsaWIvZGlmZi50Y2w6MjM5Cittc2dpZCAiKiBCaW5hcnkgZmlsZSAobm90IHNob3dpbmcgY29udGVudCkuIgorbXNnc3RyICIqIEJpbsOkcmRhdGVpIChJbmhhbHQgd2lyZCBuaWNodCBhbmdlemVpZ3QpIgorCisjOiBsaWIvZGlmZi50Y2w6MjQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCisiKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCittc2dzdHIgIiIKKyIqIFVudmVyc2lvbmllcnRlIERhdGVpIGhhdCAlZCBCeXRlcy5cbiIKKyIqIE51ciBlcnN0ZSAlZCBCeXRlcyB3ZXJkZW4gYW5nZXplaWd0LlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgorIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKK21zZ3N0ciAiIgorIlxuIgorIiogVW52ZXJzaW9uaWVydGUgRGF0ZWksIGhpZXIgYWJnZXNjaG5pdHRlbiBkdXJjaCAlcy5cbiIKKyIqIFp1bSBBbnNlaGVuIGRlciB2b2xsc3TDpG5kaWdlbiBEYXRlaSBleHRlcm5lbiBFZGl0b3IgYmVudXR6ZW4uXG4iCisKKyM6IGxpYi9kaWZmLnRjbDo1ODMKK21zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAiIgorIkZlaGxlciBiZWltIEhlcmF1c25laG1lbiBkZXMgZ2V3w6RobHRlbiBQYXRjaC1CbG9ja3MgYXVzIGRlciBCZXJlaXRzdGVsbHVuZy4iCisKKyM6IGxpYi9kaWZmLnRjbDo1OTEKK21zZ2lkICJGYWlsZWQgdG8gcmV2ZXJ0IHNlbGVjdGVkIGh1bmsuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBadXLDvGNrbmVobWVuIGRlcyBnZXfDpGhsdGVuIFBhdGNoLUJsb2Nrcy4iCisKKyM6IGxpYi9kaWZmLnRjbDo1OTQKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkZlaGxlciBiZWltIEJlcmVpdHN0ZWxsZW4gZGVzIGdld8OkaGx0ZW4gUGF0Y2gtQmxvY2tzLiIKKworIzogbGliL2RpZmYudGNsOjY4NworbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGxpbmUuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBIZXJhdXNuZWhtZW4gZGVyIGdld8OkaGx0ZW4gWmVpbGUgYXVzIGRlciBCZXJlaXRzdGVsbHVuZy4iCisKKyM6IGxpYi9kaWZmLnRjbDo2OTYKK21zZ2lkICJGYWlsZWQgdG8gcmV2ZXJ0IHNlbGVjdGVkIGxpbmUuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBadXLDvGNrbmVobWVuIGRlciBnZXfDpGhsdGVuIFplaWxlLiIKKworIzogbGliL2RpZmYudGNsOjcwMAorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQmVyZWl0c3RlbGxlbiBkZXIgZ2V3w6RobHRlbiBaZWlsZS4iCisKKyM6IGxpYi9kaWZmLnRjbDo4ODkKK21zZ2lkICJGYWlsZWQgdG8gdW5kbyBsYXN0IHJldmVydC4iCittc2dzdHIgIkZlaGxlciBiZWltIFLDvGNrZ8OkbmdpZ21hY2hlbiBkZXMgbGV0enRlbiBadXLDvGNrbmVobWVuLUNvbW1pdHMiCisKKyM6IGxpYi9zc2hrZXkudGNsOjM0Cittc2dpZCAiTm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIktlaW5lIFNjaGzDvHNzZWwgZ2VmdW5kZW4uIgorCisjOiBsaWIvc3Noa2V5LnRjbDozNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZvdW5kIGEgcHVibGljIGtleSBpbjogJXMiCittc2dzdHIgIsOWZmZlbnRsaWNoZXIgU2NobMO8c3NlbCBnZWZ1bmRlbiBpbjogJXMiCisKKyM6IGxpYi9zc2hrZXkudGNsOjQzCittc2dpZCAiR2VuZXJhdGUgS2V5IgorbXNnc3RyICJTY2hsw7xzc2VsIGVyemV1Z2VuIgorCisjOiBsaWIvc3Noa2V5LnRjbDo2MQorbXNnaWQgIkNvcHkgVG8gQ2xpcGJvYXJkIgorbXNnc3RyICJJbiBad2lzY2hlbmFibGFnZSBrb3BpZXJlbiIKKworIzogbGliL3NzaGtleS50Y2w6NzUKK21zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKK21zZ3N0ciAiSWhyIE9wZW5TU0ggw7ZmZmVubGljaGVyIFNjaGzDvHNzZWwiCisKKyM6IGxpYi9zc2hrZXkudGNsOjgzCittc2dpZCAiR2VuZXJhdGluZy4uLiIKK21zZ3N0ciAiRXJ6ZXVnZW4uLi4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiS29ubnRlIMK7c3NoLWtleWdlbsKrIG5pY2h0IHN0YXJ0ZW46XG4iCisiXG4iCisiJXMiCisKKyM6IGxpYi9zc2hrZXkudGNsOjExNgorbXNnaWQgIkdlbmVyYXRpb24gZmFpbGVkLiIKK21zZ3N0ciAiU2NobMO8c3NlbGVyemV1Z3VuZyBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjEyMworbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VlZGVkLCBidXQgbm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIlNjaGzDvHNzZWxlcnpldWd1bmcgZXJmb2xncmVpY2gsIGFiZXIga2VpbmUgU2NobMO8c3NlbCBnZWZ1bmRlbi4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjEyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIllvdXIga2V5IGlzIGluOiAlcyIKK21zZ3N0ciAiSWhyIFNjaGzDvHNzZWwgaXN0IGFiZ2VsZWd0IGluOiAlcyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgKCVzKTogQ3JlYXRlIEJyYW5jaCIKK21zZ3N0ciAiJXMgKCVzKTogQnJhbmNoIGVyc3RlbGxlbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI4Cittc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCittc2dzdHIgIk5ldWVuIEJyYW5jaCBlcnN0ZWxsZW4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MgorbXNnaWQgIkJyYW5jaCBOYW1lIgorbXNnc3RyICJCcmFuY2huYW1lIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTcKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKK21zZ3N0ciAiUGFzc2VuZCB6dSBUcmFja2luZ2JyYW5jaC1OYW1lIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKK21zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKK21zZ3N0ciAiQW5mYW5nc3ZlcnNpb24iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgorbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgorbXNnc3RyICJFeGlzdGllcmVuZGVuIEJyYW5jaCBha3R1YWxpc2llcmVuOiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjc1Cittc2dpZCAiTm8iCittc2dzdHIgIk5laW4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAorbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgorbXNnc3RyICJOdXIgVm9yc3B1bGVuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTcKK21zZ2lkICJDaGVja291dCBBZnRlciBDcmVhdGlvbiIKK21zZ3N0ciAiQnJhbmNoIGF1c2NoZWNrZW4gbmFjaCBFcnN0ZWxsZW4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzIKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKK21zZ3N0ciAiQml0dGUgd8OkaGxlbiBTaWUgZWluZW4gVHJhY2tpbmdicmFuY2guIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVHJhY2tpbmcgYnJhbmNoICVzIGlzIG5vdCBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIgorbXNnc3RyICJUcmFja2luZ2JyYW5jaCDCuyVzwqsgaXN0IGtlaW4gQnJhbmNoIGltIGV4dGVybmVuIFJlcG9zaXRvcnkuIgorCisjOiBsaWIvY29uc29sZS50Y2w6NTkKK21zZ2lkICJXb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uIgorbXNnc3RyICJWZXJhcmJlaXR1bmcuIEJpdHRlIHdhcnRlbi4uLiIKKworIzogbGliL2NvbnNvbGUudGNsOjE4NgorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIkVyZm9sZ3JlaWNoIgorCisjOiBsaWIvY29uc29sZS50Y2w6MjAwCittc2dpZCAiRXJyb3I6IENvbW1hbmQgRmFpbGVkIgorbXNnc3RyICJGZWhsZXI6IEtvbW1hbmRvIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBsaWIvbGluZS50Y2w6MTcKK21zZ2lkICJHb3RvIExpbmU6IgorbXNnc3RyICJHZWhlIHp1IFplaWxlOiIKKworIzogbGliL2xpbmUudGNsOjIzCittc2dpZCAiR28iCittc2dzdHIgIkdlaGUiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MgorbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCittc2dzdHIgIkxvc2dlbMO2c3RlIEFyYmVpdHNrb3BpZS1WZXJzaW9uIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKK21zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKK21zZ3N0ciAiVmVyc2lvbiBSZWdleC1BdXNkcnVjazoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3MgorbXNnaWQgIkxvY2FsIEJyYW5jaCIKK21zZ3N0ciAiTG9rYWxlciBCcmFuY2giCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NworbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiVHJhY2tpbmdicmFuY2giCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo4MiBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ0Cittc2dpZCAiVGFnIgorbXNnc3RyICJUYWciCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBWZXJzaW9uOiAlcyIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjM0MgorbXNnaWQgIk5vIHJldmlzaW9uIHNlbGVjdGVkLiIKK21zZ3N0ciAiS2VpbmUgVmVyc2lvbiBhdXNnZXfDpGhsdC4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNTAKK21zZ2lkICJSZXZpc2lvbiBleHByZXNzaW9uIGlzIGVtcHR5LiIKK21zZ3N0ciAiVmVyc2lvbnMtQXVzZHJ1Y2sgaXN0IGxlZXIuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTM3Cittc2dpZCAiVXBkYXRlZCIKK21zZ3N0ciAiQWt0dWFsaXNpZXJ0IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTY1Cittc2dpZCAiVVJMIgorbXNnc3RyICJVUkwiCisKKyM6IGxpYi9jb21taXQudGNsOjkKK21zZ2lkICIiCisiVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKKyJcbiIKKyJZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgIgorInRvIGFtZW5kLlxuIgorbXNnc3RyICIiCisiS2VpbiBDb21taXQgenVyIE5hY2hiZXNzZXJ1bmcgdm9yaGFuZGVuLlxuIgorIlxuIgorIlNpZSBzaW5kIGRhYmVpLCBkZW4gZXJzdGVuIENvbW1pdCB6dSBlcnN0ZWxsZW4uIEVzIGdpYnQga2VpbmVuIGV4aXN0aWVyZW5kZW4gIgorIkNvbW1pdCwgZGVuIFNpZSBuYWNoYmVzc2VybiBrw7ZubnRlbi5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgKK21zZ2lkICIiCisiQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCisiXG4iCisiWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKKyJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgorImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCittc2dzdHIgIiIKKyJOYWNoYmVzc2VydW5nIGJlaSBadXNhbW1lbmbDvGhydW5nIG5pY2h0IG3DtmdsaWNoLlxuIgorIlxuIgorIlNpZSBoYWJlbiBkYXMgWnVzYW1tZW5mw7xocmVuIHZvbiBDb21taXRzIGFuZ2VmYW5nZW4sIGFiZXIgbm9jaCBuaWNodCAiCisiYmVlbmRldC4gU2llIGvDtm5uZW4ga2VpbmVuIHZvcmlnZW4gQ29tbWl0IG5hY2hiZXNzZXJuLCBzb2xhbmdlIGVpbmUgIgorInVuZmVydGlnZSBadXNhbW1lbmbDvGhydW5nIGV4aXN0aWVydC4gRGF6dSBtw7xzc2VuIFNpZSBkaWUgWnVzYW1tZW5mw7xocnVuZyAiCisiYmVlbmRlbiBvZGVyIGFiYnJlY2hlbi5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6NTYKK21zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCittc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlciBDb21taXRkYXRlbiBmw7xyIE5hY2hiZXNzZXJuOiIKKworIzogbGliL2NvbW1pdC50Y2w6ODMKK21zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgorbXNnc3RyICJCZW51dHplcm5hbWUga29ubnRlIG5pY2h0IGJlc3RpbW10IHdlcmRlbjoiCisKKyM6IGxpYi9jb21taXQudGNsOjg4Cittc2dpZCAiSW52YWxpZCBHSVRfQ09NTUlUVEVSX0lERU5UOiIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgV2VydCB2b24gR0lUX0NPTU1JVFRFUl9JTkRFTlQ6IgorCisjOiBsaWIvY29tbWl0LnRjbDoxMzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBUY2wgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyAnJXMnLiIKK21zZ3N0ciAiV2FybmluZzogVGNsL1RrIHVudGVyc3TDvHR6dCBkaWUgWmVpY2hlbmNvZGllcnVuZyDCuyVzwqsgbmljaHQuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNTgKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiRGVyIGxldHp0ZSBnZWxhZGVuZSBTdGF0dXMgc3RpbW10IG5pY2h0IG1laHIgbWl0IGRlbSBSZXBvc2l0b3J5IMO8YmVyZWluLlxuIgorIlxuIgorIkVpbiBhbmRlcmVzIEdpdC1Qcm9ncmFtbSBoYXQgZGFzIFJlcG9zaXRvcnkgc2VpdCBkZW0gbGV0enRlbiBMYWRlbiAiCisiZ2XDpG5kZXJ0LiAgVm9yIGRlbSBuw6RjaHN0ZW4gQ29tbWl0IG11c3MgbmV1IGdlbGFkZW4gd2VyZGVuLlxuIgorIlxuIgorIkVzIHdpcmQgZ2xlaWNoIG5ldSBnZWxhZGVuLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIHN0YWdlIHRoZSBmaWxlICIKKyJiZWZvcmUgY29tbWl0dGluZy5cbiIKK21zZ3N0ciAiIgorIk5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4ga8O2bm5lbiBuaWNodCBjb21taXR0ZXQgd2VyZGVuLlxuIgorIlxuIgorIkRpZSBEYXRlaSDCuyVzwqsgaGF0IG5vY2ggbmljaHQgYXVmZ2Vsw7ZzdGUgWnVzYW1tZW5mw7xocnVuZ3MtS29uZmxpa3RlLiBTaWUgIgorIm3DvHNzZW4gZGllc2UgS29uZmxpa3RlIGF1ZmzDtnNlbiB1bmQgZGllIERhdGVpZW4gaW4gZGllIEJlcmVpdHN0ZWxsdW5nICIKKyJoaW56dWbDvGdlbiwgYmV2b3IgU2llIGNvbW1pdHRlbiBrw7ZubmVuLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxOTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgorIlxuIgorIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCittc2dzdHIgIiIKKyJVbmJla2FubnRlciBEYXRlaXp1c3RhbmQgwrslc8KrLlxuIgorIlxuIgorIkRhdGVpIMK7JXPCqyBrYW5uIG5pY2h0IGNvbW1pdHRldCB3ZXJkZW4uXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE5OAorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKKyJcbiIKKyJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorbXNnc3RyICIiCisiS2VpbmUgw4RuZGVydW5nZW4gdm9yaGFuZGVuLCBkaWUgY29tbWl0dGV0IHdlcmRlbiBrw7ZubnRlbi5cbiIKKyJcbiIKKyJTaWUgbcO8c3NlbiBtaW5kZXN0ZW5zIGVpbmUgRGF0ZWkgYmVyZWl0c3RlbGxlbiwgYmV2b3IgU2llIGNvbW1pdHRlbiBrw7ZubmVuLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMTMKK21zZ2lkICIiCisiUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCisiXG4iCisiLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgorIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCisiLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgorbXNnc3RyICIiCisiQml0dGUgZ2ViZW4gU2llIGVpbmUgVmVyc2lvbnNiZXNjaHJlaWJ1bmcgZWluLlxuIgorIlxuIgorIkVpbmUgZ3V0ZSBWZXJzaW9uc2Jlc2NocmVpYnVuZyBlbnRow6RsdCBmb2xnZW5kZSBBYnNjaG5pdHRlOlxuIgorIlxuIgorIi0gRXJzdGUgWmVpbGU6IEVpbmUgWnVzYW1tZW5mYXNzdW5nLCB3YXMgbWFuIGdlbWFjaHQgaGF0LlxuIgorIlxuIgorIi0gWndlaXRlIFplaWxlOiBMZWVyemVpbGVcbiIKKyJcbiIKKyItIFJlc3Q6IEVpbmUgYXVzZsO8aHJsaWNoZSBCZXNjaHJlaWJ1bmcsIHdhcnVtIGRpZXNlIMOEbmRlcnVuZyBoaWxmcmVpY2ggaXN0LlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNDQKK21zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKK21zZ3N0ciAiQXVmcnVmZW4gZGVzIMK7cHJlLWNvbW1pdCBob29rwqsuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjI1OQorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgorbXNnc3RyICJDb21taXR0ZW4gYWJnZWxlaG50IGR1cmNoIMK7cHJlLWNvbW1pdCBob29rwqsuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNzgKK21zZ2lkICIiCisiWW91IGFyZSBhYm91dCB0byBjb21taXQgb24gYSBkZXRhY2hlZCBoZWFkLiBUaGlzIGlzIGEgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzICIKKyJ0aGluZyB0byBkbyBiZWNhdXNlIGlmIHlvdSBzd2l0Y2ggdG8gYW5vdGhlciBicmFuY2ggeW91IHdpbGwgbG9zZSB5b3VyICIKKyJjaGFuZ2VzIGFuZCBpdCBjYW4gYmUgZGlmZmljdWx0IHRvIHJldHJpZXZlIHRoZW0gbGF0ZXIgZnJvbSB0aGUgcmVmbG9nLiBZb3UgIgorInNob3VsZCBwcm9iYWJseSBjYW5jZWwgdGhpcyBjb21taXQgYW5kIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gY29udGludWUuXG4iCisiIFxuIgorIiBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gcHJvY2VlZCB3aXRoIHlvdXIgQ29tbWl0PyIKK21zZ3N0ciAiIgorIlNpZSBzaW5kIGRhYmVpLCBlaW5lbiBDb21taXQgYXVmIGxvc2dlbMO2c3RlIEJyYW5jaHNwaXR6ZSAowrtjb21taXQgdG8gIgorImRldGFjaGVkIGhlYWTCqykgenUgZXJzdGVsbGVuLiBEYXMgaXN0IHJpc2thbnQsIGRlbm4gd2VubiBTaWUgenUgZWluZW0gIgorImFuZGVyZW4gQnJhbmNoIHdlY2hzZWxuLCB3w7xyZGVuIFNpZSBkaWVzZSDDhG5kZXJ1bmdlbiB2ZXJsaWVyZW4gdW5kIGVzIGlzdCAiCisibmFjaHRyw6RnbGljaCBzY2h3aWVyaWcsIGRpZXNlIGF1cyBkZW0gQ29tbWl0LUxvZyAowrtyZWZsb2fCqykgd2llZGVyenVmaW5kZW4uICIKKyJFcyB3aXJkIGVtcGZvaGxlbiwgZGllc2VuIENvbW1pdCBhYnp1YnJlY2hlbiB1bmQgenVuw6RjaHN0IGVpbmVuIG5ldWVuIEJyYW5jaCAiCisienUgZXJzdGVsbGVuLlxuIgorIlxuIgorIiBXb2xsZW4gU2llIGRlbiBDb21taXQgdHJvdHpkZW0gaW4gZGllc2VyIEZvcm0gZXJzdGVsbGVuPyIKKworIzogbGliL2NvbW1pdC50Y2w6Mjk5Cittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgIkF1ZnJ1ZmVuIGRlcyDCu2NvbW1pdC1tc2cgaG9va8KrLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozMTQKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiQ29tbWl0dGVuIGFiZ2VsZWhudCBkdXJjaCDCu2NvbW1pdC1tc2cgaG9va8KrLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzI3Cittc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgorbXNnc3RyICLDhG5kZXJ1bmdlbiBjb21taXR0ZW4uLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjM0NAorbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAid3JpdGUtdHJlZSBmZWhsZ2VzY2hsYWdlbjoiCisKKyM6IGxpYi9jb21taXQudGNsOjM0NSBsaWIvY29tbWl0LnRjbDozOTUgbGliL2NvbW1pdC50Y2w6NDIyCittc2dpZCAiQ29tbWl0IGZhaWxlZC4iCittc2dzdHIgIkNvbW1pdHRlbiBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGxpYi9jb21taXQudGNsOjM2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCittc2dzdHIgIlZlcnNpb24gwrslc8KrIHNjaGVpbnQgYmVzY2jDpGRpZ3QgenUgc2VpbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzY3Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiS2VpbmUgw4RuZGVydW5nZW4genVtIGNvbW1pdHRlbi5cbiIKKyJcbiIKKyJFcyBnaWJ0IGtlaW5lIGdlw6RuZGVydGUgRGF0ZWkgaW4gZGllc2VtIENvbW1pdCB1bmQgZXMgd3VyZGUgYXVjaCBuaWNodHMgIgorInp1c2FtbWVuZ2Vmw7xocnQuXG4iCisiXG4iCisiRGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3aXJkIGRhaGVyIGpldHp0IG5ldSBnZWxhZGVuLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDozNzQKK21zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCittc2dzdHIgIktlaW5lIMOEbmRlcnVuZ2VuLCBkaWUgY29tbWl0dGV0IHdlcmRlbiBrw7ZubmVuLiIKKworIzogbGliL2NvbW1pdC50Y2w6Mzk0Cittc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAiY29tbWl0LXRyZWUgZmVobGdlc2NobGFnZW46IgorCisjOiBsaWIvY29tbWl0LnRjbDo0MjEKK21zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCittc2dzdHIgInVwZGF0ZS1yZWYgZmVobGdlc2NobGFnZW46IgorCisjOiBsaWIvY29tbWl0LnRjbDo1MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCittc2dzdHIgIkNvbW1pdCAlcyBlcnN0ZWxsdDogJXMiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IERlbGV0ZSBCcmFuY2giCittc2dzdHIgIiVzICglcyk6IEJyYW5jaCBsw7ZzY2hlbiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjIxCittc2dpZCAiRGVsZXRlIExvY2FsIEJyYW5jaCIKK21zZ3N0ciAiTG9rYWxlbiBCcmFuY2ggbMO2c2NoZW4iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozOQorbXNnaWQgIkxvY2FsIEJyYW5jaGVzIgorbXNnc3RyICJMb2thbGUgQnJhbmNoZXMiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MQorbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgorbXNnc3RyICJOdXIgbMO2c2NoZW4sIHdlbm4genVzYW1tZW5nZWbDvGhydCBuYWNoIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgorbXNnc3RyICJGb2xnZW5kZSBCcmFuY2hlcyBzaW5kIG5vY2ggbmljaHQgbWl0IMK7JXPCqyB6dXNhbW1lbmdlZsO8aHJ0OiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEzMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiAtICVzOiIKK21zZ3N0ciAiIC0gJXM6IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBMw7ZzY2hlbiBkZXIgQnJhbmNoZXM6XG4iCisiJXMiCisKKyM6IGxpYi9kYXRlLnRjbDoyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZGF0ZSBmcm9tIEdpdDogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VzIERhdHVtIHZvbiBHaXQ6ICVzIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQyCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIkFuemFobCB1bnZlcmtuw7xwZnRlciBPYmpla3RlIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQzCittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCittc2dzdHIgIkZlc3RwbGF0dGVucGxhdHogdm9uIHVudmVya27DvHBmdGVuIE9iamVrdGVuIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ0Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJBbnphaGwga29tcHJpbWllcnRlciBPYmpla3RlIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ1Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgorbXNnc3RyICJBbnphaGwgS29tcHJpbWllcnVuZ3NlaW5oZWl0ZW4iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDYKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIkZlc3RwbGF0dGVucGxhdHogdm9uIGtvbXByaW1pZXJ0ZW4gT2JqZWt0ZW4iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKK21zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgorbXNnc3RyICJLb21wcmltaWVydGUgT2JqZWt0ZSwgZGllIHp1bSBBdWZyw6R1bWVuIHZvcmdlc2VoZW4gc2luZCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OAorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgIkRhdGVpZW4gaW0gTcO8bGxlaW1lciIKKworIzogbGliL2RhdGFiYXNlLnRjbDo2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzICglcyk6IERhdGFiYXNlIFN0YXRpc3RpY3MiCittc2dzdHIgIiVzICglcyk6IERhdGVuYmFua3N0YXRpc3RpayIKKworIzogbGliL2RhdGFiYXNlLnRjbDo3MgorbXNnaWQgIkNvbXByZXNzaW5nIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIk9iamVrdGRhdGVuYmFuayBrb21wcmltaWVyZW4iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKK21zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKK21zZ3N0ciAiRGllIE9iamVrdGRhdGVuYmFuayBkdXJjaCDCu2ZzY2stb2JqZWN0c8KrIMO8YmVycHLDvGZlbiBsYXNzZW4iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKKyJcbiIKKyJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKKyJ0aGUgZGF0YWJhc2UuXG4iCisiXG4iCisiQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCittc2dzdHIgIiIKKyJEaWVzZXMgUmVwb3NpdG9yeSBlbnRow6RsdCB1bmdlZsOkaHIgJWkgbmljaHQgdmVya27DvHBmdGUgT2JqZWt0ZS5cbiIKKyJcbiIKKyJGw7xyIGVpbmUgb3B0aW1hbGUgUGVyZm9ybWFuY2Ugd2lyZCBlbXBmb2hsZW4sIGRpZSBEYXRlbmJhbmsgZGVzIFJlcG9zaXRvcnkgIgorInp1IGtvbXByaW1pZXJlbi5cbiIKKyJcbiIKKyJTb2xsIGRpZSBEYXRlbmJhbmsgamV0enQga29tcHJpbWllcnQgd2VyZGVuPyIKKworIzogbGliL2Vycm9yLnRjbDoyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzOiBlcnJvciIKK21zZ3N0ciAiJXM6IEZlaGxlciIKKworIzogbGliL2Vycm9yLnRjbDozNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzOiB3YXJuaW5nIgorbXNnc3RyICIlczogV2FybnVuZyIKKworIzogbGliL2Vycm9yLnRjbDo4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIGhvb2sgZmFpbGVkOiIKK21zZ3N0ciAiJXMgaG9vayBmZWhsZ2VzY2hsYWdlbjoiCisKKyM6IGxpYi9lcnJvci50Y2w6OTYKK21zZ2lkICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIgorbXNnc3RyICIiCisiU2llIG3DvHNzZW4gZGllIG9iaWdlbiBGZWhsZXIgenVlcnN0IGJlaGViZW4sIGJldm9yIFNpZSBjb21taXR0ZW4ga8O2bm5lbi4iCisKKyM6IGxpYi9lcnJvci50Y2w6MTE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgKCVzKTogZXJyb3IiCittc2dzdHIgIiVzICglcyk6IEZlaGxlciIKKworIzogbGliL21lcmdlLnRjbDoxMworbXNnaWQgIiIKKyJDYW5ub3QgbWVyZ2Ugd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhbnkgdHlwZSBvZiBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIlp1c2FtbWVuZsO8aHJlbiBrYW5uIG5pY2h0IGdsZWljaHplaXRpZyBtaXQgTmFjaGJlc3Nlcm4gZHVyY2hnZWbDvGhydCB3ZXJkZW4uXG4iCisiXG4iCisiU2llIG3DvHNzZW4genVlcnN0IGRlbiBOYWNoYmVzc2VydW5ncy1Db21taXQgYWJzY2hsaWXDn2VuLCBiZXZvciBTaWUgIgorInp1c2FtbWVuZsO8aHJlbiBrw7ZubmVuLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJEZXIgbGV0enRlIGdlbGFkZW5lIFN0YXR1cyBzdGltbXQgbmljaHQgbWVociBtaXQgZGVtIFJlcG9zaXRvcnkgw7xiZXJlaW4uXG4iCisiXG4iCisiRWluIGFuZGVyZXMgR2l0LVByb2dyYW1tIGhhdCBkYXMgUmVwb3NpdG9yeSBzZWl0IGRlbSBsZXR6dGVuIExhZGVuICIKKyJnZcOkbmRlcnQuICBWb3IgZWluZW0gWnVzYW1tZW5mw7xocmVuIG11c3MgbmV1IGdlbGFkZW4gd2VyZGVuLlxuIgorIlxuIgorIkVzIHdpcmQgZ2xlaWNoIG5ldSBnZWxhZGVuLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgorIlxuIgorIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgorIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIlp1c2FtbWVuZsO8aHJ1bmcgbWl0IEtvbmZsaWt0ZW4uXG4iCisiXG4iCisiRGllIERhdGVpIMK7JXPCqyBlbnRow6RsdCBLb25mbGlrdGUgYmVpbSBadXNhbW1lbmbDvGhyZW4uXG4iCisiXG4iCisiU2llIG3DvHNzZW4gZGllc2UgS29uZmxpa3RlIHBlciBIYW5kIGF1ZmzDtnNlbi4gQW5zY2hsaWXDn2VuZCBtw7xzc2VuIFNpZSBkaWUgIgorIkRhdGVpIHdpZWRlciBiZXJlaXRzdGVsbGVuIHVuZCBjb21taXR0ZW4sIHVtIGRpZSBadXNhbW1lbmbDvGhydW5nICIKKyJhYnp1c2NobGllw59lbi4gRXJzdCBkYW5hY2gga2FubiBlaW5lIG5ldWUgWnVzYW1tZW5mw7xocnVuZyBiZWdvbm5lbiB3ZXJkZW4uXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhbmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaXMgbW9kaWZpZWQuXG4iCisiXG4iCisiWW91IHNob3VsZCBjb21wbGV0ZSB0aGUgY3VycmVudCBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGEgbWVyZ2UuICBEb2luZyBzbyAiCisid2lsbCBoZWxwIHlvdSBhYm9ydCBhIGZhaWxlZCBtZXJnZSwgc2hvdWxkIHRoZSBuZWVkIGFyaXNlLlxuIgorbXNnc3RyICIiCisiRXMgbGllZ2VuIMOEbmRlcnVuZ2VuIHZvci5cbiIKKyJcbiIKKyJEaWUgRGF0ZWkgwrslc8KrIHd1cmRlIGdlw6RuZGVydC5cbiIKKyJcbiIKKyJTaWUgc29sbHRlbiB6dWVyc3QgZGVuIGJlcmVpdGdlc3RlbGx0ZW4gQ29tbWl0IGFic2NobGllw59lbiwgYmV2b3IgU2llIGVpbmUgIgorIlp1c2FtbWVuZsO8aHJ1bmcgYmVnaW5uZW4uICBNaXQgZGllc2VyIFJlaWhlbmZvbGdlIGvDtm5uZW4gU2llIG3DtmdsaWNoZSAiCisiS29uZmxpa3RlIGJlaW0gWnVzYW1tZW5mw7xocmVuIHdlc2VudGxpY2ggZWluZmFjaGVyIGJlaGViZW4gb2RlciBhYmJyZWNoZW4uXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiVzIHZvbiAlcyIKKworIzogbGliL21lcmdlLnRjbDoxMjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIHZvbiAlcyB1bmQgJXMuLi4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTM3Cittc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCittc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiBlcmZvbGdyZWljaCBhYmdlc2NobG9zc2VuLiIKKworIzogbGliL21lcmdlLnRjbDoxMzkKK21zZ2lkICJNZXJnZSBmYWlsZWQuICBDb25mbGljdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkLiIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIGZlaGxnZXNjaGxhZ2VuLiBLb25mbGlrdGF1ZmzDtnN1bmcgaXN0IG5vdHdlbmRpZy4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgKCVzKTogTWVyZ2UiCittc2dzdHIgIiVzICglcyk6IFp1c2FtbWVuZsO8aHJlbiIKKworIzogbGliL21lcmdlLnRjbDoxNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBJbnRvICVzIgorbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gaW4gwrslc8KrIgorCisjOiBsaWIvbWVyZ2UudGNsOjE4MworbXNnaWQgIlJldmlzaW9uIFRvIE1lcmdlIgorbXNnc3RyICJadXNhbW1lbnp1ZsO8aHJlbmRlIFZlcnNpb24iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjE4Cittc2dpZCAiIgorIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuXG4iCittc2dzdHIgIiIKKyJBYmJydWNoIGRlciBOYWNoYmVzc2VydW5nIGlzdCBuaWNodCBtw7ZnbGljaC5cbiIKKyJcbiIKKyJTaWUgbcO8c3NlbiBkaWUgTmFjaGJlc3NlcnVuZyBkaWVzZSBDb21taXRzIGFic2NobGllw59lbi5cbiIKKworIzogbGliL21lcmdlLnRjbDoyMjgKK21zZ2lkICIiCisiQWJvcnQgbWVyZ2U/XG4iCisiXG4iCisiQWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2Ugd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCBhYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZT8iCittc2dzdHIgIiIKKyJadXNhbW1lbmbDvGhyZW4gYWJicmVjaGVuP1xuIgorIlxuIgorIldlbm4gU2llIGFiYnJlY2hlbiwgZ2VoZW4gYWxsZSBub2NoIG5pY2h0IGNvbW1pdHRldGVuIMOEbmRlcnVuZ2VuIHZlcmxvcmVuLlxuIgorIlxuIgorIlp1c2FtbWVuZsO8aHJlbiBqZXR6dCBhYmJyZWNoZW4/IgorCisjOiBsaWIvbWVyZ2UudGNsOjIzNAorbXNnaWQgIiIKKyJSZXNldCBjaGFuZ2VzP1xuIgorIlxuIgorIlJlc2V0dGluZyB0aGUgY2hhbmdlcyB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKK21zZ3N0ciAiIgorIsOEbmRlcnVuZ2VuIHZlcndlcmZlbj9cbiIKKyJcbiIKKyJBbGxlIG5vY2ggbmljaHQgY29tbWl0dGV0ZW4gw4RuZGVydW5nZW4gd8O8cmRlbiB2ZXJsb3JlbiBnZWhlbi5cbiIKKyJcbiIKKyLDhG5kZXJ1bmdlbiBqZXR6dCB2ZXJ3ZXJmZW4/IgorCisjOiBsaWIvbWVyZ2UudGNsOjI0NgorbXNnaWQgIkFib3J0aW5nIgorbXNnc3RyICJBYmJydWNoIgorCisjOiBsaWIvbWVyZ2UudGNsOjI0NworbXNnaWQgImZpbGVzIHJlc2V0IgorbXNnc3RyICJEYXRlaWVuIHp1csO8Y2tnZXNldHp0IgorCisjOiBsaWIvbWVyZ2UudGNsOjI3NworbXNnaWQgIkFib3J0IGZhaWxlZC4iCittc2dzdHIgIkFiYnJ1Y2ggZmVobGdlc2NobGFnZW4uIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3OQorbXNnaWQgIkFib3J0IGNvbXBsZXRlZC4gIFJlYWR5LiIKK21zZ3N0ciAiQWJicnVjaCBkdXJjaGdlZsO8aHJ0LiBCZXJlaXQuIgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9lbC5wbyBiL2dpdC1ndWkvcG8vZWwucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYzNGJhNAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vZWwucG8KQEAgLTAsMCArMSwyMDA1IEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgdG8gR3JlZWsKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEppbW15IEFuZ2VsYWtvcworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWd1aSBwYWNrYWdlLgorIyBKaW1teSBBbmdlbGFrb3MgPHZ5cnVzc0BoZWxsdWcuZ3I+LCAyMDA5LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZWxcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDgtMDMtMTQgMDc6MTgrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDYtMjMgMjE6MzMrMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmltbXkgQW5nZWxha29zIDx2eXJ1c3NAaGVsbHVnLmdyPlxuIgorIkxhbmd1YWdlLVRlYW06IEdyZWVrIDxpMThuQGxpc3RzLmhlbGx1Zy5ncj5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLUdlbmVyYXRvcjogTG9rYWxpemUgMC4zXG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo2MzQgZ2l0LWd1aS5zaDo2NDggZ2l0LWd1aS5zaDo2NjEgZ2l0LWd1aS5zaDo3NDQKKyM6IGdpdC1ndWkuc2g6NzYzCittc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCittc2dzdHIgImdpdC1ndWk6IM66z4HOr8+DzrnOvM6/IM+Dz4bOrM67zrzOsSIKKworIzogZ2l0LWd1aS5zaDo1OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGZvbnQgc3BlY2lmaWVkIGluICVzOiIKK21zZ3N0ciAizpzOtyDOrc6zzrrPhc+BzrcgzrPPgc6xzrzOvM6xz4TOv8+DzrXOuc+Bzqwgz4PPhM6/ICVzOiIKKworIzogZ2l0LWd1aS5zaDo2MjAKK21zZ2lkICJNYWluIEZvbnQiCittc2dzdHIgIs6az43Pgc65zrEgzpPPgc6xzrzOvM6xz4TOv8+DzrXOuc+BzqwiCisKKyM6IGdpdC1ndWkuc2g6NjIxCittc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCittc2dzdHIgIs6Tz4HOsc68zrzOsc+Ezr/Pg861zrnPgc6sIM6UzrnOsc+Gzr/Pgc6sz4IvzprOv869z4PPjM67zrHPgiIKKworIzogZ2l0LWd1aS5zaDo2MzUKK21zZ2lkICJDYW5ub3QgZmluZCBnaXQgaW4gUEFUSC4iCittc2dzdHIgIs6UzrUgzrLPgc6tzrjOt866zrUgz4TOvyBnaXQgz4PPhM6/IFBBVEguIgorCisjOiBnaXQtZ3VpLnNoOjY2MgorbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgorbXNnc3RyICLOkc60z43Ovc6xz4TOtyDOtyDOsc69zqzOs869z4nPg863IM+Dz4TOv865z4fOtc65zr/Pg861zrnPgc6sz4Igzq3Ous60zr/Pg863z4IgR2l0OiIKKworIzogZ2l0LWd1aS5zaDo2ODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiR2l0IHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWQuXG4iCisiXG4iCisiJXMgY2xhaW1zIGl0IGlzIHZlcnNpb24gJyVzJy5cbiIKKyJcbiIKKyIlcyByZXF1aXJlcyBhdCBsZWFzdCBHaXQgMS41LjAgb3IgbGF0ZXIuXG4iCisiXG4iCisiQXNzdW1lICclcycgaXMgdmVyc2lvbiAxLjUuMD9cbiIKK21zZ3N0ciAiIgorIs6UzrUgzrzPgM6/z4HOtc6vIM69zrEgzrHOvc65z4fOvc61z4XPhM61zq8gzrcgzq3Ous60zr/Pg863IM+Ezr/PhSBHaXQuIFxuIgorIlxuIgorIs6kzr8gJXMgz4XPgM6/z4PPhM63z4HOr862zrXOuSDPgM+Jz4IgzrXOr869zrHOuSDOtyDOrc66zrTOv8+DzrcgJyVzJy5cbiIKKyJcbiIKKyLOpM6/ICVzICDOsc+AzrHOuc+EzrXOryDPhM6/z4XOu86sz4fOuc+Dz4TOv869IEdpdCAxLjUuMCDOriDPgM65z4wgz4DPgc+Mz4PPhs6xz4TOty5cbiIKKyJcbiIKKyLOnc6xIM+Fz4DOv8+EzrXOuM61zq8gz4DPic+CIM+Ezr8gJyVzJyDOtc6vzr3Osc65IM63IM6tzrrOtM6/z4POtyAxLjUuMDtcbiIKKworIzogZ2l0LWd1aS5zaDo5MTgKK21zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCittc2dzdHIgIs6UzrUgzrLPgc6tzrjOt866zrUgz4bOrM66zrXOu86/z4IgR2l0OiIKKworIzogZ2l0LWd1aS5zaDo5MjUKK21zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgorbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgzrzOtc+EzrHOus6vzr3Ot8+Dzrcgz4PPhM63zr0gzrrOv8+Bz4XPhs6uIM+Ezr/PhSDPhs6xzrrOrc67zr/PhSDOtc+BzrPOsc+Dzq/Osc+COiIKKworIzogZ2l0LWd1aS5zaDo5MzIKK21zZ2lkICJDYW5ub3QgdXNlIGZ1bm55IC5naXQgZGlyZWN0b3J5OiIKK21zZ3N0ciAizpTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM+Hz4HOrs+Dzrcgz4DOtc+Bzq/Otc+BzrPOv8+FIM+GzrHOus6tzrvOv8+FIC5naXQ6IgorCisjOiBnaXQtZ3VpLnNoOjkzNworbXNnaWQgIk5vIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLOlM61zr0gz4XPgM6sz4HPh861zrkgz4bOrM66zrXOu86/z4IgzrXPgc6zzrHPg86vzrHPgiIKKworIzogZ2l0LWd1aS5zaDoxMDg0IGxpYi9jaGVja291dF9vcC50Y2w6MjgzCittc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKK21zZ3N0ciAizpHOvc6xzr3Orc+Jz4POtyDOus6xz4TOrM+Dz4TOsc+DzrfPgiDOsc+Bz4fOtc6vzr/PhS4uLiIKKworIzogZ2l0LWd1aS5zaDoxMTQ5Cittc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKK21zZ3N0ciAizpHOvc6vz4fOvc61z4XPg863IM6zzrnOsSDPhM+Bzr/PgM6/z4DOv865zrfOvM6tzr3OsSDOsc+Bz4fOtc6vzrEuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTMyNCBsaWIvYnJvd3Nlci50Y2w6MjQ2Cittc2dpZCAiUmVhZHkuIgorbXNnc3RyICLOiM+Ezr/Ouc68zr8uIgorCisjOiBnaXQtZ3VpLnNoOjE1OTAKK21zZ2lkICJVbm1vZGlmaWVkIgorbXNnc3RyICLOnM63IM+Ez4HOv8+Azr/PgM6/zrnOt868zq3Ovc6/IgorCisjOiBnaXQtZ3VpLnNoOjE1OTIKK21zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAizqTPgc6/z4DOv8+Azr/Ouc63zrzOrc69zr8sIM68zrcgz4PPhM6xzrTOuc6/z4DOv865zrfOvM6tzr3OvyIKKworIzogZ2l0LWd1aS5zaDoxNTkzIGdpdC1ndWkuc2g6MTU5OAorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICLOo8+EzrHOtM65zr/PgM6/zrnOt868zq3Ovc6/IM+Az4HOv8+CIM+Fz4DOv86yzr/Ou86uIgorCisjOiBnaXQtZ3VpLnNoOjE1OTQgZ2l0LWd1aS5zaDoxNTk5Cittc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIs6czq3Pgc63IM+Dz4TOsc60zrnOv8+Azr/Ouc63zrzOrc69zrEgz4DPgc6/z4Igz4XPgM6/zrLOv867zq4iCisKKyM6IGdpdC1ndWkuc2g6MTU5NSBnaXQtZ3VpLnNoOjE2MDAKK21zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyIKK21zZ3N0ciAizqPPhM6xzrTOuc6/z4DOv865zrfOvM6tzr3OvyDPgM+Bzr/PgiDPhc+Azr/Oss6/zrvOriwgzrvOtc6vz4DOtc65IgorCisjOiBnaXQtZ3VpLnNoOjE1OTcKK21zZ2lkICJVbnRyYWNrZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIs6czrcgz4DOsc+BzrHOus6/zrvOv8+FzrjOv8+NzrzOtc69zr8sIM68zrcgz4PPhM6xzrTOuc6/z4DOv865zrfOvM6tzr3OvyIKKworIzogZ2l0LWd1aS5zaDoxNjAyCittc2dpZCAiTWlzc2luZyIKK21zZ3N0ciAizpvOtc6vz4DOtc65IgorCisjOiBnaXQtZ3VpLnNoOjE2MDMKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCittc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Ouc63zrzOrc69zr8gz4DPgc6/z4IgzrHPhs6xzq/Pgc61z4POtyIKKworIzogZ2l0LWd1aS5zaDoxNjA0Cittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgorbXNnc3RyICLOo8+EzrHOtM65zr/PgM6/zrnOt868zq3Ovc6/IM+Az4HOv8+CIM6xz4bOsc6vz4HOtc+DzrcsIM6xzrrPjM68zrEgz4DOsc+Bz4zOvSIKKworIzogZ2l0LWd1aS5zaDoxNjA2IGdpdC1ndWkuc2g6MTYwNyBnaXQtZ3VpLnNoOjE2MDggZ2l0LWd1aS5zaDoxNjA5Cittc2dpZCAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAizpHPgM6xzrnPhM61zq8gzrXPgM6vzrvPhc+Dzrcgz4PPhc6zz4fPjs69zrXPhc+DzrfPgiIKKworIzogZ2l0LWd1aS5zaDoxNjQ0Cittc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrXOus66zq/Ovc63z4POtyDPhM6/z4UgZ2l0ay4uLiDPgM6xz4HOsc66zrHOu8+OIM+AzrXPgc65zrzOrc69zrXPhM61Li4uIgorCisjOiBnaXQtZ3VpLnNoOjE2NTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIHN0YXJ0IGdpdGs6XG4iCisiXG4iCisiJXMgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiIKKyLOkc60z4XOvc6xzrzOr86xIM61zrrOus6vzr3Ot8+DzrfPgiDPhM6/z4UgZ2l0azpcbiIKKyJcbiIKKyLOpM6/ICVzIM60zrXOvSDPhc+AzqzPgc+HzrXOuSIKKworIzogZ2l0LWd1aS5zaDoxODYwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKK21zZ2lkICJSZXBvc2l0b3J5IgorbXNnc3RyICLOkc+Azr/OuM61z4TOrs+BzrnOvyIKKworIzogZ2l0LWd1aS5zaDoxODYxCittc2dpZCAiRWRpdCIKK21zZ3N0ciAizpXPgM61zr7Otc+BzrPOsc+Dzq/OsSIKKworIzogZ2l0LWd1aS5zaDoxODYzIGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIs6azrvOrM60zr/PgiIKKworIzogZ2l0LWd1aS5zaDoxODY2IGxpYi9jaG9vc2VfcmV2LnRjbDo1NDgKK21zZ2lkICJDb21taXRAQG5vdW4iCittc2dzdHIgIs6lz4DOv86yzr/Ou86uQEBub3VuIgorCisjOiBnaXQtZ3VpLnNoOjE4NjkgbGliL21lcmdlLnRjbDoxMjAgbGliL21lcmdlLnRjbDoxNDkgbGliL21lcmdlLnRjbDoxNjcKK21zZ2lkICJNZXJnZSIKK21zZ3N0ciAizqPPhc6zz4fPjs69zrXPhc+DzrciCisKKyM6IGdpdC1ndWkuc2g6MTg3MCBsaWIvY2hvb3NlX3Jldi50Y2w6NTU3Cittc2dpZCAiUmVtb3RlIgorbXNnc3RyICLOkc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OvyIKKworIzogZ2l0LWd1aS5zaDoxODc5Cittc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCittc2dzdHIgIs6gzrXPgc65zq7Os863z4POtyDOkc+Bz4fOtc6vz4nOvSDOpM+Bzq3Ph86/zr3PhM6xIM6azrvOrM60zr/PhSIKKworIzogZ2l0LWd1aS5zaDoxODgzCittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKK21zZ3N0ciAizqDOtc+BzrnOrs6zzrfPg863IM6Rz4HPh861zq/Pic69IM6azrvOrM60zr/PhS4uLiIKKworIzogZ2l0LWd1aS5zaDoxODg4Cittc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKK21zZ3N0ciAizpHPgM61zrnOus+Mzr3Ouc+DzrcgzpnPg8+Ezr/Pgc65zrrOv8+NIM6kz4HOrc+Hzr/Ovc+EzrEgzprOu86szrTOv8+FIgorCisjOiBnaXQtZ3VpLnNoOjE4OTIKK21zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgorbXNnc3RyICLOkc+AzrXOuc66z4zOvc65z4POtyDOmc+Dz4TOv8+BzrnOus6/z40gzozOu8+Jzr0gz4TPic69IM6azrvOrM60z4nOvSIKKworIzogZ2l0LWd1aS5zaDoxODk5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCittc2dzdHIgIs6gzrXPgc65zq7Os863z4POtyDOkc+Bz4fOtc6vz4nOvSDPhM6/z4UgJXMiCisKKyM6IGdpdC1ndWkuc2g6MTkwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCittc2dzdHIgIs6Rz4DOtc65zrrPjM69zrnPg863IM6Zz4PPhM6/z4HOuc66zr/PjSDPhM6/z4UgJXMiCisKKyM6IGdpdC1ndWkuc2g6MTkwNiBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKK21zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgorbXNnc3RyICLOo8+EzrHPhM65z4PPhM65zrrOrCDOks6sz4POt8+CIM6UzrXOtM6/zrzOrc69z4nOvSIKKworIzogZ2l0LWd1aS5zaDoxOTA5IGxpYi9kYXRhYmFzZS50Y2w6MzQKK21zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKK21zZ3N0ciAizqPPhc68z4DOr861z4POtyDOks6sz4POt8+CIM6UzrXOtM6/zrzOrc69z4nOvSIKKworIzogZ2l0LWd1aS5zaDoxOTEyCittc2dpZCAiVmVyaWZ5IERhdGFiYXNlIgorbXNnc3RyICLOlc+AzrHOu86uzrjOtc+Fz4POtyDOks6sz4POt8+CIM6UzrXOtM6/zrzOrc69z4nOvSIKKworIzogZ2l0LWd1aS5zaDoxOTE5IGdpdC1ndWkuc2g6MTkyMyBnaXQtZ3VpLnNoOjE5MjcgbGliL3Nob3J0Y3V0LnRjbDo3CisjOiBsaWIvc2hvcnRjdXQudGNsOjM5IGxpYi9zaG9ydGN1dC50Y2w6NzEKK21zZ2lkICJDcmVhdGUgRGVza3RvcCBJY29uIgorbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsSDOlc65zrrOv869zrnOtM6vzr/PhSDOlc+AzrnPhs6szr3Otc65zrHPgiDOlc+BzrPOsc+Dzq/Osc+CIgorCisjOiBnaXQtZ3VpLnNoOjE5MzIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxNzcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODUKK21zZ2lkICJRdWl0IgorbXNnc3RyICLOiM6+zr/OtM6/z4IiCisKKyM6IGdpdC1ndWkuc2g6MTkzOQorbXNnaWQgIlVuZG8iCittc2dzdHIgIs6Rzr3Osc6vz4HOtc+DzrciCisKKyM6IGdpdC1ndWkuc2g6MTk0MgorbXNnaWQgIlJlZG8iCittc2dzdHIgIs6ezrHOvc6sIgorCisjOiBnaXQtZ3VpLnNoOjE5NDYgZ2l0LWd1aS5zaDoyNDQzCittc2dpZCAiQ3V0IgorbXNnc3RyICLOkc+Azr/Ous6/z4DOriIKKworIzogZ2l0LWd1aS5zaDoxOTQ5IGdpdC1ndWkuc2g6MjQ0NiBnaXQtZ3VpLnNoOjI1MjAgZ2l0LWd1aS5zaDoyNjE0CisjOiBsaWIvY29uc29sZS50Y2w6NjkKK21zZ2lkICJDb3B5IgorbXNnc3RyICLOkc69z4TOuc6zz4HOsc+Gzq4iCisKKyM6IGdpdC1ndWkuc2g6MTk1MiBnaXQtZ3VpLnNoOjI0NDkKK21zZ2lkICJQYXN0ZSIKK21zZ3N0ciAizpXPgM65zrrPjM67zrvOt8+DzrciCisKKyM6IGdpdC1ndWkuc2g6MTk1NSBnaXQtZ3VpLnNoOjI0NTIgbGliL2JyYW5jaF9kZWxldGUudGNsOjI2CisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM4Cittc2dpZCAiRGVsZXRlIgorbXNnc3RyICLOlM65zrHOs8+BzrHPhs6uIgorCisjOiBnaXQtZ3VpLnNoOjE5NTkgZ2l0LWd1aS5zaDoyNDU2IGdpdC1ndWkuc2g6MjYxOCBsaWIvY29uc29sZS50Y2w6NzEKK21zZ2lkICJTZWxlY3QgQWxsIgorbXNnc3RyICLOlc+AzrnOu86/zrPOriDOjM67z4nOvSIKKworIzogZ2l0LWd1aS5zaDoxOTY4Cittc2dpZCAiQ3JlYXRlLi4uIgorbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsS4uLiIKKworIzogZ2l0LWd1aS5zaDoxOTc0Cittc2dpZCAiQ2hlY2tvdXQuLi4iCittc2dzdHIgIs6Vzr7Osc6zz4nOs86uLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE5ODAKK21zZ2lkICJSZW5hbWUuLi4iCittc2dzdHIgIs6czrXPhM6/zr3Ov868zrHPg86vzrEuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTk4NSBnaXQtZ3VpLnNoOjIwODUKK21zZ2lkICJEZWxldGUuLi4iCittc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MTk5MAorbXNnaWQgIlJlc2V0Li4uIgorbXNnc3RyICLOlc+AzrHOvc6xz4bOv8+BzqwuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjAwMiBnaXQtZ3VpLnNoOjIzODkKK21zZ2lkICJOZXcgQ29tbWl0IgorbXNnc3RyICLOnc6tzrEgzqXPgM6/zrLOv867zq4iCisKKyM6IGdpdC1ndWkuc2g6MjAxMCBnaXQtZ3VpLnNoOjIzOTYKK21zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKK21zZ3N0ciAizpTOuc+Mz4HOuM+Jz4POtyDOpM61zrvOtc+Fz4TOsc6vzrHPgiDOpc+Azr/Oss6/zrvOrs+CIgorCisjOiBnaXQtZ3VpLnNoOjIwMTkgZ2l0LWd1aS5zaDoyMzU2IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6OTkKK21zZ2lkICJSZXNjYW4iCittc2dzdHIgIs6Vz4DOsc69zrHOvc6vz4fOvc61z4XPg863IgorCisjOiBnaXQtZ3VpLnNoOjIwMjUKK21zZ2lkICJTdGFnZSBUbyBDb21taXQiCittc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Or863z4POtyDOoM+Bzr/PgiDOpc+Azr/Oss6/zrvOriIKKworIzogZ2l0LWd1aS5zaDoyMDMxCittc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCittc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Or863z4POtyDOkc67zrvOsc6zzrzOrc69z4nOvSDOkc+Bz4fOtc6vz4nOvSDOoM+Bzr/PgiDOpc+Azr/Oss6/zrvOriIKKworIzogZ2l0LWd1aS5zaDoyMDM3Cittc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAizpHPgM6/z4PPhM6xzrTOuc6/z4DOv86vzrfPg863IM6Rz4DPjCDOpc+Azr/Oss6/zrvOriIKKworIzogZ2l0LWd1aS5zaDoyMDQyIGxpYi9pbmRleC50Y2w6Mzk1Cittc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCittc2dzdHIgIs6Rzr3Osc6vz4HOtc+DzrcgzpHOu867zrHOs8+Ozr0iCisKKyM6IGdpdC1ndWkuc2g6MjA0OSBnaXQtZ3VpLnNoOjIzNjggZ2l0LWd1aS5zaDoyNDY3Cittc2dpZCAiU2lnbiBPZmYiCittc2dzdHIgIs6Rz4DOv8+Dz43Ovc60zrXPg863IgorCisjOiBnaXQtZ3VpLnNoOjIwNTMgZ2l0LWd1aS5zaDoyMzcyCittc2dpZCAiQ29tbWl0QEB2ZXJiIgorbXNnc3RyICLOpc+Azr/Oss6/zrvOrkBAdmVyYiIKKworIzogZ2l0LWd1aS5zaDoyMDY0Cittc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCittc2dzdHIgIs6kzr/PgM65zrrOriDOo8+FzrPPh8+Ozr3Otc+Fz4POty4uLiIKKworIzogZ2l0LWd1aS5zaDoyMDY5Cittc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCittc2dzdHIgIs6RzrrPjc+Bz4nPg863IM6jz4XOs8+Hz47Ovc61z4XPg863z4IuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjA4MQorbXNnaWQgIlB1c2guLi4iCittc2dzdHIgIs6PzrjOt8+DzrcuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjA5MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQxCisjLCBmdXp6eQorbXNnaWQgIkFwcGxlIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MjA5NSBnaXQtZ3VpLnNoOjIxMTcgbGliL2Fib3V0LnRjbDoxNAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvdXQgJXMiCittc2dzdHIgIs6gzrXPgc6vICVzIgorCisjOiBnaXQtZ3VpLnNoOjIwOTkKK21zZ2lkICJQcmVmZXJlbmNlcy4uLiIKK21zZ3N0ciAizqDPgc6/z4TOuc68zq7Pg861zrnPgi4uLiIKKworIzogZ2l0LWd1aS5zaDoyMTA3IGdpdC1ndWkuc2g6MjYzOQorbXNnaWQgIk9wdGlvbnMuLi4iCittc2dzdHIgIs6Vz4DOuc67zr/Os86tz4IuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjExMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3Cittc2dpZCAiSGVscCIKK21zZ3N0ciAizpLOv86uzrjOtc65zrEiCisKKyM6IGdpdC1ndWkuc2g6MjE1NAorbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgorbXNnc3RyICLOlM65zrHOtM65zrrPhM+FzrHOus6uIM6kzrXOus68zrfPgc6vz4nPg863IgorCisjOiBnaXQtZ3VpLnNoOjIyMzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKK21zZ3N0ciAizrrPgc6vz4POuc68zr86IM60zrUgzrLPgc6tzrjOt866zrUgzrcgzrTOuc6xzrTPgc6/zrzOrjogJXM6IM6UzrXOvSDPhc+AzqzPgc+HzrXOuSDPhM6/IM6xz4HPh861zq/OvyDOriDOvyDPhs6szrrOtc67zr/PgiIKKworIzogZ2l0LWd1aS5zaDoyMjcxCittc2dpZCAiQ3VycmVudCBCcmFuY2g6IgorbXNnc3RyICLOpM+Bzq3Ph8+Jzr0gzprOu86szrTOv8+COiIKKworIzogZ2l0LWd1aS5zaDoyMjkyCittc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKK21zZ3N0ciAizqPPhM6xzrTOuc6/z4DOv865zrfOvM6tzr3Otc+CIM6RzrvOu86xzrPOrc+CICjOmM6xIM6lz4DOv86yzrvOt864zr/Pjc69KSIKKworIzogZ2l0LWd1aS5zaDoyMzEyCittc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKK21zZ3N0ciAizpzOtyDOo8+EzrHOtM65zr/PgM6/zrnOt868zq3Ovc61z4IgzpHOu867zrHOs86tz4IiCisKKyM6IGdpdC1ndWkuc2g6MjM2MgorbXNnaWQgIlN0YWdlIENoYW5nZWQiCittc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Or863z4POtyDOkc67zrvOsc6zz47OvSIKKworIzogZ2l0LWd1aS5zaDoyMzc4IGxpYi90cmFuc3BvcnQudGNsOjkzIGxpYi90cmFuc3BvcnQudGNsOjE4MgorbXNnaWQgIlB1c2giCittc2dzdHIgIs6PzrjOt8+DzrciCisKKyM6IGdpdC1ndWkuc2g6MjQwOAorbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLOkc+Bz4fOuc66z4wgzpzOrs69z4XOvM6xIM6lz4DOv86yzr/Ou86uz4I6IgorCisjOiBnaXQtZ3VpLnNoOjI0MDkKK21zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAizpTOuc6/z4HOuM+JzrzOrc69zr8gzpzOrs69z4XOvM6xIM6lz4DOv86yzr/Ou86uz4I6IgorCisjOiBnaXQtZ3VpLnNoOjI0MTAKK21zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLOlM65zr/Pgc64z4nOvM6tzr3OvyDOkc+Bz4fOuc66z4wgzpzOrs69z4XOvM6xIM6lz4DOv86yzr/Ou86uz4I6IgorCisjOiBnaXQtZ3VpLnNoOjI0MTEKK21zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAizpTOuc6/z4HOuM+JzrzOrc69zr8gzpzOrs69z4XOvM6xIM6lz4DOv86yzr/Ou86uz4IgzqPPhc6zz4fPjs69zrXPhc+DzrfPgjoiCisKKyM6IGdpdC1ndWkuc2g6MjQxMgorbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAizpzOrs69z4XOvM6xIM6lz4DOv86yzr/Ou86uz4IgzqPPhc6zz4fPjs69zrXPhc+DzrfPgjoiCisKKyM6IGdpdC1ndWkuc2g6MjQxMworbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAizpzOrs69z4XOvM6xIM6lz4DOv86yzr/Ou86uz4I6IgorCisjOiBnaXQtZ3VpLnNoOjI0NTkgZ2l0LWd1aS5zaDoyNjIyIGxpYi9jb25zb2xlLnRjbDo3MworbXNnaWQgIkNvcHkgQWxsIgorbXNnc3RyICLOkc69z4TOuc6zz4HOsc+Gzq4gzozOu8+Jzr0iCisKKyM6IGdpdC1ndWkuc2g6MjQ4MyBsaWIvYmxhbWUudGNsOjEwNworbXNnaWQgIkZpbGU6IgorbXNnc3RyICLOkc+Bz4fOtc6vzr86IgorCisjOiBnaXQtZ3VpLnNoOjI1ODkKK21zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCittc2dzdHIgIs6Vz4bOsc+BzrzOv86zzq4vzpHOvc+EzrnPg8+Ez4HOv8+Gzq4gzprOv868zrzOsc+EzrnOv8+NIgorCisjOiBnaXQtZ3VpLnNoOjI1OTUKK21zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKK21zZ3N0ciAizqDPgc6/zrLOv867zq4gzqPPhM61zr3PjM+EzrXPgc6/z4UgzqDOu86xzrnPg86vzr/PhSIKKworIzogZ2l0LWd1aS5zaDoyNjAyCittc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCittc2dzdHIgIs6gz4HOv86yzr/Ou86uIM6Vz4XPgc+Nz4TOtc+Bzr/PhSDOoM67zrHOuc+Dzq/Ov8+FIgorCisjOiBnaXQtZ3VpLnNoOjI2MTAKK21zZ2lkICJSZWZyZXNoIgorbXNnc3RyICLOkc69zrHOvc6tz4nPg863IgorCisjOiBnaXQtZ3VpLnNoOjI2MzEKK21zZ2lkICJEZWNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIs6czrXOr8+Jz4POtyDOnM61zrPOrc64zr/Phc+CIM6Tz4HOsc68zrzOsc+Ezr/Pg861zrnPgc6sz4IiCisKKyM6IGdpdC1ndWkuc2g6MjYzNQorbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAizpHPjc6+zrfPg863IM6czrXOs86tzrjOv8+Fz4IgzpPPgc6xzrzOvM6xz4TOv8+DzrXOuc+BzqzPgiIKKworIzogZ2l0LWd1aS5zaDoyNjQ2Cittc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgorbXNnc3RyICLOkc+Azr/Pg8+EzrHOtM65zr/PgM6/zq/Ot8+DzrcgzprOv868zrzOsc+EzrnOv8+NIM6Rz4DPjCDOpc+Azr/Oss6/zrvOriIKKworIzogZ2l0LWd1aS5zaDoyNjQ4Cittc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgorbXNnc3RyICLOo8+EzrHOtM65zr/PgM6/zq/Ot8+DzrcgzprOv868zrzOsc+EzrnOv8+NIM6gz4HOv8+CIM6lz4DOv86yzr/Ou86uIgorCisjOiBnaXQtZ3VpLnNoOjI2NjcKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM6xz4HPh865zrrOv8+Azr/Or863z4POty4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKKyJcbiIKKyJUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHlcbiIKKyJnb2luZyB0byBiZSBpZ25vcmVkIGJ5IGFueSBHaXQgc3VicHJvY2VzcyBydW5cbiIKKyJieSAlczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIs6lz4DOrM+Bz4fOv8+Fzr0gz4DOuc64zrHOvc6sIM64zq3OvM6xz4TOsSDOvM61IM+Ezr8gz4DOtc+BzrnOss6szrvOu86/zr0uXG4iCisiXG4iCisizp/OuSDOtc6+zq7PgiDOvM61z4TOsc6yzrvOt8+Ezq3PgiDPgM61z4HOuc6yzqzOu867zr/Ovc+Ezr/PgiDOvM6szrvOu86/zr0gzrjOsVxuIgorIs6xzrPOvc6/zrfOuM6/z43OvSDOsc+Az4wgz4DOuc64zrHOvc6uIM61zrrPhM6tzrvOtc+Dzrcgz4XPgM6/zrTOuc61z4HOs86xz4POr86xz4IgR2l0XG4iCisizrHPgM+MIM+Ezr8gJXM6XG4iCisiXG4iCisKKyM6IGdpdC1ndWkuc2g6Mjc5MgorbXNnaWQgIiIKKyJcbiIKKyJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCisiVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgorbXNnc3RyICIiCisiXG4iCisizpHPhc+Ez4wgzr/Phs61zq/Ou861z4TOsc65IM+DzrUgzq3Ovc6xIM6zzr3Pic+Dz4TPjCDOuM6tzrzOsSDOvM61IM+Ezr9cbiIKKyLOtc66z4TOtc67zq3Pg865zrzOvyBUY2wgz4DOv8+FIM60zrnOsc69zq3OvM61z4TOsc65IM68zrUgz4TOvyBDeWd3aW4uIgorCisjOiBnaXQtZ3VpLnNoOjI3OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgorImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgorInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCisifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyLOiM69zrEgzrrOsc67z4wgz4XPgM6/zrrOsc+EzqzPg8+EzrHPhM6/IM6zzrnOsSDPhM6/ICVzXG4iCisizrXOr869zrHOuSDOtyDPhM6/z4DOv864zq3PhM63z4POtyDPhM65zrzPjs69IM6zzrnOsSDPhM65z4Igz4HPhc64zrzOr8+DzrXOuc+CXG4iCisidXNlci5uYW1lIM66zrHOuSB1c2VyLmVtYWlsIM+Dz4TOvyDPgM+Bzr/Pg8+Jz4DOuc66z4wgz4POsc+CXG4iCisizrHPgc+HzrXOr86/IH4vLmdpdGNvbmZpZyAuXG4iCisKKyM6IGxpYi9hYm91dC50Y2w6MjYKK21zZ2lkICJnaXQtZ3VpIC0gYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIEdpdC4iCittc2dzdHIgImdpdC1ndWkgLSDOrc69zrEgzrPPgc6xz4bOuc66z4wgz4DOtc+BzrnOss6szrvOu86/zr0gzrPOuc6xIM+Ezr8gR2l0LiIKKworIzogbGliL2JsYW1lLnRjbDo3NworbXNnaWQgIkZpbGUgVmlld2VyIgorbXNnc3RyICLOlc+GzrHPgc68zr/Os86uIM6gz4HOv86yzr/Ou86uz4IgzpHPgc+HzrXOr86/z4UiCisKKyM6IGxpYi9ibGFtZS50Y2w6ODEKK21zZ2lkICJDb21taXQ6IgorbXNnc3RyICLOpc+Azr/Oss6/zrvOrjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MjY0Cittc2dpZCAiQ29weSBDb21taXQiCittc2dzdHIgIs6Rzr3PhM65zrPPgc6xz4bOriDOpc+Azr/Oss6/zrvOrs+CIgorCisjOiBsaWIvYmxhbWUudGNsOjM4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgJXMuLi4iCittc2dzdHIgIs6Rzr3OrM6zzr3Pic+DzrcgJXMuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NDg4Cittc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM+Gz4zPgc+Ez4nPg863IM+Dz4fOv867zq/Pic69IM+AzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IgzrHOvc+EzrnOs8+BzrHPhs6uz4IvzrzOtc+EzrHOus6vzr3Ot8+DzrfPgi4uLiIKKworIzogbGliL2JsYW1lLnRjbDo1MDgKK21zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCittc2dzdHIgIs6zz4HOsc68zrzOrc+CIM+Dz4fOv867zrnOsc+DzrzOrc69zrXPgiIKKworIzogbGliL2JsYW1lLnRjbDo2ODkKK21zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDPhs+Mz4HPhM+Jz4POtyDPg8+Hzr/Ou86vz4nOvSDOsc+Bz4fOuc66zq7PgiDPhM6/z4DOv864zrXPg86vzrHPgi4uLiIKKworIzogbGliL2JsYW1lLnRjbDo2OTIKK21zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKK21zZ3N0ciAizojOs865zr3OtSDOv867zr/Ous67zq7Pgc+Jz4POtyDPhM6/z4Ugz4PPh86/zrvOuc6xz4POvM6/z40uIgorCisjOiBsaWIvYmxhbWUudGNsOjc0NgorbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKK21zZ3N0ciAizqbPjM+Bz4TPic+Dzrcgz4PPh86/zrvOr86/z4UuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODAyCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAizpTOt868zrnOv8+Fz4HOs8+Mz4I6IgorCisjOiBsaWIvYmxhbWUudGNsOjgwNgorbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIs6lz4DOv86yzr/Ou86tzrHPgjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6ODExCittc2dpZCAiT3JpZ2luYWwgRmlsZToiCittc2dzdHIgIs6Rz4HPh865zrrPjCDOkc+Bz4fOtc6vzr86IgorCisjOiBsaWIvYmxhbWUudGNsOjkyNQorbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgorbXNnc3RyICLOkc+Bz4fOuc66zqwgzpHPgM+MOiIKKworIzogbGliL2JsYW1lLnRjbDo5MzEKK21zZ2lkICJJbiBGaWxlOiIKK21zZ3N0ciAizqPPhM6/IM6Rz4HPh861zq/OvzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTM2Cittc2dpZCAiQ29waWVkIE9yIE1vdmVkIEhlcmUgQnk6IgorbXNnc3RyICLOkc69z4TOuc6zz4HOrM+GzrfOus61IM6uIM6czrXPhM6xzrrOuc69zq7OuM63zrrOtSDOlc60z44gzpHPgM+MOiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTQgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTkKK21zZ2lkICJDaGVja291dCBCcmFuY2giCittc2dzdHIgIs6Vzr7Osc6zz4nOs86uIM6azrvOrM60zr/PhSIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjMKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAizpXOvs6xzrPPic6zzq4iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI3IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNQorIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjMyIGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMCBsaWIvYnJvd3Nlci50Y2w6MjgyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUyMiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQzIGxpYi9tZXJnZS50Y2w6MTcxCisjOiBsaWIvb3B0aW9uLnRjbDoxMDMgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MiBsaWIvdHJhbnNwb3J0LnRjbDo5NworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAizpHOus+Nz4HPic+DzrciCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMyIGxpYi9icm93c2VyLnRjbDoyODcKK21zZ2lkICJSZXZpc2lvbiIKK21zZ3N0ciAizpHOvc6xzrjOtc+Oz4HOt8+DzrciCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM2IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2OSBsaWIvb3B0aW9uLnRjbDoyNDIKK21zZ2lkICJPcHRpb25zIgorbXNnc3RyICLOlc+AzrnOu86/zrPOrc+CIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTIKK21zZ2lkICJGZXRjaCBUcmFja2luZyBCcmFuY2giCittc2dzdHIgIs6Rzr3OrM66z4TOt8+DzrcgzprOu86szrTOv8+FIM6gzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ0Cittc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgorbXNnc3RyICLOkc+Azr/Ous+MzrvOu863z4POtyDOkc+Az4wgzqTOv8+AzrnOus+MIM6azrvOrM60zr8iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMgorbXNnaWQgIkNyZWF0ZSBCcmFuY2giCittc2dzdHIgIs6UzrfOvM65zr/Phc+BzrPOr86xIM6azrvOrM60zr/PhSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI3Cittc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCittc2dzdHIgIs6UzrfOvM65zr/Phc+BzrPOr86xIM6dzq3Ov8+FIM6azrvOrM60zr/PhSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzcxCittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQwCittc2dpZCAiQnJhbmNoIE5hbWUiCittc2dzdHIgIs6Mzr3Ov868zrEgzprOu86szrTOv8+FIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAizozOvc6/zrzOsToiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo1OAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaCBOYW1lIgorbXNnc3RyICLOo8+FzrzPhs+Jzr3Or86xIM6fzr3PjM68zrHPhM6/z4IgzprOu86szrTOv8+FIM6gzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2NgorbXNnaWQgIlN0YXJ0aW5nIFJldmlzaW9uIgorbXNnc3RyICLOkc+Bz4fOuc66zq4gzpHOvc6xzrjOtc+Oz4HOt8+DzrciCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgorbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgorbXNnc3RyICLOlc69zrfOvM6tz4HPic+DzrcgzqXPgM6sz4HPh86/zr3PhM6xIM6azrvOrM60zr/PhToiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQorIywgZnV6enkKK21zZ2lkICJObyIKK21zZ3N0ciAizozPh865IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODAKK21zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKK21zZ3N0ciAizqPPhc6zz4fPjs69zrXPhc+DzrcgzpXPgM65z4TOrM+Hz4XOvc+DzrfPgiDOnM+Mzr3OvyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTE0Cittc2dpZCAiUmVzZXQiCittc2dzdHIgIs6Vz4DOsc69zrHPhs6/z4HOrCIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Cittc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCittc2dzdHIgIs6Vzr7Osc6zz4nOs86uIM6czrXPhM6sIM+EzrcgzpTOt868zrnOv8+Fz4HOs86vzrEiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzEKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKK21zZ3N0ciAizqDOsc+BzrHOus6xzrvPjiDOtc+AzrnOu86tzr7PhM61IM6tzr3Osc69IM66zrvOrM60zr8gz4DOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgi4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCittc2dzdHIgIiIKKyLOnyDOus67zqzOtM6/z4Igz4DOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgiAlcyDOtM61zr0gzrXOr869zrHOuSDOus67zqzOtM6/z4Igz4DOv8+FIM6yz4HOr8+DzrrOtc+EzrHOuSDPg8+Ezr8gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gIgorIs6xz4DOv864zrXPhM6uz4HOuc6/LiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1MyBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6ODYKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIgorbXNnc3RyICLOoM6xz4HOsc66zrHOu8+OIM60z47Pg8+EzrUgzq3Ovc6xIM+Mzr3Ov868zrEgzrrOu86szrTOv8+FLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcycgzrTOtc69IM61zq/Ovc6xzrkgzrHPgM6/zrTOtc66z4TPjCDPjM69zr/OvM6xIM66zrvOrM60zr/PhS4iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNQorbXNnaWQgIkRlbGV0ZSBCcmFuY2giCittc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4gzprOu86szrTOv8+FIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjAKK21zZ2lkICJEZWxldGUgTG9jYWwgQnJhbmNoIgorbXNnc3RyICLOlM65zrHOs8+BzrHPhs6uIM6kzr/PgM65zrrOv8+NIM6azrvOrM60zr/PhSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM3Cittc2dpZCAiTG9jYWwgQnJhbmNoZXMiCittc2dzdHIgIs6kzr/PgM65zrrOv86vIM6azrvOrM60zr/OuSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUyCittc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCittc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4gzpzPjM69zr8gzpXOrM69IM6Vzq/Ovc6xzrkgzqPPhc6zz4fPic69zrXPhc68zq3Ovc6/IM6czrUiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1NAorbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgdGVzdC4pIgorbXNnc3RyICLOoM6szr3PhM6xICjOnM63IM60zrnOtc69zrXPgc6zzrfOuM61zq8gzrTOv866zrnOvM6uIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IuKSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKK21zZ3N0ciAizp/OuSDOtc6+zq7PgiDOus67zqzOtM6/zrkgzrTOtc69IM61zq/Ovc6xzrkgz4DOu86uz4HPic+CIM+Dz4XOs8+Hz4nOvc61z4XOvM6tzr3Ov865IM68zrUgz4TOvyAlczoiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUKK21zZ2lkICIiCisiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC4gXG4iCisiXG4iCisiIERlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorbXNnc3RyICIiCisizpcgzrHOvc6szrrPhM63z4POtyDOtM65zrXOs8+BzrHOvM68zq3Ovc+Jzr0gzrrOu86szrTPic69IM61zq/Ovc6xzrkgzrTPjc+DzrrOv867zrcuXG4iCisiXG4iCisizpTOuc6xzrPPgc6xz4bOriDPhM+Jzr0gzrXPgM65zrvOtc6zzrzOrc69z4nOvSDOus67zqzOtM+Jzr07IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyLOkc+Azr/PhM+Fz4fOr86xIM60zrnOsc6zz4HOsc+Gzq7PgiDOus67zqzOtM+Jzr06XG4iCisiJXMiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxNCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjIKK21zZ2lkICJSZW5hbWUgQnJhbmNoIgorbXNnc3RyICLOnM61z4TOv869zr/OvM6xz4POr86xIM6azrvOrM60zr/PhSIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjI2Cittc2dpZCAiUmVuYW1lIgorbXNnc3RyICLOnM61z4TOv869zr/OvM6xz4POr86xIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzYKK21zZ2lkICJCcmFuY2g6IgorbXNnc3RyICLOms67zqzOtM6/z4I6IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzkKK21zZ2lkICJOZXcgTmFtZToiCittc2dzdHIgIs6dzq3OvyDOjM69zr/OvM6xOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjc1Cittc2dpZCAiUGxlYXNlIHNlbGVjdCBhIGJyYW5jaCB0byByZW5hbWUuIgorbXNnc3RyICLOoM6xz4HOsc66zrHOu8+OIM61z4DOuc67zq3Ovs+EzrUgzrrOu86szrTOvyDPgM+Bzr/PgiDOvM61z4TOv869zr/OvM6xz4POr86xOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MTc5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLOnyDOms67zqzOtM6/z4IgJyVzJyDPhc+AzqzPgc+HzrXOuSDOrs60zrcuIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlbmFtZSAnJXMnLiIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOvM61z4TOv869zr/OvM6xz4POr86xz4IgJyVzJy4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoxNworbXNnaWQgIlN0YXJ0aW5nLi4uIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOlc66zrrOr869zrfPg863Li4uIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MjYKK21zZ2lkICJGaWxlIEJyb3dzZXIiCittc2dzdHIgIs6gzrXPgc65zrfOs863z4TOrs+CIM6Rz4HPh861zq/Pic69IgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTI2IGxpYi9icm93c2VyLnRjbDoxNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nICVzLi4uIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDPhs+Mz4HPhM+Jz4POtyAlcy4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE4NworIywgZnV6enkKK21zZ2lkICJbVXAgVG8gUGFyZW50XSIKK21zZ3N0ciAiW86gzqzOvc+JIM6gz4HOv8+CIM6Tzr/Ovc6tzrFdIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MjY3IGxpYi9icm93c2VyLnRjbDoyNzMKK21zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzIgorbXNnc3RyICLOoM61z4HOuc6uzrPOt8+DzrcgzpHPgc+HzrXOr8+Jzr0gzprOu86szrTOv8+FIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5ODcKK21zZ2lkICJCcm93c2UiCittc2dzdHIgIs6gzrXPgc65zq7Os863z4POtyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzIGZyb20gJXMiCittc2dzdHIgIs6Rzr3OrM66z4TOt8+DzrcgJXMgzrHPgM+MIM+Ezr8gJXMiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgorbXNnc3RyICLOus+Bzq/Pg865zrzOvzogzpTOtSDOvM+Az4zPgc61z4POtSDOvc6xIM61z4DOuc67z4XOuM61zq8gz4TOvyAlcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDAgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzEKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAizprOu861zq/Pg865zrzOvyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIs6fIM6azrvOrM60zr/PgiAnJXMnIM60zrXOvSDPhc+AzqzPgc+HzrXOuS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgorIlxuIgorIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCisiQSBtZXJnZSBpcyByZXF1aXJlZC4iCittc2dzdHIgIiIKKyLOnyDOms67zqzOtM6/z4IgJyVzJyDPhc+AzqzPgc+HzrXOuSDOrs60zrcuXG4iCisiXG4iCisizpTOtSDOs86vzr3Otc+EzrHOuSDPg8+FzrPPh8+Ozr3Otc+Fz4POtyDOtc+AzrnPhM6sz4fPhc69z4POrs+CIM+Ezr/PhSDPg8+Ezr8gJXMuXG4iCisizpHPgM6xzrnPhM61zq/PhM6xzrkgz4PPhc6zz4fPjs69zrXPhc+DzrcuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdlIHN0cmF0ZWd5ICclcycgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIs6XIM+Dz4TPgc6xz4TOt86zzrnOus6uIM6jz4XOs8+Hz47Ovc61z4XPg863z4IgJXMgzrTOtc69IM+Fz4DOv8+Dz4TOt8+Bzq/Ots61z4TOsc65LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM61zr3Ot868zq3Pgc+Jz4POt8+CICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI1MQorbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKK21zZ3N0ciAizpcgz4DOtc+BzrnOv8+Hzq4gz4PPhM6xzrTOuc6/z4DOv86vzrfPg863z4IgKM+Ezr8gzrXPhc+BzrXPhM6uz4HOuc6/KSDOtc6vzr3Osc65IM6uzrTOtyDOus67zrXOuc60z4nOvM6tzr3Oty4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjY2Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyLOlyDPhM61zrvOtc+Fz4TOsc6vzrEgzrrOsc+EzqzPg8+EzrHPg863IM+Azr/PhSDOsc69zrnPh869zrXPjc64zrfOus61IM60zrUgz4PPhc68z4bPic69zrXOryDOvM61IM+EzrfOvSDOus6xz4TOrM+Dz4TOsc+Dzrcgz4TOv8+FICIKKyLOsc+Azr/OuM61z4TOt8+Bzq/Ov8+FLlxuIgorIlxuIgorIs6azqzPgM6/zrnOvyDOrM67zrvOvyDPgM+Bz4zOs8+BzrHOvM68zrEgR2l0IM+Ez4HOv8+Azr/PgM6/zq/Ot8+DzrUgz4TOvyDOsc+Azr/OuM61z4TOrs+BzrnOvyDOsc+Az4wgz4TOt869IM+EzrXOu861z4XPhM6xzq/OsSAiCisizrHOvc6vz4fOvc61z4XPg863LiDOoM+Bzq3PgM61zrkgzr3OsSDOs86vzr3Otc65IM61z4DOsc69zrHOvc6vz4fOvc61z4XPg863IM+Az4HOuc69IM69zrEgzrHOu867zrHPh864zrXOryDOvyDPhM+Bzq3Ph8+Jzr0gzrrOu86szrTOv8+CLlxuIgorIlxuIgorIs6XIM61z4DOsc69zrHOvc6vz4fOvc61z4XPg863IM64zrEgzr7Otc66zrnOvc6uz4POtc65IM6xz4XPhM+MzrzOsc+EzrEgz4TPjs+BzrEuXG4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzIyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKK21zZ3N0ciAizpXOvc63zrzOrc+Bz4nPg863IM+GzrHOus6tzrvOv8+FIM61z4HOs86xz4POr86xz4Igz4POtSAnJXMnLi4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjMyMworbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgorbXNnc3RyICLOsc+Bz4fOtc6vzrEgzq3Ph86/z4XOvSDOtc6+zrHPh864zrXOryIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorbXNnc3RyICIiCisizojOs865zr3OtSDOsc66z43Pgc+Jz4POtyDOtc6+zrHOs8+JzrPOrs+CIM+Ezr/PhSAnJXMnICjOsc+AzrHOuc+EzrXOr8+EzrHOuSDPg8+FzrPPh8+Ozr3Otc+Fz4POtyDOtc+AzrnPgM6tzrTOv8+FIM6xz4HPh861zq/Ov8+FKS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzU0Cittc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCittc2dzdHIgIs6Rz4DOsc65z4TOtc6vz4TOsc65IM+Dz4XOs8+Hz47Ovc61z4XPg863IM61z4DOuc+Azq3OtM6/z4UgzrHPgc+HzrXOr86/z4UuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgorbXNnc3RyICLOoM6xz4HOsc68zr/Ovc6uIM+Dz4TOv869IM66zrvOrM60zr8gJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NDI5Cittc2dpZCAiIgorIllvdSBhcmUgbm8gbG9uZ2VyIG9uIGEgbG9jYWwgYnJhbmNoLlxuIgorIlxuIgorIklmIHlvdSB3YW50ZWQgdG8gYmUgb24gYSBicmFuY2gsIGNyZWF0ZSBvbmUgbm93IHN0YXJ0aW5nIGZyb20gJ1RoaXMgRGV0YWNoZWQgIgorIkNoZWNrb3V0Jy4iCittc2dzdHIgIiIKKyLOlM61IM6yz4HOr8+DzrrOtc+Dz4TOtSDPgM65zrEgz4POtSDPhM6/z4DOuc66z4wgzrrOu86szrTOvy5cbiIKKyJcbiIKKyLOkc69IM64zq3Ou86xz4TOtSDOvc6xIM6yz4HOr8+DzrrOtc+Dz4TOtSDPg861IM66zrvOrM60zr8sIM60zrfOvM65zr/Phc+BzrPOrs+Dz4TOtSDOrc69zrHOvSDPhM+Oz4HOsSDOsc+Bz4fOr862zr/Ovc+EzrHPgiDOsc+Az4wgJ1RoaXMgIgorIkRldGFjaGVkIENoZWNrb3V0Jy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NDQ2IGxpYi9jaGVja291dF9vcC50Y2w6NDUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCittc2dzdHIgIs6IzrPOuc69zrUgzrXOvs6xzrPPic6zzq4gz4TOv8+FICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0dGluZyAnJXMnIHRvICclcycgd2lsbCBsb3NlIHRoZSBmb2xsb3dpbmcgY29tbWl0czoiCittc2dzdHIgIs6XIM61z4DOsc69zrHPhs6/z4HOrCAnJXMnIM+Dz4TOvyAnJXMnIM64zrEgz4fOrM+DzrXOuSDPhM65z4IgzrXOvs6uz4Igz4XPgM6/zrLOv867zq3PgjoiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAwCittc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKK21zZ3N0ciAizpcgzrHOvc6szrrPhM63z4POtyDPh86xzrzOrc69z4nOvSDPhc+Azr/Oss6/zrvPjs69IM68z4DOv8+BzrXOryDOvc6xIM61zq/Ovc6xzrkgzrTPjc+DzrrOv867zrcuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICclcyc/IgorbXNnc3RyICLOlc+AzrHOvc6xz4bOv8+BzqwgJyVzJzsiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTEwIGxpYi9tZXJnZS50Y2w6MTYzCittc2dpZCAiVmlzdWFsaXplIgorbXNnc3RyICLOkc+AzrXOuc66z4zOvc65z4POtyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHNldCBjdXJyZW50IGJyYW5jaC5cbiIKKyJcbiIKKyJUaGlzIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG9ubHkgcGFydGlhbGx5IHN3aXRjaGVkLiAgV2Ugc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgIgorInlvdXIgZmlsZXMsIGJ1dCBmYWlsZWQgdG8gdXBkYXRlIGFuIGludGVybmFsIEdpdCBmaWxlLlxuIgorIlxuIgorIlRoaXMgc2hvdWxkIG5vdCBoYXZlIG9jY3VycmVkLiAgJXMgd2lsbCBub3cgY2xvc2UgYW5kIGdpdmUgdXAuIgorbXNnc3RyICIiCisizpHPgM6/z4TPhc+Hzq/OsSDOv8+BzrnPg868zr/PjSDPhM+Bzq3Ph86/zr3PhM6/z4IgzrrOu86szrTOv8+FLlxuIgorIlxuIgorIs6Rz4XPhM+Mz4Igzr8gz4bOrM66zrXOu86/z4IgzrXPgc6zzrHPg86vzrHPgiDOtc6vzr3Osc65IM68z4zOvc6/IM61zr0gzrzOrc+BzrXOuSDOtc+AzrnOu861zrPOvM6tzr3Ov8+CLiAnzpXOs865zr3OtSDOtc+AzrnPhM+Fz4fOrs+CICIKKyLOtc69zrfOvM6tz4HPic+Dzrcgz4TPic69IM6xz4HPh861zq/Pic69IM+DzrHPgiwgzrHOu867zqwgzrHPgM6tz4TPhc+HzrUgzrcgzrXOvc63zrzOrc+Bz4nPg863IM61zr3PjM+CIM61z4PPic+EzrXPgc65zrrOv8+NIM6xz4HPh861zq/Ov8+FICIKKyLPhM6/z4UgR2l0LlxuIgorIlxuIgorIs6Rz4XPhM+MIM60zrUgzrjOsSDOrc+Az4HOtc+AzrUgzr3OsSDPg8+FzrzOss61zq8uIM6kzr8gJXMgzrjOsSDOus67zrXOr8+DzrXOuSDOus6xzrkgzrjOsSDOtc6zzrrOsc+EzrHOu861zq/PiM61zrkgz4TPjs+BzrEuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjM5Cittc2dpZCAiU2VsZWN0IgorbXNnc3RyICLOlc+AzrnOu86/zrPOriIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo1MworbXNnaWQgIkZvbnQgRmFtaWx5IgorbXNnc3RyICLOn865zrrOv86zzq3Ovc61zrnOsSDOk8+BzrHOvM68zrHPhM6/z4POtc65z4HOrM+CIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjc0Cittc2dpZCAiRm9udCBTaXplIgorbXNnc3RyICLOnM6tzrPOtc64zr/PgiDOk8+BzrHOvM68zrHPhM6/z4POtc65z4HOrM+CIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjkxCittc2dpZCAiRm9udCBFeGFtcGxlIgorbXNnc3RyICLOoM6xz4HOrM60zrXOuc6zzrzOsSDOk8+BzrHOvM68zrHPhM6/z4POtc65z4HOrM+CIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwMworbXNnaWQgIiIKKyJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKKyJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorbXNnc3RyICIiCisizpHPhc+Ez4wgzrXOr869zrHOuSDOrc69zrEgz4DOsc+BzqzOtM61zrnOs868zrEgzrrOtc65zrzOrc69zr/PhS5cbiIKKyLOkc69IM+DzrHPgiDOsc+Bzq3Pg861zrkgzrHPhc+Ez4wgz4TOvyDOus61zq/OvM61zr3OvywgzrzPgM6/z4HOtc6vIM69zrEgzrPOr869zrXOuSDOtM65zrrPjCDPg86xz4IuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjI4Cittc2dpZCAiR2l0IEd1aSIKK21zZ3N0ciAizpPPgc6xz4bOuc66z4wgzqDOtc+BzrnOss6szrvOu86/zr0gR2l0IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzc2Cittc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgorbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsSDOnc6tzr/PhSDOkc+Azr/OuM61z4TOt8+Bzq/Ov8+FIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3Cittc2dpZCAiTmV3Li4uIgorbXNnc3RyICLOnc6tzr8uLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjAKK21zZ2lkICJDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICLOms67z4nOvc6/z4DOv86vzrfPg863IM6lz4DOrM+Bz4fOv869z4TOv8+CIM6Rz4DOv864zrXPhM63z4HOr86/z4UiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwCittc2dpZCAiQ2xvbmUuLi4iCittc2dzdHIgIs6azrvPic69zr/PgM6/zq/Ot8+DzrcuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTc2Cittc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICLOhs69zr/Ouc6zzrzOsSDOpc+AzqzPgc+Hzr/Ovc+Ezr/PgiDOkc+Azr/OuM61z4TOt8+Bzq/Ov8+FIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMworbXNnaWQgIk9wZW4uLi4iCittc2dzdHIgIs6Gzr3Ov865zrPOvM6xLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyNgorbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCittc2dzdHIgIs6gz4HPjM+Dz4bOsc+EzrEgzpHPgM6/zrjOtc+Ezq7Pgc65zrEiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTMyCittc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCittc2dzdHIgIs6Gzr3Ov865zrPOvM6xIM6gz4HPjM+Dz4bOsc+Ezr/PhSDOkc+Azr/OuM61z4TOt8+Bzq/Ov8+FOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyOTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzEwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOtM63zrzOuc6/z4XPgc6zzq/Osc+CIM6xz4DOv864zrXPhM63z4HOr86/z4UgJXM6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OAorbXNnaWQgIkRpcmVjdG9yeToiCittc2dzdHIgIs6mzqzOus61zrvOv8+COiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MTIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MzcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxMQorbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgorbXNnc3RyICLOkc+Azr/OuM61z4TOrs+BzrnOvyBHaXQiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDM3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAizp8gzqbOrM66zrXOu86/z4IgJyVzJyDPhc+AzqzPgc+HzrXOuSDOrs60zrcuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZpbGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLOpM6/IM6xz4HPh861zq/OvyAlcyDPhc+AzqzPgc+HzrXOuSDOrs60zrcuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ1NQorbXNnaWQgIkNsb25lIgorbXNnc3RyICLOms67z47Ovc6/z4IiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDY4CisjLCBmdXp6eQorbXNnaWQgIlVSTDoiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODkKK21zZ2lkICJDbG9uZSBUeXBlOiIKK21zZ3N0ciAizqTPjc+Azr/PgiDOms67z47Ovc6/z4U6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NQorbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKK21zZ3N0ciAizqTPhc+AzrnOus+MICjOpM6xz4fPjSwgzpfOvM65Lc6gzrvOtc6/zr3OrM62zr/OvSwgSGFyZGxpbmtzKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDEKK21zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCittc2dzdHIgIs6gzrvOrs+BzrXPgiDOkc69z4TOr86zz4HOsc+Gzr8gKM6gzrnOvyDOsc+BzrPPjCwgzqDOu861zr/Ovc6szrbOv869IM6Rzr3PhM6vzrPPgc6xz4bOvyDOkc+Dz4bOsc67zrXOr86xz4IpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwNworbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgorbXNnc3RyICLOms6/zrnOvc6uIM6nz4HOrs+DzrcgKM6kzrHPh8+Nz4TOsc+Ezr8sIM6UzrUgzqPPhc69zrnPg8+EzqzPhM6xzrksIM6azrHOvc6tzr3OsSDOkc69z4TOr86zz4HOsc+Gzr8gzpHPg8+GzrHOu861zq/Osc+CKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NDMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzM2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODA2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOsc+Azr/OuM61z4TOrs+BzrnOvyBHaXQ6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU3OQorbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiXCLOpM+Fz4DOuc66z4xcIiDOtM65zrHOuM6tz4POuc68zr8gzrzPjM69zr8gzrPOuc6xIM+Ezr/PgM65zrrPjCDOsc+Azr/OuM61z4TOrs+BzrnOvy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTgzCittc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiXCLOms6/zrnOvc6uIM6nz4HOrs+DzrdcIiDOtM65zrHOuM6tz4POuc68zrcgzrzPjM69zr8gzrPOuc6xIM+Ezr/PgM65zrrPjCDOsc+Azr/OuM61z4TOrs+BzrnOvy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjA0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLOlyDOpM6/z4DOv864zrXPg86vzrEgJXMgz4XPgM6sz4HPh861zrkgzq7OtM63LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTUKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDPgc+NzrjOvM65z4POt8+CIM+AzrfOs86uz4IiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI3Cittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrrOsc+EzrHOvM6tz4TPgc63z4POtyDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI4CisjLCBmdXp6eQorbXNnaWQgImJ1Y2tldHMiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHOvc+EzrnOs8+BzrHPhs6uz4IgzrHOvc+EzrnOus61zrnOvM6tzr3Pic69L8+AzrvOt8+Bzr/Phs6/z4HOuc+Ozr0vzrXOvc69zrHOu86xzrrPhM65zrrPjs69OiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgorbXNnc3RyICLOpM6vz4DOv8+EzrEgz4DPgc6/z4IgzrrOu8+Jzr3Ov8+Azr/Or863z4POtyDOsc+Az4wgz4TOvyAlcy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjkwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNgorbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKK21zZ3N0ciAizp8gzrrOu86szrTOv8+CICdtYXN0ZXInIM60zrXOvSDOrc+HzrXOuSDOsc+Bz4fOuc66zr/PgM6/zrnOt864zrXOry4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzCittc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKK21zZ3N0ciAiSGFyZGxpbmtzIM68zrcgzrTOuc6xzrjOrc+DzrnOvM6xLiDOnM61z4TOrM+Az4TPic+Dzrcgz4POtSDOsc69z4TOuc6zz4HOsc+Gzq4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrrOu8+Jzr3Ov8+Azr/Or863z4POtyDOsc+Az4wgz4TOvyAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDYKK21zZ2lkICJDb3B5aW5nIG9iamVjdHMiCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM6xzr3PhM65zrPPgc6xz4bOriDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ3CisjLCBmdXp6eQorbXNnaWQgIktpQiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHOvc+EzrnOs8+BzrHPhs6uz4IgzrHOvc+EzrnOus61zrnOvM6tzr3Ov8+FOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODEKK21zZ2lkICJMaW5raW5nIG9iamVjdHMiCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM+Dz43Ovc60zrXPg863IM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODIKK21zZ2lkICJvYmplY3RzIgorbXNnc3RyICLOsc69z4TOuc66zrXOr868zrXOvc6xIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIGhhcmRsaW5rIM6xzr3PhM65zrrOtc65zrzOrc69zr/PhTogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODQ1Cittc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIs6UzrUgzrzPgM+Mz4HOtc+DzrUgzr3OsSDOs86vzr3Otc65IM6xzr3OrM66z4TOt8+DzrcgzrrOu86szrTPic69IM66zrHOuSDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0uIM6UzrXOr8+EzrUgz4TOt869IM6tzr7Ov860zr8gIgorIs66zr/Ovc+Dz4zOu86xz4IgzrPOuc6xIM67zrXPgM+Ezr/OvM6tz4HOtc65zrXPgi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU2Cittc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisizpTOtSDOvM+Az4zPgc61z4POtSDOvc6xIM6zzq/Ovc61zrkgzrHOvc6szrrPhM63z4POtyDOtc+EzrnOus61z4TPjs69LiDOlM61zq/PhM61IM+EzrfOvSDOrc6+zr/OtM6/IM66zr/Ovc+Dz4zOu86xz4IgzrPOuc6xICIKKyLOu861z4DPhM6/zrzOrc+BzrXOuc61z4IuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg4MAorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLOlM61IM68z4DPjM+BzrXPg861IM69zrEgzrPOr869zrXOuSDOus6xzrjOv8+BzrnPg868z4zPgiDPhM6/z4UgSEVBRCAoz4DOsc+BzrHOus67zrHOtM65zr/PjSkuIM6UzrXOr8+EzrUgz4TOt869IM6tzr7Ov860zr8gIgorIs66zr/Ovc+Dz4zOu86xz4IgzrPOuc6xICIKKyLOu861z4DPhM6/zrzOrc+BzrXOuc61z4IuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM61zrrOus6xzrjOrM+BzrnPg863z4IgJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODk1Cittc2dpZCAiQ2xvbmUgZmFpbGVkLiIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOus67z4nOvc6/z4DOv86vzrfPg863z4IuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgorbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKK21zZ3N0ciAizpTOtc69IM6tzrPOuc69zrUgzrHOvc6szrrPhM63z4POtyDPgM+Bzr/Otc+AzrnOu861zrPOvM6tzr3Ov8+FIM66zrvOrM60zr/PhS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTEzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgorbXNnc3RyICLOlM61IM68z4DPjM+BzrXPg861IM69zrEgzrXPgM65zrvPhc64zrXOryDPhM6/ICVzIM+Jz4Igz4XPgM6/zrLOv867zq4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNQorbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsSDPhs6xzrrOrc67zr/PhSDOtc+BzrPOsc+Dzq/Osc+CIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNiBsaWIvaW5kZXgudGNsOjY1IGxpYi9pbmRleC50Y2w6MTI3CisjOiBsaWIvaW5kZXgudGNsOjE5MworbXNnaWQgImZpbGVzIgorbXNnc3RyICLOsc+Bz4fOtc6vzrEiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTU1Cittc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCittc2dzdHIgIs6XIM6xz4HPh865zrrOriDOtc6+zrHOs8+JzrPOriDOsc+Bz4fOtc6vzr/PhSDOsc+Azq3PhM+Fz4fOtS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTcxCittc2dpZCAiT3BlbiIKK21zZ3N0ciAizobOvc6/zrnOs868zrEiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgxCittc2dpZCAiUmVwb3NpdG9yeToiCittc2dzdHIgIs6Rz4DOv864zrXPhM6uz4HOuc6/OiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDMxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCittc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgzrHOvc6/zq/Os868zrHPhM6/z4IgzrHPgM6/zrjOtc+EzrfPgc6vzr/PhSAlczoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MworIywgZnV6enkKK21zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgorbXNnc3RyICLOkc+Azr/Pg8+Fzr3OtM61zrTOtc68zq3Ovc63IM6Vzr7Osc6zz4nOs86uIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKK21zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKK21zZ3N0ciAizojOus+Gz4HOsc+DzrcgzpHOvc6xzrjOtc+Oz4HOt8+DzrfPgjoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NAorbXNnaWQgIkxvY2FsIEJyYW5jaCIKK21zZ3N0ciAizqTOv8+AzrnOus+Mz4IgzprOu86szrTOv8+CIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzkKK21zZ2lkICJUcmFja2luZyBCcmFuY2giCittc2dzdHIgIs6azrvOrM60zr/PgiDOoM6xz4HOsc66zr/Ou86/z43OuM63z4POt8+CIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODQgbGliL2Nob29zZV9yZXYudGNsOjUzOAorbXNnaWQgIlRhZyIKK21zZ3N0ciAizpXPhM65zrrOrc+EzrEiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAizpzOtyDOrc6zzrrPhc+BzrcgzrHOvc6xzrjOtc+Oz4HOt8+Dzrc6ICVzIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzM4Cittc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgorbXNnc3RyICLOlM61zr0gzq3Ph861zrkgzrXPgM65zrvOtc6zzrXOryDOsc69zrHOuM61z47Pgc63z4POty4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDYKK21zZ2lkICJSZXZpc2lvbiBleHByZXNzaW9uIGlzIGVtcHR5LiIKK21zZ3N0ciAizpcgzq3Ous+Gz4HOsc+DzrcgzrHOvc6xzrjOtc+Oz4HOt8+DzrfPgiDOtc6vzr3Osc65IM66zrXOvc6uLiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjUzMQorbXNnaWQgIlVwZGF0ZWQiCittc2dzdHIgIs6Vzr3Ot868zrXPgc+JzrzOrc69zr8iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTkKKyMsIGZ1enp5Cittc2dpZCAiVVJMIgorbXNnc3RyICIiCisKKyM6IGxpYi9jb21taXQudGNsOjkKK21zZ2lkICIiCisiVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKKyJcbiIKKyJZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgIgorInRvIGFtZW5kLlxuIgorbXNnc3RyICIiCisizpTOtc69IM+Fz4DOrM+Bz4fOtc65IM66zqzPhM65IM+Az4HOv8+CIM60zrnPjM+BzrjPic+DzrcuXG4iCisiXG4iCisizqDPgc+MzrrOtc65z4TOsc65IM69zrEgzrTOt868zrnOv8+Fz4HOs86uz4POtc+EzrUgz4TOt869IM6xz4HPh865zrrOriDPhc+Azr/Oss6/zrvOri4gzpTOtc69IM+Fz4DOrM+Bz4fOtc65IM+Fz4DOv86yzr/Ou86uIM+Az4HOuc69IM6xz4DPjCAiCisizrHPhc+Ezq4gzrPOuc6xIM69zrEgzrTOuc6/z4HOuM+Oz4POtc+EzrUuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4Cittc2dpZCAiIgorIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgorIlxuIgorIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCisiY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKKyJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorbXNnc3RyICIiCisizpTOtSDOs86vzr3Otc+EzrHOuSDOtM65z4zPgc64z4nPg863IM66zrHOuM+Oz4Igz4PPhc6zz4fPic69zrXPjc61z4TOtS5cbiIKKyJcbiIKKyLOks+Bzq/Pg866zrXPg8+EzrUgz4PPhM6/IM68zq3Pg86/IM68zrnOsc+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4Igz4DOv8+FIM60zrXOvSDOrc+HzrXOuSDOv867zr/Ous67zrfPgc+JzrjOtc6vLiDOlM61IM68z4DOv8+BzrXOr8+EzrUgzr3OsSAiCisizrTOuc6/z4HOuM+Oz4POtc+EzrUgz4TOt869IM+Az4HOv863zrPOv8+NzrzOtc69zrcgz4XPgM6/zrLOv867zq4gzrXOus+Ez4zPgiDOtc6szr0gzrHOus+Fz4HPjs+DzrXPhM61IM+EzrfOvSDPhM+Bzq3Ph86/z4XPg86xIM61zr3Orc+BzrPOtc65zrEgIgorIs+Dz4XOs8+Hz47Ovc61z4XPg863z4IuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjQ5Cittc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgorbXNnc3RyICLOo8+GzqzOu868zrEgz4bPjM+Bz4TPic+DzrfPgiDOtM61zrTOv868zq3Ovc+Jzr0gz4XPgM6/zrLOv867zq7PgiDPgM+Bzr/PgiDOtM65z4zPgc64z4nPg863OiIKKworIzogbGliL2NvbW1pdC50Y2w6NzYKK21zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM6xzr3OrM66z4TOt8+DzrfPgiDPhM63z4Igz4TOsc+Fz4TPjM+EzrfPhM6sz4Igz4POsc+COiIKKworIzogbGliL2NvbW1pdC50Y2w6ODEKK21zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgorbXNnc3RyICLOnM63IM6tzrPOus+Fz4HOvyBHSVRfQ09NTUlUVEVSX0lERU5UOiIKKworIzogbGliL2NvbW1pdC50Y2w6MTMzCittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhbm90aGVyIGNvbW1pdCBjYW4gYmUgY3JlYXRlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIs6XIM+EzrXOu861z4XPhM6xzq/OsSDOus6xz4TOrM+Dz4TOsc+Dzrcgz4DOv8+FIM6xzr3Ouc+Hzr3Otc+NzrjOt866zrUgzrTOtSDPg8+FzrzPhs+Jzr3Otc6vIM68zrUgz4TOt869IM66zrHPhM6sz4PPhM6xz4POtyDPhM6/z4UgIgorIs6xz4DOv864zrXPhM63z4HOr86/z4UuXG4iCisiXG4iCisizprOrM+Azr/Ouc6/IM6szrvOu86/IM+Az4HPjM6zz4HOsc68zrzOsSBHaXQgz4TPgc6/z4DOv8+Azr/Or863z4POtSDPhM6/IM6xz4DOv864zrXPhM6uz4HOuc6/IM6xz4DPjCDPhM63zr0gz4TOtc67zrXPhc+EzrHOr86xICIKKyLOsc69zq/Ph869zrXPhc+DzrcuIM6gz4HOrc+AzrXOuSDOvc6xIM6zzq/Ovc61zrkgzrXPgM6xzr3Osc69zq/Ph869zrXPhc+Dzrcgz4DPgc65zr0gz4TOtyDOtM63zrzOuc6/z4XPgc6zzq/OsSDOvc6tzrHPgiDPhc+Azr/Oss6/zrvOrs+CLlxuIgorIlxuIgorIs6XIM61z4DOsc69zrHOvc6vz4fOvc61z4XPg863IM64zrEgzr7Otc66zrnOvc6uz4POtc65IM6xz4XPhM+MzrzOsc+EzrEgz4TPjs+BzrEuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE1NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgorIlxuIgorIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4gIFlvdSBtdXN0IHJlc29sdmUgdGhlbSBhbmQgc3RhZ2UgdGhlIGZpbGUgIgorImJlZm9yZSBjb21taXR0aW5nLlxuIgorbXNnc3RyICIiCisizqTOsSDOvM63IM+Dz4XOs8+Hz4nOvc61z4XOvM6tzr3OsSDOsc+Bz4fOtc6vzrEgzrTOtSDOvM+Azr/Pgc6/z43OvSDOvc6xIM+Fz4DOv86yzrvOt864zr/Pjc69LlxuIgorIlxuIgorIs6kzr8gzrHPgc+HzrXOr86/ICVzIM6tz4fOtc65IM+Dz4XOs866z4HOv8+Nz4POtc65z4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgi4gzqDPgc6tz4DOtc65IM69zrEgz4TOuc+CIM61z4DOuc67z43Pg861z4TOtSDOus6xzrkgzr3OsSAiCisiz4PPhM6xzrTOuc6/z4DOv865zq7Pg861z4TOtSDPhM6/IM6xz4HPh861zq/OvyDPgM+BzrnOvSDPhM63zr0gz4XPgM6/zrLOv867zq4uXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJVbmtub3duIGZpbGUgc3RhdGUgJXMgZGV0ZWN0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBjYW5ub3QgYmUgY29tbWl0dGVkIGJ5IHRoaXMgcHJvZ3JhbS5cbiIKK21zZ3N0ciAiIgorIs6GzrPOvc+Jz4PPhM63IM66zrHPhM6sz4PPhM6xz4POtyDOsc+Bz4fOtc6vzr/PhSAlcyDOsc69zrnPh869zrXPjc64zrfOus61LlxuIgorIlxuIgorIs6kzr8gzrHPgc+HzrXOr86/ICVzIM60zrUgzrzPgM6/z4HOtc6vIM69zrEgz4XPgM6/zrLOu863zrjOtc6vIM6xz4DPjCDOsc+Fz4TPjCDPhM6/IM+Az4HPjM6zz4HOsc68zrzOsS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTcwCittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIllvdSBtdXN0IHN0YWdlIGF0IGxlYXN0IDEgZmlsZSBiZWZvcmUgeW91IGNhbiBjb21taXQuXG4iCittc2dzdHIgIiIKKyLOlM61zr0gz4XPgM6sz4HPh86/z4XOvSDOsc67zrvOsc6zzq3PgiDPgM+Bzr/PgiDPhc+Azr/Oss6/zrvOri5cbiIKKyJcbiAiCisizqDPgc6tz4DOtc65IM69zrEgz4PPhM6xzrTOuc6/z4DOv865zq7Pg861z4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IDEgzrHPgc+HzrXOr86/IM+Az4HOuc69IM69zrEgzrrOrM69zrXPhM61IM+Fz4DOv86yzr/Ou86uLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODMKK21zZ2lkICIiCisiUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCisiXG4iCisiLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgorIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCisiLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgorbXNnc3RyICIiCisizqDOsc+BzrHOus6xzrvPjiDOtM+Oz4PPhM61IM6tzr3OsSDOvM6uzr3Phc68zrEgz4XPgM6/zrLOv867zq7Pgi5cbiIKKyJcbiIKKyLOiM69zrEgz4PPic+Dz4TPjCDOvM6uzr3Phc68zrEgz4XPgM6/zrLOv867zq7PgiDOrc+HzrXOuSDPhM63zr0gzrXOvs6uz4IgzrzOv8+Bz4bOrjpcbiIKKyJcbiIKKyItIM6gz4HPjs+EzrcgzrPPgc6xzrzOvM6uOiDOoM61z4HOuc6zz4HOsc+Gzq4gz4POtSDOvM6vzrEgz4DPgc+Mz4TOsc+Dzrcgz4TOv8+FIM+EzrkgzrrOrM69zrHPhM61LlxuIgorIi0gzpTOtc+Nz4TOtc+BzrcgzrPPgc6xzrzOvM6uOiDOms61zr3OrlxuIgorIi0gzqXPgM+MzrvOv865z4DOtc+CIM6zz4HOsc68zrzOrc+COiDOoM61z4HOuc6zz4HOsc+Gzq4gz4TOv8+FIM6zzrnOsc+Ezq8gzrHPhc+Ezq4gzrcgzrHOu867zrHOs86uIM61zq/Ovc6xzrkgz4PPic+Dz4TOri5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MjA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCittc2dzdHIgIs+Az4HOv861zrnOtM6/z4DOv86vzrfPg863OiBIIFRjbCDOtM61zr0gz4XPgM6/z4PPhM63z4HOr862zrXOuSDPhM63zr0gzrrPic60zrnOus6/z4DOv86vzrfPg863ICclcycuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMjEKK21zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrrOu86uz4POtyDPhM6/z4UgcHJlLWNvbW1pdCBob29rLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMzYKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKK21zZ3N0ciAizpcgz4XPgM6/zrLOv867zq4gzrHPgM6/z4HPgc6vz4bOuM63zrrOtSDOsc+Az4wgz4TOvyBwcmUtY29tbWl0IGhvb2suIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNTkKK21zZ2lkICJDYWxsaW5nIGNvbW1pdC1tc2cgaG9vay4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrrOu86uz4POtyDPhM6/z4UgY29tbWl0LW1zZyBob29rLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNzQKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAizpcgz4XPgM6/zrLOv867zq4gzrHPgM6/z4HPgc6vz4bOuM63zrrOtSDOsc+Az4wgz4TOvyBjb21taXQtbXNnIGhvb2suIgorCisjOiBsaWIvY29tbWl0LnRjbDoyODcKK21zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM+Fz4DOv86yzr/Ou86uIM+Ez4nOvSDOsc67zrvOsc6zz47OvS4uLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzAzCittc2dpZCAid3JpdGUtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICLPhM6/IHdyaXRlLXRyZWUgzrHPgM6tz4TPhc+HzrU6IgorCisjOiBsaWIvY29tbWl0LnRjbDozMDQgbGliL2NvbW1pdC50Y2w6MzQ4IGxpYi9jb21taXQudGNsOjM2OAorbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICLOlyDPhc+Azr/Oss6/zrvOriDOsc+Azq3PhM+Fz4fOtS4iCisKKyM6IGxpYi9jb21taXQudGNsOjMyMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCittc2dzdHIgIs6XIM+Fz4DOv86yzr/Ou86uICVzIM60zrXOr8+Hzr3Otc65IM66zrHPhM61z4PPhM+BzrHOvM68zq3Ovc63IgorCisjOiBsaWIvY29tbWl0LnRjbDozMjYKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyLOlM61zr0gz4XPgM6sz4HPh86/z4XOvSDOsc67zrvOsc6zzq3PgiDPgM+Bzr/PgiDPhc+Azr/Oss6/zrvOri5cbiIKKyJcbiIKKyLOlM61zr0gz4TPgc6/z4DOv8+Azr/Ouc6uzrjOt866zrHOvSDOsc+Bz4fOtc6vzrEgzrHPgM+MIM6xz4XPhM6uIM+EzrfOvSDPhc+Azr/Oss6/zrvOriDOus6xzrkgzrTOtc69IM6uz4TOsc69IM+Fz4DOv86yzr/Ou86uICIKKyLPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CLlxuIgorIlxuIgorIs6YzrEgzr7Otc66zrnOvc6uz4POtc65IM6xz4XPhM+MzrzOsc+EzrEgzrXPgM6xzr3Osc69zq/Ph869zrXPhc+Dzrcgz4TPjs+BzrEuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjMzMworbXNnaWQgIk5vIGNoYW5nZXMgdG8gY29tbWl0LiIKK21zZ3N0ciAizpTOtc69IM+Fz4DOrM+Bz4fOv8+Fzr0gzrHOu867zrHOs86tz4Igz4DPgc6/z4Igz4XPgM6/zrLOv867zq4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozNDcKK21zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICLPhM6/IGNvbW1pdC10cmVlIM6xz4DOrc+Ez4XPh861OiIKKworIzogbGliL2NvbW1pdC50Y2w6MzY3Cittc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgorbXNnc3RyICLPhM6/IHVwZGF0ZS1yZWYgzrHPgM6tz4TPhc+HzrU6IgorCisjOiBsaWIvY29tbWl0LnRjbDo0NTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCittc2dzdHIgIs6UzrfOvM65zr/Phc+BzrPOrs64zrfOus61IM+Fz4DOv86yzr/Ou86uICVzOiAlcyIKKworIzogbGliL2NvbnNvbGUudGNsOjU5Cittc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrXPgc6zzrHPg86vzrEuLi4gzqDOsc+BzrHOus6xzrvPjiDPgM61z4HOuc68zq3Ovc61z4TOtS4uLiIKKworIzogbGliL2NvbnNvbGUudGNsOjE4NgorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIs6Vz4DOuc+Ez4XPh86vzrEiCisKKyM6IGxpYi9jb25zb2xlLnRjbDoyMDAKK21zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCittc2dzdHIgIs6jz4bOrM67zrzOsTogzpcgzpXOvc+Ezr/Ou86uIM6Rz4DOrc+Ez4XPh861IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQzCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIs6Rz4HOuc64zrzPjM+CIM61zrvOtc+NzrjOtc+Bz4nOvSDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAizqfPjs+Bzr/PgiDOus6xz4TOtc65zrvOu863zrzOrc69zr/PgiDOsc+Az4wgzrXOu861z43OuM61z4HOsSDOsc69z4TOuc66zrXOr868zrXOvc6xIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ1Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLOkc+BzrnOuM68z4zPgiDPgM6xzrrOtc+EzrHPgc65z4POvM6tzr3Pic69IM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NgorbXNnaWQgIk51bWJlciBvZiBwYWNrcyIKK21zZ3N0ciAizpHPgc65zrjOvM+Mz4Igz4DOsc66zq3PhM+Jzr0iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIs6nz47Pgc6/z4IgzrrOsc+EzrXOuc67zrvOt868zq3Ovc6/z4IgzrHPgM+MIM+AzrHOus61z4TOsc+BzrnPg868zq3Ovc6xIM6xzr3PhM65zrrOtc6vzrzOtc69zrEiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKK21zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgorbXNnc3RyICLOoM6xzrrOtc+EzrHPgc65z4POvM6tzr3OsSDOsc69z4TOuc66zrXOr868zrXOvc6xIM6tz4TOv865zrzOsSDOs865zrEgzrrOu86szrTOtc68zrEiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDkKK21zZ2lkICJHYXJiYWdlIGZpbGVzIgorbXNnc3RyICLOhs+Hz4HOt8+Dz4TOsSDOsc+Bz4fOtc6vzrEiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NzIKK21zZ2lkICJDb21wcmVzc2luZyB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDPg8+FzrzPgM6vzrXPg863IM+EzrfPgiDOss6sz4POt8+CIM60zrXOtM6/zrzOrc69z4nOvSDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKK21zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKK21zZ3N0ciAiIgorIs6Tzq/Ovc61z4TOsc65IM61z4DOsc67zq7OuM61z4XPg863IM+EzrfPgiDOss6sz4POt8+CIM60zrXOtM6/zrzOrc69z4nOvSDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0gzrzOtSDOsc69z4TOuc66zrXOr868zrXOvc6xIGZzY2siCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MTA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKKyJcbiIKKyJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKKyJ0aGUgZGF0YWJhc2Ugd2hlbiBtb3JlIHRoYW4gJWkgbG9vc2Ugb2JqZWN0cyBleGlzdC5cbiIKKyJcbiIKKyJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKK21zZ3N0ciAiIgorIs6Rz4XPhM+MIM+Ezr8gzrHPgM6/zrjOtc+Ezq7Pgc65zr8gzq3Ph861zrkgzrHPhc+Ezq4gz4TOtyDPg8+EzrnOs868zq4gz4DOtc+Bzq/PgM6/z4UgJWkgzrXOu861z43OuM61z4HOsSDOsc69z4TOuc66zrXOr868zrXOvc6xLlxuIgorIlxuIgorIs6TzrnOsSDPhM63IM60zrnOsc+Ezq7Pgc63z4POtyDOss6tzrvPhM65z4PPhM+Jzr0gzrXPgM65zrTPjM+DzrXPic69IM+Dz4XOvc65z4PPhM6sz4TOsc65IM69zrEgz4PPhc68z4DOuc6tz4POtc+EzrUgz4TOtyDOss6sz4POtyAiCisizrTOtc60zr/OvM6tzr3Pic69IM+Mz4TOsc69IM+Fz4DOrM+Bz4fOv8+Fzr0gz4DOtc+BzrnPg8+Dz4zPhM61z4HOsSDOsc+Az4wgJWkgzrXOu861z43OuM61z4HOsSDOsc69z4TOuc66zrXOr868zrXOvc6xLlxuIgorIlxuIgorIs6jz4XOvM+Azq/Otc+Dzrcgz4TOt8+CIM6yzqzPg863z4IgzrTOtc60zr/OvM6tzr3Pic69IM+Ez47Pgc6xOyIKKworIzogbGliL2RhdGUudGNsOjI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKK21zZ3N0ciAizpzOtyDOrc6zzrrPhc+BzrcgzrfOvM61z4HOv868zrfOvc6vzrEgzrHPgM+MIM+Ezr8gR2l0OiAlcyIKKworIzogbGliL2RpZmYudGNsOjQyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgorIlxuIgorIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgorIlxuIgorIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKKyJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgorIlxuIgorIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgorInRoZSBzYW1lIHN0YXRlLiIKK21zZ3N0ciAiIgorIs6UzrXOvSDOsc69zrnPh869zrXPjc64zrfOus6xzr0gzrTOuc6xz4bOv8+Bzq3Pgi5cbiIKKyJcbiIKKyLOpM6/ICVzIM60zrXOvSDOrc+HzrXOuSDOsc67zrvOsc6zzq3Pgi4iCisiXG4iCisizpcgzrfOvM61z4HOv868zrfOvc6vzrEgz4TPgc6/z4DOv8+Azr/Or863z4POt8+CIM6xz4XPhM6/z40gz4TOv8+FIM6xz4HPh861zq/Ov8+FIM61zr3Ot868zrXPgc+OzrjOt866zrUgzrHPgM+MIM6szrvOu863IM61z4bOsc+BzrzOv86zzq4sICIKKyLOsc67zrvOrCDPhM6/IM+AzrXPgc65zrXPh8+MzrzOtc69zr8gz4TOv8+FIM6xz4HPh861zq/Ov8+FIM60zrXOvSDOrM67zrvOsc6+zrUuXG4iCisiXG4iCisizpjOsSDOvs61zrrOuc69zq7Pg861zrkgzrHPhc+Ez4zOvM6xz4TOsSDOtc+AzrHOvc6xzr3Or8+Hzr3Otc+Fz4POtyDOs865zrEgzr3OsSDOss+BzrXOuM6/z43OvSDOrM67zrvOsSDOsc+Bz4fOtc6vzrEgz4DOv8+FIM68z4DOv8+BzrXOryDOvc6xICIKKyLOss+Bzq/Pg866zr/Ovc+EzrHOuSDPg861IM6vzrTOuc6xIM66zrHPhM6sz4PPhM6xz4POty4iCisKKyM6IGxpYi9kaWZmLnRjbDo4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgz4bPjM+Bz4TPic+DzrcgzrTOuc6xz4bOv8+BzqzPgiDPhM6/z4UgJXMuLi4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMTQgbGliL2RpZmYudGNsOjE4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgorbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgz4DPgc6/zrLOv867zq4gz4TOv8+FICVzIgorCisjOiBsaWIvZGlmZi50Y2w6MTE1Cittc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKK21zZ3N0ciAizqPPhs6szrvOvM6xIM+Gz4zPgc+Ez4nPg863z4IgzrHPgc+HzrXOr86/z4U6IgorCisjOiBsaWIvZGlmZi50Y2w6MTIyCittc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgorbXNnc3RyICLOkc+Azr/OuM61z4TOrs+BzrnOvyBHaXQgKM64z4XOs86xz4TPgc65zrrPjCDOrc+BzrPOvykiCisKKyM6IGxpYi9kaWZmLnRjbDoxMzQKK21zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCittc2dzdHIgIiogzpTPhc6xzrTOuc66z4wgzrHPgc+HzrXOr86/ICjOvM63IM61zrzPhs6szr3Ouc+Dzrcgz4DOtc+BzrnOtc+Hzr/OvM6tzr3Ov8+FKS4iCisKKyM6IGxpYi9kaWZmLnRjbDoxODUKK21zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgorbXNnc3RyICLOo8+GzqzOu868zrEgz4bPjM+Bz4TPic+DzrfPgiDOtM65zrHPhs6/z4HOrM+COiIKKworIzogbGliL2RpZmYudGNsOjMwMworbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM6xz4DOv8+Dz4TOsc60zrnOv8+Azr/Or863z4POt8+CIM61z4DOuc67zrXOs868zq3Ovc6/z4UgzrrOv868zrzOsc+EzrnOv8+NLiIKKworIzogbGliL2RpZmYudGNsOjMxMAorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDPg8+EzrHOtM65zr/PgM6/zq/Ot8+DzrfPgiDOtc+AzrnOu861zrPOvM6tzr3Ov8+FIM66zr/OvM68zrHPhM65zr/PjS4iCisKKyM6IGxpYi9lcnJvci50Y2w6MjAgbGliL2Vycm9yLnRjbDoxMTQKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiz4PPhs6szrvOvM6xIgorCisjOiBsaWIvZXJyb3IudGNsOjM2Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAiz4DPgc6/zrXOuc60zr/PgM6/zq/Ot8+DzrciCisKKyM6IGxpYi9lcnJvci50Y2w6OTQKK21zZ2lkICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIgorbXNnc3RyICLOoM+Bzq3PgM61zrkgzr3OsSDOtM65zr/Pgc64z47Pg861z4TOtSDPhM6xIM+AzrHPgc6xz4DOrM69z4kgzrvOrM64zrcgz4DPgc65zr0gz4TOt869IM+Fz4DOv86yzr/Ou86uLiIKKworIzogbGliL2luZGV4LnRjbDo2Cittc2dpZCAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM6+zrXOus67zrXOuc60z47OvM6xz4TOv8+CIM+Ezr/PhSDOtc+Fz4HOtc+EzrfPgc6vzr/PhS4iCisKKyM6IGxpYi9pbmRleC50Y2w6MTUKK21zZ2lkICJJbmRleCBFcnJvciIKK21zZ3N0ciAizqPPhs6szrvOvM6xIM6Vz4XPgc61z4TOt8+Bzq/Ov8+FIgorCisjOiBsaWIvaW5kZXgudGNsOjIxCittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgorInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCittc2dzdHIgIiIKKyLOlyDOtc69zrfOvM6tz4HPic+Dzrcgz4TOv8+FIM61z4XPgc61z4TOt8+Bzq/Ov8+FIEdpdCDOsc+Azq3PhM+Fz4fOtS4gzpjOsSDOvs61zrrOuc69zq7Pg861zrkgzrHPhc+Ez4zOvM6xz4TOsSDOtc+AzrHOvc6xzr3Or8+Hzr3Otc+Fz4POtyAiCisizrPOuc6xIM61z4DOsc69zrHPg8+FzrPPh8+Bzr/Ovc65z4POvM+MIM+Ezr/PhSBnaXQtZ3VpLiIKKworIzogbGliL2luZGV4LnRjbDoyNworbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICLOo8+Fzr3Orc+HzrXOuc6xIgorCisjOiBsaWIvaW5kZXgudGNsOjMxCittc2dpZCAiVW5sb2NrIEluZGV4IgorbXNnc3RyICLOns61zrrOu861zq/OtM+JzrzOsSDOlc+Fz4HOtc+EzrfPgc6vzr/PhSIKKworIzogbGliL2luZGV4LnRjbDoyODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCittc2dzdHIgIs6Rz4DOv8+Dz4TOsc60zrnOv8+Azr/Or863z4POtyAlcyDOsc+Az4wgz4XPgM6/zrLOv867zq4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzEzCittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAizojPhM6/zrnOvM6/IM+Az4HOv8+CIM+Fz4DOv86yzr/Ou86uLiIKKworIzogbGliL2luZGV4LnRjbDozMjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIs6gz4HOv8+DzrjOrs66zrcgJXMiCisKKyM6IGxpYi9pbmRleC50Y2w6MzgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCittc2dzdHIgIs6Rzr3Osc6vz4HOtc+DzrcgzrHOu867zrHOs8+Ozr0gz4PPhM6/IM6xz4HPh861zq/OvyAlczsiCisKKyM6IGxpYi9pbmRleC50Y2w6MzgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgorbXNnc3RyICLOkc69zrHOr8+BzrXPg863IM6xzrvOu86xzrPPjs69IM+DzrUgzrHPhc+Ezqwgz4TOsSAlaSDOsc+Bz4fOtc6vzrE7IgorCisjOiBsaWIvaW5kZXgudGNsOjM5MQorbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKK21zZ3N0ciAiIgorIs6MzrvOtc+CIM6/zrkgzrzOtyDPg8+EzrHOtM65zr/PgM6/zrnOt868zq3Ovc61z4IgzrHOu867zrHOs86tz4IgzrjOsSDPh86xzrjOv8+Nzr0gzr/Pgc65z4PPhM65zrrOrCDOsc+Az4wgz4TOt869IM6xzr3Osc6vz4HOtc+DzrcuIgorCisjOiBsaWIvaW5kZXgudGNsOjM5NAorbXNnaWQgIkRvIE5vdGhpbmciCittc2dzdHIgIs6azrHOvM6vzrEgzpXOvc6tz4HOs861zrnOsSIKKworIzogbGliL21lcmdlLnRjbDoxMworbXNnaWQgIiIKKyJDYW5ub3QgbWVyZ2Ugd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhbnkgdHlwZSBvZiBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIs6UzrUgzrPOr869zrXPhM6xzrkgz4PPhc6zz4fPjs69zrXPhc+DzrcgzrrOsc64z47PgiDOtM65zr/Pgc64z47Ovc61z4TOtS5cbiIKKyJcbiIKKyLOoM+Bzq3PgM61zrkgzr3OsSDPhM61zrvOtc65z47Pg861z4TOtSDPhM63IM60zrnPjM+BzrjPic+DzrcgzrHPhc+Ezq7PgiDPhM63z4Igz4XPgM6/zrLOv867zq7PgiDPgM+BzrnOvSDOvc6xIM6+zrXOus65zr3Ors+DzrXPhM61ICIKKyLOv8+Azr/Ouc6xz4POtM6uz4DOv8+EzrUgzrzOv8+Bz4bOrs+CIM+Dz4XOs8+Hz47Ovc61z4XPg863LlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyLOlyDPhM61zrvOtc+Fz4TOsc6vzrEgzrrOsc+EzqzPg8+EzrHPg863IM+Azr/PhSDOsc69zrnPh869zrXPjc64zrfOus61IM60zrUgz4PPhc68z4bPic69zrXOryDOvM61IM+EzrfOvSDOus6xz4TOrM+Dz4TOsc+Dzrcgz4TOv8+FICIKKyLOsc+Azr/OuM61z4TOt8+Bzq/Ov8+FLlxuIgorIlxuIgorIs6azqzPgM6/zrnOvyDOrM67zrvOvyDPgM+Bz4zOs8+BzrHOvM68zrEgR2l0IM+Ez4HOv8+Azr/PgM6/zq/Ot8+DzrUgz4TOvyDOsc+Azr/OuM61z4TOrs+BzrnOvyDOsc+Az4wgz4TOt869IM+EzrXOu861z4XPhM6xzq/OsSAiCisizrHOvc6vz4fOvc61z4XPg863LiDOoM+Bzq3PgM61zrkgzr3OsSDOs86vzr3Otc65IM61z4DOsc69zrHOvc6vz4fOvc61z4XPg863IM+Az4HOuc69IM+EzrcgzrTOuc61zr3Orc+BzrPOtc65zrEgz4PPhc6zz4fPjs69zrXPhc+DzrfPgi5cbiIKKyJcbiIKKyLOlyDOtc+AzrHOvc6xzr3Or8+Hzr3Otc+Fz4POtyDOuM6xIM6+zrXOus65zr3Ors+DzrXOuSDOsc+Fz4TPjM68zrHPhM6xIM+Ez47Pgc6xLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgorIlxuIgorIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgorIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIs6Sz4HOr8+DzrrOtc+Dz4TOtSDPg8+Ezr8gzrzOrc+Dzr8gzrzOuc6xz4Igz4PPhc6zzrrPgc6/z4XPjM68zrXOvc63z4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgi5cbiIKKyJcbiIKKyLOpM6/IM6xz4HPh861zq/OvyAlcyDOrc+HzrXOuSDPg8+FzrPOus+Bzr/Pjc+DzrXOuc+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IuXG4iCisiXG4iCisizqDPgc6tz4DOtc65IM69zrEgz4TOuc+CIM61z4DOuc67z43Pg861z4TOtSwgzr3OsSDPg8+EzrHOtM65zr/PgM6/zrnOrs+DzrXPhM61IM+Ezr8gzrHPgc+HzrXOr86/LCDOus6xzrkgzr3OsSDOus6szr3Otc+EzrUgz4XPgM6/zrLOv867zq4gIgorIs6zzrnOsSDOvc6xIM6/zrvOv866zrvOt8+Bz47Pg861z4TOtSDPhM63zr0gz4TPgc6tz4fOv8+Fz4POsSDPg8+FzrPPh8+Ozr3Otc+Fz4POty4gzpzPjM69zr8gz4TPjM+EzrUgzrzPgM6/z4HOtc6vz4TOtSDOvc6xICIKKyLOvs61zrrOuc69zq7Pg861z4TOtSDOrM67zrvOtyDPg8+FzrPPh8+Ozr3Otc+Fz4POty5cbiIKKworIzogbGliL21lcmdlLnRjbDo1NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBpcyBtb2RpZmllZC5cbiIKKyJcbiIKKyJZb3Ugc2hvdWxkIGNvbXBsZXRlIHRoZSBjdXJyZW50IGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYSBtZXJnZS4gIERvaW5nIHNvICIKKyJ3aWxsIGhlbHAgeW91IGFib3J0IGEgZmFpbGVkIG1lcmdlLCBzaG91bGQgdGhlIG5lZWQgYXJpc2UuXG4iCittc2dzdHIgIiIKKyLOks+Bzq/Pg866zrXPg8+EzrUgz4PPhM6/IM68zq3Pg86/IM68zrnOsc+CIM6xzrvOu86xzrPOrs+CLlxuIgorIlxuIgorIs6kzr8gzrHPgc+HzrXOr86/ICVzIM6tz4fOtc65IM+Ez4HOv8+Azr/PgM6/zrnOt864zrXOry5cbiIKKyJcbiIKKyLOoM+Bzq3PgM61zrkgzr3OsSDOv867zr/Ous67zrfPgc+Oz4POtc+EzrUgz4TOt869IM+Ez4HOrc+Hzr/Phc+DzrEgz4PPhc6zz4fPjs69zrXPhc+Dzrcgz4DPgc65zr0gzr3OsSDOvs61zrrOuc69zq7Pg861z4TOtSDPg8+FzrPPh8+Ozr3Otc+Fz4POty4iCisiIM6Rz4XPhM+MIM6yzr/Ot864zqwgz4PPhM63zr0gzrHOus+Nz4HPic+DzrcgzrHPgM6/z4TPhc+HzrfOvM6tzr3Ot8+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IsIM61zqzOvSDPh8+BzrXOuc6xz4PPhM61zq8uXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiVzIM6xz4DPjCAlcyIKKworIzogbGliL21lcmdlLnRjbDoxMTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgz4PPhc6zz4fPjs69zrXPhc+Dzrcgz4TOv8+FICVzIM68zrUgz4TOvyAlcy4uLiIKKworIzogbGliL21lcmdlLnRjbDoxMzAKK21zZ2lkICJNZXJnZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiIKK21zZ3N0ciAizpcgz4PPhc6zz4fPjs69zrXPhc+Dzrcgzr/Ou86/zrrOu863z4HPjs64zrfOus61IM61z4DOuc+Ez4XPh8+Oz4IuIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMgorbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgorbXNnc3RyICLOlyDPg8+FzrPPh8+Ozr3Otc+Fz4POtyDOsc+Azq3PhM+Fz4fOtS4gzpHPgM6xzrnPhM61zq/PhM6xzrkgzrXPgM6vzrvPhc+Dzrcgz4PPhc6zzrrPgc6/z43Pg861z4nOvS4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTU3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2UgSW50byAlcyIKK21zZ3N0ciAizqPPhc6zz4fPjs69zrXPhc+DzrcgzrzOtSAlcyIKKworIzogbGliL21lcmdlLnRjbDoxNzYKK21zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKK21zZ3N0ciAizpHOvc6xzrjOtc+Oz4HOt8+DzrcgzqDPgc6/z4IgzqPPhc6zz4fPjs69zrXPhc+DzrciCisKKyM6IGxpYi9tZXJnZS50Y2w6MjExCittc2dpZCAiIgorIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuXG4iCittc2dzdHIgIiIKKyLOlM61IM6zzq/Ovc61z4TOsc65IM6xzrrPjc+Bz4nPg863IM66zrHOuM+Oz4IgzrTOuc6/z4HOuM+Ozr3Otc+EzrUuXG4iCisiXG4iCisizqDPgc6tz4DOtc65IM69zrEgz4TOtc67zrXOuc+Oz4POtc+EzrUgz4TOtyDOtM65z4zPgc64z4nPg863IM6xz4XPhM6uz4Igz4TOt8+CIM+Fz4DOv86yzr/Ou86uz4IuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjIxCittc2dpZCAiIgorIkFib3J0IG1lcmdlP1xuIgorIlxuIgorIkFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIlxuIgorIkNvbnRpbnVlIHdpdGggYWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2U/IgorbXNnc3RyICIiCisizpHOus+Nz4HPic+Dzrcgz4PPhc6zz4fPjs69zrXPhc+DzrfPgjtcbiIKKyJcbiIKKyLOlyDOsc66z43Pgc+Jz4POtyDPhM63z4Igz4TPgc6tz4fOv8+Fz4POsc+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IgzrjOsSDPgM+Bzr/Ous6xzrvOrc+DzrXOuSDOsc+Az47Ou861zrnOsSAqzp/Om86pzp0qIM+Ez4nOvSDOvM63ICIKKyLPhc+Azr/Oss61zrLOu863zrzOrc69z4nOvSDOsc67zrvOsc6zz47OvS5cbiIKKyJcbiIKKyLOnc6xIM+Az4HOv8+Hz4nPgc6uz4POtc65IM63IM6xzrrPjc+Bz4nPg863IM+EzrfPgiDPhM+Bzq3Ph86/z4XPg86xz4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgjsiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjI3Cittc2dpZCAiIgorIlJlc2V0IGNoYW5nZXM/XG4iCisiXG4iCisiUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIlxuIgorIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgorbXNnc3RyICIiCisizpXPgM6xzr3Osc+Gzr/Pgc6sIM6xzrvOu86xzrPPjs69O1xuIgorIlxuIgorIs6XIM61z4DOsc69zrHPhs6/z4HOrCDPhM+Jzr0gzrHOu867zrHOs8+Ozr0gzrjOsSDPgM+Bzr/Ous6xzrvOrc+DzrXOuSDOsc+Az47Ou861zrnOsSAqzp/Om86pzp0qIM+Ez4nOvSDOvM63IM+Fz4DOv86yzrXOss67zrfOvM6tzr3Pic69ICIKKyLOsc67zrvOsc6zz47OvS5cbiIKKyJcbiIKKyLOnc6xIM+Dz4XOvc61z4fOr8+DzrXOuSDOtyDOtc+AzrHOvc6xz4bOv8+Bzqwgz4TPic69IM+Ez4HOrc+Hzr/Phc+Dz4nOvSDOsc67zrvOsc6zz47OvTsiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM4Cittc2dpZCAiQWJvcnRpbmciCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM6xzrrPjc+Bz4nPg863IgorCisjOiBsaWIvbWVyZ2UudGNsOjIzOAorbXNnaWQgImZpbGVzIHJlc2V0IgorbXNnc3RyICLOsc+Bz4fOtc6vzrEgz4DOv8+FIM61z4DOsc69zrHPhs6tz4HOuM63zrrOsc69IgorCisjOiBsaWIvbWVyZ2UudGNsOjI2NQorbXNnaWQgIkFib3J0IGZhaWxlZC4iCittc2dzdHIgIs6XIM6xzrrPjc+Bz4nPg863IM6xz4DOrc+Ez4XPh861LiIKKworIzogbGliL21lcmdlLnRjbDoyNjcKK21zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCittc2dzdHIgIs6XIM6xzrrPjc+Bz4nPg863IM6xz4DOrc+Ez4XPh861LiDOiM+Ezr/Ouc68zr8uIgorCisjOiBsaWIvb3B0aW9uLnRjbDo5NQorbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCittc2dzdHIgIs6Vz4DOsc69zrHPhs6/z4HOrCDOoM+Bzr/Otc+AzrnOu86/zrPPjs69IgorCisjOiBsaWIvb3B0aW9uLnRjbDo5OQorbXNnaWQgIlNhdmUiCittc2dzdHIgIs6Rz4DOv864zq7Ous61z4XPg863IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyBSZXBvc2l0b3J5IgorbXNnc3RyICIlcyDOkc+Azr/OuM61z4TOrs+BzrnOvyIKKworIzogbGliL29wdGlvbi50Y2w6MTEwCittc2dpZCAiR2xvYmFsIChBbGwgUmVwb3NpdG9yaWVzKSIKK21zZ3N0ciAizp/Ou865zrrPjCAozozOu86xIM+EzrEgzpHPgM6/zrjOtc+Ezq7Pgc65zrEpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMTYKK21zZ2lkICJVc2VyIE5hbWUiCittc2dzdHIgIs6Mzr3Ov868zrEgzqfPgc6uz4PPhM63IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMTcKK21zZ2lkICJFbWFpbCBBZGRyZXNzIgorbXNnc3RyICLOlM65zrXPjc64z4XOvc+DzrcgRW1haWwiCisKKyM6IGxpYi9vcHRpb24udGNsOjExOQorbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgorbXNnc3RyICLOoM61z4HOr867zrfPiM63IM6lz4DOv86yzr/Ou8+Ozr0gzqPPhc6zz4fPjs69zrXPhc+DzrfPgiIKKworIzogbGliL29wdGlvbi50Y2w6MTIwCittc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgorbXNnc3RyICLOm861z4DPhM6/zrzOrc+BzrXOuc6xIM6jz4XOs8+Hz47Ovc61z4XPg863z4IiCisKKyM6IGxpYi9vcHRpb24udGNsOjEyMQorbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCittc2dzdHIgIs6gz4HOv86yzr/Ou86uIM6jz4TOsc+EzrnPg8+EzrnOus+Ozr0gzpTOuc6xz4bOv8+BzqzPgiDOnM61z4TOrCDOsc+Az4wgzqPPhc6zz4fPjs69zrXPhc+DzrciCisKKyM6IGxpYi9vcHRpb24udGNsOjEyMworbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCittc2dzdHIgIs6VzrzPgM65z4PPhM6/z4PPjc69zrcgzpfOvM61z4HOv868zrfOvc65z47OvSDOnM61z4TOsc+Ez4HOv8+Azq7PgiDOkc+Bz4fOtc6vz4nOvSIKKworIzogbGliL29wdGlvbi50Y2w6MTI0Cittc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgorbXNnc3RyICLOms67zqzOtM61zrzOsSDOms67zqzOtM+Jzr0gzqDOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgiDOms6xz4TOrCDOpM63zr0gzpHOvc6szrrPhM63z4POtyIKKworIzogbGliL29wdGlvbi50Y2w6MTI1Cittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoZXMiCittc2dzdHIgIs6jz4XOvM+Gz4nOvc6vzrEgzprOu86szrTPic69IM6gzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IiCisKKyM6IGxpYi9vcHRpb24udGNsOjEyNgorbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCittc2dzdHIgIs6Rz4HOuc64zrzPjM+CIM6Tz4HOsc68zrzPjs69IM6Vzr3Ovc6/zrnOv867zr/Os865zrrOv8+NIM6gzrvOsc65z4POr86/z4UgzpTOuc6xz4bOv8+BzqzPgiIKKworIzogbGliL29wdGlvbi50Y2w6MTI3Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKK21zZ3N0ciAizqDOu86sz4TOv8+CIM6azrXOuc68zq3Ovc6/z4UgzpzOt869z43OvM6xz4TOv8+CIM6lz4DOv86yzr/Ou86uz4IiCisKKyM6IGxpYi9vcHRpb24udGNsOjEyOAorbXNnaWQgIk5ldyBCcmFuY2ggTmFtZSBUZW1wbGF0ZSIKK21zZ3N0ciAizp3Orc6/IM6gz4HPjM+Ez4XPgM6/IM6fzr3PjM68zrHPhM6/z4IgzprOu86szrTOv8+FIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxOTIKK21zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKK21zZ3N0ciAizpvOtc6+zrnOus+MIM6fz4HOuM6/zrPPgc6xz4bOr86xz4I6IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMTYKK21zZ2lkICJDaGFuZ2UgRm9udCIKK21zZ3N0ciAizpHOu867zrHOs86uIM6Tz4HOsc68zrzOsc+Ezr/Pg861zrnPgc6sz4IiCisKKyM6IGxpYi9vcHRpb24udGNsOjIyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNob29zZSAlcyIKK21zZ3N0ciAizpXPgM65zrvOv86zzq4gJXMiCisKKyM6IGxpYi9vcHRpb24udGNsOjIyNgorIywgZnV6enkKK21zZ2lkICJwdC4iCittc2dzdHIgIiIKKworIzogbGliL29wdGlvbi50Y2w6MjQwCittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgIs6gz4HOv8+EzrnOvM6uz4POtc65z4IiCisKKyM6IGxpYi9vcHRpb24udGNsOjI3NQorbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCittc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgz4DOu86uz4HOv8+Fz4IgzrHPgM6/zrjOrs66zrXPhc+DzrfPgiDOtc+AzrnOu86/zrPPjs69OiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM0Cittc2dpZCAiRGVsZXRlIFJlbW90ZSBCcmFuY2giCittc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4gzpHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr/PhSDOms67zqzOtM6/z4UiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDcKK21zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCittc2dzdHIgIs6Rz4DPjCDOkc+Azr/OuM61z4TOrs+BzrnOvyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMjMKK21zZ2lkICJSZW1vdGU6IgorbXNnc3RyICLOkc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OvzoiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NjYgbGliL3RyYW5zcG9ydC50Y2w6MTM4CisjLCBmdXp6eQorbXNnaWQgIkFyYml0cmFyeSBVUkw6IgorbXNnc3RyICLOkc+FzrjOsc6vz4HOtc+Ezr8gVVJMOiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4NAorbXNnaWQgIkJyYW5jaGVzIgorbXNnc3RyICLOms67zqzOtM6/zrkiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTA5Cittc2dpZCAiRGVsZXRlIE9ubHkgSWYiCittc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4gzpzPjM69zr8gzpXOrM69IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMQorbXNnaWQgIk1lcmdlZCBJbnRvOiIKK21zZ3N0ciAizqPPhc6zz4fPic69zrXPhc68zq3Ovc6/IM6czrU6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExOQorbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKK21zZ3N0ciAizqDOrM69z4TOsSAozpzOtyDOtM65zrXOvc61z4HOs863zrjOv8+Nzr0gzq3Ou861zrPPh86/zrkgz4PPhc6zz4fPjs69zrXPhc+DzrfPgikiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTUyCittc2dpZCAiQSBicmFuY2ggaXMgcmVxdWlyZWQgZm9yICdNZXJnZWQgSW50bycuIgorbXNnc3RyICLOkc+AzrHOuc+EzrXOr8+EzrHOuSDOrc69zrHPgiDOus67zqzOtM6/z4IgzrPOuc6xICfOo8+FzrPPh8+Jzr3Otc+FzrzOrc69zr8gzpzOtScuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKKyJcbiIKKyIgLSAlcyIKK21zZ3N0ciAiIgorIs6fzrkgzrXOvs6uz4IgzrrOu86szrTOv865IM60zrXOvSDOtc6vzr3Osc65IM+AzrvOrs+Bz4nPgiDPg8+FzrPPh8+Jzr3Otc+FzrzOrc69zr/OuSDOvM61IM+Ezr8gJXM6XG4iCisiXG4iCisiIC0gJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorbXNnc3RyICIiCisizpzOr86xIM6uIM+AzrXPgc65z4PPg8+Mz4TOtc+BzrXPgiDOsc+Az4wgz4TOuc+CIM60zr/Ous65zrzOrc+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IgzrHPgM6tz4TPhc+HzrHOvSDOtc+AzrXOuc60zq4gzrTOtc69IM6tz4fOtc+EzrUgIgorIs+Gzq3Pgc61zrkgz4TOuc+CIM6xzr3Osc6zzrrOsc6vzrXPgiDPhc+Azr/Oss6/zrvOrc+CLiDOlM6/zrrOuc68zqzPg8+EzrUgzrHOvc6szrrPhM63z4POtyDOsc+Az4wgz4TOvyAlcyDPgM+Bz47PhM6xLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDcKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCittc2dzdHIgIs6gzrHPgc6xzrrOsc67z44gzrXPgM65zrvOrc6+z4TOtSDOrc69zrHOvSDOriDPgM61z4HOuc+Dz4PPjM+EzrXPgc6/z4XPgiDOus67zqzOtM6/z4XPgiDPgM+Bzr/PgiDOtM65zrHOs8+BzrHPhs6uLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTYKK21zZ2lkICIiCisiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKKyJcbiIKKyJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKK21zZ3N0ciAiIgorIs6XIM6xzr3OrM66z4TOt8+DzrcgzrTOuc61zrPPgc6xzrzOvM6tzr3Pic69IM66zrvOrM60z4nOvSDOtc6vzr3Osc65IM60z43Pg866zr/Ou863LlxuIgorIlxuIgorIs6UzrnOsc6zz4HOsc+Gzq4gz4TPic69IM61z4DOuc67zrXOs868zq3Ovc+Jzr0gzrrOu86szrTPic69OyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOtM65zrHOs8+BzrHPhs6uIM66zrvOrM60z4nOvSDOsc+Az4wgJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjg2Cittc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCittc2dzdHIgIs6UzrXOvSDOrc+HzrXOuSDOtc+AzrnOu861zrPOtc6vIM6xz4DOv864zrXPhM6uz4HOuc6/LiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTY2FubmluZyAlcy4uLiIKK21zZ3N0ciAizpHOvc6vz4fOvc61z4XPg863ICVzLi4uIgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNjUKK21zZ2lkICJQcnVuZSBmcm9tIgorbXNnc3RyICLOms67zqzOtM61zrzOsSDOsc+Az4wiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE3MAorbXNnaWQgIkZldGNoIGZyb20iCittc2dzdHIgIs6Rzr3OrM66z4TOt8+DzrcgzrHPgM+MIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMTMKK21zZ2lkICJQdXNoIHRvIgorbXNnc3RyICLOj864zrfPg863IM+DzrUiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MjAgbGliL3Nob3J0Y3V0LnRjbDo2MQorbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCittc2dzdHIgIs6UzrUgzrzPgM+Mz4HOtc+DzrUgzr3OsSDOsc+Azr/OuM63zrrOtc+Fz4TOtc6vIM63IM+Dz4XOvc+Ez4zOvM61z4XPg863OiIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoxMzYKK21zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCittc2dzdHIgIs6UzrUgzrzPgM+Mz4HOtc+DzrUgzr3OsSDOsc+Azr/OuM63zrrOtc+Fz4TOtc6vIM+Ezr8gzrXOuc66zr/Ovc6vzrTOuc6/OiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Cittc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiTc63IM+Fz4DOv8+Dz4TOt8+BzrnOts+MzrzOtc69zr/PgiDOtc67zrXOs866z4TOrs+CIM6/z4HOuM6/zrPPgc6xz4bOr86xz4IiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICLOiM67zrXOs8+Hzr/PgiDOv8+BzrjOv86zz4HOsc+Gzq/Osc+CIM68zrcgzrTOuc6xzrjOrc+DzrnOvM6/z4IiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAorbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAizpzOtyDOrc6zzrrPhc+Bzrcgz4HPjc64zrzOuc+DzrcgzrXOu86tzrPPh86/z4Ugzr/Pgc64zr/Os8+BzrHPhs6vzrHPgiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOtc+AzrHOvc6xz4bOv8+Bzqwgz4TOv8+FIM67zrXOvs65zrrOv8+NIM+DzrUgJXMuIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKK21zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgorbXNnc3RyICLOnyDOtc67zrXOs866z4TOrs+CIM6/z4HOuM6/zrPPgc6xz4bOr86xz4IgzrHPgM6tz4TPhc+HzrUgz4POuc+Jz4DOt867zqwgzrrOsc+Ezqwgz4TOt869IM61zrrOus6vzr3Ot8+DzrciCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAorbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICLOnM63IM6xzr3Osc6zzr3Pic+Bzq/Pg865zrzOv8+CIM61zrvOtc6zzrrPhM6uz4Igzr/Pgc64zr/Os8+BzrHPhs6vzrHPgiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjE4MAorbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgorbXNnc3RyICLOms6xzrzOr86xIM6gz4HPjM+EzrHPg863IgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MzgxCittc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgorbXNnc3RyICLOnM63IM6xzr3Osc68zrXOvc+MzrzOtc69zr8gz4TOrc67zr/PgiDOsc+Bz4fOtc6vzr/PhSDOsc+Az4wgz4TOv869IM61zrvOtc6zzrrPhM6uIM6/z4HOuM6/zrPPgc6xz4bOr86xz4IiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODUKK21zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOlc67zrXOs866z4TOriDOn8+BzrjOv86zz4HOsc+Gzq/Osc+CIgorCisjOiBsaWIvc3RhdHVzX2Jhci50Y2w6ODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgorbXNnc3RyICIlcyAuLi4gJSppIM6xz4DPjCAlKmkgJXMgKCUzaSUlKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NgorIywgdGNsLWZvcm1hdAorbXNnaWQgImZldGNoICVzIgorbXNnc3RyICLOsc69zqzOus+EzrfPg863ICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSAlcyIKK21zZ3N0ciAizpHOvc6szrrPhM63z4POtyDOvc6tz4nOvSDOsc67zrvOsc6zz47OvSDOsc+Az4wgz4TOvyAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCittc2dzdHIgIs6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/IM66zrvOrM60zrXOvM6xICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOus67zqzOtM61zrzOsSDOus67zqzOtM+Jzr0gz4DOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgiDPgM6/z4UgzrTOuc61zrPPgc6sz4bOt8+DzrHOvSDOsc+Az4wgz4TOvyAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MjUgbGliL3RyYW5zcG9ydC50Y2w6NzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJwdXNoICVzIgorbXNnc3RyICLPjs64zrfPg863ICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgz47OuM63z4POtyDOsc67zrvOsc6zz47OvSDPg8+Ezr8gJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgz47OuM63z4POtyAlcyAlcyDPg8+Ezr8gJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjg5Cittc2dpZCAiUHVzaCBCcmFuY2hlcyIKK21zZ3N0ciAizo/OuM63z4POtyDOms67zqzOtM+Jzr0iCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEwMworbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKK21zZ3N0ciAizqDOt86zzrHOr86/zrkgzprOu86szrTOv865IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMjAKK21zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgorbXNnc3RyICLOkc+Azr/OuM61z4TOrs+BzrnOvyDOoM+Bzr/Ov8+BzrnPg868zr/PjSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTU4Cittc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKK21zZ3N0ciAizpXPgM65zrvOv86zzq3PgiDOnM61z4TOsc+Gzr/Pgc6sz4IiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2MAorbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgorbXNnc3RyICIiCisizpXOvs6xzr3Osc6zzrrOsc+DzrzPjM+CIM61z4DOtc6zzrPPgc6xz4bOrs+CIM+Fz4DOrM+Bz4fOv869z4TOv8+CIM66zrvOrM60zr/PhSAozrzPgM6/z4HOtc6vIM69zrEgzrHPgM6/z4HPgc6vz4jOtc65IM6xzrvOu86xzrPOrc+CKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTY0Cittc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCittc2dzdHIgIs6nz4HOrs+DzrcgzrnPg8+Hzr3Ov8+NIM+AzrHOus6tz4TOv8+FICjOs865zrEgzrHPgc6zzq3PgiDPg8+Fzr3OtM6tz4POtc65z4IgzrTOuc66z4TPjc6/z4UpIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjgKK21zZ2lkICJJbmNsdWRlIHRhZ3MiCittc2dzdHIgIs6jz4XOvM+AzrXPgc6vzrvOt8+IzrcgzrXPhM65zrrOtc+Ez47OvSIKKworCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL2ZyLnBvIGIvZ2l0LWd1aS9wby9mci5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWZmMTg2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9wby9mci5wbwpAQCAtMCwwICsxLDI2MDQgQEAKKyMgdHJhbnNsYXRpb24gb2YgZnIucG8gdG8gRnJlbmNoCisjIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgdG8gRnJlbmNoLgorIyBDb3B5cmlnaHQgKEMpIDIwMDggU2hhd24gUGVhcmNlLCBldCBhbC4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdCBwYWNrYWdlLgorIworIyBDaHJpc3RpYW4gQ291ZGVyIDxjaHJpc2Nvb2xAdHV4ZmFtaWx5Lm9yZz4sIDIwMDguCisjIEFsZXhhbmRyZSBCb3VyZ2V0IDxhbGV4YW5kcmUuYm91cmdldEBzYXZvaXJmYWlyZWxpbnV4LmNvbT4sIDIwMDguCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBmclxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMS0yNiAxNTo0Ny0wODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wMi0wMiAxMjo1OSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBDaHJpc3RpYW4gQ291ZGVyIDxjaHJpc2Nvb2xAdHV4ZmFtaWx5Lm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBGcmVuY2hcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLUdlbmVyYXRvcjogS0JhYmVsIDEuMTEuNFxuIgorIlBsdXJhbC1Gb3JtczogIG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgorCisjOiBnaXQtZ3VpLnNoOjQxIGdpdC1ndWkuc2g6NzkzIGdpdC1ndWkuc2g6ODA3IGdpdC1ndWkuc2g6ODIwIGdpdC1ndWkuc2g6OTAzCisjOiBnaXQtZ3VpLnNoOjkyMgorbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgorbXNnc3RyICJnaXQtZ3VpOiBlcnJldXIgZmF0YWxlIgorCisjOiBnaXQtZ3VpLnNoOjc0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgorbXNnc3RyICJQb2xpY2UgaW52YWxpZGUgc3DDqWNpZmnDqWUgZGFucyAlcyA6IgorCisjOiBnaXQtZ3VpLnNoOjc3OQorbXNnaWQgIk1haW4gRm9udCIKK21zZ3N0ciAiUG9saWNlIHByaW5jaXBhbGUiCisKKyM6IGdpdC1ndWkuc2g6NzgwCittc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCittc2dzdHIgIlBvbGljZSBkaWZmL2NvbnNvbGUiCisKKyM6IGdpdC1ndWkuc2g6Nzk0Cittc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgZ2l0IGRhbnMgUEFUSC4iCisKKyM6IGdpdC1ndWkuc2g6ODIxCittc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCittc2dzdHIgIkltcG9zc2libGUgZGUgcGFyc2VyIGxhIHZlcnNpb24gZGUgR2l0IDoiCisKKyM6IGdpdC1ndWkuc2g6ODM5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgorIlxuIgorIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCisiXG4iCisiJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgorIlxuIgorIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGTDqXRlcm1pbmVyIGxhIHZlcnNpb24gZGUgR2l0LlxuIgorIlxuIgorIiVzIGFmZmlybWUgcXUnaWwgcydhZ2l0IGRlIGxhIHZlcnNpb24gJyVzJy5cbiIKKyJcbiIKKyIlcyBuw6ljZXNzaXRlIGF1IG1vaW5zIEdpdCAxLjUuMC5cbiIKKyJcbiIKKyJQZXV0LW9uIGNvbnNpZMOpcmVyIHF1ZSAnJXMnIGVzdCBlbiB2ZXJzaW9uIDEuNS4wID9cbiIKKworIzogZ2l0LWd1aS5zaDoxMTI4Cittc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgcsOpcGVydG9pcmUgZ2l0IDoiCisKKyM6IGdpdC1ndWkuc2g6MTE0NgorbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCittc2dzdHIgIkltcG9zc2libGUgZCdhbGxlciDDoCBsYSByYWNpbmUgZHUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCA6IgorCisjOiBnaXQtZ3VpLnNoOjExNTQKK21zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCittc2dzdHIgIkltcG9zc2libGUgZCd1dGlsaXNlciB1biBkw6lww7R0IG51IChiYXJlKSA6IgorCisjOiBnaXQtZ3VpLnNoOjExNjIKK21zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiQXVjdW4gcsOpcGVydG9pcmUgZGUgdHJhdmFpbCIKKworIzogZ2l0LWd1aS5zaDoxMzM0IGxpYi9jaGVja291dF9vcC50Y2w6MzA2Cittc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKK21zZ3N0ciAiUmFmcmHDrmNoaXNzZW1lbnQgZHUgc3RhdHV0IGRlcyBmaWNoaWVycy4uLiIKKworIzogZ2l0LWd1aS5zaDoxMzkwCittc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKK21zZ3N0ciAiUmVjaGVyY2hlIGRlIGZpY2hpZXJzIG1vZGlmacOpcy4uLiIKKworIzogZ2l0LWd1aS5zaDoxNDU0Cittc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKK21zZ3N0ciAiTGFuY2VtZW50IGRlIGwnYWN0aW9uIGRlIHByw6lwYXJhdGlvbiBkdSBtZXNzYWdlIGRlIGNvbW1pdC4uLiIKKworIzogZ2l0LWd1aS5zaDoxNDcxCittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiQ29tbWl0IHJlZnVzw6kgcGFyIGwnYWN0aW9uIGRlIHByw6lwYXJhdGlvbiBkdSBtZXNzYWdlIGRlIGNvbW1pdC4iCisKKyM6IGdpdC1ndWkuc2g6MTYyOSBsaWIvYnJvd3Nlci50Y2w6MjQ2Cittc2dpZCAiUmVhZHkuIgorbXNnc3RyICJQcsOqdC4iCisKKyM6IGdpdC1ndWkuc2g6MTc4NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpc3BsYXlpbmcgb25seSAlcyBvZiAlcyBmaWxlcy4iCittc2dzdHIgIkFmZmljaGUgc2V1bGVtZW50ICVzIGZpY2hpZXJzIHN1ciAlcy4iCisKKyM6IGdpdC1ndWkuc2g6MTkxMworbXNnaWQgIlVubW9kaWZpZWQiCittc2dzdHIgIk5vbiBtb2RpZmnDqSIKKworIzogZ2l0LWd1aS5zaDoxOTE1Cittc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIk1vZGlmacOpLCBwYXMgaW5kZXjDqSIKKworIzogZ2l0LWd1aS5zaDoxOTE2IGdpdC1ndWkuc2g6MTkyNAorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICJJbmRleMOpIgorCisjOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1Cittc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIlBvcnRpb25zIGluZGV4w6llcyIKKworIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgorbXNnc3RyICJJbmRleMOpcywgbWFucXVhbnQiCisKKyM6IGdpdC1ndWkuc2g6MTkyMAorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJMZSB0eXBlIGRlIGZpY2hpZXIgYSBjaGFuZ8OpLCBub24gaW5kZXjDqSIKKworIzogZ2l0LWd1aS5zaDoxOTIxCittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIHN0YWdlZCIKK21zZ3N0ciAiTGUgdHlwZSBkZSBmaWNoaWVyIGEgY2hhbmfDqSwgaW5kZXjDqSIKKworIzogZ2l0LWd1aS5zaDoxOTIzCittc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJOb24gdmVyc2lvbm7DqSwgbm9uIGluZGV4w6kiCisKKyM6IGdpdC1ndWkuc2g6MTkyOAorbXNnaWQgIk1pc3NpbmciCittc2dzdHIgIk1hbnF1YW50IgorCisjOiBnaXQtZ3VpLnNoOjE5MjkKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCittc2dzdHIgIkluZGV4w6kgcG91ciBzdXBwcmVzc2lvbiIKKworIzogZ2l0LWd1aS5zaDoxOTMwCittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgorbXNnc3RyICJJbmRleMOpIHBvdXIgc3VwcHJlc3Npb24sIHRvdWpvdXJzIHByw6lzZW50IgorCisjOiBnaXQtZ3VpLnNoOjE5MzIgZ2l0LWd1aS5zaDoxOTMzIGdpdC1ndWkuc2g6MTkzNCBnaXQtZ3VpLnNoOjE5MzUKKyM6IGdpdC1ndWkuc2g6MTkzNiBnaXQtZ3VpLnNoOjE5MzcKK21zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICJOw6ljZXNzaXRlIGxhIHLDqXNvbHV0aW9uIGQndW5lIGZ1c2lvbiIKKworIzogZ2l0LWd1aS5zaDoxOTcyCittc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAiTGFuY2VtZW50IGRlIGdpdGsuLi4gdW4gaW5zdGFudC4uLiIKKworIzogZ2l0LWd1aS5zaDoxOTg0Cittc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBnaXRrIGRhbnMgUEFUSC4iCisKKyM6IGdpdC1ndWkuc2g6MjA0MworbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0IGd1aSBpbiBQQVRIIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgZ2l0IGd1aSBkYW5zIFBBVEgiCisKKyM6IGdpdC1ndWkuc2g6MjQ1NSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2Cittc2dpZCAiUmVwb3NpdG9yeSIKK21zZ3N0ciAiRMOpcMO0dCIKKworIzogZ2l0LWd1aS5zaDoyNDU2Cittc2dpZCAiRWRpdCIKK21zZ3N0ciAiw4lkaXRpb24iCisKKyM6IGdpdC1ndWkuc2g6MjQ1OCBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJCcmFuY2hlIgorCisjOiBnaXQtZ3VpLnNoOjI0NjEgbGliL2Nob29zZV9yZXYudGNsOjU0OAorbXNnaWQgIkNvbW1pdEBAbm91biIKK21zZ3N0ciAiQ29tbWl0IgorCisjOiBnaXQtZ3VpLnNoOjI0NjQgbGliL21lcmdlLnRjbDoxMjEgbGliL21lcmdlLnRjbDoxNTAgbGliL21lcmdlLnRjbDoxNjgKK21zZ2lkICJNZXJnZSIKK21zZ3N0ciAiRnVzaW9ubmVyIgorCisjOiBnaXQtZ3VpLnNoOjI0NjUgbGliL2Nob29zZV9yZXYudGNsOjU1NworbXNnaWQgIlJlbW90ZSIKK21zZ3N0ciAiRMOpcMO0dCBkaXN0YW50IgorCisjOiBnaXQtZ3VpLnNoOjI0NjgKK21zZ2lkICJUb29scyIKK21zZ3N0ciAiT3V0aWxzIgorCisjOiBnaXQtZ3VpLnNoOjI0NzcKK21zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKK21zZ3N0ciAiRXhwbG9yZXIgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogZ2l0LWd1aS5zaDoyNDgzCittc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCittc2dzdHIgIk5hdmlndWVyIGRhbnMgbGEgYnJhbmNoZSBjb3VyYW50ZSIKKworIzogZ2l0LWd1aS5zaDoyNDg3Cittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKK21zZ3N0ciAiTmF2aWd1ZXIgZGFucyBsYSBicmFuY2hlLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI0OTIKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICJWaXN1YWxpc2VyIGwnaGlzdG9yaXF1ZSBkZSBsYSBicmFuY2hlIGNvdXJhbnRlIgorCisjOiBnaXQtZ3VpLnNoOjI0OTYKK21zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgorbXNnc3RyICJWb2lyIGwnaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIGJyYW5jaGVzIgorCisjOiBnaXQtZ3VpLnNoOjI1MDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKK21zZ3N0ciAiUGFyY291cmlyIGwnYXJib3Jlc2NlbmNlIGRlICVzIgorCisjOiBnaXQtZ3VpLnNoOjI1MDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgorbXNnc3RyICJWb2lyIGwnaGlzdG9yaXF1ZSBkZSBsYSBicmFuY2hlIDogJXMiCisKKyM6IGdpdC1ndWkuc2g6MjUxMCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKK21zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgorbXNnc3RyICJTdGF0aXN0aXF1ZXMgZHUgZMOpcMO0dCIKKworIzogZ2l0LWd1aS5zaDoyNTEzIGxpYi9kYXRhYmFzZS50Y2w6MzQKK21zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKK21zZ3N0ciAiQ29tcHJpbWVyIGxlIGTDqXDDtHQiCisKKyM6IGdpdC1ndWkuc2g6MjUxNgorbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKK21zZ3N0ciAiVsOpcmlmaWVyIGxlIGTDqXDDtHQiCisKKyM6IGdpdC1ndWkuc2g6MjUyMyBnaXQtZ3VpLnNoOjI1MjcgZ2l0LWd1aS5zaDoyNTMxIGxpYi9zaG9ydGN1dC50Y2w6OAorIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCittc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKK21zZ3N0ciAiQ3LDqWVyIHVuZSBpY8O0bmUgc3VyIGxlIGJ1cmVhdSIKKworIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCittc2dpZCAiUXVpdCIKK21zZ3N0ciAiUXVpdHRlciIKKworIzogZ2l0LWd1aS5zaDoyNTQ3Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAiRMOpZmFpcmUiCisKKyM6IGdpdC1ndWkuc2g6MjU1MAorbXNnaWQgIlJlZG8iCittc2dzdHIgIlJlZmFpcmUiCisKKyM6IGdpdC1ndWkuc2g6MjU1NCBnaXQtZ3VpLnNoOjMxMDkKK21zZ2lkICJDdXQiCittc2dzdHIgIkNvdXBlciIKKworIzogZ2l0LWd1aS5zaDoyNTU3IGdpdC1ndWkuc2g6MzExMiBnaXQtZ3VpLnNoOjMxODYgZ2l0LWd1aS5zaDozMjU5CisjOiBsaWIvY29uc29sZS50Y2w6NjkKK21zZ2lkICJDb3B5IgorbXNnc3RyICJDb3BpZXIiCisKKyM6IGdpdC1ndWkuc2g6MjU2MCBnaXQtZ3VpLnNoOjMxMTUKK21zZ2lkICJQYXN0ZSIKK21zZ3N0ciAiQ29sbGVyIgorCisjOiBnaXQtZ3VpLnNoOjI1NjMgZ2l0LWd1aS5zaDozMTE4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOAorbXNnaWQgIkRlbGV0ZSIKK21zZ3N0ciAiU3VwcHJpbWVyIgorCisjOiBnaXQtZ3VpLnNoOjI1NjcgZ2l0LWd1aS5zaDozMTIyIGdpdC1ndWkuc2g6MzI2MyBsaWIvY29uc29sZS50Y2w6NzEKK21zZ2lkICJTZWxlY3QgQWxsIgorbXNnc3RyICJUb3V0IHPDqWxlY3Rpb25uZXIiCisKKyM6IGdpdC1ndWkuc2g6MjU3NgorbXNnaWQgIkNyZWF0ZS4uLiIKK21zZ3N0ciAiQ3LDqWVyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1ODIKK21zZ2lkICJDaGVja291dC4uLiIKK21zZ3N0ciAiQ2hhcmdlciAoY2hlY2tvdXQpLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1ODgKK21zZ2lkICJSZW5hbWUuLi4iCittc2dzdHIgIlJlbm9tbWVyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1OTMKK21zZ2lkICJEZWxldGUuLi4iCittc2dzdHIgIlN1cHByaW1lci4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTk4Cittc2dpZCAiUmVzZXQuLi4iCittc2dzdHIgIlLDqWluaXRpYWxpc2VyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI2MDgKK21zZ2lkICJEb25lIgorbXNnc3RyICJFZmZlY3R1w6kiCisKKyM6IGdpdC1ndWkuc2g6MjYxMAorbXNnaWQgIkNvbW1pdEBAdmVyYiIKK21zZ3N0ciAiQ29tbWl0ZXJAQHZlcmIiCisKKyM6IGdpdC1ndWkuc2g6MjYxOSBnaXQtZ3VpLnNoOjMwNTAKK21zZ2lkICJOZXcgQ29tbWl0IgorbXNnc3RyICJOb3V2ZWF1IGNvbW1pdCIKKworIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzA1NworbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgorbXNnc3RyICJDb3JyaWdlciBkZXJuaWVyIGNvbW1pdCIKKworIzogZ2l0LWd1aS5zaDoyNjM3IGdpdC1ndWkuc2g6MzAxMSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjk5Cittc2dpZCAiUmVzY2FuIgorbXNnc3RyICJSZWNoYXJnZXIgbW9kaWZzLiIKKworIzogZ2l0LWd1aS5zaDoyNjQzCittc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgorbXNnc3RyICJJbmRleGVyIgorCisjOiBnaXQtZ3VpLnNoOjI2NDkKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKK21zZ3N0ciAiSW5kZXhlciB0b3V0ZXMgbW9kaWZpY2F0aW9ucyIKKworIzogZ2l0LWd1aS5zaDoyNjU1Cittc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAiRMOpc2luZGV4ZXIiCisKKyM6IGdpdC1ndWkuc2g6MjY2MSBsaWIvaW5kZXgudGNsOjQxMgorbXNnaWQgIlJldmVydCBDaGFuZ2VzIgorbXNnc3RyICJBbm51bGVyIGxlcyBtb2RpZmljYXRpb25zIgorCisjOiBnaXQtZ3VpLnNoOjI2NjkgZ2l0LWd1aS5zaDozMzEwIGdpdC1ndWkuc2g6MzM0MQorbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgorbXNnc3RyICJNb250cmVyIG1vaW5zIGRlIGNvbnRleHRlIgorCisjOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQorbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgorbXNnc3RyICJNb250cmVyIHBsdXMgZGUgY29udGV4dGUiCisKKyM6IGdpdC1ndWkuc2g6MjY4MCBnaXQtZ3VpLnNoOjMwMjQgZ2l0LWd1aS5zaDozMTMzCittc2dpZCAiU2lnbiBPZmYiCittc2dzdHIgIlNpZ25lciIKKworIzogZ2l0LWd1aS5zaDoyNjk2Cittc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCittc2dzdHIgIkZ1c2lvbiBsb2NhbGUuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjcwMQorbXNnaWQgIkFib3J0IE1lcmdlLi4uIgorbXNnc3RyICJBYmFuZG9ubmVyIGZ1c2lvbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzEzIGdpdC1ndWkuc2g6Mjc0MQorbXNnaWQgIkFkZC4uLiIKK21zZ3N0ciAiQWpvdXRlci4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzE3Cittc2dpZCAiUHVzaC4uLiIKK21zZ3N0ciAiUG91c3Nlci4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzIxCittc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKK21zZ3N0ciAiU3VwcHJpbWVyIGJyYW5jaGUuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjczMSBnaXQtZ3VpLnNoOjMyOTIKK21zZ2lkICJPcHRpb25zLi4uIgorbXNnc3RyICJPcHRpb25zLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3NDIKK21zZ2lkICJSZW1vdmUuLi4iCittc2dzdHIgIlN1cHByaW1lci4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzUxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKK21zZ2lkICJIZWxwIgorbXNnc3RyICJBaWRlIgorCisjOiBnaXQtZ3VpLnNoOjI3NTUgZ2l0LWd1aS5zaDoyNzU5IGxpYi9hYm91dC50Y2w6MTQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkFib3V0ICVzIgorbXNnc3RyICLDgCBwcm9wb3MgZGUgJXMiCisKKyM6IGdpdC1ndWkuc2g6Mjc4MworbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgorbXNnc3RyICJEb2N1bWVudGF0aW9uIGVuIGxpZ25lIgorCisjOiBnaXQtZ3VpLnNoOjI3ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2Cittc2dpZCAiU2hvdyBTU0ggS2V5IgorbXNnc3RyICJNb250cmVyIGxhIGNsw6kgU1NIIgorCisjOiBnaXQtZ3VpLnNoOjI4OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImVycmV1ciBmYXRhbGUgOiBwYXMgZCdpbmZvcyBzdXIgbGUgY2hlbWluICVzIDogRmljaGllciBvdSByw6lwZXJ0b2lyZSAiCisiaW5leGlzdGFudCIKKworIzogZ2l0LWd1aS5zaDoyOTI2Cittc2dpZCAiQ3VycmVudCBCcmFuY2g6IgorbXNnc3RyICJCcmFuY2hlIGNvdXJhbnRlIDoiCisKKyM6IGdpdC1ndWkuc2g6Mjk0NworbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCittc2dzdHIgIk1vZGlmcy4gaW5kZXjDqWVzIChwb3VyIGNvbW1pdCkiCisKKyM6IGdpdC1ndWkuc2g6Mjk2NworbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCittc2dzdHIgIk1vZGlmcy4gbm9uIGluZGV4w6llcyIKKworIzogZ2l0LWd1aS5zaDozMDE3Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAiSW5kZXhlciBtb2RpZnMuIgorCisjOiBnaXQtZ3VpLnNoOjMwMzYgbGliL3RyYW5zcG9ydC50Y2w6MTA0IGxpYi90cmFuc3BvcnQudGNsOjE5MworbXNnaWQgIlB1c2giCittc2dzdHIgIlBvdXNzZXIiCisKKyM6IGdpdC1ndWkuc2g6MzA3MQorbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBpbml0aWFsIDoiCisKKyM6IGdpdC1ndWkuc2g6MzA3MgorbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBjb3JyaWfDqSA6IgorCisjOiBnaXQtZ3VpLnNoOjMwNzMKK21zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBpbml0aWFsIGNvcnJpZ8OpIDoiCisKKyM6IGdpdC1ndWkuc2g6MzA3NAorbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBkZSBmdXNpb24gY29ycmlnw6kgOiIKKworIzogZ2l0LWd1aS5zaDozMDc1Cittc2dpZCAiTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBkZSBmdXNpb24gOiIKKworIzogZ2l0LWd1aS5zaDozMDc2Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCA6IgorCisjOiBnaXQtZ3VpLnNoOjMxMjUgZ2l0LWd1aS5zaDozMjY3IGxpYi9jb25zb2xlLnRjbDo3MworbXNnaWQgIkNvcHkgQWxsIgorbXNnc3RyICJDb3BpZXIgdG91dCIKKworIzogZ2l0LWd1aS5zaDozMTQ5IGxpYi9ibGFtZS50Y2w6MTA0Cittc2dpZCAiRmlsZToiCittc2dzdHIgIkZpY2hpZXIgOiIKKworIzogZ2l0LWd1aS5zaDozMjU1Cittc2dpZCAiUmVmcmVzaCIKK21zZ3N0ciAiUmFmcmHDrmNoaXIiCisKKyM6IGdpdC1ndWkuc2g6MzI3NgorbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAiRGltaW51ZXIgbGEgcG9saWNlIgorCisjOiBnaXQtZ3VpLnNoOjMyODAKK21zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIkFncmFuZGlyIGxhIHBvbGljZSIKKworIzogZ2l0LWd1aS5zaDozMjg4IGxpYi9ibGFtZS50Y2w6MjgxCittc2dpZCAiRW5jb2RpbmciCittc2dzdHIgIkNvZGFnZSBkZXMgY2FyYWN0w6hyZXMiCisKKyM6IGdpdC1ndWkuc2g6MzI5OQorbXNnaWQgIkFwcGx5L1JldmVyc2UgSHVuayIKK21zZ3N0ciAiQXBwbGlxdWVyL0ludmVyc2VyIHNlY3Rpb24iCisKKyM6IGdpdC1ndWkuc2g6MzMwNAorbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKK21zZ3N0ciAiQXBwbGlxdWVyL0ludmVyc2VyIGxhIGxpZ25lIgorCisjOiBnaXQtZ3VpLnNoOjMzMjMKK21zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKK21zZ3N0ciAiTGFuY2VyIGwnb3V0aWwgZGUgZnVzaW9uIgorCisjOiBnaXQtZ3VpLnNoOjMzMjgKK21zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCittc2dzdHIgIlV0aWxpc2VyIGxhIHZlcnNpb24gZGlzdGFudGUiCisKKyM6IGdpdC1ndWkuc2g6MzMzMgorbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgorbXNnc3RyICJVdGlsaXNlciBsYSB2ZXJzaW9uIGxvY2FsZSIKKworIzogZ2l0LWd1aS5zaDozMzM2Cittc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCittc2dzdHIgIlJldmVuaXIgw6AgbGEgdmVyc2lvbiBkZSBiYXNlIgorCisjOiBnaXQtZ3VpLnNoOjMzNTQKK21zZ2lkICJWaXN1YWxpemUgVGhlc2UgQ2hhbmdlcyBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJWb2lyIGxlcyBjaGFuZ21lbnRzIGRhbnMgbGUgc291cy1tb2R1bGUiCisKKyM6IGdpdC1ndWkuc2g6MzM1OAorbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIlZvaXIgbCdoaXN0b3JpcXVlIGRlIGxhIGJyYW5jaGUgY291cmFudGUgZHUgc291cy1tb2R1bGUiCisKKyM6IGdpdC1ndWkuc2g6MzM2MgorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiVm9pciBsJ2hpc3RvcmlxdWUgZGUgdG91dGVzIGxlcyBicmFuY2hlcyBkdSBzb3VzLW1vZHVsZSIKKworIzogZ2l0LWd1aS5zaDozMzY3Cittc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJEw6ltYXJyZXIgZ2l0IGd1aSBkYW5zIGxlIHNvdXMtbW9kdWxlIgorCisjOiBnaXQtZ3VpLnNoOjMzODkKK21zZ2lkICJVbnN0YWdlIEh1bmsgRnJvbSBDb21taXQiCittc2dzdHIgIkTDqXNpbmRleGVyIGxhIHNlY3Rpb24iCisKKyM6IGdpdC1ndWkuc2g6MzM5MQorbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCittc2dzdHIgIkTDqXNpbmRleGVyIGxhIGxpZ25lIGR1IGNvbW1pdCIKKworIzogZ2l0LWd1aS5zaDozMzkzCittc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgorbXNnc3RyICJEw6lzaW5kZXhlciBsYSBsaWduZSIKKworIzogZ2l0LWd1aS5zaDozMzk2Cittc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgorbXNnc3RyICJJbmRleGVyIGxhIHNlY3Rpb24iCisKKyM6IGdpdC1ndWkuc2g6MzM5OAorbXNnaWQgIlN0YWdlIExpbmVzIEZvciBDb21taXQiCittc2dzdHIgIkluZGV4ZXIgbGVzIGxpZ25lcyIKKworIzogZ2l0LWd1aS5zaDozNDAwCittc2dpZCAiU3RhZ2UgTGluZSBGb3IgQ29tbWl0IgorbXNnc3RyICJJbmRleGVyIGxhIGxpZ25lIgorCisjOiBnaXQtZ3VpLnNoOjM0MjQKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIkluaXRpYWxpc2F0aW9uLi4uIgorCisjOiBnaXQtZ3VpLnNoOjM1NDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisiRGVzIHByb2Jsw6htZXMgZCdlbnZpcm9ubmVtZW50IHNvbnQgcG9zc2libGVzLlxuIgorIlxuIgorIkxlcyB2YXJpYWJsZXMgZCdlbnZpcm9ubmVtZW50IHN1aXZhbnRlcyBzZXJvbnRcbiIKKyJwcm9iYWJsZW1lbnQgaWdub3LDqWVzIHBhciB0b3VzIGxlc1xuIgorInNvdXMtcHJvY2Vzc3VzIGRlIEdpdCBsYW5jw6lzIHBhciAlc1xuIgorIlxuIgorCisjOiBnaXQtZ3VpLnNoOjM1NzAKK21zZ2lkICIiCisiXG4iCisiVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZVxuIgorIlRjbCBiaW5hcnkgZGlzdHJpYnV0ZWQgYnkgQ3lnd2luLiIKK21zZ3N0ciAiIgorIlxuIgorIkNlY2kgZXN0IGTDuyDDoCB1biBwcm9ibMOobWUgY29ubnUgYXZlY1xuIgorImxlIGJpbmFpcmUgVGNsIGRpc3RyaWJ1w6kgcGFyIEN5Z3dpbi4iCisKKyM6IGdpdC1ndWkuc2g6MzU3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCisiaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCisidXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKKyJ+Ly5naXRjb25maWcgZmlsZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIlVuIGJvbiByZW1wbGFjZW1lbnQgcG91ciAlc1xuIgorImVzdCBkZSBtZXR0cmUgbGVzIHZhbGV1cnMgcG91ciAndXNlci5uYW1lJyAobm9tXG4iCisiZGUgbCd1dGlsaXNhdGV1cikgZXQgJ3VzZXIuZW1haWwnIChhZGRyZXNzZSBlbWFpbFxuIgorImRlIGwndXRpbGlzYXRldXIpIGRhbnMgdm90cmUgZmljaGllciAnfi8uZ2l0Y29uZmlnJy5cbiIKKworIzogbGliL2Fib3V0LnRjbDoyNgorbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKK21zZ3N0ciAiZ2l0LWd1aSAtIHVuZSBpbnRlcmZhY2UgZ3JhcGhpcXVlIHV0aWxpc2F0ZXVyIHBvdXIgR2l0IgorCisjOiBsaWIvYmxhbWUudGNsOjcyCittc2dpZCAiRmlsZSBWaWV3ZXIiCittc2dzdHIgIlZpc2lvbm5ldXIgZGUgZmljaGllciIKKworIzogbGliL2JsYW1lLnRjbDo3OAorbXNnaWQgIkNvbW1pdDoiCittc2dzdHIgIkNvbW1pdCA6IgorCisjOiBsaWIvYmxhbWUudGNsOjI3MQorbXNnaWQgIkNvcHkgQ29tbWl0IgorbXNnc3RyICJDb3BpZXIgY29tbWl0IgorCisjOiBsaWIvYmxhbWUudGNsOjI3NQorbXNnaWQgIkZpbmQgVGV4dC4uLiIKK21zZ3N0ciAiQ2hlcmNoZXIgdGV4dGUuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg0Cittc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKK21zZ3N0ciAiTGFuY2VyIGxhIGTDqXRlY3Rpb24gYXBwcm9mb25kaWUgZGVzIGNvcGllcyIKKworIzogbGliL2JsYW1lLnRjbDoyODgKK21zZ2lkICJTaG93IEhpc3RvcnkgQ29udGV4dCIKK21zZ3N0ciAiTW9udHJlciBsJ2hpc3RvcmlxdWUiCisKKyM6IGxpYi9ibGFtZS50Y2w6MjkxCittc2dpZCAiQmxhbWUgUGFyZW50IENvbW1pdCIKK21zZ3N0ciAiQmzDom1lciBsZSBjb21taXQgcGFyZW50IgorCisjOiBsaWIvYmxhbWUudGNsOjQ1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgJXMuLi4iCittc2dzdHIgIkxlY3R1cmUgZGUgJXMuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NTU3Cittc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgIkNoYXJnZW1lbnQgZGVzIGFubm90YXRpb25zIGRlIHN1aXZpIGRlcyBjb3BpZXMvZMOpcGxhY2VtZW50cy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo1NzcKK21zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCittc2dzdHIgImxpZ25lcyBhbm5vdMOpZXMiCisKKyM6IGxpYi9ibGFtZS50Y2w6NzY5Cittc2dpZCAiTG9hZGluZyBvcmlnaW5hbCBsb2NhdGlvbiBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAiQ2hhcmdlbWVudCBkZXMgYW5ub3RhdGlvbnMgZCdlbXBsYWNlbWVudCBvcmlnaW5hbCIKKworIzogbGliL2JsYW1lLnRjbDo3NzIKK21zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKK21zZ3N0ciAiQW5ub3RhdGlvbiB0ZXJtaW7DqWUuIgorCisjOiBsaWIvYmxhbWUudGNsOjgwMgorbXNnaWQgIkJ1c3kiCittc2dzdHIgIk9jY3Vww6kiCisKKyM6IGxpYi9ibGFtZS50Y2w6ODAzCittc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCittc2dzdHIgIkFubm90YXRpb24gZW4gY291cnMgZCdleMOpY3V0aW9uLiIKKworIzogbGliL2JsYW1lLnRjbDo4NDIKK21zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgorbXNnc3RyICJSZWNoZXJjaGUgZGUgY29waWUgYXBwcm9mb25kaWUgZW4gY291cnMuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6OTEwCittc2dpZCAiTG9hZGluZyBhbm5vdGF0aW9uLi4uIgorbXNnc3RyICJDaGFyZ2VtZW50IGRlcyBhbm5vdGF0aW9ucy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo5NjMKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRldXIgOiIKKworIzogbGliL2JsYW1lLnRjbDo5NjcKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJDb21taXRldXIgOiIKKworIzogbGliL2JsYW1lLnRjbDo5NzIKK21zZ2lkICJPcmlnaW5hbCBGaWxlOiIKK21zZ3N0ciAiRmljaGllciBvcmlnaW5hbCA6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwMjAKK21zZ2lkICJDYW5ub3QgZmluZCBIRUFEIGNvbW1pdDoiCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBsZSBjb21taXQgSEVBRCA6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwNzUKK21zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlIGNvbW1pdCBwYXJlbnQgOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDkwCittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYWZmaWNoZXIgbGUgcGFyZW50IgorCisjOiBsaWIvYmxhbWUudGNsOjEwOTEgbGliL2RpZmYudGNsOjMyMAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCittc2dzdHIgIkVycmV1ciBsb3JzIGR1IGNoYXJnZW1lbnQgZGVzIGRpZmbDqXJlbmNlcyA6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyMzEKK21zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKK21zZ3N0ciAiw4AgbCdvcmlnaW5lIHBhciA6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyMzcKK21zZ2lkICJJbiBGaWxlOiIKK21zZ3N0ciAiRGFucyBsZSBmaWNoaWVyIDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI0MgorbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKK21zZ3N0ciAiQ29wacOpIG91IGTDqXBsYWPDqSBpY2kgcGFyIDoiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE0IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE5Cittc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICJDaGFyZ2VyIGxhIGJyYW5jaGUgKGNoZWNrb3V0KSIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjMKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAiQ2hhcmdlciAoY2hlY2tvdXQpIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzUKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozMiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzAgbGliL2Jyb3dzZXIudGNsOjI4MgorIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzkgbGliL2Nob29zZV9mb250LnRjbDo0MyBsaWIvbWVyZ2UudGNsOjE3MgorIzogbGliL29wdGlvbi50Y2w6MTI1IGxpYi9yZW1vdGVfYWRkLnRjbDozMiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQyCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0MCBsaWIvdG9vbHNfZGxnLnRjbDoyMDQgbGliL3Rvb2xzX2RsZy50Y2w6MzUyCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDgKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkFubnVsZXIiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMyIGxpYi9icm93c2VyLnRjbDoyODcgbGliL3Rvb2xzX2RsZy50Y2w6MzI4Cittc2dpZCAiUmV2aXNpb24iCittc2dzdHIgIlLDqXZpc2lvbiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzYgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjI4MAorbXNnaWQgIk9wdGlvbnMiCittc2dzdHIgIk9wdGlvbnMiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgorbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiUsOpY3Vww6lyZXIgbGEgYnJhbmNoZSBkZSBzdWl2aSIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDQKK21zZ2lkICJEZXRhY2ggRnJvbSBMb2NhbCBCcmFuY2giCittc2dzdHIgIkTDqXRhY2hlciBkZSBsYSBicmFuY2hlIGxvY2FsZSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIyCittc2dpZCAiQ3JlYXRlIEJyYW5jaCIKK21zZ3N0ciAiQ3LDqWVyIHVuZSBicmFuY2hlIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjcKK21zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKK21zZ3N0ciAiQ3LDqWVyIHVuZSBub3V2ZWxsZSBicmFuY2hlIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODEKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyw6llciIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQwCittc2dpZCAiQnJhbmNoIE5hbWUiCittc2dzdHIgIk5vbSBkZSBicmFuY2hlIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMgbGliL3JlbW90ZV9hZGQudGNsOjM5IGxpYi90b29sc19kbGcudGNsOjUwCittc2dpZCAiTmFtZToiCittc2dzdHIgIk5vbSA6IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTgKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKK21zZ3N0ciAiVHJvdXZlciBub20gZGUgYnJhbmNoZSBkZSBzdWl2aSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Cittc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCittc2dzdHIgIlLDqXZpc2lvbiBpbml0aWFsZSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjcyCittc2dpZCAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiCittc2dzdHIgIk1ldHRyZSDDoCBqb3VyIHVuZSBicmFuY2hlIGV4aXN0YW50ZSA6IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzUKK21zZ2lkICJObyIKK21zZ3N0ciAiTm9uIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODAKK21zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKK21zZ3N0ciAiTWlzZSDDoCBqb3VyIHJlY3RpbGlnbmUgc2V1bGVtZW50IChmYXN0LWZvcndhcmQpIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1NzEKK21zZ2lkICJSZXNldCIKK21zZ3N0ciAiUsOpaW5pdGlhbGlzZXIiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5NworbXNnaWQgIkNoZWNrb3V0IEFmdGVyIENyZWF0aW9uIgorbXNnc3RyICJDaGFyZ2VyIChjaGVja291dCkgYXByw6hzIGNyw6lhdGlvbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgorbXNnc3RyICJDaG9pc2lzc2V6IHVuZSBicmFuY2hlIGRlIHN1aXZpIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTQwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVHJhY2tpbmcgYnJhbmNoICVzIGlzIG5vdCBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIgorbXNnc3RyICJMYSBicmFuY2hlIGRlIHN1aXZpICVzIG4nZXN0IHBhcyB1bmUgYnJhbmNoZSBkYW5zIGxlIGTDqXDDtHQgZGlzdGFudC4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTMgbGliL2JyYW5jaF9yZW5hbWUudGNsOjg2Cittc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiRm91cm5pc3NleiB1biBub20gZGUgYnJhbmNoZS4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBub20gZGUgYnJhbmNoZSBhY2NlcHRhYmxlLiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE1Cittc2dpZCAiRGVsZXRlIEJyYW5jaCIKK21zZ3N0ciAiU3VwcHJpbWVyIGJyYW5jaGUiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMAorbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCittc2dzdHIgIlN1cHByaW1lciBicmFuY2hlIGxvY2FsZSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM3Cittc2dpZCAiTG9jYWwgQnJhbmNoZXMiCittc2dzdHIgIkJyYW5jaGVzIGxvY2FsZXMiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MgorbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgorbXNnc3RyICJTdXBwcmltZXIgc2V1bGVtZW50IHNpIGZ1c2lvbm7DqWUgZGFucyA6IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTQgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTkKK21zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCittc2dzdHIgIlRvdWpvdXJzIChuZSBwYXMgdsOpcmlmaWVyIGxlcyBmdXNpb25zKSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKK21zZ3N0ciAiTGVzIGJyYW5jaGVzIHN1aXZhbnRlcyBuZSBzb250IHBhcyBjb21wbMOodGVtZW50IGZ1c2lvbm7DqWVzIGRhbnMgJXMgOiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjExNSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNworbXNnaWQgIiIKKyJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgorIlxuIgorIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorbXNnc3RyICIiCisiSWwgZXN0IGRpZmZpY2lsZSBkZSByw6ljdXDDqXJlciBkZXMgYnJhbmNoZXMgc3VwcHJpbcOpZXMuXG4iCisiXG4iCisiU3VwcHJpbWVyIGxlcyBicmFuY2hlcyBzw6lsZWN0aW9ubsOpZXMgPyIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaGVzOlxuIgorIiVzIgorbXNnc3RyICIiCisiTGEgc3VwcHJlc3Npb24gZGVzIGJyYW5jaGVzIHN1aXZhbnRlcyBhIMOpY2hvdcOpIDpcbiIKKyIlcyIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMgorbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgIlJlbm9tbWVyIGJyYW5jaGUiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyNgorbXNnaWQgIlJlbmFtZSIKK21zZ3N0ciAiUmVub21tZXIiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozNgorbXNnaWQgIkJyYW5jaDoiCittc2dzdHIgIkJyYW5jaGUgOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM5Cittc2dpZCAiTmV3IE5hbWU6IgorbXNnc3RyICJOb3V2ZWF1IG5vbSA6IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NzUKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCittc2dzdHIgIk1lcmNpIGRlIHPDqWxlY3Rpb25uZXIgdW5lIGJyYW5jaGUgw6AgcmVub21tZXIuIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkxhIGJyYW5jaGUgJyVzJyBleGlzdGUgZMOpasOgLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjExNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCittc2dzdHIgIsOJY2hlYyBwb3VyIHJlbm9tbWVyICclcycuIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTcKK21zZ2lkICJTdGFydGluZy4uLiIKK21zZ3N0ciAiTGFuY2VtZW50Li4uIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MjYKK21zZ2lkICJGaWxlIEJyb3dzZXIiCittc2dzdHIgIlZpc2lvbm5ldXIgZGUgZmljaGllciIKKworIzogbGliL2Jyb3dzZXIudGNsOjEyNiBsaWIvYnJvd3Nlci50Y2w6MTQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyAlcy4uLiIKK21zZ3N0ciAiQ2hhcmdlbWVudCBkZSAlcy4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE4NworbXNnaWQgIltVcCBUbyBQYXJlbnRdIgorbXNnc3RyICJbSnVzcXUnYXUgcGFyZW50XSIKKworIzogbGliL2Jyb3dzZXIudGNsOjI2NyBsaWIvYnJvd3Nlci50Y2w6MjczCittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKK21zZ3N0ciAiTmF2aWd1ZXIgZGFucyBsZXMgZmljaGllcnMgZGUgbGUgYnJhbmNoZSIKKworIzogbGliL2Jyb3dzZXIudGNsOjI3OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyOAorbXNnaWQgIkJyb3dzZSIKK21zZ3N0ciAiTmF2aWd1ZXIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6ODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgorbXNnc3RyICJSw6ljdXDDqXJhdGlvbiBkZSAlcyDDoCBwYXJ0aXIgZGUgJXMiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgorbXNnc3RyICJlcnJldXIgZmF0YWxlIDogSW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgJXMiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQ2IGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvZGF0YWJhc2UudGNsOjMxCisjOiBsaWIvc3Noa2V5LnRjbDo1MworbXNnaWQgIkNsb3NlIgorbXNnc3RyICJGZXJtZXIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICJMYSBicmFuY2hlICclcycgbidleGlzdGUgcGFzLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgorbXNnc3RyICLDiWNoZWMgZGUgbGEgY29uZmlndXJhdGlvbiBzaW1wbGlmacOpZSBkZSBnaXQtcHVsbCBwb3VyICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKKyJcbiIKKyJJdCBjYW5ub3QgZmFzdC1mb3J3YXJkIHRvICVzLlxuIgorIkEgbWVyZ2UgaXMgcmVxdWlyZWQuIgorbXNnc3RyICIiCisiTGEgYnJhbmNoZSAnJXMnIGV4aXN0ZSBkw6lqw6AuXG4iCisiXG4iCisiSW1wb3NzaWJsZSBkZSBmYWlyZSB1bmUgYXZhbmNlIHJhcGlkZSAoZmFzdCBmb3J3YXJkKSB2ZXJzICVzLlxuIgorIlVuZSBmdXNpb24gZXN0IG7DqWNlc3NhaXJlLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJMYSBzdHJhdMOpZ2llIGRlIGZ1c2lvbiAnJXMnIG4nZXN0IHBhcyBzdXBwb3J0w6llLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgorbXNnc3RyICJMYSBtaXNlIMOgIGpvdXIgZGUgJyVzJyBhIMOpY2hvdcOpLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKK21zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCittc2dzdHIgIkwnaW5kZXggKHN0YWdpbmcgYXJlYSkgZXN0IGTDqWrDoCB2ZXJyb3VpbGzDqS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJMJ8OpdGF0IGxvcnMgZGUgbGEgZGVybmnDqHJlIHN5bmNocm9uaXNhdGlvbiBuZSBjb3JyZXNwb25kIHBsdXMgw6AgbCfDqXRhdCBkdSAiCisiZMOpcMO0dC5cbiIKKyJcbiIKKyJVbiBhdXRyZSBwcm9ncmFtbWUgR2l0IGEgbW9kaWZpw6kgY2UgZMOpcMO0dCBkZXB1aXMgbGEgZGVybmnDqHJlICIKKyJzeW5jaHJvbmlzYXRpb24uIFVuZSByZXN5bmNocm9uaXNhdGlvbiBkb2l0IMOqdHJlIGVmZmVjdHXDqWUgYXZhbnQgZGUgcG91dm9pciAiCisibW9kaWZpZXIgbGEgYnJhbmNoZSBjb3VyYW50ZS5cbiIKKyJcbiIKKyJDZWxhIHZhIMOqdHJlIGZhaXQgdG91dCBkZSBzdWl0ZSBhdXRvbWF0aXF1ZW1lbnQuXG4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKK21zZ3N0ciAiTWlzZSDDoCBqb3VyIGR1IHLDqXBlcnRvaXJlIGNvdXJhbnQgYXZlYyAnJXMnLi4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgorbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgorbXNnc3RyICJmaWNoaWVycyBjaGFyZ8OpcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorbXNnc3RyICIiCisiQ2hhcmdlbWVudCBkZSAnJXMnIGFiYW5kb25uw6kgKGlsIGVzdCBuw6ljZXNzYWlyZSBkZSBmdXNpb25uZXIgZGVzIGZpY2hpZXJzKS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc3Cittc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCittc2dzdHIgIklsIGVzdCBuw6ljZXNzYWlyZSBkZSBmdXNpb25uZXIgZGVzIGZpY2hpZXJzLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiTGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCByZXN0ZSBzdXIgbGEgYnJhbmNoZSAnJXMnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKK21zZ2lkICIiCisiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCisiQ2hlY2tvdXQnLiIKK21zZ3N0ciAiIgorIlZvdXMgbifDqnRlcyBwbHVzIHN1ciB1bmUgYnJhbmNoZSBsb2NhbGUuXG4iCisiXG4iCisiU2kgdm91cyB2b3VsaWV6IMOqdHJlIHN1ciB1bmUgYnJhbmNoZSwgY3LDqWV6LWVuIHVuZSBtYWludGVuYW50IGVuIHBhcnRhbnQgZGUgIgorIidDZXQgZW1wcnVudCBkw6l0YWNow6knLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDMgbGliL2NoZWNrb3V0X29wLnRjbDo1MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaGVja2VkIG91dCAnJXMnLiIKK21zZ3N0ciAiJyVzJyBjaGFyZ8OpLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgorbXNnc3RyICJSw6lpbml0aWFsaXNlciAnJXMnIMOgICclcycgdmEgZmFpcmUgcGVyZHJlIGxlcyBjb21taXRzIHN1aXZhbnRzIDoiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Cittc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKK21zZ3N0ciAiUsOpY3Vww6lyZXIgbGVzIGNvbW1pdHMgcGVyZHVzIG5lIHNlcmEgcGV1dCDDqnRyZSBwYXMgZmFjaWxlLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAnJXMnPyIKK21zZ3N0ciAiUsOpaW5pdGlhbGlzZXIgJyVzJyA/IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKK21zZ2lkICJWaXN1YWxpemUiCittc2dzdHIgIlZpc3VhbGlzZXIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCisiXG4iCisiVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKKyJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKK21zZ3N0ciAiIgorIkxlIGNoYW5nZW1lbnQgZGUgbGEgYnJhbmNoZSBjb3VyYW50ZSBhIMOpY2hvdcOpLlxuIgorIlxuIgorIkxlIHLDqXBlcnRvaXJlIGNvdXJhbnQgbidlc3QgcXVlIHBhcnRpZWxsZW1lbnQgbW9kaWZpw6kuIExlcyBmaWNoaWVycyBvbnQgw6l0w6kgIgorIm1pcyDDoCBqb3VyIGF2ZWMgc3VjY8OocywgbWFpcyBsYSBtaXNlIMOgIGpvdXIgZCd1biBmaWNoaWVyIGludGVybmUgw6AgR2l0IGEgIgorIsOpY2hvdcOpZS5cbiIKKyJcbiIKKyJDZWxhIG4nYXVyYWl0IHBhcyBkw7sgc2UgcHJvZHVpcmUuICVzIHZhIGFiYW5kb25uZXIgZXQgc2UgdGVybWluZXIuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjM5Cittc2dpZCAiU2VsZWN0IgorbXNnc3RyICJTw6lsZWN0aW9ubmVyIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjUzCittc2dpZCAiRm9udCBGYW1pbHkiCittc2dzdHIgIkZhbWlsbGVzIGRlIHBvbGljZXMiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzQKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgIlRhaWxsZSBkZSBwb2xpY2UiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTEKK21zZ2lkICJGb250IEV4YW1wbGUiCittc2dzdHIgIkV4ZW1wbGUgZGUgcG9saWNlIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwMworbXNnaWQgIiIKKyJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKKyJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorbXNnc3RyICIiCisiQ2VjaSBlc3QgdW4gdGV4dGUgZCdleGVtcGxlLlxuIgorIlNpIHZvdXMgYWltZXogY2UgdGV4dGUsIHZvdXMgcG91dmV6IGNob2lzaXIgY2V0dGUgcG9saWNlLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyOAorbXNnaWQgIkdpdCBHdWkiCittc2dzdHIgIkdpdCBHdWkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODYKK21zZ2lkICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiCittc2dzdHIgIkNyw6llciBub3V2ZWF1IGTDqXDDtHQiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMKK21zZ2lkICJOZXcuLi4iCittc2dzdHIgIk5vdXZlYXUuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcxCittc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKK21zZ3N0ciAiQ2xvbmVyIHVuIGTDqXDDtHQgZXhpc3RhbnQiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2Cittc2dpZCAiQ2xvbmUuLi4iCittc2dzdHIgIkNsb25lci4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE2Cittc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICJPdXZyaXIgdW4gZMOpcMO0dCBleGlzdGFudCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTkKK21zZ2lkICJPcGVuLi4uIgorbXNnc3RyICJPdXZyaXIuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTMyCittc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKK21zZ3N0ciAiRMOpcMO0dHMgcsOpY2VtbWVudCB1dGlsaXPDqXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTM4Cittc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCittc2dzdHIgIk91dnJpciB1biBkw6lww7R0IHLDqWNlbnQgOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAiTGEgY3LDqWF0aW9uIGR1IGTDqXDDtHQgJXMgYSDDqWNob3XDqSA6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5MQorbXNnaWQgIkRpcmVjdG9yeToiCittc2dzdHIgIlLDqXBlcnRvaXJlIDoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTIKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSIKK21zZ3N0ciAiRMOpcMO0dCBHaXQiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiTGUgcsOpcGVydG9pcmUgJXMgZXhpc3RlIGTDqWrDoC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkxlIGZpY2hpZXIgJXMgZXhpc3RlIGTDqWrDoC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDY2Cittc2dpZCAiQ2xvbmUiCittc2dzdHIgIkNsb25lciIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzkKK21zZ2lkICJTb3VyY2UgTG9jYXRpb246IgorbXNnc3RyICJFbXBsYWNlbWVudCBzb3VyY2UgOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTAKK21zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKK21zZ3N0ciAiUsOpcGVydG9pcmUgY2libGUgOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDIKK21zZ2lkICJDbG9uZSBUeXBlOiIKK21zZ3N0ciAiVHlwZSBkZSBjbG9uYWdlIDoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA4Cittc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgorbXNnc3RyICJTdGFuZGFyZCAocmFwaWRlLCBzZW1pLXJlZG9uZGFudCwgbGllbnMgZHVycykiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0Cittc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgorbXNnc3RyICJDb3BpZSBjb21wbMOodGUgKHBsdXMgbGVudCwgc2F1dmVnYXJkZSByZWRvbmRhbnRlKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjAKK21zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKK21zZ3N0ciAiUGFydGFnw6kgKGxlIHBsdXMgcmFwaWRlLCBub24gcmVjb21tYW5kw6ksIHBhcyBkZSBzYXV2ZWdhcmRlKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MDMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODE5CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBkw6lww7R0IEdpdC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkyCittc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJTdGFuZGFyZCBuJ2VzdCBkaXNwb25pYmxlIHF1ZSBwb3VyIHVuIGTDqXDDtHQgbG9jYWwuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5NgorbXNnaWQgIlNoYXJlZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIlBhcnRhZ8OpIG4nZXN0IGRpc3BvbmlibGUgcXVlIHBvdXIgdW4gZMOpcMO0dCBsb2NhbC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJMJ2VtcGxhY2VtZW50ICVzIGV4aXN0ZSBkw6lqw6AuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyOAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgorbXNnc3RyICJMYSBjb25maWd1cmF0aW9uIGRlIGwnb3JpZ2luZSBhIMOpY2hvdcOpLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDAKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICJEw6ljb21wdGUgZGVzIG9iamV0cyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDEKK21zZ2lkICJidWNrZXRzIgorbXNnc3RyICJwYW5pZXJzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjb3BpZXIgJ29iamVjdHMvaW5mby9hbHRlcm5hdGVzJyA6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCittc2dzdHIgIklsIG4neSBhIHJpZW4gw6AgY2xvbmVyIGRlcHVpcyAlcy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyOQorbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKK21zZ3N0ciAiTGEgYnJhbmNoZSAnbWFzdGVyJyBuJ2EgcGFzIMOpdMOpIGluaXRpYWxpc8OpZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE2Cittc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKK21zZ3N0ciAiIgorIkxlcyBsaWVucyBkdXJzIG5lIHNvbnQgcGFzIHN1cHBvcnTDqXMuIFVuZSBjb3BpZSBzZXJhIGVmZmVjdHXDqWUgw6AgbGEgcGxhY2UuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKK21zZ3N0ciAiQ2xvbmFnZSBkZXB1aXMgJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzU5Cittc2dpZCAiQ29weWluZyBvYmplY3RzIgorbXNnc3RyICJDb3BpZSBkZXMgb2JqZXRzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MAorbXNnaWQgIktpQiIKK21zZ3N0ciAiS2lCIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgY29waWVyIGwnb2JqZXQgOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTQKK21zZ2lkICJMaW5raW5nIG9iamVjdHMiCittc2dzdHIgIkxpYWlzb24gZGVzIG9iamV0cyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTUKK21zZ2lkICJvYmplY3RzIgorbXNnc3RyICJvYmpldHMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCittc2dzdHIgIkltcG9zc2libGUgY3LDqWVyIHVuIGxpZW4gZHVyIHBvdXIgbCdvYmpldCA6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg1OAorbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIHLDqWN1cMOpcmVyIGxlcyBicmFuY2hlcyBldCBvYmpldHMuIFZvaXIgbGEgc29ydGllIGNvbnNvbGUgcG91ciAiCisicGx1cyBkZSBkw6l0YWlscy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODY5Cittc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBsZXMgbWFycXVlcyAodGFncykuIFZvaXIgbGEgc29ydGllIGNvbnNvbGUgcG91ciBwbHVzICIKKyJkZSBkw6l0YWlscy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkzCittc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZGUgZMOpdGVybWluZXIgSEVBRC4gVm9pciBsYSBzb3J0aWUgY29uc29sZSBwb3VyIHBsdXMgZGUgZMOpdGFpbHMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIG5ldHRveWVyICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOAorbXNnaWQgIkNsb25lIGZhaWxlZC4iCittc2dzdHIgIkxlIGNsb25hZ2UgYSDDqWNob3XDqS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE1Cittc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgorbXNnc3RyICJBdWN1bmUgYnJhbmNoZSBwYXIgZMOpZmF1dCBuJ2Egw6l0w6kgb2J0ZW51ZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSAlcyBjb21tZSBjb21taXQuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOAorbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJDcsOpYXRpb24gZHUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzkgbGliL2luZGV4LnRjbDo2NyBsaWIvaW5kZXgudGNsOjEzMAorIzogbGliL2luZGV4LnRjbDoxOTgKK21zZ2lkICJmaWxlcyIKK21zZ3N0ciAiZmljaGllcnMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTY4Cittc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCittc2dzdHIgIkxlIGNoYXJnZW1lbnQgaW5pdGlhbCBkdSBmaWNoaWVyIGEgw6ljaG91w6kuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTEKK21zZ2lkICJPcGVuIgorbXNnc3RyICJPdXZyaXIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyMQorbXNnaWQgIlJlcG9zaXRvcnk6IgorbXNnc3RyICJEw6lww7R0IDoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJJbXBvc3NpYmxlIGQnb3V2cmlyIGxlIGTDqXDDtHQgJXMgOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjUzCittc2dpZCAiVGhpcyBEZXRhY2hlZCBDaGVja291dCIKK21zZ3N0ciAiQ2V0IGVtcHJ1bnQgZMOpdGFjaMOpIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKK21zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKK21zZ3N0ciAiRXhwcmVzc2lvbiBkZSByw6l2aXNpb24gOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc0Cittc2dpZCAiTG9jYWwgQnJhbmNoIgorbXNnc3RyICJCcmFuY2hlIGxvY2FsZSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc5Cittc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICJCcmFuY2hlIGRlIHN1aXZpIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODQgbGliL2Nob29zZV9yZXYudGNsOjUzOAorbXNnaWQgIlRhZyIKK21zZ3N0ciAiTWFycXVlICh0YWcpIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXZpc2lvbjogJXMiCittc2dzdHIgIlLDqXZpc2lvbiBpbnZhbGlkZSA6ICVzIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzM4Cittc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgorbXNnc3RyICJQYXMgZGUgcsOpdmlzaW9uIHPDqWxlY3Rpb25uw6llLiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjM0NgorbXNnaWQgIlJldmlzaW9uIGV4cHJlc3Npb24gaXMgZW1wdHkuIgorbXNnc3RyICJMJ2V4cHJlc3Npb24gZGUgcsOpdmlzaW9uIGVzdCB2aWRlLiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjUzMQorbXNnaWQgIlVwZGF0ZWQiCittc2dzdHIgIk1pc2Ugw6Agam91cjoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTkKK21zZ2lkICJVUkwiCittc2dzdHIgIlVSTCIKKworIzogbGliL2NvbW1pdC50Y2w6OQorbXNnaWQgIiIKKyJUaGVyZSBpcyBub3RoaW5nIHRvIGFtZW5kLlxuIgorIlxuIgorIllvdSBhcmUgYWJvdXQgdG8gY3JlYXRlIHRoZSBpbml0aWFsIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGNvbW1pdCBiZWZvcmUgdGhpcyAiCisidG8gYW1lbmQuXG4iCittc2dzdHIgIiIKKyJJbCBuJ3kgYSByaWVuIMOgIGNvcnJpZ2VyLlxuIgorIlxuIgorIlZvdXMgYWxsZXogY3LDqWVyIGxlIGNvbW1pdCBpbml0aWFsLiBJbCBuJ3kgYSBwYXMgZGUgY29tbWl0IGF2YW50IGNlbHVpLWNpIMOgICIKKyJjb3JyaWdlci5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgKK21zZ2lkICIiCisiQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCisiXG4iCisiWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKKyJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgorImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGNvcnJpZ2VyIHBlbmRhbnQgdW5lIGZ1c2lvbi5cbiIKKyJcbiIKKyJWb3VzIMOqdGVzIGFjdHVlbGxlbWVudCBhdSBtaWxpZXUgZCd1bmUgZnVzaW9uIHF1aSBuJ2EgcGFzIMOpdMOpIGNvbXBsw6h0ZW1lbnQgIgorInRlcm1pbsOpZS4gVm91cyBuZSBwb3V2ZXogcGFzIGNvcnJpZ2VyIGxlIGNvbW1pdCBwcsOpY8OpZGVudCBzYXVmIHNpIHZvdXMgIgorImFiYW5kb25uZXogbGEgZnVzaW9uIGNvdXJhbnRlLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDo0OAorbXNnaWQgIkVycm9yIGxvYWRpbmcgY29tbWl0IGRhdGEgZm9yIGFtZW5kOiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZHUgY2hhcmdlbWVudCBkZXMgZG9ubsOpZXMgZGUgY29tbWl0IHBvdXIgY29ycmVjdGlvbiA6IgorCisjOiBsaWIvY29tbWl0LnRjbDo3NQorbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCittc2dzdHIgIkltcG9zc2libGUgZCdvYnRlbmlyIHZvdHJlIGlkZW50aXTDqSA6IgorCisjOiBsaWIvY29tbWl0LnRjbDo4MAorbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCittc2dzdHIgIkdJVF9DT01NSVRURVJfSURFTlQgaW52YWxpZGUgOiIKKworIzogbGliL2NvbW1pdC50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCittc2dzdHIgImF0dGVudGlvbiA6IFRjbCBuZSBzdXBwb3J0ZSBwYXMgbGUgY29kYWdlICclcycuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNDkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiTCfDqXRhdCBsb3JzIGRlIGxhIGRlcm5pw6hyZSBzeW5jaHJvbmlzYXRpb24gbmUgY29ycmVzcG9uZCBwbHVzIMOgIGwnw6l0YXQgZHUgIgorImTDqXDDtHQuXG4iCisiXG4iCisiVW4gYXV0cmUgcHJvZ3JhbW1lIEdpdCBhIG1vZGlmacOpIGNlIGTDqXDDtHQgZGVwdWlzIGxhIGRlcm5pw6hyZSAiCisic3luY2hyb25pc2F0aW9uLiBVbmUgcmVzeW5zaHJvbmlzYXRpb24gZG9pdCDDqnRyZSBlZmZlY3R1w6llIGF2YW50IGRlIHBvdXZvaXIgIgorImNyw6llciB1biBub3V2ZWF1IGNvbW1pdC5cbiIKKyJcbiIKKyJDZWxhIHZhIMOqdHJlIGZhaXQgdG91dCBkZSBzdWl0ZSBhdXRvbWF0aXF1ZW1lbnQuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgorIlxuIgorIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4gIFlvdSBtdXN0IHJlc29sdmUgdGhlbSBhbmQgc3RhZ2UgdGhlIGZpbGUgIgorImJlZm9yZSBjb21taXR0aW5nLlxuIgorbXNnc3RyICIiCisiRGVzIGZpY2hpZXJzIG5vbiBmdXNpb25uw6lzIG5lIHBldXZlbnQgw6p0cmUgY29tbWl0w6lzLlxuIgorIlxuIgorIkxlIGZpY2hpZXIgJXMgYSBkZXMgY29uZmxpY3RzIGRlIGZ1c2lvbi4gVm91cyBkZXZleiBsZXMgcsOpc291ZHJlIGV0IHByw6ktIgorImNvbW1pdGVyIGxlIGZpY2hpZXIgYXZhbnQgZGUgcG91dm9pciBjb21taXRlci5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGNhbm5vdCBiZSBjb21taXR0ZWQgYnkgdGhpcyBwcm9ncmFtLlxuIgorbXNnc3RyICIiCisiVW4gw6l0YXQgZGUgZmljaGllciBpbmNvbm51ICVzIGEgw6l0w6kgZMOpdGVjdMOpLlxuIgorIlxuIgorIkxlIGZpY2hpZXIgJXMgbmUgcGV1dCBwYXMgw6p0cmUgY29tbWl0w6kgcGFyIGNlIHByb2dyYW1tZS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTg4Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIllvdSBtdXN0IHN0YWdlIGF0IGxlYXN0IDEgZmlsZSBiZWZvcmUgeW91IGNhbiBjb21taXQuXG4iCittc2dzdHIgIiIKKyJQYXMgZGUgbW9kaWZpY2F0aW9uIMOgIGNvbW1pdGVyLlxuIgorIlxuIgorIlZvdXMgZGV2ZXogaW5kZXhlciBhdSBtb2lucyAxIGZpY2hpZXIgYXZhbnQgZGUgcG91dm9pciBjb21taXRlci5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MjAzCittc2dpZCAiIgorIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuIgorIlxuIgorIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKKyItIFNlY29uZCBsaW5lOiBCbGFua1xuIgorIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKK21zZ3N0ciAiIgorIk1lcmNpIGRlIGZvdXJuaXIgdW4gbWVzc2FnZSBkZSBjb21taXQuXG4iCisiXG4iCisiVW4gYm9uIG1lc3NhZ2UgZGUgY29tbWl0IGEgbGUgZm9ybWF0IHN1aXZhbnQgOlxuIgorIlxuIgorIi0gUHJlbWnDqHJlIGxpZ25lIDogZMOpY3JpcmUgZW4gdW5lIHBocmFzZSBjZSBxdWUgdm91cyBhdmV6IGZhaXQuXG4iCisiLSBEZXV4acOobWUgbGlnbmUgOiByaWVuLlxuIgorIi0gTGlnbmVzIHN1aXZhbnRlcyA6IETDqWNyaXJlIHBvdXJxdW9pIGNlcyBtb2RpZmljYXRpb25zIHNvbnQgYm9ubmVzLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMzQKK21zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKK21zZ3N0ciAiTGFuY2VtZW50IGRlIGwnYWN0aW9uIGQnYXZhbnQtY29tbWl0Li4uIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNDkKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKK21zZ3N0ciAiQ29tbWl0IHJlZnVzw6kgcGFyIGwnYWN0aW9uIGQnYXZhbnQtY29tbWl0LiIKKworIzogbGliL2NvbW1pdC50Y2w6MjcyCittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgIkxhbmNlbWVudCBkZSBsJ2FjdGlvbiBcIm1lc3NhZ2UgZGUgY29tbWl0XCIuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjI4NworbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgorbXNnc3RyICJDb21taXQgcmVmdXPDqSBwYXIgbCdhY3Rpb24gXCJtZXNzYWdlIGRlIGNvbW1pdFwiLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzAwCittc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgorbXNnc3RyICJDb21taXQgZGVzIG1vZGlmaWNhdGlvbnMuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjMxNgorbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAid3JpdGUtdHJlZSBhIMOpY2hvdcOpIDoiCisKKyM6IGxpYi9jb21taXQudGNsOjMxNyBsaWIvY29tbWl0LnRjbDozNjEgbGliL2NvbW1pdC50Y2w6MzgyCittc2dpZCAiQ29tbWl0IGZhaWxlZC4iCittc2dzdHIgIkxlIGNvbW1pdCBhIMOpY2hvdcOpLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGFwcGVhcnMgdG8gYmUgY29ycnVwdCIKK21zZ3N0ciAiTGUgY29tbWl0ICVzIHNlbWJsZSDDqnRyZSBjb3Jyb21wdSIKKworIzogbGliL2NvbW1pdC50Y2w6MzM5Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiUGFzIGRlIG1vZGlmaWNhdGlvbiDDoCBjb21taXRlci5cbiIKKyJcbiIKKyJBdWN1biBmaWNoaWVyIG4nYSDDqXTDqSBtb2RpZmnDqSBwYXIgY2UgY29tbWl0IGV0IGlsIG5lIHMnYWdpdCBwYXMgZCd1biBjb21taXQgIgorImRlIGZ1c2lvbi5cbiIKKyJcbiIKKyJVbmUgcmVzeW5jaHJvbmlzYXRpb24gdmEgw6p0cmUgbGFuY8OpZSB0b3V0IGRlIHN1aXRlIGF1dG9tYXRpcXVlbWVudC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzQ2Cittc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgorbXNnc3RyICJQYXMgZGUgbW9kaWZpY2F0aW9ucyDDoCBjb21taXRlci4iCisKKyM6IGxpYi9jb21taXQudGNsOjM2MAorbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCittc2dzdHIgImNvbW1pdC10cmVlIGEgw6ljaG91w6kgOiIKKworIzogbGliL2NvbW1pdC50Y2w6MzgxCittc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgorbXNnc3RyICJ1cGRhdGUtcmVmIGEgw6ljaG91w6kgOiIKKworIzogbGliL2NvbW1pdC50Y2w6NDY5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgorbXNnc3RyICJDb21taXQgJXMgY3LDqcOpIDogJXMiCisKKyM6IGxpYi9jb25zb2xlLnRjbDo1OQorbXNnaWQgIldvcmtpbmcuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIlRyYXZhaWwgZW4gY291cnMuLi4gbWVyY2kgZGUgcGF0aWVudGVyLi4uIgorCisjOiBsaWIvY29uc29sZS50Y2w6MTg2Cittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAiU3VjY8OocyIKKworIzogbGliL2NvbnNvbGUudGNsOjIwMAorbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKK21zZ3N0ciAiRXJyZXVyIDogw6ljaGVjIGRlIGxhIGNvbW1hbmRlIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQzCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIk5vbWJyZSBkJ29iamV0cyBlbiBmaWNoaWVyIHBhcnRpY3VsaWVyIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ0Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCittc2dzdHIgIkVzcGFjZSBkaXNxdWUgdXRpbGlzw6kgcGFyIGxlcyBmaWNoaWVycyBwYXJ0aWN1bGllcnMiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKK21zZ2lkICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIk5vbWJyZSBkJ29iamV0cyBlbXBhcXVldMOpcyIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NgorbXNnaWQgIk51bWJlciBvZiBwYWNrcyIKK21zZ3N0ciAiTm9tYnJlIGRlIHBhcXVldHMgZCdvYmpldHMiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIkVzcGFjZSBkaXNxdWUgdXRpbGlzw6kgcGFyIGxlcyBvYmpldHMgZW1wYXF1ZXTDqXMiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKK21zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgorbXNnc3RyICJPYmpldHMgZW1wYXF1ZXTDqXMgYXR0ZW5kYW50IGQnw6p0cmUgc3VwcHJpbcOpcyIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OQorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgIkZpY2hpZXJzIHBvdWJlbGxlIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjcyCittc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiQ29tcHJlc3Npb24gZGUgbGEgYmFzZSBkZXMgb2JqZXRzIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjgzCittc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCittc2dzdHIgIlbDqXJpZmljYXRpb24gZGUgbGEgYmFzZSBkZXMgb2JqZXRzIGF2ZWMgZnNjay1vYmplY3RzIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjEwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCisiXG4iCisiVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyAiCisidGhlIGRhdGFiYXNlLlxuIgorIlxuIgorIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgorbXNnc3RyICIiCisiQ2UgZMOpcMO0dCBjb21wcmVuZCBhY3R1ZWxsZW1lbnQgZW52aXJvbiAlaSBvYmpldHMgYXlhbnQgbGV1ciBmaWNoaWVyICIKKyJwYXJ0aWN1bGllci5cbiIKKyJcbiIKKyJQb3VyIGNvbnNlcnZlciB1bmUgcGVyZm9ybWFuY2Ugb3B0aW1hbGUsIGlsIGVzdCBmb3J0ZW1lbnQgcmVjb21tYW5kw6kgZGUgIgorImNvbXByaW1lciBsYSBiYXNlIGRlIGRvbm7DqWUuXG4iCisiXG4iCisiQ29tcHJpbWVyIGxhIGJhc2UgbWFpbnRlbmFudCA/IgorCisjOiBsaWIvZGF0ZS50Y2w6MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgorbXNnc3RyICJEYXRlIGludmFsaWRlIGRlIEdpdCA6ICVzIgorCisjOiBsaWIvZGlmZi50Y2w6NjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCisiXG4iCisiJXMgaGFzIG5vIGNoYW5nZXMuXG4iCisiXG4iCisiVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgIgorInRoZSBjb250ZW50IHdpdGhpbiB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gZmluZCBvdGhlciBmaWxlcyB3aGljaCBtYXkgaGF2ZSAiCisidGhlIHNhbWUgc3RhdGUuIgorbXNnc3RyICIiCisiQXVjdW5lIGRpZmbDqXJlbmNlIGTDqXRlY3TDqWUuXG4iCisiXG4iCisiJXMgbmUgY29tcG9ydGUgYXVjdW5lIG1vZGlmaWNhdGlvbi5cbiIKKyJcbiIKKyJMYSBkYXRlIGRlIG1vZGlmaWNhdGlvbiBkZSBjZSBmaWNoaWVyIGEgw6l0w6kgbWlzZSDDoCBqb3VyIHBhciB1bmUgYXV0cmUgIgorImFwcGxpY2F0aW9uLCBtYWlzIGxlIGNvbnRlbnUgZHUgZmljaGllciBuJ2EgcGFzIGNoYW5nw6kuXG4iCisiXG4iCisiVW5lIHJlc3luY2hyb25pc2F0aW9uIHZhIMOqdHJlIGxhbmPDqWUgYXV0b21hdGlxdWVtZW50IHBvdXIgdHJvdXZlciBkJ2F1dHJlcyAiCisiZmljaGllcnMgcXVpIHBvdXJyYWllbnQgc2UgdHJvdXZlciBkYW5zIGxlIG3Dqm1lIMOpdGF0LiIKKworIzogbGliL2RpZmYudGNsOjEwNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKK21zZ3N0ciAiQ2hhcmdlbWVudCBkZXMgZGlmZsOpcmVuY2VzIGRlICVzLi4uIgorCisjOiBsaWIvZGlmZi50Y2w6MTI1Cittc2dpZCAiIgorIkxPQ0FMOiBkZWxldGVkXG4iCisiUkVNT1RFOlxuIgorbXNnc3RyICIiCisiTE9DQUwgOiBzdXBwcmltw6lcbiIKKyJESVNUQU5UIDpcbiIKKworIzogbGliL2RpZmYudGNsOjEzMAorbXNnaWQgIiIKKyJSRU1PVEU6IGRlbGV0ZWRcbiIKKyJMT0NBTDpcbiIKK21zZ3N0ciAiIgorIkRJU1RBTlQgOiBzdXBwcmltw6lcbiIKKyJMT0NBTCA6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMzcKK21zZ2lkICJMT0NBTDpcbiIKK21zZ3N0ciAiTE9DQUwgOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTQwCittc2dpZCAiUkVNT1RFOlxuIgorbXNnc3RyICJESVNUQU5UIDpcbiIKKworIzogbGliL2RpZmYudGNsOjIwMiBsaWIvZGlmZi50Y2w6MzE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCittc2dzdHIgIkltcG9zc2libGUgZCdhZmZpY2hlciAlcyIKKworIzogbGliL2RpZmYudGNsOjIwMworbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCittc2dzdHIgIkVycmV1ciBsb3JzIGR1IGNoYXJnZW1lbnQgZHUgZmljaGllciA6IgorCisjOiBsaWIvZGlmZi50Y2w6MjEwCittc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgorbXNnc3RyICJEw6lww7R0IEdpdCAoc291cyBwcm9qZXQpIgorCisjOiBsaWIvZGlmZi50Y2w6MjIyCittc2dpZCAiKiBCaW5hcnkgZmlsZSAobm90IHNob3dpbmcgY29udGVudCkuIgorbXNnc3RyICIqIEZpY2hpZXIgYmluYWlyZSAocGFzIGQnYXBwZXLDp3UgZHUgY29udGVudSkuIgorCisjOiBsaWIvZGlmZi50Y2w6MjI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCisiKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCittc2dzdHIgIiIKKyIqIExlIGZpY2hpZXIgbm9uIHN1aXZpIGZhaXQgJWQgb2N0ZXRzLlxuIgorIiogU2V1bHMgbGVzICVkIHByZW1pZXJzIG9jdGV0cyBzb250IG1vbnRyw6lzLlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgorIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKK21zZ3N0ciAiIgorIlxuIgorIiogRmljaGllciBzdWl2aSByYWNjb3VyY2lzIGljaSBkZSAlcy5cbiIKKyIqIFBvdXIgdm9pciBsZSBmaWNoaWVyIGVudGllciwgdXRpbGlzZXogdW4gw6lkaXRldXIgZXh0ZXJuZS5cbiIKKworIzogbGliL2RpZmYudGNsOjQ4MgorbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgorbXNnc3RyICLDiWNoZWMgbG9ycyBkZSBsYSBkw6lzaW5kZXhhdGlvbiBkZSBsYSBzZWN0aW9uIHPDqWxlY3Rpb25uw6llLiIKKworIzogbGliL2RpZmYudGNsOjQ4OQorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAiw4ljaGVjIGxvcnMgZGUgbCdpbmRleGF0aW9uIGRlIGxhIHNlY3Rpb24uIgorCisjOiBsaWIvZGlmZi50Y2w6NTY4Cittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgIsOJY2hlYyBsb3JzIGRlIGxhIGTDqXNpbmRleGF0aW9uIGRlIGxhIGxpZ25lIHPDqWxlY3Rpb25uw6llLiIKKworIzogbGliL2RpZmYudGNsOjU3NgorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAiw4ljaGVjIGxvcnMgZGUgbCdpbmRleGF0aW9uIGRlIGxhIGxpZ25lLiIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDMKK21zZ2lkICJEZWZhdWx0IgorbXNnc3RyICJEw6lmYXV0IgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN5c3RlbSAoJXMpIgorbXNnc3RyICJTeXN0w6htZSAoJXMpIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ1OSBsaWIvZW5jb2RpbmcudGNsOjQ2NQorbXNnaWQgIk90aGVyIgorbXNnc3RyICJBdXRyZSIKKworIzogbGliL2Vycm9yLnRjbDoyMCBsaWIvZXJyb3IudGNsOjExNAorbXNnaWQgImVycm9yIgorbXNnc3RyICJlcnJldXIiCisKKyM6IGxpYi9lcnJvci50Y2w6MzYKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICJhdHRlbnRpb24iCisKKyM6IGxpYi9lcnJvci50Y2w6OTQKK21zZ2lkICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIgorbXNnc3RyICJWb3VzIGRldmV6IGNvcnJpZ2VyIGxlcyBlcnJldXJzIHN1aXZhbnRlcyBhdmFudCBkZSBwb3V2b2lyIGNvbW1pdGVyLiIKKworIzogbGliL2luZGV4LnRjbDo2Cittc2dpZCAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqXZlcnJvdWlsbGVyIGwnaW5kZXguIgorCisjOiBsaWIvaW5kZXgudGNsOjE1Cittc2dpZCAiSW5kZXggRXJyb3IiCittc2dzdHIgIkVycmV1ciBkZSBsJ2luZGV4IgorCisjOiBsaWIvaW5kZXgudGNsOjE3Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgorInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCittc2dzdHIgIiIKKyLDiWNoZWMgZGUgbGEgbWlzZSDDoCBqb3VyIGRlIGwnaW5kZXguIFVuZSByZXN5bmNocm9uaXNhdGlvbiB2YSDDqnRyZSBsYW5jw6llICIKKyJhdXRvbWF0aXF1ZW1lbnQuIgorCisjOiBsaWIvaW5kZXgudGNsOjI4Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIkNvbnRpbnVlciIKKworIzogbGliL2luZGV4LnRjbDozMQorbXNnaWQgIlVubG9jayBJbmRleCIKK21zZ3N0ciAiRMOpdmVycm91aWxsZXIgbCdpbmRleCIKKworIzogbGliL2luZGV4LnRjbDoyODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCittc2dzdHIgIkTDqXNpbmRleGF0aW9uIGRlIDogJXMiCisKKyM6IGxpYi9pbmRleC50Y2w6MzI4Cittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAiUHLDqnQgw6Agw6p0cmUgY29tbWl0w6kuIgorCisjOiBsaWIvaW5kZXgudGNsOjM0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAiQWpvdXQgZGUgJXMiCisKKyM6IGxpYi9pbmRleC50Y2w6Mzk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCittc2dzdHIgIkFubnVsZXIgbGVzIG1vZGlmaWNhdGlvbnMgZGFucyBsZSBmaWNoaWVyICVzID8gIgorCisjOiBsaWIvaW5kZXgudGNsOjQwMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKK21zZ3N0ciAiQW5udWxlciBsZXMgbW9kaWZpY2F0aW9ucyBkYW5zIGNlcyAlaSBmaWNoaWVycyA/IgorCisjOiBsaWIvaW5kZXgudGNsOjQwOAorbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKK21zZ3N0ciAiIgorIlRvdXRlcyBsZXMgbW9kaWZpY2F0aW9ucyBub24taW5kZXjDqWVzIHNlcm9udCBkw6lmaW5pdGl2ZW1lbnQgcGVyZHVlcyBwYXIgIgorImwnYW5udWxhdGlvbi4iCisKKyM6IGxpYi9pbmRleC50Y2w6NDExCittc2dpZCAiRG8gTm90aGluZyIKK21zZ3N0ciAiTmUgcmllbiBmYWlyZSIKKworIzogbGliL2luZGV4LnRjbDo0MjkKK21zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCittc2dzdHIgIkFubnVsZXIgbW9kaWZpY2F0aW9ucyBkYW5zIGZpY2hpZXJzIHNlbGVjdGlvbm7DqXMiCisKKyM6IGxpYi9pbmRleC50Y2w6NDMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nICVzIgorbXNnc3RyICJBbm51bGF0aW9uIGRlcyBtb2RpZmljYXRpb25zIGRhbnMgJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMKK21zZ2lkICIiCisiQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGZ1c2lvbm5lciBwZW5kYW50IHVuZSBjb3JyZWN0aW9uLlxuIgorIlxuIgorIlZvdXMgZGV2ZXogZmluaXIgZGUgY29ycmlnZXIgY2UgY29tbWl0IGF2YW50IGRlIGxhbmNlciB1bmUgcXVlbGNvbnF1ZSAiCisiZnVzaW9uLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJMJ8OpdGF0IGxvcnMgZGUgbGEgZGVybmnDqHJlIHN5bmNocm9uaXNhdGlvbiBuZSBjb3JyZXNwb25kIHBsdXMgw6AgbCfDqXRhdCBkdSAiCisiZMOpcMO0dC5cbiIKKyJcbiIKKyJVbiBhdXRyZSBwcm9ncmFtbWUgR2l0IGEgbW9kaWZpw6kgY2UgZMOpcMO0dCBkZXB1aXMgbGEgZGVybmnDqHJlICIKKyJzeW5jaHJvbmlzYXRpb24uIFVuZSByZXN5bmNocm9uaXNhdGlvbiBkb2l0IMOqdHJlIGVmZmVjdHXDqWUgYXZhbnQgZGUgcG91dm9pciAiCisiZnVzaW9ubmVyIGRlIG5vdXZlYXUuXG4iCisiXG4iCisiQ2VsYSB2YSDDqnRyZSBmYWl0IHRvdXQgZGUgc3VpdGUgYXV0b21hdGlxdWVtZW50XG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCisiXG4iCisiWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCisibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorbXNnc3RyICIiCisiVm91cyDDqnRlcyBhdSBtaWxpZXUgZCd1bmUgZnVzaW9uIGNvbmZsaWN0dWVsbGUuXG4iCisiXG4iCisiTGUgZmljaGllciAlcyBhIGRlcyBjb25mbGljdHMgZGUgZnVzaW9uLlxuIgorIlxuIgorIlZvdXMgZGV2ZXogbGVzIHLDqXNvdWRyZSwgcHVpcyBpbmRleGVyIGxlIGZpY2hpZXIsIGV0IGVuZmluIGNvbW1pdGVyIHBvdXIgIgorInRlcm1pbmVyIGxhIGZ1c2lvbiBjb3VyYW50ZS4gU2V1bGVtZW50IMOgIGNlIG1vbWVudCBsw6Agc2VyYS10LWlsIHBvc3NpYmxlICIKKyJkJ2VmZmVjdHVlciB1bmUgbm91dmVsbGUgZnVzaW9uLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKKyJcbiIKKyJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgorIlxuIgorIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgorIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKK21zZ3N0ciAiIgorIlZvdXMgw6p0ZXMgYXUgbWlsaWV1IGQndW5lIG1vZGlmaWNhdGlvbi5cbiIKKyJcbiIKKyJMZSBmaWNoaWVyICVzIGEgw6l0w6kgbW9kaWZpw6kuXG4iCisiXG4iCisiVm91cyBkZXZyaWV6IHRlcm1pbmVyIGxlIGNvbW1pdCBjb3VyYW50IGF2YW50IGRlIGxhbmNlciB1bmUgZnVzaW9uLiBFbiAiCisiZmFpc2FpdCBjb21tZSBjZWxhLCB2b3VzIMOpdml0ZXJleiBkZSBkZXZvaXIgw6l2ZW50dWVsbGVtZW50IGFiYW5kb25uZXIgdW5lICIKKyJmdXNpb24gYXlhbnQgw6ljaG91w6kuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiVzIGRlICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjEyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgYW5kICVzLi4uIgorbXNnc3RyICJGdXNpb24gZGUgJXMgZXQgJXMuLi4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMxCittc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCittc2dzdHIgIkxhIGZ1c2lvbiBzJ2VzdCBmYWl0ZSBhdmVjIHN1Y2PDqHMuIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMworbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgorbXNnc3RyICJMYSBmdXNpb24gYSBlY2hvdcOpLiBJbCBlc3QgbsOpY2Vzc2FpcmUgZGUgcsOpc291ZHJlIGxlcyBjb25mbGl0cy4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTU4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2UgSW50byAlcyIKK21zZ3N0ciAiRnVzaW9uIGRhbnMgJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTc3Cittc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCittc2dzdHIgIlLDqXZpc2lvbiDDoCBmdXNpb25uZXIiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjEyCittc2dpZCAiIgorIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGQnYWJhbmRvbm5lciBlbiBjb3VycyBkZSBjb3JyZWN0aW9uLlxuIgorIlxuIgorIlZvdXMgZGV2ZXogZmluaXIgZGUgY29ycmlnZXIgY2UgY29tbWl0LlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjIyMgorbXNnaWQgIiIKKyJBYm9ydCBtZXJnZT9cbiIKKyJcbiIKKyJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKK21zZ3N0ciAiIgorIkFiYW5kb25uZXIgbGEgZnVzaW9uID9cbiIKKyJcbiIKKyJBYmFuZG9ubmVyIGxhIGZ1c2lvbiBjb3VyYW50ZSBlbnRyYWluZXJhIGxhIHBlcnRlIGRlIFRPVVRFUyBsZXMgIgorIm1vZGlmaWNhdGlvbnMgbm9uIGNvbW1pdMOpZXMuXG4iCisiXG4iCisiQWJhbmRvbm5lciBxdWFuZCBtw6ptZSBsYSBmdXNpb24gY291cmFudGUgPyIKKworIzogbGliL21lcmdlLnRjbDoyMjgKK21zZ2lkICIiCisiUmVzZXQgY2hhbmdlcz9cbiIKKyJcbiIKKyJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCittc2dzdHIgIiIKKyJSw6lpbml0aWFsaXNlciBsZXMgbW9kaWZpY2F0aW9ucyA/XG4iCisiXG4iCisiUsOpaW5pdGlhbGlzZXIgbGVzIG1vZGlmaWNhdGlvbnMgdmEgZmFpcmUgcGVyZHJlIFRPVVRFUyBsZXMgbW9kaWZpY2F0aW9ucyBub24gIgorImNvbW1pdMOpZXMuXG4iCisiXG4iCisiUsOpaW5pdGlhbGlzZXIgcXVhbmQgbcOqbWUgbGVzIG1vZGlmaWNhdGlvbnMgY291cmFudGVzID8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiQWJvcnRpbmciCittc2dzdHIgIkFiYW5kb24iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiZmlsZXMgcmVzZXQiCittc2dzdHIgImZpY2hpZXJzIHLDqWluaXRpYWxpc8OpcyIKKworIzogbGliL21lcmdlLnRjbDoyNjcKK21zZ2lkICJBYm9ydCBmYWlsZWQuIgorbXNnc3RyICJMJ2FiYW5kb24gYSDDqWNob3XDqS4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjY5Cittc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgorbXNnc3RyICJBYmFuZG9uIHRlbWluw6kuIFByw6p0LiIKKworIzogbGliL21lcmdldG9vbC50Y2w6OAorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIGJhc2UgdmVyc2lvbj8iCittc2dzdHIgIkZvcmNlciBsYSByw6lzb2x1dGlvbiDDoCBsYSB2ZXJzaW9uIGRlIGJhc2UgPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6OQorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhpcyBicmFuY2g/IgorbXNnc3RyICJGb3JjZXIgbGEgcsOpc29sdXRpb24gw6AgY2V0dGUgYnJhbmNoZSA/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxMAorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIG90aGVyIGJyYW5jaD8iCittc2dzdHIgIkZvcmNlciBsYSByw6lzb2x1dGlvbiDDoCBsJ2F1dHJlIGJyYW5jaGUgPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKKyJcbiIKKyIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgorIlxuIgorIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCittc2dzdHIgIiIKKyJOb3RlciBxdWUgbGUgZGlmZiBuZSBtb250cmUgcXVlIGxlcyBtb2RpZmljYXRpb25zIGVuIGNvbmZsaXQuXG4iCisiXG4iCisiJXMgc2VyYSDDqWNyYXPDqS5cbiIKKyJcbiIKKyJDZXR0ZSBvcMOpcmF0aW9uIG5lIHBldXQgw6p0cmUgaW52ZXJzw6llIHF1J2VuIHJlbGFuw6dhbnQgbGEgZnVzaW9uLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIHNlZW1zIHRvIGhhdmUgdW5yZXNvbHZlZCBjb25mbGljdHMsIHN0aWxsIHN0YWdlPyIKK21zZ3N0ciAiIgorIkxlIGZpY2hpZXIgJXMgc2VtYmxlIGF2b2lyIGRlcyBjb25mbGl0cyBub24gcsOpc29sdXMsIGluZGV4ZXIgcXVhbmQgbcOqbWUgPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6NjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgcmVzb2x1dGlvbiBmb3IgJXMiCittc2dzdHIgIkFqb3V0ZXIgdW5lIHLDqXNvbHV0aW9uIHBvdXIgJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQorbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZGUgcsOpc291ZHJlIGxhIHN1cHByZXNzaW9uIG91IGRlIHJlbGllciBkZXMgY29uZmxpdHMgZW4gdXRpbGlzYW50ICIKKyJ1biBvdXRpbCIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQ2Cittc2dpZCAiQ29uZmxpY3QgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiTGUgZmljaGllciBlbiBjb25mbGl0IG4nZXhpc3RlIHBhcy4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBvdXRpbCBncmFwaGlxdWUgcG91ciBmdXNpb25uZXIgZGVzIGZpY2hpZXJzLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MjY4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgorbXNnc3RyICJPdXRpbCBkZSBmdXNpb24gJyVzJyBub24gc3VwcG9ydMOpIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMDMKK21zZ2lkICJNZXJnZSB0b29sIGlzIGFscmVhZHkgcnVubmluZywgdGVybWluYXRlIGl0PyIKK21zZ3N0ciAiTCdvdXRpbCBkZSBmdXNpb24gdG91cm5lIGTDqWrDoCwgZmF1dC1pbCBsZSB0ZXJtaW5lciA/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkVycmV1ciBsb3JzIGRlIGxhIHLDqWN1cMOpcmF0aW9uIGRlcyB2ZXJzaW9ucyA6XG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGxhbmNlciBsJ291dGlsIGRlIGZ1c2lvbiA6XG4iCisiXG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM0NworbXNnaWQgIlJ1bm5pbmcgbWVyZ2UgdG9vbC4uLiIKK21zZ3N0ciAiTGFuY2VtZW50IGRlIGwnb3V0aWwgZGUgZnVzaW9uLi4uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNzUgbGliL21lcmdldG9vbC50Y2w6MzgzCittc2dpZCAiTWVyZ2UgdG9vbCBmYWlsZWQuIgorbXNnc3RyICJMJ291dGlsIGRlIGZ1c2lvbiBhIMOpY2hvdcOpLiIKKworIzogbGliL29wdGlvbi50Y2w6MTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGdsb2JhbCBlbmNvZGluZyAnJXMnIgorbXNnc3RyICJDb2RhZ2UgZ2xvYmFsICclcycgaW52YWxpZGUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXBvIGVuY29kaW5nICclcyciCittc2dzdHIgIkNvZGFnZSBkZSBkw6lww7R0ICclcycgaW52YWxpZGUiCisKKyM6IGxpYi9vcHRpb24udGNsOjExNworbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCittc2dzdHIgIlJlbWV0dHJlIGxlcyB2YWxldXJzIHBhciBkw6lmYXV0IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMjEKK21zZ2lkICJTYXZlIgorbXNnc3RyICJTYXV2ZWdhcmRlciIKKworIzogbGliL29wdGlvbi50Y2w6MTMxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgUmVwb3NpdG9yeSIKK21zZ3N0ciAiRMOpcMO0dCA6ICVzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzIKK21zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgorbXNnc3RyICJHbG9iYWxlcyAodG91cyBsZXMgZMOpcMO0dHMpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzgKK21zZ2lkICJVc2VyIE5hbWUiCittc2dzdHIgIk5vbSBkJ3V0aWxpc2F0ZXVyIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzkKK21zZ2lkICJFbWFpbCBBZGRyZXNzIgorbXNnc3RyICJBZHJlc3NlIGVtYWlsIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDEKK21zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKK21zZ3N0ciAiUsOpc3VtZXIgbGVzIGNvbW1pdHMgZGUgZnVzaW9uIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDIKK21zZ2lkICJNZXJnZSBWZXJib3NpdHkiCittc2dzdHIgIkZ1c2lvbiBiYXZhcmRlIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDMKK21zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgorbXNnc3RyICJNb250cmVyIHN0YXRpc3RpcXVlcyBkZSBkaWZmIGFwcsOocyBmdXNpb24iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NAorbXNnaWQgIlVzZSBNZXJnZSBUb29sIgorbXNnc3RyICJVdGlsaXNlciBvdXRpbCBkZSBmdXNpb24iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NgorbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCittc2dzdHIgIkZhaXJlIGNvbmZpYW5jZSBhdXggZGF0ZXMgZGUgbW9kaWZpY2F0aW9uIGRlIGZpY2hpZXJzICIKKworIzogbGliL29wdGlvbi50Y2w6MTQ3Cittc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgorbXNnc3RyICJQdXJnZXIgbGVzIGJyYW5jaGVzIGRlIHN1aXZpIHBlbmRhbnQgbGEgcsOpY3Vww6lyYXRpb24iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgorbXNnc3RyICJGYWlyZSBjb3JyZXNwb25kcmUgbGVzIGJyYW5jaGVzIGRlIHN1aXZpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDkKK21zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKK21zZ3N0ciAiQW5ub3RlciBsZXMgY29waWVzIHNldWxlbWVudCBzdXIgZmljaGllcnMgbW9kaWZpw6lzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTAKK21zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKK21zZ3N0ciAiTWluaW11bSBkZSBjYXJhdMOocmVzIHBvdXIgYW5ub3RlciB1bmUgY29waWUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MQorbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgorbXNnc3RyICJEaXN0YW5jZSBkZSBibMOibWUgZGFucyBsJ2hpc3RvcmlxdWUgKGpvdXJzKSIKKworIzogbGliL29wdGlvbi50Y2w6MTUyCittc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKK21zZ3N0ciAiTm9tYnJlIGRlIGxpZ25lcyBkZSBjb250ZXh0ZSBkYW5zIGxlcyBkaWZmcyIKKworIzogbGliL29wdGlvbi50Y2w6MTUzCittc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKK21zZ3N0ciAiTGFyZ2V1ciBkdSB0ZXh0ZSBkZSBtZXNzYWdlIGRlIGNvbW1pdCIKKworIzogbGliL29wdGlvbi50Y2w6MTU0Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICJOb3V2ZWF1IG1vZMOobGUgZGUgbm9tIGRlIGJyYW5jaGUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NQorbXNnaWQgIkRlZmF1bHQgRmlsZSBDb250ZW50cyBFbmNvZGluZyIKK21zZ3N0ciAiQ29kYWdlIGR1IGNvbnRlbnUgZGVzIGZpY2hpZXJzIHBhciBkw6lmYXV0IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMDMKK21zZ2lkICJDaGFuZ2UiCittc2dzdHIgIk1vZGlmaWVyIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMzAKK21zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKK21zZ3N0ciAiRGljdGlvbm5haXJlIGQnb3J0aG9ncmFwaGUgOiIKKworIzogbGliL29wdGlvbi50Y2w6MjU0Cittc2dpZCAiQ2hhbmdlIEZvbnQiCittc2dzdHIgIk1vZGlmaWVyIGxlcyBwb2xpY2VzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaG9vc2UgJXMiCittc2dzdHIgIkNob2lzaXIgJXMiCisKKyM6IGxpYi9vcHRpb24udGNsOjI2NAorbXNnaWQgInB0LiIKK21zZ3N0ciAicHQuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNzgKK21zZ2lkICJQcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHLDqWbDqXJlbmNlcyIKKworIzogbGliL29wdGlvbi50Y2w6MzE0Cittc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKK21zZ3N0ciAiTGEgc2F1dmVnYXJkZSBjb21wbMOodGUgZGVzIG9wdGlvbnMgYSDDqWNob3XDqSA6IgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNjMKK21zZ2lkICJSZW1vdmUgUmVtb3RlIgorbXNnc3RyICJTdXBwcmltZXIgdW4gZMOpcMO0dCBkaXN0YW50IgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNjgKK21zZ2lkICJQcnVuZSBmcm9tIgorbXNnc3RyICJQdXJnZXIgZGUiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE3MworbXNnaWQgIkZldGNoIGZyb20iCittc2dzdHIgIlLDqWN1cMOpcmVyIGRlIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMTUKK21zZ2lkICJQdXNoIHRvIgorbXNnc3RyICJQb3Vzc2VyIHZlcnMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxOQorbXNnaWQgIkFkZCBSZW1vdGUiCittc2dzdHIgIkFqb3V0ZXIgdW4gZMOpcMO0dCBkaXN0YW50IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjQKK21zZ2lkICJBZGQgTmV3IFJlbW90ZSIKK21zZ3N0ciAiQWpvdXRlciB1biBub3V2ZWF1IGTDqXDDtHQgZGlzdGFudCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjI4IGxpYi90b29sc19kbGcudGNsOjM2Cittc2dpZCAiQWRkIgorbXNnc3RyICJBam91dGVyIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzcKK21zZ2lkICJSZW1vdGUgRGV0YWlscyIKK21zZ3N0ciAiRMOpdGFpbHMgZGVzIGTDqXDDtHRzIGRpc3RhbnRzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKK21zZ2lkICJMb2NhdGlvbjoiCittc2dzdHIgIkVtcGxhY2VtZW50IDoiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MgorbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgorbXNnc3RyICJBY3Rpb24gc3VwcGzDqW1lbnRhaXJlIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjUKK21zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKK21zZ3N0ciAiUsOpY3Vww6lyZXIgaW1tw6lkaWF0ZW1lbnQiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3MQorbXNnaWQgIkluaXRpYWxpemUgUmVtb3RlIFJlcG9zaXRvcnkgYW5kIFB1c2giCittc2dzdHIgIkluaXRpYWxpc2VyIHVuIGTDqXDDtHQgZGlzdGFudCBldCBwb3Vzc2VyIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzcKK21zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgorbXNnc3RyICJOZSByaWVuIGZhaXJlIGQnYXV0cmUgbWFpbnRlbmFudCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCittc2dzdHIgIk1lcmNpIGRlIGZvdXJuaXIgdW4gbm9tIGRlIGTDqXDDtHQgZGlzdGFudC4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdW4gbm9tIGRlIGTDqXDDtHQgZGlzdGFudCBhY2NlcHRhYmxlLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgcmVtb3RlICclcycgb2YgbG9jYXRpb24gJyVzJy4iCittc2dzdHIgIsOJY2hlYyBkZSBsJ2Fqb3V0IGR1IGTDqXDDtHQgZGlzdGFudCAnJXMnIMOgIGwnZW1wbGFjZW1lbnQgJyVzJy4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzMgbGliL3RyYW5zcG9ydC50Y2w6NgorIywgdGNsLWZvcm1hdAorbXNnaWQgImZldGNoICVzIgorbXNnc3RyICJyw6ljdXDDqXJlciAlcyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEzNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIHRoZSAlcyIKK21zZ3N0ciAiUsOpY3Vww6lyYXRpb24gZGUgJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgorbXNnc3RyICJQYXMgZGUgbcOpdGhvZGUgY29ubnVlIHBvdXIgaW5pdGlhbGlzZXIgbGUgZMOpcMO0dCDDoCBsJ2VtcGxhY2VtZW50ICclcycuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzIGxpYi90cmFuc3BvcnQudGNsOjI1IGxpYi90cmFuc3BvcnQudGNsOjYzCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgInB1c2ggJXMiCittc2dzdHIgInBvdXNzZXIgJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHVwIHRoZSAlcyAoYXQgJXMpIgorbXNnc3RyICJNaXNlIGVuIHBsYWNlIGRlICVzICjDoCAlcykiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozNAorbXNnaWQgIkRlbGV0ZSBCcmFuY2ggUmVtb3RlbHkiCittc2dzdHIgIlN1cHByaW1lciB1bmUgYnJhbmNoZSDDoCBkaXN0YW5jZSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0NworbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKK21zZ3N0ciAiRMOpcMO0dCBzb3VyY2UiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTAgbGliL3RyYW5zcG9ydC50Y2w6MTM0Cittc2dpZCAiUmVtb3RlOiIKK21zZ3N0ciAiQnJhbmNoZSBkaXN0YW50ZSA6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjE0OQorbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCittc2dzdHIgIkVtcGxhY2VtZW50IGFyYml0cmFpcmUgOiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4NAorbXNnaWQgIkJyYW5jaGVzIgorbXNnc3RyICJCcmFuY2hlcyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDkKK21zZ2lkICJEZWxldGUgT25seSBJZiIKK21zZ3N0ciAiU3VwcHJpbWVyIHNldWxlbWVudCBzaSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTEKK21zZ2lkICJNZXJnZWQgSW50bzoiCittc2dzdHIgIkZ1c2lvbm7DqSBkYW5zIDoiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTUyCittc2dpZCAiQSBicmFuY2ggaXMgcmVxdWlyZWQgZm9yICdNZXJnZWQgSW50bycuIgorbXNnc3RyICJVbmUgYnJhbmNoZSBlc3QgbsOpY2Vzc2FpcmUgcG91ciAnRnVzaW9ubsOpIGRhbnMnLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6XG4iCisiXG4iCisiIC0gJXMiCittc2dzdHIgIiIKKyJMZXMgYnJhbmNoZXMgc3VpdmFudGVzIG5lIHNvbnQgcGFzIGNvbXBsw6h0ZW1lbnQgZnVzaW9ubsOpZXMgZGFucyAlcyA6XG4iCisiXG4iCisiIC0gJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorbXNnc3RyICIiCisiVW4gb3UgcGx1c2lldXJzIGRlcyB0ZXN0cyBkZSBmdXNpb24gb250IMOpY2hvdcOpIHBhcmNlIHF1ZSB2b3VzIG4nYXZleiBwYXMgIgorInLDqWN1cMOpcsOpIGxlcyBjb21taXRzIG7DqWNlc3NhaXJlcy4gRXNzYXlleiBkZSByw6ljdXDDqXJlciDDoCBwYXJ0aXIgZGUgJXMgIgorImQnYWJvcmQuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNworbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKK21zZ3N0ciAiTWVyY2kgZGUgc8OpbGVjdGlvbm5lciB1bmUgb3UgcGx1c2lldXJzIGJyYW5jaGVzIMOgIHN1cHByaW1lci4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKK21zZ3N0ciAiU3VwcHJlc3Npb24gZGVzIGJyYW5jaGVzIGRlICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MgorbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgorbXNnc3RyICJBdWN1biBkw6lww7R0IG4nZXN0IHPDqWxlY3Rpb25uw6kuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nICVzLi4uIgorbXNnc3RyICJTeW5jaHJvbmlzYXRpb24gZGUgJXMuLi4iCisKKyM6IGxpYi9zZWFyY2gudGNsOjIxCittc2dpZCAiRmluZDoiCittc2dzdHIgIkNoZXJjaGVyIDoiCisKKyM6IGxpYi9zZWFyY2gudGNsOjIzCittc2dpZCAiTmV4dCIKK21zZ3N0ciAiU3VpdmFudCIKKworIzogbGliL3NlYXJjaC50Y2w6MjQKK21zZ2lkICJQcmV2IgorbXNnc3RyICJQcsOpY8OpZGVudCIKKworIzogbGliL3NlYXJjaC50Y2w6MjUKK21zZ2lkICJDYXNlLVNlbnNpdGl2ZSIKK21zZ3N0ciAiU2Vuc2libGUgw6AgbGEgY2Fzc2UiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MjEgbGliL3Nob3J0Y3V0LnRjbDo2MgorbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCittc2dzdHIgIkltcG9zc2libGUgZCfDqWNyaXJlIGxlIHJhY2NvdXJjaSA6IgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjEzNworbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ8OpY3JpcmUgbCdpY8O0bmUgOiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Cittc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiVsOpcmlmaWNhdGV1ciBkJ29ydGhvZ3JhcGhlIG5vbiBzdXBwb3J0w6kiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJMYSB2w6lyaWZpY2F0aW9uIGQnb3J0aG9ncmFwaGUgbidlc3QgcGFzIGRpc3BvbmlibGUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAorbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiQ29uZmlndXJhdGlvbiBkZSB2w6lyaWZpY2F0aW9uIGQnb3J0aG9ncmFwaGUgaW52YWxpZGUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydGluZyBkaWN0aW9uYXJ5IHRvICVzLiIKK21zZ3N0ciAiUsOpaW5pdGlhbGlzYXRpb24gZHUgZGljdGlvbm5haXJlIMOgICVzLiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjczCittc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKK21zZ3N0ciAiTGEgdsOpcmlmaWNhdGlvbiBkJ29ydGhvZ3JhcGhlIGEgw6ljaG91w6kgc2lsZW5jaWV1c2VtZW50IGF1IGTDqW1hcnJhZ2UiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAorbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJWw6lyaWZpY2F0ZXVyIGQnb3J0aG9ncmFwaGUgbm9uIHJlY29ubnUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDoxODYKK21zZ2lkICJObyBTdWdnZXN0aW9ucyIKK21zZ3N0ciAiQXVjdW5lIHN1Z2dlc3Rpb24iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKK21zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIkVPRiBpbmF0dGVuZHVlIGVudm95w6llIHBhciBsZSB2w6lyaWZpY2F0ZXVyIGQnb3J0aG9ncmFwaGUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKK21zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKK21zZ3N0ciAiTGUgdsOpcmlmaWNhdGV1ciBkJ29ydGhvZ3JhcGhlIGEgw6ljaG91w6kiCisKKyM6IGxpYi9zc2hrZXkudGNsOjMxCittc2dpZCAiTm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIkF1Y3VuZSBjbMOpIHRyb3V2w6llLiIKKworIzogbGliL3NzaGtleS50Y2w6MzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgorbXNnc3RyICJDbMOpIHB1YmxpcXVlIHRyb3V2w6llIGRhbnMgOiAlcyIKKworIzogbGliL3NzaGtleS50Y2w6NDAKK21zZ2lkICJHZW5lcmF0ZSBLZXkiCittc2dzdHIgIkfDqW7DqXJlciB1bmUgY2zDqSIKKworIzogbGliL3NzaGtleS50Y2w6NTYKK21zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKK21zZ3N0ciAiQ29waWVyIGRhbnMgbGUgcHJlc3NlLXBhcGllciIKKworIzogbGliL3NzaGtleS50Y2w6NzAKK21zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKK21zZ3N0ciAiVm90cmUgY2zDqSBwdWJsaXF1ZSBPcGVuU1NIIgorCisjOiBsaWIvc3Noa2V5LnRjbDo3OAorbXNnaWQgIkdlbmVyYXRpbmcuLi4iCittc2dzdHIgIkfDqW7DqXJhdGlvbi4uLiIKKworIzogbGliL3NzaGtleS50Y2w6ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGxhbmNlciBzc2gta2V5Z2VuIDpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL3NzaGtleS50Y2w6MTExCittc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgorbXNnc3RyICJMYSBnw6luw6lyYXRpb24gYSDDqWNob3XDqS4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjExOAorbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VlZGVkLCBidXQgbm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIkxhIGfDqW7DqXJhdGlvbiBhIHLDqXVzc2ksIG1haXMgYXVjdW5lIGNsw6kgbidhIMOpdMOpIHRyb3V2w6llLiIKKworIzogbGliL3NzaGtleS50Y2w6MTIxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiWW91ciBrZXkgaXMgaW46ICVzIgorbXNnc3RyICJWb3RyZSBjbMOpIGVzdCBkYW5zIDogJXMiCisKKyM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCittc2dzdHIgIiVzIC4uLiAlKmkgZGUgJSppICVzICglM2klJSkiCisKKyM6IGxpYi90b29scy50Y2w6NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCittc2dzdHIgIkxhbmNlciAlcyBuw6ljZXNzaXRlIHF1J3VuIGZpY2hpZXIgc29pdCBzw6lsZWN0aW9ubsOpLiIKKworIzogbGliL3Rvb2xzLnRjbDo5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJXM/IgorbXNnc3RyICLDinRlcy12b3VzIHPDu3IgZGUgdm91bG9pciBsYW5jZXIgJXMgPyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sOiAlcyIKK21zZ3N0ciAiT3V0aWwgOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nOiAlcyIKK21zZ3N0ciAiTGFuY2VtZW50IGRlIDogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKK21zZ3N0ciAiTCdvdXRpbCBhIHRlcm1pbsOpIGF2ZWMgc3VjY8OocyA6ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjE1MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgZmFpbGVkOiAlcyIKK21zZ3N0ciAiTCdvdXRpbCBhIMOpY2hvdcOpIDogJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjIyCittc2dpZCAiQWRkIFRvb2wiCittc2dzdHIgIkFqb3V0ZXIgdW4gb3V0aWwiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI4Cittc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCittc2dzdHIgIkFqb3V0ZXIgdW5lIG5vdXZlbGxlIGNvbW1hbmRlIGQnb3V0aWwiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjMzCittc2dpZCAiQWRkIGdsb2JhbGx5IgorbXNnc3RyICJBam91dGVyIGdsb2JhbGVtZW50IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0NQorbXNnaWQgIlRvb2wgRGV0YWlscyIKK21zZ3N0ciAiRMOpdGFpbHMgc3VyIGwnb3V0aWwiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjQ4Cittc2dpZCAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiCittc2dzdHIgIlV0aWxpc2VyIGxlcyBzw6lwYXJhdGV1cnMgJy8nIHBvdXIgY3LDqWVyIHVuIGFyYnJlIGRlIHNvdXMtbWVudXMgOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NjEKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiQ29tbWFuZGUgOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzQKK21zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgorbXNnc3RyICJNb250cmVyIHVuZSBib8OudGUgZGUgZGlhbG9ndWUgYXZhbnQgbGUgbGFuY2VtZW50IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4MAorbXNnaWQgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyAkUkVWSVNJT04pIgorbXNnc3RyICIiCisiRGVtYW5kZXIgw6AgbCd1dGlsaXNhdGV1ciBkZSBzw6lsZWN0aW9ubmVyIHVuZSByw6l2aXNpb24gKGNoYW5nZSAkUkVWSVNJT04pIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4NQorbXNnaWQgIkFzayB0aGUgdXNlciBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgKHNldHMgJEFSR1MpIgorbXNnc3RyICJEZW1hbmRlciDDoCBsJ3V0aWxpc2F0ZXVyIGRlcyBhcmd1bWVudHMgc3VwcGzDqW1lbnRhaXJlcyAoY2hhbmdlICRBUkdTKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTIKK21zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCittc2dzdHIgIk5lIHBhcyBtb250cmVyIGxhIGZlbsOqdHJlIGRlIHNvcnRpZSBkZXMgY29tbWFuZGVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo5NworbXNnaWQgIlJ1biBvbmx5IGlmIGEgZGlmZiBpcyBzZWxlY3RlZCAoJEZJTEVOQU1FIG5vdCBlbXB0eSkiCittc2dzdHIgIkxhbmNlciBzZXVsZW1lbnQgc2kgdW4gZGlmZiBlc3Qgc8OpbGVjdGlvbm7DqSAoJEZJTEVOQU1FIG5vbiB2aWRlKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTIxCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIG5hbWUgZm9yIHRoZSB0b29sLiIKK21zZ3N0ciAiTWVyY2kgZGUgZm91cm5pciB1biBub20gcG91ciBsJ291dGlsLiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiTCdvdXRpbCAnJXMnIGV4aXN0ZSBkw6lqw6AuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFkZCB0b29sOlxuIgorIiVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkJ2Fqb3V0ZXIgbCdvdXRpbCA6XG4iCisiJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5MAorbXNnaWQgIlJlbW92ZSBUb29sIgorbXNnc3RyICJTdXBwcmltZXIgbCdvdXRpbCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk2Cittc2dpZCAiUmVtb3ZlIFRvb2wgQ29tbWFuZHMiCittc2dzdHIgIlN1cHByaW1lciBkZXMgY29tbWFuZGVzIGQnb3V0aWwiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjIwMAorbXNnaWQgIlJlbW92ZSIKK21zZ3N0ciAiU3VwcHJpbWVyIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzYKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIoTGUgYmxldSBpbmRpcXVlIGRlcyBvdXRpbHMgbG9jYXV4IGF1IGTDqXDDtHQpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW4gQ29tbWFuZDogJXMiCittc2dzdHIgIkxhbmNlciBjb21tYW5kZSA6ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMTEKK21zZ2lkICJBcmd1bWVudHMiCittc2dzdHIgIkFyZ3VtZW50cyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQ4Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSAlcyIKK21zZ3N0ciAiUsOpY3Vww6lyYXRpb24gZGVzIGRlcm5pw6hyZXMgbW9kaWZpY2F0aW9ucyBkZSAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCittc2dzdHIgInB1cmdlciDDoCBkaXN0YW5jZSAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKK21zZ3N0ciAiTmV0dG95ZXIgbGVzIGJyYW5jaGVzIGRlIHN1aXZpIHN1cHByaW3DqWVzIGRlICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKK21zZ3N0ciAiTGVzIG1vZGlmaWNhdGlvbnMgc29udCBwb3Vzc8OpZXMgdmVycyAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCittc2dzdHIgIkR1cGxpcXVlciBkYW5zICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgJXMgJXMgdG8gJXMiCittc2dzdHIgIlBvdXNzZSAlcyAlcyB2ZXJzICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDAKK21zZ2lkICJQdXNoIEJyYW5jaGVzIgorbXNnc3RyICJQb3Vzc2VyIGJyYW5jaGVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTQKK21zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCittc2dzdHIgIkJyYW5jaGVzIHNvdXJjZSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTMxCittc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKK21zZ3N0ciAiRMOpcMO0dCBkZSBkZXN0aW5hdGlvbiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTY5Cittc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBkZSB0cmFuc2ZlcnQiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3MQorbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgorbXNnc3RyICIiCisiRm9yY2VyIGwnw6ljcmFzZW1lbnQgZCd1bmUgYnJhbmNoZSBleGlzdGFudGUgKHBldXQgc3VwcHJpbWVyIGRlcyAiCisibW9kaWZpY2F0aW9ucykiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3NQorbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgorbXNnc3RyICJVdGlsaXNlciBkZXMgcGV0aXRzIHBhcXVldHMgKHBvdXIgbGVzIGNvbm5leGlvbnMgbGVudGVzKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTc5Cittc2dpZCAiSW5jbHVkZSB0YWdzIgorbXNnc3RyICJJbmNsdXJlIGxlcyBtYXJxdWVzICh0YWdzKSIKKworI34gbXNnaWQgIkNhbm5vdCB1c2UgZnVubnkgLmdpdCBkaXJlY3Rvcnk6IgorI34gbXNnc3RyICJJbXBvc3NpYmxlIGQndXRpbGlzZXIgbGUgcsOpcGVydG9pcmUgLmdpdDoiCisKKyN+IG1zZ2lkICJQcmVmZXJlbmNlcy4uLiIKKyN+IG1zZ3N0ciAiUHLDqWbDqXJlbmNlcy4uLiIKKworI34gbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgdGVzdC4pIgorI34gbXNnc3RyICJUb3Vqb3VycyAoTmUgcGFzIGZhaXJlIGRlIHRlc3QgZGUgZnVzaW9uLikiCmRpZmYgLS1naXQgYS9wby9naXQtZ3VpLnBvdCBiL2dpdC1ndWkvcG8vZ2l0LWd1aS5wb3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dpdC1ndWkucG90CnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dpdC1ndWkucG90CmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9NYWtlZmlsZSBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L01ha2VmaWxlCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L01ha2VmaWxlCmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9iZy5wbyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvYmcucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L2JnLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L2JnLnBvCmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9kZS5wbyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZGUucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L2RlLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L2RlLnBvCmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9lbC5wbyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZWwucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L2VsLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L2VsLnBvCmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9mci5wbyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZnIucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L2ZyLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L2ZyLnBvCmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9naXQtZ3VpLWdsb3NzYXJ5LnBvdCBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZ2l0LWd1aS1nbG9zc2FyeS5wb3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L2dpdC1ndWktZ2xvc3NhcnkucG90CnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L2dpdC1ndWktZ2xvc3NhcnkucG90CmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9naXQtZ3VpLWdsb3NzYXJ5LnR4dCBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZ2l0LWd1aS1nbG9zc2FyeS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L2dpdC1ndWktZ2xvc3NhcnkudHh0CnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L2dpdC1ndWktZ2xvc3NhcnkudHh0CmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9pdC5wbyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvaXQucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L2l0LnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L2l0LnBvCmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9wdF9ici5wbyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvcHRfYnIucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L3B0X2JyLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L3B0X2JyLnBvCmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS9wdF9wdC5wbyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvcHRfcHQucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2dsb3NzYXJ5L3B0X3B0LnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L3B0X3B0LnBvCmRpZmYgLS1naXQgYS9wby9nbG9zc2FyeS90eHQtdG8tcG90LnNoIGIvZ2l0LWd1aS9wby9nbG9zc2FyeS90eHQtdG8tcG90LnNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwby9nbG9zc2FyeS90eHQtdG8tcG90LnNoCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2dsb3NzYXJ5L3R4dC10by1wb3Quc2gKZGlmZiAtLWdpdCBhL3BvL2dsb3NzYXJ5L3poX2NuLnBvIGIvZ2l0LWd1aS9wby9nbG9zc2FyeS96aF9jbi5wbwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcG8vZ2xvc3NhcnkvemhfY24ucG8KcmVuYW1lIHRvIGdpdC1ndWkvcG8vZ2xvc3NhcnkvemhfY24ucG8KZGlmZiAtLWdpdCBhL3BvL2h1LnBvIGIvZ2l0LWd1aS9wby9odS5wbwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcG8vaHUucG8KcmVuYW1lIHRvIGdpdC1ndWkvcG8vaHUucG8KZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vaXQucG8gYi9naXQtZ3VpL3BvL2l0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZDhiOGUKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL2l0LnBvCkBAIC0wLDAgKzEsMjU5MSBAQAorIyBUcmFuc2xhdGlvbiBvZiBnaXQtZ3VpIHRvIEl0YWxpYW4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWd1aSBwYWNrYWdlLgorIyBQYW9sbyBDaWFycm9jY2hpIDxwYW9sby5jaWFycm9jY2hpQGdtYWlsLmNvbT4sIDIwMDcKKyMgTWljaGVsZSBCYWxsYWJpbyA8YmFycmFfY3VkYUBrYXRhbWFpbC5jb20+LCAyMDA3LgorIworIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMS0yNiAxNTo0Ny0wODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wMS0yOCAxMDowNCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNaWNoZWxlIEJhbGxhYmlvIDxiYXJyYV9jdWRhQGthdGFtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBJdGFsaWFuIDx0cEBsaXN0cy5saW51eC5pdD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0LWd1aS5zaDo0MSBnaXQtZ3VpLnNoOjc5MyBnaXQtZ3VpLnNoOjgwNyBnaXQtZ3VpLnNoOjgyMCBnaXQtZ3VpLnNoOjkwMworIzogZ2l0LWd1aS5zaDo5MjIKK21zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKK21zZ3N0ciAiZ2l0LWd1aTogZXJyb3JlIGdyYXZlIgorCisjOiBnaXQtZ3VpLnNoOjc0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgorbXNnc3RyICJDYXJhdHRlcmkgbm9uIHZhbGlkaSBzcGVjaWZpY2F0aSBpbiAlczoiCisKKyM6IGdpdC1ndWkuc2g6Nzc5Cittc2dpZCAiTWFpbiBGb250IgorbXNnc3RyICJDYXJhdHRlcmkgcHJpbmNpcGFsaSIKKworIzogZ2l0LWd1aS5zaDo3ODAKK21zZ2lkICJEaWZmL0NvbnNvbGUgRm9udCIKK21zZ3N0ciAiQ2FyYXR0ZXJpIHBlciBjb25mcm9udGkgZSB0ZXJtaW5hbGUiCisKKyM6IGdpdC1ndWkuc2g6Nzk0Cittc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgorbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIGdpdCBuZWwgUEFUSCIKKworIzogZ2l0LWd1aS5zaDo4MjEKK21zZ2lkICJDYW5ub3QgcGFyc2UgR2l0IHZlcnNpb24gc3RyaW5nOiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZGV0ZXJtaW5hcmUgbGEgdmVyc2lvbmUgZGkgR2l0OiIKKworIzogZ2l0LWd1aS5zaDo4MzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiR2l0IHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWQuXG4iCisiXG4iCisiJXMgY2xhaW1zIGl0IGlzIHZlcnNpb24gJyVzJy5cbiIKKyJcbiIKKyIlcyByZXF1aXJlcyBhdCBsZWFzdCBHaXQgMS41LjAgb3IgbGF0ZXIuXG4iCisiXG4iCisiQXNzdW1lICclcycgaXMgdmVyc2lvbiAxLjUuMD9cbiIKK21zZ3N0ciAiIgorIkxhIHZlcnNpb25lIGRpIEdpdCBub24gcHXDsiBlc3NlcmUgZGV0ZXJtaW5hdGEuXG4iCisiXG4iCisiJXMgcmlwb3J0YSBjaGUgbGEgdmVyc2lvbmUgw6ggJyVzJy5cbiIKKyJcbiIKKyIlcyByaWNoaWVkZSBhbG1lbm8gR2l0IDEuNS4wIG8gc3VwZXJpb3JlLlxuIgorIlxuIgorIkFzc3VtZXJlIGNoZSAnJXMnIHNpYSBhbGxhIHZlcnNpb25lIDEuNS4wP1xuIgorCisjOiBnaXQtZ3VpLnNoOjExMjgKK21zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCittc2dzdHIgIk5vbiB0cm92byBsYSBkaXJlY3RvcnkgZGkgZ2l0OiAiCisKKyM6IGdpdC1ndWkuc2g6MTE0NgorbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCittc2dzdHIgIkltcG9zc2liaWxlIHNwb3N0YXJzaSBzdWxsYSBkaXJlY3RvcnkgcHJpbmNpcGFsZSBkZWwgcHJvZ2V0dG86IgorCisjOiBnaXQtZ3VpLnNoOjExNTQKK21zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCittc2dzdHIgIkltcG9zc2liaWxlIHVzYXJlIHVuIGFyY2hpdmlvIHNlbnphIGRpcmVjdG9yeSBkaSBsYXZvcm86IgorCisjOiBnaXQtZ3VpLnNoOjExNjIKK21zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiTmVzc3VuYSBkaXJlY3RvcnkgZGkgbGF2b3JvIgorCisjOiBnaXQtZ3VpLnNoOjEzMzQgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKK21zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgorbXNnc3RyICJDb250cm9sbG8gZGVsbG8gc3RhdG8gZGVpIGZpbGUgaW4gY29yc28uLi4iCisKKyM6IGdpdC1ndWkuc2g6MTM5MAorbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCittc2dzdHIgIlJpY2VyY2EgZGkgZmlsZSBtb2RpZmljYXRpIGluIGNvcnNvLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE0NTQKK21zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICJBdnZpbyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKKworIzogZ2l0LWd1aS5zaDoxNDcxCittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiUmV2aXNpb25lIHJpZml1dGF0YSBkYWwgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suIgorCisjOiBnaXQtZ3VpLnNoOjE2MjkgbGliL2Jyb3dzZXIudGNsOjI0NgorbXNnaWQgIlJlYWR5LiIKK21zZ3N0ciAiUHJvbnRvLiIKKworIzogZ2l0LWd1aS5zaDoxNzg3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKK21zZ3N0ciAiU2FyYW5ubyBtb3N0cmF0aSBzb2xvICVzIGZpbGUgc3UgJXMuIgorCisjOiBnaXQtZ3VpLnNoOjE5MTMKK21zZ2lkICJVbm1vZGlmaWVkIgorbXNnc3RyICJOb24gbW9kaWZpY2F0byIKKworIzogZ2l0LWd1aS5zaDoxOTE1Cittc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIk1vZGlmaWNhdG8sIG5vbiBwcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MTkxNiBnaXQtZ3VpLnNoOjE5MjQKK21zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCIKK21zZ3N0ciAiUHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgorCisjOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1Cittc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIlBhcnRpIHByZXBhcmF0ZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgorbXNnc3RyICJQcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUsIG1hbmNhbnRlIgorCisjOiBnaXQtZ3VpLnNoOjE5MjAKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiVGlwbyBkaSBmaWxlIG1vZGlmaWNhdG8sIG5vbiBwcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MTkyMQorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCittc2dzdHIgIlRpcG8gZGkgZmlsZSBtb2RpZmljYXRvLCBwcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MTkyMworbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiTm9uIHRyYWNjaWF0bywgbm9uIHByZXBhcmF0byBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDoxOTI4Cittc2dpZCAiTWlzc2luZyIKK21zZ3N0ciAiTWFuY2FudGUiCisKKyM6IGdpdC1ndWkuc2g6MTkyOQorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKK21zZ3N0ciAiUHJlcGFyYXRvIHBlciBsYSByaW1vemlvbmUiCisKKyM6IGdpdC1ndWkuc2g6MTkzMAorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiUHJlcGFyYXRvIGFsbGEgcmltb3ppb25lLCBhbmNvcmEgcHJlc2VudGUiCisKKyM6IGdpdC1ndWkuc2g6MTkzMiBnaXQtZ3VpLnNoOjE5MzMgZ2l0LWd1aS5zaDoxOTM0IGdpdC1ndWkuc2g6MTkzNQorIzogZ2l0LWd1aS5zaDoxOTM2IGdpdC1ndWkuc2g6MTkzNworbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIlJpY2hpZWRlIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkiCisKKyM6IGdpdC1ndWkuc2g6MTk3MgorbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIkF2dmlvIGRpIGdpdGsuLi4gYXR0ZW5kZXJlLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE5ODQKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdGsgaW4gUEFUSCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBnaXRrIG5lbCBQQVRIIgorCisjOiBnaXQtZ3VpLnNoOjIwNDMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBnaXQgZ3VpIG5lbCBQQVRIIgorCisjOiBnaXQtZ3VpLnNoOjI0NTUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNgorbXNnaWQgIlJlcG9zaXRvcnkiCittc2dzdHIgIkFyY2hpdmlvIgorCisjOiBnaXQtZ3VpLnNoOjI0NTYKK21zZ2lkICJFZGl0IgorbXNnc3RyICJNb2RpZmljYSIKKworIzogZ2l0LWd1aS5zaDoyNDU4IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIlJhbW8iCisKKyM6IGdpdC1ndWkuc2g6MjQ2MSBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ4Cittc2dpZCAiQ29tbWl0QEBub3VuIgorbXNnc3RyICJSZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MjQ2NCBsaWIvbWVyZ2UudGNsOjEyMSBsaWIvbWVyZ2UudGNsOjE1MCBsaWIvbWVyZ2UudGNsOjE2OAorbXNnaWQgIk1lcmdlIgorbXNnc3RyICJGdXNpb25lIChNZXJnZSkiCisKKyM6IGdpdC1ndWkuc2g6MjQ2NSBsaWIvY2hvb3NlX3Jldi50Y2w6NTU3Cittc2dpZCAiUmVtb3RlIgorbXNnc3RyICJSZW1vdG8iCisKKyM6IGdpdC1ndWkuc2g6MjQ2OAorbXNnaWQgIlRvb2xzIgorbXNnc3RyICJBY2Nlc3NvcmkiCisKKyM6IGdpdC1ndWkuc2g6MjQ3NworbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgorbXNnc3RyICJFc3Bsb3JhIGNvcGlhIGRpIGxhdm9ybyIKKworIzogZ2l0LWd1aS5zaDoyNDgzCittc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCittc2dzdHIgIkVzcGxvcmEgaSBmaWxlIGRlbCByYW1vIGF0dHVhbGUiCisKKyM6IGdpdC1ndWkuc2g6MjQ4NworbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCittc2dzdHIgIkVzcGxvcmEgaSBmaWxlIGRlbCByYW1vLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI0OTIKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICJWaXN1YWxpenphIGxhIGNyb25vbG9naWEgZGVsIHJhbW8gYXR0dWFsZSIKKworIzogZ2l0LWd1aS5zaDoyNDk2Cittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKK21zZ3N0ciAiVmlzdWFsaXp6YSBsYSBjcm9ub2xvZ2lhIGRpIHR1dHRpIGkgcmFtaSIKKworIzogZ2l0LWd1aS5zaDoyNTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCittc2dzdHIgIkVzcGxvcmEgaSBmaWxlIGRpICVzIgorCisjOiBnaXQtZ3VpLnNoOjI1MDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgorbXNnc3RyICJWaXN1YWxpenphIGxhIGNyb25vbG9naWEgZGkgJXMiCisKKyM6IGdpdC1ndWkuc2g6MjUxMCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKK21zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgorbXNnc3RyICJTdGF0aXN0aWNoZSBkZWxsJ2FyY2hpdmlvIgorCisjOiBnaXQtZ3VpLnNoOjI1MTMgbGliL2RhdGFiYXNlLnRjbDozNAorbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgorbXNnc3RyICJDb21wcmltaSBsJ2FyY2hpdmlvIgorCisjOiBnaXQtZ3VpLnNoOjI1MTYKK21zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCittc2dzdHIgIlZlcmlmaWNhIGwnYXJjaGl2aW8iCisKKyM6IGdpdC1ndWkuc2g6MjUyMyBnaXQtZ3VpLnNoOjI1MjcgZ2l0LWd1aS5zaDoyNTMxIGxpYi9zaG9ydGN1dC50Y2w6OAorIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCittc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKK21zZ3N0ciAiQ3JlYSBpY29uYSBkZXNrdG9wIgorCisjOiBnaXQtZ3VpLnNoOjI1MzkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTEKK21zZ2lkICJRdWl0IgorbXNnc3RyICJFc2NpIgorCisjOiBnaXQtZ3VpLnNoOjI1NDcKK21zZ2lkICJVbmRvIgorbXNnc3RyICJBbm51bGxhIgorCisjOiBnaXQtZ3VpLnNoOjI1NTAKK21zZ2lkICJSZWRvIgorbXNnc3RyICJSaXBldGkiCisKKyM6IGdpdC1ndWkuc2g6MjU1NCBnaXQtZ3VpLnNoOjMxMDkKK21zZ2lkICJDdXQiCittc2dzdHIgIlRhZ2xpYSIKKworIzogZ2l0LWd1aS5zaDoyNTU3IGdpdC1ndWkuc2g6MzExMiBnaXQtZ3VpLnNoOjMxODYgZ2l0LWd1aS5zaDozMjU5CisjOiBsaWIvY29uc29sZS50Y2w6NjkKK21zZ2lkICJDb3B5IgorbXNnc3RyICJDb3BpYSIKKworIzogZ2l0LWd1aS5zaDoyNTYwIGdpdC1ndWkuc2g6MzExNQorbXNnaWQgIlBhc3RlIgorbXNnc3RyICJJbmNvbGxhIgorCisjOiBnaXQtZ3VpLnNoOjI1NjMgZ2l0LWd1aS5zaDozMTE4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOAorbXNnaWQgIkRlbGV0ZSIKK21zZ3N0ciAiRWxpbWluYSIKKworIzogZ2l0LWd1aS5zaDoyNTY3IGdpdC1ndWkuc2g6MzEyMiBnaXQtZ3VpLnNoOjMyNjMgbGliL2NvbnNvbGUudGNsOjcxCittc2dpZCAiU2VsZWN0IEFsbCIKK21zZ3N0ciAiU2VsZXppb25hIHR1dHRvIgorCisjOiBnaXQtZ3VpLnNoOjI1NzYKK21zZ2lkICJDcmVhdGUuLi4iCittc2dzdHIgIkNyZWEuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjU4MgorbXNnaWQgIkNoZWNrb3V0Li4uIgorbXNnc3RyICJBdHRpdmEuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjU4OAorbXNnaWQgIlJlbmFtZS4uLiIKK21zZ3N0ciAiUmlub21pbmEiCisKKyM6IGdpdC1ndWkuc2g6MjU5MworbXNnaWQgIkRlbGV0ZS4uLiIKK21zZ3N0ciAiRWxpbWluYS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTk4Cittc2dpZCAiUmVzZXQuLi4iCittc2dzdHIgIlJpcHJpc3RpbmEuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjYwOAorbXNnaWQgIkRvbmUiCittc2dzdHIgIkZhdHRvIgorCisjOiBnaXQtZ3VpLnNoOjI2MTAKK21zZ2lkICJDb21taXRAQHZlcmIiCittc2dzdHIgIk51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDoyNjE5IGdpdC1ndWkuc2g6MzA1MAorbXNnaWQgIk5ldyBDb21taXQiCittc2dzdHIgIk51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzA1NworbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgorbXNnc3RyICJDb3JyZWdnaSBsJ3VsdGltYSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MjYzNyBnaXQtZ3VpLnNoOjMwMTEgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQorbXNnaWQgIlJlc2NhbiIKK21zZ3N0ciAiQW5hbGl6emEgbnVvdmFtZW50ZSIKKworIzogZ2l0LWd1aS5zaDoyNjQzCittc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgorbXNnc3RyICJQcmVwYXJhIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgorCisjOiBnaXQtZ3VpLnNoOjI2NDkKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKK21zZ3N0ciAiUHJlcGFyYSBpIGZpbGUgbW9kaWZpY2F0aSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDoyNjU1Cittc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAiQW5udWxsYSBwcmVwYXJhemlvbmUiCisKKyM6IGdpdC1ndWkuc2g6MjY2MSBsaWIvaW5kZXgudGNsOjQxMgorbXNnaWQgIlJldmVydCBDaGFuZ2VzIgorbXNnc3RyICJBbm51bGxhIG1vZGlmaWNoZSIKKworIzogZ2l0LWd1aS5zaDoyNjY5IGdpdC1ndWkuc2g6MzMxMCBnaXQtZ3VpLnNoOjMzNDEKK21zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKK21zZ3N0ciAiTW9zdHJhIG1lbm8gY29udGVzdG8iCisKKyM6IGdpdC1ndWkuc2g6MjY3MyBnaXQtZ3VpLnNoOjMzMTQgZ2l0LWd1aS5zaDozMzQ1Cittc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCittc2dzdHIgIk1vc3RyYSBwacO5IGNvbnRlc3RvIgorCisjOiBnaXQtZ3VpLnNoOjI2ODAgZ2l0LWd1aS5zaDozMDI0IGdpdC1ndWkuc2g6MzEzMworbXNnaWQgIlNpZ24gT2ZmIgorbXNnc3RyICJTaWduIE9mZiIKKworIzogZ2l0LWd1aS5zaDoyNjk2Cittc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCittc2dzdHIgIkZ1c2lvbmUgbG9jYWxlLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3MDEKK21zZ2lkICJBYm9ydCBNZXJnZS4uLiIKK21zZ3N0ciAiSW50ZXJyb21waSBmdXNpb25lLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3MTMgZ2l0LWd1aS5zaDoyNzQxCittc2dpZCAiQWRkLi4uIgorbXNnc3RyICJBZ2dpdW5naS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzE3Cittc2dpZCAiUHVzaC4uLiIKK21zZ3N0ciAiUHJvcGFnYS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzIxCittc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKK21zZ3N0ciAiRWxpbWluYSByYW1vLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3MzEgZ2l0LWd1aS5zaDozMjkyCittc2dpZCAiT3B0aW9ucy4uLiIKK21zZ3N0ciAiT3B6aW9uaS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzQyCittc2dpZCAiUmVtb3ZlLi4uIgorbXNnc3RyICJSaW11b3ZpLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MAorbXNnaWQgIkhlbHAiCittc2dzdHIgIkFpdXRvIgorCisjOiBnaXQtZ3VpLnNoOjI3NTUgZ2l0LWd1aS5zaDoyNzU5IGxpYi9hYm91dC50Y2w6MTQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkFib3V0ICVzIgorbXNnc3RyICJJbmZvcm1hemlvbmkgc3UgJXMiCisKKyM6IGdpdC1ndWkuc2g6Mjc4MworbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgorbXNnc3RyICJEb2N1bWVudGF6aW9uZSBzdWwgd2ViIgorCisjOiBnaXQtZ3VpLnNoOjI3ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2Cittc2dpZCAiU2hvdyBTU0ggS2V5IgorbXNnc3RyICJNb3N0cmEgY2hhdmUgU1NIIgorCisjOiBnaXQtZ3VpLnNoOjI4OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImVycm9yZSBncmF2ZTogaW1wb3NzaWJpbGUgZWZmZXR0dWFyZSBsbyBzdGF0IGRlbCBwYXRoICVzOiBmaWxlIG8gZGlyZWN0b3J5ICIKKyJub24gdHJvdmF0YSIKKworIzogZ2l0LWd1aS5zaDoyOTI2Cittc2dpZCAiQ3VycmVudCBCcmFuY2g6IgorbXNnc3RyICJSYW1vIGF0dHVhbGU6IgorCisjOiBnaXQtZ3VpLnNoOjI5NDcKK21zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgorbXNnc3RyICJNb2RpZmljaGUgcHJlcGFyYXRlIChzYXJhbm5vIG5lbGxhIG51b3ZhIHJldmlzaW9uZSkiCisKKyM6IGdpdC1ndWkuc2g6Mjk2NworbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCittc2dzdHIgIk1vZGlmaWNoZSBub24gcHJlcGFyYXRlIgorCisjOiBnaXQtZ3VpLnNoOjMwMTcKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIgorbXNnc3RyICJQcmVwYXJhIG1vZGlmaWNhdGkiCisKKyM6IGdpdC1ndWkuc2g6MzAzNiBsaWIvdHJhbnNwb3J0LnRjbDoxMDQgbGliL3RyYW5zcG9ydC50Y2w6MTkzCittc2dpZCAiUHVzaCIKK21zZ3N0ciAiUHJvcGFnYSAoUHVzaCkiCisKKyM6IGdpdC1ndWkuc2g6MzA3MQorbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdnaW8gZGkgcmV2aXNpb25lIGluaXppYWxlOiIKKworIzogZ2l0LWd1aS5zaDozMDcyCittc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIk1lc3NhZ2dpbyBkaSByZXZpc2lvbmUgY29ycmV0dG86IgorCisjOiBnaXQtZ3VpLnNoOjMwNzMKK21zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdnaW8gaW5pemlhbGUgZGkgcmV2aXNpb25lIGNvcnJldHRvOiIKKworIzogZ2l0LWd1aS5zaDozMDc0Cittc2dpZCAiQW1lbmRlZCBNZXJnZSBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIk1lc3NhZ2dpbyBkaSBmdXNpb25lIGNvcnJldHRvOiIKKworIzogZ2l0LWd1aS5zaDozMDc1Cittc2dpZCAiTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdnaW8gZGkgZnVzaW9uZToiCisKKyM6IGdpdC1ndWkuc2g6MzA3NgorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiTWVzc2FnZ2lvIGRpIHJldmlzaW9uZToiCisKKyM6IGdpdC1ndWkuc2g6MzEyNSBnaXQtZ3VpLnNoOjMyNjcgbGliL2NvbnNvbGUudGNsOjczCittc2dpZCAiQ29weSBBbGwiCittc2dzdHIgIkNvcGlhIHR1dHRvIgorCisjOiBnaXQtZ3VpLnNoOjMxNDkgbGliL2JsYW1lLnRjbDoxMDQKK21zZ2lkICJGaWxlOiIKK21zZ3N0ciAiRmlsZToiCisKKyM6IGdpdC1ndWkuc2g6MzI1NQorbXNnaWQgIlJlZnJlc2giCittc2dzdHIgIlJpbmZyZXNjYSIKKworIzogZ2l0LWd1aS5zaDozMjc2Cittc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgorbXNnc3RyICJEaW1pbnVpc2NpIGRpbWVuc2lvbmUgY2FyYXR0ZXJpIgorCisjOiBnaXQtZ3VpLnNoOjMyODAKK21zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIkF1bWVudGEgZGltZW5zaW9uZSBjYXJhdHRlcmkiCisKKyM6IGdpdC1ndWkuc2g6MzI4OCBsaWIvYmxhbWUudGNsOjI4MQorbXNnaWQgIkVuY29kaW5nIgorbXNnc3RyICJDb2RpZmljYSIKKworIzogZ2l0LWd1aS5zaDozMjk5Cittc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgorbXNnc3RyICJBcHBsaWNhL0ludmVydGkgc2V6aW9uZSIKKworIzogZ2l0LWd1aS5zaDozMzA0Cittc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgorbXNnc3RyICJBcHBsaWNhL0ludmVydGkgcmlnYSIKKworIzogZ2l0LWd1aS5zaDozMzIzCittc2dpZCAiUnVuIE1lcmdlIFRvb2wiCittc2dzdHIgIkF2dmlhIHByb2dyYW1tYSBlc3Rlcm5vIHBlciBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIgorCisjOiBnaXQtZ3VpLnNoOjMzMjgKK21zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCittc2dzdHIgIlVzYSB2ZXJzaW9uZSByZW1vdGEiCisKKyM6IGdpdC1ndWkuc2g6MzMzMgorbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgorbXNnc3RyICJVc2EgdmVyc2lvbmUgbG9jYWxlIgorCisjOiBnaXQtZ3VpLnNoOjMzMzYKK21zZ2lkICJSZXZlcnQgVG8gQmFzZSIKK21zZ3N0ciAiUml0b3JuYSBhbGxhIHJldmlzaW9uZSBjb211bmUiCisKKyM6IGdpdC1ndWkuc2g6MzM1NAorbXNnaWQgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIlZpc3VhbGl6emEgcXVlc3RlIG1vZGlmaWNoZSBuZWwgc290dG9tb2R1bG8iCisKKyM6IGdpdC1ndWkuc2g6MzM1OAorbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIlZpc3VhbGl6emEgbGEgY3Jvbm9sb2dpYSBkZWwgcmFtbyBhdHR1YWxlIG5lbCBzb3R0b21vZHVsbyIKKworIzogZ2l0LWd1aS5zaDozMzYyCittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJWaXN1YWxpenphIGxhIGNyb25vbG9naWEgZGkgdHV0dGkgaSByYW1pIG5lbCBzb3R0b21vZHVsbyIKKworIzogZ2l0LWd1aS5zaDozMzY3Cittc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJBdnZpYSBnaXQgZ3VpIG5lbCBzb3R0b21vZHVsbyIKKworIzogZ2l0LWd1aS5zaDozMzg5Cittc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgorbXNnc3RyICJBbm51bGxhIHByZXBhcmF6aW9uZSBkZWxsYSBzZXppb25lIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgorCisjOiBnaXQtZ3VpLnNoOjMzOTEKK21zZ2lkICJVbnN0YWdlIExpbmVzIEZyb20gQ29tbWl0IgorbXNnc3RyICJBbm51bGxhIHByZXBhcmF6aW9uZSBkZWxsZSBsaW5lZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDozMzkzCittc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgorbXNnc3RyICJBbm51bGxhIHByZXBhcmF6aW9uZSBkZWxsYSBsaW5lYSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDozMzk2Cittc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgorbXNnc3RyICJQcmVwYXJhIHNlemlvbmUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MzM5OAorbXNnaWQgIlN0YWdlIExpbmVzIEZvciBDb21taXQiCittc2dzdHIgIlByZXBhcmEgbGluZWUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MzQwMAorbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKK21zZ3N0ciAiUHJlcGFyYSBsaW5lYSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDozNDI0Cittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICJJbml6aWFsaXp6YXppb25lLi4uIgorCisjOiBnaXQtZ3VpLnNoOjM1NDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisiUG9zc2liaWxpIHByb2JsZW1pIGNvbiBsZSB2YXJpYWJpbGkgZCdhbWJpZW50ZS5cbiIKKyJcbiIKKyJMZSBzZWd1ZW50aSB2YXJpYWJpbGkgZCdhbWJpZW50ZSBzYXJhbm5vIHByb2JhYmlsbWVudGVcbiIKKyJpZ25vcmF0ZSBkYSB0dXR0aSBpIHNvdHRvcHJvY2Vzc2kgZGkgR2l0IGF2dmlhdGlcbiIKKyJkYSAlczpcbiIKKyJcbiIKKworIzogZ2l0LWd1aS5zaDozNTcwCittc2dpZCAiIgorIlxuIgorIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKKyJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCittc2dzdHIgIiIKKyJcbiIKKyJDacOyIMOoIGRvdnV0byBhIHVuIHByb2JsZW1hIGNvbm9zY2l1dG9cbiIKKyJjYXVzYXRvIGRhbGwnZXNlZ3VpYmlsZSBUY2wgZGlzdHJpYnVpdG8gZGEgQ3lnd2luLiIKKworIzogZ2l0LWd1aS5zaDozNTc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIkEgZ29vZCByZXBsYWNlbWVudCBmb3IgJXNcbiIKKyJpcyBwbGFjaW5nIHZhbHVlcyBmb3IgdGhlIHVzZXIubmFtZSBhbmRcbiIKKyJ1c2VyLmVtYWlsIHNldHRpbmdzIGludG8geW91ciBwZXJzb25hbFxuIgorIn4vLmdpdGNvbmZpZyBmaWxlLlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiVW5hIGJ1b25hIGFsdGVybmF0aXZhIGEgJXNcbiIKKyJjb25zaXN0ZSBuZWxsJ2Fzc2VnbmFyZSB2YWxvcmkgYWxsZSB2YXJpYWJpbGkgZGkgY29uZmlndXJhemlvbmVcbiIKKyJ1c2VyLm5hbWUgZSB1c2VyLmVtYWlsIG5lbCB0dW8gZmlsZSB+Ly5naXRjb25maWcgcGVyc29uYWxlLlxuIgorCisjOiBsaWIvYWJvdXQudGNsOjI2Cittc2dpZCAiZ2l0LWd1aSAtIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBHaXQuIgorbXNnc3RyICJnaXQtZ3VpIC0gdW4naW50ZXJmYWNjaWEgZ3JhZmljYSBwZXIgR2l0LiIKKworIzogbGliL2JsYW1lLnRjbDo3MgorbXNnaWQgIkZpbGUgVmlld2VyIgorbXNnc3RyICJNb3N0cmEgZmlsZSIKKworIzogbGliL2JsYW1lLnRjbDo3OAorbXNnaWQgIkNvbW1pdDoiCittc2dzdHIgIlJldmlzaW9uZToiCisKKyM6IGxpYi9ibGFtZS50Y2w6MjcxCittc2dpZCAiQ29weSBDb21taXQiCittc2dzdHIgIkNvcGlhIHJldmlzaW9uZSIKKworIzogbGliL2JsYW1lLnRjbDoyNzUKK21zZ2lkICJGaW5kIFRleHQuLi4iCittc2dzdHIgIlRyb3ZhIHRlc3RvLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjI4NAorbXNnaWQgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iCittc2dzdHIgIlJpY2VyY2EgYWNjdXJhdGEgZGVsbGUgY29waWUiCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg4Cittc2dpZCAiU2hvdyBIaXN0b3J5IENvbnRleHQiCittc2dzdHIgIk1vc3RyYSBjb250ZXN0byBuZWxsYSBjcm9ub2xvZ2lhIgorCisjOiBsaWIvYmxhbWUudGNsOjI5MQorbXNnaWQgIkJsYW1lIFBhcmVudCBDb21taXQiCittc2dzdHIgIkFubm90YSBsYSByZXZpc2lvbmUgcHJlY2VkZW50ZSIKKworIzogbGliL2JsYW1lLnRjbDo0NTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZWFkaW5nICVzLi4uIgorbXNnc3RyICJMZXR0dXJhIGRpICVzLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjU1NworbXNnaWQgIkxvYWRpbmcgY29weS9tb3ZlIHRyYWNraW5nIGFubm90YXRpb25zLi4uIgorbXNnc3RyICJDYXJpY2FtZW50byBhbm5vdGF6aW9uaSBwZXIgY29waWUvc3Bvc3RhbWVudGkuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NTc3Cittc2dpZCAibGluZXMgYW5ub3RhdGVkIgorbXNnc3RyICJsaW5lZSBhbm5vdGF0ZSIKKworIzogbGliL2JsYW1lLnRjbDo3NjkKK21zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgorbXNnc3RyICJDYXJpY2FtZW50byBhbm5vdGF6aW9uaSBwZXIgcG9zaXppb25lIG9yaWdpbmFyaWEuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzcyCittc2dpZCAiQW5ub3RhdGlvbiBjb21wbGV0ZS4iCittc2dzdHIgIkFubm90YXppb25lIGNvbXBsZXRhdGEuIgorCisjOiBsaWIvYmxhbWUudGNsOjgwMgorbXNnaWQgIkJ1c3kiCittc2dzdHIgIk9jY3VwYXRvIgorCisjOiBsaWIvYmxhbWUudGNsOjgwMworbXNnaWQgIkFubm90YXRpb24gcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcuIgorbXNnc3RyICJJbCBwcm9jZXNzbyBkaSBhbm5vdGF6aW9uZSDDqCBnacOgIGluIGNvcnNvLiIKKworIzogbGliL2JsYW1lLnRjbDo4NDIKK21zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgorbXNnc3RyICJSaWNlcmNhIGFjY3VyYXRhIGRlbGxlIGNvcGllIGluIGNvcnNvLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjkxMAorbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKK21zZ3N0ciAiQ2FyaWNhbWVudG8gYW5ub3RhemlvbmkuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6OTYzCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiQXV0b3JlOiIKKworIzogbGliL2JsYW1lLnRjbDo5NjcKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJSZXZpc2lvbmUgY3JlYXRhIGRhOiIKKworIzogbGliL2JsYW1lLnRjbDo5NzIKK21zZ2lkICJPcmlnaW5hbCBGaWxlOiIKK21zZ3N0ciAiRmlsZSBvcmlnaW5hcmlvOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDIwCittc2dpZCAiQ2Fubm90IGZpbmQgSEVBRCBjb21taXQ6IgorbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIGxhIHJldmlzaW9uZSBIRUFEOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDc1Cittc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCittc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgbGEgcmV2aXNpb25lIHByZWNlZGVudGU6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwOTAKK21zZ2lkICJVbmFibGUgdG8gZGlzcGxheSBwYXJlbnQiCittc2dzdHIgIkltcG9zc2liaWxlIHZpc3VhbGl6emFyZSBsYSByZXZpc2lvbmUgcHJlY2VkZW50ZSIKKworIzogbGliL2JsYW1lLnRjbDoxMDkxIGxpYi9kaWZmLnRjbDozMjAKK21zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgorbXNnc3RyICJFcnJvcmUgbmVsIGNhcmljYW1lbnRvIGRlbGxlIGRpZmZlcmVuemU6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyMzEKK21zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKK21zZ3N0ciAiSW4gb3JpZ2luZSBkYToiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTIzNworbXNnaWQgIkluIEZpbGU6IgorbXNnc3RyICJOZWwgZmlsZToiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI0MgorbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKK21zZ3N0ciAiQ29waWF0byBvIHNwb3N0YXRvIHF1aSBkYToiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE0IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE5Cittc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICJBdHRpdmEgcmFtbyIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjMKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAiQXR0aXZhIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzUKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozMiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzAgbGliL2Jyb3dzZXIudGNsOjI4MgorIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzkgbGliL2Nob29zZV9mb250LnRjbDo0MyBsaWIvbWVyZ2UudGNsOjE3MgorIzogbGliL29wdGlvbi50Y2w6MTI1IGxpYi9yZW1vdGVfYWRkLnRjbDozMiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQyCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0MCBsaWIvdG9vbHNfZGxnLnRjbDoyMDQgbGliL3Rvb2xzX2RsZy50Y2w6MzUyCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDgKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkFubnVsbGEiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMyIGxpYi9icm93c2VyLnRjbDoyODcgbGliL3Rvb2xzX2RsZy50Y2w6MzI4Cittc2dpZCAiUmV2aXNpb24iCittc2dzdHIgIlJldmlzaW9uZSIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzYgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjI4MAorbXNnaWQgIk9wdGlvbnMiCittc2dzdHIgIk9wemlvbmkiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgorbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiUmVjdXBlcmEgZHVwbGljYXRvIGxvY2FsZSBkaSByYW1vIHJlbW90byIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDQKK21zZ2lkICJEZXRhY2ggRnJvbSBMb2NhbCBCcmFuY2giCittc2dzdHIgIlN0YWNjYSBkYSByYW1vIGxvY2FsZSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIyCittc2dpZCAiQ3JlYXRlIEJyYW5jaCIKK21zZ3N0ciAiQ3JlYSByYW1vIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjcKK21zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKK21zZ3N0ciAiQ3JlYSBudW92byByYW1vIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODEKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyZWEiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MAorbXNnaWQgIkJyYW5jaCBOYW1lIgorbXNnc3RyICJOb21lIGRlbCByYW1vIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMgbGliL3JlbW90ZV9hZGQudGNsOjM5IGxpYi90b29sc19kbGcudGNsOjUwCittc2dpZCAiTmFtZToiCittc2dzdHIgIk5vbWU6IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTgKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKK21zZ3N0ciAiQXBwYWlhIG5vbWUgZGVsIGR1cGxpY2F0byBsb2NhbGUgZGkgcmFtbyByZW1vdG8iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2NgorbXNnaWQgIlN0YXJ0aW5nIFJldmlzaW9uIgorbXNnc3RyICJSZXZpc2lvbmUgaW5pemlhbGUiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgorbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgorbXNnc3RyICJBZ2dpb3JuYSByYW1vIGVzaXN0ZW50ZToiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQorbXNnaWQgIk5vIgorbXNnc3RyICJObyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjgwCittc2dpZCAiRmFzdCBGb3J3YXJkIE9ubHkiCittc2dzdHIgIlNvbG8gZmFzdCBmb3J3YXJkIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1NzEKK21zZ2lkICJSZXNldCIKK21zZ3N0ciAiUmlwcmlzdGluYSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Cittc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCittc2dzdHIgIkF0dGl2YSBkb3BvIGxhIGNyZWF6aW9uZSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgorbXNnc3RyICJTY2VnbGllcmUgdW4gZHVwbGljYXRvIGxvY2FsZSBkaSByYW1vIHJlbW90byIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE0MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRyYWNraW5nIGJyYW5jaCAlcyBpcyBub3QgYSBicmFuY2ggaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiIgorIklsIGR1cGxpY2F0byBsb2NhbGUgZGVsIHJhbW8gcmVtb3RvICVzIG5vbiDDqCB1biByYW1vIG5lbGwnYXJjaGl2aW8gcmVtb3RvLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1MyBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6ODYKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIgorbXNnc3RyICJJbnNlcmlyZSB1biBub21lIHBlciBpbCByYW1vLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcycgbm9uIMOoIHV0aWxpenphYmlsZSBjb21lIG5vbWUgZGkgcmFtby4iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNQorbXNnaWQgIkRlbGV0ZSBCcmFuY2giCittc2dzdHIgIkVsaW1pbmEgcmFtbyIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjIwCittc2dpZCAiRGVsZXRlIExvY2FsIEJyYW5jaCIKK21zZ3N0ciAiRWxpbWluYSByYW1vIGxvY2FsZSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM3Cittc2dpZCAiTG9jYWwgQnJhbmNoZXMiCittc2dzdHIgIlJhbWkgbG9jYWxpIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTIKK21zZ2lkICJEZWxldGUgT25seSBJZiBNZXJnZWQgSW50byIKK21zZ3N0ciAiQ2FuY2VsbGEgc29sbyBzZSBmdXNvIGNvbiB1biBhbHRybyByYW1vIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTQgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTkKK21zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCittc2dzdHIgIlNlbXByZSAobm9uIHZlcmlmaWNhcmUgbGUgZnVzaW9uaSkiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCittc2dzdHIgIkkgcmFtaSBzZWd1ZW50aSBub24gc29ubyBzdGF0aSBmdXNpIGNvbXBsZXRhbWVudGUgaW4gJXM6IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE3Cittc2dpZCAiIgorIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCisiXG4iCisiRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCittc2dzdHIgIiIKKyJSaXByaXN0aW5hcmUgcmFtaSBjYW5jZWxsYXRpIMOoIGRpZmZpY2lsZS5cbiIKKyJcbiIKKyJDYW5jZWxsYXJlIGkgcmFtaSBzZWxlemlvbmF0aT8iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGNhbmNlbGxhcmUgaSByYW1pOlxuIgorIiVzIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjIyCittc2dpZCAiUmVuYW1lIEJyYW5jaCIKK21zZ3N0ciAiUmlub21pbmEgcmFtbyIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjI2Cittc2dpZCAiUmVuYW1lIgorbXNnc3RyICJSaW5vbWluYSIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM2Cittc2dpZCAiQnJhbmNoOiIKK21zZ3N0ciAiUmFtbzoiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozOQorbXNnaWQgIk5ldyBOYW1lOiIKK21zZ3N0ciAiTnVvdm8gTm9tZToiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo3NQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKK21zZ3N0ciAiU2NlZ2xpZXJlIHVuIHJhbW8gZGEgcmlub21pbmFyZS4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo5NiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiSWwgcmFtbyAnJXMnIGVzaXN0ZSBnacOgLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjExNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCittc2dzdHIgIkltcG9zc2liaWxlIHJpbm9taW5hcmUgJyVzJy4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoxNworbXNnaWQgIlN0YXJ0aW5nLi4uIgorbXNnc3RyICJBdnZpbyBpbiBjb3Jzby4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjI2Cittc2dpZCAiRmlsZSBCcm93c2VyIgorbXNnc3RyICJGaWxlIGJyb3dzZXIiCisKKyM6IGxpYi9icm93c2VyLnRjbDoxMjYgbGliL2Jyb3dzZXIudGNsOjE0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgJXMuLi4iCittc2dzdHIgIkNhcmljYW1lbnRvICVzLi4uIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTg3Cittc2dpZCAiW1VwIFRvIFBhcmVudF0iCittc2dzdHIgIltEaXJlY3Rvcnkgc3VwZXJpb3JlXSIKKworIzogbGliL2Jyb3dzZXIudGNsOjI2NyBsaWIvYnJvd3Nlci50Y2w6MjczCittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKK21zZ3N0ciAiRXNwbG9yYSBpIGZpbGUgZGVsIHJhbW8iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNzggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTgKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjgKK21zZ2lkICJCcm93c2UiCittc2dzdHIgIkVzcGxvcmEiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6ODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgorbXNnc3RyICJSZWN1cGVybyAlcyBkYSAlcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCittc2dzdHIgImVycm9yZSBncmF2ZTogaW1wb3NzaWJpbGUgcmlzb2x2ZXJlICVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQorIzogbGliL3NzaGtleS50Y2w6NTMKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiQ2hpdWRpIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiSWwgcmFtbyAnJXMnIG5vbiBlc2lzdGUuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCittc2dzdHIgIkltcG9zc2liaWxlIGNvbmZpZ3VyYXJlIGdpdC1wdWxsIHNlbXBsaWZpY2F0byBwZXIgJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgorIlxuIgorIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCisiQSBtZXJnZSBpcyByZXF1aXJlZC4iCittc2dzdHIgIiIKKyJJbCByYW1vICclcycgZXNpc3RlIGdpw6AuXG4iCisiXG4iCisiTm9uIHB1w7IgZWZmZXR0dWFyZSB1biAnZmFzdC1mb3J3YXJkJyBhICVzLlxuIgorIkUnIG5lY2Vzc2FyaWEgdW5hIGZ1c2lvbmUuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdlIHN0cmF0ZWd5ICclcycgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIkxhIHN0cmF0ZWdpYSBkaSBmdXNpb25lICclcycgbm9uIMOoIHN1cHBvcnRhdGEuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCittc2dzdHIgIkltcG9zc2liaWxlIGFnZ2lvcm5hcmUgJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjc0Cittc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgorbXNnc3RyICIiCisiTCdhcmVhIGRpIHByZXBhcmF6aW9uZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSAoaW5kaWNlKSDDqCBnacOgIGJsb2NjYXRhLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIkwndWx0aW1vIHN0YXRvIGFuYWxpenphdG8gbm9uIGNvcnJpc3BvbmRlIGFsbG8gc3RhdG8gZGVsbCdhcmNoaXZpby5cbiIKKyJcbiIKKyJVbiBhbHRybyBwcm9ncmFtbWEgR2l0IGhhIG1vZGlmaWNhdG8gcXVlc3RvIGFyY2hpdmlvIGRhbGwndWx0aW1hIGFuYWxpc2kuICIKKyJCaXNvZ25hIGVmZmV0dHVhcmUgdW5hIG51b3ZhIGFuYWxpc2kgcHJpbWEgZGkgcG90ZXIgY2FtYmlhcmUgaWwgcmFtbyAiCisiYXR0dWFsZS5cbiIKKyJcbiIKKyJMYSBudW92YSBhbmFsaXNpIGNvbWluY2Vyw6Agb3JhLlxuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvICclcycuLi4iCittc2dzdHIgIkFnZ2lvcm5hbWVudG8gZGVsbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyBhICclcycgaW4gY29yc28uLi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Cittc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCittc2dzdHIgImZpbGUgcHJlc2VudGkgbmVsbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorbXNnc3RyICJBdHRpdmF6aW9uZSBkaSAnJXMnIGZhbGxpdGEgKHJpY2hpZXN0YSB1bmEgZnVzaW9uZSBhIGxpdmVsbG8gZmlsZSkuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NworbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgorbXNnc3RyICJFJyByaWNoaWVzdGEgdW5hIGZ1c2lvbmUgYSBsaXZlbGxvIGZpbGUuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgorbXNnc3RyICJTaSByaW1hcnLDoCBzdWwgcmFtbyAnJXMnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKK21zZ2lkICIiCisiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCisiQ2hlY2tvdXQnLiIKK21zZ3N0ciAiIgorIk5vbiBzaSDDqCBwacO5IHN1IHVuIHJhbW8gbG9jYWxlXG4iCisiXG4iCisiU2Ugc2kgdnVvbGUgcmltYW5lcmUgc3UgdW4gcmFtbywgY3JlYXJuZSB1bm8gb3JhIGEgcGFydGlyZSBkYSAnUXVlc3RhICIKKyJyZXZpc2lvbmUgYXR0aXZhIHN0YWNjYXRhJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCittc2dzdHIgIkF0dGl2YXppb25lIGRpICclcycgY29tcGxldGF0YS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKK21zZ3N0ciAiIgorIlJpcHJpc3RpbmFyZSAnJXMnIGEgJyVzJyBjb21wb3J0ZXLDoCBsYSBwZXJkaXRhIGRlbGxlIHNlZ3VlbnRpIHJldmlzaW9uaToiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Cittc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKK21zZ3N0ciAiUmljb21wb3JyZSBsZSByZXZpc2lvbmkgcGVyZHV0ZSBwb3RyZWJiZSBub24gZXNzZXJlIHNlbXBsaWNlLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAnJXMnPyIKK21zZ3N0ciAiUmlwcmlzdGluYXJlICclcyc/IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKK21zZ2lkICJWaXN1YWxpemUiCittc2dzdHIgIlZpc3VhbGl6emEiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCisiXG4iCisiVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKKyJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIHByZXBhcmFyZSBpbCByYW1vIGF0dHVhbGUuXG4iCisiXG4iCisiUXVlc3RhIGRpcmVjdG9yeSBkaSBsYXZvcm8gw6ggc3RhdGEgY29udmVydGl0YSBzb2xvIHBhcnppYWxtZW50ZS4gSSBmaWxlIHNvbm8gIgorInN0YXRpIGFnZ2lvcm5hdGkgY29ycmV0dGFtZW50ZSwgbWEgbCdhZ2dpb3JuYW1lbnRvIGRpIHVuIGZpbGUgZGkgR2l0IGhhICIKKyJwcm9kb3R0byBkZWdsaSBlcnJvcmkuXG4iCisiXG4iCisiUXVlc3RvIG5vbiBzYXJlYmJlIGRvdnV0byBzdWNjZWRlcmUuICAlcyBvcmEgdGVybWluZXLDoCBzZW56YSBhbHRyZSBhemlvbmkuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjM5Cittc2dpZCAiU2VsZWN0IgorbXNnc3RyICJTZWxlemlvbmEiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NTMKK21zZ2lkICJGb250IEZhbWlseSIKK21zZ3N0ciAiRmFtaWdsaWEgZGkgY2FyYXR0ZXJpIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjc0Cittc2dpZCAiRm9udCBTaXplIgorbXNnc3RyICJEaW1lbnNpb25lIGNhcmF0dGVyaSIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo5MQorbXNnaWQgIkZvbnQgRXhhbXBsZSIKK21zZ3N0ciAiRXNlbXBpbyBjYXJhdHRlcmkiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTAzCittc2dpZCAiIgorIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgorIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCittc2dzdHIgIiIKKyJRdWVzdG8gw6ggdW4gdGVzdG8gZCdlc2VtcGlvLlxuIgorIlNlIHRpIHBpYWNlIHF1ZXN0byB0ZXN0bywgc2NlZ2xpIHF1ZXN0byBjYXJhdHRlcmUuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjI4Cittc2dpZCAiR2l0IEd1aSIKK21zZ3N0ciAiR2l0IEd1aSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NgorbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKK21zZ3N0ciAiQ3JlYSBudW92byBhcmNoaXZpbyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MworbXNnaWQgIk5ldy4uLiIKK21zZ3N0ciAiTnVvdm8uLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcxCittc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKK21zZ3N0ciAiQ2xvbmEgYXJjaGl2aW8gZXNpc3RlbnRlIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNgorbXNnaWQgIkNsb25lLi4uIgorbXNnc3RyICJDbG9uYS4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE2Cittc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICJBcHJpIGFyY2hpdmlvIGVzaXN0ZW50ZSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTkKK21zZ2lkICJPcGVuLi4uIgorbXNnc3RyICJBcHJpLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzMgorbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCittc2dzdHIgIkFyY2hpdmkgcmVjZW50aSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzgKK21zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKK21zZ3N0ciAiQXByaSBhcmNoaXZpbyByZWNlbnRlOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY3JlYXJlIGwnYXJjaGl2aW8gJXM6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5MQorbXNnaWQgIkRpcmVjdG9yeToiCittc2dzdHIgIkRpcmVjdG9yeToiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTIKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSIKK21zZ3N0ciAiQXJjaGl2aW8gR2l0IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkxhIGRpcmVjdG9yeSAlcyBlc2lzdGUgZ2nDoC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIklsIGZpbGUgJXMgZXNpc3RlIGdpw6AuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NgorbXNnaWQgIkNsb25lIgorbXNnc3RyICJDbG9uYSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzkKK21zZ2lkICJTb3VyY2UgTG9jYXRpb246IgorbXNnc3RyICJQb3NpemlvbmUgc29yZ2VudGU6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MAorbXNnaWQgIlRhcmdldCBEaXJlY3Rvcnk6IgorbXNnc3RyICJEaXJlY3RvcnkgZGkgZGVzdGluYXppb25lOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDIKK21zZ2lkICJDbG9uZSBUeXBlOiIKK21zZ3N0ciAiVGlwbyBkaSBjbG9uZToiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA4Cittc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgorbXNnc3RyICJTdGFuZGFyZCAodmVsb2NlLCBzZW1pLXJpZG9uZGFudGUsIGNvbiBoYXJkbGluaykiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0Cittc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgorbXNnc3RyICJDb3BpYSBjb21wbGV0YSAocGnDuSBsZW50bywgYmFja3VwIHJpZG9uZGFudGUpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyMAorbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgorbXNnc3RyICJTaGFyZWQgKGlsIHBpw7kgdmVsb2NlLCBub24gcmFjY29tYW5kYXRvLCBuZXNzdW4gYmFja3VwKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MDMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODE5CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICIlcyBub24gw6ggdW4gYXJjaGl2aW8gR2l0LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTIKK21zZ2lkICJTdGFuZGFyZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIlN0YW5kYXJkIMOoIGRpc3BvbmliaWxlIHNvbG8gcGVyIGFyY2hpdmkgbG9jYWxpLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTYKK21zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJTaGFyZWQgw6ggZGlzcG9uaWJpbGUgc29sbyBwZXIgYXJjaGl2aSBsb2NhbGkuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiSWwgZmlsZS9kaXJlY3RvcnkgJXMgZXNpc3RlIGdpw6AuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyOAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjb25maWd1cmFyZSBvcmlnaW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQwCittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiQ2FsY29sbyBvZ2dldHRpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MQorbXNnaWQgImJ1Y2tldHMiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCittc2dzdHIgIkltcG9zc2liaWxlIGNvcGlhcmUgb2dnZXR0aS9pbmZvL2FsdGVybmF0ZTogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKK21zZ3N0ciAiTmllbnRlIGRhIGNsb25hcmUgZGEgJXMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjkKK21zZ2lkICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iCittc2dzdHIgIklsIHJhbW8gJ21hc3Rlcicgbm9uIMOoIHN0YXRvIGluaXppYWxpenphdG8uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxNgorbXNnaWQgIkhhcmRsaW5rcyBhcmUgdW5hdmFpbGFibGUuICBGYWxsaW5nIGJhY2sgdG8gY29weWluZy4iCittc2dzdHIgIkltcG9zc2liaWxlIHV0aWxpenphcmUgZ2xpIGhhcmRsaW5rLiBTaSByaWNvcnJlcsOgIGFsbGEgY29waWEuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKK21zZ3N0ciAiQ2xvbmF6aW9uZSBkYSAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTkKK21zZ2lkICJDb3B5aW5nIG9iamVjdHMiCittc2dzdHIgIkNvcGlhIGRlZ2xpIG9nZ2V0dGkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzYwCittc2dpZCAiS2lCIgorbXNnc3RyICJLaUIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY29waWFyZSBvZ2dldHRvOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTQKK21zZ2lkICJMaW5raW5nIG9iamVjdHMiCittc2dzdHIgIkNvbGxlZ2FtZW50byBvZ2dldHRpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NQorbXNnaWQgIm9iamVjdHMiCittc2dzdHIgIm9nZ2V0dGkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCittc2dzdHIgIkhhcmRsaW5rIGltcG9zc2liaWxlIHN1bGwnb2dnZXR0bzogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU4Cittc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIHJlY3VwZXJhcmUgcmFtaSBlIG9nZ2V0dGkuIENvbnRyb2xsYXJlIGkgZGV0dGFnbGkgZm9ybml0aSBkYWxsYSAiCisiY29uc29sZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODY5Cittc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBsZSBldGljaGV0dGUuIENvbnRyb2xsYXJlIGkgZGV0dGFnbGkgZm9ybml0aSBkYWxsYSAiCisiY29uc29sZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkzCittc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGRldGVybWluYXJlIEhFQUQuIENvbnRyb2xsYXJlIGkgZGV0dGFnbGkgZm9ybml0aSBkYWxsYSBjb25zb2xlLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2xlYW51cCAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmlwdWxpcmUgJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA4Cittc2dpZCAiQ2xvbmUgZmFpbGVkLiIKK21zZ3N0ciAiQ2xvbmF6aW9uZSBub24gcml1c2NpdGEuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNQorbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHRyb3ZhdG8gdW4gcmFtbyBwcmVkZWZpbml0by4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgorbXNnc3RyICJJbXBvc3NpYmlsZSByaXNvbHZlcmUgJXMgY29tZSB1bmEgcmV2aXNpb25lLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzgKK21zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiQ3JlYXppb25lIGRpcmVjdG9yeSBkaSBsYXZvcm8iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM5IGxpYi9pbmRleC50Y2w6NjcgbGliL2luZGV4LnRjbDoxMzAKKyM6IGxpYi9pbmRleC50Y2w6MTk4Cittc2dpZCAiZmlsZXMiCittc2dzdHIgImZpbGUiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTY4Cittc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCittc2dzdHIgIkF0dGl2YXppb25lIGluaXppYWxlIG5vbiByaXVzY2l0YS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxMQorbXNnaWQgIk9wZW4iCittc2dzdHIgIkFwcmkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyMQorbXNnaWQgIlJlcG9zaXRvcnk6IgorbXNnc3RyICJBcmNoaXZpbzoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJJbXBvc3NpYmlsZSBhY2NlZGVyZSBhbGwnYXJjaGl2aW8gJXM6IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMKK21zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgorbXNnc3RyICJRdWVzdGEgcmV2aXNpb25lIGF0dGl2YSBzdGFjY2F0YSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjYwCittc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCittc2dzdHIgIkVzcHJlc3Npb25lIGRpIHJldmlzaW9uZToiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NAorbXNnaWQgIkxvY2FsIEJyYW5jaCIKK21zZ3N0ciAiUmFtbyBsb2NhbGUiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3OQorbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiRHVwbGljYXRvIGxvY2FsZSBkaSByYW1vIHJlbW90byIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjg0IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzgKK21zZ2lkICJUYWciCittc2dzdHIgIkV0aWNoZXR0YSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjMxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmV2aXNpb246ICVzIgorbXNnc3RyICJSZXZpc2lvbmUgbm9uIHZhbGlkYTogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMzgKK21zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCittc2dzdHIgIk5lc3N1bmEgcmV2aXNpb25lIHNlbGV6aW9uYXRhLiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjM0NgorbXNnaWQgIlJldmlzaW9uIGV4cHJlc3Npb24gaXMgZW1wdHkuIgorbXNnc3RyICJMJ2VzcHJlc3Npb25lIGRpIHJldmlzaW9uZSDDqCB2dW90YS4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzEKK21zZ2lkICJVcGRhdGVkIgorbXNnc3RyICJBZ2dpb3JuYXRvIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTU5Cittc2dpZCAiVVJMIgorbXNnc3RyICJVUkwiCisKKyM6IGxpYi9jb21taXQudGNsOjkKK21zZ2lkICIiCisiVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKKyJcbiIKKyJZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgIgorInRvIGFtZW5kLlxuIgorbXNnc3RyICIiCisiTm9uIGMnw6ggbmllbnRlIGRhIGNvcnJlZ2dlcmUuXG4iCisiXG4iCisiU3RhaSBwZXIgY3JlYXJlIGxhIHJldmlzaW9uZSBpbml6aWFsZS4gTm9uIGVzaXN0ZSB1bmEgcmV2aXNpb25lIHByZWNlZGVudGUgIgorImRhIGNvcnJlZ2dlcmUuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4Cittc2dpZCAiIgorIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgorIlxuIgorIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCisiY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKKyJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorbXNnc3RyICIiCisiTm9uIMOoIHBvc3NpYmlsZSBlZmZldHR1YXJlIHVuYSBjb3JyZXppb25lIGR1cmFudGUgdW5hIGZ1c2lvbmUuXG4iCisiXG4iCisiSW4gcXVlc3RvIG1vbWVudG8gc2kgc3RhIGVmZmV0dHVhbmRvIHVuYSBmdXNpb25lIGNoZSBub24gw6ggc3RhdGEgZGVsIHR1dHRvICIKKyJjb21wbGV0YXRhLiBOb24gcHVvaSBjb3JyZWdnZXJlIGxhIHJldmlzaW9uZSBwcmVjZWRlbnRlIGEgbWVubyBjaGUgcHJpbWEgdHUgIgorIm5vbiBpbnRlcnJvbXBhIGwnb3BlcmF6aW9uZSBkaSBmdXNpb25lIGluIGNvcnNvLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDo0OAorbXNnaWQgIkVycm9yIGxvYWRpbmcgY29tbWl0IGRhdGEgZm9yIGFtZW5kOiIKK21zZ3N0ciAiRXJyb3JlIGR1cmFudGUgaWwgY2FyaWNhbWVudG8gZGVpIGRhdGkgZGVsbGEgcmV2aXNpb25lIGRhIGNvcnJlZ2dlcmU6IgorCisjOiBsaWIvY29tbWl0LnRjbDo3NQorbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCittc2dzdHIgIkltcG9zc2liaWxlIG90dGVuZXJlIGxhIHR1YSBpZGVudGl0w6A6IgorCisjOiBsaWIvY29tbWl0LnRjbDo4MAorbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCittc2dzdHIgIkdJVF9DT01NSVRURVJfSURFTlQgbm9uIHZhbGlkYToiCisKKyM6IGxpYi9jb21taXQudGNsOjEyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgorbXNnc3RyICJhdHRlbnppb25lOiBUY2wgbm9uIHN1cHBvcnRhIGxhIGNvZGlmaWNhICclcycuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNDkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiTCd1bHRpbW8gc3RhdG8gYW5hbGl6emF0byBub24gY29ycmlzcG9uZGUgYWxsbyBzdGF0byBkZWxsJ2FyY2hpdmlvLlxuIgorIlxuIgorIlVuIGFsdHJvIHByb2dyYW1tYSBHaXQgaGEgbW9kaWZpY2F0byBxdWVzdG8gYXJjaGl2aW8gZGFsbCd1bHRpbWEgYW5hbGlzaS4gIgorIkJpc29nbmEgZWZmZXR0dWFyZSB1bmEgbnVvdmEgYW5hbGlzaSBwcmltYSBkaSBwb3RlciBjcmVhcmUgdW5hIG51b3ZhICIKKyJyZXZpc2lvbmUuXG4iCisiXG4iCisiTGEgbnVvdmEgYW5hbGlzaSBjb21pbmNlcsOgIG9yYS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCisiYmVmb3JlIGNvbW1pdHRpbmcuXG4iCittc2dzdHIgIiIKKyJOb24gw6ggcG9zc2liaWxlIGNyZWFyZSB1bmEgcmV2aXNpb25lIGNvbiBmaWxlIG5vbiBzb3R0b3Bvc3RpIGEgZnVzaW9uZS5cbiIKKyJcbiIKKyJJbCBmaWxlICVzIHByZXNlbnRhIGRlaSBjb25mbGl0dGkuIERldmkgcmlzb2x2ZXJsaSBlIHByZXBhcmFyZSBpbCBmaWxlIHBlciAiCisiY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUgcHJpbWEgZGkgZWZmZXR0dWFyZSBxdWVzdGEgYXppb25lLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgorIlxuIgorIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCittc2dzdHIgIiIKKyJTdGF0byBkaSBmaWxlICVzIHNjb25vc2NpdXRvLlxuIgorIlxuIgorIlF1ZXN0byBwcm9ncmFtbWEgbm9uIHB1w7IgY3JlYXJlIHVuYSByZXZpc2lvbmUgY29udGVuZW50ZSBpbCBmaWxlICVzLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODgKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIk5lc3N1bmEgbW9kaWZpY2EgcGVyIGxhIG51b3ZhIHJldmlzaW9uZS5cbiIKKyJcbiIKKyJEZXZpIHByZXBhcmFyZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSBhbG1lbm8gMSBmaWxlIHByaW1hIGRpIGVmZmV0dHVhcmUgIgorInF1ZXN0YSBvcGVyYXppb25lLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMDMKK21zZ2lkICIiCisiUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCisiXG4iCisiLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgorIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCisiLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgorbXNnc3RyICIiCisiQmlzb2duYSBmb3JuaXJlIHVuIG1lc3NhZ2dpbyBkaSByZXZpc2lvbmUuXG4iCisiXG4iCisiVW4gYnVvbiBtZXNzYWdnaW8gZGkgcmV2aXNpb25lIGhhIGlsIHNlZ3VlbnRlIGZvcm1hdG86XG4iCisiXG4iCisiLSBQcmltYSBsaW5lYTogZGVzY3JpdmkgaW4gdW5hIGZyYXNlIGNpw7IgY2hlIGhhaSBmYXR0by5cbiIKKyItIFNlY29uZGEgbGluZWE6IHZ1b3RhLlxuIgorIi0gVGVyemEgbGluZWE6IHNwaWVnYSBhIGNvc2Egc2VydmUgbGEgdHVhIG1vZGlmaWNhLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMzQKK21zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKK21zZ3N0ciAiQXZ2aW8gcHJlLWNvbW1pdCBob29rLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNDkKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKK21zZ3N0ciAiUmV2aXNpb25lIHJpZml1dGF0YSBkYWwgcHJlLWNvbW1pdCBob29rLiIKKworIzogbGliL2NvbW1pdC50Y2w6MjcyCittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgIkF2dmlvIGNvbW1pdC1tc2cgaG9vay4uLiIKKworIzogbGliL2NvbW1pdC50Y2w6Mjg3Cittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgIlJldmlzaW9uZSByaWZpdXRhdGEgZGFsIGNvbW1pdC1tc2cgaG9vay4iCisKKyM6IGxpYi9jb21taXQudGNsOjMwMAorbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKK21zZ3N0ciAiQXJjaGl2aWF6aW9uZSBtb2RpZmljaGUuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjMxNgorbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAid3JpdGUtdHJlZSBub24gcml1c2NpdG86IgorCisjOiBsaWIvY29tbWl0LnRjbDozMTcgbGliL2NvbW1pdC50Y2w6MzYxIGxpYi9jb21taXQudGNsOjM4MgorbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjcmVhcmUgdW5hIG51b3ZhIHJldmlzaW9uZS4iCisKKyM6IGxpYi9jb21taXQudGNsOjMzNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCittc2dzdHIgIkxhIHJldmlzaW9uZSAlcyBzZW1icmEgZXNzZXJlIGRhbm5lZ2dpYXRhIgorCisjOiBsaWIvY29tbWl0LnRjbDozMzkKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJOZXNzdW5hIG1vZGlmaWNhIHBlciBsYSBudW92YSByZXZpc2lvbmUuXG4iCisiXG4iCisiUXVlc3RhIHJldmlzaW9uZSBub24gbW9kaWZpY2EgYWxjdW4gZmlsZSBlIG5vbiBlZmZldHR1YSBhbGN1bmEgZnVzaW9uZS5cbiIKKyJcbiIKKyJTaSBwcm9jZWRlcsOgIHN1Yml0byBhZCB1bmEgbnVvdmEgYW5hbGlzaS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzQ2Cittc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgorbXNnc3RyICJOZXNzdW5hIG1vZGlmaWNhIHBlciBsYSBudW92YSByZXZpc2lvbmUuIgorCisjOiBsaWIvY29tbWl0LnRjbDozNjAKK21zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICJjb21taXQtdHJlZSBub24gcml1c2NpdG86IgorCisjOiBsaWIvY29tbWl0LnRjbDozODEKK21zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCittc2dzdHIgInVwZGF0ZS1yZWYgbm9uIHJpdXNjaXRvOiIKKworIzogbGliL2NvbW1pdC50Y2w6NDY5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgorbXNnc3RyICJDcmVhdGEgcmV2aXNpb25lICVzOiAlcyIKKworIzogbGliL2NvbnNvbGUudGNsOjU5Cittc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAiRWxhYm9yYXppb25lIGluIGNvcnNvLi4uIGF0dGVuZGVyZS4uLiIKKworIzogbGliL2NvbnNvbGUudGNsOjE4NgorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIlN1Y2Nlc3NvIgorCisjOiBsaWIvY29uc29sZS50Y2w6MjAwCittc2dpZCAiRXJyb3I6IENvbW1hbmQgRmFpbGVkIgorbXNnc3RyICJFcnJvcmU6IGNvbWFuZG8gbm9uIHJpdXNjaXRvIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQzCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIk51bWVybyBkaSBvZ2dldHRpIHNsZWdhdGkiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAiU3BhemlvIHN1IGRpc2NvIHV0aWxpenphdG8gZGEgb2dnZXR0aSBzbGVnYXRpIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ1Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJOdW1lcm8gZGkgb2dnZXR0aSBpbXBhY2NoZXR0YXRpIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgorbXNnc3RyICJOdW1lcm8gZGkgcGFjY2hldHRpIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ3Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJTcGF6aW8gc3UgZGlzY28gdXRpbGl6emF0byBkYSBvZ2dldHRpIGltcGFjY2hldHRhdGkiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKK21zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgorbXNnc3RyICJPZ2dldHRpIGltcGFjY2hldHRhdGkgY2hlIGF0dGVuZG9ubyBsYSBwb3RhdHVyYSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OQorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgIkZpbGUgaW51dGlsaSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo3MgorbXNnaWQgIkNvbXByZXNzaW5nIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIkNvbXByZXNzaW9uZSBkZWxsJ2FyY2hpdmlvIGluIGNvcnNvIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjgzCittc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCittc2dzdHIgIlZlcmlmaWNhIGRlbGwnYXJjaGl2aW8gY29uIGZzY2stb2JqZWN0cyBpbiBjb3JzbyIKKworIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgorIlxuIgorIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgorInRoZSBkYXRhYmFzZS5cbiIKKyJcbiIKKyJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKK21zZ3N0ciAiIgorIlF1ZXN0byBhcmNoaXZpbyBhdHR1YWxtZW50ZSBoYSBjaXJjYSAlaSBvZ2dldHRpIHNsZWdhdGkuXG4iCisiXG4iCisiUGVyIG1hbnRlbmVyZSBidW9uZSBwcmVzdGF6aW9uaSBzaSByYWNjb21hbmRhIGRpIGNvbXByaW1lcmUgbCdhcmNoaXZpby5cbiIKKyJcbiIKKyJDb21wcmltZXJlIGwnYXJjaGl2aW8gb3JhPyIKKworIzogbGliL2RhdGUudGNsOjI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKK21zZ3N0ciAiR2l0IGhhIHJlc3RpdHVpdG8gdW5hIGRhdGEgbm9uIHZhbGlkYTogJXMiCisKKyM6IGxpYi9kaWZmLnRjbDo2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKKyJcbiIKKyJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCAiCisidGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlICIKKyJ0aGUgc2FtZSBzdGF0ZS4iCittc2dzdHIgIiIKKyJOb24gc29ubyBzdGF0ZSB0cm92YXRlIGRpZmZlcmVuemUuXG4iCisiXG4iCisiJXMgbm9uIGhhIG1vZGlmaWNoZS5cbiIKKyJcbiIKKyJMYSBkYXRhIGRpIG1vZGlmaWNhIGRpIHF1ZXN0byBmaWxlIMOoIHN0YXRhIGNhbWJpYXRhIGRhIHVuJ2FsdHJhICIKKyJhcHBsaWNhemlvbmUsIG1hIGlsIGNvbnRlbnV0byBkZWwgZmlsZSDDqCByaW1hc3RvIGludmFyaWF0by5cbiIKKyJcbiIKKyJTaSBwcm9jZWRlcsOgIGF1dG9tYXRpY2FtZW50ZSBhZCB1bmEgbnVvdmEgYW5hbGlzaSBwZXIgdHJvdmFyZSBhbHRyaSBmaWxlIGNoZSAiCisicG90cmViYmVybyBhdmVyZSBsbyBzdGVzc28gc3RhdG8uIgorCisjOiBsaWIvZGlmZi50Y2w6MTA0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgorbXNnc3RyICJDYXJpY2FtZW50byBkZWxsZSBkaWZmZXJlbnplIGRpICVzLi4uIgorCisjOiBsaWIvZGlmZi50Y2w6MTI1Cittc2dpZCAiIgorIkxPQ0FMOiBkZWxldGVkXG4iCisiUkVNT1RFOlxuIgorbXNnc3RyICIiCisiTE9DQUxFOiBjYW5jZWxsYXRvXG4iCisiUkVNT1RPOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTMwCittc2dpZCAiIgorIlJFTU9URTogZGVsZXRlZFxuIgorIkxPQ0FMOlxuIgorbXNnc3RyICIiCisiUkVNT1RPOiBjYW5jZWxsYXRvXG4iCisiTE9DQUxFOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTM3Cittc2dpZCAiTE9DQUw6XG4iCittc2dzdHIgIkxPQ0FMRTpcbiIKKworIzogbGliL2RpZmYudGNsOjE0MAorbXNnaWQgIlJFTU9URTpcbiIKK21zZ3N0ciAiUkVNT1RPOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjAyIGxpYi9kaWZmLnRjbDozMTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGlzcGxheSAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdmlzdWFsaXp6YXJlICVzIgorCisjOiBsaWIvZGlmZi50Y2w6MjAzCittc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKK21zZ3N0ciAiRXJyb3JlIG5lbCBjYXJpY2FtZW50byBkZWwgZmlsZToiCisKKyM6IGxpYi9kaWZmLnRjbDoyMTAKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCittc2dzdHIgIkFyY2hpdmlvIEdpdCAoc290dG9wcm9nZXR0bykiCisKKyM6IGxpYi9kaWZmLnRjbDoyMjIKK21zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCittc2dzdHIgIiogRmlsZSBiaW5hcmlvIChpbCBjb250ZW51dG8gbm9uIHNhcsOgIG1vc3RyYXRvKS4iCisKKyM6IGxpYi9kaWZmLnRjbDoyMjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiKiBVbnRyYWNrZWQgZmlsZSBpcyAlZCBieXRlcy5cbiIKKyIqIFNob3dpbmcgb25seSBmaXJzdCAlZCBieXRlcy5cbiIKK21zZ3N0ciAiIgorIiogSWwgZmlsZSBub24gdHJhY2NpYXRvIMOoIGRpICVkIGJ5dGUuXG4iCisiKiBTYXJhbm5vIHZpc3VhbGl6emF0aSBzb2xvIGkgcHJpbWkgJWQgYnl0ZS5cbiIKKworIzogbGliL2RpZmYudGNsOjIzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIqIFVudHJhY2tlZCBmaWxlIGNsaXBwZWQgaGVyZSBieSAlcy5cbiIKKyIqIFRvIHNlZSB0aGUgZW50aXJlIGZpbGUsIHVzZSBhbiBleHRlcm5hbCBlZGl0b3IuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqICVzIG5vbiB2aXN1YWxpenphIGNvbXBsZXRhbWVudGUgcXVlc3RvIGZpbGUgbm9uIHRyYWNjaWF0by5cbiIKKyIqIFBlciB2aXN1YWxpenphcmUgaWwgZmlsZSBjb21wbGV0bywgdXNhcmUgdW4gcHJvZ3JhbW1hIGVzdGVybm8uXG4iCisKKyM6IGxpYi9kaWZmLnRjbDo0ODIKK21zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmltdW92ZXJlIGxhIHNlemlvbmUgc2NlbHRhIGRhbGxhIG51b3ZhIHJldmlzaW9uZS4iCisKKyM6IGxpYi9kaWZmLnRjbDo0ODkKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkltcG9zc2liaWxlIHByZXBhcmFyZSBsYSBzZXppb25lIHNjZWx0YSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZS4iCisKKyM6IGxpYi9kaWZmLnRjbDo1NjgKK21zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmltdW92ZXJlIGxhIHJpZ2Egc2NlbHRhIGRhbGxhIG51b3ZhIHJldmlzaW9uZS4iCisKKyM6IGxpYi9kaWZmLnRjbDo1NzYKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgIkltcG9zc2liaWxlIHByZXBhcmFyZSBsYSByaWdhIHNjZWx0YSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZS4iCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDQzCittc2dpZCAiRGVmYXVsdCIKK21zZ3N0ciAiUHJlZGVmaW5pdG8iCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU3lzdGVtICglcykiCittc2dzdHIgIkNvZGlmaWNhIGRpIHNpc3RlbWEgKCVzKSIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NTkgbGliL2VuY29kaW5nLnRjbDo0NjUKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAiQWx0cm8iCisKKyM6IGxpYi9lcnJvci50Y2w6MjAgbGliL2Vycm9yLnRjbDoxMTQKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiZXJyb3JlIgorCisjOiBsaWIvZXJyb3IudGNsOjM2Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAiYXR0ZW56aW9uZSIKKworIzogbGliL2Vycm9yLnRjbDo5NAorbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCittc2dzdHIgIiIKKyJCaXNvZ25hIGNvcnJlZ2dlcmUgZ2xpIGVycm9yaSBzdWRkZXR0aSBwcmltYSBkaSBjcmVhcmUgdW5hIG51b3ZhIHJldmlzaW9uZS4iCisKKyM6IGxpYi9pbmRleC50Y2w6NgorbXNnaWQgIlVuYWJsZSB0byB1bmxvY2sgdGhlIGluZGV4LiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2Jsb2NjYXJlIGwnYWNjZXNzbyBhbGwnaW5kaWNlIgorCisjOiBsaWIvaW5kZXgudGNsOjE1Cittc2dpZCAiSW5kZXggRXJyb3IiCittc2dzdHIgIkVycm9yZSBuZWxsJ2luZGljZSIKKworIzogbGliL2luZGV4LnRjbDoxNworbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgR2l0IGluZGV4IGZhaWxlZC4gIEEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvICIKKyJyZXN5bmNocm9uaXplIGdpdC1ndWkuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgYWdnaW9ybmFyZSBsJ2luZGljZS4gT3JhIHNhcsOgIGF2dmlhdGEgdW5hIG51b3ZhIGFuYWxpc2kgY2hlICIKKyJhZ2dpb3JuZXLDoCBnaXQtZ3VpLiIKKworIzogbGliL2luZGV4LnRjbDoyOAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICJDb250aW51YSIKKworIzogbGliL2luZGV4LnRjbDozMQorbXNnaWQgIlVubG9jayBJbmRleCIKK21zZ3N0ciAiU2Jsb2NjYSBsJ2FjY2Vzc28gYWxsJ2luZGljZSIKKworIzogbGliL2luZGV4LnRjbDoyODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCittc2dzdHIgIiVzIG5vbiBmYXLDoCBwYXJ0ZSBkZWxsYSBwcm9zc2ltYSByZXZpc2lvbmUiCisKKyM6IGxpYi9pbmRleC50Y2w6MzI4Cittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAiUHJvbnRvIHBlciBjcmVhcmUgdW5hIG51b3ZhIHJldmlzaW9uZS4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICJBZ2dpdW50YSBkaSAlcyBpbiBjb3JzbyIKKworIzogbGliL2luZGV4LnRjbDozOTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKK21zZ3N0ciAiQW5udWxsYXJlIGxlIG1vZGlmaWNoZSBuZWwgZmlsZSAlcz8iCisKKyM6IGxpYi9pbmRleC50Y2w6NDAwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgorbXNnc3RyICJBbm51bGxhcmUgbGUgbW9kaWZpY2hlIGluIHF1ZXN0aSAlaSBmaWxlPyIKKworIzogbGliL2luZGV4LnRjbDo0MDgKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIiIKKyJUdXR0ZSBsZSBtb2RpZmljaGUgbm9uIHByZXBhcmF0ZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSBzYXJhbm5vIHBlcnNlIHBlciAiCisic2VtcHJlLiIKKworIzogbGliL2luZGV4LnRjbDo0MTEKK21zZ2lkICJEbyBOb3RoaW5nIgorbXNnc3RyICJOb24gZmFyZSBuaWVudGUiCisKKyM6IGxpYi9pbmRleC50Y2w6NDI5Cittc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgorbXNnc3RyICJBbm51bGxvIGxlIG1vZGlmaWNoZSBuZWkgZmlsZSBzZWxlemlvbmF0aSIKKworIzogbGliL2luZGV4LnRjbDo0MzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgJXMiCittc2dzdHIgIkFubnVsbG8gbGUgbW9kaWZpY2hlIGluICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzCittc2dpZCAiIgorIkNhbm5vdCBtZXJnZSB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGFueSB0eXBlIG9mIG1lcmdlLlxuIgorbXNnc3RyICIiCisiTm9uIHBvc3NvIGVmZmV0dHVhcmUgZnVzaW9uaSBkdXJhbnRlIHVuYSBjb3JyZXppb25lLlxuIgorIlxuIgorIkJpc29nbmEgZmluaXJlIGRpIGNvcnJlZ2dlcmUgcXVlc3RhIHJldmlzaW9uZSBwcmltYSBkaSBpbml6aWFyZSB1bmEgIgorInF1YWx1bnF1ZSBmdXNpb25lLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJMJ3VsdGltbyBzdGF0byBhbmFsaXp6YXRvIG5vbiBjb3JyaXNwb25kZSBhbGxvIHN0YXRvIGRlbGwnYXJjaGl2aW8uXG4iCisiXG4iCisiVW4gYWx0cm8gcHJvZ3JhbW1hIEdpdCBoYSBtb2RpZmljYXRvIHF1ZXN0byBhcmNoaXZpbyBkYWxsJ3VsdGltYSBhbmFsaXNpLiIKKyJCaXNvZ25hIGVmZmV0dHVhcmUgdW5hIG51b3ZhIGFuYWxpc2kgcHJpbWEgZGkgcG90ZXIgZWZmZXR0dWFyZSB1bmEgZnVzaW9uZS5cbiIKKyJcbiIKKyJMYSBudW92YSBhbmFsaXNpIGNvbWluY2Vyw6Agb3JhLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgorIlxuIgorIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgorIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIlNlaSBuZWwgbWV6em8gZGkgdW5hIGZ1c2lvbmUgY29uIGNvbmZsaXR0aS5cbiIKKyJcbiIKKyJJbCBmaWxlICVzIGhhIGRlaSBjb25mbGl0dGkuXG4iCisiXG4iCisiQmlzb2duYSByaXNvbHZlcmUgaSBjb25mbGl0dGksIHByZXBhcmFyZSBpbCBmaWxlIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIGVkICIKKyJpbmZpbmUgY3JlYXJsYSBwZXIgY29tcGxldGFyZSBsYSBmdXNpb25lIGF0dHVhbGUuIFNvbG8gYSBxdWVzdG8gcHVudG8gcG90cmFpICIKKyJpbml6aWFyZSB1bidhbHRyYSBmdXNpb25lLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKKyJcbiIKKyJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgorIlxuIgorIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgorIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKK21zZ3N0ciAiIgorIlNlaSBuZWwgbWV6em8gZGkgdW5hIG1vZGlmaWNhLlxuIgorIlxuIgorIklsIGZpbGUgJXMgw6ggc3RhdG8gbW9kaWZpY2F0by5cbiIKKyJcbiIKKyJCaXNvZ25hIGNvbXBsZXRhcmUgbGEgY3JlYXppb25lIGRlbGxhIHJldmlzaW9uZSBhdHR1YWxlIHByaW1hIGRpIGluaXppYXJlICIKKyJ1bmEgZnVzaW9uZS4gSW4gcXVlc3RvIG1vZG8gc2Fyw6AgcGnDuSBmYWNpbGUgaW50ZXJyb21wZXJlIHVuYSBmdXNpb25lIG5vbiAiCisicml1c2NpdGEsIG5lbCBjYXNvIGNlIG5lIGZvc3NlIGJpc29nbm8uXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiVzIGRpICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjEyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgYW5kICVzLi4uIgorbXNnc3RyICJGdXNpb25lIGRpICVzIGUgJXMgaW4gY29yc28uLi4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMxCittc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCittc2dzdHIgIkZ1c2lvbmUgY29tcGxldGF0YSBjb24gc3VjY2Vzc28uIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMworbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgorbXNnc3RyICJGdXNpb25lIG5vbiByaXVzY2l0YS4gQmlzb2duYSByaXNvbHZlcmUgaSBjb25mbGl0dGkuIgorCisjOiBsaWIvbWVyZ2UudGNsOjE1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdlIEludG8gJXMiCittc2dzdHIgIkZ1c2lvbmUgaW4gJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTc3Cittc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCittc2dzdHIgIlJldmlzaW9uZSBkYSBmb25kZXJlIgorCisjOiBsaWIvbWVyZ2UudGNsOjIxMgorbXNnaWQgIiIKKyJDYW5ub3QgYWJvcnQgd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0LlxuIgorbXNnc3RyICIiCisiSW50ZXJydXppb25lIGltcG9zc2liaWxlIGR1cmFudGUgdW5hIGNvcnJlemlvbmUuXG4iCisiXG4iCisiQmlzb2duYSBmaW5pcmUgZGkgY29ycmVnZ2VyZSBxdWVzdGEgcmV2aXNpb25lLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjIyMgorbXNnaWQgIiIKKyJBYm9ydCBtZXJnZT9cbiIKKyJcbiIKKyJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKK21zZ3N0ciAiIgorIkludGVycm9tcGVyZSBmdXNpb25lP1xuIgorIlxuIgorIkwnaW50ZXJydXppb25lIGRlbGxhIGZ1c2lvbmUgYXR0dWFsZSBjYXVzZXLDoCBsYSBwZXJkaXRhIGRpICpUVVRURSogbGUgIgorIm1vZGlmaWNoZSBub24gYW5jb3JhIHByZXNlbnRpIG5lbGwnYXJjaGl2aW8uXG4iCisiXG4iCisiQ29udGludWFyZSBjb24gbCdpbnRlcnJ1emlvbmUgZGVsbGEgZnVzaW9uZSBhdHR1YWxlPyIKKworIzogbGliL21lcmdlLnRjbDoyMjgKK21zZ2lkICIiCisiUmVzZXQgY2hhbmdlcz9cbiIKKyJcbiIKKyJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCittc2dzdHIgIiIKKyJSaXByaXN0aW5hcmUgbGEgcmV2aXNpb25lIGF0dHVhbGUgZSBhbm51bGxhcmUgbGUgbW9kaWZpY2hlP1xuIgorIlxuIgorIkwnYW5udWxsYW1lbnRvIGRlbGxlIG1vZGlmaWNoZSBjYXVzZXLDoCBsYSBwZXJkaXRhIGRpICpUVVRURSogbGUgbW9kaWZpY2hlICIKKyJub24gYW5jb3JhIHByZXNlbnRpIG5lbGwnYXJjaGl2aW8uXG4iCisiXG4iCisiQ29udGludWFyZSBjb24gbCdhbm51bGxhbWVudG8gZGVsbGUgbW9kaWZpY2hlIGF0dHVhbGk/IgorCisjOiBsaWIvbWVyZ2UudGNsOjIzOQorbXNnaWQgIkFib3J0aW5nIgorbXNnc3RyICJJbnRlcnJ1emlvbmUiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiZmlsZXMgcmVzZXQiCittc2dzdHIgInJpcHJpc3Rpbm8gZmlsZSIKKworIzogbGliL21lcmdlLnRjbDoyNjcKK21zZ2lkICJBYm9ydCBmYWlsZWQuIgorbXNnc3RyICJJbnRlcnJ1emlvbmUgbm9uIHJpdXNjaXRhLiIKKworIzogbGliL21lcmdlLnRjbDoyNjkKK21zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCittc2dzdHIgIkludGVycnV6aW9uZSBjb21wbGV0YXRhLiBQcm9udG8uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo4Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKK21zZ3N0ciAiSW1wb3JyZSBsYSByaXNvbHV6aW9uZSBhbGxhIHJldmlzaW9uZSBjb211bmU/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo5Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCittc2dzdHIgIkltcG9ycmUgbGEgcmlzb2x1emlvbmUgYWwgcmFtbyBhdHR1YWxlPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTAKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBvdGhlciBicmFuY2g/IgorbXNnc3RyICJJbXBvcnJlIGxhIHJpc29sdXppb25lIGFsbCdhbHRybyByYW1vPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKKyJcbiIKKyIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgorIlxuIgorIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCittc2dzdHIgIiIKKyJTaSBzdGFubm8gbW9zdHJhbmRvIHNvbG8gbGUgbW9kaWZpY2hlIGNvbiBjb25mbGl0dGkuXG4iCisiXG4iCisiJXMgc2Fyw6Agc292cmFzY3JpdHRvLlxuIgorIlxuIgorIlF1ZXN0YSBvcGVyYXppb25lIHB1w7IgZXNzZXJlIG1vZGlmaWNhdGEgc29sbyByaWNvbWluY2lhbmRvIGxhIGZ1c2lvbmUuIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgorbXNnc3RyICIiCisiSWwgZmlsZSAlcyBzZW1icmEgY29udGVuZXJlIGNvbmZsaXR0aSBub24gcmlzb2x0aSwgcHJlcGFyYXJlIHBlciBsYSBwcm9zc2ltYSAiCisicmV2aXNpb25lPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6NjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgcmVzb2x1dGlvbiBmb3IgJXMiCittc2dzdHIgIiIKKyJMYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIHBlciAlcyDDqCBwcmVwYXJhdGEgcGVyIGxhIHByb3NzaW1hIHJldmlzaW9uZSIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQxCittc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgorbXNnc3RyICIiCisiTm9uIMOoIHBvc3NpYmlsZSByaXNvbHZlcmUgaSBjb25mbGl0dGkgcGVyIGNhbmNlbGxhemlvbmkgbyBsaW5rIGNvbiB1biAiCisicHJvZ3JhbW1hIGVzdGVybm8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0NgorbXNnaWQgIkNvbmZsaWN0IGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIk5vbiBlc2lzdGUgdW4gZmlsZSBjb24gY29uZmxpdHRpLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90IGEgR1VJIG1lcmdlIHRvb2w6ICclcyciCittc2dzdHIgIiclcycgbm9uIMOoIHVuYSBHVUkgcGVyIGxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkuIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN1cHBvcnRlZCBtZXJnZSB0b29sICclcyciCittc2dzdHIgIklsIHByb2dyYW1tYSAnJXMnIG5vbiDDqCBzdXBwb3J0YXRvIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMDMKK21zZ2lkICJNZXJnZSB0b29sIGlzIGFscmVhZHkgcnVubmluZywgdGVybWluYXRlIGl0PyIKK21zZ3N0ciAiTGEgcmlzb2x1emlvbmUgZGVpIGNvbmZsaXR0aSDDqCBnacOgIGF2dmlhdGEsIHRlcm1pbmFybGE/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkVycm9yZTogcmV2aXNpb25lIG5vbiB0cm92YXRhOlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHRoZSBtZXJnZSB0b29sOlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgYXZ2aWFyZSBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNDcKK21zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCittc2dzdHIgIkF2dmlvIGRlbCBwcm9ncmFtbWEgcGVyIGxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkgaW4gY29yc28uLi4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM3NSBsaWIvbWVyZ2V0b29sLnRjbDozODMKK21zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCittc2dzdHIgIlJpc29sdXppb25lIGRlaSBjb25mbGl0dGkgbm9uIHJpdXNjaXRhLiIKKworIzogbGliL29wdGlvbi50Y2w6MTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGdsb2JhbCBlbmNvZGluZyAnJXMnIgorbXNnc3RyICIiCisiTGEgY29kaWZpY2EgZGVpIGNhcmF0dGVyaSAnJXMnIHNwZWNpZmljYXRhIHBlciB0dXR0aSBnbGkgYXJjaGl2aSBub24gw6ggdmFsaWRhIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmVwbyBlbmNvZGluZyAnJXMnIgorbXNnc3RyICIiCisiTGEgY29kaWZpY2EgZGVpIGNhcmF0dGVyaSAnJXMnIHNwZWNpZmljYXRhIHBlciBsJ2FyY2hpdmlvIGF0dHVhbGUgIG5vbiDDqCAiCisidmFsaWRhIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMTcKK21zZ2lkICJSZXN0b3JlIERlZmF1bHRzIgorbXNnc3RyICJSaXByaXN0aW5hIHZhbG9yaSBwcmVkZWZpbml0aSIKKworIzogbGliL29wdGlvbi50Y2w6MTIxCittc2dpZCAiU2F2ZSIKK21zZ3N0ciAiU2FsdmEiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIFJlcG9zaXRvcnkiCittc2dzdHIgIkFyY2hpdmlvIGRpICVzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzIKK21zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgorbXNnc3RyICJUdXR0aSBnbGkgYXJjaGl2aSIKKworIzogbGliL29wdGlvbi50Y2w6MTM4Cittc2dpZCAiVXNlciBOYW1lIgorbXNnc3RyICJOb21lIHV0ZW50ZSIKKworIzogbGliL29wdGlvbi50Y2w6MTM5Cittc2dpZCAiRW1haWwgQWRkcmVzcyIKK21zZ3N0ciAiSW5kaXJpenpvIEVtYWlsIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDEKK21zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKK21zZ3N0ciAiUmllcGlsb2dvIG5lbGxlIHJldmlzaW9uaSBkaSBmdXNpb25lIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDIKK21zZ2lkICJNZXJnZSBWZXJib3NpdHkiCittc2dzdHIgIlByb2xpc3NpdMOgIGRlbGxhIGZ1c2lvbmUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MworbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCittc2dzdHIgIk1vc3RyYSBzdGF0aXN0aWNoZSBkZWxsZSBkaWZmZXJlbnplIGRvcG8gbGEgZnVzaW9uZSIKKworIzogbGliL29wdGlvbi50Y2w6MTQ0Cittc2dpZCAiVXNlIE1lcmdlIFRvb2wiCittc2dzdHIgIlByb2dyYW1tYSBkYSB1dGlsaXp6YXJlIHBlciBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDYKK21zZ2lkICJUcnVzdCBGaWxlIE1vZGlmaWNhdGlvbiBUaW1lc3RhbXBzIgorbXNnc3RyICJGaWRhdGkgZGVsbGUgZGF0ZSBkaSBtb2RpZmljYSBkZWkgZmlsZSIKKworIzogbGliL29wdGlvbi50Y2w6MTQ3Cittc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgorbXNnc3RyICIiCisiRWZmZXR0dWEgcG90YXR1cmEgZGVpIGR1cGxpY2F0aSBsb2NhbGkgZGkgcmFtaSByZW1vdGkgZHVyYW50ZSBpbCByZWN1cGVybyIKKworIzogbGliL29wdGlvbi50Y2w6MTQ4Cittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoZXMiCittc2dzdHIgIkFwcGFpYSBkdXBsaWNhdGkgbG9jYWxpIGRpIHJhbWkgcmVtb3RpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDkKK21zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKK21zZ3N0ciAiUmljZXJjYSBjb3BpZSBzb2xvIG5laSBmaWxlIG1vZGlmaWNhdGkiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MAorbXNnaWQgIk1pbmltdW0gTGV0dGVycyBUbyBCbGFtZSBDb3B5IE9uIgorbXNnc3RyICJOdW1lcm8gbWluaW1vIGRpIGxldHRlcmUgY2hlIGF0dGl2YW5vIGxhIHJpY2VyY2EgZGVsbGUgY29waWUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MQorbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgorbXNnc3RyICJHaW9ybmkgZGkgY29udGVzdG8gbmVsbGEgY3Jvbm9sb2dpYSBkZWxsZSBhbm5vdGF6aW9uaSIKKworIzogbGliL29wdGlvbi50Y2w6MTUyCittc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKK21zZ3N0ciAiTnVtZXJvIGRpIGxpbmVlIGRpIGNvbnRlc3RvIG5lbGxlIGRpZmZlcmVuemUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MworbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCittc2dzdHIgIkxhcmdoZXp6YSBkZWwgbWVzc2FnZ2lvIGRpIHJldmlzaW9uZSIKKworIzogbGliL29wdGlvbi50Y2w6MTU0Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICJNb2RlbGxvIHBlciBpbCBub21lIGRpIHVuIG51b3ZvIHJhbW8iCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NQorbXNnaWQgIkRlZmF1bHQgRmlsZSBDb250ZW50cyBFbmNvZGluZyIKK21zZ3N0ciAiQ29kaWZpY2EgcHJlZGVmaW5pdGEgcGVyIGlsIGNvbnRlbnV0byBkZWkgZmlsZSIKKworIzogbGliL29wdGlvbi50Y2w6MjAzCittc2dpZCAiQ2hhbmdlIgorbXNnc3RyICJDYW1iaWEiCisKKyM6IGxpYi9vcHRpb24udGNsOjIzMAorbXNnaWQgIlNwZWxsaW5nIERpY3Rpb25hcnk6IgorbXNnc3RyICJMaW5ndWEgZGl6aW9uYXJpbzoiCisKKyM6IGxpYi9vcHRpb24udGNsOjI1NAorbXNnaWQgIkNoYW5nZSBGb250IgorbXNnc3RyICJDYW1iaWEgY2FyYXR0ZXJpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaG9vc2UgJXMiCittc2dzdHIgIlNjZWdsaSAlcyIKKworIzogbGliL29wdGlvbi50Y2w6MjY0Cittc2dpZCAicHQuIgorbXNnc3RyICJwdC4iCisKKyM6IGxpYi9vcHRpb24udGNsOjI3OAorbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICJQcmVmZXJlbnplIgorCisjOiBsaWIvb3B0aW9uLnRjbDozMTQKK21zZ2lkICJGYWlsZWQgdG8gY29tcGxldGVseSBzYXZlIG9wdGlvbnM6IgorbXNnc3RyICJJbXBvc3NpYmlsZSBzYWx2YXJlIGNvbXBsZXRhbWVudGUgbGUgb3B6aW9uaToiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE2MworbXNnaWQgIlJlbW92ZSBSZW1vdGUiCittc2dzdHIgIlJpbXVvdmkgYXJjaGl2aW8gcmVtb3RvIgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNjgKK21zZ2lkICJQcnVuZSBmcm9tIgorbXNnc3RyICJFZmZldHR1YSBwb3RhdHVyYSBkYSIKKworIzogbGliL3JlbW90ZS50Y2w6MTczCittc2dpZCAiRmV0Y2ggZnJvbSIKK21zZ3N0ciAiUmVjdXBlcmEgZGEiCisKKyM6IGxpYi9yZW1vdGUudGNsOjIxNQorbXNnaWQgIlB1c2ggdG8iCittc2dzdHIgIlByb3BhZ2EgdmVyc28iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxOQorbXNnaWQgIkFkZCBSZW1vdGUiCittc2dzdHIgIkFnZ2l1bmdpIGFyY2hpdmlvIHJlbW90byIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjI0Cittc2dpZCAiQWRkIE5ldyBSZW1vdGUiCittc2dzdHIgIkFnZ2l1bmdpIG51b3ZvIGFyY2hpdmlvIHJlbW90byIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjI4IGxpYi90b29sc19kbGcudGNsOjM2Cittc2dpZCAiQWRkIgorbXNnc3RyICJBZ2dpdW5naSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjM3Cittc2dpZCAiUmVtb3RlIERldGFpbHMiCittc2dzdHIgIkRldHRhZ2xpIHN1bGwnYXJjaGl2aW8gcmVtb3RvIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKK21zZ2lkICJMb2NhdGlvbjoiCittc2dzdHIgIlBvc2l6aW9uZToiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MgorbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgorbXNnc3RyICJBbHRyYSBhemlvbmUiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2NQorbXNnaWQgIkZldGNoIEltbWVkaWF0ZWx5IgorbXNnc3RyICJSZWN1cGVyYSBzdWJpdG8iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3MQorbXNnaWQgIkluaXRpYWxpemUgUmVtb3RlIFJlcG9zaXRvcnkgYW5kIFB1c2giCittc2dzdHIgIkluaXppYWxpenphIGwnYXJjaGl2aW8gcmVtb3RvIGUgcHJvcGFnYSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjc3Cittc2dpZCAiRG8gTm90aGluZyBFbHNlIE5vdyIKK21zZ3N0ciAiTm9uIGZhcmUgYWx0cm8iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMDEKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgcmVtb3RlIG5hbWUuIgorbXNnc3RyICJJbnNlcmlyZSB1biBub21lIHBlciBsJ2FyY2hpdmlvIHJlbW90by4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAiJyVzJyBub24gw6ggdXRpbGl6emFiaWxlIGNvbWUgbm9tZSBkaSBhcmNoaXZpbyByZW1vdG8uIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYWdnaXVuZ2VyZSBsJ2FyY2hpdmlvIHJlbW90byAnJXMnIHBvc3RvIGluICclcycuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMzIGxpYi90cmFuc3BvcnQudGNsOjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmZXRjaCAlcyIKK21zZ3N0ciAicmVjdXBlcmEgZGEgJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyB0aGUgJXMiCittc2dzdHIgIlJlY3VwZXJvICVzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgaW5pemlhbGl6emFyZSBsJ2FyY2hpdmlvIHBvc3RvIGluICclcycuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzIGxpYi90cmFuc3BvcnQudGNsOjI1IGxpYi90cmFuc3BvcnQudGNsOjYzCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgInB1c2ggJXMiCittc2dzdHIgInByb3BhZ2EgdmVyc28gJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHVwIHRoZSAlcyAoYXQgJXMpIgorbXNnc3RyICJJbXBvc3RvICVzIChpbiAlcykiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozNAorbXNnaWQgIkRlbGV0ZSBCcmFuY2ggUmVtb3RlbHkiCittc2dzdHIgIkVsaW1pbmEgcmFtbyByZW1vdG8iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDcKK21zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCittc2dzdHIgIkRhIGFyY2hpdmlvIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjUwIGxpYi90cmFuc3BvcnQudGNsOjEzNAorbXNnaWQgIlJlbW90ZToiCittc2dzdHIgIlJlbW90bzoiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NjYgbGliL3RyYW5zcG9ydC50Y2w6MTQ5Cittc2dpZCAiQXJiaXRyYXJ5IExvY2F0aW9uOiIKK21zZ3N0ciAiUG9zaXppb25lIHNwZWNpZmljYToiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6ODQKK21zZ2lkICJCcmFuY2hlcyIKK21zZ3N0ciAiUmFtaSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDkKK21zZ2lkICJEZWxldGUgT25seSBJZiIKK21zZ3N0ciAiRWxpbWluYSBzb2xvIHNlIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMQorbXNnaWQgIk1lcmdlZCBJbnRvOiIKK21zZ3N0ciAiRnVzbyBpbjoiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTUyCittc2dpZCAiQSBicmFuY2ggaXMgcmVxdWlyZWQgZm9yICdNZXJnZWQgSW50bycuIgorbXNnc3RyICJTaSByaWNoaWVkZSB1biByYW1vIHBlciAnRnVzbyBpbicuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKKyJcbiIKKyIgLSAlcyIKK21zZ3N0ciAiIgorIkkgcmFtaSBzZWd1ZW50aSBub24gc29ubyBzdGF0aSBmdXNpIGNvbXBsZXRhbWVudGUgaW4gJXM6XG4iCisiXG4iCisiIC0gJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgdmVyaWZpY2FyZSB1bmEgbyBwacO5IGZ1c2lvbmk6IG1hbmNhbm8gbGUgcmV2aXNpb25pIG5lY2Vzc2FyaWUuICIKKyJQcm92YSBwcmltYSBhIHJlY3VwZXJhcmxlIGRhICVzLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDcKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCittc2dzdHIgIlNjZWdsaWVyZSB1bm8gbyBwacO5IHJhbWkgZGEgY2FuY2VsbGFyZS4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKK21zZ3N0ciAiQ2FuY2VsbGF6aW9uZSByYW1pIGRhICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MgorbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgorbXNnc3RyICJOZXNzdW4gYXJjaGl2aW8gc2VsZXppb25hdG8uIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nICVzLi4uIgorbXNnc3RyICJBbmFsaXNpIGluIGNvcnNvICVzLi4uIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyMQorbXNnaWQgIkZpbmQ6IgorbXNnc3RyICJUcm92YToiCisKKyM6IGxpYi9zZWFyY2gudGNsOjIzCittc2dpZCAiTmV4dCIKK21zZ3N0ciAiU3VjYyIKKworIzogbGliL3NlYXJjaC50Y2w6MjQKK21zZ2lkICJQcmV2IgorbXNnc3RyICJQcmVjIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyNQorbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgorbXNnc3RyICJEaXN0aW5ndWkgbWFpdXNjb2xlIgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjIxIGxpYi9zaG9ydGN1dC50Y2w6NjIKK21zZ2lkICJDYW5ub3Qgd3JpdGUgc2hvcnRjdXQ6IgorbXNnc3RyICJJbXBvc3NpYmlsZSBzY3JpdmVyZSBzaG9ydGN1dDoiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MTM3Cittc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgorbXNnc3RyICJJbXBvc3NpYmlsZSBzY3JpdmVyZSBpY29uYToiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo1NworbXNnaWQgIlVuc3VwcG9ydGVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIkNvcnJldHRvcmUgb3J0b2dyYWZpY28gbm9uIHN1cHBvcnRhdG8iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJDb3JyZXppb25lIG9ydG9ncmFmaWNhIGluZGlzcG9uaWJpbGUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAorbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiTGEgY29uZmlndXJhemlvbmUgZGVsIGNvcnJldHRvcmUgb3J0b2dyYWZpY28gbm9uIMOoIHZhbGlkYSIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgorbXNnc3RyICJJbCBkaXppb25hcmlvIMOoIHN0YXRvIHJlaW1wb3N0YXRvIHN1ICVzLiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjczCittc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKK21zZ3N0ciAiSWwgY29ycmV0dG9yZSBvcnRvZ3JhZmljbyBoYSByaXBvcnRhdG8gdW4gZXJyb3JlIGFsbCdhdnZpbyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCittc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIkNvcnJldHRvcmUgb3J0b2dyYWZpY28gbm9uIHJpY29ub3NjaXV0byIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgorbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgorbXNnc3RyICJOZXNzdW4gc3VnZ2VyaW1lbnRvIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg4Cittc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJJbCBjb3JyZXR0b3JlIG9ydG9ncmFmaWNvIGhhIG1hbmRhdG8gdW4gRU9GIGluYXNwZXR0YXRvIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MzkyCittc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCittc2dzdHIgIkVycm9yZSBuZWwgY29ycmV0dG9yZSBvcnRvZ3JhZmljbyIKKworIzogbGliL3NzaGtleS50Y2w6MzEKK21zZ2lkICJObyBrZXlzIGZvdW5kLiIKK21zZ3N0ciAiQ2hpYXZpIG5vbiB0cm92YXRlLiIKKworIzogbGliL3NzaGtleS50Y2w6MzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgorbXNnc3RyICJDaGlhdmUgcHViYmxpY2EgdHJvdmF0YSBpbjogJXMiCisKKyM6IGxpYi9zc2hrZXkudGNsOjQwCittc2dpZCAiR2VuZXJhdGUgS2V5IgorbXNnc3RyICJDcmVhIGNoaWF2ZSIKKworIzogbGliL3NzaGtleS50Y2w6NTYKK21zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKK21zZ3N0ciAiQ29waWEgbmVnbGkgYXBwdW50aSIKKworIzogbGliL3NzaGtleS50Y2w6NzAKK21zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKK21zZ3N0ciAiTGEgdHVhIGNoaWF2ZSBwdWJibGljYSBPcGVuU1NIIgorCisjOiBsaWIvc3Noa2V5LnRjbDo3OAorbXNnaWQgIkdlbmVyYXRpbmcuLi4iCittc2dzdHIgIkNyZWF6aW9uZSBjaGlhdmUgaW4gY29yc28uLi4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgYXZ2aWFyZSBzc2gta2V5Z2VuOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMTEKK21zZ2lkICJHZW5lcmF0aW9uIGZhaWxlZC4iCittc2dzdHIgIkVycm9yZSBkdXJhbnRlIGxhIGNyZWF6aW9uZSBkZWxsYSBjaGlhdmUuIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMTgKK21zZ2lkICJHZW5lcmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vIGtleXMgZm91bmQuIgorbXNnc3RyICJMYSBjaGlhdmUgw6ggc3RhdGEgY3JlYXRhIGNvbiBzdWNjZXNzbywgbWEgbm9uIMOoIHN0YXRhIHRyb3ZhdGEuIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJZb3VyIGtleSBpcyBpbjogJXMiCittc2dzdHIgIkxhIGNoaWF2ZSDDqCBpbjogJXMiCisKKyM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCittc2dzdHIgIiUxJHMgLi4uICU2JHM6ICUyJCppIGRpICU0JCppICglNyQzaSUlKSIKKworIzogbGliL3Rvb2xzLnRjbDo3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKK21zZ3N0ciAiQmlzb2duYSBzZWxlemlvbmFyZSB1biBmaWxlIHByaW1hIGRpIGVzZWd1aXJlICVzLiIKKworIzogbGliL3Rvb2xzLnRjbDo5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJXM/IgorbXNnc3RyICJWdW9pIGRhdnZlcm8gZXNlZ3VpcmUgJXM/IgorCisjOiBsaWIvdG9vbHMudGNsOjExMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2w6ICVzIgorbXNnc3RyICJBY2Nlc3NvcmlvOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nOiAlcyIKK21zZ3N0ciAiRXNlZ3VvOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIgorbXNnc3RyICJJbCBwcm9ncmFtbWEgZXN0ZXJubyDDqCB0ZXJtaW5hdG8gY29uIHN1Y2Nlc3NvOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGZhaWxlZDogJXMiCittc2dzdHIgIklsIHByb2dyYW1tYSBlc3Rlcm5vIGhhIHJpcG9ydGF0byB1biBlcnJvcmU6ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgorbXNnaWQgIkFkZCBUb29sIgorbXNnc3RyICJBZ2dpdW5naSBhY2Nlc3NvcmlvIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOAorbXNnaWQgIkFkZCBOZXcgVG9vbCBDb21tYW5kIgorbXNnc3RyICJBZ2dpdW5naSB1biBudW92byBjb21hbmRvIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMworbXNnaWQgIkFkZCBnbG9iYWxseSIKK21zZ3N0ciAiQWdnaXVuZ2kgcGVyIHR1dHRpIGdsaSBhcmNoaXZpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0NQorbXNnaWQgIlRvb2wgRGV0YWlscyIKK21zZ3N0ciAiRGV0dGFnbGkgc3VsbCdhY2Nlc3NvcmlvIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0OAorbXNnaWQgIlVzZSAnLycgc2VwYXJhdG9ycyB0byBjcmVhdGUgYSBzdWJtZW51IHRyZWU6IgorbXNnc3RyICJVdGlsaXp6YSBpbCBzZXBhcmF0b3JlICcvJyBwZXIgY3JlYXJlIHVuIGFsYmVybyBkaSBzb3R0b21lbnU6IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo2MQorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJDb21hbmRvOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzQKK21zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgorbXNnc3RyICJNb3N0cmEgdW5hIGZpbmVzdHJhIGRpIGRpYWxvZ28gcHJpbWEgZGVsbCdhdnZpbyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6ODAKK21zZ2lkICJBc2sgdGhlIHVzZXIgdG8gc2VsZWN0IGEgcmV2aXNpb24gKHNldHMgJFJFVklTSU9OKSIKK21zZ3N0ciAiQ2hpZWRpIGFsbCd1dGVudGUgZGkgc2NlZ2xpZXJlIHVuYSByZXZpc2lvbmUgKGltcG9zdGEgJFJFVklTSU9OKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6ODUKK21zZ2lkICJBc2sgdGhlIHVzZXIgZm9yIGFkZGl0aW9uYWwgYXJndW1lbnRzIChzZXRzICRBUkdTKSIKK21zZ3N0ciAiQ2hpZWRpIGFsbCd1dGVudGUgZGkgZm9ybmlyZSBhcmdvbWVudGkgYWdnaXVudGl2aSAoaW1wb3N0YSAkQVJHUykiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjkyCittc2dpZCAiRG9uJ3Qgc2hvdyB0aGUgY29tbWFuZCBvdXRwdXQgd2luZG93IgorbXNnc3RyICJOb24gbW9zdHJhcmUgbGEgZmluZXN0cmEgZGkgY29tYW5kbyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTcKK21zZ2lkICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKCRGSUxFTkFNRSBub3QgZW1wdHkpIgorbXNnc3RyICJBdnZpYSBzb2xvIHNlIMOoIHNlbGV6aW9uYXRhIHVuYSBkaWZmZXJlbnphICgkRklMRU5BTUUgbm9uIMOoIHZ1b3RvKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTIxCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIG5hbWUgZm9yIHRoZSB0b29sLiIKK21zZ3N0ciAiQmlzb2duYSBkYXJlIHVuIG5vbWUgYWxsJ2FjY2Vzc29yaW8uIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJMJ2FjY2Vzc29yaW8gJyVzJyBlc2lzdGUgZ2nDoC4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE1MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgYWRkIHRvb2w6XG4iCisiJXMiCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBhZ2dpdW5nZXJlIGwnYWNjZXNzb3JpbzpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTkwCittc2dpZCAiUmVtb3ZlIFRvb2wiCittc2dzdHIgIlJpbXVvdmkgYWNjZXNzb3JpbyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk2Cittc2dpZCAiUmVtb3ZlIFRvb2wgQ29tbWFuZHMiCittc2dzdHIgIlJpbXVvdmkgaSBjb21hbmRpIGFjY2Vzc29yaSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjAwCittc2dpZCAiUmVtb3ZlIgorbXNnc3RyICJSaW11b3ZpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzYKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIoSWwgY29sb3JlIGJsdSBpbmRpY2EgYWNjZXNzb3JpIHBlciBsJ2FyY2hpdmlvIGxvY2FsZSkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1biBDb21tYW5kOiAlcyIKK21zZ3N0ciAiQXZ2aWEgaWwgY29tYW5kbzogJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjMxMQorbXNnaWQgIkFyZ3VtZW50cyIKK21zZ3N0ciAiQXJnb21lbnRpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNDgKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgorbXNnc3RyICJSZWN1cGVybyBudW92ZSBtb2RpZmljaGUgZGEgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicmVtb3RlIHBydW5lICVzIgorbXNnc3RyICJwb3RhdHVyYSByZW1vdGEgZGkgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gJXMiCittc2dzdHIgIkVmZmV0dHVhIHBvdGF0dXJhIGRlaSBkdXBsaWNhdGkgbG9jYWxpIGRpIHJhbWkgcmVtb3RpIGNhbmNlbGxhdGkgZGEgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyBjaGFuZ2VzIHRvICVzIgorbXNnc3RyICJQcm9wYWdhemlvbmUgbW9kaWZpY2hlIGEgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWlycm9yaW5nIHRvICVzIgorbXNnc3RyICJNaXJyb3JpbmcgdmVyc28gJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKK21zZ3N0ciAiUHJvcGFnYXppb25lICVzICVzIGEgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEwMAorbXNnaWQgIlB1c2ggQnJhbmNoZXMiCittc2dzdHIgIlByb3BhZ2EgcmFtaSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTE0Cittc2dpZCAiU291cmNlIEJyYW5jaGVzIgorbXNnc3RyICJSYW1pIGRpIG9yaWdpbmUiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEzMQorbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCittc2dzdHIgIkFyY2hpdmlvIGRpIGRlc3RpbmF6aW9uZSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTY5Cittc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSBkaSB0cmFzZmVyaW1lbnRvIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzEKK21zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKK21zZ3N0ciAiU292cmFzY3JpdmkgcmFtbyBlc2lzdGVudGUgKGFsY3VuZSBtb2RpZmljaGUgcG90cmViYmVybyBlc3NlcmUgcGVyc2UpIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzUKK21zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKK21zZ3N0ciAiVXRpbGl6emEgJ3RoaW4gcGFjaycgKHBlciBjb25uZXNzaW9uaSBsZW50ZSkiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3OQorbXNnaWQgIkluY2x1ZGUgdGFncyIKK21zZ3N0ciAiSW5jbHVkaSBldGljaGV0dGUiCmRpZmYgLS1naXQgYS9wby9qYS5wbyBiL2dpdC1ndWkvcG8vamEucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2phLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL2phLnBvCmRpZmYgLS1naXQgYS9wby9uYi5wbyBiL2dpdC1ndWkvcG8vbmIucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL25iLnBvCnJlbmFtZSB0byBnaXQtZ3VpL3BvL25iLnBvCmRpZmYgLS1naXQgYS9wby9wbzJtc2cuc2ggYi9naXQtZ3VpL3BvL3BvMm1zZy5zaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcG8vcG8ybXNnLnNoCnJlbmFtZSB0byBnaXQtZ3VpL3BvL3BvMm1zZy5zaApkaWZmIC0tZ2l0IGEvcG8vcHRfYnIucG8gYi9naXQtZ3VpL3BvL3B0X2JyLnBvCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwby9wdF9ici5wbwpyZW5hbWUgdG8gZ2l0LWd1aS9wby9wdF9ici5wbwpkaWZmIC0tZ2l0IGEvcG8vcHRfcHQucG8gYi9naXQtZ3VpL3BvL3B0X3B0LnBvCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwby9wdF9wdC5wbwpyZW5hbWUgdG8gZ2l0LWd1aS9wby9wdF9wdC5wbwpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9ydS5wbyBiL2dpdC1ndWkvcG8vcnUucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY1MzA1YwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vcnUucG8KQEAgLTAsMCArMSwyMzgyIEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgdG8gcnVzc2lhbgorIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2hhd24gUGVhcmNlCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtZ3VpIHBhY2thZ2UuCisjIFRyYW5zbGF0b3JzOgorIyBEaW1pdHJpeSBSeWF6YW50Y2V2IDxESm0wMG5AbWFpbC5ydT4sIDIwMTUtMjAxNgorIyBJcmluYSBSaWVzZW4gPGlyaW5hLnJpZXNlbkBnbWFpbC5jb20+LCAyMDA3Cittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHaXQgUnVzc2lhbiBMb2NhbGl6YXRpb24gUHJvamVjdFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMS0yNiAxNTo0Ny0wODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wNi0zMCAxMjozOSswMDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBEaW1pdHJpeSBSeWF6YW50Y2V2IDxESm0wMG5AbWFpbC5ydT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBSdXNzaWFuIChodHRwOi8vd3d3LnRyYW5zaWZleC5jb20vZGptMDBuL2dpdC1wby1ydS9sYW5ndWFnZS9ydS8pXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiTGFuZ3VhZ2U6IHJ1XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz00OyBwbHVyYWw9KG4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgbiUxMDw9NCAmJiAobiUxMDA8MTIgfHwgbiUxMDA+MTQpID8gMSA6IG4lMTA9PTAgfHwgKG4lMTA+PTUgJiYgbiUxMDw9OSkgfHwgKG4lMTAwPj0xMSAmJiBuJTEwMDw9MTQpPyAyIDogMyk7XG4iCisKKyM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo3OTMgZ2l0LWd1aS5zaDo4MDcgZ2l0LWd1aS5zaDo4MjAgZ2l0LWd1aS5zaDo5MDMKKyM6IGdpdC1ndWkuc2g6OTIyCittc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCittc2dzdHIgImdpdC1ndWk6INC60YDQuNGC0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwIgorCisjOiBnaXQtZ3VpLnNoOjc0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgorbXNnc3RyICLQkiAlcyDRg9GB0YLQsNC90L7QstC70LXQvSDQvdC10LLQtdGA0L3Ri9C5INGI0YDQuNGE0YI6IgorCisjOiBnaXQtZ3VpLnNoOjc3OQorbXNnaWQgIk1haW4gRm9udCIKK21zZ3N0ciAi0KjRgNC40YTRgiDQuNC90YLQtdGA0YTQtdC50YHQsCIKKworIzogZ2l0LWd1aS5zaDo3ODAKK21zZ2lkICJEaWZmL0NvbnNvbGUgRm9udCIKK21zZ3N0ciAi0KjRgNC40YTRgiDQutC+0L3RgdC+0LvQuCDQuCDQuNC30LzQtdC90LXQvdC40LkgKGRpZmYpIgorCisjOiBnaXQtZ3VpLnNoOjc5NAorbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKK21zZ3N0ciAiZ2l0INC90LUg0L3QsNC50LTQtdC9INCyIFBBVEguIgorCisjOiBnaXQtZ3VpLnNoOjgyMQorbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDRgNCw0YHQv9C+0LfQvdCw0YLRjCDRgdGC0YDQvtC60YMg0LLQtdGA0YHQuNC4IEdpdDogIgorCisjOiBnaXQtZ3VpLnNoOjgzOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKKyJcbiIKKyIlcyBjbGFpbXMgaXQgaXMgdmVyc2lvbiAnJXMnLlxuIgorIlxuIgorIiVzIHJlcXVpcmVzIGF0IGxlYXN0IEdpdCAxLjUuMCBvciBsYXRlci5cbiIKKyJcbiIKKyJBc3N1bWUgJyVzJyBpcyB2ZXJzaW9uIDEuNS4wP1xuIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQvtC/0YDQtdC00LXQu9C40YLRjCDQstC10YDRgdC40Y4gR2l0XG5cbiVzINGD0LrQsNC30YvQstCw0LXRgiDQvdCwINCy0LXRgNGB0LjRjiDCqyVzwrsuXG5cbtC00LvRjyAlcyDRgtGA0LXQsdGD0LXRgtGB0Y8g0LLQtdGA0YHQuNGPIEdpdCwg0L3QsNGH0LjQvdCw0Y8g0YEgMS41LjBcblxu0J/RgNC10LTQv9C+0LvQvtC20LjRgtGMLCDRh9GC0L4gwqslc8K7INC4INC10YHRgtGMINCy0LXRgNGB0LjRjyAxLjUuMD9cbiIKKworIzogZ2l0LWd1aS5zaDoxMTI4Cittc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgorbXNnc3RyICLQmtCw0YLQsNC70L7QsyBHaXQg0L3QtSDQvdCw0LnQtNC10L06IgorCisjOiBnaXQtZ3VpLnNoOjExNDYKK21zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQv9C10YDQtdC50YLQuCDQuiDQutC+0YDQvdGOINGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCDRgNC10L/QvtC30LjRgtC+0YDQuNGPOiAiCisKKyM6IGdpdC1ndWkuc2g6MTE1NAorbXNnaWQgIkNhbm5vdCB1c2UgYmFyZSByZXBvc2l0b3J5OiIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQsdC10Lcg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwOiIKKworIzogZ2l0LWd1aS5zaDoxMTYyCittc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgItCe0YLRgdGD0YLRgdGC0LLRg9C10YIg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMiCisKKyM6IGdpdC1ndWkuc2g6MTMzNCBsaWIvY2hlY2tvdXRfb3AudGNsOjMwNgorbXNnaWQgIlJlZnJlc2hpbmcgZmlsZSBzdGF0dXMuLi4iCittc2dzdHIgItCe0LHQvdC+0LLQu9C10L3QuNC1INC40L3RhNC+0YDQvNCw0YbQuNC4INC+INGB0L7RgdGC0L7Rj9C90LjQuCDRhNCw0LnQu9C+0LLigKYiCisKKyM6IGdpdC1ndWkuc2g6MTM5MAorbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCittc2dzdHIgItCf0L7QuNGB0Log0LjQt9C80LXQvdC10L3QvdGL0YUg0YTQsNC50LvQvtCy4oCmIgorCisjOiBnaXQtZ3VpLnNoOjE0NTQKK21zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICLQktGL0LfQvtCyINC/0LXRgNC10YXQstCw0YLRh9C40LrQsCBwcmVwYXJlLWNvbW1pdC1tc2figKYiCisKKyM6IGdpdC1ndWkuc2g6MTQ3MQorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgItCa0L7QvNC80LjRgiDQv9GA0LXRgNCy0LDQvSDQv9C10YDQtdGF0LLQsNGC0YfQuNC60L7QvCBwcmVwYXJlLWNvbW1pdC1tc2cuIgorCisjOiBnaXQtZ3VpLnNoOjE2MjkgbGliL2Jyb3dzZXIudGNsOjI0NgorbXNnaWQgIlJlYWR5LiIKK21zZ3N0ciAi0JPQvtGC0L7QstC+LiIKKworIzogZ2l0LWd1aS5zaDoxNzg3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0L3QviAlcyDQuNC3ICVzINGE0LDQudC70L7Qsi4iCisKKyM6IGdpdC1ndWkuc2g6MTkxMworbXNnaWQgIlVubW9kaWZpZWQiCittc2dzdHIgItCd0LUg0LjQt9C80LXQvdC10L3QviIKKworIzogZ2l0LWd1aS5zaDoxOTE1Cittc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgItCY0LfQvNC10L3QtdC90L4sINC90LUg0LIg0LjQvdC00LXQutGB0LUiCisKKyM6IGdpdC1ndWkuc2g6MTkxNiBnaXQtZ3VpLnNoOjE5MjQKK21zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCIKK21zZ3N0ciAi0JIg0LjQvdC00LXQutGB0LUg0LTQu9GPINC60L7QvNC80LjRgtCwIgorCisjOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1Cittc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgItCn0LDRgdGC0LgsINCyINC40L3QtNC10LrRgdC1INC00LvRjyDQutC+0LzQvNC40YLQsCIKKworIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgorbXNnc3RyICLQkiDQuNC90LTQtdC60YHQtSDQtNC70Y8g0LrQvtC80LzQuNGC0LAsINC+0YLRgdGD0YLRgdGC0LLRg9C10YIiCisKKyM6IGdpdC1ndWkuc2g6MTkyMAorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICLQotC40L8g0YTQsNC50LvQsCDQuNC30LzQtdC90ZHQvSwg0L3QtSDQsiDQuNC90LTQtdC60YHQtSIKKworIzogZ2l0LWd1aS5zaDoxOTIxCittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIHN0YWdlZCIKK21zZ3N0ciAi0KLQuNC/INGE0LDQudC70LAg0LjQt9C80LXQvdGR0L0sINCyINC40L3QtNC10LrRgdC1IgorCisjOiBnaXQtZ3VpLnNoOjE5MjMKK21zZ2lkICJVbnRyYWNrZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgItCd0LUg0L7RgtGB0LvQtdC20LjQstCw0LXRgtGB0Y8sINC90LUg0LIg0LjQvdC00LXQutGB0LUiCisKKyM6IGdpdC1ndWkuc2g6MTkyOAorbXNnaWQgIk1pc3NpbmciCittc2dzdHIgItCe0YLRgdGD0YLRgdGC0LLRg9C10YIiCisKKyM6IGdpdC1ndWkuc2g6MTkyOQorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKK21zZ3N0ciAi0JIg0LjQvdC00LXQutGB0LUg0LTQu9GPINGD0LTQsNC70LXQvdC40Y8iCisKKyM6IGdpdC1ndWkuc2g6MTkzMAorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAi0JIg0LjQvdC00LXQutGB0LUg0LTQu9GPINGD0LTQsNC70LXQvdC40Y8sINC10YnQtSDQvdC1INGD0LTQsNC70LXQvdC+IgorCisjOiBnaXQtZ3VpLnNoOjE5MzIgZ2l0LWd1aS5zaDoxOTMzIGdpdC1ndWkuc2g6MTkzNCBnaXQtZ3VpLnNoOjE5MzUKKyM6IGdpdC1ndWkuc2g6MTkzNiBnaXQtZ3VpLnNoOjE5MzcKK21zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICLQotGA0LXQsdGD0LXRgtGB0Y8g0YDQsNC30YDQtdGI0LXQvdC40LUg0LrQvtC90YTQu9C40LrRgtCwINC/0YDQuCDRgdC70LjRj9C90LjQuCIKKworIzogZ2l0LWd1aS5zaDoxOTcyCittc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAi0JfQsNC/0YPRgdC60LDQtdGC0YHRjyBnaXRr4oCmINCf0L7QtNC+0LbQtNC40YLQtSwg0L/QvtC20LDQu9GD0LnRgdGC0LDigKYiCisKKyM6IGdpdC1ndWkuc2g6MTk4NAorbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgorbXNnc3RyICJnaXRrINC90LUg0L3QsNC50LTQtdC9INCyIFBBVEguIgorCisjOiBnaXQtZ3VpLnNoOjIwNDMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiZ2l0IGd1aSDQvdC1INC90LDQudC00LXQvSDQsiBQQVRILiIKKworIzogZ2l0LWd1aS5zaDoyNDU1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKK21zZ2lkICJSZXBvc2l0b3J5IgorbXNnc3RyICLQoNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBnaXQtZ3VpLnNoOjI0NTYKK21zZ2lkICJFZGl0IgorbXNnc3RyICLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCIKKworIzogZ2l0LWd1aS5zaDoyNDU4IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKK21zZ2lkICJCcmFuY2giCittc2dzdHIgItCS0LXRgtC60LAiCisKKyM6IGdpdC1ndWkuc2g6MjQ2MSBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ4Cittc2dpZCAiQ29tbWl0QEBub3VuIgorbXNnc3RyICLQmtC+0LzQvNC40YIiCisKKyM6IGdpdC1ndWkuc2g6MjQ2NCBsaWIvbWVyZ2UudGNsOjEyMSBsaWIvbWVyZ2UudGNsOjE1MCBsaWIvbWVyZ2UudGNsOjE2OAorbXNnaWQgIk1lcmdlIgorbXNnc3RyICLQodC70LjRj9C90LjQtSIKKworIzogZ2l0LWd1aS5zaDoyNDY1IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTcKK21zZ2lkICJSZW1vdGUiCittc2dzdHIgItCS0L3QtdGI0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCisKKyM6IGdpdC1ndWkuc2g6MjQ2OAorbXNnaWQgIlRvb2xzIgorbXNnc3RyICLQktGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdGL0LUg0L7Qv9C10YDQsNGG0LjQuCIKKworIzogZ2l0LWd1aS5zaDoyNDc3Cittc2dpZCAiRXhwbG9yZSBXb3JraW5nIENvcHkiCittc2dzdHIgItCf0YDQvtGB0LzQvtGC0YAg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwIgorCisjOiBnaXQtZ3VpLnNoOjI0ODMKK21zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKK21zZ3N0ciAi0J/RgNC+0YHQvNC+0YLRgNC10YLRjCDRhNCw0LnQu9GLINGC0LXQutGD0YnQtdC5INCy0LXRgtC60LgiCisKKyM6IGdpdC1ndWkuc2g6MjQ4NworbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0YTQsNC50LvRiyDQstC10YLQutC44oCmIgorCisjOiBnaXQtZ3VpLnNoOjI0OTIKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YDQuNGOINGC0LXQutGD0YnQtdC5INCy0LXRgtC60LgiCisKKyM6IGdpdC1ndWkuc2g6MjQ5NgorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LjRgdGC0L7RgNC40Y4g0LLRgdC10YUg0LLQtdGC0L7QuiIKKworIzogZ2l0LWd1aS5zaDoyNTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0YTQsNC50LvRiyDQstC10YLQutC4ICVzIgorCisjOiBnaXQtZ3VpLnNoOjI1MDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YDQuNGOINCy0LXRgtC60LggJXMiCisKKyM6IGdpdC1ndWkuc2g6MjUxMCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKK21zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgorbXNnc3RyICLQodGC0LDRgtC40YHRgtC40LrQsCDQsdCw0LfRiyDQtNCw0L3QvdGL0YUiCisKKyM6IGdpdC1ndWkuc2g6MjUxMyBsaWIvZGF0YWJhc2UudGNsOjM0Cittc2dpZCAiQ29tcHJlc3MgRGF0YWJhc2UiCittc2dzdHIgItCh0LbQsNGC0Ywg0LHQsNC30YMg0LTQsNC90L3Ri9GFIgorCisjOiBnaXQtZ3VpLnNoOjI1MTYKK21zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCittc2dzdHIgItCf0YDQvtCy0LXRgNC40YLRjCDQsdCw0LfRgyDQtNCw0L3QvdGL0YUiCisKKyM6IGdpdC1ndWkuc2g6MjUyMyBnaXQtZ3VpLnNoOjI1MjcgZ2l0LWd1aS5zaDoyNTMxIGxpYi9zaG9ydGN1dC50Y2w6OAorIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCittc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0Y/RgNC70YvQuiDQvdCwINGA0LDQsdC+0YfQtdC8INGB0YLQvtC70LUiCisKKyM6IGdpdC1ndWkuc2g6MjUzOSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE4MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5MQorbXNnaWQgIlF1aXQiCittc2dzdHIgItCS0YvRhdC+0LQiCisKKyM6IGdpdC1ndWkuc2g6MjU0NworbXNnaWQgIlVuZG8iCittc2dzdHIgItCe0YLQvNC10L3QuNGC0YwiCisKKyM6IGdpdC1ndWkuc2g6MjU1MAorbXNnaWQgIlJlZG8iCittc2dzdHIgItCf0L7QstGC0L7RgNC40YLRjCIKKworIzogZ2l0LWd1aS5zaDoyNTU0IGdpdC1ndWkuc2g6MzEwOQorbXNnaWQgIkN1dCIKK21zZ3N0ciAi0JLRi9GA0LXQt9Cw0YLRjCIKKworIzogZ2l0LWd1aS5zaDoyNTU3IGdpdC1ndWkuc2g6MzExMiBnaXQtZ3VpLnNoOjMxODYgZ2l0LWd1aS5zaDozMjU5CisjOiBsaWIvY29uc29sZS50Y2w6NjkKK21zZ2lkICJDb3B5IgorbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0YLRjCIKKworIzogZ2l0LWd1aS5zaDoyNTYwIGdpdC1ndWkuc2g6MzExNQorbXNnaWQgIlBhc3RlIgorbXNnc3RyICLQktGB0YLQsNCy0LjRgtGMIgorCisjOiBnaXQtZ3VpLnNoOjI1NjMgZ2l0LWd1aS5zaDozMTE4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOAorbXNnaWQgIkRlbGV0ZSIKK21zZ3N0ciAi0KPQtNCw0LvQuNGC0YwiCisKKyM6IGdpdC1ndWkuc2g6MjU2NyBnaXQtZ3VpLnNoOjMxMjIgZ2l0LWd1aS5zaDozMjYzIGxpYi9jb25zb2xlLnRjbDo3MQorbXNnaWQgIlNlbGVjdCBBbGwiCittc2dzdHIgItCS0YvQtNC10LvQuNGC0Ywg0LLRgdC1IgorCisjOiBnaXQtZ3VpLnNoOjI1NzYKK21zZ2lkICJDcmVhdGUuLi4iCittc2dzdHIgItCh0L7Qt9C00LDRgtGM4oCmIgorCisjOiBnaXQtZ3VpLnNoOjI1ODIKK21zZ2lkICJDaGVja291dC4uLiIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0LjigKYiCisKKyM6IGdpdC1ndWkuc2g6MjU4OAorbXNnaWQgIlJlbmFtZS4uLiIKK21zZ3N0ciAi0J/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0YzigKYiCisKKyM6IGdpdC1ndWkuc2g6MjU5MworbXNnaWQgIkRlbGV0ZS4uLiIKK21zZ3N0ciAi0KPQtNCw0LvQuNGC0YzigKYiCisKKyM6IGdpdC1ndWkuc2g6MjU5OAorbXNnaWQgIlJlc2V0Li4uIgorbXNnc3RyICLQodCx0YDQvtGB0LjRgtGM4oCmIgorCisjOiBnaXQtZ3VpLnNoOjI2MDgKK21zZ2lkICJEb25lIgorbXNnc3RyICLQl9Cw0LLQtdGA0YjQtdC90L4iCisKKyM6IGdpdC1ndWkuc2g6MjYxMAorbXNnaWQgIkNvbW1pdEBAdmVyYiIKK21zZ3N0ciAi0JfQsNC60L7QvNC80LjRgtC40YLRjCIKKworIzogZ2l0LWd1aS5zaDoyNjE5IGdpdC1ndWkuc2g6MzA1MAorbXNnaWQgIk5ldyBDb21taXQiCittc2dzdHIgItCd0L7QstGL0Lkg0LrQvtC80LzQuNGCIgorCisjOiBnaXQtZ3VpLnNoOjI2MjcgZ2l0LWd1aS5zaDozMDU3Cittc2dpZCAiQW1lbmQgTGFzdCBDb21taXQiCittc2dzdHIgItCY0YHQv9GA0LDQstC40YLRjCDQv9C+0YHQu9C10LTQvdC40Lkg0LrQvtC80LzQuNGCIgorCisjOiBnaXQtZ3VpLnNoOjI2MzcgZ2l0LWd1aS5zaDozMDExIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6OTkKK21zZ2lkICJSZXNjYW4iCittc2dzdHIgItCf0LXRgNC10YfQuNGC0LDRgtGMIgorCisjOiBnaXQtZ3VpLnNoOjI2NDMKK21zZ2lkICJTdGFnZSBUbyBDb21taXQiCittc2dzdHIgItCU0L7QsdCw0LLQuNGC0Ywg0LIg0LjQvdC00LXQutGBIgorCisjOiBnaXQtZ3VpLnNoOjI2NDkKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKK21zZ3N0ciAi0JTQvtCx0LDQstC40YLRjCDQuNC30LzQtdC90ZHQvdC90YvQtSDRhNCw0LnQu9GLINCyINC40L3QtNC10LrRgSIKKworIzogZ2l0LWd1aS5zaDoyNjU1Cittc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAi0KPQsdGA0LDRgtGMINC40Lcg0LjQt9C00LXQutGB0LAiCisKKyM6IGdpdC1ndWkuc2g6MjY2MSBsaWIvaW5kZXgudGNsOjQxMgorbXNnaWQgIlJldmVydCBDaGFuZ2VzIgorbXNnc3RyICLQntCx0YDQsNGC0LjRgtGMINC40LfQvNC10L3QtdC90LjRjyIKKworIzogZ2l0LWd1aS5zaDoyNjY5IGdpdC1ndWkuc2g6MzMxMCBnaXQtZ3VpLnNoOjMzNDEKK21zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKK21zZ3N0ciAi0JzQtdC90YzRiNC1INC60L7QvdGC0LXQutGB0YLQsCIKKworIzogZ2l0LWd1aS5zaDoyNjczIGdpdC1ndWkuc2g6MzMxNCBnaXQtZ3VpLnNoOjMzNDUKK21zZ2lkICJTaG93IE1vcmUgQ29udGV4dCIKK21zZ3N0ciAi0JHQvtC70YzRiNC1INC60L7QvdGC0LXQutGB0YLQsCIKKworIzogZ2l0LWd1aS5zaDoyNjgwIGdpdC1ndWkuc2g6MzAyNCBnaXQtZ3VpLnNoOjMxMzMKK21zZ2lkICJTaWduIE9mZiIKK21zZ3N0ciAi0JLRgdGC0LDQstC40YLRjCBTaWduZWQtb2ZmLWJ5IgorCisjOiBnaXQtZ3VpLnNoOjI2OTYKK21zZ2lkICJMb2NhbCBNZXJnZS4uLiIKK21zZ3N0ciAi0JvQvtC60LDQu9GM0L3QvtC1INGB0LvQuNGP0L3QuNC14oCmIgorCisjOiBnaXQtZ3VpLnNoOjI3MDEKK21zZ2lkICJBYm9ydCBNZXJnZS4uLiIKK21zZ3N0ciAi0J/RgNC10YDQstCw0YLRjCDRgdC70LjRj9C90LjQteKApiIKKworIzogZ2l0LWd1aS5zaDoyNzEzIGdpdC1ndWkuc2g6Mjc0MQorbXNnaWQgIkFkZC4uLiIKK21zZ3N0ciAi0JTQvtCx0LDQstC40YLRjOKApiIKKworIzogZ2l0LWd1aS5zaDoyNzE3Cittc2dpZCAiUHVzaC4uLiIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LjRgtGM4oCmIgorCisjOiBnaXQtZ3VpLnNoOjI3MjEKK21zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgorbXNnc3RyICLQo9C00LDQu9C40YLRjCDQstC10YLQutGD4oCmIgorCisjOiBnaXQtZ3VpLnNoOjI3MzEgZ2l0LWd1aS5zaDozMjkyCittc2dpZCAiT3B0aW9ucy4uLiIKK21zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC44oCmIgorCisjOiBnaXQtZ3VpLnNoOjI3NDIKK21zZ2lkICJSZW1vdmUuLi4iCittc2dzdHIgItCj0LTQsNC70LjRgtGM4oCmIgorCisjOiBnaXQtZ3VpLnNoOjI3NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MAorbXNnaWQgIkhlbHAiCittc2dzdHIgItCf0L7QvNC+0YnRjCIKKworIzogZ2l0LWd1aS5zaDoyNzU1IGdpdC1ndWkuc2g6Mjc1OSBsaWIvYWJvdXQudGNsOjE0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm91dCAlcyIKK21zZ3N0ciAi0J4gJXMiCisKKyM6IGdpdC1ndWkuc2g6Mjc4MworbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgorbXNnc3RyICLQlNC+0LrRg9C80LXQvdGC0LDRhtC40Y8g0LIg0LjQvdGC0LXRgNC90LXRgtC1IgorCisjOiBnaXQtZ3VpLnNoOjI3ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2Cittc2dpZCAiU2hvdyBTU0ggS2V5IgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC60LvRjtGHIFNTSCIKKworIzogZ2l0LWd1aS5zaDoyODkzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IGNhbm5vdCBzdGF0IHBhdGggJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCittc2dzdHIgItC60YDQuNGC0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwOiAlczog0L3QtdGCINGC0LDQutC+0LPQviDRhNCw0LnQu9CwINC40LvQuCDQutCw0YLQsNC70L7Qs9CwIgorCisjOiBnaXQtZ3VpLnNoOjI5MjYKK21zZ2lkICJDdXJyZW50IEJyYW5jaDoiCittc2dzdHIgItCi0LXQutGD0YnQsNGPINCy0LXRgtC60LA6IgorCisjOiBnaXQtZ3VpLnNoOjI5NDcKK21zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y8g0LIg0LjQvdC00LXQutGB0LUgKNCx0YPQtNGD0YIg0LfQsNC60L7QvNC80LjRh9C10L3RiykiCisKKyM6IGdpdC1ndWkuc2g6Mjk2NworbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCittc2dzdHIgItCY0LfQvNC10L3QtdC90L4gKNC90LUg0LHRg9C00LXRgiDRgdC+0YXRgNCw0L3QtdC90L4pIgorCisjOiBnaXQtZ3VpLnNoOjMwMTcKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIgorbXNnc3RyICLQmNC90LTQtdC60YHQuNGA0L7QstCw0YLRjCDQstGB0ZEiCisKKyM6IGdpdC1ndWkuc2g6MzAzNiBsaWIvdHJhbnNwb3J0LnRjbDoxMDQgbGliL3RyYW5zcG9ydC50Y2w6MTkzCittc2dpZCAiUHVzaCIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LjRgtGMIgorCisjOiBnaXQtZ3VpLnNoOjMwNzEKK21zZ2lkICJJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi0KHQvtC+0LHRidC10L3QuNC1INC/0LXRgNCy0L7Qs9C+INC60L7QvNC80LjRgtCwOiIKKworIzogZ2l0LWd1aS5zaDozMDcyCittc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgItCh0L7QvtCx0YnQtdC90LjQtSDQuNGB0L/RgNCw0LLQu9C10L3QvdC+0LPQviDQutC+0LzQvNC40YLQsDoiCisKKyM6IGdpdC1ndWkuc2g6MzA3MworbXNnaWQgIkFtZW5kZWQgSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgItCh0L7QvtCx0YnQtdC90LjQtSDQuNGB0L/RgNCw0LLQu9C10L3QvdC+0LPQviDQv9C10YDQstC+0LPQviDQutC+0LzQvNC40YLQsDoiCisKKyM6IGdpdC1ndWkuc2g6MzA3NAorbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLQodC+0L7QsdGJ0LXQvdC40LUg0LjRgdC/0YDQsNCy0LvQtdC90L3QvtCz0L4g0YHQu9C40Y/QvdC40Y86IgorCisjOiBnaXQtZ3VpLnNoOjMwNzUKK21zZ2lkICJNZXJnZSBDb21taXQgTWVzc2FnZToiCittc2dzdHIgItCh0L7QvtCx0YnQtdC90LjQtSDRgdC70LjRj9C90LjRjzoiCisKKyM6IGdpdC1ndWkuc2g6MzA3NgorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi0KHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwOiIKKworIzogZ2l0LWd1aS5zaDozMTI1IGdpdC1ndWkuc2g6MzI2NyBsaWIvY29uc29sZS50Y2w6NzMKK21zZ2lkICJDb3B5IEFsbCIKK21zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNGC0Ywg0LLRgdC1IgorCisjOiBnaXQtZ3VpLnNoOjMxNDkgbGliL2JsYW1lLnRjbDoxMDQKK21zZ2lkICJGaWxlOiIKK21zZ3N0ciAi0KTQsNC50Ls6IgorCisjOiBnaXQtZ3VpLnNoOjMyNTUKK21zZ2lkICJSZWZyZXNoIgorbXNnc3RyICLQntCx0L3QvtCy0LjRgtGMIgorCisjOiBnaXQtZ3VpLnNoOjMyNzYKK21zZ2lkICJEZWNyZWFzZSBGb250IFNpemUiCittc2dzdHIgItCj0LzQtdC90YzRiNC40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgorCisjOiBnaXQtZ3VpLnNoOjMyODAKK21zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCittc2dzdHIgItCj0LLQtdC70LjRh9C40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgorCisjOiBnaXQtZ3VpLnNoOjMyODggbGliL2JsYW1lLnRjbDoyODEKK21zZ2lkICJFbmNvZGluZyIKK21zZ3N0ciAi0JrQvtC00LjRgNC+0LLQutCwIgorCisjOiBnaXQtZ3VpLnNoOjMyOTkKK21zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCittc2dzdHIgItCf0YDQuNC80LXQvdC40YLRjC/Qo9Cx0YDQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNC1IgorCisjOiBnaXQtZ3VpLnNoOjMzMDQKK21zZ2lkICJBcHBseS9SZXZlcnNlIExpbmUiCittc2dzdHIgItCf0YDQuNC80LXQvdC40YLRjC/Qo9Cx0YDQsNGC0Ywg0YHRgtGA0L7QutGDIgorCisjOiBnaXQtZ3VpLnNoOjMzMjMKK21zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKK21zZ3N0ciAi0JfQsNC/0YPRgdGC0LjRgtGMINC/0YDQvtCz0YDQsNC80LzRgyDRgdC70LjRj9C90LjRjyIKKworIzogZ2l0LWd1aS5zaDozMzI4Cittc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgorbXNnc3RyICLQktC30Y/RgtGMINCy0L3QtdGI0L3RjtGOINCy0LXRgNGB0LjRjiIKKworIzogZ2l0LWd1aS5zaDozMzMyCittc2dpZCAiVXNlIExvY2FsIFZlcnNpb24iCittc2dzdHIgItCS0LfRj9GC0Ywg0LvQvtC60LDQu9GM0L3Rg9GOINCy0LXRgNGB0LjRjiIKKworIzogZ2l0LWd1aS5zaDozMzM2Cittc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCittc2dzdHIgItCe0LHRgNCw0YLQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBnaXQtZ3VpLnNoOjMzNTQKK21zZ2lkICJWaXN1YWxpemUgVGhlc2UgQ2hhbmdlcyBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINGN0YLQuCDQuNC30LzQtdC90LXQvdC40Y8g0L/QvtC00LzQvtC00YPQu9GPIgorCisjOiBnaXQtZ3VpLnNoOjMzNTgKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YDQuNGOINGC0LXQutGD0YnQtdC5INCy0LXRgtC60Lgg0L/QvtC00LzQvtC00YPQu9GPIgorCisjOiBnaXQtZ3VpLnNoOjMzNjIKK21zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LjRgdGC0L7RgNC40Y4g0LLRgdC10YUg0LLQtdGC0L7QuiDQv9C+0LTQvNC+0LTRg9C70Y8iCisKKyM6IGdpdC1ndWkuc2g6MzM2NworbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAi0JfQsNC/0YPRgdGC0LjRgtGMIGdpdCBndWkg0LIg0L/QvtC00LzQvtC00YPQu9C1IgorCisjOiBnaXQtZ3VpLnNoOjMzODkKK21zZ2lkICJVbnN0YWdlIEh1bmsgRnJvbSBDb21taXQiCittc2dzdHIgItCj0LHRgNCw0YLRjCDQsdC70L7QuiDQuNC3INC40L3QtNC10LrRgdCwIgorCisjOiBnaXQtZ3VpLnNoOjMzOTEKK21zZ2lkICJVbnN0YWdlIExpbmVzIEZyb20gQ29tbWl0IgorbXNnc3RyICLQo9Cx0YDQsNGC0Ywg0YHRgtGA0L7QutC4INC40Lcg0LjQvdC00LXQutGB0LAiCisKKyM6IGdpdC1ndWkuc2g6MzM5MworbXNnaWQgIlVuc3RhZ2UgTGluZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAi0KPQsdGA0LDRgtGMINGB0YLRgNC+0LrRgyDQuNC3INC40L3QtNC10LrRgdCwIgorCisjOiBnaXQtZ3VpLnNoOjMzOTYKK21zZ2lkICJTdGFnZSBIdW5rIEZvciBDb21taXQiCittc2dzdHIgItCU0L7QsdCw0LLQuNGC0Ywg0LHQu9C+0Log0LIg0LjQvdC00LXQutGBIgorCisjOiBnaXQtZ3VpLnNoOjMzOTgKK21zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgorbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGMINGB0YLRgNC+0LrQuCDQsiDQuNC90LTQtdC60YEiCisKKyM6IGdpdC1ndWkuc2g6MzQwMAorbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKK21zZ3N0ciAi0JTQvtCx0LDQstC40YLRjCDRgdGC0YDQvtC60YMg0LIg0LjQvdC00LXQutGBIgorCisjOiBnaXQtZ3VpLnNoOjM0MjQKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgItCY0L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGP4oCmIgorCisjOiBnaXQtZ3VpLnNoOjM1NDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICLQktC+0LfQvNC+0LbQvdGLINC+0YjQuNCx0LrQuCDQsiDQv9C10YDQtdC80LXQvdC90YvRhSDQvtC60YDRg9C20LXQvdC40Y8uXG5cbtCf0LXRgNC10LzQtdC90L3Ri9C1INC+0LrRgNGD0LbQtdC90LjRjywg0LrQvtGC0L7RgNGL0LUg0LLQvtC30LzQvtC20L3Qvlxu0LHRg9C00YPRgiDQv9GA0L7QuNCz0L3QvtGA0LjRgNC+0LLQsNC90Ysg0LrQvtC80LDQvdC00LDQvNC4IEdpdCxcbtC30LDQv9GD0YnQtdC90L3Ri9C80Lgg0LjQtyAlc1xuXG4iCisKKyM6IGdpdC1ndWkuc2g6MzU3MAorbXNnaWQgIiIKKyJcbiIKKyJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCisiVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgorbXNnc3RyICJcbtCt0YLQviDQuNC30LLQtdGB0YLQvdCw0Y8g0L/RgNC+0LHQu9C10LzQsCDRgSBUY2wsXG7RgNCw0YHQv9GA0L7RgdGC0YDQsNC90Y/QtdC80YvQvCBDeWd3aW4uIgorCisjOiBnaXQtZ3VpLnNoOjM1NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgorImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgorInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCisifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCittc2dzdHIgIlxuXG7QktC80LXRgdGC0L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8gJXMg0LzQvtC20L3Qvlxu0YHQvtGF0YDQsNC90LjRgtGMINC30L3QsNGH0LXQvdC40Y8gdXNlci5uYW1lINC4XG51c2VyLmVtYWlsINCyINCS0LDRiNC10Lwg0L/QtdGA0YHQvtC90LDQu9GM0L3QvtC8XG7RhNCw0LnQu9C1IH4vLmdpdGNvbmZpZy5cbiIKKworIzogbGliL2Fib3V0LnRjbDoyNgorbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKK21zZ3N0ciAiZ2l0LWd1aSAtINCz0YDQsNGE0LjRh9C10YHQutC40Lkg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0YHQutC40Lkg0LjQvdGC0LXRgNGE0LXQudGBINC6IEdpdC4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzIKK21zZ2lkICJGaWxlIFZpZXdlciIKK21zZ3N0ciAi0J/RgNC+0YHQvNC+0YLRgCDRhNCw0LnQu9CwIgorCisjOiBsaWIvYmxhbWUudGNsOjc4Cittc2dpZCAiQ29tbWl0OiIKK21zZ3N0ciAi0JrQvtC80LzQuNGCOiIKKworIzogbGliL2JsYW1lLnRjbDoyNzEKK21zZ2lkICJDb3B5IENvbW1pdCIKK21zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNGC0YwgU0hBLTEiCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjc1Cittc2dpZCAiRmluZCBUZXh0Li4uIgorbXNnc3RyICLQndCw0LnRgtC4INGC0LXQutGB0YLigKYiCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg0Cittc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKK21zZ3N0ciAi0J/RgNC+0LLQtdGB0YLQuCDQv9C+0LvQvdGL0Lkg0L/QvtC40YHQuiDQutC+0L/QuNC5IgorCisjOiBsaWIvYmxhbWUudGNsOjI4OAorbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YDQuNGH0LXRgdC60LjQuSDQutC+0L3RgtC10LrRgdGCIgorCisjOiBsaWIvYmxhbWUudGNsOjI5MQorbXNnaWQgIkJsYW1lIFBhcmVudCBDb21taXQiCittc2dzdHIgItCQ0LLRgtC+0YDRiyDRgNC+0LTQuNGC0LXQu9GM0YHQutC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogbGliL2JsYW1lLnRjbDo0NTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZWFkaW5nICVzLi4uIgorbXNnc3RyICLQp9GC0LXQvdC40LUgJXPigKYiCisKKyM6IGxpYi9ibGFtZS50Y2w6NTU3Cittc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgItCX0LDQs9GA0YPQt9C60LAg0LDQvdC90L7RgtCw0YbQuNC4INC60L7Qv9C40YDQvtCy0LDQvdC40Lkv0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQueKApiIKKworIzogbGliL2JsYW1lLnRjbDo1NzcKK21zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCittc2dzdHIgItGB0YLRgNC+0Log0L/RgNC+0LrQvtC80LzQtdC90YLQuNGA0L7QstCw0L3QviIKKworIzogbGliL2JsYW1lLnRjbDo3NjkKK21zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgorbXNnc3RyICLQl9Cw0LPRgNGD0LfQutCwINCw0L3QvdC+0YLQsNGG0LjQuSDQv9C10YDQstC+0L3QsNGH0LDQu9GM0L3QvtCz0L4g0L/QvtC70L7QttC10L3QuNGPINC+0LHRitC10LrRgtCw4oCmIgorCisjOiBsaWIvYmxhbWUudGNsOjc3MgorbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgorbXNnc3RyICLQkNC90L3QvtGC0LDRhtC40Y8g0LfQsNCy0LXRgNGI0LXQvdCwLiIKKworIzogbGliL2JsYW1lLnRjbDo4MDIKK21zZ2lkICJCdXN5IgorbXNnc3RyICLQl9Cw0L3Rj9GCIgorCisjOiBsaWIvYmxhbWUudGNsOjgwMworbXNnaWQgIkFubm90YXRpb24gcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcuIgorbXNnc3RyICLQkNC90L3QvtGC0LDRhtC40Y8g0YPQttC1INC30LDQv9GD0YnQtdC90LAiCisKKyM6IGxpYi9ibGFtZS50Y2w6ODQyCittc2dpZCAiUnVubmluZyB0aG9yb3VnaCBjb3B5IGRldGVjdGlvbi4uLiIKK21zZ3N0ciAi0JLRi9C/0L7Qu9C90LXQvdC40LUg0L/QvtC70L3QvtCz0L4g0L/QvtC40YHQutCwINC60L7Qv9C40LnigKYiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTEwCittc2dpZCAiTG9hZGluZyBhbm5vdGF0aW9uLi4uIgorbXNnc3RyICLQl9Cw0LPRgNGD0LfQutCwINCw0L3QvdC+0YLQsNGG0LjQuOKApiIKKworIzogbGliL2JsYW1lLnRjbDo5NjMKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICLQkNCy0YLQvtGAOiIKKworIzogbGliL2JsYW1lLnRjbDo5NjcKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICLQmtC+0LzQvNC40YLQtdGAOiIKKworIzogbGliL2JsYW1lLnRjbDo5NzIKK21zZ2lkICJPcmlnaW5hbCBGaWxlOiIKK21zZ3N0ciAi0JjRgdGF0L7QtNC90YvQuSDRhNCw0LnQuzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTAyMAorbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INGC0LXQutGD0YnQtdC1INGB0L7RgdGC0L7Rj9C90LjQtToiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA3NQorbXNnaWQgIkNhbm5vdCBmaW5kIHBhcmVudCBjb21taXQ6IgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0YDQvtC00LjRgtC10LvRjNGB0LrQvtC1INGB0L7RgdGC0L7Rj9C90LjQtToiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA5MAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKK21zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQv9C+0LrQsNC30LDRgtGMINC/0YDQtdC00LrQsCIKKworIzogbGliL2JsYW1lLnRjbDoxMDkxIGxpYi9kaWZmLnRjbDozMjAKK21zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0LfQsNCz0YDRg9C30LrQuCDQuNC30LzQtdC90LXQvdC40Lk6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyMzEKK21zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKK21zZ3N0ciAi0JjRgdGC0L7Rh9C90LjQujoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTIzNworbXNnaWQgIkluIEZpbGU6IgorbXNnc3RyICLQpNCw0LnQuzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI0MgorbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKK21zZ3N0ciAi0KHQutC+0L/QuNGA0L7QstCw0L3Qvi/Qv9C10YDQtdC80LXRidC10L3QviDQsjoiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE0IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE5Cittc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQvdCwINCy0LXRgtC60YMiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjIzCittc2dpZCAiQ2hlY2tvdXQiCittc2dzdHIgItCf0LXRgNC10LnRgtC4IgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzUKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozMiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzAgbGliL2Jyb3dzZXIudGNsOjI4MgorIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzkgbGliL2Nob29zZV9mb250LnRjbDo0MyBsaWIvbWVyZ2UudGNsOjE3MgorIzogbGliL29wdGlvbi50Y2w6MTI1IGxpYi9yZW1vdGVfYWRkLnRjbDozMiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQyCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0MCBsaWIvdG9vbHNfZGxnLnRjbDoyMDQgbGliL3Rvb2xzX2RsZy50Y2w6MzUyCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDgKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgItCe0YLQvNC10L3QsCIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzIgbGliL2Jyb3dzZXIudGNsOjI4NyBsaWIvdG9vbHNfZGxnLnRjbDozMjgKK21zZ2lkICJSZXZpc2lvbiIKK21zZ3N0ciAi0JLQtdGA0YHQuNGPIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkgbGliL29wdGlvbi50Y2w6MjgwCittc2dpZCAiT3B0aW9ucyIKK21zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4IgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTIKK21zZ2lkICJGZXRjaCBUcmFja2luZyBCcmFuY2giCittc2dzdHIgItCY0LfQstC70LXRh9GMINC40LfQvNC10L3QtdC90LjRjyDQuNC3INCy0L3QtdGI0L3QtdC5INCy0LXRgtC60LgiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ0Cittc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgorbXNnc3RyICLQntGC0YHQvtC10LTQuNC90LjRgtGMINC+0YIg0LvQvtC60LDQu9GM0L3QvtC5INCy0LXRgtC60LgiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMgorbXNnaWQgIkNyZWF0ZSBCcmFuY2giCittc2dzdHIgItCh0L7Qt9C00LDRgtGMINCy0LXRgtC60YMiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyNworbXNnaWQgIkNyZWF0ZSBOZXcgQnJhbmNoIgorbXNnc3RyICLQodC+0LfQtNCw0YLRjCDQvdC+0LLRg9GOINCy0LXRgtC60YMiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MQorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0YwiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MAorbXNnaWQgIkJyYW5jaCBOYW1lIgorbXNnc3RyICLQmNC80Y8g0LLQtdGC0LrQuCIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQzIGxpYi9yZW1vdGVfYWRkLnRjbDozOSBsaWIvdG9vbHNfZGxnLnRjbDo1MAorbXNnaWQgIk5hbWU6IgorbXNnc3RyICLQndCw0LfQstCw0L3QuNC1OiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjU4Cittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoIE5hbWUiCittc2dzdHIgItCh0L7QvtGC0LLQtdGC0YHRgtCy0L7QstCw0YLRjCDQuNC80LXQvdC4INC+0YLRgdC70LXQttC40LLQsNC10LzQvtC5INCy0LXRgtC60LgiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2NgorbXNnaWQgIlN0YXJ0aW5nIFJldmlzaW9uIgorbXNnc3RyICLQndCw0YfQsNC70YzQvdCw0Y8g0LLQtdGA0YHQuNGPIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzIKK21zZ2lkICJVcGRhdGUgRXhpc3RpbmcgQnJhbmNoOiIKK21zZ3N0ciAi0J7QsdC90L7QstC40YLRjCDQuNC80LXRjtGJ0YPRjtGB0Y8g0LLQtdGC0LrRgzoiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQorbXNnaWQgIk5vIgorbXNnc3RyICLQndC10YIiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAorbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgorbXNnc3RyICLQotC+0LvRjNC60L4gRmFzdCBGb3J3YXJkIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1NzEKK21zZ2lkICJSZXNldCIKK21zZ3N0ciAi0KHQsdGA0L7RgSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Cittc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCittc2dzdHIgItCf0L7RgdC70LUg0YHQvtC30LTQsNC90LjRjyDRgdC00LXQu9Cw0YLRjCDRgtC10LrRg9GJ0LXQuSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgorbXNnc3RyICLQo9C60LDQttC40YLQtSDQvtGC0LvQtdC20LjQstCw0LXQvNGD0Y4g0LLQtdGC0LrRgy4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCittc2dzdHIgItCe0YLRgdC70LXQttC40LLQsNC10LzQsNGPINCy0LXRgtC60LAgJXMg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINCy0LXRgtC60L7QuSDQvdCwINCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LguIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTUzIGxpYi9icmFuY2hfcmVuYW1lLnRjbDo4NgorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBicmFuY2ggbmFtZS4iCittc2dzdHIgItCj0LrQsNC20LjRgtC1INC40LzRjyDQstC10YLQutC4LiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCittc2dzdHIgItCd0LXQtNC+0L/Rg9GB0YLQuNC80L7QtSDQuNC80Y8g0LLQtdGC0LrQuCDCqyVzwrsuIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTUKK21zZ2lkICJEZWxldGUgQnJhbmNoIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INCy0LXRgtC60LgiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMAorbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCittc2dzdHIgItCj0LTQsNC70LjRgtGMINC70L7QutCw0LvRjNC90YPRjiDQstC10YLQutGDIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzcKK21zZ2lkICJMb2NhbCBCcmFuY2hlcyIKK21zZ3N0ciAi0JvQvtC60LDQu9GM0L3Ri9C1INCy0LXRgtC60LgiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MgorbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgorbXNnc3RyICLQo9C00LDQu9C40YLRjCDRgtC+0LvRjNC60L4g0LIg0YHQu9GD0YfQsNC1LCDQtdGB0LvQuCDQsdGL0LvQviDRgdC70LjRj9C90LjQtSDRgSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Cittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgorbXNnc3RyICLQktGB0LXQs9C00LAgKNC90LUg0LLRi9C/0L7Qu9C90Y/RgtGMINC/0YDQvtCy0LXRgNC60YMg0L3QsCDRgdC70LjRj9C90LjQtSkiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCittc2dzdHIgItCS0LXRgtC60LgsINC60L7RgtC+0YDRi9C1INC90LUg0L/QvtC70L3QvtGB0YLRjNGOINGB0LvQuNCy0LDRjtGC0YHRjyDRgSAlczoiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTcKK21zZ2lkICIiCisiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKKyJcbiIKKyJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKK21zZ3N0ciAi0JLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINGD0LTQsNC70LXQvdC90YvQtSDQstC10YLQutC4INGB0LvQvtC20L3Qvi5cblxu0J/RgNC+0LTQvtC70LbQuNGC0Yw/IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiJXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0LLQtdGC0LrQuDpcbiVzIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjIyCittc2dpZCAiUmVuYW1lIEJyYW5jaCIKK21zZ3N0ciAi0J/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSDQstC10YLQutC4IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjYKK21zZ2lkICJSZW5hbWUiCittc2dzdHIgItCf0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzYKK21zZ2lkICJCcmFuY2g6IgorbXNnc3RyICLQktC10YLQutCwOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM5Cittc2dpZCAiTmV3IE5hbWU6IgorbXNnc3RyICLQndC+0LLQvtC1INC90LDQt9Cy0LDQvdC40LU6IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NzUKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCittc2dzdHIgItCj0LrQsNC20LjRgtC1INCy0LXRgtC60YMg0LTQu9GPINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40Y8uIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCS0LXRgtC60LAgwqslc8K7INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMIMKrJXPCuy4gIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTcKK21zZ2lkICJTdGFydGluZy4uLiIKK21zZ3N0ciAi0JfQsNC/0YPRgdC64oCmIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MjYKK21zZ2lkICJGaWxlIEJyb3dzZXIiCittc2dzdHIgItCf0YDQvtGB0LzQvtGC0YAg0YHQv9C40YHQutCwINGE0LDQudC70L7QsiIKKworIzogbGliL2Jyb3dzZXIudGNsOjEyNiBsaWIvYnJvd3Nlci50Y2w6MTQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyAlcy4uLiIKK21zZ3N0ciAi0JfQsNCz0YDRg9C30LrQsCAlc+KApiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE4NworbXNnaWQgIltVcCBUbyBQYXJlbnRdIgorbXNnc3RyICJb0J3QsCDRg9GA0L7QstC10L3RjCDQstGL0YjQtV0iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNjcgbGliL2Jyb3dzZXIudGNsOjI3MworbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0YTQsNC50LvRiyDQstC10YLQutC4IgorCisjOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI4Cittc2dpZCAiQnJvd3NlIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKK21zZ3N0ciAi0JjQt9Cy0LvQtdGH0LXQvdC40LUgJXMg0LjQtyAlcyAiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgorbXNnc3RyICLQutGA0LjRgtC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsDog0L3QtdCy0L7Qt9C80L7QttC90L4g0YDQsNC30YDQtdGI0LjRgtGMICVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQorIzogbGliL3NzaGtleS50Y2w6NTMKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAi0JfQsNC60YDRi9GC0YwiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICLQktC10YLQutCwIMKrJXPCuyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgorbXNnc3RyICLQntGI0LjQsdC60LAg0YHQvtC30LTQsNC90LjRjyDRg9C/0YDQvtGJ0ZHQvdC90L7QuSDQutC+0L3RhNC40LPRg9GA0LDRhtC40LggZ2l0IHB1bGwg0LTQu9GPIMKrJXPCuy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgorIlxuIgorIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCisiQSBtZXJnZSBpcyByZXF1aXJlZC4iCittc2dzdHIgItCS0LXRgtC60LAgwqslc8K7INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi5cblxu0J7QvdCwINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDQv9C10YDQtdC80L7RgtCw0L3QsCDQstC/0LXRgNC10LQg0LogJXMuXG7QotGA0LXQsdGD0LXRgtGB0Y8g0YHQu9C40Y/QvdC40LUuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdlIHN0cmF0ZWd5ICclcycgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgItCd0LXQuNC30LLQtdGB0YLQvdCw0Y8g0YHRgtGA0LDRgtC10LPQuNGPINGB0LvQuNGP0L3QuNGPIMKrJXPCuy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMIMKrJXPCuy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjc0Cittc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgorbXNnc3RyICLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L3QsCDQtNGA0YPQs9C40Lwg0L/RgNC+0YbQtdGB0YHQvtC8LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBIHJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICLQn9C+0YHQu9C10LTQvdC10LUg0L/RgNC+0YfQuNGC0LDQvdC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCINGC0LXQutGD0YnQtdC80YMuXG5cbtChINC80L7QvNC10L3RgtCwINC/0L7RgdC70LXQtNC90LXQuSDQv9GA0L7QstC10YDQutC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LHRi9C7INC40LfQvNC10L3QtdC9INC00YDRg9Cz0L7QuSDQv9GA0L7Qs9GA0LDQvNC80L7QuSBHaXQuINCd0LXQvtCx0YXQvtC00LjQvNC+INC/0LXRgNC10YfQuNGC0LDRgtGMINGA0LXQv9C+0LfQuNGC0L7RgNC40LksINC/0YDQtdC20LTQtSDRh9C10Lwg0YLQtdC60YPRidCw0Y8g0LLQtdGC0LrQsCDQvNC+0LbQtdGCINCx0YvRgtGMINC40LfQvNC10L3QtdC90LAuXG5cbtCt0YLQviDQsdGD0LTQtdGCINGB0LTQtdC70LDQvdC+INGB0LXQudGH0LDRgSDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuC5cbiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjQtSDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAg0LjQtyDCqyVzwrvigKYiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Cittc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCittc2dzdHIgItGE0LDQudC70Ysg0LjQt9Cy0LvQtdGH0LXQvdGLIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFib3J0ZWQgY2hlY2tvdXQgb2YgJyVzJyAoZmlsZSBsZXZlbCBtZXJnaW5nIGlzIHJlcXVpcmVkKS4iCittc2dzdHIgItCf0YDQtdGA0LLQsNC9INC/0LXRgNC10YXQvtC0INC90LAgwqslc8K7ICjRgtGA0LXQsdGD0LXRgtGB0Y8g0YHQu9C40Y/QvdC40LUg0YHQvtC00LXRgNC20LjQvNC+0LPQviDRhNCw0LnQu9C+0LIpIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NworbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgorbXNnc3RyICLQotGA0LXQsdGD0LXRgtGB0Y8g0YHQu9C40Y/QvdC40LUg0YHQvtC00LXRgNC20LDQvdC40Y8g0YTQsNC50LvQvtCyLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAi0JLQtdGC0LrQsCDCqyVzwrsg0L7RgdGC0LDRkdGC0YHRjyDRgtC10LrRg9GJ0LXQuS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NDUyCittc2dpZCAiIgorIllvdSBhcmUgbm8gbG9uZ2VyIG9uIGEgbG9jYWwgYnJhbmNoLlxuIgorIlxuIgorIklmIHlvdSB3YW50ZWQgdG8gYmUgb24gYSBicmFuY2gsIGNyZWF0ZSBvbmUgbm93IHN0YXJ0aW5nIGZyb20gJ1RoaXMgRGV0YWNoZWQgQ2hlY2tvdXQnLiIKK21zZ3N0ciAi0JLRiyDQsdC+0LvQtdC1INC90LUg0L3QsNGF0L7QtNC40YLQtdGB0Ywg0L3QsCDQu9C+0LrQsNC70YzQvdC+0Lkg0LLQtdGC0LrQtS5cblxu0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0YHQvdC+0LLQsCDQstC10YDQvdGD0YLRjNGB0Y8g0Log0LrQsNC60L7QuS3QvdC40LHRg9C00Ywg0LLQtdGC0LrQtSwg0YHQvtC30LTQsNC50YLQtSDQtdGRINGB0LXQudGH0LDRgSwg0L3QsNGH0LjQvdCw0Y8g0YEgwqvQotC10LrRg9GJ0LXQs9C+INC+0YLRgdC+0LXQtNC40L3QtdC90L3QvtCz0L4g0YHQvtGB0YLQvtGP0L3QuNGPwrsuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMyBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgorbXNnc3RyICLQktGL0L/QvtC70L3QtdC9INC/0LXRgNC10YXQvtC0INC90LAgwqslc8K7LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgorbXNnc3RyICLQodCx0YDQvtGBIMKrJXPCuyAg0L3QsCDCqyVzwrsg0L/RgNC40LLQtdC00LXRgiDQuiDQv9C+0YLQtdGA0LUg0YHQu9C10LTRg9GO0YnQuNGFINC60L7QvNC80LjRgtC+0LI6IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU1NworbXNnaWQgIlJlY292ZXJpbmcgbG9zdCBjb21taXRzIG1heSBub3QgYmUgZWFzeS4iCittc2dzdHIgItCS0L7RgdGB0YLQsNC90L7QstC40YLRjCDQv9C+0YLQtdGA0Y/QvdC90YvQtSDQutC+0LzQvNC40YLRiyDQsdGD0LTQtdGCINGB0LvQvtC20L3Qvi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJyVzJz8iCittc2dzdHIgItCh0LHRgNC+0YHQuNGC0Ywgwqslc8K7PyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjcgbGliL21lcmdlLnRjbDoxNjQgbGliL3Rvb2xzX2RsZy50Y2w6MzQzCittc2dpZCAiVmlzdWFsaXplIgorbXNnc3RyICLQndCw0LPQu9GP0LTQvdC+IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYzNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgorIlxuIgorIlRoaXMgd29ya2luZyBkaXJlY3RvcnkgaXMgb25seSBwYXJ0aWFsbHkgc3dpdGNoZWQuICBXZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCB5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRg9GB0YLQsNC90L7QstC40YLRjCDRgtC10LrRg9GJ0YPRjiDQstC10YLQutGDLlxuXG7QktCw0Ygg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMg0L7QsdC90L7QstC70ZHQvSDRgtC+0LvRjNC60L4g0YfQsNGB0YLQuNGH0L3Qvi4g0JHRi9C70Lgg0L7QsdC90L7QstC70LXQvdGLINCy0YHQtSDRhNCw0LnQu9GLINC60YDQvtC80LUg0YHQu9GD0LbQtdCx0L3Ri9GFINGE0LDQudC70L7QsiBHaXQuIFxuXG7QrdGC0L7Qs9C+INC90LUg0LTQvtC70LbQvdC+INCx0YvQu9C+INC/0YDQvtC40LfQvtC50YLQuC4gJXMg0LfQsNCy0LXRgNGI0LDQtdGC0YHRjy4iCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MzkKK21zZ2lkICJTZWxlY3QiCittc2dzdHIgItCS0YvQsdGA0LDRgtGMIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjUzCittc2dpZCAiRm9udCBGYW1pbHkiCittc2dzdHIgItCo0YDQuNGE0YIiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzQKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgItCg0LDQt9C80LXRgCDRiNGA0LjRhNGC0LAiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTEKK21zZ2lkICJGb250IEV4YW1wbGUiCittc2dzdHIgItCf0YDQuNC80LXRgCDRgtC10LrRgdGC0LAiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTAzCittc2dpZCAiIgorIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgorIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCittc2dzdHIgItCt0YLQviDQv9GA0LjQvNC10YAg0YLQtdC60YHRgtCwLlxu0JXRgdC70Lgg0JLQsNC8INC90YDQsNCy0LjRgtGB0Y8g0Y3RgtC+0YIg0YLQtdC60YHRgiwg0Y3RgtC+INC80L7QttC10YIg0LHRi9GC0Ywg0JLQsNGIINGI0YDQuNGE0YIuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjI4Cittc2dpZCAiR2l0IEd1aSIKK21zZ3N0ciAiR2l0IEd1aSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NgorbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0L3QvtCy0YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzCittc2dpZCAiTmV3Li4uIgorbXNnc3RyICLQndC+0LLRi9C54oCmIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MQorbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgItCh0LrQu9C+0L3QuNGA0L7QstCw0YLRjCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDYKK21zZ2lkICJDbG9uZS4uLiIKK21zZ3N0ciAi0JrQu9C+0L3QuNGA0L7QstCw0YLRjOKApiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE2Cittc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICLQktGL0LHRgNCw0YLRjCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTkKK21zZ2lkICJPcGVuLi4uIgorbXNnc3RyICLQntGC0LrRgNGL0YLRjOKApiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzIKK21zZ2lkICJSZWNlbnQgUmVwb3NpdG9yaWVzIgorbXNnc3RyICLQndC10LTQsNCy0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTM4Cittc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCittc2dzdHIgItCe0YLQutGA0YvRgtGMINC/0L7RgdC70LXQtNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMwNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINGA0LXQv9C+0LfQuNGC0L7RgNC40LkgJXM6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5MQorbXNnaWQgIkRpcmVjdG9yeToiCittc2dzdHIgItCa0LDRgtCw0LvQvtCzOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1MgorbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgorbXNnc3RyICLQoNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCa0LDRgtCw0LvQvtCzICclcycg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi0KTQsNC50LsgJyVzJyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NgorbXNnaWQgIkNsb25lIgorbXNnc3RyICLQodC60LvQvtC90LjRgNC+0LLQsNGC0YwiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc5Cittc2dpZCAiU291cmNlIExvY2F0aW9uOiIKK21zZ3N0ciAi0JjRgdGF0L7QtNC90L7QtSDQv9C+0LvQvtC20LXQvdC40LU6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MAorbXNnaWQgIlRhcmdldCBEaXJlY3Rvcnk6IgorbXNnc3RyICLQmtCw0YLQsNC70L7QsyDQvdCw0LfQvdCw0YfQtdC90LjRjzoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAyCittc2dpZCAiQ2xvbmUgVHlwZToiCittc2dzdHIgItCi0LjQvyDQutC70L7QvdCwOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDgKK21zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCittc2dzdHIgItCh0YLQsNC90LTQsNGA0YLQvdGL0LkgKNCR0YvRgdGC0YDRi9C5LCDQv9C+0LvRg9C40LfQsdGL0YLQvtGH0L3Ri9C5LCDCq9C20LXRgdGC0LrQuNC1wrsg0YHRgdGL0LvQutC4KSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTQKK21zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCittc2dzdHIgItCf0L7Qu9C90LDRjyDQutC+0L/QuNGPICjQnNC10LTQu9C10L3QvdGL0LksINGB0L7Qt9C00LDQtdGCINGA0LXQt9C10YDQstC90YPRjiDQutC+0L/QuNGOKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjAKK21zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKK21zZ3N0ciAi0J7QsdGJ0LjQuSAo0KHQsNC80YvQuSDQsdGL0YHRgtGA0YvQuSwg0L3QtSDRgNC10LrQvtC80LXQvdC00YPQtdGC0YHRjywg0LHQtdC3INGA0LXQt9C10YDQstC90L7QuSDQutC+0L/QuNC4KSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MDMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODE5CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICLQmtCw0YLQsNC70L7QsyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdC8OiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTIKK21zZ2lkICJTdGFuZGFyZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgItCh0YLQsNC90LTQsNGA0YLQvdGL0Lkg0LrQu9C+0L0g0LLQvtC30LzQvtC20LXQvSDRgtC+0LvRjNC60L4g0LTQu9GPINC70L7QutCw0LvRjNC90L7Qs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5NgorbXNnaWQgIlNoYXJlZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgItCe0LHRidC40Lkg0LrQu9C+0L0g0LLQvtC30LzQvtC20LXQvSDRgtC+0LvRjNC60L4g0LTQu9GPINC70L7QutCw0LvRjNC90L7Qs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi0J/Rg9GC0YwgJyVzJyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyOAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgorbXNnc3RyICLQndC1INC80L7Qs9GDINGB0LrQvtC90YTQuNCz0YPRgNC40YDQvtCy0LDRgtGMINC40YHRhdC+0LTQvdGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQwCittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0KHRh9C40YLQsNGOINC+0LHRitC10LrRgtGLIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MQorbXNnaWQgImJ1Y2tldHMiCittc2dzdHIgItCx0LvQvtC60LgiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgorbXNnc3RyICLQndC1INC80L7Qs9GDINGB0LrQvtC/0LjRgNC+0LLQsNGC0Ywgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCittc2dzdHIgItCd0LXRh9C10LPQviDQutC70L7QvdC40YDQvtCy0LDRgtGMINGBICVzLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI5Cittc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgorbXNnc3RyICLQndC1INC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDQvdCwINCy0LXRgtCy0YwgwqttYXN0ZXLCuy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE2Cittc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKK21zZ3N0ciAiwqvQltC10YHRgtC60LjQtSDRgdGB0YvQu9C60LjCuyDQvdC10LTQvtGB0YLRg9C/0L3Riy4g0JHRg9C00LXRgiDQuNGB0L/QvtC70YzQt9C+0LLQsNC90L4g0LrQvtC/0LjRgNC+0LLQsNC90LjQtS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBmcm9tICVzIgorbXNnc3RyICLQmtC70L7QvdC40YDQvtCy0LDQvdC40LUgJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzU5Cittc2dpZCAiQ29weWluZyBvYmplY3RzIgorbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0L3QuNC1IG9iamVjdHMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzYwCittc2dpZCAiS2lCIgorbXNnc3RyICLQmtCRIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCittc2dzdHIgItCd0LUg0LzQvtCz0YMg0YHQutC+0L/QuNGA0L7QstCw0YLRjCDQvtCx0YrQtdC60YI6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NAorbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtSDRgdGB0YvQu9C+0Log0L3QsCBvYmplY3RzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NQorbXNnaWQgIm9iamVjdHMiCittc2dzdHIgItC+0LHRitC10LrRgtGLIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgorbXNnc3RyICLQndC1INC80L7Qs9GDINGB0L7Qt9C00LDRgtGMIMKr0LbQtdGB0YLQutGD0Y4g0YHRgdGL0LvQutGDwrsg0L3QsCDQvtCx0YrQtdC60YI6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg1OAorbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LjQt9Cy0LvQtdGH0Ywg0LLQtdGC0LrQuCDQuCDQvtCx0YrQtdC60YLRiy4g0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90LDRjyDQuNC90YTQvtGA0LzQsNGG0LjRjyDQvdCwINC60L7QvdGB0L7Qu9C4LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjkKK21zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LjQt9Cy0LvQtdGH0Ywg0LzQtdGC0LrQuC4g0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90LDRjyDQuNC90YTQvtGA0LzQsNGG0LjRjyDQvdCwINC60L7QvdGB0L7Qu9C4LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTMKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIEhFQUQuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICLQndC1INC80L7Qs9GDINC+0L/RgNC10LTQtdC70LjRgtGMIEhFQUQuINCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdCw0Y8g0LjQvdGE0L7RgNC80LDRhtC40Y8g0L3QsCDQutC+0L3RgdC+0LvQuC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCittc2dzdHIgItCd0LUg0LzQvtCz0YMg0L7Rh9C40YHRgtC40YLRjCAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDgKK21zZ2lkICJDbG9uZSBmYWlsZWQuIgorbXNnc3RyICLQmtC70L7QvdC40YDQvtCy0LDQvdC40LUg0L3QtSDRg9C00LDQu9C+0YHRjC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE1Cittc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgorbXNnc3RyICLQktC10YLQutCwINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOINC90LUg0LHRi9C70LAg0L/QvtC70YPRh9C10L3QsC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgorbXNnc3RyICLQndC1INC80L7Qs9GDINGA0LDRgdC/0L7Qt9C90LDRgtGMICVzINC60LDQuiDQutC+0LzQvNC40YIuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOAorbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLQodC+0LfQtNCw0Y4g0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM5IGxpYi9pbmRleC50Y2w6NjcgbGliL2luZGV4LnRjbDoxMzAKKyM6IGxpYi9pbmRleC50Y2w6MTk4Cittc2dpZCAiZmlsZXMiCittc2dzdHIgItGE0LDQudC70L7QsiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjgKK21zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINC90LDRh9Cw0LvRjNC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUg0YTQsNC50LvQvtCyINGA0LXQv9C+0LfQuNGC0L7RgNC40Y8uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTEKK21zZ2lkICJPcGVuIgorbXNnc3RyICLQntGC0LrRgNGL0YLRjCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDIxCittc2dpZCAiUmVwb3NpdG9yeToiCittc2dzdHIgItCg0LXQv9C+0LfQuNGC0L7RgNC40Lk6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRgNC10L/QvtC30LjRgtC+0YDQuNC5ICVzOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjUzCittc2dpZCAiVGhpcyBEZXRhY2hlZCBDaGVja291dCIKK21zZ3N0ciAi0KLQtdC60YPRidC10LUg0L7RgtGB0L7QtdC00LjQvdC10L3QvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKK21zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKK21zZ3N0ciAi0JLRi9GA0LDQttC10L3QuNC1INC00LvRjyDQvtC/0YDQtdC00LXQu9C10L3QuNGPINCy0LXRgNGB0LjQuDoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NAorbXNnaWQgIkxvY2FsIEJyYW5jaCIKK21zZ3N0ciAi0JvQvtC60LDQu9GM0L3QsNGPINCy0LXRgtC60LA6IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzkKK21zZ2lkICJUcmFja2luZyBCcmFuY2giCittc2dzdHIgItCe0YLRgdC70LXQttC40LLQsNC10LzQsNGPINCy0LXRgtC60LAiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo4NCBsaWIvY2hvb3NlX3Jldi50Y2w6NTM4Cittc2dpZCAiVGFnIgorbXNnc3RyICLQnNC10YLQutCwIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXZpc2lvbjogJXMiCittc2dzdHIgItCd0LXQstC10YDQvdCw0Y8g0LLQtdGA0YHQuNGPOiAlcyIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjMzOAorbXNnaWQgIk5vIHJldmlzaW9uIHNlbGVjdGVkLiIKK21zZ3N0ciAi0JLQtdGA0YHQuNGPINC90LUg0YPQutCw0LfQsNC90LAuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzQ2Cittc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCittc2dzdHIgItCf0YPRgdGC0L7QtSDQstGL0YDQsNC20LXQvdC40LUg0LTQu9GPINC+0L/RgNC10LTQtdC70LXQvdC40Y8g0LLQtdGA0YHQuNC4LiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjUzMQorbXNnaWQgIlVwZGF0ZWQiCittc2dzdHIgItCe0LHQvdC+0LLQu9C10L3QviIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjU1OQorbXNnaWQgIlVSTCIKK21zZ3N0ciAi0KHRgdGL0LvQutCwIgorCisjOiBsaWIvY29tbWl0LnRjbDo5Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCisiXG4iCisiWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzIHRvIGFtZW5kLlxuIgorbXNnc3RyICLQntGC0YHRg9GC0YHRgtCy0YPQtdGCINC60L7QvNC80LjRgtGLINC00LvRjyDQuNGB0L/RgNCw0LLQu9C10L3QuNGPLlxuXG7QktGLINGB0L7Qt9C00LDQtdGC0LUg0L3QsNGH0LDQu9GM0L3Ri9C5INC60L7QvNC80LjRgiwg0LfQtNC10YHRjCDQtdGJ0LUg0L3QtdGH0LXQs9C+INC40YHQv9GA0LDQstC70Y/RgtGMLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxOAorbXNnaWQgIiIKKyJDYW5ub3QgYW1lbmQgd2hpbGUgbWVyZ2luZy5cbiIKKyJcbiIKKyJZb3UgYXJlIGN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgdGhhdCBoYXMgbm90IGJlZW4gZnVsbHkgY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlIGN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC40YHQv9GA0LDQstC40YLRjCDQutC+0LzQvNC40YIg0LLQviDQstGA0LXQvNGPINGB0LvQuNGP0L3QuNGPLlxuXG7QotC10LrRg9GJ0LXQtSDRgdC70LjRj9C90LjQtSDQvdC1INC30LDQstC10YDRiNC10L3Qvi4g0J3QtdCy0L7Qt9C80L7QttC90L4g0LjRgdC/0YDQsNCy0LjRgtGMINC/0YDQtdC00YvQtNGD0LjQuSDQutC+0LzQvNC40YIsINC90LUg0L/RgNC10YDRi9Cy0LDRjyDRjdGC0YMg0L7Qv9C10YDQsNGG0LjRji5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6NDgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQv9GA0Lgg0LfQsNCz0YDRg9C30LrQtSDQtNCw0L3QvdGL0YUg0LTQu9GPINC40YHQv9GA0LDQstC70LXQvdC40Y8g0LrQvtC80LzQuNGC0LA6IgorCisjOiBsaWIvY29tbWl0LnRjbDo3NQorbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC/0L7Qu9GD0YfQuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L7QsSDQsNCy0YLQvtGA0YHRgtCy0LU6IgorCisjOiBsaWIvY29tbWl0LnRjbDo4MAorbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCittc2dzdHIgItCd0LXQtNC+0L/Rg9GB0YLQuNC80YvQuSBHSVRfQ09NTUlUVEVSX0lERU5UOiIKKworIzogbGliL2NvbW1pdC50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCittc2dzdHIgItC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6IFRjbCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDQutC+0LTQuNGA0L7QstC60YMgwqslc8K7LiIKKworIzogbGliL2NvbW1pdC50Y2w6MTQ5Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSByZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICLQn9C+0YHQu9C10LTQvdC10LUg0L/RgNC+0YfQuNGC0LDQvdC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCINGC0LXQutGD0YnQtdC80YMuXG5cbtChINC80L7QvNC10L3RgtCwINC/0L7RgdC70LXQtNC90LXQuSDQv9GA0L7QstC10YDQutC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LHRi9C7INC40LfQvNC10L3QtdC9INC00YDRg9Cz0L7QuSDQv9GA0L7Qs9GA0LDQvNC80L7QuSBHaXQuINCd0LXQvtCx0YXQvtC00LjQvNC+INC/0LXRgNC10YfQuNGC0LDRgtGMINGA0LXQv9C+0LfQuNGC0L7RgNC40LksINC/0YDQtdC20LTQtSDRh9C10Lwg0LjQt9C80LXQvdGP0YLRjCDRgtC10LrRg9GJ0YPRjiDQstC10YLQstGMLiBcblxu0K3RgtC+INCx0YPQtNC10YIg0YHQtNC10LvQsNC90L4g0YHQtdC50YfQsNGBINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4LlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIHN0YWdlIHRoZSBmaWxlIGJlZm9yZSBjb21taXR0aW5nLlxuIgorbXNnc3RyICLQndC10LvRjNC30Y8g0LLRi9C/0L7Qu9C90LjRgtGMINC60L7QvNC80LjRgiDRgSDQvdC10LfQsNCy0LXRgNGI0ZHQvdC90L7QuSDQvtC/0LXRgNCw0YbQuNC10Lkg0YHQu9C40Y/QvdC40Y8uXG5cbtCU0LvRjyDRhNCw0LnQu9CwICVzINCy0L7Qt9C90LjQuiDQutC+0L3RhNC70LjQutGCINGB0LvQuNGP0L3QuNGPLiDQoNCw0LfRgNC10YjQuNGC0LUg0LrQvtC90YTQu9C40LrRgiDQuCDQtNC+0LHQsNCy0YzRgtC1INC40YUg0LIg0LjQvdC00LXQutGBINC/0LXRgNC10LQg0LLRi9C/0L7Qu9C90LXQvdC40LXQvCDQutC+0LzQvNC40YLQsC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGNhbm5vdCBiZSBjb21taXR0ZWQgYnkgdGhpcyBwcm9ncmFtLlxuIgorbXNnc3RyICLQntCx0L3QsNGA0YPQttC10L3QviDQvdC10LjQt9Cy0LXRgdGC0L3QvtC1INGB0L7RgdGC0L7Rj9C90LjQtSDRhNCw0LnQu9CwICVzLlxuXG7QpNCw0LnQuyAlcyDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0LfQsNC60L7QvNC80LjRh9C10L0g0Y3RgtC+0Lkg0L/RgNC+0LPRgNCw0LzQvNC+0LkuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4OAorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKKyJcbiIKKyJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorbXNnc3RyICLQntGC0YHRg9GC0YHRgtCy0YPRjtGCINC40LfQvNC10L3QtdC90LjRjyDQtNC70Y8g0YHQvtGF0YDQsNC90LXQvdC40Y8uXG5cbtCU0L7QsdCw0LLRjNGC0LUg0LIg0LjQvdC00LXQutGBINGF0L7RgtGPINCx0Ysg0L7QtNC40L0g0YTQsNC50Lsg0L/QtdGA0LXQtCDQstGL0L/QvtC70L3QtdC90LjQtdC8INC60L7QvNC80LjRgtCwLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMDMKK21zZ2lkICIiCisiUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCisiXG4iCisiLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgorIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCisiLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgorbXNnc3RyICLQo9C60LDQttC40YLQtSDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAuXG5cbtCg0LXQutC+0LzQtdC90LTRg9C10YLRgdGPINGB0LvQtdC00YPRjtGJ0LjQuSDRhNC+0YDQvNCw0YIg0YHQvtC+0LHRidC10L3QuNGPOlxuXG4tINCyINC/0LXRgNCy0L7QuSDRgdGC0YDQvtC60LUg0LrRgNCw0YLQutC+0LUg0L7Qv9C40YHQsNC90LjQtSDRgdC00LXQu9Cw0L3QvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5XG4tINCy0YLQvtGA0LDRjyDRgdGC0YDQvtC60LAg0L/Rg9GB0YLQsNGPXG4tINCyINC+0YHRgtCw0LLRiNC40YXRgdGPINGB0YLRgNC+0LrQsNGFINC+0L/QuNGI0LjRgtC1LCDRh9GC0L4g0LTQsNGO0YIg0LLQsNGI0Lgg0LjQt9C80LXQvdC10L3QuNGPXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjIzNAorbXNnaWQgIkNhbGxpbmcgcHJlLWNvbW1pdCBob29rLi4uIgorbXNnc3RyICLQktGL0LfQvtCyINC/0LXRgNC10YXQstCw0YLRh9C40LrQsCBwcmUtY29tbWl04oCmIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNDkKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKK21zZ3N0ciAi0JrQvtC80LzQuNGCINC/0YDQtdGA0LLQsNC9INC/0LXRgNC10LLQsNGC0YfQuNC60L7QvCBwcmUtY29tbWl0LiIKKworIzogbGliL2NvbW1pdC50Y2w6MjcyCittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgItCS0YvQt9C+0LIg0L/QtdGA0LXRhdCy0LDRgtGH0LjQutCwIGNvbW1pdC1tc2figKYiCisKKyM6IGxpYi9jb21taXQudGNsOjI4NworbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgorbXNnc3RyICLQmtC+0LzQvNC40YIg0L/RgNC10YDQstCw0L0g0L/QtdGA0LXQstCw0YLRh9C40LrQvtC8IGNvbW1pdC1tc2ciCisKKyM6IGxpYi9jb21taXQudGNsOjMwMAorbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKK21zZ3N0ciAi0JrQvtC80LzQuNGCINC40LfQvNC10L3QtdC90LjQueKApiIKKworIzogbGliL2NvbW1pdC50Y2w6MzE2Cittc2dpZCAid3JpdGUtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNC80LAgd3JpdGUtdHJlZSDQt9Cw0LLQtdGA0YjQuNC70LDRgdGMINGBINC+0YjQuNCx0LrQvtC5OiIKKworIzogbGliL2NvbW1pdC50Y2w6MzE3IGxpYi9jb21taXQudGNsOjM2MSBsaWIvY29tbWl0LnRjbDozODIKK21zZ2lkICJDb21taXQgZmFpbGVkLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LrQvtC80LzQuNGC0LjRgtGMINC40LfQvNC10L3QtdC90LjRjy4iCisKKyM6IGxpYi9jb21taXQudGNsOjMzNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCittc2dzdHIgItCa0L7QvNC80LjRgiAlcyDQv9C+0YXQvtC20LUg0L/QvtCy0YDQtdC20LTQtdC9IgorCisjOiBsaWIvY29tbWl0LnRjbDozMzkKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgItCd0LXRgiDQuNC30LzQtdC90LXQvdC40Y8g0LTQu9GPINC60L7QvNC80LjRgtCwLlxuXG7QndC4INC+0LTQuNC9INGE0LDQudC7INC90LUg0LHRi9C7INC40LfQvNC10L3QtdC9INC4INC90LUg0LHRi9C70L4g0YHQu9C40Y/QvdC40Y8uXG5cbtCh0LXQudGH0LDRgSDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDQt9Cw0L/Rg9GB0YLQuNGC0YHRjyDQv9C10YDQtdGH0LjRgtGL0LLQsNC90LjQtSDRgNC10L/QvtC30LjRgtC+0YDQuNGPLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDozNDYKK21zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCittc2dzdHIgItCd0LXRgiDQuNC30LzQtdC90LXQvdC40Y8g0LTQu9GPINC60L7QvNC80LjRgtCwLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzYwCittc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwIGNvbW1pdC10cmVlINC30LDQstC10YDRiNC40LvQsNGB0Ywg0YEg0L7RiNC40LHQutC+0Lk6IgorCisjOiBsaWIvY29tbWl0LnRjbDozODEKK21zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCB1cGRhdGUtcmVmINC30LDQstC10YDRiNC40LvQsNGB0Ywg0YEg0L7RiNC40LHQutC+0Lk6IgorCisjOiBsaWIvY29tbWl0LnRjbDo0NjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCittc2dzdHIgItCh0L7Qt9C00LDQvSDQutC+0LzQvNC40YIgJXM6ICVzICIKKworIzogbGliL2NvbnNvbGUudGNsOjU5Cittc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAi0JIg0L/RgNC+0YbQtdGB0YHQteKApiDQv9C+0LbQsNC70YPQudGB0YLQsCwg0LbQtNC40YLQteKApiIKKworIzogbGliL2NvbnNvbGUudGNsOjE4NgorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgItCf0YDQvtGG0LXRgdGBINGD0YHQv9C10YjQvdC+INC30LDQstC10YDRiNC10L0iCisKKyM6IGxpYi9jb25zb2xlLnRjbDoyMDAKK21zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCittc2dzdHIgItCe0YjQuNCx0LrQsDog0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywg0LrQvtC80LDQvdC00YMiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDMKK21zZ2lkICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAi0JrQvtC70LjRh9C10YHRgtCy0L4g0L3QtdGB0LLRj9C30LDQvdC90YvRhSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ0Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCittc2dzdHIgItCe0LHRitC10Lwg0LTQuNGB0LrQvtCy0L7Qs9C+INC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQsCwg0LfQsNC90Y/RgtGL0Lkg0L3QtdGB0LLRj9C30LDQvdC90YvQvNC4INC+0LHRitC10LrRgtCw0LzQuCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NQorbXNnaWQgIk51bWJlciBvZiBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAi0JrQvtC70LjRh9C10YHRgtCy0L4g0YPQv9Cw0LrQvtCy0LDQvdC90YvRhSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgorbXNnc3RyICLQmtC+0LvQuNGH0LXRgdGC0LLQviBwYWNrLdGE0LDQudC70L7QsiIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NworbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAi0J7QsdGK0LXQvCDQtNC40YHQutC+0LLQvtCz0L4g0L/RgNC+0YHRgtGA0LDQvdGB0YLQstCwLCDQt9Cw0L3Rj9GC0YvQuSDRg9C/0LDQutC+0LLQsNC90L3Ri9C80Lgg0L7QsdGK0LXQutGC0LDQvNC4IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ4Cittc2dpZCAiUGFja2VkIG9iamVjdHMgd2FpdGluZyBmb3IgcHJ1bmluZyIKK21zZ3N0ciAi0J3QtdGB0LLRj9C30LDQvdC90YvQtSDQvtCx0YrQtdC60YLRiywg0LrQvtGC0L7RgNGL0LUg0LzQvtC20L3QviDRg9C00LDQu9C40YLRjCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OQorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgItCc0YPRgdC+0YAiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NzIKK21zZ2lkICJDb21wcmVzc2luZyB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLQodC20LDRgtC40LUg0LHQsNC30Ysg0L7QsdGK0LXQutGC0L7QsiIKKworIzogbGliL2RhdGFiYXNlLnRjbDo4MworbXNnaWQgIlZlcmlmeWluZyB0aGUgb2JqZWN0IGRhdGFiYXNlIHdpdGggZnNjay1vYmplY3RzIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINCx0LDQt9GLINC+0LHRitC10LrRgtC+0LIg0L/RgNC4INC/0L7QvNC+0YnQuCBmc2NrIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjEwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCisiXG4iCisiVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyB0aGUgZGF0YWJhc2UuXG4iCisiXG4iCisiQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCittc2dzdHIgItCt0YLQvtGCINGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0YHQtdC50YfQsNGBINGB0L7QtNC10YDQttC40YIg0L/RgNC40LzQtdGA0L3QviAlaSDRgdCy0L7QsdC+0LTQvdGL0YUg0L7QsdGK0LXQutGC0L7QslxuXG7QlNC70Y8g0LvRg9GH0YjQtdC5INC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLQuCDRgNC10LrQvtC80LXQvdC00YPQtdGC0YHRjyDRgdC20LDRgtGMINCx0LDQt9GDINC00LDQvdC90YvRhS5cblxu0KHQttCw0YLRjCDQsdCw0LfRgyDQtNCw0L3QvdGL0YUg0YHQtdC50YfQsNGBPyIKKworIzogbGliL2RhdGUudGNsOjI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINC00LDRgtCwINCyINGA0LXQv9C+0LfQuNGC0L7RgNC40Lg6ICVzIgorCisjOiBsaWIvZGlmZi50Y2w6NjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCisiXG4iCisiJXMgaGFzIG5vIGNoYW5nZXMuXG4iCisiXG4iCisiVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgdGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlIHRoZSBzYW1lIHN0YXRlLiIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNC5INC90LUg0L7QsdC90LDRgNGD0LbQtdC90L4uXG5cbtCyICVzINC+0YLRgdGD0YLRgdGC0LLRg9GO0YIg0LjQt9C80LXQvdC10L3QuNGPLlxuXG7QlNCw0YLQsCDQuNC30LzQtdC90LXQvdC40Y8g0YTQsNC50LvQsCDQsdGL0LvQsCDQvtCx0L3QvtCy0LvQtdC90LAg0LTRgNGD0LPQvtC5INC/0YDQvtCz0YDQsNC80LzQvtC5LCDQvdC+INGB0L7QtNC10YDQttC40LzQvtC1INGE0LDQudC70LAg0L7RgdGC0LDQu9C+0YHRjCDQv9GA0LXQttC90LjQvC5cblxu0KHQtdC50YfQsNGBINCx0YPQtNC10YIg0LfQsNC/0YPRidC10L3QviDQv9C10YDQtdGH0LjRgtGL0LLQsNC90LjQtSDRgNC10L/QvtC30LjRgtC+0YDQuNGPLCDRh9GC0L7QsdGLINC90LDQudGC0Lgg0L/QvtC00L7QsdC90YvQtSDRhNCw0LnQu9GLLiIKKworIzogbGliL2RpZmYudGNsOjEwNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKK21zZ3N0ciAi0JfQsNCz0YDRg9C30LrQsCDQuNC30LzQtdC90LXQvdC40LkgJXPigKYiCisKKyM6IGxpYi9kaWZmLnRjbDoxMjUKK21zZ2lkICIiCisiTE9DQUw6IGRlbGV0ZWRcbiIKKyJSRU1PVEU6XG4iCittc2dzdHIgItCb0J7QmtCQ0JvQrNCd0J46INGD0LTQsNC70ZHQvVxu0JLQndCV0KjQndCY0Jk6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMzAKK21zZ2lkICIiCisiUkVNT1RFOiBkZWxldGVkXG4iCisiTE9DQUw6XG4iCittc2dzdHIgItCS0J3QldCo0J3QmNCZOiDRg9C00LDQu9GR0L1cbtCb0J7QmtCQ0JvQrNCd0J46XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMzcKK21zZ2lkICJMT0NBTDpcbiIKK21zZ3N0ciAi0JvQntCa0JDQm9Cs0J3QnjpcbiIKKworIzogbGliL2RpZmYudGNsOjE0MAorbXNnaWQgIlJFTU9URTpcbiIKK21zZ3N0ciAi0JLQndCV0KjQndCY0Jk6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoyMDIgbGliL2RpZmYudGNsOjMxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgorbXNnc3RyICLQndC1INC80L7Qs9GDINC/0L7QutCw0LfQsNGC0YwgJXMiCisKKyM6IGxpYi9kaWZmLnRjbDoyMDMKK21zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0LfQsNCz0YDRg9C30LrQuCDRhNCw0LnQu9CwOiIKKworIzogbGliL2RpZmYudGNsOjIxMAorbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKK21zZ3N0ciAi0KDQtdC/0L7Qt9C40YLQvtGA0LjQuSBHaXQgKNC/0L7QtNC/0YDQvtC10LrRgikiCisKKyM6IGxpYi9kaWZmLnRjbDoyMjIKK21zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCittc2dzdHIgIiog0JTQstC+0LjRh9C90YvQuSDRhNCw0LnQuyAo0YHQvtC00LXRgNC20LjQvNC+0LUg0L3QtSDQv9C+0LrQsNC30LDQvdC+KSIKKworIzogbGliL2RpZmYudGNsOjIyNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgorIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgorbXNnc3RyICIqINCg0LDQt9C80LXRgCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNC+0LPQviDRhNCw0LnQu9CwICVkINCx0LDQudGCLlxuKiDQn9C+0LrQsNC30LDQvdC+INC/0LXRgNCy0YvRhSAlZCDQsdCw0LnRgi5cbiIKKworIzogbGliL2RpZmYudGNsOjIzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIqIFVudHJhY2tlZCBmaWxlIGNsaXBwZWQgaGVyZSBieSAlcy5cbiIKKyIqIFRvIHNlZSB0aGUgZW50aXJlIGZpbGUsIHVzZSBhbiBleHRlcm5hbCBlZGl0b3IuXG4iCittc2dzdHIgIlxuKiDQndC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0Lkg0YTQsNC50Lsg0L7QsdGA0LXQt9Cw0L06ICVzLlxuKiDQp9GC0L7QsdGLINGD0LLQuNC00LXRgtGMINCy0LXRgdGMINGE0LDQudC7LCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1INCy0L3QtdGI0L3QuNC5INGA0LXQtNCw0LrRgtC+0YAuXG4iCisKKyM6IGxpYi9kaWZmLnRjbDo0ODIKK21zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNGB0LrQu9GO0YfQuNGC0Ywg0LLRi9Cx0YDQsNC90L3Rg9GOINGH0LDRgdGC0YwuIgorCisjOiBsaWIvZGlmZi50Y2w6NDg5Cittc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDRgtGMINCy0YvQsdGA0LDQvdC90YvQuSDQsdC70L7QuiDQuNC30LzQtdC90LXQvdC40LkuIgorCisjOiBsaWIvZGlmZi50Y2w6NTY4Cittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LjRgdC60LvRjtGH0LjRgtGMINCy0YvQsdGA0LDQvdC90YPRjiDRgdGC0YDQvtC60YMuIgorCisjOiBsaWIvZGlmZi50Y2w6NTc2Cittc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDRgtGMINCy0YvQsdGA0LDQvdC90YPRjiDRgdGC0YDQvtC60YMuIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0MworbXNnaWQgIkRlZmF1bHQiCittc2dzdHIgItCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN5c3RlbSAoJXMpIgorbXNnc3RyICLQodC40YHRgtC10LzQvdCw0Y8gKCVzKSIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NTkgbGliL2VuY29kaW5nLnRjbDo0NjUKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAi0JTRgNGD0LPQsNGPIgorCisjOiBsaWIvZXJyb3IudGNsOjIwIGxpYi9lcnJvci50Y2w6MTE0Cittc2dpZCAiZXJyb3IiCittc2dzdHIgItC+0YjQuNCx0LrQsCIKKworIzogbGliL2Vycm9yLnRjbDozNgorbXNnaWQgIndhcm5pbmciCittc2dzdHIgItC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LUiCisKKyM6IGxpYi9lcnJvci50Y2w6OTQKK21zZ2lkICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIgorbXNnc3RyICLQn9C10YDQtdC0INC60L7QvNC80LjRgtC+0LwsINC40YHQv9GA0LDQstGM0YLQtSDQstGL0YjQtdGD0LrQsNC30LDQvdC90YvQtSDQvtGI0LjQsdC60LguIgorCisjOiBsaWIvaW5kZXgudGNsOjYKK21zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjCDQuNC90LTQtdC60YEiCisKKyM6IGxpYi9pbmRleC50Y2w6MTUKK21zZ2lkICJJbmRleCBFcnJvciIKK21zZ3N0ciAi0J7RiNC40LHQutCwINCyINC40L3QtNC10LrRgdC1IgorCisjOiBsaWIvaW5kZXgudGNsOjE3Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgorInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDQuNC90LTQtdC60YEgR2l0LiDQodC+0YHRgtC+0Y/QvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQsdGD0LTQtdGCINC/0LXRgNC10YfQuNGC0LDQvdC+INCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4LiIKKworIzogbGliL2luZGV4LnRjbDoyOAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICLQn9GA0L7QtNC+0LvQttC40YLRjCIKKworIzogbGliL2luZGV4LnRjbDozMQorbXNnaWQgIlVubG9jayBJbmRleCIKK21zZ3N0ciAi0KDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjCDQuNC90LTQtdC60YEiCisKKyM6IGxpYi9pbmRleC50Y2w6Mjg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdGFnaW5nICVzIGZyb20gY29tbWl0IgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1ICVzINC40Lcg0LjQvdC00LXQutGB0LAiCisKKyM6IGxpYi9pbmRleC50Y2w6MzI4Cittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAi0JPQvtGC0L7QsiDQtNC70Y8g0LrQvtC80LzQuNGC0LAuIgorCisjOiBsaWIvaW5kZXgudGNsOjM0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAi0JTQvtCx0LDQstC70LXQvdC40LUgJXPigKYiCisKKyM6IGxpYi9pbmRleC50Y2w6Mzk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCittc2dzdHIgItCe0LHRgNCw0YLQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINCyINGE0LDQudC70LUgJXM/IgorCisjOiBsaWIvaW5kZXgudGNsOjQwMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKK21zZ3N0ciAi0J7QsdGA0LDRgtC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0LIgJWkg0YTQsNC50LvQtSgt0LDRhSk/IgorCisjOiBsaWIvaW5kZXgudGNsOjQwOAorbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKK21zZ3N0ciAi0JvRjtCx0YvQtSDQvdC10L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjywg0LHRg9C00YPRgiDQv9C+0YLQtdGA0Y/QvdGLINC/0YDQuCDQvtCx0YDQsNGJ0LXQvdC40Lgg0LjQt9C80LXQvdC10L3QuNC5LiIKKworIzogbGliL2luZGV4LnRjbDo0MTEKK21zZ2lkICJEbyBOb3RoaW5nIgorbXNnc3RyICLQndC40YfQtdCz0L4g0L3QtSDQtNC10LvQsNGC0YwiCisKKyM6IGxpYi9pbmRleC50Y2w6NDI5Cittc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgorbXNnc3RyICLQntCx0YDQsNGJ0LXQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5INCyINCy0YvQsdGA0LDQvdC90YvRhSDRhNCw0LnQu9Cw0YUiCisKKyM6IGxpYi9pbmRleC50Y2w6NDMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nICVzIgorbXNnc3RyICLQntCx0YDQsNGJ0LXQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5INCyICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzCittc2dpZCAiIgorIkNhbm5vdCBtZXJnZSB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGFueSB0eXBlIG9mIG1lcmdlLlxuIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQstGL0L/QvtC70L3QuNGC0Ywg0YHQu9C40Y/QvdC40LUg0LLQviDQstGA0LXQvNGPINC40YHQv9GA0LDQstC70LXQvdC40Y8uXG5cbtCX0LDQstC10YDRiNC40YLQtSDQuNGB0L/RgNCw0LLQu9C10L3QuNC1INC00LDQvdC90L7Qs9C+INC60L7QvNC80LjRgtCwINC/0LXRgNC10LQg0LLRi9C/0L7Qu9C90LXQvdC40LXQvCDQvtC/0LXRgNCw0YbQuNC4INGB0LvQuNGP0L3QuNGPLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSByZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGEgbWVyZ2UgY2FuIGJlIHBlcmZvcm1lZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAi0J/QvtGB0LvQtdC00L3QtdC1INC/0YDQvtGH0LjRgtCw0L3QvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0L3QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDRgtC10LrRg9GJ0LXQvNGDLlxuXG7QoSDQvNC+0LzQtdC90YLQsCDQv9C+0YHQu9C10LTQvdC10Lkg0L/RgNC+0LLQtdGA0LrQuCDRgNC10L/QvtC30LjRgtC+0YDQuNC5INCx0YvQuyDQuNC30LzQtdC90LXQvSDQtNGA0YPQs9C+0Lkg0L/RgNC+0LPRgNCw0LzQvNC+0LkgR2l0LiDQndC10L7QsdGF0L7QtNC40LzQviDQv9C10YDQtdGH0LjRgtCw0YLRjCDRgNC10L/QvtC30LjRgtC+0YDQuNC5LCDQv9GA0LXQttC00LUg0YfQtdC8INGB0LvQuNGP0L3QuNC1INC80L7QttC10YIg0LHRi9GC0Ywg0YHQtNC10LvQsNC90L4uXG5cbtCt0YLQviDQsdGD0LTQtdGCINGB0LTQtdC70LDQvdC+INGB0LXQudGH0LDRgSDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuC5cbiIKKworIzogbGliL21lcmdlLnRjbDo0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjb25mbGljdGVkIG1lcmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy5cbiIKKyJcbiIKKyJZb3UgbXVzdCByZXNvbHZlIHRoZW0sIHN0YWdlIHRoZSBmaWxlLCBhbmQgY29tbWl0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50IG1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKK21zZ3N0ciAi0J/RgNC10LTRi9C00YPRidC10LUg0YHQu9C40Y/QvdC40LUg0L3QtSDQt9Cw0LLQtdGA0YjQtdC90L4g0LjQty3Qt9CwINC60L7QvdGE0LvQuNC60YLQsC5cblxu0JTQu9GPINGE0LDQudC70LAgJXMg0LLQvtC30L3QuNC6INC60L7QvdGE0LvQuNC60YIg0YHQu9C40Y/QvdC40Y8uXG5cbtCg0LDQt9GA0LXRiNC40YLQtSDQutC+0L3RhNC70LjQutGCLCDQtNC+0LHQsNCy0YzRgtC1INGE0LDQudC7INCyINC40L3QtNC10LrRgSDQuCDQt9Cw0LrQvtC80LzQuNGC0YzRgtC1LiDQotC+0LvRjNC60L4g0L/QvtGB0LvQtSDRjdGC0L7Qs9C+INC80L7QttC90L4g0L3QsNGH0LDRgtGMINGB0LvQtdC00YPRjtGJ0LXQtSDRgdC70LjRj9C90LjQtS5cbiIKKworIzogbGliL21lcmdlLnRjbDo1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBpcyBtb2RpZmllZC5cbiIKKyJcbiIKKyJZb3Ugc2hvdWxkIGNvbXBsZXRlIHRoZSBjdXJyZW50IGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYSBtZXJnZS4gIERvaW5nIHNvIHdpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKK21zZ3N0ciAi0JLRiyDQvdCw0YXQvtC00LjRgtC10YHRjCDQsiDQv9GA0L7RhtC10YHRgdC1INC40LfQvNC10L3QtdC90LjQuS5cblxu0KTQsNC50LsgJXMg0LjQt9C80LXQvdGR0L0uXG5cbtCS0Ysg0LTQvtC70LbQvdGLINC30LDQstC10YDRiNC40YLRjCDRgtC10LrRg9GJ0LjQuSDQutC+0LzQvNC40YIg0L/QtdGA0LXQtCDQvdCw0YfQsNC70L7QvCDRgdC70LjRj9C90LjRjy4g0JIg0YHQu9GD0YfQsNC1INC90LXQvtCx0YXQvtC00LjQvNC+0YHRgtC4LCDRjdGC0L4g0L/QvtC30LLQvtC70LjRgiDQv9GA0LXRgNCy0LDRgtGMINC+0L/QtdGA0LDRhtC40Y4g0YHQu9C40Y/QvdC40Y8uXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiVzINC40LcgJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyBhbmQgJXMuLi4iCittc2dzdHIgItCh0LvQuNGP0L3QuNC1ICVzINC4ICVz4oCmIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMQorbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgorbXNnc3RyICLQodC70LjRj9C90LjQtSDRg9GB0L/QtdGI0L3QviDQt9Cw0LLQtdGA0YjQtdC90L4uIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMworbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQstC10YDRiNC40YLRjCDRgdC70LjRj9C90LjQtS4g0KLRgNC10LHRg9C10YLRgdGPINGA0LDQt9GA0LXRiNC10L3QuNC1INC60L7QvdGE0LvQuNC60YLQsC4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTU4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2UgSW50byAlcyIKK21zZ3N0ciAi0KHQu9C40Y/QvdC40LUg0YEgJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTc3Cittc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCittc2dzdHIgItCS0LXRgNGB0LjRjywg0YEg0LrQvtGC0L7RgNC+0Lkg0L/RgNC+0LLQtdGB0YLQuCDRgdC70LjRj9C90LjQtSIKKworIzogbGliL21lcmdlLnRjbDoyMTIKK21zZ2lkICIiCisiQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0L/RgNC10YDQstCw0YLRjCDQuNGB0L/RgNCw0LLQu9C10L3QuNC1LlxuXG7Ql9Cw0LLQtdGA0YjQuNGC0LUg0YLQtdC60YPRidC10LUg0LjRgdC/0YDQsNCy0LvQtdC90LjQtSDQutC+0LzQvNC40YLQsC5cbiIKKworIzogbGliL21lcmdlLnRjbDoyMjIKK21zZ2lkICIiCisiQWJvcnQgbWVyZ2U/XG4iCisiXG4iCisiQWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2Ugd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCBhYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZT8iCittc2dzdHIgItCf0YDQtdGA0LLQsNGC0Ywg0L7Qv9C10YDQsNGG0LjRjiDRgdC70LjRj9C90LjRjz9cblxu0J/RgNC10YDRi9Cy0LDQvdC40LUg0YLQtdC60YPRidC10LPQviDRgdC70LjRj9C90LjRjyDQv9GA0LjQstC10LTQtdGCINC6INC/0L7RgtC10YDQtSAq0JLQodCV0KUqINC90LXRgdC+0YXRgNCw0L3QtdC90L3Ri9GFINC40LfQvNC10L3QtdC90LjQuS5cblxu0J/RgNC+0LTQvtC70LbQuNGC0Yw/IgorCisjOiBsaWIvbWVyZ2UudGNsOjIyOAorbXNnaWQgIiIKKyJSZXNldCBjaGFuZ2VzP1xuIgorIlxuIgorIlJlc2V0dGluZyB0aGUgY2hhbmdlcyB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKK21zZ3N0ciAi0KHQsdGA0L7RgdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8/XG5cbtCh0LHRgNC+0YEg0LjQt9C80LXQvdC10L3QuNC5INC/0YDQuNCy0LXQtNC10YIg0Log0L/QvtGC0LXRgNC1ICrQktCh0JXQpSog0L3QtdGB0L7RhdGA0LDQvdC10L3QvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5LlxuXG7Qn9GA0L7QtNC+0LvQttC40YLRjD8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiQWJvcnRpbmciCittc2dzdHIgItCf0YDQtdGA0YvQstCw0Y4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiZmlsZXMgcmVzZXQiCittc2dzdHIgItC40LfQvNC10L3QtdC90LjRjyDQsiDRhNCw0LnQu9Cw0YUg0L7RgtC80LXQvdC10L3RiyIKKworIzogbGliL21lcmdlLnRjbDoyNjcKK21zZ2lkICJBYm9ydCBmYWlsZWQuIgorbXNnc3RyICLQn9GA0LXRgNCy0LDRgtGMINC90LUg0YPQtNCw0LvQvtGB0YwuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI2OQorbXNnaWQgIkFib3J0IGNvbXBsZXRlZC4gIFJlYWR5LiIKK21zZ3N0ciAi0J/RgNC10YDQstCw0L3Qvi4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjgKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBiYXNlIHZlcnNpb24/IgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LHQsNC30L7QstGD0Y4g0LLQtdGA0YHQuNGOINC00LvRjyDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC70LjQutGC0LA/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo5Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDQstC10YDRgdC40Y4g0LjQtyDRjdGC0L7QuSDQstC10YLQutC4INC00LvRjyDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC70LjQutGC0LA/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxMAorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIG90aGVyIGJyYW5jaD8iCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDQstC10YDRgdC40Y4g0LjQtyDQtNGA0YPQs9C+0Lkg0LLQtdGC0LrQuCDQtNC70Y8g0YDQsNC30YDQtdGI0LXQvdC40Y8g0LrQvtC90YTQu9C40LrRgtCwPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKKyJcbiIKKyIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgorIlxuIgorIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCittc2dzdHIgItCS0L3QuNC80LDQvdC40LUhINCh0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L/QvtC60LDQt9GL0LLQsNC10YIg0YLQvtC70YzQutC+INC60L7QvdGE0LvQuNC60YLRg9GO0YnQuNC1INC+0YLQu9C40YfQuNGPLlxuXG4lcyDQsdGD0LTQtdGCINC/0LXRgNC10L/QuNGB0LDQvS5cblxu0K3RgtC+INC00LXQudGB0YLQstC40LUg0LzQvtC20L3QviDQvtGC0LzQtdC90LjRgtGMINGC0L7Qu9GM0LrQviDQv9C10YDQtdC30LDQv9GD0YHQutC+0Lwg0L7Qv9C10YDQsNGG0LjQuCDRgdC70LjRj9C90LjRjy4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBzZWVtcyB0byBoYXZlIHVucmVzb2x2ZWQgY29uZmxpY3RzLCBzdGlsbCBzdGFnZT8iCittc2dzdHIgItCf0L7RhdC+0LbQtSwg0YfRgtC+INGE0LDQudC7ICVzINGB0L7QtNC10YDQttC40YIg0L3QtdGA0LDQt9GA0LXRiNC10L3QvdGL0LUg0LrQvtC90YTQu9C40LrRgtGLLiDQn9GA0L7QtNC+0LvQttC40YLRjCDQuNC90LTQtdC60YHQsNGG0LjRjj8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWRkaW5nIHJlc29sdXRpb24gZm9yICVzIgorbXNnc3RyICLQlNC+0LHQsNCy0LvRj9GOINGA0LXQt9GD0LvRjNGC0LDRgiDRgNCw0LfRgNC10YjQtdC90LjRjyDQtNC70Y8gJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQorbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwINGB0LvQuNGP0L3QuNGPINC90LUg0L7QsdGA0LDQsdCw0YLRi9Cy0LDQtdGCINC60L7QvdGE0LvQuNC60YLRiyDRgSDRg9C00LDQu9C10L3QuNC10Lwg0LjQu9C4INGD0YfQsNGB0YLQuNC10Lwg0YHRgdGL0LvQvtC6IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKK21zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQmtC+0L3RhNC70LjQutGC0YPRjtGJ0LjQuSDRhNCw0LnQuyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKK21zZ3N0ciAiwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQv9GA0L7Qs9GA0LDQvNC80L7QuSDRgdC70LjRj9C90LjRjyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MjY4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgorbXNnc3RyICLQndC10L/QvtC00LTQtdGA0LbQuNCy0LDQtdC80LDRjyDQv9GA0L7Qs9GA0LDQvNC80LAg0YHQu9C40Y/QvdC40Y8gwqslc8K7IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMDMKK21zZ2lkICJNZXJnZSB0b29sIGlzIGFscmVhZHkgcnVubmluZywgdGVybWluYXRlIGl0PyIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwINGB0LvQuNGP0L3QuNGPINGD0LbQtSDRgNCw0LHQvtGC0LDQtdGCLiDQn9GA0LXRgNCy0LDRgtGMPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzIzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHJldHJpZXZpbmcgdmVyc2lvbnM6XG4iCisiJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQv9C+0LvRg9GH0LXQvdC40Y8g0LLQtdGA0YHQuNC5OlxuJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCisiXG4iCisiJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0L/Rg9GB0LrQsCDQv9GA0L7Qs9GA0LDQvNC80Ysg0YHQu9C40Y/QvdC40Y86XG5cbiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNDcKK21zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCittc2dzdHIgItCX0LDQv9GD0YHQuiDQv9GA0L7Qs9GA0LDQvNC80Ysg0YHQu9C40Y/QvdC40Y/igKYiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM3NSBsaWIvbWVyZ2V0b29sLnRjbDozODMKK21zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCittc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQv9GA0L7Qs9GA0LDQvNC80Ysg0YHQu9C40Y/QvdC40Y8uIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZ2xvYmFsIGVuY29kaW5nICclcyciCittc2dzdHIgItCd0LXQstC10YDQvdCw0Y8g0LPQu9C+0LHQsNC70YzQvdCw0Y8g0LrQvtC00LjRgNC+0LLQutCwIMKrJXPCuyIKKworIzogbGliL29wdGlvbi50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAi0J3QtdCy0LXRgNC90LDRjyDQutC+0LTQuNGA0L7QstC60LAg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDCqyVzwrsiCisKKyM6IGxpYi9vcHRpb24udGNsOjExNworbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCittc2dzdHIgItCS0L7RgdGB0YLQsNC90L7QstC40YLRjCDQvdCw0YHRgtGA0L7QudC60Lgg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4iCisKKyM6IGxpYi9vcHRpb24udGNsOjEyMQorbXNnaWQgIlNhdmUiCittc2dzdHIgItCh0L7RhdGA0LDQvdC40YLRjCIKKworIzogbGliL29wdGlvbi50Y2w6MTMxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgUmVwb3NpdG9yeSIKK21zZ3N0ciAi0JTQu9GPINGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gJXMiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzMgorbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCittc2dzdHIgItCe0LHRidC40LUgKNC00LvRjyDQstGB0LXRhSDRgNC10L/QvtC30LjRgtC+0YDQuNC10LIpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzgKK21zZ2lkICJVc2VyIE5hbWUiCittc2dzdHIgItCY0LzRjyDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8iCisKKyM6IGxpYi9vcHRpb24udGNsOjEzOQorbXNnaWQgIkVtYWlsIEFkZHJlc3MiCittc2dzdHIgItCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDEKK21zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKK21zZ3N0ciAi0KHRg9C80LzQsNGA0L3QvtC1INGB0L7QvtCx0YnQtdC90LjQtSDQv9GA0Lgg0YHQu9C40Y/QvdC40LgiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MgorbXNnaWQgIk1lcmdlIFZlcmJvc2l0eSIKK21zZ3N0ciAi0KPRgNC+0LLQtdC90Ywg0LTQtdGC0LDQu9GM0L3QvtGB0YLQuCDRgdC+0L7QsdGJ0LXQvdC40Lkg0L/RgNC4INGB0LvQuNGP0L3QuNC4IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDMKK21zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC+0YLRh9C10YIg0L7QsSDQuNC30LzQtdC90LXQvdC40Y/RhSDQv9C+0YHQu9C1INGB0LvQuNGP0L3QuNGPIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDQKK21zZ2lkICJVc2UgTWVyZ2UgVG9vbCIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC00LvRjyDRgdC70LjRj9C90LjRjyDQv9GA0L7Qs9GA0LDQvNC80YMiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NgorbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCittc2dzdHIgItCU0L7QstC10YDRj9GC0Ywg0LLRgNC10LzQtdC90Lgg0LzQvtC00LjRhNC40LrQsNGG0LjQuCDRhNCw0LnQu9CwIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDcKK21zZ2lkICJQcnVuZSBUcmFja2luZyBCcmFuY2hlcyBEdXJpbmcgRmV0Y2giCittc2dzdHIgItCn0LjRgdGC0LrQsCDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDQstC10YLQvtC6INC/0YDQuCDQuNC30LLQu9C10YfQtdC90LjQuCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgorbXNnc3RyICLQotCw0LrQvtC1INC20LUg0LjQvNGPLCDQutCw0Log0Lgg0YMg0L7RgtGB0LvQtdC20LjQstCw0LXQvNC+0Lkg0LLQtdGC0LrQuCIKKworIzogbGliL29wdGlvbi50Y2w6MTQ5Cittc2dpZCAiQmxhbWUgQ29weSBPbmx5IE9uIENoYW5nZWQgRmlsZXMiCittc2dzdHIgItCf0L7QuNGB0Log0LrQvtC/0LjQuSDRgtC+0LvRjNC60L4g0LIg0LjQt9C80LXQvdGR0L3QvdGL0YUg0YTQsNC50LvQsNGFIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTAKK21zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKK21zZ3N0ciAi0JzQuNC90LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdC40LzQstC+0LvQvtCyINC00LvRjyDQv9C+0LjRgdC60LAg0LrQvtC/0LjQuSIKKworIzogbGliL29wdGlvbi50Y2w6MTUxCittc2dpZCAiQmxhbWUgSGlzdG9yeSBDb250ZXh0IFJhZGl1cyAoZGF5cykiCittc2dzdHIgItCg0LDQtNC40YPRgSDQuNGB0YLQvtGA0LjRh9C10YHQutC+0LPQviDQutC+0L3RgtC10LrRgdGC0LAgKNCyINC00L3Rj9GFKSIKKworIzogbGliL29wdGlvbi50Y2w6MTUyCittc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKK21zZ3N0ciAi0KfQuNGB0LvQviDRgdGC0YDQvtC6INCyINC60L7QvdGC0LXQutGB0YLQtSBkaWZmIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTMKK21zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgorbXNnc3RyICLQqNC40YDQuNC90LAg0YLQtdC60YHRgtCwINGB0L7QvtCx0YnQtdC90LjRjyDQutC+0LzQvNC40YLQsCIKKworIzogbGliL29wdGlvbi50Y2w6MTU0Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICLQqNCw0LHQu9C+0L0g0LTQu9GPINC40LzQtdC90Lgg0L3QvtCy0L7QuSDQstC10YLQutC4IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTUKK21zZ2lkICJEZWZhdWx0IEZpbGUgQ29udGVudHMgRW5jb2RpbmciCittc2dzdHIgItCa0L7QtNC40YDQvtCy0LrQsCDRgdC+0LTQtdGA0LbQsNC90LjRjyDRhNCw0LnQu9CwINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMDMKK21zZ2lkICJDaGFuZ2UiCittc2dzdHIgItCY0LfQvNC10L3QuNGC0YwiCisKKyM6IGxpYi9vcHRpb24udGNsOjIzMAorbXNnaWQgIlNwZWxsaW5nIERpY3Rpb25hcnk6IgorbXNnc3RyICLQodC70L7QstCw0YDRjCDQtNC70Y8g0L/RgNC+0LLQtdGA0LrQuCDQv9GA0LDQstC+0L/QuNGB0LDQvdC40Y86IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNTQKK21zZ2lkICJDaGFuZ2UgRm9udCIKK21zZ3N0ciAi0JjQt9C80LXQvdC40YLRjCIKKworIzogbGliL29wdGlvbi50Y2w6MjU4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hvb3NlICVzIgorbXNnc3RyICLQktGL0LHQtdGA0LjRgtC1ICVzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNjQKK21zZ2lkICJwdC4iCittc2dzdHIgInB0LiIKKworIzogbGliL29wdGlvbi50Y2w6Mjc4Cittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCIKKworIzogbGliL29wdGlvbi50Y2w6MzE0Cittc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvQvdC+0YHRgtGM0Y4g0YHQvtGF0YDQsNC90LjRgtGMINC90LDRgdGC0YDQvtC50LrQuDoiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE2MworbXNnaWQgIlJlbW92ZSBSZW1vdGUiCittc2dzdHIgItCj0LTQsNC70LjRgtGMINGB0YHRi9C70LrRgyDQvdCwINCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE2OAorbXNnaWQgIlBydW5lIGZyb20iCittc2dzdHIgItCn0LjRgdGC0LrQsCIKKworIzogbGliL3JlbW90ZS50Y2w6MTczCittc2dpZCAiRmV0Y2ggZnJvbSIKK21zZ3N0ciAi0JjQt9Cy0LvQtdGH0LXQvdC40LUg0LjQtyIKKworIzogbGliL3JlbW90ZS50Y2w6MjE1Cittc2dpZCAiUHVzaCB0byIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LjRgtGMIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTkKK21zZ2lkICJBZGQgUmVtb3RlIgorbXNnc3RyICLQl9Cw0YDQtdCz0LjRgdGC0YDQuNGA0L7QstCw0YLRjCDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjQKK21zZ2lkICJBZGQgTmV3IFJlbW90ZSIKK21zZ3N0ciAi0JTQvtCx0LDQstC40YLRjCDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjggbGliL3Rvb2xzX2RsZy50Y2w6MzYKK21zZ2lkICJBZGQiCittc2dzdHIgItCU0L7QsdCw0LLQuNGC0YwiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDozNworbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgorbXNnc3RyICLQmNC90YTQvtGA0LzQsNGG0LjRjyDQviDQstC90LXRiNC90LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKK21zZ2lkICJMb2NhdGlvbjoiCittc2dzdHIgItCf0L7Qu9C+0LbQtdC90LjQtToiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MgorbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgorbXNnc3RyICLQodC70LXQtNGD0Y7RidCw0Y8g0L7Qv9C10YDQsNGG0LjRjyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjY1Cittc2dpZCAiRmV0Y2ggSW1tZWRpYXRlbHkiCittc2dzdHIgItCh0YDQsNC30YMg0LjQt9Cy0LvQtdGH0Ywg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzEKK21zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgorbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0YLRjCDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC4INC+0YLQv9GA0LDQstC40YLRjCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjc3Cittc2dpZCAiRG8gTm90aGluZyBFbHNlIE5vdyIKK21zZ3N0ciAi0JHQvtC70YzRiNC1INC90LjRh9C10LPQviDQvdC1INC00LXQu9Cw0YLRjCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCittc2dzdHIgItCj0LrQsNC20LjRgtC1INC90LDQt9Cy0LDQvdC40LUg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjExNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgcmVtb3RlIG5hbWUuIgorbXNnc3RyICLCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC00L7Qv9GD0YHRgtC40LzRi9C8INC40LzQtdC90LXQvCDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8uIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQtNC+0LHQsNCy0LjRgtGMIMKrJXPCuyDQuNC3IMKrJXPCuy4gIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMzIGxpYi90cmFuc3BvcnQudGNsOjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmZXRjaCAlcyIKK21zZ3N0ciAi0LjQt9Cy0LvQtdGH0LXQvdC40LUgJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyB0aGUgJXMiCittc2dzdHIgItCY0LfQstC70LXRh9C10L3QuNC1ICVzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0LjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNGC0Ywg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQsiDCqyVzwrsuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzIGxpYi90cmFuc3BvcnQudGNsOjI1IGxpYi90cmFuc3BvcnQudGNsOjYzCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgInB1c2ggJXMiCittc2dzdHIgItC+0YLQv9GA0LDQstC40YLRjCAlcyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdXAgdGhlICVzIChhdCAlcykiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQsCAlcyAo0LIgJXMpIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INCy0LXRgtC60Lgg0LLQviDQstC90LXRiNC90LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQ3Cittc2dpZCAiRnJvbSBSZXBvc2l0b3J5IgorbXNnc3RyICLQmNC3INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTAgbGliL3RyYW5zcG9ydC50Y2w6MTM0Cittc2dpZCAiUmVtb3RlOiIKK21zZ3N0ciAi0LLQvdC10YjQvdC40Lk6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjE0OQorbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCittc2dzdHIgItCj0LrQsNC30LDQvdC90L7QtSDQv9C+0LvQvtC20LXQvdC40LU6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg0Cittc2dpZCAiQnJhbmNoZXMiCittc2dzdHIgItCS0LXRgtC60LgiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTA5Cittc2dpZCAiRGVsZXRlIE9ubHkgSWYiCittc2dzdHIgItCj0LTQsNC70LjRgtGMINGC0L7Qu9GM0LrQviDQsiDRgdC70YPRh9Cw0LUsINC10YHQu9C4IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMQorbXNnaWQgIk1lcmdlZCBJbnRvOiIKK21zZ3N0ciAi0KHQu9C40Y/QvdC40LUg0YE6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MgorbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKK21zZ3N0ciAi0JTQu9GPINC+0L/QtdGA0LDRhtC40LggwqvQodC70LjRj9C90LjQtSDRgcK7INGC0YDQtdCx0YPQtdGC0YHRjyDRg9C60LDQt9Cw0YLRjCDQstC10YLQutGDLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6XG4iCisiXG4iCisiIC0gJXMiCittc2dzdHIgItCh0LvQtdC00YPRjtGJ0LjQtSDQstC10YLQutC4INC80L7Qs9GD0YIg0LHRi9GC0Ywg0L7QsdGK0LXQtNC40L3QtdC90Ysg0YEgJXMg0L/RgNC4INC/0L7QvNC+0YnQuCDQvtC/0LXRgNCw0YbQuNC4INGB0LvQuNGP0L3QuNGPOlxuXG4gLSAlcyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSAiCisibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCittc2dzdHIgItCd0LXQutC+0YLQvtGA0YvQtSDRgtC10YHRgtGLINC90LAg0YHQu9C40Y/QvdC40LUg0L3QtSDQv9GA0L7RiNC70LgsINC/0L7RgtC+0LzRgyDRh9GC0L4g0LLRiyDQvdC1INC40LfQstC70LXQutC70Lgg0L3QtdC+0LHRhdC+0LTQuNC80YvQtSDQutC+0LzQvNC40YLRiy4g0J/QvtC/0YvRgtCw0LnRgtC10YHRjCDQuNC30LLQu9C10YfRjCDQuNGFINC40LcgJXMuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNworbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKK21zZ3N0ciAi0KPQutCw0LbQuNGC0LUg0L7QtNC90YMg0LjQu9C4INC90LXRgdC60L7Qu9GM0LrQviDQstC10YLQvtC6INC00LvRjyDRg9C00LDQu9C10L3QuNGPLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INCy0LXRgtC+0Log0LjQtyAlcyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTIKK21zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKK21zZ3N0ciAi0J3QtSDRg9C60LDQt9Cw0L0g0YDQtdC/0L7Qt9C40YLQvtGA0LjQuS4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCittc2dzdHIgItCf0LXRgNC10YfQuNGC0YvQstCw0L3QuNC1ICVz4oCmIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyMQorbXNnaWQgIkZpbmQ6IgorbXNnc3RyICLQn9C+0LjRgdC6OiIKKworIzogbGliL3NlYXJjaC50Y2w6MjMKK21zZ2lkICJOZXh0IgorbXNnc3RyICLQlNCw0LvRjNGI0LUiCisKKyM6IGxpYi9zZWFyY2gudGNsOjI0Cittc2dpZCAiUHJldiIKK21zZ3N0ciAi0J7QsdGA0LDRgtC90L4iCisKKyM6IGxpYi9zZWFyY2gudGNsOjI1Cittc2dpZCAiQ2FzZS1TZW5zaXRpdmUiCittc2dzdHIgItCY0LPQvS4g0LHQvtC70YzRiNC40LUv0LzQsNC70LXQvdGM0LrQuNC1IgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjIxIGxpYi9zaG9ydGN1dC50Y2w6NjIKK21zZ2lkICJDYW5ub3Qgd3JpdGUgc2hvcnRjdXQ6IgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQt9Cw0L/QuNGB0LDRgtGMINGB0YHRi9C70LrRgzoiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MTM3Cittc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQt9Cw0L/QuNGB0LDRgtGMINC30L3QsNGH0L7QujoiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo1NworbXNnaWQgIlVuc3VwcG9ydGVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgItCd0LXQv9C+0LTQtNC10YDQttC40LLQsNC10LzQsNGPINC/0YDQvtCz0YDQsNC80LzQsCDQv9GA0L7QstC10YDQutC4INC/0YDQsNCy0L7Qv9C40YHQsNC90LjRjyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjY1Cittc2dpZCAiU3BlbGwgY2hlY2tpbmcgaXMgdW5hdmFpbGFibGUiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPINC90LUg0LTQvtGB0YLRg9C/0L3QsCIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjY4Cittc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdCw0Y8g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGPINC/0YDQvtCz0YDQsNC80LzRiyDQv9GA0L7QstC10YDQutC4INC/0YDQsNCy0L7Qv9C40YHQsNC90LjRjyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgorbXNnc3RyICLQodC70L7QstCw0YDRjCDQstC10YDQvdGD0YIg0LogJXMuIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKK21zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgorbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNC80LAg0L/RgNC+0LLQtdGA0LrQuCDQv9GA0LDQstC+0L/QuNGB0LDQvdC40Y8g0L3QtSDRgdC80L7Qs9C70LAg0LfQsNC/0YPRgdGC0LjRgtGM0YHRjyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCittc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgItCd0LXRgNCw0YHQv9C+0LfQvdCw0L3QvdCw0Y8g0L/RgNC+0LPRgNCw0LzQvNCwINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTg2Cittc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCittc2dzdHIgItCY0YHQv9GA0LDQstC70LXQvdC40Lkg0L3QtSDQvdCw0LnQtNC10L3QviIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjM4OAorbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPINC/0YDQtdGA0LLQsNC70LAg0L/QtdGA0LXQtNCw0YfRgyDQtNCw0L3QvdGL0YUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKK21zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPIgorCisjOiBsaWIvc3Noa2V5LnRjbDozMQorbXNnaWQgIk5vIGtleXMgZm91bmQuIgorbXNnc3RyICLQmtC70Y7RhyDQvdC1INC90LDQudC00LXQvSIKKworIzogbGliL3NzaGtleS50Y2w6MzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgorbXNnc3RyICLQn9GD0LHQu9C40YfQvdGL0Lkg0LrQu9GO0Ycg0LjQtyAlcyIKKworIzogbGliL3NzaGtleS50Y2w6NDAKK21zZ2lkICJHZW5lcmF0ZSBLZXkiCittc2dzdHIgItCh0L7Qt9C00LDRgtGMINC60LvRjtGHIgorCisjOiBsaWIvc3Noa2V5LnRjbDo1NgorbXNnaWQgIkNvcHkgVG8gQ2xpcGJvYXJkIgorbXNnc3RyICLQodC60L7Qv9C40YDQvtCy0LDRgtGMINCyINCx0YPRhNC10YAg0L7QsdC80LXQvdCwIgorCisjOiBsaWIvc3Noa2V5LnRjbDo3MAorbXNnaWQgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5IgorbXNnc3RyICLQktCw0Ygg0L/Rg9Cx0LvQuNGH0L3Ri9C5INC60LvRjtGHIE9wZW5TU0giCisKKyM6IGxpYi9zc2hrZXkudGNsOjc4Cittc2dpZCAiR2VuZXJhdGluZy4uLiIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQteKApiIKKworIzogbGliL3NzaGtleS50Y2w6ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCisiXG4iCisiJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0L/Rg9GB0LrQsCBzc2gta2V5Z2VuOlxuXG4lcyIKKworIzogbGliL3NzaGtleS50Y2w6MTExCittc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgorbXNnc3RyICLQmtC70Y7RhyDQvdC1INGB0L7Qt9C00LDQvS4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjExOAorbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VlZGVkLCBidXQgbm8ga2V5cyBmb3VuZC4iCittc2dzdHIgItCh0L7Qt9C00LDQvdC40LUg0LrQu9GO0YfQsCDQt9Cw0LLQtdGA0YjQuNC70L7RgdGMLCDQvdC+INGA0LXQt9GD0LvRjNGC0LDRgiDQvdC1INCx0YvQuyDQvdCw0LnQtNC10L0iCisKKyM6IGxpYi9zc2hrZXkudGNsOjEyMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIllvdXIga2V5IGlzIGluOiAlcyIKK21zZ3N0ciAi0JLQsNGIINC60LvRjtGHINC90LDRhdC+0LTQuNGC0YHRjyDQsjogJXMiCisKKyM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCittc2dzdHIgIiVzIOKApiAlKmkg0LjQtyAlKmkgJXMgKCUzaSUlKSIKKworIzogbGliL3Rvb2xzLnRjbDo3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKK21zZ3N0ciAi0JfQsNC/0YPRgdC6ICVzINGC0YDQtdCx0YPQtdGCINCy0YvQsdGA0LDQvdC90L7Qs9C+INGE0LDQudC70LAuIgorCisjOiBsaWIvdG9vbHMudGNsOjkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCittc2dzdHIgItCU0LXQudGB0YLQstC40YLQtdC70YzQvdC+INC30LDQv9GD0YHRgtC40YLRjCAlcz8iCisKKyM6IGxpYi90b29scy50Y2w6MTEwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbDogJXMiCittc2dzdHIgItCS0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90LDRjyDQvtC/0LXRgNCw0YbQuNGPOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nOiAlcyIKK21zZ3N0ciAi0JLRi9C/0L7Qu9C90LXQvdC40LU6ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjE0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCAlcyDQt9Cw0LLQtdGA0YjQuNC70LDRgdGMINGD0YHQv9C10YjQvdC+LiIKKworIzogbGliL3Rvb2xzLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGZhaWxlZDogJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQv9GA0L7Qs9GA0LDQvNC80Ys6ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgorbXNnaWQgIkFkZCBUb29sIgorbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGMINCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90YPRjiDQvtC/0LXRgNCw0YbQuNGOIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOAorbXNnaWQgIkFkZCBOZXcgVG9vbCBDb21tYW5kIgorbXNnc3RyICLQndC+0LLQsNGPINCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90LDRjyDQvtC/0LXRgNCw0YbQuNGPIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMworbXNnaWQgIkFkZCBnbG9iYWxseSIKK21zZ3N0ciAi0JTQvtCx0LDQstC40YLRjCDQtNC70Y8g0LLRgdC10YUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdCyIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0NQorbXNnaWQgIlRvb2wgRGV0YWlscyIKK21zZ3N0ciAi0J7Qv9C40YHQsNC90LjQtSDQstGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdC+0Lkg0L7Qv9C10YDQsNGG0LjQuCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDgKK21zZ2lkICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCqy/CuyDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDQv9C+0LTQvNC10L3RjiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NjEKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LA6IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo3NAorbXNnaWQgIlNob3cgYSBkaWFsb2cgYmVmb3JlIHJ1bm5pbmciCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LTQuNCw0LvQvtCzINC/0LXRgNC10LQg0LfQsNC/0YPRgdC60L7QvCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6ODAKK21zZ2lkICJBc2sgdGhlIHVzZXIgdG8gc2VsZWN0IGEgcmV2aXNpb24gKHNldHMgJFJFVklTSU9OKSIKK21zZ3N0ciAi0JfQsNC/0YDQvtGBINC90LAg0LLRi9Cx0L7RgCDQstC10YDRgdC40LggKNGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCICRSRVZJU0lPTikiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjg1Cittc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCittc2dzdHIgItCX0LDQv9GA0L7RgSDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Ri9GFINCw0YDQs9GD0LzQtdC90YLQvtCyICjRg9GB0YLQsNC90LDQstC70LjQstCw0LXRgiAkQVJHUykiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjkyCittc2dpZCAiRG9uJ3Qgc2hvdyB0aGUgY29tbWFuZCBvdXRwdXQgd2luZG93IgorbXNnc3RyICLQndC1INC/0L7QutCw0LfRi9Cy0LDRgtGMINC+0LrQvdC+INCy0YvQstC+0LTQsCDQutC+0LzQsNC90LTRiyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTcKK21zZ2lkICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKCRGSUxFTkFNRSBub3QgZW1wdHkpIgorbXNnc3RyICLQl9Cw0L/Rg9GB0Log0YLQvtC70YzQutC+INC10YHQu9C4INC/0L7QutCw0LfQsNC9INGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40LkgKCRGSUxFTkFNRSDQvdC1INC/0YPRgdGC0L4pIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjEKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgbmFtZSBmb3IgdGhlIHRvb2wuIgorbXNnc3RyICLQo9C60LDQttC40YLQtSDQvdCw0LfQstCw0L3QuNC1INCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90L7QuSDQvtC/0LXRgNCw0YbQuNC4LiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi0JLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3QsNGPINC+0L/QtdGA0LDRhtC40Y8gwqslc8K7INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE1MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgYWRkIHRvb2w6XG4iCisiJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQtNC+0LHQsNCy0LvQtdC90LjRjyDQv9GA0L7Qs9GA0LDQvNC80Ys6XG4lcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTkwCittc2dpZCAiUmVtb3ZlIFRvb2wiCittc2dzdHIgItCj0LTQsNC70LjRgtGMINC/0YDQvtCz0YDQsNC80LzRgyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk2Cittc2dpZCAiUmVtb3ZlIFRvb2wgQ29tbWFuZHMiCittc2dzdHIgItCj0LTQsNC70LjRgtGMINC60L7QvNCw0L3QtNGLINC/0YDQvtCz0YDQsNC80LzRiyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjAwCittc2dpZCAiUmVtb3ZlIgorbXNnc3RyICLQo9C00LDQu9C40YLRjCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjM2Cittc2dpZCAiKEJsdWUgZGVub3RlcyByZXBvc2l0b3J5LWxvY2FsIHRvb2xzKSIKK21zZ3N0ciAiKNCh0LjQvdC40Lwg0LLRi9C00LXQu9C10L3RiyDQv9GA0L7Qs9GA0LDQvNC80Ysg0LvQvtC60LDQu9GM0L3Ri9C1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y4pIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW4gQ29tbWFuZDogJXMiCittc2dzdHIgItCX0LDQv9GD0YHQuiDQutC+0LzQsNC90LTRizogJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjMxMQorbXNnaWQgIkFyZ3VtZW50cyIKK21zZ3N0ciAi0JDRgNCz0YPQvNC10L3RgtGLIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNDgKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgorbXNnc3RyICLQmNC30LLQu9C10YfQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40Lkg0LjQtyAlcyAiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicmVtb3RlIHBydW5lICVzIgorbXNnc3RyICLRh9C40YHRgtC60LAg0LLQvdC10YjQvdC10LPQviAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKK21zZ3N0ciAi0KfQuNGB0YLQutCwINC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINCy0LXRgtC+0LosINGD0LTQsNC70ZHQvdC90YvRhSDQuNC3ICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LrQsCDQuNC30LzQtdC90LXQvdC40Lkg0LIgJXMgIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1pcnJvcmluZyB0byAlcyIKK21zZ3N0ciAi0KLQvtGH0L3QvtC1INC60L7Qv9C40YDQvtCy0LDQvdC40LUg0LIgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LrQsCAlcyAlcyDQsiAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTAwCittc2dpZCAiUHVzaCBCcmFuY2hlcyIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LjRgtGMINCy0LXRgtC60LgiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjExNAorbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKK21zZ3N0ciAi0JjRgdGF0L7QtNC90YvQtSDQstC10YLQutC4IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMzEKK21zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgorbXNnc3RyICLQoNC10L/QvtC30LjRgtC+0YDQuNC5INC90LDQt9C90LDRh9C10L3QuNGPIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjkKK21zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0L7RgtC/0YDQsNCy0LrQuCIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTcxCittc2dpZCAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiCittc2dzdHIgItCf0YDQuNC90YPQtNC40YLQtdC70YzQvdC+INC/0LXRgNC10LfQsNC/0LjRgdCw0YLRjCDRgdGD0YnQtdGB0YLQstGD0Y7RidGD0Y4g0LLQtdGC0LrRgyAo0LLQvtC30LzQvtC20L3QsCDQv9C+0YLQtdGA0Y8g0LjQt9C80LXQvdC10L3QuNC5KSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTc1Cittc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCB0aGluIHBhY2sgKNC00LvRjyDQvNC10LTQu9C10L3QvdGL0YUg0YHQtdGC0LXQstGL0YUg0L/QvtC00LrQu9GO0YfQtdC90LjQuSkiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3OQorbXNnaWQgIkluY2x1ZGUgdGFncyIKK21zZ3N0ciAi0J/QtdGA0LXQtNCw0YLRjCDQvNC10YLQutC4IgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9zdi5wbyBiL2dpdC1ndWkvcG8vc3YucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0YWQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vc3YucG8KQEAgLTAsMCArMSwyNzM2IEBACisjIFN3ZWRpc2ggdHJhbnNsYXRpb24gb2YgZ2l0LWd1aS4KKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggU2hhd24gUGVhcmNlLCBldCBhbC4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdC1ndWkgcGFja2FnZS4KKyMKKyMgTWlrYWVsIE1hZ251c3NvbiA8bWlrYWNodUBnbWFpbC5jb20+LCAyMDA4LgorIyBQZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT4sIDIwMDctMjAwOCwgMjAxNS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHN2XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTAzLTI3IDEwOjE1KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTAzLTI3IDEwOjI0KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPlxuIgorIkxhbmd1YWdlLVRlYW06IFN3ZWRpc2ggPHRwLXN2QGxpc3Rvci50cC1zdi5zZT5cbiIKKyJMYW5ndWFnZTogc3ZcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKyJYLUdlbmVyYXRvcjogR3RyYW5zbGF0b3IgMi45MS42XG4iCisKKyM6IGdpdC1ndWkuc2g6ODYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCittc2dzdHIgIk9naWx0aWd0IHRlY2tlbnNuaXR0IGFuZ2l2ZXQgaSAlczoiCisKKyM6IGdpdC1ndWkuc2g6OTE1Cittc2dpZCAiTWFpbiBGb250IgorbXNnc3RyICJIdXZ1ZHRlY2tlbnNuaXR0IgorCisjOiBnaXQtZ3VpLnNoOjkxNgorbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgorbXNnc3RyICJEaWZmL2tvbnNvbHRlY2tlbnNuaXR0IgorCisjOiBnaXQtZ3VpLnNoOjkzMSBnaXQtZ3VpLnNoOjk0NSBnaXQtZ3VpLnNoOjk1OCBnaXQtZ3VpLnNoOjEwNDgKKyM6IGdpdC1ndWkuc2g6MTA2NyBnaXQtZ3VpLnNoOjMxMjUKK21zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKK21zZ3N0ciAiZ2l0LWd1aTogw7ZkZXNkaWdlcnQgZmVsIgorCisjOiBnaXQtZ3VpLnNoOjkzMgorbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKK21zZ3N0ciAiSGl0dGFyIGludGUgZ2l0IGkgUEFUSC4iCisKKyM6IGdpdC1ndWkuc2g6OTU5Cittc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCittc2dzdHIgIkthbiBpbnRlIHRvbGthIHZlcnNpb25zc3Ryw6RuZyBmcsOlbiBHaXQ6IgorCisjOiBnaXQtZ3VpLnNoOjk4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKKyJcbiIKKyIlcyBjbGFpbXMgaXQgaXMgdmVyc2lvbiAnJXMnLlxuIgorIlxuIgorIiVzIHJlcXVpcmVzIGF0IGxlYXN0IEdpdCAxLjUuMCBvciBsYXRlci5cbiIKKyJcbiIKKyJBc3N1bWUgJyVzJyBpcyB2ZXJzaW9uIDEuNS4wP1xuIgorbXNnc3RyICIiCisiS2FuIGludGUgYXZnw7ZyYSBHaXRzIHZlcnNpb24uXG4iCisiXG4iCisiJXMgc8OkZ2VyIGF0dCBkZXNzIHZlcnNpb24gw6RyIFwiJXNcIi5cbiIKKyJcbiIKKyIlcyBrcsOkdmVyIG1pbnN0IEdpdCAxLjUuMCBlbGxlciBzZW5hcmUuXG4iCisiXG4iCisiQW50YSBhdHQgXCIlc1wiIMOkciB2ZXJzaW9uIDEuNS4wP1xuIgorCisjOiBnaXQtZ3VpLnNoOjEyODEKK21zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCittc2dzdHIgIkdpdC1rYXRhbG9nZW4gaGl0dGFkZXMgaW50ZToiCisKKyM6IGdpdC1ndWkuc2g6MTMxNQorbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCittc2dzdHIgIkthbiBpbnRlIGfDpSB0aWxsIGLDtnJqYW4gcMOlIGFyYmV0c2thdGFsb2dlbjoiCisKKyM6IGdpdC1ndWkuc2g6MTMyMworbXNnaWQgIkNhbm5vdCB1c2UgYmFyZSByZXBvc2l0b3J5OiIKK21zZ3N0ciAiS2FuIGludGUgYW52w6RuZGEgbmFrZXQgYXJraXY6IgorCisjOiBnaXQtZ3VpLnNoOjEzMzEKK21zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiSW5nZW4gYXJiZXRza2F0YWxvZyIKKworIzogZ2l0LWd1aS5zaDoxNTAzIGxpYi9jaGVja291dF9vcC50Y2w6MzA2Cittc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKK21zZ3N0ciAiVXBwZGF0ZXJhciBmaWxzdGF0dXMuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTU2MworbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCittc2dzdHIgIlPDtmtlciBlZnRlciDDpG5kcmFkZSBmaWxlci4uLiIKKworIzogZ2l0LWd1aS5zaDoxNjM5Cittc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKK21zZ3N0ciAiIgorIkFucm9wYXIga3Jva2VuIGbDtnIgZsO2cmJlcmVkZWxzZSBhdiBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIChwcmVwYXJlLWNvbW1pdC0iCisibXNnKS4uLiIKKworIzogZ2l0LWd1aS5zaDoxNjU2Cittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiIgorIkluY2hlY2tuaW5nZW4gYXZ2aXNhZGVzIGF2IGtyb2tlbiBmw7ZyIGbDtnJiZXJlZGVsc2UgYXYgaW5jaGVja25pbmdzbWVkZGVsYW5kZSAiCisiKHByZXBhcmUtY29tbWl0LW1zZykuIgorCisjOiBnaXQtZ3VpLnNoOjE4MTQgbGliL2Jyb3dzZXIudGNsOjI1MgorbXNnaWQgIlJlYWR5LiIKK21zZ3N0ciAiS2xhci4iCisKKyM6IGdpdC1ndWkuc2g6MTk3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJEaXNwbGF5IGxpbWl0IChndWkubWF4ZmlsZXNkaXNwbGF5ZWQgPSAlcykgcmVhY2hlZCwgbm90IHNob3dpbmcgYWxsICVzIGZpbGVzLiIKK21zZ3N0ciAiIgorIlZpc25pbmdzZ3LDpG5zIChndWkubWF4ZmlsZXNkaXNwbGF5ZWQgPSAlcykgbsOlZGQsIHZpc2FyZSBpbnRlIHNhbXRsaWdhICVzICIKKyJmaWxlci4iCisKKyM6IGdpdC1ndWkuc2g6MjEwMQorbXNnaWQgIlVubW9kaWZpZWQiCittc2dzdHIgIk9mw7Zyw6RuZHJhZGUiCisKKyM6IGdpdC1ndWkuc2g6MjEwMworbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJGw7Zyw6RuZHJhZGUsIGVqIGvDtmFkZSIKKworIzogZ2l0LWd1aS5zaDoyMTA0IGdpdC1ndWkuc2g6MjExNgorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICJLw7ZhZGUgZsO2ciBpbmNoZWNrbmluZyIKKworIzogZ2l0LWd1aS5zaDoyMTA1IGdpdC1ndWkuc2g6MjExNworbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICJEZWxhciBrw7ZhZGUgZsO2ciBpbmNoZWNrbmluZyIKKworIzogZ2l0LWd1aS5zaDoyMTA2IGdpdC1ndWkuc2g6MjExOAorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgorbXNnc3RyICJLw7ZhZGUgZsO2ciBpbmNoZWNrbmluZywgc2FrbmFkZSIKKworIzogZ2l0LWd1aS5zaDoyMTA4Cittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIkZpbHR5cCDDpG5kcmFkLCBlaiBrw7ZhZGUiCisKKyM6IGdpdC1ndWkuc2g6MjEwOSBnaXQtZ3VpLnNoOjIxMTAKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgb2xkIHR5cGUgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIkZpbHR5cCDDpG5kcmFkLCBnYW1tYWwgdHlwIGvDtmFkZSBmw7ZyIGluY2hlY2tuaW5nIgorCisjOiBnaXQtZ3VpLnNoOjIxMTEKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgorbXNnc3RyICJGaWx0eXAgw6RuZHJhZCwga8O2YWRlIgorCisjOiBnaXQtZ3VpLnNoOjIxMTIKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlIHN0YWdlZCwgbW9kaWZpY2F0aW9uIG5vdCBzdGFnZWQiCittc2dzdHIgIkZpbHR5cHPDpG5kcmluZ2FyIGvDtmFkZSwgaW5uZWjDpWxsc8OkbmRyaW5nYXIgZWoga8O2YWRlIgorCisjOiBnaXQtZ3VpLnNoOjIxMTMKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlIHN0YWdlZCwgZmlsZSBtaXNzaW5nIgorbXNnc3RyICJGaWx0eXBzw6RuZHJpbmdhciBrw7ZhZGUsIGZpbCBzYWtuYXMiCisKKyM6IGdpdC1ndWkuc2g6MjExNQorbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiRWogc3DDpXJhZGUsIGVqIGvDtmFkZSIKKworIzogZ2l0LWd1aS5zaDoyMTIwCittc2dpZCAiTWlzc2luZyIKK21zZ3N0ciAiU2FrbmFkZSIKKworIzogZ2l0LWd1aS5zaDoyMTIxCittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsIgorbXNnc3RyICJLw7ZhZGUgZsO2ciBib3J0dGFnbmluZyIKKworIzogZ2l0LWd1aS5zaDoyMTIyCittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgorbXNnc3RyICJLw7ZhZGUgZsO2ciBib3J0dGFnbmluZywgZm9ydGZhcmFuZGUgbsOkcnZhcmFuZGUiCisKKyM6IGdpdC1ndWkuc2g6MjEyNCBnaXQtZ3VpLnNoOjIxMjUgZ2l0LWd1aS5zaDoyMTI2IGdpdC1ndWkuc2g6MjEyNworIzogZ2l0LWd1aS5zaDoyMTI4IGdpdC1ndWkuc2g6MjEyOQorbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIktyw6R2ZXIga29uZmxpa3RoYW50ZXJpbmcgZWZ0ZXIgc2FtbWFuc2xhZ25pbmciCisKKyM6IGdpdC1ndWkuc2g6MjE2NAorbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIlN0YXJ0YXIgZ2l0ay4uLiB2w6RudGEuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjE3NgorbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgorbXNnc3RyICJIaXR0YWRlIGludGUgZ2l0ayBpIFBBVEguIgorCisjOiBnaXQtZ3VpLnNoOjIyMzUKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiSGl0dGFkZSBpbnRlIGdpdCBndWkgaSBQQVRILiIKKworIzogZ2l0LWd1aS5zaDoyNjU0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDEKK21zZ2lkICJSZXBvc2l0b3J5IgorbXNnc3RyICJBcmtpdiIKKworIzogZ2l0LWd1aS5zaDoyNjU1Cittc2dpZCAiRWRpdCIKK21zZ3N0ciAiUmVkaWdlcmEiCisKKyM6IGdpdC1ndWkuc2g6MjY1NyBsaWIvY2hvb3NlX3Jldi50Y2w6NTY3Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJHcmVuIgorCisjOiBnaXQtZ3VpLnNoOjI2NjAgbGliL2Nob29zZV9yZXYudGNsOjU1NAorbXNnaWQgIkNvbW1pdEBAbm91biIKK21zZ3N0ciAiSW5jaGVja25pbmciCisKKyM6IGdpdC1ndWkuc2g6MjY2MyBsaWIvbWVyZ2UudGNsOjEyMyBsaWIvbWVyZ2UudGNsOjE1MiBsaWIvbWVyZ2UudGNsOjE3MAorbXNnaWQgIk1lcmdlIgorbXNnc3RyICJTbMOlIGlob3AiCisKKyM6IGdpdC1ndWkuc2g6MjY2NCBsaWIvY2hvb3NlX3Jldi50Y2w6NTYzCittc2dpZCAiUmVtb3RlIgorbXNnc3RyICJGasOkcnJhcmtpdiIKKworIzogZ2l0LWd1aS5zaDoyNjY3Cittc2dpZCAiVG9vbHMiCittc2dzdHIgIlZlcmt0eWciCisKKyM6IGdpdC1ndWkuc2g6MjY3NgorbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgorbXNnc3RyICJVdGZvcnNrYSBhcmJldHNrb3BpYSIKKworIzogZ2l0LWd1aS5zaDoyNjgyCittc2dpZCAiR2l0IEJhc2giCittc2dzdHIgIkdpdCBCYXNoIgorCisjOiBnaXQtZ3VpLnNoOjI2OTIKK21zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKK21zZ3N0ciAiQmzDpGRkcmEgaSBncmVuZW5zIGZpbGVyIgorCisjOiBnaXQtZ3VpLnNoOjI2OTYKK21zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzLi4uIgorbXNnc3RyICJCbMOkZGRyYSBmaWxlciBww6UgZ3Jlbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzAxCittc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKK21zZ3N0ciAiVmlzdWFsaXNlcmEgZ3JlbmVucyBoaXN0b3JpayIKKworIzogZ2l0LWd1aS5zaDoyNzA1Cittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKK21zZ3N0ciAiVmlzdWFsaXNlcmEgYWxsYSBncmVuYXJzIGhpc3RvcmlrIgorCisjOiBnaXQtZ3VpLnNoOjI3MTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKK21zZ3N0ciAiQmzDpGRkcmEgaSBmaWxlciBmw7ZyICVzIgorCisjOiBnaXQtZ3VpLnNoOjI3MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgorbXNnc3RyICJWaXN1YWxpc2VyYSBoaXN0b3JpayBmw7ZyICVzIgorCisjOiBnaXQtZ3VpLnNoOjI3MTkgbGliL2RhdGFiYXNlLnRjbDo0MCBsaWIvZGF0YWJhc2UudGNsOjY2Cittc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKK21zZ3N0ciAiRGF0YWJhc3N0YXRpc3RpayIKKworIzogZ2l0LWd1aS5zaDoyNzIyIGxpYi9kYXRhYmFzZS50Y2w6MzMKK21zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKK21zZ3N0ciAiS29tcHJpbWVyYSBkYXRhYmFzIgorCisjOiBnaXQtZ3VpLnNoOjI3MjUKK21zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCittc2dzdHIgIlZlcmlmaWVyYSBkYXRhYmFzIgorCisjOiBnaXQtZ3VpLnNoOjI3MzIgZ2l0LWd1aS5zaDoyNzM2IGdpdC1ndWkuc2g6Mjc0MCBsaWIvc2hvcnRjdXQudGNsOjgKKyM6IGxpYi9zaG9ydGN1dC50Y2w6NDAgbGliL3Nob3J0Y3V0LnRjbDo3MgorbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCittc2dzdHIgIlNrYXBhIHNrcml2Ym9yZHNpa29uIgorCisjOiBnaXQtZ3VpLnNoOjI3NDggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyMDEKK21zZ2lkICJRdWl0IgorbXNnc3RyICJBdnNsdXRhIgorCisjOiBnaXQtZ3VpLnNoOjI3NTYKK21zZ2lkICJVbmRvIgorbXNnc3RyICLDhW5ncmEiCisKKyM6IGdpdC1ndWkuc2g6Mjc1OQorbXNnaWQgIlJlZG8iCittc2dzdHIgIkfDtnIgb20iCisKKyM6IGdpdC1ndWkuc2g6Mjc2MyBnaXQtZ3VpLnNoOjMzNjgKK21zZ2lkICJDdXQiCittc2dzdHIgIktsaXBwIHV0IgorCisjOiBnaXQtZ3VpLnNoOjI3NjYgZ2l0LWd1aS5zaDozMzcxIGdpdC1ndWkuc2g6MzQ0NSBnaXQtZ3VpLnNoOjM1MzAKKyM6IGxpYi9jb25zb2xlLnRjbDo2OQorbXNnaWQgIkNvcHkiCittc2dzdHIgIktvcGllcmEiCisKKyM6IGdpdC1ndWkuc2g6Mjc2OSBnaXQtZ3VpLnNoOjMzNzQKK21zZ2lkICJQYXN0ZSIKK21zZ3N0ciAiS2xpc3RyYSBpbiIKKworIzogZ2l0LWd1aS5zaDoyNzcyIGdpdC1ndWkuc2g6MzM3NyBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM5CisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjgKK21zZ2lkICJEZWxldGUiCittc2dzdHIgIlRhIGJvcnQiCisKKyM6IGdpdC1ndWkuc2g6Mjc3NiBnaXQtZ3VpLnNoOjMzODEgZ2l0LWd1aS5zaDozNTM0IGxpYi9jb25zb2xlLnRjbDo3MQorbXNnaWQgIlNlbGVjdCBBbGwiCittc2dzdHIgIk1hcmtlcmEgYWxsYSIKKworIzogZ2l0LWd1aS5zaDoyNzg1Cittc2dpZCAiQ3JlYXRlLi4uIgorbXNnc3RyICJTa2FwYS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzkxCittc2dpZCAiQ2hlY2tvdXQuLi4iCittc2dzdHIgIkNoZWNrYSB1dC4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzk3Cittc2dpZCAiUmVuYW1lLi4uIgorbXNnc3RyICJCeXQgbmFtbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyODAyCittc2dpZCAiRGVsZXRlLi4uIgorbXNnc3RyICJUYSBib3J0Li4uIgorCisjOiBnaXQtZ3VpLnNoOjI4MDcKK21zZ2lkICJSZXNldC4uLiIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjgxNworbXNnaWQgIkRvbmUiCittc2dzdHIgIkbDpHJkaWciCisKKyM6IGdpdC1ndWkuc2g6MjgxOQorbXNnaWQgIkNvbW1pdEBAdmVyYiIKK21zZ3N0ciAiQ2hlY2thIGluIgorCisjOiBnaXQtZ3VpLnNoOjI4MjggZ2l0LWd1aS5zaDozMzA5Cittc2dpZCAiTmV3IENvbW1pdCIKK21zZ3N0ciAiTnkgaW5jaGVja25pbmciCisKKyM6IGdpdC1ndWkuc2g6MjgzNiBnaXQtZ3VpLnNoOjMzMTYKK21zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKK21zZ3N0ciAiTMOkZ2cgdGlsbCBmw7ZyZWfDpWVuZGUgaW5jaGVja25pbmciCisKKyM6IGdpdC1ndWkuc2g6Mjg0NiBnaXQtZ3VpLnNoOjMyNzAgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDEKK21zZ2lkICJSZXNjYW4iCittc2dzdHIgIlPDtmsgcMOlIG55dHQiCisKKyM6IGdpdC1ndWkuc2g6Mjg1MgorbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKK21zZ3N0ciAiS8O2YSBmw7ZyIGluY2hlY2tuaW5nIgorCisjOiBnaXQtZ3VpLnNoOjI4NTgKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKK21zZ3N0ciAiS8O2YSDDpG5kcmFkZSBmaWxlciBmw7ZyIGluY2hlY2tuaW5nIgorCisjOiBnaXQtZ3VpLnNoOjI4NjQKK21zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgorbXNnc3RyICJUYSBib3J0IGZyw6VuIGluY2hlY2tuaW5nc2vDtiIKKworIzogZ2l0LWd1aS5zaDoyODcwIGxpYi9pbmRleC50Y2w6NDQyCittc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCittc2dzdHIgIsOFdGVyc3TDpGxsIMOkbmRyaW5nYXIiCisKKyM6IGdpdC1ndWkuc2g6Mjg3OCBnaXQtZ3VpLnNoOjM1ODEgZ2l0LWd1aS5zaDozNjEyCittc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCittc2dzdHIgIlZpc2EgbWluZHJlIHNhbW1hbmhhbmciCisKKyM6IGdpdC1ndWkuc2g6Mjg4MiBnaXQtZ3VpLnNoOjM1ODUgZ2l0LWd1aS5zaDozNjE2Cittc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCittc2dzdHIgIlZpc2EgbWVyIHNhbW1hbmhhbmciCisKKyM6IGdpdC1ndWkuc2g6Mjg4OSBnaXQtZ3VpLnNoOjMyODMgZ2l0LWd1aS5zaDozMzkyCittc2dpZCAiU2lnbiBPZmYiCittc2dzdHIgIlNrcml2IHVuZGVyIgorCisjOiBnaXQtZ3VpLnNoOjI5MDUKK21zZ2lkICJMb2NhbCBNZXJnZS4uLiIKK21zZ3N0ciAiTG9rYWwgc2FtbWFuc2xhZ25pbmcuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjkxMAorbXNnaWQgIkFib3J0IE1lcmdlLi4uIgorbXNnc3RyICJBdmJyeXQgc2FtbWFuc2xhZ25pbmcuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjkyMiBnaXQtZ3VpLnNoOjI5NTAKK21zZ2lkICJBZGQuLi4iCittc2dzdHIgIkzDpGdnIHRpbGwuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjkyNgorbXNnaWQgIlB1c2guLi4iCittc2dzdHIgIlPDpG5kLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI5MzAKK21zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgorbXNnc3RyICJUYSBib3J0IGdyZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjk0MCBnaXQtZ3VpLnNoOjM1NjMKK21zZ2lkICJPcHRpb25zLi4uIgorbXNnc3RyICJBbHRlcm5hdGl2Li4uIgorCisjOiBnaXQtZ3VpLnNoOjI5NTEKK21zZ2lkICJSZW1vdmUuLi4iCittc2dzdHIgIlRhIGJvcnQuLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjk2MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1Cittc2dpZCAiSGVscCIKK21zZ3N0ciAiSGrDpGxwIgorCisjOiBnaXQtZ3VpLnNoOjI5NjQgZ2l0LWd1aS5zaDoyOTY4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTggbGliL2Fib3V0LnRjbDoxNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFib3V0ICVzIgorbXNnc3RyICJPbSAlcyIKKworIzogZ2l0LWd1aS5zaDoyOTkyCittc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCittc2dzdHIgIldlYmJkb2t1bWVudGF0aW9uIgorCisjOiBnaXQtZ3VpLnNoOjI5OTUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxCittc2dpZCAiU2hvdyBTU0ggS2V5IgorbXNnc3RyICJWaXNhIFNTSC1ueWNrZWwiCisKKyM6IGdpdC1ndWkuc2g6MzAxNCBnaXQtZ3VpLnNoOjMxNDYKK21zZ2lkICJVc2FnZSIKK21zZ3N0ciAiQW52w6RuZG5pbmciCisKKyM6IGdpdC1ndWkuc2g6MzA5NSBsaWIvYmxhbWUudGNsOjU3MworbXNnaWQgIkVycm9yIgorbXNnc3RyICJGZWwiCisKKyM6IGdpdC1ndWkuc2g6MzEyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBjYW5ub3Qgc3RhdCBwYXRoICVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiw7ZkZXNkaWdlcnQ6IGt1bmRlIGludGUgdGEgc3RhdHVzIHDDpSBzw7ZrdsOkZ2VuICVzOiBGaWwgZWxsZXIga2F0YWxvZyBzYWtuYXMiCisKKyM6IGdpdC1ndWkuc2g6MzE1OQorbXNnaWQgIkN1cnJlbnQgQnJhbmNoOiIKK21zZ3N0ciAiQWt0dWVsbCBncmVuOiIKKworIzogZ2l0LWd1aS5zaDozMTg1Cittc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKK21zZ3N0ciAiS8O2YWRlIMOkbmRyaW5nYXIgKGtvbW1lciBhdHQgY2hlY2thcyBpbikiCisKKyM6IGdpdC1ndWkuc2g6MzIwNQorbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCittc2dzdHIgIk9rw7ZhZGUgw6RuZHJpbmdhciIKKworIzogZ2l0LWd1aS5zaDozMjc2Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAiS8O2YSDDpG5kcmFkZSIKKworIzogZ2l0LWd1aS5zaDozMjk1IGxpYi90cmFuc3BvcnQudGNsOjEzNyBsaWIvdHJhbnNwb3J0LnRjbDoyMjkKK21zZ2lkICJQdXNoIgorbXNnc3RyICJTw6RuZCIKKworIzogZ2l0LWd1aS5zaDozMzMwCittc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIklubGVkYW5kZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKKworIzogZ2l0LWd1aS5zaDozMzMxCittc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIlV0w7ZrYXQgaW5jaGVja25pbmdzbWVkZGVsYW5kZToiCisKKyM6IGdpdC1ndWkuc2g6MzMzMgorbXNnaWQgIkFtZW5kZWQgSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIlV0w7ZrYXQgaW5sZWRhbmRlIGluY2hlY2tuaW5nc21lZGRlbGFuZGU6IgorCisjOiBnaXQtZ3VpLnNoOjMzMzMKK21zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiVXTDtmthdCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIGbDtnIgc2FtbWFuc2xhZ25pbmc6IgorCisjOiBnaXQtZ3VpLnNoOjMzMzQKK21zZ2lkICJNZXJnZSBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIkluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciBzYW1tYW5zbGFnbmluZzoiCisKKyM6IGdpdC1ndWkuc2g6MzMzNQorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiSW5jaGVja25pbmdzbWVkZGVsYW5kZToiCisKKyM6IGdpdC1ndWkuc2g6MzM4NCBnaXQtZ3VpLnNoOjM1MzggbGliL2NvbnNvbGUudGNsOjczCittc2dpZCAiQ29weSBBbGwiCittc2dzdHIgIktvcGllcmEgYWxsYSIKKworIzogZ2l0LWd1aS5zaDozNDA4IGxpYi9ibGFtZS50Y2w6MTA1Cittc2dpZCAiRmlsZToiCittc2dzdHIgIkZpbDoiCisKKyM6IGdpdC1ndWkuc2g6MzUyNgorbXNnaWQgIlJlZnJlc2giCittc2dzdHIgIlVwcGRhdGVyYSIKKworIzogZ2l0LWd1aS5zaDozNTQ3Cittc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgorbXNnc3RyICJNaW5za2EgdGVja2Vuc25pdHRzc3RvcmxlayIKKworIzogZ2l0LWd1aS5zaDozNTUxCittc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgorbXNnc3RyICLDlmthIHRlY2tlbnNuaXR0c3N0b3JsZWsiCisKKyM6IGdpdC1ndWkuc2g6MzU1OSBsaWIvYmxhbWUudGNsOjI5NAorbXNnaWQgIkVuY29kaW5nIgorbXNnc3RyICJUZWNrZW5rb2RuaW5nIgorCisjOiBnaXQtZ3VpLnNoOjM1NzAKK21zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCittc2dzdHIgIkFudsOkbmQvw6V0ZXJzdMOkbGwgZGVsIgorCisjOiBnaXQtZ3VpLnNoOjM1NzUKK21zZ2lkICJBcHBseS9SZXZlcnNlIExpbmUiCittc2dzdHIgIkFudsOkbmQvw6V0ZXJzdMOkbGwgcmFkIgorCisjOiBnaXQtZ3VpLnNoOjM1OTQKK21zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKK21zZ3N0ciAiU3RhcnRhIHZlcmt0eWcgZsO2ciBzYW1tYW5zbGFnbmluZyIKKworIzogZ2l0LWd1aS5zaDozNTk5Cittc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgorbXNnc3RyICJBbnbDpG5kIHZlcnNpb25lbiBmcsOlbiBmasOkcnJhcmtpdmV0IgorCisjOiBnaXQtZ3VpLnNoOjM2MDMKK21zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKK21zZ3N0ciAiQW52w6RuZCBsb2thbGEgdmVyc2lvbmVuIgorCisjOiBnaXQtZ3VpLnNoOjM2MDcKK21zZ2lkICJSZXZlcnQgVG8gQmFzZSIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwgdGlsbCBiYXN2ZXJzaW9uZW4iCisKKyM6IGdpdC1ndWkuc2g6MzYyNQorbXNnaWQgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIlZpc3VhbGlzZXJhIMOkbmRyaW5nYXJuYSBpIHVuZGVybW9kdWxlbiIKKworIzogZ2l0LWd1aS5zaDozNjI5Cittc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiVmlzdWFsaXNlcmEgZ3JlbmVucyBoaXN0b3JpayBpIHVuZGVybW9kdWxlbiIKKworIzogZ2l0LWd1aS5zaDozNjMzCittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJWaXN1YWxpc2VyYSBhbGxhIGdyZW5hcnMgaGlzdG9yaWsgaSB1bmRlcm1vZHVsZW4iCisKKyM6IGdpdC1ndWkuc2g6MzYzOAorbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiU3RhcnRhIGdpdCBndWkgaSB1bmRlcm1vZHVsZW4iCisKKyM6IGdpdC1ndWkuc2g6MzY3MworbXNnaWQgIlVuc3RhZ2UgSHVuayBGcm9tIENvbW1pdCIKK21zZ3N0ciAiVGEgYm9ydCBkZWwgdXIgaW5jaGVja25pbmdza8O2IgorCisjOiBnaXQtZ3VpLnNoOjM2NzUKK21zZ2lkICJVbnN0YWdlIExpbmVzIEZyb20gQ29tbWl0IgorbXNnc3RyICJUYSBib3J0IHJhZGVyIHVyIGluY2hlY2tuaW5nc2vDtiIKKworIzogZ2l0LWd1aS5zaDozNjc3Cittc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgorbXNnc3RyICJUYSBib3J0IHJhZCB1ciBpbmNoZWNrbmluZ3Nrw7YiCisKKyM6IGdpdC1ndWkuc2g6MzY4MAorbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKK21zZ3N0ciAiU3TDpGxsIGRlbCBpIGluY2hlY2tuaW5nc2vDtiIKKworIzogZ2l0LWd1aS5zaDozNjgyCittc2dpZCAiU3RhZ2UgTGluZXMgRm9yIENvbW1pdCIKK21zZ3N0ciAiU3TDpGxsIHJhZGVyIGkgaW5jaGVja25pbmdza8O2IgorCisjOiBnaXQtZ3VpLnNoOjM2ODQKK21zZ2lkICJTdGFnZSBMaW5lIEZvciBDb21taXQiCittc2dzdHIgIlN0w6RsbCByYWQgaSBpbmNoZWNrbmluZ3Nrw7YiCisKKyM6IGdpdC1ndWkuc2g6MzcwOQorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiSW5pdGllcmFyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjM4NTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisiRGV0IGZpbm5zIG3DtmpsaWdhIHByb2JsZW0gbWVkIG1pbGrDtnZhcmlhYmxlci5cbiIKKyJcbiIKKyJGw7ZsamFuZGUgbWlsasO2dmFyaWFibGVyIGtvbW1lciB0cm9saWdlbiBhdHRcbiIKKyJpZ25vcmVyYXMgYXYgYWxsYSBHaXQtdW5kZXJwcm9jZXNzZXIgc29tIGvDtnJzXG4iCisiYXYgJXM6XG4iCisiXG4iCisKKyM6IGdpdC1ndWkuc2g6Mzg4MQorbXNnaWQgIiIKKyJcbiIKKyJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCisiVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgorbXNnc3RyICIiCisiXG4iCisiRGV0dGEgYmVyb3IgcMOlIGV0dCBrw6RudCBwcm9ibGVtIG1lZFxuIgorIlRjbC1iaW7DpHJlbiBzb20gZsO2bGplciBtZWQgQ3lnd2luLiIKKworIzogZ2l0LWd1aS5zaDozODg2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIkEgZ29vZCByZXBsYWNlbWVudCBmb3IgJXNcbiIKKyJpcyBwbGFjaW5nIHZhbHVlcyBmb3IgdGhlIHVzZXIubmFtZSBhbmRcbiIKKyJ1c2VyLmVtYWlsIHNldHRpbmdzIGludG8geW91ciBwZXJzb25hbFxuIgorIn4vLmdpdGNvbmZpZyBmaWxlLlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiRHUga2FuIGVyc8OkdHRhICVzXG4iCisibWVkIGF0dCBsw6RnZ2EgaW4gdsOkcmRlbiBmw7ZyIGluc3TDpGxsbmluZ2FybmFcbiIKKyJ1c2VyLm5hbWUgb2NoIHVzZXIuZW1haWwgaSBkaW4gcGVyc29ubGlnYVxuIgorIn4vLmdpdGNvbmZpZy1maWwuXG4iCisKKyM6IGxpYi9saW5lLnRjbDoxNworbXNnaWQgIkdvdG8gTGluZToiCittc2dzdHIgIkfDpSB0aWxsIHJhZDoiCisKKyM6IGxpYi9saW5lLnRjbDoyMworbXNnaWQgIkdvIgorbXNnc3RyICJHw6UiCisKKyM6IGxpYi9jb25zb2xlLnRjbDo1OQorbXNnaWQgIldvcmtpbmcuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIkFyYmV0YXIuLi4gdsOkbnRhLi4uIgorCisjOiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2NoZWNrb3V0X29wLnRjbDoxNDYgbGliL3NzaGtleS50Y2w6NTUKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MzAKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiU3TDpG5nIgorCisjOiBsaWIvY29uc29sZS50Y2w6MTg2Cittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAiTHlja2FkZXMiCisKKyM6IGxpYi9jb25zb2xlLnRjbDoyMDAKK21zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCittc2dzdHIgIkZlbDogS29tbWFuZG8gbWlzc2x5Y2thZGVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKK21zZ3N0ciAiSMOkbXRhciAlcyBmcsOlbiAlcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCittc2dzdHIgIsO2ZGVzZGlnZXJ0OiBLdW5kZSBpbnRlIHNsw6UgdXBwICVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiR3JlbmVuIFwiJXNcIiBmaW5ucyBpbnRlLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgorbXNnc3RyICJLdW5kZSBpbnRlIGtvbmZpZ3VyZXJhIGbDtnJlbmtsYWQgZ2l0LXB1bGwgZsO2ciAnJXMnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMDIgbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiR3JlbmVuIFwiJXNcIiBmaW5ucyByZWRhbi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgorIlxuIgorIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCisiQSBtZXJnZSBpcyByZXF1aXJlZC4iCittc2dzdHIgIiIKKyJHcmVuZW4gXCIlc1wiIGZpbm5zIHJlZGFuLlxuIgorIlxuIgorIkRlbiBrYW4gaW50ZSBzbmFiYnNwb2xhcyB0aWxsICVzLlxuIgorIkVuIHNhbW1hbnNsYWduaW5nIGtyw6R2cy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiU2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2luIFwiJXNcIiBzdMO2ZHMgaW50ZS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQgdXBwZGF0ZXJhIFwiJXNcIi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjc0Cittc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgorbXNnc3RyICJLw7ZvbXLDpWRldCAoaW5kZXgpIMOkciByZWRhbiBsw6VzdC4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJEZXQgc2VuYXN0ZSBpbmzDpHN0YSB0aWxsc3TDpW5kZXQgbW90c3ZhcmFyIGludGUgdGlsbHN0w6VuZGV0IGkgYXJraXZldC5cbiIKKyJcbiIKKyJFdHQgYW5uYXQgR2l0LXByb2dyYW0gaGFyIMOkbmRyYXQgYXJraXZldCBzZWRhbiBzZW5hc3RlIGF2c8O2a25pbmdlbi4gRHUgbcOlc3RlICIKKyJ1dGbDtnJhIGVuIG55IHPDtmtuaW5nIGlubmFuIGRlbiBha3R1ZWxsYSBncmVuZW4ga2FuIMOkbmRyYXMuXG4iCisiXG4iCisiU8O2a25pbmdlbiBrb21tZXIgYXR0IHN0YXJ0YXMgYXV0b21hdGlza3QgbnUuXG4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKK21zZ3N0ciAiVXBwZGF0ZXJhciBhcmJldHNrYXRhbG9nZW4gdGlsbCBcIiVzXCIuLi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Cittc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCittc2dzdHIgImZpbGVyIHV0Y2hlY2thZGUiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKK21zZ3N0ciAiQXZicnl0ZXIgdXRjaGVja25pbmcgYXYgXCIlc1wiIChzYW1tYW5zbGFnbmluZyBww6UgZmlsbml2w6Uga3LDpHZzKS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc3Cittc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCittc2dzdHIgIlNhbW1hbnNsYWduaW5nIHDDpSBmaWxuaXbDpSBrcsOkdnMuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgorbXNnc3RyICJTdGFubmFyIHDDpSBncmVuZW4gXCIlc1wiLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKK21zZ2lkICIiCisiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCisiQ2hlY2tvdXQnLiIKK21zZ3N0ciAiIgorIkR1IMOkciBpbnRlIGzDpG5ncmUgcMOlIGVuIGxva2FsIGdyZW4uXG4iCisiXG4iCisiT20gZHUgdmlsbGUgdmFyYSBww6UgZW4gZ3JlbiBza2FwYXIgZHUgZW4gbnUsIGJhc2VyYWQgcMOlIFwiRGVubmEgZnLDpW5rb3BwbGFkZSAiCisidXRjaGVja25pbmdcIi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCittc2dzdHIgIkNoZWNrYWRlIHV0IFwiJXNcIi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKK21zZ3N0ciAiIgorIk9tIGR1IMOldGVyc3TDpGxsZXIgXCIlc1wiIHRpbGwgXCIlc1wiIGfDpXIgZsO2bGphbmRlIGluY2hlY2tuaW5nYXIgZsO2cmxvcmFkZToiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Cittc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKK21zZ3N0ciAiRGV0IGthbnNrZSBpbnRlIMOkciBzw6UgZW5rZWx0IGF0dCDDpXRlcnNrYXBhIGbDtnJsb3JhZGUgaW5jaGVja25pbmdhci4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJyVzJz8iCittc2dzdHIgIsOFdGVyc3TDpGxsYSBcIiVzXCI/IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NiBsaWIvdG9vbHNfZGxnLnRjbDozMzYKK21zZ2lkICJWaXN1YWxpemUiCittc2dzdHIgIlZpc3VhbGlzZXJhIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUKK21zZ2lkICJSZXNldCIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTc5IGxpYi90cmFuc3BvcnQudGNsOjE0MSBsaWIvcmVtb3RlX2FkZC50Y2w6MzQKKyM6IGxpYi9icm93c2VyLnRjbDoyOTIgbGliL21lcmdlLnRjbDoxNzQgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzAKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NDUgbGliL29wdGlvbi50Y2w6MTI3IGxpYi90b29sc19kbGcudGNsOjQxCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMDIgbGliL3Rvb2xzX2RsZy50Y2w6MzQ1IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMgorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzcKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozNAorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQXZicnl0IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYzNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgorIlxuIgorIlRoaXMgd29ya2luZyBkaXJlY3RvcnkgaXMgb25seSBwYXJ0aWFsbHkgc3dpdGNoZWQuICBXZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCAiCisieW91ciBmaWxlcywgYnV0IGZhaWxlZCB0byB1cGRhdGUgYW4gaW50ZXJuYWwgR2l0IGZpbGUuXG4iCisiXG4iCisiVGhpcyBzaG91bGQgbm90IGhhdmUgb2NjdXJyZWQuICAlcyB3aWxsIG5vdyBjbG9zZSBhbmQgZ2l2ZSB1cC4iCittc2dzdHIgIiIKKyJLdW5kZSBpbnRlIHN0w6RsbGEgaW4gYWt0dWVsbCBncmVuLlxuIgorIlxuIgorIkFyYmV0c2thdGFsb2dlbiBoYXIgYmFyYSB2w6R4bGF0cyBkZWx2aXMuIFZpIHVwcGRhdGVyYWRlIGZpbGVybmEgdXRhbiAiCisicHJvYmxlbSwgbWVuIGt1bmRlIGludGUgdXBwZGF0ZXJhIGVuIGludGVybiBmaWwgaSBHaXQuXG4iCisiXG4iCisiRGV0dGEgc2t1bGxlIGludGUgaGEgaMOkbnQuICVzIGtvbW1lciBudSBzdMOkbmdhcyBvY2ggZ2UgdXBwLiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmV0Y2ggJXMiCittc2dzdHIgImjDpG10YSAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gJXMiCittc2dzdHIgIkjDpG10YXIgbnlhIMOkbmRyaW5nYXIgZnLDpW4gJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicmVtb3RlIHBydW5lICVzIgorbXNnc3RyICJmasOkcnJib3J0dGFnbmluZyAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKK21zZ3N0ciAiVGFyIGJvcnQgc3DDpXJhbmRlIGdyZW5hciBzb20gdGFnaXRzIGJvcnQgZnLDpW4gJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjI1Cittc2dpZCAiZmV0Y2ggYWxsIHJlbW90ZXMiCittc2dzdHIgImjDpG10YSBhbGxhIGZqw6RycmFya2l2IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIkjDpG10YXIgbnlhIMOkbmRyaW5nYXIgZnLDpW4gYWxsYSBmasOkcnJhcmtpdiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NDAKK21zZ2lkICJyZW1vdGUgcHJ1bmUgYWxsIHJlbW90ZXMiCittc2dzdHIgInJlbnNhIGFsbGEgZmrDpHJyYXJraXYiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjQxCittc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIlJlbnNhciBzcMOlcmFuZGUgZ3JlbmFyIHNvbSB0YWdpdHMgYm9ydCwgZnLDpW4gYWxsYSBmasOkcnJhcmtpdiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NTQgbGliL3RyYW5zcG9ydC50Y2w6OTIgbGliL3RyYW5zcG9ydC50Y2w6MTEwCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicHVzaCAlcyIKK21zZ3N0ciAic8OkbmQgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyBjaGFuZ2VzIHRvICVzIgorbXNnc3RyICJTw6RuZGVyIMOkbmRyaW5nYXIgdGlsbCAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCittc2dzdHIgIlNwZWdsYXIgdGlsbCAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKK21zZ3N0ciAiU8OkbmRlciAlcyAlcyB0aWxsICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMzIKK21zZ2lkICJQdXNoIEJyYW5jaGVzIgorbXNnc3RyICJTw6RuZCBncmVuYXIiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE0NworbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKK21zZ3N0ciAiS8OkbGxncmVuYXIiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2MgorbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCittc2dzdHIgIkRlc3RpbmF0aW9uc2Fya2l2IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MQorbXNnaWQgIlJlbW90ZToiCittc2dzdHIgIkZqw6RycmFya2l2OiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTg3IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NzIKK21zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgorbXNnc3RyICJHb2R0eWNrbGlnIHBsYXRzOiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MjA1Cittc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKK21zZ3N0ciAiw5Z2ZXJmw7ZyaW5nc2FsdGVybmF0aXYiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjIwNworbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgorbXNnc3RyICJUdmluZ2Egw7Z2ZXJza3Jpdm5pbmcgYXYgYmVmaW50bGlnIGdyZW4gKGthbiBrYXN0YSBib3J0IMOkbmRyaW5nYXIpIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyMTEKK21zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKK21zZ3N0ciAiQW52w6RuZCB0dW50IHBha2V0IChmw7ZyIGzDpW5nc2FtbWEgbsOkdHZlcmtzYW5zbHV0bmluZ2FyKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MjE1Cittc2dpZCAiSW5jbHVkZSB0YWdzIgorbXNnc3RyICJUYSBtZWQgdGFnZ2FyIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjAKK21zZ2lkICJBZGQgUmVtb3RlIgorbXNnc3RyICJMw6RnZyB0aWxsIGZqw6RycmFya2l2IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjUKK21zZ2lkICJBZGQgTmV3IFJlbW90ZSIKK21zZ3N0ciAiTMOkZ2cgdGlsbCBueXR0IGZqw6RycmFya2l2IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzAgbGliL3Rvb2xzX2RsZy50Y2w6MzcKK21zZ2lkICJBZGQiCittc2dzdHIgIkzDpGdnIHRpbGwiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDozOQorbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgorbXNnc3RyICJEZXRhbGplciBmw7ZyIGZqw6RycmFya2l2IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NDEgbGliL3Rvb2xzX2RsZy50Y2w6NTEgbGliL2JyYW5jaF9jcmVhdGUudGNsOjQ0Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk5hbW46IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKK21zZ2lkICJMb2NhdGlvbjoiCittc2dzdHIgIlBsYXRzOiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjYwCittc2dpZCAiRnVydGhlciBBY3Rpb24iCittc2dzdHIgIll0dGVybGlnYXJlIMOldGfDpHJkIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjMKK21zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKK21zZ3N0ciAiSMOkbXRhIG9tZWRlbGJhcnQiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2OQorbXNnaWQgIkluaXRpYWxpemUgUmVtb3RlIFJlcG9zaXRvcnkgYW5kIFB1c2giCittc2dzdHIgIkluaXRpZXJhIGZqw6RycmFya2l2IG9jaCBzw6RuZCB0aWxsIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzUKK21zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgorbXNnc3RyICJHw7ZyIGluZ2VudCBtZXIgbnUiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMDAKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgcmVtb3RlIG5hbWUuIgorbXNnc3RyICJBbmdlIGV0dCBuYW1uIGbDtnIgZmrDpHJyYXJraXZldC4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAiXCIlc1wiIGthbiBpbnRlIGFudsOkbmRhcyBzb20gbmFtbiBww6UgZmrDpHJyYXJraXZldC4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHJlbW90ZSAnJXMnIG9mIGxvY2F0aW9uICclcycuIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpGdnYSB0aWxsIGZqw6RycmFya2l2ZXQgXCIlc1wiIHDDpSBwbGF0c2VuIFwiJXNcIi4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyB0aGUgJXMiCittc2dzdHIgIkjDpG10YXIgJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgorbXNnc3RyICJWZXQgaW50ZSBodXIgYXJraXZldCBww6UgcGxhdHNlbiBcIiVzXCIgc2thbGwgaW5pdGllcmFzLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdXAgdGhlICVzIChhdCAlcykiCittc2dzdHIgIktvbmZpZ3VyZXJhciAlcyAocMOlICVzKSIKKworIzogbGliL2Jyb3dzZXIudGNsOjE3Cittc2dpZCAiU3RhcnRpbmcuLi4iCittc2dzdHIgIlN0YXJ0YXIuLi4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNworbXNnaWQgIkZpbGUgQnJvd3NlciIKK21zZ3N0ciAiRmlsYmzDpGRkcmFyZSIKKworIzogbGliL2Jyb3dzZXIudGNsOjEzMiBsaWIvYnJvd3Nlci50Y2w6MTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyAlcy4uLiIKK21zZ3N0ciAiTMOkc2VyICVzLi4uIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTkzCittc2dpZCAiW1VwIFRvIFBhcmVudF0iCittc2dzdHIgIltVcHAgdGlsbCBmw7Zyw6RsZGVyXSIKKworIzogbGliL2Jyb3dzZXIudGNsOjI3NSBsaWIvYnJvd3Nlci50Y2w6MjgyCittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKK21zZ3N0ciAiQmzDpGRkcmEgZmlsZXIgcMOlIGdyZW5lbiIKKworIzogbGliL2Jyb3dzZXIudGNsOjI4OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQyMgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTgKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3NAorbXNnaWQgIkJyb3dzZSIKK21zZ3N0ciAiQmzDpGRkcmEiCisKKyM6IGxpYi9icm93c2VyLnRjbDoyOTcgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzUgbGliL3Rvb2xzX2RsZy50Y2w6MzIxCittc2dpZCAiUmV2aXNpb24iCittc2dzdHIgIlJldmlzaW9uIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzCittc2dpZCAiIgorIkNhbm5vdCBtZXJnZSB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGFueSB0eXBlIG9mIG1lcmdlLlxuIgorbXNnc3RyICIiCisiS2FuIGludGUgc2zDpSBpaG9wIHZpZCB1dMO2a25pbmcuXG4iCisiXG4iCisiRHUgbcOlc3RlIGfDtnJhIGbDpHJkaWcgdXTDtmtuaW5nZW4gYXYgaW5jaGVja25pbmdlbiBpbm5hbiBkdSBww6Viw7ZyamFyIG7DpWdvbiAiCisic2xhZ3Mgc2FtbWFuc2xhZ25pbmcuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjcKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGEgbWVyZ2UgY2FuIGJlIHBlcmZvcm1lZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIkRldCBzZW5hc3RlIGlubMOkc3RhIHRpbGxzdMOlbmRldCBtb3RzdmFyYXIgaW50ZSB0aWxsc3TDpW5kZXQgaSBhcmtpdmV0LlxuIgorIlxuIgorIkV0dCBhbm5hdCBHaXQtcHJvZ3JhbSBoYXIgw6RuZHJhdCBhcmtpdmV0IHNlZGFuIHNlbmFzdGUgYXZzw7ZrbmluZ2VuLiBEdSBtw6VzdGUgIgorInV0ZsO2cmEgZW4gbnkgc8O2a25pbmcgaW5uYW4gZHUga2FuIHV0ZsO2cmEgZW4gc2FtbWFuc2xhZ25pbmcuXG4iCisiXG4iCisiU8O2a25pbmdlbiBrb21tZXIgYXR0IHN0YXJ0YXMgYXV0b21hdGlza3QgbnUuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCisiXG4iCisiWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCisibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorbXNnc3RyICIiCisiRHUgw6RyIG1pdHQgaSBlbiBzYW1tYW5zbGFnbmluZyBtZWQga29uZmxpa3Rlci5cbiIKKyJcbiIKKyJGaWxlbiAlcyBoYXIgc2FtbWFuc2xhZ25pbmdza29uZmxpa3Rlci5cbiIKKyJcbiIKKyJEdSBtw6VzdGUgbMO2c2EgZGVtLCBrw7ZhIGZpbGVuIG9jaCBjaGVja2EgaW4gZsO2ciBhdHQgZnVsbGJvcmRhIGRlbiBha3R1ZWxsYSAiCisic2FtbWFuc2xhZ25pbmdlbi4gTsOkciBkdSBnam9ydCBkZXQga2FuIGR1IHDDpWLDtnJqYSBlbiBueSBzYW1tYW5zbGFnbmluZy5cbiIKKworIzogbGliL21lcmdlLnRjbDo1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBpcyBtb2RpZmllZC5cbiIKKyJcbiIKKyJZb3Ugc2hvdWxkIGNvbXBsZXRlIHRoZSBjdXJyZW50IGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYSBtZXJnZS4gIERvaW5nIHNvICIKKyJ3aWxsIGhlbHAgeW91IGFib3J0IGEgZmFpbGVkIG1lcmdlLCBzaG91bGQgdGhlIG5lZWQgYXJpc2UuXG4iCittc2dzdHIgIiIKKyJEdSDDpHIgbWl0dCBpIGVuIMOkbmRyaW5nLlxuIgorIlxuIgorIkZpbGVuICVzIGhhciDDpG5kcmluZ2FyLlxuIgorIlxuIgorIkR1IGLDtnIgZnVsbGJvcmRhIGRlbiBha3R1ZWxsYSBpbmNoZWNrbmluZ2VuIGlubmFuIGR1IHDDpWLDtnJqYXIgZW4gIgorInNhbW1hbnNsYWduaW5nLiBPbSBkdSBnw7ZyIGRldCBibGlyIGRldCBlbmtsYXJlIGF0dCBhdmJyeXRhIGVuIG1pc3NseWNrYWQgIgorInNhbW1hbnNsYWduaW5nLCBvbSBkZXQgc2t1bGxlIHZhcmEgbsO2ZHbDpG5kaWd0LlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjEwOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIG9mICVzIgorbXNnc3RyICIlcyBhdiAlcyIKKworIzogbGliL21lcmdlLnRjbDoxMjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKK21zZ3N0ciAiU2zDpXIgaWhvcCAlcyBvY2ggJXMuLi4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMzCittc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCittc2dzdHIgIlNhbW1hbnNsYWduaW5nZW4gYXZzbHV0YWRlcyBmcmFtZ8OlbmdzcmlrdC4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTM1Cittc2dpZCAiTWVyZ2UgZmFpbGVkLiAgQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyByZXF1aXJlZC4iCittc2dzdHIgIlNhbW1hbnNsYWduaW5nZW4gbWlzc2x5Y2thZGVzLiBEdSBtw6VzdGUgbMO2c2Ega29uZmxpa3Rlcm5hLiIKKworIzogbGliL21lcmdlLnRjbDoxNjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBJbnRvICVzIgorbXNnc3RyICJTbMOlIGlob3AgaSAlcyIKKworIzogbGliL21lcmdlLnRjbDoxNzkKK21zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKK21zZ3N0ciAiUmV2aXNpb25lciBhdHQgc2zDpSBpaG9wIgorCisjOiBsaWIvbWVyZ2UudGNsOjIxNAorbXNnaWQgIiIKKyJDYW5ub3QgYWJvcnQgd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0LlxuIgorbXNnc3RyICIiCisiS2FuIGludGUgYXZicnl0YSB2aWQgdXTDtmtuaW5nLlxuIgorIlxuIgorIkR1IG3DpXN0ZSBnw7ZyYSBkaWcgZsOkcmRpZyBtZWQgYXR0IHV0w7ZrYSBpbmNoZWNrbmluZ2VuLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjIyNAorbXNnaWQgIiIKKyJBYm9ydCBtZXJnZT9cbiIKKyJcbiIKKyJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKK21zZ3N0ciAiIgorIkF2YnJ5dCBzYW1tYW5zbGFnbmluZz9cbiIKKyJcbiIKKyJPbSBkdSBhdmJyeXRlciBzYW1tYW5zbGFnbmluZ2VuIGtvbW1lciAqQUxMQSogZWogaW5jaGVja2FkZSDDpG5kcmluZ2FyIGF0dCBnw6UgIgorImbDtnJsb3JhZGUuXG4iCisiXG4iCisiR8OlIHZpZGFyZSBtZWQgYXR0IGF2YnJ5dGEgZGVuIGFrdHVlbGxhIHNhbW1hbnNsYWduaW5nZW4/IgorCisjOiBsaWIvbWVyZ2UudGNsOjIzMAorbXNnaWQgIiIKKyJSZXNldCBjaGFuZ2VzP1xuIgorIlxuIgorIlJlc2V0dGluZyB0aGUgY2hhbmdlcyB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKK21zZ3N0ciAiIgorIsOFdGVyc3TDpGxsIMOkbmRyaW5nYXI/XG4iCisiXG4iCisiT20gZHUgw6V0ZXJzdMOkbGxlciDDpG5kcmluZ2FybmEga29tbWVyICpBTExBKiBlaiBpbmNoZWNrYWRlIMOkbmRyaW5nYXIgYXR0IGfDpSAiCisiZsO2cmxvcmFkZS5cbiIKKyJcbiIKKyJHw6UgdmlkYXJlIG1lZCBhdHQgw6V0ZXJzdMOkbGxhIGRlIGFrdHVlbGxhIMOkbmRyaW5nYXJuYT8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjQxCittc2dpZCAiQWJvcnRpbmciCittc2dzdHIgIkF2YnJ5dGVyIgorCisjOiBsaWIvbWVyZ2UudGNsOjI0MQorbXNnaWQgImZpbGVzIHJlc2V0IgorbXNnc3RyICJmaWxlciDDpXRlcnN0w6RsbGRhIgorCisjOiBsaWIvbWVyZ2UudGNsOjI2OQorbXNnaWQgIkFib3J0IGZhaWxlZC4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBhdmJyeXRhLiIKKworIzogbGliL21lcmdlLnRjbDoyNzEKK21zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCittc2dzdHIgIkF2YnJ5dG5pbmcgZnVsbGJvcmRhZC4gUmVkby4iCisKKyM6IGxpYi90b29scy50Y2w6NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCittc2dzdHIgIkbDtnIgYXR0IHN0YXJ0YSAlcyBtw6VzdGUgZHUgdsOkbGphIGVuIGZpbC4iCisKKyM6IGxpYi90b29scy50Y2w6OTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICUxJHMgb24gZmlsZSBcIiUyJHNcIj8iCittc2dzdHIgIsOEciBkdSBzw6RrZXIgcMOlIGF0dCBkdSB2aWxsIHN0YXJ0YSAlMSRzIG1lZCBmaWxlbiBcIiUyJHNcIj8iCisKKyM6IGxpYi90b29scy50Y2w6OTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKK21zZ3N0ciAiw4RyIGR1IHPDpGtlciBww6UgYXR0IGR1IHZpbGwgc3RhcnRhICVzPyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sOiAlcyIKK21zZ3N0ciAiVmVya3R5ZzogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUnVubmluZzogJXMiCittc2dzdHIgIkV4ZWt2ZXJhcjogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKK21zZ3N0ciAiVmVya3R5Z2V0IGF2c2x1dGFkZXMgZnJhbWfDpW5nc3Jpa3Q6ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjE1NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgZmFpbGVkOiAlcyIKK21zZ3N0ciAiVmVya3R5Z2V0IG1pc3NseWNrYWRlczogJXMiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE2IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjIxCittc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICJDaGVja2EgdXQgZ3JlbiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjYKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAiQ2hlY2thIHV0IgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvb3B0aW9uLnRjbDozMTAgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5Cittc2dpZCAiT3B0aW9ucyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDIgbGliL2JyYW5jaF9jcmVhdGUudGNsOjkyCittc2dpZCAiRmV0Y2ggVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICJIw6RtdGEgc3DDpXJhbmRlIGdyZW4iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ3Cittc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgorbXNnc3RyICJLb3BwbGEgYm9ydCBmcsOlbiBsb2thbCBncmVuIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKK21zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJTdGF2bmluZ3Nrb250cm9sbHByb2dyYW1tZXQgc3TDtmRzIGludGUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJTdGF2bmluZ3Nrb250cm9sbCDDpHIgZWogdGlsbGfDpG5nbGlnIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NjgKK21zZ2lkICJJbnZhbGlkIHNwZWxsIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIk9naWx0aWcgaW5zdMOkbGxuaW5nIGbDtnIgc3Rhdm5pbmdza29udHJvbGwiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydGluZyBkaWN0aW9uYXJ5IHRvICVzLiIKK21zZ3N0ciAiw4V0ZXJzdMOkbGxlciBvcmRsaXN0YW4gdGlsbCAlcy4iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MworbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCittc2dzdHIgIlN0YXZuaW5nc2tvbnRyb2xsIG1pc3NseWNrYWRlcyB0eXN0IHZpZCBzdGFydCIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCittc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIlN0YXZuaW5nc2tvbnRyb2xscHJvZ3JhbW1ldCBrw6RubnMgaW50ZSBpZ2VuIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTg2Cittc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCittc2dzdHIgIkluZ2EgZsO2cnNsYWciCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKK21zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIk92w6RudGF0IGZpbHNsdXQgZnLDpW4gc3Rhdm5pbmdza29udHJvbGwiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKK21zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKK21zZ3N0ciAiU3Rhdm5pbmdza29udHJvbGwgbWlzc2x5Y2thZGVzIgorCisjOiBsaWIvc3RhdHVzX2Jhci50Y2w6ODcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgorbXNnc3RyICIlcy4uLiAlKmkgYXYgJSppICVzICglM2klJSkiCisKKyM6IGxpYi9kaWZmLnRjbDo3NworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKKyJcbiIKKyJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCAiCisidGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlICIKKyJ0aGUgc2FtZSBzdGF0ZS4iCittc2dzdHIgIiIKKyJIaXR0YWRlIGluZ2Egc2tpbGxuYWRlci5cbiIKKyJcbiIKKyIlcyBpbm5laMOlbGxlciBpbmdhIMOkbmRyaW5nYXIuXG4iCisiXG4iCisiTW9kaWZpZXJpbmdzZGF0dW0gZsO2ciBmaWxlbiB1cHBkYXRlcmFkZXMgYXYgZXR0IGFubmF0IHByb2dyYW0sIG1lbiAiCisiaW5uZWjDpWxsZXQgaSBmaWxlbiBoYXIgaW50ZSDDpG5kcmF0cy5cbiIKKyJcbiIKKyJFbiBzw7ZrbmluZyBrb21tZXIgYXV0b21hdGlza3QgYXR0IHN0YXJ0YXMgZsO2ciBhdHQgaGl0dGEgYW5kcmEgZmlsZXIgc29tIGthbiAiCisidmFyYSBpIHNhbW1hIHRpbGxzdMOlbmQuIgorCisjOiBsaWIvZGlmZi50Y2w6MTE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgorbXNnc3RyICJMw6RzZXIgZGlmZmVyZW5zIGbDtnIgJXMuLi4iCisKKyM6IGxpYi9kaWZmLnRjbDoxNDAKK21zZ2lkICIiCisiTE9DQUw6IGRlbGV0ZWRcbiIKKyJSRU1PVEU6XG4iCittc2dzdHIgIiIKKyJMT0tBTDogYm9ydHRhZ2VuXG4iCisiRkrDhFJSOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTQ1Cittc2dpZCAiIgorIlJFTU9URTogZGVsZXRlZFxuIgorIkxPQ0FMOlxuIgorbXNnc3RyICIiCisiRkrDhFJSOiBib3J0dGFnZW5cbiIKKyJMT0tBTDpcbiIKKworIzogbGliL2RpZmYudGNsOjE1MgorbXNnaWQgIkxPQ0FMOlxuIgorbXNnc3RyICJMT0tBTDpcbiIKKworIzogbGliL2RpZmYudGNsOjE1NQorbXNnaWQgIlJFTU9URTpcbiIKK21zZ3N0ciAiRkrDhFJSOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjE3IGxpYi9kaWZmLnRjbDozNTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGlzcGxheSAlcyIKK21zZ3N0ciAiS2FuIGludGUgdmlzYSAlcyIKKworIzogbGliL2RpZmYudGNsOjIxOAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCittc2dzdHIgIkZlbCB2aWQgbMOkc25pbmcgYXYgZmlsOiIKKworIzogbGliL2RpZmYudGNsOjIyNQorbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKK21zZ3N0ciAiR2l0YXJraXYgKHVuZGVycHJvamVrdCkiCisKKyM6IGxpYi9kaWZmLnRjbDoyMzcKK21zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCittc2dzdHIgIiogQmluw6RyZmlsICh2aXNhciBpbnRlIGlubmVow6VsbGV0KS4iCisKKyM6IGxpYi9kaWZmLnRjbDoyNDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiKiBVbnRyYWNrZWQgZmlsZSBpcyAlZCBieXRlcy5cbiIKKyIqIFNob3dpbmcgb25seSBmaXJzdCAlZCBieXRlcy5cbiIKK21zZ3N0ciAiIgorIiogRGVuIG9zcMOlcmFkZSBmaWxlbiDDpHIgJWQgYnl0ZS5cbiIKKyIqIFZpc2FyIGVuZGFzdCBpbmxlZGFuZGUgJWQgYnl0ZS5cbiIKKworIzogbGliL2RpZmYudGNsOjI0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIqIFVudHJhY2tlZCBmaWxlIGNsaXBwZWQgaGVyZSBieSAlcy5cbiIKKyIqIFRvIHNlZSB0aGUgZW50aXJlIGZpbGUsIHVzZSBhbiBleHRlcm5hbCBlZGl0b3IuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqIERlbiBvc3DDpXJhZGUgZmlsZW4ga2xpcHB0ZXMgaMOkciBhdiAlcy5cbiIKKyIqIEbDtnIgYXR0IHNlIGhlbGEgZmlsZW4sIGFudsOkbmQgZXR0IGV4dGVybnQgcmVkaWdlcmluZ3Nwcm9ncmFtLlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MzU2IGxpYi9ibGFtZS50Y2w6MTEyOAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCittc2dzdHIgIkZlbCB2aWQgaW5sw6RzbmluZyBhdiBkaWZmZXJlbnM6IgorCisjOiBsaWIvZGlmZi50Y2w6NTc4Cittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkt1bmRlIGludGUgdGEgYm9ydCBkZW4gdmFsZGEgZGVsZW4gZnLDpW4ga8O2bi4iCisKKyM6IGxpYi9kaWZmLnRjbDo1ODUKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkt1bmRlIGludGUgbMOkZ2dhIHRpbGwgZGVuIHZhbGRhIGRlbGVuIHRpbGwga8O2bi4iCisKKyM6IGxpYi9kaWZmLnRjbDo2NjQKK21zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0YSBib3J0IGRlbiB2YWxkYSByYWRlbiBmcsOlbiBrw7ZuLiIKKworIzogbGliL2RpZmYudGNsOjY3MgorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6RnZ2EgdGlsbCBkZW4gdmFsZGEgcmFkZW4gdGlsbCBrw7ZuLiIKKworIzogbGliL3JlbW90ZS50Y2w6MjAwCittc2dpZCAiUHVzaCB0byIKK21zZ3N0ciAiU8OkbmQgdGlsbCIKKworIzogbGliL3JlbW90ZS50Y2w6MjE4Cittc2dpZCAiUmVtb3ZlIFJlbW90ZSIKK21zZ3N0ciAiVGEgYm9ydCBmasOkcnJhcmtpdiIKKworIzogbGliL3JlbW90ZS50Y2w6MjIzCittc2dpZCAiUHJ1bmUgZnJvbSIKK21zZ3N0ciAiVGEgYm9ydCBmcsOlbiIKKworIzogbGliL3JlbW90ZS50Y2w6MjI4Cittc2dpZCAiRmV0Y2ggZnJvbSIKK21zZ3N0ciAiSMOkbXRhIGZyw6VuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQxCittc2dpZCAiU2VsZWN0IgorbXNnc3RyICJWw6RsaiIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo1NQorbXNnaWQgIkZvbnQgRmFtaWx5IgorbXNnc3RyICJUZWNrZW5zbml0dHNmYW1pbGoiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzYKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgIlN0b3JsZWsiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTMKK21zZ2lkICJGb250IEV4YW1wbGUiCittc2dzdHIgIkV4ZW1wZWwiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTA1Cittc2dpZCAiIgorIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgorIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCittc2dzdHIgIiIKKyJEZXR0YSDDpHIgZW4gZXhlbXBlbHRleHQuXG4iCisiT20gZHUgdHlja2VyIG9tIGRlbiBow6RyIHRleHRlbiBrYW4gZGVuIHZhcmEgZGl0dCB0ZWNrZW5zbml0dC4iCisKKyM6IGxpYi9vcHRpb24udGNsOjExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAiRGVuIGdsb2JhbGEgdGVja2Vua29kbmluZ2VuIFwiJXNcIiDDpHIgb2dpbHRpZyIKKworIzogbGliL29wdGlvbi50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAiQXJraXZldHMgdGVja2Vua29kbmluZyBcIiVzXCIgw6RyIG9naWx0aWciCisKKyM6IGxpYi9vcHRpb24udGNsOjExOQorbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCittc2dzdHIgIsOFdGVyc3TDpGxsIHN0YW5kYXJkdsOkcmRlbiIKKworIzogbGliL29wdGlvbi50Y2w6MTIzCittc2dpZCAiU2F2ZSIKK21zZ3N0ciAiU3BhcmEiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIFJlcG9zaXRvcnkiCittc2dzdHIgIkFya2l2ZXQgJXMiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzNAorbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCittc2dzdHIgIkdsb2JhbHQgKGFsbGEgYXJraXYpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDAKK21zZ2lkICJVc2VyIE5hbWUiCittc2dzdHIgIkFudsOkbmRhcm5hbW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MQorbXNnaWQgIkVtYWlsIEFkZHJlc3MiCittc2dzdHIgIkUtcG9zdGFkcmVzcyIKKworIzogbGliL29wdGlvbi50Y2w6MTQzCittc2dpZCAiU3VtbWFyaXplIE1lcmdlIENvbW1pdHMiCittc2dzdHIgIlN1bW1lcmEgc2FtbWFuc2xhZ25pbmdzaW5jaGVja25pbmdhciIKKworIzogbGliL29wdGlvbi50Y2w6MTQ0Cittc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgorbXNnc3RyICJQcmF0c2FtaGV0IGbDtnIgc2FtbWFuc2xhZ25pbmdhciIKKworIzogbGliL29wdGlvbi50Y2w6MTQ1Cittc2dpZCAiU2hvdyBEaWZmc3RhdCBBZnRlciBNZXJnZSIKK21zZ3N0ciAiVmlzYSBkaWZmc3RhdGlzdGlrIGVmdGVyIHNhbW1hbnNsYWduaW5nIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDYKK21zZ2lkICJVc2UgTWVyZ2UgVG9vbCIKK21zZ3N0ciAiQW52w6RuZCB2ZXJrdHlnIGbDtnIgc2FtbWFuc2xhZ25pbmciCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OAorbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCittc2dzdHIgIkxpdGEgcMOlIGZpbMOkbmRyaW5nc3RpZHNzdMOkbXBsYXIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OQorbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKK21zZ3N0ciAiU3TDpGRhIHNww6VyYWRlIGdyZW5hciB2aWQgaMOkbXRuaW5nIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTAKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2hlcyIKK21zZ3N0ciAiTWF0Y2hhIHNww6VyYWRlIGdyZW5hciIKKworIzogbGliL29wdGlvbi50Y2w6MTUxCittc2dpZCAiVXNlIFRleHRjb252IEZvciBEaWZmcyBhbmQgQmxhbWVzIgorbXNnc3RyICJBbnbDpG5kIFRleHRjb252IGbDtnIgZGlmZiBvY2gga2xhbmRyaW5nIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTIKK21zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKK21zZ3N0ciAiS2xhbmRyYSBrb3BpZXJpbmcgYmFyYSBpIMOkbmRyYWRlIGZpbGVyIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTMKK21zZ2lkICJNYXhpbXVtIExlbmd0aCBvZiBSZWNlbnQgUmVwb3NpdG9yaWVzIExpc3QiCittc2dzdHIgIk1heCBsw6RuZ2QgZsO2ciBsaXN0YSDDtnZlciB0aWRpZ2FyZSBhcmtpdiIKKworIzogbGliL29wdGlvbi50Y2w6MTU0Cittc2dpZCAiTWluaW11bSBMZXR0ZXJzIFRvIEJsYW1lIENvcHkgT24iCittc2dzdHIgIk1pbnN0YSBhbnRhbCB0ZWNrZW4gYXR0IGtsYW5kcmEga29waWVyaW5nIGbDtnIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NQorbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgorbXNnc3RyICJIaXN0b3Jpa3JhZGllIGbDtnIga2xhbmRyaW5nIChkYWdhcikiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NgorbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCittc2dzdHIgIkFudGFsIHJhZGVyIHNhbW1hbmhhbmcgaSBkaWZmZXJlbnNlciIKKworIzogbGliL29wdGlvbi50Y2w6MTU3Cittc2dpZCAiQWRkaXRpb25hbCBEaWZmIFBhcmFtZXRlcnMiCittc2dzdHIgIll0dGVybGlnYXJlIGRpZmYtcGFyYW1ldHJhciIKKworIzogbGliL29wdGlvbi50Y2w6MTU4Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKK21zZ3N0ciAiVGV4dGJyZWRkIGbDtnIgaW5jaGVja25pbmdzbWVkZGVsYW5kZSIKKworIzogbGliL29wdGlvbi50Y2w6MTU5Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICJNYWxsIGbDtnIgbmFtbiBww6UgbnlhIGdyZW5hciIKKworIzogbGliL29wdGlvbi50Y2w6MTYwCittc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgorbXNnc3RyICJTdGFuZGFyZHRlY2tlbmtvZG5pbmcgZsO2ciBmaWxpbm5laMOlbGwiCisKKyM6IGxpYi9vcHRpb24udGNsOjE2MQorbXNnaWQgIldhcm4gYmVmb3JlIGNvbW1pdHRpbmcgdG8gYSBkZXRhY2hlZCBoZWFkIgorbXNnc3RyICJWYXJuYSBmw7ZyIGluY2hlY2tuaW5nIHDDpSBmcsOlbmtvcHBsYXQgaHV2dWQiCisKKyM6IGxpYi9vcHRpb24udGNsOjE2MgorbXNnaWQgIlN0YWdpbmcgb2YgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJLw7ZhIG9zcMOlcmFkZSBmaWxlciIKKworIzogbGliL29wdGlvbi50Y2w6MTYzCittc2dpZCAiU2hvdyB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIlZpc2Egb3Nww6VyYWRlIGZpbGVyIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNjQKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAiQmxhbmtzdGVnIGbDtnIgdGFidWxhdG9ydGVja2VuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMTAKK21zZ2lkICJDaGFuZ2UiCittc2dzdHIgIsOEbmRyYSIKKworIzogbGliL29wdGlvbi50Y2w6MjU0Cittc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCittc2dzdHIgIlN0YXZuaW5nc29yZGxpc3RhOiIKKworIzogbGliL29wdGlvbi50Y2w6Mjg0Cittc2dpZCAiQ2hhbmdlIEZvbnQiCittc2dzdHIgIkJ5dCB0ZWNrZW5zbml0dCIKKworIzogbGliL29wdGlvbi50Y2w6Mjg4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hvb3NlICVzIgorbXNnc3RyICJWw6RsaiAlcyIKKworIzogbGliL29wdGlvbi50Y2w6Mjk0Cittc2dpZCAicHQuIgorbXNnc3RyICJwLiIKKworIzogbGliL29wdGlvbi50Y2w6MzA4Cittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgIkluc3TDpGxsbmluZ2FyIgorCisjOiBsaWIvb3B0aW9uLnRjbDozNDUKK21zZ2lkICJGYWlsZWQgdG8gY29tcGxldGVseSBzYXZlIG9wdGlvbnM6IgorbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCBoZWx0IHNwYXJhIGFsdGVybmF0aXY6IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo4Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKK21zZ3N0ciAiVHZpbmdhIGzDtnNuaW5nIGF0dCBhbnbDpG5kYSBiYXN2ZXJzaW9uZW4/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo5Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCittc2dzdHIgIlR2aW5nYSBsw7ZzbmluZyBhdHQgYW52w6RuZGEgZGVuIGFrdHVlbGxhIGdyZW5lbj8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKK21zZ3N0ciAiVHZpbmdhIGzDtnNuaW5nIGF0dCBhbnbDpG5kYSBkZW4gYW5kcmEgZ3JlbmVuPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKKyJcbiIKKyIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgorIlxuIgorIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCittc2dzdHIgIiIKKyJPYnNlcnZlcmEgYXR0IGRpZmZlbiBlbmRhc3QgdmlzYXIgZGUgw6RuZHJpbmdhciBzb20gc3TDpXIgaSBrb25mbGlrdC5cbiIKKyJcbiIKKyIlcyBrb21tZXIgYXR0IHNrcml2YXMgw7Z2ZXIuXG4iCisiXG4iCisiRHUgbcOlc3RlIHN0YXJ0YSBvbSBzYW1tYW5zbGFnbmluZ2VuIGbDtnIgYXR0IGfDtnJhIGRlbiBow6RyIG9wZXJhdGlvbmVuIG9nam9yZC4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBzZWVtcyB0byBoYXZlIHVucmVzb2x2ZWQgY29uZmxpY3RzLCBzdGlsbCBzdGFnZT8iCittc2dzdHIgIkZpbGVuICVzIHZlcmthciBpbm5laMOlbGxhIG9sw7ZzdGEga29uZmxpa3Rlci4gVmlsbCBkdSBrw7ZhIMOkbmTDpT8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWRkaW5nIHJlc29sdXRpb24gZm9yICVzIgorbXNnc3RyICJMw6RnZ2VyIHRpbGwgbMO2c25pbmcgZsO2ciAlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQxCittc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgorbXNnc3RyICJLYW4gaW50ZSBsw7ZzYSBib3J0dGFnbmluZ3MtIGVsbGVyIGzDpG5ra29uZmxpa3RlciBtZWQgZXR0IHZlcmt0eWciCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0NgorbXNnaWQgIkNvbmZsaWN0IGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIktvbmZsaWt0ZmlsIGV4aXN0ZXJhciBpbnRlIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKK21zZ3N0ciAiSW50ZSBldHQgZ3JhZmlza3QgdmVya3R5ZyBmw7ZyIHNhbW1hbnNsYWduaW5nOiAlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6Mjc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgorbXNnc3RyICJWZXJrdHlnZXQgXCIlc1wiIGbDtnIgc2FtbWFuc2xhZ25pbmcgc3TDtmRzIGludGUiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjMxMAorbXNnaWQgIk1lcmdlIHRvb2wgaXMgYWxyZWFkeSBydW5uaW5nLCB0ZXJtaW5hdGUgaXQ/IgorbXNnc3RyICJWZXJrdHlnZXQgZsO2ciBzYW1tYW5zbGFnbmluZyBrw7ZycyByZWRhbi4gVmlsbCBkdSBhdnNsdXRhIGRldD8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjMzMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciByZXRyaWV2aW5nIHZlcnNpb25zOlxuIgorIiVzIgorbXNnc3RyICIiCisiRmVsIHZpZCBow6RtdG5pbmcgYXYgdmVyc2lvbmVyOlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHRoZSBtZXJnZSB0b29sOlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiS3VuZGUgaW50ZSBzdGFydGEgdmVya3R5ZyBmw7ZyIHNhbW1hbnNsYWduaW5nOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNTQKK21zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCittc2dzdHIgIkvDtnIgdmVya3R5ZyBmw7ZyIHNhbW1hbnNsYWduaW5nLi4uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozODIgbGliL21lcmdldG9vbC50Y2w6MzkwCittc2dpZCAiTWVyZ2UgdG9vbCBmYWlsZWQuIgorbXNnc3RyICJWZXJrdHlnZXQgZsO2ciBzYW1tYW5zbGFnbmluZyBtaXNzbHlja2FkZXMuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgorbXNnaWQgIkFkZCBUb29sIgorbXNnc3RyICJMw6RnZyB0aWxsIHZlcmt0eWciCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI4Cittc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCittc2dzdHIgIkzDpGdnIHRpbGwgbnl0dCB2ZXJrdHlnc2tvbW1hbmRvIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNAorbXNnaWQgIkFkZCBnbG9iYWxseSIKK21zZ3N0ciAiTMOkZ2cgdGlsbCBnbG9iYWx0IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0NgorbXNnaWQgIlRvb2wgRGV0YWlscyIKK21zZ3N0ciAiRGV0YWxqZXIgZsO2ciB2ZXJrdHlnIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0OQorbXNnaWQgIlVzZSAnLycgc2VwYXJhdG9ycyB0byBjcmVhdGUgYSBzdWJtZW51IHRyZWU6IgorbXNnc3RyICJBbnbDpG5kIFwiL1wiLWF2ZGVsYXJlIGbDtnIgYXR0IHNrYXBhIGV0dCB1bmRlcm1lbnl0csOkZDoiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjYwCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIktvbW1hbmRvOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzEKK21zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgorbXNnc3RyICJWaXNhIGRpYWxvZyBpbm5hbiBwcm9ncmFtbWV0IHN0YXJ0YXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjc3Cittc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCittc2dzdHIgIkJlIGFudsOkbmRhcmVuIHbDpGxqYSBlbiB2ZXJzaW9uIChzw6R0dGVyICRSRVZJU0lPTikiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjgyCittc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCittc2dzdHIgIkJlIGFudsOkbmRhcmVuIG9tIHl0dGVybGlnYXJlIHBhcmFtZXRyYXIgKHPDpHR0ZXIgJEFSR1MpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4OQorbXNnaWQgIkRvbid0IHNob3cgdGhlIGNvbW1hbmQgb3V0cHV0IHdpbmRvdyIKK21zZ3N0ciAiVmlzYSBpbnRlIGtvbW1hbmRvdHMgdXRkYXRhZsO2bnN0ZXIiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjk0Cittc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKK21zZ3N0ciAiS8O2ciBlbmRhc3Qgb20gZW4gZGlmZiBoYXIgbWFya2VyYXRzICgkRklMRU5BTUUgw6RyIGludGUgdG9tdCkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjExOAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCittc2dzdHIgIkFuZ2UgZXR0IG5hbW4gZsO2ciB2ZXJrdHlnZXQuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJWZXJrdHlnZXQgXCIlc1wiIGZpbm5zIHJlZGFuLiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhZGQgdG9vbDpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgbMOkZ2dhIHRpbGwgdmVya3R5Z2V0OlxuIgorIiVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxODcKK21zZ2lkICJSZW1vdmUgVG9vbCIKK21zZ3N0ciAiVGEgYm9ydCB2ZXJrdHlnIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTMKK21zZ2lkICJSZW1vdmUgVG9vbCBDb21tYW5kcyIKK21zZ3N0ciAiVGEgYm9ydCB2ZXJrdHlnc2tvbW1hbmRvbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk4Cittc2dpZCAiUmVtb3ZlIgorbXNnc3RyICJUYSBib3J0IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzEKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIoQmzDpXR0IGFuZ2VyIHZlcmt0eWcgbG9rYWxhIGbDtnIgYXJraXZldCkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI5MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1biBDb21tYW5kOiAlcyIKK21zZ3N0ciAiS8O2ciBrb21tYW5kb3Q6ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMDYKK21zZ2lkICJBcmd1bWVudHMiCittc2dzdHIgIkFyZ3VtZW50IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNDEKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGxpYi9zZWFyY2gudGNsOjQ4Cittc2dpZCAiRmluZDoiCittc2dzdHIgIlPDtms6IgorCisjOiBsaWIvc2VhcmNoLnRjbDo1MAorbXNnaWQgIk5leHQiCittc2dzdHIgIk7DpHN0YSIKKworIzogbGliL3NlYXJjaC50Y2w6NTEKK21zZ2lkICJQcmV2IgorbXNnc3RyICJGw7ZyZWciCisKKyM6IGxpYi9zZWFyY2gudGNsOjUyCittc2dpZCAiUmVnRXhwIgorbXNnc3RyICJSZWcudXR0ci4iCisKKyM6IGxpYi9zZWFyY2gudGNsOjU0Cittc2dpZCAiQ2FzZSIKK21zZ3N0ciAiU2tpZnRsw6RnZSIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE1IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMworbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgIkJ5dCBuYW1uIHDDpSBncmVuIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjgKK21zZ2lkICJSZW5hbWUiCittc2dzdHIgIkJ5dCBuYW1uIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzgKK21zZ2lkICJCcmFuY2g6IgorbXNnc3RyICJHcmVuOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjQ2Cittc2dpZCAiTmV3IE5hbWU6IgorbXNnc3RyICJOeXR0IG5hbW46IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6ODEKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCittc2dzdHIgIlbDpGxqIGVuIGdyZW4gYXR0IGJ5dGEgbmFtbiBww6UuIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTIgbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1NAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBicmFuY2ggbmFtZS4iCittc2dzdHIgIkFuZ2UgZXR0IG5hbW4gZsO2ciBncmVuZW4uIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTEyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiXCIlc1wiIGthbiBpbnRlIGFudsOkbmRhcyBzb20gbmFtbiBww6UgZ3JlbmVuLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjEyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCittc2dzdHIgIkt1bmRlIGludGUgYnl0YSBuYW1uIHDDpSBcIiVzXCIuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgorbXNnc3RyICJUYSBib3J0IGdyZW4gZnLDpW4gZmrDpHJyYXJraXYiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDgKK21zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCittc2dzdHIgIkZyw6VuIGFya2l2IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg4Cittc2dpZCAiQnJhbmNoZXMiCittc2dzdHIgIkdyZW5hciIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTAKK21zZ2lkICJEZWxldGUgT25seSBJZiIKK21zZ3N0ciAiVGEgZW5kYXN0IGJvcnQgb20iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTEyCittc2dpZCAiTWVyZ2VkIEludG86IgorbXNnc3RyICJTYW1tYW5zbGFnZW4gaToiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTIwIGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MworbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKK21zZ3N0ciAiQWxsdGlkICh1dGbDtnIgaW50ZSBzYW1tYW5zbGFnbmluZ3N0ZXN0KSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTMKK21zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCittc2dzdHIgIkVuIGdyZW4ga3LDpHZzIGbDtnIgXCJTYW1tYW5zbGFnZW4gaVwiLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6XG4iCisiXG4iCisiIC0gJXMiCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgZ3JlbmFyIGhhciBpbnRlIGhlbHQgc2xhZ2l0cyBzYW1tYW4gaSAlczpcbiIKKyJcbiIKKyIgLSAlcyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxOTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSAiCisibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCittc2dzdHIgIiIKKyJFbiBlbGxlciBmbGVyYSBhdiBzYW1tYW5zbGFnbmluZ3N0ZXN0ZXJuYSBtaXNzbHlja2FkZXMgZWZ0ZXJzb20gZHUgaW50ZSBoYXIgIgorImjDpG10YXQgZGUgbsO2ZHbDpG5kaWdhIGluY2hlY2tuaW5nYXJuYS4gRsO2cnPDtmsgaMOkbXRhIGZyw6VuICVzIGbDtnJzdC4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjA4Cittc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgorbXNnc3RyICJWw6RsaiBlbiBlbGxlciBmbGVyYSBncmVuYXIgYXR0IHRhIGJvcnQuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1Cittc2dpZCAiIgorIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCisiXG4iCisiRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCittc2dzdHIgIiIKKyJEZXQga2FuIHZhcmEgc3bDpXJ0IGF0dCDDpXRlcnN0w6RsbGEgYm9ydHRhZ25hIGdyZW5hci5cbiIKKyJcbiIKKyJUYSBib3J0IGRlIHZhbGRhIGdyZW5hcm5hPyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgorbXNnc3RyICJUYXIgYm9ydCBncmVuYXIgZnLDpW4gJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzAwCittc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCittc2dzdHIgIkluZ2V0IGFya2l2IG1hcmtlcmF0LiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozMDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTY2FubmluZyAlcy4uLiIKK21zZ3N0ciAiU8O2a2VyICVzLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMzCittc2dpZCAiR2l0IEd1aSIKK21zZ3N0ciAiR2l0IEd1aSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQxMgorbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKK21zZ3N0ciAiU2thcGEgbnl0dCBhcmtpdiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5OAorbXNnaWQgIk5ldy4uLiIKK21zZ3N0ciAiTnl0dC4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTYKK21zZ2lkICJDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICJLbG9uYSBiZWZpbnRsaWd0IGFya2l2IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExNgorbXNnaWQgIkNsb25lLi4uIgorbXNnc3RyICJLbG9uYS4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY0Cittc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICLDlnBwbmEgYmVmaW50bGlndCBhcmtpdiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMjkKK21zZ2lkICJPcGVuLi4uIgorbXNnc3RyICLDlnBwbmEuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTQyCittc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKK21zZ3N0ciAiU2VuYXN0ZSBhcmtpdmVuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE0OAorbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgorbXNnc3RyICLDlnBwbmEgdGlkaWdhcmUgYXJraXY6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJLdW5kZSBpbnRlIHNrYXBhIGFya2l2ZXQgJXM6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQwNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzMKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIlNrYXBhIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQxNworbXNnaWQgIkRpcmVjdG9yeToiCittc2dzdHIgIkthdGFsb2c6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU3MworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDk4Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkiCittc2dzdHIgIkdpdGFya2l2IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkthdGFsb2dlbiAlcyBmaW5ucyByZWRhbi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkZpbGVuICVzIGZpbm5zIHJlZGFuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTEKK21zZ2lkICJDbG9uZSIKK21zZ3N0ciAiS2xvbmEiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA0Cittc2dpZCAiU291cmNlIExvY2F0aW9uOiIKK21zZ3N0ciAiUGxhdHMgZsO2ciBrw6RsbGtvZDoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTEzCittc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCittc2dzdHIgIk3DpWxrYXRhbG9nOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjMKK21zZ2lkICJDbG9uZSBUeXBlOiIKK21zZ3N0ciAiVHlwIGF2IGtsb246IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyOAorbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKK21zZ3N0ciAiU3RhbmRhcmQgKHNuYWJiLCBzZW1pcmVkdW5kYW50LCBow6VyZGEgbMOkbmthcikiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTMzCittc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgorbXNnc3RyICJGdWxsIGtvcGlhIChsw6VuZ3NhbW1hcmUsIHJlZHVuZGFudCBzw6RrZXJoZXRza29waWEpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzOAorbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgorbXNnc3RyICJEZWxhZCAoc25hYmJhc3QsIHJla29tbWVuZGVyYXMgZWosIGluZ2VuIHPDpGtlcmhldHNrb3BpYSkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTQ1Cittc2dpZCAiUmVjdXJzaXZlbHkgY2xvbmUgc3VibW9kdWxlcyB0b28iCittc2dzdHIgIktsb25hIMOkdmVuIHJla3Vyc2l2dCB1bmRlcm1vZHVsZXIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTc5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc3MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg0MgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTA0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTExMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAiSW50ZSBldHQgR2l0YXJraXY6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNQorbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiU3RhbmRhcmQgw6RyIGVuZGFzdCB0aWxsZ8OkbmdsaWd0IGbDtnIgbG9rYWxhIGFya2l2LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTkKK21zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJEZWxhdCDDpHIgZW5kYXN0IHRpbGxnw6RuZ2xpZ3QgZsO2ciBsb2thbGEgYXJraXYuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiUGxhdHNlbiAlcyBmaW5ucyByZWRhbi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjUxCittc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCittc2dzdHIgIkt1bmRlIGludGUga29uZmlndXJlcmEgdXJzcHJ1bmciCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjYzCittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUsOka25hciBvYmpla3QiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY0Cittc2dpZCAiYnVja2V0cyIKK21zZ3N0ciAiaGlua2FyIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBrb3BpZXJhIG9iamVrdC9pbmZvL2FsdGVybmF0aXY6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCittc2dzdHIgIkluZ2VudGluZyBhdHQga2xvbmEgZnLDpW4gJXMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk0MAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NTIKK21zZ2lkICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iCittc2dzdHIgIkdyZW5lbiBcIm1hc3RlclwiIGhhciBpbnRlIGluaXRpZXJhdHMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjczOQorbXNnaWQgIkhhcmRsaW5rcyBhcmUgdW5hdmFpbGFibGUuICBGYWxsaW5nIGJhY2sgdG8gY29weWluZy4iCittc2dzdHIgIkjDpXJkYSBsw6Rua2FyIMOkciBpbnRlIHRpbGxnw6RuZ2xpZ2EuIEZhbGxlciB0aWxsYmFrYSBww6Uga29waWVyaW5nLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGZyb20gJXMiCittc2dzdHIgIktsb25hciBmcsOlbiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODIKK21zZ2lkICJDb3B5aW5nIG9iamVjdHMiCittc2dzdHIgIktvcGllcmFyIG9iamVrdCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODMKK21zZ2lkICJLaUIiCittc2dzdHIgIktpQiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIGtvcGllcmEgb2JqZWt0OiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTcKK21zZ2lkICJMaW5raW5nIG9iamVjdHMiCittc2dzdHIgIkzDpG5rYXIgb2JqZWt0IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxOAorbXNnaWQgIm9iamVjdHMiCittc2dzdHIgIm9iamVrdCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBow6VyZGzDpG5rYSBvYmpla3Q6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg4MQorbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIkt1bmRlIGludGUgaMOkbXRhIGdyZW5hciBvY2ggb2JqZWt0LiBTZSBrb25zb2x1dGRhdGEgZsO2ciBkZXRhbGplci4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkyCittc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICJLdW5kZSBpbnRlIGjDpG10YSB0YWdnYXIuIFNlIGtvbnNvbHV0ZGF0YSBmw7ZyIGRldGFsamVyLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTYKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIEhFQUQuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICJLdW5kZSBpbnRlIGF2Z8O2cmEgSEVBRC4gU2Uga29uc29sdXRkYXRhIGbDtnIgZGV0YWxqZXIuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIHN0w6RkYSB1cHAgJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMxCittc2dpZCAiQ2xvbmUgZmFpbGVkLiIKK21zZ3N0ciAiS2xvbmluZyBtaXNzbHlja2FkZXMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOAorbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKK21zZ3N0ciAiSMOkbXRhZGUgaW5nZW4gc3RhbmRhcmRncmVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCittc2dzdHIgIkt1bmRlIGludGUgc2zDpSB1cHAgJXMgdGlsbCBuw6Vnb24gaW5jaGVja25pbmcuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2MQorbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJTa2FwYXIgYXJiZXRza2F0YWxvZyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjIgbGliL2luZGV4LnRjbDo3MCBsaWIvaW5kZXgudGNsOjEzNgorIzogbGliL2luZGV4LnRjbDoyMDcKK21zZ2lkICJmaWxlcyIKK21zZ3N0ciAiZmlsZXIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgxCittc2dpZCAiQ2Fubm90IGNsb25lIHN1Ym1vZHVsZXMuIgorbXNnc3RyICJLYW4gaW50ZSBrbG9uYSB1bmRlcm1vZHVsZXIuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk5MAorbXNnaWQgIkNsb25pbmcgc3VibW9kdWxlcyIKK21zZ3N0ciAiS2xvbmFyIHVuZGVybW9kdWxlciIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE1Cittc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCittc2dzdHIgIklubGVkYW5kZSBmaWx1dGNoZWNrbmluZyBtaXNzbHlja2FkZXMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTkKK21zZ2lkICJPcGVuIgorbXNnc3RyICLDlnBwbmEiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2OQorbXNnaWQgIlJlcG9zaXRvcnk6IgorbXNnc3RyICJBcmtpdjoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTExOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSBhcmtpdmV0ICVzOiIKKworIzogbGliL2Fib3V0LnRjbDoyNgorbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKK21zZ3N0ciAiZ2l0LWd1aSAtIGV0dCBncmFmaXNrdCBhbnbDpG5kYXJncsOkbnNzbml0dCBmw7ZyIEdpdC4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzMKK21zZ2lkICJGaWxlIFZpZXdlciIKK21zZ3N0ciAiRmlsdmlzYXJlIgorCisjOiBsaWIvYmxhbWUudGNsOjc5Cittc2dpZCAiQ29tbWl0OiIKK21zZ3N0ciAiSW5jaGVja25pbmc6IgorCisjOiBsaWIvYmxhbWUudGNsOjI4MAorbXNnaWQgIkNvcHkgQ29tbWl0IgorbXNnc3RyICJLb3BpZXJhIGluY2hlY2tuaW5nIgorCisjOiBsaWIvYmxhbWUudGNsOjI4NAorbXNnaWQgIkZpbmQgVGV4dC4uLiIKK21zZ3N0ciAiU8O2ayB0ZXh0Li4uIgorCisjOiBsaWIvYmxhbWUudGNsOjI4OAorbXNnaWQgIkdvdG8gTGluZS4uLiIKK21zZ3N0ciAiR8OlIHRpbGwgcmFkLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjI5NworbXNnaWQgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iCittc2dzdHIgIkfDtnIgZnVsbCBrb3BpZXJpbmdzaWdlbmvDpG5uaW5nIgorCisjOiBsaWIvYmxhbWUudGNsOjMwMQorbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgorbXNnc3RyICJWaXNhIGhpc3Rvcmlrc2FtbWFuaGFuZyIKKworIzogbGliL2JsYW1lLnRjbDozMDQKK21zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgorbXNnc3RyICJLbGFuZHJhIGbDtnLDpGxkcmFpbmNoZWNrbmluZyIKKworIzogbGliL2JsYW1lLnRjbDo0NjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZWFkaW5nICVzLi4uIgorbXNnc3RyICJMw6RzZXIgJXMuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NTk0Cittc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgIkzDpHNlciBhbm5vdGVyaW5nYXIgZsO2ciBrb3BpZXJpbmcvZmx5dHRuaW5nLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjYxNAorbXNnaWQgImxpbmVzIGFubm90YXRlZCIKK21zZ3N0ciAicmFkZXIgYW5ub3RlcmFkZSIKKworIzogbGliL2JsYW1lLnRjbDo4MDYKK21zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgorbXNnc3RyICJMw6RzZXIgaW4gYW5ub3RlcmluZyBhdiBvcmlnaW5hbHBsYWNlcmluZy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo4MDkKK21zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKK21zZ3N0ciAiQW5ub3RlcmluZyBmdWxsYm9yZGFkLiIKKworIzogbGliL2JsYW1lLnRjbDo4MzkKK21zZ2lkICJCdXN5IgorbXNnc3RyICJVcHB0YWdlbiIKKworIzogbGliL2JsYW1lLnRjbDo4NDAKK21zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKK21zZ3N0ciAiQW5ub3RlcmluZ3Nwcm9jZXNzIGvDtnJzIHJlZGFuLiIKKworIzogbGliL2JsYW1lLnRjbDo4NzkKK21zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgorbXNnc3RyICJLw7ZyIGdydW5kbGlnIGtvcGllcmluZ3NpZ2Vua8Okbm5pbmcuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6OTQ3Cittc2dpZCAiTG9hZGluZyBhbm5vdGF0aW9uLi4uIgorbXNnc3RyICJMw6RzZXIgaW4gYW5ub3RlcmluZy4uLiIKKworIzogbGliL2JsYW1lLnRjbDoxMDAwCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiRsO2cmZhdHRhcmU6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwMDQKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJJbmNoZWNrYXJlOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDA5Cittc2dpZCAiT3JpZ2luYWwgRmlsZToiCittc2dzdHIgIlVyc3BydW5nbGlnIGZpbDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA1NworbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKK21zZ3N0ciAiSGl0dGFyIGludGUgaW5jaGVja25pbmcgZsO2ciBIRUFEOiIKKworIzogbGliL2JsYW1lLnRjbDoxMTEyCittc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCittc2dzdHIgIkhpdHRhciBpbnRlIGbDtnLDpGxkcmFpbmNoZWNrbmluZzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTEyNworbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKK21zZ3N0ciAiS2FuIGludGUgdmlzYSBmw7Zyw6RsZGVyIgorCisjOiBsaWIvYmxhbWUudGNsOjEyNjkKK21zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKK21zZ3N0ciAiVXJzcHJ1bmdsaWdlbiBhdjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI3NQorbXNnaWQgIkluIEZpbGU6IgorbXNnc3RyICJJIGZpbGVuOiIKKworIzogbGliL2JsYW1lLnRjbDoxMjgwCittc2dpZCAiQ29waWVkIE9yIE1vdmVkIEhlcmUgQnk6IgorbXNnc3RyICJLb3BpZXJhZCBlbGxlciBmbHl0dGFkIGhpdCBhdjoiCisKKyM6IGxpYi9zc2hrZXkudGNsOjMxCittc2dpZCAiTm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIkluZ2Egbnlja2xhciBoaXR0YWRlcy4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRm91bmQgYSBwdWJsaWMga2V5IGluOiAlcyIKK21zZ3N0ciAiSGl0dGFkZSDDtnBwZW4gbnlja2VsIGk6ICVzIgorCisjOiBsaWIvc3Noa2V5LnRjbDo0MAorbXNnaWQgIkdlbmVyYXRlIEtleSIKK21zZ3N0ciAiU2thcGEgbnlja2VsIgorCisjOiBsaWIvc3Noa2V5LnRjbDo1OAorbXNnaWQgIkNvcHkgVG8gQ2xpcGJvYXJkIgorbXNnc3RyICJLb3BpZXJhIHRpbGwgVXJrbGlwcCIKKworIzogbGliL3NzaGtleS50Y2w6NzIKK21zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKK21zZ3N0ciAiRGluIMO2cHBuYSBPcGVuU1NILW55Y2tlbCIKKworIzogbGliL3NzaGtleS50Y2w6ODAKK21zZ2lkICJHZW5lcmF0aW5nLi4uIgorbXNnc3RyICJTa2FwYXIuLi4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjg2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiS3VuZGUgaW50ZSBzdGFydGEgc3NoLWtleWdlbjpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL3NzaGtleS50Y2w6MTEzCittc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCBza2FwYS4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjEyMAorbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VlZGVkLCBidXQgbm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIkx5Y2thZGVzIHNrYXBhIG55Y2tlbG4sIG1lbiBoaXR0YXIgaW50ZSBuw6Vnb24gbnlja2VsLiIKKworIzogbGliL3NzaGtleS50Y2w6MTIzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiWW91ciBrZXkgaXMgaW46ICVzIgorbXNnc3RyICJEaW4gbnlja2VsIGZpbm5zIGk6ICVzIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjMKK21zZ2lkICJDcmVhdGUgQnJhbmNoIgorbXNnc3RyICJTa2FwYSBncmVuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjgKK21zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKK21zZ3N0ciAiU2thcGEgbnkgZ3JlbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQyCittc2dpZCAiQnJhbmNoIE5hbWUiCittc2dzdHIgIk5hbW4gcMOlIGdyZW4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo1NworbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaCBOYW1lIgorbXNnc3RyICJBbnbDpG5kIG5hbW4gcMOlIHNww6VyYWQgZ3JlbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Cittc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCittc2dzdHIgIklubGVkYW5kZSByZXZpc2lvbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjcyCittc2dpZCAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiCittc2dzdHIgIlVwcGRhdGVyYSBiZWZpbnRsaWcgZ3JlbjoiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQorbXNnaWQgIk5vIgorbXNnc3RyICJOZWoiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAorbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgorbXNnc3RyICJFbmRhc3Qgc25hYmJzcG9sbmluZyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Cittc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCittc2dzdHIgIkNoZWNrYSB1dCBuw6RyIHNrYXBhZCIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMgorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgorbXNnc3RyICJWw6RsaiBlbiBncmVuIGF0dCBzcMOlcmEuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVHJhY2tpbmcgYnJhbmNoICVzIGlzIG5vdCBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIgorbXNnc3RyICJEZW4gc3DDpXJhZGUgZ3JlbmVuICVzIMOkciBpbnRlIGVuIGdyZW4gaSBmasOkcnJhcmtpdmV0LiIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoyMSBsaWIvc2hvcnRjdXQudGNsOjYyCittc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhIGdlbnbDpGc6IgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjEzNworbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhIGlrb246IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTIKK21zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgorbXNnc3RyICJEZW5uYSBmcsOlbmtvcHBsYWRlIHV0Y2hlY2tuaW5nIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKK21zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKK21zZ3N0ciAiUmV2aXNpb25zdXR0cnljazoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3MgorbXNnaWQgIkxvY2FsIEJyYW5jaCIKK21zZ3N0ciAiTG9rYWwgZ3JlbiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc3Cittc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICJTcMOlcmFuZGUgZ3JlbiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjgyIGxpYi9jaG9vc2VfcmV2LnRjbDo1NDQKK21zZ2lkICJUYWciCittc2dzdHIgIlRhZ2ciCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAiT2dpbHRpZyByZXZpc2lvbjogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDIKK21zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCittc2dzdHIgIkluZ2VuIHJldmlzaW9uIHZhbGQuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzUwCittc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCittc2dzdHIgIlJldmlzaW9uc3V0dHJ5Y2tldCDDpHIgdG9tdC4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzcKK21zZ2lkICJVcGRhdGVkIgorbXNnc3RyICJVcHBkYXRlcmFkIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTY1Cittc2dpZCAiVVJMIgorbXNnc3RyICJXZWJiYWRyZXNzIgorCisjOiBsaWIvY29tbWl0LnRjbDo5Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCisiXG4iCisiWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKKyJ0byBhbWVuZC5cbiIKK21zZ3N0ciAiIgorIkRldCBmaW5ucyBpbmdlbnRpbmcgYXR0IHV0w7ZrYS5cbiIKKyJcbiIKKyJEdSBow6VsbGVyIHDDpSBhdHQgc2thcGEgZGVuIGlubGVkYW5kZSBpbmNoZWNrbmluZ2VuLiBEZXQgZmlubnMgaW5nZW4gdGlkaWdhcmUgIgorImluY2hlY2tuaW5nIGF0dCB1dMO2a2EuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4Cittc2dpZCAiIgorIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgorIlxuIgorIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCisiY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKKyJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorbXNnc3RyICIiCisiS2FuIGludGUgdXTDtmthIHZpZCBzYW1tYW5zbGFnbmluZy5cbiIKKyJcbiIKKyJEdSDDpHIgaSBtaXR0ZW4gYXYgZW4gc2FtbWFuc2xhZ25pbmcgc29tIGludGUgw6RyIGZ1bGxib3JkYWQuIER1IGthbiBpbnRlICIKKyJ1dMO2a2EgdGlkaWdhcmUgaW5jaGVja25pbmdhciBvbSBkdSBpbnRlIGbDtnJzdCBhdmJyeXRlciBkZW4gcMOlZ8OlZW5kZSAiCisic2FtbWFuc2xhZ25pbmdlbi5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6NDgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCittc2dzdHIgIkZlbCB2aWQgaW5sw6RzbmluZyBhdiBpbmNoZWNrbmluZ3NkYXRhIGbDtnIgdXTDtmtuaW5nOiIKKworIzogbGliL2NvbW1pdC50Y2w6NzUKK21zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgorbXNnc3RyICJLdW5kZSBpbnRlIGjDpG10YSBkaW4gaWRlbnRpdGV0OiIKKworIzogbGliL2NvbW1pdC50Y2w6ODAKK21zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgorbXNnc3RyICJGZWxha3RpZyBHSVRfQ09NTUlUVEVSX0lERU5UOiIKKworIzogbGliL2NvbW1pdC50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCittc2dzdHIgInZhcm5pbmc6IFRjbCBzdMO2ZGVyIGludGUgdGVja2Vua29kbmluZ2VuIFwiJXNcIi4iCisKKyM6IGxpYi9jb21taXQudGNsOjE0OQorbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJEZXQgc2VuYXN0ZSBpbmzDpHN0YSB0aWxsc3TDpW5kZXQgbW90c3ZhcmFyIGludGUgdGlsbHN0w6VuZGV0IGkgYXJraXZldC5cbiIKKyJcbiIKKyJFdHQgYW5uYXQgR2l0LXByb2dyYW0gaGFyIMOkbmRyYXQgYXJraXZldCBzZWRhbiBzZW5hc3RlIGF2c8O2a25pbmdlbi4gRHUgbcOlc3RlICIKKyJ1dGbDtnJhIGVuIG55IHPDtmtuaW5nIGlubmFuIGR1IGthbiBnw7ZyYSBlbiBueSBpbmNoZWNrbmluZy5cbiIKKyJcbiIKKyJTw7ZrbmluZ2VuIGtvbW1lciBhdHQgc3RhcnRhcyBhdXRvbWF0aXNrdCBudS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCisiYmVmb3JlIGNvbW1pdHRpbmcuXG4iCittc2dzdHIgIiIKKyJPc2FtbWFuc2xhZ25hIGZpbGVyIGthbiBpbnRlIGNoZWNrYXMgaW4uXG4iCisiXG4iCisiRmlsZW4gJXMgaGFyIHNhbW1hbnNsYWduaW5nc2tvbmZsaWt0ZXIuIER1IG3DpXN0ZSBsw7ZzYSBkZW0gb2NoIGvDtmEgZmlsZW4gIgorImlubmFuIGR1IGNoZWNrYXIgaW4gZGVuLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgorIlxuIgorIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCittc2dzdHIgIiIKKyJPa8OkbmQgZmlsc3RhdHVzICVzIHVwcHTDpGNrdC5cbiIKKyJcbiIKKyJGaWxlbiAlcyBrYW4gaW50ZSBjaGVja2FzIGluIGF2IHByb2dyYW1tZXQuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4OQorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKKyJcbiIKKyJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorbXNnc3RyICIiCisiSW5nYSDDpG5kcmluZ2FyIGF0dCBjaGVja2EgaW4uXG4iCisiXG4iCisiRHUgbcOlc3RlIGvDtmEgw6V0bWluc3RvbmUgZW4gZmlsIGlubmFuIGR1IGthbiBjaGVja2EgaW4uXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjIwNAorbXNnaWQgIiIKKyJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKKyJcbiIKKyItIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuXG4iCisiLSBTZWNvbmQgbGluZTogQmxhbmtcbiIKKyItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCittc2dzdHIgIiIKKyJBbmdlIGV0dCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlLlxuIgorIlxuIgorIkV0dCBicmEgaW5jaGVja25pbmdzbWVkZGVsYW5kZSBoYXIgZsO2bGphbmRlIGZvcm1hdDpcbiIKKyJcbiIKKyItIEbDtnJzdGEgcmFkZW46IEJlc2tyaXYgaSBlbiBtZW5pbmcgdmFkIGR1IGdqb3JkZS5cbiIKKyItIEFuZHJhIHJhZGVuOiBUb21cbiIKKyItIEbDtmxqYW5kZSByYWRlcjogQmVza3JpdiB2YXJmw7ZyIGRldCBow6RyIMOkciBlbiBicmEgw6RuZHJpbmcuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjIzNQorbXNnaWQgIkNhbGxpbmcgcHJlLWNvbW1pdCBob29rLi4uIgorbXNnc3RyICJBbnJvcGFyIGtyb2tlbiBmw7ZyZSBpbmNoZWNrbmluZyAocHJlLWNvbW1pdCkuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjI1MAorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgorbXNnc3RyICJJbmNoZWNrbmluZ2VuIGF2dmlzYWRlcyBhdiBrcm9rZW4gZsO2cmUgaW5jaGVja25pbmcgKHByZS1jb21taXQpLiIKKworIzogbGliL2NvbW1pdC50Y2w6MjY5Cittc2dpZCAiIgorIllvdSBhcmUgYWJvdXQgdG8gY29tbWl0IG9uIGEgZGV0YWNoZWQgaGVhZC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IGRhbmdlcm91cyAiCisidGhpbmcgdG8gZG8gYmVjYXVzZSBpZiB5b3Ugc3dpdGNoIHRvIGFub3RoZXIgYnJhbmNoIHlvdSB3aWxsIGxvc2UgeW91ciAiCisiY2hhbmdlcyBhbmQgaXQgY2FuIGJlIGRpZmZpY3VsdCB0byByZXRyaWV2ZSB0aGVtIGxhdGVyIGZyb20gdGhlIHJlZmxvZy4gWW91ICIKKyJzaG91bGQgcHJvYmFibHkgY2FuY2VsIHRoaXMgY29tbWl0IGFuZCBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIGNvbnRpbnVlLlxuIgorIiBcbiIKKyIgRG8geW91IHJlYWxseSB3YW50IHRvIHByb2NlZWQgd2l0aCB5b3VyIENvbW1pdD8iCittc2dzdHIgIiIKKyJEdSDDpHIgcMOlIHbDpGcgYXR0IGNoZWNrYSBpbiBww6UgZXR0IGZyw6Vua29wcGxhdCBodXZ1ZC4gRGV0IGthbiBwb3RlbnRpZWxsdCAiCisidmFyYSBmYXJsaWd0LCBlZnRlcnNvbSBkdSBrb21tZXIgZsO2cmxvcmEgZGluYSDDpG5kcmluZ2FyIG9tIGR1IHbDpHhsYXIgdGlsbCBlbiAiCisiYW5uYW4gZ3JlbiBvY2ggZGV0IGthbiB2YXJhIHN2w6VydCBhdHQgaMOkbXRhIGRlbSBzZW5hcmUgZnLDpW4gcmVmLWxvZ2dlbi4gRHUgIgorImLDtnIgdHJvbGlnZW4gYXZicnl0YSBpbmNoZWNrbmluZ2VuIG9jaCBza2FwYSBlbiBueSBncmVuIGbDtnIgYXR0IGZvcnRzw6R0dGEuXG4iCisiIFxuIgorIiBWaWxsIGR1IHZlcmtsaWdlbiBmb3J0c8OkdHRhIGNoZWNrYSBpbj8iCisKKyM6IGxpYi9jb21taXQudGNsOjI5MAorbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICJBbnJvcGFyIGtyb2tlbiBmw7ZyIGluY2hlY2tuaW5nc21lZGRlbGFuZGUgKGNvbW1pdC1tc2cpLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozMDUKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiSW5jaGVja25pbmcgYXZ2aXNhZCBhdiBrcm9rZW4gZsO2ciBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIChjb21taXQtbXNnKS4iCisKKyM6IGxpYi9jb21taXQudGNsOjMxOAorbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKK21zZ3N0ciAiQ2hlY2thciBpbiDDpG5kcmluZ2FyLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozMzQKK21zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCittc2dzdHIgIndyaXRlLXRyZWUgbWlzc2x5Y2thZGVzOiIKKworIzogbGliL2NvbW1pdC50Y2w6MzM1IGxpYi9jb21taXQudGNsOjM3OSBsaWIvY29tbWl0LnRjbDo0MDAKK21zZ2lkICJDb21taXQgZmFpbGVkLiIKK21zZ3N0ciAiSW5jaGVja25pbmdlbiBtaXNzbHlja2FkZXMuIgorCisjOiBsaWIvY29tbWl0LnRjbDozNTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgorbXNnc3RyICJJbmNoZWNrbmluZ2VuICVzIHZlcmthciB2YXJhIHRyYXNpZyIKKworIzogbGliL2NvbW1pdC50Y2w6MzU3Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiSW5nYSDDpG5kcmluZ2FyIGF0dCBjaGVja2EgaW4uXG4iCisiXG4iCisiSW5nYSBmaWxlciDDpG5kcmFkZXMgYXYgaW5jaGVja25pbmdlbiBvY2ggZGV0IHZhciBpbnRlIGVuIHNhbW1hbnNsYWduaW5nLlxuIgorIlxuIgorIkVuIHPDtmtuaW5nIGtvbW1lciBhdHQgc3RhcnRhcyBhdXRvbWF0aXNrdCBudS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzY0Cittc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgorbXNnc3RyICJJbmdhIMOkbmRyaW5nYXIgYXR0IGNoZWNrYSBpbi4iCisKKyM6IGxpYi9jb21taXQudGNsOjM3OAorbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCittc2dzdHIgImNvbW1pdC10cmVlIG1pc3NseWNrYWRlczoiCisKKyM6IGxpYi9jb21taXQudGNsOjM5OQorbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKK21zZ3N0ciAidXBkYXRlLXJlZiBtaXNzbHlja2FkZXM6IgorCisjOiBsaWIvY29tbWl0LnRjbDo0OTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCittc2dzdHIgIlNrYXBhZGUgaW5jaGVja25pbmdlbiAlczogJXMiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNgorbXNnaWQgIkRlbGV0ZSBCcmFuY2giCittc2dzdHIgIlRhIGJvcnQgZ3JlbiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjIxCittc2dpZCAiRGVsZXRlIExvY2FsIEJyYW5jaCIKK21zZ3N0ciAiVGEgYm9ydCBsb2thbCBncmVuIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzkKK21zZ2lkICJMb2NhbCBCcmFuY2hlcyIKK21zZ3N0ciAiTG9rYWxhIGdyZW5hciIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUxCittc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCittc2dzdHIgIlRhIGJhcmEgYm9ydCBvbSBzYW1tYW5zbGFnZW4gbWVkIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgorbXNnc3RyICJGw7ZsamFuZGUgZ3JlbmFyIMOkciBpbnRlIHRpbGwgZnVsbG8gc2FtbWFuc2xhZ25hIG1lZCAlczoiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgdGEgYm9ydCBncmVuYXI6XG4iCisiJXMiCisKKyM6IGxpYi9pbmRleC50Y2w6NgorbXNnaWQgIlVuYWJsZSB0byB1bmxvY2sgdGhlIGluZGV4LiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6VzYSB1cHAgaW5kZXhldC4iCisKKyM6IGxpYi9pbmRleC50Y2w6MTcKK21zZ2lkICJJbmRleCBFcnJvciIKK21zZ3N0ciAiSW5kZXhmZWwiCisKKyM6IGxpYi9pbmRleC50Y2w6MTkKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCisicmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKK21zZ3N0ciAiIgorIk1pc3NseWNrYWRlcyBtZWQgYXR0IHVwcGRhdGVyYSBHaXRpbmRleGV0LiBFbiBvbXPDtmtuaW5nIGtvbW1lciBhdHQgc3RhcnRhcyAiCisiYXV0b21hdGlza3QgZsO2ciBhdHQgc3lua3JvbmlzZXJhIG9tIGdpdC1ndWkuIgorCisjOiBsaWIvaW5kZXgudGNsOjMwCittc2dpZCAiQ29udGludWUiCittc2dzdHIgIkZvcnRzw6R0dCIKKworIzogbGliL2luZGV4LnRjbDozMworbXNnaWQgIlVubG9jayBJbmRleCIKK21zZ3N0ciAiTMOlcyB1cHAgaW5kZXgiCisKKyM6IGxpYi9pbmRleC50Y2w6Mjk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdGFnaW5nICVzIGZyb20gY29tbWl0IgorbXNnc3RyICJUYXIgYm9ydCAlcyBmw7ZyIGluY2hlY2tuaW5nc2vDtm4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzM3Cittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAiUmVkbyBhdHQgY2hlY2thIGluLiIKKworIzogbGliL2luZGV4LnRjbDozNTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIkzDpGdnZXIgdGlsbCAlcyIKKworIzogbGliL2luZGV4LnRjbDozODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTdGFnZSAlZCB1bnRyYWNrZWQgZmlsZXM/IgorbXNnc3RyICJLw7ZhICVkIG9zcMOlcmFkZSBmaWxlcj8iCisKKyM6IGxpYi9pbmRleC50Y2w6NDI4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCittc2dzdHIgIsOFdGVyc3TDpGxsIMOkbmRyaW5nYXJuYSBpIGZpbGVuICVzPyIKKworIzogbGliL2luZGV4LnRjbDo0MzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCittc2dzdHIgIsOFdGVyc3TDpGxsIMOkbmRyaW5nYXJuYSBpIGRlc3NhICVpIGZpbGVyPyIKKworIzogbGliL2luZGV4LnRjbDo0MzgKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIiIKKyJBbGxhIG9rw7ZhZGUgw6RuZHJpbmdhciBrb21tZXIgcGVybWFuZW50IGfDpSBmw7ZybG9yYWRlIHZpZCDDpXRlcnN0w6RsbG5pbmdlbi4iCisKKyM6IGxpYi9pbmRleC50Y2w6NDQxCittc2dpZCAiRG8gTm90aGluZyIKK21zZ3N0ciAiR8O2ciBpbmdlbnRpbmciCisKKyM6IGxpYi9pbmRleC50Y2w6NDU5Cittc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgorbXNnc3RyICLDhXRlcnN0w6RsbGVyIHZhbGRhIGZpbGVyIgorCisjOiBsaWIvaW5kZXgudGNsOjQ2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydGluZyAlcyIKK21zZ3N0ciAiw4V0ZXJzdMOkbGxlciAlcyIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDMKK21zZ2lkICJEZWZhdWx0IgorbXNnc3RyICJTdGFuZGFyZCIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gKCVzKSIKK21zZ3N0ciAiU3lzdGVtZXRzICglcykiCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Cittc2dpZCAiT3RoZXIiCittc2dzdHIgIkFubmFuIgorCisjOiBsaWIvZGF0ZS50Y2w6MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgorbXNnc3RyICJPZ2lsdGlndCBkYXR1bSBmcsOlbiBHaXQ6ICVzIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQyCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIkFudGFsIGzDtnNhIG9iamVrdCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0MworbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBsb29zZSBvYmplY3RzIgorbXNnc3RyICJEaXNrdXRyeW1tZSBhbnbDpG50IGF2IGzDtnNhIG9iamVrdCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NAorbXNnaWQgIk51bWJlciBvZiBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiQW50YWwgcGFja2FkZSBvYmpla3QiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKK21zZ2lkICJOdW1iZXIgb2YgcGFja3MiCittc2dzdHIgIkFudGFsIHBha2V0IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJEaXNrdXRyeW1tZSBhbnbDpG50IGF2IHBhY2thZGUgb2JqZWt0IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ3Cittc2dpZCAiUGFja2VkIG9iamVjdHMgd2FpdGluZyBmb3IgcHJ1bmluZyIKK21zZ3N0ciAiUGFja2FkZSBvYmpla3Qgc29tIHbDpG50YXIgcMOlIHN0w6RkbmluZyIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OAorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgIlNrcsOkcGZpbGVyIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjcyCittc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiS29tcHJpbWVyYXIgb2JqZWt0ZGF0YWJhc2VuIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjgzCittc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCittc2dzdHIgIlZlcmlmaWVyYXIgb2JqZWt0ZGF0YWJhc2VuIG1lZCBmc2NrLW9iamVjdHMiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKKyJcbiIKKyJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKKyJ0aGUgZGF0YWJhc2UuXG4iCisiXG4iCisiQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCittc2dzdHIgIiIKKyJBcmtpdmV0IGhhciBmw7ZyIG7DpHJ2YXJhbmRlIG9ta3JpbmcgJWkgbMO2c2Egb2JqZWt0LlxuIgorIlxuIgorIkbDtnIgYXR0IGJpYmVow6VsbGEgb3B0aW1hbCBwcmVzdGFuZGEgcmVrb21tZW5kZXJhcyBkZXQgw6UgZGV0IGJlc3TDpG1kYXN0ZSBhdHQgIgorImR1IGtvbXByaW1lcmFyIGRhdGFiYXNlbi5cbiIKKyJcbiIKKyJLb21wcmltZXJhIGRhdGFiYXNlbiBudT8iCisKKyM6IGxpYi9lcnJvci50Y2w6MjAgbGliL2Vycm9yLnRjbDoxMTYKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiZmVsIgorCisjOiBsaWIvZXJyb3IudGNsOjM2Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAidmFybmluZyIKKworIzogbGliL2Vycm9yLnRjbDo5NgorbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCittc2dzdHIgIkR1IG3DpXN0ZSByw6R0dGEgdGlsbCBmZWxlbiBvdmFuIGlubmFuIGR1IGNoZWNrYXIgaW4uIgorCisjfiBtc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKKyN+IG1zZ3N0ciAiVmlzYXIgZW5kYXN0ICVzIGF2ICVzIGZpbGVyLiIKKworI34gbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgorI34gbXNnc3RyICJTa2lsaiBww6UgVkVSU0FMRVIvZ2VtZW5lciIKKworI34gbXNnaWQgIkNhbm5vdCB1c2UgZnVubnkgLmdpdCBkaXJlY3Rvcnk6IgorI34gbXNnc3RyICJLYW4gaW50ZSBhbnbDpG5kYSB1bmRlcmxpZyAuZ2l0LWthdGFsb2c6IgorCisjfiBtc2dpZCAiUHJlZmVyZW5jZXMuLi4iCisjfiBtc2dzdHIgIkluc3TDpGxsbmluZ2FyLi4uIgorCisjfiBtc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSB0ZXN0LikiCisjfiBtc2dzdHIgIkFsbHRpZCAodXRmw7ZyIGludGUgc2FtbWFuc2xhZ25pbmdzdGVzdCkuIgorCisjfiBtc2dpZCAiVVJMOiIKKyN+IG1zZ3N0ciAiV2ViYmFkcmVzczoiCisKKyN+IG1zZ2lkICJEZWxldGUgUmVtb3RlIEJyYW5jaCIKKyN+IG1zZ3N0ciAiVGEgYm9ydCBmasOkcnJncmVuIgorCisjfiBtc2dpZCAiIgorI34gIlVuYWJsZSB0byBzdGFydCBnaXRrOlxuIgorI34gIlxuIgorI34gIiVzIGRvZXMgbm90IGV4aXN0IgorI34gbXNnc3RyICIiCisjfiAiS2FuIGludGUgc3RhcnRhIGdpdGs6XG4iCisjfiAiXG4iCisjfiAiJXMgZmlubnMgaW50ZSIKKworI34gbXNnaWQgIkFwcGxlIgorI34gbXNnc3RyICLDhHBwbGUiCisKKyN+IG1zZ2lkICJOb3QgY29ubmVjdGVkIHRvIGFzcGVsbCIKKyN+IG1zZ3N0ciAiSW50ZSBhbnNsdXRlbiB0aWxsIGFzcGVsbCIKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vdmkucG8gYi9naXQtZ3VpL3BvL3ZpLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NTZiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL3ZpLnBvCkBAIC0wLDAgKzEsMjY5MCBAQAorIyBWaWV0bmFtZXNlIHRyYW5zbGF0aW9uIGZvciBHSVQtR1VJCisjIELhuqNuIGThu4tjaCBUaeG6v25nIFZp4buHdCBkw6BuaCBjaG8gZ8OzaSBHaXQtZ3VpLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWNvcmUgcGFja2FnZS4KKyMgRmlyc3QgdHJhbnNsYXRlZCBieSBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPiwgMjAxNC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWkgMC4xOS4wXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE0LTA2LTI2IDEzOjQyKzA3MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE0LTA2LTI3IDA3OjQ4KzA3MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFRy4bqnbiBOZ+G7jWMgUXXDom4gPHZud2lsZG1hbkBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogVmlldG5hbWVzZSA8dHJhbnNsYXRpb24tdGVhbS12aUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IHZpXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKyJYLVBvZWRpdC1MYW5ndWFnZTogVmlldG5hbWVzZVxuIgorIlgtUG9lZGl0LUNvdW50cnk6IFZJRVQgTkFNXG4iCisiWC1Qb2VkaXQtU291cmNlQ2hhcnNldDogdXRmLThcbiIKKyJYLVBvZWRpdC1CYXNlcGF0aDogLi4vXG4iCisKKyM6IGdpdC1ndWkuc2g6ODU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCittc2dzdHIgIlBow7RuZyBjaOG7ryBraMO0bmcgaOG7o3AgbOG7hyDEkcaw4bujYyDEkeG6t2MgdOG6oyB0cm9uZyAlczoiCisKKyM6IGdpdC1ndWkuc2g6OTEyCittc2dpZCAiTWFpbiBGb250IgorbXNnc3RyICJQaMO0bmcgY2jhu68gY2jDrW5oIgorCisjOiBnaXQtZ3VpLnNoOjkxMworbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgorbXNnc3RyICJQaMO0bmcgY2jhu68gY2hvIELhuqNuZyDEkWnhu4F1IGtoaeG7g24gaGF5IERpZmYiCisKKyM6IGdpdC1ndWkuc2g6OTI4IGdpdC1ndWkuc2g6OTQyIGdpdC1ndWkuc2g6OTU1IGdpdC1ndWkuc2g6MTA0NQorIzogZ2l0LWd1aS5zaDoxMDY0IGdpdC1ndWkuc2g6MzExOQorbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgorbXNnc3RyICJnaXQtZ3VpOiBs4buXaSBuZ2hpw6ptIHRy4buNbmciCisKKyM6IGdpdC1ndWkuc2g6OTI5Cittc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgZ2l0IHRyb25nIGJp4bq/biBQQVRILiIKKworIzogZ2l0LWd1aS5zaDo5NTYKK21zZ2lkICJDYW5ub3QgcGFyc2UgR2l0IHZlcnNpb24gc3RyaW5nOiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGNodeG7l2kgcGhpw6puIGLhuqNuIEdpdDoiCisKKyM6IGdpdC1ndWkuc2g6OTgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgorIlxuIgorIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCisiXG4iCisiJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgorIlxuIgorIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4Mgbmjhuq1uIHJhIHBoacOqbiBi4bqjbiBj4bunYSBHaXQuXG4iCisiXG4iCisiJXMgbsOzaSDEkcOieSBsw6AgcGhpw6puIGLhuqNuICclcycuXG4iCisiXG4iCisiJXMgecOqdSBj4bqndSBHaXQgcGhpw6puIGLhuqNuIHThu6sgMS41LjAgaGF5IG3hu5tpIGjGoW4uXG4iCisiXG4iCisiQ+G7jWkgJyVzJyBjw7MgcGhpw6puIGLhuqNuIGzDoCAxLjUuMD9cbiIKKworIzogZ2l0LWd1aS5zaDoxMjc4Cittc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgdGjGsCBt4bulYyBnaXQ6IgorCisjOiBnaXQtZ3VpLnNoOjEzMTIKK21zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZGkgY2h1eeG7g24gxJHhur9uIMSR4buJbmggY+G7p2EgdGjGsCBt4bulYyBsw6BtIHZp4buHYzoiCisKKyM6IGdpdC1ndWkuc2g6MTMyMAorbXNnaWQgIkNhbm5vdCB1c2UgYmFyZSByZXBvc2l0b3J5OiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGTDuW5nIGtobyB0cuG6p246IgorCisjOiBnaXQtZ3VpLnNoOjEzMjgKK21zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aMawIG3hu6VjIGzDoG0gdmnhu4djIgorCisjOiBnaXQtZ3VpLnNoOjE1MDAgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKK21zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgorbXNnc3RyICJD4bqtcCBuaOG6rXQgbOG6oWkgdHLhuqFuZyB0aMOhaSB04bqtcCB0aW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MTU2MAorbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCittc2dzdHIgIsSQYW5nIHF1w6l0IMSRxKlhIHTDrG0gdOG6rXAgdGluIHRoYXkgxJHhu5VpLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE2MzYKK21zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICLEkGFuZyBn4buNaSBtw7NjIHByZXBhcmUtY29tbWl0LW1zZy4uLiIKKworIzogZ2l0LWd1aS5zaDoxNjUzCittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyBi4buLIGNo4buRaSB04burIGRvIG3Ds2MgcHJlcGFyZS1jb21taXQtbXNnLiIKKworIzogZ2l0LWd1aS5zaDoxODExIGxpYi9icm93c2VyLnRjbDoyNTIKK21zZ2lkICJSZWFkeS4iCittc2dzdHIgIlPhurVuIHPDoG5nLiIKKworIzogZ2l0LWd1aS5zaDoxOTY5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKK21zZ3N0ciAiQ2jhu4kgaGnhu4NuIHRo4buLICVzIHRyb25nIHPhu5EgJXMgdOG6rXAgdGluLiIKKworIzogZ2l0LWd1aS5zaDoyMDk1Cittc2dpZCAiVW5tb2RpZmllZCIKK21zZ3N0ciAiS2jDtG5nIHRoYXkgxJHhu5VpIGfDrCIKKworIzogZ2l0LWd1aS5zaDoyMDk3Cittc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIsSQw6Mgc+G7rWEgbmjGsG5nIGNoxrBhIMSRw6FuaCBk4bqldSDEkeG7gyBjaHV54buDbiBnaWFvIgorCisjOiBnaXQtZ3VpLnNoOjIwOTggZ2l0LWd1aS5zaDoyMTEwCittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIsSQw6FuaCBk4bqldSDEkeG7gyBjaHV54buDbiBnaWFvIgorCisjOiBnaXQtZ3VpLnNoOjIwOTkgZ2l0LWd1aS5zaDoyMTExCittc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIkPDoWMgcGjhuqduIMSRxrDhu6NjIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gY2h1eeG7g24gZ2lhbyIKKworIzogZ2l0LWd1aS5zaDoyMTAwIGdpdC1ndWkuc2g6MjExMgorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgorbXNnc3RyICLEkMOjIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gY2h1eeG7g24gZ2lhbywgdGhp4bq/dSIKKworIzogZ2l0LWd1aS5zaDoyMTAyCittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIsSQw6MgxJHhu5VpIGtp4buDdSB04bqtcCB0aW4gbmjGsG5nIGNoxrBhIMSRxrDhu6NjIMSRw6FuaCBk4bqldSBj4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBnaXQtZ3VpLnNoOjIxMDMgZ2l0LWd1aS5zaDoyMTA0Cittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG9sZCB0eXBlIHN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICLEkMOjIMSR4buVaSBraeG7g3UgdOG6rXAgdGluLCBraeG7g3UgY8WpIMSRw6MgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6MjEwNQorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCittc2dzdHIgIsSQw6MgxJHhu5VpIGtp4buDdSB04bqtcCB0aW4sIMSRw6MgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6MjEwNgorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2Ugc3RhZ2VkLCBtb2RpZmljYXRpb24gbm90IHN0YWdlZCIKK21zZ3N0ciAiIgorIlRoYXkgxJHhu5VpIGtp4buDdSB04bqtcCB0aW4gxJHDoyDEkcaw4bujYyDEkcOhbmggZOG6pXUgY+G6p24gY2h1eeG7g24gZ2lhbywgbmjGsG5nIGPDoWMgdGhheSDEkeG7lWkgIgorInRow6wgY2jGsGEiCisKKyM6IGdpdC1ndWkuc2g6MjEwNworbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2Ugc3RhZ2VkLCBmaWxlIG1pc3NpbmciCittc2dzdHIgIiIKKyJUaGF5IMSR4buVaSBraeG7g3UgdOG6rXAgdGluIMSRw6MgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGPhuqduIGNodXnhu4NuIGdpYW8sIHThuq1wIHRpbiBi4buLIHRoaeG6v3UiCisKKyM6IGdpdC1ndWkuc2g6MjEwOQorbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiQ2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpLCBjaMawYSDEkcOhbmggZOG6pXUgbMOgIGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6MjExNAorbXNnaWQgIk1pc3NpbmciCittc2dzdHIgIlRoaeG6v3UiCisKKyM6IGdpdC1ndWkuc2g6MjExNQorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKK21zZ3N0ciAixJDDoyDEkcOhbmggZOG6pXUgbMOgIGPhuqduIGfhu6EgYuG7jyIKKworIzogZ2l0LWd1aS5zaDoyMTE2Cittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgorbXNnc3RyICLEkMOjIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gZ+G7oSBi4buPLCBuaMawbmcgduG6q24gaGnhu4duIGRp4buHbiIKKworIzogZ2l0LWd1aS5zaDoyMTE4IGdpdC1ndWkuc2g6MjExOSBnaXQtZ3VpLnNoOjIxMjAgZ2l0LWd1aS5zaDoyMTIxCisjOiBnaXQtZ3VpLnNoOjIxMjIgZ2l0LWd1aS5zaDoyMTIzCittc2dpZCAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAiQ8OhYyB5w6p1IGPhuqd1IHBow6JuIGdp4bqjaSBow7JhIHRy4buZbiIKKworIzogZ2l0LWd1aS5zaDoyMTU4Cittc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAixJBhbmcga2jhu59pIMSR4buZbmcgZ2l0ay4uLiB2dWkgbMOybmcgY2jhu50uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjE3MAorbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgZ2l0ayB0cm9uZyBQQVRIIgorCisjOiBnaXQtZ3VpLnNoOjIyMjkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IGdpdCBndWkgdHJvbmcgUEFUSCIKKworIzogZ2l0LWd1aS5zaDoyNjQ4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDAKK21zZ2lkICJSZXBvc2l0b3J5IgorbXNnc3RyICJLaG8iCisKKyM6IGdpdC1ndWkuc2g6MjY0OQorbXNnaWQgIkVkaXQiCittc2dzdHIgIkNo4buJbmggc+G7rWEiCisKKyM6IGdpdC1ndWkuc2g6MjY1MSBsaWIvY2hvb3NlX3Jldi50Y2w6NTY3Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJOaMOhbmgiCisKKyM6IGdpdC1ndWkuc2g6MjY1NCBsaWIvY2hvb3NlX3Jldi50Y2w6NTU0Cittc2dpZCAiQ29tbWl0QEBub3VuIgorbXNnc3RyICJDaHV54buDbiBnaWFvQEBub3VuIgorCisjOiBnaXQtZ3VpLnNoOjI2NTcgbGliL21lcmdlLnRjbDoxMjMgbGliL21lcmdlLnRjbDoxNTIgbGliL21lcmdlLnRjbDoxNzAKK21zZ2lkICJNZXJnZSIKK21zZ3N0ciAiVHLhu5luIgorCisjOiBnaXQtZ3VpLnNoOjI2NTggbGliL2Nob29zZV9yZXYudGNsOjU2MworbXNnaWQgIlJlbW90ZSIKK21zZ3N0ciAiTcOheSBjaOG7pyIKKworIzogZ2l0LWd1aS5zaDoyNjYxCittc2dpZCAiVG9vbHMiCittc2dzdHIgIkPDtG5nIGPhu6UiCisKKyM6IGdpdC1ndWkuc2g6MjY3MAorbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgorbXNnc3RyICJRdcOpdCBkw7IgdGjGsCBt4bulYyBsw6BtIHZp4buHYyIKKworIzogZ2l0LWd1aS5zaDoyNjc2Cittc2dpZCAiR2l0IEJhc2giCittc2dzdHIgIkdpdCBCYXNoIgorCisjOiBnaXQtZ3VpLnNoOjI2ODYKK21zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKK21zZ3N0ciAiRHV54buHdCBjw6FjIFThuq1wIHRpbiDhu58gbmjDoW5oIGhp4buHbiBuYXkiCisKKyM6IGdpdC1ndWkuc2g6MjY5MAorbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCittc2dzdHIgIkR1eeG7h3QgY8OhYyB04bqtcCB0aW4gbmjDoW5oLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI2OTUKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICJIaeG7g24gdGjhu4sgdHLhu7FjIHF1YW4gbOG7i2NoIHPhu60gbmjDoW5oIGhp4buHbiBuYXkiCisKKyM6IGdpdC1ndWkuc2g6MjY5OQorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0cuG7sWMgcXVhbiBs4buLY2ggc+G7rSBt4buNaSBuaMOhbmgiCisKKyM6IGdpdC1ndWkuc2g6MjcwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgorbXNnc3RyICJEdXnhu4d0IHThuq1wIHRpbiBj4bunYSAlcy4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKK21zZ3N0ciAiRHV54buHdCBs4buLY2ggc+G7rSBj4bunYSAlcyB0cuG7sWMgcXVhbiIKKworIzogZ2l0LWd1aS5zaDoyNzEzIGxpYi9kYXRhYmFzZS50Y2w6NDAgbGliL2RhdGFiYXNlLnRjbDo2NgorbXNnaWQgIkRhdGFiYXNlIFN0YXRpc3RpY3MiCittc2dzdHIgIlRo4buRbmcga8OqIGPGoSBz4bufIGThu68gbGnhu4d1IgorCisjOiBnaXQtZ3VpLnNoOjI3MTYgbGliL2RhdGFiYXNlLnRjbDozMworbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgorbXNnc3RyICJOw6luIGPGoSBz4bufIGThu68gbGnhu4d1IgorCisjOiBnaXQtZ3VpLnNoOjI3MTkKK21zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCittc2dzdHIgIlRo4bqpbSB0cmEgY8ahIHPhu58gZOG7ryBsaeG7h3UiCisKKyM6IGdpdC1ndWkuc2g6MjcyNiBnaXQtZ3VpLnNoOjI3MzAgZ2l0LWd1aS5zaDoyNzM0IGxpYi9zaG9ydGN1dC50Y2w6OAorIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCittc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKK21zZ3N0ciAiVOG6oW8gbOG7kWkgdOG6r3Qg4bufIG3DoG4gaMOsbmggbuG7gW4iCisKKyM6IGdpdC1ndWkuc2g6Mjc0MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjIwMAorbXNnaWQgIlF1aXQiCittc2dzdHIgIlRob8OhdCIKKworIzogZ2l0LWd1aS5zaDoyNzUwCittc2dpZCAiVW5kbyIKK21zZ3N0ciAiSOG7p3kgbOG7h25oIHbhu6thIHLhu5NpIgorCisjOiBnaXQtZ3VpLnNoOjI3NTMKK21zZ2lkICJSZWRvIgorbXNnc3RyICJMw6BtIGzhuqFpIgorCisjOiBnaXQtZ3VpLnNoOjI3NTcgZ2l0LWd1aS5zaDozMzYyCittc2dpZCAiQ3V0IgorbXNnc3RyICJD4bqvdCIKKworIzogZ2l0LWd1aS5zaDoyNzYwIGdpdC1ndWkuc2g6MzM2NSBnaXQtZ3VpLnNoOjM0MzkgZ2l0LWd1aS5zaDozNTI0CisjOiBsaWIvY29uc29sZS50Y2w6NjkKK21zZ2lkICJDb3B5IgorbXNnc3RyICJDaMOpcCIKKworIzogZ2l0LWd1aS5zaDoyNzYzIGdpdC1ndWkuc2g6MzM2OAorbXNnaWQgIlBhc3RlIgorbXNnc3RyICJEw6FuIgorCisjOiBnaXQtZ3VpLnNoOjI3NjYgZ2l0LWd1aS5zaDozMzcxIGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyOAorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOQorbXNnaWQgIkRlbGV0ZSIKK21zZ3N0ciAiWMOzYSBi4buPIgorCisjOiBnaXQtZ3VpLnNoOjI3NzAgZ2l0LWd1aS5zaDozMzc1IGdpdC1ndWkuc2g6MzUyOCBsaWIvY29uc29sZS50Y2w6NzEKK21zZ2lkICJTZWxlY3QgQWxsIgorbXNnc3RyICJDaOG7jW4gdOG6pXQgY+G6oyIKKworIzogZ2l0LWd1aS5zaDoyNzc5Cittc2dpZCAiQ3JlYXRlLi4uIgorbXNnc3RyICJU4bqhby4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzg1Cittc2dpZCAiQ2hlY2tvdXQuLi4iCittc2dzdHIgIkzhuqV5IHJhLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3OTEKK21zZ2lkICJSZW5hbWUuLi4iCittc2dzdHIgIsSQ4buVaSB0w6puLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3OTYKK21zZ2lkICJEZWxldGUuLi4iCittc2dzdHIgIljDs2EuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjgwMQorbXNnaWQgIlJlc2V0Li4uIgorbXNnc3RyICLEkOG6t3QgbOG6oWkuLiIKKworIzogZ2l0LWd1aS5zaDoyODExCittc2dpZCAiRG9uZSIKK21zZ3N0ciAiWG9uZyIKKworIzogZ2l0LWd1aS5zaDoyODEzCittc2dpZCAiQ29tbWl0QEB2ZXJiIgorbXNnc3RyICJDaHV54buDbiBnaWFvQEB2ZXJiIgorCisjOiBnaXQtZ3VpLnNoOjI4MjIgZ2l0LWd1aS5zaDozMzAzCittc2dpZCAiTmV3IENvbW1pdCIKK21zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyBt4bubaSIKKworIzogZ2l0LWd1aS5zaDoyODMwIGdpdC1ndWkuc2g6MzMxMAorbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgorbXNnc3RyICJUdSBi4buVIGzhuqduIGNodXnhu4NuIGdpYW8gY3Xhu5FpIgorCisjOiBnaXQtZ3VpLnNoOjI4NDAgZ2l0LWd1aS5zaDozMjY0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTAxCittc2dpZCAiUmVzY2FuIgorbXNnc3RyICJRdcOpdCBs4bqhaSIKKworIzogZ2l0LWd1aS5zaDoyODQ2Cittc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgorbXNnc3RyICLEkMawYSBsw6puIGLhu4cgcGjDs25nIMSR4buDIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6Mjg1MgorbXNnaWQgIlN0YWdlIENoYW5nZWQgRmlsZXMgVG8gQ29tbWl0IgorbXNnc3RyICLEkMOhbmggZOG6pXUgY8OhYyB04bqtcCB0aW4gxJHDoyB0aGF5IMSR4buVaSBj4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBnaXQtZ3VpLnNoOjI4NTgKK21zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgorbXNnc3RyICLEkMawYSByYSBraOG7j2kgYuG7hyBwaMOzbmcgxJHhu4Mga2jDtG5nIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6Mjg2NCBsaWIvaW5kZXgudGNsOjQ0MgorbXNnaWQgIlJldmVydCBDaGFuZ2VzIgorbXNnc3RyICJIb8OgbiBuZ3V5w6puIGPDoWMgdGhheSDEkeG7lWkiCisKKyM6IGdpdC1ndWkuc2g6Mjg3MiBnaXQtZ3VpLnNoOjM1NzUgZ2l0LWd1aS5zaDozNjA2Cittc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCittc2dzdHIgIkhp4buHbiDDrXQgbuG7mWkgZHVuZyBoxqFuIgorCisjOiBnaXQtZ3VpLnNoOjI4NzYgZ2l0LWd1aS5zaDozNTc5IGdpdC1ndWkuc2g6MzYxMAorbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgorbXNnc3RyICJIaeG7h24gY2hpIHRp4bq/dCBoxqFuIgorCisjOiBnaXQtZ3VpLnNoOjI4ODMgZ2l0LWd1aS5zaDozMjc3IGdpdC1ndWkuc2g6MzM4NgorbXNnaWQgIlNpZ24gT2ZmIgorbXNnc3RyICJLw70gdMOqbiIKKworIzogZ2l0LWd1aS5zaDoyODk5Cittc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCittc2dzdHIgIlRy4buZbiBu4buZaSBi4buZLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI5MDQKK21zZ2lkICJBYm9ydCBNZXJnZS4uLiIKK21zZ3N0ciAiSOG7p3kgYuG7jyBow7JhIHRy4buZbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyOTE2IGdpdC1ndWkuc2g6Mjk0NAorbXNnaWQgIkFkZC4uLiIKK21zZ3N0ciAiVGjDqm0uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjkyMAorbXNnaWQgIlB1c2guLi4iCittc2dzdHIgIsSQ4bqpeSBsw6puLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI5MjQKK21zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgorbXNnc3RyICJYb8OhIG5ow6FuaC4uLiIKKworIzogZ2l0LWd1aS5zaDoyOTM0IGdpdC1ndWkuc2g6MzU1NworbXNnaWQgIk9wdGlvbnMuLi4iCittc2dzdHIgIlTDuXkgY2jhu41uLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI5NDUKK21zZ2lkICJSZW1vdmUuLi4iCittc2dzdHIgIkfhu6EgYuG7jy4uLiIKKworIzogZ2l0LWd1aS5zaDoyOTU0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTQKK21zZ2lkICJIZWxwIgorbXNnc3RyICJUcuG7oyBnacO6cCIKKworIzogZ2l0LWd1aS5zaDoyOTU4IGdpdC1ndWkuc2g6Mjk2MiBsaWIvYWJvdXQudGNsOjE0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm91dCAlcyIKK21zZ3N0ciAiR2nhu5tpIHRoaeG7h3UgduG7gSAlcyIKKworIzogZ2l0LWd1aS5zaDoyOTg2Cittc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCittc2dzdHIgIsSQ4buNYyB0w6BpIGxp4buHdSB0cuG7sWMgdHV54bq/biIKKworIzogZ2l0LWd1aS5zaDoyOTg5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MAorbXNnaWQgIlNob3cgU1NIIEtleSIKK21zZ3N0ciAiSGnhu4duIGtob8OhIFNTSCIKKworIzogZ2l0LWd1aS5zaDozMDA4IGdpdC1ndWkuc2g6MzE0MAorbXNnaWQgIlVzYWdlIgorbXNnc3RyICJDw6FjaCBkw7luZyIKKworIzogZ2l0LWd1aS5zaDozMDg5IGxpYi9ibGFtZS50Y2w6NTczCittc2dpZCAiRXJyb3IiCittc2dzdHIgIkzhu5dpIgorCisjOiBnaXQtZ3VpLnNoOjMxMjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImzhu5dpIG5naGnDqm0gdHLhu41uZzoga2jDtG5nIHRo4buDIGzhuqV5IHRow7RuZyB0aW4gduG7gSDEkcaw4budbmcgZOG6q24gJXM6IEtow7RuZyBjw7MgdOG6rXAgdGluICIKKyJob+G6t2MgdGjGsCBt4bulYyBuaMawIHbhuq15IgorCisjOiBnaXQtZ3VpLnNoOjMxNTMKK21zZ2lkICJDdXJyZW50IEJyYW5jaDoiCittc2dzdHIgIk5ow6FuaCBoaeG7h24gaMOgbmg6IgorCisjOiBnaXQtZ3VpLnNoOjMxNzkKK21zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgorbXNnc3RyICLEkMOhbmggZOG6pXUgY8OhYyB0aGF5IMSR4buVaSAoU+G6vSBjaHV54buDbiBnaWFvKSIKKworIzogZ2l0LWd1aS5zaDozMTk5Cittc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKK21zZ3N0ciAiQuG7jyByYSBraOG7j2kgYuG7hyBwaMOzbmcgY8OhYyB0aGF5IMSR4buVaSIKKworIzogZ2l0LWd1aS5zaDozMjcwCittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAixJDhurd0IGzDqm4gYuG7hyBwaMOzbmcgY8OhYyB0aGF5IMSR4buVaSIKKworIzogZ2l0LWd1aS5zaDozMjg5IGxpYi90cmFuc3BvcnQudGNsOjEzNyBsaWIvdHJhbnNwb3J0LnRjbDoyMjkKK21zZ2lkICJQdXNoIgorbXNnc3RyICLEkOG6qXkgbMOqbiIKKworIzogZ2l0LWd1aS5zaDozMzI0Cittc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIlBo4bqnbiBjaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyBraOG7n2kgdOG6oW86IgorCisjOiBnaXQtZ3VpLnNoOjMzMjUKK21zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiUGjhuqduIGNow7ogZ2nhuqNpIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHR1IGLhu5U6IgorCisjOiBnaXQtZ3VpLnNoOjMzMjYKK21zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJQaOG6p24gY2jDuiBnaeG6o2kgY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdHUgYuG7lSBs4bqnbiBraOG7n2kgdOG6oW86IgorCisjOiBnaXQtZ3VpLnNoOjMzMjcKK21zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiUGjhuqduIGNow7ogZ2nhuqNpIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHR1IGLhu5UgbOG6p24gaMOyYSB0cuG7mW4iCisKKyM6IGdpdC1ndWkuc2g6MzMyOAorbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiR2hpIGNow7ogY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyBow7JhIHRy4buZbjoiCisKKyM6IGdpdC1ndWkuc2g6MzMyOQorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiQ2jDuiB0aMOtY2ggY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbzoiCisKKyM6IGdpdC1ndWkuc2g6MzM3OCBnaXQtZ3VpLnNoOjM1MzIgbGliL2NvbnNvbGUudGNsOjczCittc2dpZCAiQ29weSBBbGwiCittc2dzdHIgIkNow6lwIHThuqV0IGPhuqMiCisKKyM6IGdpdC1ndWkuc2g6MzQwMiBsaWIvYmxhbWUudGNsOjEwNQorbXNnaWQgIkZpbGU6IgorbXNnc3RyICJU4bqtcCB0aW46IgorCisjOiBnaXQtZ3VpLnNoOjM1MjAKK21zZ2lkICJSZWZyZXNoIgorbXNnc3RyICJMw6BtIHTGsMahaSBs4bqhaSIKKworIzogZ2l0LWd1aS5zaDozNTQxCittc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgorbXNnc3RyICJHaeG6o20ga8OtY2ggY+G7oSBwaMO0bmciCisKKyM6IGdpdC1ndWkuc2g6MzU0NQorbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAiVMSDbmcga8OtY2ggY+G7oSBwaMO0bmciCisKKyM6IGdpdC1ndWkuc2g6MzU1MyBsaWIvYmxhbWUudGNsOjI5NAorbXNnaWQgIkVuY29kaW5nIgorbXNnc3RyICJC4bqjbmcgbcOjIgorCisjOiBnaXQtZ3VpLnNoOjM1NjQKK21zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCittc2dzdHIgIsOBcCBk4bulbmcgaGF5IMSR4bqjbyBuZ8aw4bujYyBj4bqjIGto4buRaSIKKworIzogZ2l0LWd1aS5zaDozNTY5Cittc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgorbXNnc3RyICLDgXAgZOG7pW5nIGhheSDEkeG6o28gbmfGsOG7o2MgZMOybmciCisKKyM6IGdpdC1ndWkuc2g6MzU4OAorbXNnaWQgIlJ1biBNZXJnZSBUb29sIgorbXNnc3RyICJDaOG6oXkgY8O0bmcgY+G7pSBow7JhIHRy4buZbiIKKworIzogZ2l0LWd1aS5zaDozNTkzCittc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgorbXNnc3RyICJEw7luZyBwaGnDqm4gYuG6o24g4bufIG3DoXkgY2jhu6ciCisKKyM6IGdpdC1ndWkuc2g6MzU5NworbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgorbXNnc3RyICJEw7luZyBwaGnDqm4gYuG6o24g4bufIG3DoXkgbuG7mWkgYuG7mSIKKworIzogZ2l0LWd1aS5zaDozNjAxCittc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCittc2dzdHIgIlRy4bufIGzhuqFpIGPGoSBi4bqjbiIKKworIzogZ2l0LWd1aS5zaDozNjE5Cittc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIHRy4buxYyBxdWFuIGPDoWMgdGhheSDEkeG7lWkgdHJvbmcgbcO0LcSRdW4gY29uIgorCisjOiBnaXQtZ3VpLnNoOjM2MjMKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJIaeG7g24gdGjhu4sgdHLhu7FjIHF1YW4gbOG7i2NoIHPhu60gbmjDoW5oIGhp4buHbiB04bqhaSB0cm9uZyBtw7QtxJF1biBjb24iCisKKyM6IGdpdC1ndWkuc2g6MzYyNworbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIHRy4buxYyBxdWFuIGzhu4tjaCBz4butIG3hu41pIG5ow6FuaCB0cm9uZyBtw7QtxJF1biBjb24iCisKKyM6IGdpdC1ndWkuc2g6MzYzMgorbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiS2jhu59pIGNo4bqheSBnaXQgZ3VpIHRyb25nIG3DtC3EkXVuLWNvbiIKKworIzogZ2l0LWd1aS5zaDozNjY3Cittc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgorbXNnc3RyICJC4buPIMSRw6FuaCBk4bqldSDEkW/huqFuIGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6MzY2OQorbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCittc2dzdHIgIkLhu48gxJHDoW5oIGThuqV1IGPDoWMgZMOybmcgY+G6p24gY2h1eeG7g24gZ2lhbyIKKworIzogZ2l0LWd1aS5zaDozNjcxCittc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgorbXNnc3RyICJC4buPIMSRw6FuaCBk4bqldSBkw7JuZyBj4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBnaXQtZ3VpLnNoOjM2NzQKK21zZ2lkICJTdGFnZSBIdW5rIEZvciBDb21taXQiCittc2dzdHIgIsSQw6FuaCBk4bqldSDEkW/huqFuIGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6MzY3NgorbXNnaWQgIlN0YWdlIExpbmVzIEZvciBDb21taXQiCittc2dzdHIgIsSQw6FuaCBk4bqldSBjw6FjIGTDsm5nIGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6MzY3OAorbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKK21zZ3N0ciAixJDDoW5oIGThuqV1IGTDsm5nIGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6MzcwMworbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAixJBhbmcga2jhu59pIHThuqFvLi4uIgorCisjOiBnaXQtZ3VpLnNoOjM4NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisiR+G6p24gbmjGsCBjaOG6r2MgY2jhuq9uIGzDoCBtw7RpIHRyxrDhu51uZyB04buTbiB04bqhaS5cbiIKKyJcbiIKKyJDw6FjIGJp4bq/biBtw7RpIHRyxrDhu51uZyBzYXUgxJHDonkgY8OzIGzhur0gc+G6vSBi4buLIGLhu48gcXVhIGLhu59pIGPDoWMgdGnhur9uIHRyw6xuaCBjb24gZ2l0XG4iCisiY2jhuqF5IGLhu59pICVzOlxuIgorIlxuIgorCisjOiBnaXQtZ3VpLnNoOjM4NzUKK21zZ2lkICIiCisiXG4iCisiVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZVxuIgorIlRjbCBiaW5hcnkgZGlzdHJpYnV0ZWQgYnkgQ3lnd2luLiIKK21zZ3N0ciAiIgorIlxuIgorIkPDoWkgbsOgeSBjw7Mgbmd1ecOqbiBuaMOibiBi4bufaSBt4buZdCBs4buXaSBwaMOhdCByYSB04burXG4iCisiVGNsIHBow6JuIHBo4buRaSBi4bufaSBDeWd3aW4uIgorCisjOiBnaXQtZ3VpLnNoOjM4ODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgorImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgorInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCisifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJUaGF5IHRo4bq/IHThu5F0IGNobyAlc1xuIgorImzDoCB0aGF5IHRo4bq/IGPDoWMgZ2nDoSB0cuG7iyBjw6BpIMSR4bq3dCBjaG8gdXNlci5uYW1lIHbDoFxuIgorInVzZXIuZW1haWwgdGjDoG5oIHThuq1wIHRpbiBjw6EgbmjDom4gY+G7p2EgYuG6oW5cbiIKKyJ+Ly5naXRjb25maWcuXG4iCisKKyM6IGxpYi9hYm91dC50Y2w6MjYKK21zZ2lkICJnaXQtZ3VpIC0gYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIEdpdC4iCittc2dzdHIgImdpdC1ndWkgLSBjw7RuZyBj4bulIMSR4buTIGjhu41hIGTDoG5oIGNobyBHaXQuIgorCisjOiBsaWIvYmxhbWUudGNsOjczCittc2dpZCAiRmlsZSBWaWV3ZXIiCittc2dzdHIgIkLhu5kgWGVtIFThuq1wIFRpbiIKKworIzogbGliL2JsYW1lLnRjbDo3OQorbXNnaWQgIkNvbW1pdDoiCittc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW86IgorCisjOiBsaWIvYmxhbWUudGNsOjI4MAorbXNnaWQgIkNvcHkgQ29tbWl0IgorbXNnc3RyICJDaMOpcCBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBsaWIvYmxhbWUudGNsOjI4NAorbXNnaWQgIkZpbmQgVGV4dC4uLiIKK21zZ3N0ciAiVMOsbSBjaOG7ry4uLiIKKworIzogbGliL2JsYW1lLnRjbDoyODgKK21zZ2lkICJHb3RvIExpbmUuLi4iCittc2dzdHIgIk5o4bqjeSDEkeG6v24gZMOybmcuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjk3Cittc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKK21zZ3N0ciAiVGjhu7FjIGhp4buHbiBkw7IgdMOsbSBjaMOpcCB0b8OgbiBi4buZIgorCisjOiBsaWIvYmxhbWUudGNsOjMwMQorbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgorbXNnc3RyICJIaeG7g24gdGjhu4sgbuG7mWkgZHVuZyBj4bunYSBs4buLY2ggc+G7rSIKKworIzogbGliL2JsYW1lLnRjbDozMDQKK21zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgorbXNnc3RyICJYZW0gY8O0bmcgdHLhuqFuZyBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIGNoYSBt4bq5IgorCisjOiBsaWIvYmxhbWUudGNsOjQ2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgJXMuLi4iCittc2dzdHIgIsSQYW5nIMSR4buNYyAlcy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo1OTQKK21zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAixJBhbmcgdOG6o2kgcGjhuqduIGNow7ogZ2nhuqNpIHRoZW8gZMO1aSBjaMOpcC9jaHV54buDbi4uLiIKKworIzogbGliL2JsYW1lLnRjbDo2MTQKK21zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCittc2dzdHIgImTDsm5nIGNow7ogZ2nhuqNpIgorCisjOiBsaWIvYmxhbWUudGNsOjgwNgorbXNnaWQgIkxvYWRpbmcgb3JpZ2luYWwgbG9jYXRpb24gYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgIsSQYW5nIHThuqNpIGPDoWMgY2jDuiBnaeG6o2kgduG7iyB0csOtIG5ndXnDqm4gZ+G7kWMuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODA5Cittc2dpZCAiQW5ub3RhdGlvbiBjb21wbGV0ZS4iCittc2dzdHIgIkNow7ogZ2nhuqNpIGhvw6BuIHThuqV0LiIKKworIzogbGliL2JsYW1lLnRjbDo4MzkKK21zZ2lkICJCdXN5IgorbXNnc3RyICJC4bqtbiIKKworIzogbGliL2JsYW1lLnRjbDo4NDAKK21zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKK21zZ3N0ciAiVGnhur9uIHRyw6xuaCBjaMO6IGdp4bqjaSDEkWFuZyBkaeG7hW4gcmEuIgorCisjOiBsaWIvYmxhbWUudGNsOjg3OQorbXNnaWQgIlJ1bm5pbmcgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uLi4iCittc2dzdHIgIsSQYW5nIGNo4bqheSBkw7IgdMOsbSBzYW8gY2jDqXAgdG/DoG4gZGnhu4duLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjk0NworbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKK21zZ3N0ciAixJBhbmcgdOG6o2kgcGjhuqduIGNow7ogZ2nhuqNpLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjEwMDAKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJUw6FjIGdp4bqjOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDA0Cittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAiTmfGsOG7nWkgY2h1eeG7g24gZ2lhbzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTAwOQorbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgorbXNnc3RyICJU4bqtcCB0aW4gZ+G7kWM6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwNTcKK21zZ2lkICJDYW5ub3QgZmluZCBIRUFEIGNvbW1pdDoiCittc2dzdHIgIktow7RuZyB0aOG7gyB0w6xtIHRo4bqleSBIRUFEIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW86IgorCisjOiBsaWIvYmxhbWUudGNsOjExMTIKK21zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IGzhuqduIGNodXnhu4NuIGdpYW8gbeG6uToiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTEyNworbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGhp4buDbiB0aOG7iyBjaGEgbeG6uSIKKworIzogbGliL2JsYW1lLnRjbDoxMTI4IGxpYi9kaWZmLnRjbDozNDEKK21zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdOG6o2kgZGlmZjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI2OQorbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgorbXNnc3RyICJOZ3V5w6puIGfhu5FjIGLhu59pOiIKKworIzogbGliL2JsYW1lLnRjbDoxMjc1Cittc2dpZCAiSW4gRmlsZToiCittc2dzdHIgIlRyb25nIHThuq1wIHRpbjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI4MAorbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKK21zZ3N0ciAixJDDoyBjaMOpcCBob+G6t2MgRGkgY2h1eeG7g24gxJHhur9uIMSRw6J5IGLhu59pOiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTYgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjEKK21zZ2lkICJDaGVja291dCBCcmFuY2giCittc2dzdHIgIkzhuqV5IHJhIG5ow6FuaCIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjYKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAiTOG6pXkgcmEiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMwIGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6MjkyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OSBsaWIvY2hvb3NlX2ZvbnQudGNsOjQ1IGxpYi9tZXJnZS50Y2w6MTc0CisjOiBsaWIvb3B0aW9uLnRjbDoxMjcgbGliL3JlbW90ZV9hZGQudGNsOjM0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDMKKyM6IGxpYi90b29sc19kbGcudGNsOjQxIGxpYi90b29sc19kbGcudGNsOjIwMiBsaWIvdG9vbHNfZGxnLnRjbDozNDUKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE0MQorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiVGjDtGkiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM1IGxpYi9icm93c2VyLnRjbDoyOTcgbGliL3Rvb2xzX2RsZy50Y2w6MzIxCittc2dpZCAiUmV2aXNpb24iCittc2dzdHIgIsSQaeG7g20gc+G7rWEgxJHhu5VpIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkgbGliL29wdGlvbi50Y2w6MzA5Cittc2dpZCAiT3B0aW9ucyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgorbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiTOG6pXkgduG7gSBuaMOhbmggxJHGsOG7o2MgdGhlbyBkw7VpIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0NworbXNnaWQgIkRldGFjaCBGcm9tIExvY2FsIEJyYW5jaCIKK21zZ3N0ciAiVMOhY2ggcuG7nWkgdOG7qyBOaMOhbmggbuG7mWkgYuG7mSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIzCittc2dpZCAiQ3JlYXRlIEJyYW5jaCIKK21zZ3N0ciAiVOG6oW8gbmjDoW5oIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjgKK21zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKK21zZ3N0ciAiVOG6oW8gbmjDoW5oIG3hu5tpIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTEKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIlThuqFvIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDIKK21zZ2lkICJCcmFuY2ggTmFtZSIKK21zZ3N0ciAiVMOqbiBuaMOhbmgiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0NCBsaWIvcmVtb3RlX2FkZC50Y2w6NDEgbGliL3Rvb2xzX2RsZy50Y2w6NTEKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiVMOqbjoiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo1NworbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaCBOYW1lIgorbXNnc3RyICJLaOG7m3AgduG7m2kgdMOqbiBuaMOhbmggxJHGsOG7o2MgdGhlbyBkw7VpIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKK21zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKK21zZ3N0ciAixJBp4buDbSDEkeG6p3UiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgorbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgorbXNnc3RyICJD4bqtcCBuaOG6rXQgbmjDoW5oIHPhurVuIGPDszoiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQorbXNnaWQgIk5vIgorbXNnc3RyICJLaMO0bmciCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAorbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgorbXNnc3RyICJDaOG7iSBmYXN0LWZvcndhcmQiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MQorbXNnaWQgIlJlc2V0IgorbXNnc3RyICLEkOG6t3QgbOG6oWkiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5NworbXNnaWQgIkNoZWNrb3V0IEFmdGVyIENyZWF0aW9uIgorbXNnc3RyICJM4bqleSByYSBzYXUga2hpIHThuqFvIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTMyCittc2dpZCAiUGxlYXNlIHNlbGVjdCBhIHRyYWNraW5nIGJyYW5jaC4iCittc2dzdHIgIlZ1aSBsw7JuZyBjaOG7jW4gbmjDoW5oIHRoZW8gZMO1aS4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCittc2dzdHIgIk5ow6FuaCB0aGVvIGTDtWkgJXMga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgbmjDoW5oIHRyw6puIGtobyBjaOG7qWEgbcOheSBjaOG7py4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjkyCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiSMOjeSBjdW5nIGPhuqVwIHTDqm4gbmjDoW5oLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NSBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTEyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcycga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgdMOqbiBuaMOhbmggxJHGsOG7o2MgY2jhuqVwIG5o4bqtbi4iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNgorbXNnaWQgIkRlbGV0ZSBCcmFuY2giCittc2dzdHIgIlhvw6EgbmjDoW5oIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjEKK21zZ2lkICJEZWxldGUgTG9jYWwgQnJhbmNoIgorbXNnc3RyICJYw7NhIG5ow6FuaCBu4buZaSBi4buZIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzkKK21zZ2lkICJMb2NhbCBCcmFuY2hlcyIKK21zZ3N0ciAiTmjDoW5oIG7hu5lpIGLhu5kiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MQorbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgorbXNnc3RyICJDaOG7iSB4w7NhIG7hur91IMSRw6MgaMOyYSB0cuG7mW4gdsOgbyIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUzIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTIwCittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgorbXNnc3RyICJMdcO0biAoS2jDtG5nIHRo4buxYyBoaeG7h24ga2nhu4NtIHRyYSBow7JhIHRy4buZbikiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCittc2dzdHIgIkPDoWMgbmjDoW5oIHNhdSDEkcOieSBraMO0bmcgxJHGsOG7o2MgaMOyYSB0cuG7mW4gaG/DoG4gdG/DoG4gdsOgbyAlczoiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTgKK21zZ2lkICIiCisiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKKyJcbiIKKyJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKK21zZ3N0ciAiIgorIktow7RpIHBo4bulYyBjw6FjIG5ow6FuaCDEkcOjIGLhu4sgeMOzYSBsw6Agdmnhu4djIGtow7Mga2jEg24uXG4iCisiXG4iCisiWMOzYSBuaMOhbmggxJHDoyBjaOG7jW4gY2jhu6k/IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJH4bq3cCBs4buXaSBraGkgeMOzYSBjw6FjIG5ow6FuaDpcbiIKKyIlcyIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE1IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMworbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgIsSQ4buVaSB0w6puIG5ow6FuaCIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjI4Cittc2dpZCAiUmVuYW1lIgorbXNnc3RyICLEkOG7lWkgdMOqbiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM4Cittc2dpZCAiQnJhbmNoOiIKK21zZ3N0ciAiTmjDoW5oOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjQ2Cittc2dpZCAiTmV3IE5hbWU6IgorbXNnc3RyICJUw6puIG3hu5tpOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjgxCittc2dpZCAiUGxlYXNlIHNlbGVjdCBhIGJyYW5jaCB0byByZW5hbWUuIgorbXNnc3RyICJIw6N5IGNo4buNbiBuaMOhbmggY+G6p24gxJHhu5VpIHTDqm4uIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTAyIGxpYi9jaGVja291dF9vcC50Y2w6MjAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJOaMOhbmggJyVzJyDEkcOjIGPDsyBy4buTaS4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu5VpIHTDqm4gJyVzJy4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoxNworbXNnaWQgIlN0YXJ0aW5nLi4uIgorbXNnc3RyICLEkGFuZyBraOG7n2kgxJHhu5luZy4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjI3Cittc2dpZCAiRmlsZSBCcm93c2VyIgorbXNnc3RyICJC4buZIGR1eeG7h3QgdOG6rXAgdGluIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTMyIGxpYi9icm93c2VyLnRjbDoxNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nICVzLi4uIgorbXNnc3RyICLEkGFuZyB04bqjaSAlcy4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE5MworbXNnaWQgIltVcCBUbyBQYXJlbnRdIgorbXNnc3RyICJbVOG7m2kgY2hhIG3hurldIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6Mjc1IGxpYi9icm93c2VyLnRjbDoyODIKK21zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzIgorbXNnc3RyICJEdXnhu4d0IGPDoWMgdOG6rXAgdGluIG5ow6FuaCIKKworIzogbGliL2Jyb3dzZXIudGNsOjI4OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQwNgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyOQorbXNnaWQgIkJyb3dzZSIKK21zZ3N0ciAiVMOsbSBkdXnhu4d0IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKK21zZ3N0ciAixJBhbmcgbOG6pXkgduG7gSAlcyB04burICVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMworIywgdGNsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBDYW5ub3QgcmVzb2x2ZSAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kgbmdoacOqbSB0cuG7jW5nOiBLaMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpICVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMAorIzogbGliL3NzaGtleS50Y2w6NTUKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAixJDDs25nIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiQ2jGsGEgY8OzIG5ow6FuaCAnJXMnIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBj4bqldSBow6xuaCBnaXQtcHVsbCDEkcahbiBnaeG6o24gZMOgbmggY2hvICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKKyJcbiIKKyJJdCBjYW5ub3QgZmFzdC1mb3J3YXJkIHRvICVzLlxuIgorIkEgbWVyZ2UgaXMgcmVxdWlyZWQuIgorbXNnc3RyICIiCisiTmjDoW5oICclcycgxJHDoyBz4bq1biBjw7MuXG4iCisiXG4iCisiS2jDtG5nIHRo4buDIGZhc3QtZm9yd2FyZCB0aMOgbmggJXMuXG4iCisiQuG6oW4gY+G6p24gcGjhuqNpIGjDsmEgdHLhu5luLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJLaMO0bmcgaOG7lyB0cuG7oyBjaGnhur9uIGzGsOG7o2MgaMOyYSB0cuG7mW4gJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGPhuq1wIG5o4bqtdCAnJXMnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKK21zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCittc2dzdHIgIlbDuW5nIGLhu4cgcGjDs25nIChjaOG7iSBt4bulYykgxJHDoyBi4buLIGtow7NhIHLhu5NpLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIlRy4bqhbmcgdGjDoWkgcXXDqXQga2jDtG5nIGto4bubcCB24bubaSB0cuG6oW5nIHRow6FpIGtoby5cbiIKKyJcbiIKKyJDw7MgR2l0IGtow6FjIMSRw6Mgc+G7rWEga2hvIG7DoHkga+G7gyB04burIGzhuqduIHF1w6l0IGN14buRaS4gQ+G6p24gcXXDqXQgbOG6oWkgdHLGsOG7m2Mga2hpIHRo4buxYyAiCisiaGnhu4duIHZp4buHYyBjaHV54buDbiBuaMOhbmguXG4iCisiXG4iCisiU+G6vSB0aOG7sWMgaGnhu4duIHZp4buHYyBxdcOpdCBs4bqhaSBuZ2F5IGLDonkgZ2nhu51pLlxuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvICclcycuLi4iCittc2dzdHIgIkPhuq1wIG5o4bqtdCB0aMawIG3hu6VjIGzDoG0gdmnhu4djIHRow6BuaCAnJXMnLi4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgorbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgorbXNnc3RyICJjw6FjIHThuq1wIHRpbiBj4bqnbiBs4bqleSByYSIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorbXNnc3RyICJI4buneSBi4buPIGzhuqV5IHJhICclcycgKGPhuqduIGjDsmEgdHLhu5luIG3hu6ljIHThuq1wIHRpbikuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NworbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgorbXNnc3RyICJD4bqnbiBt4bupYyBow7JhIHRy4buZbiB04bqtcCB0aW4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgorbXNnc3RyICLEkGFuZyDhu58gdHLDqm4gbmjDoW5oICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgorbXNnaWQgIiIKKyJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudGVkIHRvIGJlIG9uIGEgYnJhbmNoLCBjcmVhdGUgb25lIG5vdyBzdGFydGluZyBmcm9tICdUaGlzIERldGFjaGVkICIKKyJDaGVja291dCcuIgorbXNnc3RyICIiCisiQuG6oW4gaGnhu4duIGtow7RuZyBjw7JuIOG7nyBuaMOhbmggbuG7mWkgYuG7mS5cbiIKKyJcbiIKKyJO4bq/dSBi4bqhbiBtdeG7kW4gdHLDqm4gbeG7mXQgbmjDoW5oLCBow6N5IHThuqFvIG3hu5l0IGPDoWkgdOG7qyAnxJDDonkgbMOgIGzhuqV5IHJhIHTDoWNoIHLhu51pJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCittc2dzdHIgIsSQw6MgbOG6pXkgcmEgJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKK21zZ3N0ciAixJDhurd0IGzhuqFpICclcycgdGjDoG5oICclcycgc+G6vSBsw6BtIG3huqV0IG5o4buvbmcgbOG6p24gY2h1eeG7g24gZ2lhbyBzYXUgxJHDonk6IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU1NworbXNnaWQgIlJlY292ZXJpbmcgbG9zdCBjb21taXRzIG1heSBub3QgYmUgZWFzeS4iCittc2dzdHIgIkzhuqV5IGzhuqFpIG5o4buvbmcgbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIG3huqV0IGzDoCBraMO0bmcgZOG7hS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJyVzJz8iCittc2dzdHIgIsSQ4bq3dCBs4bqhaSAnJXMnPyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjcgbGliL21lcmdlLnRjbDoxNjYgbGliL3Rvb2xzX2RsZy50Y2w6MzM2Cittc2dpZCAiVmlzdWFsaXplIgorbXNnc3RyICJUcuG7sWMgcXVhbiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo2MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHNldCBjdXJyZW50IGJyYW5jaC5cbiIKKyJcbiIKKyJUaGlzIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG9ubHkgcGFydGlhbGx5IHN3aXRjaGVkLiAgV2Ugc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgIgorInlvdXIgZmlsZXMsIGJ1dCBmYWlsZWQgdG8gdXBkYXRlIGFuIGludGVybmFsIEdpdCBmaWxlLlxuIgorIlxuIgorIlRoaXMgc2hvdWxkIG5vdCBoYXZlIG9jY3VycmVkLiAgJXMgd2lsbCBub3cgY2xvc2UgYW5kIGdpdmUgdXAuIgorbXNnc3RyICIiCisiR+G6t3AgbOG7l2kga2hpIMSR4bq3dCBuaMOhbmggaGnhu4duIGjDoG5oLlxuIgorIlxuIgorIlRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgY2jhu4kgY2h1eeG7g24ga2jDtG5nIGhvw6BuIHRvw6BuLiAgQ2jDum5nIHTDtGkgY+G6rXAgbmjhuq10IHRow6BuaCBjw7RuZyAiCisiY8OhYyB04bqtcCB0aW4gY+G7p2EgYuG6oW4sIG5oxrBuZyBs4bqhaSBn4bq3cCBs4buXaSBraGkgY+G6rXAgbmjhuq10IG3hu5l0IHThuq1wIHRpbiBj4bunYSBHaXQuXG4iCisiXG4iCisixJBp4buBdSBuw6B5IMSRw6FuZyBs4bq9IGtow7RuZyB0aOG7gyB44bqjeSByYS4gICVzIGdp4budIHPhur0gxJHDs25nIGzhuqFpIHbDoCDEkeG6p3UgaMOgbmcuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQxCittc2dpZCAiU2VsZWN0IgorbXNnc3RyICJDaOG7jW4iCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NTUKK21zZ2lkICJGb250IEZhbWlseSIKK21zZ3N0ciAiSOG7jSBwaMO0bmcgY2jhu68iCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzYKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgIkPhu6EgcGjDtG5nIGNo4buvIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjkzCittc2dpZCAiRm9udCBFeGFtcGxlIgorbXNnc3RyICJQaMO0bmcgY2jhu68gdsOtIGThu6UiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTA1Cittc2dpZCAiIgorIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgorIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCittc2dzdHIgIiIKKyLEkMOieSBsw6AgY2jhu68gbeG6q3UuXG4iCisiTuG6v3UgYuG6oW4gdGjDrWNoIGNo4buvIG5oxrAgdGjhur8gbsOgeSB0aMOsIGNo4buNbiBwaMO0bmcgY2jhu68gbsOgeS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIKK21zZ2lkICJHaXQgR3VpIgorbXNnc3RyICJHaXQgR3VpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk2Cittc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgorbXNnc3RyICJU4bqhbyBraG8gbeG7m2kiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTcKK21zZ2lkICJOZXcuLi4iCittc2dzdHIgIk3hu5tpLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4MAorbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIk5ow6JuIGLhuqNuIG3hu5l0IGtobyBz4bq1biBjw7MiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE1Cittc2dpZCAiQ2xvbmUuLi4iCittc2dzdHIgIk5ow6JuIGLhuqNuLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyMiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTkKK21zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIk3hu58gbeG7mXQga2hvIMSRw6MgY8OzLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMjgKK21zZ2lkICJPcGVuLi4uIgorbXNnc3RyICJN4bufLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE0MQorbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCittc2dzdHIgIkPDoWMga2hvIG3hu5tpIGTDuW5nIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE0NworbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgorbXNnc3RyICJN4bufIGtobyBt4bubaSBkw7luZzoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzE1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB04bqhbyBraG8gJXM6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQwMQorbXNnaWQgIkRpcmVjdG9yeToiCittc2dzdHIgIlRoxrAgbeG7pWM6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQzMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1MgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDUzCittc2dpZCAiR2l0IFJlcG9zaXRvcnkiCittc2dzdHIgIktobyBHaXQiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiVGjGsCBt4bulYyAlcyDEkcOjIHPhurVuIGPDsy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIlThuq1wIHRpbiAlcyDEkcOjIGPDsyBz4bq1bi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc1Cittc2dpZCAiQ2xvbmUiCittc2dzdHIgIk5ow6JuIGLhuqNuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4OAorbXNnaWQgIlNvdXJjZSBMb2NhdGlvbjoiCittc2dzdHIgIlbhu4sgdHLDrSBuZ3Xhu5NuOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTcKK21zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKK21zZ3N0ciAiVGjGsCBt4bulYyDEkcOtY2g6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwNworbXNnaWQgIkNsb25lIFR5cGU6IgorbXNnc3RyICJLaeG7g3UgbmjDom4gYuG6o246IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxMgorbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKK21zZ3N0ciAiVGnDqnUgY2h14bqpbiAoTmhhbmgsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxNworbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKK21zZ3N0ciAiU2FvIGNow6lwIHRvw6BuIGLhu5kgKENo4bqtbSBoxqFuLCBSZWR1bmRhbnQgQmFja3VwKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjIKK21zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKK21zZ3N0ciAiQ2hpYSBz4bq7IChOaGFuaCBuaOG6pXQsIEtow7RuZyBuw6puIGTDuW5nLCBObyBCYWNrdXApIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYwNQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MjEKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIktow7RuZyBwaOG6o2kgbMOgIGtobyBnaXQ6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5NAorbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiVGnDqnUgY2h14bqpbiBjaOG7iSBz4bq1biBzw6BuZyB24bubaSBraG8gbuG7mWkgYuG7mS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk4Cittc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiJ0NoaWEgc+G6uycgY2jhu4kgc+G6tW4gc8OgbmcgduG7m2kga2hvIG7hu5lpIGLhu5kuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiTWnhu4FuIMSR4buLYSBwaMawxqFuZyAlcyDEkcOjIHPhurVuIGPDsy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjMwCittc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBj4bqldSBow6xuaCBi4bqjbiBn4buRYyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDIKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICLEkGFuZyDEkeG6v20gc+G7kSDEkeG7kWkgdMaw4bujbmciCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQzCittc2dpZCAiYnVja2V0cyIKK21zZ3N0ciAieMO0IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHNhbyBjaMOpcCBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBnw6wgxJHhu4MgbmjDom4gYuG6o24gdOG7qyAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMxCittc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgorbXNnc3RyICJOaMOhbmggJ21hc3RlcicgY2jGsGEgxJHGsOG7o2Mga2jhu59pIHThuqFvLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MTgKK21zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgorbXNnc3RyICJMacOqbiBr4bq/dCBj4bupbmcga2jDtG5nIHPhurVuIHPDoG5nLiBUcuG7nyBs4bqhaSBjaOG6vyDEkeG7mSBzYW8gY2jDqXAuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjczMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKK21zZ3N0ciAixJBhbmcgbmjDom4gYuG6o24gdOG7qyAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NjEKK21zZ2lkICJDb3B5aW5nIG9iamVjdHMiCittc2dzdHIgIsSQYW5nIGNow6lwIGPDoWMgxJHhu5FpIHTGsOG7o25nIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MgorbXNnaWQgIktpQiIKK21zZ3N0ciAiS2lCIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBjaMOpcCDEkeG7kWkgdMaw4bujbmc6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NgorbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKK21zZ3N0ciAixJBhbmcgbGnDqm4ga+G6v3QgY8OhYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk3Cittc2dpZCAib2JqZWN0cyIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgwNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdOG6oW8gbGnDqm4ga+G6v3QgY+G7qW5nIMSR4buRaSB0xrDhu6NuZzogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODYwCittc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBs4bqleSBjw6FjIG5ow6FuaCB2w6AgxJHhu5FpIHTGsOG7o25nLiBYZW0ga+G6v3QgeHXhuqV0IHThu6sgYuG6o25nIMSRaeG7gXUga2hp4buDbiDEkeG7gyBjw7MgIgorInRow6ptIHRow7RuZyB0aW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3MQorbXNnaWQgIkNhbm5vdCBmZXRjaCB0YWdzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBs4bqleSB24buBIGPDoWMgdGjhursuIEjDo3kgeGVtIGvhur90IHh14bqldCB04burIGLhuqNuZyDEkWnhu4F1IGtoaeG7g24gxJHhu4MgY8OzIHRow6ptICIKKyJ0aMO0bmcgdGluIGNoaSB0aeG6v3QuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg5NQorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgZMOyIHTDrG0gSEVBRC4gSMOjeSB4ZW0ga+G6v3QgeHXhuqV0IHThu6sgYuG6o25nIMSRaeG7gXUga2hp4buDbiDEkeG7gyBjw7MgdGjDqm0gdGjDtG5nICIKKyJ0aW4gY2hpIHRp4bq/dC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBk4buNbiBz4bqhY2ggJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTEwCittc2dpZCAiQ2xvbmUgZmFpbGVkLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIG5ow6JuIGLhuqNuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTcKK21zZ2lkICJObyBkZWZhdWx0IGJyYW5jaCBvYnRhaW5lZC4iCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBuaMOhbmggbeG6t2MgxJHhu4tuaC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpICVzIG5oxrAgbMOgIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk0MAorbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLEkGFuZyB04bqhbyB0aMawIG3hu6VjIGzDoG0gdmnhu4djIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk0MSBsaWIvaW5kZXgudGNsOjcwIGxpYi9pbmRleC50Y2w6MTM2CisjOiBsaWIvaW5kZXgudGNsOjIwNworbXNnaWQgImZpbGVzIgorbXNnc3RyICJ04bqtcCB0aW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTcwCittc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCittc2dzdHIgIkzhuqV5IHJhIHThuq1wIHRpbiBraOG7n2kgdOG6oW8gZ+G6t3AgbOG7l2kuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTQKK21zZ2lkICJPcGVuIgorbXNnc3RyICJN4bufIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjQKK21zZ2lkICJSZXBvc2l0b3J5OiIKK21zZ3N0ciAiS2hvOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBt4bufIGtobyAlczoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MgorbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCittc2dzdHIgIsSQw6J5IGzDoCB2aeG7h2MgbOG6pXkgcmEgYuG7iyB0w6FjaCBy4budaSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjYwCittc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCittc2dzdHIgIkJp4buDdSB0aOG7qWMgxJFp4buDbSB4w6l0OiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjcyCittc2dpZCAiTG9jYWwgQnJhbmNoIgorbXNnc3RyICJOaMOhbmggbuG7mWkgYuG7mSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc3Cittc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICJOaMOhbmggVGhlbyBkw7VpIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODIgbGliL2Nob29zZV9yZXYudGNsOjU0NAorbXNnaWQgIlRhZyIKK21zZ3N0ciAiVGjhursiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAixJBp4buDbSB4w6l0IGR1eeG7h3Qga2jDtG5nIGjhu6NwIGzhu4c6ICVzIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzQyCittc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgorbXNnc3RyICJDaMawYSBjaOG7jW4gxJFp4buDbSB4w6l0IGR1eeG7h3QuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzUwCittc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCittc2dzdHIgIkJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eSBy4buXbmcuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTM3Cittc2dpZCAiVXBkYXRlZCIKK21zZ3N0ciAixJDDoyBj4bqtcCBuaOG6rXQiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjUKK21zZ2lkICJVUkwiCittc2dzdHIgIlVSTCIKKworIzogbGliL2NvbW1pdC50Y2w6OQorbXNnaWQgIiIKKyJUaGVyZSBpcyBub3RoaW5nIHRvIGFtZW5kLlxuIgorIlxuIgorIllvdSBhcmUgYWJvdXQgdG8gY3JlYXRlIHRoZSBpbml0aWFsIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGNvbW1pdCBiZWZvcmUgdGhpcyAiCisidG8gYW1lbmQuXG4iCittc2dzdHIgIiIKKyLhu54gxJHDonkgY2jhurNuZyBjw7MgZ8OsIMSR4buDIHR1IGLhu5UgY+G6oy5cbiIKKyJcbiIKKyJC4bqhbiDEkWFuZyB04bqhbyBs4bqnbiBjaHV54buDbiBnaWFvIGto4bufaSB04bqhby4g4bueIMSRw6J5IGtow7RuZyBjw7MgbOG6p24gY2h1eeG7g24gZ2lhbyB0csaw4bubYyAiCisibsOgbyDEkeG7gyBtw6AgdHUgYuG7lS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgKK21zZ2lkICIiCisiQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCisiXG4iCisiWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKKyJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgorImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgdHUgYuG7lSB0cm9uZyBraGkgaMOyYSB0cuG7mW4uXG4iCisiXG4iCisiQuG6oW4gaGnhu4duIMSRYW5nIOG7nyBnaeG7r2EgcXXDoSB0csOsbmggaMOyYSB0csO0biwgbcOgIG7DsyBjaMawYSBob8OgbiB04bqldC4gQuG6oW4ga2jDtG5nIHRo4buDICIKKyJ0dSBi4buVICBs4bqnbiBjaHV54buDbiBnaWFvIHRp4buBbiBuaGnhu4dtIHRy4burIHBoaSBi4bqhbiBiw6NpIGLhu48gbOG6p24gaMOyYSB0cuG7mW4gaGnhu4duIMSRYW5nICIKKyJrw61jaCBob+G6oXQuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjQ4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdOG6o2kgZOG7ryBsaeG7h3UgY2h1eeG7g24gZ2lhbyBjaG8gbOG7h25oIHR1IGLhu5U6IgorCisjOiBsaWIvY29tbWl0LnRjbDo3NQorbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCittc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSDEkcaw4bujYyDEkeG7i25oIGRhbmggY+G7p2EgYuG6oW46IgorCisjOiBsaWIvY29tbWl0LnRjbDo4MAorbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCittc2dzdHIgIkdJVF9DT01NSVRURVJfSURFTlQga2jDtG5nIGjhu6NwIGzhu4c6IgorCisjOiBsaWIvY29tbWl0LnRjbDoxMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBUY2wgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyAnJXMnLiIKK21zZ3N0ciAiY+G6o25oIGLDoW86IFRjbCBraMO0bmcgaOG7lyB0cuG7oyBi4bqjbmcgbcOjICclcycuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNDkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiVHLhuqFuZyB0aMOhaSBxdcOpdCBraMO0bmcga2jhu5twIHbhu5tpIHRy4bqhbmcgdGjDoWkga2hvLlxuIgorIlxuIgorIkPDsyBHaXQga2jDoWMgxJHDoyBz4butYSBraG8gbsOgeSBr4buDIHThu6sgbOG6p24gcXXDqXQgY3Xhu5FpLiBD4bqnbiBxdcOpdCBs4bqhaSB0csaw4bubYyBraGkgdGjhu7FjICIKKyJoaeG7h24gdmnhu4djIGNodXnhu4NuIGdpYW8ga2jDoWMuXG4iCisiXG4iCisiU+G6vSB0aOG7sWMgaGnhu4duIHZp4buHYyBxdcOpdCBs4bqhaSBuZ2F5IGLDonkgZ2nhu51pLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIHN0YWdlIHRoZSBmaWxlICIKKyJiZWZvcmUgY29tbWl0dGluZy5cbiIKK21zZ3N0ciAiIgorIkPDoWMgdOG6rXAgdGluIGNoxrBhIGjDsmEgdHLhu5luIGtow7RuZyB0aOG7gyDEkcaw4bujYyBjaHV54buDbiBnaWFvLlxuIgorIlxuIgorIlThuq1wIHRpbiAlcyBjw7MgeHVuZyDEkeG7mXQgaMOyYSB0cuG7mW4uIELhuqFuIHBo4bqjaSBnaeG6o2kgcXV54bq/dCBjaMO6bmcgdsOgIMSRxrBhIGzDqm4gYuG7hyAiCisicGjDs25nIHRyxrDhu5tjIGtoaSBjaHV54buDbiBnaWFvLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgorIlxuIgorIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCittc2dzdHIgIiIKKyJUw6xtIHRo4bqleSB0cuG6oW5nIHRow6FpIHThuq1wIHRpbSBraMO0bmcgaGnhu4N1ICVzLlxuIgorIlxuIgorIlThuq1wIHRpbiAlcyBraMO0bmcgdGjhu4MgxJHGsOG7o2MgY2h1eeG7g24gZ2lhbyBi4bufaSBjaMawxqFuZyB0csOsbmggbsOgeS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTg5Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIllvdSBtdXN0IHN0YWdlIGF0IGxlYXN0IDEgZmlsZSBiZWZvcmUgeW91IGNhbiBjb21taXQuXG4iCittc2dzdHIgIiIKKyJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7DoG8gY+G6p24gY2h1eeG7g24gZ2lhby5cbiIKKyJcbiIKKyJC4bqhbiBwaOG6o2kgxJHGsGEgbMOqbiBi4buHIHBow7NuZyDDrXQgbmjhuqV0IGzDoCBt4buZdCB04bqtcCB0aW4gdHLGsOG7m2Mga2hpIGPDsyB0aOG7gyBjaHV54buDbiAiCisiZ2lhby5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MjA0Cittc2dpZCAiIgorIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuIgorIlxuIgorIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKKyItIFNlY29uZCBsaW5lOiBCbGFua1xuIgorIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKK21zZ3N0ciAiIgorIkjDo3kgY3VuZyBj4bqlcCBs4budaSBjaMO6IGdp4bqjaSBjaG8gbOG6p24gY2h1eeG7g24gZ2lhby5cbiIKKyJcbiIKKyJM4budaSBjaMO6IGdp4bqjaSB04buRdCBuaOG6pXQgbsOqbiBjw7MgxJHhu4tuaCBk4bqhbmcgc2F1OlxuIgorIlxuIgorIi0gRMOybmcgxJHhuqd1IHRpw6puOiBNw7QgdOG6oyBuaOG7r25nIGfDrCBi4bqhbiDEkcOjIGzDoG0uXG4iCisiLSBEw7JuZyB0aOG7qSBoYWk6IMSQ4buDIHRy4buRbmdcbiIKKyItIEPDoWMgZMOybmcgY8OybiBs4bqhaTogTcO0IHThuqMgeGVtIHbDrCBzYW8gbmjhu69uZyB0aGF5IMSR4buVaSBuw6B5IGzDoCBj4bqnbiB0aGnhur90LlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMzUKK21zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKK21zZ3N0ciAixJBhbmcgZ+G7jWkgbcOzYyAoaG9vaykgcHJlLWNvbW1pdC4uLiIKKworIzogbGliL2NvbW1pdC50Y2w6MjUwCittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZS1jb21taXQgaG9vay4iCittc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW8gYuG7iyBraMaw4bubYyB04burIGRvIG3Ds2MgcHJlLWNvbW1pdC4iCisKKyM6IGxpYi9jb21taXQudGNsOjI2OQorbXNnaWQgIiIKKyJZb3UgYXJlIGFib3V0IHRvIGNvbW1pdCBvbiBhIGRldGFjaGVkIGhlYWQuIFRoaXMgaXMgYSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgIgorInRoaW5nIHRvIGRvIGJlY2F1c2UgaWYgeW91IHN3aXRjaCB0byBhbm90aGVyIGJyYW5jaCB5b3Ugd2lsbCBsb3NlIHlvdXIgIgorImNoYW5nZXMgYW5kIGl0IGNhbiBiZSBkaWZmaWN1bHQgdG8gcmV0cmlldmUgdGhlbSBsYXRlciBmcm9tIHRoZSByZWZsb2cuIFlvdSAiCisic2hvdWxkIHByb2JhYmx5IGNhbmNlbCB0aGlzIGNvbW1pdCBhbmQgY3JlYXRlIGEgbmV3IGJyYW5jaCB0byBjb250aW51ZS5cbiIKKyIgXG4iCisiIERvIHlvdSByZWFsbHkgd2FudCB0byBwcm9jZWVkIHdpdGggeW91ciBDb21taXQ/IgorbXNnc3RyICIiCisiQuG6oW4gdGjhu7FjIGhp4buHbiBjaHV54buDbiBnaWFvIOG7nyBjaOG7lyDEkcOjIHTDoWNoIHLhu51pIGto4buPaSBjw6FjIMSR4bqndS4gxJBp4buBdSBuw6B5IGzDoCBuZ3V5ICIKKyJoaeG7g20gYuG7n2kgbuG6v3UgYuG6oW4gY2h1eeG7g24gc2FuZyBuaMOhbmgga2jDoWMgdGjDrCBi4bqhbiBz4bq9IG3huqV0IG5o4buvbmcgdGhheSDEkeG7lWkgbsOgeSB2w6AgIgorInZp4buHYyBs4bqleSBs4bqhaSBjaMO6bmcgdOG7qyByZWZsb2cgY8Wpbmcga2jDsyBraMSDbi4gQuG6oW4gZ+G6p24gbmjGsCBjaOG6r2MgY2jhuq9uIGzDoCBuw6puIGjhu6d5ICIKKyJi4buPIGzhuqduIGNodXnhu4NuIGdpYW8gbsOgeSB2w6AgdOG6oW8gbeG7mXQgbmjDoW5oIG3hu5tpIHRyxrDhu5tjIGtoaSB0aeG6v3AgdOG7pWMuXG4iCisiIFxuIgorIiBC4bqhbiBjw7MgdGjhu7FjIHPhu7EgbXXhu5FuIHRp4bq/cCB04bulYyBjaHV54buDbiBnaWFvPyIKKworIzogbGliL2NvbW1pdC50Y2w6MjkwCittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgIsSQYW5nIGfhu41pIG3Ds2MgY29tbWl0LW1zZy4uLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzA1Cittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW8gYuG7iyBraMaw4bubYyB04burIGRvIG3Ds2MgY29tbWl0LW1zZy4iCisKKyM6IGxpYi9jb21taXQudGNsOjMxOAorbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKK21zZ3N0ciAiQ2h1eeG7g24gZ2lhbyBjw6FjIHRoYXkgxJHhu5VpLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozMzQKK21zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB3cml0ZS10cmVlOiIKKworIzogbGliL2NvbW1pdC50Y2w6MzM1IGxpYi9jb21taXQudGNsOjM3OSBsaWIvY29tbWl0LnRjbDo0MDAKK21zZ2lkICJDb21taXQgZmFpbGVkLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGNodXnhu4NuIGdpYW8uIgorCisjOiBsaWIvY29tbWl0LnRjbDozNTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgorbXNnc3RyICJM4bqnbiBjaHV54buDbiBnaWFvICVzIGPDsyB24bq7IMSRw6MgaMawIGjhu49uZyIKKworIzogbGliL2NvbW1pdC50Y2w6MzU3Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiS2jDtG5nIGPDsyB0aGF5IMSR4buVaSBuw6BvIMSR4buDIGNodXnhu4NuIGdpYW8uXG4iCisiXG4iCisiS2jDtG5nIGPDsyB04bqtcCB0aW4gbsOgbyDEkcaw4bujYyBz4butYSBi4bufaSBs4bqnbiBjaHV54buDbiBnaWFvIG7DoHkgdsOgIG7DsyBraMO0bmcgcGjhuqNpIGzDoCAiCisibOG6p24gY2h1eeG7g24gZ2lhbyBow7JhIHRy4buZbi5cbiIKKyJcbiIKKyJT4bq9IHRo4buxYyBoaeG7h24gdmnhu4djIHF1w6l0IGzhuqFpIG5nYXkgYsOieSBnaeG7nS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzY0Cittc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgorbXNnc3RyICJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7DoG8gxJHhu4MgY2h1eeG7g24gZ2lhby4iCisKKyM6IGxpYi9jb21taXQudGNsOjM3OAorbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCittc2dzdHIgImNvbW1pdC10cmVlIGfhurdwIGzhu5dpOiIKKworIzogbGliL2NvbW1pdC50Y2w6Mzk5Cittc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgorbXNnc3RyICJj4bqtcCBuaOG6rXQgdGhhbSBjaGnhur91IHRo4bqldCBi4bqhaToiCisKKyM6IGxpYi9jb21taXQudGNsOjQ5MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKK21zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIHThuqFvICVzOiAlcyIKKworIzogbGliL2NvbnNvbGUudGNsOjU5Cittc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAixJBhbmcgY2jhuqF5Li4gdnVpIGzDsm5nIMSR4bujaS4uLiIKKworIzogbGliL2NvbnNvbGUudGNsOjE4NgorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIlRow6BuaCBjw7RuZyIKKworIzogbGliL2NvbnNvbGUudGNsOjIwMAorbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKK21zZ3N0ciAiTOG7l2k6IEPDonUgbOG7h25oIGfhurdwIGzhu5dpIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQyCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIlPhu5EgbMaw4bujbmcgxJHhu5FpIHTGsOG7o25nIGLhu4sgbeG6pXQiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDMKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAiRHVuZyBsxrDhu6NuZyDEkcSpYSDEkcaw4bujYyBkw7luZyBi4bufaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBi4buLIG3huqV0IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ0Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJT4buRIGzGsOG7o25nIMSR4buRaSB0xrDhu6NuZyDEkcaw4bujYyDEkcOzbmcgZ8OzaSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NQorbXNnaWQgIk51bWJlciBvZiBwYWNrcyIKK21zZ3N0ciAiU+G7kSBsxrDhu6NuZyBnw7NpIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJEdW5nIGzGsOG7o25nIMSRxKlhIMSRxrDhu6NjIGTDuW5nIGLhu59pIGPDoWMgxJHhu5FpIHTGsOG7o25nIGfDs2kiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKK21zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgorbXNnc3RyICJDw6FjIMSR4buRaSB0xrDhu6NuZyBnw7NpIGNo4budIHjDqW4gYuG7m3QiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKK21zZ2lkICJHYXJiYWdlIGZpbGVzIgorbXNnc3RyICJDw6FjIHThuq1wIHRpbiByw6FjIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjcyCittc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiTsOpbiBjxqEgc+G7nyBk4buvIGxp4buHdSDEkeG7kWkgdMaw4bujbmciCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKK21zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSBjxqEgc+G7nyBk4buvIGxp4buHdSDEkeG7kWkgdMaw4bujbmcgYuG6sW5nIGzhu4duaCBmc2NrIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjEwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCisiXG4iCisiVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyAiCisidGhlIGRhdGFiYXNlLlxuIgorIlxuIgorIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgorbXNnc3RyICIiCisiSGnhu4duIGtobyBuw6B5IG3huqV0IMaw4bubYyBjaOG7q25nIGtob+G6o25nICVpIMSR4buRaSB0xrDhu6NuZy5cbiIKKyJcbiIKKyLEkOG7gyB04buRaSDGsHUgaMOzYSBoaeG7h3Ugc3XhuqV0LCBraHV54bq/biBuZ2jhu4sgYuG6oW4gbsOqbiBuw6luIGPGoSBz4bufIGThu68gbGnhu4d1IGPhu6dhIG3DrG5oICIKKyJs4bqhaS5cbiIKKyJcbiIKKyJOw6luIGPGoSBz4bufIGThu68gbGnhu4d1IGNo4bupPyIKKworIzogbGliL2RhdGUudGNsOjI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKK21zZ3N0ciAiTmfDoHkgdGjDoW5nIGtow7RuZyBo4bujcCBs4buHIHThu6sgR2l0OiAlcyIKKworIzogbGliL2RpZmYudGNsOjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgorIlxuIgorIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgorIlxuIgorIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKKyJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgorIlxuIgorIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgorInRoZSBzYW1lIHN0YXRlLiIKK21zZ3N0ciAiIgorIktow7RuZyB0w6xtIHRo4bqleSBraMOhYyBiaeG7h3QgZ8OsLlxuIgorIlxuIgorIiVzIGtow7RuZyB0aGF5IMSR4buVaS5cbiIKKyJcbiIKKyJUaOG7nWkgZ2lhbiBz4butYSDEkeG7lWkgY+G7p2EgdOG6rXAgdGluIG7DoHkgxJHGsOG7o2MgY+G6rXAgbmjhuq10IGLhu59pIOG7qW5nIGThu6VuZyBraMOhYywgbmjGsG5nIG7hu5lpICIKKyJkdW5nIGLDqm4gdHJvbmcgdOG6rXAgdGluIHRow6wga2jDtG5nIHRoYXkgxJHhu5VpLlxuIgorIlxuIgorIlPhur0gdGjhu7FjIGhp4buHbiBxdcOpdCBs4bqhaSBt4buZdCBjw6FjaCB04buxIMSR4buZbmcgxJHhu4MgdMOsbSBjw6FjIHThuq1wIHRpbiBraMOhYyBjw6FpIG3DoCBjw7MgdGjhu4MgIgorImPDsyBjw7luZyB0w6xuaCB0cuG6oW5nLiIKKworIzogbGliL2RpZmYudGNsOjEwNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKK21zZ3N0ciAixJBhbmcgdOG6o2kgZGlmZiBj4bunYSAlcy4uLiIKKworIzogbGliL2RpZmYudGNsOjEyNQorbXNnaWQgIiIKKyJMT0NBTDogZGVsZXRlZFxuIgorIlJFTU9URTpcbiIKK21zZ3N0ciAiIgorIk7hu5hJQuG7mDogxJHDoyB4b8OhXG4iCisiTcOBWUNI4bumOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTMwCittc2dpZCAiIgorIlJFTU9URTogZGVsZXRlZFxuIgorIkxPQ0FMOlxuIgorbXNnc3RyICIiCisiTcOBWUNI4bumOiDEkcOjIHhvw6FcbiIKKyJO4buYSULhu5g6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMzcKK21zZ2lkICJMT0NBTDpcbiIKK21zZ3N0ciAiTuG7mEktQuG7mDpcbiIKKworIzogbGliL2RpZmYudGNsOjE0MAorbXNnaWQgIlJFTU9URTpcbiIKK21zZ3N0ciAiTcOBWS1DSOG7pjpcbiIKKworIzogbGliL2RpZmYudGNsOjIwMiBsaWIvZGlmZi50Y2w6MzQwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBoaeG7g24gdGjhu4sgJXMiCisKKyM6IGxpYi9kaWZmLnRjbDoyMDMKK21zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgorbXNnc3RyICJM4buXaSBraGkgdOG6o2kgdOG6rXAgdGluOiIKKworIzogbGliL2RpZmYudGNsOjIxMAorbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKK21zZ3N0ciAiS2hvIEdpdCAoZOG7sSDDoW4gY29uKSIKKworIzogbGliL2RpZmYudGNsOjIyMgorbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKK21zZ3N0ciAiKiBU4bqtcCB0aW4gbmjhu4sgcGjDom4gKGtow7RuZyBoaeG7g24gdGjhu4sgbuG7mWkgZHVuZykuIgorCisjOiBsaWIvZGlmZi50Y2w6MjI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCisiKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCittc2dzdHIgIiIKKyIqIFThuq1wIHRpbiBjaMawYSB0aGVvIGTDtWkgbMOgICVkIGJ5dGUuXG4iCisiKiBDaOG7iSBoaeG7g24gdGjhu4sgJWQgYnl0ZSDEkeG6p3UgLlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgorIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKK21zZ3N0ciAiIgorIlxuIgorIiogVOG6rXAgdGluIGNoxrBhIHRoZW8gZMO1aSDEkcaw4bujYyBj4bqvdCB04bqhaSDEkcOieSBi4bufaSAlcy5cbiIKKyIqIMSQ4buDIHhlbSB0b8OgbiBi4buZIHThuq1wIHRpbiwgaMOjeSBkw7luZyDhu6luZyBk4bulbmcgYmnDqm4gc2/huqFuIGLDqm4gbmdvw6BpLlxuIgorCisjOiBsaWIvZGlmZi50Y2w6NTYwCittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBi4buPIHJhIGto4buPaSBi4buHIHBow7NuZyBraOG7kWkgxJHDoyBjaOG7jW4iCisKKyM6IGxpYi9kaWZmLnRjbDo1NjcKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkcawYSBsw6puIGLhu4cgcGjDs25nIGto4buRaSDEkcOjIGNo4buNbiIKKworIzogbGliL2RpZmYudGNsOjY0NgorbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGxpbmUuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgYuG7jyByYSBraOG7j2kgYuG7hyBwaMOzbmcgZMOybmcgxJHDoyBjaOG7jW4iCisKKyM6IGxpYi9kaWZmLnRjbDo2NTQKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkcawYSBsw6puIGLhu4cgcGjDs25nIGTDsm5nIMSRw6MgY2jhu41uIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0MworbXNnaWQgIkRlZmF1bHQiCittc2dzdHIgIk3hurdjIMSR4buLbmgiCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU3lzdGVtICglcykiCittc2dzdHIgIkjhu4cgdGjhu5FuZyAoJXMpIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ1OSBsaWIvZW5jb2RpbmcudGNsOjQ2NQorbXNnaWQgIk90aGVyIgorbXNnc3RyICJLaMOhYyIKKworIzogbGliL2Vycm9yLnRjbDoyMCBsaWIvZXJyb3IudGNsOjExNgorbXNnaWQgImVycm9yIgorbXNnc3RyICJs4buXaSIKKworIzogbGliL2Vycm9yLnRjbDozNgorbXNnaWQgIndhcm5pbmciCittc2dzdHIgImPhuqNuaCBiw6FvIgorCisjOiBsaWIvZXJyb3IudGNsOjk2Cittc2dpZCAiWW91IG11c3QgY29ycmVjdCB0aGUgYWJvdmUgZXJyb3JzIGJlZm9yZSBjb21taXR0aW5nLiIKK21zZ3N0ciAiQuG6oW4gcGjhuqNpIHPhu61hIGPDoWMgbOG7l2kgdHLDqm4gdHLGsOG7m2Mga2hpIGNodXnhu4NuIGdpYW8uIgorCisjOiBsaWIvaW5kZXgudGNsOjYKK21zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCittc2dzdHIgIktow7RuZyB0aOG7gyBi4buPIGtow7NhIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogbGliL2luZGV4LnRjbDoxNworbXNnaWQgIkluZGV4IEVycm9yIgorbXNnc3RyICJM4buXaSBt4bulYyBs4bulYyIKKworIzogbGliL2luZGV4LnRjbDoxOQorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgR2l0IGluZGV4IGZhaWxlZC4gIEEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvICIKKyJyZXN5bmNocm9uaXplIGdpdC1ndWkuIgorbXNnc3RyICIiCisiQ+G6rXAgbmjhuq10IG3hu6VjIGzhu6VjIGNobyBHaXQgZ+G6t3AgbOG7l2kuIFZp4buHYyBxdcOpdCBs4bqhaSBz4bq9IHThu7EgxJHhu5luZyDEkcaw4bujYyBraOG7n2kgY2jhuqF5IMSR4buDICIKKyLEkeG7k25nIGjDs2EgbOG6oWkgduG7m2kgZ2l0LWd1aS4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzAKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiVGnhur9wIHThu6VjIgorCisjOiBsaWIvaW5kZXgudGNsOjMzCittc2dpZCAiVW5sb2NrIEluZGV4IgorbXNnc3RyICJC4buPIGtow7NhIG3hu6VjIGzhu6VjIgorCisjOiBsaWIvaW5kZXgudGNsOjI5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKK21zZ3N0ciAiQuG7jyAlcyByYSBraOG7j2kgdmnhu4djIGNodXnhu4NuIGdpYW8iCisKKyM6IGxpYi9pbmRleC50Y2w6MzM3Cittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAixJDDoyBjaHV54buDbiBnaWFvIHLhu5NpLiIKKworIzogbGliL2luZGV4LnRjbDozNTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIsSQYW5nIHRow6ptICVzIgorCisjOiBsaWIvaW5kZXgudGNsOjM4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YWdlICVkIHVudHJhY2tlZCBmaWxlcz8iCittc2dzdHIgIsSQxrBhICVkIHThuq1wIHRpbiBjaMawYSB0aGVvIGTDtWkgbMOqbiBi4buHIHBow7NuZyDEkeG7gyBjaHV54buDbiBnaWFvPyIKKworIzogbGliL2luZGV4LnRjbDo0MjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKK21zZ3N0ciAiSG/DoG4gbmd1ecOqbiBjw6FjIHRoYXkgxJHhu5VpIHRyb25nIHThuq1wIHRpbiAlcz8iCisKKyM6IGxpYi9pbmRleC50Y2w6NDMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgorbXNnc3RyICJIb8OgbiBuZ3V5w6puIGPDoWMgdGhheSDEkeG7lWkgdHJvbmcgJWkgdOG6rXAgdGluPyIKKworIzogbGliL2luZGV4LnRjbDo0MzgKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIiIKKyJN4buNaSB0aGF5IMSR4buVaSBjaMawYSDEkcaw4bujYyDEkcawYSBsw6puIGLhu4cgcGjDs25nIHPhur0gbeG6pXQgdsSpbmggdmnhu4VuIGRvIGzhu4duaCByZXZlcnQuIgorCisjOiBsaWIvaW5kZXgudGNsOjQ0MQorbXNnaWQgIkRvIE5vdGhpbmciCittc2dzdHIgIktow7RuZyBsw6BtIGfDrCIKKworIzogbGliL2luZGV4LnRjbDo0NTkKK21zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCittc2dzdHIgIsSQYW5nIGhvw6BuIG5ndXnDqm4gY8OhYyB04bqtcCB0aW4gxJHDoyBjaOG7jW4iCisKKyM6IGxpYi9pbmRleC50Y2w6NDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nICVzIgorbXNnc3RyICLEkGFuZyBob8OgbiBuZ3V5w6puICVzIgorCisjOiBsaWIvbGluZS50Y2w6MTcKK21zZ2lkICJHb3RvIExpbmU6IgorbXNnc3RyICJOaOG6o3kgxJHhur9uIGTDsm5nOiIKKworIzogbGliL2xpbmUudGNsOjIzCittc2dpZCAiR28iCittc2dzdHIgIk5o4bqjeSIKKworIzogbGliL21lcmdlLnRjbDoxMworbXNnaWQgIiIKKyJDYW5ub3QgbWVyZ2Ugd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhbnkgdHlwZSBvZiBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBow7JhIHRy4buZbiB0cm9uZyBraGkgdHUgYuG7lS5cbiIKKyJcbiIKKyJC4bqhbiBwaOG6o2kgaG/DoG4gdOG6pXQgdmnhu4djIHR1IGLhu5UgbOG6p24gY2h1eeG7g24gZ2lhbyB0csaw4bubYyBraGkgYuG6r3QgxJHhuqd1IGLhuqV0IGvhu7Mga2nhu4N1ICIKKyJow7JhIHRy4buZbiBuw6BvLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJUcuG6oW5nIHRow6FpIHF1w6l0IGtow7RuZyBraOG7m3AgduG7m2kgdHLhuqFuZyB0aMOhaSBraG8uXG4iCisiXG4iCisiQ8OzIEdpdCBraMOhYyDEkcOjIHPhu61hIGtobyBuw6B5IGvhu4MgdOG7qyBs4bqnbiBxdcOpdCBjdeG7kWkuIEPhuqduIHF1w6l0IGzhuqFpIHRyxrDhu5tjIGtoaSB0aOG7sWMgIgorImhp4buHbiB2aeG7h2MgaMOyYSB0cuG7mW4uXG4iCisiXG4iCisiU+G6vSB0aOG7sWMgaGnhu4duIHZp4buHYyBxdcOpdCBs4bqhaSBuZ2F5IGLDonkgZ2nhu51pLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgorIlxuIgorIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgorIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIkLhuqFuIMSRYW5nIOG7nyBnaeG7r2Egdmnhu4djIHRoYXkgxJHhu5VpLlxuIgorIlxuIgorIlThuq1wIHRpbiAlcyDEkcOjIGLhu4sgc+G7rWEgxJHhu5VpLlxuIgorIlxuIgorIkLhuqFuIG7Dqm4gaG/DoG4gdGhp4buHbiBs4bqnbiBjaHV54buDbiBnaWFvIGhp4buHbiBuYXkgdHLGsOG7m2Mga2hpIGjDsmEgdHLhu5luLiBDaOG7iSBjw7MgdGjhur8gIgorImLhuqFuIG3hu5tpIGPDsyB0aOG7gyBi4bqvdCDEkeG6p3UgaMOyYSB0cuG7mW4gY8OhaSAuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhbmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaXMgbW9kaWZpZWQuXG4iCisiXG4iCisiWW91IHNob3VsZCBjb21wbGV0ZSB0aGUgY3VycmVudCBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGEgbWVyZ2UuICBEb2luZyBzbyAiCisid2lsbCBoZWxwIHlvdSBhYm9ydCBhIGZhaWxlZCBtZXJnZSwgc2hvdWxkIHRoZSBuZWVkIGFyaXNlLlxuIgorbXNnc3RyICIiCisiQuG6oW4gxJFhbmcg4bufIGdp4buvYSB2aeG7h2MgdGhheSDEkeG7lWkuXG4iCisiXG4iCisiVOG6rXAgdGluICVzIMSRw6MgYuG7iyBz4butYSDEkeG7lWkuXG4iCisiXG4iCisiQuG6oW4gbsOqbiBob8OgbiB0aGnhu4duIGzhuqduIGNodXnhu4NuIGdpYW8gaGnhu4duIG5heSB0csaw4bubYyBraGkgaMOyYSB0cuG7mW4uICBMw6BtIG5oxrAgduG6rXkgIgorImdpw7pwIGLhuqFuIGPDsyB0aOG7gyBsb+G6oWkgYuG7jyB2aeG7h2MgbOG7l2kgdHJvbmcgaMOyYSB0cuG7mW4uXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiVzIHRyw6puICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjEyMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgYW5kICVzLi4uIgorbXNnc3RyICLEkGFuZyBow7JhIHRy4buZbiAlcyB2w6AgJXMuLi4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMzCittc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCittc2dzdHIgIkjDsmEgdHLhu5luIMSRw6MgdGjhu7FjIGhp4buHbiB0aMOgbmggY8O0bmcuIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzNQorbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgorbXNnc3RyICJIw7JhIHRy4buZbiBn4bq3cCBs4buXaS4gQ+G6p24gZ2nhuqNpIHF1eeG6v3QgY8OhYyB4dW5nIMSR4buZdCB0csaw4bubYy4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2UgSW50byAlcyIKK21zZ3N0ciAiSMOyYSB0cuG7mW4gdsOgbyAlcyIKKworIzogbGliL21lcmdlLnRjbDoxNzkKK21zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKK21zZ3N0ciAixJBp4buDbSBj4bqnbiBow7JhIHRy4buZbiIKKworIzogbGliL21lcmdlLnRjbDoyMTQKK21zZ2lkICIiCisiQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBo4buneSBi4buPIHRyb25nIGtoaSDEkWFuZyB0dSBi4buVLlxuIgorIlxuIgorIkLhuqFuIGPhuqduIHBo4bqjaSBob8OgbiB04bqldCB2aeG7h2MgdHUgYuG7lSBs4bqnbiBjaHV54buDbiBnaWFvIG7DoHkuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjI0Cittc2dpZCAiIgorIkFib3J0IG1lcmdlP1xuIgorIlxuIgorIkFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIlxuIgorIkNvbnRpbnVlIHdpdGggYWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2U/IgorbXNnc3RyICIiCisiQsOjaSBi4buPIGjDsmEgdHLhu5luP1xuIgorIlxuIgorIkLDo2kgYuG7jyBow7JhIHRy4buZbiBoaeG7h24gbmF5IHPhur0gbMOgbSAqVOG6pFQgQ+G6oiogY8OhYyB0aGF5IMSR4buVaSBjaMawYSDEkcaw4bujYyBjaHV54buDbiBnaWFvICIKKyJi4buLIG3huqV0LlxuIgorIlxuIgorIlRp4bq/cCB04bulYyBiw6NpIGLhu48gdmnhu4djIGjDsmEgdHLhu5luIGhp4buHbiB04bqhaT8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjMwCittc2dpZCAiIgorIlJlc2V0IGNoYW5nZXM/XG4iCisiXG4iCisiUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIlxuIgorIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgorbXNnc3RyICIiCisixJDhurd0IGzhuqFpIG3hu41pIHRoYXkgxJHhu5VpP1xuIgorIlxuIgorIlZp4buHYyDEkeG6t3QgbOG6oWkgY8OhYyB0aGF5IMSR4buVaSBz4bq9IGzDoG0gKk3hu4xJKiB0aGF5IMSR4buVaSBjaMawYSBjaHV54buDbiBnaWFvIGJp4bq/biBt4bqldC5cbiIKKyJcbiIKKyJW4bqrbiB0aeG6v3AgdOG7pWMgxJHhurd0IGzhuqFpIGPDoWMgdGhheSDEkeG7lWkgaGnhu4duIHThuqFpPyIKKworIzogbGliL21lcmdlLnRjbDoyNDEKK21zZ2lkICJBYm9ydGluZyIKK21zZ3N0ciAiQsOjaSBi4buPIgorCisjOiBsaWIvbWVyZ2UudGNsOjI0MQorbXNnaWQgImZpbGVzIHJlc2V0IgorbXNnc3RyICLEkeG6t3QgbOG6oWkgY8OhYyB04bqtcCB0aW4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjY5Cittc2dpZCAiQWJvcnQgZmFpbGVkLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGLDo2kgYuG7jy4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjcxCittc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgorbXNnc3RyICLEkMOjIGLDo2kgYuG7jyB4b25nLiAgU+G6tW4gc8OgbmcuIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo4Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKK21zZ3N0ciAiQnXhu5ljIHBow6JuIGdp4bqjaSB0aMOgbmggbmjDoW5oIGPGoSBz4bufPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6OQorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhpcyBicmFuY2g/IgorbXNnc3RyICJCdeG7mWMgcGjDom4gZ2nhuqNpIHRow6BuaCBuaMOhbmggbsOgeT8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKK21zZ3N0ciAiQnXhu5ljIHBow6JuIGdp4bqjaSB0aMOgbmggbmjDoW5oIGtow6FjPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKKyJcbiIKKyIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgorIlxuIgorIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCittc2dzdHIgIiIKKyJDaMO6IMO9IGzDoCBkaWZmIGNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIHRoYXkgxJHhu5VpIHh1bmcgxJHhu5l0LlxuIgorIlxuIgorIiVzIHPhur0gYuG7iyBnaGkgxJHDqC5cbiIKKyJcbiIKKyJUaGFvIHTDoWMgbsOgeSBjaOG7iSBjw7MgdGjhu4MgYuG7jyBk4bufIGLhurFuZyBjw6FjaCBraOG7n2kgxJHhu5luZyBs4bqhaSB2aeG7h2MgaMOyYSB0cuG7mW4uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgorbXNnc3RyICIiCisiVOG6rXAgdGluICVzIGPDsyB24bq7IGNoxrBhIMSRxrDhu6NjIGdp4bqjaSBxdXnhur90IHh1bmcgxJHhu5l0LCB24bqrbiDEkcOhbmggZOG6pXUgbMOgIGPhuqduIGNodXnhu4NuICIKKyJnaWFvPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6NjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgcmVzb2x1dGlvbiBmb3IgJXMiCittc2dzdHIgIsSQYW5nIHBow6JuIGdp4bqjaSBjaG8gJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQorbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSB4dW5nIMSR4buZdCB4w7NhIGhheSBsacOqbiBr4bq/dCBkw7luZyBt4buZdCBjw7RuZyBj4bulIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKK21zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJU4bqtcCB0aW4geHVuZyDEkeG7mXQga2jDtG5nIHThu5NuIHThuqFpIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgY8O0bmcgY+G7pSBow7JhIHRy4buZbiBHVUk6ICclcyciCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuc3VwcG9ydGVkIG1lcmdlIHRvb2wgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIGjhu5cgdHLhu6MgY8O0bmcgY+G7pSB0cuG7mW4gJyVzJyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzEwCittc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCittc2dzdHIgIkPDtG5nIGPhu6UgaMOyYSB0cuG7mW4gxJFhbmcgY2jhuqF5IHLhu5NpLCBjaOG6pW0gZOG7qXQgbsOzPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHJldHJpZXZpbmcgdmVyc2lvbnM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJH4bq3cCBs4buXaSBraGkgdHJ1eSBs4bqhaSBwaGnDqm4gYuG6o246XG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4Mga2jhu59pIGNo4bqheSBjw7RuZyBj4bulIGjDsmEgdHLhu5luOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNTQKK21zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCittc2dzdHIgIsSQYW5nIGNo4bqheSBjw7RuZyBj4bulIHRy4buZbi4uLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzgyIGxpYi9tZXJnZXRvb2wudGNsOjM5MAorbXNnaWQgIk1lcmdlIHRvb2wgZmFpbGVkLiIKK21zZ3N0ciAiQ8O0bmcgY+G7pSB0cuG7mW4gZ+G6t3AgbOG7l2kuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZ2xvYmFsIGVuY29kaW5nICclcyciCittc2dzdHIgIkLhuqNuZyBtw6MgdG/DoG4gY+G7pWMga2jDtG5nIGjhu6NwIGzhu4cgJyVzJyIKKworIzogbGliL29wdGlvbi50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAiQuG6o25nIG3DoyBraG8gY2jhu6lhIGtow7RuZyBo4bujcCBs4buHICclcyciCisKKyM6IGxpYi9vcHRpb24udGNsOjExOQorbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCittc2dzdHIgIlBo4bulYyBo4buTaSB0aMOgbmggbeG6t2MgxJHhu4tuaCIKKworIzogbGliL29wdGlvbi50Y2w6MTIzCittc2dpZCAiU2F2ZSIKK21zZ3N0ciAiR2hpIGzhuqFpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyBSZXBvc2l0b3J5IgorbXNnc3RyICIlcyBraG8iCisKKyM6IGxpYi9vcHRpb24udGNsOjEzNAorbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCittc2dzdHIgIlRvw6BuIGPhu6VjIChN4buNaSBraG8pIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDAKK21zZ2lkICJVc2VyIE5hbWUiCittc2dzdHIgIlTDqm4gbmfGsOG7nWkgZMO5bmciCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MQorbXNnaWQgIkVtYWlsIEFkZHJlc3MiCittc2dzdHIgIsSQ4buLYSBjaOG7iSB0aMawIMSRaeG7h24gdOG7rSIKKworIzogbGliL29wdGlvbi50Y2w6MTQzCittc2dpZCAiU3VtbWFyaXplIE1lcmdlIENvbW1pdHMiCittc2dzdHIgIlThu5VuZyBo4bujcCB24buBIGjDsmEgdHLhu5luIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogbGliL29wdGlvbi50Y2w6MTQ0Cittc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgorbXNnc3RyICJDaGkgdGnhur90IHZp4buHYyBow7JhIHRy4buZbiIKKworIzogbGliL29wdGlvbi50Y2w6MTQ1Cittc2dpZCAiU2hvdyBEaWZmc3RhdCBBZnRlciBNZXJnZSIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIHRo4buRbmcga8OqIGtow6FjIGJp4buHdCBzYXUgaMOyYSB0cuG7mW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NgorbXNnaWQgIlVzZSBNZXJnZSBUb29sIgorbXNnc3RyICJEw7luZyBDw7RuZyBj4bulIHRy4buZbiIKKworIzogbGliL29wdGlvbi50Y2w6MTQ4Cittc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKK21zZ3N0ciAiVGluIGThuqV1IHbhur90IHRo4budaSBnaWFuIHPhu61hIMSR4buVaSB04bqtcCB0aW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OQorbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKK21zZ3N0ciAiWMOpbiBjw6FjIG5ow6FuaCB0aGVvIGTDtWkgdHJvbmcga2hpIGzhuqV5IHbhu4EiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgorbXNnc3RyICJLaOG7m3AgbmjDoW5oIHRoZW8gZMO1aSIKKworIzogbGliL29wdGlvbi50Y2w6MTUxCittc2dpZCAiVXNlIFRleHRjb252IEZvciBEaWZmcyBhbmQgQmxhbWVzIgorbXNnc3RyICJEw7luZyBUZXh0Y29udiBDaG8gRGlmZnMgdsOgIEJsYW1lcyIKKworIzogbGliL29wdGlvbi50Y2w6MTUyCittc2dpZCAiQmxhbWUgQ29weSBPbmx5IE9uIENoYW5nZWQgRmlsZXMiCittc2dzdHIgIkNo4buJIGNow6lwIGJsYW1lIHRyw6puIGPDoWMgdOG6rXAgdGluIHRoYXkgxJHhu5VpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTMKK21zZ2lkICJNYXhpbXVtIExlbmd0aCBvZiBSZWNlbnQgUmVwb3NpdG9yaWVzIExpc3QiCittc2dzdHIgIlPhu5EgbMaw4bujbmcga2hvIG3hu5tpIGTDuW5nIHThu5FpIMSRYSDEkcaw4bujYyBsxrB1IHRy4buvIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTQKK21zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKK21zZ3N0ciAiQ2jhu68gdOG7kWkgdGhp4buDdSDEkeG7gyBibGFtZSBjaMOpcCB2w6BvIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTUKK21zZ2lkICJCbGFtZSBIaXN0b3J5IENvbnRleHQgUmFkaXVzIChkYXlzKSIKK21zZ3N0ciAiQsOhbiBrw61uaCBuZ+G7ryBj4bqjbmggbOG7i2NoIHPhu60gYmxhbWUgKG5nw6B5KSIKKworIzogbGliL29wdGlvbi50Y2w6MTU2Cittc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKK21zZ3N0ciAiU+G7kSBkw7JuZyBu4buZaSBkdW5nIERpZmYiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NworbXNnaWQgIkFkZGl0aW9uYWwgRGlmZiBQYXJhbWV0ZXJzIgorbXNnc3RyICLEkOG7kWkgc+G7kSBi4buVIHh1bmcgY2hvIERpZmYiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1OAorbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCittc2dzdHIgIkNoaeG7gXUgcuG7mW5nIGPhu6dhIHBo4bqnbiBjaMO6IHRow61jaCIKKworIzogbGliL29wdGlvbi50Y2w6MTU5Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICJN4bqrdSB0w6puIG5ow6FuaCBt4bubaSIKKworIzogbGliL29wdGlvbi50Y2w6MTYwCittc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgorbXNnc3RyICJC4bqjbmcgbcOjIGTDoG5oIGNobyBu4buZaSBkdW5nIHThuq1wIHRpbiBt4bq3YyDEkeG7i25oIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNjEKK21zZ2lkICJXYXJuIGJlZm9yZSBjb21taXR0aW5nIHRvIGEgZGV0YWNoZWQgaGVhZCIKK21zZ3N0ciAiQ+G6o25oIGLDoW8gdHLGsOG7m2Mga2hpIGNodXnhu4NuIGdpYW8gbeG7mXQgxJHhuqd1IGLhu4sgdMOhY2ggcuG7nWkiCisKKyM6IGxpYi9vcHRpb24udGNsOjE2MgorbXNnaWQgIlN0YWdpbmcgb2YgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLEkMOhbmggZOG6pXUgbmjhu69uZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIGzDoCBj4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNjMKK21zZ2lkICJTaG93IHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiSGnhu4duIGPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSIKKworIzogbGliL29wdGlvbi50Y2w6MjA5Cittc2dpZCAiQ2hhbmdlIgorbXNnc3RyICJUaGF5IMSR4buVaSIKKworIzogbGliL29wdGlvbi50Y2w6MjUzCittc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCittc2dzdHIgIlThu6sgxJFp4buDbiBjaMOtbmggdOG6ozoiCisKKyM6IGxpYi9vcHRpb24udGNsOjI4MworbXNnaWQgIkNoYW5nZSBGb250IgorbXNnc3RyICLEkOG7lWkgcGjDtG5nIGNo4buvIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyODcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaG9vc2UgJXMiCittc2dzdHIgIkNo4buNbiAlcyIKKworIzogbGliL29wdGlvbi50Y2w6MjkzCittc2dpZCAicHQuIgorbXNnc3RyICJwdC4iCisKKyM6IGxpYi9vcHRpb24udGNsOjMwNworbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICJDw6EgbmjDom4gaMOzYSIKKworIzogbGliL29wdGlvbi50Y2w6MzQ0Cittc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGhvw6BuIHThuqV0IGdoaSBs4bqhaSBjw6FjIHTDuXkgY2jhu41uOiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjIwCittc2dpZCAiQWRkIFJlbW90ZSIKK21zZ3N0ciAiVGjDqm0gbcOheSBjaOG7pyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjI1Cittc2dpZCAiQWRkIE5ldyBSZW1vdGUiCittc2dzdHIgIlRow6ptIG3DoXkgY2jhu6cgbeG7m2kiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDozMCBsaWIvdG9vbHNfZGxnLnRjbDozNworbXNnaWQgIkFkZCIKK21zZ3N0ciAiVGjDqm0gdsOgbyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjM5Cittc2dpZCAiUmVtb3RlIERldGFpbHMiCittc2dzdHIgIkNoaSB0aeG6v3QgduG7gSBtw6F5IGNo4bunIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKK21zZ2lkICJMb2NhdGlvbjoiCittc2dzdHIgIlbhu4sgdHLDrToiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MAorbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgorbXNnc3RyICJIw6BuaCDEkeG7mW5nIHRow6ptIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjMKK21zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKK21zZ3N0ciAiTOG6pXkgduG7gSBuZ2F5IGzhuq1wIHThu6ljIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjkKK21zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgorbXNnc3RyICJLaOG7n2kgdOG6oW8gS2hvIG3DoXkgY2jhu6cgdsOgIMSR4bqpeSBk4buvIGxp4buHdSBsw6puIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzUKK21zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgorbXNnc3RyICJLaMO0bmcgbMOgbSBnw6wgY+G6oyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCittc2dzdHIgIkjDo3kgY3VuZyBj4bqlcCB0w6puIG3DoXkgY2jhu6cuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTEzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCittc2dzdHIgIiclcycga2jDtG5nIHBo4bqjaSBsw6AgdMOqbiBtw6F5IGNo4bunIMSRxrDhu6NjIGNo4bqlcCBuaOG6rW4uIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTI0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRow6ptIG3DoXkgY2jhu6cgJyVzJyBj4bunYSB24buLIHRyw60gJyVzJy4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzIgbGliL3RyYW5zcG9ydC50Y2w6NgorIywgdGNsLWZvcm1hdAorbXNnaWQgImZldGNoICVzIgorbXNnc3RyICJs4bqleSB24buBICVzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgdGhlICVzIgorbXNnc3RyICLEkGFuZyBs4bqleSB24buBICVzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSBsw6BtIHRo4bq/IG7DoG8gxJHhu4Mga2jhu59pIHThuqFvIGtobyBjaOG7qWEgdOG6oWkgduG7iyB0csOtICclcycuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYyIGxpYi90cmFuc3BvcnQudGNsOjU0IGxpYi90cmFuc3BvcnQudGNsOjkyCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJwdXNoICVzIgorbXNnc3RyICLEkeG6qXkgJXMgbMOqbiBtw6F5IGNo4bunIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB1cCB0aGUgJXMgKGF0ICVzKSIKK21zZ3N0ciAiQ8OgaSDEkeG6t3QgJyVzJyAodOG6oWkgJXMpIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgorbXNnc3RyICJYw7NhIG5ow6FuaCB0csOqbiBtw6F5IGNo4bunIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQ4Cittc2dpZCAiRnJvbSBSZXBvc2l0b3J5IgorbXNnc3RyICJU4burIEtobyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MSBsaWIvdHJhbnNwb3J0LnRjbDoxNjUKK21zZ2lkICJSZW1vdGU6IgorbXNnc3RyICJNw6F5IGNo4bunOiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo3MiBsaWIvdHJhbnNwb3J0LnRjbDoxODcKK21zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgorbXNnc3RyICLEkOG7i2EgxJFp4buDbSB0w7l5IMO9OiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4OAorbXNnaWQgIkJyYW5jaGVzIgorbXNnc3RyICJOaMOhbmgiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTEwCittc2dpZCAiRGVsZXRlIE9ubHkgSWYiCittc2dzdHIgIkNo4buJIHhvw6EgTuG6v3UiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTEyCittc2dpZCAiTWVyZ2VkIEludG86IgorbXNnc3RyICLEkMOjIHRy4buZbiB2w6BvOiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTMKK21zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCittc2dzdHIgIkPhuqduIG3hu5l0IG5ow6FuaCBjaG8gJ0jDsmEgdHLhu5luIHbDoG8nLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6XG4iCisiXG4iCisiIC0gJXMiCittc2dzdHIgIiIKKyJDw6FjIG5ow6FuaCBzYXUgxJHDonkga2jDtG5nIMSRxrDhu6NjIGjDsmEgdHLhu5luIGhvw6BuIHRvw6BuIHbDoG8gJXM6XG4iCisiXG4iCisiIC0gJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorbXNnc3RyICIiCisiTeG7mXQgaGF5IG5oaeG7gXUgaMahbiBraeG7g20gdHJhIGjDsmEgdHLhu5luIGtow7RuZyDEkeG6oXQgYuG7n2kgdsOsIGLhuqFuIMSRw6Mga2jDtG5nIGzhuqV5IHbhu4EgIgorIm5o4buvbmcgbOG6p24gY2h1eeG7g24gZ2lhbyBj4bqnbiB0aGnhur90LiBIw6N5IGzhuqV5IHbhu4EgdOG7qyAlcyB0csaw4bubYyDEkcOjLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDgKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCittc2dzdHIgIlhpbiBow6N5IGNo4buNbiBt4buZdCBoYXkgbmhp4buBdSBuaMOhbmggY+G6p24geMOzYS4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKK21zZ3N0ciAixJBhbmcgeG/DoSBjw6FjIG5ow6FuaCB04burICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjMwMAorbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgorbXNnc3RyICJDaMawYSBjaOG7jW4ga2hvLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozMDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTY2FubmluZyAlcy4uLiIKK21zZ3N0ciAixJBhbmcgcXXDqXQ6ICVzLi4uIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMDAKK21zZ2lkICJQdXNoIHRvIgorbXNnc3RyICLEkOG6qXkgbMOqbiIKKworIzogbGliL3JlbW90ZS50Y2w6MjE4Cittc2dpZCAiUmVtb3ZlIFJlbW90ZSIKK21zZ3N0ciAiR+G7oSBi4buPIE3DoXkgY2jhu6ciCisKKyM6IGxpYi9yZW1vdGUudGNsOjIyMworbXNnaWQgIlBydW5lIGZyb20iCittc2dzdHIgIljDqW4gdOG7qyIKKworIzogbGliL3JlbW90ZS50Y2w6MjI4Cittc2dpZCAiRmV0Y2ggZnJvbSIKK21zZ3N0ciAiTOG6pXkgduG7gSB04burIgorCisjOiBsaWIvc2VhcmNoLnRjbDo0OAorbXNnaWQgIkZpbmQ6IgorbXNnc3RyICJUw6xtOiIKKworIzogbGliL3NlYXJjaC50Y2w6NTAKK21zZ2lkICJOZXh0IgorbXNnc3RyICJUaeG6v3AiCisKKyM6IGxpYi9zZWFyY2gudGNsOjUxCittc2dpZCAiUHJldiIKK21zZ3N0ciAiVHLGsOG7m2MiCisKKyM6IGxpYi9zZWFyY2gudGNsOjUyCittc2dpZCAiUmVnRXhwIgorbXNnc3RyICJCVENRIgorCisjOiBsaWIvc2VhcmNoLnRjbDo1NAorbXNnaWQgIkNhc2UiCittc2dzdHIgIkhvYSIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoyMSBsaWIvc2hvcnRjdXQudGNsOjYyCittc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBs4buRaSB04bqvdDoiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MTM3Cittc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIGJp4buDdSB0xrDhu6NuZzoiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo1NworbXNnaWQgIlVuc3VwcG9ydGVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIktow7RuZyBo4buXIHRy4bujIGtp4buDbSB0cmEgY2jDrW5oIHThuqMiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJLaeG7g20gdHJhIGNow61uaCB04bqjIGtow7RuZyBz4bq1biBzw6BuZyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjY4Cittc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgorbXNnc3RyICJD4bqldSBow6xuaCBi4buZIHNvw6F0IGNow61uaCB04bqjIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCittc2dzdHIgIsSQYW5nIGhvw6BuIG5ndXnDqm4gdOG7qyDEkWnhu4NuIHRow6BuaCAlcy4iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MworbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCittc2dzdHIgIlBo4bqnbiBraeG7g20gdHJhIGNow61uaCB04bqjIMSRw6MgZ+G6t3AgbOG7l2kga2hpIGto4bufaSDEkeG7mW5nIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6ODAKK21zZ2lkICJVbnJlY29nbml6ZWQgc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiS2jDtG5nIGNo4bqlcCBuaOG6rW4gYuG7mSBraeG7g20gdHJhIGNow61uaCB04bqjIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTg2Cittc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCittc2dzdHIgIktow7RuZyBjw7MgZ+G7o2kgw70iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKK21zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIkfhurdwIGvhur90IHRow7pjIGLhuqV0IG5n4budIHThu6sgYuG7mSBraeG7g20gdHJhIGNow61uaCB04bqjIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MzkyCittc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCittc2dzdHIgIktp4buDbSB0cmEgY2jDrW5oIHThuqMga2jDtG5nIHRow6BuaCBjw7RuZyIKKworIzogbGliL3NzaGtleS50Y2w6MzEKK21zZ2lkICJObyBrZXlzIGZvdW5kLiIKK21zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IGtow7NhIG7DoG8uIgorCisjOiBsaWIvc3Noa2V5LnRjbDozNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZvdW5kIGEgcHVibGljIGtleSBpbjogJXMiCittc2dzdHIgIlTDrG0gdGjhuqV5IGtob8OhIGPDtG5nIGtoYWkgdHJvbmc6ICVzIgorCisjOiBsaWIvc3Noa2V5LnRjbDo0MAorbXNnaWQgIkdlbmVyYXRlIEtleSIKK21zZ3N0ciAiVOG6oW8ga2hvw6EiCisKKyM6IGxpYi9zc2hrZXkudGNsOjU4Cittc2dpZCAiQ29weSBUbyBDbGlwYm9hcmQiCittc2dzdHIgIkNow6lwIHbDoG8gY2xpcGJvYXJkIgorCisjOiBsaWIvc3Noa2V5LnRjbDo3MgorbXNnaWQgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5IgorbXNnc3RyICJLaMOzYSBjw7RuZyBPcGVuU1NIIGPhu6dhIGLhuqFuIgorCisjOiBsaWIvc3Noa2V5LnRjbDo4MAorbXNnaWQgIkdlbmVyYXRpbmcuLi4iCittc2dzdHIgIsSQYW5nIHThuqFvLi4uIgorCisjOiBsaWIvc3Noa2V5LnRjbDo4NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgc3NoLWtleWdlbjpcbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBjaOG6oXkgc3NoLWtleWdlbjpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL3NzaGtleS50Y2w6MTEzCittc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgorbXNnc3RyICJWaeG7h2MgdOG6oW8ga2hvw6EgxJHDoyB0aOG6pXQgYuG6oWkuIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMjAKK21zZ2lkICJHZW5lcmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vIGtleXMgZm91bmQuIgorbXNnc3RyICJWaeG7h2MgdOG6oW8gdGjDoG5oIGPDtG5nIG5oxrBuZyBs4bqhaSBraMO0bmcgdMOsbSB0aOG6pXkga2jDs2EuIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJZb3VyIGtleSBpcyBpbjogJXMiCittc2dzdHIgIktow7NhIGPhu6dhIGLhuqFuIHRyb25nOiAlcyIKKworIzogbGliL3N0YXR1c19iYXIudGNsOjg3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKK21zZ3N0ciAiJXMgLi4uICUqaSB0cm9uZyAlKmkgJXMgKCUzaSUlKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjIKK21zZ2lkICJBZGQgVG9vbCIKK21zZ3N0ciAiVGjDqm0gY8O0bmcgY+G7pSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjgKK21zZ2lkICJBZGQgTmV3IFRvb2wgQ29tbWFuZCIKK21zZ3N0ciAiVGjDqm0gbOG7h25oIGPDtG5nIGPhu6UgbeG7m2kiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjM0Cittc2dpZCAiQWRkIGdsb2JhbGx5IgorbXNnc3RyICJUaMOqbSB0b8OgbiBj4bulYyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDYKK21zZ2lkICJUb29sIERldGFpbHMiCittc2dzdHIgIkNoaSB0aeG6v3QgY8O0bmcgY+G7pSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDkKK21zZ2lkICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiIKK21zZ3N0ciAiRMO5bmcgZOG6pXUgbmfEg24gY8OhY2ggJy8nIMSR4buDIHThuqFvIGPDonkgdHLDrG5oIMSRxqFuIGNvbjoiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjYwCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIkzhu4duaDoiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjcxCittc2dpZCAiU2hvdyBhIGRpYWxvZyBiZWZvcmUgcnVubmluZyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGjhu5lwIHRob+G6oWkgdHLGsOG7m2Mga2hpIGNo4bqheSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzcKK21zZ2lkICJBc2sgdGhlIHVzZXIgdG8gc2VsZWN0IGEgcmV2aXNpb24gKHNldHMgJFJFVklTSU9OKSIKK21zZ3N0ciAiSOG7j2kgbmfGsOG7nWkgZMO5bmcgY2jhu41uIMSRaeG7g20geGVtIHjDqXQgKMSR4bq3dCBiaeG6v24gJFJFVklTSU9OKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6ODIKK21zZ2lkICJBc2sgdGhlIHVzZXIgZm9yIGFkZGl0aW9uYWwgYXJndW1lbnRzIChzZXRzICRBUkdTKSIKK21zZ3N0ciAiSOG7j2kgbmfGsOG7nWkgZMO5bmcgY8OhYyDEkeG7kWkgc+G7kSBi4buVIHh1bmcgdGjDqm0gKMSR4bq3dCBiaeG6v24gJEFSR1MpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4OQorbXNnaWQgIkRvbid0IHNob3cgdGhlIGNvbW1hbmQgb3V0cHV0IHdpbmRvdyIKK21zZ3N0ciAiS2jDtG5nIGhp4buDbiB0aOG7iyBj4butYSBz4buVIGvhur90IHh14bqldCBjw6J1IGzhu4duaCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTQKK21zZ2lkICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKCRGSUxFTkFNRSBub3QgZW1wdHkpIgorbXNnc3RyICJDaOG7iSBjaOG6oXkgbuG6v3UgZGlmZiDEkcaw4bujYyBjaOG7jW4gKGJp4bq/biAkRklMRU5BTUUga2jDtG5nIHLhu5duZykiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjExOAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCittc2dzdHIgIkjDo3kgY3VuZyBj4bqlcCB0w6puIGNobyBjw7RuZyBj4bulLiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiQ8O0bmcgY+G7pSAnJXMnIMSRw6Mgc+G6tW4gY8OzLiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhZGQgdG9vbDpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyB0aMOqbSBjw7RuZyBj4bulOlxuIgorIiVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxODcKK21zZ2lkICJSZW1vdmUgVG9vbCIKK21zZ3N0ciAiR+G7oSBi4buPIGPDtG5nIGPhu6UiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5MworbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgorbXNnc3RyICJH4buhIGLhu48gY8O0bmcgY+G7pSBs4buHbmgiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5OAorbXNnaWQgIlJlbW92ZSIKK21zZ3N0ciAiR+G7oSBi4buPIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzEKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIoQ8OhYyBjw7RuZyBj4bulIGNo4buJIHRo4buLIGtoby1u4buZaS1i4buZIHhhbmgpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW4gQ29tbWFuZDogJXMiCittc2dzdHIgIkNo4bqheSBs4buHbmg6ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMDYKK21zZ2lkICJBcmd1bWVudHMiCittc2dzdHIgIsSQ4buRaSBz4buRIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNDEKK21zZ2lkICJPSyIKK21zZ3N0ciAixJDhu5NuZyDDvSIKKworIzogbGliL3Rvb2xzLnRjbDo3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKK21zZ3N0ciAiQ2jhuqF5ICVzIHnDqnUgY+G6p3UgY+G6p24gcGjhuqNpIGNo4buNbiBt4buZdCB04bqtcCB0aW4uIgorCisjOiBsaWIvdG9vbHMudGNsOjkxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlMSRzIG9uIGZpbGUgXCIlMiRzXCI/IgorbXNnc3RyICJC4bqhbiBjw7MgY2jhuq9jIGzDoCBtdeG7kW4gY2jhuqF5ICUxJHMgdHLDqm4gdOG6rXAgdGluIFwiJTIkc1wiIGtow7RuZz8iCisKKyM6IGxpYi90b29scy50Y2w6OTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKK21zZ3N0ciAiQuG6oW4gY8OzIGNo4bqvYyBsw6AgbXXhu5FuIGNo4bqheSAlcyBraMO0bmc/IgorCisjOiBsaWIvdG9vbHMudGNsOjExNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2w6ICVzIgorbXNnc3RyICJDw7RuZyBj4bulOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nOiAlcyIKK21zZ3N0ciAixJBhbmcgY2jhuqF5OiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIgorbXNnc3RyICJDw7RuZyBj4bulIMSRxrDhu6NjIGJpw6puIGThu4tjaCB0aMOgbmggY8O0bmc6ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjE1NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgZmFpbGVkOiAlcyIKK21zZ3N0ciAiQ8O0bmcgY+G7pSBn4bq3cCBs4buXaTogJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgorbXNnc3RyICJM4bqleSBjw6FjIHRoYXkgxJHhu5VpIG3hu5tpIHThu6sgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicmVtb3RlIHBydW5lICVzIgorbXNnc3RyICJ4w6luIGLhu5t0IHRyw6puIG3DoXkgY2jhu6cgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gJXMiCittc2dzdHIgIljDqW4gYuG7m3QgY8OhYyBuaMOhbmggdGhlbyBkw7VpIGLhu4sgeMOzYSB04burICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNQorbXNnaWQgImZldGNoIGFsbCByZW1vdGVzIgorbXNnc3RyICJs4bqleSB24buBIHThu6sgdOG6pXQgY+G6oyBjw6FjIG3DoXkgY2jhu6ciCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjI2Cittc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAixJBhbmcgbOG6pXkgY8OhYyB0aGF5IMSR4buVaSBt4bubaSB04burIG3hu41pIG3DoXkgY2jhu6ciCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjQwCittc2dpZCAicmVtb3RlIHBydW5lIGFsbCByZW1vdGVzIgorbXNnc3RyICJ4w6luIGLhu5t0IG3hu41pIG3DoXkgY2jhu6ciCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjQxCittc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIljDqW4gdOG7iWEgY8OhYyBuaMOhbmggxJHDoyB0aGVvIGTDtWkgYuG7iyB4w7NhIHThu6sgbeG7jWkgbcOheSBjaOG7pyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIGNoYW5nZXMgdG8gJXMiCittc2dzdHIgIsSQYW5nIMSR4bqpeSBjw6FjIG5ow6FuaCBsw6puICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIk1pcnJvcmluZyB0byAlcyIKK21zZ3N0ciAiQuG6o24gc2FvIMSR4bq/biAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKK21zZ3N0ciAixJBhbmcgKMSR4bqpeSkgJXMgJXMgbMOqbiAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTMyCittc2dpZCAiUHVzaCBCcmFuY2hlcyIKK21zZ3N0ciAixJDhuql5IGzDqm4gY8OhYyBuaMOhbmgiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE0NworbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKK21zZ3N0ciAiTmjDoW5oIG5ndeG7k24iCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2MgorbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCittc2dzdHIgIktobyBjaOG7qWEgxJHDrWNoIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyMDUKK21zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgorbXNnc3RyICJUw7l5IGNo4buNbiB0cnV54buBbiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MjA3Cittc2dpZCAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiCittc2dzdHIgIsOJcCBideG7mWMgZ2hpIMSRw6ggbmjDoW5oIHPhurVuIGPDsyAoY8OzIHRo4buDIHPhur0gbG/huqFpIGLhu48gY8OhYyB0aGF5IMSR4buVaSkiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjIxMQorbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgorbXNnc3RyICJEw7luZyBnw7NpIG3hu49uZyAoZMOgbmggY2hvIGvhur90IG7hu5FpIG3huqFuZyBjaOG6rW0pIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyMTUKK21zZ2lkICJJbmNsdWRlIHRhZ3MiCittc2dzdHIgIkJhbyBn4buTbSBjw6FjIHRo4bq7IgorCisjfiBtc2dpZCAiQ2FzZS1TZW5zaXRpdmUiCisjfiBtc2dzdHIgIkPDsyBwaMOibiBiaeG7h3QgSE9BL3RoxrDhu51uZyIKZGlmZiAtLWdpdCBhL3BvL3poX2NuLnBvIGIvZ2l0LWd1aS9wby96aF9jbi5wbwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcG8vemhfY24ucG8KcmVuYW1lIHRvIGdpdC1ndWkvcG8vemhfY24ucG8KZGlmZiAtLWdpdCBhL3dpbmRvd3MvZ2l0LWd1aS5zaCBiL2dpdC1ndWkvd2luZG93cy9naXQtZ3VpLnNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB3aW5kb3dzL2dpdC1ndWkuc2gKcmVuYW1lIHRvIGdpdC1ndWkvd2luZG93cy9naXQtZ3VpLnNoCmRpZmYgLS1naXQgYS9naXQtaW5zdGF3ZWIuc2ggYi9naXQtaW5zdGF3ZWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2M1NTIyOQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1pbnN0YXdlYi5zaApAQCAtMCwwICsxLDc4OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBFcmljIFdvbmcKKyMKKworUEVSTD0nQEBQRVJMQEAnCitPUFRJT05TX0tFRVBEQVNIREFTSD0KK09QVElPTlNfU1RVQ0tMT05HPQorT1BUSU9OU19TUEVDPSJcCitnaXQgaW5zdGF3ZWIgW29wdGlvbnNdICgtLXN0YXJ0IHwgLS1zdG9wIHwgLS1yZXN0YXJ0KQorLS0KK2wsbG9jYWwgICAgICAgIG9ubHkgYmluZCBvbiAxMjcuMC4wLjEKK3AscG9ydD0gICAgICAgIHRoZSBwb3J0IHRvIGJpbmQgdG8KK2QsaHR0cGQ9ICAgICAgIHRoZSBjb21tYW5kIHRvIGxhdW5jaAorYixicm93c2VyPSAgICAgdGhlIGJyb3dzZXIgdG8gbGF1bmNoCittLG1vZHVsZS1wYXRoPSB0aGUgbW9kdWxlIHBhdGggKG9ubHkgbmVlZGVkIGZvciBhcGFjaGUyKQorIEFjdGlvbgorc3RvcCAgICAgICAgICAgc3RvcCB0aGUgd2ViIHNlcnZlcgorc3RhcnQgICAgICAgICAgc3RhcnQgdGhlIHdlYiBzZXJ2ZXIKK3Jlc3RhcnQgICAgICAgIHJlc3RhcnQgdGhlIHdlYiBzZXJ2ZXIKKyIKKworU1VCRElSRUNUT1JZX09LPVllcworLiBnaXQtc2gtc2V0dXAKKworZnFnaXRkaXI9IiRHSVRfRElSIgorbG9jYWw9IiQoZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQgaW5zdGF3ZWIubG9jYWwpIgoraHR0cGQ9IiQoZ2l0IGNvbmZpZyAtLWdldCBpbnN0YXdlYi5odHRwZCkiCityb290PSIkKGdpdCBjb25maWcgLS1nZXQgaW5zdGF3ZWIuZ2l0d2ViZGlyKSIKK3BvcnQ9JChnaXQgY29uZmlnIC0tZ2V0IGluc3Rhd2ViLnBvcnQpCittb2R1bGVfcGF0aD0iJChnaXQgY29uZmlnIC0tZ2V0IGluc3Rhd2ViLm1vZHVsZXBhdGgpIgorYWN0aW9uPSJicm93c2UiCisKK2NvbmY9IiRHSVRfRElSL2dpdHdlYi9odHRwZC5jb25mIgorCisjIERlZmF1bHRzOgorCisjIGlmIGluc3RhbGxlZCwgaXQgZG9lc24ndCBuZWVkIGZ1cnRoZXIgY29uZmlndXJhdGlvbiAobW9kdWxlX3BhdGgpCit0ZXN0IC16ICIkaHR0cGQiICYmIGh0dHBkPSdsaWdodHRwZCAtZicKKworIyBEZWZhdWx0IGlzIEBAR0lUV0VCRElSQEAKK3Rlc3QgLXogIiRyb290IiAmJiByb290PSdAQEdJVFdFQkRJUkBAJworCisjIGFueSB1bnRha2VuIGxvY2FsIHBvcnQgd2lsbCBkby4uLgordGVzdCAteiAiJHBvcnQiICYmIHBvcnQ9MTIzNAorCityZXNvbHZlX2Z1bGxfaHR0cGQgKCkgeworCWNhc2UgIiRodHRwZCIgaW4KKwkqYXBhY2hlMip8KmxpZ2h0dHBkKnwqaHR0cGQqKQorCQkjIHllcywgKmh0dHBkKiBjb3ZlcnMgKmxpZ2h0dHBkKiBhYm92ZSwgYnV0IGl0IGlzIHRoZXJlIGZvciBjbGFyaXR5CisJCSMgZW5zdXJlIHRoYXQgdGhlIGFwYWNoZTIvbGlnaHR0cGQgY29tbWFuZCBlbmRzIHdpdGggIi1mIgorCQlpZiAhIGVjaG8gIiRodHRwZCIgfCBzYW5lX2dyZXAgLS0gJy1mICokJyA+L2Rldi9udWxsIDI+JjEKKwkJdGhlbgorCQkJaHR0cGQ9IiRodHRwZCAtZiIKKwkJZmkKKwkJOzsKKwkqcGxhY2t1cCopCisJCSMgc2VydmVyIGlzIHN0YXJ0ZWQgYnkgcnVubmluZyB2aWEgZ2VuZXJhdGVkIGdpdHdlYi5wc2dpIGluICRmcWdpdGRpci9naXR3ZWIKKwkJZnVsbF9odHRwZD0iJGZxZ2l0ZGlyL2dpdHdlYi9naXR3ZWIucHNnaSIKKwkJaHR0cGRfb25seT0iJHtodHRwZCUlICp9IiAjIGN1dCBvbiBmaXJzdCBzcGFjZQorCQlyZXR1cm4KKwkJOzsKKwkqd2VicmljayopCisJCSMgc2VydmVyIGlzIHN0YXJ0ZWQgYnkgcnVubmluZyB2aWEgZ2VuZXJhdGVkIHdlYnJpY2sucmIgaW4KKwkJIyAkZnFnaXRkaXIvZ2l0d2ViCisJCWZ1bGxfaHR0cGQ9IiRmcWdpdGRpci9naXR3ZWIvd2Vicmljay5yYiIKKwkJaHR0cGRfb25seT0iJHtodHRwZCUlICp9IiAjIGN1dCBvbiBmaXJzdCBzcGFjZQorCQlyZXR1cm4KKwkJOzsKKwkqcHl0aG9uKikKKwkJIyBzZXJ2ZXIgaXMgc3RhcnRlZCBieSBydW5uaW5nIHZpYSBnZW5lcmF0ZWQgZ2l0d2ViLnB5IGluCisJCSMgJGZxZ2l0ZGlyL2dpdHdlYgorCQlmdWxsX2h0dHBkPSIkZnFnaXRkaXIvZ2l0d2ViL2dpdHdlYi5weSIKKwkJaHR0cGRfb25seT0iJHtodHRwZCUlICp9IiAjIGN1dCBvbiBmaXJzdCBzcGFjZQorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisKKwlodHRwZF9vbmx5PSIkKGVjaG8gJGh0dHBkIHwgY3V0IC1mMSAtZCcgJykiCisJaWYgY2FzZSAiJGh0dHBkX29ubHkiIGluIC8qKSA6IDs7ICopIHdoaWNoICRodHRwZF9vbmx5ID4vZGV2L251bGwgMj4mMTs7IGVzYWMKKwl0aGVuCisJCWZ1bGxfaHR0cGQ9JGh0dHBkCisJZWxzZQorCQkjIG1hbnkgaHR0cGRzIGFyZSBpbnN0YWxsZWQgaW4gL3Vzci9zYmluIG9yIC91c3IvbG9jYWwvc2JpbgorCQkjIHRoZXNlIGRheXMgYW5kIHRob3NlIGFyZSBub3QgaW4gbW9zdCB1c2VycyAkUEFUSHMKKwkJIyBpbiBhZGRpdGlvbiwgd2UgbWF5IGhhdmUgZ2VuZXJhdGVkIGEgc2VydmVyIHNjcmlwdAorCQkjIGluICRmcWdpdGRpci9naXR3ZWIuCisJCWZvciBpIGluIC91c3IvbG9jYWwvc2JpbiAvdXNyL3NiaW4gIiRyb290IiAiJGZxZ2l0ZGlyL2dpdHdlYiIKKwkJZG8KKwkJCWlmIHRlc3QgLXggIiRpLyRodHRwZF9vbmx5IgorCQkJdGhlbgorCQkJCWZ1bGxfaHR0cGQ9JGkvJGh0dHBkCisJCQkJcmV0dXJuCisJCQlmaQorCQlkb25lCisKKwkJZWNobyA+JjIgIiRodHRwZF9vbmx5IG5vdCBmb3VuZC4gSW5zdGFsbCAkaHR0cGRfb25seSBvciB1c2UiIFwKKwkJICAgICAiLS1odHRwZCB0byBzcGVjaWZ5IGFub3RoZXIgaHR0cGQgZGFlbW9uLiIKKwkJZXhpdCAxCisJZmkKK30KKworc3RhcnRfaHR0cGQgKCkgeworCWlmIHRlc3QgLWYgIiRmcWdpdGRpci9waWQiOyB0aGVuCisJCXNheSAiSW5zdGFuY2UgYWxyZWFkeSBydW5uaW5nLiBSZXN0YXJ0aW5nLi4uIgorCQlzdG9wX2h0dHBkCisJZmkKKworCSMgaGVyZSAkaHR0cGQgc2hvdWxkIGhhdmUgYSBtZWFuaW5nZnVsIHZhbHVlCisJcmVzb2x2ZV9mdWxsX2h0dHBkCisJbWtkaXIgLXAgIiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkX29ubHkiCisJY29uZj0iJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seS5jb25mIgorCisJIyBnZW5lcmF0ZSBjb3JyZWN0IGNvbmZpZyBmaWxlIGlmIGl0IGRvZXNuJ3QgZXhpc3QKKwl0ZXN0IC1mICIkY29uZiIgfHwgY29uZmlndXJlX2h0dHBkCisJdGVzdCAtZiAiJGZxZ2l0ZGlyL2dpdHdlYi9naXR3ZWJfY29uZmlnLnBlcmwiIHx8IGdpdHdlYl9jb25mCisKKwkjIGRvbid0IHF1b3RlICRmdWxsX2h0dHBkLCB0aGVyZSBjYW4gYmUgYXJndW1lbnRzIHRvIGl0ICgtZikKKwljYXNlICIkaHR0cGQiIGluCisJKm1vbmdvb3NlKnwqcGxhY2t1cCp8KnB5dGhvbiopCisJCSNUaGVzZSBzZXJ2ZXJzIGRvbid0IGhhdmUgYSBkYWVtb24gbW9kZSBzbyB3ZSdsbCBoYXZlIHRvIGZvcmsgaXQKKwkJJGZ1bGxfaHR0cGQgIiRjb25mIiAmCisJCSNTYXZlIHRoZSBwaWQgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UgKHdlJ2xsIHByaW50IGl0IGxhdGVyKQorCQlwaWQ9JCEKKworCQlpZiB0ZXN0ICQ/ICE9IDA7IHRoZW4KKwkJCWVjaG8gIkNvdWxkIG5vdCBleGVjdXRlIGh0dHAgZGFlbW9uICRodHRwZC4iCisJCQlleGl0IDEKKwkJZmkKKworCQljYXQgPiAiJGZxZ2l0ZGlyL3BpZCIgPDxFT0YKKyRwaWQKK0VPRgorCQk7OworCSopCisJCSRmdWxsX2h0dHBkICIkY29uZiIKKwkJaWYgdGVzdCAkPyAhPSAwOyB0aGVuCisJCQllY2hvICJDb3VsZCBub3QgZXhlY3V0ZSBodHRwIGRhZW1vbiAkaHR0cGQuIgorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJZXNhYworfQorCitzdG9wX2h0dHBkICgpIHsKKwl0ZXN0IC1mICIkZnFnaXRkaXIvcGlkIiAmJiBraWxsICQoY2F0ICIkZnFnaXRkaXIvcGlkIikKKwlybSAtZiAiJGZxZ2l0ZGlyL3BpZCIKK30KKworaHR0cGRfaXNfcmVhZHkgKCkgeworCSIkUEVSTCIgLU1JTzo6U29ja2V0OjpJTkVUIC1lICIKK2xvY2FsIFwkfCA9IDE7ICMgdHVybiBvbiBhdXRvZmx1c2gKK2V4aXQgaWYgKElPOjpTb2NrZXQ6OklORVQtPm5ldygnMTI3LjAuMC4xOiRwb3J0JykpOworcHJpbnQgJ1dhaXRpbmcgZm9yIFwnJGh0dHBkXCcgdG8gc3RhcnQgLi4nOworZG8geworCXByaW50ICcuJzsKKwlzbGVlcCgxKTsKK30gdW50aWwgKElPOjpTb2NrZXQ6OklORVQtPm5ldygnMTI3LjAuMC4xOiRwb3J0JykpOworcHJpbnQgcXEhIChkb25lKVxuITsKKyIKK30KKword2hpbGUgdGVzdCAkIyAhPSAwCitkbworCWNhc2UgIiQxIiBpbgorCS0tc3RvcHxzdG9wKQorCQlhY3Rpb249InN0b3AiCisJCTs7CisJLS1zdGFydHxzdGFydCkKKwkJYWN0aW9uPSJzdGFydCIKKwkJOzsKKwktLXJlc3RhcnR8cmVzdGFydCkKKwkJYWN0aW9uPSJyZXN0YXJ0IgorCQk7OworCS1sfC0tbG9jYWwpCisJCWxvY2FsPXRydWUKKwkJOzsKKwktZHwtLWh0dHBkKQorCQlzaGlmdAorCQlodHRwZD0iJDEiCisJCTs7CisJLWJ8LS1icm93c2VyKQorCQlzaGlmdAorCQlicm93c2VyPSIkMSIKKwkJOzsKKwktcHwtLXBvcnQpCisJCXNoaWZ0CisJCXBvcnQ9IiQxIgorCQk7OworCS1tfC0tbW9kdWxlLXBhdGgpCisJCXNoaWZ0CisJCW1vZHVsZV9wYXRoPSIkMSIKKwkJOzsKKwktLSkKKwkJOzsKKwkqKQorCQl1c2FnZQorCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCitta2RpciAtcCAiJEdJVF9ESVIvZ2l0d2ViL3RtcCIKK0dJVF9FWEVDX1BBVEg9IiQoZ2l0IC0tZXhlYy1wYXRoKSIKK0dJVF9ESVI9IiRmcWdpdGRpciIKK0dJVFdFQl9DT05GSUc9IiRmcWdpdGRpci9naXR3ZWIvZ2l0d2ViX2NvbmZpZy5wZXJsIgorZXhwb3J0IEdJVF9FWEVDX1BBVEggR0lUX0RJUiBHSVRXRUJfQ09ORklHCisKK3dlYnJpY2tfY29uZiAoKSB7CisJIyB3ZWJyaWNrIHNlZW1zIHRvIGhhdmUgbm8gd2F5IG9mIHBhc3NpbmcgYXJiaXRyYXJ5IGVudmlyb25tZW50CisJIyB2YXJpYWJsZXMgdG8gdGhlIHVuZGVybHlpbmcgQ0dJIGV4ZWN1dGFibGUsIHNvIHdlIHdyYXAgdGhlCisJIyBhY3R1YWwgZ2l0d2ViLmNnaSB1c2luZyBhIHNoZWxsIHNjcmlwdCB0byBmb3JjZSBpdAorICB3cmFwcGVyPSIkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZC93cmFwcGVyLnNoIgorCWNhdCA+ICIkd3JhcHBlciIgPDxFT0YKKyMhQFNIRUxMX1BBVEhACisjIHdlIHVzZSB0aGlzIHNoZWxsIHNjcmlwdCB3cmFwcGVyIGFyb3VuZCB0aGUgcmVhbCBnaXR3ZWIuY2dpIHNpbmNlCisjIHRoZXJlIGFwcGVhcnMgdG8gYmUgbm8gb3RoZXIgd2F5IHRvIHBhc3MgYXJiaXRyYXJ5IGVudmlyb25tZW50IHZhcmlhYmxlcworIyBpbnRvIHRoZSBDR0kgcHJvY2VzcworR0lUX0VYRUNfUEFUSD0kR0lUX0VYRUNfUEFUSCBHSVRfRElSPSRHSVRfRElSIEdJVFdFQl9DT05GSUc9JEdJVFdFQl9DT05GSUcKK2V4cG9ydCBHSVRfRVhFQ19QQVRIIEdJVF9ESVIgR0lUV0VCX0NPTkZJRworZXhlYyAkcm9vdC9naXR3ZWIuY2dpCitFT0YKKwljaG1vZCAreCAiJHdyYXBwZXIiCisKKwkjIFRoaXMgYXNzdW1lcyBfcnVieV8gaXMgaW4gdGhlIHVzZXIncyAkUEFUSC4gdGhhdCdzIF9vbmVfCisJIyBwb3J0YWJsZSB3YXkgdG8gcnVuIHJ1YnksIHdoaWNoIGNvdWxkIGJlIGluc3RhbGxlZCBhbnl3aGVyZSwgcmVhbGx5LgorCSMgZ2VuZXJhdGUgYSBzdGFuZGFsb25lIHNlcnZlciBzY3JpcHQgaW4gJGZxZ2l0ZGlyL2dpdHdlYi4KKwljYXQgPiIkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZC5yYiIgPDxFT0YKKyMhL3Vzci9iaW4vZW52IHJ1YnkKK3JlcXVpcmUgJ3dlYnJpY2snCityZXF1aXJlICdsb2dnZXInCitvcHRpb25zID0geworICA6UG9ydCA9PiAkcG9ydCwKKyAgOkRvY3VtZW50Um9vdCA9PiAiJHJvb3QiLAorICA6TG9nZ2VyID0+IExvZ2dlci5uZXcoJyRmcWdpdGRpci9naXR3ZWIvZXJyb3IubG9nJyksCisgIDpBY2Nlc3NMb2cgPT4gWworICAgIFsgTG9nZ2VyLm5ldygnJGZxZ2l0ZGlyL2dpdHdlYi9hY2Nlc3MubG9nJyksCisgICAgICBXRUJyaWNrOjpBY2Nlc3NMb2c6OkNPTUJJTkVEX0xPR19GT1JNQVQgXQorICBdLAorICA6RGlyZWN0b3J5SW5kZXggPT4gWyJnaXR3ZWIuY2dpIl0sCisgIDpDR0lJbnRlcnByZXRlciA9PiAiJHdyYXBwZXIiLAorICA6U3RhcnRDYWxsYmFjayA9PiBsYW1iZGEgZG8KKyAgICBGaWxlLm9wZW4oIiRmcWdpdGRpci9waWQiLCAidyIpIHsgfGZ8IGYucHV0cyBQcm9jZXNzLnBpZCB9CisgIGVuZCwKKyAgOlNlcnZlclR5cGUgPT4gV0VCcmljazo6RGFlbW9uLAorfQorb3B0aW9uc1s6QmluZEFkZHJlc3NdID0gJzEyNy4wLjAuMScgaWYgIiRsb2NhbCIgPT0gInRydWUiCitzZXJ2ZXIgPSBXRUJyaWNrOjpIVFRQU2VydmVyLm5ldyhvcHRpb25zKQorWydJTlQnLCAnVEVSTSddLmVhY2ggZG8gfHNpZ25hbHwKKyAgdHJhcChzaWduYWwpIHtzZXJ2ZXIuc2h1dGRvd259CitlbmQKK3NlcnZlci5zdGFydAorRU9GCisJY2htb2QgK3ggIiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkLnJiIgorCSMgY29uZmlndXJhdGlvbiBpcyBlbWJlZGRlZCBpbiBzZXJ2ZXIgc2NyaXB0IGZpbGUsIHdlYnJpY2sucmIKKwlybSAtZiAiJGNvbmYiCit9CisKK2xpZ2h0dHBkX2NvbmYgKCkgeworCWNhdCA+ICIkY29uZiIgPDxFT0YKK3NlcnZlci5kb2N1bWVudC1yb290ID0gIiRyb290Igorc2VydmVyLnBvcnQgPSAkcG9ydAorc2VydmVyLm1vZHVsZXMgPSAoICJtb2Rfc2V0ZW52IiwgIm1vZF9jZ2kiICkKK3NlcnZlci5pbmRleGZpbGVzID0gKCAiZ2l0d2ViLmNnaSIgKQorc2VydmVyLnBpZC1maWxlID0gIiRmcWdpdGRpci9waWQiCitzZXJ2ZXIuZXJyb3Jsb2cgPSAiJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seS9lcnJvci5sb2ciCisKKyMgdG8gZW5hYmxlLCBhZGQgIm1vZF9hY2Nlc3MiLCAibW9kX2FjY2Vzc2xvZyIgdG8gc2VydmVyLm1vZHVsZXMKKyMgdmFyaWFibGUgYWJvdmUgYW5kIHVuY29tbWVudCB0aGlzCisjYWNjZXNzbG9nLmZpbGVuYW1lID0gIiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkX29ubHkvYWNjZXNzLmxvZyIKKworc2V0ZW52LmFkZC1lbnZpcm9ubWVudCA9ICggIlBBVEgiID0+IGVudi5QQVRILCAiR0lUV0VCX0NPTkZJRyIgPT4gZW52LkdJVFdFQl9DT05GSUcgKQorCitjZ2kuYXNzaWduID0gKCAiLmNnaSIgPT4gIiIgKQorCisjIG1pbWV0eXBlIG1hcHBpbmcKK21pbWV0eXBlLmFzc2lnbiAgICAgICAgICAgICA9ICgKKyAgIi5wZGYiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3BkZiIsCisgICIuc2lnIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlIiwKKyAgIi5zcGwiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL2Z1dHVyZXNwbGFzaCIsCisgICIuY2xhc3MiICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLAorICAiLnBzIiAgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vcG9zdHNjcmlwdCIsCisgICIudG9ycmVudCIgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQiLAorICAiLmR2aSIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1kdmkiLAorICAiLmd6IiAgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1nemlwIiwKKyAgIi5wYWMiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtbnMtcHJveHktYXV0b2NvbmZpZyIsCisgICIuc3dmIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIsCisgICIudGFyLmd6IiAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXRneiIsCisgICIudGd6IiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXRneiIsCisgICIudGFyIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXRhciIsCisgICIuemlwIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi96aXAiLAorICAiLm1wMyIgICAgICAgICAgPT4gICAgICAiYXVkaW8vbXBlZyIsCisgICIubTN1IiAgICAgICAgICA9PiAgICAgICJhdWRpby94LW1wZWd1cmwiLAorICAiLndtYSIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC1tcy13bWEiLAorICAiLndheCIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC1tcy13YXgiLAorICAiLm9nZyIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vb2dnIiwKKyAgIi53YXYiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtd2F2IiwKKyAgIi5naWYiICAgICAgICAgID0+ICAgICAgImltYWdlL2dpZiIsCisgICIuanBnIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9qcGVnIiwKKyAgIi5qcGVnIiAgICAgICAgID0+ICAgICAgImltYWdlL2pwZWciLAorICAiLnBuZyIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvcG5nIiwKKyAgIi54Ym0iICAgICAgICAgID0+ICAgICAgImltYWdlL3gteGJpdG1hcCIsCisgICIueHBtIiAgICAgICAgICA9PiAgICAgICJpbWFnZS94LXhwaXhtYXAiLAorICAiLnh3ZCIgICAgICAgICAgPT4gICAgICAiaW1hZ2UveC14d2luZG93ZHVtcCIsCisgICIuY3NzIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2NzcyIsCisgICIuaHRtbCIgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAorICAiLmh0bSIgICAgICAgICAgPT4gICAgICAidGV4dC9odG1sIiwKKyAgIi5qcyIgICAgICAgICAgID0+ICAgICAgInRleHQvamF2YXNjcmlwdCIsCisgICIuYXNjIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5jIiAgICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmNwcCIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIubG9nIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5jb25mIiAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLnRleHQiICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIudHh0IiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5kdGQiICAgICAgICAgID0+ICAgICAgInRleHQveG1sIiwKKyAgIi54bWwiICAgICAgICAgID0+ICAgICAgInRleHQveG1sIiwKKyAgIi5tcGVnIiAgICAgICAgID0+ICAgICAgInZpZGVvL21wZWciLAorICAiLm1wZyIgICAgICAgICAgPT4gICAgICAidmlkZW8vbXBlZyIsCisgICIubW92IiAgICAgICAgICA9PiAgICAgICJ2aWRlby9xdWlja3RpbWUiLAorICAiLnF0IiAgICAgICAgICAgPT4gICAgICAidmlkZW8vcXVpY2t0aW1lIiwKKyAgIi5hdmkiICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXN2aWRlbyIsCisgICIuYXNmIiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zLWFzZiIsCisgICIuYXN4IiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zLWFzZiIsCisgICIud212IiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zLXdtdiIsCisgICIuYnoyIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJ6aXAiLAorICAiLnRieiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iemlwLWNvbXByZXNzZWQtdGFyIiwKKyAgIi50YXIuYnoyIiAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYnppcC1jb21wcmVzc2VkLXRhciIsCisgICIiICAgICAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIgorICkKK0VPRgorCXRlc3QgeCIkbG9jYWwiID0geHRydWUgJiYgZWNobyAnc2VydmVyLmJpbmQgPSAiMTI3LjAuMC4xIicgPj4gIiRjb25mIgorfQorCithcGFjaGUyX2NvbmYgKCkgeworCWZvciBjYW5kaWRhdGUgaW4gXAorCQkvZXRjL2h0dHBkIFwKKwkJL3Vzci9saWIvYXBhY2hlMiBcCisJCS91c3IvbGliL2h0dHBkIDsKKwlkbworCQlpZiB0ZXN0IC1kICIkY2FuZGlkYXRlL21vZHVsZXMiCisJCXRoZW4KKwkJCW1vZHVsZV9wYXRoPSIkY2FuZGlkYXRlL21vZHVsZXMiCisJCQlicmVhaworCQlmaQorCWRvbmUKKwliaW5kPQorCXRlc3QgeCIkbG9jYWwiID0geHRydWUgJiYgYmluZD0nMTI3LjAuMC4xOicKKwllY2hvICd0ZXh0L2NzcyBjc3MnID4gIiRmcWdpdGRpci9taW1lLnR5cGVzIgorCWNhdCA+ICIkY29uZiIgPDxFT0YKK1NlcnZlck5hbWUgImdpdC1pbnN0YXdlYiIKK1NlcnZlclJvb3QgIiRyb290IgorRG9jdW1lbnRSb290ICIkcm9vdCIKK0Vycm9yTG9nICIkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZF9vbmx5L2Vycm9yLmxvZyIKK0N1c3RvbUxvZyAiJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seS9hY2Nlc3MubG9nIiBjb21iaW5lZAorUGlkRmlsZSAiJGZxZ2l0ZGlyL3BpZCIKK0xpc3RlbiAkYmluZCRwb3J0CitFT0YKKworCWZvciBtb2QgaW4gbXBtX2V2ZW50IG1wbV9wcmVmb3JrIG1wbV93b3JrZXIKKwlkbworCQlpZiB0ZXN0IC1lICRtb2R1bGVfcGF0aC9tb2RfJHttb2R9LnNvCisJCXRoZW4KKwkJCWVjaG8gIkxvYWRNb2R1bGUgJHttb2R9X21vZHVsZSAiIFwKKwkJCSAgICAgIiRtb2R1bGVfcGF0aC9tb2RfJHttb2R9LnNvIiA+PiAiJGNvbmYiCisJCQkjIG9ubHkgb25lIG1wbSBtb2R1bGUgcGVybWl0dGVkCisJCQlicmVhaworCQlmaQorCWRvbmUKKwlmb3IgbW9kIGluIG1pbWUgZGlyIGVudiBsb2dfY29uZmlnIGF1dGh6X2NvcmUgdW5peGQKKwlkbworCQlpZiB0ZXN0IC1lICRtb2R1bGVfcGF0aC9tb2RfJHttb2R9LnNvCisJCXRoZW4KKwkJCWVjaG8gIkxvYWRNb2R1bGUgJHttb2R9X21vZHVsZSAiIFwKKwkJCSAgICAgIiRtb2R1bGVfcGF0aC9tb2RfJHttb2R9LnNvIiA+PiAiJGNvbmYiCisJCWZpCisJZG9uZQorCWNhdCA+PiAiJGNvbmYiIDw8RU9GCitUeXBlc0NvbmZpZyAiJGZxZ2l0ZGlyL21pbWUudHlwZXMiCitEaXJlY3RvcnlJbmRleCBnaXR3ZWIuY2dpCitFT0YKKworCSMgY2hlY2sgdG8gc2VlIGlmIERlbm5pcyBTdG9zYmVyZydzIG1vZF9wZXJsIGNvbXBhdGliaWxpdHkgcGF0Y2gKKwkjICg8MjAwNjA2MjExMzA3MDguR2NiYzZlNWNAbGVvbm92LnN0b3NiZXJnLm5ldD4pIGhhcyBiZWVuIGFwcGxpZWQKKwlpZiB0ZXN0IC1mICIkbW9kdWxlX3BhdGgvbW9kX3Blcmwuc28iICYmCisJICAgc2FuZV9ncmVwICdNT0RfUEVSTCcgIiRyb290L2dpdHdlYi5jZ2kiID4vZGV2L251bGwKKwl0aGVuCisJCSMgZmF2b3IgbW9kX3BlcmwgaWYgYXZhaWxhYmxlCisJCWNhdCA+PiAiJGNvbmYiIDw8RU9GCitMb2FkTW9kdWxlIHBlcmxfbW9kdWxlICRtb2R1bGVfcGF0aC9tb2RfcGVybC5zbworUGVybFBhc3NFbnYgR0lUX0RJUgorUGVybFBhc3NFbnYgR0lUX0VYRUNfUEFUSAorUGVybFBhc3NFbnYgR0lUV0VCX0NPTkZJRworPExvY2F0aW9uIC9naXR3ZWIuY2dpPgorCVNldEhhbmRsZXIgcGVybC1zY3JpcHQKKwlQZXJsUmVzcG9uc2VIYW5kbGVyIE1vZFBlcmw6OlJlZ2lzdHJ5CisJUGVybE9wdGlvbnMgK1BhcnNlSGVhZGVycworCU9wdGlvbnMgK0V4ZWNDR0kKKzwvTG9jYXRpb24+CitFT0YKKwllbHNlCisJCSMgcGxhaW4tb2xkIENHSQorCQlyZXNvbHZlX2Z1bGxfaHR0cGQKKwkJbGlzdF9tb2RzPSQoZWNobyAiJGZ1bGxfaHR0cGQiIHwgc2VkICdzLy1mJC8tbC8nKQorCQkkbGlzdF9tb2RzIHwgc2FuZV9ncmVwICdtb2RfY2dpXC5jJyA+L2Rldi9udWxsIDI+JjEgfHwgXAorCQlpZiB0ZXN0IC1mICIkbW9kdWxlX3BhdGgvbW9kX2NnaS5zbyIKKwkJdGhlbgorCQkJZWNobyAiTG9hZE1vZHVsZSBjZ2lfbW9kdWxlICRtb2R1bGVfcGF0aC9tb2RfY2dpLnNvIiA+PiAiJGNvbmYiCisJCWVsc2UKKwkJCSRsaXN0X21vZHMgfCBncmVwICdtb2RfY2dpZFwuYycgPi9kZXYvbnVsbCAyPiYxIHx8IFwKKwkJCWlmIHRlc3QgLWYgIiRtb2R1bGVfcGF0aC9tb2RfY2dpZC5zbyIKKwkJCXRoZW4KKwkJCQllY2hvICJMb2FkTW9kdWxlIGNnaWRfbW9kdWxlICRtb2R1bGVfcGF0aC9tb2RfY2dpZC5zbyIgXAorCQkJCQk+PiAiJGNvbmYiCisJCQllbHNlCisJCQkJZWNobyAiWW91IGhhdmUgbm8gQ0dJIHN1cHBvcnQhIgorCQkJCWV4aXQgMgorCQkJZmkKKwkJCWVjaG8gIlNjcmlwdFNvY2sgbG9ncy9naXR3ZWIuc29jayIgPj4gIiRjb25mIgorCQlmaQorCQljYXQgPj4gIiRjb25mIiA8PEVPRgorUGFzc0VudiBHSVRfRElSCitQYXNzRW52IEdJVF9FWEVDX1BBVEgKK1Bhc3NFbnYgR0lUV0VCX0NPTkZJRworQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5jZ2kKKzxMb2NhdGlvbiAvZ2l0d2ViLmNnaT4KKwlPcHRpb25zICtFeGVjQ0dJCis8L0xvY2F0aW9uPgorRU9GCisJZmkKK30KKworbW9uZ29vc2VfY29uZigpIHsKKwljYXQgPiAiJGNvbmYiIDw8RU9GCisjIE1vbmdvb3NlIHdlYiBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlLgorIyBMaW5lcyBzdGFydGluZyB3aXRoICcjJyBhbmQgZW1wdHkgbGluZXMgYXJlIGlnbm9yZWQuCisjIEZvciBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBldmVyeSBvcHRpb24sIHZpc2l0CisjIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9tb25nb29zZS93aWtpL01vbmdvb3NlTWFudWFsCisKK3Jvb3QJCSRyb290Citwb3J0cwkJJHBvcnQKK2luZGV4X2ZpbGVzCWdpdHdlYi5jZ2kKKyNzc2xfY2VydAkkZnFnaXRkaXIvZ2l0d2ViL3NzbF9jZXJ0LnBlbQorZXJyb3JfbG9nCSRmcWdpdGRpci9naXR3ZWIvJGh0dHBkX29ubHkvZXJyb3IubG9nCithY2Nlc3NfbG9nCSRmcWdpdGRpci9naXR3ZWIvJGh0dHBkX29ubHkvYWNjZXNzLmxvZworCisjY2dpIHNldHVwCitjZ2lfZW52CQlQQVRIPSRQQVRILEdJVF9ESVI9JEdJVF9ESVIsR0lUX0VYRUNfUEFUSD0kR0lUX0VYRUNfUEFUSCxHSVRXRUJfQ09ORklHPSRHSVRXRUJfQ09ORklHCitjZ2lfaW50ZXJwCSRQRVJMCitjZ2lfZXh0CQljZ2kscGwKKworIyBtaW1ldHlwZSBtYXBwaW5nCittaW1lX3R5cGVzCS5nej1hcHBsaWNhdGlvbi94LWd6aXAsLnRhci5nej1hcHBsaWNhdGlvbi94LXRneiwudGd6PWFwcGxpY2F0aW9uL3gtdGd6LC50YXI9YXBwbGljYXRpb24veC10YXIsLnppcD1hcHBsaWNhdGlvbi96aXAsLmdpZj1pbWFnZS9naWYsLmpwZz1pbWFnZS9qcGVnLC5qcGVnPWltYWdlL2pwZWcsLnBuZz1pbWFnZS9wbmcsLmNzcz10ZXh0L2NzcywuaHRtbD10ZXh0L2h0bWwsLmh0bT10ZXh0L2h0bWwsLmpzPXRleHQvamF2YXNjcmlwdCwuYz10ZXh0L3BsYWluLC5jcHA9dGV4dC9wbGFpbiwubG9nPXRleHQvcGxhaW4sLmNvbmY9dGV4dC9wbGFpbiwudGV4dD10ZXh0L3BsYWluLC50eHQ9dGV4dC9wbGFpbiwuZHRkPXRleHQveG1sLC5iejI9YXBwbGljYXRpb24veC1iemlwLC50Yno9YXBwbGljYXRpb24veC1iemlwLWNvbXByZXNzZWQtdGFyLC50YXIuYnoyPWFwcGxpY2F0aW9uL3gtYnppcC1jb21wcmVzc2VkLXRhcgorRU9GCit9CisKK3BsYWNrdXBfY29uZiAoKSB7CisJIyBnZW5lcmF0ZSBhIHN0YW5kYWxvbmUgJ3BsYWNrdXAnIHNlcnZlciBzY3JpcHQgaW4gJGZxZ2l0ZGlyL2dpdHdlYgorCSMgd2l0aCBlbWJlZGRlZCBjb25maWd1cmF0aW9uOyBpdCBkb2VzIG5vdCB1c2UgIiRjb25mIiBmaWxlCisJY2F0ID4gIiRmcWdpdGRpci9naXR3ZWIvZ2l0d2ViLnBzZ2kiIDw8RU9GCisjISRQRVJMCisKKyMgZ2l0d2ViIC0gc2ltcGxlIHdlYiBpbnRlcmZhY2UgdG8gdHJhY2sgY2hhbmdlcyBpbiBnaXQgcmVwb3NpdG9yaWVzCisjICAgICAgICAgIFBTR0kgd3JhcHBlciBhbmQgc2VydmVyIHN0YXJ0ZXIgKHNlZSBodHRwOi8vcGxhY2twZXJsLm9yZykKKwordXNlIHN0cmljdDsKKwordXNlIElPOjpIYW5kbGU7Cit1c2UgUGxhY2s6Ok1JTUU7Cit1c2UgUGxhY2s6OkJ1aWxkZXI7Cit1c2UgUGxhY2s6OkFwcDo6V3JhcENHSTsKK3VzZSBDR0k6OkVtdWxhdGU6OlBTR0kgMC4wNzsgIyBtaW5pbXVtIHZlcnNpb24gcmVxdWlyZWQgdG8gd29yayB3aXRoIGdpdHdlYgorCisjIG1pbWV0eXBlIG1hcHBpbmcgKGZyb20gbGlnaHR0cGRfY29uZikKK1BsYWNrOjpNSU1FLT5hZGRfdHlwZSgKKwkiLnBkZiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vcGRmIiwKKwkiLnNpZyIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZSIsCisJIi5zcGwiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL2Z1dHVyZXNwbGFzaCIsCisJIi5jbGFzcyIgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsCisJIi5wcyIgICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiLAorCSIudG9ycmVudCIgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQiLAorCSIuZHZpIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWR2aSIsCisJIi5neiIgICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtZ3ppcCIsCisJIi5wYWMiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtbnMtcHJveHktYXV0b2NvbmZpZyIsCisJIi5zd2YiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIiwKKwkiLnRhci5neiIgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10Z3oiLAorCSIudGd6IiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXRneiIsCisJIi50YXIiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtdGFyIiwKKwkiLnppcCIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vemlwIiwKKwkiLm1wMyIgICAgICAgICAgPT4gICAgICAiYXVkaW8vbXBlZyIsCisJIi5tM3UiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtbXBlZ3VybCIsCisJIi53bWEiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtbXMtd21hIiwKKwkiLndheCIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC1tcy13YXgiLAorCSIub2dnIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9vZ2ciLAorCSIud2F2IiAgICAgICAgICA9PiAgICAgICJhdWRpby94LXdhdiIsCisJIi5naWYiICAgICAgICAgID0+ICAgICAgImltYWdlL2dpZiIsCisJIi5qcGciICAgICAgICAgID0+ICAgICAgImltYWdlL2pwZWciLAorCSIuanBlZyIgICAgICAgICA9PiAgICAgICJpbWFnZS9qcGVnIiwKKwkiLnBuZyIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvcG5nIiwKKwkiLnhibSIgICAgICAgICAgPT4gICAgICAiaW1hZ2UveC14Yml0bWFwIiwKKwkiLnhwbSIgICAgICAgICAgPT4gICAgICAiaW1hZ2UveC14cGl4bWFwIiwKKwkiLnh3ZCIgICAgICAgICAgPT4gICAgICAiaW1hZ2UveC14d2luZG93ZHVtcCIsCisJIi5jc3MiICAgICAgICAgID0+ICAgICAgInRleHQvY3NzIiwKKwkiLmh0bWwiICAgICAgICAgPT4gICAgICAidGV4dC9odG1sIiwKKwkiLmh0bSIgICAgICAgICAgPT4gICAgICAidGV4dC9odG1sIiwKKwkiLmpzIiAgICAgICAgICAgPT4gICAgICAidGV4dC9qYXZhc2NyaXB0IiwKKwkiLmFzYyIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisJIi5jIiAgICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorCSIuY3BwIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKwkiLmxvZyIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisJIi5jb25mIiAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorCSIudGV4dCIgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKwkiLnR4dCIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisJIi5kdGQiICAgICAgICAgID0+ICAgICAgInRleHQveG1sIiwKKwkiLnhtbCIgICAgICAgICAgPT4gICAgICAidGV4dC94bWwiLAorCSIubXBlZyIgICAgICAgICA9PiAgICAgICJ2aWRlby9tcGVnIiwKKwkiLm1wZyIgICAgICAgICAgPT4gICAgICAidmlkZW8vbXBlZyIsCisJIi5tb3YiICAgICAgICAgID0+ICAgICAgInZpZGVvL3F1aWNrdGltZSIsCisJIi5xdCIgICAgICAgICAgID0+ICAgICAgInZpZGVvL3F1aWNrdGltZSIsCisJIi5hdmkiICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXN2aWRlbyIsCisJIi5hc2YiICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXMtYXNmIiwKKwkiLmFzeCIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy1hc2YiLAorCSIud212IiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zLXdtdiIsCisJIi5iejIiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYnppcCIsCisJIi50YnoiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYnppcC1jb21wcmVzc2VkLXRhciIsCisJIi50YXIuYnoyIiAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYnppcC1jb21wcmVzc2VkLXRhciIsCisJIiIgICAgICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iCispOworCitteSBcJGFwcCA9IGJ1aWxkZXIgeworCSMgdG8gYmUgYWJsZSB0byBvdmVycmlkZSBcJFNJR3tfX1dBUk5fX30gdG8gbG9nIGJ1aWxkIHRpbWUgd2FybmluZ3MKKwl1c2UgQ0dJOjpDYXJwOyAjIGl0IHNldHMgXCRTSUd7X19XQVJOX199IGl0c2VsZgorCisJbXkgXCRsb2dkaXIgPSAiJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seSI7CisJb3BlbiBteSBcJGFjY2Vzc19sb2dfZmgsICc+PicsICJcJGxvZ2Rpci9hY2Nlc3MubG9nIgorCQlvciBkaWUgIkNvdWxkbid0IG9wZW4gYWNjZXNzIGxvZyAnXCRsb2dkaXIvYWNjZXNzLmxvZyc6IFwkISI7CisJb3BlbiBteSBcJGVycm9yX2xvZ19maCwgICc+PicsICJcJGxvZ2Rpci9lcnJvci5sb2ciCisJCW9yIGRpZSAiQ291bGRuJ3Qgb3BlbiBlcnJvciBsb2cgJ1wkbG9nZGlyL2Vycm9yLmxvZyc6IFwkISI7CisKKwlcJGFjY2Vzc19sb2dfZmgtPmF1dG9mbHVzaCgxKTsKKwlcJGVycm9yX2xvZ19maC0+YXV0b2ZsdXNoKDEpOworCisJIyByZWRpcmVjdCBidWlsZCB0aW1lIHdhcm5pbmdzIHRvIGVycm9yLmxvZworCVwkU0lHeydfX1dBUk5fXyd9ID0gc3ViIHsKKwkJbXkgXCRtc2cgPSBzaGlmdDsKKwkJIyB0aW1lc3RhbXAgd2FybmluZyBsaWtlIGluIENHSTo6Q2FycDo6d2FybgorCQlteSBcJHN0YW1wID0gQ0dJOjpDYXJwOjpzdGFtcCgpOworCQlcJG1zZyA9fiBzL14vXCRzdGFtcC9nbTsKKwkJcHJpbnQgXCRlcnJvcl9sb2dfZmggXCRtc2c7CisJfTsKKworCSMgd3JpdGUgZXJyb3JzIHRvIGVycm9yLmxvZywgYWNjZXNzIHRvIGFjY2Vzcy5sb2cKKwllbmFibGUgJ0FjY2Vzc0xvZycsCisJCWZvcm1hdCA9PiAiY29tYmluZWQiLAorCQlsb2dnZXIgPT4gc3ViIHsgcHJpbnQgXCRhY2Nlc3NfbG9nX2ZoIEBfOyB9OworCWVuYWJsZSBzdWIgeworCQlteSBcJGFwcCA9IHNoaWZ0OworCQlzdWIgeworCQkJbXkgXCRlbnYgPSBzaGlmdDsKKwkJCVwkZW52LT57J3BzZ2kuZXJyb3JzJ30gPSBcJGVycm9yX2xvZ19maDsKKwkJCVwkYXBwLT4oXCRlbnYpOworCQl9CisJfTsKKwkjIGdpdHdlYiBjdXJyZW50bHkgZG9lc24ndCB3b3JrIHdpdGggJFNJR3tDSExEfSBzZXQgdG8gJ0lHTk9SRScsCisJIyBiZWNhdXNlIGl0IHVzZXMgJ2Nsb3NlICRmZCBvciBkaWUuLi4nIG9uIHBpcGVkIGZpbGVoYW5kbGUgJGZoCisJIyAod2hpY2ggY2F1c2VzIHRoZSBwYXJlbnQgcHJvY2VzcyB0byB3YWl0IGZvciBjaGlsZCB0byBmaW5pc2gpLgorCWVuYWJsZV9pZiB7IFwkU0lHeydDSExEJ30gZXEgJ0lHTk9SRScgfSBzdWIgeworCQlteSBcJGFwcCA9IHNoaWZ0OworCQlzdWIgeworCQkJbXkgXCRlbnYgPSBzaGlmdDsKKwkJCWxvY2FsIFwkU0lHeydDSExEJ30gPSAnREVGQVVMVCc7CisJCQlsb2NhbCBcJFNJR3snQ0xEJ30gID0gJ0RFRkFVTFQnOworCQkJXCRhcHAtPihcJGVudik7CisJCX0KKwl9OworCSMgc2VydmUgc3RhdGljIGZpbGVzLCBpLmUuIHN0eWxlc2hlZXQsIGltYWdlcywgc2NyaXB0CisJZW5hYmxlICdTdGF0aWMnLAorCQlwYXRoID0+IHN1YiB7IG0hXC4oanN8Y3NzfHBuZylcJCEgJiYgcyFeL2dpdHdlYi8hISB9LAorCQlyb290ID0+ICIkcm9vdC8iLAorCQllbmNvZGluZyA9PiAndXRmLTgnOyAjIGVuY29kaW5nIGZvciAndGV4dC9wbGFpbicgZmlsZXMKKwkjIGNvbnZlcnQgQ0dJIGFwcGxpY2F0aW9uIHRvIFBTR0kgYXBwCisJUGxhY2s6OkFwcDo6V3JhcENHSS0+bmV3KHNjcmlwdCA9PiAiJHJvb3QvZ2l0d2ViLmNnaSIpLT50b19hcHA7Cit9OworCisjIG1ha2UgaXQgcnVubmFibGUgYXMgc3RhbmRhbG9uZSBhcHAsCisjIGxpa2UgaXQgd291bGQgYmUgcnVuIHZpYSAncGxhY2t1cCcgdXRpbGl0eQoraWYgKGNhbGxlcikgeworCXJldHVybiBcJGFwcDsKK30gZWxzZSB7CisJcmVxdWlyZSBQbGFjazo6UnVubmVyOworCisJbXkgXCRydW5uZXIgPSBQbGFjazo6UnVubmVyLT5uZXcoKTsKKwlcJHJ1bm5lci0+cGFyc2Vfb3B0aW9ucyhxdygtLWVudiBkZXBsb3ltZW50IC0tcG9ydCAkcG9ydCksCisJCQkJIiRsb2NhbCIgPyBxdygtLWhvc3QgMTI3LjAuMC4xKSA6ICgpKTsKKwlcJHJ1bm5lci0+cnVuKFwkYXBwKTsKK30KK19fRU5EX18KK0VPRgorCisJY2htb2QgYSt4ICIkZnFnaXRkaXIvZ2l0d2ViL2dpdHdlYi5wc2dpIgorCSMgY29uZmlndXJhdGlvbiBpcyBlbWJlZGRlZCBpbiBzZXJ2ZXIgc2NyaXB0IGZpbGUsIGdpdHdlYi5wc2dpCisJcm0gLWYgIiRjb25mIgorfQorCitweXRob25fY29uZigpIHsKKwkjIFB5dGhvbidzIGJ1aWx0aW4gaHR0cC5zZXJ2ZXIgYW5kIGl0cyBDR0kgc3VwcG9ydCBpcyB2ZXJ5IGxpbWl0ZWQuCisJIyBDR0kgaGFuZGxlciBpcyBjYXBhYmxlIG9mIHJ1bm5pbmcgQ0dJIHNjcmlwdCBvbmx5IGZyb20gaW5zaWRlIGEgZGlyZWN0b3J5LgorCSMgVHJ5aW5nIHRvIHNldCBjZ2lfZGlyZWN0b3JpZXM9WyIvIl0gd2lsbCBhZGQgZG91YmxlIHNsYXNoIHRvIFNDUklQVF9OQU1FCisJIyBhbmQgdGhhdCBpbiB0dXJuIGJyZWFrcyBnaXR3ZWIncyByZWxhdGl2ZSBsaW5rIGdlbmVyYXRpb24uCisKKwkjIGNyZWF0ZSBhIHNpbXBsZSB3ZWIgcm9vdCB3aGVyZSAkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZF9vbmx5IGlzIG91ciByb290CisJbWtkaXIgLXAgIiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkX29ubHkvY2dpLWJpbiIKKwkjIFB5dGhvbiBodHRwLnNlcnZlciBmb2xsb3dzIHRoZSBzeW1saW5rcworCWxuIC1zZiAiJHJvb3QvZ2l0d2ViLmNnaSIgIiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkX29ubHkvY2dpLWJpbi9naXR3ZWIuY2dpIgorCWxuIC1zZiAiJHJvb3Qvc3RhdGljIiAiJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seS8iCisKKwkjIGdlbmVyYXRlIGEgc3RhbmRhbG9uZSAncHl0aG9uIGh0dHAuc2VydmVyJyBzY3JpcHQgaW4gJGZxZ2l0ZGlyL2dpdHdlYgorCSMgVGhpcyBhc3VtZXMgdGhhdCBweXRob24gaXMgaW4gdXNlcidzICRQQVRICisJIyBUaGlzIHNjcmlwdCBpcyBQeXRob24gMiBhbmQgMyBjb21wYXRpYmxlCisJY2F0ID4gIiRmcWdpdGRpci9naXR3ZWIvZ2l0d2ViLnB5IiA8PEVPRgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworIyBPcGVuIGxvZyBmaWxlIGluIGxpbmUgYnVmZmVyaW5nIG1vZGUKK2FjY2Vzc2xvZ2ZpbGUgPSBvcGVuKCIkZnFnaXRkaXIvZ2l0d2ViL2FjY2Vzcy5sb2ciLCAnYScsIGJ1ZmZlcmluZz0xKQorZXJyb3Jsb2dmaWxlID0gb3BlbigiJGZxZ2l0ZGlyL2dpdHdlYi9lcnJvci5sb2ciLCAnYScsIGJ1ZmZlcmluZz0xKQorCisjIGFuZCByZXBsYWNlIG91ciBzdGRvdXQgYW5kIHN0ZGVyciB3aXRoIGxvZyBmaWxlcworIyBhbHNvIGRvIGEgbG93bGV2ZWwgZHVwbGljYXRlIG9mIHRoZSBsb2dmaWxlIGZpbGUgZGVzY3JpcHRvcnMgc28gdGhhdAorIyBvdXIgQ0dJIGNoaWxkIHByb2Nlc3Mgd3JpdGVzIGFueSBzdGRlcnIgd2FybmluZyBhbHNvIHRvIHRoZSBsb2cgZmlsZQorX29yaWdfc3Rkb3V0X2ZkID0gc3lzLnN0ZG91dC5maWxlbm8oKQorc3lzLnN0ZG91dC5jbG9zZSgpCitvcy5kdXAyKGFjY2Vzc2xvZ2ZpbGUuZmlsZW5vKCksIF9vcmlnX3N0ZG91dF9mZCkKK3N5cy5zdGRvdXQgPSBhY2Nlc3Nsb2dmaWxlCisKK19vcmlnX3N0ZGVycl9mZCA9IHN5cy5zdGRlcnIuZmlsZW5vKCkKK3N5cy5zdGRlcnIuY2xvc2UoKQorb3MuZHVwMihlcnJvcmxvZ2ZpbGUuZmlsZW5vKCksIF9vcmlnX3N0ZGVycl9mZCkKK3N5cy5zdGRlcnIgPSBlcnJvcmxvZ2ZpbGUKKworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKKworaWYgc3lzLnZlcnNpb25faW5mbyA8ICgzLCAwKTogICMgUHl0aG9uIDIKKwlmcm9tIENHSUhUVFBTZXJ2ZXIgaW1wb3J0IENHSUhUVFBSZXF1ZXN0SGFuZGxlcgorCWZyb20gQmFzZUhUVFBTZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2ZXIgYXMgU2VydmVyQ2xhc3MKK2Vsc2U6ICAjIFB5dGhvbiAzCisJZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgQ0dJSFRUUFJlcXVlc3RIYW5kbGVyCisJZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgSFRUUFNlcnZlciBhcyBTZXJ2ZXJDbGFzcworCisKKyMgVGhvc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjZ2kgc2NyaXB0Citvcy5lbnZpcm9uLnVwZGF0ZSh7CisJIkdJVF9FWEVDX1BBVEgiOiAiJEdJVF9FWEVDX1BBVEgiLAorCSJHSVRfRElSIjogIiRHSVRfRElSIiwKKwkiR0lUV0VCX0NPTkZJRyI6ICIkR0lUV0VCX0NPTkZJRyIKK30pCisKKworY2xhc3MgR2l0V2ViUmVxdWVzdEhhbmRsZXIoQ0dJSFRUUFJlcXVlc3RIYW5kbGVyKToKKworCWRlZiBsb2dfbWVzc2FnZShzZWxmLCBmb3JtYXQsICphcmdzKToKKwkJIyBXcml0ZSBhY2Nlc3MgbG9ncyB0byBzdGRvdXQKKwkJc3lzLnN0ZG91dC53cml0ZSgiJXMgLSAtIFslc10gJXNcbiIgJQorCQkJCShzZWxmLmFkZHJlc3Nfc3RyaW5nKCksCisJCQkJc2VsZi5sb2dfZGF0ZV90aW1lX3N0cmluZygpLAorCQkJCWZvcm1hdCVhcmdzKSkKKworCWRlZiBkb19IRUFEKHNlbGYpOgorCQlzZWxmLnJlZGlyZWN0X3BhdGgoKQorCQlDR0lIVFRQUmVxdWVzdEhhbmRsZXIuZG9fSEVBRChzZWxmKQorCisJZGVmIGRvX0dFVChzZWxmKToKKwkJaWYgc2VsZi5wYXRoID09ICIvIjoKKwkJCXNlbGYuc2VuZF9yZXNwb25zZSgzMDMsICJTZWUgT3RoZXIiKQorCQkJc2VsZi5zZW5kX2hlYWRlcigiTG9jYXRpb24iLCAiL2NnaS1iaW4vZ2l0d2ViLmNnaSIpCisJCQlzZWxmLmVuZF9oZWFkZXJzKCkKKwkJCXJldHVybgorCQlzZWxmLnJlZGlyZWN0X3BhdGgoKQorCQlDR0lIVFRQUmVxdWVzdEhhbmRsZXIuZG9fR0VUKHNlbGYpCisKKwlkZWYgZG9fUE9TVChzZWxmKToKKwkJc2VsZi5yZWRpcmVjdF9wYXRoKCkKKwkJQ0dJSFRUUFJlcXVlc3RIYW5kbGVyLmRvX1BPU1Qoc2VsZikKKworCSMgcmV3cml0ZSBwYXRoIG9mIGV2ZXJ5IHJlcXVlc3QgdGhhdCBpcyBub3QgZ2l0d2ViLmNnaSB0byBvdXQgb2YgY2dpLWJpbgorCWRlZiByZWRpcmVjdF9wYXRoKHNlbGYpOgorCQlpZiBub3Qgc2VsZi5wYXRoLnN0YXJ0c3dpdGgoIi9jZ2ktYmluL2dpdHdlYi5jZ2kiKToKKwkJCXNlbGYucGF0aCA9IHNlbGYucGF0aC5yZXBsYWNlKCIvY2dpLWJpbi8iLCAiLyIpCisKKwkjIGdpdHdlYi5jZ2kgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBldmVyIGdvaW5nIHRvIGJlIHJ1biBoZXJlLgorCSMgSWdub3JlIGV2ZXJ5dGhpbmcgZWxzZQorCWRlZiBpc19jZ2koc2VsZik6CisJCXJlc3VsdCA9IEZhbHNlCisJCWlmIHNlbGYucGF0aC5zdGFydHN3aXRoKCcvY2dpLWJpbi9naXR3ZWIuY2dpJyk6CisJCQlyZXN1bHQgPSBDR0lIVFRQUmVxdWVzdEhhbmRsZXIuaXNfY2dpKHNlbGYpCisJCXJldHVybiByZXN1bHQKKworCitiaW5kID0gIjEyNy4wLjAuMSIKK2lmICIkbG9jYWwiID09ICJ0cnVlIjoKKwliaW5kID0gIjAuMC4wLjAiCisKKyMgU2V0IG91ciBodHRwIHJvb3QgZGlyZWN0b3J5CisjIFRoaXMgaXMgYSB3b3JrIGFyb3VuZCBmb3IgYSBtaXNzaW5nIGRpcmVjdG9yeSBhcmd1bWVudCBpbiBvbGRlciBQeXRob24gdmVyc2lvbnMKKyMgYXMgdGhpcyB3YXMgYWRkZWQgdG8gU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyIGluIFB5dGhvbiAzLjcKK29zLmNoZGlyKCIkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZF9vbmx5LyIpCisKK0dpdFdlYlJlcXVlc3RIYW5kbGVyLnByb3RvY29sX3ZlcnNpb24gPSAiSFRUUC8xLjAiCitodHRwZCA9IFNlcnZlckNsYXNzKChiaW5kLCAkcG9ydCksIEdpdFdlYlJlcXVlc3RIYW5kbGVyKQorCitzYSA9IGh0dHBkLnNvY2tldC5nZXRzb2NrbmFtZSgpCitwcmludCgiU2VydmluZyBIVFRQIG9uIiwgc2FbMF0sICJwb3J0Iiwgc2FbMV0sICIuLi4iKQoraHR0cGQuc2VydmVfZm9yZXZlcigpCitFT0YKKworCWNobW9kIGEreCAiJGZxZ2l0ZGlyL2dpdHdlYi9naXR3ZWIucHkiCit9CisKK2dpdHdlYl9jb25mKCkgeworCWNhdCA+ICIkZnFnaXRkaXIvZ2l0d2ViL2dpdHdlYl9jb25maWcucGVybCIgPDxFT0YKKyMhQEBQRVJMQEAKK291ciBcJHByb2plY3Ryb290ID0gIiQoZGlybmFtZSAiJGZxZ2l0ZGlyIikiOworb3VyIFwkZ2l0X3RlbXAgPSAiJGZxZ2l0ZGlyL2dpdHdlYi90bXAiOworb3VyIFwkcHJvamVjdHNfbGlzdCA9IFwkcHJvamVjdHJvb3Q7CisKK1wkZmVhdHVyZXsncmVtb3RlX2hlYWRzJ317J2RlZmF1bHQnfSA9IFsxXTsKK0VPRgorfQorCitjb25maWd1cmVfaHR0cGQoKSB7CisJY2FzZSAiJGh0dHBkIiBpbgorCSpsaWdodHRwZCopCisJCWxpZ2h0dHBkX2NvbmYKKwkJOzsKKwkqYXBhY2hlMip8Kmh0dHBkKikKKwkJYXBhY2hlMl9jb25mCisJCTs7CisJd2VicmljaykKKwkJd2Vicmlja19jb25mCisJCTs7CisJKm1vbmdvb3NlKikKKwkJbW9uZ29vc2VfY29uZgorCQk7OworCSpwbGFja3VwKikKKwkJcGxhY2t1cF9jb25mCisJCTs7CisJKnB5dGhvbiopCisJCXB5dGhvbl9jb25mCisJCTs7CisJKikKKwkJZWNobyAiVW5rbm93biBodHRwZCBzcGVjaWZpZWQ6ICRodHRwZCIKKwkJZXhpdCAxCisJCTs7CisJZXNhYworfQorCitjYXNlICIkYWN0aW9uIiBpbgorc3RvcCkKKwlzdG9wX2h0dHBkCisJZXhpdCAwCisJOzsKK3N0YXJ0KQorCXN0YXJ0X2h0dHBkCisJZXhpdCAwCisJOzsKK3Jlc3RhcnQpCisJc3RvcF9odHRwZAorCXN0YXJ0X2h0dHBkCisJZXhpdCAwCisJOzsKK2VzYWMKKworZ2l0d2ViX2NvbmYKKworcmVzb2x2ZV9mdWxsX2h0dHBkCitta2RpciAtcCAiJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seSIKK2NvbmY9IiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkX29ubHkuY29uZiIKKworY29uZmlndXJlX2h0dHBkCisKK3N0YXJ0X2h0dHBkCit1cmw9aHR0cDovLzEyNy4wLjAuMTokcG9ydAorCitpZiB0ZXN0IC1uICIkYnJvd3NlciI7IHRoZW4KKwlodHRwZF9pc19yZWFkeSAmJiBnaXQgd2ViLS1icm93c2UgLWIgIiRicm93c2VyIiAkdXJsIHx8IGVjaG8gJHVybAorZWxzZQorCWh0dHBkX2lzX3JlYWR5ICYmIGdpdCB3ZWItLWJyb3dzZSAtYyAiaW5zdGF3ZWIuYnJvd3NlciIgJHVybCB8fCBlY2hvICR1cmwKK2ZpCmRpZmYgLS1naXQgYS9naXQtbWVyZ2Utb2N0b3B1cy5zaCBiL2dpdC1tZXJnZS1vY3RvcHVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdkMTlkMzcKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtbWVyZ2Utb2N0b3B1cy5zaApAQCAtMCwwICsxLDExMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworIyBSZXNvbHZlIHR3byBvciBtb3JlIHRyZWVzLgorIworCisuIGdpdC1zaC1zZXR1cAorCitMRj0nCisnCisKKyMgVGhlIGZpcnN0IHBhcmFtZXRlcnMgdXAgdG8gLS0gYXJlIG1lcmdlIGJhc2VzOyB0aGUgcmVzdCBhcmUgaGVhZHMuCitiYXNlcz0gaGVhZD0gcmVtb3Rlcz0gc2VwX3NlZW49Citmb3IgYXJnCitkbworCWNhc2UgIiwkc2VwX3NlZW4sJGhlYWQsJGFyZywiIGluCisJKiwtLSwpCisJCXNlcF9zZWVuPXllcworCQk7OworCSx5ZXMsLCopCisJCWhlYWQ9JGFyZworCQk7OworCSx5ZXMsKikKKwkJcmVtb3Rlcz0iJHJlbW90ZXMkYXJnICIKKwkJOzsKKwkqKQorCQliYXNlcz0iJGJhc2VzJGFyZyAiCisJCTs7CisJZXNhYworZG9uZQorCisjIFJlamVjdCBpZiB0aGlzIGlzIG5vdCBhbiBvY3RvcHVzIC0tIHJlc29sdmUgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KK2Nhc2UgIiRyZW1vdGVzIiBpbgorPyonICc/KikKKwk7OworKikKKwlleGl0IDIgOzsKK2VzYWMKKworIyBNUkMgaXMgdGhlIGN1cnJlbnQgIm1lcmdlIHJlZmVyZW5jZSBjb21taXQiCisjIE1SVCBpcyB0aGUgY3VycmVudCAibWVyZ2UgcmVzdWx0IHRyZWUiCisKK2lmICEgZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0tCit0aGVuCisgICAgZ2V0dGV4dGxuICJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UiCisgICAgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1uYW1lLW9ubHkgSEVBRCAtLSB8IHNlZCAtZSAncy9eLyAgICAvJworICAgIGV4aXQgMgorZmkKK01SQz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGhlYWQpCitNUlQ9JChnaXQgd3JpdGUtdHJlZSkKK05PTl9GRl9NRVJHRT0wCitPQ1RPUFVTX0ZBSUxVUkU9MAorZm9yIFNIQTEgaW4gJHJlbW90ZXMKK2RvCisJY2FzZSAiJE9DVE9QVVNfRkFJTFVSRSIgaW4KKwkxKQorCQkjIFdlIGFsbG93IG9ubHkgbGFzdCBvbmUgdG8gaGF2ZSBhIGhhbmQtcmVzb2x2YWJsZQorCQkjIGNvbmZsaWN0cy4gIExhc3Qgcm91bmQgZmFpbGVkIGFuZCB3ZSBzdGlsbCBoYWQKKwkJIyBhIGhlYWQgdG8gbWVyZ2UuCisJCWdldHRleHRsbiAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCisJCWdldHRleHRsbiAiU2hvdWxkIG5vdCBiZSBkb2luZyBhbiBvY3RvcHVzLiIKKwkJZXhpdCAyCisJZXNhYworCisJZXZhbCBwcmV0dHlfbmFtZT1cJHtHSVRIRUFEXyRTSEExOi0kU0hBMX0KKwlpZiB0ZXN0ICIkU0hBMSIgPSAiJHByZXR0eV9uYW1lIgorCXRoZW4KKwkJU0hBMV9VUD0iJChlY2hvICIkU0hBMSIgfCB0ciBhLXogQS1aKSIKKwkJZXZhbCBwcmV0dHlfbmFtZT1cJHtHSVRIRUFEXyRTSEExX1VQOi0kcHJldHR5X25hbWV9CisJZmkKKwljb21tb249JChnaXQgbWVyZ2UtYmFzZSAtLWFsbCAkU0hBMSAkTVJDKSB8fAorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gZmluZCBjb21tb24gY29tbWl0IHdpdGggXCRwcmV0dHlfbmFtZSIpIgorCisJY2FzZSAiJExGJGNvbW1vbiRMRiIgaW4KKwkqIiRMRiRTSEExJExGIiopCisJCWV2YWxfZ2V0dGV4dGxuICJBbHJlYWR5IHVwIHRvIGRhdGUgd2l0aCBcJHByZXR0eV9uYW1lIgorCQljb250aW51ZQorCQk7OworCWVzYWMKKworCWlmIHRlc3QgIiRjb21tb24sJE5PTl9GRl9NRVJHRSIgPSAiJE1SQywwIgorCXRoZW4KKwkJIyBUaGUgZmlyc3QgaGVhZCBiZWluZyBtZXJnZWQgd2FzIGEgZmFzdC1mb3J3YXJkLgorCQkjIEFkdmFuY2UgTVJDIHRvIHRoZSBoZWFkIGJlaW5nIG1lcmdlZCwgYW5kIHVzZSB0aGF0CisJCSMgdHJlZSBhcyB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuCisJCSMgV2Ugc3RpbGwgbmVlZCB0byBjb3VudCB0aGlzIGFzIHBhcnQgb2YgdGhlIHBhcmVudCBzZXQuCisKKwkJZXZhbF9nZXR0ZXh0bG4gIkZhc3QtZm9yd2FyZGluZyB0bzogXCRwcmV0dHlfbmFtZSIKKwkJZ2l0IHJlYWQtdHJlZSAtdSAtbSAkaGVhZCAkU0hBMSB8fCBleGl0CisJCU1SQz0kU0hBMSBNUlQ9JChnaXQgd3JpdGUtdHJlZSkKKwkJY29udGludWUKKwlmaQorCisJTk9OX0ZGX01FUkdFPTEKKworCWV2YWxfZ2V0dGV4dGxuICJUcnlpbmcgc2ltcGxlIG1lcmdlIHdpdGggXCRwcmV0dHlfbmFtZSIKKwlnaXQgcmVhZC10cmVlIC11IC1tIC0tYWdncmVzc2l2ZSAgJGNvbW1vbiAkTVJUICRTSEExIHx8IGV4aXQgMgorCW5leHQ9JChnaXQgd3JpdGUtdHJlZSAyPi9kZXYvbnVsbCkKKwlpZiB0ZXN0ICQ/IC1uZSAwCisJdGhlbgorCQlnZXR0ZXh0bG4gIlNpbXBsZSBtZXJnZSBkaWQgbm90IHdvcmssIHRyeWluZyBhdXRvbWF0aWMgbWVyZ2UuIgorCQlnaXQgbWVyZ2UtaW5kZXggLW8gZ2l0LW1lcmdlLW9uZS1maWxlIC1hIHx8CisJCU9DVE9QVVNfRkFJTFVSRT0xCisJCW5leHQ9JChnaXQgd3JpdGUtdHJlZSAyPi9kZXYvbnVsbCkKKwlmaQorCisJTVJDPSIkTVJDICRTSEExIgorCU1SVD0kbmV4dAorZG9uZQorCitleGl0ICIkT0NUT1BVU19GQUlMVVJFIgpkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdlLW9uZS1maWxlLnNoIGIvZ2l0LW1lcmdlLW9uZS1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2ZDk4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtbWVyZ2Utb25lLWZpbGUuc2gKQEAgLTAsMCArMSwxNjcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisjCisjIFRoaXMgaXMgdGhlIGdpdCBwZXItZmlsZSBtZXJnZSBzY3JpcHQsIGNhbGxlZCB3aXRoCisjCisjICAgJDEgLSBvcmlnaW5hbCBmaWxlIFNIQTEgKG9yIGVtcHR5KQorIyAgICQyIC0gZmlsZSBpbiBicmFuY2gxIFNIQTEgKG9yIGVtcHR5KQorIyAgICQzIC0gZmlsZSBpbiBicmFuY2gyIFNIQTEgKG9yIGVtcHR5KQorIyAgICQ0IC0gcGF0aG5hbWUgaW4gcmVwb3NpdG9yeQorIyAgICQ1IC0gb3JpZ2luYWwgZmlsZSBtb2RlIChvciBlbXB0eSkKKyMgICAkNiAtIGZpbGUgaW4gYnJhbmNoMSBtb2RlIChvciBlbXB0eSkKKyMgICAkNyAtIGZpbGUgaW4gYnJhbmNoMiBtb2RlIChvciBlbXB0eSkKKyMKKyMgSGFuZGxlIHNvbWUgdHJpdmlhbCBjYXNlcy4uIFRoZSBfcmVhbGx5XyB0cml2aWFsIGNhc2VzIGhhdmUKKyMgYmVlbiBoYW5kbGVkIGFscmVhZHkgYnkgZ2l0IHJlYWQtdHJlZSwgYnV0IHRoYXQgb25lIGRvZXNuJ3QKKyMgZG8gYW55IG1lcmdlcyB0aGF0IG1pZ2h0IGNoYW5nZSB0aGUgdHJlZSBsYXlvdXQuCisKK1VTQUdFPSc8b3JpZyBibG9iPiA8b3VyIGJsb2I+IDx0aGVpciBibG9iPiA8cGF0aD4nCitVU0FHRT0iJFVTQUdFIDxvcmlnIG1vZGU+IDxvdXIgbW9kZT4gPHRoZWlyIG1vZGU+IgorTE9OR19VU0FHRT0idXNhZ2U6IGdpdCBtZXJnZS1vbmUtZmlsZSAkVVNBR0UKKworQmxvYiBpZHMgYW5kIG1vZGVzIHNob3VsZCBiZSBlbXB0eSBmb3IgbWlzc2luZyBmaWxlcy4iCisKK1NVQkRJUkVDVE9SWV9PSz1ZZXMKKy4gZ2l0LXNoLXNldHVwCitjZF90b190b3BsZXZlbAorcmVxdWlyZV93b3JrX3RyZWUKKworaWYgdGVzdCAkIyAhPSA3Cit0aGVuCisJZWNobyAiJExPTkdfVVNBR0UiCisJZXhpdCAxCitmaQorCitjYXNlICIkezE6LS59JHsyOi0ufSR7MzotLn0iIGluCisjCisjIERlbGV0ZWQgaW4gYm90aCBvciBkZWxldGVkIGluIG9uZSBhbmQgdW5jaGFuZ2VkIGluIHRoZSBvdGhlcgorIworIiQxLi4iIHwgIiQxLiQxIiB8ICIkMSQxLiIpCisJaWYgeyB0ZXN0IC16ICIkNiIgJiYgdGVzdCAiJDUiICE9ICIkNyI7IH0gfHwKKwkgICB7IHRlc3QgLXogIiQ3IiAmJiB0ZXN0ICIkNSIgIT0gIiQ2IjsgfQorCXRoZW4KKwkJZWNobyAiRVJST1I6IEZpbGUgJDQgZGVsZXRlZCBvbiBvbmUgYnJhbmNoIGJ1dCBoYWQgaXRzIiA+JjIKKwkJZWNobyAiRVJST1I6IHBlcm1pc3Npb25zIGNoYW5nZWQgb24gdGhlIG90aGVyLiIgPiYyCisJCWV4aXQgMQorCWZpCisKKwlpZiB0ZXN0IC1uICIkMiIKKwl0aGVuCisJCWVjaG8gIlJlbW92aW5nICQ0IgorCWVsc2UKKwkJIyByZWFkLXRyZWUgY2hlY2tlZCB0aGF0IGluZGV4IG1hdGNoZXMgSEVBRCBhbHJlYWR5LAorCQkjIHNvIHdlIGtub3cgd2UgZG8gbm90IGhhdmUgdGhpcyBwYXRoIHRyYWNrZWQuCisJCSMgdGhlcmUgbWF5IGJlIGFuIHVucmVsYXRlZCB3b3JraW5nIHRyZWUgZmlsZSBoZXJlLAorCQkjIHdoaWNoIHdlIHNob3VsZCBqdXN0IGxlYXZlIHVubW9sZXN0ZWQuICBNYWtlIHN1cmUKKwkJIyB3ZSBkbyBub3QgaGF2ZSBpdCBpbiB0aGUgaW5kZXgsIHRob3VnaC4KKwkJZXhlYyBnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0tICIkNCIKKwlmaQorCWlmIHRlc3QgLWYgIiQ0IgorCXRoZW4KKwkJcm0gLWYgLS0gIiQ0IiAmJgorCQlybWRpciAtcCAiJChleHByICJ6JDQiIDogJ3pcKC4qXCkvJykiIDI+L2Rldi9udWxsIHx8IDoKKwlmaSAmJgorCQlleGVjIGdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS0gIiQ0IgorCTs7CisKKyMKKyMgQWRkZWQgaW4gb25lLgorIworIi4kMi4iKQorCSMgdGhlIG90aGVyIHNpZGUgZGlkIG5vdCBhZGQgYW5kIHdlIGFkZGVkIHNvIHRoZXJlIGlzIG5vdGhpbmcKKwkjIHRvIGJlIGRvbmUsIGV4Y2VwdCBtYWtpbmcgdGhlIHBhdGggbWVyZ2VkLgorCWV4ZWMgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAiJDYiICIkMiIgIiQ0IgorCTs7CisiLi4kMyIpCisJZWNobyAiQWRkaW5nICQ0IgorCWlmIHRlc3QgLWYgIiQ0IgorCXRoZW4KKwkJZWNobyAiRVJST1I6IHVudHJhY2tlZCAkNCBpcyBvdmVyd3JpdHRlbiBieSB0aGUgbWVyZ2UuIiA+JjIKKwkJZXhpdCAxCisJZmkKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvICIkNyIgIiQzIiAiJDQiICYmCisJCWV4ZWMgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC0tICIkNCIKKwk7OworCisjCisjIEFkZGVkIGluIGJvdGgsIGlkZW50aWNhbGx5IChjaGVjayBmb3Igc2FtZSBwZXJtaXNzaW9ucykuCisjCisiLiQzJDIiKQorCWlmIHRlc3QgIiQ2IiAhPSAiJDciCisJdGhlbgorCQllY2hvICJFUlJPUjogRmlsZSAkNCBhZGRlZCBpZGVudGljYWxseSBpbiBib3RoIGJyYW5jaGVzLCIgPiYyCisJCWVjaG8gIkVSUk9SOiBidXQgcGVybWlzc2lvbnMgY29uZmxpY3QgJDYtPiQ3LiIgPiYyCisJCWV4aXQgMQorCWZpCisJZWNobyAiQWRkaW5nICQ0IgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gIiQ2IiAiJDIiICIkNCIgJiYKKwkJZXhlYyBnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLS0gIiQ0IgorCTs7CisKKyMKKyMgTW9kaWZpZWQgaW4gYm90aCwgYnV0IGRpZmZlcmVudGx5LgorIworIiQxJDIkMyIgfCAiLiQyJDMiKQorCisJY2FzZSAiLCQ2LCQ3LCIgaW4KKwkqLDEyMDAwMCwqKQorCQllY2hvICJFUlJPUjogJDQ6IE5vdCBtZXJnaW5nIHN5bWJvbGljIGxpbmsgY2hhbmdlcy4iID4mMgorCQlleGl0IDEKKwkJOzsKKwkqLDE2MDAwMCwqKQorCQllY2hvICJFUlJPUjogJDQ6IE5vdCBtZXJnaW5nIGNvbmZsaWN0aW5nIHN1Ym1vZHVsZSBjaGFuZ2VzLiIgPiYyCisJCWV4aXQgMQorCQk7OworCWVzYWMKKworCXNyYzE9JChnaXQgdW5wYWNrLWZpbGUgJDIpCisJc3JjMj0kKGdpdCB1bnBhY2stZmlsZSAkMykKKwljYXNlICIkMSIgaW4KKwknJykKKwkJZWNobyAiQWRkZWQgJDQgaW4gYm90aCwgYnV0IGRpZmZlcmVudGx5LiIKKwkJb3JpZz0kKGdpdCB1bnBhY2stZmlsZSAkKGdpdCBoYXNoLW9iamVjdCAvZGV2L251bGwpKQorCQk7OworCSopCisJCWVjaG8gIkF1dG8tbWVyZ2luZyAkNCIKKwkJb3JpZz0kKGdpdCB1bnBhY2stZmlsZSAkMSkKKwkJOzsKKwllc2FjCisKKwlnaXQgbWVyZ2UtZmlsZSAiJHNyYzEiICIkb3JpZyIgIiRzcmMyIgorCXJldD0kPworCW1zZz0KKwlpZiB0ZXN0ICRyZXQgIT0gMCB8fCB0ZXN0IC16ICIkMSIKKwl0aGVuCisJCW1zZz0nY29udGVudCBjb25mbGljdCcKKwkJcmV0PTEKKwlmaQorCisJIyBDcmVhdGUgdGhlIHdvcmtpbmcgdHJlZSBmaWxlLCB1c2luZyAib3VyIHRyZWUiIHZlcnNpb24gZnJvbSB0aGUKKwkjIGluZGV4LCBhbmQgdGhlbiBzdG9yZSB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZS4KKwlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLS1zdGFnZT0yIC0tICIkNCIgJiYgY2F0ICIkc3JjMSIgPiIkNCIgfHwgZXhpdCAxCisJcm0gLWYgLS0gIiRvcmlnIiAiJHNyYzEiICIkc3JjMiIKKworCWlmIHRlc3QgIiQ2IiAhPSAiJDciCisJdGhlbgorCQlpZiB0ZXN0IC1uICIkbXNnIgorCQl0aGVuCisJCQltc2c9IiRtc2csICIKKwkJZmkKKwkJbXNnPSIke21zZ31wZXJtaXNzaW9ucyBjb25mbGljdDogJDUtPiQ2LCQ3IgorCQlyZXQ9MQorCWZpCisKKwlpZiB0ZXN0ICRyZXQgIT0gMAorCXRoZW4KKwkJZWNobyAiRVJST1I6ICRtc2cgaW4gJDQiID4mMgorCQlleGl0IDEKKwlmaQorCWV4ZWMgZ2l0IHVwZGF0ZS1pbmRleCAtLSAiJDQiCisJOzsKKworKikKKwllY2hvICJFUlJPUjogJDQ6IE5vdCBoYW5kbGluZyBjYXNlICQxIC0+ICQyIC0+ICQzIiA+JjIKKwk7OworZXNhYworZXhpdCAxCmRpZmYgLS1naXQgYS9naXQtbWVyZ2UtcmVzb2x2ZS5zaCBiL2dpdC1tZXJnZS1yZXNvbHZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0M2ZlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtbWVyZ2UtcmVzb2x2ZS5zaApAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IExpbnVzIFRvcnZhbGRzCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworIyBSZXNvbHZlIHR3byB0cmVlcywgdXNpbmcgZW5oYW5jZWQgbXVsdGktYmFzZSByZWFkLXRyZWUuCisKKyMgVGhlIGZpcnN0IHBhcmFtZXRlcnMgdXAgdG8gLS0gYXJlIG1lcmdlIGJhc2VzOyB0aGUgcmVzdCBhcmUgaGVhZHMuCitiYXNlcz0gaGVhZD0gcmVtb3Rlcz0gc2VwX3NlZW49Citmb3IgYXJnCitkbworCWNhc2UgIiwkc2VwX3NlZW4sJGhlYWQsJGFyZywiIGluCisJKiwtLSwpCisJCXNlcF9zZWVuPXllcworCQk7OworCSx5ZXMsLCopCisJCWhlYWQ9JGFyZworCQk7OworCSx5ZXMsKikKKwkJcmVtb3Rlcz0iJHJlbW90ZXMkYXJnICIKKwkJOzsKKwkqKQorCQliYXNlcz0iJGJhc2VzJGFyZyAiCisJCTs7CisJZXNhYworZG9uZQorCisjIEdpdmUgdXAgaWYgd2UgYXJlIGdpdmVuIHR3byBvciBtb3JlIHJlbW90ZXMgLS0gbm90IGhhbmRsaW5nIG9jdG9wdXMuCitjYXNlICIkcmVtb3RlcyIgaW4KKz8qJyAnPyopCisJZXhpdCAyIDs7Citlc2FjCisKKyMgR2l2ZSB1cCBpZiB0aGlzIGlzIGEgYmFzZWxlc3MgbWVyZ2UuCitpZiB0ZXN0ICcnID0gIiRiYXNlcyIKK3RoZW4KKwlleGl0IDIKK2ZpCisKK2dpdCB1cGRhdGUtaW5kZXggLXEgLS1yZWZyZXNoCitnaXQgcmVhZC10cmVlIC11IC1tIC0tYWdncmVzc2l2ZSAkYmFzZXMgJGhlYWQgJHJlbW90ZXMgfHwgZXhpdCAyCitlY2hvICJUcnlpbmcgc2ltcGxlIG1lcmdlLiIKK2lmIHJlc3VsdF90cmVlPSQoZ2l0IHdyaXRlLXRyZWUgMj4vZGV2L251bGwpCit0aGVuCisJZXhpdCAwCitlbHNlCisJZWNobyAiU2ltcGxlIG1lcmdlIGZhaWxlZCwgdHJ5aW5nIEF1dG9tYXRpYyBtZXJnZS4iCisJaWYgZ2l0IG1lcmdlLWluZGV4IC1vIGdpdC1tZXJnZS1vbmUtZmlsZSAtYQorCXRoZW4KKwkJZXhpdCAwCisJZWxzZQorCQlleGl0IDEKKwlmaQorZmkKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZXRvb2wtLWxpYi5zaCBiL2dpdC1tZXJnZXRvb2wtLWxpYi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDRhNWFjCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LW1lcmdldG9vbC0tbGliLnNoCkBAIC0wLDAgKzEsNDYzIEBACisjIGdpdC1tZXJnZXRvb2wtLWxpYiBpcyBhIHNoZWxsIGxpYnJhcnkgZm9yIGNvbW1vbiBtZXJnZSB0b29sIGZ1bmN0aW9ucworCis6ICR7TUVSR0VfVE9PTFNfRElSPSQoZ2l0IC0tZXhlYy1wYXRoKS9tZXJnZXRvb2xzfQorCitJRlM9JworJworCittb2RlX29rICgpIHsKKwlpZiBkaWZmX21vZGUKKwl0aGVuCisJCWNhbl9kaWZmCisJZWxpZiBtZXJnZV9tb2RlCisJdGhlbgorCQljYW5fbWVyZ2UKKwllbHNlCisJCWZhbHNlCisJZmkKK30KKworaXNfYXZhaWxhYmxlICgpIHsKKwltZXJnZV90b29sX3BhdGg9JCh0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoICIkMSIpICYmCisJdHlwZSAiJG1lcmdlX3Rvb2xfcGF0aCIgPi9kZXYvbnVsbCAyPiYxCit9CisKK2xpc3RfY29uZmlnX3Rvb2xzICgpIHsKKwlzZWN0aW9uPSQxCisJbGluZV9wcmVmaXg9JHsyOi19CisKKwlnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAkc2VjdGlvbidcLi4qXC5jbWQnIHwKKwl3aGlsZSByZWFkIC1yIGtleSB2YWx1ZQorCWRvCisJCXRvb2xuYW1lPSR7a2V5IyRzZWN0aW9uLn0KKwkJdG9vbG5hbWU9JHt0b29sbmFtZSUuY21kfQorCisJCXByaW50ZiAiJXMlc1xuIiAiJGxpbmVfcHJlZml4IiAiJHRvb2xuYW1lIgorCWRvbmUKK30KKworc2hvd190b29sX25hbWVzICgpIHsKKwljb25kaXRpb249JHsxOi10cnVlfSBwZXJfbGluZV9wcmVmaXg9JHsyOi19IHByZWFtYmxlPSR7MzotfQorCW5vdF9mb3VuZF9tc2c9JHs0Oi19CisJZXh0cmFfY29udGVudD0kezU6LX0KKworCXNob3duX2FueT0KKwkoIGNkICIkTUVSR0VfVE9PTFNfRElSIiAmJiBscyApIHwgeworCQl3aGlsZSByZWFkIHRvb2xuYW1lCisJCWRvCisJCQlpZiBzZXR1cF90b29sICIkdG9vbG5hbWUiIDI+L2Rldi9udWxsICYmCisJCQkJKGV2YWwgIiRjb25kaXRpb24iICIkdG9vbG5hbWUiKQorCQkJdGhlbgorCQkJCWlmIHRlc3QgLW4gIiRwcmVhbWJsZSIKKwkJCQl0aGVuCisJCQkJCXByaW50ZiAiJXNcbiIgIiRwcmVhbWJsZSIKKwkJCQkJcHJlYW1ibGU9CisJCQkJZmkKKwkJCQlzaG93bl9hbnk9eWVzCisJCQkJcHJpbnRmICIlcyVzXG4iICIkcGVyX2xpbmVfcHJlZml4IiAiJHRvb2xuYW1lIgorCQkJZmkKKwkJZG9uZQorCisJCWlmIHRlc3QgLW4gIiRleHRyYV9jb250ZW50IgorCQl0aGVuCisJCQlpZiB0ZXN0IC1uICIkcHJlYW1ibGUiCisJCQl0aGVuCisJCQkJIyBOb3RlOiBubyAnXG4nIGhlcmUgc2luY2Ugd2UgZG9uJ3Qgd2FudCBhCisJCQkJIyBibGFuayBsaW5lIGlmIHRoZXJlIGlzIG5vIGluaXRpYWwgY29udGVudC4KKwkJCQlwcmludGYgIiVzIiAiJHByZWFtYmxlIgorCQkJCXByZWFtYmxlPQorCQkJZmkKKwkJCXNob3duX2FueT15ZXMKKwkJCXByaW50ZiAiXG4lc1xuIiAiJGV4dHJhX2NvbnRlbnQiCisJCWZpCisKKwkJaWYgdGVzdCAtbiAiJHByZWFtYmxlIiAmJiB0ZXN0IC1uICIkbm90X2ZvdW5kX21zZyIKKwkJdGhlbgorCQkJcHJpbnRmICIlc1xuIiAiJG5vdF9mb3VuZF9tc2ciCisJCWZpCisKKwkJdGVzdCAtbiAiJHNob3duX2FueSIKKwl9Cit9CisKK2RpZmZfbW9kZSAoKSB7CisJdGVzdCAiJFRPT0xfTU9ERSIgPSBkaWZmCit9CisKK21lcmdlX21vZGUgKCkgeworCXRlc3QgIiRUT09MX01PREUiID0gbWVyZ2UKK30KKworZ3VpX21vZGUgKCkgeworCXRlc3QgIiRHSVRfTUVSR0VUT09MX0dVSSIgPSB0cnVlCit9CisKK3RyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGggKCkgeworCWVjaG8gIiQxIgorfQorCitjaGVja191bmNoYW5nZWQgKCkgeworCWlmIHRlc3QgIiRNRVJHRUQiIC1udCAiJEJBQ0tVUCIKKwl0aGVuCisJCXJldHVybiAwCisJZWxzZQorCQl3aGlsZSB0cnVlCisJCWRvCisJCQllY2hvICIkTUVSR0VEIHNlZW1zIHVuY2hhbmdlZC4iCisJCQlwcmludGYgIldhcyB0aGUgbWVyZ2Ugc3VjY2Vzc2Z1bCBbeS9uXT8gIgorCQkJcmVhZCBhbnN3ZXIgfHwgcmV0dXJuIDEKKwkJCWNhc2UgIiRhbnN3ZXIiIGluCisJCQl5KnxZKikgcmV0dXJuIDAgOzsKKwkJCW4qfE4qKSByZXR1cm4gMSA7OworCQkJZXNhYworCQlkb25lCisJZmkKK30KKwordmFsaWRfdG9vbCAoKSB7CisJc2V0dXBfdG9vbCAiJDEiICYmIHJldHVybiAwCisJY21kPSQoZ2V0X21lcmdlX3Rvb2xfY21kICIkMSIpCisJdGVzdCAtbiAiJGNtZCIKK30KKworc2V0dXBfdXNlcl90b29sICgpIHsKKwltZXJnZV90b29sX2NtZD0kKGdldF9tZXJnZV90b29sX2NtZCAiJHRvb2wiKQorCXRlc3QgLW4gIiRtZXJnZV90b29sX2NtZCIgfHwgcmV0dXJuIDEKKworCWRpZmZfY21kICgpIHsKKwkJKCBldmFsICRtZXJnZV90b29sX2NtZCApCisJfQorCisJbWVyZ2VfY21kICgpIHsKKwkJKCBldmFsICRtZXJnZV90b29sX2NtZCApCisJfQorfQorCitzZXR1cF90b29sICgpIHsKKwl0b29sPSIkMSIKKworCSMgRmFsbGJhY2sgZGVmaW5pdGlvbnMsIHRvIGJlIG92ZXJyaWRkZW4gYnkgdG9vbHMuCisJY2FuX21lcmdlICgpIHsKKwkJcmV0dXJuIDAKKwl9CisKKwljYW5fZGlmZiAoKSB7CisJCXJldHVybiAwCisJfQorCisJZGlmZl9jbWQgKCkgeworCQlyZXR1cm4gMQorCX0KKworCW1lcmdlX2NtZCAoKSB7CisJCXJldHVybiAxCisJfQorCisJdHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCAoKSB7CisJCWVjaG8gIiQxIgorCX0KKworCSMgTW9zdCB0b29scycgZXhpdCBjb2RlcyBjYW5ub3QgYmUgdHJ1c3RlZCwgc28gQnkgZGVmYXVsdCB3ZSBpZ25vcmUKKwkjIHRoZWlyIGV4aXQgY29kZSBhbmQgY2hlY2sgdGhlIG1lcmdlZCBmaWxlJ3MgbW9kaWZpY2F0aW9uIHRpbWUgaW4KKwkjIGNoZWNrX3VuY2hhbmdlZCgpIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGUgbWVyZ2Ugd2FzCisJIyBzdWNjZXNzZnVsLiAgVGhlIHJldHVybiB2YWx1ZSBmcm9tIHJ1bl9tZXJnZV9jbWQsIGJ5IGRlZmF1bHQsIGlzCisJIyBkZXRlcm1pbmVkIGJ5IGNoZWNrX3VuY2hhbmdlZCgpLgorCSMKKwkjIFdoZW4gYSB0b29sJ3MgZXhpdCBjb2RlIGNhbiBiZSB0cnVzdGVkIHRoZW4gdGhlIHJldHVybiB2YWx1ZSBmcm9tCisJIyBydW5fbWVyZ2VfY21kIGlzIHNpbXBseSB0aGUgdG9vbCdzIGV4aXQgY29kZSwgYW5kIGNoZWNrX3VuY2hhbmdlZCgpCisJIyBpcyBub3QgY2FsbGVkLgorCSMKKwkjIFRoZSByZXR1cm4gdmFsdWUgb2YgZXhpdF9jb2RlX3RydXN0YWJsZSgpIHRlbGxzIHVzIHdoZXRoZXIgb3Igbm90IHdlCisJIyBjYW4gdHJ1c3QgdGhlIHRvb2wncyBleGl0IGNvZGUuCisJIworCSMgVXNlci1kZWZpbmVkIGFuZCBidWlsdC1pbiB0b29scyBkZWZhdWx0IHRvIGZhbHNlLgorCSMgQnVpbHQtaW4gdG9vbHMgYWR2ZXJ0aXNlIHRoYXQgdGhlaXIgZXhpdCBjb2RlIGlzIHRydXN0YWJsZSBieQorCSMgcmVkZWZpbmluZyBleGl0X2NvZGVfdHJ1c3RhYmxlKCkgdG8gdHJ1ZS4KKworCWV4aXRfY29kZV90cnVzdGFibGUgKCkgeworCQlmYWxzZQorCX0KKworCisJaWYgISB0ZXN0IC1mICIkTUVSR0VfVE9PTFNfRElSLyR0b29sIgorCXRoZW4KKwkJc2V0dXBfdXNlcl90b29sCisJCXJldHVybiAkPworCWZpCisKKwkjIExvYWQgdGhlIHJlZGVmaW5lZCBmdW5jdGlvbnMKKwkuICIkTUVSR0VfVE9PTFNfRElSLyR0b29sIgorCSMgTm93IGxldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb21tYW5kIGZvciB0aGUgdG9vbC4gIElmCisJIyB0aGV5IGhhdmUgbm90IGRvbmUgc28gdGhlbiB0aGlzIHdpbGwgcmV0dXJuIDEgd2hpY2ggd2UgaWdub3JlLgorCXNldHVwX3VzZXJfdG9vbAorCisJaWYgbWVyZ2VfbW9kZSAmJiAhIGNhbl9tZXJnZQorCXRoZW4KKwkJZWNobyAiZXJyb3I6ICckdG9vbCcgY2FuIG5vdCBiZSB1c2VkIHRvIHJlc29sdmUgbWVyZ2VzIiA+JjIKKwkJcmV0dXJuIDEKKwllbGlmIGRpZmZfbW9kZSAmJiAhIGNhbl9kaWZmCisJdGhlbgorCQllY2hvICJlcnJvcjogJyR0b29sJyBjYW4gb25seSBiZSB1c2VkIHRvIHJlc29sdmUgbWVyZ2VzIiA+JjIKKwkJcmV0dXJuIDEKKwlmaQorCXJldHVybiAwCit9CisKK2dldF9tZXJnZV90b29sX2NtZCAoKSB7CisJbWVyZ2VfdG9vbD0iJDEiCisJaWYgZGlmZl9tb2RlCisJdGhlbgorCQlnaXQgY29uZmlnICJkaWZmdG9vbC4kbWVyZ2VfdG9vbC5jbWQiIHx8CisJCWdpdCBjb25maWcgIm1lcmdldG9vbC4kbWVyZ2VfdG9vbC5jbWQiCisJZWxzZQorCQlnaXQgY29uZmlnICJtZXJnZXRvb2wuJG1lcmdlX3Rvb2wuY21kIgorCWZpCit9CisKK3RydXN0X2V4aXRfY29kZSAoKSB7CisJaWYgZ2l0IGNvbmZpZyAtLWJvb2wgIm1lcmdldG9vbC4kMS50cnVzdEV4aXRDb2RlIgorCXRoZW4KKwkJOjsgIyBPSworCWVsaWYgZXhpdF9jb2RlX3RydXN0YWJsZQorCXRoZW4KKwkJZWNobyB0cnVlCisJZWxzZQorCQllY2hvIGZhbHNlCisJZmkKK30KKworCisjIEVudHJ5IHBvaW50IGZvciBydW5uaW5nIHRvb2xzCitydW5fbWVyZ2VfdG9vbCAoKSB7CisJIyBJZiBHSVRfUFJFRklYIGlzIGVtcHR5IHRoZW4gd2UgY2Fubm90IHVzZSBpdCBpbiB0b29scworCSMgdGhhdCBleHBlY3QgdG8gYmUgYWJsZSB0byBjaGRpcigpIHRvIGl0cyB2YWx1ZS4KKwlHSVRfUFJFRklYPSR7R0lUX1BSRUZJWDotLn0KKwlleHBvcnQgR0lUX1BSRUZJWAorCisJbWVyZ2VfdG9vbF9wYXRoPSQoZ2V0X21lcmdlX3Rvb2xfcGF0aCAiJDEiKSB8fCBleGl0CisJYmFzZV9wcmVzZW50PSIkMiIKKworCSMgQnJpbmcgdG9vbC1zcGVjaWZpYyBmdW5jdGlvbnMgaW50byBzY29wZQorCXNldHVwX3Rvb2wgIiQxIiB8fCByZXR1cm4gMQorCisJaWYgbWVyZ2VfbW9kZQorCXRoZW4KKwkJcnVuX21lcmdlX2NtZCAiJDEiCisJZWxzZQorCQlydW5fZGlmZl9jbWQgIiQxIgorCWZpCit9CisKKyMgUnVuIGEgZWl0aGVyIGEgY29uZmlndXJlZCBvciBidWlsdC1pbiBkaWZmIHRvb2wKK3J1bl9kaWZmX2NtZCAoKSB7CisJZGlmZl9jbWQgIiQxIgorfQorCisjIFJ1biBhIGVpdGhlciBhIGNvbmZpZ3VyZWQgb3IgYnVpbHQtaW4gbWVyZ2UgdG9vbAorcnVuX21lcmdlX2NtZCAoKSB7CisJbWVyZ2V0b29sX3RydXN0X2V4aXRfY29kZT0kKHRydXN0X2V4aXRfY29kZSAiJDEiKQorCWlmIHRlc3QgIiRtZXJnZXRvb2xfdHJ1c3RfZXhpdF9jb2RlIiA9ICJ0cnVlIgorCXRoZW4KKwkJbWVyZ2VfY21kICIkMSIKKwllbHNlCisJCXRvdWNoICIkQkFDS1VQIgorCQltZXJnZV9jbWQgIiQxIgorCQljaGVja191bmNoYW5nZWQKKwlmaQorfQorCitsaXN0X21lcmdlX3Rvb2xfY2FuZGlkYXRlcyAoKSB7CisJaWYgbWVyZ2VfbW9kZQorCXRoZW4KKwkJdG9vbHM9InRvcnRvaXNlbWVyZ2UiCisJZWxzZQorCQl0b29scz0ia29tcGFyZSIKKwlmaQorCWlmIHRlc3QgLW4gIiRESVNQTEFZIgorCXRoZW4KKwkJaWYgdGVzdCAtbiAiJEdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCIKKwkJdGhlbgorCQkJdG9vbHM9Im1lbGQgb3BlbmRpZmYga2RpZmYzIHRrZGlmZiB4eGRpZmYgJHRvb2xzIgorCQllbHNlCisJCQl0b29scz0ib3BlbmRpZmYga2RpZmYzIHRrZGlmZiB4eGRpZmYgbWVsZCAkdG9vbHMiCisJCWZpCisJCXRvb2xzPSIkdG9vbHMgZ3ZpbWRpZmYgZGlmZnVzZSBkaWZmbWVyZ2UgZWNtZXJnZSIKKwkJdG9vbHM9IiR0b29scyBwNG1lcmdlIGFyYXhpcyBiYyBjb2RlY29tcGFyZSIKKwkJdG9vbHM9IiR0b29scyBzbWVyZ2UiCisJZmkKKwljYXNlICIke1ZJU1VBTDotJEVESVRPUn0iIGluCisJKnZpbSopCisJCXRvb2xzPSIkdG9vbHMgdmltZGlmZiBlbWVyZ2UiCisJCTs7CisJKikKKwkJdG9vbHM9IiR0b29scyBlbWVyZ2UgdmltZGlmZiIKKwkJOzsKKwllc2FjCit9CisKK3Nob3dfdG9vbF9oZWxwICgpIHsKKwl0b29sX29wdD0iJ2dpdCAke1RPT0xfTU9ERX10b29sIC0tdG9vbD08dG9vbD4nIgorCisJdGFiPScJJworCUxGPScKKycKKwlhbnlfc2hvd249bm8KKworCWNtZF9uYW1lPSR7VE9PTF9NT0RFfXRvb2wKKwljb25maWdfdG9vbHM9JCh7CisJCWRpZmZfbW9kZSAmJiBsaXN0X2NvbmZpZ190b29scyBkaWZmdG9vbCAiJHRhYiR0YWIiCisJCWxpc3RfY29uZmlnX3Rvb2xzIG1lcmdldG9vbCAiJHRhYiR0YWIiCisJfSB8IHNvcnQpCisJZXh0cmFfY29udGVudD0KKwlpZiB0ZXN0IC1uICIkY29uZmlnX3Rvb2xzIgorCXRoZW4KKwkJZXh0cmFfY29udGVudD0iJHt0YWJ9dXNlci1kZWZpbmVkOiR7TEZ9JGNvbmZpZ190b29scyIKKwlmaQorCisJc2hvd190b29sX25hbWVzICdtb2RlX29rICYmIGlzX2F2YWlsYWJsZScgIiR0YWIkdGFiIiBcCisJCSIkdG9vbF9vcHQgbWF5IGJlIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzoiIFwKKwkJIk5vIHN1aXRhYmxlIHRvb2wgZm9yICdnaXQgJGNtZF9uYW1lIC0tdG9vbD08dG9vbD4nIGZvdW5kLiIgXAorCQkiJGV4dHJhX2NvbnRlbnQiICYmCisJCWFueV9zaG93bj15ZXMKKworCXNob3dfdG9vbF9uYW1lcyAnbW9kZV9vayAmJiAhIGlzX2F2YWlsYWJsZScgIiR0YWIkdGFiIiBcCisJCSIke0xGfVRoZSBmb2xsb3dpbmcgdG9vbHMgYXJlIHZhbGlkLCBidXQgbm90IGN1cnJlbnRseSBhdmFpbGFibGU6IiAmJgorCQlhbnlfc2hvd249eWVzCisKKwlpZiB0ZXN0ICIkYW55X3Nob3duIiA9IHllcworCXRoZW4KKwkJZWNobworCQllY2hvICJTb21lIG9mIHRoZSB0b29scyBsaXN0ZWQgYWJvdmUgb25seSB3b3JrIGluIGEgd2luZG93ZWQiCisJCWVjaG8gImVudmlyb25tZW50LiBJZiBydW4gaW4gYSB0ZXJtaW5hbC1vbmx5IHNlc3Npb24sIHRoZXkgd2lsbCBmYWlsLiIKKwlmaQorCWV4aXQgMAorfQorCitndWVzc19tZXJnZV90b29sICgpIHsKKwlsaXN0X21lcmdlX3Rvb2xfY2FuZGlkYXRlcworCWNhdCA+JjIgPDwtRU9GCisKKwlUaGlzIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGJlY2F1c2UgJyRUT09MX01PREUudG9vbCcgaXMgbm90IGNvbmZpZ3VyZWQuCisJU2VlICdnaXQgJHtUT09MX01PREV9dG9vbCAtLXRvb2wtaGVscCcgb3IgJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgZGV0YWlscy4KKwknZ2l0ICR7VE9PTF9NT0RFfXRvb2wnIHdpbGwgbm93IGF0dGVtcHQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRvb2xzOgorCSR0b29scworCUVPRgorCisJIyBMb29wIG92ZXIgZWFjaCBjYW5kaWRhdGUgYW5kIHN0b3Agd2hlbiBhIHZhbGlkIG1lcmdlIHRvb2wgaXMgZm91bmQuCisJSUZTPScgJworCWZvciB0b29sIGluICR0b29scworCWRvCisJCWlzX2F2YWlsYWJsZSAiJHRvb2wiICYmIGVjaG8gIiR0b29sIiAmJiByZXR1cm4gMAorCWRvbmUKKworCWVjaG8gPiYyICJObyBrbm93biAke1RPT0xfTU9ERX0gdG9vbCBpcyBhdmFpbGFibGUuIgorCXJldHVybiAxCit9CisKK2dldF9jb25maWd1cmVkX21lcmdlX3Rvb2wgKCkgeworCWtleXM9CisJaWYgZGlmZl9tb2RlCisJdGhlbgorCQlpZiBndWlfbW9kZQorCQl0aGVuCisJCQlrZXlzPSJkaWZmLmd1aXRvb2wgbWVyZ2UuZ3VpdG9vbCBkaWZmLnRvb2wgbWVyZ2UudG9vbCIKKwkJZWxzZQorCQkJa2V5cz0iZGlmZi50b29sIG1lcmdlLnRvb2wiCisJCWZpCisJZWxzZQorCQlpZiBndWlfbW9kZQorCQl0aGVuCisJCQlrZXlzPSJtZXJnZS5ndWl0b29sIG1lcmdlLnRvb2wiCisJCWVsc2UKKwkJCWtleXM9Im1lcmdlLnRvb2wiCisJCWZpCisJZmkKKworCW1lcmdlX3Rvb2w9JCgKKwkJSUZTPScgJworCQlmb3Iga2V5IGluICRrZXlzCisJCWRvCisJCQlzZWxlY3RlZD0kKGdpdCBjb25maWcgJGtleSkKKwkJCWlmIHRlc3QgLW4gIiRzZWxlY3RlZCIKKwkJCXRoZW4KKwkJCQllY2hvICIkc2VsZWN0ZWQiCisJCQkJcmV0dXJuCisJCQlmaQorCQlkb25lKQorCisJaWYgdGVzdCAtbiAiJG1lcmdlX3Rvb2wiICYmICEgdmFsaWRfdG9vbCAiJG1lcmdlX3Rvb2wiCisJdGhlbgorCQllY2hvID4mMiAiZ2l0IGNvbmZpZyBvcHRpb24gJFRPT0xfTU9ERS4ke2d1aV9wcmVmaXh9dG9vbCBzZXQgdG8gdW5rbm93biB0b29sOiAkbWVyZ2VfdG9vbCIKKwkJZWNobyA+JjIgIlJlc2V0dGluZyB0byBkZWZhdWx0Li4uIgorCQlyZXR1cm4gMQorCWZpCisJZWNobyAiJG1lcmdlX3Rvb2wiCit9CisKK2dldF9tZXJnZV90b29sX3BhdGggKCkgeworCSMgQSBtZXJnZSB0b29sIGhhcyBiZWVuIHNldCwgc28gdmVyaWZ5IHRoYXQgaXQncyB2YWxpZC4KKwltZXJnZV90b29sPSIkMSIKKwlpZiAhIHZhbGlkX3Rvb2wgIiRtZXJnZV90b29sIgorCXRoZW4KKwkJZWNobyA+JjIgIlVua25vd24gbWVyZ2UgdG9vbCAkbWVyZ2VfdG9vbCIKKwkJZXhpdCAxCisJZmkKKwlpZiBkaWZmX21vZGUKKwl0aGVuCisJCW1lcmdlX3Rvb2xfcGF0aD0kKGdpdCBjb25maWcgZGlmZnRvb2wuIiRtZXJnZV90b29sIi5wYXRoIHx8CisJCQkJICBnaXQgY29uZmlnIG1lcmdldG9vbC4iJG1lcmdlX3Rvb2wiLnBhdGgpCisJZWxzZQorCQltZXJnZV90b29sX3BhdGg9JChnaXQgY29uZmlnIG1lcmdldG9vbC4iJG1lcmdlX3Rvb2wiLnBhdGgpCisJZmkKKwlpZiB0ZXN0IC16ICIkbWVyZ2VfdG9vbF9wYXRoIgorCXRoZW4KKwkJbWVyZ2VfdG9vbF9wYXRoPSQodHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCAiJG1lcmdlX3Rvb2wiKQorCWZpCisJaWYgdGVzdCAteiAiJChnZXRfbWVyZ2VfdG9vbF9jbWQgIiRtZXJnZV90b29sIikiICYmCisJCSEgdHlwZSAiJG1lcmdlX3Rvb2xfcGF0aCIgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQllY2hvID4mMiAiVGhlICRUT09MX01PREUgdG9vbCAkbWVyZ2VfdG9vbCBpcyBub3QgYXZhaWxhYmxlIGFzIlwKKwkJCSAiJyRtZXJnZV90b29sX3BhdGgnIgorCQlleGl0IDEKKwlmaQorCWVjaG8gIiRtZXJnZV90b29sX3BhdGgiCit9CisKK2dldF9tZXJnZV90b29sICgpIHsKKwlpc19ndWVzc2VkPWZhbHNlCisJIyBDaGVjayBpZiBhIG1lcmdlIHRvb2wgaGFzIGJlZW4gY29uZmlndXJlZAorCW1lcmdlX3Rvb2w9JChnZXRfY29uZmlndXJlZF9tZXJnZV90b29sKQorCSMgVHJ5IHRvIGd1ZXNzIGFuIGFwcHJvcHJpYXRlIG1lcmdlIHRvb2wgaWYgbm8gdG9vbCBoYXMgYmVlbiBzZXQuCisJaWYgdGVzdCAteiAiJG1lcmdlX3Rvb2wiCisJdGhlbgorCQltZXJnZV90b29sPSQoZ3Vlc3NfbWVyZ2VfdG9vbCkgfHwgZXhpdAorCQlpc19ndWVzc2VkPXRydWUKKwlmaQorCWVjaG8gIiRtZXJnZV90b29sIgorCXRlc3QgIiRpc19ndWVzc2VkIiA9IGZhbHNlCit9CisKK21lcmdldG9vbF9maW5kX3dpbjMyX2NtZCAoKSB7CisJZXhlY3V0YWJsZT0kMQorCXN1Yl9kaXJlY3Rvcnk9JDIKKworCSMgVXNlICRleGVjdXRhYmxlIGlmIGl0IGV4aXN0cyBpbiAkUEFUSAorCWlmIHR5cGUgLXAgIiRleGVjdXRhYmxlIiA+L2Rldi9udWxsIDI+JjEKKwl0aGVuCisJCXByaW50ZiAnJXMnICIkZXhlY3V0YWJsZSIKKwkJcmV0dXJuCisJZmkKKworCSMgTG9vayBmb3IgZXhlY3V0YWJsZSBpbiB0aGUgdHlwaWNhbCBsb2NhdGlvbnMKKwlmb3IgZGlyZWN0b3J5IGluICQoZW52IHwgZ3JlcCAtRWkgJ15QUk9HUkFNKEZJTEVTKFwoWDg2XCkpP3xXNjQzMik9JyB8CisJCWN1dCAtZCAnPScgLWYgMi0gfCBzb3J0IC11KQorCWRvCisJCWlmIHRlc3QgLW4gIiRkaXJlY3RvcnkiICYmIHRlc3QgLXggIiRkaXJlY3RvcnkvJHN1Yl9kaXJlY3RvcnkvJGV4ZWN1dGFibGUiCisJCXRoZW4KKwkJCXByaW50ZiAnJXMnICIkZGlyZWN0b3J5LyRzdWJfZGlyZWN0b3J5LyRleGVjdXRhYmxlIgorCQkJcmV0dXJuCisJCWZpCisJZG9uZQorCisJcHJpbnRmICclcycgIiRleGVjdXRhYmxlIgorfQpkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdldG9vbC5zaCBiL2dpdC1tZXJnZXRvb2wuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTNmNmQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1tZXJnZXRvb2wuc2gKQEAgLTAsMCArMSw1MjkgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIHByb2dyYW0gcmVzb2x2ZXMgbWVyZ2UgY29uZmxpY3RzIGluIGdpdAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlb2RvcmUgWS4gVHMnbworIyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxNiBEYXZpZCBBZ3VpbGFyCisjCisjIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KKyMgYXQgdGhlIGRpc2NyZXRpb24gb2YgSnVuaW8gQyBIYW1hbm8uCisjCisKK1VTQUdFPSdbLS10b29sPXRvb2xdIFstLXRvb2wtaGVscF0gWy15fC0tbm8tcHJvbXB0fC0tcHJvbXB0XSBbLWd8LS1ndWl8LS1uby1ndWldIFstTzxvcmRlcmZpbGU+XSBbZmlsZSB0byBtZXJnZV0gLi4uJworU1VCRElSRUNUT1JZX09LPVllcworTk9OR0lUX09LPVllcworT1BUSU9OU19TUEVDPQorVE9PTF9NT0RFPW1lcmdlCisuIGdpdC1zaC1zZXR1cAorLiBnaXQtbWVyZ2V0b29sLS1saWIKKworIyBSZXR1cm5zIHRydWUgaWYgdGhlIG1vZGUgcmVmbGVjdHMgYSBzeW1saW5rCitpc19zeW1saW5rICgpIHsKKwl0ZXN0ICIkMSIgPSAxMjAwMDAKK30KKworaXNfc3VibW9kdWxlICgpIHsKKwl0ZXN0ICIkMSIgPSAxNjAwMDAKK30KKworbG9jYWxfcHJlc2VudCAoKSB7CisJdGVzdCAtbiAiJGxvY2FsX21vZGUiCit9CisKK3JlbW90ZV9wcmVzZW50ICgpIHsKKwl0ZXN0IC1uICIkcmVtb3RlX21vZGUiCit9CisKK2Jhc2VfcHJlc2VudCAoKSB7CisJdGVzdCAtbiAiJGJhc2VfbW9kZSIKK30KKworbWVyZ2V0b29sX3RtcGRpcl9pbml0ICgpIHsKKwlpZiB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIG1lcmdldG9vbC53cml0ZVRvVGVtcCkiICE9IHRydWUKKwl0aGVuCisJCU1FUkdFVE9PTF9UTVBESVI9LgorCQlyZXR1cm4gMAorCWZpCisJaWYgTUVSR0VUT09MX1RNUERJUj0kKG1rdGVtcCAtZCAtdCAiZ2l0LW1lcmdldG9vbC1YWFhYWFgiIDI+L2Rldi9udWxsKQorCXRoZW4KKwkJcmV0dXJuIDAKKwlmaQorCWRpZSAiZXJyb3I6IG1rdGVtcCBpcyBuZWVkZWQgd2hlbiAnbWVyZ2V0b29sLndyaXRlVG9UZW1wJyBpcyB0cnVlIgorfQorCitjbGVhbnVwX3RlbXBfZmlsZXMgKCkgeworCWlmIHRlc3QgIiQxIiA9IC0tc2F2ZS1iYWNrdXAKKwl0aGVuCisJCXJtIC1yZiAtLSAiJE1FUkdFRC5vcmlnIgorCQl0ZXN0IC1lICIkQkFDS1VQIiAmJiBtdiAtLSAiJEJBQ0tVUCIgIiRNRVJHRUQub3JpZyIKKwkJcm0gLWYgLS0gIiRMT0NBTCIgIiRSRU1PVEUiICIkQkFTRSIKKwllbHNlCisJCXJtIC1mIC0tICIkTE9DQUwiICIkUkVNT1RFIiAiJEJBU0UiICIkQkFDS1VQIgorCWZpCisJaWYgdGVzdCAiJE1FUkdFVE9PTF9UTVBESVIiICE9ICIuIgorCXRoZW4KKwkJcm1kaXIgIiRNRVJHRVRPT0xfVE1QRElSIgorCWZpCit9CisKK2Rlc2NyaWJlX2ZpbGUgKCkgeworCW1vZGU9IiQxIgorCWJyYW5jaD0iJDIiCisJZmlsZT0iJDMiCisKKwlwcmludGYgIiAgeyVzfTogIiAiJGJyYW5jaCIKKwlpZiB0ZXN0IC16ICIkbW9kZSIKKwl0aGVuCisJCWVjaG8gImRlbGV0ZWQiCisJZWxpZiBpc19zeW1saW5rICIkbW9kZSIKKwl0aGVuCisJCWVjaG8gImEgc3ltYm9saWMgbGluayAtPiAnJChjYXQgIiRmaWxlIiknIgorCWVsaWYgaXNfc3VibW9kdWxlICIkbW9kZSIKKwl0aGVuCisJCWVjaG8gInN1Ym1vZHVsZSBjb21taXQgJGZpbGUiCisJZWxpZiBiYXNlX3ByZXNlbnQKKwl0aGVuCisJCWVjaG8gIm1vZGlmaWVkIGZpbGUiCisJZWxzZQorCQllY2hvICJjcmVhdGVkIGZpbGUiCisJZmkKK30KKworcmVzb2x2ZV9zeW1saW5rX21lcmdlICgpIHsKKwl3aGlsZSB0cnVlCisJZG8KKwkJcHJpbnRmICJVc2UgKGwpb2NhbCBvciAocillbW90ZSwgb3IgKGEpYm9ydD8gIgorCQlyZWFkIGFucyB8fCByZXR1cm4gMQorCQljYXNlICIkYW5zIiBpbgorCQlbbExdKikKKwkJCWdpdCBjaGVja291dC1pbmRleCAtZiAtLXN0YWdlPTIgLS0gIiRNRVJHRUQiCisJCQlnaXQgYWRkIC0tICIkTUVSR0VEIgorCQkJY2xlYW51cF90ZW1wX2ZpbGVzIC0tc2F2ZS1iYWNrdXAKKwkJCXJldHVybiAwCisJCQk7OworCQlbclJdKikKKwkJCWdpdCBjaGVja291dC1pbmRleCAtZiAtLXN0YWdlPTMgLS0gIiRNRVJHRUQiCisJCQlnaXQgYWRkIC0tICIkTUVSR0VEIgorCQkJY2xlYW51cF90ZW1wX2ZpbGVzIC0tc2F2ZS1iYWNrdXAKKwkJCXJldHVybiAwCisJCQk7OworCQlbYUFdKikKKwkJCXJldHVybiAxCisJCQk7OworCQllc2FjCisJZG9uZQorfQorCityZXNvbHZlX2RlbGV0ZWRfbWVyZ2UgKCkgeworCXdoaWxlIHRydWUKKwlkbworCQlpZiBiYXNlX3ByZXNlbnQKKwkJdGhlbgorCQkJcHJpbnRmICJVc2UgKG0pb2RpZmllZCBvciAoZCllbGV0ZWQgZmlsZSwgb3IgKGEpYm9ydD8gIgorCQllbHNlCisJCQlwcmludGYgIlVzZSAoYylyZWF0ZWQgb3IgKGQpZWxldGVkIGZpbGUsIG9yIChhKWJvcnQ/ICIKKwkJZmkKKwkJcmVhZCBhbnMgfHwgcmV0dXJuIDEKKwkJY2FzZSAiJGFucyIgaW4KKwkJW21NY0NdKikKKwkJCWdpdCBhZGQgLS0gIiRNRVJHRUQiCisJCQlpZiB0ZXN0ICIkbWVyZ2Vfa2VlcF9iYWNrdXAiID0gInRydWUiCisJCQl0aGVuCisJCQkJY2xlYW51cF90ZW1wX2ZpbGVzIC0tc2F2ZS1iYWNrdXAKKwkJCWVsc2UKKwkJCQljbGVhbnVwX3RlbXBfZmlsZXMKKwkJCWZpCisJCQlyZXR1cm4gMAorCQkJOzsKKwkJW2REXSopCisJCQlnaXQgcm0gLS0gIiRNRVJHRUQiID4gL2Rldi9udWxsCisJCQljbGVhbnVwX3RlbXBfZmlsZXMKKwkJCXJldHVybiAwCisJCQk7OworCQlbYUFdKikKKwkJCWlmIHRlc3QgIiRtZXJnZV9rZWVwX3RlbXBvcmFyaWVzIiA9ICJmYWxzZSIKKwkJCXRoZW4KKwkJCQljbGVhbnVwX3RlbXBfZmlsZXMKKwkJCWZpCisJCQlyZXR1cm4gMQorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKworcmVzb2x2ZV9zdWJtb2R1bGVfbWVyZ2UgKCkgeworCXdoaWxlIHRydWUKKwlkbworCQlwcmludGYgIlVzZSAobClvY2FsIG9yIChyKWVtb3RlLCBvciAoYSlib3J0PyAiCisJCXJlYWQgYW5zIHx8IHJldHVybiAxCisJCWNhc2UgIiRhbnMiIGluCisJCVtsTF0qKQorCQkJaWYgISBsb2NhbF9wcmVzZW50CisJCQl0aGVuCisJCQkJaWYgdGVzdCAtbiAiJChnaXQgbHMtdHJlZSBIRUFEIC0tICIkTUVSR0VEIikiCisJCQkJdGhlbgorCQkJCQkjIExvY2FsIGlzbid0IHByZXNlbnQsIGJ1dCBpdCdzIGEgc3ViZGlyZWN0b3J5CisJCQkJCWdpdCBscy10cmVlIC0tZnVsbC1uYW1lIC1yIEhFQUQgLS0gIiRNRVJHRUQiIHwKKwkJCQkJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gfHwgZXhpdCAkPworCQkJCWVsc2UKKwkJCQkJdGVzdCAtZSAiJE1FUkdFRCIgJiYgbXYgLS0gIiRNRVJHRUQiICIkQkFDS1VQIgorCQkJCQlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlICIkTUVSR0VEIgorCQkJCQljbGVhbnVwX3RlbXBfZmlsZXMgLS1zYXZlLWJhY2t1cAorCQkJCWZpCisJCQllbGlmIGlzX3N1Ym1vZHVsZSAiJGxvY2FsX21vZGUiCisJCQl0aGVuCisJCQkJc3RhZ2Vfc3VibW9kdWxlICIkTUVSR0VEIiAiJGxvY2FsX3NoYTEiCisJCQllbHNlCisJCQkJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC0tc3RhZ2U9MiAtLSAiJE1FUkdFRCIKKwkJCQlnaXQgYWRkIC0tICIkTUVSR0VEIgorCQkJZmkKKwkJCXJldHVybiAwCisJCQk7OworCQlbclJdKikKKwkJCWlmICEgcmVtb3RlX3ByZXNlbnQKKwkJCXRoZW4KKwkJCQlpZiB0ZXN0IC1uICIkKGdpdCBscy10cmVlIE1FUkdFX0hFQUQgLS0gIiRNRVJHRUQiKSIKKwkJCQl0aGVuCisJCQkJCSMgUmVtb3RlIGlzbid0IHByZXNlbnQsIGJ1dCBpdCdzIGEgc3ViZGlyZWN0b3J5CisJCQkJCWdpdCBscy10cmVlIC0tZnVsbC1uYW1lIC1yIE1FUkdFX0hFQUQgLS0gIiRNRVJHRUQiIHwKKwkJCQkJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gfHwgZXhpdCAkPworCQkJCWVsc2UKKwkJCQkJdGVzdCAtZSAiJE1FUkdFRCIgJiYgbXYgLS0gIiRNRVJHRUQiICIkQkFDS1VQIgorCQkJCQlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlICIkTUVSR0VEIgorCQkJCWZpCisJCQllbGlmIGlzX3N1Ym1vZHVsZSAiJHJlbW90ZV9tb2RlIgorCQkJdGhlbgorCQkJCSEgaXNfc3VibW9kdWxlICIkbG9jYWxfbW9kZSIgJiYKKwkJCQl0ZXN0IC1lICIkTUVSR0VEIiAmJgorCQkJCW12IC0tICIkTUVSR0VEIiAiJEJBQ0tVUCIKKwkJCQlzdGFnZV9zdWJtb2R1bGUgIiRNRVJHRUQiICIkcmVtb3RlX3NoYTEiCisJCQllbHNlCisJCQkJdGVzdCAtZSAiJE1FUkdFRCIgJiYgbXYgLS0gIiRNRVJHRUQiICIkQkFDS1VQIgorCQkJCWdpdCBjaGVja291dC1pbmRleCAtZiAtLXN0YWdlPTMgLS0gIiRNRVJHRUQiCisJCQkJZ2l0IGFkZCAtLSAiJE1FUkdFRCIKKwkJCWZpCisJCQljbGVhbnVwX3RlbXBfZmlsZXMgLS1zYXZlLWJhY2t1cAorCQkJcmV0dXJuIDAKKwkJCTs7CisJCVthQV0qKQorCQkJcmV0dXJuIDEKKwkJCTs7CisJCWVzYWMKKwlkb25lCit9CisKK3N0YWdlX3N1Ym1vZHVsZSAoKSB7CisJcGF0aD0iJDEiCisJc3VibW9kdWxlX3NoYTE9IiQyIgorCW1rZGlyIC1wICIkcGF0aCIgfHwKKwlkaWUgImZhdGFsOiB1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGF0ICRwYXRoIgorCSMgRmluZCAkcGF0aCByZWxhdGl2ZSB0byB3b3JrIHRyZWUKKwl3b3JrX3RyZWVfcm9vdD0kKGNkX3RvX3RvcGxldmVsICYmIHB3ZCkKKwl3b3JrX3JlbF9wYXRoPSQoY2QgIiRwYXRoIiAmJgorCQlHSVRfV09SS19UUkVFPSIke3dvcmtfdHJlZV9yb290fSIgZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4CisJKQorCXRlc3QgLW4gIiR3b3JrX3JlbF9wYXRoIiB8fAorCWRpZSAiZmF0YWw6IHVuYWJsZSB0byBnZXQgcGF0aCBvZiBtb2R1bGUgJHBhdGggcmVsYXRpdmUgdG8gd29yayB0cmVlIgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZXBsYWNlIC0tY2FjaGVpbmZvIDE2MDAwMCAiJHN1Ym1vZHVsZV9zaGExIiAiJHt3b3JrX3JlbF9wYXRoJS99IiB8fCBkaWUKK30KKworY2hlY2tvdXRfc3RhZ2VkX2ZpbGUgKCkgeworCXRtcGZpbGU9IiQoZ2l0IGNoZWNrb3V0LWluZGV4IC0tdGVtcCAtLXN0YWdlPSIkMSIgIiQyIiAyPi9kZXYvbnVsbCkiICYmCisJdG1wZmlsZT0ke3RtcGZpbGUlJScJJyp9CisKKwlpZiB0ZXN0ICQ/IC1lcSAwICYmIHRlc3QgLW4gIiR0bXBmaWxlIgorCXRoZW4KKwkJbXYgLS0gIiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctY2R1cCkkdG1wZmlsZSIgIiQzIgorCWVsc2UKKwkJPiIkMyIKKwlmaQorfQorCittZXJnZV9maWxlICgpIHsKKwlNRVJHRUQ9IiQxIgorCisJZj0kKGdpdCBscy1maWxlcyAtdSAtLSAiJE1FUkdFRCIpCisJaWYgdGVzdCAteiAiJGYiCisJdGhlbgorCQlpZiB0ZXN0ICEgLWYgIiRNRVJHRUQiCisJCXRoZW4KKwkJCWVjaG8gIiRNRVJHRUQ6IGZpbGUgbm90IGZvdW5kIgorCQllbHNlCisJCQllY2hvICIkTUVSR0VEOiBmaWxlIGRvZXMgbm90IG5lZWQgbWVyZ2luZyIKKwkJZmkKKwkJcmV0dXJuIDEKKwlmaQorCisJIyBleHRyYWN0IGZpbGUgZXh0ZW5zaW9uIGZyb20gdGhlIGxhc3QgcGF0aCBjb21wb25lbnQKKwljYXNlICIke01FUkdFRCMjKi99IiBpbgorCSouKikKKwkJZXh0PS4ke01FUkdFRCMjKi59CisJCUJBU0U9JHtNRVJHRUQlIiRleHQifQorCQk7OworCSopCisJCUJBU0U9JE1FUkdFRAorCQlleHQ9CisJZXNhYworCisJbWVyZ2V0b29sX3RtcGRpcl9pbml0CisKKwlpZiB0ZXN0ICIkTUVSR0VUT09MX1RNUERJUiIgIT0gIi4iCisJdGhlbgorCQkjIElmIHdlJ3JlIHVzaW5nIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGVuIHdyaXRlIHRvIHRoZQorCQkjIHRvcC1sZXZlbCBvZiB0aGF0IGRpcmVjdG9yeS4KKwkJQkFTRT0ke0JBU0UjIyovfQorCWZpCisKKwlCQUNLVVA9IiRNRVJHRVRPT0xfVE1QRElSLyR7QkFTRX1fQkFDS1VQXyQkJGV4dCIKKwlMT0NBTD0iJE1FUkdFVE9PTF9UTVBESVIvJHtCQVNFfV9MT0NBTF8kJCRleHQiCisJUkVNT1RFPSIkTUVSR0VUT09MX1RNUERJUi8ke0JBU0V9X1JFTU9URV8kJCRleHQiCisJQkFTRT0iJE1FUkdFVE9PTF9UTVBESVIvJHtCQVNFfV9CQVNFXyQkJGV4dCIKKworCWJhc2VfbW9kZT0gbG9jYWxfbW9kZT0gcmVtb3RlX21vZGU9CisKKwkjIGhlcmUsICRJRlMgaXMganVzdCBhIExGCisJZm9yIGxpbmUgaW4gJGYKKwlkbworCQltb2RlPSR7bGluZSUlICp9CQkjIDFzdCB3b3JkCisJCXNoYTE9JHtsaW5lIyIkbW9kZSAifQorCQlzaGExPSR7c2hhMSUlICp9CQkjIDJuZCB3b3JkCisJCWNhc2UgIiR7bGluZSMkbW9kZSAkc2hhMSB9IiBpbgkjIHJlbWFpbmRlcgorCQknMQknKikKKwkJCWJhc2VfbW9kZT0kbW9kZQorCQkJOzsKKwkJJzIJJyopCisJCQlsb2NhbF9tb2RlPSRtb2RlIGxvY2FsX3NoYTE9JHNoYTEKKwkJCTs7CisJCSczCScqKQorCQkJcmVtb3RlX21vZGU9JG1vZGUgcmVtb3RlX3NoYTE9JHNoYTEKKwkJCTs7CisJCWVzYWMKKwlkb25lCisKKwlpZiBpc19zdWJtb2R1bGUgIiRsb2NhbF9tb2RlIiB8fCBpc19zdWJtb2R1bGUgIiRyZW1vdGVfbW9kZSIKKwl0aGVuCisJCWVjaG8gIlN1Ym1vZHVsZSBtZXJnZSBjb25mbGljdCBmb3IgJyRNRVJHRUQnOiIKKwkJZGVzY3JpYmVfZmlsZSAiJGxvY2FsX21vZGUiICJsb2NhbCIgIiRsb2NhbF9zaGExIgorCQlkZXNjcmliZV9maWxlICIkcmVtb3RlX21vZGUiICJyZW1vdGUiICIkcmVtb3RlX3NoYTEiCisJCXJlc29sdmVfc3VibW9kdWxlX21lcmdlCisJCXJldHVybgorCWZpCisKKwlpZiB0ZXN0IC1mICIkTUVSR0VEIgorCXRoZW4KKwkJbXYgLS0gIiRNRVJHRUQiICIkQkFDS1VQIgorCQljcCAtLSAiJEJBQ0tVUCIgIiRNRVJHRUQiCisJZmkKKwkjIENyZWF0ZSBhIHBhcmVudCBkaXJlY3RvcnkgdG8gaGFuZGxlIGRlbGV0ZS9kZWxldGUgY29uZmxpY3RzCisJIyB3aGVyZSB0aGUgYmFzZSdzIGRpcmVjdG9yeSBubyBsb25nZXIgZXhpc3RzLgorCW1rZGlyIC1wICIkKGRpcm5hbWUgIiRNRVJHRUQiKSIKKworCWNoZWNrb3V0X3N0YWdlZF9maWxlIDEgIiRNRVJHRUQiICIkQkFTRSIKKwljaGVja291dF9zdGFnZWRfZmlsZSAyICIkTUVSR0VEIiAiJExPQ0FMIgorCWNoZWNrb3V0X3N0YWdlZF9maWxlIDMgIiRNRVJHRUQiICIkUkVNT1RFIgorCisJaWYgdGVzdCAteiAiJGxvY2FsX21vZGUiIHx8IHRlc3QgLXogIiRyZW1vdGVfbW9kZSIKKwl0aGVuCisJCWVjaG8gIkRlbGV0ZWQgbWVyZ2UgY29uZmxpY3QgZm9yICckTUVSR0VEJzoiCisJCWRlc2NyaWJlX2ZpbGUgIiRsb2NhbF9tb2RlIiAibG9jYWwiICIkTE9DQUwiCisJCWRlc2NyaWJlX2ZpbGUgIiRyZW1vdGVfbW9kZSIgInJlbW90ZSIgIiRSRU1PVEUiCisJCXJlc29sdmVfZGVsZXRlZF9tZXJnZQorCQlzdGF0dXM9JD8KKwkJcm1kaXIgLXAgIiQoZGlybmFtZSAiJE1FUkdFRCIpIiAyPi9kZXYvbnVsbAorCQlyZXR1cm4gJHN0YXR1cworCWZpCisKKwlpZiBpc19zeW1saW5rICIkbG9jYWxfbW9kZSIgfHwgaXNfc3ltbGluayAiJHJlbW90ZV9tb2RlIgorCXRoZW4KKwkJZWNobyAiU3ltYm9saWMgbGluayBtZXJnZSBjb25mbGljdCBmb3IgJyRNRVJHRUQnOiIKKwkJZGVzY3JpYmVfZmlsZSAiJGxvY2FsX21vZGUiICJsb2NhbCIgIiRMT0NBTCIKKwkJZGVzY3JpYmVfZmlsZSAiJHJlbW90ZV9tb2RlIiAicmVtb3RlIiAiJFJFTU9URSIKKwkJcmVzb2x2ZV9zeW1saW5rX21lcmdlCisJCXJldHVybgorCWZpCisKKwllY2hvICJOb3JtYWwgbWVyZ2UgY29uZmxpY3QgZm9yICckTUVSR0VEJzoiCisJZGVzY3JpYmVfZmlsZSAiJGxvY2FsX21vZGUiICJsb2NhbCIgIiRMT0NBTCIKKwlkZXNjcmliZV9maWxlICIkcmVtb3RlX21vZGUiICJyZW1vdGUiICIkUkVNT1RFIgorCWlmIHRlc3QgIiRndWVzc2VkX21lcmdlX3Rvb2wiID0gdHJ1ZSB8fCB0ZXN0ICIkcHJvbXB0IiA9IHRydWUKKwl0aGVuCisJCXByaW50ZiAiSGl0IHJldHVybiB0byBzdGFydCBtZXJnZSByZXNvbHV0aW9uIHRvb2wgKCVzKTogIiAiJG1lcmdlX3Rvb2wiCisJCXJlYWQgYW5zIHx8IHJldHVybiAxCisJZmkKKworCWlmIGJhc2VfcHJlc2VudAorCXRoZW4KKwkJcHJlc2VudD10cnVlCisJZWxzZQorCQlwcmVzZW50PWZhbHNlCisJZmkKKworCWlmICEgcnVuX21lcmdlX3Rvb2wgIiRtZXJnZV90b29sIiAiJHByZXNlbnQiCisJdGhlbgorCQllY2hvICJtZXJnZSBvZiAkTUVSR0VEIGZhaWxlZCIgMT4mMgorCQltdiAtLSAiJEJBQ0tVUCIgIiRNRVJHRUQiCisKKwkJaWYgdGVzdCAiJG1lcmdlX2tlZXBfdGVtcG9yYXJpZXMiID0gImZhbHNlIgorCQl0aGVuCisJCQljbGVhbnVwX3RlbXBfZmlsZXMKKwkJZmkKKworCQlyZXR1cm4gMQorCWZpCisKKwlpZiB0ZXN0ICIkbWVyZ2Vfa2VlcF9iYWNrdXAiID0gInRydWUiCisJdGhlbgorCQltdiAtLSAiJEJBQ0tVUCIgIiRNRVJHRUQub3JpZyIKKwllbHNlCisJCXJtIC0tICIkQkFDS1VQIgorCWZpCisKKwlnaXQgYWRkIC0tICIkTUVSR0VEIgorCWNsZWFudXBfdGVtcF9maWxlcworCXJldHVybiAwCit9CisKK3Byb21wdF9hZnRlcl9mYWlsZWRfbWVyZ2UgKCkgeworCXdoaWxlIHRydWUKKwlkbworCQlwcmludGYgIkNvbnRpbnVlIG1lcmdpbmcgb3RoZXIgdW5yZXNvbHZlZCBwYXRocyBbeS9uXT8gIgorCQlyZWFkIGFucyB8fCByZXR1cm4gMQorCQljYXNlICIkYW5zIiBpbgorCQlbeVldKikKKwkJCXJldHVybiAwCisJCQk7OworCQlbbk5dKikKKwkJCXJldHVybiAxCisJCQk7OworCQllc2FjCisJZG9uZQorfQorCitwcmludF9ub29wX2FuZF9leGl0ICgpIHsKKwllY2hvICJObyBmaWxlcyBuZWVkIG1lcmdpbmciCisJZXhpdCAwCit9CisKK21haW4gKCkgeworCXByb21wdD0kKGdpdCBjb25maWcgLS1ib29sIG1lcmdldG9vbC5wcm9tcHQpCisJR0lUX01FUkdFVE9PTF9HVUk9ZmFsc2UKKwlndWVzc2VkX21lcmdlX3Rvb2w9ZmFsc2UKKwlvcmRlcmZpbGU9CisKKwl3aGlsZSB0ZXN0ICQjICE9IDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLS10b29sLWhlbHA9KikKKwkJCVRPT0xfTU9ERT0kezEjLS10b29sLWhlbHA9fQorCQkJc2hvd190b29sX2hlbHAKKwkJCTs7CisJCS0tdG9vbC1oZWxwKQorCQkJc2hvd190b29sX2hlbHAKKwkJCTs7CisJCS10fC0tdG9vbCopCisJCQljYXNlICIkIywkMSIgaW4KKwkJCSosKj0qKQorCQkJCW1lcmdlX3Rvb2w9JHsxIyo9fQorCQkJCTs7CisJCQkxLCopCisJCQkJdXNhZ2UgOzsKKwkJCSopCisJCQkJbWVyZ2VfdG9vbD0iJDIiCisJCQkJc2hpZnQgOzsKKwkJCWVzYWMKKwkJCTs7CisJCS0tbm8tZ3VpKQorCQkJR0lUX01FUkdFVE9PTF9HVUk9ZmFsc2UKKwkJCTs7CisJCS1nfC0tZ3VpKQorCQkJR0lUX01FUkdFVE9PTF9HVUk9dHJ1ZQorCQkJOzsKKwkJLXl8LS1uby1wcm9tcHQpCisJCQlwcm9tcHQ9ZmFsc2UKKwkJCTs7CisJCS0tcHJvbXB0KQorCQkJcHJvbXB0PXRydWUKKwkJCTs7CisJCS1PKikKKwkJCW9yZGVyZmlsZT0iJHsxIy1PfSIKKwkJCTs7CisJCS0tKQorCQkJc2hpZnQKKwkJCWJyZWFrCisJCQk7OworCQktKikKKwkJCXVzYWdlCisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKKwlnaXRfZGlyX2luaXQKKwlyZXF1aXJlX3dvcmtfdHJlZQorCisJaWYgdGVzdCAteiAiJG1lcmdlX3Rvb2wiCisJdGhlbgorCQlpZiAhIG1lcmdlX3Rvb2w9JChnZXRfbWVyZ2VfdG9vbCkKKwkJdGhlbgorCQkJZ3Vlc3NlZF9tZXJnZV90b29sPXRydWUKKwkJZmkKKwlmaQorCW1lcmdlX2tlZXBfYmFja3VwPSIkKGdpdCBjb25maWcgLS1ib29sIG1lcmdldG9vbC5rZWVwQmFja3VwIHx8IGVjaG8gdHJ1ZSkiCisJbWVyZ2Vfa2VlcF90ZW1wb3Jhcmllcz0iJChnaXQgY29uZmlnIC0tYm9vbCBtZXJnZXRvb2wua2VlcFRlbXBvcmFyaWVzIHx8IGVjaG8gZmFsc2UpIgorCisJcHJlZml4PSQoZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4KSB8fCBleGl0IDEKKwljZF90b190b3BsZXZlbAorCisJaWYgdGVzdCAtbiAiJG9yZGVyZmlsZSIKKwl0aGVuCisJCW9yZGVyZmlsZT0kKAorCQkJZ2l0IHJldi1wYXJzZSAtLXByZWZpeCAiJHByZWZpeCIgLS0gIiRvcmRlcmZpbGUiIHwKKwkJCXNlZCAtZSAxZAorCQkpCisJZmkKKworCWlmIHRlc3QgJCMgLWVxIDAgJiYgdGVzdCAtZSAiJEdJVF9ESVIvTUVSR0VfUlIiCisJdGhlbgorCQlzZXQgLS0gJChnaXQgcmVyZXJlIHJlbWFpbmluZykKKwkJaWYgdGVzdCAkIyAtZXEgMAorCQl0aGVuCisJCQlwcmludF9ub29wX2FuZF9leGl0CisJCWZpCisJZWxpZiB0ZXN0ICQjIC1nZSAwCisJdGhlbgorCQkjIHJldi1wYXJzZSBwcm92aWRlcyB0aGUgLS0gbmVlZGVkIGZvciAnc2V0JworCQlldmFsICJzZXQgJChnaXQgcmV2LXBhcnNlIC0tc3EgLS1wcmVmaXggIiRwcmVmaXgiIC0tICIkQCIpIgorCWZpCisKKwlmaWxlcz0kKGdpdCAtYyBjb3JlLnF1b3RlUGF0aD1mYWxzZSBcCisJCWRpZmYgLS1uYW1lLW9ubHkgLS1kaWZmLWZpbHRlcj1VIFwKKwkJJHtvcmRlcmZpbGU6KyItTyRvcmRlcmZpbGUifSAtLSAiJEAiKQorCisJaWYgdGVzdCAteiAiJGZpbGVzIgorCXRoZW4KKwkJcHJpbnRfbm9vcF9hbmRfZXhpdAorCWZpCisKKwlwcmludGYgIk1lcmdpbmc6XG4iCisJcHJpbnRmICIlc1xuIiAiJGZpbGVzIgorCisJcmM9MAorCXNldCAtLSAkZmlsZXMKKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJcHJpbnRmICJcbiIKKwkJaWYgISBtZXJnZV9maWxlICIkMSIKKwkJdGhlbgorCQkJcmM9MQorCQkJdGVzdCAkIyAtbmUgMSAmJiBwcm9tcHRfYWZ0ZXJfZmFpbGVkX21lcmdlIHx8IGV4aXQgMQorCQlmaQorCQlzaGlmdAorCWRvbmUKKworCWV4aXQgJHJjCit9CisKK21haW4gIiRAIgpkaWZmIC0tZ2l0IGEvZ2l0LXA0LnB5IGIvZ2l0LXA0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1NTFlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcDQucHkKQEAgLTAsMCArMSw0NDM3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgZ2l0LXA0LnB5IC0tIEEgdG9vbCBmb3IgYmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFBlcmZvcmNlIGRlcG90IGFuZCBnaXQuCisjCisjIEF1dGhvcjogU2ltb24gSGF1c21hbm4gPHNpbW9uQGxzdC5kZT4KKyMgQ29weXJpZ2h0OiAyMDA3IFNpbW9uIEhhdXNtYW5uIDxzaW1vbkBsc3QuZGU+CisjICAgICAgICAgICAgMjAwNyBUcm9sbHRlY2ggQVNBCisjIExpY2Vuc2U6IE1JVCA8aHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHA+CisjCisjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUsbWlzc2luZy1kb2NzdHJpbmcsdG9vLW1hbnktYXJndW1lbnRzLGJyb2FkLWV4Y2VwdAorIyBweWxpbnQ6IGRpc2FibGU9bm8tc2VsZi11c2Usd3JvbmctaW1wb3J0LXBvc2l0aW9uLGNvbnNpZGVyLWl0ZXJhdGluZy1kaWN0aW9uYXJ5CisjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsdW51c2VkLWltcG9ydCx0b28tZmV3LXB1YmxpYy1tZXRob2RzCisjIHB5bGludDogZGlzYWJsZT10b28tbWFueS1saW5lcyx1bmdyb3VwZWQtaW1wb3J0cyxmaXhtZSx0b28tbWFueS1sb2NhbHMKKyMgcHlsaW50OiBkaXNhYmxlPWxpbmUtdG9vLWxvbmcsYmFkLXdoaXRlc3BhY2Usc3VwZXJmbHVvdXMtcGFyZW5zCisjIHB5bGludDogZGlzYWJsZT10b28tbWFueS1zdGF0ZW1lbnRzLHRvby1tYW55LWluc3RhbmNlLWF0dHJpYnV0ZXMKKyMgcHlsaW50OiBkaXNhYmxlPXRvby1tYW55LWJyYW5jaGVzLHRvby1tYW55LW5lc3RlZC1ibG9ja3MKKyMKK2ltcG9ydCBzeXMKK2lmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPCAzIGFuZCBzeXMudmVyc2lvbl9pbmZvLm1pbm9yIDwgNzoKKyAgICBzeXMuc3RkZXJyLndyaXRlKCJnaXQtcDQ6IHJlcXVpcmVzIFB5dGhvbiAyLjcgb3IgbGF0ZXIuXG4iKQorICAgIHN5cy5leGl0KDEpCitpbXBvcnQgb3MKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IG1hcnNoYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aW1lCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN0YXQKK2ltcG9ydCB6aXBmaWxlCitpbXBvcnQgemxpYgoraW1wb3J0IGN0eXBlcworaW1wb3J0IGVycm5vCitpbXBvcnQgZ2xvYgorCisjIE9uIHB5dGhvbjIuNyB3aGVyZSByYXdfaW5wdXQoKSBhbmQgaW5wdXQoKSBhcmUgYm90aCBhdmFpbGJsZSwKKyMgd2Ugd2FudCByYXdfaW5wdXQncyBzZW1hbnRpY3MsIGJ1dCBhbGlhc2VkIHRvIGlucHV0IGZvciBweXRob24zCisjIGNvbXBhdGliaWxpdHkKKyMgc3VwcG9ydCBiYXNlc3RyaW5nIGluIHB5dGhvbjMKK3RyeToKKyAgICBpZiByYXdfaW5wdXQgYW5kIGlucHV0OgorICAgICAgICBpbnB1dCA9IHJhd19pbnB1dAorZXhjZXB0OgorICAgIHBhc3MKKwordmVyYm9zZSA9IEZhbHNlCisKKyMgT25seSBsYWJlbHMvdGFncyBtYXRjaGluZyB0aGlzIHdpbGwgYmUgaW1wb3J0ZWQvZXhwb3J0ZWQKK2RlZmF1bHRMYWJlbFJlZ2V4cCA9IHInW2EtekEtWjAtOV9cLS5dKyQnCisKKyMgVGhlIGJsb2NrIHNpemUgaXMgcmVkdWNlZCBhdXRvbWF0aWNhbGx5IGlmIHJlcXVpcmVkCitkZWZhdWx0QmxvY2tTaXplID0gMTw8MjAKKworcDRfYWNjZXNzX2NoZWNrZWQgPSBGYWxzZQorCitkZWYgcDRfYnVpbGRfY21kKGNtZCk6CisgICAgIiIiQnVpbGQgYSBzdWl0YWJsZSBwNCBjb21tYW5kIGxpbmUuCisKKyAgICBUaGlzIGNvbnNvbGlkYXRlcyBidWlsZGluZyBhbmQgcmV0dXJuaW5nIGEgcDQgY29tbWFuZCBsaW5lIGludG8gb25lCisgICAgbG9jYXRpb24uIEl0IG1lYW5zIHRoYXQgaG9va2luZyBpbnRvIHRoZSBlbnZpcm9ubWVudCwgb3Igb3RoZXIgY29uZmlndXJhdGlvbgorICAgIGNhbiBiZSBkb25lIG1vcmUgZWFzaWx5LgorICAgICIiIgorICAgIHJlYWxfY21kID0gWyJwNCJdCisKKyAgICB1c2VyID0gZ2l0Q29uZmlnKCJnaXQtcDQudXNlciIpCisgICAgaWYgbGVuKHVzZXIpID4gMDoKKyAgICAgICAgcmVhbF9jbWQgKz0gWyItdSIsdXNlcl0KKworICAgIHBhc3N3b3JkID0gZ2l0Q29uZmlnKCJnaXQtcDQucGFzc3dvcmQiKQorICAgIGlmIGxlbihwYXNzd29yZCkgPiAwOgorICAgICAgICByZWFsX2NtZCArPSBbIi1QIiwgcGFzc3dvcmRdCisKKyAgICBwb3J0ID0gZ2l0Q29uZmlnKCJnaXQtcDQucG9ydCIpCisgICAgaWYgbGVuKHBvcnQpID4gMDoKKyAgICAgICAgcmVhbF9jbWQgKz0gWyItcCIsIHBvcnRdCisKKyAgICBob3N0ID0gZ2l0Q29uZmlnKCJnaXQtcDQuaG9zdCIpCisgICAgaWYgbGVuKGhvc3QpID4gMDoKKyAgICAgICAgcmVhbF9jbWQgKz0gWyItSCIsIGhvc3RdCisKKyAgICBjbGllbnQgPSBnaXRDb25maWcoImdpdC1wNC5jbGllbnQiKQorICAgIGlmIGxlbihjbGllbnQpID4gMDoKKyAgICAgICAgcmVhbF9jbWQgKz0gWyItYyIsIGNsaWVudF0KKworICAgIHJldHJpZXMgPSBnaXRDb25maWdJbnQoImdpdC1wNC5yZXRyaWVzIikKKyAgICBpZiByZXRyaWVzIGlzIE5vbmU6CisgICAgICAgICMgUGVyZm9ybSAzIHJldHJpZXMgYnkgZGVmYXVsdAorICAgICAgICByZXRyaWVzID0gMworICAgIGlmIHJldHJpZXMgPiAwOgorICAgICAgICAjIFByb3ZpZGUgYSB3YXkgdG8gbm90IHBhc3MgdGhpcyBvcHRpb24gYnkgc2V0dGluZyBnaXQtcDQucmV0cmllcyB0byAwCisgICAgICAgIHJlYWxfY21kICs9IFsiLXIiLCBzdHIocmV0cmllcyldCisKKyAgICBpZiBub3QgaXNpbnN0YW5jZShjbWQsIGxpc3QpOgorICAgICAgICByZWFsX2NtZCA9ICcgJy5qb2luKHJlYWxfY21kKSArICcgJyArIGNtZAorICAgIGVsc2U6CisgICAgICAgIHJlYWxfY21kICs9IGNtZAorCisgICAgIyBub3cgY2hlY2sgdGhhdCB3ZSBjYW4gYWN0dWFsbHkgdGFsayB0byB0aGUgc2VydmVyCisgICAgZ2xvYmFsIHA0X2FjY2Vzc19jaGVja2VkCisgICAgaWYgbm90IHA0X2FjY2Vzc19jaGVja2VkOgorICAgICAgICBwNF9hY2Nlc3NfY2hlY2tlZCA9IFRydWUgICAgIyBzdXBwcmVzcyBhY2Nlc3MgY2hlY2tzIGluIHA0X2NoZWNrX2FjY2VzcyBpdHNlbGYKKyAgICAgICAgcDRfY2hlY2tfYWNjZXNzKCkKKworICAgIHJldHVybiByZWFsX2NtZAorCitkZWYgZ2l0X2RpcihwYXRoKToKKyAgICAiIiIgUmV0dXJuIFRSVUUgaWYgdGhlIGdpdmVuIHBhdGggaXMgYSBnaXQgZGlyZWN0b3J5ICgvcGF0aC90by9kaXIvLmdpdCkuCisgICAgICAgIFRoaXMgd29uJ3QgYXV0b21hdGljYWxseSBhZGQgIi5naXQiIHRvIGEgZGlyZWN0b3J5LgorICAgICIiIgorICAgIGQgPSByZWFkX3BpcGUoWyJnaXQiLCAiLS1naXQtZGlyIiwgcGF0aCwgInJldi1wYXJzZSIsICItLWdpdC1kaXIiXSwgVHJ1ZSkuc3RyaXAoKQorICAgIGlmIG5vdCBkIG9yIGxlbihkKSA9PSAwOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBkCisKK2RlZiBjaGRpcihwYXRoLCBpc19jbGllbnRfcGF0aD1GYWxzZSk6CisgICAgIiIiRG8gY2hkaXIgdG8gdGhlIGdpdmVuIHBhdGgsIGFuZCBzZXQgdGhlIFBXRCBlbnZpcm9ubWVudAorICAgICAgIHZhcmlhYmxlIGZvciB1c2UgYnkgUDQuICBJdCBkb2VzIG5vdCBsb29rIGF0IGdldGN3ZCgpIG91dHB1dC4KKyAgICAgICBTaW5jZSB3ZSdyZSBub3QgdXNpbmcgdGhlIHNoZWxsLCBpdCBpcyBuZWNlc3NhcnkgdG8gc2V0IHRoZQorICAgICAgIFBXRCBlbnZpcm9ubWVudCB2YXJpYWJsZSBleHBsaWNpdGx5LgorCisgICAgICAgTm9ybWFsbHksIGV4cGFuZCB0aGUgcGF0aCB0byBmb3JjZSBpdCB0byBiZSBhYnNvbHV0ZS4gIFRoaXMKKyAgICAgICBhZGRyZXNzZXMgdGhlIHVzZSBvZiByZWxhdGl2ZSBwYXRoIG5hbWVzIGluc2lkZSBQNCBzZXR0aW5ncywKKyAgICAgICBlLmcuIFA0Q09ORklHPS5wNGNvbmZpZy4gIFA0IGRvZXMgbm90IHNpbXBseSBvcGVuIHRoZSBmaWxlbmFtZQorICAgICAgIGFzIGdpdmVuOyBpdCBsb29rcyBmb3IgLnA0Y29uZmlnIHVzaW5nIFBXRC4KKworICAgICAgIElmIGlzX2NsaWVudF9wYXRoLCB0aGUgcGF0aCB3YXMgaGFuZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHA0LAorICAgICAgIGFuZCBtYXkgYmUgYSBzeW1ib2xpYyBsaW5rLiAgRG8gbm90IGNhbGwgb3MuZ2V0Y3dkKCkgaW4gdGhpcworICAgICAgIGNhc2UsIGJlY2F1c2UgaXQgd2lsbCBjYXVzZSBwNCB0byB0aGluayB0aGF0IFBXRCBpcyBub3QgaW5zaWRlCisgICAgICAgdGhlIGNsaWVudCBwYXRoLgorICAgICAgICIiIgorCisgICAgb3MuY2hkaXIocGF0aCkKKyAgICBpZiBub3QgaXNfY2xpZW50X3BhdGg6CisgICAgICAgIHBhdGggPSBvcy5nZXRjd2QoKQorICAgIG9zLmVudmlyb25bJ1BXRCddID0gcGF0aAorCitkZWYgY2FsY0Rpc2tGcmVlKCk6CisgICAgIiIiUmV0dXJuIGZyZWUgc3BhY2UgaW4gYnl0ZXMgb24gdGhlIGRpc2sgb2YgdGhlIGdpdmVuIGRpcm5hbWUuIiIiCisgICAgaWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gJ1dpbmRvd3MnOgorICAgICAgICBmcmVlX2J5dGVzID0gY3R5cGVzLmNfdWxvbmdsb25nKDApCisgICAgICAgIGN0eXBlcy53aW5kbGwua2VybmVsMzIuR2V0RGlza0ZyZWVTcGFjZUV4VyhjdHlwZXMuY193Y2hhcl9wKG9zLmdldGN3ZCgpKSwgTm9uZSwgTm9uZSwgY3R5cGVzLnBvaW50ZXIoZnJlZV9ieXRlcykpCisgICAgICAgIHJldHVybiBmcmVlX2J5dGVzLnZhbHVlCisgICAgZWxzZToKKyAgICAgICAgc3QgPSBvcy5zdGF0dmZzKG9zLmdldGN3ZCgpKQorICAgICAgICByZXR1cm4gc3QuZl9iYXZhaWwgKiBzdC5mX2Zyc2l6ZQorCitkZWYgZGllKG1zZyk6CisgICAgIiIiIFRlcm1pbmF0ZSBleGVjdXRpb24uIE1ha2Ugc3VyZSB0aGF0IGFueSBydW5uaW5nIGNoaWxkIHByb2Nlc3NlcyBoYXZlIGJlZW4gd2FpdCgpZWQgZm9yIGJlZm9yZQorICAgICAgICBjYWxsaW5nIHRoaXMuCisgICAgIiIiCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKG1zZykKKyAgICBlbHNlOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKG1zZyArICJcbiIpCisgICAgICAgIHN5cy5leGl0KDEpCisKK2RlZiBwcm9tcHQocHJvbXB0X3RleHQpOgorICAgICIiIiBQcm9tcHQgdGhlIHVzZXIgdG8gY2hvb3NlIG9uZSBvZiB0aGUgY2hvaWNlcworCisgICAgQ2hvaWNlcyBhcmUgaWRlbnRpZmllZCBpbiB0aGUgcHJvbXB0X3RleHQgYnkgc3F1YXJlIGJyYWNrZXRzIGFyb3VuZAorICAgIGEgc2luZ2xlIGxldHRlciBvcHRpb24uCisgICAgIiIiCisgICAgY2hvaWNlcyA9IHNldChtLmdyb3VwKDEpIGZvciBtIGluIHJlLmZpbmRpdGVyKHIiXFsoLilcXSIsIHByb21wdF90ZXh0KSkKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZShwcm9tcHRfdGV4dCkKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHJlc3BvbnNlPXN5cy5zdGRpbi5yZWFkbGluZSgpLnN0cmlwKCkubG93ZXIoKQorICAgICAgICBpZiBub3QgcmVzcG9uc2U6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlWzBdCisgICAgICAgIGlmIHJlc3BvbnNlIGluIGNob2ljZXM6CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UKKworIyBXZSBuZWVkIGRpZmZlcmVudCBlbmNvZGluZy9kZWNvZGluZyBzdHJhdGVnaWVzIGZvciB0ZXh0IGRhdGEgYmVpbmcgcGFzc2VkCisjIGFyb3VuZCBpbiBwaXBlcyBkZXBlbmRpbmcgb24gcHl0aG9uIHZlcnNpb24KK2lmIGJ5dGVzIGlzIG5vdCBzdHI6CisgICAgIyBGb3IgcHl0aG9uMywgYWx3YXlzIGVuY29kZSBhbmQgZGVjb2RlIGFzIGFwcHJvcHJpYXRlCisgICAgZGVmIGRlY29kZV90ZXh0X3N0cmVhbShzKToKKyAgICAgICAgcmV0dXJuIHMuZGVjb2RlKCkgaWYgaXNpbnN0YW5jZShzLCBieXRlcykgZWxzZSBzCisgICAgZGVmIGVuY29kZV90ZXh0X3N0cmVhbShzKToKKyAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCkgaWYgaXNpbnN0YW5jZShzLCBzdHIpIGVsc2UgcworZWxzZToKKyAgICAjIEZvciBweXRob24yLjcsIHBhc3MgcmVhZCBzdHJpbmdzIGFzLWlzLCBidXQgYWxzbyBhbGxvdyB3cml0aW5nIHVuaWNvZGUKKyAgICBkZWYgZGVjb2RlX3RleHRfc3RyZWFtKHMpOgorICAgICAgICByZXR1cm4gcworICAgIGRlZiBlbmNvZGVfdGV4dF9zdHJlYW0ocyk6CisgICAgICAgIHJldHVybiBzLmVuY29kZSgndXRmXzgnKSBpZiBpc2luc3RhbmNlKHMsIHVuaWNvZGUpIGVsc2UgcworCitkZWYgZGVjb2RlX3BhdGgocGF0aCk6CisgICAgIiIiRGVjb2RlIGEgZ2l2ZW4gc3RyaW5nIChieXRlcyBvciBvdGhlcndpc2UpIHVzaW5nIGNvbmZpZ3VyZWQgcGF0aCBlbmNvZGluZyBvcHRpb25zCisgICAgIiIiCisgICAgZW5jb2RpbmcgPSBnaXRDb25maWcoJ2dpdC1wNC5wYXRoRW5jb2RpbmcnKSBvciAndXRmXzgnCisgICAgaWYgYnl0ZXMgaXMgbm90IHN0cjoKKyAgICAgICAgcmV0dXJuIHBhdGguZGVjb2RlKGVuY29kaW5nLCBlcnJvcnM9J3JlcGxhY2UnKSBpZiBpc2luc3RhbmNlKHBhdGgsIGJ5dGVzKSBlbHNlIHBhdGgKKyAgICBlbHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRoLmRlY29kZSgnYXNjaWknKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXRoID0gcGF0aC5kZWNvZGUoZW5jb2RpbmcsIGVycm9ycz0ncmVwbGFjZScpCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCdQYXRoIHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMgZGV0ZWN0ZWQuIFVzZWQge30gdG8gZGVjb2RlOiB7fScuZm9ybWF0KGVuY29kaW5nLCBwYXRoKSkKKyAgICAgICAgcmV0dXJuIHBhdGgKKworZGVmIHJ1bl9naXRfaG9vayhjbWQsIHBhcmFtPVtdKToKKyAgICAiIiJFeGVjdXRlIGEgaG9vayBpZiB0aGUgaG9vayBleGlzdHMuIiIiCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiTG9va2luZyBmb3IgaG9vazogJXNcbiIgJSBjbWQpCisgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorCisgICAgaG9va3NfcGF0aCA9IGdpdENvbmZpZygiY29yZS5ob29rc1BhdGgiKQorICAgIGlmIGxlbihob29rc19wYXRoKSA8PSAwOgorICAgICAgICBob29rc19wYXRoID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bIkdJVF9ESVIiXSwgImhvb2tzIikKKworICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhcmFtLCBsaXN0KToKKyAgICAgICAgcGFyYW09W3BhcmFtXQorCisgICAgIyByZXNvbHZlIGhvb2sgZmlsZSBuYW1lLCBPUyBkZXBkZW5lbnQKKyAgICBob29rX2ZpbGUgPSBvcy5wYXRoLmpvaW4oaG9va3NfcGF0aCwgY21kKQorICAgIGlmIHBsYXRmb3JtLnN5c3RlbSgpID09ICdXaW5kb3dzJzoKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGhvb2tfZmlsZSk6CisgICAgICAgICAgICAjIGxvb2sgZm9yIHRoZSBmaWxlIHdpdGggYW4gZXh0ZW5zaW9uCisgICAgICAgICAgICBmaWxlcyA9IGdsb2IuZ2xvYihob29rX2ZpbGUgKyAiLioiKQorICAgICAgICAgICAgaWYgbm90IGZpbGVzOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBmaWxlcy5zb3J0KCkKKyAgICAgICAgICAgIGhvb2tfZmlsZSA9IGZpbGVzLnBvcCgpCisgICAgICAgICAgICB3aGlsZSBob29rX2ZpbGUudXBwZXIoKS5lbmRzd2l0aCgiLlNBTVBMRSIpOgorICAgICAgICAgICAgICAgICMgVGhlIGZpbGUgaXMgYSBzYW1wbGUgaG9vay4gV2UgZG9uJ3Qgd2FudCBpdAorICAgICAgICAgICAgICAgIGlmIGxlbihmaWxlcykgPiAwOgorICAgICAgICAgICAgICAgICAgICBob29rX2ZpbGUgPSBmaWxlcy5wb3AoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoaG9va19maWxlKSBvciBub3Qgb3MuYWNjZXNzKGhvb2tfZmlsZSwgb3MuWF9PSyk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gcnVuX2hvb2tfY29tbWFuZChob29rX2ZpbGUsIHBhcmFtKSA9PSAwCisKK2RlZiBydW5faG9va19jb21tYW5kKGNtZCwgcGFyYW0pOgorICAgICIiIkV4ZWN1dGVzIGEgZ2l0IGhvb2sgY29tbWFuZAorICAgICAgIGNtZCA9IHRoZSBjb21tYW5kIGxpbmUgZmlsZSB0byBiZSBleGVjdXRlZC4gVGhpcyBjYW4gYmUKKyAgICAgICBhIGZpbGUgdGhhdCBpcyBydW4gYnkgT1MgYXNzb2NpYXRpb24uCisKKyAgICAgICBwYXJhbSA9IGEgbGlzdCBvZiBwYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIGNtZCBjb21tYW5kCisKKyAgICAgICBPbiB3aW5kb3dzLCB0aGUgZXh0ZW5zaW9uIGlzIGNoZWNrZWQgdG8gc2VlIGlmIGl0IHNob3VsZAorICAgICAgIGJlIHJ1biB3aXRoIHRoZSBHaXQgZm9yIFdpbmRvd3MgQmFzaCBzaGVsbC4gIElmIHRoZXJlCisgICAgICAgaXMgbm8gZmlsZSBleHRlbnNpb24sIHRoZSBmaWxlIGlzIGRlZW1lZCBhIGJhc2ggc2hlbGwKKyAgICAgICBhbmQgd2lsbCBiZSBoYW5kZWQgb2ZmIHRvIHNoLmV4ZS4gT3RoZXJ3aXNlLCBXaW5kb3dzCisgICAgICAgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgc2hlbGwgdG8gaGFuZGxlIHRoZSBmaWxlIGFzc29jYXRpb24uCisKKyAgICAgICBGb3Igbm9uIFdpbmRvd3Mgb3BlcmF0aW5nIHN5c3RlbXMsIHRoZSBmaWxlIGlzIGNhbGxlZAorICAgICAgIGFzIGFuIGV4ZWN1dGFibGUuCisgICAgIiIiCisgICAgY2xpID0gW2NtZF0gKyBwYXJhbQorICAgIHVzZV9zaGVsbCA9IEZhbHNlCisgICAgaWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gJ1dpbmRvd3MnOgorICAgICAgICAocm9vdCxleHQpID0gb3MucGF0aC5zcGxpdGV4dChjbWQpCisgICAgICAgIGlmIGV4dCA9PSAiIjoKKyAgICAgICAgICAgIGV4ZV9wYXRoID0gb3MuZW52aXJvbi5nZXQoIkVYRVBBVEgiKQorICAgICAgICAgICAgaWYgZXhlX3BhdGggaXMgTm9uZToKKyAgICAgICAgICAgICAgICBleGVfcGF0aCA9ICIiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGV4ZV9wYXRoID0gb3MucGF0aC5qb2luKGV4ZV9wYXRoLCAiYmluIikKKyAgICAgICAgICAgIGNsaSA9IFtvcy5wYXRoLmpvaW4oZXhlX3BhdGgsICJTSC5FWEUiKV0gKyBjbGkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVzZV9zaGVsbCA9IFRydWUKKyAgICByZXR1cm4gc3VicHJvY2Vzcy5jYWxsKGNsaSwgc2hlbGw9dXNlX3NoZWxsKQorCisKK2RlZiB3cml0ZV9waXBlKGMsIHN0ZGluKToKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdXcml0aW5nIHBpcGU6ICVzXG4nICUgc3RyKGMpKQorCisgICAgZXhwYW5kID0gbm90IGlzaW5zdGFuY2UoYywgbGlzdCkKKyAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHNoZWxsPWV4cGFuZCkKKyAgICBwaXBlID0gcC5zdGRpbgorICAgIHZhbCA9IHBpcGUud3JpdGUoc3RkaW4pCisgICAgcGlwZS5jbG9zZSgpCisgICAgaWYgcC53YWl0KCk6CisgICAgICAgIGRpZSgnQ29tbWFuZCBmYWlsZWQ6ICVzJyAlIHN0cihjKSkKKworICAgIHJldHVybiB2YWwKKworZGVmIHA0X3dyaXRlX3BpcGUoYywgc3RkaW4pOgorICAgIHJlYWxfY21kID0gcDRfYnVpbGRfY21kKGMpCisgICAgaWYgYnl0ZXMgaXMgbm90IHN0ciBhbmQgaXNpbnN0YW5jZShzdGRpbiwgc3RyKToKKyAgICAgICAgc3RkaW4gPSBlbmNvZGVfdGV4dF9zdHJlYW0oc3RkaW4pCisgICAgcmV0dXJuIHdyaXRlX3BpcGUocmVhbF9jbWQsIHN0ZGluKQorCitkZWYgcmVhZF9waXBlX2Z1bGwoYyk6CisgICAgIiIiIFJlYWQgb3V0cHV0IGZyb20gIGNvbW1hbmQuIFJldHVybnMgYSB0dXBsZQorICAgICAgICBvZiB0aGUgcmV0dXJuIHN0YXR1cywgc3Rkb3V0IHRleHQgYW5kIHN0ZGVycgorICAgICAgICB0ZXh0LgorICAgICIiIgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1JlYWRpbmcgcGlwZTogJXNcbicgJSBzdHIoYykpCisKKyAgICBleHBhbmQgPSBub3QgaXNpbnN0YW5jZShjLCBsaXN0KQorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGMsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIHNoZWxsPWV4cGFuZCkKKyAgICAob3V0LCBlcnIpID0gcC5jb21tdW5pY2F0ZSgpCisgICAgcmV0dXJuIChwLnJldHVybmNvZGUsIG91dCwgZGVjb2RlX3RleHRfc3RyZWFtKGVycikpCisKK2RlZiByZWFkX3BpcGUoYywgaWdub3JlX2Vycm9yPUZhbHNlLCByYXc9RmFsc2UpOgorICAgICIiIiBSZWFkIG91dHB1dCBmcm9tICBjb21tYW5kLiBSZXR1cm5zIHRoZSBvdXRwdXQgdGV4dCBvbgorICAgICAgICBzdWNjZXNzLiBPbiBmYWlsdXJlLCB0ZXJtaW5hdGVzIGV4ZWN1dGlvbiwgdW5sZXNzCisgICAgICAgIGlnbm9yZV9lcnJvciBpcyBUcnVlLCB3aGVuIGl0IHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorCisgICAgICAgIElmIHJhdyBpcyBUcnVlLCBkbyBub3QgYXR0ZW1wdCB0byBkZWNvZGUgb3V0cHV0IHRleHQuCisgICAgIiIiCisgICAgKHJldGNvZGUsIG91dCwgZXJyKSA9IHJlYWRfcGlwZV9mdWxsKGMpCisgICAgaWYgcmV0Y29kZSAhPSAwOgorICAgICAgICBpZiBpZ25vcmVfZXJyb3I6CisgICAgICAgICAgICBvdXQgPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGllKCdDb21tYW5kIGZhaWxlZDogJXNcbkVycm9yOiAlcycgJSAoc3RyKGMpLCBlcnIpKQorICAgIGlmIG5vdCByYXc6CisgICAgICAgIG91dCA9IGRlY29kZV90ZXh0X3N0cmVhbShvdXQpCisgICAgcmV0dXJuIG91dAorCitkZWYgcmVhZF9waXBlX3RleHQoYyk6CisgICAgIiIiIFJlYWQgb3V0cHV0IGZyb20gYSBjb21tYW5kIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZSBzdHJpcHBlZC4KKyAgICAgICAgT24gZXJyb3IsIHJldHVybnMgTm9uZS4KKyAgICAiIiIKKyAgICAocmV0Y29kZSwgb3V0LCBlcnIpID0gcmVhZF9waXBlX2Z1bGwoYykKKyAgICBpZiByZXRjb2RlICE9IDA6CisgICAgICAgIHJldHVybiBOb25lCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGRlY29kZV90ZXh0X3N0cmVhbShvdXQpLnJzdHJpcCgpCisKK2RlZiBwNF9yZWFkX3BpcGUoYywgaWdub3JlX2Vycm9yPUZhbHNlLCByYXc9RmFsc2UpOgorICAgIHJlYWxfY21kID0gcDRfYnVpbGRfY21kKGMpCisgICAgcmV0dXJuIHJlYWRfcGlwZShyZWFsX2NtZCwgaWdub3JlX2Vycm9yLCByYXc9cmF3KQorCitkZWYgcmVhZF9waXBlX2xpbmVzKGMpOgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1JlYWRpbmcgcGlwZTogJXNcbicgJSBzdHIoYykpCisKKyAgICBleHBhbmQgPSBub3QgaXNpbnN0YW5jZShjLCBsaXN0KQorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGMsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHNoZWxsPWV4cGFuZCkKKyAgICBwaXBlID0gcC5zdGRvdXQKKyAgICB2YWwgPSBbZGVjb2RlX3RleHRfc3RyZWFtKGxpbmUpIGZvciBsaW5lIGluIHBpcGUucmVhZGxpbmVzKCldCisgICAgaWYgcGlwZS5jbG9zZSgpIG9yIHAud2FpdCgpOgorICAgICAgICBkaWUoJ0NvbW1hbmQgZmFpbGVkOiAlcycgJSBzdHIoYykpCisgICAgcmV0dXJuIHZhbAorCitkZWYgcDRfcmVhZF9waXBlX2xpbmVzKGMpOgorICAgICIiIlNwZWNpZmljYWxseSBpbnZva2UgcDQgb24gdGhlIGNvbW1hbmQgc3VwcGxpZWQuICIiIgorICAgIHJlYWxfY21kID0gcDRfYnVpbGRfY21kKGMpCisgICAgcmV0dXJuIHJlYWRfcGlwZV9saW5lcyhyZWFsX2NtZCkKKworZGVmIHA0X2hhc19jb21tYW5kKGNtZCk6CisgICAgIiIiQXNrIHA0IGZvciBoZWxwIG9uIHRoaXMgY29tbWFuZC4gIElmIGl0IHJldHVybnMgYW4gZXJyb3IsIHRoZQorICAgICAgIGNvbW1hbmQgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyB2ZXJzaW9uIG9mIHA0LiIiIgorICAgIHJlYWxfY21kID0gcDRfYnVpbGRfY21kKFsiaGVscCIsIGNtZF0pCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4ocmVhbF9jbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgcC5jb21tdW5pY2F0ZSgpCisgICAgcmV0dXJuIHAucmV0dXJuY29kZSA9PSAwCisKK2RlZiBwNF9oYXNfbW92ZV9jb21tYW5kKCk6CisgICAgIiIiU2VlIGlmIHRoZSBtb3ZlIGNvbW1hbmQgZXhpc3RzLCB0aGF0IGl0IHN1cHBvcnRzIC1rLCBhbmQgdGhhdAorICAgICAgIGl0IGhhcyBub3QgYmVlbiBhZG1pbmlzdHJhdGl2ZWx5IGRpc2FibGVkLiAgVGhlIGFyZ3VtZW50cworICAgICAgIG11c3QgYmUgY29ycmVjdCwgYnV0IHRoZSBmaWxlbmFtZXMgZG8gbm90IGhhdmUgdG8gZXhpc3QuICBVc2UKKyAgICAgICBvbmVzIHdpdGggd2lsZGNhcmRzIHNvIGV2ZW4gaWYgdGhleSBleGlzdCwgaXQgd2lsbCBmYWlsLiIiIgorCisgICAgaWYgbm90IHA0X2hhc19jb21tYW5kKCJtb3ZlIik6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGNtZCA9IHA0X2J1aWxkX2NtZChbIm1vdmUiLCAiLWsiLCAiQGZyb20iLCAiQHRvIl0pCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICBlcnIgPSBkZWNvZGVfdGV4dF9zdHJlYW0oZXJyKQorICAgICMgcmV0dXJuIGNvZGUgd2lsbCBiZSAxIGluIGVpdGhlciBjYXNlCisgICAgaWYgZXJyLmZpbmQoIkludmFsaWQgb3B0aW9uIikgPj0gMDoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgaWYgZXJyLmZpbmQoImRpc2FibGVkIikgPj0gMDoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgIyBhc3N1bWUgaXQgZmFpbGVkIGJlY2F1c2UgQC4uLiB3YXMgaW52YWxpZCBjaGFuZ2VsaXN0CisgICAgcmV0dXJuIFRydWUKKworZGVmIHN5c3RlbShjbWQsIGlnbm9yZV9lcnJvcj1GYWxzZSk6CisgICAgZXhwYW5kID0gbm90IGlzaW5zdGFuY2UoY21kLCBsaXN0KQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImV4ZWN1dGluZyAlc1xuIiAlIHN0cihjbWQpKQorICAgIHJldGNvZGUgPSBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1leHBhbmQpCisgICAgaWYgcmV0Y29kZSBhbmQgbm90IGlnbm9yZV9lcnJvcjoKKyAgICAgICAgcmFpc2UgQ2FsbGVkUHJvY2Vzc0Vycm9yKHJldGNvZGUsIGNtZCkKKworICAgIHJldHVybiByZXRjb2RlCisKK2RlZiBwNF9zeXN0ZW0oY21kKToKKyAgICAiIiJTcGVjaWZpY2FsbHkgaW52b2tlIHA0IGFzIHRoZSBzeXN0ZW0gY29tbWFuZC4gIiIiCisgICAgcmVhbF9jbWQgPSBwNF9idWlsZF9jbWQoY21kKQorICAgIGV4cGFuZCA9IG5vdCBpc2luc3RhbmNlKHJlYWxfY21kLCBsaXN0KQorICAgIHJldGNvZGUgPSBzdWJwcm9jZXNzLmNhbGwocmVhbF9jbWQsIHNoZWxsPWV4cGFuZCkKKyAgICBpZiByZXRjb2RlOgorICAgICAgICByYWlzZSBDYWxsZWRQcm9jZXNzRXJyb3IocmV0Y29kZSwgcmVhbF9jbWQpCisKK2RlZiBkaWVfYmFkX2FjY2VzcyhzKToKKyAgICBkaWUoImZhaWx1cmUgYWNjZXNzaW5nIGRlcG90OiB7MH0iLmZvcm1hdChzLnJzdHJpcCgpKSkKKworZGVmIHA0X2NoZWNrX2FjY2VzcyhtaW5fZXhwaXJhdGlvbj0xKToKKyAgICAiIiIgQ2hlY2sgaWYgd2UgY2FuIGFjY2VzcyBQZXJmb3JjZSAtIGFjY291bnQgc3RpbGwgbG9nZ2VkIGluCisgICAgIiIiCisgICAgcmVzdWx0cyA9IHA0Q21kTGlzdChbImxvZ2luIiwgIi1zIl0pCisKKyAgICBpZiBsZW4ocmVzdWx0cykgPT0gMDoKKyAgICAgICAgIyBzaG91bGQgbmV2ZXIgZ2V0IGhlcmU6IGFsd2F5cyBnZXQgZWl0aGVyIHNvbWUgcmVzdWx0cywgb3IgYSBwNEV4aXRDb2RlCisgICAgICAgIGFzc2VydCgiY291bGQgbm90IHBhcnNlIHJlc3BvbnNlIGZyb20gcGVyZm9yY2UiKQorCisgICAgcmVzdWx0ID0gcmVzdWx0c1swXQorCisgICAgaWYgJ3A0RXhpdENvZGUnIGluIHJlc3VsdDoKKyAgICAgICAgIyBwNCByZXR1cm5lZCBub24temVybyBzdGF0dXMsIGUuZy4gUDRQT1JUIGludmFsaWQsIG9yIHA0IG5vdCBpbiBwYXRoCisgICAgICAgIGRpZV9iYWRfYWNjZXNzKCJjb3VsZCBub3QgcnVuIHA0IikKKworICAgIGNvZGUgPSByZXN1bHQuZ2V0KCJjb2RlIikKKyAgICBpZiBub3QgY29kZToKKyAgICAgICAgIyB3ZSBnZXQgaGVyZSBpZiB3ZSBjb3VsZG4ndCBjb25uZWN0IGFuZCB0aGVyZSB3YXMgbm90aGluZyB0byB1bm1hcnNoYWwKKyAgICAgICAgZGllX2JhZF9hY2Nlc3MoImNvdWxkIG5vdCBjb25uZWN0IikKKworICAgIGVsaWYgY29kZSA9PSAic3RhdCI6CisgICAgICAgIGV4cGlyeSA9IHJlc3VsdC5nZXQoIlRpY2tldEV4cGlyYXRpb24iKQorICAgICAgICBpZiBleHBpcnk6CisgICAgICAgICAgICBleHBpcnkgPSBpbnQoZXhwaXJ5KQorICAgICAgICAgICAgaWYgZXhwaXJ5ID4gbWluX2V4cGlyYXRpb246CisgICAgICAgICAgICAgICAgIyBvayB0byBjYXJyeSBvbgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkaWVfYmFkX2FjY2VzcygicGVyZm9yY2UgdGlja2V0IGV4cGlyZXMgaW4gezB9IHNlY29uZHMiLmZvcm1hdChleHBpcnkpKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGFjY291bnQgd2l0aG91dCBhIHRpbWVvdXQgLSBhbGwgb2sKKyAgICAgICAgICAgIHJldHVybgorCisgICAgZWxpZiBjb2RlID09ICJlcnJvciI6CisgICAgICAgIGRhdGEgPSByZXN1bHQuZ2V0KCJkYXRhIikKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIGRpZV9iYWRfYWNjZXNzKCJwNCBlcnJvcjogezB9Ii5mb3JtYXQoZGF0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaWVfYmFkX2FjY2VzcygidW5rbm93biBlcnJvciIpCisgICAgZWxpZiBjb2RlID09ICJpbmZvIjoKKyAgICAgICAgcmV0dXJuCisgICAgZWxzZToKKyAgICAgICAgZGllX2JhZF9hY2Nlc3MoInVua25vd24gZXJyb3IgY29kZSB7MH0iLmZvcm1hdChjb2RlKSkKKworX3A0X3ZlcnNpb25fc3RyaW5nID0gTm9uZQorZGVmIHA0X3ZlcnNpb25fc3RyaW5nKCk6CisgICAgIiIiUmVhZCB0aGUgdmVyc2lvbiBzdHJpbmcsIHNob3dpbmcganVzdCB0aGUgbGFzdCBsaW5lLCB3aGljaAorICAgICAgIGhvcGVmdWxseSBpcyB0aGUgaW50ZXJlc3RpbmcgdmVyc2lvbiBiaXQuCisKKyAgICAgICAkIHA0IC1WCisgICAgICAgUGVyZm9yY2UgLSBUaGUgRmFzdCBTb2Z0d2FyZSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgU3lzdGVtLgorICAgICAgIENvcHlyaWdodCAxOTk1LTIwMTEgUGVyZm9yY2UgU29mdHdhcmUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgICAgIFJldi4gUDQvTlRYODYvMjAxMS4xLzM5Mzk3NSAoMjAxMS8xMi8xNikuCisgICAgIiIiCisgICAgZ2xvYmFsIF9wNF92ZXJzaW9uX3N0cmluZworICAgIGlmIG5vdCBfcDRfdmVyc2lvbl9zdHJpbmc6CisgICAgICAgIGEgPSBwNF9yZWFkX3BpcGVfbGluZXMoWyItViJdKQorICAgICAgICBfcDRfdmVyc2lvbl9zdHJpbmcgPSBhWy0xXS5yc3RyaXAoKQorICAgIHJldHVybiBfcDRfdmVyc2lvbl9zdHJpbmcKKworZGVmIHA0X2ludGVncmF0ZShzcmMsIGRlc3QpOgorICAgIHA0X3N5c3RlbShbImludGVncmF0ZSIsICItRHQiLCB3aWxkY2FyZF9lbmNvZGUoc3JjKSwgd2lsZGNhcmRfZW5jb2RlKGRlc3QpXSkKKworZGVmIHA0X3N5bmMoZiwgKm9wdGlvbnMpOgorICAgIHA0X3N5c3RlbShbInN5bmMiXSArIGxpc3Qob3B0aW9ucykgKyBbd2lsZGNhcmRfZW5jb2RlKGYpXSkKKworZGVmIHA0X2FkZChmKToKKyAgICAjIGZvcmNpYmx5IGFkZCBmaWxlIG5hbWVzIHdpdGggd2lsZGNhcmRzCisgICAgaWYgd2lsZGNhcmRfcHJlc2VudChmKToKKyAgICAgICAgcDRfc3lzdGVtKFsiYWRkIiwgIi1mIiwgZl0pCisgICAgZWxzZToKKyAgICAgICAgcDRfc3lzdGVtKFsiYWRkIiwgZl0pCisKK2RlZiBwNF9kZWxldGUoZik6CisgICAgcDRfc3lzdGVtKFsiZGVsZXRlIiwgd2lsZGNhcmRfZW5jb2RlKGYpXSkKKworZGVmIHA0X2VkaXQoZiwgKm9wdGlvbnMpOgorICAgIHA0X3N5c3RlbShbImVkaXQiXSArIGxpc3Qob3B0aW9ucykgKyBbd2lsZGNhcmRfZW5jb2RlKGYpXSkKKworZGVmIHA0X3JldmVydChmKToKKyAgICBwNF9zeXN0ZW0oWyJyZXZlcnQiLCB3aWxkY2FyZF9lbmNvZGUoZildKQorCitkZWYgcDRfcmVvcGVuKHR5cGUsIGYpOgorICAgIHA0X3N5c3RlbShbInJlb3BlbiIsICItdCIsIHR5cGUsIHdpbGRjYXJkX2VuY29kZShmKV0pCisKK2RlZiBwNF9yZW9wZW5faW5fY2hhbmdlKGNoYW5nZWxpc3QsIGZpbGVzKToKKyAgICBjbWQgPSBbInJlb3BlbiIsICItYyIsIHN0cihjaGFuZ2VsaXN0KV0gKyBmaWxlcworICAgIHA0X3N5c3RlbShjbWQpCisKK2RlZiBwNF9tb3ZlKHNyYywgZGVzdCk6CisgICAgcDRfc3lzdGVtKFsibW92ZSIsICItayIsIHdpbGRjYXJkX2VuY29kZShzcmMpLCB3aWxkY2FyZF9lbmNvZGUoZGVzdCldKQorCitkZWYgcDRfbGFzdF9jaGFuZ2UoKToKKyAgICByZXN1bHRzID0gcDRDbWRMaXN0KFsiY2hhbmdlcyIsICItbSIsICIxIl0sIHNraXBfaW5mbz1UcnVlKQorICAgIHJldHVybiBpbnQocmVzdWx0c1swXVsnY2hhbmdlJ10pCisKK2RlZiBwNF9kZXNjcmliZShjaGFuZ2UsIHNoZWx2ZWQ9RmFsc2UpOgorICAgICIiIk1ha2Ugc3VyZSBpdCByZXR1cm5zIGEgdmFsaWQgcmVzdWx0IGJ5IGNoZWNraW5nIGZvcgorICAgICAgIHRoZSBwcmVzZW5jZSBvZiBmaWVsZCAidGltZSIuICBSZXR1cm4gYSBkaWN0IG9mIHRoZQorICAgICAgIHJlc3VsdHMuIiIiCisKKyAgICBjbWQgPSBbImRlc2NyaWJlIiwgIi1zIl0KKyAgICBpZiBzaGVsdmVkOgorICAgICAgICBjbWQgKz0gWyItUyJdCisgICAgY21kICs9IFtzdHIoY2hhbmdlKV0KKworICAgIGRzID0gcDRDbWRMaXN0KGNtZCwgc2tpcF9pbmZvPVRydWUpCisgICAgaWYgbGVuKGRzKSAhPSAxOgorICAgICAgICBkaWUoInA0IGRlc2NyaWJlIC1zICVkIGRpZCBub3QgcmV0dXJuIDEgcmVzdWx0OiAlcyIgJSAoY2hhbmdlLCBzdHIoZHMpKSkKKworICAgIGQgPSBkc1swXQorCisgICAgaWYgInA0RXhpdENvZGUiIGluIGQ6CisgICAgICAgIGRpZSgicDQgZGVzY3JpYmUgLXMgJWQgZXhpdGVkIHdpdGggJWQ6ICVzIiAlIChjaGFuZ2UsIGRbInA0RXhpdENvZGUiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihkKSkpCisgICAgaWYgImNvZGUiIGluIGQ6CisgICAgICAgIGlmIGRbImNvZGUiXSA9PSAiZXJyb3IiOgorICAgICAgICAgICAgZGllKCJwNCBkZXNjcmliZSAtcyAlZCByZXR1cm5lZCBlcnJvciBjb2RlOiAlcyIgJSAoY2hhbmdlLCBzdHIoZCkpKQorCisgICAgaWYgInRpbWUiIG5vdCBpbiBkOgorICAgICAgICBkaWUoInA0IGRlc2NyaWJlIC1zICVkIHJldHVybmVkIG5vIFwidGltZVwiOiAlcyIgJSAoY2hhbmdlLCBzdHIoZCkpKQorCisgICAgcmV0dXJuIGQKKworIworIyBDYW5vbmljYWxpemUgdGhlIHA0IHR5cGUgYW5kIHJldHVybiBhIHR1cGxlIG9mIHRoZQorIyBiYXNlIHR5cGUsIHBsdXMgYW55IG1vZGlmaWVycy4gIFNlZSAicDQgaGVscCBmaWxldHlwZXMiCisjIGZvciBhIGxpc3QgYW5kIGV4cGxhbmF0aW9uLgorIworZGVmIHNwbGl0X3A0X3R5cGUocDR0eXBlKToKKworICAgIHA0X2ZpbGV0eXBlc19oaXN0b3JpY2FsID0geworICAgICAgICAiY3RlbXBvYmoiOiAiYmluYXJ5K1N3IiwKKyAgICAgICAgImN0ZXh0IjogInRleHQrQyIsCisgICAgICAgICJjeHRleHQiOiAidGV4dCtDeCIsCisgICAgICAgICJrdGV4dCI6ICJ0ZXh0K2siLAorICAgICAgICAia3h0ZXh0IjogInRleHQra3giLAorICAgICAgICAibHRleHQiOiAidGV4dCtGIiwKKyAgICAgICAgInRlbXBvYmoiOiAiYmluYXJ5K0ZTdyIsCisgICAgICAgICJ1YmluYXJ5IjogImJpbmFyeStGIiwKKyAgICAgICAgInVyZXNvdXJjZSI6ICJyZXNvdXJjZStGIiwKKyAgICAgICAgInV4YmluYXJ5IjogImJpbmFyeStGeCIsCisgICAgICAgICJ4YmluYXJ5IjogImJpbmFyeSt4IiwKKyAgICAgICAgInhsdGV4dCI6ICJ0ZXh0K0Z4IiwKKyAgICAgICAgInh0ZW1wb2JqIjogImJpbmFyeStTd3giLAorICAgICAgICAieHRleHQiOiAidGV4dCt4IiwKKyAgICAgICAgInh1bmljb2RlIjogInVuaWNvZGUreCIsCisgICAgICAgICJ4dXRmMTYiOiAidXRmMTYreCIsCisgICAgfQorICAgIGlmIHA0dHlwZSBpbiBwNF9maWxldHlwZXNfaGlzdG9yaWNhbDoKKyAgICAgICAgcDR0eXBlID0gcDRfZmlsZXR5cGVzX2hpc3RvcmljYWxbcDR0eXBlXQorICAgIG1vZHMgPSAiIgorICAgIHMgPSBwNHR5cGUuc3BsaXQoIisiKQorICAgIGJhc2UgPSBzWzBdCisgICAgbW9kcyA9ICIiCisgICAgaWYgbGVuKHMpID4gMToKKyAgICAgICAgbW9kcyA9IHNbMV0KKyAgICByZXR1cm4gKGJhc2UsIG1vZHMpCisKKyMKKyMgcmV0dXJuIHRoZSByYXcgcDQgdHlwZSBvZiBhIGZpbGUgKHRleHQsIHRleHQra28sIGV0YykKKyMKK2RlZiBwNF90eXBlKGYpOgorICAgIHJlc3VsdHMgPSBwNENtZExpc3QoWyJmc3RhdCIsICItVCIsICJoZWFkVHlwZSIsIHdpbGRjYXJkX2VuY29kZShmKV0pCisgICAgcmV0dXJuIHJlc3VsdHNbMF1bJ2hlYWRUeXBlJ10KKworIworIyBHaXZlbiBhIHR5cGUgYmFzZSBhbmQgbW9kaWZpZXIsIHJldHVybiBhIHJlZ2V4cCBtYXRjaGluZworIyB0aGUga2V5d29yZHMgdGhhdCBjYW4gYmUgZXhwYW5kZWQgaW4gdGhlIGZpbGUKKyMKK2RlZiBwNF9rZXl3b3Jkc19yZWdleHBfZm9yX3R5cGUoYmFzZSwgdHlwZV9tb2RzKToKKyAgICBpZiBiYXNlIGluICgidGV4dCIsICJ1bmljb2RlIiwgImJpbmFyeSIpOgorICAgICAgICBrd29yZHMgPSBOb25lCisgICAgICAgIGlmICJrbyIgaW4gdHlwZV9tb2RzOgorICAgICAgICAgICAga3dvcmRzID0gJ0lkfEhlYWRlcicKKyAgICAgICAgZWxpZiAiayIgaW4gdHlwZV9tb2RzOgorICAgICAgICAgICAga3dvcmRzID0gJ0lkfEhlYWRlcnxBdXRob3J8RGF0ZXxEYXRlVGltZXxDaGFuZ2V8RmlsZXxSZXZpc2lvbicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHBhdHRlcm4gPSByIiIiCisgICAgICAgICAgICBcJCAgICAgICAgICAgICAgIyBTdGFydHMgd2l0aCBhIGRvbGxhciwgZm9sbG93ZWQgYnkuLi4KKyAgICAgICAgICAgICglcykgICAgICAgICAgICAjIG9uZSBvZiB0aGUga2V5d29yZHMsIGZvbGxvd2VkIGJ5Li4uCisgICAgICAgICAgICAoOlteJFxuXSspPyAgICAgIyBwb3NzaWJseSBhbiBvbGQgZXhwYW5zaW9uLCBmb2xsb3dlZCBieS4uLgorICAgICAgICAgICAgXCQgICAgICAgICAgICAgICMgYW5vdGhlciBkb2xsYXIKKyAgICAgICAgICAgICIiIiAlIGt3b3JkcworICAgICAgICByZXR1cm4gcGF0dGVybgorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKyMKKyMgR2l2ZW4gYSBmaWxlLCByZXR1cm4gYSByZWdleHAgbWF0Y2hpbmcgdGhlIHBvc3NpYmxlCisjIFJDUyBrZXl3b3JkcyB0aGF0IHdpbGwgYmUgZXhwYW5kZWQsIG9yIE5vbmUgZm9yIGZpbGVzCisjIHdpdGgga3cgZXhwYW5zaW9uIHR1cm5lZCBvZmYuCisjCitkZWYgcDRfa2V5d29yZHNfcmVnZXhwX2Zvcl9maWxlKGZpbGUpOgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBlbHNlOgorICAgICAgICAodHlwZV9iYXNlLCB0eXBlX21vZHMpID0gc3BsaXRfcDRfdHlwZShwNF90eXBlKGZpbGUpKQorICAgICAgICByZXR1cm4gcDRfa2V5d29yZHNfcmVnZXhwX2Zvcl90eXBlKHR5cGVfYmFzZSwgdHlwZV9tb2RzKQorCitkZWYgc2V0UDRFeGVjQml0KGZpbGUsIG1vZGUpOgorICAgICMgUmVvcGVucyBhbiBhbHJlYWR5IG9wZW4gZmlsZSBhbmQgY2hhbmdlcyB0aGUgZXhlY3V0ZSBiaXQgdG8gbWF0Y2gKKyAgICAjIHRoZSBleGVjdXRlIGJpdCBzZXR0aW5nIGluIHRoZSBwYXNzZWQgaW4gbW9kZS4KKworICAgIHA0VHlwZSA9ICIreCIKKworICAgIGlmIG5vdCBpc01vZGVFeGVjKG1vZGUpOgorICAgICAgICBwNFR5cGUgPSBnZXRQNE9wZW5lZFR5cGUoZmlsZSkKKyAgICAgICAgcDRUeXBlID0gcmUuc3ViKCdeKFtja3VdPyl4KC4qKScsICdcXDFcXDInLCBwNFR5cGUpCisgICAgICAgIHA0VHlwZSA9IHJlLnN1YignKC4qP1wrLio/KXgoLio/KScsICdcXDFcXDInLCBwNFR5cGUpCisgICAgICAgIGlmIHA0VHlwZVstMV0gPT0gIisiOgorICAgICAgICAgICAgcDRUeXBlID0gcDRUeXBlWzA6LTFdCisKKyAgICBwNF9yZW9wZW4ocDRUeXBlLCBmaWxlKQorCitkZWYgZ2V0UDRPcGVuZWRUeXBlKGZpbGUpOgorICAgICMgUmV0dXJucyB0aGUgcGVyZm9yY2UgZmlsZSB0eXBlIGZvciB0aGUgZ2l2ZW4gZmlsZS4KKworICAgIHJlc3VsdCA9IHA0X3JlYWRfcGlwZShbIm9wZW5lZCIsIHdpbGRjYXJkX2VuY29kZShmaWxlKV0pCisgICAgbWF0Y2ggPSByZS5tYXRjaCgiLipcKCguKylcKSggXCpleGNsdXNpdmVcKik/XHI/JCIsIHJlc3VsdCkKKyAgICBpZiBtYXRjaDoKKyAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpCisgICAgZWxzZToKKyAgICAgICAgZGllKCJDb3VsZCBub3QgZGV0ZXJtaW5lIGZpbGUgdHlwZSBmb3IgJXMgKHJlc3VsdDogJyVzJykiICUgKGZpbGUsIHJlc3VsdCkpCisKKyMgUmV0dXJuIHRoZSBzZXQgb2YgYWxsIHA0IGxhYmVscworZGVmIGdldFA0TGFiZWxzKGRlcG90UGF0aHMpOgorICAgIGxhYmVscyA9IHNldCgpCisgICAgaWYgbm90IGlzaW5zdGFuY2UoZGVwb3RQYXRocywgbGlzdCk6CisgICAgICAgIGRlcG90UGF0aHMgPSBbZGVwb3RQYXRoc10KKworICAgIGZvciBsIGluIHA0Q21kTGlzdChbImxhYmVscyJdICsgWyIlcy4uLiIgJSBwIGZvciBwIGluIGRlcG90UGF0aHNdKToKKyAgICAgICAgbGFiZWwgPSBsWydsYWJlbCddCisgICAgICAgIGxhYmVscy5hZGQobGFiZWwpCisKKyAgICByZXR1cm4gbGFiZWxzCisKKyMgUmV0dXJuIHRoZSBzZXQgb2YgYWxsIGdpdCB0YWdzCitkZWYgZ2V0R2l0VGFncygpOgorICAgIGdpdFRhZ3MgPSBzZXQoKQorICAgIGZvciBsaW5lIGluIHJlYWRfcGlwZV9saW5lcyhbImdpdCIsICJ0YWciXSk6CisgICAgICAgIHRhZyA9IGxpbmUuc3RyaXAoKQorICAgICAgICBnaXRUYWdzLmFkZCh0YWcpCisgICAgcmV0dXJuIGdpdFRhZ3MKKworX2RpZmZfdHJlZV9wYXR0ZXJuID0gTm9uZQorCitkZWYgcGFyc2VEaWZmVHJlZUVudHJ5KGVudHJ5KToKKyAgICAiIiJQYXJzZXMgYSBzaW5nbGUgZGlmZiB0cmVlIGVudHJ5IGludG8gaXRzIGNvbXBvbmVudCBlbGVtZW50cy4KKworICAgIFNlZSBnaXQtZGlmZi10cmVlKDEpIG1hbnBhZ2UgZm9yIGRldGFpbHMgYWJvdXQgdGhlIGZvcm1hdCBvZiB0aGUgZGlmZgorICAgIG91dHB1dC4gVGhpcyBtZXRob2QgcmV0dXJucyBhIGRpY3Rpb25hcnkgd2l0aCB0aGUgZm9sbG93aW5nIGVsZW1lbnRzOgorCisgICAgc3JjX21vZGUgLSBUaGUgbW9kZSBvZiB0aGUgc291cmNlIGZpbGUKKyAgICBkc3RfbW9kZSAtIFRoZSBtb2RlIG9mIHRoZSBkZXN0aW5hdGlvbiBmaWxlCisgICAgc3JjX3NoYTEgLSBUaGUgc2hhMSBmb3IgdGhlIHNvdXJjZSBmaWxlCisgICAgZHN0X3NoYTEgLSBUaGUgc2hhMSBmciB0aGUgZGVzdGluYXRpb24gZmlsZQorICAgIHN0YXR1cyAtIFRoZSBvbmUgbGV0dGVyIHN0YXR1cyBvZiB0aGUgZGlmZiAoaS5lLiAnQScsICdNJywgJ0QnLCBldGMpCisgICAgc3RhdHVzX3Njb3JlIC0gVGhlIHNjb3JlIGZvciB0aGUgc3RhdHVzIChhcHBsaWNhYmxlIGZvciAnQycgYW5kICdSJworICAgICAgICAgICAgICAgICAgIHN0YXR1c2VzKS4gVGhpcyBpcyBOb25lIGlmIHRoZXJlIGlzIG5vIHNjb3JlLgorICAgIHNyYyAtIFRoZSBwYXRoIGZvciB0aGUgc291cmNlIGZpbGUuCisgICAgZHN0IC0gVGhlIHBhdGggZm9yIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiBUaGlzIGlzIG9ubHkgcHJlc2VudCBmb3IKKyAgICAgICAgICBjb3B5IG9yIHJlbmFtZXMuIElmIGl0IGlzIG5vdCBwcmVzZW50LCB0aGlzIGlzIE5vbmUuCisKKyAgICBJZiB0aGUgcGF0dGVybiBpcyBub3QgbWF0Y2hlZCwgTm9uZSBpcyByZXR1cm5lZC4iIiIKKworICAgIGdsb2JhbCBfZGlmZl90cmVlX3BhdHRlcm4KKyAgICBpZiBub3QgX2RpZmZfdHJlZV9wYXR0ZXJuOgorICAgICAgICBfZGlmZl90cmVlX3BhdHRlcm4gPSByZS5jb21waWxlKCc6KFxkKykgKFxkKykgKFx3KykgKFx3KykgKFtBLVpdKShcZCspP1x0KC4qPykoKFx0KC4qKSl8JCknKQorCisgICAgbWF0Y2ggPSBfZGlmZl90cmVlX3BhdHRlcm4ubWF0Y2goZW50cnkpCisgICAgaWYgbWF0Y2g6CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAnc3JjX21vZGUnOiBtYXRjaC5ncm91cCgxKSwKKyAgICAgICAgICAgICdkc3RfbW9kZSc6IG1hdGNoLmdyb3VwKDIpLAorICAgICAgICAgICAgJ3NyY19zaGExJzogbWF0Y2guZ3JvdXAoMyksCisgICAgICAgICAgICAnZHN0X3NoYTEnOiBtYXRjaC5ncm91cCg0KSwKKyAgICAgICAgICAgICdzdGF0dXMnOiBtYXRjaC5ncm91cCg1KSwKKyAgICAgICAgICAgICdzdGF0dXNfc2NvcmUnOiBtYXRjaC5ncm91cCg2KSwKKyAgICAgICAgICAgICdzcmMnOiBtYXRjaC5ncm91cCg3KSwKKyAgICAgICAgICAgICdkc3QnOiBtYXRjaC5ncm91cCgxMCkKKyAgICAgICAgfQorICAgIHJldHVybiBOb25lCisKK2RlZiBpc01vZGVFeGVjKG1vZGUpOgorICAgICMgUmV0dXJucyBUcnVlIGlmIHRoZSBnaXZlbiBnaXQgbW9kZSByZXByZXNlbnRzIGFuIGV4ZWN1dGFibGUgZmlsZSwKKyAgICAjIG90aGVyd2lzZSBGYWxzZS4KKyAgICByZXR1cm4gbW9kZVstMzpdID09ICI3NTUiCisKK2NsYXNzIFA0RXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgIiIiIEJhc2UgY2xhc3MgZm9yIGV4Y2VwdGlvbnMgZnJvbSB0aGUgcDQgY2xpZW50ICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGl0X2NvZGUpOgorICAgICAgICBzZWxmLnA0RXhpdENvZGUgPSBleGl0X2NvZGUKKworY2xhc3MgUDRTZXJ2ZXJFeGNlcHRpb24oUDRFeGNlcHRpb24pOgorICAgICIiIiBCYXNlIGNsYXNzIGZvciBleGNlcHRpb25zIHdoZXJlIHdlIGdldCBzb21lIGtpbmQgb2YgbWFyc2hhbGxlZCB1cCByZXN1bHQgZnJvbSB0aGUgc2VydmVyICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGl0X2NvZGUsIHA0X3Jlc3VsdCk6CisgICAgICAgIHN1cGVyKFA0U2VydmVyRXhjZXB0aW9uLCBzZWxmKS5fX2luaXRfXyhleGl0X2NvZGUpCisgICAgICAgIHNlbGYucDRfcmVzdWx0ID0gcDRfcmVzdWx0CisgICAgICAgIHNlbGYuY29kZSA9IHA0X3Jlc3VsdFswXVsnY29kZSddCisgICAgICAgIHNlbGYuZGF0YSA9IHA0X3Jlc3VsdFswXVsnZGF0YSddCisKK2NsYXNzIFA0UmVxdWVzdFNpemVFeGNlcHRpb24oUDRTZXJ2ZXJFeGNlcHRpb24pOgorICAgICIiIiBPbmUgb2YgdGhlIG1heHJlc3VsdHMgb3IgbWF4c2NhbnJvd3MgZXJyb3JzICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGl0X2NvZGUsIHA0X3Jlc3VsdCwgbGltaXQpOgorICAgICAgICBzdXBlcihQNFJlcXVlc3RTaXplRXhjZXB0aW9uLCBzZWxmKS5fX2luaXRfXyhleGl0X2NvZGUsIHA0X3Jlc3VsdCkKKyAgICAgICAgc2VsZi5saW1pdCA9IGxpbWl0CisKK2NsYXNzIFA0Q29tbWFuZEV4Y2VwdGlvbihQNEV4Y2VwdGlvbik6CisgICAgIiIiIFNvbWV0aGluZyB3ZW50IHdyb25nIGNhbGxpbmcgcDQgd2hpY2ggbWVhbnMgd2UgaGF2ZSB0byBnaXZlIHVwICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLm1zZyA9IG1zZworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm1zZworCitkZWYgaXNNb2RlRXhlY0NoYW5nZWQoc3JjX21vZGUsIGRzdF9tb2RlKToKKyAgICByZXR1cm4gaXNNb2RlRXhlYyhzcmNfbW9kZSkgIT0gaXNNb2RlRXhlYyhkc3RfbW9kZSkKKworZGVmIHA0Q21kTGlzdChjbWQsIHN0ZGluPU5vbmUsIHN0ZGluX21vZGU9J3crYicsIGNiPU5vbmUsIHNraXBfaW5mbz1GYWxzZSwKKyAgICAgICAgZXJyb3JzX2FzX2V4Y2VwdGlvbnM9RmFsc2UpOgorCisgICAgaWYgbm90IGlzaW5zdGFuY2UoY21kLCBsaXN0KToKKyAgICAgICAgY21kID0gIi1HICIgKyBjbWQKKyAgICAgICAgZXhwYW5kID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIGNtZCA9IFsiLUciXSArIGNtZAorICAgICAgICBleHBhbmQgPSBGYWxzZQorCisgICAgY21kID0gcDRfYnVpbGRfY21kKGNtZCkKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJPcGVuaW5nIHBpcGU6ICVzXG4iICUgc3RyKGNtZCkpCisKKyAgICAjIFVzZSBhIHRlbXBvcmFyeSBmaWxlIHRvIGF2b2lkIGRlYWRsb2NrcyB3aXRob3V0CisgICAgIyBzdWJwcm9jZXNzLmNvbW11bmljYXRlKCksIHdoaWNoIHdvdWxkIHB1dCBhbm90aGVyIGNvcHkKKyAgICAjIG9mIHN0ZG91dCBpbnRvIG1lbW9yeS4KKyAgICBzdGRpbl9maWxlID0gTm9uZQorICAgIGlmIHN0ZGluIGlzIG5vdCBOb25lOgorICAgICAgICBzdGRpbl9maWxlID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZShwcmVmaXg9J3A0LXN0ZGluJywgbW9kZT1zdGRpbl9tb2RlKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzdGRpbiwgbGlzdCk6CisgICAgICAgICAgICBzdGRpbl9maWxlLndyaXRlKHN0ZGluKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGkgaW4gc3RkaW46CisgICAgICAgICAgICAgICAgc3RkaW5fZmlsZS53cml0ZShlbmNvZGVfdGV4dF9zdHJlYW0oaSkpCisgICAgICAgICAgICAgICAgc3RkaW5fZmlsZS53cml0ZShiJ1xuJykKKyAgICAgICAgc3RkaW5fZmlsZS5mbHVzaCgpCisgICAgICAgIHN0ZGluX2ZpbGUuc2VlaygwKQorCisgICAgcDQgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9ZXhwYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdGRpbl9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorCisgICAgcmVzdWx0ID0gW10KKyAgICB0cnk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBlbnRyeSA9IG1hcnNoYWwubG9hZChwNC5zdGRvdXQpCisgICAgICAgICAgICBpZiBieXRlcyBpcyBub3Qgc3RyOgorICAgICAgICAgICAgICAgICMgRGVjb2RlIHVubWFyc2hhbGxlZCBkaWN0IHRvIHVzZSBzdHIga2V5cyBhbmQgdmFsdWVzLCBleGNlcHQgZm9yOgorICAgICAgICAgICAgICAgICMgICAtIGBkYXRhYCB3aGljaCBtYXkgY29udGFpbiBhcmJpdHJhcnkgYmluYXJ5IGRhdGEKKyAgICAgICAgICAgICAgICAjICAgLSBgZGVwb3RGaWxlWzAtOV0qYCwgYHBhdGhgLCBvciBgY2xpZW50RmlsZWAgd2hpY2ggbWF5IGNvbnRhaW4gbm9uLVVURjggZW5jb2RlZCB0ZXh0CisgICAgICAgICAgICAgICAgZGVjb2RlZF9lbnRyeSA9IHt9CisgICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZW50cnkuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LmRlY29kZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJ5dGVzKSBhbmQgbm90IChrZXkgaW4gKCdkYXRhJywgJ3BhdGgnLCAnY2xpZW50RmlsZScpIG9yIGtleS5zdGFydHN3aXRoKCdkZXBvdEZpbGUnKSk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmRlY29kZSgpCisgICAgICAgICAgICAgICAgICAgIGRlY29kZWRfZW50cnlba2V5XSA9IHZhbHVlCisgICAgICAgICAgICAgICAgIyBQYXJzZSBvdXQgZGF0YSBpZiBpdCdzIGFuIGVycm9yIHJlc3BvbnNlCisgICAgICAgICAgICAgICAgaWYgZGVjb2RlZF9lbnRyeS5nZXQoJ2NvZGUnKSA9PSAnZXJyb3InIGFuZCAnZGF0YScgaW4gZGVjb2RlZF9lbnRyeToKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlZF9lbnRyeVsnZGF0YSddID0gZGVjb2RlZF9lbnRyeVsnZGF0YSddLmRlY29kZSgpCisgICAgICAgICAgICAgICAgZW50cnkgPSBkZWNvZGVkX2VudHJ5CisgICAgICAgICAgICBpZiBza2lwX2luZm86CisgICAgICAgICAgICAgICAgaWYgJ2NvZGUnIGluIGVudHJ5IGFuZCBlbnRyeVsnY29kZSddID09ICdpbmZvJzoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGNiIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNiKGVudHJ5KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGVudHJ5KQorICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGV4aXRDb2RlID0gcDQud2FpdCgpCisgICAgaWYgZXhpdENvZGUgIT0gMDoKKyAgICAgICAgaWYgZXJyb3JzX2FzX2V4Y2VwdGlvbnM6CisgICAgICAgICAgICBpZiBsZW4ocmVzdWx0KSA+IDA6CisgICAgICAgICAgICAgICAgZGF0YSA9IHJlc3VsdFswXS5nZXQoJ2RhdGEnKQorICAgICAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgICAgIG0gPSByZS5zZWFyY2goJ1RvbyBtYW55IHJvd3Mgc2Nhbm5lZCBcKG92ZXIgKFxkKylcKScsIGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IHJlLnNlYXJjaCgnUmVxdWVzdCB0b28gbGFyZ2UgXChvdmVyIChcZCspXCknLCBkYXRhKQorCisgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCA9IGludChtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUDRSZXF1ZXN0U2l6ZUV4Y2VwdGlvbihleGl0Q29kZSwgcmVzdWx0LCBsaW1pdCkKKworICAgICAgICAgICAgICAgIHJhaXNlIFA0U2VydmVyRXhjZXB0aW9uKGV4aXRDb2RlLCByZXN1bHQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFA0RXhjZXB0aW9uKGV4aXRDb2RlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW50cnkgPSB7fQorICAgICAgICAgICAgZW50cnlbInA0RXhpdENvZGUiXSA9IGV4aXRDb2RlCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGVudHJ5KQorCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgcDRDbWQoY21kKToKKyAgICBsaXN0ID0gcDRDbWRMaXN0KGNtZCkKKyAgICByZXN1bHQgPSB7fQorICAgIGZvciBlbnRyeSBpbiBsaXN0OgorICAgICAgICByZXN1bHQudXBkYXRlKGVudHJ5KQorICAgIHJldHVybiByZXN1bHQ7CisKK2RlZiBwNFdoZXJlKGRlcG90UGF0aCk6CisgICAgaWYgbm90IGRlcG90UGF0aC5lbmRzd2l0aCgiLyIpOgorICAgICAgICBkZXBvdFBhdGggKz0gIi8iCisgICAgZGVwb3RQYXRoTG9uZyA9IGRlcG90UGF0aCArICIuLi4iCisgICAgb3V0cHV0TGlzdCA9IHA0Q21kTGlzdChbIndoZXJlIiwgZGVwb3RQYXRoTG9uZ10pCisgICAgb3V0cHV0ID0gTm9uZQorICAgIGZvciBlbnRyeSBpbiBvdXRwdXRMaXN0OgorICAgICAgICBpZiAiZGVwb3RGaWxlIiBpbiBlbnRyeToKKyAgICAgICAgICAgICMgU2VhcmNoIGZvciB0aGUgYmFzZSBjbGllbnQgc2lkZSBkZXBvdCBwYXRoLCBhcyBsb25nIGFzIGl0IHN0YXJ0cyB3aXRoIHRoZSBicmFuY2gncyBQNCBwYXRoLgorICAgICAgICAgICAgIyBUaGUgYmFzZSBwYXRoIGFsd2F5cyBlbmRzIHdpdGggIi8uLi4iLgorICAgICAgICAgICAgZW50cnlfcGF0aCA9IGRlY29kZV9wYXRoKGVudHJ5WydkZXBvdEZpbGUnXSkKKyAgICAgICAgICAgIGlmIGVudHJ5X3BhdGguZmluZChkZXBvdFBhdGgpID09IDAgYW5kIGVudHJ5X3BhdGhbLTQ6XSA9PSAiLy4uLiI6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gZW50cnkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbGlmICJkYXRhIiBpbiBlbnRyeToKKyAgICAgICAgICAgIGRhdGEgPSBlbnRyeS5nZXQoImRhdGEiKQorICAgICAgICAgICAgc3BhY2UgPSBkYXRhLmZpbmQoIiAiKQorICAgICAgICAgICAgaWYgZGF0YVs6c3BhY2VdID09IGRlcG90UGF0aDoKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBlbnRyeQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgaWYgb3V0cHV0ID09IE5vbmU6CisgICAgICAgIHJldHVybiAiIgorICAgIGlmIG91dHB1dFsiY29kZSJdID09ICJlcnJvciI6CisgICAgICAgIHJldHVybiAiIgorICAgIGNsaWVudFBhdGggPSAiIgorICAgIGlmICJwYXRoIiBpbiBvdXRwdXQ6CisgICAgICAgIGNsaWVudFBhdGggPSBkZWNvZGVfcGF0aChvdXRwdXRbJ3BhdGgnXSkKKyAgICBlbGlmICJkYXRhIiBpbiBvdXRwdXQ6CisgICAgICAgIGRhdGEgPSBvdXRwdXQuZ2V0KCJkYXRhIikKKyAgICAgICAgbGFzdFNwYWNlID0gZGF0YS5yZmluZChiIiAiKQorICAgICAgICBjbGllbnRQYXRoID0gZGVjb2RlX3BhdGgoZGF0YVtsYXN0U3BhY2UgKyAxOl0pCisKKyAgICBpZiBjbGllbnRQYXRoLmVuZHN3aXRoKCIuLi4iKToKKyAgICAgICAgY2xpZW50UGF0aCA9IGNsaWVudFBhdGhbOi0zXQorICAgIHJldHVybiBjbGllbnRQYXRoCisKK2RlZiBjdXJyZW50R2l0QnJhbmNoKCk6CisgICAgcmV0dXJuIHJlYWRfcGlwZV90ZXh0KFsiZ2l0IiwgInN5bWJvbGljLXJlZiIsICItLXNob3J0IiwgIi1xIiwgIkhFQUQiXSkKKworZGVmIGlzVmFsaWRHaXREaXIocGF0aCk6CisgICAgcmV0dXJuIGdpdF9kaXIocGF0aCkgIT0gTm9uZQorCitkZWYgcGFyc2VSZXZpc2lvbihyZWYpOgorICAgIHJldHVybiByZWFkX3BpcGUoImdpdCByZXYtcGFyc2UgJXMiICUgcmVmKS5zdHJpcCgpCisKK2RlZiBicmFuY2hFeGlzdHMocmVmKToKKyAgICByZXYgPSByZWFkX3BpcGUoWyJnaXQiLCAicmV2LXBhcnNlIiwgIi1xIiwgIi0tdmVyaWZ5IiwgcmVmXSwKKyAgICAgICAgICAgICAgICAgICAgIGlnbm9yZV9lcnJvcj1UcnVlKQorICAgIHJldHVybiBsZW4ocmV2KSA+IDAKKworZGVmIGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdChjb21taXQpOgorICAgIGxvZ01lc3NhZ2UgPSAiIgorCisgICAgIyMgZml4bWU6IHRpdGxlIGlzIGZpcnN0IGxpbmUgb2YgY29tbWl0LCBub3QgMXN0IHBhcmFncmFwaC4KKyAgICBmb3VuZFRpdGxlID0gRmFsc2UKKyAgICBmb3IgbG9nIGluIHJlYWRfcGlwZV9saW5lcyhbImdpdCIsICJjYXQtZmlsZSIsICJjb21taXQiLCBjb21taXRdKToKKyAgICAgICBpZiBub3QgZm91bmRUaXRsZToKKyAgICAgICAgICAgaWYgbGVuKGxvZykgPT0gMToKKyAgICAgICAgICAgICAgIGZvdW5kVGl0bGUgPSBUcnVlCisgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICBsb2dNZXNzYWdlICs9IGxvZworICAgIHJldHVybiBsb2dNZXNzYWdlCisKK2RlZiBleHRyYWN0U2V0dGluZ3NHaXRMb2cobG9nKToKKyAgICB2YWx1ZXMgPSB7fQorICAgIGZvciBsaW5lIGluIGxvZy5zcGxpdCgiXG4iKToKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBtID0gcmUuc2VhcmNoIChyIl4gKlxbZ2l0LXA0OiAoLiopXF0kIiwgbGluZSkKKyAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGFzc2lnbm1lbnRzID0gbS5ncm91cCgxKS5zcGxpdCAoJzonKQorICAgICAgICBmb3IgYSBpbiBhc3NpZ25tZW50czoKKyAgICAgICAgICAgIHZhbHMgPSBhLnNwbGl0ICgnPScpCisgICAgICAgICAgICBrZXkgPSB2YWxzWzBdLnN0cmlwKCkKKyAgICAgICAgICAgIHZhbCA9ICgnPScuam9pbiAodmFsc1sxOl0pKS5zdHJpcCgpCisgICAgICAgICAgICBpZiB2YWwuZW5kc3dpdGggKCdcIicpIGFuZCB2YWwuc3RhcnRzd2l0aCgnIicpOgorICAgICAgICAgICAgICAgIHZhbCA9IHZhbFsxOi0xXQorCisgICAgICAgICAgICB2YWx1ZXNba2V5XSA9IHZhbAorCisgICAgcGF0aHMgPSB2YWx1ZXMuZ2V0KCJkZXBvdC1wYXRocyIpCisgICAgaWYgbm90IHBhdGhzOgorICAgICAgICBwYXRocyA9IHZhbHVlcy5nZXQoImRlcG90LXBhdGgiKQorICAgIGlmIHBhdGhzOgorICAgICAgICB2YWx1ZXNbJ2RlcG90LXBhdGhzJ10gPSBwYXRocy5zcGxpdCgnLCcpCisgICAgcmV0dXJuIHZhbHVlcworCitkZWYgZ2l0QnJhbmNoRXhpc3RzKGJyYW5jaCk6CisgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oWyJnaXQiLCAicmV2LXBhcnNlIiwgYnJhbmNoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKTsKKyAgICByZXR1cm4gcHJvYy53YWl0KCkgPT0gMDsKKworZGVmIGdpdFVwZGF0ZVJlZihyZWYsIG5ld3ZhbHVlKToKKyAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWyJnaXQiLCAidXBkYXRlLXJlZiIsIHJlZiwgbmV3dmFsdWVdKQorCitkZWYgZ2l0RGVsZXRlUmVmKHJlZik6CisgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsiZ2l0IiwgInVwZGF0ZS1yZWYiLCAiLWQiLCByZWZdKQorCitfZ2l0Q29uZmlnID0ge30KKworZGVmIGdpdENvbmZpZyhrZXksIHR5cGVTcGVjaWZpZXI9Tm9uZSk6CisgICAgaWYga2V5IG5vdCBpbiBfZ2l0Q29uZmlnOgorICAgICAgICBjbWQgPSBbICJnaXQiLCAiY29uZmlnIiBdCisgICAgICAgIGlmIHR5cGVTcGVjaWZpZXI6CisgICAgICAgICAgICBjbWQgKz0gWyB0eXBlU3BlY2lmaWVyIF0KKyAgICAgICAgY21kICs9IFsga2V5IF0KKyAgICAgICAgcyA9IHJlYWRfcGlwZShjbWQsIGlnbm9yZV9lcnJvcj1UcnVlKQorICAgICAgICBfZ2l0Q29uZmlnW2tleV0gPSBzLnN0cmlwKCkKKyAgICByZXR1cm4gX2dpdENvbmZpZ1trZXldCisKK2RlZiBnaXRDb25maWdCb29sKGtleSk6CisgICAgIiIiUmV0dXJuIGEgYm9vbCwgdXNpbmcgZ2l0IGNvbmZpZyAtLWJvb2wuICBJdCBpcyBUcnVlIG9ubHkgaWYgdGhlCisgICAgICAgdmFyaWFibGUgaXMgc2V0IHRvIHRydWUsIGFuZCBGYWxzZSBpZiBzZXQgdG8gZmFsc2Ugb3Igbm90IHByZXNlbnQKKyAgICAgICBpbiB0aGUgY29uZmlnLiIiIgorCisgICAgaWYga2V5IG5vdCBpbiBfZ2l0Q29uZmlnOgorICAgICAgICBfZ2l0Q29uZmlnW2tleV0gPSBnaXRDb25maWcoa2V5LCAnLS1ib29sJykgPT0gInRydWUiCisgICAgcmV0dXJuIF9naXRDb25maWdba2V5XQorCitkZWYgZ2l0Q29uZmlnSW50KGtleSk6CisgICAgaWYga2V5IG5vdCBpbiBfZ2l0Q29uZmlnOgorICAgICAgICBjbWQgPSBbICJnaXQiLCAiY29uZmlnIiwgIi0taW50Iiwga2V5IF0KKyAgICAgICAgcyA9IHJlYWRfcGlwZShjbWQsIGlnbm9yZV9lcnJvcj1UcnVlKQorICAgICAgICB2ID0gcy5zdHJpcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9naXRDb25maWdba2V5XSA9IGludChnaXRDb25maWcoa2V5LCAnLS1pbnQnKSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBfZ2l0Q29uZmlnW2tleV0gPSBOb25lCisgICAgcmV0dXJuIF9naXRDb25maWdba2V5XQorCitkZWYgZ2l0Q29uZmlnTGlzdChrZXkpOgorICAgIGlmIGtleSBub3QgaW4gX2dpdENvbmZpZzoKKyAgICAgICAgcyA9IHJlYWRfcGlwZShbImdpdCIsICJjb25maWciLCAiLS1nZXQtYWxsIiwga2V5XSwgaWdub3JlX2Vycm9yPVRydWUpCisgICAgICAgIF9naXRDb25maWdba2V5XSA9IHMuc3RyaXAoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgaWYgX2dpdENvbmZpZ1trZXldID09IFsnJ106CisgICAgICAgICAgICBfZ2l0Q29uZmlnW2tleV0gPSBbXQorICAgIHJldHVybiBfZ2l0Q29uZmlnW2tleV0KKworZGVmIHA0QnJhbmNoZXNJbkdpdChicmFuY2hlc0FyZUluUmVtb3Rlcz1UcnVlKToKKyAgICAiIiJGaW5kIGFsbCB0aGUgYnJhbmNoZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAicDQvIiwgbG9va2luZworICAgICAgIGluIHJlbW90ZXMgb3IgaGVhZHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBhcmd1bWVudC4gIFJldHVybgorICAgICAgIGEgZGljdGlvbmFyeSBvZiB7IGJyYW5jaDogcmV2aXNpb24gfSBmb3IgZWFjaCBvbmUgZm91bmQuCisgICAgICAgVGhlIGJyYW5jaCBuYW1lcyBhcmUgdGhlIHNob3J0IG5hbWVzLCB3aXRob3V0IGFueQorICAgICAgICJwNC8iIHByZWZpeC4iIiIKKworICAgIGJyYW5jaGVzID0ge30KKworICAgIGNtZGxpbmUgPSAiZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljICIKKyAgICBpZiBicmFuY2hlc0FyZUluUmVtb3RlczoKKyAgICAgICAgY21kbGluZSArPSAiLS1yZW1vdGVzIgorICAgIGVsc2U6CisgICAgICAgIGNtZGxpbmUgKz0gIi0tYnJhbmNoZXMiCisKKyAgICBmb3IgbGluZSBpbiByZWFkX3BpcGVfbGluZXMoY21kbGluZSk6CisgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKworICAgICAgICAjIG9ubHkgaW1wb3J0IHRvIHA0LworICAgICAgICBpZiBub3QgbGluZS5zdGFydHN3aXRoKCdwNC8nKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgc3BlY2lhbCBzeW1ib2xpYyByZWYgdG8gcDQvbWFzdGVyCisgICAgICAgIGlmIGxpbmUgPT0gInA0L0hFQUQiOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIHN0cmlwIG9mZiBwNC8gcHJlZml4CisgICAgICAgIGJyYW5jaCA9IGxpbmVbbGVuKCJwNC8iKTpdCisKKyAgICAgICAgYnJhbmNoZXNbYnJhbmNoXSA9IHBhcnNlUmV2aXNpb24obGluZSkKKworICAgIHJldHVybiBicmFuY2hlcworCitkZWYgYnJhbmNoX2V4aXN0cyhicmFuY2gpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiByZWYgbmFtZSByZWFsbHkgZXhpc3RzLiIiIgorCisgICAgY21kID0gWyAiZ2l0IiwgInJldi1wYXJzZSIsICItLXN5bWJvbGljIiwgIi0tdmVyaWZ5IiwgYnJhbmNoIF0KKyAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgb3V0LCBfID0gcC5jb21tdW5pY2F0ZSgpCisgICAgb3V0ID0gZGVjb2RlX3RleHRfc3RyZWFtKG91dCkKKyAgICBpZiBwLnJldHVybmNvZGU6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgICMgZXhwZWN0IGV4YWN0bHkgb25lIGxpbmUgb2Ygb3V0cHV0OiB0aGUgYnJhbmNoIG5hbWUKKyAgICByZXR1cm4gb3V0LnJzdHJpcCgpID09IGJyYW5jaAorCitkZWYgZmluZFVwc3RyZWFtQnJhbmNoUG9pbnQoaGVhZCA9ICJIRUFEIik6CisgICAgYnJhbmNoZXMgPSBwNEJyYW5jaGVzSW5HaXQoKQorICAgICMgbWFwIGZyb20gZGVwb3QtcGF0aCB0byBicmFuY2ggbmFtZQorICAgIGJyYW5jaEJ5RGVwb3RQYXRoID0ge30KKyAgICBmb3IgYnJhbmNoIGluIGJyYW5jaGVzLmtleXMoKToKKyAgICAgICAgdGlwID0gYnJhbmNoZXNbYnJhbmNoXQorICAgICAgICBsb2cgPSBleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQodGlwKQorICAgICAgICBzZXR0aW5ncyA9IGV4dHJhY3RTZXR0aW5nc0dpdExvZyhsb2cpCisgICAgICAgIGlmICJkZXBvdC1wYXRocyIgaW4gc2V0dGluZ3M6CisgICAgICAgICAgICBwYXRocyA9ICIsIi5qb2luKHNldHRpbmdzWyJkZXBvdC1wYXRocyJdKQorICAgICAgICAgICAgYnJhbmNoQnlEZXBvdFBhdGhbcGF0aHNdID0gInJlbW90ZXMvcDQvIiArIGJyYW5jaAorCisgICAgc2V0dGluZ3MgPSBOb25lCisgICAgcGFyZW50ID0gMAorICAgIHdoaWxlIHBhcmVudCA8IDY1NTM1OgorICAgICAgICBjb21taXQgPSBoZWFkICsgIn4lcyIgJSBwYXJlbnQKKyAgICAgICAgbG9nID0gZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KGNvbW1pdCkKKyAgICAgICAgc2V0dGluZ3MgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2cobG9nKQorICAgICAgICBpZiAiZGVwb3QtcGF0aHMiIGluIHNldHRpbmdzOgorICAgICAgICAgICAgcGF0aHMgPSAiLCIuam9pbihzZXR0aW5nc1siZGVwb3QtcGF0aHMiXSkKKyAgICAgICAgICAgIGlmIHBhdGhzIGluIGJyYW5jaEJ5RGVwb3RQYXRoOgorICAgICAgICAgICAgICAgIHJldHVybiBbYnJhbmNoQnlEZXBvdFBhdGhbcGF0aHNdLCBzZXR0aW5nc10KKworICAgICAgICBwYXJlbnQgPSBwYXJlbnQgKyAxCisKKyAgICByZXR1cm4gWyIiLCBzZXR0aW5nc10KKworZGVmIGNyZWF0ZU9yVXBkYXRlQnJhbmNoZXNGcm9tT3JpZ2luKGxvY2FsUmVmUHJlZml4ID0gInJlZnMvcmVtb3Rlcy9wNC8iLCBzaWxlbnQ9VHJ1ZSk6CisgICAgaWYgbm90IHNpbGVudDoKKyAgICAgICAgcHJpbnQoIkNyZWF0aW5nL3VwZGF0aW5nIGJyYW5jaChlcykgaW4gJXMgYmFzZWQgb24gb3JpZ2luIGJyYW5jaChlcykiCisgICAgICAgICAgICAgICAlIGxvY2FsUmVmUHJlZml4KQorCisgICAgb3JpZ2luUHJlZml4ID0gIm9yaWdpbi9wNC8iCisKKyAgICBmb3IgbGluZSBpbiByZWFkX3BpcGVfbGluZXMoImdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYyAtLXJlbW90ZXMiKToKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiAobm90IGxpbmUuc3RhcnRzd2l0aChvcmlnaW5QcmVmaXgpKSBvciBsaW5lLmVuZHN3aXRoKCJIRUFEIik6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGhlYWROYW1lID0gbGluZVtsZW4ob3JpZ2luUHJlZml4KTpdCisgICAgICAgIHJlbW90ZUhlYWQgPSBsb2NhbFJlZlByZWZpeCArIGhlYWROYW1lCisgICAgICAgIG9yaWdpbkhlYWQgPSBsaW5lCisKKyAgICAgICAgb3JpZ2luYWwgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2coZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KG9yaWdpbkhlYWQpKQorICAgICAgICBpZiAoJ2RlcG90LXBhdGhzJyBub3QgaW4gb3JpZ2luYWwKKyAgICAgICAgICAgIG9yICdjaGFuZ2UnIG5vdCBpbiBvcmlnaW5hbCk6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHVwZGF0ZSA9IEZhbHNlCisgICAgICAgIGlmIG5vdCBnaXRCcmFuY2hFeGlzdHMocmVtb3RlSGVhZCk6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCJjcmVhdGluZyAlcyIgJSByZW1vdGVIZWFkKQorICAgICAgICAgICAgdXBkYXRlID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2V0dGluZ3MgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2coZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KHJlbW90ZUhlYWQpKQorICAgICAgICAgICAgaWYgJ2NoYW5nZScgaW4gc2V0dGluZ3M6CisgICAgICAgICAgICAgICAgaWYgc2V0dGluZ3NbJ2RlcG90LXBhdGhzJ10gPT0gb3JpZ2luYWxbJ2RlcG90LXBhdGhzJ106CisgICAgICAgICAgICAgICAgICAgIG9yaWdpblA0Q2hhbmdlID0gaW50KG9yaWdpbmFsWydjaGFuZ2UnXSkKKyAgICAgICAgICAgICAgICAgICAgcDRDaGFuZ2UgPSBpbnQoc2V0dGluZ3NbJ2NoYW5nZSddKQorICAgICAgICAgICAgICAgICAgICBpZiBvcmlnaW5QNENoYW5nZSA+IHA0Q2hhbmdlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiVzICglcykgaXMgbmV3ZXIgdGhhbiAlcyAoJXMpLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVwZGF0aW5nIHA0IGJyYW5jaCBmcm9tIG9yaWdpbi4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAob3JpZ2luSGVhZCwgb3JpZ2luUDRDaGFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlSGVhZCwgcDRDaGFuZ2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJJZ25vcmluZzogJXMgd2FzIGltcG9ydGVkIGZyb20gJXMgd2hpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIHdhcyBpbXBvcnRlZCBmcm9tICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAob3JpZ2luSGVhZCwgJywnLmpvaW4ob3JpZ2luYWxbJ2RlcG90LXBhdGhzJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlSGVhZCwgJywnLmpvaW4oc2V0dGluZ3NbJ2RlcG90LXBhdGhzJ10pKSkKKworICAgICAgICBpZiB1cGRhdGU6CisgICAgICAgICAgICBzeXN0ZW0oImdpdCB1cGRhdGUtcmVmICVzICVzIiAlIChyZW1vdGVIZWFkLCBvcmlnaW5IZWFkKSkKKworZGVmIG9yaWdpblA0QnJhbmNoZXNFeGlzdCgpOgorICAgICAgICByZXR1cm4gZ2l0QnJhbmNoRXhpc3RzKCJvcmlnaW4iKSBvciBnaXRCcmFuY2hFeGlzdHMoIm9yaWdpbi9wNCIpIG9yIGdpdEJyYW5jaEV4aXN0cygib3JpZ2luL3A0L21hc3RlciIpCisKKworZGVmIHA0UGFyc2VOdW1lcmljQ2hhbmdlUmFuZ2UocGFydHMpOgorICAgIGNoYW5nZVN0YXJ0ID0gaW50KHBhcnRzWzBdWzE6XSkKKyAgICBpZiBwYXJ0c1sxXSA9PSAnI2hlYWQnOgorICAgICAgICBjaGFuZ2VFbmQgPSBwNF9sYXN0X2NoYW5nZSgpCisgICAgZWxzZToKKyAgICAgICAgY2hhbmdlRW5kID0gaW50KHBhcnRzWzFdKQorCisgICAgcmV0dXJuIChjaGFuZ2VTdGFydCwgY2hhbmdlRW5kKQorCitkZWYgY2hvb3NlQmxvY2tTaXplKGJsb2NrU2l6ZSk6CisgICAgaWYgYmxvY2tTaXplOgorICAgICAgICByZXR1cm4gYmxvY2tTaXplCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRCbG9ja1NpemUKKworZGVmIHA0Q2hhbmdlc0ZvclBhdGhzKGRlcG90UGF0aHMsIGNoYW5nZVJhbmdlLCByZXF1ZXN0ZWRCbG9ja1NpemUpOgorICAgIGFzc2VydCBkZXBvdFBhdGhzCisKKyAgICAjIFBhcnNlIHRoZSBjaGFuZ2UgcmFuZ2UgaW50byBzdGFydCBhbmQgZW5kLiBUcnkgdG8gZmluZCBpbnRlZ2VyCisgICAgIyByZXZpc2lvbiByYW5nZXMgYXMgdGhlc2UgY2FuIGJlIGJyb2tlbiB1cCBpbnRvIGJsb2NrcyB0byBhdm9pZAorICAgICMgaGl0dGluZyBzZXJ2ZXItc2lkZSBsaW1pdHMgKG1heHJvd3MsIG1heHNjYW5yZXN1bHRzKS4gQnV0IGlmCisgICAgIyB0aGF0IGRvZXNuJ3Qgd29yaywgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSByYXcgcmV2aXNpb24gc3BlY2lmaWVyCisgICAgIyBzdHJpbmdzLCB3aXRob3V0IHVzaW5nIGJsb2NrIG1vZGUuCisKKyAgICBpZiBjaGFuZ2VSYW5nZSBpcyBOb25lIG9yIGNoYW5nZVJhbmdlID09ICcnOgorICAgICAgICBjaGFuZ2VTdGFydCA9IDEKKyAgICAgICAgY2hhbmdlRW5kID0gcDRfbGFzdF9jaGFuZ2UoKQorICAgICAgICBibG9ja19zaXplID0gY2hvb3NlQmxvY2tTaXplKHJlcXVlc3RlZEJsb2NrU2l6ZSkKKyAgICBlbHNlOgorICAgICAgICBwYXJ0cyA9IGNoYW5nZVJhbmdlLnNwbGl0KCcsJykKKyAgICAgICAgYXNzZXJ0IGxlbihwYXJ0cykgPT0gMgorICAgICAgICB0cnk6CisgICAgICAgICAgICAoY2hhbmdlU3RhcnQsIGNoYW5nZUVuZCkgPSBwNFBhcnNlTnVtZXJpY0NoYW5nZVJhbmdlKHBhcnRzKQorICAgICAgICAgICAgYmxvY2tfc2l6ZSA9IGNob29zZUJsb2NrU2l6ZShyZXF1ZXN0ZWRCbG9ja1NpemUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgY2hhbmdlU3RhcnQgPSBwYXJ0c1swXVsxOl0KKyAgICAgICAgICAgIGNoYW5nZUVuZCA9IHBhcnRzWzFdCisgICAgICAgICAgICBpZiByZXF1ZXN0ZWRCbG9ja1NpemU6CisgICAgICAgICAgICAgICAgZGllKCJjYW5ub3QgdXNlIC0tY2hhbmdlcy1ibG9jay1zaXplIHdpdGggbm9uLW51bWVyaWMgcmV2aXNpb25zIikKKyAgICAgICAgICAgIGJsb2NrX3NpemUgPSBOb25lCisKKyAgICBjaGFuZ2VzID0gc2V0KCkKKworICAgICMgUmV0cmlldmUgY2hhbmdlcyBhIGJsb2NrIGF0IGEgdGltZSwgdG8gcHJldmVudCBydW5uaW5nCisgICAgIyBpbnRvIGEgTWF4UmVzdWx0cy9NYXhTY2FuUm93cyBlcnJvciBmcm9tIHRoZSBzZXJ2ZXIuIElmCisgICAgIyB3ZSBfZG9fIGhpdCBvbmUgb2YgdGhvc2UgZXJyb3JzLCB0dXJuIGRvd24gdGhlIGJsb2NrIHNpemUKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIGNtZCA9IFsnY2hhbmdlcyddCisKKyAgICAgICAgaWYgYmxvY2tfc2l6ZToKKyAgICAgICAgICAgIGVuZCA9IG1pbihjaGFuZ2VFbmQsIGNoYW5nZVN0YXJ0ICsgYmxvY2tfc2l6ZSkKKyAgICAgICAgICAgIHJldmlzaW9uUmFuZ2UgPSAiJWQsJWQiICUgKGNoYW5nZVN0YXJ0LCBlbmQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXZpc2lvblJhbmdlID0gIiVzLCVzIiAlIChjaGFuZ2VTdGFydCwgY2hhbmdlRW5kKQorCisgICAgICAgIGZvciBwIGluIGRlcG90UGF0aHM6CisgICAgICAgICAgICBjbWQgKz0gWyIlcy4uLkAlcyIgJSAocCwgcmV2aXNpb25SYW5nZSldCisKKyAgICAgICAgIyBmZXRjaCB0aGUgY2hhbmdlcworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBwNENtZExpc3QoY21kLCBlcnJvcnNfYXNfZXhjZXB0aW9ucz1UcnVlKQorICAgICAgICBleGNlcHQgUDRSZXF1ZXN0U2l6ZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgaWYgbm90IGJsb2NrX3NpemU6CisgICAgICAgICAgICAgICAgYmxvY2tfc2l6ZSA9IGUubGltaXQKKyAgICAgICAgICAgIGVsaWYgYmxvY2tfc2l6ZSA+IGUubGltaXQ6CisgICAgICAgICAgICAgICAgYmxvY2tfc2l6ZSA9IGUubGltaXQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmxvY2tfc2l6ZSA9IG1heCgyLCBibG9ja19zaXplIC8vIDIpCisKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50KCJibG9jayBzaXplIGVycm9yLCByZXRyeWluZyB3aXRoIGJsb2NrIHNpemUgezB9Ii5mb3JtYXQoYmxvY2tfc2l6ZSkpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBleGNlcHQgUDRFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGRpZSgnRXJyb3IgcmV0cmlldmluZyBjaGFuZ2VzIGRlc2NyaXB0aW9uICh7MH0pJy5mb3JtYXQoZS5wNEV4aXRDb2RlKSkKKworICAgICAgICAjIEluc2VydCBjaGFuZ2VzIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIKKyAgICAgICAgZm9yIGVudHJ5IGluIHJldmVyc2VkKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAnY2hhbmdlJyBub3QgaW4gZW50cnk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNoYW5nZXMuYWRkKGludChlbnRyeVsnY2hhbmdlJ10pKQorCisgICAgICAgIGlmIG5vdCBibG9ja19zaXplOgorICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBlbmQgPj0gY2hhbmdlRW5kOgorICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBjaGFuZ2VTdGFydCA9IGVuZCArIDEKKworICAgIGNoYW5nZXMgPSBzb3J0ZWQoY2hhbmdlcykKKyAgICByZXR1cm4gY2hhbmdlcworCitkZWYgcDRQYXRoU3RhcnRzV2l0aChwYXRoLCBwcmVmaXgpOgorICAgICMgVGhpcyBtZXRob2QgdHJpZXMgdG8gcmVtZWR5IGEgcG90ZW50aWFsIG1peGVkLWNhc2UgaXNzdWU6CisgICAgIworICAgICMgSWYgVXNlckEgYWRkcyAgLy9kZXBvdC9EaXJBL2ZpbGUxCisgICAgIyBhbmQgVXNlckIgYWRkcyAvL2RlcG90L2RpcmEvZmlsZTIKKyAgICAjCisgICAgIyB3ZSBtYXkgb3IgbWF5IG5vdCBoYXZlIGEgcHJvYmxlbS4gSWYgeW91IGhhdmUgY29yZS5pZ25vcmVjYXNlPXRydWUsCisgICAgIyB3ZSB0cmVhdCBEaXJBIGFuZCBkaXJhIGFzIHRoZSBzYW1lIGRpcmVjdG9yeQorICAgIGlmIGdpdENvbmZpZ0Jvb2woImNvcmUuaWdub3JlY2FzZSIpOgorICAgICAgICByZXR1cm4gcGF0aC5sb3dlcigpLnN0YXJ0c3dpdGgocHJlZml4Lmxvd2VyKCkpCisgICAgcmV0dXJuIHBhdGguc3RhcnRzd2l0aChwcmVmaXgpCisKK2RlZiBnZXRDbGllbnRTcGVjKCk6CisgICAgIiIiTG9vayBhdCB0aGUgcDQgY2xpZW50IHNwZWMsIGNyZWF0ZSBhIFZpZXcoKSBvYmplY3QgdGhhdCBjb250YWlucworICAgICAgIGFsbCB0aGUgbWFwcGluZ3MsIGFuZCByZXR1cm4gaXQuIiIiCisKKyAgICBzcGVjTGlzdCA9IHA0Q21kTGlzdCgiY2xpZW50IC1vIikKKyAgICBpZiBsZW4oc3BlY0xpc3QpICE9IDE6CisgICAgICAgIGRpZSgnT3V0cHV0IGZyb20gImNsaWVudCAtbyIgaXMgJWQgbGluZXMsIGV4cGVjdGluZyAxJyAlCisgICAgICAgICAgICBsZW4oc3BlY0xpc3QpKQorCisgICAgIyBkaWN0aW9uYXJ5IG9mIGFsbCBjbGllbnQgcGFyYW1ldGVycworICAgIGVudHJ5ID0gc3BlY0xpc3RbMF0KKworICAgICMgdGhlIC8vY2xpZW50LyBuYW1lCisgICAgY2xpZW50X25hbWUgPSBlbnRyeVsiQ2xpZW50Il0KKworICAgICMganVzdCB0aGUga2V5cyB0aGF0IHN0YXJ0IHdpdGggIlZpZXciCisgICAgdmlld19rZXlzID0gWyBrIGZvciBrIGluIGVudHJ5LmtleXMoKSBpZiBrLnN0YXJ0c3dpdGgoIlZpZXciKSBdCisKKyAgICAjIGhvbGQgdGhpcyBuZXcgVmlldworICAgIHZpZXcgPSBWaWV3KGNsaWVudF9uYW1lKQorCisgICAgIyBhcHBlbmQgdGhlIGxpbmVzLCBpbiBvcmRlciwgdG8gdGhlIHZpZXcKKyAgICBmb3Igdmlld19udW0gaW4gcmFuZ2UobGVuKHZpZXdfa2V5cykpOgorICAgICAgICBrID0gIlZpZXclZCIgJSB2aWV3X251bQorICAgICAgICBpZiBrIG5vdCBpbiB2aWV3X2tleXM6CisgICAgICAgICAgICBkaWUoIkV4cGVjdGVkIHZpZXcga2V5ICVzIG1pc3NpbmciICUgaykKKyAgICAgICAgdmlldy5hcHBlbmQoZW50cnlba10pCisKKyAgICByZXR1cm4gdmlldworCitkZWYgZ2V0Q2xpZW50Um9vdCgpOgorICAgICIiIkdyYWIgdGhlIGNsaWVudCBkaXJlY3RvcnkuIiIiCisKKyAgICBvdXRwdXQgPSBwNENtZExpc3QoImNsaWVudCAtbyIpCisgICAgaWYgbGVuKG91dHB1dCkgIT0gMToKKyAgICAgICAgZGllKCdPdXRwdXQgZnJvbSAiY2xpZW50IC1vIiBpcyAlZCBsaW5lcywgZXhwZWN0aW5nIDEnICUgbGVuKG91dHB1dCkpCisKKyAgICBlbnRyeSA9IG91dHB1dFswXQorICAgIGlmICJSb290IiBub3QgaW4gZW50cnk6CisgICAgICAgIGRpZSgnQ2xpZW50IGhhcyBubyAiUm9vdCInKQorCisgICAgcmV0dXJuIGVudHJ5WyJSb290Il0KKworIworIyBQNCB3aWxkY2FyZHMgYXJlIG5vdCBhbGxvd2VkIGluIGZpbGVuYW1lcy4gIFA0IGNvbXBsYWlucworIyBpZiB5b3Ugc2ltcGx5IGFkZCB0aGVtLCBidXQgeW91IGNhbiBmb3JjZSBpdCB3aXRoICItZiIsIGluCisjIHdoaWNoIGNhc2UgaXQgdHJhbnNsYXRlcyB0aGVtIGludG8gJXh4IGVuY29kaW5nIGludGVybmFsbHkuCisjCitkZWYgd2lsZGNhcmRfZGVjb2RlKHBhdGgpOgorICAgICMgU2VhcmNoIGZvciBhbmQgZml4IGp1c3QgdGhlc2UgZm91ciBjaGFyYWN0ZXJzLiAgRG8gJSBsYXN0IHNvCisgICAgIyB0aGF0IGZpeGluZyBpdCBkb2VzIG5vdCBpbmFkdmVydGVudGx5IGNyZWF0ZSBuZXcgJS1lc2NhcGVzLgorICAgICMgQ2Fubm90IGhhdmUgKiBpbiBhIGZpbGVuYW1lIGluIHdpbmRvd3M7IHVudGVzdGVkIGFzIHRvCisgICAgIyB3aGF0IHA0IHdvdWxkIGRvIGluIHN1Y2ggYSBjYXNlLgorICAgIGlmIG5vdCBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAiV2luZG93cyI6CisgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoIiUyQSIsICIqIikKKyAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCIlMjMiLCAiIyIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCIlNDAiLCAiQCIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCIlMjUiLCAiJSIpCisgICAgcmV0dXJuIHBhdGgKKworZGVmIHdpbGRjYXJkX2VuY29kZShwYXRoKToKKyAgICAjIGRvICUgZmlyc3QgdG8gYXZvaWQgZG91YmxlLWVuY29kaW5nIHRoZSAlcyBpbnRyb2R1Y2VkIGhlcmUKKyAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCIlIiwgIiUyNSIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCIqIiwgIiUyQSIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCIjIiwgIiUyMyIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCJAIiwgIiU0MCIpCisgICAgcmV0dXJuIHBhdGgKKworZGVmIHdpbGRjYXJkX3ByZXNlbnQocGF0aCk6CisgICAgbSA9IHJlLnNlYXJjaCgiWyojQCVdIiwgcGF0aCkKKyAgICByZXR1cm4gbSBpcyBub3QgTm9uZQorCitjbGFzcyBMYXJnZUZpbGVTeXN0ZW0ob2JqZWN0KToKKyAgICAiIiJCYXNlIGNsYXNzIGZvciBsYXJnZSBmaWxlIHN5c3RlbSBzdXBwb3J0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlVG9HaXRTdHJlYW0pOgorICAgICAgICBzZWxmLmxhcmdlRmlsZXMgPSBzZXQoKQorICAgICAgICBzZWxmLndyaXRlVG9HaXRTdHJlYW0gPSB3cml0ZVRvR2l0U3RyZWFtCisKKyAgICBkZWYgZ2VuZXJhdGVQb2ludGVyKHNlbGYsIGNsb25lRGVzdGluYXRpb24sIGNvbnRlbnRGaWxlKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjb250ZW50IG9mIGEgcG9pbnRlciBmaWxlIHRoYXQgaXMgc3RvcmVkIGluIEdpdCBpbnN0ZWFkIG9mCisgICAgICAgICAgIHRoZSBhY3R1YWwgY29udGVudC4iIiIKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCAiTWV0aG9kICdnZW5lcmF0ZVBvaW50ZXInIHJlcXVpcmVkIGluICIgKyBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgZGVmIHB1c2hGaWxlKHNlbGYsIGxvY2FsTGFyZ2VGaWxlKToKKyAgICAgICAgIiIiUHVzaCB0aGUgYWN0dWFsIGNvbnRlbnQgd2hpY2ggaXMgbm90IHN0b3JlZCBpbiB0aGUgR2l0IHJlcG9zaXRvcnkgdG8KKyAgICAgICAgICAgYSBzZXJ2ZXIuIiIiCisgICAgICAgIGFzc2VydCBGYWxzZSwgIk1ldGhvZCAncHVzaEZpbGUnIHJlcXVpcmVkIGluICIgKyBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgZGVmIGhhc0xhcmdlRmlsZUV4dGVuc2lvbihzZWxmLCByZWxQYXRoKToKKyAgICAgICAgcmV0dXJuIGZ1bmN0b29scy5yZWR1Y2UoCisgICAgICAgICAgICBsYW1iZGEgYSwgYjogYSBvciBiLAorICAgICAgICAgICAgW3JlbFBhdGguZW5kc3dpdGgoJy4nICsgZSkgZm9yIGUgaW4gZ2l0Q29uZmlnTGlzdCgnZ2l0LXA0LmxhcmdlRmlsZUV4dGVuc2lvbnMnKV0sCisgICAgICAgICAgICBGYWxzZQorICAgICAgICApCisKKyAgICBkZWYgZ2VuZXJhdGVUZW1wRmlsZShzZWxmLCBjb250ZW50cyk6CisgICAgICAgIGNvbnRlbnRGaWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKHByZWZpeD0nZ2l0LXA0LWxhcmdlLWZpbGUnLCBkZWxldGU9RmFsc2UpCisgICAgICAgIGZvciBkIGluIGNvbnRlbnRzOgorICAgICAgICAgICAgY29udGVudEZpbGUud3JpdGUoZCkKKyAgICAgICAgY29udGVudEZpbGUuY2xvc2UoKQorICAgICAgICByZXR1cm4gY29udGVudEZpbGUubmFtZQorCisgICAgZGVmIGV4Y2VlZHNMYXJnZUZpbGVUaHJlc2hvbGQoc2VsZiwgcmVsUGF0aCwgY29udGVudHMpOgorICAgICAgICBpZiBnaXRDb25maWdJbnQoJ2dpdC1wNC5sYXJnZUZpbGVUaHJlc2hvbGQnKToKKyAgICAgICAgICAgIGNvbnRlbnRzU2l6ZSA9IHN1bShsZW4oZCkgZm9yIGQgaW4gY29udGVudHMpCisgICAgICAgICAgICBpZiBjb250ZW50c1NpemUgPiBnaXRDb25maWdJbnQoJ2dpdC1wNC5sYXJnZUZpbGVUaHJlc2hvbGQnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBnaXRDb25maWdJbnQoJ2dpdC1wNC5sYXJnZUZpbGVDb21wcmVzc2VkVGhyZXNob2xkJyk6CisgICAgICAgICAgICBjb250ZW50c1NpemUgPSBzdW0obGVuKGQpIGZvciBkIGluIGNvbnRlbnRzKQorICAgICAgICAgICAgaWYgY29udGVudHNTaXplIDw9IGdpdENvbmZpZ0ludCgnZ2l0LXA0LmxhcmdlRmlsZUNvbXByZXNzZWRUaHJlc2hvbGQnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGNvbnRlbnRUZW1wRmlsZSA9IHNlbGYuZ2VuZXJhdGVUZW1wRmlsZShjb250ZW50cykKKyAgICAgICAgICAgIGNvbXByZXNzZWRDb250ZW50RmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShwcmVmaXg9J2dpdC1wNC1sYXJnZS1maWxlJywgZGVsZXRlPVRydWUpCisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShjb21wcmVzc2VkQ29udGVudEZpbGUsIG1vZGU9J3cnKSBhcyB6ZjoKKyAgICAgICAgICAgICAgICB6Zi53cml0ZShjb250ZW50VGVtcEZpbGUsIGNvbXByZXNzX3R5cGU9emlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgICAgICAgICAgICAgY29tcHJlc3NlZENvbnRlbnRzU2l6ZSA9IHpmLmluZm9saXN0KClbMF0uY29tcHJlc3Nfc2l6ZQorICAgICAgICAgICAgb3MucmVtb3ZlKGNvbnRlbnRUZW1wRmlsZSkKKyAgICAgICAgICAgIGlmIGNvbXByZXNzZWRDb250ZW50c1NpemUgPiBnaXRDb25maWdJbnQoJ2dpdC1wNC5sYXJnZUZpbGVDb21wcmVzc2VkVGhyZXNob2xkJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgYWRkTGFyZ2VGaWxlKHNlbGYsIHJlbFBhdGgpOgorICAgICAgICBzZWxmLmxhcmdlRmlsZXMuYWRkKHJlbFBhdGgpCisKKyAgICBkZWYgcmVtb3ZlTGFyZ2VGaWxlKHNlbGYsIHJlbFBhdGgpOgorICAgICAgICBzZWxmLmxhcmdlRmlsZXMucmVtb3ZlKHJlbFBhdGgpCisKKyAgICBkZWYgaXNMYXJnZUZpbGUoc2VsZiwgcmVsUGF0aCk6CisgICAgICAgIHJldHVybiByZWxQYXRoIGluIHNlbGYubGFyZ2VGaWxlcworCisgICAgZGVmIHByb2Nlc3NDb250ZW50KHNlbGYsIGdpdF9tb2RlLCByZWxQYXRoLCBjb250ZW50cyk6CisgICAgICAgICIiIlByb2Nlc3NlcyB0aGUgY29udGVudCBvZiBnaXQgZmFzdCBpbXBvcnQuIFRoaXMgbWV0aG9kIGRlY2lkZXMgaWYgYQorICAgICAgICAgICBmaWxlIGlzIHN0b3JlZCBpbiB0aGUgbGFyZ2UgZmlsZSBzeXN0ZW0gYW5kIGhhbmRsZXMgYWxsIG5lY2Vzc2FyeQorICAgICAgICAgICBzdGVwcy4iIiIKKyAgICAgICAgaWYgc2VsZi5leGNlZWRzTGFyZ2VGaWxlVGhyZXNob2xkKHJlbFBhdGgsIGNvbnRlbnRzKSBvciBzZWxmLmhhc0xhcmdlRmlsZUV4dGVuc2lvbihyZWxQYXRoKToKKyAgICAgICAgICAgIGNvbnRlbnRUZW1wRmlsZSA9IHNlbGYuZ2VuZXJhdGVUZW1wRmlsZShjb250ZW50cykKKyAgICAgICAgICAgIChwb2ludGVyX2dpdF9tb2RlLCBjb250ZW50cywgbG9jYWxMYXJnZUZpbGUpID0gc2VsZi5nZW5lcmF0ZVBvaW50ZXIoY29udGVudFRlbXBGaWxlKQorICAgICAgICAgICAgaWYgcG9pbnRlcl9naXRfbW9kZToKKyAgICAgICAgICAgICAgICBnaXRfbW9kZSA9IHBvaW50ZXJfZ2l0X21vZGUKKyAgICAgICAgICAgIGlmIGxvY2FsTGFyZ2VGaWxlOgorICAgICAgICAgICAgICAgICMgTW92ZSB0ZW1wIGZpbGUgdG8gZmluYWwgbG9jYXRpb24gaW4gbGFyZ2UgZmlsZSBzeXN0ZW0KKyAgICAgICAgICAgICAgICBsYXJnZUZpbGVEaXIgPSBvcy5wYXRoLmRpcm5hbWUobG9jYWxMYXJnZUZpbGUpCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIobGFyZ2VGaWxlRGlyKToKKyAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMobGFyZ2VGaWxlRGlyKQorICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKGNvbnRlbnRUZW1wRmlsZSwgbG9jYWxMYXJnZUZpbGUpCisgICAgICAgICAgICAgICAgc2VsZi5hZGRMYXJnZUZpbGUocmVsUGF0aCkKKyAgICAgICAgICAgICAgICBpZiBnaXRDb25maWdCb29sKCdnaXQtcDQubGFyZ2VGaWxlUHVzaCcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnB1c2hGaWxlKGxvY2FsTGFyZ2VGaWxlKQorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzIG1vdmVkIHRvIGxhcmdlIGZpbGUgc3lzdGVtICglcylcbiIgJSAocmVsUGF0aCwgbG9jYWxMYXJnZUZpbGUpKQorICAgICAgICByZXR1cm4gKGdpdF9tb2RlLCBjb250ZW50cykKKworY2xhc3MgTW9ja0xGUyhMYXJnZUZpbGVTeXN0ZW0pOgorICAgICIiIk1vY2sgbGFyZ2UgZmlsZSBzeXN0ZW0gZm9yIHRlc3RpbmcuIiIiCisKKyAgICBkZWYgZ2VuZXJhdGVQb2ludGVyKHNlbGYsIGNvbnRlbnRGaWxlKToKKyAgICAgICAgIiIiVGhlIHBvaW50ZXIgY29udGVudCBpcyB0aGUgb3JpZ2luYWwgY29udGVudCBwcmVmaXhlZCB3aXRoICJwb2ludGVyLSIuCisgICAgICAgICAgIFRoZSBsb2NhbCBmaWxlbmFtZSBvZiB0aGUgbGFyZ2UgZmlsZSBzdG9yYWdlIGlzIGRlcml2ZWQgZnJvbSB0aGUgZmlsZSBjb250ZW50LgorICAgICAgICAgICAiIiIKKyAgICAgICAgd2l0aCBvcGVuKGNvbnRlbnRGaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBjb250ZW50ID0gbmV4dChmKQorICAgICAgICAgICAgZ2l0TW9kZSA9ICcxMDA2NDQnCisgICAgICAgICAgICBwb2ludGVyQ29udGVudHMgPSAncG9pbnRlci0nICsgY29udGVudAorICAgICAgICAgICAgbG9jYWxMYXJnZUZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICcuZ2l0JywgJ21vY2stc3RvcmFnZScsICdsb2NhbCcsIGNvbnRlbnRbOi0xXSkKKyAgICAgICAgICAgIHJldHVybiAoZ2l0TW9kZSwgcG9pbnRlckNvbnRlbnRzLCBsb2NhbExhcmdlRmlsZSkKKworICAgIGRlZiBwdXNoRmlsZShzZWxmLCBsb2NhbExhcmdlRmlsZSk6CisgICAgICAgICIiIlRoZSByZW1vdGUgZmlsZW5hbWUgb2YgdGhlIGxhcmdlIGZpbGUgc3RvcmFnZSBpcyB0aGUgc2FtZSBhcyB0aGUgbG9jYWwKKyAgICAgICAgICAgb25lIGJ1dCBpbiBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICIiIgorICAgICAgICByZW1vdGVQYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShsb2NhbExhcmdlRmlsZSksICcuLicsICdyZW1vdGUnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmVtb3RlUGF0aCk6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhyZW1vdGVQYXRoKQorICAgICAgICBzaHV0aWwuY29weWZpbGUobG9jYWxMYXJnZUZpbGUsIG9zLnBhdGguam9pbihyZW1vdGVQYXRoLCBvcy5wYXRoLmJhc2VuYW1lKGxvY2FsTGFyZ2VGaWxlKSkpCisKK2NsYXNzIEdpdExGUyhMYXJnZUZpbGVTeXN0ZW0pOgorICAgICIiIkdpdCBMRlMgYXMgYmFja2VuZCBmb3IgdGhlIGdpdC1wNCBsYXJnZSBmaWxlIHN5c3RlbS4KKyAgICAgICBTZWUgaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vIGZvciBkZXRhaWxzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgTGFyZ2VGaWxlU3lzdGVtLl9faW5pdF9fKHNlbGYsICphcmdzKQorICAgICAgICBzZWxmLmJhc2VHaXRBdHRyaWJ1dGVzID0gW10KKworICAgIGRlZiBnZW5lcmF0ZVBvaW50ZXIoc2VsZiwgY29udGVudEZpbGUpOgorICAgICAgICAiIiJHZW5lcmF0ZSBhIEdpdCBMRlMgcG9pbnRlciBmb3IgdGhlIGNvbnRlbnQuIFJldHVybiBMRlMgUG9pbnRlciBmaWxlCisgICAgICAgICAgIG1vZGUgYW5kIGNvbnRlbnQgd2hpY2ggaXMgc3RvcmVkIGluIHRoZSBHaXQgcmVwb3NpdG9yeSBpbnN0ZWFkIG9mCisgICAgICAgICAgIHRoZSBhY3R1YWwgY29udGVudC4gUmV0dXJuIGFsc28gdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUgYWN0dWFsCisgICAgICAgICAgIGNvbnRlbnQuCisgICAgICAgICAgICIiIgorICAgICAgICBpZiBvcy5wYXRoLmdldHNpemUoY29udGVudEZpbGUpID09IDA6CisgICAgICAgICAgICByZXR1cm4gKE5vbmUsICcnLCBOb25lKQorCisgICAgICAgIHBvaW50ZXJQcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgIFsnZ2l0JywgJ2xmcycsICdwb2ludGVyJywgJy0tZmlsZT0nICsgY29udGVudEZpbGVdLAorICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRQorICAgICAgICApCisgICAgICAgIHBvaW50ZXJGaWxlID0gZGVjb2RlX3RleHRfc3RyZWFtKHBvaW50ZXJQcm9jZXNzLnN0ZG91dC5yZWFkKCkpCisgICAgICAgIGlmIHBvaW50ZXJQcm9jZXNzLndhaXQoKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShjb250ZW50RmlsZSkKKyAgICAgICAgICAgIGRpZSgnZ2l0LWxmcyBwb2ludGVyIGNvbW1hbmQgZmFpbGVkLiBEaWQgeW91IGluc3RhbGwgdGhlIGV4dGVuc2lvbj8nKQorCisgICAgICAgICMgR2l0IExGUyByZW1vdmVkIHRoZSBwcmVhbWJsZSBpbiB0aGUgb3V0cHV0IG9mIHRoZSAncG9pbnRlcicgY29tbWFuZAorICAgICAgICAjIHN0YXJ0aW5nIGZyb20gdmVyc2lvbiAxLjIuMC4gQ2hlY2sgZm9yIHRoZSBwcmVhbWJsZSBoZXJlIHRvIHN1cHBvcnQKKyAgICAgICAgIyBlYXJsaWVyIHZlcnNpb25zLgorICAgICAgICAjIGMuZi4gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9naXQtbGZzL2NvbW1pdC9kYTI5MzVkOWE3Mzk1OTJiYzc3NWM5OGQ4ZWY0ZGY5YzcyZWEzYjQzCisgICAgICAgIGlmIHBvaW50ZXJGaWxlLnN0YXJ0c3dpdGgoJ0dpdCBMRlMgcG9pbnRlciBmb3InKToKKyAgICAgICAgICAgIHBvaW50ZXJGaWxlID0gcmUuc3ViKHInR2l0IExGUyBwb2ludGVyIGZvci4qXG5cbicsICcnLCBwb2ludGVyRmlsZSkKKworICAgICAgICBvaWQgPSByZS5zZWFyY2gocideb2lkIFx3KzooXHcrKScsIHBvaW50ZXJGaWxlLCByZS5NVUxUSUxJTkUpLmdyb3VwKDEpCisgICAgICAgICMgaWYgc29tZW9uZSB1c2UgZXh0ZXJuYWwgbGZzLnN0b3JhZ2UgKCBub3QgaW4gbG9jYWwgcmVwbyBnaXQgKQorICAgICAgICBsZnNfcGF0aCA9IGdpdENvbmZpZygnbGZzLnN0b3JhZ2UnKQorICAgICAgICBpZiBub3QgbGZzX3BhdGg6CisgICAgICAgICAgICBsZnNfcGF0aCA9ICdsZnMnCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGxmc19wYXRoKToKKyAgICAgICAgICAgIGxmc19wYXRoID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCAnLmdpdCcsIGxmc19wYXRoKQorICAgICAgICBsb2NhbExhcmdlRmlsZSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgIGxmc19wYXRoLAorICAgICAgICAgICAgJ29iamVjdHMnLCBvaWRbOjJdLCBvaWRbMjo0XSwKKyAgICAgICAgICAgIG9pZCwKKyAgICAgICAgKQorICAgICAgICAjIExGUyBTcGVjIHN0YXRlcyB0aGF0IHBvaW50ZXIgZmlsZXMgc2hvdWxkIG5vdCBoYXZlIHRoZSBleGVjdXRhYmxlIGJpdCBzZXQuCisgICAgICAgIGdpdE1vZGUgPSAnMTAwNjQ0JworICAgICAgICByZXR1cm4gKGdpdE1vZGUsIHBvaW50ZXJGaWxlLCBsb2NhbExhcmdlRmlsZSkKKworICAgIGRlZiBwdXNoRmlsZShzZWxmLCBsb2NhbExhcmdlRmlsZSk6CisgICAgICAgIHVwbG9hZFByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgICAgWydnaXQnLCAnbGZzJywgJ3B1c2gnLCAnLS1vYmplY3QtaWQnLCAnb3JpZ2luJywgb3MucGF0aC5iYXNlbmFtZShsb2NhbExhcmdlRmlsZSldCisgICAgICAgICkKKyAgICAgICAgaWYgdXBsb2FkUHJvY2Vzcy53YWl0KCk6CisgICAgICAgICAgICBkaWUoJ2dpdC1sZnMgcHVzaCBjb21tYW5kIGZhaWxlZC4gRGlkIHlvdSBkZWZpbmUgYSByZW1vdGU/JykKKworICAgIGRlZiBnZW5lcmF0ZUdpdEF0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICBzZWxmLmJhc2VHaXRBdHRyaWJ1dGVzICsKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICcjXG4nLAorICAgICAgICAgICAgICAgICcjIEdpdCBMRlMgKHNlZSBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS8pXG4nLAorICAgICAgICAgICAgICAgICcjXG4nLAorICAgICAgICAgICAgXSArCisgICAgICAgICAgICBbJyouJyArIGYucmVwbGFjZSgnICcsICdbWzpzcGFjZTpdXScpICsgJyBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dFxuJworICAgICAgICAgICAgICAgIGZvciBmIGluIHNvcnRlZChnaXRDb25maWdMaXN0KCdnaXQtcDQubGFyZ2VGaWxlRXh0ZW5zaW9ucycpKQorICAgICAgICAgICAgXSArCisgICAgICAgICAgICBbJy8nICsgZi5yZXBsYWNlKCcgJywgJ1tbOnNwYWNlOl1dJykgKyAnIGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0XG4nCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gc29ydGVkKHNlbGYubGFyZ2VGaWxlcykgaWYgbm90IHNlbGYuaGFzTGFyZ2VGaWxlRXh0ZW5zaW9uKGYpCisgICAgICAgICAgICBdCisgICAgICAgICkKKworICAgIGRlZiBhZGRMYXJnZUZpbGUoc2VsZiwgcmVsUGF0aCk6CisgICAgICAgIExhcmdlRmlsZVN5c3RlbS5hZGRMYXJnZUZpbGUoc2VsZiwgcmVsUGF0aCkKKyAgICAgICAgc2VsZi53cml0ZVRvR2l0U3RyZWFtKCcxMDA2NDQnLCAnLmdpdGF0dHJpYnV0ZXMnLCBzZWxmLmdlbmVyYXRlR2l0QXR0cmlidXRlcygpKQorCisgICAgZGVmIHJlbW92ZUxhcmdlRmlsZShzZWxmLCByZWxQYXRoKToKKyAgICAgICAgTGFyZ2VGaWxlU3lzdGVtLnJlbW92ZUxhcmdlRmlsZShzZWxmLCByZWxQYXRoKQorICAgICAgICBzZWxmLndyaXRlVG9HaXRTdHJlYW0oJzEwMDY0NCcsICcuZ2l0YXR0cmlidXRlcycsIHNlbGYuZ2VuZXJhdGVHaXRBdHRyaWJ1dGVzKCkpCisKKyAgICBkZWYgcHJvY2Vzc0NvbnRlbnQoc2VsZiwgZ2l0X21vZGUsIHJlbFBhdGgsIGNvbnRlbnRzKToKKyAgICAgICAgaWYgcmVsUGF0aCA9PSAnLmdpdGF0dHJpYnV0ZXMnOgorICAgICAgICAgICAgc2VsZi5iYXNlR2l0QXR0cmlidXRlcyA9IGNvbnRlbnRzCisgICAgICAgICAgICByZXR1cm4gKGdpdF9tb2RlLCBzZWxmLmdlbmVyYXRlR2l0QXR0cmlidXRlcygpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIExhcmdlRmlsZVN5c3RlbS5wcm9jZXNzQ29udGVudChzZWxmLCBnaXRfbW9kZSwgcmVsUGF0aCwgY29udGVudHMpCisKK2NsYXNzIENvbW1hbmQ6CisgICAgZGVsZXRlX2FjdGlvbnMgPSAoICJkZWxldGUiLCAibW92ZS9kZWxldGUiLCAicHVyZ2UiICkKKyAgICBhZGRfYWN0aW9ucyA9ICggImFkZCIsICJicmFuY2giLCAibW92ZS9hZGQiICkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi51c2FnZSA9ICJ1c2FnZTogJXByb2cgW29wdGlvbnNdIgorICAgICAgICBzZWxmLm5lZWRzR2l0ID0gVHJ1ZQorICAgICAgICBzZWxmLnZlcmJvc2UgPSBGYWxzZQorCisgICAgIyBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgImFwcGVuZCIgdXBkYXRlX3NoZWx2ZSBhY3Rpb24KKyAgICBkZWYgZW5zdXJlX3ZhbHVlKHNlbGYsIGF0dHIsIHZhbHVlKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgYXR0cikgb3IgZ2V0YXR0cihzZWxmLCBhdHRyKSBpcyBOb25lOgorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBhdHRyLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgYXR0cikKKworY2xhc3MgUDRVc2VyTWFwOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi51c2VyTWFwRnJvbVBlcmZvcmNlU2VydmVyID0gRmFsc2UKKyAgICAgICAgc2VsZi5teVA0VXNlcklkID0gTm9uZQorCisgICAgZGVmIHA0VXNlcklkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm15UDRVc2VySWQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5teVA0VXNlcklkCisKKyAgICAgICAgcmVzdWx0cyA9IHA0Q21kTGlzdCgidXNlciAtbyIpCisgICAgICAgIGZvciByIGluIHJlc3VsdHM6CisgICAgICAgICAgICBpZiAnVXNlcicgaW4gcjoKKyAgICAgICAgICAgICAgICBzZWxmLm15UDRVc2VySWQgPSByWydVc2VyJ10KKyAgICAgICAgICAgICAgICByZXR1cm4gclsnVXNlciddCisgICAgICAgIGRpZSgiQ291bGQgbm90IGZpbmQgeW91ciBwNCB1c2VyIGlkIikKKworICAgIGRlZiBwNFVzZXJJc01lKHNlbGYsIHA0VXNlcik6CisgICAgICAgICMgcmV0dXJuIFRydWUgaWYgdGhlIGdpdmVuIHA0IHVzZXIgaXMgYWN0dWFsbHkgbWUKKyAgICAgICAgbWUgPSBzZWxmLnA0VXNlcklkKCkKKyAgICAgICAgaWYgbm90IHA0VXNlciBvciBwNFVzZXIgIT0gbWU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZ2V0VXNlckNhY2hlRmlsZW5hbWUoc2VsZik6CisgICAgICAgIGhvbWUgPSBvcy5lbnZpcm9uLmdldCgiSE9NRSIsIG9zLmVudmlyb24uZ2V0KCJVU0VSUFJPRklMRSIpKQorICAgICAgICByZXR1cm4gaG9tZSArICIvLmdpdHA0LXVzZXJjYWNoZS50eHQiCisKKyAgICBkZWYgZ2V0VXNlck1hcEZyb21QZXJmb3JjZVNlcnZlcihzZWxmKToKKyAgICAgICAgaWYgc2VsZi51c2VyTWFwRnJvbVBlcmZvcmNlU2VydmVyOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYudXNlcnMgPSB7fQorICAgICAgICBzZWxmLmVtYWlscyA9IHt9CisKKyAgICAgICAgZm9yIG91dHB1dCBpbiBwNENtZExpc3QoInVzZXJzIik6CisgICAgICAgICAgICBpZiAiVXNlciIgbm90IGluIG91dHB1dDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi51c2Vyc1tvdXRwdXRbIlVzZXIiXV0gPSBvdXRwdXRbIkZ1bGxOYW1lIl0gKyAiIDwiICsgb3V0cHV0WyJFbWFpbCJdICsgIj4iCisgICAgICAgICAgICBzZWxmLmVtYWlsc1tvdXRwdXRbIkVtYWlsIl1dID0gb3V0cHV0WyJVc2VyIl0KKworICAgICAgICBtYXBVc2VyQ29uZmlnUmVnZXggPSByZS5jb21waWxlKHIiXlxzKihcUyspXHMqPVxzKiguKylccyo8KFxTKyk+XHMqJCIsIHJlLlZFUkJPU0UpCisgICAgICAgIGZvciBtYXBVc2VyQ29uZmlnIGluIGdpdENvbmZpZ0xpc3QoImdpdC1wNC5tYXBVc2VyIik6CisgICAgICAgICAgICBtYXBVc2VyID0gbWFwVXNlckNvbmZpZ1JlZ2V4LmZpbmRhbGwobWFwVXNlckNvbmZpZykKKyAgICAgICAgICAgIGlmIG1hcFVzZXIgYW5kIGxlbihtYXBVc2VyWzBdKSA9PSAzOgorICAgICAgICAgICAgICAgIHVzZXIgPSBtYXBVc2VyWzBdWzBdCisgICAgICAgICAgICAgICAgZnVsbG5hbWUgPSBtYXBVc2VyWzBdWzFdCisgICAgICAgICAgICAgICAgZW1haWwgPSBtYXBVc2VyWzBdWzJdCisgICAgICAgICAgICAgICAgc2VsZi51c2Vyc1t1c2VyXSA9IGZ1bGxuYW1lICsgIiA8IiArIGVtYWlsICsgIj4iCisgICAgICAgICAgICAgICAgc2VsZi5lbWFpbHNbZW1haWxdID0gdXNlcgorCisgICAgICAgIHMgPSAnJworICAgICAgICBmb3IgKGtleSwgdmFsKSBpbiBzZWxmLnVzZXJzLml0ZW1zKCk6CisgICAgICAgICAgICBzICs9ICIlc1x0JXNcbiIgJSAoa2V5LmV4cGFuZHRhYnMoMSksIHZhbC5leHBhbmR0YWJzKDEpKQorCisgICAgICAgIG9wZW4oc2VsZi5nZXRVc2VyQ2FjaGVGaWxlbmFtZSgpLCAndycpLndyaXRlKHMpCisgICAgICAgIHNlbGYudXNlck1hcEZyb21QZXJmb3JjZVNlcnZlciA9IFRydWUKKworICAgIGRlZiBsb2FkVXNlck1hcEZyb21DYWNoZShzZWxmKToKKyAgICAgICAgc2VsZi51c2VycyA9IHt9CisgICAgICAgIHNlbGYudXNlck1hcEZyb21QZXJmb3JjZVNlcnZlciA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhY2hlID0gb3BlbihzZWxmLmdldFVzZXJDYWNoZUZpbGVuYW1lKCksICdyJykKKyAgICAgICAgICAgIGxpbmVzID0gY2FjaGUucmVhZGxpbmVzKCkKKyAgICAgICAgICAgIGNhY2hlLmNsb3NlKCkKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIGVudHJ5ID0gbGluZS5zdHJpcCgpLnNwbGl0KCJcdCIpCisgICAgICAgICAgICAgICAgc2VsZi51c2Vyc1tlbnRyeVswXV0gPSBlbnRyeVsxXQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZ2V0VXNlck1hcEZyb21QZXJmb3JjZVNlcnZlcigpCisKK2NsYXNzIFA0RGVidWcoQ29tbWFuZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBDb21tYW5kLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYub3B0aW9ucyA9IFtdCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSAiQSB0b29sIHRvIGRlYnVnIHRoZSBvdXRwdXQgb2YgcDQgLUcuIgorICAgICAgICBzZWxmLm5lZWRzR2l0ID0gRmFsc2UKKworICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CisgICAgICAgIGogPSAwCisgICAgICAgIGZvciBvdXRwdXQgaW4gcDRDbWRMaXN0KGFyZ3MpOgorICAgICAgICAgICAgcHJpbnQoJ0VsZW1lbnQ6ICVkJyAlIGopCisgICAgICAgICAgICBqICs9IDEKKyAgICAgICAgICAgIHByaW50KG91dHB1dCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgUDRSb2xsQmFjayhDb21tYW5kKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5vcHRpb25zID0gWworICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbG9jYWwiLCBkZXN0PSJyb2xsYmFja0xvY2FsQnJhbmNoZXMiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBdCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSAiQSB0b29sIHRvIGRlYnVnIHRoZSBtdWx0aS1icmFuY2ggaW1wb3J0LiBEb24ndCB1c2UgOikiCisgICAgICAgIHNlbGYucm9sbGJhY2tMb2NhbEJyYW5jaGVzID0gRmFsc2UKKworICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CisgICAgICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIG1heENoYW5nZSA9IGludChhcmdzWzBdKQorCisgICAgICAgIGlmICJwNEV4aXRDb2RlIiBpbiBwNENtZCgiY2hhbmdlcyAtbSAxIik6CisgICAgICAgICAgICBkaWUoIlByb2JsZW1zIGV4ZWN1dGluZyBwNCIpOworCisgICAgICAgIGlmIHNlbGYucm9sbGJhY2tMb2NhbEJyYW5jaGVzOgorICAgICAgICAgICAgcmVmUHJlZml4ID0gInJlZnMvaGVhZHMvIgorICAgICAgICAgICAgbGluZXMgPSByZWFkX3BpcGVfbGluZXMoImdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYyAtLWJyYW5jaGVzIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlZlByZWZpeCA9ICJyZWZzL3JlbW90ZXMvIgorICAgICAgICAgICAgbGluZXMgPSByZWFkX3BpcGVfbGluZXMoImdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYyAtLXJlbW90ZXMiKQorCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgaWYgc2VsZi5yb2xsYmFja0xvY2FsQnJhbmNoZXMgb3IgKGxpbmUuc3RhcnRzd2l0aCgicDQvIikgYW5kIGxpbmUgIT0gInA0L0hFQURcbiIpOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgICAgICByZWYgPSByZWZQcmVmaXggKyBsaW5lCisgICAgICAgICAgICAgICAgbG9nID0gZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KHJlZikKKyAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IGV4dHJhY3RTZXR0aW5nc0dpdExvZyhsb2cpCisKKyAgICAgICAgICAgICAgICBkZXBvdFBhdGhzID0gc2V0dGluZ3NbJ2RlcG90LXBhdGhzJ10KKyAgICAgICAgICAgICAgICBjaGFuZ2UgPSBzZXR0aW5nc1snY2hhbmdlJ10KKworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBGYWxzZQorCisgICAgICAgICAgICAgICAgaWYgbGVuKHA0Q21kKCJjaGFuZ2VzIC1tIDEgIiAgKyAnICcuam9pbiAoWyclcy4uLkAlcycgJSAocCwgbWF4Q2hhbmdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBkZXBvdFBhdGhzXSkpKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiQnJhbmNoICVzIGRpZCBub3QgZXhpc3QgYXQgY2hhbmdlICVzLCBkZWxldGluZy4iICUgKHJlZiwgbWF4Q2hhbmdlKSkKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtKCJnaXQgdXBkYXRlLXJlZiAtZCAlcyBgZ2l0IHJldi1wYXJzZSAlc2AiICUgKHJlZiwgcmVmKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIHdoaWxlIGNoYW5nZSBhbmQgaW50KGNoYW5nZSkgPiBtYXhDaGFuZ2U6CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCIlcyBpcyBhdCAlcyA7IHJld2luZGluZyB0b3dhcmRzICVzIiAlIChyZWYsIGNoYW5nZSwgbWF4Q2hhbmdlKSkKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtKCJnaXQgdXBkYXRlLXJlZiAlcyBcIiVzXlwiIiAlIChyZWYsIHJlZikpCisgICAgICAgICAgICAgICAgICAgIGxvZyA9IGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdChyZWYpCisgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzID0gIGV4dHJhY3RTZXR0aW5nc0dpdExvZyhsb2cpCisKKworICAgICAgICAgICAgICAgICAgICBkZXBvdFBhdGhzID0gc2V0dGluZ3NbJ2RlcG90LXBhdGhzJ10KKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlID0gc2V0dGluZ3NbJ2NoYW5nZSddCisKKyAgICAgICAgICAgICAgICBpZiBjaGFuZ2VkOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiJXMgcmV3b3VuZCB0byAlcyIgJSAocmVmLCBjaGFuZ2UpKQorCisgICAgICAgIHJldHVybiBUcnVlCisKK2NsYXNzIFA0U3VibWl0KENvbW1hbmQsIFA0VXNlck1hcCk6CisKKyAgICBjb25mbGljdF9iZWhhdmlvcl9jaG9pY2VzID0gKCJhc2siLCAic2tpcCIsICJxdWl0IikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBQNFVzZXJNYXAuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5vcHRpb25zID0gWworICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLW9yaWdpbiIsIGRlc3Q9Im9yaWdpbiIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItTSIsIGRlc3Q9ImRldGVjdFJlbmFtZXMiLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgICAgICAgICAjIHByZXNlcnZlIHRoZSB1c2VyLCByZXF1aXJlcyByZWxldmFudCBwNCBwZXJtaXNzaW9ucworICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXByZXNlcnZlLXVzZXIiLCBkZXN0PSJwcmVzZXJ2ZVVzZXIiLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1leHBvcnQtbGFiZWxzIiwgZGVzdD0iZXhwb3J0TGFiZWxzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tZHJ5LXJ1biIsICItbiIsIGRlc3Q9ImRyeV9ydW4iLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1wcmVwYXJlLXA0LW9ubHkiLCBkZXN0PSJwcmVwYXJlX3A0X29ubHkiLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1jb25mbGljdCIsIGRlc3Q9ImNvbmZsaWN0X2JlaGF2aW9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPXNlbGYuY29uZmxpY3RfYmVoYXZpb3JfY2hvaWNlcyksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tYnJhbmNoIiwgZGVzdD0iYnJhbmNoIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tc2hlbHZlIiwgZGVzdD0ic2hlbHZlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTaGVsdmUgaW5zdGVhZCBvZiBzdWJtaXQuIFNoZWx2ZWQgZmlsZXMgYXJlIHJldmVydGVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3RvcmluZyB0aGUgd29ya3NwYWNlIHRvIHRoZSBzdGF0ZSBiZWZvcmUgdGhlIHNoZWx2ZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXVwZGF0ZS1zaGVsdmUiLCBkZXN0PSJ1cGRhdGVfc2hlbHZlIiwgYWN0aW9uPSJhcHBlbmQiLCB0eXBlPSJpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9IkNIQU5HRUxJU1QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InVwZGF0ZSBhbiBleGlzdGluZyBzaGVsdmVkIGNoYW5nZWxpc3QsIGltcGxpZXMgLS1zaGVsdmUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVwZWF0IGluLW9yZGVyIGZvciBtdWx0aXBsZSBzaGVsdmVkIGNoYW5nZWxpc3RzIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tY29tbWl0IiwgZGVzdD0iY29tbWl0IiwgbWV0YXZhcj0iQ09NTUlUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJzdWJtaXQgb25seSB0aGUgc3BlY2lmaWVkIGNvbW1pdChzKSwgb25lIGNvbW1pdCBvciB4eHguLnh4eCIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWRpc2FibGUtcmViYXNlIiwgZGVzdD0iZGlzYWJsZV9yZWJhc2UiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRpc2FibGUgcmViYXNlIGFmdGVyIHN1Ym1pdCBpcyBjb21wbGV0ZWQuIENhbiBiZSB1c2VmdWwgaWYgeW91ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29yayBmcm9tIGEgbG9jYWwgZ2l0IGJyYW5jaCB0aGF0IGlzIG5vdCBtYXN0ZXIiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1kaXNhYmxlLXA0c3luYyIsIGRlc3Q9ImRpc2FibGVfcDRzeW5jIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTa2lwIFBlcmZvcmNlIHN5bmMgb2YgcDQvbWFzdGVyIGFmdGVyIHN1Ym1pdCBvciBzaGVsdmUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1uby12ZXJpZnkiLCBkZXN0PSJub192ZXJpZnkiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkJ5cGFzcyBwNC1wcmUtc3VibWl0IGFuZCBwNC1jaGFuZ2VsaXN0IGhvb2tzIiksCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICIiIlN1Ym1pdCBjaGFuZ2VzIGZyb20gZ2l0IHRvIHRoZSBwZXJmb3JjZSBkZXBvdC5cbgorICAgIFRoZSBgcDQtcHJlLXN1Ym1pdGAgaG9vayBpcyBleGVjdXRlZCBpZiBpdCBleGlzdHMgYW5kIGlzIGV4ZWN1dGFibGUuIEl0CisgICAgY2FuIGJlIGJ5cGFzc2VkIHdpdGggdGhlIGAtLW5vLXZlcmlmeWAgY29tbWFuZCBsaW5lIG9wdGlvbi4gVGhlIGhvb2sgdGFrZXMKKyAgICBubyBwYXJhbWV0ZXJzIGFuZCBub3RoaW5nIGZyb20gc3RhbmRhcmQgaW5wdXQuIEV4aXRpbmcgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cworICAgIGZyb20gdGhpcyBzY3JpcHQgcHJldmVudHMgYGdpdC1wNCBzdWJtaXRgIGZyb20gbGF1bmNoaW5nLgorCisgICAgT25lIHVzYWdlIHNjZW5hcmlvIGlzIHRvIHJ1biB1bml0IHRlc3RzIGluIHRoZSBob29rLgorCisgICAgVGhlIGBwNC1wcmVwYXJlLWNoYW5nZWxpc3RgIGhvb2sgaXMgZXhlY3V0ZWQgcmlnaHQgYWZ0ZXIgcHJlcGFyaW5nIHRoZSBkZWZhdWx0CisgICAgY2hhbmdlbGlzdCBtZXNzYWdlIGFuZCBiZWZvcmUgdGhlIGVkaXRvciBpcyBzdGFydGVkLiBJdCB0YWtlcyBvbmUgcGFyYW1ldGVyLAorICAgIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGNoYW5nZWxpc3QgdGV4dC4gRXhpdGluZyB3aXRoIGEgbm9uLXplcm8KKyAgICBzdGF0dXMgZnJvbSB0aGUgc2NyaXB0IHdpbGwgYWJvcnQgdGhlIHByb2Nlc3MuCisKKyAgICBUaGUgcHVycG9zZSBvZiB0aGUgaG9vayBpcyB0byBlZGl0IHRoZSBtZXNzYWdlIGZpbGUgaW4gcGxhY2UsIGFuZCBpdCBpcyBub3QKKyAgICBzdXByZXNzZWQgYnkgdGhlIGAtLW5vLXZlcmlmeWAgb3B0aW9uLiBUaGlzIGhvb2sgaXMgY2FsbGVkIGV2ZW4gaWYKKyAgICBgLS1wcmVwYXJlLXA0LW9ubHlgIGlzIHNldC4KKworICAgIFRoZSBgcDQtY2hhbmdlbGlzdGAgaG9vayBpcyBleGVjdXRlZCBhZnRlciB0aGUgY2hhbmdlbGlzdCBtZXNzYWdlIGhhcyBiZWVuCisgICAgZWRpdGVkIGJ5IHRoZSB1c2VyLiBJdCBjYW4gYmUgYnlwYXNzZWQgd2l0aCB0aGUgYC0tbm8tdmVyaWZ5YCBvcHRpb24uIEl0CisgICAgdGFrZXMgYSBzaW5nbGUgcGFyYW1ldGVyLCB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGhvbGRzIHRoZSBwcm9wb3NlZAorICAgIGNoYW5nZWxpc3QgdGV4dC4gRXhpdGluZyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzIGNhdXNlcyB0aGUgY29tbWFuZCB0byBhYm9ydC4KKworICAgIFRoZSBob29rIGlzIGFsbG93ZWQgdG8gZWRpdCB0aGUgY2hhbmdlbGlzdCBmaWxlIGFuZCBjYW4gYmUgdXNlZCB0byBub3JtYWxpemUKKyAgICB0aGUgdGV4dCBpbnRvIHNvbWUgcHJvamVjdCBzdGFuZGFyZCBmb3JtYXQuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gcmVmdXNlIHRoZQorICAgIFN1Ym1pdCBhZnRlciBpbnNwZWN0IHRoZSBtZXNzYWdlIGZpbGUuCisKKyAgICBUaGUgYHA0LXBvc3QtY2hhbmdlbGlzdGAgaG9vayBpcyBpbnZva2VkIGFmdGVyIHRoZSBzdWJtaXQgaGFzIHN1Y2Nlc3NmdWxseQorICAgIG9jY3VyZWQgaW4gUDQuIEl0IHRha2VzIG5vIHBhcmFtZXRlcnMgYW5kIGlzIG1lYW50IHByaW1hcmlseSBmb3Igbm90aWZpY2F0aW9uCisgICAgYW5kIGNhbm5vdCBhZmZlY3QgdGhlIG91dGNvbWUgb2YgdGhlIGdpdCBwNCBzdWJtaXQgYWN0aW9uLgorICAgICIiIgorCisgICAgICAgIHNlbGYudXNhZ2UgKz0gIiBbbmFtZSBvZiBnaXQgYnJhbmNoIHRvIHN1Ym1pdCBpbnRvIHBlcmZvcmNlIGRlcG90XSIKKyAgICAgICAgc2VsZi5vcmlnaW4gPSAiIgorICAgICAgICBzZWxmLmRldGVjdFJlbmFtZXMgPSBGYWxzZQorICAgICAgICBzZWxmLnByZXNlcnZlVXNlciA9IGdpdENvbmZpZ0Jvb2woImdpdC1wNC5wcmVzZXJ2ZVVzZXIiKQorICAgICAgICBzZWxmLmRyeV9ydW4gPSBGYWxzZQorICAgICAgICBzZWxmLnNoZWx2ZSA9IEZhbHNlCisgICAgICAgIHNlbGYudXBkYXRlX3NoZWx2ZSA9IGxpc3QoKQorICAgICAgICBzZWxmLmNvbW1pdCA9ICIiCisgICAgICAgIHNlbGYuZGlzYWJsZV9yZWJhc2UgPSBnaXRDb25maWdCb29sKCJnaXQtcDQuZGlzYWJsZVJlYmFzZSIpCisgICAgICAgIHNlbGYuZGlzYWJsZV9wNHN5bmMgPSBnaXRDb25maWdCb29sKCJnaXQtcDQuZGlzYWJsZVA0U3luYyIpCisgICAgICAgIHNlbGYucHJlcGFyZV9wNF9vbmx5ID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb25mbGljdF9iZWhhdmlvciA9IE5vbmUKKyAgICAgICAgc2VsZi5pc1dpbmRvd3MgPSAocGxhdGZvcm0uc3lzdGVtKCkgPT0gIldpbmRvd3MiKQorICAgICAgICBzZWxmLmV4cG9ydExhYmVscyA9IEZhbHNlCisgICAgICAgIHNlbGYucDRIYXNNb3ZlQ29tbWFuZCA9IHA0X2hhc19tb3ZlX2NvbW1hbmQoKQorICAgICAgICBzZWxmLmJyYW5jaCA9IE5vbmUKKyAgICAgICAgc2VsZi5ub192ZXJpZnkgPSBGYWxzZQorCisgICAgICAgIGlmIGdpdENvbmZpZygnZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbScpOgorICAgICAgICAgICAgZGllKCJMYXJnZSBmaWxlIHN5c3RlbSBub3Qgc3VwcG9ydGVkIGZvciBnaXQtcDQgc3VibWl0IGNvbW1hbmQuIFBsZWFzZSByZW1vdmUgaXQgZnJvbSBjb25maWcuIikKKworICAgIGRlZiBjaGVjayhzZWxmKToKKyAgICAgICAgaWYgbGVuKHA0Q21kTGlzdCgib3BlbmVkIC4uLiIpKSA+IDA6CisgICAgICAgICAgICBkaWUoIllvdSBoYXZlIGZpbGVzIG9wZW5lZCB3aXRoIHBlcmZvcmNlISBDbG9zZSB0aGVtIGJlZm9yZSBzdGFydGluZyB0aGUgc3luYy4iKQorCisgICAgZGVmIHNlcGFyYXRlX2pvYnNfZnJvbV9kZXNjcmlwdGlvbihzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgIiIiRXh0cmFjdCBhbmQgcmV0dXJuIGEgcG9zc2libGUgSm9icyBmaWVsZCBpbiB0aGUgY29tbWl0CisgICAgICAgICAgIG1lc3NhZ2UuICBJdCBnb2VzIGludG8gYSBzZXBhcmF0ZSBzZWN0aW9uIGluIHRoZSBwNCBjaGFuZ2UKKyAgICAgICAgICAgc3BlY2lmaWNhdGlvbi4KKworICAgICAgICAgICBBIGpvYnMgbGluZSBzdGFydHMgd2l0aCAiSm9iczoiIGFuZCBsb29rcyBsaWtlIGEgbmV3IGZpZWxkCisgICAgICAgICAgIGluIGEgZm9ybS4gIFZhbHVlcyBhcmUgd2hpdGUtc3BhY2Ugc2VwYXJhdGVkIG9uIHRoZSBzYW1lCisgICAgICAgICAgIGxpbmUgb3Igb24gZm9sbG93aW5nIGxpbmVzIHRoYXQgc3RhcnQgd2l0aCBhIHRhYi4KKworICAgICAgICAgICBUaGlzIGRvZXMgbm90IHBhcnNlIGFuZCBleHRyYWN0IHRoZSBmdWxsIGdpdCBjb21taXQgbWVzc2FnZQorICAgICAgICAgICBsaWtlIGEgcDQgZm9ybS4gIEl0IGp1c3Qgc2VlcyB0aGUgSm9iczogbGluZSBhcyBhIG1hcmtlcgorICAgICAgICAgICB0byBwYXNzIGV2ZXJ5dGhpbmcgZnJvbSB0aGVuIG9uIGRpcmVjdGx5IGludG8gdGhlIHA0IGZvcm0sCisgICAgICAgICAgIGJ1dCBvdXRzaWRlIHRoZSBkZXNjcmlwdGlvbiBzZWN0aW9uLgorCisgICAgICAgICAgIFJldHVybiBhIHR1cGxlIChzdHJpcHBlZCBsb2cgbWVzc2FnZSwgam9icyBzdHJpbmcpLiIiIgorCisgICAgICAgIG0gPSByZS5zZWFyY2gocideSm9iczonLCBtZXNzYWdlLCByZS5NVUxUSUxJTkUpCisgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAobWVzc2FnZSwgTm9uZSkKKworICAgICAgICBqb2J0ZXh0ID0gbWVzc2FnZVttLnN0YXJ0KCk6XQorICAgICAgICBzdHJpcHBlZF9tZXNzYWdlID0gbWVzc2FnZVs6bS5zdGFydCgpXS5yc3RyaXAoKQorICAgICAgICByZXR1cm4gKHN0cmlwcGVkX21lc3NhZ2UsIGpvYnRleHQpCisKKyAgICBkZWYgcHJlcGFyZUxvZ01lc3NhZ2Uoc2VsZiwgdGVtcGxhdGUsIG1lc3NhZ2UsIGpvYnMpOgorICAgICAgICAiIiJFZGl0cyB0aGUgdGVtcGxhdGUgcmV0dXJuZWQgZnJvbSAicDQgY2hhbmdlIC1vIiB0byBpbnNlcnQKKyAgICAgICAgICAgdGhlIG1lc3NhZ2UgaW4gdGhlIERlc2NyaXB0aW9uIGZpZWxkLCBhbmQgdGhlIGpvYnMgdGV4dCBpbgorICAgICAgICAgICB0aGUgSm9icyBmaWVsZC4iIiIKKyAgICAgICAgcmVzdWx0ID0gIiIKKworICAgICAgICBpbkRlc2NyaXB0aW9uU2VjdGlvbiA9IEZhbHNlCisKKyAgICAgICAgZm9yIGxpbmUgaW4gdGVtcGxhdGUuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiMiKToKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gbGluZSArICJcbiIKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpbkRlc2NyaXB0aW9uU2VjdGlvbjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkZpbGVzOiIpIG9yIGxpbmUuc3RhcnRzd2l0aCgiSm9iczoiKToKKyAgICAgICAgICAgICAgICAgICAgaW5EZXNjcmlwdGlvblNlY3Rpb24gPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAjIGluc2VydCBKb2JzIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgam9iczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBqb2JzICsgIlxuIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiRGVzY3JpcHRpb246Iik6CisgICAgICAgICAgICAgICAgICAgIGluRGVzY3JpcHRpb25TZWN0aW9uID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBsaW5lICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAgZm9yIG1lc3NhZ2VMaW5lIGluIG1lc3NhZ2Uuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lICs9ICJcdCIgKyBtZXNzYWdlTGluZSArICJcbiIKKworICAgICAgICAgICAgcmVzdWx0ICs9IGxpbmUgKyAiXG4iCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHBhdGNoUkNTS2V5d29yZHMoc2VsZiwgZmlsZSwgcGF0dGVybik6CisgICAgICAgICMgQXR0ZW1wdCB0byB6YXAgdGhlIFJDUyBrZXl3b3JkcyBpbiBhIHA0IGNvbnRyb2xsZWQgZmlsZSBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0dGVybgorICAgICAgICAoaGFuZGxlLCBvdXRGaWxlTmFtZSkgPSB0ZW1wZmlsZS5ta3N0ZW1wKGRpcj0nLicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dEZpbGUgPSBvcy5mZG9wZW4oaGFuZGxlLCAidysiKQorICAgICAgICAgICAgaW5GaWxlID0gb3BlbihmaWxlLCAiciIpCisgICAgICAgICAgICByZWdleHAgPSByZS5jb21waWxlKHBhdHRlcm4sIHJlLlZFUkJPU0UpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBpbkZpbGUucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgbGluZSA9IHJlZ2V4cC5zdWIocickXDEkJywgbGluZSkKKyAgICAgICAgICAgICAgICBvdXRGaWxlLndyaXRlKGxpbmUpCisgICAgICAgICAgICBpbkZpbGUuY2xvc2UoKQorICAgICAgICAgICAgb3V0RmlsZS5jbG9zZSgpCisgICAgICAgICAgICAjIEZvcmNpYmx5IG92ZXJ3cml0ZSB0aGUgb3JpZ2luYWwgZmlsZQorICAgICAgICAgICAgb3MudW5saW5rKGZpbGUpCisgICAgICAgICAgICBzaHV0aWwubW92ZShvdXRGaWxlTmFtZSwgZmlsZSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBjbGVhbnVwIG91ciB0ZW1wb3JhcnkgZmlsZQorICAgICAgICAgICAgb3MudW5saW5rKG91dEZpbGVOYW1lKQorICAgICAgICAgICAgcHJpbnQoIkZhaWxlZCB0byBzdHJpcCBSQ1Mga2V5d29yZHMgaW4gJXMiICUgZmlsZSkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgcHJpbnQoIlBhdGNoZWQgdXAgUkNTIGtleXdvcmRzIGluICVzIiAlIGZpbGUpCisKKyAgICBkZWYgcDRVc2VyRm9yQ29tbWl0KHNlbGYsaWQpOgorICAgICAgICAjIFJldHVybiB0aGUgdHVwbGUgKHBlcmZvcmNlIHVzZXIsZ2l0IGVtYWlsKSBmb3IgYSBnaXZlbiBnaXQgY29tbWl0IGlkCisgICAgICAgIHNlbGYuZ2V0VXNlck1hcEZyb21QZXJmb3JjZVNlcnZlcigpCisgICAgICAgIGdpdEVtYWlsID0gcmVhZF9waXBlKFsiZ2l0IiwgImxvZyIsICItLW1heC1jb3VudD0xIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWZvcm1hdD0lYWUiLCBpZF0pCisgICAgICAgIGdpdEVtYWlsID0gZ2l0RW1haWwuc3RyaXAoKQorICAgICAgICBpZiBnaXRFbWFpbCBub3QgaW4gc2VsZi5lbWFpbHM6CisgICAgICAgICAgICByZXR1cm4gKE5vbmUsZ2l0RW1haWwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gKHNlbGYuZW1haWxzW2dpdEVtYWlsXSxnaXRFbWFpbCkKKworICAgIGRlZiBjaGVja1ZhbGlkUDRVc2VycyhzZWxmLGNvbW1pdHMpOgorICAgICAgICAjIGNoZWNrIGlmIGFueSBnaXQgYXV0aG9ycyBjYW5ub3QgYmUgbWFwcGVkIHRvIHA0IHVzZXJzCisgICAgICAgIGZvciBpZCBpbiBjb21taXRzOgorICAgICAgICAgICAgKHVzZXIsZW1haWwpID0gc2VsZi5wNFVzZXJGb3JDb21taXQoaWQpCisgICAgICAgICAgICBpZiBub3QgdXNlcjoKKyAgICAgICAgICAgICAgICBtc2cgPSAiQ2Fubm90IGZpbmQgcDQgdXNlciBmb3IgZW1haWwgJXMgaW4gY29tbWl0ICVzLiIgJSAoZW1haWwsIGlkKQorICAgICAgICAgICAgICAgIGlmIGdpdENvbmZpZ0Jvb2woImdpdC1wNC5hbGxvd01pc3NpbmdQNFVzZXJzIik6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCIlcyIgJSBtc2cpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGllKCJFcnJvcjogJXNcblNldCBnaXQtcDQuYWxsb3dNaXNzaW5nUDRVc2VycyB0byB0cnVlIHRvIGFsbG93IHRoaXMuIiAlIG1zZykKKworICAgIGRlZiBsYXN0UDRDaGFuZ2VsaXN0KHNlbGYpOgorICAgICAgICAjIEdldCBiYWNrIHRoZSBsYXN0IGNoYW5nZWxpc3QgbnVtYmVyIHN1Ym1pdHRlZCBpbiB0aGlzIGNsaWVudCBzcGVjLiBUaGlzCisgICAgICAgICMgdGhlbiBnZXRzIHVzZWQgdG8gcGF0Y2ggdXAgdGhlIHVzZXJuYW1lIGluIHRoZSBjaGFuZ2UuIElmIHRoZSBzYW1lCisgICAgICAgICMgY2xpZW50IHNwZWMgaXMgYmVpbmcgdXNlZCBieSBtdWx0aXBsZSBwcm9jZXNzZXMgdGhlbiB0aGlzIG1pZ2h0IGdvCisgICAgICAgICMgd3JvbmcuCisgICAgICAgIHJlc3VsdHMgPSBwNENtZExpc3QoImNsaWVudCAtbyIpICAgICAgICAjIGZpbmQgdGhlIGN1cnJlbnQgY2xpZW50CisgICAgICAgIGNsaWVudCA9IE5vbmUKKyAgICAgICAgZm9yIHIgaW4gcmVzdWx0czoKKyAgICAgICAgICAgIGlmICdDbGllbnQnIGluIHI6CisgICAgICAgICAgICAgICAgY2xpZW50ID0gclsnQ2xpZW50J10KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgY2xpZW50OgorICAgICAgICAgICAgZGllKCJjb3VsZCBub3QgZ2V0IGNsaWVudCBzcGVjIikKKyAgICAgICAgcmVzdWx0cyA9IHA0Q21kTGlzdChbImNoYW5nZXMiLCAiLWMiLCBjbGllbnQsICItbSIsICIxIl0pCisgICAgICAgIGZvciByIGluIHJlc3VsdHM6CisgICAgICAgICAgICBpZiAnY2hhbmdlJyBpbiByOgorICAgICAgICAgICAgICAgIHJldHVybiByWydjaGFuZ2UnXQorICAgICAgICBkaWUoIkNvdWxkIG5vdCBnZXQgY2hhbmdlbGlzdCBudW1iZXIgZm9yIGxhc3Qgc3VibWl0IC0gY2Fubm90IHBhdGNoIHVwIHVzZXIgZGV0YWlscyIpCisKKyAgICBkZWYgbW9kaWZ5Q2hhbmdlbGlzdFVzZXIoc2VsZiwgY2hhbmdlbGlzdCwgbmV3VXNlcik6CisgICAgICAgICMgZml4dXAgdGhlIHVzZXIgZmllbGQgb2YgYSBjaGFuZ2VsaXN0IGFmdGVyIGl0IGhhcyBiZWVuIHN1Ym1pdHRlZC4KKyAgICAgICAgY2hhbmdlcyA9IHA0Q21kTGlzdCgiY2hhbmdlIC1vICVzIiAlIGNoYW5nZWxpc3QpCisgICAgICAgIGlmIGxlbihjaGFuZ2VzKSAhPSAxOgorICAgICAgICAgICAgZGllKCJCYWQgb3V0cHV0IGZyb20gcDQgY2hhbmdlIG1vZGlmeWluZyAlcyB0byB1c2VyICVzIiAlCisgICAgICAgICAgICAgICAgKGNoYW5nZWxpc3QsIG5ld1VzZXIpKQorCisgICAgICAgIGMgPSBjaGFuZ2VzWzBdCisgICAgICAgIGlmIGNbJ1VzZXInXSA9PSBuZXdVc2VyOiByZXR1cm4gICAjIG5vdGhpbmcgdG8gZG8KKyAgICAgICAgY1snVXNlciddID0gbmV3VXNlcgorICAgICAgICAjIHA0IGRvZXMgbm90IHVuZGVyc3RhbmQgZm9ybWF0IHZlcnNpb24gMyBhbmQgYWJvdmUKKyAgICAgICAgaW5wdXQgPSBtYXJzaGFsLmR1bXBzKGMsIDIpCisKKyAgICAgICAgcmVzdWx0ID0gcDRDbWRMaXN0KCJjaGFuZ2UgLWYgLWkiLCBzdGRpbj1pbnB1dCkKKyAgICAgICAgZm9yIHIgaW4gcmVzdWx0OgorICAgICAgICAgICAgaWYgJ2NvZGUnIGluIHI6CisgICAgICAgICAgICAgICAgaWYgclsnY29kZSddID09ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgIGRpZSgiQ291bGQgbm90IG1vZGlmeSB1c2VyIGZpZWxkIG9mIGNoYW5nZWxpc3QgJXMgdG8gJXM6JXMiICUgKGNoYW5nZWxpc3QsIG5ld1VzZXIsIHJbJ2RhdGEnXSkpCisgICAgICAgICAgICBpZiAnZGF0YScgaW4gcjoKKyAgICAgICAgICAgICAgICBwcmludCgiVXBkYXRlZCB1c2VyIGZpZWxkIGZvciBjaGFuZ2VsaXN0ICVzIHRvICVzIiAlIChjaGFuZ2VsaXN0LCBuZXdVc2VyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZGllKCJDb3VsZCBub3QgbW9kaWZ5IHVzZXIgZmllbGQgb2YgY2hhbmdlbGlzdCAlcyB0byAlcyIgJSAoY2hhbmdlbGlzdCwgbmV3VXNlcikpCisKKyAgICBkZWYgY2FuQ2hhbmdlQ2hhbmdlbGlzdHMoc2VsZik6CisgICAgICAgICMgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgcDQgYWRtaW4gb3Igc3VwZXItdXNlciBwZXJtaXNzaW9ucywgZWl0aGVyIG9mCisgICAgICAgICMgd2hpY2ggYXJlIHJlcXVpcmVkIHRvIG1vZGlmeSBjaGFuZ2VsaXN0cy4KKyAgICAgICAgcmVzdWx0cyA9IHA0Q21kTGlzdChbInByb3RlY3RzIiwgc2VsZi5kZXBvdFBhdGhdKQorICAgICAgICBmb3IgciBpbiByZXN1bHRzOgorICAgICAgICAgICAgaWYgJ3Blcm0nIGluIHI6CisgICAgICAgICAgICAgICAgaWYgclsncGVybSddID09ICdhZG1pbic6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICAgICAgaWYgclsncGVybSddID09ICdzdXBlcic6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgcHJlcGFyZVN1Ym1pdFRlbXBsYXRlKHNlbGYsIGNoYW5nZWxpc3Q9Tm9uZSk6CisgICAgICAgICIiIlJ1biAicDQgY2hhbmdlIC1vIiB0byBncmFiIGEgY2hhbmdlIHNwZWNpZmljYXRpb24gdGVtcGxhdGUuCisgICAgICAgICAgIFRoaXMgZG9lcyBub3QgdXNlICJwNCAtRyIsIGFzIGl0IGlzIG5pY2UgdG8ga2VlcCB0aGUgc3VibWlzc2lvbgorICAgICAgICAgICB0ZW1wbGF0ZSBpbiBvcmlnaW5hbCBvcmRlciwgc2luY2UgYSBodW1hbiBtaWdodCBlZGl0IGl0LgorCisgICAgICAgICAgIFJlbW92ZSBsaW5lcyBpbiB0aGUgRmlsZXMgc2VjdGlvbiB0aGF0IHNob3cgY2hhbmdlcyB0byBmaWxlcworICAgICAgICAgICBvdXRzaWRlIHRoZSBkZXBvdCBwYXRoIHdlJ3JlIGNvbW1pdHRpbmcgaW50by4iIiIKKworICAgICAgICBbdXBzdHJlYW0sIHNldHRpbmdzXSA9IGZpbmRVcHN0cmVhbUJyYW5jaFBvaW50KCkKKworICAgICAgICB0ZW1wbGF0ZSA9ICIiIlwKKyMgQSBQZXJmb3JjZSBDaGFuZ2UgU3BlY2lmaWNhdGlvbi4KKyMKKyMgIENoYW5nZTogICAgICBUaGUgY2hhbmdlIG51bWJlci4gJ25ldycgb24gYSBuZXcgY2hhbmdlbGlzdC4KKyMgIERhdGU6ICAgICAgICBUaGUgZGF0ZSB0aGlzIHNwZWNpZmljYXRpb24gd2FzIGxhc3QgbW9kaWZpZWQuCisjICBDbGllbnQ6ICAgICAgVGhlIGNsaWVudCBvbiB3aGljaCB0aGUgY2hhbmdlbGlzdCB3YXMgY3JlYXRlZC4gIFJlYWQtb25seS4KKyMgIFVzZXI6ICAgICAgICBUaGUgdXNlciB3aG8gY3JlYXRlZCB0aGUgY2hhbmdlbGlzdC4KKyMgIFN0YXR1czogICAgICBFaXRoZXIgJ3BlbmRpbmcnIG9yICdzdWJtaXR0ZWQnLiBSZWFkLW9ubHkuCisjICBUeXBlOiAgICAgICAgRWl0aGVyICdwdWJsaWMnIG9yICdyZXN0cmljdGVkJy4gRGVmYXVsdCBpcyAncHVibGljJy4KKyMgIERlc2NyaXB0aW9uOiBDb21tZW50cyBhYm91dCB0aGUgY2hhbmdlbGlzdC4gIFJlcXVpcmVkLgorIyAgSm9iczogICAgICAgIFdoYXQgb3BlbmVkIGpvYnMgYXJlIHRvIGJlIGNsb3NlZCBieSB0aGlzIGNoYW5nZWxpc3QuCisjICAgICAgICAgICAgICAgWW91IG1heSBkZWxldGUgam9icyBmcm9tIHRoaXMgbGlzdC4gIChOZXcgY2hhbmdlbGlzdHMgb25seS4pCisjICBGaWxlczogICAgICAgV2hhdCBvcGVuZWQgZmlsZXMgZnJvbSB0aGUgZGVmYXVsdCBjaGFuZ2VsaXN0IGFyZSB0byBiZSBhZGRlZAorIyAgICAgICAgICAgICAgIHRvIHRoaXMgY2hhbmdlbGlzdC4gIFlvdSBtYXkgZGVsZXRlIGZpbGVzIGZyb20gdGhpcyBsaXN0LgorIyAgICAgICAgICAgICAgIChOZXcgY2hhbmdlbGlzdHMgb25seS4pCisiIiIKKyAgICAgICAgZmlsZXNfbGlzdCA9IFtdCisgICAgICAgIGluRmlsZXNTZWN0aW9uID0gRmFsc2UKKyAgICAgICAgY2hhbmdlX2VudHJ5ID0gTm9uZQorICAgICAgICBhcmdzID0gWydjaGFuZ2UnLCAnLW8nXQorICAgICAgICBpZiBjaGFuZ2VsaXN0OgorICAgICAgICAgICAgYXJncy5hcHBlbmQoc3RyKGNoYW5nZWxpc3QpKQorICAgICAgICBmb3IgZW50cnkgaW4gcDRDbWRMaXN0KGFyZ3MpOgorICAgICAgICAgICAgaWYgJ2NvZGUnIG5vdCBpbiBlbnRyeToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZW50cnlbJ2NvZGUnXSA9PSAnc3RhdCc6CisgICAgICAgICAgICAgICAgY2hhbmdlX2VudHJ5ID0gZW50cnkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgY2hhbmdlX2VudHJ5OgorICAgICAgICAgICAgZGllKCdGYWlsZWQgdG8gZGVjb2RlIG91dHB1dCBvZiBwNCBjaGFuZ2UgLW8nKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBjaGFuZ2VfZW50cnkuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKCdGaWxlJyk6CisgICAgICAgICAgICAgICAgaWYgJ2RlcG90LXBhdGhzJyBpbiBzZXR0aW5nczoKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IFtwIGZvciBwIGluIHNldHRpbmdzWydkZXBvdC1wYXRocyddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcDRQYXRoU3RhcnRzV2l0aCh2YWx1ZSwgcCldOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcDRQYXRoU3RhcnRzV2l0aCh2YWx1ZSwgc2VsZi5kZXBvdFBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmaWxlc19saXN0LmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIE91dHB1dCBpbiB0aGUgb3JkZXIgZXhwZWN0ZWQgYnkgcHJlcGFyZUxvZ01lc3NhZ2UKKyAgICAgICAgZm9yIGtleSBpbiBbJ0NoYW5nZScsICdDbGllbnQnLCAnVXNlcicsICdTdGF0dXMnLCAnRGVzY3JpcHRpb24nLCAnSm9icyddOgorICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBjaGFuZ2VfZW50cnk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRlbXBsYXRlICs9ICdcbicKKyAgICAgICAgICAgIHRlbXBsYXRlICs9IGtleSArICc6JworICAgICAgICAgICAgaWYga2V5ID09ICdEZXNjcmlwdGlvbic6CisgICAgICAgICAgICAgICAgdGVtcGxhdGUgKz0gJ1xuJworICAgICAgICAgICAgZm9yIGZpZWxkX2xpbmUgaW4gY2hhbmdlX2VudHJ5W2tleV0uc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgIHRlbXBsYXRlICs9ICdcdCcrZmllbGRfbGluZSsnXG4nCisgICAgICAgIGlmIGxlbihmaWxlc19saXN0KSA+IDA6CisgICAgICAgICAgICB0ZW1wbGF0ZSArPSAnXG4nCisgICAgICAgICAgICB0ZW1wbGF0ZSArPSAnRmlsZXM6XG4nCisgICAgICAgIGZvciBwYXRoIGluIGZpbGVzX2xpc3Q6CisgICAgICAgICAgICB0ZW1wbGF0ZSArPSAnXHQnK3BhdGgrJ1xuJworICAgICAgICByZXR1cm4gdGVtcGxhdGUKKworICAgIGRlZiBlZGl0X3RlbXBsYXRlKHNlbGYsIHRlbXBsYXRlX2ZpbGUpOgorICAgICAgICAiIiJJbnZva2UgdGhlIGVkaXRvciB0byBsZXQgdGhlIHVzZXIgY2hhbmdlIHRoZSBzdWJtaXNzaW9uCisgICAgICAgICAgIG1lc3NhZ2UuICBSZXR1cm4gdHJ1ZSBpZiBva2F5IHRvIGNvbnRpbnVlIHdpdGggdGhlIHN1Ym1pdC4iIiIKKworICAgICAgICAjIGlmIGNvbmZpZ3VyZWQgdG8gc2tpcCB0aGUgZWRpdGluZyBwYXJ0LCBqdXN0IHN1Ym1pdAorICAgICAgICBpZiBnaXRDb25maWdCb29sKCJnaXQtcDQuc2tpcFN1Ym1pdEVkaXQiKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBsb29rIGF0IHRoZSBtb2RpZmljYXRpb24gdGltZSwgdG8gY2hlY2sgbGF0ZXIgaWYgdGhlIHVzZXIgc2F2ZWQKKyAgICAgICAgIyB0aGUgZmlsZQorICAgICAgICBtdGltZSA9IG9zLnN0YXQodGVtcGxhdGVfZmlsZSkuc3RfbXRpbWUKKworICAgICAgICAjIGludm9rZSB0aGUgZWRpdG9yCisgICAgICAgIGlmICJQNEVESVRPUiIgaW4gb3MuZW52aXJvbiBhbmQgKG9zLmVudmlyb24uZ2V0KCJQNEVESVRPUiIpICE9ICIiKToKKyAgICAgICAgICAgIGVkaXRvciA9IG9zLmVudmlyb24uZ2V0KCJQNEVESVRPUiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlZGl0b3IgPSByZWFkX3BpcGUoImdpdCB2YXIgR0lUX0VESVRPUiIpLnN0cmlwKCkKKyAgICAgICAgc3lzdGVtKFsic2giLCAiLWMiLCAoJyVzICIkQCInICUgZWRpdG9yKSwgZWRpdG9yLCB0ZW1wbGF0ZV9maWxlXSkKKworICAgICAgICAjIElmIHRoZSBmaWxlIHdhcyBub3Qgc2F2ZWQsIHByb21wdCB0byBzZWUgaWYgdGhpcyBwYXRjaCBzaG91bGQKKyAgICAgICAgIyBiZSBza2lwcGVkLiAgQnV0IHNraXAgdGhpcyB2ZXJpZmljYXRpb24gc3RlcCBpZiBjb25maWd1cmVkIHNvLgorICAgICAgICBpZiBnaXRDb25maWdCb29sKCJnaXQtcDQuc2tpcFN1Ym1pdEVkaXRDaGVjayIpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAjIG1vZGlmaWNhdGlvbiB0aW1lIHVwZGF0ZWQgbWVhbnMgdXNlciBzYXZlZCB0aGUgZmlsZQorICAgICAgICBpZiBvcy5zdGF0KHRlbXBsYXRlX2ZpbGUpLnN0X210aW1lID4gbXRpbWU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJlc3BvbnNlID0gcHJvbXB0KCJTdWJtaXQgdGVtcGxhdGUgdW5jaGFuZ2VkLiBTdWJtaXQgYW55d2F5PyBbeV1lcywgW25dbyAoc2tpcCB0aGlzIHBhdGNoKSAiKQorICAgICAgICBpZiByZXNwb25zZSA9PSAneSc6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiByZXNwb25zZSA9PSAnbic6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBnZXRfZGlmZl9kZXNjcmlwdGlvbihzZWxmLCBlZGl0ZWRGaWxlcywgZmlsZXNUb0FkZCwgc3ltbGlua3MpOgorICAgICAgICAjIGRpZmYKKyAgICAgICAgaWYgIlA0RElGRiIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGRlbChvcy5lbnZpcm9uWyJQNERJRkYiXSkKKyAgICAgICAgZGlmZiA9ICIiCisgICAgICAgIGZvciBlZGl0ZWRGaWxlIGluIGVkaXRlZEZpbGVzOgorICAgICAgICAgICAgZGlmZiArPSBwNF9yZWFkX3BpcGUoWydkaWZmJywgJy1kdScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmRfZW5jb2RlKGVkaXRlZEZpbGUpXSkKKworICAgICAgICAjIG5ldyBmaWxlIGRpZmYKKyAgICAgICAgbmV3ZGlmZiA9ICIiCisgICAgICAgIGZvciBuZXdGaWxlIGluIGZpbGVzVG9BZGQ6CisgICAgICAgICAgICBuZXdkaWZmICs9ICI9PT09IG5ldyBmaWxlID09PT1cbiIKKyAgICAgICAgICAgIG5ld2RpZmYgKz0gIi0tLSAvZGV2L251bGxcbiIKKyAgICAgICAgICAgIG5ld2RpZmYgKz0gIisrKyAlc1xuIiAlIG5ld0ZpbGUKKworICAgICAgICAgICAgaXNfbGluayA9IG9zLnBhdGguaXNsaW5rKG5ld0ZpbGUpCisgICAgICAgICAgICBleHBlY3RfbGluayA9IG5ld0ZpbGUgaW4gc3ltbGlua3MKKworICAgICAgICAgICAgaWYgaXNfbGluayBhbmQgZXhwZWN0X2xpbms6CisgICAgICAgICAgICAgICAgbmV3ZGlmZiArPSAiKyVzXG4iICUgb3MucmVhZGxpbmsobmV3RmlsZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4obmV3RmlsZSwgInIiKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgIG5ld2RpZmYgKz0gIisiICsgbGluZQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHJldHVybiAoZGlmZiArIG5ld2RpZmYpLnJlcGxhY2UoJ1xyXG4nLCAnXG4nKQorCisgICAgZGVmIGFwcGx5Q29tbWl0KHNlbGYsIGlkKToKKyAgICAgICAgIiIiQXBwbHkgb25lIGNvbW1pdCwgcmV0dXJuIFRydWUgaWYgaXQgc3VjY2VlZGVkLiIiIgorCisgICAgICAgIHByaW50KCJBcHBseWluZyIsIHJlYWRfcGlwZShbImdpdCIsICJzaG93IiwgIi1zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mb3JtYXQ9Zm9ybWF0OiVoICVzIiwgaWRdKSkKKworICAgICAgICAocDRVc2VyLCBnaXRFbWFpbCkgPSBzZWxmLnA0VXNlckZvckNvbW1pdChpZCkKKworICAgICAgICBkaWZmID0gcmVhZF9waXBlX2xpbmVzKCJnaXQgZGlmZi10cmVlIC1yICVzIFwiJXNeXCIgXCIlc1wiIiAlIChzZWxmLmRpZmZPcHRzLCBpZCwgaWQpKQorICAgICAgICBmaWxlc1RvQWRkID0gc2V0KCkKKyAgICAgICAgZmlsZXNUb0NoYW5nZVR5cGUgPSBzZXQoKQorICAgICAgICBmaWxlc1RvRGVsZXRlID0gc2V0KCkKKyAgICAgICAgZWRpdGVkRmlsZXMgPSBzZXQoKQorICAgICAgICBwdXJlUmVuYW1lQ29weSA9IHNldCgpCisgICAgICAgIHN5bWxpbmtzID0gc2V0KCkKKyAgICAgICAgZmlsZXNUb0NoYW5nZUV4ZWNCaXQgPSB7fQorICAgICAgICBhbGxfZmlsZXMgPSBsaXN0KCkKKworICAgICAgICBmb3IgbGluZSBpbiBkaWZmOgorICAgICAgICAgICAgZGlmZiA9IHBhcnNlRGlmZlRyZWVFbnRyeShsaW5lKQorICAgICAgICAgICAgbW9kaWZpZXIgPSBkaWZmWydzdGF0dXMnXQorICAgICAgICAgICAgcGF0aCA9IGRpZmZbJ3NyYyddCisgICAgICAgICAgICBhbGxfZmlsZXMuYXBwZW5kKHBhdGgpCisKKyAgICAgICAgICAgIGlmIG1vZGlmaWVyID09ICJNIjoKKyAgICAgICAgICAgICAgICBwNF9lZGl0KHBhdGgpCisgICAgICAgICAgICAgICAgaWYgaXNNb2RlRXhlY0NoYW5nZWQoZGlmZlsnc3JjX21vZGUnXSwgZGlmZlsnZHN0X21vZGUnXSk6CisgICAgICAgICAgICAgICAgICAgIGZpbGVzVG9DaGFuZ2VFeGVjQml0W3BhdGhdID0gZGlmZlsnZHN0X21vZGUnXQorICAgICAgICAgICAgICAgIGVkaXRlZEZpbGVzLmFkZChwYXRoKQorICAgICAgICAgICAgZWxpZiBtb2RpZmllciA9PSAiQSI6CisgICAgICAgICAgICAgICAgZmlsZXNUb0FkZC5hZGQocGF0aCkKKyAgICAgICAgICAgICAgICBmaWxlc1RvQ2hhbmdlRXhlY0JpdFtwYXRoXSA9IGRpZmZbJ2RzdF9tb2RlJ10KKyAgICAgICAgICAgICAgICBpZiBwYXRoIGluIGZpbGVzVG9EZWxldGU6CisgICAgICAgICAgICAgICAgICAgIGZpbGVzVG9EZWxldGUucmVtb3ZlKHBhdGgpCisKKyAgICAgICAgICAgICAgICBkc3RfbW9kZSA9IGludChkaWZmWydkc3RfbW9kZSddLCA4KQorICAgICAgICAgICAgICAgIGlmIGRzdF9tb2RlID09IDBvMTIwMDAwOgorICAgICAgICAgICAgICAgICAgICBzeW1saW5rcy5hZGQocGF0aCkKKworICAgICAgICAgICAgZWxpZiBtb2RpZmllciA9PSAiRCI6CisgICAgICAgICAgICAgICAgZmlsZXNUb0RlbGV0ZS5hZGQocGF0aCkKKyAgICAgICAgICAgICAgICBpZiBwYXRoIGluIGZpbGVzVG9BZGQ6CisgICAgICAgICAgICAgICAgICAgIGZpbGVzVG9BZGQucmVtb3ZlKHBhdGgpCisgICAgICAgICAgICBlbGlmIG1vZGlmaWVyID09ICJDIjoKKyAgICAgICAgICAgICAgICBzcmMsIGRlc3QgPSBkaWZmWydzcmMnXSwgZGlmZlsnZHN0J10KKyAgICAgICAgICAgICAgICBhbGxfZmlsZXMuYXBwZW5kKGRlc3QpCisgICAgICAgICAgICAgICAgcDRfaW50ZWdyYXRlKHNyYywgZGVzdCkKKyAgICAgICAgICAgICAgICBwdXJlUmVuYW1lQ29weS5hZGQoZGVzdCkKKyAgICAgICAgICAgICAgICBpZiBkaWZmWydzcmNfc2hhMSddICE9IGRpZmZbJ2RzdF9zaGExJ106CisgICAgICAgICAgICAgICAgICAgIHA0X2VkaXQoZGVzdCkKKyAgICAgICAgICAgICAgICAgICAgcHVyZVJlbmFtZUNvcHkuZGlzY2FyZChkZXN0KQorICAgICAgICAgICAgICAgIGlmIGlzTW9kZUV4ZWNDaGFuZ2VkKGRpZmZbJ3NyY19tb2RlJ10sIGRpZmZbJ2RzdF9tb2RlJ10pOgorICAgICAgICAgICAgICAgICAgICBwNF9lZGl0KGRlc3QpCisgICAgICAgICAgICAgICAgICAgIHB1cmVSZW5hbWVDb3B5LmRpc2NhcmQoZGVzdCkKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNUb0NoYW5nZUV4ZWNCaXRbZGVzdF0gPSBkaWZmWydkc3RfbW9kZSddCisgICAgICAgICAgICAgICAgaWYgc2VsZi5pc1dpbmRvd3M6CisgICAgICAgICAgICAgICAgICAgICMgdHVybiBvZmYgcmVhZC1vbmx5IGF0dHJpYnV0ZQorICAgICAgICAgICAgICAgICAgICBvcy5jaG1vZChkZXN0LCBzdGF0LlNfSVdSSVRFKQorICAgICAgICAgICAgICAgIG9zLnVubGluayhkZXN0KQorICAgICAgICAgICAgICAgIGVkaXRlZEZpbGVzLmFkZChkZXN0KQorICAgICAgICAgICAgZWxpZiBtb2RpZmllciA9PSAiUiI6CisgICAgICAgICAgICAgICAgc3JjLCBkZXN0ID0gZGlmZlsnc3JjJ10sIGRpZmZbJ2RzdCddCisgICAgICAgICAgICAgICAgYWxsX2ZpbGVzLmFwcGVuZChkZXN0KQorICAgICAgICAgICAgICAgIGlmIHNlbGYucDRIYXNNb3ZlQ29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgcDRfZWRpdChzcmMpICAgICAgICAjIHNyYyBtdXN0IGJlIG9wZW4gYmVmb3JlIG1vdmUKKyAgICAgICAgICAgICAgICAgICAgcDRfbW92ZShzcmMsIGRlc3QpICAjIG9wZW5zIGZvciAobW92ZS9kZWxldGUsIG1vdmUvYWRkKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHA0X2ludGVncmF0ZShzcmMsIGRlc3QpCisgICAgICAgICAgICAgICAgICAgIGlmIGRpZmZbJ3NyY19zaGExJ10gIT0gZGlmZlsnZHN0X3NoYTEnXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHA0X2VkaXQoZGVzdCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVSZW5hbWVDb3B5LmFkZChkZXN0KQorICAgICAgICAgICAgICAgIGlmIGlzTW9kZUV4ZWNDaGFuZ2VkKGRpZmZbJ3NyY19tb2RlJ10sIGRpZmZbJ2RzdF9tb2RlJ10pOgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5wNEhhc01vdmVDb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgcDRfZWRpdChkZXN0KSAgICMgd2l0aCBtb3ZlOiBhbHJlYWR5IG9wZW4sIHdyaXRhYmxlCisgICAgICAgICAgICAgICAgICAgIGZpbGVzVG9DaGFuZ2VFeGVjQml0W2Rlc3RdID0gZGlmZlsnZHN0X21vZGUnXQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnA0SGFzTW92ZUNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuaXNXaW5kb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2htb2QoZGVzdCwgc3RhdC5TX0lXUklURSkKKyAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisgICAgICAgICAgICAgICAgICAgIGZpbGVzVG9EZWxldGUuYWRkKHNyYykKKyAgICAgICAgICAgICAgICBlZGl0ZWRGaWxlcy5hZGQoZGVzdCkKKyAgICAgICAgICAgIGVsaWYgbW9kaWZpZXIgPT0gIlQiOgorICAgICAgICAgICAgICAgIGZpbGVzVG9DaGFuZ2VUeXBlLmFkZChwYXRoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkaWUoInVua25vd24gbW9kaWZpZXIgJXMgZm9yICVzIiAlIChtb2RpZmllciwgcGF0aCkpCisKKyAgICAgICAgZGlmZmNtZCA9ICJnaXQgZGlmZi10cmVlIC0tZnVsbC1pbmRleCAtcCBcIiVzXCIiICUgKGlkKQorICAgICAgICBwYXRjaGNtZCA9IGRpZmZjbWQgKyAiIHwgZ2l0IGFwcGx5ICIKKyAgICAgICAgdHJ5UGF0Y2hDbWQgPSBwYXRjaGNtZCArICItLWNoZWNrIC0iCisgICAgICAgIGFwcGx5UGF0Y2hDbWQgPSBwYXRjaGNtZCArICItLWNoZWNrIC0tYXBwbHkgLSIKKyAgICAgICAgcGF0Y2hfc3VjY2VlZGVkID0gVHJ1ZQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiVHJ5UGF0Y2g6ICVzIiAlIHRyeVBhdGNoQ21kKQorCisgICAgICAgIGlmIG9zLnN5c3RlbSh0cnlQYXRjaENtZCkgIT0gMDoKKyAgICAgICAgICAgIGZpeGVkX3Jjc19rZXl3b3JkcyA9IEZhbHNlCisgICAgICAgICAgICBwYXRjaF9zdWNjZWVkZWQgPSBGYWxzZQorICAgICAgICAgICAgcHJpbnQoIlVuZm9ydHVuYXRlbHkgYXBwbHlpbmcgdGhlIGNoYW5nZSBmYWlsZWQhIikKKworICAgICAgICAgICAgIyBQYXRjaCBmYWlsZWQsIG1heWJlIGl0J3MganVzdCBSQ1Mga2V5d29yZCB3b2VzLiBMb29rIHRocm91Z2gKKyAgICAgICAgICAgICMgdGhlIHBhdGNoIHRvIHNlZSBpZiB0aGF0J3MgcG9zc2libGUuCisgICAgICAgICAgICBpZiBnaXRDb25maWdCb29sKCJnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXAiKToKKyAgICAgICAgICAgICAgICBmaWxlID0gTm9uZQorICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBOb25lCisgICAgICAgICAgICAgICAga3dmaWxlcyA9IHt9CisgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gZWRpdGVkRmlsZXMgfCBmaWxlc1RvRGVsZXRlOgorICAgICAgICAgICAgICAgICAgICAjIGRpZCB0aGlzIGZpbGUncyBkZWx0YSBjb250YWluIFJDUyBrZXl3b3Jkcz8KKyAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IHA0X2tleXdvcmRzX3JlZ2V4cF9mb3JfZmlsZShmaWxlKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHBhdHRlcm46CisgICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgZmlsZSBpcyBhIHBvc3NpYmlsaXR5Li4ubG9vayBmb3IgUkNTIGtleXdvcmRzLgorICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXhwID0gcmUuY29tcGlsZShwYXR0ZXJuLCByZS5WRVJCT1NFKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gcmVhZF9waXBlX2xpbmVzKFsiZ2l0IiwgImRpZmYiLCAiJXNeLi4lcyIgJSAoaWQsIGlkKSwgZmlsZV0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlZ2V4cC5zZWFyY2gobGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiZ290IGtleXdvcmQgbWF0Y2ggb24gJXMgaW4gJXMgaW4gJXMiICUgKHBhdHRlcm4sIGxpbmUsIGZpbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2ZpbGVzW2ZpbGVdID0gcGF0dGVybgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4ga3dmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJ6YXBwaW5nICVzIHdpdGggJXMiICUgKGxpbmUscGF0dGVybikpCisgICAgICAgICAgICAgICAgICAgICMgRmlsZSBpcyBiZWluZyBkZWxldGVkLCBzbyBub3Qgb3BlbiBpbiBwNC4gIE11c3QKKyAgICAgICAgICAgICAgICAgICAgIyBkaXNhYmxlIHRoZSByZWFkLW9ubHkgYml0IG9uIHdpbmRvd3MuCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuaXNXaW5kb3dzIGFuZCBmaWxlIG5vdCBpbiBlZGl0ZWRGaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNobW9kKGZpbGUsIHN0YXQuU19JV1JJVEUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucGF0Y2hSQ1NLZXl3b3JkcyhmaWxlLCBrd2ZpbGVzW2ZpbGVdKQorICAgICAgICAgICAgICAgICAgICBmaXhlZF9yY3Nfa2V5d29yZHMgPSBUcnVlCisKKyAgICAgICAgICAgIGlmIGZpeGVkX3Jjc19rZXl3b3JkczoKKyAgICAgICAgICAgICAgICBwcmludCgiUmV0cnlpbmcgdGhlIHBhdGNoIHdpdGggUkNTIGtleXdvcmRzIGNsZWFuZWQgdXAiKQorICAgICAgICAgICAgICAgIGlmIG9zLnN5c3RlbSh0cnlQYXRjaENtZCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hfc3VjY2VlZGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBwcmludCgiUGF0Y2ggc3VjY2Vlc2VkIHRoaXMgdGltZSB3aXRoIFJDUyBrZXl3b3JkcyBjbGVhbmVkIikKKworICAgICAgICBpZiBub3QgcGF0Y2hfc3VjY2VlZGVkOgorICAgICAgICAgICAgZm9yIGYgaW4gZWRpdGVkRmlsZXM6CisgICAgICAgICAgICAgICAgcDRfcmV2ZXJ0KGYpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAjCisgICAgICAgICMgQXBwbHkgdGhlIHBhdGNoIGZvciByZWFsLCBhbmQgZG8gYWRkL2RlbGV0ZS8reCBoYW5kbGluZy4KKyAgICAgICAgIworICAgICAgICBzeXN0ZW0oYXBwbHlQYXRjaENtZCkKKworICAgICAgICBmb3IgZiBpbiBmaWxlc1RvQ2hhbmdlVHlwZToKKyAgICAgICAgICAgIHA0X2VkaXQoZiwgIi10IiwgImF1dG8iKQorICAgICAgICBmb3IgZiBpbiBmaWxlc1RvQWRkOgorICAgICAgICAgICAgcDRfYWRkKGYpCisgICAgICAgIGZvciBmIGluIGZpbGVzVG9EZWxldGU6CisgICAgICAgICAgICBwNF9yZXZlcnQoZikKKyAgICAgICAgICAgIHA0X2RlbGV0ZShmKQorCisgICAgICAgICMgU2V0L2NsZWFyIGV4ZWN1dGFibGUgYml0cworICAgICAgICBmb3IgZiBpbiBmaWxlc1RvQ2hhbmdlRXhlY0JpdC5rZXlzKCk6CisgICAgICAgICAgICBtb2RlID0gZmlsZXNUb0NoYW5nZUV4ZWNCaXRbZl0KKyAgICAgICAgICAgIHNldFA0RXhlY0JpdChmLCBtb2RlKQorCisgICAgICAgIHVwZGF0ZV9zaGVsdmUgPSAwCisgICAgICAgIGlmIGxlbihzZWxmLnVwZGF0ZV9zaGVsdmUpID4gMDoKKyAgICAgICAgICAgIHVwZGF0ZV9zaGVsdmUgPSBzZWxmLnVwZGF0ZV9zaGVsdmUucG9wKDApCisgICAgICAgICAgICBwNF9yZW9wZW5faW5fY2hhbmdlKHVwZGF0ZV9zaGVsdmUsIGFsbF9maWxlcykKKworICAgICAgICAjCisgICAgICAgICMgQnVpbGQgcDQgY2hhbmdlIGRlc2NyaXB0aW9uLCBzdGFydGluZyB3aXRoIHRoZSBjb250ZW50cworICAgICAgICAjIG9mIHRoZSBnaXQgY29tbWl0IG1lc3NhZ2UuCisgICAgICAgICMKKyAgICAgICAgbG9nTWVzc2FnZSA9IGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdChpZCkKKyAgICAgICAgbG9nTWVzc2FnZSA9IGxvZ01lc3NhZ2Uuc3RyaXAoKQorICAgICAgICAobG9nTWVzc2FnZSwgam9icykgPSBzZWxmLnNlcGFyYXRlX2pvYnNfZnJvbV9kZXNjcmlwdGlvbihsb2dNZXNzYWdlKQorCisgICAgICAgIHRlbXBsYXRlID0gc2VsZi5wcmVwYXJlU3VibWl0VGVtcGxhdGUodXBkYXRlX3NoZWx2ZSkKKyAgICAgICAgc3VibWl0VGVtcGxhdGUgPSBzZWxmLnByZXBhcmVMb2dNZXNzYWdlKHRlbXBsYXRlLCBsb2dNZXNzYWdlLCBqb2JzKQorCisgICAgICAgIGlmIHNlbGYucHJlc2VydmVVc2VyOgorICAgICAgICAgICBzdWJtaXRUZW1wbGF0ZSArPSAiXG4jIyMjIyMjIyBBY3R1YWwgdXNlciAlcywgbW9kaWZpZWQgYWZ0ZXIgY29tbWl0XG4iICUgcDRVc2VyCisKKyAgICAgICAgaWYgc2VsZi5jaGVja0F1dGhvcnNoaXAgYW5kIG5vdCBzZWxmLnA0VXNlcklzTWUocDRVc2VyKToKKyAgICAgICAgICAgIHN1Ym1pdFRlbXBsYXRlICs9ICIjIyMjIyMjIyBnaXQgYXV0aG9yICVzIGRvZXMgbm90IG1hdGNoIHlvdXIgcDQgYWNjb3VudC5cbiIgJSBnaXRFbWFpbAorICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgKz0gIiMjIyMjIyMjIFVzZSBvcHRpb24gLS1wcmVzZXJ2ZS11c2VyIHRvIG1vZGlmeSBhdXRob3JzaGlwLlxuIgorICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgKz0gIiMjIyMjIyMjIFZhcmlhYmxlIGdpdC1wNC5za2lwVXNlck5hbWVDaGVjayBoaWRlcyB0aGlzIG1lc3NhZ2UuXG4iCisKKyAgICAgICAgc2VwYXJhdG9yTGluZSA9ICIjIyMjIyMjIyBldmVyeXRoaW5nIGJlbG93IHRoaXMgbGluZSBpcyBqdXN0IHRoZSBkaWZmICMjIyMjIyNcbiIKKyAgICAgICAgaWYgbm90IHNlbGYucHJlcGFyZV9wNF9vbmx5OgorICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgKz0gc2VwYXJhdG9yTGluZQorICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgKz0gc2VsZi5nZXRfZGlmZl9kZXNjcmlwdGlvbihlZGl0ZWRGaWxlcywgZmlsZXNUb0FkZCwgc3ltbGlua3MpCisKKyAgICAgICAgKGhhbmRsZSwgZmlsZU5hbWUpID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIHRtcEZpbGUgPSBvcy5mZG9wZW4oaGFuZGxlLCAidytiIikKKyAgICAgICAgaWYgc2VsZi5pc1dpbmRvd3M6CisgICAgICAgICAgICBzdWJtaXRUZW1wbGF0ZSA9IHN1Ym1pdFRlbXBsYXRlLnJlcGxhY2UoIlxuIiwgIlxyXG4iKQorICAgICAgICB0bXBGaWxlLndyaXRlKGVuY29kZV90ZXh0X3N0cmVhbShzdWJtaXRUZW1wbGF0ZSkpCisgICAgICAgIHRtcEZpbGUuY2xvc2UoKQorCisgICAgICAgIHN1Ym1pdHRlZCA9IEZhbHNlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBBbGxvdyB0aGUgaG9vayB0byBlZGl0IHRoZSBjaGFuZ2VsaXN0IHRleHQgYmVmb3JlIHByZXNlbnRpbmcgaXQKKyAgICAgICAgICAgICMgdG8gdGhlIHVzZXIuCisgICAgICAgICAgICBpZiBub3QgcnVuX2dpdF9ob29rKCJwNC1wcmVwYXJlLWNoYW5nZWxpc3QiLCBbZmlsZU5hbWVdKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgaWYgc2VsZi5wcmVwYXJlX3A0X29ubHk6CisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgTGVhdmUgdGhlIHA0IHRyZWUgcHJlcGFyZWQsIGFuZCB0aGUgc3VibWl0IHRlbXBsYXRlIGFyb3VuZAorICAgICAgICAgICAgICAgICMgYW5kIGxldCB0aGUgdXNlciBkZWNpZGUgd2hhdCB0byBkbyBuZXh0CisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgIHN1Ym1pdHRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBwcmludCgiIikKKyAgICAgICAgICAgICAgICBwcmludCgiUDQgd29ya3NwYWNlIHByZXBhcmVkIGZvciBzdWJtaXNzaW9uLiIpCisgICAgICAgICAgICAgICAgcHJpbnQoIlRvIHN1Ym1pdCBvciByZXZlcnQsIGdvIHRvIGNsaWVudCB3b3Jrc3BhY2UiKQorICAgICAgICAgICAgICAgIHByaW50KCIgICIgKyBzZWxmLmNsaWVudFBhdGgpCisgICAgICAgICAgICAgICAgcHJpbnQoIiIpCisgICAgICAgICAgICAgICAgcHJpbnQoIlRvIHN1Ym1pdCwgdXNlIFwicDQgc3VibWl0XCIgdG8gd3JpdGUgYSBuZXcgZGVzY3JpcHRpb24sIikKKyAgICAgICAgICAgICAgICBwcmludCgib3IgXCJwNCBzdWJtaXQgLWkgPCVzXCIgdG8gdXNlIHRoZSBvbmUgcHJlcGFyZWQgYnkiIFwKKyAgICAgICAgICAgICAgICAgICAgICAiIFwiZ2l0IHA0XCIuIiAlIGZpbGVOYW1lKQorICAgICAgICAgICAgICAgIHByaW50KCJZb3UgY2FuIGRlbGV0ZSB0aGUgZmlsZSBcIiVzXCIgd2hlbiBmaW5pc2hlZC4iICUgZmlsZU5hbWUpCisKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnByZXNlcnZlVXNlciBhbmQgcDRVc2VyIGFuZCBub3Qgc2VsZi5wNFVzZXJJc01lKHA0VXNlcik6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJUbyBwcmVzZXJ2ZSBjaGFuZ2Ugb3duZXJzaGlwIGJ5IHVzZXIgJXMsIHlvdSBtdXN0XG4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImRvIFwicDQgY2hhbmdlIC1mIDxjaGFuZ2U+XCIgYWZ0ZXIgc3VibWl0dGluZyBhbmRcbiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZWRpdCB0aGUgVXNlciBmaWVsZC4iKQorICAgICAgICAgICAgICAgIGlmIHB1cmVSZW5hbWVDb3B5OgorICAgICAgICAgICAgICAgICAgICBwcmludCgiQWZ0ZXIgc3VibWl0dGluZywgcmVuYW1lZCBmaWxlcyBtdXN0IGJlIHJlLXN5bmNlZC4iKQorICAgICAgICAgICAgICAgICAgICBwcmludCgiSW52b2tlIFwicDQgc3luYyAtZlwiIG9uIGVhY2ggb2YgdGhlc2UgZmlsZXM6IikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gcHVyZVJlbmFtZUNvcHk6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiICAiICsgZikKKworICAgICAgICAgICAgICAgIHByaW50KCIiKQorICAgICAgICAgICAgICAgIHByaW50KCJUbyByZXZlcnQgdGhlIGNoYW5nZXMsIHVzZSBcInA0IHJldmVydCAuLi5cIiwgYW5kIGRlbGV0ZSIpCisgICAgICAgICAgICAgICAgcHJpbnQoInRoZSBzdWJtaXQgdGVtcGxhdGUgZmlsZSBcIiVzXCIiICUgZmlsZU5hbWUpCisgICAgICAgICAgICAgICAgaWYgZmlsZXNUb0FkZDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlNpbmNlIHRoZSBjb21taXQgYWRkcyBuZXcgZmlsZXMsIHRoZXkgbXVzdCBiZSBkZWxldGVkOiIpCisgICAgICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzVG9BZGQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiICAiICsgZikKKyAgICAgICAgICAgICAgICBwcmludCgiIikKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICBpZiBzZWxmLmVkaXRfdGVtcGxhdGUoZmlsZU5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLm5vX3ZlcmlmeToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJ1bl9naXRfaG9vaygicDQtY2hhbmdlbGlzdCIsIFtmaWxlTmFtZV0pOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlRoZSBwNC1jaGFuZ2VsaXN0IGhvb2sgZmFpbGVkLiIpCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICAgICAgIyByZWFkIHRoZSBlZGl0ZWQgbWVzc2FnZSBhbmQgc3VibWl0CisgICAgICAgICAgICAgICAgdG1wRmlsZSA9IG9wZW4oZmlsZU5hbWUsICJyYiIpCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGRlY29kZV90ZXh0X3N0cmVhbSh0bXBGaWxlLnJlYWQoKSkKKyAgICAgICAgICAgICAgICB0bXBGaWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmlzV2luZG93czoKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgiXHJcbiIsICJcbiIpCisgICAgICAgICAgICAgICAgaWYgbWVzc2FnZS5maW5kKHNlcGFyYXRvckxpbmUpICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBzdWJtaXRUZW1wbGF0ZSA9IG1lc3NhZ2VbOm1lc3NhZ2UuaW5kZXgoc2VwYXJhdG9yTGluZSldCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgPSBtZXNzYWdlCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3VibWl0VGVtcGxhdGUuc3RyaXAoKSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkNoYW5nZWxpc3QgaXMgZW1wdHksIGFib3J0aW5nIHRoaXMgY2hhbmdlbGlzdC4iKQorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgICAgICBpZiB1cGRhdGVfc2hlbHZlOgorICAgICAgICAgICAgICAgICAgICBwNF93cml0ZV9waXBlKFsnc2hlbHZlJywgJy1yJywgJy1pJ10sIHN1Ym1pdFRlbXBsYXRlKQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5zaGVsdmU6CisgICAgICAgICAgICAgICAgICAgIHA0X3dyaXRlX3BpcGUoWydzaGVsdmUnLCAnLWknXSwgc3VibWl0VGVtcGxhdGUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcDRfd3JpdGVfcGlwZShbJ3N1Ym1pdCcsICctaSddLCBzdWJtaXRUZW1wbGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgcmVuYW1lL2NvcHkgaGFwcGVuZWQgYnkgYXBwbHlpbmcgYSBwYXRjaCB0aGF0IGNyZWF0ZWQgYQorICAgICAgICAgICAgICAgICAgICAjIG5ldyBmaWxlLiAgVGhpcyBsZWF2ZXMgaXQgd3JpdGFibGUsIHdoaWNoIGNvbmZ1c2VzIHA0LgorICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBwdXJlUmVuYW1lQ29weToKKyAgICAgICAgICAgICAgICAgICAgICAgIHA0X3N5bmMoZiwgIi1mIikKKworICAgICAgICAgICAgICAgIGlmIHNlbGYucHJlc2VydmVVc2VyOgorICAgICAgICAgICAgICAgICAgICBpZiBwNFVzZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEdldCBsYXN0IGNoYW5nZWxpc3QgbnVtYmVyLiBDYW5ub3QgZWFzaWx5IGdldCBpdCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBzdWJtaXQgY29tbWFuZCBvdXRwdXQgYXMgdGhlIG91dHB1dCBpcworICAgICAgICAgICAgICAgICAgICAgICAgIyB1bm1hcnNoYWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VsaXN0ID0gc2VsZi5sYXN0UDRDaGFuZ2VsaXN0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kaWZ5Q2hhbmdlbGlzdFVzZXIoY2hhbmdlbGlzdCwgcDRVc2VyKQorCisgICAgICAgICAgICAgICAgc3VibWl0dGVkID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgcnVuX2dpdF9ob29rKCJwNC1wb3N0LWNoYW5nZWxpc3QiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIyBSZXZlcnQgY2hhbmdlcyBpZiB3ZSBza2lwIHRoaXMgcGF0Y2gKKyAgICAgICAgICAgIGlmIG5vdCBzdWJtaXR0ZWQgb3Igc2VsZi5zaGVsdmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zaGVsdmU6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICgiUmV2ZXJ0aW5nIHNoZWx2ZWQgZmlsZXMuIikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAoIlN1Ym1pc3Npb24gY2FuY2VsbGVkLCB1bmRvaW5nIHA0IGNoYW5nZXMuIikKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBlZGl0ZWRGaWxlcyB8IGZpbGVzVG9EZWxldGU6CisgICAgICAgICAgICAgICAgICAgIHA0X3JldmVydChmKQorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzVG9BZGQ6CisgICAgICAgICAgICAgICAgICAgIHA0X3JldmVydChmKQorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZikKKworICAgICAgICAgICAgaWYgbm90IHNlbGYucHJlcGFyZV9wNF9vbmx5OgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlTmFtZSkKKyAgICAgICAgcmV0dXJuIHN1Ym1pdHRlZAorCisgICAgIyBFeHBvcnQgZ2l0IHRhZ3MgYXMgcDQgbGFiZWxzLiBDcmVhdGUgYSBwNCBsYWJlbCBhbmQgdGhlbiB0YWcKKyAgICAjIHdpdGggdGhhdC4KKyAgICBkZWYgZXhwb3J0R2l0VGFncyhzZWxmLCBnaXRUYWdzKToKKyAgICAgICAgdmFsaWRMYWJlbFJlZ2V4cCA9IGdpdENvbmZpZygiZ2l0LXA0LmxhYmVsRXhwb3J0UmVnZXhwIikKKyAgICAgICAgaWYgbGVuKHZhbGlkTGFiZWxSZWdleHApID09IDA6CisgICAgICAgICAgICB2YWxpZExhYmVsUmVnZXhwID0gZGVmYXVsdExhYmVsUmVnZXhwCisgICAgICAgIG0gPSByZS5jb21waWxlKHZhbGlkTGFiZWxSZWdleHApCisKKyAgICAgICAgZm9yIG5hbWUgaW4gZ2l0VGFnczoKKworICAgICAgICAgICAgaWYgbm90IG0ubWF0Y2gobmFtZSk6CisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoInRhZyAlcyBkb2VzIG5vdCBtYXRjaCByZWdleHAgJXMiICUgKG5hbWUsIHZhbGlkTGFiZWxSZWdleHApKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgR2V0IHRoZSBwNCBjb21taXQgdGhpcyBjb3JyZXNwb25kcyB0bworICAgICAgICAgICAgbG9nTWVzc2FnZSA9IGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdChuYW1lKQorICAgICAgICAgICAgdmFsdWVzID0gZXh0cmFjdFNldHRpbmdzR2l0TG9nKGxvZ01lc3NhZ2UpCisKKyAgICAgICAgICAgIGlmICdjaGFuZ2UnIG5vdCBpbiB2YWx1ZXM6CisgICAgICAgICAgICAgICAgIyBhIHRhZyBwb2ludGluZyB0byBzb21ldGhpbmcgbm90IHNlbnQgdG8gcDQ7IGlnbm9yZQorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJnaXQgdGFnICVzIGRvZXMgbm90IGdpdmUgYSBwNCBjb21taXQiICUgbmFtZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjaGFuZ2VsaXN0ID0gdmFsdWVzWydjaGFuZ2UnXQorCisgICAgICAgICAgICAjIEdldCB0aGUgdGFnIGRldGFpbHMuCisgICAgICAgICAgICBpbkhlYWRlciA9IFRydWUKKyAgICAgICAgICAgIGlzQW5ub3RhdGVkID0gRmFsc2UKKyAgICAgICAgICAgIGJvZHkgPSBbXQorICAgICAgICAgICAgZm9yIGwgaW4gcmVhZF9waXBlX2xpbmVzKFsiZ2l0IiwgImNhdC1maWxlIiwgIi1wIiwgbmFtZV0pOgorICAgICAgICAgICAgICAgIGwgPSBsLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBpbkhlYWRlcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2gocid0YWdccysnLCBsKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5ub3RhdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbGlmIHJlLm1hdGNoKHInXHMqJCcsIGwpOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5IZWFkZXIgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBib2R5LmFwcGVuZChsKQorCisgICAgICAgICAgICBpZiBub3QgaXNBbm5vdGF0ZWQ6CisgICAgICAgICAgICAgICAgYm9keSA9IFsibGlnaHR3ZWlnaHQgdGFnIGltcG9ydGVkIGJ5IGdpdCBwNFxuIl0KKworICAgICAgICAgICAgIyBDcmVhdGUgdGhlIGxhYmVsIC0gdXNlIHRoZSBzYW1lIHZpZXcgYXMgdGhlIGNsaWVudCBzcGVjIHdlIGFyZSB1c2luZworICAgICAgICAgICAgY2xpZW50U3BlYyA9IGdldENsaWVudFNwZWMoKQorCisgICAgICAgICAgICBsYWJlbFRlbXBsYXRlICA9ICJMYWJlbDogJXNcbiIgJSBuYW1lCisgICAgICAgICAgICBsYWJlbFRlbXBsYXRlICs9ICJEZXNjcmlwdGlvbjpcbiIKKyAgICAgICAgICAgIGZvciBiIGluIGJvZHk6CisgICAgICAgICAgICAgICAgbGFiZWxUZW1wbGF0ZSArPSAiXHQiICsgYiArICJcbiIKKyAgICAgICAgICAgIGxhYmVsVGVtcGxhdGUgKz0gIlZpZXc6XG4iCisgICAgICAgICAgICBmb3IgZGVwb3Rfc2lkZSBpbiBjbGllbnRTcGVjLm1hcHBpbmdzOgorICAgICAgICAgICAgICAgIGxhYmVsVGVtcGxhdGUgKz0gIlx0JXNcbiIgJSBkZXBvdF9zaWRlCisKKyAgICAgICAgICAgIGlmIHNlbGYuZHJ5X3J1bjoKKyAgICAgICAgICAgICAgICBwcmludCgiV291bGQgY3JlYXRlIHA0IGxhYmVsICVzIGZvciB0YWciICUgbmFtZSkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5wcmVwYXJlX3A0X29ubHk6CisgICAgICAgICAgICAgICAgcHJpbnQoIk5vdCBjcmVhdGluZyBwNCBsYWJlbCAlcyBmb3IgdGFnIGR1ZSB0byBvcHRpb24iIFwKKyAgICAgICAgICAgICAgICAgICAgICAiIC0tcHJlcGFyZS1wNC1vbmx5IiAlIG5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHA0X3dyaXRlX3BpcGUoWyJsYWJlbCIsICItaSJdLCBsYWJlbFRlbXBsYXRlKQorCisgICAgICAgICAgICAgICAgIyBVc2UgdGhlIGxhYmVsCisgICAgICAgICAgICAgICAgcDRfc3lzdGVtKFsidGFnIiwgIi1sIiwgbmFtZV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICBbIiVzQCVzIiAlIChkZXBvdF9zaWRlLCBjaGFuZ2VsaXN0KSBmb3IgZGVwb3Rfc2lkZSBpbiBjbGllbnRTcGVjLm1hcHBpbmdzXSkKKworICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJjcmVhdGVkIHA0IGxhYmVsIGZvciB0YWcgJXMiICUgbmFtZSkKKworICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CisgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAgICAgc2VsZi5tYXN0ZXIgPSBjdXJyZW50R2l0QnJhbmNoKCkKKyAgICAgICAgZWxpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgICAgIHNlbGYubWFzdGVyID0gYXJnc1swXQorICAgICAgICAgICAgaWYgbm90IGJyYW5jaEV4aXN0cyhzZWxmLm1hc3Rlcik6CisgICAgICAgICAgICAgICAgZGllKCJCcmFuY2ggJXMgZG9lcyBub3QgZXhpc3QiICUgc2VsZi5tYXN0ZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBmb3IgaSBpbiBzZWxmLnVwZGF0ZV9zaGVsdmU6CisgICAgICAgICAgICBpZiBpIDw9IDA6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoImludmFsaWQgY2hhbmdlbGlzdCAlZCIgJSBpKQorCisgICAgICAgIGlmIHNlbGYubWFzdGVyOgorICAgICAgICAgICAgYWxsb3dTdWJtaXQgPSBnaXRDb25maWcoImdpdC1wNC5hbGxvd1N1Ym1pdCIpCisgICAgICAgICAgICBpZiBsZW4oYWxsb3dTdWJtaXQpID4gMCBhbmQgbm90IHNlbGYubWFzdGVyIGluIGFsbG93U3VibWl0LnNwbGl0KCIsIik6CisgICAgICAgICAgICAgICAgZGllKCIlcyBpcyBub3QgaW4gZ2l0LXA0LmFsbG93U3VibWl0IiAlIHNlbGYubWFzdGVyKQorCisgICAgICAgIFt1cHN0cmVhbSwgc2V0dGluZ3NdID0gZmluZFVwc3RyZWFtQnJhbmNoUG9pbnQoKQorICAgICAgICBzZWxmLmRlcG90UGF0aCA9IHNldHRpbmdzWydkZXBvdC1wYXRocyddWzBdCisgICAgICAgIGlmIGxlbihzZWxmLm9yaWdpbikgPT0gMDoKKyAgICAgICAgICAgIHNlbGYub3JpZ2luID0gdXBzdHJlYW0KKworICAgICAgICBpZiBsZW4oc2VsZi51cGRhdGVfc2hlbHZlKSA+IDA6CisgICAgICAgICAgICBzZWxmLnNoZWx2ZSA9IFRydWUKKworICAgICAgICBpZiBzZWxmLnByZXNlcnZlVXNlcjoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNhbkNoYW5nZUNoYW5nZWxpc3RzKCk6CisgICAgICAgICAgICAgICAgZGllKCJDYW5ub3QgcHJlc2VydmUgdXNlciBuYW1lcyB3aXRob3V0IHA0IHN1cGVyLXVzZXIgb3IgYWRtaW4gcGVybWlzc2lvbnMiKQorCisgICAgICAgICMgaWYgbm90IHNldCBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRyeSB0aGUgY29uZmlnIGZpbGUKKyAgICAgICAgaWYgc2VsZi5jb25mbGljdF9iZWhhdmlvciBpcyBOb25lOgorICAgICAgICAgICAgdmFsID0gZ2l0Q29uZmlnKCJnaXQtcDQuY29uZmxpY3QiKQorICAgICAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgICAgIGlmIHZhbCBub3QgaW4gc2VsZi5jb25mbGljdF9iZWhhdmlvcl9jaG9pY2VzOgorICAgICAgICAgICAgICAgICAgICBkaWUoIkludmFsaWQgdmFsdWUgJyVzJyBmb3IgY29uZmlnIGdpdC1wNC5jb25mbGljdCIgJSB2YWwpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbCA9ICJhc2siCisgICAgICAgICAgICBzZWxmLmNvbmZsaWN0X2JlaGF2aW9yID0gdmFsCisKKyAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIk9yaWdpbiBicmFuY2ggaXMgIiArIHNlbGYub3JpZ2luKQorCisgICAgICAgIGlmIGxlbihzZWxmLmRlcG90UGF0aCkgPT0gMDoKKyAgICAgICAgICAgIHByaW50KCJJbnRlcm5hbCBlcnJvcjogY2Fubm90IGxvY2F0ZSBwZXJmb3JjZSBkZXBvdCBwYXRoIGZyb20gZXhpc3RpbmcgYnJhbmNoZXMiKQorICAgICAgICAgICAgc3lzLmV4aXQoMTI4KQorCisgICAgICAgIHNlbGYudXNlQ2xpZW50U3BlYyA9IEZhbHNlCisgICAgICAgIGlmIGdpdENvbmZpZ0Jvb2woImdpdC1wNC51c2VjbGllbnRzcGVjIik6CisgICAgICAgICAgICBzZWxmLnVzZUNsaWVudFNwZWMgPSBUcnVlCisgICAgICAgIGlmIHNlbGYudXNlQ2xpZW50U3BlYzoKKyAgICAgICAgICAgIHNlbGYuY2xpZW50U3BlY0RpcnMgPSBnZXRDbGllbnRTcGVjKCkKKworICAgICAgICAjIENoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIFA0IGJyYW5jaGVzCisgICAgICAgIGJyYW5jaGVzRGV0ZWN0ZWQgPSAobGVuKHA0QnJhbmNoZXNJbkdpdCgpLmtleXMoKSkgPiAxKQorCisgICAgICAgIGlmIHNlbGYudXNlQ2xpZW50U3BlYyBhbmQgbm90IGJyYW5jaGVzRGV0ZWN0ZWQ6CisgICAgICAgICAgICAjIGFsbCBmaWxlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGNsaWVudCBzcGVjCisgICAgICAgICAgICBzZWxmLmNsaWVudFBhdGggPSBnZXRDbGllbnRSb290KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY2xpZW50UGF0aCA9IHA0V2hlcmUoc2VsZi5kZXBvdFBhdGgpCisKKyAgICAgICAgaWYgc2VsZi5jbGllbnRQYXRoID09ICIiOgorICAgICAgICAgICAgZGllKCJFcnJvcjogQ2Fubm90IGxvY2F0ZSBwZXJmb3JjZSBjaGVja291dCBvZiAlcyBpbiBjbGllbnQgdmlldyIgJSBzZWxmLmRlcG90UGF0aCkKKworICAgICAgICBwcmludCgiUGVyZm9yY2UgY2hlY2tvdXQgZm9yIGRlcG90IHBhdGggJXMgbG9jYXRlZCBhdCAlcyIgJSAoc2VsZi5kZXBvdFBhdGgsIHNlbGYuY2xpZW50UGF0aCkpCisgICAgICAgIHNlbGYub2xkV29ya2luZ0RpcmVjdG9yeSA9IG9zLmdldGN3ZCgpCisKKyAgICAgICAgIyBlbnN1cmUgdGhlIGNsaWVudFBhdGggZXhpc3RzCisgICAgICAgIG5ld19jbGllbnRfZGlyID0gRmFsc2UKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuY2xpZW50UGF0aCk6CisgICAgICAgICAgICBuZXdfY2xpZW50X2RpciA9IFRydWUKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYuY2xpZW50UGF0aCkKKworICAgICAgICBjaGRpcihzZWxmLmNsaWVudFBhdGgsIGlzX2NsaWVudF9wYXRoPVRydWUpCisgICAgICAgIGlmIHNlbGYuZHJ5X3J1bjoKKyAgICAgICAgICAgIHByaW50KCJXb3VsZCBzeW5jaHJvbml6ZSBwNCBjaGVja291dCBpbiAlcyIgJSBzZWxmLmNsaWVudFBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiU3luY2hyb25pemluZyBwNCBjaGVja291dC4uLiIpCisgICAgICAgICAgICBpZiBuZXdfY2xpZW50X2RpcjoKKyAgICAgICAgICAgICAgICAjIG9sZCBvbmUgd2FzIGRlc3Ryb3llZCwgYW5kIG1heWJlIG5vYm9keSB0b2xkIHA0CisgICAgICAgICAgICAgICAgcDRfc3luYygiLi4uIiwgIi1mIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcDRfc3luYygiLi4uIikKKyAgICAgICAgc2VsZi5jaGVjaygpCisKKyAgICAgICAgY29tbWl0cyA9IFtdCisgICAgICAgIGlmIHNlbGYubWFzdGVyOgorICAgICAgICAgICAgY29tbWl0dGlzaCA9IHNlbGYubWFzdGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb21taXR0aXNoID0gJ0hFQUQnCisKKyAgICAgICAgaWYgc2VsZi5jb21taXQgIT0gIiI6CisgICAgICAgICAgICBpZiBzZWxmLmNvbW1pdC5maW5kKCIuLiIpICE9IC0xOgorICAgICAgICAgICAgICAgIGxpbWl0c19pc2ggPSBzZWxmLmNvbW1pdC5zcGxpdCgiLi4iKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHJlYWRfcGlwZV9saW5lcyhbImdpdCIsICJyZXYtbGlzdCIsICItLW5vLW1lcmdlcyIsICIlcy4uJXMiICUgKGxpbWl0c19pc2hbMF0sIGxpbWl0c19pc2hbMV0pXSk6CisgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMuYXBwZW5kKGxpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgICAgICBjb21taXRzLnJldmVyc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb21taXRzLmFwcGVuZChzZWxmLmNvbW1pdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHJlYWRfcGlwZV9saW5lcyhbImdpdCIsICJyZXYtbGlzdCIsICItLW5vLW1lcmdlcyIsICIlcy4uJXMiICUgKHNlbGYub3JpZ2luLCBjb21taXR0aXNoKV0pOgorICAgICAgICAgICAgICAgIGNvbW1pdHMuYXBwZW5kKGxpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgIGNvbW1pdHMucmV2ZXJzZSgpCisKKyAgICAgICAgaWYgc2VsZi5wcmVzZXJ2ZVVzZXIgb3IgZ2l0Q29uZmlnQm9vbCgiZ2l0LXA0LnNraXBVc2VyTmFtZUNoZWNrIik6CisgICAgICAgICAgICBzZWxmLmNoZWNrQXV0aG9yc2hpcCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNoZWNrQXV0aG9yc2hpcCA9IFRydWUKKworICAgICAgICBpZiBzZWxmLnByZXNlcnZlVXNlcjoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tWYWxpZFA0VXNlcnMoY29tbWl0cykKKworICAgICAgICAjCisgICAgICAgICMgQnVpbGQgdXAgYSBzZXQgb2Ygb3B0aW9ucyB0byBiZSBwYXNzZWQgdG8gZGlmZiB3aGVuCisgICAgICAgICMgc3VibWl0dGluZyBlYWNoIGNvbW1pdCB0byBwNC4KKyAgICAgICAgIworICAgICAgICBpZiBzZWxmLmRldGVjdFJlbmFtZXM6CisgICAgICAgICAgICAjIGNvbW1hbmQtbGluZSAtTSBhcmcKKyAgICAgICAgICAgIHNlbGYuZGlmZk9wdHMgPSAiLU0iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIElmIG5vdCBleHBsaWNpdGx5IHNldCBjaGVjayB0aGUgY29uZmlnIHZhcmlhYmxlCisgICAgICAgICAgICBkZXRlY3RSZW5hbWVzID0gZ2l0Q29uZmlnKCJnaXQtcDQuZGV0ZWN0UmVuYW1lcyIpCisKKyAgICAgICAgICAgIGlmIGRldGVjdFJlbmFtZXMubG93ZXIoKSA9PSAiZmFsc2UiIG9yIGRldGVjdFJlbmFtZXMgPT0gIiI6CisgICAgICAgICAgICAgICAgc2VsZi5kaWZmT3B0cyA9ICIiCisgICAgICAgICAgICBlbGlmIGRldGVjdFJlbmFtZXMubG93ZXIoKSA9PSAidHJ1ZSI6CisgICAgICAgICAgICAgICAgc2VsZi5kaWZmT3B0cyA9ICItTSIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5kaWZmT3B0cyA9ICItTSVzIiAlIGRldGVjdFJlbmFtZXMKKworICAgICAgICAjIG5vIGNvbW1hbmQtbGluZSBhcmcgZm9yIC1DIG9yIC0tZmluZC1jb3BpZXMtaGFyZGVyLCBqdXN0CisgICAgICAgICMgY29uZmlnIHZhcmlhYmxlcworICAgICAgICBkZXRlY3RDb3BpZXMgPSBnaXRDb25maWcoImdpdC1wNC5kZXRlY3RDb3BpZXMiKQorICAgICAgICBpZiBkZXRlY3RDb3BpZXMubG93ZXIoKSA9PSAiZmFsc2UiIG9yIGRldGVjdENvcGllcyA9PSAiIjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBkZXRlY3RDb3BpZXMubG93ZXIoKSA9PSAidHJ1ZSI6CisgICAgICAgICAgICBzZWxmLmRpZmZPcHRzICs9ICIgLUMiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmRpZmZPcHRzICs9ICIgLUMlcyIgJSBkZXRlY3RDb3BpZXMKKworICAgICAgICBpZiBnaXRDb25maWdCb29sKCJnaXQtcDQuZGV0ZWN0Q29waWVzSGFyZGVyIik6CisgICAgICAgICAgICBzZWxmLmRpZmZPcHRzICs9ICIgLS1maW5kLWNvcGllcy1oYXJkZXIiCisKKyAgICAgICAgbnVtX3NoZWx2ZXMgPSBsZW4oc2VsZi51cGRhdGVfc2hlbHZlKQorICAgICAgICBpZiBudW1fc2hlbHZlcyA+IDAgYW5kIG51bV9zaGVsdmVzICE9IGxlbihjb21taXRzKToKKyAgICAgICAgICAgIHN5cy5leGl0KCJudW1iZXIgb2YgY29tbWl0cyAoJWQpIG11c3QgbWF0Y2ggbnVtYmVyIG9mIHNoZWx2ZWQgY2hhbmdlbGlzdCAoJWQpIiAlCisgICAgICAgICAgICAgICAgICAgICAobGVuKGNvbW1pdHMpLCBudW1fc2hlbHZlcykpCisKKyAgICAgICAgaWYgbm90IHNlbGYubm9fdmVyaWZ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG5vdCBydW5fZ2l0X2hvb2soInA0LXByZS1zdWJtaXQiKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlxuVGhlIHA0LXByZS1zdWJtaXQgaG9vayBmYWlsZWQsIGFib3J0aW5nIHRoZSBzdWJtaXQuXG5cbllvdSBjYW4gc2tpcCAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlzIHByZS1zdWJtaXNzaW9uIGNoZWNrIGJ5IGFkZGluZ1xudGhlIGNvbW1hbmQgbGluZSBvcHRpb24gJy0tbm8tdmVyaWZ5JywgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAiaG93ZXZlcixcbnRoaXMgd2lsbCBhbHNvIHNraXAgdGhlIHA0LWNoYW5nZWxpc3QgaG9vayBhcyB3ZWxsLiIpCisgICAgICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgcHJpbnQoIlxuVGhlIHA0LXByZS1zdWJtaXQgaG9vayBmYWlsZWQsIGFib3J0aW5nIHRoZSBzdWJtaXQuXG5cblRoZSBob29rIGZhaWxlZCAiXAorICAgICAgICAgICAgICAgICAgICAid2l0aCB0aGUgZXJyb3IgJ3swfSciLmZvcm1hdChlLm1lc3NhZ2UpICkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICMKKyAgICAgICAgIyBBcHBseSB0aGUgY29tbWl0cywgb25lIGF0IGEgdGltZS4gIE9uIGZhaWx1cmUsIGFzayBpZiBzaG91bGQKKyAgICAgICAgIyBjb250aW51ZSB0byB0cnkgdGhlIHJlc3Qgb2YgdGhlIHBhdGNoZXMsIG9yIHF1aXQuCisgICAgICAgICMKKyAgICAgICAgaWYgc2VsZi5kcnlfcnVuOgorICAgICAgICAgICAgcHJpbnQoIldvdWxkIGFwcGx5IikKKyAgICAgICAgYXBwbGllZCA9IFtdCisgICAgICAgIGxhc3QgPSBsZW4oY29tbWl0cykgLSAxCisgICAgICAgIGZvciBpLCBjb21taXQgaW4gZW51bWVyYXRlKGNvbW1pdHMpOgorICAgICAgICAgICAgaWYgc2VsZi5kcnlfcnVuOgorICAgICAgICAgICAgICAgIHByaW50KCIgIiwgcmVhZF9waXBlKFsiZ2l0IiwgInNob3ciLCAiLXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mb3JtYXQ9Zm9ybWF0OiVoICVzIiwgY29tbWl0XSkpCisgICAgICAgICAgICAgICAgb2sgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9rID0gc2VsZi5hcHBseUNvbW1pdChjb21taXQpCisgICAgICAgICAgICBpZiBvazoKKyAgICAgICAgICAgICAgICBhcHBsaWVkLmFwcGVuZChjb21taXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucHJlcGFyZV9wNF9vbmx5IGFuZCBpIDwgbGFzdDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlByb2Nlc3Npbmcgb25seSB0aGUgZmlyc3QgY29tbWl0IGR1ZSB0byBvcHRpb24iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtLXByZXBhcmUtcDQtb25seSIpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgaSA8IGxhc3Q6CisgICAgICAgICAgICAgICAgICAgICMgcHJvbXB0IGZvciB3aGF0IHRvIGRvLCBvciB1c2UgdGhlIG9wdGlvbi92YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbmZsaWN0X2JlaGF2aW9yID09ICJhc2siOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIldoYXQgZG8geW91IHdhbnQgdG8gZG8/IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcHJvbXB0KCJbc11raXAgdGhpcyBjb21taXQgYnV0IGFwcGx5IHRoZSByZXN0LCBvciBbcV11aXQ/ICIpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5jb25mbGljdF9iZWhhdmlvciA9PSAic2tpcCI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9ICJzIgorICAgICAgICAgICAgICAgICAgICBlbGlmIHNlbGYuY29uZmxpY3RfYmVoYXZpb3IgPT0gInF1aXQiOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSAicSIKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgiVW5rbm93biBjb25mbGljdF9iZWhhdmlvciAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25mbGljdF9iZWhhdmlvcikKKworICAgICAgICAgICAgICAgICAgICBpZiByZXNwb25zZSA9PSAicyI6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiU2tpcHBpbmcgdGhpcyBjb21taXQsIGJ1dCBhcHBseWluZyB0aGUgcmVzdCIpCisgICAgICAgICAgICAgICAgICAgIGlmIHJlc3BvbnNlID09ICJxIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJRdWl0dGluZyIpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGNoZGlyKHNlbGYub2xkV29ya2luZ0RpcmVjdG9yeSkKKyAgICAgICAgc2hlbHZlZF9hcHBsaWVkID0gInNoZWx2ZWQiIGlmIHNlbGYuc2hlbHZlIGVsc2UgImFwcGxpZWQiCisgICAgICAgIGlmIHNlbGYuZHJ5X3J1bjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBzZWxmLnByZXBhcmVfcDRfb25seToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBsZW4oY29tbWl0cykgPT0gbGVuKGFwcGxpZWQpOgorICAgICAgICAgICAgcHJpbnQoIkFsbCBjb21taXRzIHswfSEiLmZvcm1hdChzaGVsdmVkX2FwcGxpZWQpKQorCisgICAgICAgICAgICBzeW5jID0gUDRTeW5jKCkKKyAgICAgICAgICAgIGlmIHNlbGYuYnJhbmNoOgorICAgICAgICAgICAgICAgIHN5bmMuYnJhbmNoID0gc2VsZi5icmFuY2gKKyAgICAgICAgICAgIGlmIHNlbGYuZGlzYWJsZV9wNHN5bmM6CisgICAgICAgICAgICAgICAgc3luYy5zeW5jX29yaWdpbl9vbmx5KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3luYy5ydW4oW10pCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kaXNhYmxlX3JlYmFzZToKKyAgICAgICAgICAgICAgICAgICAgcmViYXNlID0gUDRSZWJhc2UoKQorICAgICAgICAgICAgICAgICAgICByZWJhc2UucmViYXNlKCkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbGVuKGFwcGxpZWQpID09IDA6CisgICAgICAgICAgICAgICAgcHJpbnQoIk5vIGNvbW1pdHMgezB9LiIuZm9ybWF0KHNoZWx2ZWRfYXBwbGllZCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50KCJ7MH0gb25seSB0aGUgY29tbWl0cyBtYXJrZWQgd2l0aCAnKic6Ii5mb3JtYXQoc2hlbHZlZF9hcHBsaWVkLmNhcGl0YWxpemUoKSkpCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gY29tbWl0czoKKyAgICAgICAgICAgICAgICAgICAgaWYgYyBpbiBhcHBsaWVkOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhciA9ICIqIgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhciA9ICIgIgorICAgICAgICAgICAgICAgICAgICBwcmludChzdGFyLCByZWFkX3BpcGUoWyJnaXQiLCAic2hvdyIsICItcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tZm9ybWF0PWZvcm1hdDolaCAlcyIsICBjXSkpCisgICAgICAgICAgICAgICAgcHJpbnQoIllvdSB3aWxsIGhhdmUgdG8gZG8gJ2dpdCBwNCBzeW5jJyBhbmQgcmViYXNlLiIpCisKKyAgICAgICAgaWYgZ2l0Q29uZmlnQm9vbCgiZ2l0LXA0LmV4cG9ydExhYmVscyIpOgorICAgICAgICAgICAgc2VsZi5leHBvcnRMYWJlbHMgPSBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5leHBvcnRMYWJlbHM6CisgICAgICAgICAgICBwNExhYmVscyA9IGdldFA0TGFiZWxzKHNlbGYuZGVwb3RQYXRoKQorICAgICAgICAgICAgZ2l0VGFncyA9IGdldEdpdFRhZ3MoKQorCisgICAgICAgICAgICBtaXNzaW5nR2l0VGFncyA9IGdpdFRhZ3MgLSBwNExhYmVscworICAgICAgICAgICAgc2VsZi5leHBvcnRHaXRUYWdzKG1pc3NpbmdHaXRUYWdzKQorCisgICAgICAgICMgZXhpdCB3aXRoIGVycm9yIHVubGVzcyBldmVyeXRoaW5nIGFwcGxpZWQgcGVyZmVjdGx5CisgICAgICAgIGlmIGxlbihjb21taXRzKSAhPSBsZW4oYXBwbGllZCk6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBWaWV3KG9iamVjdCk6CisgICAgIiIiUmVwcmVzZW50IGEgcDQgdmlldyAoInA0IGhlbHAgdmlld3MiKSwgYW5kIG1hcCBmaWxlcyBpbiBhCisgICAgICAgcmVwbyBhY2NvcmRpbmcgdG8gdGhlIHZpZXcuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpZW50X25hbWUpOgorICAgICAgICBzZWxmLm1hcHBpbmdzID0gW10KKyAgICAgICAgc2VsZi5jbGllbnRfcHJlZml4ID0gIi8vJXMvIiAlIGNsaWVudF9uYW1lCisgICAgICAgICMgY2FjaGUgcmVzdWx0cyBvZiAicDQgd2hlcmUiIHRvIGxvb2t1cCBjbGllbnQgZmlsZSBsb2NhdGlvbnMKKyAgICAgICAgc2VsZi5jbGllbnRfc3BlY19wYXRoX2NhY2hlID0ge30KKworICAgIGRlZiBhcHBlbmQoc2VsZiwgdmlld19saW5lKToKKyAgICAgICAgIiIiUGFyc2UgYSB2aWV3IGxpbmUsIHNwbGl0dGluZyBpdCBpbnRvIGRlcG90IGFuZCBjbGllbnQKKyAgICAgICAgICAgc2lkZXMuICBBcHBlbmQgdG8gc2VsZi5tYXBwaW5ncywgcHJlc2VydmluZyBvcmRlci4gIFRoaXMKKyAgICAgICAgICAgaXMgb25seSBuZWVkZWQgZm9yIHRhZyBjcmVhdGlvbi4iIiIKKworICAgICAgICAjIFNwbGl0IHRoZSB2aWV3IGxpbmUgaW50byBleGFjdGx5IHR3byB3b3Jkcy4gIFA0IGVuZm9yY2VzCisgICAgICAgICMgc3RydWN0dXJlIG9uIHRoZXNlIGxpbmVzIHRoYXQgc2ltcGxpZmllcyB0aGlzIHF1aXRlIGEgYml0LgorICAgICAgICAjCisgICAgICAgICMgRWl0aGVyIG9yIGJvdGggd29yZHMgbWF5IGJlIGRvdWJsZS1xdW90ZWQuCisgICAgICAgICMgU2luZ2xlIHF1b3RlcyBkbyBub3QgbWF0dGVyLgorICAgICAgICAjIERvdWJsZS1xdW90ZSBtYXJrcyBjYW5ub3Qgb2NjdXIgaW5zaWRlIHRoZSB3b3Jkcy4KKyAgICAgICAgIyBBICsgb3IgLSBwcmVmaXggaXMgYWxzbyBpbnNpZGUgdGhlIHF1b3Rlcy4KKyAgICAgICAgIyBUaGVyZSBhcmUgbm8gcXVvdGVzIHVubGVzcyB0aGV5IGNvbnRhaW4gYSBzcGFjZS4KKyAgICAgICAgIyBUaGUgbGluZSBpcyBhbHJlYWR5IHdoaXRlLXNwYWNlIHN0cmlwcGVkLgorICAgICAgICAjIFRoZSB0d28gd29yZHMgYXJlIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzcGFjZS4KKyAgICAgICAgIworICAgICAgICBpZiB2aWV3X2xpbmVbMF0gPT0gJyInOgorICAgICAgICAgICAgIyBGaXJzdCB3b3JkIGlzIGRvdWJsZSBxdW90ZWQuICBGaW5kIGl0cyBlbmQuCisgICAgICAgICAgICBjbG9zZV9xdW90ZV9pbmRleCA9IHZpZXdfbGluZS5maW5kKCciJywgMSkKKyAgICAgICAgICAgIGlmIGNsb3NlX3F1b3RlX2luZGV4IDw9IDA6CisgICAgICAgICAgICAgICAgZGllKCJObyBmaXJzdC13b3JkIGNsb3NpbmcgcXVvdGUgZm91bmQ6ICVzIiAlIHZpZXdfbGluZSkKKyAgICAgICAgICAgIGRlcG90X3NpZGUgPSB2aWV3X2xpbmVbMTpjbG9zZV9xdW90ZV9pbmRleF0KKyAgICAgICAgICAgICMgc2tpcCBjbG9zaW5nIHF1b3RlIGFuZCBzcGFjZQorICAgICAgICAgICAgcmhzX2luZGV4ID0gY2xvc2VfcXVvdGVfaW5kZXggKyAxICsgMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BhY2VfaW5kZXggPSB2aWV3X2xpbmUuZmluZCgiICIpCisgICAgICAgICAgICBpZiBzcGFjZV9pbmRleCA8PSAwOgorICAgICAgICAgICAgICAgIGRpZSgiTm8gd29yZC1zcGxpdHRpbmcgc3BhY2UgZm91bmQ6ICVzIiAlIHZpZXdfbGluZSkKKyAgICAgICAgICAgIGRlcG90X3NpZGUgPSB2aWV3X2xpbmVbMDpzcGFjZV9pbmRleF0KKyAgICAgICAgICAgIHJoc19pbmRleCA9IHNwYWNlX2luZGV4ICsgMQorCisgICAgICAgICMgcHJlZml4ICsgbWVhbnMgb3ZlcmxheSBvbiBwcmV2aW91cyBtYXBwaW5nCisgICAgICAgIGlmIGRlcG90X3NpZGUuc3RhcnRzd2l0aCgiKyIpOgorICAgICAgICAgICAgZGVwb3Rfc2lkZSA9IGRlcG90X3NpZGVbMTpdCisKKyAgICAgICAgIyBwcmVmaXggLSBtZWFucyBleGNsdWRlIHRoaXMgcGF0aCwgbGVhdmUgb3V0IG9mIG1hcHBpbmdzCisgICAgICAgIGV4Y2x1ZGUgPSBGYWxzZQorICAgICAgICBpZiBkZXBvdF9zaWRlLnN0YXJ0c3dpdGgoIi0iKToKKyAgICAgICAgICAgIGV4Y2x1ZGUgPSBUcnVlCisgICAgICAgICAgICBkZXBvdF9zaWRlID0gZGVwb3Rfc2lkZVsxOl0KKworICAgICAgICBpZiBub3QgZXhjbHVkZToKKyAgICAgICAgICAgIHNlbGYubWFwcGluZ3MuYXBwZW5kKGRlcG90X3NpZGUpCisKKyAgICBkZWYgY29udmVydF9jbGllbnRfcGF0aChzZWxmLCBjbGllbnRGaWxlKToKKyAgICAgICAgIyBjaG9wIG9mZiAvL2NsaWVudC8gcGFydCB0byBtYWtlIGl0IHJlbGF0aXZlCisgICAgICAgIGlmIG5vdCBkZWNvZGVfcGF0aChjbGllbnRGaWxlKS5zdGFydHN3aXRoKHNlbGYuY2xpZW50X3ByZWZpeCk6CisgICAgICAgICAgICBkaWUoIk5vIHByZWZpeCAnJXMnIG9uIGNsaWVudEZpbGUgJyVzJyIgJQorICAgICAgICAgICAgICAgIChzZWxmLmNsaWVudF9wcmVmaXgsIGNsaWVudEZpbGUpKQorICAgICAgICByZXR1cm4gY2xpZW50RmlsZVtsZW4oc2VsZi5jbGllbnRfcHJlZml4KTpdCisKKyAgICBkZWYgdXBkYXRlX2NsaWVudF9zcGVjX3BhdGhfY2FjaGUoc2VsZiwgZmlsZXMpOgorICAgICAgICAiIiIgQ2FjaGluZyBmaWxlIHBhdGhzIGJ5ICJwNCB3aGVyZSIgYmF0Y2ggcXVlcnkgIiIiCisKKyAgICAgICAgIyBMaXN0IGRlcG90IGZpbGUgcGF0aHMgZXhjbHVkZSB0aGF0IGFscmVhZHkgY2FjaGVkCisgICAgICAgIGZpbGVBcmdzID0gW2ZbJ3BhdGgnXSBmb3IgZiBpbiBmaWxlcyBpZiBkZWNvZGVfcGF0aChmWydwYXRoJ10pIG5vdCBpbiBzZWxmLmNsaWVudF9zcGVjX3BhdGhfY2FjaGVdCisKKyAgICAgICAgaWYgbGVuKGZpbGVBcmdzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICAjIEFsbCBmaWxlcyBpbiBjYWNoZQorCisgICAgICAgIHdoZXJlX3Jlc3VsdCA9IHA0Q21kTGlzdChbIi14IiwgIi0iLCAid2hlcmUiXSwgc3RkaW49ZmlsZUFyZ3MpCisgICAgICAgIGZvciByZXMgaW4gd2hlcmVfcmVzdWx0OgorICAgICAgICAgICAgaWYgImNvZGUiIGluIHJlcyBhbmQgcmVzWyJjb2RlIl0gPT0gImVycm9yIjoKKyAgICAgICAgICAgICAgICAjIGFzc3VtZSBlcnJvciBpcyAiLi4uIGZpbGUocykgbm90IGluIGNsaWVudCB2aWV3IgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiAiY2xpZW50RmlsZSIgbm90IGluIHJlczoKKyAgICAgICAgICAgICAgICBkaWUoIk5vIGNsaWVudEZpbGUgaW4gJ3A0IHdoZXJlJyBvdXRwdXQiKQorICAgICAgICAgICAgaWYgInVubWFwIiBpbiByZXM6CisgICAgICAgICAgICAgICAgIyBpdCB3aWxsIGxpc3QgYWxsIG9mIHRoZW0sIGJ1dCBvbmx5IG9uZSBub3QgdW5tYXAtcGVkCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGRlcG90X3BhdGggPSBkZWNvZGVfcGF0aChyZXNbJ2RlcG90RmlsZSddKQorICAgICAgICAgICAgaWYgZ2l0Q29uZmlnQm9vbCgiY29yZS5pZ25vcmVjYXNlIik6CisgICAgICAgICAgICAgICAgZGVwb3RfcGF0aCA9IGRlcG90X3BhdGgubG93ZXIoKQorICAgICAgICAgICAgc2VsZi5jbGllbnRfc3BlY19wYXRoX2NhY2hlW2RlcG90X3BhdGhdID0gc2VsZi5jb252ZXJ0X2NsaWVudF9wYXRoKHJlc1siY2xpZW50RmlsZSJdKQorCisgICAgICAgICMgbm90IGZvdW5kIGZpbGVzIG9yIHVubWFwIGZpbGVzIHNldCB0byAiIgorICAgICAgICBmb3IgZGVwb3RGaWxlIGluIGZpbGVBcmdzOgorICAgICAgICAgICAgZGVwb3RGaWxlID0gZGVjb2RlX3BhdGgoZGVwb3RGaWxlKQorICAgICAgICAgICAgaWYgZ2l0Q29uZmlnQm9vbCgiY29yZS5pZ25vcmVjYXNlIik6CisgICAgICAgICAgICAgICAgZGVwb3RGaWxlID0gZGVwb3RGaWxlLmxvd2VyKCkKKyAgICAgICAgICAgIGlmIGRlcG90RmlsZSBub3QgaW4gc2VsZi5jbGllbnRfc3BlY19wYXRoX2NhY2hlOgorICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X3NwZWNfcGF0aF9jYWNoZVtkZXBvdEZpbGVdID0gYicnCisKKyAgICBkZWYgbWFwX2luX2NsaWVudChzZWxmLCBkZXBvdF9wYXRoKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZWxhdGl2ZSBsb2NhdGlvbiBpbiB0aGUgY2xpZW50IHdoZXJlIHRoaXMKKyAgICAgICAgICAgZGVwb3QgZmlsZSBzaG91bGQgbGl2ZS4gIFJldHVybnMgIiIgaWYgdGhlIGZpbGUgc2hvdWxkCisgICAgICAgICAgIG5vdCBiZSBtYXBwZWQgaW4gdGhlIGNsaWVudC4iIiIKKworICAgICAgICBpZiBnaXRDb25maWdCb29sKCJjb3JlLmlnbm9yZWNhc2UiKToKKyAgICAgICAgICAgIGRlcG90X3BhdGggPSBkZXBvdF9wYXRoLmxvd2VyKCkKKworICAgICAgICBpZiBkZXBvdF9wYXRoIGluIHNlbGYuY2xpZW50X3NwZWNfcGF0aF9jYWNoZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNsaWVudF9zcGVjX3BhdGhfY2FjaGVbZGVwb3RfcGF0aF0KKworICAgICAgICBkaWUoICJFcnJvcjogJXMgaXMgbm90IGZvdW5kIGluIGNsaWVudCBzcGVjIHBhdGgiICUgZGVwb3RfcGF0aCApCisgICAgICAgIHJldHVybiAiIgorCitkZWYgY2xvbmVFeGNsdWRlQ2FsbGJhY2sob3B0aW9uLCBvcHRfc3RyLCB2YWx1ZSwgcGFyc2VyKToKKyAgICAjIHByZXBlbmQgIi8iIGJlY2F1c2UgdGhlIGZpcnN0ICIvIiB3YXMgY29uc3VtZWQgYXMgcGFydCBvZiB0aGUgb3B0aW9uIGl0c2VsZi4KKyAgICAjICgiLS8vZGVwb3QvQS8uLi4iIGJlY29tZXMgIi9kZXBvdC9BLy4uLiIgYWZ0ZXIgb3B0aW9uIHBhcnNpbmcpCisgICAgcGFyc2VyLnZhbHVlcy5jbG9uZUV4Y2x1ZGUgKz0gWyIvIiArIHJlLnN1YihyIlwuXC5cLiQiLCAiIiwgdmFsdWUpXQorCitjbGFzcyBQNFN5bmMoQ29tbWFuZCwgUDRVc2VyTWFwKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBQNFVzZXJNYXAuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5vcHRpb25zID0gWworICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWJyYW5jaCIsIGRlc3Q9ImJyYW5jaCIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWRldGVjdC1icmFuY2hlcyIsIGRlc3Q9ImRldGVjdEJyYW5jaGVzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tY2hhbmdlc2ZpbGUiLCBkZXN0PSJjaGFuZ2VzRmlsZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXNpbGVudCIsIGRlc3Q9InNpbGVudCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWRldGVjdC1sYWJlbHMiLCBkZXN0PSJkZXRlY3RMYWJlbHMiLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1pbXBvcnQtbGFiZWxzIiwgZGVzdD0iaW1wb3J0TGFiZWxzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0taW1wb3J0LWxvY2FsIiwgZGVzdD0iaW1wb3J0SW50b1JlbW90ZXMiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJJbXBvcnQgaW50byByZWZzL2hlYWRzLyAsIG5vdCByZWZzL3JlbW90ZXMiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1tYXgtY2hhbmdlcyIsIGRlc3Q9Im1heENoYW5nZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik1heGltdW0gbnVtYmVyIG9mIGNoYW5nZXMgdG8gaW1wb3J0IiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tY2hhbmdlcy1ibG9jay1zaXplIiwgZGVzdD0iY2hhbmdlc19ibG9ja19zaXplIiwgdHlwZT0iaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJJbnRlcm5hbCBibG9jayBzaXplIHRvIHVzZSB3aGVuIGl0ZXJhdGl2ZWx5IGNhbGxpbmcgcDQgY2hhbmdlcyIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWtlZXAtcGF0aCIsIGRlc3Q9ImtlZXBSZXBvUGF0aCIsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iS2VlcCBlbnRpcmUgQlJBTkNIL0RJUi9TVUJESVIgcHJlZml4IGR1cmluZyBpbXBvcnQiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS11c2UtY2xpZW50LXNwZWMiLCBkZXN0PSJ1c2VDbGllbnRTcGVjIiwgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJPbmx5IHN5bmMgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIFBlcmZvcmNlIENsaWVudCBTcGVjIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0vIiwgZGVzdD0iY2xvbmVFeGNsdWRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249ImNhbGxiYWNrIiwgY2FsbGJhY2s9Y2xvbmVFeGNsdWRlQ2FsbGJhY2ssIHR5cGU9InN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iZXhjbHVkZSBkZXBvdCBwYXRoIiksCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICIiIkltcG9ydHMgZnJvbSBQZXJmb3JjZSBpbnRvIGEgZ2l0IHJlcG9zaXRvcnkuXG4KKyAgICBleGFtcGxlOgorICAgIC8vZGVwb3QvbXkvcHJvamVjdC8gLS0gdG8gaW1wb3J0IHRoZSBjdXJyZW50IGhlYWQKKyAgICAvL2RlcG90L215L3Byb2plY3QvQGFsbCAtLSB0byBpbXBvcnQgZXZlcnl0aGluZworICAgIC8vZGVwb3QvbXkvcHJvamVjdC9AMSw2IC0tIHRvIGltcG9ydCBvbmx5IGZyb20gcmV2aXNpb24gMSB0byA2CisKKyAgICAoYSAuLi4gaXMgbm90IG5lZWRlZCBpbiB0aGUgcGF0aCBwNCBzcGVjaWZpY2F0aW9uLCBpdCdzIGFkZGVkIGltcGxpY2l0bHkpIiIiCisKKyAgICAgICAgc2VsZi51c2FnZSArPSAiIC8vZGVwb3QvcGF0aFtAcmV2UmFuZ2VdIgorICAgICAgICBzZWxmLnNpbGVudCA9IEZhbHNlCisgICAgICAgIHNlbGYuY3JlYXRlZEJyYW5jaGVzID0gc2V0KCkKKyAgICAgICAgc2VsZi5jb21taXR0ZWRDaGFuZ2VzID0gc2V0KCkKKyAgICAgICAgc2VsZi5icmFuY2ggPSAiIgorICAgICAgICBzZWxmLmRldGVjdEJyYW5jaGVzID0gRmFsc2UKKyAgICAgICAgc2VsZi5kZXRlY3RMYWJlbHMgPSBGYWxzZQorICAgICAgICBzZWxmLmltcG9ydExhYmVscyA9IEZhbHNlCisgICAgICAgIHNlbGYuY2hhbmdlc0ZpbGUgPSAiIgorICAgICAgICBzZWxmLnN5bmNXaXRoT3JpZ2luID0gVHJ1ZQorICAgICAgICBzZWxmLmltcG9ydEludG9SZW1vdGVzID0gVHJ1ZQorICAgICAgICBzZWxmLm1heENoYW5nZXMgPSAiIgorICAgICAgICBzZWxmLmNoYW5nZXNfYmxvY2tfc2l6ZSA9IE5vbmUKKyAgICAgICAgc2VsZi5rZWVwUmVwb1BhdGggPSBGYWxzZQorICAgICAgICBzZWxmLmRlcG90UGF0aHMgPSBOb25lCisgICAgICAgIHNlbGYucDRCcmFuY2hlc0luR2l0ID0gW10KKyAgICAgICAgc2VsZi5jbG9uZUV4Y2x1ZGUgPSBbXQorICAgICAgICBzZWxmLnVzZUNsaWVudFNwZWMgPSBGYWxzZQorICAgICAgICBzZWxmLnVzZUNsaWVudFNwZWNfZnJvbV9vcHRpb25zID0gRmFsc2UKKyAgICAgICAgc2VsZi5jbGllbnRTcGVjRGlycyA9IE5vbmUKKyAgICAgICAgc2VsZi50ZW1wQnJhbmNoZXMgPSBbXQorICAgICAgICBzZWxmLnRlbXBCcmFuY2hMb2NhdGlvbiA9ICJyZWZzL2dpdC1wNC10bXAiCisgICAgICAgIHNlbGYubGFyZ2VGaWxlU3lzdGVtID0gTm9uZQorICAgICAgICBzZWxmLnN1cHByZXNzX21ldGFfY29tbWVudCA9IEZhbHNlCisKKyAgICAgICAgaWYgZ2l0Q29uZmlnKCdnaXQtcDQubGFyZ2VGaWxlU3lzdGVtJyk6CisgICAgICAgICAgICBsYXJnZUZpbGVTeXN0ZW1Db25zdHJ1Y3RvciA9IGdsb2JhbHMoKVtnaXRDb25maWcoJ2dpdC1wNC5sYXJnZUZpbGVTeXN0ZW0nKV0KKyAgICAgICAgICAgIHNlbGYubGFyZ2VGaWxlU3lzdGVtID0gbGFyZ2VGaWxlU3lzdGVtQ29uc3RydWN0b3IoCisgICAgICAgICAgICAgICAgbGFtYmRhIGdpdF9tb2RlLCByZWxQYXRoLCBjb250ZW50czogc2VsZi53cml0ZVRvR2l0U3RyZWFtKGdpdF9tb2RlLCByZWxQYXRoLCBjb250ZW50cykKKyAgICAgICAgICAgICkKKworICAgICAgICBpZiBnaXRDb25maWcoImdpdC1wNC5zeW5jRnJvbU9yaWdpbiIpID09ICJmYWxzZSI6CisgICAgICAgICAgICBzZWxmLnN5bmNXaXRoT3JpZ2luID0gRmFsc2UKKworICAgICAgICBzZWxmLmRlcG90UGF0aHMgPSBbXQorICAgICAgICBzZWxmLmNoYW5nZVJhbmdlID0gIiIKKyAgICAgICAgc2VsZi5wcmV2aW91c0RlcG90UGF0aHMgPSBbXQorICAgICAgICBzZWxmLmhhc09yaWdpbiA9IEZhbHNlCisKKyAgICAgICAgIyBtYXAgZnJvbSBicmFuY2ggZGVwb3QgcGF0aCB0byBwYXJlbnQgYnJhbmNoCisgICAgICAgIHNlbGYua25vd25CcmFuY2hlcyA9IHt9CisgICAgICAgIHNlbGYuaW5pdGlhbFBhcmVudHMgPSB7fQorCisgICAgICAgIHNlbGYudHogPSAiJSswM2QlMDJkIiAlICgtIHRpbWUudGltZXpvbmUgLyAzNjAwLCAoKC0gdGltZS50aW1lem9uZSAlIDM2MDApIC8gNjApKQorICAgICAgICBzZWxmLmxhYmVscyA9IHt9CisKKyAgICAjIEZvcmNlIGEgY2hlY2twb2ludCBpbiBmYXN0LWltcG9ydCBhbmQgd2FpdCBmb3IgaXQgdG8gZmluaXNoCisgICAgZGVmIGNoZWNrcG9pbnQoc2VsZik6CisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJjaGVja3BvaW50XG5cbiIpCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJwcm9ncmVzcyBjaGVja3BvaW50XG5cbiIpCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLmZsdXNoKCkKKyAgICAgICAgb3V0ID0gc2VsZi5naXRPdXRwdXQucmVhZGxpbmUoKQorICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiY2hlY2twb2ludCBmaW5pc2hlZDogIiArIG91dCkKKworICAgIGRlZiBpc1BhdGhXYW50ZWQoc2VsZiwgcGF0aCk6CisgICAgICAgIGZvciBwIGluIHNlbGYuY2xvbmVFeGNsdWRlOgorICAgICAgICAgICAgaWYgcC5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgIGlmIHA0UGF0aFN0YXJ0c1dpdGgocGF0aCwgcCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgIyAiLS8vZGVwb3QvZmlsZTEiIHdpdGhvdXQgYSB0cmFpbGluZyAiLyIgc2hvdWxkIG9ubHkgZXhjbHVkZSAiZmlsZTEiLCBidXQgbm90ICJmaWxlMTExIiBvciAiZmlsZTFfZGlyL2ZpbGUyIgorICAgICAgICAgICAgZWxpZiBwYXRoLmxvd2VyKCkgPT0gcC5sb3dlcigpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgcCBpbiBzZWxmLmRlcG90UGF0aHM6CisgICAgICAgICAgICBpZiBwNFBhdGhTdGFydHNXaXRoKHBhdGgsIGRlY29kZV9wYXRoKHApKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBleHRyYWN0RmlsZXNGcm9tQ29tbWl0KHNlbGYsIGNvbW1pdCwgc2hlbHZlZD1GYWxzZSwgc2hlbHZlZF9jbCA9IDApOgorICAgICAgICBmaWxlcyA9IFtdCisgICAgICAgIGZudW0gPSAwCisgICAgICAgIHdoaWxlICJkZXBvdEZpbGUlcyIgJSBmbnVtIGluIGNvbW1pdDoKKyAgICAgICAgICAgIHBhdGggPSAgY29tbWl0WyJkZXBvdEZpbGUlcyIgJSBmbnVtXQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLmlzUGF0aFdhbnRlZChkZWNvZGVfcGF0aChwYXRoKSkKKyAgICAgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgICAgICBmbnVtID0gZm51bSArIDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmaWxlID0ge30KKyAgICAgICAgICAgIGZpbGVbInBhdGgiXSA9IHBhdGgKKyAgICAgICAgICAgIGZpbGVbInJldiJdID0gY29tbWl0WyJyZXYlcyIgJSBmbnVtXQorICAgICAgICAgICAgZmlsZVsiYWN0aW9uIl0gPSBjb21taXRbImFjdGlvbiVzIiAlIGZudW1dCisgICAgICAgICAgICBmaWxlWyJ0eXBlIl0gPSBjb21taXRbInR5cGUlcyIgJSBmbnVtXQorICAgICAgICAgICAgaWYgc2hlbHZlZDoKKyAgICAgICAgICAgICAgICBmaWxlWyJzaGVsdmVkX2NsIl0gPSBpbnQoc2hlbHZlZF9jbCkKKyAgICAgICAgICAgIGZpbGVzLmFwcGVuZChmaWxlKQorICAgICAgICAgICAgZm51bSA9IGZudW0gKyAxCisgICAgICAgIHJldHVybiBmaWxlcworCisgICAgZGVmIGV4dHJhY3RKb2JzRnJvbUNvbW1pdChzZWxmLCBjb21taXQpOgorICAgICAgICBqb2JzID0gW10KKyAgICAgICAgam51bSA9IDAKKyAgICAgICAgd2hpbGUgImpvYiVzIiAlIGpudW0gaW4gY29tbWl0OgorICAgICAgICAgICAgam9iID0gY29tbWl0WyJqb2IlcyIgJSBqbnVtXQorICAgICAgICAgICAgam9icy5hcHBlbmQoam9iKQorICAgICAgICAgICAgam51bSA9IGpudW0gKyAxCisgICAgICAgIHJldHVybiBqb2JzCisKKyAgICBkZWYgc3RyaXBSZXBvUGF0aChzZWxmLCBwYXRoLCBwcmVmaXhlcyk6CisgICAgICAgICIiIldoZW4gc3RyZWFtaW5nIGZpbGVzLCB0aGlzIGlzIGNhbGxlZCB0byBtYXAgYSBwNCBkZXBvdCBwYXRoCisgICAgICAgICAgIHRvIHdoZXJlIGl0IHNob3VsZCBnbyBpbiBnaXQuICBUaGUgcHJlZml4ZXMgYXJlIGVpdGhlcgorICAgICAgICAgICBzZWxmLmRlcG90UGF0aHMsIG9yIHNlbGYuYnJhbmNoUHJlZml4ZXMgaW4gdGhlIGNhc2Ugb2YKKyAgICAgICAgICAgYnJhbmNoIGRldGVjdGlvbi4iIiIKKworICAgICAgICBpZiBzZWxmLnVzZUNsaWVudFNwZWM6CisgICAgICAgICAgICAjIGJyYW5jaCBkZXRlY3Rpb24gbW92ZXMgZmlsZXMgdXAgYSBsZXZlbCAodGhlIGJyYW5jaCBuYW1lKQorICAgICAgICAgICAgIyBmcm9tIHdoYXQgY2xpZW50IHNwZWMgaW50ZXJwcmV0YXRpb24gZ2l2ZXMKKyAgICAgICAgICAgIHBhdGggPSBkZWNvZGVfcGF0aChzZWxmLmNsaWVudFNwZWNEaXJzLm1hcF9pbl9jbGllbnQocGF0aCkpCisgICAgICAgICAgICBpZiBzZWxmLmRldGVjdEJyYW5jaGVzOgorICAgICAgICAgICAgICAgIGZvciBiIGluIHNlbGYua25vd25CcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcDRQYXRoU3RhcnRzV2l0aChwYXRoLCBiICsgIi8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoW2xlbihiKSsxOl0KKworICAgICAgICBlbGlmIHNlbGYua2VlcFJlcG9QYXRoOgorICAgICAgICAgICAgIyBQcmVzZXJ2ZSBldmVyeXRoaW5nIGluIHJlbGF0aXZlIHBhdGggbmFtZSBleGNlcHQgbGVhZGluZworICAgICAgICAgICAgIyAvL2RlcG90LzsganVzdCBsb29rIGF0IGZpcnN0IHByZWZpeCBhcyB0aGV5IGFsbCBzaG91bGQKKyAgICAgICAgICAgICMgYmUgaW4gdGhlIHNhbWUgZGVwb3QuCisgICAgICAgICAgICBkZXBvdCA9IHJlLnN1YigiXigvL1teL10rLykuKiIsIHInXDEnLCBwcmVmaXhlc1swXSkKKyAgICAgICAgICAgIGlmIHA0UGF0aFN0YXJ0c1dpdGgocGF0aCwgZGVwb3QpOgorICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoW2xlbihkZXBvdCk6XQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgcCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgICAgICBpZiBwNFBhdGhTdGFydHNXaXRoKHBhdGgsIHApOgorICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aFtsZW4ocCk6XQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHBhdGggPSB3aWxkY2FyZF9kZWNvZGUocGF0aCkKKyAgICAgICAgcmV0dXJuIHBhdGgKKworICAgIGRlZiBzcGxpdEZpbGVzSW50b0JyYW5jaGVzKHNlbGYsIGNvbW1pdCk6CisgICAgICAgICIiIkxvb2sgYXQgZWFjaCBkZXBvdEZpbGUgaW4gdGhlIGNvbW1pdCB0byBmaWd1cmUgb3V0IHRvIHdoYXQKKyAgICAgICAgICAgYnJhbmNoIGl0IGJlbG9uZ3MuIiIiCisKKyAgICAgICAgaWYgc2VsZi5jbGllbnRTcGVjRGlyczoKKyAgICAgICAgICAgIGZpbGVzID0gc2VsZi5leHRyYWN0RmlsZXNGcm9tQ29tbWl0KGNvbW1pdCkKKyAgICAgICAgICAgIHNlbGYuY2xpZW50U3BlY0RpcnMudXBkYXRlX2NsaWVudF9zcGVjX3BhdGhfY2FjaGUoZmlsZXMpCisKKyAgICAgICAgYnJhbmNoZXMgPSB7fQorICAgICAgICBmbnVtID0gMAorICAgICAgICB3aGlsZSAiZGVwb3RGaWxlJXMiICUgZm51bSBpbiBjb21taXQ6CisgICAgICAgICAgICByYXdfcGF0aCA9IGNvbW1pdFsiZGVwb3RGaWxlJXMiICUgZm51bV0KKyAgICAgICAgICAgIHBhdGggPSBkZWNvZGVfcGF0aChyYXdfcGF0aCkKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5pc1BhdGhXYW50ZWQocGF0aCkKKyAgICAgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgICAgICBmbnVtID0gZm51bSArIDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmaWxlID0ge30KKyAgICAgICAgICAgIGZpbGVbInBhdGgiXSA9IHJhd19wYXRoCisgICAgICAgICAgICBmaWxlWyJyZXYiXSA9IGNvbW1pdFsicmV2JXMiICUgZm51bV0KKyAgICAgICAgICAgIGZpbGVbImFjdGlvbiJdID0gY29tbWl0WyJhY3Rpb24lcyIgJSBmbnVtXQorICAgICAgICAgICAgZmlsZVsidHlwZSJdID0gY29tbWl0WyJ0eXBlJXMiICUgZm51bV0KKyAgICAgICAgICAgIGZudW0gPSBmbnVtICsgMQorCisgICAgICAgICAgICAjIHN0YXJ0IHdpdGggdGhlIGZ1bGwgcmVsYXRpdmUgcGF0aCB3aGVyZSB0aGlzIGZpbGUgd291bGQKKyAgICAgICAgICAgICMgZ28gaW4gYSBwNCBjbGllbnQKKyAgICAgICAgICAgIGlmIHNlbGYudXNlQ2xpZW50U3BlYzoKKyAgICAgICAgICAgICAgICByZWxQYXRoID0gZGVjb2RlX3BhdGgoc2VsZi5jbGllbnRTcGVjRGlycy5tYXBfaW5fY2xpZW50KHBhdGgpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWxQYXRoID0gc2VsZi5zdHJpcFJlcG9QYXRoKHBhdGgsIHNlbGYuZGVwb3RQYXRocykKKworICAgICAgICAgICAgZm9yIGJyYW5jaCBpbiBzZWxmLmtub3duQnJhbmNoZXMua2V5cygpOgorICAgICAgICAgICAgICAgICMgYWRkIGEgdHJhaWxpbmcgc2xhc2ggc28gdGhhdCBhIGNvbW1pdCBpbnRvIHF0LzQuMmZvbworICAgICAgICAgICAgICAgICMgZG9lc24ndCBlbmQgdXAgaW4gcXQvNC4yLCBlLmcuCisgICAgICAgICAgICAgICAgaWYgcDRQYXRoU3RhcnRzV2l0aChyZWxQYXRoLCBicmFuY2ggKyAiLyIpOgorICAgICAgICAgICAgICAgICAgICBpZiBicmFuY2ggbm90IGluIGJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoZXNbYnJhbmNoXSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaGVzW2JyYW5jaF0uYXBwZW5kKGZpbGUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcmV0dXJuIGJyYW5jaGVzCisKKyAgICBkZWYgd3JpdGVUb0dpdFN0cmVhbShzZWxmLCBnaXRNb2RlLCByZWxQYXRoLCBjb250ZW50cyk6CisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKGVuY29kZV90ZXh0X3N0cmVhbSh1J00ge30gaW5saW5lIHt9XG4nLmZvcm1hdChnaXRNb2RlLCByZWxQYXRoKSkpCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCdkYXRhICVkXG4nICUgc3VtKGxlbihkKSBmb3IgZCBpbiBjb250ZW50cykpCisgICAgICAgIGZvciBkIGluIGNvbnRlbnRzOgorICAgICAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoZCkKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoJ1xuJykKKworICAgIGRlZiBlbmNvZGVXaXRoVVRGOChzZWxmLCBwYXRoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0aC5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCcKKyAgICAgICAgICAgIGlmIGdpdENvbmZpZygnZ2l0LXA0LnBhdGhFbmNvZGluZycpOgorICAgICAgICAgICAgICAgIGVuY29kaW5nID0gZ2l0Q29uZmlnKCdnaXQtcDQucGF0aEVuY29kaW5nJykKKyAgICAgICAgICAgIHBhdGggPSBwYXRoLmRlY29kZShlbmNvZGluZywgJ3JlcGxhY2UnKS5lbmNvZGUoJ3V0ZjgnLCAncmVwbGFjZScpCisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoJ1BhdGggd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyBkZXRlY3RlZC4gVXNlZCAlcyB0byBlbmNvZGU6ICVzICcgJSAoZW5jb2RpbmcsIHBhdGgpKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgIyBvdXRwdXQgb25lIGZpbGUgZnJvbSB0aGUgUDQgc3RyZWFtCisgICAgIyAtIGhlbHBlciBmb3Igc3RyZWFtUDRGaWxlcworCisgICAgZGVmIHN0cmVhbU9uZVA0RmlsZShzZWxmLCBmaWxlLCBjb250ZW50cyk6CisgICAgICAgIGZpbGVfcGF0aCA9IGZpbGVbJ2RlcG90RmlsZSddCisgICAgICAgIHJlbFBhdGggPSBzZWxmLnN0cmlwUmVwb1BhdGgoZGVjb2RlX3BhdGgoZmlsZV9wYXRoKSwgc2VsZi5icmFuY2hQcmVmaXhlcykKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgaWYgJ2ZpbGVTaXplJyBpbiBzZWxmLnN0cmVhbV9maWxlOgorICAgICAgICAgICAgICAgIHNpemUgPSBpbnQoc2VsZi5zdHJlYW1fZmlsZVsnZmlsZVNpemUnXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2l6ZSA9IDAgIyBkZWxldGVkIGZpbGVzIGRvbid0IGdldCBhIGZpbGVTaXplIGFwcGFyZW50bHkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xyJXMgLS0+ICVzICglaSBNQilcbicgJSAoZmlsZV9wYXRoLCByZWxQYXRoLCBzaXplLzEwMjQvMTAyNCkpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKworICAgICAgICAodHlwZV9iYXNlLCB0eXBlX21vZHMpID0gc3BsaXRfcDRfdHlwZShmaWxlWyJ0eXBlIl0pCisKKyAgICAgICAgZ2l0X21vZGUgPSAiMTAwNjQ0IgorICAgICAgICBpZiAieCIgaW4gdHlwZV9tb2RzOgorICAgICAgICAgICAgZ2l0X21vZGUgPSAiMTAwNzU1IgorICAgICAgICBpZiB0eXBlX2Jhc2UgPT0gInN5bWxpbmsiOgorICAgICAgICAgICAgZ2l0X21vZGUgPSAiMTIwMDAwIgorICAgICAgICAgICAgIyBwNCBwcmludCBvbiBhIHN5bWxpbmsgc29tZXRpbWVzIGNvbnRhaW5zICJ0YXJnZXRcbiI7CisgICAgICAgICAgICAjIGlmIGl0IGRvZXMsIHJlbW92ZSB0aGUgbmV3bGluZQorICAgICAgICAgICAgZGF0YSA9ICcnLmpvaW4oZGVjb2RlX3RleHRfc3RyZWFtKGMpIGZvciBjIGluIGNvbnRlbnRzKQorICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgIyBTb21lIHZlcnNpb24gb2YgcDQgYWxsb3dlZCBjcmVhdGluZyBhIHN5bWxpbmsgdGhhdCBwb2ludGVkCisgICAgICAgICAgICAgICAgIyB0byBub3RoaW5nLiAgVGhpcyBjYXVzZXMgcDQgZXJyb3JzIHdoZW4gY2hlY2tpbmcgb3V0IHN1Y2gKKyAgICAgICAgICAgICAgICAjIGEgY2hhbmdlLCBhbmQgZXJyb3JzIGhlcmUgdG9vLiAgV29yayBhcm91bmQgaXQgYnkgaWdub3JpbmcKKyAgICAgICAgICAgICAgICAjIHRoZSBiYWQgc3ltbGluazsgaG9wZWZ1bGx5IGEgZnV0dXJlIGNoYW5nZSBmaXhlcyBpdC4KKyAgICAgICAgICAgICAgICBwcmludCgiXG5JZ25vcmluZyBlbXB0eSBzeW1saW5rIGluICVzIiAlIGZpbGVfcGF0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsaWYgZGF0YVstMV0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBjb250ZW50cyA9IFtkYXRhWzotMV1dCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gW2RhdGFdCisKKyAgICAgICAgaWYgdHlwZV9iYXNlID09ICJ1dGYxNiI6CisgICAgICAgICAgICAjIHA0IGRlbGl2ZXJzIGRpZmZlcmVudCB0ZXh0IGluIHRoZSBweXRob24gb3V0cHV0IHRvIC1HCisgICAgICAgICAgICAjIHRoYW4gaXQgZG9lcyB3aGVuIHVzaW5nICJwcmludCAtbyIsIG9yIG5vcm1hbCBwNCBjbGllbnQKKyAgICAgICAgICAgICMgb3BlcmF0aW9ucy4gIHV0ZjE2IGlzIGNvbnZlcnRlZCB0byBhc2NpaSBvciB1dGY4LCBwZXJoYXBzLgorICAgICAgICAgICAgIyBCdXQgYXNjaWkgdGV4dCBzYXZlZCBhcyAtdCB1dGYxNiBpcyBjb21wbGV0ZWx5IG1hbmdsZWQuCisgICAgICAgICAgICAjIEludm9rZSBwcmludCAtbyB0byBnZXQgdGhlIHJlYWwgY29udGVudHMuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIE9uIHdpbmRvd3MsIHRoZSBuZXdsaW5lcyB3aWxsIGFsd2F5cyBiZSBtYW5nbGVkIGJ5IHByaW50LCBzbyBwdXQKKyAgICAgICAgICAgICMgdGhlbSBiYWNrIHRvby4gIFRoaXMgaXMgbm90IG5lZWRlZCB0byB0aGUgY3lnd2luIHdpbmRvd3MgdmVyc2lvbiwKKyAgICAgICAgICAgICMganVzdCB0aGUgbmF0aXZlICJOVCIgdHlwZS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZXh0ID0gcDRfcmVhZF9waXBlKFsncHJpbnQnLCAnLXEnLCAnLW8nLCAnLScsICclc0AlcycgJSAoZGVjb2RlX3BhdGgoZmlsZVsnZGVwb3RGaWxlJ10pLCBmaWxlWydjaGFuZ2UnXSldLCByYXc9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBpZiAnVHJhbnNsYXRpb24gb2YgZmlsZSBjb250ZW50IGZhaWxlZCcgaW4gc3RyKGUpOgorICAgICAgICAgICAgICAgICAgICB0eXBlX2Jhc2UgPSAnYmluYXJ5JworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcDRfdmVyc2lvbl9zdHJpbmcoKS5maW5kKCcvTlQnKSA+PSAwOgorICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGInXHJcbicsIGInXG4nKQorICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gWyB0ZXh0IF0KKworICAgICAgICBpZiB0eXBlX2Jhc2UgPT0gImFwcGxlIjoKKyAgICAgICAgICAgICMgQXBwbGUgZmlsZXR5cGUgZmlsZXMgd2lsbCBiZSBzdHJlYW1lZCBhcyBhIGNvbmNhdGVuYXRpb24gb2YKKyAgICAgICAgICAgICMgaXRzIGFwcGxlZG91YmxlIGhlYWRlciBhbmQgdGhlIGNvbnRlbnRzLiAgVGhpcyBpcyB1c2VsZXNzCisgICAgICAgICAgICAjIG9uIGJvdGggbWFjcyBhbmQgbm9uLW1hY3MuICBJZiB1c2luZyAicHJpbnQgLXEgLW8geHgiLCBpdAorICAgICAgICAgICAgIyB3aWxsIGNyZWF0ZSAieHgiIHdpdGggdGhlIGRhdGEsIGFuZCAiJXh4IiB3aXRoIHRoZSBoZWFkZXIuCisgICAgICAgICAgICAjIFRoaXMgaXMgYWxzbyBub3QgdmVyeSB1c2VmdWwuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElkZWFsbHksIHNvbWVkYXksIHRoaXMgc2NyaXB0IGNhbiBsZWFybiBob3cgdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICMgYXBwbGVkb3VibGUgZmlsZXMgZGlyZWN0bHkgYW5kIGltcG9ydCB0aG9zZSB0byBnaXQsIGJ1dAorICAgICAgICAgICAgIyBub24tbWFjIG1hY2hpbmVzIGNhbiBuZXZlciBmaW5kIGEgdXNlIGZvciBhcHBsZSBmaWxldHlwZS4KKyAgICAgICAgICAgIHByaW50KCJcbklnbm9yaW5nIGFwcGxlIGZpbGV0eXBlIGZpbGUgJXMiICUgZmlsZVsnZGVwb3RGaWxlJ10pCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkbyBub3QgdHJ5IHRvIGRlLW1hbmdsZSBrZXl3b3JkcyBvbiB1dGYxNiBmaWxlcywKKyAgICAgICAgIyBldmVuIHRob3VnaCBpbiB0aGVvcnkgc29tZWJvZHkgbWF5IHdhbnQgdGhhdC4KKyAgICAgICAgcGF0dGVybiA9IHA0X2tleXdvcmRzX3JlZ2V4cF9mb3JfdHlwZSh0eXBlX2Jhc2UsIHR5cGVfbW9kcykKKyAgICAgICAgaWYgcGF0dGVybjoKKyAgICAgICAgICAgIHJlZ2V4cCA9IHJlLmNvbXBpbGUocGF0dGVybiwgcmUuVkVSQk9TRSkKKyAgICAgICAgICAgIHRleHQgPSAnJy5qb2luKGRlY29kZV90ZXh0X3N0cmVhbShjKSBmb3IgYyBpbiBjb250ZW50cykKKyAgICAgICAgICAgIHRleHQgPSByZWdleHAuc3ViKHInJFwxJCcsIHRleHQpCisgICAgICAgICAgICBjb250ZW50cyA9IFsgdGV4dCBdCisKKyAgICAgICAgaWYgc2VsZi5sYXJnZUZpbGVTeXN0ZW06CisgICAgICAgICAgICAoZ2l0X21vZGUsIGNvbnRlbnRzKSA9IHNlbGYubGFyZ2VGaWxlU3lzdGVtLnByb2Nlc3NDb250ZW50KGdpdF9tb2RlLCByZWxQYXRoLCBjb250ZW50cykKKworICAgICAgICBzZWxmLndyaXRlVG9HaXRTdHJlYW0oZ2l0X21vZGUsIHJlbFBhdGgsIGNvbnRlbnRzKQorCisgICAgZGVmIHN0cmVhbU9uZVA0RGVsZXRpb24oc2VsZiwgZmlsZSk6CisgICAgICAgIHJlbFBhdGggPSBzZWxmLnN0cmlwUmVwb1BhdGgoZGVjb2RlX3BhdGgoZmlsZVsncGF0aCddKSwgc2VsZi5icmFuY2hQcmVmaXhlcykKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoImRlbGV0ZSAlc1xuIiAlIHJlbFBhdGgpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoZW5jb2RlX3RleHRfc3RyZWFtKHUnRCB7fVxuJy5mb3JtYXQocmVsUGF0aCkpKQorCisgICAgICAgIGlmIHNlbGYubGFyZ2VGaWxlU3lzdGVtIGFuZCBzZWxmLmxhcmdlRmlsZVN5c3RlbS5pc0xhcmdlRmlsZShyZWxQYXRoKToKKyAgICAgICAgICAgIHNlbGYubGFyZ2VGaWxlU3lzdGVtLnJlbW92ZUxhcmdlRmlsZShyZWxQYXRoKQorCisgICAgIyBoYW5kbGUgYW5vdGhlciBjaHVuayBvZiBzdHJlYW1pbmcgZGF0YQorICAgIGRlZiBzdHJlYW1QNEZpbGVzQ2Ioc2VsZiwgbWFyc2hhbGxlZCk6CisKKyAgICAgICAgIyBjYXRjaCBwNCBlcnJvcnMgYW5kIGNvbXBsYWluCisgICAgICAgIGVyciA9IE5vbmUKKyAgICAgICAgaWYgImNvZGUiIGluIG1hcnNoYWxsZWQ6CisgICAgICAgICAgICBpZiBtYXJzaGFsbGVkWyJjb2RlIl0gPT0gImVycm9yIjoKKyAgICAgICAgICAgICAgICBpZiAiZGF0YSIgaW4gbWFyc2hhbGxlZDoKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gbWFyc2hhbGxlZFsiZGF0YSJdLnJzdHJpcCgpCisKKyAgICAgICAgaWYgbm90IGVyciBhbmQgJ2ZpbGVTaXplJyBpbiBzZWxmLnN0cmVhbV9maWxlOgorICAgICAgICAgICAgcmVxdWlyZWRfYnl0ZXMgPSBpbnQoKDQgKiBpbnQoc2VsZi5zdHJlYW1fZmlsZVsiZmlsZVNpemUiXSkpIC0gY2FsY0Rpc2tGcmVlKCkpCisgICAgICAgICAgICBpZiByZXF1aXJlZF9ieXRlcyA+IDA6CisgICAgICAgICAgICAgICAgZXJyID0gJ05vdCBlbm91Z2ggc3BhY2UgbGVmdCBvbiAlcyEgRnJlZSBhdCBsZWFzdCAlaSBNQi4nICUgKAorICAgICAgICAgICAgICAgICAgICBvcy5nZXRjd2QoKSwgcmVxdWlyZWRfYnl0ZXMvMTAyNC8xMDI0CisgICAgICAgICAgICAgICAgKQorCisgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgIGYgPSBOb25lCisgICAgICAgICAgICBpZiBzZWxmLnN0cmVhbV9oYXZlX2ZpbGVfaW5mbzoKKyAgICAgICAgICAgICAgICBpZiAiZGVwb3RGaWxlIiBpbiBzZWxmLnN0cmVhbV9maWxlOgorICAgICAgICAgICAgICAgICAgICBmID0gc2VsZi5zdHJlYW1fZmlsZVsiZGVwb3RGaWxlIl0KKyAgICAgICAgICAgICMgZm9yY2UgYSBmYWlsdXJlIGluIGZhc3QtaW1wb3J0LCBlbHNlIGFuIGVtcHR5CisgICAgICAgICAgICAjIGNvbW1pdCB3aWxsIGJlIG1hZGUKKyAgICAgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJcbiIpCisgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiZGllLW5vd1xuIikKKyAgICAgICAgICAgIHNlbGYuZ2l0U3RyZWFtLmNsb3NlKCkKKyAgICAgICAgICAgICMgaWdub3JlIGVycm9ycywgYnV0IG1ha2Ugc3VyZSBpdCBleGl0cyBmaXJzdAorICAgICAgICAgICAgc2VsZi5pbXBvcnRQcm9jZXNzLndhaXQoKQorICAgICAgICAgICAgaWYgZjoKKyAgICAgICAgICAgICAgICBkaWUoIkVycm9yIGZyb20gcDQgcHJpbnQgZm9yICVzOiAlcyIgJSAoZiwgZXJyKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGllKCJFcnJvciBmcm9tIHA0IHByaW50OiAlcyIgJSBlcnIpCisKKyAgICAgICAgaWYgJ2RlcG90RmlsZScgaW4gbWFyc2hhbGxlZCBhbmQgc2VsZi5zdHJlYW1faGF2ZV9maWxlX2luZm86CisgICAgICAgICAgICAjIHN0YXJ0IG9mIGEgbmV3IGZpbGUgLSBvdXRwdXQgdGhlIG9sZCBvbmUgZmlyc3QKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtT25lUDRGaWxlKHNlbGYuc3RyZWFtX2ZpbGUsIHNlbGYuc3RyZWFtX2NvbnRlbnRzKQorICAgICAgICAgICAgc2VsZi5zdHJlYW1fZmlsZSA9IHt9CisgICAgICAgICAgICBzZWxmLnN0cmVhbV9jb250ZW50cyA9IFtdCisgICAgICAgICAgICBzZWxmLnN0cmVhbV9oYXZlX2ZpbGVfaW5mbyA9IEZhbHNlCisKKyAgICAgICAgIyBwaWNrIHVwIHRoZSBuZXcgZmlsZSBpbmZvcm1hdGlvbi4uLiBmb3IgdGhlCisgICAgICAgICMgJ2RhdGEnIGZpZWxkIHdlIG5lZWQgdG8gYXBwZW5kIHRvIG91ciBhcnJheQorICAgICAgICBmb3IgayBpbiBtYXJzaGFsbGVkLmtleXMoKToKKyAgICAgICAgICAgIGlmIGsgPT0gJ2RhdGEnOgorICAgICAgICAgICAgICAgIGlmICdzdHJlYW1Db250ZW50U2l6ZScgbm90IGluIHNlbGYuc3RyZWFtX2ZpbGU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtX2ZpbGVbJ3N0cmVhbUNvbnRlbnRTaXplJ10gPSAwCisgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW1fZmlsZVsnc3RyZWFtQ29udGVudFNpemUnXSArPSBsZW4obWFyc2hhbGxlZFsnZGF0YSddKQorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtX2NvbnRlbnRzLmFwcGVuZChtYXJzaGFsbGVkWydkYXRhJ10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtX2ZpbGVba10gPSBtYXJzaGFsbGVkW2tdCisKKyAgICAgICAgaWYgKHZlcmJvc2UgYW5kCisgICAgICAgICAgICAnc3RyZWFtQ29udGVudFNpemUnIGluIHNlbGYuc3RyZWFtX2ZpbGUgYW5kCisgICAgICAgICAgICAnZmlsZVNpemUnIGluIHNlbGYuc3RyZWFtX2ZpbGUgYW5kCisgICAgICAgICAgICAnZGVwb3RGaWxlJyBpbiBzZWxmLnN0cmVhbV9maWxlKToKKyAgICAgICAgICAgIHNpemUgPSBpbnQoc2VsZi5zdHJlYW1fZmlsZVsiZmlsZVNpemUiXSkKKyAgICAgICAgICAgIGlmIHNpemUgPiAwOgorICAgICAgICAgICAgICAgIHByb2dyZXNzID0gMTAwKnNlbGYuc3RyZWFtX2ZpbGVbJ3N0cmVhbUNvbnRlbnRTaXplJ10vc2l6ZQorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xyJXMgJWQlJSAoJWkgTUIpJyAlIChzZWxmLnN0cmVhbV9maWxlWydkZXBvdEZpbGUnXSwgcHJvZ3Jlc3MsIGludChzaXplLzEwMjQvMTAyNCkpKQorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorCisgICAgICAgIHNlbGYuc3RyZWFtX2hhdmVfZmlsZV9pbmZvID0gVHJ1ZQorCisgICAgIyBTdHJlYW0gZGlyZWN0bHkgZnJvbSAicDQgZmlsZXMiIGludG8gImdpdCBmYXN0LWltcG9ydCIKKyAgICBkZWYgc3RyZWFtUDRGaWxlcyhzZWxmLCBmaWxlcyk6CisgICAgICAgIGZpbGVzRm9yQ29tbWl0ID0gW10KKyAgICAgICAgZmlsZXNUb1JlYWQgPSBbXQorICAgICAgICBmaWxlc1RvRGVsZXRlID0gW10KKworICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIGZpbGVzRm9yQ29tbWl0LmFwcGVuZChmKQorICAgICAgICAgICAgaWYgZlsnYWN0aW9uJ10gaW4gc2VsZi5kZWxldGVfYWN0aW9uczoKKyAgICAgICAgICAgICAgICBmaWxlc1RvRGVsZXRlLmFwcGVuZChmKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWxlc1RvUmVhZC5hcHBlbmQoZikKKworICAgICAgICAjIGRlbGV0ZWQgZmlsZXMuLi4KKyAgICAgICAgZm9yIGYgaW4gZmlsZXNUb0RlbGV0ZToKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtT25lUDREZWxldGlvbihmKQorCisgICAgICAgIGlmIGxlbihmaWxlc1RvUmVhZCkgPiAwOgorICAgICAgICAgICAgc2VsZi5zdHJlYW1fZmlsZSA9IHt9CisgICAgICAgICAgICBzZWxmLnN0cmVhbV9jb250ZW50cyA9IFtdCisgICAgICAgICAgICBzZWxmLnN0cmVhbV9oYXZlX2ZpbGVfaW5mbyA9IEZhbHNlCisKKyAgICAgICAgICAgICMgY3Vycnkgc2VsZiBhcmd1bWVudAorICAgICAgICAgICAgZGVmIHN0cmVhbVA0RmlsZXNDYlNlbGYoZW50cnkpOgorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtUDRGaWxlc0NiKGVudHJ5KQorCisgICAgICAgICAgICBmaWxlQXJncyA9IFtdCisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlc1RvUmVhZDoKKyAgICAgICAgICAgICAgICBpZiAnc2hlbHZlZF9jbCcgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgIyBIYW5kbGUgc2hlbHZlZCBDTHMgdXNpbmcgdGhlICJwNCBwcmludCBmaWxlQD1OIiBzeW50YXggdG8gcHJpbnQKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUgY29udGVudHMKKyAgICAgICAgICAgICAgICAgICAgZmlsZUFyZyA9IGZbJ3BhdGgnXSArIGVuY29kZV90ZXh0X3N0cmVhbSgnQD17fScuZm9ybWF0KGZbJ3NoZWx2ZWRfY2wnXSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZmlsZUFyZyA9IGZbJ3BhdGgnXSArIGVuY29kZV90ZXh0X3N0cmVhbSgnI3t9Jy5mb3JtYXQoZlsncmV2J10pKQorCisgICAgICAgICAgICAgICAgZmlsZUFyZ3MuYXBwZW5kKGZpbGVBcmcpCisKKyAgICAgICAgICAgIHA0Q21kTGlzdChbIi14IiwgIi0iLCAicHJpbnQiXSwKKyAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1maWxlQXJncywKKyAgICAgICAgICAgICAgICAgICAgICBjYj1zdHJlYW1QNEZpbGVzQ2JTZWxmKQorCisgICAgICAgICAgICAjIGRvIHRoZSBsYXN0IGNodW5rCisgICAgICAgICAgICBpZiAnZGVwb3RGaWxlJyBpbiBzZWxmLnN0cmVhbV9maWxlOgorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtT25lUDRGaWxlKHNlbGYuc3RyZWFtX2ZpbGUsIHNlbGYuc3RyZWFtX2NvbnRlbnRzKQorCisgICAgZGVmIG1ha2VfZW1haWwoc2VsZiwgdXNlcmlkKToKKyAgICAgICAgaWYgdXNlcmlkIGluIHNlbGYudXNlcnM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi51c2Vyc1t1c2VyaWRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiVzIDxhQGI+IiAlIHVzZXJpZAorCisgICAgZGVmIHN0cmVhbVRhZyhzZWxmLCBnaXRTdHJlYW0sIGxhYmVsTmFtZSwgbGFiZWxEZXRhaWxzLCBjb21taXQsIGVwb2NoKToKKyAgICAgICAgIiIiIFN0cmVhbSBhIHA0IHRhZy4KKyAgICAgICAgY29tbWl0IGlzIGVpdGhlciBhIGdpdCBjb21taXQsIG9yIGEgZmFzdC1pbXBvcnQgbWFyaywgIjo8cDRjb21taXQ+IgorICAgICAgICAiIiIKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIndyaXRpbmcgdGFnICVzIGZvciBjb21taXQgJXMiICUgKGxhYmVsTmFtZSwgY29tbWl0KSkKKyAgICAgICAgZ2l0U3RyZWFtLndyaXRlKCJ0YWcgJXNcbiIgJSBsYWJlbE5hbWUpCisgICAgICAgIGdpdFN0cmVhbS53cml0ZSgiZnJvbSAlc1xuIiAlIGNvbW1pdCkKKworICAgICAgICBpZiAnT3duZXInIGluIGxhYmVsRGV0YWlsczoKKyAgICAgICAgICAgIG93bmVyID0gbGFiZWxEZXRhaWxzWyJPd25lciJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvd25lciA9IE5vbmUKKworICAgICAgICAjIFRyeSB0byB1c2UgdGhlIG93bmVyIG9mIHRoZSBwNCBsYWJlbCwgb3IgZmFpbGluZyB0aGF0LAorICAgICAgICAjIHRoZSBjdXJyZW50IHA0IHVzZXIgaWQuCisgICAgICAgIGlmIG93bmVyOgorICAgICAgICAgICAgZW1haWwgPSBzZWxmLm1ha2VfZW1haWwob3duZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbWFpbCA9IHNlbGYubWFrZV9lbWFpbChzZWxmLnA0VXNlcklkKCkpCisgICAgICAgIHRhZ2dlciA9ICIlcyAlcyAlcyIgJSAoZW1haWwsIGVwb2NoLCBzZWxmLnR6KQorCisgICAgICAgIGdpdFN0cmVhbS53cml0ZSgidGFnZ2VyICVzXG4iICUgdGFnZ2VyKQorCisgICAgICAgIHByaW50KCJsYWJlbERldGFpbHM9IixsYWJlbERldGFpbHMpCisgICAgICAgIGlmICdEZXNjcmlwdGlvbicgaW4gbGFiZWxEZXRhaWxzOgorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBsYWJlbERldGFpbHNbJ0Rlc2NyaXB0aW9uJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gJ0xhYmVsIGZyb20gZ2l0IHA0JworCisgICAgICAgIGdpdFN0cmVhbS53cml0ZSgiZGF0YSAlZFxuIiAlIGxlbihkZXNjcmlwdGlvbikpCisgICAgICAgIGdpdFN0cmVhbS53cml0ZShkZXNjcmlwdGlvbikKKyAgICAgICAgZ2l0U3RyZWFtLndyaXRlKCJcbiIpCisKKyAgICBkZWYgaW5DbGllbnRTcGVjKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBub3Qgc2VsZi5jbGllbnRTcGVjRGlyczoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGluQ2xpZW50U3BlYyA9IHNlbGYuY2xpZW50U3BlY0RpcnMubWFwX2luX2NsaWVudChwYXRoKQorICAgICAgICBpZiBub3QgaW5DbGllbnRTcGVjIGFuZCBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnSWdub3JpbmcgZmlsZSBvdXRzaWRlIG9mIGNsaWVudCBzcGVjOiB7MH0nLmZvcm1hdChwYXRoKSkKKyAgICAgICAgcmV0dXJuIGluQ2xpZW50U3BlYworCisgICAgZGVmIGhhc0JyYW5jaFByZWZpeChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgbm90IHNlbGYuYnJhbmNoUHJlZml4ZXM6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBoYXNQcmVmaXggPSBbcCBmb3IgcCBpbiBzZWxmLmJyYW5jaFByZWZpeGVzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwNFBhdGhTdGFydHNXaXRoKHBhdGgsIHApXQorICAgICAgICBpZiBub3QgaGFzUHJlZml4IGFuZCBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnSWdub3JpbmcgZmlsZSBvdXRzaWRlIG9mIHByZWZpeDogezB9Jy5mb3JtYXQocGF0aCkpCisgICAgICAgIHJldHVybiBoYXNQcmVmaXgKKworICAgIGRlZiBmaW5kU2hhZG93ZWRGaWxlcyhzZWxmLCBmaWxlcywgY2hhbmdlKToKKyAgICAgICAgIyBQZXJmb3JjZSBhbGxvd3MgeW91IGNvbW1pdCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCB0aGUgc2FtZSBuYW1lLAorICAgICAgICAjIHNvIHlvdSBjb3VsZCBoYXZlIGZpbGVzIC8vZGVwb3QvZm9vIGFuZCAvL2RlcG90L2Zvby9iYXIgYm90aCBjaGVja2VkCisgICAgICAgICMgaW4uICBBIHA0IHN5bmMgb2YgYSByZXBvc2l0b3J5IGluIHRoaXMgc3RhdGUgZmFpbHMuICBEZWxldGluZyBvbmUgb2YKKyAgICAgICAgIyB0aGUgZmlsZXMgcmVjb3ZlcnMgdGhlIHJlcG9zaXRvcnkuCisgICAgICAgICMKKyAgICAgICAgIyBHaXQgd2lsbCBub3QgYWxsb3cgdGhlIGJyb2tlbiBzdGF0ZSB0byBleGlzdCBhbmQgb25seSB0aGUgbW9zdCByZWNlbnQKKyAgICAgICAgIyBvZiB0aGUgY29uZmxpY3RpbmcgbmFtZXMgaXMgbGVmdCBpbiB0aGUgcmVwb3NpdG9yeS4gIFdoZW4gb25lIG9mIHRoZQorICAgICAgICAjIGNvbmZsaWN0aW5nIGZpbGVzIGlzIGRlbGV0ZWQgd2UgbmVlZCB0byByZS1hZGQgdGhlIG90aGVyIG9uZSB0byBtYWtlCisgICAgICAgICMgc3VyZSB0aGUgZ2l0IHJlcG9zaXRvcnkgcmVjb3ZlcnMgaW4gdGhlIHNhbWUgd2F5IGFzIHBlcmZvcmNlLgorICAgICAgICBkZWxldGVkID0gW2YgZm9yIGYgaW4gZmlsZXMgaWYgZlsnYWN0aW9uJ10gaW4gc2VsZi5kZWxldGVfYWN0aW9uc10KKyAgICAgICAgdG9fY2hlY2sgPSBzZXQoKQorICAgICAgICBmb3IgZiBpbiBkZWxldGVkOgorICAgICAgICAgICAgcGF0aCA9IGRlY29kZV9wYXRoKGZbJ3BhdGgnXSkKKyAgICAgICAgICAgIHRvX2NoZWNrLmFkZChwYXRoICsgJy8uLi4nKQorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5yc3BsaXQoIi8iLCAxKVswXQorICAgICAgICAgICAgICAgIGlmIHBhdGggPT0gIi8iIG9yIHBhdGggaW4gdG9fY2hlY2s6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgdG9fY2hlY2suYWRkKHBhdGgpCisgICAgICAgIHRvX2NoZWNrID0gWyclc0AlcycgJSAod2lsZGNhcmRfZW5jb2RlKHApLCBjaGFuZ2UpIGZvciBwIGluIHRvX2NoZWNrCisgICAgICAgICAgICBpZiBzZWxmLmhhc0JyYW5jaFByZWZpeChwKV0KKyAgICAgICAgaWYgdG9fY2hlY2s6CisgICAgICAgICAgICBzdGF0X3Jlc3VsdCA9IHA0Q21kTGlzdChbIi14IiwgIi0iLCAiZnN0YXQiLCAiLVQiLAorICAgICAgICAgICAgICAgICJkZXBvdEZpbGUsaGVhZEFjdGlvbixoZWFkUmV2LGhlYWRUeXBlIl0sIHN0ZGluPXRvX2NoZWNrKQorICAgICAgICAgICAgZm9yIHJlY29yZCBpbiBzdGF0X3Jlc3VsdDoKKyAgICAgICAgICAgICAgICBpZiByZWNvcmRbJ2NvZGUnXSAhPSAnc3RhdCc6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgcmVjb3JkWydoZWFkQWN0aW9uJ10gaW4gc2VsZi5kZWxldGVfYWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmaWxlcy5hcHBlbmQoeworICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzogJ2FkZCcsCisgICAgICAgICAgICAgICAgICAgICdwYXRoJzogcmVjb3JkWydkZXBvdEZpbGUnXSwKKyAgICAgICAgICAgICAgICAgICAgJ3Jldic6IHJlY29yZFsnaGVhZFJldiddLAorICAgICAgICAgICAgICAgICAgICAndHlwZSc6IHJlY29yZFsnaGVhZFR5cGUnXX0pCisKKyAgICBkZWYgY29tbWl0KHNlbGYsIGRldGFpbHMsIGZpbGVzLCBicmFuY2gsIHBhcmVudCA9ICIiLCBhbGxvd19lbXB0eT1GYWxzZSk6CisgICAgICAgIGVwb2NoID0gZGV0YWlsc1sidGltZSJdCisgICAgICAgIGF1dGhvciA9IGRldGFpbHNbInVzZXIiXQorICAgICAgICBqb2JzID0gc2VsZi5leHRyYWN0Sm9ic0Zyb21Db21taXQoZGV0YWlscykKKworICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnY29tbWl0IGludG8gezB9Jy5mb3JtYXQoYnJhbmNoKSkKKworICAgICAgICBmaWxlcyA9IFtmIGZvciBmIGluIGZpbGVzCisgICAgICAgICAgICBpZiBzZWxmLmhhc0JyYW5jaFByZWZpeChkZWNvZGVfcGF0aChmWydwYXRoJ10pKV0KKyAgICAgICAgc2VsZi5maW5kU2hhZG93ZWRGaWxlcyhmaWxlcywgZGV0YWlsc1snY2hhbmdlJ10pCisKKyAgICAgICAgaWYgc2VsZi5jbGllbnRTcGVjRGlyczoKKyAgICAgICAgICAgIHNlbGYuY2xpZW50U3BlY0RpcnMudXBkYXRlX2NsaWVudF9zcGVjX3BhdGhfY2FjaGUoZmlsZXMpCisKKyAgICAgICAgZmlsZXMgPSBbZiBmb3IgZiBpbiBmaWxlcyBpZiBzZWxmLmluQ2xpZW50U3BlYyhkZWNvZGVfcGF0aChmWydwYXRoJ10pKV0KKworICAgICAgICBpZiBnaXRDb25maWdCb29sKCdnaXQtcDQua2VlcEVtcHR5Q29tbWl0cycpOgorICAgICAgICAgICAgYWxsb3dfZW1wdHkgPSBUcnVlCisKKyAgICAgICAgaWYgbm90IGZpbGVzIGFuZCBub3QgYWxsb3dfZW1wdHk6CisgICAgICAgICAgICBwcmludCgnSWdub3JpbmcgcmV2aXNpb24gezB9IGFzIGl0IHdvdWxkIHByb2R1Y2UgYW4gZW1wdHkgY29tbWl0LicKKyAgICAgICAgICAgICAgICAuZm9ybWF0KGRldGFpbHNbJ2NoYW5nZSddKSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJjb21taXQgJXNcbiIgJSBicmFuY2gpCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJtYXJrIDolc1xuIiAlIGRldGFpbHNbImNoYW5nZSJdKQorICAgICAgICBzZWxmLmNvbW1pdHRlZENoYW5nZXMuYWRkKGludChkZXRhaWxzWyJjaGFuZ2UiXSkpCisgICAgICAgIGNvbW1pdHRlciA9ICIiCisgICAgICAgIGlmIGF1dGhvciBub3QgaW4gc2VsZi51c2VyczoKKyAgICAgICAgICAgIHNlbGYuZ2V0VXNlck1hcEZyb21QZXJmb3JjZVNlcnZlcigpCisgICAgICAgIGNvbW1pdHRlciA9ICIlcyAlcyAlcyIgJSAoc2VsZi5tYWtlX2VtYWlsKGF1dGhvciksIGVwb2NoLCBzZWxmLnR6KQorCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJjb21taXR0ZXIgJXNcbiIgJSBjb21taXR0ZXIpCisKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoImRhdGEgPDxFT1RcbiIpCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKGRldGFpbHNbImRlc2MiXSkKKyAgICAgICAgaWYgbGVuKGpvYnMpID4gMDoKKyAgICAgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJcbkpvYnM6ICVzIiAlICgnICcuam9pbihqb2JzKSkpCisKKyAgICAgICAgaWYgbm90IHNlbGYuc3VwcHJlc3NfbWV0YV9jb21tZW50OgorICAgICAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoIlxuW2dpdC1wNDogZGVwb3QtcGF0aHMgPSBcIiVzXCI6IGNoYW5nZSA9ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnLCcuam9pbihzZWxmLmJyYW5jaFByZWZpeGVzKSwgZGV0YWlsc1siY2hhbmdlIl0pKQorICAgICAgICAgICAgaWYgbGVuKGRldGFpbHNbJ29wdGlvbnMnXSkgPiAwOgorICAgICAgICAgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCI6IG9wdGlvbnMgPSAlcyIgJSBkZXRhaWxzWydvcHRpb25zJ10pCisgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiXVxuIikKKworICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiRU9UXG5cbiIpCisKKyAgICAgICAgaWYgbGVuKHBhcmVudCkgPiAwOgorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCJwYXJlbnQgJXMiICUgcGFyZW50KQorICAgICAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoImZyb20gJXNcbiIgJSBwYXJlbnQpCisKKyAgICAgICAgc2VsZi5zdHJlYW1QNEZpbGVzKGZpbGVzKQorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAgIGNoYW5nZSA9IGludChkZXRhaWxzWyJjaGFuZ2UiXSkKKworICAgICAgICBpZiBjaGFuZ2UgaW4gc2VsZi5sYWJlbHM6CisgICAgICAgICAgICBsYWJlbCA9IHNlbGYubGFiZWxzW2NoYW5nZV0KKyAgICAgICAgICAgIGxhYmVsRGV0YWlscyA9IGxhYmVsWzBdCisgICAgICAgICAgICBsYWJlbFJldmlzaW9ucyA9IGxhYmVsWzFdCisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoIkNoYW5nZSAlcyBpcyBsYWJlbGxlZCAlcyIgJSAoY2hhbmdlLCBsYWJlbERldGFpbHMpKQorCisgICAgICAgICAgICBmaWxlcyA9IHA0Q21kTGlzdChbImZpbGVzIl0gKyBbIiVzLi4uQCVzIiAlIChwLCBjaGFuZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLmJyYW5jaFByZWZpeGVzXSkKKworICAgICAgICAgICAgaWYgbGVuKGZpbGVzKSA9PSBsZW4obGFiZWxSZXZpc2lvbnMpOgorCisgICAgICAgICAgICAgICAgY2xlYW5lZEZpbGVzID0ge30KKyAgICAgICAgICAgICAgICBmb3IgaW5mbyBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5mb1siYWN0aW9uIl0gaW4gc2VsZi5kZWxldGVfYWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGNsZWFuZWRGaWxlc1tpbmZvWyJkZXBvdEZpbGUiXV0gPSBpbmZvWyJyZXYiXQorCisgICAgICAgICAgICAgICAgaWYgY2xlYW5lZEZpbGVzID09IGxhYmVsUmV2aXNpb25zOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbVRhZyhzZWxmLmdpdFN0cmVhbSwgJ3RhZ18lcycgJSBsYWJlbERldGFpbHNbJ2xhYmVsJ10sIGxhYmVsRGV0YWlscywgYnJhbmNoLCBlcG9jaCkKKworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJUYWcgJXMgZG9lcyBub3QgbWF0Y2ggd2l0aCBjaGFuZ2UgJXM6IGZpbGVzIGRvIG5vdCBtYXRjaC4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobGFiZWxEZXRhaWxzWyJsYWJlbCJdLCBjaGFuZ2UpKQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlRhZyAlcyBkb2VzIG5vdCBtYXRjaCB3aXRoIGNoYW5nZSAlczogZmlsZSBjb3VudCBpcyBkaWZmZXJlbnQuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobGFiZWxEZXRhaWxzWyJsYWJlbCJdLCBjaGFuZ2UpKQorCisgICAgIyBCdWlsZCBhIGRpY3Rpb25hcnkgb2YgY2hhbmdlbGlzdHMgYW5kIGxhYmVscywgZm9yICJkZXRlY3QtbGFiZWxzIiBvcHRpb24uCisgICAgZGVmIGdldExhYmVscyhzZWxmKToKKyAgICAgICAgc2VsZi5sYWJlbHMgPSB7fQorCisgICAgICAgIGwgPSBwNENtZExpc3QoWyJsYWJlbHMiXSArIFsiJXMuLi4iICUgcCBmb3IgcCBpbiBzZWxmLmRlcG90UGF0aHNdKQorICAgICAgICBpZiBsZW4obCkgPiAwIGFuZCBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICBwcmludCgiRmluZGluZyBmaWxlcyBiZWxvbmdpbmcgdG8gbGFiZWxzIGluICVzIiAlIHNlbGYuZGVwb3RQYXRocykKKworICAgICAgICBmb3Igb3V0cHV0IGluIGw6CisgICAgICAgICAgICBsYWJlbCA9IG91dHB1dFsibGFiZWwiXQorICAgICAgICAgICAgcmV2aXNpb25zID0ge30KKyAgICAgICAgICAgIG5ld2VzdENoYW5nZSA9IDAKKyAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCgiUXVlcnlpbmcgZmlsZXMgZm9yIGxhYmVsICVzIiAlIGxhYmVsKQorICAgICAgICAgICAgZm9yIGZpbGUgaW4gcDRDbWRMaXN0KFsiZmlsZXMiXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiJXMuLi5AJXMiICUgKHAsIGxhYmVsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzXSk6CisgICAgICAgICAgICAgICAgcmV2aXNpb25zW2ZpbGVbImRlcG90RmlsZSJdXSA9IGZpbGVbInJldiJdCisgICAgICAgICAgICAgICAgY2hhbmdlID0gaW50KGZpbGVbImNoYW5nZSJdKQorICAgICAgICAgICAgICAgIGlmIGNoYW5nZSA+IG5ld2VzdENoYW5nZToKKyAgICAgICAgICAgICAgICAgICAgbmV3ZXN0Q2hhbmdlID0gY2hhbmdlCisKKyAgICAgICAgICAgIHNlbGYubGFiZWxzW25ld2VzdENoYW5nZV0gPSBbb3V0cHV0LCByZXZpc2lvbnNdCisKKyAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIkxhYmVsIGNoYW5nZXM6ICVzIiAlIHNlbGYubGFiZWxzLmtleXMoKSkKKworICAgICMgSW1wb3J0IHA0IGxhYmVscyBhcyBnaXQgdGFncy4gQSBkaXJlY3QgbWFwcGluZyBkb2VzIG5vdAorICAgICMgZXhpc3QsIHNvIGFzc3VtZSB0aGF0IGlmIGFsbCB0aGUgZmlsZXMgYXJlIGF0IHRoZSBzYW1lIHJldmlzaW9uCisgICAgIyB0aGVuIHdlIGNhbiB1c2UgdGhhdCwgb3IgaXQncyBzb21ldGhpbmcgbW9yZSBjb21wbGljYXRlZCB3ZSBzaG91bGQKKyAgICAjIGp1c3QgaWdub3JlLgorICAgIGRlZiBpbXBvcnRQNExhYmVscyhzZWxmLCBzdHJlYW0sIHA0TGFiZWxzKToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJpbXBvcnQgcDQgbGFiZWxzOiAiICsgJyAnLmpvaW4ocDRMYWJlbHMpKQorCisgICAgICAgIGlnbm9yZWRQNExhYmVscyA9IGdpdENvbmZpZ0xpc3QoImdpdC1wNC5pZ25vcmVkUDRMYWJlbHMiKQorICAgICAgICB2YWxpZExhYmVsUmVnZXhwID0gZ2l0Q29uZmlnKCJnaXQtcDQubGFiZWxJbXBvcnRSZWdleHAiKQorICAgICAgICBpZiBsZW4odmFsaWRMYWJlbFJlZ2V4cCkgPT0gMDoKKyAgICAgICAgICAgIHZhbGlkTGFiZWxSZWdleHAgPSBkZWZhdWx0TGFiZWxSZWdleHAKKyAgICAgICAgbSA9IHJlLmNvbXBpbGUodmFsaWRMYWJlbFJlZ2V4cCkKKworICAgICAgICBmb3IgbmFtZSBpbiBwNExhYmVsczoKKyAgICAgICAgICAgIGNvbW1pdEZvdW5kID0gRmFsc2UKKworICAgICAgICAgICAgaWYgbm90IG0ubWF0Y2gobmFtZSk6CisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoImxhYmVsICVzIGRvZXMgbm90IG1hdGNoIHJlZ2V4cCAlcyIgJSAobmFtZSx2YWxpZExhYmVsUmVnZXhwKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBuYW1lIGluIGlnbm9yZWRQNExhYmVsczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBsYWJlbERldGFpbHMgPSBwNENtZExpc3QoWydsYWJlbCcsICItbyIsIG5hbWVdKVswXQorCisgICAgICAgICAgICAjIGdldCB0aGUgbW9zdCByZWNlbnQgY2hhbmdlbGlzdCBmb3IgZWFjaCBmaWxlIGluIHRoaXMgbGFiZWwKKyAgICAgICAgICAgIGNoYW5nZSA9IHA0Q21kKFsiY2hhbmdlcyIsICItbSIsICIxIl0gKyBbIiVzLi4uQCVzIiAlIChwLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLmRlcG90UGF0aHNdKQorCisgICAgICAgICAgICBpZiAnY2hhbmdlJyBpbiBjaGFuZ2U6CisgICAgICAgICAgICAgICAgIyBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGdpdCBjb21taXQ7IHRha2UgdGhlIG9sZGVzdCBjb21taXQKKyAgICAgICAgICAgICAgICBjaGFuZ2VsaXN0ID0gaW50KGNoYW5nZVsnY2hhbmdlJ10pCisgICAgICAgICAgICAgICAgaWYgY2hhbmdlbGlzdCBpbiBzZWxmLmNvbW1pdHRlZENoYW5nZXM6CisgICAgICAgICAgICAgICAgICAgIGdpdENvbW1pdCA9ICI6JWQiICUgY2hhbmdlbGlzdCAgICAgICAjIHVzZSBhIGZhc3QtaW1wb3J0IG1hcmsKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0Rm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZ2l0Q29tbWl0ID0gcmVhZF9waXBlKFsiZ2l0IiwgInJldi1saXN0IiwgIi0tbWF4LWNvdW50PTEiLAorICAgICAgICAgICAgICAgICAgICAgICAgIi0tcmV2ZXJzZSIsICI6L1xbZ2l0LXA0Oi4qY2hhbmdlID0gJWRcXSIgJSBjaGFuZ2VsaXN0XSwgaWdub3JlX2Vycm9yPVRydWUpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihnaXRDb21taXQpID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiaW1wb3J0aW5nIGxhYmVsICVzOiBjb3VsZCBub3QgZmluZCBnaXQgY29tbWl0IGZvciBjaGFuZ2VsaXN0ICVkIiAlIChuYW1lLCBjaGFuZ2VsaXN0KSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgZ2l0Q29tbWl0ID0gZ2l0Q29tbWl0LnN0cmlwKCkKKworICAgICAgICAgICAgICAgIGlmIGNvbW1pdEZvdW5kOgorICAgICAgICAgICAgICAgICAgICAjIENvbnZlcnQgZnJvbSBwNCB0aW1lIGZvcm1hdAorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB0bXdoZW4gPSB0aW1lLnN0cnB0aW1lKGxhYmVsRGV0YWlsc1snVXBkYXRlJ10sICIlWS8lbS8lZCAlSDolTTolUyIpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBjb252ZXJ0IGxhYmVsIHRpbWUgJXMiICUgbGFiZWxEZXRhaWxzWydVcGRhdGUnXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtd2hlbiA9IDEKKworICAgICAgICAgICAgICAgICAgICB3aGVuID0gaW50KHRpbWUubWt0aW1lKHRtd2hlbikpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtVGFnKHN0cmVhbSwgbmFtZSwgbGFiZWxEZXRhaWxzLCBnaXRDb21taXQsIHdoZW4pCisgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgicDQgbGFiZWwgJXMgbWFwcGVkIHRvIGdpdCBjb21taXQgJXMiICUgKG5hbWUsIGdpdENvbW1pdCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJMYWJlbCAlcyBoYXMgbm8gY2hhbmdlbGlzdHMgLSBwb3NzaWJseSBkZWxldGVkPyIgJSBuYW1lKQorCisgICAgICAgICAgICBpZiBub3QgY29tbWl0Rm91bmQ6CisgICAgICAgICAgICAgICAgIyBXZSBjYW4ndCBpbXBvcnQgdGhpcyBsYWJlbDsgZG9uJ3QgdHJ5IGFnYWluIGFzIGl0IHdpbGwgZ2V0IHZlcnkKKyAgICAgICAgICAgICAgICAjIGV4cGVuc2l2ZSByZXBlYXRlZGx5IGZldGNoaW5nIGFsbCB0aGUgZmlsZXMgZm9yIGxhYmVscyB0aGF0IHdpbGwKKyAgICAgICAgICAgICAgICAjIG5ldmVyIGJlIGltcG9ydGVkLiBJZiB0aGUgbGFiZWwgaXMgbW92ZWQgaW4gdGhlIGZ1dHVyZSwgdGhlCisgICAgICAgICAgICAgICAgIyBpZ25vcmUgd2lsbCBuZWVkIHRvIGJlIHJlbW92ZWQgbWFudWFsbHkuCisgICAgICAgICAgICAgICAgc3lzdGVtKFsiZ2l0IiwgImNvbmZpZyIsICItLWFkZCIsICJnaXQtcDQuaWdub3JlZFA0TGFiZWxzIiwgbmFtZV0pCisKKyAgICBkZWYgZ3Vlc3NQcm9qZWN0TmFtZShzZWxmKToKKyAgICAgICAgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzOgorICAgICAgICAgICAgaWYgcC5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgIHAgPSBwWzotMV0KKyAgICAgICAgICAgIHAgPSBwW3Auc3RyaXAoKS5yZmluZCgiLyIpICsgMTpdCisgICAgICAgICAgICBpZiBub3QgcC5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgcCArPSAiLyIKKyAgICAgICAgICAgIHJldHVybiBwCisKKyAgICBkZWYgZ2V0QnJhbmNoTWFwcGluZyhzZWxmKToKKyAgICAgICAgbG9zdEFuZEZvdW5kQnJhbmNoZXMgPSBzZXQoKQorCisgICAgICAgIHVzZXIgPSBnaXRDb25maWcoImdpdC1wNC5icmFuY2hVc2VyIikKKyAgICAgICAgaWYgbGVuKHVzZXIpID4gMDoKKyAgICAgICAgICAgIGNvbW1hbmQgPSAiYnJhbmNoZXMgLXUgJXMiICUgdXNlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29tbWFuZCA9ICJicmFuY2hlcyIKKworICAgICAgICBmb3IgaW5mbyBpbiBwNENtZExpc3QoY29tbWFuZCk6CisgICAgICAgICAgICBkZXRhaWxzID0gcDRDbWQoWyJicmFuY2giLCAiLW8iLCBpbmZvWyJicmFuY2giXV0pCisgICAgICAgICAgICB2aWV3SWR4ID0gMAorICAgICAgICAgICAgd2hpbGUgIlZpZXclcyIgJSB2aWV3SWR4IGluIGRldGFpbHM6CisgICAgICAgICAgICAgICAgcGF0aHMgPSBkZXRhaWxzWyJWaWV3JXMiICUgdmlld0lkeF0uc3BsaXQoIiAiKQorICAgICAgICAgICAgICAgIHZpZXdJZHggPSB2aWV3SWR4ICsgMQorICAgICAgICAgICAgICAgICMgcmVxdWlyZSBzdGFuZGFyZCAvL2RlcG90L2Zvby8uLi4gLy9kZXBvdC9iYXIvLi4uIG1hcHBpbmcKKyAgICAgICAgICAgICAgICBpZiBsZW4ocGF0aHMpICE9IDIgb3Igbm90IHBhdGhzWzBdLmVuZHN3aXRoKCIvLi4uIikgb3Igbm90IHBhdGhzWzFdLmVuZHN3aXRoKCIvLi4uIik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc291cmNlID0gcGF0aHNbMF0KKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHBhdGhzWzFdCisgICAgICAgICAgICAgICAgIyMgSEFDSworICAgICAgICAgICAgICAgIGlmIHA0UGF0aFN0YXJ0c1dpdGgoc291cmNlLCBzZWxmLmRlcG90UGF0aHNbMF0pIGFuZCBwNFBhdGhTdGFydHNXaXRoKGRlc3RpbmF0aW9uLCBzZWxmLmRlcG90UGF0aHNbMF0pOgorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2VbbGVuKHNlbGYuZGVwb3RQYXRoc1swXSk6LTRdCisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gZGVzdGluYXRpb25bbGVuKHNlbGYuZGVwb3RQYXRoc1swXSk6LTRdCisKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVzdGluYXRpb24gaW4gc2VsZi5rbm93bkJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJwNCBicmFuY2ggJXMgZGVmaW5lcyBhIG1hcHBpbmcgZnJvbSAlcyB0byAlcyIgJSAoaW5mb1siYnJhbmNoIl0sIHNvdXJjZSwgZGVzdGluYXRpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJidXQgdGhlcmUgZXhpc3RzIGFub3RoZXIgbWFwcGluZyBmcm9tICVzIHRvICVzIGFscmVhZHkhIiAlIChzZWxmLmtub3duQnJhbmNoZXNbZGVzdGluYXRpb25dLCBkZXN0aW5hdGlvbikpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYua25vd25CcmFuY2hlc1tkZXN0aW5hdGlvbl0gPSBzb3VyY2UKKworICAgICAgICAgICAgICAgICAgICBsb3N0QW5kRm91bmRCcmFuY2hlcy5kaXNjYXJkKGRlc3RpbmF0aW9uKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHNvdXJjZSBub3QgaW4gc2VsZi5rbm93bkJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9zdEFuZEZvdW5kQnJhbmNoZXMuYWRkKHNvdXJjZSkKKworICAgICAgICAjIFBlcmZvcmNlIGRvZXMgbm90IHN0cmljdGx5IHJlcXVpcmUgYnJhbmNoZXMgdG8gYmUgZGVmaW5lZCwgc28gd2UgYWxzbworICAgICAgICAjIGNoZWNrIGdpdCBjb25maWcgZm9yIGEgYnJhbmNoIGxpc3QuCisgICAgICAgICMKKyAgICAgICAgIyBFeGFtcGxlIG9mIGJyYW5jaCBkZWZpbml0aW9uIGluIGdpdCBjb25maWcgZmlsZToKKyAgICAgICAgIyBbZ2l0LXA0XQorICAgICAgICAjICAgYnJhbmNoTGlzdD1tYWluOmJyYW5jaEEKKyAgICAgICAgIyAgIGJyYW5jaExpc3Q9bWFpbjpicmFuY2hCCisgICAgICAgICMgICBicmFuY2hMaXN0PWJyYW5jaEE6YnJhbmNoQworICAgICAgICBjb25maWdCcmFuY2hlcyA9IGdpdENvbmZpZ0xpc3QoImdpdC1wNC5icmFuY2hMaXN0IikKKyAgICAgICAgZm9yIGJyYW5jaCBpbiBjb25maWdCcmFuY2hlczoKKyAgICAgICAgICAgIGlmIGJyYW5jaDoKKyAgICAgICAgICAgICAgICAoc291cmNlLCBkZXN0aW5hdGlvbikgPSBicmFuY2guc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgIHNlbGYua25vd25CcmFuY2hlc1tkZXN0aW5hdGlvbl0gPSBzb3VyY2UKKworICAgICAgICAgICAgICAgIGxvc3RBbmRGb3VuZEJyYW5jaGVzLmRpc2NhcmQoZGVzdGluYXRpb24pCisKKyAgICAgICAgICAgICAgICBpZiBzb3VyY2Ugbm90IGluIHNlbGYua25vd25CcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgbG9zdEFuZEZvdW5kQnJhbmNoZXMuYWRkKHNvdXJjZSkKKworCisgICAgICAgIGZvciBicmFuY2ggaW4gbG9zdEFuZEZvdW5kQnJhbmNoZXM6CisgICAgICAgICAgICBzZWxmLmtub3duQnJhbmNoZXNbYnJhbmNoXSA9IGJyYW5jaAorCisgICAgZGVmIGdldEJyYW5jaE1hcHBpbmdGcm9tR2l0QnJhbmNoZXMoc2VsZik6CisgICAgICAgIGJyYW5jaGVzID0gcDRCcmFuY2hlc0luR2l0KHNlbGYuaW1wb3J0SW50b1JlbW90ZXMpCisgICAgICAgIGZvciBicmFuY2ggaW4gYnJhbmNoZXMua2V5cygpOgorICAgICAgICAgICAgaWYgYnJhbmNoID09ICJtYXN0ZXIiOgorICAgICAgICAgICAgICAgIGJyYW5jaCA9ICJtYWluIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmFuY2ggPSBicmFuY2hbbGVuKHNlbGYucHJvamVjdE5hbWUpOl0KKyAgICAgICAgICAgIHNlbGYua25vd25CcmFuY2hlc1ticmFuY2hdID0gYnJhbmNoCisKKyAgICBkZWYgdXBkYXRlT3B0aW9uRGljdChzZWxmLCBkKToKKyAgICAgICAgb3B0aW9uX2tleXMgPSB7fQorICAgICAgICBpZiBzZWxmLmtlZXBSZXBvUGF0aDoKKyAgICAgICAgICAgIG9wdGlvbl9rZXlzWydrZWVwUmVwb1BhdGgnXSA9IDEKKworICAgICAgICBkWyJvcHRpb25zIl0gPSAnICcuam9pbihzb3J0ZWQob3B0aW9uX2tleXMua2V5cygpKSkKKworICAgIGRlZiByZWFkT3B0aW9ucyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5rZWVwUmVwb1BhdGggPSAoJ29wdGlvbnMnIGluIGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kICgna2VlcFJlcG9QYXRoJyBpbiBkWydvcHRpb25zJ10pKQorCisgICAgZGVmIGdpdFJlZkZvckJyYW5jaChzZWxmLCBicmFuY2gpOgorICAgICAgICBpZiBicmFuY2ggPT0gIm1haW4iOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVmUHJlZml4ICsgIm1hc3RlciIKKworICAgICAgICBpZiBsZW4oYnJhbmNoKSA8PSAwOgorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaAorCisgICAgICAgIHJldHVybiBzZWxmLnJlZlByZWZpeCArIHNlbGYucHJvamVjdE5hbWUgKyBicmFuY2gKKworICAgIGRlZiBnaXRDb21taXRCeVA0Q2hhbmdlKHNlbGYsIHJlZiwgY2hhbmdlKToKKyAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoImxvb2tpbmcgaW4gcmVmICIgKyByZWYgKyAiIGZvciBjaGFuZ2UgJXMgdXNpbmcgYmlzZWN0Li4uIiAlIGNoYW5nZSkKKworICAgICAgICBlYXJsaWVzdENvbW1pdCA9ICIiCisgICAgICAgIGxhdGVzdENvbW1pdCA9IHBhcnNlUmV2aXNpb24ocmVmKQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoInRyeWluZzogZWFybGllc3QgJXMgbGF0ZXN0ICVzIiAlIChlYXJsaWVzdENvbW1pdCwgbGF0ZXN0Q29tbWl0KSkKKyAgICAgICAgICAgIG5leHQgPSByZWFkX3BpcGUoImdpdCByZXYtbGlzdCAtLWJpc2VjdCAlcyAlcyIgJSAobGF0ZXN0Q29tbWl0LCBlYXJsaWVzdENvbW1pdCkpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGxlbihuZXh0KSA9PSAwOgorICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoImFyZ2giKQorICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAgICAgbG9nID0gZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KG5leHQpCisgICAgICAgICAgICBzZXR0aW5ncyA9IGV4dHJhY3RTZXR0aW5nc0dpdExvZyhsb2cpCisgICAgICAgICAgICBjdXJyZW50Q2hhbmdlID0gaW50KHNldHRpbmdzWydjaGFuZ2UnXSkKKyAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCgiY3VycmVudCBjaGFuZ2UgJXMiICUgY3VycmVudENoYW5nZSkKKworICAgICAgICAgICAgaWYgY3VycmVudENoYW5nZSA9PSBjaGFuZ2U6CisgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiZm91bmQgJXMiICUgbmV4dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV4dAorCisgICAgICAgICAgICBpZiBjdXJyZW50Q2hhbmdlIDwgY2hhbmdlOgorICAgICAgICAgICAgICAgIGVhcmxpZXN0Q29tbWl0ID0gIl4lcyIgJSBuZXh0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5leHQgPT0gbGF0ZXN0Q29tbWl0OgorICAgICAgICAgICAgICAgICAgICBkaWUoIkluZmluaXRlIGxvb3Agd2hpbGUgbG9va2luZyBpbiByZWYgJXMgZm9yIGNoYW5nZSAlcy4gQ2hlY2sgeW91ciBicmFuY2ggbWFwcGluZ3MiICUgKHJlZiwgY2hhbmdlKSkKKyAgICAgICAgICAgICAgICBsYXRlc3RDb21taXQgPSAiJXNeQCIgJSBuZXh0CisKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgaW1wb3J0TmV3QnJhbmNoKHNlbGYsIGJyYW5jaCwgbWF4Q2hhbmdlKToKKyAgICAgICAgIyBtYWtlIGZhc3QtaW1wb3J0IGZsdXNoIGFsbCBjaGFuZ2VzIHRvIGRpc2sgYW5kIHVwZGF0ZSB0aGUgcmVmcyB1c2luZyB0aGUgY2hlY2twb2ludAorICAgICAgICAjIGNvbW1hbmQgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgdGhlIGJyYW5jaCBwYXJlbnQgaW4gdGhlIGdpdCBoaXN0b3J5CisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJjaGVja3BvaW50XG5cbiIpOworICAgICAgICBzZWxmLmdpdFN0cmVhbS5mbHVzaCgpOworICAgICAgICBicmFuY2hQcmVmaXggPSBzZWxmLmRlcG90UGF0aHNbMF0gKyBicmFuY2ggKyAiLyIKKyAgICAgICAgcmFuZ2UgPSAiQDEsJXMiICUgbWF4Q2hhbmdlCisgICAgICAgICNwcmludCAicHJlZml4IiArIGJyYW5jaFByZWZpeAorICAgICAgICBjaGFuZ2VzID0gcDRDaGFuZ2VzRm9yUGF0aHMoW2JyYW5jaFByZWZpeF0sIHJhbmdlLCBzZWxmLmNoYW5nZXNfYmxvY2tfc2l6ZSkKKyAgICAgICAgaWYgbGVuKGNoYW5nZXMpIDw9IDA6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZmlyc3RDaGFuZ2UgPSBjaGFuZ2VzWzBdCisgICAgICAgICNwcmludCAiZmlyc3QgY2hhbmdlIGluIGJyYW5jaDogJXMiICUgZmlyc3RDaGFuZ2UKKyAgICAgICAgc291cmNlQnJhbmNoID0gc2VsZi5rbm93bkJyYW5jaGVzW2JyYW5jaF0KKyAgICAgICAgc291cmNlRGVwb3RQYXRoID0gc2VsZi5kZXBvdFBhdGhzWzBdICsgc291cmNlQnJhbmNoCisgICAgICAgIHNvdXJjZVJlZiA9IHNlbGYuZ2l0UmVmRm9yQnJhbmNoKHNvdXJjZUJyYW5jaCkKKyAgICAgICAgI3ByaW50ICJzb3VyY2UgIiArIHNvdXJjZUJyYW5jaAorCisgICAgICAgIGJyYW5jaFBhcmVudENoYW5nZSA9IGludChwNENtZChbImNoYW5nZXMiLCAiLW0iLCAiMSIsICIlcy4uLkAxLCVzIiAlIChzb3VyY2VEZXBvdFBhdGgsIGZpcnN0Q2hhbmdlKV0pWyJjaGFuZ2UiXSkKKyAgICAgICAgI3ByaW50ICJicmFuY2ggcGFyZW50OiAlcyIgJSBicmFuY2hQYXJlbnRDaGFuZ2UKKyAgICAgICAgZ2l0UGFyZW50ID0gc2VsZi5naXRDb21taXRCeVA0Q2hhbmdlKHNvdXJjZVJlZiwgYnJhbmNoUGFyZW50Q2hhbmdlKQorICAgICAgICBpZiBsZW4oZ2l0UGFyZW50KSA+IDA6CisgICAgICAgICAgICBzZWxmLmluaXRpYWxQYXJlbnRzW3NlbGYuZ2l0UmVmRm9yQnJhbmNoKGJyYW5jaCldID0gZ2l0UGFyZW50CisgICAgICAgICAgICAjcHJpbnQgInBhcmVudCBnaXQgY29tbWl0OiAlcyIgJSBnaXRQYXJlbnQKKworICAgICAgICBzZWxmLmltcG9ydENoYW5nZXMoY2hhbmdlcykKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzZWFyY2hQYXJlbnQoc2VsZiwgcGFyZW50LCBicmFuY2gsIHRhcmdldCk6CisgICAgICAgIHBhcmVudEZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIGJsb2IgaW4gcmVhZF9waXBlX2xpbmVzKFsiZ2l0IiwgInJldi1saXN0IiwgIi0tcmV2ZXJzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tbm8tbWVyZ2VzIiwgcGFyZW50XSk6CisgICAgICAgICAgICBibG9iID0gYmxvYi5zdHJpcCgpCisgICAgICAgICAgICBpZiBsZW4ocmVhZF9waXBlKFsiZ2l0IiwgImRpZmYtdHJlZSIsIGJsb2IsIHRhcmdldF0pKSA9PSAwOgorICAgICAgICAgICAgICAgIHBhcmVudEZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkZvdW5kIHBhcmVudCBvZiAlcyBpbiBjb21taXQgJXMiICUgKGJyYW5jaCwgYmxvYikpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgcGFyZW50Rm91bmQ6CisgICAgICAgICAgICByZXR1cm4gYmxvYgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBpbXBvcnRDaGFuZ2VzKHNlbGYsIGNoYW5nZXMsIG9yaWdpbl9yZXZpc2lvbj0wKToKKyAgICAgICAgY250ID0gMQorICAgICAgICBmb3IgY2hhbmdlIGluIGNoYW5nZXM6CisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHA0X2Rlc2NyaWJlKGNoYW5nZSkKKyAgICAgICAgICAgIHNlbGYudXBkYXRlT3B0aW9uRGljdChkZXNjcmlwdGlvbikKKworICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxySW1wb3J0aW5nIHJldmlzaW9uICVzICglcyUlKSIgJSAoY2hhbmdlLCBjbnQgKiAxMDAgLyBsZW4oY2hhbmdlcykpKQorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgY250ID0gY250ICsgMQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5kZXRlY3RCcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoZXMgPSBzZWxmLnNwbGl0RmlsZXNJbnRvQnJhbmNoZXMoZGVzY3JpcHRpb24pCisgICAgICAgICAgICAgICAgICAgIGZvciBicmFuY2ggaW4gYnJhbmNoZXMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyMgSEFDSyAgLS1od24KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaFByZWZpeCA9IHNlbGYuZGVwb3RQYXRoc1swXSArIGJyYW5jaCArICIvIgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5icmFuY2hQcmVmaXhlcyA9IFsgYnJhbmNoUHJlZml4IF0KKworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gIiIKKworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNGb3JDb21taXQgPSBicmFuY2hlc1ticmFuY2hdCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiYnJhbmNoIGlzICVzIiAlIGJyYW5jaCkKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVkQnJhbmNoZXMuYWRkKGJyYW5jaCkKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnJhbmNoIG5vdCBpbiBzZWxmLmNyZWF0ZWRCcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZWRCcmFuY2hlcy5hZGQoYnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHNlbGYua25vd25CcmFuY2hlc1ticmFuY2hdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGFyZW50ID09IGJyYW5jaDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsQnJhbmNoID0gc2VsZi5wcm9qZWN0TmFtZSArIGJyYW5jaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmdWxsQnJhbmNoIG5vdCBpbiBzZWxmLnA0QnJhbmNoZXNJbkdpdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiXG4gICAgSW1wb3J0aW5nIG5ldyBicmFuY2ggJXMiICUgZnVsbEJyYW5jaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmltcG9ydE5ld0JyYW5jaChicmFuY2gsIGNoYW5nZSAtIDEpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9ICIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wNEJyYW5jaGVzSW5HaXQuYXBwZW5kKGZ1bGxCcmFuY2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlxuICAgIFJlc3VtaW5nIHdpdGggY2hhbmdlICVzIiAlIGNoYW5nZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoInBhcmVudCBkZXRlcm1pbmVkIHRocm91Z2gga25vd24gYnJhbmNoZXM6ICVzIiAlIHBhcmVudCkKKworICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoID0gc2VsZi5naXRSZWZGb3JCcmFuY2goYnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZi5naXRSZWZGb3JCcmFuY2gocGFyZW50KQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoImxvb2tpbmcgZm9yIGluaXRpYWwgcGFyZW50IGZvciAlczsgY3VycmVudCBwYXJlbnQgaXMgJXMiICUgKGJyYW5jaCwgcGFyZW50KSkKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHBhcmVudCkgPT0gMCBhbmQgYnJhbmNoIGluIHNlbGYuaW5pdGlhbFBhcmVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZi5pbml0aWFsUGFyZW50c1ticmFuY2hdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHNlbGYuaW5pdGlhbFBhcmVudHNbYnJhbmNoXQorCisgICAgICAgICAgICAgICAgICAgICAgICBibG9iID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHBhcmVudCkgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBCcmFuY2ggPSAiJXMvJWQiICUgKHNlbGYudGVtcEJyYW5jaExvY2F0aW9uLCBjaGFuZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiQ3JlYXRpbmcgdGVtcG9yYXJ5IGJyYW5jaDogIiArIHRlbXBCcmFuY2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXQoZGVzY3JpcHRpb24sIGZpbGVzRm9yQ29tbWl0LCB0ZW1wQnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVtcEJyYW5jaGVzLmFwcGVuZCh0ZW1wQnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2twb2ludCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvYiA9IHNlbGYuc2VhcmNoUGFyZW50KHBhcmVudCwgYnJhbmNoLCB0ZW1wQnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYmxvYjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbW1pdChkZXNjcmlwdGlvbiwgZmlsZXNGb3JDb21taXQsIGJyYW5jaCwgYmxvYikKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiUGFyZW50IG9mICVzIG5vdCBmb3VuZC4gQ29tbWl0dGluZyBpbnRvIGhlYWQgb2YgJXMiICUgKGJyYW5jaCwgcGFyZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbW1pdChkZXNjcmlwdGlvbiwgZmlsZXNGb3JDb21taXQsIGJyYW5jaCwgcGFyZW50KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZpbGVzID0gc2VsZi5leHRyYWN0RmlsZXNGcm9tQ29tbWl0KGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbW1pdChkZXNjcmlwdGlvbiwgZmlsZXMsIHNlbGYuYnJhbmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxQYXJlbnQpCisgICAgICAgICAgICAgICAgICAgICMgb25seSBuZWVkZWQgb25jZSwgdG8gY29ubmVjdCB0byB0aGUgcHJldmlvdXMgY29tbWl0CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbFBhcmVudCA9ICIiCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBwcmludChzZWxmLmdpdEVycm9yLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZGVmIHN5bmNfb3JpZ2luX29ubHkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3luY1dpdGhPcmlnaW46CisgICAgICAgICAgICBzZWxmLmhhc09yaWdpbiA9IG9yaWdpblA0QnJhbmNoZXNFeGlzdCgpCisgICAgICAgICAgICBpZiBzZWxmLmhhc09yaWdpbjoKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdTeW5jaW5nIHdpdGggb3JpZ2luIGZpcnN0LCB1c2luZyAiZ2l0IGZldGNoIG9yaWdpbiInKQorICAgICAgICAgICAgICAgIHN5c3RlbSgiZ2l0IGZldGNoIG9yaWdpbiIpCisKKyAgICBkZWYgaW1wb3J0SGVhZFJldmlzaW9uKHNlbGYsIHJldmlzaW9uKToKKyAgICAgICAgcHJpbnQoIkRvaW5nIGluaXRpYWwgaW1wb3J0IG9mICVzIGZyb20gcmV2aXNpb24gJXMgaW50byAlcyIgJSAoJyAnLmpvaW4oc2VsZi5kZXBvdFBhdGhzKSwgcmV2aXNpb24sIHNlbGYuYnJhbmNoKSkKKworICAgICAgICBkZXRhaWxzID0ge30KKyAgICAgICAgZGV0YWlsc1sidXNlciJdID0gImdpdCBwZXJmb3JjZSBpbXBvcnQgdXNlciIKKyAgICAgICAgZGV0YWlsc1siZGVzYyJdID0gKCJJbml0aWFsIGltcG9ydCBvZiAlcyBmcm9tIHRoZSBzdGF0ZSBhdCByZXZpc2lvbiAlc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoJyAnLmpvaW4oc2VsZi5kZXBvdFBhdGhzKSwgcmV2aXNpb24pKQorICAgICAgICBkZXRhaWxzWyJjaGFuZ2UiXSA9IHJldmlzaW9uCisgICAgICAgIG5ld2VzdFJldmlzaW9uID0gMAorCisgICAgICAgIGZpbGVDbnQgPSAwCisgICAgICAgIGZpbGVBcmdzID0gWyIlcy4uLiVzIiAlIChwLHJldmlzaW9uKSBmb3IgcCBpbiBzZWxmLmRlcG90UGF0aHNdCisKKyAgICAgICAgZm9yIGluZm8gaW4gcDRDbWRMaXN0KFsiZmlsZXMiXSArIGZpbGVBcmdzKToKKworICAgICAgICAgICAgaWYgJ2NvZGUnIGluIGluZm8gYW5kIGluZm9bJ2NvZGUnXSA9PSAnZXJyb3InOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInA0IHJldHVybmVkIGFuIGVycm9yOiAlc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpbmZvWydkYXRhJ10pCisgICAgICAgICAgICAgICAgaWYgaW5mb1snZGF0YSddLmZpbmQoIm11c3QgcmVmZXIgdG8gY2xpZW50IikgPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiVGhpcyBwYXJ0aWN1bGFyIHA0IGVycm9yIGlzIG1pc2xlYWRpbmcuXG4iKQorICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJQZXJoYXBzIHRoZSBkZXBvdCBwYXRoIHdhcyBtaXNzcGVsbGVkLlxuIik7CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkRlcG90IHBhdGg6ICAlc1xuIiAlICIgIi5qb2luKHNlbGYuZGVwb3RQYXRocykpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgIGlmICdwNEV4aXRDb2RlJyBpbiBpbmZvOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInA0IGV4aXRjb2RlOiAlc1xuIiAlIGluZm9bJ3A0RXhpdENvZGUnXSkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisKKyAgICAgICAgICAgIGNoYW5nZSA9IGludChpbmZvWyJjaGFuZ2UiXSkKKyAgICAgICAgICAgIGlmIGNoYW5nZSA+IG5ld2VzdFJldmlzaW9uOgorICAgICAgICAgICAgICAgIG5ld2VzdFJldmlzaW9uID0gY2hhbmdlCisKKyAgICAgICAgICAgIGlmIGluZm9bImFjdGlvbiJdIGluIHNlbGYuZGVsZXRlX2FjdGlvbnM6CisgICAgICAgICAgICAgICAgIyBkb24ndCBpbmNyZWFzZSB0aGUgZmlsZSBjbnQsIG90aGVyd2lzZSBkZXRhaWxzWyJkZXBvdEZpbGUxMjMiXSB3aWxsIGhhdmUgZ2FwcyEKKyAgICAgICAgICAgICAgICAjZmlsZUNudCA9IGZpbGVDbnQgKyAxCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZm9yIHByb3AgaW4gWyJkZXBvdEZpbGUiLCAicmV2IiwgImFjdGlvbiIsICJ0eXBlIiBdOgorICAgICAgICAgICAgICAgIGRldGFpbHNbIiVzJXMiICUgKHByb3AsIGZpbGVDbnQpXSA9IGluZm9bcHJvcF0KKworICAgICAgICAgICAgZmlsZUNudCA9IGZpbGVDbnQgKyAxCisKKyAgICAgICAgZGV0YWlsc1siY2hhbmdlIl0gPSBuZXdlc3RSZXZpc2lvbgorCisgICAgICAgICMgVXNlIHRpbWUgZnJvbSB0b3AtbW9zdCBjaGFuZ2Ugc28gdGhhdCBhbGwgZ2l0IHA0IGNsb25lcyBvZgorICAgICAgICAjIHRoZSBzYW1lIHA0IHJlcG8gaGF2ZSB0aGUgc2FtZSBjb21taXQgU0hBMXMuCisgICAgICAgIHJlcyA9IHA0X2Rlc2NyaWJlKG5ld2VzdFJldmlzaW9uKQorICAgICAgICBkZXRhaWxzWyJ0aW1lIl0gPSByZXNbInRpbWUiXQorCisgICAgICAgIHNlbGYudXBkYXRlT3B0aW9uRGljdChkZXRhaWxzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNvbW1pdChkZXRhaWxzLCBzZWxmLmV4dHJhY3RGaWxlc0Zyb21Db21taXQoZGV0YWlscyksIHNlbGYuYnJhbmNoKQorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICBwcmludCgiSU8gZXJyb3Igd2l0aCBnaXQgZmFzdC1pbXBvcnQuIElzIHlvdXIgZ2l0IHZlcnNpb24gcmVjZW50IGVub3VnaD8iKQorICAgICAgICAgICAgcHJpbnQoIklPIGVycm9yIGRldGFpbHM6IHt9Ii5mb3JtYXQoZXJyKSkKKyAgICAgICAgICAgIHByaW50KHNlbGYuZ2l0RXJyb3IucmVhZCgpKQorCisKKyAgICBkZWYgaW1wb3J0UmV2aXNpb25zKHNlbGYsIGFyZ3MsIGJyYW5jaF9hcmdfZ2l2ZW4pOgorICAgICAgICBjaGFuZ2VzID0gW10KKworICAgICAgICBpZiBsZW4oc2VsZi5jaGFuZ2VzRmlsZSkgPiAwOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuY2hhbmdlc0ZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgY2hhbmdlU2V0ID0gc2V0KCkKKyAgICAgICAgICAgIGZvciBsaW5lIGluIG91dHB1dDoKKyAgICAgICAgICAgICAgICBjaGFuZ2VTZXQuYWRkKGludChsaW5lKSkKKworICAgICAgICAgICAgZm9yIGNoYW5nZSBpbiBjaGFuZ2VTZXQ6CisgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hhbmdlKQorCisgICAgICAgICAgICBjaGFuZ2VzLnNvcnQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBjYXRjaCAiZ2l0IHA0IHN5bmMiIHdpdGggbm8gbmV3IGJyYW5jaGVzLCBpbiBhIHJlcG8gdGhhdAorICAgICAgICAgICAgIyBkb2VzIG5vdCBoYXZlIGFueSBleGlzdGluZyBwNCBicmFuY2hlcworICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYucDRCcmFuY2hlc0luR2l0OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBQNENvbW1hbmRFeGNlcHRpb24oIk5vIHJlbW90ZSBwNCBicmFuY2hlcy4gIFBlcmhhcHMgeW91IG5ldmVyIGRpZCBcImdpdCBwNCBjbG9uZVwiIGluIGhlcmUuIikKKworICAgICAgICAgICAgICAgICMgVGhlIGRlZmF1bHQgYnJhbmNoIGlzIG1hc3RlciwgdW5sZXNzIC0tYnJhbmNoIGlzIHVzZWQgdG8KKyAgICAgICAgICAgICAgICAjIHNwZWNpZnkgc29tZXRoaW5nIGVsc2UuICBNYWtlIHN1cmUgaXQgZXhpc3RzLCBvciBjb21wbGFpbgorICAgICAgICAgICAgICAgICMgbmljZWx5IGFib3V0IGhvdyB0byB1c2UgLS1icmFuY2guCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZGV0ZWN0QnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBicmFuY2hfZXhpc3RzKHNlbGYuYnJhbmNoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJyYW5jaF9hcmdfZ2l2ZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUDRDb21tYW5kRXhjZXB0aW9uKCJFcnJvcjogYnJhbmNoICVzIGRvZXMgbm90IGV4aXN0LiIgJSBzZWxmLmJyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUDRDb21tYW5kRXhjZXB0aW9uKCJFcnJvcjogbm8gYnJhbmNoICVzOyBwZXJoYXBzIHNwZWNpZnkgb25lIHdpdGggLS1icmFuY2guIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnJhbmNoKQorCisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoIkdldHRpbmcgcDQgY2hhbmdlcyBmb3IgJXMuLi4lcyIgJSAoJywgJy5qb2luKHNlbGYuZGVwb3RQYXRocyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VSYW5nZSkpCisgICAgICAgICAgICBjaGFuZ2VzID0gcDRDaGFuZ2VzRm9yUGF0aHMoc2VsZi5kZXBvdFBhdGhzLCBzZWxmLmNoYW5nZVJhbmdlLCBzZWxmLmNoYW5nZXNfYmxvY2tfc2l6ZSkKKworICAgICAgICAgICAgaWYgbGVuKHNlbGYubWF4Q2hhbmdlcykgPiAwOgorICAgICAgICAgICAgICAgIGNoYW5nZXMgPSBjaGFuZ2VzWzptaW4oaW50KHNlbGYubWF4Q2hhbmdlcyksIGxlbihjaGFuZ2VzKSldCisKKyAgICAgICAgaWYgbGVuKGNoYW5nZXMpID09IDA6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgcHJpbnQoIk5vIGNoYW5nZXMgdG8gaW1wb3J0ISIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQgYW5kIG5vdCBzZWxmLmRldGVjdEJyYW5jaGVzOgorICAgICAgICAgICAgICAgIHByaW50KCJJbXBvcnQgZGVzdGluYXRpb246ICVzIiAlIHNlbGYuYnJhbmNoKQorCisgICAgICAgICAgICBzZWxmLnVwZGF0ZWRCcmFuY2hlcyA9IHNldCgpCisKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRldGVjdEJyYW5jaGVzOgorICAgICAgICAgICAgICAgIGlmIGFyZ3M6CisgICAgICAgICAgICAgICAgICAgICMgc3RhcnQgYSBuZXcgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbFBhcmVudCA9ICIiCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBidWlsZCBvbiBhIHByZXZpb3VzIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbFBhcmVudCA9IHBhcnNlUmV2aXNpb24oc2VsZi5icmFuY2gpCisKKyAgICAgICAgICAgIHNlbGYuaW1wb3J0Q2hhbmdlcyhjaGFuZ2VzKQorCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgcHJpbnQoIiIpCisgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYudXBkYXRlZEJyYW5jaGVzKSA+IDA6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlVwZGF0ZWQgYnJhbmNoZXM6ICIpCisgICAgICAgICAgICAgICAgICAgIGZvciBiIGluIHNlbGYudXBkYXRlZEJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiJXMgIiAlIGIpCisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKworICAgIGRlZiBvcGVuU3RyZWFtcyhzZWxmKToKKyAgICAgICAgc2VsZi5pbXBvcnRQcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihbImdpdCIsICJmYXN0LWltcG9ydCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpOworICAgICAgICBzZWxmLmdpdE91dHB1dCA9IHNlbGYuaW1wb3J0UHJvY2Vzcy5zdGRvdXQKKyAgICAgICAgc2VsZi5naXRTdHJlYW0gPSBzZWxmLmltcG9ydFByb2Nlc3Muc3RkaW4KKyAgICAgICAgc2VsZi5naXRFcnJvciA9IHNlbGYuaW1wb3J0UHJvY2Vzcy5zdGRlcnIKKworICAgICAgICBpZiBieXRlcyBpcyBub3Qgc3RyOgorICAgICAgICAgICAgIyBXcmFwIGdpdFN0cmVhbS53cml0ZSgpIHNvIHRoYXQgaXQgY2FuIGJlIGNhbGxlZCB1c2luZyBgc3RyYCBhcmd1bWVudHMKKyAgICAgICAgICAgIGRlZiBtYWtlX2VuY29kZWRfd3JpdGUod3JpdGUpOgorICAgICAgICAgICAgICAgIGRlZiBlbmNvZGVkX3dyaXRlKHMpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGUocy5lbmNvZGUoKSBpZiBpc2luc3RhbmNlKHMsIHN0cikgZWxzZSBzKQorICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkX3dyaXRlCisKKyAgICAgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlID0gbWFrZV9lbmNvZGVkX3dyaXRlKHNlbGYuZ2l0U3RyZWFtLndyaXRlKQorCisgICAgZGVmIGNsb3NlU3RyZWFtcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5naXRTdHJlYW0gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmdpdFN0cmVhbS5jbG9zZSgpCisgICAgICAgIGlmIHNlbGYuaW1wb3J0UHJvY2Vzcy53YWl0KCkgIT0gMDoKKyAgICAgICAgICAgIGRpZSgiZmFzdC1pbXBvcnQgZmFpbGVkOiAlcyIgJSBzZWxmLmdpdEVycm9yLnJlYWQoKSkKKyAgICAgICAgc2VsZi5naXRPdXRwdXQuY2xvc2UoKQorICAgICAgICBzZWxmLmdpdEVycm9yLmNsb3NlKCkKKyAgICAgICAgc2VsZi5naXRTdHJlYW0gPSBOb25lCisKKyAgICBkZWYgcnVuKHNlbGYsIGFyZ3MpOgorICAgICAgICBpZiBzZWxmLmltcG9ydEludG9SZW1vdGVzOgorICAgICAgICAgICAgc2VsZi5yZWZQcmVmaXggPSAicmVmcy9yZW1vdGVzL3A0LyIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucmVmUHJlZml4ID0gInJlZnMvaGVhZHMvcDQvIgorCisgICAgICAgIHNlbGYuc3luY19vcmlnaW5fb25seSgpCisKKyAgICAgICAgYnJhbmNoX2FyZ19naXZlbiA9IGJvb2woc2VsZi5icmFuY2gpCisgICAgICAgIGlmIGxlbihzZWxmLmJyYW5jaCkgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuYnJhbmNoID0gc2VsZi5yZWZQcmVmaXggKyAibWFzdGVyIgorICAgICAgICAgICAgaWYgZ2l0QnJhbmNoRXhpc3RzKCJyZWZzL2hlYWRzL3A0IikgYW5kIHNlbGYuaW1wb3J0SW50b1JlbW90ZXM6CisgICAgICAgICAgICAgICAgc3lzdGVtKCJnaXQgdXBkYXRlLXJlZiAlcyByZWZzL2hlYWRzL3A0IiAlIHNlbGYuYnJhbmNoKQorICAgICAgICAgICAgICAgIHN5c3RlbSgiZ2l0IGJyYW5jaCAtRCBwNCIpCisKKyAgICAgICAgIyBhY2NlcHQgZWl0aGVyIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uLCBvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICAgICAgICBpZiBzZWxmLnVzZUNsaWVudFNwZWM6CisgICAgICAgICAgICAjIHdpbGwgdXNlIHRoaXMgYWZ0ZXIgY2xvbmUgdG8gc2V0IHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgc2VsZi51c2VDbGllbnRTcGVjX2Zyb21fb3B0aW9ucyA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGdpdENvbmZpZ0Jvb2woImdpdC1wNC51c2VjbGllbnRzcGVjIik6CisgICAgICAgICAgICAgICAgc2VsZi51c2VDbGllbnRTcGVjID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLnVzZUNsaWVudFNwZWM6CisgICAgICAgICAgICBzZWxmLmNsaWVudFNwZWNEaXJzID0gZ2V0Q2xpZW50U3BlYygpCisKKyAgICAgICAgIyBUT0RPOiBzaG91bGQgYWx3YXlzIGxvb2sgYXQgcHJldmlvdXMgY29tbWl0cywKKyAgICAgICAgIyBtZXJnZSB3aXRoIHByZXZpb3VzIGltcG9ydHMsIGlmIHBvc3NpYmxlLgorICAgICAgICBpZiBhcmdzID09IFtdOgorICAgICAgICAgICAgaWYgc2VsZi5oYXNPcmlnaW46CisgICAgICAgICAgICAgICAgY3JlYXRlT3JVcGRhdGVCcmFuY2hlc0Zyb21PcmlnaW4oc2VsZi5yZWZQcmVmaXgsIHNlbGYuc2lsZW50KQorCisgICAgICAgICAgICAjIGJyYW5jaGVzIGhvbGRzIG1hcHBpbmcgZnJvbSBicmFuY2ggbmFtZSB0byBzaGExCisgICAgICAgICAgICBicmFuY2hlcyA9IHA0QnJhbmNoZXNJbkdpdChzZWxmLmltcG9ydEludG9SZW1vdGVzKQorCisgICAgICAgICAgICAjIHJlc3RyaWN0IHRvIGp1c3QgdGhpcyBvbmUsIGRpc2FibGluZyBkZXRlY3QtYnJhbmNoZXMKKyAgICAgICAgICAgIGlmIGJyYW5jaF9hcmdfZ2l2ZW46CisgICAgICAgICAgICAgICAgc2hvcnQgPSBzZWxmLmJyYW5jaC5zcGxpdCgiLyIpWy0xXQorICAgICAgICAgICAgICAgIGlmIHNob3J0IGluIGJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnA0QnJhbmNoZXNJbkdpdCA9IFsgc2hvcnQgXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnA0QnJhbmNoZXNJbkdpdCA9IGJyYW5jaGVzLmtleXMoKQorCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5wNEJyYW5jaGVzSW5HaXQpID4gMToKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJJbXBvcnRpbmcgZnJvbS9pbnRvIG11bHRpcGxlIGJyYW5jaGVzIikKKyAgICAgICAgICAgICAgICBzZWxmLmRldGVjdEJyYW5jaGVzID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciBicmFuY2ggaW4gYnJhbmNoZXMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxQYXJlbnRzW3NlbGYucmVmUHJlZml4ICsgYnJhbmNoXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaGVzW2JyYW5jaF0KKworICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCJicmFuY2hlczogJXMiICUgc2VsZi5wNEJyYW5jaGVzSW5HaXQpCisKKyAgICAgICAgICAgIHA0Q2hhbmdlID0gMAorICAgICAgICAgICAgZm9yIGJyYW5jaCBpbiBzZWxmLnA0QnJhbmNoZXNJbkdpdDoKKyAgICAgICAgICAgICAgICBsb2dNc2cgPSAgZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KHNlbGYucmVmUHJlZml4ICsgYnJhbmNoKQorCisgICAgICAgICAgICAgICAgc2V0dGluZ3MgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2cobG9nTXNnKQorCisgICAgICAgICAgICAgICAgc2VsZi5yZWFkT3B0aW9ucyhzZXR0aW5ncykKKyAgICAgICAgICAgICAgICBpZiAoJ2RlcG90LXBhdGhzJyBpbiBzZXR0aW5ncworICAgICAgICAgICAgICAgICAgICBhbmQgJ2NoYW5nZScgaW4gc2V0dGluZ3MpOgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgPSBpbnQoc2V0dGluZ3NbJ2NoYW5nZSddKSArIDEKKyAgICAgICAgICAgICAgICAgICAgcDRDaGFuZ2UgPSBtYXgocDRDaGFuZ2UsIGNoYW5nZSkKKworICAgICAgICAgICAgICAgICAgICBkZXBvdFBhdGhzID0gc29ydGVkKHNldHRpbmdzWydkZXBvdC1wYXRocyddKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnByZXZpb3VzRGVwb3RQYXRocyA9PSBbXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJldmlvdXNEZXBvdFBhdGhzID0gZGVwb3RQYXRocworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChwcmV2LCBjdXIpIGluIHppcChzZWxmLnByZXZpb3VzRGVwb3RQYXRocywgZGVwb3RQYXRocyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldl9saXN0ID0gcHJldi5zcGxpdCgiLyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2xpc3QgPSBjdXIuc3BsaXQoIi8iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIG1pbihsZW4oY3VyX2xpc3QpLCBsZW4ocHJldl9saXN0KSkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJfbGlzdFtpXSAhPSBwcmV2X2xpc3RbaV06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRocy5hcHBlbmQgKCIvIi5qb2luKGN1cl9saXN0WzppICsgMV0pKQorCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByZXZpb3VzRGVwb3RQYXRocyA9IHBhdGhzCisKKyAgICAgICAgICAgIGlmIHA0Q2hhbmdlID4gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmRlcG90UGF0aHMgPSBzb3J0ZWQoc2VsZi5wcmV2aW91c0RlcG90UGF0aHMpCisgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VSYW5nZSA9ICJAJXMsI2hlYWQiICUgcDRDaGFuZ2UKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQgYW5kIG5vdCBzZWxmLmRldGVjdEJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiUGVyZm9ybWluZyBpbmNyZW1lbnRhbCBpbXBvcnQgaW50byAlcyBnaXQgYnJhbmNoIiAlIHNlbGYuYnJhbmNoKQorCisgICAgICAgICMgYWNjZXB0IG11bHRpcGxlIHJlZiBuYW1lIGFiYnJldmlhdGlvbnM6CisgICAgICAgICMgICAgcmVmcy9mb28vYmFyL2JyYW5jaCAtPiB1c2UgaXQgZXhhY3RseQorICAgICAgICAjICAgIHA0L2JyYW5jaCAtPiBwcmVwZW5kIHJlZnMvcmVtb3Rlcy8gb3IgcmVmcy9oZWFkcy8KKyAgICAgICAgIyAgICBicmFuY2ggLT4gcHJlcGVuZCByZWZzL3JlbW90ZXMvcDQvIG9yIHJlZnMvaGVhZHMvcDQvCisgICAgICAgIGlmIG5vdCBzZWxmLmJyYW5jaC5zdGFydHN3aXRoKCJyZWZzLyIpOgorICAgICAgICAgICAgaWYgc2VsZi5pbXBvcnRJbnRvUmVtb3RlczoKKyAgICAgICAgICAgICAgICBwcmVwZW5kID0gInJlZnMvcmVtb3Rlcy8iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByZXBlbmQgPSAicmVmcy9oZWFkcy8iCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5icmFuY2guc3RhcnRzd2l0aCgicDQvIik6CisgICAgICAgICAgICAgICAgcHJlcGVuZCArPSAicDQvIgorICAgICAgICAgICAgc2VsZi5icmFuY2ggPSBwcmVwZW5kICsgc2VsZi5icmFuY2gKKworICAgICAgICBpZiBsZW4oYXJncykgPT0gMCBhbmQgc2VsZi5kZXBvdFBhdGhzOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgIHByaW50KCJEZXBvdCBwYXRoczogJXMiICUgJyAnLmpvaW4oc2VsZi5kZXBvdFBhdGhzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYuZGVwb3RQYXRocyBhbmQgc2VsZi5kZXBvdFBhdGhzICE9IGFyZ3M6CisgICAgICAgICAgICAgICAgcHJpbnQoInByZXZpb3VzIGltcG9ydCB1c2VkIGRlcG90IHBhdGggJXMgYW5kIG5vdyAlcyB3YXMgc3BlY2lmaWVkLiAiCisgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGRvZXNuJ3Qgd29yayEiICUgKCcgJy5qb2luIChzZWxmLmRlcG90UGF0aHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcuam9pbiAoYXJncykpKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgICAgIHNlbGYuZGVwb3RQYXRocyA9IHNvcnRlZChhcmdzKQorCisgICAgICAgIHJldmlzaW9uID0gIiIKKyAgICAgICAgc2VsZi51c2VycyA9IHt9CisKKyAgICAgICAgIyBNYWtlIHN1cmUgbm8gcmV2aXNpb24gc3BlY2lmaWVycyBhcmUgdXNlZCB3aGVuIC0tY2hhbmdlc2ZpbGUKKyAgICAgICAgIyBpcyBzcGVjaWZpZWQuCisgICAgICAgIGJhZF9jaGFuZ2VzZmlsZSA9IEZhbHNlCisgICAgICAgIGlmIGxlbihzZWxmLmNoYW5nZXNGaWxlKSA+IDA6CisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLmRlcG90UGF0aHM6CisgICAgICAgICAgICAgICAgaWYgcC5maW5kKCJAIikgPj0gMCBvciBwLmZpbmQoIiMiKSA+PSAwOgorICAgICAgICAgICAgICAgICAgICBiYWRfY2hhbmdlc2ZpbGUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIGJhZF9jaGFuZ2VzZmlsZToKKyAgICAgICAgICAgIGRpZSgiT3B0aW9uIC0tY2hhbmdlc2ZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcmV2aXNpb24gc3BlY2lmaWVycyIpCisKKyAgICAgICAgbmV3UGF0aHMgPSBbXQorICAgICAgICBmb3IgcCBpbiBzZWxmLmRlcG90UGF0aHM6CisgICAgICAgICAgICBpZiBwLmZpbmQoIkAiKSAhPSAtMToKKyAgICAgICAgICAgICAgICBhdElkeCA9IHAuaW5kZXgoIkAiKQorICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlUmFuZ2UgPSBwW2F0SWR4Ol0KKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNoYW5nZVJhbmdlID09ICJAYWxsIjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VSYW5nZSA9ICIiCisgICAgICAgICAgICAgICAgZWxpZiAnLCcgbm90IGluIHNlbGYuY2hhbmdlUmFuZ2U6CisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uID0gc2VsZi5jaGFuZ2VSYW5nZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVJhbmdlID0gIiIKKyAgICAgICAgICAgICAgICBwID0gcFs6YXRJZHhdCisgICAgICAgICAgICBlbGlmIHAuZmluZCgiIyIpICE9IC0xOgorICAgICAgICAgICAgICAgIGhhc2hJZHggPSBwLmluZGV4KCIjIikKKyAgICAgICAgICAgICAgICByZXZpc2lvbiA9IHBbaGFzaElkeDpdCisgICAgICAgICAgICAgICAgcCA9IHBbOmhhc2hJZHhdCisgICAgICAgICAgICBlbGlmIHNlbGYucHJldmlvdXNEZXBvdFBhdGhzID09IFtdOgorICAgICAgICAgICAgICAgICMgcGF5IGF0dGVudGlvbiB0byBjaGFuZ2VzZmlsZSwgaWYgZ2l2ZW4sIGVsc2UgaW1wb3J0CisgICAgICAgICAgICAgICAgIyB0aGUgZW50aXJlIHA0IHRyZWUgYXQgdGhlIGhlYWQgcmV2aXNpb24KKyAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5jaGFuZ2VzRmlsZSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24gPSAiI2hlYWQiCisKKyAgICAgICAgICAgIHAgPSByZS5zdWIgKCJcLlwuXC4kIiwgIiIsIHApCisgICAgICAgICAgICBpZiBub3QgcC5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgIHAgKz0gIi8iCisKKyAgICAgICAgICAgIG5ld1BhdGhzLmFwcGVuZChwKQorCisgICAgICAgIHNlbGYuZGVwb3RQYXRocyA9IG5ld1BhdGhzCisKKyAgICAgICAgIyAtLWRldGVjdC1icmFuY2hlcyBtYXkgY2hhbmdlIHRoaXMgZm9yIGVhY2ggYnJhbmNoCisgICAgICAgIHNlbGYuYnJhbmNoUHJlZml4ZXMgPSBzZWxmLmRlcG90UGF0aHMKKworICAgICAgICBzZWxmLmxvYWRVc2VyTWFwRnJvbUNhY2hlKCkKKyAgICAgICAgc2VsZi5sYWJlbHMgPSB7fQorICAgICAgICBpZiBzZWxmLmRldGVjdExhYmVsczoKKyAgICAgICAgICAgIHNlbGYuZ2V0TGFiZWxzKCk7CisKKyAgICAgICAgaWYgc2VsZi5kZXRlY3RCcmFuY2hlczoKKyAgICAgICAgICAgICMjIEZJWE1FIC0gd2hhdCdzIGEgUDQgcHJvamVjdE5hbWUgPworICAgICAgICAgICAgc2VsZi5wcm9qZWN0TmFtZSA9IHNlbGYuZ3Vlc3NQcm9qZWN0TmFtZSgpCisKKyAgICAgICAgICAgIGlmIHNlbGYuaGFzT3JpZ2luOgorICAgICAgICAgICAgICAgIHNlbGYuZ2V0QnJhbmNoTWFwcGluZ0Zyb21HaXRCcmFuY2hlcygpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZ2V0QnJhbmNoTWFwcGluZygpCisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoInA0LWdpdCBicmFuY2hlczogJXMiICUgc2VsZi5wNEJyYW5jaGVzSW5HaXQpCisgICAgICAgICAgICAgICAgcHJpbnQoImluaXRpYWwgcGFyZW50czogJXMiICUgc2VsZi5pbml0aWFsUGFyZW50cykKKyAgICAgICAgICAgIGZvciBiIGluIHNlbGYucDRCcmFuY2hlc0luR2l0OgorICAgICAgICAgICAgICAgIGlmIGIgIT0gIm1hc3RlciI6CisKKyAgICAgICAgICAgICAgICAgICAgIyMgRklYTUUKKyAgICAgICAgICAgICAgICAgICAgYiA9IGJbbGVuKHNlbGYucHJvamVjdE5hbWUpOl0KKyAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZWRCcmFuY2hlcy5hZGQoYikKKworICAgICAgICBwNF9jaGVja19hY2Nlc3MoKQorCisgICAgICAgIHNlbGYub3BlblN0cmVhbXMoKQorCisgICAgICAgIGVyciA9IE5vbmUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiByZXZpc2lvbjoKKyAgICAgICAgICAgICAgICBzZWxmLmltcG9ydEhlYWRSZXZpc2lvbihyZXZpc2lvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRSZXZpc2lvbnMoYXJncywgYnJhbmNoX2FyZ19naXZlbikKKworICAgICAgICAgICAgaWYgZ2l0Q29uZmlnQm9vbCgiZ2l0LXA0LmltcG9ydExhYmVscyIpOgorICAgICAgICAgICAgICAgIHNlbGYuaW1wb3J0TGFiZWxzID0gVHJ1ZQorCisgICAgICAgICAgICBpZiBzZWxmLmltcG9ydExhYmVsczoKKyAgICAgICAgICAgICAgICBwNExhYmVscyA9IGdldFA0TGFiZWxzKHNlbGYuZGVwb3RQYXRocykKKyAgICAgICAgICAgICAgICBnaXRUYWdzID0gZ2V0R2l0VGFncygpCisKKyAgICAgICAgICAgICAgICBtaXNzaW5nUDRMYWJlbHMgPSBwNExhYmVscyAtIGdpdFRhZ3MKKyAgICAgICAgICAgICAgICBzZWxmLmltcG9ydFA0TGFiZWxzKHNlbGYuZ2l0U3RyZWFtLCBtaXNzaW5nUDRMYWJlbHMpCisKKyAgICAgICAgZXhjZXB0IFA0Q29tbWFuZEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgZXJyID0gZQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNsb3NlU3RyZWFtcygpCisKKyAgICAgICAgaWYgZXJyOgorICAgICAgICAgICAgZGllKHN0cihlcnIpKQorCisgICAgICAgICMgQ2xlYW51cCB0ZW1wb3JhcnkgYnJhbmNoZXMgY3JlYXRlZCBkdXJpbmcgaW1wb3J0CisgICAgICAgIGlmIHNlbGYudGVtcEJyYW5jaGVzICE9IFtdOgorICAgICAgICAgICAgZm9yIGJyYW5jaCBpbiBzZWxmLnRlbXBCcmFuY2hlczoKKyAgICAgICAgICAgICAgICByZWFkX3BpcGUoImdpdCB1cGRhdGUtcmVmIC1kICVzIiAlIGJyYW5jaCkKKyAgICAgICAgICAgIG9zLnJtZGlyKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgiR0lUX0RJUiIsICIuZ2l0IiksIHNlbGYudGVtcEJyYW5jaExvY2F0aW9uKSkKKworICAgICAgICAjIENyZWF0ZSBhIHN5bWJvbGljIHJlZiBwNC9IRUFEIHBvaW50aW5nIHRvIHA0LzxicmFuY2g+IHRvIGFsbG93CisgICAgICAgICMgYSBjb252ZW5pZW50IHNob3J0Y3V0IHJlZm5hbWUgInA0Ii4KKyAgICAgICAgaWYgc2VsZi5pbXBvcnRJbnRvUmVtb3RlczoKKyAgICAgICAgICAgIGhlYWRfcmVmID0gc2VsZi5yZWZQcmVmaXggKyAiSEVBRCIKKyAgICAgICAgICAgIGlmIG5vdCBnaXRCcmFuY2hFeGlzdHMoaGVhZF9yZWYpIGFuZCBnaXRCcmFuY2hFeGlzdHMoc2VsZi5icmFuY2gpOgorICAgICAgICAgICAgICAgIHN5c3RlbShbImdpdCIsICJzeW1ib2xpYy1yZWYiLCBoZWFkX3JlZiwgc2VsZi5icmFuY2hdKQorCisgICAgICAgIHJldHVybiBUcnVlCisKK2NsYXNzIFA0UmViYXNlKENvbW1hbmQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBbCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0taW1wb3J0LWxhYmVscyIsIGRlc3Q9ImltcG9ydExhYmVscyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICBdCisgICAgICAgIHNlbGYuaW1wb3J0TGFiZWxzID0gRmFsc2UKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICgiRmV0Y2hlcyB0aGUgbGF0ZXN0IHJldmlzaW9uIGZyb20gcGVyZm9yY2UgYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJyZWJhc2VzIHRoZSBjdXJyZW50IHdvcmsgKGJyYW5jaCkgYWdhaW5zdCBpdCIpCisKKyAgICBkZWYgcnVuKHNlbGYsIGFyZ3MpOgorICAgICAgICBzeW5jID0gUDRTeW5jKCkKKyAgICAgICAgc3luYy5pbXBvcnRMYWJlbHMgPSBzZWxmLmltcG9ydExhYmVscworICAgICAgICBzeW5jLnJ1bihbXSkKKworICAgICAgICByZXR1cm4gc2VsZi5yZWJhc2UoKQorCisgICAgZGVmIHJlYmFzZShzZWxmKToKKyAgICAgICAgaWYgb3Muc3lzdGVtKCJnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCIpICE9IDA6CisgICAgICAgICAgICBkaWUoIlNvbWUgZmlsZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSBhcmUgbW9kaWZpZWQgYW5kIGRpZmZlcmVudCB0aGFuIHdoYXQgaXMgaW4geW91ciBpbmRleC4gWW91IGNhbiB1c2UgZ2l0IHVwZGF0ZS1pbmRleCA8ZmlsZW5hbWU+IHRvIGJyaW5nIHRoZSBpbmRleCB1cCB0byBkYXRlIG9yIHN0YXNoIGF3YXkgYWxsIHlvdXIgY2hhbmdlcyB3aXRoIGdpdCBzdGFzaC4iKTsKKyAgICAgICAgaWYgbGVuKHJlYWRfcGlwZSgiZ2l0IGRpZmYtaW5kZXggSEVBRCAtLSIpKSA+IDA6CisgICAgICAgICAgICBkaWUoIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMuIFBsZWFzZSBjb21taXQgdGhlbSBiZWZvcmUgcmViYXNpbmcgb3Igc3Rhc2ggdGhlbSBhd2F5IHdpdGggZ2l0IHN0YXNoLiIpOworCisgICAgICAgIFt1cHN0cmVhbSwgc2V0dGluZ3NdID0gZmluZFVwc3RyZWFtQnJhbmNoUG9pbnQoKQorICAgICAgICBpZiBsZW4odXBzdHJlYW0pID09IDA6CisgICAgICAgICAgICBkaWUoIkNhbm5vdCBmaW5kIHVwc3RyZWFtIGJyYW5jaHBvaW50IGZvciByZWJhc2UiKQorCisgICAgICAgICMgdGhlIGJyYW5jaHBvaW50IG1heSBiZSBwNC9mb29+Mywgc28gc3RyaXAgb2ZmIHRoZSBwYXJlbnQKKyAgICAgICAgdXBzdHJlYW0gPSByZS5zdWIoIn5bMC05XSskIiwgIiIsIHVwc3RyZWFtKQorCisgICAgICAgIHByaW50KCJSZWJhc2luZyB0aGUgY3VycmVudCBicmFuY2ggb250byAlcyIgJSB1cHN0cmVhbSkKKyAgICAgICAgb2xkSGVhZCA9IHJlYWRfcGlwZSgiZ2l0IHJldi1wYXJzZSBIRUFEIikuc3RyaXAoKQorICAgICAgICBzeXN0ZW0oImdpdCByZWJhc2UgJXMiICUgdXBzdHJlYW0pCisgICAgICAgIHN5c3RlbSgiZ2l0IGRpZmYtdHJlZSAtLXN0YXQgLS1zdW1tYXJ5IC1NICVzIEhFQUQgLS0iICUgb2xkSGVhZCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgUDRDbG9uZShQNFN5bmMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgUDRTeW5jLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSAiQ3JlYXRlcyBhIG5ldyBnaXQgcmVwb3NpdG9yeSBhbmQgaW1wb3J0cyBmcm9tIFBlcmZvcmNlIGludG8gaXQiCisgICAgICAgIHNlbGYudXNhZ2UgPSAidXNhZ2U6ICVwcm9nIFtvcHRpb25zXSAvL2RlcG90L3BhdGhbQHJldlJhbmdlXSIKKyAgICAgICAgc2VsZi5vcHRpb25zICs9IFsKKyAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWRlc3RpbmF0aW9uIiwgZGVzdD0iY2xvbmVEZXN0aW5hdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlJywgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0id2hlcmUgdG8gbGVhdmUgcmVzdWx0IG9mIHRoZSBjbG9uZSIpLAorICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tYmFyZSIsIGRlc3Q9ImNsb25lQmFyZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlKSwKKyAgICAgICAgXQorICAgICAgICBzZWxmLmNsb25lRGVzdGluYXRpb24gPSBOb25lCisgICAgICAgIHNlbGYubmVlZHNHaXQgPSBGYWxzZQorICAgICAgICBzZWxmLmNsb25lQmFyZSA9IEZhbHNlCisKKyAgICBkZWYgZGVmYXVsdERlc3RpbmF0aW9uKHNlbGYsIGFyZ3MpOgorICAgICAgICAjIyBUT0RPOiB1c2UgY29tbW9uIHByZWZpeCBvZiBhcmdzPworICAgICAgICBkZXBvdFBhdGggPSBhcmdzWzBdCisgICAgICAgIGRlcG90RGlyID0gcmUuc3ViKCIoQFteQF0qKSQiLCAiIiwgZGVwb3RQYXRoKQorICAgICAgICBkZXBvdERpciA9IHJlLnN1YigiKCNbXiNdKikkIiwgIiIsIGRlcG90RGlyKQorICAgICAgICBkZXBvdERpciA9IHJlLnN1YihyIlwuXC5cLiQiLCAiIiwgZGVwb3REaXIpCisgICAgICAgIGRlcG90RGlyID0gcmUuc3ViKHIiLyQiLCAiIiwgZGVwb3REaXIpCisgICAgICAgIHJldHVybiBvcy5wYXRoLnNwbGl0KGRlcG90RGlyKVsxXQorCisgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKKyAgICAgICAgaWYgbGVuKGFyZ3MpIDwgMToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHNlbGYua2VlcFJlcG9QYXRoIGFuZCBub3Qgc2VsZi5jbG9uZURlc3RpbmF0aW9uOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiTXVzdCBzcGVjaWZ5IGRlc3RpbmF0aW9uIGZvciAtLWtlZXAtcGF0aFxuIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgZGVwb3RQYXRocyA9IGFyZ3MKKworICAgICAgICBpZiBub3Qgc2VsZi5jbG9uZURlc3RpbmF0aW9uIGFuZCBsZW4oZGVwb3RQYXRocykgPiAxOgorICAgICAgICAgICAgc2VsZi5jbG9uZURlc3RpbmF0aW9uID0gZGVwb3RQYXRoc1stMV0KKyAgICAgICAgICAgIGRlcG90UGF0aHMgPSBkZXBvdFBhdGhzWzotMV0KKworICAgICAgICBmb3IgcCBpbiBkZXBvdFBhdGhzOgorICAgICAgICAgICAgaWYgbm90IHAuc3RhcnRzd2l0aCgiLy8iKToKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdEZXBvdCBwYXRocyBtdXN0IHN0YXJ0IHdpdGggIi8vIjogJXNcbicgJSBwKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIG5vdCBzZWxmLmNsb25lRGVzdGluYXRpb246CisgICAgICAgICAgICBzZWxmLmNsb25lRGVzdGluYXRpb24gPSBzZWxmLmRlZmF1bHREZXN0aW5hdGlvbihhcmdzKQorCisgICAgICAgIHByaW50KCJJbXBvcnRpbmcgZnJvbSAlcyBpbnRvICVzIiAlICgnLCAnLmpvaW4oZGVwb3RQYXRocyksIHNlbGYuY2xvbmVEZXN0aW5hdGlvbikpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuY2xvbmVEZXN0aW5hdGlvbik6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhzZWxmLmNsb25lRGVzdGluYXRpb24pCisgICAgICAgIGNoZGlyKHNlbGYuY2xvbmVEZXN0aW5hdGlvbikKKworICAgICAgICBpbml0X2NtZCA9IFsgImdpdCIsICJpbml0IiBdCisgICAgICAgIGlmIHNlbGYuY2xvbmVCYXJlOgorICAgICAgICAgICAgaW5pdF9jbWQuYXBwZW5kKCItLWJhcmUiKQorICAgICAgICByZXRjb2RlID0gc3VicHJvY2Vzcy5jYWxsKGluaXRfY21kKQorICAgICAgICBpZiByZXRjb2RlOgorICAgICAgICAgICAgcmFpc2UgQ2FsbGVkUHJvY2Vzc0Vycm9yKHJldGNvZGUsIGluaXRfY21kKQorCisgICAgICAgIGlmIG5vdCBQNFN5bmMucnVuKHNlbGYsIGRlcG90UGF0aHMpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgIyBjcmVhdGUgYSBtYXN0ZXIgYnJhbmNoIGFuZCBjaGVjayBvdXQgYSB3b3JrIHRyZWUKKyAgICAgICAgaWYgZ2l0QnJhbmNoRXhpc3RzKHNlbGYuYnJhbmNoKToKKyAgICAgICAgICAgIHN5c3RlbShbICJnaXQiLCAiYnJhbmNoIiwgIm1hc3RlciIsIHNlbGYuYnJhbmNoIF0pCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5jbG9uZUJhcmU6CisgICAgICAgICAgICAgICAgc3lzdGVtKFsgImdpdCIsICJjaGVja291dCIsICItZiIgXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCdOb3QgY2hlY2tpbmcgb3V0IGFueSBicmFuY2gsIHVzZSAnIFwKKyAgICAgICAgICAgICAgICAgICciZ2l0IGNoZWNrb3V0IC1xIC1iIG1hc3RlciA8YnJhbmNoPiInKQorCisgICAgICAgICMgYXV0by1zZXQgdGhpcyB2YXJpYWJsZSBpZiBpbnZva2VkIHdpdGggLS11c2UtY2xpZW50LXNwZWMKKyAgICAgICAgaWYgc2VsZi51c2VDbGllbnRTcGVjX2Zyb21fb3B0aW9uczoKKyAgICAgICAgICAgIHN5c3RlbSgiZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0LXA0LnVzZWNsaWVudHNwZWMgdHJ1ZSIpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgUDRVbnNoZWx2ZShDb21tYW5kKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5vcHRpb25zID0gW10KKyAgICAgICAgc2VsZi5vcmlnaW4gPSAiSEVBRCIKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICJVbnNoZWx2ZSBhIFA0IGNoYW5nZWxpc3QgaW50byBhIGdpdCBjb21taXQiCisgICAgICAgIHNlbGYudXNhZ2UgPSAidXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBjaGFuZ2VsaXN0IgorICAgICAgICBzZWxmLm9wdGlvbnMgKz0gWworICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLW9yaWdpbiIsIGRlc3Q9Im9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgIGhlbHA9IlVzZSB0aGlzIGJhc2UgcmV2aXNpb24gaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAoJXMpIiAlIHNlbGYub3JpZ2luKSwKKyAgICAgICAgXQorICAgICAgICBzZWxmLnZlcmJvc2UgPSBGYWxzZQorICAgICAgICBzZWxmLm5vQ29tbWl0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5kZXN0YnJhbmNoID0gInJlZnMvcmVtb3Rlcy9wNC11bnNoZWx2ZWQiCisKKyAgICBkZWYgcmVuYW1lQnJhbmNoKHNlbGYsIGJyYW5jaF9uYW1lKToKKyAgICAgICAgIiIiIFJlbmFtZSB0aGUgZXhpc3RpbmcgYnJhbmNoIHRvIGJyYW5jaF9uYW1lLk4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsMTAwMCk6CisgICAgICAgICAgICBiYWNrdXBfYnJhbmNoX25hbWUgPSAiezB9LnsxfSIuZm9ybWF0KGJyYW5jaF9uYW1lLCBpKQorICAgICAgICAgICAgaWYgbm90IGdpdEJyYW5jaEV4aXN0cyhiYWNrdXBfYnJhbmNoX25hbWUpOgorICAgICAgICAgICAgICAgIGdpdFVwZGF0ZVJlZihiYWNrdXBfYnJhbmNoX25hbWUsIGJyYW5jaF9uYW1lKSAjIGNvcHkgcmVmIHRvIGJhY2t1cAorICAgICAgICAgICAgICAgIGdpdERlbGV0ZVJlZihicmFuY2hfbmFtZSkKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBwcmludCgicmVuYW1lZCBvbGQgdW5zaGVsdmUgYnJhbmNoIHRvIHswfSIuZm9ybWF0KGJhY2t1cF9icmFuY2hfbmFtZSkpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICBzeXMuZXhpdCgiZ2F2ZSB1cCB0cnlpbmcgdG8gcmVuYW1lIGV4aXN0aW5nIGJyYW5jaCB7MH0iLmZvcm1hdChzeW5jLmJyYW5jaCkpCisKKyAgICBkZWYgZmluZExhc3RQNFJldmlzaW9uKHNlbGYsIHN0YXJ0aW5nX3BvaW50KToKKyAgICAgICAgIiIiIExvb2sgYmFjayBmcm9tIHN0YXJ0aW5nX3BvaW50IGZvciB0aGUgZmlyc3QgY29tbWl0IGNyZWF0ZWQgYnkgZ2l0LXA0CisgICAgICAgICAgICB0byBmaW5kIHRoZSBQNCBjb21taXQgd2UgYXJlIGJhc2VkIG9uLCBhbmQgdGhlIGRlcG90LXBhdGhzLgorICAgICAgICAiIiIKKworICAgICAgICBmb3IgcGFyZW50IGluIChyYW5nZSg2NTUzNSkpOgorICAgICAgICAgICAgbG9nID0gZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KCJ7MH1eezF9Ii5mb3JtYXQoc3RhcnRpbmdfcG9pbnQsIHBhcmVudCkpCisgICAgICAgICAgICBzZXR0aW5ncyA9IGV4dHJhY3RTZXR0aW5nc0dpdExvZyhsb2cpCisgICAgICAgICAgICBpZiAnY2hhbmdlJyBpbiBzZXR0aW5nczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2V0dGluZ3MKKworICAgICAgICBzeXMuZXhpdCgiY291bGQgbm90IGZpbmQgZ2l0LXA0IGNvbW1pdHMgaW4gezB9Ii5mb3JtYXQoc2VsZi5vcmlnaW4pKQorCisgICAgZGVmIGNyZWF0ZVNoZWx2ZVBhcmVudChzZWxmLCBjaGFuZ2UsIGJyYW5jaF9uYW1lLCBzeW5jLCBvcmlnaW4pOgorICAgICAgICAiIiIgQ3JlYXRlIGEgY29tbWl0IG1hdGNoaW5nIHRoZSBwYXJlbnQgb2YgdGhlIHNoZWx2ZWQgY2hhbmdlbGlzdCAnY2hhbmdlJworICAgICAgICAiIiIKKyAgICAgICAgcGFyZW50X2Rlc2NyaXB0aW9uID0gcDRfZGVzY3JpYmUoY2hhbmdlLCBzaGVsdmVkPVRydWUpCisgICAgICAgIHBhcmVudF9kZXNjcmlwdGlvblsnZGVzYyddID0gJ3BhcmVudCBmb3Igc2hlbHZlZCBjaGFuZ2VsaXN0IHt9XG4nLmZvcm1hdChjaGFuZ2UpCisgICAgICAgIGZpbGVzID0gc3luYy5leHRyYWN0RmlsZXNGcm9tQ29tbWl0KHBhcmVudF9kZXNjcmlwdGlvbiwgc2hlbHZlZD1GYWxzZSwgc2hlbHZlZF9jbD1jaGFuZ2UpCisKKyAgICAgICAgcGFyZW50X2ZpbGVzID0gW10KKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAjIGlmIGl0IHdhcyBhZGRlZCBpbiB0aGUgc2hlbHZlZCBjaGFuZ2VsaXN0LCBpdCB3b24ndCBleGlzdCBpbiB0aGUgcGFyZW50CisgICAgICAgICAgICBpZiBmWydhY3Rpb24nXSBpbiBzZWxmLmFkZF9hY3Rpb25zOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgaWYgaXQgd2FzIGRlbGV0ZWQgaW4gdGhlIHNoZWx2ZWQgY2hhbmdlbGlzdCBpdCBtdXN0IG5vdCBiZSBkZWxldGVkCisgICAgICAgICAgICAjIGluIHRoZSBwYXJlbnQgLSB3ZSBtaWdodCBldmVuIG5lZWQgdG8gY3JlYXRlIGl0IGlmIHRoZSBvcmlnaW4gYnJhbmNoCisgICAgICAgICAgICAjIGRvZXMgbm90IGhhdmUgaXQKKyAgICAgICAgICAgIGlmIGZbJ2FjdGlvbiddIGluIHNlbGYuZGVsZXRlX2FjdGlvbnM6CisgICAgICAgICAgICAgICAgZlsnYWN0aW9uJ10gPSAnYWRkJworCisgICAgICAgICAgICBwYXJlbnRfZmlsZXMuYXBwZW5kKGYpCisKKyAgICAgICAgc3luYy5jb21taXQocGFyZW50X2Rlc2NyaXB0aW9uLCBwYXJlbnRfZmlsZXMsIGJyYW5jaF9uYW1lLAorICAgICAgICAgICAgICAgIHBhcmVudD1vcmlnaW4sIGFsbG93X2VtcHR5PVRydWUpCisgICAgICAgIHByaW50KCJjcmVhdGVkIHBhcmVudCBjb21taXQgZm9yIHswfSBiYXNlZCBvbiB7MX0gaW4gezJ9Ii5mb3JtYXQoCisgICAgICAgICAgICBjaGFuZ2UsIHNlbGYub3JpZ2luLCBicmFuY2hfbmFtZSkpCisKKyAgICBkZWYgcnVuKHNlbGYsIGFyZ3MpOgorICAgICAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIG5vdCBnaXRCcmFuY2hFeGlzdHMoc2VsZi5vcmlnaW4pOgorICAgICAgICAgICAgc3lzLmV4aXQoIm9yaWdpbiBicmFuY2ggezB9IGRvZXMgbm90IGV4aXN0Ii5mb3JtYXQoc2VsZi5vcmlnaW4pKQorCisgICAgICAgIHN5bmMgPSBQNFN5bmMoKQorICAgICAgICBjaGFuZ2VzID0gYXJncworCisgICAgICAgICMgb25seSBvbmUgY2hhbmdlIGF0IGEgdGltZQorICAgICAgICBjaGFuZ2UgPSBjaGFuZ2VzWzBdCisKKyAgICAgICAgIyBpZiB0aGUgdGFyZ2V0IGJyYW5jaCBhbHJlYWR5IGV4aXN0cywgcmVuYW1lIGl0CisgICAgICAgIGJyYW5jaF9uYW1lID0gInswfS97MX0iLmZvcm1hdChzZWxmLmRlc3RicmFuY2gsIGNoYW5nZSkKKyAgICAgICAgaWYgZ2l0QnJhbmNoRXhpc3RzKGJyYW5jaF9uYW1lKToKKyAgICAgICAgICAgIHNlbGYucmVuYW1lQnJhbmNoKGJyYW5jaF9uYW1lKQorICAgICAgICBzeW5jLmJyYW5jaCA9IGJyYW5jaF9uYW1lCisKKyAgICAgICAgc3luYy52ZXJib3NlID0gc2VsZi52ZXJib3NlCisgICAgICAgIHN5bmMuc3VwcHJlc3NfbWV0YV9jb21tZW50ID0gVHJ1ZQorCisgICAgICAgIHNldHRpbmdzID0gc2VsZi5maW5kTGFzdFA0UmV2aXNpb24oc2VsZi5vcmlnaW4pCisgICAgICAgIHN5bmMuZGVwb3RQYXRocyA9IHNldHRpbmdzWydkZXBvdC1wYXRocyddCisgICAgICAgIHN5bmMuYnJhbmNoUHJlZml4ZXMgPSBzeW5jLmRlcG90UGF0aHMKKworICAgICAgICBzeW5jLm9wZW5TdHJlYW1zKCkKKyAgICAgICAgc3luYy5sb2FkVXNlck1hcEZyb21DYWNoZSgpCisgICAgICAgIHN5bmMuc2lsZW50ID0gVHJ1ZQorCisgICAgICAgICMgY3JlYXRlIGEgY29tbWl0IGZvciB0aGUgcGFyZW50IG9mIHRoZSBzaGVsdmVkIGNoYW5nZWxpc3QKKyAgICAgICAgc2VsZi5jcmVhdGVTaGVsdmVQYXJlbnQoY2hhbmdlLCBicmFuY2hfbmFtZSwgc3luYywgc2VsZi5vcmlnaW4pCisKKyAgICAgICAgIyBjcmVhdGUgdGhlIGNvbW1pdCBmb3IgdGhlIHNoZWx2ZWQgY2hhbmdlbGlzdCBpdHNlbGYKKyAgICAgICAgZGVzY3JpcHRpb24gPSBwNF9kZXNjcmliZShjaGFuZ2UsIFRydWUpCisgICAgICAgIGZpbGVzID0gc3luYy5leHRyYWN0RmlsZXNGcm9tQ29tbWl0KGRlc2NyaXB0aW9uLCBUcnVlLCBjaGFuZ2UpCisKKyAgICAgICAgc3luYy5jb21taXQoZGVzY3JpcHRpb24sIGZpbGVzLCBicmFuY2hfbmFtZSwgIiIpCisgICAgICAgIHN5bmMuY2xvc2VTdHJlYW1zKCkKKworICAgICAgICBwcmludCgidW5zaGVsdmVkIGNoYW5nZWxpc3QgezB9IGludG8gezF9Ii5mb3JtYXQoY2hhbmdlLCBicmFuY2hfbmFtZSkpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgUDRCcmFuY2hlcyhDb21tYW5kKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5vcHRpb25zID0gWyBdCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSAoIlNob3dzIHRoZSBnaXQgYnJhbmNoZXMgdGhhdCBob2xkIGltcG9ydHMgYW5kIHRoZWlyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJjb3JyZXNwb25kaW5nIHBlcmZvcmNlIGRlcG90IHBhdGhzIikKKyAgICAgICAgc2VsZi52ZXJib3NlID0gRmFsc2UKKworICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CisgICAgICAgIGlmIG9yaWdpblA0QnJhbmNoZXNFeGlzdCgpOgorICAgICAgICAgICAgY3JlYXRlT3JVcGRhdGVCcmFuY2hlc0Zyb21PcmlnaW4oKQorCisgICAgICAgIGNtZGxpbmUgPSAiZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljICIKKyAgICAgICAgY21kbGluZSArPSAiIC0tcmVtb3RlcyIKKworICAgICAgICBmb3IgbGluZSBpbiByZWFkX3BpcGVfbGluZXMoY21kbGluZSk6CisgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJ3A0LycpIG9yIGxpbmUgPT0gInA0L0hFQUQiOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBicmFuY2ggPSBsaW5lCisKKyAgICAgICAgICAgIGxvZyA9IGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdCgicmVmcy9yZW1vdGVzLyVzIiAlIGJyYW5jaCkKKyAgICAgICAgICAgIHNldHRpbmdzID0gZXh0cmFjdFNldHRpbmdzR2l0TG9nKGxvZykKKworICAgICAgICAgICAgcHJpbnQoIiVzIDw9ICVzICglcykiICUgKGJyYW5jaCwgIiwiLmpvaW4oc2V0dGluZ3NbImRlcG90LXBhdGhzIl0pLCBzZXR0aW5nc1siY2hhbmdlIl0pKQorICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBIZWxwRm9ybWF0dGVyKG9wdHBhcnNlLkluZGVudGVkSGVscEZvcm1hdHRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBvcHRwYXJzZS5JbmRlbnRlZEhlbHBGb3JtYXR0ZXIuX19pbml0X18oc2VsZikKKworICAgIGRlZiBmb3JtYXRfZGVzY3JpcHRpb24oc2VsZiwgZGVzY3JpcHRpb24pOgorICAgICAgICBpZiBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbiArICJcbiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiIgorCitkZWYgcHJpbnRVc2FnZShjb21tYW5kcyk6CisgICAgcHJpbnQoInVzYWdlOiAlcyA8Y29tbWFuZD4gW29wdGlvbnNdIiAlIHN5cy5hcmd2WzBdKQorICAgIHByaW50KCIiKQorICAgIHByaW50KCJ2YWxpZCBjb21tYW5kczogJXMiICUgIiwgIi5qb2luKGNvbW1hbmRzKSkKKyAgICBwcmludCgiIikKKyAgICBwcmludCgiVHJ5ICVzIDxjb21tYW5kPiAtLWhlbHAgZm9yIGNvbW1hbmQgc3BlY2lmaWMgaGVscC4iICUgc3lzLmFyZ3ZbMF0pCisgICAgcHJpbnQoIiIpCisKK2NvbW1hbmRzID0geworICAgICJkZWJ1ZyIgOiBQNERlYnVnLAorICAgICJzdWJtaXQiIDogUDRTdWJtaXQsCisgICAgImNvbW1pdCIgOiBQNFN1Ym1pdCwKKyAgICAic3luYyIgOiBQNFN5bmMsCisgICAgInJlYmFzZSIgOiBQNFJlYmFzZSwKKyAgICAiY2xvbmUiIDogUDRDbG9uZSwKKyAgICAicm9sbGJhY2siIDogUDRSb2xsQmFjaywKKyAgICAiYnJhbmNoZXMiIDogUDRCcmFuY2hlcywKKyAgICAidW5zaGVsdmUiIDogUDRVbnNoZWx2ZSwKK30KKworZGVmIG1haW4oKToKKyAgICBpZiBsZW4oc3lzLmFyZ3ZbMTpdKSA9PSAwOgorICAgICAgICBwcmludFVzYWdlKGNvbW1hbmRzLmtleXMoKSkKKyAgICAgICAgc3lzLmV4aXQoMikKKworICAgIGNtZE5hbWUgPSBzeXMuYXJndlsxXQorICAgIHRyeToKKyAgICAgICAga2xhc3MgPSBjb21tYW5kc1tjbWROYW1lXQorICAgICAgICBjbWQgPSBrbGFzcygpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBwcmludCgidW5rbm93biBjb21tYW5kICVzIiAlIGNtZE5hbWUpCisgICAgICAgIHByaW50KCIiKQorICAgICAgICBwcmludFVzYWdlKGNvbW1hbmRzLmtleXMoKSkKKyAgICAgICAgc3lzLmV4aXQoMikKKworICAgIG9wdGlvbnMgPSBjbWQub3B0aW9ucworICAgIGNtZC5naXRkaXIgPSBvcy5lbnZpcm9uLmdldCgiR0lUX0RJUiIsIE5vbmUpCisKKyAgICBhcmdzID0gc3lzLmFyZ3ZbMjpdCisKKyAgICBvcHRpb25zLmFwcGVuZChvcHRwYXJzZS5tYWtlX29wdGlvbigiLS12ZXJib3NlIiwgIi12IiwgZGVzdD0idmVyYm9zZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpKQorICAgIGlmIGNtZC5uZWVkc0dpdDoKKyAgICAgICAgb3B0aW9ucy5hcHBlbmQob3B0cGFyc2UubWFrZV9vcHRpb24oIi0tZ2l0LWRpciIsIGRlc3Q9ImdpdGRpciIpKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKGNtZC51c2FnZS5yZXBsYWNlKCIlcHJvZyIsICIlcHJvZyAiICsgY21kTmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gY21kLmRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIgPSBIZWxwRm9ybWF0dGVyKCkpCisKKyAgICB0cnk6CisgICAgICAgIChjbWQsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3ZbMjpdLCBjbWQpOworICAgIGV4Y2VwdDoKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICByYWlzZQorCisgICAgZ2xvYmFsIHZlcmJvc2UKKyAgICB2ZXJib3NlID0gY21kLnZlcmJvc2UKKyAgICBpZiBjbWQubmVlZHNHaXQ6CisgICAgICAgIGlmIGNtZC5naXRkaXIgPT0gTm9uZToKKyAgICAgICAgICAgIGNtZC5naXRkaXIgPSBvcy5wYXRoLmFic3BhdGgoIi5naXQiKQorICAgICAgICAgICAgaWYgbm90IGlzVmFsaWRHaXREaXIoY21kLmdpdGRpcik6CisgICAgICAgICAgICAgICAgIyAicmV2LXBhcnNlIC0tZ2l0LWRpciIgd2l0aG91dCBhcmd1bWVudHMgd2lsbCB0cnkgJFBXRC8uZ2l0CisgICAgICAgICAgICAgICAgY21kLmdpdGRpciA9IHJlYWRfcGlwZSgiZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIiKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY21kLmdpdGRpcik6CisgICAgICAgICAgICAgICAgICAgIGNkdXAgPSByZWFkX3BpcGUoImdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXAiKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihjZHVwKSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGRpcihjZHVwKTsKKworICAgICAgICBpZiBub3QgaXNWYWxpZEdpdERpcihjbWQuZ2l0ZGlyKToKKyAgICAgICAgICAgIGlmIGlzVmFsaWRHaXREaXIoY21kLmdpdGRpciArICIvLmdpdCIpOgorICAgICAgICAgICAgICAgIGNtZC5naXRkaXIgKz0gIi8uZ2l0IgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkaWUoImZhdGFsOiBjYW5ub3QgbG9jYXRlIGdpdCByZXBvc2l0b3J5IGF0ICVzIiAlIGNtZC5naXRkaXIpCisKKyAgICAgICAgIyBzbyBnaXQgY29tbWFuZHMgaW52b2tlZCBmcm9tIHRoZSBQNCB3b3Jrc3BhY2Ugd2lsbCBzdWNjZWVkCisgICAgICAgIG9zLmVudmlyb25bIkdJVF9ESVIiXSA9IGNtZC5naXRkaXIKKworICAgIGlmIG5vdCBjbWQucnVuKGFyZ3MpOgorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDIpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2dpdC1wYXJzZS1yZW1vdGUuc2ggYi9naXQtcGFyc2UtcmVtb3RlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYzM5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcGFyc2UtcmVtb3RlLnNoCkBAIC0wLDAgKzEsMTAxIEBACisjIFRoaXMgaXMgYSBzaGVsbCBsaWJyYXJ5IHRvIGNhbGN1bGF0ZSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgYW5kCisjIHVwc3RyZWFtIGJyYW5jaCB0aGF0IHNob3VsZCBiZSBwdWxsZWQgYnkgImdpdCBwdWxsIiBmcm9tIHRoZSBjdXJyZW50CisjIGJyYW5jaC4KKworIyBnaXQtbHMtcmVtb3RlIGNvdWxkIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgYSBnaXQgbWFuYWdlZCByZXBvc2l0b3J5OworIyB0aGlzIHdvdWxkIGZhaWwgaW4gdGhhdCBjYXNlIGFuZCB3b3VsZCBpc3N1ZSBhbiBlcnJvciBtZXNzYWdlLgorR0lUX0RJUj0kKGdpdCByZXYtcGFyc2UgLXEgLS1naXQtZGlyKSB8fCA6OworCitnZXRfZGVmYXVsdF9yZW1vdGUgKCkgeworCWN1cnJfYnJhbmNoPSQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKQorCWN1cnJfYnJhbmNoPSIke2N1cnJfYnJhbmNoI3JlZnMvaGVhZHMvfSIKKwlvcmlnaW49JChnaXQgY29uZmlnIC0tZ2V0ICJicmFuY2guJGN1cnJfYnJhbmNoLnJlbW90ZSIpCisJZWNobyAke29yaWdpbjotb3JpZ2lufQorfQorCitnZXRfcmVtb3RlX21lcmdlX2JyYW5jaCAoKSB7CisJY2FzZSAiJCMiIGluCisJMHwxKQorCSAgICBvcmlnaW49IiQxIgorCSAgICBkZWZhdWx0PSQoZ2V0X2RlZmF1bHRfcmVtb3RlKQorCSAgICB0ZXN0IC16ICIkb3JpZ2luIiAmJiBvcmlnaW49JGRlZmF1bHQKKwkgICAgY3Vycl9icmFuY2g9JChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpICYmCisJICAgIFsgIiRvcmlnaW4iID0gIiRkZWZhdWx0IiBdICYmCisJICAgIGVjaG8gJChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKHVwc3RyZWFtKScgJGN1cnJfYnJhbmNoKQorCSAgICA7OworCSopCisJICAgIHJlcG89JDEKKwkgICAgc2hpZnQKKwkgICAgcmVmPSQxCisJICAgICMgRklYTUU6IEl0IHNob3VsZCByZXR1cm4gdGhlIHRyYWNraW5nIGJyYW5jaAorCSAgICAjICAgICAgICBDdXJyZW50bHkgb25seSB3b3JrcyB3aXRoIHRoZSBkZWZhdWx0IG1hcHBpbmcKKwkgICAgY2FzZSAiJHJlZiIgaW4KKwkgICAgKyopCisJCXJlZj0kKGV4cHIgInokcmVmIiA6ICd6K1woLipcKScpCisJCTs7CisJICAgIGVzYWMKKwkgICAgZXhwciAieiRyZWYiIDogJ3ouKjonID4vZGV2L251bGwgfHwgcmVmPSIke3JlZn06IgorCSAgICByZW1vdGU9JChleHByICJ6JHJlZiIgOiAnelwoW146XSpcKTonKQorCSAgICBjYXNlICIkcmVtb3RlIiBpbgorCSAgICAnJyB8IEhFQUQgKSByZW1vdGU9SEVBRCA7OworCSAgICBoZWFkcy8qKSByZW1vdGU9JHtyZW1vdGUjaGVhZHMvfSA7OworCSAgICByZWZzL2hlYWRzLyopIHJlbW90ZT0ke3JlbW90ZSNyZWZzL2hlYWRzL30gOzsKKwkgICAgcmVmcy8qIHwgdGFncy8qIHwgcmVtb3Rlcy8qICkgcmVtb3RlPQorCSAgICBlc2FjCisJICAgIFsgLW4gIiRyZW1vdGUiIF0gJiYgY2FzZSAiJHJlcG8iIGluCisJCS4pCisJCSAgICBlY2hvICJyZWZzL2hlYWRzLyRyZW1vdGUiCisJCSAgICA7OworCQkqKQorCQkgICAgZWNobyAicmVmcy9yZW1vdGVzLyRyZXBvLyRyZW1vdGUiCisJCSAgICA7OworCSAgICBlc2FjCisJZXNhYworfQorCitlcnJvcl9vbl9taXNzaW5nX2RlZmF1bHRfdXBzdHJlYW0gKCkgeworCWNtZD0iJDEiCisJb3BfdHlwZT0iJDIiCisJb3BfcHJlcD0iJDMiICMgRklYTUU6IG9wX3ByZXAgaXMgbm8gbG9uZ2VyIHVzZWQKKwlleGFtcGxlPSIkNCIKKwlicmFuY2hfbmFtZT0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkKKwlkaXNwbGF5X2JyYW5jaF9uYW1lPSIke2JyYW5jaF9uYW1lI3JlZnMvaGVhZHMvfSIKKwkjIElmIHRoZXJlJ3Mgb25seSBvbmUgcmVtb3RlLCB1c2UgdGhhdCBpbiB0aGUgc3VnZ2VzdGlvbgorCXJlbW90ZT0iJChnZXR0ZXh0ICI8cmVtb3RlPiIpIgorCWJyYW5jaD0iJChnZXR0ZXh0ICI8YnJhbmNoPiIpIgorCWlmIHRlc3QgJChnaXQgcmVtb3RlIHwgd2MgLWwpID0gMQorCXRoZW4KKwkJcmVtb3RlPSQoZ2l0IHJlbW90ZSkKKwlmaQorCisJaWYgdGVzdCAteiAiJGJyYW5jaF9uYW1lIgorCXRoZW4KKwkJZ2V0dGV4dGxuICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIgorCWVsc2UKKwkJZ2V0dGV4dGxuICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKKwlmaQorCWNhc2UgIiRvcF90eXBlIiBpbgorCXJlYmFzZSkKKwkJZ2V0dGV4dGxuICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuIgorCQk7OworCW1lcmdlKQorCQlnZXR0ZXh0bG4gIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKKwkJOzsKKwkqKQorCQllY2hvID4mMiAiQlVHOiB1bmtub3duIG9wZXJhdGlvbiB0eXBlOiAkb3BfdHlwZSIKKwkJZXhpdCAxCisJCTs7CisJZXNhYworCWV2YWxfZ2V0dGV4dGxuICJTZWUgZ2l0LVwke2NtZH0oMSkgZm9yIGRldGFpbHMuIgorCWVjaG8KKwllY2hvICIgICAgJGV4YW1wbGUiCisJZWNobworCWlmIHRlc3QgLW4gIiRicmFuY2hfbmFtZSIKKwl0aGVuCisJCWdldHRleHRsbiAiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6IgorCQllY2hvCisJCWVjaG8gIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSRyZW1vdGUvJGJyYW5jaCAkZGlzcGxheV9icmFuY2hfbmFtZSIKKwkJZWNobworCWZpCisJZXhpdCAxCit9CmRpZmYgLS1naXQgYS9naXQtcXVpbHRpbXBvcnQuc2ggYi9naXQtcXVpbHRpbXBvcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTNkMzkwOQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1xdWlsdGltcG9ydC5zaApAQCAtMCwwICsxLDE1NSBAQAorIyEvYmluL3NoCitPUFRJT05TX0tFRVBEQVNIREFTSD0KK09QVElPTlNfU1RVQ0tMT05HPQorT1BUSU9OU19TUEVDPSJcCitnaXQgcXVpbHRpbXBvcnQgW29wdGlvbnNdCistLQorbixkcnktcnVuICAgICBkcnkgcnVuCithdXRob3I9ICAgICAgIGF1dGhvciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIGZvciBwYXRjaGVzIHdpdGhvdXQgYW55CitwYXRjaGVzPSAgICAgIHBhdGggdG8gdGhlIHF1aWx0IHBhdGNoZXMKK3Nlcmllcz0gICAgICAgcGF0aCB0byB0aGUgcXVpbHQgc2VyaWVzIGZpbGUKK2tlZXAtbm9uLXBhdGNoIFBhc3MgLWIgdG8gZ2l0IG1haWxpbmZvCisiCitTVUJESVJFQ1RPUllfT049WWVzCisuIGdpdC1zaC1zZXR1cAorCitkcnlfcnVuPSIiCitxdWlsdF9hdXRob3I9IiIKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktLWF1dGhvcikKKwkJc2hpZnQKKwkJcXVpbHRfYXV0aG9yPSIkMSIKKwkJOzsKKwktbnwtLWRyeS1ydW4pCisJCWRyeV9ydW49MQorCQk7OworCS0tcGF0Y2hlcykKKwkJc2hpZnQKKwkJUVVJTFRfUEFUQ0hFUz0iJDEiCisJCTs7CisJLS1zZXJpZXMpCisJCXNoaWZ0CisJCVFVSUxUX1NFUklFUz0iJDEiCisJCTs7CisJLS1rZWVwLW5vbi1wYXRjaCkKKwkJTUFJTElORk9fT1BUPSItYiIKKwkJOzsKKwktLSkKKwkJc2hpZnQKKwkJYnJlYWs7OworCSopCisJCXVzYWdlCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKKyMgUXVpbHQgQXV0aG9yCitpZiBbIC1uICIkcXVpbHRfYXV0aG9yIiBdIDsgdGhlbgorCXF1aWx0X2F1dGhvcl9uYW1lPSQoZXhwciAieiRxdWlsdF9hdXRob3IiIDogJ3pcKC4qW14gXVwpICo8LionKSAmJgorCXF1aWx0X2F1dGhvcl9lbWFpbD0kKGV4cHIgInokcXVpbHRfYXV0aG9yIiA6ICcuKjxcKFtePl0qXCknKSAmJgorCXRlc3QgJycgIT0gIiRxdWlsdF9hdXRob3JfbmFtZSIgJiYKKwl0ZXN0ICcnICE9ICIkcXVpbHRfYXV0aG9yX2VtYWlsIiB8fAorCWRpZSAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK2ZpCisKKyMgUXVpbHQgcGF0Y2ggZGlyZWN0b3J5Cis6ICR7UVVJTFRfUEFUQ0hFUzo9cGF0Y2hlc30KK2lmICEgWyAtZCAiJFFVSUxUX1BBVENIRVMiIF0gOyB0aGVuCisJZWNobyAiVGhlIFwiJFFVSUxUX1BBVENIRVNcIiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuIgorCWV4aXQgMQorZmkKKworIyBRdWlsdCBzZXJpZXMgZmlsZQorOiAke1FVSUxUX1NFUklFUzo9JFFVSUxUX1BBVENIRVMvc2VyaWVzfQoraWYgISBbIC1lICIkUVVJTFRfU0VSSUVTIiBdIDsgdGhlbgorCWVjaG8gIlRoZSBcIiRRVUlMVF9TRVJJRVNcIiBmaWxlIGRvZXMgbm90IGV4aXN0LiIKKwlleGl0IDEKK2ZpCisKKyMgVGVtcG9yYXJ5IGRpcmVjdG9yaWVzCit0bXBfZGlyPSIkR0lUX0RJUiIvcmViYXNlLWFwcGx5Cit0bXBfbXNnPSIkdG1wX2Rpci9tc2ciCit0bXBfcGF0Y2g9IiR0bXBfZGlyL3BhdGNoIgordG1wX2luZm89IiR0bXBfZGlyL2luZm8iCisKKworIyBGaW5kIHRoZSBpbml0aWFsIGNvbW1pdAorY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCitta2RpciAkdG1wX2RpciB8fCBleGl0IDIKK3doaWxlIHJlYWQgcGF0Y2hfbmFtZSBsZXZlbCBnYXJiYWdlIDwmMworZG8KKwljYXNlICIkcGF0Y2hfbmFtZSIgaW4gJyd8JyMnKikgY29udGludWU7OyBlc2FjCisJY2FzZSAiJGxldmVsIiBpbgorCS1wKikJOzsKKwknJ3wnIycqKQorCQlsZXZlbD07OworCSopCisJCWVjaG8gInVuYWJsZSB0byBwYXJzZSBwYXRjaCBsZXZlbCwgaWdub3JpbmcgaXQuIgorCQlsZXZlbD07OworCWVzYWMKKwljYXNlICIkZ2FyYmFnZSIgaW4KKwknJ3wnIycqKTs7CisJKikKKwkJZWNobyAidHJhaWxpbmcgZ2FyYmFnZSBmb3VuZCBpbiBzZXJpZXMgZmlsZTogJGdhcmJhZ2UiCisJCWV4aXQgMTs7CisJZXNhYworCWlmICEgWyAtZiAiJFFVSUxUX1BBVENIRVMvJHBhdGNoX25hbWUiIF0gOyB0aGVuCisJCWVjaG8gIiRwYXRjaF9uYW1lIGRvZXNuJ3QgZXhpc3QuIFNraXBwaW5nLiIKKwkJY29udGludWUKKwlmaQorCWVjaG8gJHBhdGNoX25hbWUKKwlnaXQgbWFpbGluZm8gJE1BSUxJTkZPX09QVCAiJHRtcF9tc2ciICIkdG1wX3BhdGNoIiBcCisJCTwiJFFVSUxUX1BBVENIRVMvJHBhdGNoX25hbWUiID4iJHRtcF9pbmZvIiB8fCBleGl0IDMKKwl0ZXN0IC1zICIkdG1wX3BhdGNoIiB8fCB7CisJCWVjaG8gIlBhdGNoIGlzIGVtcHR5LiAgV2FzIGl0IHNwbGl0IHdyb25nPyIKKwkJZXhpdCAxCisJfQorCisJIyBQYXJzZSB0aGUgYXV0aG9yIGluZm9ybWF0aW9uCisJR0lUX0FVVEhPUl9OQU1FPSQoc2VkIC1uZSAncy9BdXRob3I6IC8vcCcgIiR0bXBfaW5mbyIpCisJR0lUX0FVVEhPUl9FTUFJTD0kKHNlZCAtbmUgJ3MvRW1haWw6IC8vcCcgIiR0bXBfaW5mbyIpCisJZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMCisJd2hpbGUgdGVzdCAteiAiJEdJVF9BVVRIT1JfRU1BSUwiICYmIHRlc3QgLXogIiRHSVRfQVVUSE9SX05BTUUiIDsgZG8KKwkJaWYgWyAtbiAiJHF1aWx0X2F1dGhvciIgXSA7IHRoZW4KKwkJCUdJVF9BVVRIT1JfTkFNRT0iJHF1aWx0X2F1dGhvcl9uYW1lIjsKKwkJCUdJVF9BVVRIT1JfRU1BSUw9IiRxdWlsdF9hdXRob3JfZW1haWwiOworCQllbGlmIFsgLW4gIiRkcnlfcnVuIiBdOyB0aGVuCisJCQllY2hvICJObyBhdXRob3IgZm91bmQgaW4gJHBhdGNoX25hbWUiID4mMjsKKwkJCUdJVF9BVVRIT1JfTkFNRT0iZHJ5LXJ1bi1ub3QtZm91bmQiOworCQkJR0lUX0FVVEhPUl9FTUFJTD0iZHJ5LXJ1bi1ub3QtZm91bmQiOworCQllbHNlCisJCQllY2hvICJObyBhdXRob3IgZm91bmQgaW4gJHBhdGNoX25hbWUiID4mMjsKKwkJCWVjaG8gIi0tLSIKKwkJCWNhdCAkdG1wX21zZworCQkJcHJpbnRmICJBdXRob3I6ICI7CisJCQlyZWFkIHBhdGNoX2F1dGhvcgorCisJCQllY2hvICIkcGF0Y2hfYXV0aG9yIgorCisJCQlwYXRjaF9hdXRob3JfbmFtZT0kKGV4cHIgInokcGF0Y2hfYXV0aG9yIiA6ICd6XCguKlteIF1cKSAqPC4qJykgJiYKKwkJCXBhdGNoX2F1dGhvcl9lbWFpbD0kKGV4cHIgInokcGF0Y2hfYXV0aG9yIiA6ICcuKjxcKFtePl0qXCknKSAmJgorCQkJdGVzdCAnJyAhPSAiJHBhdGNoX2F1dGhvcl9uYW1lIiAmJgorCQkJdGVzdCAnJyAhPSAiJHBhdGNoX2F1dGhvcl9lbWFpbCIgJiYKKwkJCUdJVF9BVVRIT1JfTkFNRT0iJHBhdGNoX2F1dGhvcl9uYW1lIiAmJgorCQkJR0lUX0FVVEhPUl9FTUFJTD0iJHBhdGNoX2F1dGhvcl9lbWFpbCIKKwkJZmkKKwlkb25lCisJR0lUX0FVVEhPUl9EQVRFPSQoc2VkIC1uZSAncy9EYXRlOiAvL3AnICIkdG1wX2luZm8iKQorCVNVQkpFQ1Q9JChzZWQgLW5lICdzL1N1YmplY3Q6IC8vcCcgIiR0bXBfaW5mbyIpCisJZXhwb3J0IEdJVF9BVVRIT1JfREFURSBTVUJKRUNUCisJaWYgWyAteiAiJFNVQkpFQ1QiIF0gOyB0aGVuCisJCVNVQkpFQ1Q9JChlY2hvICRwYXRjaF9uYW1lIHwgc2VkIC1lICdzLy5wYXRjaCQvLycpCisJZmkKKworCWlmIFsgLXogIiRkcnlfcnVuIiBdIDsgdGhlbgorCQlnaXQgYXBwbHkgLS1pbmRleCAtQzEgJHtsZXZlbDorIiRsZXZlbCJ9ICIkdG1wX3BhdGNoIiAmJgorCQl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJCWNvbW1pdD0kKCAoZWNobyAiJFNVQkpFQ1QiOyBlY2hvOyBjYXQgIiR0bXBfbXNnIikgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUgLXAgJGNvbW1pdCkgJiYKKwkJZ2l0IHVwZGF0ZS1yZWYgLW0gInF1aWx0aW1wb3J0OiAkcGF0Y2hfbmFtZSIgSEVBRCAkY29tbWl0IHx8IGV4aXQgNAorCWZpCitkb25lIDM8IiRRVUlMVF9TRVJJRVMiCitybSAtcmYgJHRtcF9kaXIgfHwgZXhpdCA1CmRpZmYgLS1naXQgYS9naXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2ggYi9naXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjOTBlOQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaApAQCAtMCwwICsxLDEwNjcgQEAKKyMgVGhpcyBzaGVsbCBzY3JpcHQgZnJhZ21lbnQgaXMgc291cmNlZCBieSBnaXQtcmViYXNlIHRvIGltcGxlbWVudCBpdHMKKyMgcHJlc2VydmUtbWVyZ2VzIG1vZGUuCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisjIFRoZSBmaWxlIGNvbnRhaW5pbmcgcmViYXNlIGNvbW1hbmRzLCBjb21tZW50cywgYW5kIGVtcHR5IGxpbmVzLgorIyBUaGlzIGZpbGUgaXMgY3JlYXRlZCBieSAiZ2l0IHJlYmFzZSAtaSIgdGhlbiBlZGl0ZWQgYnkgdGhlIHVzZXIuICBBcworIyB0aGUgbGluZXMgYXJlIHByb2Nlc3NlZCwgdGhleSBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBmcm9udCBvZiB0aGlzCisjIGZpbGUgYW5kIHdyaXR0ZW4gdG8gdGhlIHRhaWwgb2YgJGRvbmUuCit0b2RvPSIkc3RhdGVfZGlyIi9naXQtcmViYXNlLXRvZG8KKworIyBUaGUgcmViYXNlIGNvbW1hbmQgbGluZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQuICBBIGxpbmUKKyMgaXMgbW92ZWQgaGVyZSB3aGVuIGl0IGlzIGZpcnN0IGhhbmRsZWQsIGJlZm9yZSBhbnkgYXNzb2NpYXRlZCB1c2VyCisjIGFjdGlvbnMuCitkb25lPSIkc3RhdGVfZGlyIi9kb25lCisKKyMgVGhlIGNvbW1pdCBtZXNzYWdlIHRoYXQgaXMgcGxhbm5lZCB0byBiZSB1c2VkIGZvciBhbnkgY2hhbmdlcyB0aGF0CisjIG5lZWQgdG8gYmUgY29tbWl0dGVkIGZvbGxvd2luZyBhIHVzZXIgaW50ZXJhY3Rpb24uCittc2c9IiRzdGF0ZV9kaXIiL21lc3NhZ2UKKworIyBUaGUgZmlsZSBpbnRvIHdoaWNoIGlzIGFjY3VtdWxhdGVkIHRoZSBzdWdnZXN0ZWQgY29tbWl0IG1lc3NhZ2UgZm9yCisjIHNxdWFzaC9maXh1cCBjb21tYW5kcy4gIFdoZW4gdGhlIGZpcnN0IG9mIGEgc2VyaWVzIG9mIHNxdWFzaC9maXh1cHMKKyMgaXMgc2VlbiwgdGhlIGZpbGUgaXMgY3JlYXRlZCBhbmQgdGhlIGNvbW1pdCBtZXNzYWdlIGZyb20gdGhlCisjIHByZXZpb3VzIGNvbW1pdCBhbmQgZnJvbSB0aGUgZmlyc3Qgc3F1YXNoL2ZpeHVwIGNvbW1pdCBhcmUgd3JpdHRlbgorIyB0byBpdC4gIFRoZSBjb21taXQgbWVzc2FnZSBmb3IgZWFjaCBzdWJzZXF1ZW50IHNxdWFzaC9maXh1cCBjb21taXQKKyMgaXMgYXBwZW5kZWQgdG8gdGhlIGZpbGUgYXMgaXQgaXMgcHJvY2Vzc2VkLgorIworIyBUaGUgZmlyc3QgbGluZSBvZiB0aGUgZmlsZSBpcyBvZiB0aGUgZm9ybQorIyAgICAgIyBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdHMuCisjIHdoZXJlICRjb3VudCBpcyB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgd2hvc2UgbWVzc2FnZXMgaGF2ZSBiZWVuCisjIHdyaXR0ZW4gdG8gdGhlIGZpbGUgc28gZmFyIChpbmNsdWRpbmcgdGhlIGluaXRpYWwgInBpY2siIGNvbW1pdCkuCisjIEVhY2ggdGltZSB0aGF0IGEgY29tbWl0IG1lc3NhZ2UgaXMgcHJvY2Vzc2VkLCB0aGlzIGxpbmUgaXMgcmVhZCBhbmQKKyMgdXBkYXRlZC4gIEl0IGlzIGRlbGV0ZWQganVzdCBiZWZvcmUgdGhlIGNvbWJpbmVkIGNvbW1pdCBpcyBtYWRlLgorc3F1YXNoX21zZz0iJHN0YXRlX2RpciIvbWVzc2FnZS1zcXVhc2gKKworIyBJZiB0aGUgY3VycmVudCBzZXJpZXMgb2Ygc3F1YXNoL2ZpeHVwcyBoYXMgbm90IHlldCBpbmNsdWRlZCBhIHNxdWFzaAorIyBjb21tYW5kLCB0aGVuIHRoaXMgZmlsZSBleGlzdHMgYW5kIGhvbGRzIHRoZSBjb21taXQgbWVzc2FnZSBvZiB0aGUKKyMgb3JpZ2luYWwgInBpY2siIGNvbW1pdC4gIChJZiB0aGUgc2VyaWVzIGVuZHMgd2l0aG91dCBhICJzcXVhc2giCisjIGNvbW1hbmQsIHRoZW4gdGhpcyBjYW4gYmUgdXNlZCBhcyB0aGUgY29tbWl0IG1lc3NhZ2Ugb2YgdGhlIGNvbWJpbmVkCisjIGNvbW1pdCB3aXRob3V0IG9wZW5pbmcgdGhlIGVkaXRvci4pCitmaXh1cF9tc2c9IiRzdGF0ZV9kaXIiL21lc3NhZ2UtZml4dXAKKworIyAkcmV3cml0dGVuIGlzIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgZmlsZXMgZm9yIGVhY2gKKyMgY29tbWl0IHRoYXQgaXMgcmVhY2hhYmxlIGJ5IGF0IGxlYXN0IG9uZSBtZXJnZSBiYXNlIG9mICRoZWFkIGFuZAorIyAkdXBzdHJlYW0uIFRoZXkgYXJlIG5vdCBuZWNlc3NhcmlseSByZXdyaXR0ZW4sIGJ1dCB0aGVpciBjaGlsZHJlbgorIyBtaWdodCBiZS4gIFRoaXMgZW5zdXJlcyB0aGF0IGNvbW1pdHMgb24gbWVyZ2VkLCBidXQgb3RoZXJ3aXNlCisjIHVucmVsYXRlZCBzaWRlIGJyYW5jaGVzIGFyZSBsZWZ0IGFsb25lLiAoVGhpbmsgIlgiIGluIHRoZSBtYW4gcGFnZSdzCisjIGV4YW1wbGUuKQorcmV3cml0dGVuPSIkc3RhdGVfZGlyIi9yZXdyaXR0ZW4KKworZHJvcHBlZD0iJHN0YXRlX2RpciIvZHJvcHBlZAorCitlbmQ9IiRzdGF0ZV9kaXIiL2VuZAorbXNnbnVtPSIkc3RhdGVfZGlyIi9tc2dudW0KKworIyBBIHNjcmlwdCB0byBzZXQgdGhlIEdJVF9BVVRIT1JfTkFNRSwgR0lUX0FVVEhPUl9FTUFJTCwgYW5kCisjIEdJVF9BVVRIT1JfREFURSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGNvbW1pdCB0aGF0IGlzIGN1cnJlbnRseQorIyBiZWluZyByZWJhc2VkLgorYXV0aG9yX3NjcmlwdD0iJHN0YXRlX2RpciIvYXV0aG9yLXNjcmlwdAorCisjIFdoZW4gYW4gImVkaXQiIHJlYmFzZSBjb21tYW5kIGlzIGJlaW5nIHByb2Nlc3NlZCwgdGhlIFNIQTEgb2YgdGhlCisjIGNvbW1pdCB0byBiZSBlZGl0ZWQgaXMgcmVjb3JkZWQgaW4gdGhpcyBmaWxlLiAgV2hlbiAiZ2l0IHJlYmFzZQorIyAtLWNvbnRpbnVlIiBpcyBleGVjdXRlZCwgaWYgdGhlcmUgYXJlIGFueSBzdGFnZWQgY2hhbmdlcyB0aGVuIHRoZXkKKyMgd2lsbCBiZSBhbWVuZGVkIHRvIHRoZSBIRUFEIGNvbW1pdCwgYnV0IG9ubHkgcHJvdmlkZWQgdGhlIEhFQUQKKyMgY29tbWl0IGlzIHN0aWxsIHRoZSBjb21taXQgdG8gYmUgZWRpdGVkLiAgV2hlbiBhbnkgb3RoZXIgcmViYXNlCisjIGNvbW1hbmQgaXMgcHJvY2Vzc2VkLCB0aGlzIGZpbGUgaXMgZGVsZXRlZC4KK2FtZW5kPSIkc3RhdGVfZGlyIi9hbWVuZAorCisjIEZvciB0aGUgcG9zdC1yZXdyaXRlIGhvb2ssIHdlIG1ha2UgYSBsaXN0IG9mIHJld3JpdHRlbiBjb21taXRzIGFuZAorIyB0aGVpciBuZXcgc2hhMXMuICBUaGUgcmV3cml0dGVuLXBlbmRpbmcgbGlzdCBrZWVwcyB0aGUgc2hhMXMgb2YKKyMgY29tbWl0cyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQsIGJ1dCBub3QgY29tbWl0dGVkIHlldCwKKyMgZS5nLiBiZWNhdXNlIHRoZXkgYXJlIHdhaXRpbmcgZm9yIGEgJ3NxdWFzaCcgY29tbWFuZC4KK3Jld3JpdHRlbl9saXN0PSIkc3RhdGVfZGlyIi9yZXdyaXR0ZW4tbGlzdAorcmV3cml0dGVuX3BlbmRpbmc9IiRzdGF0ZV9kaXIiL3Jld3JpdHRlbi1wZW5kaW5nCisKKyMgV29yayBhcm91bmQgR2l0IGZvciBXaW5kb3dzJyBCYXNoIHdob3NlICJyZWFkIiBkb2VzIG5vdCBzdHJpcCBDUkxGCisjIGFuZCBsZWF2ZXMgQ1IgYXQgdGhlIGVuZCBpbnN0ZWFkLgorY3I9JChwcmludGYgIlwwMTUiKQorCityZXNvbHZlbXNnPSIKKyQoZ2V0dGV4dCAnUmVzb2x2ZSBhbGwgY29uZmxpY3RzIG1hbnVhbGx5LCBtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgd2l0aAorImdpdCBhZGQvcm0gPGNvbmZsaWN0ZWRfZmlsZXM+IiwgdGhlbiBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIuCitZb3UgY2FuIGluc3RlYWQgc2tpcCB0aGlzIGNvbW1pdDogcnVuICJnaXQgcmViYXNlIC0tc2tpcCIuCitUbyBhYm9ydCBhbmQgZ2V0IGJhY2sgdG8gdGhlIHN0YXRlIGJlZm9yZSAiZ2l0IHJlYmFzZSIsIHJ1biAiZ2l0IHJlYmFzZSAtLWFib3J0Ii4nKQorIgorCit3cml0ZV9iYXNpY19zdGF0ZSAoKSB7CisJZWNobyAiJGhlYWRfbmFtZSIgPiAiJHN0YXRlX2RpciIvaGVhZC1uYW1lICYmCisJZWNobyAiJG9udG8iID4gIiRzdGF0ZV9kaXIiL29udG8gJiYKKwllY2hvICIkb3JpZ19oZWFkIiA+ICIkc3RhdGVfZGlyIi9vcmlnLWhlYWQgJiYKKwl0ZXN0IHQgPSAiJEdJVF9RVUlFVCIgJiYgOiA+ICIkc3RhdGVfZGlyIi9xdWlldAorCXRlc3QgdCA9ICIkdmVyYm9zZSIgJiYgOiA+ICIkc3RhdGVfZGlyIi92ZXJib3NlCisJdGVzdCAtbiAiJHN0cmF0ZWd5IiAmJiBlY2hvICIkc3RyYXRlZ3kiID4gIiRzdGF0ZV9kaXIiL3N0cmF0ZWd5CisJdGVzdCAtbiAiJHN0cmF0ZWd5X29wdHMiICYmIGVjaG8gIiRzdHJhdGVneV9vcHRzIiA+IFwKKwkJIiRzdGF0ZV9kaXIiL3N0cmF0ZWd5X29wdHMKKwl0ZXN0IC1uICIkYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUiICYmIGVjaG8gIiRhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSIgPiBcCisJCSIkc3RhdGVfZGlyIi9hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZQorCXRlc3QgLW4gIiRncGdfc2lnbl9vcHQiICYmIGVjaG8gIiRncGdfc2lnbl9vcHQiID4gIiRzdGF0ZV9kaXIiL2dwZ19zaWduX29wdAorCXRlc3QgLW4gIiRzaWdub2ZmIiAmJiBlY2hvICIkc2lnbm9mZiIgPiIkc3RhdGVfZGlyIi9zaWdub2ZmCisJdGVzdCAtbiAiJHJlc2NoZWR1bGVfZmFpbGVkX2V4ZWMiICYmIDogPiAiJHN0YXRlX2RpciIvcmVzY2hlZHVsZS1mYWlsZWQtZXhlYworfQorCithcHBseV9hdXRvc3Rhc2ggKCkgeworCWlmIHRlc3QgLWYgIiRzdGF0ZV9kaXIvYXV0b3N0YXNoIgorCXRoZW4KKwkJc3Rhc2hfc2hhMT0kKGNhdCAiJHN0YXRlX2Rpci9hdXRvc3Rhc2giKQorCQlpZiBnaXQgc3Rhc2ggYXBwbHkgJHN0YXNoX3NoYTEgPi9kZXYvbnVsbCAyPiYxCisJCXRoZW4KKwkJCWVjaG8gIiQoZ2V0dGV4dCAnQXBwbGllZCBhdXRvc3Rhc2guJykiID4mMgorCQllbHNlCisJCQlnaXQgc3Rhc2ggc3RvcmUgLW0gImF1dG9zdGFzaCIgLXEgJHN0YXNoX3NoYTEgfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIkNhbm5vdCBzdG9yZSBcJHN0YXNoX3NoYTEiKSIKKwkJCWdldHRleHQgJ0FwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuCitZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLgorWW91IGNhbiBydW4gImdpdCBzdGFzaCBwb3AiIG9yICJnaXQgc3Rhc2ggZHJvcCIgYXQgYW55IHRpbWUuCisnID4mMgorCQlmaQorCWZpCit9CisKK291dHB1dCAoKSB7CisJY2FzZSAiJHZlcmJvc2UiIGluCisJJycpCisJCW91dHB1dD0kKCIkQCIgMj4mMSApCisJCXN0YXR1cz0kPworCQl0ZXN0ICRzdGF0dXMgIT0gMCAmJiBwcmludGYgIiVzXG4iICIkb3V0cHV0IgorCQlyZXR1cm4gJHN0YXR1cworCQk7OworCSopCisJCSIkQCIKKwkJOzsKKwllc2FjCit9CisKK3N0cmF0ZWd5X2FyZ3M9JHtzdHJhdGVneTorLS1zdHJhdGVneT0kc3RyYXRlZ3l9Cit0ZXN0IC1uICIkc3RyYXRlZ3lfb3B0cyIgJiYKK2V2YWwgJworCWZvciBzdHJhdGVneV9vcHQgaW4gJyIkc3RyYXRlZ3lfb3B0cyInCisJZG8KKwkJc3RyYXRlZ3lfYXJncz0iJHN0cmF0ZWd5X2FyZ3MgLVgkKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJHtzdHJhdGVneV9vcHQjLS19IikiCisJZG9uZQorJworCitHSVRfQ0hFUlJZX1BJQ0tfSEVMUD0iJHJlc29sdmVtc2ciCitleHBvcnQgR0lUX0NIRVJSWV9QSUNLX0hFTFAKKworY29tbWVudF9jaGFyPSQoZ2l0IGNvbmZpZyAtLWdldCBjb3JlLmNvbW1lbnRjaGFyIDI+L2Rldi9udWxsKQorY2FzZSAiJGNvbW1lbnRfY2hhciIgaW4KKycnIHwgYXV0bykKKwljb21tZW50X2NoYXI9IiMiCisJOzsKKz8pCisJOzsKKyopCisJY29tbWVudF9jaGFyPSQoZWNobyAiJGNvbW1lbnRfY2hhciIgfCBjdXQgLWMxKQorCTs7Citlc2FjCisKK3dhcm4gKCkgeworCXByaW50ZiAnJXNcbicgIiQqIiA+JjIKK30KKworIyBPdXRwdXQgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB0aGUgc3BlY2lmaWVkIGNvbW1pdC4KK2NvbW1pdF9tZXNzYWdlICgpIHsKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICIkMSIgfCBzZWQgIjEsL14kL2QiCit9CisKK29yaWdfcmVmbG9nX2FjdGlvbj0iJEdJVF9SRUZMT0dfQUNUSU9OIgorCitjb21tZW50X2Zvcl9yZWZsb2cgKCkgeworCWNhc2UgIiRvcmlnX3JlZmxvZ19hY3Rpb24iIGluCisJJyd8cmViYXNlKikKKwkJR0lUX1JFRkxPR19BQ1RJT049InJlYmFzZSAtaSAoJDEpIgorCQlleHBvcnQgR0lUX1JFRkxPR19BQ1RJT04KKwkJOzsKKwllc2FjCit9CisKK2xhc3RfY291bnQ9CittYXJrX2FjdGlvbl9kb25lICgpIHsKKwlzZWQgLWUgMXEgPCAiJHRvZG8iID4+ICIkZG9uZSIKKwlzZWQgLWUgMWQgPCAiJHRvZG8iID4+ICIkdG9kbyIubmV3CisJbXYgLWYgIiR0b2RvIi5uZXcgIiR0b2RvIgorCW5ld19jb3VudD0kKCggJChnaXQgc3RyaXBzcGFjZSAtLXN0cmlwLWNvbW1lbnRzIDwiJGRvbmUiIHwgd2MgLWwpICkpCisJZWNobyAkbmV3X2NvdW50ID4iJG1zZ251bSIKKwl0b3RhbD0kKCgkbmV3X2NvdW50ICsgJChnaXQgc3RyaXBzcGFjZSAtLXN0cmlwLWNvbW1lbnRzIDwiJHRvZG8iIHwgd2MgLWwpKSkKKwllY2hvICR0b3RhbCA+IiRlbmQiCisJaWYgdGVzdCAiJGxhc3RfY291bnQiICE9ICIkbmV3X2NvdW50IgorCXRoZW4KKwkJbGFzdF9jb3VudD0kbmV3X2NvdW50CisJCWV2YWxfZ2V0dGV4dCAiUmViYXNpbmcgKFwkbmV3X2NvdW50L1wkdG90YWwpIjsgcHJpbnRmICJcciIKKwkJdGVzdCAteiAiJHZlcmJvc2UiIHx8IGVjaG8KKwlmaQorfQorCisjIFB1dCB0aGUgbGFzdCBhY3Rpb24gbWFya2VkIGRvbmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdG9kbyBsaXN0CisjIGFnYWluLiBJZiB0aGVyZSBoYXMgbm90IGJlZW4gYW4gYWN0aW9uIG1hcmtlZCBkb25lIHlldCwgbGVhdmUgdGhlIGxpc3Qgb2YKKyMgaXRlbXMgb24gdGhlIHRvZG8gbGlzdCB1bmNoYW5nZWQuCityZXNjaGVkdWxlX2xhc3RfYWN0aW9uICgpIHsKKwl0YWlsIC1uIDEgIiRkb25lIiB8IGNhdCAtICIkdG9kbyIgPiIkdG9kbyIubmV3CisJc2VkIC1lIFwkZCA8IiRkb25lIiA+IiRkb25lIi5uZXcKKwltdiAtZiAiJHRvZG8iLm5ldyAiJHRvZG8iCisJbXYgLWYgIiRkb25lIi5uZXcgIiRkb25lIgorfQorCithcHBlbmRfdG9kb19oZWxwICgpIHsKKwlnZXR0ZXh0ICIKK0NvbW1hbmRzOgorcCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXQKK3IsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZQorZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZworcywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXQKK2YsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlCit4LCBleGVjIDxjb21taXQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbAorZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXQKK2wsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWUKK3QsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWwKK20sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl0KKy4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQncworLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhcworLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS4KKworVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS4KKyIgfCBnaXQgc3RyaXBzcGFjZSAtLWNvbW1lbnQtbGluZXMgPj4iJHRvZG8iCisKKwlpZiB0ZXN0ICQoZ2V0X21pc3NpbmdfY29tbWl0X2NoZWNrX2xldmVsKSA9IGVycm9yCisJdGhlbgorCQlnZXR0ZXh0ICIKK0RvIG5vdCByZW1vdmUgYW55IGxpbmUuIFVzZSAnZHJvcCcgZXhwbGljaXRseSB0byByZW1vdmUgYSBjb21taXQuCisiIHwgZ2l0IHN0cmlwc3BhY2UgLS1jb21tZW50LWxpbmVzID4+IiR0b2RvIgorCWVsc2UKKwkJZ2V0dGV4dCAiCitJZiB5b3UgcmVtb3ZlIGEgbGluZSBoZXJlIFRIQVQgQ09NTUlUIFdJTEwgQkUgTE9TVC4KKyIgfCBnaXQgc3RyaXBzcGFjZSAtLWNvbW1lbnQtbGluZXMgPj4iJHRvZG8iCisJZmkKK30KKworbWFrZV9wYXRjaCAoKSB7CisJc2hhMV9hbmRfcGFyZW50cz0iJChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0xICIkMSIpIgorCWNhc2UgIiRzaGExX2FuZF9wYXJlbnRzIiBpbgorCT8qJyAnPyonICc/KikKKwkJZ2l0IGRpZmYgLS1jYyAkc2hhMV9hbmRfcGFyZW50cworCQk7OworCT8qJyAnPyopCisJCWdpdCBkaWZmLXRyZWUgLXAgIiQxXiEiCisJCTs7CisJKikKKwkJZWNobyAiUm9vdCBjb21taXQiCisJCTs7CisJZXNhYyA+ICIkc3RhdGVfZGlyIi9wYXRjaAorCXRlc3QgLWYgIiRtc2ciIHx8CisJCWNvbW1pdF9tZXNzYWdlICIkMSIgPiAiJG1zZyIKKwl0ZXN0IC1mICIkYXV0aG9yX3NjcmlwdCIgfHwKKwkJZ2V0X2F1dGhvcl9pZGVudF9mcm9tX2NvbW1pdCAiJDEiID4gIiRhdXRob3Jfc2NyaXB0IgorfQorCitkaWVfd2l0aF9wYXRjaCAoKSB7CisJZWNobyAiJDEiID4gIiRzdGF0ZV9kaXIiL3N0b3BwZWQtc2hhCisJZ2l0IHVwZGF0ZS1yZWYgUkVCQVNFX0hFQUQgIiQxIgorCW1ha2VfcGF0Y2ggIiQxIgorCWRpZSAiJDIiCit9CisKK2V4aXRfd2l0aF9wYXRjaCAoKSB7CisJZWNobyAiJDEiID4gIiRzdGF0ZV9kaXIiL3N0b3BwZWQtc2hhCisJZ2l0IHVwZGF0ZS1yZWYgUkVCQVNFX0hFQUQgIiQxIgorCW1ha2VfcGF0Y2ggJDEKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPiAiJGFtZW5kIgorCWdwZ19zaWduX29wdF9xdW90ZWQ9JHtncGdfc2lnbl9vcHQ6KyQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkZ3BnX3NpZ25fb3B0Iil9CisJd2FybiAiJChldmFsX2dldHRleHQgIlwKK1lvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGgKKworCWdpdCBjb21taXQgLS1hbWVuZCBcJGdwZ19zaWduX29wdF9xdW90ZWQKKworT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuCisKKwlnaXQgcmViYXNlIC0tY29udGludWUiKSIKKwl3YXJuCisJZXhpdCAkMgorfQorCitkaWVfYWJvcnQgKCkgeworCWFwcGx5X2F1dG9zdGFzaAorCXJtIC1yZiAiJHN0YXRlX2RpciIKKwlkaWUgIiQxIgorfQorCitoYXNfYWN0aW9uICgpIHsKKwl0ZXN0IC1uICIkKGdpdCBzdHJpcHNwYWNlIC0tc3RyaXAtY29tbWVudHMgPCIkMSIpIgorfQorCitpc19lbXB0eV9jb21taXQoKSB7CisJdHJlZT0kKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgIiQxIl57dHJlZX0gMj4vZGV2L251bGwpIHx8IHsKKwkJc2hhMT0kMQorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJcJHNoYTE6IG5vdCBhIGNvbW1pdCB0aGF0IGNhbiBiZSBwaWNrZWQiKSIKKwl9CisJcHRyZWU9JChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICIkMSJeXnt0cmVlfSAyPi9kZXYvbnVsbCkgfHwKKwkJcHRyZWU9NGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNAorCXRlc3QgIiR0cmVlIiA9ICIkcHRyZWUiCit9CisKK2lzX21lcmdlX2NvbW1pdCgpCit7CisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICIkMSJeMiA+L2Rldi9udWxsIDI+JjEKK30KKworIyBSdW4gY29tbWFuZCB3aXRoIEdJVF9BVVRIT1JfTkFNRSwgR0lUX0FVVEhPUl9FTUFJTCwgYW5kCisjIEdJVF9BVVRIT1JfREFURSBleHBvcnRlZCBmcm9tIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgorZG9fd2l0aF9hdXRob3IgKCkgeworCSgKKwkJZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMIEdJVF9BVVRIT1JfREFURQorCQkiJEAiCisJKQorfQorCitnaXRfc2VxdWVuY2VfZWRpdG9yICgpIHsKKwlpZiB0ZXN0IC16ICIkR0lUX1NFUVVFTkNFX0VESVRPUiIKKwl0aGVuCisJCUdJVF9TRVFVRU5DRV9FRElUT1I9IiQoZ2l0IGNvbmZpZyBzZXF1ZW5jZS5lZGl0b3IpIgorCQlpZiBbIC16ICIkR0lUX1NFUVVFTkNFX0VESVRPUiIgXQorCQl0aGVuCisJCQlHSVRfU0VRVUVOQ0VfRURJVE9SPSIkKGdpdCB2YXIgR0lUX0VESVRPUikiIHx8IHJldHVybiAkPworCQlmaQorCWZpCisKKwlldmFsICIkR0lUX1NFUVVFTkNFX0VESVRPUiIgJyIkQCInCit9CisKK3BpY2tfb25lICgpIHsKKwlmZj0tLWZmCisKKwljYXNlICIkMSIgaW4gLW4pIHNoYTE9JDI7IGZmPSA7OyAqKSBzaGExPSQxIDs7IGVzYWMKKwljYXNlICIkZm9yY2VfcmViYXNlIiBpbiAnJykgOzsgPyopIGZmPSA7OyBlc2FjCisJb3V0cHV0IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJHNoYTEgfHwgZGllICIkKGV2YWxfZ2V0dGV4dCAiSW52YWxpZCBjb21taXQgbmFtZTogXCRzaGExIikiCisKKwlpZiBpc19lbXB0eV9jb21taXQgIiRzaGExIgorCXRoZW4KKwkJZW1wdHlfYXJncz0iLS1hbGxvdy1lbXB0eSIKKwlmaQorCisJcGlja19vbmVfcHJlc2VydmluZ19tZXJnZXMgIiRAIgorfQorCitwaWNrX29uZV9wcmVzZXJ2aW5nX21lcmdlcyAoKSB7CisJZmFzdF9mb3J3YXJkPXQKKwljYXNlICIkMSIgaW4KKwktbikKKwkJZmFzdF9mb3J3YXJkPWYKKwkJc2hhMT0kMgorCQk7OworCSopCisJCXNoYTE9JDEKKwkJOzsKKwllc2FjCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgJHNoYTEpCisKKwlpZiB0ZXN0IC1mICIkc3RhdGVfZGlyIi9jdXJyZW50LWNvbW1pdCAmJiB0ZXN0ICIkZmFzdF9mb3J3YXJkIiA9IHQKKwl0aGVuCisJCXdoaWxlIHJlYWQgY3VycmVudF9jb21taXQKKwkJZG8KKwkJCWdpdCByZXYtcGFyc2UgSEVBRCA+ICIkcmV3cml0dGVuIi8kY3VycmVudF9jb21taXQKKwkJZG9uZSA8IiRzdGF0ZV9kaXIiL2N1cnJlbnQtY29tbWl0CisJCXJtICIkc3RhdGVfZGlyIi9jdXJyZW50LWNvbW1pdCB8fAorCQkJZGllICIkKGdldHRleHQgIkNhbm5vdCB3cml0ZSBjdXJyZW50IGNvbW1pdCdzIHJlcGxhY2VtZW50IHNoYTEiKSIKKwlmaQorCisJZWNobyAkc2hhMSA+PiAiJHN0YXRlX2RpciIvY3VycmVudC1jb21taXQKKworCSMgcmV3cml0ZSBwYXJlbnRzOyBpZiBub25lIHdlcmUgcmV3cml0dGVuLCB3ZSBjYW4gZmFzdC1mb3J3YXJkLgorCW5ld19wYXJlbnRzPQorCXBlbmQ9IiAkKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgLTEgJHNoYTEgfCBjdXQgLWQnICcgLXMgLWYyLSkiCisJaWYgdGVzdCAiJHBlbmQiID0gIiAiCisJdGhlbgorCQlwZW5kPSIgcm9vdCIKKwlmaQorCXdoaWxlIFsgIiRwZW5kIiAhPSAiIiBdCisJZG8KKwkJcD0kKGV4cHIgIiRwZW5kIiA6ICcgXChbXiBdKlwpJykKKwkJcGVuZD0iJHtwZW5kIyAkcH0iCisKKwkJaWYgdGVzdCAtZiAiJHJld3JpdHRlbiIvJHAKKwkJdGhlbgorCQkJbmV3X3A9JChjYXQgIiRyZXdyaXR0ZW4iLyRwKQorCisJCQkjIElmIHRoZSB0b2RvIHJlb3JkZXJlZCBjb21taXRzLCBhbmQgb3VyIHBhcmVudCBpcyBtYXJrZWQgZm9yCisJCQkjIHJld3JpdGluZywgYnV0IGhhc24ndCBiZWVuIGdvdHRlbiB0byB5ZXQsIGFzc3VtZSB0aGUgdXNlciBtZWFudCB0bworCQkJIyBkcm9wIGl0IG9uIHRvcCBvZiB0aGUgY3VycmVudCBIRUFECisJCQlpZiB0ZXN0IC16ICIkbmV3X3AiCisJCQl0aGVuCisJCQkJbmV3X3A9JChnaXQgcmV2LXBhcnNlIEhFQUQpCisJCQlmaQorCisJCQl0ZXN0ICRwICE9ICRuZXdfcCAmJiBmYXN0X2ZvcndhcmQ9ZgorCQkJY2FzZSAiJG5ld19wYXJlbnRzIiBpbgorCQkJKiRuZXdfcCopCisJCQkJOzsgIyBkbyBub3RoaW5nOyB0aGF0IHBhcmVudCBpcyBhbHJlYWR5IHRoZXJlCisJCQkqKQorCQkJCW5ld19wYXJlbnRzPSIkbmV3X3BhcmVudHMgJG5ld19wIgorCQkJCTs7CisJCQllc2FjCisJCWVsc2UKKwkJCWlmIHRlc3QgLWYgIiRkcm9wcGVkIi8kcAorCQkJdGhlbgorCQkJCWZhc3RfZm9yd2FyZD1mCisJCQkJcmVwbGFjZW1lbnQ9IiQoY2F0ICIkZHJvcHBlZCIvJHApIgorCQkJCXRlc3QgLXogIiRyZXBsYWNlbWVudCIgJiYgcmVwbGFjZW1lbnQ9cm9vdAorCQkJCXBlbmQ9IiAkcmVwbGFjZW1lbnQkcGVuZCIKKwkJCWVsc2UKKwkJCQluZXdfcGFyZW50cz0iJG5ld19wYXJlbnRzICRwIgorCQkJZmkKKwkJZmkKKwlkb25lCisJY2FzZSAkZmFzdF9mb3J3YXJkIGluCisJdCkKKwkJb3V0cHV0IHdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJGYXN0LWZvcndhcmQgdG8gXCRzaGExIikiCisJCW91dHB1dCBnaXQgcmVzZXQgLS1oYXJkICRzaGExIHx8CisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJDYW5ub3QgZmFzdC1mb3J3YXJkIHRvIFwkc2hhMSIpIgorCQk7OworCWYpCisJCWZpcnN0X3BhcmVudD0kKGV4cHIgIiRuZXdfcGFyZW50cyIgOiAnIFwoW14gXSpcKScpCisKKwkJaWYgWyAiJDEiICE9ICItbiIgXQorCQl0aGVuCisJCQkjIGRldGFjaCBIRUFEIHRvIGN1cnJlbnQgcGFyZW50CisJCQlvdXRwdXQgZ2l0IGNoZWNrb3V0ICRmaXJzdF9wYXJlbnQgMj4gL2Rldi9udWxsIHx8CisJCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQ2Fubm90IG1vdmUgSEVBRCB0byBcJGZpcnN0X3BhcmVudCIpIgorCQlmaQorCisJCWNhc2UgIiRuZXdfcGFyZW50cyIgaW4KKwkJJyAnKicgJyopCisJCQl0ZXN0ICJhJDEiID0gYS1uICYmIGRpZSAiJChldmFsX2dldHRleHQgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiBcJHNoYTEiKSIKKworCQkJIyByZWRvIG1lcmdlCisJCQlhdXRob3Jfc2NyaXB0X2NvbnRlbnQ9JChnZXRfYXV0aG9yX2lkZW50X2Zyb21fY29tbWl0ICRzaGExKQorCQkJZXZhbCAiJGF1dGhvcl9zY3JpcHRfY29udGVudCIKKwkJCW1zZ19jb250ZW50PSIkKGNvbW1pdF9tZXNzYWdlICRzaGExKSIKKwkJCSMgTm8gcG9pbnQgaW4gbWVyZ2luZyB0aGUgZmlyc3QgcGFyZW50LCB0aGF0J3MgSEVBRAorCQkJbmV3X3BhcmVudHM9JHtuZXdfcGFyZW50cyMgJGZpcnN0X3BhcmVudH0KKwkJCW1lcmdlX2FyZ3M9Ii0tbm8tbG9nIC0tbm8tZmYiCisJCQlpZiAhIGRvX3dpdGhfYXV0aG9yIG91dHB1dCBldmFsIFwKKwkJCQlnaXQgbWVyZ2UgJHtncGdfc2lnbl9vcHQ6KyQoZ2l0IHJldi1wYXJzZSBcCisJCQkJCS0tc3EtcXVvdGUgIiRncGdfc2lnbl9vcHQiKX0gXAorCQkJCSRhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSAiJG1lcmdlX2FyZ3MiIFwKKwkJCQkiJHN0cmF0ZWd5X2FyZ3MiIFwKKwkJCQktbSAiJChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRtc2dfY29udGVudCIpIiBcCisJCQkJIiRuZXdfcGFyZW50cyIKKwkJCXRoZW4KKwkJCQlwcmludGYgIiVzXG4iICIkbXNnX2NvbnRlbnQiID4gIiRHSVRfRElSIi9NRVJHRV9NU0cKKwkJCQlkaWVfd2l0aF9wYXRjaCAkc2hhMSAiJChldmFsX2dldHRleHQgIkVycm9yIHJlZG9pbmcgbWVyZ2UgXCRzaGExIikiCisJCQlmaQorCQkJZWNobyAiJHNoYTEgJChnaXQgcmV2LXBhcnNlIEhFQUReMCkiID4+ICIkcmV3cml0dGVuX2xpc3QiCisJCQk7OworCQkqKQorCQkJb3V0cHV0IGV2YWwgZ2l0IGNoZXJyeS1waWNrICRhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSBcCisJCQkJJGFsbG93X2VtcHR5X21lc3NhZ2UgXAorCQkJCSR7Z3BnX3NpZ25fb3B0OiskKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJGdwZ19zaWduX29wdCIpfSBcCisJCQkJIiRzdHJhdGVneV9hcmdzIiAiJEAiIHx8CisJCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIiQoZXZhbF9nZXR0ZXh0ICJDb3VsZCBub3QgcGljayBcJHNoYTEiKSIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwllc2FjCit9CisKK3RoaXNfbnRoX2NvbW1pdF9tZXNzYWdlICgpIHsKKwluPSQxCisJZXZhbF9nZXR0ZXh0ICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjXCR7bn06IgorfQorCitza2lwX250aF9jb21taXRfbWVzc2FnZSAoKSB7CisJbj0kMQorCWV2YWxfZ2V0dGV4dCAiVGhlIGNvbW1pdCBtZXNzYWdlICNcJHtufSB3aWxsIGJlIHNraXBwZWQ6IgorfQorCit1cGRhdGVfc3F1YXNoX21lc3NhZ2VzICgpIHsKKwlpZiB0ZXN0IC1mICIkc3F1YXNoX21zZyI7IHRoZW4KKwkJbXYgIiRzcXVhc2hfbXNnIiAiJHNxdWFzaF9tc2ciLmJhayB8fCBleGl0CisJCWNvdW50PSQoKCQoc2VkIC1uIFwKKwkJCS1lICIxcy9eJGNvbW1lbnRfY2hhclteMC05XSpcKFswLTldWzAtOV0qXCkuKi9cMS9wIiBcCisJCQktZSAicSIgPCAiJHNxdWFzaF9tc2ciLmJhaykrMSkpCisJCXsKKwkJCXByaW50ZiAnJXNcbicgIiRjb21tZW50X2NoYXIgJChldmFsX25nZXR0ZXh0IFwKKwkJCQkiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIFwkY291bnQgY29tbWl0LiIgXAorCQkJCSJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgXCRjb3VudCBjb21taXRzLiIgXAorCQkJCSRjb3VudCkiCisJCQlzZWQgLWUgMWQgLWUgJzIsL14uL3sKKwkJCQkvXiQvZAorCQkJfScgPCIkc3F1YXNoX21zZyIuYmFrCisJCX0gPiIkc3F1YXNoX21zZyIKKwllbHNlCisJCWNvbW1pdF9tZXNzYWdlIEhFQUQgPiIkZml4dXBfbXNnIiB8fAorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJDYW5ub3Qgd3JpdGUgXCRmaXh1cF9tc2ciKSIKKwkJY291bnQ9MgorCQl7CisJCQlwcmludGYgJyVzXG4nICIkY29tbWVudF9jaGFyICQoZ2V0dGV4dCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cy4iKSIKKwkJCXByaW50ZiAnJXNcbicgIiRjb21tZW50X2NoYXIgJChnZXR0ZXh0ICJUaGlzIGlzIHRoZSAxc3QgY29tbWl0IG1lc3NhZ2U6IikiCisJCQllY2hvCisJCQljYXQgIiRmaXh1cF9tc2ciCisJCX0gPiIkc3F1YXNoX21zZyIKKwlmaQorCWNhc2UgJDEgaW4KKwlzcXVhc2gpCisJCXJtIC1mICIkZml4dXBfbXNnIgorCQllY2hvCisJCXByaW50ZiAnJXNcbicgIiRjb21tZW50X2NoYXIgJCh0aGlzX250aF9jb21taXRfbWVzc2FnZSAkY291bnQpIgorCQllY2hvCisJCWNvbW1pdF9tZXNzYWdlICQyCisJCTs7CisJZml4dXApCisJCWVjaG8KKwkJcHJpbnRmICclc1xuJyAiJGNvbW1lbnRfY2hhciAkKHNraXBfbnRoX2NvbW1pdF9tZXNzYWdlICRjb3VudCkiCisJCWVjaG8KKwkJIyBDaGFuZ2UgdGhlIHNwYWNlIGFmdGVyIHRoZSBjb21tZW50IGNoYXJhY3RlciB0byBUQUI6CisJCWNvbW1pdF9tZXNzYWdlICQyIHwgZ2l0IHN0cmlwc3BhY2UgLS1jb21tZW50LWxpbmVzIHwgc2VkIC1lICdzLyAvCS8nCisJCTs7CisJZXNhYyA+PiIkc3F1YXNoX21zZyIKK30KKworcGVla19uZXh0X2NvbW1hbmQgKCkgeworCWdpdCBzdHJpcHNwYWNlIC0tc3RyaXAtY29tbWVudHMgPCIkdG9kbyIgfCBzZWQgLW4gLWUgJ3MvIC4qLy9wJyAtZSBxCit9CisKKyMgQSBzcXVhc2gvZml4dXAgaGFzIGZhaWxlZC4gIFByZXBhcmUgdGhlIGxvbmcgdmVyc2lvbiBvZiB0aGUgc3F1YXNoCisjIGNvbW1pdCBtZXNzYWdlLCB0aGVuIGRpZV93aXRoX3BhdGNoLiAgVGhpcyBjb2RlIHBhdGggcmVxdWlyZXMgdGhlCisjIHVzZXIgdG8gZWRpdCB0aGUgY29tYmluZWQgY29tbWl0IG1lc3NhZ2UgZm9yIGFsbCBjb21taXRzIHRoYXQgaGF2ZQorIyBiZWVuIHNxdWFzaGVkL2ZpeGVkdXAgc28gZmFyLiAgU28gYWxzbyBlcmFzZSB0aGUgb2xkIHNxdWFzaAorIyBtZXNzYWdlcywgZWZmZWN0aXZlbHkgY2F1c2luZyB0aGUgY29tYmluZWQgY29tbWl0IHRvIGJlIHVzZWQgYXMgdGhlCisjIG5ldyBiYXNpcyBmb3IgYW55IGZ1cnRoZXIgc3F1YXNoL2ZpeHVwcy4gIEFyZ3M6IHNoYTEgcmVzdAorZGllX2ZhaWxlZF9zcXVhc2goKSB7CisJc2hhMT0kMQorCXJlc3Q9JDIKKwltdiAiJHNxdWFzaF9tc2ciICIkbXNnIiB8fCBleGl0CisJcm0gLWYgIiRmaXh1cF9tc2ciCisJY3AgIiRtc2ciICIkR0lUX0RJUiIvTUVSR0VfTVNHIHx8IGV4aXQKKwl3YXJuCisJd2FybiAiJChldmFsX2dldHRleHQgIkNvdWxkIG5vdCBhcHBseSBcJHNoYTEuLi4gXCRyZXN0IikiCisJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIiIKK30KKworZmx1c2hfcmV3cml0dGVuX3BlbmRpbmcoKSB7CisJdGVzdCAtcyAiJHJld3JpdHRlbl9wZW5kaW5nIiB8fCByZXR1cm4KKwluZXdzaGExPSIkKGdpdCByZXYtcGFyc2UgSEVBRF4wKSIKKwlzZWQgInMvJC8gJG5ld3NoYTEvIiA8ICIkcmV3cml0dGVuX3BlbmRpbmciID4+ICIkcmV3cml0dGVuX2xpc3QiCisJcm0gLWYgIiRyZXdyaXR0ZW5fcGVuZGluZyIKK30KKworcmVjb3JkX2luX3Jld3JpdHRlbigpIHsKKwlvbGRzaGExPSIkKGdpdCByZXYtcGFyc2UgJDEpIgorCWVjaG8gIiRvbGRzaGExIiA+PiAiJHJld3JpdHRlbl9wZW5kaW5nIgorCisJY2FzZSAiJChwZWVrX25leHRfY29tbWFuZCkiIGluCisJc3F1YXNofHN8Zml4dXB8ZikKKwkJOzsKKwkqKQorCQlmbHVzaF9yZXdyaXR0ZW5fcGVuZGluZworCQk7OworCWVzYWMKK30KKworZG9fcGljayAoKSB7CisJc2hhMT0kMQorCXJlc3Q9JDIKKwlpZiB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiRzcXVhc2hfb250byIKKwl0aGVuCisJCSMgU2V0IHRoZSBjb3JyZWN0IGNvbW1pdCBtZXNzYWdlIGFuZCBhdXRob3IgaW5mbyBvbiB0aGUKKwkJIyBzZW50aW5lbCByb290IGJlZm9yZSBjaGVycnktcGlja2luZyB0aGUgb3JpZ2luYWwgY2hhbmdlcworCQkjIHdpdGhvdXQgY29tbWl0dGluZyAoLW4pLiAgRmluYWxseSwgdXBkYXRlIHRoZSBzZW50aW5lbCBhZ2FpbgorCQkjIHRvIGluY2x1ZGUgdGhlc2UgY2hhbmdlcy4gIElmIHRoZSBjaGVycnktcGljayByZXN1bHRzIGluIGEKKwkJIyBjb25mbGljdCwgdGhpcyBtZWFucyBvdXIgYmVoYXZpb3VyIGlzIHNpbWlsYXIgdG8gYSBzdGFuZGFyZAorCQkjIGZhaWxlZCBjaGVycnktcGljayBkdXJpbmcgcmViYXNlLCB3aXRoIGEgZGlydHkgaW5kZXggdG8KKwkJIyByZXNvbHZlIGJlZm9yZSBtYW51YWxseSBydW5uaW5nIGdpdCBjb21taXQgLS1hbWVuZCB0aGVuIGdpdAorCQkjIHJlYmFzZSAtLWNvbnRpbnVlLgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC0tYW1lbmQgXAorCQkJICAgLS1uby1wb3N0LXJld3JpdGUgLW4gLXEgLUMgJHNoYTEgJHNpZ25vZmYgJiYKKwkJCXBpY2tfb25lIC1uICRzaGExICYmCisJCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIFwKKwkJCQkgICAtLWFtZW5kIC0tbm8tcG9zdC1yZXdyaXRlIC1uIC1xIC1DICRzaGExICRzaWdub2ZmIFwKKwkJCQkgICAke2dwZ19zaWduX29wdDorIiRncGdfc2lnbl9vcHQifSB8fAorCQkJCSAgIGRpZV93aXRoX3BhdGNoICRzaGExICIkKGV2YWxfZ2V0dGV4dCAiQ291bGQgbm90IGFwcGx5IFwkc2hhMS4uLiBcJHJlc3QiKSIKKwllbHNlCisJCXBpY2tfb25lICRzaGExIHx8CisJCQlkaWVfd2l0aF9wYXRjaCAkc2hhMSAiJChldmFsX2dldHRleHQgIkNvdWxkIG5vdCBhcHBseSBcJHNoYTEuLi4gXCRyZXN0IikiCisJZmkKK30KKworZG9fbmV4dCAoKSB7CisJcm0gLWYgIiRtc2ciICIkYXV0aG9yX3NjcmlwdCIgIiRhbWVuZCIgIiRzdGF0ZV9kaXIiL3N0b3BwZWQtc2hhIHx8IGV4aXQKKwlyZWFkIC1yIGNvbW1hbmQgc2hhMSByZXN0IDwgIiR0b2RvIgorCWNhc2UgIiRjb21tYW5kIiBpbgorCSIkY29tbWVudF9jaGFyIip8Jyd8bm9vcHxkcm9wfGQpCisJCW1hcmtfYWN0aW9uX2RvbmUKKwkJOzsKKwkiJGNyIikKKwkJIyBXb3JrIGFyb3VuZCBDUiBsZWZ0IGJ5ICJyZWFkIiAoZS5nLiB3aXRoIEdpdCBmb3IgV2luZG93cycgQmFzaCkuCisJCW1hcmtfYWN0aW9uX2RvbmUKKwkJOzsKKwlwaWNrfHApCisJCWNvbW1lbnRfZm9yX3JlZmxvZyBwaWNrCisKKwkJbWFya19hY3Rpb25fZG9uZQorCQlkb19waWNrICRzaGExICIkcmVzdCIKKwkJcmVjb3JkX2luX3Jld3JpdHRlbiAkc2hhMQorCQk7OworCXJld29yZHxyKQorCQljb21tZW50X2Zvcl9yZWZsb2cgcmV3b3JkCisKKwkJbWFya19hY3Rpb25fZG9uZQorCQlkb19waWNrICRzaGExICIkcmVzdCIKKwkJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tbm8tcG9zdC1yZXdyaXRlICR7Z3BnX3NpZ25fb3B0OisiJGdwZ19zaWduX29wdCJ9IFwKKwkJCSRhbGxvd19lbXB0eV9tZXNzYWdlIHx8IHsKKwkJCXdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJcCitDb3VsZCBub3QgYW1lbmQgY29tbWl0IGFmdGVyIHN1Y2Nlc3NmdWxseSBwaWNraW5nIFwkc2hhMS4uLiBcJHJlc3QKK1RoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlLCBvciB0aGUgcHJlLWNvbW1pdCBob29rCitmYWlsZWQuIElmIHRoZSBwcmUtY29tbWl0IGhvb2sgZmFpbGVkLCB5b3UgbWF5IG5lZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUgYmVmb3JlCit5b3UgYXJlIGFibGUgdG8gcmV3b3JkIHRoZSBjb21taXQuIikiCisJCQlleGl0X3dpdGhfcGF0Y2ggJHNoYTEgMQorCQl9CisJCXJlY29yZF9pbl9yZXdyaXR0ZW4gJHNoYTEKKwkJOzsKKwllZGl0fGUpCisJCWNvbW1lbnRfZm9yX3JlZmxvZyBlZGl0CisKKwkJbWFya19hY3Rpb25fZG9uZQorCQlkb19waWNrICRzaGExICIkcmVzdCIKKwkJc2hhMV9hYmJyZXY9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJHNoYTEpCisJCXdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJTdG9wcGVkIGF0IFwkc2hhMV9hYmJyZXYuLi4gXCRyZXN0IikiCisJCWV4aXRfd2l0aF9wYXRjaCAkc2hhMSAwCisJCTs7CisJc3F1YXNofHN8Zml4dXB8ZikKKwkJY2FzZSAiJGNvbW1hbmQiIGluCisJCXNxdWFzaHxzKQorCQkJc3F1YXNoX3N0eWxlPXNxdWFzaAorCQkJOzsKKwkJZml4dXB8ZikKKwkJCXNxdWFzaF9zdHlsZT1maXh1cAorCQkJOzsKKwkJZXNhYworCQljb21tZW50X2Zvcl9yZWZsb2cgJHNxdWFzaF9zdHlsZQorCisJCXRlc3QgLWYgIiRkb25lIiAmJiBoYXNfYWN0aW9uICIkZG9uZSIgfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIkNhbm5vdCAnXCRzcXVhc2hfc3R5bGUnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiKSIKKworCQltYXJrX2FjdGlvbl9kb25lCisJCXVwZGF0ZV9zcXVhc2hfbWVzc2FnZXMgJHNxdWFzaF9zdHlsZSAkc2hhMQorCQlhdXRob3Jfc2NyaXB0X2NvbnRlbnQ9JChnZXRfYXV0aG9yX2lkZW50X2Zyb21fY29tbWl0IEhFQUQpCisJCWVjaG8gIiRhdXRob3Jfc2NyaXB0X2NvbnRlbnQiID4gIiRhdXRob3Jfc2NyaXB0IgorCQlldmFsICIkYXV0aG9yX3NjcmlwdF9jb250ZW50IgorCQlpZiAhIHBpY2tfb25lIC1uICRzaGExCisJCXRoZW4KKwkJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+IiRhbWVuZCIKKwkJCWRpZV9mYWlsZWRfc3F1YXNoICRzaGExICIkcmVzdCIKKwkJZmkKKwkJY2FzZSAiJChwZWVrX25leHRfY29tbWFuZCkiIGluCisJCXNxdWFzaHxzfGZpeHVwfGYpCisJCQkjIFRoaXMgaXMgYW4gaW50ZXJtZWRpYXRlIGNvbW1pdDsgaXRzIG1lc3NhZ2Ugd2lsbCBvbmx5IGJlCisJCQkjIHVzZWQgaW4gY2FzZSBvZiB0cm91YmxlLiAgU28gdXNlIHRoZSBsb25nIHZlcnNpb246CisJCQlkb193aXRoX2F1dGhvciBvdXRwdXQgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tbm8tdmVyaWZ5IC1GICIkc3F1YXNoX21zZyIgXAorCQkJCSR7Z3BnX3NpZ25fb3B0OisiJGdwZ19zaWduX29wdCJ9ICRhbGxvd19lbXB0eV9tZXNzYWdlIHx8CisJCQkJZGllX2ZhaWxlZF9zcXVhc2ggJHNoYTEgIiRyZXN0IgorCQkJOzsKKwkJKikKKwkJCSMgVGhpcyBpcyB0aGUgZmluYWwgY29tbWFuZCBvZiB0aGlzIHNxdWFzaC9maXh1cCBncm91cAorCQkJaWYgdGVzdCAtZiAiJGZpeHVwX21zZyIKKwkJCXRoZW4KKwkJCQlkb193aXRoX2F1dGhvciBnaXQgY29tbWl0IC0tYW1lbmQgLS1uby12ZXJpZnkgLUYgIiRmaXh1cF9tc2ciIFwKKwkJCQkJJHtncGdfc2lnbl9vcHQ6KyIkZ3BnX3NpZ25fb3B0In0gJGFsbG93X2VtcHR5X21lc3NhZ2UgfHwKKwkJCQkJZGllX2ZhaWxlZF9zcXVhc2ggJHNoYTEgIiRyZXN0IgorCQkJZWxzZQorCQkJCWNwICIkc3F1YXNoX21zZyIgIiRHSVRfRElSIi9TUVVBU0hfTVNHIHx8IGV4aXQKKwkJCQlybSAtZiAiJEdJVF9ESVIiL01FUkdFX01TRworCQkJCWRvX3dpdGhfYXV0aG9yIGdpdCBjb21taXQgLS1hbWVuZCAtLW5vLXZlcmlmeSAtRiAiJEdJVF9ESVIiL1NRVUFTSF9NU0cgLWUgXAorCQkJCQkke2dwZ19zaWduX29wdDorIiRncGdfc2lnbl9vcHQifSAkYWxsb3dfZW1wdHlfbWVzc2FnZSB8fAorCQkJCQlkaWVfZmFpbGVkX3NxdWFzaCAkc2hhMSAiJHJlc3QiCisJCQlmaQorCQkJcm0gLWYgIiRzcXVhc2hfbXNnIiAiJGZpeHVwX21zZyIKKwkJCTs7CisJCWVzYWMKKwkJcmVjb3JkX2luX3Jld3JpdHRlbiAkc2hhMQorCQk7OworCXh8ImV4ZWMiKQorCQlyZWFkIC1yIGNvbW1hbmQgcmVzdCA8ICIkdG9kbyIKKwkJbWFya19hY3Rpb25fZG9uZQorCQlldmFsX2dldHRleHRsbiAiRXhlY3V0aW5nOiBcJHJlc3QiCisJCSIke1NIRUxMOi1AU0hFTExfUEFUSEB9IiAtYyAiJHJlc3QiICMgQWN0dWFsIGV4ZWN1dGlvbgorCQlzdGF0dXM9JD8KKwkJIyBSdW4gaW4gc3Vic2hlbGwgYmVjYXVzZSByZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSBjYW4gZGllLgorCQlkaXJ0eT1mCisJCShyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSAicmViYXNlIiAyPi9kZXYvbnVsbCkgfHwgZGlydHk9dAorCQlpZiB0ZXN0ICIkc3RhdHVzIiAtbmUgMAorCQl0aGVuCisJCQl3YXJuICIkKGV2YWxfZ2V0dGV4dCAiRXhlY3V0aW9uIGZhaWxlZDogXCRyZXN0IikiCisJCQl0ZXN0ICIkZGlydHkiID0gZiB8fAorCQkJCXdhcm4gIiQoZ2V0dGV4dCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiKSIKKworCQkJd2FybiAiJChnZXR0ZXh0ICJcCitZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuCisKKwlnaXQgcmViYXNlIC0tY29udGludWUiKSIKKwkJCXdhcm4KKwkJCWlmIHRlc3QgJHN0YXR1cyAtZXEgMTI3CQkjIGNvbW1hbmQgbm90IGZvdW5kCisJCQl0aGVuCisJCQkJc3RhdHVzPTEKKwkJCWZpCisJCQlleGl0ICIkc3RhdHVzIgorCQllbGlmIHRlc3QgIiRkaXJ0eSIgPSB0CisJCXRoZW4KKwkJCSMgVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKwkJCXdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJcCitFeGVjdXRpb24gc3VjY2VlZGVkOiBcJHJlc3QKK2J1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlCitDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW4KKworCWdpdCByZWJhc2UgLS1jb250aW51ZSIpIgorCQkJd2FybgorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJKikKKwkJd2FybiAiJChldmFsX2dldHRleHQgIlVua25vd24gY29tbWFuZDogXCRjb21tYW5kIFwkc2hhMSBcJHJlc3QiKSIKKwkJZml4dG9kbz0iJChnZXR0ZXh0ICJQbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIpIgorCQlpZiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICIkc2hhMSIgPi9kZXYvbnVsbAorCQl0aGVuCisJCQlkaWVfd2l0aF9wYXRjaCAkc2hhMSAiJGZpeHRvZG8iCisJCWVsc2UKKwkJCWRpZSAiJGZpeHRvZG8iCisJCWZpCisJCTs7CisJZXNhYworCXRlc3QgLXMgIiR0b2RvIiAmJiByZXR1cm4KKworCWNvbW1lbnRfZm9yX3JlZmxvZyBmaW5pc2ggJiYKKwluZXdoZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhc2UgJGhlYWRfbmFtZSBpbgorCXJlZnMvKikKKwkJbWVzc2FnZT0iJEdJVF9SRUZMT0dfQUNUSU9OOiAkaGVhZF9uYW1lIG9udG8gJG9udG8iICYmCisJCWdpdCB1cGRhdGUtcmVmIC1tICIkbWVzc2FnZSIgJGhlYWRfbmFtZSAkbmV3aGVhZCAkb3JpZ19oZWFkICYmCisJCWdpdCBzeW1ib2xpYy1yZWYgXAorCQkgIC1tICIkR0lUX1JFRkxPR19BQ1RJT046IHJldHVybmluZyB0byAkaGVhZF9uYW1lIiBcCisJCSAgSEVBRCAkaGVhZF9uYW1lCisJCTs7CisJZXNhYyAmJiB7CisJCXRlc3QgISAtZiAiJHN0YXRlX2RpciIvdmVyYm9zZSB8fAorCQkJZ2l0IGRpZmYtdHJlZSAtLXN0YXQgJG9yaWdfaGVhZC4uSEVBRAorCX0gJiYKKwl7CisJCXRlc3QgLXMgIiRyZXdyaXR0ZW5fbGlzdCIgJiYKKwkJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1yZWJhc2UgPCAiJHJld3JpdHRlbl9saXN0IiB8fAorCQl0cnVlICMgd2UgZG9uJ3QgY2FyZSBpZiB0aGlzIGNvcHlpbmcgZmFpbGVkCisJfSAmJgorCWhvb2s9IiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIGhvb2tzL3Bvc3QtcmV3cml0ZSkiCisJaWYgdGVzdCAteCAiJGhvb2siICYmIHRlc3QgLXMgIiRyZXdyaXR0ZW5fbGlzdCI7IHRoZW4KKwkJIiRob29rIiByZWJhc2UgPCAiJHJld3JpdHRlbl9saXN0IgorCQl0cnVlICMgd2UgZG9uJ3QgY2FyZSBpZiB0aGlzIGhvb2sgZmFpbGVkCisJZmkgJiYKKwkJd2FybiAiJChldmFsX2dldHRleHQgIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkIFwkaGVhZF9uYW1lLiIpIgorCisJcmV0dXJuIDEgIyBub3QgZmFpbHVyZTsganVzdCB0byBicmVhayB0aGUgZG9fcmVzdCBsb29wCit9CisKKyMgY2FuIG9ubHkgcmV0dXJuIDAsIHdoZW4gdGhlIGluZmluaXRlIGxvb3AgYnJlYWtzCitkb19yZXN0ICgpIHsKKwl3aGlsZSA6CisJZG8KKwkJZG9fbmV4dCB8fCBicmVhaworCWRvbmUKK30KKworZXhwYW5kX3RvZG9faWRzKCkgeworCWdpdCByZWJhc2UtLWludGVyYWN0aXZlIC0tZXhwYW5kLWlkcworfQorCitjb2xsYXBzZV90b2RvX2lkcygpIHsKKwlnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSAtLXNob3J0ZW4taWRzCit9CisKKyMgU3dpdGNoIHRvIHRoZSBicmFuY2ggaW4gJGludG8gYW5kIG5vdGlmeSBpdCBpbiB0aGUgcmVmbG9nCitjaGVja291dF9vbnRvICgpIHsKKwlHSVRfUkVGTE9HX0FDVElPTj0iJEdJVF9SRUZMT0dfQUNUSU9OOiBjaGVja291dCAkb250b19uYW1lIgorCW91dHB1dCBnaXQgY2hlY2tvdXQgJG9udG8gfHwgZGllX2Fib3J0ICIkKGdldHRleHQgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIpIgorCWdpdCB1cGRhdGUtcmVmIE9SSUdfSEVBRCAkb3JpZ19oZWFkCit9CisKK2dldF9taXNzaW5nX2NvbW1pdF9jaGVja19sZXZlbCAoKSB7CisJY2hlY2tfbGV2ZWw9JChnaXQgY29uZmlnIC0tZ2V0IHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrKQorCWNoZWNrX2xldmVsPSR7Y2hlY2tfbGV2ZWw6LWlnbm9yZX0KKwkjIERvbid0IGJlIGNhc2Ugc2Vuc2l0aXZlCisJcHJpbnRmICclcycgIiRjaGVja19sZXZlbCIgfCB0ciAnQS1aJyAnYS16JworfQorCisjIEluaXRpYXRlIGFuIGFjdGlvbi4gSWYgdGhlIGNhbm5vdCBiZSBhbnkKKyMgZnVydGhlciBhY3Rpb24gaXQgIG1heSBleGVjIGEgY29tbWFuZAorIyBvciBleGl0IGFuZCBub3QgcmV0dXJuLgorIworIyBUT0RPOiBDb25zaWRlciBhIGNsZWFuZXIgcmV0dXJuIG1vZGVsIHNvIGl0CisjIG5ldmVyIGV4aXRzIGFuZCBhbHdheXMgcmV0dXJuIDAgaWYgcHJvY2VzcworIyBpcyBjb21wbGV0ZS4KKyMKKyMgUGFyYW1ldGVyIDEgaXMgdGhlIGFjdGlvbiB0byBpbml0aWF0ZS4KKyMKKyMgUmV0dXJucyAwIGlmIHRoZSBhY3Rpb24gd2FzIGFibGUgdG8gY29tcGxldGUKKyMgYW5kIGlmIDEgaWYgZnVydGhlciBwcm9jZXNzaW5nIGlzIHJlcXVpcmVkLgoraW5pdGlhdGVfYWN0aW9uICgpIHsKKwljYXNlICIkMSIgaW4KKwljb250aW51ZSkKKwkJIyBkbyB3ZSBoYXZlIGFueXRoaW5nIHRvIGNvbW1pdD8KKwkJaWYgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFEIC0tCisJCXRoZW4KKwkJCSMgTm90aGluZyB0byBjb21taXQgLS0gc2tpcCB0aGlzIGNvbW1pdAorCisJCQl0ZXN0ICEgLWYgIiRHSVRfRElSIi9DSEVSUllfUElDS19IRUFEIHx8CisJCQlybSAiJEdJVF9ESVIiL0NIRVJSWV9QSUNLX0hFQUQgfHwKKwkJCWRpZSAiJChnZXR0ZXh0ICJDb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiKSIKKwkJZWxzZQorCQkJaWYgISB0ZXN0IC1mICIkYXV0aG9yX3NjcmlwdCIKKwkJCXRoZW4KKwkJCQlncGdfc2lnbl9vcHRfcXVvdGVkPSR7Z3BnX3NpZ25fb3B0OiskKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJGdwZ19zaWduX29wdCIpfQorCQkJCWRpZSAiJChldmFsX2dldHRleHQgIlwKK1lvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLgorSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmUKK3NxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOgorCisgIGdpdCBjb21taXQgLS1hbWVuZCBcJGdwZ19zaWduX29wdF9xdW90ZWQKKworSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjoKKworICBnaXQgY29tbWl0IFwkZ3BnX3NpZ25fb3B0X3F1b3RlZAorCitJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOgorCisgIGdpdCByZWJhc2UgLS1jb250aW51ZQorIikiCisJCQlmaQorCQkJLiAiJGF1dGhvcl9zY3JpcHQiIHx8CisJCQkJZGllICIkKGdldHRleHQgIkVycm9yIHRyeWluZyB0byBmaW5kIHRoZSBhdXRob3IgaWRlbnRpdHkgdG8gYW1lbmQgY29tbWl0IikiCisJCQlpZiB0ZXN0IC1mICIkYW1lbmQiCisJCQl0aGVuCisJCQkJY3VycmVudF9oZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorCQkJCXRlc3QgIiRjdXJyZW50X2hlYWQiID0gJChjYXQgIiRhbWVuZCIpIHx8CisJCQkJZGllICIkKGdldHRleHQgIlwKK1lvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbQorZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIpIgorCQkJCWRvX3dpdGhfYXV0aG9yIGdpdCBjb21taXQgLS1hbWVuZCAtLW5vLXZlcmlmeSAtRiAiJG1zZyIgLWUgXAorCQkJCQkke2dwZ19zaWduX29wdDorIiRncGdfc2lnbl9vcHQifSAkYWxsb3dfZW1wdHlfbWVzc2FnZSB8fAorCQkJCQlkaWUgIiQoZ2V0dGV4dCAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iKSIKKwkJCWVsc2UKKwkJCQlkb193aXRoX2F1dGhvciBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1GICIkbXNnIiAtZSBcCisJCQkJCSR7Z3BnX3NpZ25fb3B0OisiJGdwZ19zaWduX29wdCJ9ICRhbGxvd19lbXB0eV9tZXNzYWdlIHx8CisJCQkJCWRpZSAiJChnZXR0ZXh0ICJDb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIpIgorCQkJZmkKKwkJZmkKKworCQlpZiB0ZXN0IC1yICIkc3RhdGVfZGlyIi9zdG9wcGVkLXNoYQorCQl0aGVuCisJCQlyZWNvcmRfaW5fcmV3cml0dGVuICIkKGNhdCAiJHN0YXRlX2RpciIvc3RvcHBlZC1zaGEpIgorCQlmaQorCisJCXJlcXVpcmVfY2xlYW5fd29ya190cmVlICJyZWJhc2UiCisJCWRvX3Jlc3QKKwkJcmV0dXJuIDAKKwkJOzsKKwlza2lwKQorCQlnaXQgcmVyZXJlIGNsZWFyCisJCWRvX3Jlc3QKKwkJcmV0dXJuIDAKKwkJOzsKKwllZGl0LXRvZG8pCisJCWdpdCBzdHJpcHNwYWNlIC0tc3RyaXAtY29tbWVudHMgPCIkdG9kbyIgPiIkdG9kbyIubmV3CisJCW12IC1mICIkdG9kbyIubmV3ICIkdG9kbyIKKwkJY29sbGFwc2VfdG9kb19pZHMKKwkJYXBwZW5kX3RvZG9faGVscAorCQlnZXR0ZXh0ICIKK1lvdSBhcmUgZWRpdGluZyB0aGUgdG9kbyBmaWxlIG9mIGFuIG9uZ29pbmcgaW50ZXJhY3RpdmUgcmViYXNlLgorVG8gY29udGludWUgcmViYXNlIGFmdGVyIGVkaXRpbmcsIHJ1bjoKKyAgICBnaXQgcmViYXNlIC0tY29udGludWUKKworIiB8IGdpdCBzdHJpcHNwYWNlIC0tY29tbWVudC1saW5lcyA+PiIkdG9kbyIKKworCQlnaXRfc2VxdWVuY2VfZWRpdG9yICIkdG9kbyIgfHwKKwkJCWRpZSAiJChnZXR0ZXh0ICJDb3VsZCBub3QgZXhlY3V0ZSBlZGl0b3IiKSIKKwkJZXhwYW5kX3RvZG9faWRzCisKKwkJZXhpdAorCQk7OworCXNob3ctY3VycmVudC1wYXRjaCkKKwkJZXhlYyBnaXQgc2hvdyBSRUJBU0VfSEVBRCAtLQorCQk7OworCSopCisJCXJldHVybiAxICMgY29udGludWUKKwkJOzsKKwllc2FjCit9CisKK3NldHVwX3JlZmxvZ19hY3Rpb24gKCkgeworCWNvbW1lbnRfZm9yX3JlZmxvZyBzdGFydAorCisJaWYgdGVzdCAhIC16ICIkc3dpdGNoX3RvIgorCXRoZW4KKwkJR0lUX1JFRkxPR19BQ1RJT049IiRHSVRfUkVGTE9HX0FDVElPTjogY2hlY2tvdXQgJHN3aXRjaF90byIKKwkJb3V0cHV0IGdpdCBjaGVja291dCAiJHN3aXRjaF90byIgLS0gfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIkNvdWxkIG5vdCBjaGVja291dCBcJHN3aXRjaF90byIpIgorCisJCWNvbW1lbnRfZm9yX3JlZmxvZyBzdGFydAorCWZpCit9CisKK2luaXRfYmFzaWNfc3RhdGUgKCkgeworCW9yaWdfaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgfHwgZGllICIkKGdldHRleHQgIk5vIEhFQUQ/IikiCisJbWtkaXIgLXAgIiRzdGF0ZV9kaXIiIHx8IGRpZSAiJChldmFsX2dldHRleHQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IFwkc3RhdGVfZGlyIikiCisJcm0gLWYgIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIFJFQkFTRV9IRUFEKSIKKworCTogPiAiJHN0YXRlX2RpciIvaW50ZXJhY3RpdmUgfHwgZGllICIkKGdldHRleHQgIkNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIikiCisJd3JpdGVfYmFzaWNfc3RhdGUKK30KKworaW5pdF9yZXZpc2lvbnNfYW5kX3Nob3J0cmV2aXNpb25zICgpIHsKKwlzaG9ydGhlYWQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJG9yaWdfaGVhZCkKKwlzaG9ydG9udG89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJG9udG8pCisJaWYgdGVzdCAteiAiJHJlYmFzZV9yb290IgorCQkjIHRoaXMgaXMgbm93IGVxdWl2YWxlbnQgdG8gISAteiAiJHVwc3RyZWFtIgorCXRoZW4KKwkJc2hvcnR1cHN0cmVhbT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkdXBzdHJlYW0pCisJCXJldmlzaW9ucz0kdXBzdHJlYW0uLi4kb3JpZ19oZWFkCisJCXNob3J0cmV2aXNpb25zPSRzaG9ydHVwc3RyZWFtLi4kc2hvcnRoZWFkCisJZWxzZQorCQlyZXZpc2lvbnM9JG9udG8uLi4kb3JpZ19oZWFkCisJCXNob3J0cmV2aXNpb25zPSRzaG9ydGhlYWQKKwkJdGVzdCAteiAiJHNxdWFzaF9vbnRvIiB8fAorCQllY2hvICIkc3F1YXNoX29udG8iID4iJHN0YXRlX2RpciIvc3F1YXNoLW9udG8KKwlmaQorfQorCitjb21wbGV0ZV9hY3Rpb24oKSB7CisJdGVzdCAtcyAiJHRvZG8iIHx8IGVjaG8gbm9vcCA+PiAiJHRvZG8iCisJdGVzdCAteiAiJGF1dG9zcXVhc2giIHx8IGdpdCByZWJhc2UtLWludGVyYWN0aXZlIC0tcmVhcnJhbmdlLXNxdWFzaCB8fCBleGl0CisJdGVzdCAtbiAiJGNtZCIgJiYgZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgLS1hZGQtZXhlYy1jb21tYW5kcyAtLWNtZCAiJGNtZCIKKworCXRvZG9jb3VudD0kKGdpdCBzdHJpcHNwYWNlIC0tc3RyaXAtY29tbWVudHMgPCIkdG9kbyIgfCB3YyAtbCkKKwl0b2RvY291bnQ9JHt0b2RvY291bnQjIyogfQorCitjYXQgPj4iJHRvZG8iIDw8RU9GCisKKyRjb21tZW50X2NoYXIgJChldmFsX25nZXR0ZXh0IFwKKwkiUmViYXNlIFwkc2hvcnRyZXZpc2lvbnMgb250byBcJHNob3J0b250byAoXCR0b2RvY291bnQgY29tbWFuZCkiIFwKKwkiUmViYXNlIFwkc2hvcnRyZXZpc2lvbnMgb250byBcJHNob3J0b250byAoXCR0b2RvY291bnQgY29tbWFuZHMpIiBcCisJIiR0b2RvY291bnQiKQorRU9GCisJYXBwZW5kX3RvZG9faGVscAorCWdldHRleHQgIgorSG93ZXZlciwgaWYgeW91IHJlbW92ZSBldmVyeXRoaW5nLCB0aGUgcmViYXNlIHdpbGwgYmUgYWJvcnRlZC4KKworIiB8IGdpdCBzdHJpcHNwYWNlIC0tY29tbWVudC1saW5lcyA+PiIkdG9kbyIKKworCWlmIHRlc3QgLXogIiRrZWVwX2VtcHR5IgorCXRoZW4KKwkJcHJpbnRmICclc1xuJyAiJGNvbW1lbnRfY2hhciAkKGdldHRleHQgIk5vdGUgdGhhdCBlbXB0eSBjb21taXRzIGFyZSBjb21tZW50ZWQgb3V0IikiID4+IiR0b2RvIgorCWZpCisKKworCWhhc19hY3Rpb24gIiR0b2RvIiB8fAorCQlyZXR1cm4gMgorCisJY3AgIiR0b2RvIiAiJHRvZG8iLmJhY2t1cAorCWNvbGxhcHNlX3RvZG9faWRzCisJZ2l0X3NlcXVlbmNlX2VkaXRvciAiJHRvZG8iIHx8CisJCWRpZV9hYm9ydCAiJChnZXR0ZXh0ICJDb3VsZCBub3QgZXhlY3V0ZSBlZGl0b3IiKSIKKworCWhhc19hY3Rpb24gIiR0b2RvIiB8fAorCQlyZXR1cm4gMgorCisJZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgLS1jaGVjay10b2RvLWxpc3QgfHwgeworCQlyZXQ9JD8KKwkJY2hlY2tvdXRfb250bworCQlleGl0ICRyZXQKKwl9CisKKwlleHBhbmRfdG9kb19pZHMKKwljaGVja291dF9vbnRvCisJZG9fcmVzdAorfQorCitnaXRfcmViYXNlX19wcmVzZXJ2ZV9tZXJnZXMgKCkgeworCWluaXRpYXRlX2FjdGlvbiAiJGFjdGlvbiIKKwlyZXQ9JD8KKwlpZiB0ZXN0ICRyZXQgPSAwOyB0aGVuCisJCXJldHVybiAwCisJZmkKKworCXNldHVwX3JlZmxvZ19hY3Rpb24KKwlpbml0X2Jhc2ljX3N0YXRlCisKKwlpZiB0ZXN0IC16ICIkcmViYXNlX3Jvb3QiCisJdGhlbgorCQlta2RpciAiJHJld3JpdHRlbiIgJiYKKwkJZm9yIGMgaW4gJChnaXQgbWVyZ2UtYmFzZSAtLWFsbCAkb3JpZ19oZWFkICR1cHN0cmVhbSkKKwkJZG8KKwkJCWVjaG8gJG9udG8gPiAiJHJld3JpdHRlbiIvJGMgfHwKKwkJCQlkaWUgIiQoZ2V0dGV4dCAiQ291bGQgbm90IGluaXQgcmV3cml0dGVuIGNvbW1pdHMiKSIKKwkJZG9uZQorCWVsc2UKKwkJbWtkaXIgIiRyZXdyaXR0ZW4iICYmCisJCWVjaG8gJG9udG8gPiAiJHJld3JpdHRlbiIvcm9vdCB8fAorCQkJZGllICIkKGdldHRleHQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIikiCisJZmkKKworCWluaXRfcmV2aXNpb25zX2FuZF9zaG9ydHJldmlzaW9ucworCisJZm9ybWF0PSQoZ2l0IGNvbmZpZyAtLWdldCByZWJhc2UuaW5zdHJ1Y3Rpb25Gb3JtYXQpCisJIyB0aGUgJ3Jldi1saXN0IC4uIHwgc2VkJyByZXF1aXJlcyAlbSB0byBwYXJzZTsgdGhlIGluc3RydWN0aW9uIHJlcXVpcmVzICVIIHRvIHBhcnNlCisJZ2l0IHJldi1saXN0IC0tZm9ybWF0PSIlbSVIICR7Zm9ybWF0Oi0lc30iIFwKKwkJLS1yZXZlcnNlIC0tbGVmdC1yaWdodCAtLXRvcG8tb3JkZXIgXAorCQkkcmV2aXNpb25zICR7cmVzdHJpY3RfcmV2aXNpb24rXiRyZXN0cmljdF9yZXZpc2lvbn0gfCBcCisJCXNlZCAtbiAicy9ePi8vcCIgfAorCXdoaWxlIHJlYWQgLXIgc2hhMSByZXN0CisJZG8KKwkJaWYgdGVzdCAteiAiJGtlZXBfZW1wdHkiICYmIGlzX2VtcHR5X2NvbW1pdCAkc2hhMSAmJiAhIGlzX21lcmdlX2NvbW1pdCAkc2hhMQorCQl0aGVuCisJCQljb21tZW50X291dD0iJGNvbW1lbnRfY2hhciAiCisJCWVsc2UKKwkJCWNvbW1lbnRfb3V0PQorCQlmaQorCisJCWlmIHRlc3QgLXogIiRyZWJhc2Vfcm9vdCIKKwkJdGhlbgorCQkJcHJlc2VydmU9dAorCQkJZm9yIHAgaW4gJChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0xICRzaGExIHwgY3V0IC1kJyAnIC1zIC1mMi0pCisJCQlkbworCQkJCWlmIHRlc3QgLWYgIiRyZXdyaXR0ZW4iLyRwCisJCQkJdGhlbgorCQkJCQlwcmVzZXJ2ZT1mCisJCQkJZmkKKwkJCWRvbmUKKwkJZWxzZQorCQkJcHJlc2VydmU9ZgorCQlmaQorCQlpZiB0ZXN0IGYgPSAiJHByZXNlcnZlIgorCQl0aGVuCisJCQl0b3VjaCAiJHJld3JpdHRlbiIvJHNoYTEKKwkJCXByaW50ZiAnJXNcbicgIiR7Y29tbWVudF9vdXR9cGljayAkc2hhMSAkcmVzdCIgPj4iJHRvZG8iCisJCWZpCisJZG9uZQorCisJIyBXYXRjaCBmb3IgY29tbWl0cyB0aGF0IGJlZW4gZHJvcHBlZCBieSAtLWNoZXJyeS1waWNrCisJbWtkaXIgIiRkcm9wcGVkIgorCSMgU2F2ZSBhbGwgbm9uLWNoZXJyeS1waWNrZWQgY2hhbmdlcworCWdpdCByZXYtbGlzdCAkcmV2aXNpb25zIC0tbGVmdC1yaWdodCAtLWNoZXJyeS1waWNrIHwgXAorCQlzZWQgLW4gInMvXj4vL3AiID4gIiRzdGF0ZV9kaXIiL25vdC1jaGVycnktcGlja3MKKwkjIE5vdyBhbGwgY29tbWl0cyBhbmQgbm90ZSB3aGljaCBvbmVzIGFyZSBtaXNzaW5nIGluCisJIyBub3QtY2hlcnJ5LXBpY2tzIGFuZCBoZW5jZSBiZWluZyBkcm9wcGVkCisJZ2l0IHJldi1saXN0ICRyZXZpc2lvbnMgfAorCXdoaWxlIHJlYWQgcmV2CisJZG8KKwkJaWYgdGVzdCAtZiAiJHJld3JpdHRlbiIvJHJldiAmJgorCQkgICAhIHNhbmVfZ3JlcCAiJHJldiIgIiRzdGF0ZV9kaXIiL25vdC1jaGVycnktcGlja3MgPi9kZXYvbnVsbAorCQl0aGVuCisJCQkjIFVzZSAtZjIgYmVjYXVzZSBpZiByZXYtbGlzdCBpcyB0ZWxsaW5nIHVzIHRoaXMgY29tbWl0IGlzCisJCQkjIG5vdCB3b3J0aHdoaWxlLCB3ZSBkb24ndCB3YW50IHRvIHRyYWNrIGl0cyBtdWx0aXBsZSBoZWFkcywKKwkJCSMganVzdCB0aGUgaGlzdG9yeSBvZiBpdHMgZmlyc3QtcGFyZW50IGZvciBvdGhlcnMgdGhhdCB3aWxsCisJCQkjIGJlIHJlYmFzaW5nIG9uIHRvcCBvZiBpdAorCQkJZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtMSAkcmV2IHwgY3V0IC1kJyAnIC1zIC1mMiA+ICIkZHJvcHBlZCIvJHJldgorCQkJc2hhMT0kKGdpdCByZXYtbGlzdCAtMSAkcmV2KQorCQkJc2FuZV9ncmVwIC12ICJeW2Etel1bYS16XSogJHNoYTEiIDwiJHRvZG8iID4gIiR7dG9kb30yIiA7IG12ICIke3RvZG99MiIgIiR0b2RvIgorCQkJcm0gIiRyZXdyaXR0ZW4iLyRyZXYKKwkJZmkKKwlkb25lCisKKwljb21wbGV0ZV9hY3Rpb24KK30KZGlmZiAtLWdpdCBhL2dpdC1yZXF1ZXN0LXB1bGwuc2ggYi9naXQtcmVxdWVzdC1wdWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJkMGU0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcmVxdWVzdC1wdWxsLnNoCkBAIC0wLDAgKzEsMTcyIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IDIwMDUsIFJ5YW4gQW5kZXJzb24gPHJ5YW5AbWljaG9ubGluZS5jb20+CisjCisjIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KKyMgYXQgdGhlIGRpc2NyZXRpb24gb2YgTGludXMgVG9ydmFsZHMuCisKK1NVQkRJUkVDVE9SWV9PSz0nWWVzJworT1BUSU9OU19LRUVQREFTSERBU0g9CitPUFRJT05TX1NUVUNLTE9ORz0KK09QVElPTlNfU1BFQz0nZ2l0IHJlcXVlc3QtcHVsbCBbb3B0aW9uc10gc3RhcnQgdXJsIFtlbmRdCistLQorcCAgICBzaG93IHBhdGNoIHRleHQgYXMgd2VsbAorJworCisuIGdpdC1zaC1zZXR1cAorCitHSVRfUEFHRVI9CitleHBvcnQgR0lUX1BBR0VSCisKK3BhdGNoPQord2hpbGUJY2FzZSAiJCMiIGluIDApIGJyZWFrIDs7IGVzYWMKK2RvCisJY2FzZSAiJDEiIGluCisJLXApCisJCXBhdGNoPS1wIDs7CisJLS0pCisJCXNoaWZ0OyBicmVhayA7OworCS0qKQorCQl1c2FnZSA7OworCSopCisJCWJyZWFrIDs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK2Jhc2U9JDEgdXJsPSQyIHN0YXR1cz0wCisKK3Rlc3QgLW4gIiRiYXNlIiAmJiB0ZXN0IC1uICIkdXJsIiB8fCB1c2FnZQorCitiYXNlcmV2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICIkYmFzZSJeMCkKK2lmIHRlc3QgLXogIiRiYXNlcmV2IgordGhlbgorICAgIGRpZSAiZmF0YWw6IE5vdCBhIHZhbGlkIHJldmlzaW9uOiAkYmFzZSIKK2ZpCisKKyMKKyMgJDMgbXVzdCBiZSBhIHN5bWJvbGljIHJlZiwgYSB1bmlxdWUgcmVmLCBvcgorIyBhIFNIQSBvYmplY3QgZXhwcmVzc2lvbi4gSXQgY2FuIGFsc28gYmUgb2YKKyMgdGhlIGZvcm1hdCAnbG9jYWwtbmFtZTpyZW1vdGUtbmFtZScuCisjCitsb2NhbD0kezMlOip9Citsb2NhbD0ke2xvY2FsOi1IRUFEfQorcmVtb3RlPSR7MyMqOn0KK3ByZXR0eV9yZW1vdGU9JHtyZW1vdGUjcmVmcy99CitwcmV0dHlfcmVtb3RlPSR7cHJldHR5X3JlbW90ZSNoZWFkcy99CitoZWFkPSQoZ2l0IHN5bWJvbGljLXJlZiAtcSAiJGxvY2FsIikKK2hlYWQ9JHtoZWFkOi0kKGdpdCBzaG93LXJlZiAtLWhlYWRzIC0tdGFncyAiJGxvY2FsIiB8IGN1dCAtZCcgJyAtZjIpfQoraGVhZD0ke2hlYWQ6LSQoZ2l0IHJldi1wYXJzZSAtLXF1aWV0IC0tdmVyaWZ5ICIkbG9jYWwiKX0KKworIyBOb25lIG9mIHRoZSBhYm92ZT8gQmFkLgordGVzdCAteiAiJGhlYWQiICYmIGRpZSAiZmF0YWw6IE5vdCBhIHZhbGlkIHJldmlzaW9uOiAkbG9jYWwiCisKKyMgVGhpcyBhbHNvIHZlcmlmaWVzIHRoYXQgdGhlIHJlc3VsdGluZyBoZWFkIGlzIHVuaXF1ZToKKyMgImdpdCBzaG93LXJlZiIgY291bGQgaGF2ZSBzaG93biBtdWx0aXBsZSBtYXRjaGluZyByZWZzLi4KK2hlYWRyZXY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgIiRoZWFkIl4wKQordGVzdCAteiAiJGhlYWRyZXYiICYmIGRpZSAiZmF0YWw6IEFtYmlndW91cyByZXZpc2lvbjogJGxvY2FsIgorCitsb2NhbF9zaGExPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICIkaGVhZCIpCisKKyMgV2FzIGl0IGEgYnJhbmNoIHdpdGggYSBkZXNjcmlwdGlvbj8KK2JyYW5jaF9uYW1lPSR7aGVhZCNyZWZzL2hlYWRzL30KK2lmIHRlc3QgInokYnJhbmNoX25hbWUiID0gInokaGVhZHJlZiIgfHwKKwkhIGdpdCBjb25maWcgImJyYW5jaC4kYnJhbmNoX25hbWUuZGVzY3JpcHRpb24iID4vZGV2L251bGwKK3RoZW4KKwlicmFuY2hfbmFtZT0KK2ZpCisKK21lcmdlX2Jhc2U9JChnaXQgbWVyZ2UtYmFzZSAkYmFzZXJldiAkaGVhZHJldikgfHwKK2RpZSAiZmF0YWw6IE5vIGNvbW1pdHMgaW4gY29tbW9uIGJldHdlZW4gJGJhc2UgYW5kICRoZWFkIgorCisjICRoZWFkIGlzIHRoZSByZWZuYW1lIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKyMgRmluZCBhIHJlZiB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgJGhlYWQgdGhhdCBleGlzdHMgYXQgdGhlIHJlbW90ZQorIyBhbmQgcG9pbnRzIHRvIHRoZSBzYW1lIGNvbW1pdCBhcyB0aGUgbG9jYWwgb2JqZWN0LgorZmluZF9tYXRjaGluZ19yZWY9JworCW15ICgkaGVhZCwkaGVhZHJldikgPSAoQEFSR1YpOworCW15ICRwYXR0ZXJuID0gcXJ7L1xRJGhlYWRcRSR9OworCW15ICgkcmVtb3RlX3NoYTEsICRmb3VuZCk7CisKKwl3aGlsZSAoPFNURElOPikgeworCQljaG9tcDsKKwkJbXkgKCRzaGExLCAkcmVmLCAkZGVyZWYpID0gL14oXFMrKVxzKyhbXl5dKykoXFMqKSQvOworCisJCWlmICgkc2hhMSBlcSAkaGVhZCkgeworCQkJJGZvdW5kID0gJHJlbW90ZV9zaGExID0gJHNoYTE7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgkcmVmIGVxICRoZWFkIHx8ICRyZWYgPX4gJHBhdHRlcm4pIHsKKwkJCWlmICgkZGVyZWYgZXEgIiIpIHsKKwkJCQkjIFJlbWVtYmVyIHRoZSBtYXRjaGluZyBvYmplY3Qgb24gdGhlIHJlbW90ZSBzaWRlCisJCQkJJHJlbW90ZV9zaGExID0gJHNoYTE7CisJCQl9CisJCQlpZiAoJHNoYTEgZXEgJGhlYWRyZXYpIHsKKwkJCQkkZm91bmQgPSAkcmVmOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWlmICgkZm91bmQpIHsKKwkJJHJlbW90ZV9zaGExID0gJGhlYWRyZXYgaWYgISBkZWZpbmVkICRyZW1vdGVfc2hhMTsKKwkJcHJpbnQgIiRyZW1vdGVfc2hhMSAkZm91bmRcbiI7CisJfQorJworCitzZXQgZm5vcmQgJChnaXQgbHMtcmVtb3RlICIkdXJsIiB8IEBAUEVSTEBAIC1lICIkZmluZF9tYXRjaGluZ19yZWYiICIke3JlbW90ZTotSEVBRH0iICIkaGVhZHJldiIpCityZW1vdGVfc2hhMT0kMgorcmVmPSQzCisKK2lmIHRlc3QgLXogIiRyZWYiCit0aGVuCisJZWNobyAid2FybjogTm8gbWF0Y2ggZm9yIGNvbW1pdCAkaGVhZHJldiBmb3VuZCBhdCAkdXJsIiA+JjIKKwllY2hvICJ3YXJuOiBBcmUgeW91IHN1cmUgeW91IHB1c2hlZCAnJHtyZW1vdGU6LUhFQUR9JyB0aGVyZT8iID4mMgorCXN0YXR1cz0xCitlbGlmIHRlc3QgIiRsb2NhbF9zaGExIiAhPSAiJHJlbW90ZV9zaGExIgordGhlbgorCWVjaG8gIndhcm46ICRoZWFkIGZvdW5kIGF0ICR1cmwgYnV0IHBvaW50cyB0byBhIGRpZmZlcmVudCBvYmplY3QiID4mMgorCWVjaG8gIndhcm46IEFyZSB5b3Ugc3VyZSB5b3UgcHVzaGVkICcke3JlbW90ZTotSEVBRH0nIHRoZXJlPyIgPiYyCisJc3RhdHVzPTEKK2ZpCisKKyMgU3BlY2lhbCBjYXNlOiB0dXJuICJmb3JfbGludXMiIHRvICJ0YWdzL2Zvcl9saW51cyIgd2hlbiBpdCBpcyBjb3JyZWN0CitpZiB0ZXN0ICIkcmVmIiA9ICJyZWZzL3RhZ3MvJHByZXR0eV9yZW1vdGUiCit0aGVuCisJcHJldHR5X3JlbW90ZT10YWdzLyRwcmV0dHlfcmVtb3RlCitmaQorCit1cmw9JChnaXQgbHMtcmVtb3RlIC0tZ2V0LXVybCAiJHVybCIpCisKK2dpdCBzaG93IC1zIC0tZm9ybWF0PSdUaGUgZm9sbG93aW5nIGNoYW5nZXMgc2luY2UgY29tbWl0ICVIOgorCisgICVzICglY2kpCisKK2FyZSBhdmFpbGFibGUgaW4gdGhlIEdpdCByZXBvc2l0b3J5IGF0OgorJyAkbWVyZ2VfYmFzZSAmJgorZWNobyAiICAkdXJsICRwcmV0dHlfcmVtb3RlIiAmJgorZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JworZm9yIHlvdSB0byBmZXRjaCBjaGFuZ2VzIHVwIHRvICVIOgorCisgICVzICglY2kpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nICRoZWFkcmV2ICYmCisKK2lmIHRlc3QgJChnaXQgY2F0LWZpbGUgLXQgIiRoZWFkIikgPSB0YWcKK3RoZW4KKwlnaXQgY2F0LWZpbGUgdGFnICIkaGVhZCIgfAorCXNlZCAtbiAtZSAnMSwvXiQvZCcgLWUgJy9eLS0tLS1CRUdJTiBQR1AgL3EnIC1lIHAKKwllY2hvCisJZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKK2ZpICYmCisKK2lmIHRlc3QgLW4gIiRicmFuY2hfbmFtZSIKK3RoZW4KKwllY2hvICIoZnJvbSB0aGUgYnJhbmNoIGRlc2NyaXB0aW9uIGZvciAkYnJhbmNoX25hbWUgbG9jYWwgYnJhbmNoKSIKKwllY2hvCisJZ2l0IGNvbmZpZyAiYnJhbmNoLiRicmFuY2hfbmFtZS5kZXNjcmlwdGlvbiIKKwllY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorZmkgJiYKKworZ2l0IHNob3J0bG9nIF4kYmFzZXJldiAkaGVhZHJldiAmJgorZ2l0IGRpZmYgLU0gLS1zdGF0IC0tc3VtbWFyeSAkcGF0Y2ggJG1lcmdlX2Jhc2UuLiRoZWFkcmV2IHx8IHN0YXR1cz0xCisKK2V4aXQgJHN0YXR1cwpkaWZmIC0tZ2l0IGEvZ2l0LXNlbmQtZW1haWwucGVybCBiL2dpdC1zZW5kLWVtYWlsLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGM5NTY1NgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1zZW5kLWVtYWlsLnBlcmwKQEAgLTAsMCArMSwyMDI1IEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgQ29weXJpZ2h0IDIwMDIsMjAwNSBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorIyBDb3B5cmlnaHQgMjAwNSBSeWFuIEFuZGVyc29uIDxyeWFuQG1pY2hvbmxpbmUuY29tPgorIworIyBHUEwgdjIgKFNlZSBDT1BZSU5HKQorIworIyBQb3J0ZWQgdG8gc3VwcG9ydCBnaXQgIm1ib3giIGZvcm1hdCBmaWxlcyBieSBSeWFuIEFuZGVyc29uIDxyeWFuQG1pY2hvbmxpbmUuY29tPgorIworIyBTZW5kcyBhIGNvbGxlY3Rpb24gb2YgZW1haWxzIHRvIHRoZSBnaXZlbiBlbWFpbCBhZGRyZXNzZXMsIGRpc3R1cmJpbmdseSBmYXN0LgorIworIyBTdXBwb3J0cyB0d28gZm9ybWF0czoKKyMgMS4gbWJveCBmb3JtYXQgZmlsZXMgKGlnbm9yaW5nIG1vc3QgaGVhZGVycyBhbmQgTUlNRSBmb3JtYXR0aW5nIC0gdGhpcyBpcyBkZXNpZ25lZCBmb3Igc2VuZGluZyBwYXRjaGVzKQorIyAyLiBUaGUgb3JpZ2luYWwgZm9ybWF0IHN1cHBvcnQgYnkgR3JlZydzIHNjcmlwdDoKKyMgICAgZmlyc3QgbGluZSBvZiB0aGUgbWVzc2FnZSBpcyB3aG8gdG8gQ0MsCisjICAgIGFuZCBzZWNvbmQgbGluZSBpcyB0aGUgc3ViamVjdCBvZiB0aGUgbWVzc2FnZS4KKyMKKwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQT1NJWCBxdy9zdHJmdGltZS87Cit1c2UgVGVybTo6UmVhZExpbmU7Cit1c2UgR2V0b3B0OjpMb25nOwordXNlIFRleHQ6OlBhcnNlV29yZHM7Cit1c2UgVGVybTo6QU5TSUNvbG9yOwordXNlIEZpbGU6OlRlbXAgcXcvIHRlbXBkaXIgdGVtcGZpbGUgLzsKK3VzZSBGaWxlOjpTcGVjOjpGdW5jdGlvbnMgcXcoY2F0ZGlyIGNhdGZpbGUpOwordXNlIEdpdDo6TG9hZENQQU46OkVycm9yIHF3KDp0cnkpOwordXNlIEN3ZCBxdyhhYnNfcGF0aCBjd2QpOwordXNlIEdpdDsKK3VzZSBHaXQ6OkkxOE47Cit1c2UgTmV0OjpEb21haW4gKCk7Cit1c2UgTmV0OjpTTVRQICgpOwordXNlIEdpdDo6TG9hZENQQU46Ok1haWw6OkFkZHJlc3M7CisKK0dldG9wdDo6TG9uZzo6Q29uZmlndXJlIHF3LyBwYXNzX3Rocm91Z2ggLzsKKworcGFja2FnZSBGYWtlVGVybTsKK3N1YiBuZXcgeworCW15ICgkY2xhc3MsICRyZWFzb24pID0gQF87CisJcmV0dXJuIGJsZXNzIFwkcmVhc29uLCBzaGlmdDsKK30KK3N1YiByZWFkbGluZSB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlkaWUgIkNhbm5vdCB1c2UgcmVhZGxpbmUgb24gRmFrZVRlcm06ICQkc2VsZiI7Cit9CitwYWNrYWdlIG1haW47CisKKworc3ViIHVzYWdlIHsKKwlwcmludCA8PEVPVDsKK2dpdCBzZW5kLWVtYWlsIFtvcHRpb25zXSA8ZmlsZSB8IGRpcmVjdG9yeSB8IHJldi1saXN0IG9wdGlvbnMgPgorZ2l0IHNlbmQtZW1haWwgLS1kdW1wLWFsaWFzZXMKKworICBDb21wb3Npbmc6CisgICAgLS1mcm9tICAgICAgICAgICAgICAgICAgPHN0cj4gICogRW1haWwgRnJvbToKKyAgICAtLVtuby1ddG8gICAgICAgICAgICAgICA8c3RyPiAgKiBFbWFpbCBUbzoKKyAgICAtLVtuby1dY2MgICAgICAgICAgICAgICA8c3RyPiAgKiBFbWFpbCBDYzoKKyAgICAtLVtuby1dYmNjICAgICAgICAgICAgICA8c3RyPiAgKiBFbWFpbCBCY2M6CisgICAgLS1zdWJqZWN0ICAgICAgICAgICAgICAgPHN0cj4gICogRW1haWwgIlN1YmplY3Q6IgorICAgIC0tcmVwbHktdG8gICAgICAgICAgICAgIDxzdHI+ICAqIEVtYWlsICJSZXBseS1UbzoiCisgICAgLS1pbi1yZXBseS10byAgICAgICAgICAgPHN0cj4gICogRW1haWwgIkluLVJlcGx5LVRvOiIKKyAgICAtLVtuby1deG1haWxlciAgICAgICAgICAgICAgICAgKiBBZGQgIlgtTWFpbGVyOiIgaGVhZGVyIChkZWZhdWx0KS4KKyAgICAtLVtuby1dYW5ub3RhdGUgICAgICAgICAgICAgICAgKiBSZXZpZXcgZWFjaCBwYXRjaCB0aGF0IHdpbGwgYmUgc2VudCBpbiBhbiBlZGl0b3IuCisgICAgLS1jb21wb3NlICAgICAgICAgICAgICAgICAgICAgICogT3BlbiBhbiBlZGl0b3IgZm9yIGludHJvZHVjdGlvbi4KKyAgICAtLWNvbXBvc2UtZW5jb2RpbmcgICAgICA8c3RyPiAgKiBFbmNvZGluZyB0byBhc3N1bWUgZm9yIGludHJvZHVjdGlvbi4KKyAgICAtLThiaXQtZW5jb2RpbmcgICAgICAgICA8c3RyPiAgKiBFbmNvZGluZyB0byBhc3N1bWUgOGJpdCBtYWlscyBpZiB1bmRlY2xhcmVkCisgICAgLS10cmFuc2Zlci1lbmNvZGluZyAgICAgPHN0cj4gICogVHJhbnNmZXIgZW5jb2RpbmcgdG8gdXNlIChxdW90ZWQtcHJpbnRhYmxlLCA4Yml0LCBiYXNlNjQpCisKKyAgU2VuZGluZzoKKyAgICAtLWVudmVsb3BlLXNlbmRlciAgICAgICA8c3RyPiAgKiBFbWFpbCBlbnZlbG9wZSBzZW5kZXIuCisgICAgLS1zbXRwLXNlcnZlciAgICAgICA8c3RyOmludD4gICogT3V0Z29pbmcgU01UUCBzZXJ2ZXIgdG8gdXNlLiBUaGUgcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG9wdGlvbmFsLiBEZWZhdWx0ICdsb2NhbGhvc3QnLgorICAgIC0tc210cC1zZXJ2ZXItb3B0aW9uICAgIDxzdHI+ICAqIE91dGdvaW5nIFNNVFAgc2VydmVyIG9wdGlvbiB0byB1c2UuCisgICAgLS1zbXRwLXNlcnZlci1wb3J0ICAgICAgPGludD4gICogT3V0Z29pbmcgU01UUCBzZXJ2ZXIgcG9ydC4KKyAgICAtLXNtdHAtdXNlciAgICAgICAgICAgICA8c3RyPiAgKiBVc2VybmFtZSBmb3IgU01UUC1BVVRILgorICAgIC0tc210cC1wYXNzICAgICAgICAgICAgIDxzdHI+ICAqIFBhc3N3b3JkIGZvciBTTVRQLUFVVEg7IG5vdCBuZWNlc3NhcnkuCisgICAgLS1zbXRwLWVuY3J5cHRpb24gICAgICAgPHN0cj4gICogdGxzIG9yIHNzbDsgYW55dGhpbmcgZWxzZSBkaXNhYmxlcy4KKyAgICAtLXNtdHAtc3NsICAgICAgICAgICAgICAgICAgICAgKiBEZXByZWNhdGVkLiBVc2UgJy0tc210cC1lbmNyeXB0aW9uIHNzbCcuCisgICAgLS1zbXRwLXNzbC1jZXJ0LXBhdGggICAgPHN0cj4gICogUGF0aCB0byBjYS1jZXJ0aWZpY2F0ZXMgKGVpdGhlciBkaXJlY3Rvcnkgb3IgZmlsZSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzcyBhbiBlbXB0eSBzdHJpbmcgdG8gZGlzYWJsZSBjZXJ0aWZpY2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbi4KKyAgICAtLXNtdHAtZG9tYWluICAgICAgICAgICA8c3RyPiAgKiBUaGUgZG9tYWluIG5hbWUgc2VudCB0byBIRUxPL0VITE8gaGFuZHNoYWtlCisgICAgLS1zbXRwLWF1dGggICAgICAgICAgICAgPHN0cj4gICogU3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYWxsb3dlZCBBVVRIIG1lY2hhbmlzbXMsIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbmUiIHRvIGRpc2FibGUgYXV0aGVudGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZXR0aW5nIGZvcmNlcyB0byB1c2Ugb25lIG9mIHRoZSBsaXN0ZWQgbWVjaGFuaXNtcy4KKyAgICAtLW5vLXNtdHAtYXV0aCAgICAgICAgICAgICAgICAgICBEaXNhYmxlIFNNVFAgYXV0aGVudGljYXRpb24uIFNob3J0aGFuZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgLS1zbXRwLWF1dGg9bm9uZWAKKyAgICAtLXNtdHAtZGVidWcgICAgICAgICAgICA8MHwxPiAgKiBEaXNhYmxlLCBlbmFibGUgTmV0OjpTTVRQIGRlYnVnLgorCisgICAgLS1iYXRjaC1zaXplICAgICAgICAgICAgPGludD4gICogc2VuZCBtYXggPGludD4gbWVzc2FnZSBwZXIgY29ubmVjdGlvbi4KKyAgICAtLXJlbG9naW4tZGVsYXkgICAgICAgICA8aW50PiAgKiBkZWxheSA8aW50PiBzZWNvbmRzIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUgbG9naW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tYmF0Y2gtc2l6ZQorCisgIEF1dG9tYXRpbmc6CisgICAgLS1pZGVudGl0eSAgICAgICAgICAgICAgPHN0cj4gICogVXNlIHRoZSBzZW5kZW1haWwuPGlkPiBvcHRpb25zLgorICAgIC0tdG8tY21kICAgICAgICAgICAgICAgIDxzdHI+ICAqIEVtYWlsIFRvOiB2aWEgYDxzdHI+IFwkcGF0Y2hfcGF0aGAKKyAgICAtLWNjLWNtZCAgICAgICAgICAgICAgICA8c3RyPiAgKiBFbWFpbCBDYzogdmlhIGA8c3RyPiBcJHBhdGNoX3BhdGhgCisgICAgLS1zdXBwcmVzcy1jYyAgICAgICAgICAgPHN0cj4gICogYXV0aG9yLCBzZWxmLCBzb2IsIGNjLCBjY2NtZCwgYm9keSwgYm9keWNjLCBtaXNjLWJ5LCBhbGwuCisgICAgLS1bbm8tXWNjLWNvdmVyICAgICAgICAgICAgICAgICogRW1haWwgQ2M6IGFkZHJlc3NlcyBpbiB0aGUgY292ZXIgbGV0dGVyLgorICAgIC0tW25vLV10by1jb3ZlciAgICAgICAgICAgICAgICAqIEVtYWlsIFRvOiBhZGRyZXNzZXMgaW4gdGhlIGNvdmVyIGxldHRlci4KKyAgICAtLVtuby1dc2lnbmVkLW9mZi1ieS1jYyAgICAgICAgKiBTZW5kIHRvIFNpZ25lZC1vZmYtYnk6IGFkZHJlc3Nlcy4gRGVmYXVsdCBvbi4KKyAgICAtLVtuby1dc3VwcHJlc3MtZnJvbSAgICAgICAgICAgKiBTZW5kIHRvIHNlbGYuIERlZmF1bHQgb2ZmLgorICAgIC0tW25vLV1jaGFpbi1yZXBseS10byAgICAgICAgICAqIENoYWluIEluLVJlcGx5LVRvOiBmaWVsZHMuIERlZmF1bHQgb2ZmLgorICAgIC0tW25vLV10aHJlYWQgICAgICAgICAgICAgICAgICAqIFVzZSBJbi1SZXBseS1UbzogZmllbGQuIERlZmF1bHQgb24uCisKKyAgQWRtaW5pc3RlcmluZzoKKyAgICAtLWNvbmZpcm0gICAgICAgICAgICAgICA8c3RyPiAgKiBDb25maXJtIHJlY2lwaWVudHMgYmVmb3JlIHNlbmRpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0bywgY2MsIGNvbXBvc2UsIGFsd2F5cywgb3IgbmV2ZXIuCisgICAgLS1xdWlldCAgICAgICAgICAgICAgICAgICAgICAgICogT3V0cHV0IG9uZSBsaW5lIG9mIGluZm8gcGVyIGVtYWlsLgorICAgIC0tZHJ5LXJ1biAgICAgICAgICAgICAgICAgICAgICAqIERvbid0IGFjdHVhbGx5IHNlbmQgdGhlIGVtYWlscy4KKyAgICAtLVtuby1ddmFsaWRhdGUgICAgICAgICAgICAgICAgKiBQZXJmb3JtIHBhdGNoIHNhbml0eSBjaGVja3MuIERlZmF1bHQgb24uCisgICAgLS1bbm8tXWZvcm1hdC1wYXRjaCAgICAgICAgICAgICogdW5kZXJzdGFuZCBhbnkgbm9uIG9wdGlvbmFsIGFyZ3VtZW50cyBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBnaXQgZm9ybWF0LXBhdGNoYCBvbmVzLgorICAgIC0tZm9yY2UgICAgICAgICAgICAgICAgICAgICAgICAqIFNlbmQgZXZlbiBpZiBzYWZldHkgY2hlY2tzIHdvdWxkIHByZXZlbnQgaXQuCisKKyAgSW5mb3JtYXRpb246CisgICAgLS1kdW1wLWFsaWFzZXMgICAgICAgICAgICAgICAgICogRHVtcCBjb25maWd1cmVkIGFsaWFzZXMgYW5kIGV4aXQuCisKK0VPVAorCWV4aXQoMSk7Cit9CisKK3N1YiBjb21wbGV0aW9uX2hlbHBlciB7CisgICAgcHJpbnQgR2l0Ojpjb21tYW5kKCdmb3JtYXQtcGF0Y2gnLCAnLS1naXQtY29tcGxldGlvbi1oZWxwZXInKTsKKyAgICBleGl0KDApOworfQorCisjIG1vc3QgbWFpbCBzZXJ2ZXJzIGdlbmVyYXRlIHRoZSBEYXRlOiBoZWFkZXIsIGJ1dCBub3QgYWxsLi4uCitzdWIgZm9ybWF0XzI4MjJfdGltZSB7CisJbXkgKCR0aW1lKSA9IEBfOworCW15IEBsb2NhbHRtID0gbG9jYWx0aW1lKCR0aW1lKTsKKwlteSBAZ210dG0gPSBnbXRpbWUoJHRpbWUpOworCW15ICRsb2NhbG1pbiA9ICRsb2NhbHRtWzFdICsgJGxvY2FsdG1bMl0gKiA2MDsKKwlteSAkZ210bWluID0gJGdtdHRtWzFdICsgJGdtdHRtWzJdICogNjA7CisJaWYgKCRsb2NhbHRtWzBdICE9ICRnbXR0bVswXSkgeworCQlkaWUgX18oImxvY2FsIHpvbmUgZGlmZmVycyBmcm9tIEdNVCBieSBhIG5vbi1taW51dGUgaW50ZXJ2YWxcbiIpOworCX0KKwlpZiAoKCgkZ210dG1bNl0gKyAxKSAlIDcpID09ICRsb2NhbHRtWzZdKSB7CisJCSRsb2NhbG1pbiArPSAxNDQwOworCX0gZWxzaWYgKCgoJGdtdHRtWzZdIC0gMSkgJSA3KSA9PSAkbG9jYWx0bVs2XSkgeworCQkkbG9jYWxtaW4gLT0gMTQ0MDsKKwl9IGVsc2lmICgkZ210dG1bNl0gIT0gJGxvY2FsdG1bNl0pIHsKKwkJZGllIF9fKCJsb2NhbCB0aW1lIG9mZnNldCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMjQgaG91cnNcbiIpOworCX0KKwlteSAkb2Zmc2V0ID0gJGxvY2FsbWluIC0gJGdtdG1pbjsKKwlteSAkb2ZmaG91ciA9ICRvZmZzZXQgLyA2MDsKKwlteSAkb2ZmbWluID0gYWJzKCRvZmZzZXQgJSA2MCk7CisJaWYgKGFicygkb2ZmaG91cikgPj0gMjQpIHsKKwkJZGllIF9fKCJsb2NhbCB0aW1lIG9mZnNldCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMjQgaG91cnNcbiIpOworCX0KKworCXJldHVybiBzcHJpbnRmKCIlcywgJTJkICVzICVkICUwMmQ6JTAyZDolMDJkICVzJTAyZCUwMmQiLAorCQkgICAgICAgcXcoU3VuIE1vbiBUdWUgV2VkIFRodSBGcmkgU2F0KVskbG9jYWx0bVs2XV0sCisJCSAgICAgICAkbG9jYWx0bVszXSwKKwkJICAgICAgIHF3KEphbiBGZWIgTWFyIEFwciBNYXkgSnVuCisJCQkgIEp1bCBBdWcgU2VwIE9jdCBOb3YgRGVjKVskbG9jYWx0bVs0XV0sCisJCSAgICAgICAkbG9jYWx0bVs1XSsxOTAwLAorCQkgICAgICAgJGxvY2FsdG1bMl0sCisJCSAgICAgICAkbG9jYWx0bVsxXSwKKwkJICAgICAgICRsb2NhbHRtWzBdLAorCQkgICAgICAgKCRvZmZzZXQgPj0gMCkgPyAnKycgOiAnLScsCisJCSAgICAgICBhYnMoJG9mZmhvdXIpLAorCQkgICAgICAgJG9mZm1pbiwKKwkJICAgICAgICk7Cit9CisKK215ICRoYXZlX2VtYWlsX3ZhbGlkID0gZXZhbCB7IHJlcXVpcmUgRW1haWw6OlZhbGlkOyAxIH07CitteSAkc210cDsKK215ICRhdXRoOworbXkgJG51bV9zZW50ID0gMDsKKworIyBSZWdleGVzIGZvciBSRkMgMjA0NyBwcm9kdWN0aW9ucy4KK215ICRyZV90b2tlbiA9IHFyL1teXVsoKTw+QCw7OlxcIlwvPy49IFwwMDAtXDAzN1wxNzctXDM3N10rLzsKK215ICRyZV9lbmNvZGVkX3RleHQgPSBxci9bXj8gXDAwMC1cMDM3XDE3Ny1cMzc3XSsvOworbXkgJHJlX2VuY29kZWRfd29yZCA9IHFyLz1cPygkcmVfdG9rZW4pXD8oJHJlX3Rva2VuKVw/KCRyZV9lbmNvZGVkX3RleHQpXD89LzsKKworIyBWYXJpYWJsZXMgd2UgZmlsbCBpbiBhdXRvbWF0aWNhbGx5LCBvciB2aWEgcHJvbXB0aW5nOgorbXkgKEB0byxAY2MsQHhoLCRlbnZlbG9wZV9zZW5kZXIsCisJJGluaXRpYWxfaW5fcmVwbHlfdG8sJHJlcGx5X3RvLCRpbml0aWFsX3N1YmplY3QsQGZpbGVzLAorCSRhdXRob3IsJHNlbmRlciwkc210cF9hdXRocGFzcywkYW5ub3RhdGUsJGNvbXBvc2UsJHRpbWUpOworIyBUaGluZ3Mgd2UgZWl0aGVyIGdldCBmcm9tIGNvbmZpZywgKm9yKiBhcmUgb3ZlcnJpZGRlbiBvbiB0aGUKKyMgY29tbWFuZC1saW5lLgorbXkgKCRub19jYywgJG5vX3RvLCAkbm9fYmNjLCAkbm9faWRlbnRpdHkpOworbXkgKEBjb25maWdfdG8sIEBnZXRvcHRfdG8pOworbXkgKEBjb25maWdfY2MsIEBnZXRvcHRfY2MpOworbXkgKEBjb25maWdfYmNjLCBAZ2V0b3B0X2JjYyk7CisKKyMgRXhhbXBsZSByZXBseSB0bzoKKyMkaW5pdGlhbF9pbl9yZXBseV90byA9ICcnOyAjPDIwMDUwMjAzMTczMjA4LkdBMjM5NjRAZm9vYmFyLmNvbT4nOworCitteSAkcmVwbyA9IGV2YWwgeyBHaXQtPnJlcG9zaXRvcnkoKSB9OworbXkgQHJlcG8gPSAkcmVwbyA/ICgkcmVwbykgOiAoKTsKK215ICR0ZXJtID0gZXZhbCB7CisJJEVOVnsiR0lUX1NFTkRfRU1BSUxfTk9UVFkifQorCQk/IG5ldyBUZXJtOjpSZWFkTGluZSAnZ2l0LXNlbmQtZW1haWwnLCBcKlNURElOLCBcKlNURE9VVAorCQk6IG5ldyBUZXJtOjpSZWFkTGluZSAnZ2l0LXNlbmQtZW1haWwnOworfTsKK2lmICgkQCkgeworCSR0ZXJtID0gbmV3IEZha2VUZXJtICIkQDogZ29pbmcgbm9uLWludGVyYWN0aXZlIjsKK30KKworIyBCZWhhdmlvciBtb2RpZmljYXRpb24gdmFyaWFibGVzCitteSAoJHF1aWV0LCAkZHJ5X3J1bikgPSAoMCwgMCk7CitteSAkZm9ybWF0X3BhdGNoOworbXkgJGNvbXBvc2VfZmlsZW5hbWU7CitteSAkZm9yY2UgPSAwOworbXkgJGR1bXBfYWxpYXNlcyA9IDA7CisKKyMgSGFuZGxlIGludGVyYWN0aXZlIGVkaXRpb24gb2YgZmlsZXMuCitteSAkbXVsdGllZGl0OworbXkgJGVkaXRvcjsKKworc3ViIGRvX2VkaXQgeworCWlmICghZGVmaW5lZCgkZWRpdG9yKSkgeworCQkkZWRpdG9yID0gR2l0Ojpjb21tYW5kX29uZWxpbmUoJ3ZhcicsICdHSVRfRURJVE9SJyk7CisJfQorCWlmIChkZWZpbmVkKCRtdWx0aWVkaXQpICYmICEkbXVsdGllZGl0KSB7CisJCW1hcCB7CisJCQlzeXN0ZW0oJ3NoJywgJy1jJywgJGVkaXRvci4nICIkQCInLCAkZWRpdG9yLCAkXyk7CisJCQlpZiAoKCQ/ICYgMTI3KSB8fCAoJD8gPj4gOCkpIHsKKwkJCQlkaWUoX18oInRoZSBlZGl0b3IgZXhpdGVkIHVuY2xlYW5seSwgYWJvcnRpbmcgZXZlcnl0aGluZyIpKTsKKwkJCX0KKwkJfSBAXzsKKwl9IGVsc2UgeworCQlzeXN0ZW0oJ3NoJywgJy1jJywgJGVkaXRvci4nICIkQCInLCAkZWRpdG9yLCBAXyk7CisJCWlmICgoJD8gJiAxMjcpIHx8ICgkPyA+PiA4KSkgeworCQkJZGllKF9fKCJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciKSk7CisJCX0KKwl9Cit9CisKKyMgVmFyaWFibGVzIHdpdGggY29ycmVzcG9uZGluZyBjb25maWcgc2V0dGluZ3MKK215ICgkc3VwcHJlc3NfZnJvbSwgJHNpZ25lZF9vZmZfYnlfY2MpOworbXkgKCRjb3Zlcl9jYywgJGNvdmVyX3RvKTsKK215ICgkdG9fY21kLCAkY2NfY21kKTsKK215ICgkc210cF9zZXJ2ZXIsICRzbXRwX3NlcnZlcl9wb3J0LCBAc210cF9zZXJ2ZXJfb3B0aW9ucyk7CitteSAoJHNtdHBfYXV0aHVzZXIsICRzbXRwX2VuY3J5cHRpb24sICRzbXRwX3NzbF9jZXJ0X3BhdGgpOworbXkgKCRiYXRjaF9zaXplLCAkcmVsb2dpbl9kZWxheSk7CitteSAoJGlkZW50aXR5LCAkYWxpYXNmaWxldHlwZSwgQGFsaWFzX2ZpbGVzLCAkc210cF9kb21haW4sICRzbXRwX2F1dGgpOworbXkgKCRjb25maXJtKTsKK215IChAc3VwcHJlc3NfY2MpOworbXkgKCRhdXRvXzhiaXRfZW5jb2RpbmcpOworbXkgKCRjb21wb3NlX2VuY29kaW5nKTsKKyMgVmFyaWFibGVzIHdpdGggY29ycmVzcG9uZGluZyBjb25maWcgc2V0dGluZ3MgJiBoYXJkY29kZWQgZGVmYXVsdHMKK215ICgkZGVidWdfbmV0X3NtdHApID0gMDsJCSMgTmV0OjpTTVRQLCBzZWUgc2VuZF9tZXNzYWdlKCkKK215ICR0aHJlYWQgPSAxOworbXkgJGNoYWluX3JlcGx5X3RvID0gMDsKK215ICR1c2VfeG1haWxlciA9IDE7CitteSAkdmFsaWRhdGUgPSAxOworbXkgJHRhcmdldF94ZmVyX2VuY29kaW5nID0gJ2F1dG8nOworCitteSAlY29uZmlnX2Jvb2xfc2V0dGluZ3MgPSAoCisgICAgInRocmVhZCIgPT4gXCR0aHJlYWQsCisgICAgImNoYWlucmVwbHl0byIgPT4gXCRjaGFpbl9yZXBseV90bywKKyAgICAic3VwcHJlc3Nmcm9tIiA9PiBcJHN1cHByZXNzX2Zyb20sCisgICAgInNpZ25lZG9mZmJ5Y2MiID0+IFwkc2lnbmVkX29mZl9ieV9jYywKKyAgICAiY2Njb3ZlciIgPT4gXCRjb3Zlcl9jYywKKyAgICAidG9jb3ZlciIgPT4gXCRjb3Zlcl90bywKKyAgICAic2lnbmVkb2ZmY2MiID0+IFwkc2lnbmVkX29mZl9ieV9jYywKKyAgICAidmFsaWRhdGUiID0+IFwkdmFsaWRhdGUsCisgICAgIm11bHRpZWRpdCIgPT4gXCRtdWx0aWVkaXQsCisgICAgImFubm90YXRlIiA9PiBcJGFubm90YXRlLAorICAgICJ4bWFpbGVyIiA9PiBcJHVzZV94bWFpbGVyLAorKTsKKworbXkgJWNvbmZpZ19zZXR0aW5ncyA9ICgKKyAgICAic210cHNlcnZlciIgPT4gXCRzbXRwX3NlcnZlciwKKyAgICAic210cHNlcnZlcnBvcnQiID0+IFwkc210cF9zZXJ2ZXJfcG9ydCwKKyAgICAic210cHNlcnZlcm9wdGlvbiIgPT4gXEBzbXRwX3NlcnZlcl9vcHRpb25zLAorICAgICJzbXRwdXNlciIgPT4gXCRzbXRwX2F1dGh1c2VyLAorICAgICJzbXRwcGFzcyIgPT4gXCRzbXRwX2F1dGhwYXNzLAorICAgICJzbXRwZG9tYWluIiA9PiBcJHNtdHBfZG9tYWluLAorICAgICJzbXRwYXV0aCIgPT4gXCRzbXRwX2F1dGgsCisgICAgInNtdHBiYXRjaHNpemUiID0+IFwkYmF0Y2hfc2l6ZSwKKyAgICAic210cHJlbG9naW5kZWxheSIgPT4gXCRyZWxvZ2luX2RlbGF5LAorICAgICJ0byIgPT4gXEBjb25maWdfdG8sCisgICAgInRvY21kIiA9PiBcJHRvX2NtZCwKKyAgICAiY2MiID0+IFxAY29uZmlnX2NjLAorICAgICJjY2NtZCIgPT4gXCRjY19jbWQsCisgICAgImFsaWFzZmlsZXR5cGUiID0+IFwkYWxpYXNmaWxldHlwZSwKKyAgICAiYmNjIiA9PiBcQGNvbmZpZ19iY2MsCisgICAgInN1cHByZXNzY2MiID0+IFxAc3VwcHJlc3NfY2MsCisgICAgImVudmVsb3Blc2VuZGVyIiA9PiBcJGVudmVsb3BlX3NlbmRlciwKKyAgICAiY29uZmlybSIgICA9PiBcJGNvbmZpcm0sCisgICAgImZyb20iID0+IFwkc2VuZGVyLAorICAgICJhc3N1bWU4Yml0ZW5jb2RpbmciID0+IFwkYXV0b184Yml0X2VuY29kaW5nLAorICAgICJjb21wb3NlZW5jb2RpbmciID0+IFwkY29tcG9zZV9lbmNvZGluZywKKyAgICAidHJhbnNmZXJlbmNvZGluZyIgPT4gXCR0YXJnZXRfeGZlcl9lbmNvZGluZywKKyk7CisKK215ICVjb25maWdfcGF0aF9zZXR0aW5ncyA9ICgKKyAgICAiYWxpYXNlc2ZpbGUiID0+IFxAYWxpYXNfZmlsZXMsCisgICAgInNtdHBzc2xjZXJ0cGF0aCIgPT4gXCRzbXRwX3NzbF9jZXJ0X3BhdGgsCispOworCisjIEhhbmRsZSBVbmNvdXRoIFRlcm1pbmF0aW9uCitzdWIgc2lnbmFsX2hhbmRsZXIgeworCisJIyBNYWtlIHRleHQgbm9ybWFsCisJcHJpbnQgY29sb3IoInJlc2V0IiksICJcbiI7CisKKwkjIFNNVFAgcGFzc3dvcmQgbWFza2VkCisJc3lzdGVtICJzdHR5IGVjaG8iOworCisJIyB0bXAgZmlsZXMgZnJvbSAtLWNvbXBvc2UKKwlpZiAoZGVmaW5lZCAkY29tcG9zZV9maWxlbmFtZSkgeworCQlpZiAoLWUgJGNvbXBvc2VfZmlsZW5hbWUpIHsKKwkJCXByaW50ZiBfXygiJyVzJyBjb250YWlucyBhbiBpbnRlcm1lZGlhdGUgdmVyc2lvbiAiLgorCQkJCSAgIm9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iKSwKKwkJCQkgICRjb21wb3NlX2ZpbGVuYW1lOworCQl9CisJCWlmICgtZSAoJGNvbXBvc2VfZmlsZW5hbWUgLiAiLmZpbmFsIikpIHsKKwkJCXByaW50ZiBfXygiJyVzLmZpbmFsJyBjb250YWlucyB0aGUgY29tcG9zZWQgZW1haWwuXG4iKSwKKwkJCQkgICRjb21wb3NlX2ZpbGVuYW1lOworCQl9CisJfQorCisJZXhpdDsKK307CisKKyRTSUd7VEVSTX0gPSBcJnNpZ25hbF9oYW5kbGVyOworJFNJR3tJTlR9ICA9IFwmc2lnbmFsX2hhbmRsZXI7CisKKyMgUmVhZCBvdXIgc2VuZGVtYWlsLiogY29uZmlnCitzdWIgcmVhZF9jb25maWcgeworCW15ICgkY29uZmlndXJlZCwgJHByZWZpeCkgPSBAXzsKKworCWZvcmVhY2ggbXkgJHNldHRpbmcgKGtleXMgJWNvbmZpZ19ib29sX3NldHRpbmdzKSB7CisJCW15ICR0YXJnZXQgPSAkY29uZmlnX2Jvb2xfc2V0dGluZ3N7JHNldHRpbmd9OworCQlteSAkdiA9IEdpdDo6Y29uZmlnX2Jvb2woQHJlcG8sICIkcHJlZml4LiRzZXR0aW5nIik7CisJCW5leHQgdW5sZXNzIGRlZmluZWQgJHY7CisJCW5leHQgaWYgJGNvbmZpZ3VyZWQtPnskc2V0dGluZ30rKzsKKwkJJCR0YXJnZXQgPSAkdjsKKwl9CisKKwlmb3JlYWNoIG15ICRzZXR0aW5nIChrZXlzICVjb25maWdfcGF0aF9zZXR0aW5ncykgeworCQlteSAkdGFyZ2V0ID0gJGNvbmZpZ19wYXRoX3NldHRpbmdzeyRzZXR0aW5nfTsKKwkJaWYgKHJlZigkdGFyZ2V0KSBlcSAiQVJSQVkiKSB7CisJCQlteSBAdmFsdWVzID0gR2l0Ojpjb25maWdfcGF0aChAcmVwbywgIiRwcmVmaXguJHNldHRpbmciKTsKKwkJCW5leHQgdW5sZXNzIEB2YWx1ZXM7CisJCQluZXh0IGlmICRjb25maWd1cmVkLT57JHNldHRpbmd9Kys7CisJCQlAJHRhcmdldCA9IEB2YWx1ZXM7CisJCX0KKwkJZWxzZSB7CisJCQlteSAkdiA9IEdpdDo6Y29uZmlnX3BhdGgoQHJlcG8sICIkcHJlZml4LiRzZXR0aW5nIik7CisJCQluZXh0IHVubGVzcyBkZWZpbmVkICR2OworCQkJbmV4dCBpZiAkY29uZmlndXJlZC0+eyRzZXR0aW5nfSsrOworCQkJJCR0YXJnZXQgPSAkdjsKKwkJfQorCX0KKworCWZvcmVhY2ggbXkgJHNldHRpbmcgKGtleXMgJWNvbmZpZ19zZXR0aW5ncykgeworCQlteSAkdGFyZ2V0ID0gJGNvbmZpZ19zZXR0aW5nc3skc2V0dGluZ307CisJCWlmIChyZWYoJHRhcmdldCkgZXEgIkFSUkFZIikgeworCQkJbXkgQHZhbHVlcyA9IEdpdDo6Y29uZmlnKEByZXBvLCAiJHByZWZpeC4kc2V0dGluZyIpOworCQkJbmV4dCB1bmxlc3MgQHZhbHVlczsKKwkJCW5leHQgaWYgJGNvbmZpZ3VyZWQtPnskc2V0dGluZ30rKzsKKwkJCUAkdGFyZ2V0ID0gQHZhbHVlczsKKwkJfQorCQllbHNlIHsKKwkJCW15ICR2ID0gR2l0Ojpjb25maWcoQHJlcG8sICIkcHJlZml4LiRzZXR0aW5nIik7CisJCQluZXh0IHVubGVzcyBkZWZpbmVkICR2OworCQkJbmV4dCBpZiAkY29uZmlndXJlZC0+eyRzZXR0aW5nfSsrOworCQkJJCR0YXJnZXQgPSAkdjsKKwkJfQorCX0KKworCWlmICghZGVmaW5lZCAkc210cF9lbmNyeXB0aW9uKSB7CisJCW15ICRzZXR0aW5nID0gIiRwcmVmaXguc210cGVuY3J5cHRpb24iOworCQlteSAkZW5jID0gR2l0Ojpjb25maWcoQHJlcG8sICRzZXR0aW5nKTsKKwkJcmV0dXJuIHVubGVzcyBkZWZpbmVkICRlbmM7CisJCXJldHVybiBpZiAkY29uZmlndXJlZC0+eyRzZXR0aW5nfSsrOworCQlpZiAoZGVmaW5lZCAkZW5jKSB7CisJCQkkc210cF9lbmNyeXB0aW9uID0gJGVuYzsKKwkJfSBlbHNpZiAoR2l0Ojpjb25maWdfYm9vbChAcmVwbywgIiRwcmVmaXguc210cHNzbCIpKSB7CisJCQkkc210cF9lbmNyeXB0aW9uID0gJ3NzbCc7CisJCX0KKwl9Cit9CisKKyMgc2VuZGVtYWlsLmlkZW50aXR5IHlpZWxkcyB0byAtLWlkZW50aXR5LiBXZSBtdXN0IHBhcnNlIHRoaXMKKyMgc3BlY2lhbC1jYXNlIGZpcnN0IGJlZm9yZSB0aGUgcmVzdCBvZiB0aGUgY29uZmlnIGlzIHJlYWQuCiskaWRlbnRpdHkgPSBHaXQ6OmNvbmZpZyhAcmVwbywgInNlbmRlbWFpbC5pZGVudGl0eSIpOworbXkgJHJjID0gR2V0T3B0aW9ucygKKwkiaWRlbnRpdHk9cyIgPT4gXCRpZGVudGl0eSwKKwkibm8taWRlbnRpdHkiID0+IFwkbm9faWRlbnRpdHksCispOwordXNhZ2UoKSB1bmxlc3MgJHJjOwordW5kZWYgJGlkZW50aXR5IGlmICRub19pZGVudGl0eTsKKworIyBOb3cgd2Uga25vdyBlbm91Z2ggdG8gcmVhZCB0aGUgY29uZmlnCit7CisgICAgbXkgJWNvbmZpZ3VyZWQ7CisgICAgcmVhZF9jb25maWcoXCVjb25maWd1cmVkLCAic2VuZGVtYWlsLiRpZGVudGl0eSIpIGlmIGRlZmluZWQgJGlkZW50aXR5OworICAgIHJlYWRfY29uZmlnKFwlY29uZmlndXJlZCwgInNlbmRlbWFpbCIpOworfQorCisjIEJlZ2luIGJ5IGFjY3VtdWxhdGluZyBhbGwgdGhlIHZhcmlhYmxlcyAoZGVmaW5lZCBhYm92ZSksIHRoYXQgd2Ugd2lsbCBlbmQgdXAKKyMgbmVlZGluZywgZmlyc3QsIGZyb20gdGhlIGNvbW1hbmQgbGluZToKKworbXkgJGhlbHA7CitteSAkZ2l0X2NvbXBsZXRpb25faGVscGVyOworJHJjID0gR2V0T3B0aW9ucygiaCIgPT4gXCRoZWxwLAorICAgICAgICAgICAgICAgICAiZHVtcC1hbGlhc2VzIiA9PiBcJGR1bXBfYWxpYXNlcyk7Cit1c2FnZSgpIHVubGVzcyAkcmM7CitkaWUgX18oIi0tZHVtcC1hbGlhc2VzIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIG9wdGlvbnNcbiIpCisgICAgaWYgISRoZWxwIGFuZCAkZHVtcF9hbGlhc2VzIGFuZCBAQVJHVjsKKyRyYyA9IEdldE9wdGlvbnMoCisJCSAgICAic2VuZGVyfGZyb209cyIgPT4gXCRzZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICJpbi1yZXBseS10bz1zIiA9PiBcJGluaXRpYWxfaW5fcmVwbHlfdG8sCisJCSAgICAicmVwbHktdG89cyIgPT4gXCRyZXBseV90bywKKwkJICAgICJzdWJqZWN0PXMiID0+IFwkaW5pdGlhbF9zdWJqZWN0LAorCQkgICAgInRvPXMiID0+IFxAZ2V0b3B0X3RvLAorCQkgICAgInRvLWNtZD1zIiA9PiBcJHRvX2NtZCwKKwkJICAgICJuby10byIgPT4gXCRub190bywKKwkJICAgICJjYz1zIiA9PiBcQGdldG9wdF9jYywKKwkJICAgICJuby1jYyIgPT4gXCRub19jYywKKwkJICAgICJiY2M9cyIgPT4gXEBnZXRvcHRfYmNjLAorCQkgICAgIm5vLWJjYyIgPT4gXCRub19iY2MsCisJCSAgICAiY2hhaW4tcmVwbHktdG8hIiA9PiBcJGNoYWluX3JlcGx5X3RvLAorCQkgICAgIm5vLWNoYWluLXJlcGx5LXRvIiA9PiBzdWIgeyRjaGFpbl9yZXBseV90byA9IDB9LAorCQkgICAgInNtdHAtc2VydmVyPXMiID0+IFwkc210cF9zZXJ2ZXIsCisJCSAgICAic210cC1zZXJ2ZXItb3B0aW9uPXMiID0+IFxAc210cF9zZXJ2ZXJfb3B0aW9ucywKKwkJICAgICJzbXRwLXNlcnZlci1wb3J0PXMiID0+IFwkc210cF9zZXJ2ZXJfcG9ydCwKKwkJICAgICJzbXRwLXVzZXI9cyIgPT4gXCRzbXRwX2F1dGh1c2VyLAorCQkgICAgInNtdHAtcGFzczpzIiA9PiBcJHNtdHBfYXV0aHBhc3MsCisJCSAgICAic210cC1zc2wiID0+IHN1YiB7ICRzbXRwX2VuY3J5cHRpb24gPSAnc3NsJyB9LAorCQkgICAgInNtdHAtZW5jcnlwdGlvbj1zIiA9PiBcJHNtdHBfZW5jcnlwdGlvbiwKKwkJICAgICJzbXRwLXNzbC1jZXJ0LXBhdGg9cyIgPT4gXCRzbXRwX3NzbF9jZXJ0X3BhdGgsCisJCSAgICAic210cC1kZWJ1ZzppIiA9PiBcJGRlYnVnX25ldF9zbXRwLAorCQkgICAgInNtdHAtZG9tYWluOnMiID0+IFwkc210cF9kb21haW4sCisJCSAgICAic210cC1hdXRoPXMiID0+IFwkc210cF9hdXRoLAorCQkgICAgIm5vLXNtdHAtYXV0aCIgPT4gc3ViIHskc210cF9hdXRoID0gJ25vbmUnfSwKKwkJICAgICJhbm5vdGF0ZSEiID0+IFwkYW5ub3RhdGUsCisJCSAgICAibm8tYW5ub3RhdGUiID0+IHN1YiB7JGFubm90YXRlID0gMH0sCisJCSAgICAiY29tcG9zZSIgPT4gXCRjb21wb3NlLAorCQkgICAgInF1aWV0IiA9PiBcJHF1aWV0LAorCQkgICAgImNjLWNtZD1zIiA9PiBcJGNjX2NtZCwKKwkJICAgICJzdXBwcmVzcy1mcm9tISIgPT4gXCRzdXBwcmVzc19mcm9tLAorCQkgICAgIm5vLXN1cHByZXNzLWZyb20iID0+IHN1YiB7JHN1cHByZXNzX2Zyb20gPSAwfSwKKwkJICAgICJzdXBwcmVzcy1jYz1zIiA9PiBcQHN1cHByZXNzX2NjLAorCQkgICAgInNpZ25lZC1vZmYtY2N8c2lnbmVkLW9mZi1ieS1jYyEiID0+IFwkc2lnbmVkX29mZl9ieV9jYywKKwkJICAgICJuby1zaWduZWQtb2ZmLWNjfG5vLXNpZ25lZC1vZmYtYnktY2MiID0+IHN1YiB7JHNpZ25lZF9vZmZfYnlfY2MgPSAwfSwKKwkJICAgICJjYy1jb3ZlcnxjYy1jb3ZlciEiID0+IFwkY292ZXJfY2MsCisJCSAgICAibm8tY2MtY292ZXIiID0+IHN1YiB7JGNvdmVyX2NjID0gMH0sCisJCSAgICAidG8tY292ZXJ8dG8tY292ZXIhIiA9PiBcJGNvdmVyX3RvLAorCQkgICAgIm5vLXRvLWNvdmVyIiA9PiBzdWIgeyRjb3Zlcl90byA9IDB9LAorCQkgICAgImNvbmZpcm09cyIgPT4gXCRjb25maXJtLAorCQkgICAgImRyeS1ydW4iID0+IFwkZHJ5X3J1biwKKwkJICAgICJlbnZlbG9wZS1zZW5kZXI9cyIgPT4gXCRlbnZlbG9wZV9zZW5kZXIsCisJCSAgICAidGhyZWFkISIgPT4gXCR0aHJlYWQsCisJCSAgICAibm8tdGhyZWFkIiA9PiBzdWIgeyR0aHJlYWQgPSAwfSwKKwkJICAgICJ2YWxpZGF0ZSEiID0+IFwkdmFsaWRhdGUsCisJCSAgICAibm8tdmFsaWRhdGUiID0+IHN1YiB7JHZhbGlkYXRlID0gMH0sCisJCSAgICAidHJhbnNmZXItZW5jb2Rpbmc9cyIgPT4gXCR0YXJnZXRfeGZlcl9lbmNvZGluZywKKwkJICAgICJmb3JtYXQtcGF0Y2ghIiA9PiBcJGZvcm1hdF9wYXRjaCwKKwkJICAgICJuby1mb3JtYXQtcGF0Y2giID0+IHN1YiB7JGZvcm1hdF9wYXRjaCA9IDB9LAorCQkgICAgIjhiaXQtZW5jb2Rpbmc9cyIgPT4gXCRhdXRvXzhiaXRfZW5jb2RpbmcsCisJCSAgICAiY29tcG9zZS1lbmNvZGluZz1zIiA9PiBcJGNvbXBvc2VfZW5jb2RpbmcsCisJCSAgICAiZm9yY2UiID0+IFwkZm9yY2UsCisJCSAgICAieG1haWxlciEiID0+IFwkdXNlX3htYWlsZXIsCisJCSAgICAibm8teG1haWxlciIgPT4gc3ViIHskdXNlX3htYWlsZXIgPSAwfSwKKwkJICAgICJiYXRjaC1zaXplPWkiID0+IFwkYmF0Y2hfc2l6ZSwKKwkJICAgICJyZWxvZ2luLWRlbGF5PWkiID0+IFwkcmVsb2dpbl9kZWxheSwKKwkJICAgICJnaXQtY29tcGxldGlvbi1oZWxwZXIiID0+IFwkZ2l0X2NvbXBsZXRpb25faGVscGVyLAorCSApOworCisjIE11bmdlIGFueSAiZWl0aGVyIGNvbmZpZyBvciBnZXRvcHQsIG5vdCBib3RoIiB2YXJpYWJsZXMKK215IEBpbml0aWFsX3RvID0gQGdldG9wdF90byA/IEBnZXRvcHRfdG8gOiAoJG5vX3RvID8gKCkgOiBAY29uZmlnX3RvKTsKK215IEBpbml0aWFsX2NjID0gQGdldG9wdF9jYyA/IEBnZXRvcHRfY2MgOiAoJG5vX2NjID8gKCkgOiBAY29uZmlnX2NjKTsKK215IEBpbml0aWFsX2JjYyA9IEBnZXRvcHRfYmNjID8gQGdldG9wdF9iY2MgOiAoJG5vX2JjYyA/ICgpIDogQGNvbmZpZ19iY2MpOworCit1c2FnZSgpIGlmICRoZWxwOworY29tcGxldGlvbl9oZWxwZXIoKSBpZiAkZ2l0X2NvbXBsZXRpb25faGVscGVyOwordW5sZXNzICgkcmMpIHsKKyAgICB1c2FnZSgpOworfQorCitkaWUgX18oIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iKQorCWlmICRmb3JtYXRfcGF0Y2ggYW5kIG5vdCAkcmVwbzsKKworZGllIF9fKCJgYmF0Y2gtc2l6ZWAgYW5kIGByZWxvZ2luYCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciAiIC4KKwkiKHZpYSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJhdGlvbiBvcHRpb24pXG4iKQorCWlmIGRlZmluZWQgJHJlbG9naW5fZGVsYXkgYW5kIG5vdCBkZWZpbmVkICRiYXRjaF9zaXplOworCisjICdkZWZhdWx0JyBlbmNyeXB0aW9uIGlzIG5vbmUgLS0gdGhpcyBvbmx5IHByZXZlbnRzIGEgd2FybmluZworJHNtdHBfZW5jcnlwdGlvbiA9ICcnIHVubGVzcyAoZGVmaW5lZCAkc210cF9lbmNyeXB0aW9uKTsKKworIyBTZXQgQ0Mgc3VwcHJlc3Npb25zCitteSglc3VwcHJlc3NfY2MpOworaWYgKEBzdXBwcmVzc19jYykgeworCWZvcmVhY2ggbXkgJGVudHJ5IChAc3VwcHJlc3NfY2MpIHsKKwkJIyBQbGVhc2UgdXBkYXRlICRfX2dpdF9zZW5kX2VtYWlsX3N1cHByZXNzY2Nfb3B0aW9ucworCQkjIGluIGdpdC1jb21wbGV0aW9uLmJhc2ggd2hlbiB5b3UgYWRkIG5ldyBvcHRpb25zLgorCQlkaWUgc3ByaW50ZihfXygiVW5rbm93biAtLXN1cHByZXNzLWNjIGZpZWxkOiAnJXMnXG4iKSwgJGVudHJ5KQorCQkJdW5sZXNzICRlbnRyeSA9fiAvXig/OmFsbHxjY2NtZHxjY3xhdXRob3J8c2VsZnxzb2J8Ym9keXxib2R5Y2N8bWlzYy1ieSkkLzsKKwkJJHN1cHByZXNzX2NjeyRlbnRyeX0gPSAxOworCX0KK30KKworaWYgKCRzdXBwcmVzc19jY3snYWxsJ30pIHsKKwlmb3JlYWNoIG15ICRlbnRyeSAocXcgKGNjY21kIGNjIGF1dGhvciBzZWxmIHNvYiBib2R5IGJvZHljYyBtaXNjLWJ5KSkgeworCQkkc3VwcHJlc3NfY2N7JGVudHJ5fSA9IDE7CisJfQorCWRlbGV0ZSAkc3VwcHJlc3NfY2N7J2FsbCd9OworfQorCisjIElmIGV4cGxpY2l0IG9sZC1zdHlsZSBvbmVzIGFyZSBzcGVjaWZpZWQsIHRoZXkgdHJ1bXAgLS1zdXBwcmVzcy1jYy4KKyRzdXBwcmVzc19jY3snc2VsZid9ID0gJHN1cHByZXNzX2Zyb20gaWYgZGVmaW5lZCAkc3VwcHJlc3NfZnJvbTsKKyRzdXBwcmVzc19jY3snc29iJ30gPSAhJHNpZ25lZF9vZmZfYnlfY2MgaWYgZGVmaW5lZCAkc2lnbmVkX29mZl9ieV9jYzsKKworaWYgKCRzdXBwcmVzc19jY3snYm9keSd9KSB7CisJZm9yZWFjaCBteSAkZW50cnkgKHF3IChzb2IgYm9keWNjIG1pc2MtYnkpKSB7CisJCSRzdXBwcmVzc19jY3skZW50cnl9ID0gMTsKKwl9CisJZGVsZXRlICRzdXBwcmVzc19jY3snYm9keSd9OworfQorCisjIFNldCBjb25maXJtJ3MgZGVmYXVsdCB2YWx1ZQorbXkgJGNvbmZpcm1fdW5jb25maWd1cmVkID0gIWRlZmluZWQgJGNvbmZpcm07CitpZiAoJGNvbmZpcm1fdW5jb25maWd1cmVkKSB7CisJJGNvbmZpcm0gPSBzY2FsYXIgJXN1cHByZXNzX2NjID8gJ2NvbXBvc2UnIDogJ2F1dG8nOworfTsKKyMgUGxlYXNlIHVwZGF0ZSAkX19naXRfc2VuZF9lbWFpbF9jb25maXJtX29wdGlvbnMgaW4KKyMgZ2l0LWNvbXBsZXRpb24uYmFzaCB3aGVuIHlvdSBhZGQgbmV3IG9wdGlvbnMuCitkaWUgc3ByaW50ZihfXygiVW5rbm93biAtLWNvbmZpcm0gc2V0dGluZzogJyVzJ1xuIiksICRjb25maXJtKQorCXVubGVzcyAkY29uZmlybSA9fiAvXig/OmF1dG98Y2N8Y29tcG9zZXxhbHdheXN8bmV2ZXIpLzsKKworIyBEZWJ1Z2dpbmcsIHByaW50IG91dCB0aGUgc3VwcHJlc3Npb25zLgoraWYgKDApIHsKKwlwcmludCAic3VwcHJlc3Npb25zOlxuIjsKKwlmb3JlYWNoIG15ICRlbnRyeSAoa2V5cyAlc3VwcHJlc3NfY2MpIHsKKwkJcHJpbnRmICIgICUtNXMgLT4gJHN1cHByZXNzX2NjeyRlbnRyeX1cbiIsICRlbnRyeTsKKwl9Cit9CisKK215ICgkcmVwb2F1dGhvciwgJHJlcG9jb21taXR0ZXIpOworKCRyZXBvYXV0aG9yKSA9IEdpdDo6aWRlbnRfcGVyc29uKEByZXBvLCAnYXV0aG9yJyk7CisoJHJlcG9jb21taXR0ZXIpID0gR2l0OjppZGVudF9wZXJzb24oQHJlcG8sICdjb21taXR0ZXInKTsKKworc3ViIHBhcnNlX2FkZHJlc3NfbGluZSB7CisJcmV0dXJuIG1hcCB7ICRfLT5mb3JtYXQgfSBNYWlsOjpBZGRyZXNzLT5wYXJzZSgkX1swXSk7Cit9CisKK3N1YiBzcGxpdF9hZGRycyB7CisJcmV0dXJuIHF1b3Rld29yZHMoJ1xzKixccyonLCAxLCBAXyk7Cit9CisKK215ICVhbGlhc2VzOworCitzdWIgcGFyc2Vfc2VuZG1haWxfYWxpYXMgeworCWxvY2FsICRfID0gc2hpZnQ7CisJaWYgKC8iLykgeworCQlwcmludGYgU1RERVJSIF9fKCJ3YXJuaW5nOiBzZW5kbWFpbCBhbGlhcyB3aXRoIHF1b3RlcyBpcyBub3Qgc3VwcG9ydGVkOiAlc1xuIiksICRfOworCX0gZWxzaWYgKC86aW5jbHVkZTovKSB7CisJCXByaW50ZiBTVERFUlIgX18oIndhcm5pbmc6IGA6aW5jbHVkZTpgIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iKSwgJF87CisJfSBlbHNpZiAoL1tcL3xdLykgeworCQlwcmludGYgU1RERVJSIF9fKCJ3YXJuaW5nOiBgL2ZpbGVgIG9yIGB8cGlwZWAgcmVkaXJlY3Rpb24gbm90IHN1cHBvcnRlZDogJXNcbiIpLCAkXzsKKwl9IGVsc2lmICgvXihcUys/KVxzKjpccyooLispJC8pIHsKKwkJbXkgKCRhbGlhcywgJGFkZHIpID0gKCQxLCAkMik7CisJCSRhbGlhc2VzeyRhbGlhc30gPSBbIHNwbGl0X2FkZHJzKCRhZGRyKSBdOworCX0gZWxzZSB7CisJCXByaW50ZiBTVERFUlIgX18oIndhcm5pbmc6IHNlbmRtYWlsIGxpbmUgaXMgbm90IHJlY29nbml6ZWQ6ICVzXG4iKSwgJF87CisJfQorfQorCitzdWIgcGFyc2Vfc2VuZG1haWxfYWxpYXNlcyB7CisJbXkgJGZoID0gc2hpZnQ7CisJbXkgJHMgPSAnJzsKKwl3aGlsZSAoPCRmaD4pIHsKKwkJY2hvbXA7CisJCW5leHQgaWYgL15ccyokLyB8fCAvXlxzKiMvOworCQkkcyAuPSAkXywgbmV4dCBpZiAkcyA9fiBzL1xcJC8vIHx8IHMvXlxzKy8vOworCQlwYXJzZV9zZW5kbWFpbF9hbGlhcygkcykgaWYgJHM7CisJCSRzID0gJF87CisJfQorCSRzID1+IHMvXFwkLy87ICMgc2lsZW50bHkgdG9sZXJhdGUgc3RyYXkgJ1wnIG9uIGxhc3QgbGluZQorCXBhcnNlX3NlbmRtYWlsX2FsaWFzKCRzKSBpZiAkczsKK30KKworbXkgJXBhcnNlX2FsaWFzID0gKAorCSMgbXVsdGlsaW5lIGZvcm1hdHMgY2FuIGJlIHN1cHBvcnRlZCBpbiB0aGUgZnV0dXJlCisJbXV0dCA9PiBzdWIgeyBteSAkZmggPSBzaGlmdDsgd2hpbGUgKDwkZmg+KSB7CisJCWlmICgvXlxzKmFsaWFzXHMrKD86LWdyb3VwXHMrXFMrXHMrKSooXFMrKVxzKyguKikkLykgeworCQkJbXkgKCRhbGlhcywgJGFkZHIpID0gKCQxLCAkMik7CisJCQkkYWRkciA9fiBzLyMuKiQvLzsgIyBtdXR0IGFsbG93cyAjIGNvbW1lbnRzCisJCQkjIGNvbW1hcyBkZWxpbWl0IG11bHRpcGxlIGFkZHJlc3NlcworCQkJbXkgQGFkZHIgPSBzcGxpdF9hZGRycygkYWRkcik7CisKKwkJCSMgcXVvdGVzIG1heSBiZSBlc2NhcGVkIGluIHRoZSBmaWxlLAorCQkJIyB1bmVzY2FwZSB0aGVtIHNvIHdlIGRvIG5vdCBkb3VibGUtZXNjYXBlIHRoZW0gbGF0ZXIuCisJCQlzL1xcIi8iL2cgZm9yZWFjaCBAYWRkcjsKKwkJCSRhbGlhc2VzeyRhbGlhc30gPSBcQGFkZHIKKwkJfX19LAorCW1haWxyYyA9PiBzdWIgeyBteSAkZmggPSBzaGlmdDsgd2hpbGUgKDwkZmg+KSB7CisJCWlmICgvXmFsaWFzXHMrKFxTKylccysoLio/KVxzKiQvKSB7CisJCQkjIHNwYWNlcyBkZWxpbWl0IG11bHRpcGxlIGFkZHJlc3NlcworCQkJJGFsaWFzZXN7JDF9ID0gWyBxdW90ZXdvcmRzKCdccysnLCAwLCAkMikgXTsKKwkJfX19LAorCXBpbmUgPT4gc3ViIHsgbXkgJGZoID0gc2hpZnQ7IG15ICRmPSdcdFteXHRdKic7CisJICAgICAgICBmb3IgKG15ICR4ID0gJyc7IGRlZmluZWQoJHgpOyAkeCA9ICRfKSB7CisJCQljaG9tcCAkeDsKKwkJICAgICAgICAkeCAuPSAkMSB3aGlsZShkZWZpbmVkKCRfID0gPCRmaD4pICYmIC9eICsoLiopJC8pOworCQkJJHggPX4gL14oXFMrKSRmXHRcKD8oW15cdF0rPylcKT8oOj8kZil7MCwyfSQvIG9yIG5leHQ7CisJCQkkYWxpYXNlc3skMX0gPSBbIHNwbGl0X2FkZHJzKCQyKSBdOworCQl9fSwKKwllbG0gPT4gc3ViICB7IG15ICRmaCA9IHNoaWZ0OworCQkgICAgICB3aGlsZSAoPCRmaD4pIHsKKwkJCSAgaWYgKC9eKFxTKylccys9XHMrW149XSs9XHMoXFMrKS8pIHsKKwkJCSAgICAgIG15ICgkYWxpYXMsICRhZGRyKSA9ICgkMSwgJDIpOworCQkJICAgICAgICRhbGlhc2VzeyRhbGlhc30gPSBbIHNwbGl0X2FkZHJzKCRhZGRyKSBdOworCQkJICB9CisJCSAgICAgIH0gfSwKKwlzZW5kbWFpbCA9PiBcJnBhcnNlX3NlbmRtYWlsX2FsaWFzZXMsCisJZ251cyA9PiBzdWIgeyBteSAkZmggPSBzaGlmdDsgd2hpbGUgKDwkZmg+KSB7CisJCWlmICgvXChkZWZpbmUtbWFpbC1hbGlhc1xzKyIoXFMrPykiXHMrIihcUys/KSJcKS8pIHsKKwkJCSRhbGlhc2VzeyQxfSA9IFsgJDIgXTsKKwkJfX19CisJIyBQbGVhc2UgdXBkYXRlIF9naXRfY29uZmlnKCkgaW4gZ2l0LWNvbXBsZXRpb24uYmFzaCB3aGVuIHlvdQorCSMgYWRkIG5ldyBNVUFzLgorKTsKKworaWYgKEBhbGlhc19maWxlcyBhbmQgJGFsaWFzZmlsZXR5cGUgYW5kIGRlZmluZWQgJHBhcnNlX2FsaWFzeyRhbGlhc2ZpbGV0eXBlfSkgeworCWZvcmVhY2ggbXkgJGZpbGUgKEBhbGlhc19maWxlcykgeworCQlvcGVuIG15ICRmaCwgJzwnLCAkZmlsZSBvciBkaWUgIm9wZW5pbmcgJGZpbGU6ICQhXG4iOworCQkkcGFyc2VfYWxpYXN7JGFsaWFzZmlsZXR5cGV9LT4oJGZoKTsKKwkJY2xvc2UgJGZoOworCX0KK30KKworaWYgKCRkdW1wX2FsaWFzZXMpIHsKKyAgICBwcmludCAiJF9cbiIgZm9yIChzb3J0IGtleXMgJWFsaWFzZXMpOworICAgIGV4aXQoMCk7Cit9CisKKyMgaXNfZm9ybWF0X3BhdGNoX2FyZygkZikgcmV0dXJucyAwIGlmICRmIG5hbWVzIGEgcGF0Y2gsIG9yIDEgaWYKKyMgJGYgaXMgYSByZXZpc2lvbiBsaXN0IHNwZWNpZmljYXRpb24gdG8gYmUgcGFzc2VkIHRvIGZvcm1hdC1wYXRjaC4KK3N1YiBpc19mb3JtYXRfcGF0Y2hfYXJnIHsKKwlyZXR1cm4gdW5sZXNzICRyZXBvOworCW15ICRmID0gc2hpZnQ7CisJdHJ5IHsKKwkJJHJlcG8tPmNvbW1hbmQoJ3Jldi1wYXJzZScsICctLXZlcmlmeScsICctLXF1aWV0JywgJGYpOworCQlpZiAoZGVmaW5lZCgkZm9ybWF0X3BhdGNoKSkgeworCQkJcmV0dXJuICRmb3JtYXRfcGF0Y2g7CisJCX0KKwkJZGllIHNwcmludGYoX18gPDxFT0YsICRmLCAkZik7CitGaWxlICclcycgZXhpc3RzIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIHRoZSByYW5nZSBvZiBjb21taXRzCit0byBwcm9kdWNlIHBhdGNoZXMgZm9yLiAgUGxlYXNlIGRpc2FtYmlndWF0ZSBieS4uLgorCisgICAgKiBTYXlpbmcgIi4vJXMiIGlmIHlvdSBtZWFuIGEgZmlsZTsgb3IKKyAgICAqIEdpdmluZyAtLWZvcm1hdC1wYXRjaCBvcHRpb24gaWYgeW91IG1lYW4gYSByYW5nZS4KK0VPRgorCX0gY2F0Y2ggR2l0OjpFcnJvcjo6Q29tbWFuZCB3aXRoIHsKKwkJIyBOb3QgYSB2YWxpZCByZXZpc2lvbi4gIFRyZWF0IGl0IGFzIGEgZmlsZW5hbWUuCisJCXJldHVybiAwOworCX0KK30KKworIyBOb3cgdGhhdCBhbGwgdGhlIGRlZmF1bHRzIGFyZSBzZXQsIHByb2Nlc3MgdGhlIHJlc3Qgb2YgdGhlIGNvbW1hbmQgbGluZQorIyBhcmd1bWVudHMgYW5kIGNvbGxlY3QgdXAgdGhlIGZpbGVzIHRoYXQgbmVlZCB0byBiZSBwcm9jZXNzZWQuCitteSBAcmV2X2xpc3Rfb3B0czsKK3doaWxlIChkZWZpbmVkKG15ICRmID0gc2hpZnQgQEFSR1YpKSB7CisJaWYgKCRmIGVxICItLSIpIHsKKwkJcHVzaCBAcmV2X2xpc3Rfb3B0cywgIi0tIiwgQEFSR1Y7CisJCUBBUkdWID0gKCk7CisJfSBlbHNpZiAoLWQgJGYgYW5kICFpc19mb3JtYXRfcGF0Y2hfYXJnKCRmKSkgeworCQlvcGVuZGlyIG15ICRkaCwgJGYKKwkJCW9yIGRpZSBzcHJpbnRmKF9fKCJGYWlsZWQgdG8gb3BlbmRpciAlczogJXMiKSwgJGYsICQhKTsKKworCQlwdXNoIEBmaWxlcywgZ3JlcCB7IC1mICRfIH0gbWFwIHsgY2F0ZmlsZSgkZiwgJF8pIH0KKwkJCQlzb3J0IHJlYWRkaXIgJGRoOworCQljbG9zZWRpciAkZGg7CisJfSBlbHNpZiAoKC1mICRmIG9yIC1wICRmKSBhbmQgIWlzX2Zvcm1hdF9wYXRjaF9hcmcoJGYpKSB7CisJCXB1c2ggQGZpbGVzLCAkZjsKKwl9IGVsc2UgeworCQlwdXNoIEByZXZfbGlzdF9vcHRzLCAkZjsKKwl9Cit9CisKK2lmIChAcmV2X2xpc3Rfb3B0cykgeworCWRpZSBfXygiQ2Fubm90IHJ1biBnaXQgZm9ybWF0LXBhdGNoIGZyb20gb3V0c2lkZSBhIHJlcG9zaXRvcnlcbiIpCisJCXVubGVzcyAkcmVwbzsKKwlwdXNoIEBmaWxlcywgJHJlcG8tPmNvbW1hbmQoJ2Zvcm1hdC1wYXRjaCcsICctbycsIHRlbXBkaXIoQ0xFQU5VUCA9PiAxKSwgQHJldl9saXN0X29wdHMpOworfQorCitAZmlsZXMgPSBoYW5kbGVfYmFja3VwX2ZpbGVzKEBmaWxlcyk7CisKK2lmICgkdmFsaWRhdGUpIHsKKwlmb3JlYWNoIG15ICRmIChAZmlsZXMpIHsKKwkJdW5sZXNzICgtcCAkZikgeworCQkJbXkgJGVycm9yID0gdmFsaWRhdGVfcGF0Y2goJGYsICR0YXJnZXRfeGZlcl9lbmNvZGluZyk7CisJCQkkZXJyb3IgYW5kIGRpZSBzcHJpbnRmKF9fKCJmYXRhbDogJXM6ICVzXG53YXJuaW5nOiBubyBwYXRjaGVzIHdlcmUgc2VudFxuIiksCisJCQkJCQkgICRmLCAkZXJyb3IpOworCQl9CisJfQorfQorCitpZiAoQGZpbGVzKSB7CisJdW5sZXNzICgkcXVpZXQpIHsKKwkJcHJpbnQgJF8sIlxuIiBmb3IgKEBmaWxlcyk7CisJfQorfSBlbHNlIHsKKwlwcmludCBTVERFUlIgX18oIlxuTm8gcGF0Y2ggZmlsZXMgc3BlY2lmaWVkIVxuXG4iKTsKKwl1c2FnZSgpOworfQorCitzdWIgZ2V0X3BhdGNoX3N1YmplY3QgeworCW15ICRmbiA9IHNoaWZ0OworCW9wZW4gKG15ICRmaCwgJzwnLCAkZm4pOworCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisJCW5leHQgdW5sZXNzICgkbGluZSA9fiAvXlN1YmplY3Q6ICguKikkLyk7CisJCWNsb3NlICRmaDsKKwkJcmV0dXJuICJHSVQ6ICQxXG4iOworCX0KKwljbG9zZSAkZmg7CisJZGllIHNwcmludGYoX18oIk5vIHN1YmplY3QgbGluZSBpbiAlcz8iKSwgJGZuKTsKK30KKworaWYgKCRjb21wb3NlKSB7CisJIyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBuZWVkIHRvIGJlIHNlY3VyZSwgYnV0IHdlIHdpbGwgbWFrZSBhIHNtYWxsCisJIyBlZmZvcnQgdG8gaGF2ZSBpdCBiZSB1bmlxdWUKKwkkY29tcG9zZV9maWxlbmFtZSA9ICgkcmVwbyA/CisJCXRlbXBmaWxlKCIuZ2l0c2VuZGVtYWlsLm1zZy5YWFhYWFgiLCBESVIgPT4gJHJlcG8tPnJlcG9fcGF0aCgpKSA6CisJCXRlbXBmaWxlKCIuZ2l0c2VuZGVtYWlsLm1zZy5YWFhYWFgiLCBESVIgPT4gIi4iKSlbMV07CisJb3BlbiBteSAkYywgIj4iLCAkY29tcG9zZV9maWxlbmFtZQorCQlvciBkaWUgc3ByaW50ZihfXygiRmFpbGVkIHRvIG9wZW4gZm9yIHdyaXRpbmcgJXM6ICVzIiksICRjb21wb3NlX2ZpbGVuYW1lLCAkISk7CisKKworCW15ICR0cGxfc2VuZGVyID0gJHNlbmRlciB8fCAkcmVwb2F1dGhvciB8fCAkcmVwb2NvbW1pdHRlciB8fCAnJzsKKwlteSAkdHBsX3N1YmplY3QgPSAkaW5pdGlhbF9zdWJqZWN0IHx8ICcnOworCW15ICR0cGxfaW5fcmVwbHlfdG8gPSAkaW5pdGlhbF9pbl9yZXBseV90byB8fCAnJzsKKwlteSAkdHBsX3JlcGx5X3RvID0gJHJlcGx5X3RvIHx8ICcnOworCisJcHJpbnQgJGMgPDxFT1QxLCBHaXQ6OnByZWZpeF9saW5lcygiR0lUOiAiLCBfXyA8PEVPVDIpLCA8PEVPVDM7CitGcm9tICR0cGxfc2VuZGVyICMgVGhpcyBsaW5lIGlzIGlnbm9yZWQuCitFT1QxCitMaW5lcyBiZWdpbm5pbmcgaW4gIkdJVDoiIHdpbGwgYmUgcmVtb3ZlZC4KK0NvbnNpZGVyIGluY2x1ZGluZyBhbiBvdmVyYWxsIGRpZmZzdGF0IG9yIHRhYmxlIG9mIGNvbnRlbnRzCitmb3IgdGhlIHBhdGNoIHlvdSBhcmUgd3JpdGluZy4KKworQ2xlYXIgdGhlIGJvZHkgY29udGVudCBpZiB5b3UgZG9uJ3Qgd2lzaCB0byBzZW5kIGEgc3VtbWFyeS4KK0VPVDIKK0Zyb206ICR0cGxfc2VuZGVyCitSZXBseS1UbzogJHRwbF9yZXBseV90bworU3ViamVjdDogJHRwbF9zdWJqZWN0CitJbi1SZXBseS1UbzogJHRwbF9pbl9yZXBseV90bworCitFT1QzCisJZm9yIG15ICRmIChAZmlsZXMpIHsKKwkJcHJpbnQgJGMgZ2V0X3BhdGNoX3N1YmplY3QoJGYpOworCX0KKwljbG9zZSAkYzsKKworCWlmICgkYW5ub3RhdGUpIHsKKwkJZG9fZWRpdCgkY29tcG9zZV9maWxlbmFtZSwgQGZpbGVzKTsKKwl9IGVsc2UgeworCQlkb19lZGl0KCRjb21wb3NlX2ZpbGVuYW1lKTsKKwl9CisKKwlvcGVuICRjLCAiPCIsICRjb21wb3NlX2ZpbGVuYW1lCisJCW9yIGRpZSBzcHJpbnRmKF9fKCJGYWlsZWQgdG8gb3BlbiAlczogJXMiKSwgJGNvbXBvc2VfZmlsZW5hbWUsICQhKTsKKworCWlmICghZGVmaW5lZCAkY29tcG9zZV9lbmNvZGluZykgeworCQkkY29tcG9zZV9lbmNvZGluZyA9ICJVVEYtOCI7CisJfQorCisJbXkgJXBhcnNlZF9lbWFpbDsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGM+KSB7CisJCW5leHQgaWYgJGxpbmUgPX4gbS9eR0lUOi87CisJCXBhcnNlX2hlYWRlcl9saW5lKCRsaW5lLCBcJXBhcnNlZF9lbWFpbCk7CisJCWlmICgkbGluZSA9fiAvXiQvKSB7CisJCQkkcGFyc2VkX2VtYWlseydib2R5J30gPSBmaWx0ZXJfYm9keSgkYyk7CisJCX0KKwl9CisJY2xvc2UgJGM7CisKKwlvcGVuIG15ICRjMiwgIj4iLCAkY29tcG9zZV9maWxlbmFtZSAuICIuZmluYWwiCisJb3IgZGllIHNwcmludGYoX18oIkZhaWxlZCB0byBvcGVuICVzLmZpbmFsOiAlcyIpLCAkY29tcG9zZV9maWxlbmFtZSwgJCEpOworCisKKwlpZiAoJHBhcnNlZF9lbWFpbHsnRnJvbSd9KSB7CisJCSRzZW5kZXIgPSBkZWxldGUoJHBhcnNlZF9lbWFpbHsnRnJvbSd9KTsKKwl9CisJaWYgKCRwYXJzZWRfZW1haWx7J0luLVJlcGx5LVRvJ30pIHsKKwkJJGluaXRpYWxfaW5fcmVwbHlfdG8gPSBkZWxldGUoJHBhcnNlZF9lbWFpbHsnSW4tUmVwbHktVG8nfSk7CisJfQorCWlmICgkcGFyc2VkX2VtYWlseydSZXBseS1Ubyd9KSB7CisJCSRyZXBseV90byA9IGRlbGV0ZSgkcGFyc2VkX2VtYWlseydSZXBseS1Ubyd9KTsKKwl9CisJaWYgKCRwYXJzZWRfZW1haWx7J1N1YmplY3QnfSkgeworCQkkaW5pdGlhbF9zdWJqZWN0ID0gZGVsZXRlKCRwYXJzZWRfZW1haWx7J1N1YmplY3QnfSk7CisJCXByaW50ICRjMiAiU3ViamVjdDogIiAuCisJCQlxdW90ZV9zdWJqZWN0KCRpbml0aWFsX3N1YmplY3QsICRjb21wb3NlX2VuY29kaW5nKSAuCisJCQkiXG4iOworCX0KKworCWlmICgkcGFyc2VkX2VtYWlseydNSU1FLVZlcnNpb24nfSkgeworCQlwcmludCAkYzIgIk1JTUUtVmVyc2lvbjogJHBhcnNlZF9lbWFpbHsnTUlNRS1WZXJzaW9uJ31cbiIsCisJCQkJIkNvbnRlbnQtVHlwZTogJHBhcnNlZF9lbWFpbHsnQ29udGVudC1UeXBlJ307XG4iLAorCQkJCSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAkcGFyc2VkX2VtYWlseydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ31cbiI7CisJCWRlbGV0ZSgkcGFyc2VkX2VtYWlseydNSU1FLVZlcnNpb24nfSk7CisJCWRlbGV0ZSgkcGFyc2VkX2VtYWlseydDb250ZW50LVR5cGUnfSk7CisJCWRlbGV0ZSgkcGFyc2VkX2VtYWlseydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ30pOworCX0gZWxzaWYgKGZpbGVfaGFzX25vbmFzY2lpKCRjb21wb3NlX2ZpbGVuYW1lKSkgeworCQlteSAkY29udGVudF90eXBlID0gKGRlbGV0ZSgkcGFyc2VkX2VtYWlseydDb250ZW50LVR5cGUnfSkgb3IKKwkJCSJ0ZXh0L3BsYWluOyBjaGFyc2V0PSRjb21wb3NlX2VuY29kaW5nIik7CisJCXByaW50ICRjMiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIsCisJCQkiQ29udGVudC1UeXBlOiAkY29udGVudF90eXBlXG4iLAorCQkJIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiI7CisJfQorCSMgUHJlc2VydmUgdW5rbm93biBoZWFkZXJzCisJZm9yZWFjaCBteSAka2V5IChrZXlzICVwYXJzZWRfZW1haWwpIHsKKwkJbmV4dCBpZiAka2V5IGVxICdib2R5JzsKKwkJcHJpbnQgJGMyICIka2V5OiAkcGFyc2VkX2VtYWlseyRrZXl9IjsKKwl9CisKKwlpZiAoJHBhcnNlZF9lbWFpbHsnYm9keSd9KSB7CisJCXByaW50ICRjMiAiXG4kcGFyc2VkX2VtYWlseydib2R5J31cbiI7CisJCWRlbGV0ZSgkcGFyc2VkX2VtYWlseydib2R5J30pOworCX0gZWxzZSB7CisJCXByaW50IF9fKCJTdW1tYXJ5IGVtYWlsIGlzIGVtcHR5LCBza2lwcGluZyBpdFxuIik7CisJCSRjb21wb3NlID0gLTE7CisJfQorCisJY2xvc2UgJGMyOworCit9IGVsc2lmICgkYW5ub3RhdGUpIHsKKwlkb19lZGl0KEBmaWxlcyk7Cit9CisKK3N1YiBhc2sgeworCW15ICgkcHJvbXB0LCAlYXJnKSA9IEBfOworCW15ICR2YWxpZF9yZSA9ICRhcmd7dmFsaWRfcmV9OworCW15ICRkZWZhdWx0ID0gJGFyZ3tkZWZhdWx0fTsKKwlteSAkY29uZmlybV9vbmx5ID0gJGFyZ3tjb25maXJtX29ubHl9OworCW15ICRyZXNwOworCW15ICRpID0gMDsKKwlyZXR1cm4gZGVmaW5lZCAkZGVmYXVsdCA/ICRkZWZhdWx0IDogdW5kZWYKKwkJdW5sZXNzIGRlZmluZWQgJHRlcm0tPklOIGFuZCBkZWZpbmVkIGZpbGVubygkdGVybS0+SU4pIGFuZAorCQkgICAgICAgZGVmaW5lZCAkdGVybS0+T1VUIGFuZCBkZWZpbmVkIGZpbGVubygkdGVybS0+T1VUKTsKKwl3aGlsZSAoJGkrKyA8IDEwKSB7CisJCSRyZXNwID0gJHRlcm0tPnJlYWRsaW5lKCRwcm9tcHQpOworCQlpZiAoIWRlZmluZWQgJHJlc3ApIHsgIyBFT0YKKwkJCXByaW50ICJcbiI7CisJCQlyZXR1cm4gZGVmaW5lZCAkZGVmYXVsdCA/ICRkZWZhdWx0IDogdW5kZWY7CisJCX0KKwkJaWYgKCRyZXNwIGVxICcnIGFuZCBkZWZpbmVkICRkZWZhdWx0KSB7CisJCQlyZXR1cm4gJGRlZmF1bHQ7CisJCX0KKwkJaWYgKCFkZWZpbmVkICR2YWxpZF9yZSBvciAkcmVzcCA9fiAvJHZhbGlkX3JlLykgeworCQkJcmV0dXJuICRyZXNwOworCQl9CisJCWlmICgkY29uZmlybV9vbmx5KSB7CisJCQlteSAkeWVzbm8gPSAkdGVybS0+cmVhZGxpbmUoCisJCQkJIyBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgW3kvTl0gYXMgaXMuCisJCQkJc3ByaW50ZihfXygiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVzZSA8JXM+IFt5L05dPyAiKSwgJHJlc3ApKTsKKwkJCWlmIChkZWZpbmVkICR5ZXNubyAmJiAkeWVzbm8gPX4gL3kvaSkgeworCQkJCXJldHVybiAkcmVzcDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N1YiBwYXJzZV9oZWFkZXJfbGluZSB7CisJbXkgJGxpbmVzID0gc2hpZnQ7CisJbXkgJHBhcnNlZF9saW5lID0gc2hpZnQ7CisJbXkgJGFkZHJfcGF0ID0gam9pbiAifCIsIHF3KFRvIENjIEJjYyk7CisKKwlmb3JlYWNoIChzcGxpdCgvXG4vLCAkbGluZXMpKSB7CisJCWlmICgvXigkYWRkcl9wYXQpOlxzKiguKykkL2kpIHsKKwkJICAgICAgICAkcGFyc2VkX2xpbmUtPnskMX0gPSBbIHBhcnNlX2FkZHJlc3NfbGluZSgkMikgXTsKKwkJfSBlbHNpZiAoL14oW146XSopOlxzKiguKylccyokL2kpIHsKKwkJICAgICAgICAkcGFyc2VkX2xpbmUtPnskMX0gPSAkMjsKKwkJfQorCX0KK30KKworc3ViIGZpbHRlcl9ib2R5IHsKKwlteSAkYyA9IHNoaWZ0OworCW15ICRib2R5ID0gIiI7CisJd2hpbGUgKG15ICRib2R5X2xpbmUgPSA8JGM+KSB7CisJCWlmICgkYm9keV9saW5lICF+IG0vXkdJVDovKSB7CisJCQkkYm9keSAuPSAkYm9keV9saW5lOworCQl9CisJfQorCXJldHVybiAkYm9keTsKK30KKworCitteSAlYnJva2VuX2VuY29kaW5nOworCitzdWIgZmlsZV9kZWNsYXJlc184Yml0X2N0ZSB7CisJbXkgJGZuID0gc2hpZnQ7CisJb3BlbiAobXkgJGZoLCAnPCcsICRmbik7CisJd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKwkJbGFzdCBpZiAoJGxpbmUgPX4gL14kLyk7CisJCXJldHVybiAxIGlmICgkbGluZSA9fiAvXkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IC4qOGJpdC4qJC8pOworCX0KKwljbG9zZSAkZmg7CisJcmV0dXJuIDA7Cit9CisKK2ZvcmVhY2ggbXkgJGYgKEBmaWxlcykgeworCW5leHQgdW5sZXNzIChib2R5X29yX3N1YmplY3RfaGFzX25vbmFzY2lpKCRmKQorCQkgICAgICYmICFmaWxlX2RlY2xhcmVzXzhiaXRfY3RlKCRmKSk7CisJJGJyb2tlbl9lbmNvZGluZ3skZn0gPSAxOworfQorCitpZiAoIWRlZmluZWQgJGF1dG9fOGJpdF9lbmNvZGluZyAmJiBzY2FsYXIgJWJyb2tlbl9lbmNvZGluZykgeworCXByaW50IF9fKCJUaGUgZm9sbG93aW5nIGZpbGVzIGFyZSA4Yml0LCBidXQgZG8gbm90IGRlY2xhcmUgIiAuCisJCSAiYSBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nLlxuIik7CisJZm9yZWFjaCBteSAkZiAoc29ydCBrZXlzICVicm9rZW5fZW5jb2RpbmcpIHsKKwkJcHJpbnQgIiAgICAkZlxuIjsKKwl9CisJJGF1dG9fOGJpdF9lbmNvZGluZyA9IGFzayhfXygiV2hpY2ggOGJpdCBlbmNvZGluZyBzaG91bGQgSSBkZWNsYXJlIFtVVEYtOF0/ICIpLAorCQkJCSAgdmFsaWRfcmUgPT4gcXIvLns0fS8sIGNvbmZpcm1fb25seSA9PiAxLAorCQkJCSAgZGVmYXVsdCA9PiAiVVRGLTgiKTsKK30KKworaWYgKCEkZm9yY2UpIHsKKwlmb3IgbXkgJGYgKEBmaWxlcykgeworCQlpZiAoZ2V0X3BhdGNoX3N1YmplY3QoJGYpID1+IC9cUSoqKiBTVUJKRUNUIEhFUkUgKioqXEUvKSB7CisJCQlkaWUgc3ByaW50ZihfXygiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuXHQlc1xuIgorCQkJCS4gImhhcyB0aGUgdGVtcGxhdGUgc3ViamVjdCAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiAiCisJCQkJLiAiUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgd2FudCB0byBzZW5kLlxuIiksICRmKTsKKwkJfQorCX0KK30KKworaWYgKGRlZmluZWQgJHNlbmRlcikgeworCSRzZW5kZXIgPX4gcy9eXHMrfFxzKyQvL2c7CisJKCRzZW5kZXIpID0gZXhwYW5kX2FsaWFzZXMoJHNlbmRlcik7Cit9IGVsc2UgeworCSRzZW5kZXIgPSAkcmVwb2F1dGhvciB8fCAkcmVwb2NvbW1pdHRlciB8fCAnJzsKK30KKworIyAkc2VuZGVyIGNvdWxkIGJlIGFuIGFscmVhZHkgc2FuaXRpemVkIGFkZHJlc3MKKyMgKGUuZy4gc2VuZGVtYWlsLmZyb20gY291bGQgYmUgbWFudWFsbHkgc2FuaXRpemVkIGJ5IHVzZXIpLgorIyBCdXQgaXQncyBhIG5vLW9wIHRvIHJ1biBzYW5pdGl6ZV9hZGRyZXNzIG9uIGFuIGFscmVhZHkgc2FuaXRpemVkIGFkZHJlc3MuCiskc2VuZGVyID0gc2FuaXRpemVfYWRkcmVzcygkc2VuZGVyKTsKKworbXkgJHRvX3dob20gPSBfXygiVG8gd2hvbSBzaG91bGQgdGhlIGVtYWlscyBiZSBzZW50IChpZiBhbnlvbmUpPyIpOworbXkgJHByb21wdGluZyA9IDA7CitpZiAoIUBpbml0aWFsX3RvICYmICFkZWZpbmVkICR0b19jbWQpIHsKKwlteSAkdG8gPSBhc2soIiR0b193aG9tICIsCisJCSAgICAgZGVmYXVsdCA9PiAiIiwKKwkJICAgICB2YWxpZF9yZSA9PiBxci9cQC4qXC4vLCBjb25maXJtX29ubHkgPT4gMSk7CisJcHVzaCBAaW5pdGlhbF90bywgcGFyc2VfYWRkcmVzc19saW5lKCR0bykgaWYgZGVmaW5lZCAkdG87ICMgc2FuaXRpemVkL3ZhbGlkYXRlZCBsYXRlcgorCSRwcm9tcHRpbmcrKzsKK30KKworc3ViIGV4cGFuZF9hbGlhc2VzIHsKKwlyZXR1cm4gbWFwIHsgZXhwYW5kX29uZV9hbGlhcygkXykgfSBAXzsKK30KKworbXkgJUVYUEFOREVEX0FMSUFTRVM7CitzdWIgZXhwYW5kX29uZV9hbGlhcyB7CisJbXkgJGFsaWFzID0gc2hpZnQ7CisJaWYgKCRFWFBBTkRFRF9BTElBU0VTeyRhbGlhc30pIHsKKwkJZGllIHNwcmludGYoX18oImZhdGFsOiBhbGlhcyAnJXMnIGV4cGFuZHMgdG8gaXRzZWxmXG4iKSwgJGFsaWFzKTsKKwl9CisJbG9jYWwgJEVYUEFOREVEX0FMSUFTRVN7JGFsaWFzfSA9IDE7CisJcmV0dXJuICRhbGlhc2VzeyRhbGlhc30gPyBleHBhbmRfYWxpYXNlcyhAeyRhbGlhc2VzeyRhbGlhc319KSA6ICRhbGlhczsKK30KKworQGluaXRpYWxfdG8gPSBwcm9jZXNzX2FkZHJlc3NfbGlzdChAaW5pdGlhbF90byk7CitAaW5pdGlhbF9jYyA9IHByb2Nlc3NfYWRkcmVzc19saXN0KEBpbml0aWFsX2NjKTsKK0Bpbml0aWFsX2JjYyA9IHByb2Nlc3NfYWRkcmVzc19saXN0KEBpbml0aWFsX2JjYyk7CisKK2lmICgkdGhyZWFkICYmICFkZWZpbmVkICRpbml0aWFsX2luX3JlcGx5X3RvICYmICRwcm9tcHRpbmcpIHsKKwkkaW5pdGlhbF9pbl9yZXBseV90byA9IGFzaygKKwkJX18oIk1lc3NhZ2UtSUQgdG8gYmUgdXNlZCBhcyBJbi1SZXBseS1UbyBmb3IgdGhlIGZpcnN0IGVtYWlsIChpZiBhbnkpPyAiKSwKKwkJZGVmYXVsdCA9PiAiIiwKKwkJdmFsaWRfcmUgPT4gcXIvXEAuKlwuLywgY29uZmlybV9vbmx5ID0+IDEpOworfQoraWYgKGRlZmluZWQgJGluaXRpYWxfaW5fcmVwbHlfdG8pIHsKKwkkaW5pdGlhbF9pbl9yZXBseV90byA9fiBzL15ccyo8Py8vOworCSRpbml0aWFsX2luX3JlcGx5X3RvID1+IHMvPj9ccyokLy87CisJJGluaXRpYWxfaW5fcmVwbHlfdG8gPSAiPCRpbml0aWFsX2luX3JlcGx5X3RvPiIgaWYgJGluaXRpYWxfaW5fcmVwbHlfdG8gbmUgJyc7Cit9CisKK2lmIChkZWZpbmVkICRyZXBseV90bykgeworCSRyZXBseV90byA9fiBzL15ccyt8XHMrJC8vZzsKKwkoJHJlcGx5X3RvKSA9IGV4cGFuZF9hbGlhc2VzKCRyZXBseV90byk7CisJJHJlcGx5X3RvID0gc2FuaXRpemVfYWRkcmVzcygkcmVwbHlfdG8pOworfQorCitpZiAoIWRlZmluZWQgJHNtdHBfc2VydmVyKSB7CisJbXkgQHNlbmRtYWlsX3BhdGhzID0gcXcoIC91c3Ivc2Jpbi9zZW5kbWFpbCAvdXNyL2xpYi9zZW5kbWFpbCApOworCXB1c2ggQHNlbmRtYWlsX3BhdGhzLCBtYXAgeyIkXy9zZW5kbWFpbCJ9IHNwbGl0IC86LywgJEVOVntQQVRIfTsKKwlmb3JlYWNoIChAc2VuZG1haWxfcGF0aHMpIHsKKwkJaWYgKC14ICRfKSB7CisJCQkkc210cF9zZXJ2ZXIgPSAkXzsKKwkJCWxhc3Q7CisJCX0KKwl9CisJJHNtdHBfc2VydmVyIHx8PSAnbG9jYWxob3N0JzsgIyBjb3VsZCBiZSAxMjcuMC4wLjEsIHRvby4uLiAqc2hydWcqCit9CisKK2lmICgkY29tcG9zZSAmJiAkY29tcG9zZSA+IDApIHsKKwlAZmlsZXMgPSAoJGNvbXBvc2VfZmlsZW5hbWUgLiAiLmZpbmFsIiwgQGZpbGVzKTsKK30KKworIyBWYXJpYWJsZXMgd2Ugc2V0IGFzIHBhcnQgb2YgdGhlIGxvb3Agb3ZlciBmaWxlcworb3VyICgkbWVzc2FnZV9pZCwgJW1haWwsICRzdWJqZWN0LCAkaW5fcmVwbHlfdG8sICRyZWZlcmVuY2VzLCAkbWVzc2FnZSwKKwkkbmVlZHNfY29uZmlybSwgJG1lc3NhZ2VfbnVtLCAkYXNrX2RlZmF1bHQpOworCitzdWIgZXh0cmFjdF92YWxpZF9hZGRyZXNzIHsKKwlteSAkYWRkcmVzcyA9IHNoaWZ0OworCW15ICRsb2NhbF9wYXJ0X3JlZ2V4cCA9IHFyL1tePD4iXHNAXSsvOworCW15ICRkb21haW5fcmVnZXhwID0gcXIvW14uPD4iXHNAXSsoPzpcLlteLjw+IlxzQF0rKSsvOworCisJIyBjaGVjayBmb3IgYSBsb2NhbCBhZGRyZXNzOgorCXJldHVybiAkYWRkcmVzcyBpZiAoJGFkZHJlc3MgPX4gL14oJGxvY2FsX3BhcnRfcmVnZXhwKSQvKTsKKworCSRhZGRyZXNzID1+IHMvXlxzKjwoLiopPlxzKiQvJDEvOworCWlmICgkaGF2ZV9lbWFpbF92YWxpZCkgeworCQlyZXR1cm4gc2NhbGFyIEVtYWlsOjpWYWxpZC0+YWRkcmVzcygkYWRkcmVzcyk7CisJfQorCisJIyBsZXNzIHJvYnVzdC9jb3JyZWN0IHRoYW4gdGhlIG1vbnN0ZXIgcmVnZXhwIGluIEVtYWlsOjpWYWxpZCwKKwkjIGJ1dCBzdGlsbCBkb2VzIGEgOTklIGpvYiwgYW5kIG9uZSBsZXNzIGRlcGVuZGVuY3kKKwlyZXR1cm4gJDEgaWYgJGFkZHJlc3MgPX4gLygkbG9jYWxfcGFydF9yZWdleHBcQCRkb21haW5fcmVnZXhwKS87CisJcmV0dXJuOworfQorCitzdWIgZXh0cmFjdF92YWxpZF9hZGRyZXNzX29yX2RpZSB7CisJbXkgJGFkZHJlc3MgPSBzaGlmdDsKKwkkYWRkcmVzcyA9IGV4dHJhY3RfdmFsaWRfYWRkcmVzcygkYWRkcmVzcyk7CisJZGllIHNwcmludGYoX18oImVycm9yOiB1bmFibGUgdG8gZXh0cmFjdCBhIHZhbGlkIGFkZHJlc3MgZnJvbTogJXNcbiIpLCAkYWRkcmVzcykKKwkJaWYgISRhZGRyZXNzOworCXJldHVybiAkYWRkcmVzczsKK30KKworc3ViIHZhbGlkYXRlX2FkZHJlc3MgeworCW15ICRhZGRyZXNzID0gc2hpZnQ7CisJd2hpbGUgKCFleHRyYWN0X3ZhbGlkX2FkZHJlc3MoJGFkZHJlc3MpKSB7CisJCXByaW50ZiBTVERFUlIgX18oImVycm9yOiB1bmFibGUgdG8gZXh0cmFjdCBhIHZhbGlkIGFkZHJlc3MgZnJvbTogJXNcbiIpLCAkYWRkcmVzczsKKwkJIyBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3FdIFtkXSBbZV0gaW4geW91cgorCQkjIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKwkJIyBhdCB0aGlzIHBvaW50LgorCQkkXyA9IGFzayhfXygiV2hhdCB0byBkbyB3aXRoIHRoaXMgYWRkcmVzcz8gKFtxXXVpdHxbZF1yb3B8W2VdZGl0KTogIiksCisJCQl2YWxpZF9yZSA9PiBxci9eKD86cXVpdHxxfGRyb3B8ZHxlZGl0fGUpL2ksCisJCQlkZWZhdWx0ID0+ICdxJyk7CisJCWlmICgvXmQvaSkgeworCQkJcmV0dXJuIHVuZGVmOworCQl9IGVsc2lmICgvXnEvaSkgeworCQkJY2xlYW51cF9jb21wb3NlX2ZpbGVzKCk7CisJCQlleGl0KDApOworCQl9CisJCSRhZGRyZXNzID0gYXNrKCIkdG9fd2hvbSAiLAorCQkJZGVmYXVsdCA9PiAiIiwKKwkJCXZhbGlkX3JlID0+IHFyL1xALipcLi8sIGNvbmZpcm1fb25seSA9PiAxKTsKKwl9CisJcmV0dXJuICRhZGRyZXNzOworfQorCitzdWIgdmFsaWRhdGVfYWRkcmVzc19saXN0IHsKKwlyZXR1cm4gKGdyZXAgeyBkZWZpbmVkICRfIH0KKwkJbWFwIHsgdmFsaWRhdGVfYWRkcmVzcygkXykgfSBAXyk7Cit9CisKKyMgVXN1YWxseSBkb24ndCBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyBiZWxvdyBoZXJlLgorCisjIHdlIG1ha2UgYSAiZmFrZSIgbWVzc2FnZSBpZCBieSB0YWtpbmcgdGhlIGN1cnJlbnQgbnVtYmVyCisjIG9mIHNlY29uZHMgc2luY2UgdGhlIGJlZ2lubmluZyBvZiBVbml4IHRpbWUgYW5kIHRhY2tpbmcgb24KKyMgYSByYW5kb20gbnVtYmVyIHRvIHRoZSBlbmQsIGluIGNhc2Ugd2UgYXJlIGNhbGxlZCBxdWlja2VyIHRoYW4KKyMgMSBzZWNvbmQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSB3ZXJlIGNhbGxlZC4KKworIyBXZSdsbCBzZXR1cCBhIHRlbXBsYXRlIGZvciB0aGUgbWVzc2FnZSBpZCwgdXNpbmcgdGhlICJmcm9tIiBhZGRyZXNzOgorCitteSAoJG1lc3NhZ2VfaWRfc3RhbXAsICRtZXNzYWdlX2lkX3NlcmlhbCk7CitzdWIgbWFrZV9tZXNzYWdlX2lkIHsKKwlteSAkdW5pcTsKKwlpZiAoIWRlZmluZWQgJG1lc3NhZ2VfaWRfc3RhbXApIHsKKwkJJG1lc3NhZ2VfaWRfc3RhbXAgPSBzdHJmdGltZSgiJVklbSVkJUglTSVTLiQkIiwgZ210aW1lKHRpbWUpKTsKKwkJJG1lc3NhZ2VfaWRfc2VyaWFsID0gMDsKKwl9CisJJG1lc3NhZ2VfaWRfc2VyaWFsKys7CisJJHVuaXEgPSAiJG1lc3NhZ2VfaWRfc3RhbXAtJG1lc3NhZ2VfaWRfc2VyaWFsIjsKKworCW15ICRkdV9wYXJ0OworCWZvciAoJHNlbmRlciwgJHJlcG9jb21taXR0ZXIsICRyZXBvYXV0aG9yKSB7CisJCSRkdV9wYXJ0ID0gZXh0cmFjdF92YWxpZF9hZGRyZXNzKHNhbml0aXplX2FkZHJlc3MoJF8pKTsKKwkJbGFzdCBpZiAoZGVmaW5lZCAkZHVfcGFydCBhbmQgJGR1X3BhcnQgbmUgJycpOworCX0KKwlpZiAobm90IGRlZmluZWQgJGR1X3BhcnQgb3IgJGR1X3BhcnQgZXEgJycpIHsKKwkJcmVxdWlyZSBTeXM6Okhvc3RuYW1lOworCQkkZHVfcGFydCA9ICd1c2VyQCcgLiBTeXM6Okhvc3RuYW1lOjpob3N0bmFtZSgpOworCX0KKwlteSAkbWVzc2FnZV9pZF90ZW1wbGF0ZSA9ICI8JXMtJXM+IjsKKwkkbWVzc2FnZV9pZCA9IHNwcmludGYoJG1lc3NhZ2VfaWRfdGVtcGxhdGUsICR1bmlxLCAkZHVfcGFydCk7CisJI3ByaW50ICJuZXcgbWVzc2FnZSBpZCA9ICRtZXNzYWdlX2lkXG4iOyAjIFdhcyB1c2VmdWwgZm9yIGRlYnVnZ2luZworfQorCisKKworJHRpbWUgPSB0aW1lIC0gc2NhbGFyICQjZmlsZXM7CisKK3N1YiB1bnF1b3RlX3JmYzIwNDcgeworCWxvY2FsICgkXykgPSBAXzsKKwlteSAkY2hhcnNldDsKKwlteSAkc2VwID0gcXIvWyBcdF0rLzsKKwlzeyRyZV9lbmNvZGVkX3dvcmQoPzokc2VwJHJlX2VuY29kZWRfd29yZCkqfXsKKwkJbXkgQHdvcmRzID0gc3BsaXQgJHNlcCwgJCY7CisJCWZvcmVhY2ggKEB3b3JkcykgeworCQkJbS8kcmVfZW5jb2RlZF93b3JkLzsKKwkJCSRjaGFyc2V0ID0gJDE7CisJCQlteSAkZW5jb2RpbmcgPSAkMjsKKwkJCW15ICR0ZXh0ID0gJDM7CisJCQlpZiAoJGVuY29kaW5nIGVxICdxJyB8fCAkZW5jb2RpbmcgZXEgJ1EnKSB7CisJCQkJJF8gPSAkdGV4dDsKKwkJCQlzL18vIC9nOworCQkJCXMvPShbMC05QS1GXXsyfSkvY2hyKGhleCgkMSkpL2VnaTsKKwkJCX0gZWxzZSB7CisJCQkJIyBvdGhlciBlbmNvZGluZ3Mgbm90IHN1cHBvcnRlZCB5ZXQKKwkJCX0KKwkJfQorCQlqb2luICcnLCBAd29yZHM7CisJfWVnOworCXJldHVybiB3YW50YXJyYXkgPyAoJF8sICRjaGFyc2V0KSA6ICRfOworfQorCitzdWIgcXVvdGVfcmZjMjA0NyB7CisJbG9jYWwgJF8gPSBzaGlmdDsKKwlteSAkZW5jb2RpbmcgPSBzaGlmdCB8fCAnVVRGLTgnOworCXMvKFteLWEtekEtWjAtOSEqK1wvXSkvc3ByaW50ZigiPSUwMlgiLCBvcmQoJDEpKS9lZzsKKwlzLyguKikvPVw/JGVuY29kaW5nXD9xXD8kMVw/PS87CisJcmV0dXJuICRfOworfQorCitzdWIgaXNfcmZjMjA0N19xdW90ZWQgeworCW15ICRzID0gc2hpZnQ7CisJbGVuZ3RoKCRzKSA8PSA3NSAmJgorCSRzID1+IG0vXig/OiJbWzphc2NpaTpdXSoifCRyZV9lbmNvZGVkX3dvcmQpJC9vOworfQorCitzdWIgc3ViamVjdF9uZWVkc19yZmMyMDQ3X3F1b3RpbmcgeworCW15ICRzID0gc2hpZnQ7CisKKwlyZXR1cm4gKCRzID1+IC9bXls6YXNjaWk6XV0vKSB8fCAoJHMgPX4gLz1cPy8pOworfQorCitzdWIgcXVvdGVfc3ViamVjdCB7CisJbG9jYWwgJHN1YmplY3QgPSBzaGlmdDsKKwlteSAkZW5jb2RpbmcgPSBzaGlmdCB8fCAnVVRGLTgnOworCisJaWYgKHN1YmplY3RfbmVlZHNfcmZjMjA0N19xdW90aW5nKCRzdWJqZWN0KSkgeworCQlyZXR1cm4gcXVvdGVfcmZjMjA0Nygkc3ViamVjdCwgJGVuY29kaW5nKTsKKwl9CisJcmV0dXJuICRzdWJqZWN0OworfQorCisjIHVzZSB0aGUgc2ltcGxlc3QgcXVvdGluZyBiZWluZyBhYmxlIHRvIGhhbmRsZSB0aGUgcmVjaXBpZW50CitzdWIgc2FuaXRpemVfYWRkcmVzcyB7CisJbXkgKCRyZWNpcGllbnQpID0gQF87CisKKwkjIHJlbW92ZSBnYXJiYWdlIGFmdGVyIGVtYWlsIGFkZHJlc3MKKwkkcmVjaXBpZW50ID1+IHMvKC4qPikuKiQvJDEvOworCisJbXkgKCRyZWNpcGllbnRfbmFtZSwgJHJlY2lwaWVudF9hZGRyKSA9ICgkcmVjaXBpZW50ID1+IC9eKC4qPylccyooPC4qKS8pOworCisJaWYgKG5vdCAkcmVjaXBpZW50X25hbWUpIHsKKwkJcmV0dXJuICRyZWNpcGllbnQ7CisJfQorCisJIyBpZiByZWNpcGllbnRfbmFtZSBpcyBhbHJlYWR5IHF1b3RlZCwgZG8gbm90aGluZworCWlmIChpc19yZmMyMDQ3X3F1b3RlZCgkcmVjaXBpZW50X25hbWUpKSB7CisJCXJldHVybiAkcmVjaXBpZW50OworCX0KKworCSMgcmVtb3ZlIG5vbi1lc2NhcGVkIHF1b3RlcworCSRyZWNpcGllbnRfbmFtZSA9fiBzLyhefFteXFxdKSIvJDEvZzsKKworCSMgcmZjMjA0NyBpcyBuZWVkZWQgaWYgYSBub24tYXNjaWkgY2hhciBpcyBpbmNsdWRlZAorCWlmICgkcmVjaXBpZW50X25hbWUgPX4gL1teWzphc2NpaTpdXS8pIHsKKwkJJHJlY2lwaWVudF9uYW1lID0gcXVvdGVfcmZjMjA0NygkcmVjaXBpZW50X25hbWUpOworCX0KKworCSMgZG91YmxlIHF1b3RlcyBhcmUgbmVlZGVkIGlmIHNwZWNpYWxzIG9yIENUTHMgYXJlIGluY2x1ZGVkCisJZWxzaWYgKCRyZWNpcGllbnRfbmFtZSA9fiAvW11bKCk8PkAsOzpcXCIuXDAwMC1cMDM3XDE3N10vKSB7CisJCSRyZWNpcGllbnRfbmFtZSA9fiBzLyhbXFxccl0pL1xcJDEvZzsKKwkJJHJlY2lwaWVudF9uYW1lID0gcXFbIiRyZWNpcGllbnRfbmFtZSJdOworCX0KKworCXJldHVybiAiJHJlY2lwaWVudF9uYW1lICRyZWNpcGllbnRfYWRkciI7CisKK30KKworc3ViIHN0cmlwX2dhcmJhZ2Vfb25lX2FkZHJlc3MgeworCW15ICgkYWRkcikgPSBAXzsKKwljaG9tcCAkYWRkcjsKKwlpZiAoJGFkZHIgPX4gL14oKCJbXiJdKiJ8W14iPF0qKT8gKjxbXj5dKj4pLiovKSB7CisJCSMgIkZvbyBCYXIiIDxmb29iYXJAZXhhbXBsZS5jb20+IFtwb3NzaWJseSBnYXJiYWdlIGhlcmVdCisJCSMgRm9vIEJhciA8Zm9vYmFyQGV4YW1wbGUuY29tPiBbcG9zc2libHkgZ2FyYmFnZSBoZXJlXQorCQlyZXR1cm4gJDE7CisJfQorCWlmICgkYWRkciA9fiAvXig8W14+XSo+KS4qLykgeworCQkjIDxmb29AZXhhbXBsZS5jb20+IFtwb3NzaWJseSBnYXJiYWdlIGhlcmVdCisJCSMgaWYgZ2FyYmFnZSBjb250YWlucyBvdGhlciBhZGRyZXNzZXMsIHRoZXkgYXJlIGlnbm9yZWQuCisJCXJldHVybiAkMTsKKwl9CisJaWYgKCRhZGRyID1+IC9eKFteIiMsXHNdKikvKSB7CisJCSMgYWRkcmVzcyB3aXRob3V0IHF1b3Rpbmc6IHJlbW92ZSBhbnl0aGluZyBhZnRlciB0aGUgYWRkcmVzcworCQlyZXR1cm4gJDE7CisJfQorCXJldHVybiAkYWRkcjsKK30KKworc3ViIHNhbml0aXplX2FkZHJlc3NfbGlzdCB7CisJcmV0dXJuIChtYXAgeyBzYW5pdGl6ZV9hZGRyZXNzKCRfKSB9IEBfKTsKK30KKworc3ViIHByb2Nlc3NfYWRkcmVzc19saXN0IHsKKwlteSBAYWRkcl9saXN0ID0gbWFwIHsgcGFyc2VfYWRkcmVzc19saW5lKCRfKSB9IEBfOworCUBhZGRyX2xpc3QgPSBleHBhbmRfYWxpYXNlcyhAYWRkcl9saXN0KTsKKwlAYWRkcl9saXN0ID0gc2FuaXRpemVfYWRkcmVzc19saXN0KEBhZGRyX2xpc3QpOworCUBhZGRyX2xpc3QgPSB2YWxpZGF0ZV9hZGRyZXNzX2xpc3QoQGFkZHJfbGlzdCk7CisJcmV0dXJuIEBhZGRyX2xpc3Q7Cit9CisKKyMgUmV0dXJucyB0aGUgbG9jYWwgRnVsbHkgUXVhbGlmaWVkIERvbWFpbiBOYW1lIChGUUROKSBpZiBhdmFpbGFibGUuCisjCisjIFRpZ2h0bHkgY29uZmlndXJlZCBNVEFhIHJlcXVpcmUgdGhhdCBhIGNhbGxlciBzZW5kcyBhIHJlYWwgRE5TCisjIGRvbWFpbiBuYW1lIHRoYXQgY29ycmVzcG9uZHMgdGhlIElQIGFkZHJlc3MgaW4gdGhlIEhFTE8vRUhMTworIyBoYW5kc2hha2UuIFRoaXMgaXMgdXNlZCB0byB2ZXJpZnkgdGhlIGNvbm5lY3Rpb24gYW5kIHByZXZlbnQKKyMgc3BhbW1lcnMgZnJvbSB0cnlpbmcgdG8gaGlkZSB0aGVpciBpZGVudGl0eS4gSWYgdGhlIEROUyBhbmQgSVAgZG9uJ3QKKyMgbWF0Y2gsIHRoZSByZWNlaXZpbmcgTVRBIG1heSBkZW55IHRoZSBjb25uZWN0aW9uLgorIworIyBIZXJlIGlzIGEgZGVueSBleGFtcGxlIG9mIE5ldDo6U01UUCB3aXRoIHRoZSBkZWZhdWx0ICJsb2NhbGhvc3QubG9jYWxkb21haW4iCisjCisjIE5ldDo6U01UUD1HTE9CKDB4MjY3ZWMyOCk+Pj4gRUhMTyBsb2NhbGhvc3QubG9jYWxkb21haW4KKyMgTmV0OjpTTVRQPUdMT0IoMHgyNjdlYzI4KTw8PCA1NTAgRUhMTyBhcmd1bWVudCBkb2VzIG5vdCBtYXRjaCBjYWxsaW5nIGhvc3QKKyMKKyMgVGhpcyBtYWlsZG9tYWluKigpIGNvZGUgaXMgYmFzZWQgb24gaWRlYXMgaW4gUGVybCBsaWJyYXJ5IFRlc3Q6OlJlcG9ydGVyCisjIC91c3Ivc2hhcmUvcGVybDUvVGVzdC9SZXBvcnRlci9NYWlsL1V0aWwucG0gPT0+IHN1YiBfbWFpbGRvbWFpbiAoKQorCitzdWIgdmFsaWRfZnFkbiB7CisJbXkgJGRvbWFpbiA9IHNoaWZ0OworCXJldHVybiBkZWZpbmVkICRkb21haW4gJiYgISgkXk8gZXEgJ2RhcndpbicgJiYgJGRvbWFpbiA9fiAvXC5sb2NhbCQvKSAmJiAkZG9tYWluID1+IC9cLi87Cit9CisKK3N1YiBtYWlsZG9tYWluX25ldCB7CisJbXkgJG1haWxkb21haW47CisKKwlteSAkZG9tYWluID0gTmV0OjpEb21haW46OmRvbWFpbm5hbWUoKTsKKwkkbWFpbGRvbWFpbiA9ICRkb21haW4gaWYgdmFsaWRfZnFkbigkZG9tYWluKTsKKworCXJldHVybiAkbWFpbGRvbWFpbjsKK30KKworc3ViIG1haWxkb21haW5fbXRhIHsKKwlteSAkbWFpbGRvbWFpbjsKKworCWZvciBteSAkaG9zdCAocXcobWFpbGhvc3QgbG9jYWxob3N0KSkgeworCQlteSAkc210cCA9IE5ldDo6U01UUC0+bmV3KCRob3N0KTsKKwkJaWYgKGRlZmluZWQgJHNtdHApIHsKKwkJCW15ICRkb21haW4gPSAkc210cC0+ZG9tYWluOworCQkJJHNtdHAtPnF1aXQ7CisKKwkJCSRtYWlsZG9tYWluID0gJGRvbWFpbiBpZiB2YWxpZF9mcWRuKCRkb21haW4pOworCisJCQlsYXN0IGlmICRtYWlsZG9tYWluOworCQl9CisJfQorCisJcmV0dXJuICRtYWlsZG9tYWluOworfQorCitzdWIgbWFpbGRvbWFpbiB7CisJcmV0dXJuIG1haWxkb21haW5fbmV0KCkgfHwgbWFpbGRvbWFpbl9tdGEoKSB8fCAnbG9jYWxob3N0LmxvY2FsZG9tYWluJzsKK30KKworc3ViIHNtdHBfaG9zdF9zdHJpbmcgeworCWlmIChkZWZpbmVkICRzbXRwX3NlcnZlcl9wb3J0KSB7CisJCXJldHVybiAiJHNtdHBfc2VydmVyOiRzbXRwX3NlcnZlcl9wb3J0IjsKKwl9IGVsc2UgeworCQlyZXR1cm4gJHNtdHBfc2VydmVyOworCX0KK30KKworIyBSZXR1cm5zIDEgaWYgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkIG9yIHdhcyBub3QgbmVjZXNzYXJ5CisjIChzbXRwX3VzZXIgd2FzIG5vdCBzcGVjaWZpZWQpLCBhbmQgMCBvdGhlcndpc2UuCisKK3N1YiBzbXRwX2F1dGhfbWF5YmUgeworCWlmICghZGVmaW5lZCAkc210cF9hdXRodXNlciB8fCAkYXV0aCB8fCAoZGVmaW5lZCAkc210cF9hdXRoICYmICRzbXRwX2F1dGggZXEgIm5vbmUiKSkgeworCQlyZXR1cm4gMTsKKwl9CisKKwkjIFdvcmthcm91bmQgQVVUSCBQTEFJTi9MT0dJTiBpbnRlcmFjdGlvbiBkZWZlY3QKKwkjIHdpdGggQXV0aGVuOjpTQVNMOjpDeXJ1cworCWV2YWwgeworCQlyZXF1aXJlIEF1dGhlbjo6U0FTTDsKKwkJQXV0aGVuOjpTQVNMLT5pbXBvcnQocXcoUGVybCkpOworCX07CisKKwkjIENoZWNrIG1lY2hhbmlzbSBuYW1pbmcgYXMgZGVmaW5lZCBpbjoKKwkjIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NDIyI3BhZ2UtOAorCWlmICgkc210cF9hdXRoICYmICRzbXRwX2F1dGggIX4gL14oXGJbQS1aMC05LV9dezEsMjB9XHMqKSokLykgeworCQlkaWUgImludmFsaWQgc210cCBhdXRoOiAnJHtzbXRwX2F1dGh9JyI7CisJfQorCisJIyBUT0RPOiBBdXRoZW50aWNhdGlvbiBtYXkgZmFpbCBub3QgYmVjYXVzZSBjcmVkZW50aWFscyB3ZXJlCisJIyBpbnZhbGlkIGJ1dCBkdWUgdG8gb3RoZXIgcmVhc29ucywgaW4gd2hpY2ggd2Ugc2hvdWxkIG5vdAorCSMgcmVqZWN0IGNyZWRlbnRpYWxzLgorCSRhdXRoID0gR2l0OjpjcmVkZW50aWFsKHsKKwkJJ3Byb3RvY29sJyA9PiAnc210cCcsCisJCSdob3N0JyA9PiBzbXRwX2hvc3Rfc3RyaW5nKCksCisJCSd1c2VybmFtZScgPT4gJHNtdHBfYXV0aHVzZXIsCisJCSMgaWYgdGhlcmUncyBubyBwYXNzd29yZCwgImdpdCBjcmVkZW50aWFsIGZpbGwiIHdpbGwKKwkJIyBnaXZlIHVzIG9uZSwgb3RoZXJ3aXNlIGl0J2xsIGp1c3QgcGFzcyB0aGlzIG9uZS4KKwkJJ3Bhc3N3b3JkJyA9PiAkc210cF9hdXRocGFzcworCX0sIHN1YiB7CisJCW15ICRjcmVkID0gc2hpZnQ7CisKKwkJaWYgKCRzbXRwX2F1dGgpIHsKKwkJCW15ICRzYXNsID0gQXV0aGVuOjpTQVNMLT5uZXcoCisJCQkJbWVjaGFuaXNtID0+ICRzbXRwX2F1dGgsCisJCQkJY2FsbGJhY2sgPT4geworCQkJCQl1c2VyID0+ICRjcmVkLT57J3VzZXJuYW1lJ30sCisJCQkJCXBhc3MgPT4gJGNyZWQtPnsncGFzc3dvcmQnfSwKKwkJCQkJYXV0aG5hbWUgPT4gJGNyZWQtPnsndXNlcm5hbWUnfSwKKwkJCQl9CisJCQkpOworCisJCQlyZXR1cm4gISEkc210cC0+YXV0aCgkc2FzbCk7CisJCX0KKworCQlyZXR1cm4gISEkc210cC0+YXV0aCgkY3JlZC0+eyd1c2VybmFtZSd9LCAkY3JlZC0+eydwYXNzd29yZCd9KTsKKwl9KTsKKworCXJldHVybiAkYXV0aDsKK30KKworc3ViIHNzbF92ZXJpZnlfcGFyYW1zIHsKKwlldmFsIHsKKwkJcmVxdWlyZSBJTzo6U29ja2V0OjpTU0w7CisJCUlPOjpTb2NrZXQ6OlNTTC0+aW1wb3J0KHF3L1NTTF9WRVJJRllfUEVFUiBTU0xfVkVSSUZZX05PTkUvKTsKKwl9OworCWlmICgkQCkgeworCQlwcmludCBTVERFUlIgIk5vdCB1c2luZyBTU0xfVkVSSUZZX1BFRVIgZHVlIHRvIG91dC1vZi1kYXRlIElPOjpTb2NrZXQ6OlNTTC5cbiI7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWRlZmluZWQgJHNtdHBfc3NsX2NlcnRfcGF0aCkgeworCQkjIHVzZSB0aGUgT3BlblNTTCBkZWZhdWx0cworCQlyZXR1cm4gKFNTTF92ZXJpZnlfbW9kZSA9PiBTU0xfVkVSSUZZX1BFRVIoKSk7CisJfQorCisJaWYgKCRzbXRwX3NzbF9jZXJ0X3BhdGggZXEgIiIpIHsKKwkJcmV0dXJuIChTU0xfdmVyaWZ5X21vZGUgPT4gU1NMX1ZFUklGWV9OT05FKCkpOworCX0gZWxzaWYgKC1kICRzbXRwX3NzbF9jZXJ0X3BhdGgpIHsKKwkJcmV0dXJuIChTU0xfdmVyaWZ5X21vZGUgPT4gU1NMX1ZFUklGWV9QRUVSKCksCisJCQlTU0xfY2FfcGF0aCA9PiAkc210cF9zc2xfY2VydF9wYXRoKTsKKwl9IGVsc2lmICgtZiAkc210cF9zc2xfY2VydF9wYXRoKSB7CisJCXJldHVybiAoU1NMX3ZlcmlmeV9tb2RlID0+IFNTTF9WRVJJRllfUEVFUigpLAorCQkJU1NMX2NhX2ZpbGUgPT4gJHNtdHBfc3NsX2NlcnRfcGF0aCk7CisJfSBlbHNlIHsKKwkJZGllIHNwcmludGYoX18oIkNBIHBhdGggXCIlc1wiIGRvZXMgbm90IGV4aXN0IiksICRzbXRwX3NzbF9jZXJ0X3BhdGgpOworCX0KK30KKworc3ViIGZpbGVfbmFtZV9pc19hYnNvbHV0ZSB7CisJbXkgKCRwYXRoKSA9IEBfOworCisJIyBtc3lzIGRvZXMgbm90IGdyb2sgRE9TIGRyaXZlLXByZWZpeGVzCisJaWYgKCReTyBlcSAnbXN5cycpIHsKKwkJcmV0dXJuICgkcGF0aCA9fiBtI14vIyB8fCAkcGF0aCA9fiBtI15bYS16QS1aXVw6IykKKwl9CisKKwlyZXF1aXJlIEZpbGU6OlNwZWM6OkZ1bmN0aW9uczsKKwlyZXR1cm4gRmlsZTo6U3BlYzo6RnVuY3Rpb25zOjpmaWxlX25hbWVfaXNfYWJzb2x1dGUoJHBhdGgpOworfQorCisjIFByZXBhcmVzIHRoZSBlbWFpbCwgdGhlbiBhc2tzIHRoZSB1c2VyIHdoYXQgdG8gZG8uCisjCisjIElmIHRoZSB1c2VyIGNob29zZXMgdG8gc2VuZCB0aGUgZW1haWwsIGl0J3Mgc2VudCBhbmQgMSBpcyByZXR1cm5lZC4KKyMgSWYgdGhlIHVzZXIgY2hvb3NlcyBub3QgdG8gc2VuZCB0aGUgZW1haWwsIDAgaXMgcmV0dXJuZWQuCisjIElmIHRoZSB1c2VyIGRlY2lkZXMgdGhleSB3YW50IHRvIG1ha2UgZnVydGhlciBlZGl0cywgLTEgaXMgcmV0dXJuZWQgYW5kIHRoZQorIyBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gY2FsbCBzZW5kX21lc3NhZ2UgYWdhaW4gYWZ0ZXIgdGhlIGVkaXRzIGFyZSBwZXJmb3JtZWQuCisjCisjIElmIGFuIGVycm9yIG9jY3VycyBzZW5kaW5nIHRoZSBlbWFpbCwgdGhpcyBqdXN0IGRpZXMuCisKK3N1YiBzZW5kX21lc3NhZ2UgeworCW15IEByZWNpcGllbnRzID0gdW5pcXVlX2VtYWlsX2xpc3QoQHRvKTsKKwlAY2MgPSAoZ3JlcCB7IG15ICRjYyA9IGV4dHJhY3RfdmFsaWRfYWRkcmVzc19vcl9kaWUoJF8pOworCQkgICAgICBub3QgZ3JlcCB7ICRjYyBlcSAkXyB8fCAkXyA9fiAvPFxRJHtjY31cRT4kLyB9IEByZWNpcGllbnRzCisJCSAgICB9CisJICAgICAgIEBjYyk7CisJbXkgJHRvID0gam9pbiAoIixcblx0IiwgQHJlY2lwaWVudHMpOworCUByZWNpcGllbnRzID0gdW5pcXVlX2VtYWlsX2xpc3QoQHJlY2lwaWVudHMsQGNjLEBpbml0aWFsX2JjYyk7CisJQHJlY2lwaWVudHMgPSAobWFwIHsgZXh0cmFjdF92YWxpZF9hZGRyZXNzX29yX2RpZSgkXykgfSBAcmVjaXBpZW50cyk7CisJbXkgJGRhdGUgPSBmb3JtYXRfMjgyMl90aW1lKCR0aW1lKyspOworCW15ICRnaXR2ZXJzaW9uID0gJ0BAR0lUX1ZFUlNJT05AQCc7CisJaWYgKCRnaXR2ZXJzaW9uID1+IG0vLi5HSVRfVkVSU0lPTi4uLykgeworCSAgICAkZ2l0dmVyc2lvbiA9IEdpdDo6dmVyc2lvbigpOworCX0KKworCW15ICRjYyA9IGpvaW4oIixcblx0IiwgdW5pcXVlX2VtYWlsX2xpc3QoQGNjKSk7CisJbXkgJGNjbGluZSA9ICIiOworCWlmICgkY2MgbmUgJycpIHsKKwkJJGNjbGluZSA9ICJcbkNjOiAkY2MiOworCX0KKwltYWtlX21lc3NhZ2VfaWQoKSB1bmxlc3MgZGVmaW5lZCgkbWVzc2FnZV9pZCk7CisKKwlteSAkaGVhZGVyID0gIkZyb206ICRzZW5kZXIKK1RvOiAkdG8ke2NjbGluZX0KK1N1YmplY3Q6ICRzdWJqZWN0CitEYXRlOiAkZGF0ZQorTWVzc2FnZS1JZDogJG1lc3NhZ2VfaWQKKyI7CisJaWYgKCR1c2VfeG1haWxlcikgeworCQkkaGVhZGVyIC49ICJYLU1haWxlcjogZ2l0LXNlbmQtZW1haWwgJGdpdHZlcnNpb25cbiI7CisJfQorCWlmICgkaW5fcmVwbHlfdG8pIHsKKworCQkkaGVhZGVyIC49ICJJbi1SZXBseS1UbzogJGluX3JlcGx5X3RvXG4iOworCQkkaGVhZGVyIC49ICJSZWZlcmVuY2VzOiAkcmVmZXJlbmNlc1xuIjsKKwl9CisJaWYgKCRyZXBseV90bykgeworCQkkaGVhZGVyIC49ICJSZXBseS1UbzogJHJlcGx5X3RvXG4iOworCX0KKwlpZiAoQHhoKSB7CisJCSRoZWFkZXIgLj0gam9pbigiXG4iLCBAeGgpIC4gIlxuIjsKKwl9CisKKwlteSBAc2VuZG1haWxfcGFyYW1ldGVycyA9ICgnLWknLCBAcmVjaXBpZW50cyk7CisJbXkgJHJhd19mcm9tID0gJHNlbmRlcjsKKwlpZiAoZGVmaW5lZCAkZW52ZWxvcGVfc2VuZGVyICYmICRlbnZlbG9wZV9zZW5kZXIgbmUgImF1dG8iKSB7CisJCSRyYXdfZnJvbSA9ICRlbnZlbG9wZV9zZW5kZXI7CisJfQorCSRyYXdfZnJvbSA9IGV4dHJhY3RfdmFsaWRfYWRkcmVzcygkcmF3X2Zyb20pOworCXVuc2hpZnQgKEBzZW5kbWFpbF9wYXJhbWV0ZXJzLAorCQkJJy1mJywgJHJhd19mcm9tKSBpZihkZWZpbmVkICRlbnZlbG9wZV9zZW5kZXIpOworCisJaWYgKCRuZWVkc19jb25maXJtICYmICEkZHJ5X3J1bikgeworCQlwcmludCAiXG4kaGVhZGVyXG4iOworCQlpZiAoJG5lZWRzX2NvbmZpcm0gZXEgImluZm9ybSIpIHsKKwkJCSRjb25maXJtX3VuY29uZmlndXJlZCA9IDA7ICMgc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgZm9yIHRoZSByZXN0IG9mIHRoaXMgcnVuCisJCQkkYXNrX2RlZmF1bHQgPSAieSI7ICMgYXNzdW1lIHllcyBvbiBFT0Ygc2luY2UgdXNlciBoYXNuJ3QgZXhwbGljaXRseSBhc2tlZCBmb3IgY29uZmlybWF0aW9uCisJCQlwcmludCBfXyA8PEVPRiA7CisgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbAorICAgIGFkZHJlc3NlcyBmb3VuZCBpbiB0aGUgcGF0Y2ggY29tbWl0IG1lc3NhZ2UuIEJ5IGRlZmF1bHQKKyAgICBzZW5kLWVtYWlsIHByb21wdHMgYmVmb3JlIHNlbmRpbmcgd2hlbmV2ZXIgdGhpcyBvY2N1cnMuCisgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybQorICAgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4KKworICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuCisgICAgVG8gcmV0YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yLCBidXQgc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsCisgICAgcnVuICdnaXQgY29uZmlnIC0tZ2xvYmFsIHNlbmRlbWFpbC5jb25maXJtIGF1dG8nLgorCitFT0YKKwkJfQorCQkjIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0gW25dIFtlXSBbcV0gW2FdIGluIHlvdXIKKwkJIyB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisJCSMgYXQgdGhpcyBwb2ludC4KKwkJJF8gPSBhc2soX18oIlNlbmQgdGhpcyBlbWFpbD8gKFt5XWVzfFtuXW98W2VdZGl0fFtxXXVpdHxbYV1sbCk6ICIpLAorCQkgICAgICAgICB2YWxpZF9yZSA9PiBxci9eKD86eWVzfHl8bm98bnxlZGl0fGV8cXVpdHxxfGFsbHxhKS9pLAorCQkgICAgICAgICBkZWZhdWx0ID0+ICRhc2tfZGVmYXVsdCk7CisJCWRpZSBfXygiU2VuZCB0aGlzIGVtYWlsIHJlcGx5IHJlcXVpcmVkIikgdW5sZXNzIGRlZmluZWQgJF87CisJCWlmICgvXm4vaSkgeworCQkJcmV0dXJuIDA7CisJCX0gZWxzaWYgKC9eZS9pKSB7CisJCQlyZXR1cm4gLTE7CisJCX0gZWxzaWYgKC9ecS9pKSB7CisJCQljbGVhbnVwX2NvbXBvc2VfZmlsZXMoKTsKKwkJCWV4aXQoMCk7CisJCX0gZWxzaWYgKC9eYS9pKSB7CisJCQkkY29uZmlybSA9ICduZXZlcic7CisJCX0KKwl9CisKKwl1bnNoaWZ0IChAc2VuZG1haWxfcGFyYW1ldGVycywgQHNtdHBfc2VydmVyX29wdGlvbnMpOworCisJaWYgKCRkcnlfcnVuKSB7CisJCSMgV2UgZG9uJ3Qgd2FudCB0byBzZW5kIHRoZSBlbWFpbC4KKwl9IGVsc2lmIChmaWxlX25hbWVfaXNfYWJzb2x1dGUoJHNtdHBfc2VydmVyKSkgeworCQlteSAkcGlkID0gb3BlbiBteSAkc20sICd8LSc7CisJCWRlZmluZWQgJHBpZCBvciBkaWUgJCE7CisJCWlmICghJHBpZCkgeworCQkJZXhlYygkc210cF9zZXJ2ZXIsIEBzZW5kbWFpbF9wYXJhbWV0ZXJzKSBvciBkaWUgJCE7CisJCX0KKwkJcHJpbnQgJHNtICIkaGVhZGVyXG4kbWVzc2FnZSI7CisJCWNsb3NlICRzbSBvciBkaWUgJCE7CisJfSBlbHNlIHsKKworCQlpZiAoIWRlZmluZWQgJHNtdHBfc2VydmVyKSB7CisJCQlkaWUgX18oIlRoZSByZXF1aXJlZCBTTVRQIHNlcnZlciBpcyBub3QgcHJvcGVybHkgZGVmaW5lZC4iKQorCQl9CisKKwkJcmVxdWlyZSBOZXQ6OlNNVFA7CisJCW15ICR1c2VfbmV0X3NtdHBfc3NsID0gdmVyc2lvbi0+cGFyc2UoJE5ldDo6U01UUDo6VkVSU0lPTikgPCB2ZXJzaW9uLT5wYXJzZSgiMi4zNCIpOworCQkkc210cF9kb21haW4gfHw9IG1haWxkb21haW4oKTsKKworCQlpZiAoJHNtdHBfZW5jcnlwdGlvbiBlcSAnc3NsJykgeworCQkJJHNtdHBfc2VydmVyX3BvcnQgfHw9IDQ2NTsgIyBzc210cAorCQkJcmVxdWlyZSBJTzo6U29ja2V0OjpTU0w7CisKKwkJCSMgU3VwcHJlc3MgInZhcmlhYmxlIGFjY2Vzc2VkIG9uY2UiIHdhcm5pbmcuCisJCQl7CisJCQkJbm8gd2FybmluZ3MgJ29uY2UnOworCQkJCSRJTzo6U29ja2V0OjpTU0w6OkRFQlVHID0gMTsKKwkJCX0KKworCQkJIyBOZXQ6OlNNVFA6OlNTTC0+bmV3KCkgZG9lcyBub3QgZm9yd2FyZCBhbnkgU1NMIG9wdGlvbnMKKwkJCUlPOjpTb2NrZXQ6OlNTTDo6c2V0X2NsaWVudF9kZWZhdWx0cygKKwkJCQlzc2xfdmVyaWZ5X3BhcmFtcygpKTsKKworCQkJaWYgKCR1c2VfbmV0X3NtdHBfc3NsKSB7CisJCQkJcmVxdWlyZSBOZXQ6OlNNVFA6OlNTTDsKKwkJCQkkc210cCB8fD0gTmV0OjpTTVRQOjpTU0wtPm5ldygkc210cF9zZXJ2ZXIsCisJCQkJCQkJICAgICAgSGVsbG8gPT4gJHNtdHBfZG9tYWluLAorCQkJCQkJCSAgICAgIFBvcnQgPT4gJHNtdHBfc2VydmVyX3BvcnQsCisJCQkJCQkJICAgICAgRGVidWcgPT4gJGRlYnVnX25ldF9zbXRwKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCSRzbXRwIHx8PSBOZXQ6OlNNVFAtPm5ldygkc210cF9zZXJ2ZXIsCisJCQkJCQkJIEhlbGxvID0+ICRzbXRwX2RvbWFpbiwKKwkJCQkJCQkgUG9ydCA9PiAkc210cF9zZXJ2ZXJfcG9ydCwKKwkJCQkJCQkgRGVidWcgPT4gJGRlYnVnX25ldF9zbXRwLAorCQkJCQkJCSBTU0wgPT4gMSk7CisJCQl9CisJCX0KKwkJZWxzaWYgKCEkc210cCkgeworCQkJJHNtdHBfc2VydmVyX3BvcnQgfHw9IDI1OworCQkJJHNtdHAgfHw9IE5ldDo6U01UUC0+bmV3KCRzbXRwX3NlcnZlciwKKwkJCQkJCSBIZWxsbyA9PiAkc210cF9kb21haW4sCisJCQkJCQkgRGVidWcgPT4gJGRlYnVnX25ldF9zbXRwLAorCQkJCQkJIFBvcnQgPT4gJHNtdHBfc2VydmVyX3BvcnQpOworCQkJaWYgKCRzbXRwX2VuY3J5cHRpb24gZXEgJ3RscycgJiYgJHNtdHApIHsKKwkJCQlpZiAoJHVzZV9uZXRfc210cF9zc2wpIHsKKwkJCQkJJHNtdHAtPmNvbW1hbmQoJ1NUQVJUVExTJyk7CisJCQkJCSRzbXRwLT5yZXNwb25zZSgpOworCQkJCQlpZiAoJHNtdHAtPmNvZGUgIT0gMjIwKSB7CisJCQkJCQlkaWUgc3ByaW50ZihfXygiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1RBUlRUTFMhICVzIiksICRzbXRwLT5tZXNzYWdlKTsKKwkJCQkJfQorCQkJCQlyZXF1aXJlIE5ldDo6U01UUDo6U1NMOworCQkJCQkkc210cCA9IE5ldDo6U01UUDo6U1NMLT5zdGFydF9TU0woJHNtdHAsCisJCQkJCQkJCQkgIHNzbF92ZXJpZnlfcGFyYW1zKCkpCisJCQkJCQlvciBkaWUgc3ByaW50ZihfXygiU1RBUlRUTFMgZmFpbGVkISAlcyIpLCBJTzo6U29ja2V0OjpTU0w6OmVycnN0cigpKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCSRzbXRwLT5zdGFydHRscyhzc2xfdmVyaWZ5X3BhcmFtcygpKQorCQkJCQkJb3IgZGllIHNwcmludGYoX18oIlNUQVJUVExTIGZhaWxlZCEgJXMiKSwgSU86OlNvY2tldDo6U1NMOjplcnJzdHIoKSk7CisJCQkJfQorCQkJCSMgU2VuZCBFSExPIGFnYWluIHRvIHJlY2VpdmUgZnJlc2gKKwkJCQkjIHN1cHBvcnRlZCBjb21tYW5kcworCQkJCSRzbXRwLT5oZWxsbygkc210cF9kb21haW4pOworCQkJfQorCQl9CisKKwkJaWYgKCEkc210cCkgeworCQkJZGllIF9fKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTTVRQIHByb3Blcmx5LiBDaGVjayBjb25maWcgYW5kIHVzZSAtLXNtdHAtZGVidWcuIiksCisJCQkgICAgIiBWQUxVRVM6IHNlcnZlcj0kc210cF9zZXJ2ZXIgIiwKKwkJCSAgICAiZW5jcnlwdGlvbj0kc210cF9lbmNyeXB0aW9uICIsCisJCQkgICAgImhlbGxvPSRzbXRwX2RvbWFpbiIsCisJCQkgICAgZGVmaW5lZCAkc210cF9zZXJ2ZXJfcG9ydCA/ICIgcG9ydD0kc210cF9zZXJ2ZXJfcG9ydCIgOiAiIjsKKwkJfQorCisJCXNtdHBfYXV0aF9tYXliZSBvciBkaWUgJHNtdHAtPm1lc3NhZ2U7CisKKwkJJHNtdHAtPm1haWwoICRyYXdfZnJvbSApIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKKwkJJHNtdHAtPnRvKCBAcmVjaXBpZW50cyApIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKKwkJJHNtdHAtPmRhdGEgb3IgZGllICRzbXRwLT5tZXNzYWdlOworCQkkc210cC0+ZGF0YXNlbmQoIiRoZWFkZXJcbiIpIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKKwkJbXkgQGxpbmVzID0gc3BsaXQgL14vLCAkbWVzc2FnZTsKKwkJZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CisJCQkkc210cC0+ZGF0YXNlbmQoIiRsaW5lIikgb3IgZGllICRzbXRwLT5tZXNzYWdlOworCQl9CisJCSRzbXRwLT5kYXRhZW5kKCkgb3IgZGllICRzbXRwLT5tZXNzYWdlOworCQkkc210cC0+Y29kZSA9fiAvMjUwfDIwMC8gb3IgZGllIHNwcmludGYoX18oIkZhaWxlZCB0byBzZW5kICVzXG4iKSwgJHN1YmplY3QpLiRzbXRwLT5tZXNzYWdlOworCX0KKwlpZiAoJHF1aWV0KSB7CisJCXByaW50ZigkZHJ5X3J1biA/IF9fKCJEcnktU2VudCAlc1xuIikgOiBfXygiU2VudCAlc1xuIiksICRzdWJqZWN0KTsKKwl9IGVsc2UgeworCQlwcmludCgkZHJ5X3J1biA/IF9fKCJEcnktT0suIExvZyBzYXlzOlxuIikgOiBfXygiT0suIExvZyBzYXlzOlxuIikpOworCQlpZiAoIWZpbGVfbmFtZV9pc19hYnNvbHV0ZSgkc210cF9zZXJ2ZXIpKSB7CisJCQlwcmludCAiU2VydmVyOiAkc210cF9zZXJ2ZXJcbiI7CisJCQlwcmludCAiTUFJTCBGUk9NOjwkcmF3X2Zyb20+XG4iOworCQkJZm9yZWFjaCBteSAkZW50cnkgKEByZWNpcGllbnRzKSB7CisJCQkgICAgcHJpbnQgIlJDUFQgVE86PCRlbnRyeT5cbiI7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcmludCAiU2VuZG1haWw6ICRzbXRwX3NlcnZlciAiLmpvaW4oJyAnLEBzZW5kbWFpbF9wYXJhbWV0ZXJzKS4iXG4iOworCQl9CisJCXByaW50ICRoZWFkZXIsICJcbiI7CisJCWlmICgkc210cCkgeworCQkJcHJpbnQgX18oIlJlc3VsdDogIiksICRzbXRwLT5jb2RlLCAnICcsCisJCQkJKCRzbXRwLT5tZXNzYWdlID1+IC9cbihbXlxuXStcbikkL3MpLCAiXG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgX18oIlJlc3VsdDogT0tcbiIpOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKKyRpbl9yZXBseV90byA9ICRpbml0aWFsX2luX3JlcGx5X3RvOworJHJlZmVyZW5jZXMgPSAkaW5pdGlhbF9pbl9yZXBseV90byB8fCAnJzsKKyRzdWJqZWN0ID0gJGluaXRpYWxfc3ViamVjdDsKKyRtZXNzYWdlX251bSA9IDA7CisKKyMgUHJlcGFyZXMgdGhlIGVtYWlsLCBwcm9tcHRzIHRoZSB1c2VyLCBzZW5kcyBpdCBvdXQKKyMgUmV0dXJucyAwIGlmIGFuIGVkaXQgd2FzIGRvbmUgYW5kIHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFnYWluLCBvciAxCisjIG90aGVyd2lzZS4KK3N1YiBwcm9jZXNzX2ZpbGUgeworCW15ICgkdCkgPSBAXzsKKworCW9wZW4gbXkgJGZoLCAiPCIsICR0IG9yIGRpZSBzcHJpbnRmKF9fKCJjYW4ndCBvcGVuIGZpbGUgJXMiKSwgJHQpOworCisJbXkgJGF1dGhvciA9IHVuZGVmOworCW15ICRzYXV0aG9yID0gdW5kZWY7CisJbXkgJGF1dGhvcl9lbmNvZGluZzsKKwlteSAkaGFzX2NvbnRlbnRfdHlwZTsKKwlteSAkYm9keV9lbmNvZGluZzsKKwlteSAkeGZlcl9lbmNvZGluZzsKKwlteSAkaGFzX21pbWVfdmVyc2lvbjsKKwlAdG8gPSAoKTsKKwlAY2MgPSAoKTsKKwlAeGggPSAoKTsKKwlteSAkaW5wdXRfZm9ybWF0ID0gdW5kZWY7CisJbXkgQGhlYWRlciA9ICgpOworCSRtZXNzYWdlID0gIiI7CisJJG1lc3NhZ2VfbnVtKys7CisJIyBGaXJzdCB1bmZvbGQgbXVsdGlsaW5lIGhlYWRlciBmaWVsZHMKKwl3aGlsZSg8JGZoPikgeworCQlsYXN0IGlmIC9eXHMqJC87CisJCWlmICgvXlxzK1xTLyBhbmQgQGhlYWRlcikgeworCQkJY2hvbXAoJGhlYWRlclskI2hlYWRlcl0pOworCQkJcy9eXHMrLyAvOworCQkJJGhlYWRlclskI2hlYWRlcl0gLj0gJF87CisJICAgIH0gZWxzZSB7CisJCQlwdXNoKEBoZWFkZXIsICRfKTsKKwkJfQorCX0KKwkjIE5vdyBwYXJzZSB0aGUgaGVhZGVyCisJZm9yZWFjaChAaGVhZGVyKSB7CisJCWlmICgvXkZyb20gLykgeworCQkJJGlucHV0X2Zvcm1hdCA9ICdtYm94JzsKKwkJCW5leHQ7CisJCX0KKwkJY2hvbXA7CisJCWlmICghZGVmaW5lZCAkaW5wdXRfZm9ybWF0ICYmIC9eWy1BLVphLXpdKzpccy8pIHsKKwkJCSRpbnB1dF9mb3JtYXQgPSAnbWJveCc7CisJCX0KKworCQlpZiAoZGVmaW5lZCAkaW5wdXRfZm9ybWF0ICYmICRpbnB1dF9mb3JtYXQgZXEgJ21ib3gnKSB7CisJCQlpZiAoL15TdWJqZWN0OlxzKyguKikkL2kpIHsKKwkJCQkkc3ViamVjdCA9ICQxOworCQkJfQorCQkJZWxzaWYgKC9eRnJvbTpccysoLiopJC9pKSB7CisJCQkJKCRhdXRob3IsICRhdXRob3JfZW5jb2RpbmcpID0gdW5xdW90ZV9yZmMyMDQ3KCQxKTsKKwkJCQkkc2F1dGhvciA9IHNhbml0aXplX2FkZHJlc3MoJGF1dGhvcik7CisJCQkJbmV4dCBpZiAkc3VwcHJlc3NfY2N7J2F1dGhvcid9OworCQkJCW5leHQgaWYgJHN1cHByZXNzX2NjeydzZWxmJ30gYW5kICRzYXV0aG9yIGVxICRzZW5kZXI7CisJCQkJcHJpbnRmKF9fKCIobWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIiksCisJCQkJCSQxLCAkXykgdW5sZXNzICRxdWlldDsKKwkJCQlwdXNoIEBjYywgJDE7CisJCQl9CisJCQllbHNpZiAoL15UbzpccysoLiopJC9pKSB7CisJCQkJZm9yZWFjaCBteSAkYWRkciAocGFyc2VfYWRkcmVzc19saW5lKCQxKSkgeworCQkJCQlwcmludGYoX18oIihtYm94KSBBZGRpbmcgdG86ICVzIGZyb20gbGluZSAnJXMnXG4iKSwKKwkJCQkJCSRhZGRyLCAkXykgdW5sZXNzICRxdWlldDsKKwkJCQkJcHVzaCBAdG8sICRhZGRyOworCQkJCX0KKwkJCX0KKwkJCWVsc2lmICgvXkNjOlxzKyguKikkL2kpIHsKKwkJCQlmb3JlYWNoIG15ICRhZGRyIChwYXJzZV9hZGRyZXNzX2xpbmUoJDEpKSB7CisJCQkJCW15ICRxYWRkciA9IHVucXVvdGVfcmZjMjA0NygkYWRkcik7CisJCQkJCW15ICRzYWRkciA9IHNhbml0aXplX2FkZHJlc3MoJHFhZGRyKTsKKwkJCQkJaWYgKCRzYWRkciBlcSAkc2VuZGVyKSB7CisJCQkJCQluZXh0IGlmICgkc3VwcHJlc3NfY2N7J3NlbGYnfSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQluZXh0IGlmICgkc3VwcHJlc3NfY2N7J2NjJ30pOworCQkJCQl9CisJCQkJCXByaW50ZihfXygiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIpLAorCQkJCQkJJGFkZHIsICRfKSB1bmxlc3MgJHF1aWV0OworCQkJCQlwdXNoIEBjYywgJGFkZHI7CisJCQkJfQorCQkJfQorCQkJZWxzaWYgKC9eQ29udGVudC10eXBlOi9pKSB7CisJCQkJJGhhc19jb250ZW50X3R5cGUgPSAxOworCQkJCWlmICgvY2hhcnNldD0iPyhbXiAiXSspLykgeworCQkJCQkkYm9keV9lbmNvZGluZyA9ICQxOworCQkJCX0KKwkJCQlwdXNoIEB4aCwgJF87CisJCQl9CisJCQllbHNpZiAoL15NSU1FLVZlcnNpb24vaSkgeworCQkJCSRoYXNfbWltZV92ZXJzaW9uID0gMTsKKwkJCQlwdXNoIEB4aCwgJF87CisJCQl9CisJCQllbHNpZiAoL15NZXNzYWdlLUlkOiAoLiopL2kpIHsKKwkJCQkkbWVzc2FnZV9pZCA9ICQxOworCQkJfQorCQkJZWxzaWYgKC9eQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogKC4qKS9pKSB7CisJCQkJJHhmZXJfZW5jb2RpbmcgPSAkMSBpZiBub3QgZGVmaW5lZCAkeGZlcl9lbmNvZGluZzsKKwkJCX0KKwkJCWVsc2lmICgvXkluLVJlcGx5LVRvOiAoLiopL2kpIHsKKwkJCQkkaW5fcmVwbHlfdG8gPSAkMTsKKwkJCX0KKwkJCWVsc2lmICgvXlJlZmVyZW5jZXM6ICguKikvaSkgeworCQkJCSRyZWZlcmVuY2VzID0gJDE7CisJCQl9CisJCQllbHNpZiAoIS9eRGF0ZTpccy9pICYmIC9eWy1BLVphLXpdKzpccytcUy8pIHsKKwkJCQlwdXNoIEB4aCwgJF87CisJCQl9CisJCX0gZWxzZSB7CisJCQkjIEluIHRoZSB0cmFkaXRpb25hbAorCQkJIyAic2VuZCBsb3RzIG9mIGVtYWlsIiBmb3JtYXQsCisJCQkjIGxpbmUgMSA9IGNjCisJCQkjIGxpbmUgMiA9IHN1YmplY3QKKwkJCSMgU28gbGV0J3Mgc3VwcG9ydCB0aGF0LCB0b28uCisJCQkkaW5wdXRfZm9ybWF0ID0gJ2xvdHMnOworCQkJaWYgKEBjYyA9PSAwICYmICEkc3VwcHJlc3NfY2N7J2NjJ30pIHsKKwkJCQlwcmludGYoX18oIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIiksCisJCQkJCSRfLCAkXykgdW5sZXNzICRxdWlldDsKKwkJCQlwdXNoIEBjYywgJF87CisJCQl9IGVsc2lmICghZGVmaW5lZCAkc3ViamVjdCkgeworCQkJCSRzdWJqZWN0ID0gJF87CisJCQl9CisJCX0KKwl9CisJIyBOb3cgcGFyc2UgdGhlIG1lc3NhZ2UgYm9keQorCXdoaWxlKDwkZmg+KSB7CisJCSRtZXNzYWdlIC49ICAkXzsKKwkJaWYgKC9eKFthLXpdW2Etei1dKi1ieXxDYyk6ICguKikvaSkgeworCQkJY2hvbXA7CisJCQlteSAoJHdoYXQsICRjKSA9ICgkMSwgJDIpOworCQkJIyBzdHJpcCBnYXJiYWdlIGZvciB0aGUgYWRkcmVzcyB3ZSdsbCB1c2U6CisJCQkkYyA9IHN0cmlwX2dhcmJhZ2Vfb25lX2FkZHJlc3MoJGMpOworCQkJIyBzYW5pdGl6ZSBhIGJpdCBtb3JlIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHN1cHByZXNzIHRoZSBhZGRyZXNzOgorCQkJbXkgJHNjID0gc2FuaXRpemVfYWRkcmVzcygkYyk7CisJCQlpZiAoJHNjIGVxICRzZW5kZXIpIHsKKwkJCQluZXh0IGlmICgkc3VwcHJlc3NfY2N7J3NlbGYnfSk7CisJCQl9IGVsc2UgeworCQkJCWlmICgkd2hhdCA9fiAvXlNpZ25lZC1vZmYtYnkkL2kpIHsKKwkJCQkJbmV4dCBpZiAkc3VwcHJlc3NfY2N7J3NvYid9OworCQkJCX0gZWxzaWYgKCR3aGF0ID1+IC8tYnkkL2kpIHsKKwkJCQkJbmV4dCBpZiAkc3VwcHJlc3NfY2N7J21pc2MtYnknfTsKKwkJCQl9IGVsc2lmICgkd2hhdCA9fiAvQ2MvaSkgeworCQkJCQluZXh0IGlmICRzdXBwcmVzc19jY3snYm9keWNjJ307CisJCQkJfQorCQkJfQorCQkJaWYgKCRjICF+IC8uK0AuK3w8Lis+LykgeworCQkJCXByaW50ZigiKGJvZHkpIElnbm9yaW5nICVzIGZyb20gbGluZSAnJXMnXG4iLAorCQkJCQkkd2hhdCwgJF8pIHVubGVzcyAkcXVpZXQ7CisJCQkJbmV4dDsKKwkJCX0KKwkJCXB1c2ggQGNjLCAkYzsKKwkJCXByaW50ZihfXygiKGJvZHkpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIpLAorCQkJCSRjLCAkXykgdW5sZXNzICRxdWlldDsKKwkJfQorCX0KKwljbG9zZSAkZmg7CisKKwlwdXNoIEB0bywgcmVjaXBpZW50c19jbWQoInRvLWNtZCIsICJ0byIsICR0b19jbWQsICR0KQorCQlpZiBkZWZpbmVkICR0b19jbWQ7CisJcHVzaCBAY2MsIHJlY2lwaWVudHNfY21kKCJjYy1jbWQiLCAiY2MiLCAkY2NfY21kLCAkdCkKKwkJaWYgZGVmaW5lZCAkY2NfY21kICYmICEkc3VwcHJlc3NfY2N7J2NjY21kJ307CisKKwlpZiAoJGJyb2tlbl9lbmNvZGluZ3skdH0gJiYgISRoYXNfY29udGVudF90eXBlKSB7CisJCSR4ZmVyX2VuY29kaW5nID0gJzhiaXQnIGlmIG5vdCBkZWZpbmVkICR4ZmVyX2VuY29kaW5nOworCQkkaGFzX2NvbnRlbnRfdHlwZSA9IDE7CisJCXB1c2ggQHhoLCAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSRhdXRvXzhiaXRfZW5jb2RpbmciOworCQkkYm9keV9lbmNvZGluZyA9ICRhdXRvXzhiaXRfZW5jb2Rpbmc7CisJfQorCisJaWYgKCRicm9rZW5fZW5jb2Rpbmd7JHR9ICYmICFpc19yZmMyMDQ3X3F1b3RlZCgkc3ViamVjdCkpIHsKKwkJJHN1YmplY3QgPSBxdW90ZV9zdWJqZWN0KCRzdWJqZWN0LCAkYXV0b184Yml0X2VuY29kaW5nKTsKKwl9CisKKwlpZiAoZGVmaW5lZCAkc2F1dGhvciBhbmQgJHNhdXRob3IgbmUgJHNlbmRlcikgeworCQkkbWVzc2FnZSA9ICJGcm9tOiAkYXV0aG9yXG5cbiRtZXNzYWdlIjsKKwkJaWYgKGRlZmluZWQgJGF1dGhvcl9lbmNvZGluZykgeworCQkJaWYgKCRoYXNfY29udGVudF90eXBlKSB7CisJCQkJaWYgKCRib2R5X2VuY29kaW5nIGVxICRhdXRob3JfZW5jb2RpbmcpIHsKKwkJCQkJIyBvaywgd2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBlbmNvZGluZworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJIyB1aCBvaCwgd2Ugc2hvdWxkIHJlLWVuY29kZQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCSR4ZmVyX2VuY29kaW5nID0gJzhiaXQnIGlmIG5vdCBkZWZpbmVkICR4ZmVyX2VuY29kaW5nOworCQkJCSRoYXNfY29udGVudF90eXBlID0gMTsKKwkJCQlwdXNoIEB4aCwKKwkJCQkgICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9JGF1dGhvcl9lbmNvZGluZyI7CisJCQl9CisJCX0KKwl9CisJJHhmZXJfZW5jb2RpbmcgPSAnOGJpdCcgaWYgbm90IGRlZmluZWQgJHhmZXJfZW5jb2Rpbmc7CisJKCRtZXNzYWdlLCAkeGZlcl9lbmNvZGluZykgPSBhcHBseV90cmFuc2Zlcl9lbmNvZGluZygKKwkJJG1lc3NhZ2UsICR4ZmVyX2VuY29kaW5nLCAkdGFyZ2V0X3hmZXJfZW5jb2RpbmcpOworCXB1c2ggQHhoLCAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogJHhmZXJfZW5jb2RpbmciOworCXVuc2hpZnQgQHhoLCAnTUlNRS1WZXJzaW9uOiAxLjAnIHVubGVzcyAkaGFzX21pbWVfdmVyc2lvbjsKKworCSRuZWVkc19jb25maXJtID0gKAorCQkkY29uZmlybSBlcSAiYWx3YXlzIiBvcgorCQkoJGNvbmZpcm0gPX4gL14oPzphdXRvfGNjKSQvICYmIEBjYykgb3IKKwkJKCRjb25maXJtID1+IC9eKD86YXV0b3xjb21wb3NlKSQvICYmICRjb21wb3NlICYmICRtZXNzYWdlX251bSA9PSAxKSk7CisJJG5lZWRzX2NvbmZpcm0gPSAiaW5mb3JtIiBpZiAoJG5lZWRzX2NvbmZpcm0gJiYgJGNvbmZpcm1fdW5jb25maWd1cmVkICYmIEBjYyk7CisKKwlAdG8gPSBwcm9jZXNzX2FkZHJlc3NfbGlzdChAdG8pOworCUBjYyA9IHByb2Nlc3NfYWRkcmVzc19saXN0KEBjYyk7CisKKwlAdG8gPSAoQGluaXRpYWxfdG8sIEB0byk7CisJQGNjID0gKEBpbml0aWFsX2NjLCBAY2MpOworCisJaWYgKCRtZXNzYWdlX251bSA9PSAxKSB7CisJCWlmIChkZWZpbmVkICRjb3Zlcl9jYyBhbmQgJGNvdmVyX2NjKSB7CisJCQlAaW5pdGlhbF9jYyA9IEBjYzsKKwkJfQorCQlpZiAoZGVmaW5lZCAkY292ZXJfdG8gYW5kICRjb3Zlcl90bykgeworCQkJQGluaXRpYWxfdG8gPSBAdG87CisJCX0KKwl9CisKKwlteSAkbWVzc2FnZV93YXNfc2VudCA9IHNlbmRfbWVzc2FnZSgpOworCWlmICgkbWVzc2FnZV93YXNfc2VudCA9PSAtMSkgeworCQlkb19lZGl0KCR0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJIyBzZXQgdXAgZm9yIHRoZSBuZXh0IG1lc3NhZ2UKKwlpZiAoJHRocmVhZCAmJiAkbWVzc2FnZV93YXNfc2VudCAmJgorCQkoJGNoYWluX3JlcGx5X3RvIHx8ICFkZWZpbmVkICRpbl9yZXBseV90byB8fCBsZW5ndGgoJGluX3JlcGx5X3RvKSA9PSAwIHx8CisJCSRtZXNzYWdlX251bSA9PSAxKSkgeworCQkkaW5fcmVwbHlfdG8gPSAkbWVzc2FnZV9pZDsKKwkJaWYgKGxlbmd0aCAkcmVmZXJlbmNlcyA+IDApIHsKKwkJCSRyZWZlcmVuY2VzIC49ICJcbiAkbWVzc2FnZV9pZCI7CisJCX0gZWxzZSB7CisJCQkkcmVmZXJlbmNlcyA9ICIkbWVzc2FnZV9pZCI7CisJCX0KKwl9CisJJG1lc3NhZ2VfaWQgPSB1bmRlZjsKKwkkbnVtX3NlbnQrKzsKKwlpZiAoZGVmaW5lZCAkYmF0Y2hfc2l6ZSAmJiAkbnVtX3NlbnQgPT0gJGJhdGNoX3NpemUpIHsKKwkJJG51bV9zZW50ID0gMDsKKwkJJHNtdHAtPnF1aXQgaWYgZGVmaW5lZCAkc210cDsKKwkJdW5kZWYgJHNtdHA7CisJCXVuZGVmICRhdXRoOworCQlzbGVlcCgkcmVsb2dpbl9kZWxheSkgaWYgZGVmaW5lZCAkcmVsb2dpbl9kZWxheTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworZm9yZWFjaCBteSAkdCAoQGZpbGVzKSB7CisJd2hpbGUgKCFwcm9jZXNzX2ZpbGUoJHQpKSB7CisJCSMgdXNlciBlZGl0ZWQgdGhlIGZpbGUKKwl9Cit9CisKKyMgRXhlY3V0ZSBhIGNvbW1hbmQgKGUuZy4gJHRvX2NtZCkgdG8gZ2V0IGEgbGlzdCBvZiBlbWFpbCBhZGRyZXNzZXMKKyMgYW5kIHJldHVybiBhIHJlc3VsdHMgYXJyYXkKK3N1YiByZWNpcGllbnRzX2NtZCB7CisJbXkgKCRwcmVmaXgsICR3aGF0LCAkY21kLCAkZmlsZSkgPSBAXzsKKworCW15IEBhZGRyZXNzZXMgPSAoKTsKKwlvcGVuIG15ICRmaCwgIi18IiwgIiRjbWQgXFEkZmlsZVxFIgorCSAgICBvciBkaWUgc3ByaW50ZihfXygiKCVzKSBDb3VsZCBub3QgZXhlY3V0ZSAnJXMnIiksICRwcmVmaXgsICRjbWQpOworCXdoaWxlIChteSAkYWRkcmVzcyA9IDwkZmg+KSB7CisJCSRhZGRyZXNzID1+IHMvXlxzKi8vZzsKKwkJJGFkZHJlc3MgPX4gcy9ccyokLy9nOworCQkkYWRkcmVzcyA9IHNhbml0aXplX2FkZHJlc3MoJGFkZHJlc3MpOworCQluZXh0IGlmICgkYWRkcmVzcyBlcSAkc2VuZGVyIGFuZCAkc3VwcHJlc3NfY2N7J3NlbGYnfSk7CisJCXB1c2ggQGFkZHJlc3NlcywgJGFkZHJlc3M7CisJCXByaW50ZihfXygiKCVzKSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIpLAorCQkgICAgICAgJHByZWZpeCwgJHdoYXQsICRhZGRyZXNzLCAkY21kKSB1bmxlc3MgJHF1aWV0OworCQl9CisJY2xvc2UgJGZoCisJICAgIG9yIGRpZSBzcHJpbnRmKF9fKCIoJXMpIGZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICclcyciKSwgJHByZWZpeCwgJGNtZCk7CisJcmV0dXJuIEBhZGRyZXNzZXM7Cit9CisKK2NsZWFudXBfY29tcG9zZV9maWxlcygpOworCitzdWIgY2xlYW51cF9jb21wb3NlX2ZpbGVzIHsKKwl1bmxpbmsoJGNvbXBvc2VfZmlsZW5hbWUsICRjb21wb3NlX2ZpbGVuYW1lIC4gIi5maW5hbCIpIGlmICRjb21wb3NlOworfQorCiskc210cC0+cXVpdCBpZiAkc210cDsKKworc3ViIGFwcGx5X3RyYW5zZmVyX2VuY29kaW5nIHsKKwlteSAkbWVzc2FnZSA9IHNoaWZ0OworCW15ICRmcm9tID0gc2hpZnQ7CisJbXkgJHRvID0gc2hpZnQ7CisKKwlyZXR1cm4gKCRtZXNzYWdlLCAkdG8pIGlmICgkZnJvbSBlcSAkdG8gYW5kICRmcm9tIG5lICc3Yml0Jyk7CisKKwlyZXF1aXJlIE1JTUU6OlF1b3RlZFByaW50OworCXJlcXVpcmUgTUlNRTo6QmFzZTY0OworCisJJG1lc3NhZ2UgPSBNSU1FOjpRdW90ZWRQcmludDo6ZGVjb2RlKCRtZXNzYWdlKQorCQlpZiAoJGZyb20gZXEgJ3F1b3RlZC1wcmludGFibGUnKTsKKwkkbWVzc2FnZSA9IE1JTUU6OkJhc2U2NDo6ZGVjb2RlKCRtZXNzYWdlKQorCQlpZiAoJGZyb20gZXEgJ2Jhc2U2NCcpOworCisJJHRvID0gKCRtZXNzYWdlID1+IC8oPzouezk5OSx9fFxyKS8pID8gJ3F1b3RlZC1wcmludGFibGUnIDogJzhiaXQnCisJCWlmICR0byBlcSAnYXV0byc7CisKKwlkaWUgX18oImNhbm5vdCBzZW5kIG1lc3NhZ2UgYXMgN2JpdCIpCisJCWlmICgkdG8gZXEgJzdiaXQnIGFuZCAkbWVzc2FnZSA9fiAvW15bOmFzY2lpOl1dLyk7CisJcmV0dXJuICgkbWVzc2FnZSwgJHRvKQorCQlpZiAoJHRvIGVxICc3Yml0JyBvciAkdG8gZXEgJzhiaXQnKTsKKwlyZXR1cm4gKE1JTUU6OlF1b3RlZFByaW50OjplbmNvZGUoJG1lc3NhZ2UsICJcbiIsIDApLCAkdG8pCisJCWlmICgkdG8gZXEgJ3F1b3RlZC1wcmludGFibGUnKTsKKwlyZXR1cm4gKE1JTUU6OkJhc2U2NDo6ZW5jb2RlKCRtZXNzYWdlLCAiXG4iKSwgJHRvKQorCQlpZiAoJHRvIGVxICdiYXNlNjQnKTsKKwlkaWUgX18oImludmFsaWQgdHJhbnNmZXIgZW5jb2RpbmciKTsKK30KKworc3ViIHVuaXF1ZV9lbWFpbF9saXN0IHsKKwlteSAlc2VlbjsKKwlteSBAZW1haWxzOworCisJZm9yZWFjaCBteSAkZW50cnkgKEBfKSB7CisJCW15ICRjbGVhbiA9IGV4dHJhY3RfdmFsaWRfYWRkcmVzc19vcl9kaWUoJGVudHJ5KTsKKwkJJHNlZW57JGNsZWFufSB8fD0gMDsKKwkJbmV4dCBpZiAkc2VlbnskY2xlYW59Kys7CisJCXB1c2ggQGVtYWlscywgJGVudHJ5OworCX0KKwlyZXR1cm4gQGVtYWlsczsKK30KKworc3ViIHZhbGlkYXRlX3BhdGNoIHsKKwlteSAoJGZuLCAkeGZlcl9lbmNvZGluZykgPSBAXzsKKworCWlmICgkcmVwbykgeworCQlteSAkdmFsaWRhdGVfaG9vayA9IGNhdGZpbGUoY2F0ZGlyKCRyZXBvLT5yZXBvX3BhdGgoKSwgJ2hvb2tzJyksCisJCQkJCSAgICAnc2VuZGVtYWlsLXZhbGlkYXRlJyk7CisJCW15ICRob29rX2Vycm9yOworCQlpZiAoLXggJHZhbGlkYXRlX2hvb2spIHsKKwkJCW15ICR0YXJnZXQgPSBhYnNfcGF0aCgkZm4pOworCQkJIyBUaGUgaG9vayBuZWVkcyBhIGNvcnJlY3QgY3dkIGFuZCBHSVRfRElSLgorCQkJbXkgJGN3ZF9zYXZlID0gY3dkKCk7CisJCQljaGRpcigkcmVwby0+d2NfcGF0aCgpIG9yICRyZXBvLT5yZXBvX3BhdGgoKSkKKwkJCQlvciBkaWUoImNoZGlyOiAkISIpOworCQkJbG9jYWwgJEVOVnsiR0lUX0RJUiJ9ID0gJHJlcG8tPnJlcG9fcGF0aCgpOworCQkJJGhvb2tfZXJyb3IgPSAicmVqZWN0ZWQgYnkgc2VuZGVtYWlsLXZhbGlkYXRlIGhvb2siCisJCQkJaWYgc3lzdGVtKCR2YWxpZGF0ZV9ob29rLCAkdGFyZ2V0KTsKKwkJCWNoZGlyKCRjd2Rfc2F2ZSkgb3IgZGllKCJjaGRpcjogJCEiKTsKKwkJfQorCQlyZXR1cm4gJGhvb2tfZXJyb3IgaWYgJGhvb2tfZXJyb3I7CisJfQorCisJIyBBbnkgbG9uZyBsaW5lcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZml4ZWQgaWYgd2UgdXNlIGEgc3VpdGFibGUgdHJhbnNmZXIKKwkjIGVuY29kaW5nLgorCXVubGVzcyAoJHhmZXJfZW5jb2RpbmcgPX4gL14oPzphdXRvfHF1b3RlZC1wcmludGFibGV8YmFzZTY0KSQvKSB7CisJCW9wZW4obXkgJGZoLCAnPCcsICRmbikKKwkJCW9yIGRpZSBzcHJpbnRmKF9fKCJ1bmFibGUgdG8gb3BlbiAlczogJXNcbiIpLCAkZm4sICQhKTsKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKwkJCWlmIChsZW5ndGgoJGxpbmUpID4gOTk4KSB7CisJCQkJcmV0dXJuIHNwcmludGYoX18oIiVzOiBwYXRjaCBjb250YWlucyBhIGxpbmUgbG9uZ2VyIHRoYW4gOTk4IGNoYXJhY3RlcnMiKSwgJC4pOworCQkJfQorCQl9CisJfQorCXJldHVybjsKK30KKworc3ViIGhhbmRsZV9iYWNrdXAgeworCW15ICgkbGFzdCwgJGxhc3RsZW4sICRmaWxlLCAka25vd25fc3VmZml4KSA9IEBfOworCW15ICgkc3VmZml4LCAkc2tpcCk7CisKKwkkc2tpcCA9IDA7CisJaWYgKGRlZmluZWQgJGxhc3QgJiYKKwkgICAgKCRsYXN0bGVuIDwgbGVuZ3RoKCRmaWxlKSkgJiYKKwkgICAgKHN1YnN0cigkZmlsZSwgMCwgJGxhc3RsZW4pIGVxICRsYXN0KSAmJgorCSAgICAoJHN1ZmZpeCA9IHN1YnN0cigkZmlsZSwgJGxhc3RsZW4pKSAhfiAvXlthLXowLTldL2kpIHsKKwkJaWYgKGRlZmluZWQgJGtub3duX3N1ZmZpeCAmJiAkc3VmZml4IGVxICRrbm93bl9zdWZmaXgpIHsKKwkJCXByaW50ZihfXygiU2tpcHBpbmcgJXMgd2l0aCBiYWNrdXAgc3VmZml4ICclcycuXG4iKSwgJGZpbGUsICRrbm93bl9zdWZmaXgpOworCQkJJHNraXAgPSAxOworCQl9IGVsc2UgeworCQkJIyBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKwkJCW15ICRhbnN3ZXIgPSBhc2soc3ByaW50ZihfXygiRG8geW91IHJlYWxseSB3YW50IHRvIHNlbmQgJXM/IFt5fE5dOiAiKSwgJGZpbGUpLAorCQkJCQkgdmFsaWRfcmUgPT4gcXIvXig/Onl8bikvaSwKKwkJCQkJIGRlZmF1bHQgPT4gJ24nKTsKKwkJCSRza2lwID0gKCRhbnN3ZXIgbmUgJ3knKTsKKwkJCWlmICgkc2tpcCkgeworCQkJCSRrbm93bl9zdWZmaXggPSAkc3VmZml4OworCQkJfQorCQl9CisJfQorCXJldHVybiAoJHNraXAsICRrbm93bl9zdWZmaXgpOworfQorCitzdWIgaGFuZGxlX2JhY2t1cF9maWxlcyB7CisJbXkgQGZpbGUgPSBAXzsKKwlteSAoJGxhc3QsICRsYXN0bGVuLCAka25vd25fc3VmZml4LCAkc2tpcCwgQHJlc3VsdCk7CisJZm9yIG15ICRmaWxlIChAZmlsZSkgeworCQkoJHNraXAsICRrbm93bl9zdWZmaXgpID0gaGFuZGxlX2JhY2t1cCgkbGFzdCwgJGxhc3RsZW4sCisJCQkJCQkgICAgICAgJGZpbGUsICRrbm93bl9zdWZmaXgpOworCQlwdXNoIEByZXN1bHQsICRmaWxlIHVubGVzcyAkc2tpcDsKKwkJJGxhc3QgPSAkZmlsZTsKKwkJJGxhc3RsZW4gPSBsZW5ndGgoJGZpbGUpOworCX0KKwlyZXR1cm4gQHJlc3VsdDsKK30KKworc3ViIGZpbGVfaGFzX25vbmFzY2lpIHsKKwlteSAkZm4gPSBzaGlmdDsKKwlvcGVuKG15ICRmaCwgJzwnLCAkZm4pCisJCW9yIGRpZSBzcHJpbnRmKF9fKCJ1bmFibGUgdG8gb3BlbiAlczogJXNcbiIpLCAkZm4sICQhKTsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZoPikgeworCQlyZXR1cm4gMSBpZiAkbGluZSA9fiAvW15bOmFzY2lpOl1dLzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N1YiBib2R5X29yX3N1YmplY3RfaGFzX25vbmFzY2lpIHsKKwlteSAkZm4gPSBzaGlmdDsKKwlvcGVuKG15ICRmaCwgJzwnLCAkZm4pCisJCW9yIGRpZSBzcHJpbnRmKF9fKCJ1bmFibGUgdG8gb3BlbiAlczogJXNcbiIpLCAkZm4sICQhKTsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZoPikgeworCQlsYXN0IGlmICRsaW5lID1+IC9eJC87CisJCXJldHVybiAxIGlmICRsaW5lID1+IC9eU3ViamVjdC4qW15bOmFzY2lpOl1dLzsKKwl9CisJd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKwkJcmV0dXJuIDEgaWYgJGxpbmUgPX4gL1teWzphc2NpaTpdXS87CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2l0LXNoLWkxOG4uc2ggYi9naXQtc2gtaTE4bi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWVmNjBiCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXNoLWkxOG4uc2gKQEAgLTAsMCArMSwxMTEgQEAKKyMgVGhpcyBzaGVsbCBsaWJyYXJ5IGlzIEdpdCdzIGludGVyZmFjZSB0byBnZXR0ZXh0LnNoLiBTZWUgcG8vUkVBRE1FCisjIGZvciB1c2FnZSBpbnN0cnVjdGlvbnMuCisjCisjIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorIworCisjIEV4cG9ydCB0aGUgVEVYVERPTUFJTiogZGF0YSB0aGF0IHdlIG5lZWQgZm9yIEdpdAorVEVYVERPTUFJTj1naXQKK2V4cG9ydCBURVhURE9NQUlOCitpZiB0ZXN0IC16ICIkR0lUX1RFWFRET01BSU5ESVIiCit0aGVuCisJVEVYVERPTUFJTkRJUj0iQEBMT0NBTEVESVJAQCIKK2Vsc2UKKwlURVhURE9NQUlORElSPSIkR0lUX1RFWFRET01BSU5ESVIiCitmaQorZXhwb3J0IFRFWFRET01BSU5ESVIKKworIyBGaXJzdCBkZWNpZGUgd2hhdCBzY2hlbWUgdG8gdXNlLi4uCitHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUU9ZmFsbHRocm91Z2gKK2lmIHRlc3QgLW4gIiRHSVRfVEVTVF9HRVRURVhUX1BPSVNPTiIgJiYKKwkgICAgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD0wIC0tZXhpdC1jb2RlIFwKKwkJR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04KK3RoZW4KKwlHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUU9cG9pc29uCitlbGlmIHRlc3QgLW4gIkBAVVNFX0dFVFRFWFRfU0NIRU1FQEAiCit0aGVuCisJR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FPSJAQFVTRV9HRVRURVhUX1NDSEVNRUBAIgorZWxpZiB0ZXN0IC1uICIkR0lUX0lOVEVSTkFMX0dFVFRFWFRfVEVTVF9GQUxMQkFDS1MiCit0aGVuCisJOiBubyBwcm9iaW5nIG5lY2Vzc2FyeQorZWxpZiB0eXBlIGdldHRleHQuc2ggPi9kZXYvbnVsbCAyPiYxCit0aGVuCisJIyBHTlUgbGliaW50bCdzIGdldHRleHQuc2gKKwlHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUU9Z251CitlbGlmIHRlc3QgIiQoZ2V0dGV4dCAtaCAyPiYxKSIgPSAiLWgiCit0aGVuCisJIyBnZXR0ZXh0IGJpbmFyeSBleGlzdHMgYnV0IG5vIGdldHRleHQuc2guIGxpa2VseSB0byBiZSBhIGdldHRleHQKKwkjIGJpbmFyeSBvbiBhIFNvbGFyaXMgb3Igc29tZXRoaW5nIHRoYXQgaXMgbm90IEdOVSBsaWJpbnRsIGFuZAorCSMgbGFjayBldmFsX2dldHRleHQuCisJR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FPWdldHRleHRfd2l0aG91dF9ldmFsX2dldHRleHQKK2ZpCitleHBvcnQgR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FCisKKyMgLi4uIGFuZCB0aGVuIGZvbGxvdyB0aGF0IGRlY2lzaW9uLgorY2FzZSAiJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSIgaW4KK2dudSkKKwkjIFVzZSBsaWJpbnRsJ3MgZ2V0dGV4dC5zaCwgb3IgZmFsbCBiYWNrIHRvIEVuZ2xpc2ggaWYgd2UgY2FuJ3QuCisJLiBnZXR0ZXh0LnNoCisJOzsKK2dldHRleHRfd2l0aG91dF9ldmFsX2dldHRleHQpCisJIyBTb2xhcmlzIGhhcyBhIGdldHRleHQoMSkgYnV0IG5vIGV2YWxfZ2V0dGV4dCgxKQorCWV2YWxfZ2V0dGV4dCAoKSB7CisJCWdldHRleHQgIiQxIiB8ICgKKwkJCWV4cG9ydCBQQVRIICQoZ2l0IHNoLWkxOG4tLWVudnN1YnN0IC0tdmFyaWFibGVzICIkMSIpOworCQkJZ2l0IHNoLWkxOG4tLWVudnN1YnN0ICIkMSIKKwkJKQorCX0KKworCWV2YWxfbmdldHRleHQgKCkgeworCQluZ2V0dGV4dCAiJDEiICIkMiIgIiQzIiB8ICgKKwkJCWV4cG9ydCBQQVRIICQoZ2l0IHNoLWkxOG4tLWVudnN1YnN0IC0tdmFyaWFibGVzICIkMiIpOworCQkJZ2l0IHNoLWkxOG4tLWVudnN1YnN0ICIkMiIKKwkJKQorCX0KKwk7OworcG9pc29uKQorCSMgRW1pdCBnYXJiYWdlIHNvIHRoYXQgdGVzdHMgdGhhdCBpbmNvcnJlY3RseSByZWx5IG9uIHRyYW5zbGF0YWJsZQorCSMgc3RyaW5ncyB3aWxsIGZhaWwuCisJZ2V0dGV4dCAoKSB7CisJCXByaW50ZiAiJXMiICIjIEdFVFRFWFQgUE9JU09OICMiCisJfQorCisJZXZhbF9nZXR0ZXh0ICgpIHsKKwkJcHJpbnRmICIlcyIgIiMgR0VUVEVYVCBQT0lTT04gIyIKKwl9CisKKwlldmFsX25nZXR0ZXh0ICgpIHsKKwkJcHJpbnRmICIlcyIgIiMgR0VUVEVYVCBQT0lTT04gIyIKKwl9CisJOzsKKyopCisJZ2V0dGV4dCAoKSB7CisJCXByaW50ZiAiJXMiICIkMSIKKwl9CisKKwlldmFsX2dldHRleHQgKCkgeworCQlwcmludGYgIiVzIiAiJDEiIHwgKAorCQkJZXhwb3J0IFBBVEggJChnaXQgc2gtaTE4bi0tZW52c3Vic3QgLS12YXJpYWJsZXMgIiQxIik7CisJCQlnaXQgc2gtaTE4bi0tZW52c3Vic3QgIiQxIgorCQkpCisJfQorCisJZXZhbF9uZ2V0dGV4dCAoKSB7CisJCSh0ZXN0ICIkMyIgPSAxICYmIHByaW50ZiAiJXMiICIkMSIgfHwgcHJpbnRmICIlcyIgIiQyIikgfCAoCisJCQlleHBvcnQgUEFUSCAkKGdpdCBzaC1pMThuLS1lbnZzdWJzdCAtLXZhcmlhYmxlcyAiJDIiKTsKKwkJCWdpdCBzaC1pMThuLS1lbnZzdWJzdCAiJDIiCisJCSkKKwl9CisJOzsKK2VzYWMKKworIyBHaXQtc3BlY2lmaWMgd3JhcHBlciBmdW5jdGlvbnMKK2dldHRleHRsbiAoKSB7CisJZ2V0dGV4dCAiJDEiCisJZWNobworfQorCitldmFsX2dldHRleHRsbiAoKSB7CisJZXZhbF9nZXR0ZXh0ICIkMSIKKwllY2hvCit9CmRpZmYgLS1naXQgYS9naXQtc2gtc2V0dXAuc2ggYi9naXQtc2gtc2V0dXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkOTc2NAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1zaC1zZXR1cC5zaApAQCAtMCwwICsxLDM5OSBAQAorIyBUaGlzIHNoZWxsIHNjcmlwbGV0IGlzIG1lYW50IHRvIGJlIGluY2x1ZGVkIGJ5IG90aGVyIHNoZWxsIHNjcmlwdHMKKyMgdG8gc2V0IHVwIHNvbWUgdmFyaWFibGVzIHBvaW50aW5nIGF0IHRoZSBub3JtYWwgZ2l0IGRpcmVjdG9yaWVzIGFuZAorIyBhIGZldyBoZWxwZXIgc2hlbGwgZnVuY3Rpb25zLgorCisjIEhhdmluZyB0aGlzIHZhcmlhYmxlIGluIHlvdXIgZW52aXJvbm1lbnQgd291bGQgYnJlYWsgc2NyaXB0cyBiZWNhdXNlCisjIHlvdSB3b3VsZCBjYXVzZSAiY2QiIHRvIGJlIHRha2VuIHRvIHVuZXhwZWN0ZWQgcGxhY2VzLiAgSWYgeW91CisjIGxpa2UgQ0RQQVRILCBkZWZpbmUgaXQgZm9yIHlvdXIgaW50ZXJhY3RpdmUgc2hlbGwgc2Vzc2lvbnMgd2l0aG91dAorIyBleHBvcnRpbmcgaXQuCisjIEJ1dCB3ZSBwcm90ZWN0IG91cnNlbHZlcyBmcm9tIHN1Y2ggYSB1c2VyIG1pc3Rha2UgbmV2ZXJ0aGVsZXNzLgordW5zZXQgQ0RQQVRICisKKyMgU2ltaWxhcmx5IGZvciBJRlMsIGJ1dCBzb21lIHNoZWxscyAoZS5nLiBGcmVlQlNEIDcuMikgYXJlIGJ1Z2d5IGFuZAorIyBkbyBub3QgZXF1YXRlIGFuIHVuc2V0IElGUyB3aXRoIElGUyB3aXRoIHRoZSBkZWZhdWx0LCBzbyBoZXJlIGlzCisjIGFuIGV4cGxpY2l0IFNQIEhUIExGLgorSUZTPScgCQorJworCitnaXRfYnJva2VuX3BhdGhfZml4ICgpIHsKKwljYXNlICI6JFBBVEg6IiBpbgorCSo6JDE6KikgOiBvayA7OworCSopCisJCVBBVEg9JCgKKwkJCVNBTkVfVE9PTF9QQVRIPSIkMSIKKwkJCUlGUz06IHBhdGg9IHNlcD0KKwkJCXNldCB4ICRQQVRICisJCQlzaGlmdAorCQkJZm9yIGVsZW0KKwkJCWRvCisJCQkJY2FzZSAiJFNBTkVfVE9PTF9QQVRIOiRlbGVtIiBpbgorCQkJCSg/KjovYmluIHwgPyo6L3Vzci9iaW4pCisJCQkJCXBhdGg9IiRwYXRoJHNlcCRTQU5FX1RPT0xfUEFUSCIKKwkJCQkJc2VwPToKKwkJCQkJU0FORV9UT09MX1BBVEg9CisJCQkJZXNhYworCQkJCXBhdGg9IiRwYXRoJHNlcCRlbGVtIgorCQkJCXNlcD06CisJCQlkb25lCisJCQllY2hvICIkcGF0aCIKKwkJKQorCQk7OworCWVzYWMKK30KKworIyBAQEJST0tFTl9QQVRIX0ZJWEBACisKKyMgU291cmNlIGdpdC1zaC1pMThuIGZvciBnZXR0ZXh0IHN1cHBvcnQuCisuICIkKGdpdCAtLWV4ZWMtcGF0aCkvZ2l0LXNoLWkxOG4iCisKK2RpZSAoKSB7CisJZGllX3dpdGhfc3RhdHVzIDEgIiRAIgorfQorCitkaWVfd2l0aF9zdGF0dXMgKCkgeworCXN0YXR1cz0kMQorCXNoaWZ0CisJcHJpbnRmID4mMiAnJXNcbicgIiQqIgorCWV4aXQgIiRzdGF0dXMiCit9CisKK0dJVF9RVUlFVD0KKworc2F5ICgpIHsKKwlpZiB0ZXN0IC16ICIkR0lUX1FVSUVUIgorCXRoZW4KKwkJcHJpbnRmICclc1xuJyAiJCoiCisJZmkKK30KKworaWYgdGVzdCAtbiAiJE9QVElPTlNfU1BFQyI7IHRoZW4KKwl1c2FnZSgpIHsKKwkJIiQwIiAtaAorCQlleGl0IDEKKwl9CisKKwlwYXJzZW9wdF9leHRyYT0KKwlbIC1uICIkT1BUSU9OU19LRUVQREFTSERBU0giIF0gJiYKKwkJcGFyc2VvcHRfZXh0cmE9Ii0ta2VlcC1kYXNoZGFzaCIKKwlbIC1uICIkT1BUSU9OU19TVFVDS0xPTkciIF0gJiYKKwkJcGFyc2VvcHRfZXh0cmE9IiRwYXJzZW9wdF9leHRyYSAtLXN0dWNrLWxvbmciCisKKwlldmFsICIkKAorCQllY2hvICIkT1BUSU9OU19TUEVDIiB8CisJCQlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgJHBhcnNlb3B0X2V4dHJhIC0tICIkQCIgfHwKKwkJZWNobyBleGl0ICQ/CisJKSIKK2Vsc2UKKwlkYXNobGVzcz0kKGJhc2VuYW1lIC0tICIkMCIgfCBzZWQgLWUgJ3MvLS8gLycpCisJdXNhZ2UoKSB7CisJCWRpZSAiJChldmFsX2dldHRleHQgInVzYWdlOiBcJGRhc2hsZXNzIFwkVVNBR0UiKSIKKwl9CisKKwlpZiBbIC16ICIkTE9OR19VU0FHRSIgXQorCXRoZW4KKwkJTE9OR19VU0FHRT0iJChldmFsX2dldHRleHQgInVzYWdlOiBcJGRhc2hsZXNzIFwkVVNBR0UiKSIKKwllbHNlCisJCUxPTkdfVVNBR0U9IiQoZXZhbF9nZXR0ZXh0ICJ1c2FnZTogXCRkYXNobGVzcyBcJFVTQUdFCisKKyRMT05HX1VTQUdFIikiCisJZmkKKworCWNhc2UgIiQxIiBpbgorCQktaCkKKwkJZWNobyAiJExPTkdfVVNBR0UiCisJCWNhc2UgIiQwIiBpbiAqZ2l0LWxlZ2FjeS1zdGFzaCkgZXhpdCAxMjk7OyBlc2FjCisJCWV4aXQKKwllc2FjCitmaQorCisjIFNldCB0aGUgbmFtZSBvZiB0aGUgZW5kLXVzZXIgZmFjaW5nIGNvbW1hbmQgaW4gdGhlIHJlZmxvZyB3aGVuIHRoZQorIyBzY3JpcHQgbWF5IHVwZGF0ZSByZWZzLiAgV2hlbiBHSVRfUkVGTE9HX0FDVElPTiBpcyBhbHJlYWR5IHNldCwgdGhpcworIyB3aWxsIG5vdCBvdmVyd3JpdGUgaXQsIHNvIHRoYXQgYSBzY3JpcHRlZCBQb3JjZWxhaW4gKGUuZy4gImdpdAorIyByZWJhc2UiKSBjYW4gc2V0IGl0IHRvIGl0cyBvd24gbmFtZSAoZS5nLiAicmViYXNlIikgYW5kIHRoZW4gY2FsbAorIyBhbm90aGVyIHNjcmlwdGVkIFBvcmNlbGFpbiAoZS5nLiAiZ2l0IGFtIikgYW5kIGEgY2FsbCB0byB0aGlzCisjIGZ1bmN0aW9uIGluIHRoZSBsYXR0ZXIgd2lsbCBrZWVwIHRoZSBuYW1lIG9mIHRoZSBlbmQtdXNlciBmYWNpbmcKKyMgcHJvZ3JhbSAoZS5nLiAicmViYXNlIikgaW4gR0lUX1JFRkxPR19BQ1RJT04sIGVuc3VyaW5nIHdoYXRldmVyIGl0CisjIGRvZXMgd2lsbCBiZSByZWNvcmQgYXMgYWN0aW9ucyBkb25lIGFzIHBhcnQgb2YgdGhlIGVuZC11c2VyIGZhY2luZworIyBvcGVyYXRpb24gKGUuZy4gInJlYmFzZSIpLgorIworIyBOT1RFIE5PVEUgTk9URTogY29uc2VxdWVudGx5LCBhZnRlciBhc3NpZ25pbmcgYSBzcGVjaWZpYyBtZXNzYWdlIHRvCisjIEdJVF9SRUZMT0dfQUNUSU9OIHdoZW4gY2FsbGluZyBhICJnaXQiIGNvbW1hbmQgdG8gcmVjb3JkIGEgY3VzdG9tCisjIHJlZmxvZyBtZXNzYWdlLCBkbyBub3QgbGVhdmUgdGhhdCBjdXN0b20gdmFsdWUgaW4gR0lUX1JFRkxPR19BQ1RJT04sCisjIGFmdGVyIHlvdSBhcmUgZG9uZS4gIE90aGVyIGNhbGxlcnMgb2YgImdpdCIgY29tbWFuZHMgdGhhdCByZWx5IG9uCisjIHdyaXRpbmcgdGhlIGRlZmF1bHQgInByb2dyYW0gbmFtZSIgaW4gcmVmbG9nIGV4cGVjdCB0aGUgdmFyaWFibGUgdG8KKyMgY29udGFpbiB0aGUgdmFsdWUgc2V0IGJ5IHRoaXMgZnVuY3Rpb24uCisjCisjIFRvIHVzZSBhIGN1c3RvbSByZWZsb2cgbWVzc2FnZSwgZG8gZWl0aGVyIG9uZSBvZiB0aGVzZSB0aHJlZToKKyMKKyMgKGEpIHVzZSBhIHNpbmdsZS1zaG90IGV4cG9ydCBmb3JtOgorIyAgICAgR0lUX1JFRkxPR19BQ1RJT049IiRHSVRfUkVGTE9HX0FDVElPTjogcHJlcGFyaW5nIGZyb3R6IiBcCisjICAgICAgICAgZ2l0IGNvbW1hbmQtdGhhdC11cGRhdGVzLWEtcmVmCisjCisjIChiKSBzYXZlIHRoZSBvcmlnaW5hbCBhd2F5IGFuZCByZXN0b3JlOgorIyAgICAgU0FWRURfQUNUSU9OPSRHSVRfUkVGTE9HX0FDVElPTgorIyAgICAgR0lUX1JFRkxPR19BQ1RJT049IiRHSVRfUkVGTE9HX0FDVElPTjogcHJlcGFyaW5nIGZyb3R6IgorIyAgICAgZ2l0IGNvbW1hbmQtdGhhdC11cGRhdGVzLWEtcmVmCisjICAgICBHSVRfUkVGTE9HX0FDSVRPTj0kU0FWRURfQUNUSU9OCisjCisjIChjKSBhc3NpZ24gdGhlIHZhcmlhYmxlIGluIGEgc3Vic2hlbGw6CisjICAgICAoCisjICAgICAgICAgR0lUX1JFRkxPR19BQ1RJT049IiRHSVRfUkVGTE9HX0FDVElPTjogcHJlcGFyaW5nIGZyb3R6IgorIyAgICAgICAgIGdpdCBjb21tYW5kLXRoYXQtdXBkYXRlcy1hLXJlZgorIyAgICAgKQorc2V0X3JlZmxvZ19hY3Rpb24oKSB7CisJaWYgWyAteiAiJHtHSVRfUkVGTE9HX0FDVElPTjorc2V0fSIgXQorCXRoZW4KKwkJR0lUX1JFRkxPR19BQ1RJT049IiQqIgorCQlleHBvcnQgR0lUX1JFRkxPR19BQ1RJT04KKwlmaQorfQorCitnaXRfZWRpdG9yKCkgeworCWlmIHRlc3QgLXogIiR7R0lUX0VESVRPUjorc2V0fSIKKwl0aGVuCisJCUdJVF9FRElUT1I9IiQoZ2l0IHZhciBHSVRfRURJVE9SKSIgfHwgcmV0dXJuICQ/CisJZmkKKworCWV2YWwgIiRHSVRfRURJVE9SIiAnIiRAIicKK30KKworZ2l0X3BhZ2VyKCkgeworCWlmIHRlc3QgLXQgMQorCXRoZW4KKwkJR0lUX1BBR0VSPSQoZ2l0IHZhciBHSVRfUEFHRVIpCisJZWxzZQorCQlHSVRfUEFHRVI9Y2F0CisJZmkKKwlmb3IgdmFyZGVmIGluIEBAUEFHRVJfRU5WQEAKKwlkbworCQl2YXI9JHt2YXJkZWYlJT0qfQorCQlldmFsICI6IFwiXCR7JHZhcmRlZn1cIiAmJiBleHBvcnQgJHZhciIKKwlkb25lCisKKwlldmFsICIkR0lUX1BBR0VSIiAnIiRAIicKK30KKworc2FuZV9ncmVwICgpIHsKKwlHUkVQX09QVElPTlM9IExDX0FMTD1DIGdyZXAgQEBTQU5FX1RFWFRfR1JFUEBAICIkQCIKK30KKworc2FuZV9lZ3JlcCAoKSB7CisJR1JFUF9PUFRJT05TPSBMQ19BTEw9QyBlZ3JlcCBAQFNBTkVfVEVYVF9HUkVQQEAgIiRAIgorfQorCitpc19iYXJlX3JlcG9zaXRvcnkgKCkgeworCWdpdCByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnkKK30KKworY2RfdG9fdG9wbGV2ZWwgKCkgeworCWNkdXA9JChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkgJiYKKwljZCAiJGNkdXAiIHx8IHsKKwkJZ2V0dGV4dGxuICJDYW5ub3QgY2hkaXIgdG8gXCRjZHVwLCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIgPiYyCisJCWV4aXQgMQorCX0KK30KKworcmVxdWlyZV93b3JrX3RyZWVfZXhpc3RzICgpIHsKKwlpZiB0ZXN0ICJ6JChnaXQgcmV2LXBhcnNlIC0taXMtYmFyZS1yZXBvc2l0b3J5KSIgIT0gemZhbHNlCisJdGhlbgorCQlwcm9ncmFtX25hbWU9JDAKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiZmF0YWw6IFwkcHJvZ3JhbV9uYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSB3b3JraW5nIHRyZWUuIikiCisJZmkKK30KKworcmVxdWlyZV93b3JrX3RyZWUgKCkgeworCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWUgMj4vZGV2L251bGwpIiA9IHRydWUgfHwgeworCQlwcm9ncmFtX25hbWU9JDAKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiZmF0YWw6IFwkcHJvZ3JhbV9uYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSB3b3JraW5nIHRyZWUuIikiCisJfQorfQorCityZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSAoKSB7CisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4vZGV2L251bGwgfHwgZXhpdCAxCisJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaAorCWVycj0wCisKKwlpZiAhIGdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS1pZ25vcmUtc3VibW9kdWxlcworCXRoZW4KKwkJYWN0aW9uPSQxCisJCWNhc2UgIiRhY3Rpb24iIGluCisJCXJlYmFzZSkKKwkJCWdldHRleHRsbiAiQ2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iID4mMgorCQkJOzsKKwkJInJld3JpdGUgYnJhbmNoZXMiKQorCQkJZ2V0dGV4dGxuICJDYW5ub3QgcmV3cml0ZSBicmFuY2hlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iID4mMgorCQkJOzsKKwkJInB1bGwgd2l0aCByZWJhc2UiKQorCQkJZ2V0dGV4dGxuICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iID4mMgorCQkJOzsKKwkJKikKKwkJCWV2YWxfZ2V0dGV4dGxuICJDYW5ub3QgXCRhY3Rpb246IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIiA+JjIKKwkJCTs7CisJCWVzYWMKKwkJZXJyPTEKKwlmaQorCisJaWYgISBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLXF1aWV0IC0taWdub3JlLXN1Ym1vZHVsZXMgSEVBRCAtLQorCXRoZW4KKwkJaWYgdGVzdCAkZXJyID0gMAorCQl0aGVuCisJCQlhY3Rpb249JDEKKwkJCWNhc2UgIiRhY3Rpb24iIGluCisJCQlyZWJhc2UpCisJCQkJZ2V0dGV4dGxuICJDYW5ub3QgcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIiA+JjIKKwkJCQk7OworCQkJInB1bGwgd2l0aCByZWJhc2UiKQorCQkJCWdldHRleHRsbiAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iID4mMgorCQkJCTs7CisJCQkqKQorCQkJCWV2YWxfZ2V0dGV4dGxuICJDYW5ub3QgXCRhY3Rpb246IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iID4mMgorCQkJCTs7CisJCQllc2FjCisJCWVsc2UKKwkJICAgIGdldHRleHRsbiAiQWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIiA+JjIKKwkJZmkKKwkJZXJyPTEKKwlmaQorCisJaWYgdGVzdCAkZXJyID0gMQorCXRoZW4KKwkJdGVzdCAtbiAiJDIiICYmIGVjaG8gIiQyIiA+JjIKKwkJZXhpdCAxCisJZmkKK30KKworIyBHZW5lcmF0ZSBhIHNlZCBzY3JpcHQgdG8gcGFyc2UgaWRlbnRpdGllcyBmcm9tIGEgY29tbWl0LgorIworIyBSZWFkcyB0aGUgY29tbWl0IGZyb20gc3RkaW4sIHdoaWNoIHNob3VsZCBiZSBpbiByYXcgZm9ybWF0IChlLmcuLCBmcm9tCisjIGNhdC1maWxlIG9yICItLXByZXR0eT1yYXciKS4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgaWRlbnQgbGluZSB0byBwYXJzZSAoZS5nLiwgImF1dGhvciIpLCBhbmQKKyMgdGhlIHNlY29uZCBzcGVjaWZpZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHB1dCBpdCBpbiAoZS5nLiwgIkFVVEhPUiIKKyMgZm9yICJHSVRfQVVUSE9SXyoiKS4gTXVsdGlwbGUgcGFpcnMgY2FuIGJlIGdpdmVuIHRvIHBhcnNlIGF1dGhvciBhbmQKKyMgY29tbWl0dGVyLgorcGlja19pZGVudF9zY3JpcHQgKCkgeworCXdoaWxlIHRlc3QgJCMgLWd0IDAKKwlkbworCQlsaWQ9JDE7IHNoaWZ0CisJCXVpZD0kMTsgc2hpZnQKKwkJcHJpbnRmICclcycgIgorCQkvXiRsaWQgL3sKKwkJCXMvJy8nXFxcXCcnL2cKKwkJCWgKKwkJCXMvXiRsaWQgIidcKFtePF0qXCkgPFtePl0qPiAuKiQvXDEvJyIKKwkJCXMvLiovR0lUXyR7dWlkfV9OQU1FPScmJy9wCisKKwkJCWcKKwkJCXMvXiRsaWQgIidbXjxdKiA8XChbXj5dKlwpPiAuKiQvXDEvJyIKKwkJCXMvLiovR0lUXyR7dWlkfV9FTUFJTD0nJicvcAorCisJCQlnCisJCQlzL14kbGlkICInW148XSogPFtePl0qPiBcKC4qXCkkL0BcMS8nIgorCQkJcy8uKi9HSVRfJHt1aWR9X0RBVEU9JyYnL3AKKwkJfQorCQkiCisJZG9uZQorCWVjaG8gJy9eJC9xJworfQorCisjIENyZWF0ZSBhIHBpY2stc2NyaXB0IGFzIGFib3ZlIGFuZCBmZWVkIGl0IHRvIHNlZC4gU3Rkb3V0IGlzIHN1aXRhYmxlIGZvcgorIyBmZWVkaW5nIHRvIGV2YWwuCitwYXJzZV9pZGVudF9mcm9tX2NvbW1pdCAoKSB7CisJTEFORz1DIExDX0FMTD1DIHNlZCAtbmUgIiQocGlja19pZGVudF9zY3JpcHQgIiRAIikiCit9CisKKyMgUGFyc2UgdGhlIGF1dGhvciBmcm9tIGEgY29tbWl0IGdpdmVuIGFzIGFuIGFyZ3VtZW50LiBTdGRvdXQgaXMgc3VpdGFibGUgZm9yCisjIGZlZWRpbmcgdG8gZXZhbCB0byBzZXQgdGhlIHVzdWFsIEdJVF8qIGlkZW50IHZhcmlhYmxlcy4KK2dldF9hdXRob3JfaWRlbnRfZnJvbV9jb21taXQgKCkgeworCWVuY29kaW5nPSQoZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIHx8IGVjaG8gVVRGLTgpCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9cmF3IC0tZW5jb2Rpbmc9IiRlbmNvZGluZyIgIiQxIiAtLSB8CisJcGFyc2VfaWRlbnRfZnJvbV9jb21taXQgYXV0aG9yIEFVVEhPUgorfQorCisjIENsZWFyIHJlcG8tbG9jYWwgR0lUXyogZW52aXJvbm1lbnQgdmFyaWFibGVzLiBVc2VmdWwgd2hlbiBzd2l0Y2hpbmcgdG8KKyMgYW5vdGhlciByZXBvc2l0b3J5IChlLmcuIHdoZW4gZW50ZXJpbmcgYSBzdWJtb2R1bGUpLiBTZWUgYWxzbyB0aGUgZW52CisjIGxpc3QgaW4gZ2l0X2Nvbm5lY3QoKQorY2xlYXJfbG9jYWxfZ2l0X2VudigpIHsKKwl1bnNldCAkKGdpdCByZXYtcGFyc2UgLS1sb2NhbC1lbnYtdmFycykKK30KKworIyBHZW5lcmF0ZSBhIHZpcnR1YWwgYmFzZSBmaWxlIGZvciBhIHR3by1maWxlIG1lcmdlLiBVc2VzIGdpdCBhcHBseSB0bworIyByZW1vdmUgbGluZXMgZnJvbSAkMSB0aGF0IGFyZSBub3QgaW4gJDIsIGxlYXZpbmcgb25seSBjb21tb24gbGluZXMuCitjcmVhdGVfdmlydHVhbF9iYXNlKCkgeworCXN6MD0kKHdjIC1jIDwiJDEiKQorCUBARElGRkBAIC11IC1MYS8iJDEiIC1MYi8iJDEiICIkMSIgIiQyIiB8IGdpdCBhcHBseSAtLW5vLWFkZAorCXN6MT0kKHdjIC1jIDwiJDEiKQorCisJIyBJZiB3ZSBkbyBub3QgaGF2ZSBlbm91Z2ggY29tbW9uIG1hdGVyaWFsLCBpdCBpcyBub3QKKwkjIHdvcnRoIHRyeWluZyB0d28tZmlsZSBtZXJnZSB1c2luZyBjb21tb24gc3Vic2VjdGlvbnMuCisJZXhwciAkc3owIFw8ICRzejEgXCogMiA+L2Rldi9udWxsIHx8IDogPiIkMSIKK30KKworCisjIFBsYXRmb3JtIHNwZWNpZmljIHR3ZWFrcyB0byB3b3JrIGFyb3VuZCBzb21lIGNvbW1hbmRzCitjYXNlICQodW5hbWUgLXMpIGluCisqTUlOR1cqKQorCSMgV2luZG93cyBoYXMgaXRzIG93biAoaW5jb21wYXRpYmxlKSBzb3J0IGFuZCBmaW5kCisJc29ydCAoKSB7CisJCS91c3IvYmluL3NvcnQgIiRAIgorCX0KKwlmaW5kICgpIHsKKwkJL3Vzci9iaW4vZmluZCAiJEAiCisJfQorCSMgZ2l0IHNlZXMgV2luZG93cy1zdHlsZSBwd2QKKwlwd2QgKCkgeworCQlidWlsdGluIHB3ZCAtVworCX0KKwlpc19hYnNvbHV0ZV9wYXRoICgpIHsKKwkJY2FzZSAiJDEiIGluCisJCVsvXFxdKiB8IFtBLVphLXpdOiopCisJCQlyZXR1cm4gMCA7OworCQllc2FjCisJCXJldHVybiAxCisJfQorCTs7CisqKQorCWlzX2Fic29sdXRlX3BhdGggKCkgeworCQljYXNlICIkMSIgaW4KKwkJLyopCisJCQlyZXR1cm4gMCA7OworCQllc2FjCisJCXJldHVybiAxCisJfQorZXNhYworCisjIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gYSB2YWxpZCByZXBvc2l0b3J5IG9mIGEgdmludGFnZSB3ZSB1bmRlcnN0YW5kLAorIyBpZiB3ZSByZXF1aXJlIHRvIGJlIGluIGEgZ2l0IHJlcG9zaXRvcnkuCitnaXRfZGlyX2luaXQgKCkgeworCUdJVF9ESVI9JChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikgfHwgZXhpdAorCWlmIFsgLXogIiRTVUJESVJFQ1RPUllfT0siIF0KKwl0aGVuCisJCXRlc3QgLXogIiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctY2R1cCkiIHx8IHsKKwkJCWV4aXQ9JD8KKwkJCWdldHRleHRsbiAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIgPiYyCisJCQlleGl0ICRleGl0CisJCX0KKwlmaQorCXRlc3QgLW4gIiRHSVRfRElSIiAmJiBHSVRfRElSPSQoY2QgIiRHSVRfRElSIiAmJiBwd2QpIHx8IHsKKwkJZ2V0dGV4dGxuICJVbmFibGUgdG8gZGV0ZXJtaW5lIGFic29sdXRlIHBhdGggb2YgZ2l0IGRpcmVjdG9yeSIgPiYyCisJCWV4aXQgMQorCX0KKwk6ICIke0dJVF9PQkpFQ1RfRElSRUNUT1JZPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBvYmplY3RzKSJ9IgorfQorCitpZiB0ZXN0IC16ICIkTk9OR0lUX09LIgordGhlbgorCWdpdF9kaXJfaW5pdAorZmkKKworcGVlbF9jb21taXR0aXNoICgpIHsKKwljYXNlICIkMSIgaW4KKwk6LyopCisJCXBlZWx0bXA9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMSIpICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiR7cGVlbHRtcH1eMCIKKwkJOzsKKwkqKQorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkezF9XjAiCisJCTs7CisJZXNhYworfQpkaWZmIC0tZ2l0IGEvZ2l0LXN1Ym1vZHVsZS5zaCBiL2dpdC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzllYmRmMgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSwxMTYzIEBACisjIS9iaW4vc2gKKyMKKyMgZ2l0LXN1Ym1vZHVsZS5zaDogYWRkLCBpbml0LCB1cGRhdGUgb3IgbGlzdCBnaXQgc3VibW9kdWxlcworIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgTGFycyBIamVtbGkKKworZGFzaGxlc3M9JChiYXNlbmFtZSAiJDAiIHwgc2VkIC1lICdzLy0vIC8nKQorVVNBR0U9IlstLXF1aWV0XSBbLS1jYWNoZWRdCisgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBhZGQgWy1iIDxicmFuY2g+XSBbLWZ8LS1mb3JjZV0gWy0tbmFtZSA8bmFtZT5dIFstLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT5dIFstLV0gPHJlcG9zaXRvcnk+IFs8cGF0aD5dCisgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBzdGF0dXMgWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl0KKyAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIGluaXQgWy0tXSBbPHBhdGg+Li4uXQorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gZGVpbml0IFstZnwtLWZvcmNlXSAoLS1hbGx8IFstLV0gPHBhdGg+Li4uKQorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gdXBkYXRlIFstLWluaXRdIFstLXJlbW90ZV0gWy1OfC0tbm8tZmV0Y2hdIFstZnwtLWZvcmNlXSBbLS1jaGVja291dHwtLW1lcmdlfC0tcmViYXNlXSBbLS1bbm8tXXJlY29tbWVuZC1zaGFsbG93XSBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1yZWN1cnNpdmVdIFstLVtuby1dc2luZ2xlLWJyYW5jaF0gWy0tXSBbPHBhdGg+Li4uXQorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc2V0LWJyYW5jaCAoLS1kZWZhdWx0fC0tYnJhbmNoIDxicmFuY2g+KSBbLS1dIDxwYXRoPgorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc2V0LXVybCBbLS1dIDxwYXRoPiA8bmV3dXJsPgorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc3VtbWFyeSBbLS1jYWNoZWR8LS1maWxlc10gWy0tc3VtbWFyeS1saW1pdCA8bj5dIFtjb21taXRdIFstLV0gWzxwYXRoPi4uLl0KKyAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIGZvcmVhY2ggWy0tcmVjdXJzaXZlXSA8Y29tbWFuZD4KKyAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIHN5bmMgWy0tcmVjdXJzaXZlXSBbLS1dIFs8cGF0aD4uLi5dCisgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBhYnNvcmJnaXRkaXJzIFstLV0gWzxwYXRoPi4uLl0iCitPUFRJT05TX1NQRUM9CitTVUJESVJFQ1RPUllfT0s9WWVzCisuIGdpdC1zaC1zZXR1cAorLiBnaXQtcGFyc2UtcmVtb3RlCityZXF1aXJlX3dvcmtfdHJlZQord3RfcHJlZml4PSQoZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4KQorY2RfdG9fdG9wbGV2ZWwKKworIyBUZWxsIHRoZSByZXN0IG9mIGdpdCB0aGF0IGFueSBVUkxzIHdlIGdldCBkb24ndCBjb21lCisjIGRpcmVjdGx5IGZyb20gdGhlIHVzZXIsIHNvIGl0IGNhbiBhcHBseSBwb2xpY3kgYXMgYXBwcm9wcmlhdGUuCitHSVRfUFJPVE9DT0xfRlJPTV9VU0VSPTAKK2V4cG9ydCBHSVRfUFJPVE9DT0xfRlJPTV9VU0VSCisKK2NvbW1hbmQ9CiticmFuY2g9Citmb3JjZT0KK3JlZmVyZW5jZT0KK2NhY2hlZD0KK3JlY3Vyc2l2ZT0KK2luaXQ9CityZXF1aXJlX2luaXQ9CitmaWxlcz0KK3JlbW90ZT0KK25vZmV0Y2g9Cit1cGRhdGU9CitwcmVmaXg9CitjdXN0b21fbmFtZT0KK2RlcHRoPQorcHJvZ3Jlc3M9CitkaXNzb2NpYXRlPQorc2luZ2xlX2JyYW5jaD0KK2pvYnM9CityZWNvbW1lbmRfc2hhbGxvdz0KKworZGllX2lmX3VubWF0Y2hlZCAoKQoreworCWlmIHRlc3QgIiQxIiA9ICIjdW5tYXRjaGVkIgorCXRoZW4KKwkJZXhpdCAkezI6LTF9CisJZmkKK30KKworIworIyBQcmludCBhIHN1Ym1vZHVsZSBjb25maWd1cmF0aW9uIHNldHRpbmcKKyMKKyMgJDEgPSBzdWJtb2R1bGUgbmFtZQorIyAkMiA9IG9wdGlvbiBuYW1lCisjICQzID0gZGVmYXVsdCB2YWx1ZQorIworIyBDaGVja3MgaW4gdGhlIHVzdWFsIGdpdC1jb25maWcgcGxhY2VzIGZpcnN0IChmb3Igb3ZlcnJpZGVzKSwKKyMgb3RoZXJ3aXNlIGl0IGZhbGxzIGJhY2sgb24gLmdpdG1vZHVsZXMuICBUaGlzIGFsbG93cyB5b3UgdG8KKyMgZGlzdHJpYnV0ZSBwcm9qZWN0LXdpZGUgZGVmYXVsdHMgaW4gLmdpdG1vZHVsZXMsIHdoaWxlIHN0aWxsCisjIGN1c3RvbWl6aW5nIGluZGl2aWR1YWwgcmVwb3NpdG9yaWVzIGlmIG5lY2Vzc2FyeS4gIElmIHRoZSBvcHRpb24gaXMKKyMgbm90IGluIC5naXRtb2R1bGVzIGVpdGhlciwgcHJpbnQgYSBkZWZhdWx0IHZhbHVlLgorIworZ2V0X3N1Ym1vZHVsZV9jb25maWcgKCkgeworCW5hbWU9IiQxIgorCW9wdGlvbj0iJDIiCisJZGVmYXVsdD0iJDMiCisJdmFsdWU9JChnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLiIkb3B0aW9uIikKKwlpZiB0ZXN0IC16ICIkdmFsdWUiCisJdGhlbgorCQl2YWx1ZT0kKGdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIuIiRvcHRpb24iKQorCWZpCisJcHJpbnRmICclcycgIiR7dmFsdWU6LSRkZWZhdWx0fSIKK30KKworaXNudW1iZXIoKQoreworCW49JCgoJDEgKyAwKSkgMj4vZGV2L251bGwgJiYgdGVzdCAiJG4iID0gIiQxIgorfQorCisjIEdpdmVuIGEgZnVsbCBoZXggb2JqZWN0IElELCBpcyB0aGlzIHRoZSB6ZXJvIE9JRD8KK2lzX3plcm9fb2lkICgpIHsKKwllY2hvICIkMSIgfCBzYW5lX2VncmVwICdeMCskJyA+L2Rldi9udWxsIDI+JjEKK30KKworIyBTYW5pdGl6ZSB0aGUgbG9jYWwgZ2l0IGVudmlyb25tZW50IGZvciB1c2Ugd2l0aGluIGEgc3VibW9kdWxlLiBXZQorIyBjYW4ndCBzaW1wbHkgdXNlIGNsZWFyX2xvY2FsX2dpdF9lbnYgc2luY2Ugd2Ugd2FudCB0byBwcmVzZXJ2ZSBzb21lCisjIG9mIHRoZSBzZXR0aW5ncyBmcm9tIEdJVF9DT05GSUdfUEFSQU1FVEVSUy4KK3Nhbml0aXplX3N1Ym1vZHVsZV9lbnYoKQoreworCXNhdmVfY29uZmlnPSRHSVRfQ09ORklHX1BBUkFNRVRFUlMKKwljbGVhcl9sb2NhbF9naXRfZW52CisJR0lUX0NPTkZJR19QQVJBTUVURVJTPSRzYXZlX2NvbmZpZworCWV4cG9ydCBHSVRfQ09ORklHX1BBUkFNRVRFUlMKK30KKworIworIyBBZGQgYSBuZXcgc3VibW9kdWxlIHRvIHRoZSB3b3JraW5nIHRyZWUsIC5naXRtb2R1bGVzIGFuZCB0aGUgaW5kZXgKKyMKKyMgJEAgPSByZXBvIHBhdGgKKyMKKyMgb3B0aW9uYWwgYnJhbmNoIGlzIHN0b3JlZCBpbiBnbG9iYWwgYnJhbmNoIHZhcmlhYmxlCisjCitjbWRfYWRkKCkKK3sKKwkjIHBhcnNlICRhcmdzIGFmdGVyICJzdWJtb2R1bGUgLi4uIGFkZCIuCisJcmVmZXJlbmNlX3BhdGg9CisJd2hpbGUgdGVzdCAkIyAtbmUgMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktYiB8IC0tYnJhbmNoKQorCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCisJCQlicmFuY2g9JDIKKwkJCXNoaWZ0CisJCQk7OworCQktZiB8IC0tZm9yY2UpCisJCQlmb3JjZT0kMQorCQkJOzsKKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD0xCisJCQk7OworCQktLXByb2dyZXNzKQorCQkJcHJvZ3Jlc3M9MQorCQkJOzsKKwkJLS1yZWZlcmVuY2UpCisJCQljYXNlICIkMiIgaW4gJycpIHVzYWdlIDs7IGVzYWMKKwkJCXJlZmVyZW5jZV9wYXRoPSQyCisJCQlzaGlmdAorCQkJOzsKKwkJLS1yZWZlcmVuY2U9KikKKwkJCXJlZmVyZW5jZV9wYXRoPSIkezEjLS1yZWZlcmVuY2U9fSIKKwkJCTs7CisJCS0tZGlzc29jaWF0ZSkKKwkJCWRpc3NvY2lhdGU9MQorCQkJOzsKKwkJLS1uYW1lKQorCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCisJCQljdXN0b21fbmFtZT0kMgorCQkJc2hpZnQKKwkJCTs7CisJCS0tZGVwdGgpCisJCQljYXNlICIkMiIgaW4gJycpIHVzYWdlIDs7IGVzYWMKKwkJCWRlcHRoPSItLWRlcHRoPSQyIgorCQkJc2hpZnQKKwkJCTs7CisJCS0tZGVwdGg9KikKKwkJCWRlcHRoPSQxCisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhaworCQkJOzsKKwkJLSopCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJaWYgISBnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJIGRpZSAiJChldmFsX2dldHRleHQgInBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpcyBpbiB0aGUgd29ya2luZyB0cmVlIikiCisJZmkKKworCWlmIHRlc3QgLW4gIiRyZWZlcmVuY2VfcGF0aCIKKwl0aGVuCisJCWlzX2Fic29sdXRlX3BhdGggIiRyZWZlcmVuY2VfcGF0aCIgfHwKKwkJcmVmZXJlbmNlX3BhdGg9IiR3dF9wcmVmaXgkcmVmZXJlbmNlX3BhdGgiCisKKwkJcmVmZXJlbmNlPSItLXJlZmVyZW5jZT0kcmVmZXJlbmNlX3BhdGgiCisJZmkKKworCXJlcG89JDEKKwlzbV9wYXRoPSQyCisKKwlpZiB0ZXN0IC16ICIkc21fcGF0aCI7IHRoZW4KKwkJc21fcGF0aD0kKHByaW50ZiAnJXNcbicgIiRyZXBvIiB8CisJCQlzZWQgLWUgJ3N8LyR8fCcgLWUgJ3N8OiovKlwuZ2l0JHx8JyAtZSAnc3wuKlsvOl18fGcnKQorCWZpCisKKwlpZiB0ZXN0IC16ICIkcmVwbyIgfHwgdGVzdCAteiAiJHNtX3BhdGgiOyB0aGVuCisJCXVzYWdlCisJZmkKKworCWlzX2Fic29sdXRlX3BhdGggIiRzbV9wYXRoIiB8fCBzbV9wYXRoPSIkd3RfcHJlZml4JHNtX3BhdGgiCisKKwkjIGFzc3VyZSByZXBvIGlzIGFic29sdXRlIG9yIHJlbGF0aXZlIHRvIHBhcmVudAorCWNhc2UgIiRyZXBvIiBpbgorCS4vKnwuLi8qKQorCQl0ZXN0IC16ICIkd3RfcHJlZml4IiB8fAorCQlkaWUgIiQoZ2V0dGV4dCAiUmVsYXRpdmUgcGF0aCBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiKSIKKworCQkjIGRlcmVmZXJlbmNlIHNvdXJjZSB1cmwgcmVsYXRpdmUgdG8gcGFyZW50J3MgdXJsCisJCXJlYWxyZXBvPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHJlc29sdmUtcmVsYXRpdmUtdXJsICIkcmVwbyIpIHx8IGV4aXQKKwkJOzsKKwkqOip8LyopCisJCSMgYWJzb2x1dGUgdXJsCisJCXJlYWxyZXBvPSRyZXBvCisJCTs7CisJKikKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAicmVwbyBVUkw6ICdcJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iKSIKKwk7OworCWVzYWMKKworCSMgbm9ybWFsaXplIHBhdGg6CisJIyBtdWx0aXBsZSAvLzsgbGVhZGluZyAuLzsgLy4vOyAvLi4vOyB0cmFpbGluZyAvCisJc21fcGF0aD0kKHByaW50ZiAnJXMvXG4nICIkc21fcGF0aCIgfAorCQlzZWQgLWUgJworCQkJc3wvLyp8L3xnCisJCQlzfF5cKFwuL1wpKnx8CisJCQlzfC9cKFwuL1wpKnwvfGcKKwkJCTpzdGFydAorCQkJc3xcKFteL10qXCkvXC5cLi98fAorCQkJdHN0YXJ0CisJCQlzfC8qJHx8CisJCScpCisJaWYgdGVzdCAteiAiJGZvcmNlIgorCXRoZW4KKwkJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCAiJHNtX3BhdGgiID4gL2Rldi9udWxsIDI+JjEgJiYKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiJ1wkc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IikiCisJZWxzZQorCQlnaXQgbHMtZmlsZXMgLXMgIiRzbV9wYXRoIiB8IHNhbmVfZ3JlcCAtdiAiXjE2MDAwMCIgPiAvZGV2L251bGwgMj4mMSAmJgorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICInXCRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIpIgorCWZpCisKKwlpZiB0ZXN0IC1kICIkc21fcGF0aCIgJiYKKwkJdGVzdCAteiAkKGdpdCAtQyAiJHNtX3BhdGgiIHJldi1wYXJzZSAtLXNob3ctY2R1cCAyPi9kZXYvbnVsbCkKKwl0aGVuCisJICAgIGdpdCAtQyAiJHNtX3BhdGgiIHJldi1wYXJzZSAtLXZlcmlmeSAtcSBIRUFEID4vZGV2L251bGwgfHwKKwkgICAgZGllICIkKGV2YWxfZ2V0dGV4dCAiJ1wkc21fcGF0aCcgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIpIgorCWZpCisKKwlpZiB0ZXN0IC16ICIkZm9yY2UiCisJdGhlbgorCSAgICBkcnllcnI9JChnaXQgYWRkIC0tZHJ5LXJ1biAtLWlnbm9yZS1taXNzaW5nIC0tbm8td2Fybi1lbWJlZGRlZC1yZXBvICIkc21fcGF0aCIgMj4mMSA+L2Rldi9udWxsKQorCSAgICByZXM9JD8KKwkgICAgaWYgdGVzdCAkcmVzIC1uZSAwCisJICAgIHRoZW4KKwkJIGVjaG8gPiYyICIkZHJ5ZXJyIgorCQkgZXhpdCAkcmVzCisJICAgIGZpCisJZmkKKworCWlmIHRlc3QgLW4gIiRjdXN0b21fbmFtZSIKKwl0aGVuCisJCXNtX25hbWU9IiRjdXN0b21fbmFtZSIKKwllbHNlCisJCXNtX25hbWU9IiRzbV9wYXRoIgorCWZpCisKKwlpZiAhIGdpdCBzdWJtb2R1bGUtLWhlbHBlciBjaGVjay1uYW1lICIkc21fbmFtZSIKKwl0aGVuCisJCWRpZSAiJChldmFsX2dldHRleHQgIickc21fbmFtZScgaXMgbm90IGEgdmFsaWQgc3VibW9kdWxlIG5hbWUiKSIKKwlmaQorCisJIyBwZXJoYXBzIHRoZSBwYXRoIGV4aXN0cyBhbmQgaXMgYWxyZWFkeSBhIGdpdCByZXBvLCBlbHNlIGNsb25lIGl0CisJaWYgdGVzdCAtZSAiJHNtX3BhdGgiCisJdGhlbgorCQlpZiB0ZXN0IC1kICIkc21fcGF0aCIvLmdpdCB8fCB0ZXN0IC1mICIkc21fcGF0aCIvLmdpdAorCQl0aGVuCisJCQlldmFsX2dldHRleHRsbiAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJ1wkc21fcGF0aCcgdG8gdGhlIGluZGV4IgorCQllbHNlCisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICInXCRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iKSIKKwkJZmkKKworCWVsc2UKKwkJaWYgdGVzdCAtZCAiLmdpdC9tb2R1bGVzLyRzbV9uYW1lIgorCQl0aGVuCisJCQlpZiB0ZXN0IC16ICIkZm9yY2UiCisJCQl0aGVuCisJCQkJZXZhbF9nZXR0ZXh0bG4gPiYyICJBIGdpdCBkaXJlY3RvcnkgZm9yICdcJHNtX25hbWUnIGlzIGZvdW5kIGxvY2FsbHkgd2l0aCByZW1vdGUocyk6IgorCQkJCUdJVF9ESVI9Ii5naXQvbW9kdWxlcy8kc21fbmFtZSIgR0lUX1dPUktfVFJFRT0uIGdpdCByZW1vdGUgLXYgfCBncmVwICcoZmV0Y2gpJyB8IHNlZCAtZSBzLF4sIiAgIiwgLWUgcywnIChmZXRjaCknLCwgPiYyCisJCQkJZGllICIkKGV2YWxfZ2V0dGV4dGxuICJcCitJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb20KKyAgXCRyZWFscmVwbwordXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgcmVwbworb3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgb3B0aW9uLiIpIgorCQkJZWxzZQorCQkJCWV2YWxfZ2V0dGV4dGxuICJSZWFjdGl2YXRpbmcgbG9jYWwgZ2l0IGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlICdcJHNtX25hbWUnLiIKKwkJCWZpCisJCWZpCisJCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSAke0dJVF9RVUlFVDorLS1xdWlldH0gJHtwcm9ncmVzczorIi0tcHJvZ3Jlc3MifSAtLXByZWZpeCAiJHd0X3ByZWZpeCIgLS1wYXRoICIkc21fcGF0aCIgLS1uYW1lICIkc21fbmFtZSIgLS11cmwgIiRyZWFscmVwbyIgJHtyZWZlcmVuY2U6KyIkcmVmZXJlbmNlIn0gJHtkaXNzb2NpYXRlOisiLS1kaXNzb2NpYXRlIn0gJHtkZXB0aDorIiRkZXB0aCJ9IHx8IGV4aXQKKwkJKAorCQkJc2FuaXRpemVfc3VibW9kdWxlX2VudgorCQkJY2QgIiRzbV9wYXRoIiAmJgorCQkJIyBhc2ggZmFpbHMgdG8gd29yZHNwbGl0ICR7YnJhbmNoOistYiAiJGJyYW5jaCIuLi59CisJCQljYXNlICIkYnJhbmNoIiBpbgorCQkJJycpIGdpdCBjaGVja291dCAtZiAtcSA7OworCQkJPyopIGdpdCBjaGVja291dCAtZiAtcSAtQiAiJGJyYW5jaCIgIm9yaWdpbi8kYnJhbmNoIiA7OworCQkJZXNhYworCQkpIHx8IGRpZSAiJChldmFsX2dldHRleHQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJ1wkc21fcGF0aCciKSIKKwlmaQorCWdpdCBjb25maWcgc3VibW9kdWxlLiIkc21fbmFtZSIudXJsICIkcmVhbHJlcG8iCisKKwlnaXQgYWRkIC0tbm8td2Fybi1lbWJlZGRlZC1yZXBvICRmb3JjZSAiJHNtX3BhdGgiIHx8CisJZGllICIkKGV2YWxfZ2V0dGV4dCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJ1wkc21fcGF0aCciKSIKKworCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgc3VibW9kdWxlLiIkc21fbmFtZSIucGF0aCAiJHNtX3BhdGgiICYmCisJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBzdWJtb2R1bGUuIiRzbV9uYW1lIi51cmwgIiRyZXBvIiAmJgorCWlmIHRlc3QgLW4gIiRicmFuY2giCisJdGhlbgorCQlnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIHN1Ym1vZHVsZS4iJHNtX25hbWUiLmJyYW5jaCAiJGJyYW5jaCIKKwlmaSAmJgorCWdpdCBhZGQgLS1mb3JjZSAuZ2l0bW9kdWxlcyB8fAorCWRpZSAiJChldmFsX2dldHRleHQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJ1wkc21fcGF0aCciKSIKKworCSMgTkVFRFNXT1JLOiBJbiBhIG11bHRpLXdvcmtpbmctdHJlZSB3b3JsZCwgdGhpcyBuZWVkcyB0byBiZQorCSMgc2V0IGluIHRoZSBwZXItd29ya3RyZWUgY29uZmlnLgorCWlmIGdpdCBjb25maWcgLS1nZXQgc3VibW9kdWxlLmFjdGl2ZSA+L2Rldi9udWxsCisJdGhlbgorCQkjIElmIHRoZSBzdWJtb2R1bGUgYmVpbmcgYWRkaW5nIGlzbid0IGFscmVhZHkgY292ZXJlZCBieSB0aGUKKwkJIyBjdXJyZW50IGNvbmZpZ3VyZWQgcGF0aHNwZWMsIHNldCB0aGUgc3VibW9kdWxlJ3MgYWN0aXZlIGZsYWcKKwkJaWYgISBnaXQgc3VibW9kdWxlLS1oZWxwZXIgaXMtYWN0aXZlICIkc21fcGF0aCIKKwkJdGhlbgorCQkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRzbV9uYW1lIi5hY3RpdmUgInRydWUiCisJCWZpCisJZWxzZQorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJHNtX25hbWUiLmFjdGl2ZSAidHJ1ZSIKKwlmaQorfQorCisjCisjIEV4ZWN1dGUgYW4gYXJiaXRyYXJ5IGNvbW1hbmQgc2VxdWVuY2UgaW4gZWFjaCBjaGVja2VkIG91dAorIyBzdWJtb2R1bGUKKyMKKyMgJEAgPSBjb21tYW5kIHRvIGV4ZWN1dGUKKyMKK2NtZF9mb3JlYWNoKCkKK3sKKwkjIHBhcnNlICRhcmdzIGFmdGVyICJzdWJtb2R1bGUgLi4uIGZvcmVhY2giLgorCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD0xCisJCQk7OworCQktLXJlY3Vyc2l2ZSkKKwkJCXJlY3Vyc2l2ZT0xCisJCQk7OworCQktKikKKwkJCXVzYWdlCisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKKwlnaXQgJHt3dF9wcmVmaXg6Ky1DICIkd3RfcHJlZml4In0gJHtwcmVmaXg6Ky0tc3VwZXItcHJlZml4ICIkcHJlZml4In0gc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCAke0dJVF9RVUlFVDorLS1xdWlldH0gJHtyZWN1cnNpdmU6Ky0tcmVjdXJzaXZlfSAtLSAiJEAiCit9CisKKyMKKyMgUmVnaXN0ZXIgc3VibW9kdWxlcyBpbiAuZ2l0L2NvbmZpZworIworIyAkQCA9IHJlcXVlc3RlZCBwYXRocyAoZGVmYXVsdCB0byBhbGwpCisjCitjbWRfaW5pdCgpCit7CisJIyBwYXJzZSAkYXJncyBhZnRlciAic3VibW9kdWxlIC4uLiBpbml0Ii4KKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1xfC0tcXVpZXQpCisJCQlHSVRfUVVJRVQ9MQorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWdpdCAke3d0X3ByZWZpeDorLUMgIiR3dF9wcmVmaXgifSAke3ByZWZpeDorLS1zdXBlci1wcmVmaXggIiRwcmVmaXgifSBzdWJtb2R1bGUtLWhlbHBlciBpbml0ICR7R0lUX1FVSUVUOistLXF1aWV0fSAtLSAiJEAiCit9CisKKyMKKyMgVW5yZWdpc3RlciBzdWJtb2R1bGVzIGZyb20gLmdpdC9jb25maWcgYW5kIHJlbW92ZSB0aGVpciB3b3JrIHRyZWUKKyMKK2NtZF9kZWluaXQoKQoreworCSMgcGFyc2UgJGFyZ3MgYWZ0ZXIgInN1Ym1vZHVsZSAuLi4gZGVpbml0Ii4KKwlkZWluaXRfYWxsPQorCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLWZ8LS1mb3JjZSkKKwkJCWZvcmNlPSQxCisJCQk7OworCQktcXwtLXF1aWV0KQorCQkJR0lUX1FVSUVUPTEKKwkJCTs7CisJCS0tYWxsKQorCQkJZGVpbml0X2FsbD10CisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhaworCQkJOzsKKwkJLSopCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJZ2l0ICR7d3RfcHJlZml4OistQyAiJHd0X3ByZWZpeCJ9IHN1Ym1vZHVsZS0taGVscGVyIGRlaW5pdCAke0dJVF9RVUlFVDorLS1xdWlldH0gJHtwcmVmaXg6Ky0tcHJlZml4ICIkcHJlZml4In0gJHtmb3JjZTorLS1mb3JjZX0gJHtkZWluaXRfYWxsOistLWFsbH0gLS0gIiRAIgorfQorCitpc190aXBfcmVhY2hhYmxlICgpICgKKwlzYW5pdGl6ZV9zdWJtb2R1bGVfZW52ICYmCisJY2QgIiQxIiAmJgorCXJldj0kKGdpdCByZXYtbGlzdCAtbiAxICIkMiIgLS1ub3QgLS1hbGwgMj4vZGV2L251bGwpICYmCisJdGVzdCAteiAiJHJldiIKKykKKworZmV0Y2hfaW5fc3VibW9kdWxlICgpICgKKwlzYW5pdGl6ZV9zdWJtb2R1bGVfZW52ICYmCisJY2QgIiQxIiAmJgorCWNhc2UgIiQyIiBpbgorCScnKQorCQlnaXQgZmV0Y2ggOzsKKwkqKQorCQlzaGlmdAorCQlnaXQgZmV0Y2ggJChnZXRfZGVmYXVsdF9yZW1vdGUpICIkQCIgOzsKKwllc2FjCispCisKKyMKKyMgVXBkYXRlIGVhY2ggc3VibW9kdWxlIHBhdGggdG8gY29ycmVjdCByZXZpc2lvbiwgdXNpbmcgY2xvbmUgYW5kIGNoZWNrb3V0IGFzIG5lZWRlZAorIworIyAkQCA9IHJlcXVlc3RlZCBwYXRocyAoZGVmYXVsdCB0byBhbGwpCisjCitjbWRfdXBkYXRlKCkKK3sKKwkjIHBhcnNlICRhcmdzIGFmdGVyICJzdWJtb2R1bGUgLi4uIHVwZGF0ZSIuCisJd2hpbGUgdGVzdCAkIyAtbmUgMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktcXwtLXF1aWV0KQorCQkJR0lUX1FVSUVUPTEKKwkJCTs7CisJCS12KQorCQkJR0lUX1FVSUVUPTAKKwkJCTs7CisJCS0tcHJvZ3Jlc3MpCisJCQlwcm9ncmVzcz0xCisJCQk7OworCQktaXwtLWluaXQpCisJCQlpbml0PTEKKwkJCTs7CisJCS0tcmVxdWlyZS1pbml0KQorCQkJaW5pdD0xCisJCQlyZXF1aXJlX2luaXQ9MQorCQkJOzsKKwkJLS1yZW1vdGUpCisJCQlyZW1vdGU9MQorCQkJOzsKKwkJLU58LS1uby1mZXRjaCkKKwkJCW5vZmV0Y2g9MQorCQkJOzsKKwkJLWZ8LS1mb3JjZSkKKwkJCWZvcmNlPSQxCisJCQk7OworCQktcnwtLXJlYmFzZSkKKwkJCXVwZGF0ZT0icmViYXNlIgorCQkJOzsKKwkJLS1yZWZlcmVuY2UpCisJCQljYXNlICIkMiIgaW4gJycpIHVzYWdlIDs7IGVzYWMKKwkJCXJlZmVyZW5jZT0iLS1yZWZlcmVuY2U9JDIiCisJCQlzaGlmdAorCQkJOzsKKwkJLS1yZWZlcmVuY2U9KikKKwkJCXJlZmVyZW5jZT0iJDEiCisJCQk7OworCQktLWRpc3NvY2lhdGUpCisJCQlkaXNzb2NpYXRlPTEKKwkJCTs7CisJCS1tfC0tbWVyZ2UpCisJCQl1cGRhdGU9Im1lcmdlIgorCQkJOzsKKwkJLS1yZWN1cnNpdmUpCisJCQlyZWN1cnNpdmU9MQorCQkJOzsKKwkJLS1jaGVja291dCkKKwkJCXVwZGF0ZT0iY2hlY2tvdXQiCisJCQk7OworCQktLXJlY29tbWVuZC1zaGFsbG93KQorCQkJcmVjb21tZW5kX3NoYWxsb3c9Ii0tcmVjb21tZW5kLXNoYWxsb3ciCisJCQk7OworCQktLW5vLXJlY29tbWVuZC1zaGFsbG93KQorCQkJcmVjb21tZW5kX3NoYWxsb3c9Ii0tbm8tcmVjb21tZW5kLXNoYWxsb3ciCisJCQk7OworCQktLWRlcHRoKQorCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCisJCQlkZXB0aD0iLS1kZXB0aD0kMiIKKwkJCXNoaWZ0CisJCQk7OworCQktLWRlcHRoPSopCisJCQlkZXB0aD0kMQorCQkJOzsKKwkJLWp8LS1qb2JzKQorCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCisJCQlqb2JzPSItLWpvYnM9JDIiCisJCQlzaGlmdAorCQkJOzsKKwkJLS1qb2JzPSopCisJCQlqb2JzPSQxCisJCQk7OworCQktLXNpbmdsZS1icmFuY2gpCisJCQlzaW5nbGVfYnJhbmNoPSItLXNpbmdsZS1icmFuY2giCisJCQk7OworCQktLW5vLXNpbmdsZS1icmFuY2gpCisJCQlzaW5nbGVfYnJhbmNoPSItLW5vLXNpbmdsZS1icmFuY2giCisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhaworCQkJOzsKKwkJLSopCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJaWYgdGVzdCAtbiAiJGluaXQiCisJdGhlbgorCQljbWRfaW5pdCAiLS0iICIkQCIgfHwgcmV0dXJuCisJZmkKKworCXsKKwlnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lICR7R0lUX1FVSUVUOistLXF1aWV0fSBcCisJCSR7cHJvZ3Jlc3M6KyItLXByb2dyZXNzIn0gXAorCQkke3d0X3ByZWZpeDorLS1wcmVmaXggIiR3dF9wcmVmaXgifSBcCisJCSR7cHJlZml4OistLXJlY3Vyc2l2ZS1wcmVmaXggIiRwcmVmaXgifSBcCisJCSR7dXBkYXRlOistLXVwZGF0ZSAiJHVwZGF0ZSJ9IFwKKwkJJHtyZWZlcmVuY2U6KyIkcmVmZXJlbmNlIn0gXAorCQkke2Rpc3NvY2lhdGU6KyItLWRpc3NvY2lhdGUifSBcCisJCSR7ZGVwdGg6Ky0tZGVwdGggIiRkZXB0aCJ9IFwKKwkJJHtyZXF1aXJlX2luaXQ6Ky0tcmVxdWlyZS1pbml0fSBcCisJCSRzaW5nbGVfYnJhbmNoIFwKKwkJJHJlY29tbWVuZF9zaGFsbG93IFwKKwkJJGpvYnMgXAorCQktLSBcCisJCSIkQCIgfHwgZWNobyAiI3VubWF0Y2hlZCIgJD8KKwl9IHwgeworCWVycj0KKwl3aGlsZSByZWFkIC1yIHF1aWNrYWJvcnQgc2hhMSBqdXN0X2Nsb25lZCBzbV9wYXRoCisJZG8KKwkJZGllX2lmX3VubWF0Y2hlZCAiJHF1aWNrYWJvcnQiICIkc2hhMSIKKworCQlnaXQgc3VibW9kdWxlLS1oZWxwZXIgZW5zdXJlLWNvcmUtd29ya3RyZWUgIiRzbV9wYXRoIiB8fCBleGl0IDEKKworCQl1cGRhdGVfbW9kdWxlPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZS1tb2R1bGUtbW9kZSAkanVzdF9jbG9uZWQgIiRzbV9wYXRoIiAkdXBkYXRlKQorCisJCWRpc3BsYXlwYXRoPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHJlbGF0aXZlLXBhdGggIiRwcmVmaXgkc21fcGF0aCIgIiR3dF9wcmVmaXgiKQorCisJCWlmIHRlc3QgJGp1c3RfY2xvbmVkIC1lcSAxCisJCXRoZW4KKwkJCXN1YnNoYTE9CisJCWVsc2UKKwkJCXN1YnNoYTE9JChzYW5pdGl6ZV9zdWJtb2R1bGVfZW52OyBjZCAiJHNtX3BhdGgiICYmCisJCQkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSB8fAorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCciKSIKKwkJZmkKKworCQlpZiB0ZXN0IC1uICIkcmVtb3RlIgorCQl0aGVuCisJCQlicmFuY2g9JChnaXQgc3VibW9kdWxlLS1oZWxwZXIgcmVtb3RlLWJyYW5jaCAiJHNtX3BhdGgiKQorCQkJaWYgdGVzdCAteiAiJG5vZmV0Y2giCisJCQl0aGVuCisJCQkJIyBGZXRjaCByZW1vdGUgYmVmb3JlIGRldGVybWluaW5nIHRyYWNraW5nICRzaGExCisJCQkJZmV0Y2hfaW5fc3VibW9kdWxlICIkc21fcGF0aCIgJGRlcHRoIHx8CisJCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICdcJHNtX3BhdGgnIikiCisJCQlmaQorCQkJcmVtb3RlX25hbWU9JChzYW5pdGl6ZV9zdWJtb2R1bGVfZW52OyBjZCAiJHNtX3BhdGgiICYmIGdldF9kZWZhdWx0X3JlbW90ZSkKKwkJCXNoYTE9JChzYW5pdGl6ZV9zdWJtb2R1bGVfZW52OyBjZCAiJHNtX3BhdGgiICYmCisJCQkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IikgfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgXCR7cmVtb3RlX25hbWV9L1wke2JyYW5jaH0gcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJ1wkc21fcGF0aCciKSIKKwkJZmkKKworCQlpZiB0ZXN0ICIkc3Vic2hhMSIgIT0gIiRzaGExIiB8fCB0ZXN0IC1uICIkZm9yY2UiCisJCXRoZW4KKwkJCXN1YmZvcmNlPSRmb3JjZQorCQkJIyBJZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYSAtZiBmbGFnIGFuZCB0aGUgc3VibW9kdWxlIGhhcyBuZXZlciBiZWVuIGNoZWNrZWQgb3V0CisJCQlpZiB0ZXN0IC16ICIkc3Vic2hhMSIgJiYgdGVzdCAteiAiJGZvcmNlIgorCQkJdGhlbgorCQkJCXN1YmZvcmNlPSItZiIKKwkJCWZpCisKKwkJCWlmIHRlc3QgLXogIiRub2ZldGNoIgorCQkJdGhlbgorCQkJCSMgUnVuIGZldGNoIG9ubHkgaWYgJHNoYTEgaXNuJ3QgcHJlc2VudCBvciBpdAorCQkJCSMgaXMgbm90IHJlYWNoYWJsZSBmcm9tIGEgcmVmLgorCQkJCWlzX3RpcF9yZWFjaGFibGUgIiRzbV9wYXRoIiAiJHNoYTEiIHx8CisJCQkJZmV0Y2hfaW5fc3VibW9kdWxlICIkc21fcGF0aCIgJGRlcHRoIHx8CisJCQkJc2F5ICIkKGV2YWxfZ2V0dGV4dCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJzsgdHJ5aW5nIHRvIGRpcmVjdGx5IGZldGNoIFwkc2hhMToiKSIKKworCQkJCSMgTm93IHdlIHRyaWVkIHRoZSB1c3VhbCBmZXRjaCwgYnV0ICRzaGExIG1heQorCQkJCSMgbm90IGJlIHJlYWNoYWJsZSBmcm9tIGFueSBvZiB0aGUgcmVmcworCQkJCWlzX3RpcF9yZWFjaGFibGUgIiRzbV9wYXRoIiAiJHNoYTEiIHx8CisJCQkJZmV0Y2hfaW5fc3VibW9kdWxlICIkc21fcGF0aCIgJGRlcHRoICIkc2hhMSIgfHwKKwkJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJGZXRjaGVkIGluIHN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJywgYnV0IGl0IGRpZCBub3QgY29udGFpbiBcJHNoYTEuIERpcmVjdCBmZXRjaGluZyBvZiB0aGF0IGNvbW1pdCBmYWlsZWQuIikiCisJCQlmaQorCisJCQltdXN0X2RpZV9vbl9mYWlsdXJlPQorCQkJY2FzZSAiJHVwZGF0ZV9tb2R1bGUiIGluCisJCQljaGVja291dCkKKwkJCQljb21tYW5kPSJnaXQgY2hlY2tvdXQgJHN1YmZvcmNlIC1xIgorCQkJCWRpZV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gY2hlY2tvdXQgJ1wkc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnIikiCisJCQkJc2F5X21zZz0iJChldmFsX2dldHRleHQgIlN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJ1wkc2hhMSciKSIKKwkJCQk7OworCQkJcmViYXNlKQorCQkJCWNvbW1hbmQ9ImdpdCByZWJhc2UiCisJCQkJZGllX21zZz0iJChldmFsX2dldHRleHQgIlVuYWJsZSB0byByZWJhc2UgJ1wkc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnIikiCisJCQkJc2F5X21zZz0iJChldmFsX2dldHRleHQgIlN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICdcJHNoYTEnIikiCisJCQkJbXVzdF9kaWVfb25fZmFpbHVyZT15ZXMKKwkJCQk7OworCQkJbWVyZ2UpCisJCQkJY29tbWFuZD0iZ2l0IG1lcmdlIgorCQkJCWRpZV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gbWVyZ2UgJ1wkc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnIikiCisJCQkJc2F5X21zZz0iJChldmFsX2dldHRleHQgIlN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICdcJHNoYTEnIikiCisJCQkJbXVzdF9kaWVfb25fZmFpbHVyZT15ZXMKKwkJCQk7OworCQkJISopCisJCQkJY29tbWFuZD0iJHt1cGRhdGVfbW9kdWxlIyF9IgorCQkJCWRpZV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJFeGVjdXRpb24gb2YgJ1wkY29tbWFuZCBcJHNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCciKSIKKwkJCQlzYXlfbXNnPSIkKGV2YWxfZ2V0dGV4dCAiU3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnOiAnXCRjb21tYW5kIFwkc2hhMSciKSIKKwkJCQltdXN0X2RpZV9vbl9mYWlsdXJlPXllcworCQkJCTs7CisJCQkqKQorCQkJCWRpZSAiJChldmFsX2dldHRleHQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyR1cGRhdGVfbW9kdWxlJyBmb3Igc3VibW9kdWxlIHBhdGggJyRwYXRoJyIpIgorCQkJZXNhYworCisJCQlpZiAoc2FuaXRpemVfc3VibW9kdWxlX2VudjsgY2QgIiRzbV9wYXRoIiAmJiAkY29tbWFuZCAiJHNoYTEiKQorCQkJdGhlbgorCQkJCXNheSAiJHNheV9tc2ciCisJCQllbGlmIHRlc3QgLW4gIiRtdXN0X2RpZV9vbl9mYWlsdXJlIgorCQkJdGhlbgorCQkJCWRpZV93aXRoX3N0YXR1cyAyICIkZGllX21zZyIKKwkJCWVsc2UKKwkJCQllcnI9IiR7ZXJyfTskZGllX21zZyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJZmkKKworCQlpZiB0ZXN0IC1uICIkcmVjdXJzaXZlIgorCQl0aGVuCisJCQkoCisJCQkJcHJlZml4PSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHJlbGF0aXZlLXBhdGggIiRwcmVmaXgkc21fcGF0aC8iICIkd3RfcHJlZml4IikKKwkJCQl3dF9wcmVmaXg9CisJCQkJc2FuaXRpemVfc3VibW9kdWxlX2VudgorCQkJCWNkICIkc21fcGF0aCIgJiYKKwkJCQlldmFsIGNtZF91cGRhdGUKKwkJCSkKKwkJCXJlcz0kPworCQkJaWYgdGVzdCAkcmVzIC1ndCAwCisJCQl0aGVuCisJCQkJZGllX21zZz0iJChldmFsX2dldHRleHQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnIikiCisJCQkJaWYgdGVzdCAkcmVzIC1uZSAyCisJCQkJdGhlbgorCQkJCQllcnI9IiR7ZXJyfTskZGllX21zZyIKKwkJCQkJY29udGludWUKKwkJCQllbHNlCisJCQkJCWRpZV93aXRoX3N0YXR1cyAkcmVzICIkZGllX21zZyIKKwkJCQlmaQorCQkJZmkKKwkJZmkKKwlkb25lCisKKwlpZiB0ZXN0IC1uICIkZXJyIgorCXRoZW4KKwkJT0lGUz0kSUZTCisJCUlGUz0nOycKKwkJZm9yIGUgaW4gJGVycgorCQlkbworCQkJaWYgdGVzdCAtbiAiJGUiCisJCQl0aGVuCisJCQkJZWNobyA+JjIgIiRlIgorCQkJZmkKKwkJZG9uZQorCQlJRlM9JE9JRlMKKwkJZXhpdCAxCisJZmkKKwl9Cit9CisKKyMKKyMgQ29uZmlndXJlcyBhIHN1Ym1vZHVsZSdzIGRlZmF1bHQgYnJhbmNoCisjCisjICRAID0gcmVxdWVzdGVkIHBhdGgKKyMKK2NtZF9zZXRfYnJhbmNoKCkgeworCXVuc2V0X2JyYW5jaD1mYWxzZQorCWJyYW5jaD0KKworCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLXF8LS1xdWlldCkKKwkJCSMgd2UgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGlzIGJ1dCB3ZSBuZWVkIHRvIGFjY2VwdCBpdAorCQkJOzsKKwkJLWR8LS1kZWZhdWx0KQorCQkJdW5zZXRfYnJhbmNoPXRydWUKKwkJCTs7CisJCS1ifC0tYnJhbmNoKQorCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCisJCQlicmFuY2g9JDIKKwkJCXNoaWZ0CisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhaworCQkJOzsKKwkJLSopCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJaWYgdGVzdCAkIyAtbmUgMQorCXRoZW4KKwkJdXNhZ2UKKwlmaQorCisJIyB3ZSBjYW4ndCB1c2UgYGdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lYCBoZXJlIGJlY2F1c2UgaW50ZXJuYWxseSwgaXQKKwkjIGhhc2hlcyB0aGUgcGF0aCBzbyBhIHRyYWlsaW5nIHNsYXNoIGNvdWxkIGxlYWQgdG8gYW4gdW5pbnRlbnRpb25hbCBubyBtYXRjaAorCW5hbWU9IiQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgIiQxIiB8IGN1dCAtZjIpIgorCWlmIHRlc3QgLXogIiRuYW1lIgorCXRoZW4KKwkJZXhpdCAxCisJZmkKKworCXRlc3QgLW4gIiRicmFuY2giOyBoYXNfYnJhbmNoPSQ/CisJdGVzdCAiJHVuc2V0X2JyYW5jaCIgPSB0cnVlOyBoYXNfdW5zZXRfYnJhbmNoPSQ/CisKKwlpZiB0ZXN0ICQoKCEkaGFzX2JyYW5jaCAhPSAhJGhhc191bnNldF9icmFuY2gpKSAtZXEgMAorCXRoZW4KKwkJdXNhZ2UKKwlmaQorCisJaWYgdGVzdCAkaGFzX2JyYW5jaCAtZXEgMAorCXRoZW4KKwkJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi5icmFuY2ggIiRicmFuY2giCisJZWxzZQorCQlnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLiIkbmFtZSIuYnJhbmNoCisJZmkKK30KKworIworIyBDb25maWd1cmVzIGEgc3VibW9kdWxlJ3MgcmVtb3RlIHVybAorIworIyAkQCA9IHJlcXVlc3RlZCBwYXRoLCByZXF1ZXN0ZWQgdXJsCisjCitjbWRfc2V0X3VybCgpIHsKKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1xfC0tcXVpZXQpCisJCQlHSVRfUVVJRVQ9MQorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWdpdCAke3d0X3ByZWZpeDorLUMgIiR3dF9wcmVmaXgifSAke3ByZWZpeDorLS1zdXBlci1wcmVmaXggIiRwcmVmaXgifSBzdWJtb2R1bGUtLWhlbHBlciBzZXQtdXJsICR7R0lUX1FVSUVUOistLXF1aWV0fSAtLSAiJEAiCit9CisKKyMKKyMgU2hvdyBjb21taXQgc3VtbWFyeSBmb3Igc3VibW9kdWxlcyBpbiBpbmRleCBvciB3b3JraW5nIHRyZWUKKyMKKyMgSWYgJy0tY2FjaGVkJyBpcyBnaXZlbiwgc2hvdyBzdW1tYXJ5IGJldHdlZW4gaW5kZXggYW5kIGdpdmVuIGNvbW1pdCwKKyMgb3IgYmV0d2VlbiB3b3JraW5nIHRyZWUgYW5kIGdpdmVuIGNvbW1pdAorIworIyAkQCA9IFtjb21taXQgKGRlZmF1bHQgJ0hFQUQnKSxdIHJlcXVlc3RlZCBwYXRocyAoZGVmYXVsdCBhbGwpCisjCitjbWRfc3VtbWFyeSgpIHsKKwlzdW1tYXJ5X2xpbWl0PS0xCisJZm9yX3N0YXR1cz0KKwlkaWZmX2NtZD1kaWZmLWluZGV4CisKKwkjIHBhcnNlICRhcmdzIGFmdGVyICJzdWJtb2R1bGUgLi4uIHN1bW1hcnkiLgorCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLS1jYWNoZWQpCisJCQljYWNoZWQ9IiQxIgorCQkJOzsKKwkJLS1maWxlcykKKwkJCWZpbGVzPSIkMSIKKwkJCTs7CisJCS0tZm9yLXN0YXR1cykKKwkJCWZvcl9zdGF0dXM9IiQxIgorCQkJOzsKKwkJLW58LS1zdW1tYXJ5LWxpbWl0KQorCQkJc3VtbWFyeV9saW1pdD0iJDIiCisJCQlpc251bWJlciAiJHN1bW1hcnlfbGltaXQiIHx8IHVzYWdlCisJCQlzaGlmdAorCQkJOzsKKwkJLS1zdW1tYXJ5LWxpbWl0PSopCisJCQlzdW1tYXJ5X2xpbWl0PSIkezEjLS1zdW1tYXJ5LWxpbWl0PX0iCisJCQlpc251bWJlciAiJHN1bW1hcnlfbGltaXQiIHx8IHVzYWdlCisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhaworCQkJOzsKKwkJLSopCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJdGVzdCAkc3VtbWFyeV9saW1pdCA9IDAgJiYgcmV0dXJuCisKKwlpZiByZXY9JChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IC0tZGVmYXVsdCBIRUFEICR7MSsiJDEifSkKKwl0aGVuCisJCWhlYWQ9JHJldgorCQl0ZXN0ICQjID0gMCB8fCBzaGlmdAorCWVsaWYgdGVzdCAteiAiJDEiIHx8IHRlc3QgIiQxIiA9ICJIRUFEIgorCXRoZW4KKwkJIyBiZWZvcmUgdGhlIGZpcnN0IGNvbW1pdDogY29tcGFyZSB3aXRoIGFuIGVtcHR5IHRyZWUKKwkJaGVhZD0kKGdpdCBoYXNoLW9iamVjdCAtdyAtdCB0cmVlIC0tc3RkaW4gPC9kZXYvbnVsbCkKKwkJdGVzdCAteiAiJDEiIHx8IHNoaWZ0CisJZWxzZQorCQloZWFkPSJIRUFEIgorCWZpCisKKwlpZiBbIC1uICIkZmlsZXMiIF0KKwl0aGVuCisJCXRlc3QgLW4gIiRjYWNoZWQiICYmCisJCWRpZSAiJChnZXR0ZXh0ICJUaGUgLS1jYWNoZWQgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC0tZmlsZXMgb3B0aW9uIikiCisJCWRpZmZfY21kPWRpZmYtZmlsZXMKKwkJaGVhZD0KKwlmaQorCisJY2RfdG9fdG9wbGV2ZWwKKwlldmFsICJzZXQgJChnaXQgcmV2LXBhcnNlIC0tc3EgLS1wcmVmaXggIiR3dF9wcmVmaXgiIC0tICIkQCIpIgorCSMgR2V0IG1vZGlmaWVkIG1vZHVsZXMgY2FyZWQgYnkgdXNlcgorCW1vZHVsZXM9JChnaXQgJGRpZmZfY21kICRjYWNoZWQgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSAtLXJhdyAkaGVhZCAtLSAiJEAiIHwKKwkJc2FuZV9lZ3JlcCAnXjooWzAtN10qICk/MTYwMDAwJyB8CisJCXdoaWxlIHJlYWQgLXIgbW9kX3NyYyBtb2RfZHN0IHNoYTFfc3JjIHNoYTFfZHN0IHN0YXR1cyBzbV9wYXRoCisJCWRvCisJCQkjIEFsd2F5cyBzaG93IG1vZHVsZXMgZGVsZXRlZCBvciB0eXBlLWNoYW5nZWQgKGJsb2I8LT5tb2R1bGUpCisJCQlpZiB0ZXN0ICIkc3RhdHVzIiA9IEQgfHwgdGVzdCAiJHN0YXR1cyIgPSBUCisJCQl0aGVuCisJCQkJcHJpbnRmICclc1xuJyAiJHNtX3BhdGgiCisJCQkJY29udGludWUKKwkJCWZpCisJCQkjIFJlc3BlY3QgdGhlIGlnbm9yZSBzZXR0aW5nIGZvciAtLWZvci1zdGF0dXMuCisJCQlpZiB0ZXN0IC1uICIkZm9yX3N0YXR1cyIKKwkJCXRoZW4KKwkJCQluYW1lPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgIiRzbV9wYXRoIikKKwkJCQlpZ25vcmVfY29uZmlnPSQoZ2V0X3N1Ym1vZHVsZV9jb25maWcgIiRuYW1lIiBpZ25vcmUgbm9uZSkKKwkJCQl0ZXN0ICRzdGF0dXMgIT0gQSAmJiB0ZXN0ICRpZ25vcmVfY29uZmlnID0gYWxsICYmIGNvbnRpbnVlCisJCQlmaQorCQkJIyBBbHNvIHNob3cgYWRkZWQgb3IgbW9kaWZpZWQgbW9kdWxlcyB3aGljaCBhcmUgY2hlY2tlZCBvdXQKKwkJCUdJVF9ESVI9IiRzbV9wYXRoLy5naXQiIGdpdCByZXYtcGFyc2UgLS1naXQtZGlyID4vZGV2L251bGwgMj4mMSAmJgorCQkJcHJpbnRmICclc1xuJyAiJHNtX3BhdGgiCisJCWRvbmUKKwkpCisKKwl0ZXN0IC16ICIkbW9kdWxlcyIgJiYgcmV0dXJuCisKKwlnaXQgJGRpZmZfY21kICRjYWNoZWQgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSAtLXJhdyAkaGVhZCAtLSAkbW9kdWxlcyB8CisJc2FuZV9lZ3JlcCAnXjooWzAtN10qICk/MTYwMDAwJyB8CisJY3V0IC1jMi0gfAorCXdoaWxlIHJlYWQgLXIgbW9kX3NyYyBtb2RfZHN0IHNoYTFfc3JjIHNoYTFfZHN0IHN0YXR1cyBuYW1lCisJZG8KKwkJaWYgdGVzdCAteiAiJGNhY2hlZCIgJiYKKwkJCWlzX3plcm9fb2lkICRzaGExX2RzdAorCQl0aGVuCisJCQljYXNlICIkbW9kX2RzdCIgaW4KKwkJCTE2MDAwMCkKKwkJCQlzaGExX2RzdD0kKEdJVF9ESVI9IiRuYW1lLy5naXQiIGdpdCByZXYtcGFyc2UgSEVBRCkKKwkJCQk7OworCQkJMTAwNjQ0IHwgMTAwNzU1IHwgMTIwMDAwKQorCQkJCXNoYTFfZHN0PSQoZ2l0IGhhc2gtb2JqZWN0ICRuYW1lKQorCQkJCTs7CisJCQkwMDAwMDApCisJCQkJOzsgIyByZW1vdmVkCisJCQkqKQorCQkJCSMgdW5leHBlY3RlZCB0eXBlCisJCQkJZXZhbF9nZXR0ZXh0bG4gInVuZXhwZWN0ZWQgbW9kZSBcJG1vZF9kc3QiID4mMgorCQkJCWNvbnRpbnVlIDs7CisJCQllc2FjCisJCWZpCisJCW1pc3Npbmdfc3JjPQorCQltaXNzaW5nX2RzdD0KKworCQl0ZXN0ICRtb2Rfc3JjID0gMTYwMDAwICYmCisJCSEgR0lUX0RJUj0iJG5hbWUvLmdpdCIgZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAkc2hhMV9zcmNeMCA+L2Rldi9udWxsICYmCisJCW1pc3Npbmdfc3JjPXQKKworCQl0ZXN0ICRtb2RfZHN0ID0gMTYwMDAwICYmCisJCSEgR0lUX0RJUj0iJG5hbWUvLmdpdCIgZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAkc2hhMV9kc3ReMCA+L2Rldi9udWxsICYmCisJCW1pc3NpbmdfZHN0PXQKKworCQlkaXNwbGF5X25hbWU9JChnaXQgc3VibW9kdWxlLS1oZWxwZXIgcmVsYXRpdmUtcGF0aCAiJG5hbWUiICIkd3RfcHJlZml4IikKKworCQl0b3RhbF9jb21taXRzPQorCQljYXNlICIkbWlzc2luZ19zcmMsJG1pc3NpbmdfZHN0IiBpbgorCQl0LCkKKwkJCWVycm1zZz0iJChldmFsX2dldHRleHQgIiAgV2FybjogXCRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCBcJHNoYTFfc3JjIikiCisJCQk7OworCQksdCkKKwkJCWVycm1zZz0iJChldmFsX2dldHRleHQgIiAgV2FybjogXCRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCBcJHNoYTFfZHN0IikiCisJCQk7OworCQl0LHQpCisJCQllcnJtc2c9IiQoZXZhbF9nZXR0ZXh0ICIgIFdhcm46IFwkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzIFwkc2hhMV9zcmMgYW5kIFwkc2hhMV9kc3QiKSIKKwkJCTs7CisJCSopCisJCQllcnJtc2c9CisJCQl0b3RhbF9jb21taXRzPSQoCisJCQlpZiB0ZXN0ICRtb2Rfc3JjID0gMTYwMDAwICYmIHRlc3QgJG1vZF9kc3QgPSAxNjAwMDAKKwkJCXRoZW4KKwkJCQlyYW5nZT0iJHNoYTFfc3JjLi4uJHNoYTFfZHN0IgorCQkJZWxpZiB0ZXN0ICRtb2Rfc3JjID0gMTYwMDAwCisJCQl0aGVuCisJCQkJcmFuZ2U9JHNoYTFfc3JjCisJCQllbHNlCisJCQkJcmFuZ2U9JHNoYTFfZHN0CisJCQlmaQorCQkJR0lUX0RJUj0iJG5hbWUvLmdpdCIgXAorCQkJZ2l0IHJldi1saXN0IC0tZmlyc3QtcGFyZW50ICRyYW5nZSAtLSB8IHdjIC1sCisJCQkpCisJCQl0b3RhbF9jb21taXRzPSIgKCQoKCR0b3RhbF9jb21taXRzICsgMCkpKSIKKwkJCTs7CisJCWVzYWMKKworCQlzaGExX2FiYnJfc3JjPSQoR0lUX0RJUj0iJG5hbWUvLmdpdCIgZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRzaGExX3NyYyAyPi9kZXYvbnVsbCB8fAorCQkJZWNobyAkc2hhMV9zcmMgfCBjdXQgLWMxLTcpCisJCXNoYTFfYWJicl9kc3Q9JChHSVRfRElSPSIkbmFtZS8uZ2l0IiBnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJHNoYTFfZHN0IDI+L2Rldi9udWxsIHx8CisJCQllY2hvICRzaGExX2RzdCB8IGN1dCAtYzEtNykKKworCQlpZiB0ZXN0ICRzdGF0dXMgPSBUCisJCXRoZW4KKwkJCWJsb2I9IiQoZ2V0dGV4dCAiYmxvYiIpIgorCQkJc3VibW9kdWxlPSIkKGdldHRleHQgInN1Ym1vZHVsZSIpIgorCQkJaWYgdGVzdCAkbW9kX2RzdCA9IDE2MDAwMAorCQkJdGhlbgorCQkJCWVjaG8gIiogJGRpc3BsYXlfbmFtZSAkc2hhMV9hYmJyX3NyYygkYmxvYiktPiRzaGExX2FiYnJfZHN0KCRzdWJtb2R1bGUpJHRvdGFsX2NvbW1pdHM6IgorCQkJZWxzZQorCQkJCWVjaG8gIiogJGRpc3BsYXlfbmFtZSAkc2hhMV9hYmJyX3NyYygkc3VibW9kdWxlKS0+JHNoYTFfYWJicl9kc3QoJGJsb2IpJHRvdGFsX2NvbW1pdHM6IgorCQkJZmkKKwkJZWxzZQorCQkJZWNobyAiKiAkZGlzcGxheV9uYW1lICRzaGExX2FiYnJfc3JjLi4uJHNoYTFfYWJicl9kc3QkdG90YWxfY29tbWl0czoiCisJCWZpCisJCWlmIHRlc3QgLW4gIiRlcnJtc2ciCisJCXRoZW4KKwkJCSMgRG9uJ3QgZ2l2ZSBlcnJvciBtc2cgZm9yIG1vZGlmaWNhdGlvbiB3aG9zZSBkc3QgaXMgbm90IHN1Ym1vZHVsZQorCQkJIyBpLmUuIGRlbGV0ZWQgb3IgY2hhbmdlZCB0byBibG9iCisJCQl0ZXN0ICRtb2RfZHN0ID0gMTYwMDAwICYmIGVjaG8gIiRlcnJtc2ciCisJCWVsc2UKKwkJCWlmIHRlc3QgJG1vZF9zcmMgPSAxNjAwMDAgJiYgdGVzdCAkbW9kX2RzdCA9IDE2MDAwMAorCQkJdGhlbgorCQkJCWxpbWl0PQorCQkJCXRlc3QgJHN1bW1hcnlfbGltaXQgLWd0IDAgJiYgbGltaXQ9Ii0kc3VtbWFyeV9saW1pdCIKKwkJCQlHSVRfRElSPSIkbmFtZS8uZ2l0IiBcCisJCQkJZ2l0IGxvZyAkbGltaXQgLS1wcmV0dHk9J2Zvcm1hdDogICVtICVzJyBcCisJCQkJLS1maXJzdC1wYXJlbnQgJHNoYTFfc3JjLi4uJHNoYTFfZHN0CisJCQllbGlmIHRlc3QgJG1vZF9kc3QgPSAxNjAwMDAKKwkJCXRoZW4KKwkJCQlHSVRfRElSPSIkbmFtZS8uZ2l0IiBcCisJCQkJZ2l0IGxvZyAtLXByZXR0eT0nZm9ybWF0OiAgPiAlcycgLTEgJHNoYTFfZHN0CisJCQllbHNlCisJCQkJR0lUX0RJUj0iJG5hbWUvLmdpdCIgXAorCQkJCWdpdCBsb2cgLS1wcmV0dHk9J2Zvcm1hdDogIDwgJXMnIC0xICRzaGExX3NyYworCQkJZmkKKwkJCWVjaG8KKwkJZmkKKwkJZWNobworCWRvbmUKK30KKyMKKyMgTGlzdCBhbGwgc3VibW9kdWxlcywgcHJlZml4ZWQgd2l0aDoKKyMgIC0gc3VibW9kdWxlIG5vdCBpbml0aWFsaXplZAorIyAgKyBkaWZmZXJlbnQgcmV2aXNpb24gY2hlY2tlZCBvdXQKKyMKKyMgSWYgLS1jYWNoZWQgd2FzIHNwZWNpZmllZCB0aGUgcmV2aXNpb24gaW4gdGhlIGluZGV4IHdpbGwgYmUgcHJpbnRlZAorIyBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQgcmV2aXNpb24uCisjCisjICRAID0gcmVxdWVzdGVkIHBhdGhzIChkZWZhdWx0IHRvIGFsbCkKKyMKK2NtZF9zdGF0dXMoKQoreworCSMgcGFyc2UgJGFyZ3MgYWZ0ZXIgInN1Ym1vZHVsZSAuLi4gc3RhdHVzIi4KKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1xfC0tcXVpZXQpCisJCQlHSVRfUVVJRVQ9MQorCQkJOzsKKwkJLS1jYWNoZWQpCisJCQljYWNoZWQ9MQorCQkJOzsKKwkJLS1yZWN1cnNpdmUpCisJCQlyZWN1cnNpdmU9MQorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWdpdCAke3d0X3ByZWZpeDorLUMgIiR3dF9wcmVmaXgifSAke3ByZWZpeDorLS1zdXBlci1wcmVmaXggIiRwcmVmaXgifSBzdWJtb2R1bGUtLWhlbHBlciBzdGF0dXMgJHtHSVRfUVVJRVQ6Ky0tcXVpZXR9ICR7Y2FjaGVkOistLWNhY2hlZH0gJHtyZWN1cnNpdmU6Ky0tcmVjdXJzaXZlfSAtLSAiJEAiCit9CisjCisjIFN5bmMgcmVtb3RlIHVybHMgZm9yIHN1Ym1vZHVsZXMKKyMgVGhpcyBtYWtlcyB0aGUgdmFsdWUgZm9yIHJlbW90ZS4kcmVtb3RlLnVybCBtYXRjaCB0aGUgdmFsdWUKKyMgc3BlY2lmaWVkIGluIC5naXRtb2R1bGVzLgorIworY21kX3N5bmMoKQoreworCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD0xCisJCQlzaGlmdAorCQkJOzsKKwkJLS1yZWN1cnNpdmUpCisJCQlyZWN1cnNpdmU9MQorCQkJc2hpZnQKKwkJCTs7CisJCS0tKQorCQkJc2hpZnQKKwkJCWJyZWFrCisJCQk7OworCQktKikKKwkJCXVzYWdlCisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwlkb25lCisKKwlnaXQgJHt3dF9wcmVmaXg6Ky1DICIkd3RfcHJlZml4In0gJHtwcmVmaXg6Ky0tc3VwZXItcHJlZml4ICIkcHJlZml4In0gc3VibW9kdWxlLS1oZWxwZXIgc3luYyAke0dJVF9RVUlFVDorLS1xdWlldH0gJHtyZWN1cnNpdmU6Ky0tcmVjdXJzaXZlfSAtLSAiJEAiCit9CisKK2NtZF9hYnNvcmJnaXRkaXJzKCkKK3sKKwlnaXQgc3VibW9kdWxlLS1oZWxwZXIgYWJzb3JiLWdpdC1kaXJzIC0tcHJlZml4ICIkd3RfcHJlZml4IiAiJEAiCit9CisKKyMgVGhpcyBsb29wIHBhcnNlcyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBmaW5kIHRoZQorIyBzdWJjb21tYW5kIG5hbWUgdG8gZGlzcGF0Y2guICBQYXJzaW5nIG9mIHRoZSBzdWJjb21tYW5kIHNwZWNpZmljCisjIG9wdGlvbnMgYXJlIHByaW1hcmlseSBkb25lIGJ5IHRoZSBzdWJjb21tYW5kIGltcGxlbWVudGF0aW9ucy4KKyMgU3ViY29tbWFuZCBzcGVjaWZpYyBvcHRpb25zIHN1Y2ggYXMgLS1icmFuY2ggYW5kIC0tY2FjaGVkIGFyZQorIyBwYXJzZWQgaGVyZSBhcyB3ZWxsLCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKword2hpbGUgdGVzdCAkIyAhPSAwICYmIHRlc3QgLXogIiRjb21tYW5kIgorZG8KKwljYXNlICIkMSIgaW4KKwlhZGQgfCBmb3JlYWNoIHwgaW5pdCB8IGRlaW5pdCB8IHVwZGF0ZSB8IHNldC1icmFuY2ggfCBzZXQtdXJsIHwgc3RhdHVzIHwgc3VtbWFyeSB8IHN5bmMgfCBhYnNvcmJnaXRkaXJzKQorCQljb21tYW5kPSQxCisJCTs7CisJLXF8LS1xdWlldCkKKwkJR0lUX1FVSUVUPTEKKwkJOzsKKwktYnwtLWJyYW5jaCkKKwkJY2FzZSAiJDIiIGluCisJCScnKQorCQkJdXNhZ2UKKwkJCTs7CisJCWVzYWMKKwkJYnJhbmNoPSIkMiI7IHNoaWZ0CisJCTs7CisJLS1jYWNoZWQpCisJCWNhY2hlZD0iJDEiCisJCTs7CisJLS0pCisJCWJyZWFrCisJCTs7CisJLSopCisJCXVzYWdlCisJCTs7CisJKikKKwkJYnJlYWsKKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKworIyBObyBjb21tYW5kIHdvcmQgZGVmYXVsdHMgdG8gInN0YXR1cyIKK2lmIHRlc3QgLXogIiRjb21tYW5kIgordGhlbgorICAgIGlmIHRlc3QgJCMgPSAwCisgICAgdGhlbgorCWNvbW1hbmQ9c3RhdHVzCisgICAgZWxzZQorCXVzYWdlCisgICAgZmkKK2ZpCisKKyMgIi1iIGJyYW5jaCIgaXMgYWNjZXB0ZWQgb25seSBieSAiYWRkIiBhbmQgInNldC1icmFuY2giCitpZiB0ZXN0IC1uICIkYnJhbmNoIiAmJiAodGVzdCAiJGNvbW1hbmQiICE9IGFkZCB8fCB0ZXN0ICIkY29tbWFuZCIgIT0gc2V0LWJyYW5jaCkKK3RoZW4KKwl1c2FnZQorZmkKKworIyAiLS1jYWNoZWQiIGlzIGFjY2VwdGVkIG9ubHkgYnkgInN0YXR1cyIgYW5kICJzdW1tYXJ5IgoraWYgdGVzdCAtbiAiJGNhY2hlZCIgJiYgdGVzdCAiJGNvbW1hbmQiICE9IHN0YXR1cyAmJiB0ZXN0ICIkY29tbWFuZCIgIT0gc3VtbWFyeQordGhlbgorCXVzYWdlCitmaQorCisiY21kXyQoZWNobyAkY29tbWFuZCB8IHNlZCAtZSBzLy0vXy9nKSIgIiRAIgpkaWZmIC0tZ2l0IGEvZ2l0LXN2bi5wZXJsIGIvZ2l0LXN2bi5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRhYTIwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtc3ZuLnBlcmwKQEAgLTAsMCArMSwyMjQxIEBACisjIS91c3IvYmluL3BlcmwKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCBFcmljIFdvbmcgPG5vcm1hbHBlcnNvbkB5aGJ0Lm5ldD4KKyMgTGljZW5zZTogR1BMIHYyIG9yIGxhdGVyCit1c2UgNS4wMDg7Cit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OwordXNlIHZhcnMgcXcvCSRBVVRIT1IgJFZFUlNJT04KKwkJJHNoYTEgJHNoYTFfc2hvcnQgJF9yZXZpc2lvbiAkX3JlcG9zaXRvcnkKKwkJJF9xICRfYXV0aG9ycyAkX2F1dGhvcnNfcHJvZyAldXNlcnMvOworJEFVVEhPUiA9ICdFcmljIFdvbmcgPG5vcm1hbHBlcnNvbkB5aGJ0Lm5ldD4nOworJFZFUlNJT04gPSAnQEBHSVRfVkVSU0lPTkBAJzsKKwordXNlIENhcnAgcXcvY3JvYWsvOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3L2Rpcm5hbWUgYmFzZW5hbWUvOwordXNlIEZpbGU6OlBhdGggcXcvbWtwYXRoLzsKK3VzZSBGaWxlOjpTcGVjOwordXNlIEdldG9wdDo6TG9uZyBxdy86Y29uZmlnIGdudV9nZXRvcHQgbm9faWdub3JlX2Nhc2UgYXV0b19hYmJyZXYvOwordXNlIE1lbW9pemU7CisKK3VzZSBHaXQ6OlNWTjsKK3VzZSBHaXQ6OlNWTjo6RWRpdG9yOwordXNlIEdpdDo6U1ZOOjpGZXRjaGVyOwordXNlIEdpdDo6U1ZOOjpSYTsKK3VzZSBHaXQ6OlNWTjo6UHJvbXB0OwordXNlIEdpdDo6U1ZOOjpMb2c7Cit1c2UgR2l0OjpTVk46Ok1pZ3JhdGlvbjsKKwordXNlIEdpdDo6U1ZOOjpVdGlscyBxdygKKwlmYXRhbAorCWNhbl9jb21wcmVzcworCWNhbm9uaWNhbGl6ZV9wYXRoCisJY2Fub25pY2FsaXplX3VybAorCWpvaW5fcGF0aHMKKwlhZGRfcGF0aF90b191cmwKKwlqb2luX3BhdGhzCispOworCit1c2UgR2l0IHF3KAorCWdpdF9jbWRfdHJ5CisJY29tbWFuZAorCWNvbW1hbmRfb25lbGluZQorCWNvbW1hbmRfbm9pc3kKKwljb21tYW5kX291dHB1dF9waXBlCisJY29tbWFuZF9jbG9zZV9waXBlCisJY29tbWFuZF9iaWRpX3BpcGUKKwljb21tYW5kX2Nsb3NlX2JpZGlfcGlwZQorCWdldF9yZWNvcmQKKyk7CisKK0JFR0lOIHsKKwlNZW1vaXplOjptZW1vaXplICdHaXQ6OmNvbmZpZyc7CisJTWVtb2l6ZTo6bWVtb2l6ZSAnR2l0Ojpjb25maWdfYm9vbCc7Cit9CisKKworIyBGcm9tIHdoaWNoIHN1YmRpciBoYXZlIHdlIGJlZW4gaW52b2tlZD8KK215ICRjbWRfZGlyX3ByZWZpeCA9IGV2YWwgeworCWNvbW1hbmRfb25lbGluZShbcXcvcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgvXSwgU1RERVJSID0+IDApCit9IHx8ICcnOworCiskR2l0OjpTVk46OlJhOjpfbG9nX3dpbmRvd19zaXplID0gMTAwOworCitpZiAoISBleGlzdHMgJEVOVntTVk5fU1NIfSAmJiBleGlzdHMgJEVOVntHSVRfU1NIfSkgeworCSRFTlZ7U1ZOX1NTSH0gPSAkRU5We0dJVF9TU0h9OworfQorCitpZiAoZXhpc3RzICRFTlZ7U1ZOX1NTSH0gJiYgJF5PIGVxICdtc3lzJykgeworCSRFTlZ7U1ZOX1NTSH0gPX4gcy9cXC9cXFxcL2c7CisJJEVOVntTVk5fU1NIfSA9fiBzLyguKikvIiQxIi87Cit9CisKKyRHaXQ6OlNWTjo6TG9nOjpUWiA9ICRFTlZ7VFp9OworJEVOVntUWn0gPSAnVVRDJzsKKyR8ID0gMTsgIyB1bmJ1ZmZlciBTVERPVVQKKworIyBBbGwgU1ZOIGNvbW1hbmRzIGRvIGl0LiAgT3RoZXJ3aXNlIHdlIG1heSBkaWUgb24gU0lHUElQRSB3aGVuIHRoZSByZW1vdGUKKyMgcmVwb3NpdG9yeSBkZWNpZGVzIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIHdoaWNoIHdlIGV4cGVjdCB0byBiZSBrZXB0IGFsaXZlLgorJFNJR3tQSVBFfSA9ICdJR05PUkUnOworCisjIEdpdmVuIGEgZG90IHNlcGFyYXRlZCB2ZXJzaW9uIG51bWJlciwgInN1YnRyYWN0IiBpdCBmcm9tCisjIHRoZSBTVk46OkNvcmU6OlZFUlNJT047IG5vbi1uZWdhaXRpdmUgcmV0dXJuIG1lYW5zIHRoZSBTVk46OkNvcmUKKyMgaXMgYXQgbGVhc3QgYXQgdGhlIHZlcnNpb24gdGhlIGNhbGxlciBhc2tlZCBmb3IuCitzdWIgY29tcGFyZV9zdm5fdmVyc2lvbiB7CisJbXkgKEBvdXJzKSA9IHNwbGl0KC9cLi8sICRTVk46OkNvcmU6OlZFUlNJT04pOworCW15IChAdGhlaXJzKSA9IHNwbGl0KC9cLi8sICRfWzBdKTsKKwlteSAoJGksICRkaWZmKTsKKworCWZvciAoJGkgPSAwOyAkaSA8IEBvdXJzICYmICRpIDwgQHRoZWlyczsgJGkrKykgeworCQkkZGlmZiA9ICRvdXJzWyRpXSAtICR0aGVpcnNbJGldOworCQlyZXR1cm4gJGRpZmYgaWYgKCRkaWZmKTsKKwl9CisJcmV0dXJuIDEgaWYgKCRpIDwgQG91cnMpOworCXJldHVybiAtMSBpZiAoJGkgPCBAdGhlaXJzKTsKKwlyZXR1cm4gMDsKK30KKworc3ViIF9yZXFfc3ZuIHsKKwlyZXF1aXJlIFNWTjo6Q29yZTsgIyB1c2UoKS1pbmcgdGhpcyBjYXVzZXMgc2VnZmF1bHRzIGZvciBtZS4uLiAqc2hydWcqCisJcmVxdWlyZSBTVk46OlJhOworCXJlcXVpcmUgU1ZOOjpEZWx0YTsKKwlpZiAoOjpjb21wYXJlX3N2bl92ZXJzaW9uKCcxLjEuMCcpIDwgMCkgeworCQlmYXRhbCAiTmVlZCBTVk46OkNvcmUgMS4xLjAgb3IgYmV0dGVyIChnb3QgJFNWTjo6Q29yZTo6VkVSU0lPTikiOworCX0KK30KKworJHNoYTEgPSBxci9bYS1mXGRdezQwfS87Ciskc2hhMV9zaG9ydCA9IHFyL1thLWZcZF17NCw0MH0vOworbXkgKCRfc3RkaW4sICRfaGVscCwgJF9lZGl0LAorCSRfbWVzc2FnZSwgJF9maWxlLCAkX2JyYW5jaF9kZXN0LAorCSRfdGVtcGxhdGUsICRfc2hhcmVkLAorCSRfdmVyc2lvbiwgJF9mZXRjaF9hbGwsICRfbm9fcmViYXNlLCAkX2ZldGNoX3BhcmVudCwKKwkkX2JlZm9yZSwgJF9hZnRlciwKKwkkX21lcmdlLCAkX3N0cmF0ZWd5LCAkX3JlYmFzZV9tZXJnZXMsICRfZHJ5X3J1biwgJF9wYXJlbnRzLCAkX2xvY2FsLAorCSRfcHJlZml4LCAkX25vX2NoZWNrb3V0LCAkX3VybCwgJF92ZXJib3NlLAorCSRfY29tbWl0X3VybCwgJF90YWcsICRfbWVyZ2VfaW5mbywgJF9pbnRlcmFjdGl2ZSwgJF9zZXRfc3ZuX3Byb3BzKTsKKworIyBUaGlzIGlzIGEgcmVmYWN0b3JpbmcgYXJ0aWZhY3Qgc28gR2l0OjpTVk4gY2FuIGdldCBhdCB0aGlzIGdpdC1zdm4gc3dpdGNoLgorc3ViIG9wdF9wcmVmaXggeyByZXR1cm4gJF9wcmVmaXggfHwgJycgfQorCiskR2l0OjpTVk46OkZldGNoZXI6Ol9wbGFjZWhvbGRlcl9maWxlbmFtZSA9ICIuZ2l0aWdub3JlIjsKKyRfcSB8fD0gMDsKK215ICVyZW1vdGVfb3B0cyA9ICggJ3VzZXJuYW1lPXMnID0+IFwkR2l0OjpTVk46OlByb21wdDo6X3VzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAnY29uZmlnLWRpcj1zJyA9PiBcJEdpdDo6U1ZOOjpSYTo6Y29uZmlnX2RpciwKKyAgICAgICAgICAgICAgICAgICAgJ25vLWF1dGgtY2FjaGUnID0+IFwkR2l0OjpTVk46OlByb21wdDo6X25vX2F1dGhfY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICdpZ25vcmUtcGF0aHM9cycgPT4gXCRHaXQ6OlNWTjo6RmV0Y2hlcjo6X2lnbm9yZV9yZWdleCwKKyAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGUtcGF0aHM9cycgPT4gXCRHaXQ6OlNWTjo6RmV0Y2hlcjo6X2luY2x1ZGVfcmVnZXgsCisgICAgICAgICAgICAgICAgICAgICdpZ25vcmUtcmVmcz1zJyA9PiBcJEdpdDo6U1ZOOjpSYTo6X2lnbm9yZV9yZWZzX3JlZ2V4ICk7CitteSAlZmNfb3B0cyA9ICggJ2ZvbGxvdy1wYXJlbnR8Zm9sbG93IScgPT4gXCRHaXQ6OlNWTjo6X2ZvbGxvd19wYXJlbnQsCisJCSdhdXRob3JzLWZpbGV8QT1zJyA9PiBcJF9hdXRob3JzLAorCQknYXV0aG9ycy1wcm9nPXMnID0+IFwkX2F1dGhvcnNfcHJvZywKKwkJJ3JlcGFjazppJyA9PiBcJEdpdDo6U1ZOOjpfcmVwYWNrLAorCQknbm9NZXRhZGF0YScgPT4gXCRHaXQ6OlNWTjo6X25vX21ldGFkYXRhLAorCQkndXNlU3ZtUHJvcHMnID0+IFwkR2l0OjpTVk46Ol91c2Vfc3ZtX3Byb3BzLAorCQkndXNlU3Zuc3luY1Byb3BzJyA9PiBcJEdpdDo6U1ZOOjpfdXNlX3N2bnN5bmNfcHJvcHMsCisJCSdsb2ctd2luZG93LXNpemU9aScgPT4gXCRHaXQ6OlNWTjo6UmE6Ol9sb2dfd2luZG93X3NpemUsCisJCSduby1jaGVja291dCcgPT4gXCRfbm9fY2hlY2tvdXQsCisJCSdxdWlldHxxKycgPT4gXCRfcSwKKwkJJ3JlcGFjay1mbGFnc3xyZXBhY2stYXJnc3xyZXBhY2stb3B0cz1zJyA9PgorCQkgICBcJEdpdDo6U1ZOOjpfcmVwYWNrX2ZsYWdzLAorCQkndXNlLWxvZy1hdXRob3InID0+IFwkR2l0OjpTVk46Ol91c2VfbG9nX2F1dGhvciwKKwkJJ2FkZC1hdXRob3ItZnJvbScgPT4gXCRHaXQ6OlNWTjo6X2FkZF9hdXRob3JfZnJvbSwKKwkJJ2xvY2FsdGltZScgPT4gXCRHaXQ6OlNWTjo6X2xvY2FsdGltZSwKKwkJJXJlbW90ZV9vcHRzICk7CisKK215ICgkX3RydW5rLCBAX3RhZ3MsIEBfYnJhbmNoZXMsICRfc3RkbGF5b3V0KTsKK215ICVpY3Y7CitteSAlaW5pdF9vcHRzID0gKCAndGVtcGxhdGU9cycgPT4gXCRfdGVtcGxhdGUsICdzaGFyZWQ6cycgPT4gXCRfc2hhcmVkLAorICAgICAgICAgICAgICAgICAgJ3RydW5rfFQ9cycgPT4gXCRfdHJ1bmssICd0YWdzfHQ9c0AnID0+IFxAX3RhZ3MsCisgICAgICAgICAgICAgICAgICAnYnJhbmNoZXN8Yj1zQCcgPT4gXEBfYnJhbmNoZXMsICdwcmVmaXg9cycgPT4gXCRfcHJlZml4LAorICAgICAgICAgICAgICAgICAgJ3N0ZGxheW91dHxzJyA9PiBcJF9zdGRsYXlvdXQsCisgICAgICAgICAgICAgICAgICAnbWluaW1pemUtdXJsfG0hJyA9PiBcJEdpdDo6U1ZOOjpfbWluaW1pemVfdXJsLAorCQkgICduby1tZXRhZGF0YScgPT4gc3ViIHsgJGljdntub01ldGFkYXRhfSA9IDEgfSwKKwkJICAndXNlLXN2bS1wcm9wcycgPT4gc3ViIHsgJGljdnt1c2VTdm1Qcm9wc30gPSAxIH0sCisJCSAgJ3VzZS1zdm5zeW5jLXByb3BzJyA9PiBzdWIgeyAkaWN2e3VzZVN2bnN5bmNQcm9wc30gPSAxIH0sCisJCSAgJ3Jld3JpdGUtcm9vdD1zJyA9PiBzdWIgeyAkaWN2e3Jld3JpdGVSb290fSA9ICRfWzFdIH0sCisJCSAgJ3Jld3JpdGUtdXVpZD1zJyA9PiBzdWIgeyAkaWN2e3Jld3JpdGVVVUlEfSA9ICRfWzFdIH0sCisgICAgICAgICAgICAgICAgICAlcmVtb3RlX29wdHMgKTsKK215ICVjbXRfb3B0cyA9ICggJ2VkaXR8ZScgPT4gXCRfZWRpdCwKKwkJJ3JtZGlyJyA9PiBcJEdpdDo6U1ZOOjpFZGl0b3I6Ol9ybWRpciwKKwkJJ2ZpbmQtY29waWVzLWhhcmRlcicgPT4gXCRHaXQ6OlNWTjo6RWRpdG9yOjpfZmluZF9jb3BpZXNfaGFyZGVyLAorCQknbD1pJyA9PiBcJEdpdDo6U1ZOOjpFZGl0b3I6Ol9yZW5hbWVfbGltaXQsCisJCSdjb3B5LXNpbWlsYXJpdHl8Qz1pJz0+IFwkR2l0OjpTVk46OkVkaXRvcjo6X2NwX3NpbWlsYXJpdHkKKyk7CisKK215ICVjbWQgPSAoCisJZmV0Y2ggPT4gWyBcJmNtZF9mZXRjaCwgIkRvd25sb2FkIG5ldyByZXZpc2lvbnMgZnJvbSBTVk4iLAorCQkJeyAncmV2aXNpb258cj1zJyA9PiBcJF9yZXZpc2lvbiwKKwkJCSAgJ2ZldGNoLWFsbHxhbGwnID0+IFwkX2ZldGNoX2FsbCwKKwkJCSAgJ3BhcmVudHxwJyA9PiBcJF9mZXRjaF9wYXJlbnQsCisJCQkgICAlZmNfb3B0cyB9IF0sCisJY2xvbmUgPT4gWyBcJmNtZF9jbG9uZSwgIkluaXRpYWxpemUgYW5kIGZldGNoIHJldmlzaW9ucyIsCisJCQl7ICdyZXZpc2lvbnxyPXMnID0+IFwkX3JldmlzaW9uLAorCQkJICAncHJlc2VydmUtZW1wdHktZGlycycgPT4KKwkJCQlcJEdpdDo6U1ZOOjpGZXRjaGVyOjpfcHJlc2VydmVfZW1wdHlfZGlycywKKwkJCSAgJ3BsYWNlaG9sZGVyLWZpbGVuYW1lPXMnID0+CisJCQkJXCRHaXQ6OlNWTjo6RmV0Y2hlcjo6X3BsYWNlaG9sZGVyX2ZpbGVuYW1lLAorCQkJICAgJWZjX29wdHMsICVpbml0X29wdHMgfSBdLAorCWluaXQgPT4gWyBcJmNtZF9pbml0LCAiSW5pdGlhbGl6ZSBhIHJlcG8gZm9yIHRyYWNraW5nIiAuCisJCQkgICIgKHJlcXVpcmVzIFVSTCBhcmd1bWVudCkiLAorCQkJICBcJWluaXRfb3B0cyBdLAorCSdtdWx0aS1pbml0JyA9PiBbIFwmY21kX211bHRpX2luaXQsCisJICAgICAgICAgICAgICAgICAgIkRlcHJlY2F0ZWQgYWxpYXMgZm9yICIuCisJCQkgICInJDAgaW5pdCAtVDx0cnVuaz4gLWI8YnJhbmNoZXM+IC10PHRhZ3M+JyIsCisJCQkgIFwlaW5pdF9vcHRzIF0sCisJZGNvbW1pdCA9PiBbIFwmY21kX2Rjb21taXQsCisJICAgICAgICAgICAgICdDb21taXQgc2V2ZXJhbCBkaWZmcyB0byBtZXJnZSB3aXRoIHVwc3RyZWFtJywKKwkJCXsgJ21lcmdlfG18TScgPT4gXCRfbWVyZ2UsCisJCQkgICdzdHJhdGVneXxzPXMnID0+IFwkX3N0cmF0ZWd5LAorCQkJICAndmVyYm9zZXx2JyA9PiBcJF92ZXJib3NlLAorCQkJICAnZHJ5LXJ1bnxuJyA9PiBcJF9kcnlfcnVuLAorCQkJICAnZmV0Y2gtYWxsfGFsbCcgPT4gXCRfZmV0Y2hfYWxsLAorCQkJICAnY29tbWl0LXVybD1zJyA9PiBcJF9jb21taXRfdXJsLAorCQkJICAnc2V0LXN2bi1wcm9wcz1zJyA9PiBcJF9zZXRfc3ZuX3Byb3BzLAorCQkJICAncmV2aXNpb258cj1pJyA9PiBcJF9yZXZpc2lvbiwKKwkJCSAgJ25vLXJlYmFzZScgPT4gXCRfbm9fcmViYXNlLAorCQkJICAnbWVyZ2VpbmZvPXMnID0+IFwkX21lcmdlX2luZm8sCisJCQkgICdpbnRlcmFjdGl2ZXxpJyA9PiBcJF9pbnRlcmFjdGl2ZSwKKwkJCSVjbXRfb3B0cywgJWZjX29wdHMgfSBdLAorCWJyYW5jaCA9PiBbIFwmY21kX2JyYW5jaCwKKwkgICAgICAgICAgICAnQ3JlYXRlIGEgYnJhbmNoIGluIHRoZSBTVk4gcmVwb3NpdG9yeScsCisJICAgICAgICAgICAgeyAnbWVzc2FnZXxtPXMnID0+IFwkX21lc3NhZ2UsCisJICAgICAgICAgICAgICAnZGVzdGluYXRpb258ZD1zJyA9PiBcJF9icmFuY2hfZGVzdCwKKwkgICAgICAgICAgICAgICdkcnktcnVufG4nID0+IFwkX2RyeV9ydW4sCisJICAgICAgICAgICAgICAncGFyZW50cycgPT4gXCRfcGFyZW50cywKKwkgICAgICAgICAgICAgICd0YWd8dCcgPT4gXCRfdGFnLAorCSAgICAgICAgICAgICAgJ3VzZXJuYW1lPXMnID0+IFwkR2l0OjpTVk46OlByb21wdDo6X3VzZXJuYW1lLAorCSAgICAgICAgICAgICAgJ2NvbW1pdC11cmw9cycgPT4gXCRfY29tbWl0X3VybCB9IF0sCisJdGFnID0+IFsgc3ViIHsgJF90YWcgPSAxOyBjbWRfYnJhbmNoKEBfKSB9LAorCSAgICAgICAgICdDcmVhdGUgYSB0YWcgaW4gdGhlIFNWTiByZXBvc2l0b3J5JywKKwkgICAgICAgICB7ICdtZXNzYWdlfG09cycgPT4gXCRfbWVzc2FnZSwKKwkgICAgICAgICAgICdkZXN0aW5hdGlvbnxkPXMnID0+IFwkX2JyYW5jaF9kZXN0LAorCSAgICAgICAgICAgJ2RyeS1ydW58bicgPT4gXCRfZHJ5X3J1biwKKwkgICAgICAgICAgICdwYXJlbnRzJyA9PiBcJF9wYXJlbnRzLAorCSAgICAgICAgICAgJ3VzZXJuYW1lPXMnID0+IFwkR2l0OjpTVk46OlByb21wdDo6X3VzZXJuYW1lLAorCSAgICAgICAgICAgJ2NvbW1pdC11cmw9cycgPT4gXCRfY29tbWl0X3VybCB9IF0sCisJJ3NldC10cmVlJyA9PiBbIFwmY21kX3NldF90cmVlLAorCSAgICAgICAgICAgICAgICAiU2V0IGFuIFNWTiByZXBvc2l0b3J5IHRvIGEgZ2l0IHRyZWUtaXNoIiwKKwkJCXsgJ3N0ZGluJyA9PiBcJF9zdGRpbiwgJWNtdF9vcHRzLCAlZmNfb3B0cywgfSBdLAorCSdjcmVhdGUtaWdub3JlJyA9PiBbIFwmY21kX2NyZWF0ZV9pZ25vcmUsCisJCQkgICAgICdDcmVhdGUgYSAuZ2l0aWdub3JlIHBlciBzdm46aWdub3JlJywKKwkJCSAgICAgeyAncmV2aXNpb258cj1pJyA9PiBcJF9yZXZpc2lvbgorCQkJICAgICB9IF0sCisJJ21rZGlycycgPT4gWyBcJmNtZF9ta2RpcnMgLAorCSAgICAgICAgICAgICAgInJlY3JlYXRlIGVtcHR5IGRpcmVjdG9yaWVzIGFmdGVyIGEgY2hlY2tvdXQiLAorCSAgICAgICAgICAgICAgeyAncmV2aXNpb258cj1pJyA9PiBcJF9yZXZpc2lvbiB9IF0sCisgICAgICAgICdwcm9wZ2V0JyA9PiBbIFwmY21kX3Byb3BnZXQsCisJCSAgICAgICAnUHJpbnQgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgb24gYSBmaWxlIG9yIGRpcmVjdG9yeScsCisJCSAgICAgICB7ICdyZXZpc2lvbnxyPWknID0+IFwkX3JldmlzaW9uIH0gXSwKKyAgICAgICAgJ3Byb3BzZXQnID0+IFsgXCZjbWRfcHJvcHNldCwKKwkJICAgICAgICdTZXQgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgb24gYSBmaWxlIG9yIGRpcmVjdG9yeSAtIHdpbGwgYmUgc2V0IG9uIGNvbW1pdCcsCisJCSAgICAgICB7fSBdLAorICAgICAgICAncHJvcGxpc3QnID0+IFsgXCZjbWRfcHJvcGxpc3QsCisJCSAgICAgICAnTGlzdCBhbGwgcHJvcGVydGllcyBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5JywKKwkJICAgICAgIHsgJ3JldmlzaW9ufHI9aScgPT4gXCRfcmV2aXNpb24gfSBdLAorCSdzaG93LWlnbm9yZScgPT4gWyBcJmNtZF9zaG93X2lnbm9yZSwgIlNob3cgc3ZuOmlnbm9yZSBsaXN0aW5ncyIsCisJCQl7ICdyZXZpc2lvbnxyPWknID0+IFwkX3JldmlzaW9uCisJCQl9IF0sCisJJ3Nob3ctZXh0ZXJuYWxzJyA9PiBbIFwmY21kX3Nob3dfZXh0ZXJuYWxzLCAiU2hvdyBzdm46ZXh0ZXJuYWxzIGxpc3RpbmdzIiwKKwkJCXsgJ3JldmlzaW9ufHI9aScgPT4gXCRfcmV2aXNpb24KKwkJCX0gXSwKKwknbXVsdGktZmV0Y2gnID0+IFsgXCZjbWRfbXVsdGlfZmV0Y2gsCisJICAgICAgICAgICAgICAgICAgICJEZXByZWNhdGVkIGFsaWFzIGZvciAkMCBmZXRjaCAtLWFsbCIsCisJCQkgICB7ICdyZXZpc2lvbnxyPXMnID0+IFwkX3JldmlzaW9uLCAlZmNfb3B0cyB9IF0sCisJJ21pZ3JhdGUnID0+IFsgc3ViIHsgfSwKKwkgICAgICAgICAgICAgICAjIG5vLW9wLCB3ZSBhdXRvbWF0aWNhbGx5IHJ1biB0aGlzIGFueXdheXMsCisJICAgICAgICAgICAgICAgJ01pZ3JhdGUgY29uZmlndXJhdGlvbi9tZXRhZGF0YS9sYXlvdXQgZnJvbQorCQkgICAgICAgIHByZXZpb3VzIHZlcnNpb25zIG9mIGdpdC1zdm4nLAorICAgICAgICAgICAgICAgICAgICAgICB7ICdtaW5pbWl6ZScgPT4gXCRHaXQ6OlNWTjo6TWlncmF0aW9uOjpfbWluaW1pemUsCisJCQkgJXJlbW90ZV9vcHRzIH0gXSwKKwknbG9nJyA9PiBbIFwmR2l0OjpTVk46OkxvZzo6Y21kX3Nob3dfbG9nLCAnU2hvdyBjb21taXQgbG9ncycsCisJCQl7ICdsaW1pdD1pJyA9PiBcJEdpdDo6U1ZOOjpMb2c6OmxpbWl0LAorCQkJICAncmV2aXNpb258cj1zJyA9PiBcJF9yZXZpc2lvbiwKKwkJCSAgJ3ZlcmJvc2V8dicgPT4gXCRHaXQ6OlNWTjo6TG9nOjp2ZXJib3NlLAorCQkJICAnaW5jcmVtZW50YWwnID0+IFwkR2l0OjpTVk46OkxvZzo6aW5jcmVtZW50YWwsCisJCQkgICdvbmVsaW5lJyA9PiBcJEdpdDo6U1ZOOjpMb2c6Om9uZWxpbmUsCisJCQkgICdzaG93LWNvbW1pdCcgPT4gXCRHaXQ6OlNWTjo6TG9nOjpzaG93X2NvbW1pdCwKKwkJCSAgJ25vbi1yZWN1cnNpdmUnID0+IFwkR2l0OjpTVk46OkxvZzo6bm9uX3JlY3Vyc2l2ZSwKKwkJCSAgJ2F1dGhvcnMtZmlsZXxBPXMnID0+IFwkX2F1dGhvcnMsCisJCQkgICdjb2xvcicgPT4gXCRHaXQ6OlNWTjo6TG9nOjpjb2xvciwKKwkJCSAgJ3BhZ2VyPXMnID0+IFwkR2l0OjpTVk46OkxvZzo6cGFnZXIKKwkJCX0gXSwKKwknZmluZC1yZXYnID0+IFsgXCZjbWRfZmluZF9yZXYsCisJICAgICAgICAgICAgICAgICJUcmFuc2xhdGUgYmV0d2VlbiBTVk4gcmV2aXNpb24gbnVtYmVycyBhbmQgdHJlZS1pc2giLAorCQkJeyAnQnxiZWZvcmUnID0+IFwkX2JlZm9yZSwKKwkJCSAgJ0F8YWZ0ZXInID0+IFwkX2FmdGVyIH0gXSwKKwkncmViYXNlJyA9PiBbIFwmY21kX3JlYmFzZSwgIkZldGNoIGFuZCByZWJhc2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSIsCisJCQl7ICdtZXJnZXxtfE0nID0+IFwkX21lcmdlLAorCQkJICAndmVyYm9zZXx2JyA9PiBcJF92ZXJib3NlLAorCQkJICAnc3RyYXRlZ3l8cz1zJyA9PiBcJF9zdHJhdGVneSwKKwkJCSAgJ2xvY2FsfGwnID0+IFwkX2xvY2FsLAorCQkJICAnZmV0Y2gtYWxsfGFsbCcgPT4gXCRfZmV0Y2hfYWxsLAorCQkJICAnZHJ5LXJ1bnxuJyA9PiBcJF9kcnlfcnVuLAorCQkJICAncmViYXNlLW1lcmdlc3xwJyA9PiBcJF9yZWJhc2VfbWVyZ2VzLAorCQkJICAncHJlc2VydmUtbWVyZ2VzfHAnID0+IFwkX3JlYmFzZV9tZXJnZXMsCisJCQkgICVmY19vcHRzIH0gXSwKKwknY29tbWl0LWRpZmYnID0+IFsgXCZjbWRfY29tbWl0X2RpZmYsCisJICAgICAgICAgICAgICAgICAgICdDb21taXQgYSBkaWZmIGJldHdlZW4gdHdvIHRyZWVzJywKKwkJCXsgJ21lc3NhZ2V8bT1zJyA9PiBcJF9tZXNzYWdlLAorCQkJICAnZmlsZXxGPXMnID0+IFwkX2ZpbGUsCisJCQkgICdyZXZpc2lvbnxyPXMnID0+IFwkX3JldmlzaW9uLAorCQkJJWNtdF9vcHRzIH0gXSwKKwknaW5mbycgPT4gWyBcJmNtZF9pbmZvLAorCQkgICAgIlNob3cgaW5mbyBhYm91dCB0aGUgbGF0ZXN0IFNWTiByZXZpc2lvbgorCQkgICAgIG9uIHRoZSBjdXJyZW50IGJyYW5jaCIsCisJCSAgICB7ICd1cmwnID0+IFwkX3VybCwgfSBdLAorCSdibGFtZScgPT4gWyBcJkdpdDo6U1ZOOjpMb2c6OmNtZF9ibGFtZSwKKwkgICAgICAgICAgICAiU2hvdyB3aGF0IHJldmlzaW9uIGFuZCBhdXRob3IgbGFzdCBtb2RpZmllZCBlYWNoIGxpbmUgb2YgYSBmaWxlIiwKKwkJICAgIHsgJ2dpdC1mb3JtYXQnID0+IFwkR2l0OjpTVk46OkxvZzo6X2dpdF9mb3JtYXQgfSBdLAorCSdyZXNldCcgPT4gWyBcJmNtZF9yZXNldCwKKwkJICAgICAiVW5kbyBmZXRjaGVzIGJhY2sgdG8gdGhlIHNwZWNpZmllZCBTVk4gcmV2aXNpb24iLAorCQkgICAgIHsgJ3JldmlzaW9ufHI9cycgPT4gXCRfcmV2aXNpb24sCisJCSAgICAgICAncGFyZW50fHAnID0+IFwkX2ZldGNoX3BhcmVudCB9IF0sCisJJ2djJyA9PiBbIFwmY21kX2djLAorCQkgICJDb21wcmVzcyB1bmhhbmRsZWQubG9nIGZpbGVzIGluIC5naXQvc3ZuIGFuZCByZW1vdmUgIiAuCisJCSAgImluZGV4IGZpbGVzIGluIC5naXQvc3ZuIiwKKwkJe30gXSwKKyk7CisKK3BhY2thZ2UgRmFrZVRlcm07CitzdWIgbmV3IHsKKwlteSAoJGNsYXNzLCAkcmVhc29uKSA9IEBfOworCXJldHVybiBibGVzcyBcJHJlYXNvbiwgc2hpZnQ7Cit9CitzdWIgcmVhZGxpbmUgeworCW15ICRzZWxmID0gc2hpZnQ7CisJZGllICJDYW5ub3QgdXNlIHJlYWRsaW5lIG9uIEZha2VUZXJtOiAkJHNlbGYiOworfQorcGFja2FnZSBtYWluOworCitteSAkdGVybTsKK3N1YiB0ZXJtX2luaXQgeworCSR0ZXJtID0gZXZhbCB7CisJCXJlcXVpcmUgVGVybTo6UmVhZExpbmU7CisJCSRFTlZ7IkdJVF9TVk5fTk9UVFkifQorCQkJPyBuZXcgVGVybTo6UmVhZExpbmUgJ2dpdC1zdm4nLCBcKlNURElOLCBcKlNURE9VVAorCQkJOiBuZXcgVGVybTo6UmVhZExpbmUgJ2dpdC1zdm4nOworCX07CisJaWYgKCRAKSB7CisJCSR0ZXJtID0gbmV3IEZha2VUZXJtICIkQDogZ29pbmcgbm9uLWludGVyYWN0aXZlIjsKKwl9Cit9CisKK215ICRjbWQ7Citmb3IgKG15ICRpID0gMDsgJGkgPCBAQVJHVjsgJGkrKykgeworCWlmIChkZWZpbmVkICRjbWR7JEFSR1ZbJGldfSkgeworCQkkY21kID0gJEFSR1ZbJGldOworCQlzcGxpY2UgQEFSR1YsICRpLCAxOworCQlsYXN0OworCX0gZWxzaWYgKCRBUkdWWyRpXSBlcSAnaGVscCcpIHsKKwkJJGNtZCA9ICRBUkdWWyRpKzFdOworCQl1c2FnZSgwKTsKKwl9Cit9OworCisjIG1ha2Ugc3VyZSB3ZSdyZSBhbHdheXMgcnVubmluZyBhdCB0aGUgdG9wLWxldmVsIHdvcmtpbmcgZGlyZWN0b3J5CitpZiAoJGNtZCAmJiAkY21kID1+IC8oPzpjbG9uZXxpbml0fG11bHRpLWluaXQpJC8pIHsKKwkkRU5We0dJVF9ESVJ9IHx8PSAiLmdpdCI7CisJIyBjYXRjaCB0aGUgc3VibW9kdWxlIGNhc2UKKwlpZiAoLWYgJEVOVntHSVRfRElSfSkgeworCQlvcGVuKG15ICRmaCwgJzwnLCAkRU5We0dJVF9ESVJ9KSBvcgorCQkJZGllICJmYWlsZWQgdG8gb3BlbiAkRU5We0dJVF9ESVJ9OiAkIVxuIjsKKwkJJEVOVntHSVRfRElSfSA9ICQxIGlmIDwkZmg+ID1+IC9eZ2l0ZGlyOiAoLispJC87CisJfQorfSBlbHNpZiAoJGNtZCkgeworCW15ICgkZ2l0X2RpciwgJGNkdXApOworCWdpdF9jbWRfdHJ5IHsKKwkJJGdpdF9kaXIgPSBjb21tYW5kX29uZWxpbmUoW3F3L3Jldi1wYXJzZSAtLWdpdC1kaXIvXSk7CisJfSAiVW5hYmxlIHRvIGZpbmQgLmdpdCBkaXJlY3RvcnlcbiI7CisJZ2l0X2NtZF90cnkgeworCQkkY2R1cCA9IGNvbW1hbmRfb25lbGluZShxdy9yZXYtcGFyc2UgLS1zaG93LWNkdXAvKTsKKwkJY2hvbXAgJGNkdXAgaWYgKCRjZHVwKTsKKwkJJGNkdXAgPSAiLiIgdW5sZXNzICgkY2R1cCAmJiBsZW5ndGggJGNkdXApOworCX0gIkFscmVhZHkgYXQgdG9wbGV2ZWwsIGJ1dCAkZ2l0X2RpciBub3QgZm91bmRcbiI7CisJJEVOVntHSVRfRElSfSA9ICRnaXRfZGlyOworCWNoZGlyICRjZHVwIG9yIGRpZSAiVW5hYmxlIHRvIGNoZGlyIHVwIHRvICckY2R1cCdcbiI7CisJJF9yZXBvc2l0b3J5ID0gR2l0LT5yZXBvc2l0b3J5KFJlcG9zaXRvcnkgPT4gJEVOVntHSVRfRElSfSk7Cit9CisKK215ICVvcHRzID0gJXskY21keyRjbWR9LT5bMl19IGlmIChkZWZpbmVkICRjbWQpOworCityZWFkX2dpdF9jb25maWcoXCVvcHRzKSBpZiAkRU5We0dJVF9ESVJ9OworaWYgKCRjbWQgJiYgKCRjbWQgZXEgJ2xvZycgfHwgJGNtZCBlcSAnYmxhbWUnKSkgeworCUdldG9wdDo6TG9uZzo6Q29uZmlndXJlKCdwYXNzX3Rocm91Z2gnKTsKK30KK215ICRydiA9IEdldE9wdGlvbnMoJW9wdHMsICdofEgnID0+IFwkX2hlbHAsICd2ZXJzaW9ufFYnID0+IFwkX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICdtaW5pbWl6ZS1jb25uZWN0aW9ucycgPT4gXCRHaXQ6OlNWTjo6TWlncmF0aW9uOjpfbWluaW1pemUsCisgICAgICAgICAgICAgICAgICAgICdpZHxpPXMnID0+IFwkR2l0OjpTVk46OmRlZmF1bHRfcmVmX2lkLAorICAgICAgICAgICAgICAgICAgICAnc3ZuLXJlbW90ZXxyZW1vdGV8Uj1zJyA9PiBzdWIgeworICAgICAgICAgICAgICAgICAgICAgICAkR2l0OjpTVk46Om5vX3JldXNlX2V4aXN0aW5nID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgJEdpdDo6U1ZOOjpkZWZhdWx0X3JlcG9faWQgPSAkX1sxXSB9KTsKK2V4aXQgMSBpZiAoISRydiAmJiAkY21kICYmICRjbWQgbmUgJ2xvZycpOworCit1c2FnZSgwKSBpZiAkX2hlbHA7Cit2ZXJzaW9uKCkgaWYgJF92ZXJzaW9uOwordXNhZ2UoMSkgdW5sZXNzIGRlZmluZWQgJGNtZDsKK2xvYWRfYXV0aG9ycygpIGlmICRfYXV0aG9yczsKK2lmIChkZWZpbmVkICRfYXV0aG9yc19wcm9nKSB7CisJbXkgJGFic19maWxlID0gRmlsZTo6U3BlYy0+cmVsMmFicygkX2F1dGhvcnNfcHJvZyk7CisJJF9hdXRob3JzX3Byb2cgPSAiJyIgLiAkYWJzX2ZpbGUgLiAiJyIgaWYgLXggJGFic19maWxlOworfQorCit1bmxlc3MgKCRjbWQgPX4gL14oPzpjbG9uZXxpbml0fG11bHRpLWluaXR8Y29tbWl0LWRpZmYpJC8pIHsKKwlHaXQ6OlNWTjo6TWlncmF0aW9uOjptaWdyYXRpb25fY2hlY2soKTsKK30KK0dpdDo6U1ZOOjppbml0X3ZhcnMoKTsKK2V2YWwgeworCUdpdDo6U1ZOOjp2ZXJpZnlfcmVtb3Rlc19zYW5pdHkoKTsKKwkkY21keyRjbWR9LT5bMF0tPihAQVJHVik7CisJcG9zdF9mZXRjaF9jaGVja291dCgpOworfTsKK2ZhdGFsICRAIGlmICRAOworZXhpdCAwOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBwcmltYXJ5IGZ1bmN0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgdXNhZ2UgeworCW15ICRleGl0ID0gc2hpZnQgfHwgMDsKKwlteSAkZmQgPSAkZXhpdCA/IFwqU1RERVJSIDogXCpTVERPVVQ7CisJcHJpbnQgJGZkIDw8IiI7CitnaXQtc3ZuIC0gYmlkaXJlY3Rpb25hbCBvcGVyYXRpb25zIGJldHdlZW4gYSBzaW5nbGUgU3VidmVyc2lvbiB0cmVlIGFuZCBnaXQKK3VzYWdlOiBnaXQgc3ZuIDxjb21tYW5kPiBbb3B0aW9uc10gW2FyZ3VtZW50c11cbgorCisJcHJpbnQgJGZkICJBdmFpbGFibGUgY29tbWFuZHM6XG4iIHVubGVzcyAkY21kOworCisJZm9yZWFjaCAoc29ydCBrZXlzICVjbWQpIHsKKwkJbmV4dCBpZiAkY21kICYmICRjbWQgbmUgJF87CisJCW5leHQgaWYgL15tdWx0aS0vOyAjIGRvbid0IHNob3cgZGVwcmVjYXRlZCBjb21tYW5kcworCQlwcmludCAkZmQgJyAgJyxwYWNrKCdBMTcnLCRfKSwkY21keyRffS0+WzFdLCJcbiI7CisJCWZvcmVhY2ggKHNvcnQga2V5cyAleyRjbWR7JF99LT5bMl19KSB7CisJCQkjIG1peGVkLWNhc2Ugb3B0aW9ucyBhcmUgZm9yIC5naXQvY29uZmlnIG9ubHkKKwkJCW5leHQgaWYgL1tBLVpdLyAmJiAvXlthLXpdKyQvaTsKKwkJCSMgcHJpbnRzIG91dCBhcmd1bWVudHMgYXMgdGhleSBzaG91bGQgYmUgcGFzc2VkOgorCQkJbXkgJHggPSBzI1s6PV1zJCMjID8gJzxhcmc+JyA6IHMjWzo9XWkkIyMgPyAnPG51bT4nIDogJyc7CisJCQlwcmludCAkZmQgJyAnIHggMjEsIGpvaW4oJywgJywgbWFwIHsgbGVuZ3RoICRfID4gMSA/CisJCQkJCQkJIi0tJF8iIDogIi0kXyIgfQorCQkJCQkJc3BsaXQgL1x8LywkXyksIiAkeFxuIjsKKwkJfQorCX0KKwlwcmludCAkZmQgPDwiIjsKK1xuR0lUX1NWTl9JRCBtYXkgYmUgc2V0IGluIHRoZSBlbnZpcm9ubWVudCBvciB2aWEgdGhlIC0taWQvLWkgc3dpdGNoIHRvIGFuCithcmJpdHJhcnkgaWRlbnRpZmllciBpZiB5b3UncmUgdHJhY2tpbmcgbXVsdGlwbGUgU1ZOIGJyYW5jaGVzL3JlcG9zaXRvcmllcyBpbgorb25lIGdpdCByZXBvc2l0b3J5IGFuZCB3YW50IHRvIGtlZXAgdGhlbSBzZXBhcmF0ZS4gIFNlZSBnaXQtc3ZuKDEpIGZvciBtb3JlCitpbmZvcm1hdGlvbi4KKworCWV4aXQgJGV4aXQ7Cit9CisKK3N1YiB2ZXJzaW9uIHsKKwk6Ol9yZXFfc3ZuKCk7CisJcHJpbnQgImdpdC1zdm4gdmVyc2lvbiAkVkVSU0lPTiAoc3ZuICRTVk46OkNvcmU6OlZFUlNJT04pXG4iOworCWV4aXQgMDsKK30KKworc3ViIGFzayB7CisJbXkgKCRwcm9tcHQsICVhcmcpID0gQF87CisJbXkgJHZhbGlkX3JlID0gJGFyZ3t2YWxpZF9yZX07CisJbXkgJGRlZmF1bHQgPSAkYXJne2RlZmF1bHR9OworCW15ICRyZXNwOworCW15ICRpID0gMDsKKwl0ZXJtX2luaXQoKSB1bmxlc3MgJHRlcm07CisKKwlpZiAoICEoIGRlZmluZWQoJHRlcm0tPklOKQorICAgICAgICAgICAgJiYgZGVmaW5lZCggZmlsZW5vKCR0ZXJtLT5JTikgKQorICAgICAgICAgICAgJiYgZGVmaW5lZCggJHRlcm0tPk9VVCApCisgICAgICAgICAgICAmJiBkZWZpbmVkKCBmaWxlbm8oJHRlcm0tPk9VVCkgKSApICl7CisJCXJldHVybiBkZWZpbmVkKCRkZWZhdWx0KSA/ICRkZWZhdWx0IDogdW5kZWY7CisJfQorCisJd2hpbGUgKCRpKysgPCAxMCkgeworCQkkcmVzcCA9ICR0ZXJtLT5yZWFkbGluZSgkcHJvbXB0KTsKKwkJaWYgKCFkZWZpbmVkICRyZXNwKSB7ICMgRU9GCisJCQlwcmludCAiXG4iOworCQkJcmV0dXJuIGRlZmluZWQgJGRlZmF1bHQgPyAkZGVmYXVsdCA6IHVuZGVmOworCQl9CisJCWlmICgkcmVzcCBlcSAnJyBhbmQgZGVmaW5lZCAkZGVmYXVsdCkgeworCQkJcmV0dXJuICRkZWZhdWx0OworCQl9CisJCWlmICghZGVmaW5lZCAkdmFsaWRfcmUgb3IgJHJlc3AgPX4gLyR2YWxpZF9yZS8pIHsKKwkJCXJldHVybiAkcmVzcDsKKwkJfQorCX0KKwlyZXR1cm4gdW5kZWY7Cit9CisKK3N1YiBkb19naXRfaW5pdF9kYiB7CisJdW5sZXNzICgtZCAkRU5We0dJVF9ESVJ9KSB7CisJCW15IEBpbml0X2RiID0gKCdpbml0Jyk7CisJCXB1c2ggQGluaXRfZGIsICItLXRlbXBsYXRlPSRfdGVtcGxhdGUiIGlmIGRlZmluZWQgJF90ZW1wbGF0ZTsKKwkJaWYgKGRlZmluZWQgJF9zaGFyZWQpIHsKKwkJCWlmICgkX3NoYXJlZCA9fiAvW2Etel0vKSB7CisJCQkJcHVzaCBAaW5pdF9kYiwgIi0tc2hhcmVkPSRfc2hhcmVkIjsKKwkJCX0gZWxzZSB7CisJCQkJcHVzaCBAaW5pdF9kYiwgIi0tc2hhcmVkIjsKKwkJCX0KKwkJfQorCQljb21tYW5kX25vaXN5KEBpbml0X2RiKTsKKwkJJF9yZXBvc2l0b3J5ID0gR2l0LT5yZXBvc2l0b3J5KFJlcG9zaXRvcnkgPT4gIi5naXQiKTsKKwl9CisJbXkgJHNldDsKKwlteSAkcGZ4ID0gInN2bi1yZW1vdGUuJEdpdDo6U1ZOOjpkZWZhdWx0X3JlcG9faWQiOworCWZvcmVhY2ggbXkgJGkgKGtleXMgJWljdikgeworCQlkaWUgIickc2V0JyBhbmQgJyRpJyBjYW5ub3QgYm90aCBiZSBzZXRcbiIgaWYgJHNldDsKKwkJbmV4dCB1bmxlc3MgZGVmaW5lZCAkaWN2eyRpfTsKKwkJY29tbWFuZF9ub2lzeSgnY29uZmlnJywgIiRwZnguJGkiLCAkaWN2eyRpfSk7CisJCSRzZXQgPSAkaTsKKwl9CisJbXkgJGlnbm9yZV9wYXRoc19yZWdleCA9IFwkR2l0OjpTVk46OkZldGNoZXI6Ol9pZ25vcmVfcmVnZXg7CisJY29tbWFuZF9ub2lzeSgnY29uZmlnJywgIiRwZnguaWdub3JlLXBhdGhzIiwgJCRpZ25vcmVfcGF0aHNfcmVnZXgpCisJCWlmIGRlZmluZWQgJCRpZ25vcmVfcGF0aHNfcmVnZXg7CisJbXkgJGluY2x1ZGVfcGF0aHNfcmVnZXggPSBcJEdpdDo6U1ZOOjpGZXRjaGVyOjpfaW5jbHVkZV9yZWdleDsKKwljb21tYW5kX25vaXN5KCdjb25maWcnLCAiJHBmeC5pbmNsdWRlLXBhdGhzIiwgJCRpbmNsdWRlX3BhdGhzX3JlZ2V4KQorCQlpZiBkZWZpbmVkICQkaW5jbHVkZV9wYXRoc19yZWdleDsKKwlteSAkaWdub3JlX3JlZnNfcmVnZXggPSBcJEdpdDo6U1ZOOjpSYTo6X2lnbm9yZV9yZWZzX3JlZ2V4OworCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICIkcGZ4Lmlnbm9yZS1yZWZzIiwgJCRpZ25vcmVfcmVmc19yZWdleCkKKwkJaWYgZGVmaW5lZCAkJGlnbm9yZV9yZWZzX3JlZ2V4OworCisJaWYgKGRlZmluZWQgJEdpdDo6U1ZOOjpGZXRjaGVyOjpfcHJlc2VydmVfZW1wdHlfZGlycykgeworCQlteSAkZm5hbWUgPSBcJEdpdDo6U1ZOOjpGZXRjaGVyOjpfcGxhY2Vob2xkZXJfZmlsZW5hbWU7CisJCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICIkcGZ4LnByZXNlcnZlLWVtcHR5LWRpcnMiLCAndHJ1ZScpOworCQljb21tYW5kX25vaXN5KCdjb25maWcnLCAiJHBmeC5wbGFjZWhvbGRlci1maWxlbmFtZSIsICQkZm5hbWUpOworCX0KK30KKworc3ViIGluaXRfc3ViZGlyIHsKKwlteSAkcmVwb19wYXRoID0gc2hpZnQgb3IgcmV0dXJuOworCW1rcGF0aChbJHJlcG9fcGF0aF0pIHVubGVzcyAtZCAkcmVwb19wYXRoOworCWNoZGlyICRyZXBvX3BhdGggb3IgZGllICJDb3VsZG4ndCBjaGRpciB0byAkcmVwb19wYXRoOiAkIVxuIjsKKwkkRU5We0dJVF9ESVJ9ID0gJy5naXQnOworCSRfcmVwb3NpdG9yeSA9IEdpdC0+cmVwb3NpdG9yeShSZXBvc2l0b3J5ID0+ICRFTlZ7R0lUX0RJUn0pOworfQorCitzdWIgY21kX2Nsb25lIHsKKwlteSAoJHVybCwgJHBhdGgpID0gQF87CisJaWYgKCEkdXJsKSB7CisJCWRpZSAiU1ZOIHJlcG9zaXRvcnkgbG9jYXRpb24gcmVxdWlyZWQgIiwKKwkJICAgICJhcyBhIGNvbW1hbmQtbGluZSBhcmd1bWVudFxuIjsKKwl9IGVsc2lmICghZGVmaW5lZCAkcGF0aCAmJgorCSAgICAoZGVmaW5lZCAkX3RydW5rIHx8IEBfYnJhbmNoZXMgfHwgQF90YWdzIHx8CisJICAgICBkZWZpbmVkICRfc3RkbGF5b3V0KSAmJgorCSAgICAkdXJsICF+IG0jXlthLXpcK10rOi8vIykgeworCQkkcGF0aCA9ICR1cmw7CisJfQorCSRwYXRoID0gYmFzZW5hbWUoJHVybCkgaWYgIWRlZmluZWQgJHBhdGggfHwgIWxlbmd0aCAkcGF0aDsKKwlteSAkYXV0aG9yc19hYnNvbHV0ZSA9ICRfYXV0aG9ycyA/IEZpbGU6OlNwZWMtPnJlbDJhYnMoJF9hdXRob3JzKSA6ICIiOworCWNtZF9pbml0KCR1cmwsICRwYXRoKTsKKwljb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICdzdm4uYXV0aG9yc2ZpbGUnLCAkYXV0aG9yc19hYnNvbHV0ZSkKKwkgICAgaWYgJF9hdXRob3JzOworCUdpdDo6U1ZOOjpmZXRjaF9hbGwoJEdpdDo6U1ZOOjpkZWZhdWx0X3JlcG9faWQpOworfQorCitzdWIgY21kX2luaXQgeworCWlmIChkZWZpbmVkICRfc3RkbGF5b3V0KSB7CisJCSRfdHJ1bmsgPSAndHJ1bmsnIGlmICghZGVmaW5lZCAkX3RydW5rKTsKKwkJQF90YWdzID0gJ3RhZ3MnIGlmICghIEBfdGFncyk7CisJCUBfYnJhbmNoZXMgPSAnYnJhbmNoZXMnIGlmICghIEBfYnJhbmNoZXMpOworCX0KKwlpZiAoZGVmaW5lZCAkX3RydW5rIHx8IEBfYnJhbmNoZXMgfHwgQF90YWdzKSB7CisJCXJldHVybiBjbWRfbXVsdGlfaW5pdChAXyk7CisJfQorCW15ICR1cmwgPSBzaGlmdCBvciBkaWUgIlNWTiByZXBvc2l0b3J5IGxvY2F0aW9uIHJlcXVpcmVkICIsCisJICAgICAgICAgICAgICAgICAgICAgICAiYXMgYSBjb21tYW5kLWxpbmUgYXJndW1lbnRcbiI7CisJJHVybCA9IGNhbm9uaWNhbGl6ZV91cmwoJHVybCk7CisJaW5pdF9zdWJkaXIoQF8pOworCWRvX2dpdF9pbml0X2RiKCk7CisKKwlpZiAoJEdpdDo6U1ZOOjpfbWluaW1pemVfdXJsIGVxICd1bnNldCcpIHsKKwkJJEdpdDo6U1ZOOjpfbWluaW1pemVfdXJsID0gMDsKKwl9CisKKwlHaXQ6OlNWTi0+aW5pdCgkdXJsKTsKK30KKworc3ViIGNtZF9mZXRjaCB7CisJaWYgKGdyZXAgL15cZCs9Li8sIEBfKSB7CisJCWRpZSAiJzxyZXY+PTxjb21taXQ+JyBmZXRjaCBhcmd1bWVudHMgYXJlICIsCisJCSAgICAibm8gbG9uZ2VyIHN1cHBvcnRlZC5cbiI7CisJfQorCW15ICgkcmVtb3RlKSA9IEBfOworCWlmIChAXyA+IDEpIHsKKwkJZGllICJ1c2FnZTogJDAgZmV0Y2ggWy0tYWxsXSBbLS1wYXJlbnRdIFtzdm4tcmVtb3RlXVxuIjsKKwl9CisJJEdpdDo6U1ZOOjpub19yZXVzZV9leGlzdGluZyA9IHVuZGVmOworCWlmICgkX2ZldGNoX3BhcmVudCkgeworCQlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcpOworCQl1bmxlc3MgKCRncykgeworCQkJZGllICJVbmFibGUgdG8gZGV0ZXJtaW5lIHVwc3RyZWFtIFNWTiBpbmZvcm1hdGlvbiBmcm9tICIsCisJCQkgICAgIndvcmtpbmcgdHJlZSBoaXN0b3J5XG4iOworCQl9CisJICAgICAgICAjIGp1c3QgZmV0Y2gsIGRvbid0IGNoZWNrb3V0LgorCQkkX25vX2NoZWNrb3V0ID0gJ3RydWUnOworCQkkX2ZldGNoX2FsbCA/ICRncy0+ZmV0Y2hfYWxsIDogJGdzLT5mZXRjaDsKKwl9IGVsc2lmICgkX2ZldGNoX2FsbCkgeworCQljbWRfbXVsdGlfZmV0Y2goKTsKKwl9IGVsc2UgeworCQkkcmVtb3RlIHx8PSAkR2l0OjpTVk46OmRlZmF1bHRfcmVwb19pZDsKKwkJR2l0OjpTVk46OmZldGNoX2FsbCgkcmVtb3RlLCBHaXQ6OlNWTjo6cmVhZF9hbGxfcmVtb3RlcygpKTsKKwl9Cit9CisKK3N1YiBjbWRfc2V0X3RyZWUgeworCW15IChAY29tbWl0cykgPSBAXzsKKwlpZiAoJF9zdGRpbiB8fCAhQGNvbW1pdHMpIHsKKwkJcHJpbnQgIlJlYWRpbmcgZnJvbSBzdGRpbi4uLlxuIjsKKwkJQGNvbW1pdHMgPSAoKTsKKwkJd2hpbGUgKDxTVERJTj4pIHsKKwkJCWlmICgvXGIoJHNoYTFfc2hvcnQpXGIvbykgeworCQkJCXVuc2hpZnQgQGNvbW1pdHMsICQxOworCQkJfQorCQl9CisJfQorCW15IEByZXZzOworCWZvcmVhY2ggbXkgJGMgKEBjb21taXRzKSB7CisJCW15IEB0bXAgPSBjb21tYW5kKCdyZXYtcGFyc2UnLCRjKTsKKwkJaWYgKHNjYWxhciBAdG1wID09IDEpIHsKKwkJCXB1c2ggQHJldnMsICR0bXBbMF07CisJCX0gZWxzaWYgKHNjYWxhciBAdG1wID4gMSkgeworCQkJcHVzaCBAcmV2cywgcmV2ZXJzZShjb21tYW5kKCdyZXYtbGlzdCcsQHRtcCkpOworCQl9IGVsc2UgeworCQkJZmF0YWwgIkZhaWxlZCB0byByZXYtcGFyc2UgJGMiOworCQl9CisJfQorCW15ICRncyA9IEdpdDo6U1ZOLT5uZXc7CisJbXkgKCRyX2xhc3QsICRjbXRfbGFzdCkgPSAkZ3MtPmxhc3RfcmV2X2NvbW1pdDsKKwkkZ3MtPmZldGNoOworCWlmIChkZWZpbmVkICRncy0+e2xhc3RfcmV2fSAmJiAkcl9sYXN0ICE9ICRncy0+e2xhc3RfcmV2fSkgeworCQlmYXRhbCAiVGhlcmUgYXJlIG5ldyByZXZpc2lvbnMgdGhhdCB3ZXJlIGZldGNoZWQgIiwKKwkJICAgICAgImFuZCBuZWVkIHRvIGJlIG1lcmdlZCAob3IgYWNrbm93bGVkZ2VkKSAiLAorCQkgICAgICAiYmVmb3JlIGNvbW1pdHRpbmcuXG5sYXN0IHJldjogJHJfbGFzdFxuIiwKKwkJICAgICAgIiBjdXJyZW50OiAkZ3MtPntsYXN0X3Jldn0iOworCX0KKwkkZ3MtPnNldF90cmVlKCRfKSBmb3JlYWNoIEByZXZzOworCXByaW50ICJEb25lIGNvbW1pdHRpbmcgIixzY2FsYXIgQHJldnMsIiByZXZpc2lvbnMgdG8gU1ZOXG4iOworCXVubGluayAkZ3MtPntpbmRleH07Cit9CisKK3N1YiBzcGxpdF9tZXJnZV9pbmZvX3JhbmdlIHsKKwlteSAoJHJhbmdlKSA9IEBfOworCWlmICgkcmFuZ2UgPX4gLyhcZCspLShcZCspLykgeworCQlyZXR1cm4gKGludCgkMSksIGludCgkMikpOworCX0gZWxzZSB7CisJCXJldHVybiAoaW50KCRyYW5nZSksIGludCgkcmFuZ2UpKTsKKwl9Cit9CisKK3N1YiBjb21iaW5lX3JhbmdlcyB7CisJbXkgKCRpbikgPSBAXzsKKworCW15IEBmbnVtcyA9ICgpOworCW15IEBhcnIgPSBzcGxpdCgvLC8sICRpbik7CisJZm9yIG15ICRlbGVtZW50IChAYXJyKSB7CisJCW15ICgkc3RhcnQsICRlbmQpID0gc3BsaXRfbWVyZ2VfaW5mb19yYW5nZSgkZWxlbWVudCk7CisJCXB1c2ggQGZudW1zLCAkc3RhcnQ7CisJfQorCisJbXkgQHNvcnRlZCA9IEBhcnIgWyBzb3J0IHsKKwkJJGZudW1zWyRhXSA8PT4gJGZudW1zWyRiXQorCX0gMC4uJCNhcnIgXTsKKworCW15IEByZXR1cm4gPSAoKTsKKwlteSAkbGFzdCA9IC0xOworCW15ICRmaXJzdCA9IC0xOworCWZvciBteSAkZWxlbWVudCAoQHNvcnRlZCkgeworCQlteSAoJHN0YXJ0LCAkZW5kKSA9IHNwbGl0X21lcmdlX2luZm9fcmFuZ2UoJGVsZW1lbnQpOworCisJCWlmICgkbGFzdCA9PSAtMSkgeworCQkJJGZpcnN0ID0gJHN0YXJ0OworCQkJJGxhc3QgPSAkZW5kOworCQkJbmV4dDsKKwkJfQorCQlpZiAoJHN0YXJ0IDw9ICRsYXN0KzEpIHsKKwkJCWlmICgkZW5kID4gJGxhc3QpIHsKKwkJCQkkbGFzdCA9ICRlbmQ7CisJCQl9CisJCQluZXh0OworCQl9CisJCWlmICgkZmlyc3QgPT0gJGxhc3QpIHsKKwkJCXB1c2ggQHJldHVybiwgIiRmaXJzdCI7CisJCX0gZWxzZSB7CisJCQlwdXNoIEByZXR1cm4sICIkZmlyc3QtJGxhc3QiOworCQl9CisJCSRmaXJzdCA9ICRzdGFydDsKKwkJJGxhc3QgPSAkZW5kOworCX0KKworCWlmICgkZmlyc3QgIT0gLTEpIHsKKwkJaWYgKCRmaXJzdCA9PSAkbGFzdCkgeworCQkJcHVzaCBAcmV0dXJuLCAiJGZpcnN0IjsKKwkJfSBlbHNlIHsKKwkJCXB1c2ggQHJldHVybiwgIiRmaXJzdC0kbGFzdCI7CisJCX0KKwl9CisKKwlyZXR1cm4gam9pbignLCcsIEByZXR1cm4pOworfQorCitzdWIgbWVyZ2VfcmV2c19pbnRvX2hhc2ggeworCW15ICgkaGFzaCwgJG1pbmZvKSA9IEBfOworCW15IEBsaW5lcyA9IHNwbGl0KCcgJywgJG1pbmZvKTsKKworCWZvciBteSAkbGluZSAoQGxpbmVzKSB7CisJCW15ICgkYnJhbmNocGF0aCwgJHJldnMpID0gc3BsaXQoLzovLCAkbGluZSk7CisKKwkJaWYgKGV4aXN0cygkaGFzaC0+eyRicmFuY2hwYXRofSkpIHsKKwkJCSMgTWVyZ2UgdGhlIHR3byByZXZpc2lvbiBzZXRzCisJCQlteSAkY29tYmluZWQgPSAiJGhhc2gtPnskYnJhbmNocGF0aH0sJHJldnMiOworCQkJJGhhc2gtPnskYnJhbmNocGF0aH0gPSBjb21iaW5lX3JhbmdlcygkY29tYmluZWQpOworCQl9IGVsc2UgeworCQkJIyBKdXN0IGRvIHJhbmdlIGNvbWJpbmluZyBmb3IgY29uc29saWRhdGlvbgorCQkJJGhhc2gtPnskYnJhbmNocGF0aH0gPSBjb21iaW5lX3JhbmdlcygkcmV2cyk7CisJCX0KKwl9Cit9CisKK3N1YiBtZXJnZV9tZXJnZV9pbmZvIHsKKwlteSAoJG1lcmdlaW5mb19vbmUsICRtZXJnZWluZm9fdHdvLCAkaWdub3JlX2JyYW5jaCkgPSBAXzsKKwlteSAlcmVzdWx0X2hhc2ggPSAoKTsKKworCW1lcmdlX3JldnNfaW50b19oYXNoKFwlcmVzdWx0X2hhc2gsICRtZXJnZWluZm9fb25lKTsKKwltZXJnZV9yZXZzX2ludG9faGFzaChcJXJlc3VsdF9oYXNoLCAkbWVyZ2VpbmZvX3R3byk7CisKKwlkZWxldGUgJHJlc3VsdF9oYXNoeyRpZ25vcmVfYnJhbmNofSBpZiAkaWdub3JlX2JyYW5jaDsKKworCW15ICRyZXN1bHQgPSAnJzsKKwkjIFNvcnQgYmVsb3cgaXMgZm9yIGNvbnNpc3RlbmN5J3Mgc2FrZQorCWZvciBteSAkYnJhbmNobmFtZSAoc29ydCBrZXlzKCVyZXN1bHRfaGFzaCkpIHsKKwkJbXkgJHJldmxpc3QgPSAkcmVzdWx0X2hhc2h7JGJyYW5jaG5hbWV9OworCQkkcmVzdWx0IC49ICIkYnJhbmNobmFtZTokcmV2bGlzdFxuIgorCX0KKwlyZXR1cm4gJHJlc3VsdDsKK30KKworc3ViIHBvcHVsYXRlX21lcmdlX2luZm8geworCW15ICgkZCwgJGdzLCAkdXVpZCwgJGxpbmVhcl9yZWZzLCAkcmV3cml0dGVuX3BhcmVudCkgPSBAXzsKKworCW15ICVwYXJlbnRzaGFzaDsKKwlyZWFkX2NvbW1pdF9wYXJlbnRzKFwlcGFyZW50c2hhc2gsICRkKTsKKwlteSBAcGFyZW50cyA9IEB7JHBhcmVudHNoYXNoeyRkfX07CisJaWYgKCQjcGFyZW50cyA+IDApIHsKKwkJIyBNZXJnZSBjb21taXQKKwkJbXkgJGFsbF9wYXJlbnRzX29rID0gMTsKKwkJbXkgJGFnZ3JlZ2F0ZV9tZXJnZWluZm8gPSAnJzsKKwkJbXkgJHJvb3R1cmwgPSAkZ3MtPnJlcG9zX3Jvb3Q7CisJCW15ICgkdGFyZ2V0X2JyYW5jaCkgPSAkZ3MtPmZ1bGxfcHVzaHVybCA9fiAvXlxRJHJvb3R1cmxcRSguKikvOworCisJCWlmIChkZWZpbmVkKCRyZXdyaXR0ZW5fcGFyZW50KSkgeworCQkJIyBSZXBsYWNlIGZpcnN0IHBhcmVudCB3aXRoIG5ld2x5LXJld3JpdHRlbiB2ZXJzaW9uCisJCQlzaGlmdCBAcGFyZW50czsKKwkJCXVuc2hpZnQgQHBhcmVudHMsICRyZXdyaXR0ZW5fcGFyZW50OworCQl9CisKKwkJZm9yZWFjaCBteSAkcGFyZW50IChAcGFyZW50cykgeworCQkJbXkgKCRicmFuY2h1cmwsICRzdm5yZXYsICRwYXJ1dWlkKSA9CisJCQkJY210X21ldGFkYXRhKCRwYXJlbnQpOworCisJCQl1bmxlc3MgKGRlZmluZWQoJHN2bnJldikpIHsKKwkJCQkjIFNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGJlIHByZWZsaWdodCBjaGVjaworCQkJCWZhdGFsICJtZXJnZSBjb21taXQgJGQgaGFzIGFuY2VzdG9yICRwYXJlbnQsIGJ1dCB0aGF0IGNoYW5nZSAiCisgICAgICAgICAgICAgICAgICAgICAuImRvZXMgbm90IGhhdmUgZ2l0LXN2biBtZXRhZGF0YSEiOworCQkJfQorCQkJdW5sZXNzICgkYnJhbmNodXJsID1+IC9eXFEkcm9vdHVybFxFKC4qKS8pIHsKKwkJCQlmYXRhbCAiY29tbWl0ICRwYXJlbnQgZ2l0LXN2biBtZXRhZGF0YSBjaGFuZ2VkIG1pZC1ydW4hIjsKKwkJCX0KKwkJCW15ICRicmFuY2hwYXRoID0gJDE7CisKKwkJCW15ICRyYSA9IEdpdDo6U1ZOOjpSYS0+bmV3KCRicmFuY2h1cmwpOworCQkJbXkgKHVuZGVmLCB1bmRlZiwgJHByb3BzKSA9CisJCQkJJHJhLT5nZXRfZGlyKGNhbm9uaWNhbGl6ZV9wYXRoKCIuIiksICRzdm5yZXYpOworCQkJbXkgJHBhcl9tZXJnZWluZm8gPSAkcHJvcHMtPnsnc3ZuOm1lcmdlaW5mbyd9OworCQkJdW5sZXNzIChkZWZpbmVkICRwYXJfbWVyZ2VpbmZvKSB7CisJCQkJJHBhcl9tZXJnZWluZm8gPSAnJzsKKwkJCX0KKwkJCSMgTWVyZ2UgcHJldmlvdXMgbWVyZ2VpbmZvIHZhbHVlcworCQkJJGFnZ3JlZ2F0ZV9tZXJnZWluZm8gPQorCQkJCW1lcmdlX21lcmdlX2luZm8oJGFnZ3JlZ2F0ZV9tZXJnZWluZm8sCisJCQkJCQkJCSRwYXJfbWVyZ2VpbmZvLAorCQkJCQkJCQkkdGFyZ2V0X2JyYW5jaCk7CisKKwkJCW5leHQgaWYgJHBhcmVudCBlcSAkcGFyZW50c1swXTsgIyBTa2lwIGZpcnN0IHBhcmVudAorCQkJIyBBZGQgbmV3IGNoYW5nZXMgYmVpbmcgcGxhY2VkIGluIHRyZWUgYnkgbWVyZ2UKKwkJCW15IEBjbWQgPSAocXcvcmV2LWxpc3QgLS1yZXZlcnNlLywKKwkJCQkJICAgJHBhcmVudCwgcXcvLS1ub3QvKTsKKwkJCWZvcmVhY2ggbXkgJHBhciAoQHBhcmVudHMpIHsKKwkJCQl1bmxlc3MgKCRwYXIgZXEgJHBhcmVudCkgeworCQkJCQlwdXNoIEBjbWQsICRwYXI7CisJCQkJfQorCQkJfQorCQkJbXkgQHJldnNpbiA9ICgpOworCQkJbXkgKCRyZXZsaXN0LCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoQGNtZCk7CisJCQl3aGlsZSAoPCRyZXZsaXN0PikgeworCQkJCW15ICRpcmV2ID0gJF87CisJCQkJY2hvbXAgJGlyZXY7CisJCQkJbXkgKHVuZGVmLCAkY3N2bnJldiwgdW5kZWYpID0KKwkJCQkJY210X21ldGFkYXRhKCRpcmV2KTsKKwkJCQl1bmxlc3MgKGRlZmluZWQgJGNzdm5yZXYpIHsKKwkJCQkJIyBBIGNoaWxkIGlzIG1pc3NpbmcgU1ZOIGFubm90YXRpb25zLi4uCisJCQkJCSMgdGhpcyBtaWdodCBiZSBPSywgb3IgbWlnaHQgbm90IGJlLgorCQkJCQl3YXJuICJXOmNoaWxkICRpcmV2IGlzIG1lcmdlZCBpbnRvIHJldmlzaW9uICIKKwkJCQkJCSAuIiRkIGJ1dCBkb2VzIG5vdCBoYXZlIGdpdC1zdm4gbWV0YWRhdGEuICIKKwkJCQkJCSAuIlRoaXMgbWVhbnMgZ2l0LXN2biBjYW5ub3QgZGV0ZXJtaW5lIHRoZSAiCisJCQkJCQkgLiJzdm4gcmV2aXNpb24gbnVtYmVycyB0byBwbGFjZSBpbnRvIHRoZSAiCisJCQkJCQkgLiJzdm46bWVyZ2VpbmZvIHByb3BlcnR5LiBZb3UgbXVzdCBlbnN1cmUgIgorCQkJCQkJIC4iYSBicmFuY2ggaXMgZW50aXJlbHkgY29tbWl0dGVkIHRvICIKKwkJCQkJCSAuIlNWTiBiZWZvcmUgbWVyZ2luZyBpdCBpbiBvcmRlciBmb3IgIgorCQkJCQkJIC4ic3ZuOm1lcmdlaW5mbyBwb3B1bGF0aW9uIHRvIGZ1bmN0aW9uICIKKwkJCQkJCSAuInByb3Blcmx5IjsKKwkJCQl9CisJCQkJcHVzaCBAcmV2c2luLCAkY3N2bnJldjsKKwkJCX0KKwkJCWNvbW1hbmRfY2xvc2VfcGlwZSgkcmV2bGlzdCwgJGN0eCk7CisKKwkJCWxhc3QgdW5sZXNzICRhbGxfcGFyZW50c19vazsKKworCQkJIyBXZSBub3cgaGF2ZSBhIGxpc3Qgb2YgYWxsIFNWTiByZXZub3Mgd2hpY2ggYXJlCisJCQkjIG1lcmdlZCBieSB0aGlzIHBhcnRpY3VsYXIgcGFyZW50LiBJbnRlZ3JhdGUgdGhlbS4KKwkJCW5leHQgaWYgJCNyZXZzaW4gPT0gLTE7CisJCQlteSAkbmV3bWVyZ2VpbmZvID0gIiRicmFuY2hwYXRoOiIgLiBqb2luKCcsJywgQHJldnNpbik7CisJCQkkYWdncmVnYXRlX21lcmdlaW5mbyA9CisJCQkJbWVyZ2VfbWVyZ2VfaW5mbygkYWdncmVnYXRlX21lcmdlaW5mbywKKwkJCQkJCQkJJG5ld21lcmdlaW5mbywKKwkJCQkJCQkJJHRhcmdldF9icmFuY2gpOworCQl9CisJCWlmICgkYWxsX3BhcmVudHNfb2sgYW5kICRhZ2dyZWdhdGVfbWVyZ2VpbmZvKSB7CisJCQlyZXR1cm4gJGFnZ3JlZ2F0ZV9tZXJnZWluZm87CisJCX0KKwl9CisKKwlyZXR1cm4gdW5kZWY7Cit9CisKK3N1YiBkY29tbWl0X3JlYmFzZSB7CisJbXkgKCRpc19sYXN0LCAkY3VycmVudCwgJGZldGNoZWRfcmVmLCAkc3ZuX2Vycm9yKSA9IEBfOworCW15IEBkaWZmOworCisJaWYgKCRzdm5fZXJyb3IpIHsKKwkJcHJpbnQgU1RERVJSICJcbkVSUk9SIGZyb20gU1ZOOlxuIiwKKwkJCQkkc3ZuX2Vycm9yLT5leHBhbmRlZF9tZXNzYWdlLCAiXG4iOworCX0KKwl1bmxlc3MgKCRfbm9fcmViYXNlKSB7CisJCSMgd2UgYWx3YXlzIHdhbnQgdG8gcmViYXNlIGFnYWluc3QgdGhlIGN1cnJlbnQgSEVBRCwKKwkJIyBub3QgYW55IGhlYWQgdGhhdCB3YXMgcGFzc2VkIHRvIHVzCisJCUBkaWZmID0gY29tbWFuZCgnZGlmZi10cmVlJywgJGN1cnJlbnQsCisJICAgICAgICAgICAgICAgICAgICRmZXRjaGVkX3JlZiwgJy0tJyk7CisJCW15IEBmaW5pc2g7CisJCWlmIChAZGlmZikgeworCQkJQGZpbmlzaCA9IHJlYmFzZV9jbWQoKTsKKwkJCXByaW50IFNUREVSUiAiVzogJGN1cnJlbnQgYW5kICIsICRmZXRjaGVkX3JlZiwKKwkJCSAgICAgICAgICAgICAiIGRpZmZlciwgdXNpbmcgQGZpbmlzaDpcbiIsCisJCQkgICAgICAgICAgICAgam9pbigiXG4iLCBAZGlmZiksICJcbiI7CisJCX0gZWxzaWYgKCRpc19sYXN0KSB7CisJCQlwcmludCAiTm8gY2hhbmdlcyBiZXR3ZWVuICIsICRjdXJyZW50LCAiIGFuZCAiLAorCQkJICAgICAgJGZldGNoZWRfcmVmLAorCQkJICAgICAgIlxuUmVzZXR0aW5nIHRvIHRoZSBsYXRlc3QgIiwKKwkJCSAgICAgICRmZXRjaGVkX3JlZiwgIlxuIjsKKwkJCUBmaW5pc2ggPSBxdy9yZXNldCAtLW1peGVkLzsKKwkJfQorCQljb21tYW5kX25vaXN5KEBmaW5pc2gsICRmZXRjaGVkX3JlZikgaWYgQGZpbmlzaDsKKwl9CisJaWYgKCRzdm5fZXJyb3IpIHsKKwkJZGllICJFUlJPUjogTm90IGFsbCBjaGFuZ2VzIGhhdmUgYmVlbiBjb21taXR0ZWQgaW50byBTVk4iCisJCQkuKCRfbm9fcmViYXNlID8gIi5cbiIgOiAiLCBob3dldmVyIHRoZSBjb21taXR0ZWRcbiIKKwkJCS4ib25lcyAoaWYgYW55KSBzZWVtIHRvIGJlIHN1Y2Nlc3NmdWxseSBpbnRlZ3JhdGVkICIKKwkJCS4iaW50byB0aGUgd29ya2luZyB0cmVlLlxuIikKKwkJCS4iUGxlYXNlIHNlZSB0aGUgYWJvdmUgbWVzc2FnZXMgZm9yIGRldGFpbHMuXG4iOworCX0KKwlyZXR1cm4gQGRpZmY7Cit9CisKK3N1YiBjbWRfZGNvbW1pdCB7CisJbXkgJGhlYWQgPSBzaGlmdDsKKwljb21tYW5kX25vaXN5KHF3L3VwZGF0ZS1pbmRleCAtLXJlZnJlc2gvKTsKKwlnaXRfY21kX3RyeSB7IGNvbW1hbmRfb25lbGluZShxdy9kaWZmLWluZGV4IC0tcXVpZXQgSEVBRCAtLS8pIH0KKwkJJ0Nhbm5vdCBkY29tbWl0IHdpdGggYSBkaXJ0eSBpbmRleC4gIENvbW1pdCB5b3VyIGNoYW5nZXMgZmlyc3QsICcKKwkJLiAib3Igc3Rhc2ggdGhlbSB3aXRoIGBnaXQgc3Rhc2gnLlxuIjsKKwkkaGVhZCB8fD0gJ0hFQUQnOworCisJbXkgJG9sZF9oZWFkOworCWlmICgkaGVhZCBuZSAnSEVBRCcpIHsKKwkJJG9sZF9oZWFkID0gZXZhbCB7CisJCQljb21tYW5kX29uZWxpbmUoW3F3L3N5bWJvbGljLXJlZiAtcSBIRUFEL10pCisJCX07CisJCWlmICgkb2xkX2hlYWQpIHsKKwkJCSRvbGRfaGVhZCA9fiBze15yZWZzL2hlYWRzL317fTsKKwkJfSBlbHNlIHsKKwkJCSRvbGRfaGVhZCA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUocXcvcmV2LXBhcnNlIEhFQUQvKSB9OworCQl9CisJCWNvbW1hbmQoWydjaGVja291dCcsICRoZWFkXSwgU1RERVJSID0+IDApOworCX0KKworCW15IEByZWZzOworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJywgXEByZWZzKTsKKwl1bmxlc3MgKCRncykgeworCQlkaWUgIlVuYWJsZSB0byBkZXRlcm1pbmUgdXBzdHJlYW0gU1ZOIGluZm9ybWF0aW9uIGZyb20gIiwKKwkJICAgICIkaGVhZCBoaXN0b3J5LlxuUGVyaGFwcyB0aGUgcmVwb3NpdG9yeSBpcyBlbXB0eS4iOworCX0KKworCWlmIChkZWZpbmVkICRfY29tbWl0X3VybCkgeworCQkkdXJsID0gJF9jb21taXRfdXJsOworCX0gZWxzZSB7CisJCSR1cmwgPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQnLAorCQkJICAgICAgInN2bi1yZW1vdGUuJGdzLT57cmVwb19pZH0uY29tbWl0dXJsIikgfTsKKwkJaWYgKCEkdXJsKSB7CisJCQkkdXJsID0gJGdzLT5mdWxsX3B1c2h1cmwKKwkJfQorCX0KKworCW15ICRsYXN0X3JldiA9ICRfcmV2aXNpb24gaWYgZGVmaW5lZCAkX3JldmlzaW9uOworCWlmICgkdXJsKSB7CisJCXByaW50ICJDb21taXR0aW5nIHRvICR1cmwgLi4uXG4iOworCX0KKwlteSAoJGxpbmVhcl9yZWZzLCAkcGFyZW50cykgPSBsaW5lYXJpemVfaGlzdG9yeSgkZ3MsIFxAcmVmcyk7CisJaWYgKCRfbm9fcmViYXNlICYmIHNjYWxhcihAJGxpbmVhcl9yZWZzKSA+IDEpIHsKKwkJd2FybiAiQXR0ZW1wdGluZyB0byBjb21taXQgbW9yZSB0aGFuIG9uZSBjaGFuZ2Ugd2hpbGUgIiwKKwkJICAgICAiLS1uby1yZWJhc2UgaXMgZW5hYmxlZC5cbiIsCisJCSAgICAgIklmIHRoZXNlIGNoYW5nZXMgZGVwZW5kIG9uIGVhY2ggb3RoZXIsIHJlLXJ1bm5pbmcgIiwKKwkJICAgICAid2l0aG91dCAtLW5vLXJlYmFzZSBtYXkgYmUgcmVxdWlyZWQuIgorCX0KKworCWlmIChkZWZpbmVkICRfaW50ZXJhY3RpdmUpeworCQlteSAkYXNrX2RlZmF1bHQgPSAieSI7CisJCWZvcmVhY2ggbXkgJGQgKEAkbGluZWFyX3JlZnMpeworCQkJbXkgKCRmaCwgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKHF3KHNob3cgLS1zdW1tYXJ5KSwgIiRkIik7CisJCQl3aGlsZSAoPCRmaD4peworCQkJCXByaW50ICRfOworCQkJfQorCQkJY29tbWFuZF9jbG9zZV9waXBlKCRmaCwgJGN0eCk7CisJCQkkXyA9IGFzaygiQ29tbWl0IHRoaXMgcGF0Y2ggdG8gU1ZOPyAoW3ldZXMgKGRlZmF1bHQpfFtuXW98W3FddWl0fFthXWxsKTogIiwKKwkJCSAgICAgICAgIHZhbGlkX3JlID0+IHFyL14oPzp5ZXN8eXxub3xufHF1aXR8cXxhbGx8YSkvaSwKKwkJCSAgICAgICAgIGRlZmF1bHQgPT4gJGFza19kZWZhdWx0KTsKKwkJCWRpZSAiQ29tbWl0IHRoaXMgcGF0Y2ggcmVwbHkgcmVxdWlyZWQiIHVubGVzcyBkZWZpbmVkICRfOworCQkJaWYgKC9eW25xXS9pKSB7CisJCQkJZXhpdCgwKTsKKwkJCX0gZWxzaWYgKC9eYS9pKSB7CisJCQkJbGFzdDsKKwkJCX0KKwkJfQorCX0KKworCW15ICRleHBlY3RfdXJsID0gJHVybDsKKworCW15ICRwdXNoX21lcmdlX2luZm8gPSBldmFsIHsKKwkJY29tbWFuZF9vbmVsaW5lKHF3L2NvbmZpZyAtLWdldCBzdm4ucHVzaG1lcmdlaW5mby8pCisJCX07CisJaWYgKG5vdCBkZWZpbmVkKCRwdXNoX21lcmdlX2luZm8pCisJCQlvciAkcHVzaF9tZXJnZV9pbmZvIGVxICJmYWxzZSIKKwkJCW9yICRwdXNoX21lcmdlX2luZm8gZXEgIm5vIgorCQkJb3IgJHB1c2hfbWVyZ2VfaW5mbyBlcSAibmV2ZXIiKSB7CisJCSRwdXNoX21lcmdlX2luZm8gPSAwOworCX0KKworCXVubGVzcyAoZGVmaW5lZCgkX21lcmdlX2luZm8pIHx8ICEgJHB1c2hfbWVyZ2VfaW5mbykgeworCQkjIFByZWZsaWdodCBjaGVjayBvZiBjaGFuZ2VzIHRvIGVuc3VyZSBubyBpc3N1ZXMgd2l0aCBtZXJnZWluZm8KKwkJIyBUaGlzIGluY2x1ZGVzIGNoZWNrIGZvciB1bmNvbW1pdHRlZC10by1TVk4gcGFyZW50cworCQkjIChvdGhlciB0aGFuIHRoZSBmaXJzdCBwYXJlbnQsIHdoaWNoIHdlIHdpbGwgaGFuZGxlKSwKKwkJIyBpbmZvcm1hdGlvbiBmcm9tIGRpZmZlcmVudCBTVk4gcmVwb3MsIGFuZCBwYXRocworCQkjIHdoaWNoIGFyZSBub3QgdW5kZXJuZWF0aCB0aGlzIHJlcG9zaXRvcnkgcm9vdC4KKwkJbXkgJHJvb3R1cmwgPSAkZ3MtPnJlcG9zX3Jvb3Q7CisJICAgICAgICBHaXQ6OlNWTjo6cmVtb3ZlX3VzZXJuYW1lKCRyb290dXJsKTsKKwkJZm9yZWFjaCBteSAkZCAoQCRsaW5lYXJfcmVmcykgeworCQkJbXkgJXBhcmVudHNoYXNoOworCQkJcmVhZF9jb21taXRfcGFyZW50cyhcJXBhcmVudHNoYXNoLCAkZCk7CisJCQlteSBAcmVhbHBhcmVudHMgPSBAeyRwYXJlbnRzaGFzaHskZH19OworCQkJaWYgKCQjcmVhbHBhcmVudHMgPiAwKSB7CisJCQkJIyBNZXJnZSBjb21taXQKKwkJCQlzaGlmdCBAcmVhbHBhcmVudHM7ICMgUmVtb3ZlL2lnbm9yZSBmaXJzdCBwYXJlbnQKKwkJCQlmb3JlYWNoIG15ICRwYXJlbnQgKEByZWFscGFyZW50cykgeworCQkJCQlteSAoJGJyYW5jaHVybCwgJHN2bnJldiwgJHBhcnV1aWQpID0gY210X21ldGFkYXRhKCRwYXJlbnQpOworCQkJCQl1bmxlc3MgKGRlZmluZWQgJHBhcnV1aWQpIHsKKwkJCQkJCSMgQSBwYXJlbnQgaXMgbWlzc2luZyBTVk4gYW5ub3RhdGlvbnMuLi4KKwkJCQkJCSMgYWJvcnQgdGhlIHdob2xlIG9wZXJhdGlvbi4KKwkJCQkJCWZhdGFsICIkcGFyZW50IGlzIG1lcmdlZCBpbnRvIHJldmlzaW9uICRkLCAiCisJCQkJCQkJIC4iYnV0IGRvZXMgbm90IGhhdmUgZ2l0LXN2biBtZXRhZGF0YS4gIgorCQkJCQkJCSAuIkVpdGhlciBkY29tbWl0IHRoZSBicmFuY2ggb3IgdXNlIGEgIgorCQkJCQkJCSAuImxvY2FsIGNoZXJyeS1waWNrLCBGRiBtZXJnZSwgb3IgcmViYXNlICIKKwkJCQkJCQkgLiJpbnN0ZWFkIG9mIGFuIGV4cGxpY2l0IG1lcmdlIGNvbW1pdC4iOworCQkJCQl9CisKKwkJCQkJdW5sZXNzICgkcGFydXVpZCBlcSAkdXVpZCkgeworCQkJCQkJIyBQYXJlbnQgaGFzIFNWTiBtZXRhZGF0YSBmcm9tIGRpZmZlcmVudCByZXBvc2l0b3J5CisJCQkJCQlmYXRhbCAibWVyZ2UgcGFyZW50ICRwYXJlbnQgZm9yIGNoYW5nZSAkZCBoYXMgIgorCQkJCQkJCSAuImdpdC1zdm4gdXVpZCAkcGFydXVpZCwgd2hpbGUgY3VycmVudCBjaGFuZ2UgIgorCQkJCQkJCSAuImhhcyB1dWlkICR1dWlkISI7CisJCQkJCX0KKworCQkJCQl1bmxlc3MgKCRicmFuY2h1cmwgPX4gL15cUSRyb290dXJsXEUoLiopLykgeworCQkJCQkJIyBUaGlzIGJyYW5jaCBpcyB2ZXJ5IHN0cmFuZ2UgaW5kZWVkLgorCQkJCQkJZmF0YWwgIm1lcmdlIHBhcmVudCAkcGFyZW50IGZvciAkZCBpcyBvbiBicmFuY2ggIgorCQkJCQkJCSAuIiRicmFuY2h1cmwsIHdoaWNoIGlzIG5vdCB1bmRlciB0aGUgIgorCQkJCQkJCSAuImdpdC1zdm4gcm9vdCAkcm9vdHVybCEiOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJbXkgJHJld3JpdHRlbl9wYXJlbnQ7CisJbXkgJGN1cnJlbnRfaGVhZCA9IGNvbW1hbmRfb25lbGluZShxdy9yZXYtcGFyc2UgSEVBRC8pOworCUdpdDo6U1ZOOjpyZW1vdmVfdXNlcm5hbWUoJGV4cGVjdF91cmwpOworCWlmIChkZWZpbmVkKCRfbWVyZ2VfaW5mbykpIHsKKwkJJF9tZXJnZV9pbmZvID1+IHRyeyB9e1xufTsKKwl9CisJd2hpbGUgKDEpIHsKKwkJbXkgJGQgPSBzaGlmdCBAJGxpbmVhcl9yZWZzIG9yIGxhc3Q7CisJCXVubGVzcyAoZGVmaW5lZCAkbGFzdF9yZXYpIHsKKwkJCSh1bmRlZiwgJGxhc3RfcmV2LCB1bmRlZikgPSBjbXRfbWV0YWRhdGEoIiRkfjEiKTsKKwkJCXVubGVzcyAoZGVmaW5lZCAkbGFzdF9yZXYpIHsKKwkJCQlmYXRhbCAiVW5hYmxlIHRvIGV4dHJhY3QgcmV2aXNpb24gaW5mb3JtYXRpb24gIiwKKwkJCQkgICAgICAiZnJvbSBjb21taXQgJGR+MSI7CisJCQl9CisJCX0KKwkJaWYgKCRfZHJ5X3J1bikgeworCQkJcHJpbnQgImRpZmYtdHJlZSAkZH4xICRkXG4iOworCQl9IGVsc2UgeworCQkJbXkgJGNtdF9yZXY7CisKKwkJCXVubGVzcyAoZGVmaW5lZCgkX21lcmdlX2luZm8pIHx8ICEgJHB1c2hfbWVyZ2VfaW5mbykgeworCQkJCSRfbWVyZ2VfaW5mbyA9IHBvcHVsYXRlX21lcmdlX2luZm8oJGQsICRncywKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dWlkLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmVhcl9yZWZzLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJld3JpdHRlbl9wYXJlbnQpOworCQkJfQorCisJCQlteSAlZWRfb3B0cyA9ICggciA9PiAkbGFzdF9yZXYsCisJCQkgICAgICAgICAgICAgICAgbG9nID0+IGdldF9jb21taXRfZW50cnkoJGQpLT57bG9nfSwKKwkJCSAgICAgICAgICAgICAgICByYSA9PiBHaXQ6OlNWTjo6UmEtPm5ldygkdXJsKSwKKwkJCSAgICAgICAgICAgICAgICBjb25maWcgPT4gU1ZOOjpDb3JlOjpjb25maWdfZ2V0X2NvbmZpZygKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICRHaXQ6OlNWTjo6UmE6OmNvbmZpZ19kaXIKKwkJCSAgICAgICAgICAgICAgICApLAorCQkJICAgICAgICAgICAgICAgIHRyZWVfYSA9PiAiJGR+MSIsCisJCQkgICAgICAgICAgICAgICAgdHJlZV9iID0+ICRkLAorCQkJICAgICAgICAgICAgICAgIGVkaXRvcl9jYiA9PiBzdWIgeworCQkJICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiQ29tbWl0dGVkIHIkX1swXVxuIjsKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgJGNtdF9yZXYgPSAkX1swXTsKKwkJCSAgICAgICAgICAgICAgICB9LAorCQkJCQltZXJnZWluZm8gPT4gJF9tZXJnZV9pbmZvLAorCQkJICAgICAgICAgICAgICAgIHN2bl9wYXRoID0+ICcnKTsKKworCQkJbXkgJGVycl9oYW5kbGVyID0gJFNWTjo6RXJyb3I6OmhhbmRsZXI7CisJCQkkU1ZOOjpFcnJvcjo6aGFuZGxlciA9IHN1YiB7CisJCQkJbXkgJGVyciA9IHNoaWZ0OworCQkJCWRjb21taXRfcmViYXNlKDEsICRjdXJyZW50X2hlYWQsICRncy0+cmVmbmFtZSwKKwkJCQkJJGVycik7CisJCQl9OworCisJCQlpZiAoIUdpdDo6U1ZOOjpFZGl0b3ItPm5ldyhcJWVkX29wdHMpLT5hcHBseV9kaWZmKSB7CisJCQkJcHJpbnQgIk5vIGNoYW5nZXNcbiRkfjEgPT0gJGRcbiI7CisJCQl9IGVsc2lmICgkcGFyZW50cy0+eyRkfSAmJiBAeyRwYXJlbnRzLT57JGR9fSkgeworCQkJCSRncy0+e2luamVjdF9wYXJlbnRzX2Rjb21taXR9LT57JGNtdF9yZXZ9ID0KKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmVudHMtPnskZH07CisJCQl9CisJCQkkX2ZldGNoX2FsbCA/ICRncy0+ZmV0Y2hfYWxsIDogJGdzLT5mZXRjaDsKKwkJCSRTVk46OkVycm9yOjpoYW5kbGVyID0gJGVycl9oYW5kbGVyOworCQkJJGxhc3RfcmV2ID0gJGNtdF9yZXY7CisJCQluZXh0IGlmICRfbm9fcmViYXNlOworCisJCQlteSBAZGlmZiA9IGRjb21taXRfcmViYXNlKEAkbGluZWFyX3JlZnMgPT0gMCwgJGQsCisJCQkJCQkkZ3MtPnJlZm5hbWUsIHVuZGVmKTsKKworCQkJJHJld3JpdHRlbl9wYXJlbnQgPSBjb21tYW5kX29uZWxpbmUocXcvcmV2LXBhcnNlLywKKwkJCQkJCQkkZ3MtPnJlZm5hbWUpOworCisJCQlpZiAoQGRpZmYpIHsKKwkJCQkkY3VycmVudF9oZWFkID0gY29tbWFuZF9vbmVsaW5lKHF3L3Jldi1wYXJzZQorCQkJCQkJCQlIRUFELyk7CisJCQkJQHJlZnMgPSAoKTsKKwkJCQlteSAoJHVybF8sICRyZXZfLCAkdXVpZF8sICRnc18pID0KKwkJCQkgICAgICAgICAgICAgIHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJywgXEByZWZzKTsKKwkJCQlteSAoJGxpbmVhcl9yZWZzXywgJHBhcmVudHNfKSA9CisJCQkJICAgICAgICAgICAgICBsaW5lYXJpemVfaGlzdG9yeSgkZ3NfLCBcQHJlZnMpOworCQkJCWlmIChzY2FsYXIoQCRsaW5lYXJfcmVmcykgIT0KKwkJCQkgICAgc2NhbGFyKEAkbGluZWFyX3JlZnNfKSkgeworCQkJCQlmYXRhbCAiIyBvZiByZXZpc2lvbnMgY2hhbmdlZCAiLAorCQkJCQkgICJcbmJlZm9yZTpcbiIsCisJCQkJCSAgam9pbigiXG4iLCBAJGxpbmVhcl9yZWZzKSwKKwkJCQkJICAiXG5cbmFmdGVyOlxuIiwKKwkJCQkJICBqb2luKCJcbiIsIEAkbGluZWFyX3JlZnNfKSwgIlxuIiwKKwkJCQkJICAnSWYgeW91IGFyZSBhdHRlbXB0aW5nIHRvIGNvbW1pdCAnLAorCQkJCQkgICJtZXJnZXMsIHRyeSBydW5uaW5nOlxuXHQiLAorCQkJCQkgICdnaXQgcmViYXNlIC0taW50ZXJhY3RpdmUnLAorCQkJCQkgICctLXJlYmFzZS1tZXJnZXMgJywKKwkJCQkJICAkZ3MtPnJlZm5hbWUsCisJCQkJCSAgIlxuQmVmb3JlIGRjb21taXR0aW5nIjsKKwkJCQl9CisJCQkJaWYgKCR1cmxfIG5lICRleHBlY3RfdXJsKSB7CisJCQkJCWlmICgkdXJsXyBlcSAkZ3MtPm1ldGFkYXRhX3VybCkgeworCQkJCQkJcHJpbnQKKwkJCQkJCSAgIkFjY2VwdGluZyByZXdyaXR0ZW4gVVJMOiIsCisJCQkJCQkgICIgJHVybF9cbiI7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlmYXRhbAorCQkJCQkJICAiVVJMIG1pc21hdGNoIGFmdGVyIHJlYmFzZToiLAorCQkJCQkJICAiICR1cmxfICE9ICRleHBlY3RfdXJsIjsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoJHV1aWRfIG5lICR1dWlkKSB7CisJCQkJCWZhdGFsICJ1dWlkIG1pc21hdGNoIGFmdGVyIHJlYmFzZTogIiwKKwkJCQkJICAgICAgIiR1dWlkXyAhPSAkdXVpZCI7CisJCQkJfQorCQkJCSMgcmVtYXAgcGFyZW50cworCQkJCW15ICglcCwgQGwsICRpKTsKKwkJCQlmb3IgKCRpID0gMDsgJGkgPCBzY2FsYXIgQCRsaW5lYXJfcmVmczsgJGkrKykgeworCQkJCQlteSAkbmV3ID0gJGxpbmVhcl9yZWZzXy0+WyRpXSBvciBuZXh0OworCQkJCQkkcHskbmV3fSA9CisJCQkJCQkkcGFyZW50cy0+eyRsaW5lYXJfcmVmcy0+WyRpXX07CisJCQkJCXB1c2ggQGwsICRuZXc7CisJCQkJfQorCQkJCSRwYXJlbnRzID0gXCVwOworCQkJCSRsaW5lYXJfcmVmcyA9IFxAbDsKKwkJCQl1bmRlZiAkbGFzdF9yZXY7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoJG9sZF9oZWFkKSB7CisJCW15ICRuZXdfaGVhZCA9IGNvbW1hbmRfb25lbGluZShxdy9yZXYtcGFyc2UgSEVBRC8pOworCQlteSAkbmV3X2lzX3N5bWJvbGljID0gZXZhbCB7CisJCQljb21tYW5kX29uZWxpbmUocXcvc3ltYm9saWMtcmVmIC1xIEhFQUQvKTsKKwkJfTsKKwkJaWYgKCRuZXdfaXNfc3ltYm9saWMpIHsKKwkJCXByaW50ICJkY29tbWl0dGVkIHRoZSBicmFuY2ggIiwgJGhlYWQsICJcbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiZGNvbW1pdHRlZCBvbiBhIGRldGFjaGVkIEhFQUQgYmVjYXVzZSB5b3UgZ2F2ZSAiLAorCQkJICAgICAgImEgcmV2aXNpb24gYXJndW1lbnQuXG4iLAorCQkJICAgICAgIlRoZSByZXdyaXR0ZW4gY29tbWl0IGlzOiAiLCAkbmV3X2hlYWQsICJcbiI7CisJCX0KKwkJY29tbWFuZChbJ2NoZWNrb3V0JywgJG9sZF9oZWFkXSwgU1RERVJSID0+IDApOworCX0KKworCXVubGluayAkZ3MtPntpbmRleH07Cit9CisKK3N1YiBjbWRfYnJhbmNoIHsKKwlteSAoJGJyYW5jaF9uYW1lLCAkaGVhZCkgPSBAXzsKKworCXVubGVzcyAoZGVmaW5lZCAkYnJhbmNoX25hbWUgJiYgbGVuZ3RoICRicmFuY2hfbmFtZSkgeworCQlkaWUoKCRfdGFnID8gInRhZyIgOiAiYnJhbmNoIikgLiAiIG5hbWUgcmVxdWlyZWRcbiIpOworCX0KKwkkaGVhZCB8fD0gJ0hFQUQnOworCisJbXkgKHVuZGVmLCAkcmV2LCB1bmRlZiwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCRoZWFkKTsKKwlteSAkc3JjID0gJGdzLT5mdWxsX3B1c2h1cmw7CisKKwlteSAkcmVtb3RlID0gR2l0OjpTVk46OnJlYWRfYWxsX3JlbW90ZXMoKS0+eyRncy0+e3JlcG9faWR9fTsKKwlteSAkYWxsZ2xvYnMgPSAkcmVtb3RlLT57ICRfdGFnID8gJ3RhZ3MnIDogJ2JyYW5jaGVzJyB9OworCW15ICRnbG9iOworCWlmICgkI3skYWxsZ2xvYnN9ID09IDApIHsKKwkJJGdsb2IgPSAkYWxsZ2xvYnMtPlswXTsKKwl9IGVsc2UgeworCQl1bmxlc3MoZGVmaW5lZCAkX2JyYW5jaF9kZXN0KSB7CisJCQlkaWUgIk11bHRpcGxlICIsCisJCQkgICAgJF90YWcgPyAidGFnIiA6ICJicmFuY2giLAorCQkJICAgICIgcGF0aHMgZGVmaW5lZCBmb3IgU3VidmVyc2lvbiByZXBvc2l0b3J5LlxuIiwKKwkJICAgICAgICAgICAgIllvdSBtdXN0IHNwZWNpZnkgd2hlcmUgeW91IHdhbnQgdG8gY3JlYXRlIHRoZSAiLAorCQkgICAgICAgICAgICAkX3RhZyA/ICJ0YWciIDogImJyYW5jaCIsCisJCSAgICAgICAgICAgICIgd2l0aCB0aGUgLS1kZXN0aW5hdGlvbiBhcmd1bWVudC5cbiI7CisJCX0KKwkJZm9yZWFjaCBteSAkZyAoQHskYWxsZ2xvYnN9KSB7CisJCQlteSAkcmUgPSBHaXQ6OlNWTjo6RWRpdG9yOjpnbG9iMnBhdCgkZy0+e3BhdGh9LT57bGVmdH0pOworCQkJaWYgKCRfYnJhbmNoX2Rlc3QgPX4gLyRyZS8pIHsKKwkJCQkkZ2xvYiA9ICRnOworCQkJCWxhc3Q7CisJCQl9CisJCX0KKwkJdW5sZXNzIChkZWZpbmVkICRnbG9iKSB7CisJCQlteSAkZGVzdF9yZSA9IHFyL1xiXFEkX2JyYW5jaF9kZXN0XEVcYi87CisJCQlmb3JlYWNoIG15ICRnIChAeyRhbGxnbG9ic30pIHsKKwkJCQkkZy0+e3BhdGh9LT57bGVmdH0gPX4gLyRkZXN0X3JlLyBvciBuZXh0OworCQkJCWlmIChkZWZpbmVkICRnbG9iKSB7CisJCQkJCWRpZSAiQW1iaWd1b3VzIGRlc3RpbmF0aW9uOiAiLAorCQkJCQkgICAgJF9icmFuY2hfZGVzdCwgIlxubWF0Y2hlcyBib3RoICciLAorCQkJCQkgICAgJGdsb2ItPntwYXRofS0+e2xlZnR9LCAiJyBhbmQgJyIsCisJCQkJCSAgICAkZy0+e3BhdGh9LT57bGVmdH0sICInXG4iOworCQkJCX0KKwkJCQkkZ2xvYiA9ICRnOworCQkJfQorCQkJdW5sZXNzIChkZWZpbmVkICRnbG9iKSB7CisJCQkJZGllICJVbmtub3duICIsCisJCQkJICAgICRfdGFnID8gInRhZyIgOiAiYnJhbmNoIiwKKwkJCQkgICAgIiBkZXN0aW5hdGlvbiAkX2JyYW5jaF9kZXN0XG4iOworCQkJfQorCQl9CisJfQorCW15ICgkbGZ0LCAkcmd0KSA9IEB7ICRnbG9iLT57cGF0aH0gfXtxdy9sZWZ0IHJpZ2h0L307CisJbXkgJHVybDsKKwlpZiAoZGVmaW5lZCAkX2NvbW1pdF91cmwpIHsKKwkJJHVybCA9ICRfY29tbWl0X3VybDsKKwl9IGVsc2UgeworCQkkdXJsID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywKKwkJCSJzdm4tcmVtb3RlLiRncy0+e3JlcG9faWR9LmNvbW1pdHVybCIpIH07CisJCWlmICghJHVybCkgeworCQkJJHVybCA9ICRyZW1vdGUtPntwdXNodXJsfSB8fCAkcmVtb3RlLT57dXJsfTsKKwkJfQorCX0KKwlteSAkZHN0ID0gam9pbiAnLycsICR1cmwsICRsZnQsICRicmFuY2hfbmFtZSwgKCRyZ3QgfHwgKCkpOworCisJaWYgKCRkc3QgPX4gL15odHRwczovICYmICRzcmMgPX4gL15odHRwOi8pIHsKKwkJJHNyYz1+cy9eaHR0cDovaHR0cHM6LzsKKwl9CisKKwk6Ol9yZXFfc3ZuKCk7CisJcmVxdWlyZSBTVk46OkNsaWVudDsKKworCW15ICgkY29uZmlnLCAkYmF0b24sIHVuZGVmKSA9IEdpdDo6U1ZOOjpSYTo6cHJlcGFyZV9jb25maWdfb25jZSgpOworCW15ICRjdHggPSBTVk46OkNsaWVudC0+bmV3KAorCQlhdXRoID0+ICRiYXRvbiwKKwkJY29uZmlnID0+ICRjb25maWcsCisJCWxvZ19tc2cgPT4gc3ViIHsKKwkJCSR7ICRfWzBdIH0gPSBkZWZpbmVkICRfbWVzc2FnZQorCQkJCT8gJF9tZXNzYWdlCisJCQkJOiAnQ3JlYXRlICcgLiAoJF90YWcgPyAndGFnICcgOiAnYnJhbmNoICcgKQorCQkJCS4gJGJyYW5jaF9uYW1lOworCQl9LAorCSk7CisKKwlldmFsIHsKKwkJJGN0eC0+bHMoJGRzdCwgJ0hFQUQnLCAwKTsKKwl9IGFuZCBkaWUgImJyYW5jaCAke2JyYW5jaF9uYW1lfSBhbHJlYWR5IGV4aXN0c1xuIjsKKworCWlmICgkX3BhcmVudHMpIHsKKwkJbWtfcGFyZW50X2RpcnMoJGN0eCwgJGRzdCk7CisJfQorCisJcHJpbnQgIkNvcHlpbmcgJHtzcmN9IGF0IHIke3Jldn0gdG8gJHtkc3R9Li4uXG4iOworCSRjdHgtPmNvcHkoJHNyYywgJHJldiwgJGRzdCkKKwkJdW5sZXNzICRfZHJ5X3J1bjsKKworCSMgUmVsZWFzZSByZXNvdXJjZXMgaGVsZCBieSBjdHggYmVmb3JlIGNyZWF0aW5nIGFub3RoZXIgU1ZOOjpSYQorCSMgc28gZGVzdHJ1Y3Rpb24gaXMgb3JkZXJseS4gIFRoaXMgc2VlbXMgbmVjZXNzYXJ5IHdpdGggU1ZOIDEuOS41CisJIyB0byBhdm9pZCBzZWdmYXVsdHMuCisJJGN0eCA9IHVuZGVmOworCisJJGdzLT5mZXRjaF9hbGw7Cit9CisKK3N1YiBta19wYXJlbnRfZGlycyB7CisJbXkgKCRjdHgsICRwYXJlbnQpID0gQF87CisJJHBhcmVudCA9fiBzey9bXi9dKiR9e307CisKKwlpZiAoIWV2YWx7JGN0eC0+bHMoJHBhcmVudCwgJ0hFQUQnLCAwKX0pIHsKKwkJbWtfcGFyZW50X2RpcnMoJGN0eCwgJHBhcmVudCk7CisJCXByaW50ICJDcmVhdGluZyBwYXJlbnQgZm9sZGVyICR7cGFyZW50fSAuLi5cbiI7CisJCSRjdHgtPm1rZGlyKCRwYXJlbnQpIHVubGVzcyAkX2RyeV9ydW47CisJfQorfQorCitzdWIgY21kX2ZpbmRfcmV2IHsKKwlteSAkcmV2aXNpb25fb3JfaGFzaCA9IHNoaWZ0IG9yIGRpZSAiU1ZOIG9yIGdpdCByZXZpc2lvbiByZXF1aXJlZCAiLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcyBhIGNvbW1hbmQtbGluZSBhcmd1bWVudFxuIjsKKwlteSAkcmVzdWx0OworCWlmICgkcmV2aXNpb25fb3JfaGFzaCA9fiAvXnJcZCskLykgeworCQlteSAkaGVhZCA9IHNoaWZ0OworCQkkaGVhZCB8fD0gJ0hFQUQnOworCQlteSBAcmVmczsKKwkJbXkgKHVuZGVmLCB1bmRlZiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygkaGVhZCwgXEByZWZzKTsKKwkJdW5sZXNzICgkZ3MpIHsKKwkJCWRpZSAiVW5hYmxlIHRvIGRldGVybWluZSB1cHN0cmVhbSBTVk4gaW5mb3JtYXRpb24gZnJvbSAiLAorCQkJICAgICIkaGVhZCBoaXN0b3J5XG4iOworCQl9CisJCW15ICRkZXNpcmVkX3JldmlzaW9uID0gc3Vic3RyKCRyZXZpc2lvbl9vcl9oYXNoLCAxKTsKKwkJaWYgKCRfYmVmb3JlKSB7CisJCQkkcmVzdWx0ID0gJGdzLT5maW5kX3Jldl9iZWZvcmUoJGRlc2lyZWRfcmV2aXNpb24sIDEpOworCQl9IGVsc2lmICgkX2FmdGVyKSB7CisJCQkkcmVzdWx0ID0gJGdzLT5maW5kX3Jldl9hZnRlcigkZGVzaXJlZF9yZXZpc2lvbiwgMSk7CisJCX0gZWxzZSB7CisJCQkkcmVzdWx0ID0gJGdzLT5yZXZfbWFwX2dldCgkZGVzaXJlZF9yZXZpc2lvbiwgJHV1aWQpOworCQl9CisJfSBlbHNlIHsKKwkJbXkgKHVuZGVmLCAkcmV2LCB1bmRlZikgPSBjbXRfbWV0YWRhdGEoJHJldmlzaW9uX29yX2hhc2gpOworCQkkcmVzdWx0ID0gJHJldjsKKwl9CisJcHJpbnQgIiRyZXN1bHRcbiIgaWYgJHJlc3VsdDsKK30KKworc3ViIGF1dG9fY3JlYXRlX2VtcHR5X2RpcmVjdG9yaWVzIHsKKwlteSAoJGdzKSA9IEBfOworCW15ICR2YXIgPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQnLCAnLS1ib29sJywKKwkJCQkJICJzdm4tcmVtb3RlLiRncy0+e3JlcG9faWR9LmF1dG9ta2RpcnMiKSB9OworCSMgQnkgZGVmYXVsdCwgY3JlYXRlIGVtcHR5IGRpcmVjdG9yaWVzIGJ5IGNvbnN1bHRpbmcgdGhlIHVuaGFuZGxlZCBsb2csCisJIyBidXQgYWxsb3cgc2V0dGluZyBpdCB0byAnZmFsc2UnIHRvIHNraXAgaXQuCisJcmV0dXJuICEoJHZhciAmJiAkdmFyIGVxICdmYWxzZScpOworfQorCitzdWIgY21kX3JlYmFzZSB7CisJY29tbWFuZF9ub2lzeShxdy91cGRhdGUtaW5kZXggLS1yZWZyZXNoLyk7CisJbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJ0hFQUQnKTsKKwl1bmxlc3MgKCRncykgeworCQlkaWUgIlVuYWJsZSB0byBkZXRlcm1pbmUgdXBzdHJlYW0gU1ZOIGluZm9ybWF0aW9uIGZyb20gIiwKKwkJICAgICJ3b3JraW5nIHRyZWUgaGlzdG9yeVxuIjsKKwl9CisJaWYgKCRfZHJ5X3J1bikgeworCQlwcmludCAiUmVtb3RlIEJyYW5jaDogIiAuICRncy0+cmVmbmFtZSAuICJcbiI7CisJCXByaW50ICJTVk4gVVJMOiAiIC4gJHVybCAuICJcbiI7CisJCXJldHVybjsKKwl9CisJaWYgKGNvbW1hbmQocXcvZGlmZi1pbmRleCBIRUFEIC0tLykpIHsKKwkJcHJpbnQgU1RERVJSICJDYW5ub3QgcmViYXNlIHdpdGggdW5jb21taXR0ZWQgY2hhbmdlczpcbiI7CisJCWNvbW1hbmRfbm9pc3koJ3N0YXR1cycpOworCQlleGl0IDE7CisJfQorCXVubGVzcyAoJF9sb2NhbCkgeworCQkjIHJlYmFzZSB3aWxsIGNoZWNrb3V0IGZvciB1cywgc28gbm8gbmVlZCB0byBkbyBpdCBleHBsaWNpdGx5CisJCSRfbm9fY2hlY2tvdXQgPSAndHJ1ZSc7CisJCSRfZmV0Y2hfYWxsID8gJGdzLT5mZXRjaF9hbGwgOiAkZ3MtPmZldGNoOworCX0KKwljb21tYW5kX25vaXN5KHJlYmFzZV9jbWQoKSwgJGdzLT5yZWZuYW1lKTsKKwlpZiAoYXV0b19jcmVhdGVfZW1wdHlfZGlyZWN0b3JpZXMoJGdzKSkgeworCQkkZ3MtPm1rZW1wdHlkaXJzOworCX0KK30KKworc3ViIGNtZF9zaG93X2lnbm9yZSB7CisJbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJ0hFQUQnKTsKKwkkZ3MgfHw9IEdpdDo6U1ZOLT5uZXc7CisJbXkgJHIgPSAoZGVmaW5lZCAkX3JldmlzaW9uID8gJF9yZXZpc2lvbiA6ICRncy0+cmEtPmdldF9sYXRlc3RfcmV2bnVtKTsKKwkkZ3MtPnByb3Bfd2FsaygkZ3MtPnBhdGgsICRyLCBzdWIgeworCQlteSAoJGdzLCAkcGF0aCwgJHByb3BzKSA9IEBfOworCQlwcmludCBTVERPVVQgIlxuIyAkcGF0aFxuIjsKKwkJbXkgJHMgPSAkcHJvcHMtPnsnc3ZuOmlnbm9yZSd9IG9yIHJldHVybjsKKwkJJHMgPX4gcy9bXHJcbl0rL1xuL2c7CisJCSRzID1+IHMvXlxuKy8vOworCQljaG9tcCAkczsKKwkJJHMgPX4gcyNeIyRwYXRoI2dtOworCQlwcmludCBTVERPVVQgIiRzXG4iOworCX0pOworfQorCitzdWIgY21kX3Nob3dfZXh0ZXJuYWxzIHsKKwlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcpOworCSRncyB8fD0gR2l0OjpTVk4tPm5ldzsKKwlteSAkciA9IChkZWZpbmVkICRfcmV2aXNpb24gPyAkX3JldmlzaW9uIDogJGdzLT5yYS0+Z2V0X2xhdGVzdF9yZXZudW0pOworCSRncy0+cHJvcF93YWxrKCRncy0+cGF0aCwgJHIsIHN1YiB7CisJCW15ICgkZ3MsICRwYXRoLCAkcHJvcHMpID0gQF87CisJCXByaW50IFNURE9VVCAiXG4jICRwYXRoXG4iOworCQlteSAkcyA9ICRwcm9wcy0+eydzdm46ZXh0ZXJuYWxzJ30gb3IgcmV0dXJuOworCQkkcyA9fiBzL1tcclxuXSsvXG4vZzsKKwkJY2hvbXAgJHM7CisJCSRzID1+IHMjXiMkcGF0aCNnbTsKKwkJcHJpbnQgU1RET1VUICIkc1xuIjsKKwl9KTsKK30KKworc3ViIGNtZF9jcmVhdGVfaWdub3JlIHsKKwlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcpOworCSRncyB8fD0gR2l0OjpTVk4tPm5ldzsKKwlteSAkciA9IChkZWZpbmVkICRfcmV2aXNpb24gPyAkX3JldmlzaW9uIDogJGdzLT5yYS0+Z2V0X2xhdGVzdF9yZXZudW0pOworCSRncy0+cHJvcF93YWxrKCRncy0+cGF0aCwgJHIsIHN1YiB7CisJCW15ICgkZ3MsICRwYXRoLCAkcHJvcHMpID0gQF87CisJCSMgJHBhdGggaXMgb2YgdGhlIGZvcm0gL3BhdGgvdG8vZGlyLworCQkkcGF0aCA9ICcuJyAuICRwYXRoOworCQkjIFNWTiBjYW4gaGF2ZSBhdHRyaWJ1dGVzIG9uIGVtcHR5IGRpcmVjdG9yaWVzLAorCQkjIHdoaWNoIGdpdCB3b24ndCB0cmFjaworCQlta3BhdGgoWyRwYXRoXSkgdW5sZXNzIC1kICRwYXRoOworCQlteSAkaWdub3JlID0gJHBhdGggLiAnLmdpdGlnbm9yZSc7CisJCW15ICRzID0gJHByb3BzLT57J3N2bjppZ25vcmUnfSBvciByZXR1cm47CisJCW9wZW4oR0lUSUdOT1JFLCAnPicsICRpZ25vcmUpCisJCSAgb3IgZmF0YWwoIkZhaWxlZCB0byBvcGVuIGAkaWdub3JlJyBmb3Igd3JpdGluZzogJCEiKTsKKwkJJHMgPX4gcy9bXHJcbl0rL1xuL2c7CisJCSRzID1+IHMvXlxuKy8vOworCQljaG9tcCAkczsKKwkJIyBQcmVmaXggYWxsIHBhdHRlcm5zIHNvIHRoYXQgdGhlIGlnbm9yZSBkb2Vzbid0IGFwcGx5CisJCSMgdG8gc3ViLWRpcmVjdG9yaWVzLgorCQkkcyA9fiBzI14jLyNnbTsKKwkJcHJpbnQgR0lUSUdOT1JFICIkc1xuIjsKKwkJY2xvc2UoR0lUSUdOT1JFKQorCQkgIG9yIGZhdGFsKCJGYWlsZWQgdG8gY2xvc2UgYCRpZ25vcmUnOiAkISIpOworCQljb21tYW5kX25vaXN5KCdhZGQnLCAnLWYnLCAkaWdub3JlKTsKKwl9KTsKK30KKworc3ViIGNtZF9ta2RpcnMgeworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJyk7CisJJGdzIHx8PSBHaXQ6OlNWTi0+bmV3OworCSRncy0+bWtlbXB0eWRpcnMoJF9yZXZpc2lvbik7Cit9CisKKyMgZ2V0X3N2bnByb3BzKFBBVEgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZWxwZXIgZm9yIGNtZF9wcm9wZ2V0IGFuZCBjbWRfcHJvcGxpc3QgYmVsb3cuCitzdWIgZ2V0X3N2bnByb3BzIHsKKwlteSAkcGF0aCA9IHNoaWZ0OworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJyk7CisJJGdzIHx8PSBHaXQ6OlNWTi0+bmV3OworCisJIyBwcmVmaXggVEhFIFBBVEggYnkgdGhlIHN1Yi1kaXJlY3RvcnkgZnJvbSB3aGljaCB0aGUgdXNlcgorCSMgaW52b2tlZCB1cy4KKwkkcGF0aCA9ICRjbWRfZGlyX3ByZWZpeCAuICRwYXRoOworCWZhdGFsKCJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OiAkcGF0aCIpIHVubGVzcyAtZSAkcGF0aDsKKwlteSAkaXNfZGlyID0gLWQgJHBhdGggPyAxIDogMDsKKwkkcGF0aCA9IGpvaW5fcGF0aHMoJGdzLT5wYXRoLCAkcGF0aCk7CisKKwkjIGNhbm9uaWNhbGl6ZSB0aGUgcGF0aCAob3RoZXJ3aXNlIGxpYnN2biB3aWxsIGFib3J0IG9yIGZhaWwgdG8KKwkjIGZpbmQgdGhlIGZpbGUpCisJJHBhdGggPSBjYW5vbmljYWxpemVfcGF0aCgkcGF0aCk7CisKKwlteSAkciA9IChkZWZpbmVkICRfcmV2aXNpb24gPyAkX3JldmlzaW9uIDogJGdzLT5yYS0+Z2V0X2xhdGVzdF9yZXZudW0pOworCW15ICRwcm9wczsKKwlpZiAoJGlzX2RpcikgeworCQkodW5kZWYsIHVuZGVmLCAkcHJvcHMpID0gJGdzLT5yYS0+Z2V0X2RpcigkcGF0aCwgJHIpOworCX0KKwllbHNlIHsKKwkJKHVuZGVmLCAkcHJvcHMpID0gJGdzLT5yYS0+Z2V0X2ZpbGUoJHBhdGgsICRyLCB1bmRlZik7CisJfQorCXJldHVybiAkcHJvcHM7Cit9CisKKyMgY21kX3Byb3BnZXQgKFBST1AsIFBBVEgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmludCB0aGUgU1ZOIHByb3BlcnR5IFBST1AgZm9yIFBBVEguCitzdWIgY21kX3Byb3BnZXQgeworCW15ICgkcHJvcCwgJHBhdGgpID0gQF87CisJJHBhdGggPSAnLicgaWYgbm90IGRlZmluZWQgJHBhdGg7CisJdXNhZ2UoMSkgaWYgbm90IGRlZmluZWQgJHByb3A7CisJbXkgJHByb3BzID0gZ2V0X3N2bnByb3BzKCRwYXRoKTsKKwlpZiAobm90IGRlZmluZWQgJHByb3BzLT57JHByb3B9KSB7CisJCWZhdGFsKCJgJHBhdGgnIGRvZXMgbm90IGhhdmUgYSBgJHByb3AnIFNWTiBwcm9wZXJ0eS4iKTsKKwl9CisJcHJpbnQgJHByb3BzLT57JHByb3B9IC4gIlxuIjsKK30KKworIyBjbWRfcHJvcHNldCAoUFJPUE5BTUUsIFBST1BWQUwsIFBBVEgpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGp1c3QgdGhlIFNWTiBwcm9wZXJ0eSBQUk9QTkFNRSB0byBQUk9QVkFMIGZvciBQQVRILgorc3ViIGNtZF9wcm9wc2V0IHsKKwlteSAoJHByb3BuYW1lLCAkcHJvcHZhbCwgJHBhdGgpID0gQF87CisJJHBhdGggPSAnLicgaWYgbm90IGRlZmluZWQgJHBhdGg7CisJJHBhdGggPSAkY21kX2Rpcl9wcmVmaXggLiAkcGF0aDsKKwl1c2FnZSgxKSBpZiBub3QgZGVmaW5lZCAkcHJvcG5hbWU7CisJdXNhZ2UoMSkgaWYgbm90IGRlZmluZWQgJHByb3B2YWw7CisJbXkgJGZpbGUgPSBiYXNlbmFtZSgkcGF0aCk7CisJbXkgJGRuID0gZGlybmFtZSgkcGF0aCk7CisJbXkgJGN1cl9wcm9wcyA9IEdpdDo6U1ZOOjpFZGl0b3I6OmNoZWNrX2F0dHIoICJzdm4tcHJvcGVydGllcyIsICRwYXRoICk7CisJbXkgQG5ld19wcm9wczsKKwlpZiAoISRjdXJfcHJvcHMgfHwgJGN1cl9wcm9wcyBlcSAidW5zZXQiIHx8ICRjdXJfcHJvcHMgZXEgIiIgfHwgJGN1cl9wcm9wcyBlcSAic2V0IikgeworCQlwdXNoIEBuZXdfcHJvcHMsICIkcHJvcG5hbWU9JHByb3B2YWwiOworCX0gZWxzZSB7CisJCSMgVE9ETzogaGFuZGxlIGNvbWJpbmluZyBwcm9wZXJ0aWVzIGJldHRlcgorCQlteSBAcHJvcHMgPSBzcGxpdCgvOy8sICRjdXJfcHJvcHMpOworCQlteSAkcmVwbGFjZWRfcHJvcDsKKwkJZm9yZWFjaCBteSAkcHJvcCAoQHByb3BzKSB7CisJCQkjIFBhcnNlICduYW1lPXZhbHVlJyBzeW50YXggYW5kIHNldCB0aGUgcHJvcGVydHkuCisJCQlpZiAoJHByb3AgPX4gLyhbXj1dKyk9KC4qKS8pIHsKKwkJCQlteSAoJG4sJHYpID0gKCQxLCQyKTsKKwkJCQlpZiAoJG4gZXEgJHByb3BuYW1lKSB7CisJCQkJCSR2ID0gJHByb3B2YWw7CisJCQkJCSRyZXBsYWNlZF9wcm9wID0gMTsKKwkJCQl9CisJCQkJcHVzaCBAbmV3X3Byb3BzLCAiJG49JHYiOworCQkJfQorCQl9CisJCWlmICghJHJlcGxhY2VkX3Byb3ApIHsKKwkJCXB1c2ggQG5ld19wcm9wcywgIiRwcm9wbmFtZT0kcHJvcHZhbCI7CisJCX0KKwl9CisJbXkgJGF0dHJmaWxlID0gIiRkbi8uZ2l0YXR0cmlidXRlcyI7CisJb3BlbiBteSAkYXR0cmZoLCAnPj4nLCAkYXR0cmZpbGUgb3IgZGllICJDYW4ndCBvcGVuICRhdHRyZmlsZTogJCFcbiI7CisJIyBUT0RPOiBkb24ndCBzaW1wbHkgYXBwZW5kIGhlcmUgaWYgJGZpbGUgYWxyZWFkeSBoYXMgc3ZuLXByb3BlcnRpZXMKKwlteSAkbmV3X3Byb3BzID0gam9pbignOycsIEBuZXdfcHJvcHMpOworCXByaW50ICRhdHRyZmggIiRmaWxlIHN2bi1wcm9wZXJ0aWVzPSRuZXdfcHJvcHNcbiIgb3IKKwkJZGllICJ3cml0ZSB0byAkYXR0cmZpbGU6ICQhXG4iOworCWNsb3NlICRhdHRyZmggb3IgZGllICJjbG9zZSAkYXR0cmZpbGU6ICQhXG4iOworfQorCisjIGNtZF9wcm9wbGlzdCAoUEFUSCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcmludCB0aGUgbGlzdCBvZiBTVk4gcHJvcGVydGllcyBmb3IgUEFUSC4KK3N1YiBjbWRfcHJvcGxpc3QgeworCW15ICRwYXRoID0gc2hpZnQ7CisJJHBhdGggPSAnLicgaWYgbm90IGRlZmluZWQgJHBhdGg7CisJbXkgJHByb3BzID0gZ2V0X3N2bnByb3BzKCRwYXRoKTsKKwlwcmludCAiUHJvcGVydGllcyBvbiAnJHBhdGgnOlxuIjsKKwlmb3JlYWNoIChzb3J0IGtleXMgJXskcHJvcHN9KSB7CisJCXByaW50ICIgICRfXG4iOworCX0KK30KKworc3ViIGNtZF9tdWx0aV9pbml0IHsKKwlteSAkdXJsID0gc2hpZnQ7CisJdW5sZXNzIChkZWZpbmVkICRfdHJ1bmsgfHwgQF9icmFuY2hlcyB8fCBAX3RhZ3MpIHsKKwkJdXNhZ2UoMSk7CisJfQorCisJJF9wcmVmaXggPSAnb3JpZ2luLycgdW5sZXNzIGRlZmluZWQgJF9wcmVmaXg7CisJaWYgKGRlZmluZWQgJHVybCkgeworCQkkdXJsID0gY2Fub25pY2FsaXplX3VybCgkdXJsKTsKKwkJaW5pdF9zdWJkaXIoQF8pOworCX0KKwlkb19naXRfaW5pdF9kYigpOworCWlmIChkZWZpbmVkICRfdHJ1bmspIHsKKwkJJF90cnVuayA9fiBzI14vKyMjOworCQlteSAkdHJ1bmtfcmVmID0gJ3JlZnMvcmVtb3Rlcy8nIC4gJF9wcmVmaXggLiAndHJ1bmsnOworCQkjIHRyeSBib3RoIG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGxvb2t1cHM6CisJCW15ICRnc190cnVuayA9IGV2YWwgeyBHaXQ6OlNWTi0+bmV3KCR0cnVua19yZWYpIH07CisJCXVubGVzcyAoJGdzX3RydW5rKSB7CisJCQlteSAoJHRydW5rX3VybCwgJHRydW5rX3BhdGgpID0KKwkJCSAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZV9zdm5fdXJsKCR1cmwsICRfdHJ1bmspOworCQkJJGdzX3RydW5rID0gR2l0OjpTVk4tPmluaXQoJHRydW5rX3VybCwgJHRydW5rX3BhdGgsCisJCQkJCQkgICB1bmRlZiwgJHRydW5rX3JlZik7CisJCX0KKwl9CisJcmV0dXJuIHVubGVzcyBAX2JyYW5jaGVzIHx8IEBfdGFnczsKKwlteSAkcmEgPSAkdXJsID8gR2l0OjpTVk46OlJhLT5uZXcoJHVybCkgOiB1bmRlZjsKKwlmb3JlYWNoIG15ICRwYXRoIChAX2JyYW5jaGVzKSB7CisJCWNvbXBsZXRlX3VybF9sc19pbml0KCRyYSwgJHBhdGgsICctLWJyYW5jaGVzLy1iJywgJF9wcmVmaXgpOworCX0KKwlmb3JlYWNoIG15ICRwYXRoIChAX3RhZ3MpIHsKKwkJY29tcGxldGVfdXJsX2xzX2luaXQoJHJhLCAkcGF0aCwgJy0tdGFncy8tdCcsICRfcHJlZml4Lid0YWdzLycpOworCX0KK30KKworc3ViIGNtZF9tdWx0aV9mZXRjaCB7CisJJEdpdDo6U1ZOOjpub19yZXVzZV9leGlzdGluZyA9IHVuZGVmOworCW15ICRyZW1vdGVzID0gR2l0OjpTVk46OnJlYWRfYWxsX3JlbW90ZXMoKTsKKwlmb3JlYWNoIG15ICRyZXBvX2lkIChzb3J0IGtleXMgJSRyZW1vdGVzKSB7CisJCWlmICgkcmVtb3Rlcy0+eyRyZXBvX2lkfS0+e3VybH0pIHsKKwkJCUdpdDo6U1ZOOjpmZXRjaF9hbGwoJHJlcG9faWQsICRyZW1vdGVzKTsKKwkJfQorCX0KK30KKworIyB0aGlzIGNvbW1hbmQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IHJlcXVpcmVzIG5vIG1ldGFkYXRhCitzdWIgY21kX2NvbW1pdF9kaWZmIHsKKwlteSAoJHRhLCAkdGIsICR1cmwpID0gQF87CisJbXkgJHVzYWdlID0gInVzYWdlOiAkMCBjb21taXQtZGlmZiAtcjxyZXZpc2lvbj4gIi4KKwkgICAgICAgICAgICAiPHRyZWUtaXNoPiA8dHJlZS1pc2g+IFs8VVJMPl0iOworCWZhdGFsKCR1c2FnZSkgaWYgKCFkZWZpbmVkICR0YSB8fCAhZGVmaW5lZCAkdGIpOworCW15ICRzdm5fcGF0aCA9ICcnOworCWlmICghZGVmaW5lZCAkdXJsKSB7CisJCW15ICRncyA9IGV2YWwgeyBHaXQ6OlNWTi0+bmV3IH07CisJCWlmICghJGdzKSB7CisJCQlmYXRhbCgiTmVlZGVkIFVSTCBvciB1c2FibGUgZ2l0LXN2biAtLWlkIGluICIsCisJCQkgICAgICAidGhlIGNvbW1hbmQtbGluZVxuIiwgJHVzYWdlKTsKKwkJfQorCQkkdXJsID0gJGdzLT51cmw7CisJCSRzdm5fcGF0aCA9ICRncy0+cGF0aDsKKwl9CisJdW5sZXNzIChkZWZpbmVkICRfcmV2aXNpb24pIHsKKwkJZmF0YWwoIi1yfC0tcmV2aXNpb24gaXMgYSByZXF1aXJlZCBhcmd1bWVudFxuIiwgJHVzYWdlKTsKKwl9CisJaWYgKGRlZmluZWQgJF9tZXNzYWdlICYmIGRlZmluZWQgJF9maWxlKSB7CisJCWZhdGFsKCJCb3RoIC0tbWVzc2FnZS8tbSBhbmQgLS1maWxlLy1GIHNwZWNpZmllZCAiLAorCQkgICAgICAiZm9yIHRoZSBjb21taXQgbWVzc2FnZS5cbiIsCisJCSAgICAgICJJIGhhdmUgbm8gaWRlYSB3aGF0IHlvdSBtZWFuIik7CisJfQorCWlmIChkZWZpbmVkICRfZmlsZSkgeworCQkkX21lc3NhZ2UgPSBmaWxlX3RvX3MoJF9maWxlKTsKKwl9IGVsc2UgeworCQkkX21lc3NhZ2UgfHw9IGdldF9jb21taXRfZW50cnkoJHRiKS0+e2xvZ307CisJfQorCW15ICRyYSB8fD0gR2l0OjpTVk46OlJhLT5uZXcoJHVybCk7CisJbXkgJHIgPSAkX3JldmlzaW9uOworCWlmICgkciBlcSAnSEVBRCcpIHsKKwkJJHIgPSAkcmEtPmdldF9sYXRlc3RfcmV2bnVtOworCX0gZWxzaWYgKCRyICF+IC9eXGQrJC8pIHsKKwkJZGllICJyZXZpc2lvbiBhcmd1bWVudDogJHIgbm90IHVuZGVyc3Rvb2QgYnkgZ2l0LXN2blxuIjsKKwl9CisJbXkgJWVkX29wdHMgPSAoIHIgPT4gJHIsCisJICAgICAgICAgICAgICAgIGxvZyA9PiAkX21lc3NhZ2UsCisJICAgICAgICAgICAgICAgIHJhID0+ICRyYSwKKwkgICAgICAgICAgICAgICAgdHJlZV9hID0+ICR0YSwKKwkgICAgICAgICAgICAgICAgdHJlZV9iID0+ICR0YiwKKwkgICAgICAgICAgICAgICAgZWRpdG9yX2NiID0+IHN1YiB7IHByaW50ICJDb21taXR0ZWQgciRfWzBdXG4iIH0sCisJICAgICAgICAgICAgICAgIHN2bl9wYXRoID0+ICRzdm5fcGF0aCApOworCWlmICghR2l0OjpTVk46OkVkaXRvci0+bmV3KFwlZWRfb3B0cyktPmFwcGx5X2RpZmYpIHsKKwkJcHJpbnQgIk5vIGNoYW5nZXNcbiR0YSA9PSAkdGJcbiI7CisJfQorfQorCitzdWIgY21kX2luZm8geworCW15ICRwYXRoX2FyZyA9IGRlZmluZWQoJF9bMF0pID8gJF9bMF0gOiAnLic7CisJbXkgJHBhdGggPSAkcGF0aF9hcmc7CisJaWYgKEZpbGU6OlNwZWMtPmZpbGVfbmFtZV9pc19hYnNvbHV0ZSgkcGF0aCkpIHsKKwkJJHBhdGggPSBjYW5vbmljYWxpemVfcGF0aCgkcGF0aCk7CisKKwkJbXkgJHRvcGxldmVsID0gZXZhbCB7CisJCQlteSBAY21kID0gcXcvcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbC87CisJCQljb21tYW5kX29uZWxpbmUoXEBjbWQsIFNUREVSUiA9PiAwKTsKKwkJfTsKKworCQkjIHJlbW92ZSAkdG9wbGV2ZWwgZnJvbSB0aGUgYWJzb2x1dGUgcGF0aDoKKwkJbXkgKCR2b2wsICRkaXJzLCAkZmlsZSkgPSBGaWxlOjpTcGVjLT5zcGxpdHBhdGgoJHBhdGgpOworCQlteSAodW5kZWYsICR0ZGlycywgJHRmaWxlKSA9IEZpbGU6OlNwZWMtPnNwbGl0cGF0aCgkdG9wbGV2ZWwpOworCQlteSBAZGlycyA9IEZpbGU6OlNwZWMtPnNwbGl0ZGlyKCRkaXJzKTsKKwkJbXkgQHRkaXJzID0gRmlsZTo6U3BlYy0+c3BsaXRkaXIoJHRkaXJzKTsKKwkJcG9wIEBkaXJzIGlmICRkaXJzWy0xXSBlcSAnJzsKKwkJcG9wIEB0ZGlycyBpZiAkdGRpcnNbLTFdIGVxICcnOworCQlwdXNoIEBkaXJzLCAkZmlsZTsKKwkJcHVzaCBAdGRpcnMsICR0ZmlsZTsKKwkJd2hpbGUgKEB0ZGlycyAmJiBAZGlycyAmJiAkdGRpcnNbMF0gZXEgJGRpcnNbMF0pIHsKKwkJCXNoaWZ0IEBkaXJzOworCQkJc2hpZnQgQHRkaXJzOworCQl9CisJCSRkaXJzID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKEBkaXJzKTsKKwkJJHBhdGggPSBGaWxlOjpTcGVjLT5jYXRwYXRoKCR2b2wsICRkaXJzKTsKKworCQkkcGF0aCA9IGNhbm9uaWNhbGl6ZV9wYXRoKCRwYXRoKTsKKwl9IGVsc2UgeworCQkkcGF0aCA9IGNhbm9uaWNhbGl6ZV9wYXRoKCRjbWRfZGlyX3ByZWZpeCAuICRwYXRoKTsKKwl9CisJaWYgKGV4aXN0cyAkX1sxXSkgeworCQlkaWUgIlRvbyBtYW55IGFyZ3VtZW50cyBzcGVjaWZpZWRcbiI7CisJfQorCisJbXkgKCRmaWxlX3R5cGUsICRkaWZmX3N0YXR1cykgPSBmaW5kX2ZpbGVfdHlwZV9hbmRfZGlmZl9zdGF0dXMoJHBhdGgpOworCisJaWYgKCEkZmlsZV90eXBlICYmICEkZGlmZl9zdGF0dXMpIHsKKwkJcHJpbnQgU1RERVJSICJzdm46ICckcGF0aCcgaXMgbm90IHVuZGVyIHZlcnNpb24gY29udHJvbFxuIjsKKwkJZXhpdCAxOworCX0KKworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJyk7CisJdW5sZXNzICgkZ3MpIHsKKwkJZGllICJVbmFibGUgdG8gZGV0ZXJtaW5lIHVwc3RyZWFtIFNWTiBpbmZvcm1hdGlvbiBmcm9tICIsCisJCSAgICAid29ya2luZyB0cmVlIGhpc3RvcnlcbiI7CisJfQorCisJIyBjYW5vbmljYWxpemVfcGF0aCgpIHdpbGwgcmV0dXJuICIiIHRvIG1ha2UgbGlic3ZuIDEuNS54IGhhcHB5LAorCSRwYXRoID0gIi4iIGlmICRwYXRoIGVxICIiOworCisJbXkgJGZ1bGxfdXJsID0gY2Fub25pY2FsaXplX3VybCggYWRkX3BhdGhfdG9fdXJsKCAkdXJsLCAkcGF0aCApICk7CisKKwlpZiAoJF91cmwpIHsKKwkJcHJpbnQgIiRmdWxsX3VybFxuIjsKKwkJcmV0dXJuOworCX0KKworCW15ICRyZXN1bHQgPSAiUGF0aDogJHBhdGhfYXJnXG4iOworCSRyZXN1bHQgLj0gIk5hbWU6ICIgLiBiYXNlbmFtZSgkcGF0aCkgLiAiXG4iIGlmICRmaWxlX3R5cGUgbmUgImRpciI7CisJJHJlc3VsdCAuPSAiVVJMOiAkZnVsbF91cmxcbiI7CisKKwlldmFsIHsKKwkJbXkgJHJlcG9zX3Jvb3QgPSAkZ3MtPnJlcG9zX3Jvb3Q7CisJCUdpdDo6U1ZOOjpyZW1vdmVfdXNlcm5hbWUoJHJlcG9zX3Jvb3QpOworCQkkcmVzdWx0IC49ICJSZXBvc2l0b3J5IFJvb3Q6ICIgLiBjYW5vbmljYWxpemVfdXJsKCRyZXBvc19yb290KSAuICJcbiI7CisJfTsKKwlpZiAoJEApIHsKKwkJJHJlc3VsdCAuPSAiUmVwb3NpdG9yeSBSb290OiAob2ZmbGluZSlcbiI7CisJfQorCTo6X3JlcV9zdm4oKTsKKwkkcmVzdWx0IC49ICJSZXBvc2l0b3J5IFVVSUQ6ICR1dWlkXG4iIHVubGVzcyAkZGlmZl9zdGF0dXMgZXEgIkEiICYmCisJCSg6OmNvbXBhcmVfc3ZuX3ZlcnNpb24oJzEuNS40JykgPD0gMCB8fCAkZmlsZV90eXBlIG5lICJkaXIiKTsKKwkkcmVzdWx0IC49ICJSZXZpc2lvbjogIiAuICgkZGlmZl9zdGF0dXMgZXEgIkEiID8gMCA6ICRyZXYpIC4gIlxuIjsKKworCSRyZXN1bHQgLj0gIk5vZGUgS2luZDogIiAuCisJCSAgICgkZmlsZV90eXBlIGVxICJkaXIiID8gImRpcmVjdG9yeSIgOiAiZmlsZSIpIC4gIlxuIjsKKworCW15ICRzY2hlZHVsZSA9ICRkaWZmX3N0YXR1cyBlcSAiQSIKKwkJICAgICAgID8gImFkZCIKKwkJICAgICAgIDogKCRkaWZmX3N0YXR1cyBlcSAiRCIgPyAiZGVsZXRlIiA6ICJub3JtYWwiKTsKKwkkcmVzdWx0IC49ICJTY2hlZHVsZTogJHNjaGVkdWxlXG4iOworCisJaWYgKCRkaWZmX3N0YXR1cyBlcSAiQSIpIHsKKwkJcHJpbnQgJHJlc3VsdCwgIlxuIjsKKwkJcmV0dXJuOworCX0KKworCW15ICgkbGNfYXV0aG9yLCAkbGNfcmV2LCAkbGNfZGF0ZV91dGMpOworCW15IEBhcmdzID0gR2l0OjpTVk46OkxvZzo6Z2l0X3N2bl9sb2dfY21kKCRyZXYsICRyZXYsICItLSIsICRwYXRoKTsKKwlteSAkbG9nID0gY29tbWFuZF9vdXRwdXRfcGlwZShAYXJncyk7CisJbXkgJGVzY19jb2xvciA9IHFyLyg/OlwwMzNcWyg/Oig/OlxkKzspKlxkKik/bSkqLzsKKwl3aGlsZSAoPCRsb2c+KSB7CisJCWlmICgvXiR7ZXNjX2NvbG9yfWF1dGhvciAoLispIDxbXj5dKz4gKFxkKykgKFtcLVwrXT9cZCspJC9vKSB7CisJCQkkbGNfYXV0aG9yID0gJDE7CisJCQkkbGNfZGF0ZV91dGMgPSBHaXQ6OlNWTjo6TG9nOjpwYXJzZV9naXRfZGF0ZSgkMiwgJDMpOworCQl9IGVsc2lmICgvXiR7ZXNjX2NvbG9yfSAgICAoZ2l0LXN2bi1pZDouKykkL28pIHsKKwkJCSh1bmRlZiwgJGxjX3JldiwgdW5kZWYpID0gOjpleHRyYWN0X21ldGFkYXRhKCQxKTsKKwkJfQorCX0KKwljbG9zZSAkbG9nOworCisJR2l0OjpTVk46OkxvZzo6c2V0X2xvY2FsX3RpbWV6b25lKCk7CisKKwkkcmVzdWx0IC49ICJMYXN0IENoYW5nZWQgQXV0aG9yOiAkbGNfYXV0aG9yXG4iOworCSRyZXN1bHQgLj0gIkxhc3QgQ2hhbmdlZCBSZXY6ICRsY19yZXZcbiI7CisJJHJlc3VsdCAuPSAiTGFzdCBDaGFuZ2VkIERhdGU6ICIgLgorCQkgICBHaXQ6OlNWTjo6TG9nOjpmb3JtYXRfc3ZuX2RhdGUoJGxjX2RhdGVfdXRjKSAuICJcbiI7CisKKwlpZiAoJGZpbGVfdHlwZSBuZSAiZGlyIikgeworCQlteSAkdGV4dF9sYXN0X3VwZGF0ZWRfZGF0ZSA9CisJCSAgICAoJGRpZmZfc3RhdHVzIGVxICJEIiA/ICRsY19kYXRlX3V0YyA6IChzdGF0ICRwYXRoKVs5XSk7CisJCSRyZXN1bHQgLj0KKwkJICAgICJUZXh0IExhc3QgVXBkYXRlZDogIiAuCisJCSAgICBHaXQ6OlNWTjo6TG9nOjpmb3JtYXRfc3ZuX2RhdGUoJHRleHRfbGFzdF91cGRhdGVkX2RhdGUpIC4KKwkJICAgICJcbiI7CisJCW15ICRjaGVja3N1bTsKKwkJaWYgKCRkaWZmX3N0YXR1cyBlcSAiRCIpIHsKKwkJCW15ICgkZmgsICRjdHgpID0KKwkJCSAgICBjb21tYW5kX291dHB1dF9waXBlKHF3KGNhdC1maWxlIGJsb2IpLCAiSEVBRDokcGF0aCIpOworCQkJaWYgKCRmaWxlX3R5cGUgZXEgImxpbmsiKSB7CisJCQkJbXkgJGZpbGVfbmFtZSA9IDwkZmg+OworCQkJCSRjaGVja3N1bSA9IG1kNXN1bSgibGluayAkZmlsZV9uYW1lIik7CisJCQl9IGVsc2UgeworCQkJCSRjaGVja3N1bSA9IG1kNXN1bSgkZmgpOworCQkJfQorCQkJY29tbWFuZF9jbG9zZV9waXBlKCRmaCwgJGN0eCk7CisJCX0gZWxzaWYgKCRmaWxlX3R5cGUgZXEgImxpbmsiKSB7CisJCQlteSAkZmlsZV9uYW1lID0KKwkJCSAgICBjb21tYW5kKHF3KGNhdC1maWxlIGJsb2IpLCAiSEVBRDokcGF0aCIpOworCQkJJGNoZWNrc3VtID0KKwkJCSAgICBtZDVzdW0oImxpbmsgIiAuICRmaWxlX25hbWUpOworCQl9IGVsc2UgeworCQkJb3BlbiBGSUxFLCAiPCIsICRwYXRoIG9yIGRpZSAkITsKKwkJCSRjaGVja3N1bSA9IG1kNXN1bShcKkZJTEUpOworCQkJY2xvc2UgRklMRSBvciBkaWUgJCE7CisJCX0KKwkJJHJlc3VsdCAuPSAiQ2hlY2tzdW06ICIgLiAkY2hlY2tzdW0gLiAiXG4iOworCX0KKworCXByaW50ICRyZXN1bHQsICJcbiI7Cit9CisKK3N1YiBjbWRfcmVzZXQgeworCW15ICR0YXJnZXQgPSBzaGlmdCB8fCAkX3JldmlzaW9uIG9yIGRpZSAiU1ZOIHJldmlzaW9uIHJlcXVpcmVkXG4iOworCSR0YXJnZXQgPSAkMSBpZiAkdGFyZ2V0ID1+IC9ecihcZCspJC87CisJJHRhcmdldCA9fiAvXlxkKyQvIG9yIGRpZSAiTnVtZXJpYyBTVk4gcmV2aXNpb24gZXhwZWN0ZWRcbiI7CisJbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJ0hFQUQnKTsKKwl1bmxlc3MgKCRncykgeworCQlkaWUgIlVuYWJsZSB0byBkZXRlcm1pbmUgdXBzdHJlYW0gU1ZOIGluZm9ybWF0aW9uIGZyb20gIi4KKwkJICAgICJoaXN0b3J5XG4iOworCX0KKwlteSAoJHIsICRjKSA9ICRncy0+ZmluZF9yZXZfYmVmb3JlKCR0YXJnZXQsIG5vdCAkX2ZldGNoX3BhcmVudCk7CisJZGllICJDYW5ub3QgZmluZCBTVk4gcmV2aXNpb24gJHRhcmdldFxuIiB1bmxlc3MgZGVmaW5lZCgkYyk7CisJJGdzLT5yZXZfbWFwX3NldCgkciwgJGMsICdyZXNldCcsICR1dWlkKTsKKwlwcmludCAiciRyID0gJGMgKCRncy0+e3JlZl9pZH0pXG4iOworfQorCitzdWIgY21kX2djIHsKKwlyZXF1aXJlIEZpbGU6OkZpbmQ7CisJaWYgKCFjYW5fY29tcHJlc3MoKSkgeworCQl3YXJuICJDb21wcmVzczo6WmxpYiBjb3VsZCBub3QgYmUgZm91bmQ7IHVuaGFuZGxlZC5sb2cgIiAuCisJCSAgICAgImZpbGVzIHdpbGwgbm90IGJlIGNvbXByZXNzZWQuXG4iOworCX0KKwlGaWxlOjpGaW5kOjpmaW5kKHsgd2FudGVkID0+IFwmZ2NfZGlyZWN0b3J5LCBub19jaGRpciA9PiAxfSwKKwkJCSBHaXQ6OlNWTjo6c3ZuX2RpcigpKTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIHV0aWxpdHkgZnVuY3Rpb25zICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc3ViIHJlYmFzZV9jbWQgeworCW15IEBjbWQgPSBxdy9yZWJhc2UvOworCXB1c2ggQGNtZCwgJy12JyBpZiAkX3ZlcmJvc2U7CisJcHVzaCBAY21kLCBxdy8tLW1lcmdlLyBpZiAkX21lcmdlOworCXB1c2ggQGNtZCwgIi0tc3RyYXRlZ3k9JF9zdHJhdGVneSIgaWYgJF9zdHJhdGVneTsKKwlwdXNoIEBjbWQsICItLXJlYmFzZS1tZXJnZXMiIGlmICRfcmViYXNlX21lcmdlczsKKwlAY21kOworfQorCitzdWIgcG9zdF9mZXRjaF9jaGVja291dCB7CisJcmV0dXJuIGlmICRfbm9fY2hlY2tvdXQ7CisJcmV0dXJuIGlmIHZlcmlmeV9yZWYoJ0hFQUReMCcpOworCW15ICRncyA9ICRHaXQ6OlNWTjo6X2hlYWQgb3IgcmV0dXJuOworCisJIyBsb29rIGZvciAidHJ1bmsiIHJlZiBpZiBpdCBleGlzdHMKKwlteSAkcmVtb3RlID0gR2l0OjpTVk46OnJlYWRfYWxsX3JlbW90ZXMoKS0+eyRncy0+e3JlcG9faWR9fTsKKwlteSAkZmV0Y2ggPSAkcmVtb3RlLT57ZmV0Y2h9OworCWlmICgkZmV0Y2gpIHsKKwkJZm9yZWFjaCBteSAkcCAoa2V5cyAlJGZldGNoKSB7CisJCQliYXNlbmFtZSgkZmV0Y2gtPnskcH0pIGVxICd0cnVuaycgb3IgbmV4dDsKKwkJCSRncyA9IEdpdDo6U1ZOLT5uZXcoJGZldGNoLT57JHB9LCAkZ3MtPntyZXBvX2lkfSwgJHApOworCQkJbGFzdDsKKwkJfQorCX0KKworCWNvbW1hbmRfbm9pc3kocXcodXBkYXRlLXJlZiBIRUFEKSwgJGdzLT5yZWZuYW1lKTsKKwlyZXR1cm4gdW5sZXNzIHZlcmlmeV9yZWYoJ0hFQUReMCcpOworCisJcmV0dXJuIGlmICRFTlZ7R0lUX0RJUn0gIX4gbSNeKD86LiovKT9cLmdpdCQjOworCW15ICRpbmRleCA9IGNvbW1hbmRfb25lbGluZShxdyhyZXYtcGFyc2UgLS1naXQtcGF0aCBpbmRleCkpOworCXJldHVybiBpZiAtZiAkaW5kZXg7CisKKwlyZXR1cm4gaWYgY29tbWFuZF9vbmVsaW5lKHF3L3Jldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWUvKSBlcSAnZmFsc2UnOworCXJldHVybiBpZiBjb21tYW5kX29uZWxpbmUocXcvcmV2LXBhcnNlIC0taXMtaW5zaWRlLWdpdC1kaXIvKSBlcSAndHJ1ZSc7CisJY29tbWFuZF9ub2lzeShxdy9yZWFkLXRyZWUgLW0gLXUgLXYgSEVBRCBIRUFELyk7CisJcHJpbnQgU1RERVJSICJDaGVja2VkIG91dCBIRUFEOlxuICAiLAorCSAgICAgICAgICAgICAkZ3MtPmZ1bGxfdXJsLCAiIHIiLCAkZ3MtPmxhc3RfcmV2LCAiXG4iOworCWlmIChhdXRvX2NyZWF0ZV9lbXB0eV9kaXJlY3RvcmllcygkZ3MpKSB7CisJCSRncy0+bWtlbXB0eWRpcnMoJGdzLT5sYXN0X3Jldik7CisJfQorfQorCitzdWIgY29tcGxldGVfc3ZuX3VybCB7CisJbXkgKCR1cmwsICRwYXRoKSA9IEBfOworCisJaWYgKCRwYXRoID1+IG0jXlthLXpcK10rOi8vI2kpIHsgIyBwYXRoIGlzIGEgVVJMCisJCSRwYXRoID0gY2Fub25pY2FsaXplX3VybCgkcGF0aCk7CisJfSBlbHNlIHsKKwkJJHBhdGggPSBjYW5vbmljYWxpemVfcGF0aCgkcGF0aCk7CisJCWlmICghZGVmaW5lZCAkdXJsIHx8ICR1cmwgIX4gbSNeW2EtelwrXSs6Ly8jaSkgeworCQkJZmF0YWwoIkU6ICckcGF0aCcgaXMgbm90IGEgY29tcGxldGUgVVJMICIsCisJCQkgICAgICAiYW5kIGEgc2VwYXJhdGUgVVJMIGlzIG5vdCBzcGVjaWZpZWQiKTsKKwkJfQorCQlyZXR1cm4gKCR1cmwsICRwYXRoKTsKKwl9CisJcmV0dXJuICgkcGF0aCwgJycpOworfQorCitzdWIgY29tcGxldGVfdXJsX2xzX2luaXQgeworCW15ICgkcmEsICRyZXBvX3BhdGgsICRzd2l0Y2gsICRwZngpID0gQF87CisJdW5sZXNzICgkcmVwb19wYXRoKSB7CisJCXByaW50IFNUREVSUiAiVzogJHN3aXRjaCBub3Qgc3BlY2lmaWVkXG4iOworCQlyZXR1cm47CisJfQorCWlmICgkcmVwb19wYXRoID1+IG0jXlthLXpcK10rOi8vI2kpIHsKKwkJJHJlcG9fcGF0aCA9IGNhbm9uaWNhbGl6ZV91cmwoJHJlcG9fcGF0aCk7CisJCSRyYSA9IEdpdDo6U1ZOOjpSYS0+bmV3KCRyZXBvX3BhdGgpOworCQkkcmVwb19wYXRoID0gJyc7CisJfSBlbHNlIHsKKwkJJHJlcG9fcGF0aCA9IGNhbm9uaWNhbGl6ZV9wYXRoKCRyZXBvX3BhdGgpOworCQkkcmVwb19wYXRoID1+IHMjXi8rIyM7CisJCXVubGVzcyAoJHJhKSB7CisJCQlmYXRhbCgiRTogJyRyZXBvX3BhdGgnIGlzIG5vdCBhIGNvbXBsZXRlIFVSTCAiLAorCQkJICAgICAgImFuZCBhIHNlcGFyYXRlIFVSTCBpcyBub3Qgc3BlY2lmaWVkIik7CisJCX0KKwl9CisJbXkgJHVybCA9ICRyYS0+dXJsOworCW15ICRncyA9IEdpdDo6U1ZOLT5pbml0KCR1cmwsIHVuZGVmLCB1bmRlZiwgdW5kZWYsIDEpOworCW15ICRrID0gInN2bi1yZW1vdGUuJGdzLT57cmVwb19pZH0udXJsIjsKKwlteSAkb3JpZ191cmwgPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKHF3L2NvbmZpZyAtLWdldC8sICRrKSB9OworCWlmICgkb3JpZ191cmwgJiYgKCRvcmlnX3VybCBuZSAkZ3MtPnVybCkpIHsKKwkJZGllICIkayBhbHJlYWR5IHNldDogJG9yaWdfdXJsXG4iLAorCQkgICAgIndhbnRlZCB0byBzZXQgdG86ICRncy0+dXJsXG4iOworCX0KKwljb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICRrLCAkZ3MtPnVybCkgdW5sZXNzICRvcmlnX3VybDsKKworCW15ICRyZW1vdGVfcGF0aCA9IGpvaW5fcGF0aHMoICRncy0+cGF0aCwgJHJlcG9fcGF0aCApOworCSRyZW1vdGVfcGF0aCA9fiBzeyUoWzAtOUEtRl17Mn0pfXtjaHIgaGV4KCQxKX1pZWc7CisJJHJlbW90ZV9wYXRoID1+IHMjXi8jI2c7CisJJHJlbW90ZV9wYXRoIC49ICIvKiIgaWYgJHJlbW90ZV9wYXRoICF+IC9cKi87CisJbXkgKCRuKSA9ICgkc3dpdGNoID1+IC9eLS0oXHcrKS8pOworCWlmIChsZW5ndGggJHBmeCAmJiAkcGZ4ICF+IG0jLyQjKSB7CisJCWRpZSAiLS1wcmVmaXg9JyRwZngnIG11c3QgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoICcvJ1xuIjsKKwl9CisJY29tbWFuZF9ub2lzeSgnY29uZmlnJywKKwkJICAgICAgJy0tYWRkJywKKwkgICAgICAgICAgICAgICJzdm4tcmVtb3RlLiRncy0+e3JlcG9faWR9LiRuIiwKKwkgICAgICAgICAgICAgICIkcmVtb3RlX3BhdGg6cmVmcy9yZW1vdGVzLyRwZngqIiAuCisJICAgICAgICAgICAgICAgICgnLyonIHggKCgkcmVtb3RlX3BhdGggPX4gdHIvKi8qLykgLSAxKSkgKTsKK30KKworc3ViIHZlcmlmeV9yZWYgeworCW15ICgkcmVmKSA9IEBfOworCWV2YWwgeyBjb21tYW5kX29uZWxpbmUoWyAncmV2LXBhcnNlJywgJy0tdmVyaWZ5JywgJHJlZiBdLAorCSAgICAgICAgICAgICAgICAgICAgICAgeyBTVERFUlIgPT4gMCB9KTsgfTsKK30KKworc3ViIGdldF90cmVlX2Zyb21fdHJlZWlzaCB7CisJbXkgKCR0cmVlaXNoKSA9IEBfOworCSMgJHRyZWVpc2ggY2FuIGJlIGEgc3ltYm9saWMgcmVmLCB0b286CisJbXkgJHR5cGUgPSBjb21tYW5kX29uZWxpbmUocXcvY2F0LWZpbGUgLXQvLCAkdHJlZWlzaCk7CisJbXkgJGV4cGVjdGVkOworCXdoaWxlICgkdHlwZSBlcSAndGFnJykgeworCQkoJHRyZWVpc2gsICR0eXBlKSA9IGNvbW1hbmQocXcvY2F0LWZpbGUgdGFnLywgJHRyZWVpc2gpOworCX0KKwlpZiAoJHR5cGUgZXEgJ2NvbW1pdCcpIHsKKwkJJGV4cGVjdGVkID0gKGdyZXAgL150cmVlIC8sIGNvbW1hbmQocXcvY2F0LWZpbGUgY29tbWl0LywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRyZWVpc2gpKVswXTsKKwkJKCRleHBlY3RlZCkgPSAoJGV4cGVjdGVkID1+IC9edHJlZSAoJHNoYTEpJC9vKTsKKwkJZGllICJVbmFibGUgdG8gZ2V0IHRyZWUgZnJvbSAkdHJlZWlzaFxuIiB1bmxlc3MgJGV4cGVjdGVkOworCX0gZWxzaWYgKCR0eXBlIGVxICd0cmVlJykgeworCQkkZXhwZWN0ZWQgPSAkdHJlZWlzaDsKKwl9IGVsc2UgeworCQlkaWUgIiR0cmVlaXNoIGlzIGEgJHR5cGUsIGV4cGVjdGVkIHRyZWUsIHRhZyBvciBjb21taXRcbiI7CisJfQorCXJldHVybiAkZXhwZWN0ZWQ7Cit9CisKK3N1YiBnZXRfY29tbWl0X2VudHJ5IHsKKwlteSAoJHRyZWVpc2gpID0gc2hpZnQ7CisJbXkgJWxvZ19lbnRyeSA9ICggbG9nID0+ICcnLCB0cmVlID0+IGdldF90cmVlX2Zyb21fdHJlZWlzaCgkdHJlZWlzaCkgKTsKKwlteSBAZ2l0X3BhdGggPSBxdyhyZXYtcGFyc2UgLS1naXQtcGF0aCk7CisJbXkgJGNvbW1pdF9lZGl0bXNnID0gY29tbWFuZF9vbmVsaW5lKEBnaXRfcGF0aCwgJ0NPTU1JVF9FRElUTVNHJyk7CisJbXkgJGNvbW1pdF9tc2cgPSBjb21tYW5kX29uZWxpbmUoQGdpdF9wYXRoLCAnQ09NTUlUX01TRycpOworCW9wZW4gbXkgJGxvZ19maCwgJz4nLCAkY29tbWl0X2VkaXRtc2cgb3IgY3JvYWsgJCE7CisKKwlteSAkdHlwZSA9IGNvbW1hbmRfb25lbGluZShxdy9jYXQtZmlsZSAtdC8sICR0cmVlaXNoKTsKKwlpZiAoJHR5cGUgZXEgJ2NvbW1pdCcgfHwgJHR5cGUgZXEgJ3RhZycpIHsKKwkJbXkgKCRtc2dfZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZSgnY2F0LWZpbGUnLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlLCAkdHJlZWlzaCk7CisJCW15ICRpbl9tc2cgPSAwOworCQlteSAkYXV0aG9yOworCQlteSAkc2F3X2Zyb20gPSAwOworCQlteSAkbXNnYnVmID0gIiI7CisJCXdoaWxlICg8JG1zZ19maD4pIHsKKwkJCWlmICghJGluX21zZykgeworCQkJCSRpbl9tc2cgPSAxIGlmICgvXiQvKTsKKwkJCQkkYXV0aG9yID0gJDEgaWYgKC9eYXV0aG9yICguKj4pLyk7CisJCQl9IGVsc2lmICgvXmdpdC1zdm4taWQ6IC8pIHsKKwkJCQkjIHNraXAgdGhpcyBmb3Igbm93LCB3ZSByZWdlbmVyYXRlIHRoZQorCQkJCSMgY29ycmVjdCBvbmUgb24gcmUtZmV0Y2ggYW55d2F5cworCQkJCSMgVE9ETzogc2V0ICo6bWVyZ2UgcHJvcGVydGllcyBvciBsaWtlLi4uCisJCQl9IGVsc2UgeworCQkJCWlmICgvXkZyb206LyB8fCAvXlNpZ25lZC1vZmYtYnk6LykgeworCQkJCQkkc2F3X2Zyb20gPSAxOworCQkJCX0KKwkJCQkkbXNnYnVmIC49ICRfOworCQkJfQorCQl9CisJCSRtc2didWYgPX4gcy9ccyskLy9zOworCQkkbXNnYnVmID1+IHMvXHJcbi9cbi9zZzsgIyBTVk4gMS42KyBkaXNhbGxvd3MgQ1JMRgorCQlpZiAoJEdpdDo6U1ZOOjpfYWRkX2F1dGhvcl9mcm9tICYmIGRlZmluZWQoJGF1dGhvcikKKwkJICAgICYmICEkc2F3X2Zyb20pIHsKKwkJCSRtc2didWYgLj0gIlxuXG5Gcm9tOiAkYXV0aG9yIjsKKwkJfQorCQlwcmludCAkbG9nX2ZoICRtc2didWYgb3IgY3JvYWsgJCE7CisJCWNvbW1hbmRfY2xvc2VfcGlwZSgkbXNnX2ZoLCAkY3R4KTsKKwl9CisJY2xvc2UgJGxvZ19maCBvciBjcm9hayAkITsKKworCWlmICgkX2VkaXQgfHwgKCR0eXBlIGVxICd0cmVlJykpIHsKKwkJY2hvbXAobXkgJGVkaXRvciA9IGNvbW1hbmRfb25lbGluZShxdyh2YXIgR0lUX0VESVRPUikpKTsKKwkJc3lzdGVtKCdzaCcsICctYycsICRlZGl0b3IuJyAiJEAiJywgJGVkaXRvciwgJGNvbW1pdF9lZGl0bXNnKTsKKwl9CisJcmVuYW1lICRjb21taXRfZWRpdG1zZywgJGNvbW1pdF9tc2cgb3IgY3JvYWsgJCE7CisJeworCQlyZXF1aXJlIEVuY29kZTsKKwkJIyBTVk4gcmVxdWlyZXMgbWVzc2FnZXMgdG8gYmUgVVRGLTggd2hlbiBlbnRlcmluZyB0aGUgcmVwbworCQlvcGVuICRsb2dfZmgsICc8JywgJGNvbW1pdF9tc2cgb3IgY3JvYWsgJCE7CisJCWJpbm1vZGUgJGxvZ19maDsKKwkJY2hvbXAoJGxvZ19lbnRyeXtsb2d9ID0gZ2V0X3JlY29yZCgkbG9nX2ZoLCB1bmRlZikpOworCisJCW15ICRlbmMgPSBHaXQ6OmNvbmZpZygnaTE4bi5jb21taXRlbmNvZGluZycpIHx8ICdVVEYtOCc7CisJCW15ICRtc2cgPSAkbG9nX2VudHJ5e2xvZ307CisKKwkJZXZhbCB7ICRtc2cgPSBFbmNvZGU6OmRlY29kZSgkZW5jLCAkbXNnLCAxKSB9OworCQlpZiAoJEApIHsKKwkJCWRpZSAiQ291bGQgbm90IGRlY29kZSBhcyAkZW5jOlxuIiwgJG1zZywKKwkJCSAgICAiXG5QZXJoYXBzIHlvdSBuZWVkIHRvIHNldCBpMThuLmNvbW1pdGVuY29kaW5nXG4iOworCQl9CisKKwkJZXZhbCB7ICRtc2cgPSBFbmNvZGU6OmVuY29kZSgnVVRGLTgnLCAkbXNnLCAxKSB9OworCQlkaWUgIkNvdWxkIG5vdCBlbmNvZGUgYXMgVVRGLTg6XG4kbXNnXG4iIGlmICRAOworCisJCSRsb2dfZW50cnl7bG9nfSA9ICRtc2c7CisKKwkJY2xvc2UgJGxvZ19maCBvciBjcm9hayAkITsKKwl9CisJdW5saW5rICRjb21taXRfbXNnOworCVwlbG9nX2VudHJ5OworfQorCitzdWIgc190b19maWxlIHsKKwlteSAoJHN0ciwgJGZpbGUsICRtb2RlKSA9IEBfOworCW9wZW4gbXkgJGZkLCc+JywkZmlsZSBvciBjcm9hayAkITsKKwlwcmludCAkZmQgJHN0ciwiXG4iIG9yIGNyb2FrICQhOworCWNsb3NlICRmZCBvciBjcm9hayAkITsKKwljaG1vZCAoJG1vZGUgJn4gdW1hc2ssICRmaWxlKSBpZiAoZGVmaW5lZCAkbW9kZSk7Cit9CisKK3N1YiBmaWxlX3RvX3MgeworCW15ICRmaWxlID0gc2hpZnQ7CisJb3BlbiBteSAkZmQsJzwnLCRmaWxlIG9yIGNyb2FrICIkITogZmlsZTogJGZpbGVcbiI7CisJbG9jYWwgJC87CisJbXkgJHJldCA9IDwkZmQ+OworCWNsb3NlICRmZCBvciBjcm9hayAkITsKKwkkcmV0ID1+IHMvXHMqJC8vczsKKwlyZXR1cm4gJHJldDsKK30KKworIyAnPHN2biB1c2VybmFtZT4gPSByZWFsLW5hbWUgPGVtYWlsIGFkZHJlc3M+JyBtYXBwaW5nIGJhc2VkIG9uIGdpdC1zdm5pbXBvcnQ6CitzdWIgbG9hZF9hdXRob3JzIHsKKwlvcGVuIG15ICRhdXRob3JzLCAnPCcsICRfYXV0aG9ycyBvciBkaWUgIkNhbid0IG9wZW4gJF9hdXRob3JzICQhXG4iOworCW15ICRsb2cgPSAkY21kIGVxICdsb2cnOworCXdoaWxlICg8JGF1dGhvcnM+KSB7CisJCWNob21wOworCQluZXh0IHVubGVzcyAvXiguKz98XChubyBhdXRob3JcKSlccyo9XHMqKC4rPylccyo8KC4qKT5ccyokLzsKKwkJbXkgKCR1c2VyLCAkbmFtZSwgJGVtYWlsKSA9ICgkMSwgJDIsICQzKTsKKwkJaWYgKCRsb2cpIHsKKwkJCSRHaXQ6OlNWTjo6TG9nOjpydXNlcnN7IiRuYW1lIDwkZW1haWw+In0gPSAkdXNlcjsKKwkJfSBlbHNlIHsKKwkJCSR1c2Vyc3skdXNlcn0gPSBbJG5hbWUsICRlbWFpbF07CisJCX0KKwl9CisJY2xvc2UgJGF1dGhvcnMgb3IgY3JvYWsgJCE7Cit9CisKKyMgY29udmVydCBHZXRPcHQ6Okxvbmcgc3BlY3MgZm9yIHVzZSBieSBnaXQtY29uZmlnCitzdWIgcmVhZF9naXRfY29uZmlnIHsKKwlteSAkb3B0cyA9IHNoaWZ0OworCW15IEBjb25maWdfb25seTsKKwlmb3JlYWNoIG15ICRvIChrZXlzICUkb3B0cykgeworCQkjIGlmIHdlIGhhdmUgbWl4ZWRDYXNlIGFuZCBhIGxvbmcgb3B0aW9uLW9ubHksIHRoZW4KKwkJIyBpdCdzIGEgY29uZmlnLW9ubHkgdmFyaWFibGUgdGhhdCB3ZSBkb24ndCBuZWVkIGZvcgorCQkjIHRoZSBjb21tYW5kLWxpbmUuCisJCXB1c2ggQGNvbmZpZ19vbmx5LCAkbyBpZiAoJG8gPX4gL1tBLVpdLyAmJiAkbyA9fiAvXlthLXpdKyQvaSk7CisJCW15ICR2ID0gJG9wdHMtPnskb307CisJCW15ICgka2V5KSA9ICgkbyA9fiAvXihbYS16QS1aXC1dKykvKTsKKwkJJGtleSA9fiBzLy0vL2c7CisJCW15ICRhcmcgPSAnZ2l0IGNvbmZpZyc7CisJCSRhcmcgLj0gJyAtLWludCcgaWYgKCRvID1+IC9bOj1daSQvKTsKKwkJJGFyZyAuPSAnIC0tYm9vbCcgaWYgKCRvICF+IC9bOj1dW3NmaV0kLyk7CisJCWlmIChyZWYgJHYgZXEgJ0FSUkFZJykgeworCQkJY2hvbXAobXkgQHRtcCA9IGAkYXJnIC0tZ2V0LWFsbCBzdm4uJGtleWApOworCQkJQCR2ID0gQHRtcCBpZiBAdG1wOworCQl9IGVsc2UgeworCQkJY2hvbXAobXkgJHRtcCA9IGAkYXJnIC0tZ2V0IHN2bi4ka2V5YCk7CisJCQlpZiAoJHRtcCAmJiAhKCRhcmcgPX4gLyAtLWJvb2wvICYmICR0bXAgZXEgJ2ZhbHNlJykpIHsKKwkJCQkkJHYgPSAkdG1wOworCQkJfQorCQl9CisJfQorCWRlbGV0ZSBAJG9wdHN7QGNvbmZpZ19vbmx5fSBpZiBAY29uZmlnX29ubHk7Cit9CisKK3N1YiBleHRyYWN0X21ldGFkYXRhIHsKKwlteSAkaWQgPSBzaGlmdCBvciByZXR1cm4gKHVuZGVmLCB1bmRlZiwgdW5kZWYpOworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCkgPSAoJGlkID1+IC9eXHMqZ2l0LXN2bi1pZDpccysoLiopXEAoXGQrKQorCQkJCQkJCVxzKFthLWZcZFwtXSspJC9peCk7CisJaWYgKCFkZWZpbmVkICRyZXYgfHwgISR1dWlkIHx8ICEkdXJsKSB7CisJCSMgc29tZSBvZiB0aGUgb3JpZ2luYWwgcmVwb3NpdG9yaWVzIEkgbWFkZSBoYWQKKwkJIyBpZGVudGlmaWVycyBsaWtlIHRoaXM6CisJCSgkcmV2LCAkdXVpZCkgPSAoJGlkID1+L15ccypnaXQtc3ZuLWlkOlxzKFxkKylcQChbYS1mXGRcLV0rKS9pKTsKKwl9CisJcmV0dXJuICgkdXJsLCAkcmV2LCAkdXVpZCk7Cit9CisKK3N1YiBjbXRfbWV0YWRhdGEgeworCXJldHVybiBleHRyYWN0X21ldGFkYXRhKChncmVwKC9eZ2l0LXN2bi1pZDogLywKKwkJY29tbWFuZChxdy9jYXQtZmlsZSBjb21taXQvLCBzaGlmdCkpKVstMV0pOworfQorCitzdWIgY210X3NoYTJyZXZfYmF0Y2ggeworCW15ICVzMnI7CisJbXkgKCRwaWQsICRpbiwgJG91dCwgJGN0eCkgPSBjb21tYW5kX2JpZGlfcGlwZShxdy9jYXQtZmlsZSAtLWJhdGNoLyk7CisJbXkgJGxpc3QgPSBzaGlmdDsKKworCWZvcmVhY2ggbXkgJHNoYSAoQHskbGlzdH0pIHsKKwkJbXkgJGZpcnN0ID0gMTsKKwkJbXkgJHNpemUgPSAwOworCQlwcmludCAkb3V0ICRzaGEsICJcbiI7CisKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRpbj4pIHsKKwkJCWlmICgkZmlyc3QgJiYgJGxpbmUgPX4gL15bWzp4ZGlnaXQ6XV17NDB9XHNtaXNzaW5nJC8pIHsKKwkJCQlsYXN0OworCQkJfSBlbHNpZiAoJGZpcnN0ICYmCisJCQkgICAgICAgJGxpbmUgPX4gL15bWzp4ZGlnaXQ6XV17NDB9XHNjb21taXRccyhcZCspJC8pIHsKKwkJCQkkZmlyc3QgPSAwOworCQkJCSRzaXplID0gJDE7CisJCQkJbmV4dDsKKwkJCX0gZWxzaWYgKCRsaW5lID1+IC9eKGdpdC1zdm4taWQ6ICkvKSB7CisJCQkJbXkgKHVuZGVmLCAkcmV2LCB1bmRlZikgPQorCQkJCSAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0X21ldGFkYXRhKCRsaW5lKTsKKwkJCQkkczJyeyRzaGF9ID0gJHJldjsKKwkJCX0KKworCQkJJHNpemUgLT0gbGVuZ3RoKCRsaW5lKTsKKwkJCWxhc3QgaWYgKCRzaXplID09IDApOworCQl9CisJfQorCisJY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUoJHBpZCwgJGluLCAkb3V0LCAkY3R4KTsKKworCXJldHVybiBcJXMycjsKK30KKworc3ViIHdvcmtpbmdfaGVhZF9pbmZvIHsKKwlteSAoJGhlYWQsICRyZWZzKSA9IEBfOworCW15IEBhcmdzID0gcXcvcmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS1wcmV0dHk9bWVkaXVtLzsKKwlteSAoJGZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoQGFyZ3MsICRoZWFkLCAiLS0iKTsKKwlteSAkaGFzaDsKKwlteSAlbWF4OworCXdoaWxlICg8JGZoPikgeworCQlpZiAoIG17XmNvbW1pdCAoJDo6c2hhMSkkfSApIHsKKwkJCXVuc2hpZnQgQCRyZWZzLCAkaGFzaCBpZiAkaGFzaCBhbmQgJHJlZnM7CisJCQkkaGFzaCA9ICQxOworCQkJbmV4dDsKKwkJfQorCQluZXh0IHVubGVzcyBze15ccyooZ2l0LXN2bi1pZDopfXskMX07CisJCW15ICgkdXJsLCAkcmV2LCAkdXVpZCkgPSBleHRyYWN0X21ldGFkYXRhKCRfKTsKKwkJaWYgKGRlZmluZWQgJHVybCAmJiBkZWZpbmVkICRyZXYpIHsKKwkJCW5leHQgaWYgJG1heHskdXJsfSBhbmQgJG1heHskdXJsfSA8ICRyZXY7CisJCQlpZiAobXkgJGdzID0gR2l0OjpTVk4tPmZpbmRfYnlfdXJsKCR1cmwpKSB7CisJCQkJbXkgJGMgPSAkZ3MtPnJldl9tYXBfZ2V0KCRyZXYsICR1dWlkKTsKKwkJCQlpZiAoJGMgJiYgJGMgZXEgJGhhc2gpIHsKKwkJCQkJY2xvc2UgJGZoOyAjIGJyZWFrIHRoZSBwaXBlCisJCQkJCXJldHVybiAoJHVybCwgJHJldiwgJHV1aWQsICRncyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJJG1heHskdXJsfSB8fD0gJGdzLT5yZXZfbWFwX21heDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJY29tbWFuZF9jbG9zZV9waXBlKCRmaCwgJGN0eCk7CisJKHVuZGVmLCB1bmRlZiwgdW5kZWYsIHVuZGVmKTsKK30KKworc3ViIHJlYWRfY29tbWl0X3BhcmVudHMgeworCW15ICgkcGFyZW50cywgJGMpID0gQF87CisJY2hvbXAobXkgJHAgPSBjb21tYW5kX29uZWxpbmUocXcvcmV2LWxpc3QgLS1wYXJlbnRzIC0xLywgJGMpKTsKKwkkcCA9fiBzL14oJGMpXHMqLy8gb3IgZGllICJyZXYtbGlzdCAtLXBhcmVudHMgLTEgJGMgZmFpbGVkIVxuIjsKKwlAeyRwYXJlbnRzLT57JGN9fSA9IHNwbGl0KC8gLywgJHApOworfQorCitzdWIgbGluZWFyaXplX2hpc3RvcnkgeworCW15ICgkZ3MsICRyZWZzKSA9IEBfOworCW15ICVwYXJlbnRzOworCWZvcmVhY2ggbXkgJGMgKEAkcmVmcykgeworCQlyZWFkX2NvbW1pdF9wYXJlbnRzKFwlcGFyZW50cywgJGMpOworCX0KKworCW15IEBsaW5lYXJfcmVmczsKKwlteSAlc2tpcCA9ICgpOworCW15ICRsYXN0X3N2bl9jb21taXQgPSAkZ3MtPmxhc3RfY29tbWl0OworCWZvcmVhY2ggbXkgJGMgKHJldmVyc2UgQCRyZWZzKSB7CisJCW5leHQgaWYgJGMgZXEgJGxhc3Rfc3ZuX2NvbW1pdDsKKwkJbGFzdCBpZiAkc2tpcHskY307CisKKwkJdW5zaGlmdCBAbGluZWFyX3JlZnMsICRjOworCQkkc2tpcHskY30gPSAxOworCisJCSMgd2Ugb25seSB3YW50IHRoZSBmaXJzdCBwYXJlbnQgdG8gZGlmZiBhZ2FpbnN0IGZvciBsaW5lYXIKKwkJIyBoaXN0b3J5LCB3ZSBzYXZlIHRoZSByZXN0IHRvIGluamVjdCB3aGVuIHdlIGZpbmFsaXplIHRoZQorCQkjIHN2biBjb21taXQKKwkJbXkgJGZwX2EgPSB2ZXJpZnlfcmVmKCIkY34xIik7CisJCW15ICRmcF9iID0gc2hpZnQgQHskcGFyZW50c3skY319IGlmICRwYXJlbnRzeyRjfTsKKwkJaWYgKCEkZnBfYSB8fCAhJGZwX2IpIHsKKwkJCWRpZSAiQ29tbWl0ICRjXG4iLAorCQkJICAgICJoYXMgbm8gcGFyZW50IGNvbW1pdCwgYW5kIHRoZXJlZm9yZSAiLAorCQkJICAgICJub3RoaW5nIHRvIGRpZmYgYWdhaW5zdC5cbiIsCisJCQkgICAgIllvdSBzaG91bGQgYmUgd29ya2luZyBmcm9tIGEgcmVwb3NpdG9yeSAiLAorCQkJICAgICJvcmlnaW5hbGx5IGNyZWF0ZWQgYnkgZ2l0LXN2blxuIjsKKwkJfQorCQlpZiAoJGZwX2EgbmUgJGZwX2IpIHsKKwkJCWRpZSAiJGN+MSA9ICRmcF9hLCBob3dldmVyIHBhcnNpbmcgY29tbWl0ICRjICIsCisJCQkgICAgInJldmVhbGVkIHRoYXQ6XG4kY34xID0gJGZwX2JcbkJVRyFcbiI7CisJCX0KKworCQlmb3JlYWNoIG15ICRwIChAeyRwYXJlbnRzeyRjfX0pIHsKKwkJCSRza2lweyRwfSA9IDE7CisJCX0KKwl9CisJKFxAbGluZWFyX3JlZnMsIFwlcGFyZW50cyk7Cit9CisKK3N1YiBmaW5kX2ZpbGVfdHlwZV9hbmRfZGlmZl9zdGF0dXMgeworCW15ICgkcGF0aCkgPSBAXzsKKwlyZXR1cm4gKCdkaXInLCAnJykgaWYgJHBhdGggZXEgJyc7CisKKwlteSAkZGlmZl9vdXRwdXQgPQorCSAgICBjb21tYW5kX29uZWxpbmUocXcoZGlmZiAtLWNhY2hlZCAtLW5hbWUtc3RhdHVzIC0tKSwgJHBhdGgpIHx8ICIiOworCW15ICRkaWZmX3N0YXR1cyA9IChzcGxpdCgnICcsICRkaWZmX291dHB1dCkpWzBdIHx8ICIiOworCisJbXkgJGxzX3RyZWUgPSBjb21tYW5kX29uZWxpbmUocXcobHMtdHJlZSBIRUFEKSwgJHBhdGgpIHx8ICIiOworCisJcmV0dXJuICh1bmRlZiwgdW5kZWYpIGlmICEkZGlmZl9zdGF0dXMgJiYgISRsc190cmVlOworCisJaWYgKCRkaWZmX3N0YXR1cyBlcSAiQSIpIHsKKwkJcmV0dXJuICgibGluayIsICRkaWZmX3N0YXR1cykgaWYgLWwgJHBhdGg7CisJCXJldHVybiAoImRpciIsICRkaWZmX3N0YXR1cykgaWYgLWQgJHBhdGg7CisJCXJldHVybiAoImZpbGUiLCAkZGlmZl9zdGF0dXMpOworCX0KKworCW15ICRtb2RlID0gKHNwbGl0KCcgJywgJGxzX3RyZWUpKVswXSB8fCAiIjsKKworCXJldHVybiAoImxpbmsiLCAkZGlmZl9zdGF0dXMpIGlmICRtb2RlIGVxICIxMjAwMDAiOworCXJldHVybiAoImRpciIsICRkaWZmX3N0YXR1cykgaWYgJG1vZGUgZXEgIjA0MDAwMCI7CisJcmV0dXJuICgiZmlsZSIsICRkaWZmX3N0YXR1cyk7Cit9CisKK3N1YiBtZDVzdW0geworCW15ICRhcmcgPSBzaGlmdDsKKwlteSAkcmVmID0gcmVmICRhcmc7CisJcmVxdWlyZSBEaWdlc3Q6Ok1ENTsKKwlteSAkbWQ1ID0gRGlnZXN0OjpNRDUtPm5ldygpOworICAgICAgICBpZiAoJHJlZiBlcSAnR0xPQicgfHwgJHJlZiBlcSAnSU86OkZpbGUnIHx8ICRyZWYgZXEgJ0ZpbGU6OlRlbXAnKSB7CisJCSRtZDUtPmFkZGZpbGUoJGFyZykgb3IgY3JvYWsgJCE7CisJfSBlbHNpZiAoJHJlZiBlcSAnU0NBTEFSJykgeworCQkkbWQ1LT5hZGQoJCRhcmcpIG9yIGNyb2FrICQhOworCX0gZWxzaWYgKCEkcmVmKSB7CisJCSRtZDUtPmFkZCgkYXJnKSBvciBjcm9hayAkITsKKwl9IGVsc2UgeworCQlmYXRhbCAiQ2FuJ3QgcHJvdmlkZSBNRDUgaGFzaCBmb3IgdW5rbm93biByZWYgdHlwZTogJyIsICRyZWYsICInIjsKKwl9CisJcmV0dXJuICRtZDUtPmhleGRpZ2VzdCgpOworfQorCitzdWIgZ2NfZGlyZWN0b3J5IHsKKwlpZiAoY2FuX2NvbXByZXNzKCkgJiYgLWYgJF8gJiYgYmFzZW5hbWUoJF8pIGVxICJ1bmhhbmRsZWQubG9nIikgeworCQlteSAkb3V0X2ZpbGVuYW1lID0gJF8gLiAiLmd6IjsKKwkJb3BlbiBteSAkaW5fZmgsICI8IiwgJF8gb3IgZGllICJVbmFibGUgdG8gb3BlbiAkXzogJCFcbiI7CisJCWJpbm1vZGUgJGluX2ZoOworCQlteSAkZ3ogPSBDb21wcmVzczo6WmxpYjo6Z3pvcGVuKCRvdXRfZmlsZW5hbWUsICJhYiIpIG9yCisJCQkJZGllICJVbmFibGUgdG8gb3BlbiAkb3V0X2ZpbGVuYW1lOiAkIVxuIjsKKworCQlteSAkcmVzOworCQl3aGlsZSAoJHJlcyA9IHN5c3JlYWQoJGluX2ZoLCBteSAkc3RyLCAxMDI0KSkgeworCQkJJGd6LT5nendyaXRlKCRzdHIpIG9yCisJCQkJZGllICJVbmFibGUgdG8gd3JpdGU6ICIuJGd6LT5nemVycm9yKCkuIiFcbiI7CisJCX0KKwkJbm8gd2FybmluZ3MgJ29uY2UnOyAjICRGaWxlOjpGaW5kOjpuYW1lIHdvdWxkIHdhcm4KKwkJdW5saW5rICRfIG9yIGRpZSAidW5saW5rICRGaWxlOjpGaW5kOjpuYW1lOiAkIVxuIjsKKwl9IGVsc2lmICgtZiAkXyAmJiBiYXNlbmFtZSgkXykgZXEgImluZGV4IikgeworCQl1bmxpbmsgJF8gb3IgZGllICJ1bmxpbmsgJF86ICQhXG4iOworCX0KK30KKworX19FTkRfXworCitEYXRhIHN0cnVjdHVyZXM6CisKKworJHJlbW90ZXMgPSB7ICMgcmV0dXJuZWQgYnkgcmVhZF9hbGxfcmVtb3RlcygpCisJJ3N2bicgPT4geworCQkjIHN2bi1yZW1vdGUuc3ZuLnVybD1odHRwczovL3N2bi5tdXNpY3BkLm9yZworCQl1cmwgPT4gJ2h0dHBzOi8vc3ZuLm11c2ljcGQub3JnJywKKwkJIyBzdm4tcmVtb3RlLnN2bi5mZXRjaD1tcGQvdHJ1bms6dHJ1bmsKKwkJZmV0Y2ggPT4geworCQkJJ21wZC90cnVuaycgPT4gJ3RydW5rJywKKwkJfSwKKwkJIyBzdm4tcmVtb3RlLnN2bi50YWdzPW1wZC90YWdzLyo6dGFncy8qCisJCXRhZ3MgPT4geworCQkJcGF0aCA9PiB7CisJCQkJbGVmdCA9PiAnbXBkL3RhZ3MnLAorCQkJCXJpZ2h0ID0+ICcnLAorCQkJCXJlZ2V4ID0+IHFyIW1wZC90YWdzLyhbXi9dKykkISwKKwkJCQlnbG9iID0+ICd0YWdzLyonLAorCQkJfSwKKwkJCXJlZiA9PiB7CisJCQkJbGVmdCA9PiAndGFncycsCisJCQkJcmlnaHQgPT4gJycsCisJCQkJcmVnZXggPT4gcXIhdGFncy8oW14vXSspJCEsCisJCQkJZ2xvYiA9PiAndGFncy8qJywKKwkJCX0sCisJCX0KKwl9Cit9OworCiskbG9nX2VudHJ5IGhhc2hyZWYgYXMgcmV0dXJuZWQgYnkgbGlic3ZuX2xvZ19lbnRyeSgpCit7CisJbG9nID0+ICd3aGl0ZXNwYWNlLWZvcm1hdHRlZCBsb2cgZW50cnkKKycsCQkJCQkJIyB0cmFpbGluZyBuZXdsaW5lIGlzIHByZXNlcnZlZAorCXJldmlzaW9uID0+ICc4JywJCQkjIGludGVnZXIKKwlkYXRlID0+ICcyMDA0LTAyLTI0VDE3OjAxOjQ0LjEwODM0NVonLAkjIGNvbW1pdCBkYXRlCisJYXV0aG9yID0+ICdjb21taXR0ZXIgbmFtZScKK307CisKKworIyB0aGlzIGlzIGdlbmVyYXRlZCBieSBnZW5lcmF0ZV9kaWZmKCk7CitAbW9kcyA9IGFycmF5IG9mIGRpZmYtaW5kZXggbGluZSBoYXNoZXMsIGVhY2ggZWxlbWVudCByZXByZXNlbnRzIG9uZSBsaW5lCisJb2YgZGlmZi1pbmRleCBvdXRwdXQKKworZGlmZi1pbmRleCBsaW5lICgkbSBoYXNoKQoreworCW1vZGVfYSA9PiBmaXJzdCBjb2x1bW4gb2YgZGlmZi1pbmRleCBvdXRwdXQsIG5vIGxlYWRpbmcgJzonLAorCW1vZGVfYiA9PiBzZWNvbmQgY29sdW1uIG9mIGRpZmYtaW5kZXggb3V0cHV0LAorCXNoYTFfYiA9PiBzaGExc3VtIG9mIHRoZSBmaW5hbCBibG9iLAorCWNoZyA9PiBjaGFuZ2UgdHlwZSBbTUNSQURUXSwKKwlmaWxlX2EgPT4gb3JpZ2luYWwgZmlsZSBuYW1lIG9mIGEgZmlsZSAoaWZmIGNoZyBpcyAnQycgb3IgJ1InKQorCWZpbGVfYiA9PiBuZXcvY3VycmVudCBmaWxlIG5hbWUgb2YgYSBmaWxlIChhbnkgY2hnKQorfQorOworCisjIHJldHZhbCBvZiByZWFkX3VybF9wYXRoc3ssX2FsbH0oKTsKKyRsX21hcCA9IHsKKwkjIHJlcG9zaXRvcnkgcm9vdCB1cmwKKwknaHR0cHM6Ly9zdm4ubXVzaWNwZC5vcmcnID0+IHsKKwkJIyByZXBvc2l0b3J5IHBhdGggCQkjIEdJVF9TVk5fSUQKKwkJJ21wZC90cnVuaycJCT0+CSd0cnVuaycsCisJCSdtcGQvdGFncy8wLjExLjUnCT0+CSd0YWdzLzAuMTEuNScsCisJfSwKK30KKworTm90ZXM6CisJSSBkb24ndCB0cnVzdCB0aGUgZWFjaCgpIGZ1bmN0aW9uIG9uIHVubGVzcyBJIGNyZWF0ZWQgJWhhc2ggbXlzZWxmCisJYmVjYXVzZSB0aGUgaW50ZXJuYWwgaXRlcmF0b3IgbWF5IG5vdCBoYXZlIHN0YXJ0ZWQgYXQgYmFzZS4KZGlmZiAtLWdpdCBhL2dpdC13ZWItLWJyb3dzZS5zaCBiL2dpdC13ZWItLWJyb3dzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZTE1MjUzCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXdlYi0tYnJvd3NlLnNoCkBAIC0wLDAgKzEsMTk2IEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBwcm9ncmFtIGxhdW5jaCBhIHdlYiBicm93c2VyIG9uIHRoZSBodG1sIHBhZ2UKKyMgZGVzY3JpYmluZyBhIGdpdCBjb21tYW5kLgorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hyaXN0aWFuIENvdWRlcgorIyBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlb2RvcmUgWS4gVHMnbworIworIyBUaGlzIGZpbGUgaXMgaGVhdmlseSBzdG9sZW4gZnJvbSBnaXQtbWVyZ2V0b29sLnNoLCBieQorIyBUaGVvZG9yZSBZLiBUcydvICh0aGFua3MpIHRoYXQgaXM6CisjCisjIENvcHlyaWdodCAoYykgMjAwNiBUaGVvZG9yZSBZLiBUcydvCisjCisjIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KKyMgYXQgdGhlIGRpc2NyZXRpb24gb2YgSnVuaW8gQyBIYW1hbm8gb3IgYW55IG90aGVyIG9mZmljaWFsCisjIGdpdCBtYWludGFpbmVyLgorIworCitVU0FHRT0nWy0tYnJvd3Nlcj1icm93c2VyfC0tdG9vbD1icm93c2VyXSBbLS1jb25maWc9Y29uZi52YXJdIHVybC9maWxlIC4uLicKKworIyBUaGlzIG11c3QgYmUgY2FwYWJsZSBvZiBydW5uaW5nIG91dHNpZGUgb2YgZ2l0IGRpcmVjdG9yeSwgc28KKyMgdGhlIHZhbmlsbGEgZ2l0LXNoLXNldHVwIHNob3VsZCBub3QgYmUgdXNlZC4KK05PTkdJVF9PSz1ZZXMKKy4gZ2l0LXNoLXNldHVwCisKK3ZhbGlkX2N1c3RvbV90b29sKCkKK3sKKwlicm93c2VyX2NtZD0iJChnaXQgY29uZmlnICJicm93c2VyLiQxLmNtZCIpIgorCXRlc3QgLW4gIiRicm93c2VyX2NtZCIKK30KKwordmFsaWRfdG9vbCgpIHsKKwljYXNlICIkMSIgaW4KKwlmaXJlZm94IHwgaWNld2Vhc2VsIHwgc2VhbW9ua2V5IHwgaWNlYXBlIHwgXAorCWNocm9tZSB8IGdvb2dsZS1jaHJvbWUgfCBjaHJvbWl1bSB8IGNocm9taXVtLWJyb3dzZXIgfCBcCisJa29ucXVlcm9yIHwgb3BlcmEgfCB3M20gfCBlbGlua3MgfCBsaW5rcyB8IGx5bnggfCBkaWxsbyB8IG9wZW4gfCBcCisJc3RhcnQgfCBjeWdzdGFydCB8IHhkZy1vcGVuKQorCQk7OyAjIGhhcHB5CisJKikKKwkJdmFsaWRfY3VzdG9tX3Rvb2wgIiQxIiB8fCByZXR1cm4gMQorCQk7OworCWVzYWMKK30KKworaW5pdF9icm93c2VyX3BhdGgoKSB7CisJYnJvd3Nlcl9wYXRoPSQoZ2l0IGNvbmZpZyAiYnJvd3Nlci4kMS5wYXRoIikKKwlpZiB0ZXN0IC16ICIkYnJvd3Nlcl9wYXRoIiAmJgorCSAgIHRlc3QgIiQxIiA9IGNocm9taXVtICYmCisJICAgdHlwZSBjaHJvbWl1bS1icm93c2VyID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJYnJvd3Nlcl9wYXRoPWNocm9taXVtLWJyb3dzZXIKKwlmaQorCTogJHticm93c2VyX3BhdGg6PSIkMSJ9Cit9CisKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktYnwtLWJyb3dzZXIqfC10fC0tdG9vbCopCisJCWNhc2UgIiQjLCQxIiBpbgorCQkqLCo9KikKKwkJCWJyb3dzZXI9JChleHByICJ6JDEiIDogJ3otW149XSo9XCguKlwpJykKKwkJCTs7CisJCTEsKikKKwkJCXVzYWdlIDs7CisJCSopCisJCQlicm93c2VyPSIkMiIKKwkJCXNoaWZ0IDs7CisJCWVzYWMKKwkJOzsKKwktY3wtLWNvbmZpZyopCisJCWNhc2UgIiQjLCQxIiBpbgorCQkqLCo9KikKKwkJCWNvbmY9JChleHByICJ6JDEiIDogJ3otW149XSo9XCguKlwpJykKKwkJCTs7CisJCTEsKikKKwkJCXVzYWdlIDs7CisJCSopCisJCQljb25mPSIkMiIKKwkJCXNoaWZ0IDs7CisJCWVzYWMKKwkJOzsKKwktLSkKKwkJYnJlYWsKKwkJOzsKKwktKikKKwkJdXNhZ2UKKwkJOzsKKwkqKQorCQlicmVhaworCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCit0ZXN0ICQjID0gMCAmJiB1c2FnZQorCitpZiB0ZXN0IC16ICIkYnJvd3NlciIKK3RoZW4KKwlmb3Igb3B0IGluICIkY29uZiIgIndlYi5icm93c2VyIgorCWRvCisJCXRlc3QgLXogIiRvcHQiICYmIGNvbnRpbnVlCisJCWJyb3dzZXI9IiQoZ2l0IGNvbmZpZyAkb3B0KSIKKwkJdGVzdCAteiAiJGJyb3dzZXIiIHx8IGJyZWFrCisJZG9uZQorCWlmIHRlc3QgLW4gIiRicm93c2VyIiAmJiAhIHZhbGlkX3Rvb2wgIiRicm93c2VyIjsgdGhlbgorCQllY2hvID4mMiAiZ2l0IGNvbmZpZyBvcHRpb24gJG9wdCBzZXQgdG8gdW5rbm93biBicm93c2VyOiAkYnJvd3NlciIKKwkJZWNobyA+JjIgIlJlc2V0dGluZyB0byBkZWZhdWx0Li4uIgorCQl1bnNldCBicm93c2VyCisJZmkKK2ZpCisKK2lmIHRlc3QgLXogIiRicm93c2VyIiA7IHRoZW4KKwlpZiB0ZXN0IC1uICIkRElTUExBWSI7IHRoZW4KKwkJYnJvd3Nlcl9jYW5kaWRhdGVzPSJmaXJlZm94IGljZXdlYXNlbCBnb29nbGUtY2hyb21lIGNocm9tZSBjaHJvbWl1bSBjaHJvbWl1bS1icm93c2VyIGtvbnF1ZXJvciBvcGVyYSBzZWFtb25rZXkgaWNlYXBlIHczbSBlbGlua3MgbGlua3MgbHlueCBkaWxsbyB4ZGctb3BlbiIKKwkJaWYgdGVzdCAiJEtERV9GVUxMX1NFU1NJT04iID0gInRydWUiOyB0aGVuCisJCQlicm93c2VyX2NhbmRpZGF0ZXM9ImtvbnF1ZXJvciAkYnJvd3Nlcl9jYW5kaWRhdGVzIgorCQlmaQorCWVsc2UKKwkJYnJvd3Nlcl9jYW5kaWRhdGVzPSJ3M20gZWxpbmtzIGxpbmtzIGx5bngiCisJZmkKKwkjIFNFQ1VSSVRZU0VTU0lPTklEIGluZGljYXRlcyBhbiBPUyBYIEdVSSBsb2dpbiBzZXNzaW9uCisJaWYgdGVzdCAtbiAiJFNFQ1VSSVRZU0VTU0lPTklEIiB8fCB0ZXN0IC1uICIkVEVSTV9QUk9HUkFNIgorCXRoZW4KKwkJYnJvd3Nlcl9jYW5kaWRhdGVzPSJvcGVuICRicm93c2VyX2NhbmRpZGF0ZXMiCisJZmkKKwkjIC9iaW4vc3RhcnQgaW5kaWNhdGVzIE1pbkdXCisJaWYgdGVzdCAteCAvYmluL3N0YXJ0OyB0aGVuCisJCWJyb3dzZXJfY2FuZGlkYXRlcz0ic3RhcnQgJGJyb3dzZXJfY2FuZGlkYXRlcyIKKwlmaQorCSMgL3Vzci9iaW4vY3lnc3RhcnQgaW5kaWNhdGVzIEN5Z3dpbgorCWlmIHRlc3QgLXggL3Vzci9iaW4vY3lnc3RhcnQ7IHRoZW4KKwkJYnJvd3Nlcl9jYW5kaWRhdGVzPSJjeWdzdGFydCAkYnJvd3Nlcl9jYW5kaWRhdGVzIgorCWZpCisKKwlmb3IgaSBpbiAkYnJvd3Nlcl9jYW5kaWRhdGVzOyBkbworCQlpbml0X2Jyb3dzZXJfcGF0aCAkaQorCQlpZiB0eXBlICIkYnJvd3Nlcl9wYXRoIiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCQlicm93c2VyPSRpCisJCQlicmVhaworCQlmaQorCWRvbmUKKwl0ZXN0IC16ICIkYnJvd3NlciIgJiYgZGllICJObyBrbm93biBicm93c2VyIGF2YWlsYWJsZS4iCitlbHNlCisJdmFsaWRfdG9vbCAiJGJyb3dzZXIiIHx8IGRpZSAiVW5rbm93biBicm93c2VyICckYnJvd3NlcicuIgorCisJaW5pdF9icm93c2VyX3BhdGggIiRicm93c2VyIgorCisJaWYgdGVzdCAteiAiJGJyb3dzZXJfY21kIiAmJiAhIHR5cGUgIiRicm93c2VyX3BhdGgiID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZGllICJUaGUgYnJvd3NlciAkYnJvd3NlciBpcyBub3QgYXZhaWxhYmxlIGFzICckYnJvd3Nlcl9wYXRoJy4iCisJZmkKK2ZpCisKK2Nhc2UgIiRicm93c2VyIiBpbgorZmlyZWZveHxpY2V3ZWFzZWx8c2VhbW9ua2V5fGljZWFwZSkKKwkjIENoZWNrIHZlcnNpb24gYmVjYXVzZSBmaXJlZm94IDwgMi4wIGRvZXMgbm90IHN1cHBvcnQgIi1uZXctdGFiIi4KKwl2ZXJzPSQoZXhwciAiJCgkYnJvd3Nlcl9wYXRoIC12ZXJzaW9uKSIgOiAnLiogXChbMC05XVswLTldKlwpXC4uKicpCisJTkVXVEFCPSctbmV3LXRhYicKKwl0ZXN0ICIkdmVycyIgLWx0IDIgJiYgTkVXVEFCPScnCisJIiRicm93c2VyX3BhdGgiICRORVdUQUIgIiRAIiAmCisJOzsKK2dvb2dsZS1jaHJvbWV8Y2hyb21lfGNocm9taXVtfGNocm9taXVtLWJyb3dzZXIpCisJIyBObyBuZWVkIHRvIHNwZWNpZnkgbmV3VGFiLiBJdCdzIGRlZmF1bHQgaW4gY2hyb21pdW0KKwkiJGJyb3dzZXJfcGF0aCIgIiRAIiAmCisJOzsKK2tvbnF1ZXJvcikKKwljYXNlICIkKGJhc2VuYW1lICIkYnJvd3Nlcl9wYXRoIikiIGluCisJa29ucXVlcm9yKQorCQkjIEl0J3Mgc2ltcGxlciB0byB1c2Uga2ZtY2xpZW50IHRvIG9wZW4gYSBuZXcgdGFiIGluIGtvbnF1ZXJvci4KKwkJYnJvd3Nlcl9wYXRoPSIkKGVjaG8gIiRicm93c2VyX3BhdGgiIHwgc2VkIC1lICdzL2tvbnF1ZXJvciQva2ZtY2xpZW50LycpIgorCQl0eXBlICIkYnJvd3Nlcl9wYXRoIiA+IC9kZXYvbnVsbCAyPiYxIHx8IGRpZSAiTm8gJyRicm93c2VyX3BhdGgnIGZvdW5kLiIKKwkJIiRicm93c2VyX3BhdGgiIG5ld1RhYiAiJEAiICYKKwkJOzsKKwlrZm1jbGllbnQpCisJCSIkYnJvd3Nlcl9wYXRoIiBuZXdUYWIgIiRAIiAmCisJCTs7CisJKikKKwkJIiRicm93c2VyX3BhdGgiICIkQCIgJgorCQk7OworCWVzYWMKKwk7OwordzNtfGVsaW5rc3xsaW5rc3xseW54fG9wZW58Y3lnc3RhcnR8eGRnLW9wZW4pCisJIiRicm93c2VyX3BhdGgiICIkQCIKKwk7Oworc3RhcnQpCisJZXhlYyAiJGJyb3dzZXJfcGF0aCIgJyJ3ZWItYnJvd3NlIicgIiRAIgorCTs7CitvcGVyYXxkaWxsbykKKwkiJGJyb3dzZXJfcGF0aCIgIiRAIiAmCisJOzsKKyopCisJaWYgdGVzdCAtbiAiJGJyb3dzZXJfY21kIjsgdGhlbgorCQkoIGV2YWwgIiRicm93c2VyX2NtZCBcIlwkQFwiIiApCisJZmkKKwk7OworZXNhYwpkaWZmIC0tZ2l0IGEvZ2l0LmMgYi9naXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmQzMzdlCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LmMKQEAgLTAsMCArMSw4OTEgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJoZWxwLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJhbGlhcy5oIgorI2luY2x1ZGUgInNoYWxsb3cuaCIKKworI2RlZmluZSBSVU5fU0VUVVAJCSgxPDwwKQorI2RlZmluZSBSVU5fU0VUVVBfR0VOVExZCSgxPDwxKQorI2RlZmluZSBVU0VfUEFHRVIJCSgxPDwyKQorLyoKKyAqIHJlcXVpcmUgd29ya2luZyB0cmVlIHRvIGJlIHByZXNlbnQgLS0gYW55dGhpbmcgdXNlcyB0aGlzIG5lZWRzCisgKiBSVU5fU0VUVVAgZm9yIHJlYWRpbmcgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorICovCisjZGVmaW5lIE5FRURfV09SS19UUkVFCQkoMTw8MykKKyNkZWZpbmUgU1VQUE9SVF9TVVBFUl9QUkVGSVgJKDE8PDQpCisjZGVmaW5lIERFTEFZX1BBR0VSX0NPTkZJRwkoMTw8NSkKKyNkZWZpbmUgTk9fUEFSU0VPUFQJCSgxPDw2KSAvKiBwYXJzZS1vcHRpb25zIGlzIG5vdCB1c2VkICovCisKK3N0cnVjdCBjbWRfc3RydWN0IHsKKwljb25zdCBjaGFyICpjbWQ7CisJaW50ICgqZm4pKGludCwgY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqKTsKKwl1bnNpZ25lZCBpbnQgb3B0aW9uOworfTsKKworY29uc3QgY2hhciBnaXRfdXNhZ2Vfc3RyaW5nW10gPQorCU5fKCJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxwYXRoPl0gWy1jIDxuYW1lPj08dmFsdWU+XVxuIgorCSAgICIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PHBhdGg+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorCSAgICIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tYmFyZV1cbiIKKwkgICAiICAgICAgICAgICBbLS1naXQtZGlyPTxwYXRoPl0gWy0td29yay10cmVlPTxwYXRoPl0gWy0tbmFtZXNwYWNlPTxuYW1lPl1cbiIKKwkgICAiICAgICAgICAgICA8Y29tbWFuZD4gWzxhcmdzPl0iKTsKKworY29uc3QgY2hhciBnaXRfbW9yZV9pbmZvX3N0cmluZ1tdID0KKwlOXygiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorCSAgICJjb25jZXB0IGd1aWRlcy4gU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIG9yICdnaXQgaGVscCA8Y29uY2VwdD4nXG4iCisJICAgInRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIG9yIGNvbmNlcHQuXG4iCisJICAgIlNlZSAnZ2l0IGhlbHAgZ2l0JyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS4iKTsKKworc3RhdGljIGludCB1c2VfcGFnZXIgPSAtMTsKKworc3RhdGljIHZvaWQgbGlzdF9idWlsdGlucyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGludCBleGNsdWRlX29wdGlvbik7CisKK3N0YXRpYyB2b2lkIGV4Y2x1ZGVfaGVscGVyc19mcm9tX2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCWludCBpID0gMDsKKworCXdoaWxlIChpIDwgbGlzdC0+bnIpIHsKKwkJaWYgKHN0cnN0cihsaXN0LT5pdGVtc1tpXS5zdHJpbmcsICItLSIpKQorCQkJdW5zb3J0ZWRfc3RyaW5nX2xpc3RfZGVsZXRlX2l0ZW0obGlzdCwgaSwgMCk7CisJCWVsc2UKKwkJCWkrKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfdG9rZW4oY29uc3QgY2hhciAqc3BlYywgaW50IGxlbiwgY29uc3QgY2hhciAqdG9rZW4pCit7CisJaW50IHRva2VuX2xlbiA9IHN0cmxlbih0b2tlbik7CisKKwlyZXR1cm4gbGVuID09IHRva2VuX2xlbiAmJiAhc3RybmNtcChzcGVjLCB0b2tlbiwgdG9rZW5fbGVuKTsKK30KKworc3RhdGljIGludCBsaXN0X2NtZHMoY29uc3QgY2hhciAqc3BlYykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWludCBpOworCWludCBub25naXQ7CisKKwkvKgorCSogU2V0IHVwIHRoZSByZXBvc2l0b3J5IHNvIHdlIGNhbiBwaWNrIHVwIGFueSByZXBvLWxldmVsIGNvbmZpZyAobGlrZQorCSogY29tcGxldGlvbi5jb21tYW5kcykuCisJKi8KKwlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0KTsKKworCXdoaWxlICgqc3BlYykgeworCQljb25zdCBjaGFyICpzZXAgPSBzdHJjaHJudWwoc3BlYywgJywnKTsKKwkJaW50IGxlbiA9IHNlcCAtIHNwZWM7CisKKwkJaWYgKG1hdGNoX3Rva2VuKHNwZWMsIGxlbiwgImJ1aWx0aW5zIikpCisJCQlsaXN0X2J1aWx0aW5zKCZsaXN0LCAwKTsKKwkJZWxzZSBpZiAobWF0Y2hfdG9rZW4oc3BlYywgbGVuLCAibWFpbiIpKQorCQkJbGlzdF9hbGxfbWFpbl9jbWRzKCZsaXN0KTsKKwkJZWxzZSBpZiAobWF0Y2hfdG9rZW4oc3BlYywgbGVuLCAib3RoZXJzIikpCisJCQlsaXN0X2FsbF9vdGhlcl9jbWRzKCZsaXN0KTsKKwkJZWxzZSBpZiAobWF0Y2hfdG9rZW4oc3BlYywgbGVuLCAibm9oZWxwZXJzIikpCisJCQlleGNsdWRlX2hlbHBlcnNfZnJvbV9saXN0KCZsaXN0KTsKKwkJZWxzZSBpZiAobWF0Y2hfdG9rZW4oc3BlYywgbGVuLCAiYWxpYXMiKSkKKwkJCWxpc3RfYWxpYXNlcygmbGlzdCk7CisJCWVsc2UgaWYgKG1hdGNoX3Rva2VuKHNwZWMsIGxlbiwgImNvbmZpZyIpKQorCQkJbGlzdF9jbWRzX2J5X2NvbmZpZygmbGlzdCk7CisJCWVsc2UgaWYgKGxlbiA+IDUgJiYgIXN0cm5jbXAoc3BlYywgImxpc3QtIiwgNSkpIHsKKwkJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCQkJc3RyYnVmX2FkZCgmc2IsIHNwZWMgKyA1LCBsZW4gLSA1KTsKKwkJCWxpc3RfY21kc19ieV9jYXRlZ29yeSgmbGlzdCwgc2IuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCX0KKwkJZWxzZQorCQkJZGllKF8oInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciKSwgc3BlYyk7CisJCXNwZWMgKz0gbGVuOworCQlpZiAoKnNwZWMgPT0gJywnKQorCQkJc3BlYysrOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC5ucjsgaSsrKQorCQlwdXRzKGxpc3QuaXRlbXNbaV0uc3RyaW5nKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvbW1pdF9wYWdlcl9jaG9pY2Uodm9pZCkKK3sKKwlzd2l0Y2ggKHVzZV9wYWdlcikgeworCWNhc2UgMDoKKwkJc2V0ZW52KCJHSVRfUEFHRVIiLCAiY2F0IiwgMSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJc2V0dXBfcGFnZXIoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIHNldHVwX2F1dG9fcGFnZXIoY29uc3QgY2hhciAqY21kLCBpbnQgZGVmKQoreworCWlmICh1c2VfcGFnZXIgIT0gLTEgfHwgcGFnZXJfaW5fdXNlKCkpCisJCXJldHVybjsKKwl1c2VfcGFnZXIgPSBjaGVja19wYWdlcl9jb25maWcoY21kKTsKKwlpZiAodXNlX3BhZ2VyID09IC0xKQorCQl1c2VfcGFnZXIgPSBkZWY7CisJY29tbWl0X3BhZ2VyX2Nob2ljZSgpOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9vcHRpb25zKGNvbnN0IGNoYXIgKioqYXJndiwgaW50ICphcmdjLCBpbnQgKmVudmNoYW5nZWQpCit7CisJY29uc3QgY2hhciAqKm9yaWdfYXJndiA9ICphcmd2OworCisJd2hpbGUgKCphcmdjID4gMCkgeworCQljb25zdCBjaGFyICpjbWQgPSAoKmFyZ3YpWzBdOworCQlpZiAoY21kWzBdICE9ICctJykKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIEZvciBsZWdhY3kgcmVhc29ucywgdGhlICJ2ZXJzaW9uIiBhbmQgImhlbHAiCisJCSAqIGNvbW1hbmRzIGNhbiBiZSB3cml0dGVuIHdpdGggIi0tIiBwcmVwZW5kZWQKKwkJICogdG8gbWFrZSB0aGVtIGxvb2sgbGlrZSBmbGFncy4KKwkJICovCisJCWlmICghc3RyY21wKGNtZCwgIi0taGVscCIpIHx8ICFzdHJjbXAoY21kLCAiLS12ZXJzaW9uIikpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBDaGVjayByZW1haW5pbmcgZmxhZ3MuCisJCSAqLworCQlpZiAoc2tpcF9wcmVmaXgoY21kLCAiLS1leGVjLXBhdGgiLCAmY21kKSkgeworCQkJaWYgKCpjbWQgPT0gJz0nKQorCQkJCWdpdF9zZXRfZXhlY19wYXRoKGNtZCArIDEpOworCQkJZWxzZSB7CisJCQkJcHV0cyhnaXRfZXhlY19wYXRoKCkpOworCQkJCXRyYWNlMl9jbWRfbmFtZSgiX3F1ZXJ5XyIpOworCQkJCWV4aXQoMCk7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLWh0bWwtcGF0aCIpKSB7CisJCQlwdXRzKHN5c3RlbV9wYXRoKEdJVF9IVE1MX1BBVEgpKTsKKwkJCXRyYWNlMl9jbWRfbmFtZSgiX3F1ZXJ5XyIpOworCQkJZXhpdCgwKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tbWFuLXBhdGgiKSkgeworCQkJcHV0cyhzeXN0ZW1fcGF0aChHSVRfTUFOX1BBVEgpKTsKKwkJCXRyYWNlMl9jbWRfbmFtZSgiX3F1ZXJ5XyIpOworCQkJZXhpdCgwKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0taW5mby1wYXRoIikpIHsKKwkJCXB1dHMoc3lzdGVtX3BhdGgoR0lUX0lORk9fUEFUSCkpOworCQkJdHJhY2UyX2NtZF9uYW1lKCJfcXVlcnlfIik7CisJCQlleGl0KDApOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLXAiKSB8fCAhc3RyY21wKGNtZCwgIi0tcGFnaW5hdGUiKSkgeworCQkJdXNlX3BhZ2VyID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi1QIikgfHwgIXN0cmNtcChjbWQsICItLW5vLXBhZ2VyIikpIHsKKwkJCXVzZV9wYWdlciA9IDA7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLW5vLXJlcGxhY2Utb2JqZWN0cyIpKSB7CisJCQlyZWFkX3JlcGxhY2VfcmVmcyA9IDA7CisJCQlzZXRlbnYoTk9fUkVQTEFDRV9PQkpFQ1RTX0VOVklST05NRU5ULCAiMSIsIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1naXQtZGlyIikpIHsKKwkJCWlmICgqYXJnYyA8IDIpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgXygibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLWdpdC1kaXJcbiIgKSk7CisJCQkJdXNhZ2UoZ2l0X3VzYWdlX3N0cmluZyk7CisJCQl9CisJCQlzZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCwgKCphcmd2KVsxXSwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCQkoKmFyZ3YpKys7CisJCQkoKmFyZ2MpLS07CisJCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoY21kLCAiLS1naXQtZGlyPSIsICZjbWQpKSB7CisJCQlzZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCwgY21kLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tbmFtZXNwYWNlIikpIHsKKwkJCWlmICgqYXJnYyA8IDIpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgXygibm8gbmFtZXNwYWNlIGdpdmVuIGZvciAtLW5hbWVzcGFjZVxuIiApKTsKKwkJCQl1c2FnZShnaXRfdXNhZ2Vfc3RyaW5nKTsKKwkJCX0KKwkJCXNldGVudihHSVRfTkFNRVNQQUNFX0VOVklST05NRU5ULCAoKmFyZ3YpWzFdLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJCSgqYXJndikrKzsKKwkJCSgqYXJnYyktLTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChjbWQsICItLW5hbWVzcGFjZT0iLCAmY21kKSkgeworCQkJc2V0ZW52KEdJVF9OQU1FU1BBQ0VfRU5WSVJPTk1FTlQsIGNtZCwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLXdvcmstdHJlZSIpKSB7CisJCQlpZiAoKmFyZ2MgPCAyKSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS13b3JrLXRyZWVcbiIgKSk7CisJCQkJdXNhZ2UoZ2l0X3VzYWdlX3N0cmluZyk7CisJCQl9CisJCQlzZXRlbnYoR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCwgKCphcmd2KVsxXSwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCQkoKmFyZ3YpKys7CisJCQkoKmFyZ2MpLS07CisJCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoY21kLCAiLS13b3JrLXRyZWU9IiwgJmNtZCkpIHsKKwkJCXNldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5ULCBjbWQsIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1zdXBlci1wcmVmaXgiKSkgeworCQkJaWYgKCphcmdjIDwgMikgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCJubyBwcmVmaXggZ2l2ZW4gZm9yIC0tc3VwZXItcHJlZml4XG4iICkpOworCQkJCXVzYWdlKGdpdF91c2FnZV9zdHJpbmcpOworCQkJfQorCQkJc2V0ZW52KEdJVF9TVVBFUl9QUkVGSVhfRU5WSVJPTk1FTlQsICgqYXJndilbMV0sIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQkJKCphcmd2KSsrOworCQkJKCphcmdjKS0tOworCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGNtZCwgIi0tc3VwZXItcHJlZml4PSIsICZjbWQpKSB7CisJCQlzZXRlbnYoR0lUX1NVUEVSX1BSRUZJWF9FTlZJUk9OTUVOVCwgY21kLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tYmFyZSIpKSB7CisJCQljaGFyICpjd2QgPSB4Z2V0Y3dkKCk7CisJCQlpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID0gMTsKKwkJCXNldGVudihHSVRfRElSX0VOVklST05NRU5ULCBjd2QsIDApOworCQkJZnJlZShjd2QpOworCQkJc2V0ZW52KEdJVF9JTVBMSUNJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsICIwIiwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItYyIpKSB7CisJCQlpZiAoKmFyZ2MgPCAyKSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIi1jIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIHN0cmluZ1xuIiApKTsKKwkJCQl1c2FnZShnaXRfdXNhZ2Vfc3RyaW5nKTsKKwkJCX0KKwkJCWdpdF9jb25maWdfcHVzaF9wYXJhbWV0ZXIoKCphcmd2KVsxXSk7CisJCQkoKmFyZ3YpKys7CisJCQkoKmFyZ2MpLS07CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLWxpdGVyYWwtcGF0aHNwZWNzIikpIHsKKwkJCXNldGVudihHSVRfTElURVJBTF9QQVRIU1BFQ1NfRU5WSVJPTk1FTlQsICIxIiwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLW5vLWxpdGVyYWwtcGF0aHNwZWNzIikpIHsKKwkJCXNldGVudihHSVRfTElURVJBTF9QQVRIU1BFQ1NfRU5WSVJPTk1FTlQsICIwIiwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLWdsb2ItcGF0aHNwZWNzIikpIHsKKwkJCXNldGVudihHSVRfR0xPQl9QQVRIU1BFQ1NfRU5WSVJPTk1FTlQsICIxIiwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLW5vZ2xvYi1wYXRoc3BlY3MiKSkgeworCQkJc2V0ZW52KEdJVF9OT0dMT0JfUEFUSFNQRUNTX0VOVklST05NRU5ULCAiMSIsIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1pY2FzZS1wYXRoc3BlY3MiKSkgeworCQkJc2V0ZW52KEdJVF9JQ0FTRV9QQVRIU1BFQ1NfRU5WSVJPTk1FTlQsICIxIiwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLW5vLW9wdGlvbmFsLWxvY2tzIikpIHsKKwkJCXNldGVudihHSVRfT1BUSU9OQUxfTE9DS1NfRU5WSVJPTk1FTlQsICIwIiwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLXNoYWxsb3ctZmlsZSIpKSB7CisJCQkoKmFyZ3YpKys7CisJCQkoKmFyZ2MpLS07CisJCQlzZXRfYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSh0aGVfcmVwb3NpdG9yeSwgKCphcmd2KVswXSwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItQyIpKSB7CisJCQlpZiAoKmFyZ2MgPCAyKSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLUNcbiIgKSk7CisJCQkJdXNhZ2UoZ2l0X3VzYWdlX3N0cmluZyk7CisJCQl9CisJCQlpZiAoKCphcmd2KVsxXVswXSkgeworCQkJCWlmIChjaGRpcigoKmFyZ3YpWzFdKSkKKwkJCQkJZGllX2Vycm5vKCJjYW5ub3QgY2hhbmdlIHRvICclcyciLCAoKmFyZ3YpWzFdKTsKKwkJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkJKmVudmNoYW5nZWQgPSAxOworCQkJfQorCQkJKCphcmd2KSsrOworCQkJKCphcmdjKS0tOworCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGNtZCwgIi0tbGlzdC1jbWRzPSIsICZjbWQpKSB7CisJCQl0cmFjZTJfY21kX25hbWUoIl9xdWVyeV8iKTsKKwkJCWlmICghc3RyY21wKGNtZCwgInBhcnNlb3B0IikpIHsKKwkJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCQkJCWludCBpOworCisJCQkJbGlzdF9idWlsdGlucygmbGlzdCwgTk9fUEFSU0VPUFQpOworCQkJCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspCisJCQkJCXByaW50ZigiJXMgIiwgbGlzdC5pdGVtc1tpXS5zdHJpbmcpOworCQkJCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKKwkJCQlleGl0KDApOworCQkJfSBlbHNlIHsKKwkJCQlleGl0KGxpc3RfY21kcyhjbWQpKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJ1bmtub3duIG9wdGlvbjogJXNcbiIpLCBjbWQpOworCQkJdXNhZ2UoZ2l0X3VzYWdlX3N0cmluZyk7CisJCX0KKworCQkoKmFyZ3YpKys7CisJCSgqYXJnYyktLTsKKwl9CisJcmV0dXJuICgqYXJndikgLSBvcmlnX2FyZ3Y7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2FsaWFzKGludCAqYXJnY3AsIGNvbnN0IGNoYXIgKioqYXJndikKK3sKKwlpbnQgZW52Y2hhbmdlZCA9IDAsIHJldCA9IDAsIHNhdmVkX2Vycm5vID0gZXJybm87CisJaW50IGNvdW50LCBvcHRpb25fY291bnQ7CisJY29uc3QgY2hhciAqKm5ld19hcmd2OworCWNvbnN0IGNoYXIgKmFsaWFzX2NvbW1hbmQ7CisJY2hhciAqYWxpYXNfc3RyaW5nOworCisJYWxpYXNfY29tbWFuZCA9ICgqYXJndilbMF07CisJYWxpYXNfc3RyaW5nID0gYWxpYXNfbG9va3VwKGFsaWFzX2NvbW1hbmQpOworCWlmIChhbGlhc19zdHJpbmcpIHsKKwkJaWYgKCphcmdjcCA+IDEgJiYgIXN0cmNtcCgoKmFyZ3YpWzFdLCAiLWgiKSkKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCInJXMnIGlzIGFsaWFzZWQgdG8gJyVzJyIpLAorCQkJCSAgIGFsaWFzX2NvbW1hbmQsIGFsaWFzX3N0cmluZyk7CisJCWlmIChhbGlhc19zdHJpbmdbMF0gPT0gJyEnKSB7CisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwkJCWludCBub25naXRfb2s7CisKKwkJCS8qIEFsaWFzZXMgZXhwZWN0IEdJVF9QUkVGSVgsIEdJVF9ESVIgZXRjIHRvIGJlIHNldCAqLworCQkJc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vbmdpdF9vayk7CisKKwkJCWNvbW1pdF9wYWdlcl9jaG9pY2UoKTsKKworCQkJY2hpbGQudXNlX3NoZWxsID0gMTsKKwkJCWNoaWxkLnRyYWNlMl9jaGlsZF9jbGFzcyA9ICJzaGVsbF9hbGlhcyI7CisJCQlhcmd2X2FycmF5X3B1c2goJmNoaWxkLmFyZ3MsIGFsaWFzX3N0cmluZyArIDEpOworCQkJYXJndl9hcnJheV9wdXNodigmY2hpbGQuYXJncywgKCphcmd2KSArIDEpOworCisJCQl0cmFjZTJfY21kX2FsaWFzKGFsaWFzX2NvbW1hbmQsIGNoaWxkLmFyZ3MuYXJndik7CisJCQl0cmFjZTJfY21kX2xpc3RfY29uZmlnKCk7CisJCQl0cmFjZTJfY21kX2xpc3RfZW52X3ZhcnMoKTsKKwkJCXRyYWNlMl9jbWRfbmFtZSgiX3J1bl9zaGVsbF9hbGlhc18iKTsKKworCQkJcmV0ID0gcnVuX2NvbW1hbmQoJmNoaWxkKTsKKwkJCWlmIChyZXQgPj0gMCkgICAvKiBub3JtYWwgZXhpdCAqLworCQkJCWV4aXQocmV0KTsKKworCQkJZGllX2Vycm5vKF8oIndoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIiksCisJCQkJICBhbGlhc19jb21tYW5kLCBhbGlhc19zdHJpbmcgKyAxKTsKKwkJfQorCQljb3VudCA9IHNwbGl0X2NtZGxpbmUoYWxpYXNfc3RyaW5nLCAmbmV3X2FyZ3YpOworCQlpZiAoY291bnQgPCAwKQorCQkJZGllKF8oImJhZCBhbGlhcy4lcyBzdHJpbmc6ICVzIiksIGFsaWFzX2NvbW1hbmQsCisJCQkgICAgXyhzcGxpdF9jbWRsaW5lX3N0cmVycm9yKGNvdW50KSkpOworCQlvcHRpb25fY291bnQgPSBoYW5kbGVfb3B0aW9ucygmbmV3X2FyZ3YsICZjb3VudCwgJmVudmNoYW5nZWQpOworCQlpZiAoZW52Y2hhbmdlZCkKKwkJCWRpZShfKCJhbGlhcyAnJXMnIGNoYW5nZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuIgorCQkJICAgICAgIllvdSBjYW4gdXNlICchZ2l0JyBpbiB0aGUgYWxpYXMgdG8gZG8gdGhpcyIpLAorCQkJICAgIGFsaWFzX2NvbW1hbmQpOworCQlNT1ZFX0FSUkFZKG5ld19hcmd2IC0gb3B0aW9uX2NvdW50LCBuZXdfYXJndiwgY291bnQpOworCQluZXdfYXJndiAtPSBvcHRpb25fY291bnQ7CisKKwkJaWYgKGNvdW50IDwgMSkKKwkJCWRpZShfKCJlbXB0eSBhbGlhcyBmb3IgJXMiKSwgYWxpYXNfY29tbWFuZCk7CisKKwkJaWYgKCFzdHJjbXAoYWxpYXNfY29tbWFuZCwgbmV3X2FyZ3ZbMF0pKQorCQkJZGllKF8oInJlY3Vyc2l2ZSBhbGlhczogJXMiKSwgYWxpYXNfY29tbWFuZCk7CisKKwkJdHJhY2VfYXJndl9wcmludGYobmV3X2FyZ3YsCisJCQkJICAidHJhY2U6IGFsaWFzIGV4cGFuc2lvbjogJXMgPT4iLAorCQkJCSAgYWxpYXNfY29tbWFuZCk7CisKKwkJUkVBTExPQ19BUlJBWShuZXdfYXJndiwgY291bnQgKyAqYXJnY3ApOworCQkvKiBpbnNlcnQgYWZ0ZXIgY29tbWFuZCBuYW1lICovCisJCUNPUFlfQVJSQVkobmV3X2FyZ3YgKyBjb3VudCwgKmFyZ3YgKyAxLCAqYXJnY3ApOworCisJCXRyYWNlMl9jbWRfYWxpYXMoYWxpYXNfY29tbWFuZCwgbmV3X2FyZ3YpOworCQl0cmFjZTJfY21kX2xpc3RfY29uZmlnKCk7CisJCXRyYWNlMl9jbWRfbGlzdF9lbnZfdmFycygpOworCisJCSphcmd2ID0gbmV3X2FyZ3Y7CisJCSphcmdjcCArPSBjb3VudCAtIDE7CisKKwkJcmV0ID0gMTsKKwl9CisKKwllcnJubyA9IHNhdmVkX2Vycm5vOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBydW5fYnVpbHRpbihzdHJ1Y3QgY21kX3N0cnVjdCAqcCwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBzdGF0dXMsIGhlbHA7CisJc3RydWN0IHN0YXQgc3Q7CisJY29uc3QgY2hhciAqcHJlZml4OworCisJcHJlZml4ID0gTlVMTDsKKwloZWxwID0gYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIik7CisJaWYgKCFoZWxwKSB7CisJCWlmIChwLT5vcHRpb24gJiBSVU5fU0VUVVApCisJCQlwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJCWVsc2UgaWYgKHAtPm9wdGlvbiAmIFJVTl9TRVRVUF9HRU5UTFkpIHsKKwkJCWludCBub25naXRfb2s7CisJCQlwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0X29rKTsKKwkJfQorCisJCWlmICh1c2VfcGFnZXIgPT0gLTEgJiYgcC0+b3B0aW9uICYgKFJVTl9TRVRVUCB8IFJVTl9TRVRVUF9HRU5UTFkpICYmCisJCSAgICAhKHAtPm9wdGlvbiAmIERFTEFZX1BBR0VSX0NPTkZJRykpCisJCQl1c2VfcGFnZXIgPSBjaGVja19wYWdlcl9jb25maWcocC0+Y21kKTsKKwkJaWYgKHVzZV9wYWdlciA9PSAtMSAmJiBwLT5vcHRpb24gJiBVU0VfUEFHRVIpCisJCQl1c2VfcGFnZXIgPSAxOworCisJCWlmICgocC0+b3B0aW9uICYgKFJVTl9TRVRVUCB8IFJVTl9TRVRVUF9HRU5UTFkpKSAmJgorCQkgICAgc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpIC8qIGdldF9naXRfZGlyKCkgbWF5IHNldCB1cCByZXBvLCBhdm9pZCB0aGF0ICovCisJCQl0cmFjZV9yZXBvX3NldHVwKHByZWZpeCk7CisJfQorCWNvbW1pdF9wYWdlcl9jaG9pY2UoKTsKKworCWlmICghaGVscCAmJiBnZXRfc3VwZXJfcHJlZml4KCkpIHsKKwkJaWYgKCEocC0+b3B0aW9uICYgU1VQUE9SVF9TVVBFUl9QUkVGSVgpKQorCQkJZGllKF8oIiVzIGRvZXNuJ3Qgc3VwcG9ydCAtLXN1cGVyLXByZWZpeCIpLCBwLT5jbWQpOworCX0KKworCWlmICghaGVscCAmJiBwLT5vcHRpb24gJiBORUVEX1dPUktfVFJFRSkKKwkJc2V0dXBfd29ya190cmVlKCk7CisKKwl0cmFjZV9hcmd2X3ByaW50Zihhcmd2LCAidHJhY2U6IGJ1aWx0LWluOiBnaXQiKTsKKwl0cmFjZTJfY21kX25hbWUocC0+Y21kKTsKKwl0cmFjZTJfY21kX2xpc3RfY29uZmlnKCk7CisJdHJhY2UyX2NtZF9saXN0X2Vudl92YXJzKCk7CisKKwl2YWxpZGF0ZV9jYWNoZV9lbnRyaWVzKHRoZV9yZXBvc2l0b3J5LT5pbmRleCk7CisJc3RhdHVzID0gcC0+Zm4oYXJnYywgYXJndiwgcHJlZml4KTsKKwl2YWxpZGF0ZV9jYWNoZV9lbnRyaWVzKHRoZV9yZXBvc2l0b3J5LT5pbmRleCk7CisKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJLyogU29tZWJvZHkgY2xvc2VkIHN0ZG91dD8gKi8KKwlpZiAoZnN0YXQoZmlsZW5vKHN0ZG91dCksICZzdCkpCisJCXJldHVybiAwOworCS8qIElnbm9yZSB3cml0ZSBlcnJvcnMgZm9yIHBpcGVzIGFuZCBzb2NrZXRzLi4gKi8KKwlpZiAoU19JU0ZJRk8oc3Quc3RfbW9kZSkgfHwgU19JU1NPQ0soc3Quc3RfbW9kZSkpCisJCXJldHVybiAwOworCisJLyogQ2hlY2sgZm9yIEVOT1NQQyBhbmQgRUlPIGVycm9ycy4uICovCisJaWYgKGZmbHVzaChzdGRvdXQpKQorCQlkaWVfZXJybm8oXygid3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiKSk7CisJaWYgKGZlcnJvcihzdGRvdXQpKQorCQlkaWUoXygidW5rbm93biB3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIpKTsKKwlpZiAoZmNsb3NlKHN0ZG91dCkpCisJCWRpZV9lcnJubyhfKCJjbG9zZSBmYWlsZWQgb24gc3RhbmRhcmQgb3V0cHV0IikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNtZF9zdHJ1Y3QgY29tbWFuZHNbXSA9IHsKKwl7ICJhZGQiLCBjbWRfYWRkLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgImFtIiwgY21kX2FtLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgImFubm90YXRlIiwgY21kX2Fubm90YXRlLCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LAorCXsgImFwcGx5IiwgY21kX2FwcGx5LCBSVU5fU0VUVVBfR0VOVExZIH0sCisJeyAiYXJjaGl2ZSIsIGNtZF9hcmNoaXZlLCBSVU5fU0VUVVBfR0VOVExZIH0sCisJeyAiYmlzZWN0LS1oZWxwZXIiLCBjbWRfYmlzZWN0X19oZWxwZXIsIFJVTl9TRVRVUCB9LAorCXsgImJsYW1lIiwgY21kX2JsYW1lLCBSVU5fU0VUVVAgfSwKKwl7ICJicmFuY2giLCBjbWRfYnJhbmNoLCBSVU5fU0VUVVAgfCBERUxBWV9QQUdFUl9DT05GSUcgfSwKKwl7ICJidW5kbGUiLCBjbWRfYnVuZGxlLCBSVU5fU0VUVVBfR0VOVExZIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJjYXQtZmlsZSIsIGNtZF9jYXRfZmlsZSwgUlVOX1NFVFVQIH0sCisJeyAiY2hlY2stYXR0ciIsIGNtZF9jaGVja19hdHRyLCBSVU5fU0VUVVAgfSwKKwl7ICJjaGVjay1pZ25vcmUiLCBjbWRfY2hlY2tfaWdub3JlLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgImNoZWNrLW1haWxtYXAiLCBjbWRfY2hlY2tfbWFpbG1hcCwgUlVOX1NFVFVQIH0sCisJeyAiY2hlY2stcmVmLWZvcm1hdCIsIGNtZF9jaGVja19yZWZfZm9ybWF0LCBOT19QQVJTRU9QVCAgfSwKKwl7ICJjaGVja291dCIsIGNtZF9jaGVja291dCwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJjaGVja291dC1pbmRleCIsIGNtZF9jaGVja291dF9pbmRleCwKKwkJUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUV9LAorCXsgImNoZXJyeSIsIGNtZF9jaGVycnksIFJVTl9TRVRVUCB9LAorCXsgImNoZXJyeS1waWNrIiwgY21kX2NoZXJyeV9waWNrLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgImNsZWFuIiwgY21kX2NsZWFuLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgImNsb25lIiwgY21kX2Nsb25lIH0sCisJeyAiY29sdW1uIiwgY21kX2NvbHVtbiwgUlVOX1NFVFVQX0dFTlRMWSB9LAorCXsgImNvbW1pdCIsIGNtZF9jb21taXQsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAiY29tbWl0LWdyYXBoIiwgY21kX2NvbW1pdF9ncmFwaCwgUlVOX1NFVFVQIH0sCisJeyAiY29tbWl0LXRyZWUiLCBjbWRfY29tbWl0X3RyZWUsIFJVTl9TRVRVUCB8IE5PX1BBUlNFT1BUIH0sCisJeyAiY29uZmlnIiwgY21kX2NvbmZpZywgUlVOX1NFVFVQX0dFTlRMWSB8IERFTEFZX1BBR0VSX0NPTkZJRyB9LAorCXsgImNvdW50LW9iamVjdHMiLCBjbWRfY291bnRfb2JqZWN0cywgUlVOX1NFVFVQIH0sCisJeyAiY3JlZGVudGlhbCIsIGNtZF9jcmVkZW50aWFsLCBSVU5fU0VUVVBfR0VOVExZIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJkZXNjcmliZSIsIGNtZF9kZXNjcmliZSwgUlVOX1NFVFVQIH0sCisJeyAiZGlmZiIsIGNtZF9kaWZmLCBOT19QQVJTRU9QVCB9LAorCXsgImRpZmYtZmlsZXMiLCBjbWRfZGlmZl9maWxlcywgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfCBOT19QQVJTRU9QVCB9LAorCXsgImRpZmYtaW5kZXgiLCBjbWRfZGlmZl9pbmRleCwgUlVOX1NFVFVQIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJkaWZmLXRyZWUiLCBjbWRfZGlmZl90cmVlLCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LAorCXsgImRpZmZ0b29sIiwgY21kX2RpZmZ0b29sLCBSVU5fU0VUVVBfR0VOVExZIH0sCisJeyAiZW52LS1oZWxwZXIiLCBjbWRfZW52X19oZWxwZXIgfSwKKwl7ICJmYXN0LWV4cG9ydCIsIGNtZF9mYXN0X2V4cG9ydCwgUlVOX1NFVFVQIH0sCisJeyAiZmV0Y2giLCBjbWRfZmV0Y2gsIFJVTl9TRVRVUCB9LAorCXsgImZldGNoLXBhY2siLCBjbWRfZmV0Y2hfcGFjaywgUlVOX1NFVFVQIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJmbXQtbWVyZ2UtbXNnIiwgY21kX2ZtdF9tZXJnZV9tc2csIFJVTl9TRVRVUCB9LAorCXsgImZvci1lYWNoLXJlZiIsIGNtZF9mb3JfZWFjaF9yZWYsIFJVTl9TRVRVUCB9LAorCXsgImZvcm1hdC1wYXRjaCIsIGNtZF9mb3JtYXRfcGF0Y2gsIFJVTl9TRVRVUCB9LAorCXsgImZzY2siLCBjbWRfZnNjaywgUlVOX1NFVFVQIH0sCisJeyAiZnNjay1vYmplY3RzIiwgY21kX2ZzY2ssIFJVTl9TRVRVUCB9LAorCXsgImdjIiwgY21kX2djLCBSVU5fU0VUVVAgfSwKKwl7ICJnZXQtdGFyLWNvbW1pdC1pZCIsIGNtZF9nZXRfdGFyX2NvbW1pdF9pZCwgTk9fUEFSU0VPUFQgfSwKKwl7ICJncmVwIiwgY21kX2dyZXAsIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwl7ICJoYXNoLW9iamVjdCIsIGNtZF9oYXNoX29iamVjdCB9LAorCXsgImhlbHAiLCBjbWRfaGVscCB9LAorCXsgImluZGV4LXBhY2siLCBjbWRfaW5kZXhfcGFjaywgUlVOX1NFVFVQX0dFTlRMWSB8IE5PX1BBUlNFT1BUIH0sCisJeyAiaW5pdCIsIGNtZF9pbml0X2RiIH0sCisJeyAiaW5pdC1kYiIsIGNtZF9pbml0X2RiIH0sCisJeyAiaW50ZXJwcmV0LXRyYWlsZXJzIiwgY21kX2ludGVycHJldF90cmFpbGVycywgUlVOX1NFVFVQX0dFTlRMWSB9LAorCXsgImxvZyIsIGNtZF9sb2csIFJVTl9TRVRVUCB9LAorCXsgImxzLWZpbGVzIiwgY21kX2xzX2ZpbGVzLCBSVU5fU0VUVVAgfSwKKwl7ICJscy1yZW1vdGUiLCBjbWRfbHNfcmVtb3RlLCBSVU5fU0VUVVBfR0VOVExZIH0sCisJeyAibHMtdHJlZSIsIGNtZF9sc190cmVlLCBSVU5fU0VUVVAgfSwKKwl7ICJtYWlsaW5mbyIsIGNtZF9tYWlsaW5mbywgUlVOX1NFVFVQX0dFTlRMWSB8IE5PX1BBUlNFT1BUIH0sCisJeyAibWFpbHNwbGl0IiwgY21kX21haWxzcGxpdCwgTk9fUEFSU0VPUFQgfSwKKwl7ICJtZXJnZSIsIGNtZF9tZXJnZSwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJtZXJnZS1iYXNlIiwgY21kX21lcmdlX2Jhc2UsIFJVTl9TRVRVUCB9LAorCXsgIm1lcmdlLWZpbGUiLCBjbWRfbWVyZ2VfZmlsZSwgUlVOX1NFVFVQX0dFTlRMWSB9LAorCXsgIm1lcmdlLWluZGV4IiwgY21kX21lcmdlX2luZGV4LCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LAorCXsgIm1lcmdlLW91cnMiLCBjbWRfbWVyZ2Vfb3VycywgUlVOX1NFVFVQIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJtZXJnZS1yZWN1cnNpdmUiLCBjbWRfbWVyZ2VfcmVjdXJzaXZlLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB8IE5PX1BBUlNFT1BUIH0sCisJeyAibWVyZ2UtcmVjdXJzaXZlLW91cnMiLCBjbWRfbWVyZ2VfcmVjdXJzaXZlLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB8IE5PX1BBUlNFT1BUIH0sCisJeyAibWVyZ2UtcmVjdXJzaXZlLXRoZWlycyIsIGNtZF9tZXJnZV9yZWN1cnNpdmUsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJtZXJnZS1zdWJ0cmVlIiwgY21kX21lcmdlX3JlY3Vyc2l2ZSwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfCBOT19QQVJTRU9QVCB9LAorCXsgIm1lcmdlLXRyZWUiLCBjbWRfbWVyZ2VfdHJlZSwgUlVOX1NFVFVQIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJta3RhZyIsIGNtZF9ta3RhZywgUlVOX1NFVFVQIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJta3RyZWUiLCBjbWRfbWt0cmVlLCBSVU5fU0VUVVAgfSwKKwl7ICJtdWx0aS1wYWNrLWluZGV4IiwgY21kX211bHRpX3BhY2tfaW5kZXgsIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwl7ICJtdiIsIGNtZF9tdiwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJuYW1lLXJldiIsIGNtZF9uYW1lX3JldiwgUlVOX1NFVFVQIH0sCisJeyAibm90ZXMiLCBjbWRfbm90ZXMsIFJVTl9TRVRVUCB9LAorCXsgInBhY2stb2JqZWN0cyIsIGNtZF9wYWNrX29iamVjdHMsIFJVTl9TRVRVUCB9LAorCXsgInBhY2stcmVkdW5kYW50IiwgY21kX3BhY2tfcmVkdW5kYW50LCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LAorCXsgInBhY2stcmVmcyIsIGNtZF9wYWNrX3JlZnMsIFJVTl9TRVRVUCB9LAorCXsgInBhdGNoLWlkIiwgY21kX3BhdGNoX2lkLCBSVU5fU0VUVVBfR0VOVExZIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJwaWNrYXhlIiwgY21kX2JsYW1lLCBSVU5fU0VUVVAgfSwKKwl7ICJwcnVuZSIsIGNtZF9wcnVuZSwgUlVOX1NFVFVQIH0sCisJeyAicHJ1bmUtcGFja2VkIiwgY21kX3BydW5lX3BhY2tlZCwgUlVOX1NFVFVQIH0sCisJeyAicHVsbCIsIGNtZF9wdWxsLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgInB1c2giLCBjbWRfcHVzaCwgUlVOX1NFVFVQIH0sCisJeyAicmFuZ2UtZGlmZiIsIGNtZF9yYW5nZV9kaWZmLCBSVU5fU0VUVVAgfCBVU0VfUEFHRVIgfSwKKwl7ICJyZWFkLXRyZWUiLCBjbWRfcmVhZF90cmVlLCBSVU5fU0VUVVAgfCBTVVBQT1JUX1NVUEVSX1BSRUZJWH0sCisJeyAicmViYXNlIiwgY21kX3JlYmFzZSwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJyZWJhc2UtLWludGVyYWN0aXZlIiwgY21kX3JlYmFzZV9faW50ZXJhY3RpdmUsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAicmVjZWl2ZS1wYWNrIiwgY21kX3JlY2VpdmVfcGFjayB9LAorCXsgInJlZmxvZyIsIGNtZF9yZWZsb2csIFJVTl9TRVRVUCB9LAorCXsgInJlbW90ZSIsIGNtZF9yZW1vdGUsIFJVTl9TRVRVUCB9LAorCXsgInJlbW90ZS1leHQiLCBjbWRfcmVtb3RlX2V4dCwgTk9fUEFSU0VPUFQgfSwKKwl7ICJyZW1vdGUtZmQiLCBjbWRfcmVtb3RlX2ZkLCBOT19QQVJTRU9QVCB9LAorCXsgInJlcGFjayIsIGNtZF9yZXBhY2ssIFJVTl9TRVRVUCB9LAorCXsgInJlcGxhY2UiLCBjbWRfcmVwbGFjZSwgUlVOX1NFVFVQIH0sCisJeyAicmVyZXJlIiwgY21kX3JlcmVyZSwgUlVOX1NFVFVQIH0sCisJeyAicmVzZXQiLCBjbWRfcmVzZXQsIFJVTl9TRVRVUCB9LAorCXsgInJlc3RvcmUiLCBjbWRfcmVzdG9yZSwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJyZXYtbGlzdCIsIGNtZF9yZXZfbGlzdCwgUlVOX1NFVFVQIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJyZXYtcGFyc2UiLCBjbWRfcmV2X3BhcnNlLCBOT19QQVJTRU9QVCB9LAorCXsgInJldmVydCIsIGNtZF9yZXZlcnQsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAicm0iLCBjbWRfcm0sIFJVTl9TRVRVUCB9LAorCXsgInNlbmQtcGFjayIsIGNtZF9zZW5kX3BhY2ssIFJVTl9TRVRVUCB9LAorCXsgInNob3J0bG9nIiwgY21kX3Nob3J0bG9nLCBSVU5fU0VUVVBfR0VOVExZIHwgVVNFX1BBR0VSIH0sCisJeyAic2hvdyIsIGNtZF9zaG93LCBSVU5fU0VUVVAgfSwKKwl7ICJzaG93LWJyYW5jaCIsIGNtZF9zaG93X2JyYW5jaCwgUlVOX1NFVFVQIH0sCisJeyAic2hvdy1pbmRleCIsIGNtZF9zaG93X2luZGV4IH0sCisJeyAic2hvdy1yZWYiLCBjbWRfc2hvd19yZWYsIFJVTl9TRVRVUCB9LAorCXsgInNwYXJzZS1jaGVja291dCIsIGNtZF9zcGFyc2VfY2hlY2tvdXQsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAic3RhZ2UiLCBjbWRfYWRkLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgInN0YXNoIiwgY21kX3N0YXNoLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgInN0YXR1cyIsIGNtZF9zdGF0dXMsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAic3RyaXBzcGFjZSIsIGNtZF9zdHJpcHNwYWNlIH0sCisJeyAic3VibW9kdWxlLS1oZWxwZXIiLCBjbWRfc3VibW9kdWxlX19oZWxwZXIsIFJVTl9TRVRVUCB8IFNVUFBPUlRfU1VQRVJfUFJFRklYIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJzd2l0Y2giLCBjbWRfc3dpdGNoLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgInN5bWJvbGljLXJlZiIsIGNtZF9zeW1ib2xpY19yZWYsIFJVTl9TRVRVUCB9LAorCXsgInRhZyIsIGNtZF90YWcsIFJVTl9TRVRVUCB8IERFTEFZX1BBR0VSX0NPTkZJRyB9LAorCXsgInVucGFjay1maWxlIiwgY21kX3VucGFja19maWxlLCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LAorCXsgInVucGFjay1vYmplY3RzIiwgY21kX3VucGFja19vYmplY3RzLCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LAorCXsgInVwZGF0ZS1pbmRleCIsIGNtZF91cGRhdGVfaW5kZXgsIFJVTl9TRVRVUCB9LAorCXsgInVwZGF0ZS1yZWYiLCBjbWRfdXBkYXRlX3JlZiwgUlVOX1NFVFVQIH0sCisJeyAidXBkYXRlLXNlcnZlci1pbmZvIiwgY21kX3VwZGF0ZV9zZXJ2ZXJfaW5mbywgUlVOX1NFVFVQIH0sCisJeyAidXBsb2FkLWFyY2hpdmUiLCBjbWRfdXBsb2FkX2FyY2hpdmUsIE5PX1BBUlNFT1BUIH0sCisJeyAidXBsb2FkLWFyY2hpdmUtLXdyaXRlciIsIGNtZF91cGxvYWRfYXJjaGl2ZV93cml0ZXIsIE5PX1BBUlNFT1BUIH0sCisJeyAidXBsb2FkLXBhY2siLCBjbWRfdXBsb2FkX3BhY2sgfSwKKwl7ICJ2YXIiLCBjbWRfdmFyLCBSVU5fU0VUVVBfR0VOVExZIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJ2ZXJpZnktY29tbWl0IiwgY21kX3ZlcmlmeV9jb21taXQsIFJVTl9TRVRVUCB9LAorCXsgInZlcmlmeS1wYWNrIiwgY21kX3ZlcmlmeV9wYWNrIH0sCisJeyAidmVyaWZ5LXRhZyIsIGNtZF92ZXJpZnlfdGFnLCBSVU5fU0VUVVAgfSwKKwl7ICJ2ZXJzaW9uIiwgY21kX3ZlcnNpb24gfSwKKwl7ICJ3aGF0Y2hhbmdlZCIsIGNtZF93aGF0Y2hhbmdlZCwgUlVOX1NFVFVQIH0sCisJeyAid29ya3RyZWUiLCBjbWRfd29ya3RyZWUsIFJVTl9TRVRVUCB8IE5PX1BBUlNFT1BUIH0sCisJeyAid3JpdGUtdHJlZSIsIGNtZF93cml0ZV90cmVlLCBSVU5fU0VUVVAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY21kX3N0cnVjdCAqZ2V0X2J1aWx0aW4oY29uc3QgY2hhciAqcykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tYW5kcyk7IGkrKykgeworCQlzdHJ1Y3QgY21kX3N0cnVjdCAqcCA9IGNvbW1hbmRzICsgaTsKKwkJaWYgKCFzdHJjbXAocywgcC0+Y21kKSkKKwkJCXJldHVybiBwOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworaW50IGlzX2J1aWx0aW4oY29uc3QgY2hhciAqcykKK3sKKwlyZXR1cm4gISFnZXRfYnVpbHRpbihzKTsKK30KKworc3RhdGljIHZvaWQgbGlzdF9idWlsdGlucyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm91dCwgdW5zaWduZWQgaW50IGV4Y2x1ZGVfb3B0aW9uKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1hbmRzKTsgaSsrKSB7CisJCWlmIChleGNsdWRlX29wdGlvbiAmJgorCQkgICAgKGNvbW1hbmRzW2ldLm9wdGlvbiAmIGV4Y2x1ZGVfb3B0aW9uKSkKKwkJCWNvbnRpbnVlOworCQlzdHJpbmdfbGlzdF9hcHBlbmQob3V0LCBjb21tYW5kc1tpXS5jbWQpOworCX0KK30KKworI2lmZGVmIFNUUklQX0VYVEVOU0lPTgorc3RhdGljIHZvaWQgc3RyaXBfZXh0ZW5zaW9uKGNvbnN0IGNoYXIgKiphcmd2KQoreworCXNpemVfdCBsZW47CisKKwlpZiAoc3RyaXBfc3VmZml4KGFyZ3ZbMF0sIFNUUklQX0VYVEVOU0lPTiwgJmxlbikpCisJCWFyZ3ZbMF0gPSB4bWVtZHVweihhcmd2WzBdLCBsZW4pOworfQorI2Vsc2UKKyNkZWZpbmUgc3RyaXBfZXh0ZW5zaW9uKGNtZCkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBoYW5kbGVfYnVpbHRpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwljb25zdCBjaGFyICpjbWQ7CisJc3RydWN0IGNtZF9zdHJ1Y3QgKmJ1aWx0aW47CisKKwlzdHJpcF9leHRlbnNpb24oYXJndik7CisJY21kID0gYXJndlswXTsKKworCS8qIFR1cm4gImdpdCBjbWQgLS1oZWxwIiBpbnRvICJnaXQgaGVscCAtLWV4Y2x1ZGUtZ3VpZGVzIGNtZCIgKi8KKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcChhcmd2WzFdLCAiLS1oZWxwIikpIHsKKwkJaW50IGk7CisKKwkJYXJndlsxXSA9IGFyZ3ZbMF07CisJCWFyZ3ZbMF0gPSBjbWQgPSAiaGVscCI7CisKKwkJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBhcmd2W2ldKTsKKwkJCWlmICghaSkKKwkJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLWV4Y2x1ZGUtZ3VpZGVzIik7CisJCX0KKworCQlhcmdjKys7CisJCWFyZ3YgPSBhcmdzLmFyZ3Y7CisJfQorCisJYnVpbHRpbiA9IGdldF9idWlsdGluKGNtZCk7CisJaWYgKGJ1aWx0aW4pCisJCWV4aXQocnVuX2J1aWx0aW4oYnVpbHRpbiwgYXJnYywgYXJndikpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworfQorCitzdGF0aWMgdm9pZCBleGVjdl9kYXNoZWRfZXh0ZXJuYWwoY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCBzdGF0dXM7CisKKwlpZiAoZ2V0X3N1cGVyX3ByZWZpeCgpKQorCQlkaWUoXygiJXMgZG9lc24ndCBzdXBwb3J0IC0tc3VwZXItcHJlZml4IiksIGFyZ3ZbMF0pOworCisJaWYgKHVzZV9wYWdlciA9PSAtMSAmJiAhaXNfYnVpbHRpbihhcmd2WzBdKSkKKwkJdXNlX3BhZ2VyID0gY2hlY2tfcGFnZXJfY29uZmlnKGFyZ3ZbMF0pOworCWNvbW1pdF9wYWdlcl9jaG9pY2UoKTsKKworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNtZC5hcmdzLCAiZ2l0LSVzIiwgYXJndlswXSk7CisJYXJndl9hcnJheV9wdXNodigmY21kLmFyZ3MsIGFyZ3YgKyAxKTsKKwljbWQuY2xlYW5fb25fZXhpdCA9IDE7CisJY21kLndhaXRfYWZ0ZXJfY2xlYW4gPSAxOworCWNtZC5zaWxlbnRfZXhlY19mYWlsdXJlID0gMTsKKwljbWQudHJhY2UyX2NoaWxkX2NsYXNzID0gImRhc2hlZCI7CisKKwl0cmFjZTJfY21kX25hbWUoIl9ydW5fZGFzaGVkXyIpOworCisJLyoKKwkgKiBUaGUgY29kZSBpbiBydW5fY29tbWFuZCgpIGxvZ3MgdHJhY2UyIGNoaWxkX3N0YXJ0L2NoaWxkX2V4aXQKKwkgKiBldmVudHMsIHNvIHdlIGRvIG5vdCBuZWVkIHRvIHJlcG9ydCBleGVjL2V4ZWNfcmVzdWx0IGV2ZW50cyBoZXJlLgorCSAqLworCXRyYWNlX2FyZ3ZfcHJpbnRmKGNtZC5hcmdzLmFyZ3YsICJ0cmFjZTogZXhlYzoiKTsKKworCS8qCisJICogSWYgd2UgZmFpbCBiZWNhdXNlIHRoZSBjb21tYW5kIGlzIG5vdCBmb3VuZCwgaXQgaXMKKwkgKiBPSyB0byByZXR1cm4uIE90aGVyd2lzZSwgd2UganVzdCBwYXNzIGFsb25nIHRoZSBzdGF0dXMgY29kZSwKKwkgKiBvciBvdXIgdXN1YWwgZ2VuZXJpYyBjb2RlIGlmIHdlIHdlcmUgbm90IGV2ZW4gYWJsZSB0byBleGVjCisJICogdGhlIHByb2dyYW0uCisJICovCisJc3RhdHVzID0gcnVuX2NvbW1hbmQoJmNtZCk7CisKKwkvKgorCSAqIElmIHRoZSBjaGlsZCBwcm9jZXNzIHJhbiBhbmQgd2UgYXJlIG5vdyBnb2luZyB0byBleGl0LCBlbWl0IGEKKwkgKiBnZW5lcmljIHN0cmluZyBhcyBvdXIgdHJhY2UyIGNvbW1hbmQgdmVyYiB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogbGF1bmNoZWQgYSBkYXNoZWQgY29tbWFuZC4KKwkgKi8KKwlpZiAoc3RhdHVzID49IDApCisJCWV4aXQoc3RhdHVzKTsKKwllbHNlIGlmIChlcnJubyAhPSBFTk9FTlQpCisJCWV4aXQoMTI4KTsKK30KKworc3RhdGljIGludCBydW5fYXJndihpbnQgKmFyZ2NwLCBjb25zdCBjaGFyICoqKmFyZ3YpCit7CisJaW50IGRvbmVfYWxpYXMgPSAwOworCXN0cnVjdCBzdHJpbmdfbGlzdCBjbWRfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnNlZW47CisKKwl3aGlsZSAoMSkgeworCQkvKgorCQkgKiBJZiB3ZSB0cmllZCBhbGlhcyBhbmQgZnV0emVkIHdpdGggb3VyIGVudmlyb25tZW50LAorCQkgKiBpdCBubyBsb25nZXIgaXMgc2FmZSB0byBpbnZva2UgYnVpbHRpbnMgZGlyZWN0bHkgaW4KKwkJICogZ2VuZXJhbC4gIFdlIGhhdmUgdG8gc3Bhd24gdGhlbSBhcyBkYXNoZWQgZXh0ZXJuYWxzLgorCQkgKgorCQkgKiBORUVEU1dPUks6IGlmIHdlIGNhbiBmaWd1cmUgb3V0IGNhc2VzCisJCSAqIHdoZXJlIGl0IGlzIHNhZmUgdG8gZG8sIHdlIGNhbiBhdm9pZCBzcGF3bmluZyBhIG5ldworCQkgKiBwcm9jZXNzLgorCQkgKi8KKwkJaWYgKCFkb25lX2FsaWFzKQorCQkJaGFuZGxlX2J1aWx0aW4oKmFyZ2NwLCAqYXJndik7CisJCWVsc2UgaWYgKGdldF9idWlsdGluKCoqYXJndikpIHsKKwkJCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJCQlpbnQgaTsKKworCQkJLyoKKwkJCSAqIFRoZSBjdXJyZW50IHByb2Nlc3MgaXMgY29tbWl0dGVkIHRvIGxhdW5jaGluZyBhCisJCQkgKiBjaGlsZCBwcm9jZXNzIHRvIHJ1biB0aGUgY29tbWFuZCBuYW1lZCBpbiAoKiphcmd2KQorCQkJICogYW5kIGV4aXRpbmcuICBMb2cgYSBnZW5lcmljIHN0cmluZyBhcyB0aGUgdHJhY2UyCisJCQkgKiBjb21tYW5kIHZlcmIgdG8gaW5kaWNhdGUgdGhpcy4gIE5vdGUgdGhhdCB0aGUgY2hpbGQKKwkJCSAqIHByb2Nlc3Mgd2lsbCBsb2cgdGhlIGFjdHVhbCB2ZXJiIHdoZW4gaXQgcnVucy4KKwkJCSAqLworCQkJdHJhY2UyX2NtZF9uYW1lKCJfcnVuX2dpdF9hbGlhc18iKTsKKworCQkJaWYgKGdldF9zdXBlcl9wcmVmaXgoKSkKKwkJCQlkaWUoIiVzIGRvZXNuJ3Qgc3VwcG9ydCAtLXN1cGVyLXByZWZpeCIsICoqYXJndik7CisKKwkJCWNvbW1pdF9wYWdlcl9jaG9pY2UoKTsKKworCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiZ2l0Iik7CisJCQlmb3IgKGkgPSAwOyBpIDwgKmFyZ2NwOyBpKyspCisJCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAoKmFyZ3YpW2ldKTsKKworCQkJdHJhY2VfYXJndl9wcmludGYoYXJncy5hcmd2LCAidHJhY2U6IGV4ZWM6Iik7CisKKwkJCS8qCisJCQkgKiBpZiB3ZSBmYWlsIGJlY2F1c2UgdGhlIGNvbW1hbmQgaXMgbm90IGZvdW5kLCBpdCBpcworCQkJICogT0sgdG8gcmV0dXJuLiBPdGhlcndpc2UsIHdlIGp1c3QgcGFzcyBhbG9uZyB0aGUgc3RhdHVzIGNvZGUuCisJCQkgKi8KKwkJCWkgPSBydW5fY29tbWFuZF92X29wdF90cjIoYXJncy5hcmd2LCBSVU5fU0lMRU5UX0VYRUNfRkFJTFVSRSB8CisJCQkJCQkgIFJVTl9DTEVBTl9PTl9FWElULCAiZ2l0X2FsaWFzIik7CisJCQlpZiAoaSA+PSAwIHx8IGVycm5vICE9IEVOT0VOVCkKKwkJCQlleGl0KGkpOworCQkJZGllKCJjb3VsZCBub3QgZXhlY3V0ZSBidWlsdGluICVzIiwgKiphcmd2KTsKKwkJfQorCisJCS8qIC4uIHRoZW4gdHJ5IHRoZSBleHRlcm5hbCBvbmVzICovCisJCWV4ZWN2X2Rhc2hlZF9leHRlcm5hbCgqYXJndik7CisKKwkJc2VlbiA9IHVuc29ydGVkX3N0cmluZ19saXN0X2xvb2t1cCgmY21kX2xpc3QsICphcmd2WzBdKTsKKwkJaWYgKHNlZW4pIHsKKwkJCWludCBpOworCQkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQkJZm9yIChpID0gMDsgaSA8IGNtZF9saXN0Lm5yOyBpKyspIHsKKwkJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9ICZjbWRfbGlzdC5pdGVtc1tpXTsKKworCQkJCXN0cmJ1Zl9hZGRmKCZzYiwgIlxuICAlcyIsIGl0ZW0tPnN0cmluZyk7CisJCQkJaWYgKGl0ZW0gPT0gc2VlbikKKwkJCQkJc3RyYnVmX2FkZHN0cigmc2IsICIgPD09Iik7CisJCQkJZWxzZSBpZiAoaSA9PSBjbWRfbGlzdC5uciAtIDEpCisJCQkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCAiID09PiIpOworCQkJfQorCQkJZGllKF8oImFsaWFzIGxvb3AgZGV0ZWN0ZWQ6IGV4cGFuc2lvbiBvZiAnJXMnIGRvZXMiCisJCQkgICAgICAiIG5vdCB0ZXJtaW5hdGU6JXMiKSwgY21kX2xpc3QuaXRlbXNbMF0uc3RyaW5nLCBzYi5idWYpOworCQl9CisKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZjbWRfbGlzdCwgKmFyZ3ZbMF0pOworCisJCS8qCisJCSAqIEl0IGNvdWxkIGJlIGFuIGFsaWFzIC0tIHRoaXMgd29ya3MgYXJvdW5kIHRoZSBpbnNhbml0eQorCQkgKiBvZiBvdmVycmlkaW5nICJnaXQgbG9nIiB3aXRoICJnaXQgc2hvdyIgYnkgaGF2aW5nCisJCSAqIGFsaWFzLmxvZyA9IHNob3cKKwkJICovCisJCWlmICghaGFuZGxlX2FsaWFzKGFyZ2NwLCBhcmd2KSkKKwkJCWJyZWFrOworCQlkb25lX2FsaWFzID0gMTsKKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmY21kX2xpc3QsIDApOworCisJcmV0dXJuIGRvbmVfYWxpYXM7Cit9CisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqY21kOworCWludCBkb25lX2hlbHAgPSAwOworCisJY21kID0gYXJndlswXTsKKwlpZiAoIWNtZCkKKwkJY21kID0gImdpdC1oZWxwIjsKKwllbHNlIHsKKwkJY29uc3QgY2hhciAqc2xhc2ggPSBmaW5kX2xhc3RfZGlyX3NlcChjbWQpOworCQlpZiAoc2xhc2gpCisJCQljbWQgPSBzbGFzaCArIDE7CisJfQorCisJdHJhY2VfY29tbWFuZF9wZXJmb3JtYW5jZShhcmd2KTsKKworCS8qCisJICogImdpdC14eHh4IiBpcyB0aGUgc2FtZSBhcyAiZ2l0IHh4eHgiLCBidXQgd2Ugb2J2aW91c2x5OgorCSAqCisJICogIC0gY2Fubm90IHRha2UgZmxhZ3MgaW4gYmV0d2VlbiB0aGUgImdpdCIgYW5kIHRoZSAieHh4eCIuCisJICogIC0gY2Fubm90IGV4ZWN1dGUgaXQgZXh0ZXJuYWxseSAoc2luY2UgaXQgd291bGQganVzdCBkbworCSAqICAgIHRoZSBzYW1lIHRoaW5nIG92ZXIgYWdhaW4pCisJICoKKwkgKiBTbyB3ZSBqdXN0IGRpcmVjdGx5IGNhbGwgdGhlIGJ1aWx0aW4gaGFuZGxlciwgYW5kIGRpZSBpZgorCSAqIHRoYXQgb25lIGNhbm5vdCBoYW5kbGUgaXQuCisJICovCisJaWYgKHNraXBfcHJlZml4KGNtZCwgImdpdC0iLCAmY21kKSkgeworCQlhcmd2WzBdID0gY21kOworCQloYW5kbGVfYnVpbHRpbihhcmdjLCBhcmd2KTsKKwkJZGllKF8oImNhbm5vdCBoYW5kbGUgJXMgYXMgYSBidWlsdGluIiksIGNtZCk7CisJfQorCisJLyogTG9vayBmb3IgZmxhZ3MuLiAqLworCWFyZ3YrKzsKKwlhcmdjLS07CisJaGFuZGxlX29wdGlvbnMoJmFyZ3YsICZhcmdjLCBOVUxMKTsKKwlpZiAoYXJnYyA+IDApIHsKKwkJLyogdHJhbnNsYXRlIC0taGVscCBhbmQgLS12ZXJzaW9uIGludG8gY29tbWFuZHMgKi8KKwkJc2tpcF9wcmVmaXgoYXJndlswXSwgIi0tIiwgJmFyZ3ZbMF0pOworCX0gZWxzZSB7CisJCS8qIFRoZSB1c2VyIGRpZG4ndCBzcGVjaWZ5IGEgY29tbWFuZDsgZ2l2ZSB0aGVtIGhlbHAgKi8KKwkJY29tbWl0X3BhZ2VyX2Nob2ljZSgpOworCQlwcmludGYoXygidXNhZ2U6ICVzXG5cbiIpLCBnaXRfdXNhZ2Vfc3RyaW5nKTsKKwkJbGlzdF9jb21tb25fY21kc19oZWxwKCk7CisJCXByaW50ZigiXG4lc1xuIiwgXyhnaXRfbW9yZV9pbmZvX3N0cmluZykpOworCQlleGl0KDEpOworCX0KKwljbWQgPSBhcmd2WzBdOworCisJLyoKKwkgKiBXZSB1c2UgUEFUSCB0byBmaW5kIGdpdCBjb21tYW5kcywgYnV0IHdlIHByZXBlbmQgc29tZSBoaWdoZXIKKwkgKiBwcmVjZWRlbmNlIHBhdGhzOiB0aGUgIi0tZXhlYy1wYXRoIiBvcHRpb24sIHRoZSBHSVRfRVhFQ19QQVRICisJICogZW52aXJvbm1lbnQsIGFuZCB0aGUgJChnaXRleGVjZGlyKSBmcm9tIHRoZSBNYWtlZmlsZSBhdCBidWlsZAorCSAqIHRpbWUuCisJICovCisJc2V0dXBfcGF0aCgpOworCisJd2hpbGUgKDEpIHsKKwkJaW50IHdhc19hbGlhcyA9IHJ1bl9hcmd2KCZhcmdjLCAmYXJndik7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQlicmVhazsKKwkJaWYgKHdhc19hbGlhcykgeworCQkJZnByaW50ZihzdGRlcnIsIF8oImV4cGFuc2lvbiBvZiBhbGlhcyAnJXMnIGZhaWxlZDsgIgorCQkJCQkgICInJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kXG4iKSwKKwkJCQljbWQsIGFyZ3ZbMF0pOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAoIWRvbmVfaGVscCkgeworCQkJY21kID0gYXJndlswXSA9IGhlbHBfdW5rbm93bl9jbWQoY21kKTsKKwkJCWRvbmVfaGVscCA9IDE7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJfQorCisJZnByaW50ZihzdGRlcnIsIF8oImZhaWxlZCB0byBydW4gY29tbWFuZCAnJXMnOiAlc1xuIiksCisJCWNtZCwgc3RyZXJyb3IoZXJybm8pKTsKKworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZ2l0LnJjIGIvZ2l0LnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjM2ZkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9naXQucmMKQEAgLTAsMCArMSwyNCBAQAorMSBWRVJTSU9OSU5GTworRklMRVZFUlNJT04gICAgIE1BSk9SLE1JTk9SLE1JQ1JPLFBBVENITEVWRUwKK1BST0RVQ1RWRVJTSU9OICBNQUpPUixNSU5PUixNSUNSTyxQQVRDSExFVkVMCitCRUdJTgorICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCisgIEJFR0lOCisgICAgQkxPQ0sgIjA0MDkwNGIwIiAgIC8qIExBTkdfRU5HTElTSC9TVUJMQU5HX0VOR0xJU0hfVVMsIFVuaWNvZGUgQ1AgKi8KKyAgICBCRUdJTgorICAgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgIlRoZSBHaXQgRGV2ZWxvcG1lbnQgQ29tbXVuaXR5XDAiCisgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIkdpdCBmb3IgV2luZG93c1wwIgorICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJnaXRcMCIKKyAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImdpdC5leGVcMCIKKyAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJHaXRcMCIKKyAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsIEdJVF9WRVJTSU9OICJcMCIKKyAgICBFTkQKKyAgRU5ECisKKyAgQkxPQ0sgIlZhckZpbGVJbmZvIgorICBCRUdJTgorICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAxMjAwCisgIEVORAorRU5ECisKKzEgUlRfTUFOSUZFU1QgImNvbXBhdC93aW4zMi9naXQubWFuaWZlc3QiCmRpZmYgLS1naXQgYS9naXRrLWdpdC8uZ2l0aWdub3JlIGIvZ2l0ay1naXQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2ViY2FmCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKKy9HSVQtVENMVEstVkFSUworL2dpdGstd2lzaApkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvTWFrZWZpbGUgYi9naXRrLWdpdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmRkNTJhCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvTWFrZWZpbGUKQEAgLTAsMCArMSw4MCBAQAorIyBUaGUgZGVmYXVsdCB0YXJnZXQgb2YgdGhpcyBNYWtlZmlsZSBpcy4uLgorYWxsOjoKKworcHJlZml4ID89ICQoSE9NRSkKK2JpbmRpciA/PSAkKHByZWZpeCkvYmluCitzaGFyZWRpciA/PSAkKHByZWZpeCkvc2hhcmUKK2dpdGtfbGliZGlyICAgPz0gJChzaGFyZWRpcikvZ2l0ay9saWIKK21zZ3NkaXIgICAgPz0gJChnaXRrX2xpYmRpcikvbXNncworbXNnc2Rpcl9TUSAgPSAkKHN1YnN0ICcsJ1wnJywkKG1zZ3NkaXIpKQorCitUQ0xfUEFUSCA/PSB0Y2xzaAorVENMVEtfUEFUSCA/PSB3aXNoCitJTlNUQUxMID89IGluc3RhbGwKK1JNID89IHJtIC1mCisKK0RFU1RESVJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERFU1RESVIpKQorYmluZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChiaW5kaXIpKQorVENMVEtfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoVENMVEtfUEFUSCkpCisKKyMjIyBEZXRlY3QgVGNrL1RrIGludGVycHJldGVyIHBhdGggY2hhbmdlcworVFJBQ0tfVENMVEsgPSAkKHN1YnN0ICcsJ1wnJywtRFRDTFRLX1BBVEg9JyQoVENMVEtfUEFUSF9TUSknKQorCitHSVQtVENMVEstVkFSUzogRk9SQ0UKKwlAVkFSUz0nJChUUkFDS19UQ0xUSyknOyBcCisJCWlmIHRlc3QgeCIkJFZBUlMiICE9IHgiYGNhdCAkQCAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCQllY2hvIDE+JjIgIiAgICAqIG5ldyBUY2wvVGsgaW50ZXJwcmV0ZXIgbG9jYXRpb24iOyBcCisJCQllY2hvICIkJFZBUlMiID4kQDsgXAorCQlmaQorCisjIyBwby1maWxlIGNyZWF0aW9uIHJ1bGVzCitYR0VUVEVYVCAgID89IHhnZXR0ZXh0CitpZmRlZiBOT19NU0dGTVQKKwlNU0dGTVQgPz0gJChUQ0xfUEFUSCkgcG8vcG8ybXNnLnNoCitlbHNlCisJTVNHRk1UID89IG1zZ2ZtdAorCWlmbmVxICgkKHNoZWxsICQoTVNHRk1UKSAtLXRjbCAtbCBDIC1kIC4gL2Rldi9udWxsIDI+L2Rldi9udWxsOyBlY2hvICQkPyksMCkKKwkJTVNHRk1UIDo9ICQoVENMX1BBVEgpIHBvL3BvMm1zZy5zaAorCWVuZGlmCitlbmRpZgorCitQT19URU1QTEFURSA9IHBvL2dpdGsucG90CitBTExfUE9GSUxFUyA9ICQod2lsZGNhcmQgcG8vKi5wbykKK0FMTF9NU0dGSUxFUyA9ICQoc3Vic3QgLnBvLC5tc2csJChBTExfUE9GSUxFUykpCisKK2lmbmRlZiBWCisJUVVJRVQgICAgICAgICAgPSBACisJUVVJRVRfR0VOICAgICAgPSAkKFFVSUVUKWVjaG8gJyAgICcgR0VOICRAICYmCitlbmRpZgorCithbGw6OiBnaXRrLXdpc2ggJChBTExfTVNHRklMRVMpCisKK2luc3RhbGw6OiBhbGwKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKKwkkKElOU1RBTEwpIC1tIDc1NSBnaXRrLXdpc2ggJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknL2dpdGsKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknCisJJChmb3JlYWNoIHAsJChBTExfTVNHRklMRVMpLCAkKElOU1RBTEwpIC1tIDY0NCAkcCAnJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknICYmKSB0cnVlCisKK3VuaW5zdGFsbDo6CisJJChmb3JlYWNoIHAsJChBTExfTVNHRklMRVMpLCAkKFJNKSAnJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknLyQobm90ZGlyICRwKSAmJikgdHJ1ZQorCSQoUk0pICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJy9naXRrCisKK2NsZWFuOjoKKwkkKFJNKSBnaXRrLXdpc2ggcG8vKi5tc2cgR0lULVRDTFRLLVZBUlMKKworZ2l0ay13aXNoOiBnaXRrIEdJVC1UQ0xUSy1WQVJTCisJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKKwlzZWQgLWUgJzEsM3N8XmV4ZWMgLiogIiQkMCJ8ZXhlYyAkKHN1YnN0IHwsJ1x8JywkKFRDTFRLX1BBVEhfU1EpKSAiJCQwInwnIDxnaXRrID4kQCsgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgLWYgJEArICRACisKKyQoUE9fVEVNUExBVEUpOiBnaXRrCisJJChYR0VUVEVYVCkgLWttYyAtTFRjbCAtbyAkQCBnaXRrCit1cGRhdGUtcG86OiAkKFBPX1RFTVBMQVRFKQorCSQoZm9yZWFjaCBwLCAkKEFMTF9QT0ZJTEVTKSwgZWNobyBVcGRhdGluZyAkcCA7IG1zZ21lcmdlIC1VICRwICQoUE9fVEVNUExBVEUpIDsgKQorJChBTExfTVNHRklMRVMpOiAlLm1zZyA6ICUucG8KKwlAZWNobyBHZW5lcmF0aW5nIGNhdGFsb2cgJEAKKwkkKE1TR0ZNVCkgLS1zdGF0aXN0aWNzIC0tdGNsICQ8IC1sICQoYmFzZW5hbWUgJChub3RkaXIgJDwpKSAtZCAkKGRpciAkQCkKKworLlBIT05ZOiBhbGwgaW5zdGFsbCB1bmluc3RhbGwgY2xlYW4gdXBkYXRlLXBvCisuUEhPTlk6IEZPUkNFCmRpZmYgLS1naXQgYS9naXRrLWdpdC9naXRrIGIvZ2l0ay1naXQvZ2l0awpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYmU0ODA1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvZ2l0awpAQCAtMCwwICsxLDEyNjc1IEBACisjIS9iaW4vc2gKKyMgVGNsIGlnbm9yZXMgdGhlIG5leHQgbGluZSAtKi0gdGNsIC0qLSBcCitleGVjIHdpc2ggIiQwIiAtLSAiJEAiCisKKyMgQ29weXJpZ2h0IMKpIDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyBpdCBtYXkgYmUgdXNlZCwgY29waWVkLCBtb2RpZmllZAorIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSwKKyMgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworcGFja2FnZSByZXF1aXJlIFRrCisKK3Byb2MgaGFzd29ya3RyZWUge30geworICAgIHJldHVybiBbZXhwciB7W2V4ZWMgZ2l0IHJldi1wYXJzZSAtLWlzLWJhcmUtcmVwb3NpdG9yeV0gPT0gImZhbHNlIiAmJgorCQkgIFtleGVjIGdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtZ2l0LWRpcl0gPT0gImZhbHNlIn1dCit9CisKK3Byb2MgcmVwb25hbWUge30geworICAgIGdsb2JhbCBnaXRkaXIKKyAgICBzZXQgbiBbZmlsZSBub3JtYWxpemUgJGdpdGRpcl0KKyAgICBpZiB7W3N0cmluZyBtYXRjaCAiKi8uZ2l0IiAkbl19IHsKKwlzZXQgbiBbc3RyaW5nIHJhbmdlICRuIDAgZW5kLTVdCisgICAgfQorICAgIHJldHVybiBbZmlsZSB0YWlsICRuXQorfQorCitwcm9jIGdpdHdvcmt0cmVlIHt9IHsKKyAgICB2YXJpYWJsZSBfZ2l0d29ya3RyZWUKKyAgICBpZiB7W2luZm8gZXhpc3RzIF9naXR3b3JrdHJlZV19IHsKKwlyZXR1cm4gJF9naXR3b3JrdHJlZQorICAgIH0KKyAgICAjIHYxLjcuMCBpbnRyb2R1Y2VkIC0tc2hvdy10b3BsZXZlbCB0byByZXR1cm4gdGhlIGNhbm9uaWNhbCB3b3JrLXRyZWUKKyAgICBpZiB7W2NhdGNoIHtzZXQgX2dpdHdvcmt0cmVlIFtleGVjIGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsXX1dfSB7CisgICAgICAgICMgdHJ5IHRvIHNldCB3b3JrIHRyZWUgZnJvbSBlbnZpcm9ubWVudCwgY29yZS53b3JrdHJlZSBvciB1c2UKKyAgICAgICAgIyBjZHVwIHRvIG9idGFpbiBhIHJlbGF0aXZlIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgd29ya3RyZWUuIElmCisgICAgICAgICMgcnVuIGZyb20gdGhlIHRvcCwgdGhlIC4vIHByZWZpeCBlbnN1cmVzIG5vcm1hbGl6ZSBleHBhbmRzIHB3ZC4KKyAgICAgICAgaWYge1tjYXRjaCB7IHNldCBfZ2l0d29ya3RyZWUgJGVudihHSVRfV09SS19UUkVFKSB9XX0geworCSAgICBjYXRjaCB7c2V0IF9naXR3b3JrdHJlZSBbZXhlYyBnaXQgY29uZmlnIC0tZ2V0IGNvcmUud29ya3RyZWVdfQorCSAgICBpZiB7JF9naXR3b3JrdHJlZSBlcSAiIn0geworCQlzZXQgX2dpdHdvcmt0cmVlIFtmaWxlIG5vcm1hbGl6ZSAuL1tleGVjIGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXBdXQorCSAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICRfZ2l0d29ya3RyZWUKK30KKworIyBBIHNpbXBsZSBzY2hlZHVsZXIgZm9yIGNvbXB1dGUtaW50ZW5zaXZlIHN0dWZmLgorIyBUaGUgYWltIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGV2ZW50IGhhbmRsZXJzIGZvciBHVUkgYWN0aW9ucyBjYW4KKyMgcnVuIGF0IGxlYXN0IGV2ZXJ5IDUwLTEwMCBtcy4gIFVuZm9ydHVuYXRlbHkgZmlsZWV2ZW50IGhhbmRsZXJzIGFyZQorIyBydW4gYmVmb3JlIFggZXZlbnQgaGFuZGxlcnMsIHNvIHJlYWRpbmcgZnJvbSBhIGZhc3Qgc291cmNlIGNhbgorIyBtYWtlIHRoZSBHVUkgY29tcGxldGVseSB1bnJlc3BvbnNpdmUuCitwcm9jIHJ1biBhcmdzIHsKKyAgICBnbG9iYWwgaXNvbnJ1bnEgcnVucSBjdXJydW5xCisKKyAgICBzZXQgc2NyaXB0ICRhcmdzCisgICAgaWYge1tpbmZvIGV4aXN0cyBpc29ucnVucSgkc2NyaXB0KV19IHJldHVybgorICAgIGlmIHskcnVucSBlcSB7fSAmJiAhW2luZm8gZXhpc3RzIGN1cnJ1bnFdfSB7CisJYWZ0ZXIgaWRsZSBkb3J1bnEKKyAgICB9CisgICAgbGFwcGVuZCBydW5xIFtsaXN0IHt9ICRzY3JpcHRdCisgICAgc2V0IGlzb25ydW5xKCRzY3JpcHQpIDEKK30KKworcHJvYyBmaWxlcnVuIHtmZCBzY3JpcHR9IHsKKyAgICBmaWxlZXZlbnQgJGZkIHJlYWRhYmxlIFtsaXN0IGZpbGVyZWFkYWJsZSAkZmQgJHNjcmlwdF0KK30KKworcHJvYyBmaWxlcmVhZGFibGUge2ZkIHNjcmlwdH0geworICAgIGdsb2JhbCBydW5xIGN1cnJ1bnEKKworICAgIGZpbGVldmVudCAkZmQgcmVhZGFibGUge30KKyAgICBpZiB7JHJ1bnEgZXEge30gJiYgIVtpbmZvIGV4aXN0cyBjdXJydW5xXX0geworCWFmdGVyIGlkbGUgZG9ydW5xCisgICAgfQorICAgIGxhcHBlbmQgcnVucSBbbGlzdCAkZmQgJHNjcmlwdF0KK30KKworcHJvYyBudWtlZmlsZSB7ZmR9IHsKKyAgICBnbG9iYWwgcnVucQorCisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkcnVucV19IHt9IHsKKwlpZiB7W2xpbmRleCAkcnVucSAkaSAwXSBlcSAkZmR9IHsKKwkgICAgc2V0IHJ1bnEgW2xyZXBsYWNlICRydW5xICRpICRpXQorCX0gZWxzZSB7CisJICAgIGluY3IgaQorCX0KKyAgICB9Cit9CisKK3Byb2MgZG9ydW5xIHt9IHsKKyAgICBnbG9iYWwgaXNvbnJ1bnEgcnVucSBjdXJydW5xCisKKyAgICBzZXQgdHN0YXJ0IFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBzZXQgdDAgJHRzdGFydAorICAgIHdoaWxlIHtbbGxlbmd0aCAkcnVucV0gPiAwfSB7CisJc2V0IGZkIFtsaW5kZXggJHJ1bnEgMCAwXQorCXNldCBzY3JpcHQgW2xpbmRleCAkcnVucSAwIDFdCisJc2V0IGN1cnJ1bnEgW2xpbmRleCAkcnVucSAwXQorCXNldCBydW5xIFtscmFuZ2UgJHJ1bnEgMSBlbmRdCisJc2V0IHJlcGVhdCBbZXZhbCAkc2NyaXB0XQorCXVuc2V0IGN1cnJ1bnEKKwlzZXQgdDEgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorCXNldCB0IFtleHByIHskdDEgLSAkdDB9XQorCWlmIHskcmVwZWF0IG5lIHt9ICYmICRyZXBlYXR9IHsKKwkgICAgaWYgeyRmZCBlcSB7fSB8fCAkcmVwZWF0ID09IDJ9IHsKKwkJIyBzY3JpcHQgcmV0dXJucyAxIGlmIGl0IHdhbnRzIHRvIGJlIHJlYWRkZWQKKwkJIyBmaWxlIHJlYWRlcnMgcmV0dXJuIDIgaWYgdGhleSBjb3VsZCBkbyBtb3JlIHN0cmFpZ2h0IGF3YXkKKwkJbGFwcGVuZCBydW5xIFtsaXN0ICRmZCAkc2NyaXB0XQorCSAgICB9IGVsc2UgeworCQlmaWxlZXZlbnQgJGZkIHJlYWRhYmxlIFtsaXN0IGZpbGVyZWFkYWJsZSAkZmQgJHNjcmlwdF0KKwkgICAgfQorCX0gZWxzZWlmIHskZmQgZXEge319IHsKKwkgICAgdW5zZXQgaXNvbnJ1bnEoJHNjcmlwdCkKKwl9CisJc2V0IHQwICR0MQorCWlmIHskdDEgLSAkdHN0YXJ0ID49IDgwfSBicmVhaworICAgIH0KKyAgICBpZiB7JHJ1bnEgbmUge319IHsKKwlhZnRlciBpZGxlIGRvcnVucQorICAgIH0KK30KKworcHJvYyByZWdfaW5zdGFuY2Uge2ZkfSB7CisgICAgZ2xvYmFsIGNvbW1mZCBsZWZ0b3ZlciBsb2dpbnN0YW5jZQorCisgICAgc2V0IGkgW2luY3IgbG9naW5zdGFuY2VdCisgICAgc2V0IGNvbW1mZCgkaSkgJGZkCisgICAgc2V0IGxlZnRvdmVyKCRpKSB7fQorICAgIHJldHVybiAkaQorfQorCitwcm9jIHVubWVyZ2VkX2ZpbGVzIHtmaWxlc30geworICAgIGdsb2JhbCBucl91bm1lcmdlZAorCisgICAgIyBmaW5kIHRoZSBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzCisgICAgc2V0IG1saXN0IHt9CisgICAgc2V0IG5yX3VubWVyZ2VkIDAKKyAgICBpZiB7W2NhdGNoIHsKKwlzZXQgZmQgW29wZW4gInwgZ2l0IGxzLWZpbGVzIC11IiByXQorICAgIH0gZXJyXX0geworCXNob3dfZXJyb3Ige30gLiAiW21jICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiXSAkZXJyIgorCWV4aXQgMQorICAgIH0KKyAgICB3aGlsZSB7W2dldHMgJGZkIGxpbmVdID49IDB9IHsKKwlzZXQgaSBbc3RyaW5nIGZpcnN0ICJcdCIgJGxpbmVdCisJaWYgeyRpIDwgMH0gY29udGludWUKKwlzZXQgZm5hbWUgW3N0cmluZyByYW5nZSAkbGluZSBbZXhwciB7JGkrMX1dIGVuZF0KKwlpZiB7W2xzZWFyY2ggLWV4YWN0ICRtbGlzdCAkZm5hbWVdID49IDB9IGNvbnRpbnVlCisJaW5jciBucl91bm1lcmdlZAorCWlmIHskZmlsZXMgZXEge30gfHwgW3BhdGhfZmlsdGVyICRmaWxlcyAkZm5hbWVdfSB7CisJICAgIGxhcHBlbmQgbWxpc3QgJGZuYW1lCisJfQorICAgIH0KKyAgICBjYXRjaCB7Y2xvc2UgJGZkfQorICAgIHJldHVybiAkbWxpc3QKK30KKworcHJvYyBwYXJzZXZpZXdhcmdzIHtuIGFyZ2xpc3R9IHsKKyAgICBnbG9iYWwgdmRhdGVtb2RlIHZtZXJnZW9ubHkgdmZsYWdzIHZkZmxhZ3MgdnJldnMgdmZpbHRlcmVkIHZvcmlnYXJncyBlbnYKKyAgICBnbG9iYWwgdmlubGluZWRpZmYKKyAgICBnbG9iYWwgd29yZGRpZmYgZ2l0X3ZlcnNpb24KKworICAgIHNldCB2ZGF0ZW1vZGUoJG4pIDAKKyAgICBzZXQgdm1lcmdlb25seSgkbikgMAorICAgIHNldCB2aW5saW5lZGlmZigkbikgMAorICAgIHNldCBnbGZsYWdzIHt9CisgICAgc2V0IGRpZmZhcmdzIHt9CisgICAgc2V0IG5leHRpc3ZhbCAwCisgICAgc2V0IHJldmFyZ3Mge30KKyAgICBzZXQgb3JpZ2FyZ3MgJGFyZ2xpc3QKKyAgICBzZXQgYWxsa25vd24gMQorICAgIHNldCBmaWx0ZXJlZCAwCisgICAgc2V0IGkgLTEKKyAgICBmb3JlYWNoIGFyZyAkYXJnbGlzdCB7CisJaW5jciBpCisJaWYgeyRuZXh0aXN2YWx9IHsKKwkgICAgbGFwcGVuZCBnbGZsYWdzICRhcmcKKwkgICAgc2V0IG5leHRpc3ZhbCAwCisJICAgIGNvbnRpbnVlCisJfQorCXN3aXRjaCAtZ2xvYiAtLSAkYXJnIHsKKwkgICAgIi1kIiAtCisJICAgICItLWRhdGUtb3JkZXIiIHsKKwkJc2V0IHZkYXRlbW9kZSgkbikgMQorCQkjIHJlbW92ZSBmcm9tIG9yaWdhcmdzIGluIGNhc2Ugd2UgaGl0IGFuIHVua25vd24gb3B0aW9uCisJCXNldCBvcmlnYXJncyBbbHJlcGxhY2UgJG9yaWdhcmdzICRpICRpXQorCQlpbmNyIGkgLTEKKwkgICAgfQorCSAgICAiLVtwdWFid2NyUkJNQ10iIC0KKwkgICAgIi0tbm8tcmVuYW1lcyIgLSAiLS1mdWxsLWluZGV4IiAtICItLWJpbmFyeSIgLSAiLS1hYmJyZXY9KiIgLQorCSAgICAiLS1maW5kLWNvcGllcy1oYXJkZXIiIC0gIi1sKiIgLSAiLS1leHQtZGlmZiIgLSAiLS1uby1leHQtZGlmZiIgLQorCSAgICAiLS1zcmMtcHJlZml4PSoiIC0gIi0tZHN0LXByZWZpeD0qIiAtICItLW5vLXByZWZpeCIgLQorCSAgICAiLU8qIiAtICItLXRleHQiIC0gIi0tZnVsbC1kaWZmIiAtICItLWlnbm9yZS1zcGFjZS1hdC1lb2wiIC0KKwkgICAgIi0taWdub3JlLXNwYWNlLWNoYW5nZSIgLSAiLVUqIiAtICItLXVuaWZpZWQ9KiIgeworCQkjIFRoZXNlIHJlcXVlc3Qgb3IgYWZmZWN0IGRpZmYgb3V0cHV0LCB3aGljaCB3ZSBkb24ndCB3YW50LgorCQkjIFNvbWUgY291bGQgYmUgdXNlZCB0byBzZXQgb3VyIGRlZmF1bHRzIGZvciBkaWZmIGRpc3BsYXkuCisJCWxhcHBlbmQgZGlmZmFyZ3MgJGFyZworCSAgICB9CisJICAgICItLXJhdyIgLSAiLS1wYXRjaC13aXRoLXJhdyIgLSAiLS1wYXRjaC13aXRoLXN0YXQiIC0KKwkgICAgIi0tbmFtZS1vbmx5IiAtICItLW5hbWUtc3RhdHVzIiAtICItLWNvbG9yIiAtCisJICAgICItLWxvZy1zaXplIiAtICItLXByZXR0eT0qIiAtICItLWRlY29yYXRlIiAtICItLWFiYnJldi1jb21taXQiIC0KKwkgICAgIi0tY2MiIC0gIi16IiAtICItLWhlYWRlciIgLSAiLS1wYXJlbnRzIiAtICItLWJvdW5kYXJ5IiAtCisJICAgICItLW5vLWNvbG9yIiAtICItZyIgLSAiLS13YWxrLXJlZmxvZ3MiIC0gIi0tbm8td2FsayIgLQorCSAgICAiLS10aW1lc3RhbXAiIC0gInJlbGF0aXZlLWRhdGUiIC0gIi0tZGF0ZT0qIiAtICItLXN0ZGluIiAtCisJICAgICItLW9iamVjdHMiIC0gIi0tb2JqZWN0cy1lZGdlIiAtICItLXJldmVyc2UiIHsKKwkJIyBUaGVzZSBjYXVzZSBvdXIgcGFyc2luZyBvZiBnaXQgbG9nJ3Mgb3V0cHV0IHRvIGZhaWwsIG9yIGVsc2UKKwkJIyB0aGV5J3JlIG9wdGlvbnMgd2Ugd2FudCB0byBzZXQgb3Vyc2VsdmVzLCBzbyBpZ25vcmUgdGhlbS4KKwkgICAgfQorCSAgICAiLS1jb2xvci13b3JkcyoiIC0gIi0td29yZC1kaWZmPWNvbG9yIiB7CisJCSMgVGhlc2UgdHJpZ2dlciBhIHdvcmQgZGlmZiBpbiB0aGUgY29uc29sZSBpbnRlcmZhY2UsCisJCSMgc28gaGVscCB0aGUgdXNlciBieSBlbmFibGluZyBvdXIgb3duIHN1cHBvcnQKKwkJaWYge1twYWNrYWdlIHZjb21wYXJlICRnaXRfdmVyc2lvbiAiMS43LjIiXSA+PSAwfSB7CisJCSAgICBzZXQgd29yZGRpZmYgW21jICJDb2xvciB3b3JkcyJdCisJCX0KKwkgICAgfQorCSAgICAiLS13b3JkLWRpZmYqIiB7CisJCWlmIHtbcGFja2FnZSB2Y29tcGFyZSAkZ2l0X3ZlcnNpb24gIjEuNy4yIl0gPj0gMH0geworCQkgICAgc2V0IHdvcmRkaWZmIFttYyAiTWFya3VwIHdvcmRzIl0KKwkJfQorCSAgICB9CisJICAgICItLXN0YXQ9KiIgLSAiLS1udW1zdGF0IiAtICItLXNob3J0c3RhdCIgLSAiLS1zdW1tYXJ5IiAtCisJICAgICItLWNoZWNrIiAtICItLWV4aXQtY29kZSIgLSAiLS1xdWlldCIgLSAiLS10b3BvLW9yZGVyIiAtCisJICAgICItLWZ1bGwtaGlzdG9yeSIgLSAiLS1kZW5zZSIgLSAiLS1zcGFyc2UiIC0KKwkgICAgIi0tZm9sbG93IiAtICItLWxlZnQtcmlnaHQiIC0gIi0tZW5jb2Rpbmc9KiIgeworCQkjIFRoZXNlIGFyZSBoYXJtbGVzcywgYW5kIHNvbWUgYXJlIGV2ZW4gdXNlZnVsCisJCWxhcHBlbmQgZ2xmbGFncyAkYXJnCisJICAgIH0KKwkgICAgIi0tZGlmZi1maWx0ZXI9KiIgLSAiLS1uby1tZXJnZXMiIC0gIi0tdW5wYWNrZWQiIC0KKwkgICAgIi0tbWF4LWNvdW50PSoiIC0gIi0tc2tpcD0qIiAtICItLXNpbmNlPSoiIC0gIi0tYWZ0ZXI9KiIgLQorCSAgICAiLS11bnRpbD0qIiAtICItLWJlZm9yZT0qIiAtICItLW1heC1hZ2U9KiIgLSAiLS1taW4tYWdlPSoiIC0KKwkgICAgIi0tYXV0aG9yPSoiIC0gIi0tY29tbWl0dGVyPSoiIC0gIi0tZ3JlcD0qIiAtICItW2lFXSIgLQorCSAgICAiLS1yZW1vdmUtZW1wdHkiIC0gIi0tZmlyc3QtcGFyZW50IiAtICItLWNoZXJyeS1waWNrIiAtCisJICAgICItUyoiIC0gIi1HKiIgLSAiLS1waWNrYXhlLWFsbCIgLSAiLS1waWNrYXhlLXJlZ2V4IiAtCisJICAgICItLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24iIHsKKwkJIyBUaGVzZSBtZWFuIHRoYXQgd2UgZ2V0IGEgc3Vic2V0IG9mIHRoZSBjb21taXRzCisJCXNldCBmaWx0ZXJlZCAxCisJCWxhcHBlbmQgZ2xmbGFncyAkYXJnCisJICAgIH0KKwkgICAgIi1MKiIgeworCQkjIExpbmUtbG9nIHdpdGggJ3N0dWNrJyBhcmd1bWVudCAodW5zdHVjayBmb3JtIGlzCisJCSMgbm90IHN1cHBvcnRlZCkKKwkJc2V0IGZpbHRlcmVkIDEKKwkJc2V0IHZpbmxpbmVkaWZmKCRuKSAxCisJCXNldCBhbGxrbm93biAwCisJCWxhcHBlbmQgZ2xmbGFncyAkYXJnCisJICAgIH0KKwkgICAgIi1uIiB7CisJCSMgVGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBvbmx5IG9uZSB0aGF0IGhhcyBhIHZhbHVlIGFzIGEKKwkJIyBzZXBhcmF0ZSB3b3JkIGZvbGxvd2luZyBpdAorCQlzZXQgZmlsdGVyZWQgMQorCQlzZXQgbmV4dGlzdmFsIDEKKwkJbGFwcGVuZCBnbGZsYWdzICRhcmcKKwkgICAgfQorCSAgICAiLS1ub3QiIC0gIi0tYWxsIiB7CisJCWxhcHBlbmQgcmV2YXJncyAkYXJnCisJICAgIH0KKwkgICAgIi0tbWVyZ2UiIHsKKwkJc2V0IHZtZXJnZW9ubHkoJG4pIDEKKwkJIyBnaXQgcmV2LXBhcnNlIGRvZXNuJ3QgdW5kZXJzdGFuZCAtLW1lcmdlCisJCWxhcHBlbmQgcmV2YXJncyAtLWdpdGstc3ltbWV0cmljLWRpZmYtbWFya2VyIE1FUkdFX0hFQUQuLi5IRUFECisJICAgIH0KKwkgICAgIi0tbm8tcmVwbGFjZS1vYmplY3RzIiB7CisJCXNldCBlbnYoR0lUX05PX1JFUExBQ0VfT0JKRUNUUykgIjEiCisJICAgIH0KKwkgICAgIi0qIiB7CisJCSMgT3RoZXIgZmxhZyBhcmd1bWVudHMgaW5jbHVkaW5nIC08bj4KKwkJaWYge1tzdHJpbmcgaXMgZGlnaXQgLXN0cmljdCBbc3RyaW5nIHJhbmdlICRhcmcgMSBlbmRdXX0geworCQkgICAgc2V0IGZpbHRlcmVkIDEKKwkJfSBlbHNlIHsKKwkJICAgICMgYSBmbGFnIGFyZ3VtZW50IHRoYXQgd2UgZG9uJ3QgcmVjb2duaXplOworCQkgICAgIyB0aGF0IG1lYW5zIHdlIGNhbid0IG9wdGltaXplCisJCSAgICBzZXQgYWxsa25vd24gMAorCQl9CisJCWxhcHBlbmQgZ2xmbGFncyAkYXJnCisJICAgIH0KKwkgICAgZGVmYXVsdCB7CisJCSMgTm9uLWZsYWcgYXJndW1lbnRzIHNwZWNpZnkgY29tbWl0cyBvciByYW5nZXMgb2YgY29tbWl0cworCQlpZiB7W3N0cmluZyBtYXRjaCAiKi4uLioiICRhcmddfSB7CisJCSAgICBsYXBwZW5kIHJldmFyZ3MgLS1naXRrLXN5bW1ldHJpYy1kaWZmLW1hcmtlcgorCQl9CisJCWxhcHBlbmQgcmV2YXJncyAkYXJnCisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCB2ZGZsYWdzKCRuKSAkZGlmZmFyZ3MKKyAgICBzZXQgdmZsYWdzKCRuKSAkZ2xmbGFncworICAgIHNldCB2cmV2cygkbikgJHJldmFyZ3MKKyAgICBzZXQgdmZpbHRlcmVkKCRuKSAkZmlsdGVyZWQKKyAgICBzZXQgdm9yaWdhcmdzKCRuKSAkb3JpZ2FyZ3MKKyAgICByZXR1cm4gJGFsbGtub3duCit9CisKK3Byb2MgcGFyc2V2aWV3cmV2cyB7dmlldyByZXZzfSB7CisgICAgZ2xvYmFsIHZwb3NpZHMgdm5lZ2lkcworCisgICAgaWYgeyRyZXZzIGVxIHt9fSB7CisJc2V0IHJldnMgSEVBRAorICAgIH0gZWxzZWlmIHtbbHNlYXJjaCAtZXhhY3QgJHJldnMgLS1hbGxdID49IDB9IHsKKwlsYXBwZW5kIHJldnMgSEVBRAorICAgIH0KKyAgICBpZiB7W2NhdGNoIHtzZXQgaWRzIFtldmFsIGV4ZWMgZ2l0IHJldi1wYXJzZSAkcmV2c119IGVycl19IHsKKwkjIHdlIGdldCBzdGRvdXQgZm9sbG93ZWQgYnkgc3RkZXJyIGluICRlcnIKKwkjIGZvciBhbiB1bmtub3duIHJldiwgZ2l0IHJldi1wYXJzZSBlY2hvZXMgaXQgYW5kIHRoZW4gZXJyb3JzIG91dAorCXNldCBlcnJsaW5lcyBbc3BsaXQgJGVyciAiXG4iXQorCXNldCBiYWRyZXYge30KKwlmb3Ige3NldCBsIDB9IHskbCA8IFtsbGVuZ3RoICRlcnJsaW5lc119IHtpbmNyIGx9IHsKKwkgICAgc2V0IGxpbmUgW2xpbmRleCAkZXJybGluZXMgJGxdCisJICAgIGlmIHshKFtzdHJpbmcgbGVuZ3RoICRsaW5lXSA9PSA0MCAmJiBbc3RyaW5nIGlzIHhkaWdpdCAkbGluZV0pfSB7CisJCWlmIHtbc3RyaW5nIG1hdGNoICJmYXRhbDoqIiAkbGluZV19IHsKKwkJICAgIGlmIHtbc3RyaW5nIG1hdGNoICJmYXRhbDogYW1iaWd1b3VzIGFyZ3VtZW50KiIgJGxpbmVdCisJCQkmJiAkYmFkcmV2IG5lIHt9fSB7CisJCQlpZiB7W2xsZW5ndGggJGJhZHJldl0gPT0gMX0geworCQkJICAgIHNldCBlcnIgInVua25vd24gcmV2aXNpb24gJGJhZHJldiIKKwkJCX0gZWxzZSB7CisJCQkgICAgc2V0IGVyciAidW5rbm93biByZXZpc2lvbnM6IFtqb2luICRiYWRyZXYgIiwgIl0iCisJCQl9CisJCSAgICB9IGVsc2UgeworCQkJc2V0IGVyciBbam9pbiBbbHJhbmdlICRlcnJsaW5lcyAkbCBlbmRdICJcbiJdCisJCSAgICB9CisJCSAgICBicmVhaworCQl9CisJCWxhcHBlbmQgYmFkcmV2ICRsaW5lCisJICAgIH0KKwl9CisJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6Il0gJGVyciIKKwlyZXR1cm4ge30KKyAgICB9CisgICAgc2V0IHJldCB7fQorICAgIHNldCBwb3Mge30KKyAgICBzZXQgbmVnIHt9CisgICAgc2V0IHNkbSAwCisgICAgZm9yZWFjaCBpZCBbc3BsaXQgJGlkcyAiXG4iXSB7CisJaWYgeyRpZCBlcSAiLS1naXRrLXN5bW1ldHJpYy1kaWZmLW1hcmtlciJ9IHsKKwkgICAgc2V0IHNkbSA0CisJfSBlbHNlaWYge1tzdHJpbmcgbWF0Y2ggIl4qIiAkaWRdfSB7CisJICAgIGlmIHskc2RtICE9IDF9IHsKKwkJbGFwcGVuZCByZXQgJGlkCisJCWlmIHskc2RtID09IDN9IHsKKwkJICAgIHNldCBzZG0gMAorCQl9CisJICAgIH0KKwkgICAgbGFwcGVuZCBuZWcgW3N0cmluZyByYW5nZSAkaWQgMSBlbmRdCisJfSBlbHNlIHsKKwkgICAgaWYgeyRzZG0gIT0gMn0geworCQlsYXBwZW5kIHJldCAkaWQKKwkgICAgfSBlbHNlIHsKKwkJbHNldCByZXQgZW5kICRpZC4uLltsaW5kZXggJHJldCBlbmRdCisJICAgIH0KKwkgICAgbGFwcGVuZCBwb3MgJGlkCisJfQorCWluY3Igc2RtIC0xCisgICAgfQorICAgIHNldCB2cG9zaWRzKCR2aWV3KSAkcG9zCisgICAgc2V0IHZuZWdpZHMoJHZpZXcpICRuZWcKKyAgICByZXR1cm4gJHJldAorfQorCisjIFN0YXJ0IG9mZiBhIGdpdCBsb2cgcHJvY2VzcyBhbmQgYXJyYW5nZSB0byByZWFkIGl0cyBvdXRwdXQKK3Byb2Mgc3RhcnRfcmV2X2xpc3Qge3ZpZXd9IHsKKyAgICBnbG9iYWwgc3RhcnRtc2VjcyBjb21taXRpZHggdmlld2NvbXBsZXRlIGN1cnZpZXcKKyAgICBnbG9iYWwgdGNsZW5jb2RpbmcKKyAgICBnbG9iYWwgdmlld2FyZ3Mgdmlld2FyZ3NjbWQgdmlld2ZpbGVzIHZmaWxlbGltaXQKKyAgICBnbG9iYWwgc2hvd2xvY2FsY2hhbmdlcworICAgIGdsb2JhbCB2aWV3YWN0aXZlIHZpZXdpbnN0YW5jZXMgdm1lcmdlb25seQorICAgIGdsb2JhbCBtYWluaGVhZGlkIHZpZXdtYWluaGVhZGlkIHZpZXdtYWluaGVhZGlkX29yaWcKKyAgICBnbG9iYWwgdmNhbm9wdCB2ZmxhZ3MgdnJldnMgdm9yaWdhcmdzCisgICAgZ2xvYmFsIHNob3dfbm90ZXMKKworICAgIHNldCBzdGFydG1zZWNzIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBzZXQgY29tbWl0aWR4KCR2aWV3KSAwCisgICAgIyB0aGVzZSBhcmUgc2V0IHRoaXMgd2F5IGZvciB0aGUgZXJyb3IgZXhpdHMKKyAgICBzZXQgdmlld2NvbXBsZXRlKCR2aWV3KSAxCisgICAgc2V0IHZpZXdhY3RpdmUoJHZpZXcpIDAKKyAgICB2YXJjaW5pdCAkdmlldworCisgICAgc2V0IGFyZ3MgJHZpZXdhcmdzKCR2aWV3KQorICAgIGlmIHskdmlld2FyZ3NjbWQoJHZpZXcpIG5lIHt9fSB7CisJaWYge1tjYXRjaCB7CisJICAgIHNldCBzdHIgW2V4ZWMgc2ggLWMgJHZpZXdhcmdzY21kKCR2aWV3KV0KKwl9IGVycl19IHsKKwkgICAgZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiJdICRlcnIiCisJICAgIHJldHVybiAwCisJfQorCXNldCBhcmdzIFtjb25jYXQgJGFyZ3MgW3NwbGl0ICRzdHIgIlxuIl1dCisgICAgfQorICAgIHNldCB2Y2Fub3B0KCR2aWV3KSBbcGFyc2V2aWV3YXJncyAkdmlldyAkYXJnc10KKworICAgIHNldCBmaWxlcyAkdmlld2ZpbGVzKCR2aWV3KQorICAgIGlmIHskdm1lcmdlb25seSgkdmlldyl9IHsKKwlzZXQgZmlsZXMgW3VubWVyZ2VkX2ZpbGVzICRmaWxlc10KKwlpZiB7JGZpbGVzIGVxIHt9fSB7CisJICAgIGdsb2JhbCBucl91bm1lcmdlZAorCSAgICBpZiB7JG5yX3VubWVyZ2VkID09IDB9IHsKKwkJZXJyb3JfcG9wdXAgW21jICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0XAorCQkJICAgICBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIl0KKwkgICAgfSBlbHNlIHsKKwkJZXJyb3JfcG9wdXAgW21jICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0XAorCQkJICAgICBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgbGltaXQuIl0KKwkgICAgfQorCSAgICByZXR1cm4gMAorCX0KKyAgICB9CisgICAgc2V0IHZmaWxlbGltaXQoJHZpZXcpICRmaWxlcworCisgICAgaWYgeyR2Y2Fub3B0KCR2aWV3KX0geworCXNldCByZXZzIFtwYXJzZXZpZXdyZXZzICR2aWV3ICR2cmV2cygkdmlldyldCisJaWYgeyRyZXZzIGVxIHt9fSB7CisJICAgIHJldHVybiAwCisJfQorCXNldCBhcmdzIFtjb25jYXQgJHZmbGFncygkdmlldykgJHJldnNdCisgICAgfSBlbHNlIHsKKwlzZXQgYXJncyAkdm9yaWdhcmdzKCR2aWV3KQorICAgIH0KKworICAgIGlmIHtbY2F0Y2ggeworCXNldCBmZCBbb3BlbiBbY29uY2F0IHwgZ2l0IGxvZyAtLW5vLWNvbG9yIC16IC0tcHJldHR5PXJhdyAkc2hvd19ub3RlcyBcCisJCQktLXBhcmVudHMgLS1ib3VuZGFyeSAkYXJncyAiLS0iICRmaWxlc10gcl0KKyAgICB9IGVycl19IHsKKwllcnJvcl9wb3B1cCAiW21jICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiXSAkZXJyIgorCXJldHVybiAwCisgICAgfQorICAgIHNldCBpIFtyZWdfaW5zdGFuY2UgJGZkXQorICAgIHNldCB2aWV3aW5zdGFuY2VzKCR2aWV3KSBbbGlzdCAkaV0KKyAgICBzZXQgdmlld21haW5oZWFkaWQoJHZpZXcpICRtYWluaGVhZGlkCisgICAgc2V0IHZpZXdtYWluaGVhZGlkX29yaWcoJHZpZXcpICRtYWluaGVhZGlkCisgICAgaWYgeyRmaWxlcyBuZSB7fSAmJiAkbWFpbmhlYWRpZCBuZSB7fX0geworCWdldF92aWV3bWFpbmhlYWQgJHZpZXcKKyAgICB9CisgICAgaWYgeyRzaG93bG9jYWxjaGFuZ2VzICYmICR2aWV3bWFpbmhlYWRpZCgkdmlldykgbmUge319IHsKKwlpbnRlcmVzdGVkaW4gJHZpZXdtYWluaGVhZGlkKCR2aWV3KSBkb2RpZmZpbmRleAorICAgIH0KKyAgICBmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMCAtdHJhbnNsYXRpb24gbGYgLWVvZmNoYXIge30KKyAgICBpZiB7JHRjbGVuY29kaW5nICE9IHt9fSB7CisJZmNvbmZpZ3VyZSAkZmQgLWVuY29kaW5nICR0Y2xlbmNvZGluZworICAgIH0KKyAgICBmaWxlcnVuICRmZCBbbGlzdCBnZXRjb21taXRsaW5lcyAkZmQgJGkgJHZpZXcgMF0KKyAgICBub3didXN5ICR2aWV3IFttYyAiUmVhZGluZyJdCisgICAgc2V0IHZpZXdjb21wbGV0ZSgkdmlldykgMAorICAgIHNldCB2aWV3YWN0aXZlKCR2aWV3KSAxCisgICAgcmV0dXJuIDEKK30KKworcHJvYyBzdG9wX2luc3RhbmNlIHtpbnN0fSB7CisgICAgZ2xvYmFsIGNvbW1mZCBsZWZ0b3ZlcgorCisgICAgc2V0IGZkICRjb21tZmQoJGluc3QpCisgICAgY2F0Y2ggeworCXNldCBwaWQgW3BpZCAkZmRdCisKKwlpZiB7JDo6dGNsX3BsYXRmb3JtKHBsYXRmb3JtKSBlcSB7d2luZG93c319IHsKKwkgICAgZXhlYyB0YXNra2lsbCAvcGlkICRwaWQKKwl9IGVsc2UgeworCSAgICBleGVjIGtpbGwgJHBpZAorCX0KKyAgICB9CisgICAgY2F0Y2gge2Nsb3NlICRmZH0KKyAgICBudWtlZmlsZSAkZmQKKyAgICB1bnNldCBjb21tZmQoJGluc3QpCisgICAgdW5zZXQgbGVmdG92ZXIoJGluc3QpCit9CisKK3Byb2Mgc3RvcF9iYWNrZW5kcyB7fSB7CisgICAgZ2xvYmFsIGNvbW1mZAorCisgICAgZm9yZWFjaCBpbnN0IFthcnJheSBuYW1lcyBjb21tZmRdIHsKKwlzdG9wX2luc3RhbmNlICRpbnN0CisgICAgfQorfQorCitwcm9jIHN0b3BfcmV2X2xpc3Qge3ZpZXd9IHsKKyAgICBnbG9iYWwgdmlld2luc3RhbmNlcworCisgICAgZm9yZWFjaCBpbnN0ICR2aWV3aW5zdGFuY2VzKCR2aWV3KSB7CisJc3RvcF9pbnN0YW5jZSAkaW5zdAorICAgIH0KKyAgICBzZXQgdmlld2luc3RhbmNlcygkdmlldykge30KK30KKworcHJvYyByZXNldF9wZW5kaW5nX3NlbGVjdCB7c2VsaWR9IHsKKyAgICBnbG9iYWwgcGVuZGluZ19zZWxlY3QgbWFpbmhlYWRpZCBzZWxlY3RoZWFkaWQKKworICAgIGlmIHskc2VsaWQgbmUge319IHsKKwlzZXQgcGVuZGluZ19zZWxlY3QgJHNlbGlkCisgICAgfSBlbHNlaWYgeyRzZWxlY3RoZWFkaWQgbmUge319IHsKKwlzZXQgcGVuZGluZ19zZWxlY3QgJHNlbGVjdGhlYWRpZAorICAgIH0gZWxzZSB7CisJc2V0IHBlbmRpbmdfc2VsZWN0ICRtYWluaGVhZGlkCisgICAgfQorfQorCitwcm9jIGdldGNvbW1pdHMge3NlbGlkfSB7CisgICAgZ2xvYmFsIGNhbnYgY3VydmlldyBuZWVkX3JlZGlzcGxheSB2aWV3YWN0aXZlCisKKyAgICBpbml0bGF5b3V0CisgICAgaWYge1tzdGFydF9yZXZfbGlzdCAkY3Vydmlld119IHsKKwlyZXNldF9wZW5kaW5nX3NlbGVjdCAkc2VsaWQKKwlzaG93X3N0YXR1cyBbbWMgIlJlYWRpbmcgY29tbWl0cy4uLiJdCisJc2V0IG5lZWRfcmVkaXNwbGF5IDEKKyAgICB9IGVsc2UgeworCXNob3dfc3RhdHVzIFttYyAiTm8gY29tbWl0cyBzZWxlY3RlZCJdCisgICAgfQorfQorCitwcm9jIHVwZGF0ZWNvbW1pdHMge30geworICAgIGdsb2JhbCBjdXJ2aWV3IHZjYW5vcHQgdm9yaWdhcmdzIHZmaWxlbGltaXQgdmlld2luc3RhbmNlcworICAgIGdsb2JhbCB2aWV3YWN0aXZlIHZpZXdjb21wbGV0ZSB0Y2xlbmNvZGluZworICAgIGdsb2JhbCBzdGFydG1zZWNzIHNob3duZWFydGFncyBzaG93bG9jYWxjaGFuZ2VzCisgICAgZ2xvYmFsIG1haW5oZWFkaWQgdmlld21haW5oZWFkaWQgdmlld21haW5oZWFkaWRfb3JpZyBwZW5kaW5nX3NlbGVjdAorICAgIGdsb2JhbCBoYXN3b3JrdHJlZQorICAgIGdsb2JhbCB2YXJjaWQgdnBvc2lkcyB2bmVnaWRzIHZmbGFncyB2cmV2cworICAgIGdsb2JhbCBzaG93X25vdGVzCisKKyAgICBzZXQgaGFzd29ya3RyZWUgW2hhc3dvcmt0cmVlXQorICAgIHJlcmVhZHJlZnMKKyAgICBzZXQgdmlldyAkY3VydmlldworICAgIGlmIHskbWFpbmhlYWRpZCBuZSAkdmlld21haW5oZWFkaWRfb3JpZygkdmlldyl9IHsKKwlpZiB7JHNob3dsb2NhbGNoYW5nZXN9IHsKKwkgICAgZG9oaWRlbG9jYWxjaGFuZ2VzCisJfQorCXNldCB2aWV3bWFpbmhlYWRpZCgkdmlldykgJG1haW5oZWFkaWQKKwlzZXQgdmlld21haW5oZWFkaWRfb3JpZygkdmlldykgJG1haW5oZWFkaWQKKwlpZiB7JHZmaWxlbGltaXQoJHZpZXcpIG5lIHt9fSB7CisJICAgIGdldF92aWV3bWFpbmhlYWQgJHZpZXcKKwl9CisgICAgfQorICAgIGlmIHskc2hvd2xvY2FsY2hhbmdlc30geworCWRvc2hvd2xvY2FsY2hhbmdlcworICAgIH0KKyAgICBpZiB7JHZjYW5vcHQoJHZpZXcpfSB7CisJc2V0IG9sZHBvcyAkdnBvc2lkcygkdmlldykKKwlzZXQgb2xkbmVnICR2bmVnaWRzKCR2aWV3KQorCXNldCByZXZzIFtwYXJzZXZpZXdyZXZzICR2aWV3ICR2cmV2cygkdmlldyldCisJaWYgeyRyZXZzIGVxIHt9fSB7CisJICAgIHJldHVybgorCX0KKwkjIG5vdGU6IGdldHRpbmcgdGhlIGRlbHRhIHdoZW4gbmVnYXRpdmUgcmVmcyBjaGFuZ2UgaXMgaGFyZCwKKwkjIGFuZCBjb3VsZCByZXF1aXJlIG11bHRpcGxlIGdpdCBsb2cgaW52b2NhdGlvbnMsIHNvIGluIHRoYXQKKwkjIGNhc2Ugd2UgYXNrIGdpdCBsb2cgZm9yIGFsbCB0aGUgY29tbWl0cyAobm90IGp1c3QgdGhlIGRlbHRhKQorCWlmIHskb2xkbmVnIGVxICR2bmVnaWRzKCR2aWV3KX0geworCSAgICBzZXQgbmV3cmV2cyB7fQorCSAgICBzZXQgbnBvcyAwCisJICAgICMgdGFrZSBvdXQgcG9zaXRpdmUgcmVmcyB0aGF0IHdlIGFza2VkIGZvciBiZWZvcmUgb3IKKwkgICAgIyB0aGF0IHdlIGhhdmUgYWxyZWFkeSBzZWVuCisJICAgIGZvcmVhY2ggcmV2ICRyZXZzIHsKKwkJaWYge1tzdHJpbmcgbGVuZ3RoICRyZXZdID09IDQwfSB7CisJCSAgICBpZiB7W2xzZWFyY2ggLWV4YWN0ICRvbGRwb3MgJHJldl0gPCAwCisJCQkmJiAhW2luZm8gZXhpc3RzIHZhcmNpZCgkdmlldywkcmV2KV19IHsKKwkJCWxhcHBlbmQgbmV3cmV2cyAkcmV2CisJCQlpbmNyIG5wb3MKKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgIGxhcHBlbmQgJG5ld3JldnMgJHJldgorCQl9CisJICAgIH0KKwkgICAgaWYgeyRucG9zID09IDB9IHJldHVybgorCSAgICBzZXQgcmV2cyAkbmV3cmV2cworCSAgICBzZXQgdnBvc2lkcygkdmlldykgW2xzb3J0IC11bmlxdWUgW2NvbmNhdCAkb2xkcG9zICR2cG9zaWRzKCR2aWV3KV1dCisJfQorCXNldCBhcmdzIFtjb25jYXQgJHZmbGFncygkdmlldykgJHJldnMgLS1ub3QgJG9sZHBvc10KKyAgICB9IGVsc2UgeworCXNldCBhcmdzICR2b3JpZ2FyZ3MoJHZpZXcpCisgICAgfQorICAgIGlmIHtbY2F0Y2ggeworCXNldCBmZCBbb3BlbiBbY29uY2F0IHwgZ2l0IGxvZyAtLW5vLWNvbG9yIC16IC0tcHJldHR5PXJhdyAkc2hvd19ub3RlcyBcCisJCQktLXBhcmVudHMgLS1ib3VuZGFyeSAkYXJncyAiLS0iICR2ZmlsZWxpbWl0KCR2aWV3KV0gcl0KKyAgICB9IGVycl19IHsKKwllcnJvcl9wb3B1cCAiW21jICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiXSAkZXJyIgorCXJldHVybgorICAgIH0KKyAgICBpZiB7JHZpZXdhY3RpdmUoJHZpZXcpID09IDB9IHsKKwlzZXQgc3RhcnRtc2VjcyBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgfQorICAgIHNldCBpIFtyZWdfaW5zdGFuY2UgJGZkXQorICAgIGxhcHBlbmQgdmlld2luc3RhbmNlcygkdmlldykgJGkKKyAgICBmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMCAtdHJhbnNsYXRpb24gbGYgLWVvZmNoYXIge30KKyAgICBpZiB7JHRjbGVuY29kaW5nICE9IHt9fSB7CisJZmNvbmZpZ3VyZSAkZmQgLWVuY29kaW5nICR0Y2xlbmNvZGluZworICAgIH0KKyAgICBmaWxlcnVuICRmZCBbbGlzdCBnZXRjb21taXRsaW5lcyAkZmQgJGkgJHZpZXcgMV0KKyAgICBpbmNyIHZpZXdhY3RpdmUoJHZpZXcpCisgICAgc2V0IHZpZXdjb21wbGV0ZSgkdmlldykgMAorICAgIHJlc2V0X3BlbmRpbmdfc2VsZWN0IHt9CisgICAgbm93YnVzeSAkdmlldyBbbWMgIlJlYWRpbmciXQorICAgIGlmIHskc2hvd25lYXJ0YWdzfSB7CisJZ2V0YWxsY29tbWl0cworICAgIH0KK30KKworcHJvYyByZWxvYWRjb21taXRzIHt9IHsKKyAgICBnbG9iYWwgY3VydmlldyB2aWV3Y29tcGxldGUgc2VsZWN0ZWRsaW5lIGN1cnJlbnRpZCB0aGlja2VybGluZQorICAgIGdsb2JhbCBzaG93bmVhcnRhZ3MgdHJlZWRpZmZzIGNvbW1pdGludGVyZXN0IGNhY2hlZF9jb21taXRyb3cKKyAgICBnbG9iYWwgdGFyZ2V0aWQgY29tbWl0aW5mbworCisgICAgc2V0IHNlbGlkIHt9CisgICAgaWYgeyRzZWxlY3RlZGxpbmUgbmUge319IHsKKwlzZXQgc2VsaWQgJGN1cnJlbnRpZAorICAgIH0KKworICAgIGlmIHshJHZpZXdjb21wbGV0ZSgkY3Vydmlldyl9IHsKKwlzdG9wX3Jldl9saXN0ICRjdXJ2aWV3CisgICAgfQorICAgIHJlc2V0dmFyY3MgJGN1cnZpZXcKKyAgICBzZXQgc2VsZWN0ZWRsaW5lIHt9CisgICAgdW5zZXQgLW5vY29tcGxhaW4gY3VycmVudGlkCisgICAgdW5zZXQgLW5vY29tcGxhaW4gdGhpY2tlcmxpbmUKKyAgICB1bnNldCAtbm9jb21wbGFpbiB0cmVlZGlmZnMKKyAgICByZWFkcmVmcworICAgIGNoYW5nZWRyZWZzCisgICAgaWYgeyRzaG93bmVhcnRhZ3N9IHsKKwlnZXRhbGxjb21taXRzCisgICAgfQorICAgIGNsZWFyX2Rpc3BsYXkKKyAgICB1bnNldCAtbm9jb21wbGFpbiBjb21taXRpbmZvCisgICAgdW5zZXQgLW5vY29tcGxhaW4gY29tbWl0aW50ZXJlc3QKKyAgICB1bnNldCAtbm9jb21wbGFpbiBjYWNoZWRfY29tbWl0cm93CisgICAgdW5zZXQgLW5vY29tcGxhaW4gdGFyZ2V0aWQKKyAgICBzZXRjYW52c2Nyb2xsCisgICAgZ2V0Y29tbWl0cyAkc2VsaWQKKyAgICByZXR1cm4gMAorfQorCisjIFRoaXMgbWFrZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBwb3NpdGl2ZSBpbnRlZ2VyIHdoaWNoCisjIHNvcnRzIGFzIGEgc3RyaW5nIGluIG51bWVyaWNhbCBvcmRlcgorcHJvYyBzdHJyZXAge259IHsKKyAgICBpZiB7JG4gPCAxNn0geworCXJldHVybiBbZm9ybWF0ICIleCIgJG5dCisgICAgfSBlbHNlaWYgeyRuIDwgMjU2fSB7CisJcmV0dXJuIFtmb3JtYXQgInglLjJ4IiAkbl0KKyAgICB9IGVsc2VpZiB7JG4gPCA2NTUzNn0geworCXJldHVybiBbZm9ybWF0ICJ5JS40eCIgJG5dCisgICAgfQorICAgIHJldHVybiBbZm9ybWF0ICJ6JS44eCIgJG5dCit9CisKKyMgUHJvY2VkdXJlcyB1c2VkIGluIHJlb3JkZXJpbmcgY29tbWl0cyBmcm9tIGdpdCBsb2cgKHdpdGhvdXQKKyMgLS10b3BvLW9yZGVyKSBpbnRvIHRoZSBvcmRlciBmb3IgZGlzcGxheS4KKworcHJvYyB2YXJjaW5pdCB7dmlld30geworICAgIGdsb2JhbCB2YXJjc3RhcnQgdnVwcHRyIHZkb3ducHRyIHZsZWZ0cHRyIHZiYWNrcHRyIHZhcmN0b2sgdmFyY3JvdworICAgIGdsb2JhbCB2dG9rbW9kIHZhcmNtb2QgdnJvd21vZCB2YXJjaXggdmxhc3RpbnMKKworICAgIHNldCB2YXJjc3RhcnQoJHZpZXcpIHt7fX0KKyAgICBzZXQgdnVwcHRyKCR2aWV3KSB7MH0KKyAgICBzZXQgdmRvd25wdHIoJHZpZXcpIHswfQorICAgIHNldCB2bGVmdHB0cigkdmlldykgezB9CisgICAgc2V0IHZiYWNrcHRyKCR2aWV3KSB7MH0KKyAgICBzZXQgdmFyY3Rvaygkdmlldykge3t9fQorICAgIHNldCB2YXJjcm93KCR2aWV3KSB7e319CisgICAgc2V0IHZ0b2ttb2QoJHZpZXcpIHt9CisgICAgc2V0IHZhcmNtb2QoJHZpZXcpIDAKKyAgICBzZXQgdnJvd21vZCgkdmlldykgMAorICAgIHNldCB2YXJjaXgoJHZpZXcpIHt7fX0KKyAgICBzZXQgdmxhc3RpbnMoJHZpZXcpIHswfQorfQorCitwcm9jIHJlc2V0dmFyY3Mge3ZpZXd9IHsKKyAgICBnbG9iYWwgdmFyY2lkIHZhcmNjb21taXRzIHBhcmVudHMgY2hpbGRyZW4gdnNlZWRjb3VudCBvcmRlcnRvaworICAgIGdsb2JhbCB2c2hvcnRpZHMKKworICAgIGZvcmVhY2ggdmlkIFthcnJheSBuYW1lcyB2YXJjaWQgJHZpZXcsKl0geworCXVuc2V0IHZhcmNpZCgkdmlkKQorCXVuc2V0IGNoaWxkcmVuKCR2aWQpCisJdW5zZXQgcGFyZW50cygkdmlkKQorICAgIH0KKyAgICBmb3JlYWNoIHZpZCBbYXJyYXkgbmFtZXMgdnNob3J0aWRzICR2aWV3LCpdIHsKKwl1bnNldCB2c2hvcnRpZHMoJHZpZCkKKyAgICB9CisgICAgIyBzb21lIGNvbW1pdHMgbWlnaHQgaGF2ZSBjaGlsZHJlbiBidXQgaGF2ZW4ndCBiZWVuIHNlZW4geWV0CisgICAgZm9yZWFjaCB2aWQgW2FycmF5IG5hbWVzIGNoaWxkcmVuICR2aWV3LCpdIHsKKwl1bnNldCBjaGlsZHJlbigkdmlkKQorICAgIH0KKyAgICBmb3JlYWNoIHZhIFthcnJheSBuYW1lcyB2YXJjY29tbWl0cyAkdmlldywqXSB7CisJdW5zZXQgdmFyY2NvbW1pdHMoJHZhKQorICAgIH0KKyAgICBmb3JlYWNoIHZkIFthcnJheSBuYW1lcyB2c2VlZGNvdW50ICR2aWV3LCpdIHsKKwl1bnNldCB2c2VlZGNvdW50KCR2ZCkKKyAgICB9CisgICAgdW5zZXQgLW5vY29tcGxhaW4gb3JkZXJ0b2sKK30KKworIyByZXR1cm5zIGEgbGlzdCBvZiB0aGUgY29tbWl0cyB3aXRoIG5vIGNoaWxkcmVuCitwcm9jIHNlZWRzIHt2fSB7CisgICAgZ2xvYmFsIHZkb3ducHRyIHZsZWZ0cHRyIHZhcmNzdGFydAorCisgICAgc2V0IHJldCB7fQorICAgIHNldCBhIFtsaW5kZXggJHZkb3ducHRyKCR2KSAwXQorICAgIHdoaWxlIHskYSAhPSAwfSB7CisJbGFwcGVuZCByZXQgW2xpbmRleCAkdmFyY3N0YXJ0KCR2KSAkYV0KKwlzZXQgYSBbbGluZGV4ICR2bGVmdHB0cigkdikgJGFdCisgICAgfQorICAgIHJldHVybiAkcmV0Cit9CisKK3Byb2MgbmV3dmFyYyB7dmlldyBpZH0geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY3RvayBwYXJlbnRzIGNoaWxkcmVuIHZkYXRlbW9kZQorICAgIGdsb2JhbCB2dXBwdHIgdmRvd25wdHIgdmxlZnRwdHIgdmJhY2twdHIgdmFyY3JvdyB2YXJjaXggdmFyY3N0YXJ0CisgICAgZ2xvYmFsIGNvbW1pdGRhdGEgY29tbWl0aW5mbyB2c2VlZGNvdW50IHZhcmNjb21taXRzIHZsYXN0aW5zCisKKyAgICBzZXQgYSBbbGxlbmd0aCAkdmFyY3RvaygkdmlldyldCisgICAgc2V0IHZpZCAkdmlldywkaWQKKyAgICBpZiB7W2xsZW5ndGggJGNoaWxkcmVuKCR2aWQpXSA9PSAwIHx8ICR2ZGF0ZW1vZGUoJHZpZXcpfSB7CisJaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0aW5mbygkaWQpXX0geworCSAgICBwYXJzZWNvbW1pdCAkaWQgJGNvbW1pdGRhdGEoJGlkKSAxCisJfQorCXNldCBjZGF0ZSBbbGluZGV4IFtsaW5kZXggJGNvbW1pdGluZm8oJGlkKSA0XSAwXQorCWlmIHshW3N0cmluZyBpcyBpbnRlZ2VyIC1zdHJpY3QgJGNkYXRlXX0geworCSAgICBzZXQgY2RhdGUgMAorCX0KKwlpZiB7IVtpbmZvIGV4aXN0cyB2c2VlZGNvdW50KCR2aWV3LCRjZGF0ZSldfSB7CisJICAgIHNldCB2c2VlZGNvdW50KCR2aWV3LCRjZGF0ZSkgLTEKKwl9CisJc2V0IGMgW2luY3IgdnNlZWRjb3VudCgkdmlldywkY2RhdGUpXQorCXNldCBjZGF0ZSBbZXhwciB7JGNkYXRlIF4gMHhmZmZmZmZmZn1dCisJc2V0IHRvayAic1tzdHJyZXAgJGNkYXRlXVtzdHJyZXAgJGNdIgorICAgIH0gZWxzZSB7CisJc2V0IHRvayB7fQorICAgIH0KKyAgICBzZXQga2EgMAorICAgIGlmIHtbbGxlbmd0aCAkY2hpbGRyZW4oJHZpZCldID4gMH0geworCXNldCBraWQgW2xpbmRleCAkY2hpbGRyZW4oJHZpZCkgZW5kXQorCXNldCBrICR2YXJjaWQoJHZpZXcsJGtpZCkKKwlpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHZpZXcpICRrXSAkdG9rXSA+IDB9IHsKKwkgICAgc2V0IGtpICRraWQKKwkgICAgc2V0IGthICRrCisJICAgIHNldCB0b2sgW2xpbmRleCAkdmFyY3RvaygkdmlldykgJGtdCisJfQorICAgIH0KKyAgICBpZiB7JGthICE9IDB9IHsKKwlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHBhcmVudHMoJHZpZXcsJGtpKSAkaWRdCisJc2V0IGogW2V4cHIge1tsbGVuZ3RoICRwYXJlbnRzKCR2aWV3LCRraSldIC0gMSAtICRpfV0KKwlhcHBlbmQgdG9rIFtzdHJyZXAgJGpdCisgICAgfQorICAgIHNldCBjIFtsaW5kZXggJHZsYXN0aW5zKCR2aWV3KSAka2FdCisgICAgaWYgeyRjID09IDAgfHwgW3N0cmluZyBjb21wYXJlICR0b2sgW2xpbmRleCAkdmFyY3RvaygkdmlldykgJGNdXSA8IDB9IHsKKwlzZXQgYyAka2EKKwlzZXQgYiBbbGluZGV4ICR2ZG93bnB0cigkdmlldykgJGthXQorICAgIH0gZWxzZSB7CisJc2V0IGIgW2xpbmRleCAkdmxlZnRwdHIoJHZpZXcpICRjXQorICAgIH0KKyAgICB3aGlsZSB7JGIgIT0gMCAmJiBbc3RyaW5nIGNvbXBhcmUgJHRvayBbbGluZGV4ICR2YXJjdG9rKCR2aWV3KSAkYl1dID49IDB9IHsKKwlzZXQgYyAkYgorCXNldCBiIFtsaW5kZXggJHZsZWZ0cHRyKCR2aWV3KSAkY10KKyAgICB9CisgICAgaWYgeyRjID09ICRrYX0geworCWxzZXQgdmRvd25wdHIoJHZpZXcpICRrYSAkYQorCWxhcHBlbmQgdmJhY2twdHIoJHZpZXcpIDAKKyAgICB9IGVsc2UgeworCWxzZXQgdmxlZnRwdHIoJHZpZXcpICRjICRhCisJbGFwcGVuZCB2YmFja3B0cigkdmlldykgJGMKKyAgICB9CisgICAgbHNldCB2bGFzdGlucygkdmlldykgJGthICRhCisgICAgbGFwcGVuZCB2dXBwdHIoJHZpZXcpICRrYQorICAgIGxhcHBlbmQgdmxlZnRwdHIoJHZpZXcpICRiCisgICAgaWYgeyRiICE9IDB9IHsKKwlsc2V0IHZiYWNrcHRyKCR2aWV3KSAkYiAkYQorICAgIH0KKyAgICBsYXBwZW5kIHZhcmN0b2soJHZpZXcpICR0b2sKKyAgICBsYXBwZW5kIHZhcmNzdGFydCgkdmlldykgJGlkCisgICAgbGFwcGVuZCB2ZG93bnB0cigkdmlldykgMAorICAgIGxhcHBlbmQgdmFyY3Jvdygkdmlldykge30KKyAgICBsYXBwZW5kIHZhcmNpeCgkdmlldykge30KKyAgICBzZXQgdmFyY2NvbW1pdHMoJHZpZXcsJGEpIHt9CisgICAgbGFwcGVuZCB2bGFzdGlucygkdmlldykgMAorICAgIHJldHVybiAkYQorfQorCitwcm9jIHNwbGl0dmFyYyB7cCB2fSB7CisgICAgZ2xvYmFsIHZhcmNpZCB2YXJjc3RhcnQgdmFyY2NvbW1pdHMgdmFyY3RvayB2dG9rbW9kCisgICAgZ2xvYmFsIHZ1cHB0ciB2ZG93bnB0ciB2bGVmdHB0ciB2YmFja3B0ciB2YXJjaXggdmFyY3JvdyB2bGFzdGlucworCisgICAgc2V0IG9hICR2YXJjaWQoJHYsJHApCisgICAgc2V0IG90b2sgW2xpbmRleCAkdmFyY3RvaygkdikgJG9hXQorICAgIHNldCBhYyAkdmFyY2NvbW1pdHMoJHYsJG9hKQorICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkdmFyY2NvbW1pdHMoJHYsJG9hKSAkcF0KKyAgICBpZiB7JGkgPD0gMH0gcmV0dXJuCisgICAgc2V0IG5hIFtsbGVuZ3RoICR2YXJjdG9rKCR2KV0KKyAgICAjICIlIiBzb3J0cyBiZWZvcmUgIjAiLi4uCisgICAgc2V0IHRvayAiJG90b2slW3N0cnJlcCAkaV0iCisgICAgbGFwcGVuZCB2YXJjdG9rKCR2KSAkdG9rCisgICAgbGFwcGVuZCB2YXJjcm93KCR2KSB7fQorICAgIGxhcHBlbmQgdmFyY2l4KCR2KSB7fQorICAgIHNldCB2YXJjY29tbWl0cygkdiwkb2EpIFtscmFuZ2UgJGFjIDAgW2V4cHIgeyRpIC0gMX1dXQorICAgIHNldCB2YXJjY29tbWl0cygkdiwkbmEpIFtscmFuZ2UgJGFjICRpIGVuZF0KKyAgICBsYXBwZW5kIHZhcmNzdGFydCgkdikgJHAKKyAgICBmb3JlYWNoIGlkICR2YXJjY29tbWl0cygkdiwkbmEpIHsKKwlzZXQgdmFyY2lkKCR2LCRpZCkgJG5hCisgICAgfQorICAgIGxhcHBlbmQgdmRvd25wdHIoJHYpIFtsaW5kZXggJHZkb3ducHRyKCR2KSAkb2FdCisgICAgbGFwcGVuZCB2bGFzdGlucygkdikgW2xpbmRleCAkdmxhc3RpbnMoJHYpICRvYV0KKyAgICBsc2V0IHZkb3ducHRyKCR2KSAkb2EgJG5hCisgICAgbHNldCB2bGFzdGlucygkdikgJG9hIDAKKyAgICBsYXBwZW5kIHZ1cHB0cigkdikgJG9hCisgICAgbGFwcGVuZCB2bGVmdHB0cigkdikgMAorICAgIGxhcHBlbmQgdmJhY2twdHIoJHYpIDAKKyAgICBmb3Ige3NldCBiIFtsaW5kZXggJHZkb3ducHRyKCR2KSAkbmFdfSB7JGIgIT0gMH0ge3NldCBiIFtsaW5kZXggJHZsZWZ0cHRyKCR2KSAkYl19IHsKKwlsc2V0IHZ1cHB0cigkdikgJGIgJG5hCisgICAgfQorICAgIGlmIHtbc3RyaW5nIGNvbXBhcmUgJG90b2sgJHZ0b2ttb2QoJHYpXSA8PSAwfSB7CisJbW9kaWZ5X2FyYyAkdiAkb2EKKyAgICB9Cit9CisKK3Byb2MgcmVudW1iZXJ2YXJjIHthIHZ9IHsKKyAgICBnbG9iYWwgcGFyZW50cyBjaGlsZHJlbiB2YXJjdG9rIHZhcmNzdGFydCB2YXJjY29tbWl0cworICAgIGdsb2JhbCB2dXBwdHIgdmRvd25wdHIgdmxlZnRwdHIgdmJhY2twdHIgdmxhc3RpbnMgdmFyY2lkIHZ0b2ttb2QgdmRhdGVtb2RlCisKKyAgICBzZXQgdDEgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIHNldCB0b2RvIHt9CisgICAgc2V0IGlzcmVsYXRlZCgkYSkgMQorICAgIHNldCBraWRjaGFuZ2VkKCRhKSAxCisgICAgc2V0IG50b3QgMAorICAgIHdoaWxlIHskYSAhPSAwfSB7CisJaWYge1tpbmZvIGV4aXN0cyBpc3JlbGF0ZWQoJGEpXX0geworCSAgICBsYXBwZW5kIHRvZG8gJGEKKwkgICAgc2V0IGlkIFtsaW5kZXggJHZhcmNjb21taXRzKCR2LCRhKSBlbmRdCisJICAgIGZvcmVhY2ggcCAkcGFyZW50cygkdiwkaWQpIHsKKwkJaWYge1tpbmZvIGV4aXN0cyB2YXJjaWQoJHYsJHApXX0geworCQkgICAgc2V0IGlzcmVsYXRlZCgkdmFyY2lkKCR2LCRwKSkgMQorCQl9CisJICAgIH0KKwl9CisJaW5jciBudG90CisJc2V0IGIgW2xpbmRleCAkdmRvd25wdHIoJHYpICRhXQorCWlmIHskYiA9PSAwfSB7CisJICAgIHdoaWxlIHskYSAhPSAwfSB7CisJCXNldCBiIFtsaW5kZXggJHZsZWZ0cHRyKCR2KSAkYV0KKwkJaWYgeyRiICE9IDB9IGJyZWFrCisJCXNldCBhIFtsaW5kZXggJHZ1cHB0cigkdikgJGFdCisJICAgIH0KKwl9CisJc2V0IGEgJGIKKyAgICB9CisgICAgZm9yZWFjaCBhICR0b2RvIHsKKwlpZiB7IVtpbmZvIGV4aXN0cyBraWRjaGFuZ2VkKCRhKV19IGNvbnRpbnVlCisJc2V0IGlkIFtsaW5kZXggJHZhcmNzdGFydCgkdikgJGFdCisJaWYge1tsbGVuZ3RoICRjaGlsZHJlbigkdiwkaWQpXSA+IDF9IHsKKwkgICAgc2V0IGNoaWxkcmVuKCR2LCRpZCkgW2xzb3J0IC1jb21tYW5kIFtsaXN0IHZ0b2tjbXAgJHZdIFwKKwkJCQkgICAgICAkY2hpbGRyZW4oJHYsJGlkKV0KKwl9CisJc2V0IG9sZHRvayBbbGluZGV4ICR2YXJjdG9rKCR2KSAkYV0KKwlpZiB7ISR2ZGF0ZW1vZGUoJHYpfSB7CisJICAgIHNldCB0b2sge30KKwl9IGVsc2UgeworCSAgICBzZXQgdG9rICRvbGR0b2sKKwl9CisJc2V0IGthIDAKKwlzZXQga2lkIFtsYXN0X3JlYWxfY2hpbGQgJHYsJGlkXQorCWlmIHska2lkIG5lIHt9fSB7CisJICAgIHNldCBrICR2YXJjaWQoJHYsJGtpZCkKKwkgICAgaWYge1tzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAka10gJHRva10gPiAwfSB7CisJCXNldCBraSAka2lkCisJCXNldCBrYSAkaworCQlzZXQgdG9rIFtsaW5kZXggJHZhcmN0b2soJHYpICRrXQorCSAgICB9CisJfQorCWlmIHska2EgIT0gMH0geworCSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHBhcmVudHMoJHYsJGtpKSAkaWRdCisJICAgIHNldCBqIFtleHByIHtbbGxlbmd0aCAkcGFyZW50cygkdiwka2kpXSAtIDEgLSAkaX1dCisJICAgIGFwcGVuZCB0b2sgW3N0cnJlcCAkal0KKwl9CisJaWYgeyR0b2sgZXEgJG9sZHRva30geworCSAgICBjb250aW51ZQorCX0KKwlzZXQgaWQgW2xpbmRleCAkdmFyY2NvbW1pdHMoJHYsJGEpIGVuZF0KKwlmb3JlYWNoIHAgJHBhcmVudHMoJHYsJGlkKSB7CisJICAgIGlmIHtbaW5mbyBleGlzdHMgdmFyY2lkKCR2LCRwKV19IHsKKwkJc2V0IGtpZGNoYW5nZWQoJHZhcmNpZCgkdiwkcCkpIDEKKwkgICAgfSBlbHNlIHsKKwkJc2V0IHNvcnRraWRzKCRwKSAxCisJICAgIH0KKwl9CisJbHNldCB2YXJjdG9rKCR2KSAkYSAkdG9rCisJc2V0IGIgW2xpbmRleCAkdnVwcHRyKCR2KSAkYV0KKwlpZiB7JGIgIT0gJGthfSB7CisJICAgIGlmIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGthXSAkdnRva21vZCgkdildIDwgMH0geworCQltb2RpZnlfYXJjICR2ICRrYQorCSAgICB9CisJICAgIGlmIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGJdICR2dG9rbW9kKCR2KV0gPCAwfSB7CisJCW1vZGlmeV9hcmMgJHYgJGIKKwkgICAgfQorCSAgICBzZXQgYyBbbGluZGV4ICR2YmFja3B0cigkdikgJGFdCisJICAgIHNldCBkIFtsaW5kZXggJHZsZWZ0cHRyKCR2KSAkYV0KKwkgICAgaWYgeyRjID09IDB9IHsKKwkJbHNldCB2ZG93bnB0cigkdikgJGIgJGQKKwkgICAgfSBlbHNlIHsKKwkJbHNldCB2bGVmdHB0cigkdikgJGMgJGQKKwkgICAgfQorCSAgICBpZiB7JGQgIT0gMH0geworCQlsc2V0IHZiYWNrcHRyKCR2KSAkZCAkYworCSAgICB9CisJICAgIGlmIHtbbGluZGV4ICR2bGFzdGlucygkdikgJGJdID09ICRhfSB7CisJCWxzZXQgdmxhc3RpbnMoJHYpICRiICRjCisJICAgIH0KKwkgICAgbHNldCB2dXBwdHIoJHYpICRhICRrYQorCSAgICBzZXQgYyBbbGluZGV4ICR2bGFzdGlucygkdikgJGthXQorCSAgICBpZiB7JGMgPT0gMCB8fCBcCisJCSAgICBbc3RyaW5nIGNvbXBhcmUgJHRvayBbbGluZGV4ICR2YXJjdG9rKCR2KSAkY11dIDwgMH0geworCQlzZXQgYyAka2EKKwkJc2V0IGIgW2xpbmRleCAkdmRvd25wdHIoJHYpICRrYV0KKwkgICAgfSBlbHNlIHsKKwkJc2V0IGIgW2xpbmRleCAkdmxlZnRwdHIoJHYpICRjXQorCSAgICB9CisJICAgIHdoaWxlIHskYiAhPSAwICYmIFwKKwkJICAgICAgW3N0cmluZyBjb21wYXJlICR0b2sgW2xpbmRleCAkdmFyY3RvaygkdikgJGJdXSA+PSAwfSB7CisJCXNldCBjICRiCisJCXNldCBiIFtsaW5kZXggJHZsZWZ0cHRyKCR2KSAkY10KKwkgICAgfQorCSAgICBpZiB7JGMgPT0gJGthfSB7CisgCQlsc2V0IHZkb3ducHRyKCR2KSAka2EgJGEKKwkJbHNldCB2YmFja3B0cigkdikgJGEgMAorCSAgICB9IGVsc2UgeworCQlsc2V0IHZsZWZ0cHRyKCR2KSAkYyAkYQorCQlsc2V0IHZiYWNrcHRyKCR2KSAkYSAkYworCSAgICB9CisJICAgIGxzZXQgdmxlZnRwdHIoJHYpICRhICRiCisJICAgIGlmIHskYiAhPSAwfSB7CisJCWxzZXQgdmJhY2twdHIoJHYpICRiICRhCisJICAgIH0KKwkgICAgbHNldCB2bGFzdGlucygkdikgJGthICRhCisJfQorICAgIH0KKyAgICBmb3JlYWNoIGlkIFthcnJheSBuYW1lcyBzb3J0a2lkc10geworCWlmIHtbbGxlbmd0aCAkY2hpbGRyZW4oJHYsJGlkKV0gPiAxfSB7CisJICAgIHNldCBjaGlsZHJlbigkdiwkaWQpIFtsc29ydCAtY29tbWFuZCBbbGlzdCB2dG9rY21wICR2XSBcCisJCQkJICAgICAgJGNoaWxkcmVuKCR2LCRpZCldCisJfQorICAgIH0KKyAgICBzZXQgdDIgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgICNwdXRzICJyZW51bWJlcnZhcmMgZGlkIFtsbGVuZ3RoICR0b2RvXSBvZiAkbnRvdCBhcmNzIGluIFtleHByIHskdDItJHQxfV1tcyIKK30KKworIyBGaXggdXAgdGhlIGdyYXBoIGFmdGVyIHdlIGhhdmUgZm91bmQgb3V0IHRoYXQgaW4gdmlldyAkdiwKKyMgJHAgKGEgY29tbWl0IHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHNlZW4pIGlzIGFjdHVhbGx5IHRoZSBwYXJlbnQKKyMgb2YgdGhlIGxhc3QgY29tbWl0IGluIGFyYyAkYS4KK3Byb2MgZml4X3JldmVyc2FsIHtwIGEgdn0geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY3N0YXJ0IHZhcmN0b2sgdnVwcHRyCisKKyAgICBzZXQgcGEgJHZhcmNpZCgkdiwkcCkKKyAgICBpZiB7JHAgbmUgW2xpbmRleCAkdmFyY3N0YXJ0KCR2KSAkcGFdfSB7CisJc3BsaXR2YXJjICRwICR2CisJc2V0IHBhICR2YXJjaWQoJHYsJHApCisgICAgfQorICAgICMgc2VlZHMgYWx3YXlzIG5lZWQgdG8gYmUgcmVudW1iZXJlZAorICAgIGlmIHtbbGluZGV4ICR2dXBwdHIoJHYpICRwYV0gPT0gMCB8fAorCVtzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkYV0gXAorCSAgICAgW2xpbmRleCAkdmFyY3RvaygkdikgJHBhXV0gPiAwfSB7CisJcmVudW1iZXJ2YXJjICRwYSAkdgorICAgIH0KK30KKworcHJvYyBpbnNlcnRyb3cge2lkIHAgdn0geworICAgIGdsb2JhbCBjbWl0bGlzdGVkIGNoaWxkcmVuIHBhcmVudHMgdmFyY2lkIHZhcmN0b2sgdnRva21vZAorICAgIGdsb2JhbCB2YXJjY29tbWl0cyBvcmRlcnRvayBjb21taXRpZHggbnVtY29tbWl0cyBjdXJ2aWV3CisgICAgZ2xvYmFsIHRhcmdldGlkIHRhcmdldHJvdyB2c2hvcnRpZHMKKworICAgIHJlYWRjb21taXQgJGlkCisgICAgc2V0IHZpZCAkdiwkaWQKKyAgICBzZXQgY21pdGxpc3RlZCgkdmlkKSAxCisgICAgc2V0IGNoaWxkcmVuKCR2aWQpIHt9CisgICAgc2V0IHBhcmVudHMoJHZpZCkgW2xpc3QgJHBdCisgICAgc2V0IGEgW25ld3ZhcmMgJHYgJGlkXQorICAgIHNldCB2YXJjaWQoJHZpZCkgJGEKKyAgICBsYXBwZW5kIHZzaG9ydGlkcygkdixbc3RyaW5nIHJhbmdlICRpZCAwIDNdKSAkaWQKKyAgICBpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICRhXSAkdnRva21vZCgkdildIDwgMH0geworCW1vZGlmeV9hcmMgJHYgJGEKKyAgICB9CisgICAgbGFwcGVuZCB2YXJjY29tbWl0cygkdiwkYSkgJGlkCisgICAgc2V0IHZwICR2LCRwCisgICAgaWYge1tsbGVuZ3RoIFtsYXBwZW5kIGNoaWxkcmVuKCR2cCkgJGlkXV0gPiAxfSB7CisJc2V0IGNoaWxkcmVuKCR2cCkgW2xzb3J0IC1jb21tYW5kIFtsaXN0IHZ0b2tjbXAgJHZdICRjaGlsZHJlbigkdnApXQorCXVuc2V0IC1ub2NvbXBsYWluIG9yZGVydG9rCisgICAgfQorICAgIGZpeF9yZXZlcnNhbCAkcCAkYSAkdgorICAgIGluY3IgY29tbWl0aWR4KCR2KQorICAgIGlmIHskdiA9PSAkY3Vydmlld30geworCXNldCBudW1jb21taXRzICRjb21taXRpZHgoJHYpCisJc2V0Y2FudnNjcm9sbAorCWlmIHtbaW5mbyBleGlzdHMgdGFyZ2V0aWRdfSB7CisJICAgIGlmIHshW2NvbWVzX2JlZm9yZSAkdGFyZ2V0aWQgJHBdfSB7CisJCWluY3IgdGFyZ2V0cm93CisJICAgIH0KKwl9CisgICAgfQorfQorCitwcm9jIGluc2VydGZha2Vyb3cge2lkIHB9IHsKKyAgICBnbG9iYWwgdmFyY2lkIHZhcmNjb21taXRzIHBhcmVudHMgY2hpbGRyZW4gY21pdGxpc3RlZAorICAgIGdsb2JhbCBjb21taXRpZHggdmFyY3RvayB2dG9rbW9kIHRhcmdldGlkIHRhcmdldHJvdyBjdXJ2aWV3IG51bWNvbW1pdHMKKworICAgIHNldCB2ICRjdXJ2aWV3CisgICAgc2V0IGEgJHZhcmNpZCgkdiwkcCkKKyAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHZhcmNjb21taXRzKCR2LCRhKSAkcF0KKyAgICBpZiB7JGkgPCAwfSB7CisJcHV0cyAib29wczogaW5zZXJ0ZmFrZXJvdyBjYW4ndCBmaW5kIFtzaG9ydGlkcyAkcF0gb24gYXJjICRhIgorCXJldHVybgorICAgIH0KKyAgICBzZXQgY2hpbGRyZW4oJHYsJGlkKSB7fQorICAgIHNldCBwYXJlbnRzKCR2LCRpZCkgW2xpc3QgJHBdCisgICAgc2V0IHZhcmNpZCgkdiwkaWQpICRhCisgICAgbGFwcGVuZCBjaGlsZHJlbigkdiwkcCkgJGlkCisgICAgc2V0IGNtaXRsaXN0ZWQoJHYsJGlkKSAxCisgICAgc2V0IG51bWNvbW1pdHMgW2luY3IgY29tbWl0aWR4KCR2KV0KKyAgICAjIG5vdGUgd2UgZGVsaWJlcmF0ZWx5IGRvbid0IHVwZGF0ZSB2YXJjc3RhcnQoJHYpIGV2ZW4gaWYgJGkgPT0gMAorICAgIHNldCB2YXJjY29tbWl0cygkdiwkYSkgW2xpbnNlcnQgJHZhcmNjb21taXRzKCR2LCRhKSAkaSAkaWRdCisgICAgbW9kaWZ5X2FyYyAkdiAkYSAkaQorICAgIGlmIHtbaW5mbyBleGlzdHMgdGFyZ2V0aWRdfSB7CisJaWYgeyFbY29tZXNfYmVmb3JlICR0YXJnZXRpZCAkcF19IHsKKwkgICAgaW5jciB0YXJnZXRyb3cKKwl9CisgICAgfQorICAgIHNldGNhbnZzY3JvbGwKKyAgICBkcmF3dmlzaWJsZQorfQorCitwcm9jIHJlbW92ZWZha2Vyb3cge2lkfSB7CisgICAgZ2xvYmFsIHZhcmNpZCB2YXJjY29tbWl0cyBwYXJlbnRzIGNoaWxkcmVuIGNvbW1pdGlkeAorICAgIGdsb2JhbCB2YXJjdG9rIHZ0b2ttb2QgY21pdGxpc3RlZCBjdXJyZW50aWQgc2VsZWN0ZWRsaW5lCisgICAgZ2xvYmFsIHRhcmdldGlkIGN1cnZpZXcgbnVtY29tbWl0cworCisgICAgc2V0IHYgJGN1cnZpZXcKKyAgICBpZiB7W2xsZW5ndGggJHBhcmVudHMoJHYsJGlkKV0gIT0gMX0geworCXB1dHMgIm9vcHM6IHJlbW92ZWZha2Vyb3cgW3Nob3J0aWRzICRpZF0gaGFzIFtsbGVuZ3RoICRwYXJlbnRzKCR2LCRpZCldIHBhcmVudHMiCisJcmV0dXJuCisgICAgfQorICAgIHNldCBwIFtsaW5kZXggJHBhcmVudHMoJHYsJGlkKSAwXQorICAgIHNldCBhICR2YXJjaWQoJHYsJGlkKQorICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkdmFyY2NvbW1pdHMoJHYsJGEpICRpZF0KKyAgICBpZiB7JGkgPCAwfSB7CisJcHV0cyAib29wczogcmVtb3ZlZmFrZXJvdyBjYW4ndCBmaW5kIFtzaG9ydGlkcyAkaWRdIG9uIGFyYyAkYSIKKwlyZXR1cm4KKyAgICB9CisgICAgdW5zZXQgdmFyY2lkKCR2LCRpZCkKKyAgICBzZXQgdmFyY2NvbW1pdHMoJHYsJGEpIFtscmVwbGFjZSAkdmFyY2NvbW1pdHMoJHYsJGEpICRpICRpXQorICAgIHVuc2V0IHBhcmVudHMoJHYsJGlkKQorICAgIHVuc2V0IGNoaWxkcmVuKCR2LCRpZCkKKyAgICB1bnNldCBjbWl0bGlzdGVkKCR2LCRpZCkKKyAgICBzZXQgbnVtY29tbWl0cyBbaW5jciBjb21taXRpZHgoJHYpIC0xXQorICAgIHNldCBqIFtsc2VhcmNoIC1leGFjdCAkY2hpbGRyZW4oJHYsJHApICRpZF0KKyAgICBpZiB7JGogPj0gMH0geworCXNldCBjaGlsZHJlbigkdiwkcCkgW2xyZXBsYWNlICRjaGlsZHJlbigkdiwkcCkgJGogJGpdCisgICAgfQorICAgIG1vZGlmeV9hcmMgJHYgJGEgJGkKKyAgICBpZiB7W2luZm8gZXhpc3QgY3VycmVudGlkXSAmJiAkaWQgZXEgJGN1cnJlbnRpZH0geworCXVuc2V0IGN1cnJlbnRpZAorCXNldCBzZWxlY3RlZGxpbmUge30KKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyB0YXJnZXRpZF0gJiYgJHRhcmdldGlkIGVxICRpZH0geworCXNldCB0YXJnZXRpZCAkcAorICAgIH0KKyAgICBzZXRjYW52c2Nyb2xsCisgICAgZHJhd3Zpc2libGUKK30KKworcHJvYyByZWFsX2NoaWxkcmVuIHt2cH0geworICAgIGdsb2JhbCBjaGlsZHJlbiBudWxsaWQgbnVsbGlkMgorCisgICAgc2V0IGtpZHMge30KKyAgICBmb3JlYWNoIGlkICRjaGlsZHJlbigkdnApIHsKKwlpZiB7JGlkIG5lICRudWxsaWQgJiYgJGlkIG5lICRudWxsaWQyfSB7CisJICAgIGxhcHBlbmQga2lkcyAkaWQKKwl9CisgICAgfQorICAgIHJldHVybiAka2lkcworfQorCitwcm9jIGZpcnN0X3JlYWxfY2hpbGQge3ZwfSB7CisgICAgZ2xvYmFsIGNoaWxkcmVuIG51bGxpZCBudWxsaWQyCisKKyAgICBmb3JlYWNoIGlkICRjaGlsZHJlbigkdnApIHsKKwlpZiB7JGlkIG5lICRudWxsaWQgJiYgJGlkIG5lICRudWxsaWQyfSB7CisJICAgIHJldHVybiAkaWQKKwl9CisgICAgfQorICAgIHJldHVybiB7fQorfQorCitwcm9jIGxhc3RfcmVhbF9jaGlsZCB7dnB9IHsKKyAgICBnbG9iYWwgY2hpbGRyZW4gbnVsbGlkIG51bGxpZDIKKworICAgIHNldCBraWRzICRjaGlsZHJlbigkdnApCisgICAgZm9yIHtzZXQgaSBbbGxlbmd0aCAka2lkc119IHtbaW5jciBpIC0xXSA+PSAwfSB7fSB7CisJc2V0IGlkIFtsaW5kZXggJGtpZHMgJGldCisJaWYgeyRpZCBuZSAkbnVsbGlkICYmICRpZCBuZSAkbnVsbGlkMn0geworCSAgICByZXR1cm4gJGlkCisJfQorICAgIH0KKyAgICByZXR1cm4ge30KK30KKworcHJvYyB2dG9rY21wIHt2IGEgYn0geworICAgIGdsb2JhbCB2YXJjdG9rIHZhcmNpZAorCisgICAgcmV0dXJuIFtzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkdmFyY2lkKCR2LCRhKV0gXAorCQlbbGluZGV4ICR2YXJjdG9rKCR2KSAkdmFyY2lkKCR2LCRiKV1dCit9CisKKyMgVGhpcyBhc3N1bWVzIHRoYXQgaWYgbGltIGlzIG5vdCBnaXZlbiwgdGhlIGNhbGxlciBoYXMgY2hlY2tlZCB0aGF0CisjIGFyYyBhJ3MgdG9rZW4gaXMgbGVzcyB0aGFuICR2dG9rbW9kKCR2KQorcHJvYyBtb2RpZnlfYXJjIHt2IGEge2xpbSB7fX19IHsKKyAgICBnbG9iYWwgdmFyY3RvayB2dG9rbW9kIHZhcmNtb2QgdmFyY3JvdyB2dXBwdHIgY3VydmlldyB2cm93bW9kIHZhcmNjb21taXRzCisKKyAgICBpZiB7JGxpbSBuZSB7fX0geworCXNldCBjIFtzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkYV0gJHZ0b2ttb2QoJHYpXQorCWlmIHskYyA+IDB9IHJldHVybgorCWlmIHskYyA9PSAwfSB7CisJICAgIHNldCByIFtsaW5kZXggJHZhcmNyb3coJHYpICRhXQorCSAgICBpZiB7JHIgbmUge30gJiYgJHZyb3dtb2QoJHYpIDw9ICRyICsgJGxpbX0gcmV0dXJuCisJfQorICAgIH0KKyAgICBzZXQgdnRva21vZCgkdikgW2xpbmRleCAkdmFyY3RvaygkdikgJGFdCisgICAgc2V0IHZhcmNtb2QoJHYpICRhCisgICAgaWYgeyR2ID09ICRjdXJ2aWV3fSB7CisJd2hpbGUgeyRhICE9IDAgJiYgW2xpbmRleCAkdmFyY3JvdygkdikgJGFdIGVxIHt9fSB7CisJICAgIHNldCBhIFtsaW5kZXggJHZ1cHB0cigkdikgJGFdCisJICAgIHNldCBsaW0ge30KKwl9CisJc2V0IHIgMAorCWlmIHskYSAhPSAwfSB7CisJICAgIGlmIHskbGltIGVxIHt9fSB7CisJCXNldCBsaW0gW2xsZW5ndGggJHZhcmNjb21taXRzKCR2LCRhKV0KKwkgICAgfQorCSAgICBzZXQgciBbZXhwciB7W2xpbmRleCAkdmFyY3JvdygkdikgJGFdICsgJGxpbX1dCisJfQorCXNldCB2cm93bW9kKCR2KSAkcgorCXVuZG9sYXlvdXQgJHIKKyAgICB9Cit9CisKK3Byb2MgdXBkYXRlX2FyY3Jvd3Mge3Z9IHsKKyAgICBnbG9iYWwgdnRva21vZCB2YXJjbW9kIHZyb3dtb2QgdmFyY3JvdyBjb21taXRpZHggY3VycmVudGlkIHNlbGVjdGVkbGluZQorICAgIGdsb2JhbCB2YXJjaWQgdnJvd251bSB2YXJjb3JkZXIgdmFyY2l4IHZhcmNjb21taXRzCisgICAgZ2xvYmFsIHZ1cHB0ciB2ZG93bnB0ciB2bGVmdHB0ciB2YXJjdG9rCisgICAgZ2xvYmFsIGRpc3BsYXlvcmRlciBwYXJlbnRsaXN0IGN1cnZpZXcgY2FjaGVkX2NvbW1pdHJvdworCisgICAgaWYgeyR2cm93bW9kKCR2KSA9PSAkY29tbWl0aWR4KCR2KX0gcmV0dXJuCisgICAgaWYgeyR2ID09ICRjdXJ2aWV3fSB7CisJaWYge1tsbGVuZ3RoICRkaXNwbGF5b3JkZXJdID4gJHZyb3dtb2QoJHYpfSB7CisJICAgIHNldCBkaXNwbGF5b3JkZXIgW2xyYW5nZSAkZGlzcGxheW9yZGVyIDAgW2V4cHIgeyR2cm93bW9kKCR2KSAtIDF9XV0KKwkgICAgc2V0IHBhcmVudGxpc3QgW2xyYW5nZSAkcGFyZW50bGlzdCAwIFtleHByIHskdnJvd21vZCgkdikgLSAxfV1dCisJfQorCXVuc2V0IC1ub2NvbXBsYWluIGNhY2hlZF9jb21taXRyb3cKKyAgICB9CisgICAgc2V0IG5hcmN0b3QgW2V4cHIge1tsbGVuZ3RoICR2YXJjdG9rKCR2KV0gLSAxfV0KKyAgICBzZXQgYSAkdmFyY21vZCgkdikKKyAgICB3aGlsZSB7JGEgIT0gMCAmJiBbbGluZGV4ICR2YXJjaXgoJHYpICRhXSBlcSB7fX0geworCSMgZ28gdXAgdGhlIHRyZWUgdW50aWwgd2UgZmluZCBzb21ldGhpbmcgdGhhdCBoYXMgYSByb3cgbnVtYmVyLAorCSMgb3Igd2UgZ2V0IHRvIGEgc2VlZAorCXNldCBhIFtsaW5kZXggJHZ1cHB0cigkdikgJGFdCisgICAgfQorICAgIGlmIHskYSA9PSAwfSB7CisJc2V0IGEgW2xpbmRleCAkdmRvd25wdHIoJHYpIDBdCisJaWYgeyRhID09IDB9IHJldHVybgorCXNldCB2cm93bnVtKCR2KSB7MH0KKwlzZXQgdmFyY29yZGVyKCR2KSBbbGlzdCAkYV0KKwlsc2V0IHZhcmNpeCgkdikgJGEgMAorCWxzZXQgdmFyY3JvdygkdikgJGEgMAorCXNldCBhcmNuIDAKKwlzZXQgcm93IDAKKyAgICB9IGVsc2UgeworCXNldCBhcmNuIFtsaW5kZXggJHZhcmNpeCgkdikgJGFdCisJaWYge1tsbGVuZ3RoICR2cm93bnVtKCR2KV0gPiAkYXJjbiArIDF9IHsKKwkgICAgc2V0IHZyb3dudW0oJHYpIFtscmFuZ2UgJHZyb3dudW0oJHYpIDAgJGFyY25dCisJICAgIHNldCB2YXJjb3JkZXIoJHYpIFtscmFuZ2UgJHZhcmNvcmRlcigkdikgMCAkYXJjbl0KKwl9CisJc2V0IHJvdyBbbGluZGV4ICR2YXJjcm93KCR2KSAkYV0KKyAgICB9CisgICAgd2hpbGUgezF9IHsKKwlzZXQgcCAkYQorCWluY3Igcm93IFtsbGVuZ3RoICR2YXJjY29tbWl0cygkdiwkYSldCisJIyBnbyBkb3duIGlmIHBvc3NpYmxlCisJc2V0IGIgW2xpbmRleCAkdmRvd25wdHIoJHYpICRhXQorCWlmIHskYiA9PSAwfSB7CisJICAgICMgaWYgbm90LCBnbyBsZWZ0LCBvciBnbyB1cCB1bnRpbCB3ZSBjYW4gZ28gbGVmdAorCSAgICB3aGlsZSB7JGEgIT0gMH0geworCQlzZXQgYiBbbGluZGV4ICR2bGVmdHB0cigkdikgJGFdCisJCWlmIHskYiAhPSAwfSBicmVhaworCQlzZXQgYSBbbGluZGV4ICR2dXBwdHIoJHYpICRhXQorCSAgICB9CisJICAgIGlmIHskYSA9PSAwfSBicmVhaworCX0KKwlzZXQgYSAkYgorCWluY3IgYXJjbgorCWxhcHBlbmQgdnJvd251bSgkdikgJHJvdworCWxhcHBlbmQgdmFyY29yZGVyKCR2KSAkYQorCWxzZXQgdmFyY2l4KCR2KSAkYSAkYXJjbgorCWxzZXQgdmFyY3JvdygkdikgJGEgJHJvdworICAgIH0KKyAgICBzZXQgdnRva21vZCgkdikgW2xpbmRleCAkdmFyY3RvaygkdikgJHBdCisgICAgc2V0IHZhcmNtb2QoJHYpICRwCisgICAgc2V0IHZyb3dtb2QoJHYpICRyb3cKKyAgICBpZiB7W2luZm8gZXhpc3RzIGN1cnJlbnRpZF19IHsKKwlzZXQgc2VsZWN0ZWRsaW5lIFtyb3dvZmNvbW1pdCAkY3VycmVudGlkXQorICAgIH0KK30KKworIyBUZXN0IHdoZXRoZXIgdmlldyAkdiBjb250YWlucyBjb21taXQgJGlkCitwcm9jIGNvbW1pdGludmlldyB7aWQgdn0geworICAgIGdsb2JhbCB2YXJjaWQKKworICAgIHJldHVybiBbaW5mbyBleGlzdHMgdmFyY2lkKCR2LCRpZCldCit9CisKKyMgUmV0dXJuIHRoZSByb3cgbnVtYmVyIGZvciBjb21taXQgJGlkIGluIHRoZSBjdXJyZW50IHZpZXcKK3Byb2Mgcm93b2Zjb21taXQge2lkfSB7CisgICAgZ2xvYmFsIHZhcmNpZCB2YXJjY29tbWl0cyB2YXJjcm93IGN1cnZpZXcgY2FjaGVkX2NvbW1pdHJvdworICAgIGdsb2JhbCB2YXJjdG9rIHZ0b2ttb2QKKworICAgIHNldCB2ICRjdXJ2aWV3CisgICAgaWYgeyFbaW5mbyBleGlzdHMgdmFyY2lkKCR2LCRpZCldfSB7CisJcHV0cyAib29wcyByb3dvZmNvbW1pdCBubyBhcmMgZm9yIFtzaG9ydGlkcyAkaWRdIgorCXJldHVybiB7fQorICAgIH0KKyAgICBzZXQgYSAkdmFyY2lkKCR2LCRpZCkKKyAgICBpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICRhXSAkdnRva21vZCgkdildID49IDB9IHsKKwl1cGRhdGVfYXJjcm93cyAkdgorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF9jb21taXRyb3coJGlkKV19IHsKKwlyZXR1cm4gJGNhY2hlZF9jb21taXRyb3coJGlkKQorICAgIH0KKyAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHZhcmNjb21taXRzKCR2LCRhKSAkaWRdCisgICAgaWYgeyRpIDwgMH0geworCXB1dHMgIm9vcHMgZGlkbid0IGZpbmQgY29tbWl0IFtzaG9ydGlkcyAkaWRdIGluIGFyYyAkYSIKKwlyZXR1cm4ge30KKyAgICB9CisgICAgaW5jciBpIFtsaW5kZXggJHZhcmNyb3coJHYpICRhXQorICAgIHNldCBjYWNoZWRfY29tbWl0cm93KCRpZCkgJGkKKyAgICByZXR1cm4gJGkKK30KKworIyBSZXR1cm5zIDEgaWYgYSBpcyBvbiBhbiBlYXJsaWVyIHJvdyB0aGFuIGIsIG90aGVyd2lzZSAwCitwcm9jIGNvbWVzX2JlZm9yZSB7YSBifSB7CisgICAgZ2xvYmFsIHZhcmNpZCB2YXJjdG9rIGN1cnZpZXcKKworICAgIHNldCB2ICRjdXJ2aWV3CisgICAgaWYgeyRhIGVxICRiIHx8ICFbaW5mbyBleGlzdHMgdmFyY2lkKCR2LCRhKV0gfHwgXAorCSAgICAhW2luZm8gZXhpc3RzIHZhcmNpZCgkdiwkYildfSB7CisJcmV0dXJuIDAKKyAgICB9CisgICAgaWYgeyR2YXJjaWQoJHYsJGEpICE9ICR2YXJjaWQoJHYsJGIpfSB7CisJcmV0dXJuIFtleHByIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJHZhcmNpZCgkdiwkYSldIFwKKwkJCSAgIFtsaW5kZXggJHZhcmN0b2soJHYpICR2YXJjaWQoJHYsJGIpXV0gPCAwfV0KKyAgICB9CisgICAgcmV0dXJuIFtleHByIHtbcm93b2Zjb21taXQgJGFdIDwgW3Jvd29mY29tbWl0ICRiXX1dCit9CisKK3Byb2MgYnNlYXJjaCB7bCBlbHR9IHsKKyAgICBpZiB7W2xsZW5ndGggJGxdID09IDAgfHwgJGVsdCA8PSBbbGluZGV4ICRsIDBdfSB7CisJcmV0dXJuIDAKKyAgICB9CisgICAgc2V0IGxvIDAKKyAgICBzZXQgaGkgW2xsZW5ndGggJGxdCisgICAgd2hpbGUgeyRoaSAtICRsbyA+IDF9IHsKKwlzZXQgbWlkIFtleHByIHtpbnQoKCRsbyArICRoaSkgLyAyKX1dCisJc2V0IHQgW2xpbmRleCAkbCAkbWlkXQorCWlmIHskZWx0IDwgJHR9IHsKKwkgICAgc2V0IGhpICRtaWQKKwl9IGVsc2VpZiB7JGVsdCA+ICR0fSB7CisJICAgIHNldCBsbyAkbWlkCisJfSBlbHNlIHsKKwkgICAgcmV0dXJuICRtaWQKKwl9CisgICAgfQorICAgIHJldHVybiAkbG8KK30KKworIyBNYWtlIHN1cmUgcm93cyAkc3RhcnQuLiRlbmQtMSBhcmUgdmFsaWQgaW4gZGlzcGxheW9yZGVyIGFuZCBwYXJlbnRsaXN0Citwcm9jIG1ha2VfZGlzcG9yZGVyIHtzdGFydCBlbmR9IHsKKyAgICBnbG9iYWwgdnJvd251bSBjdXJ2aWV3IGNvbW1pdGlkeCBkaXNwbGF5b3JkZXIgcGFyZW50bGlzdAorICAgIGdsb2JhbCB2YXJjY29tbWl0cyB2YXJjb3JkZXIgcGFyZW50cyB2cm93bW9kIHZhcmNyb3cKKyAgICBnbG9iYWwgZF92YWxpZF9zdGFydCBkX3ZhbGlkX2VuZAorCisgICAgaWYgeyRlbmQgPiAkdnJvd21vZCgkY3Vydmlldyl9IHsKKwl1cGRhdGVfYXJjcm93cyAkY3VydmlldworICAgIH0KKyAgICBzZXQgYWkgW2JzZWFyY2ggJHZyb3dudW0oJGN1cnZpZXcpICRzdGFydF0KKyAgICBzZXQgc3RhcnQgW2xpbmRleCAkdnJvd251bSgkY3VydmlldykgJGFpXQorICAgIHNldCBuYXJjIFtsbGVuZ3RoICR2cm93bnVtKCRjdXJ2aWV3KV0KKyAgICBmb3Ige3NldCByICRzdGFydH0geyRhaSA8ICRuYXJjICYmICRyIDwgJGVuZH0ge2luY3IgYWl9IHsKKwlzZXQgYSBbbGluZGV4ICR2YXJjb3JkZXIoJGN1cnZpZXcpICRhaV0KKwlzZXQgbCBbbGxlbmd0aCAkZGlzcGxheW9yZGVyXQorCXNldCBhbCBbbGxlbmd0aCAkdmFyY2NvbW1pdHMoJGN1cnZpZXcsJGEpXQorCWlmIHskbCA8ICRyICsgJGFsfSB7CisJICAgIGlmIHskbCA8ICRyfSB7CisJCXNldCBwYWQgW250aW1lcyBbZXhwciB7JHIgLSAkbH1dIHt9XQorCQlzZXQgZGlzcGxheW9yZGVyIFtjb25jYXQgJGRpc3BsYXlvcmRlciAkcGFkXQorCQlzZXQgcGFyZW50bGlzdCBbY29uY2F0ICRwYXJlbnRsaXN0ICRwYWRdCisJICAgIH0gZWxzZWlmIHskbCA+ICRyfSB7CisJCXNldCBkaXNwbGF5b3JkZXIgW2xyYW5nZSAkZGlzcGxheW9yZGVyIDAgW2V4cHIgeyRyIC0gMX1dXQorCQlzZXQgcGFyZW50bGlzdCBbbHJhbmdlICRwYXJlbnRsaXN0IDAgW2V4cHIgeyRyIC0gMX1dXQorCSAgICB9CisJICAgIGZvcmVhY2ggaWQgJHZhcmNjb21taXRzKCRjdXJ2aWV3LCRhKSB7CisJCWxhcHBlbmQgZGlzcGxheW9yZGVyICRpZAorCQlsYXBwZW5kIHBhcmVudGxpc3QgJHBhcmVudHMoJGN1cnZpZXcsJGlkKQorCSAgICB9CisJfSBlbHNlaWYge1tsaW5kZXggJGRpc3BsYXlvcmRlciBbZXhwciB7JHIgKyAkYWwgLSAxfV1dIGVxIHt9fSB7CisJICAgIHNldCBpICRyCisJICAgIGZvcmVhY2ggaWQgJHZhcmNjb21taXRzKCRjdXJ2aWV3LCRhKSB7CisJCWxzZXQgZGlzcGxheW9yZGVyICRpICRpZAorCQlsc2V0IHBhcmVudGxpc3QgJGkgJHBhcmVudHMoJGN1cnZpZXcsJGlkKQorCQlpbmNyIGkKKwkgICAgfQorCX0KKwlpbmNyIHIgJGFsCisgICAgfQorfQorCitwcm9jIGNvbW1pdG9ucm93IHtyb3d9IHsKKyAgICBnbG9iYWwgZGlzcGxheW9yZGVyCisKKyAgICBzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCisgICAgaWYgeyRpZCBlcSB7fX0geworCW1ha2VfZGlzcG9yZGVyICRyb3cgW2V4cHIgeyRyb3cgKyAxfV0KKwlzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCisgICAgfQorICAgIHJldHVybiAkaWQKK30KKworcHJvYyBjbG9zZXZhcmNzIHt2fSB7CisgICAgZ2xvYmFsIHZhcmN0b2sgdmFyY2NvbW1pdHMgdmFyY2lkIHBhcmVudHMgY2hpbGRyZW4KKyAgICBnbG9iYWwgY21pdGxpc3RlZCBjb21taXRpZHggdnRva21vZCBjdXJ2aWV3IG51bWNvbW1pdHMKKworICAgIHNldCBtaXNzaW5nX3BhcmVudHMgMAorICAgIHNldCBzY3JpcHRzIHt9CisgICAgc2V0IG5hcmNzIFtsbGVuZ3RoICR2YXJjdG9rKCR2KV0KKyAgICBmb3Ige3NldCBhIDF9IHskYSA8ICRuYXJjc30ge2luY3IgYX0geworCXNldCBpZCBbbGluZGV4ICR2YXJjY29tbWl0cygkdiwkYSkgZW5kXQorCWZvcmVhY2ggcCAkcGFyZW50cygkdiwkaWQpIHsKKwkgICAgaWYge1tpbmZvIGV4aXN0cyB2YXJjaWQoJHYsJHApXX0gY29udGludWUKKwkgICAgIyBhZGQgcCBhcyBhIG5ldyBjb21taXQKKwkgICAgaW5jciBtaXNzaW5nX3BhcmVudHMKKwkgICAgc2V0IGNtaXRsaXN0ZWQoJHYsJHApIDAKKwkgICAgc2V0IHBhcmVudHMoJHYsJHApIHt9CisJICAgIGlmIHtbbGxlbmd0aCAkY2hpbGRyZW4oJHYsJHApXSA9PSAxICYmCisJCVtsbGVuZ3RoICRwYXJlbnRzKCR2LCRpZCldID09IDF9IHsKKwkJc2V0IGIgJGEKKwkgICAgfSBlbHNlIHsKKwkJc2V0IGIgW25ld3ZhcmMgJHYgJHBdCisJICAgIH0KKwkgICAgc2V0IHZhcmNpZCgkdiwkcCkgJGIKKwkgICAgaWYge1tzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkYl0gJHZ0b2ttb2QoJHYpXSA8IDB9IHsKKwkJbW9kaWZ5X2FyYyAkdiAkYgorCSAgICB9CisJICAgIGxhcHBlbmQgdmFyY2NvbW1pdHMoJHYsJGIpICRwCisJICAgIGluY3IgY29tbWl0aWR4KCR2KQorCSAgICBpZiB7JHYgPT0gJGN1cnZpZXd9IHsKKwkJc2V0IG51bWNvbW1pdHMgJGNvbW1pdGlkeCgkdikKKwkgICAgfQorCSAgICBzZXQgc2NyaXB0cyBbY2hlY2tfaW50ZXJlc3QgJHAgJHNjcmlwdHNdCisJfQorICAgIH0KKyAgICBpZiB7JG1pc3NpbmdfcGFyZW50cyA+IDB9IHsKKwlmb3JlYWNoIHMgJHNjcmlwdHMgeworCSAgICBldmFsICRzCisJfQorICAgIH0KK30KKworIyBVc2UgJHJ3aWQgYXMgYSBzdWJzdGl0dXRlIGZvciAkaWQsIGkuZS4gcmVwYXJlbnQgJGlkJ3MgY2hpbGRyZW4gdG8gJHJ3aWQKKyMgQXNzdW1lcyB3ZSBhbHJlYWR5IGhhdmUgYW4gYXJjIGZvciAkcndpZC4KK3Byb2MgcmV3cml0ZV9jb21taXQge3YgaWQgcndpZH0geworICAgIGdsb2JhbCBjaGlsZHJlbiBwYXJlbnRzIHZhcmNpZCB2YXJjdG9rIHZ0b2ttb2QgdmFyY2NvbW1pdHMKKworICAgIGZvcmVhY2ggY2ggJGNoaWxkcmVuKCR2LCRpZCkgeworCSMgbWFrZSAkcndpZCBiZSAkY2gncyBwYXJlbnQgaW4gcGxhY2Ugb2YgJGlkCisJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRwYXJlbnRzKCR2LCRjaCkgJGlkXQorCWlmIHskaSA8IDB9IHsKKwkgICAgcHV0cyAib29wcyByZXdyaXRlX2NvbW1pdCBkaWRuJ3QgZmluZCAkaWQgaW4gcGFyZW50IGxpc3QgZm9yICRjaCIKKwl9CisJc2V0IHBhcmVudHMoJHYsJGNoKSBbbHJlcGxhY2UgJHBhcmVudHMoJHYsJGNoKSAkaSAkaSAkcndpZF0KKwkjIGFkZCAkY2ggdG8gJHJ3aWQncyBjaGlsZHJlbiBhbmQgc29ydCB0aGUgbGlzdCBpZiBuZWNlc3NhcnkKKwlpZiB7W2xsZW5ndGggW2xhcHBlbmQgY2hpbGRyZW4oJHYsJHJ3aWQpICRjaF1dID4gMX0geworCSAgICBzZXQgY2hpbGRyZW4oJHYsJHJ3aWQpIFtsc29ydCAtY29tbWFuZCBbbGlzdCB2dG9rY21wICR2XSBcCisJCQkJCSRjaGlsZHJlbigkdiwkcndpZCldCisJfQorCSMgZml4IHRoZSBncmFwaCBhZnRlciBqb2luaW5nICRpZCB0byAkcndpZAorCXNldCBhICR2YXJjaWQoJHYsJGNoKQorCWZpeF9yZXZlcnNhbCAkcndpZCAkYSAkdgorCSMgcGFyZW50bGlzdCBpcyB3cm9uZyBmb3IgdGhlIGxhc3QgZWxlbWVudCBvZiBhcmMgJGEKKwkjIGV2ZW4gaWYgZGlzcGxheW9yZGVyIGlzIHJpZ2h0LCBoZW5jZSB0aGUgM3JkIGFyZyBoZXJlCisJbW9kaWZ5X2FyYyAkdiAkYSBbZXhwciB7W2xsZW5ndGggJHZhcmNjb21taXRzKCR2LCRhKV0gLSAxfV0KKyAgICB9Cit9CisKKyMgTWVjaGFuaXNtIGZvciByZWdpc3RlcmluZyBhIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgd2hlbiB3ZSBjb21lCisjIGFjcm9zcyBhIHBhcnRpY3VsYXIgY29tbWl0LiAgVG8gaGFuZGxlIHRoZSBjYXNlIHdoZW4gb25seSB0aGUKKyMgcHJlZml4IG9mIHRoZSBjb21taXQgaXMga25vd24sIHRoZSBjb21taXRpbnRlcmVzdCBhcnJheSBpcyBub3cKKyMgaW5kZXhlZCBieSB0aGUgZmlyc3QgNCBjaGFyYWN0ZXJzIG9mIHRoZSBJRC4gIEVhY2ggZWxlbWVudCBpcyBhCisjIGxpc3Qgb2YgaWQsIGNtZCBwYWlycy4KK3Byb2MgaW50ZXJlc3RlZGluIHtpZCBjbWR9IHsKKyAgICBnbG9iYWwgY29tbWl0aW50ZXJlc3QKKworICAgIGxhcHBlbmQgY29tbWl0aW50ZXJlc3QoW3N0cmluZyByYW5nZSAkaWQgMCAzXSkgJGlkICRjbWQKK30KKworcHJvYyBjaGVja19pbnRlcmVzdCB7aWQgc2NyaXB0c30geworICAgIGdsb2JhbCBjb21taXRpbnRlcmVzdAorCisgICAgc2V0IHByZWZpeCBbc3RyaW5nIHJhbmdlICRpZCAwIDNdCisgICAgaWYge1tpbmZvIGV4aXN0cyBjb21taXRpbnRlcmVzdCgkcHJlZml4KV19IHsKKwlzZXQgbmV3bGlzdCB7fQorCWZvcmVhY2gge2kgc2NyaXB0fSAkY29tbWl0aW50ZXJlc3QoJHByZWZpeCkgeworCSAgICBpZiB7W3N0cmluZyBtYXRjaCAiJGkqIiAkaWRdfSB7CisJCWxhcHBlbmQgc2NyaXB0cyBbc3RyaW5nIG1hcCBbbGlzdCAiJUkiICRpZCAiJVAiICRpXSAkc2NyaXB0XQorCSAgICB9IGVsc2UgeworCQlsYXBwZW5kIG5ld2xpc3QgJGkgJHNjcmlwdAorCSAgICB9CisJfQorCWlmIHskbmV3bGlzdCBuZSB7fX0geworCSAgICBzZXQgY29tbWl0aW50ZXJlc3QoJHByZWZpeCkgJG5ld2xpc3QKKwl9IGVsc2UgeworCSAgICB1bnNldCBjb21taXRpbnRlcmVzdCgkcHJlZml4KQorCX0KKyAgICB9CisgICAgcmV0dXJuICRzY3JpcHRzCit9CisKK3Byb2MgZ2V0Y29tbWl0bGluZXMge2ZkIGluc3QgdmlldyB1cGRhdGluZ30gIHsKKyAgICBnbG9iYWwgY21pdGxpc3RlZCBsZWZ0b3ZlcgorICAgIGdsb2JhbCBjb21taXRpZHggY29tbWl0ZGF0YSB2ZGF0ZW1vZGUKKyAgICBnbG9iYWwgcGFyZW50cyBjaGlsZHJlbiBjdXJ2aWV3IGhsdmlldworICAgIGdsb2JhbCBpZHBlbmRpbmcgb3JkZXJ0b2sKKyAgICBnbG9iYWwgdmFyY2NvbW1pdHMgdmFyY2lkIHZhcmN0b2sgdnRva21vZCB2ZmlsZWxpbWl0IHZzaG9ydGlkcworCisgICAgc2V0IHN0dWZmIFtyZWFkICRmZCA1MDAwMDBdCisgICAgIyBnaXQgbG9nIGRvZXNuJ3QgdGVybWluYXRlIHRoZSBsYXN0IGNvbW1pdCB3aXRoIGEgbnVsbC4uLgorICAgIGlmIHskc3R1ZmYgPT0ge30gJiYgJGxlZnRvdmVyKCRpbnN0KSBuZSB7fSAmJiBbZW9mICRmZF19IHsKKwlzZXQgc3R1ZmYgIlwwIgorICAgIH0KKyAgICBpZiB7JHN0dWZmID09IHt9fSB7CisJaWYgeyFbZW9mICRmZF19IHsKKwkgICAgcmV0dXJuIDEKKwl9CisJZ2xvYmFsIGNvbW1mZCB2aWV3Y29tcGxldGUgdmlld2FjdGl2ZSB2aWV3bmFtZQorCWdsb2JhbCB2aWV3aW5zdGFuY2VzCisJdW5zZXQgY29tbWZkKCRpbnN0KQorCXNldCBpIFtsc2VhcmNoIC1leGFjdCAkdmlld2luc3RhbmNlcygkdmlldykgJGluc3RdCisJaWYgeyRpID49IDB9IHsKKwkgICAgc2V0IHZpZXdpbnN0YW5jZXMoJHZpZXcpIFtscmVwbGFjZSAkdmlld2luc3RhbmNlcygkdmlldykgJGkgJGldCisJfQorCSMgc2V0IGl0IGJsb2NraW5nIHNvIHdlIHdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIHRlcm1pbmF0ZQorCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAxCisJaWYge1tjYXRjaCB7Y2xvc2UgJGZkfSBlcnJdfSB7CisJICAgIHNldCBmdiB7fQorCSAgICBpZiB7JHZpZXcgIT0gJGN1cnZpZXd9IHsKKwkJc2V0IGZ2ICIgZm9yIHRoZSBcIiR2aWV3bmFtZSgkdmlldylcIiB2aWV3IgorCSAgICB9CisJICAgIGlmIHtbc3RyaW5nIHJhbmdlICRlcnIgMCA0XSA9PSAidXNhZ2UifSB7CisJCXNldCBlcnIgIkdpdGs6IGVycm9yIHJlYWRpbmcgY29tbWl0cyRmdjpcCisJCQliYWQgYXJndW1lbnRzIHRvIGdpdCBsb2cuIgorCQlpZiB7JHZpZXduYW1lKCR2aWV3KSBlcSBbbWMgIkNvbW1hbmQgbGluZSJdfSB7CisJCSAgICBhcHBlbmQgZXJyIFwKKwkJCSIgIChOb3RlOiBhcmd1bWVudHMgdG8gZ2l0ayBhcmUgcGFzc2VkIHRvIGdpdCBsb2dcCisJCQkgdG8gYWxsb3cgc2VsZWN0aW9uIG9mIGNvbW1pdHMgdG8gYmUgZGlzcGxheWVkLikiCisJCX0KKwkgICAgfSBlbHNlIHsKKwkJc2V0IGVyciAiRXJyb3IgcmVhZGluZyBjb21taXRzJGZ2OiAkZXJyIgorCSAgICB9CisJICAgIGVycm9yX3BvcHVwICRlcnIKKwl9CisJaWYge1tpbmNyIHZpZXdhY3RpdmUoJHZpZXcpIC0xXSA8PSAwfSB7CisJICAgIHNldCB2aWV3Y29tcGxldGUoJHZpZXcpIDEKKwkgICAgIyBDaGVjayBpZiB3ZSBoYXZlIHNlZW4gYW55IGlkcyBsaXN0ZWQgYXMgcGFyZW50cyB0aGF0IGhhdmVuJ3QKKwkgICAgIyBhcHBlYXJlZCBpbiB0aGUgbGlzdAorCSAgICBjbG9zZXZhcmNzICR2aWV3CisJICAgIG5vdGJ1c3kgJHZpZXcKKwl9CisJaWYgeyR2aWV3ID09ICRjdXJ2aWV3fSB7CisJICAgIHJ1biBjaGV3Y29tbWl0cworCX0KKwlyZXR1cm4gMAorICAgIH0KKyAgICBzZXQgc3RhcnQgMAorICAgIHNldCBnb3Rzb21lIDAKKyAgICBzZXQgc2NyaXB0cyB7fQorICAgIHdoaWxlIDEgeworCXNldCBpIFtzdHJpbmcgZmlyc3QgIlwwIiAkc3R1ZmYgJHN0YXJ0XQorCWlmIHskaSA8IDB9IHsKKwkgICAgYXBwZW5kIGxlZnRvdmVyKCRpbnN0KSBbc3RyaW5nIHJhbmdlICRzdHVmZiAkc3RhcnQgZW5kXQorCSAgICBicmVhaworCX0KKwlpZiB7JHN0YXJ0ID09IDB9IHsKKwkgICAgc2V0IGNtaXQgJGxlZnRvdmVyKCRpbnN0KQorCSAgICBhcHBlbmQgY21pdCBbc3RyaW5nIHJhbmdlICRzdHVmZiAwIFtleHByIHskaSAtIDF9XV0KKwkgICAgc2V0IGxlZnRvdmVyKCRpbnN0KSB7fQorCX0gZWxzZSB7CisJICAgIHNldCBjbWl0IFtzdHJpbmcgcmFuZ2UgJHN0dWZmICRzdGFydCBbZXhwciB7JGkgLSAxfV1dCisJfQorCXNldCBzdGFydCBbZXhwciB7JGkgKyAxfV0KKwlzZXQgaiBbc3RyaW5nIGZpcnN0ICJcbiIgJGNtaXRdCisJc2V0IG9rIDAKKwlzZXQgbGlzdGVkIDEKKwlpZiB7JGogPj0gMCAmJiBbc3RyaW5nIG1hdGNoICJjb21taXQgKiIgJGNtaXRdfSB7CisJICAgIHNldCBpZHMgW3N0cmluZyByYW5nZSAkY21pdCA3IFtleHByIHskaiAtIDF9XV0KKwkgICAgaWYge1tzdHJpbmcgbWF0Y2gge1stXjw+XSp9ICRpZHNdfSB7CisJCXN3aXRjaCAtLSBbc3RyaW5nIGluZGV4ICRpZHMgMF0geworCQkgICAgIi0iIHtzZXQgbGlzdGVkIDB9CisJCSAgICAiXiIge3NldCBsaXN0ZWQgMn0KKwkJICAgICI8IiB7c2V0IGxpc3RlZCAzfQorCQkgICAgIj4iIHtzZXQgbGlzdGVkIDR9CisJCX0KKwkJc2V0IGlkcyBbc3RyaW5nIHJhbmdlICRpZHMgMSBlbmRdCisJICAgIH0KKwkgICAgc2V0IG9rIDEKKwkgICAgZm9yZWFjaCBpZCAkaWRzIHsKKwkJaWYge1tzdHJpbmcgbGVuZ3RoICRpZF0gIT0gNDB9IHsKKwkJICAgIHNldCBvayAwCisJCSAgICBicmVhaworCQl9CisJICAgIH0KKwl9CisJaWYgeyEkb2t9IHsKKwkgICAgc2V0IHNob3J0Y21pdCAkY21pdAorCSAgICBpZiB7W3N0cmluZyBsZW5ndGggJHNob3J0Y21pdF0gPiA4MH0geworCQlzZXQgc2hvcnRjbWl0ICJbc3RyaW5nIHJhbmdlICRzaG9ydGNtaXQgMCA4MF0uLi4iCisJICAgIH0KKwkgICAgZXJyb3JfcG9wdXAgIlttYyAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6Il0geyRzaG9ydGNtaXR9IgorCSAgICBleGl0IDEKKwl9CisJc2V0IGlkIFtsaW5kZXggJGlkcyAwXQorCXNldCB2aWQgJHZpZXcsJGlkCisKKwlsYXBwZW5kIHZzaG9ydGlkcygkdmlldyxbc3RyaW5nIHJhbmdlICRpZCAwIDNdKSAkaWQKKworCWlmIHshJGxpc3RlZCAmJiAkdXBkYXRpbmcgJiYgIVtpbmZvIGV4aXN0cyB2YXJjaWQoJHZpZCldICYmCisJICAgICR2ZmlsZWxpbWl0KCR2aWV3KSBuZSB7fX0geworCSAgICAjIGdpdCBsb2cgZG9lc24ndCByZXdyaXRlIHBhcmVudHMgZm9yIHVubGlzdGVkIGNvbW1pdHMKKwkgICAgIyB3aGVuIGRvaW5nIHBhdGggbGltaXRpbmcsIHNvIHdvcmsgYXJvdW5kIHRoYXQgaGVyZQorCSAgICAjIGJ5IHdvcmtpbmcgb3V0IHRoZSByZXdyaXR0ZW4gcGFyZW50IHdpdGggZ2l0IHJldi1saXN0CisJICAgICMgYW5kIGlmIHdlIGFscmVhZHkga25vdyBhYm91dCBpdCwgdXNpbmcgdGhlIHJld3JpdHRlbgorCSAgICAjIHBhcmVudCBhcyBhIHN1YnN0aXR1dGUgcGFyZW50IGZvciAkaWQncyBjaGlsZHJlbi4KKwkgICAgaWYgeyFbY2F0Y2ggeworCQlzZXQgcndpZCBbZXhlYyBnaXQgcmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS1tYXgtY291bnQ9MSBcCisJCQkgICAgICAkaWQgLS0gJHZmaWxlbGltaXQoJHZpZXcpXQorCSAgICB9XX0geworCQlpZiB7JHJ3aWQgbmUge30gJiYgW2luZm8gZXhpc3RzIHZhcmNpZCgkdmlldywkcndpZCldfSB7CisJCSAgICAjIHVzZSAkcndpZCBpbiBwbGFjZSBvZiAkaWQKKwkJICAgIHJld3JpdGVfY29tbWl0ICR2aWV3ICRpZCAkcndpZAorCQkgICAgY29udGludWUKKwkJfQorCSAgICB9CisJfQorCisJc2V0IGEgMAorCWlmIHtbaW5mbyBleGlzdHMgdmFyY2lkKCR2aWQpXX0geworCSAgICBpZiB7JGNtaXRsaXN0ZWQoJHZpZCkgfHwgISRsaXN0ZWR9IGNvbnRpbnVlCisJICAgIHNldCBhICR2YXJjaWQoJHZpZCkKKwl9CisJaWYgeyRsaXN0ZWR9IHsKKwkgICAgc2V0IG9sZHMgW2xyYW5nZSAkaWRzIDEgZW5kXQorCX0gZWxzZSB7CisJICAgIHNldCBvbGRzIHt9CisJfQorCXNldCBjb21taXRkYXRhKCRpZCkgW3N0cmluZyByYW5nZSAkY21pdCBbZXhwciB7JGogKyAxfV0gZW5kXQorCXNldCBjbWl0bGlzdGVkKCR2aWQpICRsaXN0ZWQKKwlzZXQgcGFyZW50cygkdmlkKSAkb2xkcworCWlmIHshW2luZm8gZXhpc3RzIGNoaWxkcmVuKCR2aWQpXX0geworCSAgICBzZXQgY2hpbGRyZW4oJHZpZCkge30KKwl9IGVsc2VpZiB7JGEgPT0gMCAmJiBbbGxlbmd0aCAkY2hpbGRyZW4oJHZpZCldID09IDF9IHsKKwkgICAgc2V0IGsgW2xpbmRleCAkY2hpbGRyZW4oJHZpZCkgMF0KKwkgICAgaWYge1tsbGVuZ3RoICRwYXJlbnRzKCR2aWV3LCRrKV0gPT0gMSAmJgorCQkoISR2ZGF0ZW1vZGUoJHZpZXcpIHx8CisJCSAkdmFyY2lkKCR2aWV3LCRrKSA9PSBbbGxlbmd0aCAkdmFyY3RvaygkdmlldyldIC0gMSl9IHsKKwkJc2V0IGEgJHZhcmNpZCgkdmlldywkaykKKwkgICAgfQorCX0KKwlpZiB7JGEgPT0gMH0geworCSAgICAjIG5ldyBhcmMKKwkgICAgc2V0IGEgW25ld3ZhcmMgJHZpZXcgJGlkXQorCX0KKwlpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHZpZXcpICRhXSAkdnRva21vZCgkdmlldyldIDwgMH0geworCSAgICBtb2RpZnlfYXJjICR2aWV3ICRhCisJfQorCWlmIHshW2luZm8gZXhpc3RzIHZhcmNpZCgkdmlkKV19IHsKKwkgICAgc2V0IHZhcmNpZCgkdmlkKSAkYQorCSAgICBsYXBwZW5kIHZhcmNjb21taXRzKCR2aWV3LCRhKSAkaWQKKwkgICAgaW5jciBjb21taXRpZHgoJHZpZXcpCisJfQorCisJc2V0IGkgMAorCWZvcmVhY2ggcCAkb2xkcyB7CisJICAgIGlmIHskaSA9PSAwIHx8IFtsc2VhcmNoIC1leGFjdCAkb2xkcyAkcF0gPj0gJGl9IHsKKwkJc2V0IHZwICR2aWV3LCRwCisJCWlmIHtbbGxlbmd0aCBbbGFwcGVuZCBjaGlsZHJlbigkdnApICRpZF1dID4gMSAmJgorCQkgICAgW3Z0b2tjbXAgJHZpZXcgW2xpbmRleCAkY2hpbGRyZW4oJHZwKSBlbmQtMV0gJGlkXSA+IDB9IHsKKwkJICAgIHNldCBjaGlsZHJlbigkdnApIFtsc29ydCAtY29tbWFuZCBbbGlzdCB2dG9rY21wICR2aWV3XSBcCisJCQkJCSAgICRjaGlsZHJlbigkdnApXQorCQkgICAgdW5zZXQgLW5vY29tcGxhaW4gb3JkZXJ0b2sKKwkJfQorCQlpZiB7W2luZm8gZXhpc3RzIHZhcmNpZCgkdmlldywkcCldfSB7CisJCSAgICBmaXhfcmV2ZXJzYWwgJHAgJGEgJHZpZXcKKwkJfQorCSAgICB9CisJICAgIGluY3IgaQorCX0KKworCXNldCBzY3JpcHRzIFtjaGVja19pbnRlcmVzdCAkaWQgJHNjcmlwdHNdCisJc2V0IGdvdHNvbWUgMQorICAgIH0KKyAgICBpZiB7JGdvdHNvbWV9IHsKKwlnbG9iYWwgbnVtY29tbWl0cyBobHZpZXcKKworCWlmIHskdmlldyA9PSAkY3Vydmlld30geworCSAgICBzZXQgbnVtY29tbWl0cyAkY29tbWl0aWR4KCR2aWV3KQorCSAgICBydW4gY2hld2NvbW1pdHMKKwl9CisJaWYge1tpbmZvIGV4aXN0cyBobHZpZXddICYmICR2aWV3ID09ICRobHZpZXd9IHsKKwkgICAgIyB3ZSBuZXZlciBhY3R1YWxseSBnZXQgaGVyZS4uLgorCSAgICBydW4gdmhpZ2hsaWdodG1vcmUKKwl9CisJZm9yZWFjaCBzICRzY3JpcHRzIHsKKwkgICAgZXZhbCAkcworCX0KKyAgICB9CisgICAgcmV0dXJuIDIKK30KKworcHJvYyBjaGV3Y29tbWl0cyB7fSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgaGx2aWV3IHZpZXdjb21wbGV0ZQorICAgIGdsb2JhbCBwZW5kaW5nX3NlbGVjdAorCisgICAgbGF5b3V0bW9yZQorICAgIGlmIHskdmlld2NvbXBsZXRlKCRjdXJ2aWV3KX0geworCWdsb2JhbCBjb21taXRpZHggdmFyY3RvaworCWdsb2JhbCBudW1jb21taXRzIHN0YXJ0bXNlY3MKKworCWlmIHtbaW5mbyBleGlzdHMgcGVuZGluZ19zZWxlY3RdfSB7CisJICAgIHVwZGF0ZQorCSAgICByZXNldF9wZW5kaW5nX3NlbGVjdCB7fQorCisJICAgIGlmIHtbY29tbWl0aW52aWV3ICRwZW5kaW5nX3NlbGVjdCAkY3Vydmlld119IHsKKwkJc2VsZWN0bGluZSBbcm93b2Zjb21taXQgJHBlbmRpbmdfc2VsZWN0XSAxCisJICAgIH0gZWxzZSB7CisJCXNldCByb3cgW2ZpcnN0X3JlYWxfcm93XQorCQlzZWxlY3RsaW5lICRyb3cgMQorCSAgICB9CisJfQorCWlmIHskY29tbWl0aWR4KCRjdXJ2aWV3KSA+IDB9IHsKKwkgICAgI3NldCBtcyBbZXhwciB7W2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXSAtICRzdGFydG1zZWNzfV0KKwkgICAgI3B1dHMgIm92ZXJhbGwgJG1zIG1zIGZvciAkbnVtY29tbWl0cyBjb21taXRzIgorCSAgICAjcHV0cyAiW2xsZW5ndGggJHZhcmN0b2soJHZpZXcpXSBhcmNzLCAkY29tbWl0aWR4KCR2aWV3KSBjb21taXRzIgorCX0gZWxzZSB7CisJICAgIHNob3dfc3RhdHVzIFttYyAiTm8gY29tbWl0cyBzZWxlY3RlZCJdCisJfQorCW5vdGJ1c3kgbGF5b3V0CisgICAgfQorICAgIHJldHVybiAwCit9CisKK3Byb2MgZG9fcmVhZGNvbW1pdCB7aWR9IHsKKyAgICBnbG9iYWwgdGNsZW5jb2RpbmcKKworICAgICMgSW52b2tlIGdpdC1sb2cgdG8gaGFuZGxlIGF1dG9tYXRpYyBlbmNvZGluZyBjb252ZXJzaW9uCisgICAgc2V0IGZkIFtvcGVuIFtjb25jYXQgfCBnaXQgbG9nIC0tbm8tY29sb3IgLS1wcmV0dHk9cmF3IC0xICRpZF0gcl0KKyAgICAjIFJlYWQgdGhlIHJlc3VsdHMgdXNpbmcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZworICAgIGZjb25maWd1cmUgJGZkIC10cmFuc2xhdGlvbiBsZiAtZW9mY2hhciB7fQorICAgIGlmIHskdGNsZW5jb2RpbmcgIT0ge319IHsKKwlmY29uZmlndXJlICRmZCAtZW5jb2RpbmcgJHRjbGVuY29kaW5nCisgICAgfQorICAgIHNldCBjb250ZW50cyBbcmVhZCAkZmRdCisgICAgY2xvc2UgJGZkCisgICAgIyBSZW1vdmUgdGhlIGhlYWRpbmcgbGluZQorICAgIHJlZ3N1YiB7XmNvbW1pdCBbMC05YS1mXStcbn0gJGNvbnRlbnRzIHt9IGNvbnRlbnRzCisKKyAgICByZXR1cm4gJGNvbnRlbnRzCit9CisKK3Byb2MgcmVhZGNvbW1pdCB7aWR9IHsKKyAgICBpZiB7W2NhdGNoIHtzZXQgY29udGVudHMgW2RvX3JlYWRjb21taXQgJGlkXX1dfSByZXR1cm4KKyAgICBwYXJzZWNvbW1pdCAkaWQgJGNvbnRlbnRzIDEKK30KKworcHJvYyBwYXJzZWNvbW1pdCB7aWQgY29udGVudHMgbGlzdGVkfSB7CisgICAgZ2xvYmFsIGNvbW1pdGluZm8KKworICAgIHNldCBpbmhkciAxCisgICAgc2V0IGNvbW1lbnQge30KKyAgICBzZXQgaGVhZGxpbmUge30KKyAgICBzZXQgYXVuYW1lIHt9CisgICAgc2V0IGF1ZGF0ZSB7fQorICAgIHNldCBjb21uYW1lIHt9CisgICAgc2V0IGNvbWRhdGUge30KKyAgICBzZXQgaGRyZW5kIFtzdHJpbmcgZmlyc3QgIlxuXG4iICRjb250ZW50c10KKyAgICBpZiB7JGhkcmVuZCA8IDB9IHsKKwkjIHNob3VsZCBuZXZlciBoYXBwZW4uLi4KKwlzZXQgaGRyZW5kIFtzdHJpbmcgbGVuZ3RoICRjb250ZW50c10KKyAgICB9CisgICAgc2V0IGhlYWRlciBbc3RyaW5nIHJhbmdlICRjb250ZW50cyAwIFtleHByIHskaGRyZW5kIC0gMX1dXQorICAgIHNldCBjb21tZW50IFtzdHJpbmcgcmFuZ2UgJGNvbnRlbnRzIFtleHByIHskaGRyZW5kICsgMn1dIGVuZF0KKyAgICBmb3JlYWNoIGxpbmUgW3NwbGl0ICRoZWFkZXIgIlxuIl0geworCXNldCBsaW5lIFtzcGxpdCAkbGluZSAiICJdCisJc2V0IHRhZyBbbGluZGV4ICRsaW5lIDBdCisJaWYgeyR0YWcgPT0gImF1dGhvciJ9IHsKKwkgICAgc2V0IGF1ZGF0ZSBbbHJhbmdlICRsaW5lIGVuZC0xIGVuZF0KKwkgICAgc2V0IGF1bmFtZSBbam9pbiBbbHJhbmdlICRsaW5lIDEgZW5kLTJdICIgIl0KKwl9IGVsc2VpZiB7JHRhZyA9PSAiY29tbWl0dGVyIn0geworCSAgICBzZXQgY29tZGF0ZSBbbHJhbmdlICRsaW5lIGVuZC0xIGVuZF0KKwkgICAgc2V0IGNvbW5hbWUgW2pvaW4gW2xyYW5nZSAkbGluZSAxIGVuZC0yXSAiICJdCisJfQorICAgIH0KKyAgICBzZXQgaGVhZGxpbmUge30KKyAgICAjIHRha2UgdGhlIGZpcnN0IG5vbi1ibGFuayBsaW5lIG9mIHRoZSBjb21tZW50IGFzIHRoZSBoZWFkbGluZQorICAgIHNldCBoZWFkbGluZSBbc3RyaW5nIHRyaW1sZWZ0ICRjb21tZW50XQorICAgIHNldCBpIFtzdHJpbmcgZmlyc3QgIlxuIiAkaGVhZGxpbmVdCisgICAgaWYgeyRpID49IDB9IHsKKwlzZXQgaGVhZGxpbmUgW3N0cmluZyByYW5nZSAkaGVhZGxpbmUgMCAkaV0KKyAgICB9CisgICAgc2V0IGhlYWRsaW5lIFtzdHJpbmcgdHJpbXJpZ2h0ICRoZWFkbGluZV0KKyAgICBzZXQgaSBbc3RyaW5nIGZpcnN0ICJcciIgJGhlYWRsaW5lXQorICAgIGlmIHskaSA+PSAwfSB7CisJc2V0IGhlYWRsaW5lIFtzdHJpbmcgdHJpbXJpZ2h0IFtzdHJpbmcgcmFuZ2UgJGhlYWRsaW5lIDAgJGldXQorICAgIH0KKyAgICBpZiB7ISRsaXN0ZWR9IHsKKwkjIGdpdCBsb2cgaW5kZW50cyB0aGUgY29tbWVudCBieSA0IHNwYWNlczsKKwkjIGlmIHdlIGdvdCB0aGlzIHZpYSBnaXQgY2F0LWZpbGUsIGFkZCB0aGUgaW5kZW50YXRpb24KKwlzZXQgbmV3Y29tbWVudCB7fQorCWZvcmVhY2ggbGluZSBbc3BsaXQgJGNvbW1lbnQgIlxuIl0geworCSAgICBhcHBlbmQgbmV3Y29tbWVudCAiICAgICIKKwkgICAgYXBwZW5kIG5ld2NvbW1lbnQgJGxpbmUKKwkgICAgYXBwZW5kIG5ld2NvbW1lbnQgIlxuIgorCX0KKwlzZXQgY29tbWVudCAkbmV3Y29tbWVudAorICAgIH0KKyAgICBzZXQgaGFzbm90ZSBbc3RyaW5nIGZpcnN0ICJcbk5vdGVzOlxuIiAkY29udGVudHNdCisgICAgc2V0IGRpZmYgIiIKKyAgICAjIElmIHRoZXJlIGlzIGRpZmYgb3V0cHV0IHNob3duIGluIHRoZSBnaXQtbG9nIHN0cmVhbSwgc3BsaXQgaXQKKyAgICAjIG91dC4gIEJ1dCBnZXQgcmlkIG9mIHRoZSBlbXB0eSBsaW5lIHRoYXQgYWx3YXlzIHByZWNlZGVzIHRoZQorICAgICMgZGlmZi4KKyAgICBzZXQgaSBbc3RyaW5nIGZpcnN0ICJcblxuZGlmZiIgJGNvbW1lbnRdCisgICAgaWYgeyRpID49IDB9IHsKKwlzZXQgZGlmZiBbc3RyaW5nIHJhbmdlICRjb21tZW50ICRpKzEgZW5kXQorCXNldCBjb21tZW50IFtzdHJpbmcgcmFuZ2UgJGNvbW1lbnQgMCAkaS0xXQorICAgIH0KKyAgICBzZXQgY29tbWl0aW5mbygkaWQpIFtsaXN0ICRoZWFkbGluZSAkYXVuYW1lICRhdWRhdGUgXAorCQkJICAgICAkY29tbmFtZSAkY29tZGF0ZSAkY29tbWVudCAkaGFzbm90ZSAkZGlmZl0KK30KKworcHJvYyBnZXRjb21taXQge2lkfSB7CisgICAgZ2xvYmFsIGNvbW1pdGRhdGEgY29tbWl0aW5mbworCisgICAgaWYge1tpbmZvIGV4aXN0cyBjb21taXRkYXRhKCRpZCldfSB7CisJcGFyc2Vjb21taXQgJGlkICRjb21taXRkYXRhKCRpZCkgMQorICAgIH0gZWxzZSB7CisJcmVhZGNvbW1pdCAkaWQKKwlpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRpZCldfSB7CisJICAgIHNldCBjb21taXRpbmZvKCRpZCkgW2xpc3QgW21jICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIl1dCisJfQorICAgIH0KKyAgICByZXR1cm4gMQorfQorCisjIEV4cGFuZCBhbiBhYmJyZXZpYXRlZCBjb21taXQgSUQgdG8gYSBsaXN0IG9mIGZ1bGwgNDAtY2hhciBJRHMgdGhhdCBtYXRjaAorIyBhbmQgYXJlIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgdmlldy4KKyMgVGhpcyBpcyBmYWlybHkgc2xvdy4uLgorcHJvYyBsb25naWQge3ByZWZpeH0geworICAgIGdsb2JhbCB2YXJjaWQgY3VydmlldyB2c2hvcnRpZHMKKworICAgIHNldCBpZHMge30KKyAgICBpZiB7W3N0cmluZyBsZW5ndGggJHByZWZpeF0gPj0gNH0geworCXNldCB2c2hvcnRpZCAkY3Vydmlldyxbc3RyaW5nIHJhbmdlICRwcmVmaXggMCAzXQorCWlmIHtbaW5mbyBleGlzdHMgdnNob3J0aWRzKCR2c2hvcnRpZCldfSB7CisJICAgIGZvcmVhY2ggaWQgJHZzaG9ydGlkcygkdnNob3J0aWQpIHsKKwkJaWYge1tzdHJpbmcgbWF0Y2ggIiRwcmVmaXgqIiAkaWRdfSB7CisJCSAgICBpZiB7W2xzZWFyY2ggLWV4YWN0ICRpZHMgJGlkXSA8IDB9IHsKKwkJCWxhcHBlbmQgaWRzICRpZAorCQkJaWYge1tsbGVuZ3RoICRpZHNdID49IDJ9IGJyZWFrCisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCWZvcmVhY2ggbWF0Y2ggW2FycmF5IG5hbWVzIHZhcmNpZCAiJGN1cnZpZXcsJHByZWZpeCoiXSB7CisJICAgIGxhcHBlbmQgaWRzIFtsaW5kZXggW3NwbGl0ICRtYXRjaCAiLCJdIDFdCisJICAgIGlmIHtbbGxlbmd0aCAkaWRzXSA+PSAyfSBicmVhaworCX0KKyAgICB9CisgICAgcmV0dXJuICRpZHMKK30KKworcHJvYyByZWFkcmVmcyB7fSB7CisgICAgZ2xvYmFsIHRhZ2lkcyBpZHRhZ3MgaGVhZGlkcyBpZGhlYWRzIHRhZ29iamlkCisgICAgZ2xvYmFsIG90aGVycmVmaWRzIGlkb3RoZXJyZWZzIG1haW5oZWFkIG1haW5oZWFkaWQKKyAgICBnbG9iYWwgc2VsZWN0aGVhZCBzZWxlY3RoZWFkaWQKKyAgICBnbG9iYWwgaGlkZXJlbW90ZXMKKworICAgIGZvcmVhY2ggdiB7dGFnaWRzIGlkdGFncyBoZWFkaWRzIGlkaGVhZHMgb3RoZXJyZWZpZHMgaWRvdGhlcnJlZnN9IHsKKwl1bnNldCAtbm9jb21wbGFpbiAkdgorICAgIH0KKyAgICBzZXQgcmVmZCBbb3BlbiBbbGlzdCB8IGdpdCBzaG93LXJlZiAtZF0gcl0KKyAgICB3aGlsZSB7W2dldHMgJHJlZmQgbGluZV0gPj0gMH0geworCWlmIHtbc3RyaW5nIGluZGV4ICRsaW5lIDQwXSBuZSAiICJ9IGNvbnRpbnVlCisJc2V0IGlkIFtzdHJpbmcgcmFuZ2UgJGxpbmUgMCAzOV0KKwlzZXQgcmVmIFtzdHJpbmcgcmFuZ2UgJGxpbmUgNDEgZW5kXQorCWlmIHshW3N0cmluZyBtYXRjaCAicmVmcy8qIiAkcmVmXX0gY29udGludWUKKwlzZXQgbmFtZSBbc3RyaW5nIHJhbmdlICRyZWYgNSBlbmRdCisJaWYge1tzdHJpbmcgbWF0Y2ggInJlbW90ZXMvKiIgJG5hbWVdfSB7CisJICAgIGlmIHshW3N0cmluZyBtYXRjaCAiKi9IRUFEIiAkbmFtZV0gJiYgISRoaWRlcmVtb3Rlc30geworCQlzZXQgaGVhZGlkcygkbmFtZSkgJGlkCisJCWxhcHBlbmQgaWRoZWFkcygkaWQpICRuYW1lCisJICAgIH0KKwl9IGVsc2VpZiB7W3N0cmluZyBtYXRjaCAiaGVhZHMvKiIgJG5hbWVdfSB7CisJICAgIHNldCBuYW1lIFtzdHJpbmcgcmFuZ2UgJG5hbWUgNiBlbmRdCisJICAgIHNldCBoZWFkaWRzKCRuYW1lKSAkaWQKKwkgICAgbGFwcGVuZCBpZGhlYWRzKCRpZCkgJG5hbWUKKwl9IGVsc2VpZiB7W3N0cmluZyBtYXRjaCAidGFncy8qIiAkbmFtZV19IHsKKwkgICAgIyB0aGlzIGxldHMgcmVmcy90YWdzL2Zvb157fSBvdmVyd3JpdGUgcmVmcy90YWdzL2ZvbywKKwkgICAgIyB3aGljaCBpcyB3aGF0IHdlIHdhbnQgc2luY2UgdGhlIGZvcm1lciBpcyB0aGUgY29tbWl0IElECisJICAgIHNldCBuYW1lIFtzdHJpbmcgcmFuZ2UgJG5hbWUgNSBlbmRdCisJICAgIGlmIHtbc3RyaW5nIG1hdGNoICIqXnt9IiAkbmFtZV19IHsKKwkJc2V0IG5hbWUgW3N0cmluZyByYW5nZSAkbmFtZSAwIGVuZC0zXQorCSAgICB9IGVsc2UgeworCQlzZXQgdGFnb2JqaWQoJG5hbWUpICRpZAorCSAgICB9CisJICAgIHNldCB0YWdpZHMoJG5hbWUpICRpZAorCSAgICBsYXBwZW5kIGlkdGFncygkaWQpICRuYW1lCisJfSBlbHNlIHsKKwkgICAgc2V0IG90aGVycmVmaWRzKCRuYW1lKSAkaWQKKwkgICAgbGFwcGVuZCBpZG90aGVycmVmcygkaWQpICRuYW1lCisJfQorICAgIH0KKyAgICBjYXRjaCB7Y2xvc2UgJHJlZmR9CisgICAgc2V0IG1haW5oZWFkIHt9CisgICAgc2V0IG1haW5oZWFkaWQge30KKyAgICBjYXRjaCB7CisJc2V0IG1haW5oZWFkaWQgW2V4ZWMgZ2l0IHJldi1wYXJzZSBIRUFEXQorCXNldCB0aGVoZWFkIFtleGVjIGdpdCBzeW1ib2xpYy1yZWYgSEVBRF0KKwlpZiB7W3N0cmluZyBtYXRjaCAicmVmcy9oZWFkcy8qIiAkdGhlaGVhZF19IHsKKwkgICAgc2V0IG1haW5oZWFkIFtzdHJpbmcgcmFuZ2UgJHRoZWhlYWQgMTEgZW5kXQorCX0KKyAgICB9CisgICAgc2V0IHNlbGVjdGhlYWRpZCB7fQorICAgIGlmIHskc2VsZWN0aGVhZCBuZSB7fX0geworCWNhdGNoIHsKKwkgICAgc2V0IHNlbGVjdGhlYWRpZCBbZXhlYyBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRzZWxlY3RoZWFkXQorCX0KKyAgICB9Cit9CisKKyMgc2tpcCBvdmVyIGZha2UgY29tbWl0cworcHJvYyBmaXJzdF9yZWFsX3JvdyB7fSB7CisgICAgZ2xvYmFsIG51bGxpZCBudWxsaWQyIG51bWNvbW1pdHMKKworICAgIGZvciB7c2V0IHJvdyAwfSB7JHJvdyA8ICRudW1jb21taXRzfSB7aW5jciByb3d9IHsKKwlzZXQgaWQgW2NvbW1pdG9ucm93ICRyb3ddCisJaWYgeyRpZCBuZSAkbnVsbGlkICYmICRpZCBuZSAkbnVsbGlkMn0geworCSAgICBicmVhaworCX0KKyAgICB9CisgICAgcmV0dXJuICRyb3cKK30KKworIyB1cGRhdGUgdGhpbmdzIGZvciBhIGhlYWQgbW92ZWQgdG8gYSBjaGlsZCBvZiBpdHMgcHJldmlvdXMgbG9jYXRpb24KK3Byb2MgbW92ZWhlYWQge2lkIG5hbWV9IHsKKyAgICBnbG9iYWwgaGVhZGlkcyBpZGhlYWRzCisKKyAgICByZW1vdmVoZWFkICRoZWFkaWRzKCRuYW1lKSAkbmFtZQorICAgIHNldCBoZWFkaWRzKCRuYW1lKSAkaWQKKyAgICBsYXBwZW5kIGlkaGVhZHMoJGlkKSAkbmFtZQorfQorCisjIHVwZGF0ZSB0aGluZ3Mgd2hlbiBhIGhlYWQgaGFzIGJlZW4gcmVtb3ZlZAorcHJvYyByZW1vdmVoZWFkIHtpZCBuYW1lfSB7CisgICAgZ2xvYmFsIGhlYWRpZHMgaWRoZWFkcworCisgICAgaWYgeyRpZGhlYWRzKCRpZCkgZXEgJG5hbWV9IHsKKwl1bnNldCBpZGhlYWRzKCRpZCkKKyAgICB9IGVsc2UgeworCXNldCBpIFtsc2VhcmNoIC1leGFjdCAkaWRoZWFkcygkaWQpICRuYW1lXQorCWlmIHskaSA+PSAwfSB7CisJICAgIHNldCBpZGhlYWRzKCRpZCkgW2xyZXBsYWNlICRpZGhlYWRzKCRpZCkgJGkgJGldCisJfQorICAgIH0KKyAgICB1bnNldCBoZWFkaWRzKCRuYW1lKQorfQorCitwcm9jIHR0a190b3BsZXZlbCB7dyBhcmdzfSB7CisgICAgZ2xvYmFsIHVzZV90dGsKKyAgICBldmFsIFtsaW5zZXJ0ICRhcmdzIDAgOjp0b3BsZXZlbCAkd10KKyAgICBpZiB7JHVzZV90dGt9IHsKKyAgICAgICAgcGxhY2UgW3R0azo6ZnJhbWUgJHcuX3RvcGxldmVsX2JhY2tncm91bmRdIC14IDAgLXkgMCAtcmVsd2lkdGggMSAtcmVsaGVpZ2h0IDEKKyAgICB9CisgICAgcmV0dXJuICR3Cit9CisKK3Byb2MgbWFrZV90cmFuc2llbnQge3dpbmRvdyBvcmlnaW59IHsKKyAgICBnbG9iYWwgaGF2ZV90azg1CisKKyAgICAjIEluIE1hY09TIFRrIDguNCB0cmFuc2llbnQgYXBwZWFycyB0byB3b3JrIGJ5IHNldHRpbmcKKyAgICAjIG92ZXJyaWRlcmVkaXJlY3QsIHdoaWNoIGlzIHV0dGVybHkgdXNlbGVzcywgc2luY2UgdGhlCisgICAgIyB3aW5kb3dzIGdldCBubyBib3JkZXIsIGFuZCBhcmUgbm90IGV2ZW4ga2VwdCBhYm92ZQorICAgICMgdGhlIHBhcmVudC4KKyAgICBpZiB7ISRoYXZlX3RrODUgJiYgW3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEge2FxdWF9fSByZXR1cm4KKworICAgIHdtIHRyYW5zaWVudCAkd2luZG93ICRvcmlnaW4KKworICAgICMgV2luZG93cyBmYWlscyB0byBwbGFjZSB0cmFuc2llbnQgd2luZG93cyBub3JtYWxseSwgc28KKyAgICAjIHNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gY2VudGVyIHRoZW0gb24gdGhlIHBhcmVudC4KKyAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEge3dpbjMyfX0geworCWFmdGVyIGlkbGUgW2xpc3QgdGs6OlBsYWNlV2luZG93ICR3aW5kb3cgd2lkZ2V0ICRvcmlnaW5dCisgICAgfQorfQorCitwcm9jIHNob3dfZXJyb3Ige3cgdG9wIG1zZ30geworICAgIGdsb2JhbCBOUworICAgIGlmIHshW2luZm8gZXhpc3RzIE5TXX0ge3NldCBOUyAiIn0KKyAgICBpZiB7W3dtIHN0YXRlICR0b3BdIGVxICJ3aXRoZHJhd24ifSB7IHdtIGRlaWNvbmlmeSAkdG9wIH0KKyAgICBtZXNzYWdlICR3Lm0gLXRleHQgJG1zZyAtanVzdGlmeSBjZW50ZXIgLWFzcGVjdCA0MDAKKyAgICBwYWNrICR3Lm0gLXNpZGUgdG9wIC1maWxsIHggLXBhZHggMjAgLXBhZHkgMjAKKyAgICAke05TfTo6YnV0dG9uICR3Lm9rIC1kZWZhdWx0IGFjdGl2ZSAtdGV4dCBbbWMgT0tdIC1jb21tYW5kICJkZXN0cm95ICR0b3AiCisgICAgcGFjayAkdy5vayAtc2lkZSBib3R0b20gLWZpbGwgeAorICAgIGJpbmQgJHRvcCA8VmlzaWJpbGl0eT4gImdyYWIgJHRvcDsgZm9jdXMgJHRvcCIKKyAgICBiaW5kICR0b3AgPEtleS1SZXR1cm4+ICJkZXN0cm95ICR0b3AiCisgICAgYmluZCAkdG9wIDxLZXktc3BhY2U+ICAiZGVzdHJveSAkdG9wIgorICAgIGJpbmQgJHRvcCA8S2V5LUVzY2FwZT4gImRlc3Ryb3kgJHRvcCIKKyAgICB0a3dhaXQgd2luZG93ICR0b3AKK30KKworcHJvYyBlcnJvcl9wb3B1cCB7bXNnIHtvd25lciAufX0geworICAgIGlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSAid2luMzIifSB7CisgICAgICAgIHRrX21lc3NhZ2VCb3ggLWljb24gZXJyb3IgLXR5cGUgb2sgLXRpdGxlIFt3bSB0aXRsZSAuXSBcCisgICAgICAgICAgICAtcGFyZW50ICRvd25lciAtbWVzc2FnZSAkbXNnCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IHcgLmVycm9yCisgICAgICAgIHR0a190b3BsZXZlbCAkdworICAgICAgICBtYWtlX3RyYW5zaWVudCAkdyAkb3duZXIKKyAgICAgICAgc2hvd19lcnJvciAkdyAkdyAkbXNnCisgICAgfQorfQorCitwcm9jIGNvbmZpcm1fcG9wdXAge21zZyB7b3duZXIgLn19IHsKKyAgICBnbG9iYWwgY29uZmlybV9vayBOUworICAgIHNldCBjb25maXJtX29rIDAKKyAgICBzZXQgdyAuY29uZmlybQorICAgIHR0a190b3BsZXZlbCAkdworICAgIG1ha2VfdHJhbnNpZW50ICR3ICRvd25lcgorICAgIG1lc3NhZ2UgJHcubSAtdGV4dCAkbXNnIC1qdXN0aWZ5IGNlbnRlciAtYXNwZWN0IDQwMAorICAgIHBhY2sgJHcubSAtc2lkZSB0b3AgLWZpbGwgeCAtcGFkeCAyMCAtcGFkeSAyMAorICAgICR7TlN9OjpidXR0b24gJHcub2sgLXRleHQgW21jIE9LXSAtY29tbWFuZCAic2V0IGNvbmZpcm1fb2sgMTsgZGVzdHJveSAkdyIKKyAgICBwYWNrICR3Lm9rIC1zaWRlIGxlZnQgLWZpbGwgeAorICAgICR7TlN9OjpidXR0b24gJHcuY2FuY2VsIC10ZXh0IFttYyBDYW5jZWxdIC1jb21tYW5kICJkZXN0cm95ICR3IgorICAgIHBhY2sgJHcuY2FuY2VsIC1zaWRlIHJpZ2h0IC1maWxsIHgKKyAgICBiaW5kICR3IDxWaXNpYmlsaXR5PiAiZ3JhYiAkdzsgZm9jdXMgJHciCisgICAgYmluZCAkdyA8S2V5LVJldHVybj4gInNldCBjb25maXJtX29rIDE7IGRlc3Ryb3kgJHciCisgICAgYmluZCAkdyA8S2V5LXNwYWNlPiAgInNldCBjb25maXJtX29rIDE7IGRlc3Ryb3kgJHciCisgICAgYmluZCAkdyA8S2V5LUVzY2FwZT4gImRlc3Ryb3kgJHciCisgICAgdGs6OlBsYWNlV2luZG93ICR3IHdpZGdldCAkb3duZXIKKyAgICB0a3dhaXQgd2luZG93ICR3CisgICAgcmV0dXJuICRjb25maXJtX29rCit9CisKK3Byb2Mgc2V0b3B0aW9ucyB7fSB7CisgICAgZ2xvYmFsIHVzZV90dGsKKworICAgIGlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBuZSAid2luMzIifSB7CisgICAgICAgIG9wdGlvbiBhZGQgKlBhbmVkd2luZG93LnNob3dIYW5kbGUgMSBzdGFydHVwRmlsZQorICAgICAgICBvcHRpb24gYWRkICpQYW5lZHdpbmRvdy5zYXNoUmVsaWVmIHJhaXNlZCBzdGFydHVwRmlsZQorICAgICAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gbmUgImFxdWEifSB7CisgICAgICAgICAgICBvcHRpb24gYWRkICpNZW51LmZvbnQgdWlmb250IHN0YXJ0dXBGaWxlCisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBvcHRpb24gYWRkICpNZW51LlRlYXJPZmYgMCBzdGFydHVwRmlsZQorICAgIH0KKyAgICBvcHRpb24gYWRkICpCdXR0b24uZm9udCB1aWZvbnQgc3RhcnR1cEZpbGUKKyAgICBvcHRpb24gYWRkICpDaGVja2J1dHRvbi5mb250IHVpZm9udCBzdGFydHVwRmlsZQorICAgIG9wdGlvbiBhZGQgKlJhZGlvYnV0dG9uLmZvbnQgdWlmb250IHN0YXJ0dXBGaWxlCisgICAgb3B0aW9uIGFkZCAqTWVudWJ1dHRvbi5mb250IHVpZm9udCBzdGFydHVwRmlsZQorICAgIG9wdGlvbiBhZGQgKkxhYmVsLmZvbnQgdWlmb250IHN0YXJ0dXBGaWxlCisgICAgb3B0aW9uIGFkZCAqTWVzc2FnZS5mb250IHVpZm9udCBzdGFydHVwRmlsZQorICAgIG9wdGlvbiBhZGQgKkVudHJ5LmZvbnQgdGV4dGZvbnQgc3RhcnR1cEZpbGUKKyAgICBvcHRpb24gYWRkICpUZXh0LmZvbnQgdGV4dGZvbnQgc3RhcnR1cEZpbGUKKyAgICBvcHRpb24gYWRkICpMYWJlbGZyYW1lLmZvbnQgdWlmb250IHN0YXJ0dXBGaWxlCisgICAgb3B0aW9uIGFkZCAqU3BpbmJveC5mb250IHRleHRmb250IHN0YXJ0dXBGaWxlCisgICAgb3B0aW9uIGFkZCAqTGlzdGJveC5mb250IG1haW5mb250IHN0YXJ0dXBGaWxlCit9CisKK3Byb2Mgc2V0dHRrc3R5bGUge30geworICAgIGV2YWwgZm9udCBjb25maWd1cmUgVGtEZWZhdWx0Rm9udCBbZm9udGZsYWdzIG1haW5mb250XQorICAgIGV2YWwgZm9udCBjb25maWd1cmUgVGtUZXh0Rm9udCBbZm9udGZsYWdzIHRleHRmb250XQorICAgIGV2YWwgZm9udCBjb25maWd1cmUgVGtIZWFkaW5nRm9udCBbZm9udGZsYWdzIG1haW5mb250XQorICAgIGV2YWwgZm9udCBjb25maWd1cmUgVGtDYXB0aW9uRm9udCBbZm9udGZsYWdzIG1haW5mb250XSAtd2VpZ2h0IGJvbGQKKyAgICBldmFsIGZvbnQgY29uZmlndXJlIFRrVG9vbHRpcEZvbnQgW2ZvbnRmbGFncyB1aWZvbnRdCisgICAgZXZhbCBmb250IGNvbmZpZ3VyZSBUa0ZpeGVkRm9udCAgIFtmb250ZmxhZ3MgdGV4dGZvbnRdCisgICAgZXZhbCBmb250IGNvbmZpZ3VyZSBUa0ljb25Gb250ICAgIFtmb250ZmxhZ3MgdWlmb250XQorICAgIGV2YWwgZm9udCBjb25maWd1cmUgVGtNZW51Rm9udCAgICBbZm9udGZsYWdzIHVpZm9udF0KKyAgICBldmFsIGZvbnQgY29uZmlndXJlIFRrU21hbGxDYXB0aW9uRm9udCBbZm9udGZsYWdzIHVpZm9udF0KK30KKworIyBNYWtlIGEgbWVudSBhbmQgc3VibWVudXMuCisjIG0gaXMgdGhlIHdpbmRvdyBuYW1lIGZvciB0aGUgbWVudSwgaXRlbXMgaXMgdGhlIGxpc3Qgb2YgbWVudSBpdGVtcyB0byBhZGQuCisjIEVhY2ggaXRlbSBpcyBhIGxpc3Qge21jIGxhYmVsIHR5cGUgZGVzY3JpcHRpb24gb3B0aW9ucy4uLn0KKyMgbWMgaXMgaWdub3JlZDsgaXQncyBzbyB3ZSBjYW4gcHV0IG1jIHRoZXJlIHRvIGFsZXJ0IHhnZXR0ZXh0CisjIGxhYmVsIGlzIHRoZSBzdHJpbmcgdGhhdCBhcHBlYXJzIGluIHRoZSBtZW51CisjIHR5cGUgaXMgY2FzY2FkZSwgY29tbWFuZCBvciByYWRpb2J1dHRvbiAoc2hvdWxkIGFkZCBjaGVja2J1dHRvbikKKyMgZGVzY3JpcHRpb24gZGVwZW5kcyBvbiB0eXBlOyBpdCdzIHRoZSBzdWJsaXN0IGZvciBjYXNjYWRlLCB0aGUKKyMgY29tbWFuZCB0byBpbnZva2UgZm9yIGNvbW1hbmQsIG9yIHt2YXJpYWJsZSB2YWx1ZX0gZm9yIHJhZGlvYnV0dG9uCitwcm9jIG1ha2VtZW51IHttIGl0ZW1zfSB7CisgICAgbWVudSAkbQorICAgIGlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSB7YXF1YX19IHsKKwlzZXQgTWV0YTEgQ21kCisgICAgfSBlbHNlIHsKKwlzZXQgTWV0YTEgQ3RybAorICAgIH0KKyAgICBmb3JlYWNoIGkgJGl0ZW1zIHsKKwlzZXQgbmFtZSBbbWMgW2xpbmRleCAkaSAxXV0KKwlzZXQgdHlwZSBbbGluZGV4ICRpIDJdCisJc2V0IHRoaW5nIFtsaW5kZXggJGkgM10KKwlzZXQgcGFyYW1zIFtsaXN0ICR0eXBlXQorCWlmIHskbmFtZSBuZSB7fX0geworCSAgICBzZXQgdSBbc3RyaW5nIGZpcnN0ICImIiBbc3RyaW5nIG1hcCB7JiYgeH0gJG5hbWVdXQorCSAgICBsYXBwZW5kIHBhcmFtcyAtbGFiZWwgW3N0cmluZyBtYXAgeyYmICYgJiB7fX0gJG5hbWVdCisJICAgIGlmIHskdSA+PSAwfSB7CisJCWxhcHBlbmQgcGFyYW1zIC11bmRlcmxpbmUgJHUKKwkgICAgfQorCX0KKwlzd2l0Y2ggLS0gJHR5cGUgeworCSAgICAiY2FzY2FkZSIgeworCQlzZXQgc3VibWVudSBbc3RyaW5nIHRvbG93ZXIgW3N0cmluZyBtYXAgeyYgIiJ9IFtsaW5kZXggJGkgMV1dXQorCQlsYXBwZW5kIHBhcmFtcyAtbWVudSAkbS4kc3VibWVudQorCSAgICB9CisJICAgICJjb21tYW5kIiB7CisJCWxhcHBlbmQgcGFyYW1zIC1jb21tYW5kICR0aGluZworCSAgICB9CisJICAgICJyYWRpb2J1dHRvbiIgeworCQlsYXBwZW5kIHBhcmFtcyAtdmFyaWFibGUgW2xpbmRleCAkdGhpbmcgMF0gXAorCQkgICAgLXZhbHVlIFtsaW5kZXggJHRoaW5nIDFdCisJICAgIH0KKwl9CisJc2V0IHRhaWwgW2xyYW5nZSAkaSA0IGVuZF0KKwlyZWdzdWIgLWFsbCB7XHlNZXRhMVx5fSAkdGFpbCAkTWV0YTEgdGFpbAorCWV2YWwgJG0gYWRkICRwYXJhbXMgJHRhaWwKKwlpZiB7JHR5cGUgZXEgImNhc2NhZGUifSB7CisJICAgIG1ha2VtZW51ICRtLiRzdWJtZW51ICR0aGluZworCX0KKyAgICB9Cit9CisKKyMgdHJhbnNsYXRlIHN0cmluZyBhbmQgcmVtb3ZlIGFtcGVyc2FuZHMKK3Byb2MgbWNhIHtzdHJ9IHsKKyAgICByZXR1cm4gW3N0cmluZyBtYXAgeyYmICYgJiB7fX0gW21jICRzdHJdXQorfQorCitwcm9jIGNsZWFyZHJvcHNlbCB7d30geworICAgICR3IHNlbGVjdGlvbiBjbGVhcgorfQorcHJvYyBtYWtlZHJvcGxpc3Qge3cgdmFybmFtZSBhcmdzfSB7CisgICAgZ2xvYmFsIHVzZV90dGsKKyAgICBpZiB7JHVzZV90dGt9IHsKKyAgICAgICAgc2V0IHdpZHRoIDAKKyAgICAgICAgZm9yZWFjaCBsYWJlbCAkYXJncyB7CisgICAgICAgICAgICBzZXQgY3ggW3N0cmluZyBsZW5ndGggJGxhYmVsXQorICAgICAgICAgICAgaWYgeyRjeCA+ICR3aWR0aH0ge3NldCB3aWR0aCAkY3h9CisgICAgICAgIH0KKwlzZXQgZ20gW3R0azo6Y29tYm9ib3ggJHcgLXdpZHRoICR3aWR0aCAtc3RhdGUgcmVhZG9ubHlcCisJCSAgICAtdGV4dHZhcmlhYmxlICR2YXJuYW1lIC12YWx1ZXMgJGFyZ3MgXAorCQkgICAgLWV4cG9ydHNlbGVjdGlvbiBmYWxzZV0KKwliaW5kICRnbSA8PENvbWJvYm94U2VsZWN0ZWQ+PiBbbGlzdCAkZ20gc2VsZWN0aW9uIGNsZWFyXQorICAgIH0gZWxzZSB7CisJc2V0IGdtIFtldmFsIFtsaW5zZXJ0ICRhcmdzIDAgdGtfb3B0aW9uTWVudSAkdyAkdmFybmFtZV1dCisgICAgfQorICAgIHJldHVybiAkZ20KK30KKworcHJvYyBtYWtld2luZG93IHt9IHsKKyAgICBnbG9iYWwgY2FudiBjYW52MiBjYW52MyBsaW5lc3BjIGNoYXJzcGMgY3RleHQgY2ZsaXN0IGNzY3JvbGwKKyAgICBnbG9iYWwgdGFic3RvcAorICAgIGdsb2JhbCBmaW5kdHlwZSBmaW5kdHlwZW1lbnUgZmluZGxvYyBmaW5kc3RyaW5nIGZzdHJpbmcgZ2VvbWV0cnkKKyAgICBnbG9iYWwgZW50cmllcyBzaGExZW50cnkgc2hhMXN0cmluZyBzaGExYnV0CisgICAgZ2xvYmFsIGRpZmZjb250ZXh0c3RyaW5nIGRpZmZjb250ZXh0CisgICAgZ2xvYmFsIGlnbm9yZXNwYWNlCisgICAgZ2xvYmFsIG1haW5jdXJzb3IgdGV4dGN1cnNvciBjdXJ0ZXh0Y3Vyc29yCisgICAgZ2xvYmFsIHJvd2N0eG1lbnUgZmFrZXJvd21lbnUgbWVyZ2VtYXggd3JhcGNvbW1lbnQKKyAgICBnbG9iYWwgaGlnaGxpZ2h0X2ZpbGVzIGdkdHR5cGUKKyAgICBnbG9iYWwgc2VhcmNoc3RyaW5nIHNzdHJpbmcKKyAgICBnbG9iYWwgYmdjb2xvciBmZ2NvbG9yIGJnbGlzdCBmZ2xpc3QgZGlmZmNvbG9ycyBzZWxlY3RiZ2NvbG9yCisgICAgZ2xvYmFsIHVpZmdjb2xvciB1aWZnZGlzYWJsZWRjb2xvcgorICAgIGdsb2JhbCBmaWxlc2VwYmdjb2xvciBmaWxlc2VwZmdjb2xvcgorICAgIGdsb2JhbCBtZXJnZWNvbG9ycyBmb3VuZGJnY29sb3IgY3VycmVudHNlYXJjaGhpdGJnY29sb3IKKyAgICBnbG9iYWwgaGVhZGN0eG1lbnUgcHJvZ3Jlc3NjYW52IHByb2dyZXNzaXRlbSBwcm9ncmVzc2Nvb3JkcyBzdGF0dXN3CisgICAgZ2xvYmFsIGZwcm9naXRlbSBmcHJvZ2Nvb3JkIGxhc3Rwcm9ndXBkYXRlIHByb2d1cGRhdGVwZW5kaW5nCisgICAgZ2xvYmFsIHJwcm9naXRlbSBycHJvZ2Nvb3JkIHJvd251bXNlbCBudW1jb21taXRzCisgICAgZ2xvYmFsIGhhdmVfdGs4NSB1c2VfdHRrIE5TCisgICAgZ2xvYmFsIGdpdF92ZXJzaW9uCisgICAgZ2xvYmFsIHdvcmRkaWZmCisKKyAgICAjIFRoZSAibWMiIGFyZ3VtZW50cyBoZXJlIGFyZSBwdXJlbHkgc28gdGhhdCB4Z2V0dGV4dAorICAgICMgc2VlcyB0aGUgZm9sbG93aW5nIHN0cmluZyBhcyBuZWVkaW5nIHRvIGJlIHRyYW5zbGF0ZWQKKyAgICBzZXQgZmlsZSB7CisJbWMgIiZGaWxlIiBjYXNjYWRlIHsKKwkgICAge21jICImVXBkYXRlIiBjb21tYW5kIHVwZGF0ZWNvbW1pdHMgLWFjY2VsZXJhdG9yIEY1fQorCSAgICB7bWMgIiZSZWxvYWQiIGNvbW1hbmQgcmVsb2FkY29tbWl0cyAtYWNjZWxlcmF0b3IgU2hpZnQtRjV9CisJICAgIHttYyAiUmVyZWFkIHJlJmZlcmVuY2VzIiBjb21tYW5kIHJlcmVhZHJlZnN9CisJICAgIHttYyAiJkxpc3QgcmVmZXJlbmNlcyIgY29tbWFuZCBzaG93cmVmcyAtYWNjZWxlcmF0b3IgRjJ9CisJICAgIHt4eCAiIiBzZXBhcmF0b3J9CisJICAgIHttYyAiU3RhcnQgZ2l0ICZndWkiIGNvbW1hbmQge2V4ZWMgZ2l0IGd1aSAmfX0KKwkgICAge3h4ICIiIHNlcGFyYXRvcn0KKwkgICAge21jICImUXVpdCIgY29tbWFuZCBkb3F1aXQgLWFjY2VsZXJhdG9yIE1ldGExLVF9CisJfX0KKyAgICBzZXQgZWRpdCB7CisJbWMgIiZFZGl0IiBjYXNjYWRlIHsKKwkgICAge21jICImUHJlZmVyZW5jZXMiIGNvbW1hbmQgZG9wcmVmc30KKwl9fQorICAgIHNldCB2aWV3IHsKKwltYyAiJlZpZXciIGNhc2NhZGUgeworCSAgICB7bWMgIiZOZXcgdmlldy4uLiIgY29tbWFuZCB7bmV3dmlldyAwfSAtYWNjZWxlcmF0b3IgU2hpZnQtRjR9CisJICAgIHttYyAiJkVkaXQgdmlldy4uLiIgY29tbWFuZCBlZGl0dmlldyAtc3RhdGUgZGlzYWJsZWQgLWFjY2VsZXJhdG9yIEY0fQorCSAgICB7bWMgIiZEZWxldGUgdmlldyIgY29tbWFuZCBkZWx2aWV3IC1zdGF0ZSBkaXNhYmxlZH0KKwkgICAge3h4ICIiIHNlcGFyYXRvcn0KKwkgICAge21jICImQWxsIGZpbGVzIiByYWRpb2J1dHRvbiB7c2VsZWN0ZWR2aWV3IDB9IC1jb21tYW5kIHtzaG93dmlldyAwfX0KKwl9fQorICAgIGlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBuZSAiYXF1YSJ9IHsKKwlzZXQgaGVscCB7CisJbWMgIiZIZWxwIiBjYXNjYWRlIHsKKwkgICAge21jICImQWJvdXQgZ2l0ayIgY29tbWFuZCBhYm91dH0KKwkgICAge21jICImS2V5IGJpbmRpbmdzIiBjb21tYW5kIGtleXN9CisJfX0KKwlzZXQgYmFyIFtsaXN0ICRmaWxlICRlZGl0ICR2aWV3ICRoZWxwXQorICAgIH0gZWxzZSB7CisJcHJvYyA6OnRrOjptYWM6OlNob3dQcmVmZXJlbmNlcyB7fSB7ZG9wcmVmc30KKwlwcm9jIDo6dGs6Om1hYzo6UXVpdCB7fSB7ZG9xdWl0fQorCWxzZXQgZmlsZSBlbmQgW2xyZXBsYWNlIFtsaW5kZXggJGZpbGUgZW5kXSBlbmQtMSBlbmRdCisJc2V0IGFwcGxlIHsKKwl4eCAiJkFwcGxlIiBjYXNjYWRlIHsKKwkgICAge21jICImQWJvdXQgZ2l0ayIgY29tbWFuZCBhYm91dH0KKwkgICAge3h4ICIiIHNlcGFyYXRvcn0KKwl9fQorCXNldCBoZWxwIHsKKwltYyAiJkhlbHAiIGNhc2NhZGUgeworCSAgICB7bWMgIiZLZXkgYmluZGluZ3MiIGNvbW1hbmQga2V5c30KKwl9fQorCXNldCBiYXIgW2xpc3QgJGFwcGxlICRmaWxlICR2aWV3ICRoZWxwXQorICAgIH0KKyAgICBtYWtlbWVudSAuYmFyICRiYXIKKyAgICAuIGNvbmZpZ3VyZSAtbWVudSAuYmFyCisKKyAgICBpZiB7JHVzZV90dGt9IHsKKyAgICAgICAgIyBjb3ZlciB0aGUgbm9uLXRoZW1lZCB0b3BsZXZlbCB3aXRoIGEgdGhlbWVkIGZyYW1lLgorICAgICAgICBwbGFjZSBbdHRrOjpmcmFtZSAuX21haW5fYmFja2dyb3VuZF0gLXggMCAteSAwIC1yZWx3aWR0aCAxIC1yZWxoZWlnaHQgMQorICAgIH0KKworICAgICMgdGhlIGd1aSBoYXMgdXBwZXIgYW5kIGxvd2VyIGhhbGYsIHBhcnRzIG9mIGEgcGFuZWQgd2luZG93LgorICAgICR7TlN9OjpwYW5lZHdpbmRvdyAuY3RvcCAtb3JpZW50IHZlcnRpY2FsCisKKyAgICAjIHBvc3NpYmx5IHVzZSBhc3N1bWVkIGdlb21ldHJ5CisgICAgaWYgeyFbaW5mbyBleGlzdHMgZ2VvbWV0cnkocHdzYXNoMCldfSB7CisgICAgICAgIHNldCBnZW9tZXRyeSh0b3BoZWlnaHQpIFtleHByIHsxNSAqICRsaW5lc3BjfV0KKyAgICAgICAgc2V0IGdlb21ldHJ5KHRvcHdpZHRoKSBbZXhwciB7ODAgKiAkY2hhcnNwY31dCisgICAgICAgIHNldCBnZW9tZXRyeShib3RoZWlnaHQpIFtleHByIHsxNSAqICRsaW5lc3BjfV0KKyAgICAgICAgc2V0IGdlb21ldHJ5KGJvdHdpZHRoKSBbZXhwciB7NTAgKiAkY2hhcnNwY31dCisgICAgICAgIHNldCBnZW9tZXRyeShwd3Nhc2gwKSBbbGlzdCBbZXhwciB7NDAgKiAkY2hhcnNwY31dIDJdCisgICAgICAgIHNldCBnZW9tZXRyeShwd3Nhc2gxKSBbbGlzdCBbZXhwciB7NjAgKiAkY2hhcnNwY31dIDJdCisgICAgfQorCisgICAgIyB0aGUgdXBwZXIgaGFsZiB3aWxsIGhhdmUgYSBwYW5lZCB3aW5kb3csIGEgc2Nyb2xsIGJhciB0byB0aGUgcmlnaHQsIGFuZCBzb21lIHN0dWZmIGJlbG93CisgICAgJHtOU306OmZyYW1lIC50ZiAtaGVpZ2h0ICRnZW9tZXRyeSh0b3BoZWlnaHQpIC13aWR0aCAkZ2VvbWV0cnkodG9wd2lkdGgpCisgICAgJHtOU306OmZyYW1lIC50Zi5oaXN0ZnJhbWUKKyAgICAke05TfTo6cGFuZWR3aW5kb3cgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IC1vcmllbnQgaG9yaXpvbnRhbAorICAgIGlmIHshJHVzZV90dGt9IHsKKwkudGYuaGlzdGZyYW1lLnB3Y2xpc3QgY29uZmlndXJlIC1zYXNocGFkIDAgLWhhbmRsZXNpemUgNAorICAgIH0KKworICAgICMgY3JlYXRlIHRocmVlIGNhbnZhc2VzCisgICAgc2V0IGNzY3JvbGwgLnRmLmhpc3RmcmFtZS5jc2IKKyAgICBzZXQgY2FudiAudGYuaGlzdGZyYW1lLnB3Y2xpc3QuY2FudgorICAgIGNhbnZhcyAkY2FudiBcCisJLXNlbGVjdGJhY2tncm91bmQgJHNlbGVjdGJnY29sb3IgXAorCS1iYWNrZ3JvdW5kICRiZ2NvbG9yIC1iZCAwIFwKKwkteXNjcm9sbGluY3IgJGxpbmVzcGMgLXlzY3JvbGxjb21tYW5kICJzY3JvbGxjYW52ICRjc2Nyb2xsIgorICAgIC50Zi5oaXN0ZnJhbWUucHdjbGlzdCBhZGQgJGNhbnYKKyAgICBzZXQgY2FudjIgLnRmLmhpc3RmcmFtZS5wd2NsaXN0LmNhbnYyCisgICAgY2FudmFzICRjYW52MiBcCisJLXNlbGVjdGJhY2tncm91bmQgJHNlbGVjdGJnY29sb3IgXAorCS1iYWNrZ3JvdW5kICRiZ2NvbG9yIC1iZCAwIC15c2Nyb2xsaW5jciAkbGluZXNwYworICAgIC50Zi5oaXN0ZnJhbWUucHdjbGlzdCBhZGQgJGNhbnYyCisgICAgc2V0IGNhbnYzIC50Zi5oaXN0ZnJhbWUucHdjbGlzdC5jYW52MworICAgIGNhbnZhcyAkY2FudjMgXAorCS1zZWxlY3RiYWNrZ3JvdW5kICRzZWxlY3RiZ2NvbG9yIFwKKwktYmFja2dyb3VuZCAkYmdjb2xvciAtYmQgMCAteXNjcm9sbGluY3IgJGxpbmVzcGMKKyAgICAudGYuaGlzdGZyYW1lLnB3Y2xpc3QgYWRkICRjYW52MworICAgIGlmIHskdXNlX3R0a30geworCWJpbmQgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IDxNYXA+IHsKKwkgICAgYmluZCAlVyA8TWFwPiB7fQorCSAgICAudGYuaGlzdGZyYW1lLnB3Y2xpc3Qgc2FzaHBvcyAxIFtsaW5kZXggJDo6Z2VvbWV0cnkocHdzYXNoMSkgMF0KKwkgICAgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2hwb3MgMCBbbGluZGV4ICQ6Omdlb21ldHJ5KHB3c2FzaDApIDBdCisJfQorICAgIH0gZWxzZSB7CisJZXZhbCAudGYuaGlzdGZyYW1lLnB3Y2xpc3Qgc2FzaCBwbGFjZSAwICRnZW9tZXRyeShwd3Nhc2gwKQorCWV2YWwgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2ggcGxhY2UgMSAkZ2VvbWV0cnkocHdzYXNoMSkKKyAgICB9CisKKyAgICAjIGEgc2Nyb2xsIGJhciB0byBydWxlIHRoZW0KKyAgICAke05TfTo6c2Nyb2xsYmFyICRjc2Nyb2xsIC1jb21tYW5kIHthbGxjYW52cyB5dmlld30KKyAgICBpZiB7ISR1c2VfdHRrfSB7JGNzY3JvbGwgY29uZmlndXJlIC1oaWdobGlnaHR0aGlja25lc3MgMH0KKyAgICBwYWNrICRjc2Nyb2xsIC1zaWRlIHJpZ2h0IC1maWxsIHkKKyAgICBiaW5kIC50Zi5oaXN0ZnJhbWUucHdjbGlzdCA8Q29uZmlndXJlPiB7cmVzaXplY2xpc3RwYW5lcyAlVyAld30KKyAgICBsYXBwZW5kIGJnbGlzdCAkY2FudiAkY2FudjIgJGNhbnYzCisgICAgcGFjayAudGYuaGlzdGZyYW1lLnB3Y2xpc3QgLWZpbGwgYm90aCAtZXhwYW5kIDEgLXNpZGUgbGVmdAorCisgICAgIyB3ZSBoYXZlIHR3byBidXR0b24gYmFycyBhdCBib3R0b20gb2YgdG9wIGZyYW1lLiBCYXIgMQorICAgICR7TlN9OjpmcmFtZSAudGYuYmFyCisgICAgJHtOU306OmZyYW1lIC50Zi5sYmFyIC1oZWlnaHQgMTUKKworICAgIHNldCBzaGExZW50cnkgLnRmLmJhci5zaGExCisgICAgc2V0IGVudHJpZXMgJHNoYTFlbnRyeQorICAgIHNldCBzaGExYnV0IC50Zi5iYXIuc2hhMWxhYmVsCisgICAgYnV0dG9uICRzaGExYnV0IC10ZXh0ICJbbWMgIlNIQTEgSUQ6Il0gIiAtc3RhdGUgZGlzYWJsZWQgLXJlbGllZiBmbGF0IFwKKwktY29tbWFuZCBnb3RvY29tbWl0IC13aWR0aCA4CisgICAgJHNoYTFidXQgY29uZiAtZGlzYWJsZWRmb3JlZ3JvdW5kIFskc2hhMWJ1dCBjZ2V0IC1mb3JlZ3JvdW5kXQorICAgIHBhY2sgLnRmLmJhci5zaGExbGFiZWwgLXNpZGUgbGVmdAorICAgICR7TlN9OjplbnRyeSAkc2hhMWVudHJ5IC13aWR0aCA0MCAtZm9udCB0ZXh0Zm9udCAtdGV4dHZhcmlhYmxlIHNoYTFzdHJpbmcKKyAgICB0cmFjZSBhZGQgdmFyaWFibGUgc2hhMXN0cmluZyB3cml0ZSBzaGExY2hhbmdlCisgICAgcGFjayAkc2hhMWVudHJ5IC1zaWRlIGxlZnQgLXBhZHkgMgorCisgICAgc2V0IGJtX2xlZnRfZGF0YSB7CisJI2RlZmluZSBsZWZ0X3dpZHRoIDE2CisJI2RlZmluZSBsZWZ0X2hlaWdodCAxNgorCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxlZnRfYml0c1tdID0geworCTB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4ZTAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MWMsIDB4MDAsCisJMHgwZSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHg3ZiwgMHgwZSwgMHgwMCwgMHgxYywgMHgwMCwKKwkweDM4LCAweDAwLCAweDcwLCAweDAwLCAweGUwLCAweDAwLCAweGMwLCAweDAxfTsKKyAgICB9CisgICAgc2V0IGJtX3JpZ2h0X2RhdGEgeworCSNkZWZpbmUgcmlnaHRfd2lkdGggMTYKKwkjZGVmaW5lIHJpZ2h0X2hlaWdodCAxNgorCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHJpZ2h0X2JpdHNbXSA9IHsKKwkweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDgwLCAweDAzLCAweDAwLCAweDA3LCAweDAwLCAweDBlLCAweDAwLCAweDFjLAorCTB4MDAsIDB4MzgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MWMsCisJMHgwMCwgMHgwZSwgMHgwMCwgMHgwNywgMHg4MCwgMHgwMywgMHhjMCwgMHgwMX07CisgICAgfQorICAgIGltYWdlIGNyZWF0ZSBiaXRtYXAgYm0tbGVmdCAtZGF0YSAkYm1fbGVmdF9kYXRhIC1mb3JlZ3JvdW5kICR1aWZnY29sb3IKKyAgICBpbWFnZSBjcmVhdGUgYml0bWFwIGJtLWxlZnQtZ3JheSAtZGF0YSAkYm1fbGVmdF9kYXRhIC1mb3JlZ3JvdW5kICR1aWZnZGlzYWJsZWRjb2xvcgorICAgIGltYWdlIGNyZWF0ZSBiaXRtYXAgYm0tcmlnaHQgLWRhdGEgJGJtX3JpZ2h0X2RhdGEgLWZvcmVncm91bmQgJHVpZmdjb2xvcgorICAgIGltYWdlIGNyZWF0ZSBiaXRtYXAgYm0tcmlnaHQtZ3JheSAtZGF0YSAkYm1fcmlnaHRfZGF0YSAtZm9yZWdyb3VuZCAkdWlmZ2Rpc2FibGVkY29sb3IKKworICAgICR7TlN9OjpidXR0b24gLnRmLmJhci5sZWZ0YnV0IC1jb21tYW5kIGdvYmFjayAtc3RhdGUgZGlzYWJsZWQgLXdpZHRoIDI2CisgICAgaWYgeyR1c2VfdHRrfSB7CisJLnRmLmJhci5sZWZ0YnV0IGNvbmZpZ3VyZSAtaW1hZ2UgW2xpc3QgYm0tbGVmdCBkaXNhYmxlZCBibS1sZWZ0LWdyYXldCisgICAgfSBlbHNlIHsKKwkudGYuYmFyLmxlZnRidXQgY29uZmlndXJlIC1pbWFnZSBibS1sZWZ0CisgICAgfQorICAgIHBhY2sgLnRmLmJhci5sZWZ0YnV0IC1zaWRlIGxlZnQgLWZpbGwgeQorICAgICR7TlN9OjpidXR0b24gLnRmLmJhci5yaWdodGJ1dCAtY29tbWFuZCBnb2ZvcncgLXN0YXRlIGRpc2FibGVkIC13aWR0aCAyNgorICAgIGlmIHskdXNlX3R0a30geworCS50Zi5iYXIucmlnaHRidXQgY29uZmlndXJlIC1pbWFnZSBbbGlzdCBibS1yaWdodCBkaXNhYmxlZCBibS1yaWdodC1ncmF5XQorICAgIH0gZWxzZSB7CisJLnRmLmJhci5yaWdodGJ1dCBjb25maWd1cmUgLWltYWdlIGJtLXJpZ2h0CisgICAgfQorICAgIHBhY2sgLnRmLmJhci5yaWdodGJ1dCAtc2lkZSBsZWZ0IC1maWxsIHkKKworICAgICR7TlN9OjpsYWJlbCAudGYuYmFyLnJvd2xhYmVsIC10ZXh0IFttYyAiUm93Il0KKyAgICBzZXQgcm93bnVtc2VsIHt9CisgICAgJHtOU306OmxhYmVsIC50Zi5iYXIucm93bnVtIC13aWR0aCA3IC10ZXh0dmFyaWFibGUgcm93bnVtc2VsIFwKKwktcmVsaWVmIHN1bmtlbiAtYW5jaG9yIGUKKyAgICAke05TfTo6bGFiZWwgLnRmLmJhci5yb3dsYWJlbDIgLXRleHQgIi8iCisgICAgJHtOU306OmxhYmVsIC50Zi5iYXIubnVtY29tbWl0cyAtd2lkdGggNyAtdGV4dHZhcmlhYmxlIG51bWNvbW1pdHMgXAorCS1yZWxpZWYgc3Vua2VuIC1hbmNob3IgZQorICAgIHBhY2sgLnRmLmJhci5yb3dsYWJlbCAudGYuYmFyLnJvd251bSAudGYuYmFyLnJvd2xhYmVsMiAudGYuYmFyLm51bWNvbW1pdHMgXAorCS1zaWRlIGxlZnQKKyAgICBpZiB7ISR1c2VfdHRrfSB7CisgICAgICAgIGZvcmVhY2ggdyB7cm93bnVtIG51bWNvbW1pdHN9IHsudGYuYmFyLiR3IGNvbmZpZ3VyZSAtZm9udCB0ZXh0Zm9udH0KKyAgICB9CisgICAgZ2xvYmFsIHNlbGVjdGVkbGluZQorICAgIHRyYWNlIGFkZCB2YXJpYWJsZSBzZWxlY3RlZGxpbmUgd3JpdGUgc2VsZWN0ZWRsaW5lX2NoYW5nZQorCisgICAgIyBTdGF0dXMgbGFiZWwgYW5kIHByb2dyZXNzIGJhcgorICAgIHNldCBzdGF0dXN3IC50Zi5iYXIuc3RhdHVzCisgICAgJHtOU306OmxhYmVsICRzdGF0dXN3IC13aWR0aCAxNSAtcmVsaWVmIHN1bmtlbgorICAgIHBhY2sgJHN0YXR1c3cgLXNpZGUgbGVmdCAtcGFkeCA1CisgICAgaWYgeyR1c2VfdHRrfSB7CisJc2V0IHByb2dyZXNzY2FudiBbdHRrOjpwcm9ncmVzc2JhciAudGYuYmFyLnByb2dyZXNzXQorICAgIH0gZWxzZSB7CisJc2V0IGggW2V4cHIge1tmb250IG1ldHJpY3MgdWlmb250IC1saW5lc3BhY2VdICsgMn1dCisJc2V0IHByb2dyZXNzY2FudiAudGYuYmFyLnByb2dyZXNzCisJY2FudmFzICRwcm9ncmVzc2NhbnYgLXJlbGllZiBzdW5rZW4gLWhlaWdodCAkaCAtYm9yZGVyd2lkdGggMgorCXNldCBwcm9ncmVzc2l0ZW0gWyRwcm9ncmVzc2NhbnYgY3JlYXRlIHJlY3QgLTEgMCAwICRoIC1maWxsICIjMDBmZjAwIl0KKwlzZXQgZnByb2dpdGVtIFskcHJvZ3Jlc3NjYW52IGNyZWF0ZSByZWN0IC0xIDAgMCAkaCAtZmlsbCB5ZWxsb3ddCisJc2V0IHJwcm9naXRlbSBbJHByb2dyZXNzY2FudiBjcmVhdGUgcmVjdCAtMSAwIDAgJGggLWZpbGwgcmVkXQorICAgIH0KKyAgICBwYWNrICRwcm9ncmVzc2NhbnYgLXNpZGUgcmlnaHQgLWV4cGFuZCAxIC1maWxsIHggLXBhZHggezAgMn0KKyAgICBzZXQgcHJvZ3Jlc3Njb29yZHMgezAgMH0KKyAgICBzZXQgZnByb2djb29yZCAwCisgICAgc2V0IHJwcm9nY29vcmQgMAorICAgIGJpbmQgJHByb2dyZXNzY2FudiA8Q29uZmlndXJlPiBhZGp1c3Rwcm9ncmVzcworICAgIHNldCBsYXN0cHJvZ3VwZGF0ZSBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgc2V0IHByb2d1cGRhdGVwZW5kaW5nIDAKKworICAgICMgYnVpbGQgdXAgdGhlIGJvdHRvbSBiYXIgb2YgdXBwZXIgd2luZG93CisgICAgJHtOU306OmxhYmVsIC50Zi5sYmFyLmZsYWJlbCAtdGV4dCAiW21jICJGaW5kIl0gIgorCisgICAgc2V0IGJtX2Rvd25fZGF0YSB7CisJI2RlZmluZSBkb3duX3dpZHRoIDE2CisJI2RlZmluZSBkb3duX2hlaWdodCAxNgorCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRvd25fYml0c1tdID0geworCTB4ODAsIDB4MDEsIDB4ODAsIDB4MDEsIDB4ODAsIDB4MDEsIDB4ODAsIDB4MDEsCisJMHg4MCwgMHgwMSwgMHg4MCwgMHgwMSwgMHg4MCwgMHgwMSwgMHg4MCwgMHgwMSwKKwkweDg3LCAweGUxLCAweDhlLCAweDcxLCAweDljLCAweDM5LCAweGI4LCAweDFkLAorCTB4ZjAsIDB4MGYsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4MDMsIDB4ODAsIDB4MDF9OworICAgIH0KKyAgICBpbWFnZSBjcmVhdGUgYml0bWFwIGJtLWRvd24gLWRhdGEgJGJtX2Rvd25fZGF0YSAtZm9yZWdyb3VuZCAkdWlmZ2NvbG9yCisgICAgJHtOU306OmJ1dHRvbiAudGYubGJhci5mbmV4dCAtd2lkdGggMjYgLWNvbW1hbmQge2RvZmluZCAxIDF9CisgICAgLnRmLmxiYXIuZm5leHQgY29uZmlndXJlIC1pbWFnZSBibS1kb3duCisKKyAgICBzZXQgYm1fdXBfZGF0YSB7CisJI2RlZmluZSB1cF93aWR0aCAxNgorCSNkZWZpbmUgdXBfaGVpZ2h0IDE2CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgdXBfYml0c1tdID0geworCTB4ODAsIDB4MDEsIDB4YzAsIDB4MDMsIDB4ZTAsIDB4MDcsIDB4ZjAsIDB4MGYsCisJMHhiOCwgMHgxZCwgMHg5YywgMHgzOSwgMHg4ZSwgMHg3MSwgMHg4NywgMHhlMSwKKwkweDgwLCAweDAxLCAweDgwLCAweDAxLCAweDgwLCAweDAxLCAweDgwLCAweDAxLAorCTB4ODAsIDB4MDEsIDB4ODAsIDB4MDEsIDB4ODAsIDB4MDEsIDB4ODAsIDB4MDF9OworICAgIH0KKyAgICBpbWFnZSBjcmVhdGUgYml0bWFwIGJtLXVwIC1kYXRhICRibV91cF9kYXRhIC1mb3JlZ3JvdW5kICR1aWZnY29sb3IKKyAgICAke05TfTo6YnV0dG9uIC50Zi5sYmFyLmZwcmV2IC13aWR0aCAyNiAtY29tbWFuZCB7ZG9maW5kIC0xIDF9CisgICAgLnRmLmxiYXIuZnByZXYgY29uZmlndXJlIC1pbWFnZSBibS11cAorCisgICAgJHtOU306OmxhYmVsIC50Zi5sYmFyLmZsYWIyIC10ZXh0ICIgW21jICJjb21taXQiXSAiCisKKyAgICBwYWNrIC50Zi5sYmFyLmZsYWJlbCAudGYubGJhci5mbmV4dCAudGYubGJhci5mcHJldiAudGYubGJhci5mbGFiMiBcCisJLXNpZGUgbGVmdCAtZmlsbCB5CisgICAgc2V0IGdkdHR5cGUgW21jICJjb250YWluaW5nOiJdCisgICAgc2V0IGdtIFttYWtlZHJvcGxpc3QgLnRmLmxiYXIuZ2R0dHlwZSBnZHR0eXBlIFwKKwkJW21jICJjb250YWluaW5nOiJdIFwKKwkJW21jICJ0b3VjaGluZyBwYXRoczoiXSBcCisJCVttYyAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiXSBcCisJCVttYyAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6Il1dCisgICAgdHJhY2UgYWRkIHZhcmlhYmxlIGdkdHR5cGUgd3JpdGUgZ2R0dHlwZV9jaGFuZ2UKKyAgICBwYWNrIC50Zi5sYmFyLmdkdHR5cGUgLXNpZGUgbGVmdCAtZmlsbCB5CisKKyAgICBzZXQgZmluZHN0cmluZyB7fQorICAgIHNldCBmc3RyaW5nIC50Zi5sYmFyLmZpbmRzdHJpbmcKKyAgICBsYXBwZW5kIGVudHJpZXMgJGZzdHJpbmcKKyAgICAke05TfTo6ZW50cnkgJGZzdHJpbmcgLXdpZHRoIDMwIC10ZXh0dmFyaWFibGUgZmluZHN0cmluZworICAgIHRyYWNlIGFkZCB2YXJpYWJsZSBmaW5kc3RyaW5nIHdyaXRlIGZpbmRfY2hhbmdlCisgICAgc2V0IGZpbmR0eXBlIFttYyAiRXhhY3QiXQorICAgIHNldCBmaW5kdHlwZW1lbnUgW21ha2Vkcm9wbGlzdCAudGYubGJhci5maW5kdHlwZSBcCisJCQkgIGZpbmR0eXBlIFttYyAiRXhhY3QiXSBbbWMgIklnbkNhc2UiXSBbbWMgIlJlZ2V4cCJdXQorICAgIHRyYWNlIGFkZCB2YXJpYWJsZSBmaW5kdHlwZSB3cml0ZSBmaW5kY29tX2NoYW5nZQorICAgIHNldCBmaW5kbG9jIFttYyAiQWxsIGZpZWxkcyJdCisgICAgbWFrZWRyb3BsaXN0IC50Zi5sYmFyLmZpbmRsb2MgZmluZGxvYyBbbWMgIkFsbCBmaWVsZHMiXSBbbWMgIkhlYWRsaW5lIl0gXAorCVttYyAiQ29tbWVudHMiXSBbbWMgIkF1dGhvciJdIFttYyAiQ29tbWl0dGVyIl0KKyAgICB0cmFjZSBhZGQgdmFyaWFibGUgZmluZGxvYyB3cml0ZSBmaW5kX2NoYW5nZQorICAgIHBhY2sgLnRmLmxiYXIuZmluZGxvYyAtc2lkZSByaWdodAorICAgIHBhY2sgLnRmLmxiYXIuZmluZHR5cGUgLXNpZGUgcmlnaHQKKyAgICBwYWNrICRmc3RyaW5nIC1zaWRlIGxlZnQgLWV4cGFuZCAxIC1maWxsIHgKKworICAgICMgRmluaXNoIHB1dHRpbmcgdGhlIHVwcGVyIGhhbGYgb2YgdGhlIHZpZXdlciB0b2dldGhlcgorICAgIHBhY2sgLnRmLmxiYXIgLWluIC50ZiAtc2lkZSBib3R0b20gLWZpbGwgeAorICAgIHBhY2sgLnRmLmJhciAtaW4gLnRmIC1zaWRlIGJvdHRvbSAtZmlsbCB4CisgICAgcGFjayAudGYuaGlzdGZyYW1lIC1maWxsIGJvdGggLXNpZGUgdG9wIC1leHBhbmQgMQorICAgIC5jdG9wIGFkZCAudGYKKyAgICBpZiB7ISR1c2VfdHRrfSB7CisJLmN0b3AgcGFuZWNvbmZpZ3VyZSAudGYgLWhlaWdodCAkZ2VvbWV0cnkodG9waGVpZ2h0KQorCS5jdG9wIHBhbmVjb25maWd1cmUgLnRmIC13aWR0aCAkZ2VvbWV0cnkodG9wd2lkdGgpCisgICAgfQorCisgICAgIyBub3cgYnVpbGQgdXAgdGhlIGJvdHRvbQorICAgICR7TlN9OjpwYW5lZHdpbmRvdyAucHdib3R0b20gLW9yaWVudCBob3Jpem9udGFsCisKKyAgICAjIGxvd2VyIGxlZnQsIGEgdGV4dCBib3ggb3ZlciBzZWFyY2ggYmFyLCBzY3JvbGwgYmFyIHRvIHRoZSByaWdodAorICAgICMgaWYgd2Uga25vdyB3aW5kb3cgaGVpZ2h0LCB0aGVuIHRoYXQgd2lsbCBzZXQgdGhlIGxvd2VyIHRleHQgaGVpZ2h0LCBvdGhlcndpc2UKKyAgICAjIHdlIHNldCBsb3dlciB0ZXh0IGhlaWdodCB3aGljaCB3aWxsIGRyaXZlIHdpbmRvdyBoZWlnaHQKKyAgICBpZiB7W2luZm8gZXhpc3RzIGdlb21ldHJ5KG1haW4pXX0geworCSR7TlN9OjpmcmFtZSAuYmxlZnQgLXdpZHRoICRnZW9tZXRyeShib3R3aWR0aCkKKyAgICB9IGVsc2UgeworCSR7TlN9OjpmcmFtZSAuYmxlZnQgLXdpZHRoICRnZW9tZXRyeShib3R3aWR0aCkgLWhlaWdodCAkZ2VvbWV0cnkoYm90aGVpZ2h0KQorICAgIH0KKyAgICAke05TfTo6ZnJhbWUgLmJsZWZ0LnRvcAorICAgICR7TlN9OjpmcmFtZSAuYmxlZnQubWlkCisgICAgJHtOU306OmZyYW1lIC5ibGVmdC5ib3R0b20KKworICAgICMgZ2FwIGJldHdlZW4gc3ViLXdpZGdldHMKKyAgICBzZXQgd2dhcCBbZm9udCBtZWFzdXJlIHVpZm9udCAiaSJdCisKKyAgICAke05TfTo6YnV0dG9uIC5ibGVmdC50b3Auc2VhcmNoIC10ZXh0IFttYyAiU2VhcmNoIl0gLWNvbW1hbmQgZG9zZWFyY2gKKyAgICBwYWNrIC5ibGVmdC50b3Auc2VhcmNoIC1zaWRlIGxlZnQgLXBhZHggNQorICAgIHNldCBzc3RyaW5nIC5ibGVmdC50b3Auc3N0cmluZworICAgIHNldCBzZWFyY2hzdHJpbmcgIiIKKyAgICAke05TfTo6ZW50cnkgJHNzdHJpbmcgLXdpZHRoIDIwIC10ZXh0dmFyaWFibGUgc2VhcmNoc3RyaW5nCisgICAgbGFwcGVuZCBlbnRyaWVzICRzc3RyaW5nCisgICAgdHJhY2UgYWRkIHZhcmlhYmxlIHNlYXJjaHN0cmluZyB3cml0ZSBpbmNyc2VhcmNoCisgICAgcGFjayAkc3N0cmluZyAtc2lkZSBsZWZ0IC1leHBhbmQgMSAtZmlsbCB4CisgICAgJHtOU306OnJhZGlvYnV0dG9uIC5ibGVmdC5taWQuZGlmZiAtdGV4dCBbbWMgIkRpZmYiXSBcCisJLWNvbW1hbmQgY2hhbmdlZGlmZmRpc3AgLXZhcmlhYmxlIGRpZmZlbGlkZSAtdmFsdWUgezAgMH0KKyAgICAke05TfTo6cmFkaW9idXR0b24gLmJsZWZ0Lm1pZC5vbGQgLXRleHQgW21jICJPbGQgdmVyc2lvbiJdIFwKKwktY29tbWFuZCBjaGFuZ2VkaWZmZGlzcCAtdmFyaWFibGUgZGlmZmVsaWRlIC12YWx1ZSB7MCAxfQorICAgICR7TlN9OjpyYWRpb2J1dHRvbiAuYmxlZnQubWlkLm5ldyAtdGV4dCBbbWMgIk5ldyB2ZXJzaW9uIl0gXAorCS1jb21tYW5kIGNoYW5nZWRpZmZkaXNwIC12YXJpYWJsZSBkaWZmZWxpZGUgLXZhbHVlIHsxIDB9CisKKyAgICAke05TfTo6bGFiZWwgLmJsZWZ0Lm1pZC5sYWJlbGRpZmZjb250ZXh0IC10ZXh0ICIgICAgICBbbWMgIkxpbmVzIG9mIGNvbnRleHQiXTogIgorICAgIHBhY2sgLmJsZWZ0Lm1pZC5kaWZmIC5ibGVmdC5taWQub2xkIC5ibGVmdC5taWQubmV3IC1zaWRlIGxlZnQgLWlwYWR4ICR3Z2FwCisgICAgc3BpbmJveCAuYmxlZnQubWlkLmRpZmZjb250ZXh0IC13aWR0aCA1IFwKKwktZnJvbSAwIC1pbmNyZW1lbnQgMSAtdG8gMTAwMDAwMDAgXAorCS12YWxpZGF0ZSBhbGwgLXZhbGlkYXRlY29tbWFuZCAiZGlmZmNvbnRleHR2YWxpZGF0ZSAlUCIgXAorCS10ZXh0dmFyaWFibGUgZGlmZmNvbnRleHRzdHJpbmcKKyAgICAuYmxlZnQubWlkLmRpZmZjb250ZXh0IHNldCAkZGlmZmNvbnRleHQKKyAgICB0cmFjZSBhZGQgdmFyaWFibGUgZGlmZmNvbnRleHRzdHJpbmcgd3JpdGUgZGlmZmNvbnRleHRjaGFuZ2UKKyAgICBsYXBwZW5kIGVudHJpZXMgLmJsZWZ0Lm1pZC5kaWZmY29udGV4dAorICAgIHBhY2sgLmJsZWZ0Lm1pZC5sYWJlbGRpZmZjb250ZXh0IC5ibGVmdC5taWQuZGlmZmNvbnRleHQgLXNpZGUgbGVmdCAtaXBhZHggJHdnYXAKKyAgICAke05TfTo6Y2hlY2tidXR0b24gLmJsZWZ0Lm1pZC5pZ25zcGFjZSAtdGV4dCBbbWMgIklnbm9yZSBzcGFjZSBjaGFuZ2UiXSBcCisJLWNvbW1hbmQgY2hhbmdlaWdub3Jlc3BhY2UgLXZhcmlhYmxlIGlnbm9yZXNwYWNlCisgICAgcGFjayAuYmxlZnQubWlkLmlnbnNwYWNlIC1zaWRlIGxlZnQgLXBhZHggNQorCisgICAgc2V0IHdvcmRkaWZmIFttYyAiTGluZSBkaWZmIl0KKyAgICBpZiB7W3BhY2thZ2UgdmNvbXBhcmUgJGdpdF92ZXJzaW9uICIxLjcuMiJdID49IDB9IHsKKwltYWtlZHJvcGxpc3QgLmJsZWZ0Lm1pZC53b3JkZGlmZiB3b3JkZGlmZiBbbWMgIkxpbmUgZGlmZiJdIFwKKwkgICAgW21jICJNYXJrdXAgd29yZHMiXSBbbWMgIkNvbG9yIHdvcmRzIl0KKwl0cmFjZSBhZGQgdmFyaWFibGUgd29yZGRpZmYgd3JpdGUgY2hhbmdld29yZGRpZmYKKwlwYWNrIC5ibGVmdC5taWQud29yZGRpZmYgLXNpZGUgbGVmdCAtcGFkeCA1CisgICAgfQorCisgICAgc2V0IGN0ZXh0IC5ibGVmdC5ib3R0b20uY3RleHQKKyAgICB0ZXh0ICRjdGV4dCAtYmFja2dyb3VuZCAkYmdjb2xvciAtZm9yZWdyb3VuZCAkZmdjb2xvciBcCisJLXN0YXRlIGRpc2FibGVkIC11bmRvIDAgLWZvbnQgdGV4dGZvbnQgXAorCS15c2Nyb2xsY29tbWFuZCBzY3JvbGx0ZXh0IC13cmFwIG5vbmUgXAorCS14c2Nyb2xsY29tbWFuZCAiLmJsZWZ0LmJvdHRvbS5zYmhvcml6b250YWwgc2V0IgorICAgIGlmIHskaGF2ZV90azg1fSB7CisJJGN0ZXh0IGNvbmYgLXRhYnN0eWxlIHdvcmRwcm9jZXNzb3IKKyAgICB9CisgICAgJHtOU306OnNjcm9sbGJhciAuYmxlZnQuYm90dG9tLnNiIC1jb21tYW5kICIkY3RleHQgeXZpZXciCisgICAgJHtOU306OnNjcm9sbGJhciAuYmxlZnQuYm90dG9tLnNiaG9yaXpvbnRhbCAtY29tbWFuZCAiJGN0ZXh0IHh2aWV3IiAtb3JpZW50IGgKKyAgICBwYWNrIC5ibGVmdC50b3AgLXNpZGUgdG9wIC1maWxsIHgKKyAgICBwYWNrIC5ibGVmdC5taWQgLXNpZGUgdG9wIC1maWxsIHgKKyAgICBncmlkICRjdGV4dCAuYmxlZnQuYm90dG9tLnNiIC1zdGlja3kgbnNldworICAgIGdyaWQgLmJsZWZ0LmJvdHRvbS5zYmhvcml6b250YWwgLXN0aWNreSBldworICAgIGdyaWQgY29sdW1uY29uZmlndXJlIC5ibGVmdC5ib3R0b20gMCAtd2VpZ2h0IDEKKyAgICBncmlkIHJvd2NvbmZpZ3VyZSAuYmxlZnQuYm90dG9tIDAgLXdlaWdodCAxCisgICAgZ3JpZCByb3djb25maWd1cmUgLmJsZWZ0LmJvdHRvbSAxIC13ZWlnaHQgMAorICAgIHBhY2sgLmJsZWZ0LmJvdHRvbSAtc2lkZSB0b3AgLWZpbGwgYm90aCAtZXhwYW5kIDEKKyAgICBsYXBwZW5kIGJnbGlzdCAkY3RleHQKKyAgICBsYXBwZW5kIGZnbGlzdCAkY3RleHQKKworICAgICRjdGV4dCB0YWcgY29uZiBjb21tZW50IC13cmFwICR3cmFwY29tbWVudAorICAgICRjdGV4dCB0YWcgY29uZiBmaWxlc2VwIC1mb250IHRleHRmb250Ym9sZCAtZm9yZSAkZmlsZXNlcGZnY29sb3IgLWJhY2sgJGZpbGVzZXBiZ2NvbG9yCisgICAgJGN0ZXh0IHRhZyBjb25mIGh1bmtzZXAgLWZvcmUgW2xpbmRleCAkZGlmZmNvbG9ycyAyXQorICAgICRjdGV4dCB0YWcgY29uZiBkMCAtZm9yZSBbbGluZGV4ICRkaWZmY29sb3JzIDBdCisgICAgJGN0ZXh0IHRhZyBjb25mIGRyZXN1bHQgLWZvcmUgW2xpbmRleCAkZGlmZmNvbG9ycyAxXQorICAgICRjdGV4dCB0YWcgY29uZiBtMCAtZm9yZSBbbGluZGV4ICRtZXJnZWNvbG9ycyAwXQorICAgICRjdGV4dCB0YWcgY29uZiBtMSAtZm9yZSBbbGluZGV4ICRtZXJnZWNvbG9ycyAxXQorICAgICRjdGV4dCB0YWcgY29uZiBtMiAtZm9yZSBbbGluZGV4ICRtZXJnZWNvbG9ycyAyXQorICAgICRjdGV4dCB0YWcgY29uZiBtMyAtZm9yZSBbbGluZGV4ICRtZXJnZWNvbG9ycyAzXQorICAgICRjdGV4dCB0YWcgY29uZiBtNCAtZm9yZSBbbGluZGV4ICRtZXJnZWNvbG9ycyA0XQorICAgICRjdGV4dCB0YWcgY29uZiBtNSAtZm9yZSBbbGluZGV4ICRtZXJnZWNvbG9ycyA1XQorICAgICRjdGV4dCB0YWcgY29uZiBtNiAtZm9yZSBbbGluZGV4ICRtZXJnZWNvbG9ycyA2XQorICAgICRjdGV4dCB0YWcgY29uZiBtNyAtZm9yZSBbbGluZGV4ICRtZXJnZWNvbG9ycyA3XQorICAgICRjdGV4dCB0YWcgY29uZiBtOCAtZm9yZSBbbGluZGV4ICRtZXJnZWNvbG9ycyA4XQorICAgICRjdGV4dCB0YWcgY29uZiBtOSAtZm9yZSBbbGluZGV4ICRtZXJnZWNvbG9ycyA5XQorICAgICRjdGV4dCB0YWcgY29uZiBtMTAgLWZvcmUgW2xpbmRleCAkbWVyZ2Vjb2xvcnMgMTBdCisgICAgJGN0ZXh0IHRhZyBjb25mIG0xMSAtZm9yZSBbbGluZGV4ICRtZXJnZWNvbG9ycyAxMV0KKyAgICAkY3RleHQgdGFnIGNvbmYgbTEyIC1mb3JlIFtsaW5kZXggJG1lcmdlY29sb3JzIDEyXQorICAgICRjdGV4dCB0YWcgY29uZiBtMTMgLWZvcmUgW2xpbmRleCAkbWVyZ2Vjb2xvcnMgMTNdCisgICAgJGN0ZXh0IHRhZyBjb25mIG0xNCAtZm9yZSBbbGluZGV4ICRtZXJnZWNvbG9ycyAxNF0KKyAgICAkY3RleHQgdGFnIGNvbmYgbTE1IC1mb3JlIFtsaW5kZXggJG1lcmdlY29sb3JzIDE1XQorICAgICRjdGV4dCB0YWcgY29uZiBtbWF4IC1mb3JlIGRhcmtncmV5CisgICAgc2V0IG1lcmdlbWF4IDE2CisgICAgJGN0ZXh0IHRhZyBjb25mIG1yZXN1bHQgLWZvbnQgdGV4dGZvbnRib2xkCisgICAgJGN0ZXh0IHRhZyBjb25mIG1zZXAgLWZvbnQgdGV4dGZvbnRib2xkCisgICAgJGN0ZXh0IHRhZyBjb25mIGZvdW5kIC1iYWNrICRmb3VuZGJnY29sb3IKKyAgICAkY3RleHQgdGFnIGNvbmYgY3VycmVudHNlYXJjaGhpdCAtYmFjayAkY3VycmVudHNlYXJjaGhpdGJnY29sb3IKKyAgICAkY3RleHQgdGFnIGNvbmYgd3dyYXAgLXdyYXAgd29yZCAtbG1hcmdpbjIgMWMKKyAgICAkY3RleHQgdGFnIGNvbmYgYm9sZCAtZm9udCB0ZXh0Zm9udGJvbGQKKworICAgIC5wd2JvdHRvbSBhZGQgLmJsZWZ0CisgICAgaWYgeyEkdXNlX3R0a30geworCS5wd2JvdHRvbSBwYW5lY29uZmlndXJlIC5ibGVmdCAtd2lkdGggJGdlb21ldHJ5KGJvdHdpZHRoKQorICAgIH0KKworICAgICMgbG93ZXIgcmlnaHQKKyAgICAke05TfTo6ZnJhbWUgLmJyaWdodAorICAgICR7TlN9OjpmcmFtZSAuYnJpZ2h0Lm1vZGUKKyAgICAke05TfTo6cmFkaW9idXR0b24gLmJyaWdodC5tb2RlLnBhdGNoIC10ZXh0IFttYyAiUGF0Y2giXSBcCisJLWNvbW1hbmQgcmVzZWxlY3RsaW5lIC12YXJpYWJsZSBjbWl0bW9kZSAtdmFsdWUgInBhdGNoIgorICAgICR7TlN9OjpyYWRpb2J1dHRvbiAuYnJpZ2h0Lm1vZGUudHJlZSAtdGV4dCBbbWMgIlRyZWUiXSBcCisJLWNvbW1hbmQgcmVzZWxlY3RsaW5lIC12YXJpYWJsZSBjbWl0bW9kZSAtdmFsdWUgInRyZWUiCisgICAgZ3JpZCAuYnJpZ2h0Lm1vZGUucGF0Y2ggLmJyaWdodC5tb2RlLnRyZWUgLXN0aWNreSBldworICAgIHBhY2sgLmJyaWdodC5tb2RlIC1zaWRlIHRvcCAtZmlsbCB4CisgICAgc2V0IGNmbGlzdCAuYnJpZ2h0LmNmaWxlcworICAgIHNldCBpbmRlbnQgW2ZvbnQgbWVhc3VyZSBtYWluZm9udCAibm4iXQorICAgIHRleHQgJGNmbGlzdCBcCisJLXNlbGVjdGJhY2tncm91bmQgJHNlbGVjdGJnY29sb3IgXAorCS1iYWNrZ3JvdW5kICRiZ2NvbG9yIC1mb3JlZ3JvdW5kICRmZ2NvbG9yIFwKKwktZm9udCBtYWluZm9udCBcCisJLXRhYnMgW2xpc3QgJGluZGVudCBbZXhwciB7MiAqICRpbmRlbnR9XV0gXAorCS15c2Nyb2xsY29tbWFuZCAiLmJyaWdodC5zYiBzZXQiIFwKKwktY3Vyc29yIFsuIGNnZXQgLWN1cnNvcl0gXAorCS1zcGFjaW5nMSAxIC1zcGFjaW5nMyAxCisgICAgbGFwcGVuZCBiZ2xpc3QgJGNmbGlzdAorICAgIGxhcHBlbmQgZmdsaXN0ICRjZmxpc3QKKyAgICAke05TfTo6c2Nyb2xsYmFyIC5icmlnaHQuc2IgLWNvbW1hbmQgIiRjZmxpc3QgeXZpZXciCisgICAgcGFjayAuYnJpZ2h0LnNiIC1zaWRlIHJpZ2h0IC1maWxsIHkKKyAgICBwYWNrICRjZmxpc3QgLXNpZGUgbGVmdCAtZmlsbCBib3RoIC1leHBhbmQgMQorICAgICRjZmxpc3QgdGFnIGNvbmZpZ3VyZSBoaWdobGlnaHQgXAorCS1iYWNrZ3JvdW5kIFskY2ZsaXN0IGNnZXQgLXNlbGVjdGJhY2tncm91bmRdCisgICAgJGNmbGlzdCB0YWcgY29uZmlndXJlIGJvbGQgLWZvbnQgbWFpbmZvbnRib2xkCisKKyAgICAucHdib3R0b20gYWRkIC5icmlnaHQKKyAgICAuY3RvcCBhZGQgLnB3Ym90dG9tCisKKyAgICAjIHJlc3RvcmUgd2luZG93IHdpZHRoICYgaGVpZ2h0IGlmIGtub3duCisgICAgaWYge1tpbmZvIGV4aXN0cyBnZW9tZXRyeShtYWluKV19IHsKKwlpZiB7W3NjYW4gJGdlb21ldHJ5KG1haW4pICIlZHglZCIgdyBoXSA+PSAyfSB7CisJICAgIGlmIHskdyA+IFt3aW5mbyBzY3JlZW53aWR0aCAuXX0geworCQlzZXQgdyBbd2luZm8gc2NyZWVud2lkdGggLl0KKwkgICAgfQorCSAgICBpZiB7JGggPiBbd2luZm8gc2NyZWVuaGVpZ2h0IC5dfSB7CisJCXNldCBoIFt3aW5mbyBzY3JlZW5oZWlnaHQgLl0KKwkgICAgfQorCSAgICB3bSBnZW9tZXRyeSAuICIke3d9eCRoIgorCX0KKyAgICB9CisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGdlb21ldHJ5KHN0YXRlKV0gJiYgJGdlb21ldHJ5KHN0YXRlKSBlcSAiem9vbWVkIn0geworICAgICAgICB3bSBzdGF0ZSAuICRnZW9tZXRyeShzdGF0ZSkKKyAgICB9CisKKyAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEge2FxdWF9fSB7CisgICAgICAgIHNldCBNMUIgTTEKKyAgICAgICAgc2V0IDo6Qk0gIjMiCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IE0xQiBDb250cm9sCisgICAgICAgIHNldCA6OkJNICIyIgorICAgIH0KKworICAgIGlmIHskdXNlX3R0a30geworICAgICAgICBiaW5kIC5jdG9wIDxNYXA+IHsKKyAgICAgICAgICAgIGJpbmQgJVcgPE1hcD4ge30KKyAgICAgICAgICAgICVXIHNhc2hwb3MgMCAkOjpnZW9tZXRyeSh0b3BoZWlnaHQpCisgICAgICAgIH0KKyAgICAgICAgYmluZCAucHdib3R0b20gPE1hcD4geworICAgICAgICAgICAgYmluZCAlVyA8TWFwPiB7fQorICAgICAgICAgICAgJVcgc2FzaHBvcyAwICQ6Omdlb21ldHJ5KGJvdHdpZHRoKQorICAgICAgICB9CisgICAgfQorCisgICAgYmluZCAucHdib3R0b20gPENvbmZpZ3VyZT4ge3Jlc2l6ZWNkZXRwYW5lcyAlVyAld30KKyAgICBwYWNrIC5jdG9wIC1maWxsIGJvdGggLWV4cGFuZCAxCisgICAgYmluZGFsbCA8MT4ge3NlbGNhbnZsaW5lICVXICV4ICV5fQorICAgICNiaW5kYWxsIDxCMS1Nb3Rpb24+IHtzZWxjYW52bGluZSAlVyAleCAleX0KKyAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gPT0gIndpbjMyIn0geworCWJpbmQgLiA8TW91c2VXaGVlbD4geyB3aW5kb3dzX21vdXNld2hlZWxfcmVkaXJlY3RvciAlVyAlWCAlWSAlRCB9CisJYmluZCAkY3RleHQgPE1vdXNlV2hlZWw+IHsgd2luZG93c19tb3VzZXdoZWVsX3JlZGlyZWN0b3IgJVcgJVggJVkgJUQgOyBicmVhayB9CisgICAgfSBlbHNlIHsKKwliaW5kYWxsIDxCdXR0b25SZWxlYXNlLTQ+ICJhbGxjYW52cyB5dmlldyBzY3JvbGwgLTUgdW5pdHMiCisJYmluZGFsbCA8QnV0dG9uUmVsZWFzZS01PiAiYWxsY2FudnMgeXZpZXcgc2Nyb2xsIDUgdW5pdHMiCisJYmluZCAkY3RleHQgPEJ1dHRvbj4geworCSAgICBpZiB7IiViIiBlcSA2fSB7CisJCSRjdGV4dCB4dmlldyBzY3JvbGwgLTUgdW5pdHMKKwkgICAgfSBlbHNlaWYgeyIlYiIgZXEgN30geworCQkkY3RleHQgeHZpZXcgc2Nyb2xsIDUgdW5pdHMKKwkgICAgfQorCX0KKyAgICAgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJhcXVhIn0geworICAgICAgICAgICAgYmluZGFsbCA8TW91c2VXaGVlbD4geworICAgICAgICAgICAgICAgIHNldCBkZWx0YSBbZXhwciB7LSAoJUQpfV0KKyAgICAgICAgICAgICAgICBhbGxjYW52cyB5dmlldyBzY3JvbGwgJGRlbHRhIHVuaXRzCisgICAgICAgICAgICB9CisgICAgICAgICAgICBiaW5kYWxsIDxTaGlmdC1Nb3VzZVdoZWVsPiB7CisgICAgICAgICAgICAgICAgc2V0IGRlbHRhIFtleHByIHstICglRCl9XQorICAgICAgICAgICAgICAgICRjYW52IHh2aWV3IHNjcm9sbCAkZGVsdGEgdW5pdHMKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBiaW5kYWxsIDwkOjpCTT4gImNhbnZzY2FuIG1hcmsgJVcgJXggJXkiCisgICAgYmluZGFsbCA8QiQ6OkJNLU1vdGlvbj4gImNhbnZzY2FuIGRyYWd0byAlVyAleCAleSIKKyAgICBiaW5kIGFsbCA8JE0xQi1LZXktdz4ge2Rlc3Ryb3kgW3dpbmZvIHRvcGxldmVsICVXXX0KKyAgICBiaW5kIC4gPCRNMUItS2V5LXc+IGRvcXVpdAorICAgIGJpbmRrZXkgPEhvbWU+IHNlbGZpcnN0bGluZQorICAgIGJpbmRrZXkgPEVuZD4gc2VsbGFzdGxpbmUKKyAgICBiaW5kIC4gPEtleS1VcD4gInNlbG5leHRsaW5lIC0xIgorICAgIGJpbmQgLiA8S2V5LURvd24+ICJzZWxuZXh0bGluZSAxIgorICAgIGJpbmQgLiA8U2hpZnQtS2V5LVVwPiAiZG9maW5kIC0xIDAiCisgICAgYmluZCAuIDxTaGlmdC1LZXktRG93bj4gImRvZmluZCAxIDAiCisgICAgYmluZGtleSA8S2V5LVJpZ2h0PiAiZ29mb3J3IgorICAgIGJpbmRrZXkgPEtleS1MZWZ0PiAiZ29iYWNrIgorICAgIGJpbmQgLiA8S2V5LVByaW9yPiAic2VsbmV4dHBhZ2UgLTEiCisgICAgYmluZCAuIDxLZXktTmV4dD4gInNlbG5leHRwYWdlIDEiCisgICAgYmluZCAuIDwkTTFCLUhvbWU+ICJhbGxjYW52cyB5dmlldyBtb3ZldG8gMC4wIgorICAgIGJpbmQgLiA8JE0xQi1FbmQ+ICJhbGxjYW52cyB5dmlldyBtb3ZldG8gMS4wIgorICAgIGJpbmQgLiA8JE0xQi1LZXktVXA+ICJhbGxjYW52cyB5dmlldyBzY3JvbGwgLTEgdW5pdHMiCisgICAgYmluZCAuIDwkTTFCLUtleS1Eb3duPiAiYWxsY2FudnMgeXZpZXcgc2Nyb2xsIDEgdW5pdHMiCisgICAgYmluZCAuIDwkTTFCLUtleS1Qcmlvcj4gImFsbGNhbnZzIHl2aWV3IHNjcm9sbCAtMSBwYWdlcyIKKyAgICBiaW5kIC4gPCRNMUItS2V5LU5leHQ+ICJhbGxjYW52cyB5dmlldyBzY3JvbGwgMSBwYWdlcyIKKyAgICBiaW5ka2V5IDxLZXktRGVsZXRlPiAiJGN0ZXh0IHl2aWV3IHNjcm9sbCAtMSBwYWdlcyIKKyAgICBiaW5ka2V5IDxLZXktQmFja1NwYWNlPiAiJGN0ZXh0IHl2aWV3IHNjcm9sbCAtMSBwYWdlcyIKKyAgICBiaW5ka2V5IDxLZXktc3BhY2U+ICIkY3RleHQgeXZpZXcgc2Nyb2xsIDEgcGFnZXMiCisgICAgYmluZGtleSBwICJzZWxuZXh0bGluZSAtMSIKKyAgICBiaW5ka2V5IG4gInNlbG5leHRsaW5lIDEiCisgICAgYmluZGtleSB6ICJnb2JhY2siCisgICAgYmluZGtleSB4ICJnb2ZvcnciCisgICAgYmluZGtleSBrICJzZWxuZXh0bGluZSAtMSIKKyAgICBiaW5ka2V5IGogInNlbG5leHRsaW5lIDEiCisgICAgYmluZGtleSBoICJnb2JhY2siCisgICAgYmluZGtleSBsICJnb2ZvcnciCisgICAgYmluZGtleSBiIHByZXZmaWxlCisgICAgYmluZGtleSBkICIkY3RleHQgeXZpZXcgc2Nyb2xsIDE4IHVuaXRzIgorICAgIGJpbmRrZXkgdSAiJGN0ZXh0IHl2aWV3IHNjcm9sbCAtMTggdW5pdHMiCisgICAgYmluZGtleSBnIHskc2hhMWVudHJ5IGRlbGV0ZSAwIGVuZDsgZm9jdXMgJHNoYTFlbnRyeX0KKyAgICBiaW5ka2V5IC8ge2ZvY3VzICRmc3RyaW5nfQorICAgIGJpbmRrZXkgPEtleS1LUF9EaXZpZGU+IHtmb2N1cyAkZnN0cmluZ30KKyAgICBiaW5ka2V5IDxLZXktUmV0dXJuPiB7ZG9maW5kIDEgMX0KKyAgICBiaW5ka2V5ID8ge2RvZmluZCAtMSAxfQorICAgIGJpbmRrZXkgZiBuZXh0ZmlsZQorICAgIGJpbmQgLiA8RjU+IHVwZGF0ZWNvbW1pdHMKKyAgICBiaW5kbW9kZnVuY3Rpb25rZXkgU2hpZnQgNSByZWxvYWRjb21taXRzCisgICAgYmluZCAuIDxGMj4gc2hvd3JlZnMKKyAgICBiaW5kbW9kZnVuY3Rpb25rZXkgU2hpZnQgNCB7bmV3dmlldyAwfQorICAgIGJpbmQgLiA8RjQ+IGVkaXRfb3JfbmV3dmlldworICAgIGJpbmQgLiA8JE0xQi1xPiBkb3F1aXQKKyAgICBiaW5kIC4gPCRNMUItZj4ge2RvZmluZCAxIDF9CisgICAgYmluZCAuIDwkTTFCLWc+IHtkb2ZpbmQgMSAwfQorICAgIGJpbmQgLiA8JE0xQi1yPiBkb3NlYXJjaGJhY2sKKyAgICBiaW5kIC4gPCRNMUItcz4gZG9zZWFyY2gKKyAgICBiaW5kIC4gPCRNMUItZXF1YWw+IHtpbmNyZm9udCAxfQorICAgIGJpbmQgLiA8JE0xQi1wbHVzPiB7aW5jcmZvbnQgMX0KKyAgICBiaW5kIC4gPCRNMUItS1BfQWRkPiB7aW5jcmZvbnQgMX0KKyAgICBiaW5kIC4gPCRNMUItbWludXM+IHtpbmNyZm9udCAtMX0KKyAgICBiaW5kIC4gPCRNMUItS1BfU3VidHJhY3Q+IHtpbmNyZm9udCAtMX0KKyAgICB3bSBwcm90b2NvbCAuIFdNX0RFTEVURV9XSU5ET1cgZG9xdWl0CisgICAgYmluZCAuIDxEZXN0cm95PiB7c3RvcF9iYWNrZW5kc30KKyAgICBiaW5kIC4gPEJ1dHRvbi0xPiAiY2xpY2sgJVciCisgICAgYmluZCAkZnN0cmluZyA8S2V5LVJldHVybj4ge2RvZmluZCAxIDF9CisgICAgYmluZCAkc2hhMWVudHJ5IDxLZXktUmV0dXJuPiB7Z290b2NvbW1pdDsgYnJlYWt9CisgICAgYmluZCAkc2hhMWVudHJ5IDw8UGFzdGVTZWxlY3Rpb24+PiBjbGVhcnNoYTEKKyAgICBiaW5kICRzaGExZW50cnkgPDxQYXN0ZT4+IGNsZWFyc2hhMQorICAgIGJpbmQgJGNmbGlzdCA8MT4ge3NlbF9mbGlzdCAlVyAleCAleTsgYnJlYWt9CisgICAgYmluZCAkY2ZsaXN0IDxCMS1Nb3Rpb24+IHtzZWxfZmxpc3QgJVcgJXggJXk7IGJyZWFrfQorICAgIGJpbmQgJGNmbGlzdCA8QnV0dG9uUmVsZWFzZS0xPiB7dHJlZWNsaWNrICVXICV4ICV5fQorICAgIGdsb2JhbCBjdHhidXQKKyAgICBiaW5kICRjZmxpc3QgJGN0eGJ1dCB7cG9wX2ZsaXN0X21lbnUgJVcgJVggJVkgJXggJXl9CisgICAgYmluZCAkY3RleHQgJGN0eGJ1dCB7cG9wX2RpZmZfbWVudSAlVyAlWCAlWSAleCAleX0KKyAgICBiaW5kICRjdGV4dCA8QnV0dG9uLTE+IHtmb2N1cyAlV30KKyAgICBiaW5kICRjdGV4dCA8PFNlbGVjdGlvbj4+IHJlaGlnaGxpZ2h0X3NlYXJjaF9yZXN1bHRzCisgICAgZm9yIHtzZXQgaSAxfSB7JGkgPCAxMH0ge2luY3IgaX0geworCWJpbmQgLiA8JE0xQi1LZXktJGk+IFtsaXN0IGdvX3RvX3BhcmVudCAkaV0KKyAgICB9CisKKyAgICBzZXQgbWFpbmN1cnNvciBbLiBjZ2V0IC1jdXJzb3JdCisgICAgc2V0IHRleHRjdXJzb3IgWyRjdGV4dCBjZ2V0IC1jdXJzb3JdCisgICAgc2V0IGN1cnRleHRjdXJzb3IgJHRleHRjdXJzb3IKKworICAgIHNldCByb3djdHhtZW51IC5yb3djdHhtZW51CisgICAgbWFrZW1lbnUgJHJvd2N0eG1lbnUgeworCXttYyAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIiBjb21tYW5kIHtkaWZmdnNzZWwgMH19CisJe21jICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiIGNvbW1hbmQge2RpZmZ2c3NlbCAxfX0KKwl7bWMgIk1ha2UgcGF0Y2giIGNvbW1hbmQgbWtwYXRjaH0KKwl7bWMgIkNyZWF0ZSB0YWciIGNvbW1hbmQgbWt0YWd9CisJe21jICJDb3B5IGNvbW1pdCBzdW1tYXJ5IiBjb21tYW5kIGNvcHlzdW1tYXJ5fQorCXttYyAiV3JpdGUgY29tbWl0IHRvIGZpbGUiIGNvbW1hbmQgd3JpdGVjb21taXR9CisJe21jICJDcmVhdGUgbmV3IGJyYW5jaCIgY29tbWFuZCBta2JyYW5jaH0KKwl7bWMgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IiBjb21tYW5kIGNoZXJyeXBpY2t9CisJe21jICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIiBjb21tYW5kIHJlc2V0aGVhZH0KKwl7bWMgIk1hcmsgdGhpcyBjb21taXQiIGNvbW1hbmQgbWFya2hlcmV9CisJe21jICJSZXR1cm4gdG8gbWFyayIgY29tbWFuZCBnb3RvbWFya30KKwl7bWMgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIiBjb21tYW5kIGZpbmRfY29tbW9uX2Rlc2N9CisJe21jICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIgY29tbWFuZCBjb21wYXJlX2NvbW1pdHN9CisJe21jICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIgY29tbWFuZCB7ZGlmZnZzbWFyayAwfX0KKwl7bWMgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIiBjb21tYW5kIHtkaWZmdnNtYXJrIDF9fQorCXttYyAiUmV2ZXJ0IHRoaXMgY29tbWl0IiBjb21tYW5kIHJldmVydH0KKyAgICB9CisgICAgJHJvd2N0eG1lbnUgY29uZmlndXJlIC10ZWFyb2ZmIDAKKworICAgIHNldCBmYWtlcm93bWVudSAuZmFrZXJvd21lbnUKKyAgICBtYWtlbWVudSAkZmFrZXJvd21lbnUgeworCXttYyAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIiBjb21tYW5kIHtkaWZmdnNzZWwgMH19CisJe21jICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiIGNvbW1hbmQge2RpZmZ2c3NlbCAxfX0KKwl7bWMgIk1ha2UgcGF0Y2giIGNvbW1hbmQgbWtwYXRjaH0KKwl7bWMgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IiBjb21tYW5kIHtkaWZmdnNtYXJrIDB9fQorCXttYyAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiIGNvbW1hbmQge2RpZmZ2c21hcmsgMX19CisgICAgfQorICAgICRmYWtlcm93bWVudSBjb25maWd1cmUgLXRlYXJvZmYgMAorCisgICAgc2V0IGhlYWRjdHhtZW51IC5oZWFkY3R4bWVudQorICAgIG1ha2VtZW51ICRoZWFkY3R4bWVudSB7CisJe21jICJDaGVjayBvdXQgdGhpcyBicmFuY2giIGNvbW1hbmQgY29icmFuY2h9CisJe21jICJSZW5hbWUgdGhpcyBicmFuY2giIGNvbW1hbmQgbXZicmFuY2h9CisJe21jICJSZW1vdmUgdGhpcyBicmFuY2giIGNvbW1hbmQgcm1icmFuY2h9CisJe21jICJDb3B5IGJyYW5jaCBuYW1lIiBjb21tYW5kIHtjbGlwYm9hcmQgY2xlYXI7IGNsaXBib2FyZCBhcHBlbmQgJGhlYWRtZW51aGVhZH19CisgICAgfQorICAgICRoZWFkY3R4bWVudSBjb25maWd1cmUgLXRlYXJvZmYgMAorCisgICAgZ2xvYmFsIGZsaXN0X21lbnUKKyAgICBzZXQgZmxpc3RfbWVudSAuZmxpc3RjdHhtZW51CisgICAgbWFrZW1lbnUgJGZsaXN0X21lbnUgeworCXttYyAiSGlnaGxpZ2h0IHRoaXMgdG9vIiBjb21tYW5kIHtmbGlzdF9obCAwfX0KKwl7bWMgIkhpZ2hsaWdodCB0aGlzIG9ubHkiIGNvbW1hbmQge2ZsaXN0X2hsIDF9fQorCXttYyAiRXh0ZXJuYWwgZGlmZiIgY29tbWFuZCB7ZXh0ZXJuYWxfZGlmZn19CisJe21jICJCbGFtZSBwYXJlbnQgY29tbWl0IiBjb21tYW5kIHtleHRlcm5hbF9ibGFtZSAxfX0KKwl7bWMgIkNvcHkgcGF0aCIgY29tbWFuZCB7Y2xpcGJvYXJkIGNsZWFyOyBjbGlwYm9hcmQgYXBwZW5kICRmbGlzdF9tZW51X2ZpbGV9fQorICAgIH0KKyAgICAkZmxpc3RfbWVudSBjb25maWd1cmUgLXRlYXJvZmYgMAorCisgICAgZ2xvYmFsIGRpZmZfbWVudQorICAgIHNldCBkaWZmX21lbnUgLmRpZmZjdHhtZW51CisgICAgbWFrZW1lbnUgJGRpZmZfbWVudSB7CisJe21jICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiIGNvbW1hbmQgc2hvd19saW5lX3NvdXJjZX0KKwl7bWMgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIgY29tbWFuZCB7ZXh0ZXJuYWxfYmxhbWVfZGlmZn19CisgICAgfQorICAgICRkaWZmX21lbnUgY29uZmlndXJlIC10ZWFyb2ZmIDAKK30KKworIyBXaW5kb3dzIHNlbmRzIGFsbCBtb3VzZSB3aGVlbCBldmVudHMgdG8gdGhlIGN1cnJlbnQgZm9jdXNlZCB3aW5kb3csIG5vdAorIyB0aGUgb25lIHdoZXJlIHRoZSBtb3VzZSBob3ZlcnMsIHNvIGJpbmQgdGhvc2UgZXZlbnRzIGhlcmUgYW5kIHJlZGlyZWN0CisjIHRvIHRoZSBjb3JyZWN0IHdpbmRvdworcHJvYyB3aW5kb3dzX21vdXNld2hlZWxfcmVkaXJlY3RvciB7VyBYIFkgRH0geworICAgIGdsb2JhbCBjYW52IGNhbnYyIGNhbnYzCisgICAgc2V0IHcgW3dpbmZvIGNvbnRhaW5pbmcgLWRpc3BsYXlvZiAkVyAkWCAkWV0KKyAgICBpZiB7JHcgbmUgIiJ9IHsKKwlzZXQgdSBbZXhwciB7JEQgPCAwID8gNSA6IC01fV0KKwlpZiB7JHcgPT0gJGNhbnYgfHwgJHcgPT0gJGNhbnYyIHx8ICR3ID09ICRjYW52M30geworCSAgICBhbGxjYW52cyB5dmlldyBzY3JvbGwgJHUgdW5pdHMKKwl9IGVsc2UgeworCSAgICBjYXRjaCB7CisJCSR3IHl2aWV3IHNjcm9sbCAkdSB1bml0cworCSAgICB9CisJfQorICAgIH0KK30KKworIyBVcGRhdGUgcm93IG51bWJlciBsYWJlbCB3aGVuIHNlbGVjdGVkbGluZSBjaGFuZ2VzCitwcm9jIHNlbGVjdGVkbGluZV9jaGFuZ2Uge24xIG4yIG9wfSB7CisgICAgZ2xvYmFsIHNlbGVjdGVkbGluZSByb3dudW1zZWwKKworICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9fSB7CisJc2V0IHJvd251bXNlbCB7fQorICAgIH0gZWxzZSB7CisJc2V0IHJvd251bXNlbCBbZXhwciB7JHNlbGVjdGVkbGluZSArIDF9XQorICAgIH0KK30KKworIyBtb3VzZS0yIG1ha2VzIGFsbCB3aW5kb3dzIHNjYW4gdmVydGljYWxseSwgYnV0IG9ubHkgdGhlIG9uZQorIyB0aGUgY3Vyc29yIGlzIGluIHNjYW5zIGhvcml6b250YWxseQorcHJvYyBjYW52c2NhbiB7b3AgdyB4IHl9IHsKKyAgICBnbG9iYWwgY2FudiBjYW52MiBjYW52MworICAgIGZvcmVhY2ggYyBbbGlzdCAkY2FudiAkY2FudjIgJGNhbnYzXSB7CisJaWYgeyRjID09ICR3fSB7CisJICAgICRjIHNjYW4gJG9wICR4ICR5CisJfSBlbHNlIHsKKwkgICAgJGMgc2NhbiAkb3AgMCAkeQorCX0KKyAgICB9Cit9CisKK3Byb2Mgc2Nyb2xsY2FudiB7Y3Njcm9sbCBmMCBmMX0geworICAgICRjc2Nyb2xsIHNldCAkZjAgJGYxCisgICAgZHJhd3Zpc2libGUKKyAgICBmbHVzaGhpZ2hsaWdodHMKK30KKworIyB3aGVuIHdlIG1ha2UgYSBrZXkgYmluZGluZyBmb3IgdGhlIHRvcGxldmVsLCBtYWtlIHN1cmUKKyMgaXQgZG9lc24ndCBnZXQgdHJpZ2dlcmVkIHdoZW4gdGhhdCBrZXkgaXMgcHJlc3NlZCBpbiB0aGUKKyMgZmluZCBzdHJpbmcgZW50cnkgd2lkZ2V0LgorcHJvYyBiaW5ka2V5IHtldiBzY3JpcHR9IHsKKyAgICBnbG9iYWwgZW50cmllcworICAgIGJpbmQgLiAkZXYgJHNjcmlwdAorICAgIHNldCBlc2NyaXB0IFtiaW5kIEVudHJ5ICRldl0KKyAgICBpZiB7JGVzY3JpcHQgPT0ge319IHsKKwlzZXQgZXNjcmlwdCBbYmluZCBFbnRyeSA8S2V5Pl0KKyAgICB9CisgICAgZm9yZWFjaCBlICRlbnRyaWVzIHsKKwliaW5kICRlICRldiAiJGVzY3JpcHQ7IGJyZWFrIgorICAgIH0KK30KKworcHJvYyBiaW5kbW9kZnVuY3Rpb25rZXkge21vZCBuIHNjcmlwdH0geworICAgIGJpbmQgLiA8JG1vZC1GJG4+ICRzY3JpcHQKKyAgICBjYXRjaCB7IGJpbmQgLiA8JG1vZC1YRjg2X1N3aXRjaF9WVF8kbj4gJHNjcmlwdCB9Cit9CisKKyMgc2V0IHRoZSBmb2N1cyBiYWNrIHRvIHRoZSB0b3BsZXZlbCBmb3IgYW55IGNsaWNrIG91dHNpZGUKKyMgdGhlIGVudHJ5IHdpZGdldHMKK3Byb2MgY2xpY2sge3d9IHsKKyAgICBnbG9iYWwgY3RleHQgZW50cmllcworICAgIGZvcmVhY2ggZSBbY29uY2F0ICRlbnRyaWVzICRjdGV4dF0geworCWlmIHskdyA9PSAkZX0gcmV0dXJuCisgICAgfQorICAgIGZvY3VzIC4KK30KKworIyBBZGp1c3QgdGhlIHByb2dyZXNzIGJhciBmb3IgYSBjaGFuZ2UgaW4gcmVxdWVzdGVkIGV4dGVudCBvciBjYW52YXMgc2l6ZQorcHJvYyBhZGp1c3Rwcm9ncmVzcyB7fSB7CisgICAgZ2xvYmFsIHByb2dyZXNzY2FudiBwcm9ncmVzc2l0ZW0gcHJvZ3Jlc3Njb29yZHMKKyAgICBnbG9iYWwgZnByb2dpdGVtIGZwcm9nY29vcmQgbGFzdHByb2d1cGRhdGUgcHJvZ3VwZGF0ZXBlbmRpbmcKKyAgICBnbG9iYWwgcnByb2dpdGVtIHJwcm9nY29vcmQgdXNlX3R0aworCisgICAgaWYgeyR1c2VfdHRrfSB7CisJJHByb2dyZXNzY2FudiBjb25maWd1cmUgLXZhbHVlIFtleHByIHtpbnQoJGZwcm9nY29vcmQgKiAxMDApfV0KKwlyZXR1cm4KKyAgICB9CisKKyAgICBzZXQgdyBbZXhwciB7W3dpbmZvIHdpZHRoICRwcm9ncmVzc2NhbnZdIC0gNH1dCisgICAgc2V0IHgwIFtleHByIHskdyAqIFtsaW5kZXggJHByb2dyZXNzY29vcmRzIDBdfV0KKyAgICBzZXQgeDEgW2V4cHIgeyR3ICogW2xpbmRleCAkcHJvZ3Jlc3Njb29yZHMgMV19XQorICAgIHNldCBoIFt3aW5mbyBoZWlnaHQgJHByb2dyZXNzY2Fudl0KKyAgICAkcHJvZ3Jlc3NjYW52IGNvb3JkcyAkcHJvZ3Jlc3NpdGVtICR4MCAwICR4MSAkaAorICAgICRwcm9ncmVzc2NhbnYgY29vcmRzICRmcHJvZ2l0ZW0gMCAwIFtleHByIHskdyAqICRmcHJvZ2Nvb3JkfV0gJGgKKyAgICAkcHJvZ3Jlc3NjYW52IGNvb3JkcyAkcnByb2dpdGVtIDAgMCBbZXhwciB7JHcgKiAkcnByb2djb29yZH1dICRoCisgICAgc2V0IG5vdyBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgaWYgeyRub3cgPj0gJGxhc3Rwcm9ndXBkYXRlICsgMTAwfSB7CisJc2V0IHByb2d1cGRhdGVwZW5kaW5nIDAKKwl1cGRhdGUKKyAgICB9IGVsc2VpZiB7ISRwcm9ndXBkYXRlcGVuZGluZ30geworCXNldCBwcm9ndXBkYXRlcGVuZGluZyAxCisJYWZ0ZXIgW2V4cHIgeyRsYXN0cHJvZ3VwZGF0ZSArIDEwMCAtICRub3d9XSBkb3Byb2d1cGRhdGUKKyAgICB9Cit9CisKK3Byb2MgZG9wcm9ndXBkYXRlIHt9IHsKKyAgICBnbG9iYWwgbGFzdHByb2d1cGRhdGUgcHJvZ3VwZGF0ZXBlbmRpbmcKKworICAgIGlmIHskcHJvZ3VwZGF0ZXBlbmRpbmd9IHsKKwlzZXQgcHJvZ3VwZGF0ZXBlbmRpbmcgMAorCXNldCBsYXN0cHJvZ3VwZGF0ZSBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisJdXBkYXRlCisgICAgfQorfQorCitwcm9jIGNvbmZpZ19jaGVja190bXBfZXhpc3RzIHt0cmllc19sZWZ0fSB7CisgICAgZ2xvYmFsIGNvbmZpZ19maWxlX3RtcAorCisgICAgaWYge1tmaWxlIGV4aXN0cyAkY29uZmlnX2ZpbGVfdG1wXX0geworCWluY3IgdHJpZXNfbGVmdCAtMQorCWlmIHskdHJpZXNfbGVmdCA+IDB9IHsKKwkgICAgYWZ0ZXIgMTAwIFtsaXN0IGNvbmZpZ19jaGVja190bXBfZXhpc3RzICR0cmllc19sZWZ0XQorCX0gZWxzZSB7CisJICAgIGVycm9yX3BvcHVwICJUaGVyZSBhcHBlYXJzIHRvIGJlIGEgc3RhbGUgJGNvbmZpZ19maWxlX3RtcFwKKyBmaWxlLCB3aGljaCB3aWxsIHByZXZlbnQgZ2l0ayBmcm9tIHNhdmluZyBpdHMgY29uZmlndXJhdGlvbiBvbiBleGl0LlwKKyBQbGVhc2UgcmVtb3ZlIGl0IGlmIGl0IGlzIG5vdCBiZWluZyB1c2VkIGJ5IGFueSBleGlzdGluZyBnaXRrIHByb2Nlc3MuIgorCX0KKyAgICB9Cit9CisKK3Byb2MgY29uZmlnX2luaXRfdHJhY2Uge25hbWV9IHsKKyAgICBnbG9iYWwgY29uZmlnX3ZhcmlhYmxlX2NoYW5nZWQgY29uZmlnX3ZhcmlhYmxlX29yaWdpbmFsCisKKyAgICB1cHZhciAjMCAkbmFtZSB2YXIKKyAgICBzZXQgY29uZmlnX3ZhcmlhYmxlX2NoYW5nZWQoJG5hbWUpIDAKKyAgICBzZXQgY29uZmlnX3ZhcmlhYmxlX29yaWdpbmFsKCRuYW1lKSAkdmFyCit9CisKK3Byb2MgY29uZmlnX3ZhcmlhYmxlX2NoYW5nZV9jYiB7bmFtZSBuYW1lMiBvcH0geworICAgIGdsb2JhbCBjb25maWdfdmFyaWFibGVfY2hhbmdlZCBjb25maWdfdmFyaWFibGVfb3JpZ2luYWwKKworICAgIHVwdmFyICMwICRuYW1lIHZhcgorICAgIGlmIHskb3AgZXEgIndyaXRlIiAmJgorCSghW2luZm8gZXhpc3RzIGNvbmZpZ192YXJpYWJsZV9vcmlnaW5hbCgkbmFtZSldIHx8CisJICRjb25maWdfdmFyaWFibGVfb3JpZ2luYWwoJG5hbWUpIG5lICR2YXIpfSB7CisJc2V0IGNvbmZpZ192YXJpYWJsZV9jaGFuZ2VkKCRuYW1lKSAxCisgICAgfQorfQorCitwcm9jIHNhdmVzdHVmZiB7d30geworICAgIGdsb2JhbCBzdHVmZnNhdmVkCisgICAgZ2xvYmFsIGNvbmZpZ19maWxlIGNvbmZpZ19maWxlX3RtcAorICAgIGdsb2JhbCBjb25maWdfdmFyaWFibGVzIGNvbmZpZ192YXJpYWJsZV9jaGFuZ2VkCisgICAgZ2xvYmFsIHZpZXdjaGFuZ2VkCisKKyAgICB1cHZhciAjMCB2aWV3bmFtZSBjdXJyZW50X3ZpZXduYW1lCisgICAgdXB2YXIgIzAgdmlld2ZpbGVzIGN1cnJlbnRfdmlld2ZpbGVzCisgICAgdXB2YXIgIzAgdmlld2FyZ3MgY3VycmVudF92aWV3YXJncworICAgIHVwdmFyICMwIHZpZXdhcmdzY21kIGN1cnJlbnRfdmlld2FyZ3NjbWQKKyAgICB1cHZhciAjMCB2aWV3cGVybSBjdXJyZW50X3ZpZXdwZXJtCisgICAgdXB2YXIgIzAgbmV4dHZpZXdudW0gY3VycmVudF9uZXh0dmlld251bQorICAgIHVwdmFyICMwIHVzZV90dGsgY3VycmVudF91c2VfdHRrCisKKyAgICBpZiB7JHN0dWZmc2F2ZWR9IHJldHVybgorICAgIGlmIHshW3dpbmZvIHZpZXdhYmxlIC5dfSByZXR1cm4KKyAgICBzZXQgcmVtb3ZlX3RtcCAwCisgICAgaWYge1tjYXRjaCB7CisJc2V0IHRyeV9jb3VudCAwCisJd2hpbGUge1tjYXRjaCB7c2V0IGYgW29wZW4gJGNvbmZpZ19maWxlX3RtcCB7V1JPTkxZIENSRUFUIEVYQ0x9XX1dfSB7CisJICAgIGlmIHtbaW5jciB0cnlfY291bnRdID4gNTB9IHsKKwkJZXJyb3IgIlVuYWJsZSB0byB3cml0ZSBjb25maWcgZmlsZTogJGNvbmZpZ19maWxlX3RtcCBleGlzdHMiCisJICAgIH0KKwkgICAgYWZ0ZXIgMTAwCisJfQorCXNldCByZW1vdmVfdG1wIDEKKwlpZiB7JDo6dGNsX3BsYXRmb3JtKHBsYXRmb3JtKSBlcSB7d2luZG93c319IHsKKwkgICAgZmlsZSBhdHRyaWJ1dGVzICRjb25maWdfZmlsZV90bXAgLWhpZGRlbiB0cnVlCisJfQorCWlmIHtbZmlsZSBleGlzdHMgJGNvbmZpZ19maWxlXX0geworCSAgICBzb3VyY2UgJGNvbmZpZ19maWxlCisJfQorCWZvcmVhY2ggdmFyX25hbWUgJGNvbmZpZ192YXJpYWJsZXMgeworCSAgICB1cHZhciAjMCAkdmFyX25hbWUgdmFyCisJICAgIHVwdmFyIDAgJHZhcl9uYW1lIG9sZF92YXIKKwkgICAgaWYgeyEkY29uZmlnX3ZhcmlhYmxlX2NoYW5nZWQoJHZhcl9uYW1lKSAmJiBbaW5mbyBleGlzdHMgb2xkX3Zhcl19IHsKKwkJcHV0cyAkZiBbbGlzdCBzZXQgJHZhcl9uYW1lICRvbGRfdmFyXQorCSAgICB9IGVsc2UgeworCQlwdXRzICRmIFtsaXN0IHNldCAkdmFyX25hbWUgJHZhcl0KKwkgICAgfQorCX0KKworCXB1dHMgJGYgInNldCBnZW9tZXRyeShtYWluKSBbd20gZ2VvbWV0cnkgLl0iCisJcHV0cyAkZiAic2V0IGdlb21ldHJ5KHN0YXRlKSBbd20gc3RhdGUgLl0iCisJcHV0cyAkZiAic2V0IGdlb21ldHJ5KHRvcHdpZHRoKSBbd2luZm8gd2lkdGggLnRmXSIKKwlwdXRzICRmICJzZXQgZ2VvbWV0cnkodG9waGVpZ2h0KSBbd2luZm8gaGVpZ2h0IC50Zl0iCisJaWYgeyRjdXJyZW50X3VzZV90dGt9IHsKKwkgICAgcHV0cyAkZiAic2V0IGdlb21ldHJ5KHB3c2FzaDApIFwiWy50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNocG9zIDBdIDFcIiIKKwkgICAgcHV0cyAkZiAic2V0IGdlb21ldHJ5KHB3c2FzaDEpIFwiWy50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNocG9zIDFdIDFcIiIKKwl9IGVsc2UgeworCSAgICBwdXRzICRmICJzZXQgZ2VvbWV0cnkocHdzYXNoMCkgXCJbLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2ggY29vcmQgMF1cIiIKKwkgICAgcHV0cyAkZiAic2V0IGdlb21ldHJ5KHB3c2FzaDEpIFwiWy50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNoIGNvb3JkIDFdXCIiCisJfQorCXB1dHMgJGYgInNldCBnZW9tZXRyeShib3R3aWR0aCkgW3dpbmZvIHdpZHRoIC5ibGVmdF0iCisJcHV0cyAkZiAic2V0IGdlb21ldHJ5KGJvdGhlaWdodCkgW3dpbmZvIGhlaWdodCAuYmxlZnRdIgorCisJYXJyYXkgc2V0IHZpZXdfc2F2ZSB7fQorCWFycmF5IHNldCB2aWV3cyB7fQorCWlmIHshW2luZm8gZXhpc3RzIHBlcm12aWV3c119IHsgc2V0IHBlcm12aWV3cyB7fSB9CisJZm9yZWFjaCB2aWV3ICRwZXJtdmlld3MgeworCSAgICBzZXQgdmlld19zYXZlKFtsaW5kZXggJHZpZXcgMF0pIDEKKwkgICAgc2V0IHZpZXdzKFtsaW5kZXggJHZpZXcgMF0pICR2aWV3CisJfQorCXB1dHMgLW5vbmV3bGluZSAkZiAic2V0IHBlcm12aWV3cyB7IgorCWZvciB7c2V0IHYgMX0geyR2IDwgJGN1cnJlbnRfbmV4dHZpZXdudW19IHtpbmNyIHZ9IHsKKwkgICAgaWYgeyR2aWV3Y2hhbmdlZCgkdil9IHsKKwkJaWYgeyRjdXJyZW50X3ZpZXdwZXJtKCR2KX0geworCQkgICAgc2V0IHZpZXdzKCRjdXJyZW50X3ZpZXduYW1lKCR2KSkgW2xpc3QgJGN1cnJlbnRfdmlld25hbWUoJHYpICRjdXJyZW50X3ZpZXdmaWxlcygkdikgJGN1cnJlbnRfdmlld2FyZ3MoJHYpICRjdXJyZW50X3ZpZXdhcmdzY21kKCR2KV0KKwkJfSBlbHNlIHsKKwkJICAgIHNldCB2aWV3X3NhdmUoJGN1cnJlbnRfdmlld25hbWUoJHYpKSAwCisJCX0KKwkgICAgfQorCX0KKwkjIHdyaXRlIG9sZCBhbmQgdXBkYXRlZCB2aWV3IHRvIHRoZWlyIHBsYWNlcyBhbmQgYXBwZW5kIHJlbWFpbmluZyB0byB0aGUgZW5kCisJZm9yZWFjaCB2aWV3ICRwZXJtdmlld3MgeworCSAgICBzZXQgdmlld19uYW1lIFtsaW5kZXggJHZpZXcgMF0KKwkgICAgaWYgeyR2aWV3X3NhdmUoJHZpZXdfbmFtZSl9IHsKKwkJcHV0cyAkZiAieyR2aWV3cygkdmlld19uYW1lKX0iCisJICAgIH0KKwkgICAgdW5zZXQgdmlld3MoJHZpZXdfbmFtZSkKKwl9CisJZm9yZWFjaCB2aWV3X25hbWUgW2FycmF5IG5hbWVzIHZpZXdzXSB7CisJICAgIHB1dHMgJGYgInskdmlld3MoJHZpZXdfbmFtZSl9IgorCX0KKwlwdXRzICRmICJ9IgorCWNsb3NlICRmCisJZmlsZSByZW5hbWUgLWZvcmNlICRjb25maWdfZmlsZV90bXAgJGNvbmZpZ19maWxlCisJc2V0IHJlbW92ZV90bXAgMAorICAgIH0gZXJyXX0geworICAgICAgICBwdXRzICJFcnJvciBzYXZpbmcgY29uZmlnOiAkZXJyIgorICAgIH0KKyAgICBpZiB7JHJlbW92ZV90bXB9IHsKKwlmaWxlIGRlbGV0ZSAtZm9yY2UgJGNvbmZpZ19maWxlX3RtcAorICAgIH0KKyAgICBzZXQgc3R1ZmZzYXZlZCAxCit9CisKK3Byb2MgcmVzaXplY2xpc3RwYW5lcyB7d2luIHd9IHsKKyAgICBnbG9iYWwgb2xkd2lkdGggdXNlX3R0aworICAgIGlmIHtbaW5mbyBleGlzdHMgb2xkd2lkdGgoJHdpbildfSB7CisJaWYgeyR1c2VfdHRrfSB7CisJICAgIHNldCBzMCBbJHdpbiBzYXNocG9zIDBdCisJICAgIHNldCBzMSBbJHdpbiBzYXNocG9zIDFdCisJfSBlbHNlIHsKKwkgICAgc2V0IHMwIFskd2luIHNhc2ggY29vcmQgMF0KKwkgICAgc2V0IHMxIFskd2luIHNhc2ggY29vcmQgMV0KKwl9CisJaWYgeyR3IDwgNjB9IHsKKwkgICAgc2V0IHNhc2gwIFtleHByIHtpbnQoJHcvMiAtIDIpfV0KKwkgICAgc2V0IHNhc2gxIFtleHByIHtpbnQoJHcqNS82IC0gMil9XQorCX0gZWxzZSB7CisJICAgIHNldCBmYWN0b3IgW2V4cHIgezEuMCAqICR3IC8gJG9sZHdpZHRoKCR3aW4pfV0KKwkgICAgc2V0IHNhc2gwIFtleHByIHtpbnQoJGZhY3RvciAqIFtsaW5kZXggJHMwIDBdKX1dCisJICAgIHNldCBzYXNoMSBbZXhwciB7aW50KCRmYWN0b3IgKiBbbGluZGV4ICRzMSAwXSl9XQorCSAgICBpZiB7JHNhc2gwIDwgMzB9IHsKKwkJc2V0IHNhc2gwIDMwCisJICAgIH0KKwkgICAgaWYgeyRzYXNoMSA8ICRzYXNoMCArIDIwfSB7CisJCXNldCBzYXNoMSBbZXhwciB7JHNhc2gwICsgMjB9XQorCSAgICB9CisJICAgIGlmIHskc2FzaDEgPiAkdyAtIDEwfSB7CisJCXNldCBzYXNoMSBbZXhwciB7JHcgLSAxMH1dCisJCWlmIHskc2FzaDAgPiAkc2FzaDEgLSAyMH0geworCQkgICAgc2V0IHNhc2gwIFtleHByIHskc2FzaDEgLSAyMH1dCisJCX0KKwkgICAgfQorCX0KKwlpZiB7JHVzZV90dGt9IHsKKwkgICAgJHdpbiBzYXNocG9zIDAgJHNhc2gwCisJICAgICR3aW4gc2FzaHBvcyAxICRzYXNoMQorCX0gZWxzZSB7CisJICAgICR3aW4gc2FzaCBwbGFjZSAwICRzYXNoMCBbbGluZGV4ICRzMCAxXQorCSAgICAkd2luIHNhc2ggcGxhY2UgMSAkc2FzaDEgW2xpbmRleCAkczEgMV0KKwl9CisgICAgfQorICAgIHNldCBvbGR3aWR0aCgkd2luKSAkdworfQorCitwcm9jIHJlc2l6ZWNkZXRwYW5lcyB7d2luIHd9IHsKKyAgICBnbG9iYWwgb2xkd2lkdGggdXNlX3R0aworICAgIGlmIHtbaW5mbyBleGlzdHMgb2xkd2lkdGgoJHdpbildfSB7CisJaWYgeyR1c2VfdHRrfSB7CisJICAgIHNldCBzMCBbJHdpbiBzYXNocG9zIDBdCisJfSBlbHNlIHsKKwkgICAgc2V0IHMwIFskd2luIHNhc2ggY29vcmQgMF0KKwl9CisJaWYgeyR3IDwgNjB9IHsKKwkgICAgc2V0IHNhc2gwIFtleHByIHtpbnQoJHcqMy80IC0gMil9XQorCX0gZWxzZSB7CisJICAgIHNldCBmYWN0b3IgW2V4cHIgezEuMCAqICR3IC8gJG9sZHdpZHRoKCR3aW4pfV0KKwkgICAgc2V0IHNhc2gwIFtleHByIHtpbnQoJGZhY3RvciAqIFtsaW5kZXggJHMwIDBdKX1dCisJICAgIGlmIHskc2FzaDAgPCA0NX0geworCQlzZXQgc2FzaDAgNDUKKwkgICAgfQorCSAgICBpZiB7JHNhc2gwID4gJHcgLSAxNX0geworCQlzZXQgc2FzaDAgW2V4cHIgeyR3IC0gMTV9XQorCSAgICB9CisJfQorCWlmIHskdXNlX3R0a30geworCSAgICAkd2luIHNhc2hwb3MgMCAkc2FzaDAKKwl9IGVsc2UgeworCSAgICAkd2luIHNhc2ggcGxhY2UgMCAkc2FzaDAgW2xpbmRleCAkczAgMV0KKwl9CisgICAgfQorICAgIHNldCBvbGR3aWR0aCgkd2luKSAkdworfQorCitwcm9jIGFsbGNhbnZzIGFyZ3MgeworICAgIGdsb2JhbCBjYW52IGNhbnYyIGNhbnYzCisgICAgZXZhbCAkY2FudiAkYXJncworICAgIGV2YWwgJGNhbnYyICRhcmdzCisgICAgZXZhbCAkY2FudjMgJGFyZ3MKK30KKworcHJvYyBiaW5kYWxsIHtldmVudCBhY3Rpb259IHsKKyAgICBnbG9iYWwgY2FudiBjYW52MiBjYW52MworICAgIGJpbmQgJGNhbnYgJGV2ZW50ICRhY3Rpb24KKyAgICBiaW5kICRjYW52MiAkZXZlbnQgJGFjdGlvbgorICAgIGJpbmQgJGNhbnYzICRldmVudCAkYWN0aW9uCit9CisKK3Byb2MgYWJvdXQge30geworICAgIGdsb2JhbCBiZ2NvbG9yIE5TCisgICAgc2V0IHcgLmFib3V0CisgICAgaWYge1t3aW5mbyBleGlzdHMgJHddfSB7CisJcmFpc2UgJHcKKwlyZXR1cm4KKyAgICB9CisgICAgdHRrX3RvcGxldmVsICR3CisgICAgd20gdGl0bGUgJHcgW21jICJBYm91dCBnaXRrIl0KKyAgICBtYWtlX3RyYW5zaWVudCAkdyAuCisgICAgbWVzc2FnZSAkdy5tIC10ZXh0IFttYyAiCitHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXQKKworQ29weXJpZ2h0IFx1MDBhOSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXMKKworVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSJdIFwKKwkgICAgLWp1c3RpZnkgY2VudGVyIC1hc3BlY3QgNDAwIC1ib3JkZXIgMiAtYmcgJGJnY29sb3IgLXJlbGllZiBncm9vdmUKKyAgICBwYWNrICR3Lm0gLXNpZGUgdG9wIC1maWxsIHggLXBhZHggMiAtcGFkeSAyCisgICAgJHtOU306OmJ1dHRvbiAkdy5vayAtdGV4dCBbbWMgIkNsb3NlIl0gLWNvbW1hbmQgImRlc3Ryb3kgJHciIC1kZWZhdWx0IGFjdGl2ZQorICAgIHBhY2sgJHcub2sgLXNpZGUgYm90dG9tCisgICAgYmluZCAkdyA8VmlzaWJpbGl0eT4gImZvY3VzICR3Lm9rIgorICAgIGJpbmQgJHcgPEtleS1Fc2NhcGU+ICJkZXN0cm95ICR3IgorICAgIGJpbmQgJHcgPEtleS1SZXR1cm4+ICJkZXN0cm95ICR3IgorICAgIHRrOjpQbGFjZVdpbmRvdyAkdyB3aWRnZXQgLgorfQorCitwcm9jIGtleXMge30geworICAgIGdsb2JhbCBiZ2NvbG9yIE5TCisgICAgc2V0IHcgLmtleXMKKyAgICBpZiB7W3dpbmZvIGV4aXN0cyAkd119IHsKKwlyYWlzZSAkdworCXJldHVybgorICAgIH0KKyAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEge2FxdWF9fSB7CisJc2V0IE0xVCBDbWQKKyAgICB9IGVsc2UgeworCXNldCBNMVQgQ3RybAorICAgIH0KKyAgICB0dGtfdG9wbGV2ZWwgJHcKKyAgICB3bSB0aXRsZSAkdyBbbWMgIkdpdGsga2V5IGJpbmRpbmdzIl0KKyAgICBtYWtlX3RyYW5zaWVudCAkdyAuCisgICAgbWVzc2FnZSAkdy5tIC10ZXh0ICIKK1ttYyAiR2l0ayBrZXkgYmluZGluZ3M6Il0KKworW21jICI8JXMtUT4JCVF1aXQiICRNMVRdCitbbWMgIjwlcy1XPgkJQ2xvc2Ugd2luZG93IiAkTTFUXQorW21jICI8SG9tZT4JCU1vdmUgdG8gZmlyc3QgY29tbWl0Il0KK1ttYyAiPEVuZD4JCU1vdmUgdG8gbGFzdCBjb21taXQiXQorW21jICI8VXA+LCBwLCBrCU1vdmUgdXAgb25lIGNvbW1pdCJdCitbbWMgIjxEb3duPiwgbiwgaglNb3ZlIGRvd24gb25lIGNvbW1pdCJdCitbbWMgIjxMZWZ0PiwgeiwgaAlHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCJdCitbbWMgIjxSaWdodD4sIHgsIGwJR28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiXQorW21jICI8JXMtbj4JR28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IiAkTTFUXQorW21jICI8UGFnZVVwPglNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0Il0KK1ttYyAiPFBhZ2VEb3duPglNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiXQorW21jICI8JXMtSG9tZT4JU2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIgJE0xVF0KK1ttYyAiPCVzLUVuZD4JU2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIgJE0xVF0KK1ttYyAiPCVzLVVwPglTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiICRNMVRdCitbbWMgIjwlcy1Eb3duPglTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIgJE0xVF0KK1ttYyAiPCVzLVBhZ2VVcD4JU2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIiAkTTFUXQorW21jICI8JXMtUGFnZURvd24+CVNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIiAkTTFUXQorW21jICI8U2hpZnQtVXA+CUZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSJdCitbbWMgIjxTaGlmdC1Eb3duPglGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiXQorW21jICI8RGVsZXRlPiwgYglTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIl0KK1ttYyAiPEJhY2tzcGFjZT4JU2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSJdCitbbWMgIjxTcGFjZT4JCVNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSJdCitbbWMgInUJCVNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiXQorW21jICJkCQlTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiXQorW21jICI8JXMtRj4JCUZpbmQiICRNMVRdCitbbWMgIjwlcy1HPgkJTW92ZSB0byBuZXh0IGZpbmQgaGl0IiAkTTFUXQorW21jICI8UmV0dXJuPglNb3ZlIHRvIG5leHQgZmluZCBoaXQiXQorW21jICJnCQlHbyB0byBjb21taXQiXQorW21jICIvCQlGb2N1cyB0aGUgc2VhcmNoIGJveCJdCitbbWMgIj8JCU1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiXQorW21jICJmCQlTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSJdCitbbWMgIjwlcy1TPgkJU2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciICRNMVRdCitbbWMgIjwlcy1SPgkJU2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IiAkTTFUXQorW21jICI8JXMtS1ArPglJbmNyZWFzZSBmb250IHNpemUiICRNMVRdCitbbWMgIjwlcy1wbHVzPglJbmNyZWFzZSBmb250IHNpemUiICRNMVRdCitbbWMgIjwlcy1LUC0+CURlY3JlYXNlIGZvbnQgc2l6ZSIgJE0xVF0KK1ttYyAiPCVzLW1pbnVzPglEZWNyZWFzZSBmb250IHNpemUiICRNMVRdCitbbWMgIjxGNT4JCVVwZGF0ZSJdCisiIFwKKwkgICAgLWp1c3RpZnkgbGVmdCAtYmcgJGJnY29sb3IgLWJvcmRlciAyIC1yZWxpZWYgZ3Jvb3ZlCisgICAgcGFjayAkdy5tIC1zaWRlIHRvcCAtZmlsbCBib3RoIC1wYWR4IDIgLXBhZHkgMgorICAgICR7TlN9OjpidXR0b24gJHcub2sgLXRleHQgW21jICJDbG9zZSJdIC1jb21tYW5kICJkZXN0cm95ICR3IiAtZGVmYXVsdCBhY3RpdmUKKyAgICBiaW5kICR3IDxLZXktRXNjYXBlPiBbbGlzdCBkZXN0cm95ICR3XQorICAgIHBhY2sgJHcub2sgLXNpZGUgYm90dG9tCisgICAgYmluZCAkdyA8VmlzaWJpbGl0eT4gImZvY3VzICR3Lm9rIgorICAgIGJpbmQgJHcgPEtleS1Fc2NhcGU+ICJkZXN0cm95ICR3IgorICAgIGJpbmQgJHcgPEtleS1SZXR1cm4+ICJkZXN0cm95ICR3IgorfQorCisjIFByb2NlZHVyZXMgZm9yIG1hbmlwdWxhdGluZyB0aGUgZmlsZSBsaXN0IHdpbmRvdyBhdCB0aGUKKyMgYm90dG9tIHJpZ2h0IG9mIHRoZSBvdmVyYWxsIHdpbmRvdy4KKworcHJvYyB0cmVldmlldyB7dyBsIG9wZW5sZXZzfSB7CisgICAgZ2xvYmFsIHRyZWVjb250ZW50cyB0cmVlZGlyb3BlbiB0cmVlaGVpZ2h0IHRyZWVwYXJlbnQgdHJlZWluZGV4CisKKyAgICBzZXQgaXggMAorICAgIHNldCB0cmVlaW5kZXgoKSAwCisgICAgc2V0IGxldiAwCisgICAgc2V0IHByZWZpeCB7fQorICAgIHNldCBwcmVmaXhlbmQgLTEKKyAgICBzZXQgcHJlZmVuZHN0YWNrIHt9CisgICAgc2V0IGh0c3RhY2sge30KKyAgICBzZXQgaHQgMAorICAgIHNldCB0cmVlY29udGVudHMoKSB7fQorICAgICR3IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgIGZvcmVhY2ggZiAkbCB7CisJd2hpbGUge1tzdHJpbmcgcmFuZ2UgJGYgMCAkcHJlZml4ZW5kXSBuZSAkcHJlZml4fSB7CisJICAgIGlmIHskbGV2IDw9ICRvcGVubGV2c30geworCQkkdyBtYXJrIHNldCBlOiR0cmVlaW5kZXgoJHByZWZpeCkgImVuZCAtMWMiCisJCSR3IG1hcmsgZ3Jhdml0eSBlOiR0cmVlaW5kZXgoJHByZWZpeCkgbGVmdAorCSAgICB9CisJICAgIHNldCB0cmVlaGVpZ2h0KCRwcmVmaXgpICRodAorCSAgICBpbmNyIGh0IFtsaW5kZXggJGh0c3RhY2sgZW5kXQorCSAgICBzZXQgaHRzdGFjayBbbHJlcGxhY2UgJGh0c3RhY2sgZW5kIGVuZF0KKwkgICAgc2V0IHByZWZpeGVuZCBbbGluZGV4ICRwcmVmZW5kc3RhY2sgZW5kXQorCSAgICBzZXQgcHJlZmVuZHN0YWNrIFtscmVwbGFjZSAkcHJlZmVuZHN0YWNrIGVuZCBlbmRdCisJICAgIHNldCBwcmVmaXggW3N0cmluZyByYW5nZSAkcHJlZml4IDAgJHByZWZpeGVuZF0KKwkgICAgaW5jciBsZXYgLTEKKwl9CisJc2V0IHRhaWwgW3N0cmluZyByYW5nZSAkZiBbZXhwciB7JHByZWZpeGVuZCsxfV0gZW5kXQorCXdoaWxlIHtbc2V0IHNsYXNoIFtzdHJpbmcgZmlyc3QgIi8iICR0YWlsXV0gPj0gMH0geworCSAgICBsYXBwZW5kIGh0c3RhY2sgJGh0CisJICAgIHNldCBodCAwCisJICAgIGxhcHBlbmQgcHJlZmVuZHN0YWNrICRwcmVmaXhlbmQKKwkgICAgaW5jciBwcmVmaXhlbmQgW2V4cHIgeyRzbGFzaCArIDF9XQorCSAgICBzZXQgZCBbc3RyaW5nIHJhbmdlICR0YWlsIDAgJHNsYXNoXQorCSAgICBsYXBwZW5kIHRyZWVjb250ZW50cygkcHJlZml4KSAkZAorCSAgICBzZXQgb2xkcHJlZml4ICRwcmVmaXgKKwkgICAgYXBwZW5kIHByZWZpeCAkZAorCSAgICBzZXQgdHJlZWNvbnRlbnRzKCRwcmVmaXgpIHt9CisJICAgIHNldCB0cmVlaW5kZXgoJHByZWZpeCkgW2luY3IgaXhdCisJICAgIHNldCB0cmVlcGFyZW50KCRwcmVmaXgpICRvbGRwcmVmaXgKKwkgICAgc2V0IHRhaWwgW3N0cmluZyByYW5nZSAkdGFpbCBbZXhwciB7JHNsYXNoKzF9XSBlbmRdCisJICAgIGlmIHskbGV2IDw9ICRvcGVubGV2c30geworCQlzZXQgaHQgMQorCQlzZXQgdHJlZWRpcm9wZW4oJHByZWZpeCkgW2V4cHIgeyRsZXYgPCAkb3BlbmxldnN9XQorCQlzZXQgYm0gW2V4cHIgeyRsZXYgPT0gJG9wZW5sZXZzPyAidHJpLXJ0IjogInRyaS1kbiJ9XQorCQkkdyBtYXJrIHNldCBkOiRpeCAiZW5kIC0xYyIKKwkJJHcgbWFyayBncmF2aXR5IGQ6JGl4IGxlZnQKKwkJc2V0IHN0ciAiXG4iCisJCWZvciB7c2V0IGkgMH0geyRpIDwgJGxldn0ge2luY3IgaX0ge2FwcGVuZCBzdHIgIlx0In0KKwkJJHcgaW5zZXJ0IGVuZCAkc3RyCisJCSR3IGltYWdlIGNyZWF0ZSBlbmQgLWFsaWduIGNlbnRlciAtaW1hZ2UgJGJtIC1wYWR4IDEgXAorCQkgICAgLW5hbWUgYTokaXgKKwkJJHcgaW5zZXJ0IGVuZCAkZCBbaGlnaGxpZ2h0X3RhZyAkcHJlZml4XQorCQkkdyBtYXJrIHNldCBzOiRpeCAiZW5kIC0xYyIKKwkJJHcgbWFyayBncmF2aXR5IHM6JGl4IGxlZnQKKwkgICAgfQorCSAgICBpbmNyIGxldgorCX0KKwlpZiB7JHRhaWwgbmUge319IHsKKwkgICAgaWYgeyRsZXYgPD0gJG9wZW5sZXZzfSB7CisJCWluY3IgaHQKKwkJc2V0IHN0ciAiXG4iCisJCWZvciB7c2V0IGkgMH0geyRpIDwgJGxldn0ge2luY3IgaX0ge2FwcGVuZCBzdHIgIlx0In0KKwkJJHcgaW5zZXJ0IGVuZCAkc3RyCisJCSR3IGluc2VydCBlbmQgJHRhaWwgW2hpZ2hsaWdodF90YWcgJGZdCisJICAgIH0KKwkgICAgbGFwcGVuZCB0cmVlY29udGVudHMoJHByZWZpeCkgJHRhaWwKKwl9CisgICAgfQorICAgIHdoaWxlIHskaHRzdGFjayBuZSB7fX0geworCXNldCB0cmVlaGVpZ2h0KCRwcmVmaXgpICRodAorCWluY3IgaHQgW2xpbmRleCAkaHRzdGFjayBlbmRdCisJc2V0IGh0c3RhY2sgW2xyZXBsYWNlICRodHN0YWNrIGVuZCBlbmRdCisJc2V0IHByZWZpeGVuZCBbbGluZGV4ICRwcmVmZW5kc3RhY2sgZW5kXQorCXNldCBwcmVmZW5kc3RhY2sgW2xyZXBsYWNlICRwcmVmZW5kc3RhY2sgZW5kIGVuZF0KKwlzZXQgcHJlZml4IFtzdHJpbmcgcmFuZ2UgJHByZWZpeCAwICRwcmVmaXhlbmRdCisgICAgfQorICAgICR3IGNvbmYgLXN0YXRlIGRpc2FibGVkCit9CisKK3Byb2MgbGluZXRvZWx0IHtsfSB7CisgICAgZ2xvYmFsIHRyZWVoZWlnaHQgdHJlZWNvbnRlbnRzCisKKyAgICBzZXQgeSAyCisgICAgc2V0IHByZWZpeCB7fQorICAgIHdoaWxlIHsxfSB7CisJZm9yZWFjaCBlICR0cmVlY29udGVudHMoJHByZWZpeCkgeworCSAgICBpZiB7JHkgPT0gJGx9IHsKKwkJcmV0dXJuICIkcHJlZml4JGUiCisJICAgIH0KKwkgICAgc2V0IG4gMQorCSAgICBpZiB7W3N0cmluZyBpbmRleCAkZSBlbmRdIGVxICIvIn0geworCQlzZXQgbiAkdHJlZWhlaWdodCgkcHJlZml4JGUpCisJCWlmIHskeSArICRuID4gJGx9IHsKKwkJICAgIGFwcGVuZCBwcmVmaXggJGUKKwkJICAgIGluY3IgeQorCQkgICAgYnJlYWsKKwkJfQorCSAgICB9CisJICAgIGluY3IgeSAkbgorCX0KKyAgICB9Cit9CisKK3Byb2MgaGlnaGxpZ2h0X3RyZWUge3kgcHJlZml4fSB7CisgICAgZ2xvYmFsIHRyZWVoZWlnaHQgdHJlZWNvbnRlbnRzIGNmbGlzdAorCisgICAgZm9yZWFjaCBlICR0cmVlY29udGVudHMoJHByZWZpeCkgeworCXNldCBwYXRoICRwcmVmaXgkZQorCWlmIHtbaGlnaGxpZ2h0X3RhZyAkcGF0aF0gbmUge319IHsKKwkgICAgJGNmbGlzdCB0YWcgYWRkIGJvbGQgJHkuMCAiJHkuMCBsaW5lZW5kIgorCX0KKwlpbmNyIHkKKwlpZiB7W3N0cmluZyBpbmRleCAkZSBlbmRdIGVxICIvIiAmJiAkdHJlZWhlaWdodCgkcGF0aCkgPiAxfSB7CisJICAgIHNldCB5IFtoaWdobGlnaHRfdHJlZSAkeSAkcGF0aF0KKwl9CisgICAgfQorICAgIHJldHVybiAkeQorfQorCitwcm9jIHRyZWVjbG9zZWRpciB7dyBkaXJ9IHsKKyAgICBnbG9iYWwgdHJlZWRpcm9wZW4gdHJlZWhlaWdodCB0cmVlcGFyZW50IHRyZWVpbmRleAorCisgICAgc2V0IGl4ICR0cmVlaW5kZXgoJGRpcikKKyAgICAkdyBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICAkdyBkZWxldGUgczokaXggZTokaXgKKyAgICBzZXQgdHJlZWRpcm9wZW4oJGRpcikgMAorICAgICR3IGltYWdlIGNvbmZpZ3VyZSBhOiRpeCAtaW1hZ2UgdHJpLXJ0CisgICAgJHcgY29uZiAtc3RhdGUgZGlzYWJsZWQKKyAgICBzZXQgbiBbZXhwciB7MSAtICR0cmVlaGVpZ2h0KCRkaXIpfV0KKyAgICB3aGlsZSB7JGRpciBuZSB7fX0geworCWluY3IgdHJlZWhlaWdodCgkZGlyKSAkbgorCXNldCBkaXIgJHRyZWVwYXJlbnQoJGRpcikKKyAgICB9Cit9CisKK3Byb2MgdHJlZW9wZW5kaXIge3cgZGlyfSB7CisgICAgZ2xvYmFsIHRyZWVkaXJvcGVuIHRyZWVoZWlnaHQgdHJlZXBhcmVudCB0cmVlY29udGVudHMgdHJlZWluZGV4CisKKyAgICBzZXQgaXggJHRyZWVpbmRleCgkZGlyKQorICAgICR3IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgICR3IGltYWdlIGNvbmZpZ3VyZSBhOiRpeCAtaW1hZ2UgdHJpLWRuCisgICAgJHcgbWFyayBzZXQgZTokaXggczokaXgKKyAgICAkdyBtYXJrIGdyYXZpdHkgZTokaXggcmlnaHQKKyAgICBzZXQgbGV2IDAKKyAgICBzZXQgc3RyICJcbiIKKyAgICBzZXQgbiBbbGxlbmd0aCAkdHJlZWNvbnRlbnRzKCRkaXIpXQorICAgIGZvciB7c2V0IHggJGRpcn0geyR4IG5lIHt9fSB7c2V0IHggJHRyZWVwYXJlbnQoJHgpfSB7CisJaW5jciBsZXYKKwlhcHBlbmQgc3RyICJcdCIKKwlpbmNyIHRyZWVoZWlnaHQoJHgpICRuCisgICAgfQorICAgIGZvcmVhY2ggZSAkdHJlZWNvbnRlbnRzKCRkaXIpIHsKKwlzZXQgZGUgJGRpciRlCisJaWYge1tzdHJpbmcgaW5kZXggJGUgZW5kXSBlcSAiLyJ9IHsKKwkgICAgc2V0IGl5ICR0cmVlaW5kZXgoJGRlKQorCSAgICAkdyBtYXJrIHNldCBkOiRpeSBlOiRpeAorCSAgICAkdyBtYXJrIGdyYXZpdHkgZDokaXkgbGVmdAorCSAgICAkdyBpbnNlcnQgZTokaXggJHN0cgorCSAgICBzZXQgdHJlZWRpcm9wZW4oJGRlKSAwCisJICAgICR3IGltYWdlIGNyZWF0ZSBlOiRpeCAtYWxpZ24gY2VudGVyIC1pbWFnZSB0cmktcnQgLXBhZHggMSBcCisJCS1uYW1lIGE6JGl5CisJICAgICR3IGluc2VydCBlOiRpeCAkZSBbaGlnaGxpZ2h0X3RhZyAkZGVdCisJICAgICR3IG1hcmsgc2V0IHM6JGl5IGU6JGl4CisJICAgICR3IG1hcmsgZ3Jhdml0eSBzOiRpeSBsZWZ0CisJICAgIHNldCB0cmVlaGVpZ2h0KCRkZSkgMQorCX0gZWxzZSB7CisJICAgICR3IGluc2VydCBlOiRpeCAkc3RyCisJICAgICR3IGluc2VydCBlOiRpeCAkZSBbaGlnaGxpZ2h0X3RhZyAkZGVdCisJfQorICAgIH0KKyAgICAkdyBtYXJrIGdyYXZpdHkgZTokaXggcmlnaHQKKyAgICAkdyBjb25mIC1zdGF0ZSBkaXNhYmxlZAorICAgIHNldCB0cmVlZGlyb3BlbigkZGlyKSAxCisgICAgc2V0IHRvcCBbbGluZGV4IFtzcGxpdCBbJHcgaW5kZXggQDAsMF0gLl0gMF0KKyAgICBzZXQgaHQgWyR3IGNnZXQgLWhlaWdodF0KKyAgICBzZXQgbCBbbGluZGV4IFtzcGxpdCBbJHcgaW5kZXggczokaXhdIC5dIDBdCisgICAgaWYgeyRsIDwgJHRvcH0geworCSR3IHl2aWV3ICRsLjAKKyAgICB9IGVsc2VpZiB7JGwgKyAkbiArIDEgPiAkdG9wICsgJGh0fSB7CisJc2V0IHRvcCBbZXhwciB7JGwgKyAkbiArIDIgLSAkaHR9XQorCWlmIHskbCA8ICR0b3B9IHsKKwkgICAgc2V0IHRvcCAkbAorCX0KKwkkdyB5dmlldyAkdG9wLjAKKyAgICB9Cit9CisKK3Byb2MgdHJlZWNsaWNrIHt3IHggeX0geworICAgIGdsb2JhbCB0cmVlZGlyb3BlbiBjbWl0bW9kZSBjdGV4dCBjZmxpc3QgY2ZsaXN0X3RvcAorCisgICAgaWYgeyRjbWl0bW9kZSBuZSAidHJlZSJ9IHJldHVybgorICAgIGlmIHshW2luZm8gZXhpc3RzIGNmbGlzdF90b3BdfSByZXR1cm4KKyAgICBzZXQgbCBbbGluZGV4IFtzcGxpdCBbJHcgaW5kZXggIkAkeCwkeSJdICIuIl0gMF0KKyAgICAkY2ZsaXN0IHRhZyByZW1vdmUgaGlnaGxpZ2h0ICRjZmxpc3RfdG9wLjAgIiRjZmxpc3RfdG9wLjAgbGluZWVuZCIKKyAgICAkY2ZsaXN0IHRhZyBhZGQgaGlnaGxpZ2h0ICRsLjAgIiRsLjAgbGluZWVuZCIKKyAgICBzZXQgY2ZsaXN0X3RvcCAkbAorICAgIGlmIHskbCA9PSAxfSB7CisJJGN0ZXh0IHl2aWV3IDEuMAorCXJldHVybgorICAgIH0KKyAgICBzZXQgZSBbbGluZXRvZWx0ICRsXQorICAgIGlmIHtbc3RyaW5nIGluZGV4ICRlIGVuZF0gbmUgIi8ifSB7CisJc2hvd2ZpbGUgJGUKKyAgICB9IGVsc2VpZiB7JHRyZWVkaXJvcGVuKCRlKX0geworCXRyZWVjbG9zZWRpciAkdyAkZQorICAgIH0gZWxzZSB7CisJdHJlZW9wZW5kaXIgJHcgJGUKKyAgICB9Cit9CisKK3Byb2Mgc2V0ZmlsZWxpc3Qge2lkfSB7CisgICAgZ2xvYmFsIHRyZWVmaWxlbGlzdCBjZmxpc3QganVtcF90b19oZXJlCisKKyAgICB0cmVldmlldyAkY2ZsaXN0ICR0cmVlZmlsZWxpc3QoJGlkKSAwCisgICAgaWYgeyRqdW1wX3RvX2hlcmUgbmUge319IHsKKwlzZXQgZiBbbGluZGV4ICRqdW1wX3RvX2hlcmUgMF0KKwlpZiB7W2xzZWFyY2ggLWV4YWN0ICR0cmVlZmlsZWxpc3QoJGlkKSAkZl0gPj0gMH0geworCSAgICBzaG93ZmlsZSAkZgorCX0KKyAgICB9Cit9CisKK2ltYWdlIGNyZWF0ZSBiaXRtYXAgdHJpLXJ0IC1iYWNrZ3JvdW5kIGJsYWNrIC1mb3JlZ3JvdW5kIGJsdWUgLWRhdGEgeworICAgICNkZWZpbmUgdHJpLXJ0X3dpZHRoIDEzCisgICAgI2RlZmluZSB0cmktcnRfaGVpZ2h0IDEzCisgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgdHJpLXJ0X2JpdHNbXSA9IHsKKyAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDMwLCAweDAwLCAweDcwLCAweDAwLCAweGYwLCAweDAwLAorICAgICAgIDB4ZjAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgMHgwMCwgMHgwMH07Cit9IC1tYXNrZGF0YSB7CisgICAgI2RlZmluZSB0cmktcnQtbWFza193aWR0aCAxMworICAgICNkZWZpbmUgdHJpLXJ0LW1hc2tfaGVpZ2h0IDEzCisgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgdHJpLXJ0LW1hc2tfYml0c1tdID0geworICAgICAgIDB4MDgsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MzgsIDB4MDAsIDB4NzgsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4ZjgsIDB4MDEsCisgICAgICAgMHhmOCwgMHgwMywgMHhmOCwgMHgwMSwgMHhmOCwgMHgwMCwgMHg3OCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgxOCwgMHgwMCwKKyAgICAgICAweDA4LCAweDAwfTsKK30KK2ltYWdlIGNyZWF0ZSBiaXRtYXAgdHJpLWRuIC1iYWNrZ3JvdW5kIGJsYWNrIC1mb3JlZ3JvdW5kIGJsdWUgLWRhdGEgeworICAgICNkZWZpbmUgdHJpLWRuX3dpZHRoIDEzCisgICAgI2RlZmluZSB0cmktZG5faGVpZ2h0IDEzCisgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgdHJpLWRuX2JpdHNbXSA9IHsKKyAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDA3LCAweGY4LCAweDAzLAorICAgICAgIDB4ZjAsIDB4MDEsIDB4ZTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgMHgwMCwgMHgwMH07Cit9IC1tYXNrZGF0YSB7CisgICAgI2RlZmluZSB0cmktZG4tbWFza193aWR0aCAxMworICAgICNkZWZpbmUgdHJpLWRuLW1hc2tfaGVpZ2h0IDEzCisgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgdHJpLWRuLW1hc2tfYml0c1tdID0geworICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MWYsIDB4ZmUsIDB4MGYsIDB4ZmMsIDB4MDcsCisgICAgICAgMHhmOCwgMHgwMywgMHhmMCwgMHgwMSwgMHhlMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgICAweDAwLCAweDAwfTsKK30KKworaW1hZ2UgY3JlYXRlIGJpdG1hcCByZWZpY29uLVQgLWJhY2tncm91bmQgYmxhY2sgLWZvcmVncm91bmQgeWVsbG93IC1kYXRhIHsKKyAgICAjZGVmaW5lIHRhZ2ljb25fd2lkdGggMTMKKyAgICAjZGVmaW5lIHRhZ2ljb25faGVpZ2h0IDkKKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciB0YWdpY29uX2JpdHNbXSA9IHsKKyAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDA3LCAweGY4LCAweDA3LAorICAgICAgIDB4ZmMsIDB4MDcsIDB4ZjgsIDB4MDcsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworfSAtbWFza2RhdGEgeworICAgICNkZWZpbmUgdGFnaWNvbi1tYXNrX3dpZHRoIDEzCisgICAgI2RlZmluZSB0YWdpY29uLW1hc2tfaGVpZ2h0IDkKKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciB0YWdpY29uLW1hc2tfYml0c1tdID0geworICAgICAgIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MGYsIDB4ZjgsIDB4MGYsIDB4ZmMsIDB4MGYsCisgICAgICAgMHhmZSwgMHgwZiwgMHhmYywgMHgwZiwgMHhmOCwgMHgwZiwgMHhmMCwgMHgwZiwgMHgwMCwgMHgwMH07Cit9CitzZXQgcmVjdGRhdGEgeworICAgICNkZWZpbmUgaGVhZGljb25fd2lkdGggMTMKKyAgICAjZGVmaW5lIGhlYWRpY29uX2hlaWdodCA5CisgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaGVhZGljb25fYml0c1tdID0geworICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDcsIDB4ZjgsIDB4MDcsCisgICAgICAgMHhmOCwgMHgwNywgMHhmOCwgMHgwNywgMHhmOCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07Cit9CitzZXQgcmVjdG1hc2sgeworICAgICNkZWZpbmUgaGVhZGljb24tbWFza193aWR0aCAxMworICAgICNkZWZpbmUgaGVhZGljb24tbWFza19oZWlnaHQgOQorICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGhlYWRpY29uLW1hc2tfYml0c1tdID0geworICAgICAgIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MGYsIDB4ZmMsIDB4MGYsIDB4ZmMsIDB4MGYsCisgICAgICAgMHhmYywgMHgwZiwgMHhmYywgMHgwZiwgMHhmYywgMHgwZiwgMHhmYywgMHgwZiwgMHgwMCwgMHgwMH07Cit9CitpbWFnZSBjcmVhdGUgYml0bWFwIHJlZmljb24tSCAtYmFja2dyb3VuZCBibGFjayAtZm9yZWdyb3VuZCAiIzAwZmYwMCIgXAorICAgIC1kYXRhICRyZWN0ZGF0YSAtbWFza2RhdGEgJHJlY3RtYXNrCitpbWFnZSBjcmVhdGUgYml0bWFwIHJlZmljb24tUiAtYmFja2dyb3VuZCBibGFjayAtZm9yZWdyb3VuZCAiI2ZmZGRhYSIgXAorICAgIC1kYXRhICRyZWN0ZGF0YSAtbWFza2RhdGEgJHJlY3RtYXNrCitpbWFnZSBjcmVhdGUgYml0bWFwIHJlZmljb24tbyAtYmFja2dyb3VuZCBibGFjayAtZm9yZWdyb3VuZCAiI2RkZGRmZiIgXAorICAgIC1kYXRhICRyZWN0ZGF0YSAtbWFza2RhdGEgJHJlY3RtYXNrCisKK3Byb2MgaW5pdF9mbGlzdCB7Zmlyc3R9IHsKKyAgICBnbG9iYWwgY2ZsaXN0IGNmbGlzdF90b3AgZGlmZmZpbGVzdGFydAorCisgICAgJGNmbGlzdCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICAkY2ZsaXN0IGRlbGV0ZSAwLjAgZW5kCisgICAgaWYgeyRmaXJzdCBuZSB7fX0geworCSRjZmxpc3QgaW5zZXJ0IGVuZCAkZmlyc3QKKwlzZXQgY2ZsaXN0X3RvcCAxCisJJGNmbGlzdCB0YWcgYWRkIGhpZ2hsaWdodCAxLjAgIjEuMCBsaW5lZW5kIgorICAgIH0gZWxzZSB7CisJdW5zZXQgLW5vY29tcGxhaW4gY2ZsaXN0X3RvcAorICAgIH0KKyAgICAkY2ZsaXN0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisgICAgc2V0IGRpZmZmaWxlc3RhcnQge30KK30KKworcHJvYyBoaWdobGlnaHRfdGFnIHtmfSB7CisgICAgZ2xvYmFsIGhpZ2hsaWdodF9wYXRocworCisgICAgZm9yZWFjaCBwICRoaWdobGlnaHRfcGF0aHMgeworCWlmIHtbc3RyaW5nIG1hdGNoICRwICRmXX0geworCSAgICByZXR1cm4gImJvbGQiCisJfQorICAgIH0KKyAgICByZXR1cm4ge30KK30KKworcHJvYyBoaWdobGlnaHRfZmlsZWxpc3Qge30geworICAgIGdsb2JhbCBjbWl0bW9kZSBjZmxpc3QKKworICAgICRjZmxpc3QgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgaWYgeyRjbWl0bW9kZSBuZSAidHJlZSJ9IHsKKwlzZXQgZW5kIFtsaW5kZXggW3NwbGl0IFskY2ZsaXN0IGluZGV4IGVuZF0gLl0gMF0KKwlmb3Ige3NldCBsIDJ9IHskbCA8ICRlbmR9IHtpbmNyIGx9IHsKKwkgICAgc2V0IGxpbmUgWyRjZmxpc3QgZ2V0ICRsLjAgIiRsLjAgbGluZWVuZCJdCisJICAgIGlmIHtbaGlnaGxpZ2h0X3RhZyAkbGluZV0gbmUge319IHsKKwkJJGNmbGlzdCB0YWcgYWRkIGJvbGQgJGwuMCAiJGwuMCBsaW5lZW5kIgorCSAgICB9CisJfQorICAgIH0gZWxzZSB7CisJaGlnaGxpZ2h0X3RyZWUgMiB7fQorICAgIH0KKyAgICAkY2ZsaXN0IGNvbmYgLXN0YXRlIGRpc2FibGVkCit9CisKK3Byb2MgdW5oaWdobGlnaHRfZmlsZWxpc3Qge30geworICAgIGdsb2JhbCBjZmxpc3QKKworICAgICRjZmxpc3QgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgJGNmbGlzdCB0YWcgcmVtb3ZlIGJvbGQgMS4wIGVuZAorICAgICRjZmxpc3QgY29uZiAtc3RhdGUgZGlzYWJsZWQKK30KKworcHJvYyBhZGRfZmxpc3Qge2ZsfSB7CisgICAgZ2xvYmFsIGNmbGlzdAorCisgICAgJGNmbGlzdCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICBmb3JlYWNoIGYgJGZsIHsKKwkkY2ZsaXN0IGluc2VydCBlbmQgIlxuIgorCSRjZmxpc3QgaW5zZXJ0IGVuZCAkZiBbaGlnaGxpZ2h0X3RhZyAkZl0KKyAgICB9CisgICAgJGNmbGlzdCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorfQorCitwcm9jIHNlbF9mbGlzdCB7dyB4IHl9IHsKKyAgICBnbG9iYWwgY3RleHQgZGlmZmZpbGVzdGFydCBjZmxpc3QgY2ZsaXN0X3RvcCBjbWl0bW9kZQorCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHJldHVybgorICAgIGlmIHshW2luZm8gZXhpc3RzIGNmbGlzdF90b3BdfSByZXR1cm4KKyAgICBzZXQgbCBbbGluZGV4IFtzcGxpdCBbJHcgaW5kZXggIkAkeCwkeSJdICIuIl0gMF0KKyAgICAkY2ZsaXN0IHRhZyByZW1vdmUgaGlnaGxpZ2h0ICRjZmxpc3RfdG9wLjAgIiRjZmxpc3RfdG9wLjAgbGluZWVuZCIKKyAgICAkY2ZsaXN0IHRhZyBhZGQgaGlnaGxpZ2h0ICRsLjAgIiRsLjAgbGluZWVuZCIKKyAgICBzZXQgY2ZsaXN0X3RvcCAkbAorICAgIGlmIHskbCA9PSAxfSB7CisJJGN0ZXh0IHl2aWV3IDEuMAorICAgIH0gZWxzZSB7CisJY2F0Y2ggeyRjdGV4dCB5dmlldyBbbGluZGV4ICRkaWZmZmlsZXN0YXJ0IFtleHByIHskbCAtIDJ9XV19CisgICAgfQorICAgIHN1cHByZXNzX2hpZ2hsaWdodGluZ19maWxlX2Zvcl9jdXJyZW50X3Njcm9sbHBvcworfQorCitwcm9jIHBvcF9mbGlzdF9tZW51IHt3IFggWSB4IHl9IHsKKyAgICBnbG9iYWwgY3RleHQgY2ZsaXN0IGNtaXRtb2RlIGZsaXN0X21lbnUgZmxpc3RfbWVudV9maWxlCisgICAgZ2xvYmFsIHRyZWVkaWZmcyBkaWZmaWRzCisKKyAgICBzdG9wZmluZGluZworICAgIHNldCBsIFtsaW5kZXggW3NwbGl0IFskdyBpbmRleCAiQCR4LCR5Il0gIi4iXSAwXQorICAgIGlmIHskbCA8PSAxfSByZXR1cm4KKyAgICBpZiB7JGNtaXRtb2RlIGVxICJ0cmVlIn0geworCXNldCBlIFtsaW5ldG9lbHQgJGxdCisJaWYge1tzdHJpbmcgaW5kZXggJGUgZW5kXSBlcSAiLyJ9IHJldHVybgorICAgIH0gZWxzZSB7CisJc2V0IGUgW2xpbmRleCAkdHJlZWRpZmZzKCRkaWZmaWRzKSBbZXhwciB7JGwtMn1dXQorICAgIH0KKyAgICBzZXQgZmxpc3RfbWVudV9maWxlICRlCisgICAgc2V0IHhkaWZmc3RhdGUgIm5vcm1hbCIKKyAgICBpZiB7JGNtaXRtb2RlIGVxICJ0cmVlIn0geworCXNldCB4ZGlmZnN0YXRlICJkaXNhYmxlZCIKKyAgICB9CisgICAgIyBEaXNhYmxlICJFeHRlcm5hbCBkaWZmIiBpdGVtIGluIHRyZWUgbW9kZQorICAgICRmbGlzdF9tZW51IGVudHJ5Y29uZiAyIC1zdGF0ZSAkeGRpZmZzdGF0ZQorICAgIHRrX3BvcHVwICRmbGlzdF9tZW51ICRYICRZCit9CisKK3Byb2MgZmluZF9jdGV4dF9maWxlaW5mbyB7bGluZX0geworICAgIGdsb2JhbCBjdGV4dF9maWxlX25hbWVzIGN0ZXh0X2ZpbGVfbGluZXMKKworICAgIHNldCBvayBbYnNlYXJjaCAkY3RleHRfZmlsZV9saW5lcyAkbGluZV0KKyAgICBzZXQgdGxpbmUgW2xpbmRleCAkY3RleHRfZmlsZV9saW5lcyAkb2tdCisKKyAgICBpZiB7JG9rID49IFtsbGVuZ3RoICRjdGV4dF9maWxlX2xpbmVzXSB8fCAkbGluZSA8ICR0bGluZX0geworICAgICAgICByZXR1cm4ge30KKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gW2xpc3QgW2xpbmRleCAkY3RleHRfZmlsZV9uYW1lcyAkb2tdICR0bGluZV0KKyAgICB9Cit9CisKK3Byb2MgcG9wX2RpZmZfbWVudSB7dyBYIFkgeCB5fSB7CisgICAgZ2xvYmFsIGN0ZXh0IGRpZmZfbWVudSBmbGlzdF9tZW51X2ZpbGUKKyAgICBnbG9iYWwgZGlmZl9tZW51X3R4dHBvcyBkaWZmX21lbnVfbGluZQorICAgIGdsb2JhbCBkaWZmX21lbnVfZmlsZWJhc2UKKworICAgIHNldCBkaWZmX21lbnVfdHh0cG9zIFtzcGxpdCBbJHcgaW5kZXggIkAkeCwkeSJdICIuIl0KKyAgICBzZXQgZGlmZl9tZW51X2xpbmUgW2xpbmRleCAkZGlmZl9tZW51X3R4dHBvcyAwXQorICAgICMgZG9uJ3QgcG9wIHVwIHRoZSBtZW51IG9uIGh1bmstc2VwYXJhdG9yIG9yIGZpbGUtc2VwYXJhdG9yIGxpbmVzCisgICAgaWYge1tsc2VhcmNoIC1nbG9iIFskY3RleHQgdGFnIG5hbWVzICRkaWZmX21lbnVfbGluZS4wXSAiKnNlcCJdID49IDB9IHsKKwlyZXR1cm4KKyAgICB9CisgICAgc3RvcGZpbmRpbmcKKyAgICBzZXQgZiBbZmluZF9jdGV4dF9maWxlaW5mbyAkZGlmZl9tZW51X2xpbmVdCisgICAgaWYgeyRmIGVxIHt9fSByZXR1cm4KKyAgICBzZXQgZmxpc3RfbWVudV9maWxlIFtsaW5kZXggJGYgMF0KKyAgICBzZXQgZGlmZl9tZW51X2ZpbGViYXNlIFtsaW5kZXggJGYgMV0KKyAgICB0a19wb3B1cCAkZGlmZl9tZW51ICRYICRZCit9CisKK3Byb2MgZmxpc3RfaGwge29ubHl9IHsKKyAgICBnbG9iYWwgZmxpc3RfbWVudV9maWxlIGZpbmRzdHJpbmcgZ2R0dHlwZQorCisgICAgc2V0IHggW3NoZWxscXVvdGUgJGZsaXN0X21lbnVfZmlsZV0KKyAgICBpZiB7JG9ubHkgfHwgJGZpbmRzdHJpbmcgZXEge30gfHwgJGdkdHR5cGUgbmUgW21jICJ0b3VjaGluZyBwYXRoczoiXX0geworCXNldCBmaW5kc3RyaW5nICR4CisgICAgfSBlbHNlIHsKKwlhcHBlbmQgZmluZHN0cmluZyAiICIgJHgKKyAgICB9CisgICAgc2V0IGdkdHR5cGUgW21jICJ0b3VjaGluZyBwYXRoczoiXQorfQorCitwcm9jIGdpdGtuZXd0bXBkaXIge30geworICAgIGdsb2JhbCBkaWZmbnVtIGdpdGt0bXBkaXIgZ2l0ZGlyIGVudgorCisgICAgaWYgeyFbaW5mbyBleGlzdHMgZ2l0a3RtcGRpcl19IHsKKwlpZiB7W2luZm8gZXhpc3RzIGVudihHSVRLX1RNUERJUildfSB7CisJICAgIHNldCB0bXBkaXIgJGVudihHSVRLX1RNUERJUikKKwl9IGVsc2VpZiB7W2luZm8gZXhpc3RzIGVudihUTVBESVIpXX0geworCSAgICBzZXQgdG1wZGlyICRlbnYoVE1QRElSKQorCX0gZWxzZSB7CisJICAgIHNldCB0bXBkaXIgJGdpdGRpcgorCX0KKwlzZXQgZ2l0a3RtcGZvcm1hdCBbZmlsZSBqb2luICR0bXBkaXIgIi5naXRrLXRtcC5YWFhYWFgiXQorCWlmIHtbY2F0Y2gge3NldCBnaXRrdG1wZGlyIFtleGVjIG1rdGVtcCAtZCAkZ2l0a3RtcGZvcm1hdF19XX0geworCSAgICBzZXQgZ2l0a3RtcGRpciBbZmlsZSBqb2luICRnaXRkaXIgW2Zvcm1hdCAiLmdpdGstdG1wLiVzIiBbcGlkXV1dCisJfQorCWlmIHtbY2F0Y2gge2ZpbGUgbWtkaXIgJGdpdGt0bXBkaXJ9IGVycl19IHsKKwkgICAgZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiICRnaXRrdG1wZGlyXSAkZXJyIgorCSAgICB1bnNldCBnaXRrdG1wZGlyCisJICAgIHJldHVybiB7fQorCX0KKwlzZXQgZGlmZm51bSAwCisgICAgfQorICAgIGluY3IgZGlmZm51bQorICAgIHNldCBkaWZmZGlyIFtmaWxlIGpvaW4gJGdpdGt0bXBkaXIgJGRpZmZudW1dCisgICAgaWYge1tjYXRjaCB7ZmlsZSBta2RpciAkZGlmZmRpcn0gZXJyXX0geworCWVycm9yX3BvcHVwICJbbWMgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IiAkZGlmZmRpcl0gJGVyciIKKwlyZXR1cm4ge30KKyAgICB9CisgICAgcmV0dXJuICRkaWZmZGlyCit9CisKK3Byb2Mgc2F2ZV9maWxlX2Zyb21fY29tbWl0IHtmaWxlbmFtZSBvdXRwdXQgd2hhdH0geworICAgIGdsb2JhbCBudWxsZmlsZQorCisgICAgaWYge1tjYXRjaCB7ZXhlYyBnaXQgc2hvdyAkZmlsZW5hbWUgLS0gPiAkb3V0cHV0fSBlcnJdfSB7CisJaWYge1tzdHJpbmcgbWF0Y2ggImZhdGFsOiBiYWQgcmV2aXNpb24gKiIgJGVycl19IHsKKwkgICAgcmV0dXJuICRudWxsZmlsZQorCX0KKwllcnJvcl9wb3B1cCAiW21jICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIgJGZpbGVuYW1lICR3aGF0XSAkZXJyIgorCXJldHVybiB7fQorICAgIH0KKyAgICByZXR1cm4gJG91dHB1dAorfQorCitwcm9jIGV4dGVybmFsX2RpZmZfZ2V0X29uZV9maWxlIHtkaWZmaWQgZmlsZW5hbWUgZGlmZmRpcn0geworICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMiBudWxsZmlsZQorICAgIGdsb2JhbCB3b3JrdHJlZQorCisgICAgaWYgeyRkaWZmaWQgPT0gJG51bGxpZH0geworICAgICAgICBzZXQgZGlmZmZpbGUgW2ZpbGUgam9pbiAkd29ya3RyZWUgJGZpbGVuYW1lXQorCWlmIHtbZmlsZSBleGlzdHMgJGRpZmZmaWxlXX0geworCSAgICByZXR1cm4gJGRpZmZmaWxlCisJfQorCXJldHVybiAkbnVsbGZpbGUKKyAgICB9CisgICAgaWYgeyRkaWZmaWQgPT0gJG51bGxpZDJ9IHsKKyAgICAgICAgc2V0IGRpZmZmaWxlIFtmaWxlIGpvaW4gJGRpZmZkaXIgIlxbaW5kZXhcXSBbZmlsZSB0YWlsICRmaWxlbmFtZV0iXQorICAgICAgICByZXR1cm4gW3NhdmVfZmlsZV9mcm9tX2NvbW1pdCA6JGZpbGVuYW1lICRkaWZmZmlsZSBpbmRleF0KKyAgICB9CisgICAgc2V0IGRpZmZmaWxlIFtmaWxlIGpvaW4gJGRpZmZkaXIgIlxbJGRpZmZpZFxdIFtmaWxlIHRhaWwgJGZpbGVuYW1lXSJdCisgICAgcmV0dXJuIFtzYXZlX2ZpbGVfZnJvbV9jb21taXQgJGRpZmZpZDokZmlsZW5hbWUgJGRpZmZmaWxlIFwKKwkgICAgICAgInJldmlzaW9uICRkaWZmaWQiXQorfQorCitwcm9jIGV4dGVybmFsX2RpZmYge30geworICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMgorICAgIGdsb2JhbCBmbGlzdF9tZW51X2ZpbGUKKyAgICBnbG9iYWwgZGlmZmlkcworICAgIGdsb2JhbCBleHRkaWZmdG9vbAorCisgICAgaWYge1tsbGVuZ3RoICRkaWZmaWRzXSA9PSAxfSB7CisgICAgICAgICMgbm8gcmVmZXJlbmNlIGNvbW1pdCBnaXZlbgorICAgICAgICBzZXQgZGlmZmlkdG8gW2xpbmRleCAkZGlmZmlkcyAwXQorICAgICAgICBpZiB7JGRpZmZpZHRvIGVxICRudWxsaWR9IHsKKyAgICAgICAgICAgICMgZGlmZmluZyB3b3JraW5nIGNvcHkgd2l0aCBpbmRleAorICAgICAgICAgICAgc2V0IGRpZmZpZGZyb20gJG51bGxpZDIKKyAgICAgICAgfSBlbHNlaWYgeyRkaWZmaWR0byBlcSAkbnVsbGlkMn0geworICAgICAgICAgICAgIyBkaWZmaW5nIGluZGV4IHdpdGggSEVBRAorICAgICAgICAgICAgc2V0IGRpZmZpZGZyb20gIkhFQUQiCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAjIHVzZSBmaXJzdCBwYXJlbnQgY29tbWl0CisgICAgICAgICAgICBnbG9iYWwgcGFyZW50bGlzdCBzZWxlY3RlZGxpbmUKKyAgICAgICAgICAgIHNldCBkaWZmaWRmcm9tIFtsaW5kZXggJHBhcmVudGxpc3QgJHNlbGVjdGVkbGluZSAwXQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IGRpZmZpZGZyb20gW2xpbmRleCAkZGlmZmlkcyAwXQorICAgICAgICBzZXQgZGlmZmlkdG8gW2xpbmRleCAkZGlmZmlkcyAxXQorICAgIH0KKworICAgICMgbWFrZSBzdXJlIHRoYXQgc2V2ZXJhbCBkaWZmcyB3b250IGNvbGxpZGUKKyAgICBzZXQgZGlmZmRpciBbZ2l0a25ld3RtcGRpcl0KKyAgICBpZiB7JGRpZmZkaXIgZXEge319IHJldHVybgorCisgICAgIyBnYXRoZXIgZmlsZXMgdG8gZGlmZgorICAgIHNldCBkaWZmZnJvbWZpbGUgW2V4dGVybmFsX2RpZmZfZ2V0X29uZV9maWxlICRkaWZmaWRmcm9tICRmbGlzdF9tZW51X2ZpbGUgJGRpZmZkaXJdCisgICAgc2V0IGRpZmZ0b2ZpbGUgW2V4dGVybmFsX2RpZmZfZ2V0X29uZV9maWxlICRkaWZmaWR0byAkZmxpc3RfbWVudV9maWxlICRkaWZmZGlyXQorCisgICAgaWYgeyRkaWZmZnJvbWZpbGUgbmUge30gJiYgJGRpZmZ0b2ZpbGUgbmUge319IHsKKyAgICAgICAgc2V0IGNtZCBbbGlzdCBbc2hlbGxzcGxpdCAkZXh0ZGlmZnRvb2xdICRkaWZmZnJvbWZpbGUgJGRpZmZ0b2ZpbGVdCisgICAgICAgIGlmIHtbY2F0Y2gge3NldCBmbCBbb3BlbiB8JGNtZCByXX0gZXJyXX0geworICAgICAgICAgICAgZmlsZSBkZWxldGUgLWZvcmNlICRkaWZmZGlyCisgICAgICAgICAgICBlcnJvcl9wb3B1cCAiJGV4dGRpZmZ0b29sOiBbbWMgImNvbW1hbmQgZmFpbGVkOiJdICRlcnIiCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmY29uZmlndXJlICRmbCAtYmxvY2tpbmcgMAorICAgICAgICAgICAgZmlsZXJ1biAkZmwgW2xpc3QgZGVsZXRlX2F0X2VvZiAkZmwgJGRpZmZkaXJdCisgICAgICAgIH0KKyAgICB9Cit9CisKK3Byb2MgZmluZF9odW5rX2JsYW1lc3BlYyB7YmFzZSBsaW5lfSB7CisgICAgZ2xvYmFsIGN0ZXh0CisKKyAgICAjIEZpbmQgYW5kIHBhcnNlIHRoZSBodW5rIGhlYWRlcgorICAgIHNldCBzX2xpeCBbJGN0ZXh0IHNlYXJjaCAtYmFja3dhcmRzIC1yZWdleHAgXkBAICIkbGluZS4wIGxpbmVlbmQiICRiYXNlLjBdCisgICAgaWYgeyRzX2xpeCBlcSB7fX0gcmV0dXJuCisKKyAgICBzZXQgc19saW5lIFskY3RleHQgZ2V0ICRzX2xpeCAiJHNfbGl4ICsgMSBsaW5lcyJdCisgICAgaWYgeyFbcmVnZXhwIHteQEBAKigoIC1cZCsoLFxkKyk/KSspIFwrKFxkKykoLFxkKyk/IEBAfSAkc19saW5lIFwKKwkgICAgc19saW5lIG9sZF9zcGVjcyBvc3ogb3N6MSBuZXdfbGluZSBuc3pdfSB7CisJcmV0dXJuCisgICAgfQorCisgICAgIyBiYXNlIGxpbmVzIGZvciB0aGUgcGFyZW50cworICAgIHNldCBiYXNlX2xpbmVzIFtsaXN0ICRuZXdfbGluZV0KKyAgICBmb3JlYWNoIG9sZF9zcGVjIFtscmFuZ2UgW3NwbGl0ICRvbGRfc3BlY3MgIiAiXSAxIGVuZF0geworCWlmIHshW3JlZ2V4cCAtLSB7LShcZCspKCxcZCspP30gJG9sZF9zcGVjIFwKKwkgICAgICAgIG9sZF9zcGVjIG9sZF9saW5lIG9zel19IHsKKwkgICAgcmV0dXJuCisJfQorCWxhcHBlbmQgYmFzZV9saW5lcyAkb2xkX2xpbmUKKyAgICB9CisKKyAgICAjIE5vdyBzY2FuIHRoZSBsaW5lcyB0byBkZXRlcm1pbmUgb2Zmc2V0IHdpdGhpbiB0aGUgaHVuaworICAgIHNldCBtYXhfcGFyZW50IFtleHByIHtbbGxlbmd0aCAkYmFzZV9saW5lc10tMn1dCisgICAgc2V0IGRsaW5lIDAKKyAgICBzZXQgc19sbm8gW2xpbmRleCBbc3BsaXQgJHNfbGl4ICIuIl0gMF0KKworICAgICMgRGV0ZXJtaW5lIGlmIHRoZSBsaW5lIGlzIHJlbW92ZWQKKyAgICBzZXQgY2h1bmsgWyRjdGV4dCBnZXQgJGxpbmUuMCAiJGxpbmUuMSArICRtYXhfcGFyZW50IGNoYXJzIl0KKyAgICBpZiB7W3N0cmluZyBtYXRjaCB7Wy0rIF0qfSAkY2h1bmtdfSB7CisJc2V0IHJlbW92ZWRfaWR4IFtzdHJpbmcgZmlyc3QgIi0iICRjaHVua10KKwkjIENob29zZSBhIHBhcmVudCBpbmRleAorCWlmIHskcmVtb3ZlZF9pZHggPj0gMH0geworCSAgICBzZXQgcGFyZW50ICRyZW1vdmVkX2lkeAorCX0gZWxzZSB7CisJICAgIHNldCB1bmNoYW5nZWRfaWR4IFtzdHJpbmcgZmlyc3QgIiAiICRjaHVua10KKwkgICAgaWYgeyR1bmNoYW5nZWRfaWR4ID49IDB9IHsKKwkJc2V0IHBhcmVudCAkdW5jaGFuZ2VkX2lkeAorCSAgICB9IGVsc2UgeworCQkjIGJsYW1lIHRoZSBjdXJyZW50IGNvbW1pdAorCQlzZXQgcGFyZW50IC0xCisJICAgIH0KKwl9CisJIyB0aGVuIGNvdW50IG90aGVyIGxpbmVzIHRoYXQgYmVsb25nIHRvIGl0CisJZm9yIHtzZXQgaSAkbGluZX0ge1tpbmNyIGkgLTFdID4gJHNfbG5vfSB7fSB7CisJICAgIHNldCBjaHVuayBbJGN0ZXh0IGdldCAkaS4wICIkaS4xICsgJG1heF9wYXJlbnQgY2hhcnMiXQorCSAgICAjIERldGVybWluZSBpZiB0aGUgbGluZSBpcyByZW1vdmVkCisJICAgIHNldCByZW1vdmVkX2lkeCBbc3RyaW5nIGZpcnN0ICItIiAkY2h1bmtdCisJICAgIGlmIHskcGFyZW50ID49IDB9IHsKKwkJc2V0IGNvZGUgW3N0cmluZyBpbmRleCAkY2h1bmsgJHBhcmVudF0KKwkJaWYgeyRjb2RlIGVxICItIiB8fCAoJHJlbW92ZWRfaWR4IDwgMCAmJiAkY29kZSBuZSAiKyIpfSB7CisJCSAgICBpbmNyIGRsaW5lCisJCX0KKwkgICAgfSBlbHNlIHsKKwkJaWYgeyRyZW1vdmVkX2lkeCA8IDB9IHsKKwkJICAgIGluY3IgZGxpbmUKKwkJfQorCSAgICB9CisJfQorCWluY3IgcGFyZW50CisgICAgfSBlbHNlIHsKKwlzZXQgcGFyZW50IDAKKyAgICB9CisKKyAgICBpbmNyIGRsaW5lIFtsaW5kZXggJGJhc2VfbGluZXMgJHBhcmVudF0KKyAgICByZXR1cm4gW2xpc3QgJHBhcmVudCAkZGxpbmVdCit9CisKK3Byb2MgZXh0ZXJuYWxfYmxhbWVfZGlmZiB7fSB7CisgICAgZ2xvYmFsIGN1cnJlbnRpZCBjbWl0bW9kZQorICAgIGdsb2JhbCBkaWZmX21lbnVfdHh0cG9zIGRpZmZfbWVudV9saW5lCisgICAgZ2xvYmFsIGRpZmZfbWVudV9maWxlYmFzZSBmbGlzdF9tZW51X2ZpbGUKKworICAgIGlmIHskY21pdG1vZGUgZXEgInRyZWUifSB7CisJc2V0IHBhcmVudF9pZHggMAorCXNldCBsaW5lIFtleHByIHskZGlmZl9tZW51X2xpbmUgLSAkZGlmZl9tZW51X2ZpbGViYXNlfV0KKyAgICB9IGVsc2UgeworCXNldCBoaW5mbyBbZmluZF9odW5rX2JsYW1lc3BlYyAkZGlmZl9tZW51X2ZpbGViYXNlICRkaWZmX21lbnVfbGluZV0KKwlpZiB7JGhpbmZvIG5lIHt9fSB7CisJICAgIHNldCBwYXJlbnRfaWR4IFtsaW5kZXggJGhpbmZvIDBdCisJICAgIHNldCBsaW5lIFtsaW5kZXggJGhpbmZvIDFdCisJfSBlbHNlIHsKKwkgICAgc2V0IHBhcmVudF9pZHggMAorCSAgICBzZXQgbGluZSAwCisJfQorICAgIH0KKworICAgIGV4dGVybmFsX2JsYW1lICRwYXJlbnRfaWR4ICRsaW5lCit9CisKKyMgRmluZCB0aGUgU0hBMSBJRCBvZiB0aGUgYmxvYiBmb3IgZmlsZSAkZm5hbWUgaW4gdGhlIGluZGV4CisjIGF0IHN0YWdlIDAgb3IgMgorcHJvYyBpbmRleF9zaGExIHtmbmFtZX0geworICAgIHNldCBmIFtvcGVuIFtsaXN0IHwgZ2l0IGxzLWZpbGVzIC1zICRmbmFtZV0gcl0KKyAgICB3aGlsZSB7W2dldHMgJGYgbGluZV0gPj0gMH0geworCXNldCBpbmZvIFtsaW5kZXggW3NwbGl0ICRsaW5lICJcdCJdIDBdCisJc2V0IHN0YWdlIFtsaW5kZXggJGluZm8gMl0KKwlpZiB7JHN0YWdlIGVxICIwIiB8fCAkc3RhZ2UgZXEgIjIifSB7CisJICAgIGNsb3NlICRmCisJICAgIHJldHVybiBbbGluZGV4ICRpbmZvIDFdCisJfQorICAgIH0KKyAgICBjbG9zZSAkZgorICAgIHJldHVybiB7fQorfQorCisjIFR1cm4gYW4gYWJzb2x1dGUgcGF0aCBpbnRvIG9uZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkKK3Byb2MgbWFrZV9yZWxhdGl2ZSB7Zn0geworICAgIGlmIHtbZmlsZSBwYXRodHlwZSAkZl0gZXEgInJlbGF0aXZlIn0geworCXJldHVybiAkZgorICAgIH0KKyAgICBzZXQgZWx0cyBbZmlsZSBzcGxpdCAkZl0KKyAgICBzZXQgaGVyZSBbZmlsZSBzcGxpdCBbcHdkXV0KKyAgICBzZXQgZWkgMAorICAgIHNldCBoaSAwCisgICAgc2V0IHJlcyB7fQorICAgIGZvcmVhY2ggZCAkaGVyZSB7CisJaWYgeyRlaSA8ICRoaSB8fCAkZWkgPj0gW2xsZW5ndGggJGVsdHNdIHx8IFtsaW5kZXggJGVsdHMgJGVpXSBuZSAkZH0geworCSAgICBsYXBwZW5kIHJlcyAiLi4iCisJfSBlbHNlIHsKKwkgICAgaW5jciBlaQorCX0KKwlpbmNyIGhpCisgICAgfQorICAgIHNldCBlbHRzIFtjb25jYXQgJHJlcyBbbHJhbmdlICRlbHRzICRlaSBlbmRdXQorICAgIHJldHVybiBbZXZhbCBmaWxlIGpvaW4gJGVsdHNdCit9CisKK3Byb2MgZXh0ZXJuYWxfYmxhbWUge3BhcmVudF9pZHgge2xpbmUge319fSB7CisgICAgZ2xvYmFsIGZsaXN0X21lbnVfZmlsZSBjZHVwCisgICAgZ2xvYmFsIG51bGxpZCBudWxsaWQyCisgICAgZ2xvYmFsIHBhcmVudGxpc3Qgc2VsZWN0ZWRsaW5lIGN1cnJlbnRpZAorCisgICAgaWYgeyRwYXJlbnRfaWR4ID4gMH0geworCXNldCBiYXNlX2NvbW1pdCBbbGluZGV4ICRwYXJlbnRsaXN0ICRzZWxlY3RlZGxpbmUgW2V4cHIgeyRwYXJlbnRfaWR4LTF9XV0KKyAgICB9IGVsc2UgeworCXNldCBiYXNlX2NvbW1pdCAkY3VycmVudGlkCisgICAgfQorCisgICAgaWYgeyRiYXNlX2NvbW1pdCBlcSB7fSB8fCAkYmFzZV9jb21taXQgZXEgJG51bGxpZCB8fCAkYmFzZV9jb21taXQgZXEgJG51bGxpZDJ9IHsKKwllcnJvcl9wb3B1cCBbbWMgIk5vIHN1Y2ggY29tbWl0Il0KKwlyZXR1cm4KKyAgICB9CisKKyAgICBzZXQgY21kbGluZSBbbGlzdCBnaXQgZ3VpIGJsYW1lXQorICAgIGlmIHskbGluZSBuZSB7fSAmJiAkbGluZSA+IDF9IHsKKwlsYXBwZW5kIGNtZGxpbmUgIi0tbGluZT0kbGluZSIKKyAgICB9CisgICAgc2V0IGYgW2ZpbGUgam9pbiAkY2R1cCAkZmxpc3RfbWVudV9maWxlXQorICAgICMgVW5mb3J0dW5hdGVseSBpdCBzZWVtcyBnaXQgZ3VpIGJsYW1lIGRvZXNuJ3QgbGlrZQorICAgICMgYmVpbmcgZ2l2ZW4gYW4gYWJzb2x1dGUgcGF0aC4uLgorICAgIHNldCBmIFttYWtlX3JlbGF0aXZlICRmXQorICAgIGxhcHBlbmQgY21kbGluZSAkYmFzZV9jb21taXQgJGYKKyAgICBpZiB7W2NhdGNoIHtldmFsIGV4ZWMgJGNtZGxpbmUgJn0gZXJyXX0geworCWVycm9yX3BvcHVwICJbbWMgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiJdICRlcnIiCisgICAgfQorfQorCitwcm9jIHNob3dfbGluZV9zb3VyY2Uge30geworICAgIGdsb2JhbCBjbWl0bW9kZSBjdXJyZW50aWQgcGFyZW50cyBjdXJ2aWV3IGJsYW1lc3R1ZmYgYmxhbWVpbnN0CisgICAgZ2xvYmFsIGRpZmZfbWVudV9saW5lIGRpZmZfbWVudV9maWxlYmFzZSBmbGlzdF9tZW51X2ZpbGUKKyAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIgZ2l0ZGlyIGNkdXAKKworICAgIHNldCBmcm9tX2luZGV4IHt9CisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHsKKwlzZXQgaWQgJGN1cnJlbnRpZAorCXNldCBsaW5lIFtleHByIHskZGlmZl9tZW51X2xpbmUgLSAkZGlmZl9tZW51X2ZpbGViYXNlfV0KKyAgICB9IGVsc2UgeworCXNldCBoIFtmaW5kX2h1bmtfYmxhbWVzcGVjICRkaWZmX21lbnVfZmlsZWJhc2UgJGRpZmZfbWVudV9saW5lXQorCWlmIHskaCBlcSB7fX0gcmV0dXJuCisJc2V0IHBpIFtsaW5kZXggJGggMF0KKwlpZiB7JHBpID09IDB9IHsKKwkgICAgbWFya19jdGV4dF9saW5lICRkaWZmX21lbnVfbGluZQorCSAgICByZXR1cm4KKwl9CisJaW5jciBwaSAtMQorCWlmIHskY3VycmVudGlkIGVxICRudWxsaWR9IHsKKwkgICAgaWYgeyRwaSA+IDB9IHsKKwkJIyBtdXN0IGJlIGEgbWVyZ2UgaW4gcHJvZ3Jlc3MuLi4KKwkJaWYge1tjYXRjaCB7CisJCSAgICAjIGdldCB0aGUgbGFzdCBsaW5lIGZyb20gLmdpdC9NRVJHRV9IRUFECisJCSAgICBzZXQgZiBbb3BlbiBbZmlsZSBqb2luICRnaXRkaXIgTUVSR0VfSEVBRF0gcl0KKwkJICAgIHNldCBpZCBbbGluZGV4IFtzcGxpdCBbcmVhZCAkZl0gIlxuIl0gZW5kLTFdCisJCSAgICBjbG9zZSAkZgorCQl9IGVycl19IHsKKwkJICAgIGVycm9yX3BvcHVwIFttYyAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIgJGVycl0KKwkJICAgIHJldHVybgorCQl9CisJICAgIH0gZWxzZWlmIHskcGFyZW50cygkY3VydmlldywkY3VycmVudGlkKSBlcSAkbnVsbGlkMn0geworCQkjIG5lZWQgdG8gZG8gdGhlIGJsYW1lIGZyb20gdGhlIGluZGV4CisJCWlmIHtbY2F0Y2ggeworCQkgICAgc2V0IGZyb21faW5kZXggW2luZGV4X3NoYTEgJGZsaXN0X21lbnVfZmlsZV0KKwkJfSBlcnJdfSB7CisJCSAgICBlcnJvcl9wb3B1cCBbbWMgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIiAkZXJyXQorCQkgICAgcmV0dXJuCisJCX0KKwkgICAgfSBlbHNlIHsKKwkJc2V0IGlkICRwYXJlbnRzKCRjdXJ2aWV3LCRjdXJyZW50aWQpCisJICAgIH0KKwl9IGVsc2UgeworCSAgICBzZXQgaWQgW2xpbmRleCAkcGFyZW50cygkY3VydmlldywkY3VycmVudGlkKSAkcGldCisJfQorCXNldCBsaW5lIFtsaW5kZXggJGggMV0KKyAgICB9CisgICAgc2V0IGJsYW1lYXJncyB7fQorICAgIGlmIHskZnJvbV9pbmRleCBuZSB7fX0geworCWxhcHBlbmQgYmxhbWVhcmdzIHwgZ2l0IGNhdC1maWxlIGJsb2IgJGZyb21faW5kZXgKKyAgICB9CisgICAgbGFwcGVuZCBibGFtZWFyZ3MgfCBnaXQgYmxhbWUgLXAgLUwkbGluZSwrMQorICAgIGlmIHskZnJvbV9pbmRleCBuZSB7fX0geworCWxhcHBlbmQgYmxhbWVhcmdzIC0tY29udGVudHMgLQorICAgIH0gZWxzZSB7CisJbGFwcGVuZCBibGFtZWFyZ3MgJGlkCisgICAgfQorICAgIGxhcHBlbmQgYmxhbWVhcmdzIC0tIFtmaWxlIGpvaW4gJGNkdXAgJGZsaXN0X21lbnVfZmlsZV0KKyAgICBpZiB7W2NhdGNoIHsKKwlzZXQgZiBbb3BlbiAkYmxhbWVhcmdzIHJdCisgICAgfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgW21jICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIiAkZXJyXQorCXJldHVybgorICAgIH0KKyAgICBub3didXN5IGJsYW1pbmcgW21jICJTZWFyY2hpbmciXQorICAgIGZjb25maWd1cmUgJGYgLWJsb2NraW5nIDAKKyAgICBzZXQgaSBbcmVnX2luc3RhbmNlICRmXQorICAgIHNldCBibGFtZXN0dWZmKCRpKSB7fQorICAgIHNldCBibGFtZWluc3QgJGkKKyAgICBmaWxlcnVuICRmIFtsaXN0IHJlYWRfbGluZV9zb3VyY2UgJGYgJGldCit9CisKK3Byb2Mgc3RvcGJsYW1pbmcge30geworICAgIGdsb2JhbCBibGFtZWluc3QKKworICAgIGlmIHtbaW5mbyBleGlzdHMgYmxhbWVpbnN0XX0geworCXN0b3BfaW5zdGFuY2UgJGJsYW1laW5zdAorCXVuc2V0IGJsYW1laW5zdAorCW5vdGJ1c3kgYmxhbWluZworICAgIH0KK30KKworcHJvYyByZWFkX2xpbmVfc291cmNlIHtmZCBpbnN0fSB7CisgICAgZ2xvYmFsIGJsYW1lc3R1ZmYgY3VydmlldyBjb21tZmQgYmxhbWVpbnN0IG51bGxpZCBudWxsaWQyCisKKyAgICB3aGlsZSB7W2dldHMgJGZkIGxpbmVdID49IDB9IHsKKwlsYXBwZW5kIGJsYW1lc3R1ZmYoJGluc3QpICRsaW5lCisgICAgfQorICAgIGlmIHshW2VvZiAkZmRdfSB7CisJcmV0dXJuIDEKKyAgICB9CisgICAgdW5zZXQgY29tbWZkKCRpbnN0KQorICAgIHVuc2V0IGJsYW1laW5zdAorICAgIG5vdGJ1c3kgYmxhbWluZworICAgIGZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAxCisgICAgaWYge1tjYXRjaCB7Y2xvc2UgJGZkfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgW21jICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiICRlcnJdCisJcmV0dXJuIDAKKyAgICB9CisKKyAgICBzZXQgZm5hbWUge30KKyAgICBzZXQgbGluZSBbc3BsaXQgW2xpbmRleCAkYmxhbWVzdHVmZigkaW5zdCkgMF0gIiAiXQorICAgIHNldCBpZCBbbGluZGV4ICRsaW5lIDBdCisgICAgc2V0IGxudW0gW2xpbmRleCAkbGluZSAxXQorICAgIGlmIHtbc3RyaW5nIGxlbmd0aCAkaWRdID09IDQwICYmIFtzdHJpbmcgaXMgeGRpZ2l0ICRpZF0gJiYKKwlbc3RyaW5nIGlzIGRpZ2l0IC1zdHJpY3QgJGxudW1dfSB7CisJIyBsb29rIGZvciAiZmlsZW5hbWUiIGxpbmUKKwlmb3JlYWNoIGwgJGJsYW1lc3R1ZmYoJGluc3QpIHsKKwkgICAgaWYge1tzdHJpbmcgbWF0Y2ggImZpbGVuYW1lICoiICRsXX0geworCQlzZXQgZm5hbWUgW3N0cmluZyByYW5nZSAkbCA5IGVuZF0KKwkJYnJlYWsKKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYgeyRmbmFtZSBuZSB7fX0geworCSMgYWxsIGxvb2tzIGdvb2QsIHNlbGVjdCBpdAorCWlmIHskaWQgZXEgJG51bGxpZH0geworCSAgICAjIGJsYW1lIHVzZXMgYWxsLXplcm9lcyB0byBtZWFuIG5vdCBjb21taXR0ZWQsCisJICAgICMgd2hpY2ggd291bGQgbWVhbiBhIGNoYW5nZSBpbiB0aGUgaW5kZXgKKwkgICAgc2V0IGlkICRudWxsaWQyCisJfQorCWlmIHtbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHsKKwkgICAgc2VsZWN0bGluZSBbcm93b2Zjb21taXQgJGlkXSAxIFtsaXN0ICRmbmFtZSAkbG51bV0gMQorCX0gZWxzZSB7CisJICAgIGVycm9yX3BvcHVwIFttYyAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCBcCisJCQkgICAgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciIFtzaG9ydGlkcyAkaWRdXQorCX0KKyAgICB9IGVsc2UgeworCXB1dHMgIm9vcHMgY291bGRuJ3QgcGFyc2UgZ2l0IGJsYW1lIG91dHB1dCIKKyAgICB9CisgICAgcmV0dXJuIDAKK30KKworIyBkZWxldGUgJGRpciB3aGVuIHdlIHNlZSBlb2Ygb24gJGYgKHByZXN1bWFibHkgYmVjYXVzZSB0aGUgY2hpbGQgaGFzIGV4aXRlZCkKK3Byb2MgZGVsZXRlX2F0X2VvZiB7ZiBkaXJ9IHsKKyAgICB3aGlsZSB7W2dldHMgJGYgbGluZV0gPj0gMH0ge30KKyAgICBpZiB7W2VvZiAkZl19IHsKKwlpZiB7W2NhdGNoIHtjbG9zZSAkZn0gZXJyXX0geworCSAgICBlcnJvcl9wb3B1cCAiW21jICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6Il0gJGVyciIKKwl9CisJZmlsZSBkZWxldGUgLWZvcmNlICRkaXIKKwlyZXR1cm4gMAorICAgIH0KKyAgICByZXR1cm4gMQorfQorCisjIEZ1bmN0aW9ucyBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBzaGVsbC10eXBlIHF1b3RpbmcKKworcHJvYyBzaGVsbHF1b3RlIHtzdHJ9IHsKKyAgICBpZiB7IVtzdHJpbmcgbWF0Y2ggIipcWydcIlxcIFx0XSoiICRzdHJdfSB7CisJcmV0dXJuICRzdHIKKyAgICB9CisgICAgaWYgeyFbc3RyaW5nIG1hdGNoICIqXFsnXCJcXF0qIiAkc3RyXX0geworCXJldHVybiAiXCIkc3RyXCIiCisgICAgfQorICAgIGlmIHshW3N0cmluZyBtYXRjaCAiKicqIiAkc3RyXX0geworCXJldHVybiAiJyRzdHInIgorICAgIH0KKyAgICByZXR1cm4gIlwiW3N0cmluZyBtYXAge1wiIFxcXCIgXFwgXFxcXH0gJHN0cl1cIiIKK30KKworcHJvYyBzaGVsbGFyZ2xpc3Qge2x9IHsKKyAgICBzZXQgc3RyIHt9CisgICAgZm9yZWFjaCBhICRsIHsKKwlpZiB7JHN0ciBuZSB7fX0geworCSAgICBhcHBlbmQgc3RyICIgIgorCX0KKwlhcHBlbmQgc3RyIFtzaGVsbHF1b3RlICRhXQorICAgIH0KKyAgICByZXR1cm4gJHN0cgorfQorCitwcm9jIHNoZWxsZGVxdW90ZSB7c3RyfSB7CisgICAgc2V0IHJldCB7fQorICAgIHNldCB1c2VkIC0xCisgICAgd2hpbGUgezF9IHsKKwlpbmNyIHVzZWQKKwlpZiB7IVtyZWdleHAgLXN0YXJ0ICR1c2VkIC1pbmRpY2VzICJcWydcIlxcXFwgXHRdIiAkc3RyIGZpcnN0XX0geworCSAgICBhcHBlbmQgcmV0IFtzdHJpbmcgcmFuZ2UgJHN0ciAkdXNlZCBlbmRdCisJICAgIHNldCB1c2VkIFtzdHJpbmcgbGVuZ3RoICRzdHJdCisJICAgIGJyZWFrCisJfQorCXNldCBmaXJzdCBbbGluZGV4ICRmaXJzdCAwXQorCXNldCBjaCBbc3RyaW5nIGluZGV4ICRzdHIgJGZpcnN0XQorCWlmIHskZmlyc3QgPiAkdXNlZH0geworCSAgICBhcHBlbmQgcmV0IFtzdHJpbmcgcmFuZ2UgJHN0ciAkdXNlZCBbZXhwciB7JGZpcnN0IC0gMX1dXQorCSAgICBzZXQgdXNlZCAkZmlyc3QKKwl9CisJaWYgeyRjaCBlcSAiICIgfHwgJGNoIGVxICJcdCJ9IGJyZWFrCisJaW5jciB1c2VkCisJaWYgeyRjaCBlcSAiJyJ9IHsKKwkgICAgc2V0IGZpcnN0IFtzdHJpbmcgZmlyc3QgIiciICRzdHIgJHVzZWRdCisJICAgIGlmIHskZmlyc3QgPCAwfSB7CisJCWVycm9yICJ1bm1hdGNoZWQgc2luZ2xlLXF1b3RlIgorCSAgICB9CisJICAgIGFwcGVuZCByZXQgW3N0cmluZyByYW5nZSAkc3RyICR1c2VkIFtleHByIHskZmlyc3QgLSAxfV1dCisJICAgIHNldCB1c2VkICRmaXJzdAorCSAgICBjb250aW51ZQorCX0KKwlpZiB7JGNoIGVxICJcXCJ9IHsKKwkgICAgaWYgeyR1c2VkID49IFtzdHJpbmcgbGVuZ3RoICRzdHJdfSB7CisJCWVycm9yICJ0cmFpbGluZyBiYWNrc2xhc2giCisJICAgIH0KKwkgICAgYXBwZW5kIHJldCBbc3RyaW5nIGluZGV4ICRzdHIgJHVzZWRdCisJICAgIGNvbnRpbnVlCisJfQorCSMgaGVyZSBjaCA9PSAiXCIiCisJd2hpbGUgezF9IHsKKwkgICAgaWYgeyFbcmVnZXhwIC1zdGFydCAkdXNlZCAtaW5kaWNlcyAiXFtcIlxcXFxdIiAkc3RyIGZpcnN0XX0geworCQllcnJvciAidW5tYXRjaGVkIGRvdWJsZS1xdW90ZSIKKwkgICAgfQorCSAgICBzZXQgZmlyc3QgW2xpbmRleCAkZmlyc3QgMF0KKwkgICAgc2V0IGNoIFtzdHJpbmcgaW5kZXggJHN0ciAkZmlyc3RdCisJICAgIGlmIHskZmlyc3QgPiAkdXNlZH0geworCQlhcHBlbmQgcmV0IFtzdHJpbmcgcmFuZ2UgJHN0ciAkdXNlZCBbZXhwciB7JGZpcnN0IC0gMX1dXQorCQlzZXQgdXNlZCAkZmlyc3QKKwkgICAgfQorCSAgICBpZiB7JGNoIGVxICJcIiJ9IGJyZWFrCisJICAgIGluY3IgdXNlZAorCSAgICBhcHBlbmQgcmV0IFtzdHJpbmcgaW5kZXggJHN0ciAkdXNlZF0KKwkgICAgaW5jciB1c2VkCisJfQorICAgIH0KKyAgICByZXR1cm4gW2xpc3QgJHVzZWQgJHJldF0KK30KKworcHJvYyBzaGVsbHNwbGl0IHtzdHJ9IHsKKyAgICBzZXQgbCB7fQorICAgIHdoaWxlIHsxfSB7CisJc2V0IHN0ciBbc3RyaW5nIHRyaW1sZWZ0ICRzdHJdCisJaWYgeyRzdHIgZXEge319IGJyZWFrCisJc2V0IGRxIFtzaGVsbGRlcXVvdGUgJHN0cl0KKwlzZXQgbiBbbGluZGV4ICRkcSAwXQorCXNldCB3b3JkIFtsaW5kZXggJGRxIDFdCisJc2V0IHN0ciBbc3RyaW5nIHJhbmdlICRzdHIgJG4gZW5kXQorCWxhcHBlbmQgbCAkd29yZAorICAgIH0KKyAgICByZXR1cm4gJGwKK30KKworcHJvYyBzZXRfd2luZG93X3RpdGxlIHt9IHsKKyAgICBnbG9iYWwgYXBwbmFtZSBjdXJ2aWV3IHZpZXduYW1lIHZyZXZzCisgICAgc2V0IHJldiBbbWMgIkFsbCBmaWxlcyJdCisgICAgaWYgeyRjdXJ2aWV3IG5lIDB9IHsKKwlpZiB7JHZpZXduYW1lKCRjdXJ2aWV3KSBlcSBbbWMgIkNvbW1hbmQgbGluZSJdfSB7CisJICAgIHNldCByZXYgW3N0cmluZyBtYXAgeyItLWdpdGstc3ltbWV0cmljLWRpZmYtbWFya2VyIiAiLS1tZXJnZSJ9ICR2cmV2cygkY3VydmlldyldCisJfSBlbHNlIHsKKwkgICAgc2V0IHJldiAkdmlld25hbWUoJGN1cnZpZXcpCisJfQorICAgIH0KKyAgICB3bSB0aXRsZSAuICJbcmVwb25hbWVdOiAkcmV2IC0gJGFwcG5hbWUiCit9CisKKyMgQ29kZSB0byBpbXBsZW1lbnQgbXVsdGlwbGUgdmlld3MKKworcHJvYyBuZXd2aWV3IHtpc2hpZ2hsaWdodH0geworICAgIGdsb2JhbCBuZXh0dmlld251bSBuZXd2aWV3bmFtZSBuZXdpc2hpZ2hsaWdodAorICAgIGdsb2JhbCByZXZ0cmVlYXJncyB2aWV3YXJnc2NtZCBuZXd2aWV3b3B0cyBjdXJ2aWV3CisKKyAgICBzZXQgbmV3aXNoaWdobGlnaHQgJGlzaGlnaGxpZ2h0CisgICAgc2V0IHRvcCAuZ2l0a3ZpZXcKKyAgICBpZiB7W3dpbmZvIGV4aXN0cyAkdG9wXX0geworCXJhaXNlICR0b3AKKwlyZXR1cm4KKyAgICB9CisgICAgZGVjb2RlX3ZpZXdfb3B0cyAkbmV4dHZpZXdudW0gJHJldnRyZWVhcmdzCisgICAgc2V0IG5ld3ZpZXduYW1lKCRuZXh0dmlld251bSkgIlttYyAiVmlldyJdICRuZXh0dmlld251bSIKKyAgICBzZXQgbmV3dmlld29wdHMoJG5leHR2aWV3bnVtLHBlcm0pIDAKKyAgICBzZXQgbmV3dmlld29wdHMoJG5leHR2aWV3bnVtLGNtZCkgICR2aWV3YXJnc2NtZCgkY3VydmlldykKKyAgICB2aWV3ZWRpdG9yICR0b3AgJG5leHR2aWV3bnVtIFttYyAiR2l0ayB2aWV3IGRlZmluaXRpb24iXQorfQorCitzZXQga25vd25fdmlld19vcHRpb25zIHsKKyAgICB7cGVybSAgICAgIGIgICAgLiAge30gICAgICAgICAgICAgICB7bWMgIlJlbWVtYmVyIHRoaXMgdmlldyJ9fQorICAgIHtyZWZsYWJlbCAgbCAgICArICB7fSAgICAgICAgICAgICAgIHttYyAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiJ9fQorICAgIHtyZWZzICAgICAgdDE1ICAuLiB7fSAgICAgICAgICAgICAgIHttYyAiQnJhbmNoZXMgJiB0YWdzOiJ9fQorICAgIHthbGxyZWZzICAgYiAgICAqLiAiLS1hbGwiICAgICAgICAgIHttYyAiQWxsIHJlZnMifX0KKyAgICB7YnJhbmNoZXMgIGIgICAgLiAgIi0tYnJhbmNoZXMiICAgICB7bWMgIkFsbCAobG9jYWwpIGJyYW5jaGVzIn19CisgICAge3RhZ3MgICAgICBiICAgIC4gICItLXRhZ3MiICAgICAgICAge21jICJBbGwgdGFncyJ9fQorICAgIHtyZW1vdGVzICAgYiAgICAuICAiLS1yZW1vdGVzIiAgICAgIHttYyAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyJ9fQorICAgIHtjb21taXRsYmwgbCAgICArICB7fSAgICAgICAgICAgICAgIHttYyAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiJ9fQorICAgIHthdXRob3IgICAgdDE1ICAuLiAiLS1hdXRob3I9KiIgICAgIHttYyAiQXV0aG9yOiJ9fQorICAgIHtjb21taXR0ZXIgdDE1ICAuICAiLS1jb21taXR0ZXI9KiIgIHttYyAiQ29tbWl0dGVyOiJ9fQorICAgIHtsb2dpbmZvICAgdDE1ICAuLiAiLS1ncmVwPSoiICAgICAgIHttYyAiQ29tbWl0IE1lc3NhZ2U6In19CisgICAge2FsbG1hdGNoICBiICAgIC4uICItLWFsbC1tYXRjaCIgICAge21jICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSJ9fQorICAgIHtpZ3JlcCAgICAgYiAgICAuLiAiLS1pbnZlcnQtZ3JlcCIgIHttYyAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSJ9fQorICAgIHtjaGFuZ2VzX2wgbCAgICArICB7fSAgICAgICAgICAgICAgIHttYyAiQ2hhbmdlcyB0byBGaWxlczoifX0KKyAgICB7cGlja2F4ZV9zIHIwICAgLiAge30gICAgICAgICAgICAgICB7bWMgIkZpeGVkIFN0cmluZyJ9fQorICAgIHtwaWNrYXhlX3QgcjEgICAuICAiLS1waWNrYXhlLXJlZ2V4IiAge21jICJSZWd1bGFyIEV4cHJlc3Npb24ifX0KKyAgICB7cGlja2F4ZSAgIHQxNSAgLi4gIi1TKiIgICAgICAgICAgICB7bWMgIlNlYXJjaCBzdHJpbmc6In19CisgICAge2RhdGVsYWJlbCBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgMTU6Mjc6MzhcIik6In19CisgICAge3NpbmNlICAgICB0MTUgIC4uICB7Ii0tc2luY2U9KiIgIi0tYWZ0ZXI9KiJ9ICB7bWMgIlNpbmNlOiJ9fQorICAgIHt1bnRpbCAgICAgdDE1ICAuICAgeyItLXVudGlsPSoiICItLWJlZm9yZT0qIn0ge21jICJVbnRpbDoifX0KKyAgICB7bGltaXRfbGJsIGwgICAgKyAge30gICAgICAgICAgICAgICB7bWMgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6In19CisgICAge2xpbWl0ICAgICB0MTAgICouICItLW1heC1jb3VudD0qIiAge21jICJOdW1iZXIgdG8gc2hvdzoifX0KKyAgICB7c2tpcCAgICAgIHQxMCAgLiAgIi0tc2tpcD0qIiAgICAgICB7bWMgIk51bWJlciB0byBza2lwOiJ9fQorICAgIHttaXNjX2xibCAgbCAgICArICB7fSAgICAgICAgICAgICAgIHttYyAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiJ9fQorICAgIHtkb3JkZXIgICAgYiAgICAqLiB7Ii0tZGF0ZS1vcmRlciIgIi1kIn0gICAgICB7bWMgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSJ9fQorICAgIHtscmlnaHQgICAgYiAgICAuICAiLS1sZWZ0LXJpZ2h0IiAgIHttYyAiTWFyayBicmFuY2ggc2lkZXMifX0KKyAgICB7Zmlyc3QgICAgIGIgICAgLiAgIi0tZmlyc3QtcGFyZW50IiB7bWMgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCJ9fQorICAgIHtzbXBsaHN0ICAgYiAgICAuICAiLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uIiAgIHttYyAiU2ltcGxlIGhpc3RvcnkifX0KKyAgICB7YXJncyAgICAgIHQ1MCAgKi4ge30gICAgICAgICAgICAgICB7bWMgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6In19CisgICAge2FsbHBhdGhzICBwYXRoICsgIHt9ICAgICAgICAgICAgICAge21jICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiJ9fQorICAgIHtjbWQgICAgICAgdDUwPSArICB7fSAgICAgICAgICAgICAgIHttYyAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToifX0KKyAgICB9CisKKyMgQ29udmVydCAkbmV3dmlld29wdHMoJG4sIC4uLikgaW50byBhcmdzIGZvciBnaXQgbG9nLgorcHJvYyBlbmNvZGVfdmlld19vcHRzIHtufSB7CisgICAgZ2xvYmFsIGtub3duX3ZpZXdfb3B0aW9ucyBuZXd2aWV3b3B0cworCisgICAgc2V0IHJhcmdzIFtsaXN0XQorICAgIGZvcmVhY2ggb3B0ICRrbm93bl92aWV3X29wdGlvbnMgeworCXNldCBwYXR0ZXJucyBbbGluZGV4ICRvcHQgM10KKwlpZiB7JHBhdHRlcm5zIGVxIHt9fSBjb250aW51ZQorCXNldCBwYXR0ZXJuIFtsaW5kZXggJHBhdHRlcm5zIDBdCisKKwlpZiB7W2xpbmRleCAkb3B0IDFdIGVxICJiIn0geworCSAgICBzZXQgdmFsICRuZXd2aWV3b3B0cygkbixbbGluZGV4ICRvcHQgMF0pCisJICAgIGlmIHskdmFsfSB7CisJCWxhcHBlbmQgcmFyZ3MgJHBhdHRlcm4KKwkgICAgfQorCX0gZWxzZWlmIHtbcmVnZXhwIHtecihcZCspJH0gW2xpbmRleCAkb3B0IDFdIHR5cGUgdmFsdWVdfSB7CisJICAgIHJlZ2V4cCB7XiguKl8pfSBbbGluZGV4ICRvcHQgMF0gdXNlbGVzc3ZhciBidXR0b25faWQKKwkgICAgc2V0IHZhbCAkbmV3dmlld29wdHMoJG4sJGJ1dHRvbl9pZCkKKwkgICAgaWYgeyR2YWwgZXEgJHZhbHVlfSB7CisJCWxhcHBlbmQgcmFyZ3MgJHBhdHRlcm4KKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHNldCB2YWwgJG5ld3ZpZXdvcHRzKCRuLFtsaW5kZXggJG9wdCAwXSkKKwkgICAgc2V0IHZhbCBbc3RyaW5nIHRyaW0gJHZhbF0KKwkgICAgaWYgeyR2YWwgbmUge319IHsKKwkJc2V0IHBmaXggW3N0cmluZyByYW5nZSAkcGF0dGVybiAwIGVuZC0xXQorCQlsYXBwZW5kIHJhcmdzICRwZml4JHZhbAorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgcmFyZ3MgW2NvbmNhdCAkcmFyZ3MgW3NoZWxsc3BsaXQgJG5ld3ZpZXdvcHRzKCRuLHJlZnMpXV0KKyAgICByZXR1cm4gW2NvbmNhdCAkcmFyZ3MgW3NoZWxsc3BsaXQgJG5ld3ZpZXdvcHRzKCRuLGFyZ3MpXV0KK30KKworIyBGaWxsICRuZXd2aWV3b3B0cygkbiwgLi4uKSBiYXNlZCBvbiBhcmdzIGZvciBnaXQgbG9nLgorcHJvYyBkZWNvZGVfdmlld19vcHRzIHtuIHZpZXdfYXJnc30geworICAgIGdsb2JhbCBrbm93bl92aWV3X29wdGlvbnMgbmV3dmlld29wdHMKKworICAgIGZvcmVhY2ggb3B0ICRrbm93bl92aWV3X29wdGlvbnMgeworCXNldCBpZCBbbGluZGV4ICRvcHQgMF0KKwlpZiB7W2xpbmRleCAkb3B0IDFdIGVxICJiIn0geworCSAgICAjIENoZWNrYm94ZXMKKwkgICAgc2V0IHZhbCAwCisgICAgICAgIH0gZWxzZWlmIHtbcmVnZXhwIHtecihcZCspJH0gW2xpbmRleCAkb3B0IDFdXX0geworCSAgICAjIFJhZGlvYnV0dG9ucworCSAgICByZWdleHAge14oLipfKX0gJGlkIHVzZWxlc3N2YXIgaWQKKwkgICAgc2V0IHZhbCAwCisJfSBlbHNlIHsKKwkgICAgIyBUZXh0IGZpZWxkcworCSAgICBzZXQgdmFsIHt9CisJfQorCXNldCBuZXd2aWV3b3B0cygkbiwkaWQpICR2YWwKKyAgICB9CisgICAgc2V0IG9hcmdzIFtsaXN0XQorICAgIHNldCByZWZhcmdzIFtsaXN0XQorICAgIGZvcmVhY2ggYXJnICR2aWV3X2FyZ3MgeworCWlmIHtbcmVnZXhwIC0tIHteLShbMC05XSspJH0gJGFyZyBhcmcgY250XQorCSAgICAmJiAhW2luZm8gZXhpc3RzIGZvdW5kKGxpbWl0KV19IHsKKwkgICAgc2V0IG5ld3ZpZXdvcHRzKCRuLGxpbWl0KSAkY250CisJICAgIHNldCBmb3VuZChsaW1pdCkgMQorCSAgICBjb250aW51ZQorCX0KKwljYXRjaCB7IHVuc2V0IHZhbCB9CisJZm9yZWFjaCBvcHQgJGtub3duX3ZpZXdfb3B0aW9ucyB7CisJICAgIHNldCBpZCBbbGluZGV4ICRvcHQgMF0KKwkgICAgaWYge1tpbmZvIGV4aXN0cyBmb3VuZCgkaWQpXX0gY29udGludWUKKwkgICAgZm9yZWFjaCBwYXR0ZXJuIFtsaW5kZXggJG9wdCAzXSB7CisJCWlmIHshW3N0cmluZyBtYXRjaCAkcGF0dGVybiAkYXJnXX0gY29udGludWUKKwkJaWYge1tsaW5kZXggJG9wdCAxXSBlcSAiYiJ9IHsKKwkJICAgICMgQ2hlY2sgYnV0dG9ucworCQkgICAgc2V0IHZhbCAxCisJCX0gZWxzZWlmIHtbcmVnZXhwIHtecihcZCspJH0gW2xpbmRleCAkb3B0IDFdIG1hdGNoIG51bV19IHsKKwkJICAgICMgUmFkaW8gYnV0dG9ucworCQkgICAgcmVnZXhwIHteKC4qXyl9ICRpZCB1c2VsZXNzdmFyIGlkCisJCSAgICBzZXQgdmFsICRudW0KKwkJfSBlbHNlIHsKKwkJICAgICMgVGV4dCBpbnB1dCBmaWVsZHMKKwkJICAgIHNldCBzaXplIFtzdHJpbmcgbGVuZ3RoICRwYXR0ZXJuXQorCQkgICAgc2V0IHZhbCBbc3RyaW5nIHJhbmdlICRhcmcgW2V4cHIgeyRzaXplLTF9XSBlbmRdCisJCX0KKwkJc2V0IG5ld3ZpZXdvcHRzKCRuLCRpZCkgJHZhbAorCQlzZXQgZm91bmQoJGlkKSAxCisJCWJyZWFrCisJICAgIH0KKwkgICAgaWYge1tpbmZvIGV4aXN0cyB2YWxdfSBicmVhaworCX0KKwlpZiB7W2luZm8gZXhpc3RzIHZhbF19IGNvbnRpbnVlCisJaWYge1tyZWdleHAge14tfSAkYXJnXX0geworCSAgICBsYXBwZW5kIG9hcmdzICRhcmcKKwl9IGVsc2UgeworCSAgICBsYXBwZW5kIHJlZmFyZ3MgJGFyZworCX0KKyAgICB9CisgICAgc2V0IG5ld3ZpZXdvcHRzKCRuLHJlZnMpIFtzaGVsbGFyZ2xpc3QgJHJlZmFyZ3NdCisgICAgc2V0IG5ld3ZpZXdvcHRzKCRuLGFyZ3MpIFtzaGVsbGFyZ2xpc3QgJG9hcmdzXQorfQorCitwcm9jIGVkaXRfb3JfbmV3dmlldyB7fSB7CisgICAgZ2xvYmFsIGN1cnZpZXcKKworICAgIGlmIHskY3VydmlldyA+IDB9IHsKKwllZGl0dmlldworICAgIH0gZWxzZSB7CisJbmV3dmlldyAwCisgICAgfQorfQorCitwcm9jIGVkaXR2aWV3IHt9IHsKKyAgICBnbG9iYWwgY3VydmlldworICAgIGdsb2JhbCB2aWV3bmFtZSB2aWV3cGVybSBuZXd2aWV3bmFtZSBuZXd2aWV3b3B0cworICAgIGdsb2JhbCB2aWV3YXJncyB2aWV3YXJnc2NtZAorCisgICAgc2V0IHRvcCAuZ2l0a3ZlZGl0LSRjdXJ2aWV3CisgICAgaWYge1t3aW5mbyBleGlzdHMgJHRvcF19IHsKKwlyYWlzZSAkdG9wCisJcmV0dXJuCisgICAgfQorICAgIGRlY29kZV92aWV3X29wdHMgJGN1cnZpZXcgJHZpZXdhcmdzKCRjdXJ2aWV3KQorICAgIHNldCBuZXd2aWV3bmFtZSgkY3VydmlldykgICAgICAkdmlld25hbWUoJGN1cnZpZXcpCisgICAgc2V0IG5ld3ZpZXdvcHRzKCRjdXJ2aWV3LHBlcm0pICR2aWV3cGVybSgkY3VydmlldykKKyAgICBzZXQgbmV3dmlld29wdHMoJGN1cnZpZXcsY21kKSAgJHZpZXdhcmdzY21kKCRjdXJ2aWV3KQorICAgIHZpZXdlZGl0b3IgJHRvcCAkY3VydmlldyAiW21jICJHaXRrOiBlZGl0IHZpZXciXSAkdmlld25hbWUoJGN1cnZpZXcpIgorfQorCitwcm9jIHZpZXdlZGl0b3Ige3RvcCBuIHRpdGxlfSB7CisgICAgZ2xvYmFsIG5ld3ZpZXduYW1lIG5ld3ZpZXdvcHRzIHZpZXdmaWxlcyBiZ2NvbG9yCisgICAgZ2xvYmFsIGtub3duX3ZpZXdfb3B0aW9ucyBOUworCisgICAgdHRrX3RvcGxldmVsICR0b3AKKyAgICB3bSB0aXRsZSAkdG9wIFtjb25jYXQgJHRpdGxlIFttYyAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiXV0KKyAgICBtYWtlX3RyYW5zaWVudCAkdG9wIC4KKworICAgICMgVmlldyBuYW1lCisgICAgJHtOU306OmZyYW1lICR0b3AubmZyCisgICAgJHtOU306OmxhYmVsICR0b3AubmwgLXRleHQgW21jICJWaWV3IE5hbWUiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLm5hbWUgLXdpZHRoIDIwIC10ZXh0dmFyaWFibGUgbmV3dmlld25hbWUoJG4pCisgICAgcGFjayAkdG9wLm5mciAtaW4gJHRvcCAtZmlsbCB4IC1wYWR5IDUgLXBhZHggMworICAgIHBhY2sgJHRvcC5ubCAtaW4gJHRvcC5uZnIgLXNpZGUgbGVmdCAtcGFkeCB7MCA1fQorICAgIHBhY2sgJHRvcC5uYW1lIC1pbiAkdG9wLm5mciAtc2lkZSBsZWZ0IC1wYWR4IHswIDI1fQorCisgICAgIyBWaWV3IG9wdGlvbnMKKyAgICBzZXQgY2ZyYW1lICR0b3AubmZyCisgICAgc2V0IGNleHBhbmQgMAorICAgIHNldCBjbnQgMAorICAgIGZvcmVhY2ggb3B0ICRrbm93bl92aWV3X29wdGlvbnMgeworCXNldCBpZCBbbGluZGV4ICRvcHQgMF0KKwlzZXQgdHlwZSBbbGluZGV4ICRvcHQgMV0KKwlzZXQgZmxhZ3MgW2xpbmRleCAkb3B0IDJdCisJc2V0IHRpdGxlIFtldmFsIFtsaW5kZXggJG9wdCA0XV0KKwlzZXQgbHhwYWQgMAorCisJaWYgeyRmbGFncyBlcSAiKyIgfHwgJGZsYWdzIGVxICIqIn0geworCSAgICBzZXQgY2ZyYW1lICR0b3AuZnIkY250CisJICAgIGluY3IgY250CisJICAgICR7TlN9OjpmcmFtZSAkY2ZyYW1lCisJICAgIHBhY2sgJGNmcmFtZSAtaW4gJHRvcCAtZmlsbCB4IC1wYWR5IDMgLXBhZHggMworCSAgICBzZXQgY2V4cGFuZCBbZXhwciB7JGZsYWdzIGVxICIqIn1dCisgICAgICAgIH0gZWxzZWlmIHskZmxhZ3MgZXEgIi4uIiB8fCAkZmxhZ3MgZXEgIiouIn0geworCSAgICBzZXQgY2ZyYW1lICR0b3AuZnIkY250CisJICAgIGluY3IgY250CisJICAgICR7TlN9OjpmcmFtZSAkY2ZyYW1lCisJICAgIHBhY2sgJGNmcmFtZSAtaW4gJHRvcCAtZmlsbCB4IC1wYWR5IDMgLXBhZHggW2xpc3QgMTUgM10KKwkgICAgc2V0IGNleHBhbmQgW2V4cHIgeyRmbGFncyBlcSAiKi4ifV0KKwl9IGVsc2UgeworCSAgICBzZXQgbHhwYWQgNQorCX0KKworCWlmIHskdHlwZSBlcSAibCJ9IHsKKyAgICAgICAgICAgICR7TlN9OjpsYWJlbCAkY2ZyYW1lLmxfJGlkIC10ZXh0ICR0aXRsZQorICAgICAgICAgICAgcGFjayAkY2ZyYW1lLmxfJGlkIC1pbiAkY2ZyYW1lIC1zaWRlIGxlZnQgLXBhZHkgW2xpc3QgMyAwXSAtYW5jaG9yIHcKKwl9IGVsc2VpZiB7JHR5cGUgZXEgImIifSB7CisJICAgICR7TlN9OjpjaGVja2J1dHRvbiAkY2ZyYW1lLmNfJGlkIC10ZXh0ICR0aXRsZSAtdmFyaWFibGUgbmV3dmlld29wdHMoJG4sJGlkKQorCSAgICBwYWNrICRjZnJhbWUuY18kaWQgLWluICRjZnJhbWUgLXNpZGUgbGVmdCBcCisJCS1wYWR4IFtsaXN0ICRseHBhZCAwXSAtZXhwYW5kICRjZXhwYW5kIC1hbmNob3IgdworCX0gZWxzZWlmIHtbcmVnZXhwIHtecihcZCspJH0gJHR5cGUgdHlwZSBzel19IHsKKwkgICAgcmVnZXhwIHteKC4qXyl9ICRpZCB1c2VsZXNzdmFyIGJ1dHRvbl9pZAorCSAgICAke05TfTo6cmFkaW9idXR0b24gJGNmcmFtZS5jXyRpZCAtdGV4dCAkdGl0bGUgLXZhcmlhYmxlIG5ld3ZpZXdvcHRzKCRuLCRidXR0b25faWQpIC12YWx1ZSAkc3oKKwkgICAgcGFjayAkY2ZyYW1lLmNfJGlkIC1pbiAkY2ZyYW1lIC1zaWRlIGxlZnQgXAorCQktcGFkeCBbbGlzdCAkbHhwYWQgMF0gLWV4cGFuZCAkY2V4cGFuZCAtYW5jaG9yIHcKKwl9IGVsc2VpZiB7W3JlZ2V4cCB7XnQoXGQrKSR9ICR0eXBlIHR5cGUgc3pdfSB7CisJICAgICR7TlN9OjpsYWJlbCAkY2ZyYW1lLmxfJGlkIC10ZXh0ICR0aXRsZQorCSAgICAke05TfTo6ZW50cnkgJGNmcmFtZS5lXyRpZCAtd2lkdGggJHN6IC1iYWNrZ3JvdW5kICRiZ2NvbG9yIFwKKwkJLXRleHR2YXJpYWJsZSBuZXd2aWV3b3B0cygkbiwkaWQpCisJICAgIHBhY2sgJGNmcmFtZS5sXyRpZCAtaW4gJGNmcmFtZSAtc2lkZSBsZWZ0IC1wYWR4IFtsaXN0ICRseHBhZCAwXQorCSAgICBwYWNrICRjZnJhbWUuZV8kaWQgLWluICRjZnJhbWUgLXNpZGUgbGVmdCAtZXhwYW5kIDEgLWZpbGwgeAorCX0gZWxzZWlmIHtbcmVnZXhwIHtedChcZCspPSR9ICR0eXBlIHR5cGUgc3pdfSB7CisJICAgICR7TlN9OjpsYWJlbCAkY2ZyYW1lLmxfJGlkIC10ZXh0ICR0aXRsZQorCSAgICAke05TfTo6ZW50cnkgJGNmcmFtZS5lXyRpZCAtd2lkdGggJHN6IC1iYWNrZ3JvdW5kICRiZ2NvbG9yIFwKKwkJLXRleHR2YXJpYWJsZSBuZXd2aWV3b3B0cygkbiwkaWQpCisJICAgIHBhY2sgJGNmcmFtZS5sXyRpZCAtaW4gJGNmcmFtZSAtc2lkZSB0b3AgLXBhZHkgW2xpc3QgMyAwXSAtYW5jaG9yIHcKKwkgICAgcGFjayAkY2ZyYW1lLmVfJGlkIC1pbiAkY2ZyYW1lIC1zaWRlIHRvcCAtZmlsbCB4CisJfSBlbHNlaWYgeyR0eXBlIGVxICJwYXRoIn0geworCSAgICAke05TfTo6bGFiZWwgJHRvcC5sIC10ZXh0ICR0aXRsZQorCSAgICBwYWNrICR0b3AubCAtaW4gJHRvcCAtc2lkZSB0b3AgLXBhZHkgW2xpc3QgMyAwXSAtYW5jaG9yIHcgLXBhZHggMworCSAgICB0ZXh0ICR0b3AudCAtd2lkdGggNDAgLWhlaWdodCA1IC1iYWNrZ3JvdW5kICRiZ2NvbG9yCisJICAgIGlmIHtbaW5mbyBleGlzdHMgdmlld2ZpbGVzKCRuKV19IHsKKwkJZm9yZWFjaCBmICR2aWV3ZmlsZXMoJG4pIHsKKwkJICAgICR0b3AudCBpbnNlcnQgZW5kICRmCisJCSAgICAkdG9wLnQgaW5zZXJ0IGVuZCAiXG4iCisJCX0KKwkJJHRvcC50IGRlbGV0ZSB7ZW5kIC0gMWN9IGVuZAorCQkkdG9wLnQgbWFyayBzZXQgaW5zZXJ0IDAuMAorCSAgICB9CisJICAgIHBhY2sgJHRvcC50IC1pbiAkdG9wIC1zaWRlIHRvcCAtcGFkeSBbbGlzdCAwIDVdIC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR4IDMKKwl9CisgICAgfQorCisgICAgJHtOU306OmZyYW1lICR0b3AuYnV0cworICAgICR7TlN9OjpidXR0b24gJHRvcC5idXRzLm9rIC10ZXh0IFttYyAiT0siXSAtY29tbWFuZCBbbGlzdCBuZXd2aWV3b2sgJHRvcCAkbl0KKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5hcHBseSAtdGV4dCBbbWMgIkFwcGx5IChGNSkiXSAtY29tbWFuZCBbbGlzdCBuZXd2aWV3b2sgJHRvcCAkbiAxXQorICAgICR7TlN9OjpidXR0b24gJHRvcC5idXRzLmNhbiAtdGV4dCBbbWMgIkNhbmNlbCJdIC1jb21tYW5kIFtsaXN0IGRlc3Ryb3kgJHRvcF0KKyAgICBiaW5kICR0b3AgPENvbnRyb2wtUmV0dXJuPiBbbGlzdCBuZXd2aWV3b2sgJHRvcCAkbl0KKyAgICBiaW5kICR0b3AgPEY1PiBbbGlzdCBuZXd2aWV3b2sgJHRvcCAkbiAxXQorICAgIGJpbmQgJHRvcCA8RXNjYXBlPiBbbGlzdCBkZXN0cm95ICR0b3BdCisgICAgZ3JpZCAkdG9wLmJ1dHMub2sgJHRvcC5idXRzLmFwcGx5ICR0b3AuYnV0cy5jYW4KKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMCAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAxIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDIgLXdlaWdodCAxIC11bmlmb3JtIGEKKyAgICBwYWNrICR0b3AuYnV0cyAtaW4gJHRvcCAtc2lkZSB0b3AgLWZpbGwgeAorICAgIGZvY3VzICR0b3AudAorfQorCitwcm9jIGRvdmlld21lbnUge20gZmlyc3QgY21kIG9wIGFyZ3Z9IHsKKyAgICBzZXQgbm1lbnUgWyRtIGluZGV4IGVuZF0KKyAgICBmb3Ige3NldCBpICRmaXJzdH0geyRpIDw9ICRubWVudX0ge2luY3IgaX0geworCWlmIHtbJG0gZW50cnljZ2V0ICRpIC1jb21tYW5kXSBlcSAkY21kfSB7CisJICAgIGV2YWwgJG0gJG9wICRpICRhcmd2CisJICAgIGJyZWFrCisJfQorICAgIH0KK30KKworcHJvYyBhbGx2aWV3bWVudXMge24gb3AgYXJnc30geworICAgICMgZ2xvYmFsIHZpZXdobG1lbnUKKworICAgIGRvdmlld21lbnUgLmJhci52aWV3IDUgW2xpc3Qgc2hvd3ZpZXcgJG5dICRvcCAkYXJncworICAgICMgZG92aWV3bWVudSAkdmlld2hsbWVudSAxIFtsaXN0IGFkZHZoaWdobGlnaHQgJG5dICRvcCAkYXJncworfQorCitwcm9jIG5ld3ZpZXdvayB7dG9wIG4ge2FwcGx5IDB9fSB7CisgICAgZ2xvYmFsIG5leHR2aWV3bnVtIG5ld3ZpZXdwZXJtIG5ld3ZpZXduYW1lIG5ld2lzaGlnaGxpZ2h0CisgICAgZ2xvYmFsIHZpZXduYW1lIHZpZXdmaWxlcyB2aWV3cGVybSB2aWV3Y2hhbmdlZCBzZWxlY3RlZHZpZXcgY3VydmlldworICAgIGdsb2JhbCB2aWV3YXJncyB2aWV3YXJnc2NtZCBuZXd2aWV3b3B0cyB2aWV3aGxtZW51CisKKyAgICBpZiB7W2NhdGNoIHsKKwlzZXQgbmV3YXJncyBbZW5jb2RlX3ZpZXdfb3B0cyAkbl0KKyAgICB9IGVycl19IHsKKwllcnJvcl9wb3B1cCAiW21jICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiXSAkZXJyIiAkdG9wCisJcmV0dXJuCisgICAgfQorICAgIHNldCBmaWxlcyB7fQorICAgIGZvcmVhY2ggZiBbc3BsaXQgWyR0b3AudCBnZXQgMC4wIGVuZF0gIlxuIl0geworCXNldCBmdCBbc3RyaW5nIHRyaW0gJGZdCisJaWYgeyRmdCBuZSB7fX0geworCSAgICBsYXBwZW5kIGZpbGVzICRmdAorCX0KKyAgICB9CisgICAgaWYgeyFbaW5mbyBleGlzdHMgdmlld2ZpbGVzKCRuKV19IHsKKwkjIGNyZWF0aW5nIGEgbmV3IHZpZXcKKwlpbmNyIG5leHR2aWV3bnVtCisJc2V0IHZpZXduYW1lKCRuKSAkbmV3dmlld25hbWUoJG4pCisJc2V0IHZpZXdwZXJtKCRuKSAkbmV3dmlld29wdHMoJG4scGVybSkKKwlzZXQgdmlld2NoYW5nZWQoJG4pIDEKKwlzZXQgdmlld2ZpbGVzKCRuKSAkZmlsZXMKKwlzZXQgdmlld2FyZ3MoJG4pICRuZXdhcmdzCisJc2V0IHZpZXdhcmdzY21kKCRuKSAkbmV3dmlld29wdHMoJG4sY21kKQorCWFkZHZpZXdtZW51ICRuCisJaWYgeyEkbmV3aXNoaWdobGlnaHR9IHsKKwkgICAgcnVuIHNob3d2aWV3ICRuCisJfSBlbHNlIHsKKwkgICAgcnVuIGFkZHZoaWdobGlnaHQgJG4KKwl9CisgICAgfSBlbHNlIHsKKwkjIGVkaXRpbmcgYW4gZXhpc3RpbmcgdmlldworCXNldCB2aWV3cGVybSgkbikgJG5ld3ZpZXdvcHRzKCRuLHBlcm0pCisJc2V0IHZpZXdjaGFuZ2VkKCRuKSAxCisJaWYgeyRuZXd2aWV3bmFtZSgkbikgbmUgJHZpZXduYW1lKCRuKX0geworCSAgICBzZXQgdmlld25hbWUoJG4pICRuZXd2aWV3bmFtZSgkbikKKwkgICAgZG92aWV3bWVudSAuYmFyLnZpZXcgNSBbbGlzdCBzaG93dmlldyAkbl0gXAorCQllbnRyeWNvbmYgW2xpc3QgLWxhYmVsICR2aWV3bmFtZSgkbildCisJICAgICMgZG92aWV3bWVudSAkdmlld2hsbWVudSAxIFtsaXN0IGFkZHZoaWdobGlnaHQgJG5dIFwKKwkJIyBlbnRyeWNvbmYgW2xpc3QgLWxhYmVsICR2aWV3bmFtZSgkbikgLXZhbHVlICR2aWV3bmFtZSgkbildCisJfQorCWlmIHskZmlsZXMgbmUgJHZpZXdmaWxlcygkbikgfHwgJG5ld2FyZ3MgbmUgJHZpZXdhcmdzKCRuKSB8fCBcCisJCSRuZXd2aWV3b3B0cygkbixjbWQpIG5lICR2aWV3YXJnc2NtZCgkbil9IHsKKwkgICAgc2V0IHZpZXdmaWxlcygkbikgJGZpbGVzCisJICAgIHNldCB2aWV3YXJncygkbikgJG5ld2FyZ3MKKwkgICAgc2V0IHZpZXdhcmdzY21kKCRuKSAkbmV3dmlld29wdHMoJG4sY21kKQorCSAgICBpZiB7JGN1cnZpZXcgPT0gJG59IHsKKwkJcnVuIHJlbG9hZGNvbW1pdHMKKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYgeyRhcHBseX0gcmV0dXJuCisgICAgY2F0Y2gge2Rlc3Ryb3kgJHRvcH0KK30KKworcHJvYyBkZWx2aWV3IHt9IHsKKyAgICBnbG9iYWwgY3VydmlldyB2aWV3cGVybSBobHZpZXcgc2VsZWN0ZWRobHZpZXcgdmlld2NoYW5nZWQKKworICAgIGlmIHskY3VydmlldyA9PSAwfSByZXR1cm4KKyAgICBpZiB7W2luZm8gZXhpc3RzIGhsdmlld10gJiYgJGhsdmlldyA9PSAkY3Vydmlld30geworCXNldCBzZWxlY3RlZGhsdmlldyBbbWMgIk5vbmUiXQorCXVuc2V0IGhsdmlldworICAgIH0KKyAgICBhbGx2aWV3bWVudXMgJGN1cnZpZXcgZGVsZXRlCisgICAgc2V0IHZpZXdwZXJtKCRjdXJ2aWV3KSAwCisgICAgc2V0IHZpZXdjaGFuZ2VkKCRjdXJ2aWV3KSAxCisgICAgc2hvd3ZpZXcgMAorfQorCitwcm9jIGFkZHZpZXdtZW51IHtufSB7CisgICAgZ2xvYmFsIHZpZXduYW1lIHZpZXdobG1lbnUKKworICAgIC5iYXIudmlldyBhZGQgcmFkaW9idXR0b24gLWxhYmVsICR2aWV3bmFtZSgkbikgXAorCS1jb21tYW5kIFtsaXN0IHNob3d2aWV3ICRuXSAtdmFyaWFibGUgc2VsZWN0ZWR2aWV3IC12YWx1ZSAkbgorICAgICMkdmlld2hsbWVudSBhZGQgcmFkaW9idXR0b24gLWxhYmVsICR2aWV3bmFtZSgkbikgXAorICAgICMJLWNvbW1hbmQgW2xpc3QgYWRkdmhpZ2hsaWdodCAkbl0gLXZhcmlhYmxlIHNlbGVjdGVkaGx2aWV3Cit9CisKK3Byb2Mgc2hvd3ZpZXcge259IHsKKyAgICBnbG9iYWwgY3VydmlldyBjYWNoZWRfY29tbWl0cm93IG9yZGVydG9rCisgICAgZ2xvYmFsIGRpc3BsYXlvcmRlciBwYXJlbnRsaXN0IHJvd2lkbGlzdCByb3dpc29wdCByb3dmaW5hbAorICAgIGdsb2JhbCBjb2xvcm1hcCByb3d0ZXh0eCBuZXh0Y29sb3IgY2FudnhtYXgKKyAgICBnbG9iYWwgbnVtY29tbWl0cyB2aWV3Y29tcGxldGUKKyAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lIGN1cnJlbnRpZCBjYW52IGNhbnZ5MAorICAgIGdsb2JhbCB0cmVlZGlmZnMKKyAgICBnbG9iYWwgcGVuZGluZ19zZWxlY3QgbWFpbmhlYWRpZAorICAgIGdsb2JhbCBjb21taXRpZHgKKyAgICBnbG9iYWwgc2VsZWN0ZWR2aWV3CisgICAgZ2xvYmFsIGhsdmlldyBzZWxlY3RlZGhsdmlldyBjb21taXRpbnRlcmVzdAorCisgICAgaWYgeyRuID09ICRjdXJ2aWV3fSByZXR1cm4KKyAgICBzZXQgc2VsaWQge30KKyAgICBzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCisgICAgc2V0IHNwYW4gWyRjYW52IHl2aWV3XQorICAgIHNldCB5dG9wIFtleHByIHtbbGluZGV4ICRzcGFuIDBdICogJHltYXh9XQorICAgIHNldCB5Ym90IFtleHByIHtbbGluZGV4ICRzcGFuIDFdICogJHltYXh9XQorICAgIHNldCB5c2NyZWVuIFtleHByIHsoJHlib3QgLSAkeXRvcCkgLyAyfV0KKyAgICBpZiB7JHNlbGVjdGVkbGluZSBuZSB7fX0geworCXNldCBzZWxpZCAkY3VycmVudGlkCisJc2V0IHkgW3ljICRzZWxlY3RlZGxpbmVdCisJaWYgeyR5dG9wIDwgJHkgJiYgJHkgPCAkeWJvdH0geworCSAgICBzZXQgeXNjcmVlbiBbZXhwciB7JHkgLSAkeXRvcH1dCisJfQorICAgIH0gZWxzZWlmIHtbaW5mbyBleGlzdHMgcGVuZGluZ19zZWxlY3RdfSB7CisJc2V0IHNlbGlkICRwZW5kaW5nX3NlbGVjdAorCXVuc2V0IHBlbmRpbmdfc2VsZWN0CisgICAgfQorICAgIHVuc2VsZWN0bGluZQorICAgIG5vcm1hbGxpbmUKKyAgICB1bnNldCAtbm9jb21wbGFpbiB0cmVlZGlmZnMKKyAgICBjbGVhcl9kaXNwbGF5CisgICAgaWYge1tpbmZvIGV4aXN0cyBobHZpZXddICYmICRobHZpZXcgPT0gJG59IHsKKwl1bnNldCBobHZpZXcKKwlzZXQgc2VsZWN0ZWRobHZpZXcgW21jICJOb25lIl0KKyAgICB9CisgICAgdW5zZXQgLW5vY29tcGxhaW4gY29tbWl0aW50ZXJlc3QKKyAgICB1bnNldCAtbm9jb21wbGFpbiBjYWNoZWRfY29tbWl0cm93CisgICAgdW5zZXQgLW5vY29tcGxhaW4gb3JkZXJ0b2sKKworICAgIHNldCBjdXJ2aWV3ICRuCisgICAgc2V0IHNlbGVjdGVkdmlldyAkbgorICAgIC5iYXIudmlldyBlbnRyeWNvbmYgW21jYSAiJkVkaXQgdmlldy4uLiJdIC1zdGF0ZSBbZXhwciB7JG4gPT0gMD8gImRpc2FibGVkIjogIm5vcm1hbCJ9XQorICAgIC5iYXIudmlldyBlbnRyeWNvbmYgW21jYSAiJkRlbGV0ZSB2aWV3Il0gLXN0YXRlIFtleHByIHskbiA9PSAwPyAiZGlzYWJsZWQiOiAibm9ybWFsIn1dCisKKyAgICBydW4gcmVmaWxsX3JlZmxpc3QKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyB2aWV3Y29tcGxldGUoJG4pXX0geworCWdldGNvbW1pdHMgJHNlbGlkCisJcmV0dXJuCisgICAgfQorCisgICAgc2V0IGRpc3BsYXlvcmRlciB7fQorICAgIHNldCBwYXJlbnRsaXN0IHt9CisgICAgc2V0IHJvd2lkbGlzdCB7fQorICAgIHNldCByb3dpc29wdCB7fQorICAgIHNldCByb3dmaW5hbCB7fQorICAgIHNldCBudW1jb21taXRzICRjb21taXRpZHgoJG4pCisKKyAgICB1bnNldCAtbm9jb21wbGFpbiBjb2xvcm1hcAorICAgIHVuc2V0IC1ub2NvbXBsYWluIHJvd3RleHR4CisgICAgc2V0IG5leHRjb2xvciAwCisgICAgc2V0IGNhbnZ4bWF4IFskY2FudiBjZ2V0IC13aWR0aF0KKyAgICBzZXQgY3VydmlldyAkbgorICAgIHNldCByb3cgMAorICAgIHNldGNhbnZzY3JvbGwKKyAgICBzZXQgeWYgMAorICAgIHNldCByb3cge30KKyAgICBpZiB7JHNlbGlkIG5lIHt9ICYmIFtjb21taXRpbnZpZXcgJHNlbGlkICRuXX0geworCXNldCByb3cgW3Jvd29mY29tbWl0ICRzZWxpZF0KKwkjIHRyeSB0byBnZXQgdGhlIHNlbGVjdGVkIHJvdyBpbiB0aGUgc2FtZSBwb3NpdGlvbiBvbiB0aGUgc2NyZWVuCisJc2V0IHltYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAzXQorCXNldCB5dG9wIFtleHByIHtbeWMgJHJvd10gLSAkeXNjcmVlbn1dCisJaWYgeyR5dG9wIDwgMH0geworCSAgICBzZXQgeXRvcCAwCisJfQorCXNldCB5ZiBbZXhwciB7JHl0b3AgKiAxLjAgLyAkeW1heH1dCisgICAgfQorICAgIGFsbGNhbnZzIHl2aWV3IG1vdmV0byAkeWYKKyAgICBkcmF3dmlzaWJsZQorICAgIGlmIHskcm93IG5lIHt9fSB7CisJc2VsZWN0bGluZSAkcm93IDAKKyAgICB9IGVsc2VpZiB7ISR2aWV3Y29tcGxldGUoJG4pfSB7CisJcmVzZXRfcGVuZGluZ19zZWxlY3QgJHNlbGlkCisgICAgfSBlbHNlIHsKKwlyZXNldF9wZW5kaW5nX3NlbGVjdCB7fQorCisJaWYge1tjb21taXRpbnZpZXcgJHBlbmRpbmdfc2VsZWN0ICRjdXJ2aWV3XX0geworCSAgICBzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkcGVuZGluZ19zZWxlY3RdIDEKKwl9IGVsc2UgeworCSAgICBzZXQgcm93IFtmaXJzdF9yZWFsX3Jvd10KKwkgICAgaWYgeyRyb3cgPCAkbnVtY29tbWl0c30geworCQlzZWxlY3RsaW5lICRyb3cgMAorCSAgICB9CisJfQorICAgIH0KKyAgICBpZiB7ISR2aWV3Y29tcGxldGUoJG4pfSB7CisJaWYgeyRudW1jb21taXRzID09IDB9IHsKKwkgICAgc2hvd19zdGF0dXMgW21jICJSZWFkaW5nIGNvbW1pdHMuLi4iXQorCX0KKyAgICB9IGVsc2VpZiB7JG51bWNvbW1pdHMgPT0gMH0geworCXNob3dfc3RhdHVzIFttYyAiTm8gY29tbWl0cyBzZWxlY3RlZCJdCisgICAgfQorICAgIHNldF93aW5kb3dfdGl0bGUKK30KKworIyBTdHVmZiByZWxhdGluZyB0byB0aGUgaGlnaGxpZ2h0aW5nIGZhY2lsaXR5CisKK3Byb2MgaXNoaWdobGlnaHRlZCB7aWR9IHsKKyAgICBnbG9iYWwgdmhpZ2hsaWdodHMgZmhpZ2hsaWdodHMgbmhpZ2hsaWdodHMgcmhpZ2hsaWdodHMKKworICAgIGlmIHtbaW5mbyBleGlzdHMgbmhpZ2hsaWdodHMoJGlkKV0gJiYgJG5oaWdobGlnaHRzKCRpZCkgPiAwfSB7CisJcmV0dXJuICRuaGlnaGxpZ2h0cygkaWQpCisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgdmhpZ2hsaWdodHMoJGlkKV0gJiYgJHZoaWdobGlnaHRzKCRpZCkgPiAwfSB7CisJcmV0dXJuICR2aGlnaGxpZ2h0cygkaWQpCisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgZmhpZ2hsaWdodHMoJGlkKV0gJiYgJGZoaWdobGlnaHRzKCRpZCkgPiAwfSB7CisJcmV0dXJuICRmaGlnaGxpZ2h0cygkaWQpCisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgcmhpZ2hsaWdodHMoJGlkKV0gJiYgJHJoaWdobGlnaHRzKCRpZCkgPiAwfSB7CisJcmV0dXJuICRyaGlnaGxpZ2h0cygkaWQpCisgICAgfQorICAgIHJldHVybiAwCit9CisKK3Byb2MgYm9sZGVuIHtpZCBmb250fSB7CisgICAgZ2xvYmFsIGNhbnYgbGluZWh0YWcgY3VycmVudGlkIGJvbGRpZHMgbmVlZF9yZWRpc3BsYXkgbWFya2VkaWQKKworICAgICMgbmVlZF9yZWRpc3BsYXkgPSAxIG1lYW5zIHRoZSBkaXNwbGF5IGlzIHN0YWxlIGFuZCBhYm91dCB0byBiZSByZWRyYXduCisgICAgaWYgeyRuZWVkX3JlZGlzcGxheX0gcmV0dXJuCisgICAgbGFwcGVuZCBib2xkaWRzICRpZAorICAgICRjYW52IGl0ZW1jb25mICRsaW5laHRhZygkaWQpIC1mb250ICRmb250CisgICAgaWYge1tpbmZvIGV4aXN0cyBjdXJyZW50aWRdICYmICRpZCBlcSAkY3VycmVudGlkfSB7CisJJGNhbnYgZGVsZXRlIHNlY3NlbAorCXNldCB0IFtldmFsICRjYW52IGNyZWF0ZSByZWN0IFskY2FudiBiYm94ICRsaW5laHRhZygkaWQpXSBcCisJCSAgIC1vdXRsaW5lIHt7fX0gLXRhZ3Mgc2Vjc2VsIFwKKwkJICAgLWZpbGwgWyRjYW52IGNnZXQgLXNlbGVjdGJhY2tncm91bmRdXQorCSRjYW52IGxvd2VyICR0CisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgbWFya2VkaWRdICYmICRpZCBlcSAkbWFya2VkaWR9IHsKKwltYWtlX2lkbWFyayAkaWQKKyAgICB9Cit9CisKK3Byb2MgYm9sZGVuX25hbWUge2lkIGZvbnR9IHsKKyAgICBnbG9iYWwgY2FudjIgbGluZW50YWcgY3VycmVudGlkIGJvbGRuYW1laWRzIG5lZWRfcmVkaXNwbGF5CisKKyAgICBpZiB7JG5lZWRfcmVkaXNwbGF5fSByZXR1cm4KKyAgICBsYXBwZW5kIGJvbGRuYW1laWRzICRpZAorICAgICRjYW52MiBpdGVtY29uZiAkbGluZW50YWcoJGlkKSAtZm9udCAkZm9udAorICAgIGlmIHtbaW5mbyBleGlzdHMgY3VycmVudGlkXSAmJiAkaWQgZXEgJGN1cnJlbnRpZH0geworCSRjYW52MiBkZWxldGUgc2Vjc2VsCisJc2V0IHQgW2V2YWwgJGNhbnYyIGNyZWF0ZSByZWN0IFskY2FudjIgYmJveCAkbGluZW50YWcoJGlkKV0gXAorCQkgICAtb3V0bGluZSB7e319IC10YWdzIHNlY3NlbCBcCisJCSAgIC1maWxsIFskY2FudjIgY2dldCAtc2VsZWN0YmFja2dyb3VuZF1dCisJJGNhbnYyIGxvd2VyICR0CisgICAgfQorfQorCitwcm9jIHVuYm9sZGVuIHt9IHsKKyAgICBnbG9iYWwgYm9sZGlkcworCisgICAgc2V0IHN0aWxsYm9sZCB7fQorICAgIGZvcmVhY2ggaWQgJGJvbGRpZHMgeworCWlmIHshW2lzaGlnaGxpZ2h0ZWQgJGlkXX0geworCSAgICBib2xkZW4gJGlkIG1haW5mb250CisJfSBlbHNlIHsKKwkgICAgbGFwcGVuZCBzdGlsbGJvbGQgJGlkCisJfQorICAgIH0KKyAgICBzZXQgYm9sZGlkcyAkc3RpbGxib2xkCit9CisKK3Byb2MgYWRkdmhpZ2hsaWdodCB7bn0geworICAgIGdsb2JhbCBobHZpZXcgdmlld2NvbXBsZXRlIGN1cnZpZXcgdmhsX2RvbmUgY29tbWl0aWR4CisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGhsdmlld119IHsKKwlkZWx2aGlnaGxpZ2h0CisgICAgfQorICAgIHNldCBobHZpZXcgJG4KKyAgICBpZiB7JG4gIT0gJGN1cnZpZXcgJiYgIVtpbmZvIGV4aXN0cyB2aWV3Y29tcGxldGUoJG4pXX0geworCXN0YXJ0X3Jldl9saXN0ICRuCisgICAgfQorICAgIHNldCB2aGxfZG9uZSAkY29tbWl0aWR4KCRobHZpZXcpCisgICAgaWYgeyR2aGxfZG9uZSA+IDB9IHsKKwlkcmF3dmlzaWJsZQorICAgIH0KK30KKworcHJvYyBkZWx2aGlnaGxpZ2h0IHt9IHsKKyAgICBnbG9iYWwgaGx2aWV3IHZoaWdobGlnaHRzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBobHZpZXddfSByZXR1cm4KKyAgICB1bnNldCBobHZpZXcKKyAgICB1bnNldCAtbm9jb21wbGFpbiB2aGlnaGxpZ2h0cworICAgIHVuYm9sZGVuCit9CisKK3Byb2MgdmhpZ2hsaWdodG1vcmUge30geworICAgIGdsb2JhbCBobHZpZXcgdmhsX2RvbmUgY29tbWl0aWR4IHZoaWdobGlnaHRzIGN1cnZpZXcKKworICAgIHNldCBtYXggJGNvbW1pdGlkeCgkaGx2aWV3KQorICAgIHNldCB2ciBbdmlzaWJsZXJvd3NdCisgICAgc2V0IHIwIFtsaW5kZXggJHZyIDBdCisgICAgc2V0IHIxIFtsaW5kZXggJHZyIDFdCisgICAgZm9yIHtzZXQgaSAkdmhsX2RvbmV9IHskaSA8ICRtYXh9IHtpbmNyIGl9IHsKKwlzZXQgaWQgW2NvbW1pdG9ucm93ICRpICRobHZpZXddCisJaWYge1tjb21taXRpbnZpZXcgJGlkICRjdXJ2aWV3XX0geworCSAgICBzZXQgcm93IFtyb3dvZmNvbW1pdCAkaWRdCisJICAgIGlmIHskcjAgPD0gJHJvdyAmJiAkcm93IDw9ICRyMX0geworCQlpZiB7IVtoaWdobGlnaHRlZCAkcm93XX0geworCQkgICAgYm9sZGVuICRpZCBtYWluZm9udGJvbGQKKwkJfQorCQlzZXQgdmhpZ2hsaWdodHMoJGlkKSAxCisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCB2aGxfZG9uZSAkbWF4CisgICAgcmV0dXJuIDAKK30KKworcHJvYyBhc2t2aGlnaGxpZ2h0IHtyb3cgaWR9IHsKKyAgICBnbG9iYWwgaGx2aWV3IHZoaWdobGlnaHRzIGlkZHJhd24KKworICAgIGlmIHtbY29tbWl0aW52aWV3ICRpZCAkaGx2aWV3XX0geworCWlmIHtbaW5mbyBleGlzdHMgaWRkcmF3bigkaWQpXSAmJiAhW2lzaGlnaGxpZ2h0ZWQgJGlkXX0geworCSAgICBib2xkZW4gJGlkIG1haW5mb250Ym9sZAorCX0KKwlzZXQgdmhpZ2hsaWdodHMoJGlkKSAxCisgICAgfSBlbHNlIHsKKwlzZXQgdmhpZ2hsaWdodHMoJGlkKSAwCisgICAgfQorfQorCitwcm9jIGhmaWxlc19jaGFuZ2Uge30geworICAgIGdsb2JhbCBoaWdobGlnaHRfZmlsZXMgZmlsZWhpZ2hsaWdodCBmaGlnaGxpZ2h0cyBmaF9zZXJpYWwKKyAgICBnbG9iYWwgaGlnaGxpZ2h0X3BhdGhzCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGZpbGVoaWdobGlnaHRdfSB7CisJIyBkZWxldGUgcHJldmlvdXMgaGlnaGxpZ2h0cworCWNhdGNoIHtjbG9zZSAkZmlsZWhpZ2hsaWdodH0KKwl1bnNldCBmaWxlaGlnaGxpZ2h0CisJdW5zZXQgLW5vY29tcGxhaW4gZmhpZ2hsaWdodHMKKwl1bmJvbGRlbgorCXVuaGlnaGxpZ2h0X2ZpbGVsaXN0CisgICAgfQorICAgIHNldCBoaWdobGlnaHRfcGF0aHMge30KKyAgICBhZnRlciBjYW5jZWwgZG9fZmlsZV9obCAkZmhfc2VyaWFsCisgICAgaW5jciBmaF9zZXJpYWwKKyAgICBpZiB7JGhpZ2hsaWdodF9maWxlcyBuZSB7fX0geworCWFmdGVyIDMwMCBkb19maWxlX2hsICRmaF9zZXJpYWwKKyAgICB9Cit9CisKK3Byb2MgZ2R0dHlwZV9jaGFuZ2Uge25hbWUgaXggb3B9IHsKKyAgICBnbG9iYWwgZ2R0dHlwZSBoaWdobGlnaHRfZmlsZXMgZmluZHN0cmluZyBmaW5kcGF0dGVybgorCisgICAgc3RvcGZpbmRpbmcKKyAgICBpZiB7JGZpbmRzdHJpbmcgbmUge319IHsKKwlpZiB7JGdkdHR5cGUgZXEgW21jICJjb250YWluaW5nOiJdfSB7CisJICAgIGlmIHskaGlnaGxpZ2h0X2ZpbGVzIG5lIHt9fSB7CisJCXNldCBoaWdobGlnaHRfZmlsZXMge30KKwkJaGZpbGVzX2NoYW5nZQorCSAgICB9CisJICAgIGZpbmRjb21fY2hhbmdlCisJfSBlbHNlIHsKKwkgICAgaWYgeyRmaW5kcGF0dGVybiBuZSB7fX0geworCQlzZXQgZmluZHBhdHRlcm4ge30KKwkJZmluZGNvbV9jaGFuZ2UKKwkgICAgfQorCSAgICBzZXQgaGlnaGxpZ2h0X2ZpbGVzICRmaW5kc3RyaW5nCisJICAgIGhmaWxlc19jaGFuZ2UKKwl9CisJZHJhd3Zpc2libGUKKyAgICB9CisgICAgIyBlbmFibGUvZGlzYWJsZSBmaW5kdHlwZS9maW5kbG9jIG1lbnVzIHRvbworfQorCitwcm9jIGZpbmRfY2hhbmdlIHtuYW1lIGl4IG9wfSB7CisgICAgZ2xvYmFsIGdkdHR5cGUgZmluZHN0cmluZyBoaWdobGlnaHRfZmlsZXMKKworICAgIHN0b3BmaW5kaW5nCisgICAgaWYgeyRnZHR0eXBlIGVxIFttYyAiY29udGFpbmluZzoiXX0geworCWZpbmRjb21fY2hhbmdlCisgICAgfSBlbHNlIHsKKwlpZiB7JGhpZ2hsaWdodF9maWxlcyBuZSAkZmluZHN0cmluZ30geworCSAgICBzZXQgaGlnaGxpZ2h0X2ZpbGVzICRmaW5kc3RyaW5nCisJICAgIGhmaWxlc19jaGFuZ2UKKwl9CisgICAgfQorICAgIGRyYXd2aXNpYmxlCit9CisKK3Byb2MgZmluZGNvbV9jaGFuZ2UgYXJncyB7CisgICAgZ2xvYmFsIG5oaWdobGlnaHRzIGJvbGRuYW1laWRzCisgICAgZ2xvYmFsIGZpbmRwYXR0ZXJuIGZpbmR0eXBlIGZpbmRzdHJpbmcgZ2R0dHlwZQorCisgICAgc3RvcGZpbmRpbmcKKyAgICAjIGRlbGV0ZSBwcmV2aW91cyBoaWdobGlnaHRzLCBpZiBhbnkKKyAgICBmb3JlYWNoIGlkICRib2xkbmFtZWlkcyB7CisJYm9sZGVuX25hbWUgJGlkIG1haW5mb250CisgICAgfQorICAgIHNldCBib2xkbmFtZWlkcyB7fQorICAgIHVuc2V0IC1ub2NvbXBsYWluIG5oaWdobGlnaHRzCisgICAgdW5ib2xkZW4KKyAgICB1bm1hcmttYXRjaGVzCisgICAgaWYgeyRnZHR0eXBlIG5lIFttYyAiY29udGFpbmluZzoiXSB8fCAkZmluZHN0cmluZyBlcSB7fX0geworCXNldCBmaW5kcGF0dGVybiB7fQorICAgIH0gZWxzZWlmIHskZmluZHR5cGUgZXEgW21jICJSZWdleHAiXX0geworCXNldCBmaW5kcGF0dGVybiAkZmluZHN0cmluZworICAgIH0gZWxzZSB7CisJc2V0IGUgW3N0cmluZyBtYXAgeyIqIiAiXFwqIiAiPyIgIlxcPyIgIlxbIiAiXFxcWyIgIlxcIiAiXFxcXCJ9IFwKKwkJICAgJGZpbmRzdHJpbmddCisJc2V0IGZpbmRwYXR0ZXJuICIqJGUqIgorICAgIH0KK30KKworcHJvYyBtYWtlcGF0dGVybnMge2x9IHsKKyAgICBzZXQgcmV0IHt9CisgICAgZm9yZWFjaCBlICRsIHsKKwlzZXQgZWUgW3N0cmluZyBtYXAgeyIqIiAiXFwqIiAiPyIgIlxcPyIgIlxbIiAiXFxcWyIgIlxcIiAiXFxcXCJ9ICRlXQorCWlmIHtbc3RyaW5nIGluZGV4ICRlZSBlbmRdIGVxICIvIn0geworCSAgICBsYXBwZW5kIHJldCAiJGVlKiIKKwl9IGVsc2UgeworCSAgICBsYXBwZW5kIHJldCAkZWUKKwkgICAgbGFwcGVuZCByZXQgIiRlZS8qIgorCX0KKyAgICB9CisgICAgcmV0dXJuICRyZXQKK30KKworcHJvYyBkb19maWxlX2hsIHtzZXJpYWx9IHsKKyAgICBnbG9iYWwgaGlnaGxpZ2h0X2ZpbGVzIGZpbGVoaWdobGlnaHQgaGlnaGxpZ2h0X3BhdGhzIGdkdHR5cGUgZmhsX2xpc3QKKyAgICBnbG9iYWwgY2R1cCBmaW5kdHlwZQorCisgICAgaWYgeyRnZHR0eXBlIGVxIFttYyAidG91Y2hpbmcgcGF0aHM6Il19IHsKKwkjIElmICJleGFjdCIgbWF0Y2ggdGhlbiBjb252ZXJ0IGJhY2tzbGFzaGVzIHRvIGZvcndhcmQgc2xhc2hlcy4KKwkjIE1vc3QgdXNlZnVsIHRvIHN1cHBvcnQgV2luZG93cy1mbGF2b3VyZWQgZmlsZSBwYXRocy4KKwlpZiB7JGZpbmR0eXBlIGVxIFttYyAiRXhhY3QiXX0geworCSAgICBzZXQgaGlnaGxpZ2h0X2ZpbGVzIFtzdHJpbmcgbWFwIHsiXFwiICIvIn0gJGhpZ2hsaWdodF9maWxlc10KKwl9CisJaWYge1tjYXRjaCB7c2V0IHBhdGhzIFtzaGVsbHNwbGl0ICRoaWdobGlnaHRfZmlsZXNdfV19IHJldHVybgorCXNldCBoaWdobGlnaHRfcGF0aHMgW21ha2VwYXR0ZXJucyAkcGF0aHNdCisJaGlnaGxpZ2h0X2ZpbGVsaXN0CisJc2V0IHJlbGF0aXZlX3BhdGhzIHt9CisJZm9yZWFjaCBwYXRoICRwYXRocyB7CisJICAgIGxhcHBlbmQgcmVsYXRpdmVfcGF0aHMgW2ZpbGUgam9pbiAkY2R1cCAkcGF0aF0KKwl9CisJc2V0IGdkdGFyZ3MgW2NvbmNhdCAtLSAkcmVsYXRpdmVfcGF0aHNdCisgICAgfSBlbHNlaWYgeyRnZHR0eXBlIGVxIFttYyAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiXX0geworCXNldCBnZHRhcmdzIFtsaXN0ICItUyRoaWdobGlnaHRfZmlsZXMiXQorICAgIH0gZWxzZWlmIHskZ2R0dHlwZSBlcSBbbWMgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiJdfSB7CisJc2V0IGdkdGFyZ3MgW2xpc3QgIi1HJGhpZ2hsaWdodF9maWxlcyJdCisgICAgfSBlbHNlIHsKKwkjIG11c3QgYmUgImNvbnRhaW5pbmc6IiwgaS5lLiB3ZSdyZSBzZWFyY2hpbmcgY29tbWl0IGluZm8KKwlyZXR1cm4KKyAgICB9CisgICAgc2V0IGNtZCBbY29uY2F0IHwgZ2l0IGRpZmYtdHJlZSAtciAtcyAtLXN0ZGluICRnZHRhcmdzXQorICAgIHNldCBmaWxlaGlnaGxpZ2h0IFtvcGVuICRjbWQgcitdCisgICAgZmNvbmZpZ3VyZSAkZmlsZWhpZ2hsaWdodCAtYmxvY2tpbmcgMAorICAgIGZpbGVydW4gJGZpbGVoaWdobGlnaHQgcmVhZGZoaWdobGlnaHQKKyAgICBzZXQgZmhsX2xpc3Qge30KKyAgICBkcmF3dmlzaWJsZQorICAgIGZsdXNoaGlnaGxpZ2h0cworfQorCitwcm9jIGZsdXNoaGlnaGxpZ2h0cyB7fSB7CisgICAgZ2xvYmFsIGZpbGVoaWdobGlnaHQgZmhsX2xpc3QKKworICAgIGlmIHtbaW5mbyBleGlzdHMgZmlsZWhpZ2hsaWdodF19IHsKKwlsYXBwZW5kIGZobF9saXN0IHt9CisJcHV0cyAkZmlsZWhpZ2hsaWdodCAiIgorCWZsdXNoICRmaWxlaGlnaGxpZ2h0CisgICAgfQorfQorCitwcm9jIGFza2ZpbGVoaWdobGlnaHQge3JvdyBpZH0geworICAgIGdsb2JhbCBmaWxlaGlnaGxpZ2h0IGZoaWdobGlnaHRzIGZobF9saXN0CisKKyAgICBsYXBwZW5kIGZobF9saXN0ICRpZAorICAgIHNldCBmaGlnaGxpZ2h0cygkaWQpIC0xCisgICAgcHV0cyAkZmlsZWhpZ2hsaWdodCAkaWQKK30KKworcHJvYyByZWFkZmhpZ2hsaWdodCB7fSB7CisgICAgZ2xvYmFsIGZpbGVoaWdobGlnaHQgZmhpZ2hsaWdodHMgY3VydmlldyBpZGRyYXduCisgICAgZ2xvYmFsIGZobF9saXN0IGZpbmRfZGlybgorCisgICAgaWYgeyFbaW5mbyBleGlzdHMgZmlsZWhpZ2hsaWdodF19IHsKKwlyZXR1cm4gMAorICAgIH0KKyAgICBzZXQgbnIgMAorICAgIHdoaWxlIHtbaW5jciBucl0gPD0gMTAwICYmIFtnZXRzICRmaWxlaGlnaGxpZ2h0IGxpbmVdID49IDB9IHsKKwlzZXQgbGluZSBbc3RyaW5nIHRyaW0gJGxpbmVdCisJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRmaGxfbGlzdCAkbGluZV0KKwlpZiB7JGkgPCAwfSBjb250aW51ZQorCWZvciB7c2V0IGogMH0geyRqIDwgJGl9IHtpbmNyIGp9IHsKKwkgICAgc2V0IGlkIFtsaW5kZXggJGZobF9saXN0ICRqXQorCSAgICBzZXQgZmhpZ2hsaWdodHMoJGlkKSAwCisJfQorCXNldCBmaGxfbGlzdCBbbHJhbmdlICRmaGxfbGlzdCBbZXhwciB7JGkrMX1dIGVuZF0KKwlpZiB7JGxpbmUgZXEge319IGNvbnRpbnVlCisJaWYgeyFbY29tbWl0aW52aWV3ICRsaW5lICRjdXJ2aWV3XX0gY29udGludWUKKwlpZiB7W2luZm8gZXhpc3RzIGlkZHJhd24oJGxpbmUpXSAmJiAhW2lzaGlnaGxpZ2h0ZWQgJGxpbmVdfSB7CisJICAgIGJvbGRlbiAkbGluZSBtYWluZm9udGJvbGQKKwl9CisJc2V0IGZoaWdobGlnaHRzKCRsaW5lKSAxCisgICAgfQorICAgIGlmIHtbZW9mICRmaWxlaGlnaGxpZ2h0XX0geworCSMgc3RyYW5nZS4uLgorCXB1dHMgIm9vcHMsIGdpdCBkaWZmLXRyZWUgZGllZCIKKwljYXRjaCB7Y2xvc2UgJGZpbGVoaWdobGlnaHR9CisJdW5zZXQgZmlsZWhpZ2hsaWdodAorCXJldHVybiAwCisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgZmluZF9kaXJuXX0geworCXJ1biBmaW5kbW9yZQorICAgIH0KKyAgICByZXR1cm4gMQorfQorCitwcm9jIGRvZXNtYXRjaCB7Zn0geworICAgIGdsb2JhbCBmaW5kdHlwZSBmaW5kcGF0dGVybgorCisgICAgaWYgeyRmaW5kdHlwZSBlcSBbbWMgIlJlZ2V4cCJdfSB7CisJcmV0dXJuIFtyZWdleHAgJGZpbmRwYXR0ZXJuICRmXQorICAgIH0gZWxzZWlmIHskZmluZHR5cGUgZXEgW21jICJJZ25DYXNlIl19IHsKKwlyZXR1cm4gW3N0cmluZyBtYXRjaCAtbm9jYXNlICRmaW5kcGF0dGVybiAkZl0KKyAgICB9IGVsc2UgeworCXJldHVybiBbc3RyaW5nIG1hdGNoICRmaW5kcGF0dGVybiAkZl0KKyAgICB9Cit9CisKK3Byb2MgYXNrZmluZGhpZ2hsaWdodCB7cm93IGlkfSB7CisgICAgZ2xvYmFsIG5oaWdobGlnaHRzIGNvbW1pdGluZm8gaWRkcmF3bgorICAgIGdsb2JhbCBmaW5kbG9jCisgICAgZ2xvYmFsIG1hcmtpbmdtYXRjaGVzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRpZCldfSB7CisJZ2V0Y29tbWl0ICRpZAorICAgIH0KKyAgICBzZXQgaW5mbyAkY29tbWl0aW5mbygkaWQpCisgICAgc2V0IGlzYm9sZCAwCisgICAgc2V0IGZsZHR5cGVzIFtsaXN0IFttYyBIZWFkbGluZV0gW21jIEF1dGhvcl0gIiIgW21jIENvbW1pdHRlcl0gIiIgW21jIENvbW1lbnRzXV0KKyAgICBmb3JlYWNoIGYgJGluZm8gdHkgJGZsZHR5cGVzIHsKKwlpZiB7JHR5IGVxICIifSBjb250aW51ZQorCWlmIHsoJGZpbmRsb2MgZXEgW21jICJBbGwgZmllbGRzIl0gfHwgJGZpbmRsb2MgZXEgJHR5KSAmJgorCSAgICBbZG9lc21hdGNoICRmXX0geworCSAgICBpZiB7JHR5IGVxIFttYyAiQXV0aG9yIl19IHsKKwkJc2V0IGlzYm9sZCAyCisJCWJyZWFrCisJICAgIH0KKwkgICAgc2V0IGlzYm9sZCAxCisJfQorICAgIH0KKyAgICBpZiB7JGlzYm9sZCAmJiBbaW5mbyBleGlzdHMgaWRkcmF3bigkaWQpXX0geworCWlmIHshW2lzaGlnaGxpZ2h0ZWQgJGlkXX0geworCSAgICBib2xkZW4gJGlkIG1haW5mb250Ym9sZAorCSAgICBpZiB7JGlzYm9sZCA+IDF9IHsKKwkJYm9sZGVuX25hbWUgJGlkIG1haW5mb250Ym9sZAorCSAgICB9CisJfQorCWlmIHskbWFya2luZ21hdGNoZXN9IHsKKwkgICAgbWFya3Jvd21hdGNoZXMgJHJvdyAkaWQKKwl9CisgICAgfQorICAgIHNldCBuaGlnaGxpZ2h0cygkaWQpICRpc2JvbGQKK30KKworcHJvYyBtYXJrcm93bWF0Y2hlcyB7cm93IGlkfSB7CisgICAgZ2xvYmFsIGNhbnYgY2FudjIgbGluZWh0YWcgbGluZW50YWcgY29tbWl0aW5mbyBmaW5kbG9jCisKKyAgICBzZXQgaGVhZGxpbmUgW2xpbmRleCAkY29tbWl0aW5mbygkaWQpIDBdCisgICAgc2V0IGF1dGhvciBbbGluZGV4ICRjb21taXRpbmZvKCRpZCkgMV0KKyAgICAkY2FudiBkZWxldGUgbWF0Y2gkcm93CisgICAgJGNhbnYyIGRlbGV0ZSBtYXRjaCRyb3cKKyAgICBpZiB7JGZpbmRsb2MgZXEgW21jICJBbGwgZmllbGRzIl0gfHwgJGZpbmRsb2MgZXEgW21jICJIZWFkbGluZSJdfSB7CisJc2V0IG0gW2ZpbmRtYXRjaGVzICRoZWFkbGluZV0KKwlpZiB7JG0gbmUge319IHsKKwkgICAgbWFya21hdGNoZXMgJGNhbnYgJHJvdyAkaGVhZGxpbmUgJGxpbmVodGFnKCRpZCkgJG0gXAorCQlbJGNhbnYgaXRlbWNnZXQgJGxpbmVodGFnKCRpZCkgLWZvbnRdICRyb3cKKwl9CisgICAgfQorICAgIGlmIHskZmluZGxvYyBlcSBbbWMgIkFsbCBmaWVsZHMiXSB8fCAkZmluZGxvYyBlcSBbbWMgIkF1dGhvciJdfSB7CisJc2V0IG0gW2ZpbmRtYXRjaGVzICRhdXRob3JdCisJaWYgeyRtIG5lIHt9fSB7CisJICAgIG1hcmttYXRjaGVzICRjYW52MiAkcm93ICRhdXRob3IgJGxpbmVudGFnKCRpZCkgJG0gXAorCQlbJGNhbnYyIGl0ZW1jZ2V0ICRsaW5lbnRhZygkaWQpIC1mb250XSAkcm93CisJfQorICAgIH0KK30KKworcHJvYyB2cmVsX2NoYW5nZSB7bmFtZSBpeCBvcH0geworICAgIGdsb2JhbCBoaWdobGlnaHRfcmVsYXRlZAorCisgICAgcmhpZ2hsaWdodF9ub25lCisgICAgaWYgeyRoaWdobGlnaHRfcmVsYXRlZCBuZSBbbWMgIk5vbmUiXX0geworCXJ1biBkcmF3dmlzaWJsZQorICAgIH0KK30KKworIyBwcmVwYXJlIGZvciB0ZXN0aW5nIHdoZXRoZXIgY29tbWl0cyBhcmUgZGVzY2VuZGVudHMgb3IgYW5jZXN0b3JzIG9mIGEKK3Byb2MgcmhpZ2hsaWdodF9zZWwge2F9IHsKKyAgICBnbG9iYWwgZGVzY2VuZGVudCBkZXNjX3RvZG8gYW5jZXN0b3IgYW5jX3RvZG8KKyAgICBnbG9iYWwgaGlnaGxpZ2h0X3JlbGF0ZWQKKworICAgIHVuc2V0IC1ub2NvbXBsYWluIGRlc2NlbmRlbnQKKyAgICBzZXQgZGVzY190b2RvIFtsaXN0ICRhXQorICAgIHVuc2V0IC1ub2NvbXBsYWluIGFuY2VzdG9yCisgICAgc2V0IGFuY190b2RvIFtsaXN0ICRhXQorICAgIGlmIHskaGlnaGxpZ2h0X3JlbGF0ZWQgbmUgW21jICJOb25lIl19IHsKKwlyaGlnaGxpZ2h0X25vbmUKKwlydW4gZHJhd3Zpc2libGUKKyAgICB9Cit9CisKK3Byb2MgcmhpZ2hsaWdodF9ub25lIHt9IHsKKyAgICBnbG9iYWwgcmhpZ2hsaWdodHMKKworICAgIHVuc2V0IC1ub2NvbXBsYWluIHJoaWdobGlnaHRzCisgICAgdW5ib2xkZW4KK30KKworcHJvYyBpc19kZXNjZW5kZW50IHthfSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgY2hpbGRyZW4gZGVzY2VuZGVudCBkZXNjX3RvZG8KKworICAgIHNldCB2ICRjdXJ2aWV3CisgICAgc2V0IGxhIFtyb3dvZmNvbW1pdCAkYV0KKyAgICBzZXQgdG9kbyAkZGVzY190b2RvCisgICAgc2V0IGxlZnRvdmVyIHt9CisgICAgc2V0IGRvbmUgMAorICAgIGZvciB7c2V0IGkgMH0geyRpIDwgW2xsZW5ndGggJHRvZG9dfSB7aW5jciBpfSB7CisJc2V0IGRvIFtsaW5kZXggJHRvZG8gJGldCisJaWYge1tyb3dvZmNvbW1pdCAkZG9dIDwgJGxhfSB7CisJICAgIGxhcHBlbmQgbGVmdG92ZXIgJGRvCisJICAgIGNvbnRpbnVlCisJfQorCWZvcmVhY2ggbmsgJGNoaWxkcmVuKCR2LCRkbykgeworCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBkZXNjZW5kZW50KCRuayldfSB7CisJCXNldCBkZXNjZW5kZW50KCRuaykgMQorCQlsYXBwZW5kIHRvZG8gJG5rCisJCWlmIHskbmsgZXEgJGF9IHsKKwkJICAgIHNldCBkb25lIDEKKwkJfQorCSAgICB9CisJfQorCWlmIHskZG9uZX0geworCSAgICBzZXQgZGVzY190b2RvIFtjb25jYXQgJGxlZnRvdmVyIFtscmFuZ2UgJHRvZG8gW2V4cHIgeyRpKzF9XSBlbmRdXQorCSAgICByZXR1cm4KKwl9CisgICAgfQorICAgIHNldCBkZXNjZW5kZW50KCRhKSAwCisgICAgc2V0IGRlc2NfdG9kbyAkbGVmdG92ZXIKK30KKworcHJvYyBpc19hbmNlc3RvciB7YX0geworICAgIGdsb2JhbCBjdXJ2aWV3IHBhcmVudHMgYW5jZXN0b3IgYW5jX3RvZG8KKworICAgIHNldCB2ICRjdXJ2aWV3CisgICAgc2V0IGxhIFtyb3dvZmNvbW1pdCAkYV0KKyAgICBzZXQgdG9kbyAkYW5jX3RvZG8KKyAgICBzZXQgbGVmdG92ZXIge30KKyAgICBzZXQgZG9uZSAwCisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkdG9kb119IHtpbmNyIGl9IHsKKwlzZXQgZG8gW2xpbmRleCAkdG9kbyAkaV0KKwlpZiB7IVtjb21taXRpbnZpZXcgJGRvICR2XSB8fCBbcm93b2Zjb21taXQgJGRvXSA+ICRsYX0geworCSAgICBsYXBwZW5kIGxlZnRvdmVyICRkbworCSAgICBjb250aW51ZQorCX0KKwlmb3JlYWNoIG5wICRwYXJlbnRzKCR2LCRkbykgeworCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBhbmNlc3RvcigkbnApXX0geworCQlzZXQgYW5jZXN0b3IoJG5wKSAxCisJCWxhcHBlbmQgdG9kbyAkbnAKKwkJaWYgeyRucCBlcSAkYX0geworCQkgICAgc2V0IGRvbmUgMQorCQl9CisJICAgIH0KKwl9CisJaWYgeyRkb25lfSB7CisJICAgIHNldCBhbmNfdG9kbyBbY29uY2F0ICRsZWZ0b3ZlciBbbHJhbmdlICR0b2RvIFtleHByIHskaSsxfV0gZW5kXV0KKwkgICAgcmV0dXJuCisJfQorICAgIH0KKyAgICBzZXQgYW5jZXN0b3IoJGEpIDAKKyAgICBzZXQgYW5jX3RvZG8gJGxlZnRvdmVyCit9CisKK3Byb2MgYXNrcmVsaGlnaGxpZ2h0IHtyb3cgaWR9IHsKKyAgICBnbG9iYWwgZGVzY2VuZGVudCBoaWdobGlnaHRfcmVsYXRlZCBpZGRyYXduIHJoaWdobGlnaHRzCisgICAgZ2xvYmFsIHNlbGVjdGVkbGluZSBhbmNlc3RvcgorCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge319IHJldHVybgorICAgIHNldCBpc2JvbGQgMAorICAgIGlmIHskaGlnaGxpZ2h0X3JlbGF0ZWQgZXEgW21jICJEZXNjZW5kYW50Il0gfHwKKwkkaGlnaGxpZ2h0X3JlbGF0ZWQgZXEgW21jICJOb3QgZGVzY2VuZGFudCJdfSB7CisJaWYgeyFbaW5mbyBleGlzdHMgZGVzY2VuZGVudCgkaWQpXX0geworCSAgICBpc19kZXNjZW5kZW50ICRpZAorCX0KKwlpZiB7JGRlc2NlbmRlbnQoJGlkKSA9PSAoJGhpZ2hsaWdodF9yZWxhdGVkIGVxIFttYyAiRGVzY2VuZGFudCJdKX0geworCSAgICBzZXQgaXNib2xkIDEKKwl9CisgICAgfSBlbHNlaWYgeyRoaWdobGlnaHRfcmVsYXRlZCBlcSBbbWMgIkFuY2VzdG9yIl0gfHwKKwkgICAgICAkaGlnaGxpZ2h0X3JlbGF0ZWQgZXEgW21jICJOb3QgYW5jZXN0b3IiXX0geworCWlmIHshW2luZm8gZXhpc3RzIGFuY2VzdG9yKCRpZCldfSB7CisJICAgIGlzX2FuY2VzdG9yICRpZAorCX0KKwlpZiB7JGFuY2VzdG9yKCRpZCkgPT0gKCRoaWdobGlnaHRfcmVsYXRlZCBlcSBbbWMgIkFuY2VzdG9yIl0pfSB7CisJICAgIHNldCBpc2JvbGQgMQorCX0KKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBpZGRyYXduKCRpZCldfSB7CisJaWYgeyRpc2JvbGQgJiYgIVtpc2hpZ2hsaWdodGVkICRpZF19IHsKKwkgICAgYm9sZGVuICRpZCBtYWluZm9udGJvbGQKKwl9CisgICAgfQorICAgIHNldCByaGlnaGxpZ2h0cygkaWQpICRpc2JvbGQKK30KKworIyBHcmFwaCBsYXlvdXQgZnVuY3Rpb25zCisKK3Byb2Mgc2hvcnRpZHMge2lkc30geworICAgIHNldCByZXMge30KKyAgICBmb3JlYWNoIGlkICRpZHMgeworCWlmIHtbbGxlbmd0aCAkaWRdID4gMX0geworCSAgICBsYXBwZW5kIHJlcyBbc2hvcnRpZHMgJGlkXQorCX0gZWxzZWlmIHtbcmVnZXhwIHteWzAtOWEtZl17NDB9JH0gJGlkXX0geworCSAgICBsYXBwZW5kIHJlcyBbc3RyaW5nIHJhbmdlICRpZCAwIDddCisJfSBlbHNlIHsKKwkgICAgbGFwcGVuZCByZXMgJGlkCisJfQorICAgIH0KKyAgICByZXR1cm4gJHJlcworfQorCitwcm9jIG50aW1lcyB7biBvfSB7CisgICAgc2V0IHJldCB7fQorICAgIHNldCBvIFtsaXN0ICRvXQorICAgIGZvciB7c2V0IG1hc2sgMX0geyRtYXNrIDw9ICRufSB7aW5jciBtYXNrICRtYXNrfSB7CisJaWYgeygkbiAmICRtYXNrKSAhPSAwfSB7CisJICAgIHNldCByZXQgW2NvbmNhdCAkcmV0ICRvXQorCX0KKwlzZXQgbyBbY29uY2F0ICRvICRvXQorICAgIH0KKyAgICByZXR1cm4gJHJldAorfQorCitwcm9jIG9yZGVydG9rZW4ge2lkfSB7CisgICAgZ2xvYmFsIG9yZGVydG9rIGN1cnZpZXcgdmFyY2lkIHZhcmNzdGFydCB2YXJjdG9rIGN1cnZpZXcgcGFyZW50cyBjaGlsZHJlbgorICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMgorCisgICAgaWYge1tpbmZvIGV4aXN0cyBvcmRlcnRvaygkaWQpXX0geworCXJldHVybiAkb3JkZXJ0b2soJGlkKQorICAgIH0KKyAgICBzZXQgb3JpZ2lkICRpZAorICAgIHNldCB0b2RvIHt9CisgICAgd2hpbGUgezF9IHsKKwlpZiB7W2luZm8gZXhpc3RzIHZhcmNpZCgkY3VydmlldywkaWQpXX0geworCSAgICBzZXQgYSAkdmFyY2lkKCRjdXJ2aWV3LCRpZCkKKwkgICAgc2V0IHAgW2xpbmRleCAkdmFyY3N0YXJ0KCRjdXJ2aWV3KSAkYV0KKwl9IGVsc2UgeworCSAgICBzZXQgcCBbbGluZGV4ICRjaGlsZHJlbigkY3VydmlldywkaWQpIDBdCisJfQorCWlmIHtbaW5mbyBleGlzdHMgb3JkZXJ0b2soJHApXX0geworCSAgICBzZXQgdG9rICRvcmRlcnRvaygkcCkKKwkgICAgYnJlYWsKKwl9CisJc2V0IGlkIFtmaXJzdF9yZWFsX2NoaWxkICRjdXJ2aWV3LCRwXQorCWlmIHskaWQgZXEge319IHsKKwkgICAgIyBpdCdzIGEgcm9vdAorCSAgICBzZXQgdG9rIFtsaW5kZXggJHZhcmN0b2soJGN1cnZpZXcpICR2YXJjaWQoJGN1cnZpZXcsJHApXQorCSAgICBicmVhaworCX0KKwlpZiB7W2xsZW5ndGggJHBhcmVudHMoJGN1cnZpZXcsJGlkKV0gPT0gMX0geworCSAgICBsYXBwZW5kIHRvZG8gW2xpc3QgJHAge31dCisJfSBlbHNlIHsKKwkgICAgc2V0IGogW2xzZWFyY2ggLWV4YWN0ICRwYXJlbnRzKCRjdXJ2aWV3LCRpZCkgJHBdCisJICAgIGlmIHskaiA8IDB9IHsKKwkJcHV0cyAib29wcyBkaWRuJ3QgZmluZCBbc2hvcnRpZHMgJHBdIGluIHBhcmVudHMgb2YgW3Nob3J0aWRzICRpZF0iCisJICAgIH0KKwkgICAgbGFwcGVuZCB0b2RvIFtsaXN0ICRwIFtzdHJyZXAgJGpdXQorCX0KKyAgICB9CisgICAgZm9yIHtzZXQgaSBbbGxlbmd0aCAkdG9kb119IHtbaW5jciBpIC0xXSA+PSAwfSB7fSB7CisJc2V0IHAgW2xpbmRleCAkdG9kbyAkaSAwXQorCWFwcGVuZCB0b2sgW2xpbmRleCAkdG9kbyAkaSAxXQorCXNldCBvcmRlcnRvaygkcCkgJHRvaworICAgIH0KKyAgICBzZXQgb3JkZXJ0b2soJG9yaWdpZCkgJHRvaworICAgIHJldHVybiAkdG9rCit9CisKKyMgV29yayBvdXQgd2hlcmUgaWQgc2hvdWxkIGdvIGluIGlkbGlzdCBzbyB0aGF0IG9yZGVyLXRva2VuCisjIHZhbHVlcyBpbmNyZWFzZSBmcm9tIGxlZnQgdG8gcmlnaHQKK3Byb2MgaWRjb2wge2lkbGlzdCBpZCB7aSAwfX0geworICAgIHNldCB0IFtvcmRlcnRva2VuICRpZF0KKyAgICBpZiB7JGkgPCAwfSB7CisJc2V0IGkgMAorICAgIH0KKyAgICBpZiB7JGkgPj0gW2xsZW5ndGggJGlkbGlzdF0gfHwgJHQgPCBbb3JkZXJ0b2tlbiBbbGluZGV4ICRpZGxpc3QgJGldXX0geworCWlmIHskaSA+IFtsbGVuZ3RoICRpZGxpc3RdfSB7CisJICAgIHNldCBpIFtsbGVuZ3RoICRpZGxpc3RdCisJfQorCXdoaWxlIHtbaW5jciBpIC0xXSA+PSAwICYmICR0IDwgW29yZGVydG9rZW4gW2xpbmRleCAkaWRsaXN0ICRpXV19IHt9CisJaW5jciBpCisgICAgfSBlbHNlIHsKKwlpZiB7JHQgPiBbb3JkZXJ0b2tlbiBbbGluZGV4ICRpZGxpc3QgJGldXX0geworCSAgICB3aGlsZSB7W2luY3IgaV0gPCBbbGxlbmd0aCAkaWRsaXN0XSAmJgorCQkgICAkdCA+PSBbb3JkZXJ0b2tlbiBbbGluZGV4ICRpZGxpc3QgJGldXX0ge30KKwl9CisgICAgfQorICAgIHJldHVybiAkaQorfQorCitwcm9jIGluaXRsYXlvdXQge30geworICAgIGdsb2JhbCByb3dpZGxpc3Qgcm93aXNvcHQgcm93ZmluYWwgZGlzcGxheW9yZGVyIHBhcmVudGxpc3QKKyAgICBnbG9iYWwgbnVtY29tbWl0cyBjYW52eG1heCBjYW52CisgICAgZ2xvYmFsIG5leHRjb2xvcgorICAgIGdsb2JhbCBjb2xvcm1hcCByb3d0ZXh0eAorCisgICAgc2V0IG51bWNvbW1pdHMgMAorICAgIHNldCBkaXNwbGF5b3JkZXIge30KKyAgICBzZXQgcGFyZW50bGlzdCB7fQorICAgIHNldCBuZXh0Y29sb3IgMAorICAgIHNldCByb3dpZGxpc3Qge30KKyAgICBzZXQgcm93aXNvcHQge30KKyAgICBzZXQgcm93ZmluYWwge30KKyAgICBzZXQgY2FudnhtYXggWyRjYW52IGNnZXQgLXdpZHRoXQorICAgIHVuc2V0IC1ub2NvbXBsYWluIGNvbG9ybWFwCisgICAgdW5zZXQgLW5vY29tcGxhaW4gcm93dGV4dHgKKyAgICBzZXRjYW52c2Nyb2xsCit9CisKK3Byb2Mgc2V0Y2FudnNjcm9sbCB7fSB7CisgICAgZ2xvYmFsIGNhbnYgY2FudjIgY2FudjMgbnVtY29tbWl0cyBsaW5lc3BjIGNhbnZ4bWF4IGNhbnZ5MAorICAgIGdsb2JhbCBsYXN0c2Nyb2xsc2V0IGxhc3RzY3JvbGxyb3dzCisKKyAgICBzZXQgeW1heCBbZXhwciB7JGNhbnZ5MCArICgkbnVtY29tbWl0cyAtIDAuNSkgKiAkbGluZXNwYyArIDJ9XQorICAgICRjYW52IGNvbmYgLXNjcm9sbHJlZ2lvbiBbbGlzdCAwIDAgJGNhbnZ4bWF4ICR5bWF4XQorICAgICRjYW52MiBjb25mIC1zY3JvbGxyZWdpb24gW2xpc3QgMCAwIDAgJHltYXhdCisgICAgJGNhbnYzIGNvbmYgLXNjcm9sbHJlZ2lvbiBbbGlzdCAwIDAgMCAkeW1heF0KKyAgICBzZXQgbGFzdHNjcm9sbHNldCBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgc2V0IGxhc3RzY3JvbGxyb3dzICRudW1jb21taXRzCit9CisKK3Byb2MgdmlzaWJsZXJvd3Mge30geworICAgIGdsb2JhbCBjYW52IG51bWNvbW1pdHMgbGluZXNwYworCisgICAgc2V0IHltYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAzXQorICAgIGlmIHskeW1heCBlcSB7fSB8fCAkeW1heCA9PSAwfSByZXR1cm4KKyAgICBzZXQgZiBbJGNhbnYgeXZpZXddCisgICAgc2V0IHkwIFtleHByIHtpbnQoW2xpbmRleCAkZiAwXSAqICR5bWF4KX1dCisgICAgc2V0IHIwIFtleHByIHtpbnQoKCR5MCAtIDMpIC8gJGxpbmVzcGMpIC0gMX1dCisgICAgaWYgeyRyMCA8IDB9IHsKKwlzZXQgcjAgMAorICAgIH0KKyAgICBzZXQgeTEgW2V4cHIge2ludChbbGluZGV4ICRmIDFdICogJHltYXgpfV0KKyAgICBzZXQgcjEgW2V4cHIge2ludCgoJHkxIC0gMykgLyAkbGluZXNwYykgKyAxfV0KKyAgICBpZiB7JHIxID49ICRudW1jb21taXRzfSB7CisJc2V0IHIxIFtleHByIHskbnVtY29tbWl0cyAtIDF9XQorICAgIH0KKyAgICByZXR1cm4gW2xpc3QgJHIwICRyMV0KK30KKworcHJvYyBsYXlvdXRtb3JlIHt9IHsKKyAgICBnbG9iYWwgY29tbWl0aWR4IHZpZXdjb21wbGV0ZSBjdXJ2aWV3CisgICAgZ2xvYmFsIG51bWNvbW1pdHMgcGVuZGluZ19zZWxlY3QgY3VydmlldworICAgIGdsb2JhbCBsYXN0c2Nyb2xsc2V0IGxhc3RzY3JvbGxyb3dzCisKKyAgICBpZiB7JGxhc3RzY3JvbGxyb3dzIDwgMTAwIHx8ICR2aWV3Y29tcGxldGUoJGN1cnZpZXcpIHx8CisJW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXSAtICRsYXN0c2Nyb2xsc2V0ID4gNTAwfSB7CisJc2V0Y2FudnNjcm9sbAorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIHBlbmRpbmdfc2VsZWN0XSAmJgorCVtjb21taXRpbnZpZXcgJHBlbmRpbmdfc2VsZWN0ICRjdXJ2aWV3XX0geworCXVwZGF0ZQorCXNlbGVjdGxpbmUgW3Jvd29mY29tbWl0ICRwZW5kaW5nX3NlbGVjdF0gMQorICAgIH0KKyAgICBkcmF3dmlzaWJsZQorfQorCisjIFdpdGggcGF0aCBsaW1pdGluZywgd2UgbWlnaHRuJ3QgZ2V0IHRoZSBhY3R1YWwgSEVBRCBjb21taXQsCisjIHNvIGFzayBnaXQgcmV2LWxpc3Qgd2hhdCBpcyB0aGUgZmlyc3QgYW5jZXN0b3Igb2YgSEVBRCB0aGF0CisjIHRvdWNoZXMgYSBmaWxlIGluIHRoZSBwYXRoIGxpbWl0LgorcHJvYyBnZXRfdmlld21haW5oZWFkIHt2aWV3fSB7CisgICAgZ2xvYmFsIHZpZXdtYWluaGVhZGlkIHZmaWxlbGltaXQgdmlld2luc3RhbmNlcyBtYWluaGVhZGlkCisKKyAgICBjYXRjaCB7CisJc2V0IHJmZCBbb3BlbiBbY29uY2F0IHwgZ2l0IHJldi1saXN0IC0xICRtYWluaGVhZGlkIFwKKwkJCSAgIC0tICR2ZmlsZWxpbWl0KCR2aWV3KV0gcl0KKwlzZXQgaiBbcmVnX2luc3RhbmNlICRyZmRdCisJbGFwcGVuZCB2aWV3aW5zdGFuY2VzKCR2aWV3KSAkagorCWZjb25maWd1cmUgJHJmZCAtYmxvY2tpbmcgMAorCWZpbGVydW4gJHJmZCBbbGlzdCBnZXR2aWV3aGVhZCAkcmZkICRqICR2aWV3XQorCXNldCB2aWV3bWFpbmhlYWRpZCgkY3Vydmlldykge30KKyAgICB9Cit9CisKKyMgZ2l0IHJldi1saXN0IHNob3VsZCBnaXZlIHVzIGp1c3QgMSBsaW5lIHRvIHVzZSBhcyB2aWV3bWFpbmhlYWRpZCgkdmlldykKK3Byb2MgZ2V0dmlld2hlYWQge2ZkIGluc3Qgdmlld30geworICAgIGdsb2JhbCB2aWV3bWFpbmhlYWRpZCBjb21tZmQgY3VydmlldyB2aWV3aW5zdGFuY2VzIHNob3dsb2NhbGNoYW5nZXMKKworICAgIHNldCBpZCB7fQorICAgIGlmIHtbZ2V0cyAkZmQgbGluZV0gPCAwfSB7CisJaWYgeyFbZW9mICRmZF19IHsKKwkgICAgcmV0dXJuIDEKKwl9CisgICAgfSBlbHNlaWYge1tzdHJpbmcgbGVuZ3RoICRsaW5lXSA9PSA0MCAmJiBbc3RyaW5nIGlzIHhkaWdpdCAkbGluZV19IHsKKwlzZXQgaWQgJGxpbmUKKyAgICB9CisgICAgc2V0IHZpZXdtYWluaGVhZGlkKCR2aWV3KSAkaWQKKyAgICBjbG9zZSAkZmQKKyAgICB1bnNldCBjb21tZmQoJGluc3QpCisgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICR2aWV3aW5zdGFuY2VzKCR2aWV3KSAkaW5zdF0KKyAgICBpZiB7JGkgPj0gMH0geworCXNldCB2aWV3aW5zdGFuY2VzKCR2aWV3KSBbbHJlcGxhY2UgJHZpZXdpbnN0YW5jZXMoJHZpZXcpICRpICRpXQorICAgIH0KKyAgICBpZiB7JHNob3dsb2NhbGNoYW5nZXMgJiYgJGlkIG5lIHt9ICYmICR2aWV3ID09ICRjdXJ2aWV3fSB7CisJZG9zaG93bG9jYWxjaGFuZ2VzCisgICAgfQorICAgIHJldHVybiAwCit9CisKK3Byb2MgZG9zaG93bG9jYWxjaGFuZ2VzIHt9IHsKKyAgICBnbG9iYWwgY3VydmlldyB2aWV3bWFpbmhlYWRpZAorCisgICAgaWYgeyR2aWV3bWFpbmhlYWRpZCgkY3VydmlldykgZXEge319IHJldHVybgorICAgIGlmIHtbY29tbWl0aW52aWV3ICR2aWV3bWFpbmhlYWRpZCgkY3VydmlldykgJGN1cnZpZXddfSB7CisJZG9kaWZmaW5kZXgKKyAgICB9IGVsc2UgeworCWludGVyZXN0ZWRpbiAkdmlld21haW5oZWFkaWQoJGN1cnZpZXcpIGRvZGlmZmluZGV4CisgICAgfQorfQorCitwcm9jIGRvaGlkZWxvY2FsY2hhbmdlcyB7fSB7CisgICAgZ2xvYmFsIG51bGxpZCBudWxsaWQyIGxzZXJpYWwgY3VydmlldworCisgICAgaWYge1tjb21taXRpbnZpZXcgJG51bGxpZCAkY3Vydmlld119IHsKKwlyZW1vdmVmYWtlcm93ICRudWxsaWQKKyAgICB9CisgICAgaWYge1tjb21taXRpbnZpZXcgJG51bGxpZDIgJGN1cnZpZXddfSB7CisJcmVtb3ZlZmFrZXJvdyAkbnVsbGlkMgorICAgIH0KKyAgICBpbmNyIGxzZXJpYWwKK30KKworIyBzcGF3biBvZmYgYSBwcm9jZXNzIHRvIGRvIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQKK3Byb2MgZG9kaWZmaW5kZXgge30geworICAgIGdsb2JhbCBsc2VyaWFsIHNob3dsb2NhbGNoYW5nZXMgdmZpbGVsaW1pdCBjdXJ2aWV3CisgICAgZ2xvYmFsIGhhc3dvcmt0cmVlIGdpdF92ZXJzaW9uCisKKyAgICBpZiB7ISRzaG93bG9jYWxjaGFuZ2VzIHx8ICEkaGFzd29ya3RyZWV9IHJldHVybgorICAgIGluY3IgbHNlcmlhbAorICAgIGlmIHtbcGFja2FnZSB2Y29tcGFyZSAkZ2l0X3ZlcnNpb24gIjEuNy4yIl0gPj0gMH0geworCXNldCBjbWQgInxnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IEhFQUQiCisgICAgfSBlbHNlIHsKKwlzZXQgY21kICJ8Z2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRCIKKyAgICB9CisgICAgaWYgeyR2ZmlsZWxpbWl0KCRjdXJ2aWV3KSBuZSB7fX0geworCXNldCBjbWQgW2NvbmNhdCAkY21kIC0tICR2ZmlsZWxpbWl0KCRjdXJ2aWV3KV0KKyAgICB9CisgICAgc2V0IGZkIFtvcGVuICRjbWQgcl0KKyAgICBmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMAorICAgIHNldCBpIFtyZWdfaW5zdGFuY2UgJGZkXQorICAgIGZpbGVydW4gJGZkIFtsaXN0IHJlYWRkaWZmaW5kZXggJGZkICRsc2VyaWFsICRpXQorfQorCitwcm9jIHJlYWRkaWZmaW5kZXgge2ZkIHNlcmlhbCBpbnN0fSB7CisgICAgZ2xvYmFsIHZpZXdtYWluaGVhZGlkIG51bGxpZCBudWxsaWQyIGN1cnZpZXcgY29tbWl0aW5mbyBjb21taXRkYXRhIGxzZXJpYWwKKyAgICBnbG9iYWwgdmZpbGVsaW1pdAorCisgICAgc2V0IGlzZGlmZiAxCisgICAgaWYge1tnZXRzICRmZCBsaW5lXSA8IDB9IHsKKwlpZiB7IVtlb2YgJGZkXX0geworCSAgICByZXR1cm4gMQorCX0KKwlzZXQgaXNkaWZmIDAKKyAgICB9CisgICAgIyB3ZSBvbmx5IG5lZWQgdG8gc2VlIG9uZSBsaW5lIGFuZCB3ZSBkb24ndCByZWFsbHkgY2FyZSB3aGF0IGl0IHNheXMuLi4KKyAgICBzdG9wX2luc3RhbmNlICRpbnN0CisKKyAgICBpZiB7JHNlcmlhbCAhPSAkbHNlcmlhbH0geworCXJldHVybiAwCisgICAgfQorCisgICAgIyBub3cgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbG9jYWwgY2hhbmdlcyBub3QgY2hlY2tlZCBpbiB0byB0aGUgaW5kZXgKKyAgICBzZXQgY21kICJ8Z2l0IGRpZmYtZmlsZXMiCisgICAgaWYgeyR2ZmlsZWxpbWl0KCRjdXJ2aWV3KSBuZSB7fX0geworCXNldCBjbWQgW2NvbmNhdCAkY21kIC0tICR2ZmlsZWxpbWl0KCRjdXJ2aWV3KV0KKyAgICB9CisgICAgc2V0IGZkIFtvcGVuICRjbWQgcl0KKyAgICBmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMAorICAgIHNldCBpIFtyZWdfaW5zdGFuY2UgJGZkXQorICAgIGZpbGVydW4gJGZkIFtsaXN0IHJlYWRkaWZmZmlsZXMgJGZkICRzZXJpYWwgJGldCisKKyAgICBpZiB7JGlzZGlmZiAmJiAhW2NvbW1pdGludmlldyAkbnVsbGlkMiAkY3Vydmlld119IHsKKwkjIGFkZCB0aGUgbGluZSBmb3IgdGhlIGNoYW5nZXMgaW4gdGhlIGluZGV4IHRvIHRoZSBncmFwaAorCXNldCBobCBbbWMgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCJdCisJc2V0IGNvbW1pdGluZm8oJG51bGxpZDIpIFtsaXN0ICAkaGwge30ge30ge30ge30gIiAgICAkaGxcbiJdCisJc2V0IGNvbW1pdGRhdGEoJG51bGxpZDIpICJcbiAgICAkaGxcbiIKKwlpZiB7W2NvbW1pdGludmlldyAkbnVsbGlkICRjdXJ2aWV3XX0geworCSAgICByZW1vdmVmYWtlcm93ICRudWxsaWQKKwl9CisJaW5zZXJ0ZmFrZXJvdyAkbnVsbGlkMiAkdmlld21haW5oZWFkaWQoJGN1cnZpZXcpCisgICAgfSBlbHNlaWYgeyEkaXNkaWZmICYmIFtjb21taXRpbnZpZXcgJG51bGxpZDIgJGN1cnZpZXddfSB7CisJaWYge1tjb21taXRpbnZpZXcgJG51bGxpZCAkY3Vydmlld119IHsKKwkgICAgcmVtb3ZlZmFrZXJvdyAkbnVsbGlkCisJfQorCXJlbW92ZWZha2Vyb3cgJG51bGxpZDIKKyAgICB9CisgICAgcmV0dXJuIDAKK30KKworcHJvYyByZWFkZGlmZmZpbGVzIHtmZCBzZXJpYWwgaW5zdH0geworICAgIGdsb2JhbCB2aWV3bWFpbmhlYWRpZCBudWxsaWQgbnVsbGlkMiBjdXJ2aWV3CisgICAgZ2xvYmFsIGNvbW1pdGluZm8gY29tbWl0ZGF0YSBsc2VyaWFsCisKKyAgICBzZXQgaXNkaWZmIDEKKyAgICBpZiB7W2dldHMgJGZkIGxpbmVdIDwgMH0geworCWlmIHshW2VvZiAkZmRdfSB7CisJICAgIHJldHVybiAxCisJfQorCXNldCBpc2RpZmYgMAorICAgIH0KKyAgICAjIHdlIG9ubHkgbmVlZCB0byBzZWUgb25lIGxpbmUgYW5kIHdlIGRvbid0IHJlYWxseSBjYXJlIHdoYXQgaXQgc2F5cy4uLgorICAgIHN0b3BfaW5zdGFuY2UgJGluc3QKKworICAgIGlmIHskc2VyaWFsICE9ICRsc2VyaWFsfSB7CisJcmV0dXJuIDAKKyAgICB9CisKKyAgICBpZiB7JGlzZGlmZiAmJiAhW2NvbW1pdGludmlldyAkbnVsbGlkICRjdXJ2aWV3XX0geworCSMgYWRkIHRoZSBsaW5lIGZvciB0aGUgbG9jYWwgZGlmZiB0byB0aGUgZ3JhcGgKKwlzZXQgaGwgW21jICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCJdCisJc2V0IGNvbW1pdGluZm8oJG51bGxpZCkgW2xpc3QgICRobCB7fSB7fSB7fSB7fSAiICAgICRobFxuIl0KKwlzZXQgY29tbWl0ZGF0YSgkbnVsbGlkKSAiXG4gICAgJGhsXG4iCisJaWYge1tjb21taXRpbnZpZXcgJG51bGxpZDIgJGN1cnZpZXddfSB7CisJICAgIHNldCBwICRudWxsaWQyCisJfSBlbHNlIHsKKwkgICAgc2V0IHAgJHZpZXdtYWluaGVhZGlkKCRjdXJ2aWV3KQorCX0KKwlpbnNlcnRmYWtlcm93ICRudWxsaWQgJHAKKyAgICB9IGVsc2VpZiB7ISRpc2RpZmYgJiYgW2NvbW1pdGludmlldyAkbnVsbGlkICRjdXJ2aWV3XX0geworCXJlbW92ZWZha2Vyb3cgJG51bGxpZAorICAgIH0KKyAgICByZXR1cm4gMAorfQorCitwcm9jIG5leHR1c2Uge2lkIHJvd30geworICAgIGdsb2JhbCBjdXJ2aWV3IGNoaWxkcmVuCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCldfSB7CisJZm9yZWFjaCBraWQgJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkgeworCSAgICBpZiB7IVtjb21taXRpbnZpZXcgJGtpZCAkY3Vydmlld119IHsKKwkJcmV0dXJuIC0xCisJICAgIH0KKwkgICAgaWYge1tyb3dvZmNvbW1pdCAka2lkXSA+ICRyb3d9IHsKKwkJcmV0dXJuIFtyb3dvZmNvbW1pdCAka2lkXQorCSAgICB9CisJfQorICAgIH0KKyAgICBpZiB7W2NvbW1pdGludmlldyAkaWQgJGN1cnZpZXddfSB7CisJcmV0dXJuIFtyb3dvZmNvbW1pdCAkaWRdCisgICAgfQorICAgIHJldHVybiAtMQorfQorCitwcm9jIHByZXZ1c2Uge2lkIHJvd30geworICAgIGdsb2JhbCBjdXJ2aWV3IGNoaWxkcmVuCisKKyAgICBzZXQgcmV0IC0xCisgICAgaWYge1tpbmZvIGV4aXN0cyBjaGlsZHJlbigkY3VydmlldywkaWQpXX0geworCWZvcmVhY2gga2lkICRjaGlsZHJlbigkY3VydmlldywkaWQpIHsKKwkgICAgaWYgeyFbY29tbWl0aW52aWV3ICRraWQgJGN1cnZpZXddfSBicmVhaworCSAgICBpZiB7W3Jvd29mY29tbWl0ICRraWRdIDwgJHJvd30geworCQlzZXQgcmV0IFtyb3dvZmNvbW1pdCAka2lkXQorCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gJHJldAorfQorCitwcm9jIG1ha2VfaWRsaXN0IHtyb3d9IHsKKyAgICBnbG9iYWwgZGlzcGxheW9yZGVyIHBhcmVudGxpc3QgdXBhcnJvd2xlbiBkb3duYXJyb3dsZW4gbWluZ2FwbGVuCisgICAgZ2xvYmFsIGNvbW1pdGlkeCBjdXJ2aWV3IGNoaWxkcmVuCisKKyAgICBzZXQgciBbZXhwciB7JHJvdyAtICRtaW5nYXBsZW4gLSAkZG93bmFycm93bGVuIC0gMX1dCisgICAgaWYgeyRyIDwgMH0geworCXNldCByIDAKKyAgICB9CisgICAgc2V0IHJhIFtleHByIHskcm93IC0gJGRvd25hcnJvd2xlbn1dCisgICAgaWYgeyRyYSA8IDB9IHsKKwlzZXQgcmEgMAorICAgIH0KKyAgICBzZXQgcmIgW2V4cHIgeyRyb3cgKyAkdXBhcnJvd2xlbn1dCisgICAgaWYgeyRyYiA+ICRjb21taXRpZHgoJGN1cnZpZXcpfSB7CisJc2V0IHJiICRjb21taXRpZHgoJGN1cnZpZXcpCisgICAgfQorICAgIG1ha2VfZGlzcG9yZGVyICRyIFtleHByIHskcmIgKyAxfV0KKyAgICBzZXQgaWRzIHt9CisgICAgZm9yIHt9IHskciA8ICRyYX0ge2luY3Igcn0geworCXNldCBuZXh0aWQgW2xpbmRleCAkZGlzcGxheW9yZGVyIFtleHByIHskciArIDF9XV0KKwlmb3JlYWNoIHAgW2xpbmRleCAkcGFyZW50bGlzdCAkcl0geworCSAgICBpZiB7JHAgZXEgJG5leHRpZH0gY29udGludWUKKwkgICAgc2V0IHJuIFtuZXh0dXNlICRwICRyXQorCSAgICBpZiB7JHJuID49ICRyb3cgJiYKKwkJJHJuIDw9ICRyICsgJGRvd25hcnJvd2xlbiArICRtaW5nYXBsZW4gKyAkdXBhcnJvd2xlbn0geworCQlsYXBwZW5kIGlkcyBbbGlzdCBbb3JkZXJ0b2tlbiAkcF0gJHBdCisJICAgIH0KKwl9CisgICAgfQorICAgIGZvciB7fSB7JHIgPCAkcm93fSB7aW5jciByfSB7CisJc2V0IG5leHRpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgW2V4cHIgeyRyICsgMX1dXQorCWZvcmVhY2ggcCBbbGluZGV4ICRwYXJlbnRsaXN0ICRyXSB7CisJICAgIGlmIHskcCBlcSAkbmV4dGlkfSBjb250aW51ZQorCSAgICBzZXQgcm4gW25leHR1c2UgJHAgJHJdCisJICAgIGlmIHskcm4gPCAwIHx8ICRybiA+PSAkcm93fSB7CisJCWxhcHBlbmQgaWRzIFtsaXN0IFtvcmRlcnRva2VuICRwXSAkcF0KKwkgICAgfQorCX0KKyAgICB9CisgICAgc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm93XQorICAgIGxhcHBlbmQgaWRzIFtsaXN0IFtvcmRlcnRva2VuICRpZF0gJGlkXQorICAgIHdoaWxlIHskciA8ICRyYn0geworCWZvcmVhY2ggcCBbbGluZGV4ICRwYXJlbnRsaXN0ICRyXSB7CisJICAgIHNldCBmaXJzdGtpZCBbbGluZGV4ICRjaGlsZHJlbigkY3VydmlldywkcCkgMF0KKwkgICAgaWYge1tyb3dvZmNvbW1pdCAkZmlyc3RraWRdIDwgJHJvd30geworCQlsYXBwZW5kIGlkcyBbbGlzdCBbb3JkZXJ0b2tlbiAkcF0gJHBdCisJICAgIH0KKwl9CisJaW5jciByCisJc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcl0KKwlpZiB7JGlkIG5lIHt9fSB7CisJICAgIHNldCBmaXJzdGtpZCBbbGluZGV4ICRjaGlsZHJlbigkY3VydmlldywkaWQpIDBdCisJICAgIGlmIHskZmlyc3RraWQgbmUge30gJiYgW3Jvd29mY29tbWl0ICRmaXJzdGtpZF0gPCAkcm93fSB7CisJCWxhcHBlbmQgaWRzIFtsaXN0IFtvcmRlcnRva2VuICRpZF0gJGlkXQorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgaWRsaXN0IHt9CisgICAgZm9yZWFjaCBpZHggW2xzb3J0IC11bmlxdWUgJGlkc10geworCWxhcHBlbmQgaWRsaXN0IFtsaW5kZXggJGlkeCAxXQorICAgIH0KKyAgICByZXR1cm4gJGlkbGlzdAorfQorCitwcm9jIHJvd3NlcXVhbCB7YSBifSB7CisgICAgd2hpbGUge1tzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGEge31dXSA+PSAwfSB7CisJc2V0IGEgW2xyZXBsYWNlICRhICRpICRpXQorICAgIH0KKyAgICB3aGlsZSB7W3NldCBpIFtsc2VhcmNoIC1leGFjdCAkYiB7fV1dID49IDB9IHsKKwlzZXQgYiBbbHJlcGxhY2UgJGIgJGkgJGldCisgICAgfQorICAgIHJldHVybiBbZXhwciB7JGEgZXEgJGJ9XQorfQorCitwcm9jIG1ha2V1cGxpbmUge2lkIHJvdyByZW5kIGNvbH0geworICAgIGdsb2JhbCByb3dpZGxpc3QgdXBhcnJvd2xlbiBkb3duYXJyb3dsZW4gbWluZ2FwbGVuCisKKyAgICBmb3Ige3NldCByICRyZW5kfSB7MX0ge3NldCByICRyc3RhcnR9IHsKKwlzZXQgcnN0YXJ0IFtwcmV2dXNlICRpZCAkcl0KKwlpZiB7JHJzdGFydCA8IDB9IHJldHVybgorCWlmIHskcnN0YXJ0IDwgJHJvd30gYnJlYWsKKyAgICB9CisgICAgaWYgeyRyc3RhcnQgKyAkdXBhcnJvd2xlbiArICRtaW5nYXBsZW4gKyAkZG93bmFycm93bGVuIDwgJHJlbmR9IHsKKwlzZXQgcnN0YXJ0IFtleHByIHskcmVuZCAtICR1cGFycm93bGVuIC0gMX1dCisgICAgfQorICAgIGZvciB7c2V0IHIgJHJzdGFydH0ge1tpbmNyIHJdIDw9ICRyb3d9IHt9IHsKKwlzZXQgaWRsaXN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcl0KKwlpZiB7JGlkbGlzdCBuZSB7fSAmJiBbbHNlYXJjaCAtZXhhY3QgJGlkbGlzdCAkaWRdIDwgMH0geworCSAgICBzZXQgY29sIFtpZGNvbCAkaWRsaXN0ICRpZCAkY29sXQorCSAgICBsc2V0IHJvd2lkbGlzdCAkciBbbGluc2VydCAkaWRsaXN0ICRjb2wgJGlkXQorCSAgICBjaGFuZ2Vkcm93ICRyCisJfQorICAgIH0KK30KKworcHJvYyBsYXlvdXRyb3dzIHtyb3cgZW5kcm93fSB7CisgICAgZ2xvYmFsIHJvd2lkbGlzdCByb3dpc29wdCByb3dmaW5hbCBkaXNwbGF5b3JkZXIKKyAgICBnbG9iYWwgdXBhcnJvd2xlbiBkb3duYXJyb3dsZW4gbWF4d2lkdGggbWluZ2FwbGVuCisgICAgZ2xvYmFsIGNoaWxkcmVuIHBhcmVudGxpc3QKKyAgICBnbG9iYWwgY29tbWl0aWR4IHZpZXdjb21wbGV0ZSBjdXJ2aWV3CisKKyAgICBtYWtlX2Rpc3BvcmRlciBbZXhwciB7JHJvdyAtIDF9XSBbZXhwciB7JGVuZHJvdyArICR1cGFycm93bGVufV0KKyAgICBzZXQgaWRsaXN0IHt9CisgICAgaWYgeyRyb3cgPiAwfSB7CisJc2V0IHJtMSBbZXhwciB7JHJvdyAtIDF9XQorCWZvcmVhY2ggaWQgW2xpbmRleCAkcm93aWRsaXN0ICRybTFdIHsKKwkgICAgaWYgeyRpZCBuZSB7fX0geworCQlsYXBwZW5kIGlkbGlzdCAkaWQKKwkgICAgfQorCX0KKwlzZXQgZmluYWwgW2xpbmRleCAkcm93ZmluYWwgJHJtMV0KKyAgICB9CisgICAgZm9yIHt9IHskcm93IDwgJGVuZHJvd30ge2luY3Igcm93fSB7CisJc2V0IHJtMSBbZXhwciB7JHJvdyAtIDF9XQorCWlmIHskcm0xIDwgMCB8fCAkaWRsaXN0IGVxIHt9fSB7CisJICAgIHNldCBpZGxpc3QgW21ha2VfaWRsaXN0ICRyb3ddCisJICAgIHNldCBmaW5hbCAxCisJfSBlbHNlIHsKKwkgICAgc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm0xXQorCSAgICBzZXQgY29sIFtsc2VhcmNoIC1leGFjdCAkaWRsaXN0ICRpZF0KKwkgICAgc2V0IGlkbGlzdCBbbHJlcGxhY2UgJGlkbGlzdCAkY29sICRjb2xdCisJICAgIGZvcmVhY2ggcCBbbGluZGV4ICRwYXJlbnRsaXN0ICRybTFdIHsKKwkJaWYge1tsc2VhcmNoIC1leGFjdCAkaWRsaXN0ICRwXSA8IDB9IHsKKwkJICAgIHNldCBjb2wgW2lkY29sICRpZGxpc3QgJHAgJGNvbF0KKwkJICAgIHNldCBpZGxpc3QgW2xpbnNlcnQgJGlkbGlzdCAkY29sICRwXQorCQkgICAgIyBpZiBub3QgdGhlIGZpcnN0IGNoaWxkLCB3ZSBoYXZlIHRvIGluc2VydCBhIGxpbmUgZ29pbmcgdXAKKwkJICAgIGlmIHskaWQgbmUgW2xpbmRleCAkY2hpbGRyZW4oJGN1cnZpZXcsJHApIDBdfSB7CisJCQltYWtldXBsaW5lICRwICRybTEgJHJvdyAkY29sCisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCisJICAgIGlmIHskcm93ID4gJGRvd25hcnJvd2xlbn0geworCQlzZXQgdGVybXJvdyBbZXhwciB7JHJvdyAtICRkb3duYXJyb3dsZW4gLSAxfV0KKwkJZm9yZWFjaCBwIFtsaW5kZXggJHBhcmVudGxpc3QgJHRlcm1yb3ddIHsKKwkJICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkaWRsaXN0ICRwXQorCQkgICAgaWYgeyRpIDwgMH0gY29udGludWUKKwkJICAgIHNldCBuciBbbmV4dHVzZSAkcCAkdGVybXJvd10KKwkJICAgIGlmIHskbnIgPCAwIHx8ICRuciA+PSAkcm93ICsgJG1pbmdhcGxlbiArICR1cGFycm93bGVufSB7CisJCQlzZXQgaWRsaXN0IFtscmVwbGFjZSAkaWRsaXN0ICRpICRpXQorCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgc2V0IGNvbCBbbHNlYXJjaCAtZXhhY3QgJGlkbGlzdCAkaWRdCisJICAgIGlmIHskY29sIDwgMH0geworCQlzZXQgY29sIFtpZGNvbCAkaWRsaXN0ICRpZF0KKwkJc2V0IGlkbGlzdCBbbGluc2VydCAkaWRsaXN0ICRjb2wgJGlkXQorCQlpZiB7JGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkgbmUge319IHsKKwkJICAgIG1ha2V1cGxpbmUgJGlkICRybTEgJHJvdyAkY29sCisJCX0KKwkgICAgfQorCSAgICBzZXQgciBbZXhwciB7JHJvdyArICR1cGFycm93bGVuIC0gMX1dCisJICAgIGlmIHskciA8ICRjb21taXRpZHgoJGN1cnZpZXcpfSB7CisJCXNldCB4ICRjb2wKKwkJZm9yZWFjaCBwIFtsaW5kZXggJHBhcmVudGxpc3QgJHJdIHsKKwkJICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJGlkbGlzdCAkcF0gPj0gMH0gY29udGludWUKKwkJICAgIHNldCBmayBbbGluZGV4ICRjaGlsZHJlbigkY3VydmlldywkcCkgMF0KKwkJICAgIGlmIHtbcm93b2Zjb21taXQgJGZrXSA8ICRyb3d9IHsKKwkJCXNldCB4IFtpZGNvbCAkaWRsaXN0ICRwICR4XQorCQkJc2V0IGlkbGlzdCBbbGluc2VydCAkaWRsaXN0ICR4ICRwXQorCQkgICAgfQorCQl9CisJCWlmIHtbaW5jciByXSA8ICRjb21taXRpZHgoJGN1cnZpZXcpfSB7CisJCSAgICBzZXQgcCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJdCisJCSAgICBpZiB7W2xzZWFyY2ggLWV4YWN0ICRpZGxpc3QgJHBdIDwgMH0geworCQkJc2V0IGZrIFtsaW5kZXggJGNoaWxkcmVuKCRjdXJ2aWV3LCRwKSAwXQorCQkJaWYgeyRmayBuZSB7fSAmJiBbcm93b2Zjb21taXQgJGZrXSA8ICRyb3d9IHsKKwkJCSAgICBzZXQgeCBbaWRjb2wgJGlkbGlzdCAkcCAkeF0KKwkJCSAgICBzZXQgaWRsaXN0IFtsaW5zZXJ0ICRpZGxpc3QgJHggJHBdCisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKwlpZiB7JGZpbmFsICYmICEkdmlld2NvbXBsZXRlKCRjdXJ2aWV3KSAmJgorCSAgICAkcm93ICsgJHVwYXJyb3dsZW4gKyAkbWluZ2FwbGVuICsgJGRvd25hcnJvd2xlbgorCQk+PSAkY29tbWl0aWR4KCRjdXJ2aWV3KX0geworCSAgICBzZXQgZmluYWwgMAorCX0KKwlzZXQgbCBbbGxlbmd0aCAkcm93aWRsaXN0XQorCWlmIHskcm93ID09ICRsfSB7CisJICAgIGxhcHBlbmQgcm93aWRsaXN0ICRpZGxpc3QKKwkgICAgbGFwcGVuZCByb3dpc29wdCAwCisJICAgIGxhcHBlbmQgcm93ZmluYWwgJGZpbmFsCisJfSBlbHNlaWYgeyRyb3cgPCAkbH0geworCSAgICBpZiB7IVtyb3dzZXF1YWwgJGlkbGlzdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd11dfSB7CisJCWxzZXQgcm93aWRsaXN0ICRyb3cgJGlkbGlzdAorCQljaGFuZ2Vkcm93ICRyb3cKKwkgICAgfQorCSAgICBsc2V0IHJvd2ZpbmFsICRyb3cgJGZpbmFsCisJfSBlbHNlIHsKKwkgICAgc2V0IHBhZCBbbnRpbWVzIFtleHByIHskcm93IC0gJGx9XSB7fV0KKwkgICAgc2V0IHJvd2lkbGlzdCBbY29uY2F0ICRyb3dpZGxpc3QgJHBhZF0KKwkgICAgbGFwcGVuZCByb3dpZGxpc3QgJGlkbGlzdAorCSAgICBzZXQgcm93ZmluYWwgW2NvbmNhdCAkcm93ZmluYWwgJHBhZF0KKwkgICAgbGFwcGVuZCByb3dmaW5hbCAkZmluYWwKKwkgICAgc2V0IHJvd2lzb3B0IFtjb25jYXQgJHJvd2lzb3B0IFtudGltZXMgW2V4cHIgeyRyb3cgLSAkbCArIDF9XSAwXV0KKwl9CisgICAgfQorICAgIHJldHVybiAkcm93Cit9CisKK3Byb2MgY2hhbmdlZHJvdyB7cm93fSB7CisgICAgZ2xvYmFsIGRpc3BsYXlvcmRlciBpZGRyYXduIHJvd2lzb3B0IG5lZWRfcmVkaXNwbGF5CisKKyAgICBzZXQgbCBbbGxlbmd0aCAkcm93aXNvcHRdCisgICAgaWYgeyRyb3cgPCAkbH0geworCWxzZXQgcm93aXNvcHQgJHJvdyAwCisJaWYgeyRyb3cgKyAxIDwgJGx9IHsKKwkgICAgbHNldCByb3dpc29wdCBbZXhwciB7JHJvdyArIDF9XSAwCisJICAgIGlmIHskcm93ICsgMiA8ICRsfSB7CisJCWxzZXQgcm93aXNvcHQgW2V4cHIgeyRyb3cgKyAyfV0gMAorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCisgICAgaWYge1tpbmZvIGV4aXN0cyBpZGRyYXduKCRpZCldfSB7CisJc2V0IG5lZWRfcmVkaXNwbGF5IDEKKyAgICB9Cit9CisKK3Byb2MgaW5zZXJ0X3BhZCB7cm93IGNvbCBucGFkfSB7CisgICAgZ2xvYmFsIHJvd2lkbGlzdAorCisgICAgc2V0IHBhZCBbbnRpbWVzICRucGFkIHt9XQorICAgIHNldCBpZGxpc3QgW2xpbmRleCAkcm93aWRsaXN0ICRyb3ddCisgICAgc2V0IGJlZiBbbHJhbmdlICRpZGxpc3QgMCBbZXhwciB7JGNvbCAtIDF9XV0KKyAgICBzZXQgYWZ0IFtscmFuZ2UgJGlkbGlzdCAkY29sIGVuZF0KKyAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGFmdCB7fV0KKyAgICBpZiB7JGkgPiAwfSB7CisJc2V0IGFmdCBbbHJlcGxhY2UgJGFmdCAkaSAkaV0KKyAgICB9CisgICAgbHNldCByb3dpZGxpc3QgJHJvdyBbY29uY2F0ICRiZWYgJHBhZCAkYWZ0XQorICAgIGNoYW5nZWRyb3cgJHJvdworfQorCitwcm9jIG9wdGltaXplX3Jvd3Mge3JvdyBjb2wgZW5kcm93fSB7CisgICAgZ2xvYmFsIHJvd2lkbGlzdCByb3dpc29wdCBkaXNwbGF5b3JkZXIgY3VydmlldyBjaGlsZHJlbgorCisgICAgaWYgeyRyb3cgPCAxfSB7CisJc2V0IHJvdyAxCisgICAgfQorICAgIGZvciB7fSB7JHJvdyA8ICRlbmRyb3d9IHtpbmNyIHJvdzsgc2V0IGNvbCAwfSB7CisJaWYge1tsaW5kZXggJHJvd2lzb3B0ICRyb3ddfSBjb250aW51ZQorCXNldCBoYXNwYWQgMAorCXNldCB5MCBbZXhwciB7JHJvdyAtIDF9XQorCXNldCB5bSBbZXhwciB7JHJvdyAtIDJ9XQorCXNldCBpZGxpc3QgW2xpbmRleCAkcm93aWRsaXN0ICRyb3ddCisJc2V0IHByZXZpZGxpc3QgW2xpbmRleCAkcm93aWRsaXN0ICR5MF0KKwlpZiB7JGlkbGlzdCBlcSB7fSB8fCAkcHJldmlkbGlzdCBlcSB7fX0gY29udGludWUKKwlpZiB7JHltID49IDB9IHsKKwkgICAgc2V0IHBwcmV2aWRsaXN0IFtsaW5kZXggJHJvd2lkbGlzdCAkeW1dCisJICAgIGlmIHskcHByZXZpZGxpc3QgZXEge319IGNvbnRpbnVlCisJfSBlbHNlIHsKKwkgICAgc2V0IHBwcmV2aWRsaXN0IHt9CisJfQorCXNldCB4MCAtMQorCXNldCB4bSAtMQorCWZvciB7fSB7JGNvbCA8IFtsbGVuZ3RoICRpZGxpc3RdfSB7aW5jciBjb2x9IHsKKwkgICAgc2V0IGlkIFtsaW5kZXggJGlkbGlzdCAkY29sXQorCSAgICBpZiB7W2xpbmRleCAkcHJldmlkbGlzdCAkY29sXSBlcSAkaWR9IGNvbnRpbnVlCisJICAgIGlmIHskaWQgZXEge319IHsKKwkJc2V0IGhhc3BhZCAxCisJCWNvbnRpbnVlCisJICAgIH0KKwkgICAgc2V0IHgwIFtsc2VhcmNoIC1leGFjdCAkcHJldmlkbGlzdCAkaWRdCisJICAgIGlmIHskeDAgPCAwfSBjb250aW51ZQorCSAgICBzZXQgeiBbZXhwciB7JHgwIC0gJGNvbH1dCisJICAgIHNldCBpc2Fycm93IDAKKwkgICAgc2V0IHowIHt9CisJICAgIGlmIHskeW0gPj0gMH0geworCQlzZXQgeG0gW2xzZWFyY2ggLWV4YWN0ICRwcHJldmlkbGlzdCAkaWRdCisJCWlmIHskeG0gPj0gMH0geworCQkgICAgc2V0IHowIFtleHByIHskeG0gLSAkeDB9XQorCQl9CisJICAgIH0KKwkgICAgaWYgeyR6MCBlcSB7fX0geworCQkjIGlmIHJvdyB5MCBpcyB0aGUgZmlyc3QgY2hpbGQgb2YgJGlkIHRoZW4gaXQncyBub3QgYW4gYXJyb3cKKwkJaWYge1tsaW5kZXggJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkgMF0gbmUKKwkJICAgIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkeTBdfSB7CisJCSAgICBzZXQgaXNhcnJvdyAxCisJCX0KKwkgICAgfQorCSAgICBpZiB7ISRpc2Fycm93ICYmICRpZCBuZSBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJvd10gJiYKKwkJW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCBbZXhwciB7JHJvdysxfV1dICRpZF0gPCAwfSB7CisJCXNldCBpc2Fycm93IDEKKwkgICAgfQorCSAgICAjIExvb2tpbmcgYXQgbGluZXMgZnJvbSB0aGlzIHJvdyB0byB0aGUgcHJldmlvdXMgcm93LAorCSAgICAjIG1ha2UgdGhlbSBnbyBzdHJhaWdodCB1cCBpZiB0aGV5IGVuZCBpbiBhbiBhcnJvdyBvbgorCSAgICAjIHRoZSBwcmV2aW91cyByb3c7IG90aGVyd2lzZSBtYWtlIHRoZW0gZ28gc3RyYWlnaHQgdXAKKwkgICAgIyBvciBhdCA0NSBkZWdyZWVzLgorCSAgICBpZiB7JHogPCAtMSB8fCAoJHogPCAwICYmICRpc2Fycm93KX0geworCQkjIExpbmUgY3VycmVudGx5IGdvZXMgbGVmdCB0b28gbXVjaDsKKwkJIyBpbnNlcnQgcGFkcyBpbiB0aGUgcHJldmlvdXMgcm93LCB0aGVuIG9wdGltaXplIGl0CisJCXNldCBucGFkIFtleHByIHstMSAtICR6ICsgJGlzYXJyb3d9XQorCQlpbnNlcnRfcGFkICR5MCAkeDAgJG5wYWQKKwkJaWYgeyR5MCA+IDB9IHsKKwkJICAgIG9wdGltaXplX3Jvd3MgJHkwICR4MCAkcm93CisJCX0KKwkJc2V0IHByZXZpZGxpc3QgW2xpbmRleCAkcm93aWRsaXN0ICR5MF0KKwkJc2V0IHgwIFtsc2VhcmNoIC1leGFjdCAkcHJldmlkbGlzdCAkaWRdCisJCXNldCB6IFtleHByIHskeDAgLSAkY29sfV0KKwkJaWYgeyR6MCBuZSB7fX0geworCQkgICAgc2V0IHBwcmV2aWRsaXN0IFtsaW5kZXggJHJvd2lkbGlzdCAkeW1dCisJCSAgICBzZXQgeG0gW2xzZWFyY2ggLWV4YWN0ICRwcHJldmlkbGlzdCAkaWRdCisJCSAgICBzZXQgejAgW2V4cHIgeyR4bSAtICR4MH1dCisJCX0KKwkgICAgfSBlbHNlaWYgeyR6ID4gMSB8fCAoJHogPiAwICYmICRpc2Fycm93KX0geworCQkjIExpbmUgY3VycmVudGx5IGdvZXMgcmlnaHQgdG9vIG11Y2g7CisJCSMgaW5zZXJ0IHBhZHMgaW4gdGhpcyBsaW5lCisJCXNldCBucGFkIFtleHByIHskeiAtIDEgKyAkaXNhcnJvd31dCisJCWluc2VydF9wYWQgJHJvdyAkY29sICRucGFkCisJCXNldCBpZGxpc3QgW2xpbmRleCAkcm93aWRsaXN0ICRyb3ddCisJCWluY3IgY29sICRucGFkCisJCXNldCB6IFtleHByIHskeDAgLSAkY29sfV0KKwkJc2V0IGhhc3BhZCAxCisJICAgIH0KKwkgICAgaWYgeyR6MCBlcSB7fSAmJiAhJGlzYXJyb3cgJiYgJHltID49IDB9IHsKKwkJIyB0aGlzIGxpbmUgbGlua3MgdG8gaXRzIGZpcnN0IGNoaWxkIG9uIHJvdyAkcm93LTIKKwkJc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkeW1dCisJCXNldCB4YyBbbHNlYXJjaCAtZXhhY3QgJHBwcmV2aWRsaXN0ICRpZF0KKwkJaWYgeyR4YyA+PSAwfSB7CisJCSAgICBzZXQgejAgW2V4cHIgeyR4YyAtICR4MH1dCisJCX0KKwkgICAgfQorCSAgICAjIGF2b2lkIGxpbmVzIGppZ2dpbmcgbGVmdCB0aGVuIGltbWVkaWF0ZWx5IHJpZ2h0CisJICAgIGlmIHskejAgbmUge30gJiYgJHogPCAwICYmICR6MCA+IDB9IHsKKwkJaW5zZXJ0X3BhZCAkeTAgJHgwIDEKKwkJaW5jciB4MAorCQlvcHRpbWl6ZV9yb3dzICR5MCAkeDAgJHJvdworCQlzZXQgcHJldmlkbGlzdCBbbGluZGV4ICRyb3dpZGxpc3QgJHkwXQorCSAgICB9CisJfQorCWlmIHshJGhhc3BhZH0geworCSAgICAjIEZpbmQgdGhlIGZpcnN0IGNvbHVtbiB0aGF0IGRvZXNuJ3QgaGF2ZSBhIGxpbmUgZ29pbmcgcmlnaHQKKwkgICAgZm9yIHtzZXQgY29sIFtsbGVuZ3RoICRpZGxpc3RdfSB7W2luY3IgY29sIC0xXSA+PSAwfSB7fSB7CisJCXNldCBpZCBbbGluZGV4ICRpZGxpc3QgJGNvbF0KKwkJaWYgeyRpZCBlcSB7fX0gYnJlYWsKKwkJc2V0IHgwIFtsc2VhcmNoIC1leGFjdCAkcHJldmlkbGlzdCAkaWRdCisJCWlmIHskeDAgPCAwfSB7CisJCSAgICAjIGNoZWNrIGlmIHRoaXMgaXMgdGhlIGxpbmsgdG8gdGhlIGZpcnN0IGNoaWxkCisJCSAgICBzZXQga2lkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkeTBdCisJCSAgICBpZiB7W2xpbmRleCAkY2hpbGRyZW4oJGN1cnZpZXcsJGlkKSAwXSBlcSAka2lkfSB7CisJCQkjIGl0IGlzLCB3b3JrIG91dCBvZmZzZXQgdG8gY2hpbGQKKwkJCXNldCB4MCBbbHNlYXJjaCAtZXhhY3QgJHByZXZpZGxpc3QgJGtpZF0KKwkJICAgIH0KKwkJfQorCQlpZiB7JHgwIDw9ICRjb2x9IGJyZWFrCisJICAgIH0KKwkgICAgIyBJbnNlcnQgYSBwYWQgYXQgdGhhdCBjb2x1bW4gYXMgbG9uZyBhcyBpdCBoYXMgYSBsaW5lIGFuZAorCSAgICAjIGlzbid0IHRoZSBsYXN0IGNvbHVtbgorCSAgICBpZiB7JHgwID49IDAgJiYgW2luY3IgY29sXSA8IFtsbGVuZ3RoICRpZGxpc3RdfSB7CisJCXNldCBpZGxpc3QgW2xpbnNlcnQgJGlkbGlzdCAkY29sIHt9XQorCQlsc2V0IHJvd2lkbGlzdCAkcm93ICRpZGxpc3QKKwkJY2hhbmdlZHJvdyAkcm93CisJICAgIH0KKwl9CisgICAgfQorfQorCitwcm9jIHhjIHtyb3cgY29sfSB7CisgICAgZ2xvYmFsIGNhbnZ4MCBsaW5lc3BjCisgICAgcmV0dXJuIFtleHByIHskY2FudngwICsgJGNvbCAqICRsaW5lc3BjfV0KK30KKworcHJvYyB5YyB7cm93fSB7CisgICAgZ2xvYmFsIGNhbnZ5MCBsaW5lc3BjCisgICAgcmV0dXJuIFtleHByIHskY2FudnkwICsgJHJvdyAqICRsaW5lc3BjfV0KK30KKworcHJvYyBsaW5ld2lkdGgge2lkfSB7CisgICAgZ2xvYmFsIHRoaWNrZXJsaW5lIGx0aGlja25lc3MKKworICAgIHNldCB3aWQgJGx0aGlja25lc3MKKyAgICBpZiB7W2luZm8gZXhpc3RzIHRoaWNrZXJsaW5lXSAmJiAkaWQgZXEgJHRoaWNrZXJsaW5lfSB7CisJc2V0IHdpZCBbZXhwciB7MiAqICRsdGhpY2tuZXNzfV0KKyAgICB9CisgICAgcmV0dXJuICR3aWQKK30KKworcHJvYyByb3dyYW5nZXMge2lkfSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgY2hpbGRyZW4gdXBhcnJvd2xlbiBkb3duYXJyb3dsZW4KKyAgICBnbG9iYWwgcm93aWRsaXN0CisKKyAgICBzZXQga2lkcyAkY2hpbGRyZW4oJGN1cnZpZXcsJGlkKQorICAgIGlmIHska2lkcyBlcSB7fX0geworCXJldHVybiB7fQorICAgIH0KKyAgICBzZXQgcmV0IHt9CisgICAgbGFwcGVuZCBraWRzICRpZAorICAgIGZvcmVhY2ggY2hpbGQgJGtpZHMgeworCWlmIHshW2NvbW1pdGludmlldyAkY2hpbGQgJGN1cnZpZXddfSBicmVhaworCXNldCByb3cgW3Jvd29mY29tbWl0ICRjaGlsZF0KKwlpZiB7IVtpbmZvIGV4aXN0cyBwcmV2XX0geworCSAgICBsYXBwZW5kIHJldCBbZXhwciB7JHJvdyArIDF9XQorCX0gZWxzZSB7CisJICAgIGlmIHskcm93IDw9ICRwcmV2cm93fSB7CisJCXB1dHMgIm9vcHMgY2hpbGRyZW4gb2YgW3Nob3J0aWRzICRpZF0gb3V0IG9mIG9yZGVyIFtzaG9ydGlkcyAkY2hpbGRdICRyb3cgPD0gW3Nob3J0aWRzICRwcmV2XSAkcHJldnJvdyIKKwkgICAgfQorCSAgICAjIHNlZSBpZiB0aGUgbGluZSBleHRlbmRzIHRoZSB3aG9sZSB3YXkgZnJvbSBwcmV2cm93IHRvIHJvdworCSAgICBpZiB7JHJvdyA+ICRwcmV2cm93ICsgJHVwYXJyb3dsZW4gKyAkZG93bmFycm93bGVuICYmCisJCVtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgXAorCQkJICAgIFtleHByIHtpbnQoKCRyb3cgKyAkcHJldnJvdykgLyAyKX1dXSAkaWRdIDwgMH0geworCQkjIGl0IGRvZXNuJ3QsIHNlZSB3aGVyZSBpdCBlbmRzCisJCXNldCByIFtleHByIHskcHJldnJvdyArICRkb3duYXJyb3dsZW59XQorCQlpZiB7W2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcl0gJGlkXSA8IDB9IHsKKwkJICAgIHdoaWxlIHtbaW5jciByIC0xXSA+ICRwcmV2cm93ICYmCisJCQkgICBbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcm93aWRsaXN0ICRyXSAkaWRdIDwgMH0ge30KKwkJfSBlbHNlIHsKKwkJICAgIHdoaWxlIHtbaW5jciByXSA8PSAkcm93ICYmCisJCQkgICBbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcm93aWRsaXN0ICRyXSAkaWRdID49IDB9IHt9CisJCSAgICBpbmNyIHIgLTEKKwkJfQorCQlsYXBwZW5kIHJldCAkcgorCQkjIHNlZSB3aGVyZSBpdCBzdGFydHMgdXAgYWdhaW4KKwkJc2V0IHIgW2V4cHIgeyRyb3cgLSAkdXBhcnJvd2xlbn1dCisJCWlmIHtbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcm93aWRsaXN0ICRyXSAkaWRdIDwgMH0geworCQkgICAgd2hpbGUge1tpbmNyIHJdIDwgJHJvdyAmJgorCQkJICAgW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcl0gJGlkXSA8IDB9IHt9CisJCX0gZWxzZSB7CisJCSAgICB3aGlsZSB7W2luY3IgciAtMV0gPj0gJHByZXZyb3cgJiYKKwkJCSAgIFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJdICRpZF0gPj0gMH0ge30KKwkJICAgIGluY3IgcgorCQl9CisJCWxhcHBlbmQgcmV0ICRyCisJICAgIH0KKwl9CisJaWYgeyRjaGlsZCBlcSAkaWR9IHsKKwkgICAgbGFwcGVuZCByZXQgJHJvdworCX0KKwlzZXQgcHJldiAkY2hpbGQKKwlzZXQgcHJldnJvdyAkcm93CisgICAgfQorICAgIHJldHVybiAkcmV0Cit9CisKK3Byb2MgZHJhd2xpbmVzZWcge2lkIHJvdyBlbmRyb3cgYXJyb3dsb3d9IHsKKyAgICBnbG9iYWwgcm93aWRsaXN0IGRpc3BsYXlvcmRlciBpZGRyYXduIGxpbmVzZWdzCisgICAgZ2xvYmFsIGNhbnYgY29sb3JtYXAgbGluZXNwYyBjdXJ2aWV3IG1heGxpbmVsZW4gcGFyZW50bGlzdAorCisgICAgc2V0IGNvbHMgW2xpc3QgW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcm93XSAkaWRdXQorICAgIHNldCBsZSBbZXhwciB7JHJvdyArIDF9XQorICAgIHNldCBhcnJvd2hpZ2ggMQorICAgIHdoaWxlIHsxfSB7CisJc2V0IGMgW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCAkbGVdICRpZF0KKwlpZiB7JGMgPCAwfSB7CisJICAgIGluY3IgbGUgLTEKKwkgICAgYnJlYWsKKwl9CisJbGFwcGVuZCBjb2xzICRjCisJc2V0IHggW2xpbmRleCAkZGlzcGxheW9yZGVyICRsZV0KKwlpZiB7JHggZXEgJGlkfSB7CisJICAgIHNldCBhcnJvd2hpZ2ggMAorCSAgICBicmVhaworCX0KKwlpZiB7W2luZm8gZXhpc3RzIGlkZHJhd24oJHgpXSB8fCAkbGUgPT0gJGVuZHJvd30geworCSAgICBzZXQgYyBbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcm93aWRsaXN0IFtleHByIHskbGUrMX1dXSAkaWRdCisJICAgIGlmIHskYyA+PSAwfSB7CisJCWxhcHBlbmQgY29scyAkYworCQlzZXQgYXJyb3doaWdoIDAKKwkgICAgfQorCSAgICBicmVhaworCX0KKwlpbmNyIGxlCisgICAgfQorICAgIGlmIHskbGUgPD0gJHJvd30geworCXJldHVybiAkcm93CisgICAgfQorCisgICAgc2V0IGxpbmVzIHt9CisgICAgc2V0IGkgMAorICAgIHNldCBqb2luaGlnaCAwCisgICAgaWYge1tpbmZvIGV4aXN0cyBsaW5lc2VncygkaWQpXX0geworCXNldCBsaW5lcyAkbGluZXNlZ3MoJGlkKQorCWZvcmVhY2ggbGkgJGxpbmVzIHsKKwkgICAgc2V0IHIwIFtsaW5kZXggJGxpIDBdCisJICAgIGlmIHskcjAgPiAkcm93fSB7CisJCWlmIHskcjAgPT0gJGxlICYmIFtsaW5kZXggJGxpIDFdIC0gJHJvdyA8PSAkbWF4bGluZWxlbn0geworCQkgICAgc2V0IGpvaW5oaWdoIDEKKwkJfQorCQlicmVhaworCSAgICB9CisJICAgIGluY3IgaQorCX0KKyAgICB9CisgICAgc2V0IGpvaW5sb3cgMAorICAgIGlmIHskaSA+IDB9IHsKKwlzZXQgbGkgW2xpbmRleCAkbGluZXMgW2V4cHIgeyRpLTF9XV0KKwlzZXQgcjEgW2xpbmRleCAkbGkgMV0KKwlpZiB7JHIxID09ICRyb3cgJiYgJGxlIC0gW2xpbmRleCAkbGkgMF0gPD0gJG1heGxpbmVsZW59IHsKKwkgICAgc2V0IGpvaW5sb3cgMQorCX0KKyAgICB9CisKKyAgICBzZXQgeCBbbGluZGV4ICRjb2xzIFtleHByIHskbGUgLSAkcm93fV1dCisgICAgc2V0IHhwIFtsaW5kZXggJGNvbHMgW2V4cHIgeyRsZSAtIDEgLSAkcm93fV1dCisgICAgc2V0IGRpciBbZXhwciB7JHhwIC0gJHh9XQorICAgIGlmIHskam9pbmhpZ2h9IHsKKwlzZXQgaXRoIFtsaW5kZXggJGxpbmVzICRpIDJdCisJc2V0IGNvb3JkcyBbJGNhbnYgY29vcmRzICRpdGhdCisJc2V0IGFoIFskY2FudiBpdGVtY2dldCAkaXRoIC1hcnJvd10KKwlzZXQgYXJyb3doaWdoIFtleHByIHskYWggZXEgImZpcnN0IiB8fCAkYWggZXEgImJvdGgifV0KKwlzZXQgeDIgW2xpbmRleCAkY29scyBbZXhwciB7JGxlICsgMSAtICRyb3d9XV0KKwlpZiB7JHgyIG5lIHt9ICYmICR4IC0gJHgyID09ICRkaXJ9IHsKKwkgICAgc2V0IGNvb3JkcyBbbHJhbmdlICRjb29yZHMgMCBlbmQtMl0KKwl9CisgICAgfSBlbHNlIHsKKwlzZXQgY29vcmRzIFtsaXN0IFt4YyAkbGUgJHhdIFt5YyAkbGVdXQorICAgIH0KKyAgICBpZiB7JGpvaW5sb3d9IHsKKwlzZXQgaXRsIFtsaW5kZXggJGxpbmVzIFtleHByIHskaS0xfV0gMl0KKwlzZXQgYWwgWyRjYW52IGl0ZW1jZ2V0ICRpdGwgLWFycm93XQorCXNldCBhcnJvd2xvdyBbZXhwciB7JGFsIGVxICJsYXN0IiB8fCAkYWwgZXEgImJvdGgifV0KKyAgICB9IGVsc2VpZiB7JGFycm93bG93fSB7CisJaWYge1tsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgW2V4cHIgeyRyb3ctMX1dXSAkaWRdID49IDAgfHwKKwkgICAgW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHBhcmVudGxpc3QgW2V4cHIgeyRyb3ctMX1dXSAkaWRdID49IDB9IHsKKwkgICAgc2V0IGFycm93bG93IDAKKwl9CisgICAgfQorICAgIHNldCBhcnJvdyBbbGluZGV4IHtub25lIGZpcnN0IGxhc3QgYm90aH0gW2V4cHIgeyRhcnJvd2hpZ2ggKyAyKiRhcnJvd2xvd31dXQorICAgIGZvciB7c2V0IHkgJGxlfSB7W2luY3IgeSAtMV0gPiAkcm93fSB7fSB7CisJc2V0IHggJHhwCisJc2V0IHhwIFtsaW5kZXggJGNvbHMgW2V4cHIgeyR5IC0gMSAtICRyb3d9XV0KKwlzZXQgbmRpciBbZXhwciB7JHhwIC0gJHh9XQorCWlmIHskZGlyICE9ICRuZGlyIHx8ICR4cCA8IDB9IHsKKwkgICAgbGFwcGVuZCBjb29yZHMgW3hjICR5ICR4XSBbeWMgJHldCisJfQorCXNldCBkaXIgJG5kaXIKKyAgICB9CisgICAgaWYgeyEkam9pbmxvd30geworCWlmIHskeHAgPCAwfSB7CisJICAgICMgam9pbiBwYXJlbnQgbGluZSB0byBmaXJzdCBjaGlsZAorCSAgICBzZXQgY2ggW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCisJICAgIHNldCB4YyBbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcm93aWRsaXN0ICRyb3ddICRjaF0KKwkgICAgaWYgeyR4YyA8IDB9IHsKKwkJcHV0cyAib29wczogZHJhd2xpbmVzZWc6IGNoaWxkICRjaCBub3Qgb24gcm93ICRyb3ciCisJICAgIH0gZWxzZWlmIHskeGMgIT0gJHh9IHsKKwkJaWYgeygkYXJyb3doaWdoICYmICRsZSA9PSAkcm93ICsgMSkgfHwgJGRpciA9PSAwfSB7CisJCSAgICBzZXQgZCBbZXhwciB7aW50KDAuNSAqICRsaW5lc3BjKX1dCisJCSAgICBzZXQgeDEgW3hjICRyb3cgJHhdCisJCSAgICBpZiB7JHhjIDwgJHh9IHsKKwkJCXNldCB4MiBbZXhwciB7JHgxIC0gJGR9XQorCQkgICAgfSBlbHNlIHsKKwkJCXNldCB4MiBbZXhwciB7JHgxICsgJGR9XQorCQkgICAgfQorCQkgICAgc2V0IHkyIFt5YyAkcm93XQorCQkgICAgc2V0IHkxIFtleHByIHskeTIgKyAkZH1dCisJCSAgICBsYXBwZW5kIGNvb3JkcyAkeDEgJHkxICR4MiAkeTIKKwkJfSBlbHNlaWYgeyR4YyA8ICR4IC0gMX0geworCQkgICAgbGFwcGVuZCBjb29yZHMgW3hjICRyb3cgW2V4cHIgeyR4LTF9XV0gW3ljICRyb3ddCisJCX0gZWxzZWlmIHskeGMgPiAkeCArIDF9IHsKKwkJICAgIGxhcHBlbmQgY29vcmRzIFt4YyAkcm93IFtleHByIHskeCsxfV1dIFt5YyAkcm93XQorCQl9CisJCXNldCB4ICR4YworCSAgICB9CisJICAgIGxhcHBlbmQgY29vcmRzIFt4YyAkcm93ICR4XSBbeWMgJHJvd10KKwl9IGVsc2UgeworCSAgICBzZXQgeG4gW3hjICRyb3cgJHhwXQorCSAgICBzZXQgeW4gW3ljICRyb3ddCisJICAgIGxhcHBlbmQgY29vcmRzICR4biAkeW4KKwl9CisJaWYgeyEkam9pbmhpZ2h9IHsKKwkgICAgYXNzaWduY29sb3IgJGlkCisJICAgIHNldCB0IFskY2FudiBjcmVhdGUgbGluZSAkY29vcmRzIC13aWR0aCBbbGluZXdpZHRoICRpZF0gXAorCQkgICAgICAgLWZpbGwgJGNvbG9ybWFwKCRpZCkgLXRhZ3MgbGluZXMuJGlkIC1hcnJvdyAkYXJyb3ddCisJICAgICRjYW52IGxvd2VyICR0CisJICAgIGJpbmRsaW5lICR0ICRpZAorCSAgICBzZXQgbGluZXMgW2xpbnNlcnQgJGxpbmVzICRpIFtsaXN0ICRyb3cgJGxlICR0XV0KKwl9IGVsc2UgeworCSAgICAkY2FudiBjb29yZHMgJGl0aCAkY29vcmRzCisJICAgIGlmIHskYXJyb3cgbmUgJGFofSB7CisJCSRjYW52IGl0ZW1jb25mICRpdGggLWFycm93ICRhcnJvdworCSAgICB9CisJICAgIGxzZXQgbGluZXMgJGkgMCAkcm93CisJfQorICAgIH0gZWxzZSB7CisJc2V0IHhvIFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgW2V4cHIgeyRyb3cgLSAxfV1dICRpZF0KKwlzZXQgbmRpciBbZXhwciB7JHhvIC0gJHhwfV0KKwlzZXQgY2xvdyBbJGNhbnYgY29vcmRzICRpdGxdCisJaWYgeyRkaXIgPT0gJG5kaXJ9IHsKKwkgICAgc2V0IGNsb3cgW2xyYW5nZSAkY2xvdyAyIGVuZF0KKwl9CisJc2V0IGNvb3JkcyBbY29uY2F0ICRjb29yZHMgJGNsb3ddCisJaWYgeyEkam9pbmhpZ2h9IHsKKwkgICAgbHNldCBsaW5lcyBbZXhwciB7JGktMX1dIDEgJGxlCisJfSBlbHNlIHsKKwkgICAgIyBjb2FsZXNjZSB0d28gcGllY2VzCisJICAgICRjYW52IGRlbGV0ZSAkaXRoCisJICAgIHNldCBiIFtsaW5kZXggJGxpbmVzIFtleHByIHskaS0xfV0gMF0KKwkgICAgc2V0IGUgW2xpbmRleCAkbGluZXMgJGkgMV0KKwkgICAgc2V0IGxpbmVzIFtscmVwbGFjZSAkbGluZXMgW2V4cHIgeyRpLTF9XSAkaSBbbGlzdCAkYiAkZSAkaXRsXV0KKwl9CisJJGNhbnYgY29vcmRzICRpdGwgJGNvb3JkcworCWlmIHskYXJyb3cgbmUgJGFsfSB7CisJICAgICRjYW52IGl0ZW1jb25mICRpdGwgLWFycm93ICRhcnJvdworCX0KKyAgICB9CisKKyAgICBzZXQgbGluZXNlZ3MoJGlkKSAkbGluZXMKKyAgICByZXR1cm4gJGxlCit9CisKK3Byb2MgZHJhd3BhcmVudGxpbmtzIHtpZCByb3d9IHsKKyAgICBnbG9iYWwgcm93aWRsaXN0IGNhbnYgY29sb3JtYXAgY3VydmlldyBwYXJlbnRsaXN0CisgICAgZ2xvYmFsIGlkcG9zIGxpbmVzcGMKKworICAgIHNldCByb3dpZHMgW2xpbmRleCAkcm93aWRsaXN0ICRyb3ddCisgICAgc2V0IGNvbCBbbHNlYXJjaCAtZXhhY3QgJHJvd2lkcyAkaWRdCisgICAgaWYgeyRjb2wgPCAwfSByZXR1cm4KKyAgICBzZXQgb2xkcyBbbGluZGV4ICRwYXJlbnRsaXN0ICRyb3ddCisgICAgc2V0IHJvdzIgW2V4cHIgeyRyb3cgKyAxfV0KKyAgICBzZXQgeCBbeGMgJHJvdyAkY29sXQorICAgIHNldCB5IFt5YyAkcm93XQorICAgIHNldCB5MiBbeWMgJHJvdzJdCisgICAgc2V0IGQgW2V4cHIge2ludCgwLjUgKiAkbGluZXNwYyl9XQorICAgIHNldCB5bWlkIFtleHByIHskeSArICRkfV0KKyAgICBzZXQgaWRzIFtsaW5kZXggJHJvd2lkbGlzdCAkcm93Ml0KKyAgICAjIHJteCA9IHJpZ2h0LW1vc3QgWCBjb29yZCB1c2VkCisgICAgc2V0IHJteCAwCisgICAgZm9yZWFjaCBwICRvbGRzIHsKKwlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGlkcyAkcF0KKwlpZiB7JGkgPCAwfSB7CisJICAgIHB1dHMgIm9vcHMsIHBhcmVudCAkcCBvZiAkaWQgbm90IGluIGxpc3QiCisJICAgIGNvbnRpbnVlCisJfQorCXNldCB4MiBbeGMgJHJvdzIgJGldCisJaWYgeyR4MiA+ICRybXh9IHsKKwkgICAgc2V0IHJteCAkeDIKKwl9CisJc2V0IGogW2xzZWFyY2ggLWV4YWN0ICRyb3dpZHMgJHBdCisJaWYgeyRqIDwgMH0geworCSAgICAjIGRyYXdsaW5lc2VnIHdpbGwgZG8gdGhpcyBvbmUgZm9yIHVzCisJICAgIGNvbnRpbnVlCisJfQorCWFzc2lnbmNvbG9yICRwCisJIyBzaG91bGQgaGFuZGxlIGR1cGxpY2F0ZWQgcGFyZW50cyBoZXJlLi4uCisJc2V0IGNvb3JkcyBbbGlzdCAkeCAkeV0KKwlpZiB7JGkgIT0gJGNvbH0geworCSAgICAjIGlmIGF0dGFjaGluZyB0byBhIHZlcnRpY2FsIHNlZ21lbnQsIGRyYXcgYSBzbWFsbGVyCisJICAgICMgc2xhbnQgZm9yIHZpc3VhbCBkaXN0aW5jdG5lc3MKKwkgICAgaWYgeyRpID09ICRqfSB7CisJCWlmIHskaSA8ICRjb2x9IHsKKwkJICAgIGxhcHBlbmQgY29vcmRzIFtleHByIHskeDIgKyAkZH1dICR5ICR4MiAkeW1pZAorCQl9IGVsc2UgeworCQkgICAgbGFwcGVuZCBjb29yZHMgW2V4cHIgeyR4MiAtICRkfV0gJHkgJHgyICR5bWlkCisJCX0KKwkgICAgfSBlbHNlaWYgeyRpIDwgJGNvbCAmJiAkaSA8ICRqfSB7CisJCSMgc2VnbWVudCBzbGFudHMgdG93YXJkcyB1cyBhbHJlYWR5CisJCWxhcHBlbmQgY29vcmRzIFt4YyAkcm93ICRqXSAkeQorCSAgICB9IGVsc2UgeworCQlpZiB7JGkgPCAkY29sIC0gMX0geworCQkgICAgbGFwcGVuZCBjb29yZHMgW2V4cHIgeyR4MiArICRsaW5lc3BjfV0gJHkKKwkJfSBlbHNlaWYgeyRpID4gJGNvbCArIDF9IHsKKwkJICAgIGxhcHBlbmQgY29vcmRzIFtleHByIHskeDIgLSAkbGluZXNwY31dICR5CisJCX0KKwkJbGFwcGVuZCBjb29yZHMgJHgyICR5MgorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgbGFwcGVuZCBjb29yZHMgJHgyICR5MgorCX0KKwlzZXQgdCBbJGNhbnYgY3JlYXRlIGxpbmUgJGNvb3JkcyAtd2lkdGggW2xpbmV3aWR0aCAkcF0gXAorCQkgICAtZmlsbCAkY29sb3JtYXAoJHApIC10YWdzIGxpbmVzLiRwXQorCSRjYW52IGxvd2VyICR0CisJYmluZGxpbmUgJHQgJHAKKyAgICB9CisgICAgaWYgeyRybXggPiBbbGluZGV4ICRpZHBvcygkaWQpIDFdfSB7CisJbHNldCBpZHBvcygkaWQpIDEgJHJteAorCXJlZHJhd3RhZ3MgJGlkCisgICAgfQorfQorCitwcm9jIGRyYXdsaW5lcyB7aWR9IHsKKyAgICBnbG9iYWwgY2FudgorCisgICAgJGNhbnYgaXRlbWNvbmYgbGluZXMuJGlkIC13aWR0aCBbbGluZXdpZHRoICRpZF0KK30KKworcHJvYyBkcmF3Y21pdHRleHQge2lkIHJvdyBjb2x9IHsKKyAgICBnbG9iYWwgbGluZXNwYyBjYW52IGNhbnYyIGNhbnYzIGZnY29sb3IgY3VydmlldworICAgIGdsb2JhbCBjbWl0bGlzdGVkIGNvbW1pdGluZm8gcm93aWRsaXN0IHBhcmVudGxpc3QKKyAgICBnbG9iYWwgcm93dGV4dHggaWRwb3MgaWR0YWdzIGlkaGVhZHMgaWRvdGhlcnJlZnMKKyAgICBnbG9iYWwgbGluZWh0YWcgbGluZW50YWcgbGluZWR0YWcgc2VsZWN0ZWRsaW5lCisgICAgZ2xvYmFsIGNhbnZ4bWF4IGJvbGRpZHMgYm9sZG5hbWVpZHMgZmdjb2xvciBtYXJrZWRpZAorICAgIGdsb2JhbCBtYWluaGVhZGlkIG51bGxpZCBudWxsaWQyIGNpcmNsZWl0ZW0gY2lyY2xlY29sb3JzIGN0eGJ1dAorICAgIGdsb2JhbCBtYWluaGVhZGNpcmNsZWNvbG9yIHdvcmtpbmdmaWxlc2NpcmNsZWNvbG9yIGluZGV4Y2lyY2xlY29sb3IKKyAgICBnbG9iYWwgY2lyY2xlb3V0bGluZWNvbG9yCisKKyAgICAjIGxpc3RlZCBpcyAwIGZvciBib3VuZGFyeSwgMSBmb3Igbm9ybWFsLCAyIGZvciBuZWdhdGl2ZSwgMyBmb3IgbGVmdCwgNCBmb3IgcmlnaHQKKyAgICBzZXQgbGlzdGVkICRjbWl0bGlzdGVkKCRjdXJ2aWV3LCRpZCkKKyAgICBpZiB7JGlkIGVxICRudWxsaWR9IHsKKwlzZXQgb2ZpbGwgJHdvcmtpbmdmaWxlc2NpcmNsZWNvbG9yCisgICAgfSBlbHNlaWYgeyRpZCBlcSAkbnVsbGlkMn0geworCXNldCBvZmlsbCAkaW5kZXhjaXJjbGVjb2xvcgorICAgIH0gZWxzZWlmIHskaWQgZXEgJG1haW5oZWFkaWR9IHsKKwlzZXQgb2ZpbGwgJG1haW5oZWFkY2lyY2xlY29sb3IKKyAgICB9IGVsc2UgeworCXNldCBvZmlsbCBbbGluZGV4ICRjaXJjbGVjb2xvcnMgJGxpc3RlZF0KKyAgICB9CisgICAgc2V0IHggW3hjICRyb3cgJGNvbF0KKyAgICBzZXQgeSBbeWMgJHJvd10KKyAgICBzZXQgb3JhZCBbZXhwciB7JGxpbmVzcGMgLyAzfV0KKyAgICBpZiB7JGxpc3RlZCA8PSAyfSB7CisJc2V0IHQgWyRjYW52IGNyZWF0ZSBvdmFsIFtleHByIHskeCAtICRvcmFkfV0gW2V4cHIgeyR5IC0gJG9yYWR9XSBcCisJCSAgIFtleHByIHskeCArICRvcmFkIC0gMX1dIFtleHByIHskeSArICRvcmFkIC0gMX1dIFwKKwkJICAgLWZpbGwgJG9maWxsIC1vdXRsaW5lICRjaXJjbGVvdXRsaW5lY29sb3IgLXdpZHRoIDEgLXRhZ3MgY2lyY2xlXQorICAgIH0gZWxzZWlmIHskbGlzdGVkID09IDN9IHsKKwkjIHRyaWFuZ2xlIHBvaW50aW5nIGxlZnQgZm9yIGxlZnQtc2lkZSBjb21taXRzCisJc2V0IHQgWyRjYW52IGNyZWF0ZSBwb2x5Z29uIFwKKwkJICAgW2V4cHIgeyR4IC0gJG9yYWR9XSAkeSBcCisJCSAgIFtleHByIHskeCArICRvcmFkIC0gMX1dIFtleHByIHskeSAtICRvcmFkfV0gXAorCQkgICBbZXhwciB7JHggKyAkb3JhZCAtIDF9XSBbZXhwciB7JHkgKyAkb3JhZCAtIDF9XSBcCisJCSAgIC1maWxsICRvZmlsbCAtb3V0bGluZSAkY2lyY2xlb3V0bGluZWNvbG9yIC13aWR0aCAxIC10YWdzIGNpcmNsZV0KKyAgICB9IGVsc2UgeworCSMgdHJpYW5nbGUgcG9pbnRpbmcgcmlnaHQgZm9yIHJpZ2h0LXNpZGUgY29tbWl0cworCXNldCB0IFskY2FudiBjcmVhdGUgcG9seWdvbiBcCisJCSAgIFtleHByIHskeCArICRvcmFkIC0gMX1dICR5IFwKKwkJICAgW2V4cHIgeyR4IC0gJG9yYWR9XSBbZXhwciB7JHkgLSAkb3JhZH1dIFwKKwkJICAgW2V4cHIgeyR4IC0gJG9yYWR9XSBbZXhwciB7JHkgKyAkb3JhZCAtIDF9XSBcCisJCSAgIC1maWxsICRvZmlsbCAtb3V0bGluZSAkY2lyY2xlb3V0bGluZWNvbG9yIC13aWR0aCAxIC10YWdzIGNpcmNsZV0KKyAgICB9CisgICAgc2V0IGNpcmNsZWl0ZW0oJHJvdykgJHQKKyAgICAkY2FudiByYWlzZSAkdAorICAgICRjYW52IGJpbmQgJHQgPDE+IHtzZWxjYW52bGluZSB7fSAleCAleX0KKyAgICBzZXQgcm14IFtsbGVuZ3RoIFtsaW5kZXggJHJvd2lkbGlzdCAkcm93XV0KKyAgICBzZXQgb2xkcyBbbGluZGV4ICRwYXJlbnRsaXN0ICRyb3ddCisgICAgaWYgeyRvbGRzIG5lIHt9fSB7CisJc2V0IG5leHRpZHMgW2xpbmRleCAkcm93aWRsaXN0IFtleHByIHskcm93ICsgMX1dXQorCWZvcmVhY2ggcCAkb2xkcyB7CisJICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkbmV4dGlkcyAkcF0KKwkgICAgaWYgeyRpID4gJHJteH0geworCQlzZXQgcm14ICRpCisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCB4dCBbeGMgJHJvdyAkcm14XQorICAgIHNldCByb3d0ZXh0eCgkcm93KSAkeHQKKyAgICBzZXQgaWRwb3MoJGlkKSBbbGlzdCAkeCAkeHQgJHldCisgICAgaWYge1tpbmZvIGV4aXN0cyBpZHRhZ3MoJGlkKV0gfHwgW2luZm8gZXhpc3RzIGlkaGVhZHMoJGlkKV0KKwl8fCBbaW5mbyBleGlzdHMgaWRvdGhlcnJlZnMoJGlkKV19IHsKKwlzZXQgeHQgW2RyYXd0YWdzICRpZCAkeCAkeHQgJHldCisgICAgfQorICAgIGlmIHtbbGluZGV4ICRjb21taXRpbmZvKCRpZCkgNl0gPiAwfSB7CisJc2V0IHh0IFtkcmF3bm90ZXNpZ24gJHh0ICR5XQorICAgIH0KKyAgICBzZXQgaGVhZGxpbmUgW2xpbmRleCAkY29tbWl0aW5mbygkaWQpIDBdCisgICAgc2V0IG5hbWUgW2xpbmRleCAkY29tbWl0aW5mbygkaWQpIDFdCisgICAgc2V0IGRhdGUgW2xpbmRleCAkY29tbWl0aW5mbygkaWQpIDJdCisgICAgc2V0IGRhdGUgW2Zvcm1hdGRhdGUgJGRhdGVdCisgICAgc2V0IGZvbnQgbWFpbmZvbnQKKyAgICBzZXQgbmZvbnQgbWFpbmZvbnQKKyAgICBzZXQgaXNib2xkIFtpc2hpZ2hsaWdodGVkICRpZF0KKyAgICBpZiB7JGlzYm9sZCA+IDB9IHsKKwlsYXBwZW5kIGJvbGRpZHMgJGlkCisJc2V0IGZvbnQgbWFpbmZvbnRib2xkCisJaWYgeyRpc2JvbGQgPiAxfSB7CisJICAgIGxhcHBlbmQgYm9sZG5hbWVpZHMgJGlkCisJICAgIHNldCBuZm9udCBtYWluZm9udGJvbGQKKwl9CisgICAgfQorICAgIHNldCBsaW5laHRhZygkaWQpIFskY2FudiBjcmVhdGUgdGV4dCAkeHQgJHkgLWFuY2hvciB3IC1maWxsICRmZ2NvbG9yIFwKKwkJCSAgIC10ZXh0ICRoZWFkbGluZSAtZm9udCAkZm9udCAtdGFncyB0ZXh0XQorICAgICRjYW52IGJpbmQgJGxpbmVodGFnKCRpZCkgJGN0eGJ1dCAicm93bWVudSAlWCAlWSAkaWQiCisgICAgc2V0IGxpbmVudGFnKCRpZCkgWyRjYW52MiBjcmVhdGUgdGV4dCAzICR5IC1hbmNob3IgdyAtZmlsbCAkZmdjb2xvciBcCisJCQkgICAtdGV4dCAkbmFtZSAtZm9udCAkbmZvbnQgLXRhZ3MgdGV4dF0KKyAgICBzZXQgbGluZWR0YWcoJGlkKSBbJGNhbnYzIGNyZWF0ZSB0ZXh0IDMgJHkgLWFuY2hvciB3IC1maWxsICRmZ2NvbG9yIFwKKwkJCSAgIC10ZXh0ICRkYXRlIC1mb250IG1haW5mb250IC10YWdzIHRleHRdCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgPT0gJHJvd30geworCW1ha2Vfc2Vjc2VsICRpZAorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIG1hcmtlZGlkXSAmJiAkbWFya2VkaWQgZXEgJGlkfSB7CisJbWFrZV9pZG1hcmsgJGlkCisgICAgfQorICAgIHNldCB4ciBbZXhwciB7JHh0ICsgW2ZvbnQgbWVhc3VyZSAkZm9udCAkaGVhZGxpbmVdfV0KKyAgICBpZiB7JHhyID4gJGNhbnZ4bWF4fSB7CisJc2V0IGNhbnZ4bWF4ICR4cgorCXNldGNhbnZzY3JvbGwKKyAgICB9Cit9CisKK3Byb2MgZHJhd2NtaXRyb3cge3Jvd30geworICAgIGdsb2JhbCBkaXNwbGF5b3JkZXIgcm93aWRsaXN0IG5yb3dzX2RyYXduCisgICAgZ2xvYmFsIGlkZHJhd24gbWFya2luZ21hdGNoZXMKKyAgICBnbG9iYWwgY29tbWl0aW5mbyBudW1jb21taXRzCisgICAgZ2xvYmFsIGZpbGVoaWdobGlnaHQgZmhpZ2hsaWdodHMgZmluZHBhdHRlcm4gbmhpZ2hsaWdodHMKKyAgICBnbG9iYWwgaGx2aWV3IHZoaWdobGlnaHRzCisgICAgZ2xvYmFsIGhpZ2hsaWdodF9yZWxhdGVkIHJoaWdobGlnaHRzCisKKyAgICBpZiB7JHJvdyA+PSAkbnVtY29tbWl0c30gcmV0dXJuCisKKyAgICBzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCisgICAgaWYge1tpbmZvIGV4aXN0cyBobHZpZXddICYmICFbaW5mbyBleGlzdHMgdmhpZ2hsaWdodHMoJGlkKV19IHsKKwlhc2t2aGlnaGxpZ2h0ICRyb3cgJGlkCisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgZmlsZWhpZ2hsaWdodF0gJiYgIVtpbmZvIGV4aXN0cyBmaGlnaGxpZ2h0cygkaWQpXX0geworCWFza2ZpbGVoaWdobGlnaHQgJHJvdyAkaWQKKyAgICB9CisgICAgaWYgeyRmaW5kcGF0dGVybiBuZSB7fSAmJiAhW2luZm8gZXhpc3RzIG5oaWdobGlnaHRzKCRpZCldfSB7CisJYXNrZmluZGhpZ2hsaWdodCAkcm93ICRpZAorICAgIH0KKyAgICBpZiB7JGhpZ2hsaWdodF9yZWxhdGVkIG5lIFttYyAiTm9uZSJdICYmICFbaW5mbyBleGlzdHMgcmhpZ2hsaWdodHMoJGlkKV19IHsKKwlhc2tyZWxoaWdobGlnaHQgJHJvdyAkaWQKKyAgICB9CisgICAgaWYgeyFbaW5mbyBleGlzdHMgaWRkcmF3bigkaWQpXX0geworCXNldCBjb2wgW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcm93XSAkaWRdCisJaWYgeyRjb2wgPCAwfSB7CisJICAgIHB1dHMgIm9vcHMsIHJvdyAkcm93IGlkICRpZCBub3QgaW4gbGlzdCIKKwkgICAgcmV0dXJuCisJfQorCWlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGluZm8oJGlkKV19IHsKKwkgICAgZ2V0Y29tbWl0ICRpZAorCX0KKwlhc3NpZ25jb2xvciAkaWQKKwlkcmF3Y21pdHRleHQgJGlkICRyb3cgJGNvbAorCXNldCBpZGRyYXduKCRpZCkgMQorCWluY3IgbnJvd3NfZHJhd24KKyAgICB9CisgICAgaWYgeyRtYXJraW5nbWF0Y2hlc30geworCW1hcmtyb3dtYXRjaGVzICRyb3cgJGlkCisgICAgfQorfQorCitwcm9jIGRyYXdjb21taXRzIHtyb3cge2VuZHJvdyB7fX19IHsKKyAgICBnbG9iYWwgbnVtY29tbWl0cyBpZGRyYXduIGRpc3BsYXlvcmRlciBjdXJ2aWV3IG5lZWRfcmVkaXNwbGF5CisgICAgZ2xvYmFsIHBhcmVudGxpc3Qgcm93aWRsaXN0IHJvd2ZpbmFsIHVwYXJyb3dsZW4gZG93bmFycm93bGVuIG5yb3dzX2RyYXduCisKKyAgICBpZiB7JHJvdyA8IDB9IHsKKwlzZXQgcm93IDAKKyAgICB9CisgICAgaWYgeyRlbmRyb3cgZXEge319IHsKKwlzZXQgZW5kcm93ICRyb3cKKyAgICB9CisgICAgaWYgeyRlbmRyb3cgPj0gJG51bWNvbW1pdHN9IHsKKwlzZXQgZW5kcm93IFtleHByIHskbnVtY29tbWl0cyAtIDF9XQorICAgIH0KKworICAgIHNldCBybDEgW2V4cHIgeyRyb3cgLSAkZG93bmFycm93bGVuIC0gM31dCisgICAgaWYgeyRybDEgPCAwfSB7CisJc2V0IHJsMSAwCisgICAgfQorICAgIHNldCBybzEgW2V4cHIgeyRyb3cgLSAzfV0KKyAgICBpZiB7JHJvMSA8IDB9IHsKKwlzZXQgcm8xIDAKKyAgICB9CisgICAgc2V0IHIyIFtleHByIHskZW5kcm93ICsgJHVwYXJyb3dsZW4gKyAzfV0KKyAgICBpZiB7JHIyID4gJG51bWNvbW1pdHN9IHsKKwlzZXQgcjIgJG51bWNvbW1pdHMKKyAgICB9CisgICAgZm9yIHtzZXQgciAkcmwxfSB7JHIgPCAkcjJ9IHtpbmNyIHJ9IHsKKwlpZiB7W2xpbmRleCAkcm93aWRsaXN0ICRyXSBuZSB7fSAmJiBbbGluZGV4ICRyb3dmaW5hbCAkcl19IHsKKwkgICAgaWYgeyRybDEgPCAkcn0geworCQlsYXlvdXRyb3dzICRybDEgJHIKKwkgICAgfQorCSAgICBzZXQgcmwxIFtleHByIHskciArIDF9XQorCX0KKyAgICB9CisgICAgaWYgeyRybDEgPCAkcn0geworCWxheW91dHJvd3MgJHJsMSAkcgorICAgIH0KKyAgICBvcHRpbWl6ZV9yb3dzICRybzEgMCAkcjIKKyAgICBpZiB7JG5lZWRfcmVkaXNwbGF5IHx8ICRucm93c19kcmF3biA+IDIwMDB9IHsKKwljbGVhcl9kaXNwbGF5CisgICAgfQorCisgICAgIyBtYWtlIHRoZSBsaW5lcyBqb2luIHRvIGFscmVhZHktZHJhd24gcm93cyBlaXRoZXIgc2lkZQorICAgIHNldCByIFtleHByIHskcm93IC0gMX1dCisgICAgaWYgeyRyIDwgMCB8fCAhW2luZm8gZXhpc3RzIGlkZHJhd24oW2xpbmRleCAkZGlzcGxheW9yZGVyICRyXSldfSB7CisJc2V0IHIgJHJvdworICAgIH0KKyAgICBzZXQgZXIgW2V4cHIgeyRlbmRyb3cgKyAxfV0KKyAgICBpZiB7JGVyID49ICRudW1jb21taXRzIHx8CisJIVtpbmZvIGV4aXN0cyBpZGRyYXduKFtsaW5kZXggJGRpc3BsYXlvcmRlciAkZXJdKV19IHsKKwlzZXQgZXIgJGVuZHJvdworICAgIH0KKyAgICBmb3Ige30geyRyIDw9ICRlcn0ge2luY3Igcn0geworCXNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJdCisJc2V0IHdhc2RyYXduIFtpbmZvIGV4aXN0cyBpZGRyYXduKCRpZCldCisJZHJhd2NtaXRyb3cgJHIKKwlpZiB7JHIgPT0gJGVyfSBicmVhaworCXNldCBuZXh0aWQgW2xpbmRleCAkZGlzcGxheW9yZGVyIFtleHByIHskciArIDF9XV0KKwlpZiB7JHdhc2RyYXduICYmIFtpbmZvIGV4aXN0cyBpZGRyYXduKCRuZXh0aWQpXX0gY29udGludWUKKwlkcmF3cGFyZW50bGlua3MgJGlkICRyCisKKwlzZXQgcm93aWRzIFtsaW5kZXggJHJvd2lkbGlzdCAkcl0KKwlmb3JlYWNoIGxpZCAkcm93aWRzIHsKKwkgICAgaWYgeyRsaWQgZXEge319IGNvbnRpbnVlCisJICAgIGlmIHtbaW5mbyBleGlzdHMgbGluZWVuZCgkbGlkKV0gJiYgJGxpbmVlbmQoJGxpZCkgPiAkcn0gY29udGludWUKKwkgICAgaWYgeyRsaWQgZXEgJGlkfSB7CisJCSMgc2VlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGNoaWxkIG9mIGFueSBvZiBpdHMgcGFyZW50cworCQlmb3JlYWNoIHAgW2xpbmRleCAkcGFyZW50bGlzdCAkcl0geworCQkgICAgaWYge1tsc2VhcmNoIC1leGFjdCAkcm93aWRzICRwXSA8IDB9IHsKKwkJCSMgbWFrZSB0aGlzIGxpbmUgZXh0ZW5kIHVwIHRvIHRoZSBjaGlsZAorCQkJc2V0IGxpbmVlbmQoJHApIFtkcmF3bGluZXNlZyAkcCAkciAkZXIgMF0KKwkJICAgIH0KKwkJfQorCSAgICB9IGVsc2UgeworCQlzZXQgbGluZWVuZCgkbGlkKSBbZHJhd2xpbmVzZWcgJGxpZCAkciAkZXIgMV0KKwkgICAgfQorCX0KKyAgICB9Cit9CisKK3Byb2MgdW5kb2xheW91dCB7cm93fSB7CisgICAgZ2xvYmFsIHVwYXJyb3dsZW4gbWluZ2FwbGVuIGRvd25hcnJvd2xlbgorICAgIGdsb2JhbCByb3dpZGxpc3Qgcm93aXNvcHQgcm93ZmluYWwgbmVlZF9yZWRpc3BsYXkKKworICAgIHNldCByIFtleHByIHskcm93IC0gKCR1cGFycm93bGVuICsgJG1pbmdhcGxlbiArICRkb3duYXJyb3dsZW4pfV0KKyAgICBpZiB7JHIgPCAwfSB7CisJc2V0IHIgMAorICAgIH0KKyAgICBpZiB7W2xsZW5ndGggJHJvd2lkbGlzdF0gPiAkcn0geworCWluY3IgciAtMQorCXNldCByb3dpZGxpc3QgW2xyYW5nZSAkcm93aWRsaXN0IDAgJHJdCisJc2V0IHJvd2ZpbmFsIFtscmFuZ2UgJHJvd2ZpbmFsIDAgJHJdCisJc2V0IHJvd2lzb3B0IFtscmFuZ2UgJHJvd2lzb3B0IDAgJHJdCisJc2V0IG5lZWRfcmVkaXNwbGF5IDEKKwlydW4gZHJhd3Zpc2libGUKKyAgICB9Cit9CisKK3Byb2MgZHJhd3Zpc2libGUge30geworICAgIGdsb2JhbCBjYW52IGxpbmVzcGMgY3VydmlldyB2cm93bW9kIHNlbGVjdGVkbGluZSB0YXJnZXRyb3cgdGFyZ2V0aWQKKyAgICBnbG9iYWwgbmVlZF9yZWRpc3BsYXkgY3Njcm9sbCBudW1jb21taXRzCisKKyAgICBzZXQgZnMgWyRjYW52IHl2aWV3XQorICAgIHNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKyAgICBpZiB7JHltYXggZXEge30gfHwgJHltYXggPT0gMCB8fCAkbnVtY29tbWl0cyA9PSAwfSByZXR1cm4KKyAgICBzZXQgZjAgW2xpbmRleCAkZnMgMF0KKyAgICBzZXQgZjEgW2xpbmRleCAkZnMgMV0KKyAgICBzZXQgeTAgW2V4cHIge2ludCgkZjAgKiAkeW1heCl9XQorICAgIHNldCB5MSBbZXhwciB7aW50KCRmMSAqICR5bWF4KX1dCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIHRhcmdldGlkXX0geworCWlmIHtbY29tbWl0aW52aWV3ICR0YXJnZXRpZCAkY3Vydmlld119IHsKKwkgICAgc2V0IHIgW3Jvd29mY29tbWl0ICR0YXJnZXRpZF0KKwkgICAgaWYgeyRyICE9ICR0YXJnZXRyb3d9IHsKKwkJIyBGaXggdXAgdGhlIHNjcm9sbHJlZ2lvbiBhbmQgY2hhbmdlIHRoZSBzY3JvbGxpbmcgcG9zaXRpb24KKwkJIyBub3cgdGhhdCBvdXIgdGFyZ2V0IHJvdyBoYXMgbW92ZWQuCisJCXNldCBkaWZmIFtleHByIHsoJHIgLSAkdGFyZ2V0cm93KSAqICRsaW5lc3BjfV0KKwkJc2V0IHRhcmdldHJvdyAkcgorCQlzZXRjYW52c2Nyb2xsCisJCXNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKwkJaW5jciB5MCAkZGlmZgorCQlpbmNyIHkxICRkaWZmCisJCXNldCBmMCBbZXhwciB7JHkwIC8gJHltYXh9XQorCQlzZXQgZjEgW2V4cHIgeyR5MSAvICR5bWF4fV0KKwkJYWxsY2FudnMgeXZpZXcgbW92ZXRvICRmMAorCQkkY3Njcm9sbCBzZXQgJGYwICRmMQorCQlzZXQgbmVlZF9yZWRpc3BsYXkgMQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgdW5zZXQgdGFyZ2V0aWQKKwl9CisgICAgfQorCisgICAgc2V0IHJvdyBbZXhwciB7aW50KCgkeTAgLSAzKSAvICRsaW5lc3BjKSAtIDF9XQorICAgIHNldCBlbmRyb3cgW2V4cHIge2ludCgoJHkxIC0gMykgLyAkbGluZXNwYykgKyAxfV0KKyAgICBpZiB7JGVuZHJvdyA+PSAkdnJvd21vZCgkY3Vydmlldyl9IHsKKwl1cGRhdGVfYXJjcm93cyAkY3VydmlldworICAgIH0KKyAgICBpZiB7JHNlbGVjdGVkbGluZSBuZSB7fSAmJgorCSRyb3cgPD0gJHNlbGVjdGVkbGluZSAmJiAkc2VsZWN0ZWRsaW5lIDw9ICRlbmRyb3d9IHsKKwlzZXQgdGFyZ2V0cm93ICRzZWxlY3RlZGxpbmUKKyAgICB9IGVsc2VpZiB7W2luZm8gZXhpc3RzIHRhcmdldGlkXX0geworCXNldCB0YXJnZXRyb3cgW2V4cHIge2ludCgoJHJvdyArICRlbmRyb3cpIC8gMil9XQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIHRhcmdldHJvd119IHsKKwlpZiB7JHRhcmdldHJvdyA+PSAkbnVtY29tbWl0c30geworCSAgICBzZXQgdGFyZ2V0cm93IFtleHByIHskbnVtY29tbWl0cyAtIDF9XQorCX0KKwlzZXQgdGFyZ2V0aWQgW2NvbW1pdG9ucm93ICR0YXJnZXRyb3ddCisgICAgfQorICAgIGRyYXdjb21taXRzICRyb3cgJGVuZHJvdworfQorCitwcm9jIGNsZWFyX2Rpc3BsYXkge30geworICAgIGdsb2JhbCBpZGRyYXduIGxpbmVzZWdzIG5lZWRfcmVkaXNwbGF5IG5yb3dzX2RyYXduCisgICAgZ2xvYmFsIHZoaWdobGlnaHRzIGZoaWdobGlnaHRzIG5oaWdobGlnaHRzIHJoaWdobGlnaHRzCisgICAgZ2xvYmFsIGxpbmVodGFnIGxpbmVudGFnIGxpbmVkdGFnIGJvbGRpZHMgYm9sZG5hbWVpZHMKKworICAgIGFsbGNhbnZzIGRlbGV0ZSBhbGwKKyAgICB1bnNldCAtbm9jb21wbGFpbiBpZGRyYXduCisgICAgdW5zZXQgLW5vY29tcGxhaW4gbGluZXNlZ3MKKyAgICB1bnNldCAtbm9jb21wbGFpbiBsaW5laHRhZworICAgIHVuc2V0IC1ub2NvbXBsYWluIGxpbmVudGFnCisgICAgdW5zZXQgLW5vY29tcGxhaW4gbGluZWR0YWcKKyAgICBzZXQgYm9sZGlkcyB7fQorICAgIHNldCBib2xkbmFtZWlkcyB7fQorICAgIHVuc2V0IC1ub2NvbXBsYWluIHZoaWdobGlnaHRzCisgICAgdW5zZXQgLW5vY29tcGxhaW4gZmhpZ2hsaWdodHMKKyAgICB1bnNldCAtbm9jb21wbGFpbiBuaGlnaGxpZ2h0cworICAgIHVuc2V0IC1ub2NvbXBsYWluIHJoaWdobGlnaHRzCisgICAgc2V0IG5lZWRfcmVkaXNwbGF5IDAKKyAgICBzZXQgbnJvd3NfZHJhd24gMAorfQorCitwcm9jIGZpbmRjcm9zc2luZ3Mge2lkfSB7CisgICAgZ2xvYmFsIHJvd2lkbGlzdCBwYXJlbnRsaXN0IG51bWNvbW1pdHMgZGlzcGxheW9yZGVyCisKKyAgICBzZXQgY3Jvc3Mge30KKyAgICBzZXQgY2Nyb3NzIHt9CisgICAgZm9yZWFjaCB7cyBlfSBbcm93cmFuZ2VzICRpZF0geworCWlmIHskZSA+PSAkbnVtY29tbWl0c30geworCSAgICBzZXQgZSBbZXhwciB7JG51bWNvbW1pdHMgLSAxfV0KKwl9CisJaWYgeyRlIDw9ICRzfSBjb250aW51ZQorCWZvciB7c2V0IHJvdyAkZX0ge1tpbmNyIHJvdyAtMV0gPj0gJHN9IHt9IHsKKwkgICAgc2V0IHggW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcm93XSAkaWRdCisJICAgIGlmIHskeCA8IDB9IGJyZWFrCisJICAgIHNldCBvbGRzIFtsaW5kZXggJHBhcmVudGxpc3QgJHJvd10KKwkgICAgc2V0IGtpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJvd10KKwkgICAgc2V0IGtpZHggW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcm93XSAka2lkXQorCSAgICBpZiB7JGtpZHggPCAwfSBjb250aW51ZQorCSAgICBzZXQgbmV4dHJvdyBbbGluZGV4ICRyb3dpZGxpc3QgW2V4cHIgeyRyb3cgKyAxfV1dCisJICAgIGZvcmVhY2ggcCAkb2xkcyB7CisJCXNldCBweCBbbHNlYXJjaCAtZXhhY3QgJG5leHRyb3cgJHBdCisJCWlmIHskcHggPCAwfSBjb250aW51ZQorCQlpZiB7KCRraWR4IDwgJHggJiYgJHggPCAkcHgpIHx8ICgkcHggPCAkeCAmJiAkeCA8ICRraWR4KX0geworCQkgICAgaWYge1tsc2VhcmNoIC1leGFjdCAkY2Nyb3NzICRwXSA+PSAwfSBjb250aW51ZQorCQkgICAgaWYgeyR4ID09ICRweCArICgka2lkeCA8ICRweD8gLTE6IDEpfSB7CisJCQlsYXBwZW5kIGNjcm9zcyAkcAorCQkgICAgfSBlbHNlaWYge1tsc2VhcmNoIC1leGFjdCAkY3Jvc3MgJHBdIDwgMH0geworCQkJbGFwcGVuZCBjcm9zcyAkcAorCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiBbY29uY2F0ICRjY3Jvc3Mge3t9fSAkY3Jvc3NdCit9CisKK3Byb2MgYXNzaWduY29sb3Ige2lkfSB7CisgICAgZ2xvYmFsIGNvbG9ybWFwIGNvbG9ycyBuZXh0Y29sb3IKKyAgICBnbG9iYWwgcGFyZW50cyBjaGlsZHJlbiBjaGlsZHJlbiBjdXJ2aWV3CisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGNvbG9ybWFwKCRpZCldfSByZXR1cm4KKyAgICBzZXQgbmNvbG9ycyBbbGxlbmd0aCAkY29sb3JzXQorICAgIGlmIHtbaW5mbyBleGlzdHMgY2hpbGRyZW4oJGN1cnZpZXcsJGlkKV19IHsKKwlzZXQga2lkcyAkY2hpbGRyZW4oJGN1cnZpZXcsJGlkKQorICAgIH0gZWxzZSB7CisJc2V0IGtpZHMge30KKyAgICB9CisgICAgaWYge1tsbGVuZ3RoICRraWRzXSA9PSAxfSB7CisJc2V0IGNoaWxkIFtsaW5kZXggJGtpZHMgMF0KKwlpZiB7W2luZm8gZXhpc3RzIGNvbG9ybWFwKCRjaGlsZCldCisJICAgICYmIFtsbGVuZ3RoICRwYXJlbnRzKCRjdXJ2aWV3LCRjaGlsZCldID09IDF9IHsKKwkgICAgc2V0IGNvbG9ybWFwKCRpZCkgJGNvbG9ybWFwKCRjaGlsZCkKKwkgICAgcmV0dXJuCisJfQorICAgIH0KKyAgICBzZXQgYmFkY29sb3JzIHt9CisgICAgc2V0IG9yaWdiYWQge30KKyAgICBmb3JlYWNoIHggW2ZpbmRjcm9zc2luZ3MgJGlkXSB7CisJaWYgeyR4IGVxIHt9fSB7CisJICAgICMgZGVsaW1pdGVyIGJldHdlZW4gY29ybmVyIGNyb3NzaW5ncyBhbmQgb3RoZXIgY3Jvc3NpbmdzCisJICAgIGlmIHtbbGxlbmd0aCAkYmFkY29sb3JzXSA+PSAkbmNvbG9ycyAtIDF9IGJyZWFrCisJICAgIHNldCBvcmlnYmFkICRiYWRjb2xvcnMKKwl9CisJaWYge1tpbmZvIGV4aXN0cyBjb2xvcm1hcCgkeCldCisJICAgICYmIFtsc2VhcmNoIC1leGFjdCAkYmFkY29sb3JzICRjb2xvcm1hcCgkeCldIDwgMH0geworCSAgICBsYXBwZW5kIGJhZGNvbG9ycyAkY29sb3JtYXAoJHgpCisJfQorICAgIH0KKyAgICBpZiB7W2xsZW5ndGggJGJhZGNvbG9yc10gPj0gJG5jb2xvcnN9IHsKKwlzZXQgYmFkY29sb3JzICRvcmlnYmFkCisgICAgfQorICAgIHNldCBvcmlnYmFkICRiYWRjb2xvcnMKKyAgICBpZiB7W2xsZW5ndGggJGJhZGNvbG9yc10gPCAkbmNvbG9ycyAtIDF9IHsKKwlmb3JlYWNoIGNoaWxkICRraWRzIHsKKwkgICAgaWYge1tpbmZvIGV4aXN0cyBjb2xvcm1hcCgkY2hpbGQpXQorCQkmJiBbbHNlYXJjaCAtZXhhY3QgJGJhZGNvbG9ycyAkY29sb3JtYXAoJGNoaWxkKV0gPCAwfSB7CisJCWxhcHBlbmQgYmFkY29sb3JzICRjb2xvcm1hcCgkY2hpbGQpCisJICAgIH0KKwkgICAgZm9yZWFjaCBwICRwYXJlbnRzKCRjdXJ2aWV3LCRjaGlsZCkgeworCQlpZiB7W2luZm8gZXhpc3RzIGNvbG9ybWFwKCRwKV0KKwkJICAgICYmIFtsc2VhcmNoIC1leGFjdCAkYmFkY29sb3JzICRjb2xvcm1hcCgkcCldIDwgMH0geworCQkgICAgbGFwcGVuZCBiYWRjb2xvcnMgJGNvbG9ybWFwKCRwKQorCQl9CisJICAgIH0KKwl9CisJaWYge1tsbGVuZ3RoICRiYWRjb2xvcnNdID49ICRuY29sb3JzfSB7CisJICAgIHNldCBiYWRjb2xvcnMgJG9yaWdiYWQKKwl9CisgICAgfQorICAgIGZvciB7c2V0IGkgMH0geyRpIDw9ICRuY29sb3JzfSB7aW5jciBpfSB7CisJc2V0IGMgW2xpbmRleCAkY29sb3JzICRuZXh0Y29sb3JdCisJaWYge1tpbmNyIG5leHRjb2xvcl0gPj0gJG5jb2xvcnN9IHsKKwkgICAgc2V0IG5leHRjb2xvciAwCisJfQorCWlmIHtbbHNlYXJjaCAtZXhhY3QgJGJhZGNvbG9ycyAkY119IGJyZWFrCisgICAgfQorICAgIHNldCBjb2xvcm1hcCgkaWQpICRjCit9CisKK3Byb2MgYmluZGxpbmUge3QgaWR9IHsKKyAgICBnbG9iYWwgY2FudgorCisgICAgJGNhbnYgYmluZCAkdCA8RW50ZXI+ICJsaW5lZW50ZXIgJXggJXkgJGlkIgorICAgICRjYW52IGJpbmQgJHQgPE1vdGlvbj4gImxpbmVtb3Rpb24gJXggJXkgJGlkIgorICAgICRjYW52IGJpbmQgJHQgPExlYXZlPiAibGluZWxlYXZlICRpZCIKKyAgICAkY2FudiBiaW5kICR0IDxCdXR0b24tMT4gImxpbmVjbGljayAleCAleSAkaWQgMSIKK30KKworcHJvYyBncmFwaF9wYW5lX3dpZHRoIHt9IHsKKyAgICBnbG9iYWwgdXNlX3R0aworCisgICAgaWYgeyR1c2VfdHRrfSB7CisJc2V0IGcgWy50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNocG9zIDBdCisgICAgfSBlbHNlIHsKKwlzZXQgZyBbLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2ggY29vcmQgMF0KKyAgICB9CisgICAgcmV0dXJuIFtsaW5kZXggJGcgMF0KK30KKworcHJvYyB0b3RhbHdpZHRoIHtsIGZvbnQgZXh0cmF9IHsKKyAgICBzZXQgdG90IDAKKyAgICBmb3JlYWNoIHN0ciAkbCB7CisJc2V0IHRvdCBbZXhwciB7JHRvdCArIFtmb250IG1lYXN1cmUgJGZvbnQgJHN0cl0gKyAkZXh0cmF9XQorICAgIH0KKyAgICByZXR1cm4gJHRvdAorfQorCitwcm9jIGRyYXd0YWdzIHtpZCB4IHh0IHkxfSB7CisgICAgZ2xvYmFsIGlkdGFncyBpZGhlYWRzIGlkb3RoZXJyZWZzIG1haW5oZWFkCisgICAgZ2xvYmFsIGxpbmVzcGMgbHRoaWNrbmVzcworICAgIGdsb2JhbCBjYW52IHJvd3RleHR4IGN1cnZpZXcgZmdjb2xvciBiZ2NvbG9yIGN0eGJ1dAorICAgIGdsb2JhbCBoZWFkYmdjb2xvciBoZWFkZmdjb2xvciBoZWFkb3V0bGluZWNvbG9yIHJlbW90ZWJnY29sb3IKKyAgICBnbG9iYWwgdGFnYmdjb2xvciB0YWdmZ2NvbG9yIHRhZ291dGxpbmVjb2xvcgorICAgIGdsb2JhbCByZWZsaW5lY29sb3IKKworICAgIHNldCBtYXJrcyB7fQorICAgIHNldCBudGFncyAwCisgICAgc2V0IG5oZWFkcyAwCisgICAgc2V0IHNpbmdsZXRhZyAwCisgICAgc2V0IG1heHRhZ3MgMworICAgIHNldCBtYXh0YWdwY3QgMjUKKyAgICBzZXQgbWF4d2lkdGggW2V4cHIge1tncmFwaF9wYW5lX3dpZHRoXSAqICRtYXh0YWdwY3QgLyAxMDB9XQorICAgIHNldCBkZWx0YSBbZXhwciB7aW50KDAuNSAqICgkbGluZXNwYyAtICRsdGhpY2tuZXNzKSl9XQorICAgIHNldCBleHRyYSBbZXhwciB7JGRlbHRhICsgJGx0aGlja25lc3MgKyAkbGluZXNwY31dCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGlkdGFncygkaWQpXX0geworCXNldCBtYXJrcyAkaWR0YWdzKCRpZCkKKwlzZXQgbnRhZ3MgW2xsZW5ndGggJG1hcmtzXQorCWlmIHskbnRhZ3MgPiAkbWF4dGFncyB8fAorCSAgICBbdG90YWx3aWR0aCAkbWFya3MgbWFpbmZvbnQgJGV4dHJhXSA+ICRtYXh3aWR0aH0geworCSAgICAjIHNob3cganVzdCBhIHNpbmdsZSAibiB0YWdzLi4uIiB0YWcKKwkgICAgc2V0IHNpbmdsZXRhZyAxCisJICAgIGlmIHskbnRhZ3MgPT0gMX0geworCQlzZXQgbWFya3MgW2xpc3QgInRhZy4uLiJdCisJICAgIH0gZWxzZSB7CisJCXNldCBtYXJrcyBbbGlzdCBbZm9ybWF0ICIlZCB0YWdzLi4uIiAkbnRhZ3NdXQorCSAgICB9CisJICAgIHNldCBudGFncyAxCisJfQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGlkaGVhZHMoJGlkKV19IHsKKwlzZXQgbWFya3MgW2NvbmNhdCAkbWFya3MgJGlkaGVhZHMoJGlkKV0KKwlzZXQgbmhlYWRzIFtsbGVuZ3RoICRpZGhlYWRzKCRpZCldCisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgaWRvdGhlcnJlZnMoJGlkKV19IHsKKwlzZXQgbWFya3MgW2NvbmNhdCAkbWFya3MgJGlkb3RoZXJyZWZzKCRpZCldCisgICAgfQorICAgIGlmIHskbWFya3MgZXEge319IHsKKwlyZXR1cm4gJHh0CisgICAgfQorCisgICAgc2V0IHl0IFtleHByIHskeTEgLSAwLjUgKiAkbGluZXNwY31dCisgICAgc2V0IHliIFtleHByIHskeXQgKyAkbGluZXNwYyAtIDF9XQorICAgIHNldCB4dmFscyB7fQorICAgIHNldCB3dmFscyB7fQorICAgIHNldCBpIC0xCisgICAgZm9yZWFjaCB0YWcgJG1hcmtzIHsKKwlpbmNyIGkKKwlpZiB7JGkgPj0gJG50YWdzICYmICRpIDwgJG50YWdzICsgJG5oZWFkcyAmJiAkdGFnIGVxICRtYWluaGVhZH0geworCSAgICBzZXQgd2lkIFtmb250IG1lYXN1cmUgbWFpbmZvbnRib2xkICR0YWddCisJfSBlbHNlIHsKKwkgICAgc2V0IHdpZCBbZm9udCBtZWFzdXJlIG1haW5mb250ICR0YWddCisJfQorCWxhcHBlbmQgeHZhbHMgJHh0CisJbGFwcGVuZCB3dmFscyAkd2lkCisJc2V0IHh0IFtleHByIHskeHQgKyAkd2lkICsgJGV4dHJhfV0KKyAgICB9CisgICAgc2V0IHQgWyRjYW52IGNyZWF0ZSBsaW5lICR4ICR5MSBbbGluZGV4ICR4dmFscyBlbmRdICR5MSBcCisJICAgICAgIC13aWR0aCAkbHRoaWNrbmVzcyAtZmlsbCAkcmVmbGluZWNvbG9yIC10YWdzIHRhZy4kaWRdCisgICAgJGNhbnYgbG93ZXIgJHQKKyAgICBmb3JlYWNoIHRhZyAkbWFya3MgeCAkeHZhbHMgd2lkICR3dmFscyB7CisJc2V0IHRhZ19xdW90ZWQgW3N0cmluZyBtYXAgeyUgJSV9ICR0YWddCisJc2V0IHhsIFtleHByIHskeCArICRkZWx0YX1dCisJc2V0IHhyIFtleHByIHskeCArICRkZWx0YSArICR3aWQgKyAkbHRoaWNrbmVzc31dCisJc2V0IGZvbnQgbWFpbmZvbnQKKwlpZiB7W2luY3IgbnRhZ3MgLTFdID49IDB9IHsKKwkgICAgIyBkcmF3IGEgdGFnCisJICAgIHNldCB0IFskY2FudiBjcmVhdGUgcG9seWdvbiAkeCBbZXhwciB7JHl0ICsgJGRlbHRhfV0gJHhsICR5dCBcCisJCSAgICAgICAkeHIgJHl0ICR4ciAkeWIgJHhsICR5YiAkeCBbZXhwciB7JHliIC0gJGRlbHRhfV0gXAorCQkgICAgICAgLXdpZHRoIDEgLW91dGxpbmUgJHRhZ291dGxpbmVjb2xvciAtZmlsbCAkdGFnYmdjb2xvciBcCisJCSAgICAgICAtdGFncyB0YWcuJGlkXQorCSAgICBpZiB7JHNpbmdsZXRhZ30geworCQlzZXQgdGFnY2xpY2sgW2xpc3Qgc2hvd3RhZ3MgJGlkIDFdCisJICAgIH0gZWxzZSB7CisJCXNldCB0YWdjbGljayBbbGlzdCBzaG93dGFnICR0YWdfcXVvdGVkIDFdCisJICAgIH0KKwkgICAgJGNhbnYgYmluZCAkdCA8MT4gJHRhZ2NsaWNrCisJICAgIHNldCByb3d0ZXh0eChbcm93b2Zjb21taXQgJGlkXSkgW2V4cHIgeyR4ciArICRsaW5lc3BjfV0KKwl9IGVsc2UgeworCSAgICAjIGRyYXcgYSBoZWFkIG9yIG90aGVyIHJlZgorCSAgICBpZiB7W2luY3IgbmhlYWRzIC0xXSA+PSAwfSB7CisJCXNldCBjb2wgJGhlYWRiZ2NvbG9yCisJCWlmIHskdGFnIGVxICRtYWluaGVhZH0geworCQkgICAgc2V0IGZvbnQgbWFpbmZvbnRib2xkCisJCX0KKwkgICAgfSBlbHNlIHsKKwkJc2V0IGNvbCAiI2RkZGRmZiIKKwkgICAgfQorCSAgICBzZXQgeGwgW2V4cHIgeyR4bCAtICRkZWx0YS8yfV0KKwkgICAgJGNhbnYgY3JlYXRlIHBvbHlnb24gJHggJHl0ICR4ciAkeXQgJHhyICR5YiAkeCAkeWIgXAorCQktd2lkdGggMSAtb3V0bGluZSBibGFjayAtZmlsbCAkY29sIC10YWdzIHRhZy4kaWQKKwkgICAgaWYge1tyZWdleHAge14ocmVtb3Rlcy8uKi98cmVtb3Rlcy8pfSAkdGFnIG1hdGNoIHJlbW90ZXByZWZpeF19IHsKKwkgICAgICAgIHNldCByd2lkIFtmb250IG1lYXN1cmUgbWFpbmZvbnQgJHJlbW90ZXByZWZpeF0KKwkJc2V0IHhpIFtleHByIHskeCArIDF9XQorCQlzZXQgeXRpIFtleHByIHskeXQgKyAxfV0KKwkJc2V0IHhyaSBbZXhwciB7JHggKyAkcndpZH1dCisJCSRjYW52IGNyZWF0ZSBwb2x5Z29uICR4aSAkeXRpICR4cmkgJHl0aSAkeHJpICR5YiAkeGkgJHliIFwKKwkJCS13aWR0aCAwIC1maWxsICRyZW1vdGViZ2NvbG9yIC10YWdzIHRhZy4kaWQKKwkgICAgfQorCX0KKwlzZXQgdCBbJGNhbnYgY3JlYXRlIHRleHQgJHhsICR5MSAtYW5jaG9yIHcgLXRleHQgJHRhZyAtZmlsbCAkaGVhZGZnY29sb3IgXAorCQkgICAtZm9udCAkZm9udCAtdGFncyBbbGlzdCB0YWcuJGlkIHRleHRdXQorCWlmIHskbnRhZ3MgPj0gMH0geworCSAgICAkY2FudiBiaW5kICR0IDwxPiAkdGFnY2xpY2sKKwl9IGVsc2VpZiB7JG5oZWFkcyA+PSAwfSB7CisJICAgICRjYW52IGJpbmQgJHQgJGN0eGJ1dCBbbGlzdCBoZWFkbWVudSAlWCAlWSAkaWQgJHRhZ19xdW90ZWRdCisJfQorICAgIH0KKyAgICByZXR1cm4gJHh0Cit9CisKK3Byb2MgZHJhd25vdGVzaWduIHt4dCB5fSB7CisgICAgZ2xvYmFsIGxpbmVzcGMgY2FudiBmZ2NvbG9yCisKKyAgICBzZXQgb3JhZCBbZXhwciB7JGxpbmVzcGMgLyAzfV0KKyAgICBzZXQgdCBbJGNhbnYgY3JlYXRlIHJlY3RhbmdsZSBbZXhwciB7JHh0IC0gJG9yYWR9XSBbZXhwciB7JHkgLSAkb3JhZH1dIFwKKwkgICAgICAgW2V4cHIgeyR4dCArICRvcmFkIC0gMX1dIFtleHByIHskeSArICRvcmFkIC0gMX1dIFwKKwkgICAgICAgLWZpbGwgeWVsbG93IC1vdXRsaW5lICRmZ2NvbG9yIC13aWR0aCAxIC10YWdzIGNpcmNsZV0KKyAgICBzZXQgeHQgW2V4cHIgeyR4dCArICRvcmFkICogM31dCisgICAgcmV0dXJuICR4dAorfQorCitwcm9jIHhjb29yZCB7aSBsZXZlbCBsbn0geworICAgIGdsb2JhbCBjYW52eDAgeHNwYzEgeHNwYzIKKworICAgIHNldCB4IFtleHByIHskY2FudngwICsgJGkgKiAkeHNwYzEoJGxuKX1dCisgICAgaWYgeyRpID4gMCAmJiAkaSA9PSAkbGV2ZWx9IHsKKwlzZXQgeCBbZXhwciB7JHggKyAwLjUgKiAoJHhzcGMyIC0gJHhzcGMxKCRsbikpfV0KKyAgICB9IGVsc2VpZiB7JGkgPiAkbGV2ZWx9IHsKKwlzZXQgeCBbZXhwciB7JHggKyAkeHNwYzIgLSAkeHNwYzEoJGxuKX1dCisgICAgfQorICAgIHJldHVybiAkeAorfQorCitwcm9jIHNob3dfc3RhdHVzIHttc2d9IHsKKyAgICBnbG9iYWwgY2FudiBmZ2NvbG9yCisKKyAgICBjbGVhcl9kaXNwbGF5CisgICAgc2V0X3dpbmRvd190aXRsZQorICAgICRjYW52IGNyZWF0ZSB0ZXh0IDMgMyAtYW5jaG9yIG53IC10ZXh0ICRtc2cgLWZvbnQgbWFpbmZvbnQgXAorCS10YWdzIHRleHQgLWZpbGwgJGZnY29sb3IKK30KKworIyBEb24ndCBjaGFuZ2UgdGhlIHRleHQgcGFuZSBjdXJzb3IgaWYgaXQgaXMgY3VycmVudGx5IHRoZSBoYW5kIGN1cnNvciwKKyMgc2hvd2luZyB0aGF0IHdlIGFyZSBvdmVyIGEgc2hhMSBJRCBsaW5rLgorcHJvYyBzZXR0ZXh0Y3Vyc29yIHtjfSB7CisgICAgZ2xvYmFsIGN0ZXh0IGN1cnRleHRjdXJzb3IKKworICAgIGlmIHtbJGN0ZXh0IGNnZXQgLWN1cnNvcl0gPT0gJGN1cnRleHRjdXJzb3J9IHsKKwkkY3RleHQgY29uZmlnIC1jdXJzb3IgJGMKKyAgICB9CisgICAgc2V0IGN1cnRleHRjdXJzb3IgJGMKK30KKworcHJvYyBub3didXN5IHt3aGF0IHtuYW1lIHt9fX0geworICAgIGdsb2JhbCBpc2J1c3kgYnVzeW5hbWUgc3RhdHVzdworCisgICAgaWYge1thcnJheSBuYW1lcyBpc2J1c3ldIGVxIHt9fSB7CisJLiBjb25maWcgLWN1cnNvciB3YXRjaAorCXNldHRleHRjdXJzb3Igd2F0Y2gKKyAgICB9CisgICAgc2V0IGlzYnVzeSgkd2hhdCkgMQorICAgIHNldCBidXN5bmFtZSgkd2hhdCkgJG5hbWUKKyAgICBpZiB7JG5hbWUgbmUge319IHsKKwkkc3RhdHVzdyBjb25mIC10ZXh0ICRuYW1lCisgICAgfQorfQorCitwcm9jIG5vdGJ1c3kge3doYXR9IHsKKyAgICBnbG9iYWwgaXNidXN5IG1haW5jdXJzb3IgdGV4dGN1cnNvciBidXN5bmFtZSBzdGF0dXN3CisKKyAgICBjYXRjaCB7CisJdW5zZXQgaXNidXN5KCR3aGF0KQorCWlmIHskYnVzeW5hbWUoJHdoYXQpIG5lIHt9ICYmCisJICAgIFskc3RhdHVzdyBjZ2V0IC10ZXh0XSBlcSAkYnVzeW5hbWUoJHdoYXQpfSB7CisJICAgICRzdGF0dXN3IGNvbmYgLXRleHQge30KKwl9CisgICAgfQorICAgIGlmIHtbYXJyYXkgbmFtZXMgaXNidXN5XSBlcSB7fX0geworCS4gY29uZmlnIC1jdXJzb3IgJG1haW5jdXJzb3IKKwlzZXR0ZXh0Y3Vyc29yICR0ZXh0Y3Vyc29yCisgICAgfQorfQorCitwcm9jIGZpbmRtYXRjaGVzIHtmfSB7CisgICAgZ2xvYmFsIGZpbmR0eXBlIGZpbmRzdHJpbmcKKyAgICBpZiB7JGZpbmR0eXBlID09IFttYyAiUmVnZXhwIl19IHsKKwlzZXQgbWF0Y2hlcyBbcmVnZXhwIC1pbmRpY2VzIC1hbGwgLWlubGluZSAkZmluZHN0cmluZyAkZl0KKyAgICB9IGVsc2UgeworCXNldCBmcyAkZmluZHN0cmluZworCWlmIHskZmluZHR5cGUgPT0gW21jICJJZ25DYXNlIl19IHsKKwkgICAgc2V0IGYgW3N0cmluZyB0b2xvd2VyICRmXQorCSAgICBzZXQgZnMgW3N0cmluZyB0b2xvd2VyICRmc10KKwl9CisJc2V0IG1hdGNoZXMge30KKwlzZXQgaSAwCisJc2V0IGwgW3N0cmluZyBsZW5ndGggJGZzXQorCXdoaWxlIHtbc2V0IGogW3N0cmluZyBmaXJzdCAkZnMgJGYgJGldXSA+PSAwfSB7CisJICAgIGxhcHBlbmQgbWF0Y2hlcyBbbGlzdCAkaiBbZXhwciB7JGorJGwtMX1dXQorCSAgICBzZXQgaSBbZXhwciB7JGogKyAkbH1dCisJfQorICAgIH0KKyAgICByZXR1cm4gJG1hdGNoZXMKK30KKworcHJvYyBkb2ZpbmQge3tkaXJuIDF9IHt3cmFwIDF9fSB7CisgICAgZ2xvYmFsIGZpbmRzdHJpbmcgZmluZHN0YXJ0bGluZSBmaW5kY3VybGluZSBzZWxlY3RlZGxpbmUgbnVtY29tbWl0cworICAgIGdsb2JhbCBnZHR0eXBlIGZpbGVoaWdobGlnaHQgZmhfc2VyaWFsIGZpbmRfZGlybiBmaW5kYWxsb3d3cmFwCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGZpbmRfZGlybl19IHsKKwlpZiB7JGZpbmRfZGlybiA9PSAkZGlybn0gcmV0dXJuCisJc3RvcGZpbmRpbmcKKyAgICB9CisgICAgZm9jdXMgLgorICAgIGlmIHskZmluZHN0cmluZyBlcSB7fSB8fCAkbnVtY29tbWl0cyA9PSAwfSByZXR1cm4KKyAgICBpZiB7JHNlbGVjdGVkbGluZSBlcSB7fX0geworCXNldCBmaW5kc3RhcnRsaW5lIFtsaW5kZXggW3Zpc2libGVyb3dzXSBbZXhwciB7JGRpcm4gPCAwfV1dCisgICAgfSBlbHNlIHsKKwlzZXQgZmluZHN0YXJ0bGluZSAkc2VsZWN0ZWRsaW5lCisgICAgfQorICAgIHNldCBmaW5kY3VybGluZSAkZmluZHN0YXJ0bGluZQorICAgIG5vd2J1c3kgZmluZGluZyBbbWMgIlNlYXJjaGluZyJdCisgICAgaWYgeyRnZHR0eXBlIG5lIFttYyAiY29udGFpbmluZzoiXSAmJiAhW2luZm8gZXhpc3RzIGZpbGVoaWdobGlnaHRdfSB7CisJYWZ0ZXIgY2FuY2VsIGRvX2ZpbGVfaGwgJGZoX3NlcmlhbAorCWRvX2ZpbGVfaGwgJGZoX3NlcmlhbAorICAgIH0KKyAgICBzZXQgZmluZF9kaXJuICRkaXJuCisgICAgc2V0IGZpbmRhbGxvd3dyYXAgJHdyYXAKKyAgICBydW4gZmluZG1vcmUKK30KKworcHJvYyBzdG9wZmluZGluZyB7fSB7CisgICAgZ2xvYmFsIGZpbmRfZGlybiBmaW5kY3VybGluZSBmcHJvZ2Nvb3JkCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGZpbmRfZGlybl19IHsKKwl1bnNldCBmaW5kX2Rpcm4KKwl1bnNldCBmaW5kY3VybGluZQorCW5vdGJ1c3kgZmluZGluZworCXNldCBmcHJvZ2Nvb3JkIDAKKwlhZGp1c3Rwcm9ncmVzcworICAgIH0KKyAgICBzdG9wYmxhbWluZworfQorCitwcm9jIGZpbmRtb3JlIHt9IHsKKyAgICBnbG9iYWwgY29tbWl0ZGF0YSBjb21taXRpbmZvIG51bWNvbW1pdHMgZmluZHBhdHRlcm4gZmluZGxvYworICAgIGdsb2JhbCBmaW5kc3RhcnRsaW5lIGZpbmRjdXJsaW5lIGZpbmRhbGxvd3dyYXAKKyAgICBnbG9iYWwgZmluZF9kaXJuIGdkdHR5cGUgZmhpZ2hsaWdodHMgZnByb2djb29yZAorICAgIGdsb2JhbCBjdXJ2aWV3IHZhcmNvcmRlciB2cm93bnVtIHZhcmNjb21taXRzIHZyb3dtb2QKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGZpbmRfZGlybl19IHsKKwlyZXR1cm4gMAorICAgIH0KKyAgICBzZXQgZmxkdHlwZXMgW2xpc3QgW21jICJIZWFkbGluZSJdIFttYyAiQXV0aG9yIl0gIiIgW21jICJDb21taXR0ZXIiXSAiIiBbbWMgIkNvbW1lbnRzIl1dCisgICAgc2V0IGwgJGZpbmRjdXJsaW5lCisgICAgc2V0IG1vcmV0b2RvIDAKKyAgICBpZiB7JGZpbmRfZGlybiA+IDB9IHsKKwlpbmNyIGwKKwlpZiB7JGwgPj0gJG51bWNvbW1pdHN9IHsKKwkgICAgc2V0IGwgMAorCX0KKwlpZiB7JGwgPD0gJGZpbmRzdGFydGxpbmV9IHsKKwkgICAgc2V0IGxpbSBbZXhwciB7JGZpbmRzdGFydGxpbmUgKyAxfV0KKwl9IGVsc2UgeworCSAgICBzZXQgbGltICRudW1jb21taXRzCisJICAgIHNldCBtb3JldG9kbyAkZmluZGFsbG93d3JhcAorCX0KKyAgICB9IGVsc2UgeworCWlmIHskbCA9PSAwfSB7CisJICAgIHNldCBsICRudW1jb21taXRzCisJfQorCWluY3IgbCAtMQorCWlmIHskbCA+PSAkZmluZHN0YXJ0bGluZX0geworCSAgICBzZXQgbGltIFtleHByIHskZmluZHN0YXJ0bGluZSAtIDF9XQorCX0gZWxzZSB7CisJICAgIHNldCBsaW0gLTEKKwkgICAgc2V0IG1vcmV0b2RvICRmaW5kYWxsb3d3cmFwCisJfQorICAgIH0KKyAgICBzZXQgbiBbZXhwciB7KCRsaW0gLSAkbCkgKiAkZmluZF9kaXJufV0KKyAgICBpZiB7JG4gPiA1MDB9IHsKKwlzZXQgbiA1MDAKKwlzZXQgbW9yZXRvZG8gMQorICAgIH0KKyAgICBpZiB7JGwgKyAoJGZpbmRfZGlybiA+IDA/ICRuOiAxKSA+ICR2cm93bW9kKCRjdXJ2aWV3KX0geworCXVwZGF0ZV9hcmNyb3dzICRjdXJ2aWV3CisgICAgfQorICAgIHNldCBmb3VuZCAwCisgICAgc2V0IGRvbW9yZSAxCisgICAgc2V0IGFpIFtic2VhcmNoICR2cm93bnVtKCRjdXJ2aWV3KSAkbF0KKyAgICBzZXQgYSBbbGluZGV4ICR2YXJjb3JkZXIoJGN1cnZpZXcpICRhaV0KKyAgICBzZXQgYXJvdyBbbGluZGV4ICR2cm93bnVtKCRjdXJ2aWV3KSAkYWldCisgICAgc2V0IGlkcyBbbGluZGV4ICR2YXJjY29tbWl0cygkY3VydmlldywkYSldCisgICAgc2V0IGFyb3dlbmQgW2V4cHIgeyRhcm93ICsgW2xsZW5ndGggJGlkc119XQorICAgIGlmIHskZ2R0dHlwZSBlcSBbbWMgImNvbnRhaW5pbmc6Il19IHsKKwlmb3Ige30geyRuID4gMH0ge2luY3IgbiAtMTsgaW5jciBsICRmaW5kX2Rpcm59IHsKKwkgICAgaWYgeyRsIDwgJGFyb3cgfHwgJGwgPj0gJGFyb3dlbmR9IHsKKwkJaW5jciBhaSAkZmluZF9kaXJuCisJCXNldCBhIFtsaW5kZXggJHZhcmNvcmRlcigkY3VydmlldykgJGFpXQorCQlzZXQgYXJvdyBbbGluZGV4ICR2cm93bnVtKCRjdXJ2aWV3KSAkYWldCisJCXNldCBpZHMgW2xpbmRleCAkdmFyY2NvbW1pdHMoJGN1cnZpZXcsJGEpXQorCQlzZXQgYXJvd2VuZCBbZXhwciB7JGFyb3cgKyBbbGxlbmd0aCAkaWRzXX1dCisJICAgIH0KKwkgICAgc2V0IGlkIFtsaW5kZXggJGlkcyBbZXhwciB7JGwgLSAkYXJvd31dXQorCSAgICAjIHNob3VsZG4ndCBoYXBwZW4gdW5sZXNzIGdpdCBsb2cgZG9lc24ndCBnaXZlIGFsbCB0aGUgY29tbWl0cy4uLgorCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRkYXRhKCRpZCldIHx8CisJCSFbZG9lc21hdGNoICRjb21taXRkYXRhKCRpZCldfSB7CisJCWNvbnRpbnVlCisJICAgIH0KKwkgICAgaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0aW5mbygkaWQpXX0geworCQlnZXRjb21taXQgJGlkCisJICAgIH0KKwkgICAgc2V0IGluZm8gJGNvbW1pdGluZm8oJGlkKQorCSAgICBmb3JlYWNoIGYgJGluZm8gdHkgJGZsZHR5cGVzIHsKKwkJaWYgeyR0eSBlcSAiIn0gY29udGludWUKKwkJaWYgeygkZmluZGxvYyBlcSBbbWMgIkFsbCBmaWVsZHMiXSB8fCAkZmluZGxvYyBlcSAkdHkpICYmCisJCSAgICBbZG9lc21hdGNoICRmXX0geworCQkgICAgc2V0IGZvdW5kIDEKKwkJICAgIGJyZWFrCisJCX0KKwkgICAgfQorCSAgICBpZiB7JGZvdW5kfSBicmVhaworCX0KKyAgICB9IGVsc2UgeworCWZvciB7fSB7JG4gPiAwfSB7aW5jciBuIC0xOyBpbmNyIGwgJGZpbmRfZGlybn0geworCSAgICBpZiB7JGwgPCAkYXJvdyB8fCAkbCA+PSAkYXJvd2VuZH0geworCQlpbmNyIGFpICRmaW5kX2Rpcm4KKwkJc2V0IGEgW2xpbmRleCAkdmFyY29yZGVyKCRjdXJ2aWV3KSAkYWldCisJCXNldCBhcm93IFtsaW5kZXggJHZyb3dudW0oJGN1cnZpZXcpICRhaV0KKwkJc2V0IGlkcyBbbGluZGV4ICR2YXJjY29tbWl0cygkY3VydmlldywkYSldCisJCXNldCBhcm93ZW5kIFtleHByIHskYXJvdyArIFtsbGVuZ3RoICRpZHNdfV0KKwkgICAgfQorCSAgICBzZXQgaWQgW2xpbmRleCAkaWRzIFtleHByIHskbCAtICRhcm93fV1dCisJICAgIGlmIHshW2luZm8gZXhpc3RzIGZoaWdobGlnaHRzKCRpZCldfSB7CisJCSMgdGhpcyBzZXRzIGZoaWdobGlnaHRzKCRpZCkgdG8gLTEKKwkJYXNrZmlsZWhpZ2hsaWdodCAkbCAkaWQKKwkgICAgfQorCSAgICBpZiB7JGZoaWdobGlnaHRzKCRpZCkgPiAwfSB7CisJCXNldCBmb3VuZCAkZG9tb3JlCisJCWJyZWFrCisJICAgIH0KKwkgICAgaWYgeyRmaGlnaGxpZ2h0cygkaWQpIDwgMH0geworCQlpZiB7JGRvbW9yZX0geworCQkgICAgc2V0IGRvbW9yZSAwCisJCSAgICBzZXQgZmluZGN1cmxpbmUgW2V4cHIgeyRsIC0gJGZpbmRfZGlybn1dCisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYgeyRmb3VuZCB8fCAoJGRvbW9yZSAmJiAhJG1vcmV0b2RvKX0geworCXVuc2V0IGZpbmRjdXJsaW5lCisJdW5zZXQgZmluZF9kaXJuCisJbm90YnVzeSBmaW5kaW5nCisJc2V0IGZwcm9nY29vcmQgMAorCWFkanVzdHByb2dyZXNzCisJaWYgeyRmb3VuZH0geworCSAgICBmaW5kc2VsZWN0bGluZSAkbAorCX0gZWxzZSB7CisJICAgIGJlbGwKKwl9CisJcmV0dXJuIDAKKyAgICB9CisgICAgaWYgeyEkZG9tb3JlfSB7CisJZmx1c2hoaWdobGlnaHRzCisgICAgfSBlbHNlIHsKKwlzZXQgZmluZGN1cmxpbmUgW2V4cHIgeyRsIC0gJGZpbmRfZGlybn1dCisgICAgfQorICAgIHNldCBuIFtleHByIHsoJGZpbmRjdXJsaW5lIC0gJGZpbmRzdGFydGxpbmUpICogJGZpbmRfZGlybiAtIDF9XQorICAgIGlmIHskbiA8IDB9IHsKKwlpbmNyIG4gJG51bWNvbW1pdHMKKyAgICB9CisgICAgc2V0IGZwcm9nY29vcmQgW2V4cHIgeyRuICogMS4wIC8gJG51bWNvbW1pdHN9XQorICAgIGFkanVzdHByb2dyZXNzCisgICAgcmV0dXJuICRkb21vcmUKK30KKworcHJvYyBmaW5kc2VsZWN0bGluZSB7bH0geworICAgIGdsb2JhbCBmaW5kbG9jIGNvbW1lbnRlbmQgY3RleHQgZmluZGN1cmxpbmUgbWFya2luZ21hdGNoZXMgZ2R0dHlwZQorCisgICAgc2V0IG1hcmtpbmdtYXRjaGVzIFtleHByIHskZ2R0dHlwZSBlcSBbbWMgImNvbnRhaW5pbmc6Il19XQorICAgIHNldCBmaW5kY3VybGluZSAkbAorICAgIHNlbGVjdGxpbmUgJGwgMQorICAgIGlmIHskbWFya2luZ21hdGNoZXMgJiYKKwkoJGZpbmRsb2MgZXEgW21jICJBbGwgZmllbGRzIl0gfHwgJGZpbmRsb2MgZXEgW21jICJDb21tZW50cyJdKX0geworCSMgaGlnaGxpZ2h0IHRoZSBtYXRjaGVzIGluIHRoZSBjb21tZW50cworCXNldCBmIFskY3RleHQgZ2V0IDEuMCAkY29tbWVudGVuZF0KKwlzZXQgbWF0Y2hlcyBbZmluZG1hdGNoZXMgJGZdCisJZm9yZWFjaCBtYXRjaCAkbWF0Y2hlcyB7CisJICAgIHNldCBzdGFydCBbbGluZGV4ICRtYXRjaCAwXQorCSAgICBzZXQgZW5kIFtleHByIHtbbGluZGV4ICRtYXRjaCAxXSArIDF9XQorCSAgICAkY3RleHQgdGFnIGFkZCBmb3VuZCAiMS4wICsgJHN0YXJ0IGMiICIxLjAgKyAkZW5kIGMiCisJfQorICAgIH0KKyAgICBkcmF3dmlzaWJsZQorfQorCisjIG1hcmsgdGhlIGJpdHMgb2YgYSBoZWFkbGluZSBvciBhdXRob3IgdGhhdCBtYXRjaCBhIGZpbmQgc3RyaW5nCitwcm9jIG1hcmttYXRjaGVzIHtjYW52IGwgc3RyIHRhZyBtYXRjaGVzIGZvbnQgcm93fSB7CisgICAgZ2xvYmFsIHNlbGVjdGVkbGluZQorCisgICAgc2V0IGJib3ggWyRjYW52IGJib3ggJHRhZ10KKyAgICBzZXQgeDAgW2xpbmRleCAkYmJveCAwXQorICAgIHNldCB5MCBbbGluZGV4ICRiYm94IDFdCisgICAgc2V0IHkxIFtsaW5kZXggJGJib3ggM10KKyAgICBmb3JlYWNoIG1hdGNoICRtYXRjaGVzIHsKKwlzZXQgc3RhcnQgW2xpbmRleCAkbWF0Y2ggMF0KKwlzZXQgZW5kIFtsaW5kZXggJG1hdGNoIDFdCisJaWYgeyRzdGFydCA+ICRlbmR9IGNvbnRpbnVlCisJc2V0IHhvZmYgW2ZvbnQgbWVhc3VyZSAkZm9udCBbc3RyaW5nIHJhbmdlICRzdHIgMCBbZXhwciB7JHN0YXJ0LTF9XV1dCisJc2V0IHhsZW4gW2ZvbnQgbWVhc3VyZSAkZm9udCBbc3RyaW5nIHJhbmdlICRzdHIgMCBbZXhwciB7JGVuZH1dXV0KKwlzZXQgdCBbJGNhbnYgY3JlYXRlIHJlY3QgW2V4cHIgeyR4MCskeG9mZn1dICR5MCBcCisJCSAgIFtleHByIHskeDArJHhsZW4rMn1dICR5MSBcCisJCSAgIC1vdXRsaW5lIHt9IC10YWdzIFtsaXN0IG1hdGNoJGwgbWF0Y2hlc10gLWZpbGwgeWVsbG93XQorCSRjYW52IGxvd2VyICR0CisJaWYgeyRyb3cgPT0gJHNlbGVjdGVkbGluZX0geworCSAgICAkY2FudiByYWlzZSAkdCBzZWNzZWwKKwl9CisgICAgfQorfQorCitwcm9jIHVubWFya21hdGNoZXMge30geworICAgIGdsb2JhbCBtYXJraW5nbWF0Y2hlcworCisgICAgYWxsY2FudnMgZGVsZXRlIG1hdGNoZXMKKyAgICBzZXQgbWFya2luZ21hdGNoZXMgMAorICAgIHN0b3BmaW5kaW5nCit9CisKK3Byb2Mgc2VsY2FudmxpbmUge3cgeCB5fSB7CisgICAgZ2xvYmFsIGNhbnYgY2FudnkwIGN0ZXh0IGxpbmVzcGMKKyAgICBnbG9iYWwgcm93dGV4dHgKKyAgICBzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCisgICAgaWYgeyR5bWF4ID09IHt9fSByZXR1cm4KKyAgICBzZXQgeWZyYWMgW2xpbmRleCBbJGNhbnYgeXZpZXddIDBdCisgICAgc2V0IHkgW2V4cHIgeyR5ICsgJHlmcmFjICogJHltYXh9XQorICAgIHNldCBsIFtleHByIHtpbnQoKCR5IC0gJGNhbnZ5MCkgLyAkbGluZXNwYyArIDAuNSl9XQorICAgIGlmIHskbCA8IDB9IHsKKwlzZXQgbCAwCisgICAgfQorICAgIGlmIHskdyBlcSAkY2Fudn0geworCXNldCB4bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gMl0KKwlzZXQgeGxlZnQgW2V4cHIge1tsaW5kZXggWyRjYW52IHh2aWV3XSAwXSAqICR4bWF4fV0KKwlpZiB7IVtpbmZvIGV4aXN0cyByb3d0ZXh0eCgkbCldIHx8ICR4bGVmdCArICR4IDwgJHJvd3RleHR4KCRsKX0gcmV0dXJuCisgICAgfQorICAgIHVubWFya21hdGNoZXMKKyAgICBzZWxlY3RsaW5lICRsIDEKK30KKworcHJvYyBjb21taXRfZGVzY3JpcHRvciB7cH0geworICAgIGdsb2JhbCBjb21taXRpbmZvCisgICAgaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0aW5mbygkcCldfSB7CisJZ2V0Y29tbWl0ICRwCisgICAgfQorICAgIHNldCBsICIuLi4iCisgICAgaWYge1tsbGVuZ3RoICRjb21taXRpbmZvKCRwKV0gPiAxfSB7CisJc2V0IGwgW2xpbmRleCAkY29tbWl0aW5mbygkcCkgMF0KKyAgICB9CisgICAgcmV0dXJuICIkcCAoJGwpXG4iCit9CisKKyMgYXBwZW5kIHNvbWUgdGV4dCB0byB0aGUgY3RleHQgd2lkZ2V0LCBhbmQgbWFrZSBhbnkgU0hBMSBJRAorIyB0aGF0IHdlIGtub3cgYWJvdXQgYmUgYSBjbGlja2FibGUgbGluay4KKyMgQWxzbyBsb29rIGZvciBVUkxzIG9mIHRoZSBmb3JtICJodHRwW3NdOi8vLi4uIiBhbmQgbWFrZSB0aGVtIHdlYiBsaW5rcy4KK3Byb2MgYXBwZW5kd2l0aGxpbmtzIHt0ZXh0IHRhZ3N9IHsKKyAgICBnbG9iYWwgY3RleHQgbGlua251bSBjdXJ2aWV3CisKKyAgICBzZXQgc3RhcnQgWyRjdGV4dCBpbmRleCAiZW5kIC0gMWMiXQorICAgICRjdGV4dCBpbnNlcnQgZW5kICR0ZXh0ICR0YWdzCisgICAgc2V0IGxpbmtzIFtyZWdleHAgLWluZGljZXMgLWFsbCAtaW5saW5lIHsoPzpcbXwtZylbMC05YS1mXXs2LDQwfVxNfSAkdGV4dF0KKyAgICBmb3JlYWNoIGwgJGxpbmtzIHsKKwlzZXQgcyBbbGluZGV4ICRsIDBdCisJc2V0IGUgW2xpbmRleCAkbCAxXQorCXNldCBsaW5raWQgW3N0cmluZyByYW5nZSAkdGV4dCAkcyAkZV0KKwlpbmNyIGUKKwkkY3RleHQgdGFnIGRlbGV0ZSBsaW5rJGxpbmtudW0KKwkkY3RleHQgdGFnIGFkZCBsaW5rJGxpbmtudW0gIiRzdGFydCArICRzIGMiICIkc3RhcnQgKyAkZSBjIgorCXNldGxpbmsgJGxpbmtpZCBsaW5rJGxpbmtudW0KKwlpbmNyIGxpbmtudW0KKyAgICB9CisgICAgc2V0IHdsaW5rcyBbcmVnZXhwIC1pbmRpY2VzIC1hbGwgLWlubGluZSAtbGluZSBcCisJCSAgICB7aHR0cHM/Oi8vW15bOnNwYWNlOl1dK30gJHRleHRdCisgICAgZm9yZWFjaCBsICR3bGlua3MgeworCXNldCBzMiBbbGluZGV4ICRsIDBdCisJc2V0IGUyIFtsaW5kZXggJGwgMV0KKwlzZXQgdXJsIFtzdHJpbmcgcmFuZ2UgJHRleHQgJHMyICRlMl0KKwlpbmNyIGUyCisJJGN0ZXh0IHRhZyBkZWxldGUgbGluayRsaW5rbnVtCisJJGN0ZXh0IHRhZyBhZGQgbGluayRsaW5rbnVtICIkc3RhcnQgKyAkczIgYyIgIiRzdGFydCArICRlMiBjIgorCXNldHdsaW5rICR1cmwgbGluayRsaW5rbnVtCisJaW5jciBsaW5rbnVtCisgICAgfQorfQorCitwcm9jIHNldGxpbmsge2lkIGxrfSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgY3RleHQgcGVuZGluZ2xpbmtzCisgICAgZ2xvYmFsIGxpbmtmZ2NvbG9yCisKKyAgICBpZiB7W3N0cmluZyByYW5nZSAkaWQgMCAxXSBlcSAiLWcifSB7CisgICAgICBzZXQgaWQgW3N0cmluZyByYW5nZSAkaWQgMiBlbmRdCisgICAgfQorCisgICAgc2V0IGtub3duIDAKKyAgICBpZiB7W3N0cmluZyBsZW5ndGggJGlkXSA8IDQwfSB7CisJc2V0IG1hdGNoZXMgW2xvbmdpZCAkaWRdCisJaWYge1tsbGVuZ3RoICRtYXRjaGVzXSA+IDB9IHsKKwkgICAgaWYge1tsbGVuZ3RoICRtYXRjaGVzXSA+IDF9IHJldHVybgorCSAgICBzZXQga25vd24gMQorCSAgICBzZXQgaWQgW2xpbmRleCAkbWF0Y2hlcyAwXQorCX0KKyAgICB9IGVsc2UgeworCXNldCBrbm93biBbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld10KKyAgICB9CisgICAgaWYgeyRrbm93bn0geworCSRjdGV4dCB0YWcgY29uZiAkbGsgLWZvcmVncm91bmQgJGxpbmtmZ2NvbG9yIC11bmRlcmxpbmUgMQorCSRjdGV4dCB0YWcgYmluZCAkbGsgPDE+IFtsaXN0IHNlbGJ5aWQgJGlkXQorCSRjdGV4dCB0YWcgYmluZCAkbGsgPEVudGVyPiB7bGlua2N1cnNvciAlVyAxfQorCSRjdGV4dCB0YWcgYmluZCAkbGsgPExlYXZlPiB7bGlua2N1cnNvciAlVyAtMX0KKyAgICB9IGVsc2UgeworCWxhcHBlbmQgcGVuZGluZ2xpbmtzKCRpZCkgJGxrCisJaW50ZXJlc3RlZGluICRpZCB7bWFrZWxpbmsgJVB9CisgICAgfQorfQorCitwcm9jIHNldHdsaW5rIHt1cmwgbGt9IHsKKyAgICBnbG9iYWwgY3RleHQKKyAgICBnbG9iYWwgbGlua2ZnY29sb3IKKyAgICBnbG9iYWwgd2ViX2Jyb3dzZXIKKworICAgIGlmIHskd2ViX2Jyb3dzZXIgZXEge319IHJldHVybgorICAgICRjdGV4dCB0YWcgY29uZiAkbGsgLWZvcmVncm91bmQgJGxpbmtmZ2NvbG9yIC11bmRlcmxpbmUgMQorICAgICRjdGV4dCB0YWcgYmluZCAkbGsgPDE+IFtsaXN0IGJyb3dzZXdlYiAkdXJsXQorICAgICRjdGV4dCB0YWcgYmluZCAkbGsgPEVudGVyPiB7bGlua2N1cnNvciAlVyAxfQorICAgICRjdGV4dCB0YWcgYmluZCAkbGsgPExlYXZlPiB7bGlua2N1cnNvciAlVyAtMX0KK30KKworcHJvYyBhcHBlbmRzaG9ydGxpbmsge2lkIHtwcmUge319IHtwb3N0IHt9fX0geworICAgIGdsb2JhbCBjdGV4dCBsaW5rbnVtCisKKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAkcHJlCisgICAgJGN0ZXh0IHRhZyBkZWxldGUgbGluayRsaW5rbnVtCisgICAgJGN0ZXh0IGluc2VydCBlbmQgW3N0cmluZyByYW5nZSAkaWQgMCA3XSBsaW5rJGxpbmtudW0KKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAkcG9zdAorICAgIHNldGxpbmsgJGlkIGxpbmskbGlua251bQorICAgIGluY3IgbGlua251bQorfQorCitwcm9jIG1ha2VsaW5rIHtpZH0geworICAgIGdsb2JhbCBwZW5kaW5nbGlua3MKKworICAgIGlmIHshW2luZm8gZXhpc3RzIHBlbmRpbmdsaW5rcygkaWQpXX0gcmV0dXJuCisgICAgZm9yZWFjaCBsayAkcGVuZGluZ2xpbmtzKCRpZCkgeworCXNldGxpbmsgJGlkICRsaworICAgIH0KKyAgICB1bnNldCBwZW5kaW5nbGlua3MoJGlkKQorfQorCitwcm9jIGxpbmtjdXJzb3Ige3cgaW5jfSB7CisgICAgZ2xvYmFsIGxpbmtlbnRlcmNvdW50IGN1cnRleHRjdXJzb3IKKworICAgIGlmIHtbaW5jciBsaW5rZW50ZXJjb3VudCAkaW5jXSA+IDB9IHsKKwkkdyBjb25maWd1cmUgLWN1cnNvciBoYW5kMgorICAgIH0gZWxzZSB7CisJJHcgY29uZmlndXJlIC1jdXJzb3IgJGN1cnRleHRjdXJzb3IKKwlpZiB7JGxpbmtlbnRlcmNvdW50IDwgMH0geworCSAgICBzZXQgbGlua2VudGVyY291bnQgMAorCX0KKyAgICB9Cit9CisKK3Byb2MgYnJvd3Nld2ViIHt1cmx9IHsKKyAgICBnbG9iYWwgd2ViX2Jyb3dzZXIKKworICAgIGlmIHskd2ViX2Jyb3dzZXIgZXEge319IHJldHVybgorICAgICMgVXNlIGV2YWwgaGVyZSBpbiBjYXNlICR3ZWJfYnJvd3NlciBpcyBhIGNvbW1hbmQgcGx1cyBzb21lIGFyZ3VtZW50cworICAgIGlmIHtbY2F0Y2gge2V2YWwgZXhlYyAkd2ViX2Jyb3dzZXIgW2xpc3QgJHVybF0gJn0gZXJyXX0geworCWVycm9yX3BvcHVwICJbbWMgIkVycm9yIHN0YXJ0aW5nIHdlYiBicm93c2VyOiJdICRlcnIiCisgICAgfQorfQorCitwcm9jIHZpZXduZXh0bGluZSB7ZGlyfSB7CisgICAgZ2xvYmFsIGNhbnYgbGluZXNwYworCisgICAgJGNhbnYgZGVsZXRlIGhvdmVyCisgICAgc2V0IHltYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAzXQorICAgIHNldCB3bm93IFskY2FudiB5dmlld10KKyAgICBzZXQgd3RvcCBbZXhwciB7W2xpbmRleCAkd25vdyAwXSAqICR5bWF4fV0KKyAgICBzZXQgbmV3dG9wIFtleHByIHskd3RvcCArICRkaXIgKiAkbGluZXNwY31dCisgICAgaWYgeyRuZXd0b3AgPCAwfSB7CisJc2V0IG5ld3RvcCAwCisgICAgfSBlbHNlaWYgeyRuZXd0b3AgPiAkeW1heH0geworCXNldCBuZXd0b3AgJHltYXgKKyAgICB9CisgICAgYWxsY2FudnMgeXZpZXcgbW92ZXRvIFtleHByIHskbmV3dG9wICogMS4wIC8gJHltYXh9XQorfQorCisjIGFkZCBhIGxpc3Qgb2YgdGFnIG9yIGJyYW5jaCBuYW1lcyBhdCBwb3NpdGlvbiBwb3MKKyMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG5hbWVzIGluc2VydGVkCitwcm9jIGFwcGVuZHJlZnMge3BvcyBpZHMgdmFyfSB7CisgICAgZ2xvYmFsIGN0ZXh0IGxpbmtudW0gY3VydmlldyAkdmFyIG1heHJlZnMgdmlzaWJsZXJlZnMgbWFpbmhlYWRpZAorCisgICAgaWYge1tjYXRjaCB7JGN0ZXh0IGluZGV4ICRwb3N9XX0geworCXJldHVybiAwCisgICAgfQorICAgICRjdGV4dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICAkY3RleHQgZGVsZXRlICRwb3MgIiRwb3MgbGluZWVuZCIKKyAgICBzZXQgdGFncyB7fQorICAgIGZvcmVhY2ggaWQgJGlkcyB7CisJZm9yZWFjaCB0YWcgW3NldCAkdmFyXCgkaWRcKV0geworCSAgICBsYXBwZW5kIHRhZ3MgW2xpc3QgJHRhZyAkaWRdCisJfQorICAgIH0KKworICAgIHNldCBzZXAge30KKyAgICBzZXQgdGFncyBbbHNvcnQgLWluZGV4IDAgLWRlY3JlYXNpbmcgJHRhZ3NdCisgICAgc2V0IG51dGFncyAwCisKKyAgICBpZiB7W2xsZW5ndGggJHRhZ3NdID4gJG1heHJlZnN9IHsKKwkjIElmIHdlIGFyZSBkaXNwbGF5aW5nIGhlYWRzLCBhbmQgdGhlcmUgYXJlIHRvbyBtYW55LAorCSMgc2VlIGlmIHRoZXJlIGFyZSBzb21lIGltcG9ydGFudCBoZWFkcyB0byBkaXNwbGF5LgorCSMgQ3VycmVudGx5IHRoYXQgYXJlIHRoZSBjdXJyZW50IGhlYWQgYW5kIGhlYWRzIGxpc3RlZCBpbiAkdmlzaWJsZXJlZnMgb3B0aW9uCisJc2V0IGl0YWdzIHt9CisJaWYgeyR2YXIgZXEgImlkaGVhZHMifSB7CisJICAgIHNldCB1dGFncyB7fQorCSAgICBmb3JlYWNoIHRpICR0YWdzIHsKKwkJc2V0IGhuYW1lIFtsaW5kZXggJHRpIDBdCisJCXNldCBpZCBbbGluZGV4ICR0aSAxXQorCQlpZiB7KFtsc2VhcmNoIC1leGFjdCAkdmlzaWJsZXJlZnMgJGhuYW1lXSAhPSAtMSB8fCAkaWQgZXEgJG1haW5oZWFkaWQpICYmCisJCSAgICBbbGxlbmd0aCAkaXRhZ3NdIDwgJG1heHJlZnN9IHsKKwkJICAgIGxhcHBlbmQgaXRhZ3MgJHRpCisJCX0gZWxzZSB7CisJCSAgICBsYXBwZW5kIHV0YWdzICR0aQorCQl9CisJICAgIH0KKwkgICAgc2V0IHRhZ3MgJHV0YWdzCisJfQorCWlmIHskaXRhZ3MgbmUge319IHsKKwkgICAgc2V0IHN0ciBbbWMgImFuZCBtYW55IG1vcmUiXQorCSAgICBzZXQgc2VwICIgIgorCX0gZWxzZSB7CisJICAgIHNldCBzdHIgW21jICJtYW55Il0KKwl9CisJJGN0ZXh0IGluc2VydCAkcG9zICIkc3RyIChbbGxlbmd0aCAkdGFnc10pIgorCXNldCBudXRhZ3MgW2xsZW5ndGggJHRhZ3NdCisJc2V0IHRhZ3MgJGl0YWdzCisgICAgfQorCisgICAgZm9yZWFjaCB0aSAkdGFncyB7CisJc2V0IGlkIFtsaW5kZXggJHRpIDFdCisJc2V0IGxrIGxpbmskbGlua251bQorCWluY3IgbGlua251bQorCSRjdGV4dCB0YWcgZGVsZXRlICRsaworCSRjdGV4dCBpbnNlcnQgJHBvcyAkc2VwCisJJGN0ZXh0IGluc2VydCAkcG9zIFtsaW5kZXggJHRpIDBdICRsaworCXNldGxpbmsgJGlkICRsaworCXNldCBzZXAgIiwgIgorICAgIH0KKyAgICAkY3RleHQgdGFnIGFkZCB3d3JhcCAiJHBvcyBsaW5lc3RhcnQiICIkcG9zIGxpbmVlbmQiCisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisgICAgcmV0dXJuIFtleHByIHtbbGxlbmd0aCAkdGFnc10gKyAkbnV0YWdzfV0KK30KKworIyBjYWxsZWQgd2hlbiB3ZSBoYXZlIGZpbmlzaGVkIGNvbXB1dGluZyB0aGUgbmVhcmJ5IHRhZ3MKK3Byb2MgZGlzcG5lYXJ0YWdzIHtkZWxheX0geworICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUgY3VycmVudGlkIHNob3duZWFydGFncyB0YWdwaGFzZQorCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge30gfHwgISRzaG93bmVhcnRhZ3N9IHJldHVybgorICAgIGFmdGVyIGNhbmNlbCBkaXNwbmV4dHRhZworICAgIGlmIHskZGVsYXl9IHsKKwlhZnRlciAyMDAgZGlzcG5leHR0YWcKKwlzZXQgdGFncGhhc2UgLTEKKyAgICB9IGVsc2UgeworCWFmdGVyIGlkbGUgZGlzcG5leHR0YWcKKwlzZXQgdGFncGhhc2UgMAorICAgIH0KK30KKworcHJvYyBkaXNwbmV4dHRhZyB7fSB7CisgICAgZ2xvYmFsIHNlbGVjdGVkbGluZSBjdXJyZW50aWQgc2hvd25lYXJ0YWdzIHRhZ3BoYXNlIGN0ZXh0CisKKyAgICBpZiB7JHNlbGVjdGVkbGluZSBlcSB7fSB8fCAhJHNob3duZWFydGFnc30gcmV0dXJuCisgICAgc3dpdGNoIC0tICR0YWdwaGFzZSB7CisJMCB7CisJICAgIHNldCBkdGFncyBbZGVzY3RhZ3MgJGN1cnJlbnRpZF0KKwkgICAgaWYgeyRkdGFncyBuZSB7fX0geworCQlhcHBlbmRyZWZzIHByZWNlZGVzICRkdGFncyBpZHRhZ3MKKwkgICAgfQorCX0KKwkxIHsKKwkgICAgc2V0IGF0YWdzIFthbmN0YWdzICRjdXJyZW50aWRdCisJICAgIGlmIHskYXRhZ3MgbmUge319IHsKKwkJYXBwZW5kcmVmcyBmb2xsb3dzICRhdGFncyBpZHRhZ3MKKwkgICAgfQorCX0KKwkyIHsKKwkgICAgc2V0IGRoZWFkcyBbZGVzY2hlYWRzICRjdXJyZW50aWRdCisJICAgIGlmIHskZGhlYWRzIG5lIHt9fSB7CisJCWlmIHtbYXBwZW5kcmVmcyBicmFuY2ggJGRoZWFkcyBpZGhlYWRzXSA+IDEKKwkJICAgICYmIFskY3RleHQgZ2V0ICJicmFuY2ggLTNjIl0gZXEgImgifSB7CisJCSAgICAjIHR1cm4gIkJyYW5jaCIgaW50byAiQnJhbmNoZXMiCisJCSAgICAkY3RleHQgY29uZiAtc3RhdGUgbm9ybWFsCisJCSAgICAkY3RleHQgaW5zZXJ0ICJicmFuY2ggLTJjIiAiZXMiCisJCSAgICAkY3RleHQgY29uZiAtc3RhdGUgZGlzYWJsZWQKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICBpZiB7W2luY3IgdGFncGhhc2VdIDw9IDJ9IHsKKwlhZnRlciBpZGxlIGRpc3BuZXh0dGFnCisgICAgfQorfQorCitwcm9jIG1ha2Vfc2Vjc2VsIHtpZH0geworICAgIGdsb2JhbCBsaW5laHRhZyBsaW5lbnRhZyBsaW5lZHRhZyBjYW52IGNhbnYyIGNhbnYzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBsaW5laHRhZygkaWQpXX0gcmV0dXJuCisgICAgJGNhbnYgZGVsZXRlIHNlY3NlbAorICAgIHNldCB0IFtldmFsICRjYW52IGNyZWF0ZSByZWN0IFskY2FudiBiYm94ICRsaW5laHRhZygkaWQpXSAtb3V0bGluZSB7e319IFwKKwkgICAgICAgLXRhZ3Mgc2Vjc2VsIC1maWxsIFskY2FudiBjZ2V0IC1zZWxlY3RiYWNrZ3JvdW5kXV0KKyAgICAkY2FudiBsb3dlciAkdAorICAgICRjYW52MiBkZWxldGUgc2Vjc2VsCisgICAgc2V0IHQgW2V2YWwgJGNhbnYyIGNyZWF0ZSByZWN0IFskY2FudjIgYmJveCAkbGluZW50YWcoJGlkKV0gLW91dGxpbmUge3t9fSBcCisJICAgICAgIC10YWdzIHNlY3NlbCAtZmlsbCBbJGNhbnYyIGNnZXQgLXNlbGVjdGJhY2tncm91bmRdXQorICAgICRjYW52MiBsb3dlciAkdAorICAgICRjYW52MyBkZWxldGUgc2Vjc2VsCisgICAgc2V0IHQgW2V2YWwgJGNhbnYzIGNyZWF0ZSByZWN0IFskY2FudjMgYmJveCAkbGluZWR0YWcoJGlkKV0gLW91dGxpbmUge3t9fSBcCisJICAgICAgIC10YWdzIHNlY3NlbCAtZmlsbCBbJGNhbnYzIGNnZXQgLXNlbGVjdGJhY2tncm91bmRdXQorICAgICRjYW52MyBsb3dlciAkdAorfQorCitwcm9jIG1ha2VfaWRtYXJrIHtpZH0geworICAgIGdsb2JhbCBsaW5laHRhZyBjYW52IGZnY29sb3IKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGxpbmVodGFnKCRpZCldfSByZXR1cm4KKyAgICAkY2FudiBkZWxldGUgbWFya2lkCisgICAgc2V0IHQgW2V2YWwgJGNhbnYgY3JlYXRlIHJlY3QgWyRjYW52IGJib3ggJGxpbmVodGFnKCRpZCldIFwKKwkgICAgICAgLXRhZ3MgbWFya2lkIC1vdXRsaW5lICRmZ2NvbG9yXQorICAgICRjYW52IHJhaXNlICR0Cit9CisKK3Byb2Mgc2VsZWN0bGluZSB7bCBpc25ldyB7ZGVzaXJlZF9sb2Mge319IHtzd2l0Y2hfdG9fcGF0Y2ggMH19IHsKKyAgICBnbG9iYWwgY2FudiBjdGV4dCBjb21taXRpbmZvIHNlbGVjdGVkbGluZQorICAgIGdsb2JhbCBjYW52eTAgbGluZXNwYyBwYXJlbnRzIGNoaWxkcmVuIGN1cnZpZXcKKyAgICBnbG9iYWwgY3VycmVudGlkIHNoYTFlbnRyeQorICAgIGdsb2JhbCBjb21tZW50ZW5kIGlkdGFncyBsaW5rbnVtCisgICAgZ2xvYmFsIG1lcmdlbWF4IG51bWNvbW1pdHMgcGVuZGluZ19zZWxlY3QKKyAgICBnbG9iYWwgY21pdG1vZGUgc2hvd25lYXJ0YWdzIGFsbGNvbW1pdHMKKyAgICBnbG9iYWwgdGFyZ2V0cm93IHRhcmdldGlkIGxhc3RzY3JvbGxyb3dzCisgICAgZ2xvYmFsIGF1dG9zZWxlY3QgYXV0b3NlbGxlbiBqdW1wX3RvX2hlcmUKKyAgICBnbG9iYWwgdmlubGluZWRpZmYKKworICAgIHVuc2V0IC1ub2NvbXBsYWluIHBlbmRpbmdfc2VsZWN0CisgICAgJGNhbnYgZGVsZXRlIGhvdmVyCisgICAgbm9ybWFsbGluZQorICAgIHVuc2VsX3JlZmxpc3QKKyAgICBzdG9wZmluZGluZworICAgIGlmIHskbCA8IDAgfHwgJGwgPj0gJG51bWNvbW1pdHN9IHJldHVybgorICAgIHNldCBpZCBbY29tbWl0b25yb3cgJGxdCisgICAgc2V0IHRhcmdldGlkICRpZAorICAgIHNldCB0YXJnZXRyb3cgJGwKKyAgICBzZXQgc2VsZWN0ZWRsaW5lICRsCisgICAgc2V0IGN1cnJlbnRpZCAkaWQKKyAgICBpZiB7JGxhc3RzY3JvbGxyb3dzIDwgJG51bWNvbW1pdHN9IHsKKwlzZXRjYW52c2Nyb2xsCisgICAgfQorCisgICAgaWYgeyRjbWl0bW9kZSBuZSAicGF0Y2giICYmICRzd2l0Y2hfdG9fcGF0Y2h9IHsKKyAgICAgICAgc2V0IGNtaXRtb2RlICJwYXRjaCIKKyAgICB9CisKKyAgICBzZXQgeSBbZXhwciB7JGNhbnZ5MCArICRsICogJGxpbmVzcGN9XQorICAgIHNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKyAgICBzZXQgeXRvcCBbZXhwciB7JHkgLSAkbGluZXNwYyAtIDF9XQorICAgIHNldCB5Ym90IFtleHByIHskeSArICRsaW5lc3BjICsgMX1dCisgICAgc2V0IHdub3cgWyRjYW52IHl2aWV3XQorICAgIHNldCB3dG9wIFtleHByIHtbbGluZGV4ICR3bm93IDBdICogJHltYXh9XQorICAgIHNldCB3Ym90IFtleHByIHtbbGluZGV4ICR3bm93IDFdICogJHltYXh9XQorICAgIHNldCB3aCBbZXhwciB7JHdib3QgLSAkd3RvcH1dCisgICAgc2V0IG5ld3RvcCAkd3RvcAorICAgIGlmIHskeXRvcCA8ICR3dG9wfSB7CisJaWYgeyR5Ym90IDwgJHd0b3B9IHsKKwkgICAgc2V0IG5ld3RvcCBbZXhwciB7JHkgLSAkd2ggLyAyLjB9XQorCX0gZWxzZSB7CisJICAgIHNldCBuZXd0b3AgJHl0b3AKKwkgICAgaWYgeyRuZXd0b3AgPiAkd3RvcCAtICRsaW5lc3BjfSB7CisJCXNldCBuZXd0b3AgW2V4cHIgeyR3dG9wIC0gJGxpbmVzcGN9XQorCSAgICB9CisJfQorICAgIH0gZWxzZWlmIHskeWJvdCA+ICR3Ym90fSB7CisJaWYgeyR5dG9wID4gJHdib3R9IHsKKwkgICAgc2V0IG5ld3RvcCBbZXhwciB7JHkgLSAkd2ggLyAyLjB9XQorCX0gZWxzZSB7CisJICAgIHNldCBuZXd0b3AgW2V4cHIgeyR5Ym90IC0gJHdofV0KKwkgICAgaWYgeyRuZXd0b3AgPCAkd3RvcCArICRsaW5lc3BjfSB7CisJCXNldCBuZXd0b3AgW2V4cHIgeyR3dG9wICsgJGxpbmVzcGN9XQorCSAgICB9CisJfQorICAgIH0KKyAgICBpZiB7JG5ld3RvcCAhPSAkd3RvcH0geworCWlmIHskbmV3dG9wIDwgMH0geworCSAgICBzZXQgbmV3dG9wIDAKKwl9CisJYWxsY2FudnMgeXZpZXcgbW92ZXRvIFtleHByIHskbmV3dG9wICogMS4wIC8gJHltYXh9XQorCWRyYXd2aXNpYmxlCisgICAgfQorCisgICAgbWFrZV9zZWNzZWwgJGlkCisKKyAgICBpZiB7JGlzbmV3fSB7CisJYWRkdG9oaXN0b3J5IFtsaXN0IHNlbGJ5aWQgJGlkIDBdIHNhdmVjbWl0cG9zCisgICAgfQorCisgICAgJHNoYTFlbnRyeSBkZWxldGUgMCBlbmQKKyAgICAkc2hhMWVudHJ5IGluc2VydCAwICRpZAorICAgIGlmIHskYXV0b3NlbGVjdH0geworCSRzaGExZW50cnkgc2VsZWN0aW9uIHJhbmdlIDAgJGF1dG9zZWxsZW4KKyAgICB9CisgICAgcmhpZ2hsaWdodF9zZWwgJGlkCisKKyAgICAkY3RleHQgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgY2xlYXJfY3RleHQKKyAgICBzZXQgbGlua251bSAwCisgICAgaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0aW5mbygkaWQpXX0geworCWdldGNvbW1pdCAkaWQKKyAgICB9CisgICAgc2V0IGluZm8gJGNvbW1pdGluZm8oJGlkKQorICAgIHNldCBkYXRlIFtmb3JtYXRkYXRlIFtsaW5kZXggJGluZm8gMl1dCisgICAgJGN0ZXh0IGluc2VydCBlbmQgIlttYyAiQXV0aG9yIl06IFtsaW5kZXggJGluZm8gMV0gICRkYXRlXG4iCisgICAgc2V0IGRhdGUgW2Zvcm1hdGRhdGUgW2xpbmRleCAkaW5mbyA0XV0KKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiW21jICJDb21taXR0ZXIiXTogW2xpbmRleCAkaW5mbyAzXSAgJGRhdGVcbiIKKyAgICBpZiB7W2luZm8gZXhpc3RzIGlkdGFncygkaWQpXX0geworCSRjdGV4dCBpbnNlcnQgZW5kIFttYyAiVGFnczoiXQorCWZvcmVhY2ggdGFnICRpZHRhZ3MoJGlkKSB7CisJICAgICRjdGV4dCBpbnNlcnQgZW5kICIgJHRhZyIKKwl9CisJJGN0ZXh0IGluc2VydCBlbmQgIlxuIgorICAgIH0KKworICAgIHNldCBoZWFkZXJzIHt9CisgICAgc2V0IG9sZHMgJHBhcmVudHMoJGN1cnZpZXcsJGlkKQorICAgIGlmIHtbbGxlbmd0aCAkb2xkc10gPiAxfSB7CisJc2V0IG5wIDAKKwlmb3JlYWNoIHAgJG9sZHMgeworCSAgICBpZiB7JG5wID49ICRtZXJnZW1heH0geworCQlzZXQgdGFnIG1tYXgKKwkgICAgfSBlbHNlIHsKKwkJc2V0IHRhZyBtJG5wCisJICAgIH0KKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgIlttYyAiUGFyZW50Il06ICIgJHRhZworCSAgICBhcHBlbmR3aXRobGlua3MgW2NvbW1pdF9kZXNjcmlwdG9yICRwXSB7fQorCSAgICBpbmNyIG5wCisJfQorICAgIH0gZWxzZSB7CisJZm9yZWFjaCBwICRvbGRzIHsKKwkgICAgYXBwZW5kIGhlYWRlcnMgIlttYyAiUGFyZW50Il06IFtjb21taXRfZGVzY3JpcHRvciAkcF0iCisJfQorICAgIH0KKworICAgIGZvcmVhY2ggYyAkY2hpbGRyZW4oJGN1cnZpZXcsJGlkKSB7CisJYXBwZW5kIGhlYWRlcnMgIlttYyAiQ2hpbGQiXTogIFtjb21taXRfZGVzY3JpcHRvciAkY10iCisgICAgfQorCisgICAgIyBtYWtlIGFueXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIFNIQTEgSUQgYmUgYSBjbGlja2FibGUgbGluaworICAgIGFwcGVuZHdpdGhsaW5rcyAkaGVhZGVycyB7fQorICAgIGlmIHskc2hvd25lYXJ0YWdzfSB7CisJaWYgeyFbaW5mbyBleGlzdHMgYWxsY29tbWl0c119IHsKKwkgICAgZ2V0YWxsY29tbWl0cworCX0KKwkkY3RleHQgaW5zZXJ0IGVuZCAiW21jICJCcmFuY2giXTogIgorCSRjdGV4dCBtYXJrIHNldCBicmFuY2ggImVuZCAtMWMiCisJJGN0ZXh0IG1hcmsgZ3Jhdml0eSBicmFuY2ggbGVmdAorCSRjdGV4dCBpbnNlcnQgZW5kICJcblttYyAiRm9sbG93cyJdOiAiCisJJGN0ZXh0IG1hcmsgc2V0IGZvbGxvd3MgImVuZCAtMWMiCisJJGN0ZXh0IG1hcmsgZ3Jhdml0eSBmb2xsb3dzIGxlZnQKKwkkY3RleHQgaW5zZXJ0IGVuZCAiXG5bbWMgIlByZWNlZGVzIl06ICIKKwkkY3RleHQgbWFyayBzZXQgcHJlY2VkZXMgImVuZCAtMWMiCisJJGN0ZXh0IG1hcmsgZ3Jhdml0eSBwcmVjZWRlcyBsZWZ0CisJJGN0ZXh0IGluc2VydCBlbmQgIlxuIgorCWRpc3BuZWFydGFncyAxCisgICAgfQorICAgICRjdGV4dCBpbnNlcnQgZW5kICJcbiIKKyAgICBzZXQgY29tbWVudCBbbGluZGV4ICRpbmZvIDVdCisgICAgaWYge1tzdHJpbmcgZmlyc3QgIlxyIiAkY29tbWVudF0gPj0gMH0geworCXNldCBjb21tZW50IFtzdHJpbmcgbWFwIHsiXHIiICJcbiAgICAifSAkY29tbWVudF0KKyAgICB9CisgICAgYXBwZW5kd2l0aGxpbmtzICRjb21tZW50IHtjb21tZW50fQorCisgICAgJGN0ZXh0IHRhZyByZW1vdmUgZm91bmQgMS4wIGVuZAorICAgICRjdGV4dCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorICAgIHNldCBjb21tZW50ZW5kIFskY3RleHQgaW5kZXggImVuZCAtIDFjIl0KKworICAgIHNldCBqdW1wX3RvX2hlcmUgJGRlc2lyZWRfbG9jCisgICAgaW5pdF9mbGlzdCBbbWMgIkNvbW1lbnRzIl0KKyAgICBpZiB7JGNtaXRtb2RlIGVxICJ0cmVlIn0geworCWdldHRyZWUgJGlkCisgICAgfSBlbHNlaWYgeyR2aW5saW5lZGlmZigkY3VydmlldykgPT0gMX0geworCXNob3dpbmxpbmVkaWZmICRpZAorICAgIH0gZWxzZWlmIHtbbGxlbmd0aCAkb2xkc10gPD0gMX0geworCXN0YXJ0ZGlmZiAkaWQKKyAgICB9IGVsc2UgeworCW1lcmdlZGlmZiAkaWQKKyAgICB9Cit9CisKK3Byb2Mgc2VsZmlyc3RsaW5lIHt9IHsKKyAgICB1bm1hcmttYXRjaGVzCisgICAgc2VsZWN0bGluZSAwIDEKK30KKworcHJvYyBzZWxsYXN0bGluZSB7fSB7CisgICAgZ2xvYmFsIG51bWNvbW1pdHMKKyAgICB1bm1hcmttYXRjaGVzCisgICAgc2V0IGwgW2V4cHIgeyRudW1jb21taXRzIC0gMX1dCisgICAgc2VsZWN0bGluZSAkbCAxCit9CisKK3Byb2Mgc2VsbmV4dGxpbmUge2Rpcn0geworICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUKKyAgICBmb2N1cyAuCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge319IHJldHVybgorICAgIHNldCBsIFtleHByIHskc2VsZWN0ZWRsaW5lICsgJGRpcn1dCisgICAgdW5tYXJrbWF0Y2hlcworICAgIHNlbGVjdGxpbmUgJGwgMQorfQorCitwcm9jIHNlbG5leHRwYWdlIHtkaXJ9IHsKKyAgICBnbG9iYWwgY2FudiBsaW5lc3BjIHNlbGVjdGVkbGluZSBudW1jb21taXRzCisKKyAgICBzZXQgbHBwIFtleHByIHsoW3dpbmZvIGhlaWdodCAkY2Fudl0gLSAyKSAvICRsaW5lc3BjfV0KKyAgICBpZiB7JGxwcCA8IDF9IHsKKwlzZXQgbHBwIDEKKyAgICB9CisgICAgYWxsY2FudnMgeXZpZXcgc2Nyb2xsIFtleHByIHskZGlyICogJGxwcH1dIHVuaXRzCisgICAgZHJhd3Zpc2libGUKKyAgICBpZiB7JHNlbGVjdGVkbGluZSBlcSB7fX0gcmV0dXJuCisgICAgc2V0IGwgW2V4cHIgeyRzZWxlY3RlZGxpbmUgKyAkZGlyICogJGxwcH1dCisgICAgaWYgeyRsIDwgMH0geworCXNldCBsIDAKKyAgICB9IGVsc2VpZiB7JGwgPj0gJG51bWNvbW1pdHN9IHsKKyAgICAgICAgc2V0IGwgW2V4cHIgJG51bWNvbW1pdHMgLSAxXQorICAgIH0KKyAgICB1bm1hcmttYXRjaGVzCisgICAgc2VsZWN0bGluZSAkbCAxCit9CisKK3Byb2MgdW5zZWxlY3RsaW5lIHt9IHsKKyAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lIGN1cnJlbnRpZAorCisgICAgc2V0IHNlbGVjdGVkbGluZSB7fQorICAgIHVuc2V0IC1ub2NvbXBsYWluIGN1cnJlbnRpZAorICAgIGFsbGNhbnZzIGRlbGV0ZSBzZWNzZWwKKyAgICByaGlnaGxpZ2h0X25vbmUKK30KKworcHJvYyByZXNlbGVjdGxpbmUge30geworICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUKKworICAgIGlmIHskc2VsZWN0ZWRsaW5lIG5lIHt9fSB7CisJc2VsZWN0bGluZSAkc2VsZWN0ZWRsaW5lIDAKKyAgICB9Cit9CisKK3Byb2MgYWRkdG9oaXN0b3J5IHtjbWQge3NhdmVwcm9jIHt9fX0geworICAgIGdsb2JhbCBoaXN0b3J5IGhpc3RvcnlpbmRleCBjdXJ2aWV3CisKKyAgICB1bnNldF9wb3N2YXJzCisgICAgc2F2ZV9wb3NpdGlvbgorICAgIHNldCBlbHQgW2xpc3QgJGN1cnZpZXcgJGNtZCAkc2F2ZXByb2Mge31dCisgICAgaWYgeyRoaXN0b3J5aW5kZXggPiAwCisJJiYgW2xpbmRleCAkaGlzdG9yeSBbZXhwciB7JGhpc3RvcnlpbmRleCAtIDF9XV0gPT0gJGVsdH0geworCXJldHVybgorICAgIH0KKworICAgIGlmIHskaGlzdG9yeWluZGV4IDwgW2xsZW5ndGggJGhpc3RvcnldfSB7CisJc2V0IGhpc3RvcnkgW2xyZXBsYWNlICRoaXN0b3J5ICRoaXN0b3J5aW5kZXggZW5kICRlbHRdCisgICAgfSBlbHNlIHsKKwlsYXBwZW5kIGhpc3RvcnkgJGVsdAorICAgIH0KKyAgICBpbmNyIGhpc3RvcnlpbmRleAorICAgIGlmIHskaGlzdG9yeWluZGV4ID4gMX0geworCS50Zi5iYXIubGVmdGJ1dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICB9IGVsc2UgeworCS50Zi5iYXIubGVmdGJ1dCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorICAgIH0KKyAgICAudGYuYmFyLnJpZ2h0YnV0IGNvbmYgLXN0YXRlIGRpc2FibGVkCit9CisKKyMgc2F2ZSB0aGUgc2Nyb2xsaW5nIHBvc2l0aW9uIG9mIHRoZSBkaWZmIGRpc3BsYXkgcGFuZQorcHJvYyBzYXZlX3Bvc2l0aW9uIHt9IHsKKyAgICBnbG9iYWwgaGlzdG9yeWluZGV4IGhpc3RvcnkKKworICAgIGlmIHskaGlzdG9yeWluZGV4IDwgMX0gcmV0dXJuCisgICAgc2V0IGhpIFtleHByIHskaGlzdG9yeWluZGV4IC0gMX1dCisgICAgc2V0IGZuIFtsaW5kZXggJGhpc3RvcnkgJGhpIDJdCisgICAgaWYgeyRmbiBuZSB7fX0geworCWxzZXQgaGlzdG9yeSAkaGkgMyBbZXZhbCAkZm5dCisgICAgfQorfQorCitwcm9jIHVuc2V0X3Bvc3ZhcnMge30geworICAgIGdsb2JhbCBsYXN0X3Bvc3ZhcnMKKworICAgIGlmIHtbaW5mbyBleGlzdHMgbGFzdF9wb3N2YXJzXX0geworCWZvcmVhY2gge3ZhciB2YWx9ICRsYXN0X3Bvc3ZhcnMgeworCSAgICBnbG9iYWwgJHZhcgorCSAgICB1bnNldCAtbm9jb21wbGFpbiAkdmFyCisJfQorCXVuc2V0IGxhc3RfcG9zdmFycworICAgIH0KK30KKworcHJvYyBnb2RvIHtlbHR9IHsKKyAgICBnbG9iYWwgY3VydmlldyBsYXN0X3Bvc3ZhcnMKKworICAgIHNldCB2aWV3IFtsaW5kZXggJGVsdCAwXQorICAgIHNldCBjbWQgW2xpbmRleCAkZWx0IDFdCisgICAgc2V0IHB2IFtsaW5kZXggJGVsdCAzXQorICAgIGlmIHskY3VydmlldyAhPSAkdmlld30geworCXNob3d2aWV3ICR2aWV3CisgICAgfQorICAgIHVuc2V0X3Bvc3ZhcnMKKyAgICBmb3JlYWNoIHt2YXIgdmFsfSAkcHYgeworCWdsb2JhbCAkdmFyCisJc2V0ICR2YXIgJHZhbAorICAgIH0KKyAgICBzZXQgbGFzdF9wb3N2YXJzICRwdgorICAgIGV2YWwgJGNtZAorfQorCitwcm9jIGdvYmFjayB7fSB7CisgICAgZ2xvYmFsIGhpc3RvcnkgaGlzdG9yeWluZGV4CisgICAgZm9jdXMgLgorCisgICAgaWYgeyRoaXN0b3J5aW5kZXggPiAxfSB7CisJc2F2ZV9wb3NpdGlvbgorCWluY3IgaGlzdG9yeWluZGV4IC0xCisJZ29kbyBbbGluZGV4ICRoaXN0b3J5IFtleHByIHskaGlzdG9yeWluZGV4IC0gMX1dXQorCS50Zi5iYXIucmlnaHRidXQgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgfQorICAgIGlmIHskaGlzdG9yeWluZGV4IDw9IDF9IHsKKwkudGYuYmFyLmxlZnRidXQgY29uZiAtc3RhdGUgZGlzYWJsZWQKKyAgICB9Cit9CisKK3Byb2MgZ29mb3J3IHt9IHsKKyAgICBnbG9iYWwgaGlzdG9yeSBoaXN0b3J5aW5kZXgKKyAgICBmb2N1cyAuCisKKyAgICBpZiB7JGhpc3RvcnlpbmRleCA8IFtsbGVuZ3RoICRoaXN0b3J5XX0geworCXNhdmVfcG9zaXRpb24KKwlzZXQgY21kIFtsaW5kZXggJGhpc3RvcnkgJGhpc3RvcnlpbmRleF0KKwlpbmNyIGhpc3RvcnlpbmRleAorCWdvZG8gJGNtZAorCS50Zi5iYXIubGVmdGJ1dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICB9CisgICAgaWYgeyRoaXN0b3J5aW5kZXggPj0gW2xsZW5ndGggJGhpc3RvcnldfSB7CisJLnRmLmJhci5yaWdodGJ1dCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorICAgIH0KK30KKworcHJvYyBnb190b19wYXJlbnQge2l9IHsKKyAgICBnbG9iYWwgcGFyZW50cyBjdXJ2aWV3IHRhcmdldGlkCisgICAgc2V0IHBzICRwYXJlbnRzKCRjdXJ2aWV3LCR0YXJnZXRpZCkKKyAgICBpZiB7W2xsZW5ndGggJHBzXSA+PSAkaX0geworCXNlbGJ5aWQgW2xpbmRleCAkcHMgW2V4cHIgJGkgLSAxXV0KKyAgICB9Cit9CisKK3Byb2MgZ2V0dHJlZSB7aWR9IHsKKyAgICBnbG9iYWwgdHJlZWZpbGVsaXN0IHRyZWVpZGxpc3QgZGlmZmlkcyBkaWZmbWVyZ2VpZCB0cmVlcGVuZGluZworICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMgorCisgICAgc2V0IGRpZmZpZHMgJGlkCisgICAgdW5zZXQgLW5vY29tcGxhaW4gZGlmZm1lcmdlaWQKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyB0cmVlZmlsZWxpc3QoJGlkKV19IHsKKwlpZiB7IVtpbmZvIGV4aXN0cyB0cmVlcGVuZGluZ119IHsKKwkgICAgaWYgeyRpZCBlcSAkbnVsbGlkfSB7CisJCXNldCBjbWQgW2xpc3QgfCBnaXQgbHMtZmlsZXNdCisJICAgIH0gZWxzZWlmIHskaWQgZXEgJG51bGxpZDJ9IHsKKwkJc2V0IGNtZCBbbGlzdCB8IGdpdCBscy1maWxlcyAtLXN0YWdlIC10XQorCSAgICB9IGVsc2UgeworCQlzZXQgY21kIFtsaXN0IHwgZ2l0IGxzLXRyZWUgLXIgJGlkXQorCSAgICB9CisJICAgIGlmIHtbY2F0Y2gge3NldCBndGYgW29wZW4gJGNtZCByXX1dfSB7CisJCXJldHVybgorCSAgICB9CisJICAgIHNldCB0cmVlcGVuZGluZyAkaWQKKwkgICAgc2V0IHRyZWVmaWxlbGlzdCgkaWQpIHt9CisJICAgIHNldCB0cmVlaWRsaXN0KCRpZCkge30KKwkgICAgZmNvbmZpZ3VyZSAkZ3RmIC1ibG9ja2luZyAwIC1lbmNvZGluZyBiaW5hcnkKKwkgICAgZmlsZXJ1biAkZ3RmIFtsaXN0IGdldHRyZWVsaW5lICRndGYgJGlkXQorCX0KKyAgICB9IGVsc2UgeworCXNldGZpbGVsaXN0ICRpZAorICAgIH0KK30KKworcHJvYyBnZXR0cmVlbGluZSB7Z3RmIGlkfSB7CisgICAgZ2xvYmFsIHRyZWVmaWxlbGlzdCB0cmVlaWRsaXN0IHRyZWVwZW5kaW5nIGNtaXRtb2RlIGRpZmZpZHMgbnVsbGlkIG51bGxpZDIKKworICAgIHNldCBubCAwCisgICAgd2hpbGUge1tpbmNyIG5sXSA8PSAxMDAwICYmIFtnZXRzICRndGYgbGluZV0gPj0gMH0geworCWlmIHskZGlmZmlkcyBlcSAkbnVsbGlkfSB7CisJICAgIHNldCBmbmFtZSAkbGluZQorCX0gZWxzZSB7CisJICAgIHNldCBpIFtzdHJpbmcgZmlyc3QgIlx0IiAkbGluZV0KKwkgICAgaWYgeyRpIDwgMH0gY29udGludWUKKwkgICAgc2V0IGZuYW1lIFtzdHJpbmcgcmFuZ2UgJGxpbmUgW2V4cHIgeyRpKzF9XSBlbmRdCisJICAgIHNldCBsaW5lIFtzdHJpbmcgcmFuZ2UgJGxpbmUgMCBbZXhwciB7JGktMX1dXQorCSAgICBpZiB7JGRpZmZpZHMgbmUgJG51bGxpZDIgJiYgW2xpbmRleCAkbGluZSAxXSBuZSAiYmxvYiJ9IGNvbnRpbnVlCisJICAgIHNldCBzaGExIFtsaW5kZXggJGxpbmUgMl0KKwkgICAgbGFwcGVuZCB0cmVlaWRsaXN0KCRpZCkgJHNoYTEKKwl9CisJaWYge1tzdHJpbmcgaW5kZXggJGZuYW1lIDBdIGVxICJcIiJ9IHsKKwkgICAgc2V0IGZuYW1lIFtsaW5kZXggJGZuYW1lIDBdCisJfQorCXNldCBmbmFtZSBbZW5jb2RpbmcgY29udmVydGZyb20gJGZuYW1lXQorCWxhcHBlbmQgdHJlZWZpbGVsaXN0KCRpZCkgJGZuYW1lCisgICAgfQorICAgIGlmIHshW2VvZiAkZ3RmXX0geworCXJldHVybiBbZXhwciB7JG5sID49IDEwMDA/IDI6IDF9XQorICAgIH0KKyAgICBjbG9zZSAkZ3RmCisgICAgdW5zZXQgdHJlZXBlbmRpbmcKKyAgICBpZiB7JGNtaXRtb2RlIG5lICJ0cmVlIn0geworCWlmIHshW2luZm8gZXhpc3RzIGRpZmZtZXJnZWlkXX0geworCSAgICBnZXR0cmVlZGlmZnMgJGRpZmZpZHMKKwl9CisgICAgfSBlbHNlaWYgeyRpZCBuZSAkZGlmZmlkc30geworCWdldHRyZWUgJGRpZmZpZHMKKyAgICB9IGVsc2UgeworCXNldGZpbGVsaXN0ICRpZAorICAgIH0KKyAgICByZXR1cm4gMAorfQorCitwcm9jIHNob3dmaWxlIHtmfSB7CisgICAgZ2xvYmFsIHRyZWVmaWxlbGlzdCB0cmVlaWRsaXN0IGRpZmZpZHMgbnVsbGlkIG51bGxpZDIKKyAgICBnbG9iYWwgY3RleHRfZmlsZV9uYW1lcyBjdGV4dF9maWxlX2xpbmVzCisgICAgZ2xvYmFsIGN0ZXh0IGNvbW1lbnRlbmQKKworICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkdHJlZWZpbGVsaXN0KCRkaWZmaWRzKSAkZl0KKyAgICBpZiB7JGkgPCAwfSB7CisJcHV0cyAib29wcywgJGYgbm90IGluIGxpc3QgZm9yIGlkICRkaWZmaWRzIgorCXJldHVybgorICAgIH0KKyAgICBpZiB7JGRpZmZpZHMgZXEgJG51bGxpZH0geworCWlmIHtbY2F0Y2gge3NldCBiZiBbb3BlbiAkZiByXX0gZXJyXX0geworCSAgICBwdXRzICJvb3BzLCBjYW4ndCByZWFkICRmOiAkZXJyIgorCSAgICByZXR1cm4KKwl9CisgICAgfSBlbHNlIHsKKwlzZXQgYmxvYiBbbGluZGV4ICR0cmVlaWRsaXN0KCRkaWZmaWRzKSAkaV0KKwlpZiB7W2NhdGNoIHtzZXQgYmYgW29wZW4gW2NvbmNhdCB8IGdpdCBjYXQtZmlsZSBibG9iICRibG9iXSByXX0gZXJyXX0geworCSAgICBwdXRzICJvb3BzLCBlcnJvciByZWFkaW5nIGJsb2IgJGJsb2I6ICRlcnIiCisJICAgIHJldHVybgorCX0KKyAgICB9CisgICAgZmNvbmZpZ3VyZSAkYmYgLWJsb2NraW5nIDAgLWVuY29kaW5nIFtnZXRfcGF0aF9lbmNvZGluZyAkZl0KKyAgICBmaWxlcnVuICRiZiBbbGlzdCBnZXRibG9ibGluZSAkYmYgJGRpZmZpZHNdCisgICAgJGN0ZXh0IGNvbmZpZyAtc3RhdGUgbm9ybWFsCisgICAgY2xlYXJfY3RleHQgJGNvbW1lbnRlbmQKKyAgICBsYXBwZW5kIGN0ZXh0X2ZpbGVfbmFtZXMgJGYKKyAgICBsYXBwZW5kIGN0ZXh0X2ZpbGVfbGluZXMgW2xpbmRleCBbc3BsaXQgJGNvbW1lbnRlbmQgIi4iXSAwXQorICAgICRjdGV4dCBpbnNlcnQgZW5kICJcbiIKKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiJGZcbiIgZmlsZXNlcAorICAgICRjdGV4dCBjb25maWcgLXN0YXRlIGRpc2FibGVkCisgICAgJGN0ZXh0IHl2aWV3ICRjb21tZW50ZW5kCisgICAgc2V0dGFicyAwCit9CisKK3Byb2MgZ2V0YmxvYmxpbmUge2JmIGlkfSB7CisgICAgZ2xvYmFsIGRpZmZpZHMgY21pdG1vZGUgY3RleHQKKworICAgIGlmIHskaWQgbmUgJGRpZmZpZHMgfHwgJGNtaXRtb2RlIG5lICJ0cmVlIn0geworCWNhdGNoIHtjbG9zZSAkYmZ9CisJcmV0dXJuIDAKKyAgICB9CisgICAgJGN0ZXh0IGNvbmZpZyAtc3RhdGUgbm9ybWFsCisgICAgc2V0IG5sIDAKKyAgICB3aGlsZSB7W2luY3IgbmxdIDw9IDEwMDAgJiYgW2dldHMgJGJmIGxpbmVdID49IDB9IHsKKwkkY3RleHQgaW5zZXJ0IGVuZCAiJGxpbmVcbiIKKyAgICB9CisgICAgaWYge1tlb2YgJGJmXX0geworCWdsb2JhbCBqdW1wX3RvX2hlcmUgY3RleHRfZmlsZV9uYW1lcyBjb21tZW50ZW5kCisKKwkjIGRlbGV0ZSBsYXN0IG5ld2xpbmUKKwkkY3RleHQgZGVsZXRlICJlbmQgLSAyYyIgImVuZCAtIDFjIgorCWNsb3NlICRiZgorCWlmIHskanVtcF90b19oZXJlIG5lIHt9ICYmCisJICAgIFtsaW5kZXggJGp1bXBfdG9faGVyZSAwXSBlcSBbbGluZGV4ICRjdGV4dF9maWxlX25hbWVzIDBdfSB7CisJICAgIHNldCBsbnVtIFtleHByIHtbbGluZGV4ICRqdW1wX3RvX2hlcmUgMV0gKworCQkJICAgIFtsaW5kZXggW3NwbGl0ICRjb21tZW50ZW5kIC5dIDBdfV0KKwkgICAgbWFya19jdGV4dF9saW5lICRsbnVtCisJfQorCSRjdGV4dCBjb25maWcgLXN0YXRlIGRpc2FibGVkCisJcmV0dXJuIDAKKyAgICB9CisgICAgJGN0ZXh0IGNvbmZpZyAtc3RhdGUgZGlzYWJsZWQKKyAgICByZXR1cm4gW2V4cHIgeyRubCA+PSAxMDAwPyAyOiAxfV0KK30KKworcHJvYyBtYXJrX2N0ZXh0X2xpbmUge2xudW19IHsKKyAgICBnbG9iYWwgY3RleHQgbWFya2JnY29sb3IKKworICAgICRjdGV4dCB0YWcgZGVsZXRlIG9tYXJrCisgICAgJGN0ZXh0IHRhZyBhZGQgb21hcmsgJGxudW0uMCAiJGxudW0uMCArIDEgbGluZSIKKyAgICAkY3RleHQgdGFnIGNvbmYgb21hcmsgLWJhY2tncm91bmQgJG1hcmtiZ2NvbG9yCisgICAgJGN0ZXh0IHNlZSAkbG51bS4wCit9CisKK3Byb2MgbWVyZ2VkaWZmIHtpZH0geworICAgIGdsb2JhbCBkaWZmbWVyZ2VpZAorICAgIGdsb2JhbCBkaWZmaWRzIHRyZWVkaWZmcworICAgIGdsb2JhbCBwYXJlbnRzIGN1cnZpZXcKKworICAgIHNldCBkaWZmbWVyZ2VpZCAkaWQKKyAgICBzZXQgZGlmZmlkcyAkaWQKKyAgICBzZXQgdHJlZWRpZmZzKCRpZCkge30KKyAgICBzZXQgbnAgW2xsZW5ndGggJHBhcmVudHMoJGN1cnZpZXcsJGlkKV0KKyAgICBzZXR0YWJzICRucAorICAgIGdldGJsb2JkaWZmcyAkaWQKK30KKworcHJvYyBzdGFydGRpZmYge2lkc30geworICAgIGdsb2JhbCB0cmVlZGlmZnMgZGlmZmlkcyB0cmVlcGVuZGluZyBkaWZmbWVyZ2VpZCBudWxsaWQgbnVsbGlkMgorCisgICAgc2V0dGFicyAxCisgICAgc2V0IGRpZmZpZHMgJGlkcworICAgIHVuc2V0IC1ub2NvbXBsYWluIGRpZmZtZXJnZWlkCisgICAgaWYgeyFbaW5mbyBleGlzdHMgdHJlZWRpZmZzKCRpZHMpXSB8fAorCVtsc2VhcmNoIC1leGFjdCAkaWRzICRudWxsaWRdID49IDAgfHwKKwlbbHNlYXJjaCAtZXhhY3QgJGlkcyAkbnVsbGlkMl0gPj0gMH0geworCWlmIHshW2luZm8gZXhpc3RzIHRyZWVwZW5kaW5nXX0geworCSAgICBnZXR0cmVlZGlmZnMgJGlkcworCX0KKyAgICB9IGVsc2UgeworCWFkZHRvY2ZsaXN0ICRpZHMKKyAgICB9Cit9CisKK3Byb2Mgc2hvd2lubGluZWRpZmYge2lkc30geworICAgIGdsb2JhbCBjb21taXRpbmZvIGNvbW1pdGRhdGEgY3RleHQKKyAgICBnbG9iYWwgdHJlZWRpZmZzCisKKyAgICBzZXQgaW5mbyAkY29tbWl0aW5mbygkaWRzKQorICAgIHNldCBkaWZmIFtsaW5kZXggJGluZm8gN10KKyAgICBzZXQgZGlmZmxpbmVzIFtzcGxpdCAkZGlmZiAiXG4iXQorCisgICAgaW5pdGJsb2JkaWZmdmFycworICAgIHNldCB0cmVlZGlmZiB7fQorCisgICAgc2V0IGluaGRyIDAKKyAgICBmb3JlYWNoIGxpbmUgJGRpZmZsaW5lcyB7CisJaWYgeyFbc3RyaW5nIGNvbXBhcmUgLWxlbmd0aCA1ICJkaWZmICIgJGxpbmVdfSB7CisJICAgIHNldCBpbmhkciAxCisJfSBlbHNlaWYgeyRpbmhkciAmJiAhW3N0cmluZyBjb21wYXJlIC1sZW5ndGggNCAiKysrICIgJGxpbmVdfSB7CisJICAgICMgb2Zmc2V0IGFsc28gYWNjb3VudHMgZm9yIHRoZSBiLyBwcmVmaXgKKwkgICAgbGFwcGVuZCB0cmVlZGlmZiBbc3RyaW5nIHJhbmdlICRsaW5lIDYgZW5kXQorCSAgICBzZXQgaW5oZHIgMAorCX0KKyAgICB9CisKKyAgICBzZXQgdHJlZWRpZmZzKCRpZHMpICR0cmVlZGlmZgorICAgIGFkZF9mbGlzdCAkdHJlZWRpZmYKKworICAgICRjdGV4dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICBmb3JlYWNoIGxpbmUgJGRpZmZsaW5lcyB7CisJcGFyc2VibG9iZGlmZmxpbmUgJGlkcyAkbGluZQorICAgIH0KKyAgICBtYXliZV9zY3JvbGxfY3RleHQgMQorICAgICRjdGV4dCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorfQorCisjIElmIHRoZSBmaWxlbmFtZSAobmFtZSkgaXMgdW5kZXIgYW55IG9mIHRoZSBwYXNzZWQgZmlsdGVyIHBhdGhzCisjIHRoZW4gcmV0dXJuIHRydWUgdG8gaW5jbHVkZSB0aGUgZmlsZSBpbiB0aGUgbGlzdGluZy4KK3Byb2MgcGF0aF9maWx0ZXIge2ZpbHRlciBuYW1lfSB7CisgICAgc2V0IHdvcmt0cmVlIFtnaXR3b3JrdHJlZV0KKyAgICBmb3JlYWNoIHAgJGZpbHRlciB7CisJc2V0IGZxX3AgW2ZpbGUgbm9ybWFsaXplICRwXQorCXNldCBmcV9uIFtmaWxlIG5vcm1hbGl6ZSBbZmlsZSBqb2luICR3b3JrdHJlZSAkbmFtZV1dCisJaWYge1tzdHJpbmcgbWF0Y2ggW2ZpbGUgbm9ybWFsaXplICRmcV9wXSogJGZxX25dfSB7CisJICAgIHJldHVybiAxCisJfQorICAgIH0KKyAgICByZXR1cm4gMAorfQorCitwcm9jIGFkZHRvY2ZsaXN0IHtpZHN9IHsKKyAgICBnbG9iYWwgdHJlZWRpZmZzCisKKyAgICBhZGRfZmxpc3QgJHRyZWVkaWZmcygkaWRzKQorICAgIGdldGJsb2JkaWZmcyAkaWRzCit9CisKK3Byb2MgZGlmZmNtZCB7aWRzIGZsYWdzfSB7CisgICAgZ2xvYmFsIGxvZ19zaG93cm9vdCBudWxsaWQgbnVsbGlkMiBnaXRfdmVyc2lvbgorCisgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRpZHMgJG51bGxpZF0KKyAgICBzZXQgaiBbbHNlYXJjaCAtZXhhY3QgJGlkcyAkbnVsbGlkMl0KKyAgICBpZiB7JGkgPj0gMH0geworCWlmIHtbbGxlbmd0aCAkaWRzXSA+IDEgJiYgJGogPCAwfSB7CisJICAgICMgY29tcGFyaW5nIHdvcmtpbmcgZGlyZWN0b3J5IHdpdGggc29tZSBzcGVjaWZpYyByZXZpc2lvbgorCSAgICBzZXQgY21kIFtjb25jYXQgfCBnaXQgZGlmZi1pbmRleCAkZmxhZ3NdCisJICAgIGlmIHskaSA9PSAwfSB7CisJCWxhcHBlbmQgY21kIC1SIFtsaW5kZXggJGlkcyAxXQorCSAgICB9IGVsc2UgeworCQlsYXBwZW5kIGNtZCBbbGluZGV4ICRpZHMgMF0KKwkgICAgfQorCX0gZWxzZSB7CisJICAgICMgY29tcGFyaW5nIHdvcmtpbmcgZGlyZWN0b3J5IHdpdGggaW5kZXgKKwkgICAgc2V0IGNtZCBbY29uY2F0IHwgZ2l0IGRpZmYtZmlsZXMgJGZsYWdzXQorCSAgICBpZiB7JGogPT0gMX0geworCQlsYXBwZW5kIGNtZCAtUgorCSAgICB9CisJfQorICAgIH0gZWxzZWlmIHskaiA+PSAwfSB7CisJaWYge1twYWNrYWdlIHZjb21wYXJlICRnaXRfdmVyc2lvbiAiMS43LjIiXSA+PSAwfSB7CisJICAgIHNldCBmbGFncyAiJGZsYWdzIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkiCisJfQorCXNldCBjbWQgW2NvbmNhdCB8IGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkICRmbGFnc10KKwlpZiB7W2xsZW5ndGggJGlkc10gPiAxfSB7CisJICAgICMgY29tcGFyaW5nIGluZGV4IHdpdGggc3BlY2lmaWMgcmV2aXNpb24KKwkgICAgaWYgeyRqID09IDB9IHsKKwkJbGFwcGVuZCBjbWQgLVIgW2xpbmRleCAkaWRzIDFdCisJICAgIH0gZWxzZSB7CisJCWxhcHBlbmQgY21kIFtsaW5kZXggJGlkcyAwXQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgIyBjb21wYXJpbmcgaW5kZXggd2l0aCBIRUFECisJICAgIGxhcHBlbmQgY21kIEhFQUQKKwl9CisgICAgfSBlbHNlIHsKKwlpZiB7JGxvZ19zaG93cm9vdH0geworCSAgICBsYXBwZW5kIGZsYWdzIC0tcm9vdAorCX0KKwlzZXQgY21kIFtjb25jYXQgfCBnaXQgZGlmZi10cmVlIC1yICRmbGFncyAkaWRzXQorICAgIH0KKyAgICByZXR1cm4gJGNtZAorfQorCitwcm9jIGdldHRyZWVkaWZmcyB7aWRzfSB7CisgICAgZ2xvYmFsIHRyZWVkaWZmIHRyZWVwZW5kaW5nIGxpbWl0ZGlmZnMgdmZpbGVsaW1pdCBjdXJ2aWV3CisKKyAgICBzZXQgY21kIFtkaWZmY21kICRpZHMgey0tbm8tY29tbWl0LWlkfV0KKyAgICBpZiB7JGxpbWl0ZGlmZnMgJiYgJHZmaWxlbGltaXQoJGN1cnZpZXcpIG5lIHt9fSB7CisJICAgIHNldCBjbWQgW2NvbmNhdCAkY21kIC0tICR2ZmlsZWxpbWl0KCRjdXJ2aWV3KV0KKyAgICB9CisgICAgaWYge1tjYXRjaCB7c2V0IGdkdGYgW29wZW4gJGNtZCByXX1dfSByZXR1cm4KKworICAgIHNldCB0cmVlcGVuZGluZyAkaWRzCisgICAgc2V0IHRyZWVkaWZmIHt9CisgICAgZmNvbmZpZ3VyZSAkZ2R0ZiAtYmxvY2tpbmcgMCAtZW5jb2RpbmcgYmluYXJ5CisgICAgZmlsZXJ1biAkZ2R0ZiBbbGlzdCBnZXR0cmVlZGlmZmxpbmUgJGdkdGYgJGlkc10KK30KKworcHJvYyBnZXR0cmVlZGlmZmxpbmUge2dkdGYgaWRzfSB7CisgICAgZ2xvYmFsIHRyZWVkaWZmIHRyZWVkaWZmcyB0cmVlcGVuZGluZyBkaWZmaWRzIGRpZmZtZXJnZWlkCisgICAgZ2xvYmFsIGNtaXRtb2RlIHZmaWxlbGltaXQgY3VydmlldyBsaW1pdGRpZmZzIHBlcmZpbGVfYXR0cnMKKworICAgIHNldCBuciAwCisgICAgc2V0IHN1Ymxpc3Qge30KKyAgICBzZXQgbWF4IDEwMDAKKyAgICBpZiB7JHBlcmZpbGVfYXR0cnN9IHsKKwkjIGNhY2hlX2dpdGF0dHIgaXMgc2xvdywgYW5kIGV2ZW4gc2xvd2VyIG9uIHdpbjMyIHdoZXJlIHdlCisJIyBoYXZlIHRvIGludm9rZSBpdCBmb3Igb25seSBhYm91dCAzMCBwYXRocyBhdCBhIHRpbWUKKwlzZXQgbWF4IDUwMAorCWlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSA9PSAid2luMzIifSB7CisJICAgIHNldCBtYXggMTIwCisJfQorICAgIH0KKyAgICB3aGlsZSB7W2luY3IgbnJdIDw9ICRtYXggJiYgW2dldHMgJGdkdGYgbGluZV0gPj0gMH0geworCXNldCBpIFtzdHJpbmcgZmlyc3QgIlx0IiAkbGluZV0KKwlpZiB7JGkgPj0gMH0geworCSAgICBzZXQgZmlsZSBbc3RyaW5nIHJhbmdlICRsaW5lIFtleHByIHskaSsxfV0gZW5kXQorCSAgICBpZiB7W3N0cmluZyBpbmRleCAkZmlsZSAwXSBlcSAiXCIifSB7CisJCXNldCBmaWxlIFtsaW5kZXggJGZpbGUgMF0KKwkgICAgfQorCSAgICBzZXQgZmlsZSBbZW5jb2RpbmcgY29udmVydGZyb20gJGZpbGVdCisJICAgIGlmIHskZmlsZSBuZSBbbGluZGV4ICR0cmVlZGlmZiBlbmRdfSB7CisJCWxhcHBlbmQgdHJlZWRpZmYgJGZpbGUKKwkJbGFwcGVuZCBzdWJsaXN0ICRmaWxlCisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIHskcGVyZmlsZV9hdHRyc30geworCWNhY2hlX2dpdGF0dHIgZW5jb2RpbmcgJHN1Ymxpc3QKKyAgICB9CisgICAgaWYgeyFbZW9mICRnZHRmXX0geworCXJldHVybiBbZXhwciB7JG5yID49ICRtYXg/IDI6IDF9XQorICAgIH0KKyAgICBjbG9zZSAkZ2R0ZgorICAgIHNldCB0cmVlZGlmZnMoJGlkcykgJHRyZWVkaWZmCisgICAgdW5zZXQgdHJlZXBlbmRpbmcKKyAgICBpZiB7JGNtaXRtb2RlIGVxICJ0cmVlIiAmJiBbbGxlbmd0aCAkZGlmZmlkc10gPT0gMX0geworCWdldHRyZWUgJGRpZmZpZHMKKyAgICB9IGVsc2VpZiB7JGlkcyAhPSAkZGlmZmlkc30geworCWlmIHshW2luZm8gZXhpc3RzIGRpZmZtZXJnZWlkXX0geworCSAgICBnZXR0cmVlZGlmZnMgJGRpZmZpZHMKKwl9CisgICAgfSBlbHNlIHsKKwlhZGR0b2NmbGlzdCAkaWRzCisgICAgfQorICAgIHJldHVybiAwCit9CisKKyMgZW1wdHkgc3RyaW5nIG9yIHBvc2l0aXZlIGludGVnZXIKK3Byb2MgZGlmZmNvbnRleHR2YWxpZGF0ZSB7dn0geworICAgIHJldHVybiBbcmVnZXhwIHteKHxbMS05XVswLTldKikkfSAkdl0KK30KKworcHJvYyBkaWZmY29udGV4dGNoYW5nZSB7bjEgbjIgb3B9IHsKKyAgICBnbG9iYWwgZGlmZmNvbnRleHRzdHJpbmcgZGlmZmNvbnRleHQKKworICAgIGlmIHtbc3RyaW5nIGlzIGludGVnZXIgLXN0cmljdCAkZGlmZmNvbnRleHRzdHJpbmddfSB7CisJaWYgeyRkaWZmY29udGV4dHN0cmluZyA+PSAwfSB7CisJICAgIHNldCBkaWZmY29udGV4dCAkZGlmZmNvbnRleHRzdHJpbmcKKwkgICAgcmVzZWxlY3RsaW5lCisJfQorICAgIH0KK30KKworcHJvYyBjaGFuZ2VpZ25vcmVzcGFjZSB7fSB7CisgICAgcmVzZWxlY3RsaW5lCit9CisKK3Byb2MgY2hhbmdld29yZGRpZmYge25hbWUgaXggb3B9IHsKKyAgICByZXNlbGVjdGxpbmUKK30KKworcHJvYyBpbml0YmxvYmRpZmZ2YXJzIHt9IHsKKyAgICBnbG9iYWwgZGlmZmVuY29kaW5nIHRhcmdldGxpbmUgZGlmZm5wYXJlbnRzCisgICAgZ2xvYmFsIGRpZmZpbmhkciBjdXJyZGlmZnN1Ym1vZCBkaWZmc2VlaGVyZQorICAgIHNldCB0YXJnZXRsaW5lIHt9CisgICAgc2V0IGRpZmZucGFyZW50cyAwCisgICAgc2V0IGRpZmZpbmhkciAwCisgICAgc2V0IGRpZmZlbmNvZGluZyBbZ2V0X3BhdGhfZW5jb2Rpbmcge31dCisgICAgc2V0IGN1cnJkaWZmc3VibW9kICIiCisgICAgc2V0IGRpZmZzZWVoZXJlIC0xCit9CisKK3Byb2MgZ2V0YmxvYmRpZmZzIHtpZHN9IHsKKyAgICBnbG9iYWwgYmxvYmRpZmZmZCBkaWZmaWRzIGVudgorICAgIGdsb2JhbCB0cmVlZGlmZnMKKyAgICBnbG9iYWwgZGlmZmNvbnRleHQKKyAgICBnbG9iYWwgaWdub3Jlc3BhY2UKKyAgICBnbG9iYWwgd29yZGRpZmYKKyAgICBnbG9iYWwgbGltaXRkaWZmcyB2ZmlsZWxpbWl0IGN1cnZpZXcKKyAgICBnbG9iYWwgZ2l0X3ZlcnNpb24KKworICAgIHNldCB0ZXh0Y29udiB7fQorICAgIGlmIHtbcGFja2FnZSB2Y29tcGFyZSAkZ2l0X3ZlcnNpb24gIjEuNi4xIl0gPj0gMH0geworCXNldCB0ZXh0Y29udiAiLS10ZXh0Y29udiIKKyAgICB9CisgICAgc2V0IHN1Ym1vZHVsZSB7fQorICAgIGlmIHtbcGFja2FnZSB2Y29tcGFyZSAkZ2l0X3ZlcnNpb24gIjEuNi42Il0gPj0gMH0geworCXNldCBzdWJtb2R1bGUgIi0tc3VibW9kdWxlIgorICAgIH0KKyAgICBzZXQgY21kIFtkaWZmY21kICRpZHMgIi1wICR0ZXh0Y29udiAkc3VibW9kdWxlICAtQyAtLWNjIC0tbm8tY29tbWl0LWlkIC1VJGRpZmZjb250ZXh0Il0KKyAgICBpZiB7JGlnbm9yZXNwYWNlfSB7CisJYXBwZW5kIGNtZCAiIC13IgorICAgIH0KKyAgICBpZiB7JHdvcmRkaWZmIG5lIFttYyAiTGluZSBkaWZmIl19IHsKKwlhcHBlbmQgY21kICIgLS13b3JkLWRpZmY9cG9yY2VsYWluIgorICAgIH0KKyAgICBpZiB7JGxpbWl0ZGlmZnMgJiYgJHZmaWxlbGltaXQoJGN1cnZpZXcpIG5lIHt9fSB7CisJc2V0IGNtZCBbY29uY2F0ICRjbWQgLS0gJHZmaWxlbGltaXQoJGN1cnZpZXcpXQorICAgIH0KKyAgICBpZiB7W2NhdGNoIHtzZXQgYmRmIFtvcGVuICRjbWQgcl19IGVycl19IHsKKwllcnJvcl9wb3B1cCBbbWMgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIiAkZXJyXQorCXJldHVybgorICAgIH0KKyAgICBmY29uZmlndXJlICRiZGYgLWJsb2NraW5nIDAgLWVuY29kaW5nIGJpbmFyeSAtZW9mY2hhciB7fQorICAgIHNldCBibG9iZGlmZmZkKCRpZHMpICRiZGYKKyAgICBpbml0YmxvYmRpZmZ2YXJzCisgICAgZmlsZXJ1biAkYmRmIFtsaXN0IGdldGJsb2JkaWZmbGluZSAkYmRmICRkaWZmaWRzXQorfQorCitwcm9jIHNhdmVjbWl0cG9zIHt9IHsKKyAgICBnbG9iYWwgY3RleHQgY21pdG1vZGUKKworICAgIGlmIHskY21pdG1vZGUgZXEgInRyZWUifSB7CisJcmV0dXJuIHt9CisgICAgfQorICAgIHJldHVybiBbbGlzdCB0YXJnZXRfc2Nyb2xscG9zIFskY3RleHQgaW5kZXggQDAsMF1dCit9CisKK3Byb2Mgc2F2ZWN0ZXh0cG9zIHt9IHsKKyAgICBnbG9iYWwgY3RleHQKKworICAgIHJldHVybiBbbGlzdCB0YXJnZXRfc2Nyb2xscG9zIFskY3RleHQgaW5kZXggQDAsMF1dCit9CisKK3Byb2MgbWF5YmVfc2Nyb2xsX2N0ZXh0IHthdGVvZn0geworICAgIGdsb2JhbCBjdGV4dCB0YXJnZXRfc2Nyb2xscG9zCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyB0YXJnZXRfc2Nyb2xscG9zXX0gcmV0dXJuCisgICAgaWYgeyEkYXRlb2Z9IHsKKwlzZXQgbmxpbmVzIFtleHByIHtbd2luZm8gaGVpZ2h0ICRjdGV4dF0KKwkJCSAgLyBbZm9udCBtZXRyaWNzIHRleHRmb250IC1saW5lc3BhY2VdfV0KKwlpZiB7WyRjdGV4dCBjb21wYXJlICIkdGFyZ2V0X3Njcm9sbHBvcyArICRubGluZXMgbGluZXMiIDw9IGVuZF19IHJldHVybgorICAgIH0KKyAgICAkY3RleHQgeXZpZXcgJHRhcmdldF9zY3JvbGxwb3MKKyAgICB1bnNldCB0YXJnZXRfc2Nyb2xscG9zCit9CisKK3Byb2Mgc2V0aW5saXN0IHt2YXIgaSB2YWx9IHsKKyAgICBnbG9iYWwgJHZhcgorCisgICAgd2hpbGUge1tsbGVuZ3RoIFtzZXQgJHZhcl1dIDwgJGl9IHsKKwlsYXBwZW5kICR2YXIge30KKyAgICB9CisgICAgaWYge1tsbGVuZ3RoIFtzZXQgJHZhcl1dID09ICRpfSB7CisJbGFwcGVuZCAkdmFyICR2YWwKKyAgICB9IGVsc2UgeworCWxzZXQgJHZhciAkaSAkdmFsCisgICAgfQorfQorCitwcm9jIG1ha2VkaWZmaGRyIHtmbmFtZSBpZHN9IHsKKyAgICBnbG9iYWwgY3RleHQgY3VyZGlmZnN0YXJ0IHRyZWVkaWZmcyBkaWZmZW5jb2RpbmcKKyAgICBnbG9iYWwgY3RleHRfZmlsZV9uYW1lcyBqdW1wX3RvX2hlcmUgdGFyZ2V0bGluZSBkaWZmbGluZQorCisgICAgc2V0IGZuYW1lIFtlbmNvZGluZyBjb252ZXJ0ZnJvbSAkZm5hbWVdCisgICAgc2V0IGRpZmZlbmNvZGluZyBbZ2V0X3BhdGhfZW5jb2RpbmcgJGZuYW1lXQorICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkdHJlZWRpZmZzKCRpZHMpICRmbmFtZV0KKyAgICBpZiB7JGkgPj0gMH0geworCXNldGlubGlzdCBkaWZmZmlsZXN0YXJ0ICRpICRjdXJkaWZmc3RhcnQKKyAgICB9CisgICAgbHNldCBjdGV4dF9maWxlX25hbWVzIGVuZCAkZm5hbWUKKyAgICBzZXQgbCBbZXhwciB7KDc4IC0gW3N0cmluZyBsZW5ndGggJGZuYW1lXSkgLyAyfV0KKyAgICBzZXQgcGFkIFtzdHJpbmcgcmFuZ2UgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIDEgJGxdCisgICAgJGN0ZXh0IGluc2VydCAkY3VyZGlmZnN0YXJ0ICIkcGFkICRmbmFtZSAkcGFkIiBmaWxlc2VwCisgICAgc2V0IHRhcmdldGxpbmUge30KKyAgICBpZiB7JGp1bXBfdG9faGVyZSBuZSB7fSAmJiBbbGluZGV4ICRqdW1wX3RvX2hlcmUgMF0gZXEgJGZuYW1lfSB7CisJc2V0IHRhcmdldGxpbmUgW2xpbmRleCAkanVtcF90b19oZXJlIDFdCisgICAgfQorICAgIHNldCBkaWZmbGluZSAwCit9CisKK3Byb2MgYmxvYmRpZmZtYXliZXNlZWhlcmUge2F0ZW9mfSB7CisgICAgZ2xvYmFsIGRpZmZzZWVoZXJlCisgICAgaWYgeyRkaWZmc2VlaGVyZSA+PSAwfSB7CisJbWFya19jdGV4dF9saW5lIFtsaW5kZXggW3NwbGl0ICRkaWZmc2VlaGVyZSAuXSAwXQorICAgIH0KKyAgICBtYXliZV9zY3JvbGxfY3RleHQgJGF0ZW9mCit9CisKK3Byb2MgZ2V0YmxvYmRpZmZsaW5lIHtiZGYgaWRzfSB7CisgICAgZ2xvYmFsIGRpZmZpZHMgYmxvYmRpZmZmZAorICAgIGdsb2JhbCBjdGV4dAorCisgICAgc2V0IG5yIDAKKyAgICAkY3RleHQgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgd2hpbGUge1tpbmNyIG5yXSA8PSAxMDAwICYmIFtnZXRzICRiZGYgbGluZV0gPj0gMH0geworCWlmIHskaWRzICE9ICRkaWZmaWRzIHx8ICRiZGYgIT0gJGJsb2JkaWZmZmQoJGlkcyl9IHsKKwkgICAgIyBPbGRlciBkaWZmIHJlYWQuIEFib3J0IGl0LgorCSAgICBjYXRjaCB7Y2xvc2UgJGJkZn0KKwkgICAgaWYgeyRpZHMgIT0gJGRpZmZpZHN9IHsKKwkJYXJyYXkgdW5zZXQgYmxvYmRpZmZmZCAkaWRzCisJICAgIH0KKwkgICAgcmV0dXJuIDAKKwl9CisJcGFyc2VibG9iZGlmZmxpbmUgJGlkcyAkbGluZQorICAgIH0KKyAgICAkY3RleHQgY29uZiAtc3RhdGUgZGlzYWJsZWQKKyAgICBibG9iZGlmZm1heWJlc2VlaGVyZSBbZW9mICRiZGZdCisgICAgaWYge1tlb2YgJGJkZl19IHsKKwljYXRjaCB7Y2xvc2UgJGJkZn0KKwlhcnJheSB1bnNldCBibG9iZGlmZmZkICRpZHMKKwlyZXR1cm4gMAorICAgIH0KKyAgICByZXR1cm4gW2V4cHIgeyRuciA+PSAxMDAwPyAyOiAxfV0KK30KKworcHJvYyBwYXJzZWJsb2JkaWZmbGluZSB7aWRzIGxpbmV9IHsKKyAgICBnbG9iYWwgY3RleHQgY3VyZGlmZnN0YXJ0CisgICAgZ2xvYmFsIGRpZmZuZXh0aGVhZCBkaWZmbmV4dG5vdGUgZGlmZmZpbGVzdGFydAorICAgIGdsb2JhbCBjdGV4dF9maWxlX25hbWVzIGN0ZXh0X2ZpbGVfbGluZXMKKyAgICBnbG9iYWwgZGlmZmluaGRyIHRyZWVkaWZmcyBtZXJnZW1heCBkaWZmbnBhcmVudHMKKyAgICBnbG9iYWwgZGlmZmVuY29kaW5nIGp1bXBfdG9faGVyZSB0YXJnZXRsaW5lIGRpZmZsaW5lIGN1cnJkaWZmc3VibW9kCisgICAgZ2xvYmFsIHdvcmRkaWZmIGRpZmZzZWVoZXJlCisKKyAgICBpZiB7IVtzdHJpbmcgY29tcGFyZSAtbGVuZ3RoIDUgImRpZmYgIiAkbGluZV19IHsKKwlpZiB7IVtyZWdleHAge15kaWZmICgtLWNjfC0tZ2l0KSB9ICRsaW5lIG0gdHlwZV19IHsKKwkgICAgc2V0IGxpbmUgW2VuY29kaW5nIGNvbnZlcnRmcm9tICRsaW5lXQorCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiJGxpbmVcbiIgaHVua3NlcAorCSAgICBjb250aW51ZQorCX0KKwkjIHN0YXJ0IG9mIGEgbmV3IGZpbGUKKwlzZXQgZGlmZmluaGRyIDEKKwkkY3RleHQgaW5zZXJ0IGVuZCAiXG4iCisJc2V0IGN1cmRpZmZzdGFydCBbJGN0ZXh0IGluZGV4ICJlbmQgLSAxYyJdCisJbGFwcGVuZCBjdGV4dF9maWxlX25hbWVzICIiCisJbGFwcGVuZCBjdGV4dF9maWxlX2xpbmVzIFtsaW5kZXggW3NwbGl0ICRjdXJkaWZmc3RhcnQgIi4iXSAwXQorCSRjdGV4dCBpbnNlcnQgZW5kICJcbiIgZmlsZXNlcAorCisJaWYgeyR0eXBlIGVxICItLWNjIn0geworCSAgICAjIHN0YXJ0IG9mIGEgbmV3IGZpbGUgaW4gYSBtZXJnZSBkaWZmCisJICAgIHNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIDEwIGVuZF0KKwkgICAgaWYge1tsc2VhcmNoIC1leGFjdCAkdHJlZWRpZmZzKCRpZHMpICRmbmFtZV0gPCAwfSB7CisJCWxhcHBlbmQgdHJlZWRpZmZzKCRpZHMpICRmbmFtZQorCQlhZGRfZmxpc3QgW2xpc3QgJGZuYW1lXQorCSAgICB9CisKKwl9IGVsc2UgeworCSAgICBzZXQgbGluZSBbc3RyaW5nIHJhbmdlICRsaW5lIDExIGVuZF0KKwkgICAgIyBJZiB0aGUgbmFtZSBoYXNuJ3QgY2hhbmdlZCB0aGUgbGVuZ3RoIHdpbGwgYmUgb2RkLAorCSAgICAjIHRoZSBtaWRkbGUgY2hhciB3aWxsIGJlIGEgc3BhY2UsIGFuZCB0aGUgdHdvIGJpdHMgZWl0aGVyCisJICAgICMgc2lkZSB3aWxsIGJlIGEvbmFtZSBhbmQgYi9uYW1lLCBvciAiYS9uYW1lIiBhbmQgImIvbmFtZSIuCisJICAgICMgSWYgdGhlIG5hbWUgaGFzIGNoYW5nZWQgd2UnbGwgZ2V0ICJyZW5hbWUgZnJvbSIgYW5kCisJICAgICMgInJlbmFtZSB0byIgb3IgImNvcHkgZnJvbSIgYW5kICJjb3B5IHRvIiBsaW5lcyBmb2xsb3dpbmcKKwkgICAgIyB0aGlzLCBhbmQgd2UnbGwgdXNlIHRoZW0gdG8gZ2V0IHRoZSBmaWxlbmFtZXMuCisJICAgICMgVGhpcyBjb21wbGV4aXR5IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNwYWNlcyBpbiB0aGUKKwkgICAgIyBmaWxlbmFtZShzKSBkb24ndCBnZXQgZXNjYXBlZC4KKwkgICAgc2V0IGwgW3N0cmluZyBsZW5ndGggJGxpbmVdCisJICAgIHNldCBpIFtleHByIHskbCAvIDJ9XQorCSAgICBpZiB7ISgoJGwgJiAxKSAmJiBbc3RyaW5nIGluZGV4ICRsaW5lICRpXSBlcSAiICIgJiYKKwkJICBbc3RyaW5nIHJhbmdlICRsaW5lIDIgW2V4cHIgeyRpIC0gMX1dXSBlcSBcCisJCSAgICAgIFtzdHJpbmcgcmFuZ2UgJGxpbmUgW2V4cHIgeyRpICsgM31dIGVuZF0pfSB7CisJCXJldHVybgorCSAgICB9CisJICAgICMgdW5lc2NhcGUgaWYgcXVvdGVkIGFuZCBjaG9wIG9mZiB0aGUgYS8gZnJvbSB0aGUgZnJvbnQKKwkgICAgaWYge1tzdHJpbmcgaW5kZXggJGxpbmUgMF0gZXEgIlwiIn0geworCQlzZXQgZm5hbWUgW3N0cmluZyByYW5nZSBbbGluZGV4ICRsaW5lIDBdIDIgZW5kXQorCSAgICB9IGVsc2UgeworCQlzZXQgZm5hbWUgW3N0cmluZyByYW5nZSAkbGluZSAyIFtleHByIHskaSAtIDF9XV0KKwkgICAgfQorCX0KKwltYWtlZGlmZmhkciAkZm5hbWUgJGlkcworCisgICAgfSBlbHNlaWYgeyFbc3RyaW5nIGNvbXBhcmUgLWxlbmd0aCAxNiAiKiBVbm1lcmdlZCBwYXRoICIgJGxpbmVdfSB7CisJc2V0IGZuYW1lIFtlbmNvZGluZyBjb252ZXJ0ZnJvbSBbc3RyaW5nIHJhbmdlICRsaW5lIDE2IGVuZF1dCisJJGN0ZXh0IGluc2VydCBlbmQgIlxuIgorCXNldCBjdXJkaWZmc3RhcnQgWyRjdGV4dCBpbmRleCAiZW5kIC0gMWMiXQorCWxhcHBlbmQgY3RleHRfZmlsZV9uYW1lcyAkZm5hbWUKKwlsYXBwZW5kIGN0ZXh0X2ZpbGVfbGluZXMgW2xpbmRleCBbc3BsaXQgJGN1cmRpZmZzdGFydCAiLiJdIDBdCisJJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lXG4iIGZpbGVzZXAKKwlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHRyZWVkaWZmcygkaWRzKSAkZm5hbWVdCisJaWYgeyRpID49IDB9IHsKKwkgICAgc2V0aW5saXN0IGRpZmZmaWxlc3RhcnQgJGkgJGN1cmRpZmZzdGFydAorCX0KKworICAgIH0gZWxzZWlmIHshW3N0cmluZyBjb21wYXJlIC1sZW5ndGggMiAiQEAiICRsaW5lXX0geworCXJlZ2V4cCB7XkBAK30gJGxpbmUgYXRzCisJc2V0IGxpbmUgW2VuY29kaW5nIGNvbnZlcnRmcm9tICRkaWZmZW5jb2RpbmcgJGxpbmVdCisJJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lXG4iIGh1bmtzZXAKKwlpZiB7W3JlZ2V4cCB7IFwrKFxkKyksXGQrIEBAfSAkbGluZSBtIG5sXX0geworCSAgICBzZXQgZGlmZmxpbmUgJG5sCisJfQorCXNldCBkaWZmbnBhcmVudHMgW2V4cHIge1tzdHJpbmcgbGVuZ3RoICRhdHNdIC0gMX1dCisJc2V0IGRpZmZpbmhkciAwCisKKyAgICB9IGVsc2VpZiB7IVtzdHJpbmcgY29tcGFyZSAtbGVuZ3RoIDEwICJTdWJtb2R1bGUgIiAkbGluZV19IHsKKwkjIHN0YXJ0IG9mIGEgbmV3IHN1Ym1vZHVsZQorCWlmIHtbcmVnZXhwIC1pbmRpY2VzICJcWzAtOWEtZlxdK1xcLlxcLiIgJGxpbmUgbmFtZWVuZF19IHsKKwkgICAgc2V0IGZuYW1lIFtzdHJpbmcgcmFuZ2UgJGxpbmUgMTAgW2V4cHIgW2xpbmRleCAkbmFtZWVuZCAwXSAtIDJdXQorCX0gZWxzZSB7CisJICAgIHNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIDEwIFtleHByIFtzdHJpbmcgZmlyc3QgImNvbnRhaW5zICIgJGxpbmVdIC0gMl1dCisJfQorCWlmIHskY3VycmRpZmZzdWJtb2QgIT0gJGZuYW1lfSB7CisJICAgICRjdGV4dCBpbnNlcnQgZW5kICJcbiI7ICAgICAjIEFkZCBuZXdsaW5lIGFmdGVyIGNvbW1pdCBtZXNzYWdlCisJfQorCXNldCBjdXJkaWZmc3RhcnQgWyRjdGV4dCBpbmRleCAiZW5kIC0gMWMiXQorCWxhcHBlbmQgY3RleHRfZmlsZV9uYW1lcyAiIgorCWlmIHskY3VycmRpZmZzdWJtb2QgIT0gJGZuYW1lfSB7CisJICAgIGxhcHBlbmQgY3RleHRfZmlsZV9saW5lcyAkZm5hbWUKKwkgICAgbWFrZWRpZmZoZHIgJGZuYW1lICRpZHMKKwkgICAgc2V0IGN1cnJkaWZmc3VibW9kICRmbmFtZQorCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG4kbGluZVxuIiBmaWxlc2VwCisJfSBlbHNlIHsKKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lXG4iIGZpbGVzZXAKKwl9CisgICAgfSBlbHNlaWYgeyRjdXJyZGlmZnN1Ym1vZCAhPSAiIiAmJiAhW3N0cmluZyBjb21wYXJlIC1sZW5ndGggMyAiICA+IiAkbGluZV19IHsKKwlzZXQgJGN1cnJkaWZmc3VibW9kICIiCisJc2V0IGxpbmUgW2VuY29kaW5nIGNvbnZlcnRmcm9tICRkaWZmZW5jb2RpbmcgJGxpbmVdCisJJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lXG4iIGRyZXN1bHQKKyAgICB9IGVsc2VpZiB7JGN1cnJkaWZmc3VibW9kICE9ICIiICYmICFbc3RyaW5nIGNvbXBhcmUgLWxlbmd0aCAzICIgIDwiICRsaW5lXX0geworCXNldCAkY3VycmRpZmZzdWJtb2QgIiIKKwlzZXQgbGluZSBbZW5jb2RpbmcgY29udmVydGZyb20gJGRpZmZlbmNvZGluZyAkbGluZV0KKwkkY3RleHQgaW5zZXJ0IGVuZCAiJGxpbmVcbiIgZDAKKyAgICB9IGVsc2VpZiB7JGRpZmZpbmhkcn0geworCWlmIHshW3N0cmluZyBjb21wYXJlIC1sZW5ndGggMTIgInJlbmFtZSBmcm9tICIgJGxpbmVdfSB7CisJICAgIHNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIFtleHByIDYgKyBbc3RyaW5nIGZpcnN0ICIgZnJvbSAiICRsaW5lXSBdIGVuZF0KKwkgICAgaWYge1tzdHJpbmcgaW5kZXggJGZuYW1lIDBdIGVxICJcIiJ9IHsKKwkJc2V0IGZuYW1lIFtsaW5kZXggJGZuYW1lIDBdCisJICAgIH0KKwkgICAgc2V0IGZuYW1lIFtlbmNvZGluZyBjb252ZXJ0ZnJvbSAkZm5hbWVdCisJICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkdHJlZWRpZmZzKCRpZHMpICRmbmFtZV0KKwkgICAgaWYgeyRpID49IDB9IHsKKwkJc2V0aW5saXN0IGRpZmZmaWxlc3RhcnQgJGkgJGN1cmRpZmZzdGFydAorCSAgICB9CisJfSBlbHNlaWYgeyFbc3RyaW5nIGNvbXBhcmUgLWxlbmd0aCAxMCAkbGluZSAicmVuYW1lIHRvICJdIHx8CisJCSAgIVtzdHJpbmcgY29tcGFyZSAtbGVuZ3RoIDggJGxpbmUgImNvcHkgdG8gIl19IHsKKwkgICAgc2V0IGZuYW1lIFtzdHJpbmcgcmFuZ2UgJGxpbmUgW2V4cHIgNCArIFtzdHJpbmcgZmlyc3QgIiB0byAiICRsaW5lXSBdIGVuZF0KKwkgICAgaWYge1tzdHJpbmcgaW5kZXggJGZuYW1lIDBdIGVxICJcIiJ9IHsKKwkJc2V0IGZuYW1lIFtsaW5kZXggJGZuYW1lIDBdCisJICAgIH0KKwkgICAgbWFrZWRpZmZoZHIgJGZuYW1lICRpZHMKKwl9IGVsc2VpZiB7W3N0cmluZyBjb21wYXJlIC1sZW5ndGggMyAkbGluZSAiLS0tIl0gPT0gMH0geworCSAgICAjIGRvIG5vdGhpbmcKKwkgICAgcmV0dXJuCisJfSBlbHNlaWYge1tzdHJpbmcgY29tcGFyZSAtbGVuZ3RoIDMgJGxpbmUgIisrKyJdID09IDB9IHsKKwkgICAgc2V0IGRpZmZpbmhkciAwCisJICAgIHJldHVybgorCX0KKwkkY3RleHQgaW5zZXJ0IGVuZCAiJGxpbmVcbiIgZmlsZXNlcAorCisgICAgfSBlbHNlIHsKKwlzZXQgbGluZSBbc3RyaW5nIG1hcCB7XHgxQSBeWn0gXAorCQkgICAgICBbZW5jb2RpbmcgY29udmVydGZyb20gJGRpZmZlbmNvZGluZyAkbGluZV1dCisJIyBwYXJzZSB0aGUgcHJlZml4IC0gb25lICcgJywgJy0nIG9yICcrJyBmb3IgZWFjaCBwYXJlbnQKKwlzZXQgcHJlZml4IFtzdHJpbmcgcmFuZ2UgJGxpbmUgMCBbZXhwciB7JGRpZmZucGFyZW50cyAtIDF9XV0KKwlzZXQgdGFnIFtleHByIHskZGlmZm5wYXJlbnRzID4gMT8gIm0iOiAiZCJ9XQorCXNldCBkb3dvcmRzIFtleHByIHskd29yZGRpZmYgbmUgW21jICJMaW5lIGRpZmYiXSAmJiAkZGlmZm5wYXJlbnRzID09IDF9XQorCXNldCB3b3Jkc19wcmVfbWFya3VwICIiCisJc2V0IHdvcmRzX3Bvc3RfbWFya3VwICIiCisJaWYge1tzdHJpbmcgdHJpbSAkcHJlZml4ICIgLSsiXSBlcSB7fX0geworCSAgICAjIHByZWZpeCBvbmx5IGhhcyAiICIsICItIiBhbmQgIisiIGluIGl0OiBub3JtYWwgZGlmZiBsaW5lCisJICAgIHNldCBudW0gW3N0cmluZyBmaXJzdCAiLSIgJHByZWZpeF0KKwkgICAgaWYgeyRkb3dvcmRzfSB7CisJCXNldCBsaW5lIFtzdHJpbmcgcmFuZ2UgJGxpbmUgMSBlbmRdCisJICAgIH0KKwkgICAgaWYgeyRudW0gPj0gMH0geworCQkjIHJlbW92ZWQgbGluZSwgZmlyc3QgcGFyZW50IHdpdGggbGluZSBpcyAkbnVtCisJCWlmIHskbnVtID49ICRtZXJnZW1heH0geworCQkgICAgc2V0IG51bSAibWF4IgorCQl9CisJCWlmIHskZG93b3JkcyAmJiAkd29yZGRpZmYgZXEgW21jICJNYXJrdXAgd29yZHMiXX0geworCQkgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxbLSRsaW5lLVxdIiAkdGFnJG51bQorCQl9IGVsc2UgeworCQkgICAgJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lIiAkdGFnJG51bQorCQl9CisJCWlmIHshJGRvd29yZHN9IHsKKwkJICAgICRjdGV4dCBpbnNlcnQgZW5kICJcbiIgJHRhZyRudW0KKwkJfQorCSAgICB9IGVsc2UgeworCQlzZXQgdGFncyB7fQorCQlpZiB7W3N0cmluZyBmaXJzdCAiKyIgJHByZWZpeF0gPj0gMH0geworCQkgICAgIyBhZGRlZCBsaW5lCisJCSAgICBsYXBwZW5kIHRhZ3MgJHt0YWd9cmVzdWx0CisJCSAgICBpZiB7JGRpZmZucGFyZW50cyA+IDF9IHsKKwkJCXNldCBudW0gW3N0cmluZyBmaXJzdCAiICIgJHByZWZpeF0KKwkJCWlmIHskbnVtID49IDB9IHsKKwkJCSAgICBpZiB7JG51bSA+PSAkbWVyZ2VtYXh9IHsKKwkJCQlzZXQgbnVtICJtYXgiCisJCQkgICAgfQorCQkJICAgIGxhcHBlbmQgdGFncyBtJG51bQorCQkJfQorCQkgICAgfQorCQkgICAgc2V0IHdvcmRzX3ByZV9tYXJrdXAgInsrIgorCQkgICAgc2V0IHdvcmRzX3Bvc3RfbWFya3VwICIrfSIKKwkJfQorCQlpZiB7JHRhcmdldGxpbmUgbmUge319IHsKKwkJICAgIGlmIHskZGlmZmxpbmUgPT0gJHRhcmdldGxpbmV9IHsKKwkJCXNldCBkaWZmc2VlaGVyZSBbJGN0ZXh0IGluZGV4ICJlbmQgLSAxIGNoYXJzIl0KKwkJCXNldCB0YXJnZXRsaW5lIHt9CisJCSAgICB9IGVsc2UgeworCQkJaW5jciBkaWZmbGluZQorCQkgICAgfQorCQl9CisJCWlmIHskZG93b3JkcyAmJiAkd29yZGRpZmYgZXEgW21jICJNYXJrdXAgd29yZHMiXX0geworCQkgICAgJGN0ZXh0IGluc2VydCBlbmQgIiR3b3Jkc19wcmVfbWFya3VwJGxpbmUkd29yZHNfcG9zdF9tYXJrdXAiICR0YWdzCisJCX0gZWxzZSB7CisJCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiJGxpbmUiICR0YWdzCisJCX0KKwkJaWYgeyEkZG93b3Jkc30geworCQkgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxuIiAkdGFncworCQl9CisJICAgIH0KKwl9IGVsc2VpZiB7JGRvd29yZHMgJiYgJHByZWZpeCBlcSAifiJ9IHsKKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxuIiB7fQorCX0gZWxzZSB7CisJICAgICMgIlwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZSIsCisJICAgICMgb3Igc29tZXRoaW5nIGVsc2Ugd2UgZG9uJ3QgcmVjb2duaXplCisJICAgICRjdGV4dCBpbnNlcnQgZW5kICIkbGluZVxuIiBodW5rc2VwCisJfQorICAgIH0KK30KKworcHJvYyBjaGFuZ2VkaWZmZGlzcCB7fSB7CisgICAgZ2xvYmFsIGN0ZXh0IGRpZmZlbGlkZQorCisgICAgJGN0ZXh0IHRhZyBjb25mIGQwIC1lbGlkZSBbbGluZGV4ICRkaWZmZWxpZGUgMF0KKyAgICAkY3RleHQgdGFnIGNvbmYgZHJlc3VsdCAtZWxpZGUgW2xpbmRleCAkZGlmZmVsaWRlIDFdCit9CisKK3Byb2MgaGlnaGxpZ2h0ZmlsZSB7Y2xpbmV9IHsKKyAgICBnbG9iYWwgY2ZsaXN0IGNmbGlzdF90b3AKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGNmbGlzdF90b3BdfSByZXR1cm4KKworICAgICRjZmxpc3QgdGFnIHJlbW92ZSBoaWdobGlnaHQgJGNmbGlzdF90b3AuMCAiJGNmbGlzdF90b3AuMCBsaW5lZW5kIgorICAgICRjZmxpc3QgdGFnIGFkZCBoaWdobGlnaHQgJGNsaW5lLjAgIiRjbGluZS4wIGxpbmVlbmQiCisgICAgJGNmbGlzdCBzZWUgJGNsaW5lLjAKKyAgICBzZXQgY2ZsaXN0X3RvcCAkY2xpbmUKK30KKworcHJvYyBoaWdobGlnaHRmaWxlX2Zvcl9zY3JvbGxwb3Mge3RvcGlkeH0geworICAgIGdsb2JhbCBjbWl0bW9kZSBkaWZmZmlsZXN0YXJ0CisKKyAgICBpZiB7JGNtaXRtb2RlIGVxICJ0cmVlIn0gcmV0dXJuCisgICAgaWYgeyFbaW5mbyBleGlzdHMgZGlmZmZpbGVzdGFydF19IHJldHVybgorCisgICAgc2V0IHRvcCBbbGluZGV4IFtzcGxpdCAkdG9waWR4IC5dIDBdCisgICAgaWYgeyRkaWZmZmlsZXN0YXJ0IGVxIHt9IHx8ICR0b3AgPCBbbGluZGV4ICRkaWZmZmlsZXN0YXJ0IDBdfSB7CisJaGlnaGxpZ2h0ZmlsZSAwCisgICAgfSBlbHNlIHsKKwloaWdobGlnaHRmaWxlIFtleHByIHtbYnNlYXJjaCAkZGlmZmZpbGVzdGFydCAkdG9wXSArIDJ9XQorICAgIH0KK30KKworcHJvYyBwcmV2ZmlsZSB7fSB7CisgICAgZ2xvYmFsIGRpZmZmaWxlc3RhcnQgY3RleHQgY21pdG1vZGUKKworICAgIGlmIHskY21pdG1vZGUgZXEgInRyZWUifSByZXR1cm4KKyAgICBzZXQgcHJldiAwLjAKKyAgICBzZXQgaGVyZSBbJGN0ZXh0IGluZGV4IEAwLDBdCisgICAgZm9yZWFjaCBsb2MgJGRpZmZmaWxlc3RhcnQgeworCWlmIHtbJGN0ZXh0IGNvbXBhcmUgJGxvYyA+PSAkaGVyZV19IHsKKwkgICAgJGN0ZXh0IHl2aWV3ICRwcmV2CisJICAgIHJldHVybgorCX0KKwlzZXQgcHJldiAkbG9jCisgICAgfQorICAgICRjdGV4dCB5dmlldyAkcHJldgorfQorCitwcm9jIG5leHRmaWxlIHt9IHsKKyAgICBnbG9iYWwgZGlmZmZpbGVzdGFydCBjdGV4dCBjbWl0bW9kZQorCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHJldHVybgorICAgIHNldCBoZXJlIFskY3RleHQgaW5kZXggQDAsMF0KKyAgICBmb3JlYWNoIGxvYyAkZGlmZmZpbGVzdGFydCB7CisJaWYge1skY3RleHQgY29tcGFyZSAkbG9jID4gJGhlcmVdfSB7CisJICAgICRjdGV4dCB5dmlldyAkbG9jCisJICAgIHJldHVybgorCX0KKyAgICB9Cit9CisKK3Byb2MgY2xlYXJfY3RleHQge3tmaXJzdCAxLjB9fSB7CisgICAgZ2xvYmFsIGN0ZXh0IHNtYXJrdG9wIHNtYXJrYm90CisgICAgZ2xvYmFsIGN0ZXh0X2ZpbGVfbmFtZXMgY3RleHRfZmlsZV9saW5lcworICAgIGdsb2JhbCBwZW5kaW5nbGlua3MKKworICAgIHNldCBsIFtsaW5kZXggW3NwbGl0ICRmaXJzdCAuXSAwXQorICAgIGlmIHshW2luZm8gZXhpc3RzIHNtYXJrdG9wXSB8fCBbJGN0ZXh0IGNvbXBhcmUgJGZpcnN0IDwgJHNtYXJrdG9wLjBdfSB7CisJc2V0IHNtYXJrdG9wICRsCisgICAgfQorICAgIGlmIHshW2luZm8gZXhpc3RzIHNtYXJrYm90XSB8fCBbJGN0ZXh0IGNvbXBhcmUgJGZpcnN0IDwgJHNtYXJrYm90LjBdfSB7CisJc2V0IHNtYXJrYm90ICRsCisgICAgfQorICAgICRjdGV4dCBkZWxldGUgJGZpcnN0IGVuZAorICAgIGlmIHskZmlyc3QgZXEgIjEuMCJ9IHsKKwl1bnNldCAtbm9jb21wbGFpbiBwZW5kaW5nbGlua3MKKyAgICB9CisgICAgc2V0IGN0ZXh0X2ZpbGVfbmFtZXMge30KKyAgICBzZXQgY3RleHRfZmlsZV9saW5lcyB7fQorfQorCitwcm9jIHNldHRhYnMge3tmaXJzdGFiIHt9fX0geworICAgIGdsb2JhbCBmaXJzdHRhYnN0b3AgdGFic3RvcCBjdGV4dCBoYXZlX3RrODUKKworICAgIGlmIHskZmlyc3RhYiBuZSB7fSAmJiAkaGF2ZV90azg1fSB7CisJc2V0IGZpcnN0dGFic3RvcCAkZmlyc3RhYgorICAgIH0KKyAgICBzZXQgdyBbZm9udCBtZWFzdXJlIHRleHRmb250ICIwIl0KKyAgICBpZiB7JGZpcnN0dGFic3RvcCAhPSAwfSB7CisJJGN0ZXh0IGNvbmYgLXRhYnMgW2xpc3QgW2V4cHIgeygkZmlyc3R0YWJzdG9wICsgJHRhYnN0b3ApICogJHd9XSBcCisJCQkgICAgICAgW2V4cHIgeygkZmlyc3R0YWJzdG9wICsgMiAqICR0YWJzdG9wKSAqICR3fV1dCisgICAgfSBlbHNlaWYgeyRoYXZlX3RrODUgfHwgJHRhYnN0b3AgIT0gOH0geworCSRjdGV4dCBjb25mIC10YWJzIFtleHByIHskdGFic3RvcCAqICR3fV0KKyAgICB9IGVsc2UgeworCSRjdGV4dCBjb25mIC10YWJzIHt9CisgICAgfQorfQorCitwcm9jIGluY3JzZWFyY2gge25hbWUgaXggb3B9IHsKKyAgICBnbG9iYWwgY3RleHQgc2VhcmNoc3RyaW5nIHNlYXJjaGRpcm4KKworICAgIGlmIHtbY2F0Y2ggeyRjdGV4dCBpbmRleCBhbmNob3J9XX0geworCSMgbm8gYW5jaG9yIHNldCwgdXNlIHN0YXJ0IG9mIHNlbGVjdGlvbiwgb3Igb2YgdmlzaWJsZSBhcmVhCisJc2V0IHNlbCBbJGN0ZXh0IHRhZyByYW5nZXMgc2VsXQorCWlmIHskc2VsIG5lIHt9fSB7CisJICAgICRjdGV4dCBtYXJrIHNldCBhbmNob3IgW2xpbmRleCAkc2VsIDBdCisJfSBlbHNlaWYgeyRzZWFyY2hkaXJuIGVxICItZm9yd2FyZHMifSB7CisJICAgICRjdGV4dCBtYXJrIHNldCBhbmNob3IgQDAsMAorCX0gZWxzZSB7CisJICAgICRjdGV4dCBtYXJrIHNldCBhbmNob3IgQDAsW3dpbmZvIGhlaWdodCAkY3RleHRdCisJfQorICAgIH0KKyAgICBpZiB7JHNlYXJjaHN0cmluZyBuZSB7fX0geworCXNldCBoZXJlIFskY3RleHQgc2VhcmNoIC1jb3VudCBtbGVuICRzZWFyY2hkaXJuIC0tICRzZWFyY2hzdHJpbmcgYW5jaG9yXQorCWlmIHskaGVyZSBuZSB7fX0geworCSAgICAkY3RleHQgc2VlICRoZXJlCisJICAgIHNldCBtZW5kICIkaGVyZSArICRtbGVuIGMiCisJICAgICRjdGV4dCB0YWcgcmVtb3ZlIHNlbCAxLjAgZW5kCisJICAgICRjdGV4dCB0YWcgYWRkIHNlbCAkaGVyZSAkbWVuZAorCSAgICBzdXBwcmVzc19oaWdobGlnaHRpbmdfZmlsZV9mb3JfY3VycmVudF9zY3JvbGxwb3MKKwkgICAgaGlnaGxpZ2h0ZmlsZV9mb3Jfc2Nyb2xscG9zICRoZXJlCisJfQorICAgIH0KKyAgICByZWhpZ2hsaWdodF9zZWFyY2hfcmVzdWx0cworfQorCitwcm9jIGRvc2VhcmNoIHt9IHsKKyAgICBnbG9iYWwgc3N0cmluZyBjdGV4dCBzZWFyY2hzdHJpbmcgc2VhcmNoZGlybgorCisgICAgZm9jdXMgJHNzdHJpbmcKKyAgICAkc3N0cmluZyBpY3Vyc29yIGVuZAorICAgIHNldCBzZWFyY2hkaXJuIC1mb3J3YXJkcworICAgIGlmIHskc2VhcmNoc3RyaW5nIG5lIHt9fSB7CisJc2V0IHNlbCBbJGN0ZXh0IHRhZyByYW5nZXMgc2VsXQorCWlmIHskc2VsIG5lIHt9fSB7CisJICAgIHNldCBzdGFydCAiW2xpbmRleCAkc2VsIDBdICsgMWMiCisJfSBlbHNlaWYge1tjYXRjaCB7c2V0IHN0YXJ0IFskY3RleHQgaW5kZXggYW5jaG9yXX1dfSB7CisJICAgIHNldCBzdGFydCAiQDAsMCIKKwl9CisJc2V0IG1hdGNoIFskY3RleHQgc2VhcmNoIC1jb3VudCBtbGVuIC0tICRzZWFyY2hzdHJpbmcgJHN0YXJ0XQorCSRjdGV4dCB0YWcgcmVtb3ZlIHNlbCAxLjAgZW5kCisJaWYgeyRtYXRjaCBlcSB7fX0geworCSAgICBiZWxsCisJICAgIHJldHVybgorCX0KKwkkY3RleHQgc2VlICRtYXRjaAorCXN1cHByZXNzX2hpZ2hsaWdodGluZ19maWxlX2Zvcl9jdXJyZW50X3Njcm9sbHBvcworCWhpZ2hsaWdodGZpbGVfZm9yX3Njcm9sbHBvcyAkbWF0Y2gKKwlzZXQgbWVuZCAiJG1hdGNoICsgJG1sZW4gYyIKKwkkY3RleHQgdGFnIGFkZCBzZWwgJG1hdGNoICRtZW5kCisJJGN0ZXh0IG1hcmsgdW5zZXQgYW5jaG9yCisJcmVoaWdobGlnaHRfc2VhcmNoX3Jlc3VsdHMKKyAgICB9Cit9CisKK3Byb2MgZG9zZWFyY2hiYWNrIHt9IHsKKyAgICBnbG9iYWwgc3N0cmluZyBjdGV4dCBzZWFyY2hzdHJpbmcgc2VhcmNoZGlybgorCisgICAgZm9jdXMgJHNzdHJpbmcKKyAgICAkc3N0cmluZyBpY3Vyc29yIGVuZAorICAgIHNldCBzZWFyY2hkaXJuIC1iYWNrd2FyZHMKKyAgICBpZiB7JHNlYXJjaHN0cmluZyBuZSB7fX0geworCXNldCBzZWwgWyRjdGV4dCB0YWcgcmFuZ2VzIHNlbF0KKwlpZiB7JHNlbCBuZSB7fX0geworCSAgICBzZXQgc3RhcnQgW2xpbmRleCAkc2VsIDBdCisJfSBlbHNlaWYge1tjYXRjaCB7c2V0IHN0YXJ0IFskY3RleHQgaW5kZXggYW5jaG9yXX1dfSB7CisJICAgIHNldCBzdGFydCBAMCxbd2luZm8gaGVpZ2h0ICRjdGV4dF0KKwl9CisJc2V0IG1hdGNoIFskY3RleHQgc2VhcmNoIC1iYWNrd2FyZHMgLWNvdW50IG1sIC0tICRzZWFyY2hzdHJpbmcgJHN0YXJ0XQorCSRjdGV4dCB0YWcgcmVtb3ZlIHNlbCAxLjAgZW5kCisJaWYgeyRtYXRjaCBlcSB7fX0geworCSAgICBiZWxsCisJICAgIHJldHVybgorCX0KKwkkY3RleHQgc2VlICRtYXRjaAorCXN1cHByZXNzX2hpZ2hsaWdodGluZ19maWxlX2Zvcl9jdXJyZW50X3Njcm9sbHBvcworCWhpZ2hsaWdodGZpbGVfZm9yX3Njcm9sbHBvcyAkbWF0Y2gKKwlzZXQgbWVuZCAiJG1hdGNoICsgJG1sIGMiCisJJGN0ZXh0IHRhZyBhZGQgc2VsICRtYXRjaCAkbWVuZAorCSRjdGV4dCBtYXJrIHVuc2V0IGFuY2hvcgorCXJlaGlnaGxpZ2h0X3NlYXJjaF9yZXN1bHRzCisgICAgfQorfQorCitwcm9jIHJlaGlnaGxpZ2h0X3NlYXJjaF9yZXN1bHRzIHt9IHsKKyAgICBnbG9iYWwgY3RleHQgc2VhcmNoc3RyaW5nCisKKyAgICAkY3RleHQgdGFnIHJlbW92ZSBmb3VuZCAxLjAgZW5kCisgICAgJGN0ZXh0IHRhZyByZW1vdmUgY3VycmVudHNlYXJjaGhpdCAxLjAgZW5kCisKKyAgICBpZiB7JHNlYXJjaHN0cmluZyBuZSB7fX0geworCXNlYXJjaG1hcmt2aXNpYmxlIDEKKyAgICB9Cit9CisKK3Byb2Mgc2VhcmNobWFyayB7Zmlyc3QgbGFzdH0geworICAgIGdsb2JhbCBjdGV4dCBzZWFyY2hzdHJpbmcKKworICAgIHNldCBzZWwgWyRjdGV4dCB0YWcgcmFuZ2VzIHNlbF0KKworICAgIHNldCBtZW5kICRmaXJzdC4wCisgICAgd2hpbGUgezF9IHsKKwlzZXQgbWF0Y2ggWyRjdGV4dCBzZWFyY2ggLWNvdW50IG1sZW4gLS0gJHNlYXJjaHN0cmluZyAkbWVuZCAkbGFzdC5lbmRdCisJaWYgeyRtYXRjaCBlcSB7fX0gYnJlYWsKKwlzZXQgbWVuZCAiJG1hdGNoICsgJG1sZW4gYyIKKwlpZiB7JHNlbCBuZSB7fSAmJiBbJGN0ZXh0IGNvbXBhcmUgJG1hdGNoID09IFtsaW5kZXggJHNlbCAwXV19IHsKKwkgICAgJGN0ZXh0IHRhZyBhZGQgY3VycmVudHNlYXJjaGhpdCAkbWF0Y2ggJG1lbmQKKwl9IGVsc2UgeworCSAgICAkY3RleHQgdGFnIGFkZCBmb3VuZCAkbWF0Y2ggJG1lbmQKKwl9CisgICAgfQorfQorCitwcm9jIHNlYXJjaG1hcmt2aXNpYmxlIHtkb2FsbH0geworICAgIGdsb2JhbCBjdGV4dCBzbWFya3RvcCBzbWFya2JvdAorCisgICAgc2V0IHRvcGxpbmUgW2xpbmRleCBbc3BsaXQgWyRjdGV4dCBpbmRleCBAMCwwXSAuXSAwXQorICAgIHNldCBib3RsaW5lIFtsaW5kZXggW3NwbGl0IFskY3RleHQgaW5kZXggQDAsW3dpbmZvIGhlaWdodCAkY3RleHRdXSAuXSAwXQorICAgIGlmIHskZG9hbGwgfHwgJGJvdGxpbmUgPCAkc21hcmt0b3AgfHwgJHRvcGxpbmUgPiAkc21hcmtib3R9IHsKKwkjIG5vIG92ZXJsYXAgd2l0aCBwcmV2aW91cworCXNlYXJjaG1hcmsgJHRvcGxpbmUgJGJvdGxpbmUKKwlzZXQgc21hcmt0b3AgJHRvcGxpbmUKKwlzZXQgc21hcmtib3QgJGJvdGxpbmUKKyAgICB9IGVsc2UgeworCWlmIHskdG9wbGluZSA8ICRzbWFya3RvcH0geworCSAgICBzZWFyY2htYXJrICR0b3BsaW5lIFtleHByIHskc21hcmt0b3AtMX1dCisJICAgIHNldCBzbWFya3RvcCAkdG9wbGluZQorCX0KKwlpZiB7JGJvdGxpbmUgPiAkc21hcmtib3R9IHsKKwkgICAgc2VhcmNobWFyayBbZXhwciB7JHNtYXJrYm90KzF9XSAkYm90bGluZQorCSAgICBzZXQgc21hcmtib3QgJGJvdGxpbmUKKwl9CisgICAgfQorfQorCitwcm9jIHN1cHByZXNzX2hpZ2hsaWdodGluZ19maWxlX2Zvcl9jdXJyZW50X3Njcm9sbHBvcyB7fSB7CisgICAgZ2xvYmFsIGN0ZXh0IHN1cHByZXNzX2hpZ2hsaWdodGluZ19maWxlX2Zvcl90aGlzX3Njcm9sbHBvcworCisgICAgc2V0IHN1cHByZXNzX2hpZ2hsaWdodGluZ19maWxlX2Zvcl90aGlzX3Njcm9sbHBvcyBbJGN0ZXh0IGluZGV4IEAwLDBdCit9CisKK3Byb2Mgc2Nyb2xsdGV4dCB7ZjAgZjF9IHsKKyAgICBnbG9iYWwgc2VhcmNoc3RyaW5nIGNtaXRtb2RlIGN0ZXh0CisgICAgZ2xvYmFsIHN1cHByZXNzX2hpZ2hsaWdodGluZ19maWxlX2Zvcl90aGlzX3Njcm9sbHBvcworCisgICAgc2V0IHRvcGlkeCBbJGN0ZXh0IGluZGV4IEAwLDBdCisgICAgaWYgeyFbaW5mbyBleGlzdHMgc3VwcHJlc3NfaGlnaGxpZ2h0aW5nX2ZpbGVfZm9yX3RoaXNfc2Nyb2xscG9zXQorCXx8ICR0b3BpZHggbmUgJHN1cHByZXNzX2hpZ2hsaWdodGluZ19maWxlX2Zvcl90aGlzX3Njcm9sbHBvc30geworCWhpZ2hsaWdodGZpbGVfZm9yX3Njcm9sbHBvcyAkdG9waWR4CisgICAgfQorCisgICAgdW5zZXQgLW5vY29tcGxhaW4gc3VwcHJlc3NfaGlnaGxpZ2h0aW5nX2ZpbGVfZm9yX3RoaXNfc2Nyb2xscG9zCisKKyAgICAuYmxlZnQuYm90dG9tLnNiIHNldCAkZjAgJGYxCisgICAgaWYgeyRzZWFyY2hzdHJpbmcgbmUge319IHsKKwlzZWFyY2htYXJrdmlzaWJsZSAwCisgICAgfQorfQorCitwcm9jIHNldGNvb3JkcyB7fSB7CisgICAgZ2xvYmFsIGxpbmVzcGMgY2hhcnNwYyBjYW52eDAgY2FudnkwCisgICAgZ2xvYmFsIHhzcGMxIHhzcGMyIGx0aGlja25lc3MKKworICAgIHNldCBsaW5lc3BjIFtmb250IG1ldHJpY3MgbWFpbmZvbnQgLWxpbmVzcGFjZV0KKyAgICBzZXQgY2hhcnNwYyBbZm9udCBtZWFzdXJlIG1haW5mb250ICJtIl0KKyAgICBzZXQgY2FudnkwIFtleHByIHtpbnQoMyArIDAuNSAqICRsaW5lc3BjKX1dCisgICAgc2V0IGNhbnZ4MCBbZXhwciB7aW50KDMgKyAwLjUgKiAkbGluZXNwYyl9XQorICAgIHNldCBsdGhpY2tuZXNzIFtleHByIHtpbnQoJGxpbmVzcGMgLyA5KSArIDF9XQorICAgIHNldCB4c3BjMSgwKSAkbGluZXNwYworICAgIHNldCB4c3BjMiAkbGluZXNwYworfQorCitwcm9jIHJlZGlzcGxheSB7fSB7CisgICAgZ2xvYmFsIGNhbnYKKyAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lCisKKyAgICBzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCisgICAgaWYgeyR5bWF4IGVxIHt9IHx8ICR5bWF4ID09IDB9IHJldHVybgorICAgIHNldCBzcGFuIFskY2FudiB5dmlld10KKyAgICBjbGVhcl9kaXNwbGF5CisgICAgc2V0Y2FudnNjcm9sbAorICAgIGFsbGNhbnZzIHl2aWV3IG1vdmV0byBbbGluZGV4ICRzcGFuIDBdCisgICAgZHJhd3Zpc2libGUKKyAgICBpZiB7JHNlbGVjdGVkbGluZSBuZSB7fX0geworCXNlbGVjdGxpbmUgJHNlbGVjdGVkbGluZSAwCisJYWxsY2FudnMgeXZpZXcgbW92ZXRvIFtsaW5kZXggJHNwYW4gMF0KKyAgICB9Cit9CisKK3Byb2MgcGFyc2Vmb250IHtmIG59IHsKKyAgICBnbG9iYWwgZm9udGF0dHIKKworICAgIHNldCBmb250YXR0cigkZixmYW1pbHkpIFtsaW5kZXggJG4gMF0KKyAgICBzZXQgcyBbbGluZGV4ICRuIDFdCisgICAgaWYgeyRzIGVxIHt9IHx8ICRzID09IDB9IHsKKwlzZXQgcyAxMAorICAgIH0gZWxzZWlmIHskcyA8IDB9IHsKKwlzZXQgcyBbZXhwciB7aW50KC0kcyAvIFt3aW5mbyBmcGl4ZWxzIC4gMXBdICsgMC41KX1dCisgICAgfQorICAgIHNldCBmb250YXR0cigkZixzaXplKSAkcworICAgIHNldCBmb250YXR0cigkZix3ZWlnaHQpIG5vcm1hbAorICAgIHNldCBmb250YXR0cigkZixzbGFudCkgcm9tYW4KKyAgICBmb3JlYWNoIHN0eWxlIFtscmFuZ2UgJG4gMiBlbmRdIHsKKwlzd2l0Y2ggLS0gJHN0eWxlIHsKKwkgICAgIm5vcm1hbCIgLQorCSAgICAiYm9sZCIgICB7c2V0IGZvbnRhdHRyKCRmLHdlaWdodCkgJHN0eWxlfQorCSAgICAicm9tYW4iIC0KKwkgICAgIml0YWxpYyIge3NldCBmb250YXR0cigkZixzbGFudCkgJHN0eWxlfQorCX0KKyAgICB9Cit9CisKK3Byb2MgZm9udGZsYWdzIHtmIHtpc2JvbGQgMH19IHsKKyAgICBnbG9iYWwgZm9udGF0dHIKKworICAgIHJldHVybiBbbGlzdCAtZmFtaWx5ICRmb250YXR0cigkZixmYW1pbHkpIC1zaXplICRmb250YXR0cigkZixzaXplKSBcCisJCS13ZWlnaHQgW2V4cHIgeyRpc2JvbGQ/ICJib2xkIjogJGZvbnRhdHRyKCRmLHdlaWdodCl9XSBcCisJCS1zbGFudCAkZm9udGF0dHIoJGYsc2xhbnQpXQorfQorCitwcm9jIGZvbnRuYW1lIHtmfSB7CisgICAgZ2xvYmFsIGZvbnRhdHRyCisKKyAgICBzZXQgbiBbbGlzdCAkZm9udGF0dHIoJGYsZmFtaWx5KSAkZm9udGF0dHIoJGYsc2l6ZSldCisgICAgaWYgeyRmb250YXR0cigkZix3ZWlnaHQpIGVxICJib2xkIn0geworCWxhcHBlbmQgbiAiYm9sZCIKKyAgICB9CisgICAgaWYgeyRmb250YXR0cigkZixzbGFudCkgZXEgIml0YWxpYyJ9IHsKKwlsYXBwZW5kIG4gIml0YWxpYyIKKyAgICB9CisgICAgcmV0dXJuICRuCit9CisKK3Byb2MgaW5jcmZvbnQge2luY30geworICAgIGdsb2JhbCBtYWluZm9udCB0ZXh0Zm9udCBjdGV4dCBjYW52IGNmbGlzdCBzaG93cmVmc3RvcAorICAgIGdsb2JhbCBzdG9wcGVkIGVudHJpZXMgZm9udGF0dHIKKworICAgIHVubWFya21hdGNoZXMKKyAgICBzZXQgcyAkZm9udGF0dHIobWFpbmZvbnQsc2l6ZSkKKyAgICBpbmNyIHMgJGluYworICAgIGlmIHskcyA8IDF9IHsKKwlzZXQgcyAxCisgICAgfQorICAgIHNldCBmb250YXR0cihtYWluZm9udCxzaXplKSAkcworICAgIGZvbnQgY29uZmlnIG1haW5mb250IC1zaXplICRzCisgICAgZm9udCBjb25maWcgbWFpbmZvbnRib2xkIC1zaXplICRzCisgICAgc2V0IG1haW5mb250IFtmb250bmFtZSBtYWluZm9udF0KKyAgICBzZXQgcyAkZm9udGF0dHIodGV4dGZvbnQsc2l6ZSkKKyAgICBpbmNyIHMgJGluYworICAgIGlmIHskcyA8IDF9IHsKKwlzZXQgcyAxCisgICAgfQorICAgIHNldCBmb250YXR0cih0ZXh0Zm9udCxzaXplKSAkcworICAgIGZvbnQgY29uZmlnIHRleHRmb250IC1zaXplICRzCisgICAgZm9udCBjb25maWcgdGV4dGZvbnRib2xkIC1zaXplICRzCisgICAgc2V0IHRleHRmb250IFtmb250bmFtZSB0ZXh0Zm9udF0KKyAgICBzZXRjb29yZHMKKyAgICBzZXR0YWJzCisgICAgcmVkaXNwbGF5Cit9CisKK3Byb2MgY2xlYXJzaGExIHt9IHsKKyAgICBnbG9iYWwgc2hhMWVudHJ5IHNoYTFzdHJpbmcKKyAgICBpZiB7W3N0cmluZyBsZW5ndGggJHNoYTFzdHJpbmddID09IDQwfSB7CisJJHNoYTFlbnRyeSBkZWxldGUgMCBlbmQKKyAgICB9Cit9CisKK3Byb2Mgc2hhMWNoYW5nZSB7bjEgbjIgb3B9IHsKKyAgICBnbG9iYWwgc2hhMXN0cmluZyBjdXJyZW50aWQgc2hhMWJ1dAorICAgIGlmIHskc2hhMXN0cmluZyA9PSB7fQorCXx8IChbaW5mbyBleGlzdHMgY3VycmVudGlkXSAmJiAkc2hhMXN0cmluZyA9PSAkY3VycmVudGlkKX0geworCXNldCBzdGF0ZSBkaXNhYmxlZAorICAgIH0gZWxzZSB7CisJc2V0IHN0YXRlIG5vcm1hbAorICAgIH0KKyAgICBpZiB7WyRzaGExYnV0IGNnZXQgLXN0YXRlXSA9PSAkc3RhdGV9IHJldHVybgorICAgIGlmIHskc3RhdGUgPT0gIm5vcm1hbCJ9IHsKKwkkc2hhMWJ1dCBjb25mIC1zdGF0ZSBub3JtYWwgLXJlbGllZiByYWlzZWQgLXRleHQgIlttYyAiR290bzoiXSAiCisgICAgfSBlbHNlIHsKKwkkc2hhMWJ1dCBjb25mIC1zdGF0ZSBkaXNhYmxlZCAtcmVsaWVmIGZsYXQgLXRleHQgIlttYyAiU0hBMSBJRDoiXSAiCisgICAgfQorfQorCitwcm9jIGdvdG9jb21taXQge30geworICAgIGdsb2JhbCBzaGExc3RyaW5nIHRhZ2lkcyBoZWFkaWRzIGN1cnZpZXcgdmFyY2lkCisKKyAgICBpZiB7JHNoYTFzdHJpbmcgPT0ge30KKwl8fCAoW2luZm8gZXhpc3RzIGN1cnJlbnRpZF0gJiYgJHNoYTFzdHJpbmcgPT0gJGN1cnJlbnRpZCl9IHJldHVybgorICAgIGlmIHtbaW5mbyBleGlzdHMgdGFnaWRzKCRzaGExc3RyaW5nKV19IHsKKwlzZXQgaWQgJHRhZ2lkcygkc2hhMXN0cmluZykKKyAgICB9IGVsc2VpZiB7W2luZm8gZXhpc3RzIGhlYWRpZHMoJHNoYTFzdHJpbmcpXX0geworCXNldCBpZCAkaGVhZGlkcygkc2hhMXN0cmluZykKKyAgICB9IGVsc2UgeworCXNldCBpZCBbc3RyaW5nIHRvbG93ZXIgJHNoYTFzdHJpbmddCisJaWYge1tyZWdleHAge15bMC05YS1mXXs0LDM5fSR9ICRpZF19IHsKKwkgICAgc2V0IG1hdGNoZXMgW2xvbmdpZCAkaWRdCisJICAgIGlmIHskbWF0Y2hlcyBuZSB7fX0geworCQlpZiB7W2xsZW5ndGggJG1hdGNoZXNdID4gMX0geworCQkgICAgZXJyb3JfcG9wdXAgW21jICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIgJGlkXQorCQkgICAgcmV0dXJuCisJCX0KKwkJc2V0IGlkIFtsaW5kZXggJG1hdGNoZXMgMF0KKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGlmIHtbY2F0Y2gge3NldCBpZCBbZXhlYyBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRzaGExc3RyaW5nXX1dfSB7CisJCWVycm9yX3BvcHVwIFttYyAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIiAkc2hhMXN0cmluZ10KKwkJcmV0dXJuCisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIHtbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHsKKwlzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkaWRdIDEKKwlyZXR1cm4KKyAgICB9CisgICAgaWYge1tyZWdleHAge15bMC05YS1mQS1GXXs0LH0kfSAkc2hhMXN0cmluZ119IHsKKwlzZXQgbXNnIFttYyAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iICRzaGExc3RyaW5nXQorICAgIH0gZWxzZSB7CisJc2V0IG1zZyBbbWMgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IiAkc2hhMXN0cmluZ10KKyAgICB9CisgICAgZXJyb3JfcG9wdXAgJG1zZworfQorCitwcm9jIGxpbmVlbnRlciB7eCB5IGlkfSB7CisgICAgZ2xvYmFsIGhvdmVyeCBob3ZlcnkgaG92ZXJpZCBob3ZlcnRpbWVyCisgICAgZ2xvYmFsIGNvbW1pdGluZm8gY2FudgorCisgICAgaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0aW5mbygkaWQpXSAmJiAhW2dldGNvbW1pdCAkaWRdfSByZXR1cm4KKyAgICBzZXQgaG92ZXJ4ICR4CisgICAgc2V0IGhvdmVyeSAkeQorICAgIHNldCBob3ZlcmlkICRpZAorICAgIGlmIHtbaW5mbyBleGlzdHMgaG92ZXJ0aW1lcl19IHsKKwlhZnRlciBjYW5jZWwgJGhvdmVydGltZXIKKyAgICB9CisgICAgc2V0IGhvdmVydGltZXIgW2FmdGVyIDUwMCBsaW5laG92ZXJdCisgICAgJGNhbnYgZGVsZXRlIGhvdmVyCit9CisKK3Byb2MgbGluZW1vdGlvbiB7eCB5IGlkfSB7CisgICAgZ2xvYmFsIGhvdmVyeCBob3ZlcnkgaG92ZXJpZCBob3ZlcnRpbWVyCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGhvdmVyaWRdICYmICRpZCA9PSAkaG92ZXJpZH0geworCXNldCBob3ZlcnggJHgKKwlzZXQgaG92ZXJ5ICR5CisJaWYge1tpbmZvIGV4aXN0cyBob3ZlcnRpbWVyXX0geworCSAgICBhZnRlciBjYW5jZWwgJGhvdmVydGltZXIKKwl9CisJc2V0IGhvdmVydGltZXIgW2FmdGVyIDUwMCBsaW5laG92ZXJdCisgICAgfQorfQorCitwcm9jIGxpbmVsZWF2ZSB7aWR9IHsKKyAgICBnbG9iYWwgaG92ZXJpZCBob3ZlcnRpbWVyIGNhbnYKKworICAgIGlmIHtbaW5mbyBleGlzdHMgaG92ZXJpZF0gJiYgJGlkID09ICRob3ZlcmlkfSB7CisJJGNhbnYgZGVsZXRlIGhvdmVyCisJaWYge1tpbmZvIGV4aXN0cyBob3ZlcnRpbWVyXX0geworCSAgICBhZnRlciBjYW5jZWwgJGhvdmVydGltZXIKKwkgICAgdW5zZXQgaG92ZXJ0aW1lcgorCX0KKwl1bnNldCBob3ZlcmlkCisgICAgfQorfQorCitwcm9jIGxpbmVob3ZlciB7fSB7CisgICAgZ2xvYmFsIGhvdmVyeCBob3ZlcnkgaG92ZXJpZCBob3ZlcnRpbWVyCisgICAgZ2xvYmFsIGNhbnYgbGluZXNwYyBsdGhpY2tuZXNzCisgICAgZ2xvYmFsIGxpbmVob3ZlcmJnY29sb3IgbGluZWhvdmVyZmdjb2xvciBsaW5laG92ZXJvdXRsaW5lY29sb3IKKworICAgIGdsb2JhbCBjb21taXRpbmZvCisKKyAgICBzZXQgdGV4dCBbbGluZGV4ICRjb21taXRpbmZvKCRob3ZlcmlkKSAwXQorICAgIHNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKyAgICBpZiB7JHltYXggPT0ge319IHJldHVybgorICAgIHNldCB5ZnJhYyBbbGluZGV4IFskY2FudiB5dmlld10gMF0KKyAgICBzZXQgeCBbZXhwciB7JGhvdmVyeCArIDIgKiAkbGluZXNwY31dCisgICAgc2V0IHkgW2V4cHIgeyRob3ZlcnkgKyAkeWZyYWMgKiAkeW1heCAtICRsaW5lc3BjIC8gMn1dCisgICAgc2V0IHgwIFtleHByIHskeCAtIDIgKiAkbHRoaWNrbmVzc31dCisgICAgc2V0IHkwIFtleHByIHskeSAtIDIgKiAkbHRoaWNrbmVzc31dCisgICAgc2V0IHgxIFtleHByIHskeCArIFtmb250IG1lYXN1cmUgbWFpbmZvbnQgJHRleHRdICsgMiAqICRsdGhpY2tuZXNzfV0KKyAgICBzZXQgeTEgW2V4cHIgeyR5ICsgJGxpbmVzcGMgKyAyICogJGx0aGlja25lc3N9XQorICAgIHNldCB0IFskY2FudiBjcmVhdGUgcmVjdGFuZ2xlICR4MCAkeTAgJHgxICR5MSBcCisJICAgICAgIC1maWxsICRsaW5laG92ZXJiZ2NvbG9yIC1vdXRsaW5lICRsaW5laG92ZXJvdXRsaW5lY29sb3IgXAorCSAgICAgICAtd2lkdGggMSAtdGFncyBob3Zlcl0KKyAgICAkY2FudiByYWlzZSAkdAorICAgIHNldCB0IFskY2FudiBjcmVhdGUgdGV4dCAkeCAkeSAtYW5jaG9yIG53IC10ZXh0ICR0ZXh0IC10YWdzIGhvdmVyIFwKKwkgICAgICAgLWZvbnQgbWFpbmZvbnQgLWZpbGwgJGxpbmVob3ZlcmZnY29sb3JdCisgICAgJGNhbnYgcmFpc2UgJHQKK30KKworcHJvYyBjbGlja2lzb25hcnJvdyB7aWQgeX0geworICAgIGdsb2JhbCBsdGhpY2tuZXNzCisKKyAgICBzZXQgcmFuZ2VzIFtyb3dyYW5nZXMgJGlkXQorICAgIHNldCB0aHJlc2ggW2V4cHIgezIgKiAkbHRoaWNrbmVzcyArIDZ9XQorICAgIHNldCBuIFtleHByIHtbbGxlbmd0aCAkcmFuZ2VzXSAtIDF9XQorICAgIGZvciB7c2V0IGkgMX0geyRpIDwgJG59IHtpbmNyIGl9IHsKKwlzZXQgcm93IFtsaW5kZXggJHJhbmdlcyAkaV0KKwlpZiB7YWJzKFt5YyAkcm93XSAtICR5KSA8ICR0aHJlc2h9IHsKKwkgICAgcmV0dXJuICRpCisJfQorICAgIH0KKyAgICByZXR1cm4ge30KK30KKworcHJvYyBhcnJvd2p1bXAge2lkIG4geX0geworICAgIGdsb2JhbCBjYW52CisKKyAgICAjIDEgPC0+IDIsIDMgPC0+IDQsIGV0Yy4uLgorICAgIHNldCBuIFtleHByIHsoKCRuIC0gMSkgXiAxKSArIDF9XQorICAgIHNldCByb3cgW2xpbmRleCBbcm93cmFuZ2VzICRpZF0gJG5dCisgICAgc2V0IHl0IFt5YyAkcm93XQorICAgIHNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKyAgICBpZiB7JHltYXggZXEge30gfHwgJHltYXggPD0gMH0gcmV0dXJuCisgICAgc2V0IHZpZXcgWyRjYW52IHl2aWV3XQorICAgIHNldCB5c3BhbiBbZXhwciB7W2xpbmRleCAkdmlldyAxXSAtIFtsaW5kZXggJHZpZXcgMF19XQorICAgIHNldCB5ZnJhYyBbZXhwciB7JHl0IC8gJHltYXggLSAkeXNwYW4gLyAyfV0KKyAgICBpZiB7JHlmcmFjIDwgMH0geworCXNldCB5ZnJhYyAwCisgICAgfQorICAgIGFsbGNhbnZzIHl2aWV3IG1vdmV0byAkeWZyYWMKK30KKworcHJvYyBsaW5lY2xpY2sge3ggeSBpZCBpc25ld30geworICAgIGdsb2JhbCBjdGV4dCBjb21taXRpbmZvIGNoaWxkcmVuIGNhbnYgdGhpY2tlcmxpbmUgY3VydmlldworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0aW5mbygkaWQpXSAmJiAhW2dldGNvbW1pdCAkaWRdfSByZXR1cm4KKyAgICB1bm1hcmttYXRjaGVzCisgICAgdW5zZWxlY3RsaW5lCisgICAgbm9ybWFsbGluZQorICAgICRjYW52IGRlbGV0ZSBob3ZlcgorICAgICMgZHJhdyB0aGlzIGxpbmUgdGhpY2tlciB0aGFuIG5vcm1hbAorICAgIHNldCB0aGlja2VybGluZSAkaWQKKyAgICBkcmF3bGluZXMgJGlkCisgICAgaWYgeyRpc25ld30geworCXNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKwlpZiB7JHltYXggZXEge319IHJldHVybgorCXNldCB5ZnJhYyBbbGluZGV4IFskY2FudiB5dmlld10gMF0KKwlzZXQgeSBbZXhwciB7JHkgKyAkeWZyYWMgKiAkeW1heH1dCisgICAgfQorICAgIHNldCBkaXJuIFtjbGlja2lzb25hcnJvdyAkaWQgJHldCisgICAgaWYgeyRkaXJuIG5lIHt9fSB7CisJYXJyb3dqdW1wICRpZCAkZGlybiAkeQorCXJldHVybgorICAgIH0KKworICAgIGlmIHskaXNuZXd9IHsKKwlhZGR0b2hpc3RvcnkgW2xpc3QgbGluZWNsaWNrICR4ICR5ICRpZCAwXSBzYXZlY3RleHRwb3MKKyAgICB9CisgICAgIyBmaWxsIHRoZSBkZXRhaWxzIHBhbmUgd2l0aCBpbmZvIGFib3V0IHRoaXMgbGluZQorICAgICRjdGV4dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICBjbGVhcl9jdGV4dAorICAgIHNldHRhYnMgMAorICAgICRjdGV4dCBpbnNlcnQgZW5kICJbbWMgIlBhcmVudCJdOlx0IgorICAgICRjdGV4dCBpbnNlcnQgZW5kICRpZCBsaW5rMAorICAgIHNldGxpbmsgJGlkIGxpbmswCisgICAgc2V0IGluZm8gJGNvbW1pdGluZm8oJGlkKQorICAgICRjdGV4dCBpbnNlcnQgZW5kICJcblx0W2xpbmRleCAkaW5mbyAwXVxuIgorICAgICRjdGV4dCBpbnNlcnQgZW5kICJcdFttYyAiQXV0aG9yIl06XHRbbGluZGV4ICRpbmZvIDFdXG4iCisgICAgc2V0IGRhdGUgW2Zvcm1hdGRhdGUgW2xpbmRleCAkaW5mbyAyXV0KKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXHRbbWMgIkRhdGUiXTpcdCRkYXRlXG4iCisgICAgc2V0IGtpZHMgJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkKKyAgICBpZiB7JGtpZHMgbmUge319IHsKKwkkY3RleHQgaW5zZXJ0IGVuZCAiXG5bbWMgIkNoaWxkcmVuIl06IgorCXNldCBpIDAKKwlmb3JlYWNoIGNoaWxkICRraWRzIHsKKwkgICAgaW5jciBpCisJICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGluZm8oJGNoaWxkKV0gJiYgIVtnZXRjb21taXQgJGNoaWxkXX0gY29udGludWUKKwkgICAgc2V0IGluZm8gJGNvbW1pdGluZm8oJGNoaWxkKQorCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG5cdCIKKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgJGNoaWxkIGxpbmskaQorCSAgICBzZXRsaW5rICRjaGlsZCBsaW5rJGkKKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxuXHRbbGluZGV4ICRpbmZvIDBdIgorCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG5cdFttYyAiQXV0aG9yIl06XHRbbGluZGV4ICRpbmZvIDFdIgorCSAgICBzZXQgZGF0ZSBbZm9ybWF0ZGF0ZSBbbGluZGV4ICRpbmZvIDJdXQorCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG5cdFttYyAiRGF0ZSJdOlx0JGRhdGVcbiIKKwl9CisgICAgfQorICAgIG1heWJlX3Njcm9sbF9jdGV4dCAxCisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisgICAgaW5pdF9mbGlzdCB7fQorfQorCitwcm9jIG5vcm1hbGxpbmUge30geworICAgIGdsb2JhbCB0aGlja2VybGluZQorICAgIGlmIHtbaW5mbyBleGlzdHMgdGhpY2tlcmxpbmVdfSB7CisJc2V0IGlkICR0aGlja2VybGluZQorCXVuc2V0IHRoaWNrZXJsaW5lCisJZHJhd2xpbmVzICRpZAorICAgIH0KK30KKworcHJvYyBzZWxieWlkIHtpZCB7aXNuZXcgMX19IHsKKyAgICBnbG9iYWwgY3VydmlldworICAgIGlmIHtbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHsKKwlzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkaWRdICRpc25ldworICAgIH0KK30KKworcHJvYyBtc3RpbWUge30geworICAgIGdsb2JhbCBzdGFydG1zdGltZQorICAgIGlmIHshW2luZm8gZXhpc3RzIHN0YXJ0bXN0aW1lXX0geworCXNldCBzdGFydG1zdGltZSBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgfQorICAgIHJldHVybiBbZm9ybWF0ICIlLjNmIiBbZXhwciB7KFtjbG9jayBjbGljayAtbWlsbGlzZWNvbmRzXSAtICRzdGFydG1zdGltZSkgLyAxMDAwLjB9XV0KK30KKworcHJvYyByb3dtZW51IHt4IHkgaWR9IHsKKyAgICBnbG9iYWwgcm93Y3R4bWVudSBzZWxlY3RlZGxpbmUgcm93bWVudWlkIGN1cnZpZXcKKyAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIgZmFrZXJvd21lbnUgbWFpbmhlYWQgbWFya2VkaWQKKworICAgIHN0b3BmaW5kaW5nCisgICAgc2V0IHJvd21lbnVpZCAkaWQKKyAgICBpZiB7JHNlbGVjdGVkbGluZSBlcSB7fSB8fCBbcm93b2Zjb21taXQgJGlkXSBlcSAkc2VsZWN0ZWRsaW5lfSB7CisJc2V0IHN0YXRlIGRpc2FibGVkCisgICAgfSBlbHNlIHsKKwlzZXQgc3RhdGUgbm9ybWFsCisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgbWFya2VkaWRdICYmICRtYXJrZWRpZCBuZSAkaWR9IHsKKwlzZXQgbXN0YXRlIG5vcm1hbAorICAgIH0gZWxzZSB7CisJc2V0IG1zdGF0ZSBkaXNhYmxlZAorICAgIH0KKyAgICBpZiB7JGlkIG5lICRudWxsaWQgJiYgJGlkIG5lICRudWxsaWQyfSB7CisJc2V0IG1lbnUgJHJvd2N0eG1lbnUKKwlpZiB7JG1haW5oZWFkIG5lIHt9fSB7CisJICAgICRtZW51IGVudHJ5Y29uZmlndXJlIDggLWxhYmVsIFttYyAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiICRtYWluaGVhZF0gLXN0YXRlIG5vcm1hbAorCX0gZWxzZSB7CisJICAgICRtZW51IGVudHJ5Y29uZmlndXJlIDggLWxhYmVsIFttYyAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiICRtYWluaGVhZF0gLXN0YXRlIGRpc2FibGVkCisJfQorCSRtZW51IGVudHJ5Y29uZmlndXJlIDEwIC1zdGF0ZSAkbXN0YXRlCisJJG1lbnUgZW50cnljb25maWd1cmUgMTEgLXN0YXRlICRtc3RhdGUKKwkkbWVudSBlbnRyeWNvbmZpZ3VyZSAxMiAtc3RhdGUgJG1zdGF0ZQorICAgIH0gZWxzZSB7CisJc2V0IG1lbnUgJGZha2Vyb3dtZW51CisgICAgfQorICAgICRtZW51IGVudHJ5Y29uZmlndXJlIFttY2EgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCJdIC1zdGF0ZSAkc3RhdGUKKyAgICAkbWVudSBlbnRyeWNvbmZpZ3VyZSBbbWNhICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiXSAtc3RhdGUgJHN0YXRlCisgICAgJG1lbnUgZW50cnljb25maWd1cmUgW21jYSAiTWFrZSBwYXRjaCJdIC1zdGF0ZSAkc3RhdGUKKyAgICAkbWVudSBlbnRyeWNvbmZpZ3VyZSBbbWNhICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCJdIC1zdGF0ZSAkbXN0YXRlCisgICAgJG1lbnUgZW50cnljb25maWd1cmUgW21jYSAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiXSAtc3RhdGUgJG1zdGF0ZQorICAgIHRrX3BvcHVwICRtZW51ICR4ICR5Cit9CisKK3Byb2MgbWFya2hlcmUge30geworICAgIGdsb2JhbCByb3dtZW51aWQgbWFya2VkaWQgY2FudgorCisgICAgc2V0IG1hcmtlZGlkICRyb3dtZW51aWQKKyAgICBtYWtlX2lkbWFyayAkbWFya2VkaWQKK30KKworcHJvYyBnb3RvbWFyayB7fSB7CisgICAgZ2xvYmFsIG1hcmtlZGlkCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIG1hcmtlZGlkXX0geworCXNlbGJ5aWQgJG1hcmtlZGlkCisgICAgfQorfQorCitwcm9jIHJlcGxhY2VfYnlfa2lkcyB7bCByfSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgY2hpbGRyZW4KKworICAgIHNldCBpZCBbY29tbWl0b25yb3cgJHJdCisgICAgc2V0IGwgW2xyZXBsYWNlICRsIDAgMF0KKyAgICBmb3JlYWNoIGtpZCAkY2hpbGRyZW4oJGN1cnZpZXcsJGlkKSB7CisJbGFwcGVuZCBsIFtyb3dvZmNvbW1pdCAka2lkXQorICAgIH0KKyAgICByZXR1cm4gW2xzb3J0IC1pbnRlZ2VyIC1kZWNyZWFzaW5nIC11bmlxdWUgJGxdCit9CisKK3Byb2MgZmluZF9jb21tb25fZGVzYyB7fSB7CisgICAgZ2xvYmFsIG1hcmtlZGlkIHJvd21lbnVpZCBjdXJ2aWV3IGNoaWxkcmVuCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBtYXJrZWRpZF19IHJldHVybgorICAgIGlmIHshW2NvbW1pdGludmlldyAkbWFya2VkaWQgJGN1cnZpZXddIHx8CisJIVtjb21taXRpbnZpZXcgJHJvd21lbnVpZCAkY3Vydmlld119IHJldHVybgorICAgICNzZXQgdDEgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIHNldCBsMSBbbGlzdCBbcm93b2Zjb21taXQgJG1hcmtlZGlkXV0KKyAgICBzZXQgbDIgW2xpc3QgW3Jvd29mY29tbWl0ICRyb3dtZW51aWRdXQorICAgIHdoaWxlIDEgeworCXNldCByMSBbbGluZGV4ICRsMSAwXQorCXNldCByMiBbbGluZGV4ICRsMiAwXQorCWlmIHskcjEgZXEge30gfHwgJHIyIGVxIHt9fSBicmVhaworCWlmIHskcjEgPT0gJHIyfSB7CisJICAgIHNlbGVjdGxpbmUgJHIxIDEKKwkgICAgYnJlYWsKKwl9CisJaWYgeyRyMSA+ICRyMn0geworCSAgICBzZXQgbDEgW3JlcGxhY2VfYnlfa2lkcyAkbDEgJHIxXQorCX0gZWxzZSB7CisJICAgIHNldCBsMiBbcmVwbGFjZV9ieV9raWRzICRsMiAkcjJdCisJfQorICAgIH0KKyAgICAjc2V0IHQyIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICAjcHV0cyAidG9vayBbZXhwciB7JHQyLSR0MX1dbXMiCit9CisKK3Byb2MgY29tcGFyZV9jb21taXRzIHt9IHsKKyAgICBnbG9iYWwgbWFya2VkaWQgcm93bWVudWlkIGN1cnZpZXcgY2hpbGRyZW4KKworICAgIGlmIHshW2luZm8gZXhpc3RzIG1hcmtlZGlkXX0gcmV0dXJuCisgICAgaWYgeyFbY29tbWl0aW52aWV3ICRtYXJrZWRpZCAkY3Vydmlld119IHJldHVybgorICAgIGFkZHRvaGlzdG9yeSBbbGlzdCBkb19jbXBfY29tbWl0cyAkbWFya2VkaWQgJHJvd21lbnVpZF0KKyAgICBkb19jbXBfY29tbWl0cyAkbWFya2VkaWQgJHJvd21lbnVpZAorfQorCitwcm9jIGdldHBhdGNoaWQge2lkfSB7CisgICAgZ2xvYmFsIHBhdGNoaWRzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBwYXRjaGlkcygkaWQpXX0geworCXNldCBjbWQgW2RpZmZjbWQgW2xpc3QgJGlkXSB7LXAgLS1yb290fV0KKwkjIHRyaW0gb2ZmIHRoZSBpbml0aWFsICJ8IgorCXNldCBjbWQgW2xyYW5nZSAkY21kIDEgZW5kXQorCWlmIHtbY2F0Y2ggeworCSAgICBzZXQgeCBbZXZhbCBleGVjICRjbWQgfCBnaXQgcGF0Y2gtaWRdCisJICAgIHNldCBwYXRjaGlkcygkaWQpIFtsaW5kZXggJHggMF0KKwl9XX0geworCSAgICBzZXQgcGF0Y2hpZHMoJGlkKSAiZXJyb3IiCisJfQorICAgIH0KKyAgICByZXR1cm4gJHBhdGNoaWRzKCRpZCkKK30KKworcHJvYyBkb19jbXBfY29tbWl0cyB7YSBifSB7CisgICAgZ2xvYmFsIGN0ZXh0IGN1cnZpZXcgcGFyZW50cyBjaGlsZHJlbiBwYXRjaGlkcyBjb21taXRpbmZvCisKKyAgICAkY3RleHQgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgY2xlYXJfY3RleHQKKyAgICBpbml0X2ZsaXN0IHt9CisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCAxMDB9IHtpbmNyIGl9IHsKKwlzZXQgc2tpcGEgMAorCXNldCBza2lwYiAwCisJaWYge1tsbGVuZ3RoICRwYXJlbnRzKCRjdXJ2aWV3LCRhKV0gPiAxfSB7CisJICAgIGFwcGVuZHNob3J0bGluayAkYSBbbWMgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiXSAiXG4iCisJICAgIHNldCBza2lwYSAxCisJfSBlbHNlIHsKKwkgICAgc2V0IHBhdGNoYSBbZ2V0cGF0Y2hpZCAkYV0KKwl9CisJaWYge1tsbGVuZ3RoICRwYXJlbnRzKCRjdXJ2aWV3LCRiKV0gPiAxfSB7CisJICAgIGFwcGVuZHNob3J0bGluayAkYiBbbWMgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiXSAiXG4iCisJICAgIHNldCBza2lwYiAxCisJfSBlbHNlIHsKKwkgICAgc2V0IHBhdGNoYiBbZ2V0cGF0Y2hpZCAkYl0KKwl9CisJaWYgeyEkc2tpcGEgJiYgISRza2lwYn0geworCSAgICBzZXQgaGVhZGEgW2xpbmRleCAkY29tbWl0aW5mbygkYSkgMF0KKwkgICAgc2V0IGhlYWRiIFtsaW5kZXggJGNvbW1pdGluZm8oJGIpIDBdCisJICAgIGlmIHskcGF0Y2hhIGVxICJlcnJvciJ9IHsKKwkJYXBwZW5kc2hvcnRsaW5rICRhIFttYyAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIl0gXAorCQkgICAgW21jICIgLSBzdG9wcGluZ1xuIl0KKwkJYnJlYWsKKwkgICAgfQorCSAgICBpZiB7JHBhdGNoYiBlcSAiZXJyb3IifSB7CisJCWFwcGVuZHNob3J0bGluayAkYiBbbWMgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICJdIFwKKwkJICAgIFttYyAiIC0gc3RvcHBpbmdcbiJdCisJCWJyZWFrCisJICAgIH0KKwkgICAgaWYgeyRwYXRjaGEgZXEgJHBhdGNoYn0geworCQlpZiB7JGhlYWRhIGVxICRoZWFkYn0geworCQkgICAgYXBwZW5kc2hvcnRsaW5rICRhIFttYyAiQ29tbWl0ICJdCisJCSAgICBhcHBlbmRzaG9ydGxpbmsgJGIgIiA9PSAiICIgICRoZWFkYVxuIgorCQl9IGVsc2UgeworCQkgICAgYXBwZW5kc2hvcnRsaW5rICRhIFttYyAiQ29tbWl0ICJdICIgICRoZWFkYVxuIgorCQkgICAgYXBwZW5kc2hvcnRsaW5rICRiIFttYyAiIGlzIHRoZSBzYW1lIHBhdGNoIGFzXG4gICAgICAgIl0gXAorCQkJIiAgJGhlYWRiXG4iCisJCX0KKwkJc2V0IHNraXBhIDEKKwkJc2V0IHNraXBiIDEKKwkgICAgfSBlbHNlIHsKKwkJJGN0ZXh0IGluc2VydCBlbmQgIlxuIgorCQlhcHBlbmRzaG9ydGxpbmsgJGEgW21jICJDb21taXQgIl0gIiAgJGhlYWRhXG4iCisJCWFwcGVuZHNob3J0bGluayAkYiBbbWMgIiBkaWZmZXJzIGZyb21cbiAgICAgICAiXSBcCisJCSAgICAiICAkaGVhZGJcbiIKKwkJJGN0ZXh0IGluc2VydCBlbmQgW21jICJEaWZmIG9mIGNvbW1pdHM6XG5cbiJdCisJCSRjdGV4dCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorCQl1cGRhdGUKKwkJZGlmZmNvbW1pdHMgJGEgJGIKKwkJcmV0dXJuCisJICAgIH0KKwl9CisJaWYgeyRza2lwYX0geworCSAgICBzZXQga2lkcyBbcmVhbF9jaGlsZHJlbiAkY3VydmlldywkYV0KKwkgICAgaWYge1tsbGVuZ3RoICRraWRzXSAhPSAxfSB7CisJCSRjdGV4dCBpbnNlcnQgZW5kICJcbiIKKwkJYXBwZW5kc2hvcnRsaW5rICRhIFttYyAiQ29tbWl0ICJdIFwKKwkJICAgIFttYyAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iIFtsbGVuZ3RoICRraWRzXV0KKwkJYnJlYWsKKwkgICAgfQorCSAgICBzZXQgYSBbbGluZGV4ICRraWRzIDBdCisJfQorCWlmIHskc2tpcGJ9IHsKKwkgICAgc2V0IGtpZHMgW3JlYWxfY2hpbGRyZW4gJGN1cnZpZXcsJGJdCisJICAgIGlmIHtbbGxlbmd0aCAka2lkc10gIT0gMX0geworCQlhcHBlbmRzaG9ydGxpbmsgJGIgW21jICJDb21taXQgIl0gXAorCQkgICAgW21jICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIgW2xsZW5ndGggJGtpZHNdXQorCQlicmVhaworCSAgICB9CisJICAgIHNldCBiIFtsaW5kZXggJGtpZHMgMF0KKwl9CisgICAgfQorICAgICRjdGV4dCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorfQorCitwcm9jIGRpZmZjb21taXRzIHthIGJ9IHsKKyAgICBnbG9iYWwgZGlmZmNvbnRleHQgZGlmZmlkcyBibG9iZGlmZmZkIGRpZmZpbmhkciBjdXJyZGlmZnN1Ym1vZAorCisgICAgc2V0IHRtcGRpciBbZ2l0a25ld3RtcGRpcl0KKyAgICBzZXQgZm5hIFtmaWxlIGpvaW4gJHRtcGRpciAiY29tbWl0LVtzdHJpbmcgcmFuZ2UgJGEgMCA3XSJdCisgICAgc2V0IGZuYiBbZmlsZSBqb2luICR0bXBkaXIgImNvbW1pdC1bc3RyaW5nIHJhbmdlICRiIDAgN10iXQorICAgIGlmIHtbY2F0Y2ggeworCWV4ZWMgZ2l0IGRpZmYtdHJlZSAtcCAtLXByZXR0eSAkYSA+JGZuYQorCWV4ZWMgZ2l0IGRpZmYtdHJlZSAtcCAtLXByZXR0eSAkYiA+JGZuYgorICAgIH0gZXJyXX0geworCWVycm9yX3BvcHVwIFttYyAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiICRlcnJdCisJcmV0dXJuCisgICAgfQorICAgIGlmIHtbY2F0Y2ggeworCXNldCBmZCBbb3BlbiAifCBkaWZmIC1VJGRpZmZjb250ZXh0ICRmbmEgJGZuYiIgcl0KKyAgICB9IGVycl19IHsKKwllcnJvcl9wb3B1cCBbbWMgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiICRlcnJdCisJcmV0dXJuCisgICAgfQorICAgIHNldCBkaWZmaWRzIFtsaXN0IGNvbW1pdHMgJGEgJGJdCisgICAgc2V0IGJsb2JkaWZmZmQoJGRpZmZpZHMpICRmZAorICAgIHNldCBkaWZmaW5oZHIgMAorICAgIHNldCBjdXJyZGlmZnN1Ym1vZCAiIgorICAgIGZpbGVydW4gJGZkIFtsaXN0IGdldGJsb2JkaWZmbGluZSAkZmQgJGRpZmZpZHNdCit9CisKK3Byb2MgZGlmZnZzc2VsIHtkaXJufSB7CisgICAgZ2xvYmFsIHJvd21lbnVpZCBzZWxlY3RlZGxpbmUKKworICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9fSByZXR1cm4KKyAgICBpZiB7JGRpcm59IHsKKwlzZXQgb2xkaWQgW2NvbW1pdG9ucm93ICRzZWxlY3RlZGxpbmVdCisJc2V0IG5ld2lkICRyb3dtZW51aWQKKyAgICB9IGVsc2UgeworCXNldCBvbGRpZCAkcm93bWVudWlkCisJc2V0IG5ld2lkIFtjb21taXRvbnJvdyAkc2VsZWN0ZWRsaW5lXQorICAgIH0KKyAgICBhZGR0b2hpc3RvcnkgW2xpc3QgZG9zZWxkaWZmICRvbGRpZCAkbmV3aWRdIHNhdmVjdGV4dHBvcworICAgIGRvc2VsZGlmZiAkb2xkaWQgJG5ld2lkCit9CisKK3Byb2MgZGlmZnZzbWFyayB7ZGlybn0geworICAgIGdsb2JhbCByb3dtZW51aWQgbWFya2VkaWQKKworICAgIGlmIHshW2luZm8gZXhpc3RzIG1hcmtlZGlkXX0gcmV0dXJuCisgICAgaWYgeyRkaXJufSB7CisJc2V0IG9sZGlkICRtYXJrZWRpZAorCXNldCBuZXdpZCAkcm93bWVudWlkCisgICAgfSBlbHNlIHsKKwlzZXQgb2xkaWQgJHJvd21lbnVpZAorCXNldCBuZXdpZCAkbWFya2VkaWQKKyAgICB9CisgICAgYWRkdG9oaXN0b3J5IFtsaXN0IGRvc2VsZGlmZiAkb2xkaWQgJG5ld2lkXSBzYXZlY3RleHRwb3MKKyAgICBkb3NlbGRpZmYgJG9sZGlkICRuZXdpZAorfQorCitwcm9jIGRvc2VsZGlmZiB7b2xkaWQgbmV3aWR9IHsKKyAgICBnbG9iYWwgY3RleHQKKyAgICBnbG9iYWwgY29tbWl0aW5mbworCisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgIGNsZWFyX2N0ZXh0CisgICAgaW5pdF9mbGlzdCBbbWMgIlRvcCJdCisgICAgJGN0ZXh0IGluc2VydCBlbmQgIlttYyAiRnJvbSJdICIKKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAkb2xkaWQgbGluazAKKyAgICBzZXRsaW5rICRvbGRpZCBsaW5rMAorICAgICRjdGV4dCBpbnNlcnQgZW5kICJcbiAgICAgIgorICAgICRjdGV4dCBpbnNlcnQgZW5kIFtsaW5kZXggJGNvbW1pdGluZm8oJG9sZGlkKSAwXQorICAgICRjdGV4dCBpbnNlcnQgZW5kICJcblxuW21jICJUbyJdICAgIgorICAgICRjdGV4dCBpbnNlcnQgZW5kICRuZXdpZCBsaW5rMQorICAgIHNldGxpbmsgJG5ld2lkIGxpbmsxCisgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxuICAgICAiCisgICAgJGN0ZXh0IGluc2VydCBlbmQgW2xpbmRleCAkY29tbWl0aW5mbygkbmV3aWQpIDBdCisgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxuIgorICAgICRjdGV4dCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorICAgICRjdGV4dCB0YWcgcmVtb3ZlIGZvdW5kIDEuMCBlbmQKKyAgICBzdGFydGRpZmYgW2xpc3QgJG9sZGlkICRuZXdpZF0KK30KKworcHJvYyBta3BhdGNoIHt9IHsKKyAgICBnbG9iYWwgcm93bWVudWlkIGN1cnJlbnRpZCBjb21taXRpbmZvIHBhdGNodG9wIHBhdGNobnVtIE5TCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBjdXJyZW50aWRdfSByZXR1cm4KKyAgICBzZXQgb2xkaWQgJGN1cnJlbnRpZAorICAgIHNldCBvbGRoZWFkIFtsaW5kZXggJGNvbW1pdGluZm8oJG9sZGlkKSAwXQorICAgIHNldCBuZXdpZCAkcm93bWVudWlkCisgICAgc2V0IG5ld2hlYWQgW2xpbmRleCAkY29tbWl0aW5mbygkbmV3aWQpIDBdCisgICAgc2V0IHRvcCAucGF0Y2gKKyAgICBzZXQgcGF0Y2h0b3AgJHRvcAorICAgIGNhdGNoIHtkZXN0cm95ICR0b3B9CisgICAgdHRrX3RvcGxldmVsICR0b3AKKyAgICBtYWtlX3RyYW5zaWVudCAkdG9wIC4KKyAgICAke05TfTo6bGFiZWwgJHRvcC50aXRsZSAtdGV4dCBbbWMgIkdlbmVyYXRlIHBhdGNoIl0KKyAgICBncmlkICR0b3AudGl0bGUgLSAtcGFkeSAxMAorICAgICR7TlN9OjpsYWJlbCAkdG9wLmZyb20gLXRleHQgW21jICJGcm9tOiJdCisgICAgJHtOU306OmVudHJ5ICR0b3AuZnJvbXNoYTEgLXdpZHRoIDQwCisgICAgJHRvcC5mcm9tc2hhMSBpbnNlcnQgMCAkb2xkaWQKKyAgICAkdG9wLmZyb21zaGExIGNvbmYgLXN0YXRlIHJlYWRvbmx5CisgICAgZ3JpZCAkdG9wLmZyb20gJHRvcC5mcm9tc2hhMSAtc3RpY2t5IHcKKyAgICAke05TfTo6ZW50cnkgJHRvcC5mcm9taGVhZCAtd2lkdGggNjAKKyAgICAkdG9wLmZyb21oZWFkIGluc2VydCAwICRvbGRoZWFkCisgICAgJHRvcC5mcm9taGVhZCBjb25mIC1zdGF0ZSByZWFkb25seQorICAgIGdyaWQgeCAkdG9wLmZyb21oZWFkIC1zdGlja3kgdworICAgICR7TlN9OjpsYWJlbCAkdG9wLnRvIC10ZXh0IFttYyAiVG86Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC50b3NoYTEgLXdpZHRoIDQwCisgICAgJHRvcC50b3NoYTEgaW5zZXJ0IDAgJG5ld2lkCisgICAgJHRvcC50b3NoYTEgY29uZiAtc3RhdGUgcmVhZG9ubHkKKyAgICBncmlkICR0b3AudG8gJHRvcC50b3NoYTEgLXN0aWNreSB3CisgICAgJHtOU306OmVudHJ5ICR0b3AudG9oZWFkIC13aWR0aCA2MAorICAgICR0b3AudG9oZWFkIGluc2VydCAwICRuZXdoZWFkCisgICAgJHRvcC50b2hlYWQgY29uZiAtc3RhdGUgcmVhZG9ubHkKKyAgICBncmlkIHggJHRvcC50b2hlYWQgLXN0aWNreSB3CisgICAgJHtOU306OmJ1dHRvbiAkdG9wLnJldiAtdGV4dCBbbWMgIlJldmVyc2UiXSAtY29tbWFuZCBta3BhdGNocmV2CisgICAgZ3JpZCAkdG9wLnJldiB4IC1wYWR5IDEwIC1wYWR4IDUKKyAgICAke05TfTo6bGFiZWwgJHRvcC5mbGFiIC10ZXh0IFttYyAiT3V0cHV0IGZpbGU6Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC5mbmFtZSAtd2lkdGggNjAKKyAgICAkdG9wLmZuYW1lIGluc2VydCAwIFtmaWxlIG5vcm1hbGl6ZSAicGF0Y2gkcGF0Y2hudW0ucGF0Y2giXQorICAgIGluY3IgcGF0Y2hudW0KKyAgICBncmlkICR0b3AuZmxhYiAkdG9wLmZuYW1lIC1zdGlja3kgdworICAgICR7TlN9OjpmcmFtZSAkdG9wLmJ1dHMKKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5nZW4gLXRleHQgW21jICJHZW5lcmF0ZSJdIC1jb21tYW5kIG1rcGF0Y2hnbworICAgICR7TlN9OjpidXR0b24gJHRvcC5idXRzLmNhbiAtdGV4dCBbbWMgIkNhbmNlbCJdIC1jb21tYW5kIG1rcGF0Y2hjYW4KKyAgICBiaW5kICR0b3AgPEtleS1SZXR1cm4+IG1rcGF0Y2hnbworICAgIGJpbmQgJHRvcCA8S2V5LUVzY2FwZT4gbWtwYXRjaGNhbgorICAgIGdyaWQgJHRvcC5idXRzLmdlbiAkdG9wLmJ1dHMuY2FuCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDAgLXdlaWdodCAxIC11bmlmb3JtIGEKKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMSAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorICAgIGdyaWQgJHRvcC5idXRzIC0gLXBhZHkgMTAgLXN0aWNreSBldworICAgIGZvY3VzICR0b3AuZm5hbWUKK30KKworcHJvYyBta3BhdGNocmV2IHt9IHsKKyAgICBnbG9iYWwgcGF0Y2h0b3AKKworICAgIHNldCBvbGRpZCBbJHBhdGNodG9wLmZyb21zaGExIGdldF0KKyAgICBzZXQgb2xkaGVhZCBbJHBhdGNodG9wLmZyb21oZWFkIGdldF0KKyAgICBzZXQgbmV3aWQgWyRwYXRjaHRvcC50b3NoYTEgZ2V0XQorICAgIHNldCBuZXdoZWFkIFskcGF0Y2h0b3AudG9oZWFkIGdldF0KKyAgICBmb3JlYWNoIGUgW2xpc3QgZnJvbXNoYTEgZnJvbWhlYWQgdG9zaGExIHRvaGVhZF0gXAorCSAgICB2IFtsaXN0ICRuZXdpZCAkbmV3aGVhZCAkb2xkaWQgJG9sZGhlYWRdIHsKKwkkcGF0Y2h0b3AuJGUgY29uZiAtc3RhdGUgbm9ybWFsCisJJHBhdGNodG9wLiRlIGRlbGV0ZSAwIGVuZAorCSRwYXRjaHRvcC4kZSBpbnNlcnQgMCAkdgorCSRwYXRjaHRvcC4kZSBjb25mIC1zdGF0ZSByZWFkb25seQorICAgIH0KK30KKworcHJvYyBta3BhdGNoZ28ge30geworICAgIGdsb2JhbCBwYXRjaHRvcCBudWxsaWQgbnVsbGlkMgorCisgICAgc2V0IG9sZGlkIFskcGF0Y2h0b3AuZnJvbXNoYTEgZ2V0XQorICAgIHNldCBuZXdpZCBbJHBhdGNodG9wLnRvc2hhMSBnZXRdCisgICAgc2V0IGZuYW1lIFskcGF0Y2h0b3AuZm5hbWUgZ2V0XQorICAgIHNldCBjbWQgW2RpZmZjbWQgW2xpc3QgJG9sZGlkICRuZXdpZF0gLXBdCisgICAgIyB0cmltIG9mZiB0aGUgaW5pdGlhbCAifCIKKyAgICBzZXQgY21kIFtscmFuZ2UgJGNtZCAxIGVuZF0KKyAgICBsYXBwZW5kIGNtZCA+JGZuYW1lICYKKyAgICBpZiB7W2NhdGNoIHtldmFsIGV4ZWMgJGNtZH0gZXJyXX0geworCWVycm9yX3BvcHVwICJbbWMgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiJdICRlcnIiICRwYXRjaHRvcAorICAgIH0KKyAgICBjYXRjaCB7ZGVzdHJveSAkcGF0Y2h0b3B9CisgICAgdW5zZXQgcGF0Y2h0b3AKK30KKworcHJvYyBta3BhdGNoY2FuIHt9IHsKKyAgICBnbG9iYWwgcGF0Y2h0b3AKKworICAgIGNhdGNoIHtkZXN0cm95ICRwYXRjaHRvcH0KKyAgICB1bnNldCBwYXRjaHRvcAorfQorCitwcm9jIG1rdGFnIHt9IHsKKyAgICBnbG9iYWwgcm93bWVudWlkIG1rdGFndG9wIGNvbW1pdGluZm8gTlMKKworICAgIHNldCB0b3AgLm1ha2V0YWcKKyAgICBzZXQgbWt0YWd0b3AgJHRvcAorICAgIGNhdGNoIHtkZXN0cm95ICR0b3B9CisgICAgdHRrX3RvcGxldmVsICR0b3AKKyAgICBtYWtlX3RyYW5zaWVudCAkdG9wIC4KKyAgICAke05TfTo6bGFiZWwgJHRvcC50aXRsZSAtdGV4dCBbbWMgIkNyZWF0ZSB0YWciXQorICAgIGdyaWQgJHRvcC50aXRsZSAtIC1wYWR5IDEwCisgICAgJHtOU306OmxhYmVsICR0b3AuaWQgLXRleHQgW21jICJJRDoiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLnNoYTEgLXdpZHRoIDQwCisgICAgJHRvcC5zaGExIGluc2VydCAwICRyb3dtZW51aWQKKyAgICAkdG9wLnNoYTEgY29uZiAtc3RhdGUgcmVhZG9ubHkKKyAgICBncmlkICR0b3AuaWQgJHRvcC5zaGExIC1zdGlja3kgdworICAgICR7TlN9OjplbnRyeSAkdG9wLmhlYWQgLXdpZHRoIDYwCisgICAgJHRvcC5oZWFkIGluc2VydCAwIFtsaW5kZXggJGNvbW1pdGluZm8oJHJvd21lbnVpZCkgMF0KKyAgICAkdG9wLmhlYWQgY29uZiAtc3RhdGUgcmVhZG9ubHkKKyAgICBncmlkIHggJHRvcC5oZWFkIC1zdGlja3kgdworICAgICR7TlN9OjpsYWJlbCAkdG9wLnRsYWIgLXRleHQgW21jICJUYWcgbmFtZToiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLnRhZyAtd2lkdGggNjAKKyAgICBncmlkICR0b3AudGxhYiAkdG9wLnRhZyAtc3RpY2t5IHcKKyAgICAke05TfTo6bGFiZWwgJHRvcC5vcCAtdGV4dCBbbWMgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIl0KKyAgICBncmlkICR0b3Aub3AgLWNvbHVtbnNwYW4gMiAtc3RpY2t5IHdlCisgICAgJHtOU306OmxhYmVsICR0b3AubWxhYiAtdGV4dCBbbWMgIlRhZyBtZXNzYWdlOiJdCisgICAgJHtOU306OmVudHJ5ICR0b3AubXNnIC13aWR0aCA2MAorICAgIGdyaWQgJHRvcC5tbGFiICR0b3AubXNnIC1zdGlja3kgdworICAgICR7TlN9OjpmcmFtZSAkdG9wLmJ1dHMKKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5nZW4gLXRleHQgW21jICJDcmVhdGUiXSAtY29tbWFuZCBta3RhZ2dvCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuY2FuIC10ZXh0IFttYyAiQ2FuY2VsIl0gLWNvbW1hbmQgbWt0YWdjYW4KKyAgICBiaW5kICR0b3AgPEtleS1SZXR1cm4+IG1rdGFnZ28KKyAgICBiaW5kICR0b3AgPEtleS1Fc2NhcGU+IG1rdGFnY2FuCisgICAgZ3JpZCAkdG9wLmJ1dHMuZ2VuICR0b3AuYnV0cy5jYW4KKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMCAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAxIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisgICAgZ3JpZCAkdG9wLmJ1dHMgLSAtcGFkeSAxMCAtc3RpY2t5IGV3CisgICAgZm9jdXMgJHRvcC50YWcKK30KKworcHJvYyBkb21rdGFnIHt9IHsKKyAgICBnbG9iYWwgbWt0YWd0b3AgZW52IHRhZ2lkcyBpZHRhZ3MKKworICAgIHNldCBpZCBbJG1rdGFndG9wLnNoYTEgZ2V0XQorICAgIHNldCB0YWcgWyRta3RhZ3RvcC50YWcgZ2V0XQorICAgIHNldCBtc2cgWyRta3RhZ3RvcC5tc2cgZ2V0XQorICAgIGlmIHskdGFnID09IHt9fSB7CisJZXJyb3JfcG9wdXAgW21jICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiXSAkbWt0YWd0b3AKKwlyZXR1cm4gMAorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIHRhZ2lkcygkdGFnKV19IHsKKwllcnJvcl9wb3B1cCBbbWMgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiICR0YWddICRta3RhZ3RvcAorCXJldHVybiAwCisgICAgfQorICAgIGlmIHtbY2F0Y2ggeworCWlmIHskbXNnICE9IHt9fSB7CisJICAgIGV4ZWMgZ2l0IHRhZyAtYSAtbSAkbXNnICR0YWcgJGlkCisJfSBlbHNlIHsKKwkgICAgZXhlYyBnaXQgdGFnICR0YWcgJGlkCisJfQorICAgIH0gZXJyXX0geworCWVycm9yX3BvcHVwICJbbWMgIkVycm9yIGNyZWF0aW5nIHRhZzoiXSAkZXJyIiAkbWt0YWd0b3AKKwlyZXR1cm4gMAorICAgIH0KKworICAgIHNldCB0YWdpZHMoJHRhZykgJGlkCisgICAgbGFwcGVuZCBpZHRhZ3MoJGlkKSAkdGFnCisgICAgcmVkcmF3dGFncyAkaWQKKyAgICBhZGRlZHRhZyAkaWQKKyAgICBkaXNwbmVhcnRhZ3MgMAorICAgIHJ1biByZWZpbGxfcmVmbGlzdAorICAgIHJldHVybiAxCit9CisKK3Byb2MgcmVkcmF3dGFncyB7aWR9IHsKKyAgICBnbG9iYWwgY2FudiBsaW5laHRhZyBpZHBvcyBjdXJyZW50aWQgY3VydmlldyBjbWl0bGlzdGVkIG1hcmtlZGlkCisgICAgZ2xvYmFsIGNhbnZ4bWF4IGlkZHJhd24gY2lyY2xlaXRlbSBtYWluaGVhZGlkIGNpcmNsZWNvbG9ycworICAgIGdsb2JhbCBtYWluaGVhZGNpcmNsZWNvbG9yCisKKyAgICBpZiB7IVtjb21taXRpbnZpZXcgJGlkICRjdXJ2aWV3XX0gcmV0dXJuCisgICAgaWYgeyFbaW5mbyBleGlzdHMgaWRkcmF3bigkaWQpXX0gcmV0dXJuCisgICAgc2V0IHJvdyBbcm93b2Zjb21taXQgJGlkXQorICAgIGlmIHskaWQgZXEgJG1haW5oZWFkaWR9IHsKKwlzZXQgb2ZpbGwgJG1haW5oZWFkY2lyY2xlY29sb3IKKyAgICB9IGVsc2UgeworCXNldCBvZmlsbCBbbGluZGV4ICRjaXJjbGVjb2xvcnMgJGNtaXRsaXN0ZWQoJGN1cnZpZXcsJGlkKV0KKyAgICB9CisgICAgJGNhbnYgaXRlbWNvbmYgJGNpcmNsZWl0ZW0oJHJvdykgLWZpbGwgJG9maWxsCisgICAgJGNhbnYgZGVsZXRlIHRhZy4kaWQKKyAgICBzZXQgeHQgW2V2YWwgZHJhd3RhZ3MgJGlkICRpZHBvcygkaWQpXQorICAgICRjYW52IGNvb3JkcyAkbGluZWh0YWcoJGlkKSAkeHQgW2xpbmRleCAkaWRwb3MoJGlkKSAyXQorICAgIHNldCB0ZXh0IFskY2FudiBpdGVtY2dldCAkbGluZWh0YWcoJGlkKSAtdGV4dF0KKyAgICBzZXQgZm9udCBbJGNhbnYgaXRlbWNnZXQgJGxpbmVodGFnKCRpZCkgLWZvbnRdCisgICAgc2V0IHhyIFtleHByIHskeHQgKyBbZm9udCBtZWFzdXJlICRmb250ICR0ZXh0XX1dCisgICAgaWYgeyR4ciA+ICRjYW52eG1heH0geworCXNldCBjYW52eG1heCAkeHIKKwlzZXRjYW52c2Nyb2xsCisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgY3VycmVudGlkXSAmJiAkY3VycmVudGlkID09ICRpZH0geworCW1ha2Vfc2Vjc2VsICRpZAorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIG1hcmtlZGlkXSAmJiAkbWFya2VkaWQgZXEgJGlkfSB7CisJbWFrZV9pZG1hcmsgJGlkCisgICAgfQorfQorCitwcm9jIG1rdGFnY2FuIHt9IHsKKyAgICBnbG9iYWwgbWt0YWd0b3AKKworICAgIGNhdGNoIHtkZXN0cm95ICRta3RhZ3RvcH0KKyAgICB1bnNldCBta3RhZ3RvcAorfQorCitwcm9jIG1rdGFnZ28ge30geworICAgIGlmIHshW2RvbWt0YWddfSByZXR1cm4KKyAgICBta3RhZ2NhbgorfQorCitwcm9jIGNvcHlzdW1tYXJ5IHt9IHsKKyAgICBnbG9iYWwgcm93bWVudWlkIGF1dG9zZWxsZW4KKworICAgIHNldCBmb3JtYXQgIiVoIChcIiVzXCIsICVhZCkiCisgICAgc2V0IGNtZCBbbGlzdCBnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JGZvcm1hdCAtLWRhdGU9c2hvcnRdCisgICAgaWYgeyRhdXRvc2VsbGVuIDwgNDB9IHsKKyAgICAgICAgbGFwcGVuZCBjbWQgLS1hYmJyZXY9JGF1dG9zZWxsZW4KKyAgICB9CisgICAgc2V0IHN1bW1hcnkgW2V2YWwgZXhlYyAkY21kICRyb3dtZW51aWRdCisKKyAgICBjbGlwYm9hcmQgY2xlYXIKKyAgICBjbGlwYm9hcmQgYXBwZW5kICRzdW1tYXJ5Cit9CisKK3Byb2Mgd3JpdGVjb21taXQge30geworICAgIGdsb2JhbCByb3dtZW51aWQgd3Jjb210b3AgY29tbWl0aW5mbyB3cmNvbWNtZCBOUworCisgICAgc2V0IHRvcCAud3JpdGVjb21taXQKKyAgICBzZXQgd3Jjb210b3AgJHRvcAorICAgIGNhdGNoIHtkZXN0cm95ICR0b3B9CisgICAgdHRrX3RvcGxldmVsICR0b3AKKyAgICBtYWtlX3RyYW5zaWVudCAkdG9wIC4KKyAgICAke05TfTo6bGFiZWwgJHRvcC50aXRsZSAtdGV4dCBbbWMgIldyaXRlIGNvbW1pdCB0byBmaWxlIl0KKyAgICBncmlkICR0b3AudGl0bGUgLSAtcGFkeSAxMAorICAgICR7TlN9OjpsYWJlbCAkdG9wLmlkIC10ZXh0IFttYyAiSUQ6Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC5zaGExIC13aWR0aCA0MAorICAgICR0b3Auc2hhMSBpbnNlcnQgMCAkcm93bWVudWlkCisgICAgJHRvcC5zaGExIGNvbmYgLXN0YXRlIHJlYWRvbmx5CisgICAgZ3JpZCAkdG9wLmlkICR0b3Auc2hhMSAtc3RpY2t5IHcKKyAgICAke05TfTo6ZW50cnkgJHRvcC5oZWFkIC13aWR0aCA2MAorICAgICR0b3AuaGVhZCBpbnNlcnQgMCBbbGluZGV4ICRjb21taXRpbmZvKCRyb3dtZW51aWQpIDBdCisgICAgJHRvcC5oZWFkIGNvbmYgLXN0YXRlIHJlYWRvbmx5CisgICAgZ3JpZCB4ICR0b3AuaGVhZCAtc3RpY2t5IHcKKyAgICAke05TfTo6bGFiZWwgJHRvcC5jbGFiIC10ZXh0IFttYyAiQ29tbWFuZDoiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLmNtZCAtd2lkdGggNjAgLXRleHR2YXJpYWJsZSB3cmNvbWNtZAorICAgIGdyaWQgJHRvcC5jbGFiICR0b3AuY21kIC1zdGlja3kgdyAtcGFkeSAxMAorICAgICR7TlN9OjpsYWJlbCAkdG9wLmZsYWIgLXRleHQgW21jICJPdXRwdXQgZmlsZToiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLmZuYW1lIC13aWR0aCA2MAorICAgICR0b3AuZm5hbWUgaW5zZXJ0IDAgW2ZpbGUgbm9ybWFsaXplICJjb21taXQtW3N0cmluZyByYW5nZSAkcm93bWVudWlkIDAgNl0iXQorICAgIGdyaWQgJHRvcC5mbGFiICR0b3AuZm5hbWUgLXN0aWNreSB3CisgICAgJHtOU306OmZyYW1lICR0b3AuYnV0cworICAgICR7TlN9OjpidXR0b24gJHRvcC5idXRzLmdlbiAtdGV4dCBbbWMgIldyaXRlIl0gLWNvbW1hbmQgd3Jjb21nbworICAgICR7TlN9OjpidXR0b24gJHRvcC5idXRzLmNhbiAtdGV4dCBbbWMgIkNhbmNlbCJdIC1jb21tYW5kIHdyY29tY2FuCisgICAgYmluZCAkdG9wIDxLZXktUmV0dXJuPiB3cmNvbWdvCisgICAgYmluZCAkdG9wIDxLZXktRXNjYXBlPiB3cmNvbWNhbgorICAgIGdyaWQgJHRvcC5idXRzLmdlbiAkdG9wLmJ1dHMuY2FuCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDAgLXdlaWdodCAxIC11bmlmb3JtIGEKKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMSAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorICAgIGdyaWQgJHRvcC5idXRzIC0gLXBhZHkgMTAgLXN0aWNreSBldworICAgIGZvY3VzICR0b3AuZm5hbWUKK30KKworcHJvYyB3cmNvbWdvIHt9IHsKKyAgICBnbG9iYWwgd3Jjb210b3AKKworICAgIHNldCBpZCBbJHdyY29tdG9wLnNoYTEgZ2V0XQorICAgIHNldCBjbWQgImVjaG8gJGlkIHwgWyR3cmNvbXRvcC5jbWQgZ2V0XSIKKyAgICBzZXQgZm5hbWUgWyR3cmNvbXRvcC5mbmFtZSBnZXRdCisgICAgaWYge1tjYXRjaCB7ZXhlYyBzaCAtYyAkY21kID4kZm5hbWUgJn0gZXJyXX0geworCWVycm9yX3BvcHVwICJbbWMgIkVycm9yIHdyaXRpbmcgY29tbWl0OiJdICRlcnIiICR3cmNvbXRvcAorICAgIH0KKyAgICBjYXRjaCB7ZGVzdHJveSAkd3Jjb210b3B9CisgICAgdW5zZXQgd3Jjb210b3AKK30KKworcHJvYyB3cmNvbWNhbiB7fSB7CisgICAgZ2xvYmFsIHdyY29tdG9wCisKKyAgICBjYXRjaCB7ZGVzdHJveSAkd3Jjb210b3B9CisgICAgdW5zZXQgd3Jjb210b3AKK30KKworcHJvYyBta2JyYW5jaCB7fSB7CisgICAgZ2xvYmFsIE5TIHJvd21lbnVpZAorCisgICAgc2V0IHRvcCAuYnJhbmNoZGlhbG9nCisKKyAgICBzZXQgdmFsKG5hbWUpICIiCisgICAgc2V0IHZhbChpZCkgJHJvd21lbnVpZAorICAgIHNldCB2YWwoY29tbWFuZCkgW2xpc3QgbWticmdvICR0b3BdCisKKyAgICBzZXQgdWkodGl0bGUpIFttYyAiQ3JlYXRlIGJyYW5jaCJdCisgICAgc2V0IHVpKGFjY2VwdCkgW21jICJDcmVhdGUiXQorCisgICAgYnJhbmNoZGlhICR0b3AgdmFsIHVpCit9CisKK3Byb2MgbXZicmFuY2gge30geworICAgIGdsb2JhbCBOUworICAgIGdsb2JhbCBoZWFkbWVudWlkIGhlYWRtZW51aGVhZAorCisgICAgc2V0IHRvcCAuYnJhbmNoZGlhbG9nCisKKyAgICBzZXQgdmFsKG5hbWUpICRoZWFkbWVudWhlYWQKKyAgICBzZXQgdmFsKGlkKSAkaGVhZG1lbnVpZAorICAgIHNldCB2YWwoY29tbWFuZCkgW2xpc3QgbXZicmdvICR0b3AgJGhlYWRtZW51aGVhZF0KKworICAgIHNldCB1aSh0aXRsZSkgW21jICJSZW5hbWUgYnJhbmNoICVzIiAkaGVhZG1lbnVoZWFkXQorICAgIHNldCB1aShhY2NlcHQpIFttYyAiUmVuYW1lIl0KKworICAgIGJyYW5jaGRpYSAkdG9wIHZhbCB1aQorfQorCitwcm9jIGJyYW5jaGRpYSB7dG9wIHZhbHZhciB1aXZhcn0geworICAgIGdsb2JhbCBOUyBjb21taXRpbmZvCisgICAgdXB2YXIgJHZhbHZhciB2YWwgJHVpdmFyIHVpCisKKyAgICBjYXRjaCB7ZGVzdHJveSAkdG9wfQorICAgIHR0a190b3BsZXZlbCAkdG9wCisgICAgbWFrZV90cmFuc2llbnQgJHRvcCAuCisgICAgJHtOU306OmxhYmVsICR0b3AudGl0bGUgLXRleHQgJHVpKHRpdGxlKQorICAgIGdyaWQgJHRvcC50aXRsZSAtIC1wYWR5IDEwCisgICAgJHtOU306OmxhYmVsICR0b3AuaWQgLXRleHQgW21jICJJRDoiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLnNoYTEgLXdpZHRoIDQwCisgICAgJHRvcC5zaGExIGluc2VydCAwICR2YWwoaWQpCisgICAgJHRvcC5zaGExIGNvbmYgLXN0YXRlIHJlYWRvbmx5CisgICAgZ3JpZCAkdG9wLmlkICR0b3Auc2hhMSAtc3RpY2t5IHcKKyAgICAke05TfTo6ZW50cnkgJHRvcC5oZWFkIC13aWR0aCA2MAorICAgICR0b3AuaGVhZCBpbnNlcnQgMCBbbGluZGV4ICRjb21taXRpbmZvKCR2YWwoaWQpKSAwXQorICAgICR0b3AuaGVhZCBjb25mIC1zdGF0ZSByZWFkb25seQorICAgIGdyaWQgeCAkdG9wLmhlYWQgLXN0aWNreSBldworICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AgMSAtd2VpZ2h0IDEKKyAgICAke05TfTo6bGFiZWwgJHRvcC5ubGFiIC10ZXh0IFttYyAiTmFtZToiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLm5hbWUgLXdpZHRoIDQwCisgICAgJHRvcC5uYW1lIGluc2VydCAwICR2YWwobmFtZSkKKyAgICBncmlkICR0b3AubmxhYiAkdG9wLm5hbWUgLXN0aWNreSB3CisgICAgJHtOU306OmZyYW1lICR0b3AuYnV0cworICAgICR7TlN9OjpidXR0b24gJHRvcC5idXRzLmdvIC10ZXh0ICR1aShhY2NlcHQpIC1jb21tYW5kICR2YWwoY29tbWFuZCkKKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5jYW4gLXRleHQgW21jICJDYW5jZWwiXSAtY29tbWFuZCAiY2F0Y2gge2Rlc3Ryb3kgJHRvcH0iCisgICAgYmluZCAkdG9wIDxLZXktUmV0dXJuPiAkdmFsKGNvbW1hbmQpCisgICAgYmluZCAkdG9wIDxLZXktRXNjYXBlPiAiY2F0Y2gge2Rlc3Ryb3kgJHRvcH0iCisgICAgZ3JpZCAkdG9wLmJ1dHMuZ28gJHRvcC5idXRzLmNhbgorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAwIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDEgLXdlaWdodCAxIC11bmlmb3JtIGEKKyAgICBncmlkICR0b3AuYnV0cyAtIC1wYWR5IDEwIC1zdGlja3kgZXcKKyAgICBmb2N1cyAkdG9wLm5hbWUKK30KKworcHJvYyBta2JyZ28ge3RvcH0geworICAgIGdsb2JhbCBoZWFkaWRzIGlkaGVhZHMKKworICAgIHNldCBuYW1lIFskdG9wLm5hbWUgZ2V0XQorICAgIHNldCBpZCBbJHRvcC5zaGExIGdldF0KKyAgICBzZXQgY21kYXJncyB7fQorICAgIHNldCBvbGRfaWQge30KKyAgICBpZiB7JG5hbWUgZXEge319IHsKKwllcnJvcl9wb3B1cCBbbWMgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giXSAkdG9wCisJcmV0dXJuCisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgaGVhZGlkcygkbmFtZSldfSB7CisJaWYgeyFbY29uZmlybV9wb3B1cCBbbWMgXAorCQkiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iICRuYW1lXSAkdG9wXX0geworCSAgICByZXR1cm4KKwl9CisJc2V0IG9sZF9pZCAkaGVhZGlkcygkbmFtZSkKKwlsYXBwZW5kIGNtZGFyZ3MgLWYKKyAgICB9CisgICAgY2F0Y2gge2Rlc3Ryb3kgJHRvcH0KKyAgICBsYXBwZW5kIGNtZGFyZ3MgJG5hbWUgJGlkCisgICAgbm93YnVzeSBuZXdicmFuY2gKKyAgICB1cGRhdGUKKyAgICBpZiB7W2NhdGNoIHsKKwlldmFsIGV4ZWMgZ2l0IGJyYW5jaCAkY21kYXJncworICAgIH0gZXJyXX0geworCW5vdGJ1c3kgbmV3YnJhbmNoCisJZXJyb3JfcG9wdXAgJGVycgorICAgIH0gZWxzZSB7CisJbm90YnVzeSBuZXdicmFuY2gKKwlpZiB7JG9sZF9pZCBuZSB7fX0geworCSAgICBtb3ZlaGVhZCAkaWQgJG5hbWUKKwkgICAgbW92ZWRoZWFkICRpZCAkbmFtZQorCSAgICByZWRyYXd0YWdzICRvbGRfaWQKKwkgICAgcmVkcmF3dGFncyAkaWQKKwl9IGVsc2UgeworCSAgICBzZXQgaGVhZGlkcygkbmFtZSkgJGlkCisJICAgIGxhcHBlbmQgaWRoZWFkcygkaWQpICRuYW1lCisJICAgIGFkZGVkaGVhZCAkaWQgJG5hbWUKKwkgICAgcmVkcmF3dGFncyAkaWQKKwl9CisJZGlzcG5lYXJ0YWdzIDAKKwlydW4gcmVmaWxsX3JlZmxpc3QKKyAgICB9Cit9CisKK3Byb2MgbXZicmdvIHt0b3AgcHJldm5hbWV9IHsKKyAgICBnbG9iYWwgaGVhZGlkcyBpZGhlYWRzIG1haW5oZWFkIG1haW5oZWFkaWQKKworICAgIHNldCBuYW1lIFskdG9wLm5hbWUgZ2V0XQorICAgIHNldCBpZCBbJHRvcC5zaGExIGdldF0KKyAgICBzZXQgY21kYXJncyB7fQorICAgIGlmIHskbmFtZSBlcSAkcHJldm5hbWV9IHsKKwljYXRjaCB7ZGVzdHJveSAkdG9wfQorCXJldHVybgorICAgIH0KKyAgICBpZiB7JG5hbWUgZXEge319IHsKKwllcnJvcl9wb3B1cCBbbWMgIlBsZWFzZSBzcGVjaWZ5IGEgbmV3IG5hbWUgZm9yIHRoZSBicmFuY2giXSAkdG9wCisJcmV0dXJuCisgICAgfQorICAgIGNhdGNoIHtkZXN0cm95ICR0b3B9CisgICAgbGFwcGVuZCBjbWRhcmdzIC1tICRwcmV2bmFtZSAkbmFtZQorICAgIG5vd2J1c3kgcmVuYW1lYnJhbmNoCisgICAgdXBkYXRlCisgICAgaWYge1tjYXRjaCB7CisJZXZhbCBleGVjIGdpdCBicmFuY2ggJGNtZGFyZ3MKKyAgICB9IGVycl19IHsKKwlub3RidXN5IHJlbmFtZWJyYW5jaAorCWVycm9yX3BvcHVwICRlcnIKKyAgICB9IGVsc2UgeworCW5vdGJ1c3kgcmVuYW1lYnJhbmNoCisJcmVtb3ZlaGVhZCAkaWQgJHByZXZuYW1lCisJcmVtb3ZlZGhlYWQgJGlkICRwcmV2bmFtZQorCXNldCBoZWFkaWRzKCRuYW1lKSAkaWQKKwlsYXBwZW5kIGlkaGVhZHMoJGlkKSAkbmFtZQorCWFkZGVkaGVhZCAkaWQgJG5hbWUKKwlpZiB7JHByZXZuYW1lIGVxICRtYWluaGVhZH0geworCSAgICBzZXQgbWFpbmhlYWQgJG5hbWUKKwkgICAgc2V0IG1haW5oZWFkaWQgJGlkCisJfQorCXJlZHJhd3RhZ3MgJGlkCisJZGlzcG5lYXJ0YWdzIDAKKwlydW4gcmVmaWxsX3JlZmxpc3QKKyAgICB9Cit9CisKK3Byb2MgZXhlY19jaXRvb2wge3Rvb2xfYXJncyB7YmFzZWlkIHt9fX0geworICAgIGdsb2JhbCBjb21taXRpbmZvIGVudgorCisgICAgc2V0IHNhdmVfZW52IFthcnJheSBnZXQgZW52IEdJVF9BVVRIT1JfKl0KKworICAgIGlmIHskYmFzZWlkIG5lIHt9fSB7CisJaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0aW5mbygkYmFzZWlkKV19IHsKKwkgICAgZ2V0Y29tbWl0ICRiYXNlaWQKKwl9CisJc2V0IGF1dGhvciBbbGluZGV4ICRjb21taXRpbmZvKCRiYXNlaWQpIDFdCisJc2V0IGRhdGUgW2xpbmRleCAkY29tbWl0aW5mbygkYmFzZWlkKSAyXQorCWlmIHtbcmVnZXhwIHteXHMqKFxTLipcU3xcUylccyo8KC4qKT5ccyokfSBcCisJICAgICAgICAgICAgJGF1dGhvciBhdXRob3IgbmFtZSBlbWFpbF0KKwkgICAgJiYgJGRhdGUgbmUge319IHsKKwkgICAgc2V0IGVudihHSVRfQVVUSE9SX05BTUUpICRuYW1lCisJICAgIHNldCBlbnYoR0lUX0FVVEhPUl9FTUFJTCkgJGVtYWlsCisJICAgIHNldCBlbnYoR0lUX0FVVEhPUl9EQVRFKSAkZGF0ZQorCX0KKyAgICB9CisKKyAgICBldmFsIGV4ZWMgZ2l0IGNpdG9vbCAkdG9vbF9hcmdzICYKKworICAgIGFycmF5IHVuc2V0IGVudiBHSVRfQVVUSE9SXyoKKyAgICBhcnJheSBzZXQgZW52ICRzYXZlX2VudgorfQorCitwcm9jIGNoZXJyeXBpY2sge30geworICAgIGdsb2JhbCByb3dtZW51aWQgY3VydmlldworICAgIGdsb2JhbCBtYWluaGVhZCBtYWluaGVhZGlkCisgICAgZ2xvYmFsIGdpdGRpcgorCisgICAgc2V0IG9sZGhlYWQgW2V4ZWMgZ2l0IHJldi1wYXJzZSBIRUFEXQorICAgIHNldCBkaGVhZHMgW2Rlc2NoZWFkcyAkcm93bWVudWlkXQorICAgIGlmIHskZGhlYWRzIG5lIHt9ICYmIFtsc2VhcmNoIC1leGFjdCAkZGhlYWRzICRvbGRoZWFkXSA+PSAwfSB7CisJc2V0IG9rIFtjb25maXJtX3BvcHVwIFttYyAiQ29tbWl0ICVzIGlzIGFscmVhZHlcCisJCWluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IiBcCisJCQkJICAgW3N0cmluZyByYW5nZSAkcm93bWVudWlkIDAgN10gJG1haW5oZWFkXV0KKwlpZiB7ISRva30gcmV0dXJuCisgICAgfQorICAgIG5vd2J1c3kgY2hlcnJ5cGljayBbbWMgIkNoZXJyeS1waWNraW5nIl0KKyAgICB1cGRhdGUKKyAgICAjIFVuZm9ydHVuYXRlbHkgZ2l0LWNoZXJyeS1waWNrIHdyaXRlcyBzdHVmZiB0byBzdGRlcnIgZXZlbiB3aGVuCisgICAgIyBubyBlcnJvciBvY2N1cnMsIGFuZCBleGVjIHRha2VzIHRoYXQgYXMgYW4gaW5kaWNhdGlvbiBvZiBlcnJvci4uLgorICAgIGlmIHtbY2F0Y2gge2V4ZWMgc2ggLWMgImdpdCBjaGVycnktcGljayAtciAkcm93bWVudWlkIDI+JjEifSBlcnJdfSB7CisJbm90YnVzeSBjaGVycnlwaWNrCisJaWYge1tyZWdleHAgLWxpbmUgXAorCQkge0VudHJ5ICcoLiopJyAod291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2V8bm90IHVwdG9kYXRlKX0gXAorCQkgJGVyciBtc2cgZm5hbWVdfSB7CisJICAgIGVycm9yX3BvcHVwIFttYyAiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlc1wKKwkJCXRvIGZpbGUgJyVzJy5cblBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoXAorCQkJeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIiAkZm5hbWVdCisJfSBlbHNlaWYge1tyZWdleHAgLWxpbmUgXAorCQkgICAgICAge14oQ09ORkxJQ1QgXCguKlwpOnxBdXRvbWF0aWMgY2hlcnJ5LXBpY2sgZmFpbGVkfGVycm9yOiBjb3VsZCBub3QgYXBwbHkpfSBcCisJCSAgICAgICAkZXJyXX0geworCSAgICBpZiB7W2NvbmZpcm1fcG9wdXAgW21jICJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZVwKKwkJCWNvbmZsaWN0LlxuRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG9cCisJCQlyZXNvbHZlIGl0PyJdXX0geworCQkjIEZvcmNlIGNpdG9vbCB0byByZWFkIE1FUkdFX01TRworCQlmaWxlIGRlbGV0ZSBbZmlsZSBqb2luICRnaXRkaXIgIkdJVEdVSV9NU0ciXQorCQlleGVjX2NpdG9vbCB7fSAkcm93bWVudWlkCisJICAgIH0KKwl9IGVsc2UgeworCSAgICBlcnJvcl9wb3B1cCAkZXJyCisJfQorCXJ1biB1cGRhdGVjb21taXRzCisJcmV0dXJuCisgICAgfQorICAgIHNldCBuZXdoZWFkIFtleGVjIGdpdCByZXYtcGFyc2UgSEVBRF0KKyAgICBpZiB7JG5ld2hlYWQgZXEgJG9sZGhlYWR9IHsKKwlub3RidXN5IGNoZXJyeXBpY2sKKwllcnJvcl9wb3B1cCBbbWMgIk5vIGNoYW5nZXMgY29tbWl0dGVkIl0KKwlyZXR1cm4KKyAgICB9CisgICAgYWRkbmV3Y2hpbGQgJG5ld2hlYWQgJG9sZGhlYWQKKyAgICBpZiB7W2NvbW1pdGludmlldyAkb2xkaGVhZCAkY3Vydmlld119IHsKKwkjIFhYWCB0aGlzIGlzbid0IHJpZ2h0IGlmIHdlIGhhdmUgYSBwYXRoIGxpbWl0Li4uCisJaW5zZXJ0cm93ICRuZXdoZWFkICRvbGRoZWFkICRjdXJ2aWV3CisJaWYgeyRtYWluaGVhZCBuZSB7fX0geworCSAgICBtb3ZlaGVhZCAkbmV3aGVhZCAkbWFpbmhlYWQKKwkgICAgbW92ZWRoZWFkICRuZXdoZWFkICRtYWluaGVhZAorCX0KKwlzZXQgbWFpbmhlYWRpZCAkbmV3aGVhZAorCXJlZHJhd3RhZ3MgJG9sZGhlYWQKKwlyZWRyYXd0YWdzICRuZXdoZWFkCisJc2VsYnlpZCAkbmV3aGVhZAorICAgIH0KKyAgICBub3RidXN5IGNoZXJyeXBpY2sKK30KKworcHJvYyByZXZlcnQge30geworICAgIGdsb2JhbCByb3dtZW51aWQgY3VydmlldworICAgIGdsb2JhbCBtYWluaGVhZCBtYWluaGVhZGlkCisgICAgZ2xvYmFsIGdpdGRpcgorCisgICAgc2V0IG9sZGhlYWQgW2V4ZWMgZ2l0IHJldi1wYXJzZSBIRUFEXQorICAgIHNldCBkaGVhZHMgW2Rlc2NoZWFkcyAkcm93bWVudWlkXQorICAgIGlmIHsgJGRoZWFkcyBlcSB7fSB8fCBbbHNlYXJjaCAtZXhhY3QgJGRoZWFkcyAkb2xkaGVhZF0gPT0gLTEgfSB7CisgICAgICAgc2V0IG9rIFtjb25maXJtX3BvcHVwIFttYyAiQ29tbWl0ICVzIGlzIG5vdFwKKyAgICAgICAgICAgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZXZlcnQgaXQ/IiBcCisgICAgICAgICAgICAgICAgICAgICAgW3N0cmluZyByYW5nZSAkcm93bWVudWlkIDAgN10gJG1haW5oZWFkXV0KKyAgICAgICBpZiB7ISRva30gcmV0dXJuCisgICAgfQorICAgIG5vd2J1c3kgcmV2ZXJ0IFttYyAiUmV2ZXJ0aW5nIl0KKyAgICB1cGRhdGUKKworICAgIGlmIFtjYXRjaCB7ZXhlYyBnaXQgcmV2ZXJ0IC0tbm8tZWRpdCAkcm93bWVudWlkfSBlcnJdIHsKKyAgICAgICAgbm90YnVzeSByZXZlcnQKKyAgICAgICAgaWYgW3JlZ2V4cCB7ZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6KFxuKCggfFx0KStbXlxuXStcbikrKX1cCisgICAgICAgICAgICAgICAgJGVyciBtYXRjaCBmaWxlc10geworICAgICAgICAgICAgcmVnc3ViIHtcbiggfFx0KSt9ICRmaWxlcyAiXG4iIGZpbGVzCisgICAgICAgICAgICBlcnJvcl9wb3B1cCBbbWMgIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvXAorICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggXAorICAgICAgICAgICAgICAgIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIgJGZpbGVzXQorICAgICAgICB9IGVsc2VpZiBbcmVnZXhwIHtlcnJvcjogY291bGQgbm90IHJldmVydH0gJGVycl0geworICAgICAgICAgICAgaWYgW2NvbmZpcm1fcG9wdXAgW21jICJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG5cCisgICAgICAgICAgICAgICAgRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iXV0geworICAgICAgICAgICAgICAgICMgRm9yY2UgY2l0b29sIHRvIHJlYWQgTUVSR0VfTVNHCisgICAgICAgICAgICAgICAgZmlsZSBkZWxldGUgW2ZpbGUgam9pbiAkZ2l0ZGlyICJHSVRHVUlfTVNHIl0KKyAgICAgICAgICAgICAgICBleGVjX2NpdG9vbCB7fSAkcm93bWVudWlkCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7IGVycm9yX3BvcHVwICRlcnIgfQorICAgICAgICBydW4gdXBkYXRlY29tbWl0cworICAgICAgICByZXR1cm4KKyAgICB9CisKKyAgICBzZXQgbmV3aGVhZCBbZXhlYyBnaXQgcmV2LXBhcnNlIEhFQURdCisgICAgaWYgeyAkbmV3aGVhZCBlcSAkb2xkaGVhZCB9IHsKKyAgICAgICAgbm90YnVzeSByZXZlcnQKKyAgICAgICAgZXJyb3JfcG9wdXAgW21jICJObyBjaGFuZ2VzIGNvbW1pdHRlZCJdCisgICAgICAgIHJldHVybgorICAgIH0KKworICAgIGFkZG5ld2NoaWxkICRuZXdoZWFkICRvbGRoZWFkCisKKyAgICBpZiBbY29tbWl0aW52aWV3ICRvbGRoZWFkICRjdXJ2aWV3XSB7CisgICAgICAgICMgWFhYIHRoaXMgaXNuJ3QgcmlnaHQgaWYgd2UgaGF2ZSBhIHBhdGggbGltaXQuLi4KKyAgICAgICAgaW5zZXJ0cm93ICRuZXdoZWFkICRvbGRoZWFkICRjdXJ2aWV3CisgICAgICAgIGlmIHskbWFpbmhlYWQgbmUge319IHsKKyAgICAgICAgICAgIG1vdmVoZWFkICRuZXdoZWFkICRtYWluaGVhZAorICAgICAgICAgICAgbW92ZWRoZWFkICRuZXdoZWFkICRtYWluaGVhZAorICAgICAgICB9CisgICAgICAgIHNldCBtYWluaGVhZGlkICRuZXdoZWFkCisgICAgICAgIHJlZHJhd3RhZ3MgJG9sZGhlYWQKKyAgICAgICAgcmVkcmF3dGFncyAkbmV3aGVhZAorICAgICAgICBzZWxieWlkICRuZXdoZWFkCisgICAgfQorCisgICAgbm90YnVzeSByZXZlcnQKK30KKworcHJvYyByZXNldGhlYWQge30geworICAgIGdsb2JhbCBtYWluaGVhZCByb3dtZW51aWQgY29uZmlybV9vayByZXNldHR5cGUgTlMKKworICAgIHNldCBjb25maXJtX29rIDAKKyAgICBzZXQgdyAiLmNvbmZpcm1yZXNldCIKKyAgICB0dGtfdG9wbGV2ZWwgJHcKKyAgICBtYWtlX3RyYW5zaWVudCAkdyAuCisgICAgd20gdGl0bGUgJHcgW21jICJDb25maXJtIHJlc2V0Il0KKyAgICAke05TfTo6bGFiZWwgJHcubSAtdGV4dCBcCisJW21jICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IiAkbWFpbmhlYWQgW3N0cmluZyByYW5nZSAkcm93bWVudWlkIDAgN11dCisgICAgcGFjayAkdy5tIC1zaWRlIHRvcCAtZmlsbCB4IC1wYWR4IDIwIC1wYWR5IDIwCisgICAgJHtOU306OmxhYmVsZnJhbWUgJHcuZiAtdGV4dCBbbWMgIlJlc2V0IHR5cGU6Il0KKyAgICBzZXQgcmVzZXR0eXBlIG1peGVkCisgICAgJHtOU306OnJhZGlvYnV0dG9uICR3LmYuc29mdCAtdmFsdWUgc29mdCAtdmFyaWFibGUgcmVzZXR0eXBlIFwKKwktdGV4dCBbbWMgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIl0KKyAgICBncmlkICR3LmYuc29mdCAtc3RpY2t5IHcKKyAgICAke05TfTo6cmFkaW9idXR0b24gJHcuZi5taXhlZCAtdmFsdWUgbWl4ZWQgLXZhcmlhYmxlIHJlc2V0dHlwZSBcCisJLXRleHQgW21jICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiXQorICAgIGdyaWQgJHcuZi5taXhlZCAtc3RpY2t5IHcKKyAgICAke05TfTo6cmFkaW9idXR0b24gJHcuZi5oYXJkIC12YWx1ZSBoYXJkIC12YXJpYWJsZSByZXNldHR5cGUgXAorCS10ZXh0IFttYyAiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIl0KKyAgICBncmlkICR3LmYuaGFyZCAtc3RpY2t5IHcKKyAgICBwYWNrICR3LmYgLXNpZGUgdG9wIC1maWxsIHggLXBhZHggNAorICAgICR7TlN9OjpidXR0b24gJHcub2sgLXRleHQgW21jIE9LXSAtY29tbWFuZCAic2V0IGNvbmZpcm1fb2sgMTsgZGVzdHJveSAkdyIKKyAgICBwYWNrICR3Lm9rIC1zaWRlIGxlZnQgLWZpbGwgeCAtcGFkeCAyMCAtcGFkeSAyMAorICAgICR7TlN9OjpidXR0b24gJHcuY2FuY2VsIC10ZXh0IFttYyBDYW5jZWxdIC1jb21tYW5kICJkZXN0cm95ICR3IgorICAgIGJpbmQgJHcgPEtleS1Fc2NhcGU+IFtsaXN0IGRlc3Ryb3kgJHddCisgICAgcGFjayAkdy5jYW5jZWwgLXNpZGUgcmlnaHQgLWZpbGwgeCAtcGFkeCAyMCAtcGFkeSAyMAorICAgIGJpbmQgJHcgPFZpc2liaWxpdHk+ICJncmFiICR3OyBmb2N1cyAkdyIKKyAgICB0a3dhaXQgd2luZG93ICR3CisgICAgaWYgeyEkY29uZmlybV9va30gcmV0dXJuCisgICAgaWYge1tjYXRjaCB7c2V0IGZkIFtvcGVuIFwKKwkgICAgW2xpc3QgfCBnaXQgcmVzZXQgLS0kcmVzZXR0eXBlICRyb3dtZW51aWQgMj5AMV0gcl19IGVycl19IHsKKwllcnJvcl9wb3B1cCAkZXJyCisgICAgfSBlbHNlIHsKKwlkb2hpZGVsb2NhbGNoYW5nZXMKKwlmaWxlcnVuICRmZCBbbGlzdCByZWFkcmVzZXRzdGF0ICRmZF0KKwlub3didXN5IHJlc2V0IFttYyAiUmVzZXR0aW5nIl0KKwlzZWxieWlkICRyb3dtZW51aWQKKyAgICB9Cit9CisKK3Byb2MgcmVhZHJlc2V0c3RhdCB7ZmR9IHsKKyAgICBnbG9iYWwgbWFpbmhlYWQgbWFpbmhlYWRpZCBzaG93bG9jYWxjaGFuZ2VzIHJwcm9nY29vcmQKKworICAgIGlmIHtbZ2V0cyAkZmQgbGluZV0gPj0gMH0geworCWlmIHtbcmVnZXhwIHsoWzAtOV0rKSUgXCgoWzAtOV0rKS8oWzAtOV0rKVwpfSAkbGluZSBtYXRjaCBwIG0gbl19IHsKKwkgICAgc2V0IHJwcm9nY29vcmQgW2V4cHIgezEuMCAqICRtIC8gJG59XQorCSAgICBhZGp1c3Rwcm9ncmVzcworCX0KKwlyZXR1cm4gMQorICAgIH0KKyAgICBzZXQgcnByb2djb29yZCAwCisgICAgYWRqdXN0cHJvZ3Jlc3MKKyAgICBub3RidXN5IHJlc2V0CisgICAgaWYge1tjYXRjaCB7Y2xvc2UgJGZkfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgJGVycgorICAgIH0KKyAgICBzZXQgb2xkaGVhZCAkbWFpbmhlYWRpZAorICAgIHNldCBuZXdoZWFkIFtleGVjIGdpdCByZXYtcGFyc2UgSEVBRF0KKyAgICBpZiB7JG5ld2hlYWQgbmUgJG9sZGhlYWR9IHsKKwltb3ZlaGVhZCAkbmV3aGVhZCAkbWFpbmhlYWQKKwltb3ZlZGhlYWQgJG5ld2hlYWQgJG1haW5oZWFkCisJc2V0IG1haW5oZWFkaWQgJG5ld2hlYWQKKwlyZWRyYXd0YWdzICRvbGRoZWFkCisJcmVkcmF3dGFncyAkbmV3aGVhZAorICAgIH0KKyAgICBpZiB7JHNob3dsb2NhbGNoYW5nZXN9IHsKKwlkb3Nob3dsb2NhbGNoYW5nZXMKKyAgICB9CisgICAgcmV0dXJuIDAKK30KKworIyBjb250ZXh0IG1lbnUgZm9yIGEgaGVhZAorcHJvYyBoZWFkbWVudSB7eCB5IGlkIGhlYWR9IHsKKyAgICBnbG9iYWwgaGVhZG1lbnVpZCBoZWFkbWVudWhlYWQgaGVhZGN0eG1lbnUgbWFpbmhlYWQgaGVhZGlkcworCisgICAgc3RvcGZpbmRpbmcKKyAgICBzZXQgaGVhZG1lbnVpZCAkaWQKKyAgICBzZXQgaGVhZG1lbnVoZWFkICRoZWFkCisgICAgYXJyYXkgc2V0IHN0YXRlIHswIG5vcm1hbCAxIG5vcm1hbCAyIG5vcm1hbH0KKyAgICBpZiB7W3N0cmluZyBtYXRjaCAicmVtb3Rlcy8qIiAkaGVhZF19IHsKKwlzZXQgbG9jYWxoZWFkIFtzdHJpbmcgcmFuZ2UgJGhlYWQgW2V4cHIgW3N0cmluZyBsYXN0IC8gJGhlYWRdICsgMV0gZW5kXQorCWlmIHtbaW5mbyBleGlzdHMgaGVhZGlkcygkbG9jYWxoZWFkKV19IHsKKwkgICAgc2V0IHN0YXRlKDApIGRpc2FibGVkCisJfQorCWFycmF5IHNldCBzdGF0ZSB7MSBkaXNhYmxlZCAyIGRpc2FibGVkfQorICAgIH0KKyAgICBpZiB7JGhlYWQgZXEgJG1haW5oZWFkfSB7CisJYXJyYXkgc2V0IHN0YXRlIHswIGRpc2FibGVkIDIgZGlzYWJsZWR9CisgICAgfQorICAgIGZvcmVhY2ggaSB7MCAxIDJ9IHsKKwkkaGVhZGN0eG1lbnUgZW50cnljb25maWd1cmUgJGkgLXN0YXRlICRzdGF0ZSgkaSkKKyAgICB9CisgICAgdGtfcG9wdXAgJGhlYWRjdHhtZW51ICR4ICR5Cit9CisKK3Byb2MgY29icmFuY2gge30geworICAgIGdsb2JhbCBoZWFkbWVudWlkIGhlYWRtZW51aGVhZCBoZWFkaWRzCisgICAgZ2xvYmFsIHNob3dsb2NhbGNoYW5nZXMKKworICAgICMgY2hlY2sgdGhlIHRyZWUgaXMgY2xlYW4gZmlyc3Q/PworICAgIHNldCBuZXdoZWFkICRoZWFkbWVudWhlYWQKKyAgICBzZXQgY29tbWFuZCBbbGlzdCB8IGdpdCBjaGVja291dF0KKyAgICBpZiB7W3N0cmluZyBtYXRjaCAicmVtb3Rlcy8qIiAkbmV3aGVhZF19IHsKKwlzZXQgcmVtb3RlICRuZXdoZWFkCisJc2V0IG5ld2hlYWQgW3N0cmluZyByYW5nZSAkbmV3aGVhZCBbZXhwciBbc3RyaW5nIGxhc3QgLyAkbmV3aGVhZF0gKyAxXSBlbmRdCisJIyBUaGUgZm9sbG93aW5nIGNoZWNrIGlzIHJlZHVuZGFudCAtIHRoZSBtZW51IG9wdGlvbiBzaG91bGQKKwkjIGJlIGRpc2FibGVkIHRvIGJlZ2luIHdpdGguLi4KKwlpZiB7W2luZm8gZXhpc3RzIGhlYWRpZHMoJG5ld2hlYWQpXX0geworCSAgICBlcnJvcl9wb3B1cCBbbWMgIkEgbG9jYWwgYnJhbmNoIG5hbWVkICVzIGV4aXN0cyBhbHJlYWR5IiAkbmV3aGVhZF0KKwkgICAgcmV0dXJuCisJfQorCWxhcHBlbmQgY29tbWFuZCAtYiAkbmV3aGVhZCAtLXRyYWNrICRyZW1vdGUKKyAgICB9IGVsc2UgeworCWxhcHBlbmQgY29tbWFuZCAkbmV3aGVhZAorICAgIH0KKyAgICBsYXBwZW5kIGNvbW1hbmQgMj5AMQorICAgIG5vd2J1c3kgY2hlY2tvdXQgW21jICJDaGVja2luZyBvdXQiXQorICAgIHVwZGF0ZQorICAgIGRvaGlkZWxvY2FsY2hhbmdlcworICAgIGlmIHtbY2F0Y2ggeworCXNldCBmZCBbb3BlbiAkY29tbWFuZCByXQorICAgIH0gZXJyXX0geworCW5vdGJ1c3kgY2hlY2tvdXQKKwllcnJvcl9wb3B1cCAkZXJyCisJaWYgeyRzaG93bG9jYWxjaGFuZ2VzfSB7CisJICAgIGRvZGlmZmluZGV4CisJfQorICAgIH0gZWxzZSB7CisJZmlsZXJ1biAkZmQgW2xpc3QgcmVhZGNoZWNrb3V0c3RhdCAkZmQgJG5ld2hlYWQgJGhlYWRtZW51aWRdCisgICAgfQorfQorCitwcm9jIHJlYWRjaGVja291dHN0YXQge2ZkIG5ld2hlYWQgbmV3aGVhZGlkfSB7CisgICAgZ2xvYmFsIG1haW5oZWFkIG1haW5oZWFkaWQgaGVhZGlkcyBpZGhlYWRzIHNob3dsb2NhbGNoYW5nZXMgcHJvZ3Jlc3Njb29yZHMKKyAgICBnbG9iYWwgdmlld21haW5oZWFkaWQgY3VydmlldworCisgICAgaWYge1tnZXRzICRmZCBsaW5lXSA+PSAwfSB7CisJaWYge1tyZWdleHAgeyhbMC05XSspJSBcKChbMC05XSspLyhbMC05XSspXCl9ICRsaW5lIG1hdGNoIHAgbSBuXX0geworCSAgICBzZXQgcHJvZ3Jlc3Njb29yZHMgW2xpc3QgMCBbZXhwciB7MS4wICogJG0gLyAkbn1dXQorCSAgICBhZGp1c3Rwcm9ncmVzcworCX0KKwlyZXR1cm4gMQorICAgIH0KKyAgICBzZXQgcHJvZ3Jlc3Njb29yZHMgezAgMH0KKyAgICBhZGp1c3Rwcm9ncmVzcworICAgIG5vdGJ1c3kgY2hlY2tvdXQKKyAgICBpZiB7W2NhdGNoIHtjbG9zZSAkZmR9IGVycl19IHsKKwllcnJvcl9wb3B1cCAkZXJyCisJcmV0dXJuCisgICAgfQorICAgIHNldCBvbGRtYWluaWQgJG1haW5oZWFkaWQKKyAgICBpZiB7ISBbaW5mbyBleGlzdHMgaGVhZGlkcygkbmV3aGVhZCldfSB7CisJc2V0IGhlYWRpZHMoJG5ld2hlYWQpICRuZXdoZWFkaWQKKwlsYXBwZW5kIGlkaGVhZHMoJG5ld2hlYWRpZCkgJG5ld2hlYWQKKwlhZGRlZGhlYWQgJG5ld2hlYWRpZCAkbmV3aGVhZAorICAgIH0KKyAgICBzZXQgbWFpbmhlYWQgJG5ld2hlYWQKKyAgICBzZXQgbWFpbmhlYWRpZCAkbmV3aGVhZGlkCisgICAgc2V0IHZpZXdtYWluaGVhZGlkKCRjdXJ2aWV3KSAkbmV3aGVhZGlkCisgICAgcmVkcmF3dGFncyAkb2xkbWFpbmlkCisgICAgcmVkcmF3dGFncyAkbmV3aGVhZGlkCisgICAgc2VsYnlpZCAkbmV3aGVhZGlkCisgICAgaWYgeyRzaG93bG9jYWxjaGFuZ2VzfSB7CisJZG9kaWZmaW5kZXgKKyAgICB9Cit9CisKK3Byb2Mgcm1icmFuY2gge30geworICAgIGdsb2JhbCBoZWFkbWVudWlkIGhlYWRtZW51aGVhZCBtYWluaGVhZAorICAgIGdsb2JhbCBpZGhlYWRzCisKKyAgICBzZXQgaGVhZCAkaGVhZG1lbnVoZWFkCisgICAgc2V0IGlkICRoZWFkbWVudWlkCisgICAgIyB0aGlzIGNoZWNrIHNob3VsZG4ndCBiZSBuZWVkZWQgYW55IG1vcmUuLi4KKyAgICBpZiB7JGhlYWQgZXEgJG1haW5oZWFkfSB7CisJZXJyb3JfcG9wdXAgW21jICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIl0KKwlyZXR1cm4KKyAgICB9CisgICAgc2V0IGRoZWFkcyBbZGVzY2hlYWRzICRpZF0KKyAgICBpZiB7W2xsZW5ndGggJGRoZWFkc10gPT0gMSAmJiAkaWRoZWFkcygkZGhlYWRzKSBlcSAkaGVhZH0geworCSMgdGhlIHN0dWZmIG9uIHRoaXMgYnJhbmNoIGlzbid0IG9uIGFueSBvdGhlciBicmFuY2gKKwlpZiB7IVtjb25maXJtX3BvcHVwIFttYyAiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXJcCisJCQlicmFuY2guXG5SZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iICRoZWFkICRoZWFkXV19IHJldHVybgorICAgIH0KKyAgICBub3didXN5IHJtYnJhbmNoCisgICAgdXBkYXRlCisgICAgaWYge1tjYXRjaCB7ZXhlYyBnaXQgYnJhbmNoIC1EICRoZWFkfSBlcnJdfSB7CisJbm90YnVzeSBybWJyYW5jaAorCWVycm9yX3BvcHVwICRlcnIKKwlyZXR1cm4KKyAgICB9CisgICAgcmVtb3ZlaGVhZCAkaWQgJGhlYWQKKyAgICByZW1vdmVkaGVhZCAkaWQgJGhlYWQKKyAgICByZWRyYXd0YWdzICRpZAorICAgIG5vdGJ1c3kgcm1icmFuY2gKKyAgICBkaXNwbmVhcnRhZ3MgMAorICAgIHJ1biByZWZpbGxfcmVmbGlzdAorfQorCisjIERpc3BsYXkgYSBsaXN0IG9mIHRhZ3MgYW5kIGhlYWRzCitwcm9jIHNob3dyZWZzIHt9IHsKKyAgICBnbG9iYWwgc2hvd3JlZnN0b3AgYmdjb2xvciBmZ2NvbG9yIHNlbGVjdGJnY29sb3IgTlMKKyAgICBnbG9iYWwgYmdsaXN0IGZnbGlzdCByZWZsaXN0ZmlsdGVyIHJlZmxpc3QgbWFpbmN1cnNvcgorCisgICAgc2V0IHRvcCAuc2hvd3JlZnMKKyAgICBzZXQgc2hvd3JlZnN0b3AgJHRvcAorICAgIGlmIHtbd2luZm8gZXhpc3RzICR0b3BdfSB7CisJcmFpc2UgJHRvcAorCXJlZmlsbF9yZWZsaXN0CisJcmV0dXJuCisgICAgfQorICAgIHR0a190b3BsZXZlbCAkdG9wCisgICAgd20gdGl0bGUgJHRvcCBbbWMgIlRhZ3MgYW5kIGhlYWRzOiAlcyIgW2ZpbGUgdGFpbCBbcHdkXV1dCisgICAgbWFrZV90cmFuc2llbnQgJHRvcCAuCisgICAgdGV4dCAkdG9wLmxpc3QgLWJhY2tncm91bmQgJGJnY29sb3IgLWZvcmVncm91bmQgJGZnY29sb3IgXAorCS1zZWxlY3RiYWNrZ3JvdW5kICRzZWxlY3RiZ2NvbG9yIC1mb250IG1haW5mb250IFwKKwkteHNjcm9sbGNvbW1hbmQgIiR0b3AueHNiIHNldCIgLXlzY3JvbGxjb21tYW5kICIkdG9wLnlzYiBzZXQiIFwKKwktd2lkdGggMzAgLWhlaWdodCAyMCAtY3Vyc29yICRtYWluY3Vyc29yIFwKKwktc3BhY2luZzEgMSAtc3BhY2luZzMgMSAtc3RhdGUgZGlzYWJsZWQKKyAgICAkdG9wLmxpc3QgdGFnIGNvbmZpZ3VyZSBoaWdobGlnaHQgLWJhY2tncm91bmQgJHNlbGVjdGJnY29sb3IKKyAgICBpZiB7IVtsc2VhcmNoIC1leGFjdCAkYmdsaXN0ICR0b3AubGlzdF19IHsKKwlsYXBwZW5kIGJnbGlzdCAkdG9wLmxpc3QKKwlsYXBwZW5kIGZnbGlzdCAkdG9wLmxpc3QKKyAgICB9CisgICAgJHtOU306OnNjcm9sbGJhciAkdG9wLnlzYiAtY29tbWFuZCAiJHRvcC5saXN0IHl2aWV3IiAtb3JpZW50IHZlcnRpY2FsCisgICAgJHtOU306OnNjcm9sbGJhciAkdG9wLnhzYiAtY29tbWFuZCAiJHRvcC5saXN0IHh2aWV3IiAtb3JpZW50IGhvcml6b250YWwKKyAgICBncmlkICR0b3AubGlzdCAkdG9wLnlzYiAtc3RpY2t5IG5zZXcKKyAgICBncmlkICR0b3AueHNiIHggLXN0aWNreSBldworICAgICR7TlN9OjpmcmFtZSAkdG9wLmYKKyAgICAke05TfTo6bGFiZWwgJHRvcC5mLmwgLXRleHQgIlttYyAiRmlsdGVyIl06ICIKKyAgICAke05TfTo6ZW50cnkgJHRvcC5mLmUgLXdpZHRoIDIwIC10ZXh0dmFyaWFibGUgcmVmbGlzdGZpbHRlcgorICAgIHNldCByZWZsaXN0ZmlsdGVyICIqIgorICAgIHRyYWNlIGFkZCB2YXJpYWJsZSByZWZsaXN0ZmlsdGVyIHdyaXRlIHJlZmxpc3RmaWx0ZXJfY2hhbmdlCisgICAgcGFjayAkdG9wLmYuZSAtc2lkZSByaWdodCAtZmlsbCB4IC1leHBhbmQgMQorICAgIHBhY2sgJHRvcC5mLmwgLXNpZGUgbGVmdAorICAgIGdyaWQgJHRvcC5mIC0gLXN0aWNreSBldyAtcGFkeSAyCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmNsb3NlIC1jb21tYW5kIFtsaXN0IGRlc3Ryb3kgJHRvcF0gLXRleHQgW21jICJDbG9zZSJdCisgICAgYmluZCAkdG9wIDxLZXktRXNjYXBlPiBbbGlzdCBkZXN0cm95ICR0b3BdCisgICAgZ3JpZCAkdG9wLmNsb3NlIC0KKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wIDAgLXdlaWdodCAxCisgICAgZ3JpZCByb3djb25maWd1cmUgJHRvcCAwIC13ZWlnaHQgMQorICAgIGJpbmQgJHRvcC5saXN0IDwxPiB7YnJlYWt9CisgICAgYmluZCAkdG9wLmxpc3QgPEIxLU1vdGlvbj4ge2JyZWFrfQorICAgIGJpbmQgJHRvcC5saXN0IDxCdXR0b25SZWxlYXNlLTE+IHtzZWxfcmVmbGlzdCAlVyAleCAleTsgYnJlYWt9CisgICAgc2V0IHJlZmxpc3Qge30KKyAgICByZWZpbGxfcmVmbGlzdAorfQorCitwcm9jIHNlbF9yZWZsaXN0IHt3IHggeX0geworICAgIGdsb2JhbCBzaG93cmVmc3RvcCByZWZsaXN0IGhlYWRpZHMgdGFnaWRzIG90aGVycmVmaWRzCisKKyAgICBpZiB7IVt3aW5mbyBleGlzdHMgJHNob3dyZWZzdG9wXX0gcmV0dXJuCisgICAgc2V0IGwgW2xpbmRleCBbc3BsaXQgWyR3IGluZGV4ICJAJHgsJHkiXSAiLiJdIDBdCisgICAgc2V0IHJlZiBbbGluZGV4ICRyZWZsaXN0IFtleHByIHskbC0xfV1dCisgICAgc2V0IG4gW2xpbmRleCAkcmVmIDBdCisgICAgc3dpdGNoIC0tIFtsaW5kZXggJHJlZiAxXSB7CisJIkgiIHtzZWxieWlkICRoZWFkaWRzKCRuKX0KKwkiUiIge3NlbGJ5aWQgJGhlYWRpZHMoJG4pfQorCSJUIiB7c2VsYnlpZCAkdGFnaWRzKCRuKX0KKwkibyIge3NlbGJ5aWQgJG90aGVycmVmaWRzKCRuKX0KKyAgICB9CisgICAgJHNob3dyZWZzdG9wLmxpc3QgdGFnIGFkZCBoaWdobGlnaHQgJGwuMCAiJGwuMCBsaW5lZW5kIgorfQorCitwcm9jIHVuc2VsX3JlZmxpc3Qge30geworICAgIGdsb2JhbCBzaG93cmVmc3RvcAorCisgICAgaWYgeyFbaW5mbyBleGlzdHMgc2hvd3JlZnN0b3BdIHx8ICFbd2luZm8gZXhpc3RzICRzaG93cmVmc3RvcF19IHJldHVybgorICAgICRzaG93cmVmc3RvcC5saXN0IHRhZyByZW1vdmUgaGlnaGxpZ2h0IDAuMCBlbmQKK30KKworcHJvYyByZWZsaXN0ZmlsdGVyX2NoYW5nZSB7bjEgbjIgb3B9IHsKKyAgICBnbG9iYWwgcmVmbGlzdGZpbHRlcgorCisgICAgYWZ0ZXIgY2FuY2VsIHJlZmlsbF9yZWZsaXN0CisgICAgYWZ0ZXIgMjAwIHJlZmlsbF9yZWZsaXN0Cit9CisKK3Byb2MgcmVmaWxsX3JlZmxpc3Qge30geworICAgIGdsb2JhbCByZWZsaXN0IHJlZmxpc3RmaWx0ZXIgc2hvd3JlZnN0b3AgaGVhZGlkcyB0YWdpZHMgb3RoZXJyZWZpZHMKKyAgICBnbG9iYWwgY3VydmlldworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgc2hvd3JlZnN0b3BdIHx8ICFbd2luZm8gZXhpc3RzICRzaG93cmVmc3RvcF19IHJldHVybgorICAgIHNldCByZWZzIHt9CisgICAgZm9yZWFjaCBuIFthcnJheSBuYW1lcyBoZWFkaWRzXSB7CisJaWYge1tzdHJpbmcgbWF0Y2ggJHJlZmxpc3RmaWx0ZXIgJG5dfSB7CisJICAgIGlmIHtbY29tbWl0aW52aWV3ICRoZWFkaWRzKCRuKSAkY3Vydmlld119IHsKKwkJaWYge1tzdHJpbmcgbWF0Y2ggInJlbW90ZXMvKiIgJG5dfSB7CisJCSAgICBsYXBwZW5kIHJlZnMgW2xpc3QgJG4gUl0KKwkJfSBlbHNlIHsKKwkJICAgIGxhcHBlbmQgcmVmcyBbbGlzdCAkbiBIXQorCQl9CisJICAgIH0gZWxzZSB7CisJCWludGVyZXN0ZWRpbiAkaGVhZGlkcygkbikge3J1biByZWZpbGxfcmVmbGlzdH0KKwkgICAgfQorCX0KKyAgICB9CisgICAgZm9yZWFjaCBuIFthcnJheSBuYW1lcyB0YWdpZHNdIHsKKwlpZiB7W3N0cmluZyBtYXRjaCAkcmVmbGlzdGZpbHRlciAkbl19IHsKKwkgICAgaWYge1tjb21taXRpbnZpZXcgJHRhZ2lkcygkbikgJGN1cnZpZXddfSB7CisJCWxhcHBlbmQgcmVmcyBbbGlzdCAkbiBUXQorCSAgICB9IGVsc2UgeworCQlpbnRlcmVzdGVkaW4gJHRhZ2lkcygkbikge3J1biByZWZpbGxfcmVmbGlzdH0KKwkgICAgfQorCX0KKyAgICB9CisgICAgZm9yZWFjaCBuIFthcnJheSBuYW1lcyBvdGhlcnJlZmlkc10geworCWlmIHtbc3RyaW5nIG1hdGNoICRyZWZsaXN0ZmlsdGVyICRuXX0geworCSAgICBpZiB7W2NvbW1pdGludmlldyAkb3RoZXJyZWZpZHMoJG4pICRjdXJ2aWV3XX0geworCQlsYXBwZW5kIHJlZnMgW2xpc3QgJG4gb10KKwkgICAgfSBlbHNlIHsKKwkJaW50ZXJlc3RlZGluICRvdGhlcnJlZmlkcygkbikge3J1biByZWZpbGxfcmVmbGlzdH0KKwkgICAgfQorCX0KKyAgICB9CisgICAgc2V0IHJlZnMgW2xzb3J0IC1pbmRleCAwICRyZWZzXQorICAgIGlmIHskcmVmcyBlcSAkcmVmbGlzdH0gcmV0dXJuCisKKyAgICAjIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgJHNob3dyZWZzdG9wLmxpc3QgYWNjb3JkaW5nIHRvIHRoZQorICAgICMgZGlmZmVyZW5jZXMgYmV0d2VlbiAkcmVmbGlzdCAob2xkKSBhbmQgJHJlZnMgKG5ldykKKyAgICAkc2hvd3JlZnN0b3AubGlzdCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICAkc2hvd3JlZnN0b3AubGlzdCBpbnNlcnQgZW5kICJcbiIKKyAgICBzZXQgaSAwCisgICAgc2V0IGogMAorICAgIHdoaWxlIHskaSA8IFtsbGVuZ3RoICRyZWZsaXN0XSB8fCAkaiA8IFtsbGVuZ3RoICRyZWZzXX0geworCWlmIHskaSA8IFtsbGVuZ3RoICRyZWZsaXN0XX0geworCSAgICBpZiB7JGogPCBbbGxlbmd0aCAkcmVmc119IHsKKwkJc2V0IGNtcCBbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkcmVmbGlzdCAkaSAwXSBcCisJCQkgICAgIFtsaW5kZXggJHJlZnMgJGogMF1dCisJCWlmIHskY21wID09IDB9IHsKKwkJICAgIHNldCBjbXAgW3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHJlZmxpc3QgJGkgMV0gXAorCQkJCSBbbGluZGV4ICRyZWZzICRqIDFdXQorCQl9CisJICAgIH0gZWxzZSB7CisJCXNldCBjbXAgLTEKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHNldCBjbXAgMQorCX0KKwlzd2l0Y2ggLS0gJGNtcCB7CisJICAgIC0xIHsKKwkJJHNob3dyZWZzdG9wLmxpc3QgZGVsZXRlICJbZXhwciB7JGorMX1dLjAiICJbZXhwciB7JGorMn1dLjAiCisJCWluY3IgaQorCSAgICB9CisJICAgIDAgeworCQlpbmNyIGkKKwkJaW5jciBqCisJICAgIH0KKwkgICAgMSB7CisJCXNldCBsIFtleHByIHskaiArIDF9XQorCQkkc2hvd3JlZnN0b3AubGlzdCBpbWFnZSBjcmVhdGUgJGwuMCAtYWxpZ24gYmFzZWxpbmUgXAorCQkgICAgLWltYWdlIHJlZmljb24tW2xpbmRleCAkcmVmcyAkaiAxXSAtcGFkeCAyCisJCSRzaG93cmVmc3RvcC5saXN0IGluc2VydCAkbC4xICJbbGluZGV4ICRyZWZzICRqIDBdXG4iCisJCWluY3IgagorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgcmVmbGlzdCAkcmVmcworICAgICMgZGVsZXRlIGxhc3QgbmV3bGluZQorICAgICRzaG93cmVmc3RvcC5saXN0IGRlbGV0ZSBlbmQtMmMgZW5kLTFjCisgICAgJHNob3dyZWZzdG9wLmxpc3QgY29uZiAtc3RhdGUgZGlzYWJsZWQKK30KKworIyBTdHVmZiBmb3IgZmluZGluZyBuZWFyYnkgdGFncworcHJvYyBnZXRhbGxjb21taXRzIHt9IHsKKyAgICBnbG9iYWwgYWxsY29tbWl0cyBuZXh0YXJjIHNlZWRzIGFsbGNjYWNoZSBhbGxjd2FpdCBjYWNoZWRhcmNzIGFsbGN1cGRhdGUKKyAgICBnbG9iYWwgaWRoZWFkcyBpZHRhZ3MgaWRvdGhlcnJlZnMgYWxscGFyZW50cyB0YWdvYmppZAorICAgIGdsb2JhbCBnaXRkaXIKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGFsbGNvbW1pdHNdfSB7CisJc2V0IG5leHRhcmMgMAorCXNldCBhbGxjb21taXRzIDAKKwlzZXQgc2VlZHMge30KKwlzZXQgYWxsY3dhaXQgMAorCXNldCBjYWNoZWRhcmNzIDAKKwlzZXQgYWxsY2NhY2hlIFtmaWxlIGpvaW4gJGdpdGRpciAiZ2l0ay5jYWNoZSJdCisJaWYgeyFbY2F0Y2ggeworCSAgICBzZXQgZiBbb3BlbiAkYWxsY2NhY2hlIHJdCisJICAgIHNldCBhbGxjd2FpdCAxCisJICAgIGdldGNhY2hlICRmCisJfV19IHJldHVybgorICAgIH0KKworICAgIGlmIHskYWxsY3dhaXR9IHsKKwlyZXR1cm4KKyAgICB9CisgICAgc2V0IGNtZCBbbGlzdCB8IGdpdCByZXYtbGlzdCAtLXBhcmVudHNdCisgICAgc2V0IGFsbGN1cGRhdGUgW2V4cHIgeyRzZWVkcyBuZSB7fX1dCisgICAgaWYgeyEkYWxsY3VwZGF0ZX0geworCXNldCBpZHMgIi0tYWxsIgorICAgIH0gZWxzZSB7CisJc2V0IHJlZnMgW2NvbmNhdCBbYXJyYXkgbmFtZXMgaWRoZWFkc10gW2FycmF5IG5hbWVzIGlkdGFnc10gXAorCQkgICAgICBbYXJyYXkgbmFtZXMgaWRvdGhlcnJlZnNdXQorCXNldCBpZHMge30KKwlzZXQgdGFnb2JqcyB7fQorCWZvcmVhY2ggbmFtZSBbYXJyYXkgbmFtZXMgdGFnb2JqaWRdIHsKKwkgICAgbGFwcGVuZCB0YWdvYmpzICR0YWdvYmppZCgkbmFtZSkKKwl9CisJZm9yZWFjaCBpZCBbbHNvcnQgLXVuaXF1ZSAkcmVmc10geworCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBhbGxwYXJlbnRzKCRpZCldICYmCisJCVtsc2VhcmNoIC1leGFjdCAkdGFnb2JqcyAkaWRdIDwgMH0geworCQlsYXBwZW5kIGlkcyAkaWQKKwkgICAgfQorCX0KKwlpZiB7JGlkcyBuZSB7fX0geworCSAgICBmb3JlYWNoIGlkICRzZWVkcyB7CisJCWxhcHBlbmQgaWRzICJeJGlkIgorCSAgICB9CisJfQorICAgIH0KKyAgICBpZiB7JGlkcyBuZSB7fX0geworCXNldCBmZCBbb3BlbiBbY29uY2F0ICRjbWQgJGlkc10gcl0KKwlmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMAorCWluY3IgYWxsY29tbWl0cworCW5vd2J1c3kgYWxsY29tbWl0cworCWZpbGVydW4gJGZkIFtsaXN0IGdldGFsbGNsaW5lcyAkZmRdCisgICAgfSBlbHNlIHsKKwlkaXNwbmVhcnRhZ3MgMAorICAgIH0KK30KKworIyBTaW5jZSBtb3N0IGNvbW1pdHMgaGF2ZSAxIHBhcmVudCBhbmQgMSBjaGlsZCwgd2UgZ3JvdXAgc3RyaW5ncyBvZgorIyBzdWNoIGNvbW1pdHMgaW50byAiYXJjcyIgam9pbmluZyBicmFuY2gvbWVyZ2UgcG9pbnRzIChCTVBzKSwgd2hpY2gKKyMgYXJlIGNvbW1pdHMgdGhhdCBlaXRoZXIgZG9uJ3QgaGF2ZSAxIHBhcmVudCBvciBkb24ndCBoYXZlIDEgY2hpbGQuCisjCisjIGFyY25vcyhpZCkgLSBpbmNvbWluZyBhcmNzIGZvciBCTVAsIGFyYyB3ZSdyZSBvbiBmb3Igb3RoZXIgbm9kZXMKKyMgYXJjb3V0KGlkKSAtIG91dGdvaW5nIGFyY3MgZm9yIEJNUAorIyBhcmNpZHMoYSkgLSBsaXN0IG9mIElEcyBvbiBhcmMgaW5jbHVkaW5nIGVuZCBidXQgbm90IHN0YXJ0CisjIGFyY3N0YXJ0KGEpIC0gQk1QIElEIGF0IHN0YXJ0IG9mIGFyYworIyBhcmNlbmQoYSkgLSBCTVAgSUQgYXQgZW5kIG9mIGFyYworIyBncm93aW5nKGEpIC0gYXJjIGEgaXMgc3RpbGwgZ3Jvd2luZworIyBhcmN0YWdzKGEpIC0gSURzIG91dCBvZiBhcmNpZHMgKGV4Y2x1ZGluZyBlbmQpIHRoYXQgaGF2ZSB0YWdzCisjIGFyY2hlYWRzKGEpIC0gSURzIG91dCBvZiBhcmNpZHMgKGV4Y2x1ZGluZyBlbmQpIHRoYXQgaGF2ZSBoZWFkcworIyBUaGUgc3RhcnQgb2YgYW4gYXJjIGlzIGF0IHRoZSBkZXNjZW5kZW50IGVuZCwgc28gImluY29taW5nIiBtZWFucworIyBjb21pbmcgZnJvbSBkZXNjZW5kZW50cywgYW5kICJvdXRnb2luZyIgbWVhbnMgZ29pbmcgdG93YXJkcyBhbmNlc3RvcnMuCisKK3Byb2MgZ2V0YWxsY2xpbmVzIHtmZH0geworICAgIGdsb2JhbCBhbGxwYXJlbnRzIGFsbGNoaWxkcmVuIGlkdGFncyBpZGhlYWRzIG5leHRhcmMKKyAgICBnbG9iYWwgYXJjbm9zIGFyY2lkcyBhcmN0YWdzIGFyY291dCBhcmNlbmQgYXJjc3RhcnQgYXJjaGVhZHMgZ3Jvd2luZworICAgIGdsb2JhbCBzZWVkcyBhbGxjb21taXRzIGNhY2hlZGFyY3MgYWxsY3VwZGF0ZQorCisgICAgc2V0IG5pZCAwCisgICAgd2hpbGUge1tpbmNyIG5pZF0gPD0gMTAwMCAmJiBbZ2V0cyAkZmQgbGluZV0gPj0gMH0geworCXNldCBpZCBbbGluZGV4ICRsaW5lIDBdCisJaWYge1tpbmZvIGV4aXN0cyBhbGxwYXJlbnRzKCRpZCldfSB7CisJICAgICMgc2VlbiBpdCBhbHJlYWR5CisJICAgIGNvbnRpbnVlCisJfQorCXNldCBjYWNoZWRhcmNzIDAKKwlzZXQgb2xkcyBbbHJhbmdlICRsaW5lIDEgZW5kXQorCXNldCBhbGxwYXJlbnRzKCRpZCkgJG9sZHMKKwlpZiB7IVtpbmZvIGV4aXN0cyBhbGxjaGlsZHJlbigkaWQpXX0geworCSAgICBzZXQgYWxsY2hpbGRyZW4oJGlkKSB7fQorCSAgICBzZXQgYXJjbm9zKCRpZCkge30KKwkgICAgbGFwcGVuZCBzZWVkcyAkaWQKKwl9IGVsc2UgeworCSAgICBzZXQgYSAkYXJjbm9zKCRpZCkKKwkgICAgaWYge1tsbGVuZ3RoICRvbGRzXSA9PSAxICYmIFtsbGVuZ3RoICRhXSA9PSAxfSB7CisJCWxhcHBlbmQgYXJjaWRzKCRhKSAkaWQKKwkJaWYge1tpbmZvIGV4aXN0cyBpZHRhZ3MoJGlkKV19IHsKKwkJICAgIGxhcHBlbmQgYXJjdGFncygkYSkgJGlkCisJCX0KKwkJaWYge1tpbmZvIGV4aXN0cyBpZGhlYWRzKCRpZCldfSB7CisJCSAgICBsYXBwZW5kIGFyY2hlYWRzKCRhKSAkaWQKKwkJfQorCQlpZiB7W2luZm8gZXhpc3RzIGFsbHBhcmVudHMoJG9sZHMpXX0geworCQkgICAgIyBzZWVuIHBhcmVudCBhbHJlYWR5CisJCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBhcmNvdXQoJG9sZHMpXX0geworCQkJc3BsaXRhcmMgJG9sZHMKKwkJICAgIH0KKwkJICAgIGxhcHBlbmQgYXJjaWRzKCRhKSAkb2xkcworCQkgICAgc2V0IGFyY2VuZCgkYSkgJG9sZHMKKwkJICAgIHVuc2V0IGdyb3dpbmcoJGEpCisJCX0KKwkJbGFwcGVuZCBhbGxjaGlsZHJlbigkb2xkcykgJGlkCisJCWxhcHBlbmQgYXJjbm9zKCRvbGRzKSAkYQorCQljb250aW51ZQorCSAgICB9CisJfQorCWZvcmVhY2ggYSAkYXJjbm9zKCRpZCkgeworCSAgICBsYXBwZW5kIGFyY2lkcygkYSkgJGlkCisJICAgIHNldCBhcmNlbmQoJGEpICRpZAorCSAgICB1bnNldCBncm93aW5nKCRhKQorCX0KKworCXNldCBhbyB7fQorCWZvcmVhY2ggcCAkb2xkcyB7CisJICAgIGxhcHBlbmQgYWxsY2hpbGRyZW4oJHApICRpZAorCSAgICBzZXQgYSBbaW5jciBuZXh0YXJjXQorCSAgICBzZXQgYXJjc3RhcnQoJGEpICRpZAorCSAgICBzZXQgYXJjaGVhZHMoJGEpIHt9CisJICAgIHNldCBhcmN0YWdzKCRhKSB7fQorCSAgICBzZXQgYXJjaGVhZHMoJGEpIHt9CisJICAgIHNldCBhcmNpZHMoJGEpIHt9CisJICAgIGxhcHBlbmQgYW8gJGEKKwkgICAgc2V0IGdyb3dpbmcoJGEpIDEKKwkgICAgaWYge1tpbmZvIGV4aXN0cyBhbGxwYXJlbnRzKCRwKV19IHsKKwkJIyBzZWVuIGl0IGFscmVhZHksIG1heSBuZWVkIHRvIG1ha2UgYSBuZXcgYnJhbmNoCisJCWlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkcCldfSB7CisJCSAgICBzcGxpdGFyYyAkcAorCQl9CisJCWxhcHBlbmQgYXJjaWRzKCRhKSAkcAorCQlzZXQgYXJjZW5kKCRhKSAkcAorCQl1bnNldCBncm93aW5nKCRhKQorCSAgICB9CisJICAgIGxhcHBlbmQgYXJjbm9zKCRwKSAkYQorCX0KKwlzZXQgYXJjb3V0KCRpZCkgJGFvCisgICAgfQorICAgIGlmIHskbmlkID4gMH0geworCWdsb2JhbCBjYWNoZWRfZGhlYWRzIGNhY2hlZF9kdGFncyBjYWNoZWRfYXRhZ3MKKwl1bnNldCAtbm9jb21wbGFpbiBjYWNoZWRfZGhlYWRzCisJdW5zZXQgLW5vY29tcGxhaW4gY2FjaGVkX2R0YWdzCisJdW5zZXQgLW5vY29tcGxhaW4gY2FjaGVkX2F0YWdzCisgICAgfQorICAgIGlmIHshW2VvZiAkZmRdfSB7CisJcmV0dXJuIFtleHByIHskbmlkID49IDEwMDA/IDI6IDF9XQorICAgIH0KKyAgICBzZXQgY2FjaGVvayAxCisgICAgaWYge1tjYXRjaCB7CisJZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDEKKwljbG9zZSAkZmQKKyAgICB9IGVycl19IHsKKwkjIGdvdCBhbiBlcnJvciByZWFkaW5nIHRoZSBsaXN0IG9mIGNvbW1pdHMKKwkjIGlmIHdlIHdlcmUgdXBkYXRpbmcsIHRyeSByZXJlYWRpbmcgdGhlIHdob2xlIHRoaW5nIGFnYWluCisJaWYgeyRhbGxjdXBkYXRlfSB7CisJICAgIGluY3IgYWxsY29tbWl0cyAtMQorCSAgICBkcm9wY2FjaGUgJGVycgorCSAgICByZXR1cm4KKwl9CisJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247XAorCQlicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgdGFnIGluZm9ybWF0aW9uXAorCSAgICAgICAgd2lsbCBiZSBpbmNvbXBsZXRlLiJdXG4oJGVycikiCisJc2V0IGNhY2hlb2sgMAorICAgIH0KKyAgICBpZiB7W2luY3IgYWxsY29tbWl0cyAtMV0gPT0gMH0geworCW5vdGJ1c3kgYWxsY29tbWl0cworCWlmIHskY2FjaGVva30geworCSAgICBydW4gc2F2ZWNhY2hlCisJfQorICAgIH0KKyAgICBkaXNwbmVhcnRhZ3MgMAorICAgIHJldHVybiAwCit9CisKK3Byb2MgcmVjYWxjYXJjIHthfSB7CisgICAgZ2xvYmFsIGFyY3RhZ3MgYXJjaGVhZHMgYXJjaWRzIGlkdGFncyBpZGhlYWRzCisKKyAgICBzZXQgYXQge30KKyAgICBzZXQgYWgge30KKyAgICBmb3JlYWNoIGlkIFtscmFuZ2UgJGFyY2lkcygkYSkgMCBlbmQtMV0geworCWlmIHtbaW5mbyBleGlzdHMgaWR0YWdzKCRpZCldfSB7CisJICAgIGxhcHBlbmQgYXQgJGlkCisJfQorCWlmIHtbaW5mbyBleGlzdHMgaWRoZWFkcygkaWQpXX0geworCSAgICBsYXBwZW5kIGFoICRpZAorCX0KKyAgICB9CisgICAgc2V0IGFyY3RhZ3MoJGEpICRhdAorICAgIHNldCBhcmNoZWFkcygkYSkgJGFoCit9CisKK3Byb2Mgc3BsaXRhcmMge3B9IHsKKyAgICBnbG9iYWwgYXJjbm9zIGFyY2lkcyBuZXh0YXJjIGFyY3RhZ3MgYXJjaGVhZHMgaWR0YWdzIGlkaGVhZHMKKyAgICBnbG9iYWwgYXJjc3RhcnQgYXJjZW5kIGFyY291dCBhbGxwYXJlbnRzIGdyb3dpbmcKKworICAgIHNldCBhICRhcmNub3MoJHApCisgICAgaWYge1tsbGVuZ3RoICRhXSAhPSAxfSB7CisJcHV0cyAib29wcyBzcGxpdGFyYyBjYWxsZWQgYnV0IFtsbGVuZ3RoICRhXSBhcmNzIGFscmVhZHkiCisJcmV0dXJuCisgICAgfQorICAgIHNldCBhIFtsaW5kZXggJGEgMF0KKyAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGFyY2lkcygkYSkgJHBdCisgICAgaWYgeyRpIDwgMH0geworCXB1dHMgIm9vcHMgc3BsaXRhcmMgJHAgbm90IGluIGFyYyAkYSIKKwlyZXR1cm4KKyAgICB9CisgICAgc2V0IG5hIFtpbmNyIG5leHRhcmNdCisgICAgaWYge1tpbmZvIGV4aXN0cyBhcmNlbmQoJGEpXX0geworCXNldCBhcmNlbmQoJG5hKSAkYXJjZW5kKCRhKQorICAgIH0gZWxzZSB7CisJc2V0IGwgW2xpbmRleCAkYWxscGFyZW50cyhbbGluZGV4ICRhcmNpZHMoJGEpIGVuZF0pIDBdCisJc2V0IGogW2xzZWFyY2ggLWV4YWN0ICRhcmNub3MoJGwpICRhXQorCXNldCBhcmNub3MoJGwpIFtscmVwbGFjZSAkYXJjbm9zKCRsKSAkaiAkaiAkbmFdCisgICAgfQorICAgIHNldCB0YWlsIFtscmFuZ2UgJGFyY2lkcygkYSkgW2V4cHIgeyRpKzF9XSBlbmRdCisgICAgc2V0IGFyY2lkcygkYSkgW2xyYW5nZSAkYXJjaWRzKCRhKSAwICRpXQorICAgIHNldCBhcmNlbmQoJGEpICRwCisgICAgc2V0IGFyY3N0YXJ0KCRuYSkgJHAKKyAgICBzZXQgYXJjb3V0KCRwKSAkbmEKKyAgICBzZXQgYXJjaWRzKCRuYSkgJHRhaWwKKyAgICBpZiB7W2luZm8gZXhpc3RzIGdyb3dpbmcoJGEpXX0geworCXNldCBncm93aW5nKCRuYSkgMQorCXVuc2V0IGdyb3dpbmcoJGEpCisgICAgfQorCisgICAgZm9yZWFjaCBpZCAkdGFpbCB7CisJaWYge1tsbGVuZ3RoICRhcmNub3MoJGlkKV0gPT0gMX0geworCSAgICBzZXQgYXJjbm9zKCRpZCkgJG5hCisJfSBlbHNlIHsKKwkgICAgc2V0IGogW2xzZWFyY2ggLWV4YWN0ICRhcmNub3MoJGlkKSAkYV0KKwkgICAgc2V0IGFyY25vcygkaWQpIFtscmVwbGFjZSAkYXJjbm9zKCRpZCkgJGogJGogJG5hXQorCX0KKyAgICB9CisKKyAgICAjIHJlY29uc3RydWN0IHRhZ3MgYW5kIGhlYWRzIGxpc3RzCisgICAgaWYgeyRhcmN0YWdzKCRhKSBuZSB7fSB8fCAkYXJjaGVhZHMoJGEpIG5lIHt9fSB7CisJcmVjYWxjYXJjICRhCisJcmVjYWxjYXJjICRuYQorICAgIH0gZWxzZSB7CisJc2V0IGFyY3RhZ3MoJG5hKSB7fQorCXNldCBhcmNoZWFkcygkbmEpIHt9CisgICAgfQorfQorCisjIFVwZGF0ZSB0aGluZ3MgZm9yIGEgbmV3IGNvbW1pdCBhZGRlZCB0aGF0IGlzIGEgY2hpbGQgb2Ygb25lCisjIGV4aXN0aW5nIGNvbW1pdC4gIFVzZWQgd2hlbiBjaGVycnktcGlja2luZy4KK3Byb2MgYWRkbmV3Y2hpbGQge2lkIHB9IHsKKyAgICBnbG9iYWwgYWxscGFyZW50cyBhbGxjaGlsZHJlbiBpZHRhZ3MgbmV4dGFyYworICAgIGdsb2JhbCBhcmNub3MgYXJjaWRzIGFyY3RhZ3MgYXJjb3V0IGFyY2VuZCBhcmNzdGFydCBhcmNoZWFkcyBncm93aW5nCisgICAgZ2xvYmFsIHNlZWRzIGFsbGNvbW1pdHMKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGFsbGNvbW1pdHNdIHx8ICFbaW5mbyBleGlzdHMgYXJjbm9zKCRwKV19IHJldHVybgorICAgIHNldCBhbGxwYXJlbnRzKCRpZCkgW2xpc3QgJHBdCisgICAgc2V0IGFsbGNoaWxkcmVuKCRpZCkge30KKyAgICBzZXQgYXJjbm9zKCRpZCkge30KKyAgICBsYXBwZW5kIHNlZWRzICRpZAorICAgIGxhcHBlbmQgYWxsY2hpbGRyZW4oJHApICRpZAorICAgIHNldCBhIFtpbmNyIG5leHRhcmNdCisgICAgc2V0IGFyY3N0YXJ0KCRhKSAkaWQKKyAgICBzZXQgYXJjaGVhZHMoJGEpIHt9CisgICAgc2V0IGFyY3RhZ3MoJGEpIHt9CisgICAgc2V0IGFyY2lkcygkYSkgW2xpc3QgJHBdCisgICAgc2V0IGFyY2VuZCgkYSkgJHAKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBhcmNvdXQoJHApXX0geworCXNwbGl0YXJjICRwCisgICAgfQorICAgIGxhcHBlbmQgYXJjbm9zKCRwKSAkYQorICAgIHNldCBhcmNvdXQoJGlkKSBbbGlzdCAkYV0KK30KKworIyBUaGlzIGltcGxlbWVudHMgYSBjYWNoZSBmb3IgdGhlIHRvcG9sb2d5IGluZm9ybWF0aW9uLgorIyBUaGUgY2FjaGUgc2F2ZXMsIGZvciBlYWNoIGFyYywgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGFyYywKKyMgdGhlIGlkcyBvbiB0aGUgYXJjLCBhbmQgdGhlIG91dGdvaW5nIGFyY3MgZnJvbSB0aGUgZW5kLgorcHJvYyByZWFkY2FjaGUge2Z9IHsKKyAgICBnbG9iYWwgYXJjbm9zIGFyY2lkcyBhcmNvdXQgYXJjc3RhcnQgYXJjZW5kIGFyY3RhZ3MgYXJjaGVhZHMgbmV4dGFyYworICAgIGdsb2JhbCBpZHRhZ3MgaWRoZWFkcyBhbGxwYXJlbnRzIGNhY2hlZGFyY3MgcG9zc2libGVfc2VlZHMgc2VlZHMgZ3Jvd2luZworICAgIGdsb2JhbCBhbGxjd2FpdAorCisgICAgc2V0IGEgJG5leHRhcmMKKyAgICBzZXQgbGltICRjYWNoZWRhcmNzCisgICAgaWYgeyRsaW0gLSAkYSA+IDUwMH0geworCXNldCBsaW0gW2V4cHIgeyRhICsgNTAwfV0KKyAgICB9CisgICAgaWYge1tjYXRjaCB7CisJaWYgeyRhID09ICRsaW19IHsKKwkgICAgIyBmaW5pc2ggcmVhZGluZyB0aGUgY2FjaGUgYW5kIHNldHRpbmcgdXAgYXJjdGFncywgZXRjLgorCSAgICBzZXQgbGluZSBbZ2V0cyAkZl0KKwkgICAgaWYgeyRsaW5lIG5lICIxIn0ge2Vycm9yICJiYWQgZmluYWwgdmVyc2lvbiJ9CisJICAgIGNsb3NlICRmCisJICAgIGZvcmVhY2ggaWQgW2FycmF5IG5hbWVzIGlkdGFnc10geworCQlpZiB7W2luZm8gZXhpc3RzIGFyY25vcygkaWQpXSAmJiBbbGxlbmd0aCAkYXJjbm9zKCRpZCldID09IDEgJiYKKwkJICAgIFtsbGVuZ3RoICRhbGxwYXJlbnRzKCRpZCldID09IDF9IHsKKwkJICAgIHNldCBhIFtsaW5kZXggJGFyY25vcygkaWQpIDBdCisJCSAgICBpZiB7JGFyY3RhZ3MoJGEpIGVxIHt9fSB7CisJCQlyZWNhbGNhcmMgJGEKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIGZvcmVhY2ggaWQgW2FycmF5IG5hbWVzIGlkaGVhZHNdIHsKKwkJaWYge1tpbmZvIGV4aXN0cyBhcmNub3MoJGlkKV0gJiYgW2xsZW5ndGggJGFyY25vcygkaWQpXSA9PSAxICYmCisJCSAgICBbbGxlbmd0aCAkYWxscGFyZW50cygkaWQpXSA9PSAxfSB7CisJCSAgICBzZXQgYSBbbGluZGV4ICRhcmNub3MoJGlkKSAwXQorCQkgICAgaWYgeyRhcmNoZWFkcygkYSkgZXEge319IHsKKwkJCXJlY2FsY2FyYyAkYQorCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgZm9yZWFjaCBpZCBbbHNvcnQgLXVuaXF1ZSAkcG9zc2libGVfc2VlZHNdIHsKKwkJaWYgeyRhcmNub3MoJGlkKSBlcSB7fX0geworCQkgICAgbGFwcGVuZCBzZWVkcyAkaWQKKwkJfQorCSAgICB9CisJICAgIHNldCBhbGxjd2FpdCAwCisJfSBlbHNlIHsKKwkgICAgd2hpbGUge1tpbmNyIGFdIDw9ICRsaW19IHsKKwkJc2V0IGxpbmUgW2dldHMgJGZdCisJCWlmIHtbbGxlbmd0aCAkbGluZV0gIT0gM30ge2Vycm9yICJiYWQgbGluZSJ9CisJCXNldCBzIFtsaW5kZXggJGxpbmUgMF0KKwkJc2V0IGFyY3N0YXJ0KCRhKSAkcworCQlsYXBwZW5kIGFyY291dCgkcykgJGEKKwkJaWYgeyFbaW5mbyBleGlzdHMgYXJjbm9zKCRzKV19IHsKKwkJICAgIGxhcHBlbmQgcG9zc2libGVfc2VlZHMgJHMKKwkJICAgIHNldCBhcmNub3MoJHMpIHt9CisJCX0KKwkJc2V0IGUgW2xpbmRleCAkbGluZSAxXQorCQlpZiB7JGUgZXEge319IHsKKwkJICAgIHNldCBncm93aW5nKCRhKSAxCisJCX0gZWxzZSB7CisJCSAgICBzZXQgYXJjZW5kKCRhKSAkZQorCQkgICAgaWYgeyFbaW5mbyBleGlzdHMgYXJjb3V0KCRlKV19IHsKKwkJCXNldCBhcmNvdXQoJGUpIHt9CisJCSAgICB9CisJCX0KKwkJc2V0IGFyY2lkcygkYSkgW2xpbmRleCAkbGluZSAyXQorCQlmb3JlYWNoIGlkICRhcmNpZHMoJGEpIHsKKwkJICAgIGxhcHBlbmQgYWxscGFyZW50cygkcykgJGlkCisJCSAgICBzZXQgcyAkaWQKKwkJICAgIGxhcHBlbmQgYXJjbm9zKCRpZCkgJGEKKwkJfQorCQlpZiB7IVtpbmZvIGV4aXN0cyBhbGxwYXJlbnRzKCRzKV19IHsKKwkJICAgIHNldCBhbGxwYXJlbnRzKCRzKSB7fQorCQl9CisJCXNldCBhcmN0YWdzKCRhKSB7fQorCQlzZXQgYXJjaGVhZHMoJGEpIHt9CisJICAgIH0KKwkgICAgc2V0IG5leHRhcmMgW2V4cHIgeyRhIC0gMX1dCisJfQorICAgIH0gZXJyXX0geworCWRyb3BjYWNoZSAkZXJyCisJcmV0dXJuIDAKKyAgICB9CisgICAgaWYgeyEkYWxsY3dhaXR9IHsKKwlnZXRhbGxjb21taXRzCisgICAgfQorICAgIHJldHVybiAkYWxsY3dhaXQKK30KKworcHJvYyBnZXRjYWNoZSB7Zn0geworICAgIGdsb2JhbCBuZXh0YXJjIGNhY2hlZGFyY3MgcG9zc2libGVfc2VlZHMKKworICAgIGlmIHtbY2F0Y2ggeworCXNldCBsaW5lIFtnZXRzICRmXQorCWlmIHtbbGxlbmd0aCAkbGluZV0gIT0gMiB8fCBbbGluZGV4ICRsaW5lIDBdIG5lICIxIn0ge2Vycm9yICJiYWQgdmVyc2lvbiJ9CisJIyBtYWtlIHN1cmUgaXQncyBhbiBpbnRlZ2VyCisJc2V0IGNhY2hlZGFyY3MgW2V4cHIge2ludChbbGluZGV4ICRsaW5lIDFdKX1dCisJaWYgeyRjYWNoZWRhcmNzIDwgMH0ge2Vycm9yICJiYWQgbnVtYmVyIG9mIGFyY3MifQorCXNldCBuZXh0YXJjIDAKKwlzZXQgcG9zc2libGVfc2VlZHMge30KKwlydW4gcmVhZGNhY2hlICRmCisgICAgfSBlcnJdfSB7CisJZHJvcGNhY2hlICRlcnIKKyAgICB9CisgICAgcmV0dXJuIDAKK30KKworcHJvYyBkcm9wY2FjaGUge2Vycn0geworICAgIGdsb2JhbCBhbGxjd2FpdCBuZXh0YXJjIGNhY2hlZGFyY3Mgc2VlZHMKKworICAgICNwdXRzICJkcm9wcGluZyBjYWNoZSAoJGVycikiCisgICAgZm9yZWFjaCB2IHthcmNub3MgYXJjb3V0IGFyY2lkcyBhcmNzdGFydCBhcmNlbmQgZ3Jvd2luZyBcCisJCSAgIGFyY3RhZ3MgYXJjaGVhZHMgYWxscGFyZW50cyBhbGxjaGlsZHJlbn0geworCWdsb2JhbCAkdgorCXVuc2V0IC1ub2NvbXBsYWluICR2CisgICAgfQorICAgIHNldCBhbGxjd2FpdCAwCisgICAgc2V0IG5leHRhcmMgMAorICAgIHNldCBjYWNoZWRhcmNzIDAKKyAgICBzZXQgc2VlZHMge30KKyAgICBnZXRhbGxjb21taXRzCit9CisKK3Byb2Mgd3JpdGVjYWNoZSB7Zn0geworICAgIGdsb2JhbCBjYWNoZWFyYyBjYWNoZWRhcmNzIGFsbGNjYWNoZQorICAgIGdsb2JhbCBhcmNzdGFydCBhcmNlbmQgYXJjbm9zIGFyY2lkcyBhcmNvdXQKKworICAgIHNldCBhICRjYWNoZWFyYworICAgIHNldCBsaW0gJGNhY2hlZGFyY3MKKyAgICBpZiB7JGxpbSAtICRhID4gMTAwMH0geworCXNldCBsaW0gW2V4cHIgeyRhICsgMTAwMH1dCisgICAgfQorICAgIGlmIHtbY2F0Y2ggeworCXdoaWxlIHtbaW5jciBhXSA8PSAkbGltfSB7CisJICAgIGlmIHtbaW5mbyBleGlzdHMgYXJjZW5kKCRhKV19IHsKKwkJcHV0cyAkZiBbbGlzdCAkYXJjc3RhcnQoJGEpICRhcmNlbmQoJGEpICRhcmNpZHMoJGEpXQorCSAgICB9IGVsc2UgeworCQlwdXRzICRmIFtsaXN0ICRhcmNzdGFydCgkYSkge30gJGFyY2lkcygkYSldCisJICAgIH0KKwl9CisgICAgfSBlcnJdfSB7CisJY2F0Y2gge2Nsb3NlICRmfQorCWNhdGNoIHtmaWxlIGRlbGV0ZSAkYWxsY2NhY2hlfQorCSNwdXRzICJ3cml0aW5nIGNhY2hlIGZhaWxlZCAoJGVycikiCisJcmV0dXJuIDAKKyAgICB9CisgICAgc2V0IGNhY2hlYXJjIFtleHByIHskYSAtIDF9XQorICAgIGlmIHskYSA+ICRjYWNoZWRhcmNzfSB7CisJcHV0cyAkZiAiMSIKKwljbG9zZSAkZgorCXJldHVybiAwCisgICAgfQorICAgIHJldHVybiAxCit9CisKK3Byb2Mgc2F2ZWNhY2hlIHt9IHsKKyAgICBnbG9iYWwgbmV4dGFyYyBjYWNoZWRhcmNzIGNhY2hlYXJjIGFsbGNjYWNoZQorCisgICAgaWYgeyRuZXh0YXJjID09ICRjYWNoZWRhcmNzfSByZXR1cm4KKyAgICBzZXQgY2FjaGVhcmMgMAorICAgIHNldCBjYWNoZWRhcmNzICRuZXh0YXJjCisgICAgY2F0Y2ggeworCXNldCBmIFtvcGVuICRhbGxjY2FjaGUgd10KKwlwdXRzICRmIFtsaXN0IDEgJGNhY2hlZGFyY3NdCisJcnVuIHdyaXRlY2FjaGUgJGYKKyAgICB9Cit9CisKKyMgUmV0dXJucyAxIGlmIGEgaXMgYW4gYW5jZXN0b3Igb2YgYiwgLTEgaWYgYiBpcyBhbiBhbmNlc3RvciBvZiBhLAorIyBvciAwIGlmIG5laXRoZXIgaXMgdHJ1ZS4KK3Byb2MgYW5jX29yX2Rlc2Mge2EgYn0geworICAgIGdsb2JhbCBhcmNvdXQgYXJjc3RhcnQgYXJjZW5kIGFyY25vcyBjYWNoZWRfaXNhbmMKKworICAgIGlmIHskYXJjbm9zKCRhKSBlcSAkYXJjbm9zKCRiKX0geworCSMgQm90aCBhcmUgb24gdGhlIHNhbWUgYXJjKHMpOyBlaXRoZXIgYm90aCBhcmUgdGhlIHNhbWUgQk1QLAorCSMgb3IgaWYgb25lIGlzIG5vdCBhIEJNUCwgdGhlIG90aGVyIGlzIGFsc28gbm90IGEgQk1QIG9yIGlzCisJIyB0aGUgQk1QIGF0IGVuZCBvZiB0aGUgYXJjIChhbmQgaXQgb25seSBoYXMgMSBpbmNvbWluZyBhcmMpLgorCSMgT3IgYm90aCBjYW4gYmUgQk1QcyB3aXRoIG5vIGluY29taW5nIGFyY3MuCisJaWYgeyRhIGVxICRiIHx8ICRhcmNub3MoJGEpIGVxIHt9fSB7CisJICAgIHJldHVybiAwCisJfQorCSMgYXNzZXJ0IHtbbGxlbmd0aCAkYXJjbm9zKCRhKV0gPT0gMX0KKwlzZXQgYXJjIFtsaW5kZXggJGFyY25vcygkYSkgMF0KKwlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGFyY2lkcygkYXJjKSAkYV0KKwlzZXQgaiBbbHNlYXJjaCAtZXhhY3QgJGFyY2lkcygkYXJjKSAkYl0KKwlpZiB7JGkgPCAwIHx8ICRpID4gJGp9IHsKKwkgICAgcmV0dXJuIDEKKwl9IGVsc2UgeworCSAgICByZXR1cm4gLTEKKwl9CisgICAgfQorCisgICAgaWYgeyFbaW5mbyBleGlzdHMgYXJjb3V0KCRhKV19IHsKKwlzZXQgYXJjIFtsaW5kZXggJGFyY25vcygkYSkgMF0KKwlpZiB7W2luZm8gZXhpc3RzIGFyY2VuZCgkYXJjKV19IHsKKwkgICAgc2V0IGFlbmQgJGFyY2VuZCgkYXJjKQorCX0gZWxzZSB7CisJICAgIHNldCBhZW5kIHt9CisJfQorCXNldCBhICRhcmNzdGFydCgkYXJjKQorICAgIH0gZWxzZSB7CisJc2V0IGFlbmQgJGEKKyAgICB9CisgICAgaWYgeyFbaW5mbyBleGlzdHMgYXJjb3V0KCRiKV19IHsKKwlzZXQgYXJjIFtsaW5kZXggJGFyY25vcygkYikgMF0KKwlpZiB7W2luZm8gZXhpc3RzIGFyY2VuZCgkYXJjKV19IHsKKwkgICAgc2V0IGJlbmQgJGFyY2VuZCgkYXJjKQorCX0gZWxzZSB7CisJICAgIHNldCBiZW5kIHt9CisJfQorCXNldCBiICRhcmNzdGFydCgkYXJjKQorICAgIH0gZWxzZSB7CisJc2V0IGJlbmQgJGIKKyAgICB9CisgICAgaWYgeyRhIGVxICRiZW5kfSB7CisJcmV0dXJuIDEKKyAgICB9CisgICAgaWYgeyRiIGVxICRhZW5kfSB7CisJcmV0dXJuIC0xCisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgY2FjaGVkX2lzYW5jKCRhLCRiZW5kKV19IHsKKwlpZiB7JGNhY2hlZF9pc2FuYygkYSwkYmVuZCl9IHsKKwkgICAgcmV0dXJuIDEKKwl9CisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgY2FjaGVkX2lzYW5jKCRiLCRhZW5kKV19IHsKKwlpZiB7JGNhY2hlZF9pc2FuYygkYiwkYWVuZCl9IHsKKwkgICAgcmV0dXJuIC0xCisJfQorCWlmIHtbaW5mbyBleGlzdHMgY2FjaGVkX2lzYW5jKCRhLCRiZW5kKV19IHsKKwkgICAgcmV0dXJuIDAKKwl9CisgICAgfQorCisgICAgc2V0IHRvZG8gW2xpc3QgJGEgJGJdCisgICAgc2V0IGFuYygkYSkgYQorICAgIHNldCBhbmMoJGIpIGIKKyAgICBmb3Ige3NldCBpIDB9IHskaSA8IFtsbGVuZ3RoICR0b2RvXX0ge2luY3IgaX0geworCXNldCB4IFtsaW5kZXggJHRvZG8gJGldCisJaWYgeyRhbmMoJHgpIGVxIHt9fSB7CisJICAgIGNvbnRpbnVlCisJfQorCWZvcmVhY2ggYXJjICRhcmNub3MoJHgpIHsKKwkgICAgc2V0IHhkICRhcmNzdGFydCgkYXJjKQorCSAgICBpZiB7JHhkIGVxICRiZW5kfSB7CisJCXNldCBjYWNoZWRfaXNhbmMoJGEsJGJlbmQpIDEKKwkJc2V0IGNhY2hlZF9pc2FuYygkYiwkYWVuZCkgMAorCQlyZXR1cm4gMQorCSAgICB9IGVsc2VpZiB7JHhkIGVxICRhZW5kfSB7CisJCXNldCBjYWNoZWRfaXNhbmMoJGIsJGFlbmQpIDEKKwkJc2V0IGNhY2hlZF9pc2FuYygkYSwkYmVuZCkgMAorCQlyZXR1cm4gLTEKKwkgICAgfQorCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBhbmMoJHhkKV19IHsKKwkJc2V0IGFuYygkeGQpICRhbmMoJHgpCisJCWxhcHBlbmQgdG9kbyAkeGQKKwkgICAgfSBlbHNlaWYgeyRhbmMoJHhkKSBuZSAkYW5jKCR4KX0geworCQlzZXQgYW5jKCR4ZCkge30KKwkgICAgfQorCX0KKyAgICB9CisgICAgc2V0IGNhY2hlZF9pc2FuYygkYSwkYmVuZCkgMAorICAgIHNldCBjYWNoZWRfaXNhbmMoJGIsJGFlbmQpIDAKKyAgICByZXR1cm4gMAorfQorCisjIFRoaXMgaWRlbnRpZmllcyB3aGV0aGVyICRkZXNjIGhhcyBhbiBhbmNlc3RvciB0aGF0IGlzCisjIGEgZ3Jvd2luZyB0aXAgb2YgdGhlIGdyYXBoIGFuZCB3aGljaCBpcyBub3QgYW4gYW5jZXN0b3Igb2YgJGFuYworIyBhbmQgcmV0dXJucyAwIGlmIHNvIGFuZCAxIGlmIG5vdC4KKyMgSWYgd2Ugc3Vic2VxdWVudGx5IGRpc2NvdmVyIGEgdGFnIG9uIHN1Y2ggYSBncm93aW5nIHRpcCwgYW5kIHRoYXQKKyMgdHVybnMgb3V0IHRvIGJlIGEgZGVzY2VuZGVudCBvZiAkYW5jICh3aGljaCBpdCBjb3VsZCwgc2luY2Ugd2UKKyMgZG9uJ3QgbmVjZXNzYXJpbHkgc2VlIGNoaWxkcmVuIGJlZm9yZSBwYXJlbnRzKSwgdGhlbiAkZGVzYworIyBpc24ndCBhIGdvb2QgY2hvaWNlIHRvIGRpc3BsYXkgYXMgYSBkZXNjZW5kZW50IHRhZyBvZgorIyAkYW5jIChzaW5jZSBpdCBpcyB0aGUgZGVzY2VuZGVudCBvZiBhbm90aGVyIHRhZyB3aGljaCBpcworIyBhIGRlc2NlbmRlbnQgb2YgJGFuYykuICBTaW1pbGFybHksICRhbmMgaXNuJ3QgYSBnb29kIGNob2ljZSB0bworIyBkaXNwbGF5IGFzIGEgYW5jZXN0b3IgdGFnIG9mICRkZXNjLgorIworcHJvYyBpc19jZXJ0YWluIHtkZXNjIGFuY30geworICAgIGdsb2JhbCBhcmNub3MgYXJjb3V0IGFyY3N0YXJ0IGFyY2VuZCBncm93aW5nIHByb2JsZW1zCisKKyAgICBzZXQgY2VydGFpbiB7fQorICAgIGlmIHtbbGxlbmd0aCAkYXJjbm9zKCRhbmMpXSA9PSAxfSB7CisJIyB0YWdzIG9uIHRoZSBzYW1lIGFyYyBhcmUgY2VydGFpbgorCWlmIHskYXJjbm9zKCRkZXNjKSBlcSAkYXJjbm9zKCRhbmMpfSB7CisJICAgIHJldHVybiAxCisJfQorCWlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkYW5jKV19IHsKKwkgICAgIyBpZiAkYW5jIGlzIHBhcnR3YXkgYWxvbmcgYW4gYXJjLCB1c2UgdGhlIHN0YXJ0IG9mIHRoZSBhcmMgaW5zdGVhZAorCSAgICBzZXQgYSBbbGluZGV4ICRhcmNub3MoJGFuYykgMF0KKwkgICAgc2V0IGFuYyAkYXJjc3RhcnQoJGEpCisJfQorICAgIH0KKyAgICBpZiB7W2xsZW5ndGggJGFyY25vcygkZGVzYyldID4gMSB8fCBbaW5mbyBleGlzdHMgYXJjb3V0KCRkZXNjKV19IHsKKwlzZXQgeCAkZGVzYworICAgIH0gZWxzZSB7CisJc2V0IGEgW2xpbmRleCAkYXJjbm9zKCRkZXNjKSAwXQorCXNldCB4ICRhcmNlbmQoJGEpCisgICAgfQorICAgIGlmIHskeCA9PSAkYW5jfSB7CisJcmV0dXJuIDEKKyAgICB9CisgICAgc2V0IGFuY2xpc3QgW2xpc3QgJHhdCisgICAgc2V0IGRsKCR4KSAxCisgICAgc2V0IG5uaCAxCisgICAgc2V0IG5ncm93YW5jIDAKKyAgICBmb3Ige3NldCBpIDB9IHskaSA8IFtsbGVuZ3RoICRhbmNsaXN0XSAmJiAoJG5uaCA+IDAgfHwgJG5ncm93YW5jID4gMCl9IHtpbmNyIGl9IHsKKwlzZXQgeCBbbGluZGV4ICRhbmNsaXN0ICRpXQorCWlmIHskZGwoJHgpfSB7CisJICAgIGluY3Igbm5oIC0xCisJfQorCXNldCBkb25lKCR4KSAxCisJZm9yZWFjaCBhICRhcmNvdXQoJHgpIHsKKwkgICAgaWYge1tpbmZvIGV4aXN0cyBncm93aW5nKCRhKV19IHsKKwkJaWYgeyFbaW5mbyBleGlzdHMgZ3Jvd2FuYygkeCldICYmICRkbCgkeCl9IHsKKwkJICAgIHNldCBncm93YW5jKCR4KSAxCisJCSAgICBpbmNyIG5ncm93YW5jCisJCX0KKwkgICAgfSBlbHNlIHsKKwkJc2V0IHkgJGFyY2VuZCgkYSkKKwkJaWYge1tpbmZvIGV4aXN0cyBkbCgkeSldfSB7CisJCSAgICBpZiB7JGRsKCR5KX0geworCQkJaWYgeyEkZGwoJHgpfSB7CisJCQkgICAgc2V0IGRsKCR5KSAwCisJCQkgICAgaWYgeyFbaW5mbyBleGlzdHMgZG9uZSgkeSldfSB7CisJCQkJaW5jciBubmggLTEKKwkJCSAgICB9CisJCQkgICAgaWYge1tpbmZvIGV4aXN0cyBncm93YW5jKCR4KV19IHsKKwkJCQlpbmNyIG5ncm93YW5jIC0xCisJCQkgICAgfQorCQkJICAgIHNldCB4bCBbbGlzdCAkeV0KKwkJCSAgICBmb3Ige3NldCBrIDB9IHskayA8IFtsbGVuZ3RoICR4bF19IHtpbmNyIGt9IHsKKwkJCQlzZXQgeiBbbGluZGV4ICR4bCAka10KKwkJCQlmb3JlYWNoIGMgJGFyY291dCgkeikgeworCQkJCSAgICBpZiB7W2luZm8gZXhpc3RzIGFyY2VuZCgkYyldfSB7CisJCQkJCXNldCB2ICRhcmNlbmQoJGMpCisJCQkJCWlmIHtbaW5mbyBleGlzdHMgZGwoJHYpXSAmJiAkZGwoJHYpfSB7CisJCQkJCSAgICBzZXQgZGwoJHYpIDAKKwkJCQkJICAgIGlmIHshW2luZm8gZXhpc3RzIGRvbmUoJHYpXX0geworCQkJCQkJaW5jciBubmggLTEKKwkJCQkJICAgIH0KKwkJCQkJICAgIGlmIHtbaW5mbyBleGlzdHMgZ3Jvd2FuYygkdildfSB7CisJCQkJCQlpbmNyIG5ncm93YW5jIC0xCisJCQkJCSAgICB9CisJCQkJCSAgICBsYXBwZW5kIHhsICR2CisJCQkJCX0KKwkJCQkgICAgfQorCQkJCX0KKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisJCX0gZWxzZWlmIHskeSBlcSAkYW5jIHx8ICEkZGwoJHgpfSB7CisJCSAgICBzZXQgZGwoJHkpIDAKKwkJICAgIGxhcHBlbmQgYW5jbGlzdCAkeQorCQl9IGVsc2UgeworCQkgICAgc2V0IGRsKCR5KSAxCisJCSAgICBsYXBwZW5kIGFuY2xpc3QgJHkKKwkJICAgIGluY3Igbm5oCisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgZm9yZWFjaCB4IFthcnJheSBuYW1lcyBncm93YW5jXSB7CisJaWYgeyRkbCgkeCl9IHsKKwkgICAgcmV0dXJuIDAKKwl9CisJcmV0dXJuIDAKKyAgICB9CisgICAgcmV0dXJuIDEKK30KKworcHJvYyB2YWxpZGF0ZV9hcmN0YWdzIHthfSB7CisgICAgZ2xvYmFsIGFyY3RhZ3MgaWR0YWdzCisKKyAgICBzZXQgaSAtMQorICAgIHNldCBuYSAkYXJjdGFncygkYSkKKyAgICBmb3JlYWNoIGlkICRhcmN0YWdzKCRhKSB7CisJaW5jciBpCisJaWYgeyFbaW5mbyBleGlzdHMgaWR0YWdzKCRpZCldfSB7CisJICAgIHNldCBuYSBbbHJlcGxhY2UgJG5hICRpICRpXQorCSAgICBpbmNyIGkgLTEKKwl9CisgICAgfQorICAgIHNldCBhcmN0YWdzKCRhKSAkbmEKK30KKworcHJvYyB2YWxpZGF0ZV9hcmNoZWFkcyB7YX0geworICAgIGdsb2JhbCBhcmNoZWFkcyBpZGhlYWRzCisKKyAgICBzZXQgaSAtMQorICAgIHNldCBuYSAkYXJjaGVhZHMoJGEpCisgICAgZm9yZWFjaCBpZCAkYXJjaGVhZHMoJGEpIHsKKwlpbmNyIGkKKwlpZiB7IVtpbmZvIGV4aXN0cyBpZGhlYWRzKCRpZCldfSB7CisJICAgIHNldCBuYSBbbHJlcGxhY2UgJG5hICRpICRpXQorCSAgICBpbmNyIGkgLTEKKwl9CisgICAgfQorICAgIHNldCBhcmNoZWFkcygkYSkgJG5hCit9CisKKyMgUmV0dXJuIHRoZSBsaXN0IG9mIElEcyB0aGF0IGhhdmUgdGFncyB0aGF0IGFyZSBkZXNjZW5kZW50cyBvZiBpZCwKKyMgaWdub3JpbmcgSURzIHRoYXQgYXJlIGRlc2NlbmRlbnRzIG9mIElEcyBhbHJlYWR5IHJlcG9ydGVkLgorcHJvYyBkZXNjdGFncyB7aWR9IHsKKyAgICBnbG9iYWwgYXJjbm9zIGFyY3N0YXJ0IGFyY2lkcyBhcmN0YWdzIGlkdGFncyBhbGxwYXJlbnRzCisgICAgZ2xvYmFsIGdyb3dpbmcgY2FjaGVkX2R0YWdzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBhbGxwYXJlbnRzKCRpZCldfSB7CisJcmV0dXJuIHt9CisgICAgfQorICAgIHNldCB0MSBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgc2V0IGFyZ2lkICRpZAorICAgIGlmIHtbbGxlbmd0aCAkYXJjbm9zKCRpZCldID09IDEgJiYgW2xsZW5ndGggJGFsbHBhcmVudHMoJGlkKV0gPT0gMX0geworCSMgcGFydC13YXkgYWxvbmcgYW4gYXJjOyBjaGVjayB0aGF0IGFyYyBmaXJzdAorCXNldCBhIFtsaW5kZXggJGFyY25vcygkaWQpIDBdCisJaWYgeyRhcmN0YWdzKCRhKSBuZSB7fX0geworCSAgICB2YWxpZGF0ZV9hcmN0YWdzICRhCisJICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkYXJjaWRzKCRhKSAkaWRdCisJICAgIHNldCB0aWQge30KKwkgICAgZm9yZWFjaCB0ICRhcmN0YWdzKCRhKSB7CisJCXNldCBqIFtsc2VhcmNoIC1leGFjdCAkYXJjaWRzKCRhKSAkdF0KKwkJaWYgeyRqID49ICRpfSBicmVhaworCQlzZXQgdGlkICR0CisJICAgIH0KKwkgICAgaWYgeyR0aWQgbmUge319IHsKKwkJcmV0dXJuICR0aWQKKwkgICAgfQorCX0KKwlzZXQgaWQgJGFyY3N0YXJ0KCRhKQorCWlmIHtbaW5mbyBleGlzdHMgaWR0YWdzKCRpZCldfSB7CisJICAgIHJldHVybiAkaWQKKwl9CisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgY2FjaGVkX2R0YWdzKCRpZCldfSB7CisJcmV0dXJuICRjYWNoZWRfZHRhZ3MoJGlkKQorICAgIH0KKworICAgIHNldCBvcmlnaWQgJGlkCisgICAgc2V0IHRvZG8gW2xpc3QgJGlkXQorICAgIHNldCBxdWV1ZWQoJGlkKSAxCisgICAgc2V0IG5jIDEKKyAgICBmb3Ige3NldCBpIDB9IHskaSA8IFtsbGVuZ3RoICR0b2RvXSAmJiAkbmMgPiAwfSB7aW5jciBpfSB7CisJc2V0IGlkIFtsaW5kZXggJHRvZG8gJGldCisJc2V0IGRvbmUoJGlkKSAxCisJc2V0IHRhIFtpbmZvIGV4aXN0cyBoYXN0YWdnZWRhbmNlc3RvcigkaWQpXQorCWlmIHshJHRhfSB7CisJICAgIGluY3IgbmMgLTEKKwl9CisJIyBpZ25vcmUgdGFncyBvbiBzdGFydGluZyBub2RlCisJaWYgeyEkdGEgJiYgJGkgPiAwfSB7CisJICAgIGlmIHtbaW5mbyBleGlzdHMgaWR0YWdzKCRpZCldfSB7CisJCXNldCB0YWdsb2MoJGlkKSAkaWQKKwkJc2V0IHRhIDEKKwkgICAgfSBlbHNlaWYge1tpbmZvIGV4aXN0cyBjYWNoZWRfZHRhZ3MoJGlkKV19IHsKKwkJc2V0IHRhZ2xvYygkaWQpICRjYWNoZWRfZHRhZ3MoJGlkKQorCQlzZXQgdGEgMQorCSAgICB9CisJfQorCWZvcmVhY2ggYSAkYXJjbm9zKCRpZCkgeworCSAgICBzZXQgZCAkYXJjc3RhcnQoJGEpCisJICAgIGlmIHshJHRhICYmICRhcmN0YWdzKCRhKSBuZSB7fX0geworCQl2YWxpZGF0ZV9hcmN0YWdzICRhCisJCWlmIHskYXJjdGFncygkYSkgbmUge319IHsKKwkJICAgIGxhcHBlbmQgdGFnbG9jKCRpZCkgW2xpbmRleCAkYXJjdGFncygkYSkgZW5kXQorCQl9CisJICAgIH0KKwkgICAgaWYgeyR0YSB8fCAkYXJjdGFncygkYSkgbmUge319IHsKKwkJc2V0IHRvbWFyayBbbGlzdCAkZF0KKwkJZm9yIHtzZXQgaiAwfSB7JGogPCBbbGxlbmd0aCAkdG9tYXJrXX0ge2luY3Igan0geworCQkgICAgc2V0IGRkIFtsaW5kZXggJHRvbWFyayAkal0KKwkJICAgIGlmIHshW2luZm8gZXhpc3RzIGhhc3RhZ2dlZGFuY2VzdG9yKCRkZCldfSB7CisJCQlpZiB7W2luZm8gZXhpc3RzIGRvbmUoJGRkKV19IHsKKwkJCSAgICBmb3JlYWNoIGIgJGFyY25vcygkZGQpIHsKKwkJCQlsYXBwZW5kIHRvbWFyayAkYXJjc3RhcnQoJGIpCisJCQkgICAgfQorCQkJICAgIGlmIHtbaW5mbyBleGlzdHMgdGFnbG9jKCRkZCldfSB7CisJCQkJdW5zZXQgdGFnbG9jKCRkZCkKKwkJCSAgICB9CisJCQl9IGVsc2VpZiB7W2luZm8gZXhpc3RzIHF1ZXVlZCgkZGQpXX0geworCQkJICAgIGluY3IgbmMgLTEKKwkJCX0KKwkJCXNldCBoYXN0YWdnZWRhbmNlc3RvcigkZGQpIDEKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIGlmIHshW2luZm8gZXhpc3RzIHF1ZXVlZCgkZCldfSB7CisJCWxhcHBlbmQgdG9kbyAkZAorCQlzZXQgcXVldWVkKCRkKSAxCisJCWlmIHshW2luZm8gZXhpc3RzIGhhc3RhZ2dlZGFuY2VzdG9yKCRkKV19IHsKKwkJICAgIGluY3IgbmMKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgdGFncyB7fQorICAgIGZvcmVhY2ggaWQgW2FycmF5IG5hbWVzIHRhZ2xvY10geworCWlmIHshW2luZm8gZXhpc3RzIGhhc3RhZ2dlZGFuY2VzdG9yKCRpZCldfSB7CisJICAgIGZvcmVhY2ggdCAkdGFnbG9jKCRpZCkgeworCQlpZiB7W2xzZWFyY2ggLWV4YWN0ICR0YWdzICR0XSA8IDB9IHsKKwkJICAgIGxhcHBlbmQgdGFncyAkdAorCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCB0MiBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgc2V0IGxvb3BpeCAkaQorCisgICAgIyByZW1vdmUgdGFncyB0aGF0IGFyZSBkZXNjZW5kZW50cyBvZiBvdGhlciB0YWdzCisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkdGFnc119IHtpbmNyIGl9IHsKKwlzZXQgYSBbbGluZGV4ICR0YWdzICRpXQorCWZvciB7c2V0IGogMH0geyRqIDwgJGl9IHtpbmNyIGp9IHsKKwkgICAgc2V0IGIgW2xpbmRleCAkdGFncyAkal0KKwkgICAgc2V0IHIgW2FuY19vcl9kZXNjICRhICRiXQorCSAgICBpZiB7JHIgPT0gMX0geworCQlzZXQgdGFncyBbbHJlcGxhY2UgJHRhZ3MgJGogJGpdCisJCWluY3IgaiAtMQorCQlpbmNyIGkgLTEKKwkgICAgfSBlbHNlaWYgeyRyID09IC0xfSB7CisJCXNldCB0YWdzIFtscmVwbGFjZSAkdGFncyAkaSAkaV0KKwkJaW5jciBpIC0xCisJCWJyZWFrCisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYge1thcnJheSBuYW1lcyBncm93aW5nXSBuZSB7fX0geworCSMgZ3JhcGggaXNuJ3QgZmluaXNoZWQsIG5lZWQgdG8gY2hlY2sgaWYgYW55IHRhZyBjb3VsZCBnZXQKKwkjIGVjbGlwc2VkIGJ5IGFub3RoZXIgdGFnIGNvbWluZyBsYXRlci4gIFNpbXBseSBpZ25vcmUgYW55CisJIyB0YWdzIHRoYXQgY291bGQgbGF0ZXIgZ2V0IGVjbGlwc2VkLgorCXNldCBjdGFncyB7fQorCWZvcmVhY2ggdCAkdGFncyB7CisJICAgIGlmIHtbaXNfY2VydGFpbiAkdCAkb3JpZ2lkXX0geworCQlsYXBwZW5kIGN0YWdzICR0CisJICAgIH0KKwl9CisJaWYgeyR0YWdzIGVxICRjdGFnc30geworCSAgICBzZXQgY2FjaGVkX2R0YWdzKCRvcmlnaWQpICR0YWdzCisJfSBlbHNlIHsKKwkgICAgc2V0IHRhZ3MgJGN0YWdzCisJfQorICAgIH0gZWxzZSB7CisJc2V0IGNhY2hlZF9kdGFncygkb3JpZ2lkKSAkdGFncworICAgIH0KKyAgICBzZXQgdDMgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIGlmIHswICYmICR0MyAtICR0MSA+PSAxMDB9IHsKKwlwdXRzICJpdGVyYXRpbmcgZGVzY2VuZGVudHMgKCRsb29waXgvW2xsZW5ndGggJHRvZG9dIG5vZGVzKSB0b29rXAorICAgIAkgICAgW2V4cHIgeyR0Mi0kdDF9XStbZXhwciB7JHQzLSR0Mn1dbXMsICRuYyBjYW5kaWRhdGVzIGxlZnQiCisgICAgfQorICAgIHJldHVybiAkdGFncworfQorCitwcm9jIGFuY3RhZ3Mge2lkfSB7CisgICAgZ2xvYmFsIGFyY25vcyBhcmNpZHMgYXJjb3V0IGFyY2VuZCBhcmN0YWdzIGlkdGFncyBhbGxwYXJlbnRzCisgICAgZ2xvYmFsIGdyb3dpbmcgY2FjaGVkX2F0YWdzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBhbGxwYXJlbnRzKCRpZCldfSB7CisJcmV0dXJuIHt9CisgICAgfQorICAgIHNldCB0MSBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgc2V0IGFyZ2lkICRpZAorICAgIGlmIHtbbGxlbmd0aCAkYXJjbm9zKCRpZCldID09IDEgJiYgW2xsZW5ndGggJGFsbHBhcmVudHMoJGlkKV0gPT0gMX0geworCSMgcGFydC13YXkgYWxvbmcgYW4gYXJjOyBjaGVjayB0aGF0IGFyYyBmaXJzdAorCXNldCBhIFtsaW5kZXggJGFyY25vcygkaWQpIDBdCisJaWYgeyRhcmN0YWdzKCRhKSBuZSB7fX0geworCSAgICB2YWxpZGF0ZV9hcmN0YWdzICRhCisJICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkYXJjaWRzKCRhKSAkaWRdCisJICAgIGZvcmVhY2ggdCAkYXJjdGFncygkYSkgeworCQlzZXQgaiBbbHNlYXJjaCAtZXhhY3QgJGFyY2lkcygkYSkgJHRdCisJCWlmIHskaiA+ICRpfSB7CisJCSAgICByZXR1cm4gJHQKKwkJfQorCSAgICB9CisJfQorCWlmIHshW2luZm8gZXhpc3RzIGFyY2VuZCgkYSldfSB7CisJICAgIHJldHVybiB7fQorCX0KKwlzZXQgaWQgJGFyY2VuZCgkYSkKKwlpZiB7W2luZm8gZXhpc3RzIGlkdGFncygkaWQpXX0geworCSAgICByZXR1cm4gJGlkCisJfQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF9hdGFncygkaWQpXX0geworCXJldHVybiAkY2FjaGVkX2F0YWdzKCRpZCkKKyAgICB9CisKKyAgICBzZXQgb3JpZ2lkICRpZAorICAgIHNldCB0b2RvIFtsaXN0ICRpZF0KKyAgICBzZXQgcXVldWVkKCRpZCkgMQorICAgIHNldCB0YWdsaXN0IHt9CisgICAgc2V0IG5jIDEKKyAgICBmb3Ige3NldCBpIDB9IHskaSA8IFtsbGVuZ3RoICR0b2RvXSAmJiAkbmMgPiAwfSB7aW5jciBpfSB7CisJc2V0IGlkIFtsaW5kZXggJHRvZG8gJGldCisJc2V0IGRvbmUoJGlkKSAxCisJc2V0IHRkIFtpbmZvIGV4aXN0cyBoYXN0YWdnZWRkZXNjZW5kZW50KCRpZCldCisJaWYgeyEkdGR9IHsKKwkgICAgaW5jciBuYyAtMQorCX0KKwkjIGlnbm9yZSB0YWdzIG9uIHN0YXJ0aW5nIG5vZGUKKwlpZiB7ISR0ZCAmJiAkaSA+IDB9IHsKKwkgICAgaWYge1tpbmZvIGV4aXN0cyBpZHRhZ3MoJGlkKV19IHsKKwkJc2V0IHRhZ2xvYygkaWQpICRpZAorCQlzZXQgdGQgMQorCSAgICB9IGVsc2VpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF9hdGFncygkaWQpXX0geworCQlzZXQgdGFnbG9jKCRpZCkgJGNhY2hlZF9hdGFncygkaWQpCisJCXNldCB0ZCAxCisJICAgIH0KKwl9CisJZm9yZWFjaCBhICRhcmNvdXQoJGlkKSB7CisJICAgIGlmIHshJHRkICYmICRhcmN0YWdzKCRhKSBuZSB7fX0geworCQl2YWxpZGF0ZV9hcmN0YWdzICRhCisJCWlmIHskYXJjdGFncygkYSkgbmUge319IHsKKwkJICAgIGxhcHBlbmQgdGFnbG9jKCRpZCkgW2xpbmRleCAkYXJjdGFncygkYSkgMF0KKwkJfQorCSAgICB9CisJICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY2VuZCgkYSldfSBjb250aW51ZQorCSAgICBzZXQgZCAkYXJjZW5kKCRhKQorCSAgICBpZiB7JHRkIHx8ICRhcmN0YWdzKCRhKSBuZSB7fX0geworCQlzZXQgdG9tYXJrIFtsaXN0ICRkXQorCQlmb3Ige3NldCBqIDB9IHskaiA8IFtsbGVuZ3RoICR0b21hcmtdfSB7aW5jciBqfSB7CisJCSAgICBzZXQgZGQgW2xpbmRleCAkdG9tYXJrICRqXQorCQkgICAgaWYgeyFbaW5mbyBleGlzdHMgaGFzdGFnZ2VkZGVzY2VuZGVudCgkZGQpXX0geworCQkJaWYge1tpbmZvIGV4aXN0cyBkb25lKCRkZCldfSB7CisJCQkgICAgZm9yZWFjaCBiICRhcmNvdXQoJGRkKSB7CisJCQkJaWYge1tpbmZvIGV4aXN0cyBhcmNlbmQoJGIpXX0geworCQkJCSAgICBsYXBwZW5kIHRvbWFyayAkYXJjZW5kKCRiKQorCQkJCX0KKwkJCSAgICB9CisJCQkgICAgaWYge1tpbmZvIGV4aXN0cyB0YWdsb2MoJGRkKV19IHsKKwkJCQl1bnNldCB0YWdsb2MoJGRkKQorCQkJICAgIH0KKwkJCX0gZWxzZWlmIHtbaW5mbyBleGlzdHMgcXVldWVkKCRkZCldfSB7CisJCQkgICAgaW5jciBuYyAtMQorCQkJfQorCQkJc2V0IGhhc3RhZ2dlZGRlc2NlbmRlbnQoJGRkKSAxCisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBxdWV1ZWQoJGQpXX0geworCQlsYXBwZW5kIHRvZG8gJGQKKwkJc2V0IHF1ZXVlZCgkZCkgMQorCQlpZiB7IVtpbmZvIGV4aXN0cyBoYXN0YWdnZWRkZXNjZW5kZW50KCRkKV19IHsKKwkJICAgIGluY3IgbmMKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgdDIgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIHNldCBsb29waXggJGkKKyAgICBzZXQgdGFncyB7fQorICAgIGZvcmVhY2ggaWQgW2FycmF5IG5hbWVzIHRhZ2xvY10geworCWlmIHshW2luZm8gZXhpc3RzIGhhc3RhZ2dlZGRlc2NlbmRlbnQoJGlkKV19IHsKKwkgICAgZm9yZWFjaCB0ICR0YWdsb2MoJGlkKSB7CisJCWlmIHtbbHNlYXJjaCAtZXhhY3QgJHRhZ3MgJHRdIDwgMH0geworCQkgICAgbGFwcGVuZCB0YWdzICR0CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAjIHJlbW92ZSB0YWdzIHRoYXQgYXJlIGFuY2VzdG9ycyBvZiBvdGhlciB0YWdzCisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkdGFnc119IHtpbmNyIGl9IHsKKwlzZXQgYSBbbGluZGV4ICR0YWdzICRpXQorCWZvciB7c2V0IGogMH0geyRqIDwgJGl9IHtpbmNyIGp9IHsKKwkgICAgc2V0IGIgW2xpbmRleCAkdGFncyAkal0KKwkgICAgc2V0IHIgW2FuY19vcl9kZXNjICRhICRiXQorCSAgICBpZiB7JHIgPT0gLTF9IHsKKwkJc2V0IHRhZ3MgW2xyZXBsYWNlICR0YWdzICRqICRqXQorCQlpbmNyIGogLTEKKwkJaW5jciBpIC0xCisJICAgIH0gZWxzZWlmIHskciA9PSAxfSB7CisJCXNldCB0YWdzIFtscmVwbGFjZSAkdGFncyAkaSAkaV0KKwkJaW5jciBpIC0xCisJCWJyZWFrCisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYge1thcnJheSBuYW1lcyBncm93aW5nXSBuZSB7fX0geworCSMgZ3JhcGggaXNuJ3QgZmluaXNoZWQsIG5lZWQgdG8gY2hlY2sgaWYgYW55IHRhZyBjb3VsZCBnZXQKKwkjIGVjbGlwc2VkIGJ5IGFub3RoZXIgdGFnIGNvbWluZyBsYXRlci4gIFNpbXBseSBpZ25vcmUgYW55CisJIyB0YWdzIHRoYXQgY291bGQgbGF0ZXIgZ2V0IGVjbGlwc2VkLgorCXNldCBjdGFncyB7fQorCWZvcmVhY2ggdCAkdGFncyB7CisJICAgIGlmIHtbaXNfY2VydGFpbiAkb3JpZ2lkICR0XX0geworCQlsYXBwZW5kIGN0YWdzICR0CisJICAgIH0KKwl9CisJaWYgeyR0YWdzIGVxICRjdGFnc30geworCSAgICBzZXQgY2FjaGVkX2F0YWdzKCRvcmlnaWQpICR0YWdzCisJfSBlbHNlIHsKKwkgICAgc2V0IHRhZ3MgJGN0YWdzCisJfQorICAgIH0gZWxzZSB7CisJc2V0IGNhY2hlZF9hdGFncygkb3JpZ2lkKSAkdGFncworICAgIH0KKyAgICBzZXQgdDMgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIGlmIHswICYmICR0MyAtICR0MSA+PSAxMDB9IHsKKwlwdXRzICJpdGVyYXRpbmcgYW5jZXN0b3JzICgkbG9vcGl4L1tsbGVuZ3RoICR0b2RvXSBub2RlcykgdG9va1wKKyAgICAJICAgIFtleHByIHskdDItJHQxfV0rW2V4cHIgeyR0My0kdDJ9XW1zLCAkbmMgY2FuZGlkYXRlcyBsZWZ0IgorICAgIH0KKyAgICByZXR1cm4gJHRhZ3MKK30KKworIyBSZXR1cm4gdGhlIGxpc3Qgb2YgSURzIHRoYXQgaGF2ZSBoZWFkcyB0aGF0IGFyZSBkZXNjZW5kZW50cyBvZiBpZCwKKyMgaW5jbHVkaW5nIGlkIGl0c2VsZiBpZiBpdCBoYXMgYSBoZWFkLgorcHJvYyBkZXNjaGVhZHMge2lkfSB7CisgICAgZ2xvYmFsIGFyY25vcyBhcmNzdGFydCBhcmNpZHMgYXJjaGVhZHMgaWRoZWFkcyBjYWNoZWRfZGhlYWRzCisgICAgZ2xvYmFsIGFsbHBhcmVudHMgYXJjb3V0CisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBhbGxwYXJlbnRzKCRpZCldfSB7CisJcmV0dXJuIHt9CisgICAgfQorICAgIHNldCBhcmV0IHt9CisgICAgaWYgeyFbaW5mbyBleGlzdHMgYXJjb3V0KCRpZCldfSB7CisJIyBwYXJ0LXdheSBhbG9uZyBhbiBhcmM7IGNoZWNrIGl0IGZpcnN0CisJc2V0IGEgW2xpbmRleCAkYXJjbm9zKCRpZCkgMF0KKwlpZiB7JGFyY2hlYWRzKCRhKSBuZSB7fX0geworCSAgICB2YWxpZGF0ZV9hcmNoZWFkcyAkYQorCSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGFyY2lkcygkYSkgJGlkXQorCSAgICBmb3JlYWNoIHQgJGFyY2hlYWRzKCRhKSB7CisJCXNldCBqIFtsc2VhcmNoIC1leGFjdCAkYXJjaWRzKCRhKSAkdF0KKwkJaWYgeyRqID4gJGl9IGJyZWFrCisJCWxhcHBlbmQgYXJldCAkdAorCSAgICB9CisJfQorCXNldCBpZCAkYXJjc3RhcnQoJGEpCisgICAgfQorICAgIHNldCBvcmlnaWQgJGlkCisgICAgc2V0IHRvZG8gW2xpc3QgJGlkXQorICAgIHNldCBzZWVuKCRpZCkgMQorICAgIHNldCByZXQge30KKyAgICBmb3Ige3NldCBpIDB9IHskaSA8IFtsbGVuZ3RoICR0b2RvXX0ge2luY3IgaX0geworCXNldCBpZCBbbGluZGV4ICR0b2RvICRpXQorCWlmIHtbaW5mbyBleGlzdHMgY2FjaGVkX2RoZWFkcygkaWQpXX0geworCSAgICBzZXQgcmV0IFtjb25jYXQgJHJldCAkY2FjaGVkX2RoZWFkcygkaWQpXQorCX0gZWxzZSB7CisJICAgIGlmIHtbaW5mbyBleGlzdHMgaWRoZWFkcygkaWQpXX0geworCQlsYXBwZW5kIHJldCAkaWQKKwkgICAgfQorCSAgICBmb3JlYWNoIGEgJGFyY25vcygkaWQpIHsKKwkJaWYgeyRhcmNoZWFkcygkYSkgbmUge319IHsKKwkJICAgIHZhbGlkYXRlX2FyY2hlYWRzICRhCisJCSAgICBpZiB7JGFyY2hlYWRzKCRhKSBuZSB7fX0geworCQkJc2V0IHJldCBbY29uY2F0ICRyZXQgJGFyY2hlYWRzKCRhKV0KKwkJICAgIH0KKwkJfQorCQlzZXQgZCAkYXJjc3RhcnQoJGEpCisJCWlmIHshW2luZm8gZXhpc3RzIHNlZW4oJGQpXX0geworCQkgICAgbGFwcGVuZCB0b2RvICRkCisJCSAgICBzZXQgc2VlbigkZCkgMQorCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCByZXQgW2xzb3J0IC11bmlxdWUgJHJldF0KKyAgICBzZXQgY2FjaGVkX2RoZWFkcygkb3JpZ2lkKSAkcmV0CisgICAgcmV0dXJuIFtjb25jYXQgJHJldCAkYXJldF0KK30KKworcHJvYyBhZGRlZHRhZyB7aWR9IHsKKyAgICBnbG9iYWwgYXJjbm9zIGFyY291dCBjYWNoZWRfZHRhZ3MgY2FjaGVkX2F0YWdzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBhcmNub3MoJGlkKV19IHJldHVybgorICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkaWQpXX0geworCXJlY2FsY2FyYyBbbGluZGV4ICRhcmNub3MoJGlkKSAwXQorICAgIH0KKyAgICB1bnNldCAtbm9jb21wbGFpbiBjYWNoZWRfZHRhZ3MKKyAgICB1bnNldCAtbm9jb21wbGFpbiBjYWNoZWRfYXRhZ3MKK30KKworcHJvYyBhZGRlZGhlYWQge2hpZCBoZWFkfSB7CisgICAgZ2xvYmFsIGFyY25vcyBhcmNvdXQgY2FjaGVkX2RoZWFkcworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgYXJjbm9zKCRoaWQpXX0gcmV0dXJuCisgICAgaWYgeyFbaW5mbyBleGlzdHMgYXJjb3V0KCRoaWQpXX0geworCXJlY2FsY2FyYyBbbGluZGV4ICRhcmNub3MoJGhpZCkgMF0KKyAgICB9CisgICAgdW5zZXQgLW5vY29tcGxhaW4gY2FjaGVkX2RoZWFkcworfQorCitwcm9jIHJlbW92ZWRoZWFkIHtoaWQgaGVhZH0geworICAgIGdsb2JhbCBjYWNoZWRfZGhlYWRzCisKKyAgICB1bnNldCAtbm9jb21wbGFpbiBjYWNoZWRfZGhlYWRzCit9CisKK3Byb2MgbW92ZWRoZWFkIHtoaWQgaGVhZH0geworICAgIGdsb2JhbCBhcmNub3MgYXJjb3V0IGNhY2hlZF9kaGVhZHMKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY25vcygkaGlkKV19IHJldHVybgorICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkaGlkKV19IHsKKwlyZWNhbGNhcmMgW2xpbmRleCAkYXJjbm9zKCRoaWQpIDBdCisgICAgfQorICAgIHVuc2V0IC1ub2NvbXBsYWluIGNhY2hlZF9kaGVhZHMKK30KKworcHJvYyBjaGFuZ2VkcmVmcyB7fSB7CisgICAgZ2xvYmFsIGNhY2hlZF9kaGVhZHMgY2FjaGVkX2R0YWdzIGNhY2hlZF9hdGFncyBjYWNoZWRfdGFnY29udGVudAorICAgIGdsb2JhbCBhcmN0YWdzIGFyY2hlYWRzIGFyY25vcyBhcmNvdXQgaWRoZWFkcyBpZHRhZ3MKKworICAgIGZvcmVhY2ggaWQgW2NvbmNhdCBbYXJyYXkgbmFtZXMgaWRoZWFkc10gW2FycmF5IG5hbWVzIGlkdGFnc11dIHsKKwlpZiB7W2luZm8gZXhpc3RzIGFyY25vcygkaWQpXSAmJiAhW2luZm8gZXhpc3RzIGFyY291dCgkaWQpXX0geworCSAgICBzZXQgYSBbbGluZGV4ICRhcmNub3MoJGlkKSAwXQorCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBkb25lYXJjKCRhKV19IHsKKwkJcmVjYWxjYXJjICRhCisJCXNldCBkb25lYXJjKCRhKSAxCisJICAgIH0KKwl9CisgICAgfQorICAgIHVuc2V0IC1ub2NvbXBsYWluIGNhY2hlZF90YWdjb250ZW50CisgICAgdW5zZXQgLW5vY29tcGxhaW4gY2FjaGVkX2R0YWdzCisgICAgdW5zZXQgLW5vY29tcGxhaW4gY2FjaGVkX2F0YWdzCisgICAgdW5zZXQgLW5vY29tcGxhaW4gY2FjaGVkX2RoZWFkcworfQorCitwcm9jIHJlcmVhZHJlZnMge30geworICAgIGdsb2JhbCBpZHRhZ3MgaWRoZWFkcyBpZG90aGVycmVmcyBtYWluaGVhZGlkCisKKyAgICBzZXQgcmVmaWRzIFtjb25jYXQgW2FycmF5IG5hbWVzIGlkdGFnc10gXAorCQkgICAgW2FycmF5IG5hbWVzIGlkaGVhZHNdIFthcnJheSBuYW1lcyBpZG90aGVycmVmc11dCisgICAgZm9yZWFjaCBpZCAkcmVmaWRzIHsKKwlpZiB7IVtpbmZvIGV4aXN0cyByZWYoJGlkKV19IHsKKwkgICAgc2V0IHJlZigkaWQpIFtsaXN0cmVmcyAkaWRdCisJfQorICAgIH0KKyAgICBzZXQgb2xkbWFpbmhlYWQgJG1haW5oZWFkaWQKKyAgICByZWFkcmVmcworICAgIGNoYW5nZWRyZWZzCisgICAgc2V0IHJlZmlkcyBbbHNvcnQgLXVuaXF1ZSBbY29uY2F0ICRyZWZpZHMgW2FycmF5IG5hbWVzIGlkdGFnc10gXAorCQkJW2FycmF5IG5hbWVzIGlkaGVhZHNdIFthcnJheSBuYW1lcyBpZG90aGVycmVmc11dXQorICAgIGZvcmVhY2ggaWQgJHJlZmlkcyB7CisJc2V0IHYgW2xpc3RyZWZzICRpZF0KKwlpZiB7IVtpbmZvIGV4aXN0cyByZWYoJGlkKV0gfHwgJHJlZigkaWQpICE9ICR2fSB7CisJICAgIHJlZHJhd3RhZ3MgJGlkCisJfQorICAgIH0KKyAgICBpZiB7JG9sZG1haW5oZWFkIG5lICRtYWluaGVhZGlkfSB7CisJcmVkcmF3dGFncyAkb2xkbWFpbmhlYWQKKwlyZWRyYXd0YWdzICRtYWluaGVhZGlkCisgICAgfQorICAgIHJ1biByZWZpbGxfcmVmbGlzdAorfQorCitwcm9jIGxpc3RyZWZzIHtpZH0geworICAgIGdsb2JhbCBpZHRhZ3MgaWRoZWFkcyBpZG90aGVycmVmcworCisgICAgc2V0IHgge30KKyAgICBpZiB7W2luZm8gZXhpc3RzIGlkdGFncygkaWQpXX0geworCXNldCB4ICRpZHRhZ3MoJGlkKQorICAgIH0KKyAgICBzZXQgeSB7fQorICAgIGlmIHtbaW5mbyBleGlzdHMgaWRoZWFkcygkaWQpXX0geworCXNldCB5ICRpZGhlYWRzKCRpZCkKKyAgICB9CisgICAgc2V0IHoge30KKyAgICBpZiB7W2luZm8gZXhpc3RzIGlkb3RoZXJyZWZzKCRpZCldfSB7CisJc2V0IHogJGlkb3RoZXJyZWZzKCRpZCkKKyAgICB9CisgICAgcmV0dXJuIFtsaXN0ICR4ICR5ICR6XQorfQorCitwcm9jIGFkZF90YWdfY3RleHQge3RhZ30geworICAgIGdsb2JhbCBjdGV4dCBjYWNoZWRfdGFnY29udGVudCB0YWdpZHMKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGNhY2hlZF90YWdjb250ZW50KCR0YWcpXX0geworCWNhdGNoIHsKKwkgICAgc2V0IGNhY2hlZF90YWdjb250ZW50KCR0YWcpIFtleGVjIGdpdCBjYXQtZmlsZSAtcCAkdGFnXQorCX0KKyAgICB9CisgICAgJGN0ZXh0IGluc2VydCBlbmQgIlttYyAiVGFnIl06ICR0YWdcbiIgYm9sZAorICAgIGlmIHtbaW5mbyBleGlzdHMgY2FjaGVkX3RhZ2NvbnRlbnQoJHRhZyldfSB7CisJc2V0IHRleHQgJGNhY2hlZF90YWdjb250ZW50KCR0YWcpCisgICAgfSBlbHNlIHsKKwlzZXQgdGV4dCAiW21jICJJZCJdOiAgJHRhZ2lkcygkdGFnKSIKKyAgICB9CisgICAgYXBwZW5kd2l0aGxpbmtzICR0ZXh0IHt9Cit9CisKK3Byb2Mgc2hvd3RhZyB7dGFnIGlzbmV3fSB7CisgICAgZ2xvYmFsIGN0ZXh0IGNhY2hlZF90YWdjb250ZW50IHRhZ2lkcyBsaW5rbnVtIHRhZ29iamlkCisKKyAgICBpZiB7JGlzbmV3fSB7CisJYWRkdG9oaXN0b3J5IFtsaXN0IHNob3d0YWcgJHRhZyAwXSBzYXZlY3RleHRwb3MKKyAgICB9CisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgIGNsZWFyX2N0ZXh0CisgICAgc2V0dGFicyAwCisgICAgc2V0IGxpbmtudW0gMAorICAgIGFkZF90YWdfY3RleHQgJHRhZworICAgIG1heWJlX3Njcm9sbF9jdGV4dCAxCisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisgICAgaW5pdF9mbGlzdCB7fQorfQorCitwcm9jIHNob3d0YWdzIHtpZCBpc25ld30geworICAgIGdsb2JhbCBpZHRhZ3MgY3RleHQgbGlua251bQorCisgICAgaWYgeyRpc25ld30geworCWFkZHRvaGlzdG9yeSBbbGlzdCBzaG93dGFncyAkaWQgMF0gc2F2ZWN0ZXh0cG9zCisgICAgfQorICAgICRjdGV4dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICBjbGVhcl9jdGV4dAorICAgIHNldHRhYnMgMAorICAgIHNldCBsaW5rbnVtIDAKKyAgICBzZXQgc2VwIHt9CisgICAgZm9yZWFjaCB0YWcgJGlkdGFncygkaWQpIHsKKwkkY3RleHQgaW5zZXJ0IGVuZCAkc2VwCisJYWRkX3RhZ19jdGV4dCAkdGFnCisJc2V0IHNlcCAiXG5cbiIKKyAgICB9CisgICAgbWF5YmVfc2Nyb2xsX2N0ZXh0IDEKKyAgICAkY3RleHQgY29uZiAtc3RhdGUgZGlzYWJsZWQKKyAgICBpbml0X2ZsaXN0IHt9Cit9CisKK3Byb2MgZG9xdWl0IHt9IHsKKyAgICBnbG9iYWwgc3RvcHBlZAorICAgIGdsb2JhbCBnaXRrdG1wZGlyCisKKyAgICBzZXQgc3RvcHBlZCAxMDAKKyAgICBzYXZlc3R1ZmYgLgorICAgIGRlc3Ryb3kgLgorCisgICAgaWYge1tpbmZvIGV4aXN0cyBnaXRrdG1wZGlyXX0geworCWNhdGNoIHtmaWxlIGRlbGV0ZSAtZm9yY2UgJGdpdGt0bXBkaXJ9CisgICAgfQorfQorCitwcm9jIG1rZm9udGRpc3Age2ZvbnQgdG9wIHdoaWNofSB7CisgICAgZ2xvYmFsIGZvbnRhdHRyIGZvbnRwcmVmICRmb250IE5TIHVzZV90dGsKKworICAgIHNldCBmb250cHJlZigkZm9udCkgW3NldCAkZm9udF0KKyAgICAke05TfTo6YnV0dG9uICR0b3AuJHtmb250fWJ1dCAtdGV4dCAkd2hpY2ggXAorCS1jb21tYW5kIFtsaXN0IGNob29zZWZvbnQgJGZvbnQgJHdoaWNoXQorICAgICR7TlN9OjpsYWJlbCAkdG9wLiRmb250IC1yZWxpZWYgZmxhdCAtZm9udCAkZm9udCBcCisJLXRleHQgJGZvbnRhdHRyKCRmb250LGZhbWlseSkgLWp1c3RpZnkgbGVmdAorICAgIGdyaWQgeCAkdG9wLiR7Zm9udH1idXQgJHRvcC4kZm9udCAtc3RpY2t5IHcKK30KKworcHJvYyBjaG9vc2Vmb250IHtmb250IHdoaWNofSB7CisgICAgZ2xvYmFsIGZvbnRwYXJhbSBmb250bGlzdCBmb250dG9wIGZvbnRhdHRyCisgICAgZ2xvYmFsIHByZWZzdG9wIE5TCisKKyAgICBzZXQgZm9udHBhcmFtKHdoaWNoKSAkd2hpY2gKKyAgICBzZXQgZm9udHBhcmFtKGZvbnQpICRmb250CisgICAgc2V0IGZvbnRwYXJhbShmYW1pbHkpIFtmb250IGFjdHVhbCAkZm9udCAtZmFtaWx5XQorICAgIHNldCBmb250cGFyYW0oc2l6ZSkgJGZvbnRhdHRyKCRmb250LHNpemUpCisgICAgc2V0IGZvbnRwYXJhbSh3ZWlnaHQpICRmb250YXR0cigkZm9udCx3ZWlnaHQpCisgICAgc2V0IGZvbnRwYXJhbShzbGFudCkgJGZvbnRhdHRyKCRmb250LHNsYW50KQorICAgIHNldCB0b3AgLmdpdGtmb250CisgICAgc2V0IGZvbnR0b3AgJHRvcAorICAgIGlmIHshW3dpbmZvIGV4aXN0cyAkdG9wXX0geworCWZvbnQgY3JlYXRlIHNhbXBsZQorCWV2YWwgZm9udCBjb25maWcgc2FtcGxlIFtmb250IGFjdHVhbCAkZm9udF0KKwl0dGtfdG9wbGV2ZWwgJHRvcAorCW1ha2VfdHJhbnNpZW50ICR0b3AgJHByZWZzdG9wCisJd20gdGl0bGUgJHRvcCBbbWMgIkdpdGsgZm9udCBjaG9vc2VyIl0KKwkke05TfTo6bGFiZWwgJHRvcC5sIC10ZXh0dmFyaWFibGUgZm9udHBhcmFtKHdoaWNoKQorCXBhY2sgJHRvcC5sIC1zaWRlIHRvcAorCXNldCBmb250bGlzdCBbbHNvcnQgW2ZvbnQgZmFtaWxpZXNdXQorCSR7TlN9OjpmcmFtZSAkdG9wLmYKKwlsaXN0Ym94ICR0b3AuZi5mYW0gLWxpc3R2YXJpYWJsZSBmb250bGlzdCBcCisJICAgIC15c2Nyb2xsY29tbWFuZCBbbGlzdCAkdG9wLmYuc2Igc2V0XQorCWJpbmQgJHRvcC5mLmZhbSA8PExpc3Rib3hTZWxlY3Q+PiBzZWxmb250ZmFtCisJJHtOU306OnNjcm9sbGJhciAkdG9wLmYuc2IgLWNvbW1hbmQgW2xpc3QgJHRvcC5mLmZhbSB5dmlld10KKwlwYWNrICR0b3AuZi5zYiAtc2lkZSByaWdodCAtZmlsbCB5CisJcGFjayAkdG9wLmYuZmFtIC1zaWRlIGxlZnQgLWZpbGwgYm90aCAtZXhwYW5kIDEKKwlwYWNrICR0b3AuZiAtc2lkZSB0b3AgLWZpbGwgYm90aCAtZXhwYW5kIDEKKwkke05TfTo6ZnJhbWUgJHRvcC5nCisJc3BpbmJveCAkdG9wLmcuc2l6ZSAtZnJvbSA0IC10byA0MCAtd2lkdGggNCBcCisJICAgIC10ZXh0dmFyaWFibGUgZm9udHBhcmFtKHNpemUpIFwKKwkgICAgLXZhbGlkYXRlY29tbWFuZCB7c3RyaW5nIGlzIGludGVnZXIgLXN0cmljdCAlc30KKwljaGVja2J1dHRvbiAkdG9wLmcuYm9sZCAtcGFkeCA1IFwKKwkgICAgLWZvbnQge3tUaW1lcyBOZXcgUm9tYW59IDEyIGJvbGR9IC10ZXh0IFttYyAiQiJdIC1pbmRpY2F0b3JvbiAwIFwKKwkgICAgLXZhcmlhYmxlIGZvbnRwYXJhbSh3ZWlnaHQpIC1vbnZhbHVlIGJvbGQgLW9mZnZhbHVlIG5vcm1hbAorCWNoZWNrYnV0dG9uICR0b3AuZy5pdGFsIC1wYWR4IDUgXAorCSAgICAtZm9udCB7e1RpbWVzIE5ldyBSb21hbn0gMTIgaXRhbGljfSAtdGV4dCBbbWMgIkkiXSAtaW5kaWNhdG9yb24gMCAgXAorCSAgICAtdmFyaWFibGUgZm9udHBhcmFtKHNsYW50KSAtb252YWx1ZSBpdGFsaWMgLW9mZnZhbHVlIHJvbWFuCisJcGFjayAkdG9wLmcuc2l6ZSAkdG9wLmcuYm9sZCAkdG9wLmcuaXRhbCAtc2lkZSBsZWZ0CisJcGFjayAkdG9wLmcgLXNpZGUgdG9wCisJY2FudmFzICR0b3AuYyAtd2lkdGggMTUwIC1oZWlnaHQgNTAgLWJvcmRlciAyIC1yZWxpZWYgc3VuayBcCisJICAgIC1iYWNrZ3JvdW5kIHdoaXRlCisJJHRvcC5jIGNyZWF0ZSB0ZXh0IDEwMCAyNSAtYW5jaG9yIGNlbnRlciAtdGV4dCAkd2hpY2ggLWZvbnQgc2FtcGxlIFwKKwkgICAgLWZpbGwgYmxhY2sgLXRhZ3MgdGV4dAorCWJpbmQgJHRvcC5jIDxDb25maWd1cmU+IFtsaXN0IGNlbnRlcnRleHQgJHRvcC5jXQorCXBhY2sgJHRvcC5jIC1zaWRlIHRvcCAtZmlsbCB4CisJJHtOU306OmZyYW1lICR0b3AuYnV0cworCSR7TlN9OjpidXR0b24gJHRvcC5idXRzLm9rIC10ZXh0IFttYyAiT0siXSAtY29tbWFuZCBmb250b2sgLWRlZmF1bHQgYWN0aXZlCisJJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuY2FuIC10ZXh0IFttYyAiQ2FuY2VsIl0gLWNvbW1hbmQgZm9udGNhbiAtZGVmYXVsdCBub3JtYWwKKwliaW5kICR0b3AgPEtleS1SZXR1cm4+IGZvbnRvaworCWJpbmQgJHRvcCA8S2V5LUVzY2FwZT4gZm9udGNhbgorCWdyaWQgJHRvcC5idXRzLm9rICR0b3AuYnV0cy5jYW4KKwlncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMCAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorCWdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAxIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisJcGFjayAkdG9wLmJ1dHMgLXNpZGUgYm90dG9tIC1maWxsIHgKKwl0cmFjZSBhZGQgdmFyaWFibGUgZm9udHBhcmFtIHdyaXRlIGNoZ19mb250cGFyYW0KKyAgICB9IGVsc2UgeworCXJhaXNlICR0b3AKKwkkdG9wLmMgaXRlbWNvbmYgdGV4dCAtdGV4dCAkd2hpY2gKKyAgICB9CisgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRmb250bGlzdCAkZm9udHBhcmFtKGZhbWlseSldCisgICAgaWYgeyRpID49IDB9IHsKKwkkdG9wLmYuZmFtIHNlbGVjdGlvbiBzZXQgJGkKKwkkdG9wLmYuZmFtIHNlZSAkaQorICAgIH0KK30KKworcHJvYyBjZW50ZXJ0ZXh0IHt3fSB7CisgICAgJHcgY29vcmRzIHRleHQgW2V4cHIge1t3aW5mbyB3aWR0aCAkd10gLyAyfV0gW2V4cHIge1t3aW5mbyBoZWlnaHQgJHddIC8gMn1dCit9CisKK3Byb2MgZm9udG9rIHt9IHsKKyAgICBnbG9iYWwgZm9udHBhcmFtIGZvbnRwcmVmIHByZWZzdG9wCisKKyAgICBzZXQgZiAkZm9udHBhcmFtKGZvbnQpCisgICAgc2V0IGZvbnRwcmVmKCRmKSBbbGlzdCAkZm9udHBhcmFtKGZhbWlseSkgJGZvbnRwYXJhbShzaXplKV0KKyAgICBpZiB7JGZvbnRwYXJhbSh3ZWlnaHQpIGVxICJib2xkIn0geworCWxhcHBlbmQgZm9udHByZWYoJGYpICJib2xkIgorICAgIH0KKyAgICBpZiB7JGZvbnRwYXJhbShzbGFudCkgZXEgIml0YWxpYyJ9IHsKKwlsYXBwZW5kIGZvbnRwcmVmKCRmKSAiaXRhbGljIgorICAgIH0KKyAgICBzZXQgdyAkcHJlZnN0b3Aubm90ZWJvb2suZm9udHMuJGYKKyAgICAkdyBjb25mIC10ZXh0ICRmb250cGFyYW0oZmFtaWx5KSAtZm9udCAkZm9udHByZWYoJGYpCisKKyAgICBmb250Y2FuCit9CisKK3Byb2MgZm9udGNhbiB7fSB7CisgICAgZ2xvYmFsIGZvbnR0b3AgZm9udHBhcmFtCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGZvbnR0b3BdfSB7CisJY2F0Y2gge2Rlc3Ryb3kgJGZvbnR0b3B9CisJY2F0Y2gge2ZvbnQgZGVsZXRlIHNhbXBsZX0KKwl1bnNldCBmb250dG9wCisJdW5zZXQgZm9udHBhcmFtCisgICAgfQorfQorCitpZiB7W3BhY2thZ2UgdnNhdGlzZmllcyBbcGFja2FnZSBwcm92aWRlIFRrXSA4LjZdfSB7CisgICAgIyBJbiBUayA4LjYgd2UgaGF2ZSBhIG5hdGl2ZSBmb250IGNob29zZXIgZGlhbG9nLiBPdmVyd3JpdGUgdGhlIGFib3ZlCisgICAgIyBmdW5jdGlvbiB0byBtYWtlIHVzZSBvZiBpdC4KKyAgICBwcm9jIGNob29zZWZvbnQge2ZvbnQgd2hpY2h9IHsKKwl0ayBmb250Y2hvb3NlciBjb25maWd1cmUgLXRpdGxlICR3aGljaCAtZm9udCAkZm9udCBcCisJICAgIC1jb21tYW5kIFtsaXN0IG9uX2Nob29zZWZvbnQgJGZvbnQgJHdoaWNoXQorCXRrIGZvbnRjaG9vc2VyIHNob3cKKyAgICB9CisgICAgcHJvYyBvbl9jaG9vc2Vmb250IHtmb250IHdoaWNoIG5ld2ZvbnR9IHsKKwlnbG9iYWwgZm9udHBhcmFtCisJcHV0cyBzdGRlcnIgIiRmb250ICRuZXdmb250IgorCWFycmF5IHNldCBmIFtmb250IGFjdHVhbCAkbmV3Zm9udF0KKwlzZXQgZm9udHBhcmFtKHdoaWNoKSAkd2hpY2gKKwlzZXQgZm9udHBhcmFtKGZvbnQpICRmb250CisJc2V0IGZvbnRwYXJhbShmYW1pbHkpICRmKC1mYW1pbHkpCisJc2V0IGZvbnRwYXJhbShzaXplKSAkZigtc2l6ZSkKKwlzZXQgZm9udHBhcmFtKHdlaWdodCkgJGYoLXdlaWdodCkKKwlzZXQgZm9udHBhcmFtKHNsYW50KSAkZigtc2xhbnQpCisJZm9udG9rCisgICAgfQorfQorCitwcm9jIHNlbGZvbnRmYW0ge30geworICAgIGdsb2JhbCBmb250dG9wIGZvbnRwYXJhbQorCisgICAgc2V0IGkgWyRmb250dG9wLmYuZmFtIGN1cnNlbGVjdGlvbl0KKyAgICBpZiB7JGkgbmUge319IHsKKwlzZXQgZm9udHBhcmFtKGZhbWlseSkgWyRmb250dG9wLmYuZmFtIGdldCAkaV0KKyAgICB9Cit9CisKK3Byb2MgY2hnX2ZvbnRwYXJhbSB7diBzdWIgb3B9IHsKKyAgICBnbG9iYWwgZm9udHBhcmFtCisKKyAgICBmb250IGNvbmZpZyBzYW1wbGUgLSRzdWIgJGZvbnRwYXJhbSgkc3ViKQorfQorCisjIENyZWF0ZSBhIHByb3BlcnR5IHNoZWV0IHRhYiBwYWdlCitwcm9jIGNyZWF0ZV9wcmVmc19wYWdlIHt3fSB7CisgICAgZ2xvYmFsIE5TCisgICAgc2V0IHBhcmVudCBbam9pbiBbbHJhbmdlIFtzcGxpdCAkdyAuXSAwIGVuZC0xXSAuXQorICAgIGlmIHtbd2luZm8gY2xhc3MgJHBhcmVudF0gZXEgIlROb3RlYm9vayJ9IHsKKwkke05TfTo6ZnJhbWUgJHcKKyAgICB9IGVsc2UgeworCSR7TlN9OjpsYWJlbGZyYW1lICR3CisgICAgfQorfQorCitwcm9jIHByZWZzcGFnZV9nZW5lcmFsIHtub3RlYm9va30geworICAgIGdsb2JhbCBOUyBtYXh3aWR0aCBtYXhncmFwaHBjdCBzaG93bmVhcnRhZ3Mgc2hvd2xvY2FsY2hhbmdlcworICAgIGdsb2JhbCB0YWJzdG9wIGxpbWl0ZGlmZnMgYXV0b3NlbGVjdCBhdXRvc2VsbGVuIGV4dGRpZmZ0b29sIHBlcmZpbGVfYXR0cnMKKyAgICBnbG9iYWwgaGlkZXJlbW90ZXMgd2FudF90dGsgaGF2ZV90dGsgbWF4cmVmcyB3ZWJfYnJvd3NlcgorCisgICAgc2V0IHBhZ2UgW2NyZWF0ZV9wcmVmc19wYWdlICRub3RlYm9vay5nZW5lcmFsXQorCisgICAgJHtOU306OmxhYmVsICRwYWdlLmxkaXNwIC10ZXh0IFttYyAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIl0KKyAgICBncmlkICRwYWdlLmxkaXNwIC0gLXN0aWNreSB3IC1wYWR5IDEwCisgICAgJHtOU306OmxhYmVsICRwYWdlLnNwYWNlciAtdGV4dCAiICIKKyAgICAke05TfTo6bGFiZWwgJHBhZ2UubWF4d2lkdGhsIC10ZXh0IFttYyAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIl0KKyAgICBzcGluYm94ICRwYWdlLm1heHdpZHRoIC1mcm9tIDAgLXRvIDEwMCAtd2lkdGggNCAtdGV4dHZhcmlhYmxlIG1heHdpZHRoCisgICAgZ3JpZCAkcGFnZS5zcGFjZXIgJHBhZ2UubWF4d2lkdGhsICRwYWdlLm1heHdpZHRoIC1zdGlja3kgdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjeGdldHRleHQ6bm8tdGNsLWZvcm1hdAorICAgICR7TlN9OjpsYWJlbCAkcGFnZS5tYXhwY3RsIC10ZXh0IFttYyAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSJdCisgICAgc3BpbmJveCAkcGFnZS5tYXhwY3QgLWZyb20gMSAtdG8gMTAwIC13aWR0aCA0IC10ZXh0dmFyaWFibGUgbWF4Z3JhcGhwY3QKKyAgICBncmlkIHggJHBhZ2UubWF4cGN0bCAkcGFnZS5tYXhwY3QgLXN0aWNreSB3CisgICAgJHtOU306OmNoZWNrYnV0dG9uICRwYWdlLnNob3dsb2NhbCAtdGV4dCBbbWMgIlNob3cgbG9jYWwgY2hhbmdlcyJdIFwKKwktdmFyaWFibGUgc2hvd2xvY2FsY2hhbmdlcworICAgIGdyaWQgeCAkcGFnZS5zaG93bG9jYWwgLXN0aWNreSB3CisgICAgJHtOU306OmNoZWNrYnV0dG9uICRwYWdlLmF1dG9zZWxlY3QgLXRleHQgW21jICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIl0gXAorCS12YXJpYWJsZSBhdXRvc2VsZWN0CisgICAgc3BpbmJveCAkcGFnZS5hdXRvc2VsbGVuIC1mcm9tIDEgLXRvIDQwIC13aWR0aCA0IC10ZXh0dmFyaWFibGUgYXV0b3NlbGxlbgorICAgIGdyaWQgeCAkcGFnZS5hdXRvc2VsZWN0ICRwYWdlLmF1dG9zZWxsZW4gLXN0aWNreSB3CisgICAgJHtOU306OmNoZWNrYnV0dG9uICRwYWdlLmhpZGVyZW1vdGVzIC10ZXh0IFttYyAiSGlkZSByZW1vdGUgcmVmcyJdIFwKKwktdmFyaWFibGUgaGlkZXJlbW90ZXMKKyAgICBncmlkIHggJHBhZ2UuaGlkZXJlbW90ZXMgLXN0aWNreSB3CisKKyAgICAke05TfTo6bGFiZWwgJHBhZ2UuZGRpc3AgLXRleHQgW21jICJEaWZmIGRpc3BsYXkgb3B0aW9ucyJdCisgICAgZ3JpZCAkcGFnZS5kZGlzcCAtIC1zdGlja3kgdyAtcGFkeSAxMAorICAgICR7TlN9OjpsYWJlbCAkcGFnZS50YWJzdG9wbCAtdGV4dCBbbWMgIlRhYiBzcGFjaW5nIl0KKyAgICBzcGluYm94ICRwYWdlLnRhYnN0b3AgLWZyb20gMSAtdG8gMjAgLXdpZHRoIDQgLXRleHR2YXJpYWJsZSB0YWJzdG9wCisgICAgZ3JpZCB4ICRwYWdlLnRhYnN0b3BsICRwYWdlLnRhYnN0b3AgLXN0aWNreSB3CisgICAgJHtOU306OmNoZWNrYnV0dG9uICRwYWdlLm50YWcgLXRleHQgW21jICJEaXNwbGF5IG5lYXJieSB0YWdzL2hlYWRzIl0gXAorCS12YXJpYWJsZSBzaG93bmVhcnRhZ3MKKyAgICBncmlkIHggJHBhZ2UubnRhZyAtc3RpY2t5IHcKKyAgICAke05TfTo6bGFiZWwgJHBhZ2UubWF4cmVmc2wgLXRleHQgW21jICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93Il0KKyAgICBzcGluYm94ICRwYWdlLm1heHJlZnMgLWZyb20gMSAtdG8gMTAwMCAtd2lkdGggNCAtdGV4dHZhcmlhYmxlIG1heHJlZnMKKyAgICBncmlkIHggJHBhZ2UubWF4cmVmc2wgJHBhZ2UubWF4cmVmcyAtc3RpY2t5IHcKKyAgICAke05TfTo6Y2hlY2tidXR0b24gJHBhZ2UubGRpZmYgLXRleHQgW21jICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiXSBcCisJLXZhcmlhYmxlIGxpbWl0ZGlmZnMKKyAgICBncmlkIHggJHBhZ2UubGRpZmYgLXN0aWNreSB3CisgICAgJHtOU306OmNoZWNrYnV0dG9uICRwYWdlLmxhdHRyIC10ZXh0IFttYyAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiXSBcCisJLXZhcmlhYmxlIHBlcmZpbGVfYXR0cnMKKyAgICBncmlkIHggJHBhZ2UubGF0dHIgLXN0aWNreSB3CisKKyAgICAke05TfTo6ZW50cnkgJHBhZ2UuZXh0ZGlmZnQgLXRleHR2YXJpYWJsZSBleHRkaWZmdG9vbAorICAgICR7TlN9OjpmcmFtZSAkcGFnZS5leHRkaWZmZgorICAgICR7TlN9OjpsYWJlbCAkcGFnZS5leHRkaWZmZi5sIC10ZXh0IFttYyAiRXh0ZXJuYWwgZGlmZiB0b29sIiBdCisgICAgJHtOU306OmJ1dHRvbiAkcGFnZS5leHRkaWZmZi5iIC10ZXh0IFttYyAiQ2hvb3NlLi4uIl0gLWNvbW1hbmQgY2hvb3NlX2V4dGRpZmYKKyAgICBwYWNrICRwYWdlLmV4dGRpZmZmLmwgJHBhZ2UuZXh0ZGlmZmYuYiAtc2lkZSBsZWZ0CisgICAgcGFjayBjb25maWd1cmUgJHBhZ2UuZXh0ZGlmZmYubCAtcGFkeCAxMAorICAgIGdyaWQgeCAkcGFnZS5leHRkaWZmZiAkcGFnZS5leHRkaWZmdCAtc3RpY2t5IGV3CisKKyAgICAke05TfTo6ZW50cnkgJHBhZ2Uud2ViYnJvd3NlciAtdGV4dHZhcmlhYmxlIHdlYl9icm93c2VyCisgICAgJHtOU306OmZyYW1lICRwYWdlLndlYmJyb3dzZXJmCisgICAgJHtOU306OmxhYmVsICRwYWdlLndlYmJyb3dzZXJmLmwgLXRleHQgW21jICJXZWIgYnJvd3NlciIgXQorICAgIHBhY2sgJHBhZ2Uud2ViYnJvd3NlcmYubCAtc2lkZSBsZWZ0CisgICAgcGFjayBjb25maWd1cmUgJHBhZ2Uud2ViYnJvd3NlcmYubCAtcGFkeCAxMAorICAgIGdyaWQgeCAkcGFnZS53ZWJicm93c2VyZiAkcGFnZS53ZWJicm93c2VyIC1zdGlja3kgZXcKKworICAgICR7TlN9OjpsYWJlbCAkcGFnZS5sZ2VuIC10ZXh0IFttYyAiR2VuZXJhbCBvcHRpb25zIl0KKyAgICBncmlkICRwYWdlLmxnZW4gLSAtc3RpY2t5IHcgLXBhZHkgMTAKKyAgICAke05TfTo6Y2hlY2tidXR0b24gJHBhZ2Uud2FudF90dGsgLXZhcmlhYmxlIHdhbnRfdHRrIFwKKwktdGV4dCBbbWMgIlVzZSB0aGVtZWQgd2lkZ2V0cyJdCisgICAgaWYgeyRoYXZlX3R0a30geworCSR7TlN9OjpsYWJlbCAkcGFnZS50dGtfbm90ZSAtdGV4dCBbbWMgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiXQorICAgIH0gZWxzZSB7CisJJHtOU306OmxhYmVsICRwYWdlLnR0a19ub3RlIC10ZXh0IFttYyAiKGN1cnJlbnRseSB1bmF2YWlsYWJsZSkiXQorICAgIH0KKyAgICBncmlkIHggJHBhZ2Uud2FudF90dGsgJHBhZ2UudHRrX25vdGUgLXN0aWNreSB3CisgICAgcmV0dXJuICRwYWdlCit9CisKK3Byb2MgcHJlZnNwYWdlX2NvbG9ycyB7bm90ZWJvb2t9IHsKKyAgICBnbG9iYWwgTlMgdWljb2xvciBiZ2NvbG9yIGZnY29sb3IgY3RleHQgZGlmZmNvbG9ycyBzZWxlY3RiZ2NvbG9yIG1hcmtiZ2NvbG9yCisKKyAgICBzZXQgcGFnZSBbY3JlYXRlX3ByZWZzX3BhZ2UgJG5vdGVib29rLmNvbG9yc10KKworICAgICR7TlN9OjpsYWJlbCAkcGFnZS5jZGlzcCAtdGV4dCBbbWMgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIl0KKyAgICBncmlkICRwYWdlLmNkaXNwIC0gLXN0aWNreSB3IC1wYWR5IDEwCisgICAgbGFiZWwgJHBhZ2UudWkgLXBhZHggNDAgLXJlbGllZiBzdW5rIC1iYWNrZ3JvdW5kICR1aWNvbG9yCisgICAgJHtOU306OmJ1dHRvbiAkcGFnZS51aWJ1dCAtdGV4dCBbbWMgIkludGVyZmFjZSJdIFwKKyAgICAgICAtY29tbWFuZCBbbGlzdCBjaG9vc2Vjb2xvciB1aWNvbG9yIHt9ICRwYWdlLnVpIFttYyAiaW50ZXJmYWNlIl0gc2V0dWldCisgICAgZ3JpZCB4ICRwYWdlLnVpYnV0ICRwYWdlLnVpIC1zdGlja3kgdworICAgIGxhYmVsICRwYWdlLmJnIC1wYWR4IDQwIC1yZWxpZWYgc3VuayAtYmFja2dyb3VuZCAkYmdjb2xvcgorICAgICR7TlN9OjpidXR0b24gJHBhZ2UuYmdidXQgLXRleHQgW21jICJCYWNrZ3JvdW5kIl0gXAorCS1jb21tYW5kIFtsaXN0IGNob29zZWNvbG9yIGJnY29sb3Ige30gJHBhZ2UuYmcgW21jICJiYWNrZ3JvdW5kIl0gc2V0YmddCisgICAgZ3JpZCB4ICRwYWdlLmJnYnV0ICRwYWdlLmJnIC1zdGlja3kgdworICAgIGxhYmVsICRwYWdlLmZnIC1wYWR4IDQwIC1yZWxpZWYgc3VuayAtYmFja2dyb3VuZCAkZmdjb2xvcgorICAgICR7TlN9OjpidXR0b24gJHBhZ2UuZmdidXQgLXRleHQgW21jICJGb3JlZ3JvdW5kIl0gXAorCS1jb21tYW5kIFtsaXN0IGNob29zZWNvbG9yIGZnY29sb3Ige30gJHBhZ2UuZmcgW21jICJmb3JlZ3JvdW5kIl0gc2V0ZmddCisgICAgZ3JpZCB4ICRwYWdlLmZnYnV0ICRwYWdlLmZnIC1zdGlja3kgdworICAgIGxhYmVsICRwYWdlLmRpZmZvbGQgLXBhZHggNDAgLXJlbGllZiBzdW5rIC1iYWNrZ3JvdW5kIFtsaW5kZXggJGRpZmZjb2xvcnMgMF0KKyAgICAke05TfTo6YnV0dG9uICRwYWdlLmRpZmZvbGRidXQgLXRleHQgW21jICJEaWZmOiBvbGQgbGluZXMiXSBcCisJLWNvbW1hbmQgW2xpc3QgY2hvb3NlY29sb3IgZGlmZmNvbG9ycyAwICRwYWdlLmRpZmZvbGQgW21jICJkaWZmIG9sZCBsaW5lcyJdIFwKKwkJICAgICAgW2xpc3QgJGN0ZXh0IHRhZyBjb25mIGQwIC1mb3JlZ3JvdW5kXV0KKyAgICBncmlkIHggJHBhZ2UuZGlmZm9sZGJ1dCAkcGFnZS5kaWZmb2xkIC1zdGlja3kgdworICAgIGxhYmVsICRwYWdlLmRpZmZuZXcgLXBhZHggNDAgLXJlbGllZiBzdW5rIC1iYWNrZ3JvdW5kIFtsaW5kZXggJGRpZmZjb2xvcnMgMV0KKyAgICAke05TfTo6YnV0dG9uICRwYWdlLmRpZmZuZXdidXQgLXRleHQgW21jICJEaWZmOiBuZXcgbGluZXMiXSBcCisJLWNvbW1hbmQgW2xpc3QgY2hvb3NlY29sb3IgZGlmZmNvbG9ycyAxICRwYWdlLmRpZmZuZXcgW21jICJkaWZmIG5ldyBsaW5lcyJdIFwKKwkJICAgICAgW2xpc3QgJGN0ZXh0IHRhZyBjb25mIGRyZXN1bHQgLWZvcmVncm91bmRdXQorICAgIGdyaWQgeCAkcGFnZS5kaWZmbmV3YnV0ICRwYWdlLmRpZmZuZXcgLXN0aWNreSB3CisgICAgbGFiZWwgJHBhZ2UuaHVua3NlcCAtcGFkeCA0MCAtcmVsaWVmIHN1bmsgLWJhY2tncm91bmQgW2xpbmRleCAkZGlmZmNvbG9ycyAyXQorICAgICR7TlN9OjpidXR0b24gJHBhZ2UuaHVua3NlcGJ1dCAtdGV4dCBbbWMgIkRpZmY6IGh1bmsgaGVhZGVyIl0gXAorCS1jb21tYW5kIFtsaXN0IGNob29zZWNvbG9yIGRpZmZjb2xvcnMgMiAkcGFnZS5odW5rc2VwIFwKKwkJICAgICAgW21jICJkaWZmIGh1bmsgaGVhZGVyIl0gXAorCQkgICAgICBbbGlzdCAkY3RleHQgdGFnIGNvbmYgaHVua3NlcCAtZm9yZWdyb3VuZF1dCisgICAgZ3JpZCB4ICRwYWdlLmh1bmtzZXBidXQgJHBhZ2UuaHVua3NlcCAtc3RpY2t5IHcKKyAgICBsYWJlbCAkcGFnZS5tYXJrYmdzZXAgLXBhZHggNDAgLXJlbGllZiBzdW5rIC1iYWNrZ3JvdW5kICRtYXJrYmdjb2xvcgorICAgICR7TlN9OjpidXR0b24gJHBhZ2UubWFya2JnYnV0IC10ZXh0IFttYyAiTWFya2VkIGxpbmUgYmciXSBcCisJLWNvbW1hbmQgW2xpc3QgY2hvb3NlY29sb3IgbWFya2JnY29sb3Ige30gJHBhZ2UubWFya2Jnc2VwIFwKKwkJICAgICAgW21jICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIl0gXAorCQkgICAgICBbbGlzdCAkY3RleHQgdGFnIGNvbmYgb21hcmsgLWJhY2tncm91bmRdXQorICAgIGdyaWQgeCAkcGFnZS5tYXJrYmdidXQgJHBhZ2UubWFya2Jnc2VwIC1zdGlja3kgdworICAgIGxhYmVsICRwYWdlLnNlbGJnc2VwIC1wYWR4IDQwIC1yZWxpZWYgc3VuayAtYmFja2dyb3VuZCAkc2VsZWN0Ymdjb2xvcgorICAgICR7TlN9OjpidXR0b24gJHBhZ2Uuc2VsYmdidXQgLXRleHQgW21jICJTZWxlY3QgYmciXSBcCisJLWNvbW1hbmQgW2xpc3QgY2hvb3NlY29sb3Igc2VsZWN0Ymdjb2xvciB7fSAkcGFnZS5zZWxiZ3NlcCBbbWMgImJhY2tncm91bmQiXSBzZXRzZWxiZ10KKyAgICBncmlkIHggJHBhZ2Uuc2VsYmdidXQgJHBhZ2Uuc2VsYmdzZXAgLXN0aWNreSB3CisgICAgcmV0dXJuICRwYWdlCit9CisKK3Byb2MgcHJlZnNwYWdlX2ZvbnRzIHtub3RlYm9va30geworICAgIGdsb2JhbCBOUworICAgIHNldCBwYWdlIFtjcmVhdGVfcHJlZnNfcGFnZSAkbm90ZWJvb2suZm9udHNdCisgICAgJHtOU306OmxhYmVsICRwYWdlLmNmb250IC10ZXh0IFttYyAiRm9udHM6IHByZXNzIHRvIGNob29zZSJdCisgICAgZ3JpZCAkcGFnZS5jZm9udCAtIC1zdGlja3kgdyAtcGFkeSAxMAorICAgIG1rZm9udGRpc3AgbWFpbmZvbnQgJHBhZ2UgW21jICJNYWluIGZvbnQiXQorICAgIG1rZm9udGRpc3AgdGV4dGZvbnQgJHBhZ2UgW21jICJEaWZmIGRpc3BsYXkgZm9udCJdCisgICAgbWtmb250ZGlzcCB1aWZvbnQgJHBhZ2UgW21jICJVc2VyIGludGVyZmFjZSBmb250Il0KKyAgICByZXR1cm4gJHBhZ2UKK30KKworcHJvYyBkb3ByZWZzIHt9IHsKKyAgICBnbG9iYWwgbWF4d2lkdGggbWF4Z3JhcGhwY3QgdXNlX3R0ayBOUworICAgIGdsb2JhbCBvbGRwcmVmcyBwcmVmc3RvcCBzaG93bmVhcnRhZ3Mgc2hvd2xvY2FsY2hhbmdlcworICAgIGdsb2JhbCB1aWNvbG9yIGJnY29sb3IgZmdjb2xvciBjdGV4dCBkaWZmY29sb3JzIHNlbGVjdGJnY29sb3IgbWFya2JnY29sb3IKKyAgICBnbG9iYWwgdGFic3RvcCBsaW1pdGRpZmZzIGF1dG9zZWxlY3QgYXV0b3NlbGxlbiBleHRkaWZmdG9vbCBwZXJmaWxlX2F0dHJzCisgICAgZ2xvYmFsIGhpZGVyZW1vdGVzIHdhbnRfdHRrIGhhdmVfdHRrCisKKyAgICBzZXQgdG9wIC5naXRrcHJlZnMKKyAgICBzZXQgcHJlZnN0b3AgJHRvcAorICAgIGlmIHtbd2luZm8gZXhpc3RzICR0b3BdfSB7CisJcmFpc2UgJHRvcAorCXJldHVybgorICAgIH0KKyAgICBmb3JlYWNoIHYge21heHdpZHRoIG1heGdyYXBocGN0IHNob3duZWFydGFncyBzaG93bG9jYWxjaGFuZ2VzIFwKKwkJICAgbGltaXRkaWZmcyB0YWJzdG9wIHBlcmZpbGVfYXR0cnMgaGlkZXJlbW90ZXMgd2FudF90dGt9IHsKKwlzZXQgb2xkcHJlZnMoJHYpIFtzZXQgJHZdCisgICAgfQorICAgIHR0a190b3BsZXZlbCAkdG9wCisgICAgd20gdGl0bGUgJHRvcCBbbWMgIkdpdGsgcHJlZmVyZW5jZXMiXQorICAgIG1ha2VfdHJhbnNpZW50ICR0b3AgLgorCisgICAgaWYge1tzZXQgdXNlX25vdGVib29rIFtleHByIHskdXNlX3R0ayAmJiBbaW5mbyBjb21tYW5kIDo6dHRrOjpub3RlYm9va10gbmUgIiJ9XV19IHsKKwlzZXQgbm90ZWJvb2sgW3R0azo6bm90ZWJvb2sgJHRvcC5ub3RlYm9va10KKyAgICB9IGVsc2UgeworCXNldCBub3RlYm9vayBbJHtOU306OmZyYW1lICR0b3Aubm90ZWJvb2sgLWJvcmRlcndpZHRoIDAgLXJlbGllZiBmbGF0XQorICAgIH0KKworICAgIGxhcHBlbmQgcGFnZXMgW3ByZWZzcGFnZV9nZW5lcmFsICRub3RlYm9va10gW21jICJHZW5lcmFsIl0KKyAgICBsYXBwZW5kIHBhZ2VzIFtwcmVmc3BhZ2VfY29sb3JzICRub3RlYm9va10gW21jICJDb2xvcnMiXQorICAgIGxhcHBlbmQgcGFnZXMgW3ByZWZzcGFnZV9mb250cyAkbm90ZWJvb2tdIFttYyAiRm9udHMiXQorICAgIHNldCBjb2wgMAorICAgIGZvcmVhY2gge3BhZ2UgdGl0bGV9ICRwYWdlcyB7CisJaWYgeyR1c2Vfbm90ZWJvb2t9IHsKKwkgICAgJG5vdGVib29rIGFkZCAkcGFnZSAtdGV4dCAkdGl0bGUKKwl9IGVsc2UgeworCSAgICBzZXQgYnRuIFske05TfTo6YnV0dG9uICRub3RlYm9vay5iX1tzdHJpbmcgbWFwIHsuIFh9ICRwYWdlXSBcCisJCQkgLXRleHQgJHRpdGxlIC1jb21tYW5kIFtsaXN0IHJhaXNlICRwYWdlXV0KKwkgICAgJHBhZ2UgY29uZmlndXJlIC10ZXh0ICR0aXRsZQorCSAgICBncmlkICRidG4gLXJvdyAwIC1jb2x1bW4gW2luY3IgY29sXSAtc3RpY2t5IHcKKwkgICAgZ3JpZCAkcGFnZSAtcm93IDEgLWNvbHVtbiAwIC1zdGlja3kgbmV3cyAtY29sdW1uc3BhbiAxMDAKKwl9CisgICAgfQorCisgICAgaWYgeyEkdXNlX25vdGVib29rfSB7CisJZ3JpZCBjb2x1bW5jb25maWd1cmUgJG5vdGVib29rIDAgLXdlaWdodCAxCisJZ3JpZCByb3djb25maWd1cmUgJG5vdGVib29rIDEgLXdlaWdodCAxCisJcmFpc2UgW2xpbmRleCAkcGFnZXMgMF0KKyAgICB9CisKKyAgICBncmlkICRub3RlYm9vayAtc3RpY2t5IG5ld3MgLXBhZHggMiAtcGFkeSAyCisgICAgZ3JpZCByb3djb25maWd1cmUgJHRvcCAwIC13ZWlnaHQgMQorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AgMCAtd2VpZ2h0IDEKKworICAgICR7TlN9OjpmcmFtZSAkdG9wLmJ1dHMKKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5vayAtdGV4dCBbbWMgIk9LIl0gLWNvbW1hbmQgcHJlZnNvayAtZGVmYXVsdCBhY3RpdmUKKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5jYW4gLXRleHQgW21jICJDYW5jZWwiXSAtY29tbWFuZCBwcmVmc2NhbiAtZGVmYXVsdCBub3JtYWwKKyAgICBiaW5kICR0b3AgPEtleS1SZXR1cm4+IHByZWZzb2sKKyAgICBiaW5kICR0b3AgPEtleS1Fc2NhcGU+IHByZWZzY2FuCisgICAgZ3JpZCAkdG9wLmJ1dHMub2sgJHRvcC5idXRzLmNhbgorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAwIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDEgLXdlaWdodCAxIC11bmlmb3JtIGEKKyAgICBncmlkICR0b3AuYnV0cyAtIC0gLXBhZHkgMTAgLXN0aWNreSBldworICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AgMiAtd2VpZ2h0IDEKKyAgICBiaW5kICR0b3AgPFZpc2liaWxpdHk+IFtsaXN0IGZvY3VzICR0b3AuYnV0cy5va10KK30KKworcHJvYyBjaG9vc2VfZXh0ZGlmZiB7fSB7CisgICAgZ2xvYmFsIGV4dGRpZmZ0b29sCisKKyAgICBzZXQgcHJvZyBbdGtfZ2V0T3BlbkZpbGUgLXRpdGxlIFttYyAiRXh0ZXJuYWwgZGlmZiB0b29sIl0gLW11bHRpcGxlIGZhbHNlXQorICAgIGlmIHskcHJvZyBuZSB7fX0geworCXNldCBleHRkaWZmdG9vbCAkcHJvZworICAgIH0KK30KKworcHJvYyBjaG9vc2Vjb2xvciB7diB2aSB3IHggY21kfSB7CisgICAgZ2xvYmFsICR2CisKKyAgICBzZXQgYyBbdGtfY2hvb3NlQ29sb3IgLWluaXRpYWxjb2xvciBbbGluZGV4IFtzZXQgJHZdICR2aV0gXAorCSAgICAgICAtdGl0bGUgW21jICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIiAkeF1dCisgICAgaWYgeyRjIGVxIHt9fSByZXR1cm4KKyAgICAkdyBjb25mIC1iYWNrZ3JvdW5kICRjCisgICAgbHNldCAkdiAkdmkgJGMKKyAgICBldmFsICRjbWQgJGMKK30KKworcHJvYyBzZXRzZWxiZyB7Y30geworICAgIGdsb2JhbCBiZ2xpc3QgY2ZsaXN0CisgICAgZm9yZWFjaCB3ICRiZ2xpc3QgeworCWlmIHtbd2luZm8gZXhpc3RzICR3XX0geworCSAgICAkdyBjb25maWd1cmUgLXNlbGVjdGJhY2tncm91bmQgJGMKKwl9CisgICAgfQorICAgICRjZmxpc3QgdGFnIGNvbmZpZ3VyZSBoaWdobGlnaHQgXAorCS1iYWNrZ3JvdW5kIFskY2ZsaXN0IGNnZXQgLXNlbGVjdGJhY2tncm91bmRdCisgICAgYWxsY2FudnMgaXRlbWNvbmYgc2Vjc2VsIC1maWxsICRjCit9CisKKyMgVGhpcyBzZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFuZCB0aGUgY29sb3Igc2NoZW1lIGZvciB0aGUgd2hvbGUgVUkuCisjIEZvciBzb21lIHJlYXNvbiwgdGtfc2V0UGFsZXR0ZSBjaG9vc2VzIGEgbmFzdHkgZGFyayByZWQgZm9yIHNlbGVjdENvbG9yCisjIGlmIHdlIGRvbid0IHNwZWNpZnkgb25lIG91cnNlbHZlcywgd2hpY2ggbWFrZXMgdGhlIGNoZWNrYnV0dG9ucyBhbmQKKyMgcmFkaW9idXR0b25zIGxvb2sgYmFkLiAgVGhpcyBjaG9vc2VzIHdoaXRlIGZvciBzZWxlY3RDb2xvciBpZiB0aGUKKyMgYmFja2dyb3VuZCBjb2xvciBpcyBsaWdodCwgb3IgYmxhY2sgaWYgaXQgaXMgZGFyay4KK3Byb2Mgc2V0dWkge2N9IHsKKyAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgIndpbjMyIn0geyByZXR1cm4gfQorICAgIHNldCBiZyBbd2luZm8gcmdiIC4gJGNdCisgICAgc2V0IHNlbGMgYmxhY2sKKyAgICBpZiB7W2xpbmRleCAkYmcgMF0gKyAxLjUgKiBbbGluZGV4ICRiZyAxXSArIDAuNSAqIFtsaW5kZXggJGJnIDJdID4gMTAwMDAwfSB7CisJc2V0IHNlbGMgd2hpdGUKKyAgICB9CisgICAgdGtfc2V0UGFsZXR0ZSBiYWNrZ3JvdW5kICRjIHNlbGVjdENvbG9yICRzZWxjCit9CisKK3Byb2Mgc2V0Ymcge2N9IHsKKyAgICBnbG9iYWwgYmdsaXN0CisKKyAgICBmb3JlYWNoIHcgJGJnbGlzdCB7CisJaWYge1t3aW5mbyBleGlzdHMgJHddfSB7CisJICAgICR3IGNvbmYgLWJhY2tncm91bmQgJGMKKwl9CisgICAgfQorfQorCitwcm9jIHNldGZnIHtjfSB7CisgICAgZ2xvYmFsIGZnbGlzdCBjYW52CisKKyAgICBmb3JlYWNoIHcgJGZnbGlzdCB7CisJaWYge1t3aW5mbyBleGlzdHMgJHddfSB7CisJICAgICR3IGNvbmYgLWZvcmVncm91bmQgJGMKKwl9CisgICAgfQorICAgIGFsbGNhbnZzIGl0ZW1jb25mIHRleHQgLWZpbGwgJGMKKyAgICAkY2FudiBpdGVtY29uZiBjaXJjbGUgLW91dGxpbmUgJGMKKyAgICAkY2FudiBpdGVtY29uZiBtYXJraWQgLW91dGxpbmUgJGMKK30KKworcHJvYyBwcmVmc2NhbiB7fSB7CisgICAgZ2xvYmFsIG9sZHByZWZzIHByZWZzdG9wCisKKyAgICBmb3JlYWNoIHYge21heHdpZHRoIG1heGdyYXBocGN0IHNob3duZWFydGFncyBzaG93bG9jYWxjaGFuZ2VzIFwKKwkJICAgbGltaXRkaWZmcyB0YWJzdG9wIHBlcmZpbGVfYXR0cnMgaGlkZXJlbW90ZXMgd2FudF90dGt9IHsKKwlnbG9iYWwgJHYKKwlzZXQgJHYgJG9sZHByZWZzKCR2KQorICAgIH0KKyAgICBjYXRjaCB7ZGVzdHJveSAkcHJlZnN0b3B9CisgICAgdW5zZXQgcHJlZnN0b3AKKyAgICBmb250Y2FuCit9CisKK3Byb2MgcHJlZnNvayB7fSB7CisgICAgZ2xvYmFsIG1heHdpZHRoIG1heGdyYXBocGN0CisgICAgZ2xvYmFsIG9sZHByZWZzIHByZWZzdG9wIHNob3duZWFydGFncyBzaG93bG9jYWxjaGFuZ2VzCisgICAgZ2xvYmFsIGZvbnRwcmVmIG1haW5mb250IHRleHRmb250IHVpZm9udAorICAgIGdsb2JhbCBsaW1pdGRpZmZzIHRyZWVkaWZmcyBwZXJmaWxlX2F0dHJzCisgICAgZ2xvYmFsIGhpZGVyZW1vdGVzCisKKyAgICBjYXRjaCB7ZGVzdHJveSAkcHJlZnN0b3B9CisgICAgdW5zZXQgcHJlZnN0b3AKKyAgICBmb250Y2FuCisgICAgc2V0IGZvbnRjaGFuZ2VkIDAKKyAgICBpZiB7JG1haW5mb250IG5lICRmb250cHJlZihtYWluZm9udCl9IHsKKwlzZXQgbWFpbmZvbnQgJGZvbnRwcmVmKG1haW5mb250KQorCXBhcnNlZm9udCBtYWluZm9udCAkbWFpbmZvbnQKKwlldmFsIGZvbnQgY29uZmlndXJlIG1haW5mb250IFtmb250ZmxhZ3MgbWFpbmZvbnRdCisJZXZhbCBmb250IGNvbmZpZ3VyZSBtYWluZm9udGJvbGQgW2ZvbnRmbGFncyBtYWluZm9udCAxXQorCXNldGNvb3JkcworCXNldCBmb250Y2hhbmdlZCAxCisgICAgfQorICAgIGlmIHskdGV4dGZvbnQgbmUgJGZvbnRwcmVmKHRleHRmb250KX0geworCXNldCB0ZXh0Zm9udCAkZm9udHByZWYodGV4dGZvbnQpCisJcGFyc2Vmb250IHRleHRmb250ICR0ZXh0Zm9udAorCWV2YWwgZm9udCBjb25maWd1cmUgdGV4dGZvbnQgW2ZvbnRmbGFncyB0ZXh0Zm9udF0KKwlldmFsIGZvbnQgY29uZmlndXJlIHRleHRmb250Ym9sZCBbZm9udGZsYWdzIHRleHRmb250IDFdCisgICAgfQorICAgIGlmIHskdWlmb250IG5lICRmb250cHJlZih1aWZvbnQpfSB7CisJc2V0IHVpZm9udCAkZm9udHByZWYodWlmb250KQorCXBhcnNlZm9udCB1aWZvbnQgJHVpZm9udAorCWV2YWwgZm9udCBjb25maWd1cmUgdWlmb250IFtmb250ZmxhZ3MgdWlmb250XQorICAgIH0KKyAgICBzZXR0YWJzCisgICAgaWYgeyRzaG93bG9jYWxjaGFuZ2VzICE9ICRvbGRwcmVmcyhzaG93bG9jYWxjaGFuZ2VzKX0geworCWlmIHskc2hvd2xvY2FsY2hhbmdlc30geworCSAgICBkb3Nob3dsb2NhbGNoYW5nZXMKKwl9IGVsc2UgeworCSAgICBkb2hpZGVsb2NhbGNoYW5nZXMKKwl9CisgICAgfQorICAgIGlmIHskbGltaXRkaWZmcyAhPSAkb2xkcHJlZnMobGltaXRkaWZmcykgfHwKKwkoJHBlcmZpbGVfYXR0cnMgJiYgISRvbGRwcmVmcyhwZXJmaWxlX2F0dHJzKSl9IHsKKwkjIHRyZWVkaWZmcyBlbGVtZW50cyBhcmUgbGltaXRlZCBieSBwYXRoOworCSMgd29uJ3QgaGF2ZSBlbmNvZGluZ3MgY2FjaGVkIGlmIHBlcmZpbGVfYXR0cnMgd2FzIGp1c3QgdHVybmVkIG9uCisJdW5zZXQgLW5vY29tcGxhaW4gdHJlZWRpZmZzCisgICAgfQorICAgIGlmIHskZm9udGNoYW5nZWQgfHwgJG1heHdpZHRoICE9ICRvbGRwcmVmcyhtYXh3aWR0aCkKKwl8fCAkbWF4Z3JhcGhwY3QgIT0gJG9sZHByZWZzKG1heGdyYXBocGN0KX0geworCXJlZGlzcGxheQorICAgIH0gZWxzZWlmIHskc2hvd25lYXJ0YWdzICE9ICRvbGRwcmVmcyhzaG93bmVhcnRhZ3MpIHx8CisJICAkbGltaXRkaWZmcyAhPSAkb2xkcHJlZnMobGltaXRkaWZmcyl9IHsKKwlyZXNlbGVjdGxpbmUKKyAgICB9CisgICAgaWYgeyRoaWRlcmVtb3RlcyAhPSAkb2xkcHJlZnMoaGlkZXJlbW90ZXMpfSB7CisJcmVyZWFkcmVmcworICAgIH0KK30KKworcHJvYyBmb3JtYXRkYXRlIHtkfSB7CisgICAgZ2xvYmFsIGRhdGV0aW1lZm9ybWF0CisgICAgaWYgeyRkIG5lIHt9fSB7CisJIyBJZiAkZGF0ZXRpbWVmb3JtYXQgaW5jbHVkZXMgYSB0aW1lem9uZSwgZGlzcGxheSBpbiB0aGUKKwkjIHRpbWV6b25lIG9mIHRoZSBhcmd1bWVudC4gIE90aGVyd2lzZSwgZGlzcGxheSBpbiBsb2NhbCB0aW1lLgorCWlmIHtbc3RyaW5nIG1hdGNoIHsqJVt6Wl0qfSAkZGF0ZXRpbWVmb3JtYXRdfSB7CisJICAgIGlmIHtbY2F0Y2gge3NldCBkIFtjbG9jayBmb3JtYXQgW2xpbmRleCAkZCAwXSAtdGltZXpvbmUgW2xpbmRleCAkZCAxXSAtZm9ybWF0ICRkYXRldGltZWZvcm1hdF19XX0geworCQkjIFRjbCA8IDguNSBkb2VzIG5vdCBzdXBwb3J0IC10aW1lem9uZS4gIEVtdWxhdGUgaXQgYnkKKwkJIyBzZXR0aW5nIFRaIChlLmcuIFRaPTwtMDQzMD4rMDQ6MzApLgorCQlnbG9iYWwgZW52CisJCWlmIHtbaW5mbyBleGlzdHMgZW52KFRaKV19IHsKKwkJICAgIHNldCBzYXZlZFRaICRlbnYoVFopCisJCX0KKwkJc2V0IHpvbmUgW2xpbmRleCAkZCAxXQorCQlzZXQgc2lnbiBbc3RyaW5nIG1hcCB7KyAtIC0gK30gW3N0cmluZyBpbmRleCAkem9uZSAwXV0KKwkJc2V0IGVudihUWikgPCR6b25lPiRzaWduW3N0cmluZyByYW5nZSAkem9uZSAxIDJdOltzdHJpbmcgcmFuZ2UgJHpvbmUgMyA0XQorCQlzZXQgZCBbY2xvY2sgZm9ybWF0IFtsaW5kZXggJGQgMF0gLWZvcm1hdCAkZGF0ZXRpbWVmb3JtYXRdCisJCWlmIHtbaW5mbyBleGlzdHMgc2F2ZWRUWl19IHsKKwkJICAgIHNldCBlbnYoVFopICRzYXZlZFRaCisJCX0gZWxzZSB7CisJCSAgICB1bnNldCBlbnYoVFopCisJCX0KKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHNldCBkIFtjbG9jayBmb3JtYXQgW2xpbmRleCAkZCAwXSAtZm9ybWF0ICRkYXRldGltZWZvcm1hdF0KKwl9CisgICAgfQorICAgIHJldHVybiAkZAorfQorCisjIFRoaXMgbGlzdCBvZiBlbmNvZGluZyBuYW1lcyBhbmQgYWxpYXNlcyBpcyBkaXN0aWxsZWQgZnJvbQorIyBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzLgorIyBOb3QgYWxsIG9mIHRoZW0gYXJlIHN1cHBvcnRlZCBieSBUY2wuCitzZXQgZW5jb2RpbmdfYWxpYXNlcyB7CisgICAgeyBBTlNJX1gzLjQtMTk2OCBpc28taXItNiBBTlNJX1gzLjQtMTk4NiBJU09fNjQ2LmlydjoxOTkxIEFTQ0lJCisgICAgICBJU082NDYtVVMgVVMtQVNDSUkgdXMgSUJNMzY3IGNwMzY3IGNzQVNDSUkgfQorICAgIHsgSVNPLTEwNjQ2LVVURi0xIGNzSVNPMTA2NDZVVEYxIH0KKyAgICB7IElTT182NDYuYmFzaWM6MTk4MyByZWYgY3NJU082NDZiYXNpYzE5ODMgfQorICAgIHsgSU5WQVJJQU5UIGNzSU5WQVJJQU5UIH0KKyAgICB7IElTT182NDYuaXJ2OjE5ODMgaXNvLWlyLTIgaXJ2IGNzSVNPMkludGxSZWZWZXJzaW9uIH0KKyAgICB7IEJTXzQ3MzAgaXNvLWlyLTQgSVNPNjQ2LUdCIGdiIHVrIGNzSVNPNFVuaXRlZEtpbmdkb20gfQorICAgIHsgTkFUUy1TRUZJIGlzby1pci04LTEgY3NOQVRTU0VGSSB9CisgICAgeyBOQVRTLVNFRkktQUREIGlzby1pci04LTIgY3NOQVRTU0VGSUFERCB9CisgICAgeyBOQVRTLURBTk8gaXNvLWlyLTktMSBjc05BVFNEQU5PIH0KKyAgICB7IE5BVFMtREFOTy1BREQgaXNvLWlyLTktMiBjc05BVFNEQU5PQUREIH0KKyAgICB7IFNFTl84NTAyMDBfQiBpc28taXItMTAgRkkgSVNPNjQ2LUZJIElTTzY0Ni1TRSBzZSBjc0lTTzEwU3dlZGlzaCB9CisgICAgeyBTRU5fODUwMjAwX0MgaXNvLWlyLTExIElTTzY0Ni1TRTIgc2UyIGNzSVNPMTFTd2VkaXNoRm9yTmFtZXMgfQorICAgIHsgS1NfQ181NjAxLTE5ODcgaXNvLWlyLTE0OSBLU19DXzU2MDEtMTk4OSBLU0NfNTYwMSBrb3JlYW4gY3NLU0M1NjAxMTk4NyB9CisgICAgeyBJU08tMjAyMi1LUiBjc0lTTzIwMjJLUiB9CisgICAgeyBFVUMtS1IgY3NFVUNLUiB9CisgICAgeyBJU08tMjAyMi1KUCBjc0lTTzIwMjJKUCB9CisgICAgeyBJU08tMjAyMi1KUC0yIGNzSVNPMjAyMkpQMiB9CisgICAgeyBKSVNfQzYyMjAtMTk2OS1qcCBKSVNfQzYyMjAtMTk2OSBpc28taXItMTMga2F0YWthbmEgeDAyMDEtNworICAgICAgY3NJU08xM0pJU0M2MjIwanAgfQorICAgIHsgSklTX0M2MjIwLTE5Njktcm8gaXNvLWlyLTE0IGpwIElTTzY0Ni1KUCBjc0lTTzE0SklTQzYyMjBybyB9CisgICAgeyBJVCBpc28taXItMTUgSVNPNjQ2LUlUIGNzSVNPMTVJdGFsaWFuIH0KKyAgICB7IFBUIGlzby1pci0xNiBJU082NDYtUFQgY3NJU08xNlBvcnR1Z3Vlc2UgfQorICAgIHsgRVMgaXNvLWlyLTE3IElTTzY0Ni1FUyBjc0lTTzE3U3BhbmlzaCB9CisgICAgeyBncmVlazctb2xkIGlzby1pci0xOCBjc0lTTzE4R3JlZWs3T2xkIH0KKyAgICB7IGxhdGluLWdyZWVrIGlzby1pci0xOSBjc0lTTzE5TGF0aW5HcmVlayB9CisgICAgeyBESU5fNjYwMDMgaXNvLWlyLTIxIGRlIElTTzY0Ni1ERSBjc0lTTzIxR2VybWFuIH0KKyAgICB7IE5GX1pfNjItMDEwXygxOTczKSBpc28taXItMjUgSVNPNjQ2LUZSMSBjc0lTTzI1RnJlbmNoIH0KKyAgICB7IExhdGluLWdyZWVrLTEgaXNvLWlyLTI3IGNzSVNPMjdMYXRpbkdyZWVrMSB9CisgICAgeyBJU09fNTQyNyBpc28taXItMzcgY3NJU081NDI3Q3lyaWxsaWMgfQorICAgIHsgSklTX0M2MjI2LTE5NzggaXNvLWlyLTQyIGNzSVNPNDJKSVNDNjIyNjE5NzggfQorICAgIHsgQlNfdmlld2RhdGEgaXNvLWlyLTQ3IGNzSVNPNDdCU1ZpZXdkYXRhIH0KKyAgICB7IElOSVMgaXNvLWlyLTQ5IGNzSVNPNDlJTklTIH0KKyAgICB7IElOSVMtOCBpc28taXItNTAgY3NJU081MElOSVM4IH0KKyAgICB7IElOSVMtY3lyaWxsaWMgaXNvLWlyLTUxIGNzSVNPNTFJTklTQ3lyaWxsaWMgfQorICAgIHsgSVNPXzU0Mjc6MTk4MSBpc28taXItNTQgSVNPNTQyN0N5cmlsbGljMTk4MSB9CisgICAgeyBJU09fNTQyODoxOTgwIGlzby1pci01NSBjc0lTTzU0MjhHcmVlayB9CisgICAgeyBHQl8xOTg4LTgwIGlzby1pci01NyBjbiBJU082NDYtQ04gY3NJU081N0dCMTk4OCB9CisgICAgeyBHQl8yMzEyLTgwIGlzby1pci01OCBjaGluZXNlIGNzSVNPNThHQjIzMTI4MCB9CisgICAgeyBOU180NTUxLTEgaXNvLWlyLTYwIElTTzY0Ni1OTyBubyBjc0lTTzYwRGFuaXNoTm9yd2VnaWFuCisgICAgICBjc0lTTzYwTm9yd2VnaWFuMSB9CisgICAgeyBOU180NTUxLTIgSVNPNjQ2LU5PMiBpc28taXItNjEgbm8yIGNzSVNPNjFOb3J3ZWdpYW4yIH0KKyAgICB7IE5GX1pfNjItMDEwIGlzby1pci02OSBJU082NDYtRlIgZnIgY3NJU082OUZyZW5jaCB9CisgICAgeyB2aWRlb3RleC1zdXBwbCBpc28taXItNzAgY3NJU083MFZpZGVvdGV4U3VwcDEgfQorICAgIHsgUFQyIGlzby1pci04NCBJU082NDYtUFQyIGNzSVNPODRQb3J0dWd1ZXNlMiB9CisgICAgeyBFUzIgaXNvLWlyLTg1IElTTzY0Ni1FUzIgY3NJU084NVNwYW5pc2gyIH0KKyAgICB7IE1TWl83Nzk1LjMgaXNvLWlyLTg2IElTTzY0Ni1IVSBodSBjc0lTTzg2SHVuZ2FyaWFuIH0KKyAgICB7IEpJU19DNjIyNi0xOTgzIGlzby1pci04NyB4MDIwOCBKSVNfWDAyMDgtMTk4MyBjc0lTTzg3SklTWDAyMDggfQorICAgIHsgZ3JlZWs3IGlzby1pci04OCBjc0lTTzg4R3JlZWs3IH0KKyAgICB7IEFTTU9fNDQ5IElTT185MDM2IGFyYWJpYzcgaXNvLWlyLTg5IGNzSVNPODlBU01PNDQ5IH0KKyAgICB7IGlzby1pci05MCBjc0lTTzkwIH0KKyAgICB7IEpJU19DNjIyOS0xOTg0LWEgaXNvLWlyLTkxIGpwLW9jci1hIGNzSVNPOTFKSVNDNjIyOTE5ODRhIH0KKyAgICB7IEpJU19DNjIyOS0xOTg0LWIgaXNvLWlyLTkyIElTTzY0Ni1KUC1PQ1ItQiBqcC1vY3ItYgorICAgICAgY3NJU085MkpJU0M2Mjk5MTk4NGIgfQorICAgIHsgSklTX0M2MjI5LTE5ODQtYi1hZGQgaXNvLWlyLTkzIGpwLW9jci1iLWFkZCBjc0lTTzkzSklTNjIyOTE5ODRiYWRkIH0KKyAgICB7IEpJU19DNjIyOS0xOTg0LWhhbmQgaXNvLWlyLTk0IGpwLW9jci1oYW5kIGNzSVNPOTRKSVM2MjI5MTk4NGhhbmQgfQorICAgIHsgSklTX0M2MjI5LTE5ODQtaGFuZC1hZGQgaXNvLWlyLTk1IGpwLW9jci1oYW5kLWFkZAorICAgICAgY3NJU085NUpJUzYyMjkxOTg0aGFuZGFkZCB9CisgICAgeyBKSVNfQzYyMjktMTk4NC1rYW5hIGlzby1pci05NiBjc0lTTzk2SklTQzYyMjkxOTg0a2FuYSB9CisgICAgeyBJU09fMjAzMy0xOTgzIGlzby1pci05OCBlMTNiIGNzSVNPMjAzMyB9CisgICAgeyBBTlNJX1gzLjExMC0xOTgzIGlzby1pci05OSBDU0FfVDUwMC0xOTgzIE5BUExQUyBjc0lTTzk5TkFQTFBTIH0KKyAgICB7IElTT184ODU5LTE6MTk4NyBpc28taXItMTAwIElTT184ODU5LTEgSVNPLTg4NTktMSBsYXRpbjEgbDEgSUJNODE5CisgICAgICBDUDgxOSBjc0lTT0xhdGluMSB9CisgICAgeyBJU09fODg1OS0yOjE5ODcgaXNvLWlyLTEwMSBJU09fODg1OS0yIElTTy04ODU5LTIgbGF0aW4yIGwyIGNzSVNPTGF0aW4yIH0KKyAgICB7IFQuNjEtN2JpdCBpc28taXItMTAyIGNzSVNPMTAyVDYxN2JpdCB9CisgICAgeyBULjYxLThiaXQgVC42MSBpc28taXItMTAzIGNzSVNPMTAzVDYxOGJpdCB9CisgICAgeyBJU09fODg1OS0zOjE5ODggaXNvLWlyLTEwOSBJU09fODg1OS0zIElTTy04ODU5LTMgbGF0aW4zIGwzIGNzSVNPTGF0aW4zIH0KKyAgICB7IElTT184ODU5LTQ6MTk4OCBpc28taXItMTEwIElTT184ODU5LTQgSVNPLTg4NTktNCBsYXRpbjQgbDQgY3NJU09MYXRpbjQgfQorICAgIHsgRUNNQS1jeXJpbGxpYyBpc28taXItMTExIEtPSTgtRSBjc0lTTzExMUVDTUFDeXJpbGxpYyB9CisgICAgeyBDU0FfWjI0My40LTE5ODUtMSBpc28taXItMTIxIElTTzY0Ni1DQSBjc2E3LTEgY2EgY3NJU08xMjFDYW5hZGlhbjEgfQorICAgIHsgQ1NBX1oyNDMuNC0xOTg1LTIgaXNvLWlyLTEyMiBJU082NDYtQ0EyIGNzYTctMiBjc0lTTzEyMkNhbmFkaWFuMiB9CisgICAgeyBDU0FfWjI0My40LTE5ODUtZ3IgaXNvLWlyLTEyMyBjc0lTTzEyM0NTQVoyNDM0MTk4NWdyIH0KKyAgICB7IElTT184ODU5LTY6MTk4NyBpc28taXItMTI3IElTT184ODU5LTYgSVNPLTg4NTktNiBFQ01BLTExNCBBU01PLTcwOAorICAgICAgYXJhYmljIGNzSVNPTGF0aW5BcmFiaWMgfQorICAgIHsgSVNPXzg4NTktNi1FIGNzSVNPODg1OTZFIElTTy04ODU5LTYtRSB9CisgICAgeyBJU09fODg1OS02LUkgY3NJU084ODU5NkkgSVNPLTg4NTktNi1JIH0KKyAgICB7IElTT184ODU5LTc6MTk4NyBpc28taXItMTI2IElTT184ODU5LTcgSVNPLTg4NTktNyBFTE9UXzkyOCBFQ01BLTExOAorICAgICAgZ3JlZWsgZ3JlZWs4IGNzSVNPTGF0aW5HcmVlayB9CisgICAgeyBULjEwMS1HMiBpc28taXItMTI4IGNzSVNPMTI4VDEwMUcyIH0KKyAgICB7IElTT184ODU5LTg6MTk4OCBpc28taXItMTM4IElTT184ODU5LTggSVNPLTg4NTktOCBoZWJyZXcKKyAgICAgIGNzSVNPTGF0aW5IZWJyZXcgfQorICAgIHsgSVNPXzg4NTktOC1FIGNzSVNPODg1OThFIElTTy04ODU5LTgtRSB9CisgICAgeyBJU09fODg1OS04LUkgY3NJU084ODU5OEkgSVNPLTg4NTktOC1JIH0KKyAgICB7IENTTl8zNjkxMDMgaXNvLWlyLTEzOSBjc0lTTzEzOUNTTjM2OTEwMyB9CisgICAgeyBKVVNfSS5CMS4wMDIgaXNvLWlyLTE0MSBJU082NDYtWVUganMgeXUgY3NJU08xNDFKVVNJQjEwMDIgfQorICAgIHsgSVNPXzY5MzctMi1hZGQgaXNvLWlyLTE0MiBjc0lTT1RleHRDb21tIH0KKyAgICB7IElFQ19QMjctMSBpc28taXItMTQzIGNzSVNPMTQzSUVDUDI3MSB9CisgICAgeyBJU09fODg1OS01OjE5ODggaXNvLWlyLTE0NCBJU09fODg1OS01IElTTy04ODU5LTUgY3lyaWxsaWMKKyAgICAgIGNzSVNPTGF0aW5DeXJpbGxpYyB9CisgICAgeyBKVVNfSS5CMS4wMDMtc2VyYiBpc28taXItMTQ2IHNlcmJpYW4gY3NJU08xNDZTZXJiaWFuIH0KKyAgICB7IEpVU19JLkIxLjAwMy1tYWMgbWFjZWRvbmlhbiBpc28taXItMTQ3IGNzSVNPMTQ3TWFjZWRvbmlhbiB9CisgICAgeyBJU09fODg1OS05OjE5ODkgaXNvLWlyLTE0OCBJU09fODg1OS05IElTTy04ODU5LTkgbGF0aW41IGw1IGNzSVNPTGF0aW41IH0KKyAgICB7IGdyZWVrLWNjaXR0IGlzby1pci0xNTAgY3NJU08xNTAgY3NJU08xNTBHcmVla0NDSVRUIH0KKyAgICB7IE5DX05DMDAtMTA6ODEgY3ViYSBpc28taXItMTUxIElTTzY0Ni1DVSBjc0lTTzE1MUN1YmEgfQorICAgIHsgSVNPXzY5MzctMi0yNSBpc28taXItMTUyIGNzSVNPNjkzN0FkZCB9CisgICAgeyBHT1NUXzE5NzY4LTc0IFNUX1NFVl8zNTgtODggaXNvLWlyLTE1MyBjc0lTTzE1M0dPU1QxOTc2ODc0IH0KKyAgICB7IElTT184ODU5LXN1cHAgaXNvLWlyLTE1NCBsYXRpbjEtMi01IGNzSVNPODg1OVN1cHAgfQorICAgIHsgSVNPXzEwMzY3LWJveCBpc28taXItMTU1IGNzSVNPMTAzNjdCb3ggfQorICAgIHsgSVNPLTg4NTktMTAgaXNvLWlyLTE1NyBsNiBJU09fODg1OS0xMDoxOTkyIGNzSVNPTGF0aW42IGxhdGluNiB9CisgICAgeyBsYXRpbi1sYXAgbGFwIGlzby1pci0xNTggY3NJU08xNThMYXAgfQorICAgIHsgSklTX1gwMjEyLTE5OTAgeDAyMTIgaXNvLWlyLTE1OSBjc0lTTzE1OUpJU1gwMjEyMTk5MCB9CisgICAgeyBEU18yMDg5IERTMjA4OSBJU082NDYtREsgZGsgY3NJU082NDZEYW5pc2ggfQorICAgIHsgdXMtZGsgY3NVU0RLIH0KKyAgICB7IGRrLXVzIGNzREtVUyB9CisgICAgeyBKSVNfWDAyMDEgWDAyMDEgY3NIYWxmV2lkdGhLYXRha2FuYSB9CisgICAgeyBLU0M1NjM2IElTTzY0Ni1LUiBjc0tTQzU2MzYgfQorICAgIHsgSVNPLTEwNjQ2LVVDUy0yIGNzVW5pY29kZSB9CisgICAgeyBJU08tMTA2NDYtVUNTLTQgY3NVQ1M0IH0KKyAgICB7IERFQy1NQ1MgZGVjIGNzREVDTUNTIH0KKyAgICB7IGhwLXJvbWFuOCByb21hbjggcjggY3NIUFJvbWFuOCB9CisgICAgeyBtYWNpbnRvc2ggbWFjIGNzTWFjaW50b3NoIH0KKyAgICB7IElCTTAzNyBjcDAzNyBlYmNkaWMtY3AtdXMgZWJjZGljLWNwLWNhIGViY2RpYy1jcC13dCBlYmNkaWMtY3AtbmwKKyAgICAgIGNzSUJNMDM3IH0KKyAgICB7IElCTTAzOCBFQkNESUMtSU5UIGNwMDM4IGNzSUJNMDM4IH0KKyAgICB7IElCTTI3MyBDUDI3MyBjc0lCTTI3MyB9CisgICAgeyBJQk0yNzQgRUJDRElDLUJFIENQMjc0IGNzSUJNMjc0IH0KKyAgICB7IElCTTI3NSBFQkNESUMtQlIgY3AyNzUgY3NJQk0yNzUgfQorICAgIHsgSUJNMjc3IEVCQ0RJQy1DUC1ESyBFQkNESUMtQ1AtTk8gY3NJQk0yNzcgfQorICAgIHsgSUJNMjc4IENQMjc4IGViY2RpYy1jcC1maSBlYmNkaWMtY3Atc2UgY3NJQk0yNzggfQorICAgIHsgSUJNMjgwIENQMjgwIGViY2RpYy1jcC1pdCBjc0lCTTI4MCB9CisgICAgeyBJQk0yODEgRUJDRElDLUpQLUUgY3AyODEgY3NJQk0yODEgfQorICAgIHsgSUJNMjg0IENQMjg0IGViY2RpYy1jcC1lcyBjc0lCTTI4NCB9CisgICAgeyBJQk0yODUgQ1AyODUgZWJjZGljLWNwLWdiIGNzSUJNMjg1IH0KKyAgICB7IElCTTI5MCBjcDI5MCBFQkNESUMtSlAta2FuYSBjc0lCTTI5MCB9CisgICAgeyBJQk0yOTcgY3AyOTcgZWJjZGljLWNwLWZyIGNzSUJNMjk3IH0KKyAgICB7IElCTTQyMCBjcDQyMCBlYmNkaWMtY3AtYXIxIGNzSUJNNDIwIH0KKyAgICB7IElCTTQyMyBjcDQyMyBlYmNkaWMtY3AtZ3IgY3NJQk00MjMgfQorICAgIHsgSUJNNDI0IGNwNDI0IGViY2RpYy1jcC1oZSBjc0lCTTQyNCB9CisgICAgeyBJQk00MzcgY3A0MzcgNDM3IGNzUEM4Q29kZVBhZ2U0MzcgfQorICAgIHsgSUJNNTAwIENQNTAwIGViY2RpYy1jcC1iZSBlYmNkaWMtY3AtY2ggY3NJQk01MDAgfQorICAgIHsgSUJNNzc1IGNwNzc1IGNzUEM3NzVCYWx0aWMgfQorICAgIHsgSUJNODUwIGNwODUwIDg1MCBjc1BDODUwTXVsdGlsaW5ndWFsIH0KKyAgICB7IElCTTg1MSBjcDg1MSA4NTEgY3NJQk04NTEgfQorICAgIHsgSUJNODUyIGNwODUyIDg1MiBjc1BDcDg1MiB9CisgICAgeyBJQk04NTUgY3A4NTUgODU1IGNzSUJNODU1IH0KKyAgICB7IElCTTg1NyBjcDg1NyA4NTcgY3NJQk04NTcgfQorICAgIHsgSUJNODYwIGNwODYwIDg2MCBjc0lCTTg2MCB9CisgICAgeyBJQk04NjEgY3A4NjEgODYxIGNwLWlzIGNzSUJNODYxIH0KKyAgICB7IElCTTg2MiBjcDg2MiA4NjIgY3NQQzg2MkxhdGluSGVicmV3IH0KKyAgICB7IElCTTg2MyBjcDg2MyA4NjMgY3NJQk04NjMgfQorICAgIHsgSUJNODY0IGNwODY0IGNzSUJNODY0IH0KKyAgICB7IElCTTg2NSBjcDg2NSA4NjUgY3NJQk04NjUgfQorICAgIHsgSUJNODY2IGNwODY2IDg2NiBjc0lCTTg2NiB9CisgICAgeyBJQk04NjggQ1A4NjggY3AtYXIgY3NJQk04NjggfQorICAgIHsgSUJNODY5IGNwODY5IDg2OSBjcC1nciBjc0lCTTg2OSB9CisgICAgeyBJQk04NzAgQ1A4NzAgZWJjZGljLWNwLXJvZWNlIGViY2RpYy1jcC15dSBjc0lCTTg3MCB9CisgICAgeyBJQk04NzEgQ1A4NzEgZWJjZGljLWNwLWlzIGNzSUJNODcxIH0KKyAgICB7IElCTTg4MCBjcDg4MCBFQkNESUMtQ3lyaWxsaWMgY3NJQk04ODAgfQorICAgIHsgSUJNODkxIGNwODkxIGNzSUJNODkxIH0KKyAgICB7IElCTTkwMyBjcDkwMyBjc0lCTTkwMyB9CisgICAgeyBJQk05MDQgY3A5MDQgOTA0IGNzSUJCTTkwNCB9CisgICAgeyBJQk05MDUgQ1A5MDUgZWJjZGljLWNwLXRyIGNzSUJNOTA1IH0KKyAgICB7IElCTTkxOCBDUDkxOCBlYmNkaWMtY3AtYXIyIGNzSUJNOTE4IH0KKyAgICB7IElCTTEwMjYgQ1AxMDI2IGNzSUJNMTAyNiB9CisgICAgeyBFQkNESUMtQVQtREUgY3NJQk1FQkNESUNBVERFIH0KKyAgICB7IEVCQ0RJQy1BVC1ERS1BIGNzRUJDRElDQVRERUEgfQorICAgIHsgRUJDRElDLUNBLUZSIGNzRUJDRElDQ0FGUiB9CisgICAgeyBFQkNESUMtREstTk8gY3NFQkNESUNES05PIH0KKyAgICB7IEVCQ0RJQy1ESy1OTy1BIGNzRUJDRElDREtOT0EgfQorICAgIHsgRUJDRElDLUZJLVNFIGNzRUJDRElDRklTRSB9CisgICAgeyBFQkNESUMtRkktU0UtQSBjc0VCQ0RJQ0ZJU0VBIH0KKyAgICB7IEVCQ0RJQy1GUiBjc0VCQ0RJQ0ZSIH0KKyAgICB7IEVCQ0RJQy1JVCBjc0VCQ0RJQ0lUIH0KKyAgICB7IEVCQ0RJQy1QVCBjc0VCQ0RJQ1BUIH0KKyAgICB7IEVCQ0RJQy1FUyBjc0VCQ0RJQ0VTIH0KKyAgICB7IEVCQ0RJQy1FUy1BIGNzRUJDRElDRVNBIH0KKyAgICB7IEVCQ0RJQy1FUy1TIGNzRUJDRElDRVNTIH0KKyAgICB7IEVCQ0RJQy1VSyBjc0VCQ0RJQ1VLIH0KKyAgICB7IEVCQ0RJQy1VUyBjc0VCQ0RJQ1VTIH0KKyAgICB7IFVOS05PV04tOEJJVCBjc1Vua25vd244QmlUIH0KKyAgICB7IE1ORU1PTklDIGNzTW5lbW9uaWMgfQorICAgIHsgTU5FTSBjc01uZW0gfQorICAgIHsgVklTQ0lJIGNzVklTQ0lJIH0KKyAgICB7IFZJUVIgY3NWSVFSIH0KKyAgICB7IEtPSTgtUiBjc0tPSThSIH0KKyAgICB7IElCTTAwODU4IENDU0lEMDA4NTggQ1AwMDg1OCBQQy1NdWx0aWxpbmd1YWwtODUwK2V1cm8gfQorICAgIHsgSUJNMDA5MjQgQ0NTSUQwMDkyNCBDUDAwOTI0IGViY2RpYy1MYXRpbjktLWV1cm8gfQorICAgIHsgSUJNMDExNDAgQ0NTSUQwMTE0MCBDUDAxMTQwIGViY2RpYy11cy0zNytldXJvIH0KKyAgICB7IElCTTAxMTQxIENDU0lEMDExNDEgQ1AwMTE0MSBlYmNkaWMtZGUtMjczK2V1cm8gfQorICAgIHsgSUJNMDExNDIgQ0NTSUQwMTE0MiBDUDAxMTQyIGViY2RpYy1kay0yNzcrZXVybyBlYmNkaWMtbm8tMjc3K2V1cm8gfQorICAgIHsgSUJNMDExNDMgQ0NTSUQwMTE0MyBDUDAxMTQzIGViY2RpYy1maS0yNzgrZXVybyBlYmNkaWMtc2UtMjc4K2V1cm8gfQorICAgIHsgSUJNMDExNDQgQ0NTSUQwMTE0NCBDUDAxMTQ0IGViY2RpYy1pdC0yODArZXVybyB9CisgICAgeyBJQk0wMTE0NSBDQ1NJRDAxMTQ1IENQMDExNDUgZWJjZGljLWVzLTI4NCtldXJvIH0KKyAgICB7IElCTTAxMTQ2IENDU0lEMDExNDYgQ1AwMTE0NiBlYmNkaWMtZ2ItMjg1K2V1cm8gfQorICAgIHsgSUJNMDExNDcgQ0NTSUQwMTE0NyBDUDAxMTQ3IGViY2RpYy1mci0yOTcrZXVybyB9CisgICAgeyBJQk0wMTE0OCBDQ1NJRDAxMTQ4IENQMDExNDggZWJjZGljLWludGVybmF0aW9uYWwtNTAwK2V1cm8gfQorICAgIHsgSUJNMDExNDkgQ0NTSUQwMTE0OSBDUDAxMTQ5IGViY2RpYy1pcy04NzErZXVybyB9CisgICAgeyBJQk0xMDQ3IElCTS0xMDQ3IH0KKyAgICB7IFBUQ1AxNTQgY3NQVENQMTU0IFBUMTU0IENQMTU0IEN5cmlsbGljLUFzaWFuIH0KKyAgICB7IEFtaWdhLTEyNTEgQW1pMTI1MSBBbWlnYTEyNTEgQW1pLTEyNTEgfQorICAgIHsgVU5JQ09ERS0xLTEgY3NVbmljb2RlMTEgfQorICAgIHsgQ0VTVS04IGNzQ0VTVS04IH0KKyAgICB7IEJPQ1UtMSBjc0JPQ1UtMSB9CisgICAgeyBVTklDT0RFLTEtMS1VVEYtNyBjc1VuaWNvZGUxMVVURjcgfQorICAgIHsgSVNPLTg4NTktMTQgaXNvLWlyLTE5OSBJU09fODg1OS0xNDoxOTk4IElTT184ODU5LTE0IGxhdGluOCBpc28tY2VsdGljCisgICAgICBsOCB9CisgICAgeyBJU08tODg1OS0xNSBJU09fODg1OS0xNSBMYXRpbi05IH0KKyAgICB7IElTTy04ODU5LTE2IGlzby1pci0yMjYgSVNPXzg4NTktMTY6MjAwMSBJU09fODg1OS0xNiBsYXRpbjEwIGwxMCB9CisgICAgeyBHQksgQ1A5MzYgTVM5MzYgd2luZG93cy05MzYgfQorICAgIHsgSklTX0VuY29kaW5nIGNzSklTRW5jb2RpbmcgfQorICAgIHsgU2hpZnRfSklTIE1TX0thbmppIGNzU2hpZnRKSVMgU2hpZnRKSVMgU2hpZnQtSklTIH0KKyAgICB7IEV4dGVuZGVkX1VOSVhfQ29kZV9QYWNrZWRfRm9ybWF0X2Zvcl9KYXBhbmVzZSBjc0VVQ1BrZEZtdEphcGFuZXNlCisgICAgICBFVUMtSlAgfQorICAgIHsgRXh0ZW5kZWRfVU5JWF9Db2RlX0ZpeGVkX1dpZHRoX2Zvcl9KYXBhbmVzZSBjc0VVQ0ZpeFdpZEphcGFuZXNlIH0KKyAgICB7IElTTy0xMDY0Ni1VQ1MtQmFzaWMgY3NVbmljb2RlQVNDSUkgfQorICAgIHsgSVNPLTEwNjQ2LVVuaWNvZGUtTGF0aW4xIGNzVW5pY29kZUxhdGluMSBJU08tMTA2NDYgfQorICAgIHsgSVNPLVVuaWNvZGUtSUJNLTEyNjEgY3NVbmljb2RlSUJNMTI2MSB9CisgICAgeyBJU08tVW5pY29kZS1JQk0tMTI2OCBjc1VuaWNvZGVJQk0xMjY4IH0KKyAgICB7IElTTy1Vbmljb2RlLUlCTS0xMjc2IGNzVW5pY29kZUlCTTEyNzYgfQorICAgIHsgSVNPLVVuaWNvZGUtSUJNLTEyNjQgY3NVbmljb2RlSUJNMTI2NCB9CisgICAgeyBJU08tVW5pY29kZS1JQk0tMTI2NSBjc1VuaWNvZGVJQk0xMjY1IH0KKyAgICB7IElTTy04ODU5LTEtV2luZG93cy0zLjAtTGF0aW4tMSBjc1dpbmRvd3MzMExhdGluMSB9CisgICAgeyBJU08tODg1OS0xLVdpbmRvd3MtMy4xLUxhdGluLTEgY3NXaW5kb3dzMzFMYXRpbjEgfQorICAgIHsgSVNPLTg4NTktMi1XaW5kb3dzLUxhdGluLTIgY3NXaW5kb3dzMzFMYXRpbjIgfQorICAgIHsgSVNPLTg4NTktOS1XaW5kb3dzLUxhdGluLTUgY3NXaW5kb3dzMzFMYXRpbjUgfQorICAgIHsgQWRvYmUtU3RhbmRhcmQtRW5jb2RpbmcgY3NBZG9iZVN0YW5kYXJkRW5jb2RpbmcgfQorICAgIHsgVmVudHVyYS1VUyBjc1ZlbnR1cmFVUyB9CisgICAgeyBWZW50dXJhLUludGVybmF0aW9uYWwgY3NWZW50dXJhSW50ZXJuYXRpb25hbCB9CisgICAgeyBQQzgtRGFuaXNoLU5vcndlZ2lhbiBjc1BDOERhbmlzaE5vcndlZ2lhbiB9CisgICAgeyBQQzgtVHVya2lzaCBjc1BDOFR1cmtpc2ggfQorICAgIHsgSUJNLVN5bWJvbHMgY3NJQk1TeW1ib2xzIH0KKyAgICB7IElCTS1UaGFpIGNzSUJNVGhhaSB9CisgICAgeyBIUC1MZWdhbCBjc0hQTGVnYWwgfQorICAgIHsgSFAtUGktZm9udCBjc0hQUGlGb250IH0KKyAgICB7IEhQLU1hdGg4IGNzSFBNYXRoOCB9CisgICAgeyBBZG9iZS1TeW1ib2wtRW5jb2RpbmcgY3NIUFBTTWF0aCB9CisgICAgeyBIUC1EZXNrVG9wIGNzSFBEZXNrdG9wIH0KKyAgICB7IFZlbnR1cmEtTWF0aCBjc1ZlbnR1cmFNYXRoIH0KKyAgICB7IE1pY3Jvc29mdC1QdWJsaXNoaW5nIGNzTWljcm9zb2Z0UHVibGlzaGluZyB9CisgICAgeyBXaW5kb3dzLTMxSiBjc1dpbmRvd3MzMUogfQorICAgIHsgR0IyMzEyIGNzR0IyMzEyIH0KKyAgICB7IEJpZzUgY3NCaWc1IH0KK30KKworcHJvYyB0Y2xfZW5jb2Rpbmcge2VuY30geworICAgIGdsb2JhbCBlbmNvZGluZ19hbGlhc2VzIHRjbF9lbmNvZGluZ19jYWNoZQorICAgIGlmIHtbaW5mbyBleGlzdHMgdGNsX2VuY29kaW5nX2NhY2hlKCRlbmMpXX0geworCXJldHVybiAkdGNsX2VuY29kaW5nX2NhY2hlKCRlbmMpCisgICAgfQorICAgIHNldCBuYW1lcyBbZW5jb2RpbmcgbmFtZXNdCisgICAgc2V0IGxjbmFtZXMgW3N0cmluZyB0b2xvd2VyICRuYW1lc10KKyAgICBzZXQgZW5jIFtzdHJpbmcgdG9sb3dlciAkZW5jXQorICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkbGNuYW1lcyAkZW5jXQorICAgIGlmIHskaSA8IDB9IHsKKwkjIGxvb2sgZm9yICJpc29ubm4iIGluc3RlYWQgb2YgImlzby1ubm4iIG9yICJpc29fbm5uIgorCWlmIHtbcmVnc3ViIHteKGlzb3xjcHxpYm18amlzKVstX119ICRlbmMge1wxfSBlbmN4XX0geworCSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGxjbmFtZXMgJGVuY3hdCisJfQorICAgIH0KKyAgICBpZiB7JGkgPCAwfSB7CisJZm9yZWFjaCBsICRlbmNvZGluZ19hbGlhc2VzIHsKKwkgICAgc2V0IGxsIFtzdHJpbmcgdG9sb3dlciAkbF0KKwkgICAgaWYge1tsc2VhcmNoIC1leGFjdCAkbGwgJGVuY10gPCAwfSBjb250aW51ZQorCSAgICAjIGxvb2sgdGhyb3VnaCB0aGUgYWxpYXNlcyBmb3Igb25lIHRoYXQgdGNsIGtub3dzIGFib3V0CisJICAgIGZvcmVhY2ggZSAkbGwgeworCQlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGxjbmFtZXMgJGVdCisJCWlmIHskaSA8IDB9IHsKKwkJICAgIGlmIHtbcmVnc3ViIHteKGlzb3xjcHxpYm18amlzKVstX119ICRlIHtcMX0gZXhdfSB7CisJCQlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGxjbmFtZXMgJGV4XQorCQkgICAgfQorCQl9CisJCWlmIHskaSA+PSAwfSBicmVhaworCSAgICB9CisJICAgIGJyZWFrCisJfQorICAgIH0KKyAgICBzZXQgdGNsZW5jIHt9CisgICAgaWYgeyRpID49IDB9IHsKKwlzZXQgdGNsZW5jIFtsaW5kZXggJG5hbWVzICRpXQorICAgIH0KKyAgICBzZXQgdGNsX2VuY29kaW5nX2NhY2hlKCRlbmMpICR0Y2xlbmMKKyAgICByZXR1cm4gJHRjbGVuYworfQorCitwcm9jIGdpdGF0dHIge3BhdGggYXR0ciBkZWZhdWx0fSB7CisgICAgZ2xvYmFsIHBhdGhfYXR0cl9jYWNoZQorICAgIGlmIHtbaW5mbyBleGlzdHMgcGF0aF9hdHRyX2NhY2hlKCRhdHRyLCRwYXRoKV19IHsKKwlzZXQgciAkcGF0aF9hdHRyX2NhY2hlKCRhdHRyLCRwYXRoKQorICAgIH0gZWxzZSB7CisJc2V0IHIgInVuc3BlY2lmaWVkIgorCWlmIHshW2NhdGNoIHtzZXQgbGluZSBbZXhlYyBnaXQgY2hlY2stYXR0ciAkYXR0ciAtLSAkcGF0aF19XX0geworCSAgICByZWdleHAgIiguKik6ICRhdHRyOiAoLiopIiAkbGluZSBtIGYgcgorCX0KKwlzZXQgcGF0aF9hdHRyX2NhY2hlKCRhdHRyLCRwYXRoKSAkcgorICAgIH0KKyAgICBpZiB7JHIgZXEgInVuc3BlY2lmaWVkIn0geworCXJldHVybiAkZGVmYXVsdAorICAgIH0KKyAgICByZXR1cm4gJHIKK30KKworcHJvYyBjYWNoZV9naXRhdHRyIHthdHRyIHBhdGhsaXN0fSB7CisgICAgZ2xvYmFsIHBhdGhfYXR0cl9jYWNoZQorICAgIHNldCBuZXdsaXN0IHt9CisgICAgZm9yZWFjaCBwYXRoICRwYXRobGlzdCB7CisJaWYgeyFbaW5mbyBleGlzdHMgcGF0aF9hdHRyX2NhY2hlKCRhdHRyLCRwYXRoKV19IHsKKwkgICAgbGFwcGVuZCBuZXdsaXN0ICRwYXRoCisJfQorICAgIH0KKyAgICBzZXQgbGltIDEwMDAKKyAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gPT0gIndpbjMyIn0geworCSMgd2luZG93cyBoYXMgYSAzMmsgbGltaXQgb24gdGhlIGFyZ3VtZW50cyB0byBhIGNvbW1hbmQuLi4KKwlzZXQgbGltIDMwCisgICAgfQorICAgIHdoaWxlIHskbmV3bGlzdCBuZSB7fX0geworCXNldCBoZWFkIFtscmFuZ2UgJG5ld2xpc3QgMCBbZXhwciB7JGxpbSAtIDF9XV0KKwlzZXQgbmV3bGlzdCBbbHJhbmdlICRuZXdsaXN0ICRsaW0gZW5kXQorCWlmIHshW2NhdGNoIHtzZXQgcmxpc3QgW2V2YWwgZXhlYyBnaXQgY2hlY2stYXR0ciAkYXR0ciAtLSAkaGVhZF19XX0geworCSAgICBmb3JlYWNoIHJvdyBbc3BsaXQgJHJsaXN0ICJcbiJdIHsKKwkJaWYge1tyZWdleHAgIiguKik6ICRhdHRyOiAoLiopIiAkcm93IG0gcGF0aCB2YWx1ZV19IHsKKwkJICAgIGlmIHtbc3RyaW5nIGluZGV4ICRwYXRoIDBdIGVxICJcIiJ9IHsKKwkJCXNldCBwYXRoIFtlbmNvZGluZyBjb252ZXJ0ZnJvbSBbbGluZGV4ICRwYXRoIDBdXQorCQkgICAgfQorCQkgICAgc2V0IHBhdGhfYXR0cl9jYWNoZSgkYXR0ciwkcGF0aCkgJHZhbHVlCisJCX0KKwkgICAgfQorCX0KKyAgICB9Cit9CisKK3Byb2MgZ2V0X3BhdGhfZW5jb2Rpbmcge3BhdGh9IHsKKyAgICBnbG9iYWwgZ3VpX2VuY29kaW5nIHBlcmZpbGVfYXR0cnMKKyAgICBzZXQgdGNsX2VuYyAkZ3VpX2VuY29kaW5nCisgICAgaWYgeyRwYXRoIG5lIHt9ICYmICRwZXJmaWxlX2F0dHJzfSB7CisJc2V0IGVuYzIgW3RjbF9lbmNvZGluZyBbZ2l0YXR0ciAkcGF0aCBlbmNvZGluZyAkdGNsX2VuY11dCisJaWYgeyRlbmMyIG5lIHt9fSB7CisJICAgIHNldCB0Y2xfZW5jICRlbmMyCisJfQorICAgIH0KKyAgICByZXR1cm4gJHRjbF9lbmMKK30KKworIyMgRm9yIG1zZ2NhdCBsb2FkaW5nLCBmaXJzdCBsb2NhdGUgdGhlIGluc3RhbGxhdGlvbiBsb2NhdGlvbi4KK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KEdJVEtfTVNHU0RJUildIH0geworICAgICMjIE1zZ3NkaXIgd2FzIG1hbnVhbGx5IHNldCBpbiB0aGUgZW52aXJvbm1lbnQuCisgICAgc2V0IGdpdGtfbXNnc2RpciAkOjplbnYoR0lUS19NU0dTRElSKQorfSBlbHNlIHsKKyAgICAjIyBMZXQncyBndWVzcyB0aGUgcHJlZml4IGZyb20gYXJndjAuCisgICAgc2V0IGdpdGtfcHJlZml4IFtmaWxlIGRpcm5hbWUgW2ZpbGUgZGlybmFtZSBbZmlsZSBub3JtYWxpemUgJGFyZ3YwXV1dCisgICAgc2V0IGdpdGtfbGliZGlyIFtmaWxlIGpvaW4gJGdpdGtfcHJlZml4IHNoYXJlIGdpdGsgbGliXQorICAgIHNldCBnaXRrX21zZ3NkaXIgW2ZpbGUgam9pbiAkZ2l0a19saWJkaXIgbXNnc10KKyAgICB1bnNldCBnaXRrX3ByZWZpeAorfQorCisjIyBJbnRlcm5hdGlvbmFsaXphdGlvbiAoaTE4bikgdGhyb3VnaCBtc2djYXQgYW5kIGdldHRleHQuIFNlZQorIyMgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dldHRleHQvbWFudWFsL2h0bWxfbm9kZS9UY2wuaHRtbAorcGFja2FnZSByZXF1aXJlIG1zZ2NhdAorbmFtZXNwYWNlIGltcG9ydCA6Om1zZ2NhdDo6bWMKKyMjIEFuZCBldmVudHVhbGx5IGxvYWQgdGhlIGFjdHVhbCBtZXNzYWdlIGNhdGFsb2cKKzo6bXNnY2F0OjptY2xvYWQgJGdpdGtfbXNnc2RpcgorCisjIEZpcnN0IGNoZWNrIHRoYXQgVGNsL1RrIGlzIHJlY2VudCBlbm91Z2gKK2lmIHtbY2F0Y2gge3BhY2thZ2UgcmVxdWlyZSBUayA4LjR9IGVycl19IHsKKyAgICBzaG93X2Vycm9yIHt9IC4gW21jICJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cblwKKwkJCSBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIl0KKyAgICBleGl0IDEKK30KKworIyBvbiBPU1ggYnJpbmcgdGhlIGN1cnJlbnQgV2lzaCBwcm9jZXNzIHdpbmRvdyB0byBmcm9udAoraWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJhcXVhIn0geworICAgIGV4ZWMgb3Nhc2NyaXB0IC1lIFtmb3JtYXQgeworICAgICAgICB0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIgorICAgICAgICAgICAgc2V0IGZyb250bW9zdCBvZiBwcm9jZXNzZXMgd2hvc2UgdW5peCBpZCBpcyAlZCB0byB0cnVlCisgICAgICAgIGVuZCB0ZWxsCisgICAgfSBbcGlkXSBdCit9CisKKyMgVW5zZXQgR0lUX1RSQUNFIHZhciBpZiBzZXQKK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KEdJVF9UUkFDRSldIH0geworICAgIHVuc2V0IDo6ZW52KEdJVF9UUkFDRSkKK30KKworIyBkZWZhdWx0cy4uLgorc2V0IHdyY29tY21kICJnaXQgZGlmZi10cmVlIC0tc3RkaW4gLXAgLS1wcmV0dHk9ZW1haWwiCisKK3NldCBnaXRlbmNvZGluZyB7fQorY2F0Y2ggeworICAgIHNldCBnaXRlbmNvZGluZyBbZXhlYyBnaXQgY29uZmlnIC0tZ2V0IGkxOG4uY29tbWl0ZW5jb2RpbmddCit9CitjYXRjaCB7CisgICAgc2V0IGdpdGVuY29kaW5nIFtleGVjIGdpdCBjb25maWcgLS1nZXQgaTE4bi5sb2dvdXRwdXRlbmNvZGluZ10KK30KK2lmIHskZ2l0ZW5jb2RpbmcgPT0gIiJ9IHsKKyAgICBzZXQgZ2l0ZW5jb2RpbmcgInV0Zi04IgorfQorc2V0IHRjbGVuY29kaW5nIFt0Y2xfZW5jb2RpbmcgJGdpdGVuY29kaW5nXQoraWYgeyR0Y2xlbmNvZGluZyA9PSB7fX0geworICAgIHB1dHMgc3RkZXJyICJXYXJuaW5nOiBlbmNvZGluZyAkZ2l0ZW5jb2RpbmcgaXMgbm90IHN1cHBvcnRlZCBieSBUY2wvVGsiCit9CisKK3NldCBndWlfZW5jb2RpbmcgW2VuY29kaW5nIHN5c3RlbV0KK2NhdGNoIHsKKyAgICBzZXQgZW5jIFtleGVjIGdpdCBjb25maWcgLS1nZXQgZ3VpLmVuY29kaW5nXQorICAgIGlmIHskZW5jIG5lIHt9fSB7CisJc2V0IHRjbGVuYyBbdGNsX2VuY29kaW5nICRlbmNdCisJaWYgeyR0Y2xlbmMgbmUge319IHsKKwkgICAgc2V0IGd1aV9lbmNvZGluZyAkdGNsZW5jCisJfSBlbHNlIHsKKwkgICAgcHV0cyBzdGRlcnIgIldhcm5pbmc6IGVuY29kaW5nICRlbmMgaXMgbm90IHN1cHBvcnRlZCBieSBUY2wvVGsiCisJfQorICAgIH0KK30KKworc2V0IGxvZ19zaG93cm9vdCB0cnVlCitjYXRjaCB7CisgICAgc2V0IGxvZ19zaG93cm9vdCBbZXhlYyBnaXQgY29uZmlnIC0tYm9vbCAtLWdldCBsb2cuc2hvd3Jvb3RdCit9CisKK2lmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSAiYXF1YSJ9IHsKKyAgICBzZXQgbWFpbmZvbnQge3tMdWNpZGEgR3JhbmRlfSA5fQorICAgIHNldCB0ZXh0Zm9udCB7TW9uYWNvIDl9CisgICAgc2V0IHVpZm9udCB7e0x1Y2lkYSBHcmFuZGV9IDkgYm9sZH0KK30gZWxzZWlmIHshW2NhdGNoIHs6OnRrOjpwa2djb25maWcgZ2V0IGZvbnRzeXN0ZW19IHhmdF0gJiYgJHhmdCBlcSAieGZ0In0geworICAgICMgZm9udGNvbmZpZyEKKyAgICBzZXQgbWFpbmZvbnQge3NhbnMgOX0KKyAgICBzZXQgdGV4dGZvbnQge21vbm9zcGFjZSA5fQorICAgIHNldCB1aWZvbnQge3NhbnMgOSBib2xkfQorfSBlbHNlIHsKKyAgICBzZXQgbWFpbmZvbnQge0hlbHZldGljYSA5fQorICAgIHNldCB0ZXh0Zm9udCB7Q291cmllciA5fQorICAgIHNldCB1aWZvbnQge0hlbHZldGljYSA5IGJvbGR9Cit9CitzZXQgdGFic3RvcCA4CitzZXQgZmluZG1lcmdlZmlsZXMgMAorc2V0IG1heGdyYXBocGN0IDUwCitzZXQgbWF4d2lkdGggMTYKK3NldCByZXZsaXN0b3JkZXIgMAorc2V0IGZhc3RkYXRlIDAKK3NldCB1cGFycm93bGVuIDUKK3NldCBkb3duYXJyb3dsZW4gNQorc2V0IG1pbmdhcGxlbiAxMDAKK3NldCBjbWl0bW9kZSAicGF0Y2giCitzZXQgd3JhcGNvbW1lbnQgIm5vbmUiCitzZXQgc2hvd25lYXJ0YWdzIDEKK3NldCBoaWRlcmVtb3RlcyAwCitzZXQgbWF4cmVmcyAyMAorc2V0IHZpc2libGVyZWZzIHsibWFzdGVyIn0KK3NldCBtYXhsaW5lbGVuIDIwMAorc2V0IHNob3dsb2NhbGNoYW5nZXMgMQorc2V0IGxpbWl0ZGlmZnMgMQorc2V0IGRhdGV0aW1lZm9ybWF0ICIlWS0lbS0lZCAlSDolTTolUyIKK3NldCBhdXRvc2VsZWN0IDEKK3NldCBhdXRvc2VsbGVuIDQwCitzZXQgcGVyZmlsZV9hdHRycyAwCitzZXQgd2FudF90dGsgMQorCitpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgImFxdWEifSB7CisgICAgc2V0IGV4dGRpZmZ0b29sICJvcGVuZGlmZiIKK30gZWxzZSB7CisgICAgc2V0IGV4dGRpZmZ0b29sICJtZWxkIgorfQorCitzZXQgY29sb3JzIHsiIzAwZmYwMCIgcmVkIGJsdWUgbWFnZW50YSBkYXJrZ3JleSBicm93biBvcmFuZ2V9CitpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgIndpbjMyIn0geworICAgIHNldCB1aWNvbG9yIFN5c3RlbUJ1dHRvbkZhY2UKKyAgICBzZXQgdWlmZ2NvbG9yIFN5c3RlbUJ1dHRvblRleHQKKyAgICBzZXQgdWlmZ2Rpc2FibGVkY29sb3IgU3lzdGVtRGlzYWJsZWRUZXh0CisgICAgc2V0IGJnY29sb3IgU3lzdGVtV2luZG93CisgICAgc2V0IGZnY29sb3IgU3lzdGVtV2luZG93VGV4dAorICAgIHNldCBzZWxlY3RiZ2NvbG9yIFN5c3RlbUhpZ2hsaWdodAorICAgIHNldCB3ZWJfYnJvd3NlciAiY21kIC9jIHN0YXJ0IgorfSBlbHNlIHsKKyAgICBzZXQgdWljb2xvciBncmV5ODUKKyAgICBzZXQgdWlmZ2NvbG9yIGJsYWNrCisgICAgc2V0IHVpZmdkaXNhYmxlZGNvbG9yICIjOTk5IgorICAgIHNldCBiZ2NvbG9yIHdoaXRlCisgICAgc2V0IGZnY29sb3IgYmxhY2sKKyAgICBzZXQgc2VsZWN0Ymdjb2xvciBncmF5ODUKKyAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgImFxdWEifSB7CisJc2V0IHdlYl9icm93c2VyICJvcGVuIgorICAgIH0gZWxzZSB7CisJc2V0IHdlYl9icm93c2VyICJ4ZGctb3BlbiIKKyAgICB9Cit9CitzZXQgZGlmZmNvbG9ycyB7cmVkICIjMDBhMDAwIiBibHVlfQorc2V0IGRpZmZjb250ZXh0IDMKK3NldCBtZXJnZWNvbG9ycyB7cmVkIGJsdWUgIiMwMGZmMDAiIHB1cnBsZSBicm93biAiIzAwOTA5MCIgbWFnZW50YSAiIzgwODAwMCIgIiMwMDkwMDAiICIjZmYwMDgwIiBjeWFuICIjYjA3MDcwIiAiIzcwYjBmMCIgIiM3MGYwYjAiICIjZjBiMDcwIiAiI2ZmNzBiMCJ9CitzZXQgaWdub3Jlc3BhY2UgMAorc2V0IHdvcmRkaWZmICIiCitzZXQgbWFya2JnY29sb3IgIiNlMGUwZmYiCisKK3NldCBoZWFkYmdjb2xvciAiIzAwZmYwMCIKK3NldCBoZWFkZmdjb2xvciBibGFjaworc2V0IGhlYWRvdXRsaW5lY29sb3IgYmxhY2sKK3NldCByZW1vdGViZ2NvbG9yICNmZmRkYWEKK3NldCB0YWdiZ2NvbG9yIHllbGxvdworc2V0IHRhZ2ZnY29sb3IgYmxhY2sKK3NldCB0YWdvdXRsaW5lY29sb3IgYmxhY2sKK3NldCByZWZsaW5lY29sb3IgYmxhY2sKK3NldCBmaWxlc2VwYmdjb2xvciAjYWFhYWFhCitzZXQgZmlsZXNlcGZnY29sb3IgYmxhY2sKK3NldCBsaW5laG92ZXJiZ2NvbG9yICNmZmZmODAKK3NldCBsaW5laG92ZXJmZ2NvbG9yIGJsYWNrCitzZXQgbGluZWhvdmVyb3V0bGluZWNvbG9yIGJsYWNrCitzZXQgbWFpbmhlYWRjaXJjbGVjb2xvciB5ZWxsb3cKK3NldCB3b3JraW5nZmlsZXNjaXJjbGVjb2xvciByZWQKK3NldCBpbmRleGNpcmNsZWNvbG9yICIjMDBmZjAwIgorc2V0IGNpcmNsZWNvbG9ycyB7d2hpdGUgYmx1ZSBncmF5IGJsdWUgYmx1ZX0KK3NldCBsaW5rZmdjb2xvciBibHVlCitzZXQgY2lyY2xlb3V0bGluZWNvbG9yICRmZ2NvbG9yCitzZXQgZm91bmRiZ2NvbG9yIHllbGxvdworc2V0IGN1cnJlbnRzZWFyY2hoaXRiZ2NvbG9yIG9yYW5nZQorCisjIGJ1dHRvbiBmb3IgcG9wcGluZyB1cCBjb250ZXh0IG1lbnVzCitpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgImFxdWEifSB7CisgICAgc2V0IGN0eGJ1dCA8QnV0dG9uLTI+Cit9IGVsc2UgeworICAgIHNldCBjdHhidXQgPEJ1dHRvbi0zPgorfQorCitjYXRjaCB7CisgICAgIyBmb2xsb3cgdGhlIFhERyBiYXNlIGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9uIGJ5IGRlZmF1bHQuIFNlZQorICAgICMgaHR0cDovL3N0YW5kYXJkcy5mcmVlZGVza3RvcC5vcmcvYmFzZWRpci1zcGVjL2Jhc2VkaXItc3BlYy1sYXRlc3QuaHRtbAorICAgIGlmIHtbaW5mbyBleGlzdHMgZW52KFhER19DT05GSUdfSE9NRSldICYmICRlbnYoWERHX0NPTkZJR19IT01FKSBuZSAiIn0geworCSMgWERHX0NPTkZJR19IT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldAorCXNldCBjb25maWdfZmlsZSBbZmlsZSBqb2luICRlbnYoWERHX0NPTkZJR19IT01FKSBnaXQgZ2l0a10KKwlzZXQgY29uZmlnX2ZpbGVfdG1wIFtmaWxlIGpvaW4gJGVudihYREdfQ09ORklHX0hPTUUpIGdpdCBnaXRrLXRtcF0KKyAgICB9IGVsc2UgeworCSMgZGVmYXVsdCBYREdfQ09ORklHX0hPTUUKKwlzZXQgY29uZmlnX2ZpbGUgIn4vLmNvbmZpZy9naXQvZ2l0ayIKKwlzZXQgY29uZmlnX2ZpbGVfdG1wICJ+Ly5jb25maWcvZ2l0L2dpdGstdG1wIgorICAgIH0KKyAgICBpZiB7IVtmaWxlIGV4aXN0cyAkY29uZmlnX2ZpbGVdfSB7CisJIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB1c2UgdGhlIG9sZCBjb25maWcgZmlsZSBpZiBpdCBleGlzdHMKKwlpZiB7W2ZpbGUgZXhpc3RzICJ+Ly5naXRrIl19IHsKKwkgICAgc2V0IGNvbmZpZ19maWxlICJ+Ly5naXRrIgorCSAgICBzZXQgY29uZmlnX2ZpbGVfdG1wICJ+Ly5naXRrLXRtcCIKKwl9IGVsc2VpZiB7IVtmaWxlIGV4aXN0cyBbZmlsZSBkaXJuYW1lICRjb25maWdfZmlsZV1dfSB7CisJICAgIGZpbGUgbWtkaXIgW2ZpbGUgZGlybmFtZSAkY29uZmlnX2ZpbGVdCisJfQorICAgIH0KKyAgICBzb3VyY2UgJGNvbmZpZ19maWxlCit9Citjb25maWdfY2hlY2tfdG1wX2V4aXN0cyA1MAorCitzZXQgY29uZmlnX3ZhcmlhYmxlcyB7CisgICAgbWFpbmZvbnQgdGV4dGZvbnQgdWlmb250IHRhYnN0b3AgZmluZG1lcmdlZmlsZXMgbWF4Z3JhcGhwY3QgbWF4d2lkdGgKKyAgICBjbWl0bW9kZSB3cmFwY29tbWVudCBhdXRvc2VsZWN0IGF1dG9zZWxsZW4gc2hvd25lYXJ0YWdzIG1heHJlZnMgdmlzaWJsZXJlZnMKKyAgICBoaWRlcmVtb3RlcyBzaG93bG9jYWxjaGFuZ2VzIGRhdGV0aW1lZm9ybWF0IGxpbWl0ZGlmZnMgdWljb2xvciB3YW50X3R0aworICAgIGJnY29sb3IgZmdjb2xvciB1aWZnY29sb3IgdWlmZ2Rpc2FibGVkY29sb3IgY29sb3JzIGRpZmZjb2xvcnMgbWVyZ2Vjb2xvcnMKKyAgICBtYXJrYmdjb2xvciBkaWZmY29udGV4dCBzZWxlY3RiZ2NvbG9yIGZvdW5kYmdjb2xvciBjdXJyZW50c2VhcmNoaGl0Ymdjb2xvcgorICAgIGV4dGRpZmZ0b29sIHBlcmZpbGVfYXR0cnMgaGVhZGJnY29sb3IgaGVhZGZnY29sb3IgaGVhZG91dGxpbmVjb2xvcgorICAgIHJlbW90ZWJnY29sb3IgdGFnYmdjb2xvciB0YWdmZ2NvbG9yIHRhZ291dGxpbmVjb2xvciByZWZsaW5lY29sb3IKKyAgICBmaWxlc2VwYmdjb2xvciBmaWxlc2VwZmdjb2xvciBsaW5laG92ZXJiZ2NvbG9yIGxpbmVob3ZlcmZnY29sb3IKKyAgICBsaW5laG92ZXJvdXRsaW5lY29sb3IgbWFpbmhlYWRjaXJjbGVjb2xvciB3b3JraW5nZmlsZXNjaXJjbGVjb2xvcgorICAgIGluZGV4Y2lyY2xlY29sb3IgY2lyY2xlY29sb3JzIGxpbmtmZ2NvbG9yIGNpcmNsZW91dGxpbmVjb2xvcgorICAgIHdlYl9icm93c2VyCit9Citmb3JlYWNoIHZhciAkY29uZmlnX3ZhcmlhYmxlcyB7CisgICAgY29uZmlnX2luaXRfdHJhY2UgJHZhcgorICAgIHRyYWNlIGFkZCB2YXJpYWJsZSAkdmFyIHdyaXRlIGNvbmZpZ192YXJpYWJsZV9jaGFuZ2VfY2IKK30KKworcGFyc2Vmb250IG1haW5mb250ICRtYWluZm9udAorZXZhbCBmb250IGNyZWF0ZSBtYWluZm9udCBbZm9udGZsYWdzIG1haW5mb250XQorZXZhbCBmb250IGNyZWF0ZSBtYWluZm9udGJvbGQgW2ZvbnRmbGFncyBtYWluZm9udCAxXQorCitwYXJzZWZvbnQgdGV4dGZvbnQgJHRleHRmb250CitldmFsIGZvbnQgY3JlYXRlIHRleHRmb250IFtmb250ZmxhZ3MgdGV4dGZvbnRdCitldmFsIGZvbnQgY3JlYXRlIHRleHRmb250Ym9sZCBbZm9udGZsYWdzIHRleHRmb250IDFdCisKK3BhcnNlZm9udCB1aWZvbnQgJHVpZm9udAorZXZhbCBmb250IGNyZWF0ZSB1aWZvbnQgW2ZvbnRmbGFncyB1aWZvbnRdCisKK3NldHVpICR1aWNvbG9yCisKK3NldG9wdGlvbnMKKworIyBjaGVjayB0aGF0IHdlIGNhbiBmaW5kIGEgLmdpdCBkaXJlY3Rvcnkgc29tZXdoZXJlLi4uCitpZiB7W2NhdGNoIHtzZXQgZ2l0ZGlyIFtleGVjIGdpdCByZXYtcGFyc2UgLS1naXQtZGlyXX1dfSB7CisgICAgc2hvd19lcnJvciB7fSAuIFttYyAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiJdCisgICAgZXhpdCAxCit9CisKK3NldCBzZWxlY3RoZWFkIHt9CitzZXQgc2VsZWN0aGVhZGlkIHt9CisKK3NldCByZXZ0cmVlYXJncyB7fQorc2V0IGNtZGxpbmVfZmlsZXMge30KK3NldCBpIDAKK3NldCByZXZ0cmVlYXJnc2NtZCB7fQorZm9yZWFjaCBhcmcgJGFyZ3YgeworICAgIHN3aXRjaCAtZ2xvYiAtLSAkYXJnIHsKKwkiIiB7IH0KKwkiLS0iIHsKKwkgICAgc2V0IGNtZGxpbmVfZmlsZXMgW2xyYW5nZSAkYXJndiBbZXhwciB7JGkgKyAxfV0gZW5kXQorCSAgICBicmVhaworCX0KKwkiLS1zZWxlY3QtY29tbWl0PSoiIHsKKwkgICAgc2V0IHNlbGVjdGhlYWQgW3N0cmluZyByYW5nZSAkYXJnIDE2IGVuZF0KKwl9CisJIi0tYXJnc2NtZD0qIiB7CisJICAgIHNldCByZXZ0cmVlYXJnc2NtZCBbc3RyaW5nIHJhbmdlICRhcmcgMTAgZW5kXQorCX0KKwlkZWZhdWx0IHsKKwkgICAgbGFwcGVuZCByZXZ0cmVlYXJncyAkYXJnCisJfQorICAgIH0KKyAgICBpbmNyIGkKK30KKworaWYgeyRzZWxlY3RoZWFkIGVxICJIRUFEIn0geworICAgIHNldCBzZWxlY3RoZWFkIHt9Cit9CisKK2lmIHskaSA+PSBbbGxlbmd0aCAkYXJndl0gJiYgJHJldnRyZWVhcmdzIG5lIHt9fSB7CisgICAgIyBubyAtLSBvbiBjb21tYW5kIGxpbmUsIGJ1dCBzb21lIGFyZ3VtZW50cyAob3RoZXIgdGhhbiAtLWFyZ3NjbWQpCisgICAgaWYge1tjYXRjaCB7CisJc2V0IGYgW2V2YWwgZXhlYyBnaXQgcmV2LXBhcnNlIC0tbm8tcmV2cyAtLW5vLWZsYWdzICRyZXZ0cmVlYXJnc10KKwlzZXQgY21kbGluZV9maWxlcyBbc3BsaXQgJGYgIlxuIl0KKwlzZXQgbiBbbGxlbmd0aCAkY21kbGluZV9maWxlc10KKwlzZXQgcmV2dHJlZWFyZ3MgW2xyYW5nZSAkcmV2dHJlZWFyZ3MgMCBlbmQtJG5dCisJIyBVbmZvcnR1bmF0ZWx5IGdpdCByZXYtcGFyc2UgZG9lc24ndCBwcm9kdWNlIGFuIGVycm9yIHdoZW4KKwkjIHNvbWV0aGluZyBpcyBib3RoIGEgcmV2aXNpb24gYW5kIGEgZmlsZW5hbWUuICBUbyBiZSBjb25zaXN0ZW50CisJIyB3aXRoIGdpdCBsb2cgYW5kIGdpdCByZXYtbGlzdCwgY2hlY2sgcmV2dHJlZWFyZ3MgZm9yIGZpbGVuYW1lcy4KKwlmb3JlYWNoIGFyZyAkcmV2dHJlZWFyZ3MgeworCSAgICBpZiB7W2ZpbGUgZXhpc3RzICRhcmddfSB7CisJCXNob3dfZXJyb3Ige30gLiBbbWMgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uXAorCQkJCSBhbmQgZmlsZW5hbWUiICRhcmddCisJCWV4aXQgMQorCSAgICB9CisJfQorICAgIH0gZXJyXX0geworCSMgdW5mb3J0dW5hdGVseSB3ZSBnZXQgYm90aCBzdGRvdXQgYW5kIHN0ZGVyciBpbiAkZXJyLAorCSMgc28gbG9vayBmb3IgImZhdGFsOiIuCisJc2V0IGkgW3N0cmluZyBmaXJzdCAiZmF0YWw6IiAkZXJyXQorCWlmIHskaSA+IDB9IHsKKwkgICAgc2V0IGVyciBbc3RyaW5nIHJhbmdlICRlcnIgW2V4cHIgeyRpICsgNn1dIGVuZF0KKwl9CisJc2hvd19lcnJvciB7fSAuICJbbWMgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiXVxuJGVyciIKKwlleGl0IDEKKyAgICB9Cit9CisKK3NldCBudWxsaWQgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCitzZXQgbnVsbGlkMiAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIKK3NldCBudWxsZmlsZSAiL2Rldi9udWxsIgorCitzZXQgaGF2ZV90azg1IFtleHByIHtbcGFja2FnZSB2Y29tcGFyZSAkdGtfdmVyc2lvbiAiOC41Il0gPj0gMH1dCitpZiB7IVtpbmZvIGV4aXN0cyBoYXZlX3R0a119IHsKKyAgICBzZXQgaGF2ZV90dGsgW2xsZW5ndGggW2luZm8gY29tbWFuZHMgOjp0dGs6OnN0eWxlXV0KK30KK3NldCB1c2VfdHRrIFtleHByIHskaGF2ZV90dGsgJiYgJHdhbnRfdHRrfV0KK3NldCBOUyBbZXhwciB7JHVzZV90dGsgPyAidHRrIiA6ICIifV0KKworaWYgeyR1c2VfdHRrfSB7CisgICAgc2V0dHRrc3R5bGUKK30KKworcmVnZXhwIHteZ2l0IHZlcnNpb24gKFtcZC5dKlxkKX0gW2V4ZWMgZ2l0IHZlcnNpb25dIF8gZ2l0X3ZlcnNpb24KKworc2V0IHNob3dfbm90ZXMge30KK2lmIHtbcGFja2FnZSB2Y29tcGFyZSAkZ2l0X3ZlcnNpb24gIjEuNi42LjIiXSA+PSAwfSB7CisgICAgc2V0IHNob3dfbm90ZXMgIi0tc2hvdy1ub3RlcyIKK30KKworc2V0IGFwcG5hbWUgImdpdGsiCisKK3NldCBydW5xIHt9CitzZXQgaGlzdG9yeSB7fQorc2V0IGhpc3RvcnlpbmRleCAwCitzZXQgZmhfc2VyaWFsIDAKK3NldCBuaGxfbmFtZXMge30KK3NldCBoaWdobGlnaHRfcGF0aHMge30KK3NldCBmaW5kcGF0dGVybiB7fQorc2V0IHNlYXJjaGRpcm4gLWZvcndhcmRzCitzZXQgYm9sZGlkcyB7fQorc2V0IGJvbGRuYW1laWRzIHt9CitzZXQgZGlmZmVsaWRlIHswIDB9CitzZXQgbWFya2luZ21hdGNoZXMgMAorc2V0IGxpbmtlbnRlcmNvdW50IDAKK3NldCBuZWVkX3JlZGlzcGxheSAwCitzZXQgbnJvd3NfZHJhd24gMAorc2V0IGZpcnN0dGFic3RvcCAwCisKK3NldCBuZXh0dmlld251bSAxCitzZXQgY3VydmlldyAwCitzZXQgc2VsZWN0ZWR2aWV3IDAKK3NldCBzZWxlY3RlZGhsdmlldyBbbWMgIk5vbmUiXQorc2V0IGhpZ2hsaWdodF9yZWxhdGVkIFttYyAiTm9uZSJdCitzZXQgaGlnaGxpZ2h0X2ZpbGVzIHt9CitzZXQgdmlld2ZpbGVzKDApIHt9CitzZXQgdmlld3Blcm0oMCkgMAorc2V0IHZpZXdjaGFuZ2VkKDApIDAKK3NldCB2aWV3YXJncygwKSB7fQorc2V0IHZpZXdhcmdzY21kKDApIHt9CisKK3NldCBzZWxlY3RlZGxpbmUge30KK3NldCBudW1jb21taXRzIDAKK3NldCBsb2dpbnN0YW5jZSAwCitzZXQgY21kbGluZW9rIDAKK3NldCBzdG9wcGVkIDAKK3NldCBzdHVmZnNhdmVkIDAKK3NldCBwYXRjaG51bSAwCitzZXQgbHNlcmlhbCAwCitzZXQgaGFzd29ya3RyZWUgW2hhc3dvcmt0cmVlXQorc2V0IGNkdXAge30KK2lmIHtbZXhwciB7W2V4ZWMgZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWVdID09ICJ0cnVlIn1dfSB7CisgICAgc2V0IGNkdXAgW2V4ZWMgZ2l0IHJldi1wYXJzZSAtLXNob3ctY2R1cF0KK30KK3NldCB3b3JrdHJlZSBbZXhlYyBnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbF0KK3NldGNvb3JkcworbWFrZXdpbmRvdworY2F0Y2ggeworICAgIGltYWdlIGNyZWF0ZSBwaG90byBnaXRsb2dvICAgICAgLXdpZHRoIDE2IC1oZWlnaHQgMTYKKworICAgIGltYWdlIGNyZWF0ZSBwaG90byBnaXRsb2dvbWludXMgLXdpZHRoICA0IC1oZWlnaHQgIDIKKyAgICBnaXRsb2dvbWludXMgcHV0ICNDMDAwMDAgLXRvIDAgMCA0IDIKKyAgICBnaXRsb2dvIGNvcHkgZ2l0bG9nb21pbnVzIC10byAgMSA1CisgICAgZ2l0bG9nbyBjb3B5IGdpdGxvZ29taW51cyAtdG8gIDYgNQorICAgIGdpdGxvZ28gY29weSBnaXRsb2dvbWludXMgLXRvIDExIDUKKyAgICBpbWFnZSBkZWxldGUgZ2l0bG9nb21pbnVzCisKKyAgICBpbWFnZSBjcmVhdGUgcGhvdG8gZ2l0bG9nb3BsdXMgIC13aWR0aCAgNCAtaGVpZ2h0ICA0CisgICAgZ2l0bG9nb3BsdXMgIHB1dCAjMDA4MDAwIC10byAxIDAgMyA0CisgICAgZ2l0bG9nb3BsdXMgIHB1dCAjMDA4MDAwIC10byAwIDEgNCAzCisgICAgZ2l0bG9nbyBjb3B5IGdpdGxvZ29wbHVzICAtdG8gIDEgOQorICAgIGdpdGxvZ28gY29weSBnaXRsb2dvcGx1cyAgLXRvICA2IDkKKyAgICBnaXRsb2dvIGNvcHkgZ2l0bG9nb3BsdXMgIC10byAxMSA5CisgICAgaW1hZ2UgZGVsZXRlIGdpdGxvZ29wbHVzCisKKyAgICBpbWFnZSBjcmVhdGUgcGhvdG8gZ2l0bG9nbzMyICAgIC13aWR0aCAzMiAtaGVpZ2h0IDMyCisgICAgZ2l0bG9nbzMyIGNvcHkgZ2l0bG9nbyAtem9vbSAyIDIKKworICAgIHdtIGljb25waG90byAuIC1kZWZhdWx0IGdpdGxvZ28gZ2l0bG9nbzMyCit9CisjIHdhaXQgZm9yIHRoZSB3aW5kb3cgdG8gYmVjb21lIHZpc2libGUKK3Rrd2FpdCB2aXNpYmlsaXR5IC4KK3NldF93aW5kb3dfdGl0bGUKK3VwZGF0ZQorcmVhZHJlZnMKKworaWYgeyRjbWRsaW5lX2ZpbGVzIG5lIHt9IHx8ICRyZXZ0cmVlYXJncyBuZSB7fSB8fCAkcmV2dHJlZWFyZ3NjbWQgbmUge319IHsKKyAgICAjIGNyZWF0ZSBhIHZpZXcgZm9yIHRoZSBmaWxlcy9kaXJzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lCisgICAgc2V0IGN1cnZpZXcgMQorICAgIHNldCBzZWxlY3RlZHZpZXcgMQorICAgIHNldCBuZXh0dmlld251bSAyCisgICAgc2V0IHZpZXduYW1lKDEpIFttYyAiQ29tbWFuZCBsaW5lIl0KKyAgICBzZXQgdmlld2ZpbGVzKDEpICRjbWRsaW5lX2ZpbGVzCisgICAgc2V0IHZpZXdhcmdzKDEpICRyZXZ0cmVlYXJncworICAgIHNldCB2aWV3YXJnc2NtZCgxKSAkcmV2dHJlZWFyZ3NjbWQKKyAgICBzZXQgdmlld3Blcm0oMSkgMAorICAgIHNldCB2aWV3Y2hhbmdlZCgxKSAwCisgICAgc2V0IHZkYXRlbW9kZSgxKSAwCisgICAgYWRkdmlld21lbnUgMQorICAgIC5iYXIudmlldyBlbnRyeWNvbmYgW21jYSAiJkVkaXQgdmlldy4uLiJdIC1zdGF0ZSBub3JtYWwKKyAgICAuYmFyLnZpZXcgZW50cnljb25mIFttY2EgIiZEZWxldGUgdmlldyJdIC1zdGF0ZSBub3JtYWwKK30KKworaWYge1tpbmZvIGV4aXN0cyBwZXJtdmlld3NdfSB7CisgICAgZm9yZWFjaCB2ICRwZXJtdmlld3MgeworCXNldCBuICRuZXh0dmlld251bQorCWluY3IgbmV4dHZpZXdudW0KKwlzZXQgdmlld25hbWUoJG4pIFtsaW5kZXggJHYgMF0KKwlzZXQgdmlld2ZpbGVzKCRuKSBbbGluZGV4ICR2IDFdCisJc2V0IHZpZXdhcmdzKCRuKSBbbGluZGV4ICR2IDJdCisJc2V0IHZpZXdhcmdzY21kKCRuKSBbbGluZGV4ICR2IDNdCisJc2V0IHZpZXdwZXJtKCRuKSAxCisJc2V0IHZpZXdjaGFuZ2VkKCRuKSAwCisJYWRkdmlld21lbnUgJG4KKyAgICB9Cit9CisKK2lmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSAid2luMzIifSB7CisgICAgZm9jdXMgLWZvcmNlIC4KK30KKworZ2V0Y29tbWl0cyB7fQorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgbW9kZTogdGNsCisjIGluZGVudC10YWJzLW1vZGU6IHQKKyMgdGFiLXdpZHRoOiA4CisjIEVuZDoKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvLy5naXRpZ25vcmUgYi9naXRrLWdpdC9wby8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNThkZDEKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKKyoubXNnCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9iZy5wbyBiL2dpdGstZ2l0L3BvL2JnLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YWIxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9iZy5wbwpAQCAtMCwwICsxLDE0MDcgQEAKKyMgQnVsZ2FyaWFuIHRyYW5zbGF0aW9uIG9mIGdpdGsgcG8tZmlsZS4KKyMgQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1LCAyMDE5IEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz4uCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQgcGFja2FnZS4KKyMgQWxleGFuZGVyIFNob3BvdiA8YXNoQGthbWJhbmFyaWEub3JnPiwgMjAxNCwgMjAxNSwgMjAxOS4KKyMKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdGsgbWFzdGVyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE5LTAzLTA0IDExOjI3KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE5LTAzLTA0IDExOjM5KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBCdWxnYXJpYW4gPGRpY3RAZnNhLWJnLm9yZz5cbiIKKyJMYW5ndWFnZTogYmdcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogZ2l0azoxNDAKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgItCh0L/QuNGB0YrQutGK0YIg0YEg0L3QtdGB0LvQtdGC0Lgg0YTQsNC50LvQvtCy0LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7Qu9GD0YfQtdC9OiIKKworIzogZ2l0azoyMTIgZ2l0azoyNDAzCittc2dpZCAiQ29sb3Igd29yZHMiCittc2dzdHIgItCe0YbQstC10YLRj9Cy0LDQvdC1INC90LAg0LTRg9C80LjRgtC1IgorCisjOiBnaXRrOjIxNyBnaXRrOjI0MDMgZ2l0azo4MjQ5IGdpdGs6ODI4MgorbXNnaWQgIk1hcmt1cCB3b3JkcyIKK21zZ3N0ciAi0J7RgtCx0LXQu9GP0LfQstCw0L3QtSDQvdCwINC00YPQvNC40YLQtSIKKworIzogZ2l0azozMjQKK21zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LDQvdCw0LvQuNC3INC90LAg0LLQtdGA0YHQuNC40YLQtToiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QvNCw0L3QtNCw0YLQsCDRgSDigJ4tLWFyZ3NjbWTigJwuIgorCisjOiBnaXRrOjM5MworbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorItCd0LUg0YHQsCDQuNC30LHRgNCw0L3QuCDRhNCw0LnQu9C+0LLQtSDigJQg0YPQutCw0LfQsNC90LAg0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1tZXJnZeKAnCwg0L3QviDQvdGP0LzQsCDQvdC10YHQu9C10YLQuCDRhNCw0LnQu9C+0LLQtS4iCisKKyM6IGdpdGs6Mzk2Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgIiIKKyLQndC1INGB0LAg0LjQt9Cx0YDQsNC90Lgg0YTQsNC50LvQvtCy0LUg4oCUINGD0LrQsNC30LDQvdCwINC1INC+0L/RhtC40Y/RgtCwIOKAni0tbWVyZ2XigJwsINC90L4g0L3Rj9C80LAg0L3QtdGB0LvQtdGC0Lgg0YTQsNC50LvQvtCy0LUgIgorItCyINC+0LPRgNCw0L3QuNGH0LXQvdC40Y/RgtCwLiIKKworIzogZ2l0azo0MTggZ2l0azo1NjYKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ5naXQgbG9n4oCcOiIKKworIzogZ2l0azo0MzYgZ2l0azo1ODIKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICLQn9GA0L7Rh9C40YLQsNC90LUiCisKKyM6IGdpdGs6NDk2IGdpdGs6NDU0OQorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAi0J/RgNC+0YfQuNGC0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsOKApiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjQxIGdpdGs6NDU1MgorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgItCd0LUg0YHQsCDQuNC30LHRgNCw0L3QuCDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGdpdGs6MTQ0OSBnaXRrOjQwNjkgZ2l0azoxMjU4MworbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LXQvSDRgNC10LQiCisKKyM6IGdpdGs6MTUxNQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAi0JjQt9GF0L7QtNGK0YIg0L7RgiDigJ5naXQgbG9n4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsDoiCisKKyM6IGdpdGs6MTc0NAorbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCittc2dzdHIgItCb0LjQv9GB0LLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogZ2l0azoxOTA3IGdpdGs6MTkzNiBnaXRrOjQzMzkgZ2l0azo5Nzg5IGdpdGs6MTEzODggZ2l0azoxMTY2OAorbXNnaWQgIk9LIgorbXNnc3RyICLQlNC+0LHRgNC1IgorCisjOiBnaXRrOjE5MzggZ2l0azo0MzQxIGdpdGs6OTIyNSBnaXRrOjkzMDQgZ2l0azo5NDM0IGdpdGs6OTUyMCBnaXRrOjk3OTEKKyM6IGdpdGs6MTEzODkgZ2l0azoxMTY2OQorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAi0J7RgtC60LDQtyIKKworIzogZ2l0azoyMDg3Cittc2dpZCAiJlVwZGF0ZSIKK21zZ3N0ciAiJtCe0LHQvdC+0LLRj9Cy0LDQvdC1IgorCisjOiBnaXRrOjIwODgKK21zZ2lkICImUmVsb2FkIgorbXNnc3RyICIm0J/RgNC10LfQsNGA0LXQttC00LDQvdC1IgorCisjOiBnaXRrOjIwODkKK21zZ2lkICJSZXJlYWQgcmUmZmVyZW5jZXMiCittc2dzdHIgIibQndCw0L3QvtCy0L4g0L/RgNC+0YfQuNGC0LDQvdC1IgorCisjOiBnaXRrOjIwOTAKK21zZ2lkICImTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICIm0JjQt9Cx0YDQvtGP0LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1IgorCisjOiBnaXRrOjIwOTIKK21zZ2lkICJTdGFydCBnaXQgJmd1aSIKK21zZ3N0ciAiJtCh0YLQsNGA0YLQuNGA0LDQvdC1INC90LAg4oCeZ2l0IGd1aeKAnCIKKworIzogZ2l0azoyMDk0Cittc2dpZCAiJlF1aXQiCittc2dzdHIgIibQodC/0LjRgNCw0L3QtSDQvdCwINC/0YDQvtCz0YDQsNC80LDRgtCwIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRmlsZSIKK21zZ3N0ciAiJtCk0LDQudC7IgorCisjOiBnaXRrOjIwOTgKK21zZ2lkICImUHJlZmVyZW5jZXMiCittc2dzdHIgIibQndCw0YHRgtGA0L7QudC60LgiCisKKyM6IGdpdGs6MjA5NworbXNnaWQgIiZFZGl0IgorbXNnc3RyICIm0KDQtdC00LDQutGC0LjRgNCw0L3QtSIKKworIzogZ2l0azoyMTAyCittc2dpZCAiJk5ldyB2aWV3Li4uIgorbXNnc3RyICIm0J3QvtCyINC40LfQs9C70LXQtOKApiIKKworIzogZ2l0azoyMTAzCittc2dpZCAiJkVkaXQgdmlldy4uLiIKK21zZ3N0ciAiJtCg0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDQuNC30LPQu9C10LTQsOKApiIKKworIzogZ2l0azoyMTA0Cittc2dpZCAiJkRlbGV0ZSB2aWV3IgorbXNnc3RyICIm0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LjQt9Cz0LvQtdC00LAiCisKKyM6IGdpdGs6MjEwNgorbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgIibQktGB0LjRh9C60Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IGdpdGs6MjEwMQorbXNnaWQgIiZWaWV3IgorbXNnc3RyICIm0JjQt9Cz0LvQtdC0IgorCisjOiBnaXRrOjIxMTEgZ2l0azoyMTIxCittc2dpZCAiJkFib3V0IGdpdGsiCittc2dzdHIgIibQntGC0L3QvtGB0L3QviBnaXRrIgorCisjOiBnaXRrOjIxMTIgZ2l0azoyMTI2Cittc2dpZCAiJktleSBiaW5kaW5ncyIKK21zZ3N0ciAiJtCa0LvQsNCy0LjRiNC90Lgg0LrQvtC80LHQuNC90LDRhtC40LgiCisKKyM6IGdpdGs6MjExMCBnaXRrOjIxMjUKK21zZ2lkICImSGVscCIKK21zZ3N0ciAi0J/QvtC80L4m0YkiCisKKyM6IGdpdGs6MjIwMyBnaXRrOjg2ODEKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMToiCisKKyM6IGdpdGs6MjI0NworbXNnaWQgIlJvdyIKK21zZ3N0ciAi0KDQtdC0IgorCisjOiBnaXRrOjIyODUKK21zZ2lkICJGaW5kIgorbXNnc3RyICLQotGK0YDRgdC10L3QtSIKKworIzogZ2l0azoyMzEzCittc2dpZCAiY29tbWl0IgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXRrOjIzMTcgZ2l0azoyMzE5IGdpdGs6NDcxMSBnaXRrOjQ3MzQgZ2l0azo0NzU4IGdpdGs6Njc3OSBnaXRrOjY4NTEKKyM6IGdpdGs6NjkzNgorbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICLRgdGK0LTRitGA0LbQsNGJ0L46IgorCisjOiBnaXRrOjIzMjAgZ2l0azozNTUwIGdpdGs6MzU1NSBnaXRrOjQ3ODcKK21zZ2lkICJ0b3VjaGluZyBwYXRoczoiCittc2dzdHIgItCyINC/0YrRgtC40YnQsNGC0LA6IgorCisjOiBnaXRrOjIzMjEgZ2l0azo0ODAxCittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgItC00L7QsdCw0LLRj9GJ0L4v0L/RgNC10LzQsNGF0LLQsNGJ0L4g0L3QuNC3IgorCisjOiBnaXRrOjIzMjIgZ2l0azo0ODAzCittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICLQv9GA0L7QvNC10L3Rj9GJ0L4g0YDQtdC00L7QstC1INC90LDQv9Cw0YHQstCw0YnQuDoiCisKKyM6IGdpdGs6MjMzMSBnaXRrOjIzMzMgZ2l0azo0NzkwCittc2dpZCAiRXhhY3QiCittc2dzdHIgItCi0L7Rh9C90L4iCisKKyM6IGdpdGs6MjMzMyBnaXRrOjQ4NzggZ2l0azo2NzQ3Cittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAi0JHQtdC3INGA0LXQs9C40YHRgtGK0YAiCisKKyM6IGdpdGs6MjMzMyBnaXRrOjQ3NjAgZ2l0azo0ODc2IGdpdGs6Njc0MworbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAi0KDQtdCzLiDQuNC30YDQsNC3IgorCisjOiBnaXRrOjIzMzUgZ2l0azoyMzM2IGdpdGs6NDg5OCBnaXRrOjQ5MjggZ2l0azo0OTM1IGdpdGs6Njg3MiBnaXRrOjY5NDAKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICLQktGB0LjRh9C60Lgg0L/QvtC70LXRgtCwIgorCisjOiBnaXRrOjIzMzYgZ2l0azo0ODk1IGdpdGs6NDkyOCBnaXRrOjY4MTAKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAi0J/RitGA0LLQuCDRgNC10LQiCisKKyM6IGdpdGs6MjMzNyBnaXRrOjQ4OTUgZ2l0azo2ODEwIGdpdGs6Njk0MCBnaXRrOjc0MTMKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAi0JrQvtC80LXQvdGC0LDRgNC4IgorCisjOiBnaXRrOjIzMzcgZ2l0azo0ODk1IGdpdGs6NDkwMCBnaXRrOjQ5MzUgZ2l0azo2ODEwIGdpdGs6NzM0OCBnaXRrOjg4NTkKKyM6IGdpdGs6ODg3NAorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAi0JDQstGC0L7RgCIKKworIzogZ2l0azoyMzM3IGdpdGs6NDg5NSBnaXRrOjY4MTAgZ2l0azo3MzUwCittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICLQn9C+0LTQsNCy0LDRiSIKKworIzogZ2l0azoyMzcxCittc2dpZCAiU2VhcmNoIgorbXNnc3RyICLQotGK0YDRgdC10L3QtSIKKworIzogZ2l0azoyMzc5Cittc2dpZCAiRGlmZiIKK21zZ3N0ciAi0KDQsNC30LvQuNC60LgiCisKKyM6IGdpdGs6MjM4MQorbXNnaWQgIk9sZCB2ZXJzaW9uIgorbXNnc3RyICLQodGC0LDRgNCwINCy0LXRgNGB0LjRjyIKKworIzogZ2l0azoyMzgzCittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgItCd0L7QstCwINCy0LXRgNGB0LjRjyIKKworIzogZ2l0azoyMzg2Cittc2dpZCAiTGluZXMgb2YgY29udGV4dCIKK21zZ3N0ciAi0JrQvtC90YLQtdC60YHRgiDQsiDRgNC10LTQvtCy0LUiCisKKyM6IGdpdGs6MjM5NgorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgItCf0YDQsNC30L3QuNGC0LUg0LfQvdCw0YbQuCDQsdC10Lcg0LfQvdCw0YfQtdC90LjQtSIKKworIzogZ2l0azoyNDAwIGdpdGs6MjQwMiBnaXRrOjc5ODMgZ2l0azo4MjM1Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICLQn9C+0YDQtdC00L7QstC4INGA0LDQt9C70LjQutC4IgorCisjOiBnaXRrOjI0NjcKK21zZ2lkICJQYXRjaCIKK21zZ3N0ciAi0JrRgNGK0L/QutCwIgorCisjOiBnaXRrOjI0NjkKK21zZ2lkICJUcmVlIgorbXNnc3RyICLQlNGK0YDQstC+IgorCisjOiBnaXRrOjI2MzkgZ2l0azoyNjYwCittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICLQoNCw0LfQu9C40LrQuCDQvNC10LbQtNGDINGC0L7QstCwINC4INC40LfQsdGA0LDQvdC+0YLQviIKKworIzogZ2l0azoyNjQwIGdpdGs6MjY2MQorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAi0KDQsNC30LvQuNC60Lgg0LzQtdC20LTRgyDQuNC30LHRgNCw0L3QvtGC0L4g0Lgg0YLQvtCy0LAiCisKKyM6IGdpdGs6MjY0MSBnaXRrOjI2NjIKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQutGA0YrQv9C60LAiCisKKyM6IGdpdGs6MjY0MiBnaXRrOjkyODMKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQtdGC0LjQutC10YIiCisKKyM6IGdpdGs6MjY0MworbXNnaWQgIkNvcHkgY29tbWl0IHN1bW1hcnkiCittc2dzdHIgItCa0L7Qv9C40YDQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXRrOjI2NDQgZ2l0azo5NDE0Cittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgItCX0LDQv9Cw0LfQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+INCy0YrQsiDRhNCw0LnQuyIKKworIzogZ2l0azoyNjQ1Cittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC90L7QsiDQutC70L7QvSIKKworIzogZ2l0azoyNjQ2Cittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgItCe0YLQsdC40YDQsNC90LUg0L3QsCDRgtC+0LLQsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXRrOjI2NDcKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLQn9GA0LjQstC10LbQtNCw0L3QtSDQvdCwINCy0YrRgNGF0LAg0L3QsCDQutC70L7QvdCwINC60YrQvCDRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6MjY0OAorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgItCe0YLQsdC10LvRj9C30LLQsNC90LUg0L3QsCDRgtC+0LLQsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAi0JLRgNGK0YnQsNC90LUg0LrRitC8INC+0YLQsdC10LvRj9C30LDQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXRrOjI2NTAKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAi0J7RgtC60YDQuNCy0LDQvdC1INC4INC+0YLQsdC10LvRj9C30LLQsNC90LUg0L3QsCDQvdCw0YHQu9C10LTQvdC40YbQuNGC0LUiCisKKyM6IGdpdGs6MjY1MQorbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgorbXNnc3RyICLQodGA0LDQstC90LXQvdC40LUg0YEg0L7RgtCx0LXQu9GP0LfQsNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6MjY1MiBnaXRrOjI2NjMKK21zZ2lkICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAi0KDQsNC30LvQuNC60Lgg0LzQtdC20LTRgyDRgtC+0LLQsCDQuCDQvtGC0LHQtdC70Y/Qt9Cw0L3QvtGC0L4iCisKKyM6IGdpdGs6MjY1MyBnaXRrOjI2NjQKK21zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKK21zZ3N0ciAi0KDQsNC30LvQuNC60Lgg0LzQtdC20LTRgyDQvtGC0LHQtdC70Y/Qt9Cw0L3QvtGC0L4g0Lgg0YLQvtCy0LAiCisKKyM6IGdpdGs6MjY1NAorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAi0J7RgtC80Y/QvdCwINC90LAg0YLQvtCy0LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azoyNjcwCittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICLQmNC30YLQtdCz0LvRj9C90LUg0L3QsCDRgtC+0LfQuCDQutC70L7QvSIKKworIzogZ2l0azoyNjcxCittc2dpZCAiUmVuYW1lIHRoaXMgYnJhbmNoIgorbXNnc3RyICLQn9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDRgtC+0LfQuCDQutC70L7QvSIKKworIzogZ2l0azoyNjcyCittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDRgtC+0LfQuCDQutC70L7QvSIKKworIzogZ2l0azoyNjczCittc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKK21zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSDQvdCwINC40LzQtdGC0L4g0L3QsCDQutC70L7QvdCwIgorCisjOiBnaXRrOjI2ODAKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgItCe0YLQsdC10LvRj9C30LLQsNC90LUg0Lgg0L3QsCDRgtC+0LLQsCIKKworIzogZ2l0azoyNjgxCittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAi0J7RgtCx0LXQu9GP0LfQstCw0L3QtSDRgdCw0LzQviDQvdCwINGC0L7QstCwIgorCisjOiBnaXRrOjI2ODIKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICLQktGK0L3RiNC90LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINGA0LDQt9C70LjQutC4IgorCisjOiBnaXRrOjI2ODMKK21zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgorbXNnc3RyICLQkNC90L7RgtC40YDQsNC90LUg0L3QsCDRgNC+0LTQuNGC0LXQu9GB0LrQvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azoyNjg0Cittc2dpZCAiQ29weSBwYXRoIgorbXNnc3RyICLQmtC+0L/QuNGA0LDQvdC1INC90LAg0L/RitGC0Y8iCisKKyM6IGdpdGs6MjY5MQorbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAi0J/QvtC60LDQt9Cy0LDQvdC1INC90LAg0L/RgNC+0LjQt9GF0L7QtNCwINC90LAg0YLQvtC30Lgg0YDQtdC0IgorCisjOiBnaXRrOjI2OTIKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgItCY0LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeZ2l0IGd1aSBibGFtZeKAnCDQstGK0YDRhdGDINGC0L7Qt9C4INGA0LXQtCIKKworIzogZ2l0azozMDM2Cittc2dpZCAiQWJvdXQgZ2l0ayIKK21zZ3N0ciAi0J7RgtC90L7RgdC90L4gZ2l0ayIKKworIzogZ2l0azozMDM4Cittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayDigJQg0LLQuNC30YPQsNC70LjQt9Cw0YbQuNGPINC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQsiBHaXRcbiIKKyJcbiIKKyLQkNCy0YLQvtGA0YHQutC4INC/0YDQsNCy0LA6IMKpIDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorItCY0LfQv9C+0LvQt9Cy0LDQudGC0LUg0Lgg0YDQsNC30L/RgNC+0YHRgtGA0LDQvdGP0LLQsNC50YLQtSDQv9GA0Lgg0YPRgdC70L7QstC40Y/RgtCwINC90LAg0J7Qn9CbINC90LAg0JPQndCjIgorCisjOiBnaXRrOjMwNDYgZ2l0azozMTEzIGdpdGs6MTAwMDQKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAi0JfQsNGC0LLQsNGA0Y/QvdC1IgorCisjOiBnaXRrOjMwNjcKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAi0JrQu9Cw0LLQuNGI0L3QuCDQutC+0LzQsdC40L3QsNGG0LjQuCIKKworIzogZ2l0azozMDcwCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICLQmtC70LDQstC40YjQvdC4INC60L7QvNCx0LjQvdCw0YbQuNC4OiIKKworIzogZ2l0azozMDcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVE+XHRcdFF1aXQiCittc2dzdHIgIjwlcy1RPlx0XHTQodC/0LjRgNCw0L3QtSDQvdCwINC/0YDQvtCz0YDQsNC80LDRgtCwIgorCisjOiBnaXRrOjMwNzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgorbXNnc3RyICI8JXMtVz5cdFx00JfQsNGC0LLQsNGA0Y/QvdC1INC90LAg0L/RgNC+0LfQvtGA0LXRhtCwIgorCisjOiBnaXRrOjMwNzQKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxIb21lPlx0XHTQmtGK0Lwg0L/RitGA0LLQvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azozMDc1Cittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx00JrRitC8INC/0L7RgdC70LXQtNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6MzA3NgorbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPFVwPiwgcCwga1x00JXQtNC90L4g0L/QvtC00LDQstCw0L3QtSDQvdCw0LPQvtGA0LUiCisKKyM6IGdpdGs6MzA3NworbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxEb3duPiwgbiwgalx00JXQtNC90L4g0L/QvtC00LDQstCw0L3QtSDQvdCw0LTQvtC70YMiCisKKyM6IGdpdGs6MzA3OAorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxMZWZ0PiwgeiwgaFx00J3QsNC30LDQtCDQsiDQuNGB0YLQvtGA0LjRj9GC0LAiCisKKyM6IGdpdGs6MzA3OQorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8UmlnaHQ+LCB4LCBsXHTQndCw0L/RgNC10LQg0LIg0LjRgdGC0L7RgNC40Y/RgtCwIgorCisjOiBnaXRrOjMwODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbj5cdEdvIHRvIG4tdGggcGFyZW50IG9mIGN1cnJlbnQgY29tbWl0IGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPCVzLW4+XHTQmtGK0Lwgbi3RgtC40Y8g0YDQvtC00LjRgtC10Lsg0L3QsCDRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0LIg0LjRgdGC0L7RgNC40Y/RgtCwIgorCisjOiBnaXRrOjMwODEKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VVcD5cdNCh0YLRgNCw0L3QuNGG0LAg0L3QsNCz0L7RgNC1INCyINGB0L/QuNGB0YrQutCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAiCisKKyM6IGdpdGs6MzA4MgorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VEb3duPlx00KHRgtGA0LDQvdC40YbQsCDQvdCw0LTQvtC70YMg0LIg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKKworIzogZ2l0azozMDgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdNCa0YrQvCDQvdCw0YfQsNC70L7RgtC+INC90LAg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHTQmtGK0Lwg0LrRgNCw0Y8g0L3QsCDRgdC/0LjRgdGK0LrQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwIgorCisjOiBnaXRrOjMwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1VcD5cdNCg0LXQtCDQvdCw0LPQvtGA0LUg0LIg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBnaXRrOjMwODYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtRG93bj5cdNCg0LXQtCDQvdCw0LTQvtC70YMg0LIg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBnaXRrOjMwODcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZVVwPlx00KHRgtGA0LDQvdC40YbQsCDQvdCw0LPQvtGA0LUg0LIg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBnaXRrOjMwODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VEb3duPlx00KHRgtGA0LDQvdC40YbQsCDQvdCw0LTQvtC70YMg0LIg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBnaXRrOjMwODkKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1VcD5cdNCi0YrRgNGB0LXQvdC1INC90LDQt9Cw0LQgKNCy0LjQt9GD0LDQu9C90L4g0L3QsNCz0L7RgNC1LCDQuNGB0YLQvtGA0LjRh9C10YHQutC4IOKAlCDQv9C+0YHQu9C10LTQstCw0YnQuCkiCisKKyM6IGdpdGs6MzA5MAorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICIiCisiPFNoaWZ0LURvd24+XHTQotGK0YDRgdC10L3QtSDQvdCw0L/RgNC10LQgKNCy0LjQt9GD0LDQu9C90L4g0L3QsNC00L7Qu9GDLCDQuNGB0YLQvtGA0LjRh9C10YHQutC4IOKAlCDQv9GA0LXQtNGF0L7QttC00LDRidC4KSIKKworIzogZ2l0azozMDkxCittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHTQodGC0YDQsNC90LjRhtCwINC90LDQs9C+0YDQtSDQsiDQuNC30LPQu9C10LTQsCDQt9CwINGA0LDQt9C70LjQutC4IgorCisjOiBnaXRrOjMwOTIKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJhY2tzcGFjZT5cdNCh0YLRgNCw0L3QuNGG0LAg0L3QsNC00L7Qu9GDINCyINC40LfQs9C70LXQtNCwINC30LAg0YDQsNC30LvQuNC60LgiCisKKyM6IGdpdGs6MzA5MworbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8U3BhY2U+XHRcdNCh0YLRgNCw0L3QuNGG0LAg0L3QsNC00L7Qu9GDINCyINC40LfQs9C70LXQtNCwINC30LAg0YDQsNC30LvQuNC60LgiCisKKyM6IGdpdGs6MzA5NAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHQxOCDRgNC10LTQsCDQvdCw0LPQvtGA0LUg0LIg0LjQt9Cz0LvQtdC00LAg0LfQsCDRgNCw0LfQu9C40LrQuCIKKworIzogZ2l0azozMDk1Cittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0MTgg0YDQtdC00LAg0L3QsNC00L7Qu9GDINCyINC40LfQs9C70LXQtNCwINC30LAg0YDQsNC30LvQuNC60LgiCisKKyM6IGdpdGs6MzA5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx00KLRitGA0YHQtdC90LUiCisKKyM6IGdpdGs6MzA5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHTQmtGK0Lwg0YHQu9C10LTQstCw0YnQsNGC0LAg0L/QvtGP0LLQsCIKKworIzogZ2l0azozMDk4Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdNCa0YrQvCDRgdC70LXQtNCy0LDRidCw0YLQsCDQv9C+0Y/QstCwIgorCisjOiBnaXRrOjMwOTkKK21zZ2lkICJnXHRcdEdvIHRvIGNvbW1pdCIKK21zZ3N0ciAiZ1x0XHTQmtGK0Lwg0L/QvtGB0LvQtdC00L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azozMTAwCittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHTQpNC+0LrRg9GBINCy0YrRgNGF0YMg0L/QvtC70LXRgtC+INC30LAg0YLRitGA0YHQtdC90LUiCisKKyM6IGdpdGs6MzEwMQorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHTQmtGK0Lwg0L/RgNC10LTQuNGI0L3QsNGC0LAg0L/QvtGP0LLQsCIKKworIzogZ2l0azozMTAyCittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHTQodC70LXQtNCy0LDRiSDRhNCw0LnQuyDQsiDQuNC30LPQu9C10LTQsCDQt9CwINGA0LDQt9C70LjQutC4IgorCisjOiBnaXRrOjMxMDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHTQotGK0YDRgdC10L3QtSDQvdCwINGB0LvQtdC00LLQsNGJ0LDRgtCwINC/0L7Rj9Cy0LAg0LIg0LjQt9Cz0LvQtdC00LAg0LfQsCDRgNCw0LfQu9C40LrQuCIKKworIzogZ2l0azozMTA0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdNCi0YrRgNGB0LXQvdC1INC90LAg0L/RgNC10LTQuNGI0L3QsNGC0LAg0L/QvtGP0LLQsCDQsiDQuNC30LPQu9C10LTQsCDQt9CwINGA0LDQt9C70LjQutC4IgorCisjOiBnaXRrOjMxMDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1ArPlx00J/Qvi3Qs9C+0LvRj9C8INGA0LDQt9C80LXRgCDQvdCwINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azozMTA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1wbHVzPlx00J/Qvi3Qs9C+0LvRj9C8INGA0LDQt9C80LXRgCDQvdCwINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azozMTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdNCf0L4t0LzQsNC70YrQuiDRgNCw0LfQvNC10YAg0L3QsCDRiNGA0LjRhNGC0LAiCisKKyM6IGdpdGs6MzEwOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1pbnVzPlx00J/Qvi3QvNCw0LvRitC6INGA0LDQt9C80LXRgCDQvdCwINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azozMTA5Cittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx00J7QsdC90L7QstGP0LLQsNC90LUiCisKKyM6IGdpdGs6MzU3NCBnaXRrOjM1ODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDRgdGK0LfQtNCw0LLQsNC90LXRgtC+INC90LAg0LLRgNC10LzQtdC90L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g4oCeJXPigJw6IgorCisjOiBnaXRrOjM1OTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQv9C+0LvRg9GH0LDQstCw0L3QtdGC0L4g0L3QsCDigJ4lc+KAnCDQvtGCICVzOiIKKworIzogZ2l0azozNjU5Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutC+0LzQsNC90LTQsDoiCisKKyM6IGdpdGs6MzgwOAorbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICLQotCw0LrQvtCy0LAg0L/QvtC00LDQstCw0L3QtSDQvdGP0LzQsCIKKworIzogZ2l0azozODIyCittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICLigJ5naXQgZ3VpIGJsYW1l4oCcOiDQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutC+0LzQsNC90LTQsDoiCisKKyM6IGdpdGs6Mzg1MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCittc2dzdHIgItCS0YrRgNGF0YrRgiDQt9CwINGB0LvQuNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9OiAlcyIKKworIzogZ2l0azozODYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0L/RgNC+0YfQuNGC0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LA6ICVzIgorCisjOiBnaXRrOjM4ODYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICLQmtC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGJsYW1l4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGC0LDRgNGC0LjRgNCw0L3QsDogJXMiCisKKyM6IGdpdGs6Mzg4OSBnaXRrOjY3NzgKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgItCi0YrRgNGB0LXQvdC1IgorCisjOiBnaXRrOjM5MjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9C/0YrQu9C90LXQvdC40LXRgtC+INC90LAg4oCeZ2l0IGJsYW1l4oCcOiAlcyIKKworIzogZ2l0azozOTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAi0KLQvtC30Lgg0YDQtdC0INC40LTQstCwINC+0YIg0L/QvtC00LDQstCw0L3QtdGC0L4gJXMsINC60L7QtdGC0L4g0L3QtSDQtSDQsiDQuNC30LPQu9C10LTQsCIKKworIzogZ2l0azozOTYzCittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LLRitC90YjQvdCw0YLQsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0YDQsNC30LvQuNC60Lg6IgorCisjOiBnaXRrOjQwNjcKK21zZ2lkICJBbGwgZmlsZXMiCittc2dzdHIgItCS0YHQuNGH0LrQuCDRhNCw0LnQu9C+0LLQtSIKKworIzogZ2l0azo0MDkxCittc2dpZCAiVmlldyIKK21zZ3N0ciAi0JjQt9Cz0LvQtdC0IgorCisjOiBnaXRrOjQwOTQKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAi0JTQtdGE0LjQvdC40YbQuNGPINC90LAg0LjQt9Cz0LvQtdC0INCyIEdpdGsiCisKKyM6IGdpdGs6NDA5OAorbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAi0JfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0YLQvtC30Lgg0LjQt9Cz0LvQtdC0IgorCisjOiBnaXRrOjQwOTkKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICLQo9C60LDQt9Cw0YLQtdC70LggKNGB0L/QuNGB0YrQuiDRgSDRgNCw0LfQtNC10LvQuNGC0LXQuyDQuNC90YLQtdGA0LLQsNC7KToiCisKKyM6IGdpdGs6NDEwMAorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgItCa0LvQvtC90Lgg0Lgg0LXRgtC40LrQtdGC0Lg6IgorCisjOiBnaXRrOjQxMDEKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAi0JLRgdC40YfQutC4INGD0LrQsNC30LDRgtC10LvQuCIKKworIzogZ2l0azo0MTAyCittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgItCS0YHQuNGH0LrQuCAo0LvQvtC60LDQu9C90LgpINC60LvQvtC90LgiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICLQktGB0LjRh9C60Lgg0LXRgtC40LrQtdGC0LgiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgItCS0YHQuNGH0LrQuCDRgdC70LXQtNGP0YnQuCDQutC70L7QvdC4IgorCisjOiBnaXRrOjQxMDUKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICLQmNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC/0L7QtNCw0LLQsNC90LUgKNGA0LXQsy4g0LjQt9GALik6IgorCisjOiBnaXRrOjQxMDYKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICLQkNCy0YLQvtGAOiIKKworIzogZ2l0azo0MTA3Cittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAi0J/QvtC00LDQuzoiCisKKyM6IGdpdGs6NDEwOAorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi0KHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1OiIKKworIzogZ2l0azo0MTA5Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgItCh0YrQstC/0LDQtNC10L3QuNC1INC/0L4g0LLRgdC40YfQutC4INGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC60Lgg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviIKKworIzogZ2l0azo0MTEwCittc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAi0J3QtSDRgdGK0LLQv9Cw0LTQsCDQv9C+INC90LjQutC+0Y8g0L7RgiDRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQutC40YLQtSDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+IgorCisjOiBnaXRrOjQxMTEKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90Lgg0L/QviDRhNCw0LnQu9C+0LLQtdGC0LU6IgorCisjOiBnaXRrOjQxMTIKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgItCU0L7RgdC70L7QstC10L0g0L3QuNC3IgorCisjOiBnaXRrOjQxMTMKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgItCg0LXQs9GD0LvRj9GA0LXQvSDQuNC30YDQsNC3IgorCisjOiBnaXRrOjQxMTQKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAi0J3QuNC3INC30LAg0YLRitGA0YHQtdC90LU6IgorCisjOiBnaXRrOjQxMTUKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyLQlNCw0YLQsCDQvdCwINC/0L7QtNCw0LLQsNC90LUgKOKAnjIgd2Vla3MgYWdv4oCcICjQv9GA0LXQtNC4IDIg0YHQtdC00LzQuNGG0LgpLCDigJ4yMDA5LTAzLTE3IDE1OjI3OjM44oCcLCAiCisi4oCeTWFyY2ggMTcsIDIwMDkgMTU6Mjc6MzjigJwpOiIKKworIzogZ2l0azo0MTE2Cittc2dpZCAiU2luY2U6IgorbXNnc3RyICLQntGCOiIKKworIzogZ2l0azo0MTE3Cittc2dpZCAiVW50aWw6IgorbXNnc3RyICLQlNC+OiIKKworIzogZ2l0azo0MTE4Cittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIiIKKyLQntCz0YDQsNC90LjRh9Cw0LLQsNC90LUg0Lgv0LjQu9C4INC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0L7Qv9GA0LXQtNC10LvQtdC9INCx0YDQvtC5INCy0LXRgNGB0LjQuCAo0L3QtdC+0YLRgNC40YbQsNGC0LXQu9C90L4g0YbRj9C70L4gIgorItGH0LjRgdC70L4pOiIKKworIzogZ2l0azo0MTE5Cittc2dpZCAiTnVtYmVyIHRvIHNob3c6IgorbXNnc3RyICLQkdGA0L7QuSDQv9C+0LrQsNC30LDQvdC4OiIKKworIzogZ2l0azo0MTIwCittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICLQkdGA0L7QuSDQv9GA0LXRgdC60L7Rh9C10L3QuDoiCisKKyM6IGdpdGs6NDEyMQorbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgItCg0LDQt9C90Lg6IgorCisjOiBnaXRrOjQxMjIKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgItCf0L7QtNGA0LXQttC00LDQvdC1INC/0L4g0LTQsNGC0LAiCisKKyM6IGdpdGs6NDEyMworbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICLQntGC0LHQtdC70Y/Qt9Cy0LDQvdC1INC90LAg0YHRgtGA0LDQvdC40YLQtSDQv9C+INC60LvQvtC90LAiCisKKyM6IGdpdGs6NDEyNAorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAi0KHQsNC80L4g0L/RitGA0LLQuNGPINGA0L7QtNC40YLQtdC7IgorCisjOiBnaXRrOjQxMjUKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAi0J7Qv9GA0L7RgdGC0LXQvdCwINC40YHRgtC+0YDQuNGPIgorCisjOiBnaXRrOjQxMjYKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAi0JTQvtC/0YrQu9C90LjRgtC10LvQvdC4INCw0YDQs9GD0LzQtdC90YLQuCDQutGK0Lwg4oCeZ2l0IGxvZ+KAnDoiCisKKyM6IGdpdGs6NDEyNworbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICLQktGK0LLQtdC00LXRgtC1INGE0LDQudC70L7QstC10YLQtSDQuCDQtNC40YDQtdC60YLQvtGA0LjQuNGC0LUg0LfQsCDQstC60LvRjtGH0LLQsNC90LUsINC/0L4g0LXQu9C10LzQtdC90YIg0L3QsCDRgNC10LQiCisKKyM6IGdpdGs6NDEyOAorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICIiCisi0JrQvtC80LDQvdC00LAg0LfQsCDQs9C10L3QtdGA0LjRgNCw0L3QtdGC0L4g0L3QsCDQtNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0L/QvtC00LDQstCw0L3QuNGPLCDQutC+0LjRgtC+INC00LAg0LHRitC00LDRgiDQstC60LvRjtGH0LXQvdC4OiIKKworIzogZ2l0azo0MjUyCittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrOiDRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0LjQt9Cz0LvQtdC0IgorCisjOiBnaXRrOjQyNjAKK21zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKK21zZ3N0ciAi4oCUINC60YDQuNGC0LXRgNC40Lgg0LfQsCDQuNC30LHQvtGAINC90LAg0LLQtdGA0YHQuNC4IgorCisjOiBnaXRrOjQyNjUKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgItCY0LzQtSDQvdCwINC40LfQs9C70LXQtCIKKworIzogZ2l0azo0MzQwCittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAi0J/RgNC40LvQsNCz0LDQvdC1IChGNSkiCisKKyM6IGdpdGs6NDM3OAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINCyINCw0YDQs9GD0LzQtdC90YLQuNGC0LUg0LfQsCDQuNC30LHQvtGAINC90LAg0L/QvtC00LDQstCw0L3QuNGPOiIKKworIzogZ2l0azo0NDMzIGdpdGs6NDQ4NiBnaXRrOjQ5NDggZ2l0azo0OTYyIGdpdGs6NjIzMiBnaXRrOjEyNTI0IGdpdGs6MTI1MjUKK21zZ2lkICJOb25lIgorbXNnc3RyICLQndGP0LzQsCIKKworIzogZ2l0azo1MDQ1IGdpdGs6NTA1MAorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgItCd0LDRgdC70LXQtNC90LjQuiIKKworIzogZ2l0azo1MDQ2Cittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgItCd0LUg0LUg0L3QsNGB0LvQtdC00L3QuNC6IgorCisjOiBnaXRrOjUwNTMgZ2l0azo1MDU4Cittc2dpZCAiQW5jZXN0b3IiCittc2dzdHIgItCf0YDQtdC00YjQtdGB0YLQstC10L3QuNC6IgorCisjOiBnaXRrOjUwNTQKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgItCd0LUg0LUg0L/RgNC10LTRiNC10YHRgtCy0LXQvdC40LoiCisKKyM6IGdpdGs6NTM0OAorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAi0JvQvtC60LDQu9C90Lgg0L/RgNC+0LzQtdC90Lgg0LTQvtCx0LDQstC10L3QuCDQutGK0Lwg0LjQvdC00LXQutGB0LAsINC90L4g0L3QtdC/0L7QtNCw0LTQtdC90LgiCisKKyM6IGdpdGs6NTM4NAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICLQm9C+0LrQsNC70L3QuCDQv9GA0L7QvNC10L3QuCDQuNC30LLRitC9INC40L3QtNC10LrRgdCwIgorCisjOiBnaXRrOjcxNTgKK21zZ2lkICJhbmQgbWFueSBtb3JlIgorbXNnc3RyICLQuCDQvtGJ0LUg0LzQvdC+0LPQviIKKworIzogZ2l0azo3MTYxCittc2dpZCAibWFueSIKK21zZ3N0ciAi0LzQvdC+0LPQviIKKworIzogZ2l0azo3MzUyCittc2dpZCAiVGFnczoiCittc2dzdHIgItCV0YLQuNC60LXRgtC4OiIKKworIzogZ2l0azo3MzY5IGdpdGs6NzM3NSBnaXRrOjg4NTQKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgItCg0L7QtNC40YLQtdC7IgorCisjOiBnaXRrOjczODAKK21zZ2lkICJDaGlsZCIKK21zZ3N0ciAi0JTQtdGC0LUiCisKKyM6IGdpdGs6NzM4OQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAi0JrQu9C+0L0iCisKKyM6IGdpdGs6NzM5MgorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgItCh0LvQtdC00LLQsCIKKworIzogZ2l0azo3Mzk1Cittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgItCf0YDQtdC00YjQtdGB0YLQstCwIgorCisjOiBnaXRrOjc5OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQv9C+0LvRg9GH0LDQstCw0L3QtdGC0L4g0L3QsCDRgNCw0LfQu9C40LrQuNGC0LU6ICVzIgorCisjOiBnaXRrOjg2NzkKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAi0JrRitC8INGA0LXQtDoiCisKKyM6IGdpdGs6ODcwMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICLQodGK0LrRgNCw0YLQtdC90LDRgtCwINGB0YPQvNCwINC/0L4gU0hBMSAlcyDQvdC1INC1INC10LTQvdC+0LfQvdCw0YfQvdCwIgorCisjOiBnaXRrOjg3MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgItCd0LXQv9C+0LfQvdCw0YLQsCDQstC10YDRgdC40Y8gJXMiCisKKyM6IGdpdGs6ODcxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICLQndC10L/QvtC30L3QsNGC0LAg0YHRg9C80LAg0L/QviBTSEExICVzIgorCisjOiBnaXRrOjg3MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAi0JLQtdGA0YHQuNGPICVzINC90LUg0LUg0LIg0YLQtdC60YPRidC40Y8g0LjQt9Cz0LvQtdC0IgorCisjOiBnaXRrOjg4NjEgZ2l0azo4ODc2Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAi0JTQsNGC0LAiCisKKyM6IGdpdGs6ODg2NAorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICLQlNC10YbQsCIKKworIzogZ2l0azo4OTI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgItCX0LDQvdGD0LvRj9Cy0LDQvdC1INC90LAg0LrQu9C+0L3QsCDigJ4lc+KAnCDQutGK0Lwg0YLQtdC60YPRidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXRrOjg5MjkKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAi0J3QtdGB0LLRitGA0LfQsNC9INCy0YDRitGFOiDQvdC10LLRitC30LzQvtC20L3QviDQt9Cw0L3Rg9C70Y/QstCw0L3QtSIKKworIzogZ2l0azo5MDM0IGdpdGs6OTA0MAorbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCittc2dzdHIgItCf0YDQvtC/0YPRgdC60LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4g0L3QsCDRgdC70LjQstCw0L3QtdGC0L4iCisKKyM6IGdpdGs6OTA0OSBnaXRrOjkwNTQKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0L/QvtC70YPRh9Cw0LLQsNC90LXRgtC+INC90LAg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQsCDQvdCwICIKKworIzogZ2l0azo5MDUwIGdpdGs6OTA1NQorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiDigJQg0YHQv9C40YDQsNC90LVcbiIKKworIzogZ2l0azo5MDYwIGdpdGs6OTA2MyBnaXRrOjkwNzEgZ2l0azo5MDg1IGdpdGs6OTA5NAorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6OTA2NAorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiINC1INGB0YrRidCw0YLQsCDQutGA0YrQv9C60LAg0LrQsNGC0L5cbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNzIKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIg0YHQtSDRgNCw0LfQu9C40YfQsNCy0LAg0L7RglxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA3NAorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyLQoNCw0LfQu9C40LrQsCDQvNC10LbQtNGDINC/0L7QtNCw0LLQsNC90LjRj9GC0LA6XG4iCisiXG4iCisKKyM6IGdpdGs6OTA4NiBnaXRrOjkwOTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiINC40LzQsCAlcyDQtNC10YbQsCDigJQg0YHQv9C40YDQsNC90LVcbiIKKworIzogZ2l0azo5MTE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNC/0LDQt9Cy0LDQvdC10YLQviDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+INCy0YrQsiDRhNCw0LnQuzogJXMiCisKKyM6IGdpdGs6OTEyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9GH0LjRgdC70Y/QstCw0L3QtdGC0L4g0L3QsCDRgNCw0LfQu9C40LrQuNGC0LUg0LzQtdC20LTRgyDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwOiAlcyIKKworIzogZ2l0azo5MTY2Cittc2dpZCAiVG9wIgorbXNnc3RyICLQndCw0Lkt0LPQvtGA0LUiCisKKyM6IGdpdGs6OTE2NworbXNnaWQgIkZyb20iCittc2dzdHIgItCe0YIiCisKKyM6IGdpdGs6OTE3MgorbXNnaWQgIlRvIgorbXNnc3RyICLQlNC+IgorCisjOiBnaXRrOjkxOTYKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAi0JPQtdC90LXRgNC40YDQsNC90LUg0L3QsCDQutGA0YrQv9C60LAiCisKKyM6IGdpdGs6OTE5OAorbXNnaWQgIkZyb206IgorbXNnc3RyICLQntGCOiIKKworIzogZ2l0azo5MjA3Cittc2dpZCAiVG86IgorbXNnc3RyICLQlNC+OiIKKworIzogZ2l0azo5MjE2Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAi0J7QsdGA0YrRidCw0L3QtSIKKworIzogZ2l0azo5MjE4IGdpdGs6OTQyOAorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAi0JfQsNC/0LDQt9Cy0LDQvdC1INCy0YrQsiDRhNCw0LnQu9CwOiIKKworIzogZ2l0azo5MjI0Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgItCT0LXQvdC10YDQuNGA0LDQvdC1IgorCisjOiBnaXRrOjkyNjIKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC60YDRitC/0LrQsDoiCisKKyM6IGdpdGs6OTI4NSBnaXRrOjk0MTYgZ2l0azo5NTA0Cittc2dpZCAiSUQ6IgorbXNnc3RyICLQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgDoiCisKKyM6IGdpdGs6OTI5NAorbXNnaWQgIlRhZyBuYW1lOiIKK21zZ3N0ciAi0JjQvNC1INC90LAg0LXRgtC40LrQtdGCOiIKKworIzogZ2l0azo5Mjk3Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgItCh0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQtdGC0LjQutC10YIg0LUg0L3QtdC30LDQtNGK0LvQttC40YLQtdC70L3QviIKKworIzogZ2l0azo5Mjk5Cittc2dpZCAiVGFnIG1lc3NhZ2U6IgorbXNnc3RyICLQodGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQtdGC0LjQutC10YI6IgorCisjOiBnaXRrOjkzMDMgZ2l0azo5NDc0Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6OTMyMQorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAi0JvQuNC/0YHQstCwINC40LzQtSDQvdCwINC10YLQuNC60LXRgiIKKworIzogZ2l0azo5MzI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi0JXRgtC40LrQtdGC0YrRgiDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogZ2l0azo5MzM1Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDRgdGK0LfQtNCw0LLQsNC90LXRgtC+INC90LAg0LXRgtC40LrQtdGCOiIKKworIzogZ2l0azo5NDI1Cittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgItCa0L7QvNCw0L3QtNCwOiIKKworIzogZ2l0azo5NDMzCittc2dpZCAiV3JpdGUiCittc2dzdHIgItCX0LDQv9Cw0LfQstCw0L3QtSIKKworIzogZ2l0azo5NDUxCittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC30LDQv9Cw0LfQstCw0L3QtdGC0L4g0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQvjoiCisKKyM6IGdpdGs6OTQ3MworbXNnaWQgIkNyZWF0ZSBicmFuY2giCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC60LvQvtC9IgorCisjOiBnaXRrOjk0ODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZW5hbWUgYnJhbmNoICVzIgorbXNnc3RyICLQn9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDQutC70L7QvdCwIOKAniVz4oCcIgorCisjOiBnaXRrOjk0OTAKK21zZ2lkICJSZW5hbWUiCittc2dzdHIgItCf0YDQtdC40LzQtdC90YPQstCw0L3QtSIKKworIzogZ2l0azo5NTE0Cittc2dpZCAiTmFtZToiCittc2dzdHIgItCY0LzQtToiCisKKyM6IGdpdGs6OTUzOAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgItCj0LrQsNC20LXRgtC1INC40LzQtSDQt9CwINC90L7QstC40Y8g0LrQu9C+0L0iCisKKyM6IGdpdGs6OTU0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICLQmtC70L7QvdGK0YIg4oCeJXPigJwg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAuINCU0LAg0LHRitC00LUg0LvQuCDQv9GA0LXQt9Cw0L/QuNGB0LDQvT8iCisKKyM6IGdpdGs6OTU4NworbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmV3IG5hbWUgZm9yIHRoZSBicmFuY2giCittc2dzdHIgItCj0LrQsNC20LXRgtC1INC90L7QstC+INC40LzQtSDQt9CwINC60LvQvtC90LAiCisKKyM6IGdpdGs6OTY1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICIiCisi0J/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJwg0LLQtdGH0LUg0LUg0LLQutC70Y7Rh9C10L3QviDQsiDQutC70L7QvdCwIOKAniVz4oCcIOKAlCDQtNCwINCx0YrQtNC1INC70Lgg0L/RgNC40LvQvtC20LXQvdC+INC+0YLQvdC+0LLQvj8iCisKKyM6IGdpdGs6OTY1NQorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICLQntGC0LHQuNGA0LDQvdC1IgorCisjOiBnaXRrOjk2NjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdC+INC+0YLQsdC40YDQsNC90LUsINC30LDRidC+0YLQviDQstGK0LIg0YTQsNC50LvQsCDigJ4lc+KAnCDQuNC80LAg0LvQvtC60LDQu9C90Lgg0L/RgNC+0LzQtdC90LguXG4iCisi0J/QvtC00LDQudGC0LUsINC30LDQvdGD0LvQtdGC0LUg0LjQu9C4INCz0Lgg0YHQutCw0YLQsNC50YLQtSDQuCDQv9GA0L7QsdCy0LDQudGC0LUg0L7RgtC90L7QstC+LiIKKworIzogZ2l0azo5NjcwCittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdC+INC+0YLQsdC40YDQsNC90LUg0L/QvtGA0LDQtNC4INC60L7QvdGE0LvQuNC60YLQuCDQv9GA0Lgg0YHQu9C40LLQsNC90LUuXG4iCisi0JjRgdC60LDRgtC1INC70Lgg0LTQsCDQs9C4INC60L7RgNC40LPQuNGA0LDRgtC1INGH0YDQtdC3IOKAnmdpdCBjaXRvb2zigJw/IgorCisjOiBnaXRrOjk2ODYgZ2l0azo5NzQ0Cittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgItCd0LUg0YHQsCDQv9C+0LTQsNC00LXQvdC4INC/0YDQvtC80LXQvdC4IgorCisjOiBnaXRrOjk3MTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJwg0L3QtSDQtSDQstC60LvRjtGH0LXQvdC+INCyINC60LvQvtC90LAg4oCeJXPigJwuINCU0LAg0LHRitC00LUg0LvQuCDQvtGC0LzQtdC90LXQvdC+PyIKKworIzogZ2l0azo5NzE4Cittc2dpZCAiUmV2ZXJ0aW5nIgorbXNnc3RyICLQntGC0LzRj9C90LAiCisKKyM6IGdpdGs6OTcyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCisiY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdCwINC+0YLQvNGP0L3QsCwg0LfQsNGJ0L7RgtC+INCy0YrQsiDRhNCw0LnQu9CwIOKAniVz4oCcINC40LzQsCDQu9C+0LrQsNC70L3QuCDQv9GA0L7QvNC10L3QuC5cbiIKKyLQn9C+0LTQsNC50YLQtSwg0LfQsNC90YPQu9C10YLQtSDQuNC70Lgg0LPQuCDRgdC60LDRgtCw0LnRgtC1INC4INC/0YDQvtCx0LLQsNC50YLQtSDQvtGC0L3QvtCy0L4uIgorCisjOiBnaXRrOjk3MzAKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIiBEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QviDQvtGC0LzRj9C90LAg0L/QvtGA0LDQtNC4INC60L7QvdGE0LvQuNC60YLQuCDQv9GA0Lgg0YHQu9C40LLQsNC90LUuXG4iCisi0JjRgdC60LDRgtC1INC70Lgg0LTQsCDQs9C4INC60L7RgNC40LPQuNGA0LDRgtC1INGH0YDQtdC3IOKAnmdpdCBjaXRvb2zigJw/IgorCisjOiBnaXRrOjk3NzMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICLQn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINC30LDQvdGD0LvRj9Cy0LDQvdC10YLQviIKKworIzogZ2l0azo5Nzc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAi0JTQsCDRgdC1INC30LDQvdGD0LvQuCDQu9C4INC60LvQvtC90YrRgiDigJ4lc+KAnCDQutGK0Lwg4oCeJXPigJw/IgorCisjOiBnaXRrOjk3NzcKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAi0JLQuNC0INC30LDQvdGD0LvRj9Cy0LDQvdC1OiIKKworIzogZ2l0azo5NzgwCittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgItCh0LvQsNCx0L46INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC4INC40L3QtNC10LrRgdCwINC+0YHRgtCw0LLQsNGCINGB0YrRidC40YLQtSIKKworIzogZ2l0azo5NzgzCittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICLQodC80LXRgdC10L3Qvjog0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0L7RgdGC0LDQstCwINGB0YrRidC+0YLQviwg0LjQvdC00LXQutGB0YrRgiDRgdC1INC30LDQvdGD0LvRj9Cy0LAiCisKKyM6IGdpdGs6OTc4NgorbXNnaWQgIiIKKyJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCisiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorbXNnc3RyICIiCisi0KHQuNC70L3Qvjog0LfQsNC90YPQu9GP0LLQsNC90LUg0Lgg0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviwg0Lgg0L3QsCDQuNC90LTQtdC60YHQsFxuIgorIijQktCh0JjQp9Ca0Jgg0LvQvtC60LDQu9C90Lgg0L/RgNC+0LzQtdC90Lgg0YnQtSDQsdGK0LTQsNGCINCx0LXQt9Cy0YrQt9Cy0YDQsNGC0L3QviDQt9Cw0LPRg9Cx0LXQvdC4KSIKKworIzogZ2l0azo5ODAzCittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICLQl9Cw0L3Rg9C70Y/QstCw0L3QtSIKKworIzogZ2l0azo5ODc2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQSBsb2NhbCBicmFuY2ggbmFtZWQgJXMgZXhpc3RzIGFscmVhZHkiCittc2dzdHIgItCS0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINC70L7QutCw0LvQtdC9INC60LvQvtC9IOKAniVz4oCcLiIKKworIzogZ2l0azo5ODg0Cittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICLQmNC30YLQtdCz0LvRj9C90LUiCisKKyM6IGdpdGs6OTk0MworbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgItCi0LXQutGD0YnQviDQuNC30YLQtdCz0LvQtdC90LjRj9GCINC60LvQvtC9INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IGdpdGs6OTk0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisi0J/QvtC00LDQstCw0L3QuNGP0YLQsCDQvdCwINC60LvQvtC90LAg4oCeJXPigJwg0L3QtSDRgdCwINC90LAg0L3QuNC60L7QuSDQtNGA0YPQsyDQutC70L7QvS5cbiIKKyLQndCw0LjRgdGC0LjQvdCwINC70Lgg0LjRgdC60LDRgtC1INC00LAg0LjQt9GC0YDQuNC10YLQtSDQutC70L7QvdCwIOKAniVz4oCcPyIKKworIzogZ2l0azo5OTgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICLQldGC0LjQutC10YLQuCDQuCDQstGK0YDRhdC+0LLQtTogJXMiCisKKyM6IGdpdGs6OTk5NworbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAi0KTQuNC70YLRgNC40YDQsNC90LUiCisKKyM6IGdpdGs6MTAyOTMKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyLQk9GA0LXRiNC60LAg0L/RgNC4INC/0YDQvtGH0LjRgtCw0L3QtdGC0L4g0L3QsCDRgtC+0L/QvtC70L7Qs9C40Y/RgtCwINC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsC4g0JjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC30LAg0LrQu9C+0L3QsCAiCisi0Lgg0L/RgNC10LTRiNC10YHRgtCy0LDRidC40YLQtS/RgdC70LXQtNCy0LDRidC40YLQtSDQtdGC0LjQutC10YLQuCDRidC1INC1INC90LXQv9GK0LvQvdCwLiIKKworIzogZ2l0azoxMTI3MAorbXNnaWQgIlRhZyIKK21zZ3N0ciAi0JXRgtC40LrQtdGCIgorCisjOiBnaXRrOjExMjc0Cittc2dpZCAiSWQiCittc2dzdHIgItCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAIgorCisjOiBnaXRrOjExMzU3Cittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgItCY0LfQsdC+0YAg0L3QsCDRiNGA0LjRhNGCINC30LAgR2l0ayIKKworIzogZ2l0azoxMTM3NAorbXNnaWQgIkIiCittc2dzdHIgItCnIgorCisjOiBnaXRrOjExMzc3Cittc2dpZCAiSSIKK21zZ3N0ciAi0JoiCisKKyM6IGdpdGs6MTE0OTUKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCDQvdCwINGB0L/QuNGB0YrQutCwINGBINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogZ2l0azoxMTQ5OAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKK21zZ3N0ciAi0JzQsNC60YHQuNC80LDQu9C90LAg0YjQuNGA0L7Rh9C40L3QsCDQvdCwINCz0YDQsNGE0LAgKNCyINGA0LXQtNC+0LLQtSkiCisKKyM6IGdpdGs6MTE1MDIKKyMsIG5vLXRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICLQnNCw0LrRgdC40LzQsNC70L3QsCDRiNC40YDQvtGH0LjQvdCwINC90LAg0LPRgNCw0YTQsCAoJSDQvtGCINC/0LDQvdC10LvQsCkiCisKKyM6IGdpdGs6MTE1MDUKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgItCf0L7QutCw0LfQstCw0L3QtSDQvdCwINC70L7QutCw0LvQvdC40YLQtSDQv9GA0L7QvNC10L3QuCIKKworIzogZ2l0azoxMTUwOAorbXNnaWQgIkF1dG8tc2VsZWN0IFNIQTEgKGxlbmd0aCkiCittc2dzdHIgItCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0LjQt9Cx0LjRgNCw0L3QtSDQvdCwIFNIQTEgKNC00YrQu9C20LjQvdCwKSIKKworIzogZ2l0azoxMTUxMgorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgItCh0LrRgNC40LLQsNC90LUg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4IgorCisjOiBnaXRrOjExNTE2Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCDQvdCwINC/0L7QutCw0LfQstCw0L3QtdGC0L4g0L3QsCDRgNCw0LfQu9C40LrQuNGC0LUiCisKKyM6IGdpdGs6MTE1MTgKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAi0KjQuNGA0L7Rh9C40L3QsCDQvdCwINGC0LDQsdGD0LvQsNGC0L7RgNCwIgorCisjOiBnaXRrOjExNTIxCittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0LHQu9C40LfQutC40YLQtSDQtdGC0LjQutC10YLQuCDQuCDQstGK0YDRhdC+0LLQtSIKKworIzogZ2l0azoxMTUyNAorbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCittc2dzdHIgItCc0LDQutGB0LjQvNCw0LvQtdC9INCx0YDQvtC5INC10YLQuNC60LXRgtC4L9Cy0YrRgNGF0L7QstC1INC30LAg0L/QvtC60LDQt9Cy0LDQvdC1IgorCisjOiBnaXRrOjExNTI3Cittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICLQoNCw0LfQu9C40LrQsCDRgdCw0LzQviDQsiDQuNC30LHRgNCw0L3QuNGC0LUg0L/RitGC0LjRidCwIgorCisjOiBnaXRrOjExNTMwCittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgItCf0L7QtNC00YDRitC20LrQsCDQvdCwINGA0LDQt9C70LjRh9C90Lgg0LrQvtC00LjRgNCw0L3QuNGPINC30LAg0LLRgdC10LrQuCDRhNCw0LnQuyIKKworIzogZ2l0azoxMTUzNiBnaXRrOjExNjgzCittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICLQktGK0L3RiNC10L0g0LjQvdGB0YLRgNGD0LzQtdC90YIg0LfQsCDRgNCw0LfQu9C40LrQuCIKKworIzogZ2l0azoxMTUzNworbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAi0JjQt9Cx0L7RgOKApiIKKworIzogZ2l0azoxMTU0MgorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAi0J7QsdGJ0Lgg0L3QsNGB0YLRgNC+0LnQutC4IgorCisjOiBnaXRrOjExNTQ1Cittc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgorbXNnc3RyICLQmNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGC0LXQvNCwINC30LAg0LPRgNCw0YTQuNGH0L3QuNGC0LUg0L7QsdC10LrRgtC4IgorCisjOiBnaXRrOjExNTQ3Cittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKNC/0YDQvtC80Y/QvdCw0YLQsCDQuNC30LjRgdC60LLQsCDRgNC10YHRgtCw0YDRgtC40YDQsNC90LUg0L3QsCBHaXRrKSIKKworIzogZ2l0azoxMTU0OQorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIo0LIg0LzQvtC80LXQvdGC0LAg0L3QtdC00L7RgdGC0YrQv9C90L4pIgorCisjOiBnaXRrOjExNTYwCittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgItCm0LLQtdGC0L7QstC1OiDQuNC30LHQuNGA0LAg0YHQtSDRgSDQvdCw0YLQuNGB0LrQsNC90LUiCisKKyM6IGdpdGs6MTE1NjMKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgItCY0L3RgtC10YDRhNC10LnRgSIKKworIzogZ2l0azoxMTU2NAorbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAi0LjQvdGC0LXRgNGE0LXQudGBIgorCisjOiBnaXRrOjExNTY3Cittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAi0KTQvtC9IgorCisjOiBnaXRrOjExNTY4IGdpdGs6MTE1OTgKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICLRhNC+0L0iCisKKyM6IGdpdGs6MTE1NzEKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICLQl9C90LDRhtC4IgorCisjOiBnaXRrOjExNTcyCittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAi0LfQvdCw0YbQuCIKKworIzogZ2l0azoxMTU3NQorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAi0KDQsNC30LvQuNC60LA6INGB0YLQsNGA0Lgg0YDQtdC00L7QstC1IgorCisjOiBnaXRrOjExNTc2Cittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgItGA0LDQt9C70LjQutCwLCDRgdGC0LDRgNC4INGA0LXQtNC+0LLQtSIKKworIzogZ2l0azoxMTU4MAorbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKK21zZ3N0ciAi0KDQsNC30LvQuNC60LA6INC90L7QstC4INGA0LXQtNC+0LLQtSIKKworIzogZ2l0azoxMTU4MQorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICLRgNCw0LfQu9C40LrQsCwg0L3QvtCy0Lgg0YDQtdC00L7QstC1IgorCisjOiBnaXRrOjExNTg1Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgItCg0LDQt9C70LjQutCwOiDQvdCw0YfQsNC70L4g0L3QsCDQv9Cw0YDRh9C1IgorCisjOiBnaXRrOjExNTg3Cittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAi0YDQsNC30LvQuNC60LAsINC90LDRh9Cw0LvQviDQvdCwINC/0LDRgNGH0LUiCisKKyM6IGdpdGs6MTE1OTEKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAi0KTQvtC9INC90LAg0L7RgtCx0LXQu9GP0LfQsNC9INGA0LXQtCIKKworIzogZ2l0azoxMTU5MworbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgItGE0L7QvSDQvdCwINC+0YLQsdC10LvRj9C30LDQvSDRgNC10LQiCisKKyM6IGdpdGs6MTE1OTcKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgItCY0LfQsdC+0YAg0L3QsCDRhNC+0L0iCisKKyM6IGdpdGs6MTE2MDYKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICLQqNGA0LjRhNGC0L7QstC1OiDQuNC30LHQuNGA0LAg0YHQtSDRgSDQvdCw0YLQuNGB0LrQsNC90LUiCisKKyM6IGdpdGs6MTE2MDgKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgItCe0YHQvdC+0LLQtdC9INGI0YDQuNGE0YIiCisKKyM6IGdpdGs6MTE2MDkKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAi0KjRgNC40YTRgiDQt9CwINGA0LDQt9C70LjQutC40YLQtSIKKworIzogZ2l0azoxMTYxMAorbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgItCo0YDQuNGE0YIg0L3QsCDQuNC90YLQtdGA0YTQtdC50YHQsCIKKworIzogZ2l0azoxMTYzMgorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCDQvdCwIEdpdGsiCisKKyM6IGdpdGs6MTE2NDEKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICLQntCx0YnQuCIKKworIzogZ2l0azoxMTY0MgorbXNnaWQgIkNvbG9ycyIKK21zZ3N0ciAi0KbQstC10YLQvtCy0LUiCisKKyM6IGdpdGs6MTE2NDMKK21zZ2lkICJGb250cyIKK21zZ3N0ciAi0KjRgNC40YTRgtC+0LLQtSIKKworIzogZ2l0azoxMTY5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGs6INC40LfQsdC+0YAg0L3QsCDRhtCy0Y/RgiDQvdCwIOKAniVz4oCcIgorCisjOiBnaXRrOjEyMjA2Cittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICIiCisi0KLQsNC30Lgg0LLQtdGA0YHQuNGPINC90LAgVGNsL1RrINC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwINC+0YIgR2l0ay5cbiIKKyIg0J3QtdC+0LHRhdC+0LTQuNC80LAg0LLQuCDQtSDQv9C+0L3QtSBUY2wvVGsgOC40LiIKKworIzogZ2l0azoxMjQxNgorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgItCi0YPQuiDQu9C40L/RgdCy0LAg0YXRgNCw0L3QuNC70LjRidC1INC90LAgR2l0LiIKKworIzogZ2l0azoxMjQ2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAi0J3QtdC10LTQvdC+0LfQvdCw0YfQtdC9INCw0YDQs9GD0LzQtdC90YIg4oCeJXPigJw6INC40LzQsCDQuCDRgtCw0LrQsNCy0LAg0LLQtdGA0YHQuNGPLCDQuCDRgtCw0LrRitCyINGE0LDQudC7IgorCisjOiBnaXRrOjEyNDc1Cittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90Lgg0LDRgNCz0YPQvNC10L3RgtC4INC90LAgZ2l0azoiCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9jYS5wbyBiL2dpdGstZ2l0L3BvL2NhLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZGZjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9jYS5wbwpAQCAtMCwwICsxLDEzNjkgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0aworIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhcworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIyBBbGV4IEhlbnJpZSA8YWxleGhlbnJpZTI0QGdtYWlsLmNvbT4sIDIwMTUuCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRrXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDE0OjMyKzEwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTEwLTA1IDIyOjIzLTA2MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFsZXggSGVucmllIDxhbGV4aGVucmllMjRAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IENhdGFsYW5cbiIKKyJMYW5ndWFnZTogY2FcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKyJYLUdlbmVyYXRvcjogUG9lZGl0IDEuOC41XG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9idGVuaXIgbGEgbGxpc3RhIGRlIGZpdHhlcnMgbm8gZnVzaW9uYXRzOiIKKworIzogZ2l0azoyMTIgZ2l0azoyMzgxCittc2dpZCAiQ29sb3Igd29yZHMiCittc2dzdHIgIkNvbG9yYSBsZXMgcGFyYXVsZXMiCisKKyM6IGdpdGs6MjE3IGdpdGs6MjM4MSBnaXRrOjgyMjAgZ2l0azo4MjUzCittc2dpZCAiTWFya3VwIHdvcmRzIgorbXNnc3RyICJNYXJjYSBsZXMgcGFyYXVsZXMiCisKKyM6IGdpdGs6MzI0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJFcnJvciBlbiBhbmFsaXR6YXIgbGVzIHJldmlzaW9uczoiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiRXJyb3IgZW4gZXhlY3V0YXIgbCdvcmRyZSAtLWFyZ3NjbWQ6IgorCisjOiBnaXRrOjM5MworbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorIk5vIGhpIGhhIGZpdHhlcnMgc2VsZWNjaW9uYXRzOiBzJ2hhIGVzcGVjaWZpY2F0IC0tbWVyZ2UgcGVyw7IgY2FwIGZpdHhlciBlc3TDoCAiCisic2Vuc2UgZnVzaW9uYXIuIgorCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiTm8gaGkgaGEgZml0eGVycyBzZWxlY2Npb25hdHM6IHMnaGEgZXNwZWNpZmljYXQgLS1tZXJnZSBwZXLDsiBjYXAgZml0eGVyICIKKyJzZW5zZSBmdXNpb25hciBlc3TDoCBkaW5zIGRlbCBsw61taXQgZGUgZml0eGVycy4iCisKKyM6IGdpdGs6NDE4IGdpdGs6NTY2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJFcnJvciBlbiBleGVjdXRhciBnaXQgbG9nOiIKKworIzogZ2l0azo0MzYgZ2l0azo1ODIKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICJMbGVnaW50IgorCisjOiBnaXRrOjQ5NiBnaXRrOjQ1MjUKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIkxsZWdpbnQgbGVzIHJldmlzaW9ucy4uLiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOAorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIkNhcCBjb21pc3Npw7Mgc2VsZWNjaW9uYWRhIgorCisjOiBnaXRrOjE0NDUgZ2l0azo0MDQ1IGdpdGs6MTI0MzIKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIkzDrW5pYSBkJ29yZHJlcyIKKworIzogZ2l0azoxNTExCittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJObyBlcyBwb3QgYW5hbGl0emFyIGxhIHNvcnRpZGEgZGVsIGdpdCBsb2c6IgorCisjOiBnaXRrOjE3NDAKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJDYXAgaW5mb3JtYWNpw7MgZGUgY29taXNzacOzIGRpc3BvbmlibGUiCisKKyM6IGdpdGs6MTkwMyBnaXRrOjE5MzIgZ2l0azo0MzE1IGdpdGs6OTY2OSBnaXRrOjExMjQxIGdpdGs6MTE1MjEKK21zZ2lkICJPSyIKK21zZ3N0ciAiRCdhY29yZCIKKworIzogZ2l0azoxOTM0IGdpdGs6NDMxNyBnaXRrOjkxOTYgZ2l0azo5Mjc1IGdpdGs6OTM5MSBnaXRrOjk0NDAgZ2l0azo5NjcxCisjOiBnaXRrOjExMjQyIGdpdGs6MTE1MjIKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkNhbmNlbMK3bGEiCisKKyM6IGdpdGs6MjA2OQorbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgIkFjdHVhbGl0emEiCisKKyM6IGdpdGs6MjA3MAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgIlJlY2FycmVnYSIKKworIzogZ2l0azoyMDcxCittc2dpZCAiUmVyZWFkIHJlJmZlcmVuY2VzIgorbXNnc3RyICJSZWxsZWdlaXggbGVzIHJlZmVyw6huY2llcyIKKworIzogZ2l0azoyMDcyCittc2dpZCAiJkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAiTGxpc3RhIGxlcyByZWZlcsOobmNpZXMiCisKKyM6IGdpdGs6MjA3NAorbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgorbXNnc3RyICJJbmljaWEgZWwgZ2l0IGd1aSIKKworIzogZ2l0azoyMDc2Cittc2dpZCAiJlF1aXQiCittc2dzdHIgIlN1cnQiCisKKyM6IGdpdGs6MjA2OAorbXNnaWQgIiZGaWxlIgorbXNnc3RyICJGaXR4ZXIiCisKKyM6IGdpdGs6MjA4MAorbXNnaWQgIiZQcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHJlZmVyw6huY2llcyIKKworIzogZ2l0azoyMDc5Cittc2dpZCAiJkVkaXQiCittc2dzdHIgIkVkaXRhIgorCisjOiBnaXRrOjIwODQKK21zZ2lkICImTmV3IHZpZXcuLi4iCittc2dzdHIgIlZpc3RhIG5vdmEuLi4iCisKKyM6IGdpdGs6MjA4NQorbXNnaWQgIiZFZGl0IHZpZXcuLi4iCittc2dzdHIgIkVkaXRhIGxhIHZpc3RhLi4uIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRGVsZXRlIHZpZXciCittc2dzdHIgIlN1cHJpbWVpeCBsYSB2aXN0YSIKKworIzogZ2l0azoyMDg4IGdpdGs6NDA0MworbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgIlRvdHMgZWxzIGZpdHhlcnMiCisKKyM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKK21zZ2lkICImVmlldyIKK21zZ3N0ciAiVmlzdGEiCisKKyM6IGdpdGs6MjA5MyBnaXRrOjIxMDMgZ2l0azozMDEyCittc2dpZCAiJkFib3V0IGdpdGsiCittc2dzdHIgIlF1YW50IGFsIGdpdGsiCisKKyM6IGdpdGs6MjA5NCBnaXRrOjIxMDgKK21zZ2lkICImS2V5IGJpbmRpbmdzIgorbXNnc3RyICJBc3NvY2lhY2lvbnMgZGUgdGVjbGVzIgorCisjOiBnaXRrOjIwOTIgZ2l0azoyMTA3Cittc2dpZCAiJkhlbHAiCittc2dzdHIgIkFqdWRhIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUyCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIklEIFNIQTE6IgorCisjOiBnaXRrOjIyMjkKK21zZ2lkICJSb3ciCittc2dzdHIgIkZpbGEiCisKKyM6IGdpdGs6MjI2NworbXNnaWQgIkZpbmQiCittc2dzdHIgIkNlcmNhIgorCisjOiBnaXRrOjIyOTUKK21zZ2lkICJjb21taXQiCittc2dzdHIgImNvbWlzc2nDsyIKKworIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3CisjOiBnaXRrOjY5MTIKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAicXVlIGNvbnRpbmd1aToiCisKKyM6IGdpdGs6MjMwMiBnaXRrOjM1MjYgZ2l0azozNTMxIGdpdGs6NDc2MworbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAicXVlIHRvcXVpIGVscyBjYW1pbnM6IgorCisjOiBnaXRrOjIzMDMgZ2l0azo0Nzc3Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgInF1ZSBhZmVnZWl4aS9lbGltaW5pIGxhIGNhZGVuYToiCisKKyM6IGdpdGs6MjMwNCBnaXRrOjQ3NzkKK21zZ2lkICJjaGFuZ2luZyBsaW5lcyBtYXRjaGluZzoiCittc2dzdHIgInF1ZSB0aW5ndWkgbMOtbmllcyBjYW52aWFkZXMgY29pbmNpZGVudHMgYW1iOiIKKworIzogZ2l0azoyMzEzIGdpdGs6MjMxNSBnaXRrOjQ3NjYKK21zZ2lkICJFeGFjdCIKK21zZ3N0ciAiRXhhY3RlIgorCisjOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMworbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIklnbm9yYSBtYWrDunNjdWxhIGkgbWluw7pzY3VsYSIKKworIzogZ2l0azoyMzE1IGdpdGs6NDczNiBnaXRrOjQ4NTIgZ2l0azo2NzE5Cittc2dpZCAiUmVnZXhwIgorbXNnc3RyICJSZWdleHAiCisKKyM6IGdpdGs6MjMxNyBnaXRrOjIzMTggZ2l0azo0ODc0IGdpdGs6NDkwNCBnaXRrOjQ5MTEgZ2l0azo2ODQ4IGdpdGs6NjkxNgorbXNnaWQgIkFsbCBmaWVsZHMiCittc2dzdHIgIlRvdHMgZWxzIGNhbXBzIgorCisjOiBnaXRrOjIzMTggZ2l0azo0ODcxIGdpdGs6NDkwNCBnaXRrOjY3ODYKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiVGl0dWxhciIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo2OTE2IGdpdGs6NzM4OQorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJDb21lbnRhcmlzIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6NDg3NiBnaXRrOjQ5MTEgZ2l0azo2Nzg2IGdpdGs6NzMyNCBnaXRrOjg4MzAKKyM6IGdpdGs6ODg0NQorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAiQXV0b3IiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NzMyNgorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAiQ29taXRlbnQiCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiQ2VyY2EiCisKKyM6IGdpdGs6MjM1OAorbXNnaWQgIkRpZmYiCittc2dzdHIgIkRpZmVyw6huY2lhIgorCisjOiBnaXRrOjIzNjAKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiVmVyc2nDsyBhbnRpZ2EiCisKKyM6IGdpdGs6MjM2MgorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICJWZXJzacOzIG5vdmEiCisKKyM6IGdpdGs6MjM2NAorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIkzDrW5pZXMgZGUgY29udGV4dCIKKworIzogZ2l0azoyMzc0Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiSWdub3JhIGNhbnZpcyBkJ2VzcGFpIgorCisjOiBnaXRrOjIzNzggZ2l0azoyMzgwIGdpdGs6Nzk1OSBnaXRrOjgyMDYKK21zZ2lkICJMaW5lIGRpZmYiCittc2dzdHIgIkRpZmVyw6huY2lhIGRlIGzDrW5pZXMiCisKKyM6IGdpdGs6MjQ0NQorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJQZWRhw6ciCisKKyM6IGdpdGs6MjQ0NworbXNnaWQgIlRyZWUiCittc2dzdHIgIkFyYnJlIgorCisjOiBnaXRrOjI2MTcgZ2l0azoyNjM3Cittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICJEaWZlcmVuY2lhIGFxdWVzdGEgLT4gbGEgc2VsZWNjaW9uYWRhIgorCisjOiBnaXRrOjI2MTggZ2l0azoyNjM4Cittc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgorbXNnc3RyICJEaWZlcmVuY2lhIGxhIHNlbGVjY2lvbmFkYSAtPiBhcXVlc3RhIgorCisjOiBnaXRrOjI2MTkgZ2l0azoyNjM5Cittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiRmVzIHBlZGHDpyIKKworIzogZ2l0azoyNjIwIGdpdGs6OTI1NAorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIkNyZWEgZXRpcXVldGEiCisKKyM6IGdpdGs6MjYyMSBnaXRrOjkzNzEKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAiRXNjcml1IGxhIGNvbWlzc2nDsyBhIHVuIGZpdHhlciIKKworIzogZ2l0azoyNjIyIGdpdGs6OTQyOAorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJDcmVhIHVuYSBicmFuY2Egbm92YSIKKworIzogZ2l0azoyNjIzCittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIlJlY3VsbCBhcXVlc3RhIGNvbWlzc2nDsyBjb20gYSBjaXJlcmEiCisKKyM6IGdpdGs6MjYyNAorbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIlJlc3RhYmxlaXggbGEgYnJhbmNhIEhFQUQgYXF1w60iCisKKyM6IGdpdGs6MjYyNQorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIk1hcmNhIGFxdWVzdGEgY29taXNzacOzIgorCisjOiBnaXRrOjI2MjYKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAiVG9ybmEgYSBsYSBtYXJjYSIKKworIzogZ2l0azoyNjI3Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIlRyb2JhIGxhIGRlc2NlbmRlbnQgZCdhcXVlc3RhIGkgbWFyY2EtbGEiCisKKyM6IGdpdGs6MjYyOAorbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJDb21wYXJhIGFtYiBsYSBjb21pc3Npw7MgbWFyY2FkYSIKKworIzogZ2l0azoyNjI5IGdpdGs6MjY0MAorbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJEaWZlcmVuY2lhIGFxdWVzdGEgLT4gbGEgY29taXNzacOzIG1hcmNhZGEiCisKKyM6IGdpdGs6MjYzMCBnaXRrOjI2NDEKK21zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZXJlbmNpYSBsYSBjb21pc3Npw7Mgc2VsZWNjaW9uYWRhIC0+IGFxdWVzdGEiCisKKyM6IGdpdGs6MjYzMQorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiUmV2ZXJ0ZWl4IGFxdWVzdGEgY29taXNzacOzIgorCisjOiBnaXRrOjI2NDcKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIkFnYWZhIGFxdWVzdGEgYnJhbmNhIgorCisjOiBnaXRrOjI2NDgKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIkVsaW1pbmEgYXF1ZXN0YSBicmFuY2EiCisKKyM6IGdpdGs6MjY0OQorbXNnaWQgIkNvcHkgYnJhbmNoIG5hbWUiCittc2dzdHIgIkNvcGlhIGVsIG5vbSBkZSBicmFuY2EiCisKKyM6IGdpdGs6MjY1NgorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiUmVzc2FsdGEgYXF1ZXN0IHRhbWLDqSIKKworIzogZ2l0azoyNjU3Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAiUmVzc2FsdGEgbm9tw6lzIGFxdWVzdCIKKworIzogZ2l0azoyNjU4Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAiRGlmZXLDqG5jaWEgZXh0ZXJuYSIKKworIzogZ2l0azoyNjU5Cittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAiQ3VscGFiaWxpdGF0IGRlIGxhIGNvbWlzc2nDsyBtYXJlIgorCisjOiBnaXRrOjI2NjAKK21zZ2lkICJDb3B5IHBhdGgiCittc2dzdHIgIkNvcGlhIGVsIGNhbcOtIgorCisjOiBnaXRrOjI2NjcKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIk1vc3RyYSBsJ29yaWdlbiBkJ2FxdWVzdGEgbMOtbmlhIgorCisjOiBnaXRrOjI2NjgKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgIkV4ZWN1dGEgZ2l0IGd1aSBibGFtZSBlbiBhcXVlc3RhIGzDrW5pYSIKKworIzogZ2l0azozMDE0Cittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayAtIHZpc3VhbGl0emFkb3IgZGUgY29taXNzaW9ucyBwZXIgYWwgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZXUtbG8gaSByZWRpc3RyaWJ1w691LWxvIHNvdGEgZWxzIHRlcm1lcyBkZSBsYSBMbGljw6huY2lhIFDDumJsaWNhIEdlbmVyYWwgR05VIgorCisjOiBnaXRrOjMwMjIgZ2l0azozMDg5IGdpdGs6OTg1NworbXNnaWQgIkNsb3NlIgorbXNnc3RyICJUYW5jYSIKKworIzogZ2l0azozMDQzCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIkFzc29jaWFjaW9ucyBkZSB0ZWNsZXMgZGVsIEdpdGsiCisKKyM6IGdpdGs6MzA0NgorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKK21zZ3N0ciAiQXNzb2NpYWNpb25zIGRlIHRlY2xlcyBkZWwgR2l0azoiCisKKyM6IGdpdGs6MzA0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0U3VydCIKKworIzogZ2l0azozMDQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLVc+XHRcdFRhbmNhIGxhIGZpbmVzdHJhIgorCisjOiBnaXRrOjMwNTAKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxJbmljaT5cdFx0VsOpcyBhIGxhIHByaW1lcmEgY29taXNzacOzIgorCisjOiBnaXRrOjMwNTEKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8Rmk+XHRcdFbDqXMgYSBsJ8O6bHRpbWEgY29taXNzacOzIgorCisjOiBnaXRrOjMwNTIKK21zZ2lkICI8VXA+LCBwLCBrXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxBbXVudD4sIHAsIGtcdE1vdS10ZSBjYXAgYW11bnQgcGVyIHVuYSBjb21pc3Npw7MiCisKKyM6IGdpdGs6MzA1MworbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxBdmFsbD4sIG4sIGpcdE1vdS10ZSBjYXAgYXZhbGwgcGVyIHVuYSBjb21pc3Npw7MiCisKKyM6IGdpdGs6MzA1NAorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxFc3F1ZXJyYT4sIHosIGhcdFJldHJvY2VkZWl4IGVuIGxhIGxsaXN0YSBkJ2hpc3TDsnJpYSIKKworIzogZ2l0azozMDU1Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxEcmV0YT4sIHgsIGxcdEF2YW7Dp2EgZW4gbGEgbGxpc3RhIGQnaGlzdMOycmlhIgorCisjOiBnaXRrOjMwNTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbj5cdEdvIHRvIG4tdGggcGFyZW50IG9mIGN1cnJlbnQgY29tbWl0IGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiIgorIjwlcy1uPlx0VsOpcyBhIGwnZW7DqHNpbWEgbWFyZSBkZSBsYSBjb21pc3Npw7MgYWN0dWFsIGVuIGxhIGxsaXN0YSBkJ2hpc3TDsnJpYSIKKworIzogZ2l0azozMDU3Cittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxSZVDDoGc+XHRNb3UtdGUgY2FwIGFtdW50IHBlciB1bmEgcMOgZ2luYSBlbiBsYSBsbGlzdGEgZGUgY29taXNzaW9ucyIKKworIzogZ2l0azozMDU4Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8QXZQw6BnPlx0TW91LXRlIGNhcCBhdmFsbCBwZXIgdW5hIHDDoGdpbmEgZW4gbGEgbGxpc3RhIGRlIGNvbWlzc2lvbnMiCisKKyM6IGdpdGs6MzA1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUluaWNpPlx0RGVzcGxhw6dhJ3QgYSBsYSBwYXJ0IHN1cGVyaW9yIGRlIGxhIGxsaXN0YSBkZSBjb21pc3Npb25zIgorCisjOiBnaXRrOjMwNjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUZpPlx0RGVzcGxhw6dhJ3QgYSBsYSBwYXJ0IGluZmVyaW9yIGRlIGxhIGxsaXN0YSBkZSBjb21pc3Npb25zIgorCisjOiBnaXRrOjMwNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1BbXVudD5cdERlc3BsYcOnYSBsYSBsbGlzdGEgZGUgY29taXNzaW9ucyBjYXAgYW11bnQgcGVyIHVuYSBsw61uaWEiCisKKyM6IGdpdGs6MzA2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1BdmFsbD5cdERlc3BsYcOnYSBsYSBsbGlzdGEgZGUgY29taXNzaW9ucyBjYXAgYXZhbGwgcGVyIHVuYSBsw61uaWEiCisKKyM6IGdpdGs6MzA2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1SZVDDoGc+XHREZXNwbGHDp2EgbGEgbGxpc3RhIGRlIGNvbWlzc2lvbnMgY2FwIGFtdW50IHBlciB1bmEgcMOgZ2luYSIKKworIzogZ2l0azozMDY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1BdlDDoGc+XHREZXNwbGHDp2EgbGEgbGxpc3RhIGRlIGNvbWlzc2lvbnMgY2FwIGF2YWxsIHBlciB1bmEgcMOgZ2luYSIKKworIzogZ2l0azozMDY1Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8TWFqLUFtdW50Plx0Q2VyY2EgY2FwIGVucmVyZSAoY2FwIGFtdW50LCBsZXMgY29taXNzaW9ucyBtw6lzIG5vdmVzKSIKKworIzogZ2l0azozMDY2Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxNYWotQXZhbGw+XHRDZXJjYSBjYXAgZW5kYXZhbnQgKGNhcCBhdmFsbCwgbGVzIGNvbWlzc2lvbnMgbcOpcyB2ZWxsZXMpIgorCisjOiBnaXRrOjMwNjcKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPFN1cHI+LCBiXHREZXNwbGHDp2EgbGEgdmlzdGEgZGUgZGlmZXLDqG5jaWEgY2FwIGFtdW50IHBlciB1bmEgcMOgZ2luYSIKKworIzogZ2l0azozMDY4Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxSZXRyb2PDqXM+XHREZXNwbGHDp2EgbGEgdmlzdGEgZGUgZGlmZXLDqG5jaWEgY2FwIGFtdW50IHBlciB1bmEgcMOgZ2luYSIKKworIzogZ2l0azozMDY5Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxFc3BhaT5cdFx0RGVzcGxhw6dhIGxhIHZpc3RhIGRlIGRpZmVyw6huY2lhIGNhcCBhdmFsbCBwZXIgdW5hIHDDoGdpbmEiCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHREZXNwbGHDp2EgbGEgdmlzdGEgZGUgZGlmZXLDqG5jaWEgY2FwIGFtdW50IHBlciAxOCBsw61uaWVzIgorCisjOiBnaXRrOjMwNzEKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHREZXNwbGHDp2EgbGEgdmlzdGEgZGUgZGlmZXLDqG5jaWEgY2FwIGF2YWxsIHBlciAxOCBsw61uaWVzIgorCisjOiBnaXRrOjMwNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdENlcmNhIgorCisjOiBnaXRrOjMwNzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx0TW91LXRlIGEgbGEgcHJvcGVyYSBjb2luY2lkw6huY2lhIGRlIGxhIGNlcmNhIgorCisjOiBnaXRrOjMwNzQKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8UmV0b3JuPlx0TW91LXRlIGEgbGEgcHJvcGVyYSBjb2luY2lkw6huY2lhIGRlIGxhIGNlcmNhIgorCisjOiBnaXRrOjMwNzUKK21zZ2lkICJnXHRcdEdvIHRvIGNvbW1pdCIKK21zZ3N0ciAiZ1x0XHRWw6lzIGEgbCfDumx0aW1hIGNvbWlzc2nDsyIKKworIzogZ2l0azozMDc2Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRQb3NhIGVsIGZvY3VzIGEgbGEgY2FpeGEgZGUgY2VyY2EiCisKKyM6IGdpdGs6MzA3NworbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHRNb3UgYSBsYSBjb2luY2lkw6huY2lhIHByw6h2aWEgZGUgbGEgY2VyY2EiCisKKyM6IGdpdGs6MzA3OAorbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx0RGVzcGxhw6dhIGxhIHZpc3RhIGRlIGRpZmVyw6huY2lhIGFsIHByb3BlciBmaXR4ZXIiCisKKyM6IGdpdGs6MzA3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdENlcmNhIGxhIHByb3BlcmEgY29pbmNpZMOobmNpYSBlbiBsYSB2aXN0YSBkZSBkaWZlcsOobmNpYSIKKworIzogZ2l0azozMDgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdENlcmNhIGxhIGNvaW5jaWTDqG5jaWEgcHLDqHZpYSBlbiBsYSB2aXN0YSBkZSBkaWZlcsOobmNpYSIKKworIzogZ2l0azozMDgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdEF1Z21lbnRhIGxhIG1pZGEgZGUgbGxldHJhIgorCisjOiBnaXRrOjMwODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW3DqXM+XHRBdWdtZW50YSBsYSBtaWRhIGRlIGxsZXRyYSIKKworIzogZ2l0azozMDgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdERpc21pbnVlaXggbGEgbWlkYSBkZSBsbGV0cmEiCisKKyM6IGdpdGs6MzA4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1lbnlzPlx0RGlzbWludWVpeCBsYSBtaWRhIGRlIGxsZXRyYSIKKworIzogZ2l0azozMDg1Cittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx0QWN0dWFsaXR6YSIKKworIzogZ2l0azozNTUwIGdpdGs6MzU1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICJFcnJvciBlbiBjcmVhciBlbCBkaXJlY3RvcmkgdGVtcG9yYWwgJXM6IgorCisjOiBnaXRrOjM1NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAiRXJyb3IgZW4gb2J0ZW5pciBcIiVzXCIgZGUgJXM6IgorCisjOiBnaXRrOjM2MzUKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImwnb3JkcmUgaGEgZmFsbGF0OiIKKworIzogZ2l0azozNzg0Cittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgIkNhcCBjb21pc3Npw7MgYWl4w60iCisKKyM6IGdpdGs6Mzc5OAorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZTogbCdvcmRyZSBoYSBmYWxsYXQ6IgorCisjOiBnaXRrOjM4MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBjYXAgZGUgZnVzacOzOiAlcyIKKworIzogZ2l0azozODM3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkVycm9yIGVuIGxsZWdpciBsJ8OtbmRleDogJXMiCisKKyM6IGdpdGs6Mzg2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgaW5pY2lhciBlbCBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM4NjUgZ2l0azo2NzU0Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJDZXJjYW50IgorCisjOiBnaXRrOjM4OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgIkVycm9yIGVuIGV4ZWN1dGFyIGVsIGdpdCBibGFtZTogJXMiCisKKyM6IGdpdGs6MzkyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIiIKKyJBcXVlbGxhIGzDrW5pYSB2ZSBkZSBsYSBjb21pc3Npw7MgJXMsIGxhIHF1YWwgbm8gw6lzIGVuIGFxdWVzdGEgdmlzdWFsaXR6YWNpw7MiCisKKyM6IGdpdGs6MzkzOQorbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgIkVsIHZpc3VhbGl0emFkb3IgZGUgZGlmZXLDqG5jaWEgZXh0ZXJuIGhhIGZhbGxhdDoiCisKKyM6IGdpdGs6NDA3MAorbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICJEZWZpbmljacOzIGRlIHZpc3RhIGRlbCBHaXRrIgorCisjOiBnaXRrOjQwNzQKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIlJlY29yZGEgYXF1ZXN0YSB2aXN0YSIKKworIzogZ2l0azo0MDc1Cittc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKK21zZ3N0ciAiUmVmZXLDqG5jaWVzIChsbGlzdGEgc2VwYXJhZGEgcGVyIGVzcGFpcykiCisKKyM6IGdpdGs6NDA3NgorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIkJyYW5xdWVzIGkgZXRpcXVldGVzOiIKKworIzogZ2l0azo0MDc3Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIlRvdGVzIGxlcyByZWZlcsOobmNpZXMiCisKKyM6IGdpdGs6NDA3OAorbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICJUb3RlcyBsZXMgYnJhbnF1ZXMgKGxvY2FscykiCisKKyM6IGdpdGs6NDA3OQorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJUb3RlcyBsZXMgZXRpcXVldGVzIgorCisjOiBnaXRrOjQwODAKK21zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJUb3RlcyBsZXMgYnJhbnF1ZXMgYW1iIHNlZ3VpbWVudCByZW1vdCIKKworIzogZ2l0azo0MDgxCittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAiSW5mb3JtYWNpw7MgZGUgY29taXNzacOzIChleHByZXNzaW9ucyByZWd1bGFycyk6IgorCisjOiBnaXRrOjQwODIKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRvcjoiCisKKyM6IGdpdGs6NDA4MworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIkNvbWl0ZW50OiIKKworIzogZ2l0azo0MDg0Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNaXNzYXRnZSBkZSBjb21pc3Npw7M6IgorCisjOiBnaXRrOjQwODUKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiQ29pbmNpZGVpeCBhbWIgdG90cyBlbHMgY3JpdGVyaXMgZCdpbmZvcm1hY2nDsyBkZSBjb21pc3Npw7MiCisKKyM6IGdpdGs6NDA4NgorbXNnaWQgIk1hdGNoZXMgbm8gQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIk5vIGNvaW5jaWRlaXggYW1iIGNhcCBjcml0ZXJpIGQnaW5mb3JtYWNpw7MgZGUgY29taXNzacOzIgorCisjOiBnaXRrOjQwODcKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAiQ2FudmlzIGFscyBmaXR4ZXJzOiIKKworIzogZ2l0azo0MDg4Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJDYWRlbmEgZml4YSIKKworIzogZ2l0azo0MDg5Cittc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgorbXNnc3RyICJFeHByZXNzacOzIHJlZ3VsYXIiCisKKyM6IGdpdGs6NDA5MAorbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICJDYWRlbmEgZGUgY2VyY2E6IgorCisjOiBnaXRrOjQwOTEKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyJEYXRlcyBkZSBjb21pc3Npw7MgKFwiZmEgMiBzZXRtYW5lc1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCIxNyBhYnIgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorCisjOiBnaXRrOjQwOTIKK21zZ2lkICJTaW5jZToiCittc2dzdHIgIkRlcyBkZToiCisKKyM6IGdpdGs6NDA5MworbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAiRmluczoiCisKKyM6IGdpdGs6NDA5NAorbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICJMaW1pdGEgbyBzYWx0YSB1biBub21icmUgZGUgcmV2aXNpb25zIChub21icmUgZW50ZXIgcG9zaXRpdSkiCisKKyM6IGdpdGs6NDA5NQorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiTm9tYnJlIGEgbW9zdHJhcjoiCisKKyM6IGdpdGs6NDA5NgorbXNnaWQgIk51bWJlciB0byBza2lwOiIKK21zZ3N0ciAiTm9tYnJlIGEgc2FsdGFyOiIKKworIzogZ2l0azo0MDk3Cittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAiT3BjaW9ucyBtaXNjZWzCt2zDoG5pZXM6IgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIk9yZGVuYSBlc3RyaWN0YW1lbnQgcGVyIGRhdGEiCisKKyM6IGdpdGs6NDA5OQorbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICJNYXJjYSBlbHMgY29zdGF0cyBkZSBsZXMgYnJhbnF1ZXMiCisKKyM6IGdpdGs6NDEwMAorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiTGltaXRhIGEgbGEgcHJpbWVyYSBtYXJlIgorCisjOiBnaXRrOjQxMDEKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAiSGlzdMOycmlhIHNlbnppbGxhIgorCisjOiBnaXRrOjQxMDIKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiUGFyw6BtZXRyZXMgYWRkaWNpb25hbHMgYWwgZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJJbnRyb2R1w691IGVscyBmaXR4ZXJzIGkgZGlyZWN0b3JpcyBhIGluY2xvdXJlLCB1biBwZXIgbMOtbmlhOiIKKworIzogZ2l0azo0MTA0Cittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIk9yZHJlIHBlciBhIGdlbmVyYXIgbcOpcyBjb21pc3Npb25zIGEgaW5jbG91cmU6IgorCisjOiBnaXRrOjQyMjgKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGs6IHZpc3RhIGQnZWRpY2nDsyIKKworIzogZ2l0azo0MjM2Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIi0tIGNyaXRlcmlzIHBlciBhIHNlbGVjY2lvbmFyIGxlcyByZXZpc2lvbnMiCisKKyM6IGdpdGs6NDI0MQorbXNnaWQgIlZpZXcgTmFtZSIKK21zZ3N0ciAiTm9tIGRlIHZpc3RhIgorCisjOiBnaXRrOjQzMTYKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICJBcGxpY2EgKEY1KSIKKworIzogZ2l0azo0MzU0Cittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICJFcnJvciBlbiBlbHMgcGFyw6BtZXRyZXMgZGUgc2VsZWNjacOzIGRlIGNvbWlzc2lvbnM6IgorCisjOiBnaXRrOjQ0MDkgZ2l0azo0NDYyIGdpdGs6NDkyNCBnaXRrOjQ5MzggZ2l0azo2MjA4IGdpdGs6MTIzNzMgZ2l0azoxMjM3NAorbXNnaWQgIk5vbmUiCittc2dzdHIgIkNhcCIKKworIzogZ2l0azo1MDIxIGdpdGs6NTAyNgorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIkRlc2NlbmRlbnQiCisKKyM6IGdpdGs6NTAyMgorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICJObyBkZXNjZW5kZW50IgorCisjOiBnaXRrOjUwMjkgZ2l0azo1MDM0Cittc2dpZCAiQW5jZXN0b3IiCittc2dzdHIgIkF2YW50cGFzc2F0IgorCisjOiBnaXRrOjUwMzAKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIk5vIGF2YW50cGFzc2F0IgorCisjOiBnaXRrOjUzMjQKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIkNhbnZpcyBsb2NhbHMgcmVnaXN0cmF0cyBlbiBsJ8OtbmRleCBwZXLDsiBubyBjb21lc29zIgorCisjOiBnaXRrOjUzNjAKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiQ2FudmlzIGxvY2FscyBzZW5zZSBjb21ldHJlLCBubyByZWdpc3RyYXRzIGVuIGwnw61uZGV4IgorCisjOiBnaXRrOjcxMzQKK21zZ2lkICJhbmQgbWFueSBtb3JlIgorbXNnc3RyICJpIG1vbHRlcyBtw6lzIgorCisjOiBnaXRrOjcxMzcKK21zZ2lkICJtYW55IgorbXNnc3RyICJtb2x0ZXMiCisKKyM6IGdpdGs6NzMyOAorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJFdGlxdWV0ZXM6IgorCisjOiBnaXRrOjczNDUgZ2l0azo3MzUxIGdpdGs6ODgyNQorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAiTWFyZSIKKworIzogZ2l0azo3MzU2Cittc2dpZCAiQ2hpbGQiCittc2dzdHIgIkZpbGxhIgorCisjOiBnaXRrOjczNjUKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIkJyYW5jYSIKKworIzogZ2l0azo3MzY4Cittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAiU2VndWVpeCIKKworIzogZ2l0azo3MzcxCittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIlByZWNlZGVpeCIKKworIzogZ2l0azo3OTY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkVycm9yIGVuIG9idGVuaXIgbGVzIGRpZmVyw6huY2llczogJXMiCisKKyM6IGdpdGs6ODY1MAorbXNnaWQgIkdvdG86IgorbXNnc3RyICJWw6lzIGE6IgorCisjOiBnaXRrOjg2NzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiTCdpZCBTSEExIGN1cnRhICVzIMOpcyBhbWJpZ3VhIgorCisjOiBnaXRrOjg2NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIkxhIHJldmlzacOzICVzIMOpcyBkZXNjb25lZ3VkYSIKKworIzogZ2l0azo4Njg4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIkwnaWQgU0hBMSAlcyDDqXMgZGVzY29uZWd1ZGEiCisKKyM6IGdpdGs6ODY5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgorbXNnc3RyICJMYSByZXZpc2nDsyAlcyBubyDDqXMgZW4gbGEgdmlzdGEgYWN0dWFsIgorCisjOiBnaXRrOjg4MzIgZ2l0azo4ODQ3Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAiRGF0YSIKKworIzogZ2l0azo4ODM1Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIkZpbGxlcyIKKworIzogZ2l0azo4ODk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIlJlc3RhYmxlaXggbGEgYnJhbmNhICVzIGFxdcOtIgorCisjOiBnaXRrOjg5MDAKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiQ2FwIHNlcGFyYXQ6IG5vIGVzIHBvdCByZXN0YWJsaXIiCisKKyM6IGdpdGs6OTAwNSBnaXRrOjkwMTEKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICJTYWx0YW50IGxhIGNvbWlzc2nDsyBkZSBmdXNpw7MgIgorCisjOiBnaXRrOjkwMjAgZ2l0azo5MDI1Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICJFcnJvciBlbiBvYnRlbmlyIGwnSUQgZGUgcGVkYcOnIGRlICIKKworIzogZ2l0azo5MDIxIGdpdGs6OTAyNgorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIGF0dXJhbnRcbiIKKworIzogZ2l0azo5MDMxIGdpdGs6OTAzNCBnaXRrOjkwNDIgZ2l0azo5MDU2IGdpdGs6OTA2NQorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIkNvbWlzc2nDsyAiCisKKyM6IGdpdGs6OTAzNQorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIMOpcyBlbCBtYXRlaXggcGVkYcOnIHF1ZVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0MworbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBkaWZlcmVpeCBkZVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0NQorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJEaWZlcsOobmNpYSBlbnRyZSBjb21pc3Npb25zOlxuIgorIlxuIgorCisjOiBnaXRrOjkwNTcgZ2l0azo5MDY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiB0w6kgJXMgZmlsbGVzIC0gYXR1cmFudFxuIgorCisjOiBnaXRrOjkwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiRXJyb3IgZW4gZXNjcml1cmUgbGEgY29taXNzacOzIGFsIGZpdHhlcjogJXMiCisKKyM6IGdpdGs6OTA5MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIkVycm9yIGVuIGRpZmVyZW5jaWFyIGxlcyBjb21pc3Npb25zOiAlcyIKKworIzogZ2l0azo5MTM3Cittc2dpZCAiVG9wIgorbXNnc3RyICJQYXJ0IHN1cGVyaW9yIgorCisjOiBnaXRrOjkxMzgKK21zZ2lkICJGcm9tIgorbXNnc3RyICJEZSIKKworIzogZ2l0azo5MTQzCittc2dpZCAiVG8iCittc2dzdHIgIkEiCisKKyM6IGdpdGs6OTE2NworbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJHZW5lcmEgcGVkYcOnIgorCisjOiBnaXRrOjkxNjkKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiRGU6IgorCisjOiBnaXRrOjkxNzgKK21zZ2lkICJUbzoiCittc2dzdHIgIkE6IgorCisjOiBnaXRrOjkxODcKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICJJbnZlcnRlaXgiCisKKyM6IGdpdGs6OTE4OSBnaXRrOjkzODUKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIkZpdHhlciBkZSBzb3J0aWRhOiIKKworIzogZ2l0azo5MTk1Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlbmVyYSIKKworIzogZ2l0azo5MjMzCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICJFcnJvciBlbiBjcmVhciBlbCBwZWRhw6c6IgorCisjOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjkyNjUKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIk5vbSBkJ2V0aXF1ZXRhOiIKKworIzogZ2l0azo5MjY4Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgIkVsIG1pc3NhdGdlIGQnZXRpcXVldGEgw6lzIG9wY2lvbmFsIgorCisjOiBnaXRrOjkyNzAKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIk1pc3NhdGdlIGQnZXRpcXVldGE6IgorCisjOiBnaXRrOjkyNzQgZ2l0azo5NDM5Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJDcmVhIgorCisjOiBnaXRrOjkyOTIKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIk5vIHMnaGEgZXNwZWNpZmljYXQgY2FwIG5vbSBkJ2V0aXF1ZXRhIgorCisjOiBnaXRrOjkyOTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJMJ2V0aXF1ZXRhIFwiJXNcIiBqYSBleGlzdGVpeCIKKworIzogZ2l0azo5MzA2Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRXJyb3IgZW4gY3JlYXIgbCdldGlxdWV0YToiCisKKyM6IGdpdGs6OTM4MgorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJPcmRyZToiCisKKyM6IGdpdGs6OTM5MAorbXNnaWQgIldyaXRlIgorbXNnc3RyICJFc2NyaXUiCisKKyM6IGdpdGs6OTQwOAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKK21zZ3N0ciAiRXJyb3IgZW4gZXNjcml1cmUgbGEgY29taXNzacOzOiIKKworIzogZ2l0azo5NDM1Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk5vbToiCisKKyM6IGdpdGs6OTQ1OAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgIlNpIHVzIHBsYXUsIGVzcGVjaWZpcXVldSB1biBub20gcGVyIGEgbGEgYnJhbmNhIG5vdmEiCisKKyM6IGdpdGs6OTQ2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICJMYSBicmFuY2EgJyVzJyBqYSBleGlzdGVpeC4gVm9sZXUgc29icmVlc2NyaXVyZT8iCisKKyM6IGdpdGs6OTUzMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICIiCisiTGEgY29taXNzacOzICVzIGphIGVzdMOgIGluY2xvc2EgZW4gbGEgYnJhbmNhICVzIC0tIHJlYWxtZW50IHZvbGV1IHRvcm5hciBhICIKKyJhcGxpY2FyLWxhPyIKKworIzogZ2l0azo5NTM1Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIlJlY29sbGludCBjaXJlcmVzIgorCisjOiBnaXRrOjk1NDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiRWwgcmVjdWxsIGRlIGNpcmVyZXMgaGEgZmFsbGF0IGEgY2F1c2EgZGUgY2FudmlzIGxvY2FscyBhbCBmaXR4ZXIgJyVzJy5cbiIKKyJTaSB1cyBwbGF1LCBjb21ldGV1LCByZXN0YWJsaXUgbyBlbW1hZ2F0emVtZXUgZWxzIHZvc3RyZXMgY2FudmlzIGkgdG9ybmV1IGEgIgorImludGVudGFyLiIKKworIzogZ2l0azo5NTUwCittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiRWwgcmVjdWxsIGRlIGNpcmVyZXMgaGEgZmFsbGF0IGEgY2F1c2EgZCd1biBjb25mbGljdGUgZGUgZnVzacOzLlxuIgorIlZvbGV1IGV4ZWN1dGFyIGVsIGdpdCBjaXRvb2wgcGVyIGEgcmVzb2xkcmUnbD8iCisKKyM6IGdpdGs6OTU2NiBnaXRrOjk2MjQKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAiQ2FwIGNhbnZpIGNvbcOocyIKKworIzogZ2l0azo5NTkzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIG5vdCBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJldmVydCBpdD8iCittc2dzdHIgIiIKKyJMYSBjb21pc3Npw7MgJXMgbm8gcydpbmNsb3UgZW4gbGEgYnJhbmNhICVzIC0tIHJlYWxtZW50IHZvbGV1IHJldmVydGlyLWxhPyIKKworIzogZ2l0azo5NTk4Cittc2dpZCAiUmV2ZXJ0aW5nIgorbXNnc3RyICJSZXZlcnRpbnQiCisKKyM6IGdpdGs6OTYwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCisiY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiTGEgcmV2ZXJzacOzIGhhIGZhbGxhdCBhIGNhdXNhIGRlIGNhbnZpcyBsb2NhbHMgYWxzIGZpdHhlcnMgc2Vnw7xlbnRzOiVzIFNpIHVzICIKKyJwbGF1LCBjb21ldGV1LCByZXN0YWJsaXUgbyBlbW1hZ2F0emVtZXUgZWxzIHZvc3RyZXMgY2FudmlzIGkgdG9ybmV1LWhvIGEgIgorImludGVudGFyLiIKKworIzogZ2l0azo5NjEwCittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyIgRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJMYSByZXZlcnNpw7MgaGEgZmFsbGF0IGEgY2F1c2EgZCd1biBjb25mbGljdGUgZGUgZnVzacOzLlxuIgorIiBWb2xldSBleGVjdXRhciBlbCBnaXQgY2l0b29sIHBlciBhIHJlc29sZHJlJ2w/IgorCisjOiBnaXRrOjk2NTMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJDb25maXJtYSBlbCByZXN0YWJsaW1lbnQiCisKKyM6IGdpdGs6OTY1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIlZvbGV1IHJlc3RhYmxpciBsYSBicmFuY2EgJXMgYSAlcz8iCisKKyM6IGdpdGs6OTY1NworbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICJUaXB1cyBkZSByZXN0YWJsaW1lbnQ6IgorCisjOiBnaXRrOjk2NjAKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiU3VhdTogRGVpeGEgbCdhcmJyZSBkZSB0cmViYWxsIGkgbCfDrW5kZXggc2Vuc2UgdG9jYXIiCisKKyM6IGdpdGs6OTY2MworbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiTWl4dDogRGVpeGEgbCdhcmJyZSBkZSB0cmViYWxsIHNlbnNlIHRvY2FyLCByZXN0YWJsZWl4IGwnw61uZGV4IgorCisjOiBnaXRrOjk2NjYKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkR1cjogUmVzdGFibGVpeCBsJ2FyYnJlIGRlIHRyZWJhbGwgaSBsJ8OtbmRleFxuIgorIihkZXNjYXJ0YSBUT1RTIGVscyBjYW52aXMgbG9jYWxzKSIKKworIzogZ2l0azo5NjgzCittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICJSZXN0YWJsaW50IgorCisjOiBnaXRrOjk3NDMKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIkFnYWZhbnQiCisKKyM6IGdpdGs6OTc5NgorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIk5vIGVzIHBvdCBzdXByaW1pciBsYSBicmFuY2EgYWN0dWFsbWVudCBhZ2FmYWRhIgorCisjOiBnaXRrOjk4MDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorIkxlcyBjb21pc3Npb25zIGVuIGxhIGJyYW5jYSAlcyBubyBzw7NuIGVuIGNhcCBhbHRyYSBicmFuY2EuXG4iCisiUmVhbG1lbnQgdm9sZXUgc3VwcmltaXIgbGEgYnJhbmNhICVzPyIKKworIzogZ2l0azo5ODMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJFdGlxdWV0ZXMgaSBjYXBzOiAlcyIKKworIzogZ2l0azo5ODUwCittc2dpZCAiRmlsdGVyIgorbXNnc3RyICJGaWx0cmUiCisKKyM6IGdpdGs6MTAxNDYKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyJFcnJvciBlbiBsbGVnaXIgbGEgaW5mb3JtYWNpw7MgZGUgdG9wb2xvZ2lhIGRlIGNvbWlzc2nDszsgbGEgaW5mb3JtYWNpw7Mgc29icmUgIgorImJyYW5xdWVzIGkgZXRpcXVldGVzIHByZWNlZGVudHMvc2Vnw7xlbnRzIHNlcsOgIGluY29tcGxldGEuIgorCisjOiBnaXRrOjExMTIzCittc2dpZCAiVGFnIgorbXNnc3RyICJFdGlxdWV0YSIKKworIzogZ2l0azoxMTEyNworbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMTIxMAorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJTZWxlY3RvciBkZSB0aXB1cyBkZSBsbGV0cmEgZGVsIEdpdGsiCisKKyM6IGdpdGs6MTEyMjcKK21zZ2lkICJCIgorbXNnc3RyICJCIgorCisjOiBnaXRrOjExMjMwCittc2dpZCAiSSIKK21zZ3N0ciAiSSIKKworIzogZ2l0azoxMTM0OAorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9ucyBkZSB2aXN1YWxpdHphY2nDsyBkZSBsYSBsbGlzdGEgZGUgY29taXNzaW9ucyIKKworIzogZ2l0azoxMTM1MQorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKK21zZ3N0ciAiQW1wbGFkYSBtw6B4aW1hIGRlbCBncsOgZmljIChsw61uaWVzKSIKKworIzogZ2l0azoxMTM1NQorIywgbm8tdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIkFtcGxhZGEgbcOgeGltYSBkZWwgZ3LDoGZpYyAoJSBkZWwgcGFuZWxsKSIKKworIzogZ2l0azoxMTM1OAorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiTW9zdHJhIGVscyBjYW52aXMgbG9jYWxzIgorCisjOiBnaXRrOjExMzYxCittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAiU2VsZWNjaW9uYSBhdXRvbcOgdGljYW1lbnQgbCdTSEExIChsb25naXR1ZCkiCisKKyM6IGdpdGs6MTEzNjUKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICJBbWFnYSBsZXMgcmVmZXLDqG5jaWVzIHJlbW90ZXMiCisKKyM6IGdpdGs6MTEzNjkKK21zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9ucyBkZSB2aXN1YWxpdHphY2nDsyBkZSBkaWZlcsOobmNpYSIKKworIzogZ2l0azoxMTM3MQorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJFc3BhaWF0IGRlIHRhYnVsYWNpw7MiCisKKyM6IGdpdGs6MTEzNzQKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzL2hlYWRzIgorbXNnc3RyICJNb3N0cmEgZXRpcXVldGVzL2NhcHMgcHJvcGVycyIKKworIzogZ2l0azoxMTM3NworbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCittc2dzdHIgIk5vbWJyZSBtw6B4aW0gZCdldGlxdWV0ZXMvY2FwcyBhIG1vc3RyYXIiCisKKyM6IGdpdGs6MTEzODAKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIkxpbWl0YSBsZXMgZGlmZXLDqG5jaWVzIGFscyBjYW1pbnMgbGxpc3RhdHMiCisKKyM6IGdpdGs6MTEzODMKK21zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKK21zZ3N0ciAiQWRtZXQgY29kaWZpY2FjaW9ucyBlc3BlY8OtZmlxdWVzIHBlciBhIGNhZGEgZml0eGVyIgorCisjOiBnaXRrOjExMzg5IGdpdGs6MTE1MzYKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgIkVpbmEgZGUgZGlmZXLDqG5jaWEgZXh0ZXJuYSIKKworIzogZ2l0azoxMTM5MAorbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAiVHJpZXUuLi4iCisKKyM6IGdpdGs6MTEzOTUKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbnMgZ2VuZXJhbHMiCisKKyM6IGdpdGs6MTEzOTgKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgIlVzYSBlbHMgZ2lueXMgdGVtYXRpdHphdHMiCisKKyM6IGdpdGs6MTE0MDAKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIoZWwgY2FudmkgcmVxdWVyZWl4IHJlaW5pY2lhcikiCisKKyM6IGdpdGs6MTE0MDIKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiKGFjdHVhbG1lbnQgbm8gZGlzcG9uaWJsZSkiCisKKyM6IGdpdGs6MTE0MTMKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiQ29sb3JzOiBwcmVzc2lvbmEgcGVyIGEgdHJpYXIiCisKKyM6IGdpdGs6MTE0MTYKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgIkludGVyZsOtY2llIgorCisjOiBnaXRrOjExNDE3Cittc2dpZCAiaW50ZXJmYWNlIgorbXNnc3RyICJpbnRlcmbDrWNpZSIKKworIzogZ2l0azoxMTQyMAorbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgIkZvbnMiCisKKyM6IGdpdGs6MTE0MjEgZ2l0azoxMTQ1MQorbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgImZvbnMiCisKKyM6IGdpdGs6MTE0MjQKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICJQcmltZXIgcGxhIgorCisjOiBnaXRrOjExNDI1Cittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAicHJpbWVyIHBsYSIKKworIzogZ2l0azoxMTQyOAorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAiRGlmZXLDqG5jaWE6IGzDrW5pZXMgdmVsbGVzIgorCisjOiBnaXRrOjExNDI5Cittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgImRpZmVyZW5jaWEgbGVzIGzDrW5pZXMgdmVsbGVzIgorCisjOiBnaXRrOjExNDMzCittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJEaWZlcsOobmNpYTogbMOtbmllcyBub3ZlcyIKKworIzogZ2l0azoxMTQzNAorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJkaWZlcmVuY2lhIGxlcyBsw61uaWVzIG5vdmVzIgorCisjOiBnaXRrOjExNDM4Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIkRpZmVyw6huY2lhOiBjYXDDp2FsZXJhIGRlIHRyb3MiCisKKyM6IGdpdGs6MTE0NDAKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJkaWZlcmVuY2lhIGxhIGNhcMOnYWxlcmEgZGUgdHJvcyIKKworIzogZ2l0azoxMTQ0NAorbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgorbXNnc3RyICJGb25zIGRlIGxhIGzDrW5pYSBtYXJjYWRhIgorCisjOiBnaXRrOjExNDQ2Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAiZm9ucyBkZSBsYSBsw61uaWEgbWFyY2FkYSIKKworIzogZ2l0azoxMTQ1MAorbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAiRm9ucyBkZSBsYSBzZWxlY2Npw7MiCisKKyM6IGdpdGs6MTE0NTkKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJUaXB1cyBkZSBsbGV0cmE6IHByZXNzaW9uYSBwZXIgYSB0cmlhciIKKworIzogZ2l0azoxMTQ2MQorbXNnaWQgIk1haW4gZm9udCIKK21zZ3N0ciAiVGlwdXMgZGUgbGxldHJhIHByaW5jaXBhbCIKKworIzogZ2l0azoxMTQ2MgorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJUaXB1cyBkZSBsbGV0cmEgZGUgdmlzdWFsaXR6YWNpw7MgZGUgZGlmZXLDqG5jaWEiCisKKyM6IGdpdGs6MTE0NjMKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJUaXB1cyBkZSBsbGV0cmEgZGUgbGEgaW50ZXJmw61jaWUgZCd1c3VhcmkiCisKKyM6IGdpdGs6MTE0ODUKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJQcmVmZXLDqG5jaWVzIGRlbCBHaXRrIgorCisjOiBnaXRrOjExNDk0Cittc2dpZCAiR2VuZXJhbCIKK21zZ3N0ciAiR2VuZXJhbCIKKworIzogZ2l0azoxMTQ5NQorbXNnaWQgIkNvbG9ycyIKK21zZ3N0ciAiQ29sb3JzIgorCisjOiBnaXRrOjExNDk2Cittc2dpZCAiRm9udHMiCittc2dzdHIgIlRpcHVzIGRlIGxsZXRyYSIKKworIzogZ2l0azoxMTU0NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGs6IHRyaWEgZWwgY29sb3IgcGVyIGEgJXMiCisKKyM6IGdpdGs6MTIwNTkKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyJQZXJkw7MsIGVsIGdpdGsgbm8gcG90IGV4ZWN1dGFyLXNlIGFtYiBhcXVlc3RhIHZlcnNpw7MgZGUgVGNsL1RrLlxuIgorIiBFbCBHaXRrIHJlcXVlcmVpeCBjb20gYSBtw61uaW0gZWwgVGNsL1RrIDguNC4iCisKKyM6IGdpdGs6MTIyNjkKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICJObyBlcyBwb3QgdHJvYmFyIGNhcCBkaXDDsnNpdCBkZSBnaXQgYXF1w60uIgorCisjOiBnaXRrOjEyMzE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICJQYXLDoG1ldHJlIGFtYmlndSAnJXMnOiDDqXMgdGFudCByZXZpc2nDsyBjb20gbm9tIGRlIGZpdHhlciIKKworIzogZ2l0azoxMjMyOAorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIlBhcsOgbWV0cmVzIGRvbGVudHMgYWwgZ2l0azoiCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9kZS5wbyBiL2dpdGstZ2l0L3BvL2RlLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYjM4MjQKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9kZS5wbwpAQCAtMCwwICsxLDEzODcgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0ayB0byBHZXJtYW4uCisjIENvcHlyaWdodCAoQykgMjAwNyBQYXVsIE1hY2tlcnJhcy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KKyMKKyMgQ2hyaXN0aWFuIFN0aW1taW5nIDxzdGltbWluZ0B0dWhoLmRlPiwgMjAwNy4KKyMgRnJlZGVyaWsgU2Nod2FyemVyIDxzY2h3YXJ6ZXJmQGdtYWlsLmNvbT4sIDIwMDguCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDE0OjMyKzEwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTEwLTIwIDE0OjIwKzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IENocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHZXJtYW5cbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJMaXN0ZSBkZXIgbmljaHQgenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gbmljaHQgZ2VmdW5kZW46IgorCisjOiBnaXRrOjIxMiBnaXRrOjIzODEKK21zZ2lkICJDb2xvciB3b3JkcyIKK21zZ3N0ciAiV8O2cnRlciBlaW5mw6RyYmVuIgorCisjOiBnaXRrOjIxNyBnaXRrOjIzODEgZ2l0azo4MjIwIGdpdGs6ODI1MworbXNnaWQgIk1hcmt1cCB3b3JkcyIKK21zZ3N0ciAiV8O2cnRlciBrZW5uemVpY2huZW4iCisKKyM6IGdpdGs6MzI0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXIgVmVyc2lvbmVuOiIKKworIzogZ2l0azozODAKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIGRlcyAtLWFyZ3NjbWQtS29tbWFuZG9zOiIKKworIzogZ2l0azozOTMKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyJLZWluZSBEYXRlaWVuIGF1c2dld8OkaGx0OiBFcyB3dXJkZSAtLW1lcmdlIGFuZ2VnZWJlbiwgYWJlciBlcyBleGlzdGllcmVuICIKKyJrZWluZSBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZW4gRGF0ZWllbi4iCisKKyM6IGdpdGs6Mzk2Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgIiIKKyJLZWluZSBEYXRlaWVuIGF1c2dld8OkaGx0OiBFcyB3dXJkZSAtLW1lcmdlIGFuZ2VnZWJlbiwgYWJlciBlcyBzaW5kIGtlaW5lICIKKyJuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZW4gRGF0ZWllbiBpbiBkZXIgRGF0ZWlhdXN3YWhsLiIKKworIzogZ2l0azo0MTggZ2l0azo1NjYKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgIkZlaGxlciBiZWltIEF1c2bDvGhyZW4gdm9uIMK7Z2l0IGxvZ8KrOiIKKworIzogZ2l0azo0MzYgZ2l0azo1ODIKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICJMZXNlbiIKKworIzogZ2l0azo0OTYgZ2l0azo0NTI1Cittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICJWZXJzaW9uZW4gd2VyZGVuIGdlbGVzZW4gLi4uIgorCisjOiBnaXRrOjQ5OSBnaXRrOjE2MzcgZ2l0azo0NTI4Cittc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKK21zZ3N0ciAiS2VpbmUgVmVyc2lvbmVuIGF1c2dld8OkaGx0IgorCisjOiBnaXRrOjE0NDUgZ2l0azo0MDQ1IGdpdGs6MTI0MzIKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIktvbW1hbmRvemVpbGUiCisKKyM6IGdpdGs6MTUxMQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiQXVzZ2FiZSB2b24gwrtnaXQgbG9nwqsga2FubiBuaWNodCBlcmthbm50IHdlcmRlbjoiCisKKyM6IGdpdGs6MTc0MAorbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCittc2dzdHIgIktlaW5lIFZlcnNpb25zaW5mb3JtYXRpb24gdmVyZsO8Z2JhciIKKworIzogZ2l0azoxOTAzIGdpdGs6MTkzMiBnaXRrOjQzMTUgZ2l0azo5NjY5IGdpdGs6MTEyNDEgZ2l0azoxMTUyMQorbXNnaWQgIk9LIgorbXNnc3RyICJPayIKKworIzogZ2l0azoxOTM0IGdpdGs6NDMxNyBnaXRrOjkxOTYgZ2l0azo5Mjc1IGdpdGs6OTM5MSBnaXRrOjk0NDAgZ2l0azo5NjcxCisjOiBnaXRrOjExMjQyIGdpdGs6MTE1MjIKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkFiYnJlY2hlbiIKKworIzogZ2l0azoyMDY5Cittc2dpZCAiJlVwZGF0ZSIKK21zZ3N0ciAiJkFrdHVhbGlzaWVyZW4iCisKKyM6IGdpdGs6MjA3MAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgIiZOZXUgbGFkZW4iCisKKyM6IGdpdGs6MjA3MQorbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKK21zZ3N0ciAiJlp3ZWlnZSBuZXUgbGFkZW4iCisKKyM6IGdpdGs6MjA3MgorbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIlp3ZWlnZS9NYXJraWVydW5nZW4gYXVmJmxpc3RlbiIKKworIzogZ2l0azoyMDc0Cittc2dpZCAiU3RhcnQgZ2l0ICZndWkiCittc2dzdHIgIsK7Z2l0ICZndWnCqyBzdGFydGVuIgorCisjOiBnaXRrOjIwNzYKK21zZ2lkICImUXVpdCIKK21zZ3N0ciAiJkJlZW5kZW4iCisKKyM6IGdpdGs6MjA2OAorbXNnaWQgIiZGaWxlIgorbXNnc3RyICImRGF0ZWkiCisKKyM6IGdpdGs6MjA4MAorbXNnaWQgIiZQcmVmZXJlbmNlcyIKK21zZ3N0ciAiJkVpbnN0ZWxsdW5nZW4iCisKKyM6IGdpdGs6MjA3OQorbXNnaWQgIiZFZGl0IgorbXNnc3RyICImQmVhcmJlaXRlbiIKKworIzogZ2l0azoyMDg0Cittc2dpZCAiJk5ldyB2aWV3Li4uIgorbXNnc3RyICImTmV1ZSBBbnNpY2h0IC4uLiIKKworIzogZ2l0azoyMDg1Cittc2dpZCAiJkVkaXQgdmlldy4uLiIKK21zZ3N0ciAiQW5zaWNodCAmYmVhcmJlaXRlbiAuLi4iCisKKyM6IGdpdGs6MjA4NgorbXNnaWQgIiZEZWxldGUgdmlldyIKK21zZ3N0ciAiQW5zaWNodCAmZW50ZmVybmVuIgorCisjOiBnaXRrOjIwODggZ2l0azo0MDQzCittc2dpZCAiJkFsbCBmaWxlcyIKK21zZ3N0ciAiJkFsbGUgRGF0ZWllbiIKKworIzogZ2l0azoyMDgzIGdpdGs6NDA2NworbXNnaWQgIiZWaWV3IgorbXNnc3RyICImQW5zaWNodCIKKworIzogZ2l0azoyMDkzIGdpdGs6MjEwMyBnaXRrOjMwMTIKK21zZ2lkICImQWJvdXQgZ2l0ayIKK21zZ3N0ciAiw5xiZXIgJmdpdGsiCisKKyM6IGdpdGs6MjA5NCBnaXRrOjIxMDgKK21zZ2lkICImS2V5IGJpbmRpbmdzIgorbXNnc3RyICImVGFzdGVua8O8cnplbCIKKworIzogZ2l0azoyMDkyIGdpdGs6MjEwNworbXNnaWQgIiZIZWxwIgorbXNnc3RyICImSGlsZmUiCisKKyM6IGdpdGs6MjE4NSBnaXRrOjg2NTIKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMSBJRDoiCisKKyM6IGdpdGs6MjIyOQorbXNnaWQgIlJvdyIKK21zZ3N0ciAiWmVpbGUiCisKKyM6IGdpdGs6MjI2NworbXNnaWQgIkZpbmQiCittc2dzdHIgIlN1Y2hlIgorCisjOiBnaXRrOjIyOTUKK21zZ2lkICJjb21taXQiCittc2dzdHIgIlZlcnNpb24gbmFjaCIKKworIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3CisjOiBnaXRrOjY5MTIKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAiQmVzY2hyZWlidW5nOiIKKworIzogZ2l0azoyMzAyIGdpdGs6MzUyNiBnaXRrOjM1MzEgZ2l0azo0NzYzCittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICJEYXRlaWVuOiIKKworIzogZ2l0azoyMzAzIGdpdGs6NDc3NworbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICLDhG5kZXJ1bmdlbjoiCisKKyM6IGdpdGs6MjMwNCBnaXRrOjQ3NzkKK21zZ2lkICJjaGFuZ2luZyBsaW5lcyBtYXRjaGluZzoiCittc2dzdHIgIkdlw6RuZGVydGUgWmVpbGVuIGVudHNwcmVjaGVuOiIKKworIzogZ2l0azoyMzEzIGdpdGs6MjMxNSBnaXRrOjQ3NjYKK21zZ2lkICJFeGFjdCIKK21zZ3N0ciAiRXhha3QiCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ4NTQgZ2l0azo2NzIzCittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAiS2VpbiBHcm/Dny9LbGVpbiIKKworIzogZ2l0azoyMzE1IGdpdGs6NDczNiBnaXRrOjQ4NTIgZ2l0azo2NzE5Cittc2dpZCAiUmVnZXhwIgorbXNnc3RyICJSZWdleHAiCisKKyM6IGdpdGs6MjMxNyBnaXRrOjIzMTggZ2l0azo0ODc0IGdpdGs6NDkwNCBnaXRrOjQ5MTEgZ2l0azo2ODQ4IGdpdGs6NjkxNgorbXNnaWQgIkFsbCBmaWVsZHMiCittc2dzdHIgIkFsbGUgRmVsZGVyIgorCisjOiBnaXRrOjIzMTggZ2l0azo0ODcxIGdpdGs6NDkwNCBnaXRrOjY3ODYKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiw5xiZXJzY2hyaWZ0IgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjY5MTYgZ2l0azo3Mzg5Cittc2dpZCAiQ29tbWVudHMiCittc2dzdHIgIkJlc2NocmVpYnVuZyIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjQ4NzYgZ2l0azo0OTExIGdpdGs6Njc4NiBnaXRrOjczMjQgZ2l0azo4ODMwCisjOiBnaXRrOjg4NDUKK21zZ2lkICJBdXRob3IiCittc2dzdHIgIkF1dG9yIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjczMjYKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIkVpbnRyYWdlbmRlciIKKworIzogZ2l0azoyMzUwCittc2dpZCAiU2VhcmNoIgorbXNnc3RyICJTdWNoZW4iCisKKyM6IGdpdGs6MjM1OAorbXNnaWQgIkRpZmYiCittc2dzdHIgIlZlcmdsZWljaCIKKworIzogZ2l0azoyMzYwCittc2dpZCAiT2xkIHZlcnNpb24iCittc2dzdHIgIkFsdGUgVmVyc2lvbiIKKworIzogZ2l0azoyMzYyCittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIk5ldWUgVmVyc2lvbiIKKworIzogZ2l0azoyMzY0Cittc2dpZCAiTGluZXMgb2YgY29udGV4dCIKK21zZ3N0ciAiS29udGV4dHplaWxlbiIKKworIzogZ2l0azoyMzc0Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiTGVlcnplaWNoZW7DpG5kZXJ1bmdlbiBpZ25vcmllcmVuIgorCisjOiBnaXRrOjIzNzggZ2l0azoyMzgwIGdpdGs6Nzk1OSBnaXRrOjgyMDYKK21zZ2lkICJMaW5lIGRpZmYiCittc2dzdHIgIlplaWxlbnVudGVyc2NoaWVkIgorCisjOiBnaXRrOjI0NDUKK21zZ2lkICJQYXRjaCIKK21zZ3N0ciAiUGF0Y2giCisKKyM6IGdpdGs6MjQ0NworbXNnaWQgIlRyZWUiCittc2dzdHIgIkJhdW0iCisKKyM6IGdpdGs6MjYxNyBnaXRrOjI2MzcKK21zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCittc2dzdHIgIlZlcmdsZWljaDogZGllc2UgLT4gZ2V3w6RobHRlIgorCisjOiBnaXRrOjI2MTggZ2l0azoyNjM4Cittc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgorbXNnc3RyICJWZXJnbGVpY2g6IGdld8OkaGx0ZSAtPiBkaWVzZSIKKworIzogZ2l0azoyNjE5IGdpdGs6MjYzOQorbXNnaWQgIk1ha2UgcGF0Y2giCittc2dzdHIgIlBhdGNoIGVyc3RlbGxlbiIKKworIzogZ2l0azoyNjIwIGdpdGs6OTI1NAorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIk1hcmtpZXJ1bmcgZXJzdGVsbGVuIgorCisjOiBnaXRrOjI2MjEgZ2l0azo5MzcxCittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIlZlcnNpb24gaW4gRGF0ZWkgc2NocmVpYmVuIgorCisjOiBnaXRrOjI2MjIgZ2l0azo5NDI4Cittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgIk5ldWVuIFp3ZWlnIGVyc3RlbGxlbiIKKworIzogZ2l0azoyNjIzCittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIkRpZXNlIFZlcnNpb24gcGZsw7xja2VuIgorCisjOiBnaXRrOjI2MjQKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJIRUFELVp3ZWlnIGF1ZiBkaWVzZSBWZXJzaW9uIHp1csO8Y2tzZXR6ZW4iCisKKyM6IGdpdGs6MjYyNQorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIkxlc2V6ZWljaGVuIHNldHplbiIKKworIzogZ2l0azoyNjI2Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgIlp1bSBMZXNlemVpY2hlbiIKKworIzogZ2l0azoyNjI3Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIkFia8O2bW1saW5nIHZvbiBMZXNlemVpY2hlbiB1bmQgZGllc2VyIFZlcnNpb24gZmluZGVuIgorCisjOiBnaXRrOjI2MjgKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiTWl0IExlc2V6ZWljaGVuIHZlcmdsZWljaGVuIgorCisjOiBnaXRrOjI2MjkgZ2l0azoyNjQwCittc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCittc2dzdHIgIlZlcmdsZWljaDogZGllc2UgLT4gZ2V3w6RobHRlIFZlcnNpb24iCisKKyM6IGdpdGs6MjYzMCBnaXRrOjI2NDEKK21zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKK21zZ3N0ciAiVmVyZ2xlaWNoOiBnZXfDpGhsdGUgLT4gZGllc2UgVmVyc2lvbiIKKworIzogZ2l0azoyNjMxCittc2dpZCAiUmV2ZXJ0IHRoaXMgY29tbWl0IgorbXNnc3RyICJWZXJzaW9uIHVta2VocmVuIgorCisjOiBnaXRrOjI2NDcKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIkF1ZiBkaWVzZW4gWndlaWcgdW1zdGVsbGVuIgorCisjOiBnaXRrOjI2NDgKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIlp3ZWlnIGzDtnNjaGVuIgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICJad2VpZ25hbWUga29waWVyZW4iCisKKyM6IGdpdGs6MjY1NgorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiRGllc2VuIGF1Y2ggaGVydm9yaGViZW4iCisKKyM6IGdpdGs6MjY1NworbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIk51ciBkaWVzZW4gaGVydm9yaGViZW4iCisKKyM6IGdpdGs6MjY1OAorbXNnaWQgIkV4dGVybmFsIGRpZmYiCittc2dzdHIgIkV4dGVybmVzIERpZmYtUHJvZ3JhbW0iCisKKyM6IGdpdGs6MjY1OQorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIkFubm90aWVyZW4gZGVyIEVsdGVybnZlcnNpb24iCisKKyM6IGdpdGs6MjY2MAorbXNnaWQgIkNvcHkgcGF0aCIKK21zZ3N0ciAiUGZhZCBrb3BpZXJlbiIKKworIzogZ2l0azoyNjY3Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICJIZXJrdW5mdCBkaWVzZXIgWmVpbGUgYW56ZWlnZW4iCisKKyM6IGdpdGs6MjY2OAorbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiRGllc2UgWmVpbGUgYW5ub3RpZXJlbiAowrtnaXQgZ3VpIGJsYW1lwqspIgorCisjOiBnaXRrOjMwMTQKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIiIKKyJcbiIKKyJHaXRrIC0gZWluZSBWaXN1YWxpc2llcnVuZyBkZXIgR2l0LUhpc3RvcmllXG4iCisiXG4iCisiQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiQmVudXR6dW5nIHVuZCBXZWl0ZXJ2ZXJicmVpdHVuZyBnZW3DpMOfIGRlbiBCZWRpbmd1bmdlbiBkZXIgR05VIEdlbmVyYWwgUHVibGljICIKKyJMaWNlbnNlIgorCisjOiBnaXRrOjMwMjIgZ2l0azozMDg5IGdpdGs6OTg1NworbXNnaWQgIkNsb3NlIgorbXNnc3RyICJTY2hsaWXDn2VuIgorCisjOiBnaXRrOjMwNDMKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiR2l0ay1UYXN0YXR1cmJlbGVndW5nIgorCisjOiBnaXRrOjMwNDYKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIkdpdGstVGFzdGF0dXJiZWxlZ3VuZzoiCisKKyM6IGdpdGs6MzA0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0QmVlbmRlbiIKKworIzogZ2l0azozMDQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLUY+XHRcdEZlbnN0ZXIgc2NobGllw59lbiIKKworIzogZ2l0azozMDUwCittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8UG9zMT5cdFx0WnVyIG5ldWVzdGVuIFZlcnNpb24gc3ByaW5nZW4iCisKKyM6IGdpdGs6MzA1MQorbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCittc2dzdHIgIjxFbmRlPlx0XHRadXIgw6RsdGVzdGVuIFZlcnNpb24gc3ByaW5nZW4iCisKKyM6IGdpdGs6MzA1MgorbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPEhvY2g+LCBwLCBrXHROw6RjaHN0ZSBuZXVlcmUgVmVyc2lvbiIKKworIzogZ2l0azozMDUzCittc2dpZCAiPERvd24+LCBuLCBqXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKK21zZ3N0ciAiPFJ1bnRlcj4sIG4sIGpcdE7DpGNoc3RlIMOkbHRlcmUgVmVyc2lvbiIKKworIzogZ2l0azozMDU0Cittc2dpZCAiPExlZnQ+LCB6LCBoXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPExpbmtzPiwgeiwgaFx0RWluZSBWZXJzaW9uIHp1csO8Y2tnZWhlbiIKKworIzogZ2l0azozMDU1Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxSZWNodHM+LCB4LCBsXHRFaW5lIFZlcnNpb24gd2VpdGVyZ2VoZW4iCisKKyM6IGdpdGs6MzA1NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8JXMtbj5cdFp1IG4tdGVyIEVsdGVybnZlcnNpb24gaW4gVmVyc2lvbnNoaXN0b3JpZSBzcHJpbmdlbiIKKworIzogZ2l0azozMDU3Cittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxCaWxkSG9jaD5cdEVpbmUgU2VpdGUgbmFjaCBvYmVuIGJsw6R0dGVybiIKKworIzogZ2l0azozMDU4Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8QmlsZFJ1bnRlcj5cdEVpbmUgU2VpdGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLVBvczE+XHRadW0gb2JlcmVuIEVuZGUgZGVyIFZlcnNpb25zbGlzdGUgYmzDpHR0ZXJuIgorCisjOiBnaXRrOjMwNjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZGU+XHRadW0gdW50ZXJlbiBFbmRlIGRlciBWZXJzaW9uc2xpc3RlIGJsw6R0dGVybiIKKworIzogZ2l0azozMDYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtSG9jaD5cdFZlcnNpb25zbGlzdGUgZWluZSBaZWlsZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjMwNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtUnVudGVyPlx0VmVyc2lvbnNsaXN0ZSBlaW5lIFplaWxlIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjMwNjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtQmlsZEhvY2g+XHRWZXJzaW9uc2xpc3RlIGVpbmUgU2VpdGUgbmFjaCBvYmVuIGJsw6R0dGVybiIKKworIzogZ2l0azozMDY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1CaWxkUnVudGVyPlx0VmVyc2lvbnNsaXN0ZSBlaW5lIFNlaXRlIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjMwNjUKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxVbXNjaGFsdC1Ib2NoPlx0UsO8Y2t3w6RydHMgc3VjaGVuIChuYWNoIG9iZW47IG5ldWVyZSBWZXJzaW9uZW4pIgorCisjOiBnaXRrOjMwNjYKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFVtc2NoYWx0LVJ1bnRlcj4gU3VjaGVuIChuYWNoIHVudGVuOyDDpGx0ZXJlIFZlcnNpb25lbikiCisKKyM6IGdpdGs6MzA2NworbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RW50Zj4sIGJcdFx0VmVyZ2xlaWNoIGVpbmUgU2VpdGUgbmFjaCBvYmVuIGJsw6R0dGVybiIKKworIzogZ2l0azozMDY4Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxMw7ZzY2h0YXN0ZT5cdFZlcmdsZWljaCBlaW5lIFNlaXRlIG5hY2ggb2JlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA2OQorbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8TGVlcnRhc3RlPlx0VmVyZ2xlaWNoIGVpbmUgU2VpdGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRWZXJnbGVpY2ggdW0gMTggWmVpbGVuIG5hY2ggb2JlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA3MQorbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdFZlcmdsZWljaCB1bSAxOCBaZWlsZW4gbmFjaCB1bnRlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx0U3VjaGVuIgorCisjOiBnaXRrOjMwNzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx0V2VpdGVyc3VjaGVuIgorCisjOiBnaXRrOjMwNzQKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8RWluZ2FiZXRhc3RlPlx0V2VpdGVyc3VjaGVuIgorCisjOiBnaXRrOjMwNzUKK21zZ2lkICJnXHRcdEdvIHRvIGNvbW1pdCIKK21zZ3N0ciAiZ1x0XHRadSBWZXJzaW9uIHNwcmluZ2VuIgorCisjOiBnaXRrOjMwNzYKK21zZ2lkICIvXHRcdEZvY3VzIHRoZSBzZWFyY2ggYm94IgorbXNnc3RyICIvXHRcdFRhc3RhdHVyZm9rdXMgaW5zIFN1Y2hmZWxkIgorCisjOiBnaXRrOjMwNzcKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx0UsO8Y2t3w6RydHMgd2VpdGVyc3VjaGVuIgorCisjOiBnaXRrOjMwNzgKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdFZlcmdsZWljaCB6dXIgbsOkY2hzdGVuIERhdGVpIGJsw6R0dGVybiIKKworIzogZ2l0azozMDc5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx0V2VpdGVyc3VjaGVuIGltIFZlcmdsZWljaCIKKworIzogZ2l0azozMDgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdFLDvGNrd8OkcnRzIHdlaXRlcnN1Y2hlbiBpbSBWZXJnbGVpY2giCisKKyM6IGdpdGs6MzA4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1OdW1tZXJibG9jay1QbHVzPlx0U2NocmlmdCB2ZXJncsO2w59lcm4iCisKKyM6IGdpdGs6MzA4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtUGx1cz5cdFNjaHJpZnQgdmVyZ3LDtsOfZXJuIgorCisjOiBnaXRrOjMwODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTnVtbWVybmJsb2NrLU1pbnVzPiBTY2hyaWZ0IHZlcmtsZWluZXJuIgorCisjOiBnaXRrOjMwODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1NaW51cz5cdFNjaHJpZnQgdmVya2xlaW5lcm4iCisKKyM6IGdpdGs6MzA4NQorbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdEFrdHVhbGlzaWVyZW4iCisKKyM6IGdpdGs6MzU1MCBnaXRrOjM1NTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJ6ZXVnZW4gZGVzIHRlbXBvcsOkcmVuIFZlcnplaWNobmlzc2VzIMK7JXPCqzoiCisKKyM6IGdpdGs6MzU3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBIb2xlbiB2b24gwrslc8KrIHZvbiDCuyVzwqs6IgorCisjOiBnaXRrOjM2MzUKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgIktvbW1hbmRvIGZlaGxnZXNjaGxhZ2VuOiIKKworIzogZ2l0azozNzg0Cittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgIlZlcnNpb24gbmljaHQgZ2VmdW5kZW4iCisKKyM6IGdpdGs6Mzc5OAorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZTogS29tbWFuZG8gZmVobGdlc2NobGFnZW46IgorCisjOiBnaXRrOjM4MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICJadXNhbW1lbmbDvGhydW5ncy1TcGl0emUga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuOiAlcyIKKworIzogZ2l0azozODM3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIGRlciBCZXJlaXRzdGVsbHVuZyAowrtpbmRleMKrKTogJXMiCisKKyM6IGdpdGs6Mzg2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgIsK7Z2l0IGJsYW1lwqsga29ubnRlIG5pY2h0IGdlc3RhcnRldCB3ZXJkZW46ICVzIgorCisjOiBnaXRrOjM4NjUgZ2l0azo2NzU0Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJTdWNoZW4iCisKKyM6IGdpdGs6Mzg5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiB2b24gwrtnaXQgYmxhbWXCqzogJXMiCisKKyM6IGdpdGs6MzkyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIiIKKyJEaWVzZSBaZWlsZSBzdGFtbXQgYXVzIFZlcnNpb24gJXMsIGRpZSBuaWNodCBpbiBkaWVzZXIgQW5zaWNodCBnZXplaWd0IHdpcmQiCisKKyM6IGdpdGs6MzkzOQorbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgIkV4dGVybmVzIERpZmYtUHJvZ3JhbW0gZmVobGdlc2NobGFnZW46IgorCisjOiBnaXRrOjQwNzAKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiR2l0ay1BbnNpY2h0ZW4iCisKKyM6IGdpdGs6NDA3NAorbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAiRGllc2UgQW5zaWNodCBzcGVpY2hlcm4iCisKKyM6IGdpdGs6NDA3NQorbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCittc2dzdHIgIlp3ZWlnZS9NYXJraWVydW5nZW4gKGR1cmNoIExlZXJ6ZWljaGVuIGdldHJlbm50ZSBMaXN0ZSk6IgorCisjOiBnaXRrOjQwNzYKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJad2VpZ2UvTWFya2llcnVuZ2VuOiIKKworIzogZ2l0azo0MDc3Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIkFsbGUgTWFya2llcnVuZ2VuIHVuZCBad2VpZ2UiCisKKyM6IGdpdGs6NDA3OAorbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICJBbGxlIChsb2thbGVuKSBad2VpZ2UiCisKKyM6IGdpdGs6NDA3OQorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJBbGxlIE1hcmtpZXJ1bmdlbiIKKworIzogZ2l0azo0MDgwCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiQWxsZSDDnGJlcm5haG1lendlaWdlIgorCisjOiBnaXRrOjQwODEKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICJWZXJzaW9uc2luZm9ybWF0aW9uZW4gKHJlZ3Vsw6RyZSBBdXNkcsO8Y2tlKToiCisKKyM6IGdpdGs6NDA4MgorbXNnaWQgIkF1dGhvcjoiCittc2dzdHIgIkF1dG9yOiIKKworIzogZ2l0azo0MDgzCittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAiRWludHJhZ2VuZGVyOiIKKworIzogZ2l0azo0MDg0Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJWZXJzaW9uc2Jlc2NocmVpYnVuZzoiCisKKyM6IGdpdGs6NDA4NQorbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJBbGxlIFZlcnNpb25zaW5mb3JtYXRpb25lbi1Lcml0ZXJpZW4gZXJmw7xsbGVuIgorCisjOiBnaXRrOjQwODYKK21zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJrZWluZSBWZXJzaW9uc2luZm9ybWF0aW9uZW4tS3JpdGVyaWVuIGVyZsO8bGxlbiIKKworIzogZ2l0azo0MDg3Cittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgIkRhdGVpZW46IgorCisjOiBnaXRrOjQwODgKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgIlplaWNoZW5rZXR0ZSIKKworIzogZ2l0azo0MDg5Cittc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgorbXNnc3RyICJSZWd1bMOkcmVyIEF1c2RydWNrIgorCisjOiBnaXRrOjQwOTAKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAiU3VjaGF1c2RydWNrOiIKKworIzogZ2l0azo0MDkxCittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICIiCisiRGF0dW0gKMK7MiB3ZWVrcyBhZ2/CqywgwrsyMDA5LTAzLTE3IDE1OjI3OjM4wqssIMK7TWFyY2ggMTcsIDIwMDkgMTU6Mjc6MzjCqykiCisKKyM6IGdpdGs6NDA5MgorbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAiVm9uOiIKKworIzogZ2l0azo0MDkzCittc2dpZCAiVW50aWw6IgorbXNnc3RyICJCaXM6IgorCisjOiBnaXRrOjQwOTQKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAiVmVyc2lvbnNhbnphaGwgYmVncmVuemVuIG9kZXIgZWluaWdlIMO8YmVyc3ByaW5nZW4gKGdhbnp6YWhsaWdlciBXZXJ0KToiCisKKyM6IGdpdGs6NDA5NQorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiQW56ZWlnZW46IgorCisjOiBnaXRrOjQwOTYKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIsOcYmVyc3ByaW5nZW46IgorCisjOiBnaXRrOjQwOTcKK21zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgorbXNnc3RyICJTb25zdGlnZXM6IgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIlN0cmVuZyBuYWNoIERhdHVtIHNvcnRpZXJlbiIKKworIzogZ2l0azo0MDk5Cittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIlp3ZWlnLVNlaXRlbiBtYXJraWVyZW4iCisKKyM6IGdpdGs6NDEwMAorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiQXVmIGVyc3RlIEVsdGVybnZlcnNpb24gYmVzY2hyw6Rua2VuIgorCisjOiBnaXRrOjQxMDEKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAiRWluZmFjaGUgSGlzdG9yaWUiCisKKyM6IGdpdGs6NDEwMgorbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgorbXNnc3RyICJadXPDpHR6bGljaGUgQXJndW1lbnRlIGbDvHIgwrtnaXQgbG9nwqs6IgorCisjOiBnaXRrOjQxMDMKK21zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKK21zZ3N0ciAiRm9sZ2VuZGUgRGF0ZWllbiB1bmQgVmVyemVpY2huaXNzZSBhbnplaWdlbiAoZWluZSBwcm8gWmVpbGUpOiIKKworIzogZ2l0azo0MTA0Cittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIlZlcnNpb25zbGlzdGUgZHVyY2ggZm9sZ2VuZGVzIEtvbW1hbmRvIGVyemV1Z2VuIGxhc3NlbjoiCisKKyM6IGdpdGs6NDIyOAorbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azogQW5zaWNodCBiZWFyYmVpdGVuIgorCisjOiBnaXRrOjQyMzYKK21zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKK21zZ3N0ciAiLS0gQXVzd2FobCBkZXIgYW5nZXplaWd0ZW4gVmVyc2lvbmVuIgorCisjOiBnaXRrOjQyNDEKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIkFuc2ljaHRzbmFtZSIKKworIzogZ2l0azo0MzE2Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAiQW53ZW5kZW4gKEY1KSIKKworIzogZ2l0azo0MzU0Cittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICJGZWhsZXIgaW4gZGVuIGF1c2dld8OkaGx0ZW4gVmVyc2lvbmVuOiIKKworIzogZ2l0azo0NDA5IGdpdGs6NDQ2MiBnaXRrOjQ5MjQgZ2l0azo0OTM4IGdpdGs6NjIwOCBnaXRrOjEyMzczIGdpdGs6MTIzNzQKK21zZ2lkICJOb25lIgorbXNnc3RyICJLZWluZSIKKworIzogZ2l0azo1MDIxIGdpdGs6NTAyNgorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIkFia8O2bW1saW5nIgorCisjOiBnaXRrOjUwMjIKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAiS2VpbiBBYmvDtm1tbGluZyIKKworIzogZ2l0azo1MDI5IGdpdGs6NTAzNAorbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJWb3Jnw6RuZ2VyIgorCisjOiBnaXRrOjUwMzAKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIktlaW4gVm9yZ8OkbmdlciIKKworIzogZ2l0azo1MzI0Cittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICJMb2thbGUgw4RuZGVydW5nZW4gYmVyZWl0Z2VzdGVsbHQsIGFiZXIgbmljaHQgZWluZ2V0cmFnZW4iCisKKyM6IGdpdGs6NTM2MAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICJMb2thbGUgw4RuZGVydW5nZW4sIG5pY2h0IGJlcmVpdGdlc3RlbGx0IgorCisjOiBnaXRrOjcxMzQKK21zZ2lkICJhbmQgbWFueSBtb3JlIgorbXNnc3RyICJ1bmQgd2VpdGVyZSIKKworIzogZ2l0azo3MTM3Cittc2dpZCAibWFueSIKK21zZ3N0ciAidmllbGUiCisKKyM6IGdpdGs6NzMyOAorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJNYXJraWVydW5nZW46IgorCisjOiBnaXRrOjczNDUgZ2l0azo3MzUxIGdpdGs6ODgyNQorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAiRWx0ZXJuIgorCisjOiBnaXRrOjczNTYKK21zZ2lkICJDaGlsZCIKK21zZ3N0ciAiS2luZCIKKworIzogZ2l0azo3MzY1Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJad2VpZyIKKworIzogZ2l0azo3MzY4Cittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAiRm9sZ3QgYXVmIgorCisjOiBnaXRrOjczNzEKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAiVm9yZ8OkbmdlciB2b24iCisKKyM6IGdpdGs6Nzk2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXMgVmVyZ2xlaWNoczogJXMiCisKKyM6IGdpdGs6ODY1MAorbXNnaWQgIkdvdG86IgorbXNnc3RyICJHZWhlIHp1OiIKKworIzogZ2l0azo4NjcxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIkt1cnplciBTSEExLUhhc2h3ZXJ0IMK7JXPCqyBpc3QgbWVocmRldXRpZyIKKworIzogZ2l0azo4Njc4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJWZXJzaW9uIMK7JXPCqyBpc3QgdW5iZWthbm50IgorCisjOiBnaXRrOjg2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiU0hBMS1IYXNod2VydCDCuyVzwqsgaXN0IHVuYmVrYW5udCIKKworIzogZ2l0azo4NjkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgIlZlcnNpb24gwrslc8KrIHdpcmQgaW4gZGVyIGFrdHVlbGxlbiBBbnNpY2h0IG5pY2h0IGFuZ2V6ZWlndCIKKworIzogZ2l0azo4ODMyIGdpdGs6ODg0NworbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdHVtIgorCisjOiBnaXRrOjg4MzUKK21zZ2lkICJDaGlsZHJlbiIKK21zZ3N0ciAiS2luZGVyIgorCisjOiBnaXRrOjg4OTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiWndlaWcgwrslc8KrIGhpZXJoZXIgenVyw7xja3NldHplbiIKKworIzogZ2l0azo4OTAwCittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgIlp3ZWlnc3BpdHplIGlzdCBhYmdldHJlbm50OiBadXLDvGNrc2V0emVuIG5pY2h0IG3DtmdsaWNoIgorCisjOiBnaXRrOjkwMDUgZ2l0azo5MDExCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiw5xiZXJzcHJpbmdlIFp1c2FtbWVuZsO8aHJ1bmdzLVZlcnNpb24gIgorCisjOiBnaXRrOjkwMjAgZ2l0azo5MDI1Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICJGZWhsZXIgYmVpbSBIb2xlbiBkZXIgUGF0Y2gtSUQgZsO8ciAiCisKKyM6IGdpdGs6OTAyMSBnaXRrOjkwMjYKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgLSBBYmJydWNoLlxuIgorCisjOiBnaXRrOjkwMzEgZ2l0azo5MDM0IGdpdGs6OTA0MiBnaXRrOjkwNTYgZ2l0azo5MDY1Cittc2dpZCAiQ29tbWl0ICIKK21zZ3N0ciAiVmVyc2lvbiAiCisKKyM6IGdpdGs6OTAzNQorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIGlzdCBkYXMgZ2xlaWNoZSBQYXRjaCB3aWVcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDMKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgaXN0IHVudGVyc2NoaWVkbGljaCB2b25cbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDUKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICIiCisiVmVyZ2xlaWNoIGRlciBWZXJzaW9uZW46XG4iCisiXG4iCisKKyM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIGhhdCAlcyBLaW5kZXIuIEFiYnJ1Y2hcbiIKKworIzogZ2l0azo5MDg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXIgVmVyc2lvbiBpbiBEYXRlaTogJXMiCisKKyM6IGdpdGs6OTA5MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIFZlcmdsZWljaGVuIGRlciBWZXJzaW9uZW46ICVzIgorCisjOiBnaXRrOjkxMzcKK21zZ2lkICJUb3AiCittc2dzdHIgIk9iZW4iCisKKyM6IGdpdGs6OTEzOAorbXNnaWQgIkZyb20iCittc2dzdHIgIlZvbiIKKworIzogZ2l0azo5MTQzCittc2dpZCAiVG8iCittc2dzdHIgImJpcyIKKworIzogZ2l0azo5MTY3Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIlBhdGNoIGVyc3RlbGxlbiIKKworIzogZ2l0azo5MTY5Cittc2dpZCAiRnJvbToiCittc2dzdHIgIlZvbjoiCisKKyM6IGdpdGs6OTE3OAorbXNnaWQgIlRvOiIKK21zZ3N0ciAiYmlzOiIKKworIzogZ2l0azo5MTg3Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiVW1nZWtlaHJ0IgorCisjOiBnaXRrOjkxODkgZ2l0azo5Mzg1Cittc2dpZCAiT3V0cHV0IGZpbGU6IgorbXNnc3RyICJBdXNnYWJlZGF0ZWk6IgorCisjOiBnaXRrOjkxOTUKK21zZ2lkICJHZW5lcmF0ZSIKK21zZ3N0ciAiRXJ6ZXVnZW4iCisKKyM6IGdpdGs6OTIzMworbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJ6ZXVnZW4gZGVzIFBhdGNoZXM6IgorCisjOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjkyNjUKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIk1hcmtpZXJ1bmdzbmFtZToiCisKKyM6IGdpdGs6OTI2OAorbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICJFaW5lIE1hcmtpZXJ1bmdzYmVzY2hyZWlidW5nIGlzdCBvcHRpb25hbCIKKworIzogZ2l0azo5MjcwCittc2dpZCAiVGFnIG1lc3NhZ2U6IgorbXNnc3RyICJNYXJraWVydW5nc2Jlc2NocmVpYnVuZzoiCisKKyM6IGdpdGs6OTI3NCBnaXRrOjk0MzkKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkVyc3RlbGxlbiIKKworIzogZ2l0azo5MjkyCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJLZWluIE1hcmtpZXJ1bmdzbmFtZSBhbmdlZ2ViZW4iCisKKyM6IGdpdGs6OTI5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIk1hcmtpZXJ1bmcgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiIKKworIzogZ2l0azo5MzA2Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGRlciBNYXJraWVydW5nOiIKKworIzogZ2l0azo5MzgyCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIktvbW1hbmRvOiIKKworIzogZ2l0azo5MzkwCittc2dpZCAiV3JpdGUiCittc2dzdHIgIlNjaHJlaWJlbiIKKworIzogZ2l0azo5NDA4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVyIFZlcnNpb246IgorCisjOiBnaXRrOjk0MzUKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiTmFtZToiCisKKyM6IGdpdGs6OTQ1OAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgIkJpdHRlIGdlYmVuIFNpZSBlaW5lbiBOYW1lbiBmw7xyIGRlbiBuZXVlbiBad2VpZyBhbi4iCisKKyM6IGdpdGs6OTQ2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICJad2VpZyDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIFNvbGwgZXIgw7xiZXJzY2hyaWViZW4gd2VyZGVuPyIKKworIzogZ2l0azo5NTMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIiIKKyJWZXJzaW9uIMK7JXPCqyBpc3QgYmVyZWl0cyBpbSBad2VpZyDCuyVzwqsgZW50aGFsdGVuIC0tIHRyb3R6ZGVtIGVybmV1dCAiCisiZWludHJhZ2VuPyIKKworIzogZ2l0azo5NTM1Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIlZlcnNpb24gcGZsw7xja2VuIgorCisjOiBnaXRrOjk1NDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiUGZsw7xja2VuIGZlaGxnZXNjaGxhZ2VuLCBkYSBub2NoIGxva2FsZSDDhG5kZXJ1bmdlbiBpbiBEYXRlaSDCuyVzwqtcbiIKKyJ2b3JsaWVnZW4uIEJpdHRlIGRpZXNlIMOEbmRlcnVuZ2VuIGVpbnRyYWdlbiwgenVyw7xja3NldHplbiBvZGVyXG4iCisiendpc2NoZW5zcGVpY2hlcm4gKMK7Z2l0IHN0YXNowqspIHVuZCBkYW5uIGVybmV1dCB2ZXJzdWNoZW4uIgorCisjOiBnaXRrOjk1NTAKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJQZmzDvGNrZW4gZmVobGdlc2NobGFnZW4sIGRhIGVpbiBadXNhbW1lbmbDvGhydW5ncy1Lb25mbGlrdCBhdWZnZXRyZXRlblxuIgorImlzdC4gU29sbCBkYXMgWnVzYW1tZW5mw7xocnVuZ3MtV2Vya3pldWcgKMK7Z2l0IGNpdG9vbMKrKSBhdWZnZXJ1ZmVuXG4iCisid2VyZGVuLCB1bSBkaWVzZW4gS29uZmxpa3QgYXVmenVsw7ZzZW4/IgorCisjOiBnaXRrOjk1NjYgZ2l0azo5NjI0Cittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgIktlaW5lIMOEbmRlcnVuZ2VuIGVpbmdldHJhZ2VuIgorCisjOiBnaXRrOjk1OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKK21zZ3N0ciAiIgorIlZlcnNpb24gwrslc8KrIGlzdCBuaWNodCBpbSBad2VpZyDCuyVzwqsgZW50aGFsdGVuIC0tIHRyb3R6ZGVtIHVta2VocmVuPyIKKworIzogZ2l0azo5NTk4Cittc2dpZCAiUmV2ZXJ0aW5nIgorbXNnc3RyICJVbWtlaHJlbiIKKworIzogZ2l0azo5NjA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKKyJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJVbWtlaHJlbiBmZWhsZ2VzY2hsYWdlbiwgZGEgbm9jaCBsb2thbGUgw4RuZGVydW5nZW4gaW4gRGF0ZWkgwrslc8KrXG4iCisidm9ybGllZ2VuLiBCaXR0ZSBkaWVzZSDDhG5kZXJ1bmdlbiBlaW50cmFnZW4sIHp1csO8Y2tzZXR6ZW4gb2RlclxuIgorInp3aXNjaGVuc3BlaWNoZXJuICjCu2dpdCBzdGFzaMKrKSB1bmQgZGFubiBlcm5ldXQgdmVyc3VjaGVuLiIKKworIzogZ2l0azo5NjEwCittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyIgRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJVbWtlaHJlbiBmZWhsZ2VzY2hsYWdlbiwgZGEgZWluIFp1c2FtbWVuZsO8aHJ1bmdzLUtvbmZsaWt0IGF1ZmdldHJldGVuXG4iCisiaXN0LiBTb2xsIGRhcyBadXNhbW1lbmbDvGhydW5ncy1XZXJremV1ZyAowrtnaXQgY2l0b29swqspIGF1ZmdlcnVmZW5cbiIKKyJ3ZXJkZW4sIHVtIGRpZXNlbiBLb25mbGlrdCBhdWZ6dWzDtnNlbj8iCisKKyM6IGdpdGs6OTY1MworbXNnaWQgIkNvbmZpcm0gcmVzZXQiCittc2dzdHIgIlp1csO8Y2tzZXR6ZW4gYmVzdMOkdGlnZW4iCisKKyM6IGdpdGs6OTY1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIlp3ZWlnIMK7JXPCqyBhdWYgwrslc8KrIHp1csO8Y2tzZXR6ZW4/IgorCisjOiBnaXRrOjk2NTcKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiQXJ0IGRlcyBadXLDvGNrc2V0emVuczoiCisKKyM6IGdpdGs6OTY2MAorbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICJIYXJtbG9zOiBBcmJlaXRza29waWUgdW5kIEJlcmVpdHN0ZWxsdW5nIHVudmVyw6RuZGVydCIKKworIzogZ2l0azo5NjYzCittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICIiCisiR2VtaXNjaHQ6IEFyYmVpdHNrb3BpZSB1bnZlcsOkbmRlcnQsXG4iCisiQmVyZWl0c3RlbGx1bmcgenVyw7xja2dlc2V0enQiCisKKyM6IGdpdGs6OTY2NgorbXNnaWQgIiIKKyJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCisiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorbXNnc3RyICIiCisiSGFydDogQXJiZWl0c2tvcGllIHVuZCBCZXJlaXRzdGVsbHVuZ1xuIgorIihBbGxlIGxva2FsZW4gw4RuZGVydW5nZW4gd2VyZGVuIGdlbMO2c2NodCkiCisKKyM6IGdpdGs6OTY4MworbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAiWnVyw7xja3NldHplbiIKKworIzogZ2l0azo5NzQzCittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICJVbXN0ZWxsZW4iCisKKyM6IGdpdGs6OTc5NgorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIiIKKyJEZXIgWndlaWcsIGF1ZiBkZW4gZGllIEFyYmVpdHNrb3BpZSBtb21lbnRhbiB1bWdlc3RlbGx0IGlzdCwga2FubiBuaWNodCAiCisiZ2Vsw7ZzY2h0IHdlcmRlbi4iCisKKyM6IGdpdGs6OTgwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisiRGllIFZlcnNpb25lbiBhdWYgWndlaWcgwrslc8KrIGV4aXN0aWVyZW4gYXVmIGtlaW5lbSBhbmRlcmVuIFp3ZWlnLlxuIgorIlp3ZWlnIMK7JXPCqyB0cm90emRlbSBsw7ZzY2hlbj8iCisKKyM6IGdpdGs6OTgzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAiTWFya2llcnVuZ2VuIHVuZCBad2VpZ2U6ICVzIgorCisjOiBnaXRrOjk4NTAKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRlcm4iCisKKyM6IGdpdGs6MTAxNDYKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBMZXNlbiBkZXIgU3RydWt0dXJpbmZvcm1hdGlvbmVuOyBad2VpZ2UgdW5kIEluZm9ybWF0aW9uZW4genUgIgorIlZvcmfDpG5nZXIvTmFjaGZvbGdlciB3ZXJkZW4gdW52b2xsc3TDpG5kaWcgc2Vpbi4iCisKKyM6IGdpdGs6MTExMjMKK21zZ2lkICJUYWciCittc2dzdHIgIk1hcmtpZXJ1bmciCisKKyM6IGdpdGs6MTExMjcKK21zZ2lkICJJZCIKK21zZ3N0ciAiSWQiCisKKyM6IGdpdGs6MTEyMTAKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAiR2l0ay1TY2hyaWZ0ZW4gd8OkaGxlbiIKKworIzogZ2l0azoxMTIyNworbXNnaWQgIkIiCittc2dzdHIgIkYiCisKKyM6IGdpdGs6MTEyMzAKK21zZ2lkICJJIgorbXNnc3RyICJLIgorCisjOiBnaXRrOjExMzQ4Cittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJBbnplaWdlIGRlciBWZXJzaW9uc2xpc3RlIgorCisjOiBnaXRrOjExMzUxCittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJNYXhpbWFsZSBHcmFwaGVuYnJlaXRlIChaZWlsZW4pIgorCisjOiBnaXRrOjExMzU1CisjLCBuby10Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAiTWF4aW1hbGUgR3JhcGhlbmJyZWl0ZSAoJSBkZXMgRmVuc3RlcnMpIgorCisjOiBnaXRrOjExMzU4Cittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJMb2thbGUgw4RuZGVydW5nZW4gYW56ZWlnZW4iCisKKyM6IGdpdGs6MTEzNjEKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgorbXNnc3RyICJTSEExLUhhc2h3ZXJ0IChMw6RuZ2UpIGF1dG9tYXRpc2NoIGF1c3fDpGhsZW4iCisKKyM6IGdpdGs6MTEzNjUKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICJFbnRmZXJudGUgWndlaWdlL01hcmtpZXJ1bmdlbiBhdXNibGVuZGVuIgorCisjOiBnaXRrOjExMzY5Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIkFuemVpZ2UgZGVzIFZlcmdsZWljaHMiCisKKyM6IGdpdGs6MTEzNzEKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAiVGFidWxhdG9yYnJlaXRlIgorCisjOiBnaXRrOjExMzc0Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKK21zZ3N0ciAiTmFoZWxpZWdlbmRlIE1hcmtpZXJ1bmdlbi9ad2VpZ3NwaXR6ZW4gYW56ZWlnZW4iCisKKyM6IGdpdGs6MTEzNzcKK21zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgorbXNnc3RyICJNYXhpbWFsZSBBbnphaGwgYW56dXplaWdlbmRlciBNYXJraWVydW5nZW4vWndlaWdzcGl0emVuIgorCisjOiBnaXRrOjExMzgwCittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJWZXJnbGVpY2ggbnVyIGbDvHIgYW5nZXplaWd0ZSBQZmFkZSIKKworIzogZ2l0azoxMTM4MworbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICJaZWljaGVua29kaWVydW5nIHBybyBEYXRlaSBlcm1pdHRlbG4iCisKKyM6IGdpdGs6MTEzODkgZ2l0azoxMTUzNgorbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAiRXh0ZXJuZXMgRGlmZi1Qcm9ncmFtbSIKKworIzogZ2l0azoxMTM5MAorbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAiV8OkaGxlbiAuLi4iCisKKyM6IGdpdGs6MTEzOTUKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIkFsbGdlbWVpbmUgT3B0aW9uZW4iCisKKyM6IGdpdGs6MTEzOTgKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgIkF1c3NlaGVuIGRlciBCZW51dHplcm9iZXJmbMOkY2hlIGR1cmNoIFRoZW1hIGJlc3RpbW1lbiIKKworIzogZ2l0azoxMTQwMAorbXNnaWQgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiCittc2dzdHIgIijDhG5kZXJ1bmdlbiB3ZXJkZW4gZXJzdCBuYWNoIE5ldXN0YXJ0IHdpcmtzYW0pIgorCisjOiBnaXRrOjExNDAyCittc2dpZCAiKGN1cnJlbnRseSB1bmF2YWlsYWJsZSkiCittc2dzdHIgIihNb21lbnRhbiBuaWNodCB2ZXJmw7xnYmFyKSIKKworIzogZ2l0azoxMTQxMworbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJGYXJiZW46IEtsaWNrZW4genVtIFfDpGhsZW4iCisKKyM6IGdpdGs6MTE0MTYKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgIkJlbnV0emVyb2JlcmZsw6RjaGUiCisKKyM6IGdpdGs6MTE0MTcKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgIkJlbnV0emVyb2JlcmZsw6RjaGUiCisKKyM6IGdpdGs6MTE0MjAKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICJIaW50ZXJncnVuZCIKKworIzogZ2l0azoxMTQyMSBnaXRrOjExNDUxCittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAiSGludGVyZ3J1bmQiCisKKyM6IGdpdGs6MTE0MjQKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICJWb3JkZXJncnVuZCIKKworIzogZ2l0azoxMTQyNQorbXNnaWQgImZvcmVncm91bmQiCittc2dzdHIgIlZvcmRlcmdydW5kIgorCisjOiBnaXRrOjExNDI4Cittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICJWZXJnbGVpY2g6IEFsdGUgWmVpbGVuIgorCisjOiBnaXRrOjExNDI5Cittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgIlZlcmdsZWljaCAtIEFsdGUgWmVpbGVuIgorCisjOiBnaXRrOjExNDMzCittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJWZXJnbGVpY2g6IE5ldWUgWmVpbGVuIgorCisjOiBnaXRrOjExNDM0Cittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgIlZlcmdsZWljaCAtIE5ldWUgWmVpbGVuIgorCisjOiBnaXRrOjExNDM4Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIlZlcmdsZWljaDogw4RuZGVydW5nc3RpdGVsIgorCisjOiBnaXRrOjExNDQwCittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAiVmVyZ2xlaWNoIC0gw4RuZGVydW5nc3RpdGVsIgorCisjOiBnaXRrOjExNDQ0Cittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIkhpbnRlcmdydW5kIGbDvHIgbWFya2llcnRlIFplaWxlIgorCisjOiBnaXRrOjExNDQ2Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAiSGludGVyZ3J1bmQgZsO8ciBtYXJraWVydGUgWmVpbGUiCisKKyM6IGdpdGs6MTE0NTAKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIkhpbnRlcmdydW5kZmFyYmUgYXVzd8OkaGxlbiIKKworIzogZ2l0azoxMTQ1OQorbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIlNjaHJpZnRhcnQ6IEtsaWNrZW4genVtIFfDpGhsZW4iCisKKyM6IGdpdGs6MTE0NjEKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIlByb2dyYW1tc2NocmlmdGFydCIKKworIzogZ2l0azoxMTQ2MgorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJTY2hyaWZ0YXJ0IGbDvHIgVmVyZ2xlaWNoIgorCisjOiBnaXRrOjExNDYzCittc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKK21zZ3N0ciAiQmVzY2hyaWZ0dW5nZW4iCisKKyM6IGdpdGs6MTE0ODUKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJHaXRrLUVpbnN0ZWxsdW5nZW4iCisKKyM6IGdpdGs6MTE0OTQKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICJBbGxnZW1laW4iCisKKyM6IGdpdGs6MTE0OTUKK21zZ2lkICJDb2xvcnMiCittc2dzdHIgIkZhcmJlbiIKKworIzogZ2l0azoxMTQ5NgorbXNnaWQgIkZvbnRzIgorbXNnc3RyICJTY2hyaWZ0YXJ0ZW4iCisKKyM6IGdpdGs6MTE1NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiBGYXJiZSB3w6RobGVuIGbDvHIgJXMiCisKKyM6IGdpdGs6MTIwNTkKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyJFbnRzY2h1bGRpZ3VuZywgZ2l0ayBrYW5uIG5pY2h0IG1pdCBkaWVzZXIgVGNsL1RrIFZlcnNpb24gYXVzZ2Vmw7xocnQgd2VyZGVuLlxuIgorIiBHaXRrIGVyZm9yZGVydCBtaW5kZXN0ZW5zIFRjbC9UayA4LjQuIgorCisjOiBnaXRrOjEyMjY5Cittc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKK21zZ3N0ciAiS2VpbiBHaXQtUHJvamVrdGFyY2hpdiBnZWZ1bmRlbi4iCisKKyM6IGdpdGs6MTIzMTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIk1laHJkZXV0aWdlIEFuZ2FiZSDCuyVzwqs6IFNvd29obCBWZXJzaW9uIGFscyBhdWNoIERhdGVpbmFtZSBleGlzdGllcnQuIgorCisjOiBnaXRrOjEyMzI4Cittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAiRmFsc2NoZSBLb21tYW5kb3plaWxlbi1QYXJhbWV0ZXIgZsO8ciBnaXRrOiIKKworI34gbXNnaWQgIm1jIgorI34gbXNnc3RyICJtYyIKKworI34gbXNnaWQgIm5leHQiCisjfiBtc2dzdHIgIm7DpGNoc3RlIgorCisjfiBtc2dpZCAicHJldiIKKyN+IG1zZ3N0ciAidm9yaWdlIgorCisjfiBtc2dpZCAiQ0RhdGUiCisjfiBtc2dzdHIgIkVpbnRyYWdlZGF0dW0iCisKKyN+IG1zZ2lkICJDYW5ub3QgZmluZCB0aGUgZ2l0IGRpcmVjdG9yeSBcIiVzXCIuIgorI34gbXNnc3RyICJHaXQtVmVyemVpY2huaXMgwrslc8KrIHd1cmRlIG5pY2h0IGdlZnVuZGVuLiIKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL2VzLnBvIGIvZ2l0ay1naXQvcG8vZXMucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmM2JiYQotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L3BvL2VzLnBvCkBAIC0wLDAgKzEsMTQwNSBAQAorIyBUcmFuc2xhdGlvbiBvZiBnaXRrCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFNhbnRpYWdvIEdhbGEKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KKyMgU2FudGlhZ28gR2FsYSA8c2FudGlhZ28uZ2FsYUBnbWFpbC5jb20+LCAyMDA4LgorIworIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0a1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wNS0xNyAxNDozMisxMDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wMy0yNSAxMToyMCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTYW50aWFnbyBHYWxhIDxzYW50aWFnby5nYWxhQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBTcGFuaXNoXG4iCisiTGFuZ3VhZ2U6IFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBnaXRrOjE0MAorbXNnaWQgIkNvdWxkbid0IGdldCBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzOiIKK21zZ3N0ciAiSW1wb3NpYmxlIG9idGVuZXIgbGEgbGlzdGEgZGUgYXJjaGl2b3MgcGVuZGllbnRlcyBkZSBmdXNpw7NuOiIKKworIzogZ2l0azoyMTIgZ2l0azoyMzgxCittc2dpZCAiQ29sb3Igd29yZHMiCittc2dzdHIgIiIKKworIzogZ2l0azoyMTcgZ2l0azoyMzgxIGdpdGs6ODIyMCBnaXRrOjgyNTMKK21zZ2lkICJNYXJrdXAgd29yZHMiCittc2dzdHIgIiIKKworIzogZ2l0azozMjQKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJFcnJvciBhbCBsZWVyIGxhcyBkaWZlcmVuY2lhcyBkZSBmdXNpw7NuOiIKKworIzogZ2l0azozODAKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MzkzCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisiTm8gaGF5IGFyY2hpdm9zIHNlbGVjY2lvbmFkb3M6IHNlIHNlbGVjY2lvbsOzIGxhIG9wY2nDs24gLS1tZXJnZSBwZXJvIG5vIGhheSAiCisiYXJjaGl2b3MgcGVuZGllbnRlcyBkZSBmdXNpw7NuLiIKKworIzogZ2l0azozOTYKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAiIgorIk5vIGhheSBhcmNoaXZvcyBzZWxlY2Npb25hZG9zOiBzZSBzZWxlY2Npb27DsyBsYSBvcGNpw7NuIC0tbWVyZ2UgcGVybyBsb3MgIgorImFyY2hpdm9zIGVzcGVjaWZpY2Fkb3Mgbm8gbmVjZXNpdGFuIGZ1c2nDs24uIgorCisjOiBnaXRrOjQxOCBnaXRrOjU2NgorIywgZnV6enkKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgIkVycm9yIGFsIGNyZWFyIGxhIGV0aXF1ZXRhOiIKKworIzogZ2l0azo0MzYgZ2l0azo1ODIKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICJMZXllbmRvIgorCisjOiBnaXRrOjQ5NiBnaXRrOjQ1MjUKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIkxleWVuZG8gcmV2aXNpb25lcy4uLiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOAorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIk5vIHNlIHNlbGVjY2lvbmFyb24gcmV2aXNpb25lcyIKKworIzogZ2l0azoxNDQ1IGdpdGs6NDA0NSBnaXRrOjEyNDMyCittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICJMw61uZWEgZGUgY29tYW5kb3MiCisKKyM6IGdpdGs6MTUxMQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiRXJyb3IgYW5hbGl6YW5kbyBsYSBzYWxpZGEgZGUgZ2l0IGxvZzoiCisKKyM6IGdpdGs6MTc0MAorbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCittc2dzdHIgIkZhbHRhIGluZm9ybWFjacOzbiBzb2JyZSBsYXMgcmV2aXNpb25lcyIKKworIzogZ2l0azoxOTAzIGdpdGs6MTkzMiBnaXRrOjQzMTUgZ2l0azo5NjY5IGdpdGs6MTEyNDEgZ2l0azoxMTUyMQorbXNnaWQgIk9LIgorbXNnc3RyICJBY2VwdGFyIgorCisjOiBnaXRrOjE5MzQgZ2l0azo0MzE3IGdpdGs6OTE5NiBnaXRrOjkyNzUgZ2l0azo5MzkxIGdpdGs6OTQ0MCBnaXRrOjk2NzEKKyM6IGdpdGs6MTEyNDIgZ2l0azoxMTUyMgorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQ2FuY2VsYXIiCisKKyM6IGdpdGs6MjA2OQorbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgIkFjdHVhbGl6YXIiCisKKyM6IGdpdGs6MjA3MAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgIiIKKworIzogZ2l0azoyMDcxCittc2dpZCAiUmVyZWFkIHJlJmZlcmVuY2VzIgorbXNnc3RyICJSZWxlZXIgcmVmZXJlbmNpYXMiCisKKyM6IGdpdGs6MjA3MgorbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIkxpc3RhIGRlIHJlZmVyZW5jaWFzIgorCisjOiBnaXRrOjIwNzQKK21zZ2lkICJTdGFydCBnaXQgJmd1aSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjIwNzYKK21zZ2lkICImUXVpdCIKK21zZ3N0ciAiU2FsaXIiCisKKyM6IGdpdGs6MjA2OAorbXNnaWQgIiZGaWxlIgorbXNnc3RyICJBcmNoaXZvIgorCisjOiBnaXRrOjIwODAKK21zZ2lkICImUHJlZmVyZW5jZXMiCittc2dzdHIgIlByZWZlcmVuY2lhcyIKKworIzogZ2l0azoyMDc5Cittc2dpZCAiJkVkaXQiCittc2dzdHIgIkVkaXRhciIKKworIzogZ2l0azoyMDg0Cittc2dpZCAiJk5ldyB2aWV3Li4uIgorbXNnc3RyICJOdWV2YSB2aXN0YS4uLiIKKworIzogZ2l0azoyMDg1Cittc2dpZCAiJkVkaXQgdmlldy4uLiIKK21zZ3N0ciAiTW9kaWZpY2FyIHZpc3RhLi4uIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRGVsZXRlIHZpZXciCittc2dzdHIgIkVsaW1pbmFyIHZpc3RhIgorCisjOiBnaXRrOjIwODggZ2l0azo0MDQzCittc2dpZCAiJkFsbCBmaWxlcyIKK21zZ3N0ciAiVG9kb3MgbG9zIGFyY2hpdm9zIgorCisjOiBnaXRrOjIwODMgZ2l0azo0MDY3Cittc2dpZCAiJlZpZXciCittc2dzdHIgIlZpc3RhIgorCisjOiBnaXRrOjIwOTMgZ2l0azoyMTAzIGdpdGs6MzAxMgorbXNnaWQgIiZBYm91dCBnaXRrIgorbXNnc3RyICJBY2VyY2EgZGUgZ2l0ayIKKworIzogZ2l0azoyMDk0IGdpdGs6MjEwOAorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgIkNvbWJpbmFjaW9uZXMgZGUgdGVjbGFzIgorCisjOiBnaXRrOjIwOTIgZ2l0azoyMTA3Cittc2dpZCAiJkhlbHAiCittc2dzdHIgIkF5dWRhIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUyCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgorCisjOiBnaXRrOjIyMjkKK21zZ2lkICJSb3ciCittc2dzdHIgIiIKKworIzogZ2l0azoyMjY3Cittc2dpZCAiRmluZCIKK21zZ3N0ciAiQnVzY2FyIgorCisjOiBnaXRrOjIyOTUKK21zZ2lkICJjb21taXQiCittc2dzdHIgInJldmlzacOzbiIKKworIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3CisjOiBnaXRrOjY5MTIKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAicXVlIGNvbnRpZW5lOiIKKworIzogZ2l0azoyMzAyIGdpdGs6MzUyNiBnaXRrOjM1MzEgZ2l0azo0NzYzCittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICJxdWUgbW9kaWZpY2EgbGEgcnV0YToiCisKKyM6IGdpdGs6MjMwMyBnaXRrOjQ3NzcKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAicXVlIGHDsWFkZS9lbGltaW5hIGNhZGVuYToiCisKKyM6IGdpdGs6MjMwNCBnaXRrOjQ3NzkKK21zZ2lkICJjaGFuZ2luZyBsaW5lcyBtYXRjaGluZzoiCittc2dzdHIgIiIKKworIzogZ2l0azoyMzEzIGdpdGs6MjMxNSBnaXRrOjQ3NjYKK21zZ2lkICJFeGFjdCIKK21zZ3N0ciAiRXhhY3RvIgorCisjOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMworbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIk5vTWF5w7pzIgorCisjOiBnaXRrOjIzMTUgZ2l0azo0NzM2IGdpdGs6NDg1MiBnaXRrOjY3MTkKK21zZ2lkICJSZWdleHAiCittc2dzdHIgIlJlZ2V4IgorCisjOiBnaXRrOjIzMTcgZ2l0azoyMzE4IGdpdGs6NDg3NCBnaXRrOjQ5MDQgZ2l0azo0OTExIGdpdGs6Njg0OCBnaXRrOjY5MTYKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJUb2RvcyBsb3MgY2FtcG9zIgorCisjOiBnaXRrOjIzMTggZ2l0azo0ODcxIGdpdGs6NDkwNCBnaXRrOjY3ODYKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiVMOtdHVsbyIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo2OTE2IGdpdGs6NzM4OQorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJDb21lbnRhcmlvcyIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjQ4NzYgZ2l0azo0OTExIGdpdGs6Njc4NiBnaXRrOjczMjQgZ2l0azo4ODMwCisjOiBnaXRrOjg4NDUKK21zZ2lkICJBdXRob3IiCittc2dzdHIgIkF1dG9yIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjczMjYKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIiIKKworIzogZ2l0azoyMzUwCittc2dpZCAiU2VhcmNoIgorbXNnc3RyICJCdXNjYXIiCisKKyM6IGdpdGs6MjM1OAorbXNnaWQgIkRpZmYiCittc2dzdHIgIkRpZmVyZW5jaWEiCisKKyM6IGdpdGs6MjM2MAorbXNnaWQgIk9sZCB2ZXJzaW9uIgorbXNnc3RyICJWZXJzacOzbiBhbnRpZ3VhIgorCisjOiBnaXRrOjIzNjIKK21zZ2lkICJOZXcgdmVyc2lvbiIKK21zZ3N0ciAiVmVyc2nDs24gbnVldmEiCisKKyM6IGdpdGs6MjM2NAorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIkzDrW5lYXMgZGUgY29udGV4dG8iCisKKyM6IGdpdGs6MjM3NAorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIklnbm9yYSBjYW1iaW9zIGRlIGVzcGFjaWFkbyIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjQ0NQorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJQYXJjaGUiCisKKyM6IGdpdGs6MjQ0NworbXNnaWQgIlRyZWUiCittc2dzdHIgIsOBcmJvbCIKKworIzogZ2l0azoyNjE3IGdpdGs6MjYzNworbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiRGlmZXJlbmNpYSBkZSBlc3RhIC0+IHNlbGVjY2lvbmFkYSIKKworIzogZ2l0azoyNjE4IGdpdGs6MjYzOAorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZXJlbmNpYSBkZSBzZWxlY2Npb25hZGEgLT4gZXN0YSIKKworIzogZ2l0azoyNjE5IGdpdGs6MjYzOQorbXNnaWQgIk1ha2UgcGF0Y2giCittc2dzdHIgIkNyZWFyIHBhdGNoIgorCisjOiBnaXRrOjI2MjAgZ2l0azo5MjU0Cittc2dpZCAiQ3JlYXRlIHRhZyIKK21zZ3N0ciAiQ3JlYXIgZXRpcXVldGEiCisKKyM6IGdpdGs6MjYyMSBnaXRrOjkzNzEKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAiRXNjcmliaXIgcmV2aXNpb25lcyBhIGFyY2hpdm8iCisKKyM6IGdpdGs6MjYyMiBnaXRrOjk0MjgKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiQ3JlYXIgbnVldmEgcmFtYSIKKworIzogZ2l0azoyNjIzCittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIkHDsWFkaXIgZXN0YSByZXZpc2nDs24gYSBsYSByYW1hIGFjdHVhbCAoY2hlcnJ5LXBpY2spIgorCisjOiBnaXRrOjI2MjQKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJUcmFlciBsYSByYW1hIEhFQUQgYXF1w60iCisKKyM6IGdpdGs6MjYyNQorIywgZnV6enkKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICJBw7FhZGlyIGVzdGEgcmV2aXNpw7NuIGEgbGEgcmFtYSBhY3R1YWwgKGNoZXJyeS1waWNrKSIKKworIzogZ2l0azoyNjI2Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgIiIKKworIzogZ2l0azoyNjI3Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIiIKKworIzogZ2l0azoyNjI4Cittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0azoyNjI5IGdpdGs6MjY0MAorIywgZnV6enkKK21zZ2lkICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiRGlmZXJlbmNpYSBkZSBlc3RhIC0+IHNlbGVjY2lvbmFkYSIKKworIzogZ2l0azoyNjMwIGdpdGs6MjY0MQorIywgZnV6enkKK21zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZXJlbmNpYSBkZSBzZWxlY2Npb25hZGEgLT4gZXN0YSIKKworIzogZ2l0azoyNjMxCisjLCBmdXp6eQorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiQcOxYWRpciBlc3RhIHJldmlzacOzbiBhIGxhIHJhbWEgYWN0dWFsIChjaGVycnktcGljaykiCisKKyM6IGdpdGs6MjY0NworbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiQ2FtYmlhciBhIGVzdGEgcmFtYSIKKworIzogZ2l0azoyNjQ4Cittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICJFbGltaW5hciBlc3RhIHJhbWEiCisKKyM6IGdpdGs6MjY0OQorbXNnaWQgIkNvcHkgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKworIzogZ2l0azoyNjU2Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICJTZWxlY2Npb25hciB0YW1iacOpbiIKKworIzogZ2l0azoyNjU3Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAiU2VsZWNjaW9uYXIgc8OzbG8iCisKKyM6IGdpdGs6MjY1OAorbXNnaWQgIkV4dGVybmFsIGRpZmYiCittc2dzdHIgIiIKKworIzogZ2l0azoyNjU5Cittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjI2NjAKK21zZ2lkICJDb3B5IHBhdGgiCittc2dzdHIgIiIKKworIzogZ2l0azoyNjY3Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjY2OAorbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjMwMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayAtIHVuIHZpc3VhbGl6YWRvciBkZSByZXZpc2lvbmVzIHBhcmEgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNvIHkgcmVkaXN0cmlidWNpw7NuIHBlcm1pdGlkb3Mgc2Vnw7puIGxvcyB0w6lybWlub3MgZGUgbGEgTGljZW5jaWEgUMO6YmxpY2EgIgorIkdlbmVyYWwgZGUgR05VIChHTlUgR1BMKSIKKworIzogZ2l0azozMDIyIGdpdGs6MzA4OSBnaXRrOjk4NTcKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiQ2VycmFyIgorCisjOiBnaXRrOjMwNDMKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiQ29tYmluYWNpb25lcyBkZSB0ZWNsYSBkZSBHaXRrIgorCisjOiBnaXRrOjMwNDYKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIkNvbWJpbmFjaW9uZXMgZGUgdGVjbGEgZGUgR2l0azoiCisKKyM6IGdpdGs6MzA0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0U2FsaXIiCisKKyM6IGdpdGs6MzA0OQorIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgorbXNnc3RyICI8JXMtRj5cdFx0QnVzY2FyIgorCisjOiBnaXRrOjMwNTAKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxIb21lPlx0XHRJciBhIGxhIHByaW1lcmEgcmV2aXNpw7NuIgorCisjOiBnaXRrOjMwNTEKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kPlx0XHRJciBhIGxhIMO6bHRpbWEgcmV2aXNpw7NuIgorCisjOiBnaXRrOjMwNTIKKyMsIGZ1enp5Cittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8VXA+LCBwLCBpXHRTdWJpciB1bmEgcmV2aXNpw7NuIgorCisjOiBnaXRrOjMwNTMKKyMsIGZ1enp5Cittc2dpZCAiPERvd24+LCBuLCBqXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKK21zZ3N0ciAiPERvd24+LCBuLCBrXHRCYWphciB1bmEgcmV2aXNpw7NuIgorCisjOiBnaXRrOjMwNTQKKyMsIGZ1enp5Cittc2dpZCAiPExlZnQ+LCB6LCBoXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPExlZnQ+LCB6LCBqXHRSZXRyb2NlZGVyIGVuIGxhIGhpc3RvcmlhIgorCisjOiBnaXRrOjMwNTUKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPFJpZ2h0PiwgeCwgbFx0QXZhbnphciBlbiBsYSBoaXN0b3JpYSIKKworIzogZ2l0azozMDU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIiIKKworIzogZ2l0azozMDU3Cittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlVXA+XHRTdWJpciB1bmEgcMOhZ2luYSBlbiBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjMwNTgKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlRG93bj5cdEJhamFyIHVuYSBww6FnaW5hIGVuIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MzA1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUhvbWU+XHREZXNwbGF6YXJzZSBhbCBpbmljaW8gZGUgbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azozMDYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHREZXNwbGF6YXJzZSBhbCBmaW5hbCBkZSBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjMwNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1VcD5cdERlc3BsYXphciB1bmEgbMOtbmVhIGhhY2lhIGFycmliYSBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjMwNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtRG93bj5cdERlc3BsYXphciB1bmEgbMOtbmVhIGhhY2lhIGFiYWpvIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MzA2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlVXA+XHREZXNwbGF6YXIgdW5hIHDDoWdpbmEgaGFjaWEgYXJyaWJhIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MzA2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZURvd24+XHREZXNwbGF6YXIgdW5hIHDDoWdpbmEgaGFjaWEgYWJham8gbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azozMDY1Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtVXA+XHRCdXNjYXIgaGFjaWEgYXRyw6FzIChhcnJpYmEsIHJldmlzaW9uZXMgc2lndWllbnRlcykiCisKKyM6IGdpdGs6MzA2NgorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtRG93bj5cdEJ1c2NhciBoYWNpYSBhZGVsYW50ZSAoYWJham8sIHJldmlzaW9uZXMgYW50ZXJpb3JlcykiCisKKyM6IGdpdGs6MzA2NworbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RGVsZXRlPiwgYlx0RGVzcGxhemEgaGFjaWEgYXJyaWJhIHVuYSBww6FnaW5hIGxhIHZpc3RhIGRlIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjMwNjgKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJhY2tzcGFjZT5cdERlc3BsYXphIGhhY2lhIGFycmliYSB1bmEgcMOhZ2luYSBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azozMDY5Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxTcGFjZT5cdFx0RGVzcGxhemEgaGFjaWEgYWJham8gdW5hIHDDoWdpbmEgbGEgdmlzdGEgZGUgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHREZXNwbGF6YSBoYWNpYSBhcnJpYmEgMTggbMOtbmVhcyBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azozMDcxCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0RGVzcGxhemEgaGFjaWEgYWJham8gMTggbMOtbmVhcyBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azozMDcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRCdXNjYXIiCisKKyM6IGdpdGs6MzA3MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHRCdXNjYXIgZWwgc2lndWllbnRlIgorCisjOiBnaXRrOjMwNzQKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8UmV0dXJuPlx0QnVzY2FyIGVsIHNpZ3VpZW50ZSIKKworIzogZ2l0azozMDc1CisjLCBmdXp6eQorbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgorbXNnc3RyICI8RW5kPlx0XHRJciBhIGxhIMO6bHRpbWEgcmV2aXNpw7NuIgorCisjOiBnaXRrOjMwNzYKK21zZ2lkICIvXHRcdEZvY3VzIHRoZSBzZWFyY2ggYm94IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MzA3NworbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHRCdXNjYXIgZWwgYW50ZXJpb3IiCisKKyM6IGdpdGs6MzA3OAorbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx0RGVzcGxhemFyIGxhIHZpc3RhIGRlIGRpZmVyZW5jaWFzIGFsIGFyY2hpdm8gc2lndWllbnRlIgorCisjOiBnaXRrOjMwNzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRCdXNjYXIgc2lndWllbnRlIGVuIGxhIHZpc3RhIGRlIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjMwODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0QnVzY2FyIGFudGVyaW9yIGVuIGxhIHZpc3RhIGRlIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjMwODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1ArPlx0QXVtZW50YXIgdGFtYcOxbyBkZWwgdGV4dG8iCisKKyM6IGdpdGs6MzA4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtcGx1cz5cdEF1bWVudGFyIHRhbWHDsW8gZGVsIHRleHRvIgorCisjOiBnaXRrOjMwODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1AtPlx0RGlzbWludWlyIHRhbWHDsW8gZGVsIHRleHRvIgorCisjOiBnaXRrOjMwODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1taW51cz5cdERpc21pbnVpciB0YW1hw7FvIGRlbCB0ZXh0byIKKworIzogZ2l0azozMDg1Cittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx0QWN0dWFsaXphciIKKworIzogZ2l0azozNTUwIGdpdGs6MzU1OQorIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAiRXJyb3IgZW4gbGEgY3JlYWNpw7NuIGRlbCBwYXJjaGU6IgorCisjOiBnaXRrOjM1NzIKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIkVycm9yIGFsIGxlZXIgbGFzIGRpZmVyZW5jaWFzIGRlIGZ1c2nDs246IgorCisjOiBnaXRrOjM2MzUKKyMsIGZ1enp5Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJMw61uZWEgZGUgY29tYW5kb3MiCisKKyM6IGdpdGs6Mzc4NAorIywgZnV6enkKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiTm8gc2UgaGFuIGd1YXJkYWRvIGNhbWJpb3MiCisKKyM6IGdpdGs6Mzc5OAorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjM4MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MzgzNworIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKK21zZ3N0ciAiRXJyb3IgYWwgY3JlYXIgbGEgZXRpcXVldGE6IgorCisjOiBnaXRrOjM4NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6Mzg2NSBnaXRrOjY3NTQKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgIkJ1c2NhbmRvIgorCisjOiBnaXRrOjM4OTcKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJFcnJvciBhbCBjcmVhciBsYSBldGlxdWV0YToiCisKKyM6IGdpdGs6MzkyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIiIKKworIzogZ2l0azozOTM5CisjLCBmdXp6eQorbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgImZcdFx0RGVzcGxhemFyIGxhIHZpc3RhIGRlIGRpZmVyZW5jaWFzIGFsIGFyY2hpdm8gc2lndWllbnRlIgorCisjOiBnaXRrOjQwNzAKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRGVmaW5pY2nDs24gZGUgdmlzdGFzIGRlIEdpdGsiCisKKyM6IGdpdGs6NDA3NAorbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAiUmVjb3JkYXIgZXN0YSB2aXN0YSIKKworIzogZ2l0azo0MDc1Cittc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQwNzYKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDA3NworIywgZnV6enkKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAiVG9kb3MgbG9zIGFyY2hpdm9zIgorCisjOiBnaXRrOjQwNzgKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQwNzkKK21zZ2lkICJBbGwgdGFncyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQwODAKK21zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDA4MQorbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgIiIKKworIzogZ2l0azo0MDgyCisjLCBmdXp6eQorbXNnaWQgIkF1dGhvcjoiCittc2dzdHIgIkF1dG9yIgorCisjOiBnaXRrOjQwODMKKyMsIGZ1enp5Cittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAicmV2aXNpw7NuIgorCisjOiBnaXRrOjQwODQKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIiIKKworIzogZ2l0azo0MDg1Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIiIKKworIzogZ2l0azo0MDg2Cittc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQwODcKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQwODgKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgIiIKKworIzogZ2l0azo0MDg5Cittc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDA5MAorIywgZnV6enkKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAiQnVzY2FuZG8iCisKKyM6IGdpdGs6NDA5MQorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQwOTIKK21zZ2lkICJTaW5jZToiCittc2dzdHIgIiIKKworIzogZ2l0azo0MDkzCittc2dpZCAiVW50aWw6IgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDA5NAorbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDA5NQorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQwOTYKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIiIKKworIzogZ2l0azo0MDk3Cittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIiIKKworIzogZ2l0azo0MDk5Cittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIiIKKworIzogZ2l0azo0MTAwCisjLCBmdXp6eQorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiTGltaXRhciBsYXMgZGlmZXJlbmNpYXMgYSBsYXMgcnV0YXMgc2VsZWNjaW9uYWRhcyIKKworIzogZ2l0azo0MTAxCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIiIKKworIzogZ2l0azo0MTAyCisjLCBmdXp6eQorbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgorbXNnc3RyICJSZXZpc2lvbmVzIGEgaW5jbHVpciAoYXJndW1lbnRvcyBhIGdpdCBsb2cpOiIKKworIzogZ2l0azo0MTAzCittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIkludHJvZHVjaXIgYXJjaGl2b3MgeSBkaXJlY3RvcmlvcyBhIGluY2x1aXIsIHVubyBwb3IgbMOtbmVhOiIKKworIzogZ2l0azo0MTA0Cittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIkNvbWFuZG8gcXVlIGdlbmVyYSBtw6FzIHJldmlzaW9uZXMgYSBpbmNsdWlyOiIKKworIzogZ2l0azo0MjI4Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDIzNgorbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDI0MQorIywgZnV6enkKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIlZpc3RhIgorCisjOiBnaXRrOjQzMTYKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDM1NAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRXJyb3IgZW4gbG9zIGFyZ3VtZW50b3MgZGUgc2VsZWNjacOzbiBkZSBsYXMgcmV2aXNpb25lczoiCisKKyM6IGdpdGs6NDQwOSBnaXRrOjQ0NjIgZ2l0azo0OTI0IGdpdGs6NDkzOCBnaXRrOjYyMDggZ2l0azoxMjM3MyBnaXRrOjEyMzc0Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAiTmluZ3VubyIKKworIzogZ2l0azo1MDIxIGdpdGs6NTAyNgorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIkRlc2NlbmRpZW50ZSIKKworIzogZ2l0azo1MDIyCittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIk5vIGRlc2NlbmRpZW50ZSIKKworIzogZ2l0azo1MDI5IGdpdGs6NTAzNAorbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJBbnRlcGFzYWRvIgorCisjOiBnaXRrOjUwMzAKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIk5vIGFudGVwYXNhZG8iCisKKyM6IGdpdGs6NTMyNAorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAiQ2FtYmlvcyBsb2NhbGVzIGHDsWFkaWRvcyBhbCDDrW5kaWNlIHBlcm8gc2luIGNvbXBsZXRhciByZXZpc2nDs24iCisKKyM6IGdpdGs6NTM2MAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICJDYW1iaW9zIGxvY2FsZXMgc2luIGHDsWFkaXIgYWwgw61uZGljZSIKKworIzogZ2l0azo3MTM0Cittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjcxMzcKK21zZ2lkICJtYW55IgorbXNnc3RyICIiCisKKyM6IGdpdGs6NzMyOAorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJFdGlxdWV0YXM6IgorCisjOiBnaXRrOjczNDUgZ2l0azo3MzUxIGdpdGs6ODgyNQorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAiUGFkcmUiCisKKyM6IGdpdGs6NzM1NgorbXNnaWQgIkNoaWxkIgorbXNnc3RyICJIaWphIgorCisjOiBnaXRrOjczNjUKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIlJhbWEiCisKKyM6IGdpdGs6NzM2OAorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgIlNpZ3VlLWEiCisKKyM6IGdpdGs6NzM3MQorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICJQcmVjZWRlLWEiCisKKyM6IGdpdGs6Nzk2NgorIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKK21zZ3N0ciAiRXJyb3IgYWwgbGVlciBsYXMgZGlmZXJlbmNpYXMgZGUgZnVzacOzbjoiCisKKyM6IGdpdGs6ODY1MAorbXNnaWQgIkdvdG86IgorbXNnc3RyICJJciBhOiIKKworIzogZ2l0azo4NjcxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIkxhIGlkIFNIQTEgYWJyZXZpYWRhICVzIGVzIGFtYmlndWEiCisKKyM6IGdpdGs6ODY3OAorIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIkxhIGlkIFNIQTEgJXMgZXMgZGVzY29ub2NpZGEiCisKKyM6IGdpdGs6ODY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJMYSBpZCBTSEExICVzIGVzIGRlc2Nvbm9jaWRhIgorCisjOiBnaXRrOjg2OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjg4MzIgZ2l0azo4ODQ3Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAiRmVjaGEiCisKKyM6IGdpdGs6ODgzNQorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJIaWphcyIKKworIzogZ2l0azo4ODk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIlBvbmVyIGxhIHJhbWEgJXMgZW4gZXN0YSByZXZpc2nDs24iCisKKyM6IGdpdGs6ODkwMAorbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgorbXNnc3RyICIiCisKKyM6IGdpdGs6OTAwNSBnaXRrOjkwMTEKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICIiCisKKyM6IGdpdGs6OTAyMCBnaXRrOjkwMjUKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICJFcnJvciBlbiBsYSBjcmVhY2nDs24gZGVsIHBhcmNoZToiCisKKyM6IGdpdGs6OTAyMSBnaXRrOjkwMjYKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIiCisKKyM6IGdpdGs6OTAzMSBnaXRrOjkwMzQgZ2l0azo5MDQyIGdpdGs6OTA1NiBnaXRrOjkwNjUKKyMsIGZ1enp5Cittc2dpZCAiQ29tbWl0ICIKK21zZ3N0ciAicmV2aXNpw7NuIgorCisjOiBnaXRrOjkwMzUKK21zZ2lkICIiCisiIGlzIHRoZSBzYW1lIHBhdGNoIGFzXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjkwNDMKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKworIzogZ2l0azo5MDQ1Cittc2dpZCAiIgorIkRpZmYgb2YgY29tbWl0czpcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjkwNTcgZ2l0azo5MDY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiIKKworIzogZ2l0azo5MDg1CisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgorbXNnc3RyICJFcnJvciBhbCBlc2NyaWJpciByZXZpc2nDs246IgorCisjOiBnaXRrOjkwOTEKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKK21zZ3N0ciAiRXJyb3IgYWwgZXNjcmliaXIgcmV2aXNpw7NuOiIKKworIzogZ2l0azo5MTM3Cittc2dpZCAiVG9wIgorbXNnc3RyICJPcmlnZW4iCisKKyM6IGdpdGs6OTEzOAorbXNnaWQgIkZyb20iCittc2dzdHIgIkRlIgorCisjOiBnaXRrOjkxNDMKK21zZ2lkICJUbyIKK21zZ3N0ciAiQSIKKworIzogZ2l0azo5MTY3Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkdlbmVyYXIgcGFyY2hlIgorCisjOiBnaXRrOjkxNjkKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiRGU6IgorCisjOiBnaXRrOjkxNzgKK21zZ2lkICJUbzoiCittc2dzdHIgIlBhcmE6IgorCisjOiBnaXRrOjkxODcKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICJJbnZlcnRpciIKKworIzogZ2l0azo5MTg5IGdpdGs6OTM4NQorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiRXNjcmliaXIgYSBhcmNoaXZvOiIKKworIzogZ2l0azo5MTk1Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlbmVyYXIiCisKKyM6IGdpdGs6OTIzMworbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAiRXJyb3IgZW4gbGEgY3JlYWNpw7NuIGRlbCBwYXJjaGU6IgorCisjOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjkyNjUKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIk5vbWJyZSBkZSBldGlxdWV0YToiCisKKyM6IGdpdGs6OTI2OAorbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICIiCisKKyM6IGdpdGs6OTI3MAorIywgZnV6enkKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIk5vbWJyZSBkZSBldGlxdWV0YToiCisKKyM6IGdpdGs6OTI3NCBnaXRrOjk0MzkKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyZWFyIgorCisjOiBnaXRrOjkyOTIKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIk5vIHNlIGhhIGVzcGVjaWZpY2FkbyBldGlxdWV0YSIKKworIzogZ2l0azo5Mjk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiTGEgZXRpcXVldGEgXCIlc1wiIHlhIGV4aXN0ZSIKKworIzogZ2l0azo5MzA2Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRXJyb3IgYWwgY3JlYXIgbGEgZXRpcXVldGE6IgorCisjOiBnaXRrOjkzODIKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiQ29tYW5kbzoiCisKKyM6IGdpdGs6OTM5MAorbXNnaWQgIldyaXRlIgorbXNnc3RyICJFc2NyaWJpciIKKworIzogZ2l0azo5NDA4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJFcnJvciBhbCBlc2NyaWJpciByZXZpc2nDs246IgorCisjOiBnaXRrOjk0MzUKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiTm9tYnJlOiIKKworIzogZ2l0azo5NDU4Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiRXNwZWNpZmlxdWUgdW4gbm9tYnJlIHBhcmEgbGEgbnVldmEgcmFtYSIKKworIzogZ2l0azo5NDYzCisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICJMYSBldGlxdWV0YSBcIiVzXCIgeWEgZXhpc3RlIgorCisjOiBnaXRrOjk1MzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiTGEgcmV2aXNpw7NuICVzIHlhIGVzdMOhIGluY2x1aWRhIGVuIGxhIHJhbWEgJXMgLS0gwr9Wb2x2ZXIgYSBhcGxpY2FybGE/IgorCisjOiBnaXRrOjk1MzUKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAiRWxpZ2llbmRvIHJldmlzaW9uZXMgKGNoZXJyeS1waWNraW5nKSIKKworIzogZ2l0azo5NTQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjk1NTAKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKworIzogZ2l0azo5NTY2IGdpdGs6OTYyNAorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJObyBzZSBoYW4gZ3VhcmRhZG8gY2FtYmlvcyIKKworIzogZ2l0azo5NTkzCisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBub3QgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZXZlcnQgaXQ/IgorbXNnc3RyICJMYSByZXZpc2nDs24gJXMgeWEgZXN0w6EgaW5jbHVpZGEgZW4gbGEgcmFtYSAlcyAtLSDCv1ZvbHZlciBhIGFwbGljYXJsYT8iCisKKyM6IGdpdGs6OTU5OAorIywgZnV6enkKK21zZ2lkICJSZXZlcnRpbmciCittc2dzdHIgIlJlcG9uaWVuZG8iCisKKyM6IGdpdGs6OTYwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCisiY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisKKyM6IGdpdGs6OTYxMAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisKKyM6IGdpdGs6OTY1MworbXNnaWQgIkNvbmZpcm0gcmVzZXQiCittc2dzdHIgIkNvbmZpcm1hciBnaXQgcmVzZXQiCisKKyM6IGdpdGs6OTY1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIsK/UmVwb25lciBsYSByYW1hICVzIGEgJXM/IgorCisjOiBnaXRrOjk2NTcKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiVGlwbyBkZSByZXBvc2ljacOzbjoiCisKKyM6IGdpdGs6OTY2MAorbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICJTdWF2ZTogTm8gYWx0ZXJhIGxhIGNvcGlhIGRlIHRyYWJham8gbmkgZWwgw61uZGljZSIKKworIzogZ2l0azo5NjYzCittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICJNaXh0YTogQWN0dWFsaXphIGVsIMOtbmRpY2UsIG5vIGFsdGVyYSBsYSBjb3BpYSBkZSB0cmFiYWpvIgorCisjOiBnaXRrOjk2NjYKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkR1cmE6IEFjdHVhbGl6YSBlbCDDrW5kaWNlIHkgbGEgY29waWEgZGUgdHJhYmFqb1xuIgorIihhYmFuZG9uYSBUT0RBUyBsYXMgbW9kaWZpY2FjaW9uZXMgbG9jYWxlcykiCisKKyM6IGdpdGs6OTY4MworbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAiUmVwb25pZW5kbyIKKworIzogZ2l0azo5NzQzCittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICJDcmVhbmRvIGNvcGlhIGRlIHRyYWJham8iCisKKyM6IGdpdGs6OTc5NgorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIk5vIHNlIHB1ZWRlIGJvcnJhciBsYSByYW1hIGFjdHVhbCIKKworIzogZ2l0azo5ODAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJMYXMgcmV2aXNpb25lcyBkZSBsYSByYW1hICVzIG5vIGVzdMOhbiBwcmVzZW50ZXMgZW4gb3RyYXMgcmFtYXMuXG4iCisiwr9Cb3JyYXIgbGEgcmFtYSAlcz8iCisKKyM6IGdpdGs6OTgzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAiRXRpcXVldGFzIHkgcmFtYXM6ICVzIgorCisjOiBnaXRrOjk4NTAKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRybyIKKworIzogZ2l0azoxMDE0NgorbXNnaWQgIiIKKyJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKKyJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKK21zZ3N0ciAiIgorIkVycm9yIGFsIGxlZXIgbGEgdG9wb2xvZ8OtYSBkZSByZXZpc2lvbmVzOiBsYSBpbmZvcm1hY2nDs24gc29icmUgbGFzIHJhbWFzIHkgIgorImV0aXF1ZXRhcyBwcmVjZWRlbnRlcyB5IHNpZ3VpZW50ZXMgc2Vyw6EgaW5jb21wbGV0YS4iCisKKyM6IGdpdGs6MTExMjMKK21zZ2lkICJUYWciCittc2dzdHIgIkV0aXF1ZXRhIgorCisjOiBnaXRrOjExMTI3Cittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjExMjEwCittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIlNlbGVjdG9yIGRlIHRpcG9ncmFmw61hcyBnaXRrIgorCisjOiBnaXRrOjExMjI3Cittc2dpZCAiQiIKK21zZ3N0ciAiQiIKKworIzogZ2l0azoxMTIzMAorbXNnaWQgIkkiCittc2dzdHIgIkkiCisKKyM6IGdpdGs6MTEzNDgKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbmVzIGRlIHZpc3VhbGl6YWNpw7NuIGRlIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MTEzNTEKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgIkFuY2hvIG3DoXhpbW8gZGVsIGdyw6FmaWNvIChlbiBsw61uZWFzKSIKKworIzogZ2l0azoxMTM1NQorIywgbm8tdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIkFuY2hvIG3DoXhpbW8gZGVsIGdyw6FmaWNvIChlbiAlIGRlbCBwYW5lbCkiCisKKyM6IGdpdGs6MTEzNTgKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIk1vc3RyYXIgY2FtYmlvcyBsb2NhbGVzIgorCisjOiBnaXRrOjExMzYxCisjLCBmdXp6eQorbXNnaWQgIkF1dG8tc2VsZWN0IFNIQTEgKGxlbmd0aCkiCittc2dzdHIgIlNlbGVjY2lvbmFyIGF1dG9tw6F0aWNhbWVudGUgU0hBMSBoYXNoIgorCisjOiBnaXRrOjExMzY1Cittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExMzY5Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbmVzIGRlIHZpc3VhbGl6YWNpw7NuIGRlIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjExMzcxCittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIkVzcGFjaWFkbyBkZSB0YWJ1bGFkb3IiCisKKyM6IGdpdGs6MTEzNzQKKyMsIGZ1enp5Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKK21zZ3N0ciAiTW9zdHJhciBldGlxdWV0YXMgY2VyY2FuYXMiCisKKyM6IGdpdGs6MTEzNzcKK21zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTEzODAKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIkxpbWl0YXIgbGFzIGRpZmVyZW5jaWFzIGEgbGFzIHJ1dGFzIHNlbGVjY2lvbmFkYXMiCisKKyM6IGdpdGs6MTEzODMKK21zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExMzg5IGdpdGs6MTE1MzYKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTM5MAorbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExMzk1CisjLCBmdXp6eQorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiR2VuZXJhciBwYXJjaGUiCisKKyM6IGdpdGs6MTEzOTgKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTQwMAorbXNnaWQgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTQwMgorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTE0MTMKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiQ29sb3JlczogcHVsc2UgcGFyYSBzZWxlY2Npb25hciIKKworIzogZ2l0azoxMTQxNgorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExNDE3CisjLCBmdXp6eQorbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAiVGlwb2dyYWbDrWEgcGFyYSBpbnRlcmZheiBkZSB1c3VhcmlvIgorCisjOiBnaXRrOjExNDIwCittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAiRm9uZG8iCisKKyM6IGdpdGs6MTE0MjEgZ2l0azoxMTQ1MQorIywgZnV6enkKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICJGb25kbyIKKworIzogZ2l0azoxMTQyNAorbXNnaWQgIkZvcmVncm91bmQiCittc2dzdHIgIlByaW1lciBwbGFubyIKKworIzogZ2l0azoxMTQyNQorIywgZnV6enkKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICJQcmltZXIgcGxhbm8iCisKKyM6IGdpdGs6MTE0MjgKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIkRpZmY6IGzDrW5lYXMgdmllamFzIgorCisjOiBnaXRrOjExNDI5CisjLCBmdXp6eQorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJEaWZmOiBsw61uZWFzIHZpZWphcyIKKworIzogZ2l0azoxMTQzMworbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKK21zZ3N0ciAiRGlmZjogbMOtbmVhcyBudWV2YXMiCisKKyM6IGdpdGs6MTE0MzQKKyMsIGZ1enp5Cittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmY6IGzDrW5lYXMgbnVldmFzIgorCisjOiBnaXRrOjExNDM4Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIkRpZmY6IGNhYmVjZXJhIGRlIGZyYWdtZW50byIKKworIzogZ2l0azoxMTQ0MAorIywgZnV6enkKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJEaWZmOiBjYWJlY2VyYSBkZSBmcmFnbWVudG8iCisKKyM6IGdpdGs6MTE0NDQKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExNDQ2Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExNDUwCittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICJDb2xvciBkZSBmb25kbyBkZSBsYSBzZWxlY2Npw7NuIgorCisjOiBnaXRrOjExNDU5Cittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiVGlwb2dyYWbDrWFzOiBwdWxzZSBwYXJhIGVsZWdpciIKKworIzogZ2l0azoxMTQ2MQorbXNnaWQgIk1haW4gZm9udCIKK21zZ3N0ciAiVGlwb2dyYWbDrWEgcHJpbmNpcGFsIgorCisjOiBnaXRrOjExNDYyCittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIlRpcG9ncmFmw61hIHBhcmEgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6MTE0NjMKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJUaXBvZ3JhZsOtYSBwYXJhIGludGVyZmF6IGRlIHVzdWFyaW8iCisKKyM6IGdpdGs6MTE0ODUKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJQcmVmZXJlbmNpYXMgZGUgZ2l0ayIKKworIzogZ2l0azoxMTQ5NAorIywgZnV6enkKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICJHZW5lcmFyIgorCisjOiBnaXRrOjExNDk1Cittc2dpZCAiQ29sb3JzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTE0OTYKK21zZ2lkICJGb250cyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExNTQ2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0azogZWxlZ2lyIGNvbG9yIHBhcmEgJXMiCisKKyM6IGdpdGs6MTIwNTkKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyJFc3RhIHZlcnNpw7NuIGRlIFRjbC9UayBlcyBkZW1hc2lhZG8gYW50aWd1YS5cbiIKKyIgR2l0ayByZXF1aWVyZSBUY2wvVGsgdmVyc2nDs24gOC40IG8gc3VwZXJpb3IuIgorCisjOiBnaXRrOjEyMjY5Cittc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKK21zZ3N0ciAiTm8gaGF5IHVuIHJlcG9zaXRvcmlvIGdpdCBhcXXDrS4iCisKKyM6IGdpdGs6MTIzMTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIiIKKyJBcmd1bWVudG8gYW1iaWd1bzogJyVzJyBlcyB0YW50byB1bmEgcmV2aXNpw7NuIGNvbW8gdW4gbm9tYnJlIGRlIGFyY2hpdm8iCisKKyM6IGdpdGs6MTIzMjgKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICJBcmd1bWVudG9zIGluY29ycmVjdG9zIGEgR2l0azoiCisKKyN+IG1zZ2lkICJTSEExIElEOiAiCisjfiBtc2dzdHIgIlNIQTEgSUQ6ICIKKworI34gbXNnaWQgIm5leHQiCisjfiBtc2dzdHIgIjw8IgorCisjfiBtc2dpZCAicHJldiIKKyN+IG1zZ3N0ciAiPj4iCisKKyN+IG1zZ2lkICIvXHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCwgb3IgcmVkbyBmaW5kIgorI34gbXNnc3RyICIvXHRcdEJ1c2NhciBlbCBzaWd1aWVudGUsIG8gcmVpbmljaWFyIGxhIGLDunNxdWVkYSIKKworI34gbXNnaWQgIk5hbWUiCisjfiBtc2dzdHIgIk5vbWJyZSIKKworI34gbXNnaWQgIkNEYXRlIgorI34gbXNnc3RyICJGZWNoYSBkZSBjcmVhY2nDs24iCisKKyN+IG1zZ2lkICJUYWcvSGVhZCAlcyBpcyBub3Qga25vd24iCisjfiBtc2dzdHIgIkxhIGV0aXF1ZXRhL3JhbWEgJXMgZXMgZGVjb25vY2lkYSIKKworI34gbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCisjfiBtc2dzdHIgIk5vIGhheSBkaXJlY3RvcmlvIGdpdCBcIiVzXCIuIgpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vZnIucG8gYi9naXRrLWdpdC9wby9mci5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGZhYzkzCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vZnIucG8KQEAgLTAsMCArMSwxNDAwIEBACisjIEZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgZ2l0ayBwYWNrYWdlCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFBhdWwgTWFja2VycmFzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KKyMgVHJhbnNsYXRvcnM6CisjIEVtbWFudWVsIFRyaWxsYXVkIDxldHJpbGxhdWRAZ21haWwuY29tPgorIyBKZWFuLU5vw6tsIEF2aWxhIDxqbi5hdmlsYUBmcmVlLmZyPgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0a1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNi0wMS0yMiAyMjowNCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wMS0yMiAyMzoyOCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBKZWFuLU5vw6tsIEF2aWxhIDxqbi5hdmlsYUBmcmVlLmZyPlxuIgorIkxhbmd1YWdlLVRlYW06IGdpdEB2Z2VyLmtlcm5lbC5vcmdcbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1Qb2VkaXQtTGFuZ3VhZ2U6IEZyZW5jaFxuIgorIlgtUG9lZGl0LUNvdW50cnk6IEZSQU5DRVxuIgorCisjOiBnaXRrOjE0MAorbXNnaWQgIkNvdWxkbid0IGdldCBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzOiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBsYSBsaXN0ZSBkZXMgZmljaGllcnMgbm9uIGZ1c2lvbm7DqXMgOiIKKworIzogZ2l0azoyMTIgZ2l0azoyMzk5Cittc2dpZCAiQ29sb3Igd29yZHMiCittc2dzdHIgIkNvbG9yaWVyIGxlcyBtb3RzIGRpZmbDqXJlbnRzIgorCisjOiBnaXRrOjIxNyBnaXRrOjIzOTkgZ2l0azo4MjM5IGdpdGs6ODI3MgorbXNnaWQgIk1hcmt1cCB3b3JkcyIKK21zZ3N0ciAiTWFycXVlciBsZXMgbW90cyBkaWZmw6lyZW50cyIKKworIzogZ2l0azozMjQKK21zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCittc2dzdHIgIkVycmV1ciBsb3JzIGR1IHBhcmNvdXJzIGRlcyByw6l2aXNpb25zIDoiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiRXJyZXVyIMOgIGwnZXjDqWN1dGlvbiBkZSBsYSBjb21tYW5kZSAtLWFyZ3NjbWQgOiIKKworIzogZ2l0azozOTMKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyJBdWN1biBmaWNoaWVyIHPDqWxlY3Rpb25uw6kgOiAtLW1lcmdlIHByw6ljaXPDqSwgbWFpcyB0b3VzIGxlcyBmaWNoaWVycyBzb250ICIKKyJmdXNpb25uw6lzLiIKKworIyBGSVhNRSA6IGFtw6lsaW9yZXIgbGEgdHJhZHVjdGlvbiBkZSAnZmlsZSBsaW1pdGUnCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICJBdWN1biBmaWNoaWVyIHPDqWxlY3Rpb25uw6kgOiAtLW1lcmdlIHByw6ljaXPDqSBtYWlzIGF1Y3VuIGZpY2hpZXIgbm9uIGZ1c2lvbm7DqSBuJ2VzdCBkYW5zIGxhIGxpbWl0ZSBkZXMgZmljaGllcnMuIgorCisjOiBnaXRrOjQxOCBnaXRrOjU2NgorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKK21zZ3N0ciAiRXJyZXVyIMOgIGwnZXjDqWN1dGlvbiBkZSBnaXQgbG9nIDoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAiTGVjdHVyZSBlbiBjb3VycyIKKworIzogZ2l0azo0OTYgZ2l0azo0NTQ0Cittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICJMZWN0dXJlIGRlcyBjb21taXRzLi4uIgorCisjOiBnaXRrOjQ5OSBnaXRrOjE2MzcgZ2l0azo0NTQ3Cittc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKK21zZ3N0ciAiQXVjdW4gY29tbWl0IHPDqWxlY3Rpb25uw6kiCisKKyM6IGdpdGs6MTQ0NSBnaXRrOjQwNjQgZ2l0azoxMjQ2OQorbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAiTGlnbmUgZGUgY29tbWFuZGUiCisKKyM6IGdpdGs6MTUxMQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsaXJlIGxhIHNvcnRpZSBkZSBnaXQgbG9nIDoiCisKKyM6IGdpdGs6MTc0MAorbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCittc2dzdHIgIkF1Y3VuZSBpbmZvcm1hdGlvbiBkaXNwb25pYmxlIHN1ciBsZSBjb21taXQiCisKKyM6IGdpdGs6MTkwMyBnaXRrOjE5MzIgZ2l0azo0MzM0IGdpdGs6OTcwMiBnaXRrOjExMjc0IGdpdGs6MTE1NTQKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGdpdGs6MTkzNCBnaXRrOjQzMzYgZ2l0azo5MjE1IGdpdGs6OTI5NCBnaXRrOjk0MjQgZ2l0azo5NDczIGdpdGs6OTcwNAorIzogZ2l0azoxMTI3NSBnaXRrOjExNTU1Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJBbm51bGVyIgorCisjOiBnaXRrOjIwODMKK21zZ2lkICImVXBkYXRlIgorbXNnc3RyICJNaXNlIMOgIGpvdXIiCisKKyM6IGdpdGs6MjA4NAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgIiZSZWNoYXJnZXIiCisKKyM6IGdpdGs6MjA4NQorbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKK21zZ3N0ciAiUmVsaXJlIGxlcyByw6kmZsOpcmVuY2VzIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICImTGlzdGVyIGxlcyByw6lmw6lyZW5jZXMiCisKKyM6IGdpdGs6MjA4OAorbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgorbXNnc3RyICJEw6ltYXJyZXIgZ2l0ICZndWkiCisKKyM6IGdpdGs6MjA5MAorbXNnaWQgIiZRdWl0IgorbXNnc3RyICImUXVpdHRlciIKKworIzogZ2l0azoyMDgyCittc2dpZCAiJkZpbGUiCittc2dzdHIgIiZGaWNoaWVyIgorCisjOiBnaXRrOjIwOTQKK21zZ2lkICImUHJlZmVyZW5jZXMiCittc2dzdHIgIlByw6lmw6lyZW5jZXMiCisKKyM6IGdpdGs6MjA5MworbXNnaWQgIiZFZGl0IgorbXNnc3RyICImw4lkaXRlciIKKworIzogZ2l0azoyMDk4Cittc2dpZCAiJk5ldyB2aWV3Li4uIgorbXNnc3RyICImTm91dmVsbGUgdnVlLi4uIgorCisjOiBnaXRrOjIwOTkKK21zZ2lkICImRWRpdCB2aWV3Li4uIgorbXNnc3RyICImw4lkaXRlciBsYSB2dWUuLi4iCisKKyM6IGdpdGs6MjEwMAorbXNnaWQgIiZEZWxldGUgdmlldyIKK21zZ3N0ciAiU3VwcHJpbWVyIGxhIHZ1ZSIKKworIzogZ2l0azoyMTAyCittc2dpZCAiJkFsbCBmaWxlcyIKK21zZ3N0ciAiVG91cyBsZXMgZmljaGllcnMiCisKKyM6IGdpdGs6MjA5NworbXNnaWQgIiZWaWV3IgorbXNnc3RyICImVnVlIgorCisjOiBnaXRrOjIxMDcgZ2l0azoyMTE3Cittc2dpZCAiJkFib3V0IGdpdGsiCittc2dzdHIgIsOAIHByb3BvcyBkZSBnaXRrIgorCisjOiBnaXRrOjIxMDggZ2l0azoyMTIyCittc2dpZCAiJktleSBiaW5kaW5ncyIKK21zZ3N0ciAiUmFjY291cmNpcyBjbGF2aWVyIgorCisjOiBnaXRrOjIxMDYgZ2l0azoyMTIxCittc2dpZCAiJkhlbHAiCittc2dzdHIgIkFpZGUiCisKKyM6IGdpdGs6MjE5OSBnaXRrOjg2NzEKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiSWQgU0hBMSA6IgorCisjOiBnaXRrOjIyNDMKK21zZ2lkICJSb3ciCittc2dzdHIgIkNvbG9ubmUiCisKKyM6IGdpdGs6MjI4MQorbXNnaWQgIkZpbmQiCittc2dzdHIgIlJlY2hlcmNoZSIKKworIzogZ2l0azoyMzA5Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICJjb21taXQiCisKKyM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzA2IGdpdGs6NDcyOSBnaXRrOjQ3NTMgZ2l0azo2Nzc0IGdpdGs6Njg0NgorIzogZ2l0azo2OTMxCittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgImNvbnRpZW50IDoiCisKKyM6IGdpdGs6MjMxNiBnaXRrOjM1NDUgZ2l0azozNTUwIGdpdGs6NDc4MgorbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAiY2hlbWlucyBtb2RpZmnDqXMgOiIKKworIzogZ2l0azoyMzE3IGdpdGs6NDc5NgorbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICJham91dGUvc3VwcHJpbWUgbGEgY2hhw65uZSA6IgorCisjOiBnaXRrOjIzMTggZ2l0azo0Nzk4Cittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICJtb2RpZmllIGxlcyBsaWduZXMgdsOpcmlmaWFudMKgOiIKKworIzogZ2l0azoyMzI3IGdpdGs6MjMyOSBnaXRrOjQ3ODUKK21zZ2lkICJFeGFjdCIKK21zZ3N0ciAiRXhhY3QiCisKKyM6IGdpdGs6MjMyOSBnaXRrOjQ4NzMgZ2l0azo2NzQyCittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAiSWdub3JlciBsYSBjYXNzZSIKKworIzogZ2l0azoyMzI5IGdpdGs6NDc1NSBnaXRrOjQ4NzEgZ2l0azo2NzM4Cittc2dpZCAiUmVnZXhwIgorbXNnc3RyICJFeHByZXNzaW9uIHLDqWd1bGnDqHJlIgorCisjOiBnaXRrOjIzMzEgZ2l0azoyMzMyIGdpdGs6NDg5MyBnaXRrOjQ5MjMgZ2l0azo0OTMwIGdpdGs6Njg2NyBnaXRrOjY5MzUKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJUb3VzIGxlcyBjaGFtcHMiCisKKyM6IGdpdGs6MjMzMiBnaXRrOjQ4OTAgZ2l0azo0OTIzIGdpdGs6NjgwNQorbXNnaWQgIkhlYWRsaW5lIgorbXNnc3RyICJUaXRyZSIKKworIzogZ2l0azoyMzMzIGdpdGs6NDg5MCBnaXRrOjY4MDUgZ2l0azo2OTM1IGdpdGs6NzQwOAorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJDb21tZW50YWlyZXMiCisKKyM6IGdpdGs6MjMzMyBnaXRrOjQ4OTAgZ2l0azo0ODk1IGdpdGs6NDkzMCBnaXRrOjY4MDUgZ2l0azo3MzQzIGdpdGs6ODg0OQorIzogZ2l0azo4ODY0Cittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJBdXRldXIiCisKKyM6IGdpdGs6MjMzMyBnaXRrOjQ4OTAgZ2l0azo2ODA1IGdpdGs6NzM0NQorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAiVmFsaWRhdGV1ciIKKworIzogZ2l0azoyMzY3Cittc2dpZCAiU2VhcmNoIgorbXNnc3RyICJSZWNoZXJjaGVyIgorCisjOiBnaXRrOjIzNzUKK21zZ2lkICJEaWZmIgorbXNnc3RyICJEaWZmIgorCisjOiBnaXRrOjIzNzcKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiQW5jaWVubmUgdmVyc2lvbiIKKworIzogZ2l0azoyMzc5Cittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIk5vdXZlbGxlIHZlcnNpb24iCisKKyM6IGdpdGs6MjM4MgorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIkxpZ25lcyBkZSBjb250ZXh0ZSIKKworIzogZ2l0azoyMzkyCittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiSWdub3JlciBsZXMgbW9kaWZpY2F0aW9ucyBkJ2VzcGFjZSIKKworIzogZ2l0azoyMzk2IGdpdGs6MjM5OCBnaXRrOjc5NzggZ2l0azo4MjI1Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICJkaWZmw6lyZW5jZSBwYXIgbGlnbmUiCisKKyM6IGdpdGs6MjQ2MworbXNnaWQgIlBhdGNoIgorbXNnc3RyICJQYXRjaCIKKworIzogZ2l0azoyNDY1Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAiQXJicmUiCisKKyM6IGdpdGs6MjYzNSBnaXRrOjI2NTYKK21zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCittc2dzdHIgIkRpZmYgY2VjaSAtPiBsYSBzw6lsZWN0aW9uIgorCisjOiBnaXRrOjI2MzYgZ2l0azoyNjU3Cittc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgorbXNnc3RyICJEaWZmIHPDqWxlY3Rpb24gLT4gY2VjaSIKKworIzogZ2l0azoyNjM3IGdpdGs6MjY1OAorbXNnaWQgIk1ha2UgcGF0Y2giCittc2dzdHIgIkNyw6llciBwYXRjaCIKKworIzogZ2l0azoyNjM4IGdpdGs6OTI3MworbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIkNyw6llciDDqXRpcXVldHRlIgorCisjOiBnaXRrOjI2MzkKK21zZ2lkICJDb3B5IGNvbW1pdCBzdW1tYXJ5IgorbXNnc3RyICJDb3Bpw6kgbGUgcsOpc3Vtw6kgZHUgY29tbWl0IgorCisjOiBnaXRrOjI2NDAgZ2l0azo5NDA0Cittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIsOJY3JpcmUgbGUgY29tbWl0IGRhbnMgdW4gZmljaGllciIKKworIzogZ2l0azoyNjQxIGdpdGs6OTQ2MQorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJDcsOpZXIgdW5lIG5vdXZlbGxlIGJyYW5jaGUiCisKKyM6IGdpdGs6MjY0MgorbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJDdWVpbGxpciAoY2hlcnJ5LXBpY2spIGNlIGNvbW1pdCIKKworIzogZ2l0azoyNjQzCittc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiUsOpaW5pdGlhbGlzZXIgbGEgYnJhbmNoZSBIRUFEIHZlcnMgY2V0IMOpdGF0IgorCisjOiBnaXRrOjI2NDQKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICJNYXJxdWVyIGNlIGNvbW1pdCIKKworIzogZ2l0azoyNjQ1Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgIlJldG91cm5lciDDoCBsYSBtYXJxdWUiCisKKyM6IGdpdGs6MjY0NgorbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgorbXNnc3RyICJDaGVyY2hlciBsZSBkZXNjZW5kYW50IGRlIGNlY2kgZXQgbGUgbWFycXVlciIKKworIzogZ2l0azoyNjQ3Cittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIkNvbXBhcmVyIGF2ZWMgbGUgY29tbWl0IG1hcnF1w6kiCisKKyM6IGdpdGs6MjY0OCBnaXRrOjI2NTkKK21zZ2lkICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiRGlmZiBjZWNpIC0+IHPDqWxlY3Rpb24iCisKKyM6IGdpdGs6MjY0OSBnaXRrOjI2NjAKK21zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZiBlbnRyZSBzw6lsZWN0aW9uIC0+IGNlY2kiCisKKyM6IGdpdGs6MjY1MAorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiRMOpZmFpcmUgY2UgY29tbWl0IgorCisjOiBnaXRrOjI2NjYKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIlLDqWN1cMOpcmVyIGNldHRlIGJyYW5jaGUiCisKKyM6IGdpdGs6MjY2NworbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiU3VwcHJpbWVyIGNldHRlIGJyYW5jaGUiCisKKyM6IGdpdGs6MjY2OAorbXNnaWQgIkNvcHkgYnJhbmNoIG5hbWUiCittc2dzdHIgIkNvcGllciBsYSBub20gZGUgbGEgYnJhbmNoZSIKKworIzogZ2l0azoyNjc1Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICJTdXJsaWduZXIgw6lnYWxlbWVudCBjZWNpIgorCisjOiBnaXRrOjI2NzYKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICJTdXJsaWduZXIgc2V1bGVtZW50IGNlY2kiCisKKyM6IGdpdGs6MjY3NworbXNnaWQgIkV4dGVybmFsIGRpZmYiCittc2dzdHIgIkRpZmYgZXh0ZXJuZSIKKworIzogZ2l0azoyNjc4Cittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAiQmzDom1lciBsZSBjb21taXQgcGFyZW50IgorCisjOiBnaXRrOjI2NzkKK21zZ2lkICJDb3B5IHBhdGgiCittc2dzdHIgIkNvcGllciBsZSBjaGVtaW4iCisKKyM6IGdpdGs6MjY4NgorbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAiTW9udHJlciBsJ29yaWdpbmUgZGUgY2V0dGUgbGlnbmUiCisKKyM6IGdpdGs6MjY4NworbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiRXjDqWN1dGVyIGdpdCBndWkgYmxhbWUgc3VyIGNldHRlIGxpZ25lIgorCisjOiBnaXRrOjMwMzEKK21zZ2lkICJBYm91dCBnaXRrIgorbXNnc3RyICLDgCBwcm9wb3MgZGUgZ2l0ayIKKworIzogZ2l0azozMDMzCittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayAtIHZpc3VhbGlzYXRldXIgZGUgY29tbWl0IHBvdXIgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXRpbGlzYXRpb24gZXQgcmVkaXN0cmlidXRpb24gc291bWlzZXMgYXV4IHRlcm1lcyBkZSBsYSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKKworIzogZ2l0azozMDQxIGdpdGs6MzEwOCBnaXRrOjk4OTAKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiRmVybWVyIgorCisjOiBnaXRrOjMwNjIKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiUmFjY291cmNpcyBjbGF2aWVyIGRlIEdpdGsiCisKKyM6IGdpdGs6MzA2NQorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKK21zZ3N0ciAiUmFjY291cmNpcyBjbGF2aWVyIGRlIEdpdGsgOiIKKworIzogZ2l0azozMDY3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVE+XHRcdFF1aXQiCittc2dzdHIgIjwlcy1RPlx0XHRRdWl0dGVyIgorCisjOiBnaXRrOjMwNjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgorbXNnc3RyICI8JXMtVz5cdFx0RmVybWVyIGxhIGZlbsOqdHJlIgorCisjOiBnaXRrOjMwNjkKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxEw6lidXQ+XHRcdEFsbGVyIGF1IHByZW1pZXIgY29tbWl0IgorCisjOiBnaXRrOjMwNzAKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RmluPlx0XHRBbGxlciBhdSBkZXJuaWVyIGNvbW1pdCIKKworIzogZ2l0azozMDcxCittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8SGF1dD4sIHAsIGtcdCBBbGxlciBhdSBjb21taXQgcHLDqWPDqWRlbnQiCisKKyM6IGdpdGs6MzA3MgorbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxCYXM+LCBuLCBqXHQgQWxsZXIgYXUgY29tbWl0IHN1aXZhbnQiCisKKyM6IGdpdGs6MzA3MworbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxHYXVjaGU+LCB6LCBoXHRSZWN1bGVyIGRhbnMgbCdoaXN0b3JpcXVlIgorCisjOiBnaXRrOjMwNzQKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPERyb2l0ZT4sIHgsIGxcdEF2YW5jZXIgZGFucyBsJ2hpc3RvcmlxdWUiCisKKyM6IGdpdGs6MzA3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8JXMtbj5cdEFsbGVyIHN1ciBsZSBuLWnDqG1lIHBhcmVudCBkdSBjb21taXQgZGFucyBsJ2hpc3RvcmlxdWUiCisKKyM6IGdpdGs6MzA3NgorbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx0TW9udGVyIGQndW5lIHBhZ2UgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azozMDc3Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZURvd24+XHREZXNjZW5kcmUgZCd1bmUgcGFnZSBkYW5zIGxhIGxpc3RlIGRlcyBjb21taXRzIgorCisjOiBnaXRrOjMwNzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1Ew6lidXQ+XHRBbGxlciBlbiBoYXV0IGRlIGxhIGxpc3RlIGRlcyBjb21taXRzIgorCisjOiBnaXRrOjMwNzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZD5cdEFsbGVyIGVuIGJhcyBkZSBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azozMDgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtVXA+XHRNb250ZXIgZCd1bmUgbGlnbmUgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azozMDgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLURvd24+XHREZXNjZW5kcmUgZCd1bmUgbGlnbmUgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azozMDgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdE1vbnRlciBkJ3VuZSBwYWdlIGRhbnMgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MzA4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZURvd24+XHREZXNjZW5kcmUgZCd1bmUgcGFnZSBkYW5zIGxhIGxpc3RlIGRlcyBjb21taXRzIgorCisjOiBnaXRrOjMwODQKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIiIKKyI8U2hpZnQtVXA+XHRSZWNoZXJjaGUgZW4gYXJyacOocmUgKHZlcnMgbCdhdmFudCwgY29tbWl0cyBsZXMgcGx1cyBhbmNpZW5zKSIKKworIzogZ2l0azozMDg1Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIiIKKyI8U2hpZnQtRG93bj5cdFJlY2hlcmNoZSBlbiBhdmFudCAodmVycyBsJ2FycmnDqHJlLCBjb21taXQgbGVzIHBsdXMgcsOpY2VudHMpIgorCisjOiBnaXRrOjMwODYKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPFN1cHByaW1lcj4sIGJcdE1vbnRlciBkJ3VuZSBwYWdlIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjMwODcKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJhY2tzcGFjZT5cdE1vbnRlciBkJ3VuZSBwYWdlIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjMwODgKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPEVzcGFjZT5cdFx0RGVzY2VuZHJlIGQndW5lIHBhZ2UgZGFucyBsYSB2dWUgZGVzIGRpZmYiCisKKyM6IGdpdGs6MzA4OQorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRNb250ZXIgZGUgMTggbGlnbmVzIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjMwOTAKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHREZXNjZW5kcmUgZGUgMTggbGlnbmVzIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjMwOTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdFJlY2hlcmNoZXIiCisKKyM6IGdpdGs6MzA5MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHRBbGxlciBhdSByw6lzdWx0YXQgZGUgcmVjaGVyY2hlIHN1aXZhbnQiCisKKyM6IGdpdGs6MzA5MworbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxSZXR1cm4+XHRcdEFsbGVyIGF1IHLDqXN1bHRhdCBkZSByZWNoZXJjaGUgc3VpdmFudCIKKworIzogZ2l0azozMDk0Cittc2dpZCAiZ1x0XHRHbyB0byBjb21taXQiCittc2dzdHIgImdcdFx0QWxsZXIgYXUgY29tbWl0IgorCisjOiBnaXRrOjMwOTUKK21zZ2lkICIvXHRcdEZvY3VzIHRoZSBzZWFyY2ggYm94IgorbXNnc3RyICIvXHRcdEZvY3VzIHN1ciBsYSB6b25lIGRlIHJlY2hlcmNoZSIKKworIzogZ2l0azozMDk2Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdEFsbGVyIGF1IHLDqXN1bHRhdCBkZSByZWNoZXJjaGUgcHLDqWPDqWRlbnQiCisKKyM6IGdpdGs6MzA5NworbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx0QWxsZXIgYXUgcHJvY2hhaW4gZmljaGllciBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azozMDk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx0QWxsZXIgYXUgcsOpc3VsdGF0IHN1aXZhbnQgZGFucyBsYSB2dWUgZGVzIGRpZmYiCisKKyM6IGdpdGs6MzA5OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRBbGxlciBhdSByw6lzdWx0YXQgcHLDqWPDqWRlbnQgZGFucyBsYSB2dWUgZGVzIGRpZmYiCisKKyM6IGdpdGs6MzEwMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUCs+XHRBdWdtZW50ZXIgbGEgdGFpbGxlIGRlIGxhIHBvbGljZSIKKworIzogZ2l0azozMTAxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1wbHVzPlx0QXVnbWVudGVyIGxhIHRhaWxsZSBkZSBsYSBwb2xpY2UiCisKKyM6IGdpdGs6MzEwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUC0+XHREaW1pbnVlciBsYSB0YWlsbGUgZGUgbGEgcG9saWNlIgorCisjOiBnaXRrOjMxMDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1taW51cz5cdERpbWludWVyIGxhIHRhaWxsZSBkZSBsYSBwb2xpY2UiCisKKyM6IGdpdGs6MzEwNAorbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdE1pc2Ugw6Agam91ciIKKworIzogZ2l0azozNTY5IGdpdGs6MzU3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSBjcsOpYXRpb24gZHUgcsOpcGVydG9pcmUgdGVtcG9yYWlyZSAlcyA6IgorCisjOiBnaXRrOjM1OTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAiRXJyZXVyIGVuIG9idGVuYW50IFwiJXNcIiBkZSAlczoiCisKKyM6IGdpdGs6MzY1NAorbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIGNvbW1hbmRlIDoiCisKKyM6IGdpdGs6MzgwMworbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICJDb21taXQgaW5leGlzdGFudCIKKworIzogZ2l0azozODE3Cittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJnaXQgZ3VpIGJsYW1lIDogw6ljaGVjIGRlIGxhIGNvbW1hbmRlIDoiCisKKyM6IGdpdGs6Mzg0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgbGlyZSBsZSBoZWFkIGRlIGxhIGZ1c2lvbiA6ICVzIgorCisjOiBnaXRrOjM4NTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKK21zZ3N0ciAiRXJyZXVyIMOgIGxhIGxlY3R1cmUgZGUgbCdpbmRleCA6ICVzIgorCisjOiBnaXRrOjM4ODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqW1hcnJlciBnaXQgYmxhbWUgOiAlcyIKKworIzogZ2l0azozODg0IGdpdGs6Njc3MworbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAiUmVjaGVyY2hlIGVuIGNvdXJzIgorCisjOiBnaXRrOjM5MTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgIkVycmV1ciDDoCBsJ2V4w6ljdXRpb24gZGUgZ2l0IGJsYW1lIDogJXMiCisKKyM6IGdpdGs6Mzk0NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIkNldHRlIGxpZ25lIGVzdCBpc3N1ZSBkdSBjb21taXQgJXMsIHF1aSBuJ2VzdCBwYXMgZGFucyBjZXR0ZSB2dWUiCisKKyM6IGdpdGs6Mzk1OAorbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgIsOJY2hlYyBkZSBsJ291dGlsIGV4dGVybmUgZGUgdmlzdWFsaXNhdGlvbiBkZXMgZGlmZsKgOiIKKworIzogZ2l0azo0MDYyCittc2dpZCAiQWxsIGZpbGVzIgorbXNnc3RyICJUb3VzIGxlcyBmaWNoaWVycyIKKworIzogZ2l0azo0MDg2Cittc2dpZCAiVmlldyIKK21zZ3N0ciAiVnVlIgorCisjOiBnaXRrOjQwODkKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRMOpZmluaXRpb24gZGVzIHZ1ZXMgZGUgR2l0ayIKKworIzogZ2l0azo0MDkzCittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJTZSBzb3V2ZW5pciBkZSBjZXR0ZSB2dWUiCisKKyM6IGdpdGs6NDA5NAorbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCittc2dzdHIgIlLDqWbDqXJlbmNlcyAobGlzdGUgZCfDqWzDqW1lbnRzIHPDqXBhcsOpcyBwYXIgZGVzIGVzcGFjZXMpIDoiCisKKyM6IGdpdGs6NDA5NQorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIkJyYW5jaGVzICYgw6l0aXF1ZXR0ZXMgOiIKKworIzogZ2l0azo0MDk2Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIlRvdXRlcyBsZXMgcsOpZsOpcmVuY2VzIgorCisjOiBnaXRrOjQwOTcKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAiVG91dGVzIGxlcyBicmFuY2hlcyAobG9jYWxlcykiCisKKyM6IGdpdGs6NDA5OAorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJUb3V0ZXMgbGVzIMOpdGlxdWV0dGVzIgorCisjOiBnaXRrOjQwOTkKK21zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJUb3V0ZXMgbGVzIGJyYW5jaGVzIGRlIHN1aXZpIMOgIGRpc3RhbmNlIgorCisjOiBnaXRrOjQxMDAKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICJJbmZvIHN1ciBsZXMgY29tbWl0cyAoZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzKSA6IgorCisjOiBnaXRrOjQxMDEKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRldXIgOiIKKworIzogZ2l0azo0MTAyCittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAiVmFsaWRhdGV1ciA6IgorCisjOiBnaXRrOjQxMDMKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIk1lc3NhZ2UgZGUgY29tbWl0IDoiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJDb3JyZXNwb25kIMOgIHRvdXMgbGVzIGNyaXTDqHJlcyBkJ0luZm8gc3VyIGxlcyBjb21taXRzIgorCisjOiBnaXRrOjQxMDUKK21zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJOZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGRlcyBjcml0w6hyZXMgZCdJbmZvIHN1ciBsZXMgY29tbWl0cyIKKworIzogZ2l0azo0MTA2Cittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgIkNoYW5nZW1lbnRzIGRlcyBmaWNoaWVycyA6IgorCisjOiBnaXRrOjQxMDcKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgIkNoYcOubmUgRmlnw6llIgorCisjOiBnaXRrOjQxMDgKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgIkV4cHJlc3Npb24gUsOpZ3VsacOocmUiCisKKyM6IGdpdGs6NDEwOQorbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICJSZWNoZXJjaGUgZGUgbGEgY2hhw65uZSA6IgorCisjOiBnaXRrOjQxMTAKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyJEYXRlcyBkZXMgY29tbWl0cyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgIgorIjIwMDkgMTU6Mjc6MzhcIikgOiIKKworIzogZ2l0azo0MTExCittc2dpZCAiU2luY2U6IgorbXNnc3RyICJEZXB1aXMgOiIKKworIzogZ2l0azo0MTEyCittc2dpZCAiVW50aWw6IgorbXNnc3RyICJKdXNxdSdhdSA6IgorCisjOiBnaXRrOjQxMTMKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAiTGltaXRlciBldC9vdSBzYXV0ZXIgdW4gY2VydGFpbiBub21icmUgKGVudGllciBwb3NpdGlmKSBkZSByw6l2aXNpb25zIDoiCisKKyM6IGdpdGs6NDExNAorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiTm9tYnJlIMOgIGFmZmljaGVyIDoiCisKKyM6IGdpdGs6NDExNQorbXNnaWQgIk51bWJlciB0byBza2lwOiIKK21zZ3N0ciAiTm9tYnJlIMOgIHNhdXRlciA6IgorCisjOiBnaXRrOjQxMTYKK21zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgorbXNnc3RyICJPcHRpb25zIGRpdmVyc2VzIDoiCisKKyM6IGdpdGs6NDExNworbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKK21zZ3N0ciAiVHJpZXIgcGFyIGRhdGUiCisKKyM6IGdpdGs6NDExOAorbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICJJbmRpcXVlciBsZXMgY8O0dMOpcyBkZXMgYnJhbmNoZXMiCisKKyM6IGdpdGs6NDExOQorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiTGltaXRlciBhdSBwcmVtaWVyIGFuY8OqdHJlIgorCisjOiBnaXRrOjQxMjAKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAiSGlzdG9yaXF1ZSBzaW1wbGUiCisKKyM6IGdpdGs6NDEyMQorbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgorbXNnc3RyICJBcmd1bWVudHMgc3VwcGzDqW1lbnRhaXJlcyBkZSBnaXQgbG9nIDoiCisKKyM6IGdpdGs6NDEyMgorbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJTYWlzaXIgbGVzIGZpY2hpZXJzIGV0IHLDqXBlcnRvaXJlcyDDoCBpbmNsdXJlLCB1biBwYXIgbGlnbmUgOiIKKworIzogZ2l0azo0MTIzCittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIkNvbW1hbmRlIHBvdXIgZ8OpbsOpcmVyIHBsdXMgZGUgY29tbWl0cyDDoCBpbmNsdXJlIDoiCisKKyM6IGdpdGs6NDI0NworbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0ayA6IMOpZGl0ZXIgbGEgdnVlIgorCisjOiBnaXRrOjQyNTUKK21zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKK21zZ3N0ciAiLS0gY3JpdMOocmUgcG91ciBsYSBzw6lsZWN0aW9uIGRlcyByw6l2aXNpb25zIgorCisjOiBnaXRrOjQyNjAKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIk5vbSBkZSBsYSB2dWUiCisKKyM6IGdpdGs6NDMzNQorbXNnaWQgIkFwcGx5IChGNSkiCittc2dzdHIgIkFwcGxpcXVlciAoRjUpIgorCisjOiBnaXRrOjQzNzMKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgIkVycmV1ciBkYW5zIGxlcyBhcmd1bWVudHMgZGUgc8OpbGVjdGlvbiBkZXMgY29tbWl0cyA6IgorCisjOiBnaXRrOjQ0MjggZ2l0azo0NDgxIGdpdGs6NDk0MyBnaXRrOjQ5NTcgZ2l0azo2MjI3IGdpdGs6MTI0MTAgZ2l0azoxMjQxMQorbXNnaWQgIk5vbmUiCittc2dzdHIgIkF1Y3VuIgorCisjOiBnaXRrOjUwNDAgZ2l0azo1MDQ1Cittc2dpZCAiRGVzY2VuZGFudCIKK21zZ3N0ciAiRGVzY2VuZGFudCIKKworIzogZ2l0azo1MDQxCittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIlBhcyB1biBkZXNjZW5kYW50IgorCisjOiBnaXRrOjUwNDggZ2l0azo1MDUzCittc2dpZCAiQW5jZXN0b3IiCittc2dzdHIgIkFuY8OqdHJlIgorCisjOiBnaXRrOjUwNDkKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIlBhcyB1biBhbmPDqnRyZSIKKworIzogZ2l0azo1MzQzCittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICJNb2RpZmljYXRpb25zIGxvY2FsZXMgZW5yZWdpc3Ryw6llcyBkYW5zIGwnaW5kZXggbWFpcyBub24gdmFsaWTDqWVzIgorCisjOiBnaXRrOjUzNzkKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiTW9kaWZpY2F0aW9ucyBsb2NhbGVzIG5vbiBlbnJlZ2lzdHLDqWVzIGRhbnMgbCdpbmRleCBldCBub24gdmFsaWTDqWVzIgorCisjOiBnaXRrOjcxNTMKK21zZ2lkICJhbmQgbWFueSBtb3JlIgorbXNnc3RyICJldCBiZWF1Y291cCBwbHVzIgorCisjOiBnaXRrOjcxNTYKK21zZ2lkICJtYW55IgorbXNnc3RyICJub21icmV1eCIKKworIzogZ2l0azo3MzQ3Cittc2dpZCAiVGFnczoiCittc2dzdHIgIsOJdGlxdWV0dGVzIDoiCisKKyM6IGdpdGs6NzM2NCBnaXRrOjczNzAgZ2l0azo4ODQ0Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICJQYXJlbnQiCisKKyM6IGdpdGs6NzM3NQorbXNnaWQgIkNoaWxkIgorbXNnc3RyICJFbmZhbnQiCisKKyM6IGdpdGs6NzM4NAorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiQnJhbmNoZSIKKworIzogZ2l0azo3Mzg3Cittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAiU3VpdCIKKworIzogZ2l0azo3MzkwCittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIlByw6ljw6hkZSIKKworIzogZ2l0azo3OTg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGxhIHLDqWN1cMOpcmF0aW9uIGRlcyBkaWZmIDogJXMiCisKKyM6IGdpdGs6ODY2OQorbXNnaWQgIkdvdG86IgorbXNnc3RyICJBbGxlciDDoCA6IgorCisjOiBnaXRrOjg2OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiTCdpZCBTSEExIGNvdXJ0ICVzIGVzdCBhbWJpZ3UiCisKKyM6IGdpdGs6ODY5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiTGEgcsOpdmlzaW9uICVzIGVzdCBpbmNvbm51IgorCisjOiBnaXRrOjg3MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiTCdpZCBTSEExICVzIGVzdCBpbmNvbm51IgorCisjOiBnaXRrOjg3MDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAiTGEgcsOpdmlzaW9uICVzIG4nZXN0IHBhcyBkYW5zIGxhIHZ1ZSBjb3VyYW50ZSIKKworIzogZ2l0azo4ODUxIGdpdGs6ODg2NgorbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdGUiCisKKyM6IGdpdGs6ODg1NAorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJFbmZhbnRzIgorCisjOiBnaXRrOjg5MTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiUsOpaW5pdGlhbGlzZXIgbGEgYnJhbmNoZSAlcyB2ZXJzIGNldCDDqXRhdCIKKworIzogZ2l0azo4OTE5Cittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgIkhlYWQgZMOpdGFjaMOpIDogaW1wb3NzaWJsZSBkZSByw6lpbml0aWFsaXNlciIKKworIzogZ2l0azo5MDI0IGdpdGs6OTAzMAorbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCittc2dzdHIgIsOJdml0ZXIgbGUgY29tbWl0IGRlIGxhIGZ1c2lvbiAiCisKKyM6IGdpdGs6OTAzOSBnaXRrOjkwNDQKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgIkVycmV1ciDDoCBsJ29idGVudGlvbiBkZSBsJ0lEIGR1IHBhdGNoIHBvdXIgIgorCisjOiBnaXRrOjkwNDAgZ2l0azo5MDQ1Cittc2dpZCAiIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIC0gYXJyw6p0IGVuIGNvdXJzXG4iCisKKyM6IGdpdGs6OTA1MCBnaXRrOjkwNTMgZ2l0azo5MDYxIGdpdGs6OTA3NSBnaXRrOjkwODQKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICJDb21taXQgIgorCisjOiBnaXRrOjkwNTQKK21zZ2lkICIiCisiIGlzIHRoZSBzYW1lIHBhdGNoIGFzXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorImVzdCBsZSBtw6ptZSBwYXRjaCBxdWUgXG4iCisiICAgICAgICIKKworIzogZ2l0azo5MDYyCittc2dpZCAiIgorIiBkaWZmZXJzIGZyb21cbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIGRpZmbDqHJlIGRlXG4iCisiICAgICAgICIKKworIzogZ2l0azo5MDY0Cittc2dpZCAiIgorIkRpZmYgb2YgY29tbWl0czpcbiIKKyJcbiIKK21zZ3N0ciAiRGlmZiBkZXMgY29tbWl0c8KgOlxuXG4iCisKKyM6IGdpdGs6OTA3NiBnaXRrOjkwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIGEgJXMgZW5mYW50cyAtIGFycsOqdCBlbiBjb3Vyc1xuIgorCisjOiBnaXRrOjkxMDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiRXJyZXVyIMOgIGwnw6ljcml0dXJlIGR1IGNvbW1pdCBkYW5zIGxlIGZpY2hpZXIgOiAlcyIKKworIzogZ2l0azo5MTEwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKK21zZ3N0ciAiRXJyZXVyIMOgIGxhIGRpZmbDqXJlbmNlIGRlcyBjb21taXRzIDogJXMiCisKKyM6IGdpdGs6OTE1NgorbXNnaWQgIlRvcCIKK21zZ3N0ciAiSGF1dCIKKworIzogZ2l0azo5MTU3Cittc2dpZCAiRnJvbSIKK21zZ3N0ciAiRGUiCisKKyM6IGdpdGs6OTE2MgorbXNnaWQgIlRvIgorbXNnc3RyICLDgCIKKworIzogZ2l0azo5MTg2Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkfDqW7DqXJlciBsZSBwYXRjaCIKKworIzogZ2l0azo5MTg4Cittc2dpZCAiRnJvbToiCittc2dzdHIgIkRlIDoiCisKKyM6IGdpdGs6OTE5NworbXNnaWQgIlRvOiIKK21zZ3N0ciAiw4AgOiIKKworIzogZ2l0azo5MjA2Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiSW52ZXJzZXIiCisKKyM6IGdpdGs6OTIwOCBnaXRrOjk0MTgKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIkZpY2hpZXIgZGUgc29ydGllIDoiCisKKyM6IGdpdGs6OTIxNAorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICJHw6luw6lyZXIiCisKKyM6IGdpdGs6OTI1MgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAiRXJyZXVyIMOgIGxhIGNyw6lhdGlvbiBkdSBwYXRjaCA6IgorCisjOiBnaXRrOjkyNzUgZ2l0azo5NDA2IGdpdGs6OTQ2MworbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQgOiIKKworIzogZ2l0azo5Mjg0Cittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJOb20gZGUgbCfDqXRpcXVldHRlIDoiCisKKyM6IGdpdGs6OTI4NworbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICJMZSBtZXNzYWdlIGQnw6l0aXF1ZXR0ZSBlc3Qgb3B0aW9ubmVsIgorCisjOiBnaXRrOjkyODkKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIk1lc3NhZ2UgZCfDqXRpcXVldHRlIDoiCisKKyM6IGdpdGs6OTI5MyBnaXRrOjk0NzIKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyw6llciIKKworIzogZ2l0azo5MzExCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJBdWN1biBub20gZCfDqXRpcXVldHRlIHNww6ljaWZpw6kiCisKKyM6IGdpdGs6OTMxNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkwnw6l0aXF1ZXR0ZSBcIiVzXCIgZXhpc3RlIGTDqWrDoCIKKworIzogZ2l0azo5MzI1Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRXJyZXVyIMOgIGxhIGNyw6lhdGlvbiBkZSBsJ8OpdGlxdWV0dGUgOiIKKworIzogZ2l0azo5NDE1Cittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIkNvbW1hbmRlIDoiCisKKyM6IGdpdGs6OTQyMworbXNnaWQgIldyaXRlIgorbXNnc3RyICLDiWNyaXJlIgorCisjOiBnaXRrOjk0NDEKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCittc2dzdHIgIkVycmV1ciDDoCBsJ2Vjcml0dXJlIGR1IGNvbW1pdCA6IgorCisjOiBnaXRrOjk0NjgKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiTm9tIDoiCisKKyM6IGdpdGs6OTQ5MQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgIlZldWlsbGV6IHNww6ljaWZpZXIgdW4gbm9tIHBvdXIgbGEgbm91dmVsbGUgYnJhbmNoZSIKKworIzogZ2l0azo5NDk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCittc2dzdHIgIkxhIGJyYW5jaGUgJyVzJyBleGlzdGUgZMOpasOgLiDDiWNyYXNlcj8iCisKKyM6IGdpdGs6OTU2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICIiCisiTGUgQ29tbWl0ICVzIGVzdCBkw6lqw6AgaW5jbHVzIGRhbnMgbGEgYnJhbmNoZSAlcyAtLSBsZSByw6ktYXBwbGlxdWVyIG1hbGdyw6kgIgorInRvdXQ/IgorCisjOiBnaXRrOjk1NjgKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAiUGljb3JlciAoQ2hlcnJ5LXBpY2tpbmcpIgorCisjOiBnaXRrOjk1NzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiTGUgcGljb3JhZ2UgKGNoZXJyeS1waWNrKSBhIMOpY2hvdcOpZSDDoCBjYXVzZSBkZSBtb2RpZmljYXRpb25zIGxvY2FsZXMgZHUgZmljaGllciAnJXMnLlxuIgorIlZldWlsbGV6IGNvbW1pdGVyLCByw6lpbml0aWFsaXNlciBvdSBzdGFzaGVyIHZvcyBjaGFuZ2VtZW50cyBldCBlc3NheWVyIGRlIG5vdXZlYXUuIgorCisjOiBnaXRrOjk1ODMKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJMZSBwaWNvcmFnZSAoY2hlcnJ5LXBpY2spIGEgw6ljaG91w6llIMOgIGNhdXNlIGQndW4gY29uZmxpdCBsb3JzIGQndW5lIGZ1c2lvbi5cbiIKKyJTb3VoYWl0ZXotdm91cyBleMOpY3V0ZXIgZ2l0IGNpdG9vbCBwb3VyIGxlIHLDqXNvdWRyZSA/IgorCisjOiBnaXRrOjk1OTkgZ2l0azo5NjU3Cittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgIkF1Y3VuZSBtb2RpZmljYXRpb24gdmFsaWTDqWUiCisKKyM6IGdpdGs6OTYyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBub3QgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZXZlcnQgaXQ/IgorbXNnc3RyICJMZSBDb21taXQgJXMgbidlc3QgcGFzIGluY2x1cyBkYW5zIGxhIGJyYW5jaGUgJXMgLS0gbGUgZMOpZmFpcmUgbWFsZ3LDqSB0b3V0PyIKKworIzogZ2l0azo5NjMxCittc2dpZCAiUmV2ZXJ0aW5nIgorbXNnc3RyICJDb21taXQgZMOpZmFpdCIKKworIzogZ2l0azo5NjM5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKKyJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIsOJY2hlYyBlbiB0ZW50YW50IGRlIGTDqWZhaXJlIGxlIGNvbW1pdCDDoCBjYXVzZSBkZSBtb2RpZmljYXRpb25zIGxvY2FsZXMgZGVzIGZpY2hpZXJzwqA6ICVzLiBWZXVpbGxleiB2YWxpZGVyLCByw6lpbml0aWFsaXNlciBvdSByZW1pc2VyIHZvcyBtb2RpZmljYXRpb25zIGV0IGVzc2F5ZXIgZGUgbm91dmVhdS4iCisKKyM6IGdpdGs6OTY0MworbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiw4ljaGVjIGVuIHRlbnRhbnQgZGUgZMOpZmFpcmUgw6AgY2F1c2UgZCd1biBjb25mbGl0IGRlIGZ1c2lvbi5cbiIKKyJTb3VoYWl0ZXotdm91cyBleMOpY3V0ZXIgZ2l0IGNpdG9vbCBwb3VyIGxlIHLDqXNvdWRyZSA/IgorCisjOiBnaXRrOjk2ODYKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJDb25maXJtZXIgbGEgcsOpaW5pdGlhbGlzYXRpb24iCisKKyM6IGdpdGs6OTY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIlLDqWluaXRpYWxpc2VyIGxhIGJyYW5jaGUgJXMgw6AgJXM/IgorCisjOiBnaXRrOjk2OTAKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiVHlwZSBkZSByw6lpbml0aWFsaXNhdGlvbiA6IgorCisjOiBnaXRrOjk2OTMKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiRG91Y2UgOiBMYWlzc2UgbGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBldCBsJ2luZGV4IGludGFjdHMiCisKKyM6IGdpdGs6OTY5NgorbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiIgorIkh5YnJpZGUgOiBMYWlzc2UgbGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBkYW5zIHNvbiDDqXRhdCBjb3VyYW50LCAiCisicsOpaW5pdGlhbGlzZSBsJ2luZGV4IgorCisjOiBnaXRrOjk2OTkKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkR1cmUgOiBSw6lpbml0aWFsaXNlIGxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwgZXQgbCdpbmRleFxuIgorIihhYmFuZG9ubmUgVE9VVEVTIGxlcyBtb2RpZmljYXRpb25zIGxvY2FsZSkiCisKKyM6IGdpdGs6OTcxNgorbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAiUsOpaW5pdGlhbGlzYXRpb24iCisKKyMgRml4bWU6IFLDqWN1cMOpcmF0aW9uIGVzdC1pbCB2cmFpbWVudCB1bmUgbWF1dmFpc2UgdHJhZHVjdGlvbj8KKyM6IGdpdGs6OTc3NgorbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAiRXh0cmFjdGlvbiIKKworIzogZ2l0azo5ODI5Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbGEgYnJhbmNoZSBleHRyYWl0ZSIKKworIzogZ2l0azo5ODM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJMZXMgY29tbWl0cyBkZSBsYSBicmFuY2hlICVzIG5lIHNvbnQgZGFucyBhdWN1bmUgYXV0cmUgYnJhbmNoZS5cbiIKKyJWb3VsZXotdm91cyB2cmFpbWVudCBzdXBwcmltZXIgY2V0dGUgYnJhbmNoZSAlcyA/IgorCisjOiBnaXRrOjk4NjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCittc2dzdHIgIsOJdGlxdWV0dGVzIGV0IGhlYWRzIDogJXMiCisKKyM6IGdpdGs6OTg4MworbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdHJlciIKKworIzogZ2l0azoxMDE3OQorbXNnaWQgIiIKKyJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKKyJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKK21zZ3N0ciAiIgorIkVycmV1ciDDoCBsYSBsZWN0dXJlIGRlcyBpbmZvcm1hdGlvbnMgc3VyIGxhIHRvcG9sb2dpZSBkZXMgY29tbWl0cywgbGVzICIKKyJpbmZvcm1hdGlvbnMgc3VyIGxlcyBicmFuY2hlcyBldCBsZXMgdGFncyBwcsOpY8OpZGVudHMvc3VpdmFudHMgc2Vyb250ICIKKyJpbmNvbXBsw6h0ZXMuIgorCisjOiBnaXRrOjExMTU2Cittc2dpZCAiVGFnIgorbXNnc3RyICLDiXRpcXVldHRlIgorCisjOiBnaXRrOjExMTYwCittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjExMjQzCittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIlPDqWxlY3RldXIgZGUgcG9saWNlIGRlIEdpdGsiCisKKyM6IGdpdGs6MTEyNjAKK21zZ2lkICJCIgorbXNnc3RyICJCIgorCisjOiBnaXRrOjExMjYzCittc2dpZCAiSSIKK21zZ3N0ciAiSSIKKworIzogZ2l0azoxMTM4MQorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBkJ2FmZmljaGFnZSBkZSBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azoxMTM4NAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKK21zZ3N0ciAiTG9uZ3VldXIgbWF4aW11bSBkdSBncmFwaGUgKGxpZ25lcykiCisKKyMgRklYTUUgOiBUcmFkdWN0aW9uIHN0YW5kYXJkIGRlICJwYW5lIj8KKyM6IGdpdGs6MTEzODgKKyMsIG5vLXRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICJMYXJnZXVyIG1heGltdW0gZHUgZ3JhcGhlICglIGR1IHBhbm5lYXUpIgorCisjOiBnaXRrOjExMzkxCittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJNb250cmVyIGxlcyBtb2RpZmljYXRpb25zIGxvY2FsZXMiCisKKyM6IGdpdGs6MTEzOTQKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgorbXNnc3RyICJTw6lsZWN0aW9uIGF1dG8uIGR1IFNIQTEgKGxvbmd1ZXVyKSIKKworIzogZ2l0azoxMTM5OAorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgIkNhY2hlciBsZXMgcmVmcyBkaXN0YW50ZXMiCisKKyM6IGdpdGs6MTE0MDIKK21zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBkJ2FmZmljaGFnZSBkZXMgZGlmZiIKKworIzogZ2l0azoxMTQwNAorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJUYWlsbGUgZGVzIHRhYnVsYXRpb25zIgorCisjOiBnaXRrOjExNDA3Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIHRhZ3MgbGVzIHBsdXMgcHJvY2hlcyIKKworIzogZ2l0azoxMTQxMAorbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCittc2dzdHIgIk5vbWJyZSBtYXhpbXVtIGQnw6l0aXF1ZXR0ZXMvaGVhZHMgw6AgYWZmaWNoZXIiCisKKyM6IGdpdGs6MTE0MTMKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIkxpbWl0ZXIgbGVzIGRpZmbDqXJlbmNlcyBhdXggY2hlbWlucyBsaXN0w6lzIgorCisjOiBnaXRrOjExNDE2Cittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIlN1cHBvcnQgcG91ciB1biBlbmNvZGFnZSBkZXMgY2FyYWN0w6hyZXMgcGFyIGZpY2hpZXIiCisKKyM6IGdpdGs6MTE0MjIgZ2l0azoxMTU2OQorbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAiT3V0aWwgZGlmZiBleHRlcm5lIgorCisjOiBnaXRrOjExNDIzCittc2dpZCAiQ2hvb3NlLi4uIgorbXNnc3RyICJDaG9pc2lyLi4uIgorCisjOiBnaXRrOjExNDI4Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJPcHRpb25zIGfDqW7DqXJhbGVzIgorCisjOiBnaXRrOjExNDMxCittc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgorbXNnc3RyICJVdGlsaXNlciBkZXMgd2lkZ2V0cyBlbiB0aMOobWUiCisKKyM6IGdpdGs6MTE0MzMKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIobGEgbW9kaWZpY2F0aW9uIG7DqWNlc3NpdGUgdW4gcmVkw6ltYXJyYWdlKSIKKworIzogZ2l0azoxMTQzNQorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIobm9uIGRpc3BvbmlibGUgYWN0dWVsbGVtZW50KSIKKworIzogZ2l0azoxMTQ0NgorbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJDb3VsZXVycyA6IGNsaXF1ZXIgcG91ciBjaG9pc2lyIgorCisjOiBnaXRrOjExNDQ5Cittc2dpZCAiSW50ZXJmYWNlIgorbXNnc3RyICJJbnRlcmZhY2UiCisKKyM6IGdpdGs6MTE0NTAKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgImludGVyZmFjZSIKKworIzogZ2l0azoxMTQ1MworbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgIkFycmnDqHJlLXBsYW4iCisKKyM6IGdpdGs6MTE0NTQgZ2l0azoxMTQ4NAorbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgImFycmnDqHJlLXBsYW4iCisKKyM6IGdpdGs6MTE0NTcKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICJQcmVtaWVyIHBsYW4iCisKKyM6IGdpdGs6MTE0NTgKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICJwcmVtaWVyIHBsYW4iCisKKyM6IGdpdGs6MTE0NjEKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIkRpZmYgOiBhbmNpZW5uZXMgbGlnbmVzIgorCisjOiBnaXRrOjExNDYyCittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgImRpZmYgYW5jaWVubmVzIGxpZ25lcyIKKworIzogZ2l0azoxMTQ2NgorbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKK21zZ3N0ciAiRGlmZiA6IG5vdXZlbGxlcyBsaWduZXMiCisKKyM6IGdpdGs6MTE0NjcKK21zZ2lkICJkaWZmIG5ldyBsaW5lcyIKK21zZ3N0ciAiZGlmZiBub3V2ZWxsZXMgbGlnbmVzIgorCisjOiBnaXRrOjExNDcxCittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIkRpZmYgOiBlbnTDqnRlIGR1IGh1bmsiCisKKyM6IGdpdGs6MTE0NzMKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJkaWZmIDogZW50w6p0ZSBkdSBodW5rIgorCisjOiBnaXRrOjExNDc3Cittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIkZvbmQgZGUgbGEgbGlnbmUgbWFycXXDqWUiCisKKyM6IGdpdGs6MTE0NzkKK21zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgorbXNnc3RyICJGb25kIGRlIGxhIGxpZ25lIG1hcnF1w6llIgorCisjOiBnaXRrOjExNDgzCittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICJTw6lsZWN0aW9ubmVyIGxlIGZvbmQiCisKKyM6IGdpdGs6MTE0OTIKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJQb2xpY2VzIDogY2xpcXVlciBwb3VyIGNob2lzaXIiCisKKyM6IGdpdGs6MTE0OTQKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIlBvbGljZSBwcmluY2lwYWxlIgorCisjOiBnaXRrOjExNDk1Cittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIlBvbGljZSBkJ2FmZmljaGFnZSBkZXMgZGlmZiIKKworIzogZ2l0azoxMTQ5NgorbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIlBvbGljZSBkZSBsJ2ludGVyZmFjZSB1dGlsaXNhdGV1ciIKKworIzogZ2l0azoxMTUxOAorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIlByw6lmw6lyZW5jZXMgZGUgR2l0ayIKKworIzogZ2l0azoxMTUyNworbXNnaWQgIkdlbmVyYWwiCittc2dzdHIgIkfDqW7DqXJhbCIKKworIzogZ2l0azoxMTUyOAorbXNnaWQgIkNvbG9ycyIKK21zZ3N0ciAiQ291bGV1cnMiCisKKyM6IGdpdGs6MTE1MjkKK21zZ2lkICJGb250cyIKK21zZ3N0ciAiUG9saWNlcyIKKworIzogZ2l0azoxMTU3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGsgOiBjaG9pc2lyIGxhIGNvdWxldXIgZGUgJXMiCisKKyM6IGdpdGs6MTIwOTIKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyJEw6lzb2zDqSwgZ2l0ayBuZSBwZXV0IMOqdHJlIGV4w6ljdXTDqSBhdmVjIGNldHRlIHZlcnNpb24gZGUgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpZXJ0IFRjbC9UayB2ZXJzaW9uIDguNCBvdSBzdXDDqXJpZXVyLiIKKworIzogZ2l0azoxMjMwMgorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciB1biBkw6lww7R0IGdpdCBpY2kuIgorCisjOiBnaXRrOjEyMzQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICJBcmd1bWVudCAnJXMnIGFtYmlndSA6IMOgIGxhIGZvaXMgdW5lIHLDqXZpc2lvbiBldCB1biBub20gZGUgZmljaGllciIKKworIzogZ2l0azoxMjM2MQorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIkFyZ3VtZW50cyBpbnZhbGlkZXMgcG91ciBnaXRrIDoiCisKKyN+IG1zZ2lkICJTSEExIElEOiAiCisjfiBtc2dzdHIgIklEIFNIQTEgOiIKKworI34gbXNnaWQgIm5leHQiCisjfiBtc2dzdHIgInN1aXZhbnQiCisKKyN+IG1zZ2lkICJwcmV2IgorI34gbXNnc3RyICJwcsOpY8OpZGVudCIKKworI34gbXNnaWQgIkNEYXRlIgorI34gbXNnc3RyICJDRGF0ZSIKKworI34gbXNnaWQgIi0gc3RvcHBpbmdcbiIKKyN+IG1zZ3N0ciAiLSBhcnLDqnQgZW4gY291cnNcbiIKKworI34gbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCisjfiBtc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBsZSByw6lwZXJ0b2lyZSBnaXQgXCIlc1wiLiIKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL2h1LnBvIGIvZ2l0ay1naXQvcG8vaHUucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllYzVhNQotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L3BvL2h1LnBvCkBAIC0wLDAgKzEsMTQxOSBAQAorIyBUcmFuc2xhdGlvbiBvZiBnaXRrIHRvIEh1bmdhcmlhbi4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IFBhdWwgTWFja2VycmFzLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIworIyBMYXN6bG8gUGFwcCA8bGFzemxvLnBhcHBAYXJodW5nYXJ5Lmh1PiwgMjAwOS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWlcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMTQ6MzIrMTAwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMTItMTQgMTQ6MDQrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTGFzemxvIFBhcHAgPGRqc3phcGlAYXJjaGxpbnV4LnVzPlxuIgorIkxhbmd1YWdlLVRlYW06IEh1bmdhcmlhblxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0azoxNDAKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIk5lbSBzaWtlcsO8bHQgbGV0w7ZsdGVuaSBheiB1bm1lcmdlZCBmw6FqbCBsaXN0w6F0OiIKKworIzogZ2l0azoyMTIgZ2l0azoyMzgxCittc2dpZCAiQ29sb3Igd29yZHMiCittc2dzdHIgIiIKKworIzogZ2l0azoyMTcgZ2l0azoyMzgxIGdpdGs6ODIyMCBnaXRrOjgyNTMKK21zZ2lkICJNYXJrdXAgd29yZHMiCittc2dzdHIgIiIKKworIzogZ2l0azozMjQKK21zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IMOpcnRlbG1lesOpcyBrw7Z6YmVuOiIKKworIzogZ2l0azozODAKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIHbDqWdyZWhhanTDoXNrb3IgLS1hcmdzY21kIHBhcmFuY3M6IgorCisjOiBnaXRrOjM5MworbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorIk5pbmNzZW4gZsOhamwga2l2w6FsYXN6dHZhOiAtLW1lcmdlIG1lZ2FkdmUsIGRlIGVneWV0bGVuIGbDoWpsIHNlbSB1bm1lcmdlZC4iCisKKyM6IGdpdGs6Mzk2Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgIiIKKyJOaW5jc2VuIGbDoWpsIGtpdsOhbGFzenR2YTogLS1tZXJnZSBtZWdhZHZhLCBkZSBuaW5jc2VuZWsgdW5tZXJnZWQgZsOhamxvayBhICIKKyJmw6FqbG9uIGJlbMO8bCBsaW1pdC4iCisKKyM6IGdpdGs6NDE4IGdpdGs6NTY2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIGdpdCBsb2cgdsOpZ3JlaGFqdMOhc2Ega8O2emJlbjoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAiT2x2YXPDoXMiCisKKyM6IGdpdGs6NDk2IGdpdGs6NDUyNQorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAiQ29tbWl0b2sgb2x2YXPDoXNhIC4uLiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOAorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIk5pbmNzZW4gY29tbWl0IGtpdsOhbGFzenR2YSIKKworIzogZ2l0azoxNDQ1IGdpdGs6NDA0NSBnaXRrOjEyNDMyCittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICJQYXJhbmNzIHNvciIKKworIzogZ2l0azoxNTExCittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJOZW0gbGVoZXQgw6lydGVsbWV6bmkgYSBnaXQgbG9nIGtpbWVuZXTDqXQ6IgorCisjOiBnaXRrOjE3NDAKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJOaW5jc2VuIGVsw6lyaGV0xZEgY29tbWl0IGluZm9ybcOhY2nDsyIKKworIzogZ2l0azoxOTAzIGdpdGs6MTkzMiBnaXRrOjQzMTUgZ2l0azo5NjY5IGdpdGs6MTEyNDEgZ2l0azoxMTUyMQorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogZ2l0azoxOTM0IGdpdGs6NDMxNyBnaXRrOjkxOTYgZ2l0azo5Mjc1IGdpdGs6OTM5MSBnaXRrOjk0NDAgZ2l0azo5NjcxCisjOiBnaXRrOjExMjQyIGdpdGs6MTE1MjIKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIlZpc3N6YXZvbsOhcyIKKworIzogZ2l0azoyMDY5Cittc2dpZCAiJlVwZGF0ZSIKK21zZ3N0ciAiRnJpc3NpdMOpcyIKKworIzogZ2l0azoyMDcwCittc2dpZCAiJlJlbG9hZCIKK21zZ3N0ciAiw5pqcmF0w7ZsdMOpcyIKKworIzogZ2l0azoyMDcxCittc2dpZCAiUmVyZWFkIHJlJmZlcmVuY2VzIgorbXNnc3RyICJSZWZlcmVuY2nDoWsgw7pqcmFvbHZhc8Ohc2EiCisKKyM6IGdpdGs6MjA3MgorbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIlJlZmVyZW5jacOhayBsaXN0w6F6w6FzYSIKKworIzogZ2l0azoyMDc0Cittc2dpZCAiU3RhcnQgZ2l0ICZndWkiCittc2dzdHIgIkdpdCBndWkgaW5kw610w6FzYSIKKworIzogZ2l0azoyMDc2Cittc2dpZCAiJlF1aXQiCittc2dzdHIgIktpbMOpcMOpcyIKKworIzogZ2l0azoyMDY4Cittc2dpZCAiJkZpbGUiCittc2dzdHIgIkbDoWpsIgorCisjOiBnaXRrOjIwODAKK21zZ2lkICImUHJlZmVyZW5jZXMiCittc2dzdHIgIkJlw6FsbMOtdMOhc29rIgorCisjOiBnaXRrOjIwNzkKK21zZ2lkICImRWRpdCIKK21zZ3N0ciAiU3plcmtlc3p0w6lzIgorCisjOiBnaXRrOjIwODQKK21zZ2lkICImTmV3IHZpZXcuLi4iCittc2dzdHIgIsOaaiBuw6l6ZXQgLi4uIgorCisjOiBnaXRrOjIwODUKK21zZ2lkICImRWRpdCB2aWV3Li4uIgorbXNnc3RyICJOw6l6ZXQgc3plcmtlc3p0w6lzZSAuLi4iCisKKyM6IGdpdGs6MjA4NgorbXNnaWQgIiZEZWxldGUgdmlldyIKK21zZ3N0ciAiTsOpemV0IHTDtnJsw6lzZSIKKworIzogZ2l0azoyMDg4IGdpdGs6NDA0MworbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgIk1pbmRlbiBmw6FqbCIKKworIzogZ2l0azoyMDgzIGdpdGs6NDA2NworbXNnaWQgIiZWaWV3IgorbXNnc3RyICJOw6l6ZXQiCisKKyM6IGdpdGs6MjA5MyBnaXRrOjIxMDMgZ2l0azozMDEyCittc2dpZCAiJkFib3V0IGdpdGsiCittc2dzdHIgIkdpdGsgbsOpdmplZ3kiCisKKyM6IGdpdGs6MjA5NCBnaXRrOjIxMDgKK21zZ2lkICImS2V5IGJpbmRpbmdzIgorbXNnc3RyICJCaWxsZW50ecWxa29tYmluw6FjacOzIgorCisjOiBnaXRrOjIwOTIgZ2l0azoyMTA3Cittc2dpZCAiJkhlbHAiCittc2dzdHIgIlNlZ8OtdHPDqWciCisKKyM6IGdpdGs6MjE4NSBnaXRrOjg2NTIKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMSBJRDoiCisKKyM6IGdpdGs6MjIyOQorbXNnaWQgIlJvdyIKK21zZ3N0ciAiU29yIgorCisjOiBnaXRrOjIyNjcKK21zZ2lkICJGaW5kIgorbXNnc3RyICJLZXJlc8OpcyIKKworIzogZ2l0azoyMjk1Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICJjb21taXQiCisKKyM6IGdpdGs6MjI5OSBnaXRrOjIzMDEgZ2l0azo0Njg3IGdpdGs6NDcxMCBnaXRrOjQ3MzQgZ2l0azo2NzU1IGdpdGs6NjgyNworIzogZ2l0azo2OTEyCittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgInRhcnRhbG1hesOhczoiCisKKyM6IGdpdGs6MjMwMiBnaXRrOjM1MjYgZ2l0azozNTMxIGdpdGs6NDc2MworbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAiw6lyaW50ZW5kxZEgw7p0dm9uYWxhazoiCisKKyM6IGdpdGs6MjMwMyBnaXRrOjQ3NzcKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAic3RyaW5nIGhvenrDoWFkw6FzYS90w7ZybMOpc2U6IgorCisjOiBnaXRrOjIzMDQgZ2l0azo0Nzc5Cittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzY2Cittc2dpZCAiRXhhY3QiCittc2dzdHIgIlBvbnRvcyIKKworIzogZ2l0azoyMzE1IGdpdGs6NDg1NCBnaXRrOjY3MjMKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICJLaXMvbmFneSBiZXTFsSBuZW0gc3rDoW3DrXQiCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ3MzYgZ2l0azo0ODUyIGdpdGs6NjcxOQorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiUmVnZXhwIgorCisjOiBnaXRrOjIzMTcgZ2l0azoyMzE4IGdpdGs6NDg3NCBnaXRrOjQ5MDQgZ2l0azo0OTExIGdpdGs6Njg0OCBnaXRrOjY5MTYKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJNaW5kZW4gbWV6xZEiCisKKyM6IGdpdGs6MjMxOCBnaXRrOjQ4NzEgZ2l0azo0OTA0IGdpdGs6Njc4NgorbXNnaWQgIkhlYWRsaW5lIgorbXNnc3RyICJGxZFjw61tIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjY5MTYgZ2l0azo3Mzg5Cittc2dpZCAiQ29tbWVudHMiCittc2dzdHIgIk1lZ2plZ3l6w6lzZWsiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo0ODc2IGdpdGs6NDkxMSBnaXRrOjY3ODYgZ2l0azo3MzI0IGdpdGs6ODgzMAorIzogZ2l0azo4ODQ1Cittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJTemVyesWRIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjczMjYKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIkNvbW1pdG9sw7MiCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiS2VyZXPDqXMiCisKKyM6IGdpdGs6MjM1OAorbXNnaWQgIkRpZmYiCittc2dzdHIgIkRpZmYiCisKKyM6IGdpdGs6MjM2MAorbXNnaWQgIk9sZCB2ZXJzaW9uIgorbXNnc3RyICJSw6lnaSB2ZXJ6acOzIgorCisjOiBnaXRrOjIzNjIKK21zZ2lkICJOZXcgdmVyc2lvbiIKK21zZ3N0ciAiw5pqIHZlcnppw7MiCisKKyM6IGdpdGs6MjM2NAorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIlRhcnRhbG1pIHNvcm9rIgorCisjOiBnaXRrOjIzNzQKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICJTcGFjZSB2w6FsdMOhcyBtZWxsxZF6w6lzZSIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjQ0NQorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJQYXRjaCIKKworIzogZ2l0azoyNDQ3Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAiVHJlZSIKKworIzogZ2l0azoyNjE3IGdpdGs6MjYzNworbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiRGlmZiBlemVrZXQgLT4ga2l2w6FsYXN6dG90dCIKKworIzogZ2l0azoyNjE4IGdpdGs6MjYzOAorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZiBraXbDoWxhc3p0b3R0YWthdCAtPiBlenQiCisKKyM6IGdpdGs6MjYxOSBnaXRrOjI2MzkKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICJQYXRjaCBrw6lzesOtdMOpc2UiCisKKyM6IGdpdGs6MjYyMCBnaXRrOjkyNTQKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICJUYWcga8Opc3rDrXTDqXNlIgorCisjOiBnaXRrOjI2MjEgZ2l0azo5MzcxCittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIkNvbW1pdCBmw6FsamJhIMOtcsOhc2EiCisKKyM6IGdpdGs6MjYyMiBnaXRrOjk0MjgKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiw5pqIGJyYW5jaCBrw6lzesOtdMOpc2UiCisKKyM6IGdpdGs6MjYyMworbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJDaGVycnktcGljayBlcnJlIGEgY29tbWl0cmEiCisKKyM6IGdpdGs6MjYyNAorbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIkhFQUQgYnJhbmNoIMO6anJhaW5kw610w6FzYSBpZGUiCisKKyM6IGdpdGs6MjYyNQorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIkV6ZW4gY29tbWl0IG1lZ2plbMO2bMOpc2UiCisKKyM6IGdpdGs6MjYyNgorbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICJWaXNzemF0w6lyw6lzIGEgbWVnamVsw7Zsw6lzaGV6IgorCisjOiBnaXRrOjI2MjcKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAiVGFsw6FsZCBtZWcgZXplbiB1dMOzZG9rYXQgw6lzIGplbMO2bGQgbWVnIgorCisjOiBnaXRrOjI2MjgKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiw5Zzc3plaGFzb25sw610w6FzIGEgbWVnamVsw7ZsdCBjb21taXQtdGFsIgorCisjOiBnaXRrOjI2MjkgZ2l0azoyNjQwCisjLCBmdXp6eQorbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJEaWZmIGV6ZWtldCAtPiBraXbDoWxhc3p0b3R0IgorCisjOiBnaXRrOjI2MzAgZ2l0azoyNjQxCisjLCBmdXp6eQorbXNnaWQgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIgorbXNnc3RyICJEaWZmIGtpdsOhbGFzenRvdHRha2F0IC0+IGV6dCIKKworIzogZ2l0azoyNjMxCisjLCBmdXp6eQorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiRXplbiBjb21taXQgbWVnamVsw7Zsw6lzZSIKKworIzogZ2l0azoyNjQ3Cittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICJDaGVjayBvdXQgZXp0IGEgYnJhbmNob3QiCisKKyM6IGdpdGs6MjY0OAorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiVMO2csO2bGQgZXp0IGEgYnJhbmNoLW90IgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjY1NgorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiRW1lbGQga2kgZXp0IGlzIgorCisjOiBnaXRrOjI2NTcKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICJDc2FrIGV6dCBlbWVsZCBraSIKKworIzogZ2l0azoyNjU4Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAiS8O8bHPFkSBkaWZmIgorCisjOiBnaXRrOjI2NTkKK21zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgorbXNnc3RyICJCbGFtZSBzesO8bMWRIGtvbW1pdHJhIgorCisjOiBnaXRrOjI2NjAKK21zZ2lkICJDb3B5IHBhdGgiCittc2dzdHIgIiIKKworIzogZ2l0azoyNjY3Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICJNdXRhc2QgbWVnIGVubmVrIGEgc29ybmFrIGF6IGVyZWRldMOpdCIKKworIzogZ2l0azoyNjY4Cittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICJGdXR0YXNkIGEgZ2l0IGd1aSBibGFtZS10IGV6ZW4gYSBzb3JvbiIKKworIzogZ2l0azozMDE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSBjb21taXQgbsOpemVnZXTFkSBhIGdpdGhlelxuIgorIlxuIgorIlN6ZXJ6xZFpIGpvZyBcXHUwMGE5IDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIkhhc3puw6FsZCDDqXMgdGVyamVzemQgYSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmZWx0w6l0ZWxlaSBtZWxsZXR0IgorCisjOiBnaXRrOjMwMjIgZ2l0azozMDg5IGdpdGs6OTg1NworbXNnaWQgIkNsb3NlIgorbXNnc3RyICJCZXrDoXLDoXMiCisKKyM6IGdpdGs6MzA0MworbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgorbXNnc3RyICJHaXRrLWJpbGxlbnR5xbEgaG96esOhcmVuZGVsw6lzIgorCisjOiBnaXRrOjMwNDYKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIkdpdGstYmlsbGVudHnFsSBob3p6YcOhcmVuZGVsw6lzOiIKKworIzogZ2l0azozMDQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVE+XHRcdFF1aXQiCittc2dzdHIgIjwlcy1RPlx0XHRLaWzDqXDDqXMiCisKKyM6IGdpdGs6MzA0OQorIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgorbXNnc3RyICI8JXMtRj5cdFx0S2VyZXPDqXMiCisKKyM6IGdpdGs6MzA1MAorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPFBvczE+XHRcdEVsc8WRIGNvbW1pdGhveiIKKworIzogZ2l0azozMDUxCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZGU+XHRcdFV0b2xzw7MgY29tbWl0aG96IgorCisjOiBnaXRrOjMwNTIKKyMsIGZ1enp5Cittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8SG9jaD4sIHAsIGlcdEVneSBjb21taXR0YWwgZmVsamViYiIKKworIzogZ2l0azozMDUzCisjLCBmdXp6eQorbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxSdW50ZXI+LCBuLCBrXHRFZ3kgY29tbWl0dGFsIGxlamplYmIiCisKKyM6IGdpdGs6MzA1NAorIywgZnV6enkKK21zZ2lkICI8TGVmdD4sIHosIGhcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8TGlua3M+LCB6LCBqXHRWaXNzemEgYSBoaXN0b3J5IGxpc3TDoWJhIgorCisjOiBnaXRrOjMwNTUKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPFJlY2h0cz4sIHgsIGxcdEVsxZFyZSBhIGhpc3RvcnkgbGlzdMOhYmEiCisKKyM6IGdpdGs6MzA1NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MzA1NworbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8QmlsZEhvY2g+XHRFZ3kgbGFwcGFsIGZlbGplYmIgYSBjb21taXQgbGlzdMOhYmEiCisKKyM6IGdpdGs6MzA1OAorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPEJpbGRSdW50ZXI+XHRFZ3kgbGFwcGFsIGxlamplYmIgYSBjb21taXQgbGlzdMOhYmEiCisKKyM6IGdpdGs6MzA1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLVBvczE+XHRHw7ZyZ2V0w6lzIGEgY29tbWl0IGxpc3RhIHRldGVqw6loZXoiCisKKyM6IGdpdGs6MzA2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kZT5cdEfDtnJnZXTDqXMgYSBjb21taXQgbGlzdGEgYWxqw6Fob3oiCisKKyM6IGdpdGs6MzA2MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLUhvY2g+XHRFZ3kgc29ycmFsIGZlbGplYmIgZ8O2cmdldMOpcyBhIGNvbW1pdCBsaXN0w6FiYW4iCisKKyM6IGdpdGs6MzA2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1SdW50ZXI+XHRFZ3kgc29ycmFsIGxlamplYmIgZ8O2cmdldMOpcyBhIGNvbW1pdCBsaXN0w6FiYW4iCisKKyM6IGdpdGs6MzA2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1CaWxkSG9jaD5cdEVneSBsYXBwYWwgZmVsamViYiBnw7ZyZ2V0w6lzIGEgY29tbWl0IGxpc3TDoWJhbiIKKworIzogZ2l0azozMDY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1CaWxkUnVudGVyPlx0RWd5IHNvcnJhbCBsZWpqZWJiIGfDtnJnZXTDqXMgYSBjb21taXQgbGlzdMOhYmFuIgorCisjOiBnaXRrOjMwNjUKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxVbXNjaGFsdC1Ib2NoPlx0S2VyZXPDqXMgdmlzc3phZmVsZSAoZmVsZmVsZSwgdXRvbHPDsyBjb21taXRvaykiCisKKyM6IGdpdGs6MzA2NgorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICI8VW1zY2hhbHQtUnVudGVyPlx0S2VyZXPDqXMgZWzFkXJlIChsZWZlbMOpOyBrb3LDoWJiaSBjb21taXRvaykiCisKKyM6IGdpdGs6MzA2NworbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RW50Zj4sIGJcdFx0RWd5IGxhcHBhbCBmZWxqZWJiIGfDtnJnZXTDqXMgYSBkaWZmIG7DqXpldGJlbiIKKworIzogZ2l0azozMDY4Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxMw7ZzY2h0YXN0ZT5cdEVneSBsYXBwYWwgZmVsamViYiBnw7ZyZ2V0w6lzIGEgZGlmZiBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6MzA2OQorbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8TGVlcnRhc3RlPlx0RWd5IGxhcHBhbCBsZWpqZWJiIGfDtnJnZXTDqXMgYSBkaWZmIG7DqXpldGJlbiIKKworIzogZ2l0azozMDcwCittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdDE4IHNvcnJhbCBmZWxmZWzDqSBnw7ZyZ2V0w6lzIGRpZmYgbsOpemV0YmVuIgorCisjOiBnaXRrOjMwNzEKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHQxOCBzb3JyYWwgbGVqamViYiBnw7ZyZ2V0w6lzIGEgZGlmZiBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6MzA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx0S2VyZXPDqXMiCisKKyM6IGdpdGs6MzA3MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHRLw7Z2ZXRrZXrFkSB0YWzDoWxhdGhveiIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPEVpbmdhYmV0YXN0ZT5cdEvDtnZldGtlesWRIHRhbMOhbGF0aG96IgorCisjOiBnaXRrOjMwNzUKKyMsIGZ1enp5Cittc2dpZCAiZ1x0XHRHbyB0byBjb21taXQiCittc2dzdHIgIjxFbmRlPlx0XHRVdG9sc8OzIGNvbW1pdGhveiIKKworIzogZ2l0azozMDc2Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRMw6lwaiBhIGtlcmVzw6lzaSBtZXrFkXJlIgorCisjOiBnaXRrOjMwNzcKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx0RWzFkXrFkSB0YWzDoWxhdGhveiIKKworIzogZ2l0azozMDc4Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHRLw7Z2ZXRrZXrFkSBmw6FqbHJhIGfDtnJnZXTDqXMgZGlmZiBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6MzA3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdEvDtnZldGtlesWRIHRhbMOhbGF0cmEga2VyZXPDqXMgZGlmZiBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6MzA4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRFbMWResWRIHRhbMOhbGF0cmEga2VyZXPDqXMgZGlmZiBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6MzA4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1OdW1tZXJibG9jay1QbHVzPlx0QmV0xbFtw6lyZXQgbsO2dmVsw6lzZSIKKworIzogZ2l0azozMDgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1QbHVzPlx0QmV0xbFtw6lyZXQgbsO2dmVsw6lzZSIKKworIzogZ2l0azozMDgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLU51bW1lcm5ibG9jay1NaW51cz4gQmV0xbFtw6lyZXQgY3PDtmtrZW50w6lzZSIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTWludXM+XHRCZXTFsW3DqXJldCBjc8O2a2tlbnTDqXNlIgorCisjOiBnaXRrOjMwODUKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHRGcmlzc8OtdMOpcyIKKworIzogZ2l0azozNTUwIGdpdGs6MzU1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBheiBpZGVpZ2xlbmVzIGvDtm55dnTDoXIgbMOpdHJlaG96w6FzYSBrw7Z6YmVuICVzOiIKKworIzogZ2l0azozNTcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IFwiJXNcIiBsZXTDtmx0w6lzZSBrw7Z6YmVuICVzLXLFkWw6IgorCisjOiBnaXRrOjM2MzUKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgInBhcmFuY3MgaGliYToiCisKKyM6IGdpdGs6Mzc4NAorbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICJOaW5jcyBpbHllbiBjb21taXQiCisKKyM6IGdpdGs6Mzc5OAorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZTogcGFyYW5jcyBoaWJhOiIKKworIzogZ2l0azozODI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBhIE1lcmdlIGhlYWQgb2x2YXPDoXNhOiAlcyIKKworIzogZ2l0azozODM3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IGF6IGluZGV4IG9sdmFzw6FzYSBrw7Z6YmVuOiAlcyIKKworIzogZ2l0azozODYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBhIGdpdCBibGFtZSBpbmTDrXTDoXNhOiAlcyIKKworIzogZ2l0azozODY1IGdpdGs6Njc1NAorbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAiS2VyZXPDqXMiCisKKyM6IGdpdGs6Mzg5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYSBnaXQgYmxhbWUgZnV0dGF0w6FzYSBrw7Z6YmVuOiAlcyIKKworIzogZ2l0azozOTI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAiIgorIkEgJXMgY29tbWl0YsOzbCBzesOhcm1hemlrIGF6IGEgc29yLCBhbWVseWlrIG5lbSB0YWzDoWxoYXTDsyBlYmJlbiBhIG7DqXpldGJlbiIKKworIzogZ2l0azozOTM5Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAiS8O8bHPFkSBkaWZmIG7DqXplZ2V0xZEgaGliYToiCisKKyM6IGdpdGs6NDA3MAorbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICJHaXRrIG7DqXpldCBtZWdoYXTDoXJvesOhc2EiCisKKyM6IGdpdGs6NDA3NAorbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAiTWFyYWRqIGVubsOpbCBhIG7DqXpldG7DqWwiCisKKyM6IGdpdGs6NDA3NQorbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCittc2dzdHIgIlJlZmVyZW5jacOhayAoc3rDs2vDtnp6ZWwgdGFnb2x0IGxpc3RhIgorCisjOiBnaXRrOjQwNzYKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJCcmFuY2gtZWsgJiB0YWdlazoiCisKKyM6IGdpdGs6NDA3NworbXNnaWQgIkFsbCByZWZzIgorbXNnc3RyICJNaW5kZW4gcmVmIgorCisjOiBnaXRrOjQwNzgKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAiTWluZGVuIChoZWx5aSkgYnJhbmNoIgorCisjOiBnaXRrOjQwNzkKK21zZ2lkICJBbGwgdGFncyIKK21zZ3N0ciAiTWluZGVuIHRhZyIKKworIzogZ2l0azo0MDgwCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiTWluZGVuIHTDoXZvbGkga8O2dmV0xZEgYnJhbmNoIgorCisjOiBnaXRrOjQwODEKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICJDb21taXQgSW5mw7MgKHJlZ3Vsw6FyaXMga2lmZWplesOpcyk6IgorCisjOiBnaXRrOjQwODIKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJTemVyesWROiIKKworIzogZ2l0azo0MDgzCittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAiQ29tbWl0b2zDszoiCisKKyM6IGdpdGs6NDA4NAorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiQ29tbWl0IMO8emVuZXQ6IgorCisjOiBnaXRrOjQwODUKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiRWd5ZXppayBtaW5lbiBDb21taXQgSW5mw7MgZmVsdMOpdGVsbGVsIgorCisjOiBnaXRrOjQwODYKKyMsIGZ1enp5Cittc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiRWd5ZXppayBtaW5lbiBDb21taXQgSW5mw7MgZmVsdMOpdGVsbGVsIgorCisjOiBnaXRrOjQwODcKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAiRsOhamwgdsOhbHRvesOhc29rOiIKKworIzogZ2l0azo0MDg4Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJGaXggU3RyaW5nIgorCisjOiBnaXRrOjQwODkKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgIlJlZ3Vsw6FyaXMga2lmZWplesOpcyIKKworIzogZ2l0azo0MDkwCittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgIktlcmVzw6lzIHN6w7Z2ZWc6IgorCisjOiBnaXRrOjQwOTEKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyJDb21taXQgRMOhdHVtb2sgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKKworIzogZ2l0azo0MDkyCittc2dpZCAiU2luY2U6IgorbXNnc3RyICJFdHTFkWw6IgorCisjOiBnaXRrOjQwOTMKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIkVkZGlnOiIKKworIzogZ2l0azo0MDk0Cittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIkxpbWl0w6FsdmEgw6lzL3ZhZ3kga2loYWd5dmEgZWd5IGFkb3R0IHN6w6Ftw7ogcmV2w616acOzdCAocG96aXTDrXYgZWfDqXN6KToiCisKKyM6IGdpdGs6NDA5NQorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiTXV0YXRhbmTDsyBzesOhbToiCisKKyM6IGdpdGs6NDA5NgorbXNnaWQgIk51bWJlciB0byBza2lwOiIKK21zZ3N0ciAiS2loYWd5YW5kw7Mgc3rDoW06IgorCisjOiBnaXRrOjQwOTcKK21zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgorbXNnc3RyICJLw7xsw7ZuZsOpbGUgb3BjacOzazoiCisKKyM6IGdpdGs6NDA5OAorbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKK21zZ3N0ciAiU3ppZ29yw7ogcmVuZGV6w6FzIGTDoXR1bSBhbGFwasOhbiIKKworIzogZ2l0azo0MDk5Cittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIkplbMO2bGplIG1lZyBheiDDoWdha2F0IgorCisjOiBnaXRrOjQxMDAKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgIktvcmzDoXRvesOhcyBheiBlbHPFkSBzesO8bMWRcmUiCisKKyM6IGdpdGs6NDEwMQorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICJFZ3lzemVyxbEgaGlzdG9yeSIKKworIzogZ2l0azo0MTAyCittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgIlRvdsOhYmJpIGFyZ3VtZW50b2sgYSBnaXQgbG9nLWhvejoiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJGw6FqbG9rIMOpcyBrw7ZueXZ0w6FyYWsgYmVqZWd5esOpc2UgYW1pa2V0IHRhcnRhbG1heiwgc29yb25rw6ludDoiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJQYXJhbmNzIHTDtmJiIHRhcnRhbG1hesOzIGNvbW1pdCBnZW5lcsOhbMOhc8OhcmE6IgorCisjOiBnaXRrOjQyMjgKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGs6IHN6ZXJrZXN6dMOpcyBuw6l6ZXQiCisKKyM6IGdpdGs6NDIzNgorbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICItLSBrcml0w6lyaXVtb2sgYSByZXbDrXppw7NrIGtpdsOhbGFzenTDoXPDoWhveiIKKworIzogZ2l0azo0MjQxCittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICJOw6l6ZXQgbmV2ZSIKKworIzogZ2l0azo0MzE2Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAiQWxrYWxtYXogKEY1KSIKKworIzogZ2l0azo0MzU0Cittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIGNvbW1pdCBhcmd1bWVudHVtb2sga2l2w6FsYXN6dMOhc2Ega8O2emJlbjoiCisKKyM6IGdpdGs6NDQwOSBnaXRrOjQ0NjIgZ2l0azo0OTI0IGdpdGs6NDkzOCBnaXRrOjYyMDggZ2l0azoxMjM3MyBnaXRrOjEyMzc0Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAiS2VpbmUiCisKKyM6IGdpdGs6NTAyMSBnaXRrOjUwMjYKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJMZXN6w6FybWF6b3R0IgorCisjOiBnaXRrOjUwMjIKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAiTmVtIGxlc3rDoXJtYXpvdHQiCisKKyM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiRWzFkWQiCisKKyM6IGdpdGs6NTAzMAorbXNnaWQgIk5vdCBhbmNlc3RvciIKK21zZ3N0ciAiTmVtIGVsxZFkIgorCisjOiBnaXRrOjUzMjQKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIiIKKyJMb2vDoWxpcyB2w6FsdG96dGF0w6Fzb2ssIG1lbHllayBiZSB2YW5uYWsgdMOpdmUgYXogaW5kZXhiZSwgZGUgbcOpZyBuaW5jc2VuZWsgIgorImNvbW1pdG9sdmEiCisKKyM6IGdpdGs6NTM2MAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICJMb2vDoWxpcyBuZW0gY29tbWl0b2x0IHbDoWx0b3rDoXNvaywgbmluY3NlbmVrIGJldMOpdmUgYXogaW5kZXhiZSIKKworIzogZ2l0azo3MTM0Cittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjcxMzcKK21zZ2lkICJtYW55IgorbXNnc3RyICJzb2siCisKKyM6IGdpdGs6NzMyOAorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJUYWdlazoiCisKKyM6IGdpdGs6NzM0NSBnaXRrOjczNTEgZ2l0azo4ODI1Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICJFbHRlcm4iCisKKyM6IGdpdGs6NzM1NgorbXNnaWQgIkNoaWxkIgorbXNnc3RyICJHeWVyZWsiCisKKyM6IGdpdGs6NzM2NQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiw4FnIgorCisjOiBnaXRrOjczNjgKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICJLw7Z2ZXRrZXrFkWsiCisKKyM6IGdpdGs6NzM3MQorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICJNZWdlbMWResWRayIKKworIzogZ2l0azo3OTY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IGEgZGlmZi1layBsZXTDtmx0w6lzZSBrw7Z6YmVuOiAlcyIKKworIzogZ2l0azo4NjUwCittc2dpZCAiR290bzoiCittc2dzdHIgIk1lbmo6IgorCisjOiBnaXRrOjg2NzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiUsO2dmlkIFNIQTEgaWQgJXMgZsOpbHJlw6lydGhldMWRIgorCisjOiBnaXRrOjg2NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIkEoeikgJXMgcmV2w616acOzIG5lbSBpc21lcnQiCisKKyM6IGdpdGs6ODY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJTSEExIGlkICVzIG5lbSBpc21lcnQiCisKKyM6IGdpdGs6ODY5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgorbXNnc3RyICJBKHopICVzIHJldsOtemnDsyBuaW5jcyBhIGplbGVubGVnaSBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6ODgzMiBnaXRrOjg4NDcKK21zZ2lkICJEYXRlIgorbXNnc3RyICJEw6F0dW0iCisKKyM6IGdpdGs6ODgzNQorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJHeWVyZWtlayIKKworIzogZ2l0azo4ODk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIsOBbGzDrXRzZCB2aXNzemEgYSAlcyBicmFuY2gtb3QgaWRlIgorCisjOiBnaXRrOjg5MDAKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiRWxrw7xsw7Zuw610ZXR0IGhlYWQ6IG5lbSBsZWhldCB2aXNzemHDoWxsw610YW5pIgorCisjOiBnaXRrOjkwMDUgZ2l0azo5MDExCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiTWVyZ2UgY29tbWl0IGtpaGFnecOhc2EgIgorCisjOiBnaXRrOjkwMjAgZ2l0azo5MDI1Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIHBhdGNoIElEIG1lZ3N6ZXJ6w6lzZSBrw7Z6YmVuIGEga8O2dmV0a2V6xZFuw6lsICIKKworIzogZ2l0azo5MDIxIGdpdGs6OTAyNgorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIGFiYmFoYWd5w6FzXG4iCisKKyM6IGdpdGs6OTAzMSBnaXRrOjkwMzQgZ2l0azo5MDQyIGdpdGs6OTA1NiBnaXRrOjkwNjUKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICJDb21taXQgIgorCisjOiBnaXRrOjkwMzUKK21zZ2lkICIiCisiIGlzIHRoZSBzYW1lIHBhdGNoIGFzXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBVZ3lhbmF6IGEgcGF0Y2ggbWludFxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0MworbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBrw7xsw7ZuYsO2emlrIGlubmVudMWRbFxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0NQorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJBIGNvbW1pdG9rIGRpZmZqZTpcbiIKKyJcbiIKKworIzogZ2l0azo5MDU3IGdpdGs6OTA2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgJXMgZ3llcmVrZSB2YW4uIGFiYmFoYWd5w6FzXG4iCisKKyM6IGdpdGs6OTA4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIGNvbW1pdCBmw6FqbGJhIMOtcsOhc2Ega8O2emJlbjogJXMiCisKKyM6IGdpdGs6OTA5MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IGEgY29tbWl0b2sgZGlmZmVsw6lzZSBrw7Z6YmVuOiAlcyIKKworIzogZ2l0azo5MTM3Cittc2dpZCAiVG9wIgorbXNnc3RyICJUZXRlamUiCisKKyM6IGdpdGs6OTEzOAorbXNnaWQgIkZyb20iCittc2dzdHIgIklubmVuIgorCisjOiBnaXRrOjkxNDMKK21zZ2lkICJUbyIKK21zZ3N0ciAiSWRlIgorCisjOiBnaXRrOjkxNjcKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAiUGF0Y2ggZ2VuZXLDoWzDoXNhIgorCisjOiBnaXRrOjkxNjkKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiSW5uZW46IgorCisjOiBnaXRrOjkxNzgKK21zZ2lkICJUbzoiCittc2dzdHIgIklkZToiCisKKyM6IGdpdGs6OTE4NworbXNnaWQgIlJldmVyc2UiCittc2dzdHIgIlZpc3N6YWZlbGUiCisKKyM6IGdpdGs6OTE4OSBnaXRrOjkzODUKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIktpbWVuZXRpIGbDoWpsOiIKKworIzogZ2l0azo5MTk1Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlbmVyw6Fsw6FzIgorCisjOiBnaXRrOjkyMzMKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgIkhpYmEgdMO2cnTDqXQgYSBwYXRjaCBrw6lzesOtdMOpc2Uga8O2emJlbjoiCisKKyM6IGdpdGs6OTI1NiBnaXRrOjkzNzMgZ2l0azo5NDMwCittc2dpZCAiSUQ6IgorbXNnc3RyICJJRDoiCisKKyM6IGdpdGs6OTI2NQorbXNnaWQgIlRhZyBuYW1lOiIKK21zZ3N0ciAiVGFnIG7DqXY6IgorCisjOiBnaXRrOjkyNjgKK21zZ2lkICJUYWcgbWVzc2FnZSBpcyBvcHRpb25hbCIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjkyNzAKKyMsIGZ1enp5Cittc2dpZCAiVGFnIG1lc3NhZ2U6IgorbXNnc3RyICJUYWcgbsOpdjoiCisKKyM6IGdpdGs6OTI3NCBnaXRrOjk0MzkKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkzDqXRyZWhvesOhcyIKKworIzogZ2l0azo5MjkyCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJBIHRhZyBuZXZlIG5pbmNzZW4gbWVnYWR2YSIKKworIzogZ2l0azo5Mjk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMgVGFnIG3DoXIgbMOpdGV6aWsiCisKKyM6IGdpdGs6OTMwNgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IGEgdGFnIGzDqXRyZWhvesOhc2Ega8O2emJlbjoiCisKKyM6IGdpdGs6OTM4MgorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJQYXJhbmNzOiIKKworIzogZ2l0azo5MzkwCittc2dpZCAiV3JpdGUiCittc2dzdHIgIsONcsOhcyIKKworIzogZ2l0azo5NDA4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIGNvbW1pdCDDrXLDoXNhIGvDtnpiZW46IgorCisjOiBnaXRrOjk0MzUKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiTsOpdjoiCisKKyM6IGdpdGs6OTQ1OAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgIkvDqXJlbSBhZGphIG1lZyBhIG5ldsOpdCBheiDDumogYnJhbmNoaG96IgorCisjOiBnaXRrOjk0NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAiJXMgYnJhbmNoIG3DoXIgbMOpdGV6aWsuIEZlbMO8bMOtcmphPyIKKworIzogZ2l0azo5NTMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIiIKKyIlcyBjb21taXQgbcOhciBiZW5uZSB2YW4gYSAlcyBicmFuY2hiYW4gLS0gYml6dG9zIGhvZ3kgw7pqcmEgY3NpbsOhbGphID8iCisiZWludHJhZ2VuPyIKKworIzogZ2l0azo5NTM1Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIkNoZXJyeS1waWNraW5nIgorCisjOiBnaXRrOjk1NDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiQ2hlcnJ5LXBpY2sgaGliYSB0w7ZydMOpbnQgbG9rw6FsaXMgdsOhbHRvdMOhc29rIG1pYXR0IGEgJyVzJyBmw6FqbGJhbi5cbiIKKyJLw6lyZW0gY29tbWl0b2xqYSwgaW5kw610c2Egw7pqcmEgdmFneSByZWp0c2UgZWwgYSB2w6FsdG96dGF0w6FzYWl0IMOpcyBwcsOzYsOhbGphICIKKyLDumpyYS4iCisKKyM6IGdpdGs6OTU1MAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkNoZXJyeS1waWNrIGhpYmEgdMO2cnTDqW50IG1lcmdlIGtvbmZsaWt0dXMgbWlhdHQuXG4iCisiS8OtdsOhbmphIGZ1dHRhdG5pIGEgZ2l0IGNpdG9vbC10IGEgcHJvYmzDqW1hIG1lZ29sZMOhc8OhaG96PyIKKworIzogZ2l0azo5NTY2IGdpdGs6OTYyNAorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJOaW5jc2VuIHbDoWx0b3rDoXMgY29tbWl0b2x2YSIKKworIzogZ2l0azo5NTkzCisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBub3QgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZXZlcnQgaXQ/IgorbXNnc3RyICIiCisiJXMgY29tbWl0IG3DoXIgYmVubmUgdmFuIGEgJXMgYnJhbmNoYmFuIC0tIGJpenRvcyBob2d5IMO6anJhIGNzaW7DoWxqYSA/IgorImVpbnRyYWdlbj8iCisKKyM6IGdpdGs6OTU5OAorIywgZnV6enkKK21zZ2lkICJSZXZlcnRpbmciCittc2dzdHIgIsOaanJhaW5kw610w6FzIgorCisjOiBnaXRrOjk2MDYKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKKyJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJDaGVycnktcGljayBoaWJhIHTDtnJ0w6ludCBsb2vDoWxpcyB2w6FsdG90w6Fzb2sgbWlhdHQgYSAnJXMnIGbDoWpsYmFuLlxuIgorIkvDqXJlbSBjb21taXRvbGphLCBpbmTDrXRzYSDDumpyYSB2YWd5IHJlanRzZSBlbCBhIHbDoWx0b3p0YXTDoXNhaXQgw6lzIHByw7Niw6FsamEgIgorIsO6anJhLiIKKworIzogZ2l0azo5NjEwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiQ2hlcnJ5LXBpY2sgaGliYSB0w7ZydMOpbnQgbWVyZ2Uga29uZmxpa3R1cyBtaWF0dC5cbiIKKyJLw612w6FuamEgZnV0dGF0bmkgYSBnaXQgY2l0b29sLXQgYSBwcm9ibMOpbWEgbWVnb2xkw6Fzw6Fob3o/IgorCisjOiBnaXRrOjk2NTMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICLDmmpyYWluZMOtdMOhcyBtZWdlcsWRc8OtdMOpc2UiCisKKyM6IGdpdGs6OTY1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIsOaanJhaW5kw610amEgYSAlcyBicmFuY2hvdCAlcy1pZz8iCisKKyM6IGdpdGs6OTY1NworbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICLDmmpyYWluZMOtdMOhcyB0w61wdXNhOiIKKworIzogZ2l0azo5NjYwCittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgIlNvZnQ6IEhhZ3lkIGEgd29ya2luZyB0cmVlLXQgw6lzIGF6IGluZGV4ZXQgw6lyaW50ZXRsZW7DvGwiCisKKyM6IGdpdGs6OTY2MworbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiS2V2ZXJ0OiBIYWd5ZCBhIHdvcmtpbmcgdHJlZS10IMOpcmludGV0bGVuw7xsLCB0w7Zyw7ZsZCBheiBpbmRleGV0IgorCisjOiBnaXRrOjk2NjYKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkhhcmQ6IEluZMOtdHNkIMO6anJhIGEgd29ya2luZyB0cmVlLXQgw6lzIGF6IGluZGV4ZXRcbiIKKyIoTUlOREVOIGxva8OhbGlzIHbDoWx0b3rDoXMgZWxkb2LDoXNhKSIKKworIzogZ2l0azo5NjgzCittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICLDmmpyYWluZMOtdMOhcyIKKworIzogZ2l0azo5NzQzCittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICJLaXZlc3oiCisKKyM6IGdpdGs6OTc5NgorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIk5lbSBsZWhldCBhIGplbGVubGVnIGtpdmV0dCBicmFuY2gtb3QgdMO2csO2bG5pIgorCisjOiBnaXRrOjk4MDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorIkEgJXMgYnJhbmNob24gdGFsw6FsaGF0w7MgY29tbWl0IG5lbSB0YWzDoWxoYXTDsyBtZWcgc2VtZWx5aWsgbcOhc2lrIGJyYW5jaG9uLlxuIgorIlTDqW55bGVnIHTDtnJsaSBhICVzIGJyYW5jaG90PyIKKworIzogZ2l0azo5ODMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJUYWdlayDDqXMgaGVhZGVrOiAlcyIKKworIzogZ2l0azo5ODUwCittc2dpZCAiRmlsdGVyIgorbXNnc3RyICJTesWxcsWRIgorCisjOiBnaXRrOjEwMTQ2Cittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisiSGliYSB0w7ZydMOpbnQgYSBjb21taXQgdG9wb2zDs2dpYWkgaW5mb3Jtw6FjacOzIG9sdmFzw6FzYSBrw7Z6YmVuOyBicmFuY2ggw6lzYSAiCisibWVnZWzFkXrFkS9rw7Z2ZXRrZXrFkSBpbmZvcm3DoWNpw7MgbmVtIGxlc3ogdGVsamVzLiIKKworIzogZ2l0azoxMTEyMworbXNnaWQgIlRhZyIKK21zZ3N0ciAiVGFnIgorCisjOiBnaXRrOjExMTI3Cittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjExMjEwCittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIkdpdGstYmV0xbEga2l2w6FsYXN6dMOzIgorCisjOiBnaXRrOjExMjI3Cittc2dpZCAiQiIKK21zZ3N0ciAiRiIKKworIzogZ2l0azoxMTIzMAorbXNnaWQgIkkiCittc2dzdHIgIksiCisKKyM6IGdpdGs6MTEzNDgKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIkNvbW1pdCBsaXN0YSBraWplbHrDqXNpIG9wY2nDs2siCisKKyM6IGdpdGs6MTEzNTEKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgIk1heGltw6FsaXMgZ3JhZmlrb24gc3rDqWxlc3PDqWcgKHNvcm9rKSIKKworIzogZ2l0azoxMTM1NQorIywgbm8tdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIk1heGltw6FsaXMgZ3JhZmlrb24gc3rDqWxlc3PDqWcgKHTDoWJsZSAlLWplKSIKKworIzogZ2l0azoxMTM1OAorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiTXV0YXNkIGEgbG9rw6FsaXMgdsOhbHRvenRhdMOhc29rYXQiCisKKyM6IGdpdGs6MTEzNjEKKyMsIGZ1enp5Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAiU0hBMSBBdXRvbWF0aWt1cyBraXbDoWxhc3p0w6FzYSIKKworIzogZ2l0azoxMTM2NQorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgIkEgdMOhdm9saSByZWZlayBlbHJlanTDqXNlIgorCisjOiBnaXRrOjExMzY5Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIkRpZmYga2lqZWx6xZEgb3BjacOzayIKKworIzogZ2l0azoxMTM3MQorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJUYWIgc29ya8O2eiIKKworIzogZ2l0azoxMTM3NAorIywgZnV6enkKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzL2hlYWRzIgorbXNnc3RyICJTem9tc3rDqWRvcyB0YWdlayBraWplbHrDqXNlIgorCisjOiBnaXRrOjExMzc3Cittc2dpZCAiTWF4aW11bSAjIHRhZ3MvaGVhZHMgdG8gc2hvdyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExMzgwCittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJLb3Jsw6F0b3pvdHQgZGlmZmVrIGEga2lsaXN0w6F6b3R0IMO6dHZvbmFsYWtob3oiCisKKyM6IGdpdGs6MTEzODMKK21zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKK21zZ3N0ciAiRsOhamxvbmvDqW50aSBrw7Nkb2zDoXMgdMOhbWdhdMOhc2EiCisKKyM6IGdpdGs6MTEzODkgZ2l0azoxMTUzNgorbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAiS8O8bHPFkSBkaWZmIGFsa2FsbWF6w6FzIgorCisjOiBnaXRrOjExMzkwCittc2dpZCAiQ2hvb3NlLi4uIgorbXNnc3RyICJWw6FsYXN6ZCAuLi4iCisKKyM6IGdpdGs6MTEzOTUKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIsOBbHRhbMOhbm9zIG9wY2nDs2siCisKKyM6IGdpdGs6MTEzOTgKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgIlTDqW3DoXpvdHQgdmV6w6lybMWRayBoYXN6bsOhbGF0YSIKKworIzogZ2l0azoxMTQwMAorbXNnaWQgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiCittc2dzdHIgIihhIHbDoWx0b3rDoXMgw7pqcmFpbmTDrXTDoXN0IGlnw6lueWVsKSIKKworIzogZ2l0azoxMTQwMgorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIoamVsZW5sZWcgbmVtIGVsw6lyaGV0xZEpIgorCisjOiBnaXRrOjExNDEzCittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIlN6w61uZWs6IG55b21qYSBtZWcgYSBraXbDoWxhc3p0w6FzaG96IgorCisjOiBnaXRrOjExNDE2Cittc2dpZCAiSW50ZXJmYWNlIgorbXNnc3RyICJJbnRlcmbDqXN6IgorCisjOiBnaXRrOjExNDE3Cittc2dpZCAiaW50ZXJmYWNlIgorbXNnc3RyICJpbnRlcmbDqXN6IgorCisjOiBnaXRrOjExNDIwCittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAiSMOhdHTDqXIiCisKKyM6IGdpdGs6MTE0MjEgZ2l0azoxMTQ1MQorbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgImjDoXR0w6lyIgorCisjOiBnaXRrOjExNDI0Cittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiRWzFkXTDqXIiCisKKyM6IGdpdGs6MTE0MjUKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICJlbMWRdMOpciIKKworIzogZ2l0azoxMTQyOAorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAiRGlmZjogcsOpZ2kgc29yb2siCisKKyM6IGdpdGs6MTE0MjkKK21zZ2lkICJkaWZmIG9sZCBsaW5lcyIKK21zZ3N0ciAiZGlmZiByw6lnaSBzb3JvayIKKworIzogZ2l0azoxMTQzMworbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKK21zZ3N0ciAiRGlmZjogw7pqIHNvcm9rIgorCisjOiBnaXRrOjExNDM0Cittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgImRpZmYgLSDDumogc29yb2siCisKKyM6IGdpdGs6MTE0MzgKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAiRGlmZjogbmFneSBoZWFkZXLDtmsiCisKKyM6IGdpdGs6MTE0NDAKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJkaWZmIC0gbmFneSBoZWFkZXLDtmsiCisKKyM6IGdpdGs6MTE0NDQKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAiTWVnamVsw7ZsdCBzb3IgaMOhdHTDqXIiCisKKyM6IGdpdGs6MTE0NDYKK21zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgorbXNnc3RyICJtZWdqZWzDtmx0IHNvciBow6F0dMOpciIKKworIzogZ2l0azoxMTQ1MAorbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAiVsOhbGFzc3pvbiBow6F0dGVyZXQiCisKKyM6IGdpdGs6MTE0NTkKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJCZXTFsTogbnlvbWphIG1lZyBhIGtpdsOhbGFzenTDoXNob3oiCisKKyM6IGdpdGs6MTE0NjEKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIkbFkSBiZXTFsSIKKworIzogZ2l0azoxMTQ2MgorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJEaWZmIGtpamVsesWRIGJldMWxIgorCisjOiBnaXRrOjExNDYzCittc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKK21zZ3N0ciAiRmVsaGFzem7DoWzDs2kgaW50ZXJmw6lzeiBiZXTFsSIKKworIzogZ2l0azoxMTQ4NQorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIkdpdGsgYmXDoWxsw610w6Fzb2siCisKKyM6IGdpdGs6MTE0OTQKKyMsIGZ1enp5Cittc2dpZCAiR2VuZXJhbCIKK21zZ3N0ciAiR2VuZXLDoWzDoXMiCisKKyM6IGdpdGs6MTE0OTUKK21zZ2lkICJDb2xvcnMiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTQ5NgorbXNnaWQgIkZvbnRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTE1NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiB2w6FsYXNzem9uIHN6w61udCBhICVzLXJhIgorCisjOiBnaXRrOjEyMDU5Cittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICIiCisiU2FqbsOhbGp1aywgZGUgYSBnaXRrIG5lbSBmdXR0YXRoYXTDsyBlenplbCBhIFRjbC9UayB2ZXJ6acOzdmFsLlxuIgorIkdpdGsgZnV0dGF0w6Fzw6Fob3ogbGVnYWzDoWJiIFRjbC9UayA4LjQgc3rDvGtzw6lnZXMuIgorCisjOiBnaXRrOjEyMjY5Cittc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKK21zZ3N0ciAiTmVtIHRhbMOhbGhhdMO8IGdpdCByZXBvc2l0b3J5IGl0dC4iCisKKyM6IGdpdGs6MTIzMTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIkbDqWxyZcOpcnRoZXTFkSBhcmd1bWVudHVtICclcyc6IHJldsOtemnDsyDDqXMgZsOhamxuw6l2IGlzIgorCisjOiBnaXRrOjEyMzI4Cittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAiUm9zc3ogZ2l0ayBhcmd1bWVudHVtb2s6IgorCisjfiBtc2dpZCAibWMiCisjfiBtc2dzdHIgIm1jIgorCisjfiBtc2dpZCAiU0hBMSBJRDogIgorI34gbXNnc3RyICJTSEExIElEOiAiCisKKyN+IG1zZ2lkICJuZXh0IgorI34gbXNnc3RyICJrw7Z2ZXRrZXrFkSIKKworI34gbXNnaWQgInByZXYiCisjfiBtc2dzdHIgImVsxZF6xZEiCisKKyN+IG1zZ2lkICJDRGF0ZSIKKyN+IG1zZ3N0ciAiRMOhdHVtIgorCisjfiBtc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKKyN+IG1zZ3N0ciAiTmVtIHRhbMOhbGhhdMOzIGEgXCIlc1wiIGvDtm55dnTDoXIuIgorCisjfiBtc2dpZCAiVXNlIGFsbCByZWZzIgorI34gbXNnc3RyICJIYXN6bsOhbGQgYXogw7Zzc3plcyByZWZlcmVuY2nDoXQiCisKKyN+IG1zZ2lkICJNYXggY291bnQ6IgorI34gbXNnc3RyICJNYXguIHN6w6FtOiIKKworI34gbXNnaWQgIlNraXA6IgorI34gbXNnc3RyICJLaWhhZ3k6IgorCisjfiBtc2dpZCAiTmFtZSIKKyN+IG1zZ3N0ciAiTsOpdiIKKworI34gbXNnaWQgIlRhZy9IZWFkICVzIGlzIG5vdCBrbm93biIKKyN+IG1zZ3N0ciAiVGFnL0hlYWQgJXMgbmVtIGlzbWVydCIKKworI34gbXNnaWQgIi0gc3RvcHBpbmdcbiIKKyN+IG1zZ3N0ciAiLSBhYmJhaGFnecOhcy5cbiIKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL2l0LnBvIGIvZ2l0ay1naXQvcG8vaXQucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4ZDIzZQotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L3BvL2l0LnBvCkBAIC0wLDAgKzEsMTM4NyBAQAorIyBUcmFuc2xhdGlvbiBvZiBnaXRrCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFBhdWwgTWFja2VycmFzCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjIE1pY2hlbGUgQmFsbGFiaW8gPGJhcnJhX2N1ZGFAa2F0YW1haWwuY29tPiwgMjAwOC4KKyMKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdGtcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMTQ6MzIrMTAwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDEtMjggMTg6NDErMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWljaGVsZSBCYWxsYWJpbyA8YmFycmFfY3VkYUBrYXRhbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSXRhbGlhblxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0azoxNDAKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIkltcG9zc2liaWxlIG90dGVuZXJlIGwnZWxlbmNvIGRlaSBmaWxlIGluIGF0dGVzYSBkaSBmdXNpb25lOiIKKworIzogZ2l0azoyMTIgZ2l0azoyMzgxCittc2dpZCAiQ29sb3Igd29yZHMiCittc2dzdHIgIiIKKworIzogZ2l0azoyMTcgZ2l0azoyMzgxIGdpdGs6ODIyMCBnaXRrOjgyNTMKK21zZ2lkICJNYXJrdXAgd29yZHMiCittc2dzdHIgIiIKKworIzogZ2l0azozMjQKK21zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCittc2dzdHIgIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRlbGxlIHJldmlzaW9uaToiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiRXJyb3JlIG5lbGwnZXNlY3V6aW9uZSBkZWwgY29tYW5kbyBzcGVjaWZpY2F0byBjb24gLS1hcmdzY21kOiIKKworIzogZ2l0azozOTMKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyJOZXNzdW4gZmlsZSBzZWxlemlvbmF0bzogw6ggc3RhdGEgc3BlY2lmaWNhdGEgbCdvcHppb25lIC0tbWVyZ2UgbWEgbm9uIGNpICIKKyJzb25vIGZpbGUgaW4gYXR0ZXNhIGRpIGZ1c2lvbmUuIgorCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiTmVzc3VuIGZpbGUgc2VsZXppb25hdG86IMOoIHN0YXRhIHNwZWNpZmljYXRhIGwnb3B6aW9uZSAtLW1lcmdlIG1hIGkgZmlsZSAiCisic3BlY2lmaWNhdGkgbm9uIHNvbm8gaW4gYXR0ZXNhIGRpIGZ1c2lvbmUuIgorCisjOiBnaXRrOjQxOCBnaXRrOjU2NgorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKK21zZ3N0ciAiRXJyb3JlIG5lbGwnZXNlY3V6aW9uZSBkaSBnaXQgbG9nOiIKKworIzogZ2l0azo0MzYgZ2l0azo1ODIKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICJMZXR0dXJhIGluIGNvcnNvIgorCisjOiBnaXRrOjQ5NiBnaXRrOjQ1MjUKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIkxldHR1cmEgZGVsbGUgcmV2aXNpb25pIGluIGNvcnNvLi4uIgorCisjOiBnaXRrOjQ5OSBnaXRrOjE2MzcgZ2l0azo0NTI4Cittc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKK21zZ3N0ciAiTmVzc3VuYSByZXZpc2lvbmUgc2VsZXppb25hdGEiCisKKyM6IGdpdGs6MTQ0NSBnaXRrOjQwNDUgZ2l0azoxMjQzMgorbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAiTGluZWEgZGkgY29tYW5kbyIKKworIzogZ2l0azoxNTExCittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJJbXBvc3NpYmlsZSBlbGFib3JhcmUgaSBkYXRpIGRpIGdpdCBsb2c6IgorCisjOiBnaXRrOjE3NDAKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJOZXNzdW5hIGluZm9ybWF6aW9uZSBkaXNwb25pYmlsZSBzdWxsZSByZXZpc2lvbmkiCisKKyM6IGdpdGs6MTkwMyBnaXRrOjE5MzIgZ2l0azo0MzE1IGdpdGs6OTY2OSBnaXRrOjExMjQxIGdpdGs6MTE1MjEKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGdpdGs6MTkzNCBnaXRrOjQzMTcgZ2l0azo5MTk2IGdpdGs6OTI3NSBnaXRrOjkzOTEgZ2l0azo5NDQwIGdpdGs6OTY3MQorIzogZ2l0azoxMTI0MiBnaXRrOjExNTIyCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJBbm51bGxhIgorCisjOiBnaXRrOjIwNjkKK21zZ2lkICImVXBkYXRlIgorbXNnc3RyICJBZ2dpb3JuYSIKKworIzogZ2l0azoyMDcwCittc2dpZCAiJlJlbG9hZCIKK21zZ3N0ciAiUmljYXJpY2EiCisKKyM6IGdpdGs6MjA3MQorbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKK21zZ3N0ciAiUmlsZWdnaSByaWZlcmltZW50aSIKKworIzogZ2l0azoyMDcyCittc2dpZCAiJkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAiRWxlbmNhIHJpZmVyaW1lbnRpIgorCisjOiBnaXRrOjIwNzQKK21zZ2lkICJTdGFydCBnaXQgJmd1aSIKK21zZ3N0ciAiQXZ2aWEgZ2l0IGd1aSIKKworIzogZ2l0azoyMDc2Cittc2dpZCAiJlF1aXQiCittc2dzdHIgIkVzY2kiCisKKyM6IGdpdGs6MjA2OAorbXNnaWQgIiZGaWxlIgorbXNnc3RyICImRmlsZSIKKworIzogZ2l0azoyMDgwCittc2dpZCAiJlByZWZlcmVuY2VzIgorbXNnc3RyICJQcmVmZXJlbnplIgorCisjOiBnaXRrOjIwNzkKK21zZ2lkICImRWRpdCIKK21zZ3N0ciAiTW9kaWZpY2EiCisKKyM6IGdpdGs6MjA4NAorbXNnaWQgIiZOZXcgdmlldy4uLiIKK21zZ3N0ciAiTnVvdmEgdmlzdGEuLi4iCisKKyM6IGdpdGs6MjA4NQorbXNnaWQgIiZFZGl0IHZpZXcuLi4iCittc2dzdHIgIk1vZGlmaWNhIHZpc3RhLi4uIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRGVsZXRlIHZpZXciCittc2dzdHIgIkVsaW1pbmEgdmlzdGEiCisKKyM6IGdpdGs6MjA4OCBnaXRrOjQwNDMKK21zZ2lkICImQWxsIGZpbGVzIgorbXNnc3RyICJUdXR0aSBpIGZpbGUiCisKKyM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKK21zZ2lkICImVmlldyIKK21zZ3N0ciAiVmlzdGEiCisKKyM6IGdpdGs6MjA5MyBnaXRrOjIxMDMgZ2l0azozMDEyCittc2dpZCAiJkFib3V0IGdpdGsiCittc2dzdHIgIkluZm9ybWF6aW9uaSBzdSBnaXRrIgorCisjOiBnaXRrOjIwOTQgZ2l0azoyMTA4Cittc2dpZCAiJktleSBiaW5kaW5ncyIKK21zZ3N0ciAiU2NvcmNpYXRvaWUgZGEgdGFzdGllcmEiCisKKyM6IGdpdGs6MjA5MiBnaXRrOjIxMDcKK21zZ2lkICImSGVscCIKK21zZ3N0ciAiQWl1dG8iCisKKyM6IGdpdGs6MjE4NSBnaXRrOjg2NTIKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMSBJRDoiCisKKyM6IGdpdGs6MjIyOQorbXNnaWQgIlJvdyIKK21zZ3N0ciAiUmlnYSIKKworIzogZ2l0azoyMjY3Cittc2dpZCAiRmluZCIKK21zZ3N0ciAiVHJvdmEiCisKKyM6IGdpdGs6MjI5NQorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAicmV2aXNpb25lIgorCisjOiBnaXRrOjIyOTkgZ2l0azoyMzAxIGdpdGs6NDY4NyBnaXRrOjQ3MTAgZ2l0azo0NzM0IGdpdGs6Njc1NSBnaXRrOjY4MjcKKyM6IGdpdGs6NjkxMgorbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICJjb250ZW5lbnRlOiIKKworIzogZ2l0azoyMzAyIGdpdGs6MzUyNiBnaXRrOjM1MzEgZ2l0azo0NzYzCittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICJjaGUgcmlndWFyZGEgaSBwZXJjb3JzaToiCisKKyM6IGdpdGs6MjMwMyBnaXRrOjQ3NzcKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAiY2hlIGFnZ2l1bmdlL3JpbXVvdmUgbGEgc3RyaW5nYToiCisKKyM6IGdpdGs6MjMwNCBnaXRrOjQ3NzkKK21zZ2lkICJjaGFuZ2luZyBsaW5lcyBtYXRjaGluZzoiCittc2dzdHIgIiIKKworIzogZ2l0azoyMzEzIGdpdGs6MjMxNSBnaXRrOjQ3NjYKK21zZ2lkICJFeGFjdCIKK21zZ3N0ciAiRXNhdHRvIgorCisjOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMworbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIiIKKworIzogZ2l0azoyMzE1IGdpdGs6NDczNiBnaXRrOjQ4NTIgZ2l0azo2NzE5Cittc2dpZCAiUmVnZXhwIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjMxNyBnaXRrOjIzMTggZ2l0azo0ODc0IGdpdGs6NDkwNCBnaXRrOjQ5MTEgZ2l0azo2ODQ4IGdpdGs6NjkxNgorbXNnaWQgIkFsbCBmaWVsZHMiCittc2dzdHIgIlR1dHRpIGkgY2FtcGkiCisKKyM6IGdpdGs6MjMxOCBnaXRrOjQ4NzEgZ2l0azo0OTA0IGdpdGs6Njc4NgorbXNnaWQgIkhlYWRsaW5lIgorbXNnc3RyICJUaXRvbG8iCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NjkxNiBnaXRrOjczODkKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAiQ29tbWVudGkiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo0ODc2IGdpdGs6NDkxMSBnaXRrOjY3ODYgZ2l0azo3MzI0IGdpdGs6ODgzMAorIzogZ2l0azo4ODQ1Cittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJBdXRvcmUiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NzMyNgorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAiUmV2aXNpb25lIGNyZWF0YSBkYSIKKworIzogZ2l0azoyMzUwCittc2dpZCAiU2VhcmNoIgorbXNnc3RyICJDZXJjYSIKKworIzogZ2l0azoyMzU4Cittc2dpZCAiRGlmZiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjIzNjAKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiVmVjY2hpYSB2ZXJzaW9uZSIKKworIzogZ2l0azoyMzYyCittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIk51b3ZhIHZlcnNpb25lIgorCisjOiBnaXRrOjIzNjQKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICJMaW5lZSBkaSBjb250ZXN0byIKKworIzogZ2l0azoyMzc0Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiSWdub3JhIG1vZGlmaWNoZSBhZ2xpIHNwYXppIgorCisjOiBnaXRrOjIzNzggZ2l0azoyMzgwIGdpdGs6Nzk1OSBnaXRrOjgyMDYKK21zZ2lkICJMaW5lIGRpZmYiCittc2dzdHIgIiIKKworIzogZ2l0azoyNDQ1Cittc2dpZCAiUGF0Y2giCittc2dzdHIgIk1vZGlmaWNoZSIKKworIzogZ2l0azoyNDQ3Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAiRGlyZWN0b3J5IgorCisjOiBnaXRrOjI2MTcgZ2l0azoyNjM3Cittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICJEaWZmIHF1ZXN0byAtPiBzZWxlemlvbmF0byIKKworIzogZ2l0azoyNjE4IGdpdGs6MjYzOAorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZiBzZWxlemlvbmF0byAtPiBxdWVzdG8iCisKKyM6IGdpdGs6MjYxOSBnaXRrOjI2MzkKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICJDcmVhIHBhdGNoIgorCisjOiBnaXRrOjI2MjAgZ2l0azo5MjU0Cittc2dpZCAiQ3JlYXRlIHRhZyIKK21zZ3N0ciAiQ3JlYSBldGljaGV0dGEiCisKKyM6IGdpdGs6MjYyMSBnaXRrOjkzNzEKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAiU2NyaXZpIHJldmlzaW9uZSBpbiB1biBmaWxlIgorCisjOiBnaXRrOjI2MjIgZ2l0azo5NDI4Cittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgIkNyZWEgdW4gbnVvdm8gcmFtbyIKKworIzogZ2l0azoyNjIzCittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIlBvcnRhIHF1ZXN0YSByZXZpc2lvbmUgaW4gY2ltYSBhbCByYW1vIGF0dHVhbGUiCisKKyM6IGdpdGs6MjYyNAorbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIkFnZ2lvcm5hIGlsIHJhbW8gSEVBRCBhIHF1ZXN0YSByZXZpc2lvbmUiCisKKyM6IGdpdGs6MjYyNQorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIlNlZ25hIHF1ZXN0YSByZXZpc2lvbmUiCisKKyM6IGdpdGs6MjYyNgorbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICJUb3JuYSBhbGxhIHJldmlzaW9uZSBzZWduYXRhIgorCisjOiBnaXRrOjI2MjcKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAiVHJvdmEgaWwgZGlzY2VuZGVudGUgZGkgcXVlc3RhIHJldmlzaW9uZSBlIGRpIHF1ZWxsYSBzZWduYXRhIgorCisjOiBnaXRrOjI2MjgKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiQ29uZnJvbnRhIGNvbiBsYSByZXZpc2lvbmUgc2VnbmF0YSIKKworIzogZ2l0azoyNjI5IGdpdGs6MjY0MAorIywgZnV6enkKK21zZ2lkICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiRGlmZiBxdWVzdG8gLT4gc2VsZXppb25hdG8iCisKKyM6IGdpdGs6MjYzMCBnaXRrOjI2NDEKKyMsIGZ1enp5Cittc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCittc2dzdHIgIkRpZmYgc2VsZXppb25hdG8gLT4gcXVlc3RvIgorCisjOiBnaXRrOjI2MzEKKyMsIGZ1enp5Cittc2dpZCAiUmV2ZXJ0IHRoaXMgY29tbWl0IgorbXNnc3RyICJTZWduYSBxdWVzdGEgcmV2aXNpb25lIgorCisjOiBnaXRrOjI2NDcKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIkF0dGl2YSBxdWVzdG8gcmFtbyIKKworIzogZ2l0azoyNjQ4Cittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICJFbGltaW5hIHF1ZXN0byByYW1vIgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjY1NgorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiRXZpZGVuemlhIGFuY2hlIHF1ZXN0byIKKworIzogZ2l0azoyNjU3Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAiRXZpZGVuemlhIHNvbG8gcXVlc3RvIgorCisjOiBnaXRrOjI2NTgKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICJWaXN1YWxpenphIGRpZmZlcmVuemUgaW4gdW4gYWx0cm8gcHJvZ3JhbW1hIgorCisjOiBnaXRrOjI2NTkKK21zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgorbXNnc3RyICJBbm5vdGEgbGEgcmV2aXNpb25lIHByZWNlZGVudGUiCisKKyM6IGdpdGs6MjY2MAorbXNnaWQgIkNvcHkgcGF0aCIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjI2NjcKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIk1vc3RyYSBsYSBwcm92ZW5pZW56YSBkaSBxdWVzdGEgcmlnYSIKKworIzogZ2l0azoyNjY4Cittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICJFc2VndWkgZ2l0IGd1aSBibGFtZSBzdSBxdWVzdGEgcmlnYSIKKworIzogZ2l0azozMDE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSB1biB2aXN1YWxpenphdG9yZSBkaSByZXZpc2lvbmkgcGVyIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCBcXHUwMGE5IDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlV0aWxpenpvIGUgcmVkaXN0cmlidXppb25lIHBlcm1lc3NpIHNvdHRvIGkgdGVybWluaSBkZWxsYSBHTlUgR2VuZXJhbCBQdWJsaWMgIgorIkxpY2Vuc2UiCisKKyM6IGdpdGs6MzAyMiBnaXRrOjMwODkgZ2l0azo5ODU3Cittc2dpZCAiQ2xvc2UiCittc2dzdHIgIkNoaXVkaSIKKworIzogZ2l0azozMDQzCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIlNjb3JjaWF0b2llIGRhIHRhc3RpZXJhIGRpIEdpdGsiCisKKyM6IGdpdGs6MzA0NgorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKK21zZ3N0ciAiU2NvcmNpYXRvaWUgZGEgdGFzdGllcmEgZGkgR2l0azoiCisKKyM6IGdpdGs6MzA0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0RXNjaSIKKworIzogZ2l0azozMDQ5CisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCittc2dzdHIgIjwlcy1GPlx0XHRUcm92YSIKKworIzogZ2l0azozMDUwCittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8SG9tZT5cdFx0VmFpIGFsbGEgcHJpbWEgcmV2aXNpb25lIgorCisjOiBnaXRrOjMwNTEKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kPlx0XHRWYWkgYWxsJ3VsdGltYSByZXZpc2lvbmUiCisKKyM6IGdpdGs6MzA1MgorIywgZnV6enkKK21zZ2lkICI8VXA+LCBwLCBrXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxTdT4sIHAsIGlcdFZhaSBwacO5IGluIGFsdG8gZGkgdW5hIHJldmlzaW9uZSIKKworIzogZ2l0azozMDUzCisjLCBmdXp6eQorbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxHacO5Piwgbiwga1x0VmFpIHBpw7kgaW4gYmFzc28gZGkgdW5hIHJldmlzaW9uZSIKKworIzogZ2l0azozMDU0CisjLCBmdXp6eQorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxTaW5pc3RyYT4sIHosIGpcdFRvcm5hIGluZGlldHJvIG5lbGxhIGNyb25vbG9naWEiCisKKyM6IGdpdGs6MzA1NQorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8RGVzdHJhPiwgeCwgbFx0VmFpIGF2YW50aSBuZWxsYSBjcm9ub2xvZ2lhIgorCisjOiBnaXRrOjMwNTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbj5cdEdvIHRvIG4tdGggcGFyZW50IG9mIGN1cnJlbnQgY29tbWl0IGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjMwNTcKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2luYVN1Plx0VmFpIHBpw7kgaW4gYWx0byBkaSB1bmEgcGFnaW5hIG5lbGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSIKKworIzogZ2l0azozMDU4Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICIiCisiPFBhZ2luYUdpw7k+XHRWYWkgcGnDuSBpbiBiYXNzbyBkaSB1bmEgcGFnaW5hIG5lbGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSIKKworIzogZ2l0azozMDU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdFNjb3JyaSBhbGxhIGNpbWEgZGVsbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIgorCisjOiBnaXRrOjMwNjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZD5cdFNjb3JyaSBhbGxhIGZpbmUgZGVsbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIgorCisjOiBnaXRrOjMwNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1TdT5cdFNjb3JyaSBsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkgaW4gYWx0byBkaSB1bmEgcmlnYSIKKworIzogZ2l0azozMDYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLUdpw7k+XHRTY29ycmkgbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIGluIGJhc3NvIGRpIHVuYSByaWdhIgorCisjOiBnaXRrOjMwNjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnaW5hU3U+XHRTY29ycmkgbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIGluIGFsdG8gZGkgdW5hIHBhZ2luYSIKKworIzogZ2l0azozMDY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdpbmFHacO5Plx0U2NvcnJpIGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSBpbiBiYXNzbyBkaSB1bmEgcGFnaW5hIgorCisjOiBnaXRrOjMwNjUKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1TdT5cdFRyb3ZhIGFsbCdpbmRpZXRybyAodmVyc28gbCdhbHRvLCByZXZpc2lvbmkgc3VjY2Vzc2l2ZSkiCisKKyM6IGdpdGs6MzA2NgorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtR2nDuT5cdFRyb3ZhIGluIGF2YW50aSAodmVyc28gaWwgYmFzc28sIHJldmlzaW9uaSBwcmVjZWRlbnRpKSIKKworIzogZ2l0azozMDY3Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHRTY29ycmkgbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSBpbiBhbHRvIGRpIHVuYSBwYWdpbmEiCisKKyM6IGdpdGs6MzA2OAorbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8QmFja3NwYWNlPlx0U2NvcnJpIGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUgaW4gYWx0byBkaSB1bmEgcGFnaW5hIgorCisjOiBnaXRrOjMwNjkKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPFNwYXppbz5cdFx0U2NvcnJpIGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUgaW4gYmFzc28gZGkgdW5hIHBhZ2luYSIKKworIzogZ2l0azozMDcwCittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdFNjb3JyaSBsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIGluIGFsdG8gZGkgMTggbGluZWUiCisKKyM6IGdpdGs6MzA3MQorbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdFNjb3JyaSBsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIGluIGJhc3NvIGRpIDE4IGxpbmVlIgorCisjOiBnaXRrOjMwNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdFRyb3ZhIgorCisjOiBnaXRrOjMwNzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx0VHJvdmEgaW4gYXZhbnRpIgorCisjOiBnaXRrOjMwNzQKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8SW52aW8+XHRUcm92YSBpbiBhdmFudGkiCisKKyM6IGdpdGs6MzA3NQorIywgZnV6enkKK21zZ2lkICJnXHRcdEdvIHRvIGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx0VmFpIGFsbCd1bHRpbWEgcmV2aXNpb25lIgorCisjOiBnaXRrOjMwNzYKK21zZ2lkICIvXHRcdEZvY3VzIHRoZSBzZWFyY2ggYm94IgorbXNnc3RyICIvXHRcdEN1cnNvcmUgbmVsIGJveCBkaSByaWNlcmNhIgorCisjOiBnaXRrOjMwNzcKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx0VHJvdmEgYWxsJ2luZGlldHJvIgorCisjOiBnaXRrOjMwNzgKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdFNjb3JyaSBsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIGFsIGZpbGUgc3VjY2Vzc2l2byIKKworIzogZ2l0azozMDc5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx0Q2VyY2EgaW4gYXZhbnRpIG5lbGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUiCisKKyM6IGdpdGs6MzA4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRDZXJjYSBhbGwnaW5kaWV0cm8gbmVsbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSIKKworIzogZ2l0azozMDgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdEF1bWVudGEgZGltZW5zaW9uZSBjYXJhdHRlcmUiCisKKyM6IGdpdGs6MzA4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtcGnDuT5cdEF1bWVudGEgZGltZW5zaW9uZSBjYXJhdHRlcmUiCisKKyM6IGdpdGs6MzA4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUC0+XHREaW1pbnVpc2NpIGRpbWVuc2lvbmUgY2FyYXR0ZXJlIgorCisjOiBnaXRrOjMwODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1tZW5vPlx0RGltaW51aXNjaSBkaW1lbnNpb25lIGNhcmF0dGVyZSIKKworIzogZ2l0azozMDg1Cittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx0QWdnaW9ybmEiCisKKyM6IGdpdGs6MzU1MCBnaXRrOjM1NTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAiRXJyb3JlIGR1cmFudGUgbGEgY3JlYXppb25lIGRlbGxhIGRpcmVjdG9yeSB0ZW1wb3JhbmVhICVzOiIKKworIzogZ2l0azozNTcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRpIFwiJXNcIiBkYSAlczoiCisKKyM6IGdpdGs6MzYzNQorbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgY29tYW5kbzoiCisKKyM6IGdpdGs6Mzc4NAorbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICJSZXZpc2lvbmUgaW5lc2lzdGVudGUiCisKKyM6IGdpdGs6Mzc5OAorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZTogaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgY29tYW5kbzoiCisKKyM6IGdpdGs6MzgyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCittc2dzdHIgIkltcG9zc2liaWxlIGxlZ2dlcmUgbWVyZ2UgaGVhZDogJXMiCisKKyM6IGdpdGs6MzgzNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICJFcnJvcmUgbmVsbGEgbGV0dHVyYSBkZWxsJ2luZGljZTogJXMiCisKKyM6IGdpdGs6Mzg2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGdpdCBibGFtZTogJXMiCisKKyM6IGdpdGs6Mzg2NSBnaXRrOjY3NTQKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgIlJpY2VyY2EgaW4gY29yc28iCisKKyM6IGdpdGs6Mzg5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiRXJyb3JlIG5lbGwnZXNlY3V6aW9uZSBkaSBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM5MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICJRdWVsbGEgcmlnYSBwcm92aWVuZSBkYWxsYSByZXZpc2lvbmUgJXMsIG5vbiBwcmVzZW50ZSBpbiBxdWVzdGEgdmlzdGEiCisKKyM6IGdpdGs6MzkzOQorbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsIHZpc3VhbGl6emF0b3JlIGRpIGRpZmZlcmVuemU6IgorCisjOiBnaXRrOjQwNzAKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiU2NlbHRhIHZpc3RhIEdpdGsiCisKKyM6IGdpdGs6NDA3NAorbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAiUmljb3JkYSBxdWVzdGEgdmlzdGEiCisKKyM6IGdpdGs6NDA3NQorbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCittc2dzdHIgIlJpZmVyaW1lbnRpIChsaXN0YSBkaSBlbGVtZW50aSBzZXBhcmF0aSBkYSBzcGF6aSkiCisKKyM6IGdpdGs6NDA3NgorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIlJhbWkgZWQgZXRpY2hldHRlIgorCisjOiBnaXRrOjQwNzcKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAiVHV0dGkgaSByaWZlcmltZW50aSIKKworIzogZ2l0azo0MDc4Cittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIlR1dHRpIGkgcmFtaSAobG9jYWxpKSIKKworIzogZ2l0azo0MDc5Cittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgIlR1dHRlIGxlIGV0aWNoZXR0ZSIKKworIzogZ2l0azo0MDgwCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiVHV0dGkgaSByYW1pIHJlbW90aSIKKworIzogZ2l0azo0MDgxCittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAiSW5mb3JtYXppb25pIHN1bGxhIHJldmlzaW9uZSAoZXNwcmVzc2lvbmkgcmVnb2xhcmkpOiIKKworIzogZ2l0azo0MDgyCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiQXV0b3JlOiIKKworIzogZ2l0azo0MDgzCittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAiUmV2aXNpb25lIGNyZWF0YSBkYToiCisKKyM6IGdpdGs6NDA4NAorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiTWVzc2FnZ2lvIGRpIHJldmlzaW9uZToiCisKKyM6IGdpdGs6NDA4NQorbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJSaXNwb25kZSBhIHR1dHRpIGkgY3JpdGVyaSBkaSByaWNlcmNhIHN1bGxlIHJldmlzaW9uaSIKKworIzogZ2l0azo0MDg2CisjLCBmdXp6eQorbXNnaWQgIk1hdGNoZXMgbm8gQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIlJpc3BvbmRlIGEgdHV0dGkgaSBjcml0ZXJpIGRpIHJpY2VyY2Egc3VsbGUgcmV2aXNpb25pIgorCisjOiBnaXRrOjQwODcKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAiTW9kaWZpY2hlIGFpIGZpbGU6IgorCisjOiBnaXRrOjQwODgKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgIlN0cmluZ2EgZmlzc2EiCisKKyM6IGdpdGs6NDA4OQorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiRXNwcmVzc2lvbmUgcmVnb2xhcmUiCisKKyM6IGdpdGs6NDA5MAorbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICJDZXJjYSBzdHJpbmdhOiIKKworIzogZ2l0azo0MDkxCittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICIiCisiRGF0ZSBkaSByZXZpc2lvbmUgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsICIKKyIyMDA5IDE1OjI3OjM4XCIpOiIKKworIzogZ2l0azo0MDkyCittc2dpZCAiU2luY2U6IgorbXNnc3RyICJEYToiCisKKyM6IGdpdGs6NDA5MworbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAiQToiCisKKyM6IGdpdGs6NDA5NAorbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICJMaW1pdGEgZS9vIHNhbHRhIE4gcmV2aXNpb25pIChpbnRlcm8gcG9zaXRpdm8pOiIKKworIzogZ2l0azo0MDk1Cittc2dpZCAiTnVtYmVyIHRvIHNob3c6IgorbXNnc3RyICJOdW1lcm8gZGkgcmV2aXNpb25pIGRhIG1vc3RyYXJlOiIKKworIzogZ2l0azo0MDk2Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICJOdW1lcm8gZGkgcmV2aXNpb25pIGRhIHNhbHRhcmU6IgorCisjOiBnaXRrOjQwOTcKK21zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgorbXNnc3RyICJBbHRyZSBvcHppb25pOiIKKworIzogZ2l0azo0MDk4Cittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICJPcmRpbmEgc29sbyBwZXIgZGF0YSIKKworIzogZ2l0azo0MDk5Cittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIlNlZ25hIGkgbGF0aSBkZWwgcmFtbyIKKworIzogZ2l0azo0MTAwCittc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgorbXNnc3RyICJMaW1pdGEgYWwgcHJpbW8gZ2VuaXRvcmUiCisKKyM6IGdpdGs6NDEwMQorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICJDcm9ub2xvZ2lhIHNlbXBsaWZpY2F0YSIKKworIzogZ2l0azo0MTAyCittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgIlVsdGVyaW9yaSBhcmdvbWVudGkgZGEgcGFzc2FyZSBhIGdpdCBsb2c6IgorCisjOiBnaXRrOjQxMDMKK21zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKK21zZ3N0ciAiSW5zZXJpcmUgZmlsZSBlIGRpcmVjdG9yeSBkYSBpbmNsdWRlcmUsIHVubyBwZXIgcmlnYToiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJDb21hbmRvIGNoZSBnZW5lcmEgYWx0cmUgcmV2aXNpb25pIGRhIHZpc3VhbGl6emFyZToiCisKKyM6IGdpdGs6NDIyOAorbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azogbW9kaWZpY2EgdmlzdGEiCisKKyM6IGdpdGs6NDIzNgorbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICItLSBjcml0ZXJpIHBlciBsYSBzY2VsdGEgZGVsbGUgcmV2aXNpb25pIgorCisjOiBnaXRrOjQyNDEKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIk5vbWUgdmlzdGEiCisKKyM6IGdpdGs6NDMxNgorbXNnaWQgIkFwcGx5IChGNSkiCittc2dzdHIgIkFwcGxpY2EgKEY1KSIKKworIzogZ2l0azo0MzU0Cittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICJFcnJvcmUgbmVnbGkgYXJnb21lbnRpIGRpIHNlbGV6aW9uZSBkZWxsZSByZXZpc2lvbmk6IgorCisjOiBnaXRrOjQ0MDkgZ2l0azo0NDYyIGdpdGs6NDkyNCBnaXRrOjQ5MzggZ2l0azo2MjA4IGdpdGs6MTIzNzMgZ2l0azoxMjM3NAorbXNnaWQgIk5vbmUiCittc2dzdHIgIk5lc3N1bm8iCisKKyM6IGdpdGs6NTAyMSBnaXRrOjUwMjYKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJEaXNjZW5kZW50ZSIKKworIzogZ2l0azo1MDIyCittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIk5vbiBkaXNjZW5kZW50ZSIKKworIzogZ2l0azo1MDI5IGdpdGs6NTAzNAorbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJBc2NlbmRlbnRlIgorCisjOiBnaXRrOjUwMzAKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIk5vbiBhc2NlbmRlbnRlIgorCisjOiBnaXRrOjUzMjQKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIk1vZGlmaWNoZSBsb2NhbGkgcHJlc2VudGkgbmVsbCdpbmRpY2UgbWEgbm9uIG5lbGwnYXJjaGl2aW8iCisKKyM6IGdpdGs6NTM2MAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICJNb2RpZmljaGUgbG9jYWxpIG5vbiBwcmVzZW50aSBuw6kgbmVsbCdhcmNoaXZpbyBuw6kgbmVsbCdpbmRpY2UiCisKKyM6IGdpdGs6NzEzNAorbXNnaWQgImFuZCBtYW55IG1vcmUiCittc2dzdHIgIiIKKworIzogZ2l0azo3MTM3Cittc2dpZCAibWFueSIKK21zZ3N0ciAibW9sdGkiCisKKyM6IGdpdGs6NzMyOAorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJFdGljaGV0dGU6IgorCisjOiBnaXRrOjczNDUgZ2l0azo3MzUxIGdpdGs6ODgyNQorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAiR2VuaXRvcmUiCisKKyM6IGdpdGs6NzM1NgorbXNnaWQgIkNoaWxkIgorbXNnc3RyICJGaWdsaW8iCisKKyM6IGdpdGs6NzM2NQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiUmFtbyIKKworIzogZ2l0azo3MzY4Cittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAiU2VndWUiCisKKyM6IGdpdGs6NzM3MQorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICJQcmVjZWRlIgorCisjOiBnaXRrOjc5NjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIGxldHR1cmEgZGVsbGUgZGlmZmVyZW56ZToiCisKKyM6IGdpdGs6ODY1MAorbXNnaWQgIkdvdG86IgorbXNnc3RyICJWYWkgYToiCisKKyM6IGdpdGs6ODY3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJMYSBTSEExIGlkIGFiYnJldmlhdGEgJXMgw6ggYW1iaWd1YSIKKworIzogZ2l0azo4Njc4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJMYSByZXZpc2lvbmUgJXMgw6ggc2Nvbm9zY2l1dGEiCisKKyM6IGdpdGs6ODY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJMYSBTSEExIGlkICVzIMOoIHNjb25vc2NpdXRhIgorCisjOiBnaXRrOjg2OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAiTGEgcmV2aXNpb25lICVzIG5vbiDDqCBwcmVzZW50ZSBuZWxsYSB2aXN0YSBhdHR1YWxlIgorCisjOiBnaXRrOjg4MzIgZ2l0azo4ODQ3Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAiRGF0YSIKKworIzogZ2l0azo4ODM1Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIkZpZ2xpIgorCisjOiBnaXRrOjg4OTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiQWdnaW9ybmEgaWwgcmFtbyAlcyBhIHF1ZXN0YSByZXZpc2lvbmUiCisKKyM6IGdpdGs6ODkwMAorbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgorbXNnc3RyICJOZXNzdW4gcmFtbyBhdHRpdm86IHJlc2V0IGltcG9zc2liaWxlIgorCisjOiBnaXRrOjkwMDUgZ2l0azo5MDExCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiU2FsdG8gbGEgcmV2aXNpb25lIGRpIGZ1c2lvbmUgIgorCisjOiBnaXRrOjkwMjAgZ2l0azo5MDI1Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICJFcnJvcmUgbmVsbGEgaWRlbnRpZmljYXppb25lIGRlbGxhIHBhdGNoIHBlciAiCisKKyM6IGdpdGs6OTAyMSBnaXRrOjkwMjYKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgLSBmaW5lXG4iCisKKyM6IGdpdGs6OTAzMSBnaXRrOjkwMzQgZ2l0azo5MDQyIGdpdGs6OTA1NiBnaXRrOjkwNjUKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICJMYSByZXZpc2lvbmUgIgorCisjOiBnaXRrOjkwMzUKK21zZ2lkICIiCisiIGlzIHRoZSBzYW1lIHBhdGNoIGFzXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBoYSBsZSBzdGVzc2UgZGlmZmVyZW56ZSBkaVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0MworbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiDDqCBkaXZlcnNhIGRhXG4iCisiICAgICAgICIKKworIzogZ2l0azo5MDQ1Cittc2dpZCAiIgorIkRpZmYgb2YgY29tbWl0czpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRpZmZlcmVuemUgdHJhIGxlIHJldmlzaW9uaTpcbiIKKyJcbiIKKworIzogZ2l0azo5MDU3IGdpdGs6OTA2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgaGEgJXMgZmlnbGkgLSBmaW5lXG4iCisKKyM6IGdpdGs6OTA4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgorbXNnc3RyICJFcnJvcmUgbmVsbGEgc2NyaXR0dXJhIGRlbGxhIHJldmlzaW9uZSBuZWwgZmlsZTogJXMiCisKKyM6IGdpdGs6OTA5MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIkVycm9yZSBuZWxsZSBkaWZmZXJlbnplIHRyYSBsZSByZXZpc2lvbmk6ICVzIgorCisjOiBnaXRrOjkxMzcKK21zZ2lkICJUb3AiCittc2dzdHIgIkluaXppbyIKKworIzogZ2l0azo5MTM4Cittc2dpZCAiRnJvbSIKK21zZ3N0ciAiRGEiCisKKyM6IGdpdGs6OTE0MworbXNnaWQgIlRvIgorbXNnc3RyICJBIgorCisjOiBnaXRrOjkxNjcKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAiR2VuZXJhIHBhdGNoIgorCisjOiBnaXRrOjkxNjkKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiRGE6IgorCisjOiBnaXRrOjkxNzgKK21zZ2lkICJUbzoiCittc2dzdHIgIkE6IgorCisjOiBnaXRrOjkxODcKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICJJbnZlcnRpIgorCisjOiBnaXRrOjkxODkgZ2l0azo5Mzg1Cittc2dpZCAiT3V0cHV0IGZpbGU6IgorbXNnc3RyICJTY3Jpdmkgc3VsIGZpbGU6IgorCisjOiBnaXRrOjkxOTUKK21zZ2lkICJHZW5lcmF0ZSIKK21zZ3N0ciAiR2VuZXJhIgorCisjOiBnaXRrOjkyMzMKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgIkVycm9yZSBuZWxsYSBjcmVhemlvbmUgZGVsbGEgcGF0Y2g6IgorCisjOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjkyNjUKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIk5vbWUgZXRpY2hldHRhOiIKKworIzogZ2l0azo5MjY4Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgIklsIG1lc3NhZ2dpbyBkZWxsJ2V0aWNoZXR0YSDDqCBvcHppb25hbGUiCisKKyM6IGdpdGs6OTI3MAorbXNnaWQgIlRhZyBtZXNzYWdlOiIKK21zZ3N0ciAiTWVzc2FnZ2lvIGRlbGwnZXRpY2hldHRhOiIKKworIzogZ2l0azo5Mjc0IGdpdGs6OTQzOQorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiQ3JlYSIKKworIzogZ2l0azo5MjkyCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJOZXNzdW5hIGV0aWNoZXR0YSBzcGVjaWZpY2F0YSIKKworIzogZ2l0azo5Mjk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiTCdldGljaGV0dGEgXCIlc1wiIGVzaXN0ZSBnacOgIgorCisjOiBnaXRrOjkzMDYKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgorbXNnc3RyICJFcnJvcmUgbmVsbGEgY3JlYXppb25lIGRlbGwnZXRpY2hldHRhOiIKKworIzogZ2l0azo5MzgyCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIkNvbWFuZG86IgorCisjOiBnaXRrOjkzOTAKK21zZ2lkICJXcml0ZSIKK21zZ3N0ciAiU2NyaXZpIgorCisjOiBnaXRrOjk0MDgKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCittc2dzdHIgIkVycm9yZSBuZWxsYSBzY3JpdHR1cmEgZGVsbGEgcmV2aXNpb25lOiIKKworIzogZ2l0azo5NDM1Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk5vbWU6IgorCisjOiBnaXRrOjk0NTgKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJTcGVjaWZpY2FyZSB1biBub21lIHBlciBpbCBudW92byByYW1vIgorCisjOiBnaXRrOjk0NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAiSWwgcmFtbyAnJXMnIGVzaXN0ZSBnacOgLiBTb3ZyYXNjcml2ZXJlPyIKKworIzogZ2l0azo5NTMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIkxhIHJldmlzaW9uZSAlcyDDqCBnacOgIGluY2x1c2EgbmVsIHJhbW8gJXMgLS0gYXBwbGljYXJsYSBkaSBudW92bz8iCisKKyM6IGdpdGs6OTUzNQorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICIiCisKKyM6IGdpdGs6OTU0NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKKyJQbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBjaGVycnktcGljayBwZXJjaMOpIGlsIGZpbGUgJyVzJyDDqCBzdGF0byBtb2RpZmljYXRvICIKKyJuZWxsYSBkaXJlY3RvcnkgZGkgbGF2b3JvLlxuIgorIlByaW1hIGRpIHJpcHJvdmFyZSwgYmlzb2duYSBjcmVhcmUgdW5hIG51b3ZhIHJldmlzaW9uZSwgYW5udWxsYXJlIGxlICIKKyJtb2RpZmljaGUgbyB1c2FyZSAnZ2l0IHN0YXNoJy4iCisKKyM6IGdpdGs6OTU1MAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGVzZWd1aXJlIGNoZXJyeS1waWNrIGEgY2F1c2EgZGkgdW4gY29uZmxpdHRvIG5lbGxhIGZ1c2lvbmUuXG4iCisiVnVvaSBhdnZpYXJlIGdpdCBjaXRvb2wgcGVyIHJpc29sdmVybG8/IgorCisjOiBnaXRrOjk1NjYgZ2l0azo5NjI0Cittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgIk5lc3N1bmEgbW9kaWZpY2EgYXJjaGl2aWF0YSIKKworIzogZ2l0azo5NTkzCisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBub3QgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZXZlcnQgaXQ/IgorbXNnc3RyICJMYSByZXZpc2lvbmUgJXMgw6ggZ2nDoCBpbmNsdXNhIG5lbCByYW1vICVzIC0tIGFwcGxpY2FybGEgZGkgbnVvdm8/IgorCisjOiBnaXRrOjk1OTgKKyMsIGZ1enp5Cittc2dpZCAiUmV2ZXJ0aW5nIgorbXNnc3RyICJnaXQgcmVzZXQgaW4gY29yc28iCisKKyM6IGdpdGs6OTYwNgorIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczolcyBQbGVhc2UgIgorImNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGVzZWd1aXJlIGNoZXJyeS1waWNrIHBlcmNow6kgaWwgZmlsZSAnJXMnIMOoIHN0YXRvIG1vZGlmaWNhdG8gIgorIm5lbGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8uXG4iCisiUHJpbWEgZGkgcmlwcm92YXJlLCBiaXNvZ25hIGNyZWFyZSB1bmEgbnVvdmEgcmV2aXNpb25lLCBhbm51bGxhcmUgbGUgIgorIm1vZGlmaWNoZSBvIHVzYXJlICdnaXQgc3Rhc2gnLiIKKworIzogZ2l0azo5NjEwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgY2hlcnJ5LXBpY2sgYSBjYXVzYSBkaSB1biBjb25mbGl0dG8gbmVsbGEgZnVzaW9uZS5cbiIKKyJWdW9pIGF2dmlhcmUgZ2l0IGNpdG9vbCBwZXIgcmlzb2x2ZXJsbz8iCisKKyM6IGdpdGs6OTY1MworbXNnaWQgIkNvbmZpcm0gcmVzZXQiCittc2dzdHIgIkNvbmZlcm1hIGdpdCByZXNldCIKKworIzogZ2l0azo5NjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAiQWdnaW9ybmFyZSBpbCByYW1vICVzIGEgJXM/IgorCisjOiBnaXRrOjk2NTcKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiVGlwbyBkaSBhZ2dpb3JuYW1lbnRvOiIKKworIzogZ2l0azo5NjYwCittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgIlNvZnQ6IExhc2NpYSBsYSBkaXJlY29yeSBkaSBsYXZvcm8gZSBsJ2luZGljZSBjb21lIHNvbm8iCisKKyM6IGdpdGs6OTY2MworbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiTWl4ZWQ6IExhc2NpYSBsYSBkaXJlY3RvcnkgZGkgbGF2b3JvIGNvbWUgw6gsIGFnZ2lvcm5hIGwnaW5kaWNlIgorCisjOiBnaXRrOjk2NjYKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkhhcmQ6IEFnZ2lvcm5hIGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8gZSBsJ2luZGljZVxuIgorIihhYmJhbmRvbmEgVFVUVEUgbGUgbW9kaWZpY2hlIGxvY2FsaSkiCisKKyM6IGdpdGs6OTY4MworbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAiZ2l0IHJlc2V0IGluIGNvcnNvIgorCisjOiBnaXRrOjk3NDMKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIkF0dGl2YXppb25lIGluIGNvcnNvIgorCisjOiBnaXRrOjk3OTYKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjYW5jZWxsYXJlIGlsIHJhbW8gYXR0dWFsbWVudGUgYXR0aXZvIgorCisjOiBnaXRrOjk4MDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorIkxlIHJldmlzaW9uaSBuZWwgcmFtbyAlcyBub24gc29ubyBwcmVzZW50aSBzdSBhbHRyaSByYW1pLlxuIgorIkNhbmNlbGxhcmUgaWwgcmFtbyAlcz8iCisKKyM6IGdpdGs6OTgzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAiRXRpY2hldHRlIGUgcmFtaTogJXMiCisKKyM6IGdpdGs6OTg1MAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdHJvIgorCisjOiBnaXRrOjEwMTQ2Cittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisiRXJyb3JlIG5lbGxhIGxldHR1cmEgZGVsbGEgdG9wb2xvZ2lhIGRlbGxlIHJldmlzaW9uaTogbGUgaW5mb3JtYXppb25pIHN1bCAiCisicmFtbyBlIGxlIGV0aWNoZXR0ZSBwcmVjZWRlbnRpIGUgc2VndWVudGkgc2FyYW5ubyBpbmNvbXBsZXRlLiIKKworIzogZ2l0azoxMTEyMworbXNnaWQgIlRhZyIKK21zZ3N0ciAiRXRpY2hldHRhIgorCisjOiBnaXRrOjExMTI3Cittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjExMjEwCittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIlNjZWx0YSBjYXJhdHRlcmkgZ2l0ayIKKworIzogZ2l0azoxMTIyNworbXNnaWQgIkIiCittc2dzdHIgIkIiCisKKyM6IGdpdGs6MTEyMzAKK21zZ2lkICJJIgorbXNnc3RyICJJIgorCisjOiBnaXRrOjExMzQ4Cittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJPcHppb25pIHZpc3VhbGl6emF6aW9uZSBkZWxsJ2VsZW5jbyByZXZpc2lvbmkiCisKKyM6IGdpdGs6MTEzNTEKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgIkxhcmdoZXp6YSBtYXNzaW1hIGRlbCBncmFmaWNvIChpbiBsaW5lZSkiCisKKyM6IGdpdGs6MTEzNTUKKyMsIG5vLXRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICJMYXJnaGV6emEgbWFzc2ltYSBkZWwgZ3JhZmljbyAoJSBkZWwgcGFubmVsbG8pIgorCisjOiBnaXRrOjExMzU4Cittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJNb3N0cmEgbW9kaWZpY2hlIGxvY2FsaSIKKworIzogZ2l0azoxMTM2MQorIywgZnV6enkKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgorbXNnc3RyICJTZWxlemlvbmEgYXV0b21hdGljYW1lbnRlIFNIQTEgaGFzaCIKKworIzogZ2l0azoxMTM2NQorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgIk5hc2NvbmRpIGkgcmlmZXJpbWVudGkgcmVtb3RpIgorCisjOiBnaXRrOjExMzY5Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9wemlvbmkgZGkgdmlzdWFsaXp6YXppb25lIGRlbGxlIGRpZmZlcmVuemUiCisKKyM6IGdpdGs6MTEzNzEKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAiU3BhemlhdHVyYSB0YWJ1bGF6aW9uaSIKKworIzogZ2l0azoxMTM3NAorIywgZnV6enkKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzL2hlYWRzIgorbXNnc3RyICJNb3N0cmEgZXRpY2hldHRlIHZpY2luZSIKKworIzogZ2l0azoxMTM3NworbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCittc2dzdHIgIiIKKworIzogZ2l0azoxMTM4MAorbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiTGltaXRhIGxlIGRpZmZlcmVuemUgYWkgcGVyY29yc2kgZWxlbmNhdGkiCisKKyM6IGdpdGs6MTEzODMKK21zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKK21zZ3N0ciAiQXR0aXZhIGNvZGlmaWNhIGZpbGUgcGVyIGZpbGUiCisKKyM6IGdpdGs6MTEzODkgZ2l0azoxMTUzNgorbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAiVmlzdWFsaXp6YXRvcmUgZGkgZGlmZmVyZW56ZSIKKworIzogZ2l0azoxMTM5MAorbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAiU2NlZ2xpLi4uIgorCisjOiBnaXRrOjExMzk1Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJPcHppb25pIGdlbmVyYWxpIgorCisjOiBnaXRrOjExMzk4Cittc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgorbXNnc3RyICJVdGlsaXp6YSBpbnRlcmZhY2NpYSBhIHRlbWEiCisKKyM6IGdpdGs6MTE0MDAKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIodW5hIG1vZGlmaWNhIHJpY2hpZWRlIGlsIHJpYXZ2aW8pIgorCisjOiBnaXRrOjExNDAyCittc2dpZCAiKGN1cnJlbnRseSB1bmF2YWlsYWJsZSkiCittc2dzdHIgIihtb21lbnRhbmVhbWVudGUgbm9uIGRpc3BvbmliaWxlKSIKKworIzogZ2l0azoxMTQxMworbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJDb2xvcmk6IHByZW1lcmUgcGVyIHNjZWdsaWVyZSIKKworIzogZ2l0azoxMTQxNgorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiSW50ZXJmYWNjaWEiCisKKyM6IGdpdGs6MTE0MTcKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgImludGVyZmFjY2lhIgorCisjOiBnaXRrOjExNDIwCittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAiU2ZvbmRvIgorCisjOiBnaXRrOjExNDIxIGdpdGs6MTE0NTEKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICJzZm9uZG8iCisKKyM6IGdpdGs6MTE0MjQKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICJQcmltbyBwaWFubyIKKworIzogZ2l0azoxMTQyNQorbXNnaWQgImZvcmVncm91bmQiCittc2dzdHIgInByaW1vIHBpYW5vIgorCisjOiBnaXRrOjExNDI4Cittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICJEaWZmOiB2ZWNjaGllIGxpbmVlIgorCisjOiBnaXRrOjExNDI5Cittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgInZlY2NoaWUgbGluZWUiCisKKyM6IGdpdGs6MTE0MzMKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmY6IG51b3ZlIGxpbmVlIgorCisjOiBnaXRrOjExNDM0Cittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgIm51b3ZlIGxpbmVlIgorCisjOiBnaXRrOjExNDM4Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIkRpZmY6IGludGVzdGF6aW9uZSBkZWxsYSBzZXppb25lIgorCisjOiBnaXRrOjExNDQwCittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAiaW50ZXN0YXppb25lIGRlbGxhIHNlemlvbmUiCisKKyM6IGdpdGs6MTE0NDQKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAiU2ZvbmRvIHJpZ2Egc2VsZXppb25hdGEiCisKKyM6IGdpdGs6MTE0NDYKK21zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgorbXNnc3RyICJzZm9uZG8gcmlnYSBzZWxlemlvbmF0YSIKKworIzogZ2l0azoxMTQ1MAorbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAiU2ZvbmRvIgorCisjOiBnaXRrOjExNDU5Cittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiQ2FyYXR0ZXJlOiBwcmVtZXJlIHBlciBzY2VnbGllcmUiCisKKyM6IGdpdGs6MTE0NjEKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIkNhcmF0dGVyZSBwcmluY2lwYWxlIgorCisjOiBnaXRrOjExNDYyCittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIkNhcmF0dGVyZSBwZXIgZGlmZmVyZW56ZSIKKworIzogZ2l0azoxMTQ2MworbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIkNhcmF0dGVyZSBwZXIgaW50ZXJmYWNjaWEgdXRlbnRlIgorCisjOiBnaXRrOjExNDg1Cittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHJlZmVyZW56ZSBnaXRrIgorCisjOiBnaXRrOjExNDk0CisjLCBmdXp6eQorbXNnaWQgIkdlbmVyYWwiCittc2dzdHIgIkdlbmVyYSIKKworIzogZ2l0azoxMTQ5NQorbXNnaWQgIkNvbG9ycyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExNDk2Cittc2dpZCAiRm9udHMiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTU0NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGs6IHNjZWdsaWVyZSB1biBjb2xvcmUgcGVyICVzIgorCisjOiBnaXRrOjEyMDU5Cittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTIyNjkKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICJBcmNoaXZpbyBnaXQgbm9uIHRyb3ZhdG8uIgorCisjOiBnaXRrOjEyMzE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICJBcmdvbWVudG8gYW1iaWd1bzogJyVzJyDDqCBzaWEgcmV2aXNpb25lIGNoZSBub21lIGRpIGZpbGUiCisKKyM6IGdpdGs6MTIzMjgKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICJHaXRrOiBhcmdvbWVudGkgZXJyYXRpOiIKKworI34gbXNnaWQgIm5leHQiCisjfiBtc2dzdHIgInN1Y2MiCisKKyN+IG1zZ2lkICJwcmV2IgorI34gbXNnc3RyICJwcmVjIgorCisjfiBtc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKKyN+IG1zZ3N0ciAiRGlyZWN0b3J5IGdpdCBcIiVzXCIgbm9uIHRyb3ZhdGEuIgpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vamEucG8gYi9naXRrLWdpdC9wby9qYS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTNjMjliCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vamEucG8KQEAgLTAsMCArMSwxMzc5IEBACisjIEphcGFuZXNlIHRyYW5zbGF0aW9ucyBmb3IgZ2l0ayBwYWNrYWdlLgorIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNSBQYXVsIE1hY2tlcnJhcworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIworIyBNaXphciA8bWl6YXIuanBAZ21haWwuY29tPiwgMjAwOS4KKyMgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiwgMjAwOS4KKyMgWU9LT1RBIEhpcm9zaGkgPHlva290YUBuZXRsYWIuY3MudHN1a3ViYS5hYy5qcD4sIDIwMTUuCisjIFNhdG9zaGkgWWFzdXNoaW1hIDxzLnlhc3VzaGltYUBnbWFpbC5jb20+LCAyMDE2LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0a1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wNS0xNyAxNDozMisxMDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0xMS0xMiAxMzowMCswOTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTYXRvc2hpIFlhc3VzaGltYSA8cy55YXN1c2hpbWFAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEphcGFuZXNlXG4iCisiTGFuZ3VhZ2U6IGphXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKworIzogZ2l0azoxNDAKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIuODnuODvOOCuOOBleOCjOOBpuOBhOOBquOBhOODleOCoeOCpOODq+OBruODquOCueODiOOCkuWPluW+l+OBp+OBjeOBvuOBm+OCkzoiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjM4MQorbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICLlpInmm7TjgpLnnYDoibIiCisKKyM6IGdpdGs6MjE3IGdpdGs6MjM4MSBnaXRrOjgyMjEgZ2l0azo4MjU0Cittc2dpZCAiTWFya3VwIHdvcmRzIgorbXNnc3RyICLlpInmm7TjgpLjg57jg7zjgq/jgqLjg4Pjg5ciCisKKyM6IGdpdGs6MzI0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICLjg6rjg5Pjgrjjg6fjg7Pop6PmnpDjgqjjg6njg7w6IgorCisjOiBnaXRrOjM4MAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgIi0tYXJnc2NtZCDjgrPjg57jg7Pjg4nlrp/ooYzjgqjjg6njg7w6IgorCisjOiBnaXRrOjM5MworbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorIuODleOCoeOCpOODq+acqumBuOaKnjogLS1tZXJnZSDjgYzmjIflrprjgZXjgozjgb7jgZfjgZ/jgYzjgIHjg57jg7zjgrjjgZXjgozjgabjgYTjgarjgYTjg5XjgqHjgqTjg6vjga/jgYLjgooiCisi44G+44Gb44KT44CCIgorCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisi44OV44Kh44Kk44Or5pyq6YG45oqeOiAtLW1lcmdlIOOBjOaMh+WumuOBleOCjOOBvuOBl+OBn+OBjOOAgeODleOCoeOCpOODq+WItumZkOWGheOBq+ODnuODvOOCuOOBleOCjOOBpuOBhOOBqiIKKyLjgYTjg5XjgqHjgqTjg6vjga/jgYLjgorjgb7jgZvjgpPjgIIiCisKKyM6IGdpdGs6NDE4IGdpdGs6NTY2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJnaXQgbG9nIOWun+ihjOOCqOODqeODvDoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAi6Kqt44G/6L6844G/5LitIgorCisjOiBnaXRrOjQ5NiBnaXRrOjQ1MjYKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIuOCs+ODn+ODg+ODiOiqreOBv+i+vOOBv+S4rS4uLiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOQorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIuOCs+ODn+ODg+ODiOOBjOmBuOaKnuOBleOCjOOBpuOBhOOBvuOBm+OCkyIKKworIzogZ2l0azoxNDQ1IGdpdGs6NDA0NiBnaXRrOjEyNDQ3Cittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICLjgrPjg57jg7Pjg4nooYwiCisKKyM6IGdpdGs6MTUxMQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiZ2l0IGxvZyDjga7lh7rlipvjgpLop6PmnpDjgafjgY3jgb7jgZvjgpM6IgorCisjOiBnaXRrOjE3NDAKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICLmnInlirnjgarjgrPjg5/jg4Pjg4jjga7mg4XloLHjgYzjgYLjgorjgb7jgZvjgpMiCisKKyM6IGdpdGs6MTkwMyBnaXRrOjE5MzIgZ2l0azo0MzE2IGdpdGs6OTY4NCBnaXRrOjExMjU2IGdpdGs6MTE1MzYKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGdpdGs6MTkzNCBnaXRrOjQzMTggZ2l0azo5MTk3IGdpdGs6OTI3NiBnaXRrOjk0MDYgZ2l0azo5NDU1IGdpdGs6OTY4NgorIzogZ2l0azoxMTI1NyBnaXRrOjExNTM3Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICLjgq3jg6Pjg7Pjgrvjg6siCisKKyM6IGdpdGs6MjA2OQorbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgIuabtOaWsCgmVSkiCisKKyM6IGdpdGs6MjA3MAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgIuODquODreODvOODiSgmUikiCisKKyM6IGdpdGs6MjA3MQorbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKK21zZ3N0ciAi44Oq44OV44Kh44Os44Oz44K544KS5YaN6Kqt44G/6L6844G/KCZGKSIKKworIzogZ2l0azoyMDcyCittc2dpZCAiJkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAi44Oq44OV44Kh44Os44Oz44K544Oq44K544OI44KS6KGo56S6KCZMKSIKKworIzogZ2l0azoyMDc0Cittc2dpZCAiU3RhcnQgZ2l0ICZndWkiCittc2dzdHIgImdpdCBndWkg44Gu6ZaL5aeLKCZHKSIKKworIzogZ2l0azoyMDc2Cittc2dpZCAiJlF1aXQiCittc2dzdHIgIue1guS6higmUSkiCisKKyM6IGdpdGs6MjA2OAorbXNnaWQgIiZGaWxlIgorbXNnc3RyICLjg5XjgqHjgqTjg6soJkYpIgorCisjOiBnaXRrOjIwODAKK21zZ2lkICImUHJlZmVyZW5jZXMiCittc2dzdHIgIuioreWumigmUCkiCisKKyM6IGdpdGs6MjA3OQorbXNnaWQgIiZFZGl0IgorbXNnc3RyICLnt6jpm4YoJkUpIgorCisjOiBnaXRrOjIwODQKK21zZ2lkICImTmV3IHZpZXcuLi4iCittc2dzdHIgIuaWsOimj+ODk+ODpeODvCgmTikuLi4iCisKKyM6IGdpdGs6MjA4NQorbXNnaWQgIiZFZGl0IHZpZXcuLi4iCittc2dzdHIgIuODk+ODpeODvOe3qOmbhigmRSkuLi4iCisKKyM6IGdpdGs6MjA4NgorbXNnaWQgIiZEZWxldGUgdmlldyIKK21zZ3N0ciAi44OT44Ol44O85YmK6ZmkKCZEKSIKKworIzogZ2l0azoyMDg4Cittc2dpZCAiJkFsbCBmaWxlcyIKK21zZ3N0ciAi5YWo44Gm44Gu44OV44Kh44Kk44OrKCZBKSIKKworIzogZ2l0azoyMDgzCittc2dpZCAiJlZpZXciCittc2dzdHIgIuODk+ODpeODvCgmVikiCisKKyM6IGdpdGs6MjA5MyBnaXRrOjIxMDMKK21zZ2lkICImQWJvdXQgZ2l0ayIKK21zZ3N0ciAiZ2l0ayDjgavjgaTjgYTjgaYoJkEpIgorCisjOiBnaXRrOjIwOTQgZ2l0azoyMTA4Cittc2dpZCAiJktleSBiaW5kaW5ncyIKK21zZ3N0ciAi44Kt44O844OQ44Kk44Oz44OH44Kj44Oz44KwKCZLKSIKKworIzogZ2l0azoyMDkyIGdpdGs6MjEwNworbXNnaWQgIiZIZWxwIgorbXNnc3RyICLjg5jjg6vjg5coJkgpIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUzCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgorCisjOiBnaXRrOjIyMjkKK21zZ2lkICJSb3ciCittc2dzdHIgIuihjCIKKworIzogZ2l0azoyMjY3Cittc2dpZCAiRmluZCIKK21zZ3N0ciAi5qSc57SiIgorCisjOiBnaXRrOjIyOTUKK21zZ2lkICJjb21taXQiCittc2dzdHIgIuOCs+ODn+ODg+ODiCIKKworIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODggZ2l0azo0NzExIGdpdGs6NDczNSBnaXRrOjY3NTYgZ2l0azo2ODI4CisjOiBnaXRrOjY5MTMKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAi5ZCr44KAOiIKKworIzogZ2l0azoyMzAyIGdpdGs6MzUyNyBnaXRrOjM1MzIgZ2l0azo0NzY0Cittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICLjg5Hjgrnjga7kuIDpg6g6IgorCisjOiBnaXRrOjIzMDMgZ2l0azo0Nzc4Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgIui/veWKoC/pmaTljrvjgZXjgozjgovmloflrZfliJc6IgorCisjOiBnaXRrOjIzMDQgZ2l0azo0NzgwCittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICLlpInmm7TjgZXjgozjgovmloflrZfliJciCisKKyM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzY3Cittc2dpZCAiRXhhY3QiCittc2dzdHIgIuiLseWtl+OBruWkp+Wwj+OCkuWMuuWIpeOBmeOCiyIKKworIzogZ2l0azoyMzE1IGdpdGs6NDg1NSBnaXRrOjY3MjQKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICLoi7HlrZfjga7lpKflsI/jgpLljLrliKXjgZfjgarjgYQiCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ3MzcgZ2l0azo0ODUzIGdpdGs6NjcyMAorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAi5q2j6KaP6KGo54++IgorCisjOiBnaXRrOjIzMTcgZ2l0azoyMzE4IGdpdGs6NDg3NSBnaXRrOjQ5MDUgZ2l0azo0OTEyIGdpdGs6Njg0OSBnaXRrOjY5MTcKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICLlhajjgabjga7poIXnm64iCisKKyM6IGdpdGs6MjMxOCBnaXRrOjQ4NzIgZ2l0azo0OTA1IGdpdGs6Njc4NworbXNnaWQgIkhlYWRsaW5lIgorbXNnc3RyICLjg5jjg4Pjg4njg6njgqTjg7MiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzIgZ2l0azo2Nzg3IGdpdGs6NjkxNyBnaXRrOjczOTAKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAi44Kz44Oh44Oz44OIIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcyIGdpdGs6NDg3NyBnaXRrOjQ5MTIgZ2l0azo2Nzg3IGdpdGs6NzMyNSBnaXRrOjg4MzEKKyM6IGdpdGs6ODg0NgorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAi5L2c6ICFIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcyIGdpdGs6Njc4NyBnaXRrOjczMjcKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIuOCs+ODn+ODg+ODiOiAhSIKKworIzogZ2l0azoyMzUwCittc2dpZCAiU2VhcmNoIgorbXNnc3RyICLmpJzntKIiCisKKyM6IGdpdGs6MjM1OAorbXNnaWQgIkRpZmYiCittc2dzdHIgIkRpZmYiCisKKyM6IGdpdGs6MjM2MAorbXNnaWQgIk9sZCB2ZXJzaW9uIgorbXNnc3RyICLml6fjg5Djg7zjgrjjg6fjg7MiCisKKyM6IGdpdGs6MjM2MgorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICLmlrDjg5Djg7zjgrjjg6fjg7MiCisKKyM6IGdpdGs6MjM2NAorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIuaWh+iEiOihjOaVsCIKKworIzogZ2l0azoyMzc0Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAi56m655m944Gu6YGV44GE44KS54Sh6KaWIgorCisjOiBnaXRrOjIzNzggZ2l0azoyMzgwIGdpdGs6Nzk2MCBnaXRrOjgyMDcKK21zZ2lkICJMaW5lIGRpZmYiCittc2dzdHIgIuihjOavjuOBrmRpZmYiCisKKyM6IGdpdGs6MjQ0NQorbXNnaWQgIlBhdGNoIgorbXNnc3RyICLjg5Hjg4Pjg4EiCisKKyM6IGdpdGs6MjQ0NworbXNnaWQgIlRyZWUiCittc2dzdHIgIuODhOODquODvCIKKworIzogZ2l0azoyNjE3IGdpdGs6MjYzOAorbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAi44GT44KM44Go6YG45oqe44GX44Gf44Kz44Of44OD44OI44GuZGlmZuOCkuimi+OCiyIKKworIzogZ2l0azoyNjE4IGdpdGs6MjYzOQorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAi6YG45oqe44GX44Gf44Kz44Of44OD44OI44Go44GT44KM44GuZGlmZuOCkuimi+OCiyIKKworIzogZ2l0azoyNjE5IGdpdGs6MjY0MAorbXNnaWQgIk1ha2UgcGF0Y2giCittc2dzdHIgIuODkeODg+ODgeS9nOaIkCIKKworIzogZ2l0azoyNjIwIGdpdGs6OTI1NQorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIuOCv+OCsOeUn+aIkCIKKworIzogZ2l0azoyNjIxCittc2dpZCAiQ29weSBjb21taXQgc3VtbWFyeSIKK21zZ3N0ciAi44Kz44Of44OD44OI44Gu6KaB57SE44KS44Kz44OU44O844GZ44KLIgorCisjOiBnaXRrOjI2MjIgZ2l0azo5Mzg2Cittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIuOCs+ODn+ODg+ODiOOCkuODleOCoeOCpOODq+OBq+abuOOBjeWHuuOBmSIKKworIzogZ2l0azoyNjIzIGdpdGs6OTQ0MworbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICLmlrDopo/jg5bjg6njg7Pjg4HnlJ/miJAiCisKKyM6IGdpdGs6MjYyNAorbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICLjgZPjga7jgrPjg5/jg4Pjg4jjgpLjg4Hjgqfjg6rjg7zjg5Tjg4Pjgq/jgZnjgosiCisKKyM6IGdpdGs6MjYyNQorbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIuODluODqeODs+ODgeOBrkhFQUTjgpLjgZPjgZPjgavjg6rjgrvjg4Pjg4jjgZnjgosiCisKKyM6IGdpdGs6MjYyNgorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIuOBk+OBruOCs+ODn+ODg+ODiOOBq+ODnuODvOOCr+OCkuOBpOOBkeOCiyIKKworIzogZ2l0azoyNjI3Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgIuODnuODvOOCr+OCkuS7mOOBkeOBn+aJgOOBq+aIu+OCiyIKKworIzogZ2l0azoyNjI4Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIuOBk+OCjOOBqOODnuODvOOCr+OCkuOBpOOBkeOBn+aJgOOBqOOBruWtkOWtq+OCkuimi+OBpOOBkeOCiyIKKworIzogZ2l0azoyNjI5Cittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIuODnuODvOOCr+OCkuS7mOOBkeOBn+OCs+ODn+ODg+ODiOOBqOavlOi8g+OBmeOCiyIKKworIzogZ2l0azoyNjMwIGdpdGs6MjY0MQorbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgorbXNnc3RyICLjgZPjgozjgajjg57jg7zjgq/jgpLku5jjgZHjgZ/jgrPjg5/jg4Pjg4jjga5kaWZm44KS6KaL44KLIgorCisjOiBnaXRrOjI2MzEgZ2l0azoyNjQyCittc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCittc2dzdHIgIuODnuODvOOCr+OCkuS7mOOBkeOBn+OCs+ODn+ODg+ODiOOBqOOBk+OCjOOBrmRpZmbjgpLopovjgosiCisKKyM6IGdpdGs6MjYzMgorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAi44GT44Gu44Kz44Of44OD44OI44KS5pKk5Zue44GZ44KLIgorCisjOiBnaXRrOjI2NDgKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIuOBk+OBruODluODqeODs+ODgeOCkuODgeOCp+ODg+OCr+OCouOCpuODiOOBmeOCiyIKKworIzogZ2l0azoyNjQ5Cittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICLjgZPjga7jg5bjg6njg7Pjg4HjgpLpmaTljrvjgZnjgosiCisKKyM6IGdpdGs6MjY1MAorbXNnaWQgIkNvcHkgYnJhbmNoIG5hbWUiCittc2dzdHIgIuODluODqeODs+ODgeWQjeOCkuOCs+ODlOODvOOBmeOCiyIKKworIzogZ2l0azoyNjU3Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICLjgZPjgozjgoLjg4/jgqTjg6njgqTjg4jjgZXjgZvjgosiCisKKyM6IGdpdGs6MjY1OAorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIuOBk+OCjOOBoOOBkeOCkuODj+OCpOODqeOCpOODiOOBleOBm+OCiyIKKworIzogZ2l0azoyNjU5Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAi5aSW6YOoZGlmZuODhOODvOODqyIKKworIzogZ2l0azoyNjYwCittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAi6Kaq44Kz44Of44OD44OI44GL44KJIGJsYW1lIOOCkuOBi+OBkeOCiyIKKworIzogZ2l0azoyNjYxCittc2dpZCAiQ29weSBwYXRoIgorbXNnc3RyICLjg5HjgrnlkI3jgpLjgrPjg5Tjg7zjgZnjgosiCisKKyM6IGdpdGs6MjY2OAorbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAi44GT44Gu6KGM44Gu5Ye66Ieq44KS6KGo56S644GZ44KLIgorCisjOiBnaXRrOjI2NjkKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgIuOBk+OBruihjOOBqyBnaXQgZ3VpIOOBpyBibGFtZSDjgpLjgYvjgZHjgosiCisKKyM6IGdpdGs6MzAxMworbXNnaWQgIkFib3V0IGdpdGsiCittc2dzdHIgImdpdGsg44Gr44Gk44GE44GmIgorCisjOiBnaXRrOjMwMTUKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIiIKKyJcbiIKKyJHaXRrIC0gZ2l044Kz44Of44OD44OI44OT44Ol44O844KiXG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIuS9v+eUqOOBiuOCiOOBs+WGjemFjeW4g+OBryBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSDjgavlvpPjgaPjgabjgY/jgaDjgZXjgYQiCisKKyM6IGdpdGs6MzAyMyBnaXRrOjMwOTAgZ2l0azo5ODcyCittc2dpZCAiQ2xvc2UiCittc2dzdHIgIumWieOBmOOCiyIKKworIzogZ2l0azozMDQ0Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIkdpdGsg44Kt44O844OQ44Kk44Oz44OH44Kj44Oz44KwIgorCisjOiBnaXRrOjMwNDcKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIkdpdGsg44Kt44O844OQ44Kk44Oz44OH44Kj44Oz44KwOiIKKworIzogZ2l0azozMDQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVE+XHRcdFF1aXQiCittc2dzdHIgIjwlcy1RPlx0XHTntYLkuoYiCisKKyM6IGdpdGs6MzA1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCittc2dzdHIgIjwlcy1XPlx0XHTjgqbjgqPjg7Pjg4njgqbjgpLplonjgZjjgosiCisKKyM6IGdpdGs6MzA1MQorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPEhvbWU+XHRcdOacgOWIneOBruOCs+ODn+ODg+ODiOOBq+enu+WLlSIKKworIzogZ2l0azozMDUyCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx05pyA5b6M44Gu44Kz44Of44OD44OI44Gr56e75YuVIgorCisjOiBnaXRrOjMwNTMKK21zZ2lkICI8VXA+LCBwLCBrXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxVcD4sIHAsIGtcdOS4gOOBpOS4iuOBruOCs+ODn+ODg+ODiOOBq+enu+WLlSIKKworIzogZ2l0azozMDU0Cittc2dpZCAiPERvd24+LCBuLCBqXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKK21zZ3N0ciAiPERvd24+LCBuLCBqXHTkuIDjgaTkuIvjga7jgrPjg5/jg4Pjg4jjgavnp7vli5UiCisKKyM6IGdpdGs6MzA1NQorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxMZWZ0PiwgeiwgaFx05bGl5q2044Gu5YmN44Gr5oi744KLIgorCisjOiBnaXRrOjMwNTYKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPFJpZ2h0PiwgeCwgbFx05bGl5q2044Gu5qyh44G46YCy44KAIgorCisjOiBnaXRrOjMwNTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbj5cdEdvIHRvIG4tdGggcGFyZW50IG9mIGN1cnJlbnQgY29tbWl0IGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPCVzLW4o5pWw5a2XKT5cdOWxpeattOS4iuOBp+ePvuWcqOOBruOCs+ODn+ODg+ODiOOBruimquOCs+ODn+ODg+ODiOOBruWGheOBrm4o5pWw5a2XKeeVquebruOBruOCs+ODn+ODg+ODiOOBuOenu+WLlSIKKworIzogZ2l0azozMDU4Cittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlVXA+XHTjgrPjg5/jg4Pjg4jjg6rjgrnjg4jjga7kuIDjgaTkuIrjga7jg5rjg7zjgrjjgavnp7vli5UiCisKKyM6IGdpdGs6MzA1OQorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VEb3duPlx044Kz44Of44OD44OI44Oq44K544OI44Gu5LiA44Gk5LiL44Gu44Oa44O844K444Gr56e75YuVIgorCisjOiBnaXRrOjMwNjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1Ib21lPlx044Kz44Of44OD44OI44Oq44K544OI44Gu5LiA55Wq5LiK44Gr44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjMwNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZD5cdOOCs+ODn+ODg+ODiOODquOCueODiOOBruS4gOeVquS4i+OBq+OCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azozMDYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtVXA+XHTjgrPjg5/jg4Pjg4jjg6rjgrnjg4jjga7kuIDjgaTkuIvjga7ooYzjgavjgrnjgq/jg63jg7zjg6vjgZnjgosiCisKKyM6IGdpdGs6MzA2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1Eb3duPlx044Kz44Of44OD44OI44Oq44K544OI44Gu5LiA44Gk5LiL44Gu6KGM44Gr44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjMwNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZVVwPlx044Kz44Of44OD44OI44Oq44K544OI44Gu5LiK44Gu44Oa44O844K444Gr44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjMwNjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VEb3duPlx044Kz44Of44OD44OI44Oq44K544OI44Gu5LiL44Gu44Oa44O844K444Gr44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjMwNjYKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1VcD5cdOW+jOaWueOCkuaknOe0oiAo5LiK5pa544Gu44O75paw44GX44GE44Kz44Of44OD44OIKSIKKworIzogZ2l0azozMDY3Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1Eb3duPlx05YmN5pa544KS5qSc57Si77yI5LiL5pa544Gu44O75Y+k44GE44Kz44Of44OD44OI77yJIgorCisjOiBnaXRrOjMwNjgKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPERlbGV0ZT4sIGJcdGRpZmbnlLvpnaLjgpLkuIrjga7jg5rjg7zjgrjjgavjgrnjgq/jg63jg7zjg6vjgZnjgosiCisKKyM6IGdpdGs6MzA2OQorbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8QmFja3NwYWNlPlx0ZGlmZueUu+mdouOCkuS4iuOBruODmuODvOOCuOOBq+OCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azozMDcwCittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxTcGFjZT5cdFx0ZGlmZueUu+mdouOCkuS4i+OBruODmuODvOOCuOOBq+OCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azozMDcxCittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdGRpZmbnlLvpnaLjgpLkuIrjgasxOOihjOOCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azozMDcyCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0ZGlmZueUu+mdouOCkuS4i+OBqzE46KGM44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjMwNzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdOaknOe0oiIKKworIzogZ2l0azozMDc0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdOasoeOCkuaknOe0ouOBl+OBpuenu+WLlSIKKworIzogZ2l0azozMDc1Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdOasoeOCkuaknOe0ouOBl+OBpuenu+WLlSIKKworIzogZ2l0azozMDc2Cittc2dpZCAiZ1x0XHRHbyB0byBjb21taXQiCittc2dzdHIgImdcdFx05oyH5a6a44GX44Gm44Kz44Of44OD44OI44Gr56e75YuVIgorCisjOiBnaXRrOjMwNzcKK21zZ2lkICIvXHRcdEZvY3VzIHRoZSBzZWFyY2ggYm94IgorbXNnc3RyICIvXHRcdOaknOe0ouODnOODg+OCr+OCueOBq+ODleOCqeODvOOCq+OCuSIKKworIzogZ2l0azozMDc4Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdOWJjeOCkuaknOe0ouOBl+OBpuenu+WLlSIKKworIzogZ2l0azozMDc5Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHTmrKHjga7jg5XjgqHjgqTjg6vjgatkaWZm55S76Z2i44KS44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjMwODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRkaWZm55S76Z2i44Gu5qyh44KS5qSc57SiIgorCisjOiBnaXRrOjMwODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0ZGlmZueUu+mdouOBruWJjeOCkuaknOe0oiIKKworIzogZ2l0azozMDgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdOaWh+Wtl+OCteOCpOOCuuOCkuaLoeWkpyIKKworIzogZ2l0azozMDgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1wbHVzPlx05paH5a2X44K144Kk44K644KS5ouh5aSnIgorCisjOiBnaXRrOjMwODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1AtPlx05paH5a2X44K144Kk44K644KS57iu5bCPIgorCisjOiBnaXRrOjMwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1taW51cz5cdOaWh+Wtl+OCteOCpOOCuuOCkue4ruWwjyIKKworIzogZ2l0azozMDg2Cittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx05pu05pawIgorCisjOiBnaXRrOjM1NTEgZ2l0azozNTYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgIuS4gOaZguODh+OCo+ODrOOCr+ODiOODqiAlcyDnlJ/miJDmmYLjgqjjg6njg7w6IgorCisjOiBnaXRrOjM1NzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAiXCIlc1wiIOOBruOCqOODqeODvOOBjCAlcyDjgavnmbrnlJ86IgorCisjOiBnaXRrOjM2MzYKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgIuOCs+ODnuODs+ODieWkseaVlzoiCisKKyM6IGdpdGs6Mzc4NQorbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICLjgZ3jga7jgojjgYbjgarjgrPjg5/jg4Pjg4jjga/jgYLjgorjgb7jgZvjgpMiCisKKyM6IGdpdGs6Mzc5OQorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZTog44Kz44Oe44Oz44OJ5aSx5pWXOiIKKworIzogZ2l0azozODMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAi44Oe44O844K444GZ44KLIEhFQUQg44KS6Kqt44G/6L6844KB44G+44Gb44KTOiAlcyIKKworIzogZ2l0azozODM4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIuOCpOODs+ODh+ODg+OCr+OCueiqreOBv+i+vOOBv+OCqOODqeODvDogJXMiCisKKyM6IGdpdGs6Mzg2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgImdpdCBibGFtZSDjgpLlp4vjgoHjgonjgozjgb7jgZvjgpM6ICVzIgorCisjOiBnaXRrOjM4NjYgZ2l0azo2NzU1Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICLmpJzntKLkuK0iCisKKyM6IGdpdGs6Mzg5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiZ2l0IGJsYW1lIOWun+ihjOOCqOODqeODvDogJXMiCisKKyM6IGdpdGs6MzkyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIuOCs+ODn+ODg+ODiCAlcyDjgavnlLHmnaXjgZnjgovjgZ3jga7ooYzjga/jgIHjgZPjga7jg5Pjg6Xjg7zjgavooajnpLrjgZXjgozjgabjgYTjgb7jgZvjgpMiCisKKyM6IGdpdGs6Mzk0MAorbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgIuWklumDqGRpZmbjg5Pjg6Xjg7zjgqLjgYzlpLHmlZc6IgorCisjOiBnaXRrOjQwNDQKK21zZ2lkICJBbGwgZmlsZXMiCittc2dzdHIgIuWFqOOBpuOBruODleOCoeOCpOODqyIKKworIzogZ2l0azo0MDY4Cittc2dpZCAiVmlldyIKK21zZ3N0ciAi44OT44Ol44O8IgorCisjOiBnaXRrOjQwNzEKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiR2l0ayDjg5Pjg6Xjg7zlrprnvqkiCisKKyM6IGdpdGs6NDA3NQorbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAi44GT44Gu44OT44Ol44O844KS6KiY5oa244GZ44KLIgorCisjOiBnaXRrOjQwNzYKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICLjg6rjg5XjgqHjg6zjg7PjgrnvvIjjgrnjg5rjg7zjgrnljLrliIfjgorjga7jg6rjgrnjg4jvvIk6IgorCisjOiBnaXRrOjQwNzcKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICLjg5bjg6njg7Pjg4HvvIbjgr/jgrA6IgorCisjOiBnaXRrOjQwNzgKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAi5YWo44Gm44Gu44Oq44OV44Kh44Os44Oz44K5IgorCisjOiBnaXRrOjQwNzkKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAi5YWo44Gm44Gu77yI44Ot44O844Kr44Or44Gq77yJ44OW44Op44Oz44OBIgorCisjOiBnaXRrOjQwODAKK21zZ2lkICJBbGwgdGFncyIKK21zZ3N0ciAi5YWo44Gm44Gu44K/44KwIgorCisjOiBnaXRrOjQwODEKK21zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICLlhajjgabjga7jg6rjg6Ljg7zjg4jov73ot6Hjg5bjg6njg7Pjg4EiCisKKyM6IGdpdGs6NDA4MgorbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgIuOCs+ODn+ODg+ODiOaDheWgse+8iOato+imj+ihqOePvu+8iToiCisKKyM6IGdpdGs6NDA4MworbXNnaWQgIkF1dGhvcjoiCittc2dzdHIgIuS9nOiAhToiCisKKyM6IGdpdGs6NDA4NAorbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIuOCs+ODn+ODg+ODiOiAhToiCisKKyM6IGdpdGs6NDA4NQorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi44Kz44Of44OD44OI44Oh44OD44K744O844K4OiIKKworIzogZ2l0azo0MDg2Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIuOCs+ODn+ODg+ODiOaDheWgseOBruWFqOOBpuOBruadoeS7tuOBq+S4gOiHtCIKKworIzogZ2l0azo0MDg3Cittc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAi44Kz44Of44OD44OI5oOF5aCx44Gu5YWo44Gm44Gu5p2h5Lu244Gr5LiN5LiA6Ie0IgorCisjOiBnaXRrOjQwODgKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAi5aSJ5pu044GX44Gf44OV44Kh44Kk44OrOiIKKworIzogZ2l0azo0MDg5Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICLlm7rlrprmloflrZfliJciCisKKyM6IGdpdGs6NDA5MAorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAi5q2j6KaP6KGo54++IgorCisjOiBnaXRrOjQwOTEKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAi5qSc57Si5paH5a2X5YiXOiIKKworIzogZ2l0azo0MDkyCittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICIiCisi44Kz44Of44OD44OI5pel5pmCIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCisKKyM6IGdpdGs6NDA5MworbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAi5pyf6ZaT44Gu5aeL44KBOiIKKworIzogZ2l0azo0MDk0Cittc2dpZCAiVW50aWw6IgorbXNnc3RyICLmnJ/plpPjga7ntYLjgo/jgoo6IgorCisjOiBnaXRrOjQwOTUKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAi5Yi26ZmQ44O755yB55Wl44GZ44KL44Oq44OT44K444On44Oz44Gu5pWw77yI5q2j44Gu5pW05pWw77yJOiIKKworIzogZ2l0azo0MDk2Cittc2dpZCAiTnVtYmVyIHRvIHNob3c6IgorbXNnc3RyICLooajnpLrjgZnjgovmlbA6IgorCisjOiBnaXRrOjQwOTcKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIuecgeeVpeOBmeOCi+aVsDoiCisKKyM6IGdpdGs6NDA5OAorbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIuOBneOBruS7luOBruOCquODl+OCt+ODp+ODszoiCisKKyM6IGdpdGs6NDA5OQorbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKK21zZ3N0ciAi5Y6z5a+G44Gr5pel5LuY6aCG44Gn5Lim44Gz5pu/44GIIgorCisjOiBnaXRrOjQxMDAKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAi5YG05p6d44Oe44O844KvIgorCisjOiBnaXRrOjQxMDEKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgIuacgOWIneOBruimquOBq+WItumZkCIKKworIzogZ2l0azo0MTAyCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIuewoeaYk+OBquWxpeattCIKKworIzogZ2l0azo0MTAzCittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgImdpdCBsb2cg44G444Gu6L+95Yqg44Gu5byV5pWwOiIKKworIzogZ2l0azo0MTA0Cittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIuWQq+OBvuOCjOOCi+ODleOCoeOCpOODq+ODu+ODh+OCo+ODrOOCr+ODiOODquOCkuS4gOihjOOBlOOBqOOBq+WFpeWKmzoiCisKKyM6IGdpdGs6NDEwNQorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICLjgrPjg5/jg4Pjg4jov73liqDjgrPjg57jg7Pjg4k6IgorCisjOiBnaXRrOjQyMjkKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGs6IOODk+ODpeODvOe3qOmbhiIKKworIzogZ2l0azo0MjM3Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIuKAlSDjg6rjg5Pjgrjjg6fjg7Pjga7pgbjmip7mnaHku7YiCisKKyM6IGdpdGs6NDI0MgorbXNnaWQgIlZpZXcgTmFtZSIKK21zZ3N0ciAi44OT44Ol44O85ZCNOiIKKworIzogZ2l0azo0MzE3Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAi6YGp55SoIChGNSkiCisKKyM6IGdpdGs6NDM1NQorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAi44Kz44Of44OD44OI6YG45oqe5byV5pWw44Gu44Ko44Op44O8OiIKKworIzogZ2l0azo0NDEwIGdpdGs6NDQ2MyBnaXRrOjQ5MjUgZ2l0azo0OTM5IGdpdGs6NjIwOSBnaXRrOjEyMzg4IGdpdGs6MTIzODkKK21zZ2lkICJOb25lIgorbXNnc3RyICLnhKHjgZciCisKKyM6IGdpdGs6NTAyMiBnaXRrOjUwMjcKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICLlrZDlrasiCisKKyM6IGdpdGs6NTAyMworbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICLpnZ7lrZDlrasiCisKKyM6IGdpdGs6NTAzMCBnaXRrOjUwMzUKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAi56WW5YWIIgorCisjOiBnaXRrOjUwMzEKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIumdnuelluWFiCIKKworIzogZ2l0azo1MzI1Cittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICLjgrnjg4bjg7zjgrjjgZXjgozjgZ/jgIHjgrPjg5/jg4Pjg4jliY3jga7jg63jg7zjgqvjg6vjgarlpInmm7QiCisKKyM6IGdpdGs6NTM2MQorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICLjgrnjg4bjg7zjgrjjgZXjgozjgabjgYTjgarjgYTjgIHjgrPjg5/jg4Pjg4jliY3jga7jg63jg7zjgqvjg6vjgarlpInmm7QiCisKKyM6IGdpdGs6NzEzNQorbXNnaWQgImFuZCBtYW55IG1vcmUiCittc2dzdHIgIuS7luWkmuaVsCIKKworIzogZ2l0azo3MTM4Cittc2dpZCAibWFueSIKK21zZ3N0ciAi5aSa5pWwIgorCisjOiBnaXRrOjczMjkKK21zZ2lkICJUYWdzOiIKK21zZ3N0ciAi44K/44KwOiIKKworIzogZ2l0azo3MzQ2IGdpdGs6NzM1MiBnaXRrOjg4MjYKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgIuimqiIKKworIzogZ2l0azo3MzU3Cittc2dpZCAiQ2hpbGQiCittc2dzdHIgIuWtkCIKKworIzogZ2l0azo3MzY2Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICLjg5bjg6njg7Pjg4EiCisKKyM6IGdpdGs6NzM2OQorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgIuS4i+S9jSIKKworIzogZ2l0azo3MzcyCittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIuS4iuS9jSIKKworIzogZ2l0azo3OTY3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgImRpZmblj5blvpfjgqjjg6njg7w6ICVzIgorCisjOiBnaXRrOjg2NTEKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiR290bzoiCisKKyM6IGdpdGs6ODY3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICIlcyDjgpLlkKvjgoAgU0hBMSBJRCDjga/opIfmlbDlrZjlnKjjgZfjgb7jgZkiCisKKyM6IGdpdGs6ODY3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAi44Oq44OT44K444On44OzICVzIOOBr+S4jeaYjuOBp+OBmSIKKworIzogZ2l0azo4Njg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIlNIQTEgaWQgJXMg44Gv5LiN5piO44Gn44GZIgorCisjOiBnaXRrOjg2OTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAi44Oq44OT44K444On44OzICVzIOOBr+ePvuWcqOOBruODk+ODpeODvOOBq+OBr+OBguOCiuOBvuOBm+OCkyIKKworIzogZ2l0azo4ODMzIGdpdGs6ODg0OAorbXNnaWQgIkRhdGUiCittc2dzdHIgIuaXpeS7mCIKKworIzogZ2l0azo4ODM2Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIuWtkCIKKworIzogZ2l0azo4ODk5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIiVzIOODluODqeODs+ODgeOCkuOBk+OBk+OBq+ODquOCu+ODg+ODiOOBmeOCiyIKKworIzogZ2l0azo4OTAxCittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgIuWIh+OCiumbouOBleOCjOOBn0hFQUQ6IOODquOCu+ODg+ODiOOBp+OBjeOBvuOBm+OCkyIKKworIzogZ2l0azo5MDA2IGdpdGs6OTAxMgorbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCittc2dzdHIgIuOCs+ODn+ODg+ODiOODnuODvOOCuOOCkuOCueOCreODg+ODlzogIgorCisjOiBnaXRrOjkwMjEgZ2l0azo5MDI2Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICLjg5Hjg4Pjg4Hlj5blvpfjgqjjg6njg7w6IElEICIKKworIzogZ2l0azo5MDIyIGdpdGs6OTAyNworbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIOWBnOatolxuIgorCisjOiBnaXRrOjkwMzIgZ2l0azo5MDM1IGdpdGs6OTA0MyBnaXRrOjkwNTcgZ2l0azo5MDY2Cittc2dpZCAiQ29tbWl0ICIKK21zZ3N0ciAi44Kz44Of44OD44OIICIKKworIzogZ2l0azo5MDM2Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIg44Gv5LiL6KiY44Gu44OR44OD44OB44Go5ZCM562JXG4iCisiICAgICAgICIKKworIzogZ2l0azo5MDQ0Cittc2dpZCAiIgorIiBkaWZmZXJzIGZyb21cbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIOS4i+iomOOBi+OCieOBrmRpZmZcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDYKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICIiCisi44Kz44Of44OD44OI44GuZGlmZjpcbiIKKyJcbiIKKworIzogZ2l0azo5MDU4IGdpdGs6OTA2NworIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICIg44Gr44GvICVzIOOBruWtkOOBjOOBguOCiuOBvuOBmSAtIOWBnOatolxuIgorCisjOiBnaXRrOjkwODYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAi44OV44Kh44Kk44Or44G444Gu44Kz44Of44OD44OI5pu444GN5Ye644GX44Ko44Op44O8OiAlcyIKKworIzogZ2l0azo5MDkyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKK21zZ3N0ciAi44Kz44Of44OD44OI44GuZGlmZuWun+ihjOOCqOODqeODvDogJXMiCisKKyM6IGdpdGs6OTEzOAorbXNnaWQgIlRvcCIKK21zZ3N0ciAiVG9wIgorCisjOiBnaXRrOjkxMzkKK21zZ2lkICJGcm9tIgorbXNnc3RyICJGcm9tIgorCisjOiBnaXRrOjkxNDQKK21zZ2lkICJUbyIKK21zZ3N0ciAiVG8iCisKKyM6IGdpdGs6OTE2OAorbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICLjg5Hjg4Pjg4HnlJ/miJAiCisKKyM6IGdpdGs6OTE3MAorbXNnaWQgIkZyb206IgorbXNnc3RyICJGcm9tOiIKKworIzogZ2l0azo5MTc5Cittc2dpZCAiVG86IgorbXNnc3RyICJUbzoiCisKKyM6IGdpdGs6OTE4OAorbXNnaWQgIlJldmVyc2UiCittc2dzdHIgIumAhiIKKworIzogZ2l0azo5MTkwIGdpdGs6OTQwMAorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAi5Ye65Yqb44OV44Kh44Kk44OrOiIKKworIzogZ2l0azo5MTk2Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIueUn+aIkCIKKworIzogZ2l0azo5MjM0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICLjg5Hjg4Pjg4HnlJ/miJDjgqjjg6njg7w6IgorCisjOiBnaXRrOjkyNTcgZ2l0azo5Mzg4IGdpdGs6OTQ0NQorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjkyNjYKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIuOCv+OCsOWQjToiCisKKyM6IGdpdGs6OTI2OQorbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICLjgr/jgrDjg6Hjg4Pjgrvjg7zjgrjjgpLku5jjgZHjgovkuovjgoLlh7rmnaXjgb7jgZkiCisKKyM6IGdpdGs6OTI3MQorbXNnaWQgIlRhZyBtZXNzYWdlOiIKK21zZ3N0ciAi44K/44Kw44Oh44OD44K744O844K4OiIKKworIzogZ2l0azo5Mjc1IGdpdGs6OTQ1NAorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAi55Sf5oiQIgorCisjOiBnaXRrOjkyOTMKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIuOCv+OCsOOBruWQjeensOOBjOaMh+WumuOBleOCjOOBpuOBhOOBvuOBm+OCkyIKKworIzogZ2l0azo5Mjk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi44K/44KwIFwiJXNcIiDjga/ml6LjgavlrZjlnKjjgZfjgb7jgZkiCisKKyM6IGdpdGs6OTMwNworbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIuOCv+OCsOeUn+aIkOOCqOODqeODvDoiCisKKyM6IGdpdGs6OTM5NworbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICLjgrPjg57jg7Pjg4k6IgorCisjOiBnaXRrOjk0MDUKK21zZ2lkICJXcml0ZSIKK21zZ3N0ciAi5pu444GN5Ye644GXIgorCisjOiBnaXRrOjk0MjMKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCittc2dzdHIgIuOCs+ODn+ODg+ODiOabuOOBjeWHuuOBl+OCqOODqeODvDoiCisKKyM6IGdpdGs6OTQ1MAorbXNnaWQgIk5hbWU6IgorbXNnc3RyICLlkI3liY06IgorCisjOiBnaXRrOjk0NzMKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICLmlrDjgZfjgYTjg5bjg6njg7Pjg4Hjga7lkI3liY3jgpLmjIflrprjgZfjgabjgY/jgaDjgZXjgYQiCisKKyM6IGdpdGs6OTQ3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICLjg5bjg6njg7Pjg4EgJyVzJyDjga/ml6LjgavlrZjlnKjjgZfjgb7jgZnjgILkuIrmm7jjgY3jgZfjgb7jgZnjgYvvvJ8iCisKKyM6IGdpdGs6OTU0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICIiCisi44Kz44Of44OD44OIICVzIOOBr+aXouOBq+ODluODqeODs+ODgSAlcyDjgavlkKvjgb7jgozjgabjgYTjgb7jgZkg4oCVIOacrOW9k+OBq+OBk+OCjOOCkuWGjemBqeeUqOOBl+OBvuOBmeOBi++8nyIKKworIzogZ2l0azo5NTUwCittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIuODgeOCp+ODquODvOODlOODg+OCr+S4rSIKKworIzogZ2l0azo5NTU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIuODleOCoeOCpOODqyAnJXMnIOOBruODreODvOOCq+ODq+OBquWkieabtOOBruOBn+OCgeOBq+ODgeOCp+ODquODvOODlOODg+OCr+OBr+WkseaVl+OBl+OBvuOBl+OBn+OAglxuIgorIuOBguOBquOBn+OBruWkieabtOOBqyBjb21taXQsIHJlc2V0LCBzdGFzaCDjga7jgYTjgZrjgozjgYvjgpLooYzjgaPjgabjgYvjgonjgoTjgornm7TjgZfjgabjgY/jgaDjgZUiCisi44GE44CCIgorCisjOiBnaXRrOjk1NjUKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyLjg57jg7zjgrjjga7ooZ3nqoHjgavjgojjgaPjgabjg4Hjgqfjg6rjg7zjg5Tjg4Pjgq/jga/lpLHmlZfjgZfjgb7jgZfjgZ/jgIJcbiIKKyLjgZPjga7op6Pmsbrjga7jgZ/jgoHjgasgZ2l0IGNpdG9vbCDjgpLlrp/ooYzjgZfjgZ/jgYTjgafjgZnjgYvvvJ8iCisKKyM6IGdpdGs6OTU4MSBnaXRrOjk2MzkKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAi5L2V44Gu5aSJ5pu044KC44Kz44Of44OD44OI44GV44KM44Gm44GE44G+44Gb44KTIgorCisjOiBnaXRrOjk2MDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKK21zZ3N0ciAi44Kz44Of44OD44OIICVzIOOBr+aXouOBq+ODluODqeODs+ODgSAlcyDjgavlkKvjgb7jgozjgabjgYTjgb7jgZkg4oCVIOacrOW9k+OBq+OBk+OCjOOCkuaSpOWbnuOBl+OBvuOBmeOBi++8nyIKKworIzogZ2l0azo5NjEzCittc2dpZCAiUmV2ZXJ0aW5nIgorbXNnc3RyICLmkqTlm57kuK0iCisKKyM6IGdpdGs6OTYyMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCisiY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICLjg5XjgqHjgqTjg6sgJyVzJyDjga7jg63jg7zjgqvjg6vjgarlpInmm7Tjga7jgZ/jgoHjgavmkqTlm57jga/lpLHmlZfjgZfjgb7jgZfjgZ/jgIIg44GC44Gq44Gf44Gu5aSJ5pu044GrIGNvbW1pdCwgcmVzZXQsIHN0YXNoIOOBruOBhOOBmuOCjOOBi+OCkuihjOOBo+OBpuOBi+OCieOChOOCiuebtOOBl+OBpuOBj+OBoOOBleOBhOOAgiIKKworIzogZ2l0azo5NjI1Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyIgRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyLjg57jg7zjgrjjga7ooZ3nqoHjgavjgojjgaPjgabmkqTlm57jga/lpLHmlZfjgZfjgb7jgZfjgZ/jgIJcbiIKKyLjgZPjga7op6Pmsbrjga7jgZ/jgoHjgasgZ2l0IGNpdG9vbCDjgpLlrp/ooYzjgZfjgZ/jgYTjgafjgZnjgYvvvJ8iCisKKyM6IGdpdGs6OTY2OAorbXNnaWQgIkNvbmZpcm0gcmVzZXQiCittc2dzdHIgIueiuuiqjeOCkuWPluOCiua2iOOBmSIKKworIzogZ2l0azo5NjcwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAi44OW44Op44Oz44OBICVzIOOCkiAlcyDjgavjg6rjgrvjg4Pjg4jjgZfjgb7jgZnjgYvvvJ8iCisKKyM6IGdpdGs6OTY3MgorbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICJSZXNldCDjgr/jgqTjg5c6IgorCisjOiBnaXRrOjk2NzUKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiU29mdDog5L2c5qWt44OE44Oq44O844KC44Kk44Oz44OH44OD44Kv44K544KC44Gd44Gu44G+44G+44Gr44GZ44KLIgorCisjOiBnaXRrOjk2NzgKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgIk1peGVkOiDkvZzmpa3jg4Tjg6rjg7zjgpLjgZ3jga7jgb7jgb7jgavjgZfjgabjgIHjgqTjg7Pjg4fjg4Pjgq/jgrnjgpLjg6rjgrvjg4Pjg4giCisKKyM6IGdpdGs6OTY4MQorbXNnaWQgIiIKKyJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCisiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorbXNnc3RyICIiCisiSGFyZDog5L2c5qWt44OE44Oq44O844KE44Kk44Oz44OH44OD44Kv44K544KS44Oq44K744OD44OIXG4iCisi77yI44CM5YWo44Gm44Gu44CN44Ot44O844Kr44Or44Gq5aSJ5pu044KS56C05qOE77yJIgorCisjOiBnaXRrOjk2OTgKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgIuODquOCu+ODg+ODiOS4rSIKKworIzogZ2l0azo5NzU4Cittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICLjg4Hjgqfjg4Pjgq/jgqLjgqbjg4giCisKKyM6IGdpdGs6OTgxMQorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIuePvuWcqOODgeOCp+ODg+OCr+OCouOCpuODiOOBleOCjOOBpuOBhOOCi+ODluODqeODs+ODgeOCkuWJiumZpOOBmeOCi+OBk+OBqOOBr+OBp+OBjeOBvuOBm+OCkyIKKworIzogZ2l0azo5ODE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyLjg5bjg6njg7Pjg4EgJXMg44Gr44Gv5LuW44Gu44OW44Op44Oz44OB44Gr5a2Y5Zyo44GX44Gq44GE44Kz44Of44OD44OI44GM44GC44KK44G+44GZ44CCXG4iCisi5pys5b2T44Gr44OW44Op44Oz44OBICVzIOOCkuWJiumZpOOBl+OBvuOBmeOBi++8nyIKKworIzogZ2l0azo5ODQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICLjgr/jgrDjgahIRUFEOiAlcyIKKworIzogZ2l0azo5ODY1Cittc2dpZCAiRmlsdGVyIgorbXNnc3RyICLjg5XjgqPjg6vjgr/jg7wiCisKKyM6IGdpdGs6MTAxNjEKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyLjgrPjg5/jg4Pjg4jmp4vpgKDmg4XloLHoqq3jgb/ovrzjgb/jgqjjg6njg7w7IOODluODqeODs+ODgeWPiuOBs+S4iuS9jS/kuIvkvY3jga7jgr/jgrDmg4XloLHjgYzkuI3lrozlhajjgafjgYLjgosiCisi44KI44GG44Gn44GZ44CCIgorCisjOiBnaXRrOjExMTM4Cittc2dpZCAiVGFnIgorbXNnc3RyICLjgr/jgrAiCisKKyM6IGdpdGs6MTExNDIKK21zZ2lkICJJZCIKK21zZ3N0ciAiSUQiCisKKyM6IGdpdGs6MTEyMjUKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAiR2l0ayDjg5Xjgqnjg7Pjg4jpgbjmip4iCisKKyM6IGdpdGs6MTEyNDIKK21zZ2lkICJCIgorbXNnc3RyICJCIgorCisjOiBnaXRrOjExMjQ1Cittc2dpZCAiSSIKK21zZ3N0ciAiSSIKKworIzogZ2l0azoxMTM2MworbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAi44Kz44Of44OD44OI44Oq44K544OI6KGo56S644Kq44OX44K344On44OzIgorCisjOiBnaXRrOjExMzY2Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICLmnIDlpKfjgrDjg6njg5XluYXvvIjnt5rjga7mnKzmlbDvvIkiCisKKyM6IGdpdGs6MTEzNzAKKyMsIG5vLXRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICLmnIDlpKfjgrDjg6njg5XluYXvvIjjg5rjgqTjg7Pjgavlr77jgZnjgovvvIXvvIkiCisKKyM6IGdpdGs6MTEzNzMKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIuODreODvOOCq+ODq+OBquWkieabtOOCkuihqOekuiIKKworIzogZ2l0azoxMTM3NgorbXNnaWQgIkF1dG8tc2VsZWN0IFNIQTEgKGxlbmd0aCkiCittc2dzdHIgIlNIQTEg44Gu6Ieq5YuV6YG45oqeICjpgbjmip7mloflrZfmlbDmjIflrpopIgorCisjOiBnaXRrOjExMzgwCittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAi44Oq44Oi44O844OI44Oq44OV44Kh44Os44Oz44K544KS6Zqg44GZIgorCisjOiBnaXRrOjExMzg0Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgImRpZmbooajnpLrjgqrjg5fjgrfjg6fjg7MiCisKKyM6IGdpdGs6MTEzODYKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAi44K/44OW56m655m95bmFIgorCisjOiBnaXRrOjExMzg5Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKK21zZ3N0ciAi6L+R44GP44GuIOOCv+OCsC9oZWFkIOOCkuihqOekuuOBmeOCiyIKKworIzogZ2l0azoxMTM5MgorbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCittc2dzdHIgIuOCv+OCsC9oZWFkIOOBruacgOWkp+ihqOekuuaVsCIKKworIzogZ2l0azoxMTM5NQorbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiZGlmZiDjgpLjg6rjgrnjg4jjga7jg5HjgrnjgavliLbpmZAiCisKKyM6IGdpdGs6MTEzOTgKK21zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKK21zZ3N0ciAi44OV44Kh44Kk44Or44GU44Go44Gu44Ko44Oz44Kz44O844OH44Kj44Oz44Kw44Gu44K144Od44O844OIIgorCisjOiBnaXRrOjExNDA0IGdpdGs6MTE1NTEKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgIuWklumDqGRpZmbjg4Tjg7zjg6siCisKKyM6IGdpdGs6MTE0MDUKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIumBuOaKni4uLiIKKworIzogZ2l0azoxMTQxMAorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAi5YWo5L2T6Kit5a6aIgorCisjOiBnaXRrOjExNDEzCittc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgorbXNnc3RyICLjg4bjg7zjg57jgqbjgqPjgrjjgqfjg4Pjg4jjgpLkvb/nlKjjgZnjgosiCisKKyM6IGdpdGs6MTE0MTUKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIo5aSJ5pu044Gr44Gv5YaN6LW35YuV44GM5b+F6KaB44Gn44GZKSIKKworIzogZ2l0azoxMTQxNworbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIo54++5Zyo44Gv5L2/55So5Ye65p2l44G+44Gb44KTKSIKKworIzogZ2l0azoxMTQyOAorbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICLoibI6IOODnOOCv+ODs+OCkuaKvOOBl+OBpumBuOaKniIKKworIzogZ2l0azoxMTQzMQorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAi44Kk44Oz44K/44O844OV44Kn44Kk44K5IgorCisjOiBnaXRrOjExNDMyCittc2dpZCAiaW50ZXJmYWNlIgorbXNnc3RyICLjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrkiCisKKyM6IGdpdGs6MTE0MzUKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICLog4zmma8iCisKKyM6IGdpdGs6MTE0MzYgZ2l0azoxMTQ2NgorbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgIuiDjOaZryIKKworIzogZ2l0azoxMTQzOQorbXNnaWQgIkZvcmVncm91bmQiCittc2dzdHIgIuWJjeaZryIKKworIzogZ2l0azoxMTQ0MAorbXNnaWQgImZvcmVncm91bmQiCittc2dzdHIgIuWJjeaZryIKKworIzogZ2l0azoxMTQ0MworbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAiRGlmZjog5pen44OQ44O844K444On44OzIgorCisjOiBnaXRrOjExNDQ0Cittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgImRpZmYg5pen44OQ44O844K444On44OzIgorCisjOiBnaXRrOjExNDQ4Cittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJEaWZmOiDmlrDjg5Djg7zjgrjjg6fjg7MiCisKKyM6IGdpdGs6MTE0NDkKK21zZ2lkICJkaWZmIG5ldyBsaW5lcyIKK21zZ3N0ciAiZGlmZiDmlrDjg5Djg7zjgrjjg6fjg7MiCisKKyM6IGdpdGs6MTE0NTMKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAiRGlmZjogaHVua+ODmOODg+ODgCIKKworIzogZ2l0azoxMTQ1NQorbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgImRpZmYgaHVua+ODmOODg+ODgCIKKworIzogZ2l0azoxMTQ1OQorbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgorbXNnc3RyICLjg57jg7zjgq/ooYzjga7og4zmma8iCisKKyM6IGdpdGs6MTE0NjEKK21zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgorbXNnc3RyICLjg57jg7zjgq/ooYzjga7og4zmma8iCisKKyM6IGdpdGs6MTE0NjUKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIumBuOaKnuOBruiDjOaZryIKKworIzogZ2l0azoxMTQ3NAorbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIuODleOCqeODs+ODiDog44Oc44K/44Oz44KS5oq844GX44Gm6YG45oqeIgorCisjOiBnaXRrOjExNDc2Cittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICLkuLvjg5Xjgqnjg7Pjg4giCisKKyM6IGdpdGs6MTE0NzcKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAiRGlmZuihqOekuueUqOODleOCqeODs+ODiCIKKworIzogZ2l0azoxMTQ3OAorbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIlVJ55So44OV44Kp44Oz44OIIgorCisjOiBnaXRrOjExNTAwCittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAiR2l0ayDoqK3lrpoiCisKKyM6IGdpdGs6MTE1MDkKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICLkuIDoiKwiCisKKyM6IGdpdGs6MTE1MTAKK21zZ2lkICJDb2xvcnMiCittc2dzdHIgIuiJsiIKKworIzogZ2l0azoxMTUxMQorbXNnaWQgIkZvbnRzIgorbXNnc3RyICLjg5Xjgqnjg7Pjg4giCisKKyM6IGdpdGs6MTE1NjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiDjgIwlc+OAjSDjga7oibLjgpLpgbjmip4iCisKKyM6IGdpdGs6MTIwNzQKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyLnlLPjgZfoqLPjgYLjgorjgb7jgZvjgpPjgYzjgIHjgZPjga7jg5Djg7zjgrjjg6fjg7Pjga4gVGNsL1RrIOOBp+OBryBnaXRrIOOCkuWun+ihjOWHuuadpeOBvuOBm+OCk+OAglxuIgorIkdpdGvjga7lrp/ooYzjgavjga8gVGNsL1RrIDguNCDku6XkuIrjgYzlv4XopoHjgafjgZnjgIIiCisKKyM6IGdpdGs6MTIyODQKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICLjgZPjgZPjgavjga9naXTjg6rjg53jgrjjg4jjg6rjgYzjgYLjgorjgb7jgZvjgpPjgIIiCisKKyM6IGdpdGs6MTIzMzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIuOBguOBhOOBvuOBhOOBquW8leaVsCAnJXMnOiDjg6rjg5Pjgrjjg6fjg7Pjgajjg5XjgqHjgqTjg6vlkI3jga7kuKHmlrnjgavop6Pph4jjgafjgY3jgb7jgZkiCisKKyM6IGdpdGs6MTIzNDMKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICJnaXRr44G444Gu5LiN5q2j44Gq5byV5pWwOiIKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL3BvMm1zZy5zaCBiL2dpdGstZ2l0L3BvL3BvMm1zZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNjMyNDhlCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vcG8ybXNnLnNoCkBAIC0wLDAgKzEsMTMzIEBACisjIS9iaW4vc2gKKyMgVGNsIGlnbm9yZXMgdGhlIG5leHQgbGluZSAtKi0gdGNsIC0qLSBcCitleGVjIHRjbHNoICIkMCIgLS0gIiRAIgorCisjIFRoaXMgaXMgYSByZWFsbHkgc3R1cGlkIHByb2dyYW0sIHdoaWNoIHNlcnZlcyBhcyBhbiBhbHRlcm5hdGl2ZSB0bworIyBtc2dmbXQuICBJdCBfb25seV8gdHJhbnNsYXRlcyB0byBUY2wgbW9kZSwgZG9lcyBfbm90XyB2YWxpZGF0ZSB0aGUKKyMgaW5wdXQsIGFuZCBkb2VzIF9ub3RfIG91dHB1dCBhbnkgc3RhdGlzdGljcy4KKworcHJvYyB1MmEge3N9IHsKKwlzZXQgcmVzICIiCisJZm9yZWFjaCBpIFtzcGxpdCAkcyAiIl0geworCQlzY2FuICRpICVjIGMKKwkJaWYgeyRjPDEyOH0geworCQkJIyBlc2NhcGUgJ1snLCAnXCcgYW5kICddJworCQkJaWYgeyRjID09IDB4NWIgfHwgJGMgPT0gMHg1ZH0geworCQkJCWFwcGVuZCByZXMgIlxcIgorCQkJfQorCQkJYXBwZW5kIHJlcyAkaQorCQl9IGVsc2UgeworCQkJYXBwZW5kIHJlcyBcXHVbZm9ybWF0ICUwNC40eCAkY10KKwkJfQorCX0KKwlyZXR1cm4gJHJlcworfQorCitzZXQgb3V0cHV0X2RpcmVjdG9yeSAiLiIKK3NldCBsYW5nICJkdW1teSIKK3NldCBmaWxlcyBbbGlzdF0KK3NldCBzaG93X3N0YXRpc3RpY3MgMAorCisjIHBhcnNlIG9wdGlvbnMKK2ZvciB7c2V0IGkgMH0geyRpIDwgJGFyZ2N9IHtpbmNyIGl9IHsKKwlzZXQgYXJnIFtsaW5kZXggJGFyZ3YgJGldCisJaWYgeyRhcmcgPT0gIi0tc3RhdGlzdGljcyJ9IHsKKwkJaW5jciBzaG93X3N0YXRpc3RpY3MKKwkJY29udGludWUKKwl9CisJaWYgeyRhcmcgPT0gIi0tdGNsIn0geworCQkjIHdlIGtub3cKKwkJY29udGludWUKKwl9CisJaWYgeyRhcmcgPT0gIi1sIn0geworCQlpbmNyIGkKKwkJc2V0IGxhbmcgW2xpbmRleCAkYXJndiAkaV0KKwkJY29udGludWUKKwl9CisJaWYgeyRhcmcgPT0gIi1kIn0geworCQlpbmNyIGkKKwkJc2V0IHRtcCBbbGluZGV4ICRhcmd2ICRpXQorCQlyZWdzdWIgIlxbXi9cXSQiICR0bXAgIiYvIiBvdXRwdXRfZGlyZWN0b3J5CisJCWNvbnRpbnVlCisJfQorCWxhcHBlbmQgZmlsZXMgJGFyZworfQorCitwcm9jIGZsdXNoX21zZyB7fSB7CisJZ2xvYmFsIG1zZ2lkIG1zZ3N0ciBtb2RlIGxhbmcgb3V0IGZ1enp5CisJZ2xvYmFsIHRyYW5zbGF0ZWRfY291bnQgZnV6enlfY291bnQgbm90X3RyYW5zbGF0ZWRfY291bnQKKworCWlmIHshW2luZm8gZXhpc3RzIG1zZ2lkXSB8fCAkbW9kZSA9PSAiIn0geworCQlyZXR1cm4KKwl9CisJc2V0IG1vZGUgIiIKKwlpZiB7JGZ1enp5ID09IDF9IHsKKwkJaW5jciBmdXp6eV9jb3VudAorCQlzZXQgZnV6enkgMAorCQlyZXR1cm4KKwl9CisKKwlpZiB7JG1zZ2lkID09ICIifSB7CisJCXNldCBwcmVmaXggInNldCA6Om1zZ2NhdDo6aGVhZGVyIgorCX0gZWxzZSB7CisJCWlmIHskbXNnc3RyID09ICIifSB7CisJCQlpbmNyIG5vdF90cmFuc2xhdGVkX2NvdW50CisJCQlyZXR1cm4KKwkJfQorCQlzZXQgcHJlZml4ICI6Om1zZ2NhdDo6bWNzZXQgJGxhbmcgXCJbdTJhICRtc2dpZF1cIiIKKwkJaW5jciB0cmFuc2xhdGVkX2NvdW50CisJfQorCisJcHV0cyAkb3V0ICIkcHJlZml4IFwiW3UyYSAkbXNnc3RyXVwiIgorfQorCitzZXQgZnV6enkgMAorc2V0IHRyYW5zbGF0ZWRfY291bnQgMAorc2V0IGZ1enp5X2NvdW50IDAKK3NldCBub3RfdHJhbnNsYXRlZF9jb3VudCAwCitmb3JlYWNoIGZpbGUgJGZpbGVzIHsKKwlyZWdzdWIgIl4uKi9cKFxbXi9cXSpcKVwucG8kIiAkZmlsZSAiJG91dHB1dF9kaXJlY3RvcnlcXDEubXNnIiBvdXRmaWxlCisJc2V0IGluIFtvcGVuICRmaWxlICJyIl0KKwlmY29uZmlndXJlICRpbiAtZW5jb2RpbmcgdXRmLTgKKwlzZXQgb3V0IFtvcGVuICRvdXRmaWxlICJ3Il0KKworCXNldCBtb2RlICIiCisJd2hpbGUge1tnZXRzICRpbiBsaW5lXSA+PSAwfSB7CisJCWlmIHtbcmVnZXhwICJeIyIgJGxpbmVdfSB7CisJCQlpZiB7W3JlZ2V4cCAiLCBmdXp6eSIgJGxpbmVdfSB7CisJCQkJc2V0IGZ1enp5IDEKKwkJCX0gZWxzZSB7CisJCQkJZmx1c2hfbXNnCisJCQl9CisJCQljb250aW51ZQorCQl9IGVsc2VpZiB7W3JlZ2V4cCAiXm1zZ2lkIFwiKC4qKVwiJCIgJGxpbmUgZHVtbXkgbWF0Y2hdfSB7CisJCQlmbHVzaF9tc2cKKwkJCXNldCBtc2dpZCAkbWF0Y2gKKwkJCXNldCBtb2RlICJtc2dpZCIKKwkJfSBlbHNlaWYge1tyZWdleHAgIl5tc2dzdHIgXCIoLiopXCIkIiAkbGluZSBkdW1teSBtYXRjaF19IHsKKwkJCXNldCBtc2dzdHIgJG1hdGNoCisJCQlzZXQgbW9kZSAibXNnc3RyIgorCQl9IGVsc2VpZiB7JGxpbmUgPT0gIiJ9IHsKKwkJCWZsdXNoX21zZworCQl9IGVsc2VpZiB7W3JlZ2V4cCAiXlwiKC4qKVwiJCIgJGxpbmUgZHVtbXkgbWF0Y2hdfSB7CisJCQlpZiB7JG1vZGUgPT0gIm1zZ2lkIn0geworCQkJCWFwcGVuZCBtc2dpZCAkbWF0Y2gKKwkJCX0gZWxzZWlmIHskbW9kZSA9PSAibXNnc3RyIn0geworCQkJCWFwcGVuZCBtc2dzdHIgJG1hdGNoCisJCQl9IGVsc2UgeworCQkJCXB1dHMgc3RkZXJyICJJIGRvIG5vdCBrbm93IHdoYXQgdG8gZG86ICRtYXRjaCIKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXB1dHMgc3RkZXJyICJDYW5ub3QgaGFuZGxlICRsaW5lIgorCQl9CisJfQorCWZsdXNoX21zZworCWNsb3NlICRpbgorCWNsb3NlICRvdXQKK30KKworaWYgeyRzaG93X3N0YXRpc3RpY3N9IHsKKwlwdXRzIFtjb25jYXQgIiR0cmFuc2xhdGVkX2NvdW50IHRyYW5zbGF0ZWQgbWVzc2FnZXMsICIgXAorCQkiJGZ1enp5X2NvdW50IGZ1enp5IG9uZXMsICIgXAorCQkiJG5vdF90cmFuc2xhdGVkX2NvdW50IHVudHJhbnNsYXRlZCBvbmVzLiJdCit9CmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9wdF9ici5wbyBiL2dpdGstZ2l0L3BvL3B0X2JyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZWIzNDgKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9wdF9ici5wbwpAQCAtMCwwICsxLDEzOTAgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0ayB0byBCcmF6aWxpYW4gUG9ydHVndWVzZS4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IFBhdWwgTWFja2VycmFzLCBldCBhbC4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KKyMKKyMgQWxleGFuZHJlIEVyd2luIEl0dG5lciA8YWxleGFuZHJlQGl0dG5lci5jb20uYnI+LCAyMDEwLgorIworIywgZnV6enkKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdGtcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMTQ6MzIrMTAwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMTItMDYgMjM6MzktMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQWxleGFuZHJlIEVyd2luIEl0dG5lciA8YWxleGFuZHJlQGl0dG5lci5jb20uYnI+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQnJhemlsaWFuIFBvcnR1Z3Vlc2UgPD5cbiIKKyJMYW5ndWFnZTogcHRfQlJcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0azoxNDAKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBvYnRlciBhIGxpc3RhIGRvcyBhcnF1aXZvcyBuw6NvIG1lc2NsYWRvczoiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjM4MQorbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjE3IGdpdGs6MjM4MSBnaXRrOjgyMjAgZ2l0azo4MjUzCittc2dpZCAiTWFya3VwIHdvcmRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MzI0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJFcnJvIGFvIGludGVycHJldGFyIHJldmlzw7VlczoiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiRXJybyBhbyBleGVjdXRhciBvIGNvbWFuZG8tLWFyZ3NjbWQ6IgorCisjOiBnaXRrOjM5MworbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorIk5lbmh1bSBhcnF1aXZvIGZvaSBzZWxlY2lvbmFkbzogLS1tZXJnZSBlc3BlY2lmaWNhZG8gbWFzIG7Do28gaMOhIGFycXVpdm9zIG7Do28tIgorIm1lc2NsYWRvcy4iCisKKyM6IGdpdGs6Mzk2Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgIiIKKyJOZW5odW0gYXJxdWl2byBmb2kgc2VsZWNpb25hZG86IC0tbWVyZ2UgZXNwZWNpZmljYWRvIG1hcyBuw6NvIGjDoSBhcnF1aXZvcyBuw6NvLSIKKyJtZXNjbGFkb3MgZGVudHJvIGRvcyBsaW1pdGVzLiIKKworIzogZ2l0azo0MTggZ2l0azo1NjYKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgIkVycm8gYW8gZXhlY3V0YXIgZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAiTGVuZG8iCisKKyM6IGdpdGs6NDk2IGdpdGs6NDUyNQorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAiTGVuZG8gcmV2aXPDtWVzLi4uIgorCisjOiBnaXRrOjQ5OSBnaXRrOjE2MzcgZ2l0azo0NTI4Cittc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKK21zZ3N0ciAiTmVuaHVtYSByZXZpc8OjbyBmb2kgc2VsZWNpb25hZGEiCisKKyM6IGdpdGs6MTQ0NSBnaXRrOjQwNDUgZ2l0azoxMjQzMgorbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAiTGluaGEgZGUgY29tYW5kbyIKKworIzogZ2l0azoxNTExCittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgaW50ZXJwcmV0YXIgYSBzYcOtZGEgZG8gXCJnaXQgbG9nXCI6IgorCisjOiBnaXRrOjE3NDAKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJOw6NvIGjDoSBpbmZvcm1hw6fDtWVzIGRpc3BvbsOtdmVpcyBzb2JyZSBhIHJldmlzw6NvIgorCisjOiBnaXRrOjE5MDMgZ2l0azoxOTMyIGdpdGs6NDMxNSBnaXRrOjk2NjkgZ2l0azoxMTI0MSBnaXRrOjExNTIxCittc2dpZCAiT0siCittc2dzdHIgIk9rIgorCisjOiBnaXRrOjE5MzQgZ2l0azo0MzE3IGdpdGs6OTE5NiBnaXRrOjkyNzUgZ2l0azo5MzkxIGdpdGs6OTQ0MCBnaXRrOjk2NzEKKyM6IGdpdGs6MTEyNDIgZ2l0azoxMTUyMgorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQ2FuY2VsYXIiCisKKyM6IGdpdGs6MjA2OQorbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgIkF0dWFsaXphciIKKworIzogZ2l0azoyMDcwCittc2dpZCAiJlJlbG9hZCIKK21zZ3N0ciAiUmVjYXJyZWdhciIKKworIzogZ2l0azoyMDcxCittc2dpZCAiUmVyZWFkIHJlJmZlcmVuY2VzIgorbXNnc3RyICJMZXIgYXMgcmVmZXLDqm5jaWFzIG5vdmFtZW50ZSIKKworIzogZ2l0azoyMDcyCittc2dpZCAiJkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAiTGlzdGFyIHJlZmVyw6puY2lhcyIKKworIzogZ2l0azoyMDc0Cittc2dpZCAiU3RhcnQgZ2l0ICZndWkiCittc2dzdHIgIkluaWNpYXIgR2l0IEdVSSIKKworIzogZ2l0azoyMDc2Cittc2dpZCAiJlF1aXQiCittc2dzdHIgIlNhaXIiCisKKyM6IGdpdGs6MjA2OAorbXNnaWQgIiZGaWxlIgorbXNnc3RyICJBcnF1aXZvIgorCisjOiBnaXRrOjIwODAKK21zZ2lkICImUHJlZmVyZW5jZXMiCittc2dzdHIgIlByZWZlcsOqbmNpYXMiCisKKyM6IGdpdGs6MjA3OQorbXNnaWQgIiZFZGl0IgorbXNnc3RyICJFZGl0YXIiCisKKyM6IGdpdGs6MjA4NAorbXNnaWQgIiZOZXcgdmlldy4uLiIKK21zZ3N0ciAiTm92YSB2aXN0YS4uLiIKKworIzogZ2l0azoyMDg1Cittc2dpZCAiJkVkaXQgdmlldy4uLiIKK21zZ3N0ciAiRWRpdGFyIHZpc3RhLi4uIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRGVsZXRlIHZpZXciCittc2dzdHIgIkFwYWdhciB2aXN0YSIKKworIzogZ2l0azoyMDg4IGdpdGs6NDA0MworbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgIlRvZG9zIG9zIGFycXVpdm9zIgorCisjOiBnaXRrOjIwODMgZ2l0azo0MDY3Cittc2dpZCAiJlZpZXciCittc2dzdHIgIkV4aWJpciIKKworIzogZ2l0azoyMDkzIGdpdGs6MjEwMyBnaXRrOjMwMTIKK21zZ2lkICImQWJvdXQgZ2l0ayIKK21zZ3N0ciAiU29icmUgbyBnaXRrIgorCisjOiBnaXRrOjIwOTQgZ2l0azoyMTA4Cittc2dpZCAiJktleSBiaW5kaW5ncyIKK21zZ3N0ciAiQXRhbGhvcyBkZSB0ZWNsYWRvIgorCisjOiBnaXRrOjIwOTIgZ2l0azoyMTA3Cittc2dpZCAiJkhlbHAiCittc2dzdHIgIkFqdWRhIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUyCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgorCisjOiBnaXRrOjIyMjkKK21zZ2lkICJSb3ciCittc2dzdHIgIkxpbmhhIgorCisjOiBnaXRrOjIyNjcKK21zZ2lkICJGaW5kIgorbXNnc3RyICJFbmNvbnRyYXIiCisKKyM6IGdpdGs6MjI5NQorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiUmV2aXPDo28iCisKKyM6IGdpdGs6MjI5OSBnaXRrOjIzMDEgZ2l0azo0Njg3IGdpdGs6NDcxMCBnaXRrOjQ3MzQgZ2l0azo2NzU1IGdpdGs6NjgyNworIzogZ2l0azo2OTEyCittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgImNvbnRlbmRvOiIKKworIzogZ2l0azoyMzAyIGdpdGs6MzUyNiBnaXRrOjM1MzEgZ2l0azo0NzYzCittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICJlbnZvbHZlbmRvIG9zIGNhbWluaG9zOiIKKworIzogZ2l0azoyMzAzIGdpdGs6NDc3NworbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICJBZGljaW9uYW5kby9yZW1vdmVuZG8gdGV4dG86IgorCisjOiBnaXRrOjIzMDQgZ2l0azo0Nzc5Cittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzY2Cittc2dpZCAiRXhhY3QiCittc2dzdHIgIkV4YXRhbWVudGUiCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ4NTQgZ2l0azo2NzIzCittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAiSWdub3JhciBtYWnDunNjdWxhcy9taW7DunNjdWxhcyIKKworIzogZ2l0azoyMzE1IGdpdGs6NDczNiBnaXRrOjQ4NTIgZ2l0azo2NzE5Cittc2dpZCAiUmVnZXhwIgorbXNnc3RyICJFeHByZXNzw6NvIHJlZ3VsYXIiCisKKyM6IGdpdGs6MjMxNyBnaXRrOjIzMTggZ2l0azo0ODc0IGdpdGs6NDkwNCBnaXRrOjQ5MTEgZ2l0azo2ODQ4IGdpdGs6NjkxNgorbXNnaWQgIkFsbCBmaWVsZHMiCittc2dzdHIgIlRvZG9zIG9zIGNhbXBvcyIKKworIzogZ2l0azoyMzE4IGdpdGs6NDg3MSBnaXRrOjQ5MDQgZ2l0azo2Nzg2Cittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIkFzc3VudG8iCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NjkxNiBnaXRrOjczODkKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAiRGVzY3Jpw6fDo28gZGEgcmV2aXPDo28iCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo0ODc2IGdpdGs6NDkxMSBnaXRrOjY3ODYgZ2l0azo3MzI0IGdpdGs6ODgzMAorIzogZ2l0azo4ODQ1Cittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJBdXRvciIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo3MzI2Cittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICJSZXZpc29yIgorCisjOiBnaXRrOjIzNTAKK21zZ2lkICJTZWFyY2giCittc2dzdHIgIkJ1c2NhciIKKworIzogZ2l0azoyMzU4Cittc2dpZCAiRGlmZiIKK21zZ3N0ciAiRGlmZXJlbsOnYXMiCisKKyM6IGdpdGs6MjM2MAorbXNnaWQgIk9sZCB2ZXJzaW9uIgorbXNnc3RyICJWZXJzw6NvIGFudGlnYSIKKworIzogZ2l0azoyMzYyCittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIlZlcnPDo28gbm92YSIKKworIzogZ2l0azoyMzY0Cittc2dpZCAiTGluZXMgb2YgY29udGV4dCIKK21zZ3N0ciAiTsO6bWVybyBkZSBsaW5oYXMgZGUgY29udGV4dG8iCisKKyM6IGdpdGs6MjM3NAorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIklnbm9yYXIgbXVkYW7Dp2FzIGRlIGNhaXhhIgorCisjOiBnaXRrOjIzNzggZ2l0azoyMzgwIGdpdGs6Nzk1OSBnaXRrOjgyMDYKK21zZ2lkICJMaW5lIGRpZmYiCittc2dzdHIgIiIKKworIzogZ2l0azoyNDQ1Cittc2dpZCAiUGF0Y2giCittc2dzdHIgIkRpZmVyZW7Dp2FzIgorCisjOiBnaXRrOjI0NDcKK21zZ2lkICJUcmVlIgorbXNnc3RyICLDgXJ2b3JlIgorCisjOiBnaXRrOjI2MTcgZ2l0azoyNjM3Cittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICJDb21wYXJhciBlc3RhIHJldmlzw6NvIGNvbSBhIHNlbGVjaW9uYWRhIgorCisjOiBnaXRrOjI2MTggZ2l0azoyNjM4Cittc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgorbXNnc3RyICJDb21wYXJhciBhIHJldmlzw6NvIHNlbGVjaW9uYWRhIGNvbSBlc3RhIgorCisjOiBnaXRrOjI2MTkgZ2l0azoyNjM5Cittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiQ3JpYXIgcGF0Y2giCisKKyM6IGdpdGs6MjYyMCBnaXRrOjkyNTQKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICJDcmlhciBldGlxdWV0YSIKKworIzogZ2l0azoyNjIxIGdpdGs6OTM3MQorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICJTYWx2YXIgcmV2aXPDo28gcGFyYSB1bSBhcnF1aXZvIgorCisjOiBnaXRrOjI2MjIgZ2l0azo5NDI4Cittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgIkNyaWFyIG5vdm8gcmFtbyIKKworIzogZ2l0azoyNjIzCittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIkZhemVyIGNoZXJyeS1waWNrIGRlc3RhIHJldmlzw6NvIgorCisjOiBnaXRrOjI2MjQKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJSZWRlZmluaXIgSEVBRCBwYXJhIGPDoSIKKworIzogZ2l0azoyNjI1Cittc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiTWFyY2FyIGVzdGEgcmV2aXPDo28iCisKKyM6IGdpdGs6MjYyNgorbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICJWb2x0YXIgw6AgbWFyY2EiCisKKyM6IGdpdGs6MjYyNworbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgorbXNnc3RyICJFbmNvbnRyYXIgZGVzY2VuZGVudGUgZSBtYXJjYXIiCisKKyM6IGdpdGs6MjYyOAorbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJDb21wYXJhciBjb20gYSByZXZpc8OjbyBtYXJjYWRhIgorCisjOiBnaXRrOjI2MjkgZ2l0azoyNjQwCisjLCBmdXp6eQorbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJDb21wYXJhciBlc3RhIHJldmlzw6NvIGNvbSBhIHNlbGVjaW9uYWRhIgorCisjOiBnaXRrOjI2MzAgZ2l0azoyNjQxCisjLCBmdXp6eQorbXNnaWQgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIgorbXNnc3RyICJDb21wYXJhciBhIHJldmlzw6NvIHNlbGVjaW9uYWRhIGNvbSBlc3RhIgorCisjOiBnaXRrOjI2MzEKKyMsIGZ1enp5Cittc2dpZCAiUmV2ZXJ0IHRoaXMgY29tbWl0IgorbXNnc3RyICJNYXJjYXIgZXN0YSByZXZpc8OjbyIKKworIzogZ2l0azoyNjQ3Cittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICJFZmV0dWFyIGNoZWNrb3V0IGRlc3RlIHJhbW8iCisKKyM6IGdpdGs6MjY0OAorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiRXhjbHVpciBlc3RlIHJhbW8iCisKKyM6IGdpdGs6MjY0OQorbXNnaWQgIkNvcHkgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKworIzogZ2l0azoyNjU2Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICJNYXJjYXIgZXN0ZSB0YW1iw6ltIgorCisjOiBnaXRrOjI2NTcKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICJNYXJjYXIgYXBlbmFzIGVzdGUiCisKKyM6IGdpdGs6MjY1OAorbXNnaWQgIkV4dGVybmFsIGRpZmYiCittc2dzdHIgIkRpZmYgZXh0ZXJubyIKKworIzogZ2l0azoyNjU5Cittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAiQW5vdGFyIHJldmlzw6NvIGFudGVyaW9yIgorCisjOiBnaXRrOjI2NjAKK21zZ2lkICJDb3B5IHBhdGgiCittc2dzdHIgIiIKKworIzogZ2l0azoyNjY3Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICJFeGliaXIgb3JpZ2VtIGRlc3RhIGxpbmhhIgorCisjOiBnaXRrOjI2NjgKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgIkV4ZWN1dGFyICdnaXQgYmxhbWUnIG5lc3RhIGxpbmhhIgorCisjOiBnaXRrOjMwMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayAtIHVtIHZpc3VhbGl6YWRvciBkZSByZXZpc8O1ZXMgcGFyYSBvIGdpdCBcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqk5IDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzbyBlIGRpc3RyaWJ1acOnw6NvIHNlZ3VuZG8gb3MgdGVybW9zIGRhIExpY2Vuw6dhIFDDumJsaWNhIEdlcmFsIEdOVSIKKworIzogZ2l0azozMDIyIGdpdGs6MzA4OSBnaXRrOjk4NTcKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiRmVjaGFyIgorCisjOiBnaXRrOjMwNDMKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiQXRhbGhvcyBkZSB0ZWNsYWRvIgorCisjOiBnaXRrOjMwNDYKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIkF0YWxob3MgZGUgdGVjbGFkbzoiCisKKyM6IGdpdGs6MzA0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0U2FpciIKKworIzogZ2l0azozMDQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLVc+XHRcdEZlY2hhciBqYW5lbGEiCisKKyM6IGdpdGs6MzA1MAorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPEhvbWU+XHRcdElyIHBhcmEgYSBwcmltZWlyYSByZXZpc8OjbyIKKworIzogZ2l0azozMDUxCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx0SXIgcGFyYSBhIMO6bHRpbWEgcmV2aXPDo28iCisKKyM6IGdpdGs6MzA1MgorIywgZnV6enkKK21zZ2lkICI8VXA+LCBwLCBrXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxVcD4sIHAsIGlcdElyIHBhcmEgdW1hIHJldmlzw6NvIGFjaW1hIgorCisjOiBnaXRrOjMwNTMKKyMsIGZ1enp5Cittc2dpZCAiPERvd24+LCBuLCBqXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKK21zZ3N0ciAiPERvd24+LCBuLCBrXHRJciBwYXJhIHVtYSByZXZpc8OjbyBhYmFpeG8iCisKKyM6IGdpdGs6MzA1NAorIywgZnV6enkKK21zZ2lkICI8TGVmdD4sIHosIGhcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8TGVmdD4sIHosIGpcdFZvbHRhciBubyBoaXN0w7NyaWNvIgorCisjOiBnaXRrOjMwNTUKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPFJpZ2h0PiwgeCwgbFx0QXZhbsOnYXIgbm8gaGlzdMOzcmljbyIKKworIzogZ2l0azozMDU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIiIKKworIzogZ2l0azozMDU3Cittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlVXA+XHRTdWJpciB1bWEgcMOhZ2luYSBuYSBsaXN0YSBkZSByZXZpc8O1ZXMiCisKKyM6IGdpdGs6MzA1OAorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VEb3duPlx0RGVzY2VyIHVtYSBww6FnaW5hIG5hIGxpc3RhIGRlIHJldmlzw7VlcyIKKworIzogZ2l0azozMDU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdFJvbGFyIHBhcmEgbyBpbsOtY2lvIGRhIGxpc3RhIGRlIHJldmlzw7VlcyIKKworIzogZ2l0azozMDYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHRSb2xhciBwYXJhIG8gZmluYWwgZGEgbGlzdGEgZGUgcmV2aXPDtWVzIgorCisjOiBnaXRrOjMwNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1VcD5cdFJvbGFyIHVtYSBsaW5oYSBhY2ltYSBuYSBsaXN0YSBkZSByZXZpc8O1ZXMiCisKKyM6IGdpdGs6MzA2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1Eb3duPlx0Um9sYXIgdW1hIGxpbmhhIGFiYWl4byBuYSBsaXN0YSBkZSByZXZpc8O1ZXMiCisKKyM6IGdpdGs6MzA2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlVXA+XHRSb2xhciB1bWEgcMOhZ2luYSBhY2ltYSBuYSBsaXN0YSBkZSByZXZpc8O1ZXMiCisKKyM6IGdpdGs6MzA2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZURvd24+XHRSb2xhciB1bWEgcMOhZ2luYSBhYmFpeG8gbmEgbGlzdGEgZGUgcmV2aXPDtWVzIgorCisjOiBnaXRrOjMwNjUKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1VcD5cdFByb2N1cmFyIHByw7N4aW1hIChyZXZpc8O1ZXMgbWFzIHJlY2VudGVzKSIKKworIzogZ2l0azozMDY2Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1Eb3duPlx0UHJvY3VyYXIgYW50ZXJpb3IgKHJldmlzw7VlcyBtYWlzIGFudGlnYXMpIgorCisjOiBnaXRrOjMwNjcKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPERlbGV0ZT4sIGJcdFJvbGEgYWx0ZXJhw6fDtWVzIHVtYSBww6FnaW5hIGFjaW1hIgorCisjOiBnaXRrOjMwNjgKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJhY2tzcGFjZT5cdFJvbGFyIGFsdGVyYcOnw7VlcyB1bWEgcMOhZ2luYSBhYmFpeG8iCisKKyM6IGdpdGs6MzA2OQorbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8U3BhY2U+XHRcdFJvbGFyIGFsdGVyYcOnw7VlcyB1bWEgcMOhZ2luYSBhYmFpeG8iCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRSb2xhciBhbHRlcmHDp8O1ZXMgMTggbGluaGFzIGFjaW1hIgorCisjOiBnaXRrOjMwNzEKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHRSb2xhciBhbHRlcmHDp8O1ZXMgMTggbGluaGFzIGFiYWl4byIKKworIzogZ2l0azozMDcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRQcm9jdXJhciIKKworIzogZ2l0azozMDczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdElyIHBhcmEgYSBwcsOzeGltYSBvY29ycsOqbmNpYSIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdElyIHBhcmEgYSBwcsOzeGltYSBvY29ycsOqbmNpYSIKKworIzogZ2l0azozMDc1CisjLCBmdXp6eQorbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgorbXNnc3RyICI8RW5kPlx0XHRJciBwYXJhIGEgw7psdGltYSByZXZpc8OjbyIKKworIzogZ2l0azozMDc2Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRQb3IgZm9jbyBuYSBjYWl4YSBkZSBidXNjYSIKKworIzogZ2l0azozMDc3Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdElyIHBhcmEgYSBvY29ycsOqbmNpYSBhbnRlcmlvciIKKworIzogZ2l0azozMDc4Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHRSb2xhciBhbHRlcmHDp8O1ZXMgcGFyYSBvIHByw7N4aW1vIGFycXVpdm8iCisKKyM6IGdpdGs6MzA3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdFByb2N1cmFyIGEgcHLDs3hpbWEgb2NvcnLDqm5jaWEgbmEgbGlzdGEgZGUgYWx0ZXJhw6fDtWVzIgorCisjOiBnaXRrOjMwODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0UHJvY3VyYXIgb2NvcnLDqm5jaWEgYW50ZXJpb3IgbmEgbGlzdGEgZGUgYWx0ZXJhw6fDtWVzIgorCisjOiBnaXRrOjMwODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1ArPlx0QXVtZW50YXIgdGFtYW5obyBkYSBmb250ZSIKKworIzogZ2l0azozMDgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1wbHVzPlx0QXVtZW50YXIgdGFtYW5obyBkYSBmb250ZSIKKworIzogZ2l0azozMDgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdFJlZHV6aXIgdGFtYW5obyBkYSBmb250ZSIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWludXM+XHRSZWR1emlyIHRhbWFuaG8gZGEgZm9udGUiCisKKyM6IGdpdGs6MzA4NQorbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdEF0dWFsaXphciIKKworIzogZ2l0azozNTUwIGdpdGs6MzU1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICJFcnJvIGFvIGNyaWFyIG8gZGlyZXTDs3JpbyB0ZW1wb3LDoXJpbyAlczoiCisKKyM6IGdpdGs6MzU3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgorbXNnc3RyICJFcnJvIGFvIGxlciBcIiVzXCIgZGUgJXM6IgorCisjOiBnaXRrOjM2MzUKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgIk8gY29tYW5kbyBmYWxob3U6IgorCisjOiBnaXRrOjM3ODQKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiUmV2aXPDo28gbsOjbyBlbmNvbnRyYWRhIgorCisjOiBnaXRrOjM3OTgKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgIkNvbWFuZG8gJ2dpdCBndWkgYmxhbWUnIGZhbGhvdToiCisKKyM6IGdpdGs6MzgyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCittc2dzdHIgIkltcG9zc8OtdmVsIGxlciBtZXJnZSBoZWFkOiAlcyIKKworIzogZ2l0azozODM3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkVycm8gYW8gbGVyIG8gw61uZGljZTogJXMiCisKKyM6IGdpdGs6Mzg2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBpbmNpYXIgbyAnZ2l0IGJsYW1lJzogJXMiCisKKyM6IGdpdGs6Mzg2NSBnaXRrOjY3NTQKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgIlByb2N1cmFuZG8iCisKKyM6IGdpdGs6Mzg5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiRXJybyBhbyBleGVjdXRhciAnZ2l0IGJsYW1lJzogJXMiCisKKyM6IGdpdGs6MzkyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIkVzdGEgbGluaGEgdmVtIGRhIHJldmlzw6NvICVzLCBxdWUgbsOjbyBlc3TDoSBuZXN0YSB2aXN0YSIKKworIzogZ2l0azozOTM5Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAiRXJybyBkbyB2aXN1YWxpemFkb3IgZGUgYWx0ZXJhw6fDtWVzIGV4dGVybm86IgorCisjOiBnaXRrOjQwNzAKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRGVmaW5pciB2aXN0YSIKKworIzogZ2l0azo0MDc0Cittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJMZW1icmFyIGVzdGEgdmlzdGEiCisKKyM6IGdpdGs6NDA3NQorbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCittc2dzdHIgIlJlZmVyw6puY2lhcyAoc2VwYXJhciBhIGxpc3RhIGNvbSB1bSBlc3Bhw6dvKToiCisKKyM6IGdpdGs6NDA3NgorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIlJhbW9zICYgZXRpcXVldGFzOiIKKworIzogZ2l0azo0MDc3Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIlRvZGFzIGFzIHJlZmVyw6puY2lhcyIKKworIzogZ2l0azo0MDc4Cittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIlRvZG9zIG9zIHJhbW9zIGxvY2FpcyIKKworIzogZ2l0azo0MDc5Cittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgIlRvZGFzIGFzIGV0aXF1ZXRhcyIKKworIzogZ2l0azo0MDgwCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiVG9kb3Mgb3MgcmFtb3MgZGUgcmFzdHJlaW8iCisKKyM6IGdpdGs6NDA4MQorbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgIkluZm9ybWHDp8O1ZXMgZGEgcmV2aXPDo28gKGV4cHJlc3PDtWVzIHJlZ3VsYXJlcyk6IgorCisjOiBnaXRrOjQwODIKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRvcjoiCisKKyM6IGdpdGs6NDA4MworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIlJldmlzb3I6IgorCisjOiBnaXRrOjQwODQKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIkRlc2NyacOnw6NvIGRhIHJldmlzw6NvOiIKKworIzogZ2l0azo0MDg1Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIkNvaW5jaWRpciB0b2RvcyBvcyBjcml0w6lyaW9zIGRlIGluZm9ybWHDp8O1ZXMgZGEgcmV2aXPDo28iCisKKyM6IGdpdGs6NDA4NgorIywgZnV6enkKK21zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJDb2luY2lkaXIgdG9kb3Mgb3MgY3JpdMOpcmlvcyBkZSBpbmZvcm1hw6fDtWVzIGRhIHJldmlzw6NvIgorCisjOiBnaXRrOjQwODcKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAiTXVkYW7Dp2FzIHBhcmEgb3MgYXJxdWl2b3M6IgorCisjOiBnaXRrOjQwODgKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgIlRleHRvIGZpeG8iCisKKyM6IGdpdGs6NDA4OQorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiRXhwcmVzc8OjbyByZWd1bGFyIgorCisjOiBnaXRrOjQwOTAKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAiVGV4dG8gZGUgYnVzY2EiCisKKyM6IGdpdGs6NDA5MQorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAiIgorIkRhdGFzIGRlIHJldmlzw6NvIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCisKKyM6IGdpdGs6NDA5MgorbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAiRGVzZGU6IgorCisjOiBnaXRrOjQwOTMKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIkF0w6k6IgorCisjOiBnaXRrOjQwOTQKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAiTGltaXRhciBlL291IGlnbm9yYXIgdW0gbsO6bWVybyBkZSByZXZpc8O1ZXMgKGludGVpcm8gcG9zaXRpdm8pOiIKKworIzogZ2l0azo0MDk1Cittc2dpZCAiTnVtYmVyIHRvIHNob3c6IgorbXNnc3RyICJOw7ptZXJvIHBhcmEgbW9zdHJhcjoiCisKKyM6IGdpdGs6NDA5NgorbXNnaWQgIk51bWJlciB0byBza2lwOiIKK21zZ3N0ciAiTsO6bWVybyBwYXJhIGlnbm9yYXI6IgorCisjOiBnaXRrOjQwOTcKK21zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgorbXNnc3RyICJPcMOnw7VlcyBkaXZlcnNhczoiCisKKyM6IGdpdGs6NDA5OAorbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKK21zZ3N0ciAiT3JkZW5hciBlc3RyaXRhbWVudGUgcGVsYSBkYXRhIgorCisjOiBnaXRrOjQwOTkKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAiTWFyY2FyIG9zIGRvaXMgbGFkb3MgZG8gcmFtbyIKKworIzogZ2l0azo0MTAwCittc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgorbXNnc3RyICJMaW1pdGFyIGFvIHByaW1laXJvIGFudGVjZXNzb3IiCisKKyM6IGdpdGs6NDEwMQorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICJIaXN0w7NyaWNvIHNpbXBsaWZpY2FkbyIKKworIzogZ2l0azo0MTAyCittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgIkFyZ3VtZW50b3MgYWRpY2lvbmFpcyBwYXJhIG8gJ2dpdCBsb2cnOiIKKworIzogZ2l0azo0MTAzCittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIkFycXVpdm9zIGUgZGlyZXTDs3Jpb3MgcGFyYSBpbmNsdWlyLCB1bSBwb3IgbGluaGEiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJDb21hbmRvIHBhcmEgZ2VyYXIgbWFpcyByZXZpc8O1ZXMgcGFyYSBpbmNsdWlyOiIKKworIzogZ2l0azo0MjI4Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrOiBlZGl0YXIgdmlzdGEiCisKKyM6IGdpdGs6NDIzNgorbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICItLSBjcml0w6lyaW9zIHBhcmEgc2VsZWNpb25hciByZXZpc8O1ZXMiCisKKyM6IGdpdGs6NDI0MQorbXNnaWQgIlZpZXcgTmFtZSIKK21zZ3N0ciAiTm9tZSBkYSB2aXN0YSIKKworIzogZ2l0azo0MzE2Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAiQXBsaWNhciAoRjUpIgorCisjOiBnaXRrOjQzNTQKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgIkVycm8gbm9zIGFyZ3VtZW50b3MgZGUgc2VsZcOnw6NvIGRlIHJldmlzw7VlczoiCisKKyM6IGdpdGs6NDQwOSBnaXRrOjQ0NjIgZ2l0azo0OTI0IGdpdGs6NDkzOCBnaXRrOjYyMDggZ2l0azoxMjM3MyBnaXRrOjEyMzc0Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAiTmVuaHVtIgorCisjOiBnaXRrOjUwMjEgZ2l0azo1MDI2Cittc2dpZCAiRGVzY2VuZGFudCIKK21zZ3N0ciAiRGVzY2VuZGVudGUgZGUiCisKKyM6IGdpdGs6NTAyMgorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICJOw6NvIGRlc2NlbmRlbnRlIGRlIgorCisjOiBnaXRrOjUwMjkgZ2l0azo1MDM0Cittc2dpZCAiQW5jZXN0b3IiCittc2dzdHIgIkFudGVjZXNzb3IgZGUiCisKKyM6IGdpdGs6NTAzMAorbXNnaWQgIk5vdCBhbmNlc3RvciIKK21zZ3N0ciAiTsOjbyBhbnRlY2Vzc29yIGRlIgorCisjOiBnaXRrOjUzMjQKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIk11ZGFuw6dhcyBsb2NhaXMgbWFyY2FkYXMsIHBvcsOpbSBuw6NvIHNhbHZhcyIKKworIzogZ2l0azo1MzYwCittc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCittc2dzdHIgIk11ZGFuw6dhcyBsb2NhaXMgbsOjbyBtYXJjYWRhcyIKKworIzogZ2l0azo3MTM0Cittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjcxMzcKK21zZ2lkICJtYW55IgorbXNnc3RyICJtdWl0YXMiCisKKyM6IGdpdGs6NzMyOAorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJFdGlxdWV0YXM6IgorCisjOiBnaXRrOjczNDUgZ2l0azo3MzUxIGdpdGs6ODgyNQorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAiQW50ZWNlc3NvciIKKworIzogZ2l0azo3MzU2Cittc2dpZCAiQ2hpbGQiCittc2dzdHIgIkRlc2NlbmRlbnRlIgorCisjOiBnaXRrOjczNjUKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIlJhbW8iCisKKyM6IGdpdGs6NzM2OAorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgIlNlZ3VlIgorCisjOiBnaXRrOjczNzEKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAiUHJlY2VkZSIKKworIzogZ2l0azo3OTY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkVycm8gYW8gb2J0ZXIgZGlmZXJlbsOnYXM6ICVzIgorCisjOiBnaXRrOjg2NTAKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiSXIgcGFyYToiCisKKyM6IGdpdGs6ODY3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJPIGlkIFNIQTEgJXMgw6kgYW1iw61ndW8iCisKKyM6IGdpdGs6ODY3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiUmV2aXPDo28gJXMgZGVzY29uaGVjaWRhIgorCisjOiBnaXRrOjg2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiSWQgU0hBMSAlcyBkZXNjb25oZWNpZG8iCisKKyM6IGdpdGs6ODY5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgorbXNnc3RyICJBIHJldmlzw6NvICVzIG7Do28gZXN0w6EgbmEgdmlzdGEgYXR1YWwiCisKKyM6IGdpdGs6ODgzMiBnaXRrOjg4NDcKK21zZ2lkICJEYXRlIgorbXNnc3RyICJEYXRhIgorCisjOiBnaXRrOjg4MzUKK21zZ2lkICJDaGlsZHJlbiIKK21zZ3N0ciAiRGVzY2VuZGVudGVzIgorCisjOiBnaXRrOjg4OTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiUmVkZWZpbmlyIHJhbW8gJXMgcGFyYSBlc3RlIHBvbnRvIgorCisjOiBnaXRrOjg5MDAKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiRGV0YWNoZWQgaGVhZDogaW1wb3Nzw612ZWwgcmVkZWZpbmlyIgorCisjOiBnaXRrOjkwMDUgZ2l0azo5MDExCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiU2FsdGFuZG8gcmV2aXPDo28gZGUgbWVzY2xhZ2VtIgorCisjOiBnaXRrOjkwMjAgZ2l0azo5MDI1Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICJFcnJvIGFvIG9idGVyIHBhdGNoIElEIHBhcmEiCisKKyM6IGdpdGs6OTAyMSBnaXRrOjkwMjYKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICItIHBhcmFuZG9cbiIKKworIzogZ2l0azo5MDMxIGdpdGs6OTAzNCBnaXRrOjkwNDIgZ2l0azo5MDU2IGdpdGs6OTA2NQorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIlJldmlzw6NvIgorCisjOiBnaXRrOjkwMzUKK21zZ2lkICIiCisiIGlzIHRoZSBzYW1lIHBhdGNoIGFzXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIsOpIG8gbWVzbW8gcGF0Y2ggcXVlXG4iCisiICAgICAgICIKKworIzogZ2l0azo5MDQzCittc2dpZCAiIgorIiBkaWZmZXJzIGZyb21cbiIKKyIgICAgICAgIgorbXNnc3RyICJkaWZlcmUgZGUiCisKKyM6IGdpdGs6OTA0NQorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJEaWZlcmVuw6dhIGRlIHJldmlzw7VlczpcbiIKKyJcbiIKKworIzogZ2l0azo5MDU3IGdpdGs6OTA2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICJwb3NzdWkgJXMgZGVzY2VuZGVudGVzIC0gcGFyYW5kb1xuIgorCisjOiBnaXRrOjkwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiRXJybyBhbyBzYWx2YXIgcmV2aXPDo28gcGFyYSBvIGFycXVpdm86ICVzIgorCisjOiBnaXRrOjkwOTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgorbXNnc3RyICJFcnJvIGFvIGNvbXBhcmFyIHJldmlzw7VlczogJXMiCisKKyM6IGdpdGs6OTEzNworbXNnaWQgIlRvcCIKK21zZ3N0ciAiSW7DrWNpbyIKKworIzogZ2l0azo5MTM4Cittc2dpZCAiRnJvbSIKK21zZ3N0ciAiRGUiCisKKyM6IGdpdGs6OTE0MworbXNnaWQgIlRvIgorbXNnc3RyICJQYXJhIgorCisjOiBnaXRrOjkxNjcKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAiR2VyYXIgcGF0Y2giCisKKyM6IGdpdGs6OTE2OQorbXNnaWQgIkZyb206IgorbXNnc3RyICJEZToiCisKKyM6IGdpdGs6OTE3OAorbXNnaWQgIlRvOiIKK21zZ3N0ciAiUGFyYToiCisKKyM6IGdpdGs6OTE4NworbXNnaWQgIlJldmVyc2UiCittc2dzdHIgIkludmVydGVyIgorCisjOiBnaXRrOjkxODkgZ2l0azo5Mzg1Cittc2dpZCAiT3V0cHV0IGZpbGU6IgorbXNnc3RyICJBcnF1aXZvIGRlIHNhw61kYToiCisKKyM6IGdpdGs6OTE5NQorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICJHZXJhciIKKworIzogZ2l0azo5MjMzCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICJFcnJvIGFvIGNyaWFyIHBhdGNoOiIKKworIzogZ2l0azo5MjU2IGdpdGs6OTM3MyBnaXRrOjk0MzAKK21zZ2lkICJJRDoiCittc2dzdHIgIklEOiIKKworIzogZ2l0azo5MjY1Cittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJOb21lIGRhIGV0aXF1ZXRhOiIKKworIzogZ2l0azo5MjY4Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgIkEgZGVzY3Jpw6fDo28gZGEgZXRpcXVldGEgw6kgb3BjaW9uYWwiCisKKyM6IGdpdGs6OTI3MAorbXNnaWQgIlRhZyBtZXNzYWdlOiIKK21zZ3N0ciAiRGVzY3Jpw6fDo28gZGEgZXRpcXVldGEiCisKKyM6IGdpdGs6OTI3NCBnaXRrOjk0MzkKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyaWFyIgorCisjOiBnaXRrOjkyOTIKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIk5vbWUgZGEgZXRpcXVldGEgbsOjbyBpbmRpY2FkbyIKKworIzogZ2l0azo5Mjk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRXRpcXVldGEgXCIlc1wiIGrDoSBleGlzdGUiCisKKyM6IGdpdGs6OTMwNgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIkVycm8gYW8gY3JpYXIgZXRpcXVldGE6IgorCisjOiBnaXRrOjkzODIKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiQ29tYW5kbzoiCisKKyM6IGdpdGs6OTM5MAorbXNnaWQgIldyaXRlIgorbXNnc3RyICJFeHBvcnRhciIKKworIzogZ2l0azo5NDA4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJFcnJvIGFvIGV4cG9ydGFyIHJldmlzw6NvIgorCisjOiBnaXRrOjk0MzUKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiTm9tZToiCisKKyM6IGdpdGs6OTQ1OAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgIkluZGlxdWUgdW0gbm9tZSBwYXJhIG8gbm92byByYW1vIgorCisjOiBnaXRrOjk0NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAiTyByYW1vIFwiJXNcIiBqw6EgZXhpc3RlLiBTb2JyZXNjcmV2ZXI/IgorCisjOiBnaXRrOjk1MzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiUmV2aXPDo28gJXMgasOhIGluY2x1c2Egbm8gcmFtbyAlcyAtLSB2b2PDqiByZWFsbWVudGUgZGVzZWphIHJlYXBsaWPDoS1sYT8iCisKKyM6IGdpdGs6OTUzNQorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICJDaGVycnktcGlja2luZyIKKworIzogZ2l0azo5NTQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIk8gY2hlcnJ5LXBpY2sgZmFsaG91IHBvcnF1ZSBvIGFycXVpdm8gXCIlc1wiIHBvc3N1aSBtdWRhbsOnYXMgbG9jYWlzLlxuIgorIlNhbHZlIGEgdW1hIHJldmlzw6NvLCByZWRlZmluYSBvdSBhcm1hemVuZSAoc3Rhc2gpIHN1YXMgbXVkYW7Dp2FzIGUgdGVudGUgIgorIm5vdmFtZW50ZS4iCisKKyM6IGdpdGs6OTU1MAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIk8gY2hlcnJ5LXBpY2sgZmFsaG91IHBvcnF1ZSBob3V2ZSB1bSBjb25mbGl0byBuYSBtZXNjbGFnZW0uXG4iCisiRXhlY3V0YXIgbyAnZ2l0IGNpdG9vbCcgcGFyYSByZXNvbHbDqi1sbz8iCisKKyM6IGdpdGs6OTU2NiBnaXRrOjk2MjQKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAiTmVuaHVtYSByZXZpc8OjbyBmb2kgc2FsdmEiCisKKyM6IGdpdGs6OTU5MworIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKK21zZ3N0ciAiUmV2aXPDo28gJXMgasOhIGluY2x1c2Egbm8gcmFtbyAlcyAtLSB2b2PDqiByZWFsbWVudGUgZGVzZWphIHJlYXBsaWPDoS1sYT8iCisKKyM6IGdpdGs6OTU5OAorIywgZnV6enkKK21zZ2lkICJSZXZlcnRpbmciCittc2dzdHIgIlJlZGVmaW5pbmRvIgorCisjOiBnaXRrOjk2MDYKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKKyJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJPIGNoZXJyeS1waWNrIGZhbGhvdSBwb3JxdWUgbyBhcnF1aXZvIFwiJXNcIiBwb3NzdWkgbXVkYW7Dp2FzIGxvY2Fpcy5cbiIKKyJTYWx2ZSBhIHVtYSByZXZpc8OjbywgcmVkZWZpbmEgb3UgYXJtYXplbmUgKHN0YXNoKSBzdWFzIG11ZGFuw6dhcyBlIHRlbnRlICIKKyJub3ZhbWVudGUuIgorCisjOiBnaXRrOjk2MTAKKyMsIGZ1enp5Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyIgRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJPIGNoZXJyeS1waWNrIGZhbGhvdSBwb3JxdWUgaG91dmUgdW0gY29uZmxpdG8gbmEgbWVzY2xhZ2VtLlxuIgorIkV4ZWN1dGFyIG8gJ2dpdCBjaXRvb2wnIHBhcmEgcmVzb2x2w6otbG8/IgorCisjOiBnaXRrOjk2NTMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJDb25maXJtYXIgcmVkZWZpbmnDp8OjbyIKKworIzogZ2l0azo5NjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAiVm9jw6ogcmVhbG1lbnRlIGRlc2VqYSByZWRlZmluaXIgbyByYW1vICVzIHBhcmEgJXM/IgorCisjOiBnaXRrOjk2NTcKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiVGlwbyBkZSByZWRlZmluacOnw6NvIgorCisjOiBnaXRrOjk2NjAKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiU29mdDogZGVpeGEgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGUgbyDDrW5kaWNlIGludG9jYWRvcyIKKworIzogZ2l0azo5NjYzCittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICJNaXN0bzogRGVpeGEgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGludG9jYWRhLCByZWRlZmluZSBvIMOtbmRpY2UiCisKKyM6IGdpdGs6OTY2NgorbXNnaWQgIiIKKyJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCisiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorbXNnc3RyICIiCisiSGFyZDogUmVkZWZpbmUgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGUgbyDDrW5kaWNlXG4iCisiKGRlc2NhcnRhIFRPREFTIGFzIG11ZGFuw6dhcyBsb2NhaXMpIgorCisjOiBnaXRrOjk2ODMKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgIlJlZGVmaW5pbmRvIgorCisjOiBnaXRrOjk3NDMKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIkFicmluZG8iCisKKyM6IGdpdGs6OTc5NgorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIkltcG9zc8OtdmVsIGV4Y2x1aXIgbyByYW1vIGF0dWFsbWVudGUgYWJlcnRvIgorCisjOiBnaXRrOjk4MDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorIkFzIHJldmlzw7VlcyBkbyByYW1vIFwiJXNcIiBuw6NvIGV4aXN0ZW0gZW0gbmVuaHVtIG91dHJvIHJhbW8uXG4iCisiVm9jw6ogcmVhbG1lbnRlIGRlc2VqYSBleGNsdWlyIHJhbW8gXCIlc1wiPyIKKworIzogZ2l0azo5ODMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJSZWZlcsOqbmNpYXM6ICVzIgorCisjOiBnaXRrOjk4NTAKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRybyIKKworIzogZ2l0azoxMDE0NgorbXNnaWQgIiIKKyJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKKyJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKK21zZ3N0ciAiIgorIkVycm8gYW8gbGVyIGEgdG9wb2xvZ2lhIGRhcyByZXZpc8O1ZXM7IGFzIGluZm9ybWHDp8O1ZXMgZG9zIHJhbW9zIGUgZXRpcXVldGFzICIKKyJhbnRlY2Vzc29yYXMvc3VjZXNzb3JhcyBlc3RhcsOjbyBpbmNvbXBsZXRhcyIKKworIzogZ2l0azoxMTEyMworbXNnaWQgIlRhZyIKK21zZ3N0ciAiRXRpcXVldGEiCisKKyM6IGdpdGs6MTExMjcKK21zZ2lkICJJZCIKK21zZ3N0ciAiSWQiCisKKyM6IGdpdGs6MTEyMTAKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAiU2VsZWNpb25hciBmb250ZXMgZG8gR2l0ayIKKworIzogZ2l0azoxMTIyNworbXNnaWQgIkIiCittc2dzdHIgIkIiCisKKyM6IGdpdGs6MTEyMzAKK21zZ2lkICJJIgorbXNnc3RyICJJIgorCisjOiBnaXRrOjExMzQ4Cittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJPcMOnw7VlcyBkYSBsaXN0YSBkZSByZXZpc8O1ZXMiCisKKyM6IGdpdGs6MTEzNTEKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgIkxhcmd1cmEgbcOheGltYSBkbyBncmFmbyAobGluaGFzKSIKKworIzogZ2l0azoxMTM1NQorIywgbm8tdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIkxhcmd1cmEgbcOheGltYSBkbyBncmFmbyAoJSBkbyBwYWluZWwpIgorCisjOiBnaXRrOjExMzU4Cittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJFeGliaXIgbXVkYW7Dp2FzIGxvY2FpcyIKKworIzogZ2l0azoxMTM2MQorIywgZnV6enkKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgorbXNnc3RyICJTZWxlY2lvbmFyIG8gU0hBMSBhdXRvbWF0aWNhbWVudGUiCisKKyM6IGdpdGs6MTEzNjUKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICJPY3VsdGFyIHJlZmVyw6puY2lhcyByZW1vdGFzIgorCisjOiBnaXRrOjExMzY5Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9ww6fDtWVzIGRlIGV4aWJpw6fDo28gZGFzIGFsdGVyYcOnw7VlcyIKKworIzogZ2l0azoxMTM3MQorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJFc3Bhw6dvcyBwb3IgdGFidWxhw6fDo28iCisKKyM6IGdpdGs6MTEzNzQKKyMsIGZ1enp5Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKK21zZ3N0ciAiRXhpYmlyIGV0aXF1ZXRhcyBwcsOzeGltYXMiCisKKyM6IGdpdGs6MTEzNzcKK21zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTEzODAKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIkxpbWl0YXIgZGlmZXJlbsOnYXMgYW9zIGNhbWluaG9zIGxpc3RhZG9zIgorCisjOiBnaXRrOjExMzgzCittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIlVzYXIgY29kaWZpY2HDp8O1ZXMgZGlzdGludGFzIHBvciBhcnF1aXZvIgorCisjOiBnaXRrOjExMzg5IGdpdGs6MTE1MzYKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgIkZlcnJhbWVudGEgJ2RpZmYnIGV4dGVybmEiCisKKyM6IGdpdGs6MTEzOTAKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIlNlbGVjaW9uYXIuLi4iCisKKyM6IGdpdGs6MTEzOTUKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIk9ww6fDtWVzIGdlcmFpcyIKKworIzogZ2l0azoxMTM5OAorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAiVXNhciB0ZW1hcyBwYXJhIGFzIGphbmVsYXMiCisKKyM6IGdpdGs6MTE0MDAKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIoZXhpZ2UgcmVpbmljaWFsaXphw6fDo28pIgorCisjOiBnaXRrOjExNDAyCittc2dpZCAiKGN1cnJlbnRseSB1bmF2YWlsYWJsZSkiCittc2dzdHIgIihhdHVhbG1lbnRlIGluZGlzcG9uw612ZWwpIgorCisjOiBnaXRrOjExNDEzCittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkNvcmVzOiBjbGlxdWUgcGFyYSBlc2NvbGhlciIKKworIzogZ2l0azoxMTQxNgorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiSW50ZXJmYWNlIgorCisjOiBnaXRrOjExNDE3Cittc2dpZCAiaW50ZXJmYWNlIgorbXNnc3RyICJpbnRlcmZhY2UiCisKKyM6IGdpdGs6MTE0MjAKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICJTZWd1bmRvIHBsYW5vIgorCisjOiBnaXRrOjExNDIxIGdpdGs6MTE0NTEKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICJzZWd1bmRvIHBsYW5vIgorCisjOiBnaXRrOjExNDI0Cittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiUHJpbWVpcm8gcGxhbm8iCisKKyM6IGdpdGs6MTE0MjUKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICJwcmltZWlybyBwbGFubyIKKworIzogZ2l0azoxMTQyOAorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAiRGlmZjogbGluaGFzIGV4Y2x1w61kYXMiCisKKyM6IGdpdGs6MTE0MjkKK21zZ2lkICJkaWZmIG9sZCBsaW5lcyIKK21zZ3N0ciAibGluaGFzIGV4Y2x1w61kYXMiCisKKyM6IGdpdGs6MTE0MzMKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmY6IGxpbmhhcyBhZGljaW9uYWRhcyIKKworIzogZ2l0azoxMTQzNAorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJsaW5oYXMgYWRpY2lvbmFkYXMiCisKKyM6IGdpdGs6MTE0MzgKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAiRGlmZjogY2FiZcOnYWxobyBkbyBibG9jbyIKKworIzogZ2l0azoxMTQ0MAorbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgImNhYmXDp2FsaG8gZG8gYmxvY28iCisKKyM6IGdpdGs6MTE0NDQKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAiMsK6IHBsYW5vIGRhIGxpbmhhIG1hcmNhZGEiCisKKyM6IGdpdGs6MTE0NDYKK21zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgorbXNnc3RyICJzZWd1bmRvIHBsYW5vIGRhIGxpbmhhIG1hcmNhZGEiCisKKyM6IGdpdGs6MTE0NTAKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIjLCuiBwbGFubyBkYSBzZWxlw6fDo28iCisKKyM6IGdpdGs6MTE0NTkKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJGb250ZXM6IGNsaXF1ZSBwYXJhIGVzY29saGVyIgorCisjOiBnaXRrOjExNDYxCittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJGb250ZSBwcmluY2lwYWwiCisKKyM6IGdpdGs6MTE0NjIKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAiRm9udGUgZGEgbGlzdGEgZGUgbXVkYW7Dp2FzIgorCisjOiBnaXRrOjExNDYzCittc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKK21zZ3N0ciAiRm9udGUgZGEgaW50ZXJmYWNlIgorCisjOiBnaXRrOjExNDg1Cittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHJlZmVyw6puY2lhcyBkbyBHaXRrIgorCisjOiBnaXRrOjExNDk0CisjLCBmdXp6eQorbXNnaWQgIkdlbmVyYWwiCittc2dzdHIgIkdlcmFyIgorCisjOiBnaXRrOjExNDk1Cittc2dpZCAiQ29sb3JzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTE0OTYKK21zZ2lkICJGb250cyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExNTQ2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0azogc2VsZWNpb25hciBjb3IgcGFyYSAlcyIKKworIzogZ2l0azoxMjA1OQorbXNnaWQgIiIKKyJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKKyIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjEyMjY5Cittc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKK21zZ3N0ciAiTsOjbyBow6EgbmVuaHVtIHJlcG9zaXTDs3JpbyBnaXQgYXF1aS4iCisKKyM6IGdpdGs6MTIzMTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIiIKKyJPIGFyZ3VtZW50byBcIiVzXCIgw6kgYW1iw61ndW8gKGVzcGVjaWZpY2EgdGFudG8gdW1hIHJldmlzw6NvIGUgdW0gbm9tZSBkZSAiCisiYXJxdWl2bykiCisKKyM6IGdpdGs6MTIzMjgKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICJBcmd1bWVudG9zIGluY29ycmV0b3MgcGFyYSBvIGdpdGs6IgorCisjfiBtc2dpZCAibWMiCisjfiBtc2dzdHIgIm1jIgorCisjfiBtc2dpZCAibmV4dCIKKyN+IG1zZ3N0ciAiUHLDs3hpbW8iCisKKyN+IG1zZ2lkICJwcmV2IgorI34gbXNnc3RyICJBbnRlcmlvciIKKworI34gbXNnaWQgIkNEYXRlIgorI34gbXNnc3RyICJEYXRhUiIKKworI34gbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCisjfiBtc2dzdHIgIkltcG9zc8OtdmVsIGVuY29udHJhciBvIGRpcmV0w7NyaW8gZ2l0IFwiJXNcIi4iCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9wdF9wdC5wbyBiL2dpdGstZ2l0L3BvL3B0X3B0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ODBlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9wdF9wdC5wbwpAQCAtMCwwICsxLDEzNzYgQEAKKyMgUG9ydHVndWVzZSB0cmFuc2xhdGlvbnMgZm9yIGdpdGsgcGFja2FnZS4KKyMgQ29weXJpZ2h0IChDKSAyMDE2IFBhdWwgTWFja2VycmFzCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjIFZhc2NvIEFsbWVpZGEgPHZhc2NvbWFsbWVpZGFAc2Fwby5wdD4sIDIwMTYuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRrXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE2LTA0LTE1IDE2OjUyKzAwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTA1LTA2IDE1OjM1KzAwMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFZhc2NvIEFsbWVpZGEgPHZhc2NvbWFsbWVpZGFAc2Fwby5wdD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBQb3J0dWd1ZXNlXG4iCisiTGFuZ3VhZ2U6IHB0XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisiWC1HZW5lcmF0b3I6IFZpcnRhYWwgMC43LjFcbiIKKworIzogZ2l0azoxNDAKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBvYnRlciBsaXN0YSBkZSBmaWNoZWlyb3MgbsOjbyBpbnRlZ3JhZG9zOiIKKworIzogZ2l0azoyMTIgZ2l0azoyMzk5Cittc2dpZCAiQ29sb3Igd29yZHMiCittc2dzdHIgIkNvbG9yaXIgcGFsYXZyYXMiCisKKyM6IGdpdGs6MjE3IGdpdGs6MjM5OSBnaXRrOjgyMzkgZ2l0azo4MjcyCittc2dpZCAiTWFya3VwIHdvcmRzIgorbXNnc3RyICJNYXJjYXIgcGFsYXZyYXMiCisKKyM6IGdpdGs6MzI0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJFcnJvIGFvIGFuYWxpc2FyIHJldmlzw7VlczoiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiRXJybyBhbyBleGVjdXRhciBvIGNvbWFuZG8gZGUgLS1hcmdzY21kOiIKKworIzogZ2l0azozOTMKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyJOZW5odW0gZmljaGVpcm8gc2VsZWNpb25hZG86IC0tbWVyZ2UgZXNwZWNpZmljYWRvIG1hcyBuw6NvIGjDoSBmaWNoZWlyb3MgcG9yICIKKyJpbnRlZ3Jhci4iCisKKyM6IGdpdGs6Mzk2Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgIiIKKyJOZW5odW0gZmljaGVpcm8gc2VsZWNpb25hZG86IC0tbWVyZ2UgZXNwZWNpZmljYWRvIG1hcyBuw6NvIGjDoSBmaWNoZWlyb3MgcG9yICIKKyJpbnRlZ3JhciBhbyBuw612ZWwgZGUgZmljaGVpcm8uIgorCisjOiBnaXRrOjQxOCBnaXRrOjU2NgorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKK21zZ3N0ciAiRXJybyBhbyBleGVjdXRhciBnaXQgbG9nOiIKKworIzogZ2l0azo0MzYgZ2l0azo1ODIKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICJBIGxlciIKKworIzogZ2l0azo0OTYgZ2l0azo0NTQ0Cittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICJBIGxlciBjb21taXRzLi4uIgorCisjOiBnaXRrOjQ5OSBnaXRrOjE2MzcgZ2l0azo0NTQ3Cittc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKK21zZ3N0ciAiTmVuaHVtIGNvbW1pdCBzZWxlY2lvbmFkbyIKKworIzogZ2l0azoxNDQ1IGdpdGs6NDA2NCBnaXRrOjEyNDY5Cittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICJMaW5oYSBkZSBjb21hbmRvcyIKKworIzogZ2l0azoxNTExCittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBhbmFsaXNhciBhIHNhw61kYSBkZSBnaXQgbG9nOiIKKworIzogZ2l0azoxNzQwCittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiTsOjbyBow6EgaW5mb3JtYcOnw6NvIGRpc3BvbsOtdmVsIHNvYnJlIG8gY29tbWl0IgorCisjOiBnaXRrOjE5MDMgZ2l0azoxOTMyIGdpdGs6NDMzNCBnaXRrOjk3MDIgZ2l0azoxMTI3NCBnaXRrOjExNTU0Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBnaXRrOjE5MzQgZ2l0azo0MzM2IGdpdGs6OTIxNSBnaXRrOjkyOTQgZ2l0azo5NDI0IGdpdGs6OTQ3MyBnaXRrOjk3MDQKKyM6IGdpdGs6MTEyNzUgZ2l0azoxMTU1NQorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQ2FuY2VsYXIiCisKKyM6IGdpdGs6MjA4MworbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgIkF0JnVhbGl6YXIiCisKKyM6IGdpdGs6MjA4NAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgIiZSZWNhcnJlZ2FyIgorCisjOiBnaXRrOjIwODUKK21zZ2lkICJSZXJlYWQgcmUmZmVyZW5jZXMiCittc2dzdHIgIlJlbGVyIHJlJmZlcsOqbmNpYXMiCisKKyM6IGdpdGs6MjA4NgorbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIiZMaXN0YXIgcmVmZXLDqm5jaWFzIgorCisjOiBnaXRrOjIwODgKK21zZ2lkICJTdGFydCBnaXQgJmd1aSIKK21zZ3N0ciAiSW5pY2lhciBnaXQgJmd1aSIKKworIzogZ2l0azoyMDkwCittc2dpZCAiJlF1aXQiCittc2dzdHIgIiZTYWlyIgorCisjOiBnaXRrOjIwODIKK21zZ2lkICImRmlsZSIKK21zZ3N0ciAiJkZpY2hlaXJvIgorCisjOiBnaXRrOjIwOTQKK21zZ2lkICImUHJlZmVyZW5jZXMiCittc2dzdHIgIiZQcmVmZXLDqm5jaWFzIgorCisjOiBnaXRrOjIwOTMKK21zZ2lkICImRWRpdCIKK21zZ3N0ciAiJkVkaXRhciIKKworIzogZ2l0azoyMDk4Cittc2dpZCAiJk5ldyB2aWV3Li4uIgorbXNnc3RyICImTm92YSB2aXN0YS4uLiIKKworIzogZ2l0azoyMDk5Cittc2dpZCAiJkVkaXQgdmlldy4uLiIKK21zZ3N0ciAiJkVkaXRhciB2aXN0YS4uLiIKKworIzogZ2l0azoyMTAwCittc2dpZCAiJkRlbGV0ZSB2aWV3IgorbXNnc3RyICJFbGltaW5hJnIgdmlzdGEiCisKKyM6IGdpdGs6MjEwMgorbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgIiZUb2RvcyBvcyBmaWNoZWlyb3MiCisKKyM6IGdpdGs6MjA5NworbXNnaWQgIiZWaWV3IgorbXNnc3RyICImVmVyIgorCisjOiBnaXRrOjIxMDcgZ2l0azoyMTE3Cittc2dpZCAiJkFib3V0IGdpdGsiCittc2dzdHIgIiZTb2JyZSBnaXRrIgorCisjOiBnaXRrOjIxMDggZ2l0azoyMTIyCittc2dpZCAiJktleSBiaW5kaW5ncyIKK21zZ3N0ciAiJkF0YWxob3MiCisKKyM6IGdpdGs6MjEwNiBnaXRrOjIxMjEKK21zZ2lkICImSGVscCIKK21zZ3N0ciAiJkFqdWRhIgorCisjOiBnaXRrOjIxOTkgZ2l0azo4NjcxCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIklEIFNIQTE6IgorCisjOiBnaXRrOjIyNDMKK21zZ2lkICJSb3ciCittc2dzdHIgIkxpbmhhIgorCisjOiBnaXRrOjIyODEKK21zZ2lkICJGaW5kIgorbXNnc3RyICJQcm9jdXJhciIKKworIzogZ2l0azoyMzA5Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICJjb21taXQiCisKKyM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzA2IGdpdGs6NDcyOSBnaXRrOjQ3NTMgZ2l0azo2Nzc0IGdpdGs6Njg0NgorIzogZ2l0azo2OTMxCittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgImNvbnRlbmRvOiIKKworIzogZ2l0azoyMzE2IGdpdGs6MzU0NSBnaXRrOjM1NTAgZ2l0azo0NzgyCittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICJhbHRlcmEgb3MgY2FtaW5ob3M6IgorCisjOiBnaXRrOjIzMTcgZ2l0azo0Nzk2Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgImFkaWNpb25hL3JlbW92ZSBhIGNhZGVpYToiCisKKyM6IGdpdGs6MjMxOCBnaXRrOjQ3OTgKK21zZ2lkICJjaGFuZ2luZyBsaW5lcyBtYXRjaGluZzoiCittc2dzdHIgImFsdGVyYSBsaW5oYXMgY29tOiIKKworIzogZ2l0azoyMzI3IGdpdGs6MjMyOSBnaXRrOjQ3ODUKK21zZ2lkICJFeGFjdCIKK21zZ3N0ciAiRXhhdG8iCisKKyM6IGdpdGs6MjMyOSBnaXRrOjQ4NzMgZ2l0azo2NzQyCittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAiSWduTWFpw7pzY3VsYXMiCisKKyM6IGdpdGs6MjMyOSBnaXRrOjQ3NTUgZ2l0azo0ODcxIGdpdGs6NjczOAorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiRXhwci4gcmVndWxhciIKKworIzogZ2l0azoyMzMxIGdpdGs6MjMzMiBnaXRrOjQ4OTMgZ2l0azo0OTIzIGdpdGs6NDkzMCBnaXRrOjY4NjcgZ2l0azo2OTM1Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAiVG9kb3Mgb3MgY2FtcG9zIgorCisjOiBnaXRrOjIzMzIgZ2l0azo0ODkwIGdpdGs6NDkyMyBnaXRrOjY4MDUKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiQ2FiZcOnYWxobyIKKworIzogZ2l0azoyMzMzIGdpdGs6NDg5MCBnaXRrOjY4MDUgZ2l0azo2OTM1IGdpdGs6NzQwOAorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJDb21lbnTDoXJpb3MiCisKKyM6IGdpdGs6MjMzMyBnaXRrOjQ4OTAgZ2l0azo0ODk1IGdpdGs6NDkzMCBnaXRrOjY4MDUgZ2l0azo3MzQzIGdpdGs6ODg0OQorIzogZ2l0azo4ODY0Cittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJBdXRvciIKKworIzogZ2l0azoyMzMzIGdpdGs6NDg5MCBnaXRrOjY4MDUgZ2l0azo3MzQ1Cittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICJDb21taXR0ZXIiCisKKyM6IGdpdGs6MjM2NworbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiUGVzcXVpc2FyIgorCisjOiBnaXRrOjIzNzUKK21zZ2lkICJEaWZmIgorbXNnc3RyICJEaWZmIgorCisjOiBnaXRrOjIzNzcKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiVmVyc8OjbyBhbnRpZ2EiCisKKyM6IGdpdGs6MjM3OQorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICJWZXJzw6NvIG5vdmEiCisKKyM6IGdpdGs6MjM4MgorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIkxpbmhhcyBkZSBjb250ZXh0byIKKworIzogZ2l0azoyMzkyCittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiSWdub3JhciBlc3Bhw6dvcyIKKworIzogZ2l0azoyMzk2IGdpdGs6MjM5OCBnaXRrOjc5NzggZ2l0azo4MjI1Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICJEaWZmIGRlIGxpbmhhIgorCisjOiBnaXRrOjI0NjMKK21zZ2lkICJQYXRjaCIKK21zZ3N0ciAiUGF0Y2giCisKKyM6IGdpdGs6MjQ2NQorbXNnaWQgIlRyZWUiCittc2dzdHIgIsOBcnZvcmUiCisKKyM6IGdpdGs6MjYzNSBnaXRrOjI2NTYKK21zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCittc2dzdHIgIkRpZmYgZXN0ZSAtPiBzZWxlw6fDo28iCisKKyM6IGdpdGs6MjYzNiBnaXRrOjI2NTcKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIkRpZmYgc2VsZcOnw6NvIC0+IGVzdGUiCisKKyM6IGdpdGs6MjYzNyBnaXRrOjI2NTgKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICJHZXJhciBwYXRjaCIKKworIzogZ2l0azoyNjM4IGdpdGs6OTI3MworbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIkNyaWFyIHRhZyIKKworIzogZ2l0azoyNjM5Cittc2dpZCAiQ29weSBjb21taXQgc3VtbWFyeSIKK21zZ3N0ciAiQ29waWFyIHN1bcOhcmlvIGRvIGNvbW1pdCIKKworIzogZ2l0azoyNjQwIGdpdGs6OTQwNAorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICJFc2NyZXZlciBjb21taXQgbnVtIGZpY2hlaXJvIgorCisjOiBnaXRrOjI2NDEgZ2l0azo5NDYxCittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgIkNyaWFyIG5vdm8gcmFtbyIKKworIzogZ2l0azoyNjQyCittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIkVmZXR1YXIgY2hlcnJ5LXBpY2sgZGVzdGUgY29tbWl0IgorCisjOiBnaXRrOjI2NDMKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJSZXBvciByYW1vIEhFQUQgcGFyYSBhcXVpIgorCisjOiBnaXRrOjI2NDQKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICJNYXJjYXIgZXN0ZSBjb21taXQiCisKKyM6IGdpdGs6MjY0NQorbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICJWb2x0YXIgw6AgbWFyY2EiCisKKyM6IGdpdGs6MjY0NgorbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgorbXNnc3RyICJFbmNvbnRyYXIgZGVzY2VuZGVzdGUgZGVzdGUgZSBkYSBtYXJjYSIKKworIzogZ2l0azoyNjQ3Cittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIkNvbXBhcmFyIGNvbSBvIGNvbW1pdCBtYXJjYWRvIgorCisjOiBnaXRrOjI2NDggZ2l0azoyNjU5Cittc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCittc2dzdHIgIkRpZmYgZXN0ZSAtPiBjb21taXQgbWFyY2FkbyIKKworIzogZ2l0azoyNjQ5IGdpdGs6MjY2MAorbXNnaWQgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIgorbXNnc3RyICJEaWZmIGNvbW1pdCBtYXJjYWRvIC0+IGVzdGUiCisKKyM6IGdpdGs6MjY1MAorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiUmV2ZXJ0ZXIgZXN0ZSBjb21taXQiCisKKyM6IGdpdGs6MjY2NgorbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiRXh0cmFpciBlc3RlIHJhbW8iCisKKyM6IGdpdGs6MjY2NworbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiUmVtb3ZlciBlc3RlIHJhbW8iCisKKyM6IGdpdGs6MjY2OAorbXNnaWQgIkNvcHkgYnJhbmNoIG5hbWUiCittc2dzdHIgIkNvcGlhciBub21lIGRvIHJhbW8iCisKKyM6IGdpdGs6MjY3NQorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiUmVhbMOnYXIgZXN0ZSB0YW1iw6ltIgorCisjOiBnaXRrOjI2NzYKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICJSZWFsw6dhciBhcGVuYXMgZXN0ZSIKKworIzogZ2l0azoyNjc3Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAiRGlmZiBleHRlcm5vIgorCisjOiBnaXRrOjI2NzgKK21zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgorbXNnc3RyICJDdWxwYXIgY29tbWl0IHBhaSIKKworIzogZ2l0azoyNjc5Cittc2dpZCAiQ29weSBwYXRoIgorbXNnc3RyICJDb3BpYXIgY2FtaW5obyIKKworIzogZ2l0azoyNjg2Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICJNb3N0cmFyIG9yaWdlbSBkZXN0ZSBmaWNoZWlybyIKKworIzogZ2l0azoyNjg3Cittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICJFeGVjdXRhciBnaXQgZ3VpIGJsYW1lIHNvYnJlIGVzdGEgbGluaGEiCisKKyM6IGdpdGs6MzAzMQorbXNnaWQgIkFib3V0IGdpdGsiCittc2dzdHIgIlNvYnJlIGdpdGsiCisKKyM6IGdpdGs6MzAzMworbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSB1bSB2aXN1YWxpemFkb3IgZGUgY29tbWl0cyBkbyBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGUgcmVkaXN0cmlidWEgc29iIG9zIHRlcm1vcyBkYSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKKworIzogZ2l0azozMDQxIGdpdGs6MzEwOCBnaXRrOjk4OTAKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiRmVjaGFyIgorCisjOiBnaXRrOjMwNjIKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiQXRhbGhvcyBkbyBnaXRrIgorCisjOiBnaXRrOjMwNjUKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIkF0YWxob3MgZG8gZ2l0azoiCisKKyM6IGdpdGs6MzA2NworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0U2FpciIKKworIzogZ2l0azozMDY4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLVc+XHRcdEZlY2hhciBqYW5lbGEiCisKKyM6IGdpdGs6MzA2OQorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPEhvbWU+XHRcdE1vdmVyIHBhcmEgbyBwcmltZWlybyBjb21taXQiCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCittc2dzdHIgIjxFbmQ+XHRcdE1vdmVyIHBhcmEgbyDDumx0aW1vIGNvbW1pdCIKKworIzogZ2l0azozMDcxCittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8Q2ltYT4sIHAsIGtcdE1vdmVyIHBhcmEgbyBjb21taXQgYWNpbWEiCisKKyM6IGdpdGs6MzA3MgorbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxCYWl4bz4sIG4sIGpcdE1vdmVyIHBhcmEgbyBjb21taXQgYWJhaXhvIgorCisjOiBnaXRrOjMwNzMKK21zZ2lkICI8TGVmdD4sIHosIGhcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8RXNxdWVyZGE+LCB6LCBoXHRSZWN1YXIgbm8gaGlzdMOzcmljbyIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxEaXJlaXRhPiwgeCwgbFx0QXZhbsOnYXIgbm8gaGlzdMOzcmljbyIKKworIzogZ2l0azozMDc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjwlcy1uPlx0SXIgcGFyYSBvIG4tw6lzaW1vIHBhaSBkbyBjb21taXQgYXR1YWwgbm8gaGlzdMOzcmljbyIKKworIzogZ2l0azozMDc2Cittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlVXA+XHRNb3ZlciBhIGxpc3RhIGRlIGNvbW1pdHMgdW1hIHDDoWdpbmEgcGFyYSBjaW1hIgorCisjOiBnaXRrOjMwNzcKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlRG93bj5cdE1vdmVyIGEgbGlzdGEgZGUgY29tbWl0cyB1bWEgcMOhZ2luYSBwYXJhIGJhaXhvIgorCisjOiBnaXRrOjMwNzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1Ib21lPlx0RGVzbG9jYXIgcGFyYSBvIHRvcG8gZGEgbGlzdGEiCisKKyM6IGdpdGs6MzA3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kPlx0RGVzbG9jYXIgcGFyYSBvIGZpbSBkYSBsaXN0YSIKKworIzogZ2l0azozMDgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtQ2ltYT5cdERlc2xvY2FyIGEgbGlzdGEgZGUgY29tbWl0cyB1bWEgbGluaGEgcGFyYSBjaW1hIgorCisjOiBnaXRrOjMwODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtQmFpeG8+XHREZXNsb2NhciBhIGxpc3RhIGRlIGNvbW1pdHMgdW1hIGxpbmhhIHBhcmEgYmFpeG8iCisKKyM6IGdpdGs6MzA4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlVXA+XHREZXNsb2NhciBhIGxpc3RhIGRlIGNvbW1pdHMgdW1hIHDDoWdpbmEgcGFyYSBjaW1hIgorCisjOiBnaXRrOjMwODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VEb3duPlx0RGVzbG9jYXIgYSBsaXN0YSBkZSBjb21taXRzIHVtYSBww6FnaW5hIHBhcmEgYmFpeG8iCisKKyM6IGdpdGs6MzA4NAorbXNnaWQgIjxTaGlmdC1VcD5cdEZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSIKK21zZ3N0ciAiPFNoaWZ0LUNpbWE+XHRQcm9jdXJhciBwYXJhIHRyw6FzIChwYXJhIGNpbWEsIGNvbW1pdHMgcG9zdGVyaW9yZXMpIgorCisjOiBnaXRrOjMwODUKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFNoaWZ0LUJhaXhvPlx0UHJvY3VyYXIgcGFyYSBhIGZyZW50ZSAocGFyYSBiYWl4bywgY29tbWl0cyBhbnRlcmlvcmVzKSIKKworIzogZ2l0azozMDg2Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHREZXNsb2NhciB2aXN0YSBkaWZmIHVtYSBww6FnaW5hIHBhcmEgY2ltYSIKKworIzogZ2l0azozMDg3Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxSZXRyb2Nlc3NvPlx0RGVzbG9jYXIgdmlzdGEgZGlmZiB1bWEgcMOhZ2luYSBwYXJhIGNpbWEiCisKKyM6IGdpdGs6MzA4OAorbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8RXNwYcOnbz5cdERlc2xvY2FyIHZpc3RhIGRpZmYgdW1hIHDDoWdpbmEgcGFyYSBiYWl4byIKKworIzogZ2l0azozMDg5Cittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdERlc2xvY2FyIHZpc3RhIGRpZmYgMTggbGluaGFzIHBhcmEgY2ltYSIKKworIzogZ2l0azozMDkwCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0RGVzbG9jYXIgdmlzdGEgZGlmZiAxOCBsaW5oYXMgcGFyYSBiYWl4byIKKworIzogZ2l0azozMDkxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRQcm9jdXJhciIKKworIzogZ2l0azozMDkyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdE1vdmVyIHBhcmEgYSBvY29ycsOqbmNpYSBzZWd1aW50ZSIKKworIzogZ2l0azozMDkzCittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdE1vdmVyIHBhcmEgYSBvY29ycsOqbmNpYSBzZWd1aW50ZSIKKworIzogZ2l0azozMDk0Cittc2dpZCAiZ1x0XHRHbyB0byBjb21taXQiCittc2dzdHIgImdcdFx0SXIgcGFyYSBvIGNvbW1pdCIKKworIzogZ2l0azozMDk1Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRGb2NhciBhIGNhaXhhIGRlIHBlc3F1aXNhIgorCisjOiBnaXRrOjMwOTYKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx0TW92ZXIgcGFyYSBhIG9jb3Jyw6puY2lhIGFudGVyaW9yIgorCisjOiBnaXRrOjMwOTcKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdERlc2xvY2FyIHZpc3RhIGRpZmYgcGFyYSBvIGZpY2hlaXJvIHNlZ3VpbnRlIgorCisjOiBnaXRrOjMwOTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRQcm9jdXJhciBwZWxhIG9jb3Jyw6puY2lhIHNlZ3VpbnRlIG5hIHZpc3RhIGRpZmYiCisKKyM6IGdpdGs6MzA5OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRQcm9jdXJhciBwZWxhIG9jb3Jyw6puY2lhIGFudGVyaW9yIG5hIHZpc3RhIGRpZmYiCisKKyM6IGdpdGs6MzEwMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUCs+XHRBdW1lbnRhciBvIHRhbWFuaG8gZGEgbGV0cmEiCisKKyM6IGdpdGs6MzEwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWFpcz5cdEF1bWVudGFyIG8gdGFtYW5obyBkYSBsZXRyYSIKKworIzogZ2l0azozMTAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdERpbWludWlyIG8gdGFtYW5obyBkYSBsZXRyYSIKKworIzogZ2l0azozMTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWVub3M+XHREaW1pbnVpciBvIHRhbWFuaG8gZGEgbGV0cmEiCisKKyM6IGdpdGs6MzEwNAorbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdEF0dWFsaXphciIKKworIzogZ2l0azozNTY5IGdpdGs6MzU3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICJFcnJvIGFvIGNyaWFyIGZpY2hlaXJvIHRlbXBvcsOhcmlvICVzOiIKKworIzogZ2l0azozNTkxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIkVycm8gYW8gb2J0ZXIgXCIlc1wiIGRlICVzOiIKKworIzogZ2l0azozNjU0Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJvIGNvbWFuZG8gZmFsaG91OiIKKworIzogZ2l0azozODAzCittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgIkNvbW1pdCBpbmV4aXN0ZW50ZSIKKworIzogZ2l0azozODE3Cittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiBvIGNvbWFuZG8gZmFsaG91OiIKKworIzogZ2l0azozODQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGxlciBhIGNhYmXDp2EgZGUgaW50ZWdyYcOnw6NvOiAlcyIKKworIzogZ2l0azozODU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkVycm8gYW8gbGVyIG8gw61uZGljZTogJXMiCisKKyM6IGdpdGs6Mzg4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBpbmljaWFyIGdpdCBibGFtZTogJXMiCisKKyM6IGdpdGs6Mzg4NCBnaXRrOjY3NzMKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgIkEgcHJvY3VyYXIiCisKKyM6IGdpdGs6MzkxNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiRXJybyBhbyBleGVjdXRhciBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM5NDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICJFc3NhIGxpbmhhIHByb3bDqW0gZG8gY29tbWl0ICVzLCBxdWUgbsOjbyBlc3TDoSBuZXN0YSB2aXN0YSIKKworIzogZ2l0azozOTU4Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAiVmlzdWFsaXphZG9yIGRpZmYgZXh0ZXJubyBmYWxob3U6IgorCisjOiBnaXRrOjQwNjIKK21zZ2lkICJBbGwgZmlsZXMiCittc2dzdHIgIlRvZG9zIG9zIGZpY2hlaXJvcyIKKworIzogZ2l0azo0MDg2Cittc2dpZCAiVmlldyIKK21zZ3N0ciAiVmlzdGEiCisKKyM6IGdpdGs6NDA4OQorbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICJEZWZpbmnDp8OjbyBkZSB2aXN0YXMgZG8gZ2l0ayIKKworIzogZ2l0azo0MDkzCittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJSZWNvcmRhciBlc3RhIHZpc3RhIgorCisjOiBnaXRrOjQwOTQKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJSZWZlcsOqbmNpYXMgKGxpc3RhIHNlcGFyYWRhIHBvciBlc3Bhw6dvKToiCisKKyM6IGdpdGs6NDA5NQorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIlJhbW9zIGUgdGFnczoiCisKKyM6IGdpdGs6NDA5NgorbXNnaWQgIkFsbCByZWZzIgorbXNnc3RyICJUb2RhcyBhcyByZWZlcsOqbmNpYXMiCisKKyM6IGdpdGs6NDA5NworbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICJUb2RvcyBvcyByYW1vcyAobG9jYWlzKSIKKworIzogZ2l0azo0MDk4Cittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgIlRvZGFzIGFzIHRhZ3MiCisKKyM6IGdpdGs6NDA5OQorbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIlRvZG9zIG9zIHJhbW9zIHJlbW90b3MgZGUgbW9uaXRvcml6YcOnw6NvIgorCisjOiBnaXRrOjQxMDAKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICJJbmZvcm1hw6fDo28gU29icmUgbyBDb21taXQgKGV4cHJlc3PDtWVzIHJlZ3VsYXJlcyk6IgorCisjOiBnaXRrOjQxMDEKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRvcjoiCisKKyM6IGdpdGs6NDEwMgorbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIkNvbW1pdHRlcjoiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiTWVuc2FnZW0gZGUgQ29tbWl0OiIKKworIzogZ2l0azo0MTA0Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIkNvcnJlc3BvbmRlIGEgdG9kb3Mgb3MgY3JpdMOpcmlvcyBkYSBJbmZvcm1hw6fDo28gU29icmUgbyBDb21taXQiCisKKyM6IGdpdGs6NDEwNQorbXNnaWQgIk1hdGNoZXMgbm8gQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIk7Do28gY29ycmVzcG9uZGUgYSBuZW5odW0gY3JpdMOpcmlvIGRhIEluZm9ybWHDp8OjbyBTb2JyZSBvIENvbW1pdCIKKworIzogZ2l0azo0MTA2Cittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgIkFsdGVyYcOnw7VlcyBub3MgRmljaGVpcm9zOiIKKworIzogZ2l0azo0MTA3Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJDYWRlaWEgRml4YSIKKworIzogZ2l0azo0MTA4Cittc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgorbXNnc3RyICJFeHByZXNzw6NvIFJlZ3VsYXIiCisKKyM6IGdpdGs6NDEwOQorbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICJQcm9jdXJhciBwZWxhIGNhZGVpYToiCisKKyM6IGdpdGs6NDExMAorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAiIgorIkRhdGFzIGRlIENvbW1pdCAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorCisjOiBnaXRrOjQxMTEKK21zZ2lkICJTaW5jZToiCittc2dzdHIgIkRlc2RlOiIKKworIzogZ2l0azo0MTEyCittc2dpZCAiVW50aWw6IgorbXNnc3RyICJBdMOpOiIKKworIzogZ2l0azo0MTEzCittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIkxpbWl0YXIgZS9vdSBpZ25vcmFyIHVtIG7Dum1lcm8gZGUgcmV2aXPDtWVzIChpbnRlaXJvIHBvc2l0aXZvKToiCisKKyM6IGdpdGs6NDExNAorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiTsO6bWVybyBhIG1vc3RyYXI6IgorCisjOiBnaXRrOjQxMTUKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIk7Dum1lcm8gYSBpZ25vcmFyOiIKKworIzogZ2l0azo0MTE2Cittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAiT3DDp8O1ZXMgZGl2ZXJzYXM6IgorCisjOiBnaXRrOjQxMTcKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIk9yZGVuYXIgZXN0cml0YW1lbnRlIHBlbGEgZGF0YSIKKworIzogZ2l0azo0MTE4Cittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIk1hcmNhciBsYWRvIGRvcyByYW1vcyIKKworIzogZ2l0azo0MTE5Cittc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgorbXNnc3RyICJSZXN0cmluZ2lyIGFvIHByaW1laXJvIHBhaSIKKworIzogZ2l0azo0MTIwCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIkhpc3TDs3JpY28gc2ltcGxlcyIKKworIzogZ2l0azo0MTIxCittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgIkFyZ3VtZW50b3MgYWRpY2lvbmFpcyBhbyBnaXQgbG9nOiIKKworIzogZ2l0azo0MTIyCittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIkludHJvZHV6YSBmaWNoZWlyb3MgZSBkaXJldMOzcmlvcyBwYXJhIGluY2x1aXIsIHVtIHBvciBsaW5oYToiCisKKyM6IGdpdGs6NDEyMworbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJDb21hbmRvIHBhcmEgZ2VyYXIgbWFpcyBjb21taXRzIHBhcmEgaW5jbHVpcjoiCisKKyM6IGdpdGs6NDI0NworbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azogZWRpdGFyIHZpc3RhIgorCisjOiBnaXRrOjQyNTUKK21zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKK21zZ3N0ciAiLS0gY3JpdMOpcmlvIHBhcmEgc2VsZWNpb25hciByZXZpc8O1ZXMiCisKKyM6IGdpdGs6NDI2MAorbXNnaWQgIlZpZXcgTmFtZSIKK21zZ3N0ciAiTm9tZSBkYSBWaXN0YSIKKworIzogZ2l0azo0MzM1Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAiQXBsaWNhciAoRjUpIgorCisjOiBnaXRrOjQzNzMKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgIkVycm8gbm9zIGFyZ3VtZW50b3MgZGUgc2VsZcOnw6NvIGRlIGNvbW1pdHM6IgorCisjOiBnaXRrOjQ0MjggZ2l0azo0NDgxIGdpdGs6NDk0MyBnaXRrOjQ5NTcgZ2l0azo2MjI3IGdpdGs6MTI0MTAgZ2l0azoxMjQxMQorbXNnaWQgIk5vbmUiCittc2dzdHIgIk5lbmh1bSIKKworIzogZ2l0azo1MDQwIGdpdGs6NTA0NQorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIkRlc2NlbmRlbnRlIgorCisjOiBnaXRrOjUwNDEKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAiTsOjbyBkZXNjZW5kZW50ZSIKKworIzogZ2l0azo1MDQ4IGdpdGs6NTA1MworbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJBbnRlY2Vzc29yIgorCisjOiBnaXRrOjUwNDkKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIk7Do28gYW50ZWNlc3NvciIKKworIzogZ2l0azo1MzQzCittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICJBbHRlcmHDp8O1ZXMgbG9jYWlzIHByZXBhcmFkYXMgbm8gw61uZGljZSBtYXMgbsOjbyBzdWJtZXRpZGFzIgorCisjOiBnaXRrOjUzNzkKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiQWx0ZXJhw6fDtWVzIGxvY2FpcyBuw6NvIHN1Ym1ldGlkYXMsIG7Do28gcHJlcGFyYWRhcyBubyDDrW5kaWNlIgorCisjOiBnaXRrOjcxNTMKK21zZ2lkICJhbmQgbWFueSBtb3JlIgorbXNnc3RyICJlIG11aXRvcyBtYWlzIgorCisjOiBnaXRrOjcxNTYKK21zZ2lkICJtYW55IgorbXNnc3RyICJtdWl0b3MiCisKKyM6IGdpdGs6NzM0NworbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJUYWdzOiIKKworIzogZ2l0azo3MzY0IGdpdGs6NzM3MCBnaXRrOjg4NDQKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgIlBhaSIKKworIzogZ2l0azo3Mzc1Cittc2dpZCAiQ2hpbGQiCittc2dzdHIgIkZpbGhvIgorCisjOiBnaXRrOjczODQKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIlJhbW8iCisKKyM6IGdpdGs6NzM4NworbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgIlN1Y2VkZSIKKworIzogZ2l0azo3MzkwCittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIlByZWNlZGUiCisKKyM6IGdpdGs6Nzk4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgorbXNnc3RyICJFcnJvIGFvIG9idGVyIGRpZmVyZW7Dp2FzOiAlcyIKKworIzogZ2l0azo4NjY5Cittc2dpZCAiR290bzoiCittc2dzdHIgIklyIHBhcmE6IgorCisjOiBnaXRrOjg2OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiTyBpZCBTSEExIGFicmV2aWFkbyAlcyDDqSBhbWLDrWd1byIKKworIzogZ2l0azo4Njk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJBIHJldmlzw6NvICVzIG7Do28gw6kgY29uaGVjaWRhIgorCisjOiBnaXRrOjg3MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiTyBpZCBTSEExICVzIG7Do28gw6kgY29uaGVjaWRvIgorCisjOiBnaXRrOjg3MDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAiQSByZXZpc8OjbyAlcyBuw6NvIHNlIGVuY29udHJhIG5hIHZpc3RhIGF0dWFsIgorCisjOiBnaXRrOjg4NTEgZ2l0azo4ODY2Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAiRGF0YSIKKworIzogZ2l0azo4ODU0Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIkZpbGhvcyIKKworIzogZ2l0azo4OTE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIlJlcG9yIG8gcmFtbyAlcyBwYXJhIGFxdWkiCisKKyM6IGdpdGs6ODkxOQorbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgorbXNnc3RyICJDYWJlw6dhIGRlc3RhY2FkYTogbsOjbyDDqSBwb3Nzw612ZWwgcmVwb3IiCisKKyM6IGdpdGs6OTAyNCBnaXRrOjkwMzAKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICJBIGlnbm9yYXIgY29tbWl0IGRlIGludGVncmHDp8OjbyAiCisKKyM6IGdpdGs6OTAzOSBnaXRrOjkwNDQKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgIkVycm8gYW8gb2J0ZXIgSUQgZGUgcGF0Y2ggZGUgIgorCisjOiBnaXRrOjkwNDAgZ2l0azo5MDQ1Cittc2dpZCAiIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIC0gYSBpbnRlcnJvbXBlclxuIgorCisjOiBnaXRrOjkwNTAgZ2l0azo5MDUzIGdpdGs6OTA2MSBnaXRrOjkwNzUgZ2l0azo5MDg0Cittc2dpZCAiQ29tbWl0ICIKK21zZ3N0ciAiQ29tbWl0ICIKKworIzogZ2l0azo5MDU0Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgw6kgbyBtZXNtbyBwYXRjaCBxdWVcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNjIKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgZGlmZXJlIGRlXG4iCisiICAgICAgICIKKworIzogZ2l0azo5MDY0Cittc2dpZCAiIgorIkRpZmYgb2YgY29tbWl0czpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRpZmVyZW7Dp2EgZG9zIGNvbW1pdHM6XG4iCisiXG4iCisKKyM6IGdpdGs6OTA3NiBnaXRrOjkwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIHRlbSAlcyBmaWxob3MgLSBhIGludGVycm9tcGVyXG4iCisKKyM6IGdpdGs6OTEwNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgorbXNnc3RyICJFcnJvIGFvIGVzY3JldmVyIGNvbW1pdCBubyBmaWNoZWlybzogJXMiCisKKyM6IGdpdGs6OTExMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIkVycm8gYW8gY2FsY3VsYXIgYXMgZGlmZXJlbsOnYXMgZG9zIGNvbW1pdHM6ICVzIgorCisjOiBnaXRrOjkxNTYKK21zZ2lkICJUb3AiCittc2dzdHIgIlRvcG8iCisKKyM6IGdpdGs6OTE1NworbXNnaWQgIkZyb20iCittc2dzdHIgIkRlIgorCisjOiBnaXRrOjkxNjIKK21zZ2lkICJUbyIKK21zZ3N0ciAiUGFyYSIKKworIzogZ2l0azo5MTg2Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkdlcmFyIHBhdGNoIgorCisjOiBnaXRrOjkxODgKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiRGU6IgorCisjOiBnaXRrOjkxOTcKK21zZ2lkICJUbzoiCittc2dzdHIgIlBhcmE6IgorCisjOiBnaXRrOjkyMDYKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICJSZXZlcnRlciIKKworIzogZ2l0azo5MjA4IGdpdGs6OTQxOAorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiRmljaGVpcm8gZGUgc2HDrWRhOiIKKworIzogZ2l0azo5MjE0Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlcmFyIgorCisjOiBnaXRrOjkyNTIKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgIkVycm8gYW8gY3JpYXIgcGF0Y2g6IgorCisjOiBnaXRrOjkyNzUgZ2l0azo5NDA2IGdpdGs6OTQ2MworbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjkyODQKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIk5vbWUgZGEgdGFnOiIKKworIzogZ2l0azo5Mjg3Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgIkEgbWVuc2FnZW0gZGEgdGFnIMOpIG9wY2lvbmFsIgorCisjOiBnaXRrOjkyODkKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIk1lbnNhZ2VtIGRhIHRhZzoiCisKKyM6IGdpdGs6OTI5MyBnaXRrOjk0NzIKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyaWFyIgorCisjOiBnaXRrOjkzMTEKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIk5lbmh1bSBub21lIGRlIHRhZyBlc3BlY2lmaWNhZG8iCisKKyM6IGdpdGs6OTMxNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkEgdGFnIFwiJXNcIiBqw6EgZXhpc3RlIgorCisjOiBnaXRrOjkzMjUKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgorbXNnc3RyICJFcnJvIGFvIGNyaWFyIHRhZzoiCisKKyM6IGdpdGs6OTQxNQorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJDb21hbmRvOiIKKworIzogZ2l0azo5NDIzCittc2dpZCAiV3JpdGUiCittc2dzdHIgIkVzY3JldmVyIgorCisjOiBnaXRrOjk0NDEKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCittc2dzdHIgIkVycm8gYW8gZXNjcmV2ZXIgY29tbWl0OiIKKworIzogZ2l0azo5NDY4Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk5vbWU6IgorCisjOiBnaXRrOjk0OTEKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJFc3BlY2lmaXF1ZSB1bSBub21lIHBhcmEgbyBub3ZvIHJhbW8iCisKKyM6IGdpdGs6OTQ5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICJPIHJhbW8gJyVzJyBqw6EgZXhpc3RlLiBTdWJzdGl0dcOtLWxvPyIKKworIzogZ2l0azo5NTYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIk8gY29tbWl0ICVzIGrDoSBlc3TDoSBpbmNsdcOtZG8gbm8gcmFtbyAlcyAtLSByZWFwbGljw6EtbG8gbWVzbW8gYXNzaW0/IgorCisjOiBnaXRrOjk1NjgKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAiQSBlZmV0dWFyIGNoZXJyeS1waWNrIgorCisjOiBnaXRrOjk1NzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiRmFsaGEgYW8gZWZldHVhciBjaGVycnktcGljayBkZXZpZG8gYSBhbHRlcmHDp8O1ZXMgbG9jYWlzIG5vIGZpY2hlaXJvICclcycuXG4iCisiU3VibWV0YSwgZW1waWxoZSBvdSByZXBvbmhhIGFzIGFsdGVyYcOnw7VlcyBlIHRlbnRlIGRlIG5vdm8uIgorCisjOiBnaXRrOjk1ODMKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJGYWxoYSBhbyBlZmV0dWFyIGNoZXJyeS1waWNrIGRldmlkbyBhIGNvbmZsaXRvIGRlIGludGVncmHDp8Ojby5cbiIKKyJEZXNlamEgZXhlY3V0YXIgZ2l0IGNpdG9vbCBwYXJhIHJlc29sdsOqLWxvPyIKKworIzogZ2l0azo5NTk5IGdpdGs6OTY1NworbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJOw6NvIGZvaSBzdWJtZXRpZGEgbmVuaHVtIGFsdGVyYcOnw6NvIgorCisjOiBnaXRrOjk2MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKK21zZ3N0ciAiTyBjb21taXQgJXMgbsOjbyBlc3TDoSBpbmNsdcOtZG8gbm8gcmFtbyAlcyAtLSByZXZlcnTDqi1sbyBtZXNtbyBhc3NpbT8iCisKKyM6IGdpdGs6OTYzMQorbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAiQSByZXZlcnRlciIKKworIzogZ2l0azo5NjM5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKKyJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJGYWxoYSBhbyByZXZlcnRlciBkZXZpZG8gYSBhbHRlcmHDp8O1ZXMgbG9jYWlzIG5vcyBzZWd1aW50ZXMgZmljaGVpcm9zOiVzICIKKyJTdWJtZXRhLCBlbXBpbGhlIG91IHJlcG9uaGEgYXMgYWx0ZXJhw6fDtWVzIGUgdGVudGUgZGUgbm92by4iCisKKyM6IGdpdGs6OTY0MworbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiRmFsaGEgYW8gcmV2ZXJ0ZXIgZGV2aWRvIGEgY29uZmxpdG8gZGUgaW50ZWdyYcOnw6NvLlxuIgorIkRlc2VqYSBleGVjdXRhciBnaXQgY2l0b29sIHBhcmEgcmVzb2x2w6otbG8/IgorCisjOiBnaXRrOjk2ODYKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJDb25maXJtYXIgcmVwb3Npw6fDo28iCisKKyM6IGdpdGs6OTY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIlJlcG9yIG8gcmFtbyAlcyBwYXJhICVzPyIKKworIzogZ2l0azo5NjkwCittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgIlRpcG8gZGUgcmVwb3Npw6fDo286IgorCisjOiBnaXRrOjk2OTMKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiU3VhdmU6IERlaXhhciBhIMOhcnZvcmUgZGUgdHJhYmFsaG8gZSBvIMOtbmRpY2UgaW50YWN0b3MiCisKKyM6IGdpdGs6OTY5NgorbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiTWlzdG86IERlaXhhciBhIMOhcnZvcmUgZGUgdHJhYmFsaG8gaW50YWN0YSwgcmVwb3Igw61uZGljZSIKKworIzogZ2l0azo5Njk5Cittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIiIKKyJGb3J0ZTogUmVwb3Igw6Fydm9yZSBkZSB0cmFiYWxobyBlIMOtbmRpY2VcbiIKKyIoZGVzY2FydGFyIFRPREFTIGFzIGFsdGVyYcOnw7VlcyBsb2NhaXMpIgorCisjOiBnaXRrOjk3MTYKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgIkEgcmVwb3IiCisKKyM6IGdpdGs6OTc3NgorbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAiQSBleHRyYWlyIgorCisjOiBnaXRrOjk4MjkKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBlbGltaW5hciBvIHJhbW8gYXR1YWwgZXh0cmHDrWRvIgorCisjOiBnaXRrOjk4MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorIk9zIGNvbW1pdHMgbm8gcmFtbyAlcyBuw6NvIGVzdMOjbyBwcmVzZW50ZXMgZW0gbWFpcyBuZW5odW0gcmFtby5cbiIKKyJFbGltaW5hciBvIHJhbW8gJXMgbWVzbW8gYXNzaW0/IgorCisjOiBnaXRrOjk4NjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCittc2dzdHIgIlRhZ3MgZSBjYWJlw6dhczogJXMiCisKKyM6IGdpdGs6OTg4MworbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdHJhciIKKworIzogZ2l0azoxMDE3OQorbXNnaWQgIiIKKyJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKKyJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKK21zZ3N0ciAiIgorIkVycm8gYW8gbGVyIGluZm9ybWHDp8OjbyBkZSB0b3BvbG9naWEgZG8gY29tbWl0OyBhIGluZm9ybWHDp8OjbyBkbyByYW1vIGUgZGEgdGFnICIKKyJwcmVjZWRlbnRlL3NlZ3VpbnRlIGZpY2Fyw6EgaW5jb21wbGV0YS4iCisKKyM6IGdpdGs6MTExNTYKK21zZ2lkICJUYWciCittc2dzdHIgIlRhZyIKKworIzogZ2l0azoxMTE2MAorbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMTI0MworbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJFc2NvbGhhIGRlIHRpcG8gZGUgbGV0cmEgZG8gZ2l0ayIKKworIzogZ2l0azoxMTI2MAorbXNnaWQgIkIiCittc2dzdHIgIkIiCisKKyM6IGdpdGs6MTEyNjMKK21zZ2lkICJJIgorbXNnc3RyICJJIgorCisjOiBnaXRrOjExMzgxCittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJPcMOnw7VlcyBkZSB2aXN1YWxpemHDp8OjbyBkYSBsaXN0YSBkZSBjb21taXRzIgorCisjOiBnaXRrOjExMzg0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJMYXJndXJhIG3DoXhpbWEgZG8gZ3LDoWZpY28gKGxpbmhhcykiCisKKyM6IGdpdGs6MTEzODgKKyMsIG5vLXRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICJMYXJndXJhIG3DoXhpbWEgZG8gZ3LDoWZpY28gKCUgZG8gcGFpbmVsKSIKKworIzogZ2l0azoxMTM5MQorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiTW9zdHJhciBhbHRlcmHDp8O1ZXMgbG9jYWlzIgorCisjOiBnaXRrOjExMzk0Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAiU2VsZWNpb25hciBhdXRvbWF0aWNhbWVudGUgU0hBMSAobGFyZ3VyYSkiCisKKyM6IGdpdGs6MTEzOTgKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICJPY3VsdGFyIHJlZmVyw6puY2lhcyByZW1vdGFzIgorCisjOiBnaXRrOjExNDAyCittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9ww6fDtWVzIGRlIHZpc3VhbGl6YcOnw6NvIGRlIGRpZmVyZW7Dp2FzIgorCisjOiBnaXRrOjExNDA0Cittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIkVzcGHDp2FtZW50byBkYSB0YWJ1bGHDp8OjbyIKKworIzogZ2l0azoxMTQwNworbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCittc2dzdHIgIk1vc3RyYXIgdGFncy9jYWJlw6dhcyBwcsOzeGltYXMiCisKKyM6IGdpdGs6MTE0MTAKK21zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgorbXNnc3RyICJOwrogbcOheGltbyBkZSB0YWdzL2NhYmXDp2FzIGEgbW9zdHJhciIKKworIzogZ2l0azoxMTQxMworbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiTGltaXRhciBkaWZlcmVuw6dhcyBhb3MgY2FtaW5ob3MgbGlzdGFkb3MiCisKKyM6IGdpdGs6MTE0MTYKK21zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKK21zZ3N0ciAiU3Vwb3J0YXIgY29kaWZpY2HDp8OjbyBwb3IgY2FkYSBmaWNoZWlybyIKKworIzogZ2l0azoxMTQyMiBnaXRrOjExNTY5Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICJGZXJyYW1lbnRhIGRpZmYgZXh0ZXJuYSIKKworIzogZ2l0azoxMTQyMworbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAiRXNjb2xoZXIuLi4iCisKKyM6IGdpdGs6MTE0MjgKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIk9ww6fDtWVzIGdlcmFpcyIKKworIzogZ2l0azoxMTQzMQorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAiVXNhciB3aWRnZXRzIGNvbSBlc3RpbG8iCisKKyM6IGdpdGs6MTE0MzMKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIoYWx0ZXJhw6fDo28gZXhpZ2UgcmVpbmljaWFyKSIKKworIzogZ2l0azoxMTQzNQorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIobsOjbyBkaXNwb27DrXZlbCBkZSBtb21lbnRvKSIKKworIzogZ2l0azoxMTQ0NgorbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJDb3JlczogcHJlc3Npb25lIHBhcmEgZXNjb2xoZXIiCisKKyM6IGdpdGs6MTE0NDkKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgIkludGVyZmFjZSIKKworIzogZ2l0azoxMTQ1MAorbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAiaW50ZXJmYWNlIgorCisjOiBnaXRrOjExNDUzCittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAiRnVuZG8iCisKKyM6IGdpdGs6MTE0NTQgZ2l0azoxMTQ4NAorbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgImZ1bmRvIgorCisjOiBnaXRrOjExNDU3Cittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiUHJpbWVpcm8gcGxhbm8iCisKKyM6IGdpdGs6MTE0NTgKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICJwcmltZWlybyBwbGFubyIKKworIzogZ2l0azoxMTQ2MQorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAiRGlmZjogbGluaGFzIGFudGlnYXMiCisKKyM6IGdpdGs6MTE0NjIKK21zZ2lkICJkaWZmIG9sZCBsaW5lcyIKK21zZ3N0ciAiZGlmZiBsaW5oYXMgYW50aWdhcyIKKworIzogZ2l0azoxMTQ2NgorbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKK21zZ3N0ciAiRGlmZjogbGluaGFzIG5vdmFzIgorCisjOiBnaXRrOjExNDY3Cittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgImRpZmYgbGluaGFzIG5vdmFzIgorCisjOiBnaXRrOjExNDcxCittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIkRpZmY6IGNhYmXDp2FsaG8gZG8gZXhjZXJ0byIKKworIzogZ2l0azoxMTQ3MworbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgImRpZmYgY2FiZcOnYWxobyBkbyBleGNlcnRvIgorCisjOiBnaXRrOjExNDc3Cittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIkZ1bmRvIGRhIGxpbmhhIG1hcmNhZGEiCisKKyM6IGdpdGs6MTE0NzkKK21zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgorbXNnc3RyICJmdW5kbyBkYSBsaW5oYSBtYXJjYWRhIgorCisjOiBnaXRrOjExNDgzCittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICJTZWxlY2lvbmFyIGZ1bmRvIgorCisjOiBnaXRrOjExNDkyCittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiVGlwbyBkZSBsZXRyYTogcHJlc3Npb25lIHBhcmEgZXNjb2xoZXIiCisKKyM6IGdpdGs6MTE0OTQKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIlRpcG8gZGUgbGV0cmEgcHJpbmNpcGFsIgorCisjOiBnaXRrOjExNDk1Cittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIlRpcG8gZGUgbGV0cmEgYW8gbW9zdHJhciBkaWZlcmVuw6dhcyIKKworIzogZ2l0azoxMTQ5NgorbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIlRpcG8gZGUgbGV0cmEgZGEgaW50ZXJmYWNlIGRlIHV0aWxpemFkb3IiCisKKyM6IGdpdGs6MTE1MTgKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJQcmVmZXLDqm5jaWFzIGRvIGdpdGsiCisKKyM6IGdpdGs6MTE1MjcKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICJHZXJhbCIKKworIzogZ2l0azoxMTUyOAorbXNnaWQgIkNvbG9ycyIKK21zZ3N0ciAiQ29yZXMiCisKKyM6IGdpdGs6MTE1MjkKK21zZ2lkICJGb250cyIKK21zZ3N0ciAiVGlwb3MgZGUgbGV0cmEiCisKKyM6IGdpdGs6MTE1NzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiBlc2NvbGhlciBjb3IgZGUgJXMiCisKKyM6IGdpdGs6MTIwOTIKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBleGVjdXRhciBvIGdpdGsgY29tIGVzdGEgdmVyc8OjbyBkbyBUY2wvVGsuXG4iCisiTyBnaXRrIHJlcXVlciBwZWxvIG1lbm9zIFRjbC9UayA4LjQuIgorCisjOiBnaXRrOjEyMzAyCittc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKK21zZ3N0ciAiTsOjbyBmb2kgZW5jb250cmFkbyBuZW5odW0gcmVwb3NpdMOzcmlvIGdpdCBhcXVpLiIKKworIzogZ2l0azoxMjM0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAiQXJndW1lbnRvICclcycgYW1iw61ndW86IHBvZGUgc2VyIHVtYSByZXZpc8OjbyBvdSB1bSBmaWNoZWlybyIKKworIzogZ2l0azoxMjM2MQorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIkFyZ3VtZW50b3MgZG8gZ2l0ayBpbmNvcnJldG9zOiIKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL3J1LnBvIGIvZ2l0ay1naXQvcG8vcnUucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwOGMyNgotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L3BvL3J1LnBvCkBAIC0wLDAgKzEsMTM3MSBAQAorIyBUcmFuc2xhdGlvbiBvZiBnaXRrIHRvIFJ1c3NpYW4uCisjCisjIFRyYW5zbGF0b3JzOgorIyAweEFYIDxrdWxlc2hvdm1haWxAZ21haWwuY29tPiwgMjAxNAorIyBBbGV4IFJpZXNlbiA8cmFhLmxrbWxAZ21haWwuY29tPiwgMjAxNQorIyBEaW1pdHJpeSBSeWF6YW50Y2V2IDxESm0wMG5AbWFpbC5ydT4sIDIwMTUtMjAxNgorIyBEbWl0cnkgUG90YXBvdiA8ZHBvdGFwb3ZAZ21haWwuY29tPiwgMjAwOQorIyBTa2lwIDxic3Zza2lwQHJhbWJsZXIucnU+LCAyMDExCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHaXQgUnVzc2lhbiBMb2NhbGl6YXRpb24gUHJvamVjdFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNi0xMi0xNSAwMDoxOCswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0xMi0xNCAyMjoyMyswMDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBEaW1pdHJpeSBSeWF6YW50Y2V2IDxESm0wMG5AbWFpbC5ydT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBSdXNzaWFuIChodHRwOi8vd3d3LnRyYW5zaWZleC5jb20vZGptMDBuL2dpdC1wby1ydS9sYW5ndWFnZS9ydS8pXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiTGFuZ3VhZ2U6IHJ1XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz00OyBwbHVyYWw9KG4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgbiUxMDw9NCAmJiAobiUxMDA8MTIgfHwgbiUxMDA+MTQpID8gMSA6IG4lMTA9PTAgfHwgKG4lMTA+PTUgJiYgbiUxMDw9OSkgfHwgKG4lMTAwPj0xMSAmJiBuJTEwMDw9MTQpPyAyIDogMyk7XG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQv9C+0LvRg9GH0LjRgtGMINGB0L/QuNGB0L7QuiDRhNCw0LnQu9C+0LIg0L3QtdC30LDQstC10YDRiNGR0L3QvdC+0Lkg0L7Qv9C10YDQsNGG0LjQuCDRgdC70LjRj9C90LjRjzoiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjQwMworbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICLQptCy0LXRgtC90YvQtSDRgdC70L7QstCwIgorCisjOiBnaXRrOjIxNyBnaXRrOjI0MDMgZ2l0azo4MjQ5IGdpdGs6ODI4MgorbXNnaWQgIk1hcmt1cCB3b3JkcyIKK21zZ3N0ciAi0J/QvtC80LXRh9C10L3Ri9C1INGB0LvQvtCy0LAiCisKKyM6IGdpdGs6MzI0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0L/RgNC4INGA0LDQt9Cx0L7RgNC1INGA0LXQtNCw0LrRhtC40Lg6IgorCisjOiBnaXRrOjM4MAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQutC+0LzQsNC90LTRiyDQt9Cw0LTQsNC90L3QvtC5IC0tYXJnc2NtZDoiCisKKyM6IGdpdGs6MzkzCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICLQpNCw0LnQu9GLINC90LUg0LLRi9Cx0YDQsNC90Ys6INGD0LrQsNC30LDQvSAtLW1lcmdlLCDQvdC+INC90LUg0LHRi9C70L4g0L3QsNC50LTQtdC90L4g0L3QuCDQvtC00L3QvtCz0L4g0YTQsNC50LvQsCDQs9C00LUg0Y3RgtCwINC+0L/QtdGA0LDRhtC40Y8g0LTQvtC70LbQvdCwINCx0YvRgtGMINC30LDQstC10YDRiNC10L3QsC4iCisKKyM6IGdpdGs6Mzk2Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgItCk0LDQudC70Ysg0L3QtSDQstGL0LHRgNCw0L3Rizog0YPQutCw0LfQsNC9IC0tbWVyZ2UsINC90L4g0LIg0YDQsNC80LrQsNGFINGD0LrQsNC30LDQvdC90L7Qs9C+INC+0LPRgNCw0L3QuNGH0LXQvdC40Y8g0L3QsCDQuNC80LXQvdCwINGE0LDQudC70L7QsiDQvdC10YIg0L3QuCDQvtC00L3QvtCz0L4g0LPQtNC1INGN0YLQsCDQvtC/0LXRgNCw0YbQuNGPINC00L7Qu9C20L3QsCDQsdGL0YLRjCDQt9Cw0LLQtdGA0YjQtdC90LAuIgorCisjOiBnaXRrOjQxOCBnaXRrOjU2NgorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC30LDQv9GD0YHQutCwIGdpdCBsb2c6IgorCisjOiBnaXRrOjQzNiBnaXRrOjU4MgorbXNnaWQgIlJlYWRpbmciCittc2dzdHIgItCn0YLQtdC90LjQtSIKKworIzogZ2l0azo0OTYgZ2l0azo0NTQ5Cittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICLQp9GC0LXQvdC40LUg0LrQvtC80LzQuNGC0L7Qsi4uLiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjQxIGdpdGs6NDU1MgorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgItCd0LjRh9C10LPQviDQvdC1INCy0YvQsdGA0LDQvdC+IgorCisjOiBnaXRrOjE0NDkgZ2l0azo0MDY5IGdpdGs6MTI1ODMKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgItCa0L7QvNCw0L3QtNC90LDRjyDRgdGC0YDQvtC60LAiCisKKyM6IGdpdGs6MTUxNQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC+0LHRgNCw0LHQvtGC0LrQuCDQstGL0LLQvtC00LAg0LrQvtC80LDQvdC00YsgZ2l0IGxvZzoiCisKKyM6IGdpdGs6MTc0NAorbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCittc2dzdHIgItCd0LXRgiDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDQutC+0LzQvNC40YLQtSIKKworIzogZ2l0azoxOTA3IGdpdGs6MTkzNiBnaXRrOjQzMzkgZ2l0azo5Nzg5IGdpdGs6MTEzODggZ2l0azoxMTY2OAorbXNnaWQgIk9LIgorbXNnc3RyICJPayIKKworIzogZ2l0azoxOTM4IGdpdGs6NDM0MSBnaXRrOjkyMjUgZ2l0azo5MzA0IGdpdGs6OTQzNCBnaXRrOjk1MjAgZ2l0azo5NzkxCisjOiBnaXRrOjExMzg5IGdpdGs6MTE2NjkKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgItCe0YLQvNC10L3QsCIKKworIzogZ2l0azoyMDg3Cittc2dpZCAiJlVwZGF0ZSIKK21zZ3N0ciAi0J7QsdC90L7QstC40YLRjCIKKworIzogZ2l0azoyMDg4Cittc2dpZCAiJlJlbG9hZCIKK21zZ3N0ciAi0J/QtdGA0LXRh9C40YLQsNGC0YwiCisKKyM6IGdpdGs6MjA4OQorbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKK21zZ3N0ciAi0J7QsdC90L7QstC40YLRjCDRgdC/0LjRgdC+0Log0YHRgdGL0LvQvtC6IgorCisjOiBnaXRrOjIwOTAKK21zZ2lkICImTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICLQodC/0LjRgdC+0Log0YHRgdGL0LvQvtC6IgorCisjOiBnaXRrOjIwOTIKK21zZ2lkICJTdGFydCBnaXQgJmd1aSIKK21zZ3N0ciAi0JfQsNC/0YPRgdGC0LjRgtGMIGdpdCBndWkiCisKKyM6IGdpdGs6MjA5NAorbXNnaWQgIiZRdWl0IgorbXNnc3RyICLQl9Cw0LLQtdGA0YjQuNGC0YwiCisKKyM6IGdpdGs6MjA4NgorbXNnaWQgIiZGaWxlIgorbXNnc3RyICLQpNCw0LnQuyIKKworIzogZ2l0azoyMDk4Cittc2dpZCAiJlByZWZlcmVuY2VzIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60LgiCisKKyM6IGdpdGs6MjA5NworbXNnaWQgIiZFZGl0IgorbXNnc3RyICLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCIKKworIzogZ2l0azoyMTAyCittc2dpZCAiJk5ldyB2aWV3Li4uIgorbXNnc3RyICLQndC+0LLQvtC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1Li4uIgorCisjOiBnaXRrOjIxMDMKK21zZ2lkICImRWRpdCB2aWV3Li4uIgorbXNnc3RyICLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtS4uLiIKKworIzogZ2l0azoyMTA0Cittc2dpZCAiJkRlbGV0ZSB2aWV3IgorbXNnc3RyICLQo9C00LDQu9C40YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSIKKworIzogZ2l0azoyMTA2Cittc2dpZCAiJkFsbCBmaWxlcyIKK21zZ3N0ciAi0JLRgdC1INGE0LDQudC70YsiCisKKyM6IGdpdGs6MjEwMQorbXNnaWQgIiZWaWV3IgorbXNnc3RyICLQn9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSIKKworIzogZ2l0azoyMTExIGdpdGs6MjEyMQorbXNnaWQgIiZBYm91dCBnaXRrIgorbXNnc3RyICLQniBnaXRrIgorCisjOiBnaXRrOjIxMTIgZ2l0azoyMTI2Cittc2dpZCAiJktleSBiaW5kaW5ncyIKK21zZ3N0ciAi0J3QsNC30L3QsNGH0LXQvdC40Y8g0LrQu9Cw0LLQuNCw0YLRg9GA0YsiCisKKyM6IGdpdGs6MjExMCBnaXRrOjIxMjUKK21zZ2lkICImSGVscCIKK21zZ3N0ciAi0J/QvtC00YHQutCw0LfQutCwIgorCisjOiBnaXRrOjIyMDMgZ2l0azo4NjgxCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgorCisjOiBnaXRrOjIyNDcKK21zZ2lkICJSb3ciCittc2dzdHIgItCh0YLRgNC+0LrQsCIKKworIzogZ2l0azoyMjg1Cittc2dpZCAiRmluZCIKK21zZ3N0ciAi0J/QvtC40YHQuiIKKworIzogZ2l0azoyMzEzCittc2dpZCAiY29tbWl0IgorbXNnc3RyICLQutC+0LzQvNC40YIiCisKKyM6IGdpdGs6MjMxNyBnaXRrOjIzMTkgZ2l0azo0NzExIGdpdGs6NDczNCBnaXRrOjQ3NTggZ2l0azo2Nzc5IGdpdGs6Njg1MQorIzogZ2l0azo2OTM2Cittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgItGB0L7QtNC10YDQttCw0YnQtdC1OiIKKworIzogZ2l0azoyMzIwIGdpdGs6MzU1MCBnaXRrOjM1NTUgZ2l0azo0Nzg3Cittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICLQutCw0YHQsNGC0LXQu9GM0L3QviDRhNCw0LnQu9C+0LI6IgorCisjOiBnaXRrOjIzMjEgZ2l0azo0ODAxCittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgItC00L7QsdCw0LLQuNCyL9GD0LTQsNC70LjQsiDRgdGC0YDQvtC60YM6IgorCisjOiBnaXRrOjIzMjIgZ2l0azo0ODAzCittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICLQuNC30LzQtdC90Y/RjyDRgdC+0LLQv9Cw0LTQsNGO0YnQuNC1INGB0YLRgNC+0LrQuDoiCisKKyM6IGdpdGs6MjMzMSBnaXRrOjIzMzMgZ2l0azo0NzkwCittc2dpZCAiRXhhY3QiCittc2dzdHIgItCi0L7Rh9C90L4iCisKKyM6IGdpdGs6MjMzMyBnaXRrOjQ4NzggZ2l0azo2NzQ3Cittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAi0JjQs9C90L7RgNC40YDQvtCy0LDRgtGMINCx0L7Qu9GM0YjQuNC1L9C80LDQu9C10L3RjNC60LjQtSIKKworIzogZ2l0azoyMzMzIGdpdGs6NDc2MCBnaXRrOjQ4NzYgZ2l0azo2NzQzCittc2dpZCAiUmVnZXhwIgorbXNnc3RyICLQoNC10LPRg9C70Y/RgNC90YvQtSDQstGL0YDQsNC20LXQvdC40Y8iCisKKyM6IGdpdGs6MjMzNSBnaXRrOjIzMzYgZ2l0azo0ODk4IGdpdGs6NDkyOCBnaXRrOjQ5MzUgZ2l0azo2ODcyIGdpdGs6Njk0MAorbXNnaWQgIkFsbCBmaWVsZHMiCittc2dzdHIgItCS0L4g0LLRgdC10YUg0L/QvtC70Y/RhSIKKworIzogZ2l0azoyMzM2IGdpdGs6NDg5NSBnaXRrOjQ5MjggZ2l0azo2ODEwCittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgItCX0LDQs9C+0LvQvtCy0L7QuiIKKworIzogZ2l0azoyMzM3IGdpdGs6NDg5NSBnaXRrOjY4MTAgZ2l0azo2OTQwIGdpdGs6NzQxMworbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICLQmtC+0LzQvNC10L3RgtCw0YDQuNC4IgorCisjOiBnaXRrOjIzMzcgZ2l0azo0ODk1IGdpdGs6NDkwMCBnaXRrOjQ5MzUgZ2l0azo2ODEwIGdpdGs6NzM0OCBnaXRrOjg4NTkKKyM6IGdpdGs6ODg3NAorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAi0JDQstGC0L7RgCIKKworIzogZ2l0azoyMzM3IGdpdGs6NDg5NSBnaXRrOjY4MTAgZ2l0azo3MzUwCittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICLQmtC+0LzQvNC40YLQtdGAIgorCisjOiBnaXRrOjIzNzEKK21zZ2lkICJTZWFyY2giCittc2dzdHIgItCd0LDQudGC0LgiCisKKyM6IGdpdGs6MjM3OQorbXNnaWQgIkRpZmYiCittc2dzdHIgItCh0YDQsNCy0L3QuNGC0YwiCisKKyM6IGdpdGs6MjM4MQorbXNnaWQgIk9sZCB2ZXJzaW9uIgorbXNnc3RyICLQodGC0LDRgNCw0Y8g0LLQtdGA0YHQuNGPIgorCisjOiBnaXRrOjIzODMKK21zZ2lkICJOZXcgdmVyc2lvbiIKK21zZ3N0ciAi0J3QvtCy0LDRjyDQstC10YDRgdC40Y8iCisKKyM6IGdpdGs6MjM4NgorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgItCh0YLRgNC+0Log0LrQvtC90YLQtdC60YHRgtCwIgorCisjOiBnaXRrOjIzOTYKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICLQmNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0L/RgNC+0LHQtdC70YsiCisKKyM6IGdpdGs6MjQwMCBnaXRrOjI0MDIgZ2l0azo3OTgzIGdpdGs6ODIzNQorbXNnaWQgIkxpbmUgZGlmZiIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPINGB0YLRgNC+0LoiCisKKyM6IGdpdGs6MjQ2NworbXNnaWQgIlBhdGNoIgorbXNnc3RyICLQn9Cw0YLRhyIKKworIzogZ2l0azoyNDY5Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAi0KTQsNC50LvRiyIKKworIzogZ2l0azoyNjM5IGdpdGs6MjY2MAorbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAi0KHRgNCw0LLQvdC40YLRjCDRjdGC0L7RgiDQutC+0LzQvNC40YIg0YEg0LLRi9C00LXQu9C10L3QvdGL0LwiCisKKyM6IGdpdGs6MjY0MCBnaXRrOjI2NjEKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgItCh0YDQsNCy0L3QuNGC0Ywg0LLRi9C00LXQu9C10L3QvdGL0Lkg0YEg0Y3RgtC40Lwg0LrQvtC80LzQuNGC0L7QvCIKKworIzogZ2l0azoyNjQxIGdpdGs6MjY2MgorbXNnaWQgIk1ha2UgcGF0Y2giCittc2dzdHIgItCh0L7Qt9C00LDRgtGMINC/0LDRgtGHIgorCisjOiBnaXRrOjI2NDIgZ2l0azo5MjgzCittc2dpZCAiQ3JlYXRlIHRhZyIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0LzQtdGC0LrRgyIKKworIzogZ2l0azoyNjQzCittc2dpZCAiQ29weSBjb21taXQgc3VtbWFyeSIKK21zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0LrQvtC80LzQuNGC0LUiCisKKyM6IGdpdGs6MjY0NCBnaXRrOjk0MTQKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAi0KHQvtGF0YDQsNC90LjRgtGMINC60L7QvNC80LjRgiDQsiDRhNCw0LnQuyIKKworIzogZ2l0azoyNjQ1Cittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgItCh0L7Qt9C00LDRgtGMINCy0LXRgtC60YMiCisKKyM6IGdpdGs6MjY0NgorbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0YLRjCDRjdGC0L7RgiDQutC+0LzQvNC40YIg0LIg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgyIKKworIzogZ2l0azoyNjQ3Cittc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAi0KPRgdGC0LDQvdC+0LLQuNGC0YwgSEVBRCDQvdCwINGN0YLQvtGCINC60L7QvNC80LjRgiIKKworIzogZ2l0azoyNjQ4Cittc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAi0J/QvtC80LXRgtC40YLRjCDRjdGC0L7RgiDQutC+0LzQvNC40YIiCisKKyM6IGdpdGs6MjY0OQorbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICLQktC10YDQvdGD0YLRjNGB0Y8g0L3QsCDQv9C+0LzQtdGC0LrRgyIKKworIzogZ2l0azoyNjUwCittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgItCd0LDQudGC0Lgg0Lgg0L/QvtC80LXRgtC40YLRjCDQv9C+0YLQvtC80LrQsCDRjdGC0L7Qs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBnaXRrOjI2NTEKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAi0KHRgNCw0LLQvdC40YLRjCDRgSDQv9C+0LzQtdGH0LXQvdC90YvQvCDQutC+0LzQvNC40YLQvtC8IgorCisjOiBnaXRrOjI2NTIgZ2l0azoyNjYzCittc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCittc2dzdHIgItCh0YDQsNCy0L3QuNGC0Ywg0LLRi9C00LXQu9C10L3QvdC+0LUg0YEg0L/QvtC80LXRh9C10L3QvdGL0Lwg0LrQvtC80LzQuNGC0L7QvCIKKworIzogZ2l0azoyNjUzIGdpdGs6MjY2NAorbXNnaWQgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIgorbXNnc3RyICLQodGA0LDQstC90LjRgtGMINC/0L7QvNC10YfQtdC90L3Ri9C5INGBINGN0YLQuNC8INC60L7QvNC80LjRgtC+0LwiCisKKyM6IGdpdGs6MjY1NAorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAi0J7QsdGA0LDRgtC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0Y3RgtC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogZ2l0azoyNjcwCittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQvdCwINGN0YLRgyDQstC10YLQutGDIgorCisjOiBnaXRrOjI2NzEKK21zZ2lkICJSZW5hbWUgdGhpcyBicmFuY2giCittc2dzdHIgItCf0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMINGN0YLRgyDQstC10YLQutGDIgorCisjOiBnaXRrOjI2NzIKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgItCj0LTQsNC70LjRgtGMINGN0YLRgyDQstC10YLQutGDIgorCisjOiBnaXRrOjI2NzMKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0YLRjCDQuNC80Y8g0LLQtdGC0LrQuCIKKworIzogZ2l0azoyNjgwCittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICLQn9C+0LTRgdCy0LXRgtC40YLRjCDRjdGC0L7RgiDRgtC+0LbQtSIKKworIzogZ2l0azoyNjgxCittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAi0J/QvtC00YHQstC10YLQuNGC0Ywg0YLQvtC70YzQutC+INGN0YLQvtGCIgorCisjOiBnaXRrOjI2ODIKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNC80LAg0YHRgNCw0LLQvdC10L3QuNGPIgorCisjOiBnaXRrOjI2ODMKK21zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgorbXNnc3RyICLQkNCy0YLQvtGA0Ysg0LjQt9C80LXQvdC10L3QuNC5INGA0L7QtNC40YLQtdC70YzRgdC60L7Qs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBnaXRrOjI2ODQKK21zZ2lkICJDb3B5IHBhdGgiCittc2dzdHIgItCa0L7Qv9C40YDQvtCy0LDRgtGMINC/0YPRgtGMIgorCisjOiBnaXRrOjI2OTEKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LjRgdGC0L7Rh9C90LjQuiDRjdGC0L7QuSDRgdGC0YDQvtC60LgiCisKKyM6IGdpdGs6MjY5MgorbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAi0JfQsNC/0YPRgdGC0LjRgtGMIGdpdCBndWkgYmxhbWUg0LTQu9GPINGN0YLQvtC5INGB0YLRgNC+0LrQuCIKKworIzogZ2l0azozMDM2Cittc2dpZCAiQWJvdXQgZ2l0ayIKK21zZ3N0ciAi0J4gZ2l0ayIKKworIzogZ2l0azozMDM4Cittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICJcbkdpdGsg4oCUINC/0YDQvtCz0YDQsNC80LzQsCDQv9GA0L7RgdC80L7RgtGA0LAg0LjRgdGC0L7RgNC40Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdCyIGdpdFxuXG7CqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcblxu0JjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LUg0Lgg0YDQsNGB0L/RgNC+0YHRgtGA0LDQvdC10L3QuNC1INGB0L7Qs9C70LDRgdC90L4g0YPRgdC70L7QstC40Y/QvCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKKworIzogZ2l0azozMDQ2IGdpdGs6MzExMyBnaXRrOjEwMDA0Cittc2dpZCAiQ2xvc2UiCittc2dzdHIgItCX0LDQutGA0YvRgtGMIgorCisjOiBnaXRrOjMwNjcKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAi0J3QsNC30L3QsNGH0LXQvdC40Y8g0LrQu9Cw0LLQuNCw0YLRg9GA0Ysg0LIgR2l0ayIKKworIzogZ2l0azozMDcwCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICLQndCw0LfQvdCw0YfQtdC90LjRjyDQutC70LDQstC40LDRgtGD0YDRiyDQsiBHaXRrOiIKKworIzogZ2l0azozMDcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVE+XHRcdFF1aXQiCittc2dzdHIgIjwlcy1RPlx0XHTQl9Cw0LLQtdGA0YjQuNGC0YwiCisKKyM6IGdpdGs6MzA3MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCittc2dzdHIgIjwlcy1XPlx0XHTQl9Cw0LrRgNGL0YLRjCDQvtC60L3QviIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8SG9tZT5cdFx00J/QtdGA0LXQudGC0Lgg0Log0L/QtdGA0LLQvtC80YMg0LrQvtC80LzQuNGC0YMiCisKKyM6IGdpdGs6MzA3NQorbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCittc2dzdHIgIjxFbmQ+XHRcdNCf0LXRgNC10LnRgtC4INC6INC/0L7RgdC70LXQtNC90LXQvNGDINC60L7QvNC80LjRgtGDIgorCisjOiBnaXRrOjMwNzYKK21zZ2lkICI8VXA+LCBwLCBrXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxVcD4sIHAsIGtcdNCf0LXRgNC10LnRgtC4INC90LAg0L7QtNC40L0g0LrQvtC80LzQuNGCINCy0LLQtdGA0YUiCisKKyM6IGdpdGs6MzA3NworbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxEb3duPiwgbiwgalx00J/QtdGA0LXQudGC0Lgg0L3QsCDQvtC00LjQvSDQutC+0LzQvNC40YIg0LLQvdC40LciCisKKyM6IGdpdGs6MzA3OAorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxMZWZ0PiwgeiwgaFx00J/QvtC60LDQt9Cw0YLRjCDRgNCw0L3QtdC1INC/0L7RgdC10YnRkdC90L3QvtC1INGB0L7RgdGC0L7Rj9C90LjQtSIKKworIzogZ2l0azozMDc5Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxSaWdodD4sIHgsIGxcdNCf0L7QutCw0LfQsNGC0Ywg0YHQu9C10LTRg9GO0YnQuNC5INC/0L7RgdC10YnRkdC90L3Ri9C5INC60L7QvNC80LjRgiIKKworIzogZ2l0azozMDgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjwlcy1uPlx00J/QtdGA0LXQudGC0Lgg0L3QsCBuINGA0L7QtNC40YLQtdC70Y8g0L7RgiDRgtC10LrRg9GJ0LXQs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBnaXRrOjMwODEKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VVcD5cdNCf0LXRgNC10LnRgtC4INC90LAg0YHRgtGA0LDQvdC40YbRgyDQstGL0YjQtSDQsiDRgdC/0LjRgdC60LUg0LrQvtC80LzQuNGC0L7QsiIKKworIzogZ2l0azozMDgyCittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZURvd24+XHTQn9C10YDQtdC50YLQuCDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0L3QuNC20LUg0LIg0YHQv9C40YHQutC1INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGdpdGs6MzA4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUhvbWU+XHTQn9C10YDQtdC50YLQuCDQvdCwINC90LDRh9Cw0LvQviDRgdC/0LjRgdC60LAg0LrQvtC80LzQuNGC0L7QsiIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHTQn9C10YDQtdC50YLQuCDQvdCwINC60L7QvdC10YYg0YHQv9C40YHQutCwINC60L7QvNC80LjRgtC+0LIiCisKKyM6IGdpdGs6MzA4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLVVwPlx00J/RgNC+0LLQtdGA0L3Rg9GC0Ywg0YHQv9C40YHQvtC6INC60L7QvNC80LjRgtC+0LIg0LLQstC10YDRhSIKKworIzogZ2l0azozMDg2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLURvd24+XHTQn9GA0L7QstC10YDQvdGD0YLRjCDRgdC/0LjRgdC+0Log0LrQvtC80LzQuNGC0L7QsiDQstC90LjQtyIKKworIzogZ2l0azozMDg3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdNCf0YDQvtCy0LXRgNC90YPRgtGMINGB0L/QuNGB0L7QuiDQutC+0LzQvNC40YLQvtCyINC90LAg0YHRgtGA0LDQvdC40YbRgyDQstCy0LXRgNGFIgorCisjOiBnaXRrOjMwODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VEb3duPlx00J/RgNC+0LLQtdGA0L3Rg9GC0Ywg0YHQv9C40YHQvtC6INC60L7QvNC80LjRgtC+0LIg0L3QsCDRgdGC0YDQsNC90LjRhtGDINCy0L3QuNC3IgorCisjOiBnaXRrOjMwODkKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1VcD5cdNCf0L7QuNGB0Log0LIg0L7QsdGA0LDRgtC90L7QvCDQv9C+0YDRj9C00LrQtSAo0LLQstC10YDRhSwg0YHRgNC10LTQuCDQvdC+0LLRi9GFINC60L7QvNC80LjRgtC+0LIpIgorCisjOiBnaXRrOjMwOTAKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFNoaWZ0LURvd24+XHTQn9C+0LjRgdC6ICjQstC90LjQtywg0YHRgNC10LTQuCDRgdGC0LDRgNGL0YUg0LrQvtC80LzQuNGC0L7QsikiCisKKyM6IGdpdGs6MzA5MQorbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RGVsZXRlPiwgYlx00J/RgNC+0LrRgNGD0YLQuNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0LLRi9GI0LUiCisKKyM6IGdpdGs6MzA5MgorbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8QmFja3NwYWNlPlx00J/RgNC+0LrRgNGD0YLQuNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0LLRi9GI0LUiCisKKyM6IGdpdGs6MzA5MworbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8TGVlcnRhc3RlPlx0XHTQn9GA0L7QutGA0YPRgtC40YLRjCDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5INC90LAg0YHRgtGA0LDQvdC40YbRgyDQvdC40LbQtSIKKworIzogZ2l0azozMDk0Cittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdNCf0YDQvtC60YDRg9GC0LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L3QsCAxOCDRgdGC0YDQvtC6INCy0LLQtdGA0YUiCisKKyM6IGdpdGs6MzA5NQorbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdNCf0YDQvtC60YDRg9GC0LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L3QsCAxOCDRgdGC0YDQvtC6INCy0L3QuNC3IgorCisjOiBnaXRrOjMwOTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdNCf0L7QuNGB0LoiCisKKyM6IGdpdGs6MzA5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHTQn9C10YDQtdC50YLQuCDQuiDRgdC70LXQtNGD0Y7RidC10LzRgyDQvdCw0LnQtNC10L3QvdC+0LzRgyDQutC+0LzQvNC40YLRgyIKKworIzogZ2l0azozMDk4Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdNCf0LXRgNC10LnRgtC4INC6INGB0LvQtdC00YPRjtGJ0LXQvNGDINC90LDQudC00LXQvdC90L7QvNGDINC60L7QvNC80LjRgtGDIgorCisjOiBnaXRrOjMwOTkKK21zZ2lkICJnXHRcdEdvIHRvIGNvbW1pdCIKK21zZ3N0ciAiZ1x0XHTQn9C10YDQtdC50YLQuCDQvdCwINC60L7QvNC80LjRgiIKKworIzogZ2l0azozMTAwCittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHTQn9C10YDQtdC50YLQuCDQuiDQv9C+0LvRjiDQv9C+0LjRgdC60LAiCisKKyM6IGdpdGs6MzEwMQorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHTQn9C10YDQtdC50YLQuCDQuiDQv9GA0LXQtNGL0LTRg9GJ0LXQvNGDINC90LDQudC00LXQvdC90L7QvNGDINC60L7QvNC80LjRgtGDIgorCisjOiBnaXRrOjMxMDIKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdNCf0YDQvtC60YDRg9GC0LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0Log0YHQu9C10LTRg9GO0YnQtdC80YMg0YTQsNC50LvRgyIKKworIzogZ2l0azozMTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx00J/RgNC+0LTQvtC70LbQuNGC0Ywg0L/QvtC40YHQuiDQsiDRgdC/0LjRgdC60LUg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBnaXRrOjMxMDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx00J/QtdGA0LXQudGC0Lgg0Log0L/RgNC10LTRi9C00YPRidC10LzRgyDQvdCw0LnQtNC10L3QvdC+0LzRgyDRgtC10LrRgdGC0YMg0LIg0YHQv9C40YHQutC1INC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0azozMTA1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdNCj0LLQtdC70LjRh9C40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgorCisjOiBnaXRrOjMxMDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLXBsdXM+XHTQo9Cy0LXQu9C40YfQuNGC0Ywg0YDQsNC30LzQtdGAINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azozMTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdNCj0LzQtdC90YzRiNC40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgorCisjOiBnaXRrOjMxMDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1taW51cz5cdNCj0LzQtdC90YzRiNC40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgorCisjOiBnaXRrOjMxMDkKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHTQntCx0L3QvtCy0LjRgtGMIgorCisjOiBnaXRrOjM1NzQgZ2l0azozNTgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDRgdC+0LfQtNCw0L3QuNGPINCy0YDQtdC80LXQvdC90L7Qs9C+INC60LDRgtCw0LvQvtCz0LAgJXM6IgorCisjOiBnaXRrOjM1OTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC/0L7Qu9GD0YfQtdC90LjRjyDCqyVzwrsg0LjQtyAlczoiCisKKyM6IGdpdGs6MzY1OQorbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAi0L7RiNC40LHQutCwINCy0YvQv9C+0LvQvdC10L3QuNGPINC60L7QvNCw0L3QtNGLOiIKKworIzogZ2l0azozODA4Cittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgItCa0L7QvNC80LjRgiDQvdC1INC90LDQudC00LXQvSIKKworIzogZ2l0azozODIyCittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiDQvtGI0LjQsdC60LAg0LLRi9C/0L7Qu9C90LXQvdC40Y8g0LrQvtC80LDQvdC00Ys6IgorCisjOiBnaXRrOjM4NTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICLQntGI0LjQsdC60LAg0YfRgtC10L3QuNGPIE1FUkdFX0hFQUQ6ICVzIgorCisjOiBnaXRrOjM4NjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKK21zZ3N0ciAi0J7RiNC40LHQutCwINGH0YLQtdC90LjRjyDQuNC90LTQtdC60YHQsDogJXMiCisKKyM6IGdpdGs6Mzg4NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0L/Rg9GB0LrQsCBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM4ODkgZ2l0azo2Nzc4Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICLQn9C+0LjRgdC6IgorCisjOiBnaXRrOjM5MjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM5NDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICLQrdGC0LAg0YHRgtGA0L7QutCwINC/0YDQuNC90LDQtNC70LXQttC40YIg0LrQvtC80LzQuNGC0YMgJXMsINC60L7RgtC+0YDRi9C5INC90LUg0L/QvtC60LDQt9Cw0L0g0LIg0Y3RgtC+0Lwg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LgiCisKKyM6IGdpdGs6Mzk2MworbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQv9GA0L7Qs9GA0LDQvNC80Ysg0YHRgNCw0LLQvdC10L3QuNGPOiIKKworIzogZ2l0azo0MDY3Cittc2dpZCAiQWxsIGZpbGVzIgorbXNnc3RyICLQktGB0LUg0YTQsNC50LvRiyIKKworIzogZ2l0azo0MDkxCittc2dpZCAiVmlldyIKK21zZ3N0ciAi0J/RgNC10LTRgdGC0LDQstC70LXQvdC40LUiCisKKyM6IGdpdGs6NDA5NAorbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICJHaXRrINC+0L/RgNC10LTQtdC70LXQvdC40LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LkiCisKKyM6IGdpdGs6NDA5OAorbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAi0JfQsNC/0L7QvNC90LjRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1IgorCisjOiBnaXRrOjQwOTkKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICLQodGB0YvQu9C60LggKNGA0LDQt9C00LXQu9GR0L3QvdGL0LUg0L/RgNC+0LHQtdC70L7QvCk6IgorCisjOiBnaXRrOjQxMDAKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICLQktC10YLQutC4INC4INC80LXRgtC60LgiCisKKyM6IGdpdGs6NDEwMQorbXNnaWQgIkFsbCByZWZzIgorbXNnc3RyICLQktGB0LUg0YHRgdGL0LvQutC4IgorCisjOiBnaXRrOjQxMDIKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAi0JLRgdC1ICjQu9C+0LrQsNC70YzQvdGL0LUpINCy0LXRgtC60LgiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICLQktGB0LUg0LzQtdGC0LrQuCIKKworIzogZ2l0azo0MTA0Cittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi0JLRgdC1INCy0L3QtdGI0L3QuNC1INC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INCy0LXRgtC60LgiCisKKyM6IGdpdGs6NDEwNQorbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgItCY0L3RhNC+0YDQvNCw0YbQuNGPINC+INC60L7QvNC80LjRgtC1ICjRgNC10LPRg9C70Y/RgNC90YvQtSDQstGL0YDQsNC20LXQvdC40Y8pOiIKKworIzogZ2l0azo0MTA2Cittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAi0JDQstGC0L7RgDoiCisKKyM6IGdpdGs6NDEwNworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgItCa0L7QvNC80LjRgtC10YA6IgorCisjOiBnaXRrOjQxMDgKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgItCh0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsDoiCisKKyM6IGdpdGs6NDEwOQorbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICLQodC+0LLQv9Cw0LTQsNC10YIg0YHQviDQstGB0LXQvNC4INGD0YHQu9C+0LLQuNGP0LzQuCDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDQutC+0LzQvNC40YLQtSIKKworIzogZ2l0azo0MTEwCittc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAi0J3QtSDRgdC+0LLQv9Cw0LTQsNC10YIg0YEg0YPRgdC70L7QstC40Y/QvNC4INC40L3RhNC+0YDQvNCw0YbQuNC4INC+INC60L7QvNC80LjRgtC1IgorCisjOiBnaXRrOjQxMTEKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPINGE0LDQudC70L7QsjoiCisKKyM6IGdpdGs6NDExMgorbXNnaWQgIkZpeGVkIFN0cmluZyIKK21zZ3N0ciAi0J7QsdGL0YfQvdCw0Y8g0YHRgtGA0L7QutCwIgorCisjOiBnaXRrOjQxMTMKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgItCg0LXQs9GD0LvRj9GA0L3QvtC1INCy0YvRgNCw0LbQtdC90LjQtToiCisKKyM6IGdpdGs6NDExNAorbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICLQodGC0YDQvtC60LAg0LTQu9GPINC/0L7QuNGB0LrQsDoiCisKKyM6IGdpdGs6NDExNQorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAi0JTQsNGC0Ysg0LrQvtC80LzQuNGC0LAgKMKrMiDQvdC10LTQtdC70Lgg0L3QsNC30LDQtMK7LCDCqzIwMDktMDMtMTcgMTU6Mjc6MzjCuywgwqsxNyDQvNCw0YDRgtCwIDIwMDkgMTU6Mjc6MzjCuyk6IgorCisjOiBnaXRrOjQxMTYKK21zZ2lkICJTaW5jZToiCittc2dzdHIgItChINC00LDRgtGLOiIKKworIzogZ2l0azo0MTE3Cittc2dpZCAiVW50aWw6IgorbXNnc3RyICLQn9C+INC00LDRgtGDOiIKKworIzogZ2l0azo0MTE4Cittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgItCe0LPRgNCw0L3QuNGH0LjRgtGMINC4L9C40LvQuCDQv9GA0L7Qv9GD0YHRgtC40YLRjCDQutC+0LvQuNGH0LXRgdGC0LLQviDRgNC10LTQsNC60YbQuNC5ICjQv9C+0LvQvtC20LjRgtC10LvRjNC90L7QtSDRh9C40YHQu9C+KToiCisKKyM6IGdpdGs6NDExOQorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQutC+0LvQuNGH0LXRgdGC0LLQvjoiCisKKyM6IGdpdGs6NDEyMAorbXNnaWQgIk51bWJlciB0byBza2lwOiIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GB0YLQuNGC0Ywg0LrQvtC70LjRh9C10YHRgtCy0L46IgorCisjOiBnaXRrOjQxMjEKK21zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgorbXNnc3RyICLQoNCw0LfQu9C40YfQvdGL0LUg0L7Qv9GG0LjQuDoiCisKKyM6IGdpdGs6NDEyMgorbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKK21zZ3N0ciAi0KHRgtGA0L7Qs9Cw0Y8g0YHQvtGA0YLQuNGA0L7QstC60LAg0L/QviDQtNCw0YLQtSIKKworIzogZ2l0azo0MTIzCittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgItCe0YLQvNC10YLQuNGC0Ywg0YHRgtC+0YDQvtC90Ysg0LLQtdGC0L7QuiIKKworIzogZ2l0azo0MTI0Cittc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgorbXNnc3RyICLQntCz0YDQsNC90LjRh9C40YLRjCDQv9C10YDQstGL0Lwg0L/RgNC10LTQutC+0LwiCisKKyM6IGdpdGs6NDEyNQorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICLQo9C/0YDQvtGJ0LXQvdC90LDRjyDQuNGB0YLQvtGA0LjRjyIKKworIzogZ2l0azo0MTI2Cittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgItCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0LUg0LDRgNCz0YPQvNC10L3RgtGLINC00LvRjyBnaXQgbG9nOiIKKworIzogZ2l0azo0MTI3Cittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgItCk0LDQudC70Ysg0Lgg0LrQsNGC0LDQu9C+0LPQuCDQtNC70Y8g0L7Qs9GA0LDQvdC40YfQtdC90LjRjyDQuNGB0YLQvtGA0LjQuCwg0L/QviDQvtC00L3QvtC80YMg0L3QsCDRgdGC0YDQvtC60YM6IgorCisjOiBnaXRrOjQxMjgKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAi0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90LDRjyDQutC+0LzQsNC90LTQsCDQtNC70Y8g0YHQv9C40YHQutCwINC60L7QvNC80LjRgtC+0LI6IgorCisjOiBnaXRrOjQyNTIKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGs6INC40LfQvNC10L3QuNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUiCisKKyM6IGdpdGs6NDI2MAorbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICLigJQg0LrRgNC40YLQtdGA0LjQuSDQv9C+0LjRgdC60LAg0YDQtdC00LDQutGG0LjQuSIKKworIzogZ2l0azo0MjY1Cittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICLQmNC80Y8g0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8iCisKKyM6IGdpdGs6NDM0MAorbXNnaWQgIkFwcGx5IChGNSkiCittc2dzdHIgItCf0YDQuNC80LXQvdC40YLRjCAoRjUpIgorCisjOiBnaXRrOjQzNzgKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQsiDQv9Cw0YDQsNC80LXRgtGA0LDRhSDQstGL0LHQvtGA0LAg0LrQvtC80LzQuNGC0L7QsjoiCisKKyM6IGdpdGs6NDQzMyBnaXRrOjQ0ODYgZ2l0azo0OTQ4IGdpdGs6NDk2MiBnaXRrOjYyMzIgZ2l0azoxMjUyNCBnaXRrOjEyNTI1Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAi0J3QuCDQvtC00L3QvtCz0L4iCisKKyM6IGdpdGs6NTA0NSBnaXRrOjUwNTAKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICLQn9C+0YDQvtC20LTRkdC90L3QvtC1IgorCisjOiBnaXRrOjUwNDYKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAi0J3QtSDQv9C+0YDQvtC20LTRkdC90L3QvtC1IgorCisjOiBnaXRrOjUwNTMgZ2l0azo1MDU4Cittc2dpZCAiQW5jZXN0b3IiCittc2dzdHIgItCf0YDQtdC00L7QuiIKKworIzogZ2l0azo1MDU0Cittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICLQndC1INC/0YDQtdC00L7QuiIKKworIzogZ2l0azo1MzQ4Cittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICLQn9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBnaXRrOjUzODQKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAi0J3QtdC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8iCisKKyM6IGdpdGs6NzE1OAorbXNnaWQgImFuZCBtYW55IG1vcmUiCittc2dzdHIgItC4INC80L3QvtCz0L7QtSDQtNGA0YPQs9C+0LUiCisKKyM6IGdpdGs6NzE2MQorbXNnaWQgIm1hbnkiCittc2dzdHIgItC80L3QvtCz0L4iCisKKyM6IGdpdGs6NzM1MgorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICLQnNC10YLQutC4OiIKKworIzogZ2l0azo3MzY5IGdpdGs6NzM3NSBnaXRrOjg4NTQKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgItCf0YDQtdC00L7QuiIKKworIzogZ2l0azo3MzgwCittc2dpZCAiQ2hpbGQiCittc2dzdHIgItCf0L7RgtC+0LzQvtC6IgorCisjOiBnaXRrOjczODkKK21zZ2lkICJCcmFuY2giCittc2dzdHIgItCS0LXRgtC60LAiCisKKyM6IGdpdGs6NzM5MgorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgItCh0LvQtdC00YPQtdGCINC30LAiCisKKyM6IGdpdGs6NzM5NQorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICLQn9GA0LXQtNGI0LXRgdGC0LLRg9C10YIiCisKKyM6IGdpdGs6Nzk5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgorbXNnc3RyICLQntGI0LjQsdC60LAg0L/QvtC70YPRh9C10L3QuNGPINC40LfQvNC10L3QtdC90LjQuTogJXMiCisKKyM6IGdpdGs6ODY3OQorbXNnaWQgIkdvdG86IgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQujoiCisKKyM6IGdpdGs6ODcwMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICLQodC+0LrRgNCw0YnRkdC90L3Ri9C5IFNIQTEg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAgJXMg0L3QtdC+0LTQvdC+0LfQvdCw0YfQtdC9IgorCisjOiBnaXRrOjg3MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgItCg0LXQtNCw0LrRhtC40Y8gJXMg0L3QtSDQvdCw0LnQtNC10L3QsCIKKworIzogZ2l0azo4NzE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIlNIQTEg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAgJXMg0L3QtSDQvdCw0LnQtNC10L0iCisKKyM6IGdpdGs6ODcxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgorbXNnc3RyICLQoNC10LTQsNC60YbQuNGPICVzINC90LUg0L3QsNC50LTQtdC90LAg0LIg0YLQtdC60YPRidC10Lwg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LgiCisKKyM6IGdpdGs6ODg2MSBnaXRrOjg4NzYKK21zZ2lkICJEYXRlIgorbXNnc3RyICLQlNCw0YLQsCIKKworIzogZ2l0azo4ODY0Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgItCf0L7RgtC+0LzQutC4IgorCisjOiBnaXRrOjg5MjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAi0KHQsdGA0L7RgdC40YLRjCDQstC10YLQutGDICVzINC90LAg0Y3RgtC+0YIg0LrQvtC80LzQuNGCIgorCisjOiBnaXRrOjg5MjkKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAi0JrQvtC80LzQuNGCINC90LUg0L/RgNC40L3QsNC00LvQtdC20LjRgiDQvdC4INC+0LTQvdC+0Lkg0LLQtdGC0LrQtSwg0YHQsdGA0L7RgdC40YLRjCDQvdC10LLQvtC30LzQvtC20L3QviIKKworIzogZ2l0azo5MDM0IGdpdGs6OTA0MAorbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCittc2dzdHIgItCf0YDQvtC/0YPRgdC60LDRjiDQutC+0LzQvNC40YIt0YHQu9C40Y/QvdC40LUiCisKKyM6IGdpdGs6OTA0OSBnaXRrOjkwNTQKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQv9Cw0YLRh9CwINC00LvRjyAiCisKKyM6IGdpdGs6OTA1MCBnaXRrOjkwNTUKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIg4oCUINC+0YHRgtCw0L3QvtCyXG4iCisKKyM6IGdpdGs6OTA2MCBnaXRrOjkwNjMgZ2l0azo5MDcxIGdpdGs6OTA4NSBnaXRrOjkwOTQKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICLQmtC+0LzQvNC40YIiCisKKyM6IGdpdGs6OTA2NAorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIg0YLQsNC60L7QuSDQttC1INC/0LDRgtGHLCDQutCw0Log0LhcbiAgICAgICAiCisKKyM6IGdpdGs6OTA3MgorbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiINC+0YLQu9C40YfQsNC10YLRgdGPINC+0YJcbiAgICAgICAiCisKKyM6IGdpdGs6OTA3NAorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgItCg0LDQt9C70LjRh9C40Y8g0LrQvtC80LzQuNGC0L7QsjpcblxuIgorCisjOiBnaXRrOjkwODYgZ2l0azo5MDk1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiDRj9Cy0LvRj9C10YLRgdGPICVzINC/0L7RgtC+0LzQutC+0Lwg4oCUINC+0YHRgtCw0L3QvtCyXG4iCisKKyM6IGdpdGs6OTExNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgorbXNnc3RyICLQn9GA0L7QuNC30L7RiNC70LAg0L7RiNC40LHQutCwINC/0YDQuCDQt9Cw0L/QuNGB0Lgg0LrQvtC80LzQuNGC0LAg0LIg0YTQsNC50Ls6ICVzIgorCisjOiBnaXRrOjkxMjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgorbXNnc3RyICLQn9GA0L7QuNC30L7RiNC70LAg0L7RiNC40LHQutCwINC/0YDQuCDQstGL0LLQvtC00LUg0YDQsNC30LvQuNGH0LjQuSDQutC+0LzQvNC40YLQvtCyOiAlcyIKKworIzogZ2l0azo5MTY2Cittc2dpZCAiVG9wIgorbXNnc3RyICLQktC10YDRhSIKKworIzogZ2l0azo5MTY3Cittc2dpZCAiRnJvbSIKK21zZ3N0ciAi0J7RgiIKKworIzogZ2l0azo5MTcyCittc2dpZCAiVG8iCittc2dzdHIgItCU0L4iCisKKyM6IGdpdGs6OTE5NgorbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICLQodC+0LfQtNCw0YLRjCDQv9Cw0YLRhyIKKworIzogZ2l0azo5MTk4Cittc2dpZCAiRnJvbToiCittc2dzdHIgItCe0YI6IgorCisjOiBnaXRrOjkyMDcKK21zZ2lkICJUbzoiCittc2dzdHIgItCU0L46IgorCisjOiBnaXRrOjkyMTYKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICLQkiDQvtCx0YDQsNGC0L3QvtC8INC/0L7RgNGP0LTQutC1IgorCisjOiBnaXRrOjkyMTggZ2l0azo5NDI4Cittc2dpZCAiT3V0cHV0IGZpbGU6IgorbXNnc3RyICLQpNCw0LnQuyDQtNC70Y8g0YHQvtGF0YDQsNC90LXQvdC40Y86IgorCisjOiBnaXRrOjkyMjQKK21zZ2lkICJHZW5lcmF0ZSIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0YwiCisKKyM6IGdpdGs6OTI2MgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINGB0L7Qt9C00LDQvdC40Y8g0L/QsNGC0YfQsDoiCisKKyM6IGdpdGs6OTI4NSBnaXRrOjk0MTYgZ2l0azo5NTA0Cittc2dpZCAiSUQ6IgorbXNnc3RyICJJRDoiCisKKyM6IGdpdGs6OTI5NAorbXNnaWQgIlRhZyBuYW1lOiIKK21zZ3N0ciAi0JjQvNGPINC80LXRgtC60Lg6IgorCisjOiBnaXRrOjkyOTcKK21zZ2lkICJUYWcgbWVzc2FnZSBpcyBvcHRpb25hbCIKK21zZ3N0ciAi0J7Qv9C40YHQsNC90LjQtSDQvNC10YLQutC4INGD0LrQsNC30YvQstCw0YLRjCDQvdC1INC+0LHRj9C30LDRgtC10LvRjNC90L4iCisKKyM6IGdpdGs6OTI5OQorbXNnaWQgIlRhZyBtZXNzYWdlOiIKK21zZ3N0ciAi0J7Qv9C40YHQsNC90LjQtSDQvNC10YLQutC4OiIKKworIzogZ2l0azo5MzAzIGdpdGs6OTQ3NAorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0YwiCisKKyM6IGdpdGs6OTMyMQorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAi0J3QtSDQt9Cw0LTQsNC90L4g0LjQvNGPINC80LXRgtC60LgiCisKKyM6IGdpdGs6OTMyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgItCc0LXRgtC60LAgwqslc8K7INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiIKKworIzogZ2l0azo5MzM1Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINGB0L7Qt9C00LDQvdC40Y8g0LzQtdGC0LrQuDoiCisKKyM6IGdpdGs6OTQyNQorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICLQmtC+0LzQsNC90LTQsDoiCisKKyM6IGdpdGs6OTQzMworbXNnaWQgIldyaXRlIgorbXNnc3RyICLQl9Cw0L/QuNGB0YwiCisKKyM6IGdpdGs6OTQ1MQorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKK21zZ3N0ciAi0J/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsCDQv9GA0Lgg0LfQsNC/0LjRgdC4INC60L7QvNC80LjRgtCwOiIKKworIzogZ2l0azo5NDczCittc2dpZCAiQ3JlYXRlIGJyYW5jaCIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0LLQtdGC0LrRgyIKKworIzogZ2l0azo5NDg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVuYW1lIGJyYW5jaCAlcyIKK21zZ3N0ciAi0J/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0Ywg0LLQtdGC0LrRgyAlcyIKKworIzogZ2l0azo5NDkwCittc2dpZCAiUmVuYW1lIgorbXNnc3RyICLQn9C10YDQtdC40LzQtdC90L7QstCw0YLRjCIKKworIzogZ2l0azo5NTE0Cittc2dpZCAiTmFtZToiCittc2dzdHIgItCY0LzRjzoiCisKKyM6IGdpdGs6OTUzOAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgItCj0LrQsNC20LjRgtC1INC40LzRjyDQtNC70Y8g0L3QvtCy0L7QuSDQstC10YLQutC4IgorCisjOiBnaXRrOjk1NDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAi0JLQtdGC0LrQsCDCqyVzwrsg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiDQn9C10YDQtdC/0LjRgdCw0YLRjD8iCisKKyM6IGdpdGs6OTU4NworbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmV3IG5hbWUgZm9yIHRoZSBicmFuY2giCittc2dzdHIgItCj0LrQsNC20LjRgtC1INC40LzRjyDQtNC70Y8g0L3QvtCy0L7QuSDQstC10YLQutC4IgorCisjOiBnaXRrOjk2NTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAi0JrQvtC80LzQuNGCICVzINGD0LbQtSDQstC60LvRjtGH0ZHQvSDQsiDQstC10YLQutGDICVzLiDQn9GA0L7QtNC+0LvQttC40YLRjCDQvtC/0LXRgNCw0YbQuNGOPyIKKworIzogZ2l0azo5NjU1Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgItCa0L7Qv9C40YDQvtCy0LDQvdC40LUg0LrQvtC80LzQuNGC0LAiCisKKyM6IGdpdGs6OTY2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKKyJQbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgItCa0L7Qv9C40YDQvtCy0LDQvdC40LUg0LrQvtC80LzQuNGC0LAg0L3QtdCy0L7Qt9C80L7QttC90L4g0LjQty3Qt9CwINC40LfQvNC10L3QtdC90LjQuSDQsiDRhNCw0LnQu9C1IMKrJXPCuy5cbtCX0LDQutC+0LzQvNC40YLRjNGC0LUsINGB0LHRgNC+0YHRjNGC0LUg0LjQu9C4INGB0L/RgNGP0YfRjNGC0LUg0LjQt9C80LXQvdC10L3QuNGPINC4INC/0L7QstGC0L7RgNC40YLQtSDQvtC/0LXRgNCw0YbQuNGOLiIKKworIzogZ2l0azo5NjcwCittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQvdC10LLQvtC30LzQvtC20L3QviDQuNC3LdC30LAg0L3QtdC30LDQstC10YDRiNGR0L3QvdC+0Lkg0L7Qv9C10YDQsNGG0LjQuCDRgdC70LjRj9C90LjRjy5cbtCX0LDQv9GD0YHRgtC40YLRjCBnaXQgY2l0b29sINC00LvRjyDQt9Cw0LLQtdGA0YjQtdC90LjRjyDRjdGC0L7QuSDQvtC/0LXRgNCw0YbQuNC4PyIKKworIzogZ2l0azo5Njg2IGdpdGs6OTc0NAorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y8g0L3QtSDQt9Cw0LrQvtC80LzQuNGH0LXQvdGLIgorCisjOiBnaXRrOjk3MTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKK21zZ3N0ciAi0JrQvtC80LzQuNGCICVzINC90LUg0LLQutC70Y7Rh9GR0L0g0LIg0LLQtdGC0LrRgyAlcy4g0J/RgNC+0LTQvtC70LbQuNGC0Ywg0L7Qv9C10YDQsNGG0LjRjj8iCisKKyM6IGdpdGs6OTcxOAorbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAi0J7QsdGA0LDRidC10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0azo5NzI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKKyJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgItCS0L7Qt9Cy0YDQsNGCINC40LfQvNC10L3QtdC90LjQuSDQutC+0LzQvNC40YLQsCDQvdC1INGD0LTQsNC70YHRjyDQuNC3LdC30LAg0LvQvtC60LDQu9GM0L3Ri9GFINC40LfQvNC10L3QtdC90LjQuSDQsiDRg9C60LDQt9Cw0L3QvdGL0YUg0YTQsNC50LvQsNGFOiAlc1xu0JfQsNC60L7QvNC80LjRgtGM0YLQtSwg0YHQsdGA0L7RgdGM0YLQtSDQuNC70Lgg0YHQv9GA0Y/Rh9GM0YLQtSDQuNC30LzQtdC90LXQvdC40Y8g0Lgg0L/QvtCy0YLQvtGA0LjRgtC1INC+0L/QtdGA0LDRhtC40Y4uIgorCisjOiBnaXRrOjk3MzAKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIiBEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAi0JLQvtC30LLRgNCw0YIg0LjQt9C80LXQvdC10L3QuNC5INC90LXQstC+0LfQvNC+0LbQtdC9INC40Lct0LfQsCDQvdC10LfQsNCy0LXRgNGI0ZHQvdC90L7QuSDQvtC/0LXRgNCw0YbQuNC4INGB0LvQuNGP0L3QuNGPLlxu0JfQsNC/0YPRgdGC0LjRgtGMIGdpdCBjaXRvb2wg0LTQu9GPINC30LDQstC10YDRiNC10L3QuNGPINGN0YLQvtC5INC+0L/QtdGA0LDRhtC40Lg/IgorCisjOiBnaXRrOjk3NzMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICLQn9C+0LTRgtCy0LXRgNC00LjRgtC1INC+0L/QtdGA0LDRhtC40Y4g0L/QtdGA0LXRhdC+0LTQsCIKKworIzogZ2l0azo5Nzc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAi0KHQsdGA0L7RgdC40YLRjCDQstC10YLQutGDICVzINC90LAg0LrQvtC80LzQuNGCICVzPyIKKworIzogZ2l0azo5Nzc3Cittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgItCi0LjQvyDQvtC/0LXRgNCw0YbQuNC4INC/0LXRgNC10YXQvtC00LA6IgorCisjOiBnaXRrOjk3ODAKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAi0JvRkdCz0LrQuNC5OiDQvtGB0YLQsNCy0LjRgtGMINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzINC4INC40L3QtNC10LrRgSDQvdC10LjQt9C80LXQvdC90YvQvNC4IgorCisjOiBnaXRrOjk3ODMKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgItCh0LzQtdGI0LDQvdC90YvQuTog0L7RgdGC0LDQstC40YLRjCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQvdC10LjQt9C80LXQvdC90YvQvCwg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LjQvdC00LXQutGBIgorCisjOiBnaXRrOjk3ODYKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAi0JbQtdGB0YLQutC40Lk6INC/0LXRgNC10L/QuNGB0LDRgtGMINC40L3QtNC10LrRgSDQuCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7Qs1xuKNCy0YHQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSDQsdGD0LTRg9GCINC/0L7RgtC10YDRj9C90YspIgorCisjOiBnaXRrOjk4MDMKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgItCh0LHRgNC+0YEiCisKKyM6IGdpdGs6OTg3NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkEgbG9jYWwgYnJhbmNoIG5hbWVkICVzIGV4aXN0cyBhbHJlYWR5IgorbXNnc3RyICLQm9C+0LrQsNC70YzQvdCw0Y8g0LLQtdGC0LrQsCDRgSDQuNC80LXQvdC10LwgJXMg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBnaXRrOjk4ODQKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgItCf0LXRgNC10YXQvtC0IgorCisjOiBnaXRrOjk5NDMKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICLQkNC60YLQuNCy0L3QsNGPINCy0LXRgtC60LAg0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINGD0LTQsNC70LXQvdCwIgorCisjOiBnaXRrOjk5NDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAi0JrQvtC80LzQuNGC0Ysg0LjQtyDQstC10YLQutC4ICVzINC90LUg0L/RgNC40L3QsNC00LvQtdC20LDRgiDQsdC+0LvRjNGI0LUg0L3QuNC60LDQutC+0Lkg0LTRgNGD0LPQvtC5INCy0LXRgtC60LUuXG7QlNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRg9C00LDQu9C40YLRjCDQstC10YLQutGDICVzPyIKKworIzogZ2l0azo5OTgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICLQnNC10YLQutC4INC4INCy0LXRgtC60Lg6ICVzIgorCisjOiBnaXRrOjk5OTcKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgItCk0LjQu9GM0YLRgNC+0LLQsNGC0YwiCisKKyM6IGdpdGs6MTAyOTMKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgItCe0YjQuNCx0LrQsCDRh9GC0LXQvdC40Y8g0LjRgdGC0L7RgNC40Lgg0L/RgNC+0LXQutGC0LA7INC40L3RhNC+0YDQvNCw0YbQuNGPINC+INCy0LXRgtC60LDRhSDQuCDQutC+0LzQvNC40YLQsNGFINCy0L7QutGA0YPQsyDQvNC10YLQvtC6ICjQtNC+L9C/0L7RgdC70LUpINC80L7QttC10YIg0LHRi9GC0Ywg0L3QtdC/0L7Qu9C90L7QuS4iCisKKyM6IGdpdGs6MTEyNzAKK21zZ2lkICJUYWciCittc2dzdHIgItCc0LXRgtC60LAiCisKKyM6IGdpdGs6MTEyNzQKK21zZ2lkICJJZCIKK21zZ3N0ciAiSWQiCisKKyM6IGdpdGs6MTEzNTcKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAi0KjRgNC40YTRgiBHaXRrIgorCisjOiBnaXRrOjExMzc0Cittc2dpZCAiQiIKK21zZ3N0ciAi0JYiCisKKyM6IGdpdGs6MTEzNzcKK21zZ2lkICJJIgorbXNnc3RyICLQmiIKKworIzogZ2l0azoxMTQ5NQorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAi0J/QsNGA0LDQvNC10YLRgNGLINC/0L7QutCw0LfQsCDRgdC/0LjRgdC60LAg0LrQvtC80LzQuNGC0L7QsiIKKworIzogZ2l0azoxMTQ5OAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKK21zZ3N0ciAi0JzQsNC60YEuINGI0LjRgNC40L3QsCDQs9GA0LDRhNCwICjRgdGC0YDQvtC6KSIKKworIzogZ2l0azoxMTUwMgorIywgbm8tdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgItCc0LDQutGBLiDRiNC40YDQuNC90LAg0LPRgNCw0YTQsCAoJSDRiNC40YDQuNC90Ysg0L/QsNC90LXQu9C4KSIKKworIzogZ2l0azoxMTUwNQorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAi0J/QvtC60LDQt9GL0LLQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUiCisKKyM6IGdpdGs6MTE1MDgKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgorbXNnc3RyICLQkNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDQstGL0LTQtdC70LjRgtGMIFNIQTEgKNC00LvQuNC90L3QsCkiCisKKyM6IGdpdGs6MTE1MTIKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICLQodC60YDRi9GC0Ywg0LLQvdC10YjQvdC40LUg0YHRgdGL0LvQutC4IgorCisjOiBnaXRrOjExNTE2Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgItCf0LDRgNCw0LzQtdGC0YDRiyDQv9C+0LrQsNC30LAg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBnaXRrOjExNTE4Cittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgItCo0LjRgNC40L3QsCDRgtCw0LHRg9C70Y/RhtC40LgiCisKKyM6IGdpdGs6MTE1MjEKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzL2hlYWRzIgorbXNnc3RyICLQn9C+0LrQsNC30YvQstCw0YLRjCDQsdC70LjQt9C60LjQtSDQvNC10YLQutC4L9Cy0LXRgtC60LgiCisKKyM6IGdpdGs6MTE1MjQKK21zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgorbXNnc3RyICLQn9C+0LrQsNC30YvQstCw0YLRjCDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0LzQtdGC0L7Qui/QstC10YLQvtC6IgorCisjOiBnaXRrOjExNTI3Cittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICLQntCz0YDQsNC90LjRh9C40YLRjCDQv9C+0LrQsNC3INC40LfQvNC10L3QtdC90LjQuSDQstGL0LHRgNCw0L3QvdGL0LzQuCDRhNCw0LnQu9Cw0LzQuCIKKworIzogZ2l0azoxMTUzMAorbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICLQn9C+0LTQtNC10YDQttC60LAg0LrQvtC00LjRgNC+0LLQvtC6INCyINC+0YLQtNC10LvRjNC90YvRhSDRhNCw0LnQu9Cw0YUiCisKKyM6IGdpdGs6MTE1MzYgZ2l0azoxMTY4MworbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwINC00LvRjyDQv9C+0LrQsNC30LAg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBnaXRrOjExNTM3Cittc2dpZCAiQ2hvb3NlLi4uIgorbXNnc3RyICLQktGL0LHQtdGA0LjRgtC1Li4uIgorCisjOiBnaXRrOjExNTQyCittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICLQntCx0YnQuNC1INC+0L/RhtC40LgiCisKKyM6IGdpdGs6MTE1NDUKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgdGC0LjQu9C4INCy0LjQtNC20LXRgtC+0LIiCisKKyM6IGdpdGs6MTE1NDcKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIo0LjQt9C80LXQvdC10L3QuNC1INC/0L7RgtGA0LXQsdGD0LXRgiDQv9C10YDQtdC30LDQv9GD0YHQuikiCisKKyM6IGdpdGs6MTE1NDkKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiKNC90LXQtNC+0YHRgtGD0L/QvdC+INCyINC00LDQvdC90YvQuSDQvNC+0LzQtdC90YIpIgorCisjOiBnaXRrOjExNTYwCittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgItCm0LLQtdGC0LA6INC90LDQttC80LjRgtC1INC00LvRjyDQstGL0LHQvtGA0LAiCisKKyM6IGdpdGs6MTE1NjMKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgItCY0L3RgtC10YDRhNC10LnRgSIKKworIzogZ2l0azoxMTU2NAorbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAi0LjQvdGC0LXRgNGE0LXQudGBIgorCisjOiBnaXRrOjExNTY3Cittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAi0KTQvtC9IgorCisjOiBnaXRrOjExNTY4IGdpdGs6MTE1OTgKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICLRhNC+0L0iCisKKyM6IGdpdGs6MTE1NzEKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICLQn9C10YDQtdC00L3QuNC5INC/0LvQsNC9IgorCisjOiBnaXRrOjExNTcyCittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAi0L/QtdGA0LXQtNC90LjQuSDQv9C70LDQvSIKKworIzogZ2l0azoxMTU3NQorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPOiDRgdGC0LDRgNGL0Lkg0YLQtdC60YHRgiIKKworIzogZ2l0azoxMTU3NgorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICLRgdGC0LDRgNGL0Lkg0YLQtdC60YHRgiDQuNC30LzQtdC90LXQvdC40Y8iCisKKyM6IGdpdGs6MTE1ODAKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjzog0L3QvtCy0YvQuSDRgtC10LrRgdGCIgorCisjOiBnaXRrOjExNTgxCittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgItC90L7QstGL0Lkg0YLQtdC60YHRgiDQuNC30LzQtdC90LXQvdC40Y8iCisKKyM6IGdpdGs6MTE1ODUKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPOiDQt9Cw0LPQvtC70L7QstC+0Log0LHQu9C+0LrQsCIKKworIzogZ2l0azoxMTU4NworbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgItC30LDQs9C+0LvQvtCy0L7QuiDQsdC70L7QutCwINC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0azoxMTU5MQorbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgorbXNnc3RyICLQpNC+0L0g0LLRi9Cx0YDQsNC90L3QvtC5INGB0YLRgNC+0LrQuCIKKworIzogZ2l0azoxMTU5MworbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgItGE0L7QvSDQstGL0LHRgNCw0L3QvdC+0Lkg0YHRgtGA0L7QutC4IgorCisjOiBnaXRrOjExNTk3Cittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICLQktGL0LHQtdGA0LjRgtC1INGE0L7QvSIKKworIzogZ2l0azoxMTYwNgorbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgItCo0YDQuNGE0YI6INC90LDQttC80LjRgtC1INC00LvRjyDQstGL0LHQvtGA0LAiCisKKyM6IGdpdGs6MTE2MDgKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgItCe0YHQvdC+0LLQvdC+0Lkg0YjRgNC40YTRgiIKKworIzogZ2l0azoxMTYwOQorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICLQqNGA0LjRhNGCINC/0L7QutCw0LfQsCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdGs6MTE2MTAKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICLQqNGA0LjRhNGCINC40L3RgtC10YDRhNC10LnRgdCwIgorCisjOiBnaXRrOjExNjMyCittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4IEdpdGsiCisKKyM6IGdpdGs6MTE2NDEKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICLQntCx0YnQuNC1IgorCisjOiBnaXRrOjExNjQyCittc2dpZCAiQ29sb3JzIgorbXNnc3RyICLQptCy0LXRgtCwIgorCisjOiBnaXRrOjExNjQzCittc2dpZCAiRm9udHMiCittc2dzdHIgItCo0YDQuNGE0YLRiyIKKworIzogZ2l0azoxMTY5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGs6INCy0YvQsdC10YDQuNGC0LUg0YbQstC10YIg0LTQu9GPICVzIgorCisjOiBnaXRrOjEyMjA2Cittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICLQmiDRgdC+0LbQsNC70LXQvdC40Y4gZ2l0ayDQvdC1INC80L7QttC10YIg0YDQsNCx0L7RgtCw0YLRjCDRgSDRjdGC0L7QuSDQstC10YDRgdC40LkgVGNsL1RrLlxu0KLRgNC10LHRg9C10YLRgdGPINC60LDQuiDQvNC40L3QuNC80YPQvCBUY2wvVGsgOC40LiIKKworIzogZ2l0azoxMjQxNgorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIkdpdC3RgNC10L/QvtC30LjRgtCw0YDQuNC5INC90LUg0L3QsNC50LTQtdC9INCyINGC0LXQutGD0YnQtdC8INC60LDRgtCw0LvQvtCz0LUuIgorCisjOiBnaXRrOjEyNDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICLQndC10L7QtNC90L7Qt9C90LDRh9C90YvQuSDQsNGA0LPRg9C80LXQvdGCIMKrJXPCuzog0YHRg9GJ0LXRgdGC0LLRg9C10YIg0LrQsNC6INGA0LXQtNCw0LrRhtC40Y8g0Lgg0LrQsNC6INC40LzRjyDRhNCw0LnQu9CwIgorCisjOiBnaXRrOjEyNDc1Cittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C1INCw0YDQs9GD0LzQtdC90YLRiyDQtNC70Y8gZ2l0azoiCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9zdi5wbyBiL2dpdGstZ2l0L3BvL3N2LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMDZmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9zdi5wbwpAQCAtMCwwICsxLDE0MTMgQEAKKyMgU3dlZGlzaCB0cmFuc2xhdGlvbiBmb3IgZ2l0aworIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNSBQYXVsIE1hY2tlcnJhcworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIworIyBNaWthZWwgTWFnbnVzc29uIDxtaWthY2h1QGdtYWlsLmNvbT4sIDIwMDguCisjIFBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPiwgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMywgMjAxNS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHN2XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTEyLTA5IDA5OjQwKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTEyLTExIDA5OjQ2KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPlxuIgorIkxhbmd1YWdlLVRlYW06IFN3ZWRpc2ggPHRwLXN2QGxpc3Rvci50cC1zdi5zZT5cbiIKKyJMYW5ndWFnZTogc3ZcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKyJYLUdlbmVyYXRvcjogR3RyYW5zbGF0b3IgMi45MS42XG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJLdW5kZSBpbnRlIGjDpG10YSBsaXN0YSDDtnZlciBlaiBzYW1tYW5zbGFnbmEgZmlsZXI6IgorCisjOiBnaXRrOjIxMiBnaXRrOjIzODEKK21zZ2lkICJDb2xvciB3b3JkcyIKK21zZ3N0ciAiRsOkcmdhIG9yZCIKKworIzogZ2l0azoyMTcgZ2l0azoyMzgxIGdpdGs6ODIyMSBnaXRrOjgyNTQKK21zZ2lkICJNYXJrdXAgd29yZHMiCittc2dzdHIgIk3DpHJrIHVwcCBvcmQiCisKKyM6IGdpdGs6MzI0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJGZWwgdmlkIHRvbGtuaW5nIGF2IHJldmlzaW9uZXI6IgorCisjOiBnaXRrOjM4MAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgIkZlbCB2aWQga8O2cm5pbmcgYXYgLS1hcmdzY21kLWtvbW1hbmRvOiIKKworIzogZ2l0azozOTMKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyJJbmdhIGZpbGVyIHZhbGRlczogLS1tZXJnZSBhbmdhdnMgbWVuIGRldCBmaW5ucyBpbmdhIGZpbGVyIHNvbSBpbnRlIGhhciAiCisic2xhZ2l0cyBzYW1tYW4uIgorCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiSW5nYSBmaWxlciB2YWxkZXM6IC0tbWVyZ2UgYW5nYXZzIG1lbiBkZXQgZmlubnMgaW5nYSBmaWxlciBpbm9tICIKKyJmaWxiZWdyw6Ruc25pbmdlbi4iCisKKyM6IGdpdGs6NDE4IGdpdGs6NTY2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJGZWwgdmlkIGvDtnJuaW5nIGF2IGdpdCBsb2c6IgorCisjOiBnaXRrOjQzNiBnaXRrOjU4MgorbXNnaWQgIlJlYWRpbmciCittc2dzdHIgIkzDpHNlciIKKworIzogZ2l0azo0OTYgZ2l0azo0NTI2Cittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICJMw6RzZXIgaW5jaGVja25pbmdhci4uLiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOQorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIkluZ2EgaW5jaGVja25pbmdhciBtYXJrZXJhZGUiCisKKyM6IGdpdGs6MTQ0NSBnaXRrOjQwNDYgZ2l0azoxMjQ0NworbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAiS29tbWFuZG9yYWQiCisKKyM6IGdpdGs6MTUxMQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiS2FuIGludGUgdG9sa2EgdXRkYXRhIGZyw6VuIGdpdCBsb2c6IgorCisjOiBnaXRrOjE3NDAKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJJbmdlbiBpbmNoZWNrbmluZ3NpbmZvcm1hdGlvbiDDpHIgdGlsbGfDpG5nbGlnIgorCisjOiBnaXRrOjE5MDMgZ2l0azoxOTMyIGdpdGs6NDMxNiBnaXRrOjk2ODQgZ2l0azoxMTI1NiBnaXRrOjExNTM2Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBnaXRrOjE5MzQgZ2l0azo0MzE4IGdpdGs6OTE5NyBnaXRrOjkyNzYgZ2l0azo5NDA2IGdpdGs6OTQ1NSBnaXRrOjk2ODYKKyM6IGdpdGs6MTEyNTcgZ2l0azoxMTUzNworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQXZicnl0IgorCisjOiBnaXRrOjIwNjkKK21zZ2lkICImVXBkYXRlIgorbXNnc3RyICImVXBwZGF0ZXJhIgorCisjOiBnaXRrOjIwNzAKK21zZ2lkICImUmVsb2FkIgorbXNnc3RyICJMw6RzICZvbSIKKworIzogZ2l0azoyMDcxCittc2dpZCAiUmVyZWFkIHJlJmZlcmVuY2VzIgorbXNnc3RyICJMw6RzIG9tICZyZWZlcmVuc2VyIgorCisjOiBnaXRrOjIwNzIKK21zZ2lkICImTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICImVmlzYSByZWZlcmVuc2VyIgorCisjOiBnaXRrOjIwNzQKK21zZ2lkICJTdGFydCBnaXQgJmd1aSIKK21zZ3N0ciAiU3RhcnRhIGdpdCAmZ3VpIgorCisjOiBnaXRrOjIwNzYKK21zZ2lkICImUXVpdCIKK21zZ3N0ciAiJkF2c2x1dGEiCisKKyM6IGdpdGs6MjA2OAorbXNnaWQgIiZGaWxlIgorbXNnc3RyICImQXJraXYiCisKKyM6IGdpdGs6MjA4MAorbXNnaWQgIiZQcmVmZXJlbmNlcyIKK21zZ3N0ciAiJkluc3TDpGxsbmluZ2FyIgorCisjOiBnaXRrOjIwNzkKK21zZ2lkICImRWRpdCIKK21zZ3N0ciAiJlJlZGlnZXJhIgorCisjOiBnaXRrOjIwODQKK21zZ2lkICImTmV3IHZpZXcuLi4iCittc2dzdHIgIiZOeSB2eS4uLiIKKworIzogZ2l0azoyMDg1Cittc2dpZCAiJkVkaXQgdmlldy4uLiIKK21zZ3N0ciAiJsOEbmRyYSB2eS4uLiIKKworIzogZ2l0azoyMDg2Cittc2dpZCAiJkRlbGV0ZSB2aWV3IgorbXNnc3RyICImVGEgYm9ydCB2eSIKKworIzogZ2l0azoyMDg4Cittc2dpZCAiJkFsbCBmaWxlcyIKK21zZ3N0ciAiJkFsbGEgZmlsZXIiCisKKyM6IGdpdGs6MjA4MworbXNnaWQgIiZWaWV3IgorbXNnc3RyICImVmlzYSIKKworIzogZ2l0azoyMDkzIGdpdGs6MjEwMworbXNnaWQgIiZBYm91dCBnaXRrIgorbXNnc3RyICImT20gZ2l0ayIKKworIzogZ2l0azoyMDk0IGdpdGs6MjEwOAorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgIiZUYW5nZW50Ym9yZHNiaW5kbmluZ2FyIgorCisjOiBnaXRrOjIwOTIgZ2l0azoyMTA3Cittc2dpZCAiJkhlbHAiCittc2dzdHIgIiZIasOkbHAiCisKKyM6IGdpdGs6MjE4NSBnaXRrOjg2NTMKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMS1pZDoiCisKKyM6IGdpdGs6MjIyOQorbXNnaWQgIlJvdyIKK21zZ3N0ciAiUmFkIgorCisjOiBnaXRrOjIyNjcKK21zZ2lkICJGaW5kIgorbXNnc3RyICJTw7ZrIgorCisjOiBnaXRrOjIyOTUKK21zZ2lkICJjb21taXQiCittc2dzdHIgImluY2hlY2tuaW5nIgorCisjOiBnaXRrOjIyOTkgZ2l0azoyMzAxIGdpdGs6NDY4OCBnaXRrOjQ3MTEgZ2l0azo0NzM1IGdpdGs6Njc1NiBnaXRrOjY4MjgKKyM6IGdpdGs6NjkxMworbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICJzb20gaW5uZWjDpWxsZXI6IgorCisjOiBnaXRrOjIzMDIgZ2l0azozNTI3IGdpdGs6MzUzMiBnaXRrOjQ3NjQKK21zZ2lkICJ0b3VjaGluZyBwYXRoczoiCittc2dzdHIgInNvbSByw7ZyIHPDtmt2w6RnOiIKKworIzogZ2l0azoyMzAzIGdpdGs6NDc3OAorbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICJzb20gbMOkZ2dlci90aWxsIHRhciBib3J0IHN0csOkbmc6IgorCisjOiBnaXRrOjIzMDQgZ2l0azo0NzgwCittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICLDpG5kcmFyIHJhZGVyIHNvbSBtYXRjaGFyOiIKKworIzogZ2l0azoyMzEzIGdpdGs6MjMxNSBnaXRrOjQ3NjcKK21zZ2lkICJFeGFjdCIKK21zZ3N0ciAiRXhha3QiCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ4NTUgZ2l0azo2NzI0Cittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAiSWduVmVyc2FsZXIiCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ3MzcgZ2l0azo0ODUzIGdpdGs6NjcyMAorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiUmVnLnV0dHIuIgorCisjOiBnaXRrOjIzMTcgZ2l0azoyMzE4IGdpdGs6NDg3NSBnaXRrOjQ5MDUgZ2l0azo0OTEyIGdpdGs6Njg0OSBnaXRrOjY5MTcKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJBbGxhIGbDpGx0IgorCisjOiBnaXRrOjIzMTggZ2l0azo0ODcyIGdpdGs6NDkwNSBnaXRrOjY3ODcKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiUnVicmlrIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcyIGdpdGs6Njc4NyBnaXRrOjY5MTcgZ2l0azo3MzkwCittc2dpZCAiQ29tbWVudHMiCittc2dzdHIgIktvbW1lbnRhcmVyIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcyIGdpdGs6NDg3NyBnaXRrOjQ5MTIgZ2l0azo2Nzg3IGdpdGs6NzMyNSBnaXRrOjg4MzEKKyM6IGdpdGs6ODg0NgorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAiRsO2cmZhdHRhcmUiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzIgZ2l0azo2Nzg3IGdpdGs6NzMyNworbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAiSW5jaGVja2FyZSIKKworIzogZ2l0azoyMzUwCittc2dpZCAiU2VhcmNoIgorbXNnc3RyICJTw7ZrIgorCisjOiBnaXRrOjIzNTgKK21zZ2lkICJEaWZmIgorbXNnc3RyICJEaWZmIgorCisjOiBnaXRrOjIzNjAKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiR2FtbWFsIHZlcnNpb24iCisKKyM6IGdpdGs6MjM2MgorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICJOeSB2ZXJzaW9uIgorCisjOiBnaXRrOjIzNjQKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICJSYWRlciBzYW1tYW5oYW5nIgorCisjOiBnaXRrOjIzNzQKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICJJZ25vcmVyYSDDpG5kcmluZ2FyIGkgYmxhbmtzdGVnIgorCisjOiBnaXRrOjIzNzggZ2l0azoyMzgwIGdpdGs6Nzk2MCBnaXRrOjgyMDcKK21zZ2lkICJMaW5lIGRpZmYiCittc2dzdHIgIlJhZC1kaWZmIgorCisjOiBnaXRrOjI0NDUKK21zZ2lkICJQYXRjaCIKK21zZ3N0ciAiUGF0Y2giCisKKyM6IGdpdGs6MjQ0NworbXNnaWQgIlRyZWUiCittc2dzdHIgIlRyw6RkIgorCisjOiBnaXRrOjI2MTcgZ2l0azoyNjM4Cittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICJEaWZmIGRlbm5hIC0+IG1hcmtlcmFkIgorCisjOiBnaXRrOjI2MTggZ2l0azoyNjM5Cittc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgorbXNnc3RyICJEaWZmIG1hcmtlcmFkIC0+IGRlbm5hIgorCisjOiBnaXRrOjI2MTkgZ2l0azoyNjQwCittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiU2thcGEgcGF0Y2giCisKKyM6IGdpdGs6MjYyMCBnaXRrOjkyNTUKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICJTa2FwYSB0YWdnIgorCisjOiBnaXRrOjI2MjEKK21zZ2lkICJDb3B5IGNvbW1pdCBzdW1tYXJ5IgorbXNnc3RyICJLb3BpZXJhIGluY2hlY2tuaW5nc3NhbW1hbmZhdHRuaW5nIgorCisjOiBnaXRrOjI2MjIgZ2l0azo5Mzg2Cittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIlNrcml2IGluY2hlY2tuaW5nIHRpbGwgZmlsIgorCisjOiBnaXRrOjI2MjMgZ2l0azo5NDQzCittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgIlNrYXBhIG55IGdyZW4iCisKKyM6IGdpdGs6MjYyNAorbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJQbG9ja2EgZGVubmEgaW5jaGVja25pbmciCisKKyM6IGdpdGs6MjYyNQorbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIsOFdGVyc3TDpGxsIEhFQUQtZ3JlbmVuIGhpdCIKKworIzogZ2l0azoyNjI2Cittc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiTWFya2VyYSBkZW5uYSBpbmNoZWNrbmluZyIKKworIzogZ2l0azoyNjI3Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgIsOFdGVyZ8OlIHRpbGwgbWFya2VyaW5nIgorCisjOiBnaXRrOjI2MjgKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAiSGl0dGEgZWZ0ZXJmw7ZsamFyZSB0aWxsIGRlbm5hIG9jaCBtYXJrZXJhIgorCisjOiBnaXRrOjI2MjkKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiSsOkbWbDtnIgbWVkIG1hcmtlcmFkIGluY2hlY2tuaW5nIgorCisjOiBnaXRrOjI2MzAgZ2l0azoyNjQxCittc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCittc2dzdHIgIkRpZmYgZGVubmEgLT4gbWFya2VyYWQgaW5jaGVja25pbmciCisKKyM6IGdpdGs6MjYzMSBnaXRrOjI2NDIKK21zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZiBtYXJrZXJhZCBpbmNoZWNrbmluZyAtPiBkZW5uYSIKKworIzogZ2l0azoyNjMyCittc2dpZCAiUmV2ZXJ0IHRoaXMgY29tbWl0IgorbXNnc3RyICLDhW5ncmEgZGVubmEgaW5jaGVja25pbmciCisKKyM6IGdpdGs6MjY0OAorbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiQ2hlY2thIHV0IGRlbm5hIGdyZW4iCisKKyM6IGdpdGs6MjY0OQorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiVGEgYm9ydCBkZW5uYSBncmVuIgorCisjOiBnaXRrOjI2NTAKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICJLb3BpZXJhIG5hbW4gcMOlIGdyZW4iCisKKyM6IGdpdGs6MjY1NworbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiTWFya2VyYSDDpHZlbiBkZXR0YSIKKworIzogZ2l0azoyNjU4Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAiTWFya2VyYSBiYXJhIGRldHRhIgorCisjOiBnaXRrOjI2NTkKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICJFeHRlcm4gZGlmZiIKKworIzogZ2l0azoyNjYwCittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAiS2xhbmRyYSBmw7Zyw6RsZHJhaW5jaGVja25pbmciCisKKyM6IGdpdGs6MjY2MQorbXNnaWQgIkNvcHkgcGF0aCIKK21zZ3N0ciAiS29waWVyYSBzw7ZrdsOkZyIKKworIzogZ2l0azoyNjY4Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICJWaXNhIHVyc3BydW5nZXQgZsO2ciBkZW4gaMOkciByYWRlbiIKKworIzogZ2l0azoyNjY5Cittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICJLw7ZyIGdpdCBndWkgYmxhbWUgcMOlIGRlbiBow6RyIHJhZGVuIgorCisjOiBnaXRrOjMwMTMKK21zZ2lkICJBYm91dCBnaXRrIgorbXNnc3RyICJPbSBnaXRrIgorCisjOiBnaXRrOjMwMTUKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIiIKKyJcbiIKKyJHaXRrIC0gZW4gaW5jaGVja25pbmdzdmlzYXJlIGbDtnIgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIkFudsOkbmQgb2NoIHZpZGFyZWbDtnJtZWRsYSBlbmxpZ3QgdmlsbGtvcmVuIGkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCisKKyM6IGdpdGs6MzAyMyBnaXRrOjMwOTAgZ2l0azo5ODcyCittc2dpZCAiQ2xvc2UiCittc2dzdHIgIlN0w6RuZyIKKworIzogZ2l0azozMDQ0Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIlRhbmdlbnRib3Jkc2JpbmRuaW5nYXIgZsO2ciBHaXRrIgorCisjOiBnaXRrOjMwNDcKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIlRhbmdlbnRib3Jkc2JpbmRuaW5nYXIgZsO2ciBHaXRrOiIKKworIzogZ2l0azozMDQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVE+XHRcdFF1aXQiCittc2dzdHIgIjwlcy1RPlx0XHRBdnNsdXRhIgorCisjOiBnaXRrOjMwNTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgorbXNnc3RyICI8JXMtVz5cdFx0U3TDpG5nIGbDtm5zdGVyIgorCisjOiBnaXRrOjMwNTEKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxIb21lPlx0XHRHw6UgdGlsbCBmw7Zyc3RhIGluY2hlY2tuaW5nIgorCisjOiBnaXRrOjMwNTIKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kPlx0XHRHw6UgdGlsbCBzaXN0YSBpbmNoZWNrbmluZyIKKworIzogZ2l0azozMDUzCittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8VXBwPiwgcCwga1x0R8OlIGVuIGluY2hlY2tuaW5nIHVwcCIKKworIzogZ2l0azozMDU0Cittc2dpZCAiPERvd24+LCBuLCBqXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKK21zZ3N0ciAiPE5lZD4sIG4sIGpcdEfDpSBlbiBpbmNoZWNrbmluZyBuZWQiCisKKyM6IGdpdGs6MzA1NQorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxWw6Ruc3Rlcj4sIHosIGhcdEfDpSBiYWvDpXQgaSBoaXN0b3Jpa2VuIgorCisjOiBnaXRrOjMwNTYKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPEjDtmdlcj4sIHgsIGxcdEfDpSBmcmFtw6V0IGkgaGlzdG9yaWtlbiIKKworIzogZ2l0azozMDU3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjwlcy1uPlx0R8OlIHRpbGwgYWt0dWVsbCBpbmNoZWNrbmluZ3Mgbjp0ZSBmw7Zyw6RsZGVyIGkgaGlzdG9yaWVsaXN0YW4iCisKKyM6IGdpdGs6MzA1OAorbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx0R8OlIHVwcCBlbiBzaWRhIGkgaW5jaGVja25pbmdzbGlzdGFuIgorCisjOiBnaXRrOjMwNTkKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlRG93bj5cdEfDpSBuZWQgZW4gc2lkYSBpIGluY2hlY2tuaW5nc2xpc3RhbiIKKworIzogZ2l0azozMDYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdFJ1bGxhIHRpbGwgYsO2cmphbiBhdiBpbmNoZWNrbmluZ3NsaXN0YW4iCisKKyM6IGdpdGs6MzA2MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kPlx0UnVsbGEgdGlsbCBzbHV0ZXQgYXYgaW5jaGVja25pbmdzbGlzdGFuIgorCisjOiBnaXRrOjMwNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1VcHA+XHRSdWxsYSBpbmNoZWNrbmluZ3NsaXN0YW4gdXBwIGV0dCBzdGVnIgorCisjOiBnaXRrOjMwNjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtTmVkPlx0UnVsbGEgaW5jaGVja25pbmdzbGlzdGFuIG5lZCBldHQgc3RlZyIKKworIzogZ2l0azozMDY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdFJ1bGxhIGluY2hlY2tuaW5nc2xpc3RhbiB1cHAgZW4gc2lkYSIKKworIzogZ2l0azozMDY1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlRG93bj5cdFJ1bGxhIGluY2hlY2tuaW5nc2xpc3RhbiBuZWQgZW4gc2lkYSIKKworIzogZ2l0azozMDY2Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2tpZnQtVXBwPlx0U8O2ayBiYWvDpXQgKHVwcMOldCwgc2VuYXJlIGluY2hlY2tuaW5nYXIpIgorCisjOiBnaXRrOjMwNjcKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFNraWZ0LU5lZD5cdFPDtmsgZnJhbcOldCAobmVkw6V0LCB0aWRpZ2FyZSBpbmNoZWNrbmluZ2FyKSIKKworIzogZ2l0azozMDY4Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCBlbiBzaWRhIgorCisjOiBnaXRrOjMwNjkKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJha3N0ZWc+XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCBlbiBzaWRhIgorCisjOiBnaXRrOjMwNzAKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPEJsYW5rc3RlZz5cdFJ1bGxhIGRpZmZ2aXNuaW5nZW4gbmVkIGVuIHNpZGEiCisKKyM6IGdpdGs6MzA3MQorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCAxOCByYWRlciIKKworIzogZ2l0azozMDcyCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0UnVsbGEgZGlmZnZpc25pbmdlbiBuZWQgMTggcmFkZXIiCisKKyM6IGdpdGs6MzA3MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx0U8O2ayIKKworIzogZ2l0azozMDc0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdEfDpSB0aWxsIG7DpHN0YSBzw7ZrdHLDpGZmIgorCisjOiBnaXRrOjMwNzUKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8UmV0dXJuPlx0XHRHw6UgdGlsbCBuw6RzdGEgc8O2a3Ryw6RmZiIKKworIzogZ2l0azozMDc2Cittc2dpZCAiZ1x0XHRHbyB0byBjb21taXQiCittc2dzdHIgImdcdFx0R8OlIHRpbGwgaW5jaGVja25pbmciCisKKyM6IGdpdGs6MzA3NworbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx0Rm9rdXNlcmEgc8O2a3J1dGFuIgorCisjOiBnaXRrOjMwNzgKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx0R8OlIHRpbGwgZsO2cmVnw6VlbmRlIHPDtmt0csOkZmYiCisKKyM6IGdpdGs6MzA3OQorbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx0UnVsbGEgZGlmZnZpc25pbmdlbiB0aWxsIG7DpHN0YSBmaWwiCisKKyM6IGdpdGs6MzA4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdEfDpSB0aWxsIG7DpHN0YSBzw7ZrdHLDpGZmIGkgZGlmZnZpc25pbmdlbiIKKworIzogZ2l0azozMDgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdEfDpSB0aWxsIGbDtnJlZ8OlZW5kZSBzw7ZrdHLDpGZmIGkgZGlmZnZpc25pbmdlbiIKKworIzogZ2l0azozMDgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLU51bSs+XHTDlmthIHRlY2tlbnN0b3JsZWsiCisKKyM6IGdpdGs6MzA4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtcGx1cz5cdMOWa2EgdGVja2Vuc3RvcmxlayIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLU51bS0+XHRNaW5za2EgdGVja2Vuc3RvcmxlayIKKworIzogZ2l0azozMDg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWludXM+XHRNaW5za2EgdGVja2Vuc3RvcmxlayIKKworIzogZ2l0azozMDg2Cittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx0VXBwZGF0ZXJhIgorCisjOiBnaXRrOjM1NTEgZ2l0azozNTYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgIkZlbCB2aWQgc2thcGFuZGUgYXYgdGVtcG9yw6RyIGthdGFsb2cgJXM6IgorCisjOiBnaXRrOjM1NzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAiRmVsIHZpZCBow6RtdG5pbmcgYXYgIFwiJXNcIiBmcsOlbiAlczoiCisKKyM6IGdpdGs6MzYzNgorbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAia29tbWFuZG8gbWlzc2x5Y2thZGVzOiIKKworIzogZ2l0azozNzg1Cittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgIkluY2hlY2tuaW5nIHNha25hcyIKKworIzogZ2l0azozNzk5Cittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiBrb21tYW5kbyBtaXNzbHlja2FkZXM6IgorCisjOiBnaXRrOjM4MzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpHNhIHNhbW1hbnNsYWduaW5nc2h1dnVkOiAlcyIKKworIzogZ2l0azozODM4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkZlbCB2aWQgbMOkc25pbmcgYXYgaW5kZXg6ICVzIgorCisjOiBnaXRrOjM4NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIHN0YXJ0YSBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM4NjYgZ2l0azo2NzU1Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJTw7ZrZXIiCisKKyM6IGdpdGs6Mzg5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiRmVsIHZpZCBrw7ZybmluZyBhdiBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM5MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICJSYWRlbiBrb21tZXIgZnLDpW4gaW5jaGVja25pbmdlbiAlcywgc29tIGludGUgZmlubnMgaSBkZW5uYSB2eSIKKworIzogZ2l0azozOTQwCittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAiRXh0ZXJudCBkaWZmLXZlcmt0eWcgbWlzc2x5Y2thZGVzOiIKKworIzogZ2l0azo0MDQ0Cittc2dpZCAiQWxsIGZpbGVzIgorbXNnc3RyICJBbGxhIGZpbGVyIgorCisjOiBnaXRrOjQwNjgKK21zZ2lkICJWaWV3IgorbXNnc3RyICJWaXNhIgorCisjOiBnaXRrOjQwNzEKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRGVmaW5pdGlvbiBhdiBHaXRrLXZ5IgorCisjOiBnaXRrOjQwNzUKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIlNwYXJhIGRlbm5hIHZ5IgorCisjOiBnaXRrOjQwNzYKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJSZWZlcmVuc2VyIChibGFua3N0ZWdzYXZkZWxhZCBsaXN0YSk6IgorCisjOiBnaXRrOjQwNzcKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJHcmVuYXIgJiB0YWdnYXI6IgorCisjOiBnaXRrOjQwNzgKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAiQWxsYSByZWZlcmVuc2VyIgorCisjOiBnaXRrOjQwNzkKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAiQWxsYSAobG9rYWxhKSBncmVuYXIiCisKKyM6IGdpdGs6NDA4MAorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJBbGxhIHRhZ2dhciIKKworIzogZ2l0azo0MDgxCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiQWxsYSBmasOkcnJzcMOlcmFuZGUgZ3JlbmFyIgorCisjOiBnaXRrOjQwODIKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICJJbmNoZWNrbmluZ3NpbmZvIChyZWd1bGrDpHJhIHV0dHJ5Y2spOiIKKworIzogZ2l0azo0MDgzCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiRsO2cmZhdHRhcmU6IgorCisjOiBnaXRrOjQwODQKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJJbmNoZWNrYXJlOiIKKworIzogZ2l0azo0MDg1Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJJbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKKworIzogZ2l0azo0MDg2Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIk1vdHN2YXJhciBhbGxhIGtyaXRlcmllciBmw7ZyIGluY2hlY2tuaW5nc2luZm8iCisKKyM6IGdpdGs6NDA4NworbXNnaWQgIk1hdGNoZXMgbm8gQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIk1vdHN2YXJhciBpbmdhIGtyaXRlcmllciBmw7ZyIGluY2hlY2tuaW5nc2luZm8iCisKKyM6IGdpdGs6NDA4OAorbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICLDhG5kcmluZ2FyIGF2IGZpbGVyOiIKKworIzogZ2l0azo0MDg5Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJGYXN0IHN0csOkbmciCisKKyM6IGdpdGs6NDA5MAorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiUmVndWxqw6RydCB1dHRyeWNrIgorCisjOiBnaXRrOjQwOTEKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAiU8O2a3N0csOkbmc6IgorCisjOiBnaXRrOjQwOTIKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyJJbmNoZWNraW5nc2RhdHVtIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCisKKyM6IGdpdGs6NDA5MworbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAiRnLDpW46IgorCisjOiBnaXRrOjQwOTQKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIlRpbGw6IgorCisjOiBnaXRrOjQwOTUKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAiQmVncsOkbnNhIG9jaC9lbGxlciBob3BwYSDDtnZlciBldHQgYW50YWwgcmV2aXNpb25lciAocG9zaXRpdnQgaGVsdGFsKToiCisKKyM6IGdpdGs6NDA5NgorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiQW50YWwgYXR0IHZpc2E6IgorCisjOiBnaXRrOjQwOTcKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIkFudGFsIGF0dCBob3BwYSDDtnZlcjoiCisKKyM6IGdpdGs6NDA5OAorbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIkRpdmVyc2UgYWx0ZXJuYXRpdjoiCisKKyM6IGdpdGs6NDA5OQorbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKK21zZ3N0ciAiU3RyaWt0IGRhdHVtc29ydGVyaW5nIgorCisjOiBnaXRrOjQxMDAKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAiTWFya2VyYSBzaWRvZ3JlbmFyIgorCisjOiBnaXRrOjQxMDEKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgIkJlZ3LDpG5zYSB0aWxsIGbDtnJzdGEgZsO2csOkbGRlciIKKworIzogZ2l0azo0MTAyCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIkVua2VsIGhpc3RvcmlrIgorCisjOiBnaXRrOjQxMDMKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiWXR0ZXJsaWdhcmUgYXJndW1lbnQgdGlsbCBnaXQgbG9nOiIKKworIzogZ2l0azo0MTA0Cittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIkFuZ2UgZmlsZXIgb2NoIGthdGFsb2dlciBhdHQgdGEgbWVkLCBlbiBwZXIgcmFkOiIKKworIzogZ2l0azo0MTA1Cittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIktvbW1hbmRvIGbDtnIgYXR0IGdlbmVyZXJhIGZsZXIgaW5jaGVja25pbmdhciBhdHQgdGEgbWVkOiIKKworIzogZ2l0azo0MjI5Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrOiByZWRpZ2VyYSB2eSIKKworIzogZ2l0azo0MjM3Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIiAtIGtyaXRlcmllciBmw7ZyIHZhbCBhdiByZXZpc2lvbmVyIgorCisjOiBnaXRrOjQyNDIKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIk5hbW4gcMOlIHZ5IgorCisjOiBnaXRrOjQzMTcKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICJBbnbDpG5kIChGNSkiCisKKyM6IGdpdGs6NDM1NQorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRmVsIGkgYXJndW1lbnQgZsO2ciB2YWwgYXYgaW5jaGVja25pbmdhcjoiCisKKyM6IGdpdGs6NDQxMCBnaXRrOjQ0NjMgZ2l0azo0OTI1IGdpdGs6NDkzOSBnaXRrOjYyMDkgZ2l0azoxMjM4OCBnaXRrOjEyMzg5Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAiSW5nZXQiCisKKyM6IGdpdGs6NTAyMiBnaXRrOjUwMjcKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJBdmtvbWxpbmciCisKKyM6IGdpdGs6NTAyMworbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICJJbnRlIGF2a29tbGluZyIKKworIzogZ2l0azo1MDMwIGdpdGs6NTAzNQorbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJGw7ZyZmFkZXIiCisKKyM6IGdpdGs6NTAzMQorbXNnaWQgIk5vdCBhbmNlc3RvciIKK21zZ3N0ciAiSW50ZSBmw7ZyZmFkZXIiCisKKyM6IGdpdGs6NTMyNQorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAiTG9rYWxhIMOkbmRyaW5nYXIgc3BhcmFkZSBpIGluZGV4ZXQgbWVuIGludGUgaW5jaGVja2FkZSIKKworIzogZ2l0azo1MzYxCittc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCittc2dzdHIgIkxva2FsYSDDpG5kcmluZ2FyLCBlaiBzcGFyYWRlIGkgaW5kZXhldCIKKworIzogZ2l0azo3MTM1Cittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAibWVkIG3DpW5nYSBmbGVyYSIKKworIzogZ2l0azo3MTM4Cittc2dpZCAibWFueSIKK21zZ3N0ciAibcOlbmdhIgorCisjOiBnaXRrOjczMjkKK21zZ2lkICJUYWdzOiIKK21zZ3N0ciAiVGFnZ2FyOiIKKworIzogZ2l0azo3MzQ2IGdpdGs6NzM1MiBnaXRrOjg4MjYKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgIkbDtnLDpGxkZXIiCisKKyM6IGdpdGs6NzM1NworbXNnaWQgIkNoaWxkIgorbXNnc3RyICJCYXJuIgorCisjOiBnaXRrOjczNjYKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIkdyZW4iCisKKyM6IGdpdGs6NzM2OQorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgIkbDtmxqZXIiCisKKyM6IGdpdGs6NzM3MgorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICJGw7ZyZWfDpXIiCisKKyM6IGdpdGs6Nzk2NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgorbXNnc3RyICJGZWwgdmlkIGjDpG10bmluZyBhdiBkaWZmOiAlcyIKKworIzogZ2l0azo4NjUxCittc2dpZCAiR290bzoiCittc2dzdHIgIkfDpSB0aWxsOiIKKworIzogZ2l0azo4NjcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIkbDtnJrb3J0YXQgU0hBMS1pZCAlcyDDpHIgdHZldHlkaWd0IgorCisjOiBnaXRrOjg2NzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIlJldmlzaW9uZW4gJXMgw6RyIGludGUga8OkbmQiCisKKyM6IGdpdGs6ODY4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJTSEEtaWQ6dCAlcyDDpHIgaW50ZSBrw6RudCIKKworIzogZ2l0azo4NjkxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgIlJldmlzaW9uZW4gJXMgZmlubnMgaW50ZSBpIGRlbiBudXZhcmFuZGUgdnluIgorCisjOiBnaXRrOjg4MzMgZ2l0azo4ODQ4Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAiRGF0dW0iCisKKyM6IGdpdGs6ODgzNgorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJCYXJuIgorCisjOiBnaXRrOjg4OTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwgZ3JlbmVuICVzIGhpdCIKKworIzogZ2l0azo4OTAxCittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgIkZyw6Vua29wcGxhZCBoZWFkOiBrYW4gaW50ZSDDpXRlcnN0w6RsbGEiCisKKyM6IGdpdGs6OTAwNiBnaXRrOjkwMTIKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICJIb3BwYXIgw7Z2ZXIgc2FtbWFuc2xhZ25pbmdzaW5jaGVja25pbmcgIgorCisjOiBnaXRrOjkwMjEgZ2l0azo5MDI2Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICJGZWwgdmlkIGjDpG10bmluZyBhdiBwYXRjaC1pZCBmw7ZyICIKKworIzogZ2l0azo5MDIyIGdpdGs6OTAyNworbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIHN0YW5uYXJcbiIKKworIzogZ2l0azo5MDMyIGdpdGs6OTAzNSBnaXRrOjkwNDMgZ2l0azo5MDU3IGdpdGs6OTA2NgorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIkluY2hlY2tuaW5nICIKKworIzogZ2l0azo5MDM2Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgw6RyIHNhbW1hIHBhdGNoIHNvbVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0NAorbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBza2lsamVyIHNpZyBmcsOlblxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0NgorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJTa2lsbG5hZCBtZWxsYW4gaW5jaGVja25pbmdhcjpcbiIKKyJcbiIKKworIzogZ2l0azo5MDU4IGdpdGs6OTA2NworIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgaGFyICVzIGJhcm4gLSBzdGFubmFyXG4iCisKKyM6IGdpdGs6OTA4NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgorbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiBpbmNoZWNrbmluZyB0aWxsIGZpbDogJXMiCisKKyM6IGdpdGs6OTA5MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIkZlbCB2aWQgasOkbWbDtnJlbHNlIGF2IGluY2hlY2tuaW5nYXI6ICVzIgorCisjOiBnaXRrOjkxMzgKK21zZ2lkICJUb3AiCittc2dzdHIgIlRvcHAiCisKKyM6IGdpdGs6OTEzOQorbXNnaWQgIkZyb20iCittc2dzdHIgIkZyw6VuIgorCisjOiBnaXRrOjkxNDQKK21zZ2lkICJUbyIKK21zZ3N0ciAiVGlsbCIKKworIzogZ2l0azo5MTY4Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkdlbmVyZXJhIHBhdGNoIgorCisjOiBnaXRrOjkxNzAKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiRnLDpW46IgorCisjOiBnaXRrOjkxNzkKK21zZ2lkICJUbzoiCittc2dzdHIgIlRpbGw6IgorCisjOiBnaXRrOjkxODgKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICJWw6RuZCIKKworIzogZ2l0azo5MTkwIGdpdGs6OTQwMAorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiVXRkYXRhZmlsOiIKKworIzogZ2l0azo5MTk2Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlbmVyZXJhIgorCisjOiBnaXRrOjkyMzQKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgIkZlbCB2aWQgZ2VuZXJlcmluZyBhdiBwYXRjaDoiCisKKyM6IGdpdGs6OTI1NyBnaXRrOjkzODggZ2l0azo5NDQ1Cittc2dpZCAiSUQ6IgorbXNnc3RyICJJZDoiCisKKyM6IGdpdGs6OTI2NgorbXNnaWQgIlRhZyBuYW1lOiIKK21zZ3N0ciAiVGFnZ25hbW46IgorCisjOiBnaXRrOjkyNjkKK21zZ2lkICJUYWcgbWVzc2FnZSBpcyBvcHRpb25hbCIKK21zZ3N0ciAiVGFnZ21lZGRlbGFuZGV0IMOkciB2YWxmcml0dCIKKworIzogZ2l0azo5MjcxCittc2dpZCAiVGFnIG1lc3NhZ2U6IgorbXNnc3RyICJUYWdnbWVkZGVsYW5kZToiCisKKyM6IGdpdGs6OTI3NSBnaXRrOjk0NTQKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIlNrYXBhIgorCisjOiBnaXRrOjkyOTMKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIkluZ2V0IHRhZ2duYW1uIGFuZ2F2cyIKKworIzogZ2l0azo5Mjk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiVGFnZ2VuIFwiJXNcIiBmaW5ucyByZWRhbiIKKworIzogZ2l0azo5MzA3Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRmVsIHZpZCBza2FwYW5kZSBhdiB0YWdnOiIKKworIzogZ2l0azo5Mzk3Cittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIktvbW1hbmRvOiIKKworIzogZ2l0azo5NDA1Cittc2dpZCAiV3JpdGUiCittc2dzdHIgIlNrcml2IgorCisjOiBnaXRrOjk0MjMKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCittc2dzdHIgIkZlbCB2aWQgc2tyaXZuaW5nIGF2IGluY2hlY2tuaW5nOiIKKworIzogZ2l0azo5NDUwCittc2dpZCAiTmFtZToiCittc2dzdHIgIk5hbW46IgorCisjOiBnaXRrOjk0NzMKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJBbmdlIGV0dCBuYW1uIGbDtnIgZGVuIG55YSBncmVuZW4iCisKKyM6IGdpdGs6OTQ3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICJHcmVuZW4gXCIlc1wiIGZpbm5zIHJlZGFuLiBTa3JpdmEgw7Z2ZXI/IgorCisjOiBnaXRrOjk1NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiIgorIkluY2hlY2tuaW5nZW4gJXMgZmlubnMgcmVkYW4gcMOlIGdyZW5lbiAlcyAtLSBza2FsbCBkZW4gdmVya2xpZ2VuIGFwcGxpY2VyYXMgIgorInDDpSBueXR0PyIKKworIzogZ2l0azo5NTUwCittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIlBsb2NrYXIiCisKKyM6IGdpdGs6OTU1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKKyJQbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJDaGVycnktcGljayBtaXNzbHlja2FkZXMgcMOlIGdydW5kIGF2IGxva2FsYSDDpG5kcmluZ2FyIGkgZmlsZW4gXCIlc1wiLlxuIgorIkNoZWNrYSBpbiwgw6V0ZXJzdMOkbGwgZWxsZXIgc3BhcmEgdW5kYW4gKHN0YXNoKSBkaW5hIMOkbmRyaW5nYXIgb2NoIGbDtnJzw7ZrICIKKyJpZ2VuLiIKKworIzogZ2l0azo5NTY1Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiQ2hlcnJ5LXBpY2sgbWlzc2x5Y2thZGVzIHDDpSBncnVuZCBhdiBlbiBzYW1tYW5zbGFnbmluZ3Nrb25mbGlrdC5cbiIKKyJWaWxsIGR1IGvDtnJhIGdpdCBjaXRvb2wgZsO2ciBhdHQgbMO2c2EgZGVuPyIKKworIzogZ2l0azo5NTgxIGdpdGs6OTYzOQorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJJbmdhIMOkbmRyaW5nYXIgaW5jaGVja2FkZSIKKworIzogZ2l0azo5NjA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIG5vdCBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJldmVydCBpdD8iCittc2dzdHIgIkluY2hlY2tuaW5nZW4gJXMgZmlubnMgaW50ZSBww6UgZ3JlbmVuICVzIC0tIHZpbGwgZHUgdmVya2xpZ2VuIMOlbmdyYT8iCisKKyM6IGdpdGs6OTYxMworbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAiw4VuZ3JhciIKKworIzogZ2l0azo5NjIxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKKyJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJNaXNzbHlja2FkZXMgbWVkIGF0dCDDpW5ncmEgcMOlIGdydW5kIGF2IGxva2FsYSDDpG5kcmluZ2FyIGkgZsO2bGphbmRlIGZpbGVyOiVzLiAiCisiQ2hlY2thIGluLCDDpXRlcnN0w6RsbCBlbGxlciBzcGFyYSB1bmRhbiAoc3Rhc2gpIGRpbmEgw6RuZHJpbmdhciBvY2ggZsO2cnPDtmsgIgorImlnZW4uIgorCisjOiBnaXRrOjk2MjUKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIiBEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIk1pc3NseWNrYWRlcyBtZWQgYXR0IMOlbmdyYSBww6UgZ3J1bmQgYXYgZW4gc2FtbWFuc2xhZ25pbmdza29uZmxpa3QuXG4iCisiIFZpbGwgZHUga8O2cmEgZ2l0IGNpdG9vbCBmw7ZyIGF0dCBsw7ZzYSBkZW4/IgorCisjOiBnaXRrOjk2NjgKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJCZWtyw6RmdGEgw6V0ZXJzdMOkbGxuaW5nIgorCisjOiBnaXRrOjk2NzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgorbXNnc3RyICLDhXRlcnN0w6RsbGEgZ3JlbmVuICVzIHRpbGwgJXM/IgorCisjOiBnaXRrOjk2NzIKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiVHlwIGF2IMOldGVyc3TDpGxsbmluZzoiCisKKyM6IGdpdGs6OTY3NQorbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICJNanVrOiBSw7ZyIGludGUgdXRjaGVja25pbmcgb2NoIGluZGV4IgorCisjOiBnaXRrOjk2NzgKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgIkJsYW5kYWQ6IFLDtnIgaW50ZSB1dGNoZWNrbmluZywgw6V0ZXJzdMOkbGwgaW5kZXgiCisKKyM6IGdpdGs6OTY4MQorbXNnaWQgIiIKKyJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCisiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorbXNnc3RyICIiCisiSMOlcmQ6IMOFdGVyc3TDpGxsIHV0Y2hlY2tuaW5nIG9jaCBpbmRleFxuIgorIihmw7Zya2FzdGFyIEFMTEEgbG9rYWxhIMOkbmRyaW5nYXIpIgorCisjOiBnaXRrOjk2OTgKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgIsOFdGVyc3TDpGxsZXIiCisKKyM6IGdpdGs6OTc1OAorbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAiQ2hlY2thciB1dCIKKworIzogZ2l0azo5ODExCittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKK21zZ3N0ciAiS2FuIGludGUgdGEgYm9ydCBkZW4ganVzdCBudSB1dGNoZWNrYWRlIGdyZW5lbiIKKworIzogZ2l0azo5ODE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJJbmNoZWNrbmluZ2FybmEgcMOlIGdyZW5lbiAlcyBleGlzdGVyYXIgaW50ZSBww6UgbsOlZ29uIGFubmFuIGdyZW4uXG4iCisiVmlsbCBkdSB2ZXJrbGlnZW4gdGEgYm9ydCBncmVuZW4gJXM/IgorCisjOiBnaXRrOjk4NDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCittc2dzdHIgIlRhZ2dhciBvY2ggaHV2dWRlbjogJXMiCisKKyM6IGdpdGs6OTg2NQorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdGVyIgorCisjOiBnaXRrOjEwMTYxCittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisiRmVsIHZpZCBsw6RzbmluZyBhdiBpbmZvcm1hdGlvbiBvbSBpbmNoZWNrbmluZ3N0b3BvbG9naTsgaW5mb3JtYXRpb24gb20gIgorImdyZW5hciBvY2ggZsO2cmVnw6VlbmRlL3NlbmFyZSB0YWdnYXIga29tbWVyIGludGUgdmFyYSBrb21wbGV0dC4iCisKKyM6IGdpdGs6MTExMzgKK21zZ2lkICJUYWciCittc2dzdHIgIlRhZ2ciCisKKyM6IGdpdGs6MTExNDIKK21zZ2lkICJJZCIKK21zZ3N0ciAiSWQiCisKKyM6IGdpdGs6MTEyMjUKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAiVGVja2Vuc25pdHRzdsOkbGphcmUgZsO2ciBHaXRrIgorCisjOiBnaXRrOjExMjQyCittc2dpZCAiQiIKK21zZ3N0ciAiRiIKKworIzogZ2l0azoxMTI0NQorbXNnaWQgIkkiCittc2dzdHIgIksiCisKKyM6IGdpdGs6MTEzNjMKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBpbmNoZWNrbmluZ3NsaXN0dnkiCisKKyM6IGdpdGs6MTEzNjYKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgIk1heGltYWwgZ3JhZmJyZWRkIChyYWRlcikiCisKKyM6IGdpdGs6MTEzNzAKKyMsIG5vLXRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICJNYXhpbWFsIGdyYWZicmVkZCAoJSBhdiBydXRhKSIKKworIzogZ2l0azoxMTM3MworbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiVmlzYSBsb2thbGEgw6RuZHJpbmdhciIKKworIzogZ2l0azoxMTM3NgorbXNnaWQgIkF1dG8tc2VsZWN0IFNIQTEgKGxlbmd0aCkiCittc2dzdHIgIlbDpGxqIFNIQTEgKGzDpG5nZCkgYXV0b21hdGlza3QiCisKKyM6IGdpdGs6MTEzODAKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICJEw7ZsaiBmasOkcnItcmVmZXJlbnNlciIKKworIzogZ2l0azoxMTM4NAorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJBbHRlcm5hdGl2IGbDtnIgZGlmZnZ5IgorCisjOiBnaXRrOjExMzg2Cittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIkJsYW5rc3RlZyBmw7ZyIHRhYnVsYXRvcnRlY2tlbiIKKworIzogZ2l0azoxMTM4OQorbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCittc2dzdHIgIlZpc2EgbsOkcmxpZ2dhbmRlIHRhZ2dhci9odXZ1ZGVuIgorCisjOiBnaXRrOjExMzkyCittc2dpZCAiTWF4aW11bSAjIHRhZ3MvaGVhZHMgdG8gc2hvdyIKK21zZ3N0ciAiTWF4aW1hbHQgYW50YWwgdGFnZ2FyL2h1dnVkZW4gYXR0IHZpc2EiCisKKyM6IGdpdGs6MTEzOTUKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIkJlZ3LDpG5zYSBkaWZmIHRpbGwgbGlzdGFkZSBzw7ZrdsOkZ2FyIgorCisjOiBnaXRrOjExMzk4Cittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIlN0w7ZkIGbDtnIgZmlsc3BlY2lmaWthIHRlY2tlbmtvZG5pbmdhciIKKworIzogZ2l0azoxMTQwNCBnaXRrOjExNTUxCittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICJFeHRlcm50IGRpZmYtdmVya3R5ZyIKKworIzogZ2l0azoxMTQwNQorbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAiVsOkbGouLi4iCisKKyM6IGdpdGs6MTE0MTAKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIkFsbG3DpG5uYSBpbnN0w6RsbG5pbmdhciIKKworIzogZ2l0azoxMTQxMworbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAiQW52w6RuZCB0ZW1hIHDDpSBmw7Zuc3RlcmVsZW1lbnQiCisKKyM6IGdpdGs6MTE0MTUKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIow6RuZHJpbmdlbiBrcsOkdmVyIG9tc3RhcnQpIgorCisjOiBnaXRrOjExNDE3Cittc2dpZCAiKGN1cnJlbnRseSB1bmF2YWlsYWJsZSkiCittc2dzdHIgIihmw7ZyIG7DpHJ2YXJhbmRlIGludGUgdGlsbGfDpG5nbGlndCkiCisKKyM6IGdpdGs6MTE0MjgKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiRsOkcmdlcjogdHJ5Y2sgZsO2ciBhdHQgdsOkbGphIgorCisjOiBnaXRrOjExNDMxCittc2dpZCAiSW50ZXJmYWNlIgorbXNnc3RyICJHcsOkbnNzbml0dCIKKworIzogZ2l0azoxMTQzMgorbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAiZ3LDpG5zc25pdHQiCisKKyM6IGdpdGs6MTE0MzUKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICJCYWtncnVuZCIKKworIzogZ2l0azoxMTQzNiBnaXRrOjExNDY2Cittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAiYmFrZ3J1bmQiCisKKyM6IGdpdGs6MTE0MzkKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICJGw7ZyZ3J1bmQiCisKKyM6IGdpdGs6MTE0NDAKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICJmw7ZyZ3J1bmQiCisKKyM6IGdpdGs6MTE0NDMKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIkRpZmY6IGdhbWxhIHJhZGVyIgorCisjOiBnaXRrOjExNDQ0Cittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgImRpZmYgZ2FtbGEgcmFkZXIiCisKKyM6IGdpdGs6MTE0NDgKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmY6IG55YSByYWRlciIKKworIzogZ2l0azoxMTQ0OQorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJkaWZmIG55YSByYWRlciIKKworIzogZ2l0azoxMTQ1MworbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICJEaWZmOiBkZWxodXZ1ZCIKKworIzogZ2l0azoxMTQ1NQorbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgImRpZmYgZGVsaHV2dWQiCisKKyM6IGdpdGs6MTE0NTkKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAiTWFya2VyYWQgcmFkIGJha2dydW5kIgorCisjOiBnaXRrOjExNDYxCittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAibWFya2VyYWQgcmFkIGJha2dydW5kIgorCisjOiBnaXRrOjExNDY1Cittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICJNYXJrZXJhZCBiYWtncnVuZCIKKworIzogZ2l0azoxMTQ3NAorbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIlRlY2tlbnNuaXR0OiB0cnljayBmw7ZyIGF0dCB2w6RsamEiCisKKyM6IGdpdGs6MTE0NzYKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIkh1dnVkdGVja2Vuc25pdHQiCisKKyM6IGdpdGs6MTE0NzcKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAiVGVja2Vuc25pdHQgZsO2ciBkaWZmdmlzbmluZyIKKworIzogZ2l0azoxMTQ3OAorbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIlRlY2tlbnNuaXR0IGbDtnIgYW52w6RuZGFyZ3LDpG5zc25pdHQiCisKKyM6IGdpdGs6MTE1MDAKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJJbnN0w6RsbG5pbmdhciBmw7ZyIEdpdGsiCisKKyM6IGdpdGs6MTE1MDkKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICJBbGxtw6RudCIKKworIzogZ2l0azoxMTUxMAorbXNnaWQgIkNvbG9ycyIKK21zZ3N0ciAiRsOkcmdlciIKKworIzogZ2l0azoxMTUxMQorbXNnaWQgIkZvbnRzIgorbXNnc3RyICJUZWNrZW5zbml0dCIKKworIzogZ2l0azoxMTU2MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGs6IHbDpGxqIGbDpHJnIGbDtnIgJXMiCisKKyM6IGdpdGs6MTIwNzQKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyJHaXRrIGthbiB0eXbDpHJyIGludGUga8O2cmEgbWVkIGRlbm5hIHZlcnNpb24gYXYgVGNsL1RrLlxuIgorIiBHaXRrIGtyw6R2ZXIgw6V0bWluc3RvbmUgVGNsL1RrIDguNC4iCisKKyM6IGdpdGs6MTIyODQKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICJIaXR0YXIgaW5nZXQgZ2l0LWFya2l2IGjDpHIuIgorCisjOiBnaXRrOjEyMzMxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICJUdmV0eWRpZ3QgYXJndW1lbnQgXCIlc1wiOiBiw6VkZSByZXZpc2lvbiBvY2ggZmlsbmFtbiIKKworIzogZ2l0azoxMjM0MworbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIkZlbGFrdGlnYSBhcmd1bWVudCB0aWxsIGdpdGs6IgorCisjfiBtc2dpZCAibWMiCisjfiBtc2dzdHIgIm1jIgorCisjfiBtc2dpZCAibmV4dCIKKyN+IG1zZ3N0ciAibsOkc3RhIgorCisjfiBtc2dpZCAicHJldiIKKyN+IG1zZ3N0ciAiZsO2cmVnIgorCisjfiBtc2dpZCAiQ0RhdGUiCisjfiBtc2dzdHIgIlNrYXBhdCBkYXR1bSIKKworI34gbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCisjfiBtc2dzdHIgIkhpdHRhciBpbnRlIGdpdC1rYXRhbG9nZW4gXCIlc1wiLiIKKworI34gbXNnaWQgIlNIQTEgSUQ6ICIKKyN+IG1zZ3N0ciAiU0hBMS1pZDogIgorCisjfiBtc2dpZCAiLSBzdG9wcGluZ1xuIgorI34gbXNnc3RyICItIHN0YW5uYXJcbiIKKworI34gbXNnaWQgIlRhZy9IZWFkICVzIGlzIG5vdCBrbm93biIKKyN+IG1zZ3N0ciAiVGFnZy9odXZ1ZCAlcyDDpHIgb2vDpG50IgorCisjfiBtc2dpZCAiL1x0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQsIG9yIHJlZG8gZmluZCIKKyN+IG1zZ3N0ciAiL1x0XHRHw6UgdGlsbCBuw6RzdGEgc8O2a3Ryw6RmZiwgZWxsZXIgc8O2ayBww6Ugbnl0dCIKKworI34gbXNnaWQgIk5hbWUiCisjfiBtc2dzdHIgIk5hbW4iCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby92aS5wbyBiL2dpdGstZ2l0L3BvL3ZpLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5Njc0OTgKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby92aS5wbwpAQCAtMCwwICsxLDEzNzkgQEAKKyMgVmlldG5hbWVzZSB0cmFuc2xhdGlvbnMgZm9yIGdpdGsgcGFja2FnZS4KKyMgQuG6o24gZOG7i2NoIHRp4bq/bmcgVmnhu4d0IGNobyBnw7NpIGdpdGsuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjIFRy4bqnbiBOZ+G7jWMgUXXDom4gPHZud2lsZG1hbkBnbWFpbC5jb20+LCAyMDEzLCAyMDE1LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0ayBAQEdJVF9WRVJTSU9OQEBcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMTQ6MzIrMTAwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTUtMDktMTUgMDc6MzMrMDcwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogVHLhuqduIE5n4buNYyBRdcOibiA8dm53aWxkbWFuQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBWaWV0bmFtZXNlIDx0cmFuc2xhdGlvbi10ZWFtLXZpQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogdmlcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTE7IHBsdXJhbD0wO1xuIgorIlgtR2VuZXJhdG9yOiBHdHJhbnNsYXRvciAyLjkxLjdcbiIKKworIzogZ2l0azoxNDAKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSBkYW5oIHPDoWNoIGPDoWMgdOG6rXAtdGluIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luOiIKKworIzogZ2l0azoyMTIgZ2l0azoyMzgxCittc2dpZCAiQ29sb3Igd29yZHMiCittc2dzdHIgIlTDtCBtw6B1IGNo4buvIgorCisjOiBnaXRrOjIxNyBnaXRrOjIzODEgZ2l0azo4MjIwIGdpdGs6ODI1MworbXNnaWQgIk1hcmt1cCB3b3JkcyIKK21zZ3N0ciAixJDDoW5oIGThuqV1IGNo4buvIgorCisjOiBnaXRrOjMyNAorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHBow6JuIHTDrWNoIMSRaeG7g20geMOpdCBkdXnhu4d0OiIKKworIzogZ2l0azozODAKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdGjhu7FjIGhp4buHbiBs4buHbmggLS1hcmdzY21kOiIKKworIzogZ2l0azozOTMKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyJDaMawYSBjaOG7jW4gdOG6rXAgdGluOiAtLW1lcmdlIMSRw6MgY2jhu4kgxJHhu4tuaCBuaMawbmcga2jDtG5nIGPDsyB04bqtcCB0aW4gY2jGsGEgaMOyYSB0cuG7mW4uIgorCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiQ2jGsGEgY2jhu41uIHThuq1wIHRpbjogLS1tZXJnZSDEkcOjIGNo4buJIMSR4buLbmggbmjGsG5nIGtow7RuZyBjw7MgdOG6rXAgdGluIGNoxrBhIGjDsmEgdHLhu5luICIKKyJ0cm9uZyBnaeG7m2kgaOG6oW4gdOG6rXAgdGluLiIKKworIzogZ2l0azo0MTggZ2l0azo1NjYKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB0aOG7sWMgaGnhu4duIGzhu4duaCBnaXQgbG9nOiIKKworIzogZ2l0azo0MzYgZ2l0azo1ODIKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICLEkGFuZyDEkeG7jWMiCisKKyM6IGdpdGs6NDk2IGdpdGs6NDUyNQorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAixJBhbmcgxJHhu41jIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhb+KApiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOAorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIkNoxrBhIGNo4buNbiBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MTQ0NSBnaXRrOjQwNDUgZ2l0azoxMjQzMgorbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAiRMOybmcgbOG7h25oIgorCisjOiBnaXRrOjE1MTEKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgIktow7RuZyB0aOG7gyBwaMOibiB0w61jaCBr4bq/dCB4deG6pXQgdOG7qyBs4buHbmggZ2l0IGxvZzoiCisKKyM6IGdpdGs6MTc0MAorbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCittc2dzdHIgIktow7RuZyBjw7MgdGjDtG5nIHRpbiB24buBIGzhuqduIGNodXnhu4NuIGdpYW8gbsOgbyIKKworIzogZ2l0azoxOTAzIGdpdGs6MTkzMiBnaXRrOjQzMTUgZ2l0azo5NjY5IGdpdGs6MTEyNDEgZ2l0azoxMTUyMQorbXNnaWQgIk9LIgorbXNnc3RyICLEkOG7k25nIMO9IgorCisjOiBnaXRrOjE5MzQgZ2l0azo0MzE3IGdpdGs6OTE5NiBnaXRrOjkyNzUgZ2l0azo5MzkxIGdpdGs6OTQ0MCBnaXRrOjk2NzEKKyM6IGdpdGs6MTEyNDIgZ2l0azoxMTUyMgorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiVGjDtGkiCisKKyM6IGdpdGs6MjA2OQorbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgIkPhuq1wIG5o4bqtdCIKKworIzogZ2l0azoyMDcwCittc2dpZCAiJlJlbG9hZCIKK21zZ3N0ciAiVOG6o2kgbOG6oWkiCisKKyM6IGdpdGs6MjA3MQorbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKK21zZ3N0ciAixJDhu41jIGzhuqFpIHRoYW0gY2hp4bq/dSIKKworIzogZ2l0azoyMDcyCittc2dpZCAiJkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAiTGnhu4d0IGvDqiBjw6FjIHRoYW0gY2hp4bq/dSIKKworIzogZ2l0azoyMDc0Cittc2dpZCAiU3RhcnQgZ2l0ICZndWkiCittc2dzdHIgIkto4bufaSBjaOG6oXkgZ2l0IGd1aSIKKworIzogZ2l0azoyMDc2Cittc2dpZCAiJlF1aXQiCittc2dzdHIgIlRob8OhdCIKKworIzogZ2l0azoyMDY4Cittc2dpZCAiJkZpbGUiCittc2dzdHIgIkNow61uaCIKKworIzogZ2l0azoyMDgwCittc2dpZCAiJlByZWZlcmVuY2VzIgorbXNnc3RyICJUw7l5IHRow61jaCIKKworIzogZ2l0azoyMDc5Cittc2dpZCAiJkVkaXQiCittc2dzdHIgIkNo4buJbmggc+G7rWEiCisKKyM6IGdpdGs6MjA4NAorbXNnaWQgIiZOZXcgdmlldy4uLiIKK21zZ3N0ciAiVGjDqm0gdHLDrG5oIGLDoHkgbeG7m2nigKYiCisKKyM6IGdpdGs6MjA4NQorbXNnaWQgIiZFZGl0IHZpZXcuLi4iCittc2dzdHIgIlPhu61hIGPDoWNoIHRyw6xuaCBiw6B54oCmIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRGVsZXRlIHZpZXciCittc2dzdHIgIljDs2EgY8OhY2ggdHLDrG5oIGLDoHkiCisKKyM6IGdpdGs6MjA4OCBnaXRrOjQwNDMKK21zZ2lkICImQWxsIGZpbGVzIgorbXNnc3RyICJN4buNaSB04bqtcCB0aW4iCisKKyM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKK21zZ2lkICImVmlldyIKK21zZ3N0ciAiVHLDrG5oIGLDoHkiCisKKyM6IGdpdGs6MjA5MyBnaXRrOjIxMDMgZ2l0azozMDEyCittc2dpZCAiJkFib3V0IGdpdGsiCittc2dzdHIgIkdp4bubaSB0aGnhu4d1IHbhu4EgZ2l0ayIKKworIzogZ2l0azoyMDk0IGdpdGs6MjEwOAorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgIlThu5UgaOG7o3AgcGjDrW0iCisKKyM6IGdpdGs6MjA5MiBnaXRrOjIxMDcKK21zZ2lkICImSGVscCIKK21zZ3N0ciAiVHLhu6MgZ2nDunAiCisKKyM6IGdpdGs6MjE4NSBnaXRrOjg2NTIKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMSBJRDoiCisKKyM6IGdpdGs6MjIyOQorbXNnaWQgIlJvdyIKK21zZ3N0ciAiSMOgbmciCisKKyM6IGdpdGs6MjI2NworbXNnaWQgIkZpbmQiCittc2dzdHIgIlTDrG0iCisKKyM6IGdpdGs6MjI5NQorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3CisjOiBnaXRrOjY5MTIKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAiY8OzIGNo4bupYToiCisKKyM6IGdpdGs6MjMwMiBnaXRrOjM1MjYgZ2l0azozNTMxIGdpdGs6NDc2MworbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAixJFhbmcgY2jhuqFtIMSRxrDhu51uZyBk4bqrbjoiCisKKyM6IGdpdGs6MjMwMyBnaXRrOjQ3NzcKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAidGjDqm0vZ+G7oSBi4buPIGNodeG7l2k6IgorCisjOiBnaXRrOjIzMDQgZ2l0azo0Nzc5Cittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICJuaOG7r25nIGTDsm5nIHRoYXkgxJHhu5VpIGto4bubcCBt4bqrdToiCisKKyM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzY2Cittc2dpZCAiRXhhY3QiCittc2dzdHIgIkNow61uaCB4w6FjIgorCisjOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMworbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIkJxdWFIdCIKKworIzogZ2l0azoyMzE1IGdpdGs6NDczNiBnaXRrOjQ4NTIgZ2l0azo2NzE5Cittc2dpZCAiUmVnZXhwIgorbXNnc3RyICJCVENRIgorCisjOiBnaXRrOjIzMTcgZ2l0azoyMzE4IGdpdGs6NDg3NCBnaXRrOjQ5MDQgZ2l0azo0OTExIGdpdGs6Njg0OCBnaXRrOjY5MTYKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJN4buNaSB0csaw4budbmciCisKKyM6IGdpdGs6MjMxOCBnaXRrOjQ4NzEgZ2l0azo0OTA0IGdpdGs6Njc4NgorbXNnaWQgIkhlYWRsaW5lIgorbXNnc3RyICJO4buZaSBkdW5nIGNow61uaCIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo2OTE2IGdpdGs6NzM4OQorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJHaGkgY2jDuiIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjQ4NzYgZ2l0azo0OTExIGdpdGs6Njc4NiBnaXRrOjczMjQgZ2l0azo4ODMwCisjOiBnaXRrOjg4NDUKK21zZ2lkICJBdXRob3IiCittc2dzdHIgIlTDoWMgZ2nhuqMiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NzMyNgorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAiTmfGsOG7nWkgY2h1eeG7g24gZ2lhbyIKKworIzogZ2l0azoyMzUwCittc2dpZCAiU2VhcmNoIgorbXNnc3RyICJUw6xtIGtp4bq/bSIKKworIzogZ2l0azoyMzU4Cittc2dpZCAiRGlmZiIKK21zZ3N0ciAiU28gc8OhbmgiCisKKyM6IGdpdGs6MjM2MAorbXNnaWQgIk9sZCB2ZXJzaW9uIgorbXNnc3RyICJQaGnDqm4gYuG6o24gY8WpIgorCisjOiBnaXRrOjIzNjIKK21zZ2lkICJOZXcgdmVyc2lvbiIKK21zZ3N0ciAiUGhpw6puIGLhuqNuIG3hu5tpIgorCisjOiBnaXRrOjIzNjQKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICJDw6FjIGTDsm5nIGPhu6dhIG7hu5lpIGR1bmciCisKKyM6IGdpdGs6MjM3NAorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIktow7RuZyB4w6l0IMSR4bq/biB0aGF5IMSR4buVaSBkbyBraG/huqNuZyB0cuG6r25nIgorCisjOiBnaXRrOjIzNzggZ2l0azoyMzgwIGdpdGs6Nzk1OSBnaXRrOjgyMDYKK21zZ2lkICJMaW5lIGRpZmYiCittc2dzdHIgIktow6FjIGJp4buHdCB0aGVvIGTDsm5nIgorCisjOiBnaXRrOjI0NDUKK21zZ2lkICJQYXRjaCIKK21zZ3N0ciAiVsOhIgorCisjOiBnaXRrOjI0NDcKK21zZ2lkICJUcmVlIgorbXNnc3RyICJDw6J5IgorCisjOiBnaXRrOjI2MTcgZ2l0azoyNjM3Cittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICJTbyBzw6FuaCBjw6FpIG7DoHkgLT4gY8OhaSDEkcOjIGNo4buNbiIKKworIzogZ2l0azoyNjE4IGdpdGs6MjYzOAorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiU28gc8OhbmggY8OhaSDEkcOjIGNo4buNbiAtPiBjw6FpIG7DoHkiCisKKyM6IGdpdGs6MjYxOSBnaXRrOjI2MzkKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICJU4bqhbyBtaeG6v25nIHbDoSIKKworIzogZ2l0azoyNjIwIGdpdGs6OTI1NAorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIlThuqFvIHRo4bq7IgorCisjOiBnaXRrOjI2MjEgZ2l0azo5MzcxCittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIkdoaSBs4bqnbiBjaHV54buDbiBnaWFvIHJhIHThuq1wIHRpbiIKKworIzogZ2l0azoyNjIyIGdpdGs6OTQyOAorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJU4bqhbyBuaMOhbmggbeG7m2kiCisKKyM6IGdpdGs6MjYyMworbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJDaGVycnktcGljayBs4bqnbiBjaHV54buDbiBnaWFvIG7DoHkiCisKKyM6IGdpdGs6MjYyNAorbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIsSQ4bq3dCBs4bqhaSBIRUFEIGPhu6dhIG5ow6FuaCB2w6BvIMSRw6J5IgorCisjOiBnaXRrOjI2MjUKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICLEkMOhbmggZOG6pXUgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6B5IgorCisjOiBnaXRrOjI2MjYKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAiUXVheSBs4bqhaSB24buLIHRyw60gZOG6pXUiCisKKyM6IGdpdGs6MjYyNworbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgorbXNnc3RyICJUw6xtIGNvbiBjaMOhdSBj4bunYSBjw6FpIG7DoHkgdsOgIGPDoWkgxJHDoyDEkcOhbmggZOG6pXUiCisKKyM6IGdpdGs6MjYyOAorbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJTbyBzw6FuaCB24bubaSBs4bqnbiBjaHV54buDbiBnaWFvIMSRw6MgxJHDoW5oIGThuqV1IgorCisjOiBnaXRrOjI2MjkgZ2l0azoyNjQwCittc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCittc2dzdHIgIlNvIHPDoW5oIGPDoWkgbsOgeSAtPiBs4bqnbiBjaHV54buDbiBnaWFvIMSRw6MgxJHDoW5oIGThuqV1IgorCisjOiBnaXRrOjI2MzAgZ2l0azoyNjQxCittc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCittc2dzdHIgIlNvIHPDoW5oIGzhuqduIGNodXnhu4NuIGdpYW8gxJHDoyDEkcOhbmggZOG6pXUgLT4gY8OhaSBuw6B5IgorCisjOiBnaXRrOjI2MzEKK21zZ2lkICJSZXZlcnQgdGhpcyBjb21taXQiCittc2dzdHIgIkhvw6BuIGzhuqFpIGzhuqduIGNodXnhu4NuIGdpYW8gbsOgeSIKKworIzogZ2l0azoyNjQ3Cittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICJM4bqleSByYSBuaMOhbmggbsOgeSIKKworIzogZ2l0azoyNjQ4Cittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICJH4buhIGLhu48gbmjDoW5oIG7DoHkiCisKKyM6IGdpdGs6MjY0OQorbXNnaWQgIkNvcHkgYnJhbmNoIG5hbWUiCittc2dzdHIgIkNow6lwIHTDqm4gbmjDoW5oIgorCisjOiBnaXRrOjI2NTYKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIkPFqW5nIHTDtCBzw6FuZyBuw7MiCisKKyM6IGdpdGs6MjY1NworbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIkNo4buJIHTDtCBzw6FuZyBjw6FpIG7DoHkiCisKKyM6IGdpdGs6MjY1OAorbXNnaWQgIkV4dGVybmFsIGRpZmYiCittc2dzdHIgImRpZmYgdOG7qyBiw6puIG5nb8OgaSIKKworIzogZ2l0azoyNjU5Cittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAiWGVtIGPDtG5nIHRy4bqhbmcgbOG6p24gY2h1eeG7g24gZ2lhbyBjaGEgbeG6uSIKKworIzogZ2l0azoyNjYwCittc2dpZCAiQ29weSBwYXRoIgorbXNnc3RyICJDaMOpcCDEkcaw4budbmcgZOG6q24iCisKKyM6IGdpdGs6MjY2NworbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIG5ndXnDqm4gZ+G7kWMgY+G7p2EgZMOybmcgbsOgeSIKKworIzogZ2l0azoyNjY4Cittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICJDaOG6oXkgbOG7h25oIGdpdCBndWkgYmxhbWUgY2hvIGTDsm5nIG7DoHkiCisKKyM6IGdpdGs6MzAxNAorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSDhu6luZyBk4bulbmcgxJHhu4MgeGVtIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBkw6BuaCBjaG8gZ2l0XG4iCisiXG4iCisiQuG6o24gcXV54buBbiDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJEw7luZyB2w6AgcGjDom4gcGjhu5FpIGzhuqFpIHBo4bqnbiBt4buBbSBuw6B5IHRoZW8gY8OhYyDEkWnhu4F1IGtob+G6o24gY+G7p2EgR2nhuqV5IFBow6lwIEPDtG5nIEdOVSIKKworIzogZ2l0azozMDIyIGdpdGs6MzA4OSBnaXRrOjk4NTcKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAixJDDs25nIgorCisjOiBnaXRrOjMwNDMKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiVOG7lSBo4bujcCBwaMOtbSBnaXRrIgorCisjOiBnaXRrOjMwNDYKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIlThu5UgaOG7o3AgcGjDrW0gZ2l0azoiCisKKyM6IGdpdGs6MzA0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0VGhvw6F0IgorCisjOiBnaXRrOjMwNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgorbXNnc3RyICI8JXMtVz5cdFx0xJDDs25nIGPhu61hIHPhu5UiCisKKyM6IGdpdGs6MzA1MAorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPEhvbWU+XHRcdENodXnhu4NuIMSR4bq/biBs4bqnbiBjaHV54buDbiBnaWFvIMSR4bqndSB0acOqbiIKKworIzogZ2l0azozMDUxCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx0Q2h1eeG7g24gxJHhur9uIGzhuqduIGNodXnhu4NuIGdpYW8gY3Xhu5FpIgorCisjOiBnaXRrOjMwNTIKK21zZ2lkICI8VXA+LCBwLCBrXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxVcD4sIHAsIGtcdERpIGNodXnhu4NuIGzDqm4gbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogZ2l0azozMDUzCittc2dpZCAiPERvd24+LCBuLCBqXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKK21zZ3N0ciAiPERvd24+LCBuLCBqXHREaSBjaHV54buDbiB4deG7kW5nIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MzA1NAorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxMZWZ0PiwgeiwgaFx0UXVheSB0cuG7nyBs4bqhaSBkYW5oIHPDoWNoIGzhu4tjaCBz4butIgorCisjOiBnaXRrOjMwNTUKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPFJpZ2h0PiwgeCwgbFx0RGkgY2h1eeG7g24gdGnhur9wIHRyb25nIGRhbmggc8OhY2ggbOG7i2NoIHPhu60iCisKKyM6IGdpdGs6MzA1NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICIiCisiPCVzLW4+XHTEkOG6v24gY2hhIHRo4bupIG4gY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyBoaeG7h24gdOG6oWkgdHJvbmcgZGFuaCBzw6FjaCBs4buLY2ggc+G7rSIKKworIzogZ2l0azozMDU3Cittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlVXA+XHREaSBjaHV54buDbiBsw6puIG3hu5l0IHRyYW5nIHRyb25nIGRhbmggc8OhY2ggbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogZ2l0azozMDU4Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZURvd24+XHREaSBjaHV54buDbiB4deG7kW5nIG3hu5l0IHRyYW5nIHRyb25nIGRhbmggc8OhY2ggbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogZ2l0azozMDU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdEN14buZbiBsw6puIHRyw6puIGPDuW5nIGPhu6dhIGRhbmggc8OhY2ggbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogZ2l0azozMDYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHRDdeG7mW4geHXhu5FuZyBkxrDhu5tpIGPDuW5nIGPhu6dhIGRhbmggc8OhY2ggbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogZ2l0azozMDYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtVXA+XHRDdeG7mW4gZGFuaCBzw6FjaCBs4bqnbiBjaHV54buDbiBnaWFvIGzDqm4gbeG7mXQgZMOybmciCisKKyM6IGdpdGs6MzA2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1Eb3duPlx0Q3Xhu5luIGRhbmggc8OhY2ggbOG6p24gY2h1eeG7g24gZ2lhbyB4deG7kW5nIG3hu5l0IGTDsm5nIgorCisjOiBnaXRrOjMwNjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZVVwPlx0Q3Xhu5luIGRhbmggc8OhY2ggbOG6p24gY2h1eeG7g24gZ2lhbyBsw6puIG3hu5l0IHRyYW5nIgorCisjOiBnaXRrOjMwNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VEb3duPlx0Q3Xhu5luIGRhbmggc8OhY2ggbOG6p24gY2h1eeG7g24gZ2lhbyB4deG7kW5nIG3hu5l0IHRyYW5nIgorCisjOiBnaXRrOjMwNjUKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1VcD5cdFTDrG0gduG7gSBwaMOtYSBzYXUgKGjGsOG7m25nIGzDqm4gdHLDqm4sIGzhuqduIGNodXnhu4NuIGdpYW8gc2F1IG7DoHkpIgorCisjOiBnaXRrOjMwNjYKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiIgorIjxTaGlmdC1Eb3duPlx0VMOsbSB24buBIHBow61hIHRyxrDhu5tjIChoxrDhu5tuZyB4deG7kW5nIGTGsOG7m2ksIGzhuqduIGNodXnhu4NuIGdpYW8gdHLGsOG7m2MgxJHDonkpIgorCisjOiBnaXRrOjMwNjcKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPERlbGV0ZT4sIGJcdEN14buZbiBwaOG6p24gdHLDrG5oIGLDoHkgZGlmZiBsw6puIG3hu5l0IHRyYW5nIgorCisjOiBnaXRrOjMwNjgKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJhY2tzcGFjZT5cdEN14buZbiBwaOG6p24gdHLDrG5oIGLDoHkgZGlmZiBsw6puIG3hu5l0IHRyYW5nIgorCisjOiBnaXRrOjMwNjkKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPFNwYWNlPlx0XHRDdeG7mW4gcGjhuqduIHRyw6xuaCBiw6B5IGRpZmYgeHXhu5FuZyBt4buZdCB0cmFuZyIKKworIzogZ2l0azozMDcwCittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdEN14buZbiBwaOG6p24gdHLDrG5oIGLDoHkgZGlmZiBsw6puIDE4IGTDsm5nIgorCisjOiBnaXRrOjMwNzEKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHRDdeG7mW4gcGjhuqduIHRyw6xuaCBiw6B5IGRpZmYgeHXhu5FuZyAxOCBkw7JuZyIKKworIzogZ2l0azozMDcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRUw6xtIGtp4bq/bSIKKworIzogZ2l0azozMDczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdERpIGNodXnhu4NuIMSR4bq/biBjaOG7lyBn4bq3cCBr4bq/IHRp4bq/cCIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdFx0RGkgY2h1eeG7g24gxJHhur9uIGNo4buXIGfhurdwIGvhur8gdGnhur9wIgorCisjOiBnaXRrOjMwNzUKK21zZ2lkICJnXHRcdEdvIHRvIGNvbW1pdCIKK21zZ3N0ciAiZ1x0XHRDaHV54buDbiDEkeG6v24gbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogZ2l0azozMDc2Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHTEkMawYSBjb24gdHLhu48gY2h14buZdCB2w6BvIMO0IHTDrG0ga2nhur9tIgorCisjOiBnaXRrOjMwNzcKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx0RGkgY2h1eeG7g24gxJHhur9uIGNo4buXIGfhurdwIGvhur8gdHLGsOG7m2MiCisKKyM6IGdpdGs6MzA3OAorbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx0Q3Xhu5luIHBo4bqnbiB0csOsbmggYsOgeSBkaWZmIHNhbmcgdOG6rXAtdGluIGvhur8iCisKKyM6IGdpdGs6MzA3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdFTDrG0gxJHhur9uIGNo4buXIGtow6FjIGJp4buHdCBr4bq/IHRp4bq/cCIKKworIzogZ2l0azozMDgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdFTDrG0gxJHhur9uIGNo4buXIGtow6FjIGJp4buHdCBr4bq/IHRyxrDhu5tjIgorCisjOiBnaXRrOjMwODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1ArPlx0VMSDbmcgY+G7oSBjaOG7ryIKKworIzogZ2l0azozMDgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1wbHVzPlx0VMSDbmcgY+G7oSBjaOG7ryIKKworIzogZ2l0azozMDgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdEdp4bqjbSBj4buhIGNo4buvIgorCisjOiBnaXRrOjMwODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1taW51cz5cdEdp4bqjbSBj4buhIGNo4buvIgorCisjOiBnaXRrOjMwODUKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHRD4bqtcCBuaOG6rXQiCisKKyM6IGdpdGs6MzU1MCBnaXRrOjM1NTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHThuqFvIHRoxrAgbeG7pWMgdOG6oW0gJXM6IgorCisjOiBnaXRrOjM1NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAiTOG7l2kgY2jDoG8gaOG7j2kgXCIlc1wiIHThu6sgJXM6IgorCisjOiBnaXRrOjM2MzUKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImzhu4duaCBn4bq3cCBs4buXaToiCisKKyM6IGdpdGs6Mzc4NAorbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICJLaMO0bmcgY8OzIGzhuqduIGNodXnhu4NuIGdpYW8gbmjGsCB24bqteSIKKworIzogZ2l0azozNzk4Cittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiBs4buHbmggZ+G6t3AgbOG7l2k6IgorCisjOiBnaXRrOjM4MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu5ljIMSR4bqndSBj4bunYSBow7JhIHRy4buZbjogJXMiCisKKyMgdGNsLWZvcm1hdAorIzogZ2l0azozODM3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG7jWMgY2jhu4kgbeG7pWM6ICVzIgorCisjOiBnaXRrOjM4NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4Mga2jhu59pIGNo4bqheSBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM4NjUgZ2l0azo2NzU0Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICLEkGFuZyB0w6xtIGtp4bq/bSIKKworIzogZ2l0azozODk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgY2jhuqF5IGdpdCBibGFtZTogJXMiCisKKyM6IGdpdGs6MzkyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIkTDsm5nIMSR4bq/biB04burIGzhuqduIGNodXnhu4NuIGdpYW8gJXMsIGPDoWkgbcOgIGtow7RuZyB0cm9uZyB0csOsbmggYsOgeSBuw6B5IgorCisjOiBnaXRrOjM5MzkKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICJC4buZIHRyw6xuaCBiw6B5IGRpZmYgdOG7qyBiw6puIG5nb8OgaSBn4bq3cCBs4buXaToiCisKKyM6IGdpdGs6NDA3MAorbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICLEkOG7i25oIG5naMSpYSBjw6FjaCB0csOsbmggYsOgeSBnaXRrIgorCisjOiBnaXRrOjQwNzQKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIk5o4bubIGPDoWNoIHRyw6xuaCBiw6B5IG7DoHkiCisKKyM6IGdpdGs6NDA3NQorbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCittc2dzdHIgIlRoYW0gY2hp4bq/dSAoZGFuaCBzw6FjaCBuZ8SDbiBjw6FjaCBi4bqxbmcgZOG6pXUgY8OhY2gpOiIKKworIzogZ2l0azo0MDc2Cittc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKK21zZ3N0ciAiTmjDoW5oICYgdGjhurs6IgorCisjOiBnaXRrOjQwNzcKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAiTeG7jWkgdGhhbSBjaGnhur91IgorCisjOiBnaXRrOjQwNzgKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAiTeG7jWkgbmjDoW5oIChu4buZaSBi4buZKSIKKworIzogZ2l0azo0MDc5Cittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgIk3hu41pIHRo4bq7IgorCisjOiBnaXRrOjQwODAKK21zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJN4buNaSBuaMOhbmggcmVtb3RlLXRyYWNraW5nIgorCisjOiBnaXRrOjQwODEKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICJUaMO0bmcgdGluIGNodXnhu4NuIGdpYW8gKGJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eSk6IgorCisjOiBnaXRrOjQwODIKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJUw6FjIGdp4bqjOiIKKworIzogZ2l0azo0MDgzCittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAiTmfGsOG7nWkgY2h1eeG7g24gZ2lhbzoiCisKKyM6IGdpdGs6NDA4NAorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiQ2jDuiB0aMOtY2ggY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbzoiCisKKyM6IGdpdGs6NDA4NQorbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJLaOG7m3AgbeG7jWkgxJFp4buBdSBraeG7h24gVGjDtG5nIHRpbiBDaHV54buDbiBnaWFvIgorCisjOiBnaXRrOjQwODYKK21zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJLaOG7m3Aga2jDtG5nIMSRaeG7gXUga2nhu4duIFRow7RuZyB0aW4gQ2h1eeG7g24gZ2lhbyIKKworIzogZ2l0azo0MDg3Cittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgIsSQ4buVaSB0aMOgbmggVOG6rXAgdGluOiIKKworIzogZ2l0azo0MDg4Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJDaHXhu5dpIGPhu5EgxJHhu4tuaCIKKworIzogZ2l0azo0MDg5Cittc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgorbXNnc3RyICJCaeG7g3UgdGjhu6ljIGNow61uaCBxdXkiCisKKyM6IGdpdGs6NDA5MAorbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICJDaHXhu5dpIHTDrG0ga2nhur9tOiIKKworIzogZ2l0azo0MDkxCittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICIiCisiTmfDoHkgY2h1eeG7g24gZ2lhbyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorCisjOiBnaXRrOjQwOTIKK21zZ2lkICJTaW5jZToiCittc2dzdHIgIkvhu4MgdOG7qzoiCisKKyM6IGdpdGs6NDA5MworbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAixJDhur9uOiIKKworIzogZ2l0azo0MDk0Cittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIkdp4bubaSBo4bqhbiB2w6AvaG/hurdjIGLhu48gc+G7kSBj4bunYSDEkWnhu4NtIHjDqXQgKHPhu5Egbmd1ecOqbiDDom0pOiIKKworIzogZ2l0azo0MDk1Cittc2dpZCAiTnVtYmVyIHRvIHNob3c6IgorbXNnc3RyICJT4buRIGzGsOG7o25nIGhp4buDbiB0aOG7izoiCisKKyM6IGdpdGs6NDA5NgorbXNnaWQgIk51bWJlciB0byBza2lwOiIKK21zZ3N0ciAiU+G7kSBsxrDhu6NuZyBz4bq9IGLhu48gcXVhOiIKKworIzogZ2l0azo0MDk3Cittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gaOG7l24gaOG7o3A6IgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIlPhuq9wIHjhur9wIGNo4bq3dCBjaOG6vSB0aGVvIG5nw6B5IgorCisjOiBnaXRrOjQwOTkKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAixJDDoW5oIGThuqV1IGPDoWMgY+G6oW5oIG5ow6FuaCIKKworIzogZ2l0azo0MTAwCittc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgorbXNnc3RyICJHaeG7m2kgaOG6oW4gdGjDoG5oIGNoYSBt4bq5IMSR4bqndSB0acOqbiIKKworIzogZ2l0azo0MTAxCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIkzhu4tjaCBz4butIGThuqFuZyDEkcahbiBnaeG6o24iCisKKyM6IGdpdGs6NDEwMgorbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgorbXNnc3RyICLEkOG7kWkgc+G7kSBi4buVIHh1bmcgY2hvIGzhu4duaCBnaXQgbG9nOiIKKworIzogZ2l0azo0MTAzCittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIk5o4bqtcCB2w6BvIGPDoWMgdOG6rXAgdGluIHbDoCB0aMawIG3hu6VjIGJhbyBn4buTbSwgbeG7l2kgZMOybmcgbeG7mXQgY8OhaToiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJM4buHbmggdOG6oW8gcmEgbmhp4buBdSBs4bqnbiBjaHV54buDbiBnaWFvIGjGoW4gYmFvIGfhu5NtOiIKKworIzogZ2l0azo0MjI4Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrOiBz4butYSBjw6FjaCB0csOsbmggYsOgeSIKKworIzogZ2l0azo0MjM2Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIi0tIHRpw6p1IGNodeG6qW4gY2jhu41uIMSRaeG7g20geMOpdCBkdXnhu4d0IgorCisjOiBnaXRrOjQyNDEKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIlTDqm4gY8OhY2ggdHLDrG5oIGLDoHkiCisKKyM6IGdpdGs6NDMxNgorbXNnaWQgIkFwcGx5IChGNSkiCittc2dzdHIgIsOBcCBk4bulbmcgKEY1KSIKKworIzogZ2l0azo0MzU0Cittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICJM4buXaSB0cm9uZyBjw6FjIMSR4buRaSBz4buRIGNo4buNbiBjaHV54buDbiBnaWFvOiIKKworIzogZ2l0azo0NDA5IGdpdGs6NDQ2MiBnaXRrOjQ5MjQgZ2l0azo0OTM4IGdpdGs6NjIwOCBnaXRrOjEyMzczIGdpdGs6MTIzNzQKK21zZ2lkICJOb25lIgorbXNnc3RyICJLaMO0bmciCisKKyM6IGdpdGs6NTAyMSBnaXRrOjUwMjYKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJDb24gY2jDoXUiCisKKyM6IGdpdGs6NTAyMgorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICJLaMO0bmcgY8OzIGNvbiBjaMOhdSIKKworIzogZ2l0azo1MDI5IGdpdGs6NTAzNAorbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJU4buVIHRpw6puIGNodW5nIgorCisjOiBnaXRrOjUwMzAKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIktow7RuZyBjw7MgY2h1bmcgdOG7lSB0acOqbiIKKworIzogZ2l0azo1MzI0Cittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICIiCisiQ8OzIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kgxJHDoyDEkcaw4bujYyDEkcawYSB2w6BvIGLhuqNuZyBt4bulYyBs4bulYywgbmjGsG5nIGNoxrBhIMSRxrDhu6NjIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6NTM2MAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICJDw7MgdGhheSDEkeG7lWkgbuG7mWkgYuG7mSwgbmjGsG5nIGNoxrBhIMSRxrDhu6NjIMSRxrBhIHbDoG8gYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBnaXRrOjcxMzQKK21zZ2lkICJhbmQgbWFueSBtb3JlIgorbXNnc3RyICJ2w6Agbmhp4buBdSBu4buvYSIKKworIzogZ2l0azo3MTM3Cittc2dpZCAibWFueSIKK21zZ3N0ciAibmhp4buBdSIKKworIzogZ2l0azo3MzI4Cittc2dpZCAiVGFnczoiCittc2dzdHIgIlRo4bq7OiIKKworIzogZ2l0azo3MzQ1IGdpdGs6NzM1MSBnaXRrOjg4MjUKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgIkNoYSIKKworIzogZ2l0azo3MzU2Cittc2dpZCAiQ2hpbGQiCittc2dzdHIgIkNvbiIKKworIzogZ2l0azo3MzY1Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJOaMOhbmgiCisKKyM6IGdpdGs6NzM2OAorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgIsSQ4bupbmcgc2F1IgorCisjOiBnaXRrOjczNzEKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAixJDhu6luZyB0csaw4bubYyIKKworIyB0Y2wtZm9ybWF0CisjOiBnaXRrOjc5NjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKK21zZ3N0ciAiTOG7l2kgbOG6pXkgZGlmZjogJXMiCisKKyM6IGdpdGs6ODY1MAorbXNnaWQgIkdvdG86IgorbXNnc3RyICJOaOG6o3kgdOG7m2k6IgorCisjOiBnaXRrOjg2NzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAixJDhu4tuaCBkYW5oIFNIQTEgZOG6oW5nIG5n4bqvbiAlcyBsw6AgY2jGsGEgxJHhu6cgcsO1IHLDoG5nIgorCisjOiBnaXRrOjg2NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIktow7RuZyBoaeG7g3UgxJFp4buDbSB4w6l0IGR1eeG7h3QgJXMiCisKKyM6IGdpdGs6ODY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJLaMO0bmcgaGnhu4N1IMSR4buLbmggZGFuaCBTSEExICVzIgorCisjOiBnaXRrOjg2OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAixJBp4buDbSAlcyBraMO0bmcg4bufIHRyb25nIHBo4bqnbiBoaeG7g24gdGjhu4sgaGnhu4duIHThuqFpIgorCisjOiBnaXRrOjg4MzIgZ2l0azo4ODQ3Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAiTmfDoHkiCisKKyM6IGdpdGs6ODgzNQorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJDb24gY2jDoXUiCisKKyM6IGdpdGs6ODg5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLEkOG6t3QgbOG6oWkgbmjDoW5oICVzIHThuqFpIMSRw6J5IgorCisjOiBnaXRrOjg5MDAKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiSGVhZCDEkcOjIGLhu4sgdMOhY2ggcuG7nWk6IGtow7RuZyB0aOG7gyDEkeG6t3QgbOG6oWkiCisKKyM6IGdpdGs6OTAwNSBnaXRrOjkwMTEKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICJC4buPIHF1YSBs4bqnbiBjaHV54buDbiBnaWFvIGjDsmEgdHLhu5luICIKKworIzogZ2l0azo5MDIwIGdpdGs6OTAyNQorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGzhuqV5IElEIG1p4bq/bmcgdsOhIGNobyAiCisKKyM6IGdpdGs6OTAyMSBnaXRrOjkwMjYKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgLSBk4burbmdcbiIKKworIzogZ2l0azo5MDMxIGdpdGs6OTAzNCBnaXRrOjkwNDIgZ2l0azo5MDU2IGdpdGs6OTA2NQorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIkNvbW1pdCAiCisKKyM6IGdpdGs6OTAzNQorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIGzDoCBjw7luZyBt4buZdCBtaeG6v25nIHbDoSB24bubaVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0MworbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBraMOhYyBiaeG7h3QgdOG7q1xuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0NQorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJLaMOhYyBiaeG7h3QgY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyAoY29tbWl0KTpcbiIKKyJcbiIKKworIzogZ2l0azo5MDU3IGdpdGs6OTA2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgY8OzICVzIGNvbiAtIGThu6tuZ1xuIgorCisjOiBnaXRrOjkwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kgdHJvbmcgcXXDoSB0csOsbmggZ2hpIGzhuqduIGNodXnhu4NuIGdpYW8gdsOgbyB04bqtcCB0aW46ICVzIgorCisjOiBnaXRrOjkwOTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgc28gc8Ohbmggc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbzogJXMiCisKKyM6IGdpdGs6OTEzNworbXNnaWQgIlRvcCIKK21zZ3N0ciAixJDhu4luaCIKKworIzogZ2l0azo5MTM4Cittc2dpZCAiRnJvbSIKK21zZ3N0ciAiVOG7qyIKKworIzogZ2l0azo5MTQzCittc2dpZCAiVG8iCittc2dzdHIgIsSQ4bq/biIKKworIzogZ2l0azo5MTY3Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIlThuqFvIG1p4bq/bmcgdsOhIgorCisjOiBnaXRrOjkxNjkKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiVOG7qzoiCisKKyM6IGdpdGs6OTE3OAorbXNnaWQgIlRvOiIKK21zZ3N0ciAixJDhur9uOiIKKworIzogZ2l0azo5MTg3Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAixJDhuqNvIG5nxrDhu6NjIgorCisjOiBnaXRrOjkxODkgZ2l0azo5Mzg1Cittc2dpZCAiT3V0cHV0IGZpbGU6IgorbXNnc3RyICJU4bqtcCB0aW4ga+G6v3QgeHXhuqV0OiIKKworIzogZ2l0azo5MTk1Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIlThuqFvIgorCisjOiBnaXRrOjkyMzMKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB04bqhbyBtaeG6v25nIHbDoToiCisKKyM6IGdpdGs6OTI1NiBnaXRrOjkzNzMgZ2l0azo5NDMwCittc2dpZCAiSUQ6IgorbXNnc3RyICJNw6Mgc+G7kToiCisKKyM6IGdpdGs6OTI2NQorbXNnaWQgIlRhZyBuYW1lOiIKK21zZ3N0ciAiVMOqbiB0aOG6uzoiCisKKyM6IGdpdGs6OTI2OAorbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICJHaGkgY2jDuiB0aOG6uyBjaOG7iSBsw6AgdMO5eSBjaOG7jW4iCisKKyM6IGdpdGs6OTI3MAorbXNnaWQgIlRhZyBtZXNzYWdlOiIKK21zZ3N0ciAiR2hpIGNow7ogY2hvIHRo4bq7OiIKKworIzogZ2l0azo5Mjc0IGdpdGs6OTQzOQorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiVOG6oW8iCisKKyM6IGdpdGs6OTI5MgorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiQ2jGsGEgY2jhu4kgcmEgdMOqbiBj4bunYSB0aOG6uyIKKworIzogZ2l0azo5Mjk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiVGjhursg4oCcJXPigJ0gxJHDoyBjw7Mgc+G6tW4gcuG7k2kiCisKKyM6IGdpdGs6OTMwNgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB04bqhbyB0aOG6uzoiCisKKyM6IGdpdGs6OTM4MgorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJM4buHbmg6IgorCisjOiBnaXRrOjkzOTAKK21zZ2lkICJXcml0ZSIKK21zZ3N0ciAiR2hpIgorCisjOiBnaXRrOjk0MDgKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCittc2dzdHIgIkfhurdwIGzhu5dpIHRyb25nIHF1w6EgdHLDrG5oIGdoaSBjaHV54buDbiBnaWFvOiIKKworIzogZ2l0azo5NDM1Cittc2dpZCAiTmFtZToiCittc2dzdHIgIlTDqm46IgorCisjOiBnaXRrOjk0NTgKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJWdWkgbMOybmcgY2jhu4kgxJHhu4tuaCB0w6puIGNobyBuaMOhbmggbeG7m2kiCisKKyM6IGdpdGs6OTQ2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICJOaMOhbmgg4oCcJXPigJ0gxJHDoyBjw7MgdOG7qyB0csaw4bubYyBy4buTaS4gR2hpIMSRw6g/IgorCisjOiBnaXRrOjk1MzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiIgorIkzhuqduIGNodXnhu4NuIGdpYW8gJXMgxJHDoyBz4bq1biDEkcaw4bujYyBiYW8gZ+G7k20gdHJvbmcgbmjDoW5oICVzIC0tIGLhuqFuIGPDsyB0aOG7sWMgc+G7sSBtdeG7kW4gIgorIsOhcCBk4bulbmcgbOG6oWkgbsOzIGtow7RuZz8iCisKKyM6IGdpdGs6OTUzNQorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICLEkGFuZyBjaGVycnktcGljayIKKworIzogZ2l0azo5NTQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIkNoZXJyeS1waWNrIGfhurdwIGzhu5dpIGLhu59pIHbDrCBjw6FjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kgdOG6rXAgdGluIOKAnCVz4oCdLlxuIgorIlhpbiBow6N5IGNodXnhu4NuIGdpYW8sIHJlc2V0IGhheSBzdGFzaCBjw6FjIHRoYXkgxJHhu5VpIGPhu6dhIGLhuqFuIHNhdSDEkcOzIHRo4butIGzhuqFpLiIKKworIzogZ2l0azo5NTUwCittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiQ2hlcnJ5LXBpY2sgZ+G6t3AgbOG7l2kgYuG7n2kgdsOsIHh1bmcgxJHhu5l0IHRyb25nIGjDsmEgdHLhu5luLlxuIgorIkLhuqFuIGPDsyBtdeG7kW4gY2jhuqF5IGzhu4duaCDigJxnaXQgY2l0b29s4oCdIMSR4buDIGdp4bqjaSBxdXnhur90IHbhuqVuIMSR4buBIG7DoHkga2jDtG5nPyIKKworIzogZ2l0azo5NTY2IGdpdGs6OTYyNAorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7DoG8gY+G6p24gY2h1eeG7g24gZ2lhbyIKKworIzogZ2l0azo5NTkzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIG5vdCBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJldmVydCBpdD8iCittc2dzdHIgIiIKKyJM4bqnbiBjaHV54buDbiBnaWFvICVzIGtow7RuZyDEkcaw4bujYyBiYW8gZ+G7k20gdHJvbmcgbmjDoW5oICVzIC0tIGLhuqFuIGPDsyB0aOG7sWMgc+G7sSBtdeG7kW4gIgorIuKAnHJldmVydOKAnSBuw7Mga2jDtG5nPyIKKworIzogZ2l0azo5NTk4Cittc2dpZCAiUmV2ZXJ0aW5nIgorbXNnc3RyICLEkGFuZyBob8OgbiB0w6FjIgorCisjOiBnaXRrOjk2MDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczolcyBQbGVhc2UgIgorImNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIlJldmVydCBn4bq3cCBs4buXaSBi4bufaSB2w6wgdOG6rXAgdGluIHNhdSDEkcOjIMSRxrDhu6NjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5k6JXNcbiIKKyJYaW4gaMOjeSBjaOG6oXkgbOG7h25oIOKAnGNvbW1pdOKAnSwg4oCccmVzZXTigJ0gaG/hurdjIOKAnHN0YXNo4oCdIHLhu5NpIHRo4butIGzhuqFpLiIKKworIzogZ2l0azo5NjEwCittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyIgRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJSZXZlcnQgZ+G6t3AgbOG7l2kgYuG7n2kgdsOsIHh1bmcgxJHhu5l0IGjDsmEgdHLhu5luLlxuIgorIiBC4bqhbiBjw7MgbXXhu5FuIGNo4bqheSBs4buHbmgg4oCcZ2l0IGNpdG9vbOKAnSDEkeG7gyBwaMOibiBnaeG6o2kgbsOzIGtow7RuZz8iCisKKyM6IGdpdGs6OTY1MworbXNnaWQgIkNvbmZpcm0gcmVzZXQiCittc2dzdHIgIljDoWMgbmjhuq10IMSR4bq3dCBs4bqhaSIKKworIzogZ2l0azo5NjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAixJDhurd0IGzhuqFpIG5ow6FuaCDigJwlc+KAnSB0aMOgbmgg4oCcJXPigJ0/IgorCisjOiBnaXRrOjk2NTcKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiS2nhu4N1IMSR4bq3dCBs4bqhaToiCisKKyM6IGdpdGs6OTY2MAorbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICJN4buBbTogS2jDtG5nIMSR4buZbmcgxJHhur9uIHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgdsOgIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogZ2l0azo5NjYzCittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICIiCisiUGhhIHRy4buZbjogS2jDtG5nIMSR4buZbmcgY2jhuqFtIMSR4bq/biB0aMawIG3hu6VjIGzDoG0gdmnhu4djIG5oxrBuZyDEkeG6t3QgbOG6oWkgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBnaXRrOjk2NjYKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkhhcmQ6IMSQ4bq3dCBs4bqhaSBjw6J5IGzDoG0gdmnhu4djIHbDoCBt4bulYyBs4bulY1xuIgorIiho4buneSBi4buPIE3hu4xJIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kpIgorCisjOiBnaXRrOjk2ODMKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgIsSQYW5nIMSR4bq3dCBs4bqhaSIKKworIzogZ2l0azo5NzQzCittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICLEkGFuZyBjaGVja291dCIKKworIzogZ2l0azo5Nzk2Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHjDs2EgbmjDoW5oIGhp4buHbiB04bqhaSDEkWFuZyDEkcaw4bujYyBs4bqleSByYSIKKworIzogZ2l0azo5ODAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJDw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gdHLDqm4gbmjDoW5oICVzIGtow7RuZyDhu58gdHLDqm4gbmjDoW5oIGtow6FjLlxuIgorIlRo4buxYyBz4buxIG114buRbiB4w7NhIG5ow6FuaCAlcz8iCisKKyM6IGdpdGs6OTgzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAiVGjhursgdsOgIMSQ4bqndTogJXMiCisKKyM6IGdpdGs6OTg1MAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiQuG7mSBs4buNYyIKKworIzogZ2l0azoxMDE0NgorbXNnaWQgIiIKKyJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKKyJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKK21zZ3N0ciAiIgorIkfhurdwIGzhu5dpIGtoaSDEkeG7jWMgdGjDtG5nIHRpbiBow6xuaCBo4buNYyBs4bqnbiBjaHV54buDbiBnaWFvOyB0aMO0bmcgdGluIG5ow6FuaCB2w6AgdGjhursgIgorInRyxrDhu5tjL3NhdSBz4bq9IGtow7RuZyBob8OgbiB0aGnhu4duLiIKKworIzogZ2l0azoxMTEyMworbXNnaWQgIlRhZyIKK21zZ3N0ciAiVGjhursiCisKKyM6IGdpdGs6MTExMjcKK21zZ2lkICJJZCIKK21zZ3N0ciAiSWQiCisKKyM6IGdpdGs6MTEyMTAKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAiSOG7mXAgdGhv4bqhaSBjaOG7jW4gcGjDtG5nIEdpdGsiCisKKyM6IGdpdGs6MTEyMjcKK21zZ2lkICJCIgorbXNnc3RyICJCIgorCisjOiBnaXRrOjExMjMwCittc2dpZCAiSSIKK21zZ3N0ciAiSSIKKworIzogZ2l0azoxMTM0OAorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiB24buBIGhp4buDbiB0aOG7iyBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MTEzNTEKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgIsSQ4buZIHLhu5luZyBiaeG7g3UgxJHhu5MgdOG7kWkgxJFhIChkw7JuZykiCisKKyM6IGdpdGs6MTEzNTUKKyMsIG5vLXRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICLEkOG7mSBy4buZbmcgxJHhu5MgdGjhu4sgdOG7kWkgxJFhICglIGPhu6dhIGLhuqNuZykiCisKKyM6IGdpdGs6MTEzNTgKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIkhp4buDbiB0aOG7iyBjw6FjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kiCisKKyM6IGdpdGs6MTEzNjEKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgorbXNnc3RyICJU4buxIGNo4buNbiAoxJHhu5kgZMOgaSkgU0hBMSIKKworIzogZ2l0azoxMTM2NQorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgIuG6qG4gdGhhbSBjaGnhur91IMSR4bq/biBtw6F5IGNo4bunIgorCisjOiBnaXRrOjExMzY5Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIkPDoWMgdMO5eSBjaOG7jW4gdHLDrG5oIGLDoHkgY8OhYyBraMOhYyBiaeG7h3QiCisKKyM6IGdpdGs6MTEzNzEKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAiS2hv4bqjbmcgY8OhY2ggdGFiIgorCisjOiBnaXRrOjExMzc0Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGPDoWMgdGjhursvxJHhuqd1IHh1bmcgcXVhbmgiCisKKyM6IGdpdGs6MTEzNzcKK21zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgorbXNnc3RyICJT4buRIGzGsOG7o25nIHRo4bq7L8SR4bqndSB04buRaSDEkWEgc+G6vSBoaeG7g24gdGjhu4siCisKKyM6IGdpdGs6MTEzODAKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIkdp4bubaSBo4bqhbiBjw6FjIGtow6FjIGJp4buHdCBjaG8gxJHGsOG7nW5nIGThuqtuIMSRw6MgbGnhu4d0IGvDqiIKKworIzogZ2l0azoxMTM4MworbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICJI4buXIHRy4bujIG3DoyBow7NhIG3hu5dpLWTDsm5nIgorCisjOiBnaXRrOjExMzg5IGdpdGs6MTE1MzYKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgIkPDtG5nIGPhu6Ugc28gc8OhbmggdOG7qyBiw6puIG5nb8OgaSIKKworIzogZ2l0azoxMTM5MAorbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAiQ2jhu41u4oCmIgorCisjOiBnaXRrOjExMzk1Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIGNodW5nIgorCisjOiBnaXRrOjExMzk4Cittc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgorbXNnc3RyICJEw7luZyBjw6FjIHdpZGdldCBjaOG7pyDEkeG7gSIKKworIzogZ2l0azoxMTQwMAorbXNnaWQgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiCittc2dzdHIgIijEkeG7gyB0aGF5IMSR4buVaSBj4bqnbiBraOG7n2kgxJHhu5luZyBs4bqhaSkiCisKKyM6IGdpdGs6MTE0MDIKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiKGhp4buHbiB04bqhaSBraMO0bmcgc+G6tW4gc8OgbmcpIgorCisjOiBnaXRrOjExNDEzCittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIk3DoHUgc+G6r2M6IGLhuqVtIHbDoG8gbsO6dCBwaMOtYSBkxrDhu5tpIMSR4buDIGNo4buNbiBtw6B1IgorCisjOiBnaXRrOjExNDE2Cittc2dpZCAiSW50ZXJmYWNlIgorbXNnc3RyICJHaWFvIGRp4buHbiIKKworIzogZ2l0azoxMTQxNworbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAiZ2lhbyBkaeG7h24iCisKKyM6IGdpdGs6MTE0MjAKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICJO4buBbiIKKworIzogZ2l0azoxMTQyMSBnaXRrOjExNDUxCittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAibuG7gW4iCisKKyM6IGdpdGs6MTE0MjQKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICJUaeG7gW4gY+G6o25oIgorCisjOiBnaXRrOjExNDI1Cittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAidGnhu4FuIGPhuqNuaCIKKworIzogZ2l0azoxMTQyOAorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAiU28gc8Ohbmg6IGTDsm5nIGPFqSIKKworIzogZ2l0azoxMTQyOQorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJkaWZmIGTDsm5nIGPFqSIKKworIzogZ2l0azoxMTQzMworbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKK21zZ3N0ciAiU28gc8Ohbmg6IGTDsm5nIG3hu5tpIgorCisjOiBnaXRrOjExNDM0Cittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgIm3DoHUgZMOybmcgbeG7m2kiCisKKyM6IGdpdGs6MTE0MzgKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAiU28gc8Ohbmg6IHBo4bqnbiDEkeG6p3UgY+G7p2EgxJFv4bqhbiIKKworIzogZ2l0azoxMTQ0MAorbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgIm3DoHUgY+G7p2EgcGjhuqduIMSR4bqndSBj4bunYSDEkW/huqFuIGtoaSBzbyBzw6FuaCIKKworIzogZ2l0azoxMTQ0NAorbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgorbXNnc3RyICJO4buBbiBkw7JuZyDEkcOhbmggZOG6pXUiCisKKyM6IGdpdGs6MTE0NDYKK21zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgorbXNnc3RyICJu4buBbiBkw7JuZyDEkcaw4bujYyDEkcOhbmggZOG6pXUiCisKKyM6IGdpdGs6MTE0NTAKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIk3DoHUgbuG7gW4iCisKKyM6IGdpdGs6MTE0NTkKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJQaMO0bmcgY2jhu686IGLhuqVtIHbDoG8gY8OhYyBuw7p0IOG7nyBkxrDhu5tpIMSR4buDIGNo4buNbiIKKworIzogZ2l0azoxMTQ2MQorbXNnaWQgIk1haW4gZm9udCIKK21zZ3N0ciAiUGjDtG5nIGNo4buvIGNow61uaCIKKworIzogZ2l0azoxMTQ2MgorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJQaMO0bmcgY2jhu68gZMO5bmcga2hpIHNvIHPDoW5oIgorCisjOiBnaXRrOjExNDYzCittc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKK21zZ3N0ciAiUGjDtG5nIGNo4buvIGdpYW8gZGnhu4duIgorCisjOiBnaXRrOjExNDg1Cittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAiQ8OhIG5ow6JuIGjDs2EgY8OhYyBjw6BpIMSR4bq3dCBjaG8gR2l0ayIKKworIzogZ2l0azoxMTQ5NAorbXNnaWQgIkdlbmVyYWwiCittc2dzdHIgIkNodW5nIgorCisjOiBnaXRrOjExNDk1Cittc2dpZCAiQ29sb3JzIgorbXNnc3RyICJNw6B1IHPhuq9jIgorCisjOiBnaXRrOjExNDk2Cittc2dpZCAiRm9udHMiCittc2dzdHIgIlBow7RuZyBjaOG7ryIKKworIzogZ2l0azoxMTU0NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGs6IGNo4buNbiBtw6B1IGNobyAlcyIKKworIzogZ2l0azoxMjA1OQorbXNnaWQgIiIKKyJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKKyIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKK21zZ3N0ciAiIgorIlLhuqV0IHRp4bq/YywgZ2l0ayBraMO0bmcgdGjhu4MgY2jhuqF5IFRjbC9UayBwaGnDqm4gYuG6o24gbsOgeS5cbiIKKyIgR2l0ayBj4bqnbiDDrXQgbmjhuqV0IGzDoCBUY2wvVGsgOC40LiIKKworIzogZ2l0azoxMjI2OQorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIktow7RuZyB0aOG7gyB0w6xtIHRo4bqleSBraG8gZ2l0IOG7nyDEkcOieS4iCisKKyM6IGdpdGs6MTIzMTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIsSQ4buRaSBz4buRIOKAnCVz4oCdIGNoxrBhIHLDtSByw6BuZzogduG7q2EgbMOgIMSRaeG7g20geMOpdCBkdXnhu4d0IHbhu6thIGzDoCB0w6puIHThuq1wIHRpbiIKKworIzogZ2l0azoxMjMyOAorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIsSQ4buRaSBz4buRIGNobyBnaXRrIGtow7RuZyBo4bujcCBs4buHOiIKKworI34gbXNnaWQgIm1jIgorI34gbXNnc3RyICJtYyIKKworI34gbXNnaWQgIm5leHQiCisjfiBtc2dzdHIgInRp4bq/cCIKKworI34gbXNnaWQgInByZXYiCisjfiBtc2dzdHIgInRyxrDhu5tjIgpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vemhfY24ucG8gYi9naXRrLWdpdC9wby96aF9jbi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2I3Zjg5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vemhfY24ucG8KQEAgLTAsMCArMSwxMzY3IEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdGsgdG8gU2ltcGxpZmllZCBDaGluZXNlLgorIworIyBUcmFuc2xhdG9yczoKKyMgWWFuS2UgPGlteWFua2VAMTYzLmNvbT4sIDIwMTcKKworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR2l0IENoaW5lc2UgTG9jYWxpemF0aW9uIFByb2plY3RcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjggMjM6MTErMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTctMDMtMTEgMDI6MjcrMDgwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogWWFuS2UgPGlteWFua2VAMTYzLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDaGluZXNlXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiTGFuZ3VhZ2U6IHpoX0NOXG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICLkuI3og73ojrflj5bmnKrlkIjlubbmlofku7bliJfooajvvJoiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjQwMworbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICLnnYDoibLmmL7npLrlt67lvIIiCisKKyM6IGdpdGs6MjE3IGdpdGs6MjQwMyBnaXRrOjgyNDkgZ2l0azo4MjgyCittc2dpZCAiTWFya3VwIHdvcmRzIgorbXNnc3RyICLmoIforrDmmL7npLrlt67lvIIiCisKKyM6IGdpdGs6MzI0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICLop6PmnpDniYjmnKzplJnor6/vvJoiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAi6L+Q6KGMIC0tYXJnc2NtZOWRveS7pOWHuumUmSIKKworIzogZ2l0azozOTMKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIuayoeaciemAieS4reaWh+S7tu+8mi0t5oyH5a6abWVyZ2Xlj4LmlbDkvYbmsqHmnInmnKrlkIjlubbnmoTmlofku7bjgIIiCisKKyM6IGdpdGs6Mzk2Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgIuayoeaciemAieS4reaWh+S7tu+8mi0t5oyH5a6abWVyZ2Xlj4LmlbDkvYbmsqHmnInmnKrlkIjlubbnmoTmlofku7blnKjmlofku7bkuK0iCisKKyM6IGdpdGs6NDE4IGdpdGs6NTY2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICLmiafooYxnaXQgbG9n5ZG95Luk5Ye66ZSZ77yaIgorCisjOiBnaXRrOjQzNiBnaXRrOjU4MgorbXNnaWQgIlJlYWRpbmciCittc2dzdHIgIuivu+WPluS4rSIKKworIzogZ2l0azo0OTYgZ2l0azo0NTQ5Cittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICLmj5DkuqTorrDlvZXor7vlj5bkuK0uLi4iCisKKyM6IGdpdGs6NDk5IGdpdGs6MTY0MSBnaXRrOjQ1NTIKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICLmnKrpgInkuK3ku7vkvZXmj5DkuqQiCisKKyM6IGdpdGs6MTQ0OSBnaXRrOjQwNjkgZ2l0azoxMjU4MworbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAi5ZG95Luk6KGMIgorCisjOiBnaXRrOjE1MTUKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgIuS4jeiDveino+aekGdpdCBsb2fovpPlh7rvvJoiCisKKyM6IGdpdGs6MTc0NAorbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCittc2dzdHIgIuaXoOWPr+eUqOaPkOS6pOS/oeaBryIKKworIzogZ2l0azoxOTA3IGdpdGs6MTkzNiBnaXRrOjQzMzkgZ2l0azo5Nzg5IGdpdGs6MTEzODggZ2l0azoxMTY2OAorbXNnaWQgIk9LIgorbXNnc3RyICLnoa7lrpoiCisKKyM6IGdpdGs6MTkzOCBnaXRrOjQzNDEgZ2l0azo5MjI1IGdpdGs6OTMwNCBnaXRrOjk0MzQgZ2l0azo5NTIwIGdpdGs6OTc5MQorIzogZ2l0azoxMTM4OSBnaXRrOjExNjY5Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICLlj5bmtogiCisKKyM6IGdpdGs6MjA4NworbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgIuabtOaWsCIKKworIzogZ2l0azoyMDg4Cittc2dpZCAiJlJlbG9hZCIKK21zZ3N0ciAi6YeN5paw5Yqg6L29IgorCisjOiBnaXRrOjIwODkKK21zZ2lkICJSZXJlYWQgcmUmZmVyZW5jZXMiCittc2dzdHIgIumHjeaWsOivu+WPluW8leeUqCIKKworIzogZ2l0azoyMDkwCittc2dpZCAiJkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAi5YiX5Ye65byV55SoKOWIhuaUr+S7peWPinRhZykiCisKKyM6IGdpdGs6MjA5MgorbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgorbXNnc3RyICLlkK/liqhnaXQgZ3Vp5a6i5oi356uvIgorCisjOiBnaXRrOjIwOTQKK21zZ2lkICImUXVpdCIKK21zZ3N0ciAi6YCA5Ye6IgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRmlsZSIKK21zZ3N0ciAi5paH5Lu2IgorCisjOiBnaXRrOjIwOTgKK21zZ2lkICImUHJlZmVyZW5jZXMiCittc2dzdHIgIuWBj+Wlveiuvue9riIKKworIzogZ2l0azoyMDk3Cittc2dpZCAiJkVkaXQiCittc2dzdHIgIue8lui+kSIKKworIzogZ2l0azoyMTAyCittc2dpZCAiJk5ldyB2aWV3Li4uIgorbXNnc3RyICLmlrDop4blm74uLi4iCisKKyM6IGdpdGs6MjEwMworbXNnaWQgIiZFZGl0IHZpZXcuLi4iCittc2dzdHIgIue8lui+keinhuWbvi4uLiIKKworIzogZ2l0azoyMTA0Cittc2dpZCAiJkRlbGV0ZSB2aWV3IgorbXNnc3RyICLliKDpmaTop4blm74iCisKKyM6IGdpdGs6MjEwNgorbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgIuaJgOacieaWh+S7tiIKKworIzogZ2l0azoyMTAxCittc2dpZCAiJlZpZXciCittc2dzdHIgIuinhuWbviIKKworIzogZ2l0azoyMTExIGdpdGs6MjEyMQorbXNnaWQgIiZBYm91dCBnaXRrIgorbXNnc3RyICLlhbPkuo5naXRrIgorCisjOiBnaXRrOjIxMTIgZ2l0azoyMTI2Cittc2dpZCAiJktleSBiaW5kaW5ncyIKK21zZ3N0ciAi5b+r5o236ZSuIgorCisjOiBnaXRrOjIxMTAgZ2l0azoyMTI1Cittc2dpZCAiJkhlbHAiCittc2dzdHIgIuW4ruWKqSIKKworIzogZ2l0azoyMjAzIGdpdGs6ODY4MQorbXNnaWQgIlNIQTEgSUQ6IgorbXNnc3RyICJTSEExIElE77yaIgorCisjOiBnaXRrOjIyNDcKK21zZ2lkICJSb3ciCittc2dzdHIgIuihjCIKKworIzogZ2l0azoyMjg1Cittc2dpZCAiRmluZCIKK21zZ3N0ciAi5p+l5om+IgorCisjOiBnaXRrOjIzMTMKK21zZ2lkICJjb21taXQiCittc2dzdHIgIuaPkOS6pCIKKworIzogZ2l0azoyMzE3IGdpdGs6MjMxOSBnaXRrOjQ3MTEgZ2l0azo0NzM0IGdpdGs6NDc1OCBnaXRrOjY3NzkgZ2l0azo2ODUxCisjOiBnaXRrOjY5MzYKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAi5YyF5ZCr77yaIgorCisjOiBnaXRrOjIzMjAgZ2l0azozNTUwIGdpdGs6MzU1NSBnaXRrOjQ3ODcKK21zZ2lkICJ0b3VjaGluZyBwYXRoczoiCittc2dzdHIgIuW9seWTjei3r+W+hO+8miIKKworIzogZ2l0azoyMzIxIGdpdGs6NDgwMQorbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICLlop7liqAv5Yig6Zmk5a2X56ym5Liy77yaIgorCisjOiBnaXRrOjIzMjIgZ2l0azo0ODAzCittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICLmlLnlj5jooYzljLnphY3vvJoiCisKKyM6IGdpdGs6MjMzMSBnaXRrOjIzMzMgZ2l0azo0NzkwCittc2dpZCAiRXhhY3QiCittc2dzdHIgIueyvuehruWMuemFjSIKKworIzogZ2l0azoyMzMzIGdpdGs6NDg3OCBnaXRrOjY3NDcKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICLlv73nlaXlpKflsI/lhpkiCisKKyM6IGdpdGs6MjMzMyBnaXRrOjQ3NjAgZ2l0azo0ODc2IGdpdGs6Njc0MworbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAi5q2j5YiZIgorCisjOiBnaXRrOjIzMzUgZ2l0azoyMzM2IGdpdGs6NDg5OCBnaXRrOjQ5MjggZ2l0azo0OTM1IGdpdGs6Njg3MiBnaXRrOjY5NDAKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICLmiYDmnInlrZfmrrUiCisKKyM6IGdpdGs6MjMzNiBnaXRrOjQ4OTUgZ2l0azo0OTI4IGdpdGs6NjgxMAorbXNnaWQgIkhlYWRsaW5lIgorbXNnc3RyICLmoIfpopgiCisKKyM6IGdpdGs6MjMzNyBnaXRrOjQ4OTUgZ2l0azo2ODEwIGdpdGs6Njk0MCBnaXRrOjc0MTMKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAi5o+Q5Lqk5rOo6YeKIgorCisjOiBnaXRrOjIzMzcgZ2l0azo0ODk1IGdpdGs6NDkwMCBnaXRrOjQ5MzUgZ2l0azo2ODEwIGdpdGs6NzM0OCBnaXRrOjg4NTkKKyM6IGdpdGs6ODg3NAorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAi5L2c6ICFIgorCisjOiBnaXRrOjIzMzcgZ2l0azo0ODk1IGdpdGs6NjgxMCBnaXRrOjczNTAKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIuaPkOS6pOiAhSIKKworIzogZ2l0azoyMzcxCittc2dpZCAiU2VhcmNoIgorbXNnc3RyICLmkJzntKIiCisKKyM6IGdpdGs6MjM3OQorbXNnaWQgIkRpZmYiCittc2dzdHIgIuW3ruW8giIKKworIzogZ2l0azoyMzgxCittc2dpZCAiT2xkIHZlcnNpb24iCittc2dzdHIgIuiAgeeJiOacrCIKKworIzogZ2l0azoyMzgzCittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIuaWsOeJiOacrCIKKworIzogZ2l0azoyMzg2Cittc2dpZCAiTGluZXMgb2YgY29udGV4dCIKK21zZ3N0ciAiRGlmZuS4iuS4i+aWh+aYvuekuuihjOaVsCIKKworIzogZ2l0azoyMzk2Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAi5b+955Wl56m65qC85L+u5pS5IgorCisjOiBnaXRrOjI0MDAgZ2l0azoyNDAyIGdpdGs6Nzk4MyBnaXRrOjgyMzUKK21zZ2lkICJMaW5lIGRpZmYiCittc2dzdHIgIuaMieihjOaYvuekuuW3ruW8giIKKworIzogZ2l0azoyNDY3Cittc2dpZCAiUGF0Y2giCittc2dzdHIgIuihpeS4gSIKKworIzogZ2l0azoyNDY5Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAi5qCRIgorCisjOiBnaXRrOjI2MzkgZ2l0azoyNjYwCittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICLmr5TovoPku47lvZPliY3mj5DkuqTliLDpgInkuK3mj5DkuqTnmoTlt67lvIIiCisKKyM6IGdpdGs6MjY0MCBnaXRrOjI2NjEKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIuavlOi+g+S7jumAieS4reaPkOS6pOWIsOW9k+WJjeaPkOS6pOeahOW3ruW8giIKKworIzogZ2l0azoyNjQxIGdpdGs6MjY2MgorbXNnaWQgIk1ha2UgcGF0Y2giCittc2dzdHIgIuWItuS9nOihpeS4gSIKKworIzogZ2l0azoyNjQyIGdpdGs6OTI4MworbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIuWIm+W7unRhZyIKKworIzogZ2l0azoyNjQzCittc2dpZCAiQ29weSBjb21taXQgc3VtbWFyeSIKK21zZ3N0ciAi5aSN5Yi25o+Q5Lqk5pGY6KaBIgorCisjOiBnaXRrOjI2NDQgZ2l0azo5NDE0Cittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIuWGmeWFpeaPkOS6pOWIsOaWh+S7tiIKKworIzogZ2l0azoyNjQ1Cittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgIuWIm+W7uuaWsOWIhuaUryIKKworIzogZ2l0azoyNjQ2Cittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIuWcqOatpOaPkOS6pOi/kOeUqOihpeS4gShjaGVycnktcGljaynlkb3ku6QiCisKKyM6IGdpdGs6MjY0NworbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIuWwhuWIhuaUr+WktChIRUFEKemHjee9ruWIsOatpOWkhCIKKworIzogZ2l0azoyNjQ4Cittc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAi5qCH6K6w5q2k5o+Q5LqkIgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAi6L+U5Zue5Yiw5qCH6K6wIgorCisjOiBnaXRrOjI2NTAKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAi5p+l5om+5pys5qyh5o+Q5Lqk55qE5a2Q5o+Q5Lqk5bm25qCH6K6wIgorCisjOiBnaXRrOjI2NTEKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAi5ZKM5bey5qCH6K6w55qE5o+Q5Lqk5L2c5q+U6L6DIgorCisjOiBnaXRrOjI2NTIgZ2l0azoyNjYzCittc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCittc2dzdHIgIuavlOi+g+S7juW9k+WJjeaPkOS6pOWIsOW3suagh+iusOaPkOS6pOeahOW3ruW8giIKKworIzogZ2l0azoyNjUzIGdpdGs6MjY2NAorbXNnaWQgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIgorbXNnc3RyICLmr5TovoPku47lt7LmoIforrDmj5DkuqTliLDlvZPliY3mj5DkuqTnmoTlt67lvIIiCisKKyM6IGdpdGs6MjY1NAorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAi5pKk6ZSAKHJldmVydCnmraTmj5DkuqQiCisKKyM6IGdpdGs6MjY3MAorbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAi5qOA5Ye6KGNoZWNrb3V0KeatpOWIhuaUryIKKworIzogZ2l0azoyNjcxCittc2dpZCAiUmVuYW1lIHRoaXMgYnJhbmNoIgorbXNnc3RyICLph43lkb3lkI0oUmVuYW1lKeatpOWIhuaUryIKKworIzogZ2l0azoyNjcyCittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICLliKDpmaQoUmVtb3ZlKeatpOWIhuaUryIKKworIzogZ2l0azoyNjczCittc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKK21zZ3N0ciAi5aSN5Yi25YiG5pSv5ZCN56ewIgorCisjOiBnaXRrOjI2ODAKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIumrmOS6ruatpOWkhCIKKworIzogZ2l0azoyNjgxCittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAi5Y+q6auY5Lqu5q2k5aSEIgorCisjOiBnaXRrOjI2ODIKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICLlpJbpg6hkaWZmIgorCisjOiBnaXRrOjI2ODMKK21zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgorbXNnc3RyICJCbGFtZeeItuaPkOS6pCIKKworIzogZ2l0azoyNjg0Cittc2dpZCAiQ29weSBwYXRoIgorbXNnc3RyICLlpI3liLbot6/lvoQiCisKKyM6IGdpdGs6MjY5MQorbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAi5pi+56S65q2k6KGM5Y6f5aeL5o+Q5LqkIgorCisjOiBnaXRrOjI2OTIKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgIuWcqOatpOihjOi/kOihjGdpdCBndWnlrqLmiLfnq6/nmoRibGFtZSIKKworIzogZ2l0azozMDM2Cittc2dpZCAiQWJvdXQgZ2l0ayIKK21zZ3N0ciAi5YWz5LqOZ2l0ayIKKworIzogZ2l0azozMDM4Cittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICJcbkdpdGsg4oCUIOS4gOS4qmdpdOeahOaPkOS6pOafpeeci+WZqFxuXG7CqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcblxu5ZyoR05V6K645Y+v6K+B5LiL5L2/55So5Lul5Y+K5YiG5Y+RIgorCisjOiBnaXRrOjMwNDYgZ2l0azozMTEzIGdpdGs6MTAwMDQKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAi5YWz6ZetIgorCisjOiBnaXRrOjMwNjcKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiR2l0a+W/q+aNt+mUriIKKworIzogZ2l0azozMDcwCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJHaXRr5b+r5o236ZSu77yaIgorCisjOiBnaXRrOjMwNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdOmAgOWHuiIKKworIzogZ2l0azozMDczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLVc+XHRcdOWFs+mXreeql+WPoyIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8SG9tZT5cdFx056e75Yqo5Yiw56ys5LiA5qyh5o+Q5LqkIgorCisjOiBnaXRrOjMwNzUKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kPlx0XHTnp7vliqjliLDmnIDlkI7kuIDmrKHmj5DkuqQiCisKKyM6IGdpdGs6MzA3NgorbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPFVwPiwgcCwga1x056e75Yqo5Yiw5LiK5LiA5qyh5o+Q5LqkIgorCisjOiBnaXRrOjMwNzcKK21zZ2lkICI8RG93bj4sIG4sIGpcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8RG93bj4sIG4sIGpcdOenu+WKqOWIsOS4i+S4gOasoeaPkOS6pCIKKworIzogZ2l0azozMDc4Cittc2dpZCAiPExlZnQ+LCB6LCBoXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPExlZnQ+LCB6LCBoXHTljoblj7LliJfooajnmoTkuIrkuIDpobkiCisKKyM6IGdpdGs6MzA3OQorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8UmlnaHQ+LCB4LCBsXHTljoblj7LliJfooajnmoTkuIvkuIDpobkiCisKKyM6IGdpdGs6MzA4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8JXMtbj5cdOWcqOWOhuWPsuWIl+ihqOS4reWJjeW+gOacrOasoeaPkOS6pOeahOesrG7kuKrniLbmj5DkuqQiCisKKyM6IGdpdGs6MzA4MQorbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx05LiK5LiA6aG15o+Q5Lqk5YiX6KGoIgorCisjOiBnaXRrOjMwODIKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlRG93bj5cdOS4i+S4gOmhteaPkOS6pOWIl+ihqCIKKworIzogZ2l0azozMDgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdOa7muWKqOWIsOaPkOS6pOWIl+ihqOmhtumDqCIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHTmu5rliqjliLDmj5DkuqTliJfooajlupXpg6giCisKKyM6IGdpdGs6MzA4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLVVwPlx05ZCR5LiK5rua5Yqo5LiA6KGM5o+Q5Lqk5YiX6KGoIgorCisjOiBnaXRrOjMwODYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtRG93bj5cdOWQkeS4i+a7muWKqOS4gOihjOaPkOS6pOWIl+ihqCIKKworIzogZ2l0azozMDg3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdOWQkeS4iua7muWKqOS4gOmhteaPkOS6pOWIl+ihqCIKKworIzogZ2l0azozMDg4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlRG93bj5cdOWQkeS4i+a7muWKqOS4gOmhteaPkOS6pOWIl+ihqCIKKworIzogZ2l0azozMDg5Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtVXA+XHTlkJHlkI7mn6Xmib4o5ZCR5LiK55qE77yM5pu05pma55qE5o+Q5LqkKSIKKworIzogZ2l0azozMDkwCittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1Eb3duPlx05ZCR5YmN5p+l5om+KOWQkeS4i+eahO+8jOabtOaXqeeahOaPkOS6pCkiCisKKyM6IGdpdGs6MzA5MQorbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RGVsZXRlPiwgYlx05ZCR5LiK5rua5YqoZGlmZuinhuWbvuS4gOmhtSIKKworIzogZ2l0azozMDkyCittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxCYWNrc3BhY2U+XHTlkJHkuIrmu5rliqhkaWZm6KeG5Zu+5LiA6aG1IgorCisjOiBnaXRrOjMwOTMKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPFNwYWNlPlx0XHTlkJHkuIvmu5rliqhkaWZm6KeG5Zu+5LiA6aG1IgorCisjOiBnaXRrOjMwOTQKK21zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCittc2dzdHIgInVcdFx05ZCR5LiK5rua5YqoZGlmZuinhuWbvjE46KGMIgorCisjOiBnaXRrOjMwOTUKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHTlkJHkuIvmu5rliqhkaWZm6KeG5Zu+MTjooYwiCisKKyM6IGdpdGs6MzA5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx05p+l5om+IgorCisjOiBnaXRrOjMwOTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx056e75Yqo5Yiw5LiL5LiA5qyh5p+l5om+5ZG95LitIgorCisjOiBnaXRrOjMwOTgKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8UmV0dXJuPlx0XHTnp7vliqjliLDkuIvkuIDmrKHmn6Xmib7lkb3kuK0iCisKKyM6IGdpdGs6MzA5OQorbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgorbXNnc3RyICJnXHRcdOi9rOWIsOaPkOS6pCIKKworIzogZ2l0azozMTAwCittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHTpgInkuK3mkJzntKLmoYYiCisKKyM6IGdpdGs6MzEwMQorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHTnp7vliqjliLDkuIrkuIDmrKHmn6Xmib7lkb3kuK0iCisKKyM6IGdpdGs6MzEwMgorbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx05rua5YqoZGlmZuinhuWbvuWIsOS4i+S4gOS4quaWh+S7tiIKKworIzogZ2l0azozMTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx05ZyoZGlmZuinhuWbvuS4reafpeaJvuS4i+S4gOatpOWRveS4rSIKKworIzogZ2l0azozMTA0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdOWcqGRpZmbop4blm77kuK3mn6Xmib7kuIrkuIDmrKHlkb3kuK0iCisKKyM6IGdpdGs6MzEwNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUCs+XHTlop7lpKflrZfkvZPlpKflsI8iCisKKyM6IGdpdGs6MzEwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtcGx1cz5cdOWinuWkp+Wtl+S9k+Wkp+WwjyIKKworIzogZ2l0azozMTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdOWHj+Wwj+Wtl+S9k+Wkp+WwjyIKKworIzogZ2l0azozMTA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWludXM+XHTlh4/lsI/lrZfkvZPlpKflsI8iCisKKyM6IGdpdGs6MzEwOQorbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdOabtOaWsCIKKworIzogZ2l0azozNTc0IGdpdGs6MzU4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICLliJvlu7rkuLTml7bnm67lvZXlh7rplJklc++8miIKKworIzogZ2l0azozNTk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIuS7jiVz6I635Y+WXCIlc1wi5Ye66ZSZ77yaIgorCisjOiBnaXRrOjM2NTkKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgIuaJp+ihjOWRveS7pOWksei0pe+8miIKKworIzogZ2l0azozODA4Cittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgIuaXoOatpOaPkOS6pCIKKworIzogZ2l0azozODIyCittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJnaXQgZ3VpIGJsYW1l77ya5omn6KGM5ZG95Luk5aSx6LSl77yaIgorCisjOiBnaXRrOjM4NTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICLkuI3og73or7vlj5blkIjlubblpLQobWVyZ2UgaGVhZCnvvJolcyIKKworIzogZ2l0azozODYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIuivu+WPlue0ouW8leWHuumUme+8miVzIgorCisjOiBnaXRrOjM4ODYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICLkuI3og73miafooYxnaXQgYmxhbWXvvJolcyIKKworIzogZ2l0azozODg5IGdpdGs6Njc3OAorbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAi5pCc57Si5LitIgorCisjOiBnaXRrOjM5MjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgIui/kOihjGdpdCBibGFtZeWHuumUme+8miVzIgorCisjOiBnaXRrOjM5NDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICLmraTooYzmnaXoh6rmj5DkuqQlc++8jOS4jeWcqOatpOinhuWbvuS4rSIKKworIzogZ2l0azozOTYzCittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAi5aSW6YOoZGlmZuafpeeci+WZqOWksei0pe+8miIKKworIzogZ2l0azo0MDY3Cittc2dpZCAiQWxsIGZpbGVzIgorbXNnc3RyICLmiYDmnInmlofku7YiCisKKyM6IGdpdGs6NDA5MQorbXNnaWQgIlZpZXciCittc2dzdHIgIuinhuWbviIKKworIzogZ2l0azo0MDk0Cittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIkdpdGvop4blm77lrprkuYkiCisKKyM6IGdpdGs6NDA5OAorbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAi6K6w5L2P5q2k6KeG5Zu+IgorCisjOiBnaXRrOjQwOTkKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICLlvJXnlKgo56m65qC85YiH5YiG55qE5YiX6KGoKe+8miIKKworIzogZ2l0azo0MTAwCittc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKK21zZ3N0ciAi5YiG5pSv5ZKMdGFncyIKKworIzogZ2l0azo0MTAxCittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIuaJgOacieW8leeUqCIKKworIzogZ2l0azo0MTAyCittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIuaJgOaciSjmnKzlnLAp5YiG5pSvIgorCisjOiBnaXRrOjQxMDMKK21zZ2lkICJBbGwgdGFncyIKK21zZ3N0ciAi5omA5pyJdGFnIgorCisjOiBnaXRrOjQxMDQKK21zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICLmiYDmnInov5znqIvot5/ouKrliIbmlK8iCisKKyM6IGdpdGs6NDEwNQorbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgIuaPkOS6pOS/oeaBryAo5q2j5YiZ6KGo6L6+5byPKe+8miIKKworIzogZ2l0azo0MTA2Cittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAi5L2c6ICF77yaIgorCisjOiBnaXRrOjQxMDcKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICLmj5DkuqTogIXvvJoiCisKKyM6IGdpdGs6NDEwOAorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi5o+Q5Lqk5L+h5oGv77yaIgorCisjOiBnaXRrOjQxMDkKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAi5Yy56YWN5omA5pyJ5o+Q5Lqk5L+h5oGv5qCH5YeGIgorCisjOiBnaXRrOjQxMTAKK21zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICLljLnphY3ml6Dmj5DkuqTkv6Hmga/moIflh4YiCisKKyM6IGdpdGs6NDExMQorbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICLmlofku7bkv67mlLnliJfooajvvJoiCisKKyM6IGdpdGs6NDExMgorbXNnaWQgIkZpeGVkIFN0cmluZyIKK21zZ3N0ciAi5Zu65a6a5a2X56ym5LiyIgorCisjOiBnaXRrOjQxMTMKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgIuato+WImeihqOi+vuW8j++8miIKKworIzogZ2l0azo0MTE0Cittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgIuaQnOe0ouWtl+espuS4su+8miIKKworIzogZ2l0azo0MTE1Cittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICLmj5DkuqTml6XmnJ8gKFwiMuaYn+acn+S5i+WJjVwiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCI15pyIIDE3LCAyMDA5IDE1OjI3OjM4XCIpOiIKKworIzogZ2l0azo0MTE2Cittc2dpZCAiU2luY2U6IgorbXNnc3RyICLoh6rvvJoiCisKKyM6IGdpdGs6NDExNworbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAi5Yiw77yaIgorCisjOiBnaXRrOjQxMTgKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAi6ZmQ5Yi2IOS4lC/miJYg6Lez6L+H5LiA5a6a5pWw6YeP55qE54mI5pysKOato+aVtOaVsCnvvJoiCisKKyM6IGdpdGs6NDExOQorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAi5pi+56S65pWw6YeP77yaIgorCisjOiBnaXRrOjQxMjAKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIui3s+i/h+aVsOmHj++8miIKKworIzogZ2l0azo0MTIxCittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAi5YW25LuW6YCJ6aG577yaIgorCisjOiBnaXRrOjQxMjIKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIuS4peagvOaMieaXpeacn+aVtOeQhiIKKworIzogZ2l0azo0MTIzCittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIuagh+iusOWIhuaUr+i+ueeVjCIKKworIzogZ2l0azo0MTI0Cittc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgorbXNnc3RyICLpmZDliLbliLDnrKzkuIDkuKrniLbmj5DkuqQiCisKKyM6IGdpdGs6NDEyNQorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICLnroDmmJPljoblj7IiCisKKyM6IGdpdGs6NDEyNgorbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgorbXNnc3RyICJnaXQgbG9n5ZG95Luk55qE6aKd5aSW5Y+C5pWw77yaIgorCisjOiBnaXRrOjQxMjcKK21zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKK21zZ3N0ciAi6L6T5YWl5paH5Lu25ZKM5paH5Lu25aS55p2l5byV55So77yM5q+P6KGM5LiA5Liq77yaIgorCisjOiBnaXRrOjQxMjgKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAi5ZG95Luk5Lqn55Sf5pu05aSa55qE5o+Q5Lqk5p2l5byV55So77yaIgorCisjOiBnaXRrOjQyNTIKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGs6IOe8lui+keinhuWbviIKKworIzogZ2l0azo0MjYwCittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIi0tIOeUqOadpemAieaLqeeJiOacrOeahOinhOWImSIKKworIzogZ2l0azo0MjY1Cittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICLop4blm77lkI3np7AiCisKKyM6IGdpdGs6NDM0MAorbXNnaWQgIkFwcGx5IChGNSkiCittc2dzdHIgIuW6lOeUqChGNSkiCisKKyM6IGdpdGs6NDM3OAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAi5o+Q5Lqk6YCJ5oup5Y+C5pWw6ZSZ6K+v77yaIgorCisjOiBnaXRrOjQ0MzMgZ2l0azo0NDg2IGdpdGs6NDk0OCBnaXRrOjQ5NjIgZ2l0azo2MjMyIGdpdGs6MTI1MjQgZ2l0azoxMjUyNQorbXNnaWQgIk5vbmUiCittc2dzdHIgIuaXoCIKKworIzogZ2l0azo1MDQ1IGdpdGs6NTA1MAorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIuWtkOaPkOS6pCIKKworIzogZ2l0azo1MDQ2Cittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIumdnuWtkOaPkOS6pCIKKworIzogZ2l0azo1MDUzIGdpdGs6NTA1OAorbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICLniLbmj5DkuqQiCisKKyM6IGdpdGs6NTA1NAorbXNnaWQgIk5vdCBhbmNlc3RvciIKK21zZ3N0ciAi6Z2e54i25o+Q5LqkIgorCisjOiBnaXRrOjUzNDgKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIuW3sua3u+WKoOWIsOe0ouW8leS9huacquaPkOS6pOeahOS/ruaUuSIKKworIzogZ2l0azo1Mzg0Cittc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCittc2dzdHIgIuacqua3u+WKoOWIsOe0ouW8leS4lOacquaPkOS6pOeahOS/ruaUuSIKKworIzogZ2l0azo3MTU4Cittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAi5pu05aSaIgorCisjOiBnaXRrOjcxNjEKK21zZ2lkICJtYW55IgorbXNnc3RyICLlvojlpJoiCisKKyM6IGdpdGs6NzM1MgorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJUYWdzOiIKKworIzogZ2l0azo3MzY5IGdpdGs6NzM3NSBnaXRrOjg4NTQKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgIueItuiKgueCuSIKKworIzogZ2l0azo3MzgwCittc2dpZCAiQ2hpbGQiCittc2dzdHIgIuWtkOiKgueCuSIKKworIzogZ2l0azo3Mzg5Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICLliIbmlK8iCisKKyM6IGdpdGs6NzM5MgorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgIuS5i+WQjueahHRhZyIKKworIzogZ2l0azo3Mzk1Cittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIuS5i+WJjeeahHRhZyIKKworIzogZ2l0azo3OTkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIuiOt+WPluW3ruW8gumUmeivr++8miVzIgorCisjOiBnaXRrOjg2NzkKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAi6L2s5Yiw77yaIgorCisjOiBnaXRrOjg3MDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAi55+t5qC85byP55qEU0hBMeaPkOS6pOWPtyVz5LiN5piO56Gu44CB5pyJ5q2n5LmJIgorCisjOiBnaXRrOjg3MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIueJiOacrCVz5pyq55+lIgorCisjOiBnaXRrOjg3MTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAi5o+Q5Lqk5Y+3KFNIQTEgaWQpJXPmnKrnn6UiCisKKyM6IGdpdGs6ODcxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgorbXNnc3RyICLniYjmnKwlc+S4jeWcqOW9k+WJjeinhuWbvuS4rSIKKworIzogZ2l0azo4ODYxIGdpdGs6ODg3NgorbXNnaWQgIkRhdGUiCittc2dzdHIgIuaXpeacnyIKKworIzogZ2l0azo4ODY0Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIuWtkOiKgueCuSIKKworIzogZ2l0azo4OTI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIumHjee9ruWIhuaUryVz5Yiw5q2k5aSEIgorCisjOiBnaXRrOjg5MjkKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAi5YiG56a755qE5aS0KGhlYWQp77ya5LiN6IO96YeN572uKHJlc2V0KSIKKworIzogZ2l0azo5MDM0IGdpdGs6OTA0MAorbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCittc2dzdHIgIui3s+i/h+WQiOW5tuaPkOS6pCIKKworIzogZ2l0azo5MDQ5IGdpdGs6OTA1NAorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAi6I635Y+W6KGl5LiBSUTlh7rplJkiCisKKyM6IGdpdGs6OTA1MCBnaXRrOjkwNTUKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIg4oCUIOWBnOatouS4rVxuIgorCisjOiBnaXRrOjkwNjAgZ2l0azo5MDYzIGdpdGs6OTA3MSBnaXRrOjkwODUgZ2l0azo5MDk0Cittc2dpZCAiQ29tbWl0ICIKK21zZ3N0ciAi5o+Q5LqkIgorCisjOiBnaXRrOjkwNjQKK21zZ2lkICIiCisiIGlzIHRoZSBzYW1lIHBhdGNoIGFzXG4iCisiICAgICAgICIKK21zZ3N0ciAiIOaYr+ebuOWQjOeahOihpeS4gShwYXRjaClcbiAgICAgICAiCisKKyM6IGdpdGs6OTA3MgorbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIOW3ruW8guadpeiHqlxuICAgICAgICIKKworIzogZ2l0azo5MDc0Cittc2dpZCAiIgorIkRpZmYgb2YgY29tbWl0czpcbiIKKyJcbiIKK21zZ3N0ciAi5o+Q5Lqk55qE5beu5byCKERpZmYp77yaXG5cbiIKKworIzogZ2l0azo5MDg2IGdpdGs6OTA5NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICLmnIklc+WtkOiKgueCuSDigJQg5YGc5q2i5LitXG4iCisKKyM6IGdpdGs6OTExNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgorbXNnc3RyICLlhpnlhaXmj5DkuqTliLDmlofku7blh7rplJnvvJolcyIKKworIzogZ2l0azo5MTIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKK21zZ3N0ciAi5q+U6L6D5o+Q5Lqk5beu5byC5Ye66ZSZ77yaJXMiCisKKyM6IGdpdGs6OTE2NgorbXNnaWQgIlRvcCIKK21zZ3N0ciAi6aG26YOoIgorCisjOiBnaXRrOjkxNjcKK21zZ2lkICJGcm9tIgorbXNnc3RyICLku44iCisKKyM6IGdpdGs6OTE3MgorbXNnaWQgIlRvIgorbXNnc3RyICLliLAiCisKKyM6IGdpdGs6OTE5NgorbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICLnlJ/miJDooaXkuIEocGF0Y2gpIgorCisjOiBnaXRrOjkxOTgKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAi5LuO77yaIgorCisjOiBnaXRrOjkyMDcKK21zZ2lkICJUbzoiCittc2dzdHIgIuWIsO+8miIKKworIzogZ2l0azo5MjE2Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAi5Y+N5ZCRKFJldmVyc2UpIgorCisjOiBnaXRrOjkyMTggZ2l0azo5NDI4Cittc2dpZCAiT3V0cHV0IGZpbGU6IgorbXNnc3RyICLovpPlh7rmlofku7bvvJoiCisKKyM6IGdpdGs6OTIyNAorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICLnlJ/miJAiCisKKyM6IGdpdGs6OTI2MgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAi5Yib5bu66KGl5LiBKHBhdGNoKeWHuumUme+8miIKKworIzogZ2l0azo5Mjg1IGdpdGs6OTQxNiBnaXRrOjk1MDQKK21zZ2lkICJJRDoiCittc2dzdHIgIklEOiIKKworIzogZ2l0azo5Mjk0Cittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJUYWflkI3np7DvvJoiCisKKyM6IGdpdGs6OTI5NworbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICJUYWfkv6Hmga/mmK/lj6/pgInnmoQiCisKKyM6IGdpdGs6OTI5OQorbXNnaWQgIlRhZyBtZXNzYWdlOiIKK21zZ3N0ciAiVGFn5L+h5oGv77yaIgorCisjOiBnaXRrOjkzMDMgZ2l0azo5NDc0Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICLliJvlu7oiCisKKyM6IGdpdGs6OTMyMQorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAi5pyq5oyH5a6adGFn5ZCN56ewIgorCisjOiBnaXRrOjkzMjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJUYWdcIiVzXCLlt7Lnu4/lrZjlnKgiCisKKyM6IGdpdGs6OTMzNQorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIuWIm+W7unRhZ+WHuumUme+8miIKKworIzogZ2l0azo5NDI1Cittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIuWRveS7pO+8miIKKworIzogZ2l0azo5NDMzCittc2dpZCAiV3JpdGUiCittc2dzdHIgIuWGmeWFpSIKKworIzogZ2l0azo5NDUxCittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICLlhpnlhaXmj5DkuqTlh7rplJnvvJoiCisKKyM6IGdpdGs6OTQ3MworbXNnaWQgIkNyZWF0ZSBicmFuY2giCittc2dzdHIgIuWIm+W7uuWIhuaUryIKKworIzogZ2l0azo5NDg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVuYW1lIGJyYW5jaCAlcyIKK21zZ3N0ciAi6YeN5ZG95ZCN5YiG5pSvJXMiCisKKyM6IGdpdGs6OTQ5MAorbXNnaWQgIlJlbmFtZSIKK21zZ3N0ciAi6YeN5ZG95ZCNIgorCisjOiBnaXRrOjk1MTQKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAi5ZCN56ew77yaIgorCisjOiBnaXRrOjk1MzgKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICLor7fmjIflrprmlrDliIbmlK/nmoTlkI3np7AiCisKKyM6IGdpdGs6OTU0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICLliIbmlK9cIiVzXCLlt7Lnu4/lrZjlnKjjgILopobnm5blroPvvJ8iCisKKyM6IGdpdGs6OTU4NworbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmV3IG5hbWUgZm9yIHRoZSBicmFuY2giCittc2dzdHIgIuivt+mHjeaWsOaMh+WumuaWsOWIhuaUr+eahOWQjeensCIKKworIzogZ2l0azo5NjUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIuaPkOS6pCVz5bey57uP5a2Y5Zyo5LqO5YiG5pSvJXPjgILnoa7lrprph43mlrDlupTnlKjlroPvvJ8iCisKKyM6IGdpdGs6OTY1NQorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICLmiZPooaXkuIHkuK0oQ2hlcnJ5LXBpY2tpbmcpIgorCisjOiBnaXRrOjk2NjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICLmiZPooaXkuIEoQ2hlcnJ5LXBpY2sp5aSx6LSl77yM5Zug5Li65pys5Zyw5L+u5pS55LqG5paH5Lu2XCIlc1wi44CCXG7or7fmj5DkuqQoY29tbWl0KeOAgemHjee9rihyZXNldCnmiJbmmoLlrZgoc3Rhc2gp5L+u5pS55ZCO6YeN6K+V44CCIgorCisjOiBnaXRrOjk2NzAKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIuaJk+ihpeS4gShDaGVycnktcGljaynlpLHotKXlm6DkuLrlkIjlubblhrLnqoHjgIJcbuS9oOaYr+WQpuW4jOacm+i/kOihjGdpdCBjaXRvb2wg5p2l6Kej5Yaz5Yay56qB77yfIgorCisjOiBnaXRrOjk2ODYgZ2l0azo5NzQ0Cittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgIuaXoOW3sue7j+aPkOS6pOeahOS/ruaUuSIKKworIzogZ2l0azo5NzEzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIG5vdCBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJldmVydCBpdD8iCittc2dzdHIgIuaPkOS6pCVz5LiN5YyF5ZCr5Zyo5YiG5pSvJXPkuK3vvIznoa7orqTlm57mu5oocmV2ZXJ0KeWug++8nyIKKworIzogZ2l0azo5NzE4Cittc2dpZCAiUmV2ZXJ0aW5nIgorbXNnc3RyICLlm57mu5rkuK0oUmV2ZXJ0aW5nKSIKKworIzogZ2l0azo5NzI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKKyJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIuWbnua7mihyZXZlcnQp5aSx6LSl77yM5Zug5Li65aaC5LiL55qE5pys5Zyw5paH5Lu25L+u5pS577yaJXNcbuivt+aPkOS6pChjb21taXQp44CB6YeN572uKHJlc2V0KeaIluiAheaaguWtmChzdGFzaCnmlLnlj5jlkI7ph43or5XjgIIiCisKKyM6IGdpdGs6OTczMAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICLlm57mu5oocmV2ZXJ0KeWksei0pe+8jOWboOS4uuWQiOW5tuWGsueqgeOAglxu5L2g5piv5ZCm5biM5pyb6L+Q6KGMZ2l0IGNpdG9vbOadpeino+WGs+WGsueqge+8nyIKKworIzogZ2l0azo5NzczCittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAi56Gu6K6k6YeN572uKHJlc2V0KSIKKworIzogZ2l0azo5Nzc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAi6YeN572uKHJlc2V0KeWIhuaUryVz5YiwJXPvvJ8iCisKKyM6IGdpdGs6OTc3NworbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICLph43nva4ocmVzZXQp57G75Z6L77yaIgorCisjOiBnaXRrOjk3ODAKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAi6L2v5oCn77ya56a75byA5bel5L2c5qCR77yM57Si5byV5pyq5pS55Y+YIgorCisjOiBnaXRrOjk3ODMKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgIua3t+WQiO+8muemu+W8gOW3peS9nOagkSjmnKrmlLnlj5gp77yM57Si5byV6YeN572uIgorCisjOiBnaXRrOjk3ODYKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAi56Gs5oCn77ya6YeN572u5bel5L2c5qCR5ZKM57Si5byVXG4o5Lii5byD5omA5pyJ55qE5pys5Zyw5L+u5pS5KSIKKworIzogZ2l0azo5ODAzCittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICLph43nva7kuK0oUmVzZXR0aW5nKSIKKworIzogZ2l0azo5ODc2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQSBsb2NhbCBicmFuY2ggbmFtZWQgJXMgZXhpc3RzIGFscmVhZHkiCittc2dzdHIgIuacrOWcsOWIhuaUryVz5bey57uP5a2Y5ZyoIgorCisjOiBnaXRrOjk4ODQKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIuajgOWHuuS4rShDaGVja2luZyBvdXQpIgorCisjOiBnaXRrOjk5NDMKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICLkuI3og73liKDpmaTlvZPliY3mo4Dlh7ooY2hlY2tvdXQp5YiG5pSvIgorCisjOiBnaXRrOjk5NDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAi5Zyo5YiG5pSvJXPkuIrnmoTmj5DkuqTkuI3lnKjlhbbku5bku7vkvZXliIbmlK/kuIrjgIJcbuehruiupOWIoOmZpOWIhuaUryVz77yfIgorCisjOiBnaXRrOjk5ODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCittc2dzdHIgIlRhZ3PlkozlpLTmjIfpkogoaGVhZHMp77yaJXMiCisKKyM6IGdpdGs6OTk5NworbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAi6L+H5ruk5ZmoIgorCisjOiBnaXRrOjEwMjkzCittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICLor7vlj5bmj5DkuqTmi5PmiZHkv6Hmga/lh7rplJnvvJvliIbmlK/lkozkuYvliY0v5LmL5ZCO55qEdGFn5L+h5oGv5bCG5LiN6IO95a6M5oiQ44CCIgorCisjOiBnaXRrOjExMjcwCittc2dpZCAiVGFnIgorbXNnc3RyICLmoIfnrb4oVGFnKSIKKworIzogZ2l0azoxMTI3NAorbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMTM1NworbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJHaXRr5a2X5L2T6YCJ5oupIgorCisjOiBnaXRrOjExMzc0Cittc2dpZCAiQiIKK21zZ3N0ciAi57KX5L2TIgorCisjOiBnaXRrOjExMzc3Cittc2dpZCAiSSIKK21zZ3N0ciAi5pac5L2TIgorCisjOiBnaXRrOjExNDk1Cittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICLmj5DkuqTliJfooajlsZXnpLrpgInpobkiCisKKyM6IGdpdGs6MTE0OTgKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgIuacgOWkp+WbvuWuveW6pijooYzmlbApIgorCisjOiBnaXRrOjExNTAyCisjLCBuby10Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAi5pyA5aSn5Zu+5a695bqmKCXnqpflj6Pnmb7liIbmr5QpIgorCisjOiBnaXRrOjExNTA1Cittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICLmmL7npLrmnKzlnLDkv67mlLkiCisKKyM6IGdpdGs6MTE1MDgKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgorbXNnc3RyICLoh6rliqjpgInmi6lTSEExKOmVv+W6pikiCisKKyM6IGdpdGs6MTE1MTIKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICLpmpDol4/ov5znqIvlvJXnlKgiCisKKyM6IGdpdGs6MTE1MTYKK21zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAi5beu5byCKERpZmYp5bGV56S66YCJ6aG5IgorCisjOiBnaXRrOjExNTE4Cittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIuWItuihqOespuWuveW6piIKKworIzogZ2l0azoxMTUyMQorbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCittc2dzdHIgIuaYvuekuuS4tOi/keeahHRhZ3MvaGVhZHMiCisKKyM6IGdpdGs6MTE1MjQKK21zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgorbXNnc3RyICLmnIDlpKd0YWdzL2hlYWRz5bGV56S65pWw6YePIgorCisjOiBnaXRrOjExNTI3Cittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJkaWZm5Lit5YiX5Ye65paH5Lu26ZmQ5Yi2IgorCisjOiBnaXRrOjExNTMwCittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIuWNleeLrOaWh+S7tue8lueggeaUr+aMgSIKKworIzogZ2l0azoxMTUzNiBnaXRrOjExNjgzCittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICLlpJbpg6jlt67lvIIoZGlmZinlt6XlhbciCisKKyM6IGdpdGs6MTE1MzcKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIumAieaLqS4uLiIKKworIzogZ2l0azoxMTU0MgorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAi5bi46KeE6YCJ6aG5IgorCisjOiBnaXRrOjExNTQ1Cittc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgorbXNnc3RyICLkvb/nlKjkuLvpopjlsI/pg6jku7YiCisKKyM6IGdpdGs6MTE1NDcKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIo6ZyA6YeN5ZCv55Sf5pWIKSIKKworIzogZ2l0azoxMTU0OQorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIo5b2T5YmN5LiN5Y+v55SoKSIKKworIzogZ2l0azoxMTU2MAorbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICLpopzoibLvvJrngrnlh7vmnaXpgInmi6kiCisKKyM6IGdpdGs6MTE1NjMKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgIueVjOmdoiIKKworIzogZ2l0azoxMTU2NAorbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAi55WM6Z2iIgorCisjOiBnaXRrOjExNTY3Cittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAi6IOM5pmvIgorCisjOiBnaXRrOjExNTY4IGdpdGs6MTE1OTgKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICLog4zmma8iCisKKyM6IGdpdGs6MTE1NzEKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICLliY3mma8iCisKKyM6IGdpdGs6MTE1NzIKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICLliY3mma8iCisKKyM6IGdpdGs6MTE1NzUKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIuW3ruW8gihEaWZmKe+8muiAgeS7o+eggeihjCIKKworIzogZ2l0azoxMTU3NgorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICLlt67lvIIoZGlmZinogIHku6PnoIHooYwiCisKKyM6IGdpdGs6MTE1ODAKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIuW3ruW8gihEaWZmKe+8muaWsOS7o+eggeihjCIKKworIzogZ2l0azoxMTU4MQorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICLlt67lvIIoZGlmZinmlrDku6PnoIHooYwiCisKKyM6IGdpdGs6MTE1ODUKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAi5beu5byCKERpZmYp77ya6KGl5LiB54mH5q615aS05L+h5oGvIgorCisjOiBnaXRrOjExNTg3Cittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAi5beu5byCKGRpZmYp6KGl5LiB54mH5q615aS05L+h5oGvIgorCisjOiBnaXRrOjExNTkxCittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIuW3suagh+iusOS7o+eggeihjOiDjOaZryIKKworIzogZ2l0azoxMTU5MworbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgIuW3suagh+iusOS7o+eggeihjOiDjOaZryIKKworIzogZ2l0azoxMTU5NworbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAi6YCJ5oup6IOM5pmvIgorCisjOiBnaXRrOjExNjA2Cittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAi5a2X5L2T77ya54K55Ye75p2l6YCJ5oupIgorCisjOiBnaXRrOjExNjA4Cittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICLkuLvlrZfkvZMiCisKKyM6IGdpdGs6MTE2MDkKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAi5beu5byCKERpZmYp5pi+56S65a2X5L2TIgorCisjOiBnaXRrOjExNjEwCittc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKK21zZ3N0ciAi55So5oi355WM6Z2i5a2X5L2TIgorCisjOiBnaXRrOjExNjMyCittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAiR2l0a+WBj+Wlveiuvue9riIKKworIzogZ2l0azoxMTY0MQorbXNnaWQgIkdlbmVyYWwiCittc2dzdHIgIuW4uOinhCIKKworIzogZ2l0azoxMTY0MgorbXNnaWQgIkNvbG9ycyIKK21zZ3N0ciAi6aKc6ImyIgorCisjOiBnaXRrOjExNjQzCittc2dpZCAiRm9udHMiCittc2dzdHIgIuWtl+S9kyIKKworIzogZ2l0azoxMTY5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGvvvJrpgInmi6npopzoibLnlKjkuo4lcyIKKworIzogZ2l0azoxMjIwNgorbXNnaWQgIiIKKyJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKKyIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKK21zZ3N0ciAi5a+55LiN6LW377yMZ2l0a+S4jeiDvei/kOihjOWcqOW9k+WJjeeJiOacrOeahFRjbC9Ua+S4reOAglxuR2l0a+i/kOihjOmcgOimgeacgOS9jueJiOacrOS4ulRjbC9UazguNOOAgiIKKworIzogZ2l0azoxMjQxNgorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIuWcqOatpOS9jee9ruacquWPkeeOsGdpdOS7k+W6k+OAgiIKKworIzogZ2l0azoxMjQ2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAi5LiN5piO56Gu5pyJ5q2n5LmJ55qE5Y+C5pWwXCIlc1wi77ya54mI5pys5ZKM5paH5Lu25ZCN56ewIgorCisjOiBnaXRrOjEyNDc1Cittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAi6L+Q6KGMZ2l0a+WPguaVsOmUmeivr++8miIKZGlmZiAtLWdpdCBhL2dpdHdlYi9JTlNUQUxMIGIvZ2l0d2ViL0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU4ZTZiMwotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9JTlNUQUxMCkBAIC0wLDAgKzEsMzI4IEBACitHSVQgd2ViIEludGVyZmFjZSAoZ2l0d2ViKSBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXJzdCB5b3UgaGF2ZSB0byBnZW5lcmF0ZSBnaXR3ZWIuY2dpIGZyb20gZ2l0d2ViLnBlcmwgdXNpbmcKKyJtYWtlIGdpdHdlYiIsIHRoZW4gIm1ha2UgaW5zdGFsbC1naXR3ZWIiIGFwcHJvcHJpYXRlIGZpbGVzCisoZ2l0d2ViLmNnaSwgZ2l0d2ViLmpzLCBnaXR3ZWIuY3NzLCBnaXQtbG9nby5wbmcgYW5kIGdpdC1mYXZpY29uLnBuZykKK3RvIHRoZWlyIGRlc3RpbmF0aW9uLiBGb3IgZXhhbXBsZSBpZiBnaXQgd2FzIChvciBpcykgaW5zdGFsbGVkIHdpdGgKKy91c3IgcHJlZml4IGFuZCBnaXR3ZWJkaXIgaXMgL3Zhci93d3cvY2dpLWJpbiwgeW91IGNhbiBkbworCisJJCBtYWtlIHByZWZpeD0vdXNyIGdpdHdlYiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IyBhcyB5b3Vyc2VsZgorCSMgbWFrZSBnaXR3ZWJkaXI9L3Zhci93d3cvY2dpLWJpbiBpbnN0YWxsLWdpdHdlYiAgICAgOyMgYXMgcm9vdAorCitBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gdXNlIGF1dG9jb25mIGdlbmVyYXRlZCAuL2NvbmZpZ3VyZSBzY3JpcHQgdG8KK3NldCB1cCBwYXRoIHRvIGdpdCBiaW5hcmllcyAodmlhIGNvbmZpZy5tYWsuYXV0b2dlbiksIHNvIHlvdSBjYW4gd3JpdGUKK2luc3RlYWQKKworCSQgbWFrZSBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICA7IyBhcyB5b3Vyc2VsZgorCSQgLi9jb25maWd1cmUgLS1wcmVmaXg9L3VzciAgICAgICAgICA7IyBhcyB5b3Vyc2VsZgorCSQgbWFrZSBnaXR3ZWIgICAgICAgICAgICAgICAgICAgICAgICA7IyBhcyB5b3Vyc2VsZgorCSMgbWFrZSBnaXR3ZWJkaXI9L3Zhci93d3cvY2dpLWJpbiBcCisJICAgICAgIGluc3RhbGwtZ2l0d2ViICAgICAgICAgICAgICAgIDsjIGFzIHJvb3QKKworVGhlIGFib3ZlIGV4YW1wbGUgYXNzdW1lcyB0aGF0IHlvdXIgd2ViIHNlcnZlciBpcyBjb25maWd1cmVkIHRvIHJ1bgorW2V4ZWN1dGFibGVdIGZpbGVzIGluIC92YXIvd3d3L2NnaS1iaW4vIGFzIHNlcnZlciBzY3JpcHRzIChhcyBDR0kKK3NjcmlwdHMpLgorCisKK1JlcXVpcmVtZW50cworLS0tLS0tLS0tLS0tCisKKyAtIENvcmUgZ2l0IHRvb2xzCisgLSBQZXJsIDUuOAorIC0gUGVybCBtb2R1bGVzOiBDR0ksIEVuY29kZSwgRmNudGwsIEZpbGU6OkZpbmQsIEZpbGU6OkJhc2VuYW1lLgorIC0gd2ViIHNlcnZlcgorCitUaGUgZm9sbG93aW5nIG9wdGlvbmFsIFBlcmwgbW9kdWxlcyBhcmUgcmVxdWlyZWQgZm9yIGV4dHJhIGZlYXR1cmVzCisgLSBDR0k6OkZhc3QgYW5kIEZDR0kgLSBmb3IgcnVubmluZyBnaXR3ZWIgYXMgRmFzdENHSSBzY3JpcHQKKyAtIEhUTUw6OlRhZ0Nsb3VkIC0gZm9yIGZhbmN5IHRhZyBjbG91ZCBpbiBwcm9qZWN0IGxpc3QgdmlldworIC0gSFRUUDo6RGF0ZSBvciBUaW1lOjpQYXJzZURhdGUgLSB0byBzdXBwb3J0IElmLU1vZGlmaWVkLVNpbmNlIGZvciBmZWVkcworCisKK0J1aWxkIHRpbWUgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlZSBhbHNvICJIb3cgdG8gY29uZmlndXJlIGdpdHdlYiBmb3IgeW91ciBsb2NhbCBzeXN0ZW0iIHNlY3Rpb24gYmVsb3cuCisKKy0gVGhlcmUgYXJlIG1hbnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2hpY2ggYWZmZWN0IGJ1aWxkaW5nIG9mCisgIGdpdHdlYi5jZ2k7IHNlZSAiZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBnaXR3ZWIiIHNlY3Rpb24gaW4gbWFpbgorICAodG9wIGRpcikgTWFrZWZpbGUsIGFuZCBpbnN0cnVjdGlvbnMgZm9yIGJ1aWxkaW5nIGdpdHdlYiB0YXJnZXQuCisKKyAgT25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCBpcyB3aGVyZSB0byBmaW5kIHRoZSBnaXQgd3JhcHBlciBiaW5hcnkuIEdpdHdlYgorICB0cmllcyB0byBmaW5kIHRoZSBnaXQgd3JhcHBlciBhdCAkKGJpbmRpcikvZ2l0LCBzbyB5b3UgaGF2ZSB0byBzZXQgJGJpbmRpcgorICB3aGVuIGJ1aWxkaW5nIGdpdHdlYi5jZ2ksIG9yICRwcmVmaXggZnJvbSB3aGljaCAkYmluZGlyIGlzIGRlcml2ZWQuIElmCisgIHlvdSBidWlsZCBhbmQgaW5zdGFsbCBnaXR3ZWIgdG9nZXRoZXIgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZ2l0IHN1aXRlLAorICB0aGVyZSBzaG91bGQgYmUgbm8gcHJvYmxlbXMuIE90aGVyd2lzZSwgaWYgZ2l0IHdhcyBmb3IgZXhhbXBsZQorICBpbnN0YWxsZWQgZnJvbSBhIGJpbmFyeSBwYWNrYWdlLCB5b3UgaGF2ZSB0byBzZXQgJHByZWZpeCAob3IgJGJpbmRpcikKKyAgYWNjb3JkaW5nbHkuCisKKy0gQW5vdGhlciBpbXBvcnRhbnQgaXNzdWUgaXMgd2hlcmUgYXJlIGdpdCByZXBvc2l0b3JpZXMgeW91IHdhbnQgdG8gbWFrZQorICBhdmFpbGFibGUgdG8gZ2l0d2ViLiBCeSBkZWZhdWx0IGdpdHdlYiBzZWFyY2hlcyBmb3IgcmVwb3NpdG9yaWVzIHVuZGVyCisgIC9wdWIvZ2l0OyBpZiB5b3Ugd2FudCB0byBoYXZlIHByb2plY3RzIHNvbWV3aGVyZSBlbHNlLCBsaWtlIC9ob21lL2dpdCwKKyAgdXNlIEdJVFdFQl9QUk9KRUNUUk9PVCBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgIEJ5IGRlZmF1bHQgYWxsIGdpdCByZXBvc2l0b3JpZXMgdW5kZXIgcHJvamVjdHJvb3QgYXJlIHZpc2libGUgYW5kCisgIGF2YWlsYWJsZSB0byBnaXR3ZWIuIFRoZSBsaXN0IG9mIHByb2plY3RzIGlzIGdlbmVyYXRlZCBieSBkZWZhdWx0IGJ5CisgIHNjYW5uaW5nIHRoZSBwcm9qZWN0cm9vdCBkaXJlY3RvcnkgZm9yIGdpdCByZXBvc2l0b3JpZXMuIFRoaXMgY2FuIGJlCisgIGNoYW5nZWQgKGNvbmZpZ3VyZWQpIGFzIGRlc2NyaWJlZCBpbiAiR2l0d2ViIHJlcG9zaXRvcmllcyIgc2VjdGlvbgorICBiZWxvdy4KKworICBOb3RlIHRoYXQgZ2l0d2ViIGRlYWxzIGRpcmVjdGx5IHdpdGggdGhlIG9iamVjdCBkYXRhYmFzZSwgYW5kIGRvZXMgbm90CisgIG5lZWQgYSB3b3JraW5nIGRpcmVjdG9yeTsgdGhlIG5hbWUgb2YgdGhlIHByb2plY3QgaXMgdGhlIG5hbWUgb2YgaXRzCisgIHJlcG9zaXRvcnkgb2JqZWN0IGRhdGFiYXNlLCB1c3VhbGx5IHByb2plY3RuYW1lLmdpdCBmb3IgYmFyZQorICByZXBvc2l0b3JpZXMuIElmIHlvdSB3YW50IHRvIHByb3ZpZGUgZ2l0d2ViIGFjY2VzcyB0byBub24tYmFyZSAobGl2ZSkKKyAgcmVwb3NpdG9yaWVzLCB5b3UgY2FuIG1ha2UgcHJvamVjdG5hbWUuZ2l0IGEgc3ltYm9saWMgbGluayB1bmRlcgorICBwcm9qZWN0cm9vdCBsaW5raW5nIHRvIHByb2plY3RuYW1lLy5naXQgKGJ1dCBpdCBpcyBqdXN0CisgIGEgc3VnZ2VzdGlvbikuCisKKy0gWW91IGNhbiBjb250cm9sIHdoZXJlIGdpdHdlYiB0cmllcyB0byBmaW5kIGl0cyBtYWluIENTUyBzdHlsZSBmaWxlLAorICBpdHMgSmF2YVNjcmlwdCBmaWxlLCBpdHMgZmF2aWNvbiBhbmQgbG9nbyB3aXRoIHRoZSBHSVRXRUJfQ1NTLCBHSVRXRUJfSlMKKyAgR0lUV0VCX0ZBVklDT04gYW5kIEdJVFdFQl9MT0dPIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiBCeSBkZWZhdWx0CisgIGdpdHdlYiB0cmllcyB0byBmaW5kIHRoZW0gaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIGdpdHdlYi5jZ2kgc2NyaXB0LgorCistIFlvdSBjYW4gb3B0aW9uYWxseSBnZW5lcmF0ZSBtaW5pZmllZCB2ZXJzaW9ucyBvZiBnaXR3ZWIuanMgYW5kIGdpdHdlYi5jc3MKKyAgYnkgZGVmaW5pbmcgdGhlIEpTTUlOIGFuZCBDU1NNSU4gYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuIEJ5IGRlZmF1bHQKKyAgdGhlIG5vbi1taW5pZmllZCB2ZXJzaW9ucyB3aWxsIGJlIHVzZWQuIE5PVEU6IGlmIHlvdSBlbmFibGUgdGhpcyBvcHRpb24sCisgIHN1YnN0aXR1dGUgZ2l0d2ViLm1pbi5qcyBhbmQgZ2l0d2ViLm1pbi5jc3MgZm9yIGFsbCB1c2VzIG9mIGdpdHdlYi5qcyBhbmQKKyAgZ2l0d2ViLmNzcyBpbiB0aGUgaGVscCBmaWxlcy4KKworCitIb3cgdG8gY29uZmlndXJlIGdpdHdlYiBmb3IgeW91ciBsb2NhbCBzeXN0ZW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB3aGVuIGJ1aWxkaW5nIEdJVDoKKworICogR0lUX0JJTkRJUgorICAgUG9pbnRzIHdoZXJlIHRvIGZpbmQgdGhlIGdpdCBleGVjdXRhYmxlLiAgWW91IHNob3VsZCBzZXQgaXQgdXAgdG8KKyAgIHRoZSBwbGFjZSB3aGVyZSB0aGUgZ2l0IGJpbmFyeSB3YXMgaW5zdGFsbGVkICh1c3VhbGx5IC91c3IvYmluKSBpZiB5b3UKKyAgIGRvbid0IGluc3RhbGwgZ2l0IGZyb20gc291cmNlcyB0b2dldGhlciB3aXRoIGdpdHdlYi4gIFtEZWZhdWx0OiAkKGJpbmRpcildCisgKiBHSVRXRUJfU0lURU5BTUUKKyAgIFNob3duIGluIHRoZSB0aXRsZSBvZiBhbGwgZ2VuZXJhdGVkIHBhZ2VzLCBkZWZhdWx0cyB0byB0aGUgc2VydmVyIG5hbWUKKyAgIChTRVJWRVJfTkFNRSBDR0kgZW52aXJvbm1lbnQgdmFyaWFibGUpIGlmIG5vdCBzZXQuIFtObyBkZWZhdWx0XQorICogR0lUV0VCX1BST0pFQ1RST09UCisgICBUaGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBwcm9qZWN0cyBzaG93biBieSBnaXR3ZWIuIE11c3QgYmUgc2V0CisgICBjb3JyZWN0bHkgZm9yIGdpdHdlYiB0byBmaW5kIHJlcG9zaXRvcmllcyB0byBkaXNwbGF5LiAgU2VlIGFsc28KKyAgICJHaXR3ZWIgcmVwb3NpdG9yaWVzIiBpbiB0aGUgSU5TVEFMTCBmaWxlIGZvciBnaXR3ZWIuICBbRGVmYXVsdDogL3B1Yi9naXRdCisgKiBHSVRXRUJfUFJPSkVDVF9NQVhERVBUSAorICAgVGhlIGZpbGVzeXN0ZW0gdHJhdmVyc2luZyBsaW1pdCBmb3IgZ2V0dGluZyB0aGUgcHJvamVjdCBsaXN0OyB0aGUgbnVtYmVyCisgICBpcyB0YWtlbiBhcyBkZXB0aCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdHJvb3QuICBJdCBpcyB1c2VkIHdoZW4KKyAgIEdJVFdFQl9MSVNUIGlzIGEgZGlyZWN0b3J5IChvciBpcyBub3Qgc2V0OyB0aGVuIHByb2plY3Qgcm9vdCBpcyB1c2VkKS4KKyAgIFRoaXMgaXMgbWVhbnQgdG8gc3BlZWQgdXAgcHJvamVjdCBsaXN0aW5nIG9uIGxhcmdlIHdvcmsgdHJlZXMgYnkgbGltaXRpbmcKKyAgIHNlYXJjaCBkZXB0aC4gIFtEZWZhdWx0OiAyMDA3XQorICogR0lUV0VCX0xJU1QKKyAgIFBvaW50cyB0byBhIGRpcmVjdG9yeSB0byBzY2FuIGZvciBwcm9qZWN0cyAoZGVmYXVsdHMgdG8gcHJvamVjdCByb290CisgICBpZiBub3Qgc2V0IC8gaWYgZW1wdHkpIG9yIHRvIGEgZmlsZSB3aXRoIGV4cGxpY2l0IGxpc3Rpbmcgb2YgcHJvamVjdHMKKyAgICh0b2dldGhlciB3aXRoIHByb2plY3RzJyBvd25lcnNoaXApLiBTZWUgIkdlbmVyYXRpbmcgcHJvamVjdHMgbGlzdAorICAgdXNpbmcgZ2l0d2ViIiBpbiBJTlNUQUxMIGZpbGUgZm9yIGdpdHdlYiB0byBmaW5kIG91dCBob3cgdG8gZ2VuZXJhdGUKKyAgIHN1Y2ggZmlsZSBmcm9tIHNjYW4gb2YgYSBkaXJlY3RvcnkuIFtObyBkZWZhdWx0LCB3aGljaCBtZWFucyB1c2Ugcm9vdAorICAgZGlyZWN0b3J5IGZvciBwcm9qZWN0c10KKyAqIEdJVFdFQl9FWFBPUlRfT0sKKyAgIFNob3cgcmVwb3NpdG9yeSBvbmx5IGlmIHRoaXMgZmlsZSBleGlzdHMgKGluIHJlcG9zaXRvcnkpLiAgT25seQorICAgZWZmZWN0aXZlIGlmIHRoaXMgdmFyaWFibGUgZXZhbHVhdGVzIHRvIHRydWUuICBbTm8gZGVmYXVsdCAvIE5vdCBzZXRdCisgKiBHSVRXRUJfU1RSSUNUX0VYUE9SVAorICAgT25seSBhbGxvdyB2aWV3aW5nIG9mIHJlcG9zaXRvcmllcyBhbHNvIHNob3duIG9uIHRoZSBvdmVydmlldyBwYWdlLgorICAgVGhpcyBmb3IgZXhhbXBsZSBtYWtlcyBHSVRXRUJfRVhQT1JUX09LIHRvIGRlY2lkZSBpZiByZXBvc2l0b3J5IGlzCisgICBhdmFpbGFibGUgYW5kIG5vdCBvbmx5IGlmIGl0IGlzIHNob3duLiAgSWYgR0lUV0VCX0xJU1QgcG9pbnRzIHRvCisgICBmaWxlIHdpdGggbGlzdCBvZiBwcm9qZWN0LCBvbmx5IHRob3NlIHJlcG9zaXRvcmllcyBsaXN0ZWQgd291bGQgYmUKKyAgIGF2YWlsYWJsZSBmb3IgZ2l0d2ViLiAgW05vIGRlZmF1bHRdCisgKiBHSVRXRUJfSE9NRVRFWFQKKyAgIFBvaW50cyB0byBhbiAuaHRtbCBmaWxlIHdoaWNoIGlzIGluY2x1ZGVkIG9uIHRoZSBnaXR3ZWIgcHJvamVjdAorICAgb3ZlcnZpZXcgcGFnZSAoJ3Byb2plY3RzX2xpc3QnIHZpZXcpLCBpZiBpdCBleGlzdHMuICBSZWxhdGl2ZSB0bworICAgZ2l0d2ViLmNnaSBzY3JpcHQuICBbRGVmYXVsdDogaW5kZXh0ZXh0Lmh0bWxdCisgKiBHSVRXRUJfU0lURV9IVE1MX0hFQURfU1RSSU5HCisgICBodG1sIHNuaXBwZXQgdG8gaW5jbHVkZSBpbiB0aGUgPGhlYWQ+IHNlY3Rpb24gb2YgZWFjaCBwYWdlLiBbTm8gZGVmYXVsdF0KKyAqIEdJVFdFQl9TSVRFX0hFQURFUgorICAgRmlsZW5hbWUgb2YgaHRtbCB0ZXh0IHRvIGluY2x1ZGUgYXQgdG9wIG9mIGVhY2ggcGFnZS4gIFJlbGF0aXZlIHRvCisgICBnaXR3ZWIuY2dpIHNjcmlwdC4gIFtObyBkZWZhdWx0XQorICogR0lUV0VCX1NJVEVfRk9PVEVSCisgICBGaWxlbmFtZSBvZiBodG1sIHRleHQgdG8gaW5jbHVkZSBhdCBib3R0b20gb2YgZWFjaCBwYWdlLiAgUmVsYXRpdmUgdG8KKyAgIGdpdHdlYi5jZ2kgc2NyaXB0LiAgW05vIGRlZmF1bHRdCisgKiBHSVRXRUJfSE9NRV9MSU5LX1NUUgorICAgU3RyaW5nIG9mIHRoZSBob21lIGxpbmsgb24gdG9wIG9mIGFsbCBwYWdlcywgbGVhZGluZyB0byAkaG9tZV9saW5rCisgICAodXN1YWxseSBtYWluIGdpdHdlYiBwYWdlLCB3aGljaCBtZWFucyBwcm9qZWN0cyBsaXN0KS4gIFVzZWQgYXMgZmlyc3QKKyAgIHBhcnQgb2YgZ2l0d2ViIHZpZXcgImJyZWFkY3J1bWIgdHJhaWwiOiA8aG9tZT4gLyA8cHJvamVjdD4gLyA8dmlldz4uCisgICBbRGVmYXVsdDogcHJvamVjdHNdCisgKiBHSVRXRUJfU0lURU5BTUUKKyAgIE5hbWUgb2YgeW91ciBzaXRlIG9yIG9yZ2FuaXphdGlvbiB0byBhcHBlYXIgaW4gcGFnZSB0aXRsZXMuICBTZXQgaXQKKyAgIHRvIHNvbWV0aGluZyBkZXNjcmlwdGl2ZSBmb3IgY2xlYXJlciBib29rbWFya3MgZXRjLiAgSWYgbm90IHNldAorICAgKGlmIGVtcHR5KSBnaXR3ZWIgdXNlcyAiJFNFUlZFUl9OQU1FIEdpdCIsIG9yICJVbnRpdGxlZCBHaXQiIGlmCisgICBTRVJWRVJfTkFNRSBDR0kgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCAoZS5nLiBpZiBydW5uaW5nCisgICBnaXR3ZWIgYXMgc3RhbmRhbG9uZSBzY3JpcHQpLiAgW05vIGRlZmF1bHRdCisgKiBHSVRXRUJfQkFTRV9VUkwKKyAgIEdpdCBiYXNlIFVSTHMgdXNlZCBmb3IgVVJMIHRvIHdoZXJlIGZldGNoIHByb2plY3QgZnJvbSwgaS5lLiBmdWxsCisgICBVUkwgaXMgIiRnaXRfYmFzZV91cmwvJHByb2plY3QiLiAgU2hvd24gb24gcHJvamVjdHMgc3VtbWFyeSBwYWdlLgorICAgUmVwb3NpdG9yeSBVUkwgZm9yIHByb2plY3QgY2FuIGJlIGFsc28gY29uZmlndXJlZCBwZXIgcmVwb3NpdG9yeTsgdGhpcworICAgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIFVSTHMgY29tcG9zZWQgZnJvbSBiYXNlIFVSTCBhbmQgYSBwcm9qZWN0IG5hbWUuCisgICBOb3RlIHRoYXQgeW91IGNhbiBzZXR1cCBtdWx0aXBsZSBiYXNlIFVSTHMgKGZvciBleGFtcGxlIG9uZSBmb3IKKyAgIGdpdDovLyBwcm90b2NvbCBhY2Nlc3MsIGFub3RoZXIgZm9yIGh0dHA6Ly8gYWNjZXNzKSBmcm9tIHRoZSBnaXR3ZWIKKyAgIGNvbmZpZyBmaWxlLiAgW05vIGRlZmF1bHRdCisgKiBHSVRXRUJfQ1NTCisgICBQb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHlvdSBwdXQgZ2l0d2ViLmNzcyBvbiB5b3VyIHdlYiBzZXJ2ZXIKKyAgIChvciB0byBiZSBtb3JlIGdlbmVyaWMsIHRoZSBVUkkgb2YgZ2l0d2ViIHN0eWxlc2hlZXQpLiAgUmVsYXRpdmUgdG8gdGhlCisgICBiYXNlIFVSSSBvZiBnaXR3ZWIuICBOb3RlIHRoYXQgeW91IGNhbiBzZXR1cCBtdWx0aXBsZSBzdHlsZXNoZWV0cyBmcm9tCisgICB0aGUgZ2l0d2ViIGNvbmZpZyBmaWxlLiAgW0RlZmF1bHQ6IHN0YXRpYy9naXR3ZWIuY3NzIChvcgorICAgc3RhdGljL2dpdHdlYi5taW4uY3NzIGlmIHRoZSBDU1NNSU4gdmFyaWFibGUgaXMgZGVmaW5lZCAvIENTUyBtaW5pZmllcgorICAgaXMgdXNlZCldCisgKiBHSVRXRUJfSlMKKyAgIFBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgeW91IHB1dCBnaXR3ZWIuanMgb24geW91ciB3ZWIgc2VydmVyCisgICAob3IgdG8gYmUgbW9yZSBnZW5lcmljIFVSSSBvZiBKYXZhU2NyaXB0IGNvZGUgdXNlZCBieSBnaXR3ZWIpLgorICAgUmVsYXRpdmUgdG8gYmFzZSBVUkkgb2YgZ2l0d2ViLiAgW0RlZmF1bHQ6IHN0YXRpYy9naXR3ZWIuanMgKG9yCisgICBzdGF0aWMvZ2l0d2ViLm1pbi5qcyBpZiBKU01JTiBidWlsZCB2YXJpYWJsZSBpcyBkZWZpbmVkIC8gSmF2YVNjcmlwdAorICAgbWluaWZpZXIgaXMgdXNlZCldCisgKiBDU1NNSU4sIEpTTUlOCisgICBJbnZvY2F0aW9uIG9mIGEgQ1NTIG1pbmlmaWVyIG9yIGEgSmF2YVNjcmlwdCBtaW5pZmllciwgcmVzcGVjdGl2ZWx5LAorICAgd29ya2luZyBhcyBhIGZpbHRlciAoc291cmNlIG9uIHN0YW5kYXJkIGlucHV0LCBtaW5pZmllZCByZXN1bHQgb24KKyAgIHN0YW5kYXJkIG91dHB1dCkuICBJZiBzZXQsIGl0IGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBtaW5pZmllZCB2ZXJzaW9uIG9mCisgICAnc3RhdGljL2dpdHdlYi5jc3MnIG9yICdzdGF0aWMvZ2l0d2ViLmpzJywgcmVzcGVjdGl2ZWx5LiAgKk5vdGUqIHRoYXQKKyAgIG1pbmlmaWVkIGZpbGVzIHdvdWxkIGhhdmUgKi5taW4uY3NzIGFuZCAqLm1pbi5qcyBleHRlbnNpb24sIHdoaWNoIGlzCisgICBpbXBvcnRhbnQgaWYgeW91IGFsc28gc2V0IEdJVFdFQl9DU1MgYW5kL29yIEdJVFdFQl9KUy4gIFtObyBkZWZhdWx0XQorICogR0lUV0VCX0xPR08KKyAgIFBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgeW91IHB1dCBnaXQtbG9nby5wbmcgb24geW91ciB3ZWIgc2VydmVyCisgICAob3IgdG8gYmUgbW9yZSBnZW5lcmljIFVSSSBvZiBsb2dvLCA3MngyNyBzaXplLCBkaXNwbGF5ZWQgaW4gdG9wIHJpZ2h0CisgICBjb3JuZXIgb2YgZWFjaCBnaXR3ZWIgcGFnZSwgYW5kIHVzZWQgYXMgbG9nbyBmb3IgQXRvbSBmZWVkKS4gIFJlbGF0aXZlCisgICB0byBiYXNlIFVSSSBvZiBnaXR3ZWIuICBbRGVmYXVsdDogc3RhdGljL2dpdC1sb2dvLnBuZ10KKyAqIEdJVFdFQl9GQVZJQ09OCisgICBQb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHlvdSBwdXQgZ2l0LWZhdmljb24ucG5nIG9uIHlvdXIgd2ViIHNlcnZlcgorICAgKG9yIHRvIGJlIG1vcmUgZ2VuZXJpYyBVUkkgb2YgZmF2aWNvbiwgYXNzdW1lZCB0byBiZSBpbWFnZS9wbmcgdHlwZTsKKyAgIHdlYiBicm93c2VycyB0aGF0IHN1cHBvcnQgZmF2aWNvbnMgKHdlYnNpdGUgaWNvbnMpIG1heSBkaXNwbGF5IHRoZW0KKyAgIGluIHRoZSBicm93c2VyJ3MgVVJMIGJhciBhbmQgbmV4dCB0byBzaXRlIG5hbWUgaW4gYm9va21hcmtzKS4gIFJlbGF0aXZlCisgICB0byBiYXNlIFVSSSBvZiBnaXR3ZWIuICBbRGVmYXVsdDogc3RhdGljL2dpdC1mYXZpY29uLnBuZ10KKyAqIEdJVFdFQl9DT05GSUcKKyAgIFRoaXMgUGVybCBmaWxlIHdpbGwgYmUgbG9hZGVkIHVzaW5nICdkbycgYW5kIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGFueQorICAgb2YgdGhlIG9wdGlvbnMgYWJvdmUgYXMgd2VsbCBhcyBzb21lIG90aGVyIG9wdGlvbnMgLS0gc2VlIHRoZSAiUnVudGltZQorICAgZ2l0d2ViIGNvbmZpZ3VyYXRpb24iIHNlY3Rpb24gYmVsb3csIGFuZCB0b3Agb2YgJ2dpdHdlYi5jZ2knIGZvciB0aGVpcgorICAgZnVsbCBsaXN0IGFuZCBkZXNjcmlwdGlvbi4gIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBHSVRXRUJfQ09ORklHCisgICBpcyBzZXQgd2hlbiBnaXR3ZWIuY2dpIGlzIGV4ZWN1dGVkLCB0aGVuIHRoZSBmaWxlIHNwZWNpZmllZCBpbiB0aGUKKyAgIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgbG9hZGVkIGluc3RlYWQgb2YgdGhlIGZpbGUgc3BlY2lmaWVkCisgICB3aGVuIGdpdHdlYi5jZ2kgd2FzIGNyZWF0ZWQuICBbRGVmYXVsdDogZ2l0d2ViX2NvbmZpZy5wZXJsXQorICogR0lUV0VCX0NPTkZJR19TWVNURU0KKyAgIFRoaXMgUGVybCBmaWxlIHdpbGwgYmUgbG9hZGVkIHVzaW5nICdkbycgYXMgYSBmYWxsYmFjayBpZiBHSVRXRUJfQ09ORklHCisgICBkb2VzIG5vdCBleGlzdC4gIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBHSVRXRUJfQ09ORklHX1NZU1RFTSBpcyBzZXQKKyAgIHdoZW4gZ2l0d2ViLmNnaSBpcyBleGVjdXRlZCwgdGhlbiB0aGUgZmlsZSBzcGVjaWZpZWQgaW4gdGhlIGVudmlyb25tZW50CisgICB2YXJpYWJsZSB3aWxsIGJlIGxvYWRlZCBpbnN0ZWFkIG9mIHRoZSBmaWxlIHNwZWNpZmllZCB3aGVuIGdpdHdlYi5jZ2kgd2FzCisgICBjcmVhdGVkLiAgW0RlZmF1bHQ6IC9ldGMvZ2l0d2ViLmNvbmZdCisgKiBISUdITElHSFRfQklOCisgICBQYXRoIHRvIHRoZSBoaWdobGlnaHQgZXhlY3V0YWJsZSB0byB1c2UgKG11c3QgYmUgdGhlIG9uZSBmcm9tCisgICBodHRwOi8vd3d3LmFuZHJlLXNpbW9uLmRlIGR1ZSB0byBhc3N1bXB0aW9ucyBhYm91dCBwYXJhbWV0ZXJzIGFuZCBvdXRwdXQpLgorICAgVXNlZnVsIGlmIGhpZ2hsaWdodCBpcyBub3QgaW5zdGFsbGVkIG9uIHlvdXIgd2Vic2VydmVyJ3MgUEFUSC4KKyAgIFtEZWZhdWx0OiBoaWdobGlnaHRdCisKK0J1aWxkIGV4YW1wbGUKK35+fn5+fn5+fn5+fn4KKworLSBUbyBpbnN0YWxsIGdpdHdlYiB0byAvdmFyL3d3dy9jZ2ktYmluL2dpdHdlYi8sIHdoZW4gZ2l0IHdyYXBwZXIKKyAgaXMgaW5zdGFsbGVkIGF0IC91c3IvbG9jYWwvYmluL2dpdCwgdGhlIHJlcG9zaXRvcmllcyAocHJvamVjdHMpCisgIHdlIHdhbnQgdG8gZGlzcGxheSBhcmUgdW5kZXIgL2hvbWUvbG9jYWwvc2NtLCBhbmQgeW91IGRvIG5vdCB1c2UKKyAgbWluaWZpZXJzLCB5b3UgY2FuIGRvCisKKwltYWtlIEdJVFdFQl9QUk9KRUNUUk9PVD0iL2hvbWUvbG9jYWwvc2NtIiBcCisJICAgICBHSVRXRUJfSlM9ImdpdHdlYi9zdGF0aWMvZ2l0d2ViLmpzIiBcCisJICAgICBHSVRXRUJfQ1NTPSJnaXR3ZWIvc3RhdGljL2dpdHdlYi5jc3MiIFwKKwkgICAgIEdJVFdFQl9MT0dPPSJnaXR3ZWIvc3RhdGljL2dpdC1sb2dvLnBuZyIgXAorCSAgICAgR0lUV0VCX0ZBVklDT049ImdpdHdlYi9zdGF0aWMvZ2l0LWZhdmljb24ucG5nIiBcCisJICAgICBiaW5kaXI9L3Vzci9sb2NhbC9iaW4gXAorCSAgICAgZ2l0d2ViCisKKwltYWtlIGdpdHdlYmRpcj0vdmFyL3d3dy9jZ2ktYmluL2dpdHdlYiBpbnN0YWxsLWdpdHdlYgorCisKK0dpdHdlYiBjb25maWcgZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlZSBhbHNvICJSdW50aW1lIGdpdHdlYiBjb25maWd1cmF0aW9uIiBzZWN0aW9uIGluIFJFQURNRSBmaWxlCitmb3IgZ2l0d2ViIChpbiBnaXR3ZWIvUkVBRE1FKSwgYW5kIGdpdHdlYi5jb25mKDUpIG1hbnBhZ2UuCisKKy0gWW91IGNhbiBjb25maWd1cmUgZ2l0d2ViIGZ1cnRoZXIgdXNpbmcgdGhlIHBlci1pbnN0YW5jZSBnaXR3ZWIgY29uZmlndXJhdGlvbiBmaWxlOworICBieSBkZWZhdWx0IHRoaXMgaXMgYSBmaWxlIG5hbWVkIGdpdHdlYl9jb25maWcucGVybCBpbiB0aGUgc2FtZSBwbGFjZSBhcworICBnaXR3ZWIuY2dpIHNjcmlwdC4gWW91IGNhbiBjb250cm9sIHRoZSBkZWZhdWx0IHBsYWNlIGZvciB0aGUgY29uZmlnIGZpbGUKKyAgdXNpbmcgdGhlIEdJVFdFQl9DT05GSUcgYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYW5kIHlvdSBjYW4gc2V0IGl0CisgIHVzaW5nIHRoZSBHSVRXRUJfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlLiBJZiB0aGlzIGZpbGUgZG9lcyBub3QKKyAgZXhpc3QsIGdpdHdlYiBsb29rcyBmb3IgYSBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUsIG5vcm1hbGx5CisgIC9ldGMvZ2l0d2ViLmNvbmYuIFlvdSBjYW4gY2hhbmdlIHRoZSBkZWZhdWx0IHVzaW5nIHRoZQorICBHSVRXRUJfQ09ORklHX1NZU1RFTSBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBhbmQgb3ZlcnJpZGUgaXQKKyAgdGhyb3VnaCB0aGUgR0lUV0VCX0NPTkZJR19TWVNURU0gZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKyAgTm90ZSB0aGF0IHRoZSBHSVRXRUJfQ09ORklHX1NZU1RFTSBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUgaXMKKyAgb25seSB1c2VkIGZvciBpbnN0YW5jZXMgdGhhdCBsYWNrIHBlci1pbnN0YW5jZSBjb25maWd1cmF0aW9uIGZpbGUuCisgIFlvdSBjYW4gdXNlIEdJVFdFQl9DT05GSUdfQ09NTU9OIGNvbW1vbiBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uCisgIGZpbGUgKG5vcm1hbGx5IC9ldGMvZ2l0d2ViLWNvbW1vbi5jb25mKSB0byBrZWVwIGNvbW1vbiBkZWZhdWx0CisgIHNldHRpbmdzIHRoYXQgYXBwbHkgdG8gYWxsIGluc3RhbmNlcy4gIFNldHRpbmdzIGZyb20gcGVyLWluc3RhbmNlIG9yCisgIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZSBvdmVycmlkZSB0aG9zZSBmcm9tIGNvbW1vbiBzeXN0ZW0td2lkZQorICBjb25maWd1cmF0aW9uIGZpbGUuCisKKy0gVGhlIGdpdHdlYiBjb25maWcgZmlsZSBpcyBhIGZyYWdtZW50IG9mIHBlcmwgY29kZS4gWW91IGNhbiBzZXQgdmFyaWFibGVzCisgIHVzaW5nICJvdXIgJHZhcmlhYmxlID0gdmFsdWUiOyB0ZXh0IGZyb20gIiMiIGNoYXJhY3RlciB1bnRpbCB0aGUgZW5kCisgIG9mIGEgbGluZSBpcyBpZ25vcmVkLiBTZWUgcGVybHN5bigxKSBmb3IgZGV0YWlscy4KKworICBTZWUgdGhlIHRvcCBvZiBnaXR3ZWIucGVybCBmaWxlIGZvciBleGFtcGxlcyBvZiBjdXN0b21pemFibGUgb3B0aW9ucy4KKworQ29uZmlnIGZpbGUgZXhhbXBsZQorfn5+fn5+fn5+fn5+fn5+fn5+fgorCitUbyBlbmFibGUgYmxhbWUsIHBpY2theGUgc2VhcmNoLCBhbmQgc25hcHNob3Qgc3VwcG9ydCwgd2hpbGUgYWxsb3dpbmcKK2luZGl2aWR1YWwgcHJvamVjdHMgdG8gdHVybiB0aGVtIG9mZiwgcHV0IHRoZSBmb2xsb3dpbmcgaW4geW91cgorR0lUV0VCX0NPTkZJRyBmaWxlOgorCisJJGZlYXR1cmV7J2JsYW1lJ317J2RlZmF1bHQnfSA9IFsxXTsKKwkkZmVhdHVyZXsnYmxhbWUnfXsnb3ZlcnJpZGUnfSA9IDE7CisKKwkkZmVhdHVyZXsncGlja2F4ZSd9eydkZWZhdWx0J30gPSBbMV07CisJJGZlYXR1cmV7J3BpY2theGUnfXsnb3ZlcnJpZGUnfSA9IDE7CisKKwkkZmVhdHVyZXsnc25hcHNob3QnfXsnZGVmYXVsdCd9ID0gWyd6aXAnLCAndGd6J107CisJJGZlYXR1cmV7J3NuYXBzaG90J317J292ZXJyaWRlJ30gPSAxOworCitJZiB5b3UgYWxsb3cgb3ZlcnJpZGluZyBmb3IgdGhlIHNuYXBzaG90IGZlYXR1cmUsIHlvdSBjYW4gc3BlY2lmeSB3aGljaAorc25hcHNob3QgZm9ybWF0cyBhcmUgZ2xvYmFsbHkgZGlzYWJsZWQuIFlvdSBjYW4gYWxzbyBhZGQgYW55IGNvbW1hbmQgbGluZQorb3B0aW9ucyB5b3Ugd2FudCAoc3VjaCBhcyBzZXR0aW5nIHRoZSBjb21wcmVzc2lvbiBsZXZlbCkuIEZvciBpbnN0YW5jZSwKK3lvdSBjYW4gZGlzYWJsZSBaaXAgY29tcHJlc3NlZCBzbmFwc2hvdHMgYW5kIHNldCBHWmlwIHRvIHJ1biBhdCBsZXZlbCA2IGJ5CithZGRpbmcgdGhlIGZvbGxvd2luZyBsaW5lcyB0byB5b3VyICRHSVRXRUJfQ09ORklHOgorCisJJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7J3ppcCd9eydkaXNhYmxlZCd9ID0gMTsKKwkka25vd25fc25hcHNob3RfZm9ybWF0c3sndGd6J317J2NvbXByZXNzb3InfSA9IFsnZ3ppcCcsJy02J107CisKKworR2l0d2ViIHJlcG9zaXRvcmllcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0IGdpdHdlYiBzaG93cyBhbGwgZ2l0IHJlcG9zaXRvcmllcyB1bmRlciBzaW5nbGUgY29tbW9uIHJlcG9zaXRvcnkKK3Jvb3Qgb24gYSBsb2NhbCBmaWxlc3lzdGVtOyBzZWUgZGVzY3JpcHRpb24gb2YgR0lUV0VCX1BST0pFQ1RST09UIGJ1aWxkLXRpbWUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgYWJvdmUgKGFuZCBhbHNvIG9mIEdJVFdFQl9MSVNUKS4KKworTW9yZSBhZHZhbmNlZCB1c2FnZSwgbGlrZSBsaW1pdGluZyBhY2Nlc3Mgb3IgdmlzaWJpbGl0eSBvZiByZXBvc2l0b3JpZXMgYW5kCittYW5hZ2luZyBtdWx0aXBsZSByb290cyBhcmUgZGVzY3JpYmVkIG9uIGdpdHdlYiBtYW5wYWdlLgorCisKK0V4YW1wbGUgd2ViIHNlcnZlciBjb25maWd1cmF0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitTZWUgYWxzbyAiV2Vic2VydmVyIGNvbmZpZ3VyYXRpb24iIGFuZCAiQWR2YW5jZWQgd2ViIHNlcnZlciBzZXR1cCIgc2VjdGlvbnMKK2luIGdpdHdlYigxKSBtYW5wYWdlLgorCisKKy0gQXBhY2hlMiwgZ2l0d2ViIGluc3RhbGxlZCBhcyBDR0kgc2NyaXB0LAorICB1bmRlciAvdmFyL3d3dy9jZ2ktYmluLworCisJU2NyaXB0QWxpYXMgL2NnaS1iaW4vICIvdmFyL3d3dy9jZ2ktYmluLyIKKworCTxEaXJlY3RvcnkgIi92YXIvd3d3L2NnaS1iaW4iPgorCSAgICBPcHRpb25zIEluZGV4ZXMgRm9sbG93U3ltbGlua3MgRXhlY0NHSQorCSAgICBBbGxvd092ZXJyaWRlIE5vbmUKKwkgICAgT3JkZXIgYWxsb3csZGVueQorCSAgICBBbGxvdyBmcm9tIGFsbAorCTwvRGlyZWN0b3J5PgorCistIEFwYWNoZTIsIGdpdHdlYiBpbnN0YWxsZWQgYXMgbW9kX3BlcmwgbGVnYWN5IHNjcmlwdCwKKyAgdW5kZXIgL3Zhci93d3cvcGVybC8KKworCUFsaWFzIC9wZXJsICIvdmFyL3d3dy9wZXJsIgorCisJPERpcmVjdG9yeSAiL3Zhci93d3cvcGVybCI+CisJICAgIFNldEhhbmRsZXIgcGVybC1zY3JpcHQKKwkgICAgUGVybFJlc3BvbnNlSGFuZGxlciBNb2RQZXJsOjpSZWdpc3RyeQorCSAgICBQZXJsT3B0aW9ucyArUGFyc2VIZWFkZXJzCisJICAgIE9wdGlvbnMgSW5kZXhlcyBGb2xsb3dTeW1saW5rcyArRXhlY0NHSQorCSAgICBBbGxvd092ZXJyaWRlIE5vbmUKKwkgICAgT3JkZXIgYWxsb3csZGVueQorCSAgICBBbGxvdyBmcm9tIGFsbAorCTwvRGlyZWN0b3J5PgpkaWZmIC0tZ2l0IGEvZ2l0d2ViL01ha2VmaWxlIGIvZ2l0d2ViL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMTk0ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvTWFrZWZpbGUKQEAgLTAsMCArMSwxOTUgQEAKKyMgVGhlIGRlZmF1bHQgdGFyZ2V0IG9mIHRoaXMgTWFrZWZpbGUgaXMuLi4KK2FsbDo6CisKKyMgRGVmaW5lIFY9MSB0byBoYXZlIGEgbW9yZSB2ZXJib3NlIGNvbXBpbGUuCisjCisjIERlZmluZSBKU01JTiB0byBwb2ludCB0byBKYXZhU2NyaXB0IG1pbmlmaWVyIHRoYXQgZnVuY3Rpb25zIGFzCisjIGEgZmlsdGVyIHRvIGhhdmUgc3RhdGljL2dpdHdlYi5qcyBtaW5pZmllZC4KKyMKKyMgRGVmaW5lIENTU01JTiB0byBwb2ludCB0byBhIENTUyBtaW5pZmllciBpbiBvcmRlciB0byBnZW5lcmF0ZSBhIG1pbmlmaWVkCisjIHZlcnNpb24gb2Ygc3RhdGljL2dpdHdlYi5jc3MKKyMKKworcHJlZml4ID89ICQoSE9NRSkKK2JpbmRpciA/PSAkKHByZWZpeCkvYmluCitnaXR3ZWJkaXIgPz0gL3Zhci93d3cvY2dpLWJpbgorCitSTSA/PSBybSAtZgorSU5TVEFMTCA/PSBpbnN0YWxsCisKKyMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBnaXR3ZWIKK0dJVFdFQl9DT05GSUcgPSBnaXR3ZWJfY29uZmlnLnBlcmwKK0dJVFdFQl9DT05GSUdfU1lTVEVNID0gL2V0Yy9naXR3ZWIuY29uZgorR0lUV0VCX0NPTkZJR19DT01NT04gPSAvZXRjL2dpdHdlYi1jb21tb24uY29uZgorR0lUV0VCX0hPTUVfTElOS19TVFIgPSBwcm9qZWN0cworR0lUV0VCX1NJVEVOQU1FID0KK0dJVFdFQl9QUk9KRUNUUk9PVCA9IC9wdWIvZ2l0CitHSVRXRUJfUFJPSkVDVF9NQVhERVBUSCA9IDIwMDcKK0dJVFdFQl9FWFBPUlRfT0sgPQorR0lUV0VCX1NUUklDVF9FWFBPUlQgPQorR0lUV0VCX0JBU0VfVVJMID0KK0dJVFdFQl9MSVNUID0KK0dJVFdFQl9IT01FVEVYVCA9IGluZGV4dGV4dC5odG1sCitHSVRXRUJfQ1NTID0gc3RhdGljL2dpdHdlYi5jc3MKK0dJVFdFQl9MT0dPID0gc3RhdGljL2dpdC1sb2dvLnBuZworR0lUV0VCX0ZBVklDT04gPSBzdGF0aWMvZ2l0LWZhdmljb24ucG5nCitHSVRXRUJfSlMgPSBzdGF0aWMvZ2l0d2ViLmpzCitHSVRXRUJfU0lURV9IVE1MX0hFQURfU1RSSU5HID0KK0dJVFdFQl9TSVRFX0hFQURFUiA9CitHSVRXRUJfU0lURV9GT09URVIgPQorSElHSExJR0hUX0JJTiA9IGhpZ2hsaWdodAorCisjIGluY2x1ZGUgdXNlciBjb25maWcKKy1pbmNsdWRlIC4uL2NvbmZpZy5tYWsuYXV0b2dlbgorLWluY2x1ZGUgLi4vY29uZmlnLm1haworLWluY2x1ZGUgY29uZmlnLm1haworCisjIGRldGVybWluZSB2ZXJzaW9uCisuLi9HSVQtVkVSU0lPTi1GSUxFOiAuRk9SQ0UtR0lULVZFUlNJT04tRklMRQorCSQoUVVJRVRfU1VCRElSMCkuLi8gJChRVUlFVF9TVUJESVIxKSBHSVQtVkVSU0lPTi1GSUxFCisKKy1pbmNsdWRlIC4uL0dJVC1WRVJTSU9OLUZJTEUKKworIyMjIEJ1aWxkIHJ1bGVzCisKK1NIRUxMX1BBVEggPz0gJChTSEVMTCkKK1BFUkxfUEFUSCAgPz0gL3Vzci9iaW4vcGVybAorCisjIFNoZWxsIHF1b3RlOworYmluZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChiaW5kaXIpKSMnCitnaXR3ZWJkaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGdpdHdlYmRpcikpIycKK2dpdHdlYnN0YXRpY2Rpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoZ2l0d2ViZGlyKS9zdGF0aWMpIycKK1NIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEgpKSMnCitQRVJMX1BBVEhfU1EgID0gJChzdWJzdCAnLCdcJycsJChQRVJMX1BBVEgpKSMnCitERVNURElSX1NRICAgID0gJChzdWJzdCAnLCdcJycsJChERVNURElSKSkjJworCisjIFF1aWV0IGdlbmVyYXRpb24gKHVubGVzcyBWPTEpCitRVUlFVF9TVUJESVIwICA9ICskKE1BS0UpIC1DICMgc3BhY2UgdG8gc2VwYXJhdGUgLUMgYW5kIHN1YmRpcgorUVVJRVRfU1VCRElSMSAgPQorCitpZm5lcSAoJChmaW5kc3RyaW5nICQoTUFLRUZMQUdTKSx3KSx3KQorUFJJTlRfRElSID0gLS1uby1wcmludC1kaXJlY3RvcnkKK2Vsc2UgIyAibWFrZSAtdyIKK05PX1NVQkRJUiA9IDoKK2VuZGlmCisKK2lmbmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHMpLHMpCitpZm5kZWYgVgorCVFVSUVUICAgICAgICAgID0gQAorCVFVSUVUX0dFTiAgICAgID0gJChRVUlFVCllY2hvICcgICAnIEdFTiAkQDsKKwlRVUlFVF9TVUJESVIwICA9ICtAc3ViZGlyPQorCVFVSUVUX1NVQkRJUjEgID0gOyQoTk9fU1VCRElSKSBlY2hvICcgICAnIFNVQkRJUiAkJHN1YmRpcjsgXAorCSAgICAgICAgICAgICAgICAgJChNQUtFKSAkKFBSSU5UX0RJUikgLUMgJCRzdWJkaXIKKwlleHBvcnQgVgorCWV4cG9ydCBRVUlFVAorCWV4cG9ydCBRVUlFVF9HRU4KKwlleHBvcnQgUVVJRVRfU1VCRElSMAorCWV4cG9ydCBRVUlFVF9TVUJESVIxCitlbmRpZgorZW5kaWYKKworYWxsOjogZ2l0d2ViLmNnaSBzdGF0aWMvZ2l0d2ViLmpzCisKK0dJVFdFQl9QUk9HUkFNUyA9IGdpdHdlYi5jZ2kKKworaWZkZWYgSlNNSU4KK0dJVFdFQl9GSUxFUyArPSBzdGF0aWMvZ2l0d2ViLm1pbi5qcworR0lUV0VCX0pTID0gc3RhdGljL2dpdHdlYi5taW4uanMKK2FsbDo6IHN0YXRpYy9naXR3ZWIubWluLmpzCitzdGF0aWMvZ2l0d2ViLm1pbi5qczogc3RhdGljL2dpdHdlYi5qcyBHSVRXRUItQlVJTEQtT1BUSU9OUworCSQoUVVJRVRfR0VOKSQoSlNNSU4pIDwkPCA+JEAKK2Vsc2UKK0dJVFdFQl9GSUxFUyArPSBzdGF0aWMvZ2l0d2ViLmpzCitlbmRpZgorCitpZmRlZiBDU1NNSU4KK0dJVFdFQl9GSUxFUyArPSBzdGF0aWMvZ2l0d2ViLm1pbi5jc3MKK0dJVFdFQl9DU1MgPSBzdGF0aWMvZ2l0d2ViLm1pbi5jc3MKK2FsbDo6IHN0YXRpYy9naXR3ZWIubWluLmNzcworc3RhdGljL2dpdHdlYi5taW4uY3NzOiBzdGF0aWMvZ2l0d2ViLmNzcyBHSVRXRUItQlVJTEQtT1BUSU9OUworCSQoUVVJRVRfR0VOKSQoQ1NTTUlOKSA8JDwgPiRACitlbHNlCitHSVRXRUJfRklMRVMgKz0gc3RhdGljL2dpdHdlYi5jc3MKK2VuZGlmCisKK0dJVFdFQl9GSUxFUyArPSBzdGF0aWMvZ2l0LWxvZ28ucG5nIHN0YXRpYy9naXQtZmF2aWNvbi5wbmcKKworIyBKYXZhU2NyaXB0IGZpbGVzIHRoYXQgYXJlIGNvbXBvc2VkIChjb25jYXRlbmF0ZWQpIHRvIGZvcm0gZ2l0d2ViLmpzCisjCisjIGpzL2xpYi9jb21tb24tbGliLmpzIHNob3VsZCBiZSBhbHdheXMgZmlyc3QsIHRoZW4ganMvbGliLyouanMsCisjIHRoZW4gdGhlIHJlc3Qgb2YgZmlsZXM7IGpzL2dpdHdlYi5qcyBzaG91bGQgYmUgbGFzdCAoaWYgaXQgZXhpc3RzKQorR0lUV0VCX0pTTElCX0ZJTEVTICs9IHN0YXRpYy9qcy9saWIvY29tbW9uLWxpYi5qcworR0lUV0VCX0pTTElCX0ZJTEVTICs9IHN0YXRpYy9qcy9saWIvZGF0ZXRpbWUuanMKK0dJVFdFQl9KU0xJQl9GSUxFUyArPSBzdGF0aWMvanMvbGliL2Nvb2tpZXMuanMKK0dJVFdFQl9KU0xJQl9GSUxFUyArPSBzdGF0aWMvanMvamF2YXNjcmlwdC1kZXRlY3Rpb24uanMKK0dJVFdFQl9KU0xJQl9GSUxFUyArPSBzdGF0aWMvanMvYWRqdXN0LXRpbWV6b25lLmpzCitHSVRXRUJfSlNMSUJfRklMRVMgKz0gc3RhdGljL2pzL2JsYW1lX2luY3JlbWVudGFsLmpzCisKKworR0lUV0VCX1JFUExBQ0UgPSBcCisJLWUgJ3N8KytHSVRfVkVSU0lPTisrfCQoR0lUX1ZFUlNJT04pfGcnIFwKKwktZSAnc3wrK0dJVF9CSU5ESVIrK3wkKGJpbmRpcil8ZycgXAorCS1lICdzfCsrR0lUV0VCX0NPTkZJRysrfCQoR0lUV0VCX0NPTkZJRyl8ZycgXAorCS1lICdzfCsrR0lUV0VCX0NPTkZJR19TWVNURU0rK3wkKEdJVFdFQl9DT05GSUdfU1lTVEVNKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfQ09ORklHX0NPTU1PTisrfCQoR0lUV0VCX0NPTkZJR19DT01NT04pfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9IT01FX0xJTktfU1RSKyt8JChHSVRXRUJfSE9NRV9MSU5LX1NUUil8ZycgXAorCS1lICdzfCsrR0lUV0VCX1NJVEVOQU1FKyt8JChHSVRXRUJfU0lURU5BTUUpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9QUk9KRUNUUk9PVCsrfCQoR0lUV0VCX1BST0pFQ1RST09UKXxnJyBcCisJLWUgJ3N8IisrR0lUV0VCX1BST0pFQ1RfTUFYREVQVEgrKyJ8JChHSVRXRUJfUFJPSkVDVF9NQVhERVBUSCl8ZycgXAorCS1lICdzfCsrR0lUV0VCX0VYUE9SVF9PSysrfCQoR0lUV0VCX0VYUE9SVF9PSyl8ZycgXAorCS1lICdzfCsrR0lUV0VCX1NUUklDVF9FWFBPUlQrK3wkKEdJVFdFQl9TVFJJQ1RfRVhQT1JUKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfQkFTRV9VUkwrK3wkKEdJVFdFQl9CQVNFX1VSTCl8ZycgXAorCS1lICdzfCsrR0lUV0VCX0xJU1QrK3wkKEdJVFdFQl9MSVNUKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfSE9NRVRFWFQrK3wkKEdJVFdFQl9IT01FVEVYVCl8ZycgXAorCS1lICdzfCsrR0lUV0VCX0NTUysrfCQoR0lUV0VCX0NTUyl8ZycgXAorCS1lICdzfCsrR0lUV0VCX0xPR08rK3wkKEdJVFdFQl9MT0dPKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfRkFWSUNPTisrfCQoR0lUV0VCX0ZBVklDT04pfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9KUysrfCQoR0lUV0VCX0pTKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfU0lURV9IVE1MX0hFQURfU1RSSU5HKyt8JChHSVRXRUJfU0lURV9IVE1MX0hFQURfU1RSSU5HKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfU0lURV9IRUFERVIrK3wkKEdJVFdFQl9TSVRFX0hFQURFUil8ZycgXAorCS1lICdzfCsrR0lUV0VCX1NJVEVfRk9PVEVSKyt8JChHSVRXRUJfU0lURV9GT09URVIpfGcnIFwKKwktZSAnc3wrK0hJR0hMSUdIVF9CSU4rK3wkKEhJR0hMSUdIVF9CSU4pfGcnCisKK0dJVFdFQi1CVUlMRC1PUFRJT05TOiBGT1JDRQorCUBybSAtZiAkQCsKKwlAZWNobyAieCIgJyQoUEVSTF9QQVRIX1NRKScgJChHSVRXRUJfUkVQTEFDRSkgIiQoSlNNSU4pfCQoQ1NTTUlOKSIgPiRAKworCUBjbXAgLXMgJEArICRAICYmIHJtIC1mICRAKyB8fCBtdiAtZiAkQCsgJEAKKworZ2l0d2ViLmNnaTogZ2l0d2ViLnBlcmwgR0lUV0VCLUJVSUxELU9QVElPTlMKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCAkQCsgJiYgXAorCXNlZCAtZSAnMXN8IyEuKnBlcmx8IyEkKFBFUkxfUEFUSF9TUSl8JyBcCisJCSQoR0lUV0VCX1JFUExBQ0UpICQ8ID4kQCsgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgJEArICRACisKK3N0YXRpYy9naXR3ZWIuanM6ICQoR0lUV0VCX0pTTElCX0ZJTEVTKQorCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJY2F0ICReID4kQCsgJiYgXAorCW12ICRAKyAkQAorCisjIyMgVGVzdGluZyBydWxlcworCit0ZXN0OgorCSQoTUFLRSkgLUMgLi4vdCBnaXR3ZWItdGVzdAorCit0ZXN0LWluc3RhbGxlZDoKKwlHSVRXRUJfVEVTVF9JTlNUQUxMRUQ9JyQoREVTVERJUl9TUSkkKGdpdHdlYmRpcl9TUSknIFwKKwkJJChNQUtFKSAtQyAuLi90IGdpdHdlYi10ZXN0CisKKyMjIyBJbnN0YWxsYXRpb24gcnVsZXMKKworaW5zdGFsbDogYWxsCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKGdpdHdlYmRpcl9TUSknCisJJChJTlNUQUxMKSAtbSA3NTUgJChHSVRXRUJfUFJPR1JBTVMpICckKERFU1RESVJfU1EpJChnaXR3ZWJkaXJfU1EpJworCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChnaXR3ZWJzdGF0aWNkaXJfU1EpJworCSQoSU5TVEFMTCkgLW0gNjQ0ICQoR0lUV0VCX0ZJTEVTKSAnJChERVNURElSX1NRKSQoZ2l0d2Vic3RhdGljZGlyX1NRKScKKworIyMjIENsZWFuaW5nIHJ1bGVzCisKK2NsZWFuOgorCSQoUk0pIGdpdHdlYi5jZ2kgc3RhdGljL2dpdHdlYi5qcyBcCisJCXN0YXRpYy9naXR3ZWIubWluLmpzIHN0YXRpYy9naXR3ZWIubWluLmNzcyBcCisJCUdJVFdFQi1CVUlMRC1PUFRJT05TCisKKy5QSE9OWTogYWxsIGNsZWFuIGluc3RhbGwgdGVzdCB0ZXN0LWluc3RhbGxlZCAuRk9SQ0UtR0lULVZFUlNJT04tRklMRSBGT1JDRQorCmRpZmYgLS1naXQgYS9naXR3ZWIvUkVBRE1FIGIvZ2l0d2ViL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFkY2ZiCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL1JFQURNRQpAQCAtMCwwICsxLDcwIEBACitHSVQgd2ViIEludGVyZmFjZQorPT09PT09PT09PT09PT09PT0KKworRnJvbSB0aGUgZ2l0IHZlcnNpb24gMS40LjAgZ2l0d2ViIGlzIGJ1bmRsZWQgd2l0aCBnaXQuCisKKworQnVpbGQgdGltZSBnaXR3ZWIgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlcmUgYXJlIG1hbnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2hpY2ggYWZmZWN0IGJ1aWxkaW5nIGdpdHdlYiAoYW1vbmcKK290aGVycyBjcmVhdGluZyBnaXR3ZWIuY2dpIG91dCBvZiBnaXR3ZWIucGVybCBieSByZXBsYWNpbmcgcGxhY2Vob2xkZXJzIHN1Y2gKK2FzIGArK0dJVF9CSU5ESVIrK2AgYnkgdGhlaXIgYnVpbGQtdGltZSB2YWx1ZXMpLgorCitCdWlsZGluZyBhbmQgaW5zdGFsbGluZyBnaXR3ZWIgaXMgZGVzY3JpYmVkIGluIGdpdHdlYidzIElOU1RBTEwgZmlsZQorKGluICdnaXR3ZWIvSU5TVEFMTCcpLgorCisKK1J1bnRpbWUgZ2l0d2ViIGNvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dpdHdlYiBvYnRhaW5zIGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIHRoZSBmb2xsb3dpbmcgc291cmNlcyBpbiB0aGUKK2ZvbGxvd2luZyBvcmRlcjoKKworMS4gYnVpbHQtaW4gdmFsdWVzIChzb21lIHNldCBkdXJpbmcgYnVpbGQgc3RhZ2UpLAorMi4gY29tbW9uIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZSAoYEdJVFdFQl9DT05GSUdfQ09NTU9OYCwKKyAgIGRlZmF1bHRzIHRvICcvZXRjL2dpdHdlYi1jb21tb24uY29uZicpLAorMy4gZWl0aGVyIHBlci1pbnN0YW5jZSBjb25maWd1cmF0aW9uIGZpbGUgKGBHSVRXRUJfQ09ORklHYCwgZGVmYXVsdHMgdG8KKyAgICdnaXR3ZWJfY29uZmlnLnBlcmwnIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgaW5zdGFsbGVkIGdpdHdlYiksCisgICBvciBpZiBpdCBkb2VzIG5vdCBleGlzdHMgdGhlbiBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgIChgR0lUV0VCX0NPTkZJR19TWVNURU1gLCBkZWZhdWx0cyB0byAnL2V0Yy9naXR3ZWIuY29uZicpLgorCitWYWx1ZXMgb2J0YWluZWQgaW4gbGF0ZXIgY29uZmlndXJhdGlvbiBmaWxlcyBvdmVycmlkZSB2YWx1ZXMgb2J0YWluZWQgZWFybGllcgoraW4gYWJvdmUgc2VxdWVuY2UuCisKK1lvdSBjYW4gcmVhZCBkZWZhdWx0cyBpbiBzeXN0ZW0td2lkZSBHSVRXRUJfQ09ORklHX1NZU1RFTSBmcm9tIEdJVFdFQl9DT05GSUcKK2J5IGFkZGluZworCisgIHJlYWRfY29uZmlnX2ZpbGUoJEdJVFdFQl9DT05GSUdfU1lTVEVNKTsKKworYXQgdmVyeSBiZWdpbm5pbmcgb2YgcGVyLWluc3RhbmNlIEdJVFdFQl9DT05GSUcgZmlsZS4gIEluIHRoaXMgY2FzZQorc2V0dGluZ3MgaW4gc2FpZCBwZXItaW5zdGFuY2UgZmlsZSB3aWxsIG92ZXJyaWRlIHNldHRpbmdzIGZyb20KK3N5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZS4gIE5vdGUgdGhhdCByZWFkX2NvbmZpZ19maWxlIGNoZWNrcworaXRzZWxmIHRoYXQgdGhlICRHSVRXRUJfQ09ORklHX1NZU1RFTSBmaWxlIGV4aXN0cy4KKworVGhlIG1vc3Qgbm90YWJsZSB0aGluZyB0aGF0IGlzIG5vdCBjb25maWd1cmFibGUgYXQgY29tcGlsZSB0aW1lIGFyZSB0aGUKK29wdGlvbmFsIGZlYXR1cmVzLCBzdG9yZWQgaW4gdGhlICclZmVhdHVyZXMnIHZhcmlhYmxlLgorCitVbHRpbWF0ZSBkZXNjcmlwdGlvbiBvbiBob3cgdG8gcmVjb25maWd1cmUgdGhlIGRlZmF1bHQgZmVhdHVyZXMgc2V0dGluZworaW4geW91ciBgR0lUV0VCX0NPTkZJR2Agb3IgcGVyLXByb2plY3QgaW4gYHByb2plY3QuZ2l0L2NvbmZpZ2AgY2FuIGJlIGZvdW5kCithcyBjb21tZW50cyBpbnNpZGUgJ2dpdHdlYi5jZ2knLgorCitTZWUgYWxzbyBnaXR3ZWIuY29uZig1KSBtYW5wYWdlLgorCisKK1dlYiBzZXJ2ZXIgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHaXR3ZWIgY2FuIGJlIHJ1biBhcyBDR0kgc2NyaXB0LCBhcyBsZWdhY3kgbW9kX3BlcmwgYXBwbGljYXRpb24gKHVzaW5nCitNb2RQZXJsOjpSZWdpc3RyeSksIGFuZCBhcyBGYXN0Q0dJIHNjcmlwdC4gIFlvdSBjYW4gZmluZCBzb21lIHNpbXBsZSBleGFtcGxlcworaW4gIkV4YW1wbGUgd2ViIHNlcnZlciBjb25maWd1cmF0aW9uIiBzZWN0aW9uIGluIElOU1RBTEwgZmlsZSBmb3IgZ2l0d2ViIChpbgorZ2l0d2ViL0lOU1RBTEwpLgorCitTZWUgIldlYnNlcnZlciBjb25maWd1cmF0aW9uIiBhbmQgIkFkdmFuY2VkIHdlYiBzZXJ2ZXIgc2V0dXAiIHNlY3Rpb25zIGluCitnaXR3ZWIoMSkgbWFucGFnZS4KKworCitBVVRIT1JTCistLS0tLS0tCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnk6CisgIEtheSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2cmZ5Lm9yZz4KKworQW55IGNvbW1lbnQvcXVlc3Rpb24vY29uY2VybiB0bzoKKyAgR2l0IG1haWxpbmcgbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4KZGlmZiAtLWdpdCBhL2dpdHdlYi9naXR3ZWIucGVybCBiL2dpdHdlYi9naXR3ZWIucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wOTU5YTc4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL2dpdHdlYi5wZXJsCkBAIC0wLDAgKzEsODQ4MyBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgZ2l0d2ViIC0gc2ltcGxlIHdlYiBpbnRlcmZhY2UgdG8gdHJhY2sgY2hhbmdlcyBpbiBnaXQgcmVwb3NpdG9yaWVzCisjCisjIChDKSAyMDA1LTIwMDYsIEtheSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2cmZ5Lm9yZz4KKyMgKEMpIDIwMDUsIENocmlzdGlhbiBHaWVya2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEx2MgorCit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworIyBoYW5kbGUgQUNMIGluIGZpbGUgYWNjZXNzIHRlc3RzCit1c2UgZmlsZXRlc3QgJ2FjY2Vzcyc7Cit1c2UgQ0dJIHF3KDpzdGFuZGFyZCA6ZXNjYXBlSFRNTCAtbm9zdGlja3kpOwordXNlIENHSTo6VXRpbCBxdyh1bmVzY2FwZSk7Cit1c2UgQ0dJOjpDYXJwIHF3KGZhdGFsc1RvQnJvd3NlciBzZXRfbWVzc2FnZSk7Cit1c2UgRW5jb2RlOwordXNlIEZjbnRsICc6bW9kZSc7Cit1c2UgRmlsZTo6RmluZCBxdygpOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3KGJhc2VuYW1lKTsKK3VzZSBUaW1lOjpIaVJlcyBxdyhnZXR0aW1lb2ZkYXkgdHZfaW50ZXJ2YWwpOwordXNlIERpZ2VzdDo6TUQ1IHF3KG1kNV9oZXgpOworCitiaW5tb2RlIFNURE9VVCwgJzp1dGY4JzsKKworaWYgKCFkZWZpbmVkKCRDR0k6OlZFUlNJT04pIHx8ICRDR0k6OlZFUlNJT04gPCA0LjA4KSB7CisJZXZhbCAnc3ViIENHSTo6bXVsdGlfcGFyYW0geyBDR0k6OnBhcmFtKEBfKSB9JworfQorCitvdXIgJHQwID0gWyBnZXR0aW1lb2ZkYXkoKSBdOworb3VyICRudW1iZXJfb2ZfZ2l0X2NtZHMgPSAwOworCitCRUdJTiB7CisJQ0dJLT5jb21waWxlKCkgaWYgJEVOVnsnTU9EX1BFUkwnfTsKK30KKworb3VyICR2ZXJzaW9uID0gIisrR0lUX1ZFUlNJT04rKyI7CisKK291ciAoJG15X3VybCwgJG15X3VyaSwgJGJhc2VfdXJsLCAkcGF0aF9pbmZvLCAkaG9tZV9saW5rKTsKK3N1YiBldmFsdWF0ZV91cmkgeworCW91ciAkY2dpOworCisJb3VyICRteV91cmwgPSAkY2dpLT51cmwoKTsKKwlvdXIgJG15X3VyaSA9ICRjZ2ktPnVybCgtYWJzb2x1dGUgPT4gMSk7CisKKwkjIEJhc2UgVVJMIGZvciByZWxhdGl2ZSBVUkxzIGluIGdpdHdlYiAoJGxvZ28sICRmYXZpY29uLCAuLi4pLAorCSMgbmVlZGVkIGFuZCB1c2VkIG9ubHkgZm9yIFVSTHMgd2l0aCBub25lbXB0eSBQQVRIX0lORk8KKwlvdXIgJGJhc2VfdXJsID0gJG15X3VybDsKKworCSMgV2hlbiB0aGUgc2NyaXB0IGlzIHVzZWQgYXMgRGlyZWN0b3J5SW5kZXgsIHRoZSBVUkwgZG9lcyBub3QgY29udGFpbiB0aGUgbmFtZQorCSMgb2YgdGhlIHNjcmlwdCBmaWxlIGl0c2VsZiwgYW5kICRjZ2ktPnVybCgpIGZhaWxzIHRvIHN0cmlwIFBBVEhfSU5GTywgc28gd2UKKwkjIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzLiBXZSBtYWtlICRwYXRoX2luZm8gZ2xvYmFsIGJlY2F1c2UgaXQncyBhbHNvIHVzZWQKKwkjIGxhdGVyIG9uLgorCSMKKwkjIEFub3RoZXIgaXNzdWUgd2l0aCB0aGUgc2NyaXB0IGJlaW5nIHRoZSBEaXJlY3RvcnlJbmRleCBpcyB0aGF0IHRoZSByZXN1bHRpbmcKKwkjICRteV91cmwgZGF0YSBpcyBub3QgdGhlIGZ1bGwgc2NyaXB0IFVSTDogdGhpcyBpcyBnb29kLCBiZWNhdXNlIHdlIHdhbnQKKwkjIGdlbmVyYXRlZCBsaW5rcyB0byBrZWVwIGltcGx5aW5nIHRoZSBzY3JpcHQgbmFtZSBpZiBpdCB3YXNuJ3QgZXhwbGljaXRseQorCSMgaW5kaWNhdGVkIGluIHRoZSBVUkwgd2UncmUgaGFuZGxpbmcsIGJ1dCBpdCBtZWFucyB0aGF0ICRteV91cmwgY2Fubm90IGJlIHVzZWQKKwkjIGFzIGJhc2UgVVJMLgorCSMgVGhlcmVmb3JlLCBpZiB3ZSBuZWVkZWQgdG8gc3RyaXAgUEFUSF9JTkZPLCB0aGVuIHdlIGtub3cgdGhhdCB3ZSBoYXZlCisJIyB0byBidWlsZCB0aGUgYmFzZSBVUkwgb3Vyc2VsdmVzOgorCW91ciAkcGF0aF9pbmZvID0gZGVjb2RlX3V0ZjgoJEVOVnsiUEFUSF9JTkZPIn0pOworCWlmICgkcGF0aF9pbmZvKSB7CisJCSMgJHBhdGhfaW5mbyBoYXMgYWxyZWFkeSBiZWVuIFVSTC1kZWNvZGVkIGJ5IHRoZSB3ZWIgc2VydmVyLCBidXQKKwkJIyAkbXlfdXJsIGFuZCAkbXlfdXJpIGhhdmUgbm90LiBVUkwtZGVjb2RlIHRoZW0gc28gd2UgY2FuIHByb3Blcmx5CisJCSMgc3RyaXAgJHBhdGhfaW5mby4KKwkJJG15X3VybCA9IHVuZXNjYXBlKCRteV91cmwpOworCQkkbXlfdXJpID0gdW5lc2NhcGUoJG15X3VyaSk7CisJCWlmICgkbXlfdXJsID1+IHMsXFEkcGF0aF9pbmZvXEUkLCwgJiYKKwkJICAgICRteV91cmkgPX4gcyxcUSRwYXRoX2luZm9cRSQsLCAmJgorCQkgICAgZGVmaW5lZCAkRU5WeydTQ1JJUFRfTkFNRSd9KSB7CisJCQkkYmFzZV91cmwgPSAkY2dpLT51cmwoLWJhc2UgPT4gMSkgLiAkRU5WeydTQ1JJUFRfTkFNRSd9OworCQl9CisJfQorCisJIyB0YXJnZXQgb2YgdGhlIGhvbWUgbGluayBvbiB0b3Agb2YgYWxsIHBhZ2VzCisJb3VyICRob21lX2xpbmsgPSAkbXlfdXJpIHx8ICIvIjsKK30KKworIyBjb3JlIGdpdCBleGVjdXRhYmxlIHRvIHVzZQorIyB0aGlzIGNhbiBqdXN0IGJlICJnaXQiIGlmIHlvdXIgd2Vic2VydmVyIGhhcyBhIHNlbnNpYmxlIFBBVEgKK291ciAkR0lUID0gIisrR0lUX0JJTkRJUisrL2dpdCI7CisKKyMgYWJzb2x1dGUgZnMtcGF0aCB3aGljaCB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGUgcHJvamVjdCBwYXRoCisjb3VyICRwcm9qZWN0cm9vdCA9ICIvcHViL3NjbSI7CitvdXIgJHByb2plY3Ryb290ID0gIisrR0lUV0VCX1BST0pFQ1RST09UKysiOworCisjIGZzIHRyYXZlcnNpbmcgbGltaXQgZm9yIGdldHRpbmcgcHJvamVjdCBsaXN0CisjIHRoZSBudW1iZXIgaXMgcmVsYXRpdmUgdG8gdGhlIHByb2plY3Ryb290CitvdXIgJHByb2plY3RfbWF4ZGVwdGggPSAiKytHSVRXRUJfUFJPSkVDVF9NQVhERVBUSCsrIjsKKworIyBzdHJpbmcgb2YgdGhlIGhvbWUgbGluayBvbiB0b3Agb2YgYWxsIHBhZ2VzCitvdXIgJGhvbWVfbGlua19zdHIgPSAiKytHSVRXRUJfSE9NRV9MSU5LX1NUUisrIjsKKworIyBleHRyYSBicmVhZGNydW1icyBwcmVjZWRpbmcgdGhlIGhvbWUgbGluaworb3VyIEBleHRyYV9icmVhZGNydW1icyA9ICgpOworCisjIG5hbWUgb2YgeW91ciBzaXRlIG9yIG9yZ2FuaXphdGlvbiB0byBhcHBlYXIgaW4gcGFnZSB0aXRsZXMKKyMgcmVwbGFjZSB0aGlzIHdpdGggc29tZXRoaW5nIG1vcmUgZGVzY3JpcHRpdmUgZm9yIGNsZWFyZXIgYm9va21hcmtzCitvdXIgJHNpdGVfbmFtZSA9ICIrK0dJVFdFQl9TSVRFTkFNRSsrIgorICAgICAgICAgICAgICAgICB8fCAoJEVOVnsnU0VSVkVSX05BTUUnfSB8fCAiVW50aXRsZWQiKSAuICIgR2l0IjsKKworIyBodG1sIHNuaXBwZXQgdG8gaW5jbHVkZSBpbiB0aGUgPGhlYWQ+IHNlY3Rpb24gb2YgZWFjaCBwYWdlCitvdXIgJHNpdGVfaHRtbF9oZWFkX3N0cmluZyA9ICIrK0dJVFdFQl9TSVRFX0hUTUxfSEVBRF9TVFJJTkcrKyI7CisjIGZpbGVuYW1lIG9mIGh0bWwgdGV4dCB0byBpbmNsdWRlIGF0IHRvcCBvZiBlYWNoIHBhZ2UKK291ciAkc2l0ZV9oZWFkZXIgPSAiKytHSVRXRUJfU0lURV9IRUFERVIrKyI7CisjIGh0bWwgdGV4dCB0byBpbmNsdWRlIGF0IGhvbWUgcGFnZQorb3VyICRob21lX3RleHQgPSAiKytHSVRXRUJfSE9NRVRFWFQrKyI7CisjIGZpbGVuYW1lIG9mIGh0bWwgdGV4dCB0byBpbmNsdWRlIGF0IGJvdHRvbSBvZiBlYWNoIHBhZ2UKK291ciAkc2l0ZV9mb290ZXIgPSAiKytHSVRXRUJfU0lURV9GT09URVIrKyI7CisKKyMgVVJJIG9mIHN0eWxlc2hlZXRzCitvdXIgQHN0eWxlc2hlZXRzID0gKCIrK0dJVFdFQl9DU1MrKyIpOworIyBVUkkgb2YgYSBzaW5nbGUgc3R5bGVzaGVldCwgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gaW4gR0lUV0VCX0NPTkZJRy4KK291ciAkc3R5bGVzaGVldCA9IHVuZGVmOworIyBVUkkgb2YgR0lUIGxvZ28gKDcyeDI3IHNpemUpCitvdXIgJGxvZ28gPSAiKytHSVRXRUJfTE9HTysrIjsKKyMgVVJJIG9mIEdJVCBmYXZpY29uLCBhc3N1bWVkIHRvIGJlIGltYWdlL3BuZyB0eXBlCitvdXIgJGZhdmljb24gPSAiKytHSVRXRUJfRkFWSUNPTisrIjsKKyMgVVJJIG9mIGdpdHdlYi5qcyAoSmF2YVNjcmlwdCBjb2RlIGZvciBnaXR3ZWIpCitvdXIgJGphdmFzY3JpcHQgPSAiKytHSVRXRUJfSlMrKyI7CisKKyMgVVJJIGFuZCBsYWJlbCAodGl0bGUpIG9mIEdJVCBsb2dvIGxpbmsKKyNvdXIgJGxvZ29fdXJsID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzLyI7Cisjb3VyICRsb2dvX2xhYmVsID0gImdpdCBkb2N1bWVudGF0aW9uIjsKK291ciAkbG9nb191cmwgPSAiaHR0cDovL2dpdC1zY20uY29tLyI7CitvdXIgJGxvZ29fbGFiZWwgPSAiZ2l0IGhvbWVwYWdlIjsKKworIyBzb3VyY2Ugb2YgcHJvamVjdHMgbGlzdAorb3VyICRwcm9qZWN0c19saXN0ID0gIisrR0lUV0VCX0xJU1QrKyI7CisKKyMgdGhlIHdpZHRoIChpbiBjaGFyYWN0ZXJzKSBvZiB0aGUgcHJvamVjdHMgbGlzdCAiRGVzY3JpcHRpb24iIGNvbHVtbgorb3VyICRwcm9qZWN0c19saXN0X2Rlc2NyaXB0aW9uX3dpZHRoID0gMjU7CisKKyMgZ3JvdXAgcHJvamVjdHMgYnkgY2F0ZWdvcnkgb24gdGhlIHByb2plY3RzIGxpc3QKKyMgKGVuYWJsZWQgaWYgdGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdHJ1ZSkKK291ciAkcHJvamVjdHNfbGlzdF9ncm91cF9jYXRlZ29yaWVzID0gMDsKKworIyBkZWZhdWx0IGNhdGVnb3J5IGlmIG5vbmUgc3BlY2lmaWVkCisjIChsZWF2ZSB0aGUgZW1wdHkgc3RyaW5nIGZvciBubyBjYXRlZ29yeSkKK291ciAkcHJvamVjdF9saXN0X2RlZmF1bHRfY2F0ZWdvcnkgPSAiIjsKKworIyBkZWZhdWx0IG9yZGVyIG9mIHByb2plY3RzIGxpc3QKKyMgdmFsaWQgdmFsdWVzIGFyZSBub25lLCBwcm9qZWN0LCBkZXNjciwgb3duZXIsIGFuZCBhZ2UKK291ciAkZGVmYXVsdF9wcm9qZWN0c19vcmRlciA9ICJwcm9qZWN0IjsKKworIyBzaG93IHJlcG9zaXRvcnkgb25seSBpZiB0aGlzIGZpbGUgZXhpc3RzCisjIChvbmx5IGVmZmVjdGl2ZSBpZiB0aGlzIHZhcmlhYmxlIGV2YWx1YXRlcyB0byB0cnVlKQorb3VyICRleHBvcnRfb2sgPSAiKytHSVRXRUJfRVhQT1JUX09LKysiOworCisjIGRvbid0IGdlbmVyYXRlIGFnZSBjb2x1bW4gb24gdGhlIHByb2plY3RzIGxpc3QgcGFnZQorb3VyICRvbWl0X2FnZV9jb2x1bW4gPSAwOworCisjIGRvbid0IGdlbmVyYXRlIGluZm9ybWF0aW9uIGFib3V0IG93bmVycyBvZiByZXBvc2l0b3JpZXMKK291ciAkb21pdF9vd25lcj0wOworCisjIHNob3cgcmVwb3NpdG9yeSBvbmx5IGlmIHRoaXMgc3Vicm91dGluZSByZXR1cm5zIHRydWUKKyMgd2hlbiBnaXZlbiB0aGUgcGF0aCB0byB0aGUgcHJvamVjdCwgZm9yIGV4YW1wbGU6CisjICAgIHN1YiB7IHJldHVybiAtZSAiJF9bMF0vZ2l0LWRhZW1vbi1leHBvcnQtb2siOyB9CitvdXIgJGV4cG9ydF9hdXRoX2hvb2sgPSB1bmRlZjsKKworIyBvbmx5IGFsbG93IHZpZXdpbmcgb2YgcmVwb3NpdG9yaWVzIGFsc28gc2hvd24gb24gdGhlIG92ZXJ2aWV3IHBhZ2UKK291ciAkc3RyaWN0X2V4cG9ydCA9ICIrK0dJVFdFQl9TVFJJQ1RfRVhQT1JUKysiOworCisjIGxpc3Qgb2YgZ2l0IGJhc2UgVVJMcyB1c2VkIGZvciBVUkwgdG8gd2hlcmUgZmV0Y2ggcHJvamVjdCBmcm9tLAorIyBpLmUuIGZ1bGwgVVJMIGlzICIkZ2l0X2Jhc2VfdXJsLyRwcm9qZWN0Igorb3VyIEBnaXRfYmFzZV91cmxfbGlzdCA9IGdyZXAgeyAkXyBuZSAnJyB9ICgiKytHSVRXRUJfQkFTRV9VUkwrKyIpOworCisjIGRlZmF1bHQgYmxvYl9wbGFpbiBtaW1ldHlwZSBhbmQgZGVmYXVsdCBjaGFyc2V0IGZvciB0ZXh0L3BsYWluIGJsb2IKK291ciAkZGVmYXVsdF9ibG9iX3BsYWluX21pbWV0eXBlID0gJ3RleHQvcGxhaW4nOworb3VyICRkZWZhdWx0X3RleHRfcGxhaW5fY2hhcnNldCAgPSB1bmRlZjsKKworIyBmaWxlIHRvIHVzZSBmb3IgZ3Vlc3NpbmcgTUlNRSB0eXBlcyBiZWZvcmUgdHJ5aW5nIC9ldGMvbWltZS50eXBlcworIyAocmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZ2l0IHJlcG9zaXRvcnkpCitvdXIgJG1pbWV0eXBlc19maWxlID0gdW5kZWY7CisKKyMgYXNzdW1lIHRoaXMgY2hhcnNldCBpZiBsaW5lIGNvbnRhaW5zIG5vbi1VVEYtOCBjaGFyYWN0ZXJzOworIyBpdCBzaG91bGQgYmUgdmFsaWQgZW5jb2RpbmcgKHNlZSBFbmNvZGluZzo6U3VwcG9ydGVkKDNwbSkgZm9yIGxpc3QpLAorIyBmb3Igd2hpY2ggZW5jb2RpbmcgYWxsIGJ5dGUgc2VxdWVuY2VzIGFyZSB2YWxpZCwgZm9yIGV4YW1wbGUKKyMgJ2lzby04ODU5LTEnIGFrYSAnbGF0aW4xJyAoaXQgaXMgZGVjb2RlZCB3aXRob3V0IGNoZWNraW5nLCBzbyBpdAorIyBjb3VsZCBiZSBldmVuICd1dGYtOCcgZm9yIHRoZSBvbGQgYmVoYXZpb3IpCitvdXIgJGZhbGxiYWNrX2VuY29kaW5nID0gJ2xhdGluMSc7CisKKyMgcmVuYW1lIGRldGVjdGlvbiBvcHRpb25zIGZvciBnaXQtZGlmZiBhbmQgZ2l0LWRpZmYtdHJlZQorIyAtIGRlZmF1bHQgaXMgJy1NJywgd2l0aCB0aGUgY29zdCBwcm9wb3J0aW9uYWwgdG8KKyMgICAobnVtYmVyIG9mIHJlbW92ZWQgZmlsZXMpICogKG51bWJlciBvZiBuZXcgZmlsZXMpLgorIyAtIG1vcmUgY29zdGx5IGlzICctQycgKHdoaWNoIGltcGxpZXMgJy1NJyksIHdpdGggdGhlIGNvc3QgcHJvcG9ydGlvbmFsIHRvCisjICAgKG51bWJlciBvZiBjaGFuZ2VkIGZpbGVzICsgbnVtYmVyIG9mIHJlbW92ZWQgZmlsZXMpICogKG51bWJlciBvZiBuZXcgZmlsZXMpCisjIC0gZXZlbiBtb3JlIGNvc3RseSBpcyAnLUMnLCAnLS1maW5kLWNvcGllcy1oYXJkZXInIHdpdGggY29zdAorIyAgIChudW1iZXIgb2YgZmlsZXMgaW4gdGhlIG9yaWdpbmFsIHRyZWUpICogKG51bWJlciBvZiBuZXcgZmlsZXMpCisjIC0gb25lIG1pZ2h0IHdhbnQgdG8gaW5jbHVkZSAnLUInIG9wdGlvbiwgZS5nLiAnLUInLCAnLU0nCitvdXIgQGRpZmZfb3B0cyA9ICgnLU0nKTsgIyB0YWtlbiBmcm9tIGdpdF9jb21taXQKKworIyBEaXNhYmxlcyBmZWF0dXJlcyB0aGF0IHdvdWxkIGFsbG93IHJlcG9zaXRvcnkgb3duZXJzIHRvIGluamVjdCBzY3JpcHQgaW50bworIyB0aGUgZ2l0d2ViIGRvbWFpbi4KK291ciAkcHJldmVudF94c3MgPSAwOworCisjIFBhdGggdG8gdGhlIGhpZ2hsaWdodCBleGVjdXRhYmxlIHRvIHVzZSAobXVzdCBiZSB0aGUgb25lIGZyb20KKyMgaHR0cDovL3d3dy5hbmRyZS1zaW1vbi5kZSBkdWUgdG8gYXNzdW1wdGlvbnMgYWJvdXQgcGFyYW1ldGVycyBhbmQgb3V0cHV0KS4KKyMgVXNlZnVsIGlmIGhpZ2hsaWdodCBpcyBub3QgaW5zdGFsbGVkIG9uIHlvdXIgd2Vic2VydmVyJ3MgUEFUSC4KKyMgW0RlZmF1bHQ6IGhpZ2hsaWdodF0KK291ciAkaGlnaGxpZ2h0X2JpbiA9ICIrK0hJR0hMSUdIVF9CSU4rKyI7CisKKyMgaW5mb3JtYXRpb24gYWJvdXQgc25hcHNob3QgZm9ybWF0cyB0aGF0IGdpdHdlYiBpcyBjYXBhYmxlIG9mIHNlcnZpbmcKK291ciAla25vd25fc25hcHNob3RfZm9ybWF0cyA9ICgKKwkjIG5hbWUgPT4geworCSMgCSdkaXNwbGF5JyA9PiBkaXNwbGF5IG5hbWUsCisJIyAJJ3R5cGUnID0+IG1pbWUgdHlwZSwKKwkjIAknc3VmZml4JyA9PiBmaWxlbmFtZSBzdWZmaXgsCisJIyAJJ2Zvcm1hdCcgPT4gLS1mb3JtYXQgZm9yIGdpdC1hcmNoaXZlLAorCSMgCSdjb21wcmVzc29yJyA9PiBbY29tcHJlc3NvciBjb21tYW5kIGFuZCBhcmd1bWVudHNdCisJIyAJICAgICAgICAgICAgICAgIChhcnJheSByZWZlcmVuY2UsIG9wdGlvbmFsKQorCSMgCSdkaXNhYmxlZCcgPT4gYm9vbGVhbiAob3B0aW9uYWwpfQorCSMKKwkndGd6JyA9PiB7CisJCSdkaXNwbGF5JyA9PiAndGFyLmd6JywKKwkJJ3R5cGUnID0+ICdhcHBsaWNhdGlvbi94LWd6aXAnLAorCQknc3VmZml4JyA9PiAnLnRhci5neicsCisJCSdmb3JtYXQnID0+ICd0YXInLAorCQknY29tcHJlc3NvcicgPT4gWydnemlwJywgJy1uJ119LAorCisJJ3RiejInID0+IHsKKwkJJ2Rpc3BsYXknID0+ICd0YXIuYnoyJywKKwkJJ3R5cGUnID0+ICdhcHBsaWNhdGlvbi94LWJ6aXAyJywKKwkJJ3N1ZmZpeCcgPT4gJy50YXIuYnoyJywKKwkJJ2Zvcm1hdCcgPT4gJ3RhcicsCisJCSdjb21wcmVzc29yJyA9PiBbJ2J6aXAyJ119LAorCisJJ3R4eicgPT4geworCQknZGlzcGxheScgPT4gJ3Rhci54eicsCisJCSd0eXBlJyA9PiAnYXBwbGljYXRpb24veC14eicsCisJCSdzdWZmaXgnID0+ICcudGFyLnh6JywKKwkJJ2Zvcm1hdCcgPT4gJ3RhcicsCisJCSdjb21wcmVzc29yJyA9PiBbJ3h6J10sCisJCSdkaXNhYmxlZCcgPT4gMX0sCisKKwknemlwJyA9PiB7CisJCSdkaXNwbGF5JyA9PiAnemlwJywKKwkJJ3R5cGUnID0+ICdhcHBsaWNhdGlvbi94LXppcCcsCisJCSdzdWZmaXgnID0+ICcuemlwJywKKwkJJ2Zvcm1hdCcgPT4gJ3ppcCd9LAorKTsKKworIyBBbGlhc2VzIHNvIHdlIHVuZGVyc3RhbmQgb2xkIGdpdHdlYi5zbmFwc2hvdCB2YWx1ZXMgaW4gcmVwb3NpdG9yeQorIyBjb25maWd1cmF0aW9uLgorb3VyICVrbm93bl9zbmFwc2hvdF9mb3JtYXRfYWxpYXNlcyA9ICgKKwknZ3ppcCcgID0+ICd0Z3onLAorCSdiemlwMicgPT4gJ3RiejInLAorCSd4eicgICAgPT4gJ3R4eicsCisKKwkjIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGxlZ2FjeSBnaXR3ZWIgY29uZmlnIHN1cHBvcnQKKwkneC1nemlwJyA9PiB1bmRlZiwgJ2d6JyA9PiB1bmRlZiwKKwkneC1iemlwMicgPT4gdW5kZWYsICdiejInID0+IHVuZGVmLAorCSd4LXppcCcgPT4gdW5kZWYsICcnID0+IHVuZGVmLAorKTsKKworIyBQaXhlbCBzaXplcyBmb3IgaWNvbnMgYW5kIGF2YXRhcnMuIElmIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZXMgb3IgbGluZWhlaWdodHMKKyMgYXJlIGNoYW5nZWQsIGl0IG1heSBiZSBhcHByb3ByaWF0ZSB0byBjaGFuZ2UgdGhlc2UgdmFsdWVzIHRvbyB2aWEKKyMgJEdJVFdFQl9DT05GSUcuCitvdXIgJWF2YXRhcl9zaXplID0gKAorCSdkZWZhdWx0JyA9PiAxNiwKKwknZG91YmxlJyAgPT4gMzIKKyk7CisKKyMgVXNlZCB0byBzZXQgdGhlIG1heGltdW0gbG9hZCB0aGF0IHdlIHdpbGwgc3RpbGwgcmVzcG9uZCB0byBnaXR3ZWIgcXVlcmllcy4KKyMgSWYgc2VydmVyIGxvYWQgZXhjZWVkIHRoaXMgdmFsdWUgdGhlbiByZXR1cm4gIjUwMyBzZXJ2ZXIgYnVzeSIgZXJyb3IuCisjIElmIGdpdHdlYiBjYW5ub3QgZGV0ZXJtaW5lZCBzZXJ2ZXIgbG9hZCwgaXQgaXMgdGFrZW4gdG8gYmUgMC4KKyMgTGVhdmUgaXQgdW5kZWZpbmVkIChvciBzZXQgdG8gJ3VuZGVmJykgdG8gdHVybiBvZmYgbG9hZCBjaGVja2luZy4KK291ciAkbWF4bG9hZCA9IDMwMDsKKworIyBjb25maWd1cmF0aW9uIGZvciAnaGlnaGxpZ2h0JyAoaHR0cDovL3d3dy5hbmRyZS1zaW1vbi5kZS8pCisjIG1hdGNoIGJ5IGJhc2VuYW1lCitvdXIgJWhpZ2hsaWdodF9iYXNlbmFtZSA9ICgKKwkjJ1Byb2dyYW0nID0+ICdweScsCisJIydMaWJyYXJ5JyA9PiAncHknLAorCSdTQ29uc3RydWN0JyA9PiAncHknLCAjIFNDb25zIGVxdWl2YWxlbnQgb2YgTWFrZWZpbGUKKwknTWFrZWZpbGUnID0+ICdtYWtlJywKKyk7CisjIG1hdGNoIGJ5IGV4dGVuc2lvbgorb3VyICVoaWdobGlnaHRfZXh0ID0gKAorCSMgbWFpbiBleHRlbnNpb25zLCBkZWZpbmluZyBuYW1lIG9mIHN5bnRheDsKKwkjIHNlZSBmaWxlcyBpbiAvdXNyL3NoYXJlL2hpZ2hsaWdodC9sYW5nRGVmcy8gZGlyZWN0b3J5CisJKG1hcCB7ICRfID0+ICRfIH0gcXcocHkgcmIgamF2YSBjc3MganMgdGV4IGJpYiB4bWwgYXdrIGJhdCBpbmkgc3BlYyB0Y2wgc3FsKSksCisJIyBhbHRlcm5hdGUgZXh0ZW5zaW9ucywgc2VlIC9ldGMvaGlnaGxpZ2h0L2ZpbGV0eXBlcy5jb25mCisJKG1hcCB7ICRfID0+ICdjJyAgIH0gcXcoYyBoKSksCisJKG1hcCB7ICRfID0+ICdzaCcgIH0gcXcoc2ggYmFzaCB6c2gga3NoKSksCisJKG1hcCB7ICRfID0+ICdjcHAnIH0gcXcoY3BwIGN4eCBjKysgY2MpKSwKKwkobWFwIHsgJF8gPT4gJ3BocCcgfSBxdyhwaHAgcGhwMyBwaHA0IHBocDUgcGhwcykpLAorCShtYXAgeyAkXyA9PiAncGwnICB9IHF3KHBsIHBlcmwgcG0pKSwgIyBwZXJoYXBzIGFsc28gJ2NnaScKKwkobWFwIHsgJF8gPT4gJ21ha2UnfSBxdyhtYWtlIG1hayBtaykpLAorCShtYXAgeyAkXyA9PiAneG1sJyB9IHF3KHhtbCB4aHRtbCBodG1sIGh0bSkpLAorKTsKKworIyBZb3UgZGVmaW5lIHNpdGUtd2lkZSBmZWF0dXJlIGRlZmF1bHRzIGhlcmU7IG92ZXJyaWRlIHRoZW0gd2l0aAorIyAkR0lUV0VCX0NPTkZJRyBhcyBuZWNlc3NhcnkuCitvdXIgJWZlYXR1cmUgPSAoCisJIyBmZWF0dXJlID0+IHsKKwkjIAknc3ViJyA9PiBmZWF0dXJlLXN1YiAoc3Vicm91dGluZSksCisJIyAJJ292ZXJyaWRlJyA9PiBhbGxvdy1vdmVycmlkZSAoYm9vbGVhbiksCisJIyAJJ2RlZmF1bHQnID0+IFsgZGVmYXVsdCBvcHRpb25zLi4uXSAoYXJyYXkgcmVmZXJlbmNlKX0KKwkjCisJIyBpZiBmZWF0dXJlIGlzIG92ZXJyaWRhYmxlIChpdCBtZWFucyB0aGF0IGFsbG93LW92ZXJyaWRlIGhhcyB0cnVlIHZhbHVlKSwKKwkjIHRoZW4gZmVhdHVyZS1zdWIgd2lsbCBiZSBjYWxsZWQgd2l0aCBkZWZhdWx0IG9wdGlvbnMgYXMgcGFyYW1ldGVyczsKKwkjIHJldHVybiB2YWx1ZSBvZiBmZWF0dXJlLXN1YiBpbmRpY2F0ZXMgaWYgdG8gZW5hYmxlIHNwZWNpZmllZCBmZWF0dXJlCisJIworCSMgaWYgdGhlcmUgaXMgbm8gJ3N1Yicga2V5IChubyBmZWF0dXJlLXN1YiksIHRoZW4gZmVhdHVyZSBjYW5ub3QgYmUKKwkjIG92ZXJyaWRkZW4KKwkjCisJIyB1c2UgZ2l0d2ViX2dldF9mZWF0dXJlKDxmZWF0dXJlPikgdG8gcmV0cmlldmUgdGhlIDxmZWF0dXJlPiB2YWx1ZQorCSMgKGFuIGFycmF5KSBvciBnaXR3ZWJfY2hlY2tfZmVhdHVyZSg8ZmVhdHVyZT4pIHRvIGNoZWNrIGlmIDxmZWF0dXJlPgorCSMgaXMgZW5hYmxlZAorCisJIyBFbmFibGUgdGhlICdibGFtZScgYmxvYiB2aWV3LCBzaG93aW5nIHRoZSBsYXN0IGNvbW1pdCB0aGF0IG1vZGlmaWVkCisJIyBlYWNoIGxpbmUgaW4gdGhlIGZpbGUuIFRoaXMgY2FuIGJlIHZlcnkgQ1BVLWludGVuc2l2ZS4KKworCSMgVG8gZW5hYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydibGFtZSd9eydkZWZhdWx0J30gPSBbMV07CisJIyBUbyBoYXZlIHByb2plY3Qgc3BlY2lmaWMgY29uZmlnIGVuYWJsZSBvdmVycmlkZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2JsYW1lJ317J292ZXJyaWRlJ30gPSAxOworCSMgYW5kIGluIHByb2plY3QgY29uZmlnIGdpdHdlYi5ibGFtZSA9IDB8MTsKKwknYmxhbWUnID0+IHsKKwkJJ3N1YicgPT4gc3ViIHsgZmVhdHVyZV9ib29sKCdibGFtZScsIEBfKSB9LAorCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMF19LAorCisJIyBFbmFibGUgdGhlICdzbmFwc2hvdCcgbGluaywgcHJvdmlkaW5nIGEgY29tcHJlc3NlZCBhcmNoaXZlIG9mIGFueQorCSMgdHJlZS4gVGhpcyBjYW4gcG90ZW50aWFsbHkgZ2VuZXJhdGUgaGlnaCB0cmFmZmljIGlmIHlvdSBoYXZlIGxhcmdlCisJIyBwcm9qZWN0LgorCisJIyBWYWx1ZSBpcyBhIGxpc3Qgb2YgZm9ybWF0cyBkZWZpbmVkIGluICVrbm93bl9zbmFwc2hvdF9mb3JtYXRzIHRoYXQKKwkjIHlvdSB3aXNoIHRvIG9mZmVyLgorCSMgVG8gZGlzYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnc25hcHNob3QnfXsnZGVmYXVsdCd9ID0gW107CisJIyBUbyBoYXZlIHByb2plY3Qgc3BlY2lmaWMgY29uZmlnIGVuYWJsZSBvdmVycmlkZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3NuYXBzaG90J317J292ZXJyaWRlJ30gPSAxOworCSMgYW5kIGluIHByb2plY3QgY29uZmlnLCBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZvcm1hdHMgb3IgIm5vbmUiCisJIyB0byBkaXNhYmxlLiAgRXhhbXBsZTogZ2l0d2ViLnNuYXBzaG90ID0gdGJ6Mix6aXA7CisJJ3NuYXBzaG90JyA9PiB7CisJCSdzdWInID0+IFwmZmVhdHVyZV9zbmFwc2hvdCwKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWyd0Z3onXX0sCisKKwkjIEVuYWJsZSB0ZXh0IHNlYXJjaCwgd2hpY2ggd2lsbCBsaXN0IHRoZSBjb21taXRzIHdoaWNoIG1hdGNoIGF1dGhvciwKKwkjIGNvbW1pdHRlciBvciBjb21taXQgdGV4dCB0byBhIGdpdmVuIHN0cmluZy4gIEVuYWJsZWQgYnkgZGVmYXVsdC4KKwkjIFByb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgbm90IHN1cHBvcnRlZC4KKwkjCisJIyBOb3RlIHRoYXQgdGhpcyBjb250cm9scyBhbGwgc2VhcmNoIGZlYXR1cmVzLCB3aGljaCBtZWFucyB0aGF0IGlmCisJIyBpdCBpcyBkaXNhYmxlZCwgdGhlbiAnZ3JlcCcgYW5kICdwaWNrYXhlJyBzZWFyY2ggd291bGQgYWxzbyBiZQorCSMgZGlzYWJsZWQuCisJJ3NlYXJjaCcgPT4geworCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMV19LAorCisJIyBFbmFibGUgZ3JlcCBzZWFyY2gsIHdoaWNoIHdpbGwgbGlzdCB0aGUgZmlsZXMgaW4gY3VycmVudGx5IHNlbGVjdGVkCisJIyB0cmVlIGNvbnRhaW5pbmcgdGhlIGdpdmVuIHN0cmluZy4gRW5hYmxlZCBieSBkZWZhdWx0LiBUaGlzIGNhbiBiZQorCSMgcG90ZW50aWFsbHkgQ1BVLWludGVuc2l2ZSwgb2YgY291cnNlLgorCSMgTm90ZSB0aGF0IHlvdSBuZWVkIHRvIGhhdmUgJ3NlYXJjaCcgZmVhdHVyZSBlbmFibGVkIHRvby4KKworCSMgVG8gZW5hYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydncmVwJ317J2RlZmF1bHQnfSA9IFsxXTsKKwkjIFRvIGhhdmUgcHJvamVjdCBzcGVjaWZpYyBjb25maWcgZW5hYmxlIG92ZXJyaWRlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnZ3JlcCd9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIuZ3JlcCA9IDB8MTsKKwknZ3JlcCcgPT4geworCQknc3ViJyA9PiBzdWIgeyBmZWF0dXJlX2Jvb2woJ2dyZXAnLCBAXykgfSwKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzFdfSwKKworCSMgRW5hYmxlIHRoZSBwaWNrYXhlIHNlYXJjaCwgd2hpY2ggd2lsbCBsaXN0IHRoZSBjb21taXRzIHRoYXQgbW9kaWZpZWQKKwkjIGEgZ2l2ZW4gc3RyaW5nIGluIGEgZmlsZS4gVGhpcyBjYW4gYmUgcHJhY3RpY2FsIGFuZCBxdWl0ZSBmYXN0ZXIKKwkjIGFsdGVybmF0aXZlIHRvICdibGFtZScsIGJ1dCBzdGlsbCBwb3RlbnRpYWxseSBDUFUtaW50ZW5zaXZlLgorCSMgTm90ZSB0aGF0IHlvdSBuZWVkIHRvIGhhdmUgJ3NlYXJjaCcgZmVhdHVyZSBlbmFibGVkIHRvby4KKworCSMgVG8gZW5hYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydwaWNrYXhlJ317J2RlZmF1bHQnfSA9IFsxXTsKKwkjIFRvIGhhdmUgcHJvamVjdCBzcGVjaWZpYyBjb25maWcgZW5hYmxlIG92ZXJyaWRlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsncGlja2F4ZSd9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIucGlja2F4ZSA9IDB8MTsKKwkncGlja2F4ZScgPT4geworCQknc3ViJyA9PiBzdWIgeyBmZWF0dXJlX2Jvb2woJ3BpY2theGUnLCBAXykgfSwKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzFdfSwKKworCSMgRW5hYmxlIHNob3dpbmcgc2l6ZSBvZiBibG9icyBpbiBhICd0cmVlJyB2aWV3LCBpbiBhIHNlcGFyYXRlCisJIyBjb2x1bW4sIHNpbWlsYXIgdG8gd2hhdCAnbHMgLWwnIGRvZXMuICBUaGlzIGNvc3QgYSBiaXQgb2YgSU8uCisKKwkjIFRvIGRpc2FibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3Nob3ctc2l6ZXMnfXsnZGVmYXVsdCd9ID0gWzBdOworCSMgVG8gaGF2ZSBwcm9qZWN0IHNwZWNpZmljIGNvbmZpZyBlbmFibGUgb3ZlcnJpZGUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydzaG93LXNpemVzJ317J292ZXJyaWRlJ30gPSAxOworCSMgYW5kIGluIHByb2plY3QgY29uZmlnIGdpdHdlYi5zaG93c2l6ZXMgPSAwfDE7CisJJ3Nob3ctc2l6ZXMnID0+IHsKKwkJJ3N1YicgPT4gc3ViIHsgZmVhdHVyZV9ib29sKCdzaG93c2l6ZXMnLCBAXykgfSwKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzFdfSwKKworCSMgTWFrZSBnaXR3ZWIgdXNlIGFuIGFsdGVybmF0aXZlIGZvcm1hdCBvZiB0aGUgVVJMcyB3aGljaCBjYW4gYmUKKwkjIG1vcmUgcmVhZGFibGUgYW5kIG5hdHVyYWwtbG9va2luZzogcHJvamVjdCBuYW1lIGlzIGVtYmVkZGVkCisJIyBkaXJlY3RseSBpbiB0aGUgcGF0aCBhbmQgdGhlIHF1ZXJ5IHN0cmluZyBjb250YWlucyBvdGhlcgorCSMgYXV4aWxpYXJ5IGluZm9ybWF0aW9uLiBBbGwgZ2l0d2ViIGluc3RhbGxhdGlvbnMgcmVjb2duaXplCisJIyBVUkwgaW4gZWl0aGVyIGZvcm1hdDsgdGhpcyBjb25maWd1cmVzIGluIHdoaWNoIGZvcm1hdHMgZ2l0d2ViCisJIyBnZW5lcmF0ZXMgbGlua3MuCisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsncGF0aGluZm8nfXsnZGVmYXVsdCd9ID0gWzFdOworCSMgUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCisJIyBOb3RlIHRoYXQgeW91IHdpbGwgbmVlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgQ1NTLAorCSMgZmF2aWNvbiwgbG9nbyBhbmQgcG9zc2libHkgb3RoZXIgZmlsZXMgdG8gYW4gYWJzb2x1dGUgVVJMLiBBbHNvLAorCSMgaWYgZ2l0d2ViLmNnaSBzZXJ2ZXMgYXMgeW91ciBpbmRleGZpbGUsIHlvdSB3aWxsIG5lZWQgdG8gZm9yY2UKKwkjICRteV91cmkgdG8gY29udGFpbiB0aGUgc2NyaXB0IG5hbWUgaW4geW91ciAkR0lUV0VCX0NPTkZJRy4KKwkncGF0aGluZm8nID0+IHsKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzBdfSwKKworCSMgTWFrZSBnaXR3ZWIgY29uc2lkZXIgcHJvamVjdHMgaW4gcHJvamVjdCByb290IHN1YmRpcmVjdG9yaWVzCisJIyB0byBiZSBmb3JrcyBvZiBleGlzdGluZyBwcm9qZWN0cy4gR2l2ZW4gcHJvamVjdCAkcHJvam5hbWUuZ2l0LAorCSMgcHJvamVjdHMgbWF0Y2hpbmcgJHByb2puYW1lLyouZ2l0IHdpbGwgbm90IGJlIHNob3duIGluIHRoZSBtYWluCisJIyBwcm9qZWN0cyBsaXN0LCBpbnN0ZWFkIGEgJysnIG1hcmsgd2lsbCBiZSBhZGRlZCB0byAkcHJvam5hbWUKKwkjIHRoZXJlIGFuZCBhICdmb3JrcycgdmlldyB3aWxsIGJlIGVuYWJsZWQgZm9yIHRoZSBwcm9qZWN0LCBsaXN0aW5nCisJIyBhbGwgdGhlIGZvcmtzLiBJZiBwcm9qZWN0IGxpc3QgaXMgdGFrZW4gZnJvbSBhIGZpbGUsIGZvcmtzIGhhdmUKKwkjIHRvIGJlIGxpc3RlZCBhZnRlciB0aGUgbWFpbiBwcm9qZWN0LgorCisJIyBUbyBlbmFibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2ZvcmtzJ317J2RlZmF1bHQnfSA9IFsxXTsKKwkjIFByb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgbm90IHN1cHBvcnRlZC4KKwknZm9ya3MnID0+IHsKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzBdfSwKKworCSMgSW5zZXJ0IGN1c3RvbSBsaW5rcyB0byB0aGUgYWN0aW9uIGJhciBvZiBhbGwgcHJvamVjdCBwYWdlcy4KKwkjIFRoaXMgZW5hYmxlcyB5b3UgbWFpbmx5IHRvIGxpbmsgdG8gdGhpcmQtcGFydHkgc2NyaXB0cyBpbnRlZ3JhdGluZworCSMgaW50byBnaXR3ZWI7IGUuZy4gZ2l0LWJyb3dzZXIgZm9yIGdyYXBoaWNhbCBoaXN0b3J5IHJlcHJlc2VudGF0aW9uCisJIyBvciBjdXN0b20gd2ViLWJhc2VkIHJlcG9zaXRvcnkgYWRtaW5pc3RyYXRpb24gaW50ZXJmYWNlLgorCisJIyBUaGUgJ2RlZmF1bHQnIHZhbHVlIGNvbnNpc3RzIG9mIGEgbGlzdCBvZiB0cmlwbGV0cyBpbiB0aGUgZm9ybQorCSMgKGxhYmVsLCBsaW5rLCBwb3NpdGlvbikgd2hlcmUgcG9zaXRpb24gaXMgdGhlIGxhYmVsIGFmdGVyIHdoaWNoCisJIyB0byBpbnNlcnQgdGhlIGxpbmsgYW5kIGxpbmsgaXMgYSBmb3JtYXQgc3RyaW5nIHdoZXJlICVuIGV4cGFuZHMKKwkjIHRvIHRoZSBwcm9qZWN0IG5hbWUsICVmIHRvIHRoZSBwcm9qZWN0IHBhdGggd2l0aGluIHRoZSBmaWxlc3lzdGVtLAorCSMgJWggdG8gdGhlIGN1cnJlbnQgaGFzaCAoaCBnaXR3ZWIgcGFyYW1ldGVyKSBhbmQgJWIgdG8gdGhlIGN1cnJlbnQKKwkjIGhhc2ggYmFzZSAoaGIgZ2l0d2ViIHBhcmFtZXRlcik7ICUlIGV4cGFuZHMgdG8gJS4KKworCSMgVG8gZW5hYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcgZS5nLgorCSMgJGZlYXR1cmV7J2FjdGlvbnMnfXsnZGVmYXVsdCd9ID0gWygnZ3JhcGhpY2xvZycsCisJIyAJJy9naXQtYnJvd3Nlci9ieS1jb21taXQuaHRtbD9yPSVuJywgJ3N1bW1hcnknKV07CisJIyBQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisJJ2FjdGlvbnMnID0+IHsKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gW119LAorCisJIyBBbGxvdyBnaXR3ZWIgc2NhbiBwcm9qZWN0IGNvbnRlbnQgdGFncyBvZiBwcm9qZWN0IHJlcG9zaXRvcnksCisJIyBhbmQgZGlzcGxheSB0aGUgcG9wdWxhciBXZWIgMi4wLWlzaCAidGFnIGNsb3VkIiBuZWFyIHRoZSBwcm9qZWN0cworCSMgbGlzdC4gIE5vdGUgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyBDT01QTEVURUxZIGRpZmZlcmVudCBmcm9tIHRoZQorCSMgbm9ybWFsIEdpdCB0YWdzLgorCisJIyBnaXR3ZWIgYnkgaXRzZWxmIGNhbiBzaG93IGV4aXN0aW5nIHRhZ3MsIGJ1dCBpdCBkb2VzIG5vdCBoYW5kbGUKKwkjIHRhZ2dpbmcgaXRzZWxmOyB5b3UgbmVlZCB0byBkbyBpdCBleHRlcm5hbGx5LCBvdXRzaWRlIGdpdHdlYi4KKwkjIFRoZSBmb3JtYXQgaXMgZGVzY3JpYmVkIGluIGdpdF9nZXRfcHJvamVjdF9jdGFncygpIHN1YnJvdXRpbmUuCisJIyBZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCB0aGUgSFRNTDo6VGFnQ2xvdWQgUGVybCBtb2R1bGUgdG8gZ2V0CisJIyBhIHByZXR0eSB0YWcgY2xvdWQgaW5zdGVhZCBvZiBqdXN0IGEgbGlzdCBvZiB0YWdzLgorCisJIyBUbyBlbmFibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2N0YWdzJ317J2RlZmF1bHQnfSA9IFsxXTsKKwkjIFByb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgbm90IHN1cHBvcnRlZC4KKworCSMgSW4gdGhlIGZ1dHVyZSB3aGV0aGVyIGN0YWdzIGVkaXRpbmcgaXMgZW5hYmxlZCBtaWdodCBkZXBlbmQKKwkjIG9uIHRoZSB2YWx1ZSwgYnV0IHVzaW5nIDEgc2hvdWxkIGFsd2F5cyBtZWFuIG5vIGVkaXRpbmcgb2YgY3RhZ3MuCisJJ2N0YWdzJyA9PiB7CisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFswXX0sCisKKwkjIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXRjaGVzIGluIGEgcGF0Y2hzZXQgZ2VuZXJhdGVkIGluIHBhdGNoCisJIyB2aWV3LiBTZXQgdGhpcyB0byAwIG9yIHVuZGVmIHRvIGRpc2FibGUgcGF0Y2ggdmlldywgb3IgdG8gYQorCSMgbmVnYXRpdmUgbnVtYmVyIHRvIHJlbW92ZSBhbnkgbGltaXQuCisKKwkjIFRvIGRpc2FibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3BhdGNoZXMnfXsnZGVmYXVsdCd9ID0gWzBdOworCSMgVG8gaGF2ZSBwcm9qZWN0IHNwZWNpZmljIGNvbmZpZyBlbmFibGUgb3ZlcnJpZGUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydwYXRjaGVzJ317J292ZXJyaWRlJ30gPSAxOworCSMgYW5kIGluIHByb2plY3QgY29uZmlnIGdpdHdlYi5wYXRjaGVzID0gMHxuOworCSMgd2hlcmUgbiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGF0Y2hlcyBhbGxvd2VkIGluIGEgcGF0Y2hzZXQuCisJJ3BhdGNoZXMnID0+IHsKKwkJJ3N1YicgPT4gXCZmZWF0dXJlX3BhdGNoZXMsCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsxNl19LAorCisJIyBBdmF0YXIgc3VwcG9ydC4gV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgdmlld3Mgc3VjaCBhcworCSMgc2hvcnRsb2cgb3IgY29tbWl0IHdpbGwgZGlzcGxheSBhbiBhdmF0YXIgYXNzb2NpYXRlZCB3aXRoCisJIyB0aGUgZW1haWwgb2YgdGhlIGNvbW1pdHRlcihzKSBhbmQvb3IgYXV0aG9yKHMpLgorCisJIyBDdXJyZW50bHkgYXZhaWxhYmxlIHByb3ZpZGVycyBhcmUgZ3JhdmF0YXIgYW5kIHBpY29uLgorCSMgSWYgYW4gdW5rbm93biBwcm92aWRlciBpcyBzcGVjaWZpZWQsIHRoZSBmZWF0dXJlIGlzIGRpc2FibGVkLgorCisJIyBQaWNvbiBjdXJyZW50bHkgcmVsaWVzIG9uIHRoZSBpbmRpYW5hLmVkdSBkYXRhYmFzZS4KKworCSMgVG8gZW5hYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydhdmF0YXInfXsnZGVmYXVsdCd9ID0gWyc8cHJvdmlkZXI+J107CisJIyB3aGVyZSA8cHJvdmlkZXI+IGlzIGVpdGhlciBncmF2YXRhciBvciBwaWNvbi4KKwkjIFRvIGhhdmUgcHJvamVjdCBzcGVjaWZpYyBjb25maWcgZW5hYmxlIG92ZXJyaWRlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnYXZhdGFyJ317J292ZXJyaWRlJ30gPSAxOworCSMgYW5kIGluIHByb2plY3QgY29uZmlnIGdpdHdlYi5hdmF0YXIgPSA8cHJvdmlkZXI+OworCSdhdmF0YXInID0+IHsKKwkJJ3N1YicgPT4gXCZmZWF0dXJlX2F2YXRhciwKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWycnXX0sCisKKwkjIEVuYWJsZSBkaXNwbGF5aW5nIGhvdyBtdWNoIHRpbWUgYW5kIGhvdyBtYW55IGdpdCBjb21tYW5kcworCSMgaXQgdG9vayB0byBnZW5lcmF0ZSBhbmQgZGlzcGxheSBwYWdlLiAgRGlzYWJsZWQgYnkgZGVmYXVsdC4KKwkjIFByb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgbm90IHN1cHBvcnRlZC4KKwkndGltZWQnID0+IHsKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzBdfSwKKworCSMgRW5hYmxlIHR1cm5pbmcgc29tZSBsaW5rcyBpbnRvIGxpbmtzIHRvIGFjdGlvbnMgd2hpY2ggcmVxdWlyZQorCSMgSmF2YVNjcmlwdCB0byBydW4gKGxpa2UgJ2JsYW1lX2luY3JlbWVudGFsJykuICBOb3QgZW5hYmxlZCBieQorCSMgZGVmYXVsdC4gIFByb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCisJJ2phdmFzY3JpcHQtYWN0aW9ucycgPT4geworCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMF19LAorCisJIyBFbmFibGUgYW5kIGNvbmZpZ3VyZSBhYmlsaXR5IHRvIGNoYW5nZSBjb21tb24gdGltZXpvbmUgZm9yIGRhdGVzCisJIyBpbiBnaXR3ZWIgb3V0cHV0IHZpYSBKYXZhU2NyaXB0LiAgRW5hYmxlZCBieSBkZWZhdWx0LgorCSMgUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCSdqYXZhc2NyaXB0LXRpbWV6b25lJyA9PiB7CisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsKKwkJCSdsb2NhbCcsICAgICAjIGRlZmF1bHQgdGltZXpvbmU6ICd1dGMnLCAnbG9jYWwnLCBvciAnKC18KylISE1NJyBmb3JtYXQsCisJCQkgICAgICAgICAgICAgIyBvciB1bmRlZiB0byB0dXJuIG9mZiB0aGlzIGZlYXR1cmUKKwkJCSdnaXR3ZWJfdHonLCAjIG5hbWUgb2YgY29va2llIHdoZXJlIHRvIHN0b3JlIHNlbGVjdGVkIHRpbWV6b25lCisJCQknZGF0ZXRpbWUnLCAgIyBDU1MgY2xhc3MgdXNlZCB0byBtYXJrIHVwIGRhdGVzIGZvciBtYW5pcHVsYXRpb24KKwkJXX0sCisKKwkjIFN5bnRheCBoaWdobGlnaHRpbmcgc3VwcG9ydC4gVGhpcyBpcyBiYXNlZCBvbiBEYW5pZWwgU3ZlbnNzb24ncworCSMgYW5kIFNoYW0gQ2h1a291cnkncyB3b3JrIGluIGdpdHdlYi14bW1zMi5naXQuCisJIyBJdCByZXF1aXJlcyB0aGUgJ2hpZ2hsaWdodCcgcHJvZ3JhbSBwcmVzZW50IGluICRQQVRILAorCSMgYW5kIHRoZXJlZm9yZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorCisJIyBUbyBlbmFibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2hpZ2hsaWdodCd9eydkZWZhdWx0J30gPSBbMV07CisKKwknaGlnaGxpZ2h0JyA9PiB7CisJCSdzdWInID0+IHN1YiB7IGZlYXR1cmVfYm9vbCgnaGlnaGxpZ2h0JywgQF8pIH0sCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFswXX0sCisKKwkjIEVuYWJsZSBkaXNwbGF5aW5nIG9mIHJlbW90ZSBoZWFkcyBpbiB0aGUgaGVhZHMgbGlzdAorCisJIyBUbyBlbmFibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3JlbW90ZV9oZWFkcyd9eydkZWZhdWx0J30gPSBbMV07CisJIyBUbyBoYXZlIHByb2plY3Qgc3BlY2lmaWMgY29uZmlnIGVuYWJsZSBvdmVycmlkZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3JlbW90ZV9oZWFkcyd9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIucmVtb3RlaGVhZHMgPSAwfDE7CisJJ3JlbW90ZV9oZWFkcycgPT4geworCQknc3ViJyA9PiBzdWIgeyBmZWF0dXJlX2Jvb2woJ3JlbW90ZV9oZWFkcycsIEBfKSB9LAorCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMF19LAorCisJIyBFbmFibGUgc2hvd2luZyBicmFuY2hlcyB1bmRlciBvdGhlciByZWZzIGluIGFkZGl0aW9uIHRvIGhlYWRzCisKKwkjIFRvIHNldCBzeXN0ZW0gd2lkZSBleHRyYSBicmFuY2ggcmVmcyBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnZXh0cmEtYnJhbmNoLXJlZnMnfXsnZGVmYXVsdCd9ID0gWydkaXJzJywgJ29mJywgJ2Nob2ljZSddOworCSMgVG8gaGF2ZSBwcm9qZWN0IHNwZWNpZmljIGNvbmZpZyBlbmFibGUgb3ZlcnJpZGUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydleHRyYS1icmFuY2gtcmVmcyd9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIuZXh0cmFicmFuY2hyZWZzID0gZGlycyBvZiBjaG9pY2UKKwkjIEV2ZXJ5IGRpcmVjdG9yeSBpcyBzZXBhcmF0ZWQgd2l0aCB3aGl0ZXNwYWNlLgorCisJJ2V4dHJhLWJyYW5jaC1yZWZzJyA9PiB7CisJCSdzdWInID0+IFwmZmVhdHVyZV9leHRyYV9icmFuY2hfcmVmcywKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gW119LAorKTsKKworc3ViIGdpdHdlYl9nZXRfZmVhdHVyZSB7CisJbXkgKCRuYW1lKSA9IEBfOworCXJldHVybiB1bmxlc3MgZXhpc3RzICRmZWF0dXJleyRuYW1lfTsKKwlteSAoJHN1YiwgJG92ZXJyaWRlLCBAZGVmYXVsdHMpID0gKAorCQkkZmVhdHVyZXskbmFtZX17J3N1Yid9LAorCQkkZmVhdHVyZXskbmFtZX17J292ZXJyaWRlJ30sCisJCUB7JGZlYXR1cmV7JG5hbWV9eydkZWZhdWx0J319KTsKKwkjIHByb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgcG9zc2libGUgb25seSBpZiB3ZSBoYXZlIHByb2plY3QKKwlvdXIgJGdpdF9kaXI7ICMgZ2xvYmFsIHZhcmlhYmxlLCBkZWNsYXJlZCBsYXRlcgorCWlmICghJG92ZXJyaWRlIHx8ICFkZWZpbmVkICRnaXRfZGlyKSB7CisJCXJldHVybiBAZGVmYXVsdHM7CisJfQorCWlmICghZGVmaW5lZCAkc3ViKSB7CisJCXdhcm4gImZlYXR1cmUgJG5hbWUgaXMgbm90IG92ZXJyaWRhYmxlIjsKKwkJcmV0dXJuIEBkZWZhdWx0czsKKwl9CisJcmV0dXJuICRzdWItPihAZGVmYXVsdHMpOworfQorCisjIEEgd3JhcHBlciB0byBjaGVjayBpZiBhIGdpdmVuIGZlYXR1cmUgaXMgZW5hYmxlZC4KKyMgV2l0aCB0aGlzLCB5b3UgY2FuIHNheQorIworIyAgIG15ICRib29sX2ZlYXQgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnYm9vbF9mZWF0Jyk7CisjICAgZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2Jvb2xfZmVhdCcpIG9yIHNvbWVjb2RlOworIworIyBpbnN0ZWFkIG9mCisjCisjICAgbXkgKCRib29sX2ZlYXQpID0gZ2l0d2ViX2dldF9mZWF0dXJlKCdib29sX2ZlYXQnKTsKKyMgICAoZ2l0d2ViX2dldF9mZWF0dXJlKCdib29sX2ZlYXQnKSlbMF0gb3Igc29tZWNvZGU7CisjCitzdWIgZ2l0d2ViX2NoZWNrX2ZlYXR1cmUgeworCXJldHVybiAoZ2l0d2ViX2dldF9mZWF0dXJlKEBfKSlbMF07Cit9CisKKworc3ViIGZlYXR1cmVfYm9vbCB7CisJbXkgJGtleSA9IHNoaWZ0OworCW15ICgkdmFsKSA9IGdpdF9nZXRfcHJvamVjdF9jb25maWcoJGtleSwgJy0tYm9vbCcpOworCisJaWYgKCFkZWZpbmVkICR2YWwpIHsKKwkJcmV0dXJuICgkX1swXSk7CisJfSBlbHNpZiAoJHZhbCBlcSAndHJ1ZScpIHsKKwkJcmV0dXJuICgxKTsKKwl9IGVsc2lmICgkdmFsIGVxICdmYWxzZScpIHsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisKK3N1YiBmZWF0dXJlX3NuYXBzaG90IHsKKwlteSAoQGZtdHMpID0gQF87CisKKwlteSAoJHZhbCkgPSBnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCdzbmFwc2hvdCcpOworCisJaWYgKCR2YWwpIHsKKwkJQGZtdHMgPSAoJHZhbCBlcSAnbm9uZScgPyAoKSA6IHNwbGl0IC9ccypbLFxzXVxzKi8sICR2YWwpOworCX0KKworCXJldHVybiBAZm10czsKK30KKworc3ViIGZlYXR1cmVfcGF0Y2hlcyB7CisJbXkgQHZhbCA9IChnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCdwYXRjaGVzJywgJy0taW50JykpOworCisJaWYgKEB2YWwpIHsKKwkJcmV0dXJuIEB2YWw7CisJfQorCisJcmV0dXJuICgkX1swXSk7Cit9CisKK3N1YiBmZWF0dXJlX2F2YXRhciB7CisJbXkgQHZhbCA9IChnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCdhdmF0YXInKSk7CisKKwlyZXR1cm4gQHZhbCA/IEB2YWwgOiBAXzsKK30KKworc3ViIGZlYXR1cmVfZXh0cmFfYnJhbmNoX3JlZnMgeworCW15IChAYnJhbmNoX3JlZnMpID0gQF87CisJbXkgJHZhbHVlcyA9IGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ2V4dHJhYnJhbmNocmVmcycpOworCisJaWYgKCR2YWx1ZXMpIHsKKwkJJHZhbHVlcyA9IGNvbmZpZ190b19tdWx0aSAoJHZhbHVlcyk7CisJCUBicmFuY2hfcmVmcyA9ICgpOworCQlmb3JlYWNoIG15ICR2YWx1ZSAoQHskdmFsdWVzfSkgeworCQkJcHVzaCBAYnJhbmNoX3JlZnMsIHNwbGl0IC9ccysvLCAkdmFsdWU7CisJCX0KKwl9CisKKwlyZXR1cm4gQGJyYW5jaF9yZWZzOworfQorCisjIGNoZWNraW5nIEhFQUQgZmlsZSB3aXRoIC1lIGlzIGZyYWdpbGUgaWYgdGhlIHJlcG9zaXRvcnkgd2FzCisjIGluaXRpYWxpemVkIGxvbmcgdGltZSBhZ28gKGkuZS4gc3ltbGluayBIRUFEKSBhbmQgd2FzIHBhY2stcmVmJ2VkCisjIGFuZCB0aGVuIHBydW5lZC4KK3N1YiBjaGVja19oZWFkX2xpbmsgeworCW15ICgkZGlyKSA9IEBfOworCW15ICRoZWFkZmlsZSA9ICIkZGlyL0hFQUQiOworCXJldHVybiAoKC1lICRoZWFkZmlsZSkgfHwKKwkJKC1sICRoZWFkZmlsZSAmJiByZWFkbGluaygkaGVhZGZpbGUpID1+IC9ecmVmc1wvaGVhZHNcLy8pKTsKK30KKworc3ViIGNoZWNrX2V4cG9ydF9vayB7CisJbXkgKCRkaXIpID0gQF87CisJcmV0dXJuIChjaGVja19oZWFkX2xpbmsoJGRpcikgJiYKKwkJKCEkZXhwb3J0X29rIHx8IC1lICIkZGlyLyRleHBvcnRfb2siKSAmJgorCQkoISRleHBvcnRfYXV0aF9ob29rIHx8ICRleHBvcnRfYXV0aF9ob29rLT4oJGRpcikpKTsKK30KKworIyBwcm9jZXNzIGFsdGVybmF0ZSBuYW1lcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorIyBmaWx0ZXIgb3V0IHVuc3VwcG9ydGVkICh1bmtub3duKSBzbmFwc2hvdCBmb3JtYXRzCitzdWIgZmlsdGVyX3NuYXBzaG90X2ZtdHMgeworCW15IEBmbXRzID0gQF87CisKKwlAZm10cyA9IG1hcCB7CisJCWV4aXN0cyAka25vd25fc25hcHNob3RfZm9ybWF0X2FsaWFzZXN7JF99ID8KKwkJICAgICAgICRrbm93bl9zbmFwc2hvdF9mb3JtYXRfYWxpYXNlc3skX30gOiAkX30gQGZtdHM7CisJQGZtdHMgPSBncmVwIHsKKwkJZXhpc3RzICRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRffSAmJgorCQkhJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JF99eydkaXNhYmxlZCd9fSBAZm10czsKK30KKworc3ViIGZpbHRlcl9hbmRfdmFsaWRhdGVfcmVmcyB7CisJbXkgQHJlZnMgPSBAXzsKKwlteSAldW5pcXVlX3JlZnMgPSAoKTsKKworCWZvcmVhY2ggbXkgJHJlZiAoQHJlZnMpIHsKKwkJZGllX2Vycm9yKDUwMCwgIkludmFsaWQgcmVmICckcmVmJyBpbiAnZXh0cmEtYnJhbmNoLXJlZnMnIGZlYXR1cmUiKSB1bmxlc3MgKGlzX3ZhbGlkX3JlZl9mb3JtYXQoJHJlZikpOworCQkjICdoZWFkcycgYXJlIGFkZGVkIGltcGxpY2l0bHkgaW4gZ2V0X2JyYW5jaF9yZWZzKCkuCisJCSR1bmlxdWVfcmVmc3skcmVmfSA9IDEgaWYgKCRyZWYgbmUgJ2hlYWRzJyk7CisJfQorCXJldHVybiBzb3J0IGtleXMgJXVuaXF1ZV9yZWZzOworfQorCisjIElmIGl0IGlzIHNldCB0byBjb2RlIHJlZmVyZW5jZSwgaXQgaXMgY29kZSB0aGF0IGl0IGlzIHRvIGJlIHJ1biBvbmNlIHBlcgorIyByZXF1ZXN0LCBhbGxvd2luZyB1cGRhdGluZyBjb25maWd1cmF0aW9ucyB0aGF0IGNoYW5nZSB3aXRoIGVhY2ggcmVxdWVzdCwKKyMgd2hpbGUgcnVubmluZyBvdGhlciBjb2RlIGluIGNvbmZpZyBmaWxlIG9ubHkgb25jZS4KKyMKKyMgT3RoZXJ3aXNlLCBpZiBpdCBpcyBmYWxzZSB0aGVuIGdpdHdlYiB3b3VsZCBwcm9jZXNzIGNvbmZpZyBmaWxlIG9ubHkgb25jZTsKKyMgaWYgaXQgaXMgdHJ1ZSB0aGVuIGdpdHdlYiBjb25maWcgd291bGQgYmUgcnVuIGZvciBlYWNoIHJlcXVlc3QuCitvdXIgJHBlcl9yZXF1ZXN0X2NvbmZpZyA9IDE7CisKKyMgcmVhZCBhbmQgcGFyc2UgZ2l0d2ViIGNvbmZpZyBmaWxlIGdpdmVuIGJ5IGl0cyBwYXJhbWV0ZXIuCisjIHJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiByZWNvdmVyYWJsZSBlcnJvciwgYWxsb3dpbmcKKyMgdG8gY2hhaW4gdGhpcyBzdWJyb3V0aW5lLCB1c2luZyBmaXJzdCBmaWxlIHRoYXQgZXhpc3RzLgorIyBkaWVzIG9uIGVycm9ycyBkdXJpbmcgcGFyc2luZyBjb25maWcgZmlsZSwgYXMgaXQgaXMgdW5yZWNvdmVyYWJsZS4KK3N1YiByZWFkX2NvbmZpZ19maWxlIHsKKwlteSAkZmlsZW5hbWUgPSBzaGlmdDsKKwlyZXR1cm4gdW5sZXNzIGRlZmluZWQgJGZpbGVuYW1lOworCSMgZGllIGlmIHRoZXJlIGFyZSBlcnJvcnMgcGFyc2luZyBjb25maWcgZmlsZQorCWlmICgtZSAkZmlsZW5hbWUpIHsKKwkJZG8gJGZpbGVuYW1lOworCQlkaWUgJEAgaWYgJEA7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm47Cit9CisKK291ciAoJEdJVFdFQl9DT05GSUcsICRHSVRXRUJfQ09ORklHX1NZU1RFTSwgJEdJVFdFQl9DT05GSUdfQ09NTU9OKTsKK3N1YiBldmFsdWF0ZV9naXR3ZWJfY29uZmlnIHsKKwlvdXIgJEdJVFdFQl9DT05GSUcgPSAkRU5WeydHSVRXRUJfQ09ORklHJ30gfHwgIisrR0lUV0VCX0NPTkZJRysrIjsKKwlvdXIgJEdJVFdFQl9DT05GSUdfU1lTVEVNID0gJEVOVnsnR0lUV0VCX0NPTkZJR19TWVNURU0nfSB8fCAiKytHSVRXRUJfQ09ORklHX1NZU1RFTSsrIjsKKwlvdXIgJEdJVFdFQl9DT05GSUdfQ09NTU9OID0gJEVOVnsnR0lUV0VCX0NPTkZJR19DT01NT04nfSB8fCAiKytHSVRXRUJfQ09ORklHX0NPTU1PTisrIjsKKworCSMgUHJvdGVjdCBhZ2FpbnN0IGR1cGxpY2F0aW9ucyBvZiBmaWxlIG5hbWVzLCB0byBub3QgcmVhZCBjb25maWcgdHdpY2UuCisJIyBPbmx5IG9uZSBvZiAkR0lUV0VCX0NPTkZJRyBhbmQgJEdJVFdFQl9DT05GSUdfU1lTVEVNIGlzIHVzZWQsIHNvCisJIyB0aGVyZSBwb3NzaWJpbGl0eSBvZiBkdXBsaWNhdGlvbiBvZiBmaWxlbmFtZSB0aGVyZSBkb2Vzbid0IG1hdHRlci4KKwkkR0lUV0VCX0NPTkZJRyA9ICIiICAgICAgICBpZiAoJEdJVFdFQl9DT05GSUcgZXEgJEdJVFdFQl9DT05GSUdfQ09NTU9OKTsKKwkkR0lUV0VCX0NPTkZJR19TWVNURU0gPSAiIiBpZiAoJEdJVFdFQl9DT05GSUdfU1lTVEVNIGVxICRHSVRXRUJfQ09ORklHX0NPTU1PTik7CisKKwkjIENvbW1vbiBzeXN0ZW0td2lkZSBzZXR0aW5ncyBmb3IgY29udmVuaWVuY2UuCisJIyBUaG9zZSBzZXR0aW5ncyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBHSVRXRUJfQ09ORklHIG9yIEdJVFdFQl9DT05GSUdfU1lTVEVNLgorCXJlYWRfY29uZmlnX2ZpbGUoJEdJVFdFQl9DT05GSUdfQ09NTU9OKTsKKworCSMgVXNlIGZpcnN0IGNvbmZpZyBmaWxlIHRoYXQgZXhpc3RzLiAgVGhpcyBtZWFucyB1c2UgdGhlIHBlci1pbnN0YW5jZQorCSMgR0lUV0VCX0NPTkZJRyBpZiBleGlzdHMsIG90aGVyd2lzZSB1c2UgR0lUV0VCX1NZU1RFTV9DT05GSUcuCisJcmVhZF9jb25maWdfZmlsZSgkR0lUV0VCX0NPTkZJRykgYW5kIHJldHVybjsKKwlyZWFkX2NvbmZpZ19maWxlKCRHSVRXRUJfQ09ORklHX1NZU1RFTSk7Cit9CisKKyMgR2V0IGxvYWRhdmcgb2Ygc3lzdGVtLCB0byBjb21wYXJlIGFnYWluc3QgJG1heGxvYWQuCisjIEN1cnJlbnRseSBpdCByZXF1aXJlcyAnL3Byb2MvbG9hZGF2ZycgcHJlc2VudCB0byBnZXQgbG9hZGF2ZzsKKyMgaWYgaXQgaXMgbm90IHByZXNlbnQgaXQgcmV0dXJucyAwLCB3aGljaCBtZWFucyBubyBsb2FkIGNoZWNraW5nLgorc3ViIGdldF9sb2FkYXZnIHsKKwlpZiggLWUgJy9wcm9jL2xvYWRhdmcnICl7CisJCW9wZW4gbXkgJGZkLCAnPCcsICcvcHJvYy9sb2FkYXZnJworCQkJb3IgcmV0dXJuIDA7CisJCW15IEBsb2FkID0gc3BsaXQoL1xzKy8sIHNjYWxhciA8JGZkPik7CisJCWNsb3NlICRmZDsKKworCQkjIFRoZSBmaXJzdCB0aHJlZSBjb2x1bW5zIG1lYXN1cmUgQ1BVIGFuZCBJTyB1dGlsaXphdGlvbiBvZiB0aGUgbGFzdCBvbmUsCisJCSMgZml2ZSwgYW5kIDEwIG1pbnV0ZSBwZXJpb2RzLiAgVGhlIGZvdXJ0aCBjb2x1bW4gc2hvd3MgdGhlIG51bWJlciBvZgorCQkjIGN1cnJlbnRseSBydW5uaW5nIHByb2Nlc3NlcyBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiBwcm9jZXNzZXMgaW4gdGhlIG0vbgorCQkjIGZvcm1hdC4gIFRoZSBsYXN0IGNvbHVtbiBkaXNwbGF5cyB0aGUgbGFzdCBwcm9jZXNzIElEIHVzZWQuCisJCXJldHVybiAkbG9hZFswXSB8fCAwOworCX0KKwkjIGFkZGl0aW9uYWwgY2hlY2tzIGZvciBsb2FkIGF2ZXJhZ2Ugc2hvdWxkIGdvIGhlcmUgZm9yIHRoaW5ncyB0aGF0IGRvbid0IGV4cG9ydAorCSMgL3Byb2MvbG9hZGF2ZworCisJcmV0dXJuIDA7Cit9CisKKyMgdmVyc2lvbiBvZiB0aGUgY29yZSBnaXQgYmluYXJ5CitvdXIgJGdpdF92ZXJzaW9uOworc3ViIGV2YWx1YXRlX2dpdF92ZXJzaW9uIHsKKwlvdXIgJGdpdF92ZXJzaW9uID0gcXgoIiRHSVQiIC0tdmVyc2lvbikgPX4gbS9naXQgdmVyc2lvbiAoLiopJC8gPyAkMSA6ICJ1bmtub3duIjsKKwkkbnVtYmVyX29mX2dpdF9jbWRzKys7Cit9CisKK3N1YiBjaGVja19sb2FkYXZnIHsKKwlpZiAoZGVmaW5lZCAkbWF4bG9hZCAmJiBnZXRfbG9hZGF2ZygpID4gJG1heGxvYWQpIHsKKwkJZGllX2Vycm9yKDUwMywgIlRoZSBsb2FkIGF2ZXJhZ2Ugb24gdGhlIHNlcnZlciBpcyB0b28gaGlnaCIpOworCX0KK30KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIGlucHV0IHZhbGlkYXRpb24gYW5kIGRpc3BhdGNoCisKKyMgVmFyaW91cyBoYXNoIHNpemUtcmVsYXRlZCB2YWx1ZXMuCitteSAkc2hhMV9sZW4gPSA0MDsKK215ICRzaGEyNTZfZXh0cmFfbGVuID0gMjQ7CitteSAkc2hhMjU2X2xlbiA9ICRzaGExX2xlbiArICRzaGEyNTZfZXh0cmFfbGVuOworCisjIEEgcmVnZXggbWF0Y2hpbmcgJGxlbiBoZXggY2hhcmFjdGVycy4gJGxlbiBtYXkgYmUgYSByYW5nZSAoZS5nLiA3LDY0KS4KK3N1YiBvaWRfbmxlbl9yZWdleCB7CisJbXkgJGxlbiA9IHNoaWZ0OworCW15ICRoY2hyID0gcXIvWzAtOWEtZkEtRl0vOworCXJldHVybiBxci8oPzooPzokaGNocil7JGxlbn0pLzsKK30KKworIyBBIHJlZ2V4IG1hdGNoaW5nIHR3byBzZXRzIG9mICRubGVuIGhleCBjaGFyYWN0ZXJzLCBwcmVmaXhlZCBieSB0aGUgbGl0ZXJhbAorIyBzdHJpbmcgJHByZWZpeCBhbmQgd2l0aCB0aGUgbGl0ZXJhbCBzdHJpbmcgJGluZml4IGJldHdlZW4gdGhlbS4KK3N1YiBvaWRfbmxlbl9wcmVmaXhfaW5maXhfcmVnZXggeworCW15ICRubGVuID0gc2hpZnQ7CisJbXkgJHByZWZpeCA9IHNoaWZ0OworCW15ICRpbmZpeCA9IHNoaWZ0OworCisJbXkgJHJ4ID0gb2lkX25sZW5fcmVnZXgoJG5sZW4pOworCisJcmV0dXJuIHFyL15cUSRwcmVmaXhcRSRyeFxRJGluZml4XEUkcngkLzsKK30KKworIyBBIHJlZ2V4IG1hdGNoaW5nIGEgdmFsaWQgb2JqZWN0IElELgorb3VyICRvaWRfcmVnZXg7Cit7CisJbXkgJHggPSBvaWRfbmxlbl9yZWdleCgkc2hhMV9sZW4pOworCW15ICR5ID0gb2lkX25sZW5fcmVnZXgoJHNoYTI1Nl9leHRyYV9sZW4pOworCSRvaWRfcmVnZXggPSBxci8oPzokeCg/OiR5KT8pLzsKK30KKworIyBpbnB1dCBwYXJhbWV0ZXJzIGNhbiBiZSBjb2xsZWN0ZWQgZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyAocHJlc2VudGx5LCBDR0kKKyMgYW5kIFBBVEhfSU5GTyksIHNvIHdlIGRlZmluZSBhbiAlaW5wdXRfcGFyYW1zIGhhc2ggdGhhdCBjb2xsZWN0cyB0aGVtIGFsbAorIyB0b2dldGhlciBkdXJpbmcgdmFsaWRhdGlvbjogdGhpcyBhbGxvd3Mgc3Vic2VxdWVudCB1c2VzIChlLmcuIGhyZWYoKSkgdG8gYmUKKyMgYWdub3N0aWMgb2YgdGhlIHBhcmFtZXRlciBvcmlnaW4KKworb3VyICVpbnB1dF9wYXJhbXMgPSAoKTsKKworIyBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBzdG9yZWQgd2l0aCB0aGUgbG9uZyBwYXJhbWV0ZXIgbmFtZSBhcyBrZXkuIFRoaXMgd2lsbAorIyBhbHNvIGJlIHVzZWQgaW4gdGhlIGhyZWYgc3Vicm91dGluZSB0byBjb252ZXJ0IHBhcmFtZXRlcnMgdG8gdGhlaXIgQ0dJCisjIGVxdWl2YWxlbnQsIGFuZCBzaW5jZSB0aGUgaHJlZigpIHVzYWdlIGlzIHRoZSBtb3N0IGZyZXF1ZW50IG9uZSwgd2Ugc3RvcmUKKyMgdGhlIG5hbWUgLT4gQ0dJIGtleSBtYXBwaW5nIGhlcmUsIGluc3RlYWQgb2YgdGhlIHJldmVyc2UuCisjCisjIFhYWDogV2FybmluZzogSWYgeW91IHRvdWNoIHRoaXMsIGNoZWNrIHRoZSBzZWFyY2ggZm9ybSBmb3IgdXBkYXRpbmcsCisjIHRvby4KKworb3VyIEBjZ2lfcGFyYW1fbWFwcGluZyA9ICgKKwlwcm9qZWN0ID0+ICJwIiwKKwlhY3Rpb24gPT4gImEiLAorCWZpbGVfbmFtZSA9PiAiZiIsCisJZmlsZV9wYXJlbnQgPT4gImZwIiwKKwloYXNoID0+ICJoIiwKKwloYXNoX3BhcmVudCA9PiAiaHAiLAorCWhhc2hfYmFzZSA9PiAiaGIiLAorCWhhc2hfcGFyZW50X2Jhc2UgPT4gImhwYiIsCisJcGFnZSA9PiAicGciLAorCW9yZGVyID0+ICJvIiwKKwlzZWFyY2h0ZXh0ID0+ICJzIiwKKwlzZWFyY2h0eXBlID0+ICJzdCIsCisJc25hcHNob3RfZm9ybWF0ID0+ICJzZiIsCisJZXh0cmFfb3B0aW9ucyA9PiAib3B0IiwKKwlzZWFyY2hfdXNlX3JlZ2V4cCA9PiAic3IiLAorCWN0YWcgPT4gImJ5X3RhZyIsCisJZGlmZl9zdHlsZSA9PiAiZHMiLAorCXByb2plY3RfZmlsdGVyID0+ICJwZiIsCisJIyB0aGlzIG11c3QgYmUgbGFzdCBlbnRyeSAoZm9yIG1hbmlwdWxhdGlvbiBmcm9tIEphdmFTY3JpcHQpCisJamF2YXNjcmlwdCA9PiAianMiCispOworb3VyICVjZ2lfcGFyYW1fbWFwcGluZyA9IEBjZ2lfcGFyYW1fbWFwcGluZzsKKworIyB3ZSB3aWxsIGFsc28gbmVlZCB0byBrbm93IHRoZSBwb3NzaWJsZSBhY3Rpb25zLCBmb3IgdmFsaWRhdGlvbgorb3VyICVhY3Rpb25zID0gKAorCSJibGFtZSIgPT4gXCZnaXRfYmxhbWUsCisJImJsYW1lX2luY3JlbWVudGFsIiA9PiBcJmdpdF9ibGFtZV9pbmNyZW1lbnRhbCwKKwkiYmxhbWVfZGF0YSIgPT4gXCZnaXRfYmxhbWVfZGF0YSwKKwkiYmxvYmRpZmYiID0+IFwmZ2l0X2Jsb2JkaWZmLAorCSJibG9iZGlmZl9wbGFpbiIgPT4gXCZnaXRfYmxvYmRpZmZfcGxhaW4sCisJImJsb2IiID0+IFwmZ2l0X2Jsb2IsCisJImJsb2JfcGxhaW4iID0+IFwmZ2l0X2Jsb2JfcGxhaW4sCisJImNvbW1pdGRpZmYiID0+IFwmZ2l0X2NvbW1pdGRpZmYsCisJImNvbW1pdGRpZmZfcGxhaW4iID0+IFwmZ2l0X2NvbW1pdGRpZmZfcGxhaW4sCisJImNvbW1pdCIgPT4gXCZnaXRfY29tbWl0LAorCSJmb3JrcyIgPT4gXCZnaXRfZm9ya3MsCisJImhlYWRzIiA9PiBcJmdpdF9oZWFkcywKKwkiaGlzdG9yeSIgPT4gXCZnaXRfaGlzdG9yeSwKKwkibG9nIiA9PiBcJmdpdF9sb2csCisJInBhdGNoIiA9PiBcJmdpdF9wYXRjaCwKKwkicGF0Y2hlcyIgPT4gXCZnaXRfcGF0Y2hlcywKKwkicmVtb3RlcyIgPT4gXCZnaXRfcmVtb3RlcywKKwkicnNzIiA9PiBcJmdpdF9yc3MsCisJImF0b20iID0+IFwmZ2l0X2F0b20sCisJInNlYXJjaCIgPT4gXCZnaXRfc2VhcmNoLAorCSJzZWFyY2hfaGVscCIgPT4gXCZnaXRfc2VhcmNoX2hlbHAsCisJInNob3J0bG9nIiA9PiBcJmdpdF9zaG9ydGxvZywKKwkic3VtbWFyeSIgPT4gXCZnaXRfc3VtbWFyeSwKKwkidGFnIiA9PiBcJmdpdF90YWcsCisJInRhZ3MiID0+IFwmZ2l0X3RhZ3MsCisJInRyZWUiID0+IFwmZ2l0X3RyZWUsCisJInNuYXBzaG90IiA9PiBcJmdpdF9zbmFwc2hvdCwKKwkib2JqZWN0IiA9PiBcJmdpdF9vYmplY3QsCisJIyB0aG9zZSBiZWxvdyBkb24ndCBuZWVkICRwcm9qZWN0CisJIm9wbWwiID0+IFwmZ2l0X29wbWwsCisJInByb2plY3RfbGlzdCIgPT4gXCZnaXRfcHJvamVjdF9saXN0LAorCSJwcm9qZWN0X2luZGV4IiA9PiBcJmdpdF9wcm9qZWN0X2luZGV4LAorKTsKKworIyBmaW5hbGx5LCB3ZSBoYXZlIHRoZSBoYXNoIG9mIGFsbG93ZWQgZXh0cmFfb3B0aW9ucyBmb3IgdGhlIGNvbW1hbmRzIHRoYXQKKyMgYWxsb3cgdGhlbQorb3VyICVhbGxvd2VkX29wdGlvbnMgPSAoCisJIi0tbm8tbWVyZ2VzIiA9PiBbIHF3KHJzcyBhdG9tIGxvZyBzaG9ydGxvZyBoaXN0b3J5KSBdLAorKTsKKworIyBmaWxsICVpbnB1dF9wYXJhbXMgd2l0aCB0aGUgQ0dJIHBhcmFtZXRlcnMuIEFsbCB2YWx1ZXMgZXhjZXB0IGZvciAnb3B0JworIyBzaG91bGQgYmUgc2luZ2xlIHZhbHVlcywgYnV0IG9wdCBjYW4gYmUgYW4gYXJyYXkuIFdlIHNob3VsZCBwcm9iYWJseQorIyBidWlsZCBhbiBhcnJheSBvZiBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIG11bHRpLXZhbHVlZCwgYnV0IHNpbmNlIGZvciB0aGUgdGltZQorIyBiZWluZyBpdCdzIG9ubHkgdGhpcyBvbmUsIHdlIGp1c3Qgc2luZ2xlIGl0IG91dAorc3ViIGV2YWx1YXRlX3F1ZXJ5X3BhcmFtcyB7CisJb3VyICRjZ2k7CisKKwl3aGlsZSAobXkgKCRuYW1lLCAkc3ltYm9sKSA9IGVhY2ggJWNnaV9wYXJhbV9tYXBwaW5nKSB7CisJCWlmICgkc3ltYm9sIGVxICdvcHQnKSB7CisJCQkkaW5wdXRfcGFyYW1zeyRuYW1lfSA9IFsgbWFwIHsgZGVjb2RlX3V0ZjgoJF8pIH0gJGNnaS0+bXVsdGlfcGFyYW0oJHN5bWJvbCkgXTsKKwkJfSBlbHNlIHsKKwkJCSRpbnB1dF9wYXJhbXN7JG5hbWV9ID0gZGVjb2RlX3V0ZjgoJGNnaS0+cGFyYW0oJHN5bWJvbCkpOworCQl9CisJfQorfQorCisjIG5vdyByZWFkIFBBVEhfSU5GTyBhbmQgdXBkYXRlIHRoZSBwYXJhbWV0ZXIgbGlzdCBmb3IgbWlzc2luZyBwYXJhbWV0ZXJzCitzdWIgZXZhbHVhdGVfcGF0aF9pbmZvIHsKKwlyZXR1cm4gaWYgZGVmaW5lZCAkaW5wdXRfcGFyYW1zeydwcm9qZWN0J307CisJcmV0dXJuIGlmICEkcGF0aF9pbmZvOworCSRwYXRoX2luZm8gPX4gcyxeLyssLDsKKwlyZXR1cm4gaWYgISRwYXRoX2luZm87CisKKwkjIGZpbmQgd2hpY2ggcGFydCBvZiBQQVRIX0lORk8gaXMgcHJvamVjdAorCW15ICRwcm9qZWN0ID0gJHBhdGhfaW5mbzsKKwkkcHJvamVjdCA9fiBzLC8rJCwsOworCXdoaWxlICgkcHJvamVjdCAmJiAhY2hlY2tfaGVhZF9saW5rKCIkcHJvamVjdHJvb3QvJHByb2plY3QiKSkgeworCQkkcHJvamVjdCA9fiBzLC8qW14vXSokLCw7CisJfQorCXJldHVybiB1bmxlc3MgJHByb2plY3Q7CisJJGlucHV0X3BhcmFtc3sncHJvamVjdCd9ID0gJHByb2plY3Q7CisKKwkjIGRvIG5vdCBjaGFuZ2UgYW55IHBhcmFtZXRlcnMgaWYgYW4gYWN0aW9uIGlzIGdpdmVuIHVzaW5nIHRoZSBxdWVyeSBzdHJpbmcKKwlyZXR1cm4gaWYgJGlucHV0X3BhcmFtc3snYWN0aW9uJ307CisJJHBhdGhfaW5mbyA9fiBzLF5cUSRwcm9qZWN0XEUvKiwsOworCisJIyBuZXh0LCBjaGVjayBpZiB3ZSBoYXZlIGFuIGFjdGlvbgorCW15ICRhY3Rpb24gPSAkcGF0aF9pbmZvOworCSRhY3Rpb24gPX4gcywvLiokLCw7CisJaWYgKGV4aXN0cyAkYWN0aW9uc3skYWN0aW9ufSkgeworCQkkcGF0aF9pbmZvID1+IHMsXiRhY3Rpb24vKiwsOworCQkkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSA9ICRhY3Rpb247CisJfQorCisJIyBsaXN0IG9mIGFjdGlvbnMgdGhhdCB3YW50IGhhc2hfYmFzZSBpbnN0ZWFkIG9mIGhhc2gsIGJ1dCBjYW4gaGF2ZSBubworCSMgcGF0aG5hbWUgKGYpIHBhcmFtZXRlcgorCW15IEB3YW50c19iYXNlID0gKAorCQkndHJlZScsCisJCSdoaXN0b3J5JywKKwkpOworCisJIyB3ZSB3YW50IHRvIGNhdGNoLCBhbW9uZyBvdGhlcnMKKwkjIFskaGFzaF9wYXJlbnRfYmFzZVs6JGZpbGVfcGFyZW50XS4uXSRoYXNoX3BhcmVudFs6JGZpbGVfbmFtZV0KKwlteSAoJHBhcmVudHJlZm5hbWUsICRwYXJlbnRwYXRobmFtZSwgJHJlZm5hbWUsICRwYXRobmFtZSkgPQorCQkoJHBhdGhfaW5mbyA9fiAvXig/OiguKz8pKD86OiguKykpP1wuXC4pPyhbXjpdKz8pPyg/OjooLispKT8kLyk7CisKKwkjIGZpcnN0LCBhbmFseXplIHRoZSAnY3VycmVudCcgcGFydAorCWlmIChkZWZpbmVkICRwYXRobmFtZSkgeworCQkjIHdlIGdvdCAiYnJhbmNoOmZpbGVuYW1lIiBvciAiYnJhbmNoOmRpci8iCisJCSMgd2UgY291bGQgdXNlIGdpdF9nZXRfdHlwZShicmFuY2g6cGF0aG5hbWUpLCBidXQ6CisJCSMgLSBpdCBuZWVkcyAkZ2l0X2RpcgorCQkjIC0gaXQgZG9lcyBhIGdpdCgpIGNhbGwKKwkJIyAtIHRoZSBjb252ZW50aW9uIG9mIHRlcm1pbmF0aW5nIGRpcmVjdG9yaWVzIHdpdGggYSBzbGFzaAorCQkjICAgbWFrZXMgaXQgc3VwZXJmbHVvdXMKKwkJIyAtIGVtYmVkZGluZyB0aGUgYWN0aW9uIGluIHRoZSBQQVRIX0lORk8gd291bGQgbWFrZSBpdCBldmVuCisJCSMgICBtb3JlIHN1cGVyZmx1b3VzCisJCSRwYXRobmFtZSA9fiBzLF4vKywsOworCQlpZiAoISRwYXRobmFtZSB8fCBzdWJzdHIoJHBhdGhuYW1lLCAtMSkgZXEgIi8iKSB7CisJCQkkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSB8fD0gInRyZWUiOworCQkJJHBhdGhuYW1lID1+IHMsLyQsLDsKKwkJfSBlbHNlIHsKKwkJCSMgdGhlIGRlZmF1bHQgYWN0aW9uIGRlcGVuZHMgb24gd2hldGhlciB3ZSBoYWQgcGFyZW50IGluZm8KKwkJCSMgb3Igbm90CisJCQlpZiAoJHBhcmVudHJlZm5hbWUpIHsKKwkJCQkkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSB8fD0gImJsb2JkaWZmX3BsYWluIjsKKwkJCX0gZWxzZSB7CisJCQkJJGlucHV0X3BhcmFtc3snYWN0aW9uJ30gfHw9ICJibG9iX3BsYWluIjsKKwkJCX0KKwkJfQorCQkkaW5wdXRfcGFyYW1zeydoYXNoX2Jhc2UnfSB8fD0gJHJlZm5hbWU7CisJCSRpbnB1dF9wYXJhbXN7J2ZpbGVfbmFtZSd9IHx8PSAkcGF0aG5hbWU7CisJfSBlbHNpZiAoZGVmaW5lZCAkcmVmbmFtZSkgeworCQkjIHdlIGdvdCAiYnJhbmNoIi4gSW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gY2hvb3NlIGlmIHdlIGhhdmUgdG8KKwkJIyBzZXQgaGFzaCBvciBoYXNoX2Jhc2UuCisJCSMKKwkJIyBNb3N0IG9mIHRoZSBhY3Rpb25zIHdpdGhvdXQgYSBwYXRobmFtZSBvbmx5IHdhbnQgaGFzaCB0byBiZQorCQkjIHNldCwgZXhjZXB0IGZvciB0aGUgb25lcyBzcGVjaWZpZWQgaW4gQHdhbnRzX2Jhc2UgdGhhdCB3YW50CisJCSMgaGFzaF9iYXNlIGluc3RlYWQuIEl0IHNob3VsZCBhbHNvIGJlIG5vdGVkIHRoYXQgaGFuZC1jcmFmdGVkCisJCSMgbGlua3MgaGF2aW5nICdoaXN0b3J5JyBhcyBhbiBhY3Rpb24gYW5kIG5vIHBhdGhuYW1lIG9yIGhhc2gKKwkJIyBzZXQgd2lsbCBmYWlsLCBidXQgdGhhdCBoYXBwZW5zIHJlZ2FyZGxlc3Mgb2YgUEFUSF9JTkZPLgorCQlpZiAoZGVmaW5lZCAkcGFyZW50cmVmbmFtZSkgeworCQkJIyBpZiB0aGVyZSBpcyBwYXJlbnQgbGV0IHRoZSBkZWZhdWx0IGJlICdzaG9ydGxvZycgYWN0aW9uCisJCQkjIChmb3IgaHR0cDovL2dpdC5leGFtcGxlLmNvbS9yZXBvLmdpdC9BLi5CIGxpbmtzKTsgaWYgdGhlcmUKKwkJCSMgaXMgbm8gcGFyZW50LCBkaXNwYXRjaCB3aWxsIGRldGVjdCB0eXBlIG9mIG9iamVjdCBhbmQgc2V0CisJCQkjIGFjdGlvbiBhcHByb3ByaWF0ZWx5IGlmIHJlcXVpcmVkIChpZiBhY3Rpb24gaXMgbm90IHNldCkKKwkJCSRpbnB1dF9wYXJhbXN7J2FjdGlvbid9IHx8PSAic2hvcnRsb2ciOworCQl9CisJCWlmICgkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSAmJgorCQkgICAgZ3JlcCB7ICRfIGVxICRpbnB1dF9wYXJhbXN7J2FjdGlvbid9IH0gQHdhbnRzX2Jhc2UpIHsKKwkJCSRpbnB1dF9wYXJhbXN7J2hhc2hfYmFzZSd9IHx8PSAkcmVmbmFtZTsKKwkJfSBlbHNlIHsKKwkJCSRpbnB1dF9wYXJhbXN7J2hhc2gnfSB8fD0gJHJlZm5hbWU7CisJCX0KKwl9CisKKwkjIG5leHQsIGhhbmRsZSB0aGUgJ3BhcmVudCcgcGFydCwgaWYgcHJlc2VudAorCWlmIChkZWZpbmVkICRwYXJlbnRyZWZuYW1lKSB7CisJCSMgYSBtaXNzaW5nIHBhdGhzcGVjIGRlZmF1bHRzIHRvIHRoZSAnY3VycmVudCcgZmlsZW5hbWUsIGFsbG93aW5nIGUuZy4KKwkJIyBzb21lcHJvamVjdC9ibG9iZGlmZi9vbGRyZXYuLm5ld3JldjovZmlsZW5hbWUKKwkJaWYgKCRwYXJlbnRwYXRobmFtZSkgeworCQkJJHBhcmVudHBhdGhuYW1lID1+IHMsXi8rLCw7CisJCQkkcGFyZW50cGF0aG5hbWUgPX4gcywvJCwsOworCQkJJGlucHV0X3BhcmFtc3snZmlsZV9wYXJlbnQnfSB8fD0gJHBhcmVudHBhdGhuYW1lOworCQl9IGVsc2UgeworCQkJJGlucHV0X3BhcmFtc3snZmlsZV9wYXJlbnQnfSB8fD0gJGlucHV0X3BhcmFtc3snZmlsZV9uYW1lJ307CisJCX0KKwkJIyB3ZSBhc3N1bWUgdGhhdCBoYXNoX3BhcmVudF9iYXNlIGlzIHdhbnRlZCBpZiBhIHBhdGggd2FzIHNwZWNpZmllZCwKKwkJIyBvciBpZiB0aGUgYWN0aW9uIHdhbnRzIGhhc2hfYmFzZSBpbnN0ZWFkIG9mIGhhc2gKKwkJaWYgKGRlZmluZWQgJGlucHV0X3BhcmFtc3snZmlsZV9wYXJlbnQnfSB8fAorCQkJZ3JlcCB7ICRfIGVxICRpbnB1dF9wYXJhbXN7J2FjdGlvbid9IH0gQHdhbnRzX2Jhc2UpIHsKKwkJCSRpbnB1dF9wYXJhbXN7J2hhc2hfcGFyZW50X2Jhc2UnfSB8fD0gJHBhcmVudHJlZm5hbWU7CisJCX0gZWxzZSB7CisJCQkkaW5wdXRfcGFyYW1zeydoYXNoX3BhcmVudCd9IHx8PSAkcGFyZW50cmVmbmFtZTsKKwkJfQorCX0KKworCSMgZm9yIHRoZSBzbmFwc2hvdCBhY3Rpb24sIHdlIGFsbG93IFVSTHMgaW4gdGhlIGZvcm0KKwkjICRwcm9qZWN0L3NuYXBzaG90LyRoYXNoLmV4dAorCSMgd2hlcmUgLmV4dCBkZXRlcm1pbmVzIHRoZSBzbmFwc2hvdCBhbmQgZ2V0cyByZW1vdmVkIGZyb20gdGhlCisJIyBwYXNzZWQgJHJlZm5hbWUgdG8gcHJvdmlkZSB0aGUgJGhhc2guCisJIworCSMgVG8gYmUgYWJsZSB0byB0ZWxsIHRoYXQgJHJlZm5hbWUgaW5jbHVkZXMgdGhlIGZvcm1hdCBleHRlbnNpb24sIHdlCisJIyByZXF1aXJlIHRoZSBmb2xsb3dpbmcgdHdvIGNvbmRpdGlvbnMgdG8gYmUgc2F0aXNmaWVkOgorCSMgLSB0aGUgaGFzaCBpbnB1dCBwYXJhbWV0ZXIgTVVTVCBoYXZlIGJlZW4gc2V0IGZyb20gdGhlICRyZWZuYW1lIHBhcnQKKwkjICAgb2YgdGhlIFVSTCAoaS5lLiB0aGV5IG11c3QgYmUgZXF1YWwpCisJIyAtIHRoZSBzbmFwc2hvdCBmb3JtYXQgTVVTVCBOT1QgaGF2ZSBiZWVuIGRlZmluZWQgYWxyZWFkeSAoZS5nLiBmcm9tCisJIyAgIENHSSBwYXJhbWV0ZXIgc2YpCisJIyBJdCdzIGFsc28gdXNlbGVzcyB0byB0cnkgYW55IG1hdGNoaW5nIHVubGVzcyAkcmVmbmFtZSBoYXMgYSBkb3QsCisJIyBzbyB3ZSBjaGVjayBmb3IgdGhhdCB0b28KKwlpZiAoZGVmaW5lZCAkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSAmJgorCQkkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSBlcSAnc25hcHNob3QnICYmCisJCWRlZmluZWQgJHJlZm5hbWUgJiYgaW5kZXgoJHJlZm5hbWUsICcuJykgIT0gLTEgJiYKKwkJJHJlZm5hbWUgZXEgJGlucHV0X3BhcmFtc3snaGFzaCd9ICYmCisJCSFkZWZpbmVkICRpbnB1dF9wYXJhbXN7J3NuYXBzaG90X2Zvcm1hdCd9KSB7CisJCSMgV2UgbG9vcCBvdmVyIHRoZSBrbm93biBzbmFwc2hvdCBmb3JtYXRzLCBjaGVja2luZyBmb3IKKwkJIyBleHRlbnNpb25zLiBBbGxvd2VkIGV4dGVuc2lvbnMgYXJlIGJvdGggdGhlIGRlZmluZWQgc3VmZml4CisJCSMgKHdoaWNoIGluY2x1ZGVzIHRoZSBpbml0aWFsIGRvdCBhbHJlYWR5KSBhbmQgdGhlIHNuYXBzaG90CisJCSMgZm9ybWF0IGtleSBpdHNlbGYsIHdpdGggYSBwcmVwZW5kZWQgZG90CisJCXdoaWxlIChteSAoJGZtdCwgJG9wdCkgPSBlYWNoICVrbm93bl9zbmFwc2hvdF9mb3JtYXRzKSB7CisJCQlteSAkaGFzaCA9ICRyZWZuYW1lOworCQkJdW5sZXNzICgkaGFzaCA9fiBzLyhcUSRvcHQtPnsnc3VmZml4J31cRXxcUS4kZm10XEUpJC8vKSB7CisJCQkJbmV4dDsKKwkJCX0KKwkJCW15ICRzZnggPSAkMTsKKwkJCSMgYSB2YWxpZCBzdWZmaXggd2FzIGZvdW5kLCBzbyBzZXQgdGhlIHNuYXBzaG90IGZvcm1hdAorCQkJIyBhbmQgcmVzZXQgdGhlIGhhc2ggcGFyYW1ldGVyCisJCQkkaW5wdXRfcGFyYW1zeydzbmFwc2hvdF9mb3JtYXQnfSA9ICRmbXQ7CisJCQkkaW5wdXRfcGFyYW1zeydoYXNoJ30gPSAkaGFzaDsKKwkJCSMgd2UgYWxzbyBzZXQgdGhlIGZvcm1hdCBzdWZmaXggdG8gdGhlIG9uZSByZXF1ZXN0ZWQKKwkJCSMgaW4gdGhlIFVSTDogdGhpcyB3YXkgYSByZXF1ZXN0IGZvciBlLmcuIC50Z3ogcmV0dXJucworCQkJIyBhIC50Z3ogaW5zdGVhZCBvZiBhIC50YXIuZ3oKKwkJCSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmbXR9eydzdWZmaXgnfSA9ICRzZng7CisJCQlsYXN0OworCQl9CisJfQorfQorCitvdXIgKCRhY3Rpb24sICRwcm9qZWN0LCAkZmlsZV9uYW1lLCAkZmlsZV9wYXJlbnQsICRoYXNoLCAkaGFzaF9wYXJlbnQsICRoYXNoX2Jhc2UsCisgICAgICRoYXNoX3BhcmVudF9iYXNlLCBAZXh0cmFfb3B0aW9ucywgJHBhZ2UsICRzZWFyY2h0eXBlLCAkc2VhcmNoX3VzZV9yZWdleHAsCisgICAgICRzZWFyY2h0ZXh0LCAkc2VhcmNoX3JlZ2V4cCwgJHByb2plY3RfZmlsdGVyKTsKK3N1YiBldmFsdWF0ZV9hbmRfdmFsaWRhdGVfcGFyYW1zIHsKKwlvdXIgJGFjdGlvbiA9ICRpbnB1dF9wYXJhbXN7J2FjdGlvbid9OworCWlmIChkZWZpbmVkICRhY3Rpb24pIHsKKwkJaWYgKCFpc192YWxpZF9hY3Rpb24oJGFjdGlvbikpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIGFjdGlvbiBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCSMgcGFyYW1ldGVycyB3aGljaCBhcmUgcGF0aG5hbWVzCisJb3VyICRwcm9qZWN0ID0gJGlucHV0X3BhcmFtc3sncHJvamVjdCd9OworCWlmIChkZWZpbmVkICRwcm9qZWN0KSB7CisJCWlmICghaXNfdmFsaWRfcHJvamVjdCgkcHJvamVjdCkpIHsKKwkJCXVuZGVmICRwcm9qZWN0OworCQkJZGllX2Vycm9yKDQwNCwgIk5vIHN1Y2ggcHJvamVjdCIpOworCQl9CisJfQorCisJb3VyICRwcm9qZWN0X2ZpbHRlciA9ICRpbnB1dF9wYXJhbXN7J3Byb2plY3RfZmlsdGVyJ307CisJaWYgKGRlZmluZWQgJHByb2plY3RfZmlsdGVyKSB7CisJCWlmICghaXNfdmFsaWRfcGF0aG5hbWUoJHByb2plY3RfZmlsdGVyKSkgeworCQkJZGllX2Vycm9yKDQwNCwgIkludmFsaWQgcHJvamVjdF9maWx0ZXIgcGFyYW1ldGVyIik7CisJCX0KKwl9CisKKwlvdXIgJGZpbGVfbmFtZSA9ICRpbnB1dF9wYXJhbXN7J2ZpbGVfbmFtZSd9OworCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJaWYgKCFpc192YWxpZF9wYXRobmFtZSgkZmlsZV9uYW1lKSkgeworCQkJZGllX2Vycm9yKDQwMCwgIkludmFsaWQgZmlsZSBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCW91ciAkZmlsZV9wYXJlbnQgPSAkaW5wdXRfcGFyYW1zeydmaWxlX3BhcmVudCd9OworCWlmIChkZWZpbmVkICRmaWxlX3BhcmVudCkgeworCQlpZiAoIWlzX3ZhbGlkX3BhdGhuYW1lKCRmaWxlX3BhcmVudCkpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIGZpbGUgcGFyZW50IHBhcmFtZXRlciIpOworCQl9CisJfQorCisJIyBwYXJhbWV0ZXJzIHdoaWNoIGFyZSByZWZuYW1lcworCW91ciAkaGFzaCA9ICRpbnB1dF9wYXJhbXN7J2hhc2gnfTsKKwlpZiAoZGVmaW5lZCAkaGFzaCkgeworCQlpZiAoIWlzX3ZhbGlkX3JlZm5hbWUoJGhhc2gpKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBoYXNoIHBhcmFtZXRlciIpOworCQl9CisJfQorCisJb3VyICRoYXNoX3BhcmVudCA9ICRpbnB1dF9wYXJhbXN7J2hhc2hfcGFyZW50J307CisJaWYgKGRlZmluZWQgJGhhc2hfcGFyZW50KSB7CisJCWlmICghaXNfdmFsaWRfcmVmbmFtZSgkaGFzaF9wYXJlbnQpKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBoYXNoIHBhcmVudCBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCW91ciAkaGFzaF9iYXNlID0gJGlucHV0X3BhcmFtc3snaGFzaF9iYXNlJ307CisJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSkgeworCQlpZiAoIWlzX3ZhbGlkX3JlZm5hbWUoJGhhc2hfYmFzZSkpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIGhhc2ggYmFzZSBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCW91ciBAZXh0cmFfb3B0aW9ucyA9IEB7JGlucHV0X3BhcmFtc3snZXh0cmFfb3B0aW9ucyd9fTsKKwkjIEBleHRyYV9vcHRpb25zIGlzIGFsd2F5cyBkZWZpbmVkLCBzaW5jZSBpdCBjYW4gb25seSBiZSAoY3VycmVudGx5KSBzZXQgZnJvbQorCSMgQ0dJLCBhbmQgJGNnaS0+cGFyYW0oKSByZXR1cm5zIHRoZSBlbXB0eSBhcnJheSBpbiBhcnJheSBjb250ZXh0IGlmIHRoZSBwYXJhbQorCSMgaXMgbm90IHNldAorCWZvcmVhY2ggbXkgJG9wdCAoQGV4dHJhX29wdGlvbnMpIHsKKwkJaWYgKG5vdCBleGlzdHMgJGFsbG93ZWRfb3B0aW9uc3skb3B0fSkgeworCQkJZGllX2Vycm9yKDQwMCwgIkludmFsaWQgb3B0aW9uIHBhcmFtZXRlciIpOworCQl9CisJCWlmIChub3QgZ3JlcCgvXiRhY3Rpb24kLywgQHskYWxsb3dlZF9vcHRpb25zeyRvcHR9fSkpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIG9wdGlvbiBwYXJhbWV0ZXIgZm9yIHRoaXMgYWN0aW9uIik7CisJCX0KKwl9CisKKwlvdXIgJGhhc2hfcGFyZW50X2Jhc2UgPSAkaW5wdXRfcGFyYW1zeydoYXNoX3BhcmVudF9iYXNlJ307CisJaWYgKGRlZmluZWQgJGhhc2hfcGFyZW50X2Jhc2UpIHsKKwkJaWYgKCFpc192YWxpZF9yZWZuYW1lKCRoYXNoX3BhcmVudF9iYXNlKSkgeworCQkJZGllX2Vycm9yKDQwMCwgIkludmFsaWQgaGFzaCBwYXJlbnQgYmFzZSBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCSMgb3RoZXIgcGFyYW1ldGVycworCW91ciAkcGFnZSA9ICRpbnB1dF9wYXJhbXN7J3BhZ2UnfTsKKwlpZiAoZGVmaW5lZCAkcGFnZSkgeworCQlpZiAoJHBhZ2UgPX4gbS9bXjAtOV0vKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBwYWdlIHBhcmFtZXRlciIpOworCQl9CisJfQorCisJb3VyICRzZWFyY2h0eXBlID0gJGlucHV0X3BhcmFtc3snc2VhcmNodHlwZSd9OworCWlmIChkZWZpbmVkICRzZWFyY2h0eXBlKSB7CisJCWlmICgkc2VhcmNodHlwZSA9fiBtL1teYS16XS8pIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIHNlYXJjaHR5cGUgcGFyYW1ldGVyIik7CisJCX0KKwl9CisKKwlvdXIgJHNlYXJjaF91c2VfcmVnZXhwID0gJGlucHV0X3BhcmFtc3snc2VhcmNoX3VzZV9yZWdleHAnfTsKKworCW91ciAkc2VhcmNodGV4dCA9ICRpbnB1dF9wYXJhbXN7J3NlYXJjaHRleHQnfTsKKwlvdXIgJHNlYXJjaF9yZWdleHAgPSB1bmRlZjsKKwlpZiAoZGVmaW5lZCAkc2VhcmNodGV4dCkgeworCQlpZiAobGVuZ3RoKCRzZWFyY2h0ZXh0KSA8IDIpIHsKKwkJCWRpZV9lcnJvcig0MDMsICJBdCBsZWFzdCB0d28gY2hhcmFjdGVycyBhcmUgcmVxdWlyZWQgZm9yIHNlYXJjaCBwYXJhbWV0ZXIiKTsKKwkJfQorCQlpZiAoJHNlYXJjaF91c2VfcmVnZXhwKSB7CisJCQkkc2VhcmNoX3JlZ2V4cCA9ICRzZWFyY2h0ZXh0OworCQkJaWYgKCFldmFsIHsgcXIvJHNlYXJjaF9yZWdleHAvOyAxOyB9KSB7CisJCQkJKG15ICRlcnJvciA9ICRAKSA9fiBzLyBhdCBcUysgbGluZSBcZCsuKlxuPy8vOworCQkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIHNlYXJjaCByZWdleHAgJyRzZWFyY2hfcmVnZXhwJyIsCisJCQkJICAgICAgICAgIGVzY19odG1sKCRlcnJvcikpOworCQkJfQorCQl9IGVsc2UgeworCQkJJHNlYXJjaF9yZWdleHAgPSBxdW90ZW1ldGEgJHNlYXJjaHRleHQ7CisJCX0KKwl9Cit9CisKKyMgcGF0aCB0byB0aGUgY3VycmVudCBnaXQgcmVwb3NpdG9yeQorb3VyICRnaXRfZGlyOworc3ViIGV2YWx1YXRlX2dpdF9kaXIgeworCW91ciAkZ2l0X2RpciA9ICIkcHJvamVjdHJvb3QvJHByb2plY3QiIGlmICRwcm9qZWN0OworfQorCitvdXIgKEBzbmFwc2hvdF9mbXRzLCAkZ2l0X2F2YXRhciwgQGV4dHJhX2JyYW5jaF9yZWZzKTsKK3N1YiBjb25maWd1cmVfZ2l0d2ViX2ZlYXR1cmVzIHsKKwkjIGxpc3Qgb2Ygc3VwcG9ydGVkIHNuYXBzaG90IGZvcm1hdHMKKwlvdXIgQHNuYXBzaG90X2ZtdHMgPSBnaXR3ZWJfZ2V0X2ZlYXR1cmUoJ3NuYXBzaG90Jyk7CisJQHNuYXBzaG90X2ZtdHMgPSBmaWx0ZXJfc25hcHNob3RfZm10cyhAc25hcHNob3RfZm10cyk7CisKKwlvdXIgKCRnaXRfYXZhdGFyKSA9IGdpdHdlYl9nZXRfZmVhdHVyZSgnYXZhdGFyJyk7CisJJGdpdF9hdmF0YXIgPSAnJyB1bmxlc3MgJGdpdF9hdmF0YXIgPX4gL14oPzpncmF2YXRhcnxwaWNvbikkL3M7CisKKwlvdXIgQGV4dHJhX2JyYW5jaF9yZWZzID0gZ2l0d2ViX2dldF9mZWF0dXJlKCdleHRyYS1icmFuY2gtcmVmcycpOworCUBleHRyYV9icmFuY2hfcmVmcyA9IGZpbHRlcl9hbmRfdmFsaWRhdGVfcmVmcyAoQGV4dHJhX2JyYW5jaF9yZWZzKTsKK30KKworc3ViIGdldF9icmFuY2hfcmVmcyB7CisJcmV0dXJuICgnaGVhZHMnLCBAZXh0cmFfYnJhbmNoX3JlZnMpOworfQorCisjIGN1c3RvbSBlcnJvciBoYW5kbGVyOiAnZGllIDxtZXNzYWdlPicgaXMgSW50ZXJuYWwgU2VydmVyIEVycm9yCitzdWIgaGFuZGxlX2Vycm9yc19odG1sIHsKKwlteSAkbXNnID0gc2hpZnQ7ICMgaXQgaXMgYWxyZWFkeSBIVE1MIGVzY2FwZWQKKworCSMgdG8gYXZvaWQgaW5maW5pdGUgbG9vcCB3aGVyZSBlcnJvciBvY2N1cnMgaW4gZGllX2Vycm9yLAorCSMgY2hhbmdlIGhhbmRsZXIgdG8gZGVmYXVsdCBoYW5kbGVyLCBkaXNhYmxpbmcgaGFuZGxlX2Vycm9yc19odG1sCisJc2V0X21lc3NhZ2UoIkVycm9yIG9jY3VycmVkIHdoZW4gaW5zaWRlIGRpZV9lcnJvcjpcbiRtc2ciKTsKKworCSMgeW91IGNhbm5vdCBqdW1wIG91dCBvZiBkaWVfZXJyb3Igd2hlbiBjYWxsZWQgYXMgZXJyb3IgaGFuZGxlcjsKKwkjIHRoZSBzdWJyb3V0aW5lIHNldCB2aWEgQ0dJOjpDYXJwOjpzZXRfbWVzc2FnZSBpcyBjYWxsZWQgX2FmdGVyXworCSMgSFRUUCBoZWFkZXJzIGFyZSBhbHJlYWR5IHdyaXR0ZW4sIHNvIGl0IGNhbm5vdCB3cml0ZSB0aGVtIGl0c2VsZgorCWRpZV9lcnJvcih1bmRlZiwgdW5kZWYsICRtc2csIC1lcnJvcl9oYW5kbGVyID0+IDEsIC1ub19odHRwX2hlYWRlciA9PiAxKTsKK30KK3NldF9tZXNzYWdlKFwmaGFuZGxlX2Vycm9yc19odG1sKTsKKworIyBkaXNwYXRjaAorc3ViIGRpc3BhdGNoIHsKKwlpZiAoIWRlZmluZWQgJGFjdGlvbikgeworCQlpZiAoZGVmaW5lZCAkaGFzaCkgeworCQkJJGFjdGlvbiA9IGdpdF9nZXRfdHlwZSgkaGFzaCk7CisJCQkkYWN0aW9uIG9yIGRpZV9lcnJvcig0MDQsICJPYmplY3QgZG9lcyBub3QgZXhpc3QiKTsKKwkJfSBlbHNpZiAoZGVmaW5lZCAkaGFzaF9iYXNlICYmIGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkJJGFjdGlvbiA9IGdpdF9nZXRfdHlwZSgiJGhhc2hfYmFzZTokZmlsZV9uYW1lIik7CisJCQkkYWN0aW9uIG9yIGRpZV9lcnJvcig0MDQsICJGaWxlIG9yIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIpOworCQl9IGVsc2lmIChkZWZpbmVkICRwcm9qZWN0KSB7CisJCQkkYWN0aW9uID0gJ3N1bW1hcnknOworCQl9IGVsc2UgeworCQkJJGFjdGlvbiA9ICdwcm9qZWN0X2xpc3QnOworCQl9CisJfQorCWlmICghZGVmaW5lZCgkYWN0aW9uc3skYWN0aW9ufSkpIHsKKwkJZGllX2Vycm9yKDQwMCwgIlVua25vd24gYWN0aW9uIik7CisJfQorCWlmICgkYWN0aW9uICF+IG0vXig/Om9wbWx8cHJvamVjdF9saXN0fHByb2plY3RfaW5kZXgpJC8gJiYKKwkgICAgISRwcm9qZWN0KSB7CisJCWRpZV9lcnJvcig0MDAsICJQcm9qZWN0IG5lZWRlZCIpOworCX0KKwkkYWN0aW9uc3skYWN0aW9ufS0+KCk7Cit9CisKK3N1YiByZXNldF90aW1lciB7CisJb3VyICR0MCA9IFsgZ2V0dGltZW9mZGF5KCkgXQorCQlpZiBkZWZpbmVkICR0MDsKKwlvdXIgJG51bWJlcl9vZl9naXRfY21kcyA9IDA7Cit9CisKK291ciAkZmlyc3RfcmVxdWVzdCA9IDE7CitzdWIgcnVuX3JlcXVlc3QgeworCXJlc2V0X3RpbWVyKCk7CisKKwlldmFsdWF0ZV91cmkoKTsKKwlpZiAoJGZpcnN0X3JlcXVlc3QpIHsKKwkJZXZhbHVhdGVfZ2l0d2ViX2NvbmZpZygpOworCQlldmFsdWF0ZV9naXRfdmVyc2lvbigpOworCX0KKwlpZiAoJHBlcl9yZXF1ZXN0X2NvbmZpZykgeworCQlpZiAocmVmKCRwZXJfcmVxdWVzdF9jb25maWcpIGVxICdDT0RFJykgeworCQkJJHBlcl9yZXF1ZXN0X2NvbmZpZy0+KCk7CisJCX0gZWxzaWYgKCEkZmlyc3RfcmVxdWVzdCkgeworCQkJZXZhbHVhdGVfZ2l0d2ViX2NvbmZpZygpOworCQl9CisJfQorCWNoZWNrX2xvYWRhdmcoKTsKKworCSMgJHByb2plY3Ryb290IGFuZCAkcHJvamVjdHNfbGlzdCBtaWdodCBiZSBzZXQgaW4gZ2l0d2ViIGNvbmZpZyBmaWxlCisJJHByb2plY3RzX2xpc3QgfHw9ICRwcm9qZWN0cm9vdDsKKworCWV2YWx1YXRlX3F1ZXJ5X3BhcmFtcygpOworCWV2YWx1YXRlX3BhdGhfaW5mbygpOworCWV2YWx1YXRlX2FuZF92YWxpZGF0ZV9wYXJhbXMoKTsKKwlldmFsdWF0ZV9naXRfZGlyKCk7CisKKwljb25maWd1cmVfZ2l0d2ViX2ZlYXR1cmVzKCk7CisKKwlkaXNwYXRjaCgpOworfQorCitvdXIgJGlzX2xhc3RfcmVxdWVzdCA9IHN1YiB7IDEgfTsKK291ciAoJHByZV9kaXNwYXRjaF9ob29rLCAkcG9zdF9kaXNwYXRjaF9ob29rLCAkcHJlX2xpc3Rlbl9ob29rKTsKK291ciAkQ0dJID0gJ0NHSSc7CitvdXIgJGNnaTsKK291ciAkRkNHSV9TdHJlYW1fUFJJTlRfcmF3ID0gXCZGQ0dJOjpTdHJlYW06OlBSSU5UOworc3ViIGNvbmZpZ3VyZV9hc19mY2dpIHsKKwlyZXF1aXJlIENHSTo6RmFzdDsKKwlvdXIgJENHSSA9ICdDR0k6OkZhc3QnOworCSMgRkNHSSBpcyBub3QgVW5pY29kZSBhd2FyZSBoZW5jZSB0aGUgVVRGLTggZW5jb2RpbmcgbXVzdCBiZSBkb25lIG1hbnVhbGx5LgorCSMgSG93ZXZlciBubyBlbmNvZGluZyBtdXN0IGJlIGRvbmUgd2l0aGluIGdpdF9ibG9iX3BsYWluKCkgYW5kIGdpdF9zbmFwc2hvdCgpCisJIyB3aGljaCBtdXN0IHN0aWxsIG91dHB1dCBpbiByYXcgYmluYXJ5IG1vZGUuCisJbm8gd2FybmluZ3MgJ3JlZGVmaW5lJzsKKwlteSAkZW5jID0gRW5jb2RlOjpmaW5kX2VuY29kaW5nKCdVVEYtOCcpOworCSpGQ0dJOjpTdHJlYW06OlBSSU5UID0gc3ViIHsKKwkJbXkgQE9VVFBVVCA9IEBfOworCQlmb3IgKG15ICRpID0gMTsgJGkgPCBAXzsgJGkrKykgeworCQkJJE9VVFBVVFskaV0gPSAkZW5jLT5lbmNvZGUoJF9bJGldLCBFbmNvZGU6OkZCX0NST0FLfEVuY29kZTo6TEVBVkVfU1JDKTsKKwkJfQorCQlAXyA9IEBPVVRQVVQ7CisJCWdvdG8gJEZDR0lfU3RyZWFtX1BSSU5UX3JhdzsKKwl9OworCisJbXkgJHJlcXVlc3RfbnVtYmVyID0gMDsKKwkjIGxldCBlYWNoIGNoaWxkIHNlcnZpY2UgMTAwIHJlcXVlc3RzCisJb3VyICRpc19sYXN0X3JlcXVlc3QgPSBzdWIgeyArKyRyZXF1ZXN0X251bWJlciA+IDEwMCB9OworfQorc3ViIGV2YWx1YXRlX2FyZ3YgeworCW15ICRzY3JpcHRfbmFtZSA9ICRFTlZ7J1NDUklQVF9OQU1FJ30gfHwgJEVOVnsnU0NSSVBUX0ZJTEVOQU1FJ30gfHwgX19GSUxFX187CisJY29uZmlndXJlX2FzX2ZjZ2koKQorCQlpZiAkc2NyaXB0X25hbWUgPX4gL1wuZmNnaSQvOworCisJcmV0dXJuIHVubGVzcyAoQEFSR1YpOworCisJcmVxdWlyZSBHZXRvcHQ6Okxvbmc7CisJR2V0b3B0OjpMb25nOjpHZXRPcHRpb25zKAorCQknZmFzdGNnaXxmY2dpfGYnID0+IFwmY29uZmlndXJlX2FzX2ZjZ2ksCisJCSducHJvY3xuPWknID0+IHN1YiB7CisJCQlteSAoJGFyZywgJHZhbCkgPSBAXzsKKwkJCXJldHVybiB1bmxlc3MgZXZhbCB7IHJlcXVpcmUgRkNHSTo6UHJvY01hbmFnZXI7IDE7IH07CisJCQlteSAkcHJvY19tYW5hZ2VyID0gRkNHSTo6UHJvY01hbmFnZXItPm5ldyh7CisJCQkJbl9wcm9jZXNzZXMgPT4gJHZhbCwKKwkJCX0pOworCQkJb3VyICRwcmVfbGlzdGVuX2hvb2sgICAgPSBzdWIgeyAkcHJvY19tYW5hZ2VyLT5wbV9tYW5hZ2UoKSAgICAgICAgfTsKKwkJCW91ciAkcHJlX2Rpc3BhdGNoX2hvb2sgID0gc3ViIHsgJHByb2NfbWFuYWdlci0+cG1fcHJlX2Rpc3BhdGNoKCkgIH07CisJCQlvdXIgJHBvc3RfZGlzcGF0Y2hfaG9vayA9IHN1YiB7ICRwcm9jX21hbmFnZXItPnBtX3Bvc3RfZGlzcGF0Y2goKSB9OworCQl9LAorCSk7Cit9CisKK3N1YiBydW4geworCWV2YWx1YXRlX2FyZ3YoKTsKKworCSRmaXJzdF9yZXF1ZXN0ID0gMTsKKwkkcHJlX2xpc3Rlbl9ob29rLT4oKQorCQlpZiAkcHJlX2xpc3Rlbl9ob29rOworCisgUkVRVUVTVDoKKwl3aGlsZSAoJGNnaSA9ICRDR0ktPm5ldygpKSB7CisJCSRwcmVfZGlzcGF0Y2hfaG9vay0+KCkKKwkJCWlmICRwcmVfZGlzcGF0Y2hfaG9vazsKKworCQlydW5fcmVxdWVzdCgpOworCisJCSRwb3N0X2Rpc3BhdGNoX2hvb2stPigpCisJCQlpZiAkcG9zdF9kaXNwYXRjaF9ob29rOworCQkkZmlyc3RfcmVxdWVzdCA9IDA7CisKKwkJbGFzdCBSRVFVRVNUIGlmICgkaXNfbGFzdF9yZXF1ZXN0LT4oKSk7CisJfQorCisgRE9ORV9HSVRXRUI6CisJMTsKK30KKworcnVuKCk7CisKK2lmIChkZWZpbmVkIGNhbGxlcikgeworCSMgd3JhcHBlZCBpbiBhIHN1YnJvdXRpbmUgcHJvY2Vzc2luZyByZXF1ZXN0cywKKwkjIGUuZy4gbW9kX3Blcmwgd2l0aCBNb2RQZXJsOjpSZWdpc3RyeSwgb3IgUFNHSSB3aXRoIFBsYWNrOjpBcHA6OldyYXBDR0kKKwlyZXR1cm47Cit9IGVsc2UgeworCSMgcHVyZSBDR0kgc2NyaXB0LCBzZXJ2aW5nIHNpbmdsZSByZXF1ZXN0CisJZXhpdDsKK30KKworIyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyMgYWN0aW9uIGxpbmtzCisKKyMgcG9zc2libGUgdmFsdWVzIG9mIGV4dHJhIG9wdGlvbnMKKyMgLWZ1bGwgPT4gMHwxICAgICAgLSB1c2UgYWJzb2x1dGUvZnVsbCBVUkwgKCRteV91cmkvJG15X3VybCBhcyBiYXNlKQorIyAtcmVwbGF5ID0+IDEgICAgICAtIHN0YXJ0IGZyb20gYSBjdXJyZW50IHZpZXcgKHJlcGxheSB3aXRoIG1vZGlmaWNhdGlvbnMpCisjIC1wYXRoX2luZm8gPT4gMHwxIC0gZG9uJ3QgdXNlL3VzZSBwYXRoX2luZm8gVVJMIChpZiBwb3NzaWJsZSkKKyMgLWFuY2hvciA9PiBBTkNIT1IgLSBhZGQgI0FOQ0hPUiB0byBlbmQgb2YgVVJMLCBpbXBsaWVzIC1yZXBsYXkgaWYgdXNlZCBhbG9uZQorc3ViIGhyZWYgeworCW15ICVwYXJhbXMgPSBAXzsKKwkjIGRlZmF1bHQgaXMgdG8gdXNlIC1hYnNvbHV0ZSB1cmwoKSBpLmUuICRteV91cmkKKwlteSAkaHJlZiA9ICRwYXJhbXN7LWZ1bGx9ID8gJG15X3VybCA6ICRteV91cmk7CisKKwkjIGltcGxpY2l0IC1yZXBsYXksIG11c3QgYmUgZmlyc3Qgb2YgaW1wbGljaXQgcGFyYW1zCisJJHBhcmFtc3stcmVwbGF5fSA9IDEgaWYgKGtleXMgJXBhcmFtcyA9PSAxICYmICRwYXJhbXN7LWFuY2hvcn0pOworCisJJHBhcmFtc3sncHJvamVjdCd9ID0gJHByb2plY3QgdW5sZXNzIGV4aXN0cyAkcGFyYW1zeydwcm9qZWN0J307CisKKwlpZiAoJHBhcmFtc3stcmVwbGF5fSkgeworCQl3aGlsZSAobXkgKCRuYW1lLCAkc3ltYm9sKSA9IGVhY2ggJWNnaV9wYXJhbV9tYXBwaW5nKSB7CisJCQlpZiAoIWV4aXN0cyAkcGFyYW1zeyRuYW1lfSkgeworCQkJCSRwYXJhbXN7JG5hbWV9ID0gJGlucHV0X3BhcmFtc3skbmFtZX07CisJCQl9CisJCX0KKwl9CisKKwlteSAkdXNlX3BhdGhpbmZvID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3BhdGhpbmZvJyk7CisJaWYgKGRlZmluZWQgJHBhcmFtc3sncHJvamVjdCd9ICYmCisJICAgIChleGlzdHMgJHBhcmFtc3stcGF0aF9pbmZvfSA/ICRwYXJhbXN7LXBhdGhfaW5mb30gOiAkdXNlX3BhdGhpbmZvKSkgeworCQkjIHRyeSB0byBwdXQgYXMgbWFueSBwYXJhbWV0ZXJzIGFzIHBvc3NpYmxlIGluIFBBVEhfSU5GTzoKKwkJIyAgIC0gcHJvamVjdCBuYW1lCisJCSMgICAtIGFjdGlvbgorCQkjICAgLSBoYXNoX3BhcmVudCBvciBoYXNoX3BhcmVudF9iYXNlOi9maWxlX3BhcmVudAorCQkjICAgLSBoYXNoIG9yIGhhc2hfYmFzZTovZmlsZW5hbWUKKwkJIyAgIC0gdGhlIHNuYXBzaG90X2Zvcm1hdCBhcyBhbiBhcHByb3ByaWF0ZSBzdWZmaXgKKworCQkjIFdoZW4gdGhlIHNjcmlwdCBpcyB0aGUgcm9vdCBEaXJlY3RvcnlJbmRleCBmb3IgdGhlIGRvbWFpbiwKKwkJIyAkaHJlZiBoZXJlIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGh0dHA6Ly9naXR3ZWIuZXhhbXBsZS5jb20vCisJCSMgVGh1cywgd2Ugc3RyaXAgYW55IHRyYWlsaW5nIC8gZnJvbSAkaHJlZiwgdG8gc3BhcmUgdXMgZG91YmxlCisJCSMgc2xhc2hlcyBpbiB0aGUgZmluYWwgVVJMCisJCSRocmVmID1+IHMsLyQsLDsKKworCQkjIFRoZW4gYWRkIHRoZSBwcm9qZWN0IG5hbWUsIGlmIHByZXNlbnQKKwkJJGhyZWYgLj0gIi8iLmVzY19wYXRoX2luZm8oJHBhcmFtc3sncHJvamVjdCd9KTsKKwkJZGVsZXRlICRwYXJhbXN7J3Byb2plY3QnfTsKKworCQkjIHNpbmNlIHdlIGRlc3RydWN0aXZlbHkgYWJzb3JiIHBhcmFtZXRlcnMsIHdlIGtlZXAgdGhpcworCQkjIGJvb2xlYW4gdGhhdCByZW1lbWJlcnMgaWYgd2UncmUgaGFuZGxpbmcgYSBzbmFwc2hvdAorCQlteSAkaXNfc25hcHNob3QgPSAkcGFyYW1zeydhY3Rpb24nfSBlcSAnc25hcHNob3QnOworCisJCSMgU3VtbWFyeSBqdXN0IHVzZXMgdGhlIHByb2plY3QgcGF0aCBVUkwsIGFueSBvdGhlciBhY3Rpb24gaXMKKwkJIyBhZGRlZCB0byB0aGUgVVJMCisJCWlmIChkZWZpbmVkICRwYXJhbXN7J2FjdGlvbid9KSB7CisJCQkkaHJlZiAuPSAiLyIuZXNjX3BhdGhfaW5mbygkcGFyYW1zeydhY3Rpb24nfSkKKwkJCQl1bmxlc3MgJHBhcmFtc3snYWN0aW9uJ30gZXEgJ3N1bW1hcnknOworCQkJZGVsZXRlICRwYXJhbXN7J2FjdGlvbid9OworCQl9CisKKwkJIyBOZXh0LCB3ZSBwdXQgaGFzaF9wYXJlbnRfYmFzZTovZmlsZV9wYXJlbnQuLmhhc2hfYmFzZTovZmlsZV9uYW1lLAorCQkjIHN0cmlwcGluZyBub25leGlzdGVudCBvciB1c2VsZXNzIHBpZWNlcworCQkkaHJlZiAuPSAiLyIgaWYgKCRwYXJhbXN7J2hhc2hfYmFzZSd9IHx8ICRwYXJhbXN7J2hhc2hfcGFyZW50X2Jhc2UnfQorCQkJfHwgJHBhcmFtc3snaGFzaF9wYXJlbnQnfSB8fCAkcGFyYW1zeydoYXNoJ30pOworCQlpZiAoZGVmaW5lZCAkcGFyYW1zeydoYXNoX2Jhc2UnfSkgeworCQkJaWYgKGRlZmluZWQgJHBhcmFtc3snaGFzaF9wYXJlbnRfYmFzZSd9KSB7CisJCQkJJGhyZWYgLj0gZXNjX3BhdGhfaW5mbygkcGFyYW1zeydoYXNoX3BhcmVudF9iYXNlJ30pOworCQkJCSMgc2tpcCB0aGUgZmlsZV9wYXJlbnQgaWYgaXQncyB0aGUgc2FtZSBhcyB0aGUgZmlsZV9uYW1lCisJCQkJaWYgKGRlZmluZWQgJHBhcmFtc3snZmlsZV9wYXJlbnQnfSkgeworCQkJCQlpZiAoZGVmaW5lZCAkcGFyYW1zeydmaWxlX25hbWUnfSAmJiAkcGFyYW1zeydmaWxlX3BhcmVudCd9IGVxICRwYXJhbXN7J2ZpbGVfbmFtZSd9KSB7CisJCQkJCQlkZWxldGUgJHBhcmFtc3snZmlsZV9wYXJlbnQnfTsKKwkJCQkJfSBlbHNpZiAoJHBhcmFtc3snZmlsZV9wYXJlbnQnfSAhfiAvXC5cLi8pIHsKKwkJCQkJCSRocmVmIC49ICI6LyIuZXNjX3BhdGhfaW5mbygkcGFyYW1zeydmaWxlX3BhcmVudCd9KTsKKwkJCQkJCWRlbGV0ZSAkcGFyYW1zeydmaWxlX3BhcmVudCd9OworCQkJCQl9CisJCQkJfQorCQkJCSRocmVmIC49ICIuLiI7CisJCQkJZGVsZXRlICRwYXJhbXN7J2hhc2hfcGFyZW50J307CisJCQkJZGVsZXRlICRwYXJhbXN7J2hhc2hfcGFyZW50X2Jhc2UnfTsKKwkJCX0gZWxzaWYgKGRlZmluZWQgJHBhcmFtc3snaGFzaF9wYXJlbnQnfSkgeworCQkJCSRocmVmIC49IGVzY19wYXRoX2luZm8oJHBhcmFtc3snaGFzaF9wYXJlbnQnfSkuICIuLiI7CisJCQkJZGVsZXRlICRwYXJhbXN7J2hhc2hfcGFyZW50J307CisJCQl9CisKKwkJCSRocmVmIC49IGVzY19wYXRoX2luZm8oJHBhcmFtc3snaGFzaF9iYXNlJ30pOworCQkJaWYgKGRlZmluZWQgJHBhcmFtc3snZmlsZV9uYW1lJ30gJiYgJHBhcmFtc3snZmlsZV9uYW1lJ30gIX4gL1wuXC4vKSB7CisJCQkJJGhyZWYgLj0gIjovIi5lc2NfcGF0aF9pbmZvKCRwYXJhbXN7J2ZpbGVfbmFtZSd9KTsKKwkJCQlkZWxldGUgJHBhcmFtc3snZmlsZV9uYW1lJ307CisJCQl9CisJCQlkZWxldGUgJHBhcmFtc3snaGFzaCd9OworCQkJZGVsZXRlICRwYXJhbXN7J2hhc2hfYmFzZSd9OworCQl9IGVsc2lmIChkZWZpbmVkICRwYXJhbXN7J2hhc2gnfSkgeworCQkJJGhyZWYgLj0gZXNjX3BhdGhfaW5mbygkcGFyYW1zeydoYXNoJ30pOworCQkJZGVsZXRlICRwYXJhbXN7J2hhc2gnfTsKKwkJfQorCisJCSMgSWYgdGhlIGFjdGlvbiB3YXMgYSBzbmFwc2hvdCwgd2UgY2FuIGFic29yYiB0aGUKKwkJIyBzbmFwc2hvdF9mb3JtYXQgcGFyYW1ldGVyIHRvbworCQlpZiAoJGlzX3NuYXBzaG90KSB7CisJCQlteSAkZm10ID0gJHBhcmFtc3snc25hcHNob3RfZm9ybWF0J307CisJCQkjIHNuYXBzaG90X2Zvcm1hdCBzaG91bGQgYWx3YXlzIGJlIGRlZmluZWQgd2hlbiBocmVmKCkKKwkJCSMgaXMgY2FsbGVkLCBidXQganVzdCBpbiBjYXNlIHNvbWUgY29kZSBmb3JnZXRzLCB3ZQorCQkJIyBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQKKwkJCSRmbXQgfHw9ICRzbmFwc2hvdF9mbXRzWzBdOworCQkJJGhyZWYgLj0gJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZtdH17J3N1ZmZpeCd9OworCQkJZGVsZXRlICRwYXJhbXN7J3NuYXBzaG90X2Zvcm1hdCd9OworCQl9CisJfQorCisJIyBub3cgZW5jb2RlIHRoZSBwYXJhbWV0ZXJzIGV4cGxpY2l0bHkKKwlteSBAcmVzdWx0ID0gKCk7CisJZm9yIChteSAkaSA9IDA7ICRpIDwgQGNnaV9wYXJhbV9tYXBwaW5nOyAkaSArPSAyKSB7CisJCW15ICgkbmFtZSwgJHN5bWJvbCkgPSAoJGNnaV9wYXJhbV9tYXBwaW5nWyRpXSwgJGNnaV9wYXJhbV9tYXBwaW5nWyRpKzFdKTsKKwkJaWYgKGRlZmluZWQgJHBhcmFtc3skbmFtZX0pIHsKKwkJCWlmIChyZWYoJHBhcmFtc3skbmFtZX0pIGVxICJBUlJBWSIpIHsKKwkJCQlmb3JlYWNoIG15ICRwYXIgKEB7JHBhcmFtc3skbmFtZX19KSB7CisJCQkJCXB1c2ggQHJlc3VsdCwgJHN5bWJvbCAuICI9IiAuIGVzY19wYXJhbSgkcGFyKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXB1c2ggQHJlc3VsdCwgJHN5bWJvbCAuICI9IiAuIGVzY19wYXJhbSgkcGFyYW1zeyRuYW1lfSk7CisJCQl9CisJCX0KKwl9CisJJGhyZWYgLj0gIj8iIC4gam9pbignOycsIEByZXN1bHQpIGlmIHNjYWxhciBAcmVzdWx0OworCisJIyBmaW5hbCB0cmFuc2Zvcm1hdGlvbjogdHJhaWxpbmcgc3BhY2VzIG11c3QgYmUgZXNjYXBlZCAoVVJJLWVuY29kZWQpCisJJGhyZWYgPX4gcy8oXHMrKSQvQ0dJOjplc2NhcGUoJDEpL2U7CisKKwlpZiAoJHBhcmFtc3stYW5jaG9yfSkgeworCQkkaHJlZiAuPSAiIyIuZXNjX3BhcmFtKCRwYXJhbXN7LWFuY2hvcn0pOworCX0KKworCXJldHVybiAkaHJlZjsKK30KKworCisjIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIyB2YWxpZGF0aW9uLCBxdW90aW5nL3VucXVvdGluZyBhbmQgZXNjYXBpbmcKKworc3ViIGlzX3ZhbGlkX2FjdGlvbiB7CisJbXkgJGlucHV0ID0gc2hpZnQ7CisJcmV0dXJuIHVuZGVmIHVubGVzcyBleGlzdHMgJGFjdGlvbnN7JGlucHV0fTsKKwlyZXR1cm4gMTsKK30KKworc3ViIGlzX3ZhbGlkX3Byb2plY3QgeworCW15ICRpbnB1dCA9IHNoaWZ0OworCisJcmV0dXJuIHVubGVzcyBkZWZpbmVkICRpbnB1dDsKKwlpZiAoIWlzX3ZhbGlkX3BhdGhuYW1lKCRpbnB1dCkgfHwKKwkJISgtZCAiJHByb2plY3Ryb290LyRpbnB1dCIpIHx8CisJCSFjaGVja19leHBvcnRfb2soIiRwcm9qZWN0cm9vdC8kaW5wdXQiKSB8fAorCQkoJHN0cmljdF9leHBvcnQgJiYgIXByb2plY3RfaW5fbGlzdCgkaW5wdXQpKSkgeworCQlyZXR1cm4gdW5kZWY7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDE7CisJfQorfQorCitzdWIgaXNfdmFsaWRfcGF0aG5hbWUgeworCW15ICRpbnB1dCA9IHNoaWZ0OworCisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRpbnB1dDsKKwkjIG5vICcuJyBvciAnLi4nIGFzIGVsZW1lbnRzIG9mIHBhdGgsIGkuZS4gbm8gJy4nIG9yICcuLicKKwkjIGF0IHRoZSBiZWdpbm5pbmcsIGF0IHRoZSBlbmQsIGFuZCBiZXR3ZWVuIHNsYXNoZXMuCisJIyBhbHNvIHRoaXMgY2F0Y2hlcyBkb3VibGVkIHNsYXNoZXMKKwlpZiAoJGlucHV0ID1+IG0hKF58LykofFwufFwuXC4pKC98JCkhKSB7CisJCXJldHVybiB1bmRlZjsKKwl9CisJIyBubyBudWxsIGNoYXJhY3RlcnMKKwlpZiAoJGlucHV0ID1+IG0hXDAhKSB7CisJCXJldHVybiB1bmRlZjsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N1YiBpc192YWxpZF9yZWZfZm9ybWF0IHsKKwlteSAkaW5wdXQgPSBzaGlmdDsKKworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkaW5wdXQ7CisJIyByZXN0cmljdGlvbnMgb24gcmVmIG5hbWUgYWNjb3JkaW5nIHRvIGdpdC1jaGVjay1yZWYtZm9ybWF0CisJaWYgKCRpbnB1dCA9fiBtISgvXC58XC5cLnxbXDAwMC1cMDQwXDE3NyB+Xjo/KlxbXXwvJCkhKSB7CisJCXJldHVybiB1bmRlZjsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N1YiBpc192YWxpZF9yZWZuYW1lIHsKKwlteSAkaW5wdXQgPSBzaGlmdDsKKworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkaW5wdXQ7CisJIyB0ZXh0dWFsIGhhc2hlcyBhcmUgTy5LLgorCWlmICgkaW5wdXQgPX4gbS9eJG9pZF9yZWdleCQvKSB7CisJCXJldHVybiAxOworCX0KKwkjIGl0IG11c3QgYmUgY29ycmVjdCBwYXRobmFtZQorCWlzX3ZhbGlkX3BhdGhuYW1lKCRpbnB1dCkgb3IgcmV0dXJuIHVuZGVmOworCSMgY2hlY2sgZ2l0LWNoZWNrLXJlZi1mb3JtYXQgcmVzdHJpY3Rpb25zCisJaXNfdmFsaWRfcmVmX2Zvcm1hdCgkaW5wdXQpIG9yIHJldHVybiB1bmRlZjsKKwlyZXR1cm4gMTsKK30KKworIyBkZWNvZGUgc2VxdWVuY2VzIG9mIG9jdGV0cyBpbiB1dGY4IGludG8gUGVybCdzIGludGVybmFsIGZvcm0sCisjIHdoaWNoIGlzIHV0Zi04IHdpdGggdXRmOCBmbGFnIHNldCBpZiBuZWVkZWQuICBnaXR3ZWIgd3JpdGVzIG91dAorIyBpbiB1dGYtOCB0aGFua3MgdG8gImJpbm1vZGUgU1RET1VULCAnOnV0ZjgnIiBhdCBiZWdpbm5pbmcKK3N1YiB0b191dGY4IHsKKwlteSAkc3RyID0gc2hpZnQ7CisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRzdHI7CisKKwlpZiAodXRmODo6aXNfdXRmOCgkc3RyKSB8fCB1dGY4OjpkZWNvZGUoJHN0cikpIHsKKwkJcmV0dXJuICRzdHI7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGRlY29kZSgkZmFsbGJhY2tfZW5jb2RpbmcsICRzdHIsIEVuY29kZTo6RkJfREVGQVVMVCk7CisJfQorfQorCisjIHF1b3RlIHVuc2FmZSBjaGFycywgYnV0IGtlZXAgdGhlIHNsYXNoLCBldmVuIHdoZW4gaXQncyBub3QKKyMgY29ycmVjdCwgYnV0IHF1b3RlZCBzbGFzaGVzIGxvb2sgdG9vIGhvcnJpYmxlIGluIGJvb2ttYXJrcworc3ViIGVzY19wYXJhbSB7CisJbXkgJHN0ciA9IHNoaWZ0OworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkc3RyOworCSRzdHIgPX4gcy8oW15BLVphLXowLTlcLV8ufigpXC86QCBdKykvQ0dJOjplc2NhcGUoJDEpL2VnOworCSRzdHIgPX4gcy8gL1wrL2c7CisJcmV0dXJuICRzdHI7Cit9CisKKyMgdGhlIHF1b3RpbmcgcnVsZXMgZm9yIHBhdGhfaW5mbyBmcmFnbWVudCBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50CitzdWIgZXNjX3BhdGhfaW5mbyB7CisJbXkgJHN0ciA9IHNoaWZ0OworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkc3RyOworCisJIyBwYXRoX2luZm8gZG9lc24ndCB0cmVhdCAnKycgYXMgc3BhY2UgKHNwZWNpYWxseSksIGJ1dCAnPycgbXVzdCBiZSBlc2NhcGVkCisJJHN0ciA9fiBzLyhbXkEtWmEtejAtOVwtXy5+KCk7XC87OkAmPSArXSspL0NHSTo6ZXNjYXBlKCQxKS9lZzsKKworCXJldHVybiAkc3RyOworfQorCisjIHF1b3RlIHVuc2FmZSBjaGFycyBpbiB3aG9sZSBVUkwsIHNvIHNvbWUgY2hhcmFjdGVycyBjYW5ub3QgYmUgcXVvdGVkCitzdWIgZXNjX3VybCB7CisJbXkgJHN0ciA9IHNoaWZ0OworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkc3RyOworCSRzdHIgPX4gcy8oW15BLVphLXowLTlcLV8ufigpO1wvOz86QCY9IF0rKS9DR0k6OmVzY2FwZSgkMSkvZWc7CisJJHN0ciA9fiBzLyAvXCsvZzsKKwlyZXR1cm4gJHN0cjsKK30KKworIyBxdW90ZSB1bnNhZmUgY2hhcmFjdGVycyBpbiBIVE1MIGF0dHJpYnV0ZXMKK3N1YiBlc2NfYXR0ciB7CisKKwkjIGZvciBYSFRNTCBjb25mb3JtYW5jZSBlc2NhcGluZyAnIicgdG8gJyZxdW90OycgaXMgbm90IGVub3VnaAorCXJldHVybiBlc2NfaHRtbChAXyk7Cit9CisKKyMgcmVwbGFjZSBpbnZhbGlkIHV0ZjggY2hhcmFjdGVyIHdpdGggU1VCU1RJVFVUSU9OIHNlcXVlbmNlCitzdWIgZXNjX2h0bWwgeworCW15ICRzdHIgPSBzaGlmdDsKKwlteSAlb3B0cyA9IEBfOworCisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRzdHI7CisKKwkkc3RyID0gdG9fdXRmOCgkc3RyKTsKKwkkc3RyID0gJGNnaS0+ZXNjYXBlSFRNTCgkc3RyKTsKKwlpZiAoJG9wdHN7Jy1uYnNwJ30pIHsKKwkJJHN0ciA9fiBzLyAvJm5ic3A7L2c7CisJfQorCSRzdHIgPX4gc3woW1s6Y250cmw6XV0pfCgoJDEgbmUgIlx0IikgPyBxdW90X2NlYygkMSkgOiAkMSl8ZWc7CisJcmV0dXJuICRzdHI7Cit9CisKKyMgcXVvdGUgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCBlc2NhcGUgZmlsZW5hbWUgdG8gSFRNTAorc3ViIGVzY19wYXRoIHsKKwlteSAkc3RyID0gc2hpZnQ7CisJbXkgJW9wdHMgPSBAXzsKKworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkc3RyOworCisJJHN0ciA9IHRvX3V0ZjgoJHN0cik7CisJJHN0ciA9ICRjZ2ktPmVzY2FwZUhUTUwoJHN0cik7CisJaWYgKCRvcHRzeyctbmJzcCd9KSB7CisJCSRzdHIgPX4gcy8gLyZuYnNwOy9nOworCX0KKwkkc3RyID1+IHN8KFtbOmNudHJsOl1dKXxxdW90X2NlYygkMSl8ZWc7CisJcmV0dXJuICRzdHI7Cit9CisKKyMgU2FuaXRpemUgZm9yIHVzZSBpbiBYSFRNTCArIGFwcGxpY2F0aW9uL3htbCt4aHRtbCAodmFsaWQgWE1MIDEuMCkKK3N1YiBzYW5pdGl6ZSB7CisJbXkgJHN0ciA9IHNoaWZ0OworCisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRzdHI7CisKKwkkc3RyID0gdG9fdXRmOCgkc3RyKTsKKwkkc3RyID1+IHN8KFtbOmNudHJsOl1dKXwoaW5kZXgoIlx0XG5cciIsICQxKSAhPSAtMSA/ICQxIDogcXVvdF9jZWMoJDEpKXxlZzsKKwlyZXR1cm4gJHN0cjsKK30KKworIyBNYWtlIGNvbnRyb2wgY2hhcmFjdGVycyAicHJpbnRhYmxlIiwgdXNpbmcgY2hhcmFjdGVyIGVzY2FwZSBjb2RlcyAoQ0VDKQorc3ViIHF1b3RfY2VjIHsKKwlteSAkY250cmwgPSBzaGlmdDsKKwlteSAlb3B0cyA9IEBfOworCW15ICVlcyA9ICggIyBjaGFyYWN0ZXIgZXNjYXBlIGNvZGVzLCBha2EgZXNjYXBlIHNlcXVlbmNlcworCQkiXHQiID0+ICdcdCcsICAgIyB0YWIgICAgICAgICAgICAgKEhUKQorCQkiXG4iID0+ICdcbicsICAgIyBsaW5lIGZlZWQgICAgICAgKExGKQorCQkiXHIiID0+ICdccicsICAgIyBjYXJyaWFnZSByZXR1cm4gKENSKQorCQkiXGYiID0+ICdcZicsICAgIyBmb3JtIGZlZWQgICAgICAgKEZGKQorCQkiXGIiID0+ICdcYicsICAgIyBiYWNrc3BhY2UgICAgICAgKEJTKQorCQkiXGEiID0+ICdcYScsICAgIyBhbGFybSAoYmVsbCkgICAgKEJFTCkKKwkJIlxlIiA9PiAnXGUnLCAgICMgZXNjYXBlICAgICAgICAgIChFU0MpCisJCSJcMDEzIiA9PiAnXHYnLCAjIHZlcnRpY2FsIHRhYiAgICAoVlQpCisJCSJcMDAwIiA9PiAnXDAnLCAjIG51bCBjaGFyYWN0ZXIgICAoTlVMKQorCSk7CisJbXkgJGNociA9ICggKGV4aXN0cyAkZXN7JGNudHJsfSkKKwkJICAgID8gJGVzeyRjbnRybH0KKwkJICAgIDogc3ByaW50ZignXCUyeCcsIG9yZCgkY250cmwpKSApOworCWlmICgkb3B0c3stbm9odG1sfSkgeworCQlyZXR1cm4gJGNocjsKKwl9IGVsc2UgeworCQlyZXR1cm4gIjxzcGFuIGNsYXNzPVwiY250cmxcIj4kY2hyPC9zcGFuPiI7CisJfQorfQorCisjIEFsdGVybmF0aXZlbHkgdXNlIHVuaWNvZGUgY29udHJvbCBwaWN0dXJlcyBjb2RlcG9pbnRzLAorIyBVbmljb2RlICJwcmludGFibGUgcmVwcmVzZW50YXRpb24iIChQUikKK3N1YiBxdW90X3VwciB7CisJbXkgJGNudHJsID0gc2hpZnQ7CisJbXkgJW9wdHMgPSBAXzsKKworCW15ICRjaHIgPSBzcHJpbnRmKCcmIyUwNGQ7JywgMHgyNDAwK29yZCgkY250cmwpKTsKKwlpZiAoJG9wdHN7LW5vaHRtbH0pIHsKKwkJcmV0dXJuICRjaHI7CisJfSBlbHNlIHsKKwkJcmV0dXJuICI8c3BhbiBjbGFzcz1cImNudHJsXCI+JGNocjwvc3Bhbj4iOworCX0KK30KKworIyBnaXQgbWF5IHJldHVybiBxdW90ZWQgYW5kIGVzY2FwZWQgZmlsZW5hbWVzCitzdWIgdW5xdW90ZSB7CisJbXkgJHN0ciA9IHNoaWZ0OworCisJc3ViIHVucSB7CisJCW15ICRzZXEgPSBzaGlmdDsKKwkJbXkgJWVzID0gKCAjIGNoYXJhY3RlciBlc2NhcGUgY29kZXMsIGFrYSBlc2NhcGUgc2VxdWVuY2VzCisJCQkndCcgPT4gIlx0IiwgICAjIHRhYiAgICAgICAgICAgIChIVCwgVEFCKQorCQkJJ24nID0+ICJcbiIsICAgIyBuZXdsaW5lICAgICAgICAoTkwpCisJCQkncicgPT4gIlxyIiwgICAjIHJldHVybiAgICAgICAgIChDUikKKwkJCSdmJyA9PiAiXGYiLCAgICMgZm9ybSBmZWVkICAgICAgKEZGKQorCQkJJ2InID0+ICJcYiIsICAgIyBiYWNrc3BhY2UgICAgICAoQlMpCisJCQknYScgPT4gIlxhIiwgICAjIGFsYXJtIChiZWxsKSAgIChCRUwpCisJCQknZScgPT4gIlxlIiwgICAjIGVzY2FwZSAgICAgICAgIChFU0MpCisJCQkndicgPT4gIlwwMTMiLCAjIHZlcnRpY2FsIHRhYiAgIChWVCkKKwkJKTsKKworCQlpZiAoJHNlcSA9fiBtL15bMC03XXsxLDN9JC8pIHsKKwkJCSMgb2N0YWwgY2hhciBzZXF1ZW5jZQorCQkJcmV0dXJuIGNocihvY3QoJHNlcSkpOworCQl9IGVsc2lmIChleGlzdHMgJGVzeyRzZXF9KSB7CisJCQkjIEMgZXNjYXBlIHNlcXVlbmNlLCBha2EgY2hhcmFjdGVyIGVzY2FwZSBjb2RlCisJCQlyZXR1cm4gJGVzeyRzZXF9OworCQl9CisJCSMgcXVvdGVkIG9yZGluYXJ5IGNoYXJhY3RlcgorCQlyZXR1cm4gJHNlcTsKKwl9CisKKwlpZiAoJHN0ciA9fiBtL14iKC4qKSIkLykgeworCQkjIG5lZWRzIHVucXVvdGluZworCQkkc3RyID0gJDE7CisJCSRzdHIgPX4gcy9cXChbXjAtN118WzAtN117MSwzfSkvdW5xKCQxKS9lZzsKKwl9CisJcmV0dXJuICRzdHI7Cit9CisKKyMgZXNjYXBlIHRhYnMgKGNvbnZlcnQgdGFicyB0byBzcGFjZXMpCitzdWIgdW50YWJpZnkgeworCW15ICRsaW5lID0gc2hpZnQ7CisKKwl3aGlsZSAoKG15ICRwb3MgPSBpbmRleCgkbGluZSwgIlx0IikpICE9IC0xKSB7CisJCWlmIChteSAkY291bnQgPSAoOCAtICgkcG9zICUgOCkpKSB7CisJCQlteSAkc3BhY2VzID0gJyAnIHggJGNvdW50OworCQkJJGxpbmUgPX4gcy9cdC8kc3BhY2VzLzsKKwkJfQorCX0KKworCXJldHVybiAkbGluZTsKK30KKworc3ViIHByb2plY3RfaW5fbGlzdCB7CisJbXkgJHByb2plY3QgPSBzaGlmdDsKKwlteSBAbGlzdCA9IGdpdF9nZXRfcHJvamVjdHNfbGlzdCgpOworCXJldHVybiBAbGlzdCAmJiBzY2FsYXIoZ3JlcCB7ICRfLT57J3BhdGgnfSBlcSAkcHJvamVjdCB9IEBsaXN0KTsKK30KKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyMgSFRNTCBhd2FyZSBzdHJpbmcgbWFuaXB1bGF0aW9uCisKKyMgVHJ5IHRvIGNob3AgZ2l2ZW4gc3RyaW5nIG9uIGEgd29yZCBib3VuZGFyeSBiZXR3ZWVuIHBvc2l0aW9uCisjICRsZW4gYW5kICRsZW4rJGFkZF9sZW4uIElmIHRoZXJlIGlzIG5vIHdvcmQgYm91bmRhcnkgdGhlcmUsCisjIGNob3AgYXQgJGxlbiskYWRkX2xlbi4gRG8gbm90IGNob3AgaWYgY2hvcHBlZCBwYXJ0IHBsdXMgZWxsaXBzaXMKKyMgKG1hcmtpbmcgY2hvcHBlZCBwYXJ0KSB3b3VsZCBiZSBsb25nZXIgdGhhbiBnaXZlbiBzdHJpbmcuCitzdWIgY2hvcF9zdHIgeworCW15ICRzdHIgPSBzaGlmdDsKKwlteSAkbGVuID0gc2hpZnQ7CisJbXkgJGFkZF9sZW4gPSBzaGlmdCB8fCAxMDsKKwlteSAkd2hlcmUgPSBzaGlmdCB8fCAncmlnaHQnOyAjICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JworCisJIyBNYWtlIHN1cmUgcGVybCBrbm93cyBpdCBpcyB1dGY4IGVuY29kZWQgc28gd2UgZG9uJ3QKKwkjIGN1dCBpbiB0aGUgbWlkZGxlIG9mIGEgdXRmOCBtdWx0aWJ5dGUgY2hhci4KKwkkc3RyID0gdG9fdXRmOCgkc3RyKTsKKworCSMgYWxsb3cgb25seSAkbGVuIGNoYXJzLCBidXQgZG9uJ3QgY3V0IGEgd29yZCBpZiBpdCB3b3VsZCBmaXQgaW4gJGFkZF9sZW4KKwkjIGlmIGl0IGRvZXNuJ3QgZml0LCBjdXQgaXQgaWYgaXQncyBzdGlsbCBsb25nZXIgdGhhbiB0aGUgZG90cyB3ZSB3b3VsZCBhZGQKKwkjIHJlbW92ZSBjaG9wcGVkIGNoYXJhY3RlciBlbnRpdGllcyBlbnRpcmVseQorCisJIyB3aGVuIGNob3BwaW5nIGluIHRoZSBtaWRkbGUsIGRpc3RyaWJ1dGUgJGxlbiBpbnRvIGxlZnQgYW5kIHJpZ2h0IHBhcnQKKwkjIHJldHVybiBlYXJseSBpZiBjaG9wcGluZyB3b3VsZG4ndCBtYWtlIHN0cmluZyBzaG9ydGVyCisJaWYgKCR3aGVyZSBlcSAnY2VudGVyJykgeworCQlyZXR1cm4gJHN0ciBpZiAoJGxlbiArIDUgPj0gbGVuZ3RoKCRzdHIpKTsgIyBmaWxsZXIgaXMgbGVuZ3RoIDUKKwkJJGxlbiA9IGludCgkbGVuLzIpOworCX0gZWxzZSB7CisJCXJldHVybiAkc3RyIGlmICgkbGVuICsgNCA+PSBsZW5ndGgoJHN0cikpOyAjIGZpbGxlciBpcyBsZW5ndGggNAorCX0KKworCSMgcmVnZXhwczogZW5kaW5nIGFuZCBiZWdpbm5pbmcgd2l0aCB3b3JkIHBhcnQgdXAgdG8gJGFkZF9sZW4KKwlteSAkZW5kcmUgPSBxci8ueyRsZW59XHd7MCwkYWRkX2xlbn0vOworCW15ICRiZWdyZSA9IHFyL1x3ezAsJGFkZF9sZW59LnskbGVufS87CisKKwlpZiAoJHdoZXJlIGVxICdsZWZ0JykgeworCQkkc3RyID1+IG0vXiguKj8pKCRiZWdyZSkkLzsKKwkJbXkgKCRsZWFkLCAkYm9keSkgPSAoJDEsICQyKTsKKwkJaWYgKGxlbmd0aCgkbGVhZCkgPiA0KSB7CisJCQkkbGVhZCA9ICIgLi4uIjsKKwkJfQorCQlyZXR1cm4gIiRsZWFkJGJvZHkiOworCisJfSBlbHNpZiAoJHdoZXJlIGVxICdjZW50ZXInKSB7CisJCSRzdHIgPX4gbS9eKCRlbmRyZSkoLiopJC87CisJCW15ICgkbGVmdCwgJHN0cikgID0gKCQxLCAkMik7CisJCSRzdHIgPX4gbS9eKC4qPykoJGJlZ3JlKSQvOworCQlteSAoJG1pZCwgJHJpZ2h0KSA9ICgkMSwgJDIpOworCQlpZiAobGVuZ3RoKCRtaWQpID4gNSkgeworCQkJJG1pZCA9ICIgLi4uICI7CisJCX0KKwkJcmV0dXJuICIkbGVmdCRtaWQkcmlnaHQiOworCisJfSBlbHNlIHsKKwkJJHN0ciA9fiBtL14oJGVuZHJlKSguKikkLzsKKwkJbXkgJGJvZHkgPSAkMTsKKwkJbXkgJHRhaWwgPSAkMjsKKwkJaWYgKGxlbmd0aCgkdGFpbCkgPiA0KSB7CisJCQkkdGFpbCA9ICIuLi4gIjsKKwkJfQorCQlyZXR1cm4gIiRib2R5JHRhaWwiOworCX0KK30KKworIyB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgYXMgY2hvcF9zdHIsIGJ1dCBhbHNvIHdyYXBzIGEgPHNwYW4+IGFyb3VuZCB0aGUKKyMgcmVzdWx0IHdpdGggYSB0aXRsZSBhdHRyaWJ1dGUgaWYgaXQgZG9lcyBnZXQgY2hvcHBlZC4gQWRkaXRpb25hbGx5LCB0aGUKKyMgc3RyaW5nIGlzIEhUTUwtZXNjYXBlZC4KK3N1YiBjaG9wX2FuZF9lc2NhcGVfc3RyIHsKKwlteSAoJHN0cikgPSBAXzsKKworCW15ICRjaG9wcGVkID0gY2hvcF9zdHIoQF8pOworCSRzdHIgPSB0b191dGY4KCRzdHIpOworCWlmICgkY2hvcHBlZCBlcSAkc3RyKSB7CisJCXJldHVybiBlc2NfaHRtbCgkY2hvcHBlZCk7CisJfSBlbHNlIHsKKwkJJHN0ciA9fiBzL1tbOmNudHJsOl1dLz8vZzsKKwkJcmV0dXJuICRjZ2ktPnNwYW4oey10aXRsZT0+JHN0cn0sIGVzY19odG1sKCRjaG9wcGVkKSk7CisJfQorfQorCisjIEhpZ2hsaWdodCBzZWxlY3RlZCBmcmFnbWVudHMgb2Ygc3RyaW5nLCB1c2luZyBnaXZlbiBDU1MgY2xhc3MsCisjIGFuZCBlc2NhcGUgSFRNTC4gIEl0IGlzIGFzc3VtZWQgdGhhdCBmcmFnbWVudHMgZG8gbm90IG92ZXJsYXAuCisjIFJlZ2lvbnMgYXJlIHBhc3NlZCBhcyBsaXN0IG9mIHBhaXJzIChhcnJheSByZWZlcmVuY2VzKS4KKyMKKyMgRXhhbXBsZTogZXNjX2h0bWxfaGxfcmVnaW9ucygiZm9vYmFyIiwgIm1hcmsiLCBbIDAsIDMgXSkgcmV0dXJucworIyAnPHNwYW4gY2xhc3M9Im1hcmsiPmZvbzwvc3Bhbj5iYXInCitzdWIgZXNjX2h0bWxfaGxfcmVnaW9ucyB7CisJbXkgKCRzdHIsICRjc3NfY2xhc3MsIEBzZWwpID0gQF87CisJbXkgJW9wdHMgPSBncmVwIHsgcmVmKCRfKSBuZSAnQVJSQVknIH0gQHNlbDsKKwlAc2VsICAgICA9IGdyZXAgeyByZWYoJF8pIGVxICdBUlJBWScgfSBAc2VsOworCXJldHVybiBlc2NfaHRtbCgkc3RyLCAlb3B0cykgdW5sZXNzIEBzZWw7CisKKwlteSAkb3V0ID0gJyc7CisJbXkgJHBvcyA9IDA7CisKKwlmb3IgbXkgJHMgKEBzZWwpIHsKKwkJbXkgKCRiZWdpbiwgJGVuZCkgPSBAJHM7CisKKwkJIyBEb24ndCBjcmVhdGUgZW1wdHkgPHNwYW4+IGVsZW1lbnRzLgorCQluZXh0IGlmICRlbmQgPD0gJGJlZ2luOworCisJCW15ICRlc2NhcGVkID0gZXNjX2h0bWwoc3Vic3RyKCRzdHIsICRiZWdpbiwgJGVuZCAtICRiZWdpbiksCisJCSAgICAgICAgICAgICAgICAgICAgICAgJW9wdHMpOworCisJCSRvdXQgLj0gZXNjX2h0bWwoc3Vic3RyKCRzdHIsICRwb3MsICRiZWdpbiAtICRwb3MpLCAlb3B0cykKKwkJCWlmICgkYmVnaW4gLSAkcG9zID4gMCk7CisJCSRvdXQgLj0gJGNnaS0+c3Bhbih7LWNsYXNzID0+ICRjc3NfY2xhc3N9LCAkZXNjYXBlZCk7CisKKwkJJHBvcyA9ICRlbmQ7CisJfQorCSRvdXQgLj0gZXNjX2h0bWwoc3Vic3RyKCRzdHIsICRwb3MpLCAlb3B0cykKKwkJaWYgKCRwb3MgPCBsZW5ndGgoJHN0cikpOworCisJcmV0dXJuICRvdXQ7Cit9CisKKyMgcmV0dXJuIHBvc2l0aW9ucyBvZiBiZWdpbm5pbmcgYW5kIGVuZCBvZiBlYWNoIG1hdGNoCitzdWIgbWF0Y2hwb3NfbGlzdCB7CisJbXkgKCRzdHIsICRyZWdleHApID0gQF87CisJcmV0dXJuIHVubGVzcyAoZGVmaW5lZCAkc3RyICYmIGRlZmluZWQgJHJlZ2V4cCk7CisKKwlteSBAbWF0Y2hlczsKKwl3aGlsZSAoJHN0ciA9fiAvJHJlZ2V4cC9nKSB7CisJCXB1c2ggQG1hdGNoZXMsIFskLVswXSwgJCtbMF1dOworCX0KKwlyZXR1cm4gQG1hdGNoZXM7Cit9CisKKyMgaGlnaGxpZ2h0IG1hdGNoIChpZiBhbnkpLCBhbmQgZXNjYXBlIEhUTUwKK3N1YiBlc2NfaHRtbF9tYXRjaF9obCB7CisJbXkgKCRzdHIsICRyZWdleHApID0gQF87CisJcmV0dXJuIGVzY19odG1sKCRzdHIpIHVubGVzcyBkZWZpbmVkICRyZWdleHA7CisKKwlteSBAbWF0Y2hlcyA9IG1hdGNocG9zX2xpc3QoJHN0ciwgJHJlZ2V4cCk7CisJcmV0dXJuIGVzY19odG1sKCRzdHIpIHVubGVzcyBAbWF0Y2hlczsKKworCXJldHVybiBlc2NfaHRtbF9obF9yZWdpb25zKCRzdHIsICdtYXRjaCcsIEBtYXRjaGVzKTsKK30KKworCisjIGhpZ2hsaWdodCBtYXRjaCAoaWYgYW55KSBvZiBzaG9ydGVuZWQgc3RyaW5nLCBhbmQgZXNjYXBlIEhUTUwKK3N1YiBlc2NfaHRtbF9tYXRjaF9obF9jaG9wcGVkIHsKKwlteSAoJHN0ciwgJGNob3BwZWQsICRyZWdleHApID0gQF87CisJcmV0dXJuIGVzY19odG1sX21hdGNoX2hsKCRzdHIsICRyZWdleHApIHVubGVzcyBkZWZpbmVkICRjaG9wcGVkOworCisJbXkgQG1hdGNoZXMgPSBtYXRjaHBvc19saXN0KCRzdHIsICRyZWdleHApOworCXJldHVybiBlc2NfaHRtbCgkY2hvcHBlZCkgdW5sZXNzIEBtYXRjaGVzOworCisJIyBmaWx0ZXIgbWF0Y2hlcyBzbyB0aGF0IHdlIG1hcmsgY2hvcHBlZCBzdHJpbmcKKwlteSAkdGFpbCA9ICIuLi4gIjsgIyBzZWUgY2hvcF9zdHIKKwl1bmxlc3MgKCRjaG9wcGVkID1+IHMvXFEkdGFpbFxFJC8vKSB7CisJCSR0YWlsID0gJyc7CisJfQorCW15ICRjaG9wX2xlbiA9IGxlbmd0aCgkY2hvcHBlZCk7CisJbXkgJHRhaWxfbGVuID0gbGVuZ3RoKCR0YWlsKTsKKwlteSBAZmlsdGVyZWQ7CisKKwlmb3IgbXkgJG0gKEBtYXRjaGVzKSB7CisJCWlmICgkbS0+WzBdID4gJGNob3BfbGVuKSB7CisJCQlwdXNoIEBmaWx0ZXJlZCwgWyAkY2hvcF9sZW4sICRjaG9wX2xlbiArICR0YWlsX2xlbiBdIGlmICgkdGFpbF9sZW4gPiAwKTsKKwkJCWxhc3Q7CisJCX0gZWxzaWYgKCRtLT5bMV0gPiAkY2hvcF9sZW4pIHsKKwkJCXB1c2ggQGZpbHRlcmVkLCBbICRtLT5bMF0sICRjaG9wX2xlbiArICR0YWlsX2xlbiBdOworCQkJbGFzdDsKKwkJfQorCQlwdXNoIEBmaWx0ZXJlZCwgJG07CisJfQorCisJcmV0dXJuIGVzY19odG1sX2hsX3JlZ2lvbnMoJGNob3BwZWQgLiAkdGFpbCwgJ21hdGNoJywgQGZpbHRlcmVkKTsKK30KKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyMgZnVuY3Rpb25zIHJldHVybmluZyBzaG9ydCBzdHJpbmdzCisKKyMgQ1NTIGNsYXNzIGZvciBnaXZlbiBhZ2UgdmFsdWUgKGluIHNlY29uZHMpCitzdWIgYWdlX2NsYXNzIHsKKwlteSAkYWdlID0gc2hpZnQ7CisKKwlpZiAoIWRlZmluZWQgJGFnZSkgeworCQlyZXR1cm4gIm5vYWdlIjsKKwl9IGVsc2lmICgkYWdlIDwgNjAqNjAqMikgeworCQlyZXR1cm4gImFnZTAiOworCX0gZWxzaWYgKCRhZ2UgPCA2MCo2MCoyNCoyKSB7CisJCXJldHVybiAiYWdlMSI7CisJfSBlbHNlIHsKKwkJcmV0dXJuICJhZ2UyIjsKKwl9Cit9CisKKyMgY29udmVydCBhZ2UgaW4gc2Vjb25kcyB0byAibm4gdW5pdHMgYWdvIiBzdHJpbmcKK3N1YiBhZ2Vfc3RyaW5nIHsKKwlteSAkYWdlID0gc2hpZnQ7CisJbXkgJGFnZV9zdHI7CisKKwlpZiAoJGFnZSA+IDYwKjYwKjI0KjM2NSoyKSB7CisJCSRhZ2Vfc3RyID0gKGludCAkYWdlLzYwLzYwLzI0LzM2NSk7CisJCSRhZ2Vfc3RyIC49ICIgeWVhcnMgYWdvIjsKKwl9IGVsc2lmICgkYWdlID4gNjAqNjAqMjQqKDM2NS8xMikqMikgeworCQkkYWdlX3N0ciA9IGludCAkYWdlLzYwLzYwLzI0LygzNjUvMTIpOworCQkkYWdlX3N0ciAuPSAiIG1vbnRocyBhZ28iOworCX0gZWxzaWYgKCRhZ2UgPiA2MCo2MCoyNCo3KjIpIHsKKwkJJGFnZV9zdHIgPSBpbnQgJGFnZS82MC82MC8yNC83OworCQkkYWdlX3N0ciAuPSAiIHdlZWtzIGFnbyI7CisJfSBlbHNpZiAoJGFnZSA+IDYwKjYwKjI0KjIpIHsKKwkJJGFnZV9zdHIgPSBpbnQgJGFnZS82MC82MC8yNDsKKwkJJGFnZV9zdHIgLj0gIiBkYXlzIGFnbyI7CisJfSBlbHNpZiAoJGFnZSA+IDYwKjYwKjIpIHsKKwkJJGFnZV9zdHIgPSBpbnQgJGFnZS82MC82MDsKKwkJJGFnZV9zdHIgLj0gIiBob3VycyBhZ28iOworCX0gZWxzaWYgKCRhZ2UgPiA2MCoyKSB7CisJCSRhZ2Vfc3RyID0gaW50ICRhZ2UvNjA7CisJCSRhZ2Vfc3RyIC49ICIgbWluIGFnbyI7CisJfSBlbHNpZiAoJGFnZSA+IDIpIHsKKwkJJGFnZV9zdHIgPSBpbnQgJGFnZTsKKwkJJGFnZV9zdHIgLj0gIiBzZWMgYWdvIjsKKwl9IGVsc2UgeworCQkkYWdlX3N0ciAuPSAiIHJpZ2h0IG5vdyI7CisJfQorCXJldHVybiAkYWdlX3N0cjsKK30KKwordXNlIGNvbnN0YW50IHsKKwlTX0lGSU5WQUxJRCA9PiAwMDMwMDAwLAorCVNfSUZHSVRMSU5LID0+IDAxNjAwMDAsCit9OworCisjIHN1Ym1vZHVsZS9zdWJwcm9qZWN0LCBhIGNvbW1pdCBvYmplY3QgcmVmZXJlbmNlCitzdWIgU19JU0dJVExJTksgeworCW15ICRtb2RlID0gc2hpZnQ7CisKKwlyZXR1cm4gKCgkbW9kZSAmIFNfSUZNVCkgPT0gU19JRkdJVExJTkspCit9CisKKyMgY29udmVydCBmaWxlIG1vZGUgaW4gb2N0YWwgdG8gc3ltYm9saWMgZmlsZSBtb2RlIHN0cmluZworc3ViIG1vZGVfc3RyIHsKKwlteSAkbW9kZSA9IG9jdCBzaGlmdDsKKworCWlmIChTX0lTR0lUTElOSygkbW9kZSkpIHsKKwkJcmV0dXJuICdtLS0tLS0tLS0tJzsKKwl9IGVsc2lmIChTX0lTRElSKCRtb2RlICYgU19JRk1UKSkgeworCQlyZXR1cm4gJ2Ryd3hyLXhyLXgnOworCX0gZWxzaWYgKFNfSVNMTksoJG1vZGUpKSB7CisJCXJldHVybiAnbHJ3eHJ3eHJ3eCc7CisJfSBlbHNpZiAoU19JU1JFRygkbW9kZSkpIHsKKwkJIyBnaXQgY2FyZXMgb25seSBhYm91dCB0aGUgZXhlY3V0YWJsZSBiaXQKKwkJaWYgKCRtb2RlICYgU19JWFVTUikgeworCQkJcmV0dXJuICctcnd4ci14ci14JzsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAnLXJ3LXItLXItLSc7CisJCX07CisJfSBlbHNlIHsKKwkJcmV0dXJuICctLS0tLS0tLS0tJzsKKwl9Cit9CisKKyMgY29udmVydCBmaWxlIG1vZGUgaW4gb2N0YWwgdG8gZmlsZSB0eXBlIHN0cmluZworc3ViIGZpbGVfdHlwZSB7CisJbXkgJG1vZGUgPSBzaGlmdDsKKworCWlmICgkbW9kZSAhfiBtL15bMC03XSskLykgeworCQlyZXR1cm4gJG1vZGU7CisJfSBlbHNlIHsKKwkJJG1vZGUgPSBvY3QgJG1vZGU7CisJfQorCisJaWYgKFNfSVNHSVRMSU5LKCRtb2RlKSkgeworCQlyZXR1cm4gInN1Ym1vZHVsZSI7CisJfSBlbHNpZiAoU19JU0RJUigkbW9kZSAmIFNfSUZNVCkpIHsKKwkJcmV0dXJuICJkaXJlY3RvcnkiOworCX0gZWxzaWYgKFNfSVNMTksoJG1vZGUpKSB7CisJCXJldHVybiAic3ltbGluayI7CisJfSBlbHNpZiAoU19JU1JFRygkbW9kZSkpIHsKKwkJcmV0dXJuICJmaWxlIjsKKwl9IGVsc2UgeworCQlyZXR1cm4gInVua25vd24iOworCX0KK30KKworIyBjb252ZXJ0IGZpbGUgbW9kZSBpbiBvY3RhbCB0byBmaWxlIHR5cGUgZGVzY3JpcHRpb24gc3RyaW5nCitzdWIgZmlsZV90eXBlX2xvbmcgeworCW15ICRtb2RlID0gc2hpZnQ7CisKKwlpZiAoJG1vZGUgIX4gbS9eWzAtN10rJC8pIHsKKwkJcmV0dXJuICRtb2RlOworCX0gZWxzZSB7CisJCSRtb2RlID0gb2N0ICRtb2RlOworCX0KKworCWlmIChTX0lTR0lUTElOSygkbW9kZSkpIHsKKwkJcmV0dXJuICJzdWJtb2R1bGUiOworCX0gZWxzaWYgKFNfSVNESVIoJG1vZGUgJiBTX0lGTVQpKSB7CisJCXJldHVybiAiZGlyZWN0b3J5IjsKKwl9IGVsc2lmIChTX0lTTE5LKCRtb2RlKSkgeworCQlyZXR1cm4gInN5bWxpbmsiOworCX0gZWxzaWYgKFNfSVNSRUcoJG1vZGUpKSB7CisJCWlmICgkbW9kZSAmIFNfSVhVU1IpIHsKKwkJCXJldHVybiAiZXhlY3V0YWJsZSI7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gImZpbGUiOworCQl9OworCX0gZWxzZSB7CisJCXJldHVybiAidW5rbm93biI7CisJfQorfQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMjIGZ1bmN0aW9ucyByZXR1cm5pbmcgc2hvcnQgSFRNTCBmcmFnbWVudHMsIG9yIHRyYW5zZm9ybWluZyBIVE1MIGZyYWdtZW50cworIyMgd2hpY2ggZG9uJ3QgYmVsb25nIHRvIG90aGVyIHNlY3Rpb25zCisKKyMgZm9ybWF0IGxpbmUgb2YgY29tbWl0IG1lc3NhZ2UuCitzdWIgZm9ybWF0X2xvZ19saW5lX2h0bWwgeworCW15ICRsaW5lID0gc2hpZnQ7CisKKwkjIFBvdGVudGlhbGx5IGFiYnJldmlhdGVkIE9JRC4KKwlteSAkcmVnZXggPSBvaWRfbmxlbl9yZWdleCgiNyw2NCIpOworCisJJGxpbmUgPSBlc2NfaHRtbCgkbGluZSwgLW5ic3A9PjEpOworCSRsaW5lID1+IHN7CisgICAgICAgIFxiCisgICAgICAgICgKKyAgICAgICAgICAgICMgVGhlIG91dHB1dCBvZiAiZ2l0IGRlc2NyaWJlIiwgZS5nLiB2Mi4xMC4wLTI5Ny1nZjY3MjdiMAorICAgICAgICAgICAgIyBvciBoYWRvb3AtMjAxNjA5MjEtMTEzNDQxLTIwLWcwOTRmYjdkCisgICAgICAgICAgICAoPzwhLSkgIyBzZWUgc3RyYnVmX2NoZWNrX3RhZ19yZWYoKS4gVGFncyBjYW4ndCBzdGFydCB3aXRoIC0KKyAgICAgICAgICAgIFtBLVphLXowLTkuLV0rCisgICAgICAgICAgICAoPyFcLikgIyByZWZzIGNhbid0IGVuZCB3aXRoICIuIiwgc2VlIGNoZWNrX3JlZm5hbWVfZm9ybWF0KCkKKyAgICAgICAgICAgIC1nJHJlZ2V4CisgICAgICAgICAgICB8CisgICAgICAgICAgICAjIEp1c3QgYSBub3JtYWwgbG9va2luZyBHaXQgU0hBMQorCSAgICAkcmVnZXgKKyAgICAgICAgKQorICAgICAgICBcYgorICAgIH17CisJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ib2JqZWN0IiwgaGFzaD0+JDEpLAorCQkJCQktY2xhc3MgPT4gInRleHQifSwgJDEpOworCX1lZ3g7CisKKwlyZXR1cm4gJGxpbmU7Cit9CisKKyMgZm9ybWF0IG1hcmtlciBvZiByZWZzIHBvaW50aW5nIHRvIGdpdmVuIG9iamVjdAorCisjIHRoZSBkZXN0aW5hdGlvbiBhY3Rpb24gaXMgY2hvc2VuIGJhc2VkIG9uIG9iamVjdCB0eXBlIGFuZCBjdXJyZW50IGNvbnRleHQ6CisjIC0gZm9yIGFubm90YXRlZCB0YWdzLCB3ZSBjaG9vc2UgdGhlIHRhZyB2aWV3IHVubGVzcyBpdCdzIHRoZSBjdXJyZW50IHZpZXcKKyMgICBhbHJlYWR5LCBpbiB3aGljaCBjYXNlIHdlIGdvIHRvIHNob3J0bG9nIHZpZXcKKyMgLSBmb3Igb3RoZXIgcmVmcywgd2Uga2VlcCB0aGUgY3VycmVudCB2aWV3IGlmIHdlJ3JlIGluIGhpc3RvcnksIHNob3J0bG9nIG9yCisjICAgbG9nIHZpZXcsIGFuZCBzZWxlY3Qgc2hvcnRsb2cgb3RoZXJ3aXNlCitzdWIgZm9ybWF0X3JlZl9tYXJrZXIgeworCW15ICgkcmVmcywgJGlkKSA9IEBfOworCW15ICRtYXJrZXJzID0gJyc7CisKKwlpZiAoZGVmaW5lZCAkcmVmcy0+eyRpZH0pIHsKKwkJZm9yZWFjaCBteSAkcmVmIChAeyRyZWZzLT57JGlkfX0pIHsKKwkJCSMgdGhpcyBjb2RlIGV4cGxvaXRzIHRoZSBmYWN0IHRoYXQgbm9uLWxpZ2h0d2VpZ2h0IHRhZ3MgYXJlIHRoZQorCQkJIyBvbmx5IGluZGlyZWN0IG9iamVjdHMsIGFuZCB0aGF0IHRoZXkgYXJlIHRoZSBvbmx5IG9iamVjdHMgZm9yIHdoaWNoCisJCQkjIHdlIHdhbnQgdG8gdXNlIHRhZyBpbnN0ZWFkIG9mIHNob3J0bG9nIGFzIGFjdGlvbgorCQkJbXkgKCR0eXBlLCAkbmFtZSkgPSBxdygpOworCQkJbXkgJGluZGlyZWN0ID0gKCRyZWYgPX4gcy9cXlx7XH0kLy8pOworCQkJIyBlLmcuIHRhZ3MvdjIuNi4xMSBvciBoZWFkcy9uZXh0CisJCQlpZiAoJHJlZiA9fiBtIV4oLio/KXM/LyguKikkISkgeworCQkJCSR0eXBlID0gJDE7CisJCQkJJG5hbWUgPSAkMjsKKwkJCX0gZWxzZSB7CisJCQkJJHR5cGUgPSAicmVmIjsKKwkJCQkkbmFtZSA9ICRyZWY7CisJCQl9CisKKwkJCW15ICRjbGFzcyA9ICR0eXBlOworCQkJJGNsYXNzIC49ICIgaW5kaXJlY3QiIGlmICRpbmRpcmVjdDsKKworCQkJbXkgJGRlc3RfYWN0aW9uID0gInNob3J0bG9nIjsKKworCQkJaWYgKCRpbmRpcmVjdCkgeworCQkJCSRkZXN0X2FjdGlvbiA9ICJ0YWciIHVubGVzcyAkYWN0aW9uIGVxICJ0YWciOworCQkJfSBlbHNpZiAoJGFjdGlvbiA9fiAvXihoaXN0b3J5fChzaG9ydCk/bG9nKSQvKSB7CisJCQkJJGRlc3RfYWN0aW9uID0gJGFjdGlvbjsKKwkJCX0KKworCQkJbXkgJGRlc3QgPSAiIjsKKwkJCSRkZXN0IC49ICJyZWZzLyIgdW5sZXNzICRyZWYgPX4gbSFecmVmcy8hOworCQkJJGRlc3QgLj0gJHJlZjsKKworCQkJbXkgJGxpbmsgPSAkY2dpLT5hKHsKKwkJCQktaHJlZiA9PiBocmVmKAorCQkJCQlhY3Rpb249PiRkZXN0X2FjdGlvbiwKKwkJCQkJaGFzaD0+JGRlc3QKKwkJCQkpfSwgZXNjX2h0bWwoJG5hbWUpKTsKKworCQkJJG1hcmtlcnMgLj0gIiA8c3BhbiBjbGFzcz1cIiIuZXNjX2F0dHIoJGNsYXNzKS4iXCIgdGl0bGU9XCIiLmVzY19hdHRyKCRyZWYpLiJcIj4iIC4KKwkJCQkkbGluayAuICI8L3NwYW4+IjsKKwkJfQorCX0KKworCWlmICgkbWFya2VycykgeworCQlyZXR1cm4gJyA8c3BhbiBjbGFzcz0icmVmcyI+Jy4gJG1hcmtlcnMgLiAnPC9zcGFuPic7CisJfSBlbHNlIHsKKwkJcmV0dXJuICIiOworCX0KK30KKworIyBmb3JtYXQsIHBlcmhhcHMgc2hvcnRlbmVkIGFuZCB3aXRoIG1hcmtlcnMsIHRpdGxlIGxpbmUKK3N1YiBmb3JtYXRfc3ViamVjdF9odG1sIHsKKwlteSAoJGxvbmcsICRzaG9ydCwgJGhyZWYsICRleHRyYSkgPSBAXzsKKwkkZXh0cmEgPSAnJyB1bmxlc3MgZGVmaW5lZCgkZXh0cmEpOworCisJaWYgKGxlbmd0aCgkc2hvcnQpIDwgbGVuZ3RoKCRsb25nKSkgeworCQkkbG9uZyA9fiBzL1tbOmNudHJsOl1dLz8vZzsKKwkJcmV0dXJuICRjZ2ktPmEoey1ocmVmID0+ICRocmVmLCAtY2xhc3MgPT4gImxpc3Qgc3ViamVjdCIsCisJCSAgICAgICAgICAgICAgICAtdGl0bGUgPT4gdG9fdXRmOCgkbG9uZyl9LAorCQkgICAgICAgZXNjX2h0bWwoJHNob3J0KSkgLiAkZXh0cmE7CisJfSBlbHNlIHsKKwkJcmV0dXJuICRjZ2ktPmEoey1ocmVmID0+ICRocmVmLCAtY2xhc3MgPT4gImxpc3Qgc3ViamVjdCJ9LAorCQkgICAgICAgZXNjX2h0bWwoJGxvbmcpKSAuICRleHRyYTsKKwl9Cit9CisKKyMgUmF0aGVyIHRoYW4gcmVjb21wdXRpbmcgdGhlIHVybCBmb3IgYW4gZW1haWwgbXVsdGlwbGUgdGltZXMsIHdlIGNhY2hlIGl0CisjIGFmdGVyIHRoZSBmaXJzdCBoaXQuIFRoaXMgZ2l2ZXMgYSB2aXNpYmxlIGJlbmVmaXQgaW4gdmlld3Mgd2hlcmUgdGhlIGF2YXRhcgorIyBmb3IgdGhlIHNhbWUgZW1haWwgaXMgdXNlZCByZXBlYXRlZGx5IChlLmcuIHNob3J0bG9nKS4KKyMgVGhlIGNhY2hlIGlzIHNoYXJlZCBieSBhbGwgYXZhdGFyIGVuZ2luZXMgKGN1cnJlbnRseSBncmF2YXRhciBvbmx5KSwgd2hpY2gKKyMgYXJlIGZyZWUgdG8gdXNlIGl0IGFzIHByZWZlcnJlZC4gU2luY2Ugb25seSBvbmUgYXZhdGFyIGVuZ2luZSBpcyB1c2VkIGZvciBhbnkKKyMgZ2l2ZW4gcGFnZSwgdGhlcmUncyBubyByaXNrIGZvciBjYWNoZSBjb25mbGljdHMuCitvdXIgJWF2YXRhcl9jYWNoZSA9ICgpOworCisjIENvbXB1dGUgdGhlIHBpY29uIHVybCBmb3IgYSBnaXZlbiBlbWFpbCwgYnkgdXNpbmcgdGhlIHBpY29uIHNlYXJjaCBzZXJ2aWNlIG92ZXIgYXQKKyMgaHR0cDovL3d3dy5jcy5pbmRpYW5hLmVkdS9waWNvbnMvc2VhcmNoLmh0bWwKK3N1YiBwaWNvbl91cmwgeworCW15ICRlbWFpbCA9IGxjIHNoaWZ0OworCWlmICghJGF2YXRhcl9jYWNoZXskZW1haWx9KSB7CisJCW15ICgkdXNlciwgJGRvbWFpbikgPSBzcGxpdCgnQCcsICRlbWFpbCk7CisJCSRhdmF0YXJfY2FjaGV7JGVtYWlsfSA9CisJCQkiLy93d3cuY3MuaW5kaWFuYS5lZHUvY2dpLXB1Yi9raW56bGVyL3BpY29uc2VhcmNoLmNnaS8iIC4KKwkJCSIkZG9tYWluLyR1c2VyLyIgLgorCQkJInVzZXJzK2RvbWFpbnMrdW5rbm93bi91cC9zaW5nbGUiOworCX0KKwlyZXR1cm4gJGF2YXRhcl9jYWNoZXskZW1haWx9OworfQorCisjIENvbXB1dGUgdGhlIGdyYXZhdGFyIHVybCBmb3IgYSBnaXZlbiBlbWFpbCwgaWYgaXQncyBub3QgaW4gdGhlIGNhY2hlIGFscmVhZHkuCisjIEdyYXZhdGFyIHN0b3JlcyBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBVUkwgYmVmb3JlIHRoZSBzaXplLCBzaW5jZSB0aGF0J3MgdGhlCisjIG9uZSBjb21wdXRhdGlvbmFsbHkgbW9yZSBleHBlbnNpdmUuIFRoaXMgYWxzbyBhbGxvd3MgcmV1c2Ugb2YgdGhlIGNhY2hlIGZvcgorIyBkaWZmZXJlbnQgc2l6ZXMgKGZvciB0aGlzIHBhcnRpY3VsYXIgZW5naW5lKS4KK3N1YiBncmF2YXRhcl91cmwgeworCW15ICRlbWFpbCA9IGxjIHNoaWZ0OworCW15ICRzaXplID0gc2hpZnQ7CisJJGF2YXRhcl9jYWNoZXskZW1haWx9IHx8PQorCQkiLy93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci8iIC4KKwkJCW1kNV9oZXgoJGVtYWlsKSAuICI/cz0iOworCXJldHVybiAkYXZhdGFyX2NhY2hleyRlbWFpbH0gLiAkc2l6ZTsKK30KKworIyBJbnNlcnQgYW4gYXZhdGFyIGZvciB0aGUgZ2l2ZW4gJGVtYWlsIGF0IHRoZSBnaXZlbiAkc2l6ZSBpZiB0aGUgZmVhdHVyZQorIyBpcyBlbmFibGVkLgorc3ViIGdpdF9nZXRfYXZhdGFyIHsKKwlteSAoJGVtYWlsLCAlb3B0cykgPSBAXzsKKwlteSAkcHJlX3doaXRlICA9ICgkb3B0c3stcGFkX2JlZm9yZX0gPyAiJm5ic3A7IiA6ICIiKTsKKwlteSAkcG9zdF93aGl0ZSA9ICgkb3B0c3stcGFkX2FmdGVyfSAgPyAiJm5ic3A7IiA6ICIiKTsKKwkkb3B0c3stc2l6ZX0gfHw9ICdkZWZhdWx0JzsKKwlteSAkc2l6ZSA9ICRhdmF0YXJfc2l6ZXskb3B0c3stc2l6ZX19IHx8ICRhdmF0YXJfc2l6ZXsnZGVmYXVsdCd9OworCW15ICR1cmwgPSAiIjsKKwlpZiAoJGdpdF9hdmF0YXIgZXEgJ2dyYXZhdGFyJykgeworCQkkdXJsID0gZ3JhdmF0YXJfdXJsKCRlbWFpbCwgJHNpemUpOworCX0gZWxzaWYgKCRnaXRfYXZhdGFyIGVxICdwaWNvbicpIHsKKwkJJHVybCA9IHBpY29uX3VybCgkZW1haWwpOworCX0KKwkjIE90aGVyIHByb3ZpZGVycyBjYW4gYmUgYWRkZWQgYnkgZXh0ZW5kaW5nIHRoZSBpZiBjaGFpbiwgZGVmaW5pbmcgJHVybAorCSMgYXMgbmVlZGVkLiBJZiBubyB2YXJpYW50IHB1dHMgc29tZXRoaW5nIGluICR1cmwsIHdlIGFzc3VtZSBhdmF0YXJzCisJIyBhcmUgY29tcGxldGVseSBkaXNhYmxlZC91bmF2YWlsYWJsZS4KKwlpZiAoJHVybCkgeworCQlyZXR1cm4gJHByZV93aGl0ZSAuCisJCSAgICAgICAiPGltZyB3aWR0aD1cIiRzaXplXCIgIiAuCisJCSAgICAgICAgICAgICJjbGFzcz1cImF2YXRhclwiICIgLgorCQkgICAgICAgICAgICAic3JjPVwiIi5lc2NfdXJsKCR1cmwpLiJcIiAiIC4KKwkJCSAgICAiYWx0PVwiXCIgIiAuCisJCSAgICAgICAiLz4iIC4gJHBvc3Rfd2hpdGU7CisJfSBlbHNlIHsKKwkJcmV0dXJuICIiOworCX0KK30KKworc3ViIGZvcm1hdF9zZWFyY2hfYXV0aG9yIHsKKwlteSAoJGF1dGhvciwgJHNlYXJjaHR5cGUsICRkaXNwbGF5dGV4dCkgPSBAXzsKKwlteSAkaGF2ZV9zZWFyY2ggPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnc2VhcmNoJyk7CisKKwlpZiAoJGhhdmVfc2VhcmNoKSB7CisJCW15ICRwZXJmb3JtZWQgPSAiIjsKKwkJaWYgKCRzZWFyY2h0eXBlIGVxICdhdXRob3InKSB7CisJCQkkcGVyZm9ybWVkID0gImF1dGhvcmVkIjsKKwkJfSBlbHNpZiAoJHNlYXJjaHR5cGUgZXEgJ2NvbW1pdHRlcicpIHsKKwkJCSRwZXJmb3JtZWQgPSAiY29tbWl0dGVkIjsKKwkJfQorCisJCXJldHVybiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InNlYXJjaCIsIGhhc2g9PiRoYXNoLAorCQkJCXNlYXJjaHRleHQ9PiRhdXRob3IsCisJCQkJc2VhcmNodHlwZT0+JHNlYXJjaHR5cGUpLCBjbGFzcz0+Imxpc3QiLAorCQkJCXRpdGxlPT4iU2VhcmNoIGZvciBjb21taXRzICRwZXJmb3JtZWQgYnkgJGF1dGhvciJ9LAorCQkJCSRkaXNwbGF5dGV4dCk7CisKKwl9IGVsc2UgeworCQlyZXR1cm4gJGRpc3BsYXl0ZXh0OworCX0KK30KKworIyBmb3JtYXQgdGhlIGF1dGhvciBuYW1lIG9mIHRoZSBnaXZlbiBjb21taXQgd2l0aCB0aGUgZ2l2ZW4gdGFnCisjIHRoZSBhdXRob3IgbmFtZSBpcyBjaG9wcGVkIGFuZCBlc2NhcGVkIGFjY29yZGluZyB0byB0aGUgb3RoZXIKKyMgb3B0aW9uYWwgcGFyYW1ldGVycyAoc2VlIGNob3Bfc3RyKS4KK3N1YiBmb3JtYXRfYXV0aG9yX2h0bWwgeworCW15ICR0YWcgPSBzaGlmdDsKKwlteSAkY28gPSBzaGlmdDsKKwlteSAkYXV0aG9yID0gY2hvcF9hbmRfZXNjYXBlX3N0cigkY28tPnsnYXV0aG9yX25hbWUnfSwgQF8pOworCXJldHVybiAiPCR0YWcgY2xhc3M9XCJhdXRob3JcIj4iIC4KKwkgICAgICAgZm9ybWF0X3NlYXJjaF9hdXRob3IoJGNvLT57J2F1dGhvcl9uYW1lJ30sICJhdXRob3IiLAorCQkgICAgICAgZ2l0X2dldF9hdmF0YXIoJGNvLT57J2F1dGhvcl9lbWFpbCd9LCAtcGFkX2FmdGVyID0+IDEpIC4KKwkJICAgICAgICRhdXRob3IpIC4KKwkgICAgICAgIjwvJHRhZz4iOworfQorCisjIGZvcm1hdCBnaXQgZGlmZiBoZWFkZXIgbGluZSwgaS5lLiAiZGlmZiAtLShnaXR8Y29tYmluZWR8Y2MpIC4uLiIKK3N1YiBmb3JtYXRfZ2l0X2RpZmZfaGVhZGVyX2xpbmUgeworCW15ICRsaW5lID0gc2hpZnQ7CisJbXkgJGRpZmZpbmZvID0gc2hpZnQ7CisJbXkgKCRmcm9tLCAkdG8pID0gQF87CisKKwlpZiAoJGRpZmZpbmZvLT57J25wYXJlbnRzJ30pIHsKKwkJIyBjb21iaW5lZCBkaWZmCisJCSRsaW5lID1+IHMhXihkaWZmICguKj8pICkiPy4qJCEkMSE7CisJCWlmICgkdG8tPnsnaHJlZid9KSB7CisJCQkkbGluZSAuPSAkY2dpLT5hKHstaHJlZiA9PiAkdG8tPnsnaHJlZid9LCAtY2xhc3MgPT4gInBhdGgifSwKKwkJCSAgICAgICAgICAgICAgICAgZXNjX3BhdGgoJHRvLT57J2ZpbGUnfSkpOworCQl9IGVsc2UgeyAjIGZpbGUgd2FzIGRlbGV0ZWQgKG5vIGhyZWYpCisJCQkkbGluZSAuPSBlc2NfcGF0aCgkdG8tPnsnZmlsZSd9KTsKKwkJfQorCX0gZWxzZSB7CisJCSMgIm9yZGluYXJ5IiBkaWZmCisJCSRsaW5lID1+IHMhXihkaWZmICguKj8pICkiP2EvLiokISQxITsKKwkJaWYgKCRmcm9tLT57J2hyZWYnfSkgeworCQkJJGxpbmUgLj0gJGNnaS0+YSh7LWhyZWYgPT4gJGZyb20tPnsnaHJlZid9LCAtY2xhc3MgPT4gInBhdGgifSwKKwkJCSAgICAgICAgICAgICAgICAgJ2EvJyAuIGVzY19wYXRoKCRmcm9tLT57J2ZpbGUnfSkpOworCQl9IGVsc2UgeyAjIGZpbGUgd2FzIGFkZGVkIChubyBocmVmKQorCQkJJGxpbmUgLj0gJ2EvJyAuIGVzY19wYXRoKCRmcm9tLT57J2ZpbGUnfSk7CisJCX0KKwkJJGxpbmUgLj0gJyAnOworCQlpZiAoJHRvLT57J2hyZWYnfSkgeworCQkJJGxpbmUgLj0gJGNnaS0+YSh7LWhyZWYgPT4gJHRvLT57J2hyZWYnfSwgLWNsYXNzID0+ICJwYXRoIn0sCisJCQkgICAgICAgICAgICAgICAgICdiLycgLiBlc2NfcGF0aCgkdG8tPnsnZmlsZSd9KSk7CisJCX0gZWxzZSB7ICMgZmlsZSB3YXMgZGVsZXRlZAorCQkJJGxpbmUgLj0gJ2IvJyAuIGVzY19wYXRoKCR0by0+eydmaWxlJ30pOworCQl9CisJfQorCisJcmV0dXJuICI8ZGl2IGNsYXNzPVwiZGlmZiBoZWFkZXJcIj4kbGluZTwvZGl2PlxuIjsKK30KKworIyBmb3JtYXQgZXh0ZW5kZWQgZGlmZiBoZWFkZXIgbGluZSwgYmVmb3JlIHBhdGNoIGl0c2VsZgorc3ViIGZvcm1hdF9leHRlbmRlZF9kaWZmX2hlYWRlcl9saW5lIHsKKwlteSAkbGluZSA9IHNoaWZ0OworCW15ICRkaWZmaW5mbyA9IHNoaWZ0OworCW15ICgkZnJvbSwgJHRvKSA9IEBfOworCisJIyBtYXRjaCA8cGF0aD4KKwlpZiAoJGxpbmUgPX4gcyFeKChjb3B5fHJlbmFtZSkgZnJvbSApLiokISQxISAmJiAkZnJvbS0+eydocmVmJ30pIHsKKwkJJGxpbmUgLj0gJGNnaS0+YSh7LWhyZWY9PiRmcm9tLT57J2hyZWYnfSwgLWNsYXNzPT4icGF0aCJ9LAorCQkgICAgICAgICAgICAgICAgICAgICAgIGVzY19wYXRoKCRmcm9tLT57J2ZpbGUnfSkpOworCX0KKwlpZiAoJGxpbmUgPX4gcyFeKChjb3B5fHJlbmFtZSkgdG8gKS4qJCEkMSEgJiYgJHRvLT57J2hyZWYnfSkgeworCQkkbGluZSAuPSAkY2dpLT5hKHstaHJlZj0+JHRvLT57J2hyZWYnfSwgLWNsYXNzPT4icGF0aCJ9LAorCQkgICAgICAgICAgICAgICAgIGVzY19wYXRoKCR0by0+eydmaWxlJ30pKTsKKwl9CisJIyBtYXRjaCBzaW5nbGUgPG1vZGU+CisJaWYgKCRsaW5lID1+IG0vXHMoXGR7Nn0pJC8pIHsKKwkJJGxpbmUgLj0gJzxzcGFuIGNsYXNzPSJpbmZvIj4gKCcgLgorCQkgICAgICAgICBmaWxlX3R5cGVfbG9uZygkMSkgLgorCQkgICAgICAgICAnKTwvc3Bhbj4nOworCX0KKwkjIG1hdGNoIDxoYXNoPgorCWlmICgkbGluZSA9fiBvaWRfbmxlbl9wcmVmaXhfaW5maXhfcmVnZXgoJHNoYTFfbGVuLCAiaW5kZXggIiwgIiwiKSB8CisJICAgICRsaW5lID1+IG9pZF9ubGVuX3ByZWZpeF9pbmZpeF9yZWdleCgkc2hhMjU2X2xlbiwgImluZGV4ICIsICIsIikpIHsKKwkJIyBjYW4gbWF0Y2ggb25seSBmb3IgY29tYmluZWQgZGlmZgorCQkkbGluZSA9ICdpbmRleCAnOworCQlmb3IgKG15ICRpID0gMDsgJGkgPCAkZGlmZmluZm8tPnsnbnBhcmVudHMnfTsgJGkrKykgeworCQkJaWYgKCRmcm9tLT57J2hyZWYnfVskaV0pIHsKKwkJCQkkbGluZSAuPSAkY2dpLT5hKHstaHJlZj0+JGZyb20tPnsnaHJlZid9WyRpXSwKKwkJCQkgICAgICAgICAgICAgICAgICAtY2xhc3M9PiJoYXNoIn0sCisJCQkJICAgICAgICAgICAgICAgICBzdWJzdHIoJGRpZmZpbmZvLT57J2Zyb21faWQnfVskaV0sMCw3KSk7CisJCQl9IGVsc2UgeworCQkJCSRsaW5lIC49ICcwJyB4IDc7CisJCQl9CisJCQkjIHNlcGFyYXRvcgorCQkJJGxpbmUgLj0gJywnIGlmICgkaSA8ICRkaWZmaW5mby0+eyducGFyZW50cyd9IC0gMSk7CisJCX0KKwkJJGxpbmUgLj0gJy4uJzsKKwkJaWYgKCR0by0+eydocmVmJ30pIHsKKwkJCSRsaW5lIC49ICRjZ2ktPmEoey1ocmVmPT4kdG8tPnsnaHJlZid9LCAtY2xhc3M9PiJoYXNoIn0sCisJCQkgICAgICAgICAgICAgICAgIHN1YnN0cigkZGlmZmluZm8tPnsndG9faWQnfSwwLDcpKTsKKwkJfSBlbHNlIHsKKwkJCSRsaW5lIC49ICcwJyB4IDc7CisJCX0KKworCX0gZWxzaWYgKCRsaW5lID1+IG9pZF9ubGVuX3ByZWZpeF9pbmZpeF9yZWdleCgkc2hhMV9sZW4sICJpbmRleCAiLCAiLi4iKSB8CisJCSAkbGluZSA9fiBvaWRfbmxlbl9wcmVmaXhfaW5maXhfcmVnZXgoJHNoYTI1Nl9sZW4sICJpbmRleCAiLCAiLi4iKSkgeworCQkjIGNhbiBtYXRjaCBvbmx5IGZvciBvcmRpbmFyeSBkaWZmCisJCW15ICgkZnJvbV9saW5rLCAkdG9fbGluayk7CisJCWlmICgkZnJvbS0+eydocmVmJ30pIHsKKwkJCSRmcm9tX2xpbmsgPSAkY2dpLT5hKHstaHJlZj0+JGZyb20tPnsnaHJlZid9LCAtY2xhc3M9PiJoYXNoIn0sCisJCQkgICAgICAgICAgICAgICAgICAgICBzdWJzdHIoJGRpZmZpbmZvLT57J2Zyb21faWQnfSwwLDcpKTsKKwkJfSBlbHNlIHsKKwkJCSRmcm9tX2xpbmsgPSAnMCcgeCA3OworCQl9CisJCWlmICgkdG8tPnsnaHJlZid9KSB7CisJCQkkdG9fbGluayA9ICRjZ2ktPmEoey1ocmVmPT4kdG8tPnsnaHJlZid9LCAtY2xhc3M9PiJoYXNoIn0sCisJCQkgICAgICAgICAgICAgICAgICAgc3Vic3RyKCRkaWZmaW5mby0+eyd0b19pZCd9LDAsNykpOworCQl9IGVsc2UgeworCQkJJHRvX2xpbmsgPSAnMCcgeCA3OworCQl9CisJCW15ICgkZnJvbV9pZCwgJHRvX2lkKSA9ICgkZGlmZmluZm8tPnsnZnJvbV9pZCd9LCAkZGlmZmluZm8tPnsndG9faWQnfSk7CisJCSRsaW5lID1+IHMhJGZyb21faWRcLlwuJHRvX2lkISRmcm9tX2xpbmsuLiR0b19saW5rITsKKwl9CisKKwlyZXR1cm4gJGxpbmUgLiAiPGJyLz5cbiI7Cit9CisKKyMgZm9ybWF0IGZyb20tZmlsZS90by1maWxlIGRpZmYgaGVhZGVyCitzdWIgZm9ybWF0X2RpZmZfZnJvbV90b19oZWFkZXIgeworCW15ICgkZnJvbV9saW5lLCAkdG9fbGluZSwgJGRpZmZpbmZvLCAkZnJvbSwgJHRvLCBAcGFyZW50cykgPSBAXzsKKwlteSAkbGluZTsKKwlteSAkcmVzdWx0ID0gJyc7CisKKwkkbGluZSA9ICRmcm9tX2xpbmU7CisJI2Fzc2VydCgkbGluZSA9fiBtL14tLS0vKSBpZiBERUJVRzsKKwkjIG5vIGV4dHJhIGZvcm1hdHRpbmcgZm9yICJeLS0tIC9kZXYvbnVsbCIKKwlpZiAoISAkZGlmZmluZm8tPnsnbnBhcmVudHMnfSkgeworCQkjIG9yZGluYXJ5IChzaW5nbGUgcGFyZW50KSBkaWZmCisJCWlmICgkbGluZSA9fiBtIV4tLS0gIj9hLyEpIHsKKwkJCWlmICgkZnJvbS0+eydocmVmJ30pIHsKKwkJCQkkbGluZSA9ICctLS0gYS8nIC4KKwkJCQkgICAgICAgICRjZ2ktPmEoey1ocmVmPT4kZnJvbS0+eydocmVmJ30sIC1jbGFzcz0+InBhdGgifSwKKwkJCQkgICAgICAgICAgICAgICAgZXNjX3BhdGgoJGZyb20tPnsnZmlsZSd9KSk7CisJCQl9IGVsc2UgeworCQkJCSRsaW5lID0gJy0tLSBhLycgLgorCQkJCSAgICAgICAgZXNjX3BhdGgoJGZyb20tPnsnZmlsZSd9KTsKKwkJCX0KKwkJfQorCQkkcmVzdWx0IC49IHFxITxkaXYgY2xhc3M9ImRpZmYgZnJvbV9maWxlIj4kbGluZTwvZGl2PlxuITsKKworCX0gZWxzZSB7CisJCSMgY29tYmluZWQgZGlmZiAobWVyZ2UgY29tbWl0KQorCQlmb3IgKG15ICRpID0gMDsgJGkgPCAkZGlmZmluZm8tPnsnbnBhcmVudHMnfTsgJGkrKykgeworCQkJaWYgKCRmcm9tLT57J2hyZWYnfVskaV0pIHsKKwkJCQkkbGluZSA9ICctLS0gJyAuCisJCQkJICAgICAgICAkY2dpLT5hKHstaHJlZj0+aHJlZihhY3Rpb249PiJibG9iZGlmZiIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX3BhcmVudD0+JGRpZmZpbmZvLT57J2Zyb21faWQnfVskaV0sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX3BhcmVudF9iYXNlPT4kcGFyZW50c1skaV0sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhcmVudD0+JGZyb20tPnsnZmlsZSd9WyRpXSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmaW5mby0+eyd0b19pZCd9LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JHRvLT57J2ZpbGUnfSksCisJCQkJICAgICAgICAgICAgICAgICAtY2xhc3M9PiJwYXRoIiwKKwkJCQkgICAgICAgICAgICAgICAgIC10aXRsZT0+ImRpZmYiIC4gKCRpKzEpfSwKKwkJCQkgICAgICAgICAgICAgICAgJGkrMSkgLgorCQkJCSAgICAgICAgJy8nIC4KKwkJCQkgICAgICAgICRjZ2ktPmEoey1ocmVmPT4kZnJvbS0+eydocmVmJ31bJGldLCAtY2xhc3M9PiJwYXRoIn0sCisJCQkJICAgICAgICAgICAgICAgIGVzY19wYXRoKCRmcm9tLT57J2ZpbGUnfVskaV0pKTsKKwkJCX0gZWxzZSB7CisJCQkJJGxpbmUgPSAnLS0tIC9kZXYvbnVsbCc7CisJCQl9CisJCQkkcmVzdWx0IC49IHFxITxkaXYgY2xhc3M9ImRpZmYgZnJvbV9maWxlIj4kbGluZTwvZGl2PlxuITsKKwkJfQorCX0KKworCSRsaW5lID0gJHRvX2xpbmU7CisJI2Fzc2VydCgkbGluZSA9fiBtL15cK1wrXCsvKSBpZiBERUJVRzsKKwkjIG5vIGV4dHJhIGZvcm1hdHRpbmcgZm9yICJeKysrIC9kZXYvbnVsbCIKKwlpZiAoJGxpbmUgPX4gbSFeXCtcK1wrICI/Yi8hKSB7CisJCWlmICgkdG8tPnsnaHJlZid9KSB7CisJCQkkbGluZSA9ICcrKysgYi8nIC4KKwkJCSAgICAgICAgJGNnaS0+YSh7LWhyZWY9PiR0by0+eydocmVmJ30sIC1jbGFzcz0+InBhdGgifSwKKwkJCSAgICAgICAgICAgICAgICBlc2NfcGF0aCgkdG8tPnsnZmlsZSd9KSk7CisJCX0gZWxzZSB7CisJCQkkbGluZSA9ICcrKysgYi8nIC4KKwkJCSAgICAgICAgZXNjX3BhdGgoJHRvLT57J2ZpbGUnfSk7CisJCX0KKwl9CisJJHJlc3VsdCAuPSBxcSE8ZGl2IGNsYXNzPSJkaWZmIHRvX2ZpbGUiPiRsaW5lPC9kaXY+XG4hOworCisJcmV0dXJuICRyZXN1bHQ7Cit9CisKKyMgY3JlYXRlIG5vdGUgZm9yIHBhdGNoIHNpbXBsaWZpZWQgYnkgY29tYmluZWQgZGlmZgorc3ViIGZvcm1hdF9kaWZmX2NjX3NpbXBsaWZpZWQgeworCW15ICgkZGlmZmluZm8sIEBwYXJlbnRzKSA9IEBfOworCW15ICRyZXN1bHQgPSAnJzsKKworCSRyZXN1bHQgLj0gIjxkaXYgY2xhc3M9XCJkaWZmIGhlYWRlclwiPiIgLgorCSAgICAgICAgICAgImRpZmYgLS1jYyAiOworCWlmICghaXNfZGVsZXRlZCgkZGlmZmluZm8pKSB7CisJCSRyZXN1bHQgLj0gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZGlmZmluZm8tPnsndG9faWQnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGRpZmZpbmZvLT57J3RvX2ZpbGUnfSksCisJCSAgICAgICAgICAgICAgICAgICAgLWNsYXNzID0+ICJwYXRoIn0sCisJCSAgICAgICAgICAgICAgICAgICBlc2NfcGF0aCgkZGlmZmluZm8tPnsndG9fZmlsZSd9KSk7CisJfSBlbHNlIHsKKwkJJHJlc3VsdCAuPSBlc2NfcGF0aCgkZGlmZmluZm8tPnsndG9fZmlsZSd9KTsKKwl9CisJJHJlc3VsdCAuPSAiPC9kaXY+XG4iIC4gIyBjbGFzcz0iZGlmZiBoZWFkZXIiCisJICAgICAgICAgICAiPGRpdiBjbGFzcz1cImRpZmYgbm9kaWZmZXJlbmNlc1wiPiIgLgorCSAgICAgICAgICAgIlNpbXBsZSBtZXJnZSIgLgorCSAgICAgICAgICAgIjwvZGl2PlxuIjsgIyBjbGFzcz0iZGlmZiBub2RpZmZlcmVuY2VzIgorCisJcmV0dXJuICRyZXN1bHQ7Cit9CisKK3N1YiBkaWZmX2xpbmVfY2xhc3MgeworCW15ICgkbGluZSwgJGZyb20sICR0bykgPSBAXzsKKworCSMgb3JkaW5hcnkgZGlmZgorCW15ICRudW1fc2lnbiA9IDE7CisJIyBjb21iaW5lZCBkaWZmCisJaWYgKCRmcm9tICYmICR0byAmJiByZWYoJGZyb20tPnsnaHJlZid9KSBlcSAiQVJSQVkiKSB7CisJCSRudW1fc2lnbiA9IHNjYWxhciBAeyRmcm9tLT57J2hyZWYnfX07CisJfQorCisJbXkgQGRpZmZfbGluZV9jbGFzc2lmaWVyID0gKAorCQl7IHJlZ2V4cCA9PiBxci9eXEBcQHskbnVtX3NpZ259IC8sIGNsYXNzID0+ICJjaHVua19oZWFkZXIifSwKKwkJeyByZWdleHAgPT4gcXIvXlxcLywgICAgICAgICAgICAgICBjbGFzcyA9PiAiaW5jb21wbGV0ZSIgIH0sCisJCXsgcmVnZXhwID0+IHFyL14geyRudW1fc2lnbn0vLCAgICAgY2xhc3MgPT4gImN0eCIgfSwKKwkJIyBjbGFzc2lmaWVyIGZvciBjb250ZXh0IG11c3QgY29tZSBiZWZvcmUgY2xhc3NpZmllciBhZGQvcmVtLAorCQkjIG9yIHdlIHdvdWxkIGhhdmUgdG8gdXNlIG1vcmUgY29tcGxpY2F0ZWQgcmVnZXhwLCBmb3IgZXhhbXBsZQorCQkjIHFyLyg/PSB7MCwkbX1cKylbKyBdeyRudW1fc2lnbn0vLCB3aGVyZSAkbSA9ICRudW1fc2lnbiAtIDE7CisJCXsgcmVnZXhwID0+IHFyL15bKyBdeyRudW1fc2lnbn0vLCAgIGNsYXNzID0+ICJhZGQiIH0sCisJCXsgcmVnZXhwID0+IHFyL15bLSBdeyRudW1fc2lnbn0vLCAgIGNsYXNzID0+ICJyZW0iIH0sCisJKTsKKwlmb3IgbXkgJGNsc2Z5IChAZGlmZl9saW5lX2NsYXNzaWZpZXIpIHsKKwkJcmV0dXJuICRjbHNmeS0+eydjbGFzcyd9CisJCQlpZiAoJGxpbmUgPX4gJGNsc2Z5LT57J3JlZ2V4cCd9KTsKKwl9CisKKwkjIGZhbGxiYWNrCisJcmV0dXJuICIiOworfQorCisjIGFzc3VtZXMgdGhhdCAkZnJvbSBhbmQgJHRvIGFyZSBkZWZpbmVkIGFuZCBjb3JyZWN0bHkgZmlsbGVkLAorIyBhbmQgdGhhdCAkbGluZSBob2xkcyBhIGxpbmUgb2YgY2h1bmsgaGVhZGVyIGZvciB1bmlmaWVkIGRpZmYKK3N1YiBmb3JtYXRfdW5pZGlmZl9jaHVua19oZWFkZXIgeworCW15ICgkbGluZSwgJGZyb20sICR0bykgPSBAXzsKKworCW15ICgkZnJvbV90ZXh0LCAkZnJvbV9zdGFydCwgJGZyb21fbGluZXMsICR0b190ZXh0LCAkdG9fc3RhcnQsICR0b19saW5lcywgJHNlY3Rpb24pID0KKwkJJGxpbmUgPX4gbS9eXEB7Mn0gKC0oXGQrKSg/OiwoXGQrKSk/KSAoXCsoXGQrKSg/OiwoXGQrKSk/KSBcQHsyfSguKikkLzsKKworCSRmcm9tX2xpbmVzID0gMCB1bmxlc3MgZGVmaW5lZCAkZnJvbV9saW5lczsKKwkkdG9fbGluZXMgICA9IDAgdW5sZXNzIGRlZmluZWQgJHRvX2xpbmVzOworCisJaWYgKCRmcm9tLT57J2hyZWYnfSkgeworCQkkZnJvbV90ZXh0ID0gJGNnaS0+YSh7LWhyZWY9PiIkZnJvbS0+eydocmVmJ30jbCRmcm9tX3N0YXJ0IiwKKwkJICAgICAgICAgICAgICAgICAgICAgLWNsYXNzPT4ibGlzdCJ9LCAkZnJvbV90ZXh0KTsKKwl9CisJaWYgKCR0by0+eydocmVmJ30pIHsKKwkJJHRvX3RleHQgICA9ICRjZ2ktPmEoey1ocmVmPT4iJHRvLT57J2hyZWYnfSNsJHRvX3N0YXJ0IiwKKwkJICAgICAgICAgICAgICAgICAgICAgLWNsYXNzPT4ibGlzdCJ9LCAkdG9fdGV4dCk7CisJfQorCSRsaW5lID0gIjxzcGFuIGNsYXNzPVwiY2h1bmtfaW5mb1wiPkBAICRmcm9tX3RleHQgJHRvX3RleHQgQEA8L3NwYW4+IiAuCisJICAgICAgICAiPHNwYW4gY2xhc3M9XCJzZWN0aW9uXCI+IiAuIGVzY19odG1sKCRzZWN0aW9uLCAtbmJzcD0+MSkgLiAiPC9zcGFuPiI7CisJcmV0dXJuICRsaW5lOworfQorCisjIGFzc3VtZXMgdGhhdCAkZnJvbSBhbmQgJHRvIGFyZSBkZWZpbmVkIGFuZCBjb3JyZWN0bHkgZmlsbGVkLAorIyBhbmQgdGhhdCAkbGluZSBob2xkcyBhIGxpbmUgb2YgY2h1bmsgaGVhZGVyIGZvciBjb21iaW5lZCBkaWZmCitzdWIgZm9ybWF0X2NjX2RpZmZfY2h1bmtfaGVhZGVyIHsKKwlteSAoJGxpbmUsICRmcm9tLCAkdG8pID0gQF87CisKKwlteSAoJHByZWZpeCwgJHJhbmdlcywgJHNlY3Rpb24pID0gJGxpbmUgPX4gbS9eKFxAKykgKC4qPykgXEArKC4qKSQvOworCW15IChAZnJvbV90ZXh0LCBAZnJvbV9zdGFydCwgQGZyb21fbmxpbmVzLCAkdG9fdGV4dCwgJHRvX3N0YXJ0LCAkdG9fbmxpbmVzKTsKKworCUBmcm9tX3RleHQgPSBzcGxpdCgnICcsICRyYW5nZXMpOworCWZvciAobXkgJGkgPSAwOyAkaSA8IEBmcm9tX3RleHQ7ICsrJGkpIHsKKwkJKCRmcm9tX3N0YXJ0WyRpXSwgJGZyb21fbmxpbmVzWyRpXSkgPQorCQkJKHNwbGl0KCcsJywgc3Vic3RyKCRmcm9tX3RleHRbJGldLCAxKSksIDApOworCX0KKworCSR0b190ZXh0ICAgPSBwb3AgQGZyb21fdGV4dDsKKwkkdG9fc3RhcnQgID0gcG9wIEBmcm9tX3N0YXJ0OworCSR0b19ubGluZXMgPSBwb3AgQGZyb21fbmxpbmVzOworCisJJGxpbmUgPSAiPHNwYW4gY2xhc3M9XCJjaHVua19pbmZvXCI+JHByZWZpeCAiOworCWZvciAobXkgJGkgPSAwOyAkaSA8IEBmcm9tX3RleHQ7ICsrJGkpIHsKKwkJaWYgKCRmcm9tLT57J2hyZWYnfVskaV0pIHsKKwkJCSRsaW5lIC49ICRjZ2ktPmEoey1ocmVmPT4iJGZyb20tPnsnaHJlZid9WyRpXSNsJGZyb21fc3RhcnRbJGldIiwKKwkJCSAgICAgICAgICAgICAgICAgIC1jbGFzcz0+Imxpc3QifSwgJGZyb21fdGV4dFskaV0pOworCQl9IGVsc2UgeworCQkJJGxpbmUgLj0gJGZyb21fdGV4dFskaV07CisJCX0KKwkJJGxpbmUgLj0gIiAiOworCX0KKwlpZiAoJHRvLT57J2hyZWYnfSkgeworCQkkbGluZSAuPSAkY2dpLT5hKHstaHJlZj0+IiR0by0+eydocmVmJ30jbCR0b19zdGFydCIsCisJCSAgICAgICAgICAgICAgICAgIC1jbGFzcz0+Imxpc3QifSwgJHRvX3RleHQpOworCX0gZWxzZSB7CisJCSRsaW5lIC49ICR0b190ZXh0OworCX0KKwkkbGluZSAuPSAiICRwcmVmaXg8L3NwYW4+IiAuCisJICAgICAgICAgIjxzcGFuIGNsYXNzPVwic2VjdGlvblwiPiIgLiBlc2NfaHRtbCgkc2VjdGlvbiwgLW5ic3A9PjEpIC4gIjwvc3Bhbj4iOworCXJldHVybiAkbGluZTsKK30KKworIyBwcm9jZXNzIHBhdGNoIChkaWZmKSBsaW5lIChub3QgdG8gYmUgdXNlZCBmb3IgZGlmZiBoZWFkZXJzKSwKKyMgcmV0dXJuaW5nIEhUTUwtZm9ybWF0dGVkIChidXQgbm90IHdyYXBwZWQpIGxpbmUuCisjIElmIHRoZSBsaW5lIGlzIHBhc3NlZCBhcyBhIHJlZmVyZW5jZSwgaXQgaXMgdHJlYXRlZCBhcyBIVE1MIGFuZCBub3QKKyMgZXNjX2h0bWwoKSdlZC4KK3N1YiBmb3JtYXRfZGlmZl9saW5lIHsKKwlteSAoJGxpbmUsICRkaWZmX2NsYXNzLCAkZnJvbSwgJHRvKSA9IEBfOworCisJaWYgKHJlZigkbGluZSkpIHsKKwkJJGxpbmUgPSAkJGxpbmU7CisJfSBlbHNlIHsKKwkJY2hvbXAgJGxpbmU7CisJCSRsaW5lID0gdW50YWJpZnkoJGxpbmUpOworCisJCWlmICgkZnJvbSAmJiAkdG8gJiYgJGxpbmUgPX4gbS9eXEB7Mn0gLykgeworCQkJJGxpbmUgPSBmb3JtYXRfdW5pZGlmZl9jaHVua19oZWFkZXIoJGxpbmUsICRmcm9tLCAkdG8pOworCQl9IGVsc2lmICgkZnJvbSAmJiAkdG8gJiYgJGxpbmUgPX4gbS9eXEB7M30vKSB7CisJCQkkbGluZSA9IGZvcm1hdF9jY19kaWZmX2NodW5rX2hlYWRlcigkbGluZSwgJGZyb20sICR0byk7CisJCX0gZWxzZSB7CisJCQkkbGluZSA9IGVzY19odG1sKCRsaW5lLCAtbmJzcD0+MSk7CisJCX0KKwl9CisKKwlteSAkZGlmZl9jbGFzc2VzID0gImRpZmYiOworCSRkaWZmX2NsYXNzZXMgLj0gIiAkZGlmZl9jbGFzcyIgaWYgKCRkaWZmX2NsYXNzKTsKKwkkbGluZSA9ICI8ZGl2IGNsYXNzPVwiJGRpZmZfY2xhc3Nlc1wiPiRsaW5lPC9kaXY+XG4iOworCisJcmV0dXJuICRsaW5lOworfQorCisjIEdlbmVyYXRlcyB1bmRlZiBvciBzb21ldGhpbmcgbGlrZSAiX3NuYXBzaG90XyIgb3IgInNuYXBzaG90IChfdGJ6Ml8gX3ppcF8pIiwKKyMgbGlua2VkLiAgUGFzcyB0aGUgaGFzaCBvZiB0aGUgdHJlZS9jb21taXQgdG8gc25hcHNob3QuCitzdWIgZm9ybWF0X3NuYXBzaG90X2xpbmtzIHsKKwlteSAoJGhhc2gpID0gQF87CisJbXkgJG51bV9mbXRzID0gQHNuYXBzaG90X2ZtdHM7CisJaWYgKCRudW1fZm10cyA+IDEpIHsKKwkJIyBBIHBhcmVudGhlc2l6ZWQgbGlzdCBvZiBsaW5rcyBiZWFyaW5nIGZvcm1hdCBuYW1lcy4KKwkJIyBlLmcuICJzbmFwc2hvdCAoX3Rhci5nel8gX3ppcF8pIgorCQlyZXR1cm4gInNuYXBzaG90ICgiIC4gam9pbignICcsIG1hcAorCQkJJGNnaS0+YSh7CisJCQkJLWhyZWYgPT4gaHJlZigKKwkJCQkJYWN0aW9uPT4ic25hcHNob3QiLAorCQkJCQloYXNoPT4kaGFzaCwKKwkJCQkJc25hcHNob3RfZm9ybWF0PT4kXworCQkJCSkKKwkJCX0sICRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRffXsnZGlzcGxheSd9KQorCQksIEBzbmFwc2hvdF9mbXRzKSAuICIpIjsKKwl9IGVsc2lmICgkbnVtX2ZtdHMgPT0gMSkgeworCQkjIEEgc2luZ2xlICJzbmFwc2hvdCIgbGluayB3aG9zZSB0b29sdGlwIGJlYXJzIHRoZSBmb3JtYXQgbmFtZS4KKwkJIyBpLmUuICJfc25hcHNob3RfIgorCQlteSAoJGZtdCkgPSBAc25hcHNob3RfZm10czsKKwkJcmV0dXJuCisJCQkkY2dpLT5hKHsKKwkJCQktaHJlZiA9PiBocmVmKAorCQkJCQlhY3Rpb249PiJzbmFwc2hvdCIsCisJCQkJCWhhc2g9PiRoYXNoLAorCQkJCQlzbmFwc2hvdF9mb3JtYXQ9PiRmbXQKKwkJCQkpLAorCQkJCS10aXRsZSA9PiAiaW4gZm9ybWF0OiAka25vd25fc25hcHNob3RfZm9ybWF0c3skZm10fXsnZGlzcGxheSd9IgorCQkJfSwgInNuYXBzaG90Iik7CisJfSBlbHNlIHsgIyAkbnVtX2ZtdHMgPT0gMAorCQlyZXR1cm4gdW5kZWY7CisJfQorfQorCisjIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisjIyBmdW5jdGlvbnMgcmV0dXJuaW5nIHZhbHVlcyB0byBiZSBwYXNzZWQsIHBlcmhhcHMgYWZ0ZXIgc29tZQorIyMgdHJhbnNmb3JtYXRpb24sIHRvIG90aGVyIGZ1bmN0aW9uczsgZS5nLiByZXR1cm5pbmcgYXJndW1lbnRzIHRvIGhyZWYoKQorCisjIHJldHVybnMgaGFzaCB0byBiZSBwYXNzZWQgdG8gaHJlZiB0byBnZW5lcmF0ZSBnaXR3ZWIgVVJMCisjIGluIC10aXRsZSBrZXkgaXQgcmV0dXJucyBkZXNjcmlwdGlvbiBvZiBsaW5rCitzdWIgZ2V0X2ZlZWRfaW5mbyB7CisJbXkgJGZvcm1hdCA9IHNoaWZ0IHx8ICdBdG9tJzsKKwlteSAlcmVzID0gKGFjdGlvbiA9PiBsYygkZm9ybWF0KSk7CisJbXkgJG1hdGNoZWRfcmVmID0gMDsKKworCSMgZmVlZCBsaW5rcyBhcmUgcG9zc2libGUgb25seSBmb3IgcHJvamVjdCB2aWV3cworCXJldHVybiB1bmxlc3MgKGRlZmluZWQgJHByb2plY3QpOworCSMgc29tZSB2aWV3cyBzaG91bGQgbGluayB0byBPUE1MLCBvciB0byBnZW5lcmljIHByb2plY3QgZmVlZCwKKwkjIG9yIGRvbid0IGhhdmUgc3BlY2lmaWMgZmVlZCB5ZXQgKHNvIHRoZXkgc2hvdWxkIHVzZSBnZW5lcmljKQorCXJldHVybiBpZiAoISRhY3Rpb24gfHwgJGFjdGlvbiA9fiAvXig/OnRhZ3N8aGVhZHN8Zm9ya3N8dGFnfHNlYXJjaCkkL3gpOworCisJbXkgJGJyYW5jaCA9IHVuZGVmOworCSMgYnJhbmNoZXMgcmVmcyB1c2VzICdyZWZzLycgKyAkZ2V0X2JyYW5jaF9yZWZzKClbeF0gKyAnLycgcHJlZml4CisJIyAoZnVsbG5hbWUpIHRvIGRpZmZlcmVudGlhdGUgZnJvbSB0YWcgbGlua3M7IHRoaXMgYWxzbyBtYWtlcworCSMgcG9zc2libGUgdG8gZGV0ZWN0IGJyYW5jaCBsaW5rcworCWZvciBteSAkcmVmIChnZXRfYnJhbmNoX3JlZnMoKSkgeworCQlpZiAoKGRlZmluZWQgJGhhc2hfYmFzZSAmJiAkaGFzaF9iYXNlID1+IG0hXnJlZnMvXFEkcmVmXEUvKC4qKSQhKSB8fAorCQkgICAgKGRlZmluZWQgJGhhc2ggICAgICAmJiAkaGFzaCAgICAgID1+IG0hXnJlZnMvXFEkcmVmXEUvKC4qKSQhKSkgeworCQkJJGJyYW5jaCA9ICQxOworCQkJJG1hdGNoZWRfcmVmID0gJHJlZjsKKwkJCWxhc3Q7CisJCX0KKwl9CisJIyBmaW5kIGxvZyB0eXBlIGZvciBmZWVkIGRlc2NyaXB0aW9uICh0aXRsZSkKKwlteSAkdHlwZSA9ICdsb2cnOworCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJJHR5cGUgID0gImhpc3Rvcnkgb2YgJGZpbGVfbmFtZSI7CisJCSR0eXBlIC49ICIvIiBpZiAoJGFjdGlvbiBlcSAndHJlZScpOworCQkkdHlwZSAuPSAiIG9uICckYnJhbmNoJyIgaWYgKGRlZmluZWQgJGJyYW5jaCk7CisJfSBlbHNlIHsKKwkJJHR5cGUgPSAibG9nIG9mICRicmFuY2giIGlmIChkZWZpbmVkICRicmFuY2gpOworCX0KKworCSRyZXN7LXRpdGxlfSA9ICR0eXBlOworCSRyZXN7J2hhc2gnfSA9IChkZWZpbmVkICRicmFuY2ggPyAicmVmcy8kbWF0Y2hlZF9yZWYvJGJyYW5jaCIgOiB1bmRlZik7CisJJHJlc3snZmlsZV9uYW1lJ30gPSAkZmlsZV9uYW1lOworCisJcmV0dXJuICVyZXM7Cit9CisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMjIGdpdCB1dGlsaXR5IHN1YnJvdXRpbmVzLCBpbnZva2luZyBnaXQgY29tbWFuZHMKKworIyByZXR1cm5zIHBhdGggdG8gdGhlIGNvcmUgZ2l0IGV4ZWN1dGFibGUgYW5kIHRoZSAtLWdpdC1kaXIgcGFyYW1ldGVyIGFzIGxpc3QKK3N1YiBnaXRfY21kIHsKKwkkbnVtYmVyX29mX2dpdF9jbWRzKys7CisJcmV0dXJuICRHSVQsICctLWdpdC1kaXI9Jy4kZ2l0X2RpcjsKK30KKworIyBxdW90ZSB0aGUgZ2l2ZW4gYXJndW1lbnRzIGZvciBwYXNzaW5nIHRoZW0gdG8gdGhlIHNoZWxsCisjIHF1b3RlX2NvbW1hbmQoImNvbW1hbmQiLCAiYXJnIDEiLCAiYXJnIHdpdGggJyBhbmQgISBjaGFyYWN0ZXJzIikKKyMgPT4gIidjb21tYW5kJyAnYXJnIDEnICdhcmcgd2l0aCAnXCcnIGFuZCAnXCEnIGNoYXJhY3RlcnMnIgorIyBUcnkgdG8gYXZvaWQgdXNpbmcgdGhpcyBmdW5jdGlvbiB3aGVyZXZlciBwb3NzaWJsZS4KK3N1YiBxdW90ZV9jb21tYW5kIHsKKwlyZXR1cm4gam9pbignICcsCisJCW1hcCB7IG15ICRhID0gJF87ICRhID1+IHMvKFsnIV0pLydcXCQxJy9nOyAiJyRhJyIgfSBAXyApOworfQorCisjIGdldCBIRUFEIHJlZiBvZiBnaXZlbiBwcm9qZWN0IGFzIGhhc2gKK3N1YiBnaXRfZ2V0X2hlYWRfaGFzaCB7CisJcmV0dXJuIGdpdF9nZXRfZnVsbF9oYXNoKHNoaWZ0LCAnSEVBRCcpOworfQorCitzdWIgZ2l0X2dldF9mdWxsX2hhc2ggeworCXJldHVybiBnaXRfZ2V0X2hhc2goQF8pOworfQorCitzdWIgZ2l0X2dldF9zaG9ydF9oYXNoIHsKKwlyZXR1cm4gZ2l0X2dldF9oYXNoKEBfLCAnLS1zaG9ydD03Jyk7Cit9CisKK3N1YiBnaXRfZ2V0X2hhc2ggeworCW15ICgkcHJvamVjdCwgJGhhc2gsIEBvcHRpb25zKSA9IEBfOworCW15ICRvX2dpdF9kaXIgPSAkZ2l0X2RpcjsKKwlteSAkcmV0dmFsID0gdW5kZWY7CisJJGdpdF9kaXIgPSAiJHByb2plY3Ryb290LyRwcm9qZWN0IjsKKwlpZiAob3BlbiBteSAkZmQsICctfCcsIGdpdF9jbWQoKSwgJ3Jldi1wYXJzZScsCisJICAgICctLXZlcmlmeScsICctcScsIEBvcHRpb25zLCAkaGFzaCkgeworCQkkcmV0dmFsID0gPCRmZD47CisJCWNob21wICRyZXR2YWwgaWYgZGVmaW5lZCAkcmV0dmFsOworCQljbG9zZSAkZmQ7CisJfQorCWlmIChkZWZpbmVkICRvX2dpdF9kaXIpIHsKKwkJJGdpdF9kaXIgPSAkb19naXRfZGlyOworCX0KKwlyZXR1cm4gJHJldHZhbDsKK30KKworIyBnZXQgdHlwZSBvZiBnaXZlbiBvYmplY3QKK3N1YiBnaXRfZ2V0X3R5cGUgeworCW15ICRoYXNoID0gc2hpZnQ7CisKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiY2F0LWZpbGUiLCAnLXQnLCAkaGFzaCBvciByZXR1cm47CisJbXkgJHR5cGUgPSA8JGZkPjsKKwljbG9zZSAkZmQgb3IgcmV0dXJuOworCWNob21wICR0eXBlOworCXJldHVybiAkdHlwZTsKK30KKworIyByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24KK291ciAkY29uZmlnX2ZpbGUgPSAnJzsKK291ciAlY29uZmlnOworCisjIHN0b3JlIG11bHRpcGxlIHZhbHVlcyBmb3Igc2luZ2xlIGtleSBhcyBhbm9ueW1vdXMgYXJyYXkgcmVmZXJlbmNlCisjIHNpbmdsZSB2YWx1ZXMgc3RvcmVkIGRpcmVjdGx5IGluIHRoZSBoYXNoLCBub3QgYXMgWyA8dmFsdWU+IF0KK3N1YiBoYXNoX3NldF9tdWx0aSB7CisJbXkgKCRoYXNoLCAka2V5LCAkdmFsdWUpID0gQF87CisKKwlpZiAoIWV4aXN0cyAkaGFzaC0+eyRrZXl9KSB7CisJCSRoYXNoLT57JGtleX0gPSAkdmFsdWU7CisJfSBlbHNpZiAoIXJlZiAkaGFzaC0+eyRrZXl9KSB7CisJCSRoYXNoLT57JGtleX0gPSBbICRoYXNoLT57JGtleX0sICR2YWx1ZSBdOworCX0gZWxzZSB7CisJCXB1c2ggQHskaGFzaC0+eyRrZXl9fSwgJHZhbHVlOworCX0KK30KKworIyByZXR1cm4gaGFzaCBvZiBnaXQgcHJvamVjdCBjb25maWd1cmF0aW9uCisjIG9wdGlvbmFsbHkgbGltaXRlZCB0byBzb21lIHNlY3Rpb24sIGUuZy4gJ2dpdHdlYicKK3N1YiBnaXRfcGFyc2VfcHJvamVjdF9jb25maWcgeworCW15ICRzZWN0aW9uX3JlZ2V4cCA9IHNoaWZ0OworCW15ICVjb25maWc7CisKKwlsb2NhbCAkLyA9ICJcMCI7CisKKwlvcGVuIG15ICRmaCwgIi18IiwgZ2l0X2NtZCgpLCAiY29uZmlnIiwgJy16JywgJy1sJywKKwkJb3IgcmV0dXJuOworCisJd2hpbGUgKG15ICRrZXl2YWwgPSA8JGZoPikgeworCQljaG9tcCAka2V5dmFsOworCQlteSAoJGtleSwgJHZhbHVlKSA9IHNwbGl0KC9cbi8sICRrZXl2YWwsIDIpOworCisJCWhhc2hfc2V0X211bHRpKFwlY29uZmlnLCAka2V5LCAkdmFsdWUpCisJCQlpZiAoIWRlZmluZWQgJHNlY3Rpb25fcmVnZXhwIHx8ICRrZXkgPX4gL14oPzokc2VjdGlvbl9yZWdleHApXC4vbyk7CisJfQorCWNsb3NlICRmaDsKKworCXJldHVybiAlY29uZmlnOworfQorCisjIGNvbnZlcnQgY29uZmlnIHZhbHVlIHRvIGJvb2xlYW46ICd0cnVlJyBvciAnZmFsc2UnCisjIG5vIHZhbHVlLCBudW1iZXIgPiAwLCAndHJ1ZScgYW5kICd5ZXMnIHZhbHVlcyBhcmUgdHJ1ZQorIyByZXN0IG9mIHZhbHVlcyBhcmUgdHJlYXRlZCBhcyBmYWxzZSAobmV2ZXIgYXMgZXJyb3IpCitzdWIgY29uZmlnX3RvX2Jvb2wgeworCW15ICR2YWwgPSBzaGlmdDsKKworCXJldHVybiAxIGlmICFkZWZpbmVkICR2YWw7ICAgICAgICAgICAgICMgc2VjdGlvbi5rZXkKKworCSMgc3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZQorCSR2YWwgPX4gcy9eXHMrLy87CisJJHZhbCA9fiBzL1xzKyQvLzsKKworCXJldHVybiAoKCR2YWwgPX4gL15cZCskLyAmJiAkdmFsKSB8fCAgICMgc2VjdGlvbi5rZXkgPSAxCisJICAgICAgICAoJHZhbCA9fiAvXig/OnRydWV8eWVzKSQvaSkpOyAgIyBzZWN0aW9uLmtleSA9IHRydWUKK30KKworIyBjb252ZXJ0IGNvbmZpZyB2YWx1ZSB0byBzaW1wbGUgZGVjaW1hbCBudW1iZXIKKyMgYW4gb3B0aW9uYWwgdmFsdWUgc3VmZml4IG9mICdrJywgJ20nLCBvciAnZycgd2lsbCBjYXVzZSB0aGUgdmFsdWUKKyMgdG8gYmUgbXVsdGlwbGllZCBieSAxMDI0LCAxMDQ4NTc2LCBvciAxMDczNzQxODI0CitzdWIgY29uZmlnX3RvX2ludCB7CisJbXkgJHZhbCA9IHNoaWZ0OworCisJIyBzdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCisJJHZhbCA9fiBzL15ccysvLzsKKwkkdmFsID1+IHMvXHMrJC8vOworCisJaWYgKG15ICgkbnVtLCAkdW5pdCkgPSAoJHZhbCA9fiAvXihbMC05XSopKFtrbWddKSQvaSkpIHsKKwkJJHVuaXQgPSBsYygkdW5pdCk7CisJCSMgdW5rbm93biB1bml0IGlzIHRyZWF0ZWQgYXMgMQorCQlyZXR1cm4gJG51bSAqICgkdW5pdCBlcSAnZycgPyAxMDczNzQxODI0IDoKKwkJICAgICAgICAgICAgICAgJHVuaXQgZXEgJ20nID8gICAgMTA0ODU3NiA6CisJCSAgICAgICAgICAgICAgICR1bml0IGVxICdrJyA/ICAgICAgIDEwMjQgOiAxKTsKKwl9CisJcmV0dXJuICR2YWw7Cit9CisKKyMgY29udmVydCBjb25maWcgdmFsdWUgdG8gYXJyYXkgcmVmZXJlbmNlLCBpZiBuZWVkZWQKK3N1YiBjb25maWdfdG9fbXVsdGkgeworCW15ICR2YWwgPSBzaGlmdDsKKworCXJldHVybiByZWYoJHZhbCkgPyAkdmFsIDogKGRlZmluZWQoJHZhbCkgPyBbICR2YWwgXSA6IFtdKTsKK30KKworc3ViIGdpdF9nZXRfcHJvamVjdF9jb25maWcgeworCW15ICgka2V5LCAkdHlwZSkgPSBAXzsKKworCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkZ2l0X2RpcjsKKworCSMga2V5IHNhbml0eSBjaGVjaworCXJldHVybiB1bmxlc3MgKCRrZXkpOworCSMgb25seSBzdWJzZWN0aW9uLCBpZiBleGlzdHMsIGlzIGNhc2Ugc2Vuc2l0aXZlLAorCSMgYW5kIG5vdCBsb3dlcmNhc2VkIGJ5ICdnaXQgY29uZmlnIC16IC1sJworCWlmIChteSAoJGhpLCAkbWksICRsbykgPSAoJGtleSA9fiAvXihbXi5dKilcLiguKilcLihbXi5dKikkLykpIHsKKwkJJGxvID1+IHMvXy8vZzsKKwkJJGtleSA9IGpvaW4oIi4iLCBsYygkaGkpLCAkbWksIGxjKCRsbykpOworCQlyZXR1cm4gaWYgKCRsbyA9fiAvXFcvIHx8ICRoaSA9fiAvXFcvKTsKKwl9IGVsc2UgeworCQkka2V5ID0gbGMoJGtleSk7CisJCSRrZXkgPX4gcy9fLy9nOworCQlyZXR1cm4gaWYgKCRrZXkgPX4gL1xXLyk7CisJfQorCSRrZXkgPX4gcy9eZ2l0d2ViXC4vLzsKKworCSMgdHlwZSBzYW5pdHkgY2hlY2sKKwlpZiAoZGVmaW5lZCAkdHlwZSkgeworCQkkdHlwZSA9fiBzL14tLS8vOworCQkkdHlwZSA9IHVuZGVmCisJCQl1bmxlc3MgKCR0eXBlIGVxICdib29sJyB8fCAkdHlwZSBlcSAnaW50Jyk7CisJfQorCisJIyBnZXQgY29uZmlnCisJaWYgKCFkZWZpbmVkICRjb25maWdfZmlsZSB8fAorCSAgICAkY29uZmlnX2ZpbGUgbmUgIiRnaXRfZGlyL2NvbmZpZyIpIHsKKwkJJWNvbmZpZyA9IGdpdF9wYXJzZV9wcm9qZWN0X2NvbmZpZygnZ2l0d2ViJyk7CisJCSRjb25maWdfZmlsZSA9ICIkZ2l0X2Rpci9jb25maWciOworCX0KKworCSMgY2hlY2sgaWYgY29uZmlnIHZhcmlhYmxlIChrZXkpIGV4aXN0cworCXJldHVybiB1bmxlc3MgZXhpc3RzICRjb25maWd7ImdpdHdlYi4ka2V5In07CisKKwkjIGVuc3VyZSBnaXZlbiB0eXBlCisJaWYgKCFkZWZpbmVkICR0eXBlKSB7CisJCXJldHVybiAkY29uZmlneyJnaXR3ZWIuJGtleSJ9OworCX0gZWxzaWYgKCR0eXBlIGVxICdib29sJykgeworCQkjIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6ICdnaXQgY29uZmlnIC0tYm9vbCcgcmV0dXJucyB0cnVlL2ZhbHNlCisJCXJldHVybiBjb25maWdfdG9fYm9vbCgkY29uZmlneyJnaXR3ZWIuJGtleSJ9KSA/ICd0cnVlJyA6ICdmYWxzZSc7CisJfSBlbHNpZiAoJHR5cGUgZXEgJ2ludCcpIHsKKwkJcmV0dXJuIGNvbmZpZ190b19pbnQoJGNvbmZpZ3siZ2l0d2ViLiRrZXkifSk7CisJfQorCXJldHVybiAkY29uZmlneyJnaXR3ZWIuJGtleSJ9OworfQorCisjIGdldCBoYXNoIG9mIGdpdmVuIHBhdGggYXQgZ2l2ZW4gcmVmCitzdWIgZ2l0X2dldF9oYXNoX2J5X3BhdGggeworCW15ICRiYXNlID0gc2hpZnQ7CisJbXkgJHBhdGggPSBzaGlmdCB8fCByZXR1cm4gdW5kZWY7CisJbXkgJHR5cGUgPSBzaGlmdDsKKworCSRwYXRoID1+IHMsLyskLCw7CisKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAibHMtdHJlZSIsICRiYXNlLCAiLS0iLCAkcGF0aAorCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtbHMtdHJlZSBmYWlsZWQiKTsKKwlteSAkbGluZSA9IDwkZmQ+OworCWNsb3NlICRmZCBvciByZXR1cm4gdW5kZWY7CisKKwlpZiAoIWRlZmluZWQgJGxpbmUpIHsKKwkJIyB0aGVyZSBpcyBubyB0cmVlIG9yIGhhc2ggZ2l2ZW4gYnkgJHBhdGggYXQgJGJhc2UKKwkJcmV0dXJuIHVuZGVmOworCX0KKworCSMnMTAwNjQ0IGJsb2IgMGZhM2YzYTY2ZmI2YTEzN2Y2ZWMyYzE5MzUxZWQ0ZDgwNzA3MGZmYQlwYW5pYy5jJworCSRsaW5lID1+IG0vXihbMC05XSspICguKykgKCRvaWRfcmVnZXgpXHQvOworCWlmIChkZWZpbmVkICR0eXBlICYmICR0eXBlIG5lICQyKSB7CisJCSMgdHlwZSBkb2Vzbid0IG1hdGNoCisJCXJldHVybiB1bmRlZjsKKwl9CisJcmV0dXJuICQzOworfQorCisjIGdldCBwYXRoIG9mIGVudHJ5IHdpdGggZ2l2ZW4gaGFzaCBhdCBnaXZlbiB0cmVlLWlzaCAocmVmKQorIyB1c2VkIHRvIGdldCAnZnJvbScgZmlsZW5hbWUgZm9yIGNvbWJpbmVkIGRpZmYgKG1lcmdlIGNvbW1pdCkgZm9yIHJlbmFtZXMKK3N1YiBnaXRfZ2V0X3BhdGhfYnlfaGFzaCB7CisJbXkgJGJhc2UgPSBzaGlmdCB8fCByZXR1cm47CisJbXkgJGhhc2ggPSBzaGlmdCB8fCByZXR1cm47CisKKwlsb2NhbCAkLyA9ICJcMCI7CisKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAibHMtdHJlZSIsICctcicsICctdCcsICcteicsICRiYXNlCisJCW9yIHJldHVybiB1bmRlZjsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQljaG9tcCAkbGluZTsKKworCQkjJzA0MDAwMCB0cmVlIDU5NTU5NmE2YTkxMTdkZGJhOWZlMzc5YjZiMDEyYjU1OGJhYzg0MjMJZ2l0d2ViJworCQkjJzEwMDY0NCBibG9iIGUwMmU5MGYwNDI5YmUwZDJhNjliNzY1NzExMDFmMjBiOGY3NTUzMGYJZ2l0d2ViL1JFQURNRScKKwkJaWYgKCRsaW5lID1+IG0vKD86WzAtOV0rKSAoPzouKykgJGhhc2hcdCguKykkLykgeworCQkJY2xvc2UgJGZkOworCQkJcmV0dXJuICQxOworCQl9CisJfQorCWNsb3NlICRmZDsKKwlyZXR1cm4gdW5kZWY7Cit9CisKKyMjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyMjIGdpdCB1dGlsaXR5IGZ1bmN0aW9ucywgZGlyZWN0bHkgYWNjZXNzaW5nIGdpdCByZXBvc2l0b3J5CisKKyMgZ2V0IHRoZSB2YWx1ZSBvZiBjb25maWcgdmFyaWFibGUgZWl0aGVyIGZyb20gZmlsZSBuYW1lZCBhcyB0aGUgdmFyaWFibGUKKyMgaXRzZWxmIGluIHRoZSByZXBvc2l0b3J5ICgkR0lUX0RJUi8kbmFtZSBmaWxlKSwgb3IgZnJvbSBnaXR3ZWIuJG5hbWUKKyMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpbiB0aGUgcmVwb3NpdG9yeSBjb25maWcgZmlsZS4KK3N1YiBnaXRfZ2V0X2ZpbGVfb3JfcHJvamVjdF9jb25maWcgeworCW15ICgkcGF0aCwgJG5hbWUpID0gQF87CisKKwkkZ2l0X2RpciA9ICIkcHJvamVjdHJvb3QvJHBhdGgiOworCW9wZW4gbXkgJGZkLCAnPCcsICIkZ2l0X2Rpci8kbmFtZSIKKwkJb3IgcmV0dXJuIGdpdF9nZXRfcHJvamVjdF9jb25maWcoJG5hbWUpOworCW15ICRjb25mID0gPCRmZD47CisJY2xvc2UgJGZkOworCWlmIChkZWZpbmVkICRjb25mKSB7CisJCWNob21wICRjb25mOworCX0KKwlyZXR1cm4gJGNvbmY7Cit9CisKK3N1YiBnaXRfZ2V0X3Byb2plY3RfZGVzY3JpcHRpb24geworCW15ICRwYXRoID0gc2hpZnQ7CisJcmV0dXJuIGdpdF9nZXRfZmlsZV9vcl9wcm9qZWN0X2NvbmZpZygkcGF0aCwgJ2Rlc2NyaXB0aW9uJyk7Cit9CisKK3N1YiBnaXRfZ2V0X3Byb2plY3RfY2F0ZWdvcnkgeworCW15ICRwYXRoID0gc2hpZnQ7CisJcmV0dXJuIGdpdF9nZXRfZmlsZV9vcl9wcm9qZWN0X2NvbmZpZygkcGF0aCwgJ2NhdGVnb3J5Jyk7Cit9CisKKworIyBzdXBwb3J0ZWQgZm9ybWF0czoKKyMgKiAkR0lUX0RJUi9jdGFncy88dGFnbmFtZT4gZmlsZSAoaW4gJ2N0YWdzJyBzdWJkaXJlY3RvcnkpCisjICAgLSBpZiBpdHMgY29udGVudHMgaXMgYSBudW1iZXIsIHVzZSBpdCBhcyB0YWcgd2VpZ2h0LAorIyAgIC0gb3RoZXJ3aXNlIGFkZCBhIHRhZyB3aXRoIHdlaWdodCAxCisjICogJEdJVF9ESVIvY3RhZ3MgZmlsZSwgZWFjaCBsaW5lIGlzIGEgdGFnICh3aXRoIHdlaWdodCAxKQorIyAgIHRoZSBzYW1lIHZhbHVlIG11bHRpcGxlIHRpbWVzIGluY3JlYXNlcyB0YWcgd2VpZ2h0CisjICogYGdpdHdlYi5jdGFnJyBtdWx0aS12YWx1ZWQgcmVwbyBjb25maWcgdmFyaWFibGUKK3N1YiBnaXRfZ2V0X3Byb2plY3RfY3RhZ3MgeworCW15ICRwcm9qZWN0ID0gc2hpZnQ7CisJbXkgJGN0YWdzID0ge307CisKKwkkZ2l0X2RpciA9ICIkcHJvamVjdHJvb3QvJHByb2plY3QiOworCWlmIChvcGVuZGlyIG15ICRkaCwgIiRnaXRfZGlyL2N0YWdzIikgeworCQlteSBAZmlsZXMgPSBncmVwIHsgLWYgJF8gfSBtYXAgeyAiJGdpdF9kaXIvY3RhZ3MvJF8iIH0gcmVhZGRpcigkZGgpOworCQlmb3JlYWNoIG15ICR0YWdmaWxlIChAZmlsZXMpIHsKKwkJCW9wZW4gbXkgJGN0LCAnPCcsICR0YWdmaWxlCisJCQkJb3IgbmV4dDsKKwkJCW15ICR2YWwgPSA8JGN0PjsKKwkJCWNob21wICR2YWwgaWYgJHZhbDsKKwkJCWNsb3NlICRjdDsKKworCQkJKG15ICRjdGFnID0gJHRhZ2ZpbGUpID1+IHMjLiovIyM7CisJCQlpZiAoJHZhbCA9fiAvXlxkKyQvKSB7CisJCQkJJGN0YWdzLT57JGN0YWd9ID0gJHZhbDsKKwkJCX0gZWxzZSB7CisJCQkJJGN0YWdzLT57JGN0YWd9ID0gMTsKKwkJCX0KKwkJfQorCQljbG9zZWRpciAkZGg7CisKKwl9IGVsc2lmIChvcGVuIG15ICRmaCwgJzwnLCAiJGdpdF9kaXIvY3RhZ3MiKSB7CisJCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisJCQljaG9tcCAkbGluZTsKKwkJCSRjdGFncy0+eyRsaW5lfSsrIGlmICRsaW5lOworCQl9CisJCWNsb3NlICRmaDsKKworCX0gZWxzZSB7CisJCW15ICR0YWdsaXN0ID0gY29uZmlnX3RvX211bHRpKGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ2N0YWcnKSk7CisJCWZvcmVhY2ggbXkgJHRhZyAoQCR0YWdsaXN0KSB7CisJCQkkY3RhZ3MtPnskdGFnfSsrOworCQl9CisJfQorCisJcmV0dXJuICRjdGFnczsKK30KKworIyByZXR1cm4gaGFzaCwgd2hlcmUga2V5cyBhcmUgY29udGVudCB0YWdzICgnY3RhZ3MnKSwKKyMgYW5kIHZhbHVlcyBhcmUgc3VtIG9mIHdlaWdodHMgb2YgZ2l2ZW4gdGFnIGluIGV2ZXJ5IHByb2plY3QKK3N1YiBnaXRfZ2F0aGVyX2FsbF9jdGFncyB7CisJbXkgJHByb2plY3RzID0gc2hpZnQ7CisJbXkgJGN0YWdzID0ge307CisKKwlmb3JlYWNoIG15ICRwIChAJHByb2plY3RzKSB7CisJCWZvcmVhY2ggbXkgJGN0IChrZXlzICV7JHAtPnsnY3RhZ3MnfX0pIHsKKwkJCSRjdGFncy0+eyRjdH0gKz0gJHAtPnsnY3RhZ3MnfS0+eyRjdH07CisJCX0KKwl9CisKKwlyZXR1cm4gJGN0YWdzOworfQorCitzdWIgZ2l0X3BvcHVsYXRlX3Byb2plY3RfdGFnY2xvdWQgeworCW15ICRjdGFncyA9IHNoaWZ0OworCisJIyBGaXJzdCwgbWVyZ2UgZGlmZmVyZW50LWNhc2VkIHRhZ3M7IHRhZ3Mgdm90ZSBvbiBjYXNpbmcKKwlteSAlY3RhZ3NfbGM7CisJZm9yZWFjaCAoa2V5cyAlJGN0YWdzKSB7CisJCSRjdGFnc19sY3tsYyAkX30tPntjb3VudH0gKz0gJGN0YWdzLT57JF99OworCQlpZiAobm90ICRjdGFnc19sY3tsYyAkX30tPnt0b3Bjb3VudH0KKwkJICAgIG9yICRjdGFnc19sY3tsYyAkX30tPnt0b3Bjb3VudH0gPCAkY3RhZ3MtPnskX30pIHsKKwkJCSRjdGFnc19sY3tsYyAkX30tPnt0b3Bjb3VudH0gPSAkY3RhZ3MtPnskX307CisJCQkkY3RhZ3NfbGN7bGMgJF99LT57dG9wbmFtZX0gPSAkXzsKKwkJfQorCX0KKworCW15ICRjbG91ZDsKKwlteSAkbWF0Y2hlZCA9ICRpbnB1dF9wYXJhbXN7J2N0YWcnfTsKKwlpZiAoZXZhbCB7IHJlcXVpcmUgSFRNTDo6VGFnQ2xvdWQ7IDE7IH0pIHsKKwkJJGNsb3VkID0gSFRNTDo6VGFnQ2xvdWQtPm5ldzsKKwkJZm9yZWFjaCBteSAkY3RhZyAoc29ydCBrZXlzICVjdGFnc19sYykgeworCQkJIyBQYWQgdGhlIHRpdGxlIHdpdGggc3BhY2VzIHNvIHRoYXQgdGhlIGNsb3VkIGxvb2tzCisJCQkjIGxlc3MgY3JhbW1lZC4KKwkJCW15ICR0aXRsZSA9IGVzY19odG1sKCRjdGFnc19sY3skY3RhZ30tPnt0b3BuYW1lfSk7CisJCQkkdGl0bGUgPX4gcy8gLyZuYnNwOy9nOworCQkJJHRpdGxlID1+IHMvXi8mbmJzcDsvZzsKKwkJCSR0aXRsZSA9fiBzLyQvJm5ic3A7L2c7CisJCQlpZiAoZGVmaW5lZCAkbWF0Y2hlZCAmJiAkbWF0Y2hlZCBlcSAkY3RhZykgeworCQkJCSR0aXRsZSA9IHFxKDxzcGFuIGNsYXNzPSJtYXRjaCI+JHRpdGxlPC9zcGFuPik7CisJCQl9CisJCQkkY2xvdWQtPmFkZCgkdGl0bGUsIGhyZWYocHJvamVjdD0+dW5kZWYsIGN0YWc9PiRjdGFnKSwKKwkJCSAgICAgICAgICAgICRjdGFnc19sY3skY3RhZ30tPntjb3VudH0pOworCQl9CisJfSBlbHNlIHsKKwkJJGNsb3VkID0ge307CisJCWZvcmVhY2ggbXkgJGN0YWcgKGtleXMgJWN0YWdzX2xjKSB7CisJCQlteSAkdGl0bGUgPSBlc2NfaHRtbCgkY3RhZ3NfbGN7JGN0YWd9LT57dG9wbmFtZX0sIC1uYnNwPT4xKTsKKwkJCWlmIChkZWZpbmVkICRtYXRjaGVkICYmICRtYXRjaGVkIGVxICRjdGFnKSB7CisJCQkJJHRpdGxlID0gcXEoPHNwYW4gY2xhc3M9Im1hdGNoIj4kdGl0bGU8L3NwYW4+KTsKKwkJCX0KKwkJCSRjbG91ZC0+eyRjdGFnfXtjb3VudH0gPSAkY3RhZ3NfbGN7JGN0YWd9LT57Y291bnR9OworCQkJJGNsb3VkLT57JGN0YWd9e2N0YWd9ID0KKwkJCQkkY2dpLT5hKHstaHJlZj0+aHJlZihwcm9qZWN0PT51bmRlZiwgY3RhZz0+JGN0YWcpfSwgJHRpdGxlKTsKKwkJfQorCX0KKwlyZXR1cm4gJGNsb3VkOworfQorCitzdWIgZ2l0X3Nob3dfcHJvamVjdF90YWdjbG91ZCB7CisJbXkgKCRjbG91ZCwgJGNvdW50KSA9IEBfOworCWlmIChyZWYgJGNsb3VkIGVxICdIVE1MOjpUYWdDbG91ZCcpIHsKKwkJcmV0dXJuICRjbG91ZC0+aHRtbF9hbmRfY3NzKCRjb3VudCk7CisJfSBlbHNlIHsKKwkJbXkgQHRhZ3MgPSBzb3J0IHsgJGNsb3VkLT57JGF9LT57J2NvdW50J30gPD0+ICRjbG91ZC0+eyRifS0+eydjb3VudCd9IH0ga2V5cyAlJGNsb3VkOworCQlyZXR1cm4KKwkJCSc8ZGl2IGlkPSJodG1sdGFnY2xvdWQiJy4oJHByb2plY3QgPyAnJyA6ICcgYWxpZ249ImNlbnRlciInKS4nPicgLgorCQkJam9pbiAoJywgJywgbWFwIHsKKwkJCQkkY2xvdWQtPnskX30tPnsnY3RhZyd9CisJCQl9IHNwbGljZShAdGFncywgMCwgJGNvdW50KSkgLgorCQkJJzwvZGl2Pic7CisJfQorfQorCitzdWIgZ2l0X2dldF9wcm9qZWN0X3VybF9saXN0IHsKKwlteSAkcGF0aCA9IHNoaWZ0OworCisJJGdpdF9kaXIgPSAiJHByb2plY3Ryb290LyRwYXRoIjsKKwlvcGVuIG15ICRmZCwgJzwnLCAiJGdpdF9kaXIvY2xvbmV1cmwiCisJCW9yIHJldHVybiB3YW50YXJyYXkgPworCQlAeyBjb25maWdfdG9fbXVsdGkoZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygndXJsJykpIH0gOgorCQkgICBjb25maWdfdG9fbXVsdGkoZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygndXJsJykpOworCW15IEBnaXRfcHJvamVjdF91cmxfbGlzdCA9IG1hcCB7IGNob21wOyAkXyB9IDwkZmQ+OworCWNsb3NlICRmZDsKKworCXJldHVybiB3YW50YXJyYXkgPyBAZ2l0X3Byb2plY3RfdXJsX2xpc3QgOiBcQGdpdF9wcm9qZWN0X3VybF9saXN0OworfQorCitzdWIgZ2l0X2dldF9wcm9qZWN0c19saXN0IHsKKwlteSAkZmlsdGVyID0gc2hpZnQgfHwgJyc7CisJbXkgJHBhcmFub2lkID0gc2hpZnQ7CisJbXkgQGxpc3Q7CisKKwlpZiAoLWQgJHByb2plY3RzX2xpc3QpIHsKKwkJIyBzZWFyY2ggaW4gZGlyZWN0b3J5CisJCW15ICRkaXIgPSAkcHJvamVjdHNfbGlzdDsKKwkJIyByZW1vdmUgdGhlIHRyYWlsaW5nICIvIgorCQkkZGlyID1+IHMhLyskISE7CisJCW15ICRwZnhsZW4gPSBsZW5ndGgoIiRkaXIiKTsKKwkJbXkgJHBmeGRlcHRoID0gKCRkaXIgPX4gdHIhLyEhKTsKKwkJIyB3aGVuIGZpbHRlcmluZywgc2VhcmNoIG9ubHkgZ2l2ZW4gc3ViZGlyZWN0b3J5CisJCWlmICgkZmlsdGVyICYmICEkcGFyYW5vaWQpIHsKKwkJCSRkaXIgLj0gIi8kZmlsdGVyIjsKKwkJCSRkaXIgPX4gcyEvKyQhITsKKwkJfQorCisJCUZpbGU6OkZpbmQ6OmZpbmQoeworCQkJZm9sbG93X2Zhc3QgPT4gMSwgIyBmb2xsb3cgc3ltYm9saWMgbGlua3MKKwkJCWZvbGxvd19za2lwID0+IDIsICMgaWdub3JlIGR1cGxpY2F0ZXMKKwkJCWRhbmdsaW5nX3N5bWxpbmtzID0+IDAsICMgaWdub3JlIGRhbmdsaW5nIHN5bWxpbmtzLCBzaWxlbnRseQorCQkJd2FudGVkID0+IHN1YiB7CisJCQkJIyBnbG9iYWwgdmFyaWFibGVzCisJCQkJb3VyICRwcm9qZWN0X21heGRlcHRoOworCQkJCW91ciAkcHJvamVjdHJvb3Q7CisJCQkJIyBza2lwIHByb2plY3QtbGlzdCB0b3BsZXZlbCwgaWYgd2UgZ2V0IGl0LgorCQkJCXJldHVybiBpZiAobSFeWy8uXSQhKTsKKwkJCQkjIG9ubHkgZGlyZWN0b3JpZXMgY2FuIGJlIGdpdCByZXBvc2l0b3JpZXMKKwkJCQlyZXR1cm4gdW5sZXNzICgtZCAkXyk7CisJCQkJIyBuZWVkIHNlYXJjaCBwZXJtaXNzaW9uCisJCQkJcmV0dXJuIHVubGVzcyAoLXggJF8pOworCQkJCSMgZG9uJ3QgdHJhdmVyc2UgdG9vIGRlZXAgKEZpbmQgaXMgc3VwZXIgc2xvdyBvbiBvcyB4KQorCQkJCSMgJHByb2plY3RfbWF4ZGVwdGggZXhjbHVkZXMgZGVwdGggb2YgJHByb2plY3Ryb290CisJCQkJaWYgKCgkRmlsZTo6RmluZDo6bmFtZSA9fiB0ciEvISEpIC0gJHBmeGRlcHRoID4gJHByb2plY3RfbWF4ZGVwdGgpIHsKKwkJCQkJJEZpbGU6OkZpbmQ6OnBydW5lID0gMTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKworCQkJCW15ICRwYXRoID0gc3Vic3RyKCRGaWxlOjpGaW5kOjpuYW1lLCAkcGZ4bGVuICsgMSk7CisJCQkJIyBwYXJhbm9pZGx5IG9ubHkgZmlsdGVyIGhlcmUKKwkJCQlpZiAoJHBhcmFub2lkICYmICRmaWx0ZXIgJiYgJHBhdGggIX4gbSFeXFEkZmlsdGVyXEUvISkgeworCQkJCQluZXh0OworCQkJCX0KKwkJCQkjIHdlIGNoZWNrIHJlbGF0ZWQgZmlsZSBpbiAkcHJvamVjdHJvb3QKKwkJCQlpZiAoY2hlY2tfZXhwb3J0X29rKCIkcHJvamVjdHJvb3QvJHBhdGgiKSkgeworCQkJCQlwdXNoIEBsaXN0LCB7IHBhdGggPT4gJHBhdGggfTsKKwkJCQkJJEZpbGU6OkZpbmQ6OnBydW5lID0gMTsKKwkJCQl9CisJCQl9LAorCQl9LCAiJGRpciIpOworCisJfSBlbHNpZiAoLWYgJHByb2plY3RzX2xpc3QpIHsKKwkJIyByZWFkIGZyb20gZmlsZSh1cmwtZW5jb2RlZCk6CisJCSMgJ2dpdCUyRmdpdC5naXQgTGludXMrVG9ydmFsZHMnCisJCSMgJ2xpYnMlMkZrbGliYyUyRmtsaWJjLmdpdCBILitQZXRlcitBbnZpbicKKwkJIyAnbGludXglMkZob3RwbHVnJTJGdWRldi5naXQgR3JlZytLcm9haC1IYXJ0bWFuJworCQlvcGVuIG15ICRmZCwgJzwnLCAkcHJvamVjdHNfbGlzdCBvciByZXR1cm47CisJUFJPSkVDVDoKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJCWNob21wICRsaW5lOworCQkJbXkgKCRwYXRoLCAkb3duZXIpID0gc3BsaXQgJyAnLCAkbGluZTsKKwkJCSRwYXRoID0gdW5lc2NhcGUoJHBhdGgpOworCQkJJG93bmVyID0gdW5lc2NhcGUoJG93bmVyKTsKKwkJCWlmICghZGVmaW5lZCAkcGF0aCkgeworCQkJCW5leHQ7CisJCQl9CisJCQkjIGlmICRmaWx0ZXIgaXMgcnBvdmlkZWQsIGNoZWNrIGlmICRwYXRoIGJlZ2lucyB3aXRoICRmaWx0ZXIKKwkJCWlmICgkZmlsdGVyICYmICRwYXRoICF+IG0hXlxRJGZpbHRlclxFLyEpIHsKKwkJCQluZXh0OworCQkJfQorCQkJaWYgKGNoZWNrX2V4cG9ydF9vaygiJHByb2plY3Ryb290LyRwYXRoIikpIHsKKwkJCQlteSAkcHIgPSB7CisJCQkJCXBhdGggPT4gJHBhdGgKKwkJCQl9OworCQkJCWlmICgkb3duZXIpIHsKKwkJCQkJJHByLT57J293bmVyJ30gPSB0b191dGY4KCRvd25lcik7CisJCQkJfQorCQkJCXB1c2ggQGxpc3QsICRwcjsKKwkJCX0KKwkJfQorCQljbG9zZSAkZmQ7CisJfQorCXJldHVybiBAbGlzdDsKK30KKworIyB3cml0dGVuIHdpdGggaGVscCBvZiBUcmVlOjpUcmllIG1vZHVsZSAoUGVybCBBcnRpc3RpYyBMaWNlbnNlLCBHUEwgY29tcGF0aWJsZSkKKyMgYXMgc2lkZSBlZmZlY3RzIGl0IHNldHMgJ2ZvcmtzJyBmaWVsZCB0byBsaXN0IG9mIGZvcmtzIGZvciBmb3JrZWQgcHJvamVjdHMKK3N1YiBmaWx0ZXJfZm9ya3NfZnJvbV9wcm9qZWN0c19saXN0IHsKKwlteSAkcHJvamVjdHMgPSBzaGlmdDsKKworCW15ICV0cmllOyAjIHByZWZpeCB0cmVlIG9mIGRpcmVjdG9yaWVzIChwYXRoIGNvbXBvbmVudHMpCisJIyBnZW5lcmF0ZSB0cmllIG91dCBvZiB0aG9zZSBkaXJlY3RvcmllcyB0aGF0IG1pZ2h0IGNvbnRhaW4gZm9ya3MKKwlmb3JlYWNoIG15ICRwciAoQCRwcm9qZWN0cykgeworCQlteSAkcGF0aCA9ICRwci0+eydwYXRoJ307CisJCSRwYXRoID1+IHMvXC5naXQkLy87ICAgICAgIyBmb3JrcyBvZiAncmVwby5naXQnIGFyZSBpbiAncmVwby8nIGRpcmVjdG9yeQorCQluZXh0IGlmICgkcGF0aCA9fiBtIS8kISk7ICMgc2tpcCBub24tYmFyZSByZXBvc2l0b3JpZXMsIGUuZy4gJ3JlcG8vLmdpdCcKKwkJbmV4dCB1bmxlc3MgKCRwYXRoKTsgICAgICAjIHNraXAgJy5naXQnIHJlcG9zaXRvcnk6IHRlc3RzLCBnaXQtaW5zdGF3ZWIKKwkJbmV4dCB1bmxlc3MgKC1kICIkcHJvamVjdHJvb3QvJHBhdGgiKTsgIyBjb250YWluaW5nIGRpcmVjdG9yeSBleGlzdHMKKwkJJHByLT57J2ZvcmtzJ30gPSBbXTsgICAgICAjIHRoZXJlIGNhbiBiZSAwIG9yIG1vcmUgZm9ya3Mgb2YgcHJvamVjdAorCisJCSMgYWRkIHRvIHRyaWUKKwkJbXkgQGRpcnMgPSBzcGxpdCgnLycsICRwYXRoKTsKKwkJIyB3YWxrIHRoZSB0cmllLCB1bnRpbCBlaXRoZXIgcnVucyBvdXQgb2YgY29tcG9uZW50cyBvciBvdXQgb2YgdHJpZQorCQlteSAkcmVmID0gXCV0cmllOworCQl3aGlsZSAoc2NhbGFyIEBkaXJzICYmCisJCSAgICAgICBleGlzdHMoJHJlZi0+eyRkaXJzWzBdfSkpIHsKKwkJCSRyZWYgPSAkcmVmLT57c2hpZnQgQGRpcnN9OworCQl9CisJCSMgY3JlYXRlIHJlc3Qgb2YgdHJpZSBzdHJ1Y3R1cmUgZnJvbSByZXN0IG9mIGNvbXBvbmVudHMKKwkJZm9yZWFjaCBteSAkZGlyIChAZGlycykgeworCQkJJHJlZiA9ICRyZWYtPnskZGlyfSA9IHt9OworCQl9CisJCSMgY3JlYXRlIGVuZCBtYXJrZXIsIHN0b3JlICRwciBhcyBhIGRhdGEKKwkJJHJlZi0+eycnfSA9ICRwciBpZiAoIWV4aXN0cyAkcmVmLT57Jyd9KTsKKwl9CisKKwkjIGZpbHRlciBvdXQgZm9ya3MsIGJ5IGZpbmRpbmcgc2hvcnRlc3QgcHJlZml4IG1hdGNoIGZvciBwYXRocworCW15IEBmaWx0ZXJlZDsKKyBQUk9KRUNUOgorCWZvcmVhY2ggbXkgJHByIChAJHByb2plY3RzKSB7CisJCSMgdHJpZSBsb29rdXAKKwkJbXkgJHJlZiA9IFwldHJpZTsKKwlESVI6CisJCWZvcmVhY2ggbXkgJGRpciAoc3BsaXQoJy8nLCAkcHItPnsncGF0aCd9KSkgeworCQkJaWYgKGV4aXN0cyAkcmVmLT57Jyd9KSB7CisJCQkJIyBmb3VuZCBbc2hvcnRlc3RdIHByZWZpeCwgaXMgYSBmb3JrIC0gc2tpcCBpdAorCQkJCXB1c2ggQHskcmVmLT57Jyd9eydmb3Jrcyd9fSwgJHByOworCQkJCW5leHQgUFJPSkVDVDsKKwkJCX0KKwkJCWlmICghZXhpc3RzICRyZWYtPnskZGlyfSkgeworCQkJCSMgbm90IGluIHRyaWUsIGNhbm5vdCBoYXZlIHByZWZpeCwgbm90IGEgZm9yaworCQkJCXB1c2ggQGZpbHRlcmVkLCAkcHI7CisJCQkJbmV4dCBQUk9KRUNUOworCQkJfQorCQkJIyBJZiB0aGUgZGlyIGlzIHRoZXJlLCB3ZSBqdXN0IHdhbGsgb25lIHN0ZXAgZG93biB0aGUgdHJpZS4KKwkJCSRyZWYgPSAkcmVmLT57JGRpcn07CisJCX0KKwkJIyB3ZSByYW4gb3V0IG9mIHRyaWUKKwkJIyAoc2hvdWxkbid0IGhhcHBlbjogaXQncyBlaXRoZXIgbm8gbWF0Y2gsIG9yIGVuZCBtYXJrZXIpCisJCXB1c2ggQGZpbHRlcmVkLCAkcHI7CisJfQorCisJcmV0dXJuIEBmaWx0ZXJlZDsKK30KKworIyBub3RlOiBmaWxsX3Byb2plY3RfbGlzdF9pbmZvIG11c3QgYmUgcnVuIGZpcnN0LAorIyBmb3IgJ2Rlc2NyX2xvbmcnIGFuZCAnY3RhZ3MnIHRvIGJlIGZpbGxlZAorc3ViIHNlYXJjaF9wcm9qZWN0c19saXN0IHsKKwlteSAoJHByb2psaXN0LCAlb3B0cykgPSBAXzsKKwlteSAkdGFnZmlsdGVyICA9ICRvcHRzeyd0YWdmaWx0ZXInfTsKKwlteSAkc2VhcmNoX3JlID0gJG9wdHN7J3NlYXJjaF9yZWdleHAnfTsKKworCXJldHVybiBAJHByb2psaXN0CisJCXVubGVzcyAoJHRhZ2ZpbHRlciB8fCAkc2VhcmNoX3JlKTsKKworCSMgc2VhcmNoaW5nIHByb2plY3RzIHJlcXVpcmUgZmlsbGluZyB0byBiZSBydW4gYmVmb3JlIGl0OworCWZpbGxfcHJvamVjdF9saXN0X2luZm8oJHByb2psaXN0LAorCSAgICAgICAgICAgICAgICAgICAgICAgJHRhZ2ZpbHRlciAgPyAnY3RhZ3MnIDogKCksCisJICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNoX3JlID8gKCdwYXRoJywgJ2Rlc2NyJykgOiAoKSk7CisJbXkgQHByb2plY3RzOworIFBST0pFQ1Q6CisJZm9yZWFjaCBteSAkcHIgKEAkcHJvamxpc3QpIHsKKworCQlpZiAoJHRhZ2ZpbHRlcikgeworCQkJbmV4dCB1bmxlc3MgcmVmKCRwci0+eydjdGFncyd9KSBlcSAnSEFTSCc7CisJCQluZXh0IHVubGVzcworCQkJCWdyZXAgeyBsYygkXykgZXEgbGMoJHRhZ2ZpbHRlcikgfSBrZXlzICV7JHByLT57J2N0YWdzJ319OworCQl9CisKKwkJaWYgKCRzZWFyY2hfcmUpIHsKKwkJCW5leHQgdW5sZXNzCisJCQkJJHByLT57J3BhdGgnfSA9fiAvJHNlYXJjaF9yZS8gfHwKKwkJCQkkcHItPnsnZGVzY3JfbG9uZyd9ID1+IC8kc2VhcmNoX3JlLzsKKwkJfQorCisJCXB1c2ggQHByb2plY3RzLCAkcHI7CisJfQorCisJcmV0dXJuIEBwcm9qZWN0czsKK30KKworb3VyICRnaXR3ZWJfcHJvamVjdF9vd25lciA9IHVuZGVmOworc3ViIGdpdF9nZXRfcHJvamVjdF9saXN0X2Zyb21fZmlsZSB7CisKKwlyZXR1cm4gaWYgKGRlZmluZWQgJGdpdHdlYl9wcm9qZWN0X293bmVyKTsKKworCSRnaXR3ZWJfcHJvamVjdF9vd25lciA9IHt9OworCSMgcmVhZCBmcm9tIGZpbGUgKHVybC1lbmNvZGVkKToKKwkjICdnaXQlMkZnaXQuZ2l0IExpbnVzK1RvcnZhbGRzJworCSMgJ2xpYnMlMkZrbGliYyUyRmtsaWJjLmdpdCBILitQZXRlcitBbnZpbicKKwkjICdsaW51eCUyRmhvdHBsdWclMkZ1ZGV2LmdpdCBHcmVnK0tyb2FoLUhhcnRtYW4nCisJaWYgKC1mICRwcm9qZWN0c19saXN0KSB7CisJCW9wZW4obXkgJGZkLCAnPCcsICRwcm9qZWN0c19saXN0KTsKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJCWNob21wICRsaW5lOworCQkJbXkgKCRwciwgJG93KSA9IHNwbGl0ICcgJywgJGxpbmU7CisJCQkkcHIgPSB1bmVzY2FwZSgkcHIpOworCQkJJG93ID0gdW5lc2NhcGUoJG93KTsKKwkJCSRnaXR3ZWJfcHJvamVjdF9vd25lci0+eyRwcn0gPSB0b191dGY4KCRvdyk7CisJCX0KKwkJY2xvc2UgJGZkOworCX0KK30KKworc3ViIGdpdF9nZXRfcHJvamVjdF9vd25lciB7CisJbXkgJHByb2plY3QgPSBzaGlmdDsKKwlteSAkb3duZXI7CisKKwlyZXR1cm4gdW5kZWYgdW5sZXNzICRwcm9qZWN0OworCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcHJvamVjdCI7CisKKwlpZiAoIWRlZmluZWQgJGdpdHdlYl9wcm9qZWN0X293bmVyKSB7CisJCWdpdF9nZXRfcHJvamVjdF9saXN0X2Zyb21fZmlsZSgpOworCX0KKworCWlmIChleGlzdHMgJGdpdHdlYl9wcm9qZWN0X293bmVyLT57JHByb2plY3R9KSB7CisJCSRvd25lciA9ICRnaXR3ZWJfcHJvamVjdF9vd25lci0+eyRwcm9qZWN0fTsKKwl9CisJaWYgKCFkZWZpbmVkICRvd25lcil7CisJCSRvd25lciA9IGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ293bmVyJyk7CisJfQorCWlmICghZGVmaW5lZCAkb3duZXIpIHsKKwkJJG93bmVyID0gZ2V0X2ZpbGVfb3duZXIoIiRnaXRfZGlyIik7CisJfQorCisJcmV0dXJuICRvd25lcjsKK30KKworc3ViIGdpdF9nZXRfbGFzdF9hY3Rpdml0eSB7CisJbXkgKCRwYXRoKSA9IEBfOworCW15ICRmZDsKKworCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcGF0aCI7CisJb3BlbigkZmQsICItfCIsIGdpdF9jbWQoKSwgJ2Zvci1lYWNoLXJlZicsCisJICAgICAnLS1mb3JtYXQ9JShjb21taXR0ZXIpJywKKwkgICAgICctLXNvcnQ9LWNvbW1pdHRlcmRhdGUnLAorCSAgICAgJy0tY291bnQ9MScsCisJICAgICBtYXAgeyAicmVmcy8kXyIgfSBnZXRfYnJhbmNoX3JlZnMgKCkpIG9yIHJldHVybjsKKwlteSAkbW9zdF9yZWNlbnQgPSA8JGZkPjsKKwljbG9zZSAkZmQgb3IgcmV0dXJuOworCWlmIChkZWZpbmVkICRtb3N0X3JlY2VudCAmJgorCSAgICAkbW9zdF9yZWNlbnQgPX4gLyAoXGQrKSBbLStdWzAxXVxkXGRcZCQvKSB7CisJCW15ICR0aW1lc3RhbXAgPSAkMTsKKwkJbXkgJGFnZSA9IHRpbWUgLSAkdGltZXN0YW1wOworCQlyZXR1cm4gKCRhZ2UsIGFnZV9zdHJpbmcoJGFnZSkpOworCX0KKwlyZXR1cm4gKHVuZGVmLCB1bmRlZik7Cit9CisKKyMgSW1wbGVtZW50YXRpb24gbm90ZTogd2hlbiBhIHNpbmdsZSByZW1vdGUgaXMgd2FudGVkLCB3ZSBjYW5ub3QgdXNlICdnaXQKKyMgcmVtb3RlIHNob3cgLW4nIGJlY2F1c2UgdGhhdCBjb21tYW5kIGFsd2F5cyB3b3JrIChhc3N1bWluZyBpdCdzIGEgcmVtb3RlIFVSTAorIyBpZiBpdCdzIG5vdCBkZWZpbmVkKSwgYW5kIHdlIGNhbm5vdCB1c2UgJ2dpdCByZW1vdGUgc2hvdycgYmVjYXVzZSB0aGF0IHdvdWxkCisjIHRyeSB0byBtYWtlIGEgbmV0d29yayByb3VuZHRyaXAuIFNvIHRoZSBvbmx5IHdheSB0byBmaW5kIGlmIHRoYXQgcGFydGljdWxhcgorIyByZW1vdGUgaXMgZGVmaW5lZCBpcyB0byB3YWxrIHRoZSBsaXN0IHByb3ZpZGVkIGJ5ICdnaXQgcmVtb3RlIC12JyBhbmQgc3RvcCBpZgorIyBhbmQgd2hlbiB3ZSBmaW5kIHdoYXQgd2Ugd2FudC4KK3N1YiBnaXRfZ2V0X3JlbW90ZXNfbGlzdCB7CisJbXkgJHdhbnRlZCA9IHNoaWZ0OworCW15ICVyZW1vdGVzID0gKCk7CisKKwlvcGVuIG15ICRmZCwgJy18JyAsIGdpdF9jbWQoKSwgJ3JlbW90ZScsICctdic7CisJcmV0dXJuIHVubGVzcyAkZmQ7CisJd2hpbGUgKG15ICRyZW1vdGUgPSA8JGZkPikgeworCQljaG9tcCAkcmVtb3RlOworCQkkcmVtb3RlID1+IHMhXHQoLio/KVxzK1woKFx3KylcKSQhITsKKwkJbmV4dCBpZiAkd2FudGVkIGFuZCBub3QgJHJlbW90ZSBlcSAkd2FudGVkOworCQlteSAoJHVybCwgJGtleSkgPSAoJDEsICQyKTsKKworCQkkcmVtb3Rlc3skcmVtb3RlfSB8fD0geyAnaGVhZHMnID0+ICgpIH07CisJCSRyZW1vdGVzeyRyZW1vdGV9eyRrZXl9ID0gJHVybDsKKwl9CisJY2xvc2UgJGZkIG9yIHJldHVybjsKKwlyZXR1cm4gd2FudGFycmF5ID8gJXJlbW90ZXMgOiBcJXJlbW90ZXM7Cit9CisKKyMgVGFrZXMgYSBoYXNoIG9mIHJlbW90ZXMgYXMgZmlyc3QgcGFyYW1ldGVyIGFuZCBmaWxscyBpdCBieSBhZGRpbmcgdGhlCisjIGF2YWlsYWJsZSByZW1vdGUgaGVhZHMgZm9yIGVhY2ggb2YgdGhlIGluZGljYXRlZCByZW1vdGVzLgorc3ViIGZpbGxfcmVtb3RlX2hlYWRzIHsKKwlteSAkcmVtb3RlcyA9IHNoaWZ0OworCW15IEBoZWFkcyA9IG1hcCB7ICJyZW1vdGVzLyRfIiB9IGtleXMgJSRyZW1vdGVzOworCW15IEByZW1vdGVoZWFkcyA9IGdpdF9nZXRfaGVhZHNfbGlzdCh1bmRlZiwgQGhlYWRzKTsKKwlmb3JlYWNoIG15ICRyZW1vdGUgKGtleXMgJSRyZW1vdGVzKSB7CisJCSRyZW1vdGVzLT57JHJlbW90ZX17J2hlYWRzJ30gPSBbIGdyZXAgeworCQkJJF8tPnsnbmFtZSd9ID1+IHMhXiRyZW1vdGUvISEKKwkJCX0gQHJlbW90ZWhlYWRzIF07CisJfQorfQorCitzdWIgZ2l0X2dldF9yZWZlcmVuY2VzIHsKKwlteSAkdHlwZSA9IHNoaWZ0IHx8ICIiOworCW15ICVyZWZzOworCSMgNWRjMDFjNTk1ZTZjNmVjOWNjZGE0ZjZmNjljMTMxYzBkZDk0NWY4YyByZWZzL3RhZ3MvdjIuNi4xMQorCSMgYzM5YWUwN2YzOTM4MDZjY2Y0MDZlZjk2NmU5YTE1YWZjNDNjYzM2YSByZWZzL3RhZ3MvdjIuNi4xMV57fQorCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJzaG93LXJlZiIsICItLWRlcmVmZXJlbmNlIiwKKwkJKCR0eXBlID8gKCItLSIsICJyZWZzLyR0eXBlIikgOiAoKSkgIyB1c2UgLS0gPHBhdHRlcm4+IGlmICR0eXBlCisJCW9yIHJldHVybjsKKworCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCWNob21wICRsaW5lOworCQlpZiAoJGxpbmUgPX4gbSFeKCRvaWRfcmVnZXgpXHNyZWZzLygkdHlwZS4qKSQhKSB7CisJCQlpZiAoZGVmaW5lZCAkcmVmc3skMX0pIHsKKwkJCQlwdXNoIEB7JHJlZnN7JDF9fSwgJDI7CisJCQl9IGVsc2UgeworCQkJCSRyZWZzeyQxfSA9IFsgJDIgXTsKKwkJCX0KKwkJfQorCX0KKwljbG9zZSAkZmQgb3IgcmV0dXJuOworCXJldHVybiBcJXJlZnM7Cit9CisKK3N1YiBnaXRfZ2V0X3Jldl9uYW1lX3RhZ3MgeworCW15ICRoYXNoID0gc2hpZnQgfHwgcmV0dXJuIHVuZGVmOworCisJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgIm5hbWUtcmV2IiwgIi0tdGFncyIsICRoYXNoCisJCW9yIHJldHVybjsKKwlteSAkbmFtZV9yZXYgPSA8JGZkPjsKKwljbG9zZSAkZmQ7CisKKwlpZiAoJG5hbWVfcmV2ID1+IG18XiRoYXNoIHRhZ3MvKC4qKSR8KSB7CisJCXJldHVybiAkMTsKKwl9IGVsc2UgeworCQkjIGNhdGNoZXMgYWxzbyAnJGhhc2ggdW5kZWZpbmVkJyBvdXRwdXQKKwkJcmV0dXJuIHVuZGVmOworCX0KK30KKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyMgcGFyc2UgdG8gaGFzaCBmdW5jdGlvbnMKKworc3ViIHBhcnNlX2RhdGUgeworCW15ICRlcG9jaCA9IHNoaWZ0OworCW15ICR0eiA9IHNoaWZ0IHx8ICItMDAwMCI7CisKKwlteSAlZGF0ZTsKKwlteSBAbW9udGhzID0gKCJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIpOworCW15IEBkYXlzID0gKCJTdW4iLCAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiKTsKKwlteSAoJHNlYywgJG1pbiwgJGhvdXIsICRtZGF5LCAkbW9uLCAkeWVhciwgJHdkYXksICR5ZGF5KSA9IGdtdGltZSgkZXBvY2gpOworCSRkYXRleydob3VyJ30gPSAkaG91cjsKKwkkZGF0ZXsnbWludXRlJ30gPSAkbWluOworCSRkYXRleydtZGF5J30gPSAkbWRheTsKKwkkZGF0ZXsnZGF5J30gPSAkZGF5c1skd2RheV07CisJJGRhdGV7J21vbnRoJ30gPSAkbW9udGhzWyRtb25dOworCSRkYXRleydyZmMyODIyJ30gICA9IHNwcmludGYgIiVzLCAlZCAlcyAlNGQgJTAyZDolMDJkOiUwMmQgKzAwMDAiLAorCSAgICAgICAgICAgICAgICAgICAgICRkYXlzWyR3ZGF5XSwgJG1kYXksICRtb250aHNbJG1vbl0sIDE5MDArJHllYXIsICRob3VyICwkbWluLCAkc2VjOworCSRkYXRleydtZGF5LXRpbWUnfSA9IHNwcmludGYgIiVkICVzICUwMmQ6JTAyZCIsCisJICAgICAgICAgICAgICAgICAgICAgJG1kYXksICRtb250aHNbJG1vbl0sICRob3VyICwkbWluOworCSRkYXRleydpc28tODYwMSd9ICA9IHNwcmludGYgIiUwNGQtJTAyZC0lMDJkVCUwMmQ6JTAyZDolMDJkWiIsCisJICAgICAgICAgICAgICAgICAgICAgMTkwMCskeWVhciwgMSskbW9uLCAkbWRheSwgJGhvdXIgLCRtaW4sICRzZWM7CisKKwlteSAoJHR6X3NpZ24sICR0el9ob3VyLCAkdHpfbWluKSA9CisJCSgkdHogPX4gbS9eKFstK10pKFxkXGQpKFxkXGQpJC8pOworCSR0el9zaWduID0gKCR0el9zaWduIGVxICctJyA/IC0xIDogKzEpOworCW15ICRsb2NhbCA9ICRlcG9jaCArICR0el9zaWduKigoKCR0el9ob3VyKjYwKSArICR0el9taW4pKjYwKTsKKwkoJHNlYywgJG1pbiwgJGhvdXIsICRtZGF5LCAkbW9uLCAkeWVhciwgJHdkYXksICR5ZGF5KSA9IGdtdGltZSgkbG9jYWwpOworCSRkYXRleydob3VyX2xvY2FsJ30gPSAkaG91cjsKKwkkZGF0ZXsnbWludXRlX2xvY2FsJ30gPSAkbWluOworCSRkYXRleyd0el9sb2NhbCd9ID0gJHR6OworCSRkYXRleydpc28tdHonfSA9IHNwcmludGYoIiUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkICVzIiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIDE5MDArJHllYXIsICRtb24rMSwgJG1kYXksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAkaG91ciwgJG1pbiwgJHNlYywgJHR6KTsKKwlyZXR1cm4gJWRhdGU7Cit9CisKK3N1YiBwYXJzZV90YWcgeworCW15ICR0YWdfaWQgPSBzaGlmdDsKKwlteSAldGFnOworCW15IEBjb21tZW50OworCisJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImNhdC1maWxlIiwgInRhZyIsICR0YWdfaWQgb3IgcmV0dXJuOworCSR0YWd7J2lkJ30gPSAkdGFnX2lkOworCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCWNob21wICRsaW5lOworCQlpZiAoJGxpbmUgPX4gbS9eb2JqZWN0ICgkb2lkX3JlZ2V4KSQvKSB7CisJCQkkdGFneydvYmplY3QnfSA9ICQxOworCQl9IGVsc2lmICgkbGluZSA9fiBtL150eXBlICguKykkLykgeworCQkJJHRhZ3sndHlwZSd9ID0gJDE7CisJCX0gZWxzaWYgKCRsaW5lID1+IG0vXnRhZyAoLispJC8pIHsKKwkJCSR0YWd7J25hbWUnfSA9ICQxOworCQl9IGVsc2lmICgkbGluZSA9fiBtL150YWdnZXIgKC4qKSAoWzAtOV0rKSAoLiopJC8pIHsKKwkJCSR0YWd7J2F1dGhvcid9ID0gJDE7CisJCQkkdGFneydhdXRob3JfZXBvY2gnfSA9ICQyOworCQkJJHRhZ3snYXV0aG9yX3R6J30gPSAkMzsKKwkJCWlmICgkdGFneydhdXRob3InfSA9fiBtL14oW148XSspIDwoW14+XSopPi8pIHsKKwkJCQkkdGFneydhdXRob3JfbmFtZSd9ICA9ICQxOworCQkJCSR0YWd7J2F1dGhvcl9lbWFpbCd9ID0gJDI7CisJCQl9IGVsc2UgeworCQkJCSR0YWd7J2F1dGhvcl9uYW1lJ30gPSAkdGFneydhdXRob3InfTsKKwkJCX0KKwkJfSBlbHNpZiAoJGxpbmUgPX4gbS8tLUJFR0lOLykgeworCQkJcHVzaCBAY29tbWVudCwgJGxpbmU7CisJCQlsYXN0OworCQl9IGVsc2lmICgkbGluZSBlcSAiIikgeworCQkJbGFzdDsKKwkJfQorCX0KKwlwdXNoIEBjb21tZW50LCA8JGZkPjsKKwkkdGFneydjb21tZW50J30gPSBcQGNvbW1lbnQ7CisJY2xvc2UgJGZkIG9yIHJldHVybjsKKwlpZiAoIWRlZmluZWQgJHRhZ3snbmFtZSd9KSB7CisJCXJldHVybgorCX07CisJcmV0dXJuICV0YWcKK30KKworc3ViIHBhcnNlX2NvbW1pdF90ZXh0IHsKKwlteSAoJGNvbW1pdF90ZXh0LCAkd2l0aHBhcmVudHMpID0gQF87CisJbXkgQGNvbW1pdF9saW5lcyA9IHNwbGl0ICdcbicsICRjb21taXRfdGV4dDsKKwlteSAlY287CisKKwlwb3AgQGNvbW1pdF9saW5lczsgIyBSZW1vdmUgJ1wwJworCisJaWYgKCEgQGNvbW1pdF9saW5lcykgeworCQlyZXR1cm47CisJfQorCisJbXkgJGhlYWRlciA9IHNoaWZ0IEBjb21taXRfbGluZXM7CisJaWYgKCRoZWFkZXIgIX4gbS9eJG9pZF9yZWdleC8pIHsKKwkJcmV0dXJuOworCX0KKwkoJGNveydpZCd9LCBteSBAcGFyZW50cykgPSBzcGxpdCAnICcsICRoZWFkZXI7CisJd2hpbGUgKG15ICRsaW5lID0gc2hpZnQgQGNvbW1pdF9saW5lcykgeworCQlsYXN0IGlmICRsaW5lIGVxICJcbiI7CisJCWlmICgkbGluZSA9fiBtL150cmVlICgkb2lkX3JlZ2V4KSQvKSB7CisJCQkkY297J3RyZWUnfSA9ICQxOworCQl9IGVsc2lmICgoIWRlZmluZWQgJHdpdGhwYXJlbnRzKSAmJiAoJGxpbmUgPX4gbS9ecGFyZW50ICgkb2lkX3JlZ2V4KSQvKSkgeworCQkJcHVzaCBAcGFyZW50cywgJDE7CisJCX0gZWxzaWYgKCRsaW5lID1+IG0vXmF1dGhvciAoLiopIChbMC05XSspICguKikkLykgeworCQkJJGNveydhdXRob3InfSA9IHRvX3V0ZjgoJDEpOworCQkJJGNveydhdXRob3JfZXBvY2gnfSA9ICQyOworCQkJJGNveydhdXRob3JfdHonfSA9ICQzOworCQkJaWYgKCRjb3snYXV0aG9yJ30gPX4gbS9eKFtePF0rKSA8KFtePl0qKT4vKSB7CisJCQkJJGNveydhdXRob3JfbmFtZSd9ICA9ICQxOworCQkJCSRjb3snYXV0aG9yX2VtYWlsJ30gPSAkMjsKKwkJCX0gZWxzZSB7CisJCQkJJGNveydhdXRob3JfbmFtZSd9ID0gJGNveydhdXRob3InfTsKKwkJCX0KKwkJfSBlbHNpZiAoJGxpbmUgPX4gbS9eY29tbWl0dGVyICguKikgKFswLTldKykgKC4qKSQvKSB7CisJCQkkY297J2NvbW1pdHRlcid9ID0gdG9fdXRmOCgkMSk7CisJCQkkY297J2NvbW1pdHRlcl9lcG9jaCd9ID0gJDI7CisJCQkkY297J2NvbW1pdHRlcl90eid9ID0gJDM7CisJCQlpZiAoJGNveydjb21taXR0ZXInfSA9fiBtL14oW148XSspIDwoW14+XSopPi8pIHsKKwkJCQkkY297J2NvbW1pdHRlcl9uYW1lJ30gID0gJDE7CisJCQkJJGNveydjb21taXR0ZXJfZW1haWwnfSA9ICQyOworCQkJfSBlbHNlIHsKKwkJCQkkY297J2NvbW1pdHRlcl9uYW1lJ30gPSAkY297J2NvbW1pdHRlcid9OworCQkJfQorCQl9CisJfQorCWlmICghZGVmaW5lZCAkY297J3RyZWUnfSkgeworCQlyZXR1cm47CisJfTsKKwkkY297J3BhcmVudHMnfSA9IFxAcGFyZW50czsKKwkkY297J3BhcmVudCd9ID0gJHBhcmVudHNbMF07CisKKwlmb3JlYWNoIG15ICR0aXRsZSAoQGNvbW1pdF9saW5lcykgeworCQkkdGl0bGUgPX4gcy9eICAgIC8vOworCQlpZiAoJHRpdGxlIG5lICIiKSB7CisJCQkkY297J3RpdGxlJ30gPSBjaG9wX3N0cigkdGl0bGUsIDgwLCA1KTsKKwkJCSMgcmVtb3ZlIGxlYWRpbmcgc3R1ZmYgb2YgbWVyZ2VzIHRvIG1ha2UgdGhlIGludGVyZXN0aW5nIHBhcnQgdmlzaWJsZQorCQkJaWYgKGxlbmd0aCgkdGl0bGUpID4gNTApIHsKKwkJCQkkdGl0bGUgPX4gcy9eQXV0b21hdGljIC8vOworCQkJCSR0aXRsZSA9fiBzL15tZXJnZSAob2Z8d2l0aCkgL01lcmdlIC4uLiAvaTsKKwkJCQlpZiAobGVuZ3RoKCR0aXRsZSkgPiA1MCkgeworCQkJCQkkdGl0bGUgPX4gcy8oaHR0cHxyc3luYyk6XC9cLy8vOworCQkJCX0KKwkJCQlpZiAobGVuZ3RoKCR0aXRsZSkgPiA1MCkgeworCQkJCQkkdGl0bGUgPX4gcy8obWFzdGVyfHd3d3xyc3luYylcLi8vOworCQkJCX0KKwkJCQlpZiAobGVuZ3RoKCR0aXRsZSkgPiA1MCkgeworCQkJCQkkdGl0bGUgPX4gcy9rZXJuZWwub3JnOj8vLzsKKwkJCQl9CisJCQkJaWYgKGxlbmd0aCgkdGl0bGUpID4gNTApIHsKKwkJCQkJJHRpdGxlID1+IHMvXC9wdWJcL3NjbS8vOworCQkJCX0KKwkJCX0KKwkJCSRjb3sndGl0bGVfc2hvcnQnfSA9IGNob3Bfc3RyKCR0aXRsZSwgNTAsIDUpOworCQkJbGFzdDsKKwkJfQorCX0KKwlpZiAoISBkZWZpbmVkICRjb3sndGl0bGUnfSB8fCAkY297J3RpdGxlJ30gZXEgIiIpIHsKKwkJJGNveyd0aXRsZSd9ID0gJGNveyd0aXRsZV9zaG9ydCd9ID0gJyhubyBjb21taXQgbWVzc2FnZSknOworCX0KKwkjIHJlbW92ZSBhZGRlZCBzcGFjZXMKKwlmb3JlYWNoIG15ICRsaW5lIChAY29tbWl0X2xpbmVzKSB7CisJCSRsaW5lID1+IHMvXiAgICAvLzsKKwl9CisJJGNveydjb21tZW50J30gPSBcQGNvbW1pdF9saW5lczsKKworCW15ICRhZ2UgPSB0aW1lIC0gJGNveydjb21taXR0ZXJfZXBvY2gnfTsKKwkkY297J2FnZSd9ID0gJGFnZTsKKwkkY297J2FnZV9zdHJpbmcnfSA9IGFnZV9zdHJpbmcoJGFnZSk7CisJbXkgKCRzZWMsICRtaW4sICRob3VyLCAkbWRheSwgJG1vbiwgJHllYXIsICR3ZGF5LCAkeWRheSkgPSBnbXRpbWUoJGNveydjb21taXR0ZXJfZXBvY2gnfSk7CisJaWYgKCRhZ2UgPiA2MCo2MCoyNCo3KjIpIHsKKwkJJGNveydhZ2Vfc3RyaW5nX2RhdGUnfSA9IHNwcmludGYgIiU0aS0lMDJ1LSUwMmkiLCAxOTAwICsgJHllYXIsICRtb24rMSwgJG1kYXk7CisJCSRjb3snYWdlX3N0cmluZ19hZ2UnfSA9ICRjb3snYWdlX3N0cmluZyd9OworCX0gZWxzZSB7CisJCSRjb3snYWdlX3N0cmluZ19kYXRlJ30gPSAkY297J2FnZV9zdHJpbmcnfTsKKwkJJGNveydhZ2Vfc3RyaW5nX2FnZSd9ID0gc3ByaW50ZiAiJTRpLSUwMnUtJTAyaSIsIDE5MDAgKyAkeWVhciwgJG1vbisxLCAkbWRheTsKKwl9CisJcmV0dXJuICVjbzsKK30KKworc3ViIHBhcnNlX2NvbW1pdCB7CisJbXkgKCRjb21taXRfaWQpID0gQF87CisJbXkgJWNvOworCisJbG9jYWwgJC8gPSAiXDAiOworCisJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgInJldi1saXN0IiwKKwkJIi0tcGFyZW50cyIsCisJCSItLWhlYWRlciIsCisJCSItLW1heC1jb3VudD0xIiwKKwkJJGNvbW1pdF9pZCwKKwkJIi0tIiwKKwkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LXJldi1saXN0IGZhaWxlZCIpOworCSVjbyA9IHBhcnNlX2NvbW1pdF90ZXh0KDwkZmQ+LCAxKTsKKwljbG9zZSAkZmQ7CisKKwlyZXR1cm4gJWNvOworfQorCitzdWIgcGFyc2VfY29tbWl0cyB7CisJbXkgKCRjb21taXRfaWQsICRtYXhjb3VudCwgJHNraXAsICRmaWxlbmFtZSwgQGFyZ3MpID0gQF87CisJbXkgQGNvczsKKworCSRtYXhjb3VudCB8fD0gMTsKKwkkc2tpcCB8fD0gMDsKKworCWxvY2FsICQvID0gIlwwIjsKKworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJyZXYtbGlzdCIsCisJCSItLWhlYWRlciIsCisJCUBhcmdzLAorCQkoIi0tbWF4LWNvdW50PSIgLiAkbWF4Y291bnQpLAorCQkoIi0tc2tpcD0iIC4gJHNraXApLAorCQlAZXh0cmFfb3B0aW9ucywKKwkJJGNvbW1pdF9pZCwKKwkJIi0tIiwKKwkJKCRmaWxlbmFtZSA/ICgkZmlsZW5hbWUpIDogKCkpCisJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1yZXYtbGlzdCBmYWlsZWQiKTsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQlteSAlY28gPSBwYXJzZV9jb21taXRfdGV4dCgkbGluZSk7CisJCXB1c2ggQGNvcywgXCVjbzsKKwl9CisJY2xvc2UgJGZkOworCisJcmV0dXJuIHdhbnRhcnJheSA/IEBjb3MgOiBcQGNvczsKK30KKworIyBwYXJzZSBsaW5lIG9mIGdpdC1kaWZmLXRyZWUgInJhdyIgb3V0cHV0CitzdWIgcGFyc2VfZGlmZnRyZWVfcmF3X2xpbmUgeworCW15ICRsaW5lID0gc2hpZnQ7CisJbXkgJXJlczsKKworCSMgJzoxMDA2NDQgMTAwNjQ0IDAzYjIxODI2MGU5OWI3OGM2ZGYwZWQzNzhlNTllZDkyMDVjY2M5NmQgM2I5M2Q1ZTdjYzdmN2RkNGViZWQxM2E1Y2MxYTRhZDk3NmZjOTRkOCBNCWxzLWZpbGVzLmMnCisJIyAnOjEwMDY0NCAxMDA2NDQgN2Y5MjgxOTg1MDg2OTcxZDM4NzdhY2EyNzcwNGYyYWFmOWM0NDhjZSBiYzE5MGViYzcxYmJkOTIzZjJiNzI4ZTUwNTQwOGY1ZTU0YmQwNzNhIE0JcmV2LXRyZWUuYycKKwlpZiAoJGxpbmUgPX4gbS9eOihbMC03XXs2fSkgKFswLTddezZ9KSAoJG9pZF9yZWdleCkgKCRvaWRfcmVnZXgpICguKShbMC05XXswLDN9KVx0KC4qKSQvKSB7CisJCSRyZXN7J2Zyb21fbW9kZSd9ID0gJDE7CisJCSRyZXN7J3RvX21vZGUnfSA9ICQyOworCQkkcmVzeydmcm9tX2lkJ30gPSAkMzsKKwkJJHJlc3sndG9faWQnfSA9ICQ0OworCQkkcmVzeydzdGF0dXMnfSA9ICQ1OworCQkkcmVzeydzaW1pbGFyaXR5J30gPSAkNjsKKwkJaWYgKCRyZXN7J3N0YXR1cyd9IGVxICdSJyB8fCAkcmVzeydzdGF0dXMnfSBlcSAnQycpIHsgIyByZW5hbWVkIG9yIGNvcGllZAorCQkJKCRyZXN7J2Zyb21fZmlsZSd9LCAkcmVzeyd0b19maWxlJ30pID0gbWFwIHsgdW5xdW90ZSgkXykgfSBzcGxpdCgiXHQiLCAkNyk7CisJCX0gZWxzZSB7CisJCQkkcmVzeydmcm9tX2ZpbGUnfSA9ICRyZXN7J3RvX2ZpbGUnfSA9ICRyZXN7J2ZpbGUnfSA9IHVucXVvdGUoJDcpOworCQl9CisJfQorCSMgJzo6MTAwNzU1IDEwMDc1NSAxMDA3NTUgNjBlNzljYTFiMDFiYzhiMDU3YWJlMTdkZGFiNDg0Njk5YTdmNWZkYiA5NDA2N2NjNWY3MzM4OGYzMzcyMmQ1MmFlMDJmNDQ2OTJiYzA3NDkwIDk0MDY3Y2M1ZjczMzg4ZjMzNzIyZDUyYWUwMmY0NDY5MmJjMDc0OTAgTVIJZ2l0LWd1aS9naXQtZ3VpLnNoJworCSMgY29tYmluZWQgZGlmZiAoZm9yIG1lcmdlIGNvbW1pdCkKKwllbHNpZiAoJGxpbmUgPX4gcy9eKDo6KykoKD86WzAtN117Nn0gKSspKCg/OiRvaWRfcmVnZXggKSspKFthLXpBLVpdKylcdCguKikkLy8pIHsKKwkJJHJlc3snbnBhcmVudHMnfSAgPSBsZW5ndGgoJDEpOworCQkkcmVzeydmcm9tX21vZGUnfSA9IFsgc3BsaXQoJyAnLCAkMikgXTsKKwkJJHJlc3sndG9fbW9kZSd9ID0gcG9wIEB7JHJlc3snZnJvbV9tb2RlJ319OworCQkkcmVzeydmcm9tX2lkJ30gPSBbIHNwbGl0KCcgJywgJDMpIF07CisJCSRyZXN7J3RvX2lkJ30gPSBwb3AgQHskcmVzeydmcm9tX2lkJ319OworCQkkcmVzeydzdGF0dXMnfSA9IFsgc3BsaXQoJycsICQ0KSBdOworCQkkcmVzeyd0b19maWxlJ30gPSB1bnF1b3RlKCQ1KTsKKwl9CisJIyAnYzUxMmI1MjM0NzI0ODVhZWY0ZmZmOWU1N2IyMjlkOWQyNDNjOTY3ZicKKwllbHNpZiAoJGxpbmUgPX4gbS9eKCRvaWRfcmVnZXgpJC8pIHsKKwkJJHJlc3snY29tbWl0J30gPSAkMTsKKwl9CisKKwlyZXR1cm4gd2FudGFycmF5ID8gJXJlcyA6IFwlcmVzOworfQorCisjIHdyYXBwZXI6IHJldHVybiBwYXJzZWQgbGluZSBvZiBnaXQtZGlmZi10cmVlICJyYXciIG91dHB1dAorIyAodGhlIGFyZ3VtZW50IG1pZ2h0IGJlIHJhdyBsaW5lLCBvciBwYXJzZWQgaW5mbykKK3N1YiBwYXJzZWRfZGlmZnRyZWVfbGluZSB7CisJbXkgJGxpbmVfb3JfcmVmID0gc2hpZnQ7CisKKwlpZiAocmVmKCRsaW5lX29yX3JlZikgZXEgIkhBU0giKSB7CisJCSMgcHJlLXBhcnNlZCAob3IgZ2VuZXJhdGVkIGJ5IGhhbmQpCisJCXJldHVybiAkbGluZV9vcl9yZWY7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHBhcnNlX2RpZmZ0cmVlX3Jhd19saW5lKCRsaW5lX29yX3JlZik7CisJfQorfQorCisjIHBhcnNlIGxpbmUgb2YgZ2l0LWxzLXRyZWUgb3V0cHV0CitzdWIgcGFyc2VfbHNfdHJlZV9saW5lIHsKKwlteSAkbGluZSA9IHNoaWZ0OworCW15ICVvcHRzID0gQF87CisJbXkgJXJlczsKKworCWlmICgkb3B0c3snLWwnfSkgeworCQkjJzEwMDY0NCBibG9iIDBmYTNmM2E2NmZiNmExMzdmNmVjMmMxOTM1MWVkNGQ4MDcwNzBmZmEgICAxNjcxNwlwYW5pYy5jJworCQkkbGluZSA9fiBtL14oWzAtOV0rKSAoLispICgkb2lkX3JlZ2V4KSArKC18WzAtOV0rKVx0KC4rKSQvczsKKworCQkkcmVzeydtb2RlJ30gPSAkMTsKKwkJJHJlc3sndHlwZSd9ID0gJDI7CisJCSRyZXN7J2hhc2gnfSA9ICQzOworCQkkcmVzeydzaXplJ30gPSAkNDsKKwkJaWYgKCRvcHRzeycteid9KSB7CisJCQkkcmVzeyduYW1lJ30gPSAkNTsKKwkJfSBlbHNlIHsKKwkJCSRyZXN7J25hbWUnfSA9IHVucXVvdGUoJDUpOworCQl9CisJfSBlbHNlIHsKKwkJIycxMDA2NDQgYmxvYiAwZmEzZjNhNjZmYjZhMTM3ZjZlYzJjMTkzNTFlZDRkODA3MDcwZmZhCXBhbmljLmMnCisJCSRsaW5lID1+IG0vXihbMC05XSspICguKykgKCRvaWRfcmVnZXgpXHQoLispJC9zOworCisJCSRyZXN7J21vZGUnfSA9ICQxOworCQkkcmVzeyd0eXBlJ30gPSAkMjsKKwkJJHJlc3snaGFzaCd9ID0gJDM7CisJCWlmICgkb3B0c3snLXonfSkgeworCQkJJHJlc3snbmFtZSd9ID0gJDQ7CisJCX0gZWxzZSB7CisJCQkkcmVzeyduYW1lJ30gPSB1bnF1b3RlKCQ0KTsKKwkJfQorCX0KKworCXJldHVybiB3YW50YXJyYXkgPyAlcmVzIDogXCVyZXM7Cit9CisKKyMgZ2VuZXJhdGVzIF90d29fIGhhc2hlcywgcmVmZXJlbmNlcyB0byB3aGljaCBhcmUgcGFzc2VkIGFzIDIgYW5kIDMgYXJndW1lbnQKK3N1YiBwYXJzZV9mcm9tX3RvX2RpZmZpbmZvIHsKKwlteSAoJGRpZmZpbmZvLCAkZnJvbSwgJHRvLCBAcGFyZW50cykgPSBAXzsKKworCWlmICgkZGlmZmluZm8tPnsnbnBhcmVudHMnfSkgeworCQkjIGNvbWJpbmVkIGRpZmYKKwkJJGZyb20tPnsnZmlsZSd9ID0gW107CisJCSRmcm9tLT57J2hyZWYnfSA9IFtdOworCQlmaWxsX2Zyb21fZmlsZV9pbmZvKCRkaWZmaW5mbywgQHBhcmVudHMpCisJCQl1bmxlc3MgZXhpc3RzICRkaWZmaW5mby0+eydmcm9tX2ZpbGUnfTsKKwkJZm9yIChteSAkaSA9IDA7ICRpIDwgJGRpZmZpbmZvLT57J25wYXJlbnRzJ307ICRpKyspIHsKKwkJCSRmcm9tLT57J2ZpbGUnfVskaV0gPQorCQkJCWRlZmluZWQgJGRpZmZpbmZvLT57J2Zyb21fZmlsZSd9WyRpXSA/CisJCQkJICAgICAgICAkZGlmZmluZm8tPnsnZnJvbV9maWxlJ31bJGldIDoKKwkJCQkgICAgICAgICRkaWZmaW5mby0+eyd0b19maWxlJ307CisJCQlpZiAoJGRpZmZpbmZvLT57J3N0YXR1cyd9WyRpXSBuZSAiQSIpIHsgIyBub3QgbmV3IChhZGRlZCkgZmlsZQorCQkJCSRmcm9tLT57J2hyZWYnfVskaV0gPSBocmVmKGFjdGlvbj0+ImJsb2IiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JHBhcmVudHNbJGldLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmaW5mby0+eydmcm9tX2lkJ31bJGldLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZyb20tPnsnZmlsZSd9WyRpXSk7CisJCQl9IGVsc2UgeworCQkJCSRmcm9tLT57J2hyZWYnfVskaV0gPSB1bmRlZjsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCSMgb3JkaW5hcnkgKG5vdCBjb21iaW5lZCkgZGlmZgorCQkkZnJvbS0+eydmaWxlJ30gPSAkZGlmZmluZm8tPnsnZnJvbV9maWxlJ307CisJCWlmICgkZGlmZmluZm8tPnsnc3RhdHVzJ30gbmUgIkEiKSB7ICMgbm90IG5ldyAoYWRkZWQpIGZpbGUKKwkJCSRmcm9tLT57J2hyZWYnfSA9IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2hfYmFzZT0+JGhhc2hfcGFyZW50LAorCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZGlmZmluZm8tPnsnZnJvbV9pZCd9LAorCQkJICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRmcm9tLT57J2ZpbGUnfSk7CisJCX0gZWxzZSB7CisJCQlkZWxldGUgJGZyb20tPnsnaHJlZid9OworCQl9CisJfQorCisJJHRvLT57J2ZpbGUnfSA9ICRkaWZmaW5mby0+eyd0b19maWxlJ307CisJaWYgKCFpc19kZWxldGVkKCRkaWZmaW5mbykpIHsgIyBmaWxlIGV4aXN0cyBpbiByZXN1bHQKKwkJJHRvLT57J2hyZWYnfSA9IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2hfYmFzZT0+JGhhc2gsCisJCSAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmaW5mby0+eyd0b19pZCd9LAorCQkgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiR0by0+eydmaWxlJ30pOworCX0gZWxzZSB7CisJCWRlbGV0ZSAkdG8tPnsnaHJlZid9OworCX0KK30KKworIyMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIyMgcGFyc2UgdG8gYXJyYXkgb2YgaGFzaGVzIGZ1bmN0aW9ucworCitzdWIgZ2l0X2dldF9oZWFkc19saXN0IHsKKwlteSAoJGxpbWl0LCBAY2xhc3NlcykgPSBAXzsKKwlAY2xhc3NlcyA9IGdldF9icmFuY2hfcmVmcygpIHVubGVzcyBAY2xhc3NlczsKKwlteSBAcGF0dGVybnMgPSBtYXAgeyAicmVmcy8kXyIgfSBAY2xhc3NlczsKKwlteSBAaGVhZHNsaXN0OworCisJb3BlbiBteSAkZmQsICctfCcsIGdpdF9jbWQoKSwgJ2Zvci1lYWNoLXJlZicsCisJCSgkbGltaXQgPyAnLS1jb3VudD0nLigkbGltaXQrMSkgOiAoKSksICctLXNvcnQ9LWNvbW1pdHRlcmRhdGUnLAorCQknLS1mb3JtYXQ9JShvYmplY3RuYW1lKSAlKHJlZm5hbWUpICUoc3ViamVjdCklMDAlKGNvbW1pdHRlciknLAorCQlAcGF0dGVybnMKKwkJb3IgcmV0dXJuOworCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCW15ICVyZWZfaXRlbTsKKworCQljaG9tcCAkbGluZTsKKwkJbXkgKCRyZWZpbmZvLCAkY29tbWl0dGVyaW5mbykgPSBzcGxpdCgvXDAvLCAkbGluZSk7CisJCW15ICgkaGFzaCwgJG5hbWUsICR0aXRsZSkgPSBzcGxpdCgnICcsICRyZWZpbmZvLCAzKTsKKwkJbXkgKCRjb21taXR0ZXIsICRlcG9jaCwgJHR6KSA9CisJCQkoJGNvbW1pdHRlcmluZm8gPX4gL14oLiopIChbMC05XSspICguKikkLyk7CisJCSRyZWZfaXRlbXsnZnVsbG5hbWUnfSAgPSAkbmFtZTsKKwkJbXkgJHN0cmlwX3JlZnMgPSBqb2luICd8JywgbWFwIHsgcXVvdGVtZXRhIH0gZ2V0X2JyYW5jaF9yZWZzKCk7CisJCSRuYW1lID1+IHMhXnJlZnMvKCRzdHJpcF9yZWZzfHJlbW90ZXMpLyEhOworCQkkcmVmX2l0ZW17J25hbWUnfSA9ICRuYW1lOworCQkjIGZvciByZWZzIG5laXRoZXIgaW4gJ2hlYWRzJyBub3IgJ3JlbW90ZXMnIHdlIHdhbnQgdG8KKwkJIyBzaG93IHRoZWlyIHJlZiBkaXIKKwkJbXkgJHJlZl9kaXIgPSAoZGVmaW5lZCAkMSkgPyAkMSA6ICcnOworCQlpZiAoJHJlZl9kaXIgbmUgJycgYW5kICRyZWZfZGlyIG5lICdoZWFkcycgYW5kICRyZWZfZGlyIG5lICdyZW1vdGVzJykgeworCQkgICAgJHJlZl9pdGVteyduYW1lJ30gLj0gJyAoJyAuICRyZWZfZGlyIC4gJyknOworCQl9CisKKwkJJHJlZl9pdGVteydpZCd9ICAgID0gJGhhc2g7CisJCSRyZWZfaXRlbXsndGl0bGUnfSA9ICR0aXRsZSB8fCAnKG5vIGNvbW1pdCBtZXNzYWdlKSc7CisJCSRyZWZfaXRlbXsnZXBvY2gnfSA9ICRlcG9jaDsKKwkJaWYgKCRlcG9jaCkgeworCQkJJHJlZl9pdGVteydhZ2UnfSA9IGFnZV9zdHJpbmcodGltZSAtICRyZWZfaXRlbXsnZXBvY2gnfSk7CisJCX0gZWxzZSB7CisJCQkkcmVmX2l0ZW17J2FnZSd9ID0gInVua25vd24iOworCQl9CisKKwkJcHVzaCBAaGVhZHNsaXN0LCBcJXJlZl9pdGVtOworCX0KKwljbG9zZSAkZmQ7CisKKwlyZXR1cm4gd2FudGFycmF5ID8gQGhlYWRzbGlzdCA6IFxAaGVhZHNsaXN0OworfQorCitzdWIgZ2l0X2dldF90YWdzX2xpc3QgeworCW15ICRsaW1pdCA9IHNoaWZ0OworCW15IEB0YWdzbGlzdDsKKworCW9wZW4gbXkgJGZkLCAnLXwnLCBnaXRfY21kKCksICdmb3ItZWFjaC1yZWYnLAorCQkoJGxpbWl0ID8gJy0tY291bnQ9Jy4oJGxpbWl0KzEpIDogKCkpLCAnLS1zb3J0PS1jcmVhdG9yZGF0ZScsCisJCSctLWZvcm1hdD0lKG9iamVjdG5hbWUpICUob2JqZWN0dHlwZSkgJShyZWZuYW1lKSAnLgorCQknJSgqb2JqZWN0bmFtZSkgJSgqb2JqZWN0dHlwZSkgJShzdWJqZWN0KSUwMCUoY3JlYXRvciknLAorCQkncmVmcy90YWdzJworCQlvciByZXR1cm47CisJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJbXkgJXJlZl9pdGVtOworCisJCWNob21wICRsaW5lOworCQlteSAoJHJlZmluZm8sICRjcmVhdG9yaW5mbykgPSBzcGxpdCgvXDAvLCAkbGluZSk7CisJCW15ICgkaWQsICR0eXBlLCAkbmFtZSwgJHJlZmlkLCAkcmVmdHlwZSwgJHRpdGxlKSA9IHNwbGl0KCcgJywgJHJlZmluZm8sIDYpOworCQlteSAoJGNyZWF0b3IsICRlcG9jaCwgJHR6KSA9CisJCQkoJGNyZWF0b3JpbmZvID1+IC9eKC4qKSAoWzAtOV0rKSAoLiopJC8pOworCQkkcmVmX2l0ZW17J2Z1bGxuYW1lJ30gPSAkbmFtZTsKKwkJJG5hbWUgPX4gcyFecmVmcy90YWdzLyEhOworCisJCSRyZWZfaXRlbXsndHlwZSd9ID0gJHR5cGU7CisJCSRyZWZfaXRlbXsnaWQnfSA9ICRpZDsKKwkJJHJlZl9pdGVteyduYW1lJ30gPSAkbmFtZTsKKwkJaWYgKCR0eXBlIGVxICJ0YWciKSB7CisJCQkkcmVmX2l0ZW17J3N1YmplY3QnfSA9ICR0aXRsZTsKKwkJCSRyZWZfaXRlbXsncmVmdHlwZSd9ID0gJHJlZnR5cGU7CisJCQkkcmVmX2l0ZW17J3JlZmlkJ30gICA9ICRyZWZpZDsKKwkJfSBlbHNlIHsKKwkJCSRyZWZfaXRlbXsncmVmdHlwZSd9ID0gJHR5cGU7CisJCQkkcmVmX2l0ZW17J3JlZmlkJ30gICA9ICRpZDsKKwkJfQorCisJCWlmICgkdHlwZSBlcSAidGFnIiB8fCAkdHlwZSBlcSAiY29tbWl0IikgeworCQkJJHJlZl9pdGVteydlcG9jaCd9ID0gJGVwb2NoOworCQkJaWYgKCRlcG9jaCkgeworCQkJCSRyZWZfaXRlbXsnYWdlJ30gPSBhZ2Vfc3RyaW5nKHRpbWUgLSAkcmVmX2l0ZW17J2Vwb2NoJ30pOworCQkJfSBlbHNlIHsKKwkJCQkkcmVmX2l0ZW17J2FnZSd9ID0gInVua25vd24iOworCQkJfQorCQl9CisKKwkJcHVzaCBAdGFnc2xpc3QsIFwlcmVmX2l0ZW07CisJfQorCWNsb3NlICRmZDsKKworCXJldHVybiB3YW50YXJyYXkgPyBAdGFnc2xpc3QgOiBcQHRhZ3NsaXN0OworfQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIyBmaWxlc3lzdGVtLXJlbGF0ZWQgZnVuY3Rpb25zCisKK3N1YiBnZXRfZmlsZV9vd25lciB7CisJbXkgJHBhdGggPSBzaGlmdDsKKworCW15ICgkZGV2LCAkaW5vLCAkbW9kZSwgJG5saW5rLCAkc3RfdWlkLCAkc3RfZ2lkLCAkcmRldiwgJHNpemUpID0gc3RhdCgkcGF0aCk7CisJbXkgKCRuYW1lLCAkcGFzc3dkLCAkdWlkLCAkZ2lkLCAkcXVvdGEsICRjb21tZW50LCAkZ2NvcywgJGRpciwgJHNoZWxsKSA9IGdldHB3dWlkKCRzdF91aWQpOworCWlmICghZGVmaW5lZCAkZ2NvcykgeworCQlyZXR1cm4gdW5kZWY7CisJfQorCW15ICRvd25lciA9ICRnY29zOworCSRvd25lciA9fiBzL1ssO10uKiQvLzsKKwlyZXR1cm4gdG9fdXRmOCgkb3duZXIpOworfQorCisjIGFzc3VtZSB0aGF0IGZpbGUgZXhpc3RzCitzdWIgaW5zZXJ0X2ZpbGUgeworCW15ICRmaWxlbmFtZSA9IHNoaWZ0OworCisJb3BlbiBteSAkZmQsICc8JywgJGZpbGVuYW1lOworCXByaW50IG1hcCB7IHRvX3V0ZjgoJF8pIH0gPCRmZD47CisJY2xvc2UgJGZkOworfQorCisjIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisjIyBtaW1ldHlwZSByZWxhdGVkIGZ1bmN0aW9ucworCitzdWIgbWltZXR5cGVfZ3Vlc3NfZmlsZSB7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisJbXkgJG1pbWVtYXAgPSBzaGlmdDsKKwktciAkbWltZW1hcCBvciByZXR1cm4gdW5kZWY7CisKKwlteSAlbWltZW1hcDsKKwlvcGVuKG15ICRtaCwgJzwnLCAkbWltZW1hcCkgb3IgcmV0dXJuIHVuZGVmOworCXdoaWxlICg8JG1oPikgeworCQluZXh0IGlmIG0vXiMvOyAjIHNraXAgY29tbWVudHMKKwkJbXkgKCRtaW1ldHlwZSwgQGV4dHMpID0gc3BsaXQoL1xzKy8pOworCQlmb3JlYWNoIG15ICRleHQgKEBleHRzKSB7CisJCQkkbWltZW1hcHskZXh0fSA9ICRtaW1ldHlwZTsKKwkJfQorCX0KKwljbG9zZSgkbWgpOworCisJJGZpbGVuYW1lID1+IC9cLihbXi5dKikkLzsKKwlyZXR1cm4gJG1pbWVtYXB7JDF9OworfQorCitzdWIgbWltZXR5cGVfZ3Vlc3MgeworCW15ICRmaWxlbmFtZSA9IHNoaWZ0OworCW15ICRtaW1lOworCSRmaWxlbmFtZSA9fiAvXC4vIG9yIHJldHVybiB1bmRlZjsKKworCWlmICgkbWltZXR5cGVzX2ZpbGUpIHsKKwkJbXkgJGZpbGUgPSAkbWltZXR5cGVzX2ZpbGU7CisJCWlmICgkZmlsZSAhfiBtIV4vISkgeyAjIGlmIGl0IGlzIHJlbGF0aXZlIHBhdGgKKwkJCSMgaXQgaXMgcmVsYXRpdmUgdG8gcHJvamVjdAorCQkJJGZpbGUgPSAiJHByb2plY3Ryb290LyRwcm9qZWN0LyRmaWxlIjsKKwkJfQorCQkkbWltZSA9IG1pbWV0eXBlX2d1ZXNzX2ZpbGUoJGZpbGVuYW1lLCAkZmlsZSk7CisJfQorCSRtaW1lIHx8PSBtaW1ldHlwZV9ndWVzc19maWxlKCRmaWxlbmFtZSwgJy9ldGMvbWltZS50eXBlcycpOworCXJldHVybiAkbWltZTsKK30KKworc3ViIGJsb2JfbWltZXR5cGUgeworCW15ICRmZCA9IHNoaWZ0OworCW15ICRmaWxlbmFtZSA9IHNoaWZ0OworCisJaWYgKCRmaWxlbmFtZSkgeworCQlteSAkbWltZSA9IG1pbWV0eXBlX2d1ZXNzKCRmaWxlbmFtZSk7CisJCSRtaW1lIGFuZCByZXR1cm4gJG1pbWU7CisJfQorCisJIyBqdXN0IGluIGNhc2UKKwlyZXR1cm4gJGRlZmF1bHRfYmxvYl9wbGFpbl9taW1ldHlwZSB1bmxlc3MgJGZkOworCisJaWYgKC1UICRmZCkgeworCQlyZXR1cm4gJ3RleHQvcGxhaW4nOworCX0gZWxzaWYgKCEgJGZpbGVuYW1lKSB7CisJCXJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsKKwl9IGVsc2lmICgkZmlsZW5hbWUgPX4gbS9cLnBuZyQvaSkgeworCQlyZXR1cm4gJ2ltYWdlL3BuZyc7CisJfSBlbHNpZiAoJGZpbGVuYW1lID1+IG0vXC5naWYkL2kpIHsKKwkJcmV0dXJuICdpbWFnZS9naWYnOworCX0gZWxzaWYgKCRmaWxlbmFtZSA9fiBtL1wuanBlP2ckL2kpIHsKKwkJcmV0dXJuICdpbWFnZS9qcGVnJzsKKwl9IGVsc2UgeworCQlyZXR1cm4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7CisJfQorfQorCitzdWIgYmxvYl9jb250ZW50dHlwZSB7CisJbXkgKCRmZCwgJGZpbGVfbmFtZSwgJHR5cGUpID0gQF87CisKKwkkdHlwZSB8fD0gYmxvYl9taW1ldHlwZSgkZmQsICRmaWxlX25hbWUpOworCWlmICgkdHlwZSBlcSAndGV4dC9wbGFpbicgJiYgZGVmaW5lZCAkZGVmYXVsdF90ZXh0X3BsYWluX2NoYXJzZXQpIHsKKwkJJHR5cGUgLj0gIjsgY2hhcnNldD0kZGVmYXVsdF90ZXh0X3BsYWluX2NoYXJzZXQiOworCX0KKworCXJldHVybiAkdHlwZTsKK30KKworIyBndWVzcyBmaWxlIHN5bnRheCBmb3Igc3ludGF4IGhpZ2hsaWdodGluZzsgcmV0dXJuIHVuZGVmIGlmIG5vIGhpZ2hsaWdodGluZworIyB0aGUgbmFtZSBvZiBzeW50YXggY2FuIChpbiB0aGUgZnV0dXJlKSBkZXBlbmQgb24gc3ludGF4IGhpZ2hsaWdodGVyIHVzZWQKK3N1YiBndWVzc19maWxlX3N5bnRheCB7CisJbXkgKCRoaWdobGlnaHQsICRmaWxlX25hbWUpID0gQF87CisJcmV0dXJuIHVuZGVmIHVubGVzcyAoJGhpZ2hsaWdodCAmJiBkZWZpbmVkICRmaWxlX25hbWUpOworCW15ICRiYXNlbmFtZSA9IGJhc2VuYW1lKCRmaWxlX25hbWUsICcuaW4nKTsKKwlyZXR1cm4gJGhpZ2hsaWdodF9iYXNlbmFtZXskYmFzZW5hbWV9CisJCWlmIGV4aXN0cyAkaGlnaGxpZ2h0X2Jhc2VuYW1leyRiYXNlbmFtZX07CisKKwkkYmFzZW5hbWUgPX4gL1wuKFteLl0qKSQvOworCW15ICRleHQgPSAkMSBvciByZXR1cm4gdW5kZWY7CisJcmV0dXJuICRoaWdobGlnaHRfZXh0eyRleHR9CisJCWlmIGV4aXN0cyAkaGlnaGxpZ2h0X2V4dHskZXh0fTsKKworCXJldHVybiB1bmRlZjsKK30KKworIyBydW4gaGlnaGxpZ2h0ZXIgYW5kIHJldHVybiBGRCBvZiBpdHMgb3V0cHV0LAorIyBvciByZXR1cm4gb3JpZ2luYWwgRkQgaWYgbm8gaGlnaGxpZ2h0aW5nCitzdWIgcnVuX2hpZ2hsaWdodGVyIHsKKwlteSAoJGZkLCAkaGlnaGxpZ2h0LCAkc3ludGF4KSA9IEBfOworCXJldHVybiAkZmQgdW5sZXNzICgkaGlnaGxpZ2h0KTsKKworCWNsb3NlICRmZDsKKwlteSAkc3ludGF4X2FyZyA9IChkZWZpbmVkICRzeW50YXgpID8gIi0tc3ludGF4ICRzeW50YXgiIDogIi0tZm9yY2UiOworCW9wZW4gJGZkLCBxdW90ZV9jb21tYW5kKGdpdF9jbWQoKSwgImNhdC1maWxlIiwgImJsb2IiLCAkaGFzaCkuIiB8ICIuCisJICAgICAgICAgIHF1b3RlX2NvbW1hbmQoJF5YLCAnLUNPJywgJy1NRW5jb2RlPWRlY29kZSxGQl9ERUZBVUxUJywgJy1wc2UnLAorCSAgICAgICAgICAgICckXyA9IGRlY29kZSgkZmUsICRfLCBGQl9ERUZBVUxUKSBpZiAhdXRmODo6ZGVjb2RlKCRfKTsnLAorCSAgICAgICAgICAgICctLScsICItZmU9JGZhbGxiYWNrX2VuY29kaW5nIikuIiB8ICIuCisJICAgICAgICAgIHF1b3RlX2NvbW1hbmQoJGhpZ2hsaWdodF9iaW4pLgorCSAgICAgICAgICAiIC0tcmVwbGFjZS10YWJzPTggLS1mcmFnbWVudCAkc3ludGF4X2FyZyB8IgorCQlvciBkaWVfZXJyb3IoNTAwLCAiQ291bGRuJ3Qgb3BlbiBmaWxlIG9yIHJ1biBzeW50YXggaGlnaGxpZ2h0ZXIiKTsKKwlyZXR1cm4gJGZkOworfQorCisjIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIyBmdW5jdGlvbnMgcHJpbnRpbmcgSFRNTDogaGVhZGVyLCBmb290ZXIsIGVycm9yIHBhZ2UKKworc3ViIGdldF9wYWdlX3RpdGxlIHsKKwlteSAkdGl0bGUgPSB0b191dGY4KCRzaXRlX25hbWUpOworCisJdW5sZXNzIChkZWZpbmVkICRwcm9qZWN0KSB7CisJCWlmIChkZWZpbmVkICRwcm9qZWN0X2ZpbHRlcikgeworCQkJJHRpdGxlIC49ICIgLSBwcm9qZWN0cyBpbiAnIiAuIGVzY19wYXRoKCRwcm9qZWN0X2ZpbHRlcikgLiAiJyI7CisJCX0KKwkJcmV0dXJuICR0aXRsZTsKKwl9CisJJHRpdGxlIC49ICIgLSAiIC4gdG9fdXRmOCgkcHJvamVjdCk7CisKKwlyZXR1cm4gJHRpdGxlIHVubGVzcyAoZGVmaW5lZCAkYWN0aW9uKTsKKwkkdGl0bGUgLj0gIi8kYWN0aW9uIjsgIyAkYWN0aW9uIGlzIFVTLUFTQ0lJICg3Yml0IEFTQ0lJKQorCisJcmV0dXJuICR0aXRsZSB1bmxlc3MgKGRlZmluZWQgJGZpbGVfbmFtZSk7CisJJHRpdGxlIC49ICIgLSAiIC4gZXNjX3BhdGgoJGZpbGVfbmFtZSk7CisJaWYgKCRhY3Rpb24gZXEgInRyZWUiICYmICRmaWxlX25hbWUgIX4gbXwvJHwpIHsKKwkJJHRpdGxlIC49ICIvIjsKKwl9CisKKwlyZXR1cm4gJHRpdGxlOworfQorCitzdWIgZ2V0X2NvbnRlbnRfdHlwZV9odG1sIHsKKwkjIHJlcXVpcmUgZXhwbGljaXQgc3VwcG9ydCBmcm9tIHRoZSBVQSBpZiB3ZSBhcmUgdG8gc2VuZCB0aGUgcGFnZSBhcworCSMgJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcsIG90aGVyd2lzZSBzZW5kIGl0IGFzIHBsYWluIG9sZCAndGV4dC9odG1sJy4KKwkjIHdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIE1TSUUgc29tZXRpbWVzIGdsb2JzICcqLyonLCBwcmV0ZW5kaW5nIHRvCisJIyBzdXBwb3J0IHhodG1sK3htbCBidXQgY2hva2luZyB3aGVuIGl0IGdldHMgd2hhdCBpdCBhc2tlZCBmb3IuCisJaWYgKGRlZmluZWQgJGNnaS0+aHR0cCgnSFRUUF9BQ0NFUFQnKSAmJgorCSAgICAkY2dpLT5odHRwKCdIVFRQX0FDQ0VQVCcpID1+IG0vKCx8O3xcc3xeKWFwcGxpY2F0aW9uXC94aHRtbFwreG1sKCx8O3xcc3wkKS8gJiYKKwkgICAgJGNnaS0+QWNjZXB0KCdhcHBsaWNhdGlvbi94aHRtbCt4bWwnKSAhPSAwKSB7CisJCXJldHVybiAnYXBwbGljYXRpb24veGh0bWwreG1sJzsKKwl9IGVsc2UgeworCQlyZXR1cm4gJ3RleHQvaHRtbCc7CisJfQorfQorCitzdWIgcHJpbnRfZmVlZF9tZXRhIHsKKwlpZiAoZGVmaW5lZCAkcHJvamVjdCkgeworCQlteSAlaHJlZl9wYXJhbXMgPSBnZXRfZmVlZF9pbmZvKCk7CisJCWlmICghZXhpc3RzICRocmVmX3BhcmFtc3snLXRpdGxlJ30pIHsKKwkJCSRocmVmX3BhcmFtc3snLXRpdGxlJ30gPSAnbG9nJzsKKwkJfQorCisJCWZvcmVhY2ggbXkgJGZvcm1hdCAocXcoUlNTIEF0b20pKSB7CisJCQlteSAkdHlwZSA9IGxjKCRmb3JtYXQpOworCQkJbXkgJWxpbmtfYXR0ciA9ICgKKwkJCQknLXJlbCcgPT4gJ2FsdGVybmF0ZScsCisJCQkJJy10aXRsZScgPT4gZXNjX2F0dHIoIiRwcm9qZWN0IC0gJGhyZWZfcGFyYW1zeyctdGl0bGUnfSAtICRmb3JtYXQgZmVlZCIpLAorCQkJCSctdHlwZScgPT4gImFwcGxpY2F0aW9uLyR0eXBlK3htbCIKKwkJCSk7CisKKwkJCSRocmVmX3BhcmFtc3snZXh0cmFfb3B0aW9ucyd9ID0gdW5kZWY7CisJCQkkaHJlZl9wYXJhbXN7J2FjdGlvbid9ID0gJHR5cGU7CisJCQkkbGlua19hdHRyeyctaHJlZid9ID0gZXNjX2F0dHIoaHJlZiglaHJlZl9wYXJhbXMpKTsKKwkJCXByaW50ICI8bGluayAiLgorCQkJICAgICAgInJlbD1cIiRsaW5rX2F0dHJ7Jy1yZWwnfVwiICIuCisJCQkgICAgICAidGl0bGU9XCIkbGlua19hdHRyeyctdGl0bGUnfVwiICIuCisJCQkgICAgICAiaHJlZj1cIiRsaW5rX2F0dHJ7Jy1ocmVmJ31cIiAiLgorCQkJICAgICAgInR5cGU9XCIkbGlua19hdHRyeyctdHlwZSd9XCIgIi4KKwkJCSAgICAgICIvPlxuIjsKKworCQkJJGhyZWZfcGFyYW1zeydleHRyYV9vcHRpb25zJ30gPSAnLS1uby1tZXJnZXMnOworCQkJJGxpbmtfYXR0cnsnLWhyZWYnfSA9IGVzY19hdHRyKGhyZWYoJWhyZWZfcGFyYW1zKSk7CisJCQkkbGlua19hdHRyeyctdGl0bGUnfSAuPSAnIChubyBtZXJnZXMpJzsKKwkJCXByaW50ICI8bGluayAiLgorCQkJICAgICAgInJlbD1cIiRsaW5rX2F0dHJ7Jy1yZWwnfVwiICIuCisJCQkgICAgICAidGl0bGU9XCIkbGlua19hdHRyeyctdGl0bGUnfVwiICIuCisJCQkgICAgICAiaHJlZj1cIiRsaW5rX2F0dHJ7Jy1ocmVmJ31cIiAiLgorCQkJICAgICAgInR5cGU9XCIkbGlua19hdHRyeyctdHlwZSd9XCIgIi4KKwkJCSAgICAgICIvPlxuIjsKKwkJfQorCisJfSBlbHNlIHsKKwkJcHJpbnRmKCc8bGluayByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IiVzIHByb2plY3RzIGxpc3QiICcuCisJCSAgICAgICAnaHJlZj0iJXMiIHR5cGU9InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiIC8+Jy4iXG4iLAorCQkgICAgICAgZXNjX2F0dHIoJHNpdGVfbmFtZSksCisJCSAgICAgICBlc2NfYXR0cihocmVmKHByb2plY3Q9PnVuZGVmLCBhY3Rpb249PiJwcm9qZWN0X2luZGV4IikpKTsKKwkJcHJpbnRmKCc8bGluayByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IiVzIHByb2plY3RzIGZlZWRzIiAnLgorCQkgICAgICAgJ2hyZWY9IiVzIiB0eXBlPSJ0ZXh0L3gtb3BtbCIgLz4nLiJcbiIsCisJCSAgICAgICBlc2NfYXR0cigkc2l0ZV9uYW1lKSwKKwkJICAgICAgIGVzY19hdHRyKGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+Im9wbWwiKSkpOworCX0KK30KKworc3ViIHByaW50X2hlYWRlcl9saW5rcyB7CisJbXkgJHN0YXR1cyA9IHNoaWZ0OworCisJIyBwcmludCBvdXQgZWFjaCBzdHlsZXNoZWV0IHRoYXQgZXhpc3QsIHByb3ZpZGluZyBiYWNrd2FyZHMgY2FwYWJpbGl0eQorCSMgZm9yIHRob3NlIHBlb3BsZSB3aG8gZGVmaW5lZCAkc3R5bGVzaGVldCBpbiBhIGNvbmZpZyBmaWxlCisJaWYgKGRlZmluZWQgJHN0eWxlc2hlZXQpIHsKKwkJcHJpbnQgJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuZXNjX3VybCgkc3R5bGVzaGVldCkuJyIvPicuIlxuIjsKKwl9IGVsc2UgeworCQlmb3JlYWNoIG15ICRzdHlsZXNoZWV0IChAc3R5bGVzaGVldHMpIHsKKwkJCW5leHQgdW5sZXNzICRzdHlsZXNoZWV0OworCQkJcHJpbnQgJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuZXNjX3VybCgkc3R5bGVzaGVldCkuJyIvPicuIlxuIjsKKwkJfQorCX0KKwlwcmludF9mZWVkX21ldGEoKQorCQlpZiAoJHN0YXR1cyBlcSAnMjAwIE9LJyk7CisJaWYgKGRlZmluZWQgJGZhdmljb24pIHsKKwkJcHJpbnQgcXEoPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSIpLmVzY191cmwoJGZhdmljb24pLnFxKCIgdHlwZT0iaW1hZ2UvcG5nIiAvPlxuKTsKKwl9Cit9CisKK3N1YiBwcmludF9uYXZfYnJlYWRjcnVtYnNfcGF0aCB7CisJbXkgJGRpcnByZWZpeCA9IHVuZGVmOworCXdoaWxlIChteSAkcGFydCA9IHNoaWZ0KSB7CisJCSRkaXJwcmVmaXggLj0gIi8iIGlmIGRlZmluZWQgJGRpcnByZWZpeDsKKwkJJGRpcnByZWZpeCAuPSAkcGFydDsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0ID0+IHVuZGVmLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RfZmlsdGVyID0+ICRkaXJwcmVmaXgsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0+ICJwcm9qZWN0X2xpc3QiKX0sCisJCQkgICAgICBlc2NfaHRtbCgkcGFydCkpIC4gIiAvICI7CisJfQorfQorCitzdWIgcHJpbnRfbmF2X2JyZWFkY3J1bWJzIHsKKwlteSAlb3B0cyA9IEBfOworCisJZm9yIG15ICRjcnVtYiAoQGV4dHJhX2JyZWFkY3J1bWJzLCBbICRob21lX2xpbmtfc3RyID0+ICRob21lX2xpbmsgXSkgeworCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBlc2NfdXJsKCRjcnVtYi0+WzFdKX0sICRjcnVtYi0+WzBdKSAuICIgLyAiOworCX0KKwlpZiAoZGVmaW5lZCAkcHJvamVjdCkgeworCQlteSBAZGlybmFtZSA9IHNwbGl0ICcvJywgJHByb2plY3Q7CisJCW15ICRwcm9qZWN0YmFzZW5hbWUgPSBwb3AgQGRpcm5hbWU7CisJCXByaW50X25hdl9icmVhZGNydW1ic19wYXRoKEBkaXJuYW1lKTsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJzdW1tYXJ5Iil9LCBlc2NfaHRtbCgkcHJvamVjdGJhc2VuYW1lKSk7CisJCWlmIChkZWZpbmVkICRhY3Rpb24pIHsKKwkJCW15ICRhY3Rpb25fcHJpbnQgPSAkYWN0aW9uIDsKKwkJCWlmIChkZWZpbmVkICRvcHRzey1hY3Rpb25fZXh0cmF9KSB7CisJCQkJJGFjdGlvbl9wcmludCA9ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4kYWN0aW9uKX0sCisJCQkJCSRhY3Rpb24pOworCQkJfQorCQkJcHJpbnQgIiAvICRhY3Rpb25fcHJpbnQiOworCQl9CisJCWlmIChkZWZpbmVkICRvcHRzey1hY3Rpb25fZXh0cmF9KSB7CisJCQlwcmludCAiIC8gJG9wdHN7LWFjdGlvbl9leHRyYX0iOworCQl9CisJCXByaW50ICJcbiI7CisJfSBlbHNpZiAoZGVmaW5lZCAkcHJvamVjdF9maWx0ZXIpIHsKKwkJcHJpbnRfbmF2X2JyZWFkY3J1bWJzX3BhdGgoc3BsaXQgJy8nLCAkcHJvamVjdF9maWx0ZXIpOworCX0KK30KKworc3ViIHByaW50X3NlYXJjaF9mb3JtIHsKKwlpZiAoIWRlZmluZWQgJHNlYXJjaHRleHQpIHsKKwkJJHNlYXJjaHRleHQgPSAiIjsKKwl9CisJbXkgJHNlYXJjaF9oYXNoOworCWlmIChkZWZpbmVkICRoYXNoX2Jhc2UpIHsKKwkJJHNlYXJjaF9oYXNoID0gJGhhc2hfYmFzZTsKKwl9IGVsc2lmIChkZWZpbmVkICRoYXNoKSB7CisJCSRzZWFyY2hfaGFzaCA9ICRoYXNoOworCX0gZWxzZSB7CisJCSRzZWFyY2hfaGFzaCA9ICJIRUFEIjsKKwl9CisJbXkgJGFjdGlvbiA9ICRteV91cmk7CisJbXkgJHVzZV9wYXRoaW5mbyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdwYXRoaW5mbycpOworCWlmICgkdXNlX3BhdGhpbmZvKSB7CisJCSRhY3Rpb24gLj0gIi8iLmVzY191cmwoJHByb2plY3QpOworCX0KKwlwcmludCAkY2dpLT5zdGFydF9mb3JtKC1tZXRob2QgPT4gImdldCIsIC1hY3Rpb24gPT4gJGFjdGlvbikgLgorCSAgICAgICI8ZGl2IGNsYXNzPVwic2VhcmNoXCI+XG4iIC4KKwkgICAgICAoISR1c2VfcGF0aGluZm8gJiYKKwkgICAgICAkY2dpLT5pbnB1dCh7LW5hbWU9PiJwIiwgLXZhbHVlPT4kcHJvamVjdCwgLXR5cGU9PiJoaWRkZW4ifSkgLiAiXG4iKSAuCisJICAgICAgJGNnaS0+aW5wdXQoey1uYW1lPT4iYSIsIC12YWx1ZT0+InNlYXJjaCIsIC10eXBlPT4iaGlkZGVuIn0pIC4gIlxuIiAuCisJICAgICAgJGNnaS0+aW5wdXQoey1uYW1lPT4iaCIsIC12YWx1ZT0+JHNlYXJjaF9oYXNoLCAtdHlwZT0+ImhpZGRlbiJ9KSAuICJcbiIgLgorCSAgICAgICRjZ2ktPnBvcHVwX21lbnUoLW5hbWUgPT4gJ3N0JywgLWRlZmF1bHQgPT4gJ2NvbW1pdCcsCisJICAgICAgICAgICAgICAgICAgICAgICAtdmFsdWVzID0+IFsnY29tbWl0JywgJ2dyZXAnLCAnYXV0aG9yJywgJ2NvbW1pdHRlcicsICdwaWNrYXhlJ10pIC4KKwkgICAgICAiICIgLiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InNlYXJjaF9oZWxwIiksCisJCQkgICAgIC10aXRsZSA9PiAic2VhcmNoIGhlbHAiIH0sICI/IikgLiAiIHNlYXJjaDpcbiIsCisJICAgICAgJGNnaS0+dGV4dGZpZWxkKC1uYW1lID0+ICJzIiwgLXZhbHVlID0+ICRzZWFyY2h0ZXh0LCAtb3ZlcnJpZGUgPT4gMSkgLiAiXG4iIC4KKwkgICAgICAiPHNwYW4gdGl0bGU9XCJFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb25cIj4iIC4KKwkgICAgICAkY2dpLT5jaGVja2JveCgtbmFtZSA9PiAnc3InLCAtdmFsdWUgPT4gMSwgLWxhYmVsID0+ICdyZScsCisJICAgICAgICAgICAgICAgICAgICAgLWNoZWNrZWQgPT4gJHNlYXJjaF91c2VfcmVnZXhwKSAuCisJICAgICAgIjwvc3Bhbj4iIC4KKwkgICAgICAiPC9kaXY+IiAuCisJICAgICAgJGNnaS0+ZW5kX2Zvcm0oKSAuICJcbiI7Cit9CisKK3N1YiBnaXRfaGVhZGVyX2h0bWwgeworCW15ICRzdGF0dXMgPSBzaGlmdCB8fCAiMjAwIE9LIjsKKwlteSAkZXhwaXJlcyA9IHNoaWZ0OworCW15ICVvcHRzID0gQF87CisKKwlteSAkdGl0bGUgPSBnZXRfcGFnZV90aXRsZSgpOworCW15ICRjb250ZW50X3R5cGUgPSBnZXRfY29udGVudF90eXBlX2h0bWwoKTsKKwlwcmludCAkY2dpLT5oZWFkZXIoLXR5cGU9PiRjb250ZW50X3R5cGUsIC1jaGFyc2V0ID0+ICd1dGYtOCcsCisJICAgICAgICAgICAgICAgICAgIC1zdGF0dXM9PiAkc3RhdHVzLCAtZXhwaXJlcyA9PiAkZXhwaXJlcykKKwkJdW5sZXNzICgkb3B0c3snLW5vX2h0dHBfaGVhZGVyJ30pOworCW15ICRtb2RfcGVybF92ZXJzaW9uID0gJEVOVnsnTU9EX1BFUkwnfSA/ICIgJEVOVnsnTU9EX1BFUkwnfSIgOiAnJzsKKwlwcmludCA8PEVPRjsKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuLVVTIiBsYW5nPSJlbi1VUyI+Cis8IS0tIGdpdCB3ZWIgaW50ZXJmYWNlIHZlcnNpb24gJHZlcnNpb24sIChDKSAyMDA1LTIwMDYsIEtheSBTaWV2ZXJzIDxrYXkuc2lldmVyc1xAdnJmeS5vcmc+LCBDaHJpc3RpYW4gR2llcmtlIC0tPgorPCEtLSBnaXQgY29yZSBiaW5hcmllcyB2ZXJzaW9uICRnaXRfdmVyc2lvbiAtLT4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSIkY29udGVudF90eXBlOyBjaGFyc2V0PXV0Zi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9ImdpdHdlYi8kdmVyc2lvbiBnaXQvJGdpdF92ZXJzaW9uJG1vZF9wZXJsX3ZlcnNpb24iLz4KKzxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0iaW5kZXgsIG5vZm9sbG93Ii8+Cis8dGl0bGU+JHRpdGxlPC90aXRsZT4KK0VPRgorCSMgdGhlIHN0eWxlc2hlZXQsIGZhdmljb24gZXRjIHVybHMgd29uJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCBwYXRoX2luZm8KKwkjIHVubGVzcyB3ZSBzZXQgdGhlIGFwcHJvcHJpYXRlIGJhc2UgVVJMCisJaWYgKCRFTlZ7J1BBVEhfSU5GTyd9KSB7CisJCXByaW50ICI8YmFzZSBocmVmPVwiIi5lc2NfdXJsKCRiYXNlX3VybCkuIlwiIC8+XG4iOworCX0KKwlwcmludF9oZWFkZXJfbGlua3MoJHN0YXR1cyk7CisKKwlpZiAoZGVmaW5lZCAkc2l0ZV9odG1sX2hlYWRfc3RyaW5nKSB7CisJCXByaW50IHRvX3V0ZjgoJHNpdGVfaHRtbF9oZWFkX3N0cmluZyk7CisJfQorCisJcHJpbnQgIjwvaGVhZD5cbiIgLgorCSAgICAgICI8Ym9keT5cbiI7CisKKwlpZiAoZGVmaW5lZCAkc2l0ZV9oZWFkZXIgJiYgLWYgJHNpdGVfaGVhZGVyKSB7CisJCWluc2VydF9maWxlKCRzaXRlX2hlYWRlcik7CisJfQorCisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX2hlYWRlclwiPlxuIjsKKwlpZiAoZGVmaW5lZCAkbG9nbykgeworCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBlc2NfdXJsKCRsb2dvX3VybCksCisJCSAgICAgICAgICAgICAgIC10aXRsZSA9PiAkbG9nb19sYWJlbH0sCisJCSAgICAgICAgICAgICAgJGNnaS0+aW1nKHstc3JjID0+IGVzY191cmwoJGxvZ28pLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgLXdpZHRoID0+IDcyLCAtaGVpZ2h0ID0+IDI3LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgLWFsdCA9PiAiZ2l0IiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgIC1jbGFzcyA9PiAibG9nbyJ9KSk7CisJfQorCXByaW50X25hdl9icmVhZGNydW1icyglb3B0cyk7CisJcHJpbnQgIjwvZGl2PlxuIjsKKworCW15ICRoYXZlX3NlYXJjaCA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdzZWFyY2gnKTsKKwlpZiAoZGVmaW5lZCAkcHJvamVjdCAmJiAkaGF2ZV9zZWFyY2gpIHsKKwkJcHJpbnRfc2VhcmNoX2Zvcm0oKTsKKwl9Cit9CisKK3N1YiBnaXRfZm9vdGVyX2h0bWwgeworCW15ICRmZWVkX2NsYXNzID0gJ3Jzc19sb2dvJzsKKworCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9mb290ZXJcIj5cbiI7CisJaWYgKGRlZmluZWQgJHByb2plY3QpIHsKKwkJbXkgJGRlc2NyID0gZ2l0X2dldF9wcm9qZWN0X2Rlc2NyaXB0aW9uKCRwcm9qZWN0KTsKKwkJaWYgKGRlZmluZWQgJGRlc2NyKSB7CisJCQlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfZm9vdGVyX3RleHRcIj4iIC4gZXNjX2h0bWwoJGRlc2NyKSAuICI8L2Rpdj5cbiI7CisJCX0KKworCQlteSAlaHJlZl9wYXJhbXMgPSBnZXRfZmVlZF9pbmZvKCk7CisJCWlmICghJWhyZWZfcGFyYW1zKSB7CisJCQkkZmVlZF9jbGFzcyAuPSAnIGdlbmVyaWMnOworCQl9CisJCSRocmVmX3BhcmFtc3snLXRpdGxlJ30gfHw9ICdsb2cnOworCisJCWZvcmVhY2ggbXkgJGZvcm1hdCAocXcoUlNTIEF0b20pKSB7CisJCQkkaHJlZl9wYXJhbXN7J2FjdGlvbid9ID0gbGMoJGZvcm1hdCk7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKCVocmVmX3BhcmFtcyksCisJCQkgICAgICAgICAgICAgIC10aXRsZSA9PiAiJGhyZWZfcGFyYW1zeyctdGl0bGUnfSAkZm9ybWF0IGZlZWQiLAorCQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gJGZlZWRfY2xhc3N9LCAkZm9ybWF0KS4iXG4iOworCQl9CisKKwl9IGVsc2UgeworCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PnVuZGVmLCBhY3Rpb249PiJvcG1sIiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0X2ZpbHRlciA9PiAkcHJvamVjdF9maWx0ZXIpLAorCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAkZmVlZF9jbGFzc30sICJPUE1MIikgLiAiICI7CisJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+InByb2plY3RfaW5kZXgiLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RfZmlsdGVyID0+ICRwcm9qZWN0X2ZpbHRlciksCisJCSAgICAgICAgICAgICAgLWNsYXNzID0+ICRmZWVkX2NsYXNzfSwgIlRYVCIpIC4gIlxuIjsKKwl9CisJcHJpbnQgIjwvZGl2PlxuIjsgIyBjbGFzcz0icGFnZV9mb290ZXIiCisKKwlpZiAoZGVmaW5lZCAkdDAgJiYgZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3RpbWVkJykpIHsKKwkJcHJpbnQgIjxkaXYgaWQ9XCJnZW5lcmF0aW5nX2luZm9cIj5cbiI7CisJCXByaW50ICdUaGlzIHBhZ2UgdG9vayAnLgorCQkgICAgICAnPHNwYW4gaWQ9ImdlbmVyYXRpbmdfdGltZSIgY2xhc3M9InRpbWVfc3BhbiI+Jy4KKwkJICAgICAgdHZfaW50ZXJ2YWwoJHQwLCBbIGdldHRpbWVvZmRheSgpIF0pLgorCQkgICAgICAnIHNlY29uZHMgPC9zcGFuPicuCisJCSAgICAgICcgYW5kICcuCisJCSAgICAgICc8c3BhbiBpZD0iZ2VuZXJhdGluZ19jbWQiPicuCisJCSAgICAgICRudW1iZXJfb2ZfZ2l0X2NtZHMuCisJCSAgICAgICc8L3NwYW4+IGdpdCBjb21tYW5kcyAnLgorCQkgICAgICAiIHRvIGdlbmVyYXRlLlxuIjsKKwkJcHJpbnQgIjwvZGl2PlxuIjsgIyBjbGFzcz0icGFnZV9mb290ZXIiCisJfQorCisJaWYgKGRlZmluZWQgJHNpdGVfZm9vdGVyICYmIC1mICRzaXRlX2Zvb3RlcikgeworCQlpbnNlcnRfZmlsZSgkc2l0ZV9mb290ZXIpOworCX0KKworCXByaW50IHFxITxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IiEuZXNjX3VybCgkamF2YXNjcmlwdCkucXEhIj48L3NjcmlwdD5cbiE7CisJaWYgKGRlZmluZWQgJGFjdGlvbiAmJgorCSAgICAkYWN0aW9uIGVxICdibGFtZV9pbmNyZW1lbnRhbCcpIHsKKwkJcHJpbnQgcXEhPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPlxuIS4KKwkJICAgICAgcXEhc3RhcnRCbGFtZSgiIS4gZXNjX2F0dHIoaHJlZihhY3Rpb249PiJibGFtZV9kYXRhIiwgLXJlcGxheT0+MSkpIC5xcSEiLFxuIS4KKwkJICAgICAgcXEhICAgICAgICAgICAiIS4gZXNjX2F0dHIoaHJlZigpKSAucXEhIik7XG4hLgorCQkgICAgICBxcSE8L3NjcmlwdD5cbiE7CisJfSBlbHNlIHsKKwkJbXkgKCRqc3RpbWV6b25lLCAkdHpfY29va2llLCAkZGF0ZXRpbWVfY2xhc3MpID0KKwkJCWdpdHdlYl9nZXRfZmVhdHVyZSgnamF2YXNjcmlwdC10aW1lem9uZScpOworCisJCXByaW50IHFxITxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5cbiEuCisJCSAgICAgIHFxIXdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4hOworCQlpZiAoZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2phdmFzY3JpcHQtYWN0aW9ucycpKSB7CisJCQlwcmludCBxcSEJZml4TGlua3MoKTtcbiE7CisJCX0KKwkJaWYgKCRqc3RpbWV6b25lICYmICR0el9jb29raWUgJiYgJGRhdGV0aW1lX2NsYXNzKSB7CisJCQlwcmludCBxcSEJdmFyIHR6X2Nvb2tpZSA9IHsgbmFtZTogJyR0el9jb29raWUnLCBleHBpcmVzOiAxNCwgcGF0aDogJy8nIH07XG4hLiAjIGluIGRheXMKKwkJCSAgICAgIHFxIQlvbmxvYWRUWlNldHVwKCckanN0aW1lem9uZScsIHR6X2Nvb2tpZSwgJyRkYXRldGltZV9jbGFzcycpO1xuITsKKwkJfQorCQlwcmludCBxcSF9O1xuIS4KKwkJICAgICAgcXEhPC9zY3JpcHQ+XG4hOworCX0KKworCXByaW50ICI8L2JvZHk+XG4iIC4KKwkgICAgICAiPC9odG1sPiI7Cit9CisKKyMgZGllX2Vycm9yKDxodHRwX3N0YXR1c19jb2RlPiwgPGVycm9yX21lc3NhZ2U+WywgPGRldGFpbGVkX2h0bWxfZGVzY3JpcHRpb24+XSkKKyMgRXhhbXBsZTogZGllX2Vycm9yKDQwNCwgJ0hhc2ggbm90IGZvdW5kJykKKyMgQnkgY29udmVudGlvbiwgdXNlIHRoZSBmb2xsb3dpbmcgc3RhdHVzIGNvZGVzIChhcyBkZWZpbmVkIGluIFJGQyAyNjE2KToKKyMgNDAwOiBJbnZhbGlkIG9yIG1pc3NpbmcgQ0dJIHBhcmFtZXRlcnMsIG9yCisjICAgICAgcmVxdWVzdGVkIG9iamVjdCBleGlzdHMgYnV0IGhhcyB3cm9uZyB0eXBlLgorIyA0MDM6IFJlcXVlc3RlZCBmZWF0dXJlIChsaWtlICJwaWNrYXhlIiBvciAic25hcHNob3QiKSBub3QgZW5hYmxlZCBvbgorIyAgICAgIHRoaXMgc2VydmVyIG9yIHByb2plY3QuCisjIDQwNDogUmVxdWVzdGVkIG9iamVjdC9yZXZpc2lvbi9wcm9qZWN0IGRvZXNuJ3QgZXhpc3QuCisjIDUwMDogVGhlIHNlcnZlciBpc24ndCBjb25maWd1cmVkIHByb3Blcmx5LCBvcgorIyAgICAgIGFuIGludGVybmFsIGVycm9yIG9jY3VycmVkIChlLmcuIGZhaWxlZCBhc3NlcnRpb25zIGNhdXNlZCBieSBidWdzKSwgb3IKKyMgICAgICBhbiB1bmtub3duIGVycm9yIG9jY3VycmVkIChlLmcuIHRoZSBnaXQgYmluYXJ5IGRpZWQgdW5leHBlY3RlZGx5KS4KKyMgNTAzOiBUaGUgc2VydmVyIGlzIGN1cnJlbnRseSB1bmF2YWlsYWJsZSAoYmVjYXVzZSBpdCBpcyBvdmVybG9hZGVkLAorIyAgICAgIG9yIGRvd24gZm9yIG1haW50ZW5hbmNlKS4gIEdlbmVyYWxseSwgdGhpcyBpcyBhIHRlbXBvcmFyeSBzdGF0ZS4KK3N1YiBkaWVfZXJyb3IgeworCW15ICRzdGF0dXMgPSBzaGlmdCB8fCA1MDA7CisJbXkgJGVycm9yID0gZXNjX2h0bWwoc2hpZnQpIHx8ICJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IiOworCW15ICRleHRyYSA9IHNoaWZ0OworCW15ICVvcHRzID0gQF87CisKKwlteSAlaHR0cF9yZXNwb25zZXMgPSAoCisJCTQwMCA9PiAnNDAwIEJhZCBSZXF1ZXN0JywKKwkJNDAzID0+ICc0MDMgRm9yYmlkZGVuJywKKwkJNDA0ID0+ICc0MDQgTm90IEZvdW5kJywKKwkJNTAwID0+ICc1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yJywKKwkJNTAzID0+ICc1MDMgU2VydmljZSBVbmF2YWlsYWJsZScsCisJKTsKKwlnaXRfaGVhZGVyX2h0bWwoJGh0dHBfcmVzcG9uc2VzeyRzdGF0dXN9LCB1bmRlZiwgJW9wdHMpOworCXByaW50IDw8RU9GOworPGRpdiBjbGFzcz0icGFnZV9ib2R5Ij4KKzxiciAvPjxiciAvPgorJHN0YXR1cyAtICRlcnJvcgorPGJyIC8+CitFT0YKKwlpZiAoZGVmaW5lZCAkZXh0cmEpIHsKKwkJcHJpbnQgIjxociAvPlxuIiAuCisJCSAgICAgICIkZXh0cmFcbiI7CisJfQorCXByaW50ICI8L2Rpdj5cbiI7CisKKwlnaXRfZm9vdGVyX2h0bWwoKTsKKwlnb3RvIERPTkVfR0lUV0VCCisJCXVubGVzcyAoJG9wdHN7Jy1lcnJvcl9oYW5kbGVyJ30pOworfQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIyBmdW5jdGlvbnMgcHJpbnRpbmcgb3Igb3V0cHV0dGluZyBIVE1MOiBuYXZpZ2F0aW9uCisKK3N1YiBnaXRfcHJpbnRfcGFnZV9uYXYgeworCW15ICgkY3VycmVudCwgJHN1cHByZXNzLCAkaGVhZCwgJHRyZWVoZWFkLCAkdHJlZWJhc2UsICRleHRyYSkgPSBAXzsKKwkkZXh0cmEgPSAnJyBpZiAhZGVmaW5lZCAkZXh0cmE7ICMgcGFnZXIgb3IgZm9ybWF0cworCisJbXkgQG5hdnMgPSBxdyhzdW1tYXJ5IHNob3J0bG9nIGxvZyBjb21taXQgY29tbWl0ZGlmZiB0cmVlKTsKKwlpZiAoJHN1cHByZXNzKSB7CisJCUBuYXZzID0gZ3JlcCB7ICRfIG5lICRzdXBwcmVzcyB9IEBuYXZzOworCX0KKworCW15ICVhcmcgPSBtYXAgeyAkXyA9PiB7YWN0aW9uPT4kX30gfSBAbmF2czsKKwlpZiAoZGVmaW5lZCAkaGVhZCkgeworCQlmb3IgKHF3KGNvbW1pdCBjb21taXRkaWZmKSkgeworCQkJJGFyZ3skX317J2hhc2gnfSA9ICRoZWFkOworCQl9CisJCWlmICgkY3VycmVudCA9fiBtL14odHJlZSB8IGxvZyB8IHNob3J0bG9nIHwgY29tbWl0IHwgY29tbWl0ZGlmZiB8IHNlYXJjaCkkL3gpIHsKKwkJCWZvciAocXcoc2hvcnRsb2cgbG9nKSkgeworCQkJCSRhcmd7JF99eydoYXNoJ30gPSAkaGVhZDsKKwkJCX0KKwkJfQorCX0KKworCSRhcmd7J3RyZWUnfXsnaGFzaCd9ID0gJHRyZWVoZWFkIGlmIGRlZmluZWQgJHRyZWVoZWFkOworCSRhcmd7J3RyZWUnfXsnaGFzaF9iYXNlJ30gPSAkdHJlZWJhc2UgaWYgZGVmaW5lZCAkdHJlZWJhc2U7CisKKwlteSBAYWN0aW9ucyA9IGdpdHdlYl9nZXRfZmVhdHVyZSgnYWN0aW9ucycpOworCW15ICVyZXBsID0gKAorCQknJScgPT4gJyUnLAorCQknbicgPT4gJHByb2plY3QsICAgICAgICAgIyBwcm9qZWN0IG5hbWUKKwkJJ2YnID0+ICRnaXRfZGlyLCAgICAgICAgICMgcHJvamVjdCBwYXRoIHdpdGhpbiBmaWxlc3lzdGVtCisJCSdoJyA9PiAkdHJlZWhlYWQgfHwgJycsICAjIGN1cnJlbnQgaGFzaCAoJ2gnIHBhcmFtZXRlcikKKwkJJ2InID0+ICR0cmVlYmFzZSB8fCAnJywgICMgaGFzaCBiYXNlICgnaGInIHBhcmFtZXRlcikKKwkpOworCXdoaWxlIChAYWN0aW9ucykgeworCQlteSAoJGxhYmVsLCAkbGluaywgJHBvcykgPSBzcGxpY2UoQGFjdGlvbnMsMCwzKTsKKwkJIyBpbnNlcnQKKwkJQG5hdnMgPSBtYXAgeyAkXyBlcSAkcG9zID8gKCRfLCAkbGFiZWwpIDogJF8gfSBAbmF2czsKKwkJIyBtdW5jaCBtdW5jaAorCQkkbGluayA9fiBzLyUoWyVuZmhiXSkvJHJlcGx7JDF9L2c7CisJCSRhcmd7JGxhYmVsfXsnX2hyZWYnfSA9ICRsaW5rOworCX0KKworCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9uYXZcIj5cbiIgLgorCQkoam9pbiAiIHwgIiwKKwkJIG1hcCB7ICRfIGVxICRjdXJyZW50ID8KKwkJICAgICAgICRfIDogJGNnaS0+YSh7LWhyZWYgPT4gKCRhcmd7JF99e19ocmVmfSA/ICRhcmd7JF99e19ocmVmfSA6IGhyZWYoJXskYXJneyRffX0pKX0sICIkXyIpCisJCSB9IEBuYXZzKTsKKwlwcmludCAiPGJyLz5cbiRleHRyYTxici8+XG4iIC4KKwkgICAgICAiPC9kaXY+XG4iOworfQorCisjIHJldHVybnMgYSBzdWJtZW51IGZvciB0aGUgbmF2aWdhdGlvbiBvZiB0aGUgcmVmcyB2aWV3cyAodGFncywgaGVhZHMsCisjIHJlbW90ZXMpIHdpdGggdGhlIGN1cnJlbnQgdmlldyBkaXNhYmxlZCBhbmQgdGhlIHJlbW90ZXMgdmlldyBvbmx5CisjIGF2YWlsYWJsZSBpZiB0aGUgZmVhdHVyZSBpcyBlbmFibGVkCitzdWIgZm9ybWF0X3JlZl92aWV3cyB7CisJbXkgKCRjdXJyZW50KSA9IEBfOworCW15IEByZWZfdmlld3MgPSBxd3t0YWdzIGhlYWRzfTsKKwlwdXNoIEByZWZfdmlld3MsICdyZW1vdGVzJyBpZiBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgncmVtb3RlX2hlYWRzJyk7CisJcmV0dXJuIGpvaW4gIiB8ICIsIG1hcCB7CisJCSRfIGVxICRjdXJyZW50ID8gJF8gOgorCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+JF8pfSwgJF8pCisJfSBAcmVmX3ZpZXdzCit9CisKK3N1YiBmb3JtYXRfcGFnaW5nX25hdiB7CisJbXkgKCRhY3Rpb24sICRwYWdlLCAkaGFzX25leHRfbGluaykgPSBAXzsKKwlteSAkcGFnaW5nX25hdjsKKworCisJaWYgKCRwYWdlID4gMCkgeworCQkkcGFnaW5nX25hdiAuPQorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLCBwYWdlPT51bmRlZil9LCAiZmlyc3QiKSAuCisJCQkiICZzZG90OyAiIC4KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwgcGFnZT0+JHBhZ2UtMSksCisJCQkgICAgICAgICAtYWNjZXNza2V5ID0+ICJwIiwgLXRpdGxlID0+ICJBbHQtcCJ9LCAicHJldiIpOworCX0gZWxzZSB7CisJCSRwYWdpbmdfbmF2IC49ICJmaXJzdCAmc2RvdDsgcHJldiI7CisJfQorCisJaWYgKCRoYXNfbmV4dF9saW5rKSB7CisJCSRwYWdpbmdfbmF2IC49ICIgJnNkb3Q7ICIgLgorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLCBwYWdlPT4kcGFnZSsxKSwKKwkJCSAgICAgICAgIC1hY2Nlc3NrZXkgPT4gIm4iLCAtdGl0bGUgPT4gIkFsdC1uIn0sICJuZXh0Iik7CisJfSBlbHNlIHsKKwkJJHBhZ2luZ19uYXYgLj0gIiAmc2RvdDsgbmV4dCI7CisJfQorCisJcmV0dXJuICRwYWdpbmdfbmF2OworfQorCisjIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisjIyBmdW5jdGlvbnMgcHJpbnRpbmcgb3Igb3V0cHV0dGluZyBIVE1MOiBkaXYKKworc3ViIGdpdF9wcmludF9oZWFkZXJfZGl2IHsKKwlteSAoJGFjdGlvbiwgJHRpdGxlLCAkaGFzaCwgJGhhc2hfYmFzZSkgPSBAXzsKKwlteSAlYXJncyA9ICgpOworCisJJGFyZ3N7J2FjdGlvbid9ID0gJGFjdGlvbjsKKwkkYXJnc3snaGFzaCd9ID0gJGhhc2ggaWYgJGhhc2g7CisJJGFyZ3N7J2hhc2hfYmFzZSd9ID0gJGhhc2hfYmFzZSBpZiAkaGFzaF9iYXNlOworCisJcHJpbnQgIjxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiIgLgorCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoJWFyZ3MpLCAtY2xhc3MgPT4gInRpdGxlIn0sCisJICAgICAgJHRpdGxlID8gJHRpdGxlIDogJGFjdGlvbikgLgorCSAgICAgICJcbjwvZGl2PlxuIjsKK30KKworc3ViIGZvcm1hdF9yZXBvX3VybCB7CisJbXkgKCRuYW1lLCAkdXJsKSA9IEBfOworCXJldHVybiAiPHRyIGNsYXNzPVwibWV0YWRhdGFfdXJsXCI+PHRkPiRuYW1lPC90ZD48dGQ+JHVybDwvdGQ+PC90cj5cbiI7Cit9CisKKyMgR3JvdXAgb3V0cHV0IGJ5IHBsYWNpbmcgaXQgaW4gYSBESVYgZWxlbWVudCBhbmQgYWRkaW5nIGEgaGVhZGVyLgorIyBPcHRpb25zIGZvciBzdGFydF9kaXYoKSBjYW4gYmUgcHJvdmlkZWQgYnkgcGFzc2luZyBhIGhhc2ggcmVmZXJlbmNlIGFzIHRoZQorIyBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlIGZ1bmN0aW9uLgorIyBPcHRpb25zIHRvIGdpdF9wcmludF9oZWFkZXJfZGl2KCkgY2FuIGJlIHByb3ZpZGVkIGJ5IHBhc3NpbmcgYW4gYXJyYXkKKyMgcmVmZXJlbmNlLiBUaGlzIG11c3QgZm9sbG93IHRoZSBvcHRpb25zIHRvIHN0YXJ0X2RpdiBpZiB0aGV5IGFyZSBwcmVzZW50LgorIyBUaGUgY29udGVudCBjYW4gYmUgYSBzY2FsYXIsIHdoaWNoIGlzIG91dHB1dCBhcy1pcywgYSBzY2FsYXIgcmVmZXJlbmNlLCB3aGljaAorIyBpcyBvdXRwdXQgYWZ0ZXIgaHRtbCBlc2NhcGluZywgYW4gSU8gaGFuZGxlIHBhc3NlZCBlaXRoZXIgYXMgKmhhbmRsZSBvcgorIyAqaGFuZGxle0lPfSwgb3IgYSBmdW5jdGlvbiByZWZlcmVuY2UuIEluIHRoZSBsYXR0ZXIgY2FzZSBhbGwgZm9sbG93aW5nCisjIHBhcmFtZXRlcnMgd2lsbCBiZSB0YWtlbiBhcyBhcmd1bWVudCB0byB0aGUgY29udGVudCBmdW5jdGlvbiBjYWxsLgorc3ViIGdpdF9wcmludF9zZWN0aW9uIHsKKwlteSAoJGRpdl9hcmdzLCAkaGVhZGVyX2FyZ3MsICRjb250ZW50KTsKKwlteSAkYXJnID0gc2hpZnQ7CisJaWYgKHJlZigkYXJnKSBlcSAnSEFTSCcpIHsKKwkJJGRpdl9hcmdzID0gJGFyZzsKKwkJJGFyZyA9IHNoaWZ0OworCX0KKwlpZiAocmVmKCRhcmcpIGVxICdBUlJBWScpIHsKKwkJJGhlYWRlcl9hcmdzID0gJGFyZzsKKwkJJGFyZyA9IHNoaWZ0OworCX0KKwkkY29udGVudCA9ICRhcmc7CisKKwlwcmludCAkY2dpLT5zdGFydF9kaXYoJGRpdl9hcmdzKTsKKwlnaXRfcHJpbnRfaGVhZGVyX2RpdihAJGhlYWRlcl9hcmdzKTsKKworCWlmIChyZWYoJGNvbnRlbnQpIGVxICdDT0RFJykgeworCQkkY29udGVudC0+KEBfKTsKKwl9IGVsc2lmIChyZWYoJGNvbnRlbnQpIGVxICdTQ0FMQVInKSB7CisJCXByaW50IGVzY19odG1sKCQkY29udGVudCk7CisJfSBlbHNpZiAocmVmKCRjb250ZW50KSBlcSAnR0xPQicgb3IgcmVmKCRjb250ZW50KSBlcSAnSU86OkhhbmRsZScpIHsKKwkJcHJpbnQgPCRjb250ZW50PjsKKwl9IGVsc2lmICghcmVmKCRjb250ZW50KSAmJiBkZWZpbmVkKCRjb250ZW50KSkgeworCQlwcmludCAkY29udGVudDsKKwl9CisKKwlwcmludCAkY2dpLT5lbmRfZGl2OworfQorCitzdWIgZm9ybWF0X3RpbWVzdGFtcF9odG1sIHsKKwlteSAkZGF0ZSA9IHNoaWZ0OworCW15ICRzdHJ0aW1lID0gJGRhdGUtPnsncmZjMjgyMid9OworCisJbXkgKHVuZGVmLCB1bmRlZiwgJGRhdGV0aW1lX2NsYXNzKSA9CisJCWdpdHdlYl9nZXRfZmVhdHVyZSgnamF2YXNjcmlwdC10aW1lem9uZScpOworCWlmICgkZGF0ZXRpbWVfY2xhc3MpIHsKKwkJJHN0cnRpbWUgPSBxcSE8c3BhbiBjbGFzcz0iJGRhdGV0aW1lX2NsYXNzIj4kc3RydGltZTwvc3Bhbj4hOworCX0KKworCW15ICRsb2NhbHRpbWVfZm9ybWF0ID0gJyglMDJkOiUwMmQgJXMpJzsKKwlpZiAoJGRhdGUtPnsnaG91cl9sb2NhbCd9IDwgNikgeworCQkkbG9jYWx0aW1lX2Zvcm1hdCA9ICcoPHNwYW4gY2xhc3M9ImF0bmlnaHQiPiUwMmQ6JTAyZDwvc3Bhbj4gJXMpJzsKKwl9CisJJHN0cnRpbWUgLj0gJyAnIC4KKwkgICAgICAgICAgICBzcHJpbnRmKCRsb2NhbHRpbWVfZm9ybWF0LAorCSAgICAgICAgICAgICAgICAgICAgJGRhdGUtPnsnaG91cl9sb2NhbCd9LCAkZGF0ZS0+eydtaW51dGVfbG9jYWwnfSwgJGRhdGUtPnsndHpfbG9jYWwnfSk7CisKKwlyZXR1cm4gJHN0cnRpbWU7Cit9CisKKyMgT3V0cHV0cyB0aGUgYXV0aG9yIG5hbWUgYW5kIGRhdGUgaW4gbG9uZyBmb3JtCitzdWIgZ2l0X3ByaW50X2F1dGhvcnNoaXAgeworCW15ICRjbyA9IHNoaWZ0OworCW15ICVvcHRzID0gQF87CisJbXkgJHRhZyA9ICRvcHRzey10YWd9IHx8ICdkaXYnOworCW15ICRhdXRob3IgPSAkY28tPnsnYXV0aG9yX25hbWUnfTsKKworCW15ICVhZCA9IHBhcnNlX2RhdGUoJGNvLT57J2F1dGhvcl9lcG9jaCd9LCAkY28tPnsnYXV0aG9yX3R6J30pOworCXByaW50ICI8JHRhZyBjbGFzcz1cImF1dGhvcl9kYXRlXCI+IiAuCisJICAgICAgZm9ybWF0X3NlYXJjaF9hdXRob3IoJGF1dGhvciwgImF1dGhvciIsIGVzY19odG1sKCRhdXRob3IpKSAuCisJICAgICAgIiBbIi5mb3JtYXRfdGltZXN0YW1wX2h0bWwoXCVhZCkuIl0iLgorCSAgICAgIGdpdF9nZXRfYXZhdGFyKCRjby0+eydhdXRob3JfZW1haWwnfSwgLXBhZF9iZWZvcmUgPT4gMSkgLgorCSAgICAgICI8LyR0YWc+XG4iOworfQorCisjIE91dHB1dHMgdGFibGUgcm93cyBjb250YWluaW5nIHRoZSBmdWxsIGF1dGhvciBvciBjb21taXR0ZXIgaW5mb3JtYXRpb24sCisjIGluIHRoZSBmb3JtYXQgZXhwZWN0ZWQgZm9yICdjb21taXQnIHZpZXcgKCYgc2ltaWxhcikuCisjIFBhcmFtZXRlcnMgYXJlIGEgY29tbWl0IGhhc2ggcmVmZXJlbmNlLCBmb2xsb3dlZCBieSB0aGUgbGlzdCBvZiBwZW9wbGUKKyMgdG8gb3V0cHV0IGluZm9ybWF0aW9uIGZvci4gSWYgdGhlIGxpc3QgaXMgZW1wdHkgaXQgZGVmYXVsdHMgdG8gYm90aAorIyBhdXRob3IgYW5kIGNvbW1pdHRlci4KK3N1YiBnaXRfcHJpbnRfYXV0aG9yc2hpcF9yb3dzIHsKKwlteSAkY28gPSBzaGlmdDsKKwkjIHRvbyBiYWQgd2UgY2FuJ3QgdXNlIEBwZW9wbGUgPSBAXyB8fCAoJ2F1dGhvcicsICdjb21taXR0ZXInKQorCW15IEBwZW9wbGUgPSBAXzsKKwlAcGVvcGxlID0gKCdhdXRob3InLCAnY29tbWl0dGVyJykgdW5sZXNzIEBwZW9wbGU7CisJZm9yZWFjaCBteSAkd2hvIChAcGVvcGxlKSB7CisJCW15ICV3ZCA9IHBhcnNlX2RhdGUoJGNvLT57IiR7d2hvfV9lcG9jaCJ9LCAkY28tPnsiJHt3aG99X3R6In0pOworCQlwcmludCAiPHRyPjx0ZD4kd2hvPC90ZD48dGQ+IiAuCisJCSAgICAgIGZvcm1hdF9zZWFyY2hfYXV0aG9yKCRjby0+eyIke3dob31fbmFtZSJ9LCAkd2hvLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2NfaHRtbCgkY28tPnsiJHt3aG99X25hbWUifSkpIC4gIiAiIC4KKwkJICAgICAgZm9ybWF0X3NlYXJjaF9hdXRob3IoJGNvLT57IiR7d2hvfV9lbWFpbCJ9LCAkd2hvLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2NfaHRtbCgiPCIgLiAkY28tPnsiJHt3aG99X2VtYWlsIn0gLiAiPiIpKSAuCisJCSAgICAgICI8L3RkPjx0ZCByb3dzcGFuPVwiMlwiPiIgLgorCQkgICAgICBnaXRfZ2V0X2F2YXRhcigkY28tPnsiJHt3aG99X2VtYWlsIn0sIC1zaXplID0+ICdkb3VibGUnKSAuCisJCSAgICAgICI8L3RkPjwvdHI+XG4iIC4KKwkJICAgICAgIjx0cj4iIC4KKwkJICAgICAgIjx0ZD48L3RkPjx0ZD4iIC4KKwkJICAgICAgZm9ybWF0X3RpbWVzdGFtcF9odG1sKFwld2QpIC4KKwkJICAgICAgIjwvdGQ+IiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9Cit9CisKK3N1YiBnaXRfcHJpbnRfcGFnZV9wYXRoIHsKKwlteSAkbmFtZSA9IHNoaWZ0OworCW15ICR0eXBlID0gc2hpZnQ7CisJbXkgJGhiID0gc2hpZnQ7CisKKworCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9wYXRoXCI+IjsKKwlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoX2Jhc2U9PiRoYiksCisJICAgICAgICAgICAgICAtdGl0bGUgPT4gJ3RyZWUgcm9vdCd9LCB0b191dGY4KCJbJHByb2plY3RdIikpOworCXByaW50ICIgLyAiOworCWlmIChkZWZpbmVkICRuYW1lKSB7CisJCW15IEBkaXJuYW1lID0gc3BsaXQgJy8nLCAkbmFtZTsKKwkJbXkgJGJhc2VuYW1lID0gcG9wIEBkaXJuYW1lOworCQlteSAkZnVsbG5hbWUgPSAnJzsKKworCQlmb3JlYWNoIG15ICRkaXIgKEBkaXJuYW1lKSB7CisJCQkkZnVsbG5hbWUgLj0gKCRmdWxsbmFtZSA/ICcvJyA6ICcnKSAuICRkaXI7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBmaWxlX25hbWU9PiRmdWxsbmFtZSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGIpLAorCQkJICAgICAgICAgICAgICAtdGl0bGUgPT4gJGZ1bGxuYW1lfSwgZXNjX3BhdGgoJGRpcikpOworCQkJcHJpbnQgIiAvICI7CisJCX0KKwkJaWYgKGRlZmluZWQgJHR5cGUgJiYgJHR5cGUgZXEgJ2Jsb2InKSB7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2JfcGxhaW4iLCBmaWxlX25hbWU9PiRmaWxlX25hbWUsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhiKSwKKwkJCSAgICAgICAgICAgICAgLXRpdGxlID0+ICRuYW1lfSwgZXNjX3BhdGgoJGJhc2VuYW1lKSk7CisJCX0gZWxzaWYgKGRlZmluZWQgJHR5cGUgJiYgJHR5cGUgZXEgJ3RyZWUnKSB7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBmaWxlX25hbWU9PiRmaWxlX25hbWUsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhiKSwKKwkJCSAgICAgICAgICAgICAgLXRpdGxlID0+ICRuYW1lfSwgZXNjX3BhdGgoJGJhc2VuYW1lKSk7CisJCQlwcmludCAiIC8gIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50IGVzY19wYXRoKCRiYXNlbmFtZSk7CisJCX0KKwl9CisJcHJpbnQgIjxici8+PC9kaXY+XG4iOworfQorCitzdWIgZ2l0X3ByaW50X2xvZyB7CisJbXkgJGxvZyA9IHNoaWZ0OworCW15ICVvcHRzID0gQF87CisKKwlpZiAoJG9wdHN7Jy1yZW1vdmVfdGl0bGUnfSkgeworCQkjIHJlbW92ZSB0aXRsZSwgaS5lLiBmaXJzdCBsaW5lIG9mIGxvZworCQlzaGlmdCBAJGxvZzsKKwl9CisJIyByZW1vdmUgbGVhZGluZyBlbXB0eSBsaW5lcworCXdoaWxlIChkZWZpbmVkICRsb2ctPlswXSAmJiAkbG9nLT5bMF0gZXEgIiIpIHsKKwkJc2hpZnQgQCRsb2c7CisJfQorCisJIyBwcmludCBsb2cKKwlteSAkc2tpcF9ibGFua19saW5lID0gMDsKKwlmb3JlYWNoIG15ICRsaW5lIChAJGxvZykgeworCQlpZiAoJGxpbmUgPX4gbS9eXHMqKFtBLVpdWy1BLVphLXpdKi0oW0JiXXl8W1R0XW8pfENbQ2NdfChDbG9zfEZpeCllcyk6IC8pIHsKKwkJCWlmICghICRvcHRzeyctcmVtb3ZlX3NpZ25vZmYnfSkgeworCQkJCXByaW50ICI8c3BhbiBjbGFzcz1cInNpZ25vZmZcIj4iIC4gZXNjX2h0bWwoJGxpbmUpIC4gIjwvc3Bhbj48YnIvPlxuIjsKKwkJCQkkc2tpcF9ibGFua19saW5lID0gMTsKKwkJCX0KKwkJCW5leHQ7CisJCX0KKworCQlpZiAoJGxpbmUgPX4gbSxccyooW2Etel0qbGluayk6IChodHRwcz86Ly9cUyspLGkpIHsKKwkJCWlmICghICRvcHRzeyctcmVtb3ZlX3NpZ25vZmYnfSkgeworCQkJCXByaW50ICI8c3BhbiBjbGFzcz1cInNpZ25vZmZcIj4iIC4gZXNjX2h0bWwoJDEpIC4gIjogIiAuCisJCQkJCSI8YSBocmVmPVwiIiAuIGVzY19odG1sKCQyKSAuICJcIj4iIC4gZXNjX2h0bWwoJDIpIC4gIjwvYT4iIC4KKwkJCQkJIjwvc3Bhbj48YnIvPlxuIjsKKwkJCQkkc2tpcF9ibGFua19saW5lID0gMTsKKwkJCX0KKwkJCW5leHQ7CisJCX0KKworCQkjIHByaW50IG9ubHkgb25lIGVtcHR5IGxpbmUKKwkJIyBkbyBub3QgcHJpbnQgZW1wdHkgbGluZSBhZnRlciBzaWdub2ZmCisJCWlmICgkbGluZSBlcSAiIikgeworCQkJbmV4dCBpZiAoJHNraXBfYmxhbmtfbGluZSk7CisJCQkkc2tpcF9ibGFua19saW5lID0gMTsKKwkJfSBlbHNlIHsKKwkJCSRza2lwX2JsYW5rX2xpbmUgPSAwOworCQl9CisKKwkJcHJpbnQgZm9ybWF0X2xvZ19saW5lX2h0bWwoJGxpbmUpIC4gIjxici8+XG4iOworCX0KKworCWlmICgkb3B0c3snLWZpbmFsX2VtcHR5X2xpbmUnfSkgeworCQkjIGVuZCB3aXRoIHNpbmdsZSBlbXB0eSBsaW5lCisJCXByaW50ICI8YnIvPlxuIiB1bmxlc3MgJHNraXBfYmxhbmtfbGluZTsKKwl9Cit9CisKKyMgcmV0dXJuIGxpbmsgdGFyZ2V0ICh3aGF0IGxpbmsgcG9pbnRzIHRvKQorc3ViIGdpdF9nZXRfbGlua190YXJnZXQgeworCW15ICRoYXNoID0gc2hpZnQ7CisJbXkgJGxpbmtfdGFyZ2V0OworCisJIyByZWFkIGxpbmsKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiY2F0LWZpbGUiLCAiYmxvYiIsICRoYXNoCisJCW9yIHJldHVybjsKKwl7CisJCWxvY2FsICQvID0gdW5kZWY7CisJCSRsaW5rX3RhcmdldCA9IDwkZmQ+OworCX0KKwljbG9zZSAkZmQKKwkJb3IgcmV0dXJuOworCisJcmV0dXJuICRsaW5rX3RhcmdldDsKK30KKworIyBnaXZlbiBsaW5rIHRhcmdldCwgYW5kIHRoZSBkaXJlY3RvcnkgKGJhc2VkaXIpIHRoZSBsaW5rIGlzIGluLAorIyByZXR1cm4gdGFyZ2V0IG9mIGxpbmsgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSAodG9wIHRyZWUpOworIyByZXR1cm4gdW5kZWYgaWYgaXQgaXMgbm90IHBvc3NpYmxlIChpbmNsdWRpbmcgYWJzb2x1dGUgbGlua3MpLgorc3ViIG5vcm1hbGl6ZV9saW5rX3RhcmdldCB7CisJbXkgKCRsaW5rX3RhcmdldCwgJGJhc2VkaXIpID0gQF87CisKKwkjIGFic29sdXRlIHN5bWxpbmtzIChiZWdpbm5pbmcgd2l0aCAnLycpIGNhbm5vdCBiZSBub3JtYWxpemVkCisJcmV0dXJuIGlmIChzdWJzdHIoJGxpbmtfdGFyZ2V0LCAwLCAxKSBlcSAnLycpOworCisJIyBub3JtYWxpemUgbGluayB0YXJnZXQgdG8gcGF0aCBmcm9tIHRvcCAocm9vdCkgdHJlZSAoZGlyKQorCW15ICRwYXRoOworCWlmICgkYmFzZWRpcikgeworCQkkcGF0aCA9ICRiYXNlZGlyIC4gJy8nIC4gJGxpbmtfdGFyZ2V0OworCX0gZWxzZSB7CisJCSMgd2UgYXJlIGluIHRvcCAocm9vdCkgdHJlZSAoZGlyKQorCQkkcGF0aCA9ICRsaW5rX3RhcmdldDsKKwl9CisKKwkjIHJlbW92ZSAvLywgLy4vLCBhbmQgLy4uLworCW15IEBwYXRoX3BhcnRzOworCWZvcmVhY2ggbXkgJHBhcnQgKHNwbGl0KCcvJywgJHBhdGgpKSB7CisJCSMgZGlzY2FyZCAnLicgYW5kICcnCisJCW5leHQgaWYgKCEkcGFydCB8fCAkcGFydCBlcSAnLicpOworCQkjIGhhbmRsZSAnLi4nCisJCWlmICgkcGFydCBlcSAnLi4nKSB7CisJCQlpZiAoQHBhdGhfcGFydHMpIHsKKwkJCQlwb3AgQHBhdGhfcGFydHM7CisJCQl9IGVsc2UgeworCQkJCSMgbGluayBsZWFkcyBvdXRzaWRlIHJlcG9zaXRvcnkgKG91dHNpZGUgdG9wIGRpcikKKwkJCQlyZXR1cm47CisJCQl9CisJCX0gZWxzZSB7CisJCQlwdXNoIEBwYXRoX3BhcnRzLCAkcGFydDsKKwkJfQorCX0KKwkkcGF0aCA9IGpvaW4oJy8nLCBAcGF0aF9wYXJ0cyk7CisKKwlyZXR1cm4gJHBhdGg7Cit9CisKKyMgcHJpbnQgdHJlZSBlbnRyeSAocm93IG9mIGdpdF90cmVlKSwgYnV0IHdpdGhvdXQgZW5jb21wYXNzaW5nIDx0cj4gZWxlbWVudAorc3ViIGdpdF9wcmludF90cmVlX2VudHJ5IHsKKwlteSAoJHQsICRiYXNlZGlyLCAkaGFzaF9iYXNlLCAkaGF2ZV9ibGFtZSkgPSBAXzsKKworCW15ICViYXNlX2tleSA9ICgpOworCSRiYXNlX2tleXsnaGFzaF9iYXNlJ30gPSAkaGFzaF9iYXNlIGlmIGRlZmluZWQgJGhhc2hfYmFzZTsKKworCSMgVGhlIGZvcm1hdCBvZiBhIHRhYmxlIHJvdyBpczogbW9kZSBsaXN0IGxpbmsuICBXaGVyZSBtb2RlIGlzCisJIyB0aGUgbW9kZSBvZiB0aGUgZW50cnksIGxpc3QgaXMgdGhlIG5hbWUgb2YgdGhlIGVudHJ5LCBhbiBocmVmLAorCSMgYW5kIGxpbmsgaXMgdGhlIGFjdGlvbiBsaW5rcyBvZiB0aGUgZW50cnkuCisKKwlwcmludCAiPHRkIGNsYXNzPVwibW9kZVwiPiIgLiBtb2RlX3N0cigkdC0+eydtb2RlJ30pIC4gIjwvdGQ+XG4iOworCWlmIChleGlzdHMgJHQtPnsnc2l6ZSd9KSB7CisJCXByaW50ICI8dGQgY2xhc3M9XCJzaXplXCI+JHQtPnsnc2l6ZSd9PC90ZD5cbiI7CisJfQorCWlmICgkdC0+eyd0eXBlJ30gZXEgImJsb2IiKSB7CisJCXByaW50ICI8dGQgY2xhc3M9XCJsaXN0XCI+IiAuCisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoPT4kdC0+eydoYXNoJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+IiRiYXNlZGlyJHQtPnsnbmFtZSd9IiwgJWJhc2Vfa2V5KSwKKwkJCSAgICAgICAgLWNsYXNzID0+ICJsaXN0In0sIGVzY19wYXRoKCR0LT57J25hbWUnfSkpOworCQlpZiAoU19JU0xOSyhvY3QgJHQtPnsnbW9kZSd9KSkgeworCQkJbXkgJGxpbmtfdGFyZ2V0ID0gZ2l0X2dldF9saW5rX3RhcmdldCgkdC0+eydoYXNoJ30pOworCQkJaWYgKCRsaW5rX3RhcmdldCkgeworCQkJCW15ICRub3JtX3RhcmdldCA9IG5vcm1hbGl6ZV9saW5rX3RhcmdldCgkbGlua190YXJnZXQsICRiYXNlZGlyKTsKKwkJCQlpZiAoZGVmaW5lZCAkbm9ybV90YXJnZXQpIHsKKwkJCQkJcHJpbnQgIiAtPiAiIC4KKwkJCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJvYmplY3QiLCBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kbm9ybV90YXJnZXQpLAorCQkJCQkgICAgICAgICAgICAgICAtdGl0bGUgPT4gJG5vcm1fdGFyZ2V0fSwgZXNjX3BhdGgoJGxpbmtfdGFyZ2V0KSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHJpbnQgIiAtPiAiIC4gZXNjX3BhdGgoJGxpbmtfdGFyZ2V0KTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcHJpbnQgIjwvdGQ+XG4iOworCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPiI7CisJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiR0LT57J2hhc2gnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiIkYmFzZWRpciR0LT57J25hbWUnfSIsICViYXNlX2tleSl9LAorCQkgICAgICAgICAgICAgICJibG9iIik7CisJCWlmICgkaGF2ZV9ibGFtZSkgeworCQkJcHJpbnQgIiB8ICIgLgorCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibGFtZSIsIGhhc2g9PiR0LT57J2hhc2gnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4iJGJhc2VkaXIkdC0+eyduYW1lJ30iLCAlYmFzZV9rZXkpfSwKKwkJCSAgICAgICAgICAgICAgImJsYW1lIik7CisJCX0KKwkJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSkgeworCQkJcHJpbnQgIiB8ICIgLgorCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoaXN0b3J5IiwgaGFzaF9iYXNlPT4kaGFzaF9iYXNlLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kdC0+eydoYXNoJ30sIGZpbGVfbmFtZT0+IiRiYXNlZGlyJHQtPnsnbmFtZSd9Iil9LAorCQkJICAgICAgICAgICAgICAiaGlzdG9yeSIpOworCQl9CisJCXByaW50ICIgfCAiIC4KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYl9wbGFpbiIsIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4iJGJhc2VkaXIkdC0+eyduYW1lJ30iKX0sCisJCQkgICAgICAgICJyYXciKTsKKwkJcHJpbnQgIjwvdGQ+XG4iOworCisJfSBlbHNpZiAoJHQtPnsndHlwZSd9IGVxICJ0cmVlIikgeworCQlwcmludCAiPHRkIGNsYXNzPVwibGlzdFwiPiI7CisJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiR0LT57J2hhc2gnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiIkYmFzZWRpciR0LT57J25hbWUnfSIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWJhc2Vfa2V5KX0sCisJCSAgICAgICAgICAgICAgZXNjX3BhdGgoJHQtPnsnbmFtZSd9KSk7CisJCXByaW50ICI8L3RkPlxuIjsKKwkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iOworCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoPT4kdC0+eydoYXNoJ30sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4iJGJhc2VkaXIkdC0+eyduYW1lJ30iLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICViYXNlX2tleSl9LAorCQkgICAgICAgICAgICAgICJ0cmVlIik7CisJCWlmIChkZWZpbmVkICRoYXNoX2Jhc2UpIHsKKwkJCXByaW50ICIgfCAiIC4KKwkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGlzdG9yeSIsIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4iJGJhc2VkaXIkdC0+eyduYW1lJ30iKX0sCisJCQkgICAgICAgICAgICAgICJoaXN0b3J5Iik7CisJCX0KKwkJcHJpbnQgIjwvdGQ+XG4iOworCX0gZWxzZSB7CisJCSMgdW5rbm93biBvYmplY3Q6IHdlIGNhbiBvbmx5IHByZXNlbnQgaGlzdG9yeSBmb3IgaXQKKwkJIyAodGhpcyBpbmNsdWRlcyAnY29tbWl0JyBvYmplY3QsIGkuZS4gc3VibW9kdWxlIHN1cHBvcnQpCisJCXByaW50ICI8dGQgY2xhc3M9XCJsaXN0XCI+IiAuCisJCSAgICAgIGVzY19wYXRoKCR0LT57J25hbWUnfSkgLgorCQkgICAgICAiPC90ZD5cbiI7CisJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IjsKKwkJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSkgeworCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoaXN0b3J5IiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaF9iYXNlLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiIkYmFzZWRpciR0LT57J25hbWUnfSIpfSwKKwkJCSAgICAgICAgICAgICAgImhpc3RvcnkiKTsKKwkJfQorCQlwcmludCAiPC90ZD5cbiI7CisJfQorfQorCisjIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisjIyBmdW5jdGlvbnMgcHJpbnRpbmcgbGFyZ2UgZnJhZ21lbnRzIG9mIEhUTUwKKworIyBnZXQgcHJlLWltYWdlIGZpbGVuYW1lcyBmb3IgbWVyZ2UgKGNvbWJpbmVkKSBkaWZmCitzdWIgZmlsbF9mcm9tX2ZpbGVfaW5mbyB7CisJbXkgKCRkaWZmLCBAcGFyZW50cykgPSBAXzsKKworCSRkaWZmLT57J2Zyb21fZmlsZSd9ID0gWyBdOworCSRkaWZmLT57J2Zyb21fZmlsZSd9WyRkaWZmLT57J25wYXJlbnRzJ30gLSAxXSA9IHVuZGVmOworCWZvciAobXkgJGkgPSAwOyAkaSA8ICRkaWZmLT57J25wYXJlbnRzJ307ICRpKyspIHsKKwkJaWYgKCRkaWZmLT57J3N0YXR1cyd9WyRpXSBlcSAnUicgfHwKKwkJICAgICRkaWZmLT57J3N0YXR1cyd9WyRpXSBlcSAnQycpIHsKKwkJCSRkaWZmLT57J2Zyb21fZmlsZSd9WyRpXSA9CisJCQkJZ2l0X2dldF9wYXRoX2J5X2hhc2goJHBhcmVudHNbJGldLCAkZGlmZi0+eydmcm9tX2lkJ31bJGldKTsKKwkJfQorCX0KKworCXJldHVybiAkZGlmZjsKK30KKworIyBpcyBjdXJyZW50IHJhdyBkaWZmdHJlZSBsaW5lIG9mIGZpbGUgZGVsZXRpb24KK3N1YiBpc19kZWxldGVkIHsKKwlteSAkZGlmZmluZm8gPSBzaGlmdDsKKworCXJldHVybiAkZGlmZmluZm8tPnsndG9faWQnfSBlcSAoJzAnIHggNDApIHx8ICRkaWZmaW5mby0+eyd0b19pZCd9IGVxICgnMCcgeCA2NCk7Cit9CisKKyMgZG9lcyBwYXRjaCBjb3JyZXNwb25kIHRvIFtwcmV2aW91c10gZGlmZnRyZWUgcmF3IGxpbmUKKyMgJGRpZmZpbmZvICAtIGhhc2hyZWYgb2YgcGFyc2VkIHJhdyBkaWZmIGZvcm1hdAorIyAkcGF0Y2hpbmZvIC0gaGFzaHJlZiBvZiBwYXJzZWQgcGF0Y2ggZGlmZiBmb3JtYXQKKyMgICAgICAgICAgICAgICh0aGUgc2FtZSBrZXlzIGFzIGluICRkaWZmaW5mbykKK3N1YiBpc19wYXRjaF9zcGxpdCB7CisJbXkgKCRkaWZmaW5mbywgJHBhdGNoaW5mbykgPSBAXzsKKworCXJldHVybiBkZWZpbmVkICRkaWZmaW5mbyAmJiBkZWZpbmVkICRwYXRjaGluZm8KKwkJJiYgJGRpZmZpbmZvLT57J3RvX2ZpbGUnfSBlcSAkcGF0Y2hpbmZvLT57J3RvX2ZpbGUnfTsKK30KKworCitzdWIgZ2l0X2RpZmZ0cmVlX2JvZHkgeworCW15ICgkZGlmZnRyZWUsICRoYXNoLCBAcGFyZW50cykgPSBAXzsKKwlteSAoJHBhcmVudCkgPSAkcGFyZW50c1swXTsKKwlteSAkaGF2ZV9ibGFtZSA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdibGFtZScpOworCXByaW50ICI8ZGl2IGNsYXNzPVwibGlzdF9oZWFkXCI+XG4iOworCWlmICgkI3skZGlmZnRyZWV9ID4gMTApIHsKKwkJcHJpbnQoKCQjeyRkaWZmdHJlZX0gKyAxKSAuICIgZmlsZXMgY2hhbmdlZDpcbiIpOworCX0KKwlwcmludCAiPC9kaXY+XG4iOworCisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cIiIgLgorCSAgICAgIChAcGFyZW50cyA+IDEgPyAiY29tYmluZWQgIiA6ICIiKSAuCisJICAgICAgImRpZmZfdHJlZVwiPlxuIjsKKworCSMgaGVhZGVyIG9ubHkgZm9yIGNvbWJpbmVkIGRpZmYgaW4gJ2NvbW1pdGRpZmYnIHZpZXcKKwlteSAkaGFzX2hlYWRlciA9IEAkZGlmZnRyZWUgJiYgQHBhcmVudHMgPiAxICYmICRhY3Rpb24gZXEgJ2NvbW1pdGRpZmYnOworCWlmICgkaGFzX2hlYWRlcikgeworCQkjIHRhYmxlIGhlYWRlcgorCQlwcmludCAiPHRoZWFkPjx0cj5cbiIgLgorCQkgICAgICAgIjx0aD48L3RoPjx0aD48L3RoPlxuIjsgIyBmaWxlbmFtZSwgcGF0Y2hOIGxpbmsKKwkJZm9yIChteSAkaSA9IDA7ICRpIDwgQHBhcmVudHM7ICRpKyspIHsKKwkJCW15ICRwYXIgPSAkcGFyZW50c1skaV07CisJCQlwcmludCAiPHRoPiIgLgorCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXRkaWZmIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGhhc2gsIGhhc2hfcGFyZW50PT4kcGFyKSwKKwkJCSAgICAgICAgICAgICAgIC10aXRsZSA9PiAnY29tbWl0ZGlmZiB0byBwYXJlbnQgbnVtYmVyICcgLgorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAoJGkrMSkgLiAnOiAnIC4gc3Vic3RyKCRwYXIsMCw3KX0sCisJCQkgICAgICAgICAgICAgICRpKzEpIC4KKwkJCSAgICAgICImbmJzcDs8L3RoPlxuIjsKKwkJfQorCQlwcmludCAiPC90cj48L3RoZWFkPlxuPHRib2R5PlxuIjsKKwl9CisKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwlteSAkcGF0Y2hubyA9IDA7CisJZm9yZWFjaCBteSAkbGluZSAoQHskZGlmZnRyZWV9KSB7CisJCW15ICRkaWZmID0gcGFyc2VkX2RpZmZ0cmVlX2xpbmUoJGxpbmUpOworCisJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJfQorCQkkYWx0ZXJuYXRlIF49IDE7CisKKwkJaWYgKGV4aXN0cyAkZGlmZi0+eyducGFyZW50cyd9KSB7ICMgY29tYmluZWQgZGlmZgorCisJCQlmaWxsX2Zyb21fZmlsZV9pbmZvKCRkaWZmLCBAcGFyZW50cykKKwkJCQl1bmxlc3MgZXhpc3RzICRkaWZmLT57J2Zyb21fZmlsZSd9OworCisJCQlpZiAoIWlzX2RlbGV0ZWQoJGRpZmYpKSB7CisJCQkJIyBmaWxlIGV4aXN0cyBpbiB0aGUgcmVzdWx0IChjaGlsZCkgY29tbWl0CisJCQkJcHJpbnQgIjx0ZD4iIC4KKwkJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoPT4kZGlmZi0+eyd0b19pZCd9LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoKSwKKwkJCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCJ9LCBlc2NfcGF0aCgkZGlmZi0+eyd0b19maWxlJ30pKSAuCisJCQkJICAgICAgIjwvdGQ+XG4iOworCQkJfSBlbHNlIHsKKwkJCQlwcmludCAiPHRkPiIgLgorCQkJCSAgICAgIGVzY19wYXRoKCRkaWZmLT57J3RvX2ZpbGUnfSkgLgorCQkJCSAgICAgICI8L3RkPlxuIjsKKwkJCX0KKworCQkJaWYgKCRhY3Rpb24gZXEgJ2NvbW1pdGRpZmYnKSB7CisJCQkJIyBsaW5rIHRvIHBhdGNoCisJCQkJJHBhdGNobm8rKzsKKwkJCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPiIgLgorCQkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLWFuY2hvcj0+InBhdGNoJHBhdGNobm8iKX0sCisJCQkJICAgICAgICAgICAgICAicGF0Y2giKSAuCisJCQkJICAgICAgIiB8ICIgLgorCQkJCSAgICAgICI8L3RkPlxuIjsKKwkJCX0KKworCQkJbXkgJGhhc19oaXN0b3J5ID0gMDsKKwkJCW15ICRub3RfZGVsZXRlZCA9IDA7CisJCQlmb3IgKG15ICRpID0gMDsgJGkgPCAkZGlmZi0+eyducGFyZW50cyd9OyAkaSsrKSB7CisJCQkJbXkgJGhhc2hfcGFyZW50ID0gJHBhcmVudHNbJGldOworCQkJCW15ICRmcm9tX2hhc2ggPSAkZGlmZi0+eydmcm9tX2lkJ31bJGldOworCQkJCW15ICRmcm9tX3BhdGggPSAkZGlmZi0+eydmcm9tX2ZpbGUnfVskaV07CisJCQkJbXkgJHN0YXR1cyA9ICRkaWZmLT57J3N0YXR1cyd9WyRpXTsKKworCQkJCSRoYXNfaGlzdG9yeSB8fD0gKCRzdGF0dXMgbmUgJ0EnKTsKKwkJCQkkbm90X2RlbGV0ZWQgfHw9ICgkc3RhdHVzIG5lICdEJyk7CisKKwkJCQlpZiAoJHN0YXR1cyBlcSAnQScpIHsKKwkJCQkJcHJpbnQgIjx0ZCAgY2xhc3M9XCJsaW5rXCIgYWxpZ249XCJyaWdodFwiPiB8IDwvdGQ+XG4iOworCQkJCX0gZWxzaWYgKCRzdGF0dXMgZXEgJ0QnKSB7CisJCQkJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCQkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZnJvbV9oYXNoLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZyb21fcGF0aCl9LAorCQkJCQkgICAgICAgICAgICAgICJibG9iIiAuICgkaSsxKSkgLgorCQkJCQkgICAgICAiIHwgPC90ZD5cbiI7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKCRkaWZmLT57J3RvX2lkJ30gZXEgJGZyb21faGFzaCkgeworCQkJCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmsgbm9jaGFuZ2VcIj4iOworCQkJCQl9IGVsc2UgeworCQkJCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iOworCQkJCQl9CisJCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYmRpZmYiLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9wYXJlbnQ9PiRmcm9tX2hhc2gsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX3BhcmVudF9iYXNlPT4kaGFzaF9wYXJlbnQsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30sCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXJlbnQ9PiRmcm9tX3BhdGgpfSwKKwkJCQkJICAgICAgICAgICAgICAiZGlmZiIgLiAoJGkrMSkpIC4KKwkJCQkJICAgICAgIiB8IDwvdGQ+XG4iOworCQkJCX0KKwkJCX0KKworCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iOworCQkJaWYgKCRub3RfZGVsZXRlZCkgeworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZGlmZi0+eyd0b19pZCd9LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoKX0sCisJCQkJICAgICAgICAgICAgICAiYmxvYiIpOworCQkJCXByaW50ICIgfCAiIGlmICgkaGFzX2hpc3RvcnkpOworCQkJfQorCQkJaWYgKCRoYXNfaGlzdG9yeSkgeworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGlzdG9yeSIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J3RvX2ZpbGUnfSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gpfSwKKwkJCQkgICAgICAgICAgICAgICJoaXN0b3J5Iik7CisJCQl9CisJCQlwcmludCAiPC90ZD5cbiI7CisKKwkJCXByaW50ICI8L3RyPlxuIjsKKwkJCW5leHQ7ICMgaW5zdGVhZCBvZiAnZWxzZScgY2xhdXNlLCB0byBhdm9pZCBleHRyYSBpbmRlbnQKKwkJfQorCQkjIGVsc2Ugb3JkaW5hcnkgZGlmZgorCisJCW15ICgkdG9fbW9kZV9vY3QsICR0b19tb2RlX3N0ciwgJHRvX2ZpbGVfdHlwZSk7CisJCW15ICgkZnJvbV9tb2RlX29jdCwgJGZyb21fbW9kZV9zdHIsICRmcm9tX2ZpbGVfdHlwZSk7CisJCWlmICgkZGlmZi0+eyd0b19tb2RlJ30gbmUgKCcwJyB4IDYpKSB7CisJCQkkdG9fbW9kZV9vY3QgPSBvY3QgJGRpZmYtPnsndG9fbW9kZSd9OworCQkJaWYgKFNfSVNSRUcoJHRvX21vZGVfb2N0KSkgeyAjIG9ubHkgZm9yIHJlZ3VsYXIgZmlsZQorCQkJCSR0b19tb2RlX3N0ciA9IHNwcmludGYoIiUwNG8iLCAkdG9fbW9kZV9vY3QgJiAwNzc3KTsgIyBwZXJtaXNzaW9uIGJpdHMKKwkJCX0KKwkJCSR0b19maWxlX3R5cGUgPSBmaWxlX3R5cGUoJGRpZmYtPnsndG9fbW9kZSd9KTsKKwkJfQorCQlpZiAoJGRpZmYtPnsnZnJvbV9tb2RlJ30gbmUgKCcwJyB4IDYpKSB7CisJCQkkZnJvbV9tb2RlX29jdCA9IG9jdCAkZGlmZi0+eydmcm9tX21vZGUnfTsKKwkJCWlmIChTX0lTUkVHKCRmcm9tX21vZGVfb2N0KSkgeyAjIG9ubHkgZm9yIHJlZ3VsYXIgZmlsZQorCQkJCSRmcm9tX21vZGVfc3RyID0gc3ByaW50ZigiJTA0byIsICRmcm9tX21vZGVfb2N0ICYgMDc3Nyk7ICMgcGVybWlzc2lvbiBiaXRzCisJCQl9CisJCQkkZnJvbV9maWxlX3R5cGUgPSBmaWxlX3R5cGUoJGRpZmYtPnsnZnJvbV9tb2RlJ30pOworCQl9CisKKwkJaWYgKCRkaWZmLT57J3N0YXR1cyd9IGVxICJBIikgeyAjIGNyZWF0ZWQKKwkJCW15ICRtb2RlX2NobmcgPSAiPHNwYW4gY2xhc3M9XCJmaWxlX3N0YXR1cyBuZXdcIj5bbmV3ICR0b19maWxlX3R5cGUiOworCQkJJG1vZGVfY2huZyAgIC49ICIgd2l0aCBtb2RlOiAkdG9fbW9kZV9zdHIiIGlmICR0b19tb2RlX3N0cjsKKwkJCSRtb2RlX2NobmcgICAuPSAiXTwvc3Bhbj4iOworCQkJcHJpbnQgIjx0ZD4iOworCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaD0+JGRpZmYtPnsndG9faWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pLAorCQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3QifSwgZXNjX3BhdGgoJGRpZmYtPnsnZmlsZSd9KSk7CisJCQlwcmludCAiPC90ZD5cbiI7CisJCQlwcmludCAiPHRkPiRtb2RlX2Nobmc8L3RkPlxuIjsKKwkJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IjsKKwkJCWlmICgkYWN0aW9uIGVxICdjb21taXRkaWZmJykgeworCQkJCSMgbGluayB0byBwYXRjaAorCQkJCSRwYXRjaG5vKys7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtYW5jaG9yPT4icGF0Y2gkcGF0Y2hubyIpfSwKKwkJCQkgICAgICAgICAgICAgICJwYXRjaCIpIC4KKwkJCQkgICAgICAiIHwgIjsKKwkJCX0KKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gsIGZpbGVfbmFtZT0+JGRpZmYtPnsnZmlsZSd9KX0sCisJCQkgICAgICAgICAgICAgICJibG9iIik7CisJCQlwcmludCAiPC90ZD5cbiI7CisKKwkJfSBlbHNpZiAoJGRpZmYtPnsnc3RhdHVzJ30gZXEgIkQiKSB7ICMgZGVsZXRlZAorCQkJbXkgJG1vZGVfY2huZyA9ICI8c3BhbiBjbGFzcz1cImZpbGVfc3RhdHVzIGRlbGV0ZWRcIj5bZGVsZXRlZCAkZnJvbV9maWxlX3R5cGVdPC9zcGFuPiI7CisJCQlwcmludCAiPHRkPiI7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoPT4kZGlmZi0+eydmcm9tX2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JHBhcmVudCwgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pLAorCQkJICAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0In0sIGVzY19wYXRoKCRkaWZmLT57J2ZpbGUnfSkpOworCQkJcHJpbnQgIjwvdGQ+XG4iOworCQkJcHJpbnQgIjx0ZD4kbW9kZV9jaG5nPC90ZD5cbiI7CisJCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPiI7CisJCQlpZiAoJGFjdGlvbiBlcSAnY29tbWl0ZGlmZicpIHsKKwkJCQkjIGxpbmsgdG8gcGF0Y2gKKwkJCQkkcGF0Y2hubysrOworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLWFuY2hvcj0+InBhdGNoJHBhdGNobm8iKX0sCisJCQkJICAgICAgICAgICAgICAicGF0Y2giKSAuCisJCQkJICAgICAgIiB8ICI7CisJCQl9CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoPT4kZGlmZi0+eydmcm9tX2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JHBhcmVudCwgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pfSwKKwkJCSAgICAgICAgICAgICAgImJsb2IiKSAuICIgfCAiOworCQkJaWYgKCRoYXZlX2JsYW1lKSB7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibGFtZSIsIGhhc2hfYmFzZT0+JHBhcmVudCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGRpZmYtPnsnZmlsZSd9KX0sCisJCQkJICAgICAgICAgICAgICAiYmxhbWUiKSAuICIgfCAiOworCQkJfQorCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoaXN0b3J5IiwgaGFzaF9iYXNlPT4kcGFyZW50LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J2ZpbGUnfSl9LAorCQkJICAgICAgICAgICAgICAiaGlzdG9yeSIpOworCQkJcHJpbnQgIjwvdGQ+XG4iOworCisJCX0gZWxzaWYgKCRkaWZmLT57J3N0YXR1cyd9IGVxICJNIiB8fCAkZGlmZi0+eydzdGF0dXMnfSBlcSAiVCIpIHsgIyBtb2RpZmllZCwgb3IgdHlwZSBjaGFuZ2VkCisJCQlteSAkbW9kZV9jaG5nZSA9ICIiOworCQkJaWYgKCRkaWZmLT57J2Zyb21fbW9kZSd9ICE9ICRkaWZmLT57J3RvX21vZGUnfSkgeworCQkJCSRtb2RlX2NobmdlID0gIjxzcGFuIGNsYXNzPVwiZmlsZV9zdGF0dXMgbW9kZV9jaG5nZVwiPltjaGFuZ2VkIjsKKwkJCQlpZiAoJGZyb21fZmlsZV90eXBlIG5lICR0b19maWxlX3R5cGUpIHsKKwkJCQkJJG1vZGVfY2huZ2UgLj0gIiBmcm9tICRmcm9tX2ZpbGVfdHlwZSB0byAkdG9fZmlsZV90eXBlIjsKKwkJCQl9CisJCQkJaWYgKCgkZnJvbV9tb2RlX29jdCAmIDA3NzcpICE9ICgkdG9fbW9kZV9vY3QgJiAwNzc3KSkgeworCQkJCQlpZiAoJGZyb21fbW9kZV9zdHIgJiYgJHRvX21vZGVfc3RyKSB7CisJCQkJCQkkbW9kZV9jaG5nZSAuPSAiIG1vZGU6ICRmcm9tX21vZGVfc3RyLT4kdG9fbW9kZV9zdHIiOworCQkJCQl9IGVsc2lmICgkdG9fbW9kZV9zdHIpIHsKKwkJCQkJCSRtb2RlX2NobmdlIC49ICIgbW9kZTogJHRvX21vZGVfc3RyIjsKKwkJCQkJfQorCQkJCX0KKwkJCQkkbW9kZV9jaG5nZSAuPSAiXTwvc3Bhbj5cbiI7CisJCQl9CisJCQlwcmludCAiPHRkPiI7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoPT4kZGlmZi0+eyd0b19pZCd9LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoLCBmaWxlX25hbWU9PiRkaWZmLT57J2ZpbGUnfSksCisJCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCJ9LCBlc2NfcGF0aCgkZGlmZi0+eydmaWxlJ30pKTsKKwkJCXByaW50ICI8L3RkPlxuIjsKKwkJCXByaW50ICI8dGQ+JG1vZGVfY2huZ2U8L3RkPlxuIjsKKwkJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IjsKKwkJCWlmICgkYWN0aW9uIGVxICdjb21taXRkaWZmJykgeworCQkJCSMgbGluayB0byBwYXRjaAorCQkJCSRwYXRjaG5vKys7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtYW5jaG9yPT4icGF0Y2gkcGF0Y2hubyIpfSwKKwkJCQkgICAgICAgICAgICAgICJwYXRjaCIpIC4KKwkJCQkgICAgICAiIHwgIjsKKwkJCX0gZWxzaWYgKCRkaWZmLT57J3RvX2lkJ30gbmUgJGRpZmYtPnsnZnJvbV9pZCd9KSB7CisJCQkJIyAiY29tbWl0IiB2aWV3IGFuZCBtb2RpZmllZCBmaWxlIChub3Qgb25sdSBtb2RlIGNoYW5nZWQpCisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iZGlmZiIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZGlmZi0+eyd0b19pZCd9LCBoYXNoX3BhcmVudD0+JGRpZmYtPnsnZnJvbV9pZCd9LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwgaGFzaF9wYXJlbnRfYmFzZT0+JHBhcmVudCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGRpZmYtPnsnZmlsZSd9KX0sCisJCQkJICAgICAgICAgICAgICAiZGlmZiIpIC4KKwkJCQkgICAgICAiIHwgIjsKKwkJCX0KKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gsIGZpbGVfbmFtZT0+JGRpZmYtPnsnZmlsZSd9KX0sCisJCQkgICAgICAgICAgICAgICAiYmxvYiIpIC4gIiB8ICI7CisJCQlpZiAoJGhhdmVfYmxhbWUpIHsKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsYW1lIiwgaGFzaF9iYXNlPT4kaGFzaCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGRpZmYtPnsnZmlsZSd9KX0sCisJCQkJICAgICAgICAgICAgICAiYmxhbWUiKSAuICIgfCAiOworCQkJfQorCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoaXN0b3J5IiwgaGFzaF9iYXNlPT4kaGFzaCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pfSwKKwkJCSAgICAgICAgICAgICAgImhpc3RvcnkiKTsKKwkJCXByaW50ICI8L3RkPlxuIjsKKworCQl9IGVsc2lmICgkZGlmZi0+eydzdGF0dXMnfSBlcSAiUiIgfHwgJGRpZmYtPnsnc3RhdHVzJ30gZXEgIkMiKSB7ICMgcmVuYW1lZCBvciBjb3BpZWQKKwkJCW15ICVzdGF0dXNfbmFtZSA9ICgnUicgPT4gJ21vdmVkJywgJ0MnID0+ICdjb3BpZWQnKTsKKwkJCW15ICRuc3RhdHVzID0gJHN0YXR1c19uYW1leyRkaWZmLT57J3N0YXR1cyd9fTsKKwkJCW15ICRtb2RlX2NobmcgPSAiIjsKKwkJCWlmICgkZGlmZi0+eydmcm9tX21vZGUnfSAhPSAkZGlmZi0+eyd0b19tb2RlJ30pIHsKKwkJCQkjIG1vZGUgYWxzbyBmb3IgZGlyZWN0b3JpZXMsIHNvIHdlIGNhbm5vdCB1c2UgJHRvX21vZGVfc3RyCisJCQkJJG1vZGVfY2huZyA9IHNwcmludGYoIiwgbW9kZTogJTA0byIsICR0b19tb2RlX29jdCAmIDA3NzcpOworCQkJfQorCQkJcHJpbnQgIjx0ZD4iIC4KKwkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2hfYmFzZT0+JGhhc2gsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sIGZpbGVfbmFtZT0+JGRpZmYtPnsndG9fZmlsZSd9KSwKKwkJCSAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0In0sIGVzY19wYXRoKCRkaWZmLT57J3RvX2ZpbGUnfSkpIC4gIjwvdGQ+XG4iIC4KKwkJCSAgICAgICI8dGQ+PHNwYW4gY2xhc3M9XCJmaWxlX3N0YXR1cyAkbnN0YXR1c1wiPlskbnN0YXR1cyBmcm9tICIgLgorCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaF9iYXNlPT4kcGFyZW50LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZGlmZi0+eydmcm9tX2lkJ30sIGZpbGVfbmFtZT0+JGRpZmYtPnsnZnJvbV9maWxlJ30pLAorCQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3QifSwgZXNjX3BhdGgoJGRpZmYtPnsnZnJvbV9maWxlJ30pKSAuCisJCQkgICAgICAiIHdpdGggIiAuIChpbnQgJGRpZmYtPnsnc2ltaWxhcml0eSd9KSAuICIlIHNpbWlsYXJpdHkkbW9kZV9jaG5nXTwvc3Bhbj48L3RkPlxuIiAuCisJCQkgICAgICAiPHRkIGNsYXNzPVwibGlua1wiPiI7CisJCQlpZiAoJGFjdGlvbiBlcSAnY29tbWl0ZGlmZicpIHsKKwkJCQkjIGxpbmsgdG8gcGF0Y2gKKwkJCQkkcGF0Y2hubysrOworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLWFuY2hvcj0+InBhdGNoJHBhdGNobm8iKX0sCisJCQkJICAgICAgICAgICAgICAicGF0Y2giKSAuCisJCQkJICAgICAgIiB8ICI7CisJCQl9IGVsc2lmICgkZGlmZi0+eyd0b19pZCd9IG5lICRkaWZmLT57J2Zyb21faWQnfSkgeworCQkJCSMgImNvbW1pdCIgdmlldyBhbmQgbW9kaWZpZWQgZmlsZSAobm90IG9ubHkgcHVyZSByZW5hbWUgb3IgY29weSkKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2JkaWZmIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sIGhhc2hfcGFyZW50PT4kZGlmZi0+eydmcm9tX2lkJ30sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoLCBoYXNoX3BhcmVudF9iYXNlPT4kcGFyZW50LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30sIGZpbGVfcGFyZW50PT4kZGlmZi0+eydmcm9tX2ZpbGUnfSl9LAorCQkJCSAgICAgICAgICAgICAgImRpZmYiKSAuCisJCQkJICAgICAgIiB8ICI7CisJCQl9CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoPT4kZGlmZi0+eyd0b19pZCd9LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRwYXJlbnQsIGZpbGVfbmFtZT0+JGRpZmYtPnsndG9fZmlsZSd9KX0sCisJCQkgICAgICAgICAgICAgICJibG9iIikgLiAiIHwgIjsKKwkJCWlmICgkaGF2ZV9ibGFtZSkgeworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxhbWUiLCBoYXNoX2Jhc2U9PiRoYXNoLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30pfSwKKwkJCQkgICAgICAgICAgICAgICJibGFtZSIpIC4gIiB8ICI7CisJCQl9CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Imhpc3RvcnkiLCBoYXNoX2Jhc2U9PiRoYXNoLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGRpZmYtPnsndG9fZmlsZSd9KX0sCisJCQkgICAgICAgICAgICAgICJoaXN0b3J5Iik7CisJCQlwcmludCAiPC90ZD5cbiI7CisKKwkJfSAjIHdlIHNob3VsZCBub3QgZW5jb3VudGVyIFVubWVyZ2VkIChVKSBvciBVbmtub3duIChYKSBzdGF0dXMKKwkJcHJpbnQgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90Ym9keT4iIGlmICRoYXNfaGVhZGVyOworCXByaW50ICI8L3RhYmxlPlxuIjsKK30KKworIyBQcmludCBjb250ZXh0IGxpbmVzIGFuZCB0aGVuIHJlbS9hZGQgbGluZXMgaW4gYSBzaWRlLWJ5LXNpZGUgbWFubmVyLgorc3ViIHByaW50X3NpZGVieXNpZGVfZGlmZl9saW5lcyB7CisJbXkgKCRjdHgsICRyZW0sICRhZGQpID0gQF87CisKKwkjIHByaW50IGNvbnRleHQgYmxvY2sgYmVmb3JlIGFkZC9yZW0gYmxvY2sKKwlpZiAoQCRjdHgpIHsKKwkJcHJpbnQgam9pbiAnJywKKwkJCSc8ZGl2IGNsYXNzPSJjaHVua19ibG9jayBjdHgiPicsCisJCQkJJzxkaXYgY2xhc3M9Im9sZCI+JywKKwkJCQlAJGN0eCwKKwkJCQknPC9kaXY+JywKKwkJCQknPGRpdiBjbGFzcz0ibmV3Ij4nLAorCQkJCUAkY3R4LAorCQkJCSc8L2Rpdj4nLAorCQkJJzwvZGl2Pic7CisJfQorCisJaWYgKCFAJGFkZCkgeworCQkjIHB1cmUgcmVtb3ZhbAorCQlwcmludCBqb2luICcnLAorCQkJJzxkaXYgY2xhc3M9ImNodW5rX2Jsb2NrIHJlbSI+JywKKwkJCQknPGRpdiBjbGFzcz0ib2xkIj4nLAorCQkJCUAkcmVtLAorCQkJCSc8L2Rpdj4nLAorCQkJJzwvZGl2Pic7CisJfSBlbHNpZiAoIUAkcmVtKSB7CisJCSMgcHVyZSBhZGRpdGlvbgorCQlwcmludCBqb2luICcnLAorCQkJJzxkaXYgY2xhc3M9ImNodW5rX2Jsb2NrIGFkZCI+JywKKwkJCQknPGRpdiBjbGFzcz0ibmV3Ij4nLAorCQkJCUAkYWRkLAorCQkJCSc8L2Rpdj4nLAorCQkJJzwvZGl2Pic7CisJfSBlbHNlIHsKKwkJcHJpbnQgam9pbiAnJywKKwkJCSc8ZGl2IGNsYXNzPSJjaHVua19ibG9jayBjaGciPicsCisJCQkJJzxkaXYgY2xhc3M9Im9sZCI+JywKKwkJCQlAJHJlbSwKKwkJCQknPC9kaXY+JywKKwkJCQknPGRpdiBjbGFzcz0ibmV3Ij4nLAorCQkJCUAkYWRkLAorCQkJCSc8L2Rpdj4nLAorCQkJJzwvZGl2Pic7CisJfQorfQorCisjIFByaW50IGNvbnRleHQgbGluZXMgYW5kIHRoZW4gcmVtL2FkZCBsaW5lcyBpbiBpbmxpbmUgbWFubmVyLgorc3ViIHByaW50X2lubGluZV9kaWZmX2xpbmVzIHsKKwlteSAoJGN0eCwgJHJlbSwgJGFkZCkgPSBAXzsKKworCXByaW50IEAkY3R4LCBAJHJlbSwgQCRhZGQ7Cit9CisKKyMgRm9ybWF0IHJlbW92ZWQgYW5kIGFkZGVkIGxpbmUsIG1hcmsgY2hhbmdlZCBwYXJ0IGFuZCBIVE1MLWZvcm1hdCB0aGVtLgorIyBJbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBjb250cmliL2RpZmYtaGlnaGxpZ2h0CitzdWIgZm9ybWF0X3JlbV9hZGRfbGluZXNfcGFpciB7CisJbXkgKCRyZW0sICRhZGQsICRudW1fcGFyZW50cykgPSBAXzsKKworCSMgV2UgbmVlZCB0byB1bnRhYmlmeSBsaW5lcyBiZWZvcmUgc3BsaXQoKSdpbmcgdGhlbTsKKwkjIG90aGVyd2lzZSBvZmZzZXRzIHdvdWxkIGJlIGludmFsaWQuCisJY2hvbXAgJHJlbTsKKwljaG9tcCAkYWRkOworCSRyZW0gPSB1bnRhYmlmeSgkcmVtKTsKKwkkYWRkID0gdW50YWJpZnkoJGFkZCk7CisKKwlteSBAcmVtID0gc3BsaXQoLy8sICRyZW0pOworCW15IEBhZGQgPSBzcGxpdCgvLywgJGFkZCk7CisJbXkgKCRlc2NfcmVtLCAkZXNjX2FkZCk7CisJIyBJZ25vcmUgbGVhZGluZyArLy0gY2hhcmFjdGVycyBmb3IgZWFjaCBwYXJlbnQuCisJbXkgKCRwcmVmaXhfbGVuLCAkc3VmZml4X2xlbikgPSAoJG51bV9wYXJlbnRzLCAwKTsKKwlteSAoJHByZWZpeF9oYXNfbm9uc3BhY2UsICRzdWZmaXhfaGFzX25vbnNwYWNlKTsKKworCW15ICRzaG9ydGVyID0gKEByZW0gPCBAYWRkKSA/IEByZW0gOiBAYWRkOworCXdoaWxlICgkcHJlZml4X2xlbiA8ICRzaG9ydGVyKSB7CisJCWxhc3QgaWYgKCRyZW1bJHByZWZpeF9sZW5dIG5lICRhZGRbJHByZWZpeF9sZW5dKTsKKworCQkkcHJlZml4X2hhc19ub25zcGFjZSA9IDEgaWYgKCRyZW1bJHByZWZpeF9sZW5dICF+IC9ccy8pOworCQkkcHJlZml4X2xlbisrOworCX0KKworCXdoaWxlICgkcHJlZml4X2xlbiArICRzdWZmaXhfbGVuIDwgJHNob3J0ZXIpIHsKKwkJbGFzdCBpZiAoJHJlbVstMSAtICRzdWZmaXhfbGVuXSBuZSAkYWRkWy0xIC0gJHN1ZmZpeF9sZW5dKTsKKworCQkkc3VmZml4X2hhc19ub25zcGFjZSA9IDEgaWYgKCRyZW1bLTEgLSAkc3VmZml4X2xlbl0gIX4gL1xzLyk7CisJCSRzdWZmaXhfbGVuKys7CisJfQorCisJIyBNYXJrIGxpbmVzIHRoYXQgYXJlIGRpZmZlcmVudCBmcm9tIGVhY2ggb3RoZXIsIGJ1dCBoYXZlIHNvbWUgY29tbW9uCisJIyBwYXJ0IHRoYXQgaXNuJ3Qgd2hpdGVzcGFjZS4gIElmIGxpbmVzIGFyZSBjb21wbGV0ZWx5IGRpZmZlcmVudCwgZG9uJ3QKKwkjIG1hcmsgdGhlbSBiZWNhdXNlIHRoYXQgd291bGQgbWFrZSBvdXRwdXQgdW5yZWFkYWJsZSwgZXNwZWNpYWxseSBpZgorCSMgZGlmZiBjb25zaXN0cyBvZiBtdWx0aXBsZSBsaW5lcy4KKwlpZiAoJHByZWZpeF9oYXNfbm9uc3BhY2UgfHwgJHN1ZmZpeF9oYXNfbm9uc3BhY2UpIHsKKwkJJGVzY19yZW0gPSBlc2NfaHRtbF9obF9yZWdpb25zKCRyZW0sICdtYXJrZWQnLAorCQkgICAgICAgIFskcHJlZml4X2xlbiwgQHJlbSAtICRzdWZmaXhfbGVuXSwgLW5ic3A9PjEpOworCQkkZXNjX2FkZCA9IGVzY19odG1sX2hsX3JlZ2lvbnMoJGFkZCwgJ21hcmtlZCcsCisJCSAgICAgICAgWyRwcmVmaXhfbGVuLCBAYWRkIC0gJHN1ZmZpeF9sZW5dLCAtbmJzcD0+MSk7CisJfSBlbHNlIHsKKwkJJGVzY19yZW0gPSBlc2NfaHRtbCgkcmVtLCAtbmJzcD0+MSk7CisJCSRlc2NfYWRkID0gZXNjX2h0bWwoJGFkZCwgLW5ic3A9PjEpOworCX0KKworCXJldHVybiBmb3JtYXRfZGlmZl9saW5lKFwkZXNjX3JlbSwgJ3JlbScpLAorCSAgICAgICBmb3JtYXRfZGlmZl9saW5lKFwkZXNjX2FkZCwgJ2FkZCcpOworfQorCisjIEhUTUwtZm9ybWF0IGRpZmYgY29udGV4dCwgcmVtb3ZlZCBhbmQgYWRkZWQgbGluZXMuCitzdWIgZm9ybWF0X2N0eF9yZW1fYWRkX2xpbmVzIHsKKwlteSAoJGN0eCwgJHJlbSwgJGFkZCwgJG51bV9wYXJlbnRzKSA9IEBfOworCW15IChAbmV3X2N0eCwgQG5ld19yZW0sIEBuZXdfYWRkKTsKKwlteSAkY2FuX2hpZ2hsaWdodCA9IDA7CisJbXkgJGlzX2NvbWJpbmVkID0gKCRudW1fcGFyZW50cyA+IDEpOworCisJIyBIaWdobGlnaHQgaWYgZXZlcnkgcmVtb3ZlZCBsaW5lIGhhcyBhIGNvcnJlc3BvbmRpbmcgYWRkZWQgbGluZS4KKwlpZiAoQCRhZGQgPiAwICYmIEAkYWRkID09IEAkcmVtKSB7CisJCSRjYW5faGlnaGxpZ2h0ID0gMTsKKworCQkjIEhpZ2hsaWdodCBsaW5lcyBpbiBjb21iaW5lZCBkaWZmIG9ubHkgaWYgdGhlIGNodW5rIGNvbnRhaW5zCisJCSMgZGlmZiBiZXR3ZWVuIHRoZSBzYW1lIHZlcnNpb24sIGUuZy4KKwkJIworCQkjICAgIC0gYQorCQkjICAgLSAgYgorCQkjICAgICsgYworCQkjICAgKyAgZAorCQkjCisJCSMgT3RoZXJ3aXNlIHRoZSBoaWdobGlnaHRpbmcgd291bGQgYmUgY29uZnVzaW5nLgorCQlpZiAoJGlzX2NvbWJpbmVkKSB7CisJCQlmb3IgKG15ICRpID0gMDsgJGkgPCBAJGFkZDsgJGkrKykgeworCQkJCW15ICRwcmVmaXhfcmVtID0gc3Vic3RyKCRyZW0tPlskaV0sIDAsICRudW1fcGFyZW50cyk7CisJCQkJbXkgJHByZWZpeF9hZGQgPSBzdWJzdHIoJGFkZC0+WyRpXSwgMCwgJG51bV9wYXJlbnRzKTsKKworCQkJCSRwcmVmaXhfcmVtID1+IHMvLS8rL2c7CisKKwkJCQlpZiAoJHByZWZpeF9yZW0gbmUgJHByZWZpeF9hZGQpIHsKKwkJCQkJJGNhbl9oaWdobGlnaHQgPSAwOworCQkJCQlsYXN0OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWlmICgkY2FuX2hpZ2hsaWdodCkgeworCQlmb3IgKG15ICRpID0gMDsgJGkgPCBAJGFkZDsgJGkrKykgeworCQkJbXkgKCRsaW5lX3JlbSwgJGxpbmVfYWRkKSA9IGZvcm1hdF9yZW1fYWRkX2xpbmVzX3BhaXIoCisJCQkgICAgICAgICRyZW0tPlskaV0sICRhZGQtPlskaV0sICRudW1fcGFyZW50cyk7CisJCQlwdXNoIEBuZXdfcmVtLCAkbGluZV9yZW07CisJCQlwdXNoIEBuZXdfYWRkLCAkbGluZV9hZGQ7CisJCX0KKwl9IGVsc2UgeworCQlAbmV3X3JlbSA9IG1hcCB7IGZvcm1hdF9kaWZmX2xpbmUoJF8sICdyZW0nKSB9IEAkcmVtOworCQlAbmV3X2FkZCA9IG1hcCB7IGZvcm1hdF9kaWZmX2xpbmUoJF8sICdhZGQnKSB9IEAkYWRkOworCX0KKworCUBuZXdfY3R4ID0gbWFwIHsgZm9ybWF0X2RpZmZfbGluZSgkXywgJ2N0eCcpIH0gQCRjdHg7CisKKwlyZXR1cm4gKFxAbmV3X2N0eCwgXEBuZXdfcmVtLCBcQG5ld19hZGQpOworfQorCisjIFByaW50IGNvbnRleHQgbGluZXMgYW5kIHRoZW4gcmVtL2FkZCBsaW5lcy4KK3N1YiBwcmludF9kaWZmX2xpbmVzIHsKKwlteSAoJGN0eCwgJHJlbSwgJGFkZCwgJGRpZmZfc3R5bGUsICRudW1fcGFyZW50cykgPSBAXzsKKwlteSAkaXNfY29tYmluZWQgPSAkbnVtX3BhcmVudHMgPiAxOworCisJKCRjdHgsICRyZW0sICRhZGQpID0gZm9ybWF0X2N0eF9yZW1fYWRkX2xpbmVzKCRjdHgsICRyZW0sICRhZGQsCisJICAgICAgICAkbnVtX3BhcmVudHMpOworCisJaWYgKCRkaWZmX3N0eWxlIGVxICdzaWRlYnlzaWRlJyAmJiAhJGlzX2NvbWJpbmVkKSB7CisJCXByaW50X3NpZGVieXNpZGVfZGlmZl9saW5lcygkY3R4LCAkcmVtLCAkYWRkKTsKKwl9IGVsc2UgeworCQkjIGRlZmF1bHQgJ2lubGluZScgc3R5bGUgYW5kIHVua25vd24gc3R5bGVzCisJCXByaW50X2lubGluZV9kaWZmX2xpbmVzKCRjdHgsICRyZW0sICRhZGQpOworCX0KK30KKworc3ViIHByaW50X2RpZmZfY2h1bmsgeworCW15ICgkZGlmZl9zdHlsZSwgJG51bV9wYXJlbnRzLCAkZnJvbSwgJHRvLCBAY2h1bmspID0gQF87CisJbXkgKEBjdHgsIEByZW0sIEBhZGQpOworCisJIyBUaGUgY2xhc3Mgb2YgdGhlIHByZXZpb3VzIGxpbmUuCisJbXkgJHByZXZfY2xhc3MgPSAnJzsKKworCXJldHVybiB1bmxlc3MgQGNodW5rOworCisJIyBpbmNvbXBsZXRlIGxhc3QgbGluZSBtaWdodCBiZSBhbW9uZyByZW1vdmVkIG9yIGFkZGVkIGxpbmVzLAorCSMgb3IgYm90aCwgb3IgYW1vbmcgY29udGV4dCBsaW5lczogZmluZCB3aGljaAorCWZvciAobXkgJGkgPSAxOyAkaSA8IEBjaHVuazsgJGkrKykgeworCQlpZiAoJGNodW5rWyRpXVswXSBlcSAnaW5jb21wbGV0ZScpIHsKKwkJCSRjaHVua1skaV1bMF0gPSAkY2h1bmtbJGktMV1bMF07CisJCX0KKwl9CisKKwkjIGd1YXJkaWFuCisJcHVzaCBAY2h1bmssIFsiIiwgIiJdOworCisJZm9yZWFjaCBteSAkbGluZV9pbmZvIChAY2h1bmspIHsKKwkJbXkgKCRjbGFzcywgJGxpbmUpID0gQCRsaW5lX2luZm87CisKKwkJIyBwcmludCBjaHVuayBoZWFkZXJzCisJCWlmICgkY2xhc3MgJiYgJGNsYXNzIGVxICdjaHVua19oZWFkZXInKSB7CisJCQlwcmludCBmb3JtYXRfZGlmZl9saW5lKCRsaW5lLCAkY2xhc3MsICRmcm9tLCAkdG8pOworCQkJbmV4dDsKKwkJfQorCisJCSMjIHByaW50IGZyb20gYWNjdW11bGF0b3Igd2hlbiBoYXZlIHNvbWUgYWRkL3JlbSBsaW5lcyBvciBlbmQKKwkJIyBvZiBjaHVuayAoZmx1c2ggY29udGV4dCBsaW5lcyksIG9yIHdoZW4gaGF2ZSBhZGQgYW5kIHJlbQorCQkjIGxpbmVzIGFuZCBuZXcgYmxvY2sgaXMgcmVhY2hlZCAob3RoZXJ3aXNlIGFkZC9yZW0gbGluZXMgY291bGQKKwkJIyBiZSByZW9yZGVyZWQpCisJCWlmICghJGNsYXNzIHx8ICgoQHJlbSB8fCBAYWRkKSAmJiAkY2xhc3MgZXEgJ2N0eCcpIHx8CisJCSAgICAoQHJlbSAmJiBAYWRkICYmICRjbGFzcyBuZSAkcHJldl9jbGFzcykpIHsKKwkJCXByaW50X2RpZmZfbGluZXMoXEBjdHgsIFxAcmVtLCBcQGFkZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICRkaWZmX3N0eWxlLCAkbnVtX3BhcmVudHMpOworCQkJQGN0eCA9IEByZW0gPSBAYWRkID0gKCk7CisJCX0KKworCQkjIyBhZGRpbmcgbGluZXMgdG8gYWNjdW11bGF0b3IKKwkJIyBndWFyZGlhbiB2YWx1ZQorCQlsYXN0IHVubGVzcyAkbGluZTsKKwkJIyByZW0sIGFkZCBvciBjaGFuZ2UKKwkJaWYgKCRjbGFzcyBlcSAncmVtJykgeworCQkJcHVzaCBAcmVtLCAkbGluZTsKKwkJfSBlbHNpZiAoJGNsYXNzIGVxICdhZGQnKSB7CisJCQlwdXNoIEBhZGQsICRsaW5lOworCQl9CisJCSMgY29udGV4dCBsaW5lCisJCWlmICgkY2xhc3MgZXEgJ2N0eCcpIHsKKwkJCXB1c2ggQGN0eCwgJGxpbmU7CisJCX0KKworCQkkcHJldl9jbGFzcyA9ICRjbGFzczsKKwl9Cit9CisKK3N1YiBnaXRfcGF0Y2hzZXRfYm9keSB7CisJbXkgKCRmZCwgJGRpZmZfc3R5bGUsICRkaWZmdHJlZSwgJGhhc2gsIEBoYXNoX3BhcmVudHMpID0gQF87CisJbXkgKCRoYXNoX3BhcmVudCkgPSAkaGFzaF9wYXJlbnRzWzBdOworCisJbXkgJGlzX2NvbWJpbmVkID0gKEBoYXNoX3BhcmVudHMgPiAxKTsKKwlteSAkcGF0Y2hfaWR4ID0gMDsKKwlteSAkcGF0Y2hfbnVtYmVyID0gMDsKKwlteSAkcGF0Y2hfbGluZTsKKwlteSAkZGlmZmluZm87CisJbXkgJHRvX25hbWU7CisJbXkgKCVmcm9tLCAldG8pOworCW15IEBjaHVuazsgIyBmb3Igc2lkZS1ieS1zaWRlIGRpZmYKKworCXByaW50ICI8ZGl2IGNsYXNzPVwicGF0Y2hzZXRcIj5cbiI7CisKKwkjIHNraXAgdG8gZmlyc3QgcGF0Y2gKKwl3aGlsZSAoJHBhdGNoX2xpbmUgPSA8JGZkPikgeworCQljaG9tcCAkcGF0Y2hfbGluZTsKKworCQlsYXN0IGlmICgkcGF0Y2hfbGluZSA9fiBtL15kaWZmIC8pOworCX0KKworIFBBVENIOgorCXdoaWxlICgkcGF0Y2hfbGluZSkgeworCisJCSMgcGFyc2UgImdpdCBkaWZmIiBoZWFkZXIgbGluZQorCQlpZiAoJHBhdGNoX2xpbmUgPX4gbS9eZGlmZiAtLWdpdCAoXCIoPzpbXlxcXCJdKig/OlxcLlteXFxcIl0qKSopXCJ8W14gIl0qKSAoLiopJC8pIHsKKwkJCSMgJDEgaXMgZnJvbV9uYW1lLCB3aGljaCB3ZSBkbyBub3QgdXNlCisJCQkkdG9fbmFtZSA9IHVucXVvdGUoJDIpOworCQkJJHRvX25hbWUgPX4gcyFeYi8hITsKKwkJfSBlbHNpZiAoJHBhdGNoX2xpbmUgPX4gbS9eZGlmZiAtLShjY3xjb21iaW5lZCkgKCI/LioiPykkLykgeworCQkJIyAkMSBpcyAnY2MnIG9yICdjb21iaW5lZCcsIHdoaWNoIHdlIGRvIG5vdCB1c2UKKwkJCSR0b19uYW1lID0gdW5xdW90ZSgkMik7CisJCX0gZWxzZSB7CisJCQkkdG9fbmFtZSA9IHVuZGVmOworCQl9CisKKwkJIyBjaGVjayBpZiBjdXJyZW50IHBhdGNoIGJlbG9uZyB0byBjdXJyZW50IHJhdyBsaW5lCisJCSMgYW5kIHBhcnNlIHJhdyBnaXQtZGlmZiBsaW5lIGlmIG5lZWRlZAorCQlpZiAoaXNfcGF0Y2hfc3BsaXQoJGRpZmZpbmZvLCB7ICd0b19maWxlJyA9PiAkdG9fbmFtZSB9KSkgeworCQkJIyB0aGlzIGlzIGNvbnRpbnVhdGlvbiBvZiBhIHNwbGl0IHBhdGNoCisJCQlwcmludCAiPGRpdiBjbGFzcz1cInBhdGNoIGNvbnRcIj5cbiI7CisJCX0gZWxzZSB7CisJCQkjIGFkdmFuY2UgcmF3IGdpdC1kaWZmIG91dHB1dCBpZiBuZWVkZWQKKwkJCSRwYXRjaF9pZHgrKyBpZiBkZWZpbmVkICRkaWZmaW5mbzsKKworCQkJIyByZWFkIGFuZCBwcmVwYXJlIHBhdGNoIGluZm9ybWF0aW9uCisJCQkkZGlmZmluZm8gPSBwYXJzZWRfZGlmZnRyZWVfbGluZSgkZGlmZnRyZWUtPlskcGF0Y2hfaWR4XSk7CisKKwkJCSMgY29tcGFjdCBjb21iaW5lZCBkaWZmIG91dHB1dCBjYW4gaGF2ZSBzb21lIHBhdGNoZXMgc2tpcHBlZAorCQkJIyBmaW5kIHdoaWNoIHBhdGNoICh1c2luZyBwYXRobmFtZSBvZiByZXN1bHQpIHdlIGFyZSBhdCBub3c7CisJCQlpZiAoJGlzX2NvbWJpbmVkKSB7CisJCQkJd2hpbGUgKCR0b19uYW1lIG5lICRkaWZmaW5mby0+eyd0b19maWxlJ30pIHsKKwkJCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYXRjaFwiIGlkPVwicGF0Y2giLiAoJHBhdGNoX2lkeCsxKSAuIlwiPlxuIiAuCisJCQkJCSAgICAgIGZvcm1hdF9kaWZmX2NjX3NpbXBsaWZpZWQoJGRpZmZpbmZvLCBAaGFzaF9wYXJlbnRzKSAuCisJCQkJCSAgICAgICI8L2Rpdj5cbiI7ICAjIGNsYXNzPSJwYXRjaCIKKworCQkJCQkkcGF0Y2hfaWR4Kys7CisJCQkJCSRwYXRjaF9udW1iZXIrKzsKKworCQkJCQlsYXN0IGlmICRwYXRjaF9pZHggPiAkIyRkaWZmdHJlZTsKKwkJCQkJJGRpZmZpbmZvID0gcGFyc2VkX2RpZmZ0cmVlX2xpbmUoJGRpZmZ0cmVlLT5bJHBhdGNoX2lkeF0pOworCQkJCX0KKwkJCX0KKworCQkJIyBtb2RpZmllcyAlZnJvbSwgJXRvIGhhc2hlcworCQkJcGFyc2VfZnJvbV90b19kaWZmaW5mbygkZGlmZmluZm8sIFwlZnJvbSwgXCV0bywgQGhhc2hfcGFyZW50cyk7CisKKwkJCSMgdGhpcyBpcyBmaXJzdCBwYXRjaCBmb3IgcmF3IGRpZmZ0cmVlIGxpbmUgd2l0aCAkcGF0Y2hfaWR4IGluZGV4CisJCQkjIHdlIGluZGV4IEAkZGlmZnRyZWUgYXJyYXkgZnJvbSAwLCBidXQgbnVtYmVyIHBhdGNoZXMgZnJvbSAxCisJCQlwcmludCAiPGRpdiBjbGFzcz1cInBhdGNoXCIgaWQ9XCJwYXRjaCIuICgkcGF0Y2hfaWR4KzEpIC4iXCI+XG4iOworCQl9CisKKwkJIyBnaXQgZGlmZiBoZWFkZXIKKwkJI2Fzc2VydCgkcGF0Y2hfbGluZSA9fiBtL15kaWZmIC8pIGlmIERFQlVHOworCQkjYXNzZXJ0KCRwYXRjaF9saW5lICF+IG0hJC8kISkgaWYgREVCVUc7ICMgaXMgY2hvbXAtZWQKKwkJJHBhdGNoX251bWJlcisrOworCQkjIHByaW50ICJnaXQgZGlmZiIgaGVhZGVyCisJCXByaW50IGZvcm1hdF9naXRfZGlmZl9oZWFkZXJfbGluZSgkcGF0Y2hfbGluZSwgJGRpZmZpbmZvLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCVmcm9tLCBcJXRvKTsKKworCQkjIHByaW50IGV4dGVuZGVkIGRpZmYgaGVhZGVyCisJCXByaW50ICI8ZGl2IGNsYXNzPVwiZGlmZiBleHRlbmRlZF9oZWFkZXJcIj5cbiI7CisJRVhURU5ERURfSEVBREVSOgorCQl3aGlsZSAoJHBhdGNoX2xpbmUgPSA8JGZkPikgeworCQkJY2hvbXAgJHBhdGNoX2xpbmU7CisKKwkJCWxhc3QgRVhURU5ERURfSEVBREVSIGlmICgkcGF0Y2hfbGluZSA9fiBtL14tLS0gfF5kaWZmIC8pOworCisJCQlwcmludCBmb3JtYXRfZXh0ZW5kZWRfZGlmZl9oZWFkZXJfbGluZSgkcGF0Y2hfbGluZSwgJGRpZmZpbmZvLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCVmcm9tLCBcJXRvKTsKKwkJfQorCQlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJkaWZmIGV4dGVuZGVkX2hlYWRlciIKKworCQkjIGZyb20tZmlsZS90by1maWxlIGRpZmYgaGVhZGVyCisJCWlmICghICRwYXRjaF9saW5lKSB7CisJCQlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJwYXRjaCIKKwkJCWxhc3QgUEFUQ0g7CisJCX0KKwkJbmV4dCBQQVRDSCBpZiAoJHBhdGNoX2xpbmUgPX4gbS9eZGlmZiAvKTsKKwkJI2Fzc2VydCgkcGF0Y2hfbGluZSA9fiBtL14tLS0vKSBpZiBERUJVRzsKKworCQlteSAkbGFzdF9wYXRjaF9saW5lID0gJHBhdGNoX2xpbmU7CisJCSRwYXRjaF9saW5lID0gPCRmZD47CisJCWNob21wICRwYXRjaF9saW5lOworCQkjYXNzZXJ0KCRwYXRjaF9saW5lID1+IG0vXlwrXCtcKy8pIGlmIERFQlVHOworCisJCXByaW50IGZvcm1hdF9kaWZmX2Zyb21fdG9faGVhZGVyKCRsYXN0X3BhdGNoX2xpbmUsICRwYXRjaF9saW5lLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlmZmluZm8sIFwlZnJvbSwgXCV0bywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGhhc2hfcGFyZW50cyk7CisKKwkJIyB0aGUgcGF0Y2ggaXRzZWxmCisJTElORToKKwkJd2hpbGUgKCRwYXRjaF9saW5lID0gPCRmZD4pIHsKKwkJCWNob21wICRwYXRjaF9saW5lOworCisJCQluZXh0IFBBVENIIGlmICgkcGF0Y2hfbGluZSA9fiBtL15kaWZmIC8pOworCisJCQlteSAkY2xhc3MgPSBkaWZmX2xpbmVfY2xhc3MoJHBhdGNoX2xpbmUsIFwlZnJvbSwgXCV0byk7CisKKwkJCWlmICgkY2xhc3MgZXEgJ2NodW5rX2hlYWRlcicpIHsKKwkJCQlwcmludF9kaWZmX2NodW5rKCRkaWZmX3N0eWxlLCBzY2FsYXIgQGhhc2hfcGFyZW50cywgXCVmcm9tLCBcJXRvLCBAY2h1bmspOworCQkJCUBjaHVuayA9ICgpOworCQkJfQorCisJCQlwdXNoIEBjaHVuaywgWyAkY2xhc3MsICRwYXRjaF9saW5lIF07CisJCX0KKworCX0gY29udGludWUgeworCQlpZiAoQGNodW5rKSB7CisJCQlwcmludF9kaWZmX2NodW5rKCRkaWZmX3N0eWxlLCBzY2FsYXIgQGhhc2hfcGFyZW50cywgXCVmcm9tLCBcJXRvLCBAY2h1bmspOworCQkJQGNodW5rID0gKCk7CisJCX0KKwkJcHJpbnQgIjwvZGl2PlxuIjsgIyBjbGFzcz0icGF0Y2giCisJfQorCisJIyBmb3IgY29tcGFjdCBjb21iaW5lZCAoLS1jYykgZm9ybWF0LCB3aXRoIGNodW5rIGFuZCBwYXRjaCBzaW1wbGlmaWNhdGlvbgorCSMgdGhlIHBhdGNoc2V0IG1pZ2h0IGJlIGVtcHR5LCBidXQgdGhlcmUgbWlnaHQgYmUgdW5wcm9jZXNzZWQgcmF3IGxpbmVzCisJZm9yICgrKyRwYXRjaF9pZHggaWYgJHBhdGNoX251bWJlciA+IDA7CisJICAgICAkcGF0Y2hfaWR4IDwgQCRkaWZmdHJlZTsKKwkgICAgICsrJHBhdGNoX2lkeCkgeworCQkjIHJlYWQgYW5kIHByZXBhcmUgcGF0Y2ggaW5mb3JtYXRpb24KKwkJJGRpZmZpbmZvID0gcGFyc2VkX2RpZmZ0cmVlX2xpbmUoJGRpZmZ0cmVlLT5bJHBhdGNoX2lkeF0pOworCisJCSMgZ2VuZXJhdGUgYW5jaG9yIGZvciAicGF0Y2giIGxpbmtzIGluIGRpZmZ0cmVlIC8gd2hhdGNoYW5nZWQgcGFydAorCQlwcmludCAiPGRpdiBjbGFzcz1cInBhdGNoXCIgaWQ9XCJwYXRjaCIuICgkcGF0Y2hfaWR4KzEpIC4iXCI+XG4iIC4KKwkJICAgICAgZm9ybWF0X2RpZmZfY2Nfc2ltcGxpZmllZCgkZGlmZmluZm8sIEBoYXNoX3BhcmVudHMpIC4KKwkJICAgICAgIjwvZGl2PlxuIjsgICMgY2xhc3M9InBhdGNoIgorCisJCSRwYXRjaF9udW1iZXIrKzsKKwl9CisKKwlpZiAoJHBhdGNoX251bWJlciA9PSAwKSB7CisJCWlmIChAaGFzaF9wYXJlbnRzID4gMSkgeworCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJkaWZmIG5vZGlmZmVyZW5jZXNcIj5Ucml2aWFsIG1lcmdlPC9kaXY+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJkaWZmIG5vZGlmZmVyZW5jZXNcIj5ObyBkaWZmZXJlbmNlcyBmb3VuZDwvZGl2PlxuIjsKKwkJfQorCX0KKworCXByaW50ICI8L2Rpdj5cbiI7ICMgY2xhc3M9InBhdGNoc2V0IgorfQorCisjIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuCisKK3N1YiBnaXRfcHJvamVjdF9zZWFyY2hfZm9ybSB7CisJbXkgKCRzZWFyY2h0ZXh0LCAkc2VhcmNoX3VzZV9yZWdleHApID0gQF87CisKKwlteSAkbGltaXQgPSAnJzsKKwlpZiAoJHByb2plY3RfZmlsdGVyKSB7CisJCSRsaW1pdCA9ICIgaW4gJyRwcm9qZWN0X2ZpbHRlci8nIjsKKwl9CisKKwlwcmludCAiPGRpdiBjbGFzcz1cInByb2pzZWFyY2hcIj5cbiI7CisJcHJpbnQgJGNnaS0+c3RhcnRfZm9ybSgtbWV0aG9kID0+ICdnZXQnLCAtYWN0aW9uID0+ICRteV91cmkpIC4KKwkgICAgICAkY2dpLT5oaWRkZW4oLW5hbWUgPT4gJ2EnLCAtdmFsdWUgPT4gJ3Byb2plY3RfbGlzdCcpICAuICJcbiI7CisJcHJpbnQgJGNnaS0+aGlkZGVuKC1uYW1lID0+ICdwZicsIC12YWx1ZSA9PiAkcHJvamVjdF9maWx0ZXIpLiAiXG4iCisJCWlmIChkZWZpbmVkICRwcm9qZWN0X2ZpbHRlcik7CisJcHJpbnQgJGNnaS0+dGV4dGZpZWxkKC1uYW1lID0+ICdzJywgLXZhbHVlID0+ICRzZWFyY2h0ZXh0LAorCSAgICAgICAgICAgICAgICAgICAgICAtdGl0bGUgPT4gIlNlYXJjaCBwcm9qZWN0IGJ5IG5hbWUgYW5kIGRlc2NyaXB0aW9uJGxpbWl0IiwKKwkgICAgICAgICAgICAgICAgICAgICAgLXNpemUgPT4gNjApIC4gIlxuIiAuCisJICAgICAgIjxzcGFuIHRpdGxlPVwiRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uXCI+IiAuCisJICAgICAgJGNnaS0+Y2hlY2tib3goLW5hbWUgPT4gJ3NyJywgLXZhbHVlID0+IDEsIC1sYWJlbCA9PiAncmUnLAorCSAgICAgICAgICAgICAgICAgICAgIC1jaGVja2VkID0+ICRzZWFyY2hfdXNlX3JlZ2V4cCkgLgorCSAgICAgICI8L3NwYW4+XG4iIC4KKwkgICAgICAkY2dpLT5zdWJtaXQoLW5hbWUgPT4gJ2J0blMnLCAtdmFsdWUgPT4gJ1NlYXJjaCcpIC4KKwkgICAgICAkY2dpLT5lbmRfZm9ybSgpIC4gIlxuIiAuCisJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0ID0+IHVuZGVmLCBzZWFyY2h0ZXh0ID0+IHVuZGVmLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdF9maWx0ZXIgPT4gJHByb2plY3RfZmlsdGVyKX0sCisJICAgICAgICAgICAgICBlc2NfaHRtbCgiTGlzdCBhbGwgcHJvamVjdHMkbGltaXQiKSkgLiAiPGJyIC8+XG4iOworCXByaW50ICI8L2Rpdj5cbiI7Cit9CisKKyMgZW50cnkgZm9yIGdpdmVuIEBrZXlzIG5lZWRzIGZpbGxpbmcgaWYgYXQgbGVhc3Qgb25lIG9mIGtleXMgaW4gbGlzdAorIyBpcyBub3QgcHJlc2VudCBpbiAlJHByb2plY3RfaW5mbworc3ViIHByb2plY3RfaW5mb19uZWVkc19maWxsaW5nIHsKKwlteSAoJHByb2plY3RfaW5mbywgQGtleXMpID0gQF87CisKKwkjIHJldHVybiBMaXN0OjpNb3JlVXRpbHM6OmFueSB7ICFleGlzdHMgJHByb2plY3RfaW5mby0+eyRffSB9IEBrZXlzOworCWZvcmVhY2ggbXkgJGtleSAoQGtleXMpIHsKKwkJaWYgKCFleGlzdHMgJHByb2plY3RfaW5mby0+eyRrZXl9KSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKyMgZmlsbHMgcHJvamVjdCBsaXN0IGluZm8gKGFnZSwgZGVzY3JpcHRpb24sIG93bmVyLCBjYXRlZ29yeSwgZm9ya3MsIGV0Yy4pCisjIGZvciBlYWNoIHByb2plY3QgaW4gdGhlIGxpc3QsIHJlbW92aW5nIGludmFsaWQgcHJvamVjdHMgZnJvbQorIyByZXR1cm5lZCBsaXN0LCBvciBmaWxsIG9ubHkgc3BlY2lmaWVkIGluZm8uCisjCisjIEludmFsaWQgcHJvamVjdHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgcmV0dXJuZWQgbGlzdCBpZiBhbmQgb25seSBpZiB5b3UKKyMgYXNrICdhZ2UnIG9yICdhZ2Vfc3RyaW5nJyB0byBiZSBmaWxsZWQsIGJlY2F1c2UgdGhleSBhcmUgdGhlIG9ubHkgZmllbGRzCisjIHRoYXQgcnVuIHVuY29uZGl0aW9uYWxseSBnaXQgY29tbWFuZCB0aGF0IHJlcXVpcmVzIHJlcG9zaXRvcnksIGFuZAorIyB0aGVyZWZvcmUgZG8gYWx3YXlzIGNoZWNrIGlmIHByb2plY3QgcmVwb3NpdG9yeSBpcyBpbnZhbGlkLgorIworIyBVU0FHRToKKyMgKiBmaWxsX3Byb2plY3RfbGlzdF9pbmZvKFxAcHJvamVjdF9saXN0LCAnZGVzY3JfbG9uZycsICdjdGFncycpCisjICAgZW5zdXJlcyB0aGF0ICdkZXNjcl9sb25nJyBhbmQgJ2N0YWdzJyBmaWVsZHMgYXJlIGZpbGxlZAorIyAqIEBwcm9qZWN0X2xpc3QgPSBmaWxsX3Byb2plY3RfbGlzdF9pbmZvKFxAcHJvamVjdF9saXN0KQorIyAgIGVuc3VyZXMgdGhhdCBhbGwgZmllbGRzIGFyZSBmaWxsZWQgKGFuZCBpbnZhbGlkIHByb2plY3RzIHJlbW92ZWQpCisjCisjIE5PVEU6IG1vZGlmaWVzICRwcm9qbGlzdCwgYnV0IGRvZXMgbm90IHJlbW92ZSBlbnRyaWVzIGZyb20gaXQKK3N1YiBmaWxsX3Byb2plY3RfbGlzdF9pbmZvIHsKKwlteSAoJHByb2psaXN0LCBAd2FudGVkX2tleXMpID0gQF87CisJbXkgQHByb2plY3RzOworCW15ICRmaWx0ZXJfc2V0ID0gc3ViIHsgcmV0dXJuIEBfOyB9OworCWlmIChAd2FudGVkX2tleXMpIHsKKwkJbXkgJXdhbnRlZF9rZXlzID0gbWFwIHsgJF8gPT4gMSB9IEB3YW50ZWRfa2V5czsKKwkJJGZpbHRlcl9zZXQgPSBzdWIgeyByZXR1cm4gZ3JlcCB7ICR3YW50ZWRfa2V5c3skX30gfSBAXzsgfTsKKwl9CisKKwlteSAkc2hvd19jdGFncyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdjdGFncycpOworIFBST0pFQ1Q6CisJZm9yZWFjaCBteSAkcHIgKEAkcHJvamxpc3QpIHsKKwkJaWYgKHByb2plY3RfaW5mb19uZWVkc19maWxsaW5nKCRwciwgJGZpbHRlcl9zZXQtPignYWdlJywgJ2FnZV9zdHJpbmcnKSkpIHsKKwkJCW15IChAYWN0aXZpdHkpID0gZ2l0X2dldF9sYXN0X2FjdGl2aXR5KCRwci0+eydwYXRoJ30pOworCQkJdW5sZXNzIChAYWN0aXZpdHkpIHsKKwkJCQluZXh0IFBST0pFQ1Q7CisJCQl9CisJCQkoJHByLT57J2FnZSd9LCAkcHItPnsnYWdlX3N0cmluZyd9KSA9IEBhY3Rpdml0eTsKKwkJfQorCQlpZiAocHJvamVjdF9pbmZvX25lZWRzX2ZpbGxpbmcoJHByLCAkZmlsdGVyX3NldC0+KCdkZXNjcicsICdkZXNjcl9sb25nJykpKSB7CisJCQlteSAkZGVzY3IgPSBnaXRfZ2V0X3Byb2plY3RfZGVzY3JpcHRpb24oJHByLT57J3BhdGgnfSkgfHwgIiI7CisJCQkkZGVzY3IgPSB0b191dGY4KCRkZXNjcik7CisJCQkkcHItPnsnZGVzY3JfbG9uZyd9ID0gJGRlc2NyOworCQkJJHByLT57J2Rlc2NyJ30gPSBjaG9wX3N0cigkZGVzY3IsICRwcm9qZWN0c19saXN0X2Rlc2NyaXB0aW9uX3dpZHRoLCA1KTsKKwkJfQorCQlpZiAocHJvamVjdF9pbmZvX25lZWRzX2ZpbGxpbmcoJHByLCAkZmlsdGVyX3NldC0+KCdvd25lcicpKSkgeworCQkJJHByLT57J293bmVyJ30gPSBnaXRfZ2V0X3Byb2plY3Rfb3duZXIoIiRwci0+eydwYXRoJ30iKSB8fCAiIjsKKwkJfQorCQlpZiAoJHNob3dfY3RhZ3MgJiYKKwkJICAgIHByb2plY3RfaW5mb19uZWVkc19maWxsaW5nKCRwciwgJGZpbHRlcl9zZXQtPignY3RhZ3MnKSkpIHsKKwkJCSRwci0+eydjdGFncyd9ID0gZ2l0X2dldF9wcm9qZWN0X2N0YWdzKCRwci0+eydwYXRoJ30pOworCQl9CisJCWlmICgkcHJvamVjdHNfbGlzdF9ncm91cF9jYXRlZ29yaWVzICYmCisJCSAgICBwcm9qZWN0X2luZm9fbmVlZHNfZmlsbGluZygkcHIsICRmaWx0ZXJfc2V0LT4oJ2NhdGVnb3J5JykpKSB7CisJCQlteSAkY2F0ID0gZ2l0X2dldF9wcm9qZWN0X2NhdGVnb3J5KCRwci0+eydwYXRoJ30pIHx8CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcm9qZWN0X2xpc3RfZGVmYXVsdF9jYXRlZ29yeTsKKwkJCSRwci0+eydjYXRlZ29yeSd9ID0gdG9fdXRmOCgkY2F0KTsKKwkJfQorCisJCXB1c2ggQHByb2plY3RzLCAkcHI7CisJfQorCisJcmV0dXJuIEBwcm9qZWN0czsKK30KKworc3ViIHNvcnRfcHJvamVjdHNfbGlzdCB7CisJbXkgKCRwcm9qbGlzdCwgJG9yZGVyKSA9IEBfOworCisJc3ViIG9yZGVyX3N0ciB7CisJCW15ICRrZXkgPSBzaGlmdDsKKwkJcmV0dXJuIHN1YiB7ICRhLT57JGtleX0gY21wICRiLT57JGtleX0gfTsKKwl9CisKKwlzdWIgb3JkZXJfbnVtX3RoZW5fdW5kZWYgeworCQlteSAka2V5ID0gc2hpZnQ7CisJCXJldHVybiBzdWIgeworCQkJZGVmaW5lZCAkYS0+eyRrZXl9ID8KKwkJCQkoZGVmaW5lZCAkYi0+eyRrZXl9ID8gJGEtPnska2V5fSA8PT4gJGItPnska2V5fSA6IC0xKSA6CisJCQkJKGRlZmluZWQgJGItPnska2V5fSA/IDEgOiAwKQorCQl9OworCX0KKworCW15ICVvcmRlcmluZ3MgPSAoCisJCXByb2plY3QgPT4gb3JkZXJfc3RyKCdwYXRoJyksCisJCWRlc2NyID0+IG9yZGVyX3N0cignZGVzY3JfbG9uZycpLAorCQlvd25lciA9PiBvcmRlcl9zdHIoJ293bmVyJyksCisJCWFnZSA9PiBvcmRlcl9udW1fdGhlbl91bmRlZignYWdlJyksCisJKTsKKworCW15ICRvcmRlcmluZyA9ICRvcmRlcmluZ3N7JG9yZGVyfTsKKwlyZXR1cm4gZGVmaW5lZCAkb3JkZXJpbmcgPyBzb3J0ICRvcmRlcmluZyBAJHByb2psaXN0IDogQCRwcm9qbGlzdDsKK30KKworIyByZXR1cm5zIGEgaGFzaCBvZiBjYXRlZ29yaWVzLCBjb250YWluaW5nIHRoZSBsaXN0IG9mIHByb2plY3QKKyMgYmVsb25naW5nIHRvIGVhY2ggY2F0ZWdvcnkKK3N1YiBidWlsZF9wcm9qbGlzdF9ieV9jYXRlZ29yeSB7CisJbXkgKCRwcm9qbGlzdCwgJGZyb20sICR0bykgPSBAXzsKKwlteSAlY2F0ZWdvcmllczsKKworCSRmcm9tID0gMCB1bmxlc3MgZGVmaW5lZCAkZnJvbTsKKwkkdG8gPSAkIyRwcm9qbGlzdCBpZiAoIWRlZmluZWQgJHRvIHx8ICQjJHByb2psaXN0IDwgJHRvKTsKKworCWZvciAobXkgJGkgPSAkZnJvbTsgJGkgPD0gJHRvOyAkaSsrKSB7CisJCW15ICRwciA9ICRwcm9qbGlzdC0+WyRpXTsKKwkJcHVzaCBAeyRjYXRlZ29yaWVzeyAkcHItPnsnY2F0ZWdvcnknfSB9fSwgJHByOworCX0KKworCXJldHVybiB3YW50YXJyYXkgPyAlY2F0ZWdvcmllcyA6IFwlY2F0ZWdvcmllczsKK30KKworIyBwcmludCAnc29ydCBieScgPHRoPiBlbGVtZW50LCBnZW5lcmF0aW5nICdzb3J0IGJ5ICRuYW1lJyByZXBsYXkgbGluaworIyBpZiB0aGF0IG9yZGVyIGlzIG5vdCBzZWxlY3RlZAorc3ViIHByaW50X3NvcnRfdGggeworCXByaW50IGZvcm1hdF9zb3J0X3RoKEBfKTsKK30KKworc3ViIGZvcm1hdF9zb3J0X3RoIHsKKwlteSAoJG5hbWUsICRvcmRlciwgJGhlYWRlcikgPSBAXzsKKwlteSAkc29ydF90aCA9ICIiOworCSRoZWFkZXIgfHw9IHVjZmlyc3QoJG5hbWUpOworCisJaWYgKCRvcmRlciBlcSAkbmFtZSkgeworCQkkc29ydF90aCAuPSAiPHRoPiRoZWFkZXI8L3RoPlxuIjsKKwl9IGVsc2UgeworCQkkc29ydF90aCAuPSAiPHRoPiIgLgorCQkgICAgICAgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIG9yZGVyPT4kbmFtZSksCisJCSAgICAgICAgICAgICAgICAgICAgIC1jbGFzcyA9PiAiaGVhZGVyIn0sICRoZWFkZXIpIC4KKwkJICAgICAgICAgICAgIjwvdGg+XG4iOworCX0KKworCXJldHVybiAkc29ydF90aDsKK30KKworc3ViIGdpdF9wcm9qZWN0X2xpc3Rfcm93cyB7CisJbXkgKCRwcm9qbGlzdCwgJGZyb20sICR0bywgJGNoZWNrX2ZvcmtzKSA9IEBfOworCisJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOworCSR0byA9ICQjJHByb2psaXN0IGlmICghZGVmaW5lZCAkdG8gfHwgJCMkcHJvamxpc3QgPCAkdG8pOworCisJbXkgJGFsdGVybmF0ZSA9IDE7CisJZm9yIChteSAkaSA9ICRmcm9tOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJHByID0gJHByb2psaXN0LT5bJGldOworCisJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJfQorCQkkYWx0ZXJuYXRlIF49IDE7CisKKwkJaWYgKCRjaGVja19mb3JrcykgeworCQkJcHJpbnQgIjx0ZD4iOworCQkJaWYgKCRwci0+eydmb3Jrcyd9KSB7CisJCQkJbXkgJG5mb3JrcyA9IHNjYWxhciBAeyRwci0+eydmb3Jrcyd9fTsKKwkJCQlpZiAoJG5mb3JrcyA+IDApIHsKKwkJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT4kcHItPnsncGF0aCd9LCBhY3Rpb249PiJmb3JrcyIpLAorCQkJCQkgICAgICAgICAgICAgICAtdGl0bGUgPT4gIiRuZm9ya3MgZm9ya3MifSwgIisiKTsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludCAkY2dpLT5zcGFuKHstdGl0bGUgPT4gIiRuZm9ya3MgZm9ya3MifSwgIisiKTsKKwkJCQl9CisJCQl9CisJCQlwcmludCAiPC90ZD5cbiI7CisJCX0KKwkJcHJpbnQgIjx0ZD4iIC4gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT4kcHItPnsncGF0aCd9LCBhY3Rpb249PiJzdW1tYXJ5IiksCisJCSAgICAgICAgICAgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCJ9LAorCQkgICAgICAgICAgICAgICAgICAgICAgIGVzY19odG1sX21hdGNoX2hsKCRwci0+eydwYXRoJ30sICRzZWFyY2hfcmVnZXhwKSkgLgorCQkgICAgICAiPC90ZD5cbiIgLgorCQkgICAgICAiPHRkPiIgLiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PiRwci0+eydwYXRoJ30sIGFjdGlvbj0+InN1bW1hcnkiKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0IiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgLXRpdGxlID0+ICRwci0+eydkZXNjcl9sb25nJ319LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNoX3JlZ2V4cAorCQkgICAgICAgICAgICAgICAgICAgICAgICA/IGVzY19odG1sX21hdGNoX2hsX2Nob3BwZWQoJHByLT57J2Rlc2NyX2xvbmcnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwci0+eydkZXNjcid9LCAkc2VhcmNoX3JlZ2V4cCkKKwkJICAgICAgICAgICAgICAgICAgICAgICAgOiBlc2NfaHRtbCgkcHItPnsnZGVzY3InfSkpIC4KKwkJICAgICAgIjwvdGQ+XG4iOworCQl1bmxlc3MgKCRvbWl0X293bmVyKSB7CisJCSAgICAgICAgcHJpbnQgIjx0ZD48aT4iIC4gY2hvcF9hbmRfZXNjYXBlX3N0cigkcHItPnsnb3duZXInfSwgMTUpIC4gIjwvaT48L3RkPlxuIjsKKwkJfQorCQl1bmxlc3MgKCRvbWl0X2FnZV9jb2x1bW4pIHsKKwkJICAgICAgICBwcmludCAiPHRkIGNsYXNzPVwiIi4gYWdlX2NsYXNzKCRwci0+eydhZ2UnfSkgLiAiXCI+IiAuCisJCSAgICAgICAgICAgIChkZWZpbmVkICRwci0+eydhZ2Vfc3RyaW5nJ30gPyAkcHItPnsnYWdlX3N0cmluZyd9IDogIk5vIGNvbW1pdHMiKSAuICI8L3RkPlxuIjsKKwkJfQorCQlwcmludCI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYocHJvamVjdD0+JHByLT57J3BhdGgnfSwgYWN0aW9uPT4ic3VtbWFyeSIpfSwgInN1bW1hcnkiKSAgIC4gIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PiRwci0+eydwYXRoJ30sIGFjdGlvbj0+InNob3J0bG9nIil9LCAic2hvcnRsb2ciKSAuICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT4kcHItPnsncGF0aCd9LCBhY3Rpb249PiJsb2ciKX0sICJsb2ciKSAuICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT4kcHItPnsncGF0aCd9LCBhY3Rpb249PiJ0cmVlIil9LCAidHJlZSIpIC4KKwkJICAgICAgKCRwci0+eydmb3Jrcyd9ID8gIiB8ICIgLiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PiRwci0+eydwYXRoJ30sIGFjdGlvbj0+ImZvcmtzIil9LCAiZm9ya3MiKSA6ICcnKSAuCisJCSAgICAgICI8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9Cit9CisKK3N1YiBnaXRfcHJvamVjdF9saXN0X2JvZHkgeworCSMgYWN0dWFsbHkgdXNlcyBnbG9iYWwgdmFyaWFibGUgJHByb2plY3QKKwlteSAoJHByb2psaXN0LCAkb3JkZXIsICRmcm9tLCAkdG8sICRleHRyYSwgJG5vX2hlYWRlcikgPSBAXzsKKwlteSBAcHJvamVjdHMgPSBAJHByb2psaXN0OworCisJbXkgJGNoZWNrX2ZvcmtzID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2ZvcmtzJyk7CisJbXkgJHNob3dfY3RhZ3MgID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2N0YWdzJyk7CisJbXkgJHRhZ2ZpbHRlciA9ICRzaG93X2N0YWdzID8gJGlucHV0X3BhcmFtc3snY3RhZyd9IDogdW5kZWY7CisJJGNoZWNrX2ZvcmtzID0gdW5kZWYKKwkJaWYgKCR0YWdmaWx0ZXIgfHwgJHNlYXJjaF9yZWdleHApOworCisJIyBmaWx0ZXJpbmcgb3V0IGZvcmtzIGJlZm9yZSBmaWxsaW5nIGluZm8gYWxsb3dzIHRvIGRvIGxlc3Mgd29yaworCUBwcm9qZWN0cyA9IGZpbHRlcl9mb3Jrc19mcm9tX3Byb2plY3RzX2xpc3QoXEBwcm9qZWN0cykKKwkJaWYgKCRjaGVja19mb3Jrcyk7CisJIyBzZWFyY2hfcHJvamVjdHNfbGlzdCBwcmUtZmlsbHMgcmVxdWlyZWQgaW5mbworCUBwcm9qZWN0cyA9IHNlYXJjaF9wcm9qZWN0c19saXN0KFxAcHJvamVjdHMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlYXJjaF9yZWdleHAnID0+ICRzZWFyY2hfcmVnZXhwLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YWdmaWx0ZXInICA9PiAkdGFnZmlsdGVyKQorCQlpZiAoJHRhZ2ZpbHRlciB8fCAkc2VhcmNoX3JlZ2V4cCk7CisJIyBmaWxsIHRoZSByZXN0CisJbXkgQGFsbF9maWVsZHMgPSAoJ2Rlc2NyJywgJ2Rlc2NyX2xvbmcnLCAnY3RhZ3MnLCAnY2F0ZWdvcnknKTsKKwlwdXNoIEBhbGxfZmllbGRzLCAoJ2FnZScsICdhZ2Vfc3RyaW5nJykgdW5sZXNzKCRvbWl0X2FnZV9jb2x1bW4pOworCXB1c2ggQGFsbF9maWVsZHMsICdvd25lcicgdW5sZXNzKCRvbWl0X293bmVyKTsKKwlAcHJvamVjdHMgPSBmaWxsX3Byb2plY3RfbGlzdF9pbmZvKFxAcHJvamVjdHMsIEBhbGxfZmllbGRzKTsKKworCSRvcmRlciB8fD0gJGRlZmF1bHRfcHJvamVjdHNfb3JkZXI7CisJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOworCSR0byA9ICQjcHJvamVjdHMgaWYgKCFkZWZpbmVkICR0byB8fCAkI3Byb2plY3RzIDwgJHRvKTsKKworCSMgc2hvcnQgY2lyY3VpdAorCWlmICgkZnJvbSA+ICR0bykgeworCQlwcmludCAiPGNlbnRlcj5cbiIuCisJCSAgICAgICI8Yj5ObyBzdWNoIHByb2plY3RzIGZvdW5kPC9iPjxiciAvPlxuIi4KKwkJICAgICAgIkNsaWNrICIuJGNnaS0+YSh7LWhyZWY9PmhyZWYocHJvamVjdD0+dW5kZWYpfSwiaGVyZSIpLiIgdG8gdmlldyBhbGwgcHJvamVjdHM8YnIgLz5cbiIuCisJCSAgICAgICI8L2NlbnRlcj5cbjxiciAvPlxuIjsKKwkJcmV0dXJuOworCX0KKworCUBwcm9qZWN0cyA9IHNvcnRfcHJvamVjdHNfbGlzdChcQHByb2plY3RzLCAkb3JkZXIpOworCisJaWYgKCRzaG93X2N0YWdzKSB7CisJCW15ICRjdGFncyA9IGdpdF9nYXRoZXJfYWxsX2N0YWdzKFxAcHJvamVjdHMpOworCQlteSAkY2xvdWQgPSBnaXRfcG9wdWxhdGVfcHJvamVjdF90YWdjbG91ZCgkY3RhZ3MpOworCQlwcmludCBnaXRfc2hvd19wcm9qZWN0X3RhZ2Nsb3VkKCRjbG91ZCwgNjQpOworCX0KKworCXByaW50ICI8dGFibGUgY2xhc3M9XCJwcm9qZWN0X2xpc3RcIj5cbiI7CisJdW5sZXNzICgkbm9faGVhZGVyKSB7CisJCXByaW50ICI8dHI+XG4iOworCQlpZiAoJGNoZWNrX2ZvcmtzKSB7CisJCQlwcmludCAiPHRoPjwvdGg+XG4iOworCQl9CisJCXByaW50X3NvcnRfdGgoJ3Byb2plY3QnLCAkb3JkZXIsICdQcm9qZWN0Jyk7CisJCXByaW50X3NvcnRfdGgoJ2Rlc2NyJywgJG9yZGVyLCAnRGVzY3JpcHRpb24nKTsKKwkJcHJpbnRfc29ydF90aCgnb3duZXInLCAkb3JkZXIsICdPd25lcicpIHVubGVzcyAkb21pdF9vd25lcjsKKwkJcHJpbnRfc29ydF90aCgnYWdlJywgJG9yZGVyLCAnTGFzdCBDaGFuZ2UnKSB1bmxlc3MgJG9taXRfYWdlX2NvbHVtbjsKKwkJcHJpbnQgIjx0aD48L3RoPlxuIiAuICMgZm9yIGxpbmtzCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisKKwlpZiAoJHByb2plY3RzX2xpc3RfZ3JvdXBfY2F0ZWdvcmllcykgeworCQkjIG9ubHkgZGlzcGxheSBjYXRlZ29yaWVzIHdpdGggcHJvamVjdHMgaW4gdGhlICRmcm9tLSR0byB3aW5kb3cKKwkJQHByb2plY3RzID0gc29ydCB7JGEtPnsnY2F0ZWdvcnknfSBjbXAgJGItPnsnY2F0ZWdvcnknfX0gQHByb2plY3RzWyRmcm9tLi4kdG9dOworCQlteSAlY2F0ZWdvcmllcyA9IGJ1aWxkX3Byb2psaXN0X2J5X2NhdGVnb3J5KFxAcHJvamVjdHMsICRmcm9tLCAkdG8pOworCQlmb3JlYWNoIG15ICRjYXQgKHNvcnQga2V5cyAlY2F0ZWdvcmllcykgeworCQkJdW5sZXNzICgkY2F0IGVxICIiKSB7CisJCQkJcHJpbnQgIjx0cj5cbiI7CisJCQkJaWYgKCRjaGVja19mb3JrcykgeworCQkJCQlwcmludCAiPHRkPjwvdGQ+XG4iOworCQkJCX0KKwkJCQlwcmludCAiPHRkIGNsYXNzPVwiY2F0ZWdvcnlcIiBjb2xzcGFuPVwiNVwiPiIuZXNjX2h0bWwoJGNhdCkuIjwvdGQ+XG4iOworCQkJCXByaW50ICI8L3RyPlxuIjsKKwkJCX0KKworCQkJZ2l0X3Byb2plY3RfbGlzdF9yb3dzKCRjYXRlZ29yaWVzeyRjYXR9LCB1bmRlZiwgdW5kZWYsICRjaGVja19mb3Jrcyk7CisJCX0KKwl9IGVsc2UgeworCQlnaXRfcHJvamVjdF9saXN0X3Jvd3MoXEBwcm9qZWN0cywgJGZyb20sICR0bywgJGNoZWNrX2ZvcmtzKTsKKwl9CisKKwlpZiAoZGVmaW5lZCAkZXh0cmEpIHsKKwkJcHJpbnQgIjx0cj5cbiI7CisJCWlmICgkY2hlY2tfZm9ya3MpIHsKKwkJCXByaW50ICI8dGQ+PC90ZD5cbiI7CisJCX0KKwkJcHJpbnQgIjx0ZCBjb2xzcGFuPVwiNVwiPiRleHRyYTwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90YWJsZT5cbiI7Cit9CisKK3N1YiBnaXRfbG9nX2JvZHkgeworCSMgdXNlcyBnbG9iYWwgdmFyaWFibGUgJHByb2plY3QKKwlteSAoJGNvbW1pdGxpc3QsICRmcm9tLCAkdG8sICRyZWZzLCAkZXh0cmEpID0gQF87CisKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCN7JGNvbW1pdGxpc3R9IGlmICghZGVmaW5lZCAkdG8gfHwgJCN7JGNvbW1pdGxpc3R9IDwgJHRvKTsKKworCWZvciAobXkgJGkgPSAwOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJWNvID0gJXskY29tbWl0bGlzdC0+WyRpXX07CisJCW5leHQgaWYgISVjbzsKKwkJbXkgJGNvbW1pdCA9ICRjb3snaWQnfTsKKwkJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkY29tbWl0KTsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsCisJCSAgICAgICAgICAgICAgICI8c3BhbiBjbGFzcz1cImFnZVwiPiRjb3snYWdlX3N0cmluZyd9PC9zcGFuPiIgLgorCQkgICAgICAgICAgICAgICBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gJHJlZiwKKwkJICAgICAgICAgICAgICAgJGNvbW1pdCk7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVfdGV4dFwiPlxuIiAuCisJCSAgICAgICI8ZGl2IGNsYXNzPVwibG9nX2xpbmtcIj5cbiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb21taXQpfSwgImNvbW1pdCIpIC4KKwkJICAgICAgIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdGRpZmYiLCBoYXNoPT4kY29tbWl0KX0sICJjb21taXRkaWZmIikgLgorCQkgICAgICAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRjb21taXQsIGhhc2hfYmFzZT0+JGNvbW1pdCl9LCAidHJlZSIpIC4KKwkJICAgICAgIjxici8+XG4iIC4KKwkJICAgICAgIjwvZGl2PlxuIjsKKwkJICAgICAgZ2l0X3ByaW50X2F1dGhvcnNoaXAoXCVjbywgLXRhZyA9PiAnc3BhbicpOworCQkgICAgICBwcmludCAiPGJyLz5cbjwvZGl2PlxuIjsKKworCQlwcmludCAiPGRpdiBjbGFzcz1cImxvZ19ib2R5XCI+XG4iOworCQlnaXRfcHJpbnRfbG9nKCRjb3snY29tbWVudCd9LCAtZmluYWxfZW1wdHlfbGluZT0+IDEpOworCQlwcmludCAiPC9kaXY+XG4iOworCX0KKwlpZiAoJGV4dHJhKSB7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9uYXZcIj5cbiI7CisJCXByaW50ICIkZXh0cmFcbiI7CisJCXByaW50ICI8L2Rpdj5cbiI7CisJfQorfQorCitzdWIgZ2l0X3Nob3J0bG9nX2JvZHkgeworCSMgdXNlcyBnbG9iYWwgdmFyaWFibGUgJHByb2plY3QKKwlteSAoJGNvbW1pdGxpc3QsICRmcm9tLCAkdG8sICRyZWZzLCAkZXh0cmEpID0gQF87CisKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCN7JGNvbW1pdGxpc3R9IGlmICghZGVmaW5lZCAkdG8gfHwgJCN7JGNvbW1pdGxpc3R9IDwgJHRvKTsKKworCXByaW50ICI8dGFibGUgY2xhc3M9XCJzaG9ydGxvZ1wiPlxuIjsKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwlmb3IgKG15ICRpID0gJGZyb207ICRpIDw9ICR0bzsgJGkrKykgeworCQlteSAlY28gPSAleyRjb21taXRsaXN0LT5bJGldfTsKKwkJbXkgJGNvbW1pdCA9ICRjb3snaWQnfTsKKwkJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkY29tbWl0KTsKKwkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQl9CisJCSRhbHRlcm5hdGUgXj0gMTsKKwkJIyBnaXRfc3VtbWFyeSgpIHVzZWQgcHJpbnQgIjx0ZD48aT4kY297J2FnZV9zdHJpbmcnfTwvaT48L3RkPlxuIiAuCisJCXByaW50ICI8dGQgdGl0bGU9XCIkY297J2FnZV9zdHJpbmdfYWdlJ31cIj48aT4kY297J2FnZV9zdHJpbmdfZGF0ZSd9PC9pPjwvdGQ+XG4iIC4KKwkJICAgICAgZm9ybWF0X2F1dGhvcl9odG1sKCd0ZCcsIFwlY28sIDEwKSAuICI8dGQ+IjsKKwkJcHJpbnQgZm9ybWF0X3N1YmplY3RfaHRtbCgkY297J3RpdGxlJ30sICRjb3sndGl0bGVfc2hvcnQnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb21taXQpLCAkcmVmKTsKKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY29tbWl0KX0sICJjb21taXQiKSAuICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXRkaWZmIiwgaGFzaD0+JGNvbW1pdCl9LCAiY29tbWl0ZGlmZiIpIC4gIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoPT4kY29tbWl0LCBoYXNoX2Jhc2U9PiRjb21taXQpfSwgInRyZWUiKTsKKwkJbXkgJHNuYXBzaG90X2xpbmtzID0gZm9ybWF0X3NuYXBzaG90X2xpbmtzKCRjb21taXQpOworCQlpZiAoZGVmaW5lZCAkc25hcHNob3RfbGlua3MpIHsKKwkJCXByaW50ICIgfCAiIC4gJHNuYXBzaG90X2xpbmtzOworCQl9CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisJaWYgKGRlZmluZWQgJGV4dHJhKSB7CisJCXByaW50ICI8dHI+XG4iIC4KKwkJICAgICAgIjx0ZCBjb2xzcGFuPVwiNFwiPiRleHRyYTwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90YWJsZT5cbiI7Cit9CisKK3N1YiBnaXRfaGlzdG9yeV9ib2R5IHsKKwkjIFdhcm5pbmc6IGFzc3VtZXMgY29uc3RhbnQgdHlwZSAoYmxvYiBvciB0cmVlKSBkdXJpbmcgaGlzdG9yeQorCW15ICgkY29tbWl0bGlzdCwgJGZyb20sICR0bywgJHJlZnMsICRleHRyYSwKKwkgICAgJGZpbGVfbmFtZSwgJGZpbGVfaGFzaCwgJGZ0eXBlKSA9IEBfOworCisJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOworCSR0byA9ICQjeyRjb21taXRsaXN0fSB1bmxlc3MgKGRlZmluZWQgJHRvICYmICR0byA8PSAkI3skY29tbWl0bGlzdH0pOworCisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cImhpc3RvcnlcIj5cbiI7CisJbXkgJGFsdGVybmF0ZSA9IDE7CisJZm9yIChteSAkaSA9ICRmcm9tOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJWNvID0gJXskY29tbWl0bGlzdC0+WyRpXX07CisJCWlmICghJWNvKSB7CisJCQluZXh0OworCQl9CisJCW15ICRjb21taXQgPSAkY297J2lkJ307CisKKwkJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkY29tbWl0KTsKKworCQlpZiAoJGFsdGVybmF0ZSkgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCX0KKwkJJGFsdGVybmF0ZSBePSAxOworCQlwcmludCAiPHRkIHRpdGxlPVwiJGNveydhZ2Vfc3RyaW5nX2FnZSd9XCI+PGk+JGNveydhZ2Vfc3RyaW5nX2RhdGUnfTwvaT48L3RkPlxuIiAuCisJIyBzaG9ydGxvZzogICBmb3JtYXRfYXV0aG9yX2h0bWwoJ3RkJywgXCVjbywgMTApCisJCSAgICAgIGZvcm1hdF9hdXRob3JfaHRtbCgndGQnLCBcJWNvLCAxNSwgMykgLiAiPHRkPiI7CisJCSMgb3JpZ2luYWxseSBnaXRfaGlzdG9yeSB1c2VkIGNob3Bfc3RyKCRjb3sndGl0bGUnfSwgNTApCisJCXByaW50IGZvcm1hdF9zdWJqZWN0X2h0bWwoJGNveyd0aXRsZSd9LCAkY297J3RpdGxlX3Nob3J0J30sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY29tbWl0KSwgJHJlZik7CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4kZnR5cGUsIGhhc2hfYmFzZT0+JGNvbW1pdCwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKX0sICRmdHlwZSkgLiAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0ZGlmZiIsIGhhc2g9PiRjb21taXQpfSwgImNvbW1pdGRpZmYiKTsKKworCQlpZiAoJGZ0eXBlIGVxICdibG9iJykgeworCQkJcHJpbnQgIiB8ICIgLgorCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iX3BsYWluIiwgaGFzaF9iYXNlPT4kY29tbWl0LCBmaWxlX25hbWU9PiRmaWxlX25hbWUpfSwgInJhdyIpOworCisJCQlteSAkYmxvYl9jdXJyZW50ID0gJGZpbGVfaGFzaDsKKwkJCW15ICRibG9iX3BhcmVudCAgPSBnaXRfZ2V0X2hhc2hfYnlfcGF0aCgkY29tbWl0LCAkZmlsZV9uYW1lKTsKKwkJCWlmIChkZWZpbmVkICRibG9iX2N1cnJlbnQgJiYgZGVmaW5lZCAkYmxvYl9wYXJlbnQgJiYKKwkJCQkJJGJsb2JfY3VycmVudCBuZSAkYmxvYl9wYXJlbnQpIHsKKwkJCQlwcmludCAiIHwgIiAuCisJCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYmRpZmYiLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRibG9iX2N1cnJlbnQsIGhhc2hfcGFyZW50PT4kYmxvYl9wYXJlbnQsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaF9iYXNlLCBoYXNoX3BhcmVudF9iYXNlPT4kY29tbWl0LAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSl9LAorCQkJCQkgICAgICAgICJkaWZmIHRvIGN1cnJlbnQiKTsKKwkJCX0KKwkJfQorCQlwcmludCAiPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj5cbiI7CisJfQorCWlmIChkZWZpbmVkICRleHRyYSkgeworCQlwcmludCAiPHRyPlxuIiAuCisJCSAgICAgICI8dGQgY29sc3Bhbj1cIjRcIj4kZXh0cmE8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisJcHJpbnQgIjwvdGFibGU+XG4iOworfQorCitzdWIgZ2l0X3RhZ3NfYm9keSB7CisJIyB1c2VzIGdsb2JhbCB2YXJpYWJsZSAkcHJvamVjdAorCW15ICgkdGFnbGlzdCwgJGZyb20sICR0bywgJGV4dHJhKSA9IEBfOworCSRmcm9tID0gMCB1bmxlc3MgZGVmaW5lZCAkZnJvbTsKKwkkdG8gPSAkI3skdGFnbGlzdH0gaWYgKCFkZWZpbmVkICR0byB8fCAkI3skdGFnbGlzdH0gPCAkdG8pOworCisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cInRhZ3NcIj5cbiI7CisJbXkgJGFsdGVybmF0ZSA9IDE7CisJZm9yIChteSAkaSA9ICRmcm9tOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJGVudHJ5ID0gJHRhZ2xpc3QtPlskaV07CisJCW15ICV0YWcgPSAlJGVudHJ5OworCQlteSAkY29tbWVudCA9ICR0YWd7J3N1YmplY3QnfTsKKwkJbXkgJGNvbW1lbnRfc2hvcnQ7CisJCWlmIChkZWZpbmVkICRjb21tZW50KSB7CisJCQkkY29tbWVudF9zaG9ydCA9IGNob3Bfc3RyKCRjb21tZW50LCAzMCwgNSk7CisJCX0KKwkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQl9CisJCSRhbHRlcm5hdGUgXj0gMTsKKwkJaWYgKGRlZmluZWQgJHRhZ3snYWdlJ30pIHsKKwkJCXByaW50ICI8dGQ+PGk+JHRhZ3snYWdlJ308L2k+PC90ZD5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPHRkPjwvdGQ+XG4iOworCQl9CisJCXByaW50ICI8dGQ+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4kdGFneydyZWZ0eXBlJ30sIGhhc2g9PiR0YWd7J3JlZmlkJ30pLAorCQkgICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3QgbmFtZSJ9LCBlc2NfaHRtbCgkdGFneyduYW1lJ30pKSAuCisJCSAgICAgICI8L3RkPlxuIiAuCisJCSAgICAgICI8dGQ+IjsKKwkJaWYgKGRlZmluZWQgJGNvbW1lbnQpIHsKKwkJCXByaW50IGZvcm1hdF9zdWJqZWN0X2h0bWwoJGNvbW1lbnQsICRjb21tZW50X3Nob3J0LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmKGFjdGlvbj0+InRhZyIsIGhhc2g9PiR0YWd7J2lkJ30pKTsKKwkJfQorCQlwcmludCAiPC90ZD5cbiIgLgorCQkgICAgICAiPHRkIGNsYXNzPVwic2VsZmxpbmtcIj4iOworCQlpZiAoJHRhZ3sndHlwZSd9IGVxICJ0YWciKSB7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRhZyIsIGhhc2g9PiR0YWd7J2lkJ30pfSwgInRhZyIpOworCQl9IGVsc2UgeworCQkJcHJpbnQgIiZuYnNwOyI7CisJCX0KKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4gIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+JHRhZ3sncmVmdHlwZSd9LCBoYXNoPT4kdGFneydyZWZpZCd9KX0sICR0YWd7J3JlZnR5cGUnfSk7CisJCWlmICgkdGFneydyZWZ0eXBlJ30gZXEgImNvbW1pdCIpIHsKKwkJCXByaW50ICIgfCAiIC4gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJzaG9ydGxvZyIsIGhhc2g9PiR0YWd7J2Z1bGxuYW1lJ30pfSwgInNob3J0bG9nIikgLgorCQkJICAgICAgIiB8ICIgLiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImxvZyIsIGhhc2g9PiR0YWd7J2Z1bGxuYW1lJ30pfSwgImxvZyIpOworCQl9IGVsc2lmICgkdGFneydyZWZ0eXBlJ30gZXEgImJsb2IiKSB7CisJCQlwcmludCAiIHwgIiAuICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYl9wbGFpbiIsIGhhc2g9PiR0YWd7J3JlZmlkJ30pfSwgInJhdyIpOworCQl9CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPiI7CisJfQorCWlmIChkZWZpbmVkICRleHRyYSkgeworCQlwcmludCAiPHRyPlxuIiAuCisJCSAgICAgICI8dGQgY29sc3Bhbj1cIjVcIj4kZXh0cmE8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisJcHJpbnQgIjwvdGFibGU+XG4iOworfQorCitzdWIgZ2l0X2hlYWRzX2JvZHkgeworCSMgdXNlcyBnbG9iYWwgdmFyaWFibGUgJHByb2plY3QKKwlteSAoJGhlYWRsaXN0LCAkaGVhZF9hdCwgJGZyb20sICR0bywgJGV4dHJhKSA9IEBfOworCSRmcm9tID0gMCB1bmxlc3MgZGVmaW5lZCAkZnJvbTsKKwkkdG8gPSAkI3skaGVhZGxpc3R9IGlmICghZGVmaW5lZCAkdG8gfHwgJCN7JGhlYWRsaXN0fSA8ICR0byk7CisKKwlwcmludCAiPHRhYmxlIGNsYXNzPVwiaGVhZHNcIj5cbiI7CisJbXkgJGFsdGVybmF0ZSA9IDE7CisJZm9yIChteSAkaSA9ICRmcm9tOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJGVudHJ5ID0gJGhlYWRsaXN0LT5bJGldOworCQlteSAlcmVmID0gJSRlbnRyeTsKKwkJbXkgJGN1cnIgPSBkZWZpbmVkICRoZWFkX2F0ICYmICRyZWZ7J2lkJ30gZXEgJGhlYWRfYXQ7CisJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJfQorCQkkYWx0ZXJuYXRlIF49IDE7CisJCXByaW50ICI8dGQ+PGk+JHJlZnsnYWdlJ308L2k+PC90ZD5cbiIgLgorCQkgICAgICAoJGN1cnIgPyAiPHRkIGNsYXNzPVwiY3VycmVudF9oZWFkXCI+IiA6ICI8dGQ+IikgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InNob3J0bG9nIiwgaGFzaD0+JHJlZnsnZnVsbG5hbWUnfSksCisJCSAgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCBuYW1lIn0sZXNjX2h0bWwoJHJlZnsnbmFtZSd9KSkgLgorCQkgICAgICAiPC90ZD5cbiIgLgorCQkgICAgICAiPHRkIGNsYXNzPVwibGlua1wiPiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InNob3J0bG9nIiwgaGFzaD0+JHJlZnsnZnVsbG5hbWUnfSl9LCAic2hvcnRsb2ciKSAuICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJsb2ciLCBoYXNoPT4kcmVmeydmdWxsbmFtZSd9KX0sICJsb2ciKSAuICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgaGFzaD0+JHJlZnsnZnVsbG5hbWUnfSwgaGFzaF9iYXNlPT4kcmVmeydmdWxsbmFtZSd9KX0sICJ0cmVlIikgLgorCQkgICAgICAiPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj4iOworCX0KKwlpZiAoZGVmaW5lZCAkZXh0cmEpIHsKKwkJcHJpbnQgIjx0cj5cbiIgLgorCQkgICAgICAiPHRkIGNvbHNwYW49XCIzXCI+JGV4dHJhPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj5cbiI7CisJfQorCXByaW50ICI8L3RhYmxlPlxuIjsKK30KKworIyBEaXNwbGF5IGEgc2luZ2xlIHJlbW90ZSBibG9jaworc3ViIGdpdF9yZW1vdGVfYmxvY2sgeworCW15ICgkcmVtb3RlLCAkcmRhdGEsICRsaW1pdCwgJGhlYWQpID0gQF87CisKKwlteSAkaGVhZHMgPSAkcmRhdGEtPnsnaGVhZHMnfTsKKwlteSAkZmV0Y2ggPSAkcmRhdGEtPnsnZmV0Y2gnfTsKKwlteSAkcHVzaCA9ICRyZGF0YS0+eydwdXNoJ307CisKKwlteSAkdXJsc190YWJsZSA9ICI8dGFibGUgY2xhc3M9XCJwcm9qZWN0c19saXN0XCI+XG4iIDsKKworCWlmIChkZWZpbmVkICRmZXRjaCkgeworCQlpZiAoJGZldGNoIGVxICRwdXNoKSB7CisJCQkkdXJsc190YWJsZSAuPSBmb3JtYXRfcmVwb191cmwoIlVSTCIsICRmZXRjaCk7CisJCX0gZWxzZSB7CisJCQkkdXJsc190YWJsZSAuPSBmb3JtYXRfcmVwb191cmwoIkZldGNoIFVSTCIsICRmZXRjaCk7CisJCQkkdXJsc190YWJsZSAuPSBmb3JtYXRfcmVwb191cmwoIlB1c2ggVVJMIiwgJHB1c2gpIGlmIGRlZmluZWQgJHB1c2g7CisJCX0KKwl9IGVsc2lmIChkZWZpbmVkICRwdXNoKSB7CisJCSR1cmxzX3RhYmxlIC49IGZvcm1hdF9yZXBvX3VybCgiUHVzaCBVUkwiLCAkcHVzaCk7CisJfSBlbHNlIHsKKwkJJHVybHNfdGFibGUgLj0gZm9ybWF0X3JlcG9fdXJsKCIiLCAiTm8gcmVtb3RlIFVSTCIpOworCX0KKworCSR1cmxzX3RhYmxlIC49ICI8L3RhYmxlPlxuIjsKKworCW15ICRkb3RzOworCWlmIChkZWZpbmVkICRsaW1pdCAmJiAkbGltaXQgPCBAJGhlYWRzKSB7CisJCSRkb3RzID0gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJyZW1vdGVzIiwgaGFzaD0+JHJlbW90ZSl9LCAiLi4uIik7CisJfQorCisJcHJpbnQgJHVybHNfdGFibGU7CisJZ2l0X2hlYWRzX2JvZHkoJGhlYWRzLCAkaGVhZCwgMCwgJGxpbWl0LCAkZG90cyk7Cit9CisKKyMgRGlzcGxheSBhIGxpc3Qgb2YgcmVtb3RlIG5hbWVzIHdpdGggdGhlIHJlc3BlY3RpdmUgZmV0Y2ggYW5kIHB1c2ggVVJMcworc3ViIGdpdF9yZW1vdGVzX2xpc3QgeworCW15ICgkcmVtb3RlZGF0YSwgJGxpbWl0KSA9IEBfOworCXByaW50ICI8dGFibGUgY2xhc3M9XCJoZWFkc1wiPlxuIjsKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwlteSBAcmVtb3RlcyA9IHNvcnQga2V5cyAlJHJlbW90ZWRhdGE7CisKKwlteSAkbGltaXRlZCA9ICRsaW1pdCAmJiAkbGltaXQgPCBAcmVtb3RlczsKKworCSQjcmVtb3RlcyA9ICRsaW1pdCAtIDEgaWYgJGxpbWl0ZWQ7CisKKwl3aGlsZSAobXkgJHJlbW90ZSA9IHNoaWZ0IEByZW1vdGVzKSB7CisJCW15ICRyZGF0YSA9ICRyZW1vdGVkYXRhLT57JHJlbW90ZX07CisJCW15ICRmZXRjaCA9ICRyZGF0YS0+eydmZXRjaCd9OworCQlteSAkcHVzaCA9ICRyZGF0YS0+eydwdXNoJ307CisJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJfQorCQkkYWx0ZXJuYXRlIF49IDE7CisJCXByaW50ICI8dGQ+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmPT4gaHJlZihhY3Rpb249PidyZW1vdGVzJywgaGFzaD0+JHJlbW90ZSksCisJCQkgICAgICAgLWNsYXNzPT4gImxpc3QgbmFtZSJ9LGVzY19odG1sKCRyZW1vdGUpKSAuCisJCSAgICAgICI8L3RkPiI7CisJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCSAgICAgIChkZWZpbmVkICRmZXRjaCA/ICRjZ2ktPmEoey1ocmVmPT4gJGZldGNofSwgImZldGNoIikgOiAiZmV0Y2giKSAuCisJCSAgICAgICIgfCAiIC4KKwkJICAgICAgKGRlZmluZWQgJHB1c2ggPyAkY2dpLT5hKHstaHJlZj0+ICRwdXNofSwgInB1c2giKSA6ICJwdXNoIikgLgorCQkgICAgICAiPC90ZD4iOworCisJCXByaW50ICI8L3RyPlxuIjsKKwl9CisKKwlpZiAoJGxpbWl0ZWQpIHsKKwkJcHJpbnQgIjx0cj5cbiIgLgorCQkgICAgICAiPHRkIGNvbHNwYW49XCIzXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4icmVtb3RlcyIpfSwgIi4uLiIpIC4KKwkJICAgICAgIjwvdGQ+XG4iIC4gIjwvdHI+XG4iOworCX0KKworCXByaW50ICI8L3RhYmxlPiI7Cit9CisKKyMgRGlzcGxheSByZW1vdGUgaGVhZHMgZ3JvdXBlZCBieSByZW1vdGUsIHVubGVzcyB0aGVyZSBhcmUgdG9vIG1hbnkKKyMgcmVtb3RlcywgaW4gd2hpY2ggY2FzZSB3ZSBvbmx5IGRpc3BsYXkgdGhlIHJlbW90ZSBuYW1lcworc3ViIGdpdF9yZW1vdGVzX2JvZHkgeworCW15ICgkcmVtb3RlZGF0YSwgJGxpbWl0LCAkaGVhZCkgPSBAXzsKKwlpZiAoJGxpbWl0IGFuZCAkbGltaXQgPCBrZXlzICUkcmVtb3RlZGF0YSkgeworCQlnaXRfcmVtb3Rlc19saXN0KCRyZW1vdGVkYXRhLCAkbGltaXQpOworCX0gZWxzZSB7CisJCWZpbGxfcmVtb3RlX2hlYWRzKCRyZW1vdGVkYXRhKTsKKwkJd2hpbGUgKG15ICgkcmVtb3RlLCAkcmRhdGEpID0gZWFjaCAlJHJlbW90ZWRhdGEpIHsKKwkJCWdpdF9wcmludF9zZWN0aW9uKHstY2xhc3M9PiJyZW1vdGUiLCAtaWQ9PiRyZW1vdGV9LAorCQkJCVsicmVtb3RlcyIsICRyZW1vdGUsICRyZW1vdGVdLCBzdWIgeworCQkJCQlnaXRfcmVtb3RlX2Jsb2NrKCRyZW1vdGUsICRyZGF0YSwgJGxpbWl0LCAkaGVhZCk7CisJCQkJfSk7CisJCX0KKwl9Cit9CisKK3N1YiBnaXRfc2VhcmNoX21lc3NhZ2UgeworCW15ICVjbyA9IEBfOworCisJbXkgJGdyZXB0eXBlOworCWlmICgkc2VhcmNodHlwZSBlcSAnY29tbWl0JykgeworCQkkZ3JlcHR5cGUgPSAiLS1ncmVwPSI7CisJfSBlbHNpZiAoJHNlYXJjaHR5cGUgZXEgJ2F1dGhvcicpIHsKKwkJJGdyZXB0eXBlID0gIi0tYXV0aG9yPSI7CisJfSBlbHNpZiAoJHNlYXJjaHR5cGUgZXEgJ2NvbW1pdHRlcicpIHsKKwkJJGdyZXB0eXBlID0gIi0tY29tbWl0dGVyPSI7CisJfQorCSRncmVwdHlwZSAuPSAkc2VhcmNodGV4dDsKKwlteSBAY29tbWl0bGlzdCA9IHBhcnNlX2NvbW1pdHMoJGhhc2gsIDEwMSwgKDEwMCAqICRwYWdlKSwgdW5kZWYsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRncmVwdHlwZSwgJy0tcmVnZXhwLWlnbm9yZS1jYXNlJywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaF91c2VfcmVnZXhwID8gJy0tZXh0ZW5kZWQtcmVnZXhwJyA6ICctLWZpeGVkLXN0cmluZ3MnKTsKKworCW15ICRwYWdpbmdfbmF2ID0gJyc7CisJaWYgKCRwYWdlID4gMCkgeworCQkkcGFnaW5nX25hdiAuPQorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLCBwYWdlPT51bmRlZil9LAorCQkJICAgICAgICAiZmlyc3QiKSAuCisJCQkiICZzZG90OyAiIC4KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwgcGFnZT0+JHBhZ2UtMSksCisJCQkgICAgICAgICAtYWNjZXNza2V5ID0+ICJwIiwgLXRpdGxlID0+ICJBbHQtcCJ9LCAicHJldiIpOworCX0gZWxzZSB7CisJCSRwYWdpbmdfbmF2IC49ICJmaXJzdCAmc2RvdDsgcHJldiI7CisJfQorCW15ICRuZXh0X2xpbmsgPSAnJzsKKwlpZiAoJCNjb21taXRsaXN0ID49IDEwMCkgeworCQkkbmV4dF9saW5rID0KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwgcGFnZT0+JHBhZ2UrMSksCisJCQkgICAgICAgICAtYWNjZXNza2V5ID0+ICJuIiwgLXRpdGxlID0+ICJBbHQtbiJ9LCAibmV4dCIpOworCQkkcGFnaW5nX25hdiAuPSAiICZzZG90OyAkbmV4dF9saW5rIjsKKwl9IGVsc2UgeworCQkkcGFnaW5nX25hdiAuPSAiICZzZG90OyBuZXh0IjsKKwl9CisKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKworCWdpdF9wcmludF9wYWdlX25hdignJywnJywgJGhhc2gsJGNveyd0cmVlJ30sJGhhc2gsICRwYWdpbmdfbmF2KTsKKwlnaXRfcHJpbnRfaGVhZGVyX2RpdignY29tbWl0JywgZXNjX2h0bWwoJGNveyd0aXRsZSd9KSwgJGhhc2gpOworCWlmICgkcGFnZSA9PSAwICYmICFAY29tbWl0bGlzdCkgeworCQlwcmludCAiPHA+Tm8gbWF0Y2guPC9wPlxuIjsKKwl9IGVsc2UgeworCQlnaXRfc2VhcmNoX2dyZXBfYm9keShcQGNvbW1pdGxpc3QsIDAsIDk5LCAkbmV4dF9saW5rKTsKKwl9CisKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF9zZWFyY2hfY2hhbmdlcyB7CisJbXkgJWNvID0gQF87CisKKwlsb2NhbCAkLyA9ICJcbiI7CisJb3BlbiBteSAkZmQsICctfCcsIGdpdF9jbWQoKSwgJy0tbm8tcGFnZXInLCAnbG9nJywgQGRpZmZfb3B0cywKKwkJJy0tcHJldHR5PWZvcm1hdDolSCcsICctLW5vLWFiYnJldicsICctLXJhdycsICItUyRzZWFyY2h0ZXh0IiwKKwkJKCRzZWFyY2hfdXNlX3JlZ2V4cCA/ICctLXBpY2theGUtcmVnZXgnIDogKCkpCisJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtbG9nIGZhaWxlZCIpOworCisJZ2l0X2hlYWRlcl9odG1sKCk7CisKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoYXNoLCRjb3sndHJlZSd9LCRoYXNoKTsKKwlnaXRfcHJpbnRfaGVhZGVyX2RpdignY29tbWl0JywgZXNjX2h0bWwoJGNveyd0aXRsZSd9KSwgJGhhc2gpOworCisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cInBpY2theGUgc2VhcmNoXCI+XG4iOworCW15ICRhbHRlcm5hdGUgPSAxOworCXVuZGVmICVjbzsKKwlteSBAZmlsZXM7CisJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJY2hvbXAgJGxpbmU7CisJCW5leHQgdW5sZXNzICRsaW5lOworCisJCW15ICVzZXQgPSBwYXJzZV9kaWZmdHJlZV9yYXdfbGluZSgkbGluZSk7CisJCWlmIChkZWZpbmVkICRzZXR7J2NvbW1pdCd9KSB7CisJCQkjIGZpbmlzaCBwcmV2aW91cyBjb21taXQKKwkJCWlmICglY28pIHsKKwkJCQlwcmludCAiPC90ZD5cbiIgLgorCQkJCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY297J2lkJ30pfSwKKwkJCQkgICAgICAgICAgICAgICJjb21taXQiKSAuCisJCQkJICAgICAgIiB8ICIgLgorCQkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRjb3sndHJlZSd9LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kY297J2lkJ30pfSwKKwkJCQkgICAgICAgICAgICAgICJ0cmVlIikgLgorCQkJCSAgICAgICI8L3RkPlxuIiAuCisJCQkJICAgICAgIjwvdHI+XG4iOworCQkJfQorCisJCQlpZiAoJGFsdGVybmF0ZSkgeworCQkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQkJfSBlbHNlIHsKKwkJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCQl9CisJCQkkYWx0ZXJuYXRlIF49IDE7CisJCQklY28gPSBwYXJzZV9jb21taXQoJHNldHsnY29tbWl0J30pOworCQkJbXkgJGF1dGhvciA9IGNob3BfYW5kX2VzY2FwZV9zdHIoJGNveydhdXRob3JfbmFtZSd9LCAxNSwgNSk7CisJCQlwcmludCAiPHRkIHRpdGxlPVwiJGNveydhZ2Vfc3RyaW5nX2FnZSd9XCI+PGk+JGNveydhZ2Vfc3RyaW5nX2RhdGUnfTwvaT48L3RkPlxuIiAuCisJCQkgICAgICAiPHRkPjxpPiRhdXRob3I8L2k+PC90ZD5cbiIgLgorCQkJICAgICAgIjx0ZD4iIC4KKwkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JGNveydpZCd9KSwKKwkJCSAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0IHN1YmplY3QifSwKKwkJCSAgICAgICAgICAgICAgY2hvcF9hbmRfZXNjYXBlX3N0cigkY297J3RpdGxlJ30sIDUwKSAuICI8YnIvPiIpOworCQl9IGVsc2lmIChkZWZpbmVkICRzZXR7J3RvX2lkJ30pIHsKKwkJCW5leHQgaWYgaXNfZGVsZXRlZChcJXNldCk7CisKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2hfYmFzZT0+JGNveydpZCd9LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kc2V0eyd0b19pZCd9LCBmaWxlX25hbWU9PiRzZXR7J3RvX2ZpbGUnfSksCisJCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCJ9LAorCQkJICAgICAgICAgICAgICAiPHNwYW4gY2xhc3M9XCJtYXRjaFwiPiIgLiBlc2NfcGF0aCgkc2V0eydmaWxlJ30pIC4gIjwvc3Bhbj4iKSAuCisJCQkgICAgICAiPGJyLz5cbiI7CisJCX0KKwl9CisJY2xvc2UgJGZkOworCisJIyBmaW5pc2ggbGFzdCBjb21taXQgKHdhcm5pbmc6IHJlcGV0aXRpb24hKQorCWlmICglY28pIHsKKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY297J2lkJ30pfSwKKwkJICAgICAgICAgICAgICAiY29tbWl0IikgLgorCQkgICAgICAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRjb3sndHJlZSd9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGNveydpZCd9KX0sCisJCSAgICAgICAgICAgICAgInRyZWUiKSAuCisJCSAgICAgICI8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisKKwlwcmludCAiPC90YWJsZT5cbiI7CisKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF9zZWFyY2hfZmlsZXMgeworCW15ICVjbyA9IEBfOworCisJbG9jYWwgJC8gPSAiXG4iOworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICdncmVwJywgJy1uJywgJy16JywKKwkJJHNlYXJjaF91c2VfcmVnZXhwID8gKCctRScsICctaScpIDogJy1GJywKKwkJJHNlYXJjaHRleHQsICRjb3sndHJlZSd9CisJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtZ3JlcCBmYWlsZWQiKTsKKworCWdpdF9oZWFkZXJfaHRtbCgpOworCisJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCcnLCAkaGFzaCwkY297J3RyZWUnfSwkaGFzaCk7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsIGVzY19odG1sKCRjb3sndGl0bGUnfSksICRoYXNoKTsKKworCXByaW50ICI8dGFibGUgY2xhc3M9XCJncmVwX3NlYXJjaFwiPlxuIjsKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwlteSAkbWF0Y2hlcyA9IDA7CisJbXkgJGxhc3RmaWxlID0gJyc7CisJbXkgJGZpbGVfaHJlZjsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQljaG9tcCAkbGluZTsKKwkJbXkgKCRmaWxlLCAkbG5vLCAkbHRleHQsICRiaW5hcnkpOworCQlsYXN0IGlmICgkbWF0Y2hlcysrID4gMTAwMCk7CisJCWlmICgkbGluZSA9fiAvXkJpbmFyeSBmaWxlICguKykgbWF0Y2hlcyQvKSB7CisJCQkkZmlsZSA9ICQxOworCQkJJGJpbmFyeSA9IDE7CisJCX0gZWxzZSB7CisJCQkoJGZpbGUsICRsbm8sICRsdGV4dCkgPSBzcGxpdCgvXDAvLCAkbGluZSwgMyk7CisJCQkkZmlsZSA9fiBzL14kY297J3RyZWUnfTovLzsKKwkJfQorCQlpZiAoJGZpbGUgbmUgJGxhc3RmaWxlKSB7CisJCQkkbGFzdGZpbGUgYW5kIHByaW50ICI8L3RkPjwvdHI+XG4iOworCQkJaWYgKCRhbHRlcm5hdGUrKykgeworCQkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQkJfSBlbHNlIHsKKwkJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCQl9CisJCQkkZmlsZV9ocmVmID0gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaF9iYXNlPT4kY297J2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRmaWxlKTsKKwkJCXByaW50ICI8dGQgY2xhc3M9XCJsaXN0XCI+Ii4KKwkJCQkkY2dpLT5hKHstaHJlZiA9PiAkZmlsZV9ocmVmLCAtY2xhc3MgPT4gImxpc3QifSwgZXNjX3BhdGgoJGZpbGUpKTsKKwkJCXByaW50ICI8L3RkPjx0ZD5cbiI7CisJCQkkbGFzdGZpbGUgPSAkZmlsZTsKKwkJfQorCQlpZiAoJGJpbmFyeSkgeworCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJiaW5hcnlcIj5CaW5hcnkgZmlsZTwvZGl2PlxuIjsKKwkJfSBlbHNlIHsKKwkJCSRsdGV4dCA9IHVudGFiaWZ5KCRsdGV4dCk7CisJCQlpZiAoJGx0ZXh0ID1+IG0vXiguKikoJHNlYXJjaF9yZWdleHApKC4qKSQvaSkgeworCQkJCSRsdGV4dCA9IGVzY19odG1sKCQxLCAtbmJzcD0+MSk7CisJCQkJJGx0ZXh0IC49ICc8c3BhbiBjbGFzcz0ibWF0Y2giPic7CisJCQkJJGx0ZXh0IC49IGVzY19odG1sKCQyLCAtbmJzcD0+MSk7CisJCQkJJGx0ZXh0IC49ICc8L3NwYW4+JzsKKwkJCQkkbHRleHQgLj0gZXNjX2h0bWwoJDMsIC1uYnNwPT4xKTsKKwkJCX0gZWxzZSB7CisJCQkJJGx0ZXh0ID0gZXNjX2h0bWwoJGx0ZXh0LCAtbmJzcD0+MSk7CisJCQl9CisJCQlwcmludCAiPGRpdiBjbGFzcz1cInByZVwiPiIgLgorCQkJCSRjZ2ktPmEoey1ocmVmID0+ICRmaWxlX2hyZWYuJyNsJy4kbG5vLAorCQkJCSAgICAgICAgLWNsYXNzID0+ICJsaW5lbnIifSwgc3ByaW50ZignJTRpJywgJGxubykpIC4KKwkJCQknICcgLiAgJGx0ZXh0IC4gIjwvZGl2PlxuIjsKKwkJfQorCX0KKwlpZiAoJGxhc3RmaWxlKSB7CisJCXByaW50ICI8L3RkPjwvdHI+XG4iOworCQlpZiAoJG1hdGNoZXMgPiAxMDAwKSB7CisJCQlwcmludCAiPGRpdiBjbGFzcz1cImRpZmYgbm9kaWZmZXJlbmNlc1wiPlRvbyBtYW55IG1hdGNoZXMsIGxpc3RpbmcgdHJpbW1lZDwvZGl2PlxuIjsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwiZGlmZiBub2RpZmZlcmVuY2VzXCI+Tm8gbWF0Y2hlcyBmb3VuZDwvZGl2PlxuIjsKKwl9CisJY2xvc2UgJGZkOworCisJcHJpbnQgIjwvdGFibGU+XG4iOworCisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfc2VhcmNoX2dyZXBfYm9keSB7CisJbXkgKCRjb21taXRsaXN0LCAkZnJvbSwgJHRvLCAkZXh0cmEpID0gQF87CisJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOworCSR0byA9ICQjeyRjb21taXRsaXN0fSBpZiAoIWRlZmluZWQgJHRvIHx8ICQjeyRjb21taXRsaXN0fSA8ICR0byk7CisKKwlwcmludCAiPHRhYmxlIGNsYXNzPVwiY29tbWl0X3NlYXJjaFwiPlxuIjsKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwlmb3IgKG15ICRpID0gJGZyb207ICRpIDw9ICR0bzsgJGkrKykgeworCQlteSAlY28gPSAleyRjb21taXRsaXN0LT5bJGldfTsKKwkJaWYgKCElY28pIHsKKwkJCW5leHQ7CisJCX0KKwkJbXkgJGNvbW1pdCA9ICRjb3snaWQnfTsKKwkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQl9CisJCSRhbHRlcm5hdGUgXj0gMTsKKwkJcHJpbnQgIjx0ZCB0aXRsZT1cIiRjb3snYWdlX3N0cmluZ19hZ2UnfVwiPjxpPiRjb3snYWdlX3N0cmluZ19kYXRlJ308L2k+PC90ZD5cbiIgLgorCQkgICAgICBmb3JtYXRfYXV0aG9yX2h0bWwoJ3RkJywgXCVjbywgMTUsIDUpIC4KKwkJICAgICAgIjx0ZD4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY297J2lkJ30pLAorCQkgICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3Qgc3ViamVjdCJ9LAorCQkgICAgICAgICAgICAgIGNob3BfYW5kX2VzY2FwZV9zdHIoJGNveyd0aXRsZSd9LCA1MCkgLiAiPGJyLz4iKTsKKwkJbXkgJGNvbW1lbnQgPSAkY297J2NvbW1lbnQnfTsKKwkJZm9yZWFjaCBteSAkbGluZSAoQCRjb21tZW50KSB7CisJCQlpZiAoJGxpbmUgPX4gbS9eKC4qPykoJHNlYXJjaF9yZWdleHApKC4qKSQvaSkgeworCQkJCW15ICgkbGVhZCwgJG1hdGNoLCAkdHJhaWwpID0gKCQxLCAkMiwgJDMpOworCQkJCSRtYXRjaCA9IGNob3Bfc3RyKCRtYXRjaCwgNzAsIDUsICdjZW50ZXInKTsKKwkJCQlteSAkY29udGV4dGxlbiA9IGludCgoODAgLSBsZW5ndGgoJG1hdGNoKSkvMik7CisJCQkJJGNvbnRleHRsZW4gPSAzMCBpZiAoJGNvbnRleHRsZW4gPiAzMCk7CisJCQkJJGxlYWQgID0gY2hvcF9zdHIoJGxlYWQsICAkY29udGV4dGxlbiwgMTAsICdsZWZ0Jyk7CisJCQkJJHRyYWlsID0gY2hvcF9zdHIoJHRyYWlsLCAkY29udGV4dGxlbiwgMTAsICdyaWdodCcpOworCisJCQkJJGxlYWQgID0gZXNjX2h0bWwoJGxlYWQpOworCQkJCSRtYXRjaCA9IGVzY19odG1sKCRtYXRjaCk7CisJCQkJJHRyYWlsID0gZXNjX2h0bWwoJHRyYWlsKTsKKworCQkJCXByaW50ICIkbGVhZDxzcGFuIGNsYXNzPVwibWF0Y2hcIj4kbWF0Y2g8L3NwYW4+JHRyYWlsPGJyIC8+IjsKKwkJCX0KKwkJfQorCQlwcmludCAiPC90ZD5cbiIgLgorCQkgICAgICAiPHRkIGNsYXNzPVwibGlua1wiPiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb3snaWQnfSl9LCAiY29tbWl0IikgLgorCQkgICAgICAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0ZGlmZiIsIGhhc2g9PiRjb3snaWQnfSl9LCAiY29tbWl0ZGlmZiIpIC4KKwkJICAgICAgIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoPT4kY297J3RyZWUnfSwgaGFzaF9iYXNlPT4kY297J2lkJ30pfSwgInRyZWUiKTsKKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlpZiAoZGVmaW5lZCAkZXh0cmEpIHsKKwkJcHJpbnQgIjx0cj5cbiIgLgorCQkgICAgICAiPHRkIGNvbHNwYW49XCIzXCI+JGV4dHJhPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj5cbiI7CisJfQorCXByaW50ICI8L3RhYmxlPlxuIjsKK30KKworIyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyMgYWN0aW9ucworCitzdWIgZ2l0X3Byb2plY3RfbGlzdCB7CisJbXkgJG9yZGVyID0gJGlucHV0X3BhcmFtc3snb3JkZXInfTsKKwlpZiAoZGVmaW5lZCAkb3JkZXIgJiYgJG9yZGVyICF+IG0vbm9uZXxwcm9qZWN0fGRlc2NyfG93bmVyfGFnZS8pIHsKKwkJZGllX2Vycm9yKDQwMCwgIlVua25vd24gb3JkZXIgcGFyYW1ldGVyIik7CisJfQorCisJbXkgQGxpc3QgPSBnaXRfZ2V0X3Byb2plY3RzX2xpc3QoJHByb2plY3RfZmlsdGVyLCAkc3RyaWN0X2V4cG9ydCk7CisJaWYgKCFAbGlzdCkgeworCQlkaWVfZXJyb3IoNDA0LCAiTm8gcHJvamVjdHMgZm91bmQiKTsKKwl9CisKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKwlpZiAoZGVmaW5lZCAkaG9tZV90ZXh0ICYmIC1mICRob21lX3RleHQpIHsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJpbmRleF9pbmNsdWRlXCI+XG4iOworCQlpbnNlcnRfZmlsZSgkaG9tZV90ZXh0KTsKKwkJcHJpbnQgIjwvZGl2PlxuIjsKKwl9CisKKwlnaXRfcHJvamVjdF9zZWFyY2hfZm9ybSgkc2VhcmNodGV4dCwgJHNlYXJjaF91c2VfcmVnZXhwKTsKKwlnaXRfcHJvamVjdF9saXN0X2JvZHkoXEBsaXN0LCAkb3JkZXIpOworCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X2ZvcmtzIHsKKwlteSAkb3JkZXIgPSAkaW5wdXRfcGFyYW1zeydvcmRlcid9OworCWlmIChkZWZpbmVkICRvcmRlciAmJiAkb3JkZXIgIX4gbS9ub25lfHByb2plY3R8ZGVzY3J8b3duZXJ8YWdlLykgeworCQlkaWVfZXJyb3IoNDAwLCAiVW5rbm93biBvcmRlciBwYXJhbWV0ZXIiKTsKKwl9CisKKwlteSAkZmlsdGVyID0gJHByb2plY3Q7CisJJGZpbHRlciA9fiBzL1wuZ2l0JC8vOworCW15IEBsaXN0ID0gZ2l0X2dldF9wcm9qZWN0c19saXN0KCRmaWx0ZXIpOworCWlmICghQGxpc3QpIHsKKwkJZGllX2Vycm9yKDQwNCwgIk5vIGZvcmtzIGZvdW5kIik7CisJfQorCisJZ2l0X2hlYWRlcl9odG1sKCk7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCcnKTsKKwlnaXRfcHJpbnRfaGVhZGVyX2Rpdignc3VtbWFyeScsICIkcHJvamVjdCBmb3JrcyIpOworCWdpdF9wcm9qZWN0X2xpc3RfYm9keShcQGxpc3QsICRvcmRlcik7CisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfcHJvamVjdF9pbmRleCB7CisJbXkgQHByb2plY3RzID0gZ2l0X2dldF9wcm9qZWN0c19saXN0KCRwcm9qZWN0X2ZpbHRlciwgJHN0cmljdF9leHBvcnQpOworCWlmICghQHByb2plY3RzKSB7CisJCWRpZV9lcnJvcig0MDQsICJObyBwcm9qZWN0cyBmb3VuZCIpOworCX0KKworCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJLXR5cGUgPT4gJ3RleHQvcGxhaW4nLAorCQktY2hhcnNldCA9PiAndXRmLTgnLAorCQktY29udGVudF9kaXNwb3NpdGlvbiA9PiAnaW5saW5lOyBmaWxlbmFtZT0iaW5kZXguYXV4IicpOworCisJZm9yZWFjaCBteSAkcHIgKEBwcm9qZWN0cykgeworCQlpZiAoIWV4aXN0cyAkcHItPnsnb3duZXInfSkgeworCQkJJHByLT57J293bmVyJ30gPSBnaXRfZ2V0X3Byb2plY3Rfb3duZXIoIiRwci0+eydwYXRoJ30iKTsKKwkJfQorCisJCW15ICgkcGF0aCwgJG93bmVyKSA9ICgkcHItPnsncGF0aCd9LCAkcHItPnsnb3duZXInfSk7CisJCSMgcXVvdGUgYXMgaW4gQ0dJOjpVdGlsOjplbmNvZGUsIGJ1dCBrZWVwIHRoZSBzbGFzaCwgYW5kIHVzZSAnKycgZm9yICcgJworCQkkcGF0aCAgPX4gcy8oW15hLXpBLVowLTlfLlwtXC8gXSkvc3ByaW50ZigiJSUlMDJYIiwgb3JkKCQxKSkvZWc7CisJCSRvd25lciA9fiBzLyhbXmEtekEtWjAtOV8uXC1cLyBdKS9zcHJpbnRmKCIlJSUwMlgiLCBvcmQoJDEpKS9lZzsKKwkJJHBhdGggID1+IHMvIC9cKy9nOworCQkkb3duZXIgPX4gcy8gL1wrL2c7CisKKwkJcHJpbnQgIiRwYXRoICRvd25lclxuIjsKKwl9Cit9CisKK3N1YiBnaXRfc3VtbWFyeSB7CisJbXkgJGRlc2NyID0gZ2l0X2dldF9wcm9qZWN0X2Rlc2NyaXB0aW9uKCRwcm9qZWN0KSB8fCAibm9uZSI7CisJbXkgJWNvID0gcGFyc2VfY29tbWl0KCJIRUFEIik7CisJbXkgJWNkID0gJWNvID8gcGFyc2VfZGF0ZSgkY297J2NvbW1pdHRlcl9lcG9jaCd9LCAkY297J2NvbW1pdHRlcl90eid9KSA6ICgpOworCW15ICRoZWFkID0gJGNveydpZCd9OworCW15ICRyZW1vdGVfaGVhZHMgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgncmVtb3RlX2hlYWRzJyk7CisKKwlteSAkb3duZXIgPSBnaXRfZ2V0X3Byb2plY3Rfb3duZXIoJHByb2plY3QpOworCisJbXkgJHJlZnMgPSBnaXRfZ2V0X3JlZmVyZW5jZXMoKTsKKwkjIFRoZXNlIGdldF8qX2xpc3QgZnVuY3Rpb25zIHJldHVybiBvbmUgbW9yZSB0byBhbGxvdyB1cyB0byBzZWUgaWYKKwkjIHRoZXJlIGFyZSBtb3JlIC4uLgorCW15IEB0YWdsaXN0ICA9IGdpdF9nZXRfdGFnc19saXN0KDE2KTsKKwlteSBAaGVhZGxpc3QgPSBnaXRfZ2V0X2hlYWRzX2xpc3QoMTYpOworCW15ICVyZW1vdGVkYXRhID0gJHJlbW90ZV9oZWFkcyA/IGdpdF9nZXRfcmVtb3Rlc19saXN0KCkgOiAoKTsKKwlteSBAZm9ya2xpc3Q7CisJbXkgJGNoZWNrX2ZvcmtzID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2ZvcmtzJyk7CisKKwlpZiAoJGNoZWNrX2ZvcmtzKSB7CisJCSMgZmluZCBmb3JrcyBvZiBhIHByb2plY3QKKwkJbXkgJGZpbHRlciA9ICRwcm9qZWN0OworCQkkZmlsdGVyID1+IHMvXC5naXQkLy87CisJCUBmb3JrbGlzdCA9IGdpdF9nZXRfcHJvamVjdHNfbGlzdCgkZmlsdGVyKTsKKwkJIyBmaWx0ZXIgb3V0IGZvcmtzIG9mIGZvcmtzCisJCUBmb3JrbGlzdCA9IGZpbHRlcl9mb3Jrc19mcm9tX3Byb2plY3RzX2xpc3QoXEBmb3JrbGlzdCkKKwkJCWlmIChAZm9ya2xpc3QpOworCX0KKworCWdpdF9oZWFkZXJfaHRtbCgpOworCWdpdF9wcmludF9wYWdlX25hdignc3VtbWFyeScsJycsICRoZWFkKTsKKworCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVcIj4mbmJzcDs8L2Rpdj5cbiI7CisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cInByb2plY3RzX2xpc3RcIj5cbiIgLgorCSAgICAgICI8dHIgaWQ9XCJtZXRhZGF0YV9kZXNjXCI+PHRkPmRlc2NyaXB0aW9uPC90ZD48dGQ+IiAuIGVzY19odG1sKCRkZXNjcikgLiAiPC90ZD48L3RyPlxuIjsKKyAgICAgICAgaWYgKCRvd25lciBhbmQgbm90ICRvbWl0X293bmVyKSB7CisJICAgICAgICBwcmludCAgIjx0ciBpZD1cIm1ldGFkYXRhX293bmVyXCI+PHRkPm93bmVyPC90ZD48dGQ+IiAuIGVzY19odG1sKCRvd25lcikgLiAiPC90ZD48L3RyPlxuIjsKKyAgICAgICAgfQorCWlmIChkZWZpbmVkICRjZHsncmZjMjgyMid9KSB7CisJCXByaW50ICI8dHIgaWQ9XCJtZXRhZGF0YV9sY2hhbmdlXCI+PHRkPmxhc3QgY2hhbmdlPC90ZD4iIC4KKwkJICAgICAgIjx0ZD4iLmZvcm1hdF90aW1lc3RhbXBfaHRtbChcJWNkKS4iPC90ZD48L3RyPlxuIjsKKwl9CisKKwkjIHVzZSBwZXIgcHJvamVjdCBnaXQgVVJMIGxpc3QgaW4gJHByb2plY3Ryb290LyRwcm9qZWN0L2Nsb25ldXJsCisJIyBvciBtYWtlIHByb2plY3QgZ2l0IFVSTCBmcm9tIGdpdCBiYXNlIFVSTCBhbmQgcHJvamVjdCBuYW1lCisJbXkgJHVybF90YWcgPSAiVVJMIjsKKwlteSBAdXJsX2xpc3QgPSBnaXRfZ2V0X3Byb2plY3RfdXJsX2xpc3QoJHByb2plY3QpOworCUB1cmxfbGlzdCA9IG1hcCB7ICIkXy8kcHJvamVjdCIgfSBAZ2l0X2Jhc2VfdXJsX2xpc3QgdW5sZXNzIEB1cmxfbGlzdDsKKwlmb3JlYWNoIG15ICRnaXRfdXJsIChAdXJsX2xpc3QpIHsKKwkJbmV4dCB1bmxlc3MgJGdpdF91cmw7CisJCXByaW50IGZvcm1hdF9yZXBvX3VybCgkdXJsX3RhZywgJGdpdF91cmwpOworCQkkdXJsX3RhZyA9ICIiOworCX0KKworCSMgVGFnIGNsb3VkCisJbXkgJHNob3dfY3RhZ3MgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnY3RhZ3MnKTsKKwlpZiAoJHNob3dfY3RhZ3MpIHsKKwkJbXkgJGN0YWdzID0gZ2l0X2dldF9wcm9qZWN0X2N0YWdzKCRwcm9qZWN0KTsKKwkJaWYgKCUkY3RhZ3MpIHsKKwkJCSMgd2l0aG91dCBhYmlsaXR5IHRvIGFkZCB0YWdzLCBkb24ndCBzaG93IGlmIHRoZXJlIGFyZSBub25lCisJCQlteSAkY2xvdWQgPSBnaXRfcG9wdWxhdGVfcHJvamVjdF90YWdjbG91ZCgkY3RhZ3MpOworCQkJcHJpbnQgIjx0ciBpZD1cIm1ldGFkYXRhX2N0YWdzXCI+IiAuCisJCQkgICAgICAiPHRkPmNvbnRlbnQgdGFnczwvdGQ+IiAuCisJCQkgICAgICAiPHRkPiIuZ2l0X3Nob3dfcHJvamVjdF90YWdjbG91ZCgkY2xvdWQsIDQ4KS4iPC90ZD4iIC4KKwkJCSAgICAgICI8L3RyPlxuIjsKKwkJfQorCX0KKworCXByaW50ICI8L3RhYmxlPlxuIjsKKworCSMgSWYgWFNTIHByZXZlbnRpb24gaXMgb24sIHdlIGRvbid0IGluY2x1ZGUgUkVBRE1FLmh0bWwuCisJIyBUT0RPOiBBbGxvdyBhIHJlYWRtZSBpbiBzb21lIHNhZmUgZm9ybWF0LgorCWlmICghJHByZXZlbnRfeHNzICYmIC1zICIkcHJvamVjdHJvb3QvJHByb2plY3QvUkVBRE1FLmh0bWwiKSB7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVcIj5yZWFkbWU8L2Rpdj5cbiIgLgorCQkgICAgICAiPGRpdiBjbGFzcz1cInJlYWRtZVwiPlxuIjsKKwkJaW5zZXJ0X2ZpbGUoIiRwcm9qZWN0cm9vdC8kcHJvamVjdC9SRUFETUUuaHRtbCIpOworCQlwcmludCAiXG48L2Rpdj5cbiI7ICMgY2xhc3M9InJlYWRtZSIKKwl9CisKKwkjIHdlIG5lZWQgdG8gcmVxdWVzdCBvbmUgbW9yZSB0aGFuIDE2ICgwLi4xNSkgdG8gY2hlY2sgaWYKKwkjIHRob3NlIDE2IGFyZSBhbGwKKwlteSBAY29tbWl0bGlzdCA9ICRoZWFkID8gcGFyc2VfY29tbWl0cygkaGVhZCwgMTcpIDogKCk7CisJaWYgKEBjb21taXRsaXN0KSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdzaG9ydGxvZycpOworCQlnaXRfc2hvcnRsb2dfYm9keShcQGNvbW1pdGxpc3QsIDAsIDE1LCAkcmVmcywKKwkJICAgICAgICAgICAgICAgICAgJCNjb21taXRsaXN0IDw9ICAxNSA/IHVuZGVmIDoKKwkJICAgICAgICAgICAgICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJzaG9ydGxvZyIpfSwgIi4uLiIpKTsKKwl9CisKKwlpZiAoQHRhZ2xpc3QpIHsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3RhZ3MnKTsKKwkJZ2l0X3RhZ3NfYm9keShcQHRhZ2xpc3QsIDAsIDE1LAorCQkgICAgICAgICAgICAgICQjdGFnbGlzdCA8PSAgMTUgPyB1bmRlZiA6CisJCSAgICAgICAgICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0YWdzIil9LCAiLi4uIikpOworCX0KKworCWlmIChAaGVhZGxpc3QpIHsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2hlYWRzJyk7CisJCWdpdF9oZWFkc19ib2R5KFxAaGVhZGxpc3QsICRoZWFkLCAwLCAxNSwKKwkJICAgICAgICAgICAgICAgJCNoZWFkbGlzdCA8PSAxNSA/IHVuZGVmIDoKKwkJICAgICAgICAgICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoZWFkcyIpfSwgIi4uLiIpKTsKKwl9CisKKwlpZiAoJXJlbW90ZWRhdGEpIHsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3JlbW90ZXMnKTsKKwkJZ2l0X3JlbW90ZXNfYm9keShcJXJlbW90ZWRhdGEsIDE1LCAkaGVhZCk7CisJfQorCisJaWYgKEBmb3JrbGlzdCkgeworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdignZm9ya3MnKTsKKwkJZ2l0X3Byb2plY3RfbGlzdF9ib2R5KFxAZm9ya2xpc3QsICdhZ2UnLCAwLCAxNSwKKwkJICAgICAgICAgICAgICAgICAgICAgICQjZm9ya2xpc3QgPD0gMTUgPyB1bmRlZiA6CisJCSAgICAgICAgICAgICAgICAgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImZvcmtzIil9LCAiLi4uIiksCisJCSAgICAgICAgICAgICAgICAgICAgICAnbm9faGVhZGVyJyk7CisJfQorCisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfdGFnIHsKKwlteSAldGFnID0gcGFyc2VfdGFnKCRoYXNoKTsKKworCWlmICghICV0YWcpIHsKKwkJZGllX2Vycm9yKDQwNCwgIlVua25vd24gdGFnIG9iamVjdCIpOworCX0KKworCW15ICRoZWFkID0gZ2l0X2dldF9oZWFkX2hhc2goJHByb2plY3QpOworCWdpdF9oZWFkZXJfaHRtbCgpOworCWdpdF9wcmludF9wYWdlX25hdignJywnJywgJGhlYWQsdW5kZWYsJGhlYWQpOworCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkdGFneyduYW1lJ30pLCAkaGFzaCk7CisJcHJpbnQgIjxkaXYgY2xhc3M9XCJ0aXRsZV90ZXh0XCI+XG4iIC4KKwkgICAgICAiPHRhYmxlIGNsYXNzPVwib2JqZWN0X2hlYWRlclwiPlxuIiAuCisJICAgICAgIjx0cj5cbiIgLgorCSAgICAgICI8dGQ+b2JqZWN0PC90ZD5cbiIgLgorCSAgICAgICI8dGQ+IiAuICRjZ2ktPmEoey1jbGFzcyA9PiAibGlzdCIsIC1ocmVmID0+IGhyZWYoYWN0aW9uPT4kdGFneyd0eXBlJ30sIGhhc2g9PiR0YWd7J29iamVjdCd9KX0sCisJICAgICAgICAgICAgICAgICAgICAgICAkdGFneydvYmplY3QnfSkgLiAiPC90ZD5cbiIgLgorCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4kdGFneyd0eXBlJ30sIGhhc2g9PiR0YWd7J29iamVjdCd9KX0sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFneyd0eXBlJ30pIC4gIjwvdGQ+XG4iIC4KKwkgICAgICAiPC90cj5cbiI7CisJaWYgKGRlZmluZWQoJHRhZ3snYXV0aG9yJ30pKSB7CisJCWdpdF9wcmludF9hdXRob3JzaGlwX3Jvd3MoXCV0YWcsICdhdXRob3InKTsKKwl9CisJcHJpbnQgIjwvdGFibGU+XG5cbiIgLgorCSAgICAgICI8L2Rpdj5cbiI7CisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX2JvZHlcIj4iOworCW15ICRjb21tZW50ID0gJHRhZ3snY29tbWVudCd9OworCWZvcmVhY2ggbXkgJGxpbmUgKEAkY29tbWVudCkgeworCQljaG9tcCAkbGluZTsKKwkJcHJpbnQgZXNjX2h0bWwoJGxpbmUsIC1uYnNwPT4xKSAuICI8YnIvPlxuIjsKKwl9CisJcHJpbnQgIjwvZGl2PlxuIjsKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF9ibGFtZV9jb21tb24geworCW15ICRmb3JtYXQgPSBzaGlmdCB8fCAncG9yY2VsYWluJzsKKwlpZiAoJGZvcm1hdCBlcSAncG9yY2VsYWluJyAmJiAkaW5wdXRfcGFyYW1zeydqYXZhc2NyaXB0J30pIHsKKwkJJGZvcm1hdCA9ICdpbmNyZW1lbnRhbCc7CisJCSRhY3Rpb24gPSAnYmxhbWVfaW5jcmVtZW50YWwnOyAjIGZvciBwYWdlIHRpdGxlIGV0YworCX0KKworCSMgcGVybWlzc2lvbnMKKwlnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnYmxhbWUnKQorCQlvciBkaWVfZXJyb3IoNDAzLCAiQmxhbWUgdmlldyBub3QgYWxsb3dlZCIpOworCisJIyBlcnJvciBjaGVja2luZworCWRpZV9lcnJvcig0MDAsICJObyBmaWxlIG5hbWUgZ2l2ZW4iKSB1bmxlc3MgJGZpbGVfbmFtZTsKKwkkaGFzaF9iYXNlIHx8PSBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CisJZGllX2Vycm9yKDQwNCwgIkNvdWxkbid0IGZpbmQgYmFzZSBjb21taXQiKSB1bmxlc3MgJGhhc2hfYmFzZTsKKwlteSAlY28gPSBwYXJzZV9jb21taXQoJGhhc2hfYmFzZSkKKwkJb3IgZGllX2Vycm9yKDQwNCwgIkNvbW1pdCBub3QgZm91bmQiKTsKKwlteSAkZnR5cGUgPSAiYmxvYiI7CisJaWYgKCFkZWZpbmVkICRoYXNoKSB7CisJCSRoYXNoID0gZ2l0X2dldF9oYXNoX2J5X3BhdGgoJGhhc2hfYmFzZSwgJGZpbGVfbmFtZSwgImJsb2IiKQorCQkJb3IgZGllX2Vycm9yKDQwNCwgIkVycm9yIGxvb2tpbmcgdXAgZmlsZSIpOworCX0gZWxzZSB7CisJCSRmdHlwZSA9IGdpdF9nZXRfdHlwZSgkaGFzaCk7CisJCWlmICgkZnR5cGUgIX4gImJsb2IiKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiT2JqZWN0IGlzIG5vdCBhIGJsb2IiKTsKKwkJfQorCX0KKworCW15ICRmZDsKKwlpZiAoJGZvcm1hdCBlcSAnaW5jcmVtZW50YWwnKSB7CisJCSMgZ2V0IGZpbGUgY29udGVudHMgKGFzIGJhc2UpCisJCW9wZW4gJGZkLCAiLXwiLCBnaXRfY21kKCksICdjYXQtZmlsZScsICdibG9iJywgJGhhc2gKKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1jYXQtZmlsZSBmYWlsZWQiKTsKKwl9IGVsc2lmICgkZm9ybWF0IGVxICdkYXRhJykgeworCQkjIHJ1biBnaXQtYmxhbWUgLS1pbmNyZW1lbnRhbAorCQlvcGVuICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiYmxhbWUiLCAiLS1pbmNyZW1lbnRhbCIsCisJCQkkaGFzaF9iYXNlLCAiLS0iLCAkZmlsZV9uYW1lCisJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtYmxhbWUgLS1pbmNyZW1lbnRhbCBmYWlsZWQiKTsKKwl9IGVsc2UgeworCQkjIHJ1biBnaXQtYmxhbWUgLS1wb3JjZWxhaW4KKwkJb3BlbiAkZmQsICItfCIsIGdpdF9jbWQoKSwgImJsYW1lIiwgJy1wJywKKwkJCSRoYXNoX2Jhc2UsICctLScsICRmaWxlX25hbWUKKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1ibGFtZSAtLXBvcmNlbGFpbiBmYWlsZWQiKTsKKwl9CisJYmlubW9kZSAkZmQsICc6dXRmOCc7CisKKwkjIGluY3JlbWVudGFsIGJsYW1lIGRhdGEgcmV0dXJucyBlYXJseQorCWlmICgkZm9ybWF0IGVxICdkYXRhJykgeworCQlwcmludCAkY2dpLT5oZWFkZXIoCisJCQktdHlwZT0+InRleHQvcGxhaW4iLCAtY2hhcnNldCA9PiAidXRmLTgiLAorCQkJLXN0YXR1cz0+ICIyMDAgT0siKTsKKwkJbG9jYWwgJHwgPSAxOyAjIG91dHB1dCBhdXRvZmx1c2gKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJCXByaW50IHRvX3V0ZjgoJGxpbmUpOworCQl9CisJCWNsb3NlICRmZAorCQkJb3IgcHJpbnQgIkVSUk9SICQhXG4iOworCisJCXByaW50ICdFTkQnOworCQlpZiAoZGVmaW5lZCAkdDAgJiYgZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3RpbWVkJykpIHsKKwkJCXByaW50ICcgJy4KKwkJCSAgICAgIHR2X2ludGVydmFsKCR0MCwgWyBnZXR0aW1lb2ZkYXkoKSBdKS4KKwkJCSAgICAgICcgJy4kbnVtYmVyX29mX2dpdF9jbWRzOworCQl9CisJCXByaW50ICJcbiI7CisKKwkJcmV0dXJuOworCX0KKworCSMgcGFnZSBoZWFkZXIKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKwlteSAkZm9ybWF0c19uYXYgPQorCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCAtcmVwbGF5PT4xKX0sCisJCSAgICAgICAgImJsb2IiKSAuCisJCSIgfCAiOworCWlmICgkZm9ybWF0IGVxICdpbmNyZW1lbnRhbCcpIHsKKwkJJGZvcm1hdHNfbmF2IC49CisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsYW1lIiwgamF2YXNjcmlwdD0+MCwgLXJlcGxheT0+MSl9LAorCQkJICAgICAgICAiYmxhbWUiKSAuICIgKG5vbi1pbmNyZW1lbnRhbCkiOworCX0gZWxzZSB7CisJCSRmb3JtYXRzX25hdiAuPQorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibGFtZV9pbmNyZW1lbnRhbCIsIC1yZXBsYXk9PjEpfSwKKwkJCSAgICAgICAgImJsYW1lIikgLiAiIChpbmNyZW1lbnRhbCkiOworCX0KKwkkZm9ybWF0c19uYXYgLj0KKwkJIiB8ICIgLgorCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Imhpc3RvcnkiLCAtcmVwbGF5PT4xKX0sCisJCSAgICAgICAgImhpc3RvcnkiKSAuCisJCSIgfCAiIC4KKwkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiRhY3Rpb24sIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSl9LAorCQkgICAgICAgICJIRUFEIik7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCcnLCAkaGFzaF9iYXNlLCRjb3sndHJlZSd9LCRoYXNoX2Jhc2UsICRmb3JtYXRzX25hdik7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsIGVzY19odG1sKCRjb3sndGl0bGUnfSksICRoYXNoX2Jhc2UpOworCWdpdF9wcmludF9wYWdlX3BhdGgoJGZpbGVfbmFtZSwgJGZ0eXBlLCAkaGFzaF9iYXNlKTsKKworCSMgcGFnZSBib2R5CisJaWYgKCRmb3JtYXQgZXEgJ2luY3JlbWVudGFsJykgeworCQlwcmludCAiPG5vc2NyaXB0PlxuPGRpdiBjbGFzcz1cImVycm9yXCI+PGNlbnRlcj48Yj5cbiIuCisJCSAgICAgICJUaGlzIHBhZ2UgcmVxdWlyZXMgSmF2YVNjcmlwdCB0byBydW4uXG4gVXNlICIuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4nYmxhbWUnLGphdmFzY3JpcHQ9PjAsLXJlcGxheT0+MSl9LAorCQkgICAgICAgICAgICAgICd0aGlzIHBhZ2UnKS4KKwkJICAgICAgIiBpbnN0ZWFkLlxuIi4KKwkJICAgICAgIjwvYj48L2NlbnRlcj48L2Rpdj5cbjwvbm9zY3JpcHQ+XG4iOworCisJCXByaW50IHFxITxkaXYgaWQ9InByb2dyZXNzX2JhciIgc3R5bGU9IndpZHRoOiAxMDAlOyBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3ciPjwvZGl2PlxuITsKKwl9CisKKwlwcmludCBxcSE8ZGl2IGNsYXNzPSJwYWdlX2JvZHkiPlxuITsKKwlwcmludCBxcSE8ZGl2IGlkPSJwcm9ncmVzc19pbmZvIj4uLi4gLyAuLi48L2Rpdj5cbiEKKwkJaWYgKCRmb3JtYXQgZXEgJ2luY3JlbWVudGFsJyk7CisJcHJpbnQgcXEhPHRhYmxlIGlkPSJibGFtZV90YWJsZSIgY2xhc3M9ImJsYW1lIiB3aWR0aD0iMTAwJSI+XG4hLgorCSAgICAgICNxcSE8Y29sIHdpZHRoPSI1LjVlbSIgLz48Y29sIHdpZHRoPSIyLjVlbSIgLz48Y29sIHdpZHRoPSIqIiAvPlxuIS4KKwkgICAgICBxcSE8dGhlYWQ+XG4hLgorCSAgICAgIHFxITx0cj48dGg+Q29tbWl0PC90aD48dGg+TGluZTwvdGg+PHRoPkRhdGE8L3RoPjwvdHI+XG4hLgorCSAgICAgIHFxITwvdGhlYWQ+XG4hLgorCSAgICAgIHFxITx0Ym9keT5cbiE7CisKKwlteSBAcmV2X2NvbG9yID0gcXcobGlnaHQgZGFyayk7CisJbXkgJG51bV9jb2xvcnMgPSBzY2FsYXIoQHJldl9jb2xvcik7CisJbXkgJGN1cnJlbnRfY29sb3IgPSAwOworCisJaWYgKCRmb3JtYXQgZXEgJ2luY3JlbWVudGFsJykgeworCQlteSAkY29sb3JfY2xhc3MgPSAkcmV2X2NvbG9yWyRjdXJyZW50X2NvbG9yXTsKKworCQkjY29udGVudHMgb2YgYSBmaWxlCisJCW15ICRsaW5lbnIgPSAwOworCUxJTkU6CisJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCQljaG9tcCAkbGluZTsKKwkJCSRsaW5lbnIrKzsKKworCQkJcHJpbnQgcXEhPHRyIGlkPSJsJGxpbmVuciIgY2xhc3M9IiRjb2xvcl9jbGFzcyI+IS4KKwkJCSAgICAgIHFxITx0ZCBjbGFzcz0ic2hhMSI+PGEgaHJlZj0iIj4gPC9hPjwvdGQ+IS4KKwkJCSAgICAgIHFxITx0ZCBjbGFzcz0ibGluZW5yIj4hLgorCQkJICAgICAgcXEhPGEgY2xhc3M9ImxpbmVuciIgaHJlZj0iIj4kbGluZW5yPC9hPjwvdGQ+ITsKKwkJCXByaW50IHFxITx0ZCBjbGFzcz0icHJlIj4hIC4gZXNjX2h0bWwoJGxpbmUpIC4gIjwvdGQ+XG4iOworCQkJcHJpbnQgcXEhPC90cj5cbiE7CisJCX0KKworCX0gZWxzZSB7ICMgcG9yY2VsYWluLCBpLmUuIG9yZGluYXJ5IGJsYW1lCisJCW15ICVtZXRhaW5mbyA9ICgpOyAjIHNhdmVzIGluZm9ybWF0aW9uIGFib3V0IGNvbW1pdHMKKworCQkjIGJsYW1lIGRhdGEKKwlMSU5FOgorCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQkJY2hvbXAgJGxpbmU7CisJCQkjIHRoZSBoZWFkZXI6IDxTSEEtMT4gPHNyYyBsaW5lbm8+IDxkc3QgbGluZW5vPiBbPGxpbmVzIGluIGdyb3VwPl0KKwkJCSMgbm8gPGxpbmVzIGluIGdyb3VwPiBmb3Igc3Vic2VxdWVudCBsaW5lcyBpbiBncm91cCBvZiBsaW5lcworCQkJbXkgKCRmdWxsX3JldiwgJG9yaWdfbGluZW5vLCAkbGluZW5vLCAkZ3JvdXBfc2l6ZSkgPQorCQkJICAgKCRsaW5lID1+IC9eKCRvaWRfcmVnZXgpIChcZCspIChcZCspKD86IChcZCspKT8kLyk7CisJCQlpZiAoIWV4aXN0cyAkbWV0YWluZm97JGZ1bGxfcmV2fSkgeworCQkJCSRtZXRhaW5mb3skZnVsbF9yZXZ9ID0geyAnbnByZXZpb3VzJyA9PiAwIH07CisJCQl9CisJCQlteSAkbWV0YSA9ICRtZXRhaW5mb3skZnVsbF9yZXZ9OworCQkJbXkgJGRhdGE7CisJCQl3aGlsZSAoJGRhdGEgPSA8JGZkPikgeworCQkJCWNob21wICRkYXRhOworCQkJCWxhc3QgaWYgKCRkYXRhID1+IHMvXlx0Ly8pOyAjIGNvbnRlbnRzIG9mIGxpbmUKKwkJCQlpZiAoJGRhdGEgPX4gL14oXFMrKSg/OiAoLiopKT8kLykgeworCQkJCQkkbWV0YS0+eyQxfSA9ICQyIHVubGVzcyBleGlzdHMgJG1ldGEtPnskMX07CisJCQkJfQorCQkJCWlmICgkZGF0YSA9fiAvXnByZXZpb3VzIC8pIHsKKwkJCQkJJG1ldGEtPnsnbnByZXZpb3VzJ30rKzsKKwkJCQl9CisJCQl9CisJCQlteSAkc2hvcnRfcmV2ID0gc3Vic3RyKCRmdWxsX3JldiwgMCwgOCk7CisJCQlteSAkYXV0aG9yID0gJG1ldGEtPnsnYXV0aG9yJ307CisJCQlteSAlZGF0ZSA9CisJCQkJcGFyc2VfZGF0ZSgkbWV0YS0+eydhdXRob3ItdGltZSd9LCAkbWV0YS0+eydhdXRob3ItdHonfSk7CisJCQlteSAkZGF0ZSA9ICRkYXRleydpc28tdHonfTsKKwkJCWlmICgkZ3JvdXBfc2l6ZSkgeworCQkJCSRjdXJyZW50X2NvbG9yID0gKCRjdXJyZW50X2NvbG9yICsgMSkgJSAkbnVtX2NvbG9yczsKKwkJCX0KKwkJCW15ICR0cl9jbGFzcyA9ICRyZXZfY29sb3JbJGN1cnJlbnRfY29sb3JdOworCQkJJHRyX2NsYXNzIC49ICcgYm91bmRhcnknIGlmIChleGlzdHMgJG1ldGEtPnsnYm91bmRhcnknfSk7CisJCQkkdHJfY2xhc3MgLj0gJyBuby1wcmV2aW91cycgaWYgKCRtZXRhLT57J25wcmV2aW91cyd9ID09IDApOworCQkJJHRyX2NsYXNzIC49ICcgbXVsdGlwbGUtcHJldmlvdXMnIGlmICgkbWV0YS0+eyducHJldmlvdXMnfSA+IDEpOworCQkJcHJpbnQgIjx0ciBpZD1cImwkbGluZW5vXCIgY2xhc3M9XCIkdHJfY2xhc3NcIj5cbiI7CisJCQlpZiAoJGdyb3VwX3NpemUpIHsKKwkJCQlwcmludCAiPHRkIGNsYXNzPVwic2hhMVwiIjsKKwkJCQlwcmludCAiIHRpdGxlPVwiIi4gZXNjX2h0bWwoJGF1dGhvcikgLiAiLCAkZGF0ZVwiIjsKKwkJCQlwcmludCAiIHJvd3NwYW49XCIkZ3JvdXBfc2l6ZVwiIiBpZiAoJGdyb3VwX3NpemUgPiAxKTsKKwkJCQlwcmludCAiPiI7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGZ1bGxfcmV2LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKX0sCisJCQkJICAgICAgICAgICAgICBlc2NfaHRtbCgkc2hvcnRfcmV2KSk7CisJCQkJaWYgKCRncm91cF9zaXplID49IDIpIHsKKwkJCQkJbXkgQGF1dGhvcl9pbml0aWFscyA9ICgkYXV0aG9yID1+IC9cYihbWzp1cHBlcjpdXSlcQi9nKTsKKwkJCQkJaWYgKEBhdXRob3JfaW5pdGlhbHMpIHsKKwkJCQkJCXByaW50ICI8YnIgLz4iIC4KKwkJCQkJCSAgICAgIGVzY19odG1sKGpvaW4oJycsIEBhdXRob3JfaW5pdGlhbHMpKTsKKwkJCQkJCSMgICAgICAgICAgIG9yIGpvaW4oJy4nLCAuLi4pCisJCQkJCX0KKwkJCQl9CisJCQkJcHJpbnQgIjwvdGQ+XG4iOworCQkJfQorCQkJIyAncHJldmlvdXMnIDxzaGExIG9mIHBhcmVudCBjb21taXQ+IDxmaWxlbmFtZSBhdCBjb21taXQ+CisJCQlpZiAoZXhpc3RzICRtZXRhLT57J3ByZXZpb3VzJ30gJiYKKwkJCSAgICAkbWV0YS0+eydwcmV2aW91cyd9ID1+IC9eKCRvaWRfcmVnZXgpICguKikkLykgeworCQkJCSRtZXRhLT57J3BhcmVudCd9ID0gJDE7CisJCQkJJG1ldGEtPnsnZmlsZV9wYXJlbnQnfSA9IHVucXVvdGUoJDIpOworCQkJfQorCQkJbXkgJGxpbmVucl9jb21taXQgPQorCQkJCWV4aXN0cygkbWV0YS0+eydwYXJlbnQnfSkgPworCQkJCSRtZXRhLT57J3BhcmVudCd9IDogJGZ1bGxfcmV2OworCQkJbXkgJGxpbmVucl9maWxlbmFtZSA9CisJCQkJZXhpc3RzKCRtZXRhLT57J2ZpbGVfcGFyZW50J30pID8KKwkJCQkkbWV0YS0+eydmaWxlX3BhcmVudCd9IDogdW5xdW90ZSgkbWV0YS0+eydmaWxlbmFtZSd9KTsKKwkJCW15ICRibGFtZWQgPSBocmVmKGFjdGlvbiA9PiAnYmxhbWUnLAorCQkJICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lID0+ICRsaW5lbnJfZmlsZW5hbWUsCisJCQkgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2UgPT4gJGxpbmVucl9jb21taXQpOworCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmVuclwiPiI7CisJCQlwcmludCAkY2dpLT5hKHsgLWhyZWYgPT4gIiRibGFtZWQjbCRvcmlnX2xpbmVubyIsCisJCQkgICAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaW5lbnIiIH0sCisJCQkgICAgICAgICAgICAgIGVzY19odG1sKCRsaW5lbm8pKTsKKwkJCXByaW50ICI8L3RkPiI7CisJCQlwcmludCAiPHRkIGNsYXNzPVwicHJlXCI+IiAuIGVzY19odG1sKCRkYXRhKSAuICI8L3RkPlxuIjsKKwkJCXByaW50ICI8L3RyPlxuIjsKKwkJfSAjIGVuZCB3aGlsZQorCisJfQorCisJIyBmb290ZXIKKwlwcmludCAiPC90Ym9keT5cbiIuCisJICAgICAgIjwvdGFibGU+XG4iOyAjIGNsYXNzPSJibGFtZSIKKwlwcmludCAiPC9kaXY+XG4iOyAgICMgY2xhc3M9ImJsYW1lX2JvZHkiCisJY2xvc2UgJGZkCisJCW9yIHByaW50ICJSZWFkaW5nIGJsb2IgZmFpbGVkXG4iOworCisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfYmxhbWUgeworCWdpdF9ibGFtZV9jb21tb24oKTsKK30KKworc3ViIGdpdF9ibGFtZV9pbmNyZW1lbnRhbCB7CisJZ2l0X2JsYW1lX2NvbW1vbignaW5jcmVtZW50YWwnKTsKK30KKworc3ViIGdpdF9ibGFtZV9kYXRhIHsKKwlnaXRfYmxhbWVfY29tbW9uKCdkYXRhJyk7Cit9CisKK3N1YiBnaXRfdGFncyB7CisJbXkgJGhlYWQgPSBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CisJZ2l0X2hlYWRlcl9odG1sKCk7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCcnLCAkaGVhZCx1bmRlZiwkaGVhZCxmb3JtYXRfcmVmX3ZpZXdzKCd0YWdzJykpOworCWdpdF9wcmludF9oZWFkZXJfZGl2KCdzdW1tYXJ5JywgJHByb2plY3QpOworCisJbXkgQHRhZ3NsaXN0ID0gZ2l0X2dldF90YWdzX2xpc3QoKTsKKwlpZiAoQHRhZ3NsaXN0KSB7CisJCWdpdF90YWdzX2JvZHkoXEB0YWdzbGlzdCk7CisJfQorCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X2hlYWRzIHsKKwlteSAkaGVhZCA9IGdpdF9nZXRfaGVhZF9oYXNoKCRwcm9qZWN0KTsKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoZWFkLHVuZGVmLCRoZWFkLGZvcm1hdF9yZWZfdmlld3MoJ2hlYWRzJykpOworCWdpdF9wcmludF9oZWFkZXJfZGl2KCdzdW1tYXJ5JywgJHByb2plY3QpOworCisJbXkgQGhlYWRzbGlzdCA9IGdpdF9nZXRfaGVhZHNfbGlzdCgpOworCWlmIChAaGVhZHNsaXN0KSB7CisJCWdpdF9oZWFkc19ib2R5KFxAaGVhZHNsaXN0LCAkaGVhZCk7CisJfQorCWdpdF9mb290ZXJfaHRtbCgpOworfQorCisjIHVzZWQgYm90aCBmb3Igc2luZ2xlIHJlbW90ZSB2aWV3IGFuZCBmb3IgbGlzdCBvZiBhbGwgdGhlIHJlbW90ZXMKK3N1YiBnaXRfcmVtb3RlcyB7CisJZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3JlbW90ZV9oZWFkcycpCisJCW9yIGRpZV9lcnJvcig0MDMsICJSZW1vdGUgaGVhZHMgdmlldyBpcyBkaXNhYmxlZCIpOworCisJbXkgJGhlYWQgPSBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CisJbXkgJHJlbW90ZSA9ICRpbnB1dF9wYXJhbXN7J2hhc2gnfTsKKworCW15ICRyZW1vdGVkYXRhID0gZ2l0X2dldF9yZW1vdGVzX2xpc3QoJHJlbW90ZSk7CisJZGllX2Vycm9yKDUwMCwgIlVuYWJsZSB0byBnZXQgcmVtb3RlIGluZm9ybWF0aW9uIikgdW5sZXNzIGRlZmluZWQgJHJlbW90ZWRhdGE7CisKKwl1bmxlc3MgKCUkcmVtb3RlZGF0YSkgeworCQlkaWVfZXJyb3IoNDA0LCBkZWZpbmVkICRyZW1vdGUgPworCQkJIlJlbW90ZSAkcmVtb3RlIG5vdCBmb3VuZCIgOgorCQkJIk5vIHJlbW90ZXMgZm91bmQiKTsKKwl9CisKKwlnaXRfaGVhZGVyX2h0bWwodW5kZWYsIHVuZGVmLCAtYWN0aW9uX2V4dHJhID0+ICRyZW1vdGUpOworCWdpdF9wcmludF9wYWdlX25hdignJywgJycsICAkaGVhZCwgdW5kZWYsICRoZWFkLAorCQlmb3JtYXRfcmVmX3ZpZXdzKCRyZW1vdGUgPyAnJyA6ICdyZW1vdGVzJykpOworCisJZmlsbF9yZW1vdGVfaGVhZHMoJHJlbW90ZWRhdGEpOworCWlmIChkZWZpbmVkICRyZW1vdGUpIHsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3JlbW90ZXMnLCAiJHJlbW90ZSByZW1vdGUgZm9yICRwcm9qZWN0Iik7CisJCWdpdF9yZW1vdGVfYmxvY2soJHJlbW90ZSwgJHJlbW90ZWRhdGEtPnskcmVtb3RlfSwgdW5kZWYsICRoZWFkKTsKKwl9IGVsc2UgeworCQlnaXRfcHJpbnRfaGVhZGVyX2Rpdignc3VtbWFyeScsICIkcHJvamVjdCByZW1vdGVzIik7CisJCWdpdF9yZW1vdGVzX2JvZHkoJHJlbW90ZWRhdGEsIHVuZGVmLCAkaGVhZCk7CisJfQorCisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfYmxvYl9wbGFpbiB7CisJbXkgJHR5cGUgPSBzaGlmdDsKKwlteSAkZXhwaXJlczsKKworCWlmICghZGVmaW5lZCAkaGFzaCkgeworCQlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCQlteSAkYmFzZSA9ICRoYXNoX2Jhc2UgfHwgZ2l0X2dldF9oZWFkX2hhc2goJHByb2plY3QpOworCQkJJGhhc2ggPSBnaXRfZ2V0X2hhc2hfYnlfcGF0aCgkYmFzZSwgJGZpbGVfbmFtZSwgImJsb2IiKQorCQkJCW9yIGRpZV9lcnJvcig0MDQsICJDYW5ub3QgZmluZCBmaWxlIik7CisJCX0gZWxzZSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiTm8gZmlsZSBuYW1lIGRlZmluZWQiKTsKKwkJfQorCX0gZWxzaWYgKCRoYXNoID1+IG0vXiRvaWRfcmVnZXgkLykgeworCQkjIGJsb2JzIGRlZmluZWQgYnkgbm9uLXRleHR1YWwgaGFzaCBpZCdzIGNhbiBiZSBjYWNoZWQKKwkJJGV4cGlyZXMgPSAiKzFkIjsKKwl9CisKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiY2F0LWZpbGUiLCAiYmxvYiIsICRoYXNoCisJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1jYXQtZmlsZSBibG9iICckaGFzaCcgZmFpbGVkIik7CisKKwkjIGNvbnRlbnQtdHlwZSAoY2FuIGluY2x1ZGUgY2hhcnNldCkKKwkkdHlwZSA9IGJsb2JfY29udGVudHR5cGUoJGZkLCAkZmlsZV9uYW1lLCAkdHlwZSk7CisKKwkjICJzYXZlIGFzIiBmaWxlbmFtZSwgZXZlbiB3aGVuIG5vICRmaWxlX25hbWUgaXMgZ2l2ZW4KKwlteSAkc2F2ZV9hcyA9ICIkaGFzaCI7CisJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkkc2F2ZV9hcyA9ICRmaWxlX25hbWU7CisJfSBlbHNpZiAoJHR5cGUgPX4gbS9edGV4dFwvLykgeworCQkkc2F2ZV9hcyAuPSAnLnR4dCc7CisJfQorCisJIyBXaXRoIFhTUyBwcmV2ZW50aW9uIG9uLCBibG9icyBvZiBhbGwgdHlwZXMgZXhjZXB0IGEgZmV3IGtub3duIHNhZmUKKwkjIG9uZXMgYXJlIHNlcnZlZCB3aXRoICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50IiB0byBtYWtlIHN1cmUKKwkjIHRoZXkgZG9uJ3QgcnVuIGluIG91ciBzZWN1cml0eSBkb21haW4uICBGb3IgY2VydGFpbiBpbWFnZSB0eXBlcywKKwkjIGJsb2IgdmlldyB3cml0ZXMgYW4gPGltZz4gdGFnIHJlZmVycmluZyB0byBibG9iX3BsYWluIHZpZXcsIGFuZCB3ZQorCSMgd2FudCB0byBiZSBzdXJlIG5vdCB0byBicmVhayB0aGF0IGJ5IHNlcnZpbmcgdGhlIGltYWdlIGFzIGFuCisJIyBhdHRhY2htZW50ICh0aG91Z2ggRmlyZWZveCAzIGRvZXNuJ3Qgc2VlbSB0byBjYXJlKS4KKwlteSAkc2FuZGJveCA9ICRwcmV2ZW50X3hzcyAmJgorCQkkdHlwZSAhfiBtIV4oPzp0ZXh0L1thLXpdK3xpbWFnZS8oPzpnaWZ8cG5nfGpwZWcpKSg/OlsgO118JCkhOworCisJIyBzZXJ2ZSB0ZXh0LyogYXMgdGV4dC9wbGFpbgorCWlmICgkcHJldmVudF94c3MgJiYKKwkgICAgKCR0eXBlID1+IG0hXnRleHQvW2Etel0rXGIoLiopJCEgfHwKKwkgICAgICgkdHlwZSA9fiBtIV5bYS16XSsvW2Etel1cK3htbFxiKC4qKSQhICYmIC1UICRmZCkpKSB7CisJCW15ICRyZXN0ID0gJDE7CisJCSRyZXN0ID0gZGVmaW5lZCAkcmVzdCA/ICRyZXN0IDogJyc7CisJCSR0eXBlID0gInRleHQvcGxhaW4kcmVzdCI7CisJfQorCisJcHJpbnQgJGNnaS0+aGVhZGVyKAorCQktdHlwZSA9PiAkdHlwZSwKKwkJLWV4cGlyZXMgPT4gJGV4cGlyZXMsCisJCS1jb250ZW50X2Rpc3Bvc2l0aW9uID0+CisJCQkoJHNhbmRib3ggPyAnYXR0YWNobWVudCcgOiAnaW5saW5lJykKKwkJCS4gJzsgZmlsZW5hbWU9IicgLiAkc2F2ZV9hcyAuICciJyk7CisJbG9jYWwgJC8gPSB1bmRlZjsKKwlsb2NhbCAqRkNHSTo6U3RyZWFtOjpQUklOVCA9ICRGQ0dJX1N0cmVhbV9QUklOVF9yYXc7CisJYmlubW9kZSBTVERPVVQsICc6cmF3JzsKKwlwcmludCA8JGZkPjsKKwliaW5tb2RlIFNURE9VVCwgJzp1dGY4JzsgIyBhcyBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBnaXR3ZWIuY2dpCisJY2xvc2UgJGZkOworfQorCitzdWIgZ2l0X2Jsb2IgeworCW15ICRleHBpcmVzOworCisJaWYgKCFkZWZpbmVkICRoYXNoKSB7CisJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJCW15ICRiYXNlID0gJGhhc2hfYmFzZSB8fCBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CisJCQkkaGFzaCA9IGdpdF9nZXRfaGFzaF9ieV9wYXRoKCRiYXNlLCAkZmlsZV9uYW1lLCAiYmxvYiIpCisJCQkJb3IgZGllX2Vycm9yKDQwNCwgIkNhbm5vdCBmaW5kIGZpbGUiKTsKKwkJfSBlbHNlIHsKKwkJCWRpZV9lcnJvcig0MDAsICJObyBmaWxlIG5hbWUgZGVmaW5lZCIpOworCQl9CisJfSBlbHNpZiAoJGhhc2ggPX4gbS9eJG9pZF9yZWdleCQvKSB7CisJCSMgYmxvYnMgZGVmaW5lZCBieSBub24tdGV4dHVhbCBoYXNoIGlkJ3MgY2FuIGJlIGNhY2hlZAorCQkkZXhwaXJlcyA9ICIrMWQiOworCX0KKworCW15ICRoYXZlX2JsYW1lID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2JsYW1lJyk7CisJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImNhdC1maWxlIiwgImJsb2IiLCAkaGFzaAorCQlvciBkaWVfZXJyb3IoNTAwLCAiQ291bGRuJ3QgY2F0ICRmaWxlX25hbWUsICRoYXNoIik7CisJbXkgJG1pbWV0eXBlID0gYmxvYl9taW1ldHlwZSgkZmQsICRmaWxlX25hbWUpOworCSMgdXNlICdibG9iX3BsYWluJyAoYWthICdyYXcnKSB2aWV3IGZvciBmaWxlcyB0aGF0IGNhbm5vdCBiZSBkaXNwbGF5ZWQKKwlpZiAoJG1pbWV0eXBlICF+IG0hXig/OnRleHQvfGltYWdlLyg/OmdpZnxwbmd8anBlZykkKSEgJiYgLUIgJGZkKSB7CisJCWNsb3NlICRmZDsKKwkJcmV0dXJuIGdpdF9ibG9iX3BsYWluKCRtaW1ldHlwZSk7CisJfQorCSMgd2UgY2FuIGhhdmUgYmxhbWUgb25seSBmb3IgdGV4dC8qIG1pbWV0eXBlCisJJGhhdmVfYmxhbWUgJiY9ICgkbWltZXR5cGUgPX4gbSFedGV4dC8hKTsKKworCW15ICRoaWdobGlnaHQgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnaGlnaGxpZ2h0Jyk7CisJbXkgJHN5bnRheCA9IGd1ZXNzX2ZpbGVfc3ludGF4KCRoaWdobGlnaHQsICRmaWxlX25hbWUpOworCSRmZCA9IHJ1bl9oaWdobGlnaHRlcigkZmQsICRoaWdobGlnaHQsICRzeW50YXgpOworCisJZ2l0X2hlYWRlcl9odG1sKHVuZGVmLCAkZXhwaXJlcyk7CisJbXkgJGZvcm1hdHNfbmF2ID0gJyc7CisJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSAmJiAobXkgJWNvID0gcGFyc2VfY29tbWl0KCRoYXNoX2Jhc2UpKSkgeworCQlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCQlpZiAoJGhhdmVfYmxhbWUpIHsKKwkJCQkkZm9ybWF0c19uYXYgLj0KKwkJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibGFtZSIsIC1yZXBsYXk9PjEpfSwKKwkJCQkJICAgICAgICAiYmxhbWUiKSAuCisJCQkJCSIgfCAiOworCQkJfQorCQkJJGZvcm1hdHNfbmF2IC49CisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoaXN0b3J5IiwgLXJlcGxheT0+MSl9LAorCQkJCSAgICAgICAgImhpc3RvcnkiKSAuCisJCQkJIiB8ICIgLgorCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYl9wbGFpbiIsIC1yZXBsYXk9PjEpfSwKKwkJCQkgICAgICAgICJyYXciKSAuCisJCQkJIiB8ICIgLgorCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiJIRUFEIiwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKX0sCisJCQkJICAgICAgICAiSEVBRCIpOworCQl9IGVsc2UgeworCQkJJGZvcm1hdHNfbmF2IC49CisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iX3BsYWluIiwgLXJlcGxheT0+MSl9LAorCQkJCSAgICAgICAgInJhdyIpOworCQl9CisJCWdpdF9wcmludF9wYWdlX25hdignJywnJywgJGhhc2hfYmFzZSwkY297J3RyZWUnfSwkaGFzaF9iYXNlLCAkZm9ybWF0c19uYXYpOworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdignY29tbWl0JywgZXNjX2h0bWwoJGNveyd0aXRsZSd9KSwgJGhhc2hfYmFzZSk7CisJfSBlbHNlIHsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX25hdlwiPlxuIiAuCisJCSAgICAgICI8YnIvPjxici8+PC9kaXY+XG4iIC4KKwkJICAgICAgIjxkaXYgY2xhc3M9XCJ0aXRsZVwiPiIuZXNjX2h0bWwoJGhhc2gpLiI8L2Rpdj5cbiI7CisJfQorCWdpdF9wcmludF9wYWdlX3BhdGgoJGZpbGVfbmFtZSwgImJsb2IiLCAkaGFzaF9iYXNlKTsKKwlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfYm9keVwiPlxuIjsKKwlpZiAoJG1pbWV0eXBlID1+IG0hXmltYWdlLyEpIHsKKwkJcHJpbnQgcXEhPGltZyBjbGFzcz0iYmxvYiIgdHlwZT0iIS5lc2NfYXR0cigkbWltZXR5cGUpLnFxISIhOworCQlpZiAoJGZpbGVfbmFtZSkgeworCQkJcHJpbnQgcXEhIGFsdD0iIS5lc2NfYXR0cigkZmlsZV9uYW1lKS5xcSEiIHRpdGxlPSIhLmVzY19hdHRyKCRmaWxlX25hbWUpLnFxISIhOworCQl9CisJCXByaW50IHFxISBzcmM9IiEgLgorCQkgICAgICBlc2NfYXR0cihocmVmKGFjdGlvbj0+ImJsb2JfcGxhaW4iLCBoYXNoPT4kaGFzaCwKKwkJICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSkpIC4KKwkJICAgICAgcXEhIiAvPlxuITsKKwl9IGVsc2UgeworCQlteSAkbnI7CisJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCQljaG9tcCAkbGluZTsKKwkJCSRucisrOworCQkJJGxpbmUgPSB1bnRhYmlmeSgkbGluZSk7CisJCQlwcmludGYgcXEhPGRpdiBjbGFzcz0icHJlIj48YSBpZD0ibCVpIiBocmVmPSIlcyNsJWkiIGNsYXNzPSJsaW5lbnIiPiU0aTwvYT4gJXM8L2Rpdj5cbiEsCisJCQkgICAgICAgJG5yLCBlc2NfYXR0cihocmVmKC1yZXBsYXkgPT4gMSkpLCAkbnIsICRuciwKKwkJCSAgICAgICAkaGlnaGxpZ2h0ID8gc2FuaXRpemUoJGxpbmUpIDogZXNjX2h0bWwoJGxpbmUsIC1uYnNwPT4xKTsKKwkJfQorCX0KKwljbG9zZSAkZmQKKwkJb3IgcHJpbnQgIlJlYWRpbmcgYmxvYiBmYWlsZWQuXG4iOworCXByaW50ICI8L2Rpdj4iOworCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X3RyZWUgeworCWlmICghZGVmaW5lZCAkaGFzaF9iYXNlKSB7CisJCSRoYXNoX2Jhc2UgPSAiSEVBRCI7CisJfQorCWlmICghZGVmaW5lZCAkaGFzaCkgeworCQlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCQkkaGFzaCA9IGdpdF9nZXRfaGFzaF9ieV9wYXRoKCRoYXNoX2Jhc2UsICRmaWxlX25hbWUsICJ0cmVlIik7CisJCX0gZWxzZSB7CisJCQkkaGFzaCA9ICRoYXNoX2Jhc2U7CisJCX0KKwl9CisJZGllX2Vycm9yKDQwNCwgIk5vIHN1Y2ggdHJlZSIpIHVubGVzcyBkZWZpbmVkKCRoYXNoKTsKKworCW15ICRzaG93X3NpemVzID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3Nob3ctc2l6ZXMnKTsKKwlteSAkaGF2ZV9ibGFtZSA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdibGFtZScpOworCisJbXkgQGVudHJpZXMgPSAoKTsKKwl7CisJCWxvY2FsICQvID0gIlwwIjsKKwkJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImxzLXRyZWUiLCAnLXonLAorCQkJKCRzaG93X3NpemVzID8gJy1sJyA6ICgpKSwgQGV4dHJhX29wdGlvbnMsICRoYXNoCisJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtbHMtdHJlZSBmYWlsZWQiKTsKKwkJQGVudHJpZXMgPSBtYXAgeyBjaG9tcDsgJF8gfSA8JGZkPjsKKwkJY2xvc2UgJGZkCisJCQlvciBkaWVfZXJyb3IoNDA0LCAiUmVhZGluZyB0cmVlIGZhaWxlZCIpOworCX0KKworCW15ICRyZWZzID0gZ2l0X2dldF9yZWZlcmVuY2VzKCk7CisJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkaGFzaF9iYXNlKTsKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKwlteSAkYmFzZWRpciA9ICcnOworCWlmIChkZWZpbmVkICRoYXNoX2Jhc2UgJiYgKG15ICVjbyA9IHBhcnNlX2NvbW1pdCgkaGFzaF9iYXNlKSkpIHsKKwkJbXkgQHZpZXdzX25hdiA9ICgpOworCQlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCQlwdXNoIEB2aWV3c19uYXYsCisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoaXN0b3J5IiwgLXJlcGxheT0+MSl9LAorCQkJCSAgICAgICAgImhpc3RvcnkiKSwKKwkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4iSEVBRCIsIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSl9LAorCQkJCSAgICAgICAgIkhFQUQiKSwKKwkJfQorCQlteSAkc25hcHNob3RfbGlua3MgPSBmb3JtYXRfc25hcHNob3RfbGlua3MoJGhhc2gpOworCQlpZiAoZGVmaW5lZCAkc25hcHNob3RfbGlua3MpIHsKKwkJCSMgRklYTUU6IFNob3VsZCBiZSBhdmFpbGFibGUgd2hlbiB3ZSBoYXZlIG5vIGhhc2ggYmFzZSBhcyB3ZWxsLgorCQkJcHVzaCBAdmlld3NfbmF2LCAkc25hcHNob3RfbGlua3M7CisJCX0KKwkJZ2l0X3ByaW50X3BhZ2VfbmF2KCd0cmVlJywnJywgJGhhc2hfYmFzZSwgdW5kZWYsIHVuZGVmLAorCQkgICAgICAgICAgICAgICAgICAgam9pbignIHwgJywgQHZpZXdzX25hdikpOworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdignY29tbWl0JywgZXNjX2h0bWwoJGNveyd0aXRsZSd9KSAuICRyZWYsICRoYXNoX2Jhc2UpOworCX0gZWxzZSB7CisJCXVuZGVmICRoYXNoX2Jhc2U7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9uYXZcIj5cbiI7CisJCXByaW50ICI8YnIvPjxici8+PC9kaXY+XG4iOworCQlwcmludCAiPGRpdiBjbGFzcz1cInRpdGxlXCI+Ii5lc2NfaHRtbCgkaGFzaCkuIjwvZGl2PlxuIjsKKwl9CisJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkkYmFzZWRpciA9ICRmaWxlX25hbWU7CisJCWlmICgkYmFzZWRpciBuZSAnJyAmJiBzdWJzdHIoJGJhc2VkaXIsIC0xKSBuZSAnLycpIHsKKwkJCSRiYXNlZGlyIC49ICcvJzsKKwkJfQorCQlnaXRfcHJpbnRfcGFnZV9wYXRoKCRmaWxlX25hbWUsICd0cmVlJywgJGhhc2hfYmFzZSk7CisJfQorCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9ib2R5XCI+XG4iOworCXByaW50ICI8dGFibGUgY2xhc3M9XCJ0cmVlXCI+XG4iOworCW15ICRhbHRlcm5hdGUgPSAxOworCSMgJy4uJyAodG9wIGRpcmVjdG9yeSkgbGluayBpZiBwb3NzaWJsZQorCWlmIChkZWZpbmVkICRoYXNoX2Jhc2UgJiYKKwkgICAgZGVmaW5lZCAkZmlsZV9uYW1lICYmICRmaWxlX25hbWUgPX4gbSFbXi9dKyQhKSB7CisJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJfQorCQkkYWx0ZXJuYXRlIF49IDE7CisKKwkJbXkgJHVwID0gJGZpbGVfbmFtZTsKKwkJJHVwID1+IHMhLz9bXi9dKyQhITsKKwkJdW5kZWYgJHVwIHVubGVzcyAkdXA7CisJCSMgYmFzZWQgb24gZ2l0X3ByaW50X3RyZWVfZW50cnkKKwkJcHJpbnQgJzx0ZCBjbGFzcz0ibW9kZSI+JyAuIG1vZGVfc3RyKCcwNDAwMDAnKSAuICI8L3RkPlxuIjsKKwkJcHJpbnQgJzx0ZCBjbGFzcz0ic2l6ZSI+Jm5ic3A7PC90ZD4nLiJcbiIgaWYgJHNob3dfc2l6ZXM7CisJCXByaW50ICc8dGQgY2xhc3M9Imxpc3QiPic7CisJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaF9iYXNlLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JHVwKX0sCisJCSAgICAgICAgICAgICAgIi4uIik7CisJCXByaW50ICI8L3RkPlxuIjsKKwkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj48L3RkPlxuIjsKKworCQlwcmludCAiPC90cj5cbiI7CisJfQorCWZvcmVhY2ggbXkgJGxpbmUgKEBlbnRyaWVzKSB7CisJCW15ICV0ID0gcGFyc2VfbHNfdHJlZV9saW5lKCRsaW5lLCAteiA9PiAxLCAtbCA9PiAkc2hvd19zaXplcyk7CisKKwkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQl9CisJCSRhbHRlcm5hdGUgXj0gMTsKKworCQlnaXRfcHJpbnRfdHJlZV9lbnRyeShcJXQsICRiYXNlZGlyLCAkaGFzaF9iYXNlLCAkaGF2ZV9ibGFtZSk7CisKKwkJcHJpbnQgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90YWJsZT5cbiIgLgorCSAgICAgICI8L2Rpdj4iOworCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgc2FuaXRpemVfZm9yX2ZpbGVuYW1lIHsKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworCisgICAgJG5hbWUgPX4gcyEvIS0hZzsKKyAgICAkbmFtZSA9fiBzL1teWzphbG51bTpdXy4tXS8vZzsKKworICAgIHJldHVybiAkbmFtZTsKK30KKworc3ViIHNuYXBzaG90X25hbWUgeworCW15ICgkcHJvamVjdCwgJGhhc2gpID0gQF87CisKKwkjIHBhdGgvdG8vcHJvamVjdC5naXQgIC0+IHByb2plY3QKKwkjIHBhdGgvdG8vcHJvamVjdC8uZ2l0IC0+IHByb2plY3QKKwlteSAkbmFtZSA9IHRvX3V0ZjgoJHByb2plY3QpOworCSRuYW1lID1+IHMsKFteL10pLypcLmdpdCQsJDEsOworCSRuYW1lID0gc2FuaXRpemVfZm9yX2ZpbGVuYW1lKGJhc2VuYW1lKCRuYW1lKSk7CisKKwlteSAkdmVyID0gJGhhc2g7CisJaWYgKCRoYXNoID1+IC9eWzAtOWEtZkEtRl0rJC8pIHsKKwkJIyBzaG9ydGVuIFNIQS0xIGhhc2gKKwkJbXkgJGZ1bGxfaGFzaCA9IGdpdF9nZXRfZnVsbF9oYXNoKCRwcm9qZWN0LCAkaGFzaCk7CisJCWlmICgkZnVsbF9oYXNoID1+IC9eJGhhc2gvICYmIGxlbmd0aCgkaGFzaCkgPiA3KSB7CisJCQkkdmVyID0gZ2l0X2dldF9zaG9ydF9oYXNoKCRwcm9qZWN0LCAkaGFzaCk7CisJCX0KKwl9IGVsc2lmICgkaGFzaCA9fiBtIV5yZWZzL3RhZ3MvKC4qKSQhKSB7CisJCSMgdGFncyBkb24ndCBuZWVkIHNob3J0ZW5lZCBTSEEtMSBoYXNoCisJCSR2ZXIgPSAkMTsKKwl9IGVsc2UgeworCQkjIGJyYW5jaGVzIGFuZCBvdGhlciBuZWVkIHNob3J0ZW5lZCBTSEEtMSBoYXNoCisJCW15ICRzdHJpcF9yZWZzID0gam9pbiAnfCcsIG1hcCB7IHF1b3RlbWV0YSB9IGdldF9icmFuY2hfcmVmcygpOworCQlpZiAoJGhhc2ggPX4gbSFecmVmcy8oJHN0cmlwX3JlZnN8cmVtb3RlcykvKC4qKSQhKSB7CisJCQlteSAkcmVmX2RpciA9IChkZWZpbmVkICQxKSA/ICQxIDogJyc7CisJCQkkdmVyID0gJDI7CisKKwkJCSRyZWZfZGlyID0gc2FuaXRpemVfZm9yX2ZpbGVuYW1lKCRyZWZfZGlyKTsKKwkJCSMgZm9yIHJlZnMgbmVpdGhlciBpbiBoZWFkcyBub3IgcmVtb3RlcyB3ZSB3YW50IHRvCisJCQkjIGFkZCBhIHJlZiBkaXIgdG8gYXJjaGl2ZSBuYW1lCisJCQlpZiAoJHJlZl9kaXIgbmUgJycgYW5kICRyZWZfZGlyIG5lICdoZWFkcycgYW5kICRyZWZfZGlyIG5lICdyZW1vdGVzJykgeworCQkJCSR2ZXIgPSAkcmVmX2RpciAuICctJyAuICR2ZXI7CisJCQl9CisJCX0KKwkJJHZlciAuPSAnLScgLiBnaXRfZ2V0X3Nob3J0X2hhc2goJHByb2plY3QsICRoYXNoKTsKKwl9CisJIyBzcGVjaWFsIGNhc2Ugb2Ygc2FuaXRpemF0aW9uIGZvciBmaWxlbmFtZSAtIHdlIGNoYW5nZQorCSMgc2xhc2hlcyB0byBkb3RzIGluc3RlYWQgb2YgZGFzaGVzCisJIyBpbiBjYXNlIG9mIGhpZXJhcmNoaWNhbCBicmFuY2ggbmFtZXMKKwkkdmVyID1+IHMhLyEuIWc7CisJJHZlciA9fiBzL1teWzphbG51bTpdXy4tXS8vZzsKKworCSMgbmFtZSA9IHByb2plY3QtdmVyc2lvbl9zdHJpbmcKKwkkbmFtZSA9ICIkbmFtZS0kdmVyIjsKKworCXJldHVybiB3YW50YXJyYXkgPyAoJG5hbWUsICRuYW1lKSA6ICRuYW1lOworfQorCitzdWIgZXhpdF9pZl91bm1vZGlmaWVkX3NpbmNlIHsKKwlteSAoJGxhdGVzdF9lcG9jaCkgPSBAXzsKKwlvdXIgJGNnaTsKKworCW15ICRpZl9tb2RpZmllZCA9ICRjZ2ktPmh0dHAoJ0lGX01PRElGSUVEX1NJTkNFJyk7CisJaWYgKGRlZmluZWQgJGlmX21vZGlmaWVkKSB7CisJCW15ICRzaW5jZTsKKwkJaWYgKGV2YWwgeyByZXF1aXJlIEhUVFA6OkRhdGU7IDE7IH0pIHsKKwkJCSRzaW5jZSA9IEhUVFA6OkRhdGU6OnN0cjJ0aW1lKCRpZl9tb2RpZmllZCk7CisJCX0gZWxzaWYgKGV2YWwgeyByZXF1aXJlIFRpbWU6OlBhcnNlRGF0ZTsgMTsgfSkgeworCQkJJHNpbmNlID0gVGltZTo6UGFyc2VEYXRlOjpwYXJzZWRhdGUoJGlmX21vZGlmaWVkLCBHTVQgPT4gMSk7CisJCX0KKwkJaWYgKGRlZmluZWQgJHNpbmNlICYmICRsYXRlc3RfZXBvY2ggPD0gJHNpbmNlKSB7CisJCQlteSAlbGF0ZXN0X2RhdGUgPSBwYXJzZV9kYXRlKCRsYXRlc3RfZXBvY2gpOworCQkJcHJpbnQgJGNnaS0+aGVhZGVyKAorCQkJCS1sYXN0X21vZGlmaWVkID0+ICRsYXRlc3RfZGF0ZXsncmZjMjgyMid9LAorCQkJCS1zdGF0dXMgPT4gJzMwNCBOb3QgTW9kaWZpZWQnKTsKKwkJCWdvdG8gRE9ORV9HSVRXRUI7CisJCX0KKwl9Cit9CisKK3N1YiBnaXRfc25hcHNob3QgeworCW15ICRmb3JtYXQgPSAkaW5wdXRfcGFyYW1zeydzbmFwc2hvdF9mb3JtYXQnfTsKKwlpZiAoIUBzbmFwc2hvdF9mbXRzKSB7CisJCWRpZV9lcnJvcig0MDMsICJTbmFwc2hvdHMgbm90IGFsbG93ZWQiKTsKKwl9CisJIyBkZWZhdWx0IHRvIGZpcnN0IHN1cHBvcnRlZCBzbmFwc2hvdCBmb3JtYXQKKwkkZm9ybWF0IHx8PSAkc25hcHNob3RfZm10c1swXTsKKwlpZiAoJGZvcm1hdCAhfiBtL15bYS16MC05XSskLykgeworCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBzbmFwc2hvdCBmb3JtYXQgcGFyYW1ldGVyIik7CisJfSBlbHNpZiAoIWV4aXN0cygka25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fSkpIHsKKwkJZGllX2Vycm9yKDQwMCwgIlVua25vd24gc25hcHNob3QgZm9ybWF0Iik7CisJfSBlbHNpZiAoJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZvcm1hdH17J2Rpc2FibGVkJ30pIHsKKwkJZGllX2Vycm9yKDQwMywgIlNuYXBzaG90IGZvcm1hdCBub3QgYWxsb3dlZCIpOworCX0gZWxzaWYgKCFncmVwKCRfIGVxICRmb3JtYXQsIEBzbmFwc2hvdF9mbXRzKSkgeworCQlkaWVfZXJyb3IoNDAzLCAiVW5zdXBwb3J0ZWQgc25hcHNob3QgZm9ybWF0Iik7CisJfQorCisJbXkgJHR5cGUgPSBnaXRfZ2V0X3R5cGUoIiRoYXNoXnt9Iik7CisJaWYgKCEkdHlwZSkgeworCQlkaWVfZXJyb3IoNDA0LCAnT2JqZWN0IGRvZXMgbm90IGV4aXN0Jyk7CisJfSAgZWxzaWYgKCR0eXBlIGVxICdibG9iJykgeworCQlkaWVfZXJyb3IoNDAwLCAnT2JqZWN0IGlzIG5vdCBhIHRyZWUtaXNoJyk7CisJfQorCisJbXkgKCRuYW1lLCAkcHJlZml4KSA9IHNuYXBzaG90X25hbWUoJHByb2plY3QsICRoYXNoKTsKKwlteSAkZmlsZW5hbWUgPSAiJG5hbWUka25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsnc3VmZml4J30iOworCisJbXkgJWNvID0gcGFyc2VfY29tbWl0KCRoYXNoKTsKKwlleGl0X2lmX3VubW9kaWZpZWRfc2luY2UoJGNveydjb21taXR0ZXJfZXBvY2gnfSkgaWYgJWNvOworCisJbXkgJGNtZCA9IHF1b3RlX2NvbW1hbmQoCisJCWdpdF9jbWQoKSwgJ2FyY2hpdmUnLAorCQkiLS1mb3JtYXQ9JGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZvcm1hdH17J2Zvcm1hdCd9IiwKKwkJIi0tcHJlZml4PSRwcmVmaXgvIiwgJGhhc2gpOworCWlmIChleGlzdHMgJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZvcm1hdH17J2NvbXByZXNzb3InfSkgeworCQkkY21kIC49ICcgfCAnIC4gcXVvdGVfY29tbWFuZChAeyRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eydjb21wcmVzc29yJ319KTsKKwl9CisKKwkkZmlsZW5hbWUgPX4gcy8oWyJcXF0pL1xcJDEvZzsKKwlteSAlbGF0ZXN0X2RhdGU7CisJaWYgKCVjbykgeworCQklbGF0ZXN0X2RhdGUgPSBwYXJzZV9kYXRlKCRjb3snY29tbWl0dGVyX2Vwb2NoJ30sICRjb3snY29tbWl0dGVyX3R6J30pOworCX0KKworCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJLXR5cGUgPT4gJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZvcm1hdH17J3R5cGUnfSwKKwkJLWNvbnRlbnRfZGlzcG9zaXRpb24gPT4gJ2lubGluZTsgZmlsZW5hbWU9IicgLiAkZmlsZW5hbWUgLiAnIicsCisJCSVjbyA/ICgtbGFzdF9tb2RpZmllZCA9PiAkbGF0ZXN0X2RhdGV7J3JmYzI4MjInfSkgOiAoKSwKKwkJLXN0YXR1cyA9PiAnMjAwIE9LJyk7CisKKwlvcGVuIG15ICRmZCwgIi18IiwgJGNtZAorCQlvciBkaWVfZXJyb3IoNTAwLCAiRXhlY3V0ZSBnaXQtYXJjaGl2ZSBmYWlsZWQiKTsKKwlsb2NhbCAqRkNHSTo6U3RyZWFtOjpQUklOVCA9ICRGQ0dJX1N0cmVhbV9QUklOVF9yYXc7CisJYmlubW9kZSBTVERPVVQsICc6cmF3JzsKKwlwcmludCA8JGZkPjsKKwliaW5tb2RlIFNURE9VVCwgJzp1dGY4JzsgIyBhcyBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBnaXR3ZWIuY2dpCisJY2xvc2UgJGZkOworfQorCitzdWIgZ2l0X2xvZ19nZW5lcmljIHsKKwlteSAoJGZtdF9uYW1lLCAkYm9keV9zdWJyLCAkYmFzZSwgJHBhcmVudCwgJGZpbGVfbmFtZSwgJGZpbGVfaGFzaCkgPSBAXzsKKworCW15ICRoZWFkID0gZ2l0X2dldF9oZWFkX2hhc2goJHByb2plY3QpOworCWlmICghZGVmaW5lZCAkYmFzZSkgeworCQkkYmFzZSA9ICRoZWFkOworCX0KKwlpZiAoIWRlZmluZWQgJHBhZ2UpIHsKKwkJJHBhZ2UgPSAwOworCX0KKwlteSAkcmVmcyA9IGdpdF9nZXRfcmVmZXJlbmNlcygpOworCisJbXkgJGNvbW1pdF9oYXNoID0gJGJhc2U7CisJaWYgKGRlZmluZWQgJHBhcmVudCkgeworCQkkY29tbWl0X2hhc2ggPSAiJHBhcmVudC4uJGJhc2UiOworCX0KKwlteSBAY29tbWl0bGlzdCA9CisJCXBhcnNlX2NvbW1pdHMoJGNvbW1pdF9oYXNoLCAxMDEsICgxMDAgKiAkcGFnZSksCisJCSAgICAgICAgICAgICAgZGVmaW5lZCAkZmlsZV9uYW1lID8gKCRmaWxlX25hbWUsICItLWZ1bGwtaGlzdG9yeSIpIDogKCkpOworCisJbXkgJGZ0eXBlOworCWlmICghZGVmaW5lZCAkZmlsZV9oYXNoICYmIGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkjIHNvbWUgY29tbWl0cyBjb3VsZCBoYXZlIGRlbGV0ZWQgZmlsZSBpbiBxdWVzdGlvbiwKKwkJIyBhbmQgbm90IGhhdmUgaXQgaW4gdHJlZSwgYnV0IG9uZSBvZiB0aGVtIGhhcyB0byBoYXZlIGl0CisJCWZvciAobXkgJGkgPSAwOyAkaSA8IEBjb21taXRsaXN0OyAkaSsrKSB7CisJCQkkZmlsZV9oYXNoID0gZ2l0X2dldF9oYXNoX2J5X3BhdGgoJGNvbW1pdGxpc3RbJGldeydpZCd9LCAkZmlsZV9uYW1lKTsKKwkJCWxhc3QgaWYgZGVmaW5lZCAkZmlsZV9oYXNoOworCQl9CisJfQorCWlmIChkZWZpbmVkICRmaWxlX2hhc2gpIHsKKwkJJGZ0eXBlID0gZ2l0X2dldF90eXBlKCRmaWxlX2hhc2gpOworCX0KKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lICYmICFkZWZpbmVkICRmdHlwZSkgeworCQlkaWVfZXJyb3IoNTAwLCAiVW5rbm93biB0eXBlIG9mIG9iamVjdCIpOworCX0KKwlteSAlY287CisJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQklY28gPSBwYXJzZV9jb21taXQoJGJhc2UpCisJCQlvciBkaWVfZXJyb3IoNDA0LCAiVW5rbm93biBjb21taXQgb2JqZWN0Iik7CisJfQorCisKKwlteSAkcGFnaW5nX25hdiA9IGZvcm1hdF9wYWdpbmdfbmF2KCRmbXRfbmFtZSwgJHBhZ2UsICQjY29tbWl0bGlzdCA+PSAxMDApOworCW15ICRuZXh0X2xpbmsgPSAnJzsKKwlpZiAoJCNjb21taXRsaXN0ID49IDEwMCkgeworCQkkbmV4dF9saW5rID0KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwgcGFnZT0+JHBhZ2UrMSksCisJCQkgICAgICAgICAtYWNjZXNza2V5ID0+ICJuIiwgLXRpdGxlID0+ICJBbHQtbiJ9LCAibmV4dCIpOworCX0KKwlteSAkcGF0Y2hfbWF4ID0gZ2l0d2ViX2dldF9mZWF0dXJlKCdwYXRjaGVzJyk7CisJaWYgKCRwYXRjaF9tYXggJiYgIWRlZmluZWQgJGZpbGVfbmFtZSkgeworCQlpZiAoJHBhdGNoX21heCA8IDAgfHwgQGNvbW1pdGxpc3QgPD0gJHBhdGNoX21heCkgeworCQkJJHBhZ2luZ19uYXYgLj0gIiAmc2RvdDsgIiAuCisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJwYXRjaGVzIiwgLXJlcGxheT0+MSl9LAorCQkJCQkicGF0Y2hlcyIpOworCQl9CisJfQorCisJZ2l0X2hlYWRlcl9odG1sKCk7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCRmbXRfbmFtZSwnJywgJGhhc2gsJGhhc2gsJGhhc2gsICRwYWdpbmdfbmF2KTsKKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pLCAkYmFzZSk7CisJfSBlbHNlIHsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3N1bW1hcnknLCAkcHJvamVjdCkKKwl9CisJZ2l0X3ByaW50X3BhZ2VfcGF0aCgkZmlsZV9uYW1lLCAkZnR5cGUsICRoYXNoX2Jhc2UpCisJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpOworCisJJGJvZHlfc3Vici0+KFxAY29tbWl0bGlzdCwgMCwgOTksICRyZWZzLCAkbmV4dF9saW5rLAorCSAgICAgICAgICAgICAkZmlsZV9uYW1lLCAkZmlsZV9oYXNoLCAkZnR5cGUpOworCisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfbG9nIHsKKwlnaXRfbG9nX2dlbmVyaWMoJ2xvZycsIFwmZ2l0X2xvZ19ib2R5LAorCSAgICAgICAgICAgICAgICAkaGFzaCwgJGhhc2hfcGFyZW50KTsKK30KKworc3ViIGdpdF9jb21taXQgeworCSRoYXNoIHx8PSAkaGFzaF9iYXNlIHx8ICJIRUFEIjsKKwlteSAlY28gPSBwYXJzZV9jb21taXQoJGhhc2gpCisJICAgIG9yIGRpZV9lcnJvcig0MDQsICJVbmtub3duIGNvbW1pdCBvYmplY3QiKTsKKworCW15ICRwYXJlbnQgID0gJGNveydwYXJlbnQnfTsKKwlteSAkcGFyZW50cyA9ICRjb3sncGFyZW50cyd9OyAjIGxpc3RyZWYKKworCSMgd2UgbmVlZCB0byBwcmVwYXJlICRmb3JtYXRzX25hdiBiZWZvcmUgYW55IHBhcmFtZXRlciBtdW5naW5nCisJbXkgJGZvcm1hdHNfbmF2OworCWlmICghZGVmaW5lZCAkcGFyZW50KSB7CisJCSMgLS1yb290IGNvbW1pdGRpZmYKKwkJJGZvcm1hdHNfbmF2IC49ICcoaW5pdGlhbCknOworCX0gZWxzaWYgKEAkcGFyZW50cyA9PSAxKSB7CisJCSMgc2luZ2xlIHBhcmVudCBjb21taXQKKwkJJGZvcm1hdHNfbmF2IC49CisJCQknKHBhcmVudDogJyAuCisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsCisJCQkgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRwYXJlbnQpfSwKKwkJCSAgICAgICAgZXNjX2h0bWwoc3Vic3RyKCRwYXJlbnQsIDAsIDcpKSkgLgorCQkJJyknOworCX0gZWxzZSB7CisJCSMgbWVyZ2UgY29tbWl0CisJCSRmb3JtYXRzX25hdiAuPQorCQkJJyhtZXJnZTogJyAuCisJCQlqb2luKCcgJywgbWFwIHsKKwkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kXyl9LAorCQkJCSAgICAgICAgZXNjX2h0bWwoc3Vic3RyKCRfLCAwLCA3KSkpOworCQkJfSBAJHBhcmVudHMgKSAuCisJCQknKSc7CisJfQorCWlmIChnaXR3ZWJfY2hlY2tfZmVhdHVyZSgncGF0Y2hlcycpICYmIEAkcGFyZW50cyA8PSAxKSB7CisJCSRmb3JtYXRzX25hdiAuPSAiIHwgIiAuCisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InBhdGNoIiwgLXJlcGxheT0+MSl9LAorCQkJCSJwYXRjaCIpOworCX0KKworCWlmICghZGVmaW5lZCAkcGFyZW50KSB7CisJCSRwYXJlbnQgPSAiLS1yb290IjsKKwl9CisJbXkgQGRpZmZ0cmVlOworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJkaWZmLXRyZWUiLCAnLXInLCAiLS1uby1jb21taXQtaWQiLAorCQlAZGlmZl9vcHRzLAorCQkoQCRwYXJlbnRzIDw9IDEgPyAkcGFyZW50IDogJy1jJyksCisJCSRoYXNoLCAiLS0iCisJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1kaWZmLXRyZWUgZmFpbGVkIik7CisJQGRpZmZ0cmVlID0gbWFwIHsgY2hvbXA7ICRfIH0gPCRmZD47CisJY2xvc2UgJGZkIG9yIGRpZV9lcnJvcig0MDQsICJSZWFkaW5nIGdpdC1kaWZmLXRyZWUgZmFpbGVkIik7CisKKwkjIG5vbi10ZXh0dWFsIGhhc2ggaWQncyBjYW4gYmUgY2FjaGVkCisJbXkgJGV4cGlyZXM7CisJaWYgKCRoYXNoID1+IG0vXiRvaWRfcmVnZXgkLykgeworCQkkZXhwaXJlcyA9ICIrMWQiOworCX0KKwlteSAkcmVmcyA9IGdpdF9nZXRfcmVmZXJlbmNlcygpOworCW15ICRyZWYgPSBmb3JtYXRfcmVmX21hcmtlcigkcmVmcywgJGNveydpZCd9KTsKKworCWdpdF9oZWFkZXJfaHRtbCh1bmRlZiwgJGV4cGlyZXMpOworCWdpdF9wcmludF9wYWdlX25hdignY29tbWl0JywgJycsCisJICAgICAgICAgICAgICAgICAgICRoYXNoLCAkY297J3RyZWUnfSwgJGhhc2gsCisJICAgICAgICAgICAgICAgICAgICRmb3JtYXRzX25hdik7CisKKwlpZiAoZGVmaW5lZCAkY297J3BhcmVudCd9KSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXRkaWZmJywgZXNjX2h0bWwoJGNveyd0aXRsZSd9KSAuICRyZWYsICRoYXNoKTsKKwl9IGVsc2UgeworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdigndHJlZScsIGVzY19odG1sKCRjb3sndGl0bGUnfSkgLiAkcmVmLCAkY297J3RyZWUnfSwgJGhhc2gpOworCX0KKwlwcmludCAiPGRpdiBjbGFzcz1cInRpdGxlX3RleHRcIj5cbiIgLgorCSAgICAgICI8dGFibGUgY2xhc3M9XCJvYmplY3RfaGVhZGVyXCI+XG4iOworCWdpdF9wcmludF9hdXRob3JzaGlwX3Jvd3MoXCVjbyk7CisJcHJpbnQgIjx0cj48dGQ+Y29tbWl0PC90ZD48dGQgY2xhc3M9XCJzaGExXCI+JGNveydpZCd9PC90ZD48L3RyPlxuIjsKKwlwcmludCAiPHRyPiIgLgorCSAgICAgICI8dGQ+dHJlZTwvdGQ+IiAuCisJICAgICAgIjx0ZCBjbGFzcz1cInNoYTFcIj4iIC4KKwkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoPT4kY297J3RyZWUnfSwgaGFzaF9iYXNlPT4kaGFzaCksCisJICAgICAgICAgICAgICAgY2xhc3MgPT4gImxpc3QifSwgJGNveyd0cmVlJ30pIC4KKwkgICAgICAiPC90ZD4iIC4KKwkgICAgICAiPHRkIGNsYXNzPVwibGlua1wiPiIgLgorCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRjb3sndHJlZSd9LCBoYXNoX2Jhc2U9PiRoYXNoKX0sCisJICAgICAgICAgICAgICAidHJlZSIpOworCW15ICRzbmFwc2hvdF9saW5rcyA9IGZvcm1hdF9zbmFwc2hvdF9saW5rcygkaGFzaCk7CisJaWYgKGRlZmluZWQgJHNuYXBzaG90X2xpbmtzKSB7CisJCXByaW50ICIgfCAiIC4gJHNuYXBzaG90X2xpbmtzOworCX0KKwlwcmludCAiPC90ZD4iIC4KKwkgICAgICAiPC90cj5cbiI7CisKKwlmb3JlYWNoIG15ICRwYXIgKEAkcGFyZW50cykgeworCQlwcmludCAiPHRyPiIgLgorCQkgICAgICAiPHRkPnBhcmVudDwvdGQ+IiAuCisJCSAgICAgICI8dGQgY2xhc3M9XCJzaGExXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JHBhciksCisJCSAgICAgICAgICAgICAgIGNsYXNzID0+ICJsaXN0In0sICRwYXIpIC4KKwkJICAgICAgIjwvdGQ+IiAuCisJCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JHBhcil9LCAiY29tbWl0IikgLgorCQkgICAgICAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0ZGlmZiIsIGhhc2g9PiRoYXNoLCBoYXNoX3BhcmVudD0+JHBhcil9LCAiZGlmZiIpIC4KKwkJICAgICAgIjwvdGQ+IiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisJcHJpbnQgIjwvdGFibGU+Ii4KKwkgICAgICAiPC9kaXY+XG4iOworCisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX2JvZHlcIj5cbiI7CisJZ2l0X3ByaW50X2xvZygkY297J2NvbW1lbnQnfSk7CisJcHJpbnQgIjwvZGl2PlxuIjsKKworCWdpdF9kaWZmdHJlZV9ib2R5KFxAZGlmZnRyZWUsICRoYXNoLCBAJHBhcmVudHMpOworCisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfb2JqZWN0IHsKKwkjIG9iamVjdCBpcyBkZWZpbmVkIGJ5OgorCSMgLSBoYXNoIG9yIGhhc2hfYmFzZSBhbG9uZQorCSMgLSBoYXNoX2Jhc2UgYW5kIGZpbGVfbmFtZQorCW15ICR0eXBlOworCisJIyAtIGhhc2ggb3IgaGFzaF9iYXNlIGFsb25lCisJaWYgKCRoYXNoIHx8ICgkaGFzaF9iYXNlICYmICFkZWZpbmVkICRmaWxlX25hbWUpKSB7CisJCW15ICRvYmplY3RfaWQgPSAkaGFzaCB8fCAkaGFzaF9iYXNlOworCisJCW9wZW4gbXkgJGZkLCAiLXwiLCBxdW90ZV9jb21tYW5kKAorCQkJZ2l0X2NtZCgpLCAnY2F0LWZpbGUnLCAnLXQnLCAkb2JqZWN0X2lkKSAuICcgMj4gL2Rldi9udWxsJworCQkJb3IgZGllX2Vycm9yKDQwNCwgIk9iamVjdCBkb2VzIG5vdCBleGlzdCIpOworCQkkdHlwZSA9IDwkZmQ+OworCQlkZWZpbmVkICR0eXBlICYmIGNob21wICR0eXBlOworCQljbG9zZSAkZmQKKwkJCW9yIGRpZV9lcnJvcig0MDQsICJPYmplY3QgZG9lcyBub3QgZXhpc3QiKTsKKworCSMgLSBoYXNoX2Jhc2UgYW5kIGZpbGVfbmFtZQorCX0gZWxzaWYgKCRoYXNoX2Jhc2UgJiYgZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCSRmaWxlX25hbWUgPX4gcywvKyQsLDsKKworCQlzeXN0ZW0oZ2l0X2NtZCgpLCAiY2F0LWZpbGUiLCAnLWUnLCAkaGFzaF9iYXNlKSA9PSAwCisJCQlvciBkaWVfZXJyb3IoNDA0LCAiQmFzZSBvYmplY3QgZG9lcyBub3QgZXhpc3QiKTsKKworCQkjIGhlcmUgZXJyb3JzIHNob3VsZCBub3QgaGFwcGVuCisJCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJscy10cmVlIiwgJGhhc2hfYmFzZSwgIi0tIiwgJGZpbGVfbmFtZQorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWxzLXRyZWUgZmFpbGVkIik7CisJCW15ICRsaW5lID0gPCRmZD47CisJCWNsb3NlICRmZDsKKworCQkjJzEwMDY0NCBibG9iIDBmYTNmM2E2NmZiNmExMzdmNmVjMmMxOTM1MWVkNGQ4MDcwNzBmZmEJcGFuaWMuYycKKwkJdW5sZXNzICgkbGluZSAmJiAkbGluZSA9fiBtL14oWzAtOV0rKSAoLispICgkb2lkX3JlZ2V4KVx0LykgeworCQkJZGllX2Vycm9yKDQwNCwgIkZpbGUgb3IgZGlyZWN0b3J5IGZvciBnaXZlbiBiYXNlIGRvZXMgbm90IGV4aXN0Iik7CisJCX0KKwkJJHR5cGUgPSAkMjsKKwkJJGhhc2ggPSAkMzsKKwl9IGVsc2UgeworCQlkaWVfZXJyb3IoNDAwLCAiTm90IGVub3VnaCBpbmZvcm1hdGlvbiB0byBmaW5kIG9iamVjdCIpOworCX0KKworCXByaW50ICRjZ2ktPnJlZGlyZWN0KC11cmkgPT4gaHJlZihhY3Rpb249PiR0eXBlLCAtZnVsbD0+MSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGhhc2gsIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKSwKKwkgICAgICAgICAgICAgICAgICAgICAtc3RhdHVzID0+ICczMDIgRm91bmQnKTsKK30KKworc3ViIGdpdF9ibG9iZGlmZiB7CisJbXkgJGZvcm1hdCA9IHNoaWZ0IHx8ICdodG1sJzsKKwlteSAkZGlmZl9zdHlsZSA9ICRpbnB1dF9wYXJhbXN7J2RpZmZfc3R5bGUnfSB8fCAnaW5saW5lJzsKKworCW15ICRmZDsKKwlteSBAZGlmZnRyZWU7CisJbXkgJWRpZmZpbmZvOworCW15ICRleHBpcmVzOworCisJIyBwcmVwYXJpbmcgJGZkIGFuZCAlZGlmZmluZm8gZm9yIGdpdF9wYXRjaHNldF9ib2R5CisJIyBuZXcgc3R5bGUgVVJJCisJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSAmJiBkZWZpbmVkICRoYXNoX3BhcmVudF9iYXNlKSB7CisJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJCSMgcmVhZCByYXcgb3V0cHV0CisJCQlvcGVuICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiZGlmZi10cmVlIiwgJy1yJywgQGRpZmZfb3B0cywKKwkJCQkkaGFzaF9wYXJlbnRfYmFzZSwgJGhhc2hfYmFzZSwKKwkJCQkiLS0iLCAoZGVmaW5lZCAkZmlsZV9wYXJlbnQgPyAkZmlsZV9wYXJlbnQgOiAoKSksICRmaWxlX25hbWUKKwkJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtZGlmZi10cmVlIGZhaWxlZCIpOworCQkJQGRpZmZ0cmVlID0gbWFwIHsgY2hvbXA7ICRfIH0gPCRmZD47CisJCQljbG9zZSAkZmQKKwkJCQlvciBkaWVfZXJyb3IoNDA0LCAiUmVhZGluZyBnaXQtZGlmZi10cmVlIGZhaWxlZCIpOworCQkJQGRpZmZ0cmVlCisJCQkJb3IgZGllX2Vycm9yKDQwNCwgIkJsb2IgZGlmZiBub3QgZm91bmQiKTsKKworCQl9IGVsc2lmIChkZWZpbmVkICRoYXNoICYmCisJCSAgICAgICAgICRoYXNoID1+ICRvaWRfcmVnZXgpIHsKKwkJCSMgdHJ5IHRvIGZpbmQgZmlsZW5hbWUgZnJvbSAkaGFzaAorCisJCQkjIHJlYWQgZmlsdGVyZWQgcmF3IG91dHB1dAorCQkJb3BlbiAkZmQsICItfCIsIGdpdF9jbWQoKSwgImRpZmYtdHJlZSIsICctcicsIEBkaWZmX29wdHMsCisJCQkJJGhhc2hfcGFyZW50X2Jhc2UsICRoYXNoX2Jhc2UsICItLSIKKwkJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtZGlmZi10cmVlIGZhaWxlZCIpOworCQkJQGRpZmZ0cmVlID0KKwkJCQkjICc6MTAwNjQ0IDEwMDY0NCAwM2IyMTgyNi4uLiAzYjkzZDVlNy4uLiBNCWxzLWZpbGVzLmMnCisJCQkJIyAkaGFzaCA9PSB0b19pZAorCQkJCWdyZXAgeyAvXjpbMC03XXs2fSBbMC03XXs2fSAkb2lkX3JlZ2V4ICRoYXNoLyB9CisJCQkJbWFwIHsgY2hvbXA7ICRfIH0gPCRmZD47CisJCQljbG9zZSAkZmQKKwkJCQlvciBkaWVfZXJyb3IoNDA0LCAiUmVhZGluZyBnaXQtZGlmZi10cmVlIGZhaWxlZCIpOworCQkJQGRpZmZ0cmVlCisJCQkJb3IgZGllX2Vycm9yKDQwNCwgIkJsb2IgZGlmZiBub3QgZm91bmQiKTsKKworCQl9IGVsc2UgeworCQkJZGllX2Vycm9yKDQwMCwgIk1pc3Npbmcgb25lIG9mIHRoZSBibG9iIGRpZmYgcGFyYW1ldGVycyIpOworCQl9CisKKwkJaWYgKEBkaWZmdHJlZSA+IDEpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJBbWJpZ3VvdXMgYmxvYiBkaWZmIHNwZWNpZmljYXRpb24iKTsKKwkJfQorCisJCSVkaWZmaW5mbyA9IHBhcnNlX2RpZmZ0cmVlX3Jhd19saW5lKCRkaWZmdHJlZVswXSk7CisJCSRmaWxlX3BhcmVudCB8fD0gJGRpZmZpbmZveydmcm9tX2ZpbGUnfSB8fCAkZmlsZV9uYW1lOworCQkkZmlsZV9uYW1lICAgfHw9ICRkaWZmaW5mb3sndG9fZmlsZSd9OworCisJCSRoYXNoX3BhcmVudCB8fD0gJGRpZmZpbmZveydmcm9tX2lkJ307CisJCSRoYXNoICAgICAgICB8fD0gJGRpZmZpbmZveyd0b19pZCd9OworCisJCSMgbm9uLXRleHR1YWwgaGFzaCBpZCdzIGNhbiBiZSBjYWNoZWQKKwkJaWYgKCRoYXNoX2Jhc2UgPX4gbS9eJG9pZF9yZWdleCQvICYmCisJCSAgICAkaGFzaF9wYXJlbnRfYmFzZSA9fiBtL14kb2lkX3JlZ2V4JC8pIHsKKwkJCSRleHBpcmVzID0gJysxZCc7CisJCX0KKworCQkjIG9wZW4gcGF0Y2ggb3V0cHV0CisJCW9wZW4gJGZkLCAiLXwiLCBnaXRfY21kKCksICJkaWZmLXRyZWUiLCAnLXInLCBAZGlmZl9vcHRzLAorCQkJJy1wJywgKCRmb3JtYXQgZXEgJ2h0bWwnID8gIi0tZnVsbC1pbmRleCIgOiAoKSksCisJCQkkaGFzaF9wYXJlbnRfYmFzZSwgJGhhc2hfYmFzZSwKKwkJCSItLSIsIChkZWZpbmVkICRmaWxlX3BhcmVudCA/ICRmaWxlX3BhcmVudCA6ICgpKSwgJGZpbGVfbmFtZQorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWRpZmYtdHJlZSBmYWlsZWQiKTsKKwl9CisKKwkjIG9sZC9sZWdhY3kgc3R5bGUgVVJJIC0tIG5vdCBnZW5lcmF0ZWQgYW55bW9yZSBzaW5jZSAxLjQuMy4KKwlpZiAoISVkaWZmaW5mbykgeworCQlkaWVfZXJyb3IoJzQwNCBOb3QgRm91bmQnLCAiTWlzc2luZyBvbmUgb2YgdGhlIGJsb2IgZGlmZiBwYXJhbWV0ZXJzIikKKwl9CisKKwkjIGhlYWRlcgorCWlmICgkZm9ybWF0IGVxICdodG1sJykgeworCQlteSAkZm9ybWF0c19uYXYgPQorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iZGlmZl9wbGFpbiIsIC1yZXBsYXk9PjEpfSwKKwkJCSAgICAgICAgInJhdyIpOworCQkkZm9ybWF0c19uYXYgLj0gZGlmZl9zdHlsZV9uYXYoJGRpZmZfc3R5bGUpOworCQlnaXRfaGVhZGVyX2h0bWwodW5kZWYsICRleHBpcmVzKTsKKwkJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSAmJiAobXkgJWNvID0gcGFyc2VfY29tbWl0KCRoYXNoX2Jhc2UpKSkgeworCQkJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCcnLCAkaGFzaF9iYXNlLCRjb3sndHJlZSd9LCRoYXNoX2Jhc2UsICRmb3JtYXRzX25hdik7CisJCQlnaXRfcHJpbnRfaGVhZGVyX2RpdignY29tbWl0JywgZXNjX2h0bWwoJGNveyd0aXRsZSd9KSwgJGhhc2hfYmFzZSk7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfbmF2XCI+PGJyLz4kZm9ybWF0c19uYXY8YnIvPjwvZGl2PlxuIjsKKwkJCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVcIj4iLmVzY19odG1sKCIkaGFzaCB2cyAkaGFzaF9wYXJlbnQiKS4iPC9kaXY+XG4iOworCQl9CisJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJCWdpdF9wcmludF9wYWdlX3BhdGgoJGZpbGVfbmFtZSwgImJsb2IiLCAkaGFzaF9iYXNlKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9wYXRoXCI+PC9kaXY+XG4iOworCQl9CisKKwl9IGVsc2lmICgkZm9ybWF0IGVxICdwbGFpbicpIHsKKwkJcHJpbnQgJGNnaS0+aGVhZGVyKAorCQkJLXR5cGUgPT4gJ3RleHQvcGxhaW4nLAorCQkJLWNoYXJzZXQgPT4gJ3V0Zi04JywKKwkJCS1leHBpcmVzID0+ICRleHBpcmVzLAorCQkJLWNvbnRlbnRfZGlzcG9zaXRpb24gPT4gJ2lubGluZTsgZmlsZW5hbWU9IicgLiAiJGZpbGVfbmFtZSIgLiAnLnBhdGNoIicpOworCisJCXByaW50ICJYLUdpdC1Vcmw6ICIgLiAkY2dpLT5zZWxmX3VybCgpIC4gIlxuXG4iOworCisJfSBlbHNlIHsKKwkJZGllX2Vycm9yKDQwMCwgIlVua25vd24gYmxvYmRpZmYgZm9ybWF0Iik7CisJfQorCisJIyBwYXRjaAorCWlmICgkZm9ybWF0IGVxICdodG1sJykgeworCQlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfYm9keVwiPlxuIjsKKworCQlnaXRfcGF0Y2hzZXRfYm9keSgkZmQsICRkaWZmX3N0eWxlLAorCQkgICAgICAgICAgICAgICAgICBbIFwlZGlmZmluZm8gXSwgJGhhc2hfYmFzZSwgJGhhc2hfcGFyZW50X2Jhc2UpOworCQljbG9zZSAkZmQ7CisKKwkJcHJpbnQgIjwvZGl2PlxuIjsgIyBjbGFzcz0icGFnZV9ib2R5IgorCQlnaXRfZm9vdGVyX2h0bWwoKTsKKworCX0gZWxzZSB7CisJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCQkkbGluZSA9fiBzIWEvKCRoYXNofCRoYXNoX3BhcmVudCkhJ2EvJy5lc2NfcGF0aCgkZGlmZmluZm97J2Zyb21fZmlsZSd9KSFlZzsKKwkJCSRsaW5lID1+IHMhYi8oJGhhc2h8JGhhc2hfcGFyZW50KSEnYi8nLmVzY19wYXRoKCRkaWZmaW5mb3sndG9fZmlsZSd9KSFlZzsKKworCQkJcHJpbnQgJGxpbmU7CisKKwkJCWxhc3QgaWYgJGxpbmUgPX4gbSFeXCtcK1wrITsKKwkJfQorCQlsb2NhbCAkLyA9IHVuZGVmOworCQlwcmludCA8JGZkPjsKKwkJY2xvc2UgJGZkOworCX0KK30KKworc3ViIGdpdF9ibG9iZGlmZl9wbGFpbiB7CisJZ2l0X2Jsb2JkaWZmKCdwbGFpbicpOworfQorCisjIGFzc3VtZXMgdGhhdCBpdCBpcyBhZGRlZCBhcyBsYXRlciBwYXJ0IG9mIGFscmVhZHkgZXhpc3RpbmcgbmF2aWdhdGlvbiwKKyMgc28gaXQgcmV0dXJucyAifCBmb28gfCBiYXIiIHJhdGhlciB0aGFuIGp1c3QgImZvbyB8IGJhciIKK3N1YiBkaWZmX3N0eWxlX25hdiB7CisJbXkgKCRkaWZmX3N0eWxlLCAkaXNfY29tYmluZWQpID0gQF87CisJJGRpZmZfc3R5bGUgfHw9ICdpbmxpbmUnOworCisJcmV0dXJuICIiIGlmICgkaXNfY29tYmluZWQpOworCisJbXkgQHN0eWxlcyA9IChpbmxpbmUgPT4gJ2lubGluZScsICdzaWRlYnlzaWRlJyA9PiAnc2lkZSBieSBzaWRlJyk7CisJbXkgJXN0eWxlcyA9IEBzdHlsZXM7CisJQHN0eWxlcyA9CisJCUBzdHlsZXNbIG1hcCB7ICRfICogMiB9IDAuLiQjc3R5bGVzLzIgXTsKKworCXJldHVybiBqb2luICcnLAorCQltYXAgeyAiIHwgIi4kXyB9CisJCW1hcCB7CisJCQkkXyBlcSAkZGlmZl9zdHlsZSA/ICRzdHlsZXN7JF99IDoKKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwgZGlmZl9zdHlsZSA9PiAkXyl9LCAkc3R5bGVzeyRffSkKKwkJfSBAc3R5bGVzOworfQorCitzdWIgZ2l0X2NvbW1pdGRpZmYgeworCW15ICVwYXJhbXMgPSBAXzsKKwlteSAkZm9ybWF0ID0gJHBhcmFtc3stZm9ybWF0fSB8fCAnaHRtbCc7CisJbXkgJGRpZmZfc3R5bGUgPSAkaW5wdXRfcGFyYW1zeydkaWZmX3N0eWxlJ30gfHwgJ2lubGluZSc7CisKKwlteSAoJHBhdGNoX21heCkgPSBnaXR3ZWJfZ2V0X2ZlYXR1cmUoJ3BhdGNoZXMnKTsKKwlpZiAoJGZvcm1hdCBlcSAncGF0Y2gnKSB7CisJCWRpZV9lcnJvcig0MDMsICJQYXRjaCB2aWV3IG5vdCBhbGxvd2VkIikgdW5sZXNzICRwYXRjaF9tYXg7CisJfQorCisJJGhhc2ggfHw9ICRoYXNoX2Jhc2UgfHwgIkhFQUQiOworCW15ICVjbyA9IHBhcnNlX2NvbW1pdCgkaGFzaCkKKwkgICAgb3IgZGllX2Vycm9yKDQwNCwgIlVua25vd24gY29tbWl0IG9iamVjdCIpOworCisJIyBjaG9vc2UgZm9ybWF0IGZvciBjb21taXRkaWZmIGZvciBtZXJnZQorCWlmICghIGRlZmluZWQgJGhhc2hfcGFyZW50ICYmIEB7JGNveydwYXJlbnRzJ319ID4gMSkgeworCQkkaGFzaF9wYXJlbnQgPSAnLS1jYyc7CisJfQorCSMgd2UgbmVlZCB0byBwcmVwYXJlICRmb3JtYXRzX25hdiBiZWZvcmUgYWxtb3N0IGFueSBwYXJhbWV0ZXIgbXVuZ2luZworCW15ICRmb3JtYXRzX25hdjsKKwlpZiAoJGZvcm1hdCBlcSAnaHRtbCcpIHsKKwkJJGZvcm1hdHNfbmF2ID0KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0ZGlmZl9wbGFpbiIsIC1yZXBsYXk9PjEpfSwKKwkJCSAgICAgICAgInJhdyIpOworCQlpZiAoJHBhdGNoX21heCAmJiBAeyRjb3sncGFyZW50cyd9fSA8PSAxKSB7CisJCQkkZm9ybWF0c19uYXYgLj0gIiB8ICIgLgorCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4icGF0Y2giLCAtcmVwbGF5PT4xKX0sCisJCQkJCSJwYXRjaCIpOworCQl9CisJCSRmb3JtYXRzX25hdiAuPSBkaWZmX3N0eWxlX25hdigkZGlmZl9zdHlsZSwgQHskY297J3BhcmVudHMnfX0gPiAxKTsKKworCQlpZiAoZGVmaW5lZCAkaGFzaF9wYXJlbnQgJiYKKwkJICAgICRoYXNoX3BhcmVudCBuZSAnLWMnICYmICRoYXNoX3BhcmVudCBuZSAnLS1jYycpIHsKKwkJCSMgY29tbWl0ZGlmZiB3aXRoIHR3byBjb21taXRzIGdpdmVuCisJCQlteSAkaGFzaF9wYXJlbnRfc2hvcnQgPSAkaGFzaF9wYXJlbnQ7CisJCQlpZiAoJGhhc2hfcGFyZW50ID1+IG0vXiRvaWRfcmVnZXgkLykgeworCQkJCSRoYXNoX3BhcmVudF9zaG9ydCA9IHN1YnN0cigkaGFzaF9wYXJlbnQsIDAsIDcpOworCQkJfQorCQkJJGZvcm1hdHNfbmF2IC49CisJCQkJJyAoZnJvbSc7CisJCQlmb3IgKG15ICRpID0gMDsgJGkgPCBAeyRjb3sncGFyZW50cyd9fTsgJGkrKykgeworCQkJCWlmICgkY297J3BhcmVudHMnfVskaV0gZXEgJGhhc2hfcGFyZW50KSB7CisJCQkJCSRmb3JtYXRzX25hdiAuPSAnIHBhcmVudCAnIC4gKCRpKzEpOworCQkJCQlsYXN0OworCQkJCX0KKwkJCX0KKwkJCSRmb3JtYXRzX25hdiAuPSAnOiAnIC4KKwkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kaGFzaF9wYXJlbnQsIGhhc2hfYmFzZT0+dW5kZWYpfSwKKwkJCQkgICAgICAgIGVzY19odG1sKCRoYXNoX3BhcmVudF9zaG9ydCkpIC4KKwkJCQknKSc7CisJCX0gZWxzaWYgKCEkY297J3BhcmVudCd9KSB7CisJCQkjIC0tcm9vdCBjb21taXRkaWZmCisJCQkkZm9ybWF0c19uYXYgLj0gJyAoaW5pdGlhbCknOworCQl9IGVsc2lmIChzY2FsYXIgQHskY297J3BhcmVudHMnfX0gPT0gMSkgeworCQkJIyBzaW5nbGUgcGFyZW50IGNvbW1pdAorCQkJJGZvcm1hdHNfbmF2IC49CisJCQkJJyAocGFyZW50OiAnIC4KKwkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kY297J3BhcmVudCd9LCBoYXNoX2Jhc2U9PnVuZGVmKX0sCisJCQkJICAgICAgICBlc2NfaHRtbChzdWJzdHIoJGNveydwYXJlbnQnfSwgMCwgNykpKSAuCisJCQkJJyknOworCQl9IGVsc2UgeworCQkJIyBtZXJnZSBjb21taXQKKwkJCWlmICgkaGFzaF9wYXJlbnQgZXEgJy0tY2MnKSB7CisJCQkJJGZvcm1hdHNfbmF2IC49ICcgfCAnIC4KKwkJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRoYXNoLCBoYXNoX3BhcmVudD0+Jy1jJyl9LAorCQkJCQkgICAgICAgICdjb21iaW5lZCcpOworCQkJfSBlbHNlIHsgIyAkaGFzaF9wYXJlbnQgZXEgJy1jJworCQkJCSRmb3JtYXRzX25hdiAuPSAnIHwgJyAuCisJCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kaGFzaCwgaGFzaF9wYXJlbnQ9PictLWNjJyl9LAorCQkJCQkgICAgICAgICdjb21wYWN0Jyk7CisJCQl9CisJCQkkZm9ybWF0c19uYXYgLj0KKwkJCQknIChtZXJnZTogJyAuCisJCQkJam9pbignICcsIG1hcCB7CisJCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kXywgaGFzaF9iYXNlPT51bmRlZil9LAorCQkJCQkgICAgICAgIGVzY19odG1sKHN1YnN0cigkXywgMCwgNykpKTsKKwkJCQl9IEB7JGNveydwYXJlbnRzJ319ICkgLgorCQkJCScpJzsKKwkJfQorCX0KKworCW15ICRoYXNoX3BhcmVudF9wYXJhbSA9ICRoYXNoX3BhcmVudDsKKwlpZiAoIWRlZmluZWQgJGhhc2hfcGFyZW50X3BhcmFtKSB7CisJCSMgLS1jYyBmb3IgbXVsdGlwbGUgcGFyZW50cywgLS1yb290IGZvciBwYXJlbnRsZXNzCisJCSRoYXNoX3BhcmVudF9wYXJhbSA9CisJCQlAeyRjb3sncGFyZW50cyd9fSA+IDEgPyAnLS1jYycgOiAkY297J3BhcmVudCd9IHx8ICctLXJvb3QnOworCX0KKworCSMgcmVhZCBjb21taXRkaWZmCisJbXkgJGZkOworCW15IEBkaWZmdHJlZTsKKwlpZiAoJGZvcm1hdCBlcSAnaHRtbCcpIHsKKwkJb3BlbiAkZmQsICItfCIsIGdpdF9jbWQoKSwgImRpZmYtdHJlZSIsICctcicsIEBkaWZmX29wdHMsCisJCQkiLS1uby1jb21taXQtaWQiLCAiLS1wYXRjaC13aXRoLXJhdyIsICItLWZ1bGwtaW5kZXgiLAorCQkJJGhhc2hfcGFyZW50X3BhcmFtLCAkaGFzaCwgIi0tIgorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWRpZmYtdHJlZSBmYWlsZWQiKTsKKworCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQkJY2hvbXAgJGxpbmU7CisJCQkjIGVtcHR5IGxpbmUgZW5kcyByYXcgcGFydCBvZiBkaWZmLXRyZWUgb3V0cHV0CisJCQlsYXN0IHVubGVzcyAkbGluZTsKKwkJCXB1c2ggQGRpZmZ0cmVlLCBzY2FsYXIgcGFyc2VfZGlmZnRyZWVfcmF3X2xpbmUoJGxpbmUpOworCQl9CisKKwl9IGVsc2lmICgkZm9ybWF0IGVxICdwbGFpbicpIHsKKwkJb3BlbiAkZmQsICItfCIsIGdpdF9jbWQoKSwgImRpZmYtdHJlZSIsICctcicsIEBkaWZmX29wdHMsCisJCQknLXAnLCAkaGFzaF9wYXJlbnRfcGFyYW0sICRoYXNoLCAiLS0iCisJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtZGlmZi10cmVlIGZhaWxlZCIpOworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ3BhdGNoJykgeworCQkjIEZvciBjb21taXQgcmFuZ2VzLCB3ZSBsaW1pdCB0aGUgb3V0cHV0IHRvIHRoZSBudW1iZXIgb2YKKwkJIyBwYXRjaGVzIHNwZWNpZmllZCBpbiB0aGUgJ3BhdGNoZXMnIGZlYXR1cmUuCisJCSMgRm9yIHNpbmdsZSBjb21taXRzLCB3ZSBsaW1pdCB0aGUgb3V0cHV0IHRvIGEgc2luZ2xlIHBhdGNoLAorCQkjIGRpdmVyZ2luZyBmcm9tIHRoZSBnaXQtZm9ybWF0LXBhdGNoIGRlZmF1bHQuCisJCW15IEBjb21taXRfc3BlYyA9ICgpOworCQlpZiAoJGhhc2hfcGFyZW50KSB7CisJCQlpZiAoJHBhdGNoX21heCA+IDApIHsKKwkJCQlwdXNoIEBjb21taXRfc3BlYywgIi0kcGF0Y2hfbWF4IjsKKwkJCX0KKwkJCXB1c2ggQGNvbW1pdF9zcGVjLCAnLW4nLCAiJGhhc2hfcGFyZW50Li4kaGFzaCI7CisJCX0gZWxzZSB7CisJCQlpZiAoJHBhcmFtc3stc2luZ2xlfSkgeworCQkJCXB1c2ggQGNvbW1pdF9zcGVjLCAnLTEnOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoJHBhdGNoX21heCA+IDApIHsKKwkJCQkJcHVzaCBAY29tbWl0X3NwZWMsICItJHBhdGNoX21heCI7CisJCQkJfQorCQkJCXB1c2ggQGNvbW1pdF9zcGVjLCAiLW4iOworCQkJfQorCQkJcHVzaCBAY29tbWl0X3NwZWMsICctLXJvb3QnLCAkaGFzaDsKKwkJfQorCQlvcGVuICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiZm9ybWF0LXBhdGNoIiwgQGRpZmZfb3B0cywKKwkJCSctLWVuY29kaW5nPXV0ZjgnLCAnLS1zdGRvdXQnLCBAY29tbWl0X3NwZWMKKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1mb3JtYXQtcGF0Y2ggZmFpbGVkIik7CisJfSBlbHNlIHsKKwkJZGllX2Vycm9yKDQwMCwgIlVua25vd24gY29tbWl0ZGlmZiBmb3JtYXQiKTsKKwl9CisKKwkjIG5vbi10ZXh0dWFsIGhhc2ggaWQncyBjYW4gYmUgY2FjaGVkCisJbXkgJGV4cGlyZXM7CisJaWYgKCRoYXNoID1+IG0vXiRvaWRfcmVnZXgkLykgeworCQkkZXhwaXJlcyA9ICIrMWQiOworCX0KKworCSMgd3JpdGUgY29tbWl0IG1lc3NhZ2UKKwlpZiAoJGZvcm1hdCBlcSAnaHRtbCcpIHsKKwkJbXkgJHJlZnMgPSBnaXRfZ2V0X3JlZmVyZW5jZXMoKTsKKwkJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkY297J2lkJ30pOworCisJCWdpdF9oZWFkZXJfaHRtbCh1bmRlZiwgJGV4cGlyZXMpOworCQlnaXRfcHJpbnRfcGFnZV9uYXYoJ2NvbW1pdGRpZmYnLCcnLCAkaGFzaCwkY297J3RyZWUnfSwkaGFzaCwgJGZvcm1hdHNfbmF2KTsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsIGVzY19odG1sKCRjb3sndGl0bGUnfSkgLiAkcmVmLCAkaGFzaCk7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVfdGV4dFwiPlxuIiAuCisJCSAgICAgICI8dGFibGUgY2xhc3M9XCJvYmplY3RfaGVhZGVyXCI+XG4iOworCQlnaXRfcHJpbnRfYXV0aG9yc2hpcF9yb3dzKFwlY28pOworCQlwcmludCAiPC90YWJsZT4iLgorCQkgICAgICAiPC9kaXY+XG4iOworCQlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfYm9keVwiPlxuIjsKKwkJaWYgKEB7JGNveydjb21tZW50J319ID4gMSkgeworCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJsb2dcIj5cbiI7CisJCQlnaXRfcHJpbnRfbG9nKCRjb3snY29tbWVudCd9LCAtZmluYWxfZW1wdHlfbGluZT0+IDEsIC1yZW1vdmVfdGl0bGUgPT4gMSk7CisJCQlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJsb2ciCisJCX0KKworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ3BsYWluJykgeworCQlteSAkcmVmcyA9IGdpdF9nZXRfcmVmZXJlbmNlcygidGFncyIpOworCQlteSAkdGFnbmFtZSA9IGdpdF9nZXRfcmV2X25hbWVfdGFncygkaGFzaCk7CisJCW15ICRmaWxlbmFtZSA9IGJhc2VuYW1lKCRwcm9qZWN0KSAuICItJGhhc2gucGF0Y2giOworCisJCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJCS10eXBlID0+ICd0ZXh0L3BsYWluJywKKwkJCS1jaGFyc2V0ID0+ICd1dGYtOCcsCisJCQktZXhwaXJlcyA9PiAkZXhwaXJlcywKKwkJCS1jb250ZW50X2Rpc3Bvc2l0aW9uID0+ICdpbmxpbmU7IGZpbGVuYW1lPSInIC4gIiRmaWxlbmFtZSIgLiAnIicpOworCQlteSAlYWQgPSBwYXJzZV9kYXRlKCRjb3snYXV0aG9yX2Vwb2NoJ30sICRjb3snYXV0aG9yX3R6J30pOworCQlwcmludCAiRnJvbTogIiAuIHRvX3V0ZjgoJGNveydhdXRob3InfSkgLiAiXG4iOworCQlwcmludCAiRGF0ZTogJGFkeydyZmMyODIyJ30gKCRhZHsndHpfbG9jYWwnfSlcbiI7CisJCXByaW50ICJTdWJqZWN0OiAiIC4gdG9fdXRmOCgkY297J3RpdGxlJ30pIC4gIlxuIjsKKworCQlwcmludCAiWC1HaXQtVGFnOiAkdGFnbmFtZVxuIiBpZiAkdGFnbmFtZTsKKwkJcHJpbnQgIlgtR2l0LVVybDogIiAuICRjZ2ktPnNlbGZfdXJsKCkgLiAiXG5cbiI7CisKKwkJZm9yZWFjaCBteSAkbGluZSAoQHskY297J2NvbW1lbnQnfX0pIHsKKwkJCXByaW50IHRvX3V0ZjgoJGxpbmUpIC4gIlxuIjsKKwkJfQorCQlwcmludCAiLS0tXG5cbiI7CisJfSBlbHNpZiAoJGZvcm1hdCBlcSAncGF0Y2gnKSB7CisJCW15ICRmaWxlbmFtZSA9IGJhc2VuYW1lKCRwcm9qZWN0KSAuICItJGhhc2gucGF0Y2giOworCisJCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJCS10eXBlID0+ICd0ZXh0L3BsYWluJywKKwkJCS1jaGFyc2V0ID0+ICd1dGYtOCcsCisJCQktZXhwaXJlcyA9PiAkZXhwaXJlcywKKwkJCS1jb250ZW50X2Rpc3Bvc2l0aW9uID0+ICdpbmxpbmU7IGZpbGVuYW1lPSInIC4gIiRmaWxlbmFtZSIgLiAnIicpOworCX0KKworCSMgd3JpdGUgcGF0Y2gKKwlpZiAoJGZvcm1hdCBlcSAnaHRtbCcpIHsKKwkJbXkgJHVzZV9wYXJlbnRzID0gIWRlZmluZWQgJGhhc2hfcGFyZW50IHx8CisJCQkkaGFzaF9wYXJlbnQgZXEgJy1jJyB8fCAkaGFzaF9wYXJlbnQgZXEgJy0tY2MnOworCQlnaXRfZGlmZnRyZWVfYm9keShcQGRpZmZ0cmVlLCAkaGFzaCwKKwkJICAgICAgICAgICAgICAgICAgJHVzZV9wYXJlbnRzID8gQHskY297J3BhcmVudHMnfX0gOiAkaGFzaF9wYXJlbnQpOworCQlwcmludCAiPGJyLz5cbiI7CisKKwkJZ2l0X3BhdGNoc2V0X2JvZHkoJGZkLCAkZGlmZl9zdHlsZSwKKwkJICAgICAgICAgICAgICAgICAgXEBkaWZmdHJlZSwgJGhhc2gsCisJCSAgICAgICAgICAgICAgICAgICR1c2VfcGFyZW50cyA/IEB7JGNveydwYXJlbnRzJ319IDogJGhhc2hfcGFyZW50KTsKKwkJY2xvc2UgJGZkOworCQlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJwYWdlX2JvZHkiCisJCWdpdF9mb290ZXJfaHRtbCgpOworCisJfSBlbHNpZiAoJGZvcm1hdCBlcSAncGxhaW4nKSB7CisJCWxvY2FsICQvID0gdW5kZWY7CisJCXByaW50IDwkZmQ+OworCQljbG9zZSAkZmQKKwkJCW9yIHByaW50ICJSZWFkaW5nIGdpdC1kaWZmLXRyZWUgZmFpbGVkXG4iOworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ3BhdGNoJykgeworCQlsb2NhbCAkLyA9IHVuZGVmOworCQlwcmludCA8JGZkPjsKKwkJY2xvc2UgJGZkCisJCQlvciBwcmludCAiUmVhZGluZyBnaXQtZm9ybWF0LXBhdGNoIGZhaWxlZFxuIjsKKwl9Cit9CisKK3N1YiBnaXRfY29tbWl0ZGlmZl9wbGFpbiB7CisJZ2l0X2NvbW1pdGRpZmYoLWZvcm1hdCA9PiAncGxhaW4nKTsKK30KKworIyBmb3JtYXQtcGF0Y2gtc3R5bGUgcGF0Y2hlcworc3ViIGdpdF9wYXRjaCB7CisJZ2l0X2NvbW1pdGRpZmYoLWZvcm1hdCA9PiAncGF0Y2gnLCAtc2luZ2xlID0+IDEpOworfQorCitzdWIgZ2l0X3BhdGNoZXMgeworCWdpdF9jb21taXRkaWZmKC1mb3JtYXQgPT4gJ3BhdGNoJyk7Cit9CisKK3N1YiBnaXRfaGlzdG9yeSB7CisJZ2l0X2xvZ19nZW5lcmljKCdoaXN0b3J5JywgXCZnaXRfaGlzdG9yeV9ib2R5LAorCSAgICAgICAgICAgICAgICAkaGFzaF9iYXNlLCAkaGFzaF9wYXJlbnRfYmFzZSwKKwkgICAgICAgICAgICAgICAgJGZpbGVfbmFtZSwgJGhhc2gpOworfQorCitzdWIgZ2l0X3NlYXJjaCB7CisJJHNlYXJjaHR5cGUgfHw9ICdjb21taXQnOworCisJIyBjaGVjayBpZiBhcHByb3ByaWF0ZSBmZWF0dXJlcyBhcmUgZW5hYmxlZAorCWdpdHdlYl9jaGVja19mZWF0dXJlKCdzZWFyY2gnKQorCQlvciBkaWVfZXJyb3IoNDAzLCAiU2VhcmNoIGlzIGRpc2FibGVkIik7CisJaWYgKCRzZWFyY2h0eXBlIGVxICdwaWNrYXhlJykgeworCQkjIHBpY2theGUgbWF5IHRha2UgYWxsIHJlc291cmNlcyBvZiB5b3VyIGJveCBhbmQgcnVuIGZvciBzZXZlcmFsIG1pbnV0ZXMKKwkJIyB3aXRoIGV2ZXJ5IHF1ZXJ5IC0gc28gZGVjaWRlIGJ5IHlvdXJzZWxmIGhvdyBwdWJsaWMgeW91IG1ha2UgdGhpcyBmZWF0dXJlCisJCWdpdHdlYl9jaGVja19mZWF0dXJlKCdwaWNrYXhlJykKKwkJCW9yIGRpZV9lcnJvcig0MDMsICJQaWNrYXhlIHNlYXJjaCBpcyBkaXNhYmxlZCIpOworCX0KKwlpZiAoJHNlYXJjaHR5cGUgZXEgJ2dyZXAnKSB7CisJCSMgZ3JlcCBzZWFyY2ggbWlnaHQgYmUgcG90ZW50aWFsbHkgQ1BVLWludGVuc2l2ZSwgdG9vCisJCWdpdHdlYl9jaGVja19mZWF0dXJlKCdncmVwJykKKwkJCW9yIGRpZV9lcnJvcig0MDMsICJHcmVwIHNlYXJjaCBpcyBkaXNhYmxlZCIpOworCX0KKworCWlmICghZGVmaW5lZCAkc2VhcmNodGV4dCkgeworCQlkaWVfZXJyb3IoNDAwLCAiVGV4dCBmaWVsZCBpcyBlbXB0eSIpOworCX0KKwlpZiAoIWRlZmluZWQgJGhhc2gpIHsKKwkJJGhhc2ggPSBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CisJfQorCW15ICVjbyA9IHBhcnNlX2NvbW1pdCgkaGFzaCk7CisJaWYgKCElY28pIHsKKwkJZGllX2Vycm9yKDQwNCwgIlVua25vd24gY29tbWl0IG9iamVjdCIpOworCX0KKwlpZiAoIWRlZmluZWQgJHBhZ2UpIHsKKwkJJHBhZ2UgPSAwOworCX0KKworCWlmICgkc2VhcmNodHlwZSBlcSAnY29tbWl0JyB8fAorCSAgICAkc2VhcmNodHlwZSBlcSAnYXV0aG9yJyB8fAorCSAgICAkc2VhcmNodHlwZSBlcSAnY29tbWl0dGVyJykgeworCQlnaXRfc2VhcmNoX21lc3NhZ2UoJWNvKTsKKwl9IGVsc2lmICgkc2VhcmNodHlwZSBlcSAncGlja2F4ZScpIHsKKwkJZ2l0X3NlYXJjaF9jaGFuZ2VzKCVjbyk7CisJfSBlbHNpZiAoJHNlYXJjaHR5cGUgZXEgJ2dyZXAnKSB7CisJCWdpdF9zZWFyY2hfZmlsZXMoJWNvKTsKKwl9IGVsc2UgeworCQlkaWVfZXJyb3IoNDAwLCAiVW5rbm93biBzZWFyY2ggdHlwZSIpOworCX0KK30KKworc3ViIGdpdF9zZWFyY2hfaGVscCB7CisJZ2l0X2hlYWRlcl9odG1sKCk7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCcnLCAkaGFzaCwkaGFzaCwkaGFzaCk7CisJcHJpbnQgPDxFT1Q7Cis8cD48c3Ryb25nPlBhdHRlcm48L3N0cm9uZz4gaXMgYnkgZGVmYXVsdCBhIG5vcm1hbCBzdHJpbmcgdGhhdCBpcyBtYXRjaGVkIHByZWNpc2VseSAoYnV0IHdpdGhvdXQKK3JlZ2FyZCB0byBjYXNlLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgcGlja2F4ZSkuIEhvd2V2ZXIsIHdoZW4geW91IGNoZWNrIHRoZSA8ZW0+cmU8L2VtPiBjaGVja2JveCwKK3RoZSBwYXR0ZXJuIGVudGVyZWQgaXMgcmVjb2duaXplZCBhcyB0aGUgUE9TSVggZXh0ZW5kZWQKKzxhIGhyZWY9Imh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlZ3VsYXJfZXhwcmVzc2lvbiI+cmVndWxhciBleHByZXNzaW9uPC9hPiAoYWxzbyBjYXNlCitpbnNlbnNpdGl2ZSkuPC9wPgorPGRsPgorPGR0PjxiPmNvbW1pdDwvYj48L2R0PgorPGRkPlRoZSBjb21taXQgbWVzc2FnZXMgYW5kIGF1dGhvcnNoaXAgaW5mb3JtYXRpb24gd2lsbCBiZSBzY2FubmVkIGZvciB0aGUgZ2l2ZW4gcGF0dGVybi48L2RkPgorRU9UCisJbXkgJGhhdmVfZ3JlcCA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdncmVwJyk7CisJaWYgKCRoYXZlX2dyZXApIHsKKwkJcHJpbnQgPDxFT1Q7Cis8ZHQ+PGI+Z3JlcDwvYj48L2R0PgorPGRkPkFsbCBmaWxlcyBpbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRyZWUgKEhFQUQgdW5sZXNzIHlvdSBhcmUgZXhwbGljaXRseSBicm93c2luZworICAgIGEgZGlmZmVyZW50IG9uZSkgYXJlIHNlYXJjaGVkIGZvciB0aGUgZ2l2ZW4gcGF0dGVybi4gT24gbGFyZ2UgdHJlZXMsIHRoaXMgc2VhcmNoIGNhbiB0YWtlCithIHdoaWxlIGFuZCBwdXQgc29tZSBzdHJhaW4gb24gdGhlIHNlcnZlciwgc28gcGxlYXNlIHVzZSBpdCB3aXRoIHNvbWUgY29uc2lkZXJhdGlvbi4gTm90ZSB0aGF0CitkdWUgdG8gZ2l0LWdyZXAgcGVjdWxpYXJpdHksIGN1cnJlbnRseSBpZiByZWdleHAgbW9kZSBpcyB0dXJuZWQgb2ZmLCB0aGUgbWF0Y2hlcyBhcmUKK2Nhc2Utc2Vuc2l0aXZlLjwvZGQ+CitFT1QKKwl9CisJcHJpbnQgPDxFT1Q7Cis8ZHQ+PGI+YXV0aG9yPC9iPjwvZHQ+Cis8ZGQ+TmFtZSBhbmQgZS1tYWlsIG9mIHRoZSBjaGFuZ2UgYXV0aG9yIGFuZCBkYXRlIG9mIGJpcnRoIG9mIHRoZSBwYXRjaCB3aWxsIGJlIHNjYW5uZWQgZm9yIHRoZSBnaXZlbiBwYXR0ZXJuLjwvZGQ+Cis8ZHQ+PGI+Y29tbWl0dGVyPC9iPjwvZHQ+Cis8ZGQ+TmFtZSBhbmQgZS1tYWlsIG9mIHRoZSBjb21taXR0ZXIgYW5kIGRhdGUgb2YgY29tbWl0IHdpbGwgYmUgc2Nhbm5lZCBmb3IgdGhlIGdpdmVuIHBhdHRlcm4uPC9kZD4KK0VPVAorCW15ICRoYXZlX3BpY2theGUgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgncGlja2F4ZScpOworCWlmICgkaGF2ZV9waWNrYXhlKSB7CisJCXByaW50IDw8RU9UOworPGR0PjxiPnBpY2theGU8L2I+PC9kdD4KKzxkZD5BbGwgY29tbWl0cyB0aGF0IGNhdXNlZCB0aGUgc3RyaW5nIHRvIGFwcGVhciBvciBkaXNhcHBlYXIgZnJvbSBhbnkgZmlsZSAoY2hhbmdlcyB0aGF0CithZGRlZCwgcmVtb3ZlZCBvciAibW9kaWZpZWQiIHRoZSBzdHJpbmcpIHdpbGwgYmUgbGlzdGVkLiBUaGlzIHNlYXJjaCBjYW4gdGFrZSBhIHdoaWxlIGFuZAordGFrZXMgYSBsb3Qgb2Ygc3RyYWluIG9uIHRoZSBzZXJ2ZXIsIHNvIHBsZWFzZSB1c2UgaXQgd2lzZWx5LiBOb3RlIHRoYXQgc2luY2UgeW91IG1heSBiZQoraW50ZXJlc3RlZCBldmVuIGluIGNoYW5nZXMganVzdCBjaGFuZ2luZyB0aGUgY2FzZSBhcyB3ZWxsLCB0aGlzIHNlYXJjaCBpcyBjYXNlIHNlbnNpdGl2ZS48L2RkPgorRU9UCisJfQorCXByaW50ICI8L2RsPlxuIjsKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF9zaG9ydGxvZyB7CisJZ2l0X2xvZ19nZW5lcmljKCdzaG9ydGxvZycsIFwmZ2l0X3Nob3J0bG9nX2JvZHksCisJICAgICAgICAgICAgICAgICRoYXNoLCAkaGFzaF9wYXJlbnQpOworfQorCisjIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisjIyBmZWVkcyAoUlNTLCBBdG9tOyBPUE1MKQorCitzdWIgZ2l0X2ZlZWQgeworCW15ICRmb3JtYXQgPSBzaGlmdCB8fCAnYXRvbSc7CisJbXkgJGhhdmVfYmxhbWUgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnYmxhbWUnKTsKKworCSMgQXRvbTogaHR0cDovL3d3dy5hdG9tZW5hYmxlZC5vcmcvZGV2ZWxvcGVycy9zeW5kaWNhdGlvbi8KKwkjIFJTUzogIGh0dHA6Ly93d3cubm90ZXN0aXBzLmNvbS84MDI1NkIzQTAwN0YyNjkyLzEvTkFNTzVQOVVQUQorCWlmICgkZm9ybWF0IG5lICdyc3MnICYmICRmb3JtYXQgbmUgJ2F0b20nKSB7CisJCWRpZV9lcnJvcig0MDAsICJVbmtub3duIHdlYiBmZWVkIGZvcm1hdCIpOworCX0KKworCSMgbG9nL2ZlZWQgb2YgY3VycmVudCAoSEVBRCkgYnJhbmNoLCBsb2cgb2YgZ2l2ZW4gYnJhbmNoLCBoaXN0b3J5IG9mIGZpbGUvZGlyZWN0b3J5CisJbXkgJGhlYWQgPSAkaGFzaCB8fCAnSEVBRCc7CisJbXkgQGNvbW1pdGxpc3QgPSBwYXJzZV9jb21taXRzKCRoZWFkLCAxNTAsIDAsICRmaWxlX25hbWUpOworCisJbXkgJWxhdGVzdF9jb21taXQ7CisJbXkgJWxhdGVzdF9kYXRlOworCW15ICRjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vJGZvcm1hdCt4bWwiOworCWlmIChkZWZpbmVkICRjZ2ktPmh0dHAoJ0hUVFBfQUNDRVBUJykgJiYKKwkJICRjZ2ktPkFjY2VwdCgndGV4dC94bWwnKSA+ICRjZ2ktPkFjY2VwdCgkY29udGVudF90eXBlKSkgeworCQkjIGJyb3dzZXIgKGZlZWQgcmVhZGVyKSBwcmVmZXJzIHRleHQveG1sCisJCSRjb250ZW50X3R5cGUgPSAndGV4dC94bWwnOworCX0KKwlpZiAoZGVmaW5lZCgkY29tbWl0bGlzdFswXSkpIHsKKwkJJWxhdGVzdF9jb21taXQgPSAleyRjb21taXRsaXN0WzBdfTsKKwkJbXkgJGxhdGVzdF9lcG9jaCA9ICRsYXRlc3RfY29tbWl0eydjb21taXR0ZXJfZXBvY2gnfTsKKwkJZXhpdF9pZl91bm1vZGlmaWVkX3NpbmNlKCRsYXRlc3RfZXBvY2gpOworCQklbGF0ZXN0X2RhdGUgPSBwYXJzZV9kYXRlKCRsYXRlc3RfZXBvY2gsICRsYXRlc3RfY29tbWl0eydjb21taXR0ZXJfdHonfSk7CisJfQorCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJLXR5cGUgPT4gJGNvbnRlbnRfdHlwZSwKKwkJLWNoYXJzZXQgPT4gJ3V0Zi04JywKKwkJJWxhdGVzdF9kYXRlID8gKC1sYXN0X21vZGlmaWVkID0+ICRsYXRlc3RfZGF0ZXsncmZjMjgyMid9KSA6ICgpLAorCQktc3RhdHVzID0+ICcyMDAgT0snKTsKKworCSMgT3B0aW1pemF0aW9uOiBza2lwIGdlbmVyYXRpbmcgdGhlIGJvZHkgaWYgY2xpZW50IGFza3Mgb25seQorCSMgZm9yIExhc3QtTW9kaWZpZWQgZGF0ZS4KKwlyZXR1cm4gaWYgKCRjZ2ktPnJlcXVlc3RfbWV0aG9kKCkgZXEgJ0hFQUQnKTsKKworCSMgaGVhZGVyIHZhcmlhYmxlcworCW15ICR0aXRsZSA9ICIkc2l0ZV9uYW1lIC0gJHByb2plY3QvJGFjdGlvbiI7CisJbXkgJGZlZWRfdHlwZSA9ICdsb2cnOworCWlmIChkZWZpbmVkICRoYXNoKSB7CisJCSR0aXRsZSAuPSAiIC0gJyRoYXNoJyI7CisJCSRmZWVkX3R5cGUgPSAnYnJhbmNoIGxvZyc7CisJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJCSR0aXRsZSAuPSAiIDo6ICRmaWxlX25hbWUiOworCQkJJGZlZWRfdHlwZSA9ICdoaXN0b3J5JzsKKwkJfQorCX0gZWxzaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkkdGl0bGUgLj0gIiAtICRmaWxlX25hbWUiOworCQkkZmVlZF90eXBlID0gJ2hpc3RvcnknOworCX0KKwkkdGl0bGUgLj0gIiAkZmVlZF90eXBlIjsKKwkkdGl0bGUgPSBlc2NfaHRtbCgkdGl0bGUpOworCW15ICRkZXNjciA9IGdpdF9nZXRfcHJvamVjdF9kZXNjcmlwdGlvbigkcHJvamVjdCk7CisJaWYgKGRlZmluZWQgJGRlc2NyKSB7CisJCSRkZXNjciA9IGVzY19odG1sKCRkZXNjcik7CisJfSBlbHNlIHsKKwkJJGRlc2NyID0gIiRwcm9qZWN0ICIgLgorCQkgICAgICAgICAoJGZvcm1hdCBlcSAncnNzJyA/ICdSU1MnIDogJ0F0b20nKSAuCisJCSAgICAgICAgICIgZmVlZCI7CisJfQorCW15ICRvd25lciA9IGdpdF9nZXRfcHJvamVjdF9vd25lcigkcHJvamVjdCk7CisJJG93bmVyID0gZXNjX2h0bWwoJG93bmVyKTsKKworCSNoZWFkZXIKKwlteSAkYWx0X3VybDsKKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCSRhbHRfdXJsID0gaHJlZigtZnVsbD0+MSwgYWN0aW9uPT4iaGlzdG9yeSIsIGhhc2g9PiRoYXNoLCBmaWxlX25hbWU9PiRmaWxlX25hbWUpOworCX0gZWxzaWYgKGRlZmluZWQgJGhhc2gpIHsKKwkJJGFsdF91cmwgPSBocmVmKC1mdWxsPT4xLCBhY3Rpb249PiJsb2ciLCBoYXNoPT4kaGFzaCk7CisJfSBlbHNlIHsKKwkJJGFsdF91cmwgPSBocmVmKC1mdWxsPT4xLCBhY3Rpb249PiJzdW1tYXJ5Iik7CisJfQorCSRhbHRfdXJsID0gZXNjX2F0dHIoJGFsdF91cmwpOworCXByaW50IHFxITw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG4hOworCWlmICgkZm9ybWF0IGVxICdyc3MnKSB7CisJCXByaW50IDw8WE1MOworPHJzcyB2ZXJzaW9uPSIyLjAiIHhtbG5zOmNvbnRlbnQ9Imh0dHA6Ly9wdXJsLm9yZy9yc3MvMS4wL21vZHVsZXMvY29udGVudC8iPgorPGNoYW5uZWw+CitYTUwKKwkJcHJpbnQgIjx0aXRsZT4kdGl0bGU8L3RpdGxlPlxuIiAuCisJCSAgICAgICI8bGluaz4kYWx0X3VybDwvbGluaz5cbiIgLgorCQkgICAgICAiPGRlc2NyaXB0aW9uPiRkZXNjcjwvZGVzY3JpcHRpb24+XG4iIC4KKwkJICAgICAgIjxsYW5ndWFnZT5lbjwvbGFuZ3VhZ2U+XG4iIC4KKwkJICAgICAgIyBwcm9qZWN0IG93bmVyIGlzIHJlc3BvbnNpYmxlIGZvciAnZWRpdG9yaWFsJyBjb250ZW50CisJCSAgICAgICI8bWFuYWdpbmdFZGl0b3I+JG93bmVyPC9tYW5hZ2luZ0VkaXRvcj5cbiI7CisJCWlmIChkZWZpbmVkICRsb2dvIHx8IGRlZmluZWQgJGZhdmljb24pIHsKKwkJCSMgcHJlZmVyIHRoZSBsb2dvIHRvIHRoZSBmYXZpY29uLCBzaW5jZSBSU1MKKwkJCSMgZG9lc24ndCBhbGxvdyBib3RoCisJCQlteSAkaW1nID0gZXNjX3VybCgkbG9nbyB8fCAkZmF2aWNvbik7CisJCQlwcmludCAiPGltYWdlPlxuIiAuCisJCQkgICAgICAiPHVybD4kaW1nPC91cmw+XG4iIC4KKwkJCSAgICAgICI8dGl0bGU+JHRpdGxlPC90aXRsZT5cbiIgLgorCQkJICAgICAgIjxsaW5rPiRhbHRfdXJsPC9saW5rPlxuIiAuCisJCQkgICAgICAiPC9pbWFnZT5cbiI7CisJCX0KKwkJaWYgKCVsYXRlc3RfZGF0ZSkgeworCQkJcHJpbnQgIjxwdWJEYXRlPiRsYXRlc3RfZGF0ZXsncmZjMjgyMid9PC9wdWJEYXRlPlxuIjsKKwkJCXByaW50ICI8bGFzdEJ1aWxkRGF0ZT4kbGF0ZXN0X2RhdGV7J3JmYzI4MjInfTwvbGFzdEJ1aWxkRGF0ZT5cbiI7CisJCX0KKwkJcHJpbnQgIjxnZW5lcmF0b3I+Z2l0d2ViIHYuJHZlcnNpb24vJGdpdF92ZXJzaW9uPC9nZW5lcmF0b3I+XG4iOworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ2F0b20nKSB7CisJCXByaW50IDw8WE1MOworPGZlZWQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSI+CitYTUwKKwkJcHJpbnQgIjx0aXRsZT4kdGl0bGU8L3RpdGxlPlxuIiAuCisJCSAgICAgICI8c3VidGl0bGU+JGRlc2NyPC9zdWJ0aXRsZT5cbiIgLgorCQkgICAgICAnPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9InRleHQvaHRtbCIgaHJlZj0iJyAuCisJCSAgICAgICRhbHRfdXJsIC4gJyIgLz4nIC4gIlxuIiAuCisJCSAgICAgICc8bGluayByZWw9InNlbGYiIHR5cGU9IicgLiAkY29udGVudF90eXBlIC4gJyIgaHJlZj0iJyAuCisJCSAgICAgICRjZ2ktPnNlbGZfdXJsKCkgLiAnIiAvPicgLiAiXG4iIC4KKwkJICAgICAgIjxpZD4iIC4gZXNjX3VybChocmVmKC1mdWxsPT4xKSkgLiAiPC9pZD5cbiIgLgorCQkgICAgICAjIHVzZSBwcm9qZWN0IG93bmVyIGZvciBmZWVkIGF1dGhvcgorCQkgICAgICAiPGF1dGhvcj48bmFtZT4kb3duZXI8L25hbWU+PC9hdXRob3I+XG4iOworCQlpZiAoZGVmaW5lZCAkZmF2aWNvbikgeworCQkJcHJpbnQgIjxpY29uPiIgLiBlc2NfdXJsKCRmYXZpY29uKSAuICI8L2ljb24+XG4iOworCQl9CisJCWlmIChkZWZpbmVkICRsb2dvKSB7CisJCQkjIG5vdCB0d2ljZSBhcyB3aWRlIGFzIHRhbGw6IDcyIHggMjcgcGl4ZWxzCisJCQlwcmludCAiPGxvZ28+IiAuIGVzY191cmwoJGxvZ28pIC4gIjwvbG9nbz5cbiI7CisJCX0KKwkJaWYgKCEgJWxhdGVzdF9kYXRlKSB7CisJCQkjIGR1bW15IGRhdGUgdG8ga2VlcCB0aGUgZmVlZCB2YWxpZCB1bnRpbCBjb21taXRzIHRyaWNrbGUgaW46CisJCQlwcmludCAiPHVwZGF0ZWQ+MTk3MC0wMS0wMVQwMDowMDowMFo8L3VwZGF0ZWQ+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx1cGRhdGVkPiRsYXRlc3RfZGF0ZXsnaXNvLTg2MDEnfTwvdXBkYXRlZD5cbiI7CisJCX0KKwkJcHJpbnQgIjxnZW5lcmF0b3IgdmVyc2lvbj0nJHZlcnNpb24vJGdpdF92ZXJzaW9uJz5naXR3ZWI8L2dlbmVyYXRvcj5cbiI7CisJfQorCisJIyBjb250ZW50cworCWZvciAobXkgJGkgPSAwOyAkaSA8PSAkI2NvbW1pdGxpc3Q7ICRpKyspIHsKKwkJbXkgJWNvID0gJXskY29tbWl0bGlzdFskaV19OworCQlteSAkY29tbWl0ID0gJGNveydpZCd9OworCQkjIHdlIHJlYWQgMTUwLCB3ZSBhbHdheXMgc2hvdyAzMCBhbmQgdGhlIG9uZXMgbW9yZSByZWNlbnQgdGhhbiA0OCBob3VycworCQlpZiAoKCRpID49IDIwKSAmJiAoKHRpbWUgLSAkY297J2F1dGhvcl9lcG9jaCd9KSA+IDQ4KjYwKjYwKSkgeworCQkJbGFzdDsKKwkJfQorCQlteSAlY2QgPSBwYXJzZV9kYXRlKCRjb3snYXV0aG9yX2Vwb2NoJ30sICRjb3snYXV0aG9yX3R6J30pOworCisJCSMgZ2V0IGxpc3Qgb2YgY2hhbmdlZCBmaWxlcworCQlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiZGlmZi10cmVlIiwgJy1yJywgQGRpZmZfb3B0cywKKwkJCSRjb3sncGFyZW50J30gfHwgIi0tcm9vdCIsCisJCQkkY297J2lkJ30sICItLSIsIChkZWZpbmVkICRmaWxlX25hbWUgPyAkZmlsZV9uYW1lIDogKCkpCisJCQlvciBuZXh0OworCQlteSBAZGlmZnRyZWUgPSBtYXAgeyBjaG9tcDsgJF8gfSA8JGZkPjsKKwkJY2xvc2UgJGZkCisJCQlvciBuZXh0OworCisJCSMgcHJpbnQgZWxlbWVudCAoZW50cnksIGl0ZW0pCisJCW15ICRjb191cmwgPSBocmVmKC1mdWxsPT4xLCBhY3Rpb249PiJjb21taXRkaWZmIiwgaGFzaD0+JGNvbW1pdCk7CisJCWlmICgkZm9ybWF0IGVxICdyc3MnKSB7CisJCQlwcmludCAiPGl0ZW0+XG4iIC4KKwkJCSAgICAgICI8dGl0bGU+IiAuIGVzY19odG1sKCRjb3sndGl0bGUnfSkgLiAiPC90aXRsZT5cbiIgLgorCQkJICAgICAgIjxhdXRob3I+IiAuIGVzY19odG1sKCRjb3snYXV0aG9yJ30pIC4gIjwvYXV0aG9yPlxuIiAuCisJCQkgICAgICAiPHB1YkRhdGU+JGNkeydyZmMyODIyJ308L3B1YkRhdGU+XG4iIC4KKwkJCSAgICAgICI8Z3VpZCBpc1Blcm1hTGluaz1cInRydWVcIj4kY29fdXJsPC9ndWlkPlxuIiAuCisJCQkgICAgICAiPGxpbms+IiAuIGVzY19odG1sKCRjb191cmwpIC4gIjwvbGluaz5cbiIgLgorCQkJICAgICAgIjxkZXNjcmlwdGlvbj4iIC4gZXNjX2h0bWwoJGNveyd0aXRsZSd9KSAuICI8L2Rlc2NyaXB0aW9uPlxuIiAuCisJCQkgICAgICAiPGNvbnRlbnQ6ZW5jb2RlZD4iIC4KKwkJCSAgICAgICI8IVtDREFUQVtcbiI7CisJCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ2F0b20nKSB7CisJCQlwcmludCAiPGVudHJ5PlxuIiAuCisJCQkgICAgICAiPHRpdGxlIHR5cGU9XCJodG1sXCI+IiAuIGVzY19odG1sKCRjb3sndGl0bGUnfSkgLiAiPC90aXRsZT5cbiIgLgorCQkJICAgICAgIjx1cGRhdGVkPiRjZHsnaXNvLTg2MDEnfTwvdXBkYXRlZD5cbiIgLgorCQkJICAgICAgIjxhdXRob3I+XG4iIC4KKwkJCSAgICAgICIgIDxuYW1lPiIgLiBlc2NfaHRtbCgkY297J2F1dGhvcl9uYW1lJ30pIC4gIjwvbmFtZT5cbiI7CisJCQlpZiAoJGNveydhdXRob3JfZW1haWwnfSkgeworCQkJCXByaW50ICIgIDxlbWFpbD4iIC4gZXNjX2h0bWwoJGNveydhdXRob3JfZW1haWwnfSkgLiAiPC9lbWFpbD5cbiI7CisJCQl9CisJCQlwcmludCAiPC9hdXRob3I+XG4iIC4KKwkJCSAgICAgICMgdXNlIGNvbW1pdHRlciBmb3IgY29udHJpYnV0b3IKKwkJCSAgICAgICI8Y29udHJpYnV0b3I+XG4iIC4KKwkJCSAgICAgICIgIDxuYW1lPiIgLiBlc2NfaHRtbCgkY297J2NvbW1pdHRlcl9uYW1lJ30pIC4gIjwvbmFtZT5cbiI7CisJCQlpZiAoJGNveydjb21taXR0ZXJfZW1haWwnfSkgeworCQkJCXByaW50ICIgIDxlbWFpbD4iIC4gZXNjX2h0bWwoJGNveydjb21taXR0ZXJfZW1haWwnfSkgLiAiPC9lbWFpbD5cbiI7CisJCQl9CisJCQlwcmludCAiPC9jb250cmlidXRvcj5cbiIgLgorCQkJICAgICAgIjxwdWJsaXNoZWQ+JGNkeydpc28tODYwMSd9PC9wdWJsaXNoZWQ+XG4iIC4KKwkJCSAgICAgICI8bGluayByZWw9XCJhbHRlcm5hdGVcIiB0eXBlPVwidGV4dC9odG1sXCIgaHJlZj1cIiIgLiBlc2NfYXR0cigkY29fdXJsKSAuICJcIiAvPlxuIiAuCisJCQkgICAgICAiPGlkPiIgLiBlc2NfaHRtbCgkY29fdXJsKSAuICI8L2lkPlxuIiAuCisJCQkgICAgICAiPGNvbnRlbnQgdHlwZT1cInhodG1sXCIgeG1sOmJhc2U9XCIiIC4gZXNjX3VybCgkbXlfdXJsKSAuICJcIj5cbiIgLgorCQkJICAgICAgIjxkaXYgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+XG4iOworCQl9CisJCW15ICRjb21tZW50ID0gJGNveydjb21tZW50J307CisJCXByaW50ICI8cHJlPlxuIjsKKwkJZm9yZWFjaCBteSAkbGluZSAoQCRjb21tZW50KSB7CisJCQkkbGluZSA9IGVzY19odG1sKCRsaW5lKTsKKwkJCXByaW50ICIkbGluZVxuIjsKKwkJfQorCQlwcmludCAiPC9wcmU+PHVsPlxuIjsKKwkJZm9yZWFjaCBteSAkZGlmZnRyZWVfbGluZSAoQGRpZmZ0cmVlKSB7CisJCQlteSAlZGlmZnRyZWUgPSBwYXJzZV9kaWZmdHJlZV9yYXdfbGluZSgkZGlmZnRyZWVfbGluZSk7CisJCQluZXh0IGlmICEkZGlmZnRyZWV7J2Zyb21faWQnfTsKKworCQkJbXkgJGZpbGUgPSAkZGlmZnRyZWV7J2ZpbGUnfSB8fCAkZGlmZnRyZWV7J3RvX2ZpbGUnfTsKKworCQkJcHJpbnQgIjxsaT4iIC4KKwkJCSAgICAgICJbIiAuCisJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1mdWxsPT4xLCBhY3Rpb249PiJibG9iZGlmZiIsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmdHJlZXsndG9faWQnfSwgaGFzaF9wYXJlbnQ9PiRkaWZmdHJlZXsnZnJvbV9pZCd9LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRjb3snaWQnfSwgaGFzaF9wYXJlbnRfYmFzZT0+JGNveydwYXJlbnQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZmlsZSwgZmlsZV9wYXJlbnQ9PiRkaWZmdHJlZXsnZnJvbV9maWxlJ30pLAorCQkJICAgICAgICAgICAgICAtdGl0bGUgPT4gImRpZmYifSwgJ0QnKTsKKwkJCWlmICgkaGF2ZV9ibGFtZSkgeworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLWZ1bGw9PjEsIGFjdGlvbj0+ImJsYW1lIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZpbGUsIGhhc2hfYmFzZT0+JGNvbW1pdCksCisJCQkJICAgICAgICAgICAgICAtdGl0bGUgPT4gImJsYW1lIn0sICdCJyk7CisJCQl9CisJCQkjIGlmIHRoaXMgaXMgbm90IGEgZmVlZCBvZiBhIGZpbGUgaGlzdG9yeQorCQkJaWYgKCFkZWZpbmVkICRmaWxlX25hbWUgfHwgJGZpbGVfbmFtZSBuZSAkZmlsZSkgeworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLWZ1bGw9PjEsIGFjdGlvbj0+Imhpc3RvcnkiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZmlsZSwgaGFzaD0+JGNvbW1pdCksCisJCQkJICAgICAgICAgICAgICAtdGl0bGUgPT4gImhpc3RvcnkifSwgJ0gnKTsKKwkJCX0KKwkJCSRmaWxlID0gZXNjX3BhdGgoJGZpbGUpOworCQkJcHJpbnQgIl0gIi4KKwkJCSAgICAgICIkZmlsZTwvbGk+XG4iOworCQl9CisJCWlmICgkZm9ybWF0IGVxICdyc3MnKSB7CisJCQlwcmludCAiPC91bD5dXT5cbiIgLgorCQkJICAgICAgIjwvY29udGVudDplbmNvZGVkPlxuIiAuCisJCQkgICAgICAiPC9pdGVtPlxuIjsKKwkJfSBlbHNpZiAoJGZvcm1hdCBlcSAnYXRvbScpIHsKKwkJCXByaW50ICI8L3VsPlxuPC9kaXY+XG4iIC4KKwkJCSAgICAgICI8L2NvbnRlbnQ+XG4iIC4KKwkJCSAgICAgICI8L2VudHJ5PlxuIjsKKwkJfQorCX0KKworCSMgZW5kIG9mIGZlZWQKKwlpZiAoJGZvcm1hdCBlcSAncnNzJykgeworCQlwcmludCAiPC9jaGFubmVsPlxuPC9yc3M+XG4iOworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ2F0b20nKSB7CisJCXByaW50ICI8L2ZlZWQ+XG4iOworCX0KK30KKworc3ViIGdpdF9yc3MgeworCWdpdF9mZWVkKCdyc3MnKTsKK30KKworc3ViIGdpdF9hdG9tIHsKKwlnaXRfZmVlZCgnYXRvbScpOworfQorCitzdWIgZ2l0X29wbWwgeworCW15IEBsaXN0ID0gZ2l0X2dldF9wcm9qZWN0c19saXN0KCRwcm9qZWN0X2ZpbHRlciwgJHN0cmljdF9leHBvcnQpOworCWlmICghQGxpc3QpIHsKKwkJZGllX2Vycm9yKDQwNCwgIk5vIHByb2plY3RzIGZvdW5kIik7CisJfQorCisJcHJpbnQgJGNnaS0+aGVhZGVyKAorCQktdHlwZSA9PiAndGV4dC94bWwnLAorCQktY2hhcnNldCA9PiAndXRmLTgnLAorCQktY29udGVudF9kaXNwb3NpdGlvbiA9PiAnaW5saW5lOyBmaWxlbmFtZT0ib3BtbC54bWwiJyk7CisKKwlteSAkdGl0bGUgPSBlc2NfaHRtbCgkc2l0ZV9uYW1lKTsKKwlteSAkZmlsdGVyID0gIiB3aXRoaW4gc3ViZGlyZWN0b3J5ICI7CisJaWYgKGRlZmluZWQgJHByb2plY3RfZmlsdGVyKSB7CisJCSRmaWx0ZXIgLj0gZXNjX2h0bWwoJHByb2plY3RfZmlsdGVyKTsKKwl9IGVsc2UgeworCQkkZmlsdGVyID0gIiI7CisJfQorCXByaW50IDw8WE1MOworPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxvcG1sIHZlcnNpb249IjEuMCI+Cis8aGVhZD4KKyAgPHRpdGxlPiR0aXRsZSBPUE1MIEV4cG9ydCRmaWx0ZXI8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8b3V0bGluZSB0ZXh0PSJnaXQgUlNTIGZlZWRzIj4KK1hNTAorCisJZm9yZWFjaCBteSAkcHIgKEBsaXN0KSB7CisJCW15ICVwcm9qID0gJSRwcjsKKwkJbXkgJGhlYWQgPSBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvansncGF0aCd9KTsKKwkJaWYgKCFkZWZpbmVkICRoZWFkKSB7CisJCQluZXh0OworCQl9CisJCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcHJvansncGF0aCd9IjsKKwkJbXkgJWNvID0gcGFyc2VfY29tbWl0KCRoZWFkKTsKKwkJaWYgKCElY28pIHsKKwkJCW5leHQ7CisJCX0KKworCQlteSAkcGF0aCA9IGVzY19odG1sKGNob3Bfc3RyKCRwcm9qeydwYXRoJ30sIDI1LCA1KSk7CisJCW15ICRyc3MgID0gZXNjX2F0dHIoaHJlZigncHJvamVjdCcgPT4gJHByb2p7J3BhdGgnfSwgJ2FjdGlvbicgPT4gJ3JzcycsIC1mdWxsID0+IDEpKTsKKwkJbXkgJGh0bWwgPSBlc2NfYXR0cihocmVmKCdwcm9qZWN0JyA9PiAkcHJvansncGF0aCd9LCAnYWN0aW9uJyA9PiAnc3VtbWFyeScsIC1mdWxsID0+IDEpKTsKKwkJcHJpbnQgIjxvdXRsaW5lIHR5cGU9XCJyc3NcIiB0ZXh0PVwiJHBhdGhcIiB0aXRsZT1cIiRwYXRoXCIgeG1sVXJsPVwiJHJzc1wiIGh0bWxVcmw9XCIkaHRtbFwiLz5cbiI7CisJfQorCXByaW50IDw8WE1MOworPC9vdXRsaW5lPgorPC9ib2R5PgorPC9vcG1sPgorWE1MCit9CmRpZmYgLS1naXQgYS9naXR3ZWIvc3RhdGljL2dpdC1mYXZpY29uLnBuZyBiL2dpdHdlYi9zdGF0aWMvZ2l0LWZhdmljb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZTM1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvc3RhdGljL2dpdC1mYXZpY29uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9naXR3ZWIvc3RhdGljL2dpdC1sb2dvLnBuZyBiL2dpdHdlYi9zdGF0aWMvZ2l0LWxvZ28ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZWRlMmUKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvc3RhdGljL2dpdC1sb2dvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9naXR3ZWIvc3RhdGljL2dpdHdlYi5jc3MgYi9naXR3ZWIvc3RhdGljL2dpdHdlYi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxMjYwMQotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9zdGF0aWMvZ2l0d2ViLmNzcwpAQCAtMCwwICsxLDY4NiBAQAorYm9keSB7CisJZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CisJZm9udC1zaXplOiBzbWFsbDsKKwlib3JkZXI6IHNvbGlkICNkOWQ4ZDE7CisJYm9yZGVyLXdpZHRoOiAxcHg7CisJbWFyZ2luOiAxMHB4OworCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CisJY29sb3I6ICMwMDAwMDA7Cit9CisKK2EgeworCWNvbG9yOiAjMDAwMGNjOworfQorCithOmhvdmVyLCBhOnZpc2l0ZWQsIGE6YWN0aXZlIHsKKwljb2xvcjogIzg4MDAwMDsKK30KKworc3Bhbi5jbnRybCB7CisJYm9yZGVyOiBkYXNoZWQgI2FhYWFhYTsKKwlib3JkZXItd2lkdGg6IDFweDsKKwlwYWRkaW5nOiAwcHggMnB4IDBweCAycHg7CisJbWFyZ2luOiAgMHB4IDJweCAwcHggMnB4OworfQorCitpbWcubG9nbyB7CisJZmxvYXQ6IHJpZ2h0OworCWJvcmRlci13aWR0aDogMHB4OworfQorCitpbWcuYXZhdGFyIHsKKwl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCitpbWcuYmxvYiB7CisJbWF4LWhlaWdodDogMTAwJTsKKwltYXgtd2lkdGg6IDEwMCU7Cit9CisKK2EubGlzdCBpbWcuYXZhdGFyIHsKKwlib3JkZXItc3R5bGU6IG5vbmU7Cit9CisKK2Rpdi5wYWdlX2hlYWRlciB7CisJaGVpZ2h0OiAyNXB4OworCXBhZGRpbmc6IDhweDsKKwlmb250LXNpemU6IDE1MCU7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJYmFja2dyb3VuZC1jb2xvcjogI2Q5ZDhkMTsKK30KKworZGl2LnBhZ2VfaGVhZGVyIGE6dmlzaXRlZCwgYS5oZWFkZXIgeworCWNvbG9yOiAjMDAwMGNjOworfQorCitkaXYucGFnZV9oZWFkZXIgYTpob3ZlciB7CisJY29sb3I6ICM4ODAwMDA7Cit9CisKK2Rpdi5wYWdlX25hdiB7CisJcGFkZGluZzogOHB4OworfQorCitkaXYucGFnZV9uYXYgYTp2aXNpdGVkIHsKKwljb2xvcjogIzAwMDBjYzsKK30KKworZGl2LnBhZ2VfcGF0aCB7CisJcGFkZGluZzogOHB4OworCWZvbnQtd2VpZ2h0OiBib2xkOworCWJvcmRlcjogc29saWQgI2Q5ZDhkMTsKKwlib3JkZXItd2lkdGg6IDBweCAwcHggMXB4OworfQorCitkaXYucGFnZV9mb290ZXIgeworCWhlaWdodDogMjJweDsKKwlwYWRkaW5nOiA0cHggOHB4OworCWJhY2tncm91bmQtY29sb3I6ICNkOWQ4ZDE7Cit9CisKK2Rpdi5wYWdlX2Zvb3Rlcl90ZXh0IHsKKwlsaW5lLWhlaWdodDogMjJweDsKKwlmbG9hdDogbGVmdDsKKwljb2xvcjogIzU1NTU1NTsKKwlmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2RpdiNnZW5lcmF0aW5nX2luZm8geworCW1hcmdpbjogNHB4OworCWZvbnQtc2l6ZTogc21hbGxlcjsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7CisJY29sb3I6ICM1MDUwNTA7Cit9CisKK2Rpdi5wYWdlX2JvZHkgeworCXBhZGRpbmc6IDhweDsKKwlmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitkaXYudGl0bGUsIGEudGl0bGUgeworCWRpc3BsYXk6IGJsb2NrOworCXBhZGRpbmc6IDZweCA4cHg7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJYmFja2dyb3VuZC1jb2xvcjogI2VkZWNlNjsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJY29sb3I6ICMwMDAwMDA7Cit9CisKK2Rpdi5yZWFkbWUgeworCXBhZGRpbmc6IDhweDsKK30KKworYS50aXRsZTpob3ZlciB7CisJYmFja2dyb3VuZC1jb2xvcjogI2Q5ZDhkMTsKK30KKworZGl2LnRpdGxlX3RleHQgeworCXBhZGRpbmc6IDZweCAwcHg7CisJYm9yZGVyOiBzb2xpZCAjZDlkOGQxOworCWJvcmRlci13aWR0aDogMHB4IDBweCAxcHg7CisJZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworZGl2LmxvZ19ib2R5IHsKKwlwYWRkaW5nOiA4cHggOHB4IDhweCAxNTBweDsKK30KKworc3Bhbi5hZ2UgeworCXBvc2l0aW9uOiByZWxhdGl2ZTsKKwlmbG9hdDogbGVmdDsKKwl3aWR0aDogMTQycHg7CisJZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLnNpZ25vZmYgeworCWNvbG9yOiAjODg4ODg4OworfQorCitkaXYubG9nX2xpbmsgeworCXBhZGRpbmc6IDBweCA4cHg7CisJZm9udC1zaXplOiA3MCU7CisJZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CisJZm9udC1zdHlsZTogbm9ybWFsOworCXBvc2l0aW9uOiByZWxhdGl2ZTsKKwlmbG9hdDogbGVmdDsKKwl3aWR0aDogMTM2cHg7Cit9CisKK2Rpdi5saXN0X2hlYWQgeworCXBhZGRpbmc6IDZweCA4cHggNHB4OworCWJvcmRlcjogc29saWQgI2Q5ZDhkMTsKKwlib3JkZXItd2lkdGg6IDFweCAwcHggMHB4OworCWZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLmF1dGhvcl9kYXRlLCAuYXV0aG9yIHsKKwlmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2Rpdi5hdXRob3JfZGF0ZSB7CisJcGFkZGluZzogOHB4OworCWJvcmRlcjogc29saWQgI2Q5ZDhkMTsKKwlib3JkZXItd2lkdGg6IDBweCAwcHggMXB4IDBweDsKK30KKworYS5saXN0IHsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJY29sb3I6ICMwMDAwMDA7Cit9CisKK2Euc3ViamVjdCwgYS5uYW1lIHsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKwordGFibGUudGFncyBhLnN1YmplY3QgeworCWZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKK2EubGlzdDpob3ZlciB7CisJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisJY29sb3I6ICM4ODAwMDA7Cit9CisKK2EudGV4dCB7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworCWNvbG9yOiAjMDAwMGNjOworfQorCithLnRleHQ6dmlzaXRlZCB7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworCWNvbG9yOiAjODgwMDAwOworfQorCithLnRleHQ6aG92ZXIgeworCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworCWNvbG9yOiAjODgwMDAwOworfQorCit0YWJsZSB7CisJcGFkZGluZzogOHB4IDRweDsKKwlib3JkZXItc3BhY2luZzogMDsKK30KKwordGFibGUuZGlmZl90cmVlIHsKKwlmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCit0YWJsZS5jb21iaW5lZC5kaWZmX3RyZWUgdGggeworCXRleHQtYWxpZ246IGNlbnRlcjsKK30KKwordGFibGUuY29tYmluZWQuZGlmZl90cmVlIHRkIHsKKwlwYWRkaW5nLXJpZ2h0OiAyNHB4OworfQorCit0YWJsZS5jb21iaW5lZC5kaWZmX3RyZWUgdGgubGluaywKK3RhYmxlLmNvbWJpbmVkLmRpZmZfdHJlZSB0ZC5saW5rIHsKKwlwYWRkaW5nOiAwcHggMnB4OworfQorCit0YWJsZS5jb21iaW5lZC5kaWZmX3RyZWUgdGQubm9jaGFuZ2UgYSB7CisJY29sb3I6ICM2NjY2ZmY7Cit9CisKK3RhYmxlLmNvbWJpbmVkLmRpZmZfdHJlZSB0ZC5ub2NoYW5nZSBhOmhvdmVyLAordGFibGUuY29tYmluZWQuZGlmZl90cmVlIHRkLm5vY2hhbmdlIGE6dmlzaXRlZCB7CisJY29sb3I6ICNkMDY2NjY7Cit9CisKK3RhYmxlLmJsYW1lIHsKKwlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworfQorCit0YWJsZS5ibGFtZSB0ZCB7CisJcGFkZGluZzogMHB4IDVweDsKKwlmb250LXNpemU6IDEwMCU7CisJdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGggeworCXBhZGRpbmc6IDJweCA1cHg7CisJZm9udC1zaXplOiAxMDAlOworCXRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy8qIGRvIG5vdCBjaGFuZ2Ugcm93IHN0eWxlIG9uIGhvdmVyIGZvciAnYmxhbWUnIHZpZXcgKi8KK3RyLmxpZ2h0LAordGFibGUuYmxhbWUgLmxpZ2h0OmhvdmVyIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOworfQorCit0ci5kYXJrLAordGFibGUuYmxhbWUgLmRhcms6aG92ZXIgeworCWJhY2tncm91bmQtY29sb3I6ICNmNmY2ZjA7Cit9CisKKy8qIGN1cnJlbnRseSBib3RoIHVzZSB0aGUgc2FtZSwgYnV0IGl0IGNhbiBjaGFuZ2UgKi8KK3RyLmxpZ2h0OmhvdmVyLAordHIuZGFyazpob3ZlciB7CisJYmFja2dyb3VuZC1jb2xvcjogI2VkZWNlNjsKK30KKworLyogYm91bmRhcnkgY29tbWl0cyBpbiAnYmxhbWUnIHZpZXcgKi8KKy8qIGFuZCBjb21taXRzIHdpdGhvdXQgInByZXZpb3VzIiAqLwordHIuYm91bmRhcnkgdGQuc2hhMSwKK3RyLm5vLXByZXZpb3VzIHRkLmxpbmVuciB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy8qIGZvciAnYmxhbWVfaW5jcmVtZW50YWwnLCBkdXJpbmcgcHJvY2Vzc2luZyAqLwordHIuY29sb3IxIHsgYmFja2dyb3VuZC1jb2xvcjogI2Y2ZmZmNjsgfQordHIuY29sb3IyIHsgYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjZmZjsgfQordHIuY29sb3IzIHsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjZmNjsgfQorCit0ZCB7CisJcGFkZGluZzogMnB4IDVweDsKKwlmb250LXNpemU6IDEwMCU7CisJdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGQubGluaywgdGQuc2VsZmxpbmsgeworCXBhZGRpbmc6IDJweCA1cHg7CisJZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CisJZm9udC1zaXplOiA3MCU7Cit9CisKK3RkLnNlbGZsaW5rIHsKKwlwYWRkaW5nLXJpZ2h0OiAwcHg7Cit9CisKK3RkLnNoYTEgeworCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKKy5lcnJvciB7CisJY29sb3I6IHJlZDsKKwliYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7Cit9CisKK3RkLmN1cnJlbnRfaGVhZCB7CisJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKK3RkLmNhdGVnb3J5IHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZDlkOGQxOworCWJvcmRlci10b3A6IDFweCBzb2xpZCAjMDAwMDAwOworCWJvcmRlci1sZWZ0OiAxcHggc29saWQgIzAwMDAwMDsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKwordGFibGUuZGlmZl90cmVlIHNwYW4uZmlsZV9zdGF0dXMubmV3IHsKKwljb2xvcjogIzAwODAwMDsKK30KKwordGFibGUuZGlmZl90cmVlIHNwYW4uZmlsZV9zdGF0dXMuZGVsZXRlZCB7CisJY29sb3I6ICNjMDAwMDA7Cit9CisKK3RhYmxlLmRpZmZfdHJlZSBzcGFuLmZpbGVfc3RhdHVzLm1vdmVkLAordGFibGUuZGlmZl90cmVlIHNwYW4uZmlsZV9zdGF0dXMubW9kZV9jaG5nZSB7CisJY29sb3I6ICM3Nzc3Nzc7Cit9CisKK3RhYmxlLmRpZmZfdHJlZSBzcGFuLmZpbGVfc3RhdHVzLmNvcGllZCB7CisgIGNvbG9yOiAjNzBhMDcwOworfQorCisvKiBub2FnZTogIk5vIGNvbW1pdHMiICovCit0YWJsZS5wcm9qZWN0X2xpc3QgdGQubm9hZ2UgeworCWNvbG9yOiAjODA4MDgwOworCWZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLyogYWdlMjogNjAqNjAqMjQqMiA8PSBhZ2UgKi8KK3RhYmxlLnByb2plY3RfbGlzdCB0ZC5hZ2UyLCB0YWJsZS5ibGFtZSB0ZC5hZ2UyIHsKKwlmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy8qIGFnZTE6IDYwKjYwKjIgPD0gYWdlIDwgNjAqNjAqMjQqMiAqLwordGFibGUucHJvamVjdF9saXN0IHRkLmFnZTEgeworCWNvbG9yOiAjMDA5OTAwOworCWZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKwordGFibGUuYmxhbWUgdGQuYWdlMSB7CisJY29sb3I6ICMwMDk5MDA7CisJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKKy8qIGFnZTA6IGFnZSA8IDYwKjYwKjIgKi8KK3RhYmxlLnByb2plY3RfbGlzdCB0ZC5hZ2UwIHsKKwljb2xvcjogIzAwOTkwMDsKKwlmb250LXN0eWxlOiBpdGFsaWM7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3RhYmxlLmJsYW1lIHRkLmFnZTAgeworCWNvbG9yOiAjMDA5OTAwOworCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCit0ZC5wcmUsIGRpdi5wcmUsIGRpdi5kaWZmIHsKKwlmb250LWZhbWlseTogbW9ub3NwYWNlOworCWZvbnQtc2l6ZTogMTJweDsKKwl3aGl0ZS1zcGFjZTogcHJlOworfQorCit0ZC5tb2RlIHsKKwlmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCisvKiBwcm9ncmVzcyBvZiBibGFtZV9pbnRlcmFjdGl2ZSAqLworZGl2I3Byb2dyZXNzX2JhciB7CisJaGVpZ2h0OiAycHg7CisJbWFyZ2luLWJvdHRvbTogLTJweDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZDhkOWQwOworfQorZGl2I3Byb2dyZXNzX2luZm8geworCWZsb2F0OiByaWdodDsKKwl0ZXh0LWFsaWduOiByaWdodDsKK30KKworLyogZm9ybWF0IG9mIChvcHRpb25hbCkgb2JqZWN0cyBzaXplIGluICd0cmVlJyB2aWV3ICovCit0ZC5zaXplIHsKKwlmb250LWZhbWlseTogbW9ub3NwYWNlOworCXRleHQtYWxpZ246IHJpZ2h0OworfQorCisvKiBzdHlsaW5nIG9mIGRpZmZzIChwYXRjaHNldHMpOiBjb21taXRkaWZmIGFuZCBibG9iZGlmZiB2aWV3cyAqLworZGl2LmRpZmYuaGVhZGVyLAorZGl2LmRpZmYuZXh0ZW5kZWRfaGVhZGVyIHsKKwl3aGl0ZS1zcGFjZTogbm9ybWFsOworfQorCitkaXYuZGlmZi5oZWFkZXIgeworCWZvbnQtd2VpZ2h0OiBib2xkOworCisJYmFja2dyb3VuZC1jb2xvcjogI2VkZWNlNjsKKworCW1hcmdpbi10b3A6IDRweDsKKwlwYWRkaW5nOiA0cHggMHB4IDJweCAwcHg7CisJYm9yZGVyOiBzb2xpZCAjZDlkOGQxOworCWJvcmRlci13aWR0aDogMXB4IDBweCAxcHggMHB4OworfQorCitkaXYuZGlmZi5oZWFkZXIgYS5wYXRoIHsKKwl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworZGl2LmRpZmYuZXh0ZW5kZWRfaGVhZGVyLAorZGl2LmRpZmYuZXh0ZW5kZWRfaGVhZGVyIGEucGF0aCwKK2Rpdi5kaWZmLmV4dGVuZGVkX2hlYWRlciBhLmhhc2ggeworCWNvbG9yOiAjNzc3Nzc3OworfQorCitkaXYuZGlmZi5leHRlbmRlZF9oZWFkZXIgLmluZm8geworCWNvbG9yOiAjYjBiMGIwOworfQorCitkaXYuZGlmZi5leHRlbmRlZF9oZWFkZXIgeworCWJhY2tncm91bmQtY29sb3I6ICNmNmY1ZWU7CisJcGFkZGluZzogMnB4IDBweCAycHggMHB4OworfQorCitkaXYuZGlmZiBhLmxpc3QsCitkaXYuZGlmZiBhLnBhdGgsCitkaXYuZGlmZiBhLmhhc2ggeworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworZGl2LmRpZmYgYS5saXN0OmhvdmVyLAorZGl2LmRpZmYgYS5wYXRoOmhvdmVyLAorZGl2LmRpZmYgYS5oYXNoOmhvdmVyIHsKKwl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworZGl2LmRpZmYudG9fZmlsZSBhLnBhdGgsCitkaXYuZGlmZi50b19maWxlIHsKKwljb2xvcjogIzAwNzAwMDsKK30KKworZGl2LmRpZmYuYWRkIHsKKwljb2xvcjogIzAwODgwMDsKK30KKworZGl2LmRpZmYuYWRkIHNwYW4ubWFya2VkIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjYWFmZmFhOworfQorCitkaXYuZGlmZi5mcm9tX2ZpbGUgYS5wYXRoLAorZGl2LmRpZmYuZnJvbV9maWxlIHsKKwljb2xvcjogI2FhMDAwMDsKK30KKworZGl2LmRpZmYucmVtIHsKKwljb2xvcjogI2NjMDAwMDsKK30KKworZGl2LmRpZmYucmVtIHNwYW4ubWFya2VkIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZmZhYWFhOworfQorCitkaXYuZGlmZi5jaHVua19oZWFkZXIgYSwKK2Rpdi5kaWZmLmNodW5rX2hlYWRlciB7CisJY29sb3I6ICM5OTAwOTk7Cit9CisKK2Rpdi5kaWZmLmNodW5rX2hlYWRlciB7CisJYm9yZGVyOiBkb3R0ZWQgI2ZmZTBmZjsKKwlib3JkZXItd2lkdGg6IDFweCAwcHggMHB4IDBweDsKKwltYXJnaW4tdG9wOiAycHg7Cit9CisKK2Rpdi5kaWZmLmNodW5rX2hlYWRlciBzcGFuLmNodW5rX2luZm8geworCWJhY2tncm91bmQtY29sb3I6ICNmZmVlZmY7Cit9CisKK2Rpdi5kaWZmLmNodW5rX2hlYWRlciBzcGFuLnNlY3Rpb24geworCWNvbG9yOiAjYWEyMmFhOworfQorCitkaXYuZGlmZi5pbmNvbXBsZXRlIHsKKwljb2xvcjogI2NjY2NjYzsKK30KKworZGl2LmRpZmYubm9kaWZmZXJlbmNlcyB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJY29sb3I6ICM2MDAwMDA7Cit9CisKKy8qIHNpZGUtYnktc2lkZSBkaWZmICovCitkaXYuY2h1bmtfYmxvY2sgeworCW92ZXJmbG93OiBoaWRkZW47Cit9CisKK2Rpdi5jaHVua19ibG9jayBkaXYub2xkIHsKKwlmbG9hdDogbGVmdDsKKwl3aWR0aDogNTAlOworCW92ZXJmbG93OiBoaWRkZW47Cit9CisKK2Rpdi5jaHVua19ibG9jayBkaXYubmV3IHsKKwltYXJnaW4tbGVmdDogNTAlOworCXdpZHRoOiA1MCU7Cit9CisKK2Rpdi5jaHVua19ibG9jay5yZW0gZGl2Lm9sZCBkaXYuZGlmZi5yZW0geworCWJhY2tncm91bmQtY29sb3I6ICNmZmY1ZjU7Cit9CitkaXYuY2h1bmtfYmxvY2suYWRkIGRpdi5uZXcgZGl2LmRpZmYuYWRkIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZjhmZmY4OworfQorZGl2LmNodW5rX2Jsb2NrLmNoZyBkaXYgICAgIGRpdi5kaWZmIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmYwOworfQorZGl2LmNodW5rX2Jsb2NrLmN0eCBkaXYgICAgIGRpdi5kaWZmLmN0eCB7CisJY29sb3I6ICM0MDQwNDA7Cit9CisKKworZGl2LmluZGV4X2luY2x1ZGUgeworCWJvcmRlcjogc29saWQgI2Q5ZDhkMTsKKwlib3JkZXItd2lkdGg6IDBweCAwcHggMXB4OworCXBhZGRpbmc6IDEycHggOHB4OworfQorCitkaXYuc2VhcmNoIHsKKwlmb250LXNpemU6IDEwMCU7CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKKwltYXJnaW46IDRweCA4cHg7CisJZmxvYXQ6IHJpZ2h0OworCXRvcDogNTZweDsKKwlyaWdodDogMTJweAorfQorCitkaXYucHJvanNlYXJjaCB7CisJdGV4dC1hbGlnbjogY2VudGVyOworCW1hcmdpbjogMjBweCAwcHg7Cit9CisKK2Rpdi5wcm9qc2VhcmNoIGZvcm0geworCW1hcmdpbi1ib3R0b206IDJweDsKK30KKwordGQubGluZW5yIHsKKwl0ZXh0LWFsaWduOiByaWdodDsKK30KKworYS5saW5lbnIgeworCWNvbG9yOiAjOTk5OTk5OworCXRleHQtZGVjb3JhdGlvbjogbm9uZQorfQorCithLnJzc19sb2dvIHsKKwlmbG9hdDogcmlnaHQ7CisJcGFkZGluZzogM3B4IDVweDsKKwlsaW5lLWhlaWdodDogMTBweDsKKwlib3JkZXI6IDFweCBzb2xpZDsKKwlib3JkZXItY29sb3I6ICNmY2M3YTUgIzdkMzMwMiAjM2UxYTAxICNmZjk1NGU7CisJY29sb3I6ICNmZmZmZmY7CisJYmFja2dyb3VuZC1jb2xvcjogI2ZmNjYwMDsKKwlmb250LXdlaWdodDogYm9sZDsKKwlmb250LWZhbWlseTogc2Fucy1zZXJpZjsKKwlmb250LXNpemU6IDcwJTsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCithLnJzc19sb2dvOmhvdmVyIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZWU1NTAwOworfQorCithLnJzc19sb2dvLmdlbmVyaWMgeworCWJhY2tncm91bmQtY29sb3I6ICNmZjg4MDA7Cit9CisKK2EucnNzX2xvZ28uZ2VuZXJpYzpob3ZlciB7CisJYmFja2dyb3VuZC1jb2xvcjogI2VlNzcwMDsKK30KKworc3Bhbi5yZWZzIHNwYW4geworCXBhZGRpbmc6IDBweCA0cHg7CisJZm9udC1zaXplOiA3MCU7CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKKwlib3JkZXI6IDFweCBzb2xpZDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZmZhYWZmOworCWJvcmRlci1jb2xvcjogI2ZmY2NmZiAjZmYwMGVlICNmZjAwZWUgI2ZmY2NmZjsKK30KKworc3Bhbi5yZWZzIHNwYW4gYSB7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworCWNvbG9yOiBpbmhlcml0OworfQorCitzcGFuLnJlZnMgc3BhbiBhOmhvdmVyIHsKKwl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworc3Bhbi5yZWZzIHNwYW4uaW5kaXJlY3QgeworCWZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5yZWZzIHNwYW4ucmVmIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjYWFhYWZmOworCWJvcmRlci1jb2xvcjogI2NjY2NmZiAjMDAzM2NjICMwMDMzY2MgI2NjY2NmZjsKK30KKworc3Bhbi5yZWZzIHNwYW4udGFnIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmFhOworCWJvcmRlci1jb2xvcjogI2ZmZmZjYyAjZmZlZTAwICNmZmVlMDAgI2ZmZmZjYzsKK30KKworc3Bhbi5yZWZzIHNwYW4uaGVhZCB7CisJYmFja2dyb3VuZC1jb2xvcjogI2FhZmZhYTsKKwlib3JkZXItY29sb3I6ICNjY2ZmY2MgIzAwY2MzMyAjMDBjYzMzICNjY2ZmY2M7Cit9CisKK3NwYW4uYXRuaWdodCB7CisJY29sb3I6ICNjYzAwMDA7Cit9CisKK3NwYW4ubWF0Y2ggeworCWNvbG9yOiAjZTAwMDAwOworfQorCitkaXYuYmluYXJ5IHsKKwlmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2Rpdi5yZW1vdGUgeworCW1hcmdpbjogLjVlbTsKKwlib3JkZXI6IDFweCBzb2xpZCAjZDlkOGQxOworCWRpc3BsYXk6IGlubGluZS1ibG9jazsKK30KKworLyogSmF2YVNjcmlwdC1iYXNlZCB0aW1lem9uZSBtYW5pcHVsYXRpb24gKi8KKworLnBvcHVwIHsgLyogdGltZXpvbmUgc2VsZWN0aW9uIFVJICovCisJcG9zaXRpb246IGFic29sdXRlOworCS8qICJ0b3A6IDA7IHJpZ2h0OiAwOyIgd291bGQgYmUgYmV0dGVyLCBpZiBub3QgZm9yIGJ1Z3MgaW4gYnJvd3NlcnMgKi8KKwl0b3A6IDA7IGxlZnQ6IDA7CisJYm9yZGVyOiAxcHggc29saWQ7CisJcGFkZGluZzogMnB4OworCWJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7CisJZm9udC1zdHlsZTogbm9ybWFsOworCWNvbG9yOiAjMDAwMDAwOworCWN1cnNvcjogYXV0bzsKK30KKworLmNsb3NlLWJ1dHRvbiB7IC8qIGNsb3NlIHRpbWV6b25lIHNlbGVjdGlvbiBVSSB3aXRob3V0IHNlbGVjdGluZyAqLworCS8qIGZsb2F0IGRvZXNuJ3Qgd29yayB3aXRoaW4gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGNvbnRhaW5lciwKKwkgKiBpZiB3aWR0aCBvZiBjb250YWluZXIgaXMgbm90IHNldCBleHBsaWNpdGx5ICovCisJLyogZmxvYXQ6IHJpZ2h0OyAqLworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwl0b3A6IDBweDsgcmlnaHQ6IDBweDsKKwlib3JkZXI6ICAxcHggc29saWQgZ3JlZW47CisJbWFyZ2luOiAgMXB4IDFweCAxcHggMXB4OworCXBhZGRpbmctYm90dG9tOiAycHg7CisJd2lkdGg6ICAgICAxMnB4OworCWhlaWdodDogICAgMTBweDsKKwlmb250LXNpemU6ICA5cHg7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJdGV4dC1hbGlnbjogY2VudGVyOworCWJhY2tncm91bmQtY29sb3I6ICNmZmYwZjA7CisJY3Vyc29yOiBwb2ludGVyOworfQorCisKKy8qIFN0eWxlIGRlZmluaXRpb24gZ2VuZXJhdGVkIGJ5IGhpZ2hsaWdodCAyLjQuNSwgaHR0cDovL3d3dy5hbmRyZS1zaW1vbi5kZS8gKi8KKworLyogSGlnaGxpZ2h0aW5nIHRoZW1lIGRlZmluaXRpb246ICovCisKKy5udW0gICAgeyBjb2xvcjojMjkyOGZmOyB9CisuZXNjICAgIHsgY29sb3I6I2ZmMDBmZjsgfQorLnN0ciAgICB7IGNvbG9yOiNmZjAwMDA7IH0KKy5kc3RyICAgeyBjb2xvcjojODE4MTAwOyB9Cisuc2xjICAgIHsgY29sb3I6IzgzODE4MzsgZm9udC1zdHlsZTppdGFsaWM7IH0KKy5jb20gICAgeyBjb2xvcjojODM4MTgzOyBmb250LXN0eWxlOml0YWxpYzsgfQorLmRpciAgICB7IGNvbG9yOiMwMDgyMDA7IH0KKy5zeW0gICAgeyBjb2xvcjojMDAwMDAwOyB9CisubGluZSAgIHsgY29sb3I6IzU1NTU1NTsgfQorLmt3YSAgICB7IGNvbG9yOiMwMDAwMDA7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KKy5rd2IgICAgeyBjb2xvcjojODMwMDAwOyB9Cisua3djICAgIHsgY29sb3I6IzAwMDAwMDsgZm9udC13ZWlnaHQ6Ym9sZDsgfQorLmt3ZCAgICB7IGNvbG9yOiMwMTAxODE7IH0KZGlmZiAtLWdpdCBhL2dpdHdlYi9zdGF0aWMvanMvUkVBRE1FIGIvZ2l0d2ViL3N0YXRpYy9qcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0NjBlZAotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9zdGF0aWMvanMvUkVBRE1FCkBAIC0wLDAgKzEsMjAgQEAKK0dJVCB3ZWIgaW50ZXJmYWNlIChnaXR3ZWIpIC0gSmF2YVNjcmlwdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZGlyZWN0b3J5IGhvbGRzIEphdmFTY3JpcHQgY29kZSB1c2VkIGJ5IGdpdHdlYiAoR0lUIHdlYiBpbnRlcmZhY2UpLgorU2NyaXB0cyBmcm9tIHRoZXJlIHdvdWxkIGJlIGNvbmNhdGVuYXRlZCB0b2dldGhlciBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkCitieSBnaXR3ZWIvTWFrZWZpbGUgaW50byBnaXR3ZWIvc3RhdGljL2dpdHdlYi5qcywgZHVyaW5nIGJ1aWxkaW5nIG9mCitnaXR3ZWIvZ2l0d2ViLmNnaSAoZHVyaW5nIGdpdHdlYiBidWlsZGluZykuICBUaGUgcmVzdWx0aW5nIGZpbGUgKG9yIGl0cworbWluaWZpY2F0aW9uKSB3b3VsZCB0aGVuIGJlIGluc3RhbGxlZCAvIGRlcGxveWVkIHRvZ2V0aGVyIHdpdGggZ2l0d2ViLgorCitTY3JpcHRzIGluICdsaWIvJyBzdWJkaXJlY3RvcnkgY29tcG9zZSBnZW5lcmljIEphdmFTY3JpcHQgbGlicmFyeSwKK3Byb3ZpZGluZyBmZWF0dXJlcyByZXF1aXJlZCBieSBnaXR3ZWIgYnV0IGluIG5vIHdheSBsaW1pdGVkIHRvIGdpdHdlYgorb25seS4gIEluIHRoZSBmdXR1cmUgdGhvc2Ugc2NyaXB0cyBjb3VsZCBiZSByZXBsYWNlZCBieSBzb21lIEphdmFTY3JpcHQKK2xpYnJhcnkgLyBmcmFtZXdvcmssIGxpa2UgZS5nLiBqUXVlcnksIFlVSSwgUHJvdG90eXBlLCBNb29Ub29scywgRG9qbywKK0V4dEpTLCBTY3JpcHQuYWN1bG8udXMgb3IgU3Byb3V0Q29yZS4KKworQWxsIHNjcmlwdHMgdGhhdCBtYW5pcHVsYXRlIGdpdHdlYiBvdXRwdXQgc2hvdWxkIGJlIHB1dCBvdXRzaWRlICdsaWIvJywKK2RpcmVjdGx5IGluIHRoaXMgZGlyZWN0b3J5ICgnZ2l0d2ViL3N0YXRpYy9qcy8nKS4gIFRob3NlIHNjcmlwdHMgd291bGQKK2hhdmUgdG8gYmUgcmV3cml0dGVuIGlmIGdpdHdlYiBtb3ZlcyB0byB1c2luZyBzb21lIEphdmFTY3JpcHQgbGlicmFyeS4KKworU2VlIGFsc28gY29tbWVudHMgaW4gZ2l0d2ViL01ha2VmaWxlLgpkaWZmIC0tZ2l0IGEvZ2l0d2ViL3N0YXRpYy9qcy9hZGp1c3QtdGltZXpvbmUuanMgYi9naXR3ZWIvc3RhdGljL2pzL2FkanVzdC10aW1lem9uZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzY3Nzc5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL3N0YXRpYy9qcy9hZGp1c3QtdGltZXpvbmUuanMKQEAgLTAsMCArMSwzMzAgQEAKKy8vIENvcHlyaWdodCAoQykgMjAxMSwgSm9obiAnV2FydGhvZzknIEhhd2xleSA8d2FydGhvZzlAZWFnbGVzY3JhZy5uZXQ+CisvLyAgICAgICAgICAgICAgIDIwMTEsIEpha3ViIE5hcmVic2tpIDxqbmFyZWJAZ21haWwuY29tPgorCisvKioKKyAqIEBmaWxlT3ZlcnZpZXcgTWFuaXB1bGF0ZSBkYXRlcyBpbiBnaXR3ZWIgb3V0cHV0LCBhZGp1c3RpbmcgdGltZXpvbmUKKyAqIEBsaWNlbnNlIEdQTHYyIG9yIGxhdGVyCisgKi8KKworLyoqCisgKiBHZXQgY29tbW9uIHRpbWV6b25lLCBhZGQgVUkgZm9yIGNoYW5naW5nIHRpbWV6b25lcywgYW5kIGFkanVzdAorICogZGF0ZXMgdG8gdXNlIHJlcXVlc3RlZCBjb21tb24gdGltZXpvbmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIG9ubG9hZCBldmVudCAoYWRkZWQgdG8gd2luZG93Lm9ubG9hZCkuCisgKgorICogQHBhcmFtIHtTdHJpbmd9IHR6RGVmYXVsdDogZGVmYXVsdCB0aW1lem9uZSwgaWYgdGhlcmUgaXMgbm8gY29va2llCisgKiBAcGFyYW0ge09iamVjdH0gdHpDb29raWVJbmZvOiBvYmplY3QgbGl0ZXJhbCB3aXRoIGluZm8gYWJvdXQgY29va2llIHRvIHN0b3JlIHRpbWV6b25lCisgKiBAcGFyYW0ge1N0cmluZ30gdHpDb29raWVJbmZvLm5hbWU6IG5hbWUgb2YgY29va2llIHRvIHN0b3JlIHRpbWV6b25lCisgKiBAcGFyYW0ge1N0cmluZ30gdHpDbGFzc05hbWU6IGRlbm90ZXMgZWxlbWVudHMgd2l0aCBkYXRlIHRvIGJlIGFkanVzdGVkCisgKi8KK2Z1bmN0aW9uIG9ubG9hZFRaU2V0dXAodHpEZWZhdWx0LCB0ekNvb2tpZUluZm8sIHR6Q2xhc3NOYW1lKSB7CisJdmFyIHR6Q29va2llVFogPSBnZXRDb29raWUodHpDb29raWVJbmZvLm5hbWUsIHR6Q29va2llSW5mbyk7CisJdmFyIHR6ID0gdHpEZWZhdWx0OworCisJaWYgKHR6Q29va2llVFopIHsKKwkJLy8gc2V0IHRpbWV6b25lIHRvIHZhbHVlIHNhdmVkIGluIGEgY29va2llCisJCXR6ID0gdHpDb29raWVUWjsKKwkJLy8gcmVmcmVzaCBjb29raWUsIHNvIGl0cyBleHBpcmF0aW9uIGNvdW50cyBmcm9tIGxhc3QgdXNlIG9mIGdpdHdlYgorCQlzZXRDb29raWUodHpDb29raWVJbmZvLm5hbWUsIHR6Q29va2llVFosIHR6Q29va2llSW5mbyk7CisJfQorCisJLy8gYWRkIFVJIGZvciBjaGFuZ2luZyB0aW1lem9uZQorCWFkZENoYW5nZVRaKHR6LCB0ekNvb2tpZUluZm8sIHR6Q2xhc3NOYW1lKTsKKworCS8vIHNlcnZlci1zaWRlIG9mIGdpdHdlYiBwcm9kdWNlcyBkYXRldGltZSBpbiBVVEMsCisJLy8gc28gaWYgdHogaXMgJ3V0YycgdGhlcmUgaXMgbm8gbmVlZCBmb3IgY2hhbmdlcworCXZhciBub2NoYW5nZSA9IHR6ID09PSAndXRjJzsKKworCS8vIGFkanVzdCBkYXRlcyB0byB1c2Ugc3BlY2lmaWVkIGNvbW1vbiB0aW1lem9uZQorCWZpeERhdGV0aW1lVFoodHosIHR6Q2xhc3NOYW1lLCBub2NoYW5nZSk7Cit9CisKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworLyogQ2hhbmdpbmcgZGF0ZXMgdG8gdXNlIHJlcXVlc3RlZCB0aW1lem9uZSAqLworCisvKioKKyAqIFJlcGxhY2UgUkZDLTI4MjIgZGF0ZXMgY29udGFpbmVkIGluIFNQQU4gZWxlbWVudHMgd2l0aCB0ekNsYXNzTmFtZQorICogQ1NTIGNsYXNzIHdpdGggZXF1aXZhbGVudCBkYXRlcyBpbiBnaXZlbiB0aW1lem9uZS4KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gdHo6IG51bWVyaWMgdGltZXpvbmUgaW4gJygtfCspSEhNTScgZm9ybWF0LCBvciAndXRjJywgb3IgJ2xvY2FsJworICogQHBhcmFtIHtTdHJpbmd9IHR6Q2xhc3NOYW1lOiBzcGVjaWZpZXMgZWxlbWVudHMgdG8gYmUgY2hhbmdlZAorICogQHBhcmFtIHtCb29sZWFufSBub2NoYW5nZTogbWFya3VwIGZvciB0aW1lem9uZSBjaGFuZ2UsIGJ1dCBkb24ndCBjaGFuZ2UgaXQKKyAqLworZnVuY3Rpb24gZml4RGF0ZXRpbWVUWih0eiwgdHpDbGFzc05hbWUsIG5vY2hhbmdlKSB7CisJLy8gc2FuaXR5IGNoZWNrLCBtZXRob2Qgc2hvdWxkIGJlIGVuc3VyZWQgYnkgY29tbW9uLWxpYi5qcworCWlmICghZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSkgeworCQlyZXR1cm47CisJfQorCisJLy8gdHJhbnNsYXRlIHRvIHRpbWV6b25lIGluICcoLXwrKUhITU0nIGZvcm1hdAorCXR6ID0gbm9ybWFsaXplVGltZXpvbmVJbmZvKHR6KTsKKworCS8vIE5PVEU6IHJlc3VsdCBvZiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHNob3VsZCBwcm9iYWJseSBiZSBjYWNoZWQKKwl2YXIgY2xhc3Nlc0ZvdW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0ekNsYXNzTmFtZSwgInNwYW4iKTsKKwlmb3IgKHZhciBpID0gMCwgbGVuID0gY2xhc3Nlc0ZvdW5kLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisJCXZhciBjdXJFbGVtZW50ID0gY2xhc3Nlc0ZvdW5kW2ldOworCisJCWN1ckVsZW1lbnQudGl0bGUgPSAnQ2xpY2sgdG8gY2hhbmdlIHRpbWV6b25lJzsKKwkJaWYgKCFub2NoYW5nZSkgeworCQkJLy8gd2UgdXNlICouZmlyc3RDaGlsZC5kYXRhIChXM0MgRE9NKSBpbnN0ZWFkIG9mICouaW5uZXJIVE1MCisJCQkvLyBhcyB0aGUgbGF0dGVyIGRvZXNuJ3QgYWx3YXlzIHdvcmsgZXZlcnl3aGVyZSBpbiBldmVyeSBicm93c2VyCisJCQl2YXIgZXBvY2ggPSBwYXJzZVJGQzI4MjJEYXRlKGN1ckVsZW1lbnQuZmlyc3RDaGlsZC5kYXRhKTsKKwkJCXZhciBhZGp1c3RlZCA9IGZvcm1hdERhdGVSRkMyODgyKGVwb2NoLCB0eik7CisKKwkJCWN1ckVsZW1lbnQuZmlyc3RDaGlsZC5kYXRhID0gYWRqdXN0ZWQ7CisJCX0KKwl9Cit9CisKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworLyogQWRkaW5nIHRyaWdnZXJzLCBnZW5lcmF0aW5nIHRpbWV6b25lIG1lbnUsIGRpc3BsYXlpbmcgYW5kIGhpZGluZyAqLworCisvKioKKyAqIEFkZHMgdHJpZ2dlcnMgZm9yIFVJIHRvIGNoYW5nZSBjb21tb24gdGltZXpvbmUgdXNlZCBmb3IgZGF0ZXMgaW4KKyAqIGdpdHdlYiBvdXRwdXQ6IGl0IG1hcmtzIHVwIGFuZC9vciBjcmVhdGVzIGl0ZW0gdG8gY2xpY2sgdG8gaW52b2tlCisgKiB0aW1lem9uZSBjaGFuZ2UgVUksIGNyZWF0ZXMgdGltZXpvbmUgVUkgZnJhZ21lbnQgdG8gYmUgYXR0YWNoZWQsCisgKiBhbmQgaW5zdGFsbHMgYXBwcm9wcmlhdGUgb25jbGljayB0cmlnZ2VyICh2aWEgZXZlbnQgZGVsZWdhdGlvbikuCisgKgorICogQHBhcmFtIHtTdHJpbmd9IHR6U2VsZWN0ZWQ6IHByZS1zZWxlY3RlZCB0aW1lem9uZSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXRjJyBvciAnbG9jYWwnIG9yICcoLXwrKUhITU0nCisgKiBAcGFyYW0ge09iamVjdH0gdHpDb29raWVJbmZvOiBvYmplY3QgbGl0ZXJhbCB3aXRoIGluZm8gYWJvdXQgY29va2llIHRvIHN0b3JlIHRpbWV6b25lCisgKiBAcGFyYW0ge1N0cmluZ30gdHpDbGFzc05hbWU6IHNwZWNpZmllcyBlbGVtZW50cyB0byBpbnN0YWxsIHRyaWdnZXIKKyAqLworZnVuY3Rpb24gYWRkQ2hhbmdlVFoodHpTZWxlY3RlZCwgdHpDb29raWVJbmZvLCB0ekNsYXNzTmFtZSkgeworCS8vIG1ha2UgbGluayB0byB0aW1lem9uZSBVSSBkaXNjb3ZlcmFibGUKKwlhZGRDc3NSdWxlKCcuJyt0ekNsYXNzTmFtZSArICc6aG92ZXInLAorCSAgICAgICAgICAgJ3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyBjdXJzb3I6IGhlbHA7Jyk7CisKKwkvLyBjcmVhdGUgZm9ybSBmb3Igc2VsZWN0aW5nIHRpbWV6b25lICh0byBiZSBzYXZlZCBpbiBhIGNvb2tpZSkKKwl2YXIgdHpTZWxlY3RGcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKwl0elNlbGVjdEZyYWdtZW50ID0gY3JlYXRlQ2hhbmdlVFpGb3JtKHR6U2VsZWN0RnJhZ21lbnQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0elNlbGVjdGVkLCB0ekNvb2tpZUluZm8sIHR6Q2xhc3NOYW1lKTsKKworCS8vIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlciBmb3IgdGltZXpvbmUgc2VsZWN0aW9uIFVJIChjbGlja2luZyBvbiBlbnRyeSkKKwkvLyBzZWUgaHR0cDovL3d3dy5uY3pvbmxpbmUubmV0L2Jsb2cvMjAwOS8wNi8zMC9ldmVudC1kZWxlZ2F0aW9uLWluLWphdmFzY3JpcHQvCisJLy8gYXNzdW1lcyB0aGF0IHRoZXJlIGlzIG5vIGV4aXN0aW5nIGRvY3VtZW50Lm9uY2xpY2sgaGFuZGxlcgorCWRvY3VtZW50Lm9uY2xpY2sgPSBmdW5jdGlvbiBvbmNsaWNrSGFuZGxlcihldmVudCkgeworCQkvL0lFIGRvZXNuJ3QgcGFzcyBpbiB0aGUgZXZlbnQgb2JqZWN0CisJCWV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50OworCisJCS8vSUUgdXNlcyBzcmNFbGVtZW50IGFzIHRoZSB0YXJnZXQKKwkJdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50OworCisJCXN3aXRjaCAodGFyZ2V0LmNsYXNzTmFtZSkgeworCQljYXNlIHR6Q2xhc3NOYW1lOgorCQkJLy8gZG9uJ3QgZGlzcGxheSB0aW1lem9uZSBtZW51IGlmIGl0IGlzIGFscmVhZHkgZGlzcGxheWVkCisJCQlpZiAodHpTZWxlY3RGcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHsKKwkJCQlkaXNwbGF5Q2hhbmdlVFpGb3JtKHRhcmdldCwgdHpTZWxlY3RGcmFnbWVudCk7CisJCQl9CisJCQlicmVhazsKKwkJfSAvLyBlbmQgc3dpdGNoCisJfTsKK30KKworLyoqCisgKiBDcmVhdGUgRG9jdW1lbnRGcmFnbWVudCB3aXRoIFVJIGZvciBjaGFuZ2luZyBjb21tb24gdGltZXpvbmUgaW4KKyAqIHdoaWNoIGRhdGVzIGFyZSBzaG93biBpbi4KKyAqCisgKiBAcGFyYW0ge0RvY3VtZW50RnJhZ21lbnR9IGRvY3VtZW50RnJhZ21lbnQ6IHdoZXJlIGF0dGFjaCBVSQorICogQHBhcmFtIHtTdHJpbmd9IHR6U2VsZWN0ZWQ6IGRlZmF1bHQgKHByZS1zZWxlY3RlZCkgdGltZXpvbmUKKyAqIEBwYXJhbSB7T2JqZWN0fSB0ekNvb2tpZUluZm86IG9iamVjdCBsaXRlcmFsIHdpdGggaW5mbyBhYm91dCBjb29raWUgdG8gc3RvcmUgdGltZXpvbmUKKyAqIEByZXR1cm5zIHtEb2N1bWVudEZyYWdtZW50fQorICovCitmdW5jdGlvbiBjcmVhdGVDaGFuZ2VUWkZvcm0oZG9jdW1lbnRGcmFnbWVudCwgdHpTZWxlY3RlZCwgdHpDb29raWVJbmZvLCB0ekNsYXNzTmFtZSkgeworCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKwlkaXYuY2xhc3NOYW1lID0gJ3BvcHVwJzsKKworCS8qICc8ZGl2IGNsYXNzPSJjbG9zZS1idXR0b24iIHRpdGxlPSIoY2xpY2sgb24gdGhpcyBib3ggdG8gY2xvc2UpIj5YPC9kaXY+JyAqLworCXZhciBjbG9zZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworCWNsb3NlQnV0dG9uLmNsYXNzTmFtZSA9ICdjbG9zZS1idXR0b24nOworCWNsb3NlQnV0dG9uLnRpdGxlID0gJyhjbGljayBvbiB0aGlzIGJveCB0byBjbG9zZSknOworCWNsb3NlQnV0dG9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdYJykpOworCWNsb3NlQnV0dG9uLm9uY2xpY2sgPSBjbG9zZVRaRm9ybUhhbmRsZXIoZG9jdW1lbnRGcmFnbWVudCwgdHpDbGFzc05hbWUpOworCWRpdi5hcHBlbmRDaGlsZChjbG9zZUJ1dHRvbik7CisKKwkvKiAnU2VsZWN0IHRpbWV6b25lOiA8YnIgY2xlYXI9ImFsbCI+JyAqLworCWRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnU2VsZWN0IHRpbWV6b25lOiAnKSk7CisJdmFyIGJyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKTsKKwlici5jbGVhciA9ICdhbGwnOworCWRpdi5hcHBlbmRDaGlsZChicik7CisKKwkvKiAnPHNlbGVjdCBuYW1lPSJ0em9mZnNldCI+CisJICogICAgLi4uCisJICogICAgPG9wdGlvbiB2YWx1ZT0iLTA3MDAiPlVUQy0wNzowMDwvb3B0aW9uPgorCSAqICAgIDxvcHRpb24gdmFsdWU9Ii0wNjAwIj5VVEMtMDY6MDA8L29wdGlvbj4KKwkgKiAgICAuLi4KKwkgKiAgPC9zZWxlY3Q+JyAqLworCXZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKKwlzZWxlY3QubmFtZSA9ICJ0em9mZnNldCI7CisJLy9zZWxlY3Quc3R5bGUuY2xlYXIgPSAnYWxsJzsKKwlzZWxlY3QuYXBwZW5kQ2hpbGQoZ2VuZXJhdGVUWk9wdGlvbnModHpTZWxlY3RlZCkpOworCXNlbGVjdC5vbmNoYW5nZSA9IHNlbGVjdFRaSGFuZGxlcihkb2N1bWVudEZyYWdtZW50LCB0ekNvb2tpZUluZm8sIHR6Q2xhc3NOYW1lKTsKKwlkaXYuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKKworCWRvY3VtZW50RnJhZ21lbnQuYXBwZW5kQ2hpbGQoZGl2KTsKKworCXJldHVybiBkb2N1bWVudEZyYWdtZW50OworfQorCisKKy8qKgorICogSGlkZSAocmVtb3ZlIGZyb20gRE9NKSB0aW1lem9uZSBjaGFuZ2UgVUksIGVuc3VyaW5nIHRoYXQgaXQgaXMgbm90CisgKiBnYXJiYWdlIGNvbGxlY3RlZCBhbmQgdGhhdCBpdCBjYW4gYmUgcmUtZW5hYmxlZCBsYXRlci4KKyAqCisgKiBAcGFyYW0ge0RvY3VtZW50RnJhZ21lbnR9IGRvY3VtZW50RnJhZ21lbnQ6IGNvbnRhaW5zIGRldGFjaGVkIFVJCisgKiBAcGFyYW0ge0hUTUxTZWxlY3RFbGVtZW50fSB0YXJnZXQ6IHNlbGVjdCBlbGVtZW50IGluc2lkZSBvZiBVSQorICogQHBhcmFtIHtTdHJpbmd9IHR6Q2xhc3NOYW1lOiBzcGVjaWZpZXMgZWxlbWVudCB3aGVyZSBVSSB3YXMgaW5zdGFsbGVkCisgKiBAcmV0dXJucyB7RG9jdW1lbnRGcmFnbWVudH0gZG9jdW1lbnRGcmFnbWVudAorICovCitmdW5jdGlvbiByZW1vdmVDaGFuZ2VUWkZvcm0oZG9jdW1lbnRGcmFnbWVudCwgdGFyZ2V0LCB0ekNsYXNzTmFtZSkgeworCS8vIGZpbmQgY29udGFpbmluZyBlbGVtZW50LCB3aGVyZSB3ZSBhcHBlbmRlZCB0aW1lem9uZSBzZWxlY3Rpb24gVUkKKwkvLyBgdGFyZ2V0JyBpcyBzb21ld2hlcmUgaW5zaWRlIHRpbWV6b25lIG1lbnUKKwl2YXIgY29udGFpbmVyID0gdGFyZ2V0LnBhcmVudE5vZGUsIHBvcHVwID0gdGFyZ2V0OworCXdoaWxlIChjb250YWluZXIgJiYKKwkgICAgICAgY29udGFpbmVyLmNsYXNzTmFtZSAhPT0gdHpDbGFzc05hbWUpIHsKKwkJcG9wdXAgPSBjb250YWluZXI7CisJCWNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnROb2RlOworCX0KKwkvLyBzYWZldHkgY2hlY2sgaWYgd2UgZm91bmQgY29ycmVjdCBjb250YWluZXIsCisJLy8gYW5kIGlmIGl0IGlzbid0IGRlbGV0ZWQgYWxyZWFkeQorCWlmICghY29udGFpbmVyIHx8ICFwb3B1cCB8fAorCSAgICBjb250YWluZXIuY2xhc3NOYW1lICE9PSB0ekNsYXNzTmFtZSB8fAorCSAgICBwb3B1cC5jbGFzc05hbWUgICAgICE9PSAncG9wdXAnKSB7CisJCXJldHVybiBkb2N1bWVudEZyYWdtZW50OworCX0KKworCS8vIHRpbWV6b25lIHNlbGVjdGlvbiBVSSB3YXMgYXBwZW5kZWQgYXMgbGFzdCBjaGlsZAorCS8vIHNlZSBhbHNvIGRpc3BsYXlDaGFuZ2VUWkZvcm0gZnVuY3Rpb24KKwl2YXIgcmVtb3ZlZCA9IHBvcHVwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocG9wdXApOworCWlmIChkb2N1bWVudEZyYWdtZW50LmZpcnN0Q2hpbGQgIT09IHJlbW92ZWQpIHsgLy8gdGhlIG9ubHkgY2hpbGQKKwkJLy8gcmUtYXBwZW5kIGl0IHNvIGl0IHdvdWxkIGJlIGF2YWlsYWJsZSBmb3IgbmV4dCB0aW1lCisJCWRvY3VtZW50RnJhZ21lbnQuYXBwZW5kQ2hpbGQocmVtb3ZlZCk7CisJfQorCS8vIGFsbCBvZiBpbmxpbmUgc3R5bGUgd2FzIGFkZGVkIGJ5IHRoaXMgc2NyaXB0CisJLy8gaXQgaXMgbm90IHJlYWxseSBuZWVkZWQgdG8gcmVtb3ZlIGl0LCBidXQgaXQgaXMgYSBnb29kIHByYWN0aWNlCisJY29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTsKKworCXJldHVybiBkb2N1bWVudEZyYWdtZW50OworfQorCisKKy8qKgorICogRGlzcGxheSBVSSBmb3IgY2hhbmdpbmcgY29tbW9uIHRpbWV6b25lIGZvciBkYXRlcyBpbiBnaXR3ZWIgb3V0cHV0LgorICogVG8gYmUgdXNlZCBmcm9tICdvbmNsaWNrJyBldmVudCBoYW5kbGVyLgorICoKKyAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRhcmdldDogd2hlcmUgdG8gaW5zdGFsbC9kaXNwbGF5IFVJCisgKiBAcGFyYW0ge0RvY3VtZW50RnJhZ21lbnR9IHR6U2VsZWN0RnJhZ21lbnQ6IHRpbWV6b25lIHNlbGVjdGlvbiBVSQorICovCitmdW5jdGlvbiBkaXNwbGF5Q2hhbmdlVFpGb3JtKHRhcmdldCwgdHpTZWxlY3RGcmFnbWVudCkgeworCS8vIGZvciBhYnNvbHV0ZSBwb3NpdGlvbmluZyB0byBiZSByZWxhdGVkIHRvIHRhcmdldCBlbGVtZW50CisJdGFyZ2V0LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKKwl0YXJnZXQuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOworCisJLy8gc2hvdy9kaXNwbGF5IFVJIGZvciBjaGFuZ2luZyB0aW1lem9uZQorCXRhcmdldC5hcHBlbmRDaGlsZCh0elNlbGVjdEZyYWdtZW50KTsKK30KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBMaXN0IG9mIHRpbWV6b25lcyBmb3IgdGltZXpvbmUgc2VsZWN0aW9uIG1lbnUgKi8KKworLyoqCisgKiBHZW5lcmF0ZSBsaXN0IG9mIHRpbWV6b25lcyBmb3IgY3JlYXRpbmcgdGltZXpvbmUgc2VsZWN0IFVJCisgKgorICogQHJldHVybnMge09iamVjdFtdfSBsaXN0IG9mIGUuZy4geyB2YWx1ZTogJyswMTAwJywgZGVzY3I6ICdHTVQrMDE6MDAnIH0KKyAqLworZnVuY3Rpb24gZ2VuZXJhdGVUWkxpc3QoKSB7CisJdmFyIHRpbWV6b25lcyA9IFsKKwkJeyB2YWx1ZTogInV0YyIsICAgZGVzY3I6ICJVVEMvR01UIn0sCisJCXsgdmFsdWU6ICJsb2NhbCIsIGRlc2NyOiAiTG9jYWwgKHBlciBicm93c2VyKSJ9CisJXTsKKworCS8vIGdlbmVyYXRlIGFsbCBmdWxsIGhvdXIgdGltZXpvbmVzIChubyBmcmFjdGlvbmFsIHRpbWV6b25lcykKKwlmb3IgKHZhciB4ID0gLTEyLCBpZHggPSB0aW1lem9uZXMubGVuZ3RoOyB4IDw9ICsxNDsgeCsrLCBpZHgrKykgeworCQl2YXIgaG91cnMgPSAoeCA+PSAwID8gJysnIDogJy0nKSArIHBhZExlZnQoeCA+PTAgPyB4IDogLXgsIDIpOworCQl0aW1lem9uZXNbaWR4XSA9IHsgdmFsdWU6IGhvdXJzICsgJzAwJywgZGVzY3I6ICdVVEMnICsgaG91cnMgKyAnOjAwJ307CisJCWlmICh4ID09PSAwKSB7CisJCQl0aW1lem9uZXNbaWR4XS5kZXNjciA9ICdVVENcdTAwQjEwMDowMCc7IC8vICdVVEMmcGx1c21uOzAwOjAwJworCQl9CisJfQorCisJcmV0dXJuIHRpbWV6b25lczsKK30KKworLyoqCisgKiBHZW5lcmF0ZSA8b3B0aW9ucz4gZWxlbWVudHMgZm9yIHRpbWV6b25lIHNlbGVjdCBVSQorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSB0elNlbGVjdGVkOiBkZWZhdWx0IHRpbWV6b25lCisgKiBAcmV0dXJucyB7RG9jdW1lbnRGcmFnbWVudH0gbGlzdCBvZiBvcHRpb25zIGVsZW1lbnRzIHRvIGFwcGVuZENoaWxkCisgKi8KK2Z1bmN0aW9uIGdlbmVyYXRlVFpPcHRpb25zKHR6U2VsZWN0ZWQpIHsKKwl2YXIgZWxlbXMgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisJdmFyIHRpbWV6b25lcyA9IGdlbmVyYXRlVFpMaXN0KCk7CisKKwlmb3IgKHZhciBpID0gMCwgbGVuID0gdGltZXpvbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisJCXZhciB0em9uZSA9IHRpbWV6b25lc1tpXTsKKwkJdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOworCQlpZiAodHpvbmUudmFsdWUgPT09IHR6U2VsZWN0ZWQpIHsKKwkJCW9wdGlvbi5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlOworCQl9CisJCW9wdGlvbi52YWx1ZSA9IHR6b25lLnZhbHVlOworCQlvcHRpb24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodHpvbmUuZGVzY3IpKTsKKworCQllbGVtcy5hcHBlbmRDaGlsZChvcHRpb24pOworCX0KKworCXJldHVybiBlbGVtczsKK30KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBFdmVudCBoYW5kbGVycyBhbmQvb3IgdGhlaXIgZ2VuZXJhdG9ycyAqLworCisvKioKKyAqIENyZWF0ZSBldmVudCBoYW5kbGVyIHRoYXQgc2VsZWN0IHRpbWV6b25lIGFuZCBjbG9zZXMgdGltZXpvbmUgc2VsZWN0IFVJLgorICogVG8gYmUgdXNlZCBhcyAkKCdzZWxlY3RbbmFtZT0idHpzZWxlY3QiXScpLm9uY2hhbmdlIGhhbmRsZXIuCisgKgorICogQHBhcmFtIHtEb2N1bWVudEZyYWdtZW50fSB0elNlbGVjdEZyYWdtZW50OiB0aW1lem9uZSBzZWxlY3Rpb24gVUkKKyAqIEBwYXJhbSB7T2JqZWN0fSB0ekNvb2tpZUluZm86IG9iamVjdCBsaXRlcmFsIHdpdGggaW5mbyBhYm91dCBjb29raWUgdG8gc3RvcmUgdGltZXpvbmUKKyAqIEBwYXJhbSB7U3RyaW5nfSB0ekNvb2tpZUluZm8ubmFtZTogbmFtZSBvZiBjb29raWUgdG8gc2F2ZSByZXN1bHQgb2Ygc2VsZWN0aW9uCisgKiBAcGFyYW0ge1N0cmluZ30gdHpDbGFzc05hbWU6IHNwZWNpZmllcyBlbGVtZW50IHdoZXJlIFVJIHdhcyBpbnN0YWxsZWQKKyAqIEByZXR1cm5zIHtGdW5jdGlvbn0gZXZlbnQgaGFuZGxlcgorICovCitmdW5jdGlvbiBzZWxlY3RUWkhhbmRsZXIodHpTZWxlY3RGcmFnbWVudCwgdHpDb29raWVJbmZvLCB0ekNsYXNzTmFtZSkgeworCS8vcmV0dXJuIGZ1bmN0aW9uIHNlbGVjdFRaKGV2ZW50KSB7CisJcmV0dXJuIGZ1bmN0aW9uIChldmVudCkgeworCQlldmVudCA9IGV2ZW50IHx8IHdpbmRvdy5ldmVudDsKKwkJdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50OworCisJCXZhciBzZWxlY3RlZCA9IHRhcmdldC5vcHRpb25zLml0ZW0odGFyZ2V0LnNlbGVjdGVkSW5kZXgpOworCQlyZW1vdmVDaGFuZ2VUWkZvcm0odHpTZWxlY3RGcmFnbWVudCwgdGFyZ2V0LCB0ekNsYXNzTmFtZSk7CisKKwkJaWYgKHNlbGVjdGVkKSB7CisJCQlzZWxlY3RlZC5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlOworCQkJc2V0Q29va2llKHR6Q29va2llSW5mby5uYW1lLCBzZWxlY3RlZC52YWx1ZSwgdHpDb29raWVJbmZvKTsKKwkJCWZpeERhdGV0aW1lVFooc2VsZWN0ZWQudmFsdWUsIHR6Q2xhc3NOYW1lKTsKKwkJfQorCX07Cit9CisKKy8qKgorICogQ3JlYXRlIGV2ZW50IGhhbmRsZXIgdGhhdCBjbG9zZXMgdGltZXpvbmUgc2VsZWN0IFVJLgorICogVG8gYmUgdXNlZCBlLmcuIGFzICQoJy5jbG9zZWJ1dHRvbicpLm9uY2xpY2sgaGFuZGxlci4KKyAqCisgKiBAcGFyYW0ge0RvY3VtZW50RnJhZ21lbnR9IHR6U2VsZWN0RnJhZ21lbnQ6IHRpbWV6b25lIHNlbGVjdGlvbiBVSQorICogQHBhcmFtIHtTdHJpbmd9IHR6Q2xhc3NOYW1lOiBzcGVjaWZpZXMgZWxlbWVudCB3aGVyZSBVSSB3YXMgaW5zdGFsbGVkCisgKiBAcmV0dXJucyB7RnVuY3Rpb259IGV2ZW50IGhhbmRsZXIKKyAqLworZnVuY3Rpb24gY2xvc2VUWkZvcm1IYW5kbGVyKHR6U2VsZWN0RnJhZ21lbnQsIHR6Q2xhc3NOYW1lKSB7CisJLy9yZXR1cm4gZnVuY3Rpb24gY2xvc2VUWkZvcm0oZXZlbnQpIHsKKwlyZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7CisJCWV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50OworCQl2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7CisKKwkJcmVtb3ZlQ2hhbmdlVFpGb3JtKHR6U2VsZWN0RnJhZ21lbnQsIHRhcmdldCwgdHpDbGFzc05hbWUpOworCX07Cit9CisKKy8qIGVuZCBvZiBhZGp1c3QtdGltZXpvbmUuanMgKi8KZGlmZiAtLWdpdCBhL2dpdHdlYi9zdGF0aWMvanMvYmxhbWVfaW5jcmVtZW50YWwuanMgYi9naXR3ZWIvc3RhdGljL2pzL2JsYW1lX2luY3JlbWVudGFsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMDBkODIKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvc3RhdGljL2pzL2JsYW1lX2luY3JlbWVudGFsLmpzCkBAIC0wLDAgKzEsNjkyIEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIEZyZWRyaWsgS3VpdmluZW4gPGZyZWt1aUBnbWFpbC5jb20+CisvLyAgICAgICAgICAgICAgIDIwMDcsIFBldHIgQmF1ZGlzIDxwYXNreUBzdXNlLmN6PgorLy8gICAgICAgICAgMjAwOC0yMDExLCBKYWt1YiBOYXJlYnNraSA8am5hcmViQGdtYWlsLmNvbT4KKworLyoqCisgKiBAZmlsZU92ZXJ2aWV3IEphdmFTY3JpcHQgc2lkZSBvZiBBamF4LXkgJ2JsYW1lX2luY3JlbWVudGFsJyB2aWV3IGluIGdpdHdlYgorICogQGxpY2Vuc2UgR1BMdjIgb3IgbGF0ZXIKKyAqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qCisgKiBUaGlzIGNvZGUgdXNlcyBET00gbWV0aG9kcyBpbnN0ZWFkIG9mIChub25zdGFuZGFyZCkgaW5uZXJIVE1MCisgKiB0byBtb2RpZnkgcGFnZS4KKyAqCisgKiBpbm5lckhUTUwgaXMgbm9uLXN0YW5kYXJkIElFIGV4dGVuc2lvbiwgdGhvdWdoIHN1cHBvcnRlZCBieSBtb3N0CisgKiBicm93c2VyczsgaG93ZXZlciBGaXJlZm94IHVwIHRvIHZlcnNpb24gMS41IGRpZG4ndCBpbXBsZW1lbnQgaXQgaW4KKyAqIGEgc3RyaWN0IG1vZGUgKGFwcGxpY2F0aW9uL3htbCt4aHRtbCBtaW1ldHlwZSkuCisgKgorICogQWxzbyBteSBzaW1wbGUgYmVuY2htYXJrcyBzaG93IHRoYXQgdXNpbmcgZWxlbS5maXJzdENoaWxkLmRhdGEgPQorICogJ2NvbnRlbnQnIGlzIHNsaWdodGx5IGZhc3RlciB0aGFuIGVsZW0uaW5uZXJIVE1MID0gJ2NvbnRlbnQnLiAgSXQKKyAqIGlzIGhvd2V2ZXIgbW9yZSBmcmFnaWxlICh0ZXh0IGVsZW1lbnQgZnJhZ21lbnQgbXVzdCBleGlzdHMpLCBhbmQKKyAqIGxlc3MgZmVhdHVyZS1yaWNoICh3ZSBjYW5ub3QgYWRkIEhUTUwpLgorICoKKyAqIE5vdGUgdGhhdCBET00gMiBIVE1MIGlzIHByZWZlcnJlZCBvdmVyIGdlbmVyaWMgRE9NIDIgQ29yZTsgdGhlCisgKiBlcXVpdmFsZW50IHVzaW5nIERPTSAyIENvcmUgaXMgdXN1YWxseSBzaG93biBpbiBjb21tZW50cy4KKyAqLworCisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworLyogdXRpbGl0eS9oZWxwZXIgZnVuY3Rpb25zIChhbmQgdmFyaWFibGVzKSAqLworCit2YXIgcHJvamVjdFVybDsgLy8gcGFydGlhbCBxdWVyeSArIHNlcGFyYXRvciAoJz8nIG9yICc7JykKKworLy8gJ2NvbW1pdHMnIGlzIGFuIGFzc29jaWF0aXZlIG1hcC4gSXQgbWFwcyBTSEExcyB0byBDb21taXQgb2JqZWN0cy4KK3ZhciBjb21taXRzID0ge307CisKKy8qKgorICogY29uc3RydWN0b3IgZm9yIENvbW1pdCBvYmplY3RzLCB1c2VkIGluICdibGFtZScKKyAqIEBjbGFzcyBSZXByZXNlbnRzIGEgYmxhbWVkIGNvbW1pdAorICogQHBhcmFtIHtTdHJpbmd9IHNoYTE6IFNIQS0xIGlkZW50aWZpZXIgb2YgYSBjb21taXQKKyAqLworZnVuY3Rpb24gQ29tbWl0KHNoYTEpIHsKKwlpZiAodGhpcyBpbnN0YW5jZW9mIENvbW1pdCkgeworCQl0aGlzLnNoYTEgPSBzaGExOworCQl0aGlzLm5wcmV2aW91cyA9IDA7IC8qIG51bWJlciBvZiAncHJldmlvdXMnLCBlZmZlY3RpdmUgcGFyZW50cyAqLworCX0gZWxzZSB7CisJCXJldHVybiBuZXcgQ29tbWl0KHNoYTEpOworCX0KK30KKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBwcm9ncmVzcyBpbmZvLCB0aW1pbmcsIGVycm9yIHJlcG9ydGluZyAqLworCit2YXIgYmxhbWVkTGluZXMgPSAwOwordmFyIHRvdGFsTGluZXMgID0gJz8/Pyc7Cit2YXIgZGl2X3Byb2dyZXNzX2JhcjsKK3ZhciBkaXZfcHJvZ3Jlc3NfaW5mbzsKKworLyoqCisgKiBEZXRlY3RzIGhvdyBtYW55IGxpbmVzIGRvZXMgYSBibGFtZWQgZmlsZSBoYXZlLAorICogVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VkIGluIHByb2dyZXNzIGluZm8KKyAqCisgKiBAcmV0dXJucyB7TnVtYmVyfFN0cmluZ30gTnVtYmVyIG9mIGxpbmVzIGluIGZpbGUsIG9yIHN0cmluZyAnLi4uJworICovCitmdW5jdGlvbiBjb3VudExpbmVzKCkgeworCXZhciB0YWJsZSA9CisJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdibGFtZV90YWJsZScpIHx8CisJCWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0YWJsZScpWzBdOworCisJaWYgKHRhYmxlKSB7CisJCXJldHVybiB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKS5sZW5ndGggLSAxOyAvLyBmb3IgaGVhZGVyCisJfSBlbHNlIHsKKwkJcmV0dXJuICcuLi4nOworCX0KK30KKworLyoqCisgKiB1cGRhdGUgcHJvZ3Jlc3MgaW5mbyBhbmQgbGVuZ3RoICh3aWR0aCkgb2YgcHJvZ3Jlc3MgYmFyCisgKgorICogQGdsb2JhbHMgZGl2X3Byb2dyZXNzX2luZm8sIGRpdl9wcm9ncmVzc19iYXIsIGJsYW1lZExpbmVzLCB0b3RhbExpbmVzCisgKi8KK2Z1bmN0aW9uIHVwZGF0ZVByb2dyZXNzSW5mbygpIHsKKwlpZiAoIWRpdl9wcm9ncmVzc19pbmZvKSB7CisJCWRpdl9wcm9ncmVzc19pbmZvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2dyZXNzX2luZm8nKTsKKwl9CisJaWYgKCFkaXZfcHJvZ3Jlc3NfYmFyKSB7CisJCWRpdl9wcm9ncmVzc19iYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvZ3Jlc3NfYmFyJyk7CisJfQorCWlmICghZGl2X3Byb2dyZXNzX2luZm8gJiYgIWRpdl9wcm9ncmVzc19iYXIpIHsKKwkJcmV0dXJuOworCX0KKworCXZhciBwZXJjZW50YWdlID0gTWF0aC5mbG9vcigxMDAuMCpibGFtZWRMaW5lcy90b3RhbExpbmVzKTsKKworCWlmIChkaXZfcHJvZ3Jlc3NfaW5mbykgeworCQlkaXZfcHJvZ3Jlc3NfaW5mby5maXJzdENoaWxkLmRhdGEgID0gYmxhbWVkTGluZXMgKyAnIC8gJyArIHRvdGFsTGluZXMgKworCQkJJyAoJyArIHBhZExlZnRTdHIocGVyY2VudGFnZSwgMywgJ1x1MDBBMCcpICsgJyUpJzsKKwl9CisKKwlpZiAoZGl2X3Byb2dyZXNzX2JhcikgeworCQkvL2Rpdl9wcm9ncmVzc19iYXIuc2V0QXR0cmlidXRlKCdzdHlsZScsICd3aWR0aDogJytwZXJjZW50YWdlKyclOycpOworCQlkaXZfcHJvZ3Jlc3NfYmFyLnN0eWxlLndpZHRoID0gcGVyY2VudGFnZSArICclJzsKKwl9Cit9CisKKwordmFyIHRfaW50ZXJ2YWxfc2VydmVyID0gJyc7Cit2YXIgY21kc19zZXJ2ZXIgPSAnJzsKK3ZhciB0MCA9IG5ldyBEYXRlKCk7CisKKy8qKgorICogd3JpdGUgaG93IG11Y2ggaXQgdG9vayB0byBnZW5lcmF0ZSBkYXRhLCBhbmQgdG8gcnVuIHNjcmlwdAorICoKKyAqIEBnbG9iYWxzIHQwLCB0X2ludGVydmFsX3NlcnZlciwgY21kc19zZXJ2ZXIKKyAqLworZnVuY3Rpb24gd3JpdGVUaW1lSW50ZXJ2YWwoKSB7CisJdmFyIGluZm9fdGltZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnZW5lcmF0aW5nX3RpbWUnKTsKKwlpZiAoIWluZm9fdGltZSB8fCAhdF9pbnRlcnZhbF9zZXJ2ZXIpIHsKKwkJcmV0dXJuOworCX0KKwl2YXIgdDEgPSBuZXcgRGF0ZSgpOworCWluZm9fdGltZS5maXJzdENoaWxkLmRhdGEgKz0gJyArICgnICsKKwkJdF9pbnRlcnZhbF9zZXJ2ZXIgKyAnIHNlYyBzZXJ2ZXIgYmxhbWVfZGF0YSAvICcgKworCQkodDEuZ2V0VGltZSgpIC0gdDAuZ2V0VGltZSgpKS8xMDAwICsgJyBzZWMgY2xpZW50IEphdmFTY3JpcHQpJzsKKworCXZhciBpbmZvX2NtZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2VuZXJhdGluZ19jbWQnKTsKKwlpZiAoIWluZm9fdGltZSB8fCAhY21kc19zZXJ2ZXIpIHsKKwkJcmV0dXJuOworCX0KKwlpbmZvX2NtZHMuZmlyc3RDaGlsZC5kYXRhICs9ICcgKyAnICsgY21kc19zZXJ2ZXI7Cit9CisKKy8qKgorICogc2hvdyBhbiBlcnJvciBtZXNzYWdlIGFsZXJ0IHRvIHVzZXIgd2l0aGluIHBhZ2UgKGluIHByb2dyZXNzIGluZm8gYXJlYSkKKyAqIEBwYXJhbSB7U3RyaW5nfSBzdHI6IHBsYWluIHRleHQgZXJyb3IgbWVzc2FnZSAobm8gSFRNTCkKKyAqCisgKiBAZ2xvYmFscyBkaXZfcHJvZ3Jlc3NfaW5mbworICovCitmdW5jdGlvbiBlcnJvckluZm8oc3RyKSB7CisJaWYgKCFkaXZfcHJvZ3Jlc3NfaW5mbykgeworCQlkaXZfcHJvZ3Jlc3NfaW5mbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm9ncmVzc19pbmZvJyk7CisJfQorCWlmIChkaXZfcHJvZ3Jlc3NfaW5mbykgeworCQlkaXZfcHJvZ3Jlc3NfaW5mby5jbGFzc05hbWUgPSAnZXJyb3InOworCQlkaXZfcHJvZ3Jlc3NfaW5mby5maXJzdENoaWxkLmRhdGEgPSBzdHI7CisJfQorfQorCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIGNvbG9yaW5nIHJvd3MgZHVyaW5nIGJsYW1lX2RhdGEgKGdpdCBibGFtZSAtLWluY3JlbWVudGFsKSBydW4gKi8KKworLyoqCisgKiB1c2VkIHRvIGV4dHJhY3QgTiBmcm9tICdjb2xvck4nLCB3aGVyZSBOIGlzIGEgbnVtYmVyLAorICogQGNvbnN0YW50CisgKi8KK3ZhciBjb2xvclJlID0gL1xiY29sb3IoWzAtOV0qKVxiLzsKKworLyoqCisgKiByZXR1cm4gTiBpZiA8dHIgY2xhc3M9ImNvbG9yTiI+LCBvdGhlcndpc2UgcmV0dXJuIG51bGwKKyAqIChzb21lIGJyb3dzZXJzIHJlcXVpcmUgQ1NTIGNsYXNzIG5hbWVzIHRvIGJlZ2luIHdpdGggbGV0dGVyKQorICoKKyAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRyOiB0YWJsZSByb3cgZWxlbWVudCB0byBjaGVjaworICogQHBhcmFtIHtTdHJpbmd9IHRyLmNsYXNzTmFtZTogJ2NsYXNzJyBhdHRyaWJ1dGUgb2YgdHIgZWxlbWVudAorICogQHJldHVybnMge051bWJlcnxudWxsfSBOIGlmIHRyLmNsYXNzTmFtZSA9PSAnY29sb3JOJywgb3RoZXJ3aXNlIG51bGwKKyAqCisgKiBAZ2xvYmFscyBjb2xvclJlCisgKi8KK2Z1bmN0aW9uIGdldENvbG9yTm8odHIpIHsKKwlpZiAoIXRyKSB7CisJCXJldHVybiBudWxsOworCX0KKwl2YXIgY2xhc3NOYW1lID0gdHIuY2xhc3NOYW1lOworCWlmIChjbGFzc05hbWUpIHsKKwkJdmFyIG1hdGNoID0gY29sb3JSZS5leGVjKGNsYXNzTmFtZSk7CisJCWlmIChtYXRjaCkgeworCQkJcmV0dXJuIHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7CisJCX0KKwl9CisJcmV0dXJuIG51bGw7Cit9CisKK3ZhciBjb2xvcnNGcmVxID0gWzAsIDAsIDBdOworLyoqCisgKiByZXR1cm4gb25lIG9mIGdpdmVuIHBvc3NpYmxlIGNvbG9ycyAoY3VycmVudGx5IGxlYXN0IHVzZWQgb25lKQorICogZXhhbXBsZTogY2hvb3NlQ29sb3JOb0Zyb20oMiwgMykgcmV0dXJucyAyIG9yIDMKKyAqCisgKiBAcGFyYW0ge051bWJlcltdfSBhcmd1bWVudHM6IG9uZSBvciBtb3JlIG51bWJlcnMKKyAqICAgICAgICBhc3N1bWVzIHRoYXQgIDEgPD0gYXJndW1lbnRzW2ldIDw9IGNvbG9yc0ZyZXEubGVuZ3RoCisgKiBAcmV0dXJucyB7TnVtYmVyfSBMZWFzdCB1c2VkIGNvbG9yIG51bWJlciBmcm9tIGFyZ3VtZW50cworICogQGdsb2JhbHMgY29sb3JzRnJlcQorICovCitmdW5jdGlvbiBjaG9vc2VDb2xvck5vRnJvbSgpIHsKKwkvLyBjaG9vc2UgdGhlIGNvbG9yIHdoaWNoIGlzIGxlYXN0IHVzZWQKKwl2YXIgY29sb3JObyA9IGFyZ3VtZW50c1swXTsKKwlmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworCQlpZiAoY29sb3JzRnJlcVthcmd1bWVudHNbaV0tMV0gPCBjb2xvcnNGcmVxW2NvbG9yTm8tMV0pIHsKKwkJCWNvbG9yTm8gPSBhcmd1bWVudHNbaV07CisJCX0KKwl9CisJY29sb3JzRnJlcVtjb2xvck5vLTFdKys7CisJcmV0dXJuIGNvbG9yTm87Cit9CisKKy8qKgorICogZ2l2ZW4gdHdvIG5laWdoYm9yIDx0cj4gZWxlbWVudHMsIGZpbmQgY29sb3Igd2hpY2ggd291bGQgYmUgZGlmZmVyZW50CisgKiBmcm9tIGNvbG9yIG9mIGJvdGggb2YgbmVpZ2hib3JzOyB1c2VkIHRvIDMtY29sb3IgYmxhbWUgdGFibGUKKyAqCisgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB0cl9wcmV2CisgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB0cl9uZXh0CisgKiBAcmV0dXJucyB7TnVtYmVyfSBjb2xvciBudW1iZXIgTiBzdWNoIHRoYXQKKyAqIGNvbG9yTiAhPSB0cl9wcmV2LmNsYXNzTmFtZSAmJiBjb2xvck4gIT0gdHJfbmV4dC5jbGFzc05hbWUKKyAqLworZnVuY3Rpb24gZmluZENvbG9yTm8odHJfcHJldiwgdHJfbmV4dCkgeworCXZhciBjb2xvcl9wcmV2ID0gZ2V0Q29sb3JObyh0cl9wcmV2KTsKKwl2YXIgY29sb3JfbmV4dCA9IGdldENvbG9yTm8odHJfbmV4dCk7CisKKworCS8vIG5laXRoZXIgb2YgbmVpZ2hib3JzIGhhcyBjb2xvciBzZXQKKwkvLyBUSEVOIHdlIGNhbiB1c2UgYW55IG9mIDMgcG9zc2libGUgY29sb3JzCisJaWYgKCFjb2xvcl9wcmV2ICYmICFjb2xvcl9uZXh0KSB7CisJCXJldHVybiBjaG9vc2VDb2xvck5vRnJvbSgxLDIsMyk7CisJfQorCisJLy8gZWl0aGVyIGJvdGggbmVpZ2hib3JzIGhhdmUgdGhlIHNhbWUgY29sb3IsCisJLy8gb3Igb25seSBvbmUgb2YgbmVpZ2hib3JzIGhhdmUgY29sb3Igc2V0CisJLy8gVEhFTiB3ZSBjYW4gdXNlIGFueSBjb2xvciBleGNlcHQgZ2l2ZW4KKwl2YXIgY29sb3I7CisJaWYgKGNvbG9yX3ByZXYgPT09IGNvbG9yX25leHQpIHsKKwkJY29sb3IgPSBjb2xvcl9wcmV2OyAvLyA9IGNvbG9yX25leHQ7CisJfSBlbHNlIGlmICghY29sb3JfcHJldikgeworCQljb2xvciA9IGNvbG9yX25leHQ7CisJfSBlbHNlIGlmICghY29sb3JfbmV4dCkgeworCQljb2xvciA9IGNvbG9yX3ByZXY7CisJfQorCWlmIChjb2xvcikgeworCQlyZXR1cm4gY2hvb3NlQ29sb3JOb0Zyb20oKGNvbG9yICUgMykgKyAxLCAoKGNvbG9yKzEpICUgMykgKyAxKTsKKwl9CisKKwkvLyBuZWlnaGJvcnMgaGF2ZSBkaWZmZXJlbnQgY29sb3JzCisJLy8gVEhFTiB0aGVyZSBpcyBvbmx5IG9uZSBjb2xvciBsZWZ0CisJcmV0dXJuICgzIC0gKChjb2xvcl9wcmV2ICsgY29sb3JfbmV4dCkgJSAzKSk7Cit9CisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworLyogY29sb3Jpbmcgcm93cyBsaWtlICdibGFtZScgYWZ0ZXIgJ2JsYW1lX2RhdGEnIGZpbmlzaGVzICovCisKKy8qKgorICogcmV0dXJucyB0cnVlIGlmIGdpdmVuIHJvdyBlbGVtZW50ICh0cikgaXMgZmlyc3QgaW4gY29tbWl0IGdyb3VwCisgKiB0byBiZSB1c2VkIG9ubHkgYWZ0ZXIgJ2JsYW1lX2RhdGEnIGZpbmlzaGVzIChhZnRlciBwcm9jZXNzaW5nKQorICoKKyAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRyOiB0YWJsZSByb3cKKyAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIFRSIGlzIGZpcnN0IGluIGNvbW1pdCBncm91cAorICovCitmdW5jdGlvbiBpc1N0YXJ0T2ZHcm91cCh0cikgeworCXJldHVybiB0ci5maXJzdENoaWxkLmNsYXNzTmFtZSA9PT0gJ3NoYTEnOworfQorCisvKioKKyAqIGNoYW5nZSBjb2xvcnMgdG8gdXNlIHplYnJhIGNvbG9yaW5nICgyIGNvbG9ycykgaW5zdGVhZCBvZiAzIGNvbG9ycworICogY29uY2F0ZW5hdGUgbmVpZ2hib3IgY29tbWl0IGdyb3VwcyBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgY29tbWl0CisgKgorICogQGdsb2JhbHMgY29sb3JSZQorICovCitmdW5jdGlvbiBmaXhDb2xvcnNBbmRHcm91cHMoKSB7CisJdmFyIGNvbG9yQ2xhc3NlcyA9IFsnbGlnaHQnLCAnZGFyayddOworCXZhciBsaW5lbnVtID0gMTsKKwl2YXIgdHIsIHByZXZfZ3JvdXA7CisJdmFyIGNvbG9yQ2xhc3MgPSAwOworCXZhciB0YWJsZSA9CisJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdibGFtZV90YWJsZScpIHx8CisJCWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0YWJsZScpWzBdOworCisJd2hpbGUgKCh0ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsJytsaW5lbnVtKSkpIHsKKwkvLyBpbmRleCBvcmlnaW4gaXMgMCwgd2hpY2ggaXMgdGFibGUgaGVhZGVyOyBzdGFydCBmcm9tIDEKKwkvL3doaWxlICgodHIgPSB0YWJsZS5yb3dzW2xpbmVudW1dKSkgeyAvLyA8LSBpdCBpcyBzbG93ZXIKKwkJaWYgKGlzU3RhcnRPZkdyb3VwKHRyLCBsaW5lbnVtLCBkb2N1bWVudCkpIHsKKwkJCWlmIChwcmV2X2dyb3VwICYmCisJCQkgICAgcHJldl9ncm91cC5maXJzdENoaWxkLmZpcnN0Q2hpbGQuaHJlZiA9PT0KKwkJCSAgICAgICAgICAgIHRyLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5ocmVmKSB7CisJCQkJLy8gd2UgaGF2ZSB0byBjb25jYXRlbmF0ZSBncm91cHMKKwkJCQl2YXIgcHJldl9yb3dzID0gcHJldl9ncm91cC5maXJzdENoaWxkLnJvd1NwYW4gfHwgMTsKKwkJCQl2YXIgY3Vycl9yb3dzID0gICAgICAgICB0ci5maXJzdENoaWxkLnJvd1NwYW4gfHwgMTsKKwkJCQlwcmV2X2dyb3VwLmZpcnN0Q2hpbGQucm93U3BhbiA9IHByZXZfcm93cyArIGN1cnJfcm93czsKKwkJCQkvL3RyLnJlbW92ZUNoaWxkKHRyLmZpcnN0Q2hpbGQpOworCQkJCXRyLmRlbGV0ZUNlbGwoMCk7IC8vIERPTTIgSFRNTCB3YXkKKwkJCX0gZWxzZSB7CisJCQkJY29sb3JDbGFzcyA9IChjb2xvckNsYXNzICsgMSkgJSAyOworCQkJCXByZXZfZ3JvdXAgPSB0cjsKKwkJCX0KKwkJfQorCQl2YXIgdHJfY2xhc3MgPSB0ci5jbGFzc05hbWU7CisJCXRyLmNsYXNzTmFtZSA9IHRyX2NsYXNzLnJlcGxhY2UoY29sb3JSZSwgY29sb3JDbGFzc2VzW2NvbG9yQ2xhc3NdKTsKKwkJbGluZW51bSsrOworCX0KK30KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIG1haW4gcGFydDogcGFyc2luZyByZXNwb25zZSAqLworCisvKioKKyAqIEZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCBibGFtZSBlbnRyeSwgYXMgc29vbiBhcyBpdCBmaW5pc2hlcy4KKyAqIEl0IHVwZGF0ZXMgcGFnZSB2aWEgRE9NIG1hbmlwdWxhdGlvbiwgYWRkaW5nIHNoYTEgaW5mbywgZXRjLgorICoKKyAqIEBwYXJhbSB7Q29tbWl0fSBjb21taXQ6IGJsYW1lZCBjb21taXQKKyAqIEBwYXJhbSB7T2JqZWN0fSBncm91cDogb2JqZWN0IHJlcHJlc2VudGluZyBncm91cCBvZiBsaW5lcywKKyAqICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggYmxhbWUgdGhlIHNhbWUgY29tbWl0IChibGFtZSBlbnRyeSkKKyAqCisgKiBAZ2xvYmFscyBibGFtZWRMaW5lcworICovCitmdW5jdGlvbiBoYW5kbGVMaW5lKGNvbW1pdCwgZ3JvdXApIHsKKwkvKgorCSAgIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgSFRNTCBmcmFnbWVudCB3ZSBhcmUgd29ya2luZworCSAgIHdpdGg6CisKKwkgICA8dHIgaWQ9ImwxMjMiIGNsYXNzPSIiPgorCSAgICAgPHRkIGNsYXNzPSJzaGExIiB0aXRsZT0iIj48YSBocmVmPSIiPiA8L2E+PC90ZD4KKwkgICAgIDx0ZCBjbGFzcz0ibGluZW5yIj48YSBjbGFzcz0ibGluZW5yIiBocmVmPSIiPjEyMzwvYT48L3RkPgorCSAgICAgPHRkIGNsYXNzPSJwcmUiPiMgdGltZXMgKG15IGV4dDMgZG9lc24mIzM5O3QpLjwvdGQ+CisJICAgPC90cj4KKwkqLworCisJdmFyIHJlc2xpbmUgPSBncm91cC5yZXNsaW5lOworCisJLy8gZm9ybWF0IGRhdGUgYW5kIHRpbWUgc3RyaW5nIG9ubHkgb25jZSBwZXIgY29tbWl0CisJaWYgKCFjb21taXQuaW5mbykgeworCQkvKiBlLmcuICdLYXkgU2lldmVycywgMjAwNS0wOC0wNyAyMTo0OTo0NiArMDIwMCcgKi8KKwkJY29tbWl0LmluZm8gPSBjb21taXQuYXV0aG9yICsgJywgJyArCisJCQlmb3JtYXREYXRlSVNPTG9jYWwoY29tbWl0LmF1dGhvclRpbWUsIGNvbW1pdC5hdXRob3JUaW1lem9uZSk7CisJfQorCisJLy8gY29sb3IgZGVwZW5kcyBvbiBncm91cCBvZiBsaW5lcywgbm90IG9ubHkgb24gYmxhbWVkIGNvbW1pdAorCXZhciBjb2xvck5vID0gZmluZENvbG9yTm8oCisJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsJysocmVzbGluZS0xKSksCisJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsJysocmVzbGluZStncm91cC5udW1saW5lcykpCisJKTsKKworCS8vIGxvb3Agb3ZlciBsaW5lcyBpbiBjb21taXQgZ3JvdXAKKwlmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLm51bWxpbmVzOyBpKyssIHJlc2xpbmUrKykgeworCQl2YXIgdHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbCcrcmVzbGluZSk7CisJCWlmICghdHIpIHsKKwkJCWJyZWFrOworCQl9CisJCS8qCisJCQk8dHIgaWQ9ImwxMjMiIGNsYXNzPSIiPgorCQkJICA8dGQgY2xhc3M9InNoYTEiIHRpdGxlPSIiPjxhIGhyZWY9IiI+IDwvYT48L3RkPgorCQkJICA8dGQgY2xhc3M9ImxpbmVuciI+PGEgY2xhc3M9ImxpbmVuciIgaHJlZj0iIj4xMjM8L2E+PC90ZD4KKwkJCSAgPHRkIGNsYXNzPSJwcmUiPiMgdGltZXMgKG15IGV4dDMgZG9lc24mIzM5O3QpLjwvdGQ+CisJCQk8L3RyPgorCQkqLworCQl2YXIgdGRfc2hhMSAgPSB0ci5maXJzdENoaWxkOworCQl2YXIgYV9zaGExICAgPSB0ZF9zaGExLmZpcnN0Q2hpbGQ7CisJCXZhciBhX2xpbmVuciA9IHRkX3NoYTEubmV4dFNpYmxpbmcuZmlyc3RDaGlsZDsKKworCQkvKiA8dHIgaWQ9ImwxMjMiIGNsYXNzPSIiPiAqLworCQl2YXIgdHJfY2xhc3MgPSAnJzsKKwkJaWYgKGNvbG9yTm8gIT09IG51bGwpIHsKKwkJCXRyX2NsYXNzID0gJ2NvbG9yJytjb2xvck5vOworCQl9CisJCWlmIChjb21taXQuYm91bmRhcnkpIHsKKwkJCXRyX2NsYXNzICs9ICcgYm91bmRhcnknOworCQl9CisJCWlmIChjb21taXQubnByZXZpb3VzID09PSAwKSB7CisJCQl0cl9jbGFzcyArPSAnIG5vLXByZXZpb3VzJzsKKwkJfSBlbHNlIGlmIChjb21taXQubnByZXZpb3VzID4gMSkgeworCQkJdHJfY2xhc3MgKz0gJyBtdWx0aXBsZS1wcmV2aW91cyc7CisJCX0KKwkJdHIuY2xhc3NOYW1lID0gdHJfY2xhc3M7CisKKwkJLyogPHRkIGNsYXNzPSJzaGExIiB0aXRsZT0iPyIgcm93c3Bhbj0iPyI+PGEgaHJlZj0iPyI+PzwvYT48L3RkPiAqLworCQlpZiAoaSA9PT0gMCkgeworCQkJdGRfc2hhMS50aXRsZSA9IGNvbW1pdC5pbmZvOworCQkJdGRfc2hhMS5yb3dTcGFuID0gZ3JvdXAubnVtbGluZXM7CisKKwkJCWFfc2hhMS5ocmVmID0gcHJvamVjdFVybCArICdhPWNvbW1pdDtoPScgKyBjb21taXQuc2hhMTsKKwkJCWlmIChhX3NoYTEuZmlyc3RDaGlsZCkgeworCQkJCWFfc2hhMS5maXJzdENoaWxkLmRhdGEgPSBjb21taXQuc2hhMS5zdWJzdHIoMCwgOCk7CisJCQl9IGVsc2UgeworCQkJCWFfc2hhMS5hcHBlbmRDaGlsZCgKKwkJCQkJZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29tbWl0LnNoYTEuc3Vic3RyKDAsIDgpKSk7CisJCQl9CisJCQlpZiAoZ3JvdXAubnVtbGluZXMgPj0gMikgeworCQkJCXZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKwkJCQl2YXIgYnIgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIik7CisJCQkJdmFyIG1hdGNoID0gY29tbWl0LmF1dGhvci5tYXRjaCgvXGIoW0EtWl0pXEIvZyk7CisJCQkJaWYgKG1hdGNoKSB7CisJCQkJCXZhciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoCisJCQkJCQkJbWF0Y2guam9pbignJykpOworCQkJCX0KKwkJCQlpZiAoYnIgJiYgdGV4dCkgeworCQkJCQl2YXIgZWxlbSA9IGZyYWdtZW50IHx8IHRkX3NoYTE7CisJCQkJCWVsZW0uYXBwZW5kQ2hpbGQoYnIpOworCQkJCQllbGVtLmFwcGVuZENoaWxkKHRleHQpOworCQkJCQlpZiAoZnJhZ21lbnQpIHsKKwkJCQkJCXRkX3NoYTEuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJLy90ci5yZW1vdmVDaGlsZCh0ZF9zaGExKTsgLy8gRE9NMiBDb3JlIHdheQorCQkJdHIuZGVsZXRlQ2VsbCgwKTsgLy8gRE9NMiBIVE1MIHdheQorCQl9CisKKwkJLyogPHRkIGNsYXNzPSJsaW5lbnIiPjxhIGNsYXNzPSJsaW5lbnIiIGhyZWY9Ij8iPjEyMzwvYT48L3RkPiAqLworCQl2YXIgbGluZW5yX2NvbW1pdCA9CisJCQkoJ3ByZXZpb3VzJyBpbiBjb21taXQgPyBjb21taXQucHJldmlvdXMgOiBjb21taXQuc2hhMSk7CisJCXZhciBsaW5lbnJfZmlsZW5hbWUgPQorCQkJKCdmaWxlX3BhcmVudCcgaW4gY29tbWl0ID8gY29tbWl0LmZpbGVfcGFyZW50IDogY29tbWl0LmZpbGVuYW1lKTsKKwkJYV9saW5lbnIuaHJlZiA9IHByb2plY3RVcmwgKyAnYT1ibGFtZV9pbmNyZW1lbnRhbCcgKworCQkJJztoYj0nICsgbGluZW5yX2NvbW1pdCArCisJCQknO2Y9JyAgKyBlbmNvZGVVUklDb21wb25lbnQobGluZW5yX2ZpbGVuYW1lKSArCisJCQknI2wnICsgKGdyb3VwLnNyY2xpbmUgKyBpKTsKKworCQlibGFtZWRMaW5lcysrOworCisJCS8vdXBkYXRlUHJvZ3Jlc3NJbmZvKCk7CisJfQorfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKiNAKworICogQGNvbnN0YW50CisgKi8KK3ZhciBzaGExUmUgPSAvXihbMC05YS1mXXs0MH0pIChbMC05XSspIChbMC05XSspIChbMC05XSspLzsKK3ZhciBpbmZvUmUgPSAvXihbYS16LV0rKSA/KC4qKS87Cit2YXIgZW5kUmUgID0gL15FTkQgPyhbXiBdKikgPyguKikvOworLyoqQC0qLworCit2YXIgY3VyQ29tbWl0ID0gbmV3IENvbW1pdCgpOwordmFyIGN1ckdyb3VwICA9IHt9OworCisvKioKKyAqIFBhcnNlIG91dHB1dCBmcm9tICdnaXQgYmxhbWUgLS1pbmNyZW1lbnRhbCBbLi4uXScsIHJlY2VpdmVkIHZpYQorICogWE1MSHR0cFJlcXVlc3QgZnJvbSBzZXJ2ZXIgKGJsYW1lZGF0YVVybCksIGFuZCBjYWxsIGhhbmRsZUxpbmUKKyAqICh3aGljaCB1cGRhdGVzIHBhZ2UpIGFzIHNvb24gYXMgYmxhbWUgZW50cnkgaXMgY29tcGxldGVkLgorICoKKyAqIEBwYXJhbSB7U3RyaW5nW119IGxpbmVzOiBuZXcgY29tcGxldGUgbGluZXMgZnJvbSBibGFtZWRhdGEgc2VydmVyCisgKgorICogQGdsb2JhbHMgY29tbWl0cywgY3VyQ29tbWl0LCBjdXJHcm91cCwgdF9pbnRlcnZhbF9zZXJ2ZXIsIGNtZHNfc2VydmVyCisgKiBAZ2xvYmFscyBzaGExUmUsIGluZm9SZSwgZW5kUmUKKyAqLworZnVuY3Rpb24gcHJvY2Vzc0JsYW1lTGluZXMobGluZXMpIHsKKwl2YXIgbWF0Y2g7CisKKwlmb3IgKHZhciBpID0gMCwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKworCQlpZiAoKG1hdGNoID0gc2hhMVJlLmV4ZWMobGluZXNbaV0pKSkgeworCQkJdmFyIHNoYTEgPSBtYXRjaFsxXTsKKwkJCXZhciBzcmNsaW5lICA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCk7CisJCQl2YXIgcmVzbGluZSAgPSBwYXJzZUludChtYXRjaFszXSwgMTApOworCQkJdmFyIG51bWxpbmVzID0gcGFyc2VJbnQobWF0Y2hbNF0sIDEwKTsKKworCQkJdmFyIGMgPSBjb21taXRzW3NoYTFdOworCQkJaWYgKCFjKSB7CisJCQkJYyA9IG5ldyBDb21taXQoc2hhMSk7CisJCQkJY29tbWl0c1tzaGExXSA9IGM7CisJCQl9CisJCQljdXJDb21taXQgPSBjOworCisJCQljdXJHcm91cC5zcmNsaW5lID0gc3JjbGluZTsKKwkJCWN1ckdyb3VwLnJlc2xpbmUgPSByZXNsaW5lOworCQkJY3VyR3JvdXAubnVtbGluZXMgPSBudW1saW5lczsKKworCQl9IGVsc2UgaWYgKChtYXRjaCA9IGluZm9SZS5leGVjKGxpbmVzW2ldKSkpIHsKKwkJCXZhciBpbmZvID0gbWF0Y2hbMV07CisJCQl2YXIgZGF0YSA9IG1hdGNoWzJdOworCQkJc3dpdGNoIChpbmZvKSB7CisJCQljYXNlICdmaWxlbmFtZSc6CisJCQkJY3VyQ29tbWl0LmZpbGVuYW1lID0gdW5xdW90ZShkYXRhKTsKKwkJCQkvLyAnZmlsZW5hbWUnIGluZm9ybWF0aW9uIHRlcm1pbmF0ZXMgdGhlIGVudHJ5CisJCQkJaGFuZGxlTGluZShjdXJDb21taXQsIGN1ckdyb3VwKTsKKwkJCQl1cGRhdGVQcm9ncmVzc0luZm8oKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2F1dGhvcic6CisJCQkJY3VyQ29tbWl0LmF1dGhvciA9IGRhdGE7CisJCQkJYnJlYWs7CisJCQljYXNlICdhdXRob3ItdGltZSc6CisJCQkJY3VyQ29tbWl0LmF1dGhvclRpbWUgPSBwYXJzZUludChkYXRhLCAxMCk7CisJCQkJYnJlYWs7CisJCQljYXNlICdhdXRob3ItdHonOgorCQkJCWN1ckNvbW1pdC5hdXRob3JUaW1lem9uZSA9IGRhdGE7CisJCQkJYnJlYWs7CisJCQljYXNlICdwcmV2aW91cyc6CisJCQkJY3VyQ29tbWl0Lm5wcmV2aW91cysrOworCQkJCS8vIHN0b3JlIG9ubHkgZmlyc3QgJ3ByZXZpb3VzJyBoZWFkZXIKKwkJCQlpZiAoISgncHJldmlvdXMnIGluIGN1ckNvbW1pdCkpIHsKKwkJCQkJdmFyIHBhcnRzID0gZGF0YS5zcGxpdCgnICcsIDIpOworCQkJCQljdXJDb21taXQucHJldmlvdXMgICAgPSBwYXJ0c1swXTsKKwkJCQkJY3VyQ29tbWl0LmZpbGVfcGFyZW50ID0gdW5xdW90ZShwYXJ0c1sxXSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAnYm91bmRhcnknOgorCQkJCWN1ckNvbW1pdC5ib3VuZGFyeSA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9IC8vIGVuZCBzd2l0Y2gKKworCQl9IGVsc2UgaWYgKChtYXRjaCA9IGVuZFJlLmV4ZWMobGluZXNbaV0pKSkgeworCQkJdF9pbnRlcnZhbF9zZXJ2ZXIgPSBtYXRjaFsxXTsKKwkJCWNtZHNfc2VydmVyID0gbWF0Y2hbMl07CisKKwkJfSBlbHNlIGlmIChsaW5lc1tpXSAhPT0gJycpIHsKKwkJCS8vIG1hbGZvcm1lZCBsaW5lCisKKwkJfSAvLyBlbmQgaWYgKG1hdGNoKQorCisJfSAvLyBlbmQgZm9yIChsaW5lcykKK30KKworLyoqCisgKiBQcm9jZXNzIG5ldyBkYXRhIGFuZCByZXR1cm4gcG9pbnRlciB0byBlbmQgb2YgcHJvY2Vzc2VkIHBhcnQKKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gdW5wcm9jZXNzZWQ6IG5ldyBkYXRhIChmcm9tIG5leHRSZWFkUG9zKQorICogQHBhcmFtIHtOdW1iZXJ9IG5leHRSZWFkUG9zOiBlbmQgb2YgbGFzdCBwcm9jZXNzZWQgZGF0YQorICogQHJldHVybiB7TnVtYmVyfSBlbmQgb2YgcHJvY2Vzc2VkIGRhdGEgKG5ldyB2YWx1ZSBmb3IgbmV4dFJlYWRQb3MpCisgKi8KK2Z1bmN0aW9uIHByb2Nlc3NEYXRhKHVucHJvY2Vzc2VkLCBuZXh0UmVhZFBvcykgeworCXZhciBsYXN0TGluZUVuZCA9IHVucHJvY2Vzc2VkLmxhc3RJbmRleE9mKCdcbicpOworCWlmIChsYXN0TGluZUVuZCAhPT0gLTEpIHsKKwkJdmFyIGxpbmVzID0gdW5wcm9jZXNzZWQuc3Vic3RyaW5nKDAsIGxhc3RMaW5lRW5kKS5zcGxpdCgnXG4nKTsKKwkJbmV4dFJlYWRQb3MgKz0gbGFzdExpbmVFbmQgKyAxIC8qIDEgPT0gJ1xuJy5sZW5ndGggKi87CisKKwkJcHJvY2Vzc0JsYW1lTGluZXMobGluZXMpOworCX0gLy8gZW5kIGlmCisKKwlyZXR1cm4gbmV4dFJlYWRQb3M7Cit9CisKKy8qKgorICogSGFuZGxlIFhNTEh0dHBSZXF1ZXN0IGVycm9ycworICoKKyAqIEBwYXJhbSB7WE1MSHR0cFJlcXVlc3R9IHhocjogWE1MSHR0cFJlcXVlc3Qgb2JqZWN0CisgKiBAcGFyYW0ge051bWJlcn0gW3hoci5wb2xsVGltZXJdIElEIG9mIHRoZSB0aW1lb3V0IHRvIGNsZWFyCisgKgorICogQGdsb2JhbHMgY29tbWl0cworICovCitmdW5jdGlvbiBoYW5kbGVFcnJvcih4aHIpIHsKKwllcnJvckluZm8oJ1NlcnZlciBlcnJvcjogJyArCisJCXhoci5zdGF0dXMgKyAnIC0gJyArICh4aHIuc3RhdHVzVGV4dCB8fCAnRXJyb3IgY29udGFjdGluZyBzZXJ2ZXInKSk7CisKKwlpZiAodHlwZW9mIHhoci5wb2xsVGltZXIgPT09ICJudW1iZXIiKSB7CisJCWNsZWFyVGltZW91dCh4aHIucG9sbFRpbWVyKTsKKwkJZGVsZXRlIHhoci5wb2xsVGltZXI7CisJfQorCWNvbW1pdHMgPSB7fTsgLy8gZnJlZSBtZW1vcnkKK30KKworLyoqCisgKiBDYWxsZWQgYWZ0ZXIgWE1MSHR0cFJlcXVlc3QgZmluaXNoZXMgKGxvYWRzKQorICoKKyAqIEBwYXJhbSB7WE1MSHR0cFJlcXVlc3R9IHhocjogWE1MSHR0cFJlcXVlc3Qgb2JqZWN0CisgKiBAcGFyYW0ge051bWJlcn0gW3hoci5wb2xsVGltZXJdIElEIG9mIHRoZSB0aW1lb3V0IHRvIGNsZWFyCisgKgorICogQGdsb2JhbHMgY29tbWl0cworICovCitmdW5jdGlvbiByZXNwb25zZUxvYWRlZCh4aHIpIHsKKwlpZiAodHlwZW9mIHhoci5wb2xsVGltZXIgPT09ICJudW1iZXIiKSB7CisJCWNsZWFyVGltZW91dCh4aHIucG9sbFRpbWVyKTsKKwkJZGVsZXRlIHhoci5wb2xsVGltZXI7CisJfQorCisJZml4Q29sb3JzQW5kR3JvdXBzKCk7CisJd3JpdGVUaW1lSW50ZXJ2YWwoKTsKKwljb21taXRzID0ge307IC8vIGZyZWUgbWVtb3J5Cit9CisKKy8qKgorICogaGFuZGxlciBmb3IgWE1MSHR0cFJlcXVlc3Qgb25yZWFkeXN0YXRlY2hhbmdlIGV2ZW50CisgKiBAc2VlIHN0YXJ0QmxhbWUKKyAqCisgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSB4aHI6IFhNTEh0dHBSZXF1ZXN0IG9iamVjdAorICogQHBhcmFtIHtOdW1iZXJ9IHhoci5wcmV2RGF0YUxlbmd0aDogcHJldmlvdXMgdmFsdWUgb2YgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGgKKyAqIEBwYXJhbSB7TnVtYmVyfSB4aHIubmV4dFJlYWRQb3M6IHN0YXJ0IG9mIHVucmVhZCBwYXJ0IG9mIHhoci5yZXNwb25zZVRleHQKKyAqIEBwYXJhbSB7TnVtYmVyfSBbeGhyLnBvbGxUaW1lcl0gSUQgb2YgdGhlIHRpbWVvdXQgKHRvIHJlc2V0IG9yIGNhbmNlbCkKKyAqIEBwYXJhbSB7Qm9vbGVhbn0gZnJvbVRpbWVyOiBpZiBoYW5kbGVyIHdhcyBjYWxsZWQgZnJvbSB0aW1lcgorICovCitmdW5jdGlvbiBoYW5kbGVSZXNwb25zZSh4aHIsIGZyb21UaW1lcikgeworCisJLyoKKwkgKiB4aHIucmVhZHlTdGF0ZQorCSAqCisJICogIFZhbHVlICBDb25zdGFudCAoVzNDKSAgICBEZXNjcmlwdGlvbgorCSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogIDAgICAgICBVTlNFTlQgICAgICAgICAgICBvcGVuKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuCisJICogIDEgICAgICBPUEVORUQgICAgICAgICAgICBzZW5kKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuCisJICogIDIgICAgICBIRUFERVJTX1JFQ0VJVkVEICBzZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgaGVhZGVycworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLgorCSAqICAzICAgICAgTE9BRElORyAgICAgICAgICAgRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuCisJICogIDQgICAgICBET05FICAgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLgorCSAqLworCisJaWYgKHhoci5yZWFkeVN0YXRlICE9PSA0ICYmIHhoci5yZWFkeVN0YXRlICE9PSAzKSB7CisJCXJldHVybjsKKwl9CisKKwkvLyB0aGUgc2VydmVyIHJldHVybmVkIGVycm9yCisJLy8gdHJ5IC4uLiBjYXRjaCBibG9jayBpcyB0byB3b3JrIGFyb3VuZCBidWcgaW4gSUU4CisJdHJ5IHsKKwkJaWYgKHhoci5yZWFkeVN0YXRlID09PSAzICYmIHhoci5zdGF0dXMgIT09IDIwMCkgeworCQkJcmV0dXJuOworCQl9CisJfSBjYXRjaCAoZSkgeworCQlyZXR1cm47CisJfQorCWlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCAmJiB4aHIuc3RhdHVzICE9PSAyMDApIHsKKwkJaGFuZGxlRXJyb3IoeGhyKTsKKwkJcmV0dXJuOworCX0KKworCS8vIEluIGtvbnF1ZXJvciB4aHIucmVzcG9uc2VUZXh0IGlzIHNvbWV0aW1lcyBudWxsIGhlcmUuLi4KKwlpZiAoeGhyLnJlc3BvbnNlVGV4dCA9PT0gbnVsbCkgeworCQlyZXR1cm47CisJfQorCisKKwkvLyBleHRyYWN0IG5ldyB3aG9sZSAoY29tcGxldGUpIGxpbmVzLCBhbmQgcHJvY2VzcyB0aGVtCisJaWYgKHhoci5wcmV2RGF0YUxlbmd0aCAhPT0geGhyLnJlc3BvbnNlVGV4dC5sZW5ndGgpIHsKKwkJeGhyLnByZXZEYXRhTGVuZ3RoID0geGhyLnJlc3BvbnNlVGV4dC5sZW5ndGg7CisJCXZhciB1bnByb2Nlc3NlZCA9IHhoci5yZXNwb25zZVRleHQuc3Vic3RyaW5nKHhoci5uZXh0UmVhZFBvcyk7CisJCXhoci5uZXh0UmVhZFBvcyA9IHByb2Nlc3NEYXRhKHVucHJvY2Vzc2VkLCB4aHIubmV4dFJlYWRQb3MpOworCX0KKworCS8vIGRpZCB3ZSBmaW5pc2ggd29yaz8KKwlpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHsKKwkJcmVzcG9uc2VMb2FkZWQoeGhyKTsKKwkJcmV0dXJuOworCX0KKworCS8vIGlmIHdlIGdldCBmcm9tIHRpbWVyLCB3ZSBoYXZlIHRvIHJlc3RhcnQgaXQKKwkvLyBvdGhlcndpc2Ugb25yZWFkeXN0YXRlY2hhbmdlIGdpdmVzIHVzIHBhcnRpYWwgcmVzcG9uc2UsIHRpbWVyIG5vdCBuZWVkZWQKKwlpZiAoZnJvbVRpbWVyKSB7CisJCXNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworCQkJaGFuZGxlUmVzcG9uc2UoeGhyLCB0cnVlKTsKKwkJfSwgMTAwMCk7CisKKwl9IGVsc2UgaWYgKHR5cGVvZiB4aHIucG9sbFRpbWVyID09PSAibnVtYmVyIikgeworCQljbGVhclRpbWVvdXQoeGhyLnBvbGxUaW1lcik7CisJCWRlbGV0ZSB4aHIucG9sbFRpbWVyOworCX0KK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisgKiBJbmNyZW1lbnRhbGx5IHVwZGF0ZSBsaW5lIGRhdGEgaW4gYmxhbWVfaW5jcmVtZW50YWwgdmlldyBpbiBnaXR3ZWIuCisgKgorICogQHBhcmFtIHtTdHJpbmd9IGJsYW1lZGF0YVVybDogVVJMIHRvIHNlcnZlciBzY3JpcHQgZ2VuZXJhdGluZyBibGFtZSBkYXRhLgorICogQHBhcmFtIHtTdHJpbmd9IGJVcmw6IHBhcnRpYWwgVVJMIHRvIHByb2plY3QsIHVzZWQgdG8gZ2VuZXJhdGUgbGlua3MuCisgKgorICogQ2FsbGVkIGZyb20gJ2JsYW1lX2luY3JlbWVudGFsJyB2aWV3IGFmdGVyIGxvYWRpbmcgdGFibGUgd2l0aAorICogZmlsZSBjb250ZW50cywgYSBiYXNlIGZvciBibGFtZSB2aWV3LgorICoKKyAqIEBnbG9iYWxzIHQwLCBwcm9qZWN0VXJsLCBkaXZfcHJvZ3Jlc3NfYmFyLCB0b3RhbExpbmVzCisqLworZnVuY3Rpb24gc3RhcnRCbGFtZShibGFtZWRhdGFVcmwsIGJVcmwpIHsKKworCXZhciB4aHIgPSBjcmVhdGVSZXF1ZXN0T2JqZWN0KCk7CisJaWYgKCF4aHIpIHsKKwkJZXJyb3JJbmZvKCdFUlJPUjogWE1MSHR0cFJlcXVlc3Qgbm90IHN1cHBvcnRlZCcpOworCQlyZXR1cm47CisJfQorCisJdDAgPSBuZXcgRGF0ZSgpOworCXByb2plY3RVcmwgPSBiVXJsICsgKGJVcmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICc7Jyk7CisJaWYgKChkaXZfcHJvZ3Jlc3NfYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2dyZXNzX2JhcicpKSkgeworCQkvL2Rpdl9wcm9ncmVzc19iYXIuc2V0QXR0cmlidXRlKCdzdHlsZScsICd3aWR0aDogMTAwJTsnKTsKKwkJZGl2X3Byb2dyZXNzX2Jhci5zdHlsZS5jc3NUZXh0ID0gJ3dpZHRoOiAxMDAlOyc7CisJfQorCXRvdGFsTGluZXMgPSBjb3VudExpbmVzKCk7CisJdXBkYXRlUHJvZ3Jlc3NJbmZvKCk7CisKKwkvKiBhZGQgZXh0cmEgcHJvcGVydGllcyB0byB4aHIgb2JqZWN0IHRvIGhlbHAgcHJvY2Vzc2luZyByZXNwb25zZSAqLworCXhoci5wcmV2RGF0YUxlbmd0aCA9IC0xOyAgLy8gdXNlZCB0byBkZXRlY3QgaWYgd2UgaGF2ZSBuZXcgZGF0YQorCXhoci5uZXh0UmVhZFBvcyA9IDA7ICAgICAgLy8gd2hlcmUgdW5yZWFkIHBhcnQgb2YgcmVzcG9uc2Ugc3RhcnRzCisKKwl4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgeworCQloYW5kbGVSZXNwb25zZSh4aHIsIGZhbHNlKTsKKwl9OworCisJeGhyLm9wZW4oJ0dFVCcsIGJsYW1lZGF0YVVybCk7CisJeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICd0ZXh0L3BsYWluJyk7CisJeGhyLnNlbmQobnVsbCk7CisKKwkvLyBub3QgYWxsIGJyb3dzZXJzIGNhbGwgb25yZWFkeXN0YXRlY2hhbmdlIGV2ZW50IG9uIGVhY2ggc2VydmVyIGZsdXNoCisJLy8gcG9sbCByZXNwb25zZSB1c2luZyB0aW1lciBldmVyeSBzZWNvbmQgdG8gaGFuZGxlIHRoaXMgaXNzdWUKKwl4aHIucG9sbFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisJCWhhbmRsZVJlc3BvbnNlKHhociwgdHJ1ZSk7CisJfSwgMTAwMCk7Cit9CisKKy8qIGVuZCBvZiBibGFtZV9pbmNyZW1lbnRhbC5qcyAqLwpkaWZmIC0tZ2l0IGEvZ2l0d2ViL3N0YXRpYy9qcy9qYXZhc2NyaXB0LWRldGVjdGlvbi5qcyBiL2dpdHdlYi9zdGF0aWMvanMvamF2YXNjcmlwdC1kZXRlY3Rpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEyNTk2ZgotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9zdGF0aWMvanMvamF2YXNjcmlwdC1kZXRlY3Rpb24uanMKQEAgLTAsMCArMSw0MyBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDA3LCBGcmVkcmlrIEt1aXZpbmVuIDxmcmVrdWlAZ21haWwuY29tPgorLy8gICAgICAgICAgICAgICAyMDA3LCBQZXRyIEJhdWRpcyA8cGFza3lAc3VzZS5jej4KKy8vICAgICAgICAgIDIwMDgtMjAxMSwgSmFrdWIgTmFyZWJza2kgPGpuYXJlYkBnbWFpbC5jb20+CisKKy8qKgorICogQGZpbGVPdmVydmlldyBEZXRlY3QgaWYgSmF2YVNjcmlwdCBpcyBlbmFibGVkLCBhbmQgcGFzcyBpdCB0byBzZXJ2ZXItc2lkZQorICogQGxpY2Vuc2UgR1BMdjIgb3IgbGF0ZXIKKyAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogTWFuaXB1bGF0aW5nIGxpbmtzICovCisKKy8qKgorICogdXNlZCB0byBjaGVjayBpZiBsaW5rIGhhcyAnanMnIHF1ZXJ5IHBhcmFtZXRlciBhbHJlYWR5IChhdCBlbmQpLAorICogYW5kIG90aGVyIHJlYXNvbnMgdG8gbm90IGFkZCAnanM9MScgcGFyYW0gYXQgdGhlIGVuZCBvZiBsaW5rCisgKiBAY29uc3RhbnQKKyAqLwordmFyIGpzRXhjZXB0aW9uc1JlID0gL1s7P11qcz1bMDFdKCMuKik/JC87CisKKy8qKgorICogQWRkICc/anM9MScgb3IgJztqcz0xJyB0byB0aGUgZW5kIG9mIGV2ZXJ5IGxpbmsgaW4gdGhlIGRvY3VtZW50CisgKiB0aGF0IGRvZXNuJ3QgaGF2ZSAnanMnIHF1ZXJ5IHBhcmFtZXRlciBzZXQgYWxyZWFkeS4KKyAqCisgKiBMaW5rcyB3aXRoICdqcz0xJyBsZWFkIHRvIEphdmFTY3JpcHQgdmVyc2lvbiBvZiBnaXZlbiBhY3Rpb24sIGlmIGl0CisgKiBleGlzdHMgKGN1cnJlbnRseSB0aGVyZSBpcyBvbmx5ICdibGFtZV9pbmNyZW1lbnRhbCcgZm9yICdibGFtZScpCisgKgorICogVG8gYmUgdXNlZCBhcyBgd2luZG93Lm9ubG9hZGAgaGFuZGxlcgorICoKKyAqIEBnbG9iYWxzIGpzRXhjZXB0aW9uc1JlCisgKi8KK2Z1bmN0aW9uIGZpeExpbmtzKCkgeworCXZhciBhbGxMaW5rcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIikgfHwgZG9jdW1lbnQubGlua3M7CisJZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFsbExpbmtzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisJCXZhciBsaW5rID0gYWxsTGlua3NbaV07CisJCWlmICghanNFeGNlcHRpb25zUmUudGVzdChsaW5rKSkgeworCQkJbGluay5ocmVmID0gbGluay5ocmVmLnJlcGxhY2UoLygjfCQpLywKKwkJCQkobGluay5ocmVmLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnOycpICsgJ2pzPTEkMScpOworCQl9CisJfQorfQorCisvKiBlbmQgb2YgamF2YXNjcmlwdC1kZXRlY3Rpb24uanMgKi8KZGlmZiAtLWdpdCBhL2dpdHdlYi9zdGF0aWMvanMvbGliL2NvbW1vbi1saWIuanMgYi9naXR3ZWIvc3RhdGljL2pzL2xpYi9jb21tb24tbGliLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOGJiYjcKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvc3RhdGljL2pzL2xpYi9jb21tb24tbGliLmpzCkBAIC0wLDAgKzEsMjI0IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIEZyZWRyaWsgS3VpdmluZW4gPGZyZWt1aUBnbWFpbC5jb20+CisvLyAgICAgICAgICAgICAgIDIwMDcsIFBldHIgQmF1ZGlzIDxwYXNreUBzdXNlLmN6PgorLy8gICAgICAgICAgMjAwOC0yMDExLCBKYWt1YiBOYXJlYnNraSA8am5hcmViQGdtYWlsLmNvbT4KKworLyoqCisgKiBAZmlsZU92ZXJ2aWV3IEdlbmVyaWMgSmF2YVNjcmlwdCBjb2RlIChoZWxwZXIgZnVuY3Rpb25zKQorICogQGxpY2Vuc2UgR1BMdjIgb3IgbGF0ZXIKKyAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBQYWRkaW5nICovCisKKy8qKgorICogcGFkIElOUFVUIG9uIHRoZSBsZWZ0IHdpdGggU1RSIHRoYXQgaXMgYXNzdW1lZCB0byBoYXZlIHZpc2libGUKKyAqIHdpZHRoIG9mIHNpbmdsZSBjaGFyYWN0ZXIgKGZvciBleGFtcGxlIG5vbmJyZWFrYWJsZSBzcGFjZXMpLAorICogdG8gV0lEVEggY2hhcmFjdGVycworICoKKyAqIGV4YW1wbGU6IHBhZExlZnRTdHIoMTIsIDMsICdcdTAwQTAnKSA9PSAnXHUwMEEwMTInCisgKiAgICAgICAgICAoJ1x1MDBBMCcgaXMgbm9uYnJlYWthYmxlIHNwYWNlKQorICoKKyAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gaW5wdXQ6IG51bWJlciB0byBwYWQKKyAqIEBwYXJhbSB7TnVtYmVyfSB3aWR0aDogdmlzaWJsZSB3aWR0aCBvZiBvdXRwdXQKKyAqIEBwYXJhbSB7U3RyaW5nfSBzdHI6IHN0cmluZyB0byBwcmVmaXggdG8gc3RyaW5nLCBkZWZhdWx0cyB0byAnXHUwMEEwJworICogQHJldHVybnMge1N0cmluZ30gSU5QVVQgcHJlZml4ZWQgd2l0aCBTVFIgeCAoV0lEVEggLSBJTlBVVC5sZW5ndGgpCisgKi8KK2Z1bmN0aW9uIHBhZExlZnRTdHIoaW5wdXQsIHdpZHRoLCBzdHIpIHsKKwl2YXIgcHJlZml4ID0gJyc7CisJaWYgKHR5cGVvZiBzdHIgPT09ICd1bmRlZmluZWQnKSB7CisJCWNoID0gJ1x1MDBBMCc7IC8vIHVzaW5nICcmbmJzcDsnIGRvZXNuJ3Qgd29yayBpbiBhbGwgYnJvd3NlcnMKKwl9CisKKwl3aWR0aCAtPSBpbnB1dC50b1N0cmluZygpLmxlbmd0aDsKKwl3aGlsZSAod2lkdGggPiAwKSB7CisJCXByZWZpeCArPSBzdHI7CisJCXdpZHRoLS07CisJfQorCXJldHVybiBwcmVmaXggKyBpbnB1dDsKK30KKworLyoqCisgKiBQYWQgSU5QVVQgb24gdGhlIGxlZnQgdG8gV0lEVEgsIHVzaW5nIGdpdmVuIHBhZGRpbmcgY2hhcmFjdGVyIENILAorICogZm9yIGV4YW1wbGUgcGFkTGVmdCgnYScsIDMsICdfJykgaXMgJ19fYScKKyAqICAgICAgICAgICAgIHBhZExlZnQoNCwgMikgaXMgJzA0JyAoc2FtZSBhcyBwYWRMZWZ0KDQsIDIsICcwJykpCisgKgorICogQHBhcmFtIHtTdHJpbmd9IGlucHV0OiBpbnB1dCB2YWx1ZSBjb252ZXJ0ZWQgdG8gc3RyaW5nLgorICogQHBhcmFtIHtOdW1iZXJ9IHdpZHRoOiBkZXNpcmVkIGxlbmd0aCBvZiBvdXRwdXQuCisgKiBAcGFyYW0ge1N0cmluZ30gY2g6IHNpbmdsZSBjaGFyYWN0ZXIgdG8gcHJlZml4IHRvIHN0cmluZywgZGVmYXVsdHMgdG8gJzAnLgorICoKKyAqIEByZXR1cm5zIHtTdHJpbmd9IE1vZGlmaWVkIHN0cmluZywgYXQgbGVhc3QgU0laRSBsZW5ndGguCisgKi8KK2Z1bmN0aW9uIHBhZExlZnQoaW5wdXQsIHdpZHRoLCBjaCkgeworCXZhciBzID0gaW5wdXQgKyAiIjsKKwlpZiAodHlwZW9mIGNoID09PSAndW5kZWZpbmVkJykgeworCQljaCA9ICcwJzsKKwl9CisKKwl3aGlsZSAocy5sZW5ndGggPCB3aWR0aCkgeworCQlzID0gY2ggKyBzOworCX0KKwlyZXR1cm4gczsKK30KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIEhhbmRsaW5nIGJyb3dzZXIgaW5jb21wYXRpYmlsaXRpZXMgKi8KKworLyoqCisgKiBDcmVhdGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IGluIGNyb3NzLWJyb3dzZXIgd2F5CisgKiBAcmV0dXJucyBYTUxIdHRwUmVxdWVzdCBvYmplY3QsIG9yIG51bGwKKyAqLworZnVuY3Rpb24gY3JlYXRlUmVxdWVzdE9iamVjdCgpIHsKKwl0cnkgeworCQlyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisJfSBjYXRjaCAoZSkge30KKwl0cnkgeworCQlyZXR1cm4gd2luZG93LmNyZWF0ZVJlcXVlc3QoKTsKKwl9IGNhdGNoIChlKSB7fQorCXRyeSB7CisJCXJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhNTEhUVFAiKTsKKwl9IGNhdGNoIChlKSB7fQorCXRyeSB7CisJCXJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKKwl9IGNhdGNoIChlKSB7fQorCisJcmV0dXJuIG51bGw7Cit9CisKKworLyoqCisgKiBJbnNlcnQgcnVsZSBnaXZpbmcgc3BlY2lmaWVkIFNUWUxFIHRvIGdpdmVuIFNFTEVDVE9SIGF0IHRoZSBlbmQgb2YKKyAqIGZpcnN0IENTUyBzdHlsZXNoZWV0LgorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvcjogQ1NTIHNlbGVjdG9yLCBlLmcuICcuY2xhc3MnCisgKiBAcGFyYW0ge1N0cmluZ30gc3R5bGU6IHJ1bGUgY29udGVudHMsIGUuZy4gJ2JhY2tncm91bmQtY29sb3I6IHJlZDsnCisgKi8KK2Z1bmN0aW9uIGFkZENzc1J1bGUoc2VsZWN0b3IsIHN0eWxlKSB7CisJdmFyIHN0eWxlc2hlZXQgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1swXTsKKworCXZhciB0aGVSdWxlcyA9IFtdOworCWlmIChzdHlsZXNoZWV0LmNzc1J1bGVzKSB7ICAgICAvLyBXM0Mgd2F5CisJCXRoZVJ1bGVzID0gc3R5bGVzaGVldC5jc3NSdWxlczsKKwl9IGVsc2UgaWYgKHN0eWxlc2hlZXQucnVsZXMpIHsgLy8gSUUgd2F5CisJCXRoZVJ1bGVzID0gc3R5bGVzaGVldC5ydWxlczsKKwl9CisKKwlpZiAoc3R5bGVzaGVldC5pbnNlcnRSdWxlKSB7ICAgIC8vIFczQyB3YXkKKwkJc3R5bGVzaGVldC5pbnNlcnRSdWxlKHNlbGVjdG9yICsgJyB7ICcgKyBzdHlsZSArICcgfScsIHRoZVJ1bGVzLmxlbmd0aCk7CisJfSBlbHNlIGlmIChzdHlsZXNoZWV0LmFkZFJ1bGUpIHsgLy8gSUUgd2F5CisJCXN0eWxlc2hlZXQuYWRkUnVsZShzZWxlY3Rvciwgc3R5bGUpOworCX0KK30KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIFN1cHBvcnQgZm9yIGxlZ2FjeSBicm93c2VycyAqLworCisvKioKKyAqIFByb3ZpZGVzIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgbWV0aG9kLCBpZiB0aGVyZSBpcyBubyBuYXRpdmUKKyAqIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgorICoKKyAqIE5PVEUgdGhhdCB0aGVyZSBhcmUgbGltaXRzIGFuZCBkaWZmZXJlbmNlcyBjb21wYXJlZCB0byBuYXRpdmUKKyAqIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgYXMgZGVmaW5lZCBieSBlLmcuOgorICogICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZQorICogICBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9kb20uaHRtbCNkb20tZ2V0ZWxlbWVudHNieWNsYXNzbmFtZQorICogICBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9kb20uaHRtbCNkb20tZG9jdW1lbnQtZ2V0ZWxlbWVudHNieWNsYXNzbmFtZQorICoKKyAqIE5hbWVseSwgdGhpcyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBvbmx5IHNpbmdsZSBjbGFzcyBuYW1lIGFzCisgKiBhcmd1bWVudCBhbmQgbm90IHNldCBvZiBzcGFjZS1zZXBhcmF0ZWQgdG9rZW5zIHJlcHJlc2VudGluZyBjbGFzc2VzLAorICogaXQgcmV0dXJucyBBcnJheSBvZiBub2RlcyByYXRoZXIgdGhhbiBsaXZlIE5vZGVMaXN0LCBhbmQgaGFzCisgKiBhZGRpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50IHdoZXJlIHlvdSBjYW4gbGltaXQgc2VhcmNoIHRvIGdpdmVuIHRhZ3MKKyAqICh2aWEgZ2V0RWxlbWVudHNCeVRhZ05hbWUpLgorICoKKyAqIEJhc2VkIG9uCisgKiAgIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nZXRlbGVtZW50c2J5Y2xhc3NuYW1lLworICogICBodHRwOi8vd3d3LmR1c3RpbmRpYXouY29tL2dldGVsZW1lbnRzYnljbGFzcy8KKyAqICAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODE4ODY1L2RvLXdlLWhhdmUtZ2V0ZWxlbWVudHNieWNsYXNzbmFtZS1pbi1qYXZhc2NyaXB0CisgKgorICogU2VlIGFsc28gaHR0cDovL2Vqb2huLm9yZy9ibG9nL2dldGVsZW1lbnRzYnljbGFzc25hbWUtc3BlZWQtY29tcGFyaXNvbi8KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gY2xhc3M6IG5hbWUgb2YgX3NpbmdsZV8gY2xhc3MgdG8gZmluZAorICogQHBhcmFtIHtTdHJpbmd9IFt0YWdoaW50XSBsaW1pdCBzZWFyY2ggdG8gZ2l2ZW4gdGFncworICogQHJldHVybnMge05vZGVbXX0gYXJyYXkgb2YgbWF0Y2hpbmcgZWxlbWVudHMKKyAqLworaWYgKCEoJ2dldEVsZW1lbnRzQnlDbGFzc05hbWUnIGluIGRvY3VtZW50KSkgeworCWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBmdW5jdGlvbiAoY2xhc3NuYW1lLCB0YWdoaW50KSB7CisJCXRhZ2hpbnQgPSB0YWdoaW50IHx8ICIqIjsKKwkJdmFyIGVsZW1lbnRzID0gKHRhZ2hpbnQgPT09ICIqIiAmJiBkb2N1bWVudC5hbGwpID8KKwkJICAgICAgICAgICAgICAgZG9jdW1lbnQuYWxsIDoKKwkJICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnaGludCk7CisJCXZhciBwYXR0ZXJuID0gbmV3IFJlZ0V4cCgiKF58XFxzKSIgKyBjbGFzc25hbWUgKyAiKFxcc3wkKSIpOworCQl2YXIgbWF0Y2hlcz0gW107CisJCWZvciAodmFyIGkgPSAwLCBqID0gMCwgbiA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykgeworCQkJdmFyIGVsPSBlbGVtZW50c1tpXTsKKwkJCWlmIChlbC5jbGFzc05hbWUgJiYgcGF0dGVybi50ZXN0KGVsLmNsYXNzTmFtZSkpIHsKKwkJCQkvLyBtYXRjaGVzLnB1c2goZWwpOworCQkJCW1hdGNoZXNbal0gPSBlbDsKKwkJCQlqKys7CisJCQl9CisJCX0KKwkJcmV0dXJuIG1hdGNoZXM7CisJfTsKK30gLy8gZW5kIGlmCisKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiB1bnF1b3RpbmcvdW5lc2NhcGluZyBmaWxlbmFtZXMgKi8KKworLyoqI0ArCisgKiBAY29uc3RhbnQKKyAqLwordmFyIGVzY0NvZGVSZSA9IC9cXChbXjAtN118WzAtN117MSwzfSkvZzsKK3ZhciBvY3RFc2NSZSA9IC9eWzAtN117MSwzfSQvOwordmFyIG1heWJlUXVvdGVkUmUgPSAvXlwiKC4qKVwiJC87CisvKiojQC0qLworCisvKioKKyAqIHVucXVvdGUgbWF5YmUgQy1xdW90ZWQgZmlsZW5hbWUgKGFzIHVzZWQgYnkgZ2l0LCBpLmUuIGl0IGlzCisgKiBpbiBkb3VibGUgcXVvdGVzICciJyBpZiB0aGVyZSBpcyBhbnkgZXNjYXBlIGNoYXJhY3RlciB1c2VkKQorICogZS5nLiAnYWEnIC0+ICdhYScsICciYVx0YSInIC0+ICdhCWEnCisgKgorICogQHBhcmFtIHtTdHJpbmd9IHN0cjogZ2l0LXF1b3RlZCBzdHJpbmcKKyAqIEByZXR1cm5zIHtTdHJpbmd9IFVucXVvdGVkIGFuZCB1bmVzY2FwZWQgc3RyaW5nCisgKgorICogQGdsb2JhbHMgZXNjQ29kZVJlLCBvY3RFc2NSZSwgbWF5YmVRdW90ZWRSZQorICovCitmdW5jdGlvbiB1bnF1b3RlKHN0cikgeworCWZ1bmN0aW9uIHVucShzZXEpIHsKKwkJdmFyIGVzID0geworCQkJLy8gY2hhcmFjdGVyIGVzY2FwZSBjb2RlcywgYWthIGVzY2FwZSBzZXF1ZW5jZXMgKGZyb20gQykKKwkJCS8vIHJlcGxhY2VtZW50cyBhcmUgdG8gc29tZSBleHRlbnQgSmF2YVNjcmlwdCBzcGVjaWZpYworCQkJdDogIlx0IiwgICAvLyB0YWIgICAgICAgICAgICAoSFQsIFRBQikKKwkJCW46ICJcbiIsICAgLy8gbmV3bGluZSAgICAgICAgKE5MKQorCQkJcjogIlxyIiwgICAvLyByZXR1cm4gICAgICAgICAoQ1IpCisJCQlmOiAiXGYiLCAgIC8vIGZvcm0gZmVlZCAgICAgIChGRikKKwkJCWI6ICJcYiIsICAgLy8gYmFja3NwYWNlICAgICAgKEJTKQorCQkJYTogIlx4MDciLCAvLyBhbGFybSAoYmVsbCkgICAoQkVMKQorCQkJZTogIlx4MUIiLCAvLyBlc2NhcGUgICAgICAgICAoRVNDKQorCQkJdjogIlx2IiAgICAvLyB2ZXJ0aWNhbCB0YWIgICAoVlQpCisJCX07CisKKwkJaWYgKHNlcS5zZWFyY2gob2N0RXNjUmUpICE9PSAtMSkgeworCQkJLy8gb2N0YWwgY2hhciBzZXF1ZW5jZQorCQkJcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoc2VxLCA4KSk7CisJCX0gZWxzZSBpZiAoc2VxIGluIGVzKSB7CisJCQkvLyBDIGVzY2FwZSBzZXF1ZW5jZSwgYWthIGNoYXJhY3RlciBlc2NhcGUgY29kZQorCQkJcmV0dXJuIGVzW3NlcV07CisJCX0KKwkJLy8gcXVvdGVkIG9yZGluYXJ5IGNoYXJhY3RlcgorCQlyZXR1cm4gc2VxOworCX0KKworCXZhciBtYXRjaCA9IHN0ci5tYXRjaChtYXliZVF1b3RlZFJlKTsKKwlpZiAobWF0Y2gpIHsKKwkJc3RyID0gbWF0Y2hbMV07CisJCS8vIHBlcmhhcHMgc3RyID0gZXZhbCgnIicrc3RyKyciJyk7IHdvdWxkIGJlIGVub3VnaD8KKwkJc3RyID0gc3RyLnJlcGxhY2UoZXNjQ29kZVJlLAorCQkJZnVuY3Rpb24gKHN1YnN0ciwgcDEsIG9mZnNldCwgcykgeyByZXR1cm4gdW5xKHAxKTsgfSk7CisJfQorCXJldHVybiBzdHI7Cit9CisKKy8qIGVuZCBvZiBjb21tb24tbGliLmpzICovCmRpZmYgLS1naXQgYS9naXR3ZWIvc3RhdGljL2pzL2xpYi9jb29raWVzLmpzIGIvZ2l0d2ViL3N0YXRpYy9qcy9saWIvY29va2llcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmI5YTA3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL3N0YXRpYy9qcy9saWIvY29va2llcy5qcwpAQCAtMCwwICsxLDExNCBAQAorLyoqCisgKiBAZmlsZU92ZXJ2aWV3IEFjY2Vzc2luZyBjb29raWVzIGZyb20gSmF2YVNjcmlwdAorICogQGxpY2Vuc2UgR1BMdjIgb3IgbGF0ZXIKKyAqLworCisvKgorICogQmFzZWQgb24gc3Vic2VjdGlvbiAiQ29va2llcyBpbiBKYXZhU2NyaXB0IiBvZiAiUHJvZmVzc2lvbmFsCisgKiBKYXZhU2NyaXB0IGZvciBXZWIgRGV2ZWxvcGVycyIgYnkgTmljaG9sYXMgQy4gWmFrYXMgYW5kIGNvb2tpZQorICogcGx1Z2luIGZyb20galF1ZXJ5IChkdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlcykKKyAqLworCisKKy8qKgorICogQ3JlYXRlIGEgY29va2llIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHZhbHVlLAorICogYW5kIG90aGVyIG9wdGlvbmFsIHBhcmFtZXRlcnMuCisgKgorICogQGV4YW1wbGUKKyAqICAgc2V0Q29va2llKCdmb28nLCAnYmFyJyk7IC8vIHdpbGwgYmUgZGVsZXRlZCB3aGVuIGJyb3dzZXIgZXhpdHMKKyAqICAgc2V0Q29va2llKCdmb28nLCAnYmFyJywgeyBleHBpcmVzOiBuZXcgRGF0ZShEYXRlLnBhcnNlKCdKYW4gMSwgMjAxMicpKSB9KTsKKyAqICAgc2V0Q29va2llKCdmb28nLCAnYmFyJywgeyBleHBpcmVzOiA3IH0pOyAvLyA3IGRheXMgPSAxIHdlZWsKKyAqICAgc2V0Q29va2llKCdmb28nLCAnYmFyJywgeyBleHBpcmVzOiAxNCwgcGF0aDogJy8nIH0pOworICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBzTmFtZTogICAgVW5pcXVlIG5hbWUgb2YgYSBjb29raWUgKGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzKS4KKyAqIEBwYXJhbSB7U3RyaW5nfSBzVmFsdWU6ICAgVGhlIHN0cmluZyB2YWx1ZSBzdG9yZWQgaW4gYSBjb29raWUuCisgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIEFuIG9iamVjdCBsaXRlcmFsIGNvbnRhaW5pbmcga2V5L3ZhbHVlIHBhaXJzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHByb3ZpZGUgb3B0aW9uYWwgY29va2llIGF0dHJpYnV0ZXMuCisgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ8RGF0ZX0gW29wdGlvbnMuZXhwaXJlc10gRWl0aGVyIGxpdGVyYWwgc3RyaW5nIHRvIGJlIHVzZWQgYXMgY29va2llIGV4cGlyZXMsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhbiBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIGV4cGlyYXRpb24gZGF0ZSBmcm9tIG5vdyBvbiBpbiBkYXlzLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBEYXRlIG9iamVjdCB0byBiZSB1c2VkIGFzIGNvb2tpZSBleHBpcmF0aW9uIGRhdGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBhIG5lZ2F0aXZlIHZhbHVlIGlzIHNwZWNpZmllZCBvciBhIGRhdGUgaW4gdGhlIHBhc3QpLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvb2tpZSB3aWxsIGJlIGRlbGV0ZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gbnVsbCBvciBvbWl0dGVkLCB0aGUgY29va2llIHdpbGwgYmUgYSBzZXNzaW9uIGNvb2tpZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdpbGwgbm90IGJlIHJldGFpbmVkIHdoZW4gdGhlIGJyb3dzZXIgZXhpdHMuCisgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMucGF0aF0gUmVzdHJpY3QgYWNjZXNzIG9mIGEgY29va2llIHRvIHBhcnRpY3VsYXIgZGlyZWN0b3J5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdDogcGF0aCBvZiBwYWdlIHRoYXQgY3JlYXRlZCB0aGUgY29va2llKS4KKyAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5kb21haW5dIE92ZXJyaWRlIHdoYXQgd2ViIHNpdGVzIGFyZSBhbGxvd2VkIHRvIGFjY2VzcyBjb29raWUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0OiBkb21haW4gb2YgcGFnZSB0aGF0IGNyZWF0ZWQgdGhlIGNvb2tpZSkuCisgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNlY3VyZV0gSWYgdHJ1ZSwgdGhlIHNlY3VyZSBhdHRyaWJ1dGUgb2YgdGhlIGNvb2tpZSB3aWxsIGJlIHNldAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgY29va2llIHdvdWxkIGJlIGFjY2Vzc2libGUgb25seSBmcm9tIHNlY3VyZSBzaXRlcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb29raWUgdHJhbnNtaXNzaW9uIHdpbGwgcmVxdWlyZSBzZWN1cmUgcHJvdG9jb2wgbGlrZSBIVFRQUykuCisgKi8KK2Z1bmN0aW9uIHNldENvb2tpZShzTmFtZSwgc1ZhbHVlLCBvcHRpb25zKSB7CisJb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisJaWYgKHNWYWx1ZSA9PT0gbnVsbCkgeworCQlzVmFsdWUgPSAnJzsKKwkJb3B0aW9uLmV4cGlyZXMgPSAnZGVsZXRlJzsKKwl9CisKKwl2YXIgc0Nvb2tpZSA9IHNOYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHNWYWx1ZSk7CisKKwlpZiAob3B0aW9ucy5leHBpcmVzKSB7CisJCXZhciBvRXhwaXJlcyA9IG9wdGlvbnMuZXhwaXJlcywgc0RhdGU7CisJCWlmIChvRXhwaXJlcyA9PT0gJ2RlbGV0ZScpIHsKKwkJCXNEYXRlID0gJ1RodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UJzsKKwkJfSBlbHNlIGlmICh0eXBlb2Ygb0V4cGlyZXMgPT09ICdzdHJpbmcnKSB7CisJCQlzRGF0ZSA9IG9FeHBpcmVzOworCQl9IGVsc2UgeworCQkJdmFyIG9EYXRlOworCQkJaWYgKHR5cGVvZiBvRXhwaXJlcyA9PT0gJ251bWJlcicpIHsKKwkJCQlvRGF0ZSA9IG5ldyBEYXRlKCk7CisJCQkJb0RhdGUuc2V0VGltZShvRGF0ZS5nZXRUaW1lKCkgKyAob0V4cGlyZXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7IC8vIGRheXMgdG8gbXMKKwkJCX0gZWxzZSB7CisJCQkJb0RhdGUgPSBvRXhwaXJlczsKKwkJCX0KKwkJCXNEYXRlID0gb0RhdGUudG9HTVRTdHJpbmcoKTsKKwkJfQorCQlzQ29va2llICs9ICc7IGV4cGlyZXM9JyArIHNEYXRlOworCX0KKworCWlmIChvcHRpb25zLnBhdGgpIHsKKwkJc0Nvb2tpZSArPSAnOyBwYXRoPScgKyAob3B0aW9ucy5wYXRoKTsKKwl9CisJaWYgKG9wdGlvbnMuZG9tYWluKSB7CisJCXNDb29raWUgKz0gJzsgZG9tYWluPScgKyAob3B0aW9ucy5kb21haW4pOworCX0KKwlpZiAob3B0aW9ucy5zZWN1cmUpIHsKKwkJc0Nvb2tpZSArPSAnOyBzZWN1cmUnOworCX0KKwlkb2N1bWVudC5jb29raWUgPSBzQ29va2llOworfQorCisvKioKKyAqIEdldCB0aGUgdmFsdWUgb2YgYSBjb29raWUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gc05hbWU6IFVuaXF1ZSBuYW1lIG9mIGEgY29va2llIChsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcykKKyAqIEByZXR1cm5zIHtTdHJpbmd8bnVsbH0gVGhlIHN0cmluZyB2YWx1ZSBzdG9yZWQgaW4gYSBjb29raWUKKyAqLworZnVuY3Rpb24gZ2V0Q29va2llKHNOYW1lKSB7CisJdmFyIHNSRSA9ICcoPzo7ICk/JyArIHNOYW1lICsgJz0oW147XSopOz8nOworCXZhciBvUkUgPSBuZXcgUmVnRXhwKHNSRSk7CisJaWYgKG9SRS50ZXN0KGRvY3VtZW50LmNvb2tpZSkpIHsKKwkJcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChSZWdFeHBbJyQxJ10pOworCX0gZWxzZSB7CisJCXJldHVybiBudWxsOworCX0KK30KKworLyoqCisgKiBEZWxldGUgY29va2llIHdpdGggZ2l2ZW4gbmFtZQorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBzTmFtZTogICAgVW5pcXVlIG5hbWUgb2YgYSBjb29raWUgKGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzKQorICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBBbiBvYmplY3QgbGl0ZXJhbCBjb250YWluaW5nIGtleS92YWx1ZSBwYWlycworICogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwcm92aWRlIG9wdGlvbmFsIGNvb2tpZSBhdHRyaWJ1dGVzLgorICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnBhdGhdICAgTXVzdCBiZSB0aGUgc2FtZSBhcyB3aGVuIHNldHRpbmcgYSBjb29raWUKKyAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5kb21haW5dIE11c3QgYmUgdGhlIHNhbWUgYXMgd2hlbiBzZXR0aW5nIGEgY29va2llCisgKi8KK2Z1bmN0aW9uIGRlbGV0ZUNvb2tpZShzTmFtZSwgb3B0aW9ucykgeworCW9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCW9wdGlvbnMuZXhwaXJlcyA9ICdkZWxldGUnOworCisJc2V0Q29va2llKHNOYW1lLCAnJywgb3B0aW9ucyk7Cit9CisKKy8qIGVuZCBvZiBjb29raWVzLmpzICovCmRpZmYgLS1naXQgYS9naXR3ZWIvc3RhdGljL2pzL2xpYi9kYXRldGltZS5qcyBiL2dpdHdlYi9zdGF0aWMvanMvbGliL2RhdGV0aW1lLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OGM2MGEKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvc3RhdGljL2pzL2xpYi9kYXRldGltZS5qcwpAQCAtMCwwICsxLDE3NiBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDA3LCBGcmVkcmlrIEt1aXZpbmVuIDxmcmVrdWlAZ21haWwuY29tPgorLy8gICAgICAgICAgICAgICAyMDA3LCBQZXRyIEJhdWRpcyA8cGFza3lAc3VzZS5jej4KKy8vICAgICAgICAgIDIwMDgtMjAxMSwgSmFrdWIgTmFyZWJza2kgPGpuYXJlYkBnbWFpbC5jb20+CisKKy8qKgorICogQGZpbGVPdmVydmlldyBEYXRldGltZSBtYW5pcHVsYXRpb246IHBhcnNpbmcgYW5kIGZvcm1hdHRpbmcKKyAqIEBsaWNlbnNlIEdQTHYyIG9yIGxhdGVyCisgKi8KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIHBhcnNpbmcgYW5kIHJldHJpZXZpbmcgZGF0ZXRpbWUgcmVsYXRlZCBpbmZvcm1hdGlvbiAqLworCisvKioKKyAqIHVzZWQgdG8gZXh0cmFjdCBob3VycyBhbmQgbWludXRlcyBmcm9tIHRpbWV6b25lIGluZm8sIGUuZyAnLTA5MDAnCisgKiBAY29uc3RhbnQKKyAqLwordmFyIHR6UmUgPSAvXihbK1wtXSkoWzAtOV1bMC05XSkoWzAtOV1bMC05XSkkLzsKKworLyoqCisgKiBjb252ZXJ0IG51bWVyaWMgdGltZXpvbmUgKy8tWlpaWiB0byBvZmZzZXQgZnJvbSBVVEMgaW4gc2Vjb25kcworICoKKyAqIEBwYXJhbSB7U3RyaW5nfSB0aW1lem9uZUluZm86IG51bWVyaWMgdGltZXpvbmUgJygrfC0pSEhNTScKKyAqIEByZXR1cm5zIHtOdW1iZXJ9IG9mZnNldCBmcm9tIFVUQyBpbiBzZWNvbmRzIGZvciB0aW1lem9uZQorICoKKyAqIEBnbG9iYWxzIHR6UmUKKyAqLworZnVuY3Rpb24gdGltZXpvbmVPZmZzZXQodGltZXpvbmVJbmZvKSB7CisJdmFyIG1hdGNoID0gdHpSZS5leGVjKHRpbWV6b25lSW5mbyk7CisJdmFyIHR6X3NpZ24gPSAobWF0Y2hbMV0gPT09ICctJyA/IC0xIDogKzEpOworCXZhciB0el9ob3VyID0gcGFyc2VJbnQobWF0Y2hbMl0sMTApOworCXZhciB0el9taW4gID0gcGFyc2VJbnQobWF0Y2hbM10sMTApOworCisJcmV0dXJuIHR6X3NpZ24qKCgodHpfaG91cio2MCkgKyB0el9taW4pKjYwKTsKK30KKworLyoqCisgKiByZXR1cm4gbG9jYWwgKGJyb3dzZXIpIHRpbWV6b25lIGFzIG9mZnNldCBmcm9tIFVUQyBpbiBzZWNvbmRzCisgKgorICogQHJldHVybnMge051bWJlcn0gb2Zmc2V0IGZyb20gVVRDIGluIHNlY29uZHMgZm9yIGxvY2FsIHRpbWV6b25lCisgKi8KK2Z1bmN0aW9uIGxvY2FsVGltZXpvbmVPZmZzZXQoKSB7CisJLy8gZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgdGltZS16b25lIG9mZnNldCBmcm9tIFVUQywKKwkvLyBpbiBfbWludXRlc18sIGZvciB0aGUgY3VycmVudCBsb2NhbGUKKwlyZXR1cm4gKChuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpICogLTYwKTsKK30KKworLyoqCisgKiByZXR1cm4gbG9jYWwgKGJyb3dzZXIpIHRpbWV6b25lIGFzIG51bWVyaWMgdGltZXpvbmUgJygrfC0pSEhNTScKKyAqCisgKiBAcmV0dXJucyB7U3RyaW5nfSBsb2NhdCB0aW1lem9uZSBhcyAtLytaWlpaCisgKi8KK2Z1bmN0aW9uIGxvY2FsVGltZXpvbmVJbmZvKCkgeworCXZhciB0ek9mZnNldE1pbnV0ZXMgPSAobmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIC0xOworCisJcmV0dXJuIGZvcm1hdFRpbWV6b25lSW5mbygwLCB0ek9mZnNldE1pbnV0ZXMpOworfQorCisKKy8qKgorICogUGFyc2UgUkZDLTI4MjIgZGF0ZSBpbnRvIGEgVW5peCB0aW1lc3RhbXAgKGludG8gZXBvY2gpCisgKgorICogQHBhcmFtIHtTdHJpbmd9IGRhdGU6IGRhdGUgaW4gUkZDLTI4MjIgZm9ybWF0LCBlLmcuICdUaHUsIDIxIERlYyAyMDAwIDE2OjAxOjA3ICswMjAwJworICogQHJldHVybnMge051bWJlcn0gZXBvY2ggaS5lLiBzZWNvbmRzIHNpbmNlICcwMDowMDowMCAxOTcwLTAxLTAxIFVUQycKKyAqLworZnVuY3Rpb24gcGFyc2VSRkMyODIyRGF0ZShkYXRlKSB7CisJLy8gRGF0ZS5wYXJzZSBhY2NlcHRzIHRoZSBJRVRGIHN0YW5kYXJkIChSRkMgMTEyMyBTZWN0aW9uIDUuMi4xNCBhbmQgZWxzZXdoZXJlKQorCS8vIGRhdGUgc3ludGF4LCB3aGljaCBpcyBkZWZpbmVkIGluIFJGQyAyODIyIChvYnNvbGV0ZXMgUkZDIDgyMikKKwkvLyBhbmQgcmV0dXJucyBudW1iZXIgb2YgX21pbGxpX3NlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwLCAwMDowMDowMCBVVEMKKwlyZXR1cm4gRGF0ZS5wYXJzZShkYXRlKSAvIDEwMDA7Cit9CisKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBmb3JtYXR0aW5nIGRhdGUgKi8KKworLyoqCisgKiBmb3JtYXQgdGltZXpvbmUgb2Zmc2V0IGFzIG51bWVyaWNhbCB0aW1lem9uZSAnKCt8LSlISE1NJyBvciAnKCt8LSlISDpNTScKKyAqCisgKiBAcGFyYW0ge051bWJlcn0gaG91cnM6ICAgIG9mZnNldCBpbiBob3VycywgZS5nLiAyIGZvciAnKzAyMDAnCisgKiBAcGFyYW0ge051bWJlcn0gW21pbnV0ZXNdIG9mZnNldCBpbiBtaW51dGVzLCBlLmcuIDMwIGZvciAnLTQwMzAnOworICogICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBpcyBzcGxpdCBpbnRvIGhvdXJzIGlmIG5vdCAwIDw9IG1pbnV0ZXMgPCA2MCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUgMTIwMCB3b3VsZCBnaXZlICcrMDEwMCc7CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIDAKKyAqIEBwYXJhbSB7U3RyaW5nfSBbc2VwXSBzZXBhcmF0b3IgYmV0d2VlbiBob3VycyBhbmQgbWludXRlcyBwYXJ0LAorICogICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaXMgJycsIG1pZ2h0IGJlICc6JyBmb3IgVzNDRFRGIChyZmMtMzMzOSkKKyAqIEByZXR1cm5zIHtTdHJpbmd9IHRpbWV6b25lIGluICcoK3wtKUhITU0nIG9yICcoK3wtKUhIOk1NJyBmb3JtYXQKKyAqLworZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVJbmZvKGhvdXJzLCBtaW51dGVzLCBzZXApIHsKKwltaW51dGVzID0gbWludXRlcyB8fCAwOyAvLyB0byBiZSBhYmxlIHRvIHVzZSBmb3JtYXRUaW1lem9uZUluZm8oaGgpCisJc2VwID0gc2VwIHx8ICcnOyAvLyBkZWZhdWx0IGZvcm1hdCBpcyArLy1aWlpaCisKKwlpZiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSB7CisJCWhvdXJzID0gbWludXRlcyA+IDAgPyBNYXRoLmZsb29yKG1pbnV0ZXMgLyA2MCkgOiBNYXRoLmNlaWwobWludXRlcyAvIDYwKTsKKwkJbWludXRlcyA9IE1hdGguYWJzKG1pbnV0ZXMgLSA2MCpob3Vycyk7IC8vIHNpZ24gb2YgbWludXRlcyBpcyBzaWduIG9mIGhvdXJzCisJCS8vIE5PVEU6IHRoaXMgd29ya3MgY29ycmVjdGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gVVRDLTAwOjMwIHRpbWV6b25lCisJfQorCisJdmFyIHR6U2lnbiA9IGhvdXJzID49IDAgPyAnKycgOiAnLSc7CisJaWYgKGhvdXJzIDwgMCkgeworCQlob3VycyA9IC1ob3VyczsgLy8gc2lnbiBpcyBzdG9yZWQgaW4gdHpTaWduCisJfQorCisJcmV0dXJuIHR6U2lnbiArIHBhZExlZnQoaG91cnMsIDIsICcwJykgKyBzZXAgKyBwYWRMZWZ0KG1pbnV0ZXMsIDIsICcwJyk7Cit9CisKKy8qKgorICogdHJhbnNsYXRlICd1dGMnIGFuZCAnbG9jYWwnIHRvIG51bWVyaWNhbCB0aW1lem9uZQorICogQHBhcmFtIHtTdHJpbmd9IHRpbWV6b25lSW5mbzogbWlnaHQgYmUgJ3V0Yycgb3IgJ2xvY2FsJyAoYnJvd3NlcikKKyAqLworZnVuY3Rpb24gbm9ybWFsaXplVGltZXpvbmVJbmZvKHRpbWV6b25lSW5mbykgeworCXN3aXRjaCAodGltZXpvbmVJbmZvKSB7CisJY2FzZSAndXRjJzoKKwkJcmV0dXJuICcrMDAwMCc7CisJY2FzZSAnbG9jYWwnOiAvLyAnbG9jYWwnIGlzIGJyb3dzZXIgdGltZXpvbmUKKwkJcmV0dXJuIGxvY2FsVGltZXpvbmVJbmZvKCk7CisJfQorCXJldHVybiB0aW1lem9uZUluZm87Cit9CisKKworLyoqCisgKiByZXR1cm4gZGF0ZSBpbiBsb2NhbCB0aW1lIGZvcm1hdHRlZCBpbiBpc28tODYwMSBsaWtlIGZvcm1hdAorICogJ3l5eXktbW0tZGQgSEg6TU06U1MgKy8tWlpaWicgZS5nLiAnMjAwNS0wOC0wNyAyMTo0OTo0NiArMDIwMCcKKyAqCisgKiBAcGFyYW0ge051bWJlcn0gZXBvY2g6IHNlY29uZHMgc2luY2UgJzAwOjAwOjAwIDE5NzAtMDEtMDEgVVRDJworICogQHBhcmFtIHtTdHJpbmd9IHRpbWV6b25lSW5mbzogbnVtZXJpYyB0aW1lem9uZSAnKCt8LSlISE1NJworICogQHJldHVybnMge1N0cmluZ30gZGF0ZSBpbiBsb2NhbCB0aW1lIGluIGlzby04NjAxIGxpa2UgZm9ybWF0CisgKi8KK2Z1bmN0aW9uIGZvcm1hdERhdGVJU09Mb2NhbChlcG9jaCwgdGltZXpvbmVJbmZvKSB7CisJLy8gZGF0ZSBjb3JyZWN0ZWQgYnkgdGltZXpvbmUKKwl2YXIgbG9jYWxEYXRlID0gbmV3IERhdGUoMTAwMCAqIChlcG9jaCArCisJCXRpbWV6b25lT2Zmc2V0KHRpbWV6b25lSW5mbykpKTsKKwl2YXIgbG9jYWxEYXRlU3RyID0gLy8gZS5nLiAnMjAwNS0wOC0wNycKKwkJbG9jYWxEYXRlLmdldFVUQ0Z1bGxZZWFyKCkgICAgICAgICAgICAgICAgICsgJy0nICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDTW9udGgoKSsxLCAyLCAnMCcpICsgJy0nICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDRGF0ZSgpLCAgICAyLCAnMCcpOworCXZhciBsb2NhbFRpbWVTdHIgPSAvLyBlLmcuICcyMTo0OTo0NicKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDSG91cnMoKSwgICAyLCAnMCcpICsgJzonICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDTWludXRlcygpLCAyLCAnMCcpICsgJzonICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDU2Vjb25kcygpLCAyLCAnMCcpOworCisJcmV0dXJuIGxvY2FsRGF0ZVN0ciArICcgJyArIGxvY2FsVGltZVN0ciArICcgJyArIHRpbWV6b25lSW5mbzsKK30KKworLyoqCisgKiByZXR1cm4gZGF0ZSBpbiBsb2NhbCB0aW1lIGZvcm1hdHRlZCBpbiByZmMtMjgyMiBmb3JtYXQKKyAqIGUuZy4gJ1RodSwgMjEgRGVjIDIwMDAgMTY6MDE6MDcgKzAyMDAnCisgKgorICogQHBhcmFtIHtOdW1iZXJ9IGVwb2NoOiBzZWNvbmRzIHNpbmNlICcwMDowMDowMCAxOTcwLTAxLTAxIFVUQycKKyAqIEBwYXJhbSB7U3RyaW5nfSB0aW1lem9uZUluZm86IG51bWVyaWMgdGltZXpvbmUgJygrfC0pSEhNTScKKyAqIEBwYXJhbSB7Qm9vbGVhbn0gW3BhZERheV0gZS5nLiAnU3VuLCAwNyBBdWcnIGlmIHRydWUsICdTdW4sIDcgQXVnJyBvdGhlcndpc2UKKyAqIEByZXR1cm5zIHtTdHJpbmd9IGRhdGUgaW4gbG9jYWwgdGltZSBpbiByZmMtMjgyMiBmb3JtYXQKKyAqLworZnVuY3Rpb24gZm9ybWF0RGF0ZVJGQzI4ODIoZXBvY2gsIHRpbWV6b25lSW5mbywgcGFkRGF5KSB7CisJLy8gQSBzaG9ydCB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9udGgsIHRocmVlIGxldHRlcnMKKwl2YXIgbW9udGhzID0gWyJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyJdOworCS8vIEEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiBhIGRheSwgdGhyZWUgbGV0dGVycworCXZhciBkYXlzID0gWyJTdW4iLCAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiXTsKKwkvLyBkYXRlIGNvcnJlY3RlZCBieSB0aW1lem9uZQorCXZhciBsb2NhbERhdGUgPSBuZXcgRGF0ZSgxMDAwICogKGVwb2NoICsKKwkJdGltZXpvbmVPZmZzZXQodGltZXpvbmVJbmZvKSkpOworCXZhciBsb2NhbERhdGVTdHIgPSAvLyBlLmcuICdTdW4sIDcgQXVnIDIwMDUnIG9yICdTdW4sIDA3IEF1ZyAyMDA1JworCQlkYXlzW2xvY2FsRGF0ZS5nZXRVVENEYXkoKV0gKyAnLCAnICsKKwkJKHBhZERheSA/IHBhZExlZnQobG9jYWxEYXRlLmdldFVUQ0RhdGUoKSwyLCcwJykgOiBsb2NhbERhdGUuZ2V0VVRDRGF0ZSgpKSArICcgJyArCisJCW1vbnRoc1tsb2NhbERhdGUuZ2V0VVRDTW9udGgoKV0gKyAnICcgKworCQlsb2NhbERhdGUuZ2V0VVRDRnVsbFllYXIoKTsKKwl2YXIgbG9jYWxUaW1lU3RyID0gLy8gZS5nLiAnMjE6NDk6NDYnCisJCXBhZExlZnQobG9jYWxEYXRlLmdldFVUQ0hvdXJzKCksICAgMiwgJzAnKSArICc6JyArCisJCXBhZExlZnQobG9jYWxEYXRlLmdldFVUQ01pbnV0ZXMoKSwgMiwgJzAnKSArICc6JyArCisJCXBhZExlZnQobG9jYWxEYXRlLmdldFVUQ1NlY29uZHMoKSwgMiwgJzAnKTsKKworCXJldHVybiBsb2NhbERhdGVTdHIgKyAnICcgKyBsb2NhbFRpbWVTdHIgKyAnICcgKyB0aW1lem9uZUluZm87Cit9CisKKy8qIGVuZCBvZiBkYXRldGltZS5qcyAqLwpkaWZmIC0tZ2l0IGEvZ3BnLWludGVyZmFjZS5jIGIvZ3BnLWludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNTM4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9ncGctaW50ZXJmYWNlLmMKQEAgLTAsMCArMSw0NjkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKworc3RhdGljIGNoYXIgKmNvbmZpZ3VyZWRfc2lnbmluZ19rZXk7CitzdGF0aWMgZW51bSBzaWduYXR1cmVfdHJ1c3RfbGV2ZWwgY29uZmlndXJlZF9taW5fdHJ1c3RfbGV2ZWwgPSBUUlVTVF9VTkRFRklORUQ7CisKK3N0cnVjdCBncGdfZm9ybWF0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnByb2dyYW07CisJY29uc3QgY2hhciAqKnZlcmlmeV9hcmdzOworCWNvbnN0IGNoYXIgKipzaWdzOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm9wZW5wZ3BfdmVyaWZ5X2FyZ3NbXSA9IHsKKwkiLS1rZXlpZC1mb3JtYXQ9bG9uZyIsCisJTlVMTAorfTsKK3N0YXRpYyBjb25zdCBjaGFyICpvcGVucGdwX3NpZ3NbXSA9IHsKKwkiLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0iLAorCSItLS0tLUJFR0lOIFBHUCBNRVNTQUdFLS0tLS0iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICp4NTA5X3ZlcmlmeV9hcmdzW10gPSB7CisJTlVMTAorfTsKK3N0YXRpYyBjb25zdCBjaGFyICp4NTA5X3NpZ3NbXSA9IHsKKwkiLS0tLS1CRUdJTiBTSUdORUQgTUVTU0FHRS0tLS0tIiwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGdwZ19mb3JtYXQgZ3BnX2Zvcm1hdFtdID0geworCXsgLm5hbWUgPSAib3BlbnBncCIsIC5wcm9ncmFtID0gImdwZyIsCisJICAudmVyaWZ5X2FyZ3MgPSBvcGVucGdwX3ZlcmlmeV9hcmdzLAorCSAgLnNpZ3MgPSBvcGVucGdwX3NpZ3MKKwl9LAorCXsgLm5hbWUgPSAieDUwOSIsIC5wcm9ncmFtID0gImdwZ3NtIiwKKwkgIC52ZXJpZnlfYXJncyA9IHg1MDlfdmVyaWZ5X2FyZ3MsCisJICAuc2lncyA9IHg1MDlfc2lncworCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwZ19mb3JtYXQgKnVzZV9mb3JtYXQgPSAmZ3BnX2Zvcm1hdFswXTsKKworc3RhdGljIHN0cnVjdCBncGdfZm9ybWF0ICpnZXRfZm9ybWF0X2J5X25hbWUoY29uc3QgY2hhciAqc3RyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZ3BnX2Zvcm1hdCk7IGkrKykKKwkJaWYgKCFzdHJjbXAoZ3BnX2Zvcm1hdFtpXS5uYW1lLCBzdHIpKQorCQkJcmV0dXJuIGdwZ19mb3JtYXQgKyBpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGdwZ19mb3JtYXQgKmdldF9mb3JtYXRfYnlfc2lnKGNvbnN0IGNoYXIgKnNpZykKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGdwZ19mb3JtYXQpOyBpKyspCisJCWZvciAoaiA9IDA7IGdwZ19mb3JtYXRbaV0uc2lnc1tqXTsgaisrKQorCQkJaWYgKHN0YXJ0c193aXRoKHNpZywgZ3BnX2Zvcm1hdFtpXS5zaWdzW2pdKSkKKwkJCQlyZXR1cm4gZ3BnX2Zvcm1hdCArIGk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgc2lnbmF0dXJlX2NoZWNrX2NsZWFyKHN0cnVjdCBzaWduYXR1cmVfY2hlY2sgKnNpZ2MpCit7CisJRlJFRV9BTkRfTlVMTChzaWdjLT5wYXlsb2FkKTsKKwlGUkVFX0FORF9OVUxMKHNpZ2MtPmdwZ19vdXRwdXQpOworCUZSRUVfQU5EX05VTEwoc2lnYy0+Z3BnX3N0YXR1cyk7CisJRlJFRV9BTkRfTlVMTChzaWdjLT5zaWduZXIpOworCUZSRUVfQU5EX05VTEwoc2lnYy0+a2V5KTsKKwlGUkVFX0FORF9OVUxMKHNpZ2MtPmZpbmdlcnByaW50KTsKKwlGUkVFX0FORF9OVUxMKHNpZ2MtPnByaW1hcnlfa2V5X2ZpbmdlcnByaW50KTsKK30KKworLyogQW4gZXhjbHVzaXZlIHN0YXR1cyAtLSBvbmx5IG9uZSBvZiB0aGVtIGNhbiBhcHBlYXIgaW4gb3V0cHV0ICovCisjZGVmaW5lIEdQR19TVEFUVVNfRVhDTFVTSVZFCSgxPDwwKQorLyogVGhlIHN0YXR1cyBpbmNsdWRlcyBrZXkgaWRlbnRpZmllciAqLworI2RlZmluZSBHUEdfU1RBVFVTX0tFWUlECSgxPDwxKQorLyogVGhlIHN0YXR1cyBpbmNsdWRlcyB1c2VyIGlkZW50aWZpZXIgKi8KKyNkZWZpbmUgR1BHX1NUQVRVU19VSUQJCSgxPDwyKQorLyogVGhlIHN0YXR1cyBpbmNsdWRlcyBrZXkgZmluZ2VycHJpbnRzICovCisjZGVmaW5lIEdQR19TVEFUVVNfRklOR0VSUFJJTlQJKDE8PDMpCisvKiBUaGUgc3RhdHVzIGluY2x1ZGVzIHRydXN0IGxldmVsICovCisjZGVmaW5lIEdQR19TVEFUVVNfVFJVU1RfTEVWRUwJKDE8PDQpCisKKy8qIFNob3J0LWhhbmQgZm9yIHN0YW5kYXJkIGV4Y2x1c2l2ZSAqU0lHIHN0YXR1cyB3aXRoIGtleWlkICYgVUlEICovCisjZGVmaW5lIEdQR19TVEFUVVNfU1REU0lHCShHUEdfU1RBVFVTX0VYQ0xVU0lWRXxHUEdfU1RBVFVTX0tFWUlEfEdQR19TVEFUVVNfVUlEKQorCitzdGF0aWMgc3RydWN0IHsKKwljaGFyIHJlc3VsdDsKKwljb25zdCBjaGFyICpjaGVjazsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9IHNpZ2NoZWNrX2dwZ19zdGF0dXNbXSA9IHsKKwl7ICdHJywgIkdPT0RTSUcgIiwgR1BHX1NUQVRVU19TVERTSUcgfSwKKwl7ICdCJywgIkJBRFNJRyAiLCBHUEdfU1RBVFVTX1NURFNJRyB9LAorCXsgJ0UnLCAiRVJSU0lHICIsIEdQR19TVEFUVVNfRVhDTFVTSVZFfEdQR19TVEFUVVNfS0VZSUQgfSwKKwl7ICdYJywgIkVYUFNJRyAiLCBHUEdfU1RBVFVTX1NURFNJRyB9LAorCXsgJ1knLCAiRVhQS0VZU0lHICIsIEdQR19TVEFUVVNfU1REU0lHIH0sCisJeyAnUicsICJSRVZLRVlTSUcgIiwgR1BHX1NUQVRVU19TVERTSUcgfSwKKwl7IDAsICJWQUxJRFNJRyAiLCBHUEdfU1RBVFVTX0ZJTkdFUlBSSU5UIH0sCisJeyAwLCAiVFJVU1RfIiwgR1BHX1NUQVRVU19UUlVTVF9MRVZFTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB7CisJY29uc3QgY2hhciAqa2V5OworCWVudW0gc2lnbmF0dXJlX3RydXN0X2xldmVsIHZhbHVlOworfSBzaWdjaGVja19ncGdfdHJ1c3RfbGV2ZWxbXSA9IHsKKwl7ICJVTkRFRklORUQiLCBUUlVTVF9VTkRFRklORUQgfSwKKwl7ICJORVZFUiIsIFRSVVNUX05FVkVSIH0sCisJeyAiTUFSR0lOQUwiLCBUUlVTVF9NQVJHSU5BTCB9LAorCXsgIkZVTExZIiwgVFJVU1RfRlVMTFkgfSwKKwl7ICJVTFRJTUFURSIsIFRSVVNUX1VMVElNQVRFIH0sCit9OworCitzdGF0aWMgdm9pZCByZXBsYWNlX2NzdHJpbmcoY2hhciAqKmZpZWxkLCBjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpuZXh0KQoreworCWZyZWUoKmZpZWxkKTsKKworCWlmIChsaW5lICYmIG5leHQpCisJCSpmaWVsZCA9IHhtZW1kdXB6KGxpbmUsIG5leHQgLSBsaW5lKTsKKwllbHNlCisJCSpmaWVsZCA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZ3BnX3RydXN0X2xldmVsKGNvbnN0IGNoYXIgKmxldmVsLAorCQkJCSBlbnVtIHNpZ25hdHVyZV90cnVzdF9sZXZlbCAqcmVzKQoreworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2lnY2hlY2tfZ3BnX3RydXN0X2xldmVsKTsgaSsrKSB7CisJCWlmICghc3RyY21wKHNpZ2NoZWNrX2dwZ190cnVzdF9sZXZlbFtpXS5rZXksIGxldmVsKSkgeworCQkJKnJlcyA9IHNpZ2NoZWNrX2dwZ190cnVzdF9sZXZlbFtpXS52YWx1ZTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9ncGdfb3V0cHV0KHN0cnVjdCBzaWduYXR1cmVfY2hlY2sgKnNpZ2MpCit7CisJY29uc3QgY2hhciAqYnVmID0gc2lnYy0+Z3BnX3N0YXR1czsKKwljb25zdCBjaGFyICpsaW5lLCAqbmV4dDsKKwlpbnQgaSwgajsKKwlpbnQgc2Vlbl9leGNsdXNpdmVfc3RhdHVzID0gMDsKKworCS8qIEl0ZXJhdGUgb3ZlciBhbGwgbGluZXMgKi8KKwlmb3IgKGxpbmUgPSBidWY7ICpsaW5lOyBsaW5lID0gc3RyY2hybnVsKGxpbmUrMSwgJ1xuJykpIHsKKwkJd2hpbGUgKCpsaW5lID09ICdcbicpCisJCQlsaW5lKys7CisJCWlmICghKmxpbmUpCisJCQlicmVhazsKKworCQkvKiBTa2lwIGxpbmVzIHRoYXQgZG9uJ3Qgc3RhcnQgd2l0aCBHTlVQRyBzdGF0dXMgKi8KKwkJaWYgKCFza2lwX3ByZWZpeChsaW5lLCAiW0dOVVBHOl0gIiwgJmxpbmUpKQorCQkJY29udGludWU7CisKKwkJLyogSXRlcmF0ZSBvdmVyIGFsbCBzZWFyY2ggc3RyaW5ncyAqLworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaWdjaGVja19ncGdfc3RhdHVzKTsgaSsrKSB7CisJCQlpZiAoc2tpcF9wcmVmaXgobGluZSwgc2lnY2hlY2tfZ3BnX3N0YXR1c1tpXS5jaGVjaywgJmxpbmUpKSB7CisJCQkJLyoKKwkJCQkgKiBHT09EU0lHLCBCQURTSUcgZXRjLiBjYW4gb2NjdXIgb25seSBvbmNlIGZvcgorCQkJCSAqIGVhY2ggc2lnbmF0dXJlLiAgVGhlcmVmb3JlLCBpZiB3ZSBoYWQgbW9yZQorCQkJCSAqIHRoYW4gb25lIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIG11bHRpcGxlCisJCQkJICogc2lnbmF0dXJlcy4gIFdlIGRvbid0IHN1cHBvcnQgdGhlbQorCQkJCSAqIGN1cnJlbnRseSwgYW5kIHRoZXkncmUgcmF0aGVyIGhhcmQgdG8KKwkJCQkgKiBjcmVhdGUsIHNvIHNvbWV0aGluZyBpcyBsaWtlbHkgZmlzaHkgYW5kIHdlCisJCQkJICogc2hvdWxkIHJlamVjdCB0aGVtIGFsdG9nZXRoZXIuCisJCQkJICovCisJCQkJaWYgKHNpZ2NoZWNrX2dwZ19zdGF0dXNbaV0uZmxhZ3MgJiBHUEdfU1RBVFVTX0VYQ0xVU0lWRSkgeworCQkJCQlpZiAoc2Vlbl9leGNsdXNpdmVfc3RhdHVzKyspCisJCQkJCQlnb3RvIGVycm9yOworCQkJCX0KKworCQkJCWlmIChzaWdjaGVja19ncGdfc3RhdHVzW2ldLnJlc3VsdCkKKwkJCQkJc2lnYy0+cmVzdWx0ID0gc2lnY2hlY2tfZ3BnX3N0YXR1c1tpXS5yZXN1bHQ7CisJCQkJLyogRG8gd2UgaGF2ZSBrZXkgaW5mb3JtYXRpb24/ICovCisJCQkJaWYgKHNpZ2NoZWNrX2dwZ19zdGF0dXNbaV0uZmxhZ3MgJiBHUEdfU1RBVFVTX0tFWUlEKSB7CisJCQkJCW5leHQgPSBzdHJjaHJudWwobGluZSwgJyAnKTsKKwkJCQkJcmVwbGFjZV9jc3RyaW5nKCZzaWdjLT5rZXksIGxpbmUsIG5leHQpOworCQkJCQkvKiBEbyB3ZSBoYXZlIHNpZ25lciBpbmZvcm1hdGlvbj8gKi8KKwkJCQkJaWYgKCpuZXh0ICYmIChzaWdjaGVja19ncGdfc3RhdHVzW2ldLmZsYWdzICYgR1BHX1NUQVRVU19VSUQpKSB7CisJCQkJCQlsaW5lID0gbmV4dCArIDE7CisJCQkJCQluZXh0ID0gc3RyY2hybnVsKGxpbmUsICdcbicpOworCQkJCQkJcmVwbGFjZV9jc3RyaW5nKCZzaWdjLT5zaWduZXIsIGxpbmUsIG5leHQpOworCQkJCQl9CisJCQkJfQorCisJCQkJLyogRG8gd2UgaGF2ZSB0cnVzdCBsZXZlbD8gKi8KKwkJCQlpZiAoc2lnY2hlY2tfZ3BnX3N0YXR1c1tpXS5mbGFncyAmIEdQR19TVEFUVVNfVFJVU1RfTEVWRUwpIHsKKwkJCQkJLyoKKwkJCQkJICogR1BHIHYxIGFuZCB2MiBkaWZmZXJzIGluIGhvdyB0aGUKKwkJCQkJICogVFJVU1RfIGxpbmVzIGFyZSB3cml0dGVuLiAgU29tZQorCQkJCQkgKiB0cnVzdCBsaW5lcyBjb250YWluIG5vIGFkZGl0aW9uYWwKKwkJCQkJICogc3BhY2Utc2VwYXJhdGVkIGluZm9ybWF0aW9uIGZvciB2MS4KKwkJCQkJICovCisJCQkJCXNpemVfdCB0cnVzdF9zaXplID0gc3RyY3NwbihsaW5lLCAiIFxuIik7CisJCQkJCWNoYXIgKnRydXN0ID0geG1lbWR1cHoobGluZSwgdHJ1c3Rfc2l6ZSk7CisKKwkJCQkJaWYgKHBhcnNlX2dwZ190cnVzdF9sZXZlbCh0cnVzdCwgJnNpZ2MtPnRydXN0X2xldmVsKSkgeworCQkJCQkJZnJlZSh0cnVzdCk7CisJCQkJCQlnb3RvIGVycm9yOworCQkJCQl9CisJCQkJCWZyZWUodHJ1c3QpOworCQkJCX0KKworCQkJCS8qIERvIHdlIGhhdmUgZmluZ2VycHJpbnQ/ICovCisJCQkJaWYgKHNpZ2NoZWNrX2dwZ19zdGF0dXNbaV0uZmxhZ3MgJiBHUEdfU1RBVFVTX0ZJTkdFUlBSSU5UKSB7CisJCQkJCWNvbnN0IGNoYXIgKmxpbWl0OworCQkJCQljaGFyICoqZmllbGQ7CisKKwkJCQkJbmV4dCA9IHN0cmNocm51bChsaW5lLCAnICcpOworCQkJCQlyZXBsYWNlX2NzdHJpbmcoJnNpZ2MtPmZpbmdlcnByaW50LCBsaW5lLCBuZXh0KTsKKworCQkJCQkvKgorCQkJCQkgKiBTa2lwIGludGVyaW0gZmllbGRzLiAgVGhlIHNlYXJjaCBpcworCQkJCQkgKiBsaW1pdGVkIHRvIHRoZSBzYW1lIGxpbmUgc2luY2Ugb25seQorCQkJCQkgKiBPcGVuUEdQIHNpZ25hdHVyZXMgaGFzIGEgZmllbGQgd2l0aAorCQkJCQkgKiB0aGUgcHJpbWFyeSBmaW5nZXJwcmludC4KKwkJCQkJICovCisJCQkJCWxpbWl0ID0gc3RyY2hybnVsKGxpbmUsICdcbicpOworCQkJCQlmb3IgKGogPSA5OyBqID4gMDsgai0tKSB7CisJCQkJCQlpZiAoISpuZXh0IHx8IGxpbWl0IDw9IG5leHQpCisJCQkJCQkJYnJlYWs7CisJCQkJCQlsaW5lID0gbmV4dCArIDE7CisJCQkJCQluZXh0ID0gc3RyY2hybnVsKGxpbmUsICcgJyk7CisJCQkJCX0KKworCQkJCQlmaWVsZCA9ICZzaWdjLT5wcmltYXJ5X2tleV9maW5nZXJwcmludDsKKwkJCQkJaWYgKCFqKSB7CisJCQkJCQluZXh0ID0gc3RyY2hybnVsKGxpbmUsICdcbicpOworCQkJCQkJcmVwbGFjZV9jc3RyaW5nKGZpZWxkLCBsaW5lLCBuZXh0KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXJlcGxhY2VfY3N0cmluZyhmaWVsZCwgTlVMTCwgTlVMTCk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm47CisKK2Vycm9yOgorCXNpZ2MtPnJlc3VsdCA9ICdFJzsKKwkvKiBDbGVhciBwYXJ0aWFsIGRhdGEgdG8gYXZvaWQgY29uZnVzaW9uICovCisJRlJFRV9BTkRfTlVMTChzaWdjLT5wcmltYXJ5X2tleV9maW5nZXJwcmludCk7CisJRlJFRV9BTkRfTlVMTChzaWdjLT5maW5nZXJwcmludCk7CisJRlJFRV9BTkRfTlVMTChzaWdjLT5zaWduZXIpOworCUZSRUVfQU5EX05VTEwoc2lnYy0+a2V5KTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfc2lnbmVkX2J1ZmZlcihjb25zdCBjaGFyICpwYXlsb2FkLCBzaXplX3QgcGF5bG9hZF9zaXplLAorCQkJCWNvbnN0IGNoYXIgKnNpZ25hdHVyZSwgc2l6ZV90IHNpZ25hdHVyZV9zaXplLAorCQkJCXN0cnVjdCBzdHJidWYgKmdwZ19vdXRwdXQsCisJCQkJc3RydWN0IHN0cmJ1ZiAqZ3BnX3N0YXR1cykKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBncGcgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGdwZ19mb3JtYXQgKmZtdDsKKwlzdHJ1Y3QgdGVtcGZpbGUgKnRlbXA7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJdGVtcCA9IG1rc190ZW1wZmlsZV90KCIuZ2l0X3Z0YWdfdG1wWFhYWFhYIik7CisJaWYgKCF0ZW1wKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIpKTsKKwlpZiAod3JpdGVfaW5fZnVsbCh0ZW1wLT5mZCwgc2lnbmF0dXJlLCBzaWduYXR1cmVfc2l6ZSkgPCAwIHx8CisJICAgIGNsb3NlX3RlbXBmaWxlX2dlbnRseSh0ZW1wKSA8IDApIHsKKwkJZXJyb3JfZXJybm8oXygiZmFpbGVkIHdyaXRpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvICclcyciKSwKKwkJCSAgICB0ZW1wLT5maWxlbmFtZS5idWYpOworCQlkZWxldGVfdGVtcGZpbGUoJnRlbXApOworCQlyZXR1cm4gLTE7CisJfQorCisJZm10ID0gZ2V0X2Zvcm1hdF9ieV9zaWcoc2lnbmF0dXJlKTsKKwlpZiAoIWZtdCkKKwkJQlVHKCJiYWQgc2lnbmF0dXJlICclcyciLCBzaWduYXR1cmUpOworCisJYXJndl9hcnJheV9wdXNoKCZncGcuYXJncywgZm10LT5wcm9ncmFtKTsKKwlhcmd2X2FycmF5X3B1c2h2KCZncGcuYXJncywgZm10LT52ZXJpZnlfYXJncyk7CisJYXJndl9hcnJheV9wdXNobCgmZ3BnLmFyZ3MsCisJCQkgIi0tc3RhdHVzLWZkPTEiLAorCQkJICItLXZlcmlmeSIsIHRlbXAtPmZpbGVuYW1lLmJ1ZiwgIi0iLAorCQkJIE5VTEwpOworCisJaWYgKCFncGdfc3RhdHVzKQorCQlncGdfc3RhdHVzID0gJmJ1ZjsKKworCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgU0lHX0lHTik7CisJcmV0ID0gcGlwZV9jb21tYW5kKCZncGcsIHBheWxvYWQsIHBheWxvYWRfc2l6ZSwKKwkJCSAgIGdwZ19zdGF0dXMsIDAsIGdwZ19vdXRwdXQsIDApOworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKworCWRlbGV0ZV90ZW1wZmlsZSgmdGVtcCk7CisKKwlyZXQgfD0gIXN0cnN0cihncGdfc3RhdHVzLT5idWYsICJcbltHTlVQRzpdIEdPT0RTSUcgIik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7IC8qIG5vIG1hdHRlciBpdCB3YXMgdXNlZCBvciBub3QgKi8KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBjaGVja19zaWduYXR1cmUoY29uc3QgY2hhciAqcGF5bG9hZCwgc2l6ZV90IHBsZW4sIGNvbnN0IGNoYXIgKnNpZ25hdHVyZSwKKwlzaXplX3Qgc2xlbiwgc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGdwZ19vdXRwdXQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGdwZ19zdGF0dXMgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc3RhdHVzOworCisJc2lnYy0+cmVzdWx0ID0gJ04nOworCXNpZ2MtPnRydXN0X2xldmVsID0gLTE7CisKKwlzdGF0dXMgPSB2ZXJpZnlfc2lnbmVkX2J1ZmZlcihwYXlsb2FkLCBwbGVuLCBzaWduYXR1cmUsIHNsZW4sCisJCQkJICAgICAgJmdwZ19vdXRwdXQsICZncGdfc3RhdHVzKTsKKwlpZiAoc3RhdHVzICYmICFncGdfb3V0cHV0LmxlbikKKwkJZ290byBvdXQ7CisJc2lnYy0+cGF5bG9hZCA9IHhtZW1kdXB6KHBheWxvYWQsIHBsZW4pOworCXNpZ2MtPmdwZ19vdXRwdXQgPSBzdHJidWZfZGV0YWNoKCZncGdfb3V0cHV0LCBOVUxMKTsKKwlzaWdjLT5ncGdfc3RhdHVzID0gc3RyYnVmX2RldGFjaCgmZ3BnX3N0YXR1cywgTlVMTCk7CisJcGFyc2VfZ3BnX291dHB1dChzaWdjKTsKKwlzdGF0dXMgfD0gc2lnYy0+cmVzdWx0ICE9ICdHJzsKKwlzdGF0dXMgfD0gc2lnYy0+dHJ1c3RfbGV2ZWwgPCBjb25maWd1cmVkX21pbl90cnVzdF9sZXZlbDsKKworIG91dDoKKwlzdHJidWZfcmVsZWFzZSgmZ3BnX3N0YXR1cyk7CisJc3RyYnVmX3JlbGVhc2UoJmdwZ19vdXRwdXQpOworCisJcmV0dXJuICEhc3RhdHVzOworfQorCit2b2lkIHByaW50X3NpZ25hdHVyZV9idWZmZXIoY29uc3Qgc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYywgdW5zaWduZWQgZmxhZ3MpCit7CisJY29uc3QgY2hhciAqb3V0cHV0ID0gZmxhZ3MgJiBHUEdfVkVSSUZZX1JBVyA/CisJCXNpZ2MtPmdwZ19zdGF0dXMgOiBzaWdjLT5ncGdfb3V0cHV0OworCisJaWYgKGZsYWdzICYgR1BHX1ZFUklGWV9WRVJCT1NFICYmIHNpZ2MtPnBheWxvYWQpCisJCWZwdXRzKHNpZ2MtPnBheWxvYWQsIHN0ZG91dCk7CisKKwlpZiAob3V0cHV0KQorCQlmcHV0cyhvdXRwdXQsIHN0ZGVycik7Cit9CisKK3NpemVfdCBwYXJzZV9zaWduYXR1cmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzaXplX3QgbGVuID0gMDsKKwlzaXplX3QgbWF0Y2ggPSBzaXplOworCXdoaWxlIChsZW4gPCBzaXplKSB7CisJCWNvbnN0IGNoYXIgKmVvbDsKKworCQlpZiAoZ2V0X2Zvcm1hdF9ieV9zaWcoYnVmICsgbGVuKSkKKwkJCW1hdGNoID0gbGVuOworCisJCWVvbCA9IG1lbWNocihidWYgKyBsZW4sICdcbicsIHNpemUgLSBsZW4pOworCQlsZW4gKz0gZW9sID8gZW9sIC0gKGJ1ZiArIGxlbikgKyAxIDogc2l6ZSAtIGxlbjsKKwl9CisJcmV0dXJuIG1hdGNoOworfQorCit2b2lkIHNldF9zaWduaW5nX2tleShjb25zdCBjaGFyICprZXkpCit7CisJZnJlZShjb25maWd1cmVkX3NpZ25pbmdfa2V5KTsKKwljb25maWd1cmVkX3NpZ25pbmdfa2V5ID0geHN0cmR1cChrZXkpOworfQorCitpbnQgZ2l0X2dwZ19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJc3RydWN0IGdwZ19mb3JtYXQgKmZtdCA9IE5VTEw7CisJY2hhciAqZm10bmFtZSA9IE5VTEw7CisJY2hhciAqdHJ1c3Q7CisJaW50IHJldDsKKworCWlmICghc3RyY21wKHZhciwgInVzZXIuc2lnbmluZ2tleSIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJc2V0X3NpZ25pbmdfa2V5KHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiZ3BnLmZvcm1hdCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJZm10ID0gZ2V0X2Zvcm1hdF9ieV9uYW1lKHZhbHVlKTsKKwkJaWYgKCFmbXQpCisJCQlyZXR1cm4gZXJyb3IoInVuc3VwcG9ydGVkIHZhbHVlIGZvciAlczogJXMiLAorCQkJCSAgICAgdmFyLCB2YWx1ZSk7CisJCXVzZV9mb3JtYXQgPSBmbXQ7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImdwZy5taW50cnVzdGxldmVsIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCisJCXRydXN0ID0geHN0cmR1cF90b3VwcGVyKHZhbHVlKTsKKwkJcmV0ID0gcGFyc2VfZ3BnX3RydXN0X2xldmVsKHRydXN0LCAmY29uZmlndXJlZF9taW5fdHJ1c3RfbGV2ZWwpOworCQlmcmVlKHRydXN0KTsKKworCQlpZiAocmV0KQorCQkJcmV0dXJuIGVycm9yKCJ1bnN1cHBvcnRlZCB2YWx1ZSBmb3IgJXM6ICVzIiwgdmFyLAorCQkJCSAgICAgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJncGcucHJvZ3JhbSIpIHx8ICFzdHJjbXAodmFyLCAiZ3BnLm9wZW5wZ3AucHJvZ3JhbSIpKQorCQlmbXRuYW1lID0gIm9wZW5wZ3AiOworCisJaWYgKCFzdHJjbXAodmFyLCAiZ3BnLng1MDkucHJvZ3JhbSIpKQorCQlmbXRuYW1lID0gIng1MDkiOworCisJaWYgKGZtdG5hbWUpIHsKKwkJZm10ID0gZ2V0X2Zvcm1hdF9ieV9uYW1lKGZtdG5hbWUpOworCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmZtdC0+cHJvZ3JhbSwgdmFyLCB2YWx1ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9zaWduaW5nX2tleSh2b2lkKQoreworCWlmIChjb25maWd1cmVkX3NpZ25pbmdfa2V5KQorCQlyZXR1cm4gY29uZmlndXJlZF9zaWduaW5nX2tleTsKKwlyZXR1cm4gZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX1NUUklDVHxJREVOVF9OT19EQVRFKTsKK30KKworaW50IHNpZ25fYnVmZmVyKHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwgc3RydWN0IHN0cmJ1ZiAqc2lnbmF0dXJlLCBjb25zdCBjaGFyICpzaWduaW5nX2tleSkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBncGcgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJaW50IHJldDsKKwlzaXplX3QgaSwgaiwgYm90dG9tOworCXN0cnVjdCBzdHJidWYgZ3BnX3N0YXR1cyA9IFNUUkJVRl9JTklUOworCisJYXJndl9hcnJheV9wdXNobCgmZ3BnLmFyZ3MsCisJCQkgdXNlX2Zvcm1hdC0+cHJvZ3JhbSwKKwkJCSAiLS1zdGF0dXMtZmQ9MiIsCisJCQkgIi1ic2F1Iiwgc2lnbmluZ19rZXksCisJCQkgTlVMTCk7CisKKwlib3R0b20gPSBzaWduYXR1cmUtPmxlbjsKKworCS8qCisJICogV2hlbiB0aGUgdXNlcm5hbWUgc2lnbmluZ2tleSBpcyBiYWQsIHByb2dyYW0gY291bGQgYmUgdGVybWluYXRlZAorCSAqIGJlY2F1c2UgZ3BnIGV4aXRzIHdpdGhvdXQgcmVhZGluZyBhbmQgdGhlbiB3cml0ZSBnZXRzIFNJR1BJUEUuCisJICovCisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKwlyZXQgPSBwaXBlX2NvbW1hbmQoJmdwZywgYnVmZmVyLT5idWYsIGJ1ZmZlci0+bGVuLAorCQkJICAgc2lnbmF0dXJlLCAxMDI0LCAmZ3BnX3N0YXR1cywgMCk7CisJc2lnY2hhaW5fcG9wKFNJR1BJUEUpOworCisJcmV0IHw9ICFzdHJzdHIoZ3BnX3N0YXR1cy5idWYsICJcbltHTlVQRzpdIFNJR19DUkVBVEVEICIpOworCXN0cmJ1Zl9yZWxlYXNlKCZncGdfc3RhdHVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gZXJyb3IoXygiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIikpOworCisJLyogU3RyaXAgQ1IgZnJvbSB0aGUgbGluZSBlbmRpbmdzLCBpbiBjYXNlIHdlIGFyZSBvbiBXaW5kb3dzLiAqLworCWZvciAoaSA9IGogPSBib3R0b207IGkgPCBzaWduYXR1cmUtPmxlbjsgaSsrKQorCQlpZiAoc2lnbmF0dXJlLT5idWZbaV0gIT0gJ1xyJykgeworCQkJaWYgKGkgIT0gaikKKwkJCQlzaWduYXR1cmUtPmJ1ZltqXSA9IHNpZ25hdHVyZS0+YnVmW2ldOworCQkJaisrOworCQl9CisJc3RyYnVmX3NldGxlbihzaWduYXR1cmUsIGopOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9ncGctaW50ZXJmYWNlLmggYi9ncGctaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlOWI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2dwZy1pbnRlcmZhY2UuaApAQCAtMCwwICsxLDY2IEBACisjaWZuZGVmIEdQR19JTlRFUkZBQ0VfSAorI2RlZmluZSBHUEdfSU5URVJGQUNFX0gKKworc3RydWN0IHN0cmJ1ZjsKKworI2RlZmluZSBHUEdfVkVSSUZZX1ZFUkJPU0UJCTEKKyNkZWZpbmUgR1BHX1ZFUklGWV9SQVcJCQkyCisjZGVmaW5lIEdQR19WRVJJRllfT01JVF9TVEFUVVMJNAorCitlbnVtIHNpZ25hdHVyZV90cnVzdF9sZXZlbCB7CisJVFJVU1RfVU5ERUZJTkVELAorCVRSVVNUX05FVkVSLAorCVRSVVNUX01BUkdJTkFMLAorCVRSVVNUX0ZVTExZLAorCVRSVVNUX1VMVElNQVRFLAorfTsKKworc3RydWN0IHNpZ25hdHVyZV9jaGVjayB7CisJY2hhciAqcGF5bG9hZDsKKwljaGFyICpncGdfb3V0cHV0OworCWNoYXIgKmdwZ19zdGF0dXM7CisKKwkvKgorCSAqIHBvc3NpYmxlICJyZXN1bHQiOgorCSAqIDAgKG5vdCBjaGVja2VkKQorCSAqIE4gKGNoZWNrZWQgYnV0IG5vIGZ1cnRoZXIgcmVzdWx0KQorCSAqIEcgKGdvb2QpCisJICogQiAoYmFkKQorCSAqLworCWNoYXIgcmVzdWx0OworCWNoYXIgKnNpZ25lcjsKKwljaGFyICprZXk7CisJY2hhciAqZmluZ2VycHJpbnQ7CisJY2hhciAqcHJpbWFyeV9rZXlfZmluZ2VycHJpbnQ7CisJZW51bSBzaWduYXR1cmVfdHJ1c3RfbGV2ZWwgdHJ1c3RfbGV2ZWw7Cit9OworCit2b2lkIHNpZ25hdHVyZV9jaGVja19jbGVhcihzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrICpzaWdjKTsKKworLyoKKyAqIExvb2sgYXQgR1BHIHNpZ25lZCBjb250ZW50IChlLmcuIGEgc2lnbmVkIHRhZyBvYmplY3QpLCB3aG9zZQorICogcGF5bG9hZCBpcyBmb2xsb3dlZCBieSBhIGRldGFjaGVkIHNpZ25hdHVyZSBvbiBpdC4gIFJldHVybiB0aGUKKyAqIG9mZnNldCB3aGVyZSB0aGUgZW1iZWRkZWQgZGV0YWNoZWQgc2lnbmF0dXJlIGJlZ2lucywgb3IgdGhlIGVuZCBvZgorICogdGhlIGRhdGEgd2hlbiB0aGVyZSBpcyBubyBzdWNoIHNpZ25hdHVyZS4KKyAqLworc2l6ZV90IHBhcnNlX3NpZ25hdHVyZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKKworLyoKKyAqIENyZWF0ZSBhIGRldGFjaGVkIHNpZ25hdHVyZSBmb3IgdGhlIGNvbnRlbnRzIG9mICJidWZmZXIiIGFuZCBhcHBlbmQKKyAqIGl0IGFmdGVyICJzaWduYXR1cmUiOyAiYnVmZmVyIiBhbmQgInNpZ25hdHVyZSIgY2FuIGJlIHRoZSBzYW1lCisgKiBzdHJidWYgaW5zdGFuY2UsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSBkZXRhY2hlZCBzaWduYXR1cmUgYXBwZW5kZWQKKyAqIGF0IHRoZSBlbmQuCisgKi8KK2ludCBzaWduX2J1ZmZlcihzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIHN0cnVjdCBzdHJidWYgKnNpZ25hdHVyZSwKKwkJY29uc3QgY2hhciAqc2lnbmluZ19rZXkpOworCitpbnQgZ2l0X2dwZ19jb25maWcoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7Cit2b2lkIHNldF9zaWduaW5nX2tleShjb25zdCBjaGFyICopOworY29uc3QgY2hhciAqZ2V0X3NpZ25pbmdfa2V5KHZvaWQpOworaW50IGNoZWNrX3NpZ25hdHVyZShjb25zdCBjaGFyICpwYXlsb2FkLCBzaXplX3QgcGxlbiwKKwkJICAgIGNvbnN0IGNoYXIgKnNpZ25hdHVyZSwgc2l6ZV90IHNsZW4sCisJCSAgICBzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrICpzaWdjKTsKK3ZvaWQgcHJpbnRfc2lnbmF0dXJlX2J1ZmZlcihjb25zdCBzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrICpzaWdjLAorCQkJICAgIHVuc2lnbmVkIGZsYWdzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9ncmFwaC5jIGIvZ3JhcGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2Q5OTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JhcGguYwpAQCAtMCwwICsxLDE1MzYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAiZ3JhcGguaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworLyogSW50ZXJuYWwgQVBJICovCisKKy8qCisgKiBPdXRwdXQgYSBwYWRkaW5nIGxpbmUgaW4gdGhlIGdyYXBoLgorICogVGhpcyBpcyBzaW1pbGFyIHRvIGdyYXBoX25leHRfbGluZSgpLiAgSG93ZXZlciwgaXQgaXMgZ3VhcmFudGVlZCB0bworICogbmV2ZXIgcHJpbnQgdGhlIGN1cnJlbnQgY29tbWl0IGxpbmUuICBJbnN0ZWFkLCBpZiB0aGUgY29tbWl0IGxpbmUgaXMKKyAqIG5leHQsIGl0IHdpbGwgc2ltcGx5IG91dHB1dCBhIGxpbmUgb2YgdmVydGljYWwgcGFkZGluZywgZXh0ZW5kaW5nIHRoZQorICogYnJhbmNoIGxpbmVzIGRvd253YXJkcywgYnV0IGxlYXZpbmcgdGhlbSBvdGhlcndpc2UgdW5jaGFuZ2VkLgorICovCitzdGF0aWMgdm9pZCBncmFwaF9wYWRkaW5nX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKTsKKworLyoKKyAqIFByaW50IGEgc3RyYnVmLiAgSWYgdGhlIGdyYXBoIGlzIG5vbi1OVUxMLCBhbGwgbGluZXMgYnV0IHRoZSBmaXJzdCB3aWxsIGJlCisgKiBwcmVmaXhlZCB3aXRoIHRoZSBncmFwaCBvdXRwdXQuCisgKgorICogSWYgdGhlIHN0cmJ1ZiBlbmRzIHdpdGggYSBuZXdsaW5lLCB0aGUgb3V0cHV0IHdpbGwgZW5kIGFmdGVyIHRoaXMKKyAqIG5ld2xpbmUuICBBIG5ldyBncmFwaCBsaW5lIHdpbGwgbm90IGJlIHByaW50ZWQgYWZ0ZXIgdGhlIGZpbmFsIG5ld2xpbmUuCisgKiBJZiB0aGUgc3RyYnVmIGlzIGVtcHR5LCBubyBvdXRwdXQgd2lsbCBiZSBwcmludGVkLgorICoKKyAqIFNpbmNlIHRoZSBmaXJzdCBsaW5lIHdpbGwgbm90IGluY2x1ZGUgdGhlIGdyYXBoIG91dHB1dCwgdGhlIGNhbGxlciBpcworICogcmVzcG9uc2libGUgZm9yIHByaW50aW5nIHRoaXMgbGluZSdzIGdyYXBoIChwZXJoYXBzIHZpYQorICogZ3JhcGhfc2hvd19jb21taXQoKSBvciBncmFwaF9zaG93X29uZWxpbmUoKSkgYmVmb3JlIGNhbGxpbmcKKyAqIGdyYXBoX3Nob3dfc3RyYnVmKCkuCisgKgorICogTm90ZSB0aGF0IHVubGlrZSBzb21lIG90aGVyIGdyYXBoIGRpc3BsYXkgZnVuY3Rpb25zLCB5b3UgbXVzdCBwYXNzIHRoZSBmaWxlCisgKiBoYW5kbGUgZGlyZWN0bHkuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGZpbGUgaGFuZGxlIGFzIHRoZQorICogZmlsZSBzcGVjaWZpZWQgYnkgdGhlIGdyYXBoIGRpZmYgb3B0aW9ucy4gVGhpcyBpcyBuZWNlc3Nhcnkgc28gdGhhdAorICogZ3JhcGhfc2hvd19zdHJidWYgY2FuIGJlIGNhbGxlZCBldmVuIHdpdGggYSBOVUxMIGdyYXBoLgorICogSWYgYSBOVUxMIGdyYXBoIGlzIHN1cHBsaWVkLCB0aGUgc3RyYnVmIGlzIHByaW50ZWQgYXMtaXMuCisgKi8KK3N0YXRpYyB2b2lkIGdyYXBoX3Nob3dfc3RyYnVmKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJICAgICAgRklMRSAqZmlsZSwKKwkJCSAgICAgIHN0cnVjdCBzdHJidWYgY29uc3QgKnNiKTsKKworLyoKKyAqIFRPRE86CisgKiAtIExpbWl0IHRoZSBudW1iZXIgb2YgY29sdW1ucywgc2ltaWxhciB0byB0aGUgd2F5IGdpdGsgZG9lcy4KKyAqICAgSWYgd2UgcmVhY2ggbW9yZSB0aGFuIGEgc3BlY2lmaWVkIG51bWJlciBvZiBjb2x1bW5zLCBvbWl0CisgKiAgIHNlY3Rpb25zIG9mIHNvbWUgY29sdW1ucy4KKyAqLworCitzdHJ1Y3QgY29sdW1uIHsKKwkvKgorCSAqIFRoZSBwYXJlbnQgY29tbWl0IG9mIHRoaXMgY29sdW1uLgorCSAqLworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkvKgorCSAqIFRoZSBjb2xvciB0byAob3B0aW9uYWxseSkgcHJpbnQgdGhpcyBjb2x1bW4gaW4uICBUaGlzIGlzIGFuCisJICogaW5kZXggaW50byBjb2x1bW5fY29sb3JzLgorCSAqLworCXVuc2lnbmVkIHNob3J0IGNvbG9yOworfTsKKworZW51bSBncmFwaF9zdGF0ZSB7CisJR1JBUEhfUEFERElORywKKwlHUkFQSF9TS0lQLAorCUdSQVBIX1BSRV9DT01NSVQsCisJR1JBUEhfQ09NTUlULAorCUdSQVBIX1BPU1RfTUVSR0UsCisJR1JBUEhfQ09MTEFQU0lORworfTsKKworc3RhdGljIHZvaWQgZ3JhcGhfc2hvd19saW5lX3ByZWZpeChjb25zdCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0KQoreworCWlmICghZGlmZm9wdCB8fCAhZGlmZm9wdC0+bGluZV9wcmVmaXgpCisJCXJldHVybjsKKworCWZ3cml0ZShkaWZmb3B0LT5saW5lX3ByZWZpeCwKKwkgICAgICAgc2l6ZW9mKGNoYXIpLAorCSAgICAgICBkaWZmb3B0LT5saW5lX3ByZWZpeF9sZW5ndGgsCisJICAgICAgIGRpZmZvcHQtPmZpbGUpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqKmNvbHVtbl9jb2xvcnM7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgY29sdW1uX2NvbG9yc19tYXg7CisKK3N0YXRpYyB2b2lkIHBhcnNlX2dyYXBoX2NvbG9yc19jb25maWcoc3RydWN0IGFyZ3ZfYXJyYXkgKmNvbG9ycywgY29uc3QgY2hhciAqc3RyaW5nKQoreworCWNvbnN0IGNoYXIgKmVuZCwgKnN0YXJ0OworCisJc3RhcnQgPSBzdHJpbmc7CisJZW5kID0gc3RyaW5nICsgc3RybGVuKHN0cmluZyk7CisJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisJCWNvbnN0IGNoYXIgKmNvbW1hID0gc3RyY2hybnVsKHN0YXJ0LCAnLCcpOworCQljaGFyIGNvbG9yW0NPTE9SX01BWExFTl07CisKKwkJaWYgKCFjb2xvcl9wYXJzZV9tZW0oc3RhcnQsIGNvbW1hIC0gc3RhcnQsIGNvbG9yKSkKKwkJCWFyZ3ZfYXJyYXlfcHVzaChjb2xvcnMsIGNvbG9yKTsKKwkJZWxzZQorCQkJd2FybmluZyhfKCJpZ25vcmUgaW52YWxpZCBjb2xvciAnJS4qcycgaW4gbG9nLmdyYXBoQ29sb3JzIiksCisJCQkJKGludCkoY29tbWEgLSBzdGFydCksIHN0YXJ0KTsKKwkJc3RhcnQgPSBjb21tYSArIDE7CisJfQorCWFyZ3ZfYXJyYXlfcHVzaChjb2xvcnMsIEdJVF9DT0xPUl9SRVNFVCk7Cit9CisKK3ZvaWQgZ3JhcGhfc2V0X2NvbHVtbl9jb2xvcnMoY29uc3QgY2hhciAqKmNvbG9ycywgdW5zaWduZWQgc2hvcnQgY29sb3JzX21heCkKK3sKKwljb2x1bW5fY29sb3JzID0gY29sb3JzOworCWNvbHVtbl9jb2xvcnNfbWF4ID0gY29sb3JzX21heDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbHVtbl9nZXRfY29sb3JfY29kZSh1bnNpZ25lZCBzaG9ydCBjb2xvcikKK3sKKwlyZXR1cm4gY29sdW1uX2NvbG9yc1tjb2xvcl07Cit9CisKK3N0cnVjdCBncmFwaF9saW5lIHsKKwlzdHJ1Y3Qgc3RyYnVmICpidWY7CisJc2l6ZV90IHdpZHRoOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGdyYXBoX2xpbmVfYWRkY2goc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUsIGludCBjKQoreworCXN0cmJ1Zl9hZGRjaChsaW5lLT5idWYsIGMpOworCWxpbmUtPndpZHRoKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmFwaF9saW5lX2FkZGNoYXJzKHN0cnVjdCBncmFwaF9saW5lICpsaW5lLCBpbnQgYywgc2l6ZV90IG4pCit7CisJc3RyYnVmX2FkZGNoYXJzKGxpbmUtPmJ1ZiwgYywgbik7CisJbGluZS0+d2lkdGggKz0gbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyYXBoX2xpbmVfYWRkc3RyKHN0cnVjdCBncmFwaF9saW5lICpsaW5lLCBjb25zdCBjaGFyICpzKQoreworCXN0cmJ1Zl9hZGRzdHIobGluZS0+YnVmLCBzKTsKKwlsaW5lLT53aWR0aCArPSBzdHJsZW4ocyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmFwaF9saW5lX2FkZGNvbG9yKHN0cnVjdCBncmFwaF9saW5lICpsaW5lLCB1bnNpZ25lZCBzaG9ydCBjb2xvcikKK3sKKwlzdHJidWZfYWRkc3RyKGxpbmUtPmJ1ZiwgY29sdW1uX2dldF9jb2xvcl9jb2RlKGNvbG9yKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKHN0cnVjdCBncmFwaF9saW5lICpsaW5lLCBjb25zdCBzdHJ1Y3QgY29sdW1uICpjLAorCQkJCSAgICBjaGFyIGNvbF9jaGFyKQoreworCWlmIChjLT5jb2xvciA8IGNvbHVtbl9jb2xvcnNfbWF4KQorCQlncmFwaF9saW5lX2FkZGNvbG9yKGxpbmUsIGMtPmNvbG9yKTsKKwlncmFwaF9saW5lX2FkZGNoKGxpbmUsIGNvbF9jaGFyKTsKKwlpZiAoYy0+Y29sb3IgPCBjb2x1bW5fY29sb3JzX21heCkKKwkJZ3JhcGhfbGluZV9hZGRjb2xvcihsaW5lLCBjb2x1bW5fY29sb3JzX21heCk7Cit9CisKK3N0cnVjdCBnaXRfZ3JhcGggeworCS8qCisJICogVGhlIGNvbW1pdCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkCisJICovCisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCS8qIFRoZSByZXYtaW5mbyB1c2VkIGZvciB0aGUgY3VycmVudCB0cmF2ZXJzYWwgKi8KKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7CisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGludGVyZXN0aW5nIHBhcmVudHMgdGhhdCB0aGlzIGNvbW1pdCBoYXMuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGFjdHVhbCBudW1iZXIgb2YgcGFyZW50cy4KKwkgKiBUaGlzIGNvdW50IGV4Y2x1ZGVzIHBhcmVudHMgdGhhdCB3b24ndCBiZSBwcmludGVkIGluIHRoZSBncmFwaAorCSAqIG91dHB1dCwgYXMgZGV0ZXJtaW5lZCBieSBncmFwaF9pc19pbnRlcmVzdGluZygpLgorCSAqLworCWludCBudW1fcGFyZW50czsKKwkvKgorCSAqIFRoZSB3aWR0aCBvZiB0aGUgZ3JhcGggb3V0cHV0IGZvciB0aGlzIGNvbW1pdC4KKwkgKiBBbGwgcm93cyBmb3IgdGhpcyBjb21taXQgYXJlIHBhZGRlZCB0byB0aGlzIHdpZHRoLCBzbyB0aGF0CisJICogbWVzc2FnZXMgcHJpbnRlZCBhZnRlciB0aGUgZ3JhcGggb3V0cHV0IGFyZSBhbGlnbmVkLgorCSAqLworCWludCB3aWR0aDsKKwkvKgorCSAqIFRoZSBuZXh0IGV4cGFuc2lvbiByb3cgdG8gcHJpbnQKKwkgKiB3aGVuIHN0YXRlIGlzIEdSQVBIX1BSRV9DT01NSVQKKwkgKi8KKwlpbnQgZXhwYW5zaW9uX3JvdzsKKwkvKgorCSAqIFRoZSBjdXJyZW50IG91dHB1dCBzdGF0ZS4KKwkgKiBUaGlzIHRlbGxzIHVzIHdoYXQga2luZCBvZiBsaW5lIGdyYXBoX25leHRfbGluZSgpIHNob3VsZCBvdXRwdXQuCisJICovCisJZW51bSBncmFwaF9zdGF0ZSBzdGF0ZTsKKwkvKgorCSAqIFRoZSBvdXRwdXQgc3RhdGUgZm9yIHRoZSBwcmV2aW91cyBsaW5lIG9mIG91dHB1dC4KKwkgKiBUaGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIGRldGVybWluZSBob3cgdGhlIGZpcnN0IG1lcmdlIGxpbmUKKwkgKiBzaG91bGQgYXBwZWFyLCBiYXNlZCBvbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBwcmV2aW91cyBjb21taXQuCisJICovCisJZW51bSBncmFwaF9zdGF0ZSBwcmV2X3N0YXRlOworCS8qCisJICogVGhlIGluZGV4IG9mIHRoZSBjb2x1bW4gdGhhdCByZWZlcnMgdG8gdGhpcyBjb21taXQuCisJICoKKwkgKiBJZiBub25lIG9mIHRoZSBpbmNvbWluZyBjb2x1bW5zIHJlZmVyIHRvIHRoaXMgY29tbWl0LAorCSAqIHRoaXMgd2lsbCBiZSBlcXVhbCB0byBudW1fY29sdW1ucy4KKwkgKi8KKwlpbnQgY29tbWl0X2luZGV4OworCS8qCisJICogVGhlIGNvbW1pdF9pbmRleCBmb3IgdGhlIHByZXZpb3VzbHkgZGlzcGxheWVkIGNvbW1pdC4KKwkgKgorCSAqIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaG93IHRoZSBmaXJzdCBsaW5lIG9mIGEgbWVyZ2UKKwkgKiBncmFwaCBvdXRwdXQgc2hvdWxkIGFwcGVhciwgYmFzZWQgb24gdGhlIGxhc3QgbGluZSBvZiB0aGUKKwkgKiBwcmV2aW91cyBjb21taXQuCisJICovCisJaW50IHByZXZfY29tbWl0X2luZGV4OworCS8qCisJICogV2hpY2ggbGF5b3V0IHZhcmlhbnQgdG8gdXNlIHRvIGRpc3BsYXkgbWVyZ2UgY29tbWl0cy4gSWYgdGhlCisJICogY29tbWl0J3MgZmlyc3QgcGFyZW50IGlzIGtub3duIHRvIGJlIGluIGEgY29sdW1uIHRvIHRoZSBsZWZ0IG9mIHRoZQorCSAqIG1lcmdlLCB0aGVuIHRoaXMgdmFsdWUgaXMgMCBhbmQgd2UgdXNlIHRoZSBsYXlvdXQgb24gdGhlIGxlZnQuCisJICogT3RoZXJ3aXNlLCB0aGUgdmFsdWUgaXMgMSBhbmQgdGhlIGxheW91dCBvbiB0aGUgcmlnaHQgaXMgdXNlZC4gVGhpcworCSAqIGZpZWxkIHRlbGxzIHVzIGhvdyBtYW55IGNvbHVtbnMgdGhlIGZpcnN0IHBhcmVudCBvY2N1cGllcy4KKwkgKgorCSAqIAkJMCkJCQkxKQorCSAqCisJICogCQl8IHwgfCAqLS4JCXwgfCAqLS0tLgorCSAqIAkJfCB8X3wvfFwgXAkJfCB8IHxcIFwgXAorCSAqIAkJfC98IHwgfCB8IHwJCXwgfCB8IHwgfCAqCisJICovCisJaW50IG1lcmdlX2xheW91dDsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgY29sdW1ucyBhZGRlZCB0byB0aGUgZ3JhcGggYnkgdGhlIGN1cnJlbnQgY29tbWl0LiBGb3IKKwkgKiAyLXdheSBhbmQgb2N0b3B1cyBtZXJnZXMsIHRoaXMgaXMgdXN1YWxseSBvbmUgbGVzcyB0aGFuIHRoZQorCSAqIG51bWJlciBvZiBwYXJlbnRzOgorCSAqCisJICogCQl8IHwgfAkJCXwgfCAgICBcCisJICoJCXwgKiB8CQkJfCAqLS0tLiBcCisJICoJCXwgfFwgXAkJCXwgfFwgXCBcIFwKKwkgKgkJfCB8IHwgfCAgICAgICAgIAl8IHwgfCB8IHwgfAorCSAqCisJICoJCW51bV9wYXJlbnRzOiAyCQludW1fcGFyZW50czogNAorCSAqCQllZGdlc19hZGRlZDogMQkJZWRnZXNfYWRkZWQ6IDMKKwkgKgorCSAqIEZvciBsZWZ0LXNrZXdlZCBtZXJnZXMsIHRoZSBmaXJzdCBwYXJlbnQgZnVzZXMgd2l0aCBpdHMgbmVpZ2hib3IgYW5kCisJICogc28gb25lIGxlc3MgY29sdW1uIGlzIGFkZGVkOgorCSAqCisJICoJCXwgfCB8CQkJfCB8ICBcCisJICoJCXwgKiB8CQkJfCAqLS4gXAorCSAqCQl8L3wgfAkJCXwvfFwgXCBcCisJICoJCXwgfCB8CQkJfCB8IHwgfCB8CisJICoKKwkgKgkJbnVtX3BhcmVudHM6IDIJCW51bV9wYXJlbnRzOiA0CisJICoJCWVkZ2VzX2FkZGVkOiAwCQllZGdlc19hZGRlZDogMgorCSAqCisJICogVGhpcyBudW1iZXIgZGV0ZXJtaW5lcyBob3cgZWRnZXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBtZXJnZSBhcmUKKwkgKiBkaXNwbGF5ZWQgaW4gY29tbWl0IGFuZCBwb3N0LW1lcmdlIGxpbmVzOyBpZiBubyBjb2x1bW5zIGhhdmUgYmVlbgorCSAqIGFkZGVkIHRoZW4gYSB2ZXJ0aWNhbCBsaW5lIHNob3VsZCBiZSB1c2VkIHdoZXJlIGEgcmlnaHQtdHJhY2tpbmcKKwkgKiBsaW5lIHdvdWxkIG90aGVyd2lzZSBiZSB1c2VkLgorCSAqCisJICoJCXwgKiBcCQkJfCAqIHwKKwkgKgkJfCB8XCBcCQkJfC98IHwKKwkgKgkJfCB8ICogXAkJCXwgKiB8CisJICovCisJaW50IGVkZ2VzX2FkZGVkOworCS8qCisJICogVGhlIG51bWJlciBvZiBjb2x1bW5zIGFkZGVkIGJ5IHRoZSBwcmV2aW91cyBjb21taXQsIHdoaWNoIGlzIHVzZWQgdG8KKwkgKiBzbW9vdGggZWRnZXMgYXBwZWFyaW5nIHRvIHRoZSByaWdodCBvZiBhIGNvbW1pdCBpbiBhIGNvbW1pdCBsaW5lCisJICogZm9sbG93aW5nIGEgcG9zdC1tZXJnZSBsaW5lLgorCSAqLworCWludCBwcmV2X2VkZ2VzX2FkZGVkOworCS8qCisJICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZSBjb2x1bW5zCisJICogYW5kIG5ld19jb2x1bW5zIGFycmF5cy4gIFRoaXMgaXMgYWxzbyBoYWxmIHRoZSBudW1iZXIgb2YgZW50cmllcworCSAqIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgbWFwcGluZyBhbmQgb2xkX21hcHBpbmcgYXJyYXlzLgorCSAqLworCWludCBjb2x1bW5fY2FwYWNpdHk7CisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgKGFsc28gY2FsbGVkICJicmFuY2ggbGluZXMiIGluIHNvbWUgcGxhY2VzKQorCSAqLworCWludCBudW1fY29sdW1uczsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbmV3X2NvbHVtbnMgYXJyYXkKKwkgKi8KKwlpbnQgbnVtX25ld19jb2x1bW5zOworCS8qCisJICogVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBtYXBwaW5nIGFycmF5CisJICovCisJaW50IG1hcHBpbmdfc2l6ZTsKKwkvKgorCSAqIFRoZSBjb2x1bW4gc3RhdGUgYmVmb3JlIHdlIG91dHB1dCB0aGUgY3VycmVudCBjb21taXQuCisJICovCisJc3RydWN0IGNvbHVtbiAqY29sdW1uczsKKwkvKgorCSAqIFRoZSBuZXcgY29sdW1uIHN0YXRlIGFmdGVyIHdlIG91dHB1dCB0aGUgY3VycmVudCBjb21taXQuCisJICogT25seSB2YWxpZCB3aGVuIHN0YXRlIGlzIEdSQVBIX0NPTExBUFNJTkcuCisJICovCisJc3RydWN0IGNvbHVtbiAqbmV3X2NvbHVtbnM7CisJLyoKKwkgKiBBbiBhcnJheSB0aGF0IHRyYWNrcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBlYWNoCisJICogY2hhcmFjdGVyIGluIHRoZSBvdXRwdXQgbGluZSBkdXJpbmcgc3RhdGUgR1JBUEhfQ09MTEFQU0lORy4KKwkgKiBFYWNoIGVudHJ5IGlzIC0xIGlmIHRoaXMgY2hhcmFjdGVyIGlzIGVtcHR5LCBvciBhIG5vbi1uZWdhdGl2ZQorCSAqIGludGVnZXIgaWYgdGhlIGNoYXJhY3RlciBjb250YWlucyBhIGJyYW5jaCBsaW5lLiAgVGhlIHZhbHVlIG9mCisJICogdGhlIGludGVnZXIgaW5kaWNhdGVzIHRoZSB0YXJnZXQgcG9zaXRpb24gZm9yIHRoaXMgYnJhbmNoIGxpbmUuCisJICogKEkuZS4sIHRoaXMgYXJyYXkgbWFwcyB0aGUgY3VycmVudCBjb2x1bW4gcG9zaXRpb25zIHRvIHRoZWlyCisJICogZGVzaXJlZCBwb3NpdGlvbnMuKQorCSAqCisJICogVGhlIG1heGltdW0gY2FwYWNpdHkgb2YgdGhpcyBhcnJheSBpcyBhbHdheXMKKwkgKiBzaXplb2YoaW50KSAqIDIgKiBjb2x1bW5fY2FwYWNpdHkuCisJICovCisJaW50ICptYXBwaW5nOworCS8qCisJICogQSBjb3B5IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwcGluZyBhcnJheSBmcm9tIHRoZSBsYXN0IGNvbW1pdCwKKwkgKiB3aGljaCB3ZSB1c2UgdG8gaW1wcm92ZSB0aGUgZGlzcGxheSBvZiBjb2x1bW5zIHRoYXQgYXJlIHRyYWNraW5nCisJICogZnJvbSByaWdodCB0byBsZWZ0IHRocm91Z2ggYSBjb21taXQgbGluZS4gIFdlIGFsc28gdXNlIHRoaXMgdG8KKwkgKiBhdm9pZCBhbGxvY2F0aW5nIGEgZnJlc2ggYXJyYXkgd2hlbiB3ZSBjb21wdXRlIHRoZSBuZXh0IG1hcHBpbmcuCisJICovCisJaW50ICpvbGRfbWFwcGluZzsKKwkvKgorCSAqIFRoZSBjdXJyZW50IGRlZmF1bHQgY29sdW1uIGNvbG9yIGJlaW5nIHVzZWQuICBUaGlzIGlzCisJICogc3RvcmVkIGFzIGFuIGluZGV4IGludG8gdGhlIGFycmF5IGNvbHVtbl9jb2xvcnMuCisJICovCisJdW5zaWduZWQgc2hvcnQgZGVmYXVsdF9jb2x1bW5fY29sb3I7Cit9OworCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiAqZGlmZl9vdXRwdXRfcHJlZml4X2NhbGxiYWNrKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCA9IGRhdGE7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgbXNnYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlhc3NlcnQob3B0KTsKKworCXN0cmJ1Zl9yZXNldCgmbXNnYnVmKTsKKwlpZiAob3B0LT5saW5lX3ByZWZpeCkKKwkJc3RyYnVmX2FkZCgmbXNnYnVmLCBvcHQtPmxpbmVfcHJlZml4LAorCQkJICAgb3B0LT5saW5lX3ByZWZpeF9sZW5ndGgpOworCWlmIChncmFwaCkKKwkJZ3JhcGhfcGFkZGluZ19saW5lKGdyYXBoLCAmbXNnYnVmKTsKKwlyZXR1cm4gJm1zZ2J1ZjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkaWZmX29wdGlvbnMgKmRlZmF1bHRfZGlmZm9wdDsKKwordm9pZCBncmFwaF9zZXR1cF9saW5lX3ByZWZpeChzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0KQoreworCWRlZmF1bHRfZGlmZm9wdCA9IGRpZmZvcHQ7CisKKwkvKiBzZXR1cCBhbiBvdXRwdXQgcHJlZml4IGNhbGxiYWNrIGlmIG5lY2Vzc2FyeSAqLworCWlmIChkaWZmb3B0ICYmICFkaWZmb3B0LT5vdXRwdXRfcHJlZml4KQorCQlkaWZmb3B0LT5vdXRwdXRfcHJlZml4ID0gZGlmZl9vdXRwdXRfcHJlZml4X2NhbGxiYWNrOworfQorCisKK3N0cnVjdCBnaXRfZ3JhcGggKmdyYXBoX2luaXQoc3RydWN0IHJldl9pbmZvICpvcHQpCit7CisJc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGggPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgZ2l0X2dyYXBoKSk7CisKKwlpZiAoIWNvbHVtbl9jb2xvcnMpIHsKKwkJY2hhciAqc3RyaW5nOworCQlpZiAoZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJsb2cuZ3JhcGhjb2xvcnMiLCAmc3RyaW5nKSkgeworCQkJLyogbm90IGNvbmZpZ3VyZWQgLS0gdXNlIGRlZmF1bHQgKi8KKwkJCWdyYXBoX3NldF9jb2x1bW5fY29sb3JzKGNvbHVtbl9jb2xvcnNfYW5zaSwKKwkJCQkJCWNvbHVtbl9jb2xvcnNfYW5zaV9tYXgpOworCQl9IGVsc2UgeworCQkJc3RhdGljIHN0cnVjdCBhcmd2X2FycmF5IGN1c3RvbV9jb2xvcnMgPSBBUkdWX0FSUkFZX0lOSVQ7CisJCQlhcmd2X2FycmF5X2NsZWFyKCZjdXN0b21fY29sb3JzKTsKKwkJCXBhcnNlX2dyYXBoX2NvbG9yc19jb25maWcoJmN1c3RvbV9jb2xvcnMsIHN0cmluZyk7CisJCQlmcmVlKHN0cmluZyk7CisJCQkvKiBncmFwaF9zZXRfY29sdW1uX2NvbG9ycyB0YWtlcyBhIG1heC1pbmRleCwgbm90IGEgY291bnQgKi8KKwkJCWdyYXBoX3NldF9jb2x1bW5fY29sb3JzKGN1c3RvbV9jb2xvcnMuYXJndiwKKwkJCQkJCWN1c3RvbV9jb2xvcnMuYXJnYyAtIDEpOworCQl9CisJfQorCisJZ3JhcGgtPmNvbW1pdCA9IE5VTEw7CisJZ3JhcGgtPnJldnMgPSBvcHQ7CisJZ3JhcGgtPm51bV9wYXJlbnRzID0gMDsKKwlncmFwaC0+ZXhwYW5zaW9uX3JvdyA9IDA7CisJZ3JhcGgtPnN0YXRlID0gR1JBUEhfUEFERElORzsKKwlncmFwaC0+cHJldl9zdGF0ZSA9IEdSQVBIX1BBRERJTkc7CisJZ3JhcGgtPmNvbW1pdF9pbmRleCA9IDA7CisJZ3JhcGgtPnByZXZfY29tbWl0X2luZGV4ID0gMDsKKwlncmFwaC0+bWVyZ2VfbGF5b3V0ID0gMDsKKwlncmFwaC0+ZWRnZXNfYWRkZWQgPSAwOworCWdyYXBoLT5wcmV2X2VkZ2VzX2FkZGVkID0gMDsKKwlncmFwaC0+bnVtX2NvbHVtbnMgPSAwOworCWdyYXBoLT5udW1fbmV3X2NvbHVtbnMgPSAwOworCWdyYXBoLT5tYXBwaW5nX3NpemUgPSAwOworCS8qCisJICogU3RhcnQgdGhlIGNvbHVtbiBjb2xvciBhdCB0aGUgbWF4aW11bSB2YWx1ZSwgc2luY2Ugd2UnbGwKKwkgKiBhbHdheXMgaW5jcmVtZW50IGl0IGZvciB0aGUgZmlyc3QgY29tbWl0IHdlIG91dHB1dC4KKwkgKiBUaGlzIHdheSB3ZSBzdGFydCBhdCAwIGZvciB0aGUgZmlyc3QgY29tbWl0LgorCSAqLworCWdyYXBoLT5kZWZhdWx0X2NvbHVtbl9jb2xvciA9IGNvbHVtbl9jb2xvcnNfbWF4IC0gMTsKKworCS8qCisJICogQWxsb2NhdGUgYSByZWFzb25hYmx5IGxhcmdlIGRlZmF1bHQgbnVtYmVyIG9mIGNvbHVtbnMKKwkgKiBXZSdsbCBhdXRvbWF0aWNhbGx5IGdyb3cgY29sdW1ucyBsYXRlciBpZiB3ZSBuZWVkIG1vcmUgcm9vbS4KKwkgKi8KKwlncmFwaC0+Y29sdW1uX2NhcGFjaXR5ID0gMzA7CisJQUxMT0NfQVJSQVkoZ3JhcGgtPmNvbHVtbnMsIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOworCUFMTE9DX0FSUkFZKGdyYXBoLT5uZXdfY29sdW1ucywgZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CisJQUxMT0NfQVJSQVkoZ3JhcGgtPm1hcHBpbmcsIDIgKiBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlBTExPQ19BUlJBWShncmFwaC0+b2xkX21hcHBpbmcsIDIgKiBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKworCS8qCisJICogVGhlIGRpZmYgb3V0cHV0IHByZWZpeCBjYWxsYmFjaywgd2l0aCB0aGlzIHdlIGNhbiBtYWtlCisJICogYWxsIHRoZSBkaWZmIG91dHB1dCB0byBhbGlnbiB3aXRoIHRoZSBncmFwaCBsaW5lcy4KKwkgKi8KKwlvcHQtPmRpZmZvcHQub3V0cHV0X3ByZWZpeCA9IGRpZmZfb3V0cHV0X3ByZWZpeF9jYWxsYmFjazsKKwlvcHQtPmRpZmZvcHQub3V0cHV0X3ByZWZpeF9kYXRhID0gZ3JhcGg7CisKKwlyZXR1cm4gZ3JhcGg7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX3VwZGF0ZV9zdGF0ZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgZW51bSBncmFwaF9zdGF0ZSBzKQoreworCWdyYXBoLT5wcmV2X3N0YXRlID0gZ3JhcGgtPnN0YXRlOworCWdyYXBoLT5zdGF0ZSA9IHM7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX2Vuc3VyZV9jYXBhY2l0eShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgaW50IG51bV9jb2x1bW5zKQoreworCWlmIChncmFwaC0+Y29sdW1uX2NhcGFjaXR5ID49IG51bV9jb2x1bW5zKQorCQlyZXR1cm47CisKKwlkbyB7CisJCWdyYXBoLT5jb2x1bW5fY2FwYWNpdHkgKj0gMjsKKwl9IHdoaWxlIChncmFwaC0+Y29sdW1uX2NhcGFjaXR5IDwgbnVtX2NvbHVtbnMpOworCisJUkVBTExPQ19BUlJBWShncmFwaC0+Y29sdW1ucywgZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CisJUkVBTExPQ19BUlJBWShncmFwaC0+bmV3X2NvbHVtbnMsIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOworCVJFQUxMT0NfQVJSQVkoZ3JhcGgtPm1hcHBpbmcsIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkgKiAyKTsKKwlSRUFMTE9DX0FSUkFZKGdyYXBoLT5vbGRfbWFwcGluZywgZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSAqIDIpOworfQorCisvKgorICogUmV0dXJucyAxIGlmIHRoZSBjb21taXQgd2lsbCBiZSBwcmludGVkIGluIHRoZSBncmFwaCBvdXRwdXQsCisgKiBhbmQgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgZ3JhcGhfaXNfaW50ZXJlc3Rpbmcoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwkvKgorCSAqIElmIHJldnMtPmJvdW5kYXJ5IGlzIHNldCwgY29tbWl0cyB3aG9zZSBjaGlsZHJlbiBoYXZlCisJICogYmVlbiBzaG93biBhcmUgYWx3YXlzIGludGVyZXN0aW5nLCBldmVuIGlmIHRoZXkgaGF2ZSB0aGUKKwkgKiBVTklOVEVSRVNUSU5HIG9yIFRSRUVTQU1FIGZsYWdzIHNldC4KKwkgKi8KKwlpZiAoZ3JhcGgtPnJldnMgJiYgZ3JhcGgtPnJldnMtPmJvdW5kYXJ5KSB7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIENISUxEX1NIT1dOKQorCQkJcmV0dXJuIDE7CisJfQorCisJLyoKKwkgKiBPdGhlcndpc2UsIHVzZSBnZXRfY29tbWl0X2FjdGlvbigpIHRvIHNlZSBpZiB0aGlzIGNvbW1pdCBpcworCSAqIGludGVyZXN0aW5nCisJICovCisJcmV0dXJuIGdldF9jb21taXRfYWN0aW9uKGdyYXBoLT5yZXZzLCBjb21taXQpID09IGNvbW1pdF9zaG93OworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpuZXh0X2ludGVyZXN0aW5nX3BhcmVudChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCQkJCSAgIHN0cnVjdCBjb21taXRfbGlzdCAqb3JpZykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3Q7CisKKwkvKgorCSAqIElmIHJldnMtPmZpcnN0X3BhcmVudF9vbmx5IGlzIHNldCwgb25seSB0aGUgZmlyc3QKKwkgKiBwYXJlbnQgaXMgaW50ZXJlc3RpbmcuICBOb25lIG9mIHRoZSBvdGhlcnMgYXJlLgorCSAqLworCWlmIChncmFwaC0+cmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBSZXR1cm4gdGhlIG5leHQgaW50ZXJlc3RpbmcgY29tbWl0IGFmdGVyIG9yaWcKKwkgKi8KKwlmb3IgKGxpc3QgPSBvcmlnLT5uZXh0OyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgeworCQlpZiAoZ3JhcGhfaXNfaW50ZXJlc3RpbmcoZ3JhcGgsIGxpc3QtPml0ZW0pKQorCQkJcmV0dXJuIGxpc3Q7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmZpcnN0X2ludGVyZXN0aW5nX3BhcmVudChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBncmFwaC0+Y29tbWl0LT5wYXJlbnRzOworCisJLyoKKwkgKiBJZiB0aGlzIGNvbW1pdCBoYXMgbm8gcGFyZW50cywgaWdub3JlIGl0CisJICovCisJaWYgKCFwYXJlbnRzKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogSWYgdGhlIGZpcnN0IHBhcmVudCBpcyBpbnRlcmVzdGluZywgcmV0dXJuIGl0CisJICovCisJaWYgKGdyYXBoX2lzX2ludGVyZXN0aW5nKGdyYXBoLCBwYXJlbnRzLT5pdGVtKSkKKwkJcmV0dXJuIHBhcmVudHM7CisKKwkvKgorCSAqIE90aGVyd2lzZSwgY2FsbCBuZXh0X2ludGVyZXN0aW5nX3BhcmVudCgpIHRvIGdldAorCSAqIHRoZSBuZXh0IGludGVyZXN0aW5nIHBhcmVudAorCSAqLworCXJldHVybiBuZXh0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCwgcGFyZW50cyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBncmFwaF9nZXRfY3VycmVudF9jb2x1bW5fY29sb3IoY29uc3Qgc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJaWYgKCF3YW50X2NvbG9yKGdyYXBoLT5yZXZzLT5kaWZmb3B0LnVzZV9jb2xvcikpCisJCXJldHVybiBjb2x1bW5fY29sb3JzX21heDsKKwlyZXR1cm4gZ3JhcGgtPmRlZmF1bHRfY29sdW1uX2NvbG9yOworfQorCisvKgorICogVXBkYXRlIHRoZSBncmFwaCdzIGRlZmF1bHQgY29sdW1uIGNvbG9yLgorICovCitzdGF0aWMgdm9pZCBncmFwaF9pbmNyZW1lbnRfY29sdW1uX2NvbG9yKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCWdyYXBoLT5kZWZhdWx0X2NvbHVtbl9jb2xvciA9IChncmFwaC0+ZGVmYXVsdF9jb2x1bW5fY29sb3IgKyAxKSAlCisJCWNvbHVtbl9jb2xvcnNfbWF4OworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ3JhcGhfZmluZF9jb21taXRfY29sb3IoY29uc3Qgc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKKwkJaWYgKGdyYXBoLT5jb2x1bW5zW2ldLmNvbW1pdCA9PSBjb21taXQpCisJCQlyZXR1cm4gZ3JhcGgtPmNvbHVtbnNbaV0uY29sb3I7CisJfQorCXJldHVybiBncmFwaF9nZXRfY3VycmVudF9jb2x1bW5fY29sb3IoZ3JhcGgpOworfQorCitzdGF0aWMgaW50IGdyYXBoX2ZpbmRfbmV3X2NvbHVtbl9ieV9jb21taXQoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkJCSAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9uZXdfY29sdW1uczsgaSsrKSB7CisJCWlmIChncmFwaC0+bmV3X2NvbHVtbnNbaV0uY29tbWl0ID09IGNvbW1pdCkKKwkJCXJldHVybiBpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCQkgIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkJICBpbnQgaWR4KQoreworCWludCBpID0gZ3JhcGhfZmluZF9uZXdfY29sdW1uX2J5X2NvbW1pdChncmFwaCwgY29tbWl0KTsKKwlpbnQgbWFwcGluZ19pZHg7CisKKwkvKgorCSAqIElmIHRoZSBjb21taXQgaXMgbm90IGFscmVhZHkgaW4gdGhlIG5ld19jb2x1bW5zIGFycmF5LCB0aGVuIGFkZCBpdAorCSAqIGFuZCByZWNvcmQgaXQgYXMgYmVpbmcgaW4gdGhlIGZpbmFsIGNvbHVtbi4KKwkgKi8KKwlpZiAoaSA8IDApIHsKKwkJaSA9IGdyYXBoLT5udW1fbmV3X2NvbHVtbnMrKzsKKwkJZ3JhcGgtPm5ld19jb2x1bW5zW2ldLmNvbW1pdCA9IGNvbW1pdDsKKwkJZ3JhcGgtPm5ld19jb2x1bW5zW2ldLmNvbG9yID0gZ3JhcGhfZmluZF9jb21taXRfY29sb3IoZ3JhcGgsIGNvbW1pdCk7CisJfQorCisJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA+IDEgJiYgaWR4ID4gLTEgJiYgZ3JhcGgtPm1lcmdlX2xheW91dCA9PSAtMSkgeworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBwYXJlbnQgb2YgYSBtZXJnZSwgY2hvb3NlIGEgbGF5b3V0IGZvcgorCQkgKiB0aGUgbWVyZ2UgbGluZSBiYXNlZCBvbiB3aGV0aGVyIHRoZSBwYXJlbnQgYXBwZWFycyBpbiBhCisJCSAqIGNvbHVtbiB0byB0aGUgbGVmdCBvZiB0aGUgbWVyZ2UKKwkJICovCisJCWludCBkaXN0LCBzaGlmdDsKKworCQlkaXN0ID0gaWR4IC0gaTsKKwkJc2hpZnQgPSAoZGlzdCA+IDEpID8gMiAqIGRpc3QgLSAzIDogMTsKKworCQlncmFwaC0+bWVyZ2VfbGF5b3V0ID0gKGRpc3QgPiAwKSA/IDAgOiAxOworCQlncmFwaC0+ZWRnZXNfYWRkZWQgPSBncmFwaC0+bnVtX3BhcmVudHMgKyBncmFwaC0+bWVyZ2VfbGF5b3V0ICAtIDI7CisKKwkJbWFwcGluZ19pZHggPSBncmFwaC0+d2lkdGggKyAoZ3JhcGgtPm1lcmdlX2xheW91dCAtIDEpICogc2hpZnQ7CisJCWdyYXBoLT53aWR0aCArPSAyICogZ3JhcGgtPm1lcmdlX2xheW91dDsKKworCX0gZWxzZSBpZiAoZ3JhcGgtPmVkZ2VzX2FkZGVkID4gMCAmJiBpID09IGdyYXBoLT5tYXBwaW5nW2dyYXBoLT53aWR0aCAtIDJdKSB7CisJCS8qCisJCSAqIElmIHNvbWUgY29sdW1ucyBoYXZlIGJlZW4gYWRkZWQgYnkgYSBtZXJnZSwgYnV0IHRoaXMgY29tbWl0CisJCSAqIHdhcyBmb3VuZCBpbiB0aGUgbGFzdCBleGlzdGluZyBjb2x1bW4sIHRoZW4gYWRqdXN0IHRoZQorCQkgKiBudW1iZXJzIHNvIHRoYXQgdGhlIHR3byBlZGdlcyBpbW1lZGlhdGVseSBqb2luLCBpLmUuOgorCQkgKgorCQkgKgkJKiB8CQkqIHwKKwkJICoJCXxcIFwJPT4JfFx8CisJCSAqCQl8IHwvCQl8ICoKKwkJICoJCXwgKgorCQkgKi8KKwkJbWFwcGluZ19pZHggPSBncmFwaC0+d2lkdGggLSAyOworCQlncmFwaC0+ZWRnZXNfYWRkZWQgPSAtMTsKKwl9IGVsc2UgeworCQltYXBwaW5nX2lkeCA9IGdyYXBoLT53aWR0aDsKKwkJZ3JhcGgtPndpZHRoICs9IDI7CisJfQorCisJZ3JhcGgtPm1hcHBpbmdbbWFwcGluZ19pZHhdID0gaTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfdXBkYXRlX2NvbHVtbnMoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisJaW50IG1heF9uZXdfY29sdW1uczsKKwlpbnQgaSwgc2Vlbl90aGlzLCBpc19jb21taXRfaW5fY29sdW1uczsKKworCS8qCisJICogU3dhcCBncmFwaC0+Y29sdW1ucyB3aXRoIGdyYXBoLT5uZXdfY29sdW1ucworCSAqIGdyYXBoLT5jb2x1bW5zIGNvbnRhaW5zIHRoZSBzdGF0ZSBmb3IgdGhlIHByZXZpb3VzIGNvbW1pdCwKKwkgKiBhbmQgbmV3X2NvbHVtbnMgbm93IGNvbnRhaW5zIHRoZSBzdGF0ZSBmb3Igb3VyIGNvbW1pdC4KKwkgKgorCSAqIFdlJ2xsIHJlLXVzZSB0aGUgb2xkIGNvbHVtbnMgYXJyYXkgYXMgc3RvcmFnZSB0byBjb21wdXRlIHRoZSBuZXcKKwkgKiBjb2x1bW5zIGxpc3QgZm9yIHRoZSBjb21taXQgYWZ0ZXIgdGhpcyBvbmUuCisJICovCisJU1dBUChncmFwaC0+Y29sdW1ucywgZ3JhcGgtPm5ld19jb2x1bW5zKTsKKwlncmFwaC0+bnVtX2NvbHVtbnMgPSBncmFwaC0+bnVtX25ld19jb2x1bW5zOworCWdyYXBoLT5udW1fbmV3X2NvbHVtbnMgPSAwOworCisJLyoKKwkgKiBOb3cgdXBkYXRlIG5ld19jb2x1bW5zIGFuZCBtYXBwaW5nIHdpdGggdGhlIGluZm9ybWF0aW9uIGZvciB0aGUKKwkgKiBjb21taXQgYWZ0ZXIgdGhpcyBvbmUuCisJICoKKwkgKiBGaXJzdCwgbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHJvb20uICBBdCBtb3N0LCB0aGVyZSB3aWxsCisJICogYmUgZ3JhcGgtPm51bV9jb2x1bW5zICsgZ3JhcGgtPm51bV9wYXJlbnRzIGNvbHVtbnMgZm9yIHRoZSBuZXh0CisJICogY29tbWl0LgorCSAqLworCW1heF9uZXdfY29sdW1ucyA9IGdyYXBoLT5udW1fY29sdW1ucyArIGdyYXBoLT5udW1fcGFyZW50czsKKwlncmFwaF9lbnN1cmVfY2FwYWNpdHkoZ3JhcGgsIG1heF9uZXdfY29sdW1ucyk7CisKKwkvKgorCSAqIENsZWFyIG91dCBncmFwaC0+bWFwcGluZworCSAqLworCWdyYXBoLT5tYXBwaW5nX3NpemUgPSAyICogbWF4X25ld19jb2x1bW5zOworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bWFwcGluZ19zaXplOyBpKyspCisJCWdyYXBoLT5tYXBwaW5nW2ldID0gLTE7CisKKwlncmFwaC0+d2lkdGggPSAwOworCWdyYXBoLT5wcmV2X2VkZ2VzX2FkZGVkID0gZ3JhcGgtPmVkZ2VzX2FkZGVkOworCWdyYXBoLT5lZGdlc19hZGRlZCA9IDA7CisKKwkvKgorCSAqIFBvcHVsYXRlIGdyYXBoLT5uZXdfY29sdW1ucyBhbmQgZ3JhcGgtPm1hcHBpbmcKKwkgKgorCSAqIFNvbWUgb2YgdGhlIHBhcmVudHMgb2YgdGhpcyBjb21taXQgbWF5IGFscmVhZHkgYmUgaW4KKwkgKiBncmFwaC0+Y29sdW1ucy4gIElmIHNvLCBncmFwaC0+bmV3X2NvbHVtbnMgc2hvdWxkIG9ubHkgY29udGFpbiBhCisJICogc2luZ2xlIGVudHJ5IGZvciBlYWNoIHN1Y2ggY29tbWl0LiAgZ3JhcGgtPm1hcHBpbmcgc2hvdWxkCisJICogY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSBlYWNoIGN1cnJlbnQgYnJhbmNoIGxpbmUgaXMKKwkgKiBzdXBwb3NlZCB0byBlbmQgdXAgYWZ0ZXIgdGhlIGNvbGxhcHNpbmcgaXMgcGVyZm9ybWVkLgorCSAqLworCXNlZW5fdGhpcyA9IDA7CisJaXNfY29tbWl0X2luX2NvbHVtbnMgPSAxOworCWZvciAoaSA9IDA7IGkgPD0gZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKKwkJc3RydWN0IGNvbW1pdCAqY29sX2NvbW1pdDsKKwkJaWYgKGkgPT0gZ3JhcGgtPm51bV9jb2x1bW5zKSB7CisJCQlpZiAoc2Vlbl90aGlzKQorCQkJCWJyZWFrOworCQkJaXNfY29tbWl0X2luX2NvbHVtbnMgPSAwOworCQkJY29sX2NvbW1pdCA9IGdyYXBoLT5jb21taXQ7CisJCX0gZWxzZSB7CisJCQljb2xfY29tbWl0ID0gZ3JhcGgtPmNvbHVtbnNbaV0uY29tbWl0OworCQl9CisKKwkJaWYgKGNvbF9jb21taXQgPT0gZ3JhcGgtPmNvbW1pdCkgeworCQkJc2Vlbl90aGlzID0gMTsKKwkJCWdyYXBoLT5jb21taXRfaW5kZXggPSBpOworCQkJZ3JhcGgtPm1lcmdlX2xheW91dCA9IC0xOworCQkJZm9yIChwYXJlbnQgPSBmaXJzdF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgpOworCQkJICAgICBwYXJlbnQ7CisJCQkgICAgIHBhcmVudCA9IG5leHRfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoLCBwYXJlbnQpKSB7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGlzIGlzIGEgbWVyZ2UsIG9yIHRoZSBzdGFydCBvZiBhIG5ldworCQkJCSAqIGNoaWxkbGVzcyBjb2x1bW4sIGluY3JlbWVudCB0aGUgY3VycmVudAorCQkJCSAqIGNvbG9yLgorCQkJCSAqLworCQkJCWlmIChncmFwaC0+bnVtX3BhcmVudHMgPiAxIHx8CisJCQkJICAgICFpc19jb21taXRfaW5fY29sdW1ucykgeworCQkJCQlncmFwaF9pbmNyZW1lbnRfY29sdW1uX2NvbG9yKGdyYXBoKTsKKwkJCQl9CisJCQkJZ3JhcGhfaW5zZXJ0X2ludG9fbmV3X2NvbHVtbnMoZ3JhcGgsIHBhcmVudC0+aXRlbSwgaSk7CisJCQl9CisJCQkvKgorCQkJICogV2UgYWx3YXlzIG5lZWQgdG8gaW5jcmVtZW50IGdyYXBoLT53aWR0aCBieSBhdAorCQkJICogbGVhc3QgMiwgZXZlbiBpZiBpdCBoYXMgbm8gaW50ZXJlc3RpbmcgcGFyZW50cy4KKwkJCSAqIFRoZSBjdXJyZW50IGNvbW1pdCBhbHdheXMgdGFrZXMgdXAgYXQgbGVhc3QgMgorCQkJICogc3BhY2VzLgorCQkJICovCisJCQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID09IDApCisJCQkJZ3JhcGgtPndpZHRoICs9IDI7CisJCX0gZWxzZSB7CisJCQlncmFwaF9pbnNlcnRfaW50b19uZXdfY29sdW1ucyhncmFwaCwgY29sX2NvbW1pdCwgLTEpOworCQl9CisJfQorCisJLyoKKwkgKiBTaHJpbmsgbWFwcGluZ19zaXplIHRvIGJlIHRoZSBtaW5pbXVtIG5lY2Vzc2FyeQorCSAqLworCXdoaWxlIChncmFwaC0+bWFwcGluZ19zaXplID4gMSAmJgorCSAgICAgICBncmFwaC0+bWFwcGluZ1tncmFwaC0+bWFwcGluZ19zaXplIC0gMV0gPCAwKQorCQlncmFwaC0+bWFwcGluZ19zaXplLS07Cit9CisKK3N0YXRpYyBpbnQgZ3JhcGhfbnVtX2Rhc2hlZF9wYXJlbnRzKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXJldHVybiBncmFwaC0+bnVtX3BhcmVudHMgKyBncmFwaC0+bWVyZ2VfbGF5b3V0IC0gMzsKK30KKworc3RhdGljIGludCBncmFwaF9udW1fZXhwYW5zaW9uX3Jvd3Moc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJLyoKKwkgKiBOb3JtYWxseSwgd2UgbmVlZCB0d28gZXhwYW5zaW9uIHJvd3MgZm9yIGVhY2ggZGFzaGVkIHBhcmVudCBsaW5lIGZyb20KKwkgKiBhbiBvY3RvcHVzIG1lcmdlOgorCSAqCisJICogCQl8ICoKKwkgKiAJCXwgfFwKKwkgKiAJCXwgfCBcCisJICogCQl8IHwgIFwKKwkgKiAJCXwgKi0uIFwKKwkgKiAJCXwgfFwgXCBcCisJICoKKwkgKiBJZiB0aGUgbWVyZ2UgaXMgc2tld2VkIHRvIHRoZSBsZWZ0LCB0aGVuIGl0cyBwYXJlbnRzIG9jY3VweSBvbmUgbGVzcworCSAqIGNvbHVtbiwgYW5kIHdlIGRvbid0IG5lZWQgYXMgbWFueSBleHBhbnNpb24gcm93cyB0byByb3V0ZSBhcm91bmQgaXQ7CisJICogaW4gc29tZSBjYXNlcyB0aGF0IG1lYW5zIHdlIGRvbid0IG5lZWQgYW55IGV4cGFuc2lvbiByb3dzIGF0IGFsbDoKKwkgKgorCSAqIAkJfCAqCisJICogCQl8IHxcCisJICogCQl8ICogXAorCSAqIAkJfC98XCBcCisJICovCisJcmV0dXJuIGdyYXBoX251bV9kYXNoZWRfcGFyZW50cyhncmFwaCkgKiAyOworfQorCitzdGF0aWMgaW50IGdyYXBoX25lZWRzX3ByZV9jb21taXRfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlyZXR1cm4gZ3JhcGgtPm51bV9wYXJlbnRzID49IDMgJiYKKwkgICAgICAgZ3JhcGgtPmNvbW1pdF9pbmRleCA8IChncmFwaC0+bnVtX2NvbHVtbnMgLSAxKSAmJgorCSAgICAgICBncmFwaC0+ZXhwYW5zaW9uX3JvdyA8IGdyYXBoX251bV9leHBhbnNpb25fcm93cyhncmFwaCk7Cit9CisKK3ZvaWQgZ3JhcGhfdXBkYXRlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisKKwkvKgorCSAqIFNldCB0aGUgbmV3IGNvbW1pdAorCSAqLworCWdyYXBoLT5jb21taXQgPSBjb21taXQ7CisKKwkvKgorCSAqIENvdW50IGhvdyBtYW55IGludGVyZXN0aW5nIHBhcmVudHMgdGhpcyBjb21taXQgaGFzCisJICovCisJZ3JhcGgtPm51bV9wYXJlbnRzID0gMDsKKwlmb3IgKHBhcmVudCA9IGZpcnN0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCk7CisJICAgICBwYXJlbnQ7CisJICAgICBwYXJlbnQgPSBuZXh0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCwgcGFyZW50KSkKKwl7CisJCWdyYXBoLT5udW1fcGFyZW50cysrOworCX0KKworCS8qCisJICogU3RvcmUgdGhlIG9sZCBjb21taXRfaW5kZXggaW4gcHJldl9jb21taXRfaW5kZXguCisJICogZ3JhcGhfdXBkYXRlX2NvbHVtbnMoKSB3aWxsIHVwZGF0ZSBncmFwaC0+Y29tbWl0X2luZGV4IGZvciB0aGlzCisJICogY29tbWl0LgorCSAqLworCWdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA9IGdyYXBoLT5jb21taXRfaW5kZXg7CisKKwkvKgorCSAqIENhbGwgZ3JhcGhfdXBkYXRlX2NvbHVtbnMoKSB0byB1cGRhdGUKKwkgKiBjb2x1bW5zLCBuZXdfY29sdW1ucywgYW5kIG1hcHBpbmcuCisJICovCisJZ3JhcGhfdXBkYXRlX2NvbHVtbnMoZ3JhcGgpOworCisJZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPSAwOworCisJLyoKKwkgKiBVcGRhdGUgZ3JhcGgtPnN0YXRlLgorCSAqIE5vdGUgdGhhdCB3ZSBkb24ndCBjYWxsIGdyYXBoX3VwZGF0ZV9zdGF0ZSgpIGhlcmUsIHNpbmNlCisJICogd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgZ3JhcGgtPnByZXZfc3RhdGUuICBObyBsaW5lIGZvcgorCSAqIGdyYXBoLT5zdGF0ZSB3YXMgZXZlciBwcmludGVkLgorCSAqCisJICogSWYgdGhlIHByZXZpb3VzIGNvbW1pdCBkaWRuJ3QgZ2V0IHRvIHRoZSBHUkFQSF9QQURESU5HIHN0YXRlLAorCSAqIGl0IG5ldmVyIGZpbmlzaGVkIGl0cyBvdXRwdXQuICBHb3RvIEdSQVBIX1NLSVAsIHRvIHByaW50IG91dAorCSAqIGEgbGluZSB0byBpbmRpY2F0ZSB0aGF0IHBvcnRpb24gb2YgdGhlIGdyYXBoIGlzIG1pc3NpbmcuCisJICoKKwkgKiBJZiB0aGVyZSBhcmUgMyBvciBtb3JlIHBhcmVudHMsIHdlIG1heSBuZWVkIHRvIHByaW50IGV4dHJhIHJvd3MKKwkgKiBiZWZvcmUgdGhlIGNvbW1pdCwgdG8gZXhwYW5kIHRoZSBicmFuY2ggbGluZXMgYXJvdW5kIGl0IGFuZCBtYWtlCisJICogcm9vbSBmb3IgaXQuICBXZSBuZWVkIHRvIGRvIHRoaXMgb25seSBpZiB0aGVyZSBpcyBhIGJyYW5jaCByb3cKKwkgKiAob3IgbW9yZSkgdG8gdGhlIHJpZ2h0IG9mIHRoaXMgY29tbWl0LgorCSAqCisJICogSWYgdGhlcmUgYXJlIGxlc3MgdGhhbiAzIHBhcmVudHMsIHdlIGNhbiBpbW1lZGlhdGVseSBwcmludCB0aGUKKwkgKiBjb21taXQgbGluZS4KKwkgKi8KKwlpZiAoZ3JhcGgtPnN0YXRlICE9IEdSQVBIX1BBRERJTkcpCisJCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX1NLSVA7CisJZWxzZSBpZiAoZ3JhcGhfbmVlZHNfcHJlX2NvbW1pdF9saW5lKGdyYXBoKSkKKwkJZ3JhcGgtPnN0YXRlID0gR1JBUEhfUFJFX0NPTU1JVDsKKwllbHNlCisJCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX0NPTU1JVDsKK30KKworc3RhdGljIGludCBncmFwaF9pc19tYXBwaW5nX2NvcnJlY3Qoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJaW50IGk7CisKKwkvKgorCSAqIFRoZSBtYXBwaW5nIGlzIHVwIHRvIGRhdGUgaWYgZWFjaCBlbnRyeSBpcyBhdCBpdHMgdGFyZ2V0LAorCSAqIG9yIGlzIDEgZ3JlYXRlciB0aGFuIGl0cyB0YXJnZXQuCisJICogKElmIGl0IGlzIDEgZ3JlYXRlciB0aGFuIHRoZSB0YXJnZXQsICcvJyB3aWxsIGJlIHByaW50ZWQsIHNvIGl0CisJICogd2lsbCBsb29rIGNvcnJlY3Qgb24gdGhlIG5leHQgcm93LikKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm1hcHBpbmdfc2l6ZTsgaSsrKSB7CisJCWludCB0YXJnZXQgPSBncmFwaC0+bWFwcGluZ1tpXTsKKwkJaWYgKHRhcmdldCA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKHRhcmdldCA9PSAoaSAvIDIpKQorCQkJY29udGludWU7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9wYWRfaG9yaXpvbnRhbGx5KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSkKK3sKKwkvKgorCSAqIEFkZCBhZGRpdGlvbmFsIHNwYWNlcyB0byB0aGUgZW5kIG9mIHRoZSBzdHJidWYsIHNvIHRoYXQgYWxsCisJICogbGluZXMgZm9yIGEgcGFydGljdWxhciBjb21taXQgaGF2ZSB0aGUgc2FtZSB3aWR0aC4KKwkgKgorCSAqIFRoaXMgd2F5LCBmaWVsZHMgcHJpbnRlZCB0byB0aGUgcmlnaHQgb2YgdGhlIGdyYXBoIHdpbGwgcmVtYWluCisJICogYWxpZ25lZCBmb3IgdGhlIGVudGlyZSBjb21taXQuCisJICovCisJaWYgKGxpbmUtPndpZHRoIDwgZ3JhcGgtPndpZHRoKQorCQlncmFwaF9saW5lX2FkZGNoYXJzKGxpbmUsICcgJywgZ3JhcGgtPndpZHRoIC0gbGluZS0+d2lkdGgpOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfcGFkZGluZ19saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCSAgICAgIHN0cnVjdCBncmFwaF9saW5lICpsaW5lKQoreworCWludCBpOworCisJLyoKKwkgKiBPdXRwdXQgYSBwYWRkaW5nIHJvdywgdGhhdCBsZWF2ZXMgYWxsIGJyYW5jaCBsaW5lcyB1bmNoYW5nZWQKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9uZXdfY29sdW1uczsgaSsrKSB7CisJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsICZncmFwaC0+bmV3X2NvbHVtbnNbaV0sICd8Jyk7CisJCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgJyAnKTsKKwl9Cit9CisKKworaW50IGdyYXBoX3dpZHRoKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXJldHVybiBncmFwaC0+d2lkdGg7Cit9CisKKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3NraXBfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCit7CisJLyoKKwkgKiBPdXRwdXQgYW4gZWxsaXBzaXMgdG8gaW5kaWNhdGUgdGhhdCBhIHBvcnRpb24KKwkgKiBvZiB0aGUgZ3JhcGggaXMgbWlzc2luZy4KKwkgKi8KKwlncmFwaF9saW5lX2FkZHN0cihsaW5lLCAiLi4uIik7CisKKwlpZiAoZ3JhcGhfbmVlZHNfcHJlX2NvbW1pdF9saW5lKGdyYXBoKSkKKwkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9QUkVfQ09NTUlUKTsKKwllbHNlCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfQ09NTUlUKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3ByZV9jb21taXRfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCQkJIHN0cnVjdCBncmFwaF9saW5lICpsaW5lKQoreworCWludCBpLCBzZWVuX3RoaXM7CisKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gZm9ybWF0cyBhIHJvdyB0aGF0IGluY3JlYXNlcyB0aGUgc3BhY2UgYXJvdW5kIGEgY29tbWl0CisJICogd2l0aCBtdWx0aXBsZSBwYXJlbnRzLCB0byBtYWtlIHJvb20gZm9yIGl0LiAgSXQgc2hvdWxkIG9ubHkgYmUKKwkgKiBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgMyBvciBtb3JlIHBhcmVudHMuCisJICoKKwkgKiBXZSBuZWVkIDIgZXh0cmEgcm93cyBmb3IgZXZlcnkgcGFyZW50IG92ZXIgMi4KKwkgKi8KKwlhc3NlcnQoZ3JhcGgtPm51bV9wYXJlbnRzID49IDMpOworCisJLyoKKwkgKiBncmFwaC0+ZXhwYW5zaW9uX3JvdyB0cmFja3MgdGhlIGN1cnJlbnQgZXhwYW5zaW9uIHJvdyB3ZSBhcmUgb24uCisJICogSXQgc2hvdWxkIGJlIGluIHRoZSByYW5nZSBbMCwgbnVtX2V4cGFuc2lvbl9yb3dzIC0gMV0KKwkgKi8KKwlhc3NlcnQoMCA8PSBncmFwaC0+ZXhwYW5zaW9uX3JvdyAmJgorCSAgICAgICBncmFwaC0+ZXhwYW5zaW9uX3JvdyA8IGdyYXBoX251bV9leHBhbnNpb25fcm93cyhncmFwaCkpOworCisJLyoKKwkgKiBPdXRwdXQgdGhlIHJvdworCSAqLworCXNlZW5fdGhpcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CisJCXN0cnVjdCBjb2x1bW4gKmNvbCA9ICZncmFwaC0+Y29sdW1uc1tpXTsKKwkJaWYgKGNvbC0+Y29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKKwkJCXNlZW5fdGhpcyA9IDE7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICd8Jyk7CisJCQlncmFwaF9saW5lX2FkZGNoYXJzKGxpbmUsICcgJywgZ3JhcGgtPmV4cGFuc2lvbl9yb3cpOworCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPT0gMCkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBwcmUtY29tbWl0IG91dHB1dC4KKwkJCSAqIElmIHRoZSBwcmV2aW91cyBjb21taXQgd2FzIGEgbWVyZ2UgY29tbWl0IGFuZAorCQkJICogZW5kZWQgaW4gdGhlIEdSQVBIX1BPU1RfTUVSR0Ugc3RhdGUsIGFsbCBicmFuY2gKKwkJCSAqIGxpbmVzIGFmdGVyIGdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCB3ZXJlCisJCQkgKiBwcmludGVkIGFzICJcIiBvbiB0aGUgcHJldmlvdXMgbGluZS4gIENvbnRpbnVlCisJCQkgKiB0byBwcmludCB0aGVtIGFzICJcIiBvbiB0aGlzIGxpbmUuICBPdGhlcndpc2UsCisJCQkgKiBwcmludCB0aGUgYnJhbmNoIGxpbmVzIGFzICJ8Ii4KKwkJCSAqLworCQkJaWYgKGdyYXBoLT5wcmV2X3N0YXRlID09IEdSQVBIX1BPU1RfTUVSR0UgJiYKKwkJCSAgICBncmFwaC0+cHJldl9jb21taXRfaW5kZXggPCBpKQorCQkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ1xcJyk7CisJCQllbHNlCisJCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnfCcpOworCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPiAwKSkgeworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnXFwnKTsKKwkJfSBlbHNlIHsKKwkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ3wnKTsKKwkJfQorCQlncmFwaF9saW5lX2FkZGNoKGxpbmUsICcgJyk7CisJfQorCisJLyoKKwkgKiBJbmNyZW1lbnQgZ3JhcGgtPmV4cGFuc2lvbl9yb3csCisJICogYW5kIG1vdmUgdG8gc3RhdGUgR1JBUEhfQ09NTUlUIGlmIG5lY2Vzc2FyeQorCSAqLworCWdyYXBoLT5leHBhbnNpb25fcm93Kys7CisJaWYgKCFncmFwaF9uZWVkc19wcmVfY29tbWl0X2xpbmUoZ3JhcGgpKQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX0NPTU1JVCk7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9jb21taXRfY2hhcihzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCit7CisJLyoKKwkgKiBGb3IgYm91bmRhcnkgY29tbWl0cywgcHJpbnQgJ28nCisJICogKFdlIHNob3VsZCBvbmx5IHNlZSBib3VuZGFyeSBjb21taXRzIHdoZW4gcmV2cy0+Ym91bmRhcnkgaXMgc2V0LikKKwkgKi8KKwlpZiAoZ3JhcGgtPmNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQk9VTkRBUlkpIHsKKwkJYXNzZXJ0KGdyYXBoLT5yZXZzLT5ib3VuZGFyeSk7CisJCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgJ28nKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogZ2V0X3JldmlzaW9uX21hcmsoKSBoYW5kbGVzIGFsbCBvdGhlciBjYXNlcyB3aXRob3V0IGFzc2VydCgpCisJICovCisJZ3JhcGhfbGluZV9hZGRzdHIobGluZSwgZ2V0X3JldmlzaW9uX21hcmsoZ3JhcGgtPnJldnMsIGdyYXBoLT5jb21taXQpKTsKK30KKworLyoKKyAqIERyYXcgdGhlIGhvcml6b250YWwgZGFzaGVzIG9mIGFuIG9jdG9wdXMgbWVyZ2UuCisgKi8KK3N0YXRpYyB2b2lkIGdyYXBoX2RyYXdfb2N0b3B1c19tZXJnZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCit7CisJLyoKKwkgKiBUaGUgcGFyZW50cyBvZiBhIG1lcmdlIGNvbW1pdCBjYW4gYmUgYXJiaXRyYXJpbHkgcmVvcmRlcmVkIGFzIHRoZXkKKwkgKiBhcmUgbWFwcGVkIG9udG8gZGlzcGxheSBjb2x1bW5zLCBmb3IgZXhhbXBsZSB0aGlzIGlzIGEgdmFsaWQgbWVyZ2U6CisJICoKKwkgKgl8IHwgKi0tLS4KKwkgKgl8IHwgfFwgXCBcCisJICoJfCB8IHwvIC8gLworCSAqCXwgfC98IHwgLworCSAqCXwgfF98X3wvCisJICoJfC98IHwgfAorCSAqCTMgMSAwIDIKKwkgKgorCSAqIFRoZSBudW1iZXJzIGRlbm90ZSB3aGljaCBwYXJlbnQgb2YgdGhlIG1lcmdlIGVhY2ggdmlzdWFsIGNvbHVtbgorCSAqIGNvcnJlc3BvbmRzIHRvOyB3ZSBjYW4ndCBhc3N1bWUgdGhhdCB0aGUgcGFyZW50cyB3aWxsIGluaXRpYWxseQorCSAqIGRpc3BsYXkgaW4gdGhlIG9yZGVyIGdpdmVuIGJ5IG5ld19jb2x1bW5zLgorCSAqCisJICogVG8gZmluZCB0aGUgcmlnaHQgY29sb3IgZm9yIGVhY2ggZGFzaCwgd2UgbmVlZCB0byBjb25zdWx0IHRoZQorCSAqIG1hcHBpbmcgYXJyYXksIHN0YXJ0aW5nIGZyb20gdGhlIGNvbHVtbiAyIHBsYWNlcyB0byB0aGUgcmlnaHQgb2YgdGhlCisJICogbWVyZ2UgY29tbWl0LCBhbmQgdXNlIHRoYXQgdG8gZmluZCBvdXQgd2hpY2ggbG9naWNhbCBjb2x1bW4gZWFjaAorCSAqIGVkZ2Ugd2lsbCBjb2xsYXBzZSB0by4KKwkgKgorCSAqIENvbW1pdHMgYXJlIHJlbmRlcmVkIG9uY2UgYWxsIGVkZ2VzIGhhdmUgY29sbGFwc2VkIHRvIHRoZWlyIGNvcnJlY3QKKwkgKiBsb2djaWFsIGNvbHVtbiwgc28gY29tbWl0X2luZGV4IGdpdmVzIHVzIHRoZSByaWdodCB2aXN1YWwgb2Zmc2V0IGZvcgorCSAqIHRoZSBtZXJnZSBjb21taXQuCisJICovCisKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgY29sdW1uICpjb2w7CisKKwlpbnQgZGFzaGVkX3BhcmVudHMgPSBncmFwaF9udW1fZGFzaGVkX3BhcmVudHMoZ3JhcGgpOworCisJZm9yIChpID0gMDsgaSA8IGRhc2hlZF9wYXJlbnRzOyBpKyspIHsKKwkJaiA9IGdyYXBoLT5tYXBwaW5nWyhncmFwaC0+Y29tbWl0X2luZGV4ICsgaSArIDIpICogMl07CisJCWNvbCA9ICZncmFwaC0+bmV3X2NvbHVtbnNbal07CisKKwkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnLScpOworCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsIChpID09IGRhc2hlZF9wYXJlbnRzIC0gMSkgPyAnLicgOiAnLScpOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X2NvbW1pdF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSkKK3sKKwlpbnQgc2Vlbl90aGlzID0gMDsKKwlpbnQgaTsKKworCS8qCisJICogT3V0cHV0IHRoZSByb3cgY29udGFpbmluZyB0aGlzIGNvbW1pdAorCSAqIEl0ZXJhdGUgdXAgdG8gYW5kIGluY2x1ZGluZyBncmFwaC0+bnVtX2NvbHVtbnMsCisJICogc2luY2UgdGhlIGN1cnJlbnQgY29tbWl0IG1heSBub3QgYmUgaW4gYW55IG9mIHRoZSBleGlzdGluZworCSAqIGNvbHVtbnMuICAoVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGN1cnJlbnQgY29tbWl0IGRvZXNuJ3QgaGF2ZSBhbnkKKwkgKiBjaGlsZHJlbiB0aGF0IHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQuKQorCSAqLworCXNlZW5fdGhpcyA9IDA7CisJZm9yIChpID0gMDsgaSA8PSBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgeworCQlzdHJ1Y3QgY29sdW1uICpjb2wgPSAmZ3JhcGgtPmNvbHVtbnNbaV07CisJCXN0cnVjdCBjb21taXQgKmNvbF9jb21taXQ7CisJCWlmIChpID09IGdyYXBoLT5udW1fY29sdW1ucykgeworCQkJaWYgKHNlZW5fdGhpcykKKwkJCQlicmVhazsKKwkJCWNvbF9jb21taXQgPSBncmFwaC0+Y29tbWl0OworCQl9IGVsc2UgeworCQkJY29sX2NvbW1pdCA9IGdyYXBoLT5jb2x1bW5zW2ldLmNvbW1pdDsKKwkJfQorCisJCWlmIChjb2xfY29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKKwkJCXNlZW5fdGhpcyA9IDE7CisJCQlncmFwaF9vdXRwdXRfY29tbWl0X2NoYXIoZ3JhcGgsIGxpbmUpOworCisJCQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMikKKwkJCQlncmFwaF9kcmF3X29jdG9wdXNfbWVyZ2UoZ3JhcGgsIGxpbmUpOworCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPmVkZ2VzX2FkZGVkID4gMSkpIHsKKwkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ1xcJyk7CisJCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+ZWRnZXNfYWRkZWQgPT0gMSkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGVpdGhlciBhIHJpZ2h0LXNrZXdlZCAyLXdheSBtZXJnZQorCQkJICogY29tbWl0LCBvciBhIGxlZnQtc2tld2VkIDMtd2F5IG1lcmdlLgorCQkJICogVGhlcmUgaXMgbm8gR1JBUEhfUFJFX0NPTU1JVCBzdGFnZSBmb3Igc3VjaAorCQkJICogbWVyZ2VzLCBzbyB0aGlzIGlzIHRoZSBmaXJzdCBsaW5lIG9mIG91dHB1dAorCQkJICogZm9yIHRoaXMgY29tbWl0LiAgQ2hlY2sgdG8gc2VlIHdoYXQgdGhlIHByZXZpb3VzCisJCQkgKiBsaW5lIG9mIG91dHB1dCB3YXMuCisJCQkgKgorCQkJICogSWYgaXQgd2FzIEdSQVBIX1BPU1RfTUVSR0UsIHRoZSBicmFuY2ggbGluZQorCQkJICogY29taW5nIGludG8gdGhpcyBjb21taXQgbWF5IGhhdmUgYmVlbiAnXCcsCisJCQkgKiBhbmQgbm90ICd8JyBvciAnLycuICBJZiBzbywgb3V0cHV0IHRoZSBicmFuY2gKKwkJCSAqIGxpbmUgYXMgJ1wnIG9uIHRoaXMgbGluZSwgaW5zdGVhZCBvZiAnfCcuICBUaGlzCisJCQkgKiBtYWtlcyB0aGUgb3V0cHV0IGxvb2sgbmljZXIuCisJCQkgKi8KKwkJCWlmIChncmFwaC0+cHJldl9zdGF0ZSA9PSBHUkFQSF9QT1NUX01FUkdFICYmCisJCQkgICAgZ3JhcGgtPnByZXZfZWRnZXNfYWRkZWQgPiAwICYmCisJCQkgICAgZ3JhcGgtPnByZXZfY29tbWl0X2luZGV4IDwgaSkKKwkJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICdcXCcpOworCQkJZWxzZQorCQkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ3wnKTsKKwkJfSBlbHNlIGlmIChncmFwaC0+cHJldl9zdGF0ZSA9PSBHUkFQSF9DT0xMQVBTSU5HICYmCisJCQkgICBncmFwaC0+b2xkX21hcHBpbmdbMiAqIGkgKyAxXSA9PSBpICYmCisJCQkgICBncmFwaC0+bWFwcGluZ1syICogaV0gPCBpKSB7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICcvJyk7CisJCX0gZWxzZSB7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICd8Jyk7CisJCX0KKwkJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCAnICcpOworCX0KKworCS8qCisJICogVXBkYXRlIGdyYXBoLT5zdGF0ZQorCSAqLworCWlmIChncmFwaC0+bnVtX3BhcmVudHMgPiAxKQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX1BPU1RfTUVSR0UpOworCWVsc2UgaWYgKGdyYXBoX2lzX21hcHBpbmdfY29ycmVjdChncmFwaCkpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfUEFERElORyk7CisJZWxzZQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX0NPTExBUFNJTkcpOworfQorCitzdGF0aWMgY29uc3QgY2hhciBtZXJnZV9jaGFyc1tdID0geycvJywgJ3wnLCAnXFwnfTsKKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3Bvc3RfbWVyZ2VfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCit7CisJaW50IHNlZW5fdGhpcyA9IDA7CisJaW50IGksIGo7CisKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmZpcnN0X3BhcmVudCA9IGZpcnN0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCk7CisJc3RydWN0IGNvbHVtbiAqcGFyZW50X2NvbCA9IE5VTEw7CisKKwkvKgorCSAqIE91dHB1dCB0aGUgcG9zdC1tZXJnZSByb3cKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CisJCXN0cnVjdCBjb2x1bW4gKmNvbCA9ICZncmFwaC0+Y29sdW1uc1tpXTsKKwkJc3RydWN0IGNvbW1pdCAqY29sX2NvbW1pdDsKKwkJaWYgKGkgPT0gZ3JhcGgtPm51bV9jb2x1bW5zKSB7CisJCQlpZiAoc2Vlbl90aGlzKQorCQkJCWJyZWFrOworCQkJY29sX2NvbW1pdCA9IGdyYXBoLT5jb21taXQ7CisJCX0gZWxzZSB7CisJCQljb2xfY29tbWl0ID0gY29sLT5jb21taXQ7CisJCX0KKworCQlpZiAoY29sX2NvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CisJCQkvKgorCQkJICogU2luY2UgdGhlIGN1cnJlbnQgY29tbWl0IGlzIGEgbWVyZ2UgZmluZAorCQkJICogdGhlIGNvbHVtbnMgZm9yIHRoZSBwYXJlbnQgY29tbWl0cyBpbgorCQkJICogbmV3X2NvbHVtbnMgYW5kIHVzZSB0aG9zZSB0byBmb3JtYXQgdGhlCisJCQkgKiBlZGdlcy4KKwkJCSAqLworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gZmlyc3RfcGFyZW50OworCQkJaW50IHBhcl9jb2x1bW47CisJCQlpbnQgaWR4ID0gZ3JhcGgtPm1lcmdlX2xheW91dDsKKwkJCWNoYXIgYzsKKwkJCXNlZW5fdGhpcyA9IDE7CisKKwkJCWZvciAoaiA9IDA7IGogPCBncmFwaC0+bnVtX3BhcmVudHM7IGorKykgeworCQkJCXBhcl9jb2x1bW4gPSBncmFwaF9maW5kX25ld19jb2x1bW5fYnlfY29tbWl0KGdyYXBoLCBwYXJlbnRzLT5pdGVtKTsKKwkJCQlhc3NlcnQocGFyX2NvbHVtbiA+PSAwKTsKKworCQkJCWMgPSBtZXJnZV9jaGFyc1tpZHhdOworCQkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsICZncmFwaC0+bmV3X2NvbHVtbnNbcGFyX2NvbHVtbl0sIGMpOworCQkJCWlmIChpZHggPT0gMikgeworCQkJCQlpZiAoZ3JhcGgtPmVkZ2VzX2FkZGVkID4gMCB8fCBqIDwgZ3JhcGgtPm51bV9wYXJlbnRzIC0gMSkKKwkJCQkJCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgJyAnKTsKKwkJCQl9IGVsc2UgeworCQkJCQlpZHgrKzsKKwkJCQl9CisJCQkJcGFyZW50cyA9IG5leHRfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoLCBwYXJlbnRzKTsKKwkJCX0KKwkJCWlmIChncmFwaC0+ZWRnZXNfYWRkZWQgPT0gMCkKKwkJCQlncmFwaF9saW5lX2FkZGNoKGxpbmUsICcgJyk7CisKKwkJfSBlbHNlIGlmIChzZWVuX3RoaXMpIHsKKwkJCWlmIChncmFwaC0+ZWRnZXNfYWRkZWQgPiAwKQorCQkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ1xcJyk7CisJCQllbHNlCisJCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnfCcpOworCQkJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCAnICcpOworCQl9IGVsc2UgeworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnfCcpOworCQkJaWYgKGdyYXBoLT5tZXJnZV9sYXlvdXQgIT0gMCB8fCBpICE9IGdyYXBoLT5jb21taXRfaW5kZXggLSAxKSB7CisJCQkJaWYgKHBhcmVudF9jb2wpCisJCQkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKAorCQkJCQkJbGluZSwgcGFyZW50X2NvbCwgJ18nKTsKKwkJCQllbHNlCisJCQkJCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgJyAnKTsKKwkJCX0KKwkJfQorCisJCWlmIChjb2xfY29tbWl0ID09IGZpcnN0X3BhcmVudC0+aXRlbSkKKwkJCXBhcmVudF9jb2wgPSBjb2w7CisJfQorCisJLyoKKwkgKiBVcGRhdGUgZ3JhcGgtPnN0YXRlCisJICovCisJaWYgKGdyYXBoX2lzX21hcHBpbmdfY29ycmVjdChncmFwaCkpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfUEFERElORyk7CisJZWxzZQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX0NPTExBUFNJTkcpOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfY29sbGFwc2luZ19saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSkKK3sKKwlpbnQgaTsKKwlzaG9ydCB1c2VkX2hvcml6b250YWwgPSAwOworCWludCBob3Jpem9udGFsX2VkZ2UgPSAtMTsKKwlpbnQgaG9yaXpvbnRhbF9lZGdlX3RhcmdldCA9IC0xOworCisJLyoKKwkgKiBTd2FwIHRoZSBtYXBwaW5nIGFuZCBvbGRfbWFwcGluZyBhcnJheXMKKwkgKi8KKwlTV0FQKGdyYXBoLT5tYXBwaW5nLCBncmFwaC0+b2xkX21hcHBpbmcpOworCisJLyoKKwkgKiBDbGVhciBvdXQgdGhlIG1hcHBpbmcgYXJyYXkKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm1hcHBpbmdfc2l6ZTsgaSsrKQorCQlncmFwaC0+bWFwcGluZ1tpXSA9IC0xOworCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5tYXBwaW5nX3NpemU7IGkrKykgeworCQlpbnQgdGFyZ2V0ID0gZ3JhcGgtPm9sZF9tYXBwaW5nW2ldOworCQlpZiAodGFyZ2V0IDwgMCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFNpbmNlIHVwZGF0ZV9jb2x1bW5zKCkgYWx3YXlzIGluc2VydHMgdGhlIGxlZnRtb3N0CisJCSAqIGNvbHVtbiBmaXJzdCwgZWFjaCBicmFuY2gncyB0YXJnZXQgbG9jYXRpb24gc2hvdWxkCisJCSAqIGFsd2F5cyBiZSBlaXRoZXIgaXRzIGN1cnJlbnQgbG9jYXRpb24gb3IgdG8gdGhlIGxlZnQgb2YKKwkJICogaXRzIGN1cnJlbnQgbG9jYXRpb24uCisJCSAqCisJCSAqIFdlIG5ldmVyIGhhdmUgdG8gbW92ZSBicmFuY2hlcyB0byB0aGUgcmlnaHQuICBUaGlzIG1ha2VzCisJCSAqIHRoZSBncmFwaCBtdWNoIG1vcmUgbGVnaWJsZSwgc2luY2Ugd2hlbmV2ZXIgYnJhbmNoZXMKKwkJICogY3Jvc3MsIG9ubHkgb25lIGlzIG1vdmluZyBkaXJlY3Rpb25zLgorCQkgKi8KKwkJYXNzZXJ0KHRhcmdldCAqIDIgPD0gaSk7CisKKwkJaWYgKHRhcmdldCAqIDIgPT0gaSkgeworCQkJLyoKKwkJCSAqIFRoaXMgY29sdW1uIGlzIGFscmVhZHkgaW4gdGhlCisJCQkgKiBjb3JyZWN0IHBsYWNlCisJCQkgKi8KKwkJCWFzc2VydChncmFwaC0+bWFwcGluZ1tpXSA9PSAtMSk7CisJCQlncmFwaC0+bWFwcGluZ1tpXSA9IHRhcmdldDsKKwkJfSBlbHNlIGlmIChncmFwaC0+bWFwcGluZ1tpIC0gMV0gPCAwKSB7CisJCQkvKgorCQkJICogTm90aGluZyBpcyB0byB0aGUgbGVmdC4KKwkJCSAqIE1vdmUgdG8gdGhlIGxlZnQgYnkgb25lCisJCQkgKi8KKwkJCWdyYXBoLT5tYXBwaW5nW2kgLSAxXSA9IHRhcmdldDsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBpc24ndCBhbHJlYWR5IGFuIGVkZ2UgbW92aW5nIGhvcml6b250YWxseQorCQkJICogc2VsZWN0IHRoaXMgb25lLgorCQkJICovCisJCQlpZiAoaG9yaXpvbnRhbF9lZGdlID09IC0xKSB7CisJCQkJaW50IGo7CisJCQkJaG9yaXpvbnRhbF9lZGdlID0gaTsKKwkJCQlob3Jpem9udGFsX2VkZ2VfdGFyZ2V0ID0gdGFyZ2V0OworCQkJCS8qCisJCQkJICogVGhlIHZhcmlhYmxlIHRhcmdldCBpcyB0aGUgaW5kZXggb2YgdGhlIGdyYXBoCisJCQkJICogY29sdW1uLCBhbmQgdGhlcmVmb3JlIHRhcmdldCoyKzMgaXMgdGhlCisJCQkJICogYWN0dWFsIHNjcmVlbiBjb2x1bW4gb2YgdGhlIGZpcnN0IGhvcml6b250YWwKKwkJCQkgKiBsaW5lLgorCQkJCSAqLworCQkJCWZvciAoaiA9ICh0YXJnZXQgKiAyKSszOyBqIDwgKGkgLSAyKTsgaiArPSAyKQorCQkJCQlncmFwaC0+bWFwcGluZ1tqXSA9IHRhcmdldDsKKwkJCX0KKwkJfSBlbHNlIGlmIChncmFwaC0+bWFwcGluZ1tpIC0gMV0gPT0gdGFyZ2V0KSB7CisJCQkvKgorCQkJICogVGhlcmUgaXMgYSBicmFuY2ggbGluZSB0byBvdXIgbGVmdAorCQkJICogYWxyZWFkeSwgYW5kIGl0IGlzIG91ciB0YXJnZXQuICBXZQorCQkJICogY29tYmluZSB3aXRoIHRoaXMgbGluZSwgc2luY2Ugd2Ugc2hhcmUKKwkJCSAqIHRoZSBzYW1lIHBhcmVudCBjb21taXQuCisJCQkgKgorCQkJICogV2UgZG9uJ3QgaGF2ZSB0byBhZGQgYW55dGhpbmcgdG8gdGhlCisJCQkgKiBvdXRwdXQgb3IgbWFwcGluZywgc2luY2UgdGhlCisJCQkgKiBleGlzdGluZyBicmFuY2ggbGluZSBoYXMgYWxyZWFkeSB0YWtlbgorCQkJICogY2FyZSBvZiBpdC4KKwkJCSAqLworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFRoZXJlIGlzIGEgYnJhbmNoIGxpbmUgdG8gb3VyIGxlZnQsCisJCQkgKiBidXQgaXQgaXNuJ3Qgb3VyIHRhcmdldC4gIFdlIG5lZWQgdG8KKwkJCSAqIGNyb3NzIG92ZXIgaXQuCisJCQkgKgorCQkJICogVGhlIHNwYWNlIGp1c3QgdG8gdGhlIGxlZnQgb2YgdGhpcworCQkJICogYnJhbmNoIHNob3VsZCBhbHdheXMgYmUgZW1wdHkuCisJCQkgKi8KKwkJCWFzc2VydChncmFwaC0+bWFwcGluZ1tpIC0gMV0gPiB0YXJnZXQpOworCQkJYXNzZXJ0KGdyYXBoLT5tYXBwaW5nW2kgLSAyXSA8IDApOworCQkJZ3JhcGgtPm1hcHBpbmdbaSAtIDJdID0gdGFyZ2V0OworCQkJLyoKKwkJCSAqIE1hcmsgdGhpcyBicmFuY2ggYXMgdGhlIGhvcml6b250YWwgZWRnZSB0bworCQkJICogcHJldmVudCBhbnkgb3RoZXIgZWRnZXMgZnJvbSBtb3ZpbmcKKwkJCSAqIGhvcml6b250YWxseS4KKwkJCSAqLworCQkJaWYgKGhvcml6b250YWxfZWRnZSA9PSAtMSkgeworCQkJCWludCBqOworCQkJCWhvcml6b250YWxfZWRnZV90YXJnZXQgPSB0YXJnZXQ7CisJCQkJaG9yaXpvbnRhbF9lZGdlID0gaSAtIDE7CisKKwkJCQlmb3IgKGogPSAodGFyZ2V0ICogMikgKyAzOyBqIDwgKGkgLSAyKTsgaiArPSAyKQorCQkJCQlncmFwaC0+bWFwcGluZ1tqXSA9IHRhcmdldDsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogQ29weSB0aGUgY3VycmVudCBtYXBwaW5nIGFycmF5IGludG8gb2xkX21hcHBpbmcKKwkgKi8KKwlDT1BZX0FSUkFZKGdyYXBoLT5vbGRfbWFwcGluZywgZ3JhcGgtPm1hcHBpbmcsIGdyYXBoLT5tYXBwaW5nX3NpemUpOworCisJLyoKKwkgKiBUaGUgbmV3IG1hcHBpbmcgbWF5IGJlIDEgc21hbGxlciB0aGFuIHRoZSBvbGQgbWFwcGluZworCSAqLworCWlmIChncmFwaC0+bWFwcGluZ1tncmFwaC0+bWFwcGluZ19zaXplIC0gMV0gPCAwKQorCQlncmFwaC0+bWFwcGluZ19zaXplLS07CisKKwkvKgorCSAqIE91dHB1dCBvdXQgYSBsaW5lIGJhc2VkIG9uIHRoZSBuZXcgbWFwcGluZyBpbmZvCisJICovCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5tYXBwaW5nX3NpemU7IGkrKykgeworCQlpbnQgdGFyZ2V0ID0gZ3JhcGgtPm1hcHBpbmdbaV07CisJCWlmICh0YXJnZXQgPCAwKQorCQkJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCAnICcpOworCQllbHNlIGlmICh0YXJnZXQgKiAyID09IGkpCisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCAmZ3JhcGgtPm5ld19jb2x1bW5zW3RhcmdldF0sICd8Jyk7CisJCWVsc2UgaWYgKHRhcmdldCA9PSBob3Jpem9udGFsX2VkZ2VfdGFyZ2V0ICYmCisJCQkgaSAhPSBob3Jpem9udGFsX2VkZ2UgLSAxKSB7CisJCQkJLyoKKwkJCQkgKiBTZXQgdGhlIG1hcHBpbmdzIGZvciBhbGwgYnV0IHRoZQorCQkJCSAqIGZpcnN0IHNlZ21lbnQgdG8gLTEgc28gdGhhdCB0aGV5CisJCQkJICogd29uJ3QgY29udGludWUgaW50byB0aGUgbmV4dCBsaW5lLgorCQkJCSAqLworCQkJCWlmIChpICE9ICh0YXJnZXQgKiAyKSszKQorCQkJCQlncmFwaC0+bWFwcGluZ1tpXSA9IC0xOworCQkJCXVzZWRfaG9yaXpvbnRhbCA9IDE7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCAmZ3JhcGgtPm5ld19jb2x1bW5zW3RhcmdldF0sICdfJyk7CisJCX0gZWxzZSB7CisJCQlpZiAodXNlZF9ob3Jpem9udGFsICYmIGkgPCBob3Jpem9udGFsX2VkZ2UpCisJCQkJZ3JhcGgtPm1hcHBpbmdbaV0gPSAtMTsKKwkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsICZncmFwaC0+bmV3X2NvbHVtbnNbdGFyZ2V0XSwgJy8nKTsKKworCQl9CisJfQorCisJLyoKKwkgKiBJZiBncmFwaC0+bWFwcGluZyBpbmRpY2F0ZXMgdGhhdCBhbGwgb2YgdGhlIGJyYW5jaCBsaW5lcworCSAqIGFyZSBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9ucywgd2UgYXJlIGRvbmUuCisJICogT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGNvbGxhcHNlIHNvbWUgYnJhbmNoIGxpbmVzIHRvZ2V0aGVyLgorCSAqLworCWlmIChncmFwaF9pc19tYXBwaW5nX2NvcnJlY3QoZ3JhcGgpKQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX1BBRERJTkcpOworfQorCitpbnQgZ3JhcGhfbmV4dF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgc2hvd25fY29tbWl0X2xpbmUgPSAwOworCXN0cnVjdCBncmFwaF9saW5lIGxpbmUgPSB7IC5idWYgPSBzYiwgLndpZHRoID0gMCB9OworCisJLyoKKwkgKiBXZSBjb3VsZCBjb25jZWl2YWJsZSBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgY29tbWl0CisJICogaWYgb3VyIGNhbGxlciBoYXMgYSBidWcsIGFuZCBpbnZva2VzIGdyYXBoX25leHRfbGluZSgpCisJICogaW1tZWRpYXRlbHkgYWZ0ZXIgZ3JhcGhfaW5pdCgpLCB3aXRob3V0IGZpcnN0IGNhbGxpbmcKKwkgKiBncmFwaF91cGRhdGUoKS4gIFJldHVybiB3aXRob3V0IG91dHB1dHRpbmcgYW55dGhpbmcgaW4gdGhpcworCSAqIGNhc2UuCisJICovCisJaWYgKCFncmFwaC0+Y29tbWl0KQorCQlyZXR1cm4gLTE7CisKKwlzd2l0Y2ggKGdyYXBoLT5zdGF0ZSkgeworCWNhc2UgR1JBUEhfUEFERElORzoKKwkJZ3JhcGhfb3V0cHV0X3BhZGRpbmdfbGluZShncmFwaCwgJmxpbmUpOworCQlicmVhazsKKwljYXNlIEdSQVBIX1NLSVA6CisJCWdyYXBoX291dHB1dF9za2lwX2xpbmUoZ3JhcGgsICZsaW5lKTsKKwkJYnJlYWs7CisJY2FzZSBHUkFQSF9QUkVfQ09NTUlUOgorCQlncmFwaF9vdXRwdXRfcHJlX2NvbW1pdF9saW5lKGdyYXBoLCAmbGluZSk7CisJCWJyZWFrOworCWNhc2UgR1JBUEhfQ09NTUlUOgorCQlncmFwaF9vdXRwdXRfY29tbWl0X2xpbmUoZ3JhcGgsICZsaW5lKTsKKwkJc2hvd25fY29tbWl0X2xpbmUgPSAxOworCQlicmVhazsKKwljYXNlIEdSQVBIX1BPU1RfTUVSR0U6CisJCWdyYXBoX291dHB1dF9wb3N0X21lcmdlX2xpbmUoZ3JhcGgsICZsaW5lKTsKKwkJYnJlYWs7CisJY2FzZSBHUkFQSF9DT0xMQVBTSU5HOgorCQlncmFwaF9vdXRwdXRfY29sbGFwc2luZ19saW5lKGdyYXBoLCAmbGluZSk7CisJCWJyZWFrOworCX0KKworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsICZsaW5lKTsKKwlyZXR1cm4gc2hvd25fY29tbWl0X2xpbmU7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX3BhZGRpbmdfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaW50IGk7CisJc3RydWN0IGdyYXBoX2xpbmUgbGluZSA9IHsgLmJ1ZiA9IHNiLCAud2lkdGggPSAwIH07CisKKwlpZiAoZ3JhcGgtPnN0YXRlICE9IEdSQVBIX0NPTU1JVCkgeworCQlncmFwaF9uZXh0X2xpbmUoZ3JhcGgsIHNiKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogT3V0cHV0IHRoZSByb3cgY29udGFpbmluZyB0aGlzIGNvbW1pdAorCSAqIEl0ZXJhdGUgdXAgdG8gYW5kIGluY2x1ZGluZyBncmFwaC0+bnVtX2NvbHVtbnMsCisJICogc2luY2UgdGhlIGN1cnJlbnQgY29tbWl0IG1heSBub3QgYmUgaW4gYW55IG9mIHRoZSBleGlzdGluZworCSAqIGNvbHVtbnMuICAoVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGN1cnJlbnQgY29tbWl0IGRvZXNuJ3QgaGF2ZSBhbnkKKwkgKiBjaGlsZHJlbiB0aGF0IHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQuKQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgeworCQlzdHJ1Y3QgY29sdW1uICpjb2wgPSAmZ3JhcGgtPmNvbHVtbnNbaV07CisKKwkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4oJmxpbmUsIGNvbCwgJ3wnKTsKKworCQlpZiAoY29sLT5jb21taXQgPT0gZ3JhcGgtPmNvbW1pdCAmJiBncmFwaC0+bnVtX3BhcmVudHMgPiAyKSB7CisJCQlpbnQgbGVuID0gKGdyYXBoLT5udW1fcGFyZW50cyAtIDIpICogMjsKKwkJCWdyYXBoX2xpbmVfYWRkY2hhcnMoJmxpbmUsICcgJywgbGVuKTsKKwkJfSBlbHNlIHsKKwkJCWdyYXBoX2xpbmVfYWRkY2goJmxpbmUsICcgJyk7CisJCX0KKwl9CisKKwlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCAmbGluZSk7CisKKwkvKgorCSAqIFVwZGF0ZSBncmFwaC0+cHJldl9zdGF0ZSBzaW5jZSB3ZSBoYXZlIG91dHB1dCBhIHBhZGRpbmcgbGluZQorCSAqLworCWdyYXBoLT5wcmV2X3N0YXRlID0gR1JBUEhfUEFERElORzsKK30KKworaW50IGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChzdHJ1Y3QgZ2l0X2dyYXBoIGNvbnN0ICpncmFwaCkKK3sKKwlyZXR1cm4gKGdyYXBoLT5zdGF0ZSA9PSBHUkFQSF9QQURESU5HKTsKK30KKwordm9pZCBncmFwaF9zaG93X2NvbW1pdChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG1zZ2J1ZiA9IFNUUkJVRl9JTklUOworCWludCBzaG93bl9jb21taXRfbGluZSA9IDA7CisKKwlncmFwaF9zaG93X2xpbmVfcHJlZml4KGRlZmF1bHRfZGlmZm9wdCk7CisKKwlpZiAoIWdyYXBoKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFdoZW4gc2hvd2luZyBhIGRpZmYgb2YgYSBtZXJnZSBhZ2FpbnN0IGVhY2ggb2YgaXRzIHBhcmVudHMsIHdlCisJICogYXJlIGNhbGxlZCBvbmNlIGZvciBlYWNoIHBhcmVudCB3aXRob3V0IGdyYXBoX3VwZGF0ZSBoYXZpbmcgYmVlbgorCSAqIGNhbGxlZC4gIEluIHRoaXMgY2FzZSwgc2ltcGx5IG91dHB1dCBhIHNpbmdsZSBwYWRkaW5nIGxpbmUuCisJICovCisJaWYgKGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChncmFwaCkpIHsKKwkJZ3JhcGhfc2hvd19wYWRkaW5nKGdyYXBoKTsKKwkJc2hvd25fY29tbWl0X2xpbmUgPSAxOworCX0KKworCXdoaWxlICghc2hvd25fY29tbWl0X2xpbmUgJiYgIWdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChncmFwaCkpIHsKKwkJc2hvd25fY29tbWl0X2xpbmUgPSBncmFwaF9uZXh0X2xpbmUoZ3JhcGgsICZtc2didWYpOworCQlmd3JpdGUobXNnYnVmLmJ1Ziwgc2l6ZW9mKGNoYXIpLCBtc2didWYubGVuLAorCQkJZ3JhcGgtPnJldnMtPmRpZmZvcHQuZmlsZSk7CisJCWlmICghc2hvd25fY29tbWl0X2xpbmUpIHsKKwkJCXB1dGMoJ1xuJywgZ3JhcGgtPnJldnMtPmRpZmZvcHQuZmlsZSk7CisJCQlncmFwaF9zaG93X2xpbmVfcHJlZml4KCZncmFwaC0+cmV2cy0+ZGlmZm9wdCk7CisJCX0KKwkJc3RyYnVmX3NldGxlbigmbXNnYnVmLCAwKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmbXNnYnVmKTsKK30KKwordm9pZCBncmFwaF9zaG93X29uZWxpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJc3RydWN0IHN0cmJ1ZiBtc2didWYgPSBTVFJCVUZfSU5JVDsKKworCWdyYXBoX3Nob3dfbGluZV9wcmVmaXgoZGVmYXVsdF9kaWZmb3B0KTsKKworCWlmICghZ3JhcGgpCisJCXJldHVybjsKKworCWdyYXBoX25leHRfbGluZShncmFwaCwgJm1zZ2J1Zik7CisJZndyaXRlKG1zZ2J1Zi5idWYsIHNpemVvZihjaGFyKSwgbXNnYnVmLmxlbiwgZ3JhcGgtPnJldnMtPmRpZmZvcHQuZmlsZSk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7Cit9CisKK3ZvaWQgZ3JhcGhfc2hvd19wYWRkaW5nKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXN0cnVjdCBzdHJidWYgbXNnYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlncmFwaF9zaG93X2xpbmVfcHJlZml4KGRlZmF1bHRfZGlmZm9wdCk7CisKKwlpZiAoIWdyYXBoKQorCQlyZXR1cm47CisKKwlncmFwaF9wYWRkaW5nX2xpbmUoZ3JhcGgsICZtc2didWYpOworCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sIGdyYXBoLT5yZXZzLT5kaWZmb3B0LmZpbGUpOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2didWYpOworfQorCitpbnQgZ3JhcGhfc2hvd19yZW1haW5kZXIoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJc3RydWN0IHN0cmJ1ZiBtc2didWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc2hvd24gPSAwOworCisJZ3JhcGhfc2hvd19saW5lX3ByZWZpeChkZWZhdWx0X2RpZmZvcHQpOworCisJaWYgKCFncmFwaCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKGdyYXBoKSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKDs7KSB7CisJCWdyYXBoX25leHRfbGluZShncmFwaCwgJm1zZ2J1Zik7CisJCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sCisJCQlncmFwaC0+cmV2cy0+ZGlmZm9wdC5maWxlKTsKKwkJc3RyYnVmX3NldGxlbigmbXNnYnVmLCAwKTsKKwkJc2hvd24gPSAxOworCisJCWlmICghZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKGdyYXBoKSkgeworCQkJcHV0YygnXG4nLCBncmFwaC0+cmV2cy0+ZGlmZm9wdC5maWxlKTsKKwkJCWdyYXBoX3Nob3dfbGluZV9wcmVmaXgoJmdyYXBoLT5yZXZzLT5kaWZmb3B0KTsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZtc2didWYpOworCisJcmV0dXJuIHNob3duOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9zaG93X3N0cmJ1ZihzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCSAgICAgIEZJTEUgKmZpbGUsCisJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmIGNvbnN0ICpzYikKK3sKKwljaGFyICpwOworCisJLyoKKwkgKiBQcmludCB0aGUgc3RyYnVmIGxpbmUgYnkgbGluZSwKKwkgKiBhbmQgZGlzcGxheSB0aGUgZ3JhcGggaW5mbyBiZWZvcmUgZWFjaCBsaW5lIGJ1dCB0aGUgZmlyc3QuCisJICovCisJcCA9IHNiLT5idWY7CisJd2hpbGUgKHApIHsKKwkJc2l6ZV90IGxlbjsKKwkJY2hhciAqbmV4dF9wID0gc3RyY2hyKHAsICdcbicpOworCQlpZiAobmV4dF9wKSB7CisJCQluZXh0X3ArKzsKKwkJCWxlbiA9IG5leHRfcCAtIHA7CisJCX0gZWxzZSB7CisJCQlsZW4gPSAoc2ItPmJ1ZiArIHNiLT5sZW4pIC0gcDsKKwkJfQorCQlmd3JpdGUocCwgc2l6ZW9mKGNoYXIpLCBsZW4sIGZpbGUpOworCQlpZiAobmV4dF9wICYmICpuZXh0X3AgIT0gJ1wwJykKKwkJCWdyYXBoX3Nob3dfb25lbGluZShncmFwaCk7CisJCXAgPSBuZXh0X3A7CisJfQorfQorCit2b2lkIGdyYXBoX3Nob3dfY29tbWl0X21zZyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCSAgIEZJTEUgKmZpbGUsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmIGNvbnN0ICpzYikKK3sKKwlpbnQgbmV3bGluZV90ZXJtaW5hdGVkOworCisJLyoKKwkgKiBTaG93IHRoZSBjb21taXQgbWVzc2FnZQorCSAqLworCWdyYXBoX3Nob3dfc3RyYnVmKGdyYXBoLCBmaWxlLCBzYik7CisKKwlpZiAoIWdyYXBoKQorCQlyZXR1cm47CisKKwluZXdsaW5lX3Rlcm1pbmF0ZWQgPSAoc2ItPmxlbiAmJiBzYi0+YnVmW3NiLT5sZW4gLSAxXSA9PSAnXG4nKTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgbW9yZSBvdXRwdXQgbmVlZGVkIGZvciB0aGlzIGNvbW1pdCwgc2hvdyBpdCBub3cKKwkgKi8KKwlpZiAoIWdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChncmFwaCkpIHsKKwkJLyoKKwkJICogSWYgc2IgZG9lc24ndCBoYXZlIGEgdGVybWluYXRpbmcgbmV3bGluZSwgcHJpbnQgb25lIG5vdywKKwkJICogc28gd2UgY2FuIHN0YXJ0IHRoZSByZW1haW5kZXIgb2YgdGhlIGdyYXBoIG91dHB1dCBvbiBhCisJCSAqIG5ldyBsaW5lLgorCQkgKi8KKwkJaWYgKCFuZXdsaW5lX3Rlcm1pbmF0ZWQpCisJCQlwdXRjKCdcbicsIGZpbGUpOworCisJCWdyYXBoX3Nob3dfcmVtYWluZGVyKGdyYXBoKTsKKworCQkvKgorCQkgKiBJZiBzYiBlbmRzIHdpdGggYSBuZXdsaW5lLCBvdXIgb3V0cHV0IHNob3VsZCB0b28uCisJCSAqLworCQlpZiAobmV3bGluZV90ZXJtaW5hdGVkKQorCQkJcHV0YygnXG4nLCBmaWxlKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9ncmFwaC5oIGIvZ3JhcGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzEzZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JhcGguaApAQCAtMCwwICsxLDI2MCBAQAorI2lmbmRlZiBHUkFQSF9ICisjZGVmaW5lIEdSQVBIX0gKKyNpbmNsdWRlICJkaWZmLmgiCisKKy8qKgorICogVGhlIGdyYXBoIEFQSSBpcyB1c2VkIHRvIGRyYXcgYSB0ZXh0LWJhc2VkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21taXQKKyAqIGhpc3RvcnkuIFRoZSBBUEkgZ2VuZXJhdGVzIHRoZSBncmFwaCBpbiBhIGxpbmUtYnktbGluZSBmYXNoaW9uLgorICoKKyAqIENhbGxpbmcgc2VxdWVuY2UKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAtIENyZWF0ZSBhIGBzdHJ1Y3QgZ2l0X2dyYXBoYCBieSBjYWxsaW5nIGBncmFwaF9pbml0KClgLiAgV2hlbiB1c2luZyB0aGUKKyAqICAgcmV2aXNpb24gd2Fsa2luZyBBUEksIHRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGJ5IGBzZXR1cF9yZXZpc2lvbnMoKWAgaWYKKyAqICAgdGhlICctLWdyYXBoJyBvcHRpb24gaXMgc3VwcGxpZWQuCisgKgorICogLSBVc2UgdGhlIHJldmlzaW9uIHdhbGtpbmcgQVBJIHRvIHdhbGsgdGhyb3VnaCBhIGdyb3VwIG9mIGNvbnRpZ3VvdXMgY29tbWl0cy4KKyAqICAgVGhlIGBnZXRfcmV2aXNpb24oKWAgZnVuY3Rpb24gYXV0b21hdGljYWxseSBjYWxscyBgZ3JhcGhfdXBkYXRlKClgIGVhY2ggdGltZQorICogICBpdCBpcyBpbnZva2VkLgorICoKKyAqIC0gRm9yIGVhY2ggY29tbWl0LCBjYWxsIGBncmFwaF9uZXh0X2xpbmUoKWAgcmVwZWF0ZWRseSwgdW50aWwKKyAqICAgYGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpYCByZXR1cm5zIG5vbi16ZXJvLiAgRWFjaCBjYWxsIHRvCisgKiAgIGBncmFwaF9uZXh0X2xpbmUoKWAgd2lsbCBvdXRwdXQgYSBzaW5nbGUgbGluZSBvZiB0aGUgZ3JhcGguICBUaGUgcmVzdWx0aW5nCisgKiAgIGxpbmVzIHdpbGwgbm90IGNvbnRhaW4gYW55IG5ld2xpbmVzLiAgYGdyYXBoX25leHRfbGluZSgpYCByZXR1cm5zIDEgaWYgdGhlCisgKiAgIHJlc3VsdGluZyBsaW5lIGNvbnRhaW5zIHRoZSBjdXJyZW50IGNvbW1pdCwgb3IgMCBpZiB0aGlzIGlzIG1lcmVseSBhIGxpbmUKKyAqICAgbmVlZGVkIHRvIGFkanVzdCB0aGUgZ3JhcGggYmVmb3JlIG9yIGFmdGVyIHRoZSBjdXJyZW50IGNvbW1pdC4gIFRoaXMgcmV0dXJuCisgKiAgIHZhbHVlIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGVyZSB0byBwcmludCB0aGUgY29tbWl0IHN1bW1hcnkgaW5mb3JtYXRpb24KKyAqICAgYWxvbmdzaWRlIHRoZSBncmFwaCBvdXRwdXQuCisgKgorICogTGltaXRhdGlvbnMKKyAqIC0tLS0tLS0tLS0tCisgKiAtIENoZWNrIHRoZSBncmFwaF91cGRhdGUoKSBmdW5jdGlvbiBmb3IgaXRzIGxpbWl0YXRpb25zLgorICoKKyAqIC0gVGhlIGdyYXBoIEFQSSBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCByZXZlcnNlIGNvbW1pdCBvcmRlcmluZy4gIEluCisgKiAgIG9yZGVyIHRvIGltcGxlbWVudCByZXZlcnNlIG9yZGVyaW5nLCB0aGUgZ3JhcGhpbmcgQVBJIG5lZWRzIGFuCisgKiAgIChlZmZpY2llbnQpIG1lY2hhbmlzbSB0byBmaW5kIHRoZSBjaGlsZHJlbiBvZiBhIGNvbW1pdC4KKyAqCisgKiBTYW1wbGUgdXNhZ2UKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLQorICogc3RydWN0IGNvbW1pdCAqY29tbWl0OworICogc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGggPSBncmFwaF9pbml0KG9wdHMpOworICoKKyAqIHdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKG9wdHMpKSAhPSBOVUxMKSB7CisgKiAJd2hpbGUgKCFncmFwaF9pc19jb21taXRfZmluaXNoZWQoZ3JhcGgpKQorICogCXsKKyAqIAkJc3RydWN0IHN0cmJ1ZiBzYjsKKyAqIAkJaW50IGlzX2NvbW1pdF9saW5lOworICoKKyAqIAkJc3RyYnVmX2luaXQoJnNiLCAwKTsKKyAqIAkJaXNfY29tbWl0X2xpbmUgPSBncmFwaF9uZXh0X2xpbmUoZ3JhcGgsICZzYik7CisgKiAJCWZwdXRzKHNiLmJ1Ziwgc3Rkb3V0KTsKKyAqCisgKiAJCWlmIChpc19jb21taXRfbGluZSkKKyAqIAkJCWxvZ190cmVlX2NvbW1pdChvcHRzLCBjb21taXQpOworICogCQllbHNlCisgKiAJCQlwdXRjaGFyKG9wdHMtPmRpZmZvcHQubGluZV90ZXJtaW5hdGlvbik7CisgKiAJfQorICogfQorICogLS0tLS0tLS0tLS0tCisgKiBTYW1wbGUgb3V0cHV0CisgKiAtLS0tLS0tLS0tLS0tCisgKgorICogVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHRoZSBvdXRwdXQgZnJvbSB0aGUgZ3JhcGggQVBJLiAgVGhpcyBvdXRwdXQgZG9lcworICogbm90IGluY2x1ZGUgYW55IGNvbW1pdCBzdW1tYXJ5IGluZm9ybWF0aW9uLS1jYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IKKyAqIG91dHB1dHRpbmcgdGhhdCBpbmZvcm1hdGlvbiwgaWYgZGVzaXJlZC4KKyAqIC0tLS0tLS0tLS0tLQorICogKgorICogKgorICogKgorICogfFwKKyAqICogfAorICogfCB8ICoKKyAqIHwgXCBcCisgKiB8ICBcIFwKKyAqICotLiBcIFwKKyAqIHxcIFwgXCBcCisgKiB8IHwgKiB8IHwKKyAqIHwgfCB8IHwgfCAqCisgKiB8IHwgfCB8IHwgKgorICogfCB8IHwgfCB8ICoKKyAqIHwgfCB8IHwgfCB8XAorICogfCB8IHwgfCB8IHwgKgorICogfCAqIHwgfCB8IHwgfAorICogfCB8IHwgfCB8ICogIFwKKyAqIHwgfCB8IHwgfCB8XCAgfAorICogfCB8IHwgfCAqIHwgfCB8CisgKiB8IHwgfCB8ICogfCB8IHwKKyAqICogfCB8IHwgfCB8IHwgfAorICogfCB8LyAvIC8gLyAvIC8KKyAqIHwvfCAvIC8gLyAvIC8KKyAqICogfCB8IHwgfCB8IHwKKyAqIHwvIC8gLyAvIC8gLworICogKiB8IHwgfCB8IHwKKyAqIHwgfCB8IHwgfCAqCisgKiB8IHwgfCB8IHwvCisgKiB8IHwgfCB8ICoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqLworCisvKiBBIGdyYXBoIGlzIGEgcG9pbnRlciB0byB0aGlzIG9wYXF1ZSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBnaXRfZ3JhcGg7CisKKy8qCisgKiBDYWxsZWQgdG8gc2V0dXAgZ2xvYmFsIGRpc3BsYXkgb2YgbGluZV9wcmVmaXggZGlmZiBvcHRpb24uCisgKgorICogUGFzc2VkIGEgZGlmZl9vcHRpb25zIHN0cnVjdHVyZSB3aGljaCBpbmRpY2F0ZXMgdGhlIGxpbmVfcHJlZml4IGFuZCB0aGUKKyAqIGZpbGUgdG8gb3V0cHV0IHRoZSBwcmVmaXggdG8uIFRoaXMgaXMgc29ydCBvZiBhIGhhY2sgdXNlZCBzbyB0aGF0IHRoZQorICogbGluZV9wcmVmaXggd2lsbCBiZSBob25vcmVkIGJ5IGFsbCBmbG93cyB3aGljaCBhbHNvIGhvbm9yICItLWdyYXBoIgorICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgZ3JhcGggaGFzIGFjdHVhbGx5IGJlZW4gc2V0dXAuIFRoZSBub3JtYWwgZ3JhcGgKKyAqIGZsb3cgd2lsbCBob25vciB0aGUgZXhhY3QgZGlmZl9vcHRpb25zIHBhc3NlZCwgYnV0IGEgTlVMTCBncmFwaCB3aWxsIGNhdXNlCisgKiBkaXNwbGF5IG9mIGEgbGluZV9wcmVmaXggdG8gc3Rkb3V0LgorICovCit2b2lkIGdyYXBoX3NldHVwX2xpbmVfcHJlZml4KHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQpOworCisvKgorICogU2V0IHVwIGEgY3VzdG9tIHNjaGVtZSBmb3IgY29sdW1uIGNvbG9ycy4KKyAqCisgKiBUaGUgZGVmYXVsdCBjb2x1bW4gY29sb3Igc2NoZW1lIGluc2VydHMgQU5TSSBjb2xvciBlc2NhcGVzIHRvIGNvbG9yaXplCisgKiB0aGUgZ3JhcGguIFRoZSB2YXJpb3VzIGNvbG9yIGVzY2FwZXMgYXJlIHN0b3JlZCBpbiBhbiBhcnJheSBvZiBzdHJpbmdzCisgKiB3aGVyZSBlYWNoIGVudHJ5IGNvcnJlc3BvbmRzIHRvIGEgY29sb3IsIGV4Y2VwdCBmb3IgdGhlIGxhc3QgZW50cnksCisgKiB3aGljaCBkZW5vdGVzIHRoZSBlc2NhcGUgZm9yIHJlc2V0dGluZyB0aGUgY29sb3IgYmFjayB0byB0aGUgZGVmYXVsdC4KKyAqIFdoZW4gZ2VuZXJhdGluZyB0aGUgZ3JhcGgsIHN0cmluZ3MgZnJvbSB0aGlzIGFycmF5IGFyZSBpbnNlcnRlZCBiZWZvcmUKKyAqIGFuZCBhZnRlciB0aGUgdmFyaW91cyBjb2x1bW4gY2hhcmFjdGVycy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gZW5hYmxlIGEgY3VzdG9tIGFycmF5IG9mIGNvbG9yIGVzY2FwZXMuCisgKiBUaGUgJ2NvbG9yc19tYXgnIGFyZ3VtZW50IGlzIHRoZSBpbmRleCBvZiB0aGUgbGFzdCAicmVzZXQiIGVudHJ5LgorICoKKyAqIFRoaXMgZnVuY3Rpb25zIG11c3QgYmUgY2FsbGVkIEJFRk9SRSBncmFwaF9pbml0KCkgaXMgY2FsbGVkLgorICoKKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gaXNuJ3QgdXNlZCBpbiBHaXQgb3V0c2lkZSBncmFwaC5jIGJ1dCBpdCBpcyB1c2VkCisgKiBieSBDR2l0IChodHRwOi8vZ2l0Lnp4MmM0LmNvbS9jZ2l0LykgdG8gdXNlIEhUTUwgZm9yIGNvbG9ycy4KKyAqLwordm9pZCBncmFwaF9zZXRfY29sdW1uX2NvbG9ycyhjb25zdCBjaGFyICoqY29sb3JzLCB1bnNpZ25lZCBzaG9ydCBjb2xvcnNfbWF4KTsKKworLyoKKyAqIENyZWF0ZSBhIG5ldyBzdHJ1Y3QgZ2l0X2dyYXBoLgorICovCitzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaF9pbml0KHN0cnVjdCByZXZfaW5mbyAqb3B0KTsKKworLyoKKyAqIFVwZGF0ZSBhIGdpdF9ncmFwaCB3aXRoIGEgbmV3IGNvbW1pdC4KKyAqIFRoaXMgd2lsbCBjYXVzZSB0aGUgZ3JhcGggdG8gYmVnaW4gb3V0cHV0dGluZyBsaW5lcyBmb3IgdGhlIG5ldyBjb21taXQKKyAqIHRoZSBuZXh0IHRpbWUgZ3JhcGhfbmV4dF9saW5lKCkgaXMgY2FsbGVkLgorICoKKyAqIElmIGdyYXBoX3VwZGF0ZSgpIGlzIGNhbGxlZCBiZWZvcmUgZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKCkgcmV0dXJucyAxLAorICogdGhlIG5leHQgY2FsbCB0byBncmFwaF9uZXh0X2xpbmUoKSB3aWxsIG91dHB1dCBhbiBlbGxpcHNpcyAoIi4uLiIpCisgKiB0byBpbmRpY2F0ZSB0aGF0IGEgcG9ydGlvbiBvZiB0aGUgZ3JhcGggaXMgbWlzc2luZy4KKyAqCisgKiBMaW1pdGF0aW9uczoKKyAqIC0tLS0tLS0tLS0tCisgKgorICogLSBgZ3JhcGhfdXBkYXRlKClgIG11c3QgYmUgY2FsbGVkIHdpdGggY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlci4gIEl0IHNob3VsZAorICogICBub3QgYmUgY2FsbGVkIG9uIGEgY29tbWl0IGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4gaW52b2tlZCB3aXRoIGFuIGFuY2VzdG9yIG9mCisgKiAgIHRoYXQgY29tbWl0LCBvciB0aGUgZ3JhcGggb3V0cHV0IHdpbGwgYmUgaW5jb3JyZWN0LgorICoKKyAqIC0gYGdyYXBoX3VwZGF0ZSgpYCBtdXN0IGJlIGNhbGxlZCBvbiBhIGNvbnRpZ3VvdXMgZ3JvdXAgb2YgY29tbWl0cy4gIElmCisgKiAgIGBncmFwaF91cGRhdGUoKWAgaXMgY2FsbGVkIG9uIGEgcGFydGljdWxhciBjb21taXQsIGl0IHNob3VsZCBsYXRlciBiZSBjYWxsZWQKKyAqICAgb24gYWxsIHBhcmVudHMgb2YgdGhhdCBjb21taXQuICBQYXJlbnRzIG11c3Qgbm90IGJlIHNraXBwZWQsIG9yIHRoZSBncmFwaAorICogICBvdXRwdXQgd2lsbCBhcHBlYXIgaW5jb3JyZWN0LgorICoKKyAqIC0gYGdyYXBoX3VwZGF0ZSgpYCBtYXkgYmUgdXNlZCBvbiBhIHBydW5lZCBzZXQgb2YgY29tbWl0cyBvbmx5IGlmIHRoZSBwYXJlbnQgbGlzdAorICogICBoYXMgYmVlbiByZXdyaXR0ZW4gc28gYXMgdG8gaW5jbHVkZSBvbmx5IGFuY2VzdG9ycyBmcm9tIHRoZSBwcnVuZWQgc2V0LgorICovCit2b2lkIGdyYXBoX3VwZGF0ZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKKworLyoKKyAqIERldGVybWluZSBpZiBhIGdyYXBoIGhhcyBmaW5pc2hlZCBvdXRwdXR0aW5nIGxpbmVzIGZvciB0aGUgY3VycmVudAorICogY29tbWl0LgorICoKKyAqIFJldHVybnMgMSBpZiBncmFwaF9uZXh0X2xpbmUoKSBuZWVkcyB0byBiZSBjYWxsZWQgYWdhaW4gYmVmb3JlCisgKiBncmFwaF91cGRhdGUoKSBzaG91bGQgYmUgY2FsbGVkLiAgUmV0dXJucyAwIGlmIG5vIG1vcmUgbGluZXMgYXJlIG5lZWRlZAorICogZm9yIHRoaXMgY29tbWl0LiAgSWYgMCBpcyByZXR1cm5lZCwgZ3JhcGhfbmV4dF9saW5lKCkgbWF5IHN0aWxsIGJlCisgKiBjYWxsZWQgd2l0aG91dCBjYWxsaW5nIGdyYXBoX3VwZGF0ZSgpLCBhbmQgaXQgd2lsbCBtZXJlbHkgb3V0cHV0CisgKiBhcHByb3ByaWF0ZSAidmVydGljYWwgcGFkZGluZyIgaW4gdGhlIGdyYXBoLgorICoKKyAqIElmIGBncmFwaF91cGRhdGUoKWAgaXMgY2FsbGVkIGJlZm9yZSBhbGwgbGluZXMgZm9yIHRoZSBjdXJyZW50IGNvbW1pdCBoYXZlCisgKiBiZWVuIHByaW50ZWQsIHRoZSBuZXh0IGNhbGwgdG8gYGdyYXBoX25leHRfbGluZSgpYCB3aWxsIG91dHB1dCBhbiBlbGxpcHNpcywKKyAqIHRvIGluZGljYXRlIHRoYXQgYSBwb3J0aW9uIG9mIHRoZSBncmFwaCB3YXMgb21pdHRlZC4KKyAqLworaW50IGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChzdHJ1Y3QgZ2l0X2dyYXBoIGNvbnN0ICpncmFwaCk7CisKKy8qCisgKiBPdXRwdXQgdGhlIG5leHQgbGluZSBmb3IgYSBncmFwaC4KKyAqIFRoaXMgZm9ybWF0cyB0aGUgbmV4dCBncmFwaCBsaW5lIGludG8gdGhlIHNwZWNpZmllZCBzdHJidWYuICBJdCBpcyBub3QKKyAqIHRlcm1pbmF0ZWQgd2l0aCBhIG5ld2xpbmUuCisgKgorICogUmV0dXJucyAxIGlmIHRoZSBsaW5lIGluY2x1ZGVzIHRoZSBjdXJyZW50IGNvbW1pdCwgYW5kIDAgb3RoZXJ3aXNlLgorICogZ3JhcGhfbmV4dF9saW5lKCkgd2lsbCByZXR1cm4gMSBleGFjdGx5IG9uY2UgZm9yIGVhY2ggdGltZQorICogZ3JhcGhfdXBkYXRlKCkgaXMgY2FsbGVkLgorICoKKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gaXNuJ3QgdXNlZCBpbiBHaXQgb3V0c2lkZSBncmFwaC5jIGJ1dCBpdCBpcyB1c2VkCisgKiBieSBDR2l0IChodHRwOi8vZ2l0Lnp4MmM0LmNvbS9jZ2l0LykgdG8gd3JhcCBIVE1MIGFyb3VuZCBncmFwaCBsaW5lcy4KKyAqLworaW50IGdyYXBoX25leHRfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpOworCisKKy8qCisgKiBSZXR1cm4gY3VycmVudCB3aWR0aCBvZiB0aGUgZ3JhcGggaW4gb24tc2NyZWVuIGNoYXJhY3RlcnMuCisgKi8KK2ludCBncmFwaF93aWR0aChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCk7CisKKy8qCisgKiBncmFwaF9zaG93Xyo6IGhlbHBlciBmdW5jdGlvbnMgZm9yIHByaW50aW5nIHRvIHN0ZG91dAorICovCisKKworLyoKKyAqIElmIHRoZSBncmFwaCBpcyBub24tTlVMTCwgcHJpbnQgdGhlIGhpc3RvcnkgZ3JhcGggdG8gc3Rkb3V0LAorICogdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgbGluZSBjb250YWluaW5nIHRoaXMgY29tbWl0LgorICogRG9lcyBub3QgcHJpbnQgYSB0ZXJtaW5hdGluZyBuZXdsaW5lIG9uIHRoZSBsYXN0IGxpbmUuCisgKi8KK3ZvaWQgZ3JhcGhfc2hvd19jb21taXQoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpOworCisvKgorICogSWYgdGhlIGdyYXBoIGlzIG5vbi1OVUxMLCBwcmludCBvbmUgbGluZSBvZiB0aGUgaGlzdG9yeSBncmFwaCB0byBzdGRvdXQuCisgKiBEb2VzIG5vdCBwcmludCBhIHRlcm1pbmF0aW5nIG5ld2xpbmUgb24gdGhlIGxhc3QgbGluZS4KKyAqLwordm9pZCBncmFwaF9zaG93X29uZWxpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpOworCisvKgorICogSWYgdGhlIGdyYXBoIGlzIG5vbi1OVUxMLCBwcmludCBvbmUgbGluZSBvZiB2ZXJ0aWNhbCBncmFwaCBwYWRkaW5nIHRvCisgKiBzdGRvdXQuICBEb2VzIG5vdCBwcmludCBhIHRlcm1pbmF0aW5nIG5ld2xpbmUgb24gdGhlIGxhc3QgbGluZS4KKyAqLwordm9pZCBncmFwaF9zaG93X3BhZGRpbmcoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpOworCisvKgorICogSWYgdGhlIGdyYXBoIGlzIG5vbi1OVUxMLCBwcmludCB0aGUgcmVzdCBvZiB0aGUgaGlzdG9yeSBncmFwaCBmb3IgdGhpcworICogY29tbWl0IHRvIHN0ZG91dC4gIERvZXMgbm90IHByaW50IGEgdGVybWluYXRpbmcgbmV3bGluZSBvbiB0aGUgbGFzdCBsaW5lLgorICogUmV0dXJucyAxIGlmIG91dHB1dCB3YXMgcHJpbnRlZCwgYW5kIDAgaWYgbm8gb3V0cHV0IHdhcyBuZWNlc3NhcnkuCisgKi8KK2ludCBncmFwaF9zaG93X3JlbWFpbmRlcihzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCk7CisKKy8qCisgKiBQcmludCBhIGNvbW1pdCBtZXNzYWdlIHN0cmJ1ZiBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgZ3JhcGggdG8gc3Rkb3V0LgorICoKKyAqIFRoaXMgaXMgc2ltaWxhciB0byBncmFwaF9zaG93X3N0cmJ1ZigpLCBidXQgaXQgYWx3YXlzIHByaW50cyB0aGUKKyAqIHJlbWFpbmRlciBvZiB0aGUgZ3JhcGguCisgKgorICogSXQgaXMgYmV0dGVyIHRoYW4gZGlyZWN0bHkgY2FsbGluZyBgZ3JhcGhfc2hvd19zdHJidWYoKWAgZm9sbG93ZWQgYnkKKyAqIGBncmFwaF9zaG93X3JlbWFpbmRlcigpYCBzaW5jZSBpdCBwcm9wZXJseSBoYW5kbGVzIGJ1ZmZlcnMgdGhhdCBkbyBub3QgZW5kIGluCisgKiBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuCisgKgorICogSWYgdGhlIHN0cmJ1ZiBlbmRzIHdpdGggYSBuZXdsaW5lLCB0aGUgb3V0cHV0IHByaW50ZWQgYnkKKyAqIGdyYXBoX3Nob3dfY29tbWl0X21zZygpIHdpbGwgZW5kIHdpdGggYSBuZXdsaW5lLiAgSWYgdGhlIHN0cmJ1ZiBpcworICogbWlzc2luZyBhIHRlcm1pbmF0aW5nIG5ld2xpbmUgKGluY2x1ZGluZyBpZiBpdCBpcyBlbXB0eSksIHRoZSBvdXRwdXQKKyAqIHByaW50ZWQgYnkgZ3JhcGhfc2hvd19jb21taXRfbXNnKCkgd2lsbCBhbHNvIGJlIG1pc3NpbmcgYSB0ZXJtaW5hdGluZworICogbmV3bGluZS4KKyAqCisgKiBOb3RlIHRoYXQgdW5saWtlIHNvbWUgb3RoZXIgZ3JhcGggZGlzcGxheSBmdW5jdGlvbnMsIHlvdSBtdXN0IHBhc3MgdGhlIGZpbGUKKyAqIGhhbmRsZSBkaXJlY3RseS4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgZmlsZSBoYW5kbGUgYXMgdGhlCisgKiBmaWxlIHNwZWNpZmllZCBieSB0aGUgZ3JhcGggZGlmZiBvcHRpb25zLiBUaGlzIGlzIG5lY2Vzc2FyeSBzbyB0aGF0CisgKiBncmFwaF9zaG93X2NvbW1pdF9tc2cgY2FuIGJlIGNhbGxlZCBldmVuIHdpdGggYSBOVUxMIGdyYXBoLgorICovCit2b2lkIGdyYXBoX3Nob3dfY29tbWl0X21zZyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCSAgIEZJTEUgKmZpbGUsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmIGNvbnN0ICpzYik7CisKKyNlbmRpZiAvKiBHUkFQSF9IICovCmRpZmYgLS1naXQgYS9ncmVwLmMgYi9ncmVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyMzJhOQotLS0gL2Rldi9udWxsCisrKyBiL2dyZXAuYwpAQCAtMCwwICsxLDIyMDkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImdyZXAuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiaGVscC5oIgorCitzdGF0aWMgaW50IGdyZXBfc291cmNlX2xvYWQoc3RydWN0IGdyZXBfc291cmNlICpncyk7CitzdGF0aWMgaW50IGdyZXBfc291cmNlX2lzX2JpbmFyeShzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzLAorCQkJCSBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CisKK3N0YXRpYyBzdHJ1Y3QgZ3JlcF9vcHQgZ3JlcF9kZWZhdWx0czsKKworI2lmZGVmIFVTRV9MSUJQQ1JFMgorc3RhdGljIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqcGNyZTJfZ2xvYmFsX2NvbnRleHQ7CisKK3N0YXRpYyB2b2lkICpwY3JlMl9tYWxsb2MoUENSRTJfU0laRSBzaXplLCBNQVlCRV9VTlVTRUQgdm9pZCAqbWVtb3J5X2RhdGEpCit7CisJcmV0dXJuIG1hbGxvYyhzaXplKTsKK30KKworc3RhdGljIHZvaWQgcGNyZTJfZnJlZSh2b2lkICpwb2ludGVyLCBNQVlCRV9VTlVTRUQgdm9pZCAqbWVtb3J5X2RhdGEpCit7CisJZnJlZShwb2ludGVyKTsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqY29sb3JfZ3JlcF9zbG90c1tdID0geworCVtHUkVQX0NPTE9SX0NPTlRFWFRdCSAgICA9ICJjb250ZXh0IiwKKwlbR1JFUF9DT0xPUl9GSUxFTkFNRV0JICAgID0gImZpbGVuYW1lIiwKKwlbR1JFUF9DT0xPUl9GVU5DVElPTl0JICAgID0gImZ1bmN0aW9uIiwKKwlbR1JFUF9DT0xPUl9MSU5FTk9dCSAgICA9ICJsaW5lTnVtYmVyIiwKKwlbR1JFUF9DT0xPUl9DT0xVTU5OT10JICAgID0gImNvbHVtbiIsCisJW0dSRVBfQ09MT1JfTUFUQ0hfQ09OVEVYVF0gID0gIm1hdGNoQ29udGV4dCIsCisJW0dSRVBfQ09MT1JfTUFUQ0hfU0VMRUNURURdID0gIm1hdGNoU2VsZWN0ZWQiLAorCVtHUkVQX0NPTE9SX1NFTEVDVEVEXQkgICAgPSAic2VsZWN0ZWQiLAorCVtHUkVQX0NPTE9SX1NFUF0JICAgID0gInNlcGFyYXRvciIsCit9OworCitzdGF0aWMgdm9pZCBzdGRfb3V0cHV0KHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKQoreworCWZ3cml0ZShidWYsIHNpemUsIDEsIHN0ZG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbG9yX3NldChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKmNvbG9yX2J5dGVzKQoreworCXhzbnByaW50Zihkc3QsIENPTE9SX01BWExFTiwgIiVzIiwgY29sb3JfYnl0ZXMpOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgZ3JlcF9kZWZhdWx0cyB0ZW1wbGF0ZSB3aXRoIGhhcmRjb2RlZCBkZWZhdWx0cy4KKyAqIFdlIGNvdWxkIGxldCB0aGUgY29tcGlsZXIgZG8gdGhpcywgYnV0IHdpdGhvdXQgQzk5IGluaXRpYWxpemVycworICogdGhlIGNvZGUgZ2V0cyB1bndpZWxkeSBhbmQgdW5yZWFkYWJsZSwgc28uLi4KKyAqLwordm9pZCBpbml0X2dyZXBfZGVmYXVsdHMoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pCit7CisJc3RydWN0IGdyZXBfb3B0ICpvcHQgPSAmZ3JlcF9kZWZhdWx0czsKKwlzdGF0aWMgaW50IHJ1bl9vbmNlOworCisJaWYgKHJ1bl9vbmNlKQorCQlyZXR1cm47CisJcnVuX29uY2UrKzsKKworCW1lbXNldChvcHQsIDAsIHNpemVvZigqb3B0KSk7CisJb3B0LT5yZXBvID0gcmVwbzsKKwlvcHQtPnJlbGF0aXZlID0gMTsKKwlvcHQtPnBhdGhuYW1lID0gMTsKKwlvcHQtPm1heF9kZXB0aCA9IC0xOworCW9wdC0+cGF0dGVybl90eXBlX29wdGlvbiA9IEdSRVBfUEFUVEVSTl9UWVBFX1VOU1BFQ0lGSUVEOworCWNvbG9yX3NldChvcHQtPmNvbG9yc1tHUkVQX0NPTE9SX0NPTlRFWFRdLCAiIik7CisJY29sb3Jfc2V0KG9wdC0+Y29sb3JzW0dSRVBfQ09MT1JfRklMRU5BTUVdLCAiIik7CisJY29sb3Jfc2V0KG9wdC0+Y29sb3JzW0dSRVBfQ09MT1JfRlVOQ1RJT05dLCAiIik7CisJY29sb3Jfc2V0KG9wdC0+Y29sb3JzW0dSRVBfQ09MT1JfTElORU5PXSwgIiIpOworCWNvbG9yX3NldChvcHQtPmNvbG9yc1tHUkVQX0NPTE9SX0NPTFVNTk5PXSwgIiIpOworCWNvbG9yX3NldChvcHQtPmNvbG9yc1tHUkVQX0NPTE9SX01BVENIX0NPTlRFWFRdLCBHSVRfQ09MT1JfQk9MRF9SRUQpOworCWNvbG9yX3NldChvcHQtPmNvbG9yc1tHUkVQX0NPTE9SX01BVENIX1NFTEVDVEVEXSwgR0lUX0NPTE9SX0JPTERfUkVEKTsKKwljb2xvcl9zZXQob3B0LT5jb2xvcnNbR1JFUF9DT0xPUl9TRUxFQ1RFRF0sICIiKTsKKwljb2xvcl9zZXQob3B0LT5jb2xvcnNbR1JFUF9DT0xPUl9TRVBdLCBHSVRfQ09MT1JfQ1lBTik7CisJb3B0LT5vbmx5X21hdGNoaW5nID0gMDsKKwlvcHQtPmNvbG9yID0gLTE7CisJb3B0LT5vdXRwdXQgPSBzdGRfb3V0cHV0OworfQorCitzdGF0aWMgaW50IHBhcnNlX3BhdHRlcm5fdHlwZV9hcmcoY29uc3QgY2hhciAqb3B0LCBjb25zdCBjaGFyICphcmcpCit7CisJaWYgKCFzdHJjbXAoYXJnLCAiZGVmYXVsdCIpKQorCQlyZXR1cm4gR1JFUF9QQVRURVJOX1RZUEVfVU5TUEVDSUZJRUQ7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJiYXNpYyIpKQorCQlyZXR1cm4gR1JFUF9QQVRURVJOX1RZUEVfQlJFOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZXh0ZW5kZWQiKSkKKwkJcmV0dXJuIEdSRVBfUEFUVEVSTl9UWVBFX0VSRTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgImZpeGVkIikpCisJCXJldHVybiBHUkVQX1BBVFRFUk5fVFlQRV9GSVhFRDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInBlcmwiKSkKKwkJcmV0dXJuIEdSRVBfUEFUVEVSTl9UWVBFX1BDUkU7CisJZGllKCJiYWQgJXMgYXJndW1lbnQ6ICVzIiwgb3B0LCBhcmcpOworfQorCitkZWZpbmVfbGlzdF9jb25maWdfYXJyYXlfZXh0cmEoY29sb3JfZ3JlcF9zbG90cywgeyJtYXRjaCJ9KTsKKworLyoKKyAqIFJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBvbmNlIGFuZCBzdG9yZSBpdCBpbgorICogdGhlIGdyZXBfZGVmYXVsdHMgdGVtcGxhdGUuCisgKi8KK2ludCBncmVwX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCA9ICZncmVwX2RlZmF1bHRzOworCWNvbnN0IGNoYXIgKnNsb3Q7CisKKwlpZiAodXNlcmRpZmZfY29uZmlnKHZhciwgdmFsdWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFzdHJjbXAodmFyLCAiZ3JlcC5leHRlbmRlZHJlZ2V4cCIpKSB7CisJCW9wdC0+ZXh0ZW5kZWRfcmVnZXhwX29wdGlvbiA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiZ3JlcC5wYXR0ZXJudHlwZSIpKSB7CisJCW9wdC0+cGF0dGVybl90eXBlX29wdGlvbiA9IHBhcnNlX3BhdHRlcm5fdHlwZV9hcmcodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImdyZXAubGluZW51bWJlciIpKSB7CisJCW9wdC0+bGluZW51bSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImdyZXAuY29sdW1uIikpIHsKKwkJb3B0LT5jb2x1bW5udW0gPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImdyZXAuZnVsbG5hbWUiKSkgeworCQlvcHQtPnJlbGF0aXZlID0gIWdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuZ3JlcCIpKQorCQlvcHQtPmNvbG9yID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuZ3JlcC5tYXRjaCIpKSB7CisJCWlmIChncmVwX2NvbmZpZygiY29sb3IuZ3JlcC5tYXRjaGNvbnRleHQiLCB2YWx1ZSwgY2IpIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKGdyZXBfY29uZmlnKCJjb2xvci5ncmVwLm1hdGNoc2VsZWN0ZWQiLCB2YWx1ZSwgY2IpIDwgMCkKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KHZhciwgImNvbG9yLmdyZXAuIiwgJnNsb3QpKSB7CisJCWludCBpID0gTE9PS1VQX0NPTkZJRyhjb2xvcl9ncmVwX3Nsb3RzLCBzbG90KTsKKwkJY2hhciAqY29sb3I7CisKKwkJaWYgKGkgPCAwKQorCQkJcmV0dXJuIC0xOworCQljb2xvciA9IG9wdC0+Y29sb3JzW2ldOworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXJldHVybiBjb2xvcl9wYXJzZSh2YWx1ZSwgY29sb3IpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgb25lIGluc3RhbmNlIG9mIGdyZXBfb3B0IGFuZCBjb3B5IHRoZQorICogZGVmYXVsdCB2YWx1ZXMgZnJvbSB0aGUgdGVtcGxhdGUgd2UgcmVhZCB0aGUgY29uZmlndXJhdGlvbgorICogaW5mb3JtYXRpb24gaW4gYW4gZWFybGllciBjYWxsIHRvIGdpdF9jb25maWcoZ3JlcF9jb25maWcpLgorICoKKyAqIElmIHVzaW5nIFBDUkUsIG1ha2Ugc3VyZSB0aGF0IHRoZSBsaWJyYXJ5IGlzIGNvbmZpZ3VyZWQKKyAqIHRvIHVzZSB0aGUgc2FtZSBhbGxvY2F0b3IgYXMgR2l0IChlLmcuIG5lZG1hbGxvYyBvbiBXaW5kb3dzKS4KKyAqCisgKiBBbnkgYWxsb2NhdGVkIG1lbW9yeSBuZWVkcyB0byBiZSByZWxlYXNlZCBpbiBncmVwX2Rlc3Ryb3koKS4KKyAqLwordm9pZCBncmVwX2luaXQoc3RydWN0IGdyZXBfb3B0ICpvcHQsIHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGdyZXBfb3B0ICpkZWYgPSAmZ3JlcF9kZWZhdWx0czsKKwlpbnQgaTsKKworI2lmIGRlZmluZWQoVVNFX0xJQlBDUkUyKQorCWlmICghcGNyZTJfZ2xvYmFsX2NvbnRleHQpCisJCXBjcmUyX2dsb2JhbF9jb250ZXh0ID0gcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NyZWF0ZSgKKwkJCQkJcGNyZTJfbWFsbG9jLCBwY3JlMl9mcmVlLCBOVUxMKTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX0xJQlBDUkUxCisJcGNyZV9tYWxsb2MgPSBtYWxsb2M7CisJcGNyZV9mcmVlID0gZnJlZTsKKyNlbmRpZgorCisJbWVtc2V0KG9wdCwgMCwgc2l6ZW9mKCpvcHQpKTsKKwlvcHQtPnJlcG8gPSByZXBvOworCW9wdC0+cHJlZml4ID0gcHJlZml4OworCW9wdC0+cHJlZml4X2xlbmd0aCA9IChwcmVmaXggJiYgKnByZWZpeCkgPyBzdHJsZW4ocHJlZml4KSA6IDA7CisJb3B0LT5wYXR0ZXJuX3RhaWwgPSAmb3B0LT5wYXR0ZXJuX2xpc3Q7CisJb3B0LT5oZWFkZXJfdGFpbCA9ICZvcHQtPmhlYWRlcl9saXN0OworCisJb3B0LT5vbmx5X21hdGNoaW5nID0gZGVmLT5vbmx5X21hdGNoaW5nOworCW9wdC0+Y29sb3IgPSBkZWYtPmNvbG9yOworCW9wdC0+ZXh0ZW5kZWRfcmVnZXhwX29wdGlvbiA9IGRlZi0+ZXh0ZW5kZWRfcmVnZXhwX29wdGlvbjsKKwlvcHQtPnBhdHRlcm5fdHlwZV9vcHRpb24gPSBkZWYtPnBhdHRlcm5fdHlwZV9vcHRpb247CisJb3B0LT5saW5lbnVtID0gZGVmLT5saW5lbnVtOworCW9wdC0+Y29sdW1ubnVtID0gZGVmLT5jb2x1bW5udW07CisJb3B0LT5tYXhfZGVwdGggPSBkZWYtPm1heF9kZXB0aDsKKwlvcHQtPnBhdGhuYW1lID0gZGVmLT5wYXRobmFtZTsKKwlvcHQtPnJlbGF0aXZlID0gZGVmLT5yZWxhdGl2ZTsKKwlvcHQtPm91dHB1dCA9IGRlZi0+b3V0cHV0OworCisJZm9yIChpID0gMDsgaSA8IE5SX0dSRVBfQ09MT1JTOyBpKyspCisJCWNvbG9yX3NldChvcHQtPmNvbG9yc1tpXSwgZGVmLT5jb2xvcnNbaV0pOworfQorCit2b2lkIGdyZXBfZGVzdHJveSh2b2lkKQoreworI2lmZGVmIFVTRV9MSUJQQ1JFMgorCXBjcmUyX2dlbmVyYWxfY29udGV4dF9mcmVlKHBjcmUyX2dsb2JhbF9jb250ZXh0KTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBncmVwX3NldF9wYXR0ZXJuX3R5cGVfb3B0aW9uKGVudW0gZ3JlcF9wYXR0ZXJuX3R5cGUgcGF0dGVybl90eXBlLCBzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKK3sKKwkvKgorCSAqIFdoZW4gY29tbWl0dGluZyB0byB0aGUgcGF0dGVybiB0eXBlIGJ5IHNldHRpbmcgdGhlIHJlbGV2YW50CisJICogZmllbGRzIGluIGdyZXBfb3B0IGl0J3MgZ2VuZXJhbGx5IG5vdCBuZWNlc3NhcnkgdG8gemVybyBvdXQKKwkgKiB0aGUgZmllbGRzIHdlJ3JlIG5vdCBjaG9vc2luZywgc2luY2UgdGhleSB3b24ndCBoYXZlIGJlZW4KKwkgKiBzZXQgYnkgYW55dGhpbmcuIFRoZSBleHRlbmRlZF9yZWdleHBfb3B0aW9uIGZpZWxkIGlzIHRoZQorCSAqIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMuCisJICoKKwkgKiBUaGlzIGlzIGJlY2F1c2UgaW4gdGhlIHByb2Nlc3Mgb2YgcGFyc2luZyBncmVwLnBhdHRlcm5UeXBlCisJICogJiBncmVwLmV4dGVuZGVkUmVnZXhwIHdlIHNldCBvcHQtPnBhdHRlcm5fdHlwZV9vcHRpb24gYW5kCisJICogb3B0LT5leHRlbmRlZF9yZWdleHBfb3B0aW9uLCByZXNwZWN0aXZlbHkuIFdlIHRoZW4KKwkgKiBpbnRlcm5hbGx5IHVzZSBvcHQtPmV4dGVuZGVkX3JlZ2V4cF9vcHRpb24gdG8gc2VlIGlmIHdlJ3JlCisJICogY29tcGlsaW5nIGFuIEVSRS4gSXQgbXVzdCBiZSB1bnNldCBpZiB0aGF0J3Mgbm90IGFjdHVhbGx5CisJICogdGhlIGNhc2UuCisJICovCisJaWYgKHBhdHRlcm5fdHlwZSAhPSBHUkVQX1BBVFRFUk5fVFlQRV9FUkUgJiYKKwkgICAgb3B0LT5leHRlbmRlZF9yZWdleHBfb3B0aW9uKQorCQlvcHQtPmV4dGVuZGVkX3JlZ2V4cF9vcHRpb24gPSAwOworCisJc3dpdGNoIChwYXR0ZXJuX3R5cGUpIHsKKwljYXNlIEdSRVBfUEFUVEVSTl9UWVBFX1VOU1BFQ0lGSUVEOgorCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCWNhc2UgR1JFUF9QQVRURVJOX1RZUEVfQlJFOgorCQlicmVhazsKKworCWNhc2UgR1JFUF9QQVRURVJOX1RZUEVfRVJFOgorCQlvcHQtPmV4dGVuZGVkX3JlZ2V4cF9vcHRpb24gPSAxOworCQlicmVhazsKKworCWNhc2UgR1JFUF9QQVRURVJOX1RZUEVfRklYRUQ6CisJCW9wdC0+Zml4ZWQgPSAxOworCQlicmVhazsKKworCWNhc2UgR1JFUF9QQVRURVJOX1RZUEVfUENSRToKKyNpZmRlZiBVU0VfTElCUENSRTIKKwkJb3B0LT5wY3JlMiA9IDE7CisjZWxzZQorCQkvKgorCQkgKiBJdCdzIGltcG9ydGFudCB0aGF0IHBjcmUxIGFsd2F5cyBiZSBhc3NpZ25lZCB0bworCQkgKiBldmVuIHdoZW4gdGhlcmUncyBubyBVU0VfTElCUENSRSogZGVmaW5lZC4gV2Ugc3RpbGwKKwkJICogY2FsbCB0aGUgUENSRSBzdHViIGZ1bmN0aW9uLCBpdCBqdXN0IGRpZXMgd2l0aAorCQkgKiAiY2Fubm90IHVzZSBQZXJsLWNvbXBhdGlibGUgcmVnZXhlc1suLi5dIi4KKwkJICovCisJCW9wdC0+cGNyZTEgPSAxOworI2VuZGlmCisJCWJyZWFrOworCX0KK30KKwordm9pZCBncmVwX2NvbW1pdF9wYXR0ZXJuX3R5cGUoZW51bSBncmVwX3BhdHRlcm5fdHlwZSBwYXR0ZXJuX3R5cGUsIHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCWlmIChwYXR0ZXJuX3R5cGUgIT0gR1JFUF9QQVRURVJOX1RZUEVfVU5TUEVDSUZJRUQpCisJCWdyZXBfc2V0X3BhdHRlcm5fdHlwZV9vcHRpb24ocGF0dGVybl90eXBlLCBvcHQpOworCWVsc2UgaWYgKG9wdC0+cGF0dGVybl90eXBlX29wdGlvbiAhPSBHUkVQX1BBVFRFUk5fVFlQRV9VTlNQRUNJRklFRCkKKwkJZ3JlcF9zZXRfcGF0dGVybl90eXBlX29wdGlvbihvcHQtPnBhdHRlcm5fdHlwZV9vcHRpb24sIG9wdCk7CisJZWxzZSBpZiAob3B0LT5leHRlbmRlZF9yZWdleHBfb3B0aW9uKQorCQkvKgorCQkgKiBUaGlzIGJyYW5jaCAqbXVzdCogaGFwcGVuIGFmdGVyIHNldHRpbmcgZnJvbSB0aGUKKwkJICogb3B0LT5wYXR0ZXJuX3R5cGVfb3B0aW9uIGFib3ZlLCB3ZSBkb24ndCB3YW50CisJCSAqIGdyZXAuZXh0ZW5kZWRSZWdleHAgdG8gb3ZlcnJpZGUgZ3JlcC5wYXR0ZXJuVHlwZSEKKwkJICovCisJCWdyZXBfc2V0X3BhdHRlcm5fdHlwZV9vcHRpb24oR1JFUF9QQVRURVJOX1RZUEVfRVJFLCBvcHQpOworfQorCitzdGF0aWMgc3RydWN0IGdyZXBfcGF0ICpjcmVhdGVfZ3JlcF9wYXQoY29uc3QgY2hhciAqcGF0LCBzaXplX3QgcGF0bGVuLAorCQkJCQljb25zdCBjaGFyICpvcmlnaW4sIGludCBubywKKwkJCQkJZW51bSBncmVwX3BhdF90b2tlbiB0LAorCQkJCQllbnVtIGdyZXBfaGVhZGVyX2ZpZWxkIGZpZWxkKQoreworCXN0cnVjdCBncmVwX3BhdCAqcCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpwKSk7CisJcC0+cGF0dGVybiA9IHhtZW1kdXB6KHBhdCwgcGF0bGVuKTsKKwlwLT5wYXR0ZXJubGVuID0gcGF0bGVuOworCXAtPm9yaWdpbiA9IG9yaWdpbjsKKwlwLT5ubyA9IG5vOworCXAtPnRva2VuID0gdDsKKwlwLT5maWVsZCA9IGZpZWxkOworCXJldHVybiBwOworfQorCitzdGF0aWMgdm9pZCBkb19hcHBlbmRfZ3JlcF9wYXQoc3RydWN0IGdyZXBfcGF0ICoqKnRhaWwsIHN0cnVjdCBncmVwX3BhdCAqcCkKK3sKKwkqKnRhaWwgPSBwOworCSp0YWlsID0gJnAtPm5leHQ7CisJcC0+bmV4dCA9IE5VTEw7CisKKwlzd2l0Y2ggKHAtPnRva2VuKSB7CisJY2FzZSBHUkVQX1BBVFRFUk46IC8qIGF0b20gKi8KKwljYXNlIEdSRVBfUEFUVEVSTl9IRUFEOgorCWNhc2UgR1JFUF9QQVRURVJOX0JPRFk6CisJCWZvciAoOzspIHsKKwkJCXN0cnVjdCBncmVwX3BhdCAqbmV3X3BhdDsKKwkJCXNpemVfdCBsZW4gPSAwOworCQkJY2hhciAqY3AgPSBwLT5wYXR0ZXJuICsgcC0+cGF0dGVybmxlbiwgKm5sID0gTlVMTDsKKwkJCXdoaWxlICgrK2xlbiA8PSBwLT5wYXR0ZXJubGVuKSB7CisJCQkJaWYgKCooLS1jcCkgPT0gJ1xuJykgeworCQkJCQlubCA9IGNwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoIW5sKQorCQkJCWJyZWFrOworCQkJbmV3X3BhdCA9IGNyZWF0ZV9ncmVwX3BhdChubCArIDEsIGxlbiAtIDEsIHAtPm9yaWdpbiwKKwkJCQkJCSAgcC0+bm8sIHAtPnRva2VuLCBwLT5maWVsZCk7CisJCQluZXdfcGF0LT5uZXh0ID0gcC0+bmV4dDsKKwkJCWlmICghcC0+bmV4dCkKKwkJCQkqdGFpbCA9ICZuZXdfcGF0LT5uZXh0OworCQkJcC0+bmV4dCA9IG5ld19wYXQ7CisJCQkqbmwgPSAnXDAnOworCQkJcC0+cGF0dGVybmxlbiAtPSBsZW47CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIGFwcGVuZF9oZWFkZXJfZ3JlcF9wYXR0ZXJuKHN0cnVjdCBncmVwX29wdCAqb3B0LAorCQkJCWVudW0gZ3JlcF9oZWFkZXJfZmllbGQgZmllbGQsIGNvbnN0IGNoYXIgKnBhdCkKK3sKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnAgPSBjcmVhdGVfZ3JlcF9wYXQocGF0LCBzdHJsZW4ocGF0KSwgImhlYWRlciIsIDAsCisJCQkJCSAgICAgR1JFUF9QQVRURVJOX0hFQUQsIGZpZWxkKTsKKwlpZiAoZmllbGQgPT0gR1JFUF9IRUFERVJfUkVGTE9HKQorCQlvcHQtPnVzZV9yZWZsb2dfZmlsdGVyID0gMTsKKwlkb19hcHBlbmRfZ3JlcF9wYXQoJm9wdC0+aGVhZGVyX3RhaWwsIHApOworfQorCit2b2lkIGFwcGVuZF9ncmVwX3BhdHRlcm4oc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKnBhdCwKKwkJCSBjb25zdCBjaGFyICpvcmlnaW4sIGludCBubywgZW51bSBncmVwX3BhdF90b2tlbiB0KQoreworCWFwcGVuZF9ncmVwX3BhdChvcHQsIHBhdCwgc3RybGVuKHBhdCksIG9yaWdpbiwgbm8sIHQpOworfQorCit2b2lkIGFwcGVuZF9ncmVwX3BhdChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqcGF0LCBzaXplX3QgcGF0bGVuLAorCQkgICAgIGNvbnN0IGNoYXIgKm9yaWdpbiwgaW50IG5vLCBlbnVtIGdyZXBfcGF0X3Rva2VuIHQpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwID0gY3JlYXRlX2dyZXBfcGF0KHBhdCwgcGF0bGVuLCBvcmlnaW4sIG5vLCB0LCAwKTsKKwlkb19hcHBlbmRfZ3JlcF9wYXQoJm9wdC0+cGF0dGVybl90YWlsLCBwKTsKK30KKworc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdF9kdXAoY29uc3Qgc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwYXQ7CisJc3RydWN0IGdyZXBfb3B0ICpyZXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3JlcF9vcHQpKTsKKwkqcmV0ID0gKm9wdDsKKworCXJldC0+cGF0dGVybl9saXN0ID0gTlVMTDsKKwlyZXQtPnBhdHRlcm5fdGFpbCA9ICZyZXQtPnBhdHRlcm5fbGlzdDsKKworCWZvcihwYXQgPSBvcHQtPnBhdHRlcm5fbGlzdDsgcGF0ICE9IE5VTEw7IHBhdCA9IHBhdC0+bmV4dCkKKwl7CisJCWlmKHBhdC0+dG9rZW4gPT0gR1JFUF9QQVRURVJOX0hFQUQpCisJCQlhcHBlbmRfaGVhZGVyX2dyZXBfcGF0dGVybihyZXQsIHBhdC0+ZmllbGQsCisJCQkJCQkgICBwYXQtPnBhdHRlcm4pOworCQllbHNlCisJCQlhcHBlbmRfZ3JlcF9wYXQocmV0LCBwYXQtPnBhdHRlcm4sIHBhdC0+cGF0dGVybmxlbiwKKwkJCQkJcGF0LT5vcmlnaW4sIHBhdC0+bm8sIHBhdC0+dG9rZW4pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGNvbXBpbGVfcmVnZXhwX2ZhaWxlZChjb25zdCBzdHJ1Y3QgZ3JlcF9wYXQgKnAsCisJCWNvbnN0IGNoYXIgKmVycm9yKQoreworCWNoYXIgd2hlcmVbMTAyNF07CisKKwlpZiAocC0+bm8pCisJCXhzbnByaW50Zih3aGVyZSwgc2l6ZW9mKHdoZXJlKSwgIkluICclcycgYXQgJWQsICIsIHAtPm9yaWdpbiwgcC0+bm8pOworCWVsc2UgaWYgKHAtPm9yaWdpbikKKwkJeHNucHJpbnRmKHdoZXJlLCBzaXplb2Yod2hlcmUpLCAiJXMsICIsIHAtPm9yaWdpbik7CisJZWxzZQorCQl3aGVyZVswXSA9IDA7CisKKwlkaWUoIiVzJyVzJzogJXMiLCB3aGVyZSwgcC0+cGF0dGVybiwgZXJyb3IpOworfQorCitzdGF0aWMgaW50IGlzX2ZpeGVkKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4pCit7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGlzX3JlZ2V4X3NwZWNpYWwoc1tpXSkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworI2lmZGVmIFVTRV9MSUJQQ1JFMQorc3RhdGljIHZvaWQgY29tcGlsZV9wY3JlMV9yZWdleHAoc3RydWN0IGdyZXBfcGF0ICpwLCBjb25zdCBzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKK3sKKwljb25zdCBjaGFyICplcnJvcjsKKwlpbnQgZXJyb2Zmc2V0OworCWludCBvcHRpb25zID0gUENSRV9NVUxUSUxJTkU7CisJaW50IHN0dWR5X29wdGlvbnMgPSAwOworCisJaWYgKG9wdC0+aWdub3JlX2Nhc2UpIHsKKwkJaWYgKCFvcHQtPmlnbm9yZV9sb2NhbGUgJiYgaGFzX25vbl9hc2NpaShwLT5wYXR0ZXJuKSkKKwkJCXAtPnBjcmUxX3RhYmxlcyA9IHBjcmVfbWFrZXRhYmxlcygpOworCQlvcHRpb25zIHw9IFBDUkVfQ0FTRUxFU1M7CisJfQorCWlmICghb3B0LT5pZ25vcmVfbG9jYWxlICYmIGlzX3V0ZjhfbG9jYWxlKCkgJiYgaGFzX25vbl9hc2NpaShwLT5wYXR0ZXJuKSkKKwkJb3B0aW9ucyB8PSBQQ1JFX1VURjg7CisKKwlwLT5wY3JlMV9yZWdleHAgPSBwY3JlX2NvbXBpbGUocC0+cGF0dGVybiwgb3B0aW9ucywgJmVycm9yLCAmZXJyb2Zmc2V0LAorCQkJCSAgICAgIHAtPnBjcmUxX3RhYmxlcyk7CisJaWYgKCFwLT5wY3JlMV9yZWdleHApCisJCWNvbXBpbGVfcmVnZXhwX2ZhaWxlZChwLCBlcnJvcik7CisKKyNpZiBkZWZpbmVkKFBDUkVfQ09ORklHX0pJVCkgJiYgIWRlZmluZWQoTk9fTElCUENSRTFfSklUKQorCXBjcmVfY29uZmlnKFBDUkVfQ09ORklHX0pJVCwgJnAtPnBjcmUxX2ppdF9vbik7CisJaWYgKG9wdC0+ZGVidWcpCisJCWZwcmludGYoc3RkZXJyLCAicGNyZTFfaml0X29uPSVkXG4iLCBwLT5wY3JlMV9qaXRfb24pOworCisJaWYgKHAtPnBjcmUxX2ppdF9vbikKKwkJc3R1ZHlfb3B0aW9ucyA9IFBDUkVfU1RVRFlfSklUX0NPTVBJTEU7CisjZW5kaWYKKworCXAtPnBjcmUxX2V4dHJhX2luZm8gPSBwY3JlX3N0dWR5KHAtPnBjcmUxX3JlZ2V4cCwgc3R1ZHlfb3B0aW9ucywgJmVycm9yKTsKKwlpZiAoIXAtPnBjcmUxX2V4dHJhX2luZm8gJiYgZXJyb3IpCisJCWRpZSgiJXMiLCBlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQgcGNyZTFtYXRjaChzdHJ1Y3QgZ3JlcF9wYXQgKnAsIGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKmVvbCwKKwkJcmVnbWF0Y2hfdCAqbWF0Y2gsIGludCBlZmxhZ3MpCit7CisJaW50IG92ZWN0b3JbMzBdLCByZXQsIGZsYWdzID0gUENSRV9OT19VVEY4X0NIRUNLOworCisJaWYgKGVmbGFncyAmIFJFR19OT1RCT0wpCisJCWZsYWdzIHw9IFBDUkVfTk9UQk9MOworCisJcmV0ID0gcGNyZV9leGVjKHAtPnBjcmUxX3JlZ2V4cCwgcC0+cGNyZTFfZXh0cmFfaW5mbywgbGluZSwKKwkJCWVvbCAtIGxpbmUsIDAsIGZsYWdzLCBvdmVjdG9yLAorCQkJQVJSQVlfU0laRShvdmVjdG9yKSk7CisKKwlpZiAocmV0IDwgMCAmJiByZXQgIT0gUENSRV9FUlJPUl9OT01BVENIKQorCQlkaWUoInBjcmVfZXhlYyBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkIiwgcmV0KTsKKwlpZiAocmV0ID4gMCkgeworCQlyZXQgPSAwOworCQltYXRjaC0+cm1fc28gPSBvdmVjdG9yWzBdOworCQltYXRjaC0+cm1fZW8gPSBvdmVjdG9yWzFdOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcGNyZTFfcmVnZXhwKHN0cnVjdCBncmVwX3BhdCAqcCkKK3sKKwlwY3JlX2ZyZWUocC0+cGNyZTFfcmVnZXhwKTsKKyNpZmRlZiBQQ1JFX0NPTkZJR19KSVQKKwlpZiAocC0+cGNyZTFfaml0X29uKQorCQlwY3JlX2ZyZWVfc3R1ZHkocC0+cGNyZTFfZXh0cmFfaW5mbyk7CisJZWxzZQorI2VuZGlmCisJCXBjcmVfZnJlZShwLT5wY3JlMV9leHRyYV9pbmZvKTsKKwlwY3JlX2ZyZWUoKHZvaWQgKilwLT5wY3JlMV90YWJsZXMpOworfQorI2Vsc2UgLyogIVVTRV9MSUJQQ1JFMSAqLworc3RhdGljIHZvaWQgY29tcGlsZV9wY3JlMV9yZWdleHAoc3RydWN0IGdyZXBfcGF0ICpwLCBjb25zdCBzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKK3sKKwlkaWUoImNhbm5vdCB1c2UgUGVybC1jb21wYXRpYmxlIHJlZ2V4ZXMgd2hlbiBub3QgY29tcGlsZWQgd2l0aCBVU0VfTElCUENSRSIpOworfQorCitzdGF0aWMgaW50IHBjcmUxbWF0Y2goc3RydWN0IGdyZXBfcGF0ICpwLCBjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICplb2wsCisJCXJlZ21hdGNoX3QgKm1hdGNoLCBpbnQgZWZsYWdzKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3BjcmUxX3JlZ2V4cChzdHJ1Y3QgZ3JlcF9wYXQgKnApCit7Cit9CisjZW5kaWYgLyogIVVTRV9MSUJQQ1JFMSAqLworCisjaWZkZWYgVVNFX0xJQlBDUkUyCitzdGF0aWMgdm9pZCBjb21waWxlX3BjcmUyX3BhdHRlcm4oc3RydWN0IGdyZXBfcGF0ICpwLCBjb25zdCBzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKK3sKKwlpbnQgZXJyb3I7CisJUENSRTJfVUNIQVIgZXJyYnVmWzI1Nl07CisJUENSRTJfU0laRSBlcnJvZmZzZXQ7CisJaW50IG9wdGlvbnMgPSBQQ1JFMl9NVUxUSUxJTkU7CisJaW50IGppdHJldDsKKwlpbnQgcGF0aW5mb3JldDsKKwlzaXplX3Qgaml0c2l6ZWFyZzsKKworCWFzc2VydChvcHQtPnBjcmUyKTsKKworCXAtPnBjcmUyX2NvbXBpbGVfY29udGV4dCA9IE5VTEw7CisKKwkvKiBwY3JlMl9nbG9iYWxfY29udGV4dCBpcyBpbml0aWFsaXplZCBpbiBhcHBlbmRfZ3JlcF9wYXR0ZXJuICovCisJaWYgKG9wdC0+aWdub3JlX2Nhc2UpIHsKKwkJaWYgKCFvcHQtPmlnbm9yZV9sb2NhbGUgJiYgaGFzX25vbl9hc2NpaShwLT5wYXR0ZXJuKSkgeworCQkJaWYgKCFwY3JlMl9nbG9iYWxfY29udGV4dCkKKwkJCQlCVUcoInBjcmUyX2dsb2JhbF9jb250ZXh0IHVuaW5pdGlhbGl6ZWQiKTsKKwkJCXAtPnBjcmUyX3RhYmxlcyA9IHBjcmUyX21ha2V0YWJsZXMocGNyZTJfZ2xvYmFsX2NvbnRleHQpOworCQkJcC0+cGNyZTJfY29tcGlsZV9jb250ZXh0ID0gcGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZShOVUxMKTsKKwkJCXBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzKHAtPnBjcmUyX2NvbXBpbGVfY29udGV4dCwKKwkJCQkJCQlwLT5wY3JlMl90YWJsZXMpOworCQl9CisJCW9wdGlvbnMgfD0gUENSRTJfQ0FTRUxFU1M7CisJfQorCWlmICghb3B0LT5pZ25vcmVfbG9jYWxlICYmIGlzX3V0ZjhfbG9jYWxlKCkgJiYgaGFzX25vbl9hc2NpaShwLT5wYXR0ZXJuKSAmJgorCSAgICAhKCFvcHQtPmlnbm9yZV9jYXNlICYmIChwLT5maXhlZCB8fCBwLT5pc19maXhlZCkpKQorCQlvcHRpb25zIHw9IFBDUkUyX1VURjsKKworCXAtPnBjcmUyX3BhdHRlcm4gPSBwY3JlMl9jb21waWxlKChQQ1JFMl9TUFRSKXAtPnBhdHRlcm4sCisJCQkJCSBwLT5wYXR0ZXJubGVuLCBvcHRpb25zLCAmZXJyb3IsICZlcnJvZmZzZXQsCisJCQkJCSBwLT5wY3JlMl9jb21waWxlX2NvbnRleHQpOworCisJaWYgKHAtPnBjcmUyX3BhdHRlcm4pIHsKKwkJcC0+cGNyZTJfbWF0Y2hfZGF0YSA9IHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybihwLT5wY3JlMl9wYXR0ZXJuLCBOVUxMKTsKKwkJaWYgKCFwLT5wY3JlMl9tYXRjaF9kYXRhKQorCQkJZGllKCJDb3VsZG4ndCBhbGxvY2F0ZSBQQ1JFMiBtYXRjaCBkYXRhIik7CisJfSBlbHNlIHsKKwkJcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoZXJyb3IsIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpOworCQljb21waWxlX3JlZ2V4cF9mYWlsZWQocCwgKGNvbnN0IGNoYXIgKikmZXJyYnVmKTsKKwl9CisKKwlwY3JlMl9jb25maWcoUENSRTJfQ09ORklHX0pJVCwgJnAtPnBjcmUyX2ppdF9vbik7CisJaWYgKG9wdC0+ZGVidWcpCisJCWZwcmludGYoc3RkZXJyLCAicGNyZTJfaml0X29uPSVkXG4iLCBwLT5wY3JlMl9qaXRfb24pOworCWlmIChwLT5wY3JlMl9qaXRfb24pIHsKKwkJaml0cmV0ID0gcGNyZTJfaml0X2NvbXBpbGUocC0+cGNyZTJfcGF0dGVybiwgUENSRTJfSklUX0NPTVBMRVRFKTsKKwkJaWYgKGppdHJldCkKKwkJCWRpZSgiQ291bGRuJ3QgSklUIHRoZSBQQ1JFMiBwYXR0ZXJuICclcycsIGdvdCAnJWQnXG4iLCBwLT5wYXR0ZXJuLCBqaXRyZXQpOworCisJCS8qCisJCSAqIFRoZSBwY3JlMl9jb25maWcoUENSRTJfQ09ORklHX0pJVCwgLi4uKSBjYWxsIGp1c3QKKwkJICogdGVsbHMgdXMgd2hldGhlciB0aGUgbGlicmFyeSBpdHNlbGYgc3VwcG9ydHMgSklULAorCQkgKiBidXQgdG8gc2VlIHdoZXRoZXIgd2UncmUgZ29pbmcgdG8gYmUgYWN0dWFsbHkgdXNpbmcKKwkJICogSklUIHdlIG5lZWQgdG8gZXh0cmFjdCBQQ1JFMl9JTkZPX0pJVFNJWkUgZnJvbSB0aGUKKwkJICogcGF0dGVybiAqYWZ0ZXIqIHdlIGRvIHBjcmUyX2ppdF9jb21waWxlKCkgYWJvdmUuCisJCSAqCisJCSAqIFRoaXMgaXMgYmVjYXVzZSBpZiB0aGUgcGF0dGVybiBjb250YWlucyB0aGUKKwkJICogKCpOT19KSVQpIHZlcmIgKHNlZSBwY3JlMnN5bnRheCgzKSkKKwkJICogcGNyZTJfaml0X2NvbXBpbGUoKSB3aWxsIGV4aXQgZWFybHkgd2l0aCAwLiBJZiB3ZQorCQkgKiB0aGVuIHByb2NlZWQgdG8gY2FsbCBwY3JlMl9qaXRfbWF0Y2goKSBmdXJ0aGVyIGRvd24KKwkJICogdGhlIGxpbmUgaW5zdGVhZCBvZiBwY3JlMl9tYXRjaCgpIHdlJ2xsIGVpdGhlcgorCQkgKiBzZWdmYXVsdCAocHJlIFBDUkUgMTAuMzEpIG9yIHJ1biBpbnRvIGEgZmF0YWwgZXJyb3IKKwkJICogKHBvc3QgUENSRTIgMTAuMzEpCisJCSAqLworCQlwYXRpbmZvcmV0ID0gcGNyZTJfcGF0dGVybl9pbmZvKHAtPnBjcmUyX3BhdHRlcm4sIFBDUkUyX0lORk9fSklUU0laRSwgJmppdHNpemVhcmcpOworCQlpZiAocGF0aW5mb3JldCkKKwkJCUJVRygicGNyZTJfcGF0dGVybl9pbmZvKCkgZmFpbGVkOiAlZCIsIHBhdGluZm9yZXQpOworCQlpZiAoaml0c2l6ZWFyZyA9PSAwKSB7CisJCQlwLT5wY3JlMl9qaXRfb24gPSAwOworCQkJaWYgKG9wdC0+ZGVidWcpCisJCQkJZnByaW50ZihzdGRlcnIsICJwY3JlMl9qaXRfb249JWQ6ICgqTk9fSklUKSBpbiByZWdleFxuIiwKKwkJCQkJcC0+cGNyZTJfaml0X29uKTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBwY3JlMm1hdGNoKHN0cnVjdCBncmVwX3BhdCAqcCwgY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hhciAqZW9sLAorCQlyZWdtYXRjaF90ICptYXRjaCwgaW50IGVmbGFncykKK3sKKwlpbnQgcmV0LCBmbGFncyA9IDA7CisJUENSRTJfU0laRSAqb3ZlY3RvcjsKKwlQQ1JFMl9VQ0hBUiBlcnJidWZbMjU2XTsKKworCWlmIChlZmxhZ3MgJiBSRUdfTk9UQk9MKQorCQlmbGFncyB8PSBQQ1JFMl9OT1RCT0w7CisKKwlpZiAocC0+cGNyZTJfaml0X29uKQorCQlyZXQgPSBwY3JlMl9qaXRfbWF0Y2gocC0+cGNyZTJfcGF0dGVybiwgKHVuc2lnbmVkIGNoYXIgKilsaW5lLAorCQkJCSAgICAgIGVvbCAtIGxpbmUsIDAsIGZsYWdzLCBwLT5wY3JlMl9tYXRjaF9kYXRhLAorCQkJCSAgICAgIE5VTEwpOworCWVsc2UKKwkJcmV0ID0gcGNyZTJfbWF0Y2gocC0+cGNyZTJfcGF0dGVybiwgKHVuc2lnbmVkIGNoYXIgKilsaW5lLAorCQkJCSAgZW9sIC0gbGluZSwgMCwgZmxhZ3MsIHAtPnBjcmUyX21hdGNoX2RhdGEsCisJCQkJICBOVUxMKTsKKworCWlmIChyZXQgPCAwICYmIHJldCAhPSBQQ1JFMl9FUlJPUl9OT01BVENIKSB7CisJCXBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKHJldCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CisJCWRpZSgiJXMgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZDogJXMiLAorCQkgICAgKHAtPnBjcmUyX2ppdF9vbiA/ICJwY3JlMl9qaXRfbWF0Y2giIDogInBjcmUyX21hdGNoIiksIHJldCwKKwkJICAgIGVycmJ1Zik7CisJfQorCWlmIChyZXQgPiAwKSB7CisJCW92ZWN0b3IgPSBwY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyKHAtPnBjcmUyX21hdGNoX2RhdGEpOworCQlyZXQgPSAwOworCQltYXRjaC0+cm1fc28gPSAoaW50KW92ZWN0b3JbMF07CisJCW1hdGNoLT5ybV9lbyA9IChpbnQpb3ZlY3RvclsxXTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBmcmVlX3BjcmUyX3BhdHRlcm4oc3RydWN0IGdyZXBfcGF0ICpwKQoreworCXBjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlKHAtPnBjcmUyX2NvbXBpbGVfY29udGV4dCk7CisJcGNyZTJfY29kZV9mcmVlKHAtPnBjcmUyX3BhdHRlcm4pOworCXBjcmUyX21hdGNoX2RhdGFfZnJlZShwLT5wY3JlMl9tYXRjaF9kYXRhKTsKKwlmcmVlKCh2b2lkICopcC0+cGNyZTJfdGFibGVzKTsKK30KKyNlbHNlIC8qICFVU0VfTElCUENSRTIgKi8KK3N0YXRpYyB2b2lkIGNvbXBpbGVfcGNyZTJfcGF0dGVybihzdHJ1Y3QgZ3JlcF9wYXQgKnAsIGNvbnN0IHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCS8qCisJICogVW5yZWFjaGFibGUgdW50aWwgVVNFX0xJQlBDUkUyIGJlY29tZXMgc3lub255bW91cyB3aXRoCisJICogVVNFX0xJQlBDUkUuIFNlZSB0aGUgc2libGluZyBjb21tZW50IGluCisJICogZ3JlcF9zZXRfcGF0dGVybl90eXBlX29wdGlvbigpLgorCSAqLworCWRpZSgiY2Fubm90IHVzZSBQZXJsLWNvbXBhdGlibGUgcmVnZXhlcyB3aGVuIG5vdCBjb21waWxlZCB3aXRoIFVTRV9MSUJQQ1JFIik7Cit9CisKK3N0YXRpYyBpbnQgcGNyZTJtYXRjaChzdHJ1Y3QgZ3JlcF9wYXQgKnAsIGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKmVvbCwKKwkJcmVnbWF0Y2hfdCAqbWF0Y2gsIGludCBlZmxhZ3MpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcGNyZTJfcGF0dGVybihzdHJ1Y3QgZ3JlcF9wYXQgKnApCit7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBpbGVfZml4ZWRfcmVnZXhwKHN0cnVjdCBncmVwX3BhdCAqcCwgc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCBlcnI7CisJaW50IHJlZ2ZsYWdzID0gMDsKKworCWJhc2ljX3JlZ2V4X3F1b3RlX2J1Zigmc2IsIHAtPnBhdHRlcm4pOworCWlmIChvcHQtPmlnbm9yZV9jYXNlKQorCQlyZWdmbGFncyB8PSBSRUdfSUNBU0U7CisJZXJyID0gcmVnY29tcCgmcC0+cmVnZXhwLCBzYi5idWYsIHJlZ2ZsYWdzKTsKKwlpZiAob3B0LT5kZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsICJmaXhlZCAlc1xuIiwgc2IuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWlmIChlcnIpIHsKKwkJY2hhciBlcnJidWZbMTAyNF07CisJCXJlZ2Vycm9yKGVyciwgJnAtPnJlZ2V4cCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CisJCWNvbXBpbGVfcmVnZXhwX2ZhaWxlZChwLCBlcnJidWYpOworCX0KK30KKyNlbmRpZiAvKiAhVVNFX0xJQlBDUkUyICovCisKK3N0YXRpYyB2b2lkIGNvbXBpbGVfcmVnZXhwKHN0cnVjdCBncmVwX3BhdCAqcCwgc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJaW50IGVycjsKKwlpbnQgcmVnZmxhZ3MgPSBSRUdfTkVXTElORTsKKworCXAtPndvcmRfcmVnZXhwID0gb3B0LT53b3JkX3JlZ2V4cDsKKwlwLT5pZ25vcmVfY2FzZSA9IG9wdC0+aWdub3JlX2Nhc2U7CisJcC0+Zml4ZWQgPSBvcHQtPmZpeGVkOworCisJaWYgKG1lbWNocihwLT5wYXR0ZXJuLCAwLCBwLT5wYXR0ZXJubGVuKSAmJiAhb3B0LT5wY3JlMikKKwkJZGllKF8oImdpdmVuIHBhdHRlcm4gY29udGFpbnMgTlVMTCBieXRlICh2aWEgLWYgPGZpbGU+KS4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCB3aXRoIC1QIHVuZGVyIFBDUkUgdjIiKSk7CisKKwlwLT5pc19maXhlZCA9IGlzX2ZpeGVkKHAtPnBhdHRlcm4sIHAtPnBhdHRlcm5sZW4pOworI2lmZGVmIFVTRV9MSUJQQ1JFMgorICAgICAgIGlmICghcC0+Zml4ZWQgJiYgIXAtPmlzX2ZpeGVkKSB7CisJICAgICAgIGNvbnN0IGNoYXIgKm5vX2ppdCA9ICIoKk5PX0pJVCkiOworCSAgICAgICBjb25zdCBpbnQgbm9faml0X2xlbiA9IHN0cmxlbihub19qaXQpOworCSAgICAgICBpZiAoc3RhcnRzX3dpdGgocC0+cGF0dGVybiwgbm9faml0KSAmJgorCQkgICBpc19maXhlZChwLT5wYXR0ZXJuICsgbm9faml0X2xlbiwKKwkJCSAgICBwLT5wYXR0ZXJubGVuIC0gbm9faml0X2xlbikpCisJCSAgICAgICBwLT5pc19maXhlZCA9IDE7CisgICAgICAgfQorI2VuZGlmCisJaWYgKHAtPmZpeGVkIHx8IHAtPmlzX2ZpeGVkKSB7CisjaWZkZWYgVVNFX0xJQlBDUkUyCisJCW9wdC0+cGNyZTIgPSAxOworCQlpZiAocC0+aXNfZml4ZWQpIHsKKwkJCWNvbXBpbGVfcGNyZTJfcGF0dGVybihwLCBvcHQpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEUuZy4gdDc4MTEtZ3JlcC1vcGVuLnNoIHJlbGllcyBvbiB0aGUKKwkJCSAqIHBhdHRlcm4gYmVpbmcgcmVzdG9yZWQuCisJCQkgKi8KKwkJCWNoYXIgKm9sZF9wYXR0ZXJuID0gcC0+cGF0dGVybjsKKwkJCXNpemVfdCBvbGRfcGF0dGVybmxlbiA9IHAtPnBhdHRlcm5sZW47CisJCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJCS8qCisJCQkgKiBUaGVyZSBpcyB0aGUgUENSRTJfTElURVJBTCBmbGFnLCBidXQgaXQncworCQkJICogb25seSBpbiBQQ1JFIHYyIDEwLjMwIGFuZCBsYXRlci4gTmVlZGluZyB0bworCQkJICogaWZkZWYgb3VyIHdheSBhcm91bmQgdGhhdCBhbmQgZGVhbGluZyB3aXRoCisJCQkgKiBpdCArIFBDUkUyX01VTFRJTElORSBiZWluZyBhbiBlcnJvciBpcyBtb3JlCisJCQkgKiBjb21wbGV4IHRoYW4ganVzdCBxdW90aW5nIHRoaXMgb3Vyc2VsdmVzLgorCQkJKi8KKwkJCXN0cmJ1Zl9hZGQoJnNiLCAiXFxRIiwgMik7CisJCQlzdHJidWZfYWRkKCZzYiwgcC0+cGF0dGVybiwgcC0+cGF0dGVybmxlbik7CisJCQlzdHJidWZfYWRkKCZzYiwgIlxcRSIsIDIpOworCisJCQlwLT5wYXR0ZXJuID0gc2IuYnVmOworCQkJcC0+cGF0dGVybmxlbiA9IHNiLmxlbjsKKwkJCWNvbXBpbGVfcGNyZTJfcGF0dGVybihwLCBvcHQpOworCQkJcC0+cGF0dGVybiA9IG9sZF9wYXR0ZXJuOworCQkJcC0+cGF0dGVybmxlbiA9IG9sZF9wYXR0ZXJubGVuOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJfQorI2Vsc2UgLyogIVVTRV9MSUJQQ1JFMiAqLworCQljb21waWxlX2ZpeGVkX3JlZ2V4cChwLCBvcHQpOworI2VuZGlmIC8qICFVU0VfTElCUENSRTIgKi8KKwkJcmV0dXJuOworCX0KKworCWlmIChvcHQtPnBjcmUyKSB7CisJCWNvbXBpbGVfcGNyZTJfcGF0dGVybihwLCBvcHQpOworCQlyZXR1cm47CisJfQorCisJaWYgKG9wdC0+cGNyZTEpIHsKKwkJY29tcGlsZV9wY3JlMV9yZWdleHAocCwgb3B0KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwLT5pZ25vcmVfY2FzZSkKKwkJcmVnZmxhZ3MgfD0gUkVHX0lDQVNFOworCWlmIChvcHQtPmV4dGVuZGVkX3JlZ2V4cF9vcHRpb24pCisJCXJlZ2ZsYWdzIHw9IFJFR19FWFRFTkRFRDsKKwllcnIgPSByZWdjb21wKCZwLT5yZWdleHAsIHAtPnBhdHRlcm4sIHJlZ2ZsYWdzKTsKKwlpZiAoZXJyKSB7CisJCWNoYXIgZXJyYnVmWzEwMjRdOworCQlyZWdlcnJvcihlcnIsICZwLT5yZWdleHAsIGVycmJ1ZiwgMTAyNCk7CisJCWNvbXBpbGVfcmVnZXhwX2ZhaWxlZChwLCBlcnJidWYpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBncmVwX2V4cHIgKmNvbXBpbGVfcGF0dGVybl9vcihzdHJ1Y3QgZ3JlcF9wYXQgKiopOworc3RhdGljIHN0cnVjdCBncmVwX2V4cHIgKmNvbXBpbGVfcGF0dGVybl9hdG9tKHN0cnVjdCBncmVwX3BhdCAqKmxpc3QpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwOworCXN0cnVjdCBncmVwX2V4cHIgKng7CisKKwlwID0gKmxpc3Q7CisJaWYgKCFwKQorCQlyZXR1cm4gTlVMTDsKKwlzd2l0Y2ggKHAtPnRva2VuKSB7CisJY2FzZSBHUkVQX1BBVFRFUk46IC8qIGF0b20gKi8KKwljYXNlIEdSRVBfUEFUVEVSTl9IRUFEOgorCWNhc2UgR1JFUF9QQVRURVJOX0JPRFk6CisJCXggPSB4Y2FsbG9jKDEsIHNpemVvZiAoc3RydWN0IGdyZXBfZXhwcikpOworCQl4LT5ub2RlID0gR1JFUF9OT0RFX0FUT007CisJCXgtPnUuYXRvbSA9IHA7CisJCSpsaXN0ID0gcC0+bmV4dDsKKwkJcmV0dXJuIHg7CisJY2FzZSBHUkVQX09QRU5fUEFSRU46CisJCSpsaXN0ID0gcC0+bmV4dDsKKwkJeCA9IGNvbXBpbGVfcGF0dGVybl9vcihsaXN0KTsKKwkJaWYgKCEqbGlzdCB8fCAoKmxpc3QpLT50b2tlbiAhPSBHUkVQX0NMT1NFX1BBUkVOKQorCQkJZGllKCJ1bm1hdGNoZWQgcGFyZW50aGVzaXMiKTsKKwkJKmxpc3QgPSAoKmxpc3QpLT5uZXh0OworCQlyZXR1cm4geDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3JlcF9leHByICpjb21waWxlX3BhdHRlcm5fbm90KHN0cnVjdCBncmVwX3BhdCAqKmxpc3QpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwOworCXN0cnVjdCBncmVwX2V4cHIgKng7CisKKwlwID0gKmxpc3Q7CisJaWYgKCFwKQorCQlyZXR1cm4gTlVMTDsKKwlzd2l0Y2ggKHAtPnRva2VuKSB7CisJY2FzZSBHUkVQX05PVDoKKwkJaWYgKCFwLT5uZXh0KQorCQkJZGllKCItLW5vdCBub3QgZm9sbG93ZWQgYnkgcGF0dGVybiBleHByZXNzaW9uIik7CisJCSpsaXN0ID0gcC0+bmV4dDsKKwkJeCA9IHhjYWxsb2MoMSwgc2l6ZW9mIChzdHJ1Y3QgZ3JlcF9leHByKSk7CisJCXgtPm5vZGUgPSBHUkVQX05PREVfTk9UOworCQl4LT51LnVuYXJ5ID0gY29tcGlsZV9wYXR0ZXJuX25vdChsaXN0KTsKKwkJaWYgKCF4LT51LnVuYXJ5KQorCQkJZGllKCItLW5vdCBmb2xsb3dlZCBieSBub24gcGF0dGVybiBleHByZXNzaW9uIik7CisJCXJldHVybiB4OworCWRlZmF1bHQ6CisJCXJldHVybiBjb21waWxlX3BhdHRlcm5fYXRvbShsaXN0KTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3JlcF9leHByICpjb21waWxlX3BhdHRlcm5fYW5kKHN0cnVjdCBncmVwX3BhdCAqKmxpc3QpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwOworCXN0cnVjdCBncmVwX2V4cHIgKngsICp5LCAqejsKKworCXggPSBjb21waWxlX3BhdHRlcm5fbm90KGxpc3QpOworCXAgPSAqbGlzdDsKKwlpZiAocCAmJiBwLT50b2tlbiA9PSBHUkVQX0FORCkgeworCQlpZiAoIXAtPm5leHQpCisJCQlkaWUoIi0tYW5kIG5vdCBmb2xsb3dlZCBieSBwYXR0ZXJuIGV4cHJlc3Npb24iKTsKKwkJKmxpc3QgPSBwLT5uZXh0OworCQl5ID0gY29tcGlsZV9wYXR0ZXJuX2FuZChsaXN0KTsKKwkJaWYgKCF5KQorCQkJZGllKCItLWFuZCBub3QgZm9sbG93ZWQgYnkgcGF0dGVybiBleHByZXNzaW9uIik7CisJCXogPSB4Y2FsbG9jKDEsIHNpemVvZiAoc3RydWN0IGdyZXBfZXhwcikpOworCQl6LT5ub2RlID0gR1JFUF9OT0RFX0FORDsKKwkJei0+dS5iaW5hcnkubGVmdCA9IHg7CisJCXotPnUuYmluYXJ5LnJpZ2h0ID0geTsKKwkJcmV0dXJuIHo7CisJfQorCXJldHVybiB4OworfQorCitzdGF0aWMgc3RydWN0IGdyZXBfZXhwciAqY29tcGlsZV9wYXR0ZXJuX29yKHN0cnVjdCBncmVwX3BhdCAqKmxpc3QpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwOworCXN0cnVjdCBncmVwX2V4cHIgKngsICp5LCAqejsKKworCXggPSBjb21waWxlX3BhdHRlcm5fYW5kKGxpc3QpOworCXAgPSAqbGlzdDsKKwlpZiAoeCAmJiBwICYmIHAtPnRva2VuICE9IEdSRVBfQ0xPU0VfUEFSRU4pIHsKKwkJeSA9IGNvbXBpbGVfcGF0dGVybl9vcihsaXN0KTsKKwkJaWYgKCF5KQorCQkJZGllKCJub3QgYSBwYXR0ZXJuIGV4cHJlc3Npb24gJXMiLCBwLT5wYXR0ZXJuKTsKKwkJeiA9IHhjYWxsb2MoMSwgc2l6ZW9mIChzdHJ1Y3QgZ3JlcF9leHByKSk7CisJCXotPm5vZGUgPSBHUkVQX05PREVfT1I7CisJCXotPnUuYmluYXJ5LmxlZnQgPSB4OworCQl6LT51LmJpbmFyeS5yaWdodCA9IHk7CisJCXJldHVybiB6OworCX0KKwlyZXR1cm4geDsKK30KKworc3RhdGljIHN0cnVjdCBncmVwX2V4cHIgKmNvbXBpbGVfcGF0dGVybl9leHByKHN0cnVjdCBncmVwX3BhdCAqKmxpc3QpCit7CisJcmV0dXJuIGNvbXBpbGVfcGF0dGVybl9vcihsaXN0KTsKK30KKworc3RhdGljIHZvaWQgaW5kZW50KGludCBpbikKK3sKKwl3aGlsZSAoaW4tLSA+IDApCisJCWZwdXRjKCcgJywgc3RkZXJyKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9ncmVwX3BhdChzdHJ1Y3QgZ3JlcF9wYXQgKnApCit7CisJc3dpdGNoIChwLT50b2tlbikgeworCWNhc2UgR1JFUF9BTkQ6IGZwcmludGYoc3RkZXJyLCAiKmFuZCoiKTsgYnJlYWs7CisJY2FzZSBHUkVQX09QRU5fUEFSRU46IGZwcmludGYoc3RkZXJyLCAiKigqIik7IGJyZWFrOworCWNhc2UgR1JFUF9DTE9TRV9QQVJFTjogZnByaW50ZihzdGRlcnIsICIqKSoiKTsgYnJlYWs7CisJY2FzZSBHUkVQX05PVDogZnByaW50ZihzdGRlcnIsICIqbm90KiIpOyBicmVhazsKKwljYXNlIEdSRVBfT1I6IGZwcmludGYoc3RkZXJyLCAiKm9yKiIpOyBicmVhazsKKworCWNhc2UgR1JFUF9QQVRURVJOOiBmcHJpbnRmKHN0ZGVyciwgInBhdHRlcm4iKTsgYnJlYWs7CisJY2FzZSBHUkVQX1BBVFRFUk5fSEVBRDogZnByaW50ZihzdGRlcnIsICJwYXR0ZXJuX2hlYWQiKTsgYnJlYWs7CisJY2FzZSBHUkVQX1BBVFRFUk5fQk9EWTogZnByaW50ZihzdGRlcnIsICJwYXR0ZXJuX2JvZHkiKTsgYnJlYWs7CisJfQorCisJc3dpdGNoIChwLT50b2tlbikgeworCWRlZmF1bHQ6IGJyZWFrOworCWNhc2UgR1JFUF9QQVRURVJOX0hFQUQ6CisJCWZwcmludGYoc3RkZXJyLCAiPGhlYWQgJWQ+IiwgcC0+ZmllbGQpOyBicmVhazsKKwljYXNlIEdSRVBfUEFUVEVSTl9CT0RZOgorCQlmcHJpbnRmKHN0ZGVyciwgIjxib2R5PiIpOyBicmVhazsKKwl9CisJc3dpdGNoIChwLT50b2tlbikgeworCWRlZmF1bHQ6IGJyZWFrOworCWNhc2UgR1JFUF9QQVRURVJOX0hFQUQ6CisJY2FzZSBHUkVQX1BBVFRFUk5fQk9EWToKKwljYXNlIEdSRVBfUEFUVEVSTjoKKwkJZnByaW50ZihzdGRlcnIsICIlLipzIiwgKGludClwLT5wYXR0ZXJubGVuLCBwLT5wYXR0ZXJuKTsKKwkJYnJlYWs7CisJfQorCWZwdXRjKCdcbicsIHN0ZGVycik7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfZ3JlcF9leHByZXNzaW9uXzEoc3RydWN0IGdyZXBfZXhwciAqeCwgaW50IGluKQoreworCWluZGVudChpbik7CisJc3dpdGNoICh4LT5ub2RlKSB7CisJY2FzZSBHUkVQX05PREVfVFJVRToKKwkJZnByaW50ZihzdGRlcnIsICJ0cnVlXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBHUkVQX05PREVfQVRPTToKKwkJZHVtcF9ncmVwX3BhdCh4LT51LmF0b20pOworCQlicmVhazsKKwljYXNlIEdSRVBfTk9ERV9OT1Q6CisJCWZwcmludGYoc3RkZXJyLCAiKG5vdFxuIik7CisJCWR1bXBfZ3JlcF9leHByZXNzaW9uXzEoeC0+dS51bmFyeSwgaW4rMSk7CisJCWluZGVudChpbik7CisJCWZwcmludGYoc3RkZXJyLCAiKVxuIik7CisJCWJyZWFrOworCWNhc2UgR1JFUF9OT0RFX0FORDoKKwkJZnByaW50ZihzdGRlcnIsICIoYW5kXG4iKTsKKwkJZHVtcF9ncmVwX2V4cHJlc3Npb25fMSh4LT51LmJpbmFyeS5sZWZ0LCBpbisxKTsKKwkJZHVtcF9ncmVwX2V4cHJlc3Npb25fMSh4LT51LmJpbmFyeS5yaWdodCwgaW4rMSk7CisJCWluZGVudChpbik7CisJCWZwcmludGYoc3RkZXJyLCAiKVxuIik7CisJCWJyZWFrOworCWNhc2UgR1JFUF9OT0RFX09SOgorCQlmcHJpbnRmKHN0ZGVyciwgIihvclxuIik7CisJCWR1bXBfZ3JlcF9leHByZXNzaW9uXzEoeC0+dS5iaW5hcnkubGVmdCwgaW4rMSk7CisJCWR1bXBfZ3JlcF9leHByZXNzaW9uXzEoeC0+dS5iaW5hcnkucmlnaHQsIGluKzEpOworCQlpbmRlbnQoaW4pOworCQlmcHJpbnRmKHN0ZGVyciwgIilcbiIpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfZ3JlcF9leHByZXNzaW9uKHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCXN0cnVjdCBncmVwX2V4cHIgKnggPSBvcHQtPnBhdHRlcm5fZXhwcmVzc2lvbjsKKworCWlmIChvcHQtPmFsbF9tYXRjaCkKKwkJZnByaW50ZihzdGRlcnIsICJbYWxsLW1hdGNoXVxuIik7CisJZHVtcF9ncmVwX2V4cHJlc3Npb25fMSh4LCAwKTsKKwlmZmx1c2goTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3JlcF9leHByICpncmVwX3RydWVfZXhwcih2b2lkKQoreworCXN0cnVjdCBncmVwX2V4cHIgKnogPSB4Y2FsbG9jKDEsIHNpemVvZigqeikpOworCXotPm5vZGUgPSBHUkVQX05PREVfVFJVRTsKKwlyZXR1cm4gejsKK30KKworc3RhdGljIHN0cnVjdCBncmVwX2V4cHIgKmdyZXBfb3JfZXhwcihzdHJ1Y3QgZ3JlcF9leHByICpsZWZ0LCBzdHJ1Y3QgZ3JlcF9leHByICpyaWdodCkKK3sKKwlzdHJ1Y3QgZ3JlcF9leHByICp6ID0geGNhbGxvYygxLCBzaXplb2YoKnopKTsKKwl6LT5ub2RlID0gR1JFUF9OT0RFX09SOworCXotPnUuYmluYXJ5LmxlZnQgPSBsZWZ0OworCXotPnUuYmluYXJ5LnJpZ2h0ID0gcmlnaHQ7CisJcmV0dXJuIHo7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3JlcF9leHByICpwcmVwX2hlYWRlcl9wYXR0ZXJucyhzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKK3sKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnA7CisJc3RydWN0IGdyZXBfZXhwciAqaGVhZGVyX2V4cHI7CisJc3RydWN0IGdyZXBfZXhwciAqKGhlYWRlcl9ncm91cFtHUkVQX0hFQURFUl9GSUVMRF9NQVhdKTsKKwllbnVtIGdyZXBfaGVhZGVyX2ZpZWxkIGZsZDsKKworCWlmICghb3B0LT5oZWFkZXJfbGlzdCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKHAgPSBvcHQtPmhlYWRlcl9saXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+dG9rZW4gIT0gR1JFUF9QQVRURVJOX0hFQUQpCisJCQlCVUcoImEgbm9uLWhlYWRlciBwYXR0ZXJuIGluIGdyZXAgaGVhZGVyIGxpc3QuIik7CisJCWlmIChwLT5maWVsZCA8IEdSRVBfSEVBREVSX0ZJRUxEX01JTiB8fAorCQkgICAgR1JFUF9IRUFERVJfRklFTERfTUFYIDw9IHAtPmZpZWxkKQorCQkJQlVHKCJ1bmtub3duIGhlYWRlciBmaWVsZCAlZCIsIHAtPmZpZWxkKTsKKwkJY29tcGlsZV9yZWdleHAocCwgb3B0KTsKKwl9CisKKwlmb3IgKGZsZCA9IDA7IGZsZCA8IEdSRVBfSEVBREVSX0ZJRUxEX01BWDsgZmxkKyspCisJCWhlYWRlcl9ncm91cFtmbGRdID0gTlVMTDsKKworCWZvciAocCA9IG9wdC0+aGVhZGVyX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBncmVwX2V4cHIgKmg7CisJCXN0cnVjdCBncmVwX3BhdCAqcHAgPSBwOworCisJCWggPSBjb21waWxlX3BhdHRlcm5fYXRvbSgmcHApOworCQlpZiAoIWggfHwgcHAgIT0gcC0+bmV4dCkKKwkJCUJVRygibWFsZm9ybWVkIGhlYWRlciBleHByIik7CisJCWlmICghaGVhZGVyX2dyb3VwW3AtPmZpZWxkXSkgeworCQkJaGVhZGVyX2dyb3VwW3AtPmZpZWxkXSA9IGg7CisJCQljb250aW51ZTsKKwkJfQorCQloZWFkZXJfZ3JvdXBbcC0+ZmllbGRdID0gZ3JlcF9vcl9leHByKGgsIGhlYWRlcl9ncm91cFtwLT5maWVsZF0pOworCX0KKworCWhlYWRlcl9leHByID0gTlVMTDsKKworCWZvciAoZmxkID0gMDsgZmxkIDwgR1JFUF9IRUFERVJfRklFTERfTUFYOyBmbGQrKykgeworCQlpZiAoIWhlYWRlcl9ncm91cFtmbGRdKQorCQkJY29udGludWU7CisJCWlmICghaGVhZGVyX2V4cHIpCisJCQloZWFkZXJfZXhwciA9IGdyZXBfdHJ1ZV9leHByKCk7CisJCWhlYWRlcl9leHByID0gZ3JlcF9vcl9leHByKGhlYWRlcl9ncm91cFtmbGRdLCBoZWFkZXJfZXhwcik7CisJfQorCXJldHVybiBoZWFkZXJfZXhwcjsKK30KKworc3RhdGljIHN0cnVjdCBncmVwX2V4cHIgKmdyZXBfc3BsaWNlX29yKHN0cnVjdCBncmVwX2V4cHIgKngsIHN0cnVjdCBncmVwX2V4cHIgKnkpCit7CisJc3RydWN0IGdyZXBfZXhwciAqeiA9IHg7CisKKwl3aGlsZSAoeCkgeworCQlhc3NlcnQoeC0+bm9kZSA9PSBHUkVQX05PREVfT1IpOworCQlpZiAoeC0+dS5iaW5hcnkucmlnaHQgJiYKKwkJICAgIHgtPnUuYmluYXJ5LnJpZ2h0LT5ub2RlID09IEdSRVBfTk9ERV9UUlVFKSB7CisJCQl4LT51LmJpbmFyeS5yaWdodCA9IHk7CisJCQlicmVhazsKKwkJfQorCQl4ID0geC0+dS5iaW5hcnkucmlnaHQ7CisJfQorCXJldHVybiB6OworfQorCitzdGF0aWMgdm9pZCBjb21waWxlX2dyZXBfcGF0dGVybnNfcmVhbChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKK3sKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnA7CisJc3RydWN0IGdyZXBfZXhwciAqaGVhZGVyX2V4cHIgPSBwcmVwX2hlYWRlcl9wYXR0ZXJucyhvcHQpOworCisJZm9yIChwID0gb3B0LT5wYXR0ZXJuX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN3aXRjaCAocC0+dG9rZW4pIHsKKwkJY2FzZSBHUkVQX1BBVFRFUk46IC8qIGF0b20gKi8KKwkJY2FzZSBHUkVQX1BBVFRFUk5fSEVBRDoKKwkJY2FzZSBHUkVQX1BBVFRFUk5fQk9EWToKKwkJCWNvbXBpbGVfcmVnZXhwKHAsIG9wdCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW9wdC0+ZXh0ZW5kZWQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAob3B0LT5hbGxfbWF0Y2ggfHwgaGVhZGVyX2V4cHIpCisJCW9wdC0+ZXh0ZW5kZWQgPSAxOworCWVsc2UgaWYgKCFvcHQtPmV4dGVuZGVkICYmICFvcHQtPmRlYnVnKQorCQlyZXR1cm47CisKKwlwID0gb3B0LT5wYXR0ZXJuX2xpc3Q7CisJaWYgKHApCisJCW9wdC0+cGF0dGVybl9leHByZXNzaW9uID0gY29tcGlsZV9wYXR0ZXJuX2V4cHIoJnApOworCWlmIChwKQorCQlkaWUoImluY29tcGxldGUgcGF0dGVybiBleHByZXNzaW9uOiAlcyIsIHAtPnBhdHRlcm4pOworCisJaWYgKCFoZWFkZXJfZXhwcikKKwkJcmV0dXJuOworCisJaWYgKCFvcHQtPnBhdHRlcm5fZXhwcmVzc2lvbikKKwkJb3B0LT5wYXR0ZXJuX2V4cHJlc3Npb24gPSBoZWFkZXJfZXhwcjsKKwllbHNlIGlmIChvcHQtPmFsbF9tYXRjaCkKKwkJb3B0LT5wYXR0ZXJuX2V4cHJlc3Npb24gPSBncmVwX3NwbGljZV9vcihoZWFkZXJfZXhwciwKKwkJCQkJCQkgb3B0LT5wYXR0ZXJuX2V4cHJlc3Npb24pOworCWVsc2UKKwkJb3B0LT5wYXR0ZXJuX2V4cHJlc3Npb24gPSBncmVwX29yX2V4cHIob3B0LT5wYXR0ZXJuX2V4cHJlc3Npb24sCisJCQkJCQkgICAgICAgaGVhZGVyX2V4cHIpOworCW9wdC0+YWxsX21hdGNoID0gMTsKK30KKwordm9pZCBjb21waWxlX2dyZXBfcGF0dGVybnMoc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJY29tcGlsZV9ncmVwX3BhdHRlcm5zX3JlYWwob3B0KTsKKwlpZiAob3B0LT5kZWJ1ZykKKwkJZHVtcF9ncmVwX2V4cHJlc3Npb24ob3B0KTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9wYXR0ZXJuX2V4cHIoc3RydWN0IGdyZXBfZXhwciAqeCkKK3sKKwlzd2l0Y2ggKHgtPm5vZGUpIHsKKwljYXNlIEdSRVBfTk9ERV9UUlVFOgorCWNhc2UgR1JFUF9OT0RFX0FUT006CisJCWJyZWFrOworCWNhc2UgR1JFUF9OT0RFX05PVDoKKwkJZnJlZV9wYXR0ZXJuX2V4cHIoeC0+dS51bmFyeSk7CisJCWJyZWFrOworCWNhc2UgR1JFUF9OT0RFX0FORDoKKwljYXNlIEdSRVBfTk9ERV9PUjoKKwkJZnJlZV9wYXR0ZXJuX2V4cHIoeC0+dS5iaW5hcnkubGVmdCk7CisJCWZyZWVfcGF0dGVybl9leHByKHgtPnUuYmluYXJ5LnJpZ2h0KTsKKwkJYnJlYWs7CisJfQorCWZyZWUoeCk7Cit9CisKK3ZvaWQgZnJlZV9ncmVwX3BhdHRlcm5zKHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCXN0cnVjdCBncmVwX3BhdCAqcCwgKm47CisKKwlmb3IgKHAgPSBvcHQtPnBhdHRlcm5fbGlzdDsgcDsgcCA9IG4pIHsKKwkJbiA9IHAtPm5leHQ7CisJCXN3aXRjaCAocC0+dG9rZW4pIHsKKwkJY2FzZSBHUkVQX1BBVFRFUk46IC8qIGF0b20gKi8KKwkJY2FzZSBHUkVQX1BBVFRFUk5fSEVBRDoKKwkJY2FzZSBHUkVQX1BBVFRFUk5fQk9EWToKKwkJCWlmIChwLT5wY3JlMV9yZWdleHApCisJCQkJZnJlZV9wY3JlMV9yZWdleHAocCk7CisJCQllbHNlIGlmIChwLT5wY3JlMl9wYXR0ZXJuKQorCQkJCWZyZWVfcGNyZTJfcGF0dGVybihwKTsKKwkJCWVsc2UKKwkJCQlyZWdmcmVlKCZwLT5yZWdleHApOworCQkJZnJlZShwLT5wYXR0ZXJuKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJZnJlZShwKTsKKwl9CisKKwlpZiAoIW9wdC0+ZXh0ZW5kZWQpCisJCXJldHVybjsKKwlmcmVlX3BhdHRlcm5fZXhwcihvcHQtPnBhdHRlcm5fZXhwcmVzc2lvbik7Cit9CisKK3N0YXRpYyBjaGFyICplbmRfb2ZfbGluZShjaGFyICpjcCwgdW5zaWduZWQgbG9uZyAqbGVmdCkKK3sKKwl1bnNpZ25lZCBsb25nIGwgPSAqbGVmdDsKKwl3aGlsZSAobCAmJiAqY3AgIT0gJ1xuJykgeworCQlsLS07CisJCWNwKys7CisJfQorCSpsZWZ0ID0gbDsKKwlyZXR1cm4gY3A7Cit9CisKK3N0YXRpYyBpbnQgd29yZF9jaGFyKGNoYXIgY2gpCit7CisJcmV0dXJuIGlzYWxudW0oY2gpIHx8IGNoID09ICdfJzsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0X2NvbG9yKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwKKwkJCSBjb25zdCBjaGFyICpjb2xvcikKK3sKKwlpZiAod2FudF9jb2xvcihvcHQtPmNvbG9yKSAmJiBjb2xvciAmJiBjb2xvclswXSkgeworCQlvcHQtPm91dHB1dChvcHQsIGNvbG9yLCBzdHJsZW4oY29sb3IpKTsKKwkJb3B0LT5vdXRwdXQob3B0LCBkYXRhLCBzaXplKTsKKwkJb3B0LT5vdXRwdXQob3B0LCBHSVRfQ09MT1JfUkVTRVQsIHN0cmxlbihHSVRfQ09MT1JfUkVTRVQpKTsKKwl9IGVsc2UKKwkJb3B0LT5vdXRwdXQob3B0LCBkYXRhLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0X3NlcChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY2hhciBzaWduKQoreworCWlmIChvcHQtPm51bGxfZm9sbG93aW5nX25hbWUpCisJCW9wdC0+b3V0cHV0KG9wdCwgIlwwIiwgMSk7CisJZWxzZQorCQlvdXRwdXRfY29sb3Iob3B0LCAmc2lnbiwgMSwgb3B0LT5jb2xvcnNbR1JFUF9DT0xPUl9TRVBdKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19uYW1lKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpuYW1lKQoreworCW91dHB1dF9jb2xvcihvcHQsIG5hbWUsIHN0cmxlbihuYW1lKSwgb3B0LT5jb2xvcnNbR1JFUF9DT0xPUl9GSUxFTkFNRV0pOworCW9wdC0+b3V0cHV0KG9wdCwgb3B0LT5udWxsX2ZvbGxvd2luZ19uYW1lID8gIlwwIiA6ICJcbiIsIDEpOworfQorCitzdGF0aWMgaW50IHBhdG1hdGNoKHN0cnVjdCBncmVwX3BhdCAqcCwgY2hhciAqbGluZSwgY2hhciAqZW9sLAorCQkgICAgcmVnbWF0Y2hfdCAqbWF0Y2gsIGludCBlZmxhZ3MpCit7CisJaW50IGhpdDsKKworCWlmIChwLT5wY3JlMV9yZWdleHApCisJCWhpdCA9ICFwY3JlMW1hdGNoKHAsIGxpbmUsIGVvbCwgbWF0Y2gsIGVmbGFncyk7CisJZWxzZSBpZiAocC0+cGNyZTJfcGF0dGVybikKKwkJaGl0ID0gIXBjcmUybWF0Y2gocCwgbGluZSwgZW9sLCBtYXRjaCwgZWZsYWdzKTsKKwllbHNlCisJCWhpdCA9ICFyZWdleGVjX2J1ZigmcC0+cmVnZXhwLCBsaW5lLCBlb2wgLSBsaW5lLCAxLCBtYXRjaCwKKwkJCQkgICBlZmxhZ3MpOworCisJcmV0dXJuIGhpdDsKK30KKworc3RhdGljIGludCBzdHJpcF90aW1lc3RhbXAoY2hhciAqYm9sLCBjaGFyICoqZW9sX3ApCit7CisJY2hhciAqZW9sID0gKmVvbF9wOworCWludCBjaDsKKworCXdoaWxlIChib2wgPCAtLWVvbCkgeworCQlpZiAoKmVvbCAhPSAnPicpCisJCQljb250aW51ZTsKKwkJKmVvbF9wID0gKytlb2w7CisJCWNoID0gKmVvbDsKKwkJKmVvbCA9ICdcMCc7CisJCXJldHVybiBjaDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKmZpZWxkOworCXNpemVfdCBsZW47Cit9IGhlYWRlcl9maWVsZFtdID0geworCXsgImF1dGhvciAiLCA3IH0sCisJeyAiY29tbWl0dGVyICIsIDEwIH0sCisJeyAicmVmbG9nICIsIDcgfSwKK307CisKK3N0YXRpYyBpbnQgbWF0Y2hfb25lX3BhdHRlcm4oc3RydWN0IGdyZXBfcGF0ICpwLCBjaGFyICpib2wsIGNoYXIgKmVvbCwKKwkJCSAgICAgZW51bSBncmVwX2NvbnRleHQgY3R4LAorCQkJICAgICByZWdtYXRjaF90ICpwbWF0Y2gsIGludCBlZmxhZ3MpCit7CisJaW50IGhpdCA9IDA7CisJaW50IHNhdmVkX2NoID0gMDsKKwljb25zdCBjaGFyICpzdGFydCA9IGJvbDsKKworCWlmICgocC0+dG9rZW4gIT0gR1JFUF9QQVRURVJOKSAmJgorCSAgICAoKHAtPnRva2VuID09IEdSRVBfUEFUVEVSTl9IRUFEKSAhPSAoY3R4ID09IEdSRVBfQ09OVEVYVF9IRUFEKSkpCisJCXJldHVybiAwOworCisJaWYgKHAtPnRva2VuID09IEdSRVBfUEFUVEVSTl9IRUFEKSB7CisJCWNvbnN0IGNoYXIgKmZpZWxkOworCQlzaXplX3QgbGVuOworCQlhc3NlcnQocC0+ZmllbGQgPCBBUlJBWV9TSVpFKGhlYWRlcl9maWVsZCkpOworCQlmaWVsZCA9IGhlYWRlcl9maWVsZFtwLT5maWVsZF0uZmllbGQ7CisJCWxlbiA9IGhlYWRlcl9maWVsZFtwLT5maWVsZF0ubGVuOworCQlpZiAoc3RybmNtcChib2wsIGZpZWxkLCBsZW4pKQorCQkJcmV0dXJuIDA7CisJCWJvbCArPSBsZW47CisJCXN3aXRjaCAocC0+ZmllbGQpIHsKKwkJY2FzZSBHUkVQX0hFQURFUl9BVVRIT1I6CisJCWNhc2UgR1JFUF9IRUFERVJfQ09NTUlUVEVSOgorCQkJc2F2ZWRfY2ggPSBzdHJpcF90aW1lc3RhbXAoYm9sLCAmZW9sKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKyBhZ2FpbjoKKwloaXQgPSBwYXRtYXRjaChwLCBib2wsIGVvbCwgcG1hdGNoLCBlZmxhZ3MpOworCisJaWYgKGhpdCAmJiBwLT53b3JkX3JlZ2V4cCkgeworCQlpZiAoKHBtYXRjaFswXS5ybV9zbyA8IDApIHx8CisJCSAgICAoZW9sIC0gYm9sKSA8IHBtYXRjaFswXS5ybV9zbyB8fAorCQkgICAgKHBtYXRjaFswXS5ybV9lbyA8IDApIHx8CisJCSAgICAoZW9sIC0gYm9sKSA8IHBtYXRjaFswXS5ybV9lbykKKwkJCWRpZSgicmVnZXhwIHJldHVybmVkIG5vbnNlbnNlIik7CisKKwkJLyogTWF0Y2ggYmVnaW5uaW5nIG11c3QgYmUgZWl0aGVyIGJlZ2lubmluZyBvZiB0aGUKKwkJICogbGluZSwgb3IgYXQgd29yZCBib3VuZGFyeSAoaS5lLiB0aGUgbGFzdCBjaGFyIG11c3QKKwkJICogbm90IGJlIGEgd29yZCBjaGFyKS4gIFNpbWlsYXJseSwgbWF0Y2ggZW5kIG11c3QgYmUKKwkJICogZWl0aGVyIGVuZCBvZiB0aGUgbGluZSwgb3IgYXQgd29yZCBib3VuZGFyeQorCQkgKiAoaS5lLiB0aGUgbmV4dCBjaGFyIG11c3Qgbm90IGJlIGEgd29yZCBjaGFyKS4KKwkJICovCisJCWlmICggKChwbWF0Y2hbMF0ucm1fc28gPT0gMCkgfHwKKwkJICAgICAgIXdvcmRfY2hhcihib2xbcG1hdGNoWzBdLnJtX3NvLTFdKSkgJiYKKwkJICAgICAoKHBtYXRjaFswXS5ybV9lbyA9PSAoZW9sLWJvbCkpIHx8CisJCSAgICAgICF3b3JkX2NoYXIoYm9sW3BtYXRjaFswXS5ybV9lb10pKSApCisJCQk7CisJCWVsc2UKKwkJCWhpdCA9IDA7CisKKwkJLyogV29yZHMgY29uc2lzdCBvZiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLiAqLworCQlpZiAocG1hdGNoLT5ybV9zbyA9PSBwbWF0Y2gtPnJtX2VvKQorCQkJaGl0ID0gMDsKKworCQlpZiAoIWhpdCAmJiBwbWF0Y2hbMF0ucm1fc28gKyBib2wgKyAxIDwgZW9sKSB7CisJCQkvKiBUaGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lIG1hdGNoIG9uIHRoZQorCQkJICogbGluZSwgYW5kIHRoZSBmaXJzdCBtYXRjaCBtaWdodCBub3QgYmUKKwkJCSAqIHN0cmljdCB3b3JkIG1hdGNoLiAgQnV0IGxhdGVyIG9uZXMgY291bGQgYmUhCisJCQkgKiBGb3J3YXJkIHRvIHRoZSBuZXh0IHBvc3NpYmxlIHN0YXJ0LCBpLmUuIHRoZQorCQkJICogbmV4dCBwb3NpdGlvbiBmb2xsb3dpbmcgYSBub24td29yZCBjaGFyLgorCQkJICovCisJCQlib2wgPSBwbWF0Y2hbMF0ucm1fc28gKyBib2wgKyAxOworCQkJd2hpbGUgKHdvcmRfY2hhcihib2xbLTFdKSAmJiBib2wgPCBlb2wpCisJCQkJYm9sKys7CisJCQllZmxhZ3MgfD0gUkVHX05PVEJPTDsKKwkJCWlmIChib2wgPCBlb2wpCisJCQkJZ290byBhZ2FpbjsKKwkJfQorCX0KKwlpZiAocC0+dG9rZW4gPT0gR1JFUF9QQVRURVJOX0hFQUQgJiYgc2F2ZWRfY2gpCisJCSplb2wgPSBzYXZlZF9jaDsKKwlpZiAoaGl0KSB7CisJCXBtYXRjaFswXS5ybV9zbyArPSBib2wgLSBzdGFydDsKKwkJcG1hdGNoWzBdLnJtX2VvICs9IGJvbCAtIHN0YXJ0OworCX0KKwlyZXR1cm4gaGl0OworfQorCitzdGF0aWMgaW50IG1hdGNoX2V4cHJfZXZhbChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgc3RydWN0IGdyZXBfZXhwciAqeCwgY2hhciAqYm9sLAorCQkJICAgY2hhciAqZW9sLCBlbnVtIGdyZXBfY29udGV4dCBjdHgsIHNzaXplX3QgKmNvbCwKKwkJCSAgIHNzaXplX3QgKmljb2wsIGludCBjb2xsZWN0X2hpdHMpCit7CisJaW50IGggPSAwOworCisJaWYgKCF4KQorCQlkaWUoIk5vdCBhIHZhbGlkIGdyZXAgZXhwcmVzc2lvbiIpOworCXN3aXRjaCAoeC0+bm9kZSkgeworCWNhc2UgR1JFUF9OT0RFX1RSVUU6CisJCWggPSAxOworCQlicmVhazsKKwljYXNlIEdSRVBfTk9ERV9BVE9NOgorCQl7CisJCQlyZWdtYXRjaF90IHRtcDsKKwkJCWggPSBtYXRjaF9vbmVfcGF0dGVybih4LT51LmF0b20sIGJvbCwgZW9sLCBjdHgsCisJCQkJCSAgICAgICZ0bXAsIDApOworCQkJaWYgKGggJiYgKCpjb2wgPCAwIHx8IHRtcC5ybV9zbyA8ICpjb2wpKQorCQkJCSpjb2wgPSB0bXAucm1fc287CisJCX0KKwkJYnJlYWs7CisJY2FzZSBHUkVQX05PREVfTk9UOgorCQkvKgorCQkgKiBVcG9uIHZpc2l0aW5nIGEgR1JFUF9OT0RFX05PVCwgY29sIGFuZCBpY29sIGJlY29tZSBzd2FwcGVkLgorCQkgKi8KKwkJaCA9ICFtYXRjaF9leHByX2V2YWwob3B0LCB4LT51LnVuYXJ5LCBib2wsIGVvbCwgY3R4LCBpY29sLCBjb2wsCisJCQkJICAgICAwKTsKKwkJYnJlYWs7CisJY2FzZSBHUkVQX05PREVfQU5EOgorCQloID0gbWF0Y2hfZXhwcl9ldmFsKG9wdCwgeC0+dS5iaW5hcnkubGVmdCwgYm9sLCBlb2wsIGN0eCwgY29sLAorCQkJCSAgICBpY29sLCAwKTsKKwkJaWYgKGggfHwgb3B0LT5jb2x1bW5udW0pIHsKKwkJCS8qCisJCQkgKiBEb24ndCBzaG9ydC1jaXJjdWl0IEFORCB3aGVuIGdpdmVuIC0tY29sdW1uLCBzaW5jZSBhCisJCQkgKiBOT1QgZWFybGllciBpbiB0aGUgdHJlZSBtYXkgdHVybiB0aGlzIGludG8gYW4gT1IuIEluCisJCQkgKiB0aGlzIGNhc2UsIHNlZSB0aGUgYmVsb3cgY29tbWVudC4KKwkJCSAqLworCQkJaCAmPSBtYXRjaF9leHByX2V2YWwob3B0LCB4LT51LmJpbmFyeS5yaWdodCwgYm9sLCBlb2wsCisJCQkJCSAgICAgY3R4LCBjb2wsIGljb2wsIDApOworCQl9CisJCWJyZWFrOworCWNhc2UgR1JFUF9OT0RFX09SOgorCQlpZiAoIShjb2xsZWN0X2hpdHMgfHwgb3B0LT5jb2x1bW5udW0pKSB7CisJCQkvKgorCQkJICogRG9uJ3Qgc2hvcnQtY2lyY3VpdCBPUiB3aGVuIGdpdmVuIC0tY29sdW1uIChvcgorCQkJICogY29sbGVjdGluZyBoaXRzKSB0byBlbnN1cmUgd2UgZG9uJ3Qgc2tpcCBhIGxhdGVyCisJCQkgKiBjaGlsZCB0aGF0IHdvdWxkIHByb2R1Y2UgYW4gZWFybGllciBtYXRjaC4KKwkJCSAqLworCQkJcmV0dXJuIChtYXRjaF9leHByX2V2YWwob3B0LCB4LT51LmJpbmFyeS5sZWZ0LCBib2wsIGVvbCwKKwkJCQkJCWN0eCwgY29sLCBpY29sLCAwKSB8fAorCQkJCW1hdGNoX2V4cHJfZXZhbChvcHQsIHgtPnUuYmluYXJ5LnJpZ2h0LCBib2wsCisJCQkJCQllb2wsIGN0eCwgY29sLCBpY29sLCAwKSk7CisJCX0KKwkJaCA9IG1hdGNoX2V4cHJfZXZhbChvcHQsIHgtPnUuYmluYXJ5LmxlZnQsIGJvbCwgZW9sLCBjdHgsIGNvbCwKKwkJCQkgICAgaWNvbCwgMCk7CisJCWlmIChjb2xsZWN0X2hpdHMpCisJCQl4LT51LmJpbmFyeS5sZWZ0LT5oaXQgfD0gaDsKKwkJaCB8PSBtYXRjaF9leHByX2V2YWwob3B0LCB4LT51LmJpbmFyeS5yaWdodCwgYm9sLCBlb2wsIGN0eCwgY29sLAorCQkJCSAgICAgaWNvbCwgY29sbGVjdF9oaXRzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJVbmV4cGVjdGVkIG5vZGUgdHlwZSAoaW50ZXJuYWwgZXJyb3IpICVkIiwgeC0+bm9kZSk7CisJfQorCWlmIChjb2xsZWN0X2hpdHMpCisJCXgtPmhpdCB8PSBoOworCXJldHVybiBoOworfQorCitzdGF0aWMgaW50IG1hdGNoX2V4cHIoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNoYXIgKmJvbCwgY2hhciAqZW9sLAorCQkgICAgICBlbnVtIGdyZXBfY29udGV4dCBjdHgsIHNzaXplX3QgKmNvbCwKKwkJICAgICAgc3NpemVfdCAqaWNvbCwgaW50IGNvbGxlY3RfaGl0cykKK3sKKwlzdHJ1Y3QgZ3JlcF9leHByICp4ID0gb3B0LT5wYXR0ZXJuX2V4cHJlc3Npb247CisJcmV0dXJuIG1hdGNoX2V4cHJfZXZhbChvcHQsIHgsIGJvbCwgZW9sLCBjdHgsIGNvbCwgaWNvbCwgY29sbGVjdF9oaXRzKTsKK30KKworc3RhdGljIGludCBtYXRjaF9saW5lKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjaGFyICpib2wsIGNoYXIgKmVvbCwKKwkJICAgICAgc3NpemVfdCAqY29sLCBzc2l6ZV90ICppY29sLAorCQkgICAgICBlbnVtIGdyZXBfY29udGV4dCBjdHgsIGludCBjb2xsZWN0X2hpdHMpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwOworCWludCBoaXQgPSAwOworCisJaWYgKG9wdC0+ZXh0ZW5kZWQpCisJCXJldHVybiBtYXRjaF9leHByKG9wdCwgYm9sLCBlb2wsIGN0eCwgY29sLCBpY29sLAorCQkJCSAgY29sbGVjdF9oaXRzKTsKKworCS8qIHdlIGRvIG5vdCBjYWxsIHdpdGggY29sbGVjdF9oaXRzIHdpdGhvdXQgYmVpbmcgZXh0ZW5kZWQgKi8KKwlmb3IgKHAgPSBvcHQtPnBhdHRlcm5fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJcmVnbWF0Y2hfdCB0bXA7CisJCWlmIChtYXRjaF9vbmVfcGF0dGVybihwLCBib2wsIGVvbCwgY3R4LCAmdG1wLCAwKSkgeworCQkJaGl0IHw9IDE7CisJCQlpZiAoIW9wdC0+Y29sdW1ubnVtKSB7CisJCQkJLyoKKwkJCQkgKiBXaXRob3V0IC0tY29sdW1uLCBhbnkgc2luZ2xlIG1hdGNoIG9uIGEgbGluZQorCQkJCSAqIGlzIGVub3VnaCB0byBrbm93IHRoYXQgaXQgbmVlZHMgdG8gYmUKKwkJCQkgKiBwcmludGVkLiBXaXRoIC0tY29sdW1uLCBzY2FuIF9hbGxfIHBhdHRlcm5zCisJCQkJICogdG8gZmluZCB0aGUgZWFybGllc3QuCisJCQkJICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoKmNvbCA8IDAgfHwgdG1wLnJtX3NvIDwgKmNvbCkKKwkJCQkqY29sID0gdG1wLnJtX3NvOworCQl9CisJfQorCXJldHVybiBoaXQ7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfbmV4dF9wYXR0ZXJuKHN0cnVjdCBncmVwX3BhdCAqcCwgY2hhciAqYm9sLCBjaGFyICplb2wsCisJCQkgICAgICBlbnVtIGdyZXBfY29udGV4dCBjdHgsCisJCQkgICAgICByZWdtYXRjaF90ICpwbWF0Y2gsIGludCBlZmxhZ3MpCit7CisJcmVnbWF0Y2hfdCBtYXRjaDsKKworCWlmICghbWF0Y2hfb25lX3BhdHRlcm4ocCwgYm9sLCBlb2wsIGN0eCwgJm1hdGNoLCBlZmxhZ3MpKQorCQlyZXR1cm4gMDsKKwlpZiAobWF0Y2gucm1fc28gPCAwIHx8IG1hdGNoLnJtX2VvIDwgMCkKKwkJcmV0dXJuIDA7CisJaWYgKHBtYXRjaC0+cm1fc28gPj0gMCAmJiBwbWF0Y2gtPnJtX2VvID49IDApIHsKKwkJaWYgKG1hdGNoLnJtX3NvID4gcG1hdGNoLT5ybV9zbykKKwkJCXJldHVybiAxOworCQlpZiAobWF0Y2gucm1fc28gPT0gcG1hdGNoLT5ybV9zbyAmJiBtYXRjaC5ybV9lbyA8IHBtYXRjaC0+cm1fZW8pCisJCQlyZXR1cm4gMTsKKwl9CisJcG1hdGNoLT5ybV9zbyA9IG1hdGNoLnJtX3NvOworCXBtYXRjaC0+cm1fZW8gPSBtYXRjaC5ybV9lbzsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuZXh0X21hdGNoKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjaGFyICpib2wsIGNoYXIgKmVvbCwKKwkJICAgICAgZW51bSBncmVwX2NvbnRleHQgY3R4LCByZWdtYXRjaF90ICpwbWF0Y2gsIGludCBlZmxhZ3MpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwOworCWludCBoaXQgPSAwOworCisJcG1hdGNoLT5ybV9zbyA9IHBtYXRjaC0+cm1fZW8gPSAtMTsKKwlpZiAoYm9sIDwgZW9sKSB7CisJCWZvciAocCA9IG9wdC0+cGF0dGVybl9saXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQkJc3dpdGNoIChwLT50b2tlbikgeworCQkJY2FzZSBHUkVQX1BBVFRFUk46IC8qIGF0b20gKi8KKwkJCWNhc2UgR1JFUF9QQVRURVJOX0hFQUQ6CisJCQljYXNlIEdSRVBfUEFUVEVSTl9CT0RZOgorCQkJCWhpdCB8PSBtYXRjaF9uZXh0X3BhdHRlcm4ocCwgYm9sLCBlb2wsIGN0eCwKKwkJCQkJCQkgIHBtYXRjaCwgZWZsYWdzKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGhpdDsKK30KKworc3RhdGljIHZvaWQgc2hvd19saW5lX2hlYWRlcihzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgdW5zaWduZWQgbG5vLCBzc2l6ZV90IGNubywgY2hhciBzaWduKQoreworCWlmIChvcHQtPmhlYWRpbmcgJiYgb3B0LT5sYXN0X3Nob3duID09IDApIHsKKwkJb3V0cHV0X2NvbG9yKG9wdCwgbmFtZSwgc3RybGVuKG5hbWUpLCBvcHQtPmNvbG9yc1tHUkVQX0NPTE9SX0ZJTEVOQU1FXSk7CisJCW9wdC0+b3V0cHV0KG9wdCwgIlxuIiwgMSk7CisJfQorCW9wdC0+bGFzdF9zaG93biA9IGxubzsKKworCWlmICghb3B0LT5oZWFkaW5nICYmIG9wdC0+cGF0aG5hbWUpIHsKKwkJb3V0cHV0X2NvbG9yKG9wdCwgbmFtZSwgc3RybGVuKG5hbWUpLCBvcHQtPmNvbG9yc1tHUkVQX0NPTE9SX0ZJTEVOQU1FXSk7CisJCW91dHB1dF9zZXAob3B0LCBzaWduKTsKKwl9CisJaWYgKG9wdC0+bGluZW51bSkgeworCQljaGFyIGJ1ZlszMl07CisJCXhzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBsbm8pOworCQlvdXRwdXRfY29sb3Iob3B0LCBidWYsIHN0cmxlbihidWYpLCBvcHQtPmNvbG9yc1tHUkVQX0NPTE9SX0xJTkVOT10pOworCQlvdXRwdXRfc2VwKG9wdCwgc2lnbik7CisJfQorCS8qCisJICogVHJlYXQgJ2NubycgYXMgdGhlIDEtaW5kZXhlZCBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgYSBub24tY29udGV4dAorCSAqIGxpbmUgdG8gaXRzIGZpcnN0IG1hdGNoLiBPdGhlcndpc2UsICdjbm8nIGlzIDAgaW5kaWNhdGluZyB0aGF0IHdlIGFyZQorCSAqIGJlaW5nIGNhbGxlZCB3aXRoIGEgY29udGV4dCBsaW5lLgorCSAqLworCWlmIChvcHQtPmNvbHVtbm51bSAmJiBjbm8pIHsKKwkJY2hhciBidWZbMzJdOworCQl4c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUiUFJJdU1BWCwgKHVpbnRtYXhfdCljbm8pOworCQlvdXRwdXRfY29sb3Iob3B0LCBidWYsIHN0cmxlbihidWYpLCBvcHQtPmNvbG9yc1tHUkVQX0NPTE9SX0NPTFVNTk5PXSk7CisJCW91dHB1dF9zZXAob3B0LCBzaWduKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbGluZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY2hhciAqYm9sLCBjaGFyICplb2wsCisJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxubywgc3NpemVfdCBjbm8sIGNoYXIgc2lnbikKK3sKKwlpbnQgcmVzdCA9IGVvbCAtIGJvbDsKKwljb25zdCBjaGFyICptYXRjaF9jb2xvciA9IE5VTEw7CisJY29uc3QgY2hhciAqbGluZV9jb2xvciA9IE5VTEw7CisKKwlpZiAob3B0LT5maWxlX2JyZWFrICYmIG9wdC0+bGFzdF9zaG93biA9PSAwKSB7CisJCWlmIChvcHQtPnNob3dfaHVua19tYXJrKQorCQkJb3B0LT5vdXRwdXQob3B0LCAiXG4iLCAxKTsKKwl9IGVsc2UgaWYgKG9wdC0+cHJlX2NvbnRleHQgfHwgb3B0LT5wb3N0X2NvbnRleHQgfHwgb3B0LT5mdW5jYm9keSkgeworCQlpZiAob3B0LT5sYXN0X3Nob3duID09IDApIHsKKwkJCWlmIChvcHQtPnNob3dfaHVua19tYXJrKSB7CisJCQkJb3V0cHV0X2NvbG9yKG9wdCwgIi0tIiwgMiwgb3B0LT5jb2xvcnNbR1JFUF9DT0xPUl9TRVBdKTsKKwkJCQlvcHQtPm91dHB1dChvcHQsICJcbiIsIDEpOworCQkJfQorCQl9IGVsc2UgaWYgKGxubyA+IG9wdC0+bGFzdF9zaG93biArIDEpIHsKKwkJCW91dHB1dF9jb2xvcihvcHQsICItLSIsIDIsIG9wdC0+Y29sb3JzW0dSRVBfQ09MT1JfU0VQXSk7CisJCQlvcHQtPm91dHB1dChvcHQsICJcbiIsIDEpOworCQl9CisJfQorCWlmICghb3B0LT5vbmx5X21hdGNoaW5nKSB7CisJCS8qCisJCSAqIEluIGNhc2UgdGhlIGxpbmUgd2UncmUgYmVpbmcgY2FsbGVkIHdpdGggY29udGFpbnMgbW9yZSB0aGFuCisJCSAqIG9uZSBtYXRjaCwgbGVhdmUgcHJpbnRpbmcgZWFjaCBoZWFkZXIgdG8gdGhlIGxvb3AgYmVsb3cuCisJCSAqLworCQlzaG93X2xpbmVfaGVhZGVyKG9wdCwgbmFtZSwgbG5vLCBjbm8sIHNpZ24pOworCX0KKwlpZiAob3B0LT5jb2xvciB8fCBvcHQtPm9ubHlfbWF0Y2hpbmcpIHsKKwkJcmVnbWF0Y2hfdCBtYXRjaDsKKwkJZW51bSBncmVwX2NvbnRleHQgY3R4ID0gR1JFUF9DT05URVhUX0JPRFk7CisJCWludCBjaCA9ICplb2w7CisJCWludCBlZmxhZ3MgPSAwOworCisJCWlmIChvcHQtPmNvbG9yKSB7CisJCQlpZiAoc2lnbiA9PSAnOicpCisJCQkJbWF0Y2hfY29sb3IgPSBvcHQtPmNvbG9yc1tHUkVQX0NPTE9SX01BVENIX1NFTEVDVEVEXTsKKwkJCWVsc2UKKwkJCQltYXRjaF9jb2xvciA9IG9wdC0+Y29sb3JzW0dSRVBfQ09MT1JfTUFUQ0hfQ09OVEVYVF07CisJCQlpZiAoc2lnbiA9PSAnOicpCisJCQkJbGluZV9jb2xvciA9IG9wdC0+Y29sb3JzW0dSRVBfQ09MT1JfU0VMRUNURURdOworCQkJZWxzZSBpZiAoc2lnbiA9PSAnLScpCisJCQkJbGluZV9jb2xvciA9IG9wdC0+Y29sb3JzW0dSRVBfQ09MT1JfQ09OVEVYVF07CisJCQllbHNlIGlmIChzaWduID09ICc9JykKKwkJCQlsaW5lX2NvbG9yID0gb3B0LT5jb2xvcnNbR1JFUF9DT0xPUl9GVU5DVElPTl07CisJCX0KKwkJKmVvbCA9ICdcMCc7CisJCXdoaWxlIChuZXh0X21hdGNoKG9wdCwgYm9sLCBlb2wsIGN0eCwgJm1hdGNoLCBlZmxhZ3MpKSB7CisJCQlpZiAobWF0Y2gucm1fc28gPT0gbWF0Y2gucm1fZW8pCisJCQkJYnJlYWs7CisKKwkJCWlmIChvcHQtPm9ubHlfbWF0Y2hpbmcpCisJCQkJc2hvd19saW5lX2hlYWRlcihvcHQsIG5hbWUsIGxubywgY25vLCBzaWduKTsKKwkJCWVsc2UKKwkJCQlvdXRwdXRfY29sb3Iob3B0LCBib2wsIG1hdGNoLnJtX3NvLCBsaW5lX2NvbG9yKTsKKwkJCW91dHB1dF9jb2xvcihvcHQsIGJvbCArIG1hdGNoLnJtX3NvLAorCQkJCSAgICAgbWF0Y2gucm1fZW8gLSBtYXRjaC5ybV9zbywgbWF0Y2hfY29sb3IpOworCQkJaWYgKG9wdC0+b25seV9tYXRjaGluZykKKwkJCQlvcHQtPm91dHB1dChvcHQsICJcbiIsIDEpOworCQkJYm9sICs9IG1hdGNoLnJtX2VvOworCQkJY25vICs9IG1hdGNoLnJtX2VvOworCQkJcmVzdCAtPSBtYXRjaC5ybV9lbzsKKwkJCWVmbGFncyA9IFJFR19OT1RCT0w7CisJCX0KKwkJKmVvbCA9IGNoOworCX0KKwlpZiAoIW9wdC0+b25seV9tYXRjaGluZykgeworCQlvdXRwdXRfY29sb3Iob3B0LCBib2wsIHJlc3QsIGxpbmVfY29sb3IpOworCQlvcHQtPm91dHB1dChvcHQsICJcbiIsIDEpOworCX0KK30KKworaW50IGdyZXBfdXNlX2xvY2tzOworCisvKgorICogVGhpcyBsb2NrIHByb3RlY3RzIGFjY2VzcyB0byB0aGUgZ2l0YXR0cmlidXRlcyBtYWNoaW5lcnksIHdoaWNoIGlzCisgKiBub3QgdGhyZWFkLXNhZmUuCisgKi8KK3B0aHJlYWRfbXV0ZXhfdCBncmVwX2F0dHJfbXV0ZXg7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmVwX2F0dHJfbG9jayh2b2lkKQoreworCWlmIChncmVwX3VzZV9sb2NrcykKKwkJcHRocmVhZF9tdXRleF9sb2NrKCZncmVwX2F0dHJfbXV0ZXgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JlcF9hdHRyX3VubG9jayh2b2lkKQoreworCWlmIChncmVwX3VzZV9sb2NrcykKKwkJcHRocmVhZF9tdXRleF91bmxvY2soJmdyZXBfYXR0cl9tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfZnVuY25hbWUoc3RydWN0IGdyZXBfb3B0ICpvcHQsIHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MsIGNoYXIgKmJvbCwgY2hhciAqZW9sKQoreworCXhkZW1pdGNvbmZfdCAqeGVjZmcgPSBvcHQtPnByaXY7CisJaWYgKHhlY2ZnICYmICF4ZWNmZy0+ZmluZF9mdW5jKSB7CisJCWdyZXBfc291cmNlX2xvYWRfZHJpdmVyKGdzLCBvcHQtPnJlcG8tPmluZGV4KTsKKwkJaWYgKGdzLT5kcml2ZXItPmZ1bmNuYW1lLnBhdHRlcm4pIHsKKwkJCWNvbnN0IHN0cnVjdCB1c2VyZGlmZl9mdW5jbmFtZSAqcGUgPSAmZ3MtPmRyaXZlci0+ZnVuY25hbWU7CisJCQl4ZGlmZl9zZXRfZmluZF9mdW5jKHhlY2ZnLCBwZS0+cGF0dGVybiwgcGUtPmNmbGFncyk7CisJCX0gZWxzZSB7CisJCQl4ZWNmZyA9IG9wdC0+cHJpdiA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAoeGVjZmcpIHsKKwkJY2hhciBidWZbMV07CisJCXJldHVybiB4ZWNmZy0+ZmluZF9mdW5jKGJvbCwgZW9sIC0gYm9sLCBidWYsIDEsCisJCQkJCXhlY2ZnLT5maW5kX2Z1bmNfcHJpdikgPj0gMDsKKwl9CisKKwlpZiAoYm9sID09IGVvbCkKKwkJcmV0dXJuIDA7CisJaWYgKGlzYWxwaGEoKmJvbCkgfHwgKmJvbCA9PSAnXycgfHwgKmJvbCA9PSAnJCcpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaG93X2Z1bmNuYW1lX2xpbmUoc3RydWN0IGdyZXBfb3B0ICpvcHQsIHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MsCisJCQkgICAgICAgY2hhciAqYm9sLCB1bnNpZ25lZCBsbm8pCit7CisJd2hpbGUgKGJvbCA+IGdzLT5idWYpIHsKKwkJY2hhciAqZW9sID0gLS1ib2w7CisKKwkJd2hpbGUgKGJvbCA+IGdzLT5idWYgJiYgYm9sWy0xXSAhPSAnXG4nKQorCQkJYm9sLS07CisJCWxuby0tOworCisJCWlmIChsbm8gPD0gb3B0LT5sYXN0X3Nob3duKQorCQkJYnJlYWs7CisKKwkJaWYgKG1hdGNoX2Z1bmNuYW1lKG9wdCwgZ3MsIGJvbCwgZW9sKSkgeworCQkJc2hvd19saW5lKG9wdCwgYm9sLCBlb2wsIGdzLT5uYW1lLCBsbm8sIDAsICc9Jyk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBpc19lbXB0eV9saW5lKGNvbnN0IGNoYXIgKmJvbCwgY29uc3QgY2hhciAqZW9sKTsKKworc3RhdGljIHZvaWQgc2hvd19wcmVfY29udGV4dChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgc3RydWN0IGdyZXBfc291cmNlICpncywKKwkJCSAgICAgY2hhciAqYm9sLCBjaGFyICplbmQsIHVuc2lnbmVkIGxubykKK3sKKwl1bnNpZ25lZCBjdXIgPSBsbm8sIGZyb20gPSAxLCBmdW5jbmFtZV9sbm8gPSAwLCBvcmlnX2Zyb207CisJaW50IGZ1bmNuYW1lX25lZWRlZCA9ICEhb3B0LT5mdW5jbmFtZSwgY29tbWVudF9uZWVkZWQgPSAwOworCisJaWYgKG9wdC0+cHJlX2NvbnRleHQgPCBsbm8pCisJCWZyb20gPSBsbm8gLSBvcHQtPnByZV9jb250ZXh0OworCWlmIChmcm9tIDw9IG9wdC0+bGFzdF9zaG93bikKKwkJZnJvbSA9IG9wdC0+bGFzdF9zaG93biArIDE7CisJb3JpZ19mcm9tID0gZnJvbTsKKwlpZiAob3B0LT5mdW5jYm9keSkgeworCQlpZiAobWF0Y2hfZnVuY25hbWUob3B0LCBncywgYm9sLCBlbmQpKQorCQkJY29tbWVudF9uZWVkZWQgPSAxOworCQllbHNlCisJCQlmdW5jbmFtZV9uZWVkZWQgPSAxOworCQlmcm9tID0gb3B0LT5sYXN0X3Nob3duICsgMTsKKwl9CisKKwkvKiBSZXdpbmQuICovCisJd2hpbGUgKGJvbCA+IGdzLT5idWYgJiYgY3VyID4gZnJvbSkgeworCQljaGFyICpuZXh0X2JvbCA9IGJvbDsKKwkJY2hhciAqZW9sID0gLS1ib2w7CisKKwkJd2hpbGUgKGJvbCA+IGdzLT5idWYgJiYgYm9sWy0xXSAhPSAnXG4nKQorCQkJYm9sLS07CisJCWN1ci0tOworCQlpZiAoY29tbWVudF9uZWVkZWQgJiYgKGlzX2VtcHR5X2xpbmUoYm9sLCBlb2wpIHx8CisJCQkJICAgICAgIG1hdGNoX2Z1bmNuYW1lKG9wdCwgZ3MsIGJvbCwgZW9sKSkpIHsKKwkJCWNvbW1lbnRfbmVlZGVkID0gMDsKKwkJCWZyb20gPSBvcmlnX2Zyb207CisJCQlpZiAoY3VyIDwgZnJvbSkgeworCQkJCWN1cisrOworCQkJCWJvbCA9IG5leHRfYm9sOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChmdW5jbmFtZV9uZWVkZWQgJiYgbWF0Y2hfZnVuY25hbWUob3B0LCBncywgYm9sLCBlb2wpKSB7CisJCQlmdW5jbmFtZV9sbm8gPSBjdXI7CisJCQlmdW5jbmFtZV9uZWVkZWQgPSAwOworCQkJaWYgKG9wdC0+ZnVuY2JvZHkpCisJCQkJY29tbWVudF9uZWVkZWQgPSAxOworCQkJZWxzZQorCQkJCWZyb20gPSBvcmlnX2Zyb207CisJCX0KKwl9CisKKwkvKiBXZSBuZWVkIHRvIGxvb2sgZXZlbiBmdXJ0aGVyIGJhY2sgdG8gZmluZCBhIGZ1bmN0aW9uIHNpZ25hdHVyZS4gKi8KKwlpZiAob3B0LT5mdW5jbmFtZSAmJiBmdW5jbmFtZV9uZWVkZWQpCisJCXNob3dfZnVuY25hbWVfbGluZShvcHQsIGdzLCBib2wsIGN1cik7CisKKwkvKiBCYWNrIGZvcndhcmQuICovCisJd2hpbGUgKGN1ciA8IGxubykgeworCQljaGFyICplb2wgPSBib2wsIHNpZ24gPSAoY3VyID09IGZ1bmNuYW1lX2xubykgPyAnPScgOiAnLSc7CisKKwkJd2hpbGUgKCplb2wgIT0gJ1xuJykKKwkJCWVvbCsrOworCQlzaG93X2xpbmUob3B0LCBib2wsIGVvbCwgZ3MtPm5hbWUsIGN1ciwgMCwgc2lnbik7CisJCWJvbCA9IGVvbCArIDE7CisJCWN1cisrOworCX0KK30KKworc3RhdGljIGludCBzaG91bGRfbG9va2FoZWFkKHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCXN0cnVjdCBncmVwX3BhdCAqcDsKKworCWlmIChvcHQtPmV4dGVuZGVkKQorCQlyZXR1cm4gMDsgLyogcHVudCBmb3IgdG9vIGNvbXBsZXggc3R1ZmYgKi8KKwlpZiAob3B0LT5pbnZlcnQpCisJCXJldHVybiAwOworCWZvciAocCA9IG9wdC0+cGF0dGVybl9saXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+dG9rZW4gIT0gR1JFUF9QQVRURVJOKQorCQkJcmV0dXJuIDA7IC8qIHB1bnQgZm9yICJoZWFkZXIgb25seSIgYW5kIHN0dWZmICovCisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGxvb2tfYWhlYWQoc3RydWN0IGdyZXBfb3B0ICpvcHQsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmxlZnRfcCwKKwkJICAgICAgdW5zaWduZWQgKmxub19wLAorCQkgICAgICBjaGFyICoqYm9sX3ApCit7CisJdW5zaWduZWQgbG5vID0gKmxub19wOworCWNoYXIgKmJvbCA9ICpib2xfcDsKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnA7CisJY2hhciAqc3AsICpsYXN0X2JvbDsKKwlyZWdvZmZfdCBlYXJsaWVzdCA9IC0xOworCisJZm9yIChwID0gb3B0LT5wYXR0ZXJuX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWludCBoaXQ7CisJCXJlZ21hdGNoX3QgbTsKKworCQloaXQgPSBwYXRtYXRjaChwLCBib2wsIGJvbCArICpsZWZ0X3AsICZtLCAwKTsKKwkJaWYgKCFoaXQgfHwgbS5ybV9zbyA8IDAgfHwgbS5ybV9lbyA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKGVhcmxpZXN0IDwgMCB8fCBtLnJtX3NvIDwgZWFybGllc3QpCisJCQllYXJsaWVzdCA9IG0ucm1fc287CisJfQorCisJaWYgKGVhcmxpZXN0IDwgMCkgeworCQkqYm9sX3AgPSBib2wgKyAqbGVmdF9wOworCQkqbGVmdF9wID0gMDsKKwkJcmV0dXJuIDE7CisJfQorCWZvciAoc3AgPSBib2wgKyBlYXJsaWVzdDsgYm9sIDwgc3AgJiYgc3BbLTFdICE9ICdcbic7IHNwLS0pCisJCTsgLyogZmluZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lICovCisJbGFzdF9ib2wgPSBzcDsKKworCWZvciAoc3AgPSBib2w7IHNwIDwgbGFzdF9ib2w7IHNwKyspIHsKKwkJaWYgKCpzcCA9PSAnXG4nKQorCQkJbG5vKys7CisJfQorCSpsZWZ0X3AgLT0gbGFzdF9ib2wgLSBib2w7CisJKmJvbF9wID0gbGFzdF9ib2w7CisJKmxub19wID0gbG5vOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbGxfdGV4dGNvbnZfZ3JlcChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRyaXZlciwKKwkJCSAgICAgIHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpCit7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRmOworCWNoYXIgKmJ1ZjsKKwlzaXplX3Qgc2l6ZTsKKworCWlmICghZHJpdmVyIHx8ICFkcml2ZXItPnRleHRjb252KQorCQlyZXR1cm4gZ3JlcF9zb3VyY2VfbG9hZChncyk7CisKKwkvKgorCSAqIFRoZSB0ZXh0Y29udiBpbnRlcmZhY2UgaXMgaW50aW1hdGVseSB0aWVkIHRvIGRpZmZfZmlsZXNwZWNzLCBzbyB3ZQorCSAqIGhhdmUgdG8gcHJldGVuZCB0byBiZSBvbmUuIElmIHdlIGNvdWxkIHVuaWZ5IHRoZSBncmVwX3NvdXJjZQorCSAqIGFuZCBkaWZmX2ZpbGVzcGVjIHN0cnVjdHMsIHRoaXMgbWVzcyBjb3VsZCBqdXN0IGdvIGF3YXkuCisJICovCisJZGYgPSBhbGxvY19maWxlc3BlYyhncy0+cGF0aCk7CisJc3dpdGNoIChncy0+dHlwZSkgeworCWNhc2UgR1JFUF9TT1VSQ0VfT0lEOgorCQlmaWxsX2ZpbGVzcGVjKGRmLCBncy0+aWRlbnRpZmllciwgMSwgMDEwMDY0NCk7CisJCWJyZWFrOworCWNhc2UgR1JFUF9TT1VSQ0VfRklMRToKKwkJZmlsbF9maWxlc3BlYyhkZiwgJm51bGxfb2lkLCAwLCAwMTAwNjQ0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCJhdHRlbXB0IHRvIHRleHRjb252IHNvbWV0aGluZyB3aXRob3V0IGEgcGF0aD8iKTsKKwl9CisKKwkvKgorCSAqIGZpbGxfdGV4dGNvbnYgaXMgbm90IHJlbW90ZWx5IHRocmVhZC1zYWZlOyBpdCBtb2RpZmllcyB0aGUgZ2xvYmFsCisJICogZGlmZiB0ZW1wZmlsZSBzdHJ1Y3R1cmUsIHdyaXRlcyB0byB0aGVfcmVwbydzIG9kYiBhbmQgbWlnaHQKKwkgKiBpbnRlcm5hbGx5IGNhbGwgdGhyZWFkLXVuc2FmZSBmdW5jdGlvbnMgc3VjaCBhcyB0aGUKKwkgKiBwcmVwYXJlX3BhY2tlZF9naXQoKSBsYXp5LWluaXRpYWxpemF0b3IuIEJlY2F1c2Ugb2YgdGhlIGxhc3QgdHdvLCB3ZQorCSAqIG11c3QgZW5zdXJlIG11dHVhbCBleGNsdXNpb24gYmV0d2VlbiB0aGlzIGNhbGwgYW5kIHRoZSBvYmplY3QgcmVhZGluZworCSAqIEFQSSwgdGh1cyB3ZSB1c2Ugb2JqX3JlYWRfbG9jaygpIGhlcmUuCisJICoKKwkgKiBUT0RPOiBhbGxvd2luZyB0ZXh0IGNvbnZlcnNpb24gdG8gcnVuIGluIHBhcmFsbGVsIHdpdGggb2JqZWN0CisJICogcmVhZGluZyBvcGVyYXRpb25zIG1pZ2h0IGluY3JlYXNlIHBlcmZvcm1hbmNlIGluIHRoZSBtdWx0aXRocmVhZGVkCisJICogbm9uLXdvcmt0cmVlZSBnaXQtZ3JlcCB3aXRoIC0tdGV4dGNvbnYuCisJICovCisJb2JqX3JlYWRfbG9jaygpOworCXNpemUgPSBmaWxsX3RleHRjb252KHIsIGRyaXZlciwgZGYsICZidWYpOworCW9ial9yZWFkX3VubG9jaygpOworCWZyZWVfZmlsZXNwZWMoZGYpOworCisJLyoKKwkgKiBUaGUgbm9ybWFsIGZpbGxfdGV4dGNvbnYgdXNhZ2UgYnkgdGhlIGRpZmYgbWFjaGluZXJ5IHdvdWxkIGp1c3Qga2VlcAorCSAqIHRoZSB0ZXh0Y29udidkIGJ1ZiBzZXBhcmF0ZSBmcm9tIHRoZSBkaWZmX2ZpbGVzcGVjLiBCdXQgbXVjaCBvZiB0aGUKKwkgKiBncmVwIGNvZGUgcGFzc2VzIGFyb3VuZCBhIGdyZXBfc291cmNlIGFuZCBhc3N1bWVzIHRoYXQgaXRzICJidWYiCisJICogcG9pbnRlciBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0aGluZyB3ZSBhcmUgc2VhcmNoaW5nLiBTbyBsZXQncworCSAqIGluc3RhbGwgb3VyIHRleHRjb252J2QgdmVyc2lvbiBpbnRvIHRoZSBncmVwX3NvdXJjZSwgdGFraW5nIGNhcmUgbm90CisJICogdG8gbGVhayBhbnkgZXhpc3RpbmcgYnVmZmVyLgorCSAqLworCWdyZXBfc291cmNlX2NsZWFyX2RhdGEoZ3MpOworCWdzLT5idWYgPSBidWY7CisJZ3MtPnNpemUgPSBzaXplOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfZW1wdHlfbGluZShjb25zdCBjaGFyICpib2wsIGNvbnN0IGNoYXIgKmVvbCkKK3sKKwl3aGlsZSAoYm9sIDwgZW9sICYmIGlzc3BhY2UoKmJvbCkpCisJCWJvbCsrOworCXJldHVybiBib2wgPT0gZW9sOworfQorCitzdGF0aWMgaW50IGdyZXBfc291cmNlXzEoc3RydWN0IGdyZXBfb3B0ICpvcHQsIHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MsIGludCBjb2xsZWN0X2hpdHMpCit7CisJY2hhciAqYm9sOworCWNoYXIgKnBlZWtfYm9sID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGxlZnQ7CisJdW5zaWduZWQgbG5vID0gMTsKKwl1bnNpZ25lZCBsYXN0X2hpdCA9IDA7CisJaW50IGJpbmFyeV9tYXRjaF9vbmx5ID0gMDsKKwl1bnNpZ25lZCBjb3VudCA9IDA7CisJaW50IHRyeV9sb29rYWhlYWQgPSAwOworCWludCBzaG93X2Z1bmN0aW9uID0gMDsKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udiA9IE5VTEw7CisJZW51bSBncmVwX2NvbnRleHQgY3R4ID0gR1JFUF9DT05URVhUX0hFQUQ7CisJeGRlbWl0Y29uZl90IHhlY2ZnOworCisJaWYgKCFvcHQtPnN0YXR1c19vbmx5ICYmIGdzLT5uYW1lID09IE5VTEwpCisJCUJVRygiZ3JlcCBjYWxsIHdoaWNoIGNvdWxkIHByaW50IGEgbmFtZSByZXF1aXJlcyAiCisJCSAgICAiZ3JlcF9zb3VyY2UubmFtZSBiZSBub24tTlVMTCIpOworCisJaWYgKCFvcHQtPm91dHB1dCkKKwkJb3B0LT5vdXRwdXQgPSBzdGRfb3V0cHV0OworCisJaWYgKG9wdC0+cHJlX2NvbnRleHQgfHwgb3B0LT5wb3N0X2NvbnRleHQgfHwgb3B0LT5maWxlX2JyZWFrIHx8CisJICAgIG9wdC0+ZnVuY2JvZHkpIHsKKwkJLyogU2hvdyBodW5rIG1hcmtzLCBleGNlcHQgZm9yIHRoZSBmaXJzdCBmaWxlLiAqLworCQlpZiAob3B0LT5sYXN0X3Nob3duKQorCQkJb3B0LT5zaG93X2h1bmtfbWFyayA9IDE7CisJCS8qCisJCSAqIElmIHdlJ3JlIHVzaW5nIHRocmVhZHMgdGhlbiB3ZSBjYW4ndCBlYXNpbHkgaWRlbnRpZnkKKwkJICogdGhlIGZpcnN0IGZpbGUuICBBbHdheXMgcHV0IGh1bmsgbWFya3MgaW4gdGhhdCBjYXNlCisJCSAqIGFuZCBza2lwIHRoZSB2ZXJ5IGZpcnN0IG9uZSBsYXRlciBpbiB3b3JrX2RvbmUoKS4KKwkJICovCisJCWlmIChvcHQtPm91dHB1dCAhPSBzdGRfb3V0cHV0KQorCQkJb3B0LT5zaG93X2h1bmtfbWFyayA9IDE7CisJfQorCW9wdC0+bGFzdF9zaG93biA9IDA7CisKKwlpZiAob3B0LT5hbGxvd190ZXh0Y29udikgeworCQlncmVwX3NvdXJjZV9sb2FkX2RyaXZlcihncywgb3B0LT5yZXBvLT5pbmRleCk7CisJCS8qCisJCSAqIFdlIG1pZ2h0IHNldCB1cCB0aGUgc2hhcmVkIHRleHRjb252IGNhY2hlIGRhdGEgaGVyZSwgd2hpY2gKKwkJICogaXMgbm90IHRocmVhZC1zYWZlLiBBbHNvLCBnZXRfb2lkX3dpdGhfY29udGV4dCgpIGFuZAorCQkgKiBwYXJzZV9vYmplY3QoKSBtaWdodCBiZSBpbnRlcm5hbGx5IGNhbGxlZC4gQXMgdGhleSBhcmUgbm90CisJCSAqIGN1cnJlbnR5IHRocmVhZC1zYWZlIGFuZCBtaWdodCBiZSByYWN5IHdpdGggb2JqZWN0IHJlYWRpbmcsCisJCSAqIG9ial9yZWFkX2xvY2soKSBtdXN0IGJlIGNhbGxlZC4KKwkJICovCisJCWdyZXBfYXR0cl9sb2NrKCk7CisJCW9ial9yZWFkX2xvY2soKTsKKwkJdGV4dGNvbnYgPSB1c2VyZGlmZl9nZXRfdGV4dGNvbnYob3B0LT5yZXBvLCBncy0+ZHJpdmVyKTsKKwkJb2JqX3JlYWRfdW5sb2NrKCk7CisJCWdyZXBfYXR0cl91bmxvY2soKTsKKwl9CisKKwkvKgorCSAqIFdlIGtub3cgdGhlIHJlc3VsdCBvZiBhIHRleHRjb252IGlzIHRleHQsIHNvIHdlIG9ubHkgaGF2ZSB0byBjYXJlCisJICogYWJvdXQgYmluYXJ5IGhhbmRsaW5nIGlmIHdlIGFyZSBub3QgdXNpbmcgaXQuCisJICovCisJaWYgKCF0ZXh0Y29udikgeworCQlzd2l0Y2ggKG9wdC0+YmluYXJ5KSB7CisJCWNhc2UgR1JFUF9CSU5BUllfREVGQVVMVDoKKwkJCWlmIChncmVwX3NvdXJjZV9pc19iaW5hcnkoZ3MsIG9wdC0+cmVwby0+aW5kZXgpKQorCQkJCWJpbmFyeV9tYXRjaF9vbmx5ID0gMTsKKwkJCWJyZWFrOworCQljYXNlIEdSRVBfQklOQVJZX05PTUFUQ0g6CisJCQlpZiAoZ3JlcF9zb3VyY2VfaXNfYmluYXJ5KGdzLCBvcHQtPnJlcG8tPmluZGV4KSkKKwkJCQlyZXR1cm4gMDsgLyogQXNzdW1lIHVubWF0Y2ggKi8KKwkJCWJyZWFrOworCQljYXNlIEdSRVBfQklOQVJZX1RFWFQ6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygidW5rbm93biBiaW5hcnkgaGFuZGxpbmcgbW9kZSIpOworCQl9CisJfQorCisJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJb3B0LT5wcml2ID0gJnhlY2ZnOworCisJdHJ5X2xvb2thaGVhZCA9IHNob3VsZF9sb29rYWhlYWQob3B0KTsKKworCWlmIChmaWxsX3RleHRjb252X2dyZXAob3B0LT5yZXBvLCB0ZXh0Y29udiwgZ3MpIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlib2wgPSBncy0+YnVmOworCWxlZnQgPSBncy0+c2l6ZTsKKwl3aGlsZSAobGVmdCkgeworCQljaGFyICplb2wsIGNoOworCQlpbnQgaGl0OworCQlzc2l6ZV90IGNubzsKKwkJc3NpemVfdCBjb2wgPSAtMSwgaWNvbCA9IC0xOworCisJCS8qCisJCSAqIGxvb2tfYWhlYWQoKSBza2lwcyBxdWlja2x5IHRvIHRoZSBsaW5lIHRoYXQgcG9zc2libHkKKwkJICogaGFzIHRoZSBuZXh0IGhpdDsgZG9uJ3QgY2FsbCBpdCBpZiB3ZSBuZWVkIHRvIGRvCisJCSAqIHNvbWV0aGluZyBtb3JlIHRoYW4ganVzdCBza2lwcGluZyB0aGUgY3VycmVudCBsaW5lCisJCSAqIGluIHJlc3BvbnNlIHRvIGFuIHVubWF0Y2ggZm9yIHRoZSBjdXJyZW50IGxpbmUuICBFLmcuCisJCSAqIGluc2lkZSBhIHBvc3QtY29udGV4dCB3aW5kb3csIHdlIHdpbGwgc2hvdyB0aGUgY3VycmVudAorCQkgKiBsaW5lIGFzIGEgY29udGV4dCBhcm91bmQgdGhlIHByZXZpb3VzIGhpdCB3aGVuIGl0CisJCSAqIGRvZXNuJ3QgaGl0LgorCQkgKi8KKwkJaWYgKHRyeV9sb29rYWhlYWQKKwkJICAgICYmICEobGFzdF9oaXQKKwkJCSAmJiAoc2hvd19mdW5jdGlvbiB8fAorCQkJICAgICBsbm8gPD0gbGFzdF9oaXQgKyBvcHQtPnBvc3RfY29udGV4dCkpCisJCSAgICAmJiBsb29rX2FoZWFkKG9wdCwgJmxlZnQsICZsbm8sICZib2wpKQorCQkJYnJlYWs7CisJCWVvbCA9IGVuZF9vZl9saW5lKGJvbCwgJmxlZnQpOworCQljaCA9ICplb2w7CisJCSplb2wgPSAwOworCisJCWlmICgoY3R4ID09IEdSRVBfQ09OVEVYVF9IRUFEKSAmJiAoZW9sID09IGJvbCkpCisJCQljdHggPSBHUkVQX0NPTlRFWFRfQk9EWTsKKworCQloaXQgPSBtYXRjaF9saW5lKG9wdCwgYm9sLCBlb2wsICZjb2wsICZpY29sLCBjdHgsIGNvbGxlY3RfaGl0cyk7CisJCSplb2wgPSBjaDsKKworCQlpZiAoY29sbGVjdF9oaXRzKQorCQkJZ290byBuZXh0X2xpbmU7CisKKwkJLyogImdyZXAgLXYgLWUgZm9vIC1lIGJsYSIgc2hvdWxkIGxpc3QgbGluZXMKKwkJICogdGhhdCBkbyBub3QgaGF2ZSBlaXRoZXIsIHNvIGludmVyc2lvbiBzaG91bGQKKwkJICogYmUgZG9uZSBvdXRzaWRlLgorCQkgKi8KKwkJaWYgKG9wdC0+aW52ZXJ0KQorCQkJaGl0ID0gIWhpdDsKKwkJaWYgKG9wdC0+dW5tYXRjaF9uYW1lX29ubHkpIHsKKwkJCWlmIChoaXQpCisJCQkJcmV0dXJuIDA7CisJCQlnb3RvIG5leHRfbGluZTsKKwkJfQorCQlpZiAoaGl0KSB7CisJCQljb3VudCsrOworCQkJaWYgKG9wdC0+c3RhdHVzX29ubHkpCisJCQkJcmV0dXJuIDE7CisJCQlpZiAob3B0LT5uYW1lX29ubHkpIHsKKwkJCQlzaG93X25hbWUob3B0LCBncy0+bmFtZSk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlpZiAob3B0LT5jb3VudCkKKwkJCQlnb3RvIG5leHRfbGluZTsKKwkJCWlmIChiaW5hcnlfbWF0Y2hfb25seSkgeworCQkJCW9wdC0+b3V0cHV0KG9wdCwgIkJpbmFyeSBmaWxlICIsIDEyKTsKKwkJCQlvdXRwdXRfY29sb3Iob3B0LCBncy0+bmFtZSwgc3RybGVuKGdzLT5uYW1lKSwKKwkJCQkJICAgICBvcHQtPmNvbG9yc1tHUkVQX0NPTE9SX0ZJTEVOQU1FXSk7CisJCQkJb3B0LT5vdXRwdXQob3B0LCAiIG1hdGNoZXNcbiIsIDkpOworCQkJCXJldHVybiAxOworCQkJfQorCQkJLyogSGl0IGF0IHRoaXMgbGluZS4gIElmIHdlIGhhdmVuJ3Qgc2hvd24gdGhlCisJCQkgKiBwcmUtY29udGV4dCBsaW5lcywgd2Ugd291bGQgbmVlZCB0byBzaG93IHRoZW0uCisJCQkgKi8KKwkJCWlmIChvcHQtPnByZV9jb250ZXh0IHx8IG9wdC0+ZnVuY2JvZHkpCisJCQkJc2hvd19wcmVfY29udGV4dChvcHQsIGdzLCBib2wsIGVvbCwgbG5vKTsKKwkJCWVsc2UgaWYgKG9wdC0+ZnVuY25hbWUpCisJCQkJc2hvd19mdW5jbmFtZV9saW5lKG9wdCwgZ3MsIGJvbCwgbG5vKTsKKwkJCWNubyA9IG9wdC0+aW52ZXJ0ID8gaWNvbCA6IGNvbDsKKwkJCWlmIChjbm8gPCAwKSB7CisJCQkJLyoKKwkJCQkgKiBBIG5lZ2F0aXZlIGNubyBpbmRpY2F0ZXMgdGhhdCB0aGVyZSB3YXMgbm8KKwkJCQkgKiBtYXRjaCBvbiB0aGUgbGluZS4gV2UgYXJlIHRodXMgaW52ZXJ0ZWQgYW5kCisJCQkJICogYmVpbmcgYXNrZWQgdG8gc2hvdyBhbGwgbGluZXMgdGhhdCBfZG9uJ3RfCisJCQkJICogbWF0Y2ggYSBnaXZlbiBleHByZXNzaW9uLiBUaGVyZWZvcmUsIHNldCBjbm8KKwkJCQkgKiB0byAwIHRvIHN1Z2dlc3QgdGhlIHdob2xlIGxpbmUgbWF0Y2hlcy4KKwkJCQkgKi8KKwkJCQljbm8gPSAwOworCQkJfQorCQkJc2hvd19saW5lKG9wdCwgYm9sLCBlb2wsIGdzLT5uYW1lLCBsbm8sIGNubyArIDEsICc6Jyk7CisJCQlsYXN0X2hpdCA9IGxubzsKKwkJCWlmIChvcHQtPmZ1bmNib2R5KQorCQkJCXNob3dfZnVuY3Rpb24gPSAxOworCQkJZ290byBuZXh0X2xpbmU7CisJCX0KKwkJaWYgKHNob3dfZnVuY3Rpb24gJiYgKCFwZWVrX2JvbCB8fCBwZWVrX2JvbCA8IGJvbCkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgcGVla19sZWZ0ID0gbGVmdDsKKwkJCWNoYXIgKnBlZWtfZW9sID0gZW9sOworCisJCQkvKgorCQkJICogVHJhaWxpbmcgZW1wdHkgbGluZXMgYXJlIG5vdCBpbnRlcmVzdGluZy4KKwkJCSAqIFBlZWsgcGFzdCB0aGVtIHRvIHNlZSBpZiB0aGV5IGJlbG9uZyB0byB0aGUKKwkJCSAqIGJvZHkgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uCisJCQkgKi8KKwkJCXBlZWtfYm9sID0gYm9sOworCQkJd2hpbGUgKGlzX2VtcHR5X2xpbmUocGVla19ib2wsIHBlZWtfZW9sKSkgeworCQkJCXBlZWtfYm9sID0gcGVla19lb2wgKyAxOworCQkJCXBlZWtfZW9sID0gZW5kX29mX2xpbmUocGVla19ib2wsICZwZWVrX2xlZnQpOworCQkJfQorCisJCQlpZiAobWF0Y2hfZnVuY25hbWUob3B0LCBncywgcGVla19ib2wsIHBlZWtfZW9sKSkKKwkJCQlzaG93X2Z1bmN0aW9uID0gMDsKKwkJfQorCQlpZiAoc2hvd19mdW5jdGlvbiB8fAorCQkgICAgKGxhc3RfaGl0ICYmIGxubyA8PSBsYXN0X2hpdCArIG9wdC0+cG9zdF9jb250ZXh0KSkgeworCQkJLyogSWYgdGhlIGxhc3QgaGl0IGlzIHdpdGhpbiB0aGUgcG9zdCBjb250ZXh0LAorCQkJICogd2UgbmVlZCB0byBzaG93IHRoaXMgbGluZS4KKwkJCSAqLworCQkJc2hvd19saW5lKG9wdCwgYm9sLCBlb2wsIGdzLT5uYW1lLCBsbm8sIGNvbCArIDEsICctJyk7CisJCX0KKworCW5leHRfbGluZToKKwkJYm9sID0gZW9sICsgMTsKKwkJaWYgKCFsZWZ0KQorCQkJYnJlYWs7CisJCWxlZnQtLTsKKwkJbG5vKys7CisJfQorCisJaWYgKGNvbGxlY3RfaGl0cykKKwkJcmV0dXJuIDA7CisKKwlpZiAob3B0LT5zdGF0dXNfb25seSkKKwkJcmV0dXJuIG9wdC0+dW5tYXRjaF9uYW1lX29ubHk7CisJaWYgKG9wdC0+dW5tYXRjaF9uYW1lX29ubHkpIHsKKwkJLyogV2UgZGlkIG5vdCBzZWUgYW55IGhpdCwgc28gd2Ugd2FudCB0byBzaG93IHRoaXMgKi8KKwkJc2hvd19uYW1lKG9wdCwgZ3MtPm5hbWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwl4ZGlmZl9jbGVhcl9maW5kX2Z1bmMoJnhlY2ZnKTsKKwlvcHQtPnByaXYgPSBOVUxMOworCisJLyogTkVFRFNXT1JLOgorCSAqIFRoZSByZWFsICJncmVwIC1jIGZvbyAqLmMiIGdpdmVzIG1hbnkgImJhci5jOjAiIGxpbmVzLAorCSAqIHdoaWNoIGZlZWxzIG1vc3RseSB1c2VsZXNzIGJ1dCBzb21ldGltZXMgdXNlZnVsLiAgTWF5YmUKKwkgKiBtYWtlIGl0IGFub3RoZXIgb3B0aW9uPyAgRm9yIG5vdyBzdXBwcmVzcyB0aGVtLgorCSAqLworCWlmIChvcHQtPmNvdW50ICYmIGNvdW50KSB7CisJCWNoYXIgYnVmWzMyXTsKKwkJaWYgKG9wdC0+cGF0aG5hbWUpIHsKKwkJCW91dHB1dF9jb2xvcihvcHQsIGdzLT5uYW1lLCBzdHJsZW4oZ3MtPm5hbWUpLAorCQkJCSAgICAgb3B0LT5jb2xvcnNbR1JFUF9DT0xPUl9GSUxFTkFNRV0pOworCQkJb3V0cHV0X3NlcChvcHQsICc6Jyk7CisJCX0KKwkJeHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwgY291bnQpOworCQlvcHQtPm91dHB1dChvcHQsIGJ1Ziwgc3RybGVuKGJ1ZikpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuICEhbGFzdF9oaXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNscl9oaXRfbWFya2VyKHN0cnVjdCBncmVwX2V4cHIgKngpCit7CisJLyogQWxsLWhpdCBtYXJrZXJzIGFyZSBtZWFuaW5nZnVsIG9ubHkgYXQgdGhlIHZlcnkgdG9wIGxldmVsCisJICogT1Igbm9kZS4KKwkgKi8KKwl3aGlsZSAoMSkgeworCQl4LT5oaXQgPSAwOworCQlpZiAoeC0+bm9kZSAhPSBHUkVQX05PREVfT1IpCisJCQlyZXR1cm47CisJCXgtPnUuYmluYXJ5LmxlZnQtPmhpdCA9IDA7CisJCXggPSB4LT51LmJpbmFyeS5yaWdodDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hrX2hpdF9tYXJrZXIoc3RydWN0IGdyZXBfZXhwciAqeCkKK3sKKwkvKiBUb3AgbGV2ZWwgbm9kZXMgaGF2ZSBoaXQgbWFya2Vycy4gIFNlZSBpZiB0aGV5IGFsbCBhcmUgaGl0cyAqLworCXdoaWxlICgxKSB7CisJCWlmICh4LT5ub2RlICE9IEdSRVBfTk9ERV9PUikKKwkJCXJldHVybiB4LT5oaXQ7CisJCWlmICgheC0+dS5iaW5hcnkubGVmdC0+aGl0KQorCQkJcmV0dXJuIDA7CisJCXggPSB4LT51LmJpbmFyeS5yaWdodDsKKwl9Cit9CisKK2ludCBncmVwX3NvdXJjZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgc3RydWN0IGdyZXBfc291cmNlICpncykKK3sKKwkvKgorCSAqIHdlIGRvIG5vdCBoYXZlIHRvIGRvIHRoZSB0d28tcGFzcyBncmVwIHdoZW4gd2UgZG8gbm90IGNoZWNrCisJICogYnVmZmVyLXdpZGUgImFsbC1tYXRjaCIuCisJICovCisJaWYgKCFvcHQtPmFsbF9tYXRjaCkKKwkJcmV0dXJuIGdyZXBfc291cmNlXzEob3B0LCBncywgMCk7CisKKwkvKiBPdGhlcndpc2UgdGhlIHRvcGxldmVsICJvciIgdGVybXMgaGl0IGEgYml0IGRpZmZlcmVudGx5LgorCSAqIFdlIGZpcnN0IGNsZWFyIGhpdCBtYXJrZXJzIGZyb20gdGhlbS4KKwkgKi8KKwljbHJfaGl0X21hcmtlcihvcHQtPnBhdHRlcm5fZXhwcmVzc2lvbik7CisJZ3JlcF9zb3VyY2VfMShvcHQsIGdzLCAxKTsKKworCWlmICghY2hrX2hpdF9tYXJrZXIob3B0LT5wYXR0ZXJuX2V4cHJlc3Npb24pKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBncmVwX3NvdXJjZV8xKG9wdCwgZ3MsIDApOworfQorCitpbnQgZ3JlcF9idWZmZXIoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBncmVwX3NvdXJjZSBnczsKKwlpbnQgcjsKKworCWdyZXBfc291cmNlX2luaXQoJmdzLCBHUkVQX1NPVVJDRV9CVUYsIE5VTEwsIE5VTEwsIE5VTEwpOworCWdzLmJ1ZiA9IGJ1ZjsKKwlncy5zaXplID0gc2l6ZTsKKworCXIgPSBncmVwX3NvdXJjZShvcHQsICZncyk7CisKKwlncmVwX3NvdXJjZV9jbGVhcigmZ3MpOworCXJldHVybiByOworfQorCit2b2lkIGdyZXBfc291cmNlX2luaXQoc3RydWN0IGdyZXBfc291cmNlICpncywgZW51bSBncmVwX3NvdXJjZV90eXBlIHR5cGUsCisJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgICAgIGNvbnN0IHZvaWQgKmlkZW50aWZpZXIpCit7CisJZ3MtPnR5cGUgPSB0eXBlOworCWdzLT5uYW1lID0geHN0cmR1cF9vcl9udWxsKG5hbWUpOworCWdzLT5wYXRoID0geHN0cmR1cF9vcl9udWxsKHBhdGgpOworCWdzLT5idWYgPSBOVUxMOworCWdzLT5zaXplID0gMDsKKwlncy0+ZHJpdmVyID0gTlVMTDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgR1JFUF9TT1VSQ0VfRklMRToKKwkJZ3MtPmlkZW50aWZpZXIgPSB4c3RyZHVwKGlkZW50aWZpZXIpOworCQlicmVhazsKKwljYXNlIEdSRVBfU09VUkNFX09JRDoKKwkJZ3MtPmlkZW50aWZpZXIgPSBvaWRkdXAoaWRlbnRpZmllcik7CisJCWJyZWFrOworCWNhc2UgR1JFUF9TT1VSQ0VfQlVGOgorCQlncy0+aWRlbnRpZmllciA9IE5VTEw7CisJCWJyZWFrOworCX0KK30KKwordm9pZCBncmVwX3NvdXJjZV9jbGVhcihzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKQoreworCUZSRUVfQU5EX05VTEwoZ3MtPm5hbWUpOworCUZSRUVfQU5EX05VTEwoZ3MtPnBhdGgpOworCUZSRUVfQU5EX05VTEwoZ3MtPmlkZW50aWZpZXIpOworCWdyZXBfc291cmNlX2NsZWFyX2RhdGEoZ3MpOworfQorCit2b2lkIGdyZXBfc291cmNlX2NsZWFyX2RhdGEoc3RydWN0IGdyZXBfc291cmNlICpncykKK3sKKwlzd2l0Y2ggKGdzLT50eXBlKSB7CisJY2FzZSBHUkVQX1NPVVJDRV9GSUxFOgorCWNhc2UgR1JFUF9TT1VSQ0VfT0lEOgorCQlGUkVFX0FORF9OVUxMKGdzLT5idWYpOworCQlncy0+c2l6ZSA9IDA7CisJCWJyZWFrOworCWNhc2UgR1JFUF9TT1VSQ0VfQlVGOgorCQkvKiBsZWF2ZSB1c2VyLXByb3ZpZGVkIGJ1ZiBpbnRhY3QgKi8KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGdyZXBfc291cmNlX2xvYWRfb2lkKHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJZ3MtPmJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUoZ3MtPmlkZW50aWZpZXIsICZ0eXBlLCAmZ3MtPnNpemUpOworCWlmICghZ3MtPmJ1ZikKKwkJcmV0dXJuIGVycm9yKF8oIiclcyc6IHVuYWJsZSB0byByZWFkICVzIiksCisJCQkgICAgIGdzLT5uYW1lLAorCQkJICAgICBvaWRfdG9faGV4KGdzLT5pZGVudGlmaWVyKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF9zb3VyY2VfbG9hZF9maWxlKHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBncy0+aWRlbnRpZmllcjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyICpkYXRhOworCXNpemVfdCBzaXplOworCWludCBpOworCisJaWYgKGxzdGF0KGZpbGVuYW1lLCAmc3QpIDwgMCkgeworCWVycl9yZXQ6CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQllcnJvcl9lcnJubyhfKCJmYWlsZWQgdG8gc3RhdCAnJXMnIiksIGZpbGVuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIVNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCXJldHVybiAtMTsKKwlzaXplID0geHNpemVfdChzdC5zdF9zaXplKTsKKwlpID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworCWlmIChpIDwgMCkKKwkJZ290byBlcnJfcmV0OworCWRhdGEgPSB4bWFsbG9jeihzaXplKTsKKwlpZiAoc3Quc3Rfc2l6ZSAhPSByZWFkX2luX2Z1bGwoaSwgZGF0YSwgc2l6ZSkpIHsKKwkJZXJyb3JfZXJybm8oXygiJyVzJzogc2hvcnQgcmVhZCIpLCBmaWxlbmFtZSk7CisJCWNsb3NlKGkpOworCQlmcmVlKGRhdGEpOworCQlyZXR1cm4gLTE7CisJfQorCWNsb3NlKGkpOworCisJZ3MtPmJ1ZiA9IGRhdGE7CisJZ3MtPnNpemUgPSBzaXplOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdyZXBfc291cmNlX2xvYWQoc3RydWN0IGdyZXBfc291cmNlICpncykKK3sKKwlpZiAoZ3MtPmJ1ZikKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGdzLT50eXBlKSB7CisJY2FzZSBHUkVQX1NPVVJDRV9GSUxFOgorCQlyZXR1cm4gZ3JlcF9zb3VyY2VfbG9hZF9maWxlKGdzKTsKKwljYXNlIEdSRVBfU09VUkNFX09JRDoKKwkJcmV0dXJuIGdyZXBfc291cmNlX2xvYWRfb2lkKGdzKTsKKwljYXNlIEdSRVBfU09VUkNFX0JVRjoKKwkJcmV0dXJuIGdzLT5idWYgPyAwIDogLTE7CisJfQorCUJVRygiaW52YWxpZCBncmVwX3NvdXJjZSB0eXBlIHRvIGxvYWQiKTsKK30KKwordm9pZCBncmVwX3NvdXJjZV9sb2FkX2RyaXZlcihzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzLAorCQkJICAgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpZiAoZ3MtPmRyaXZlcikKKwkJcmV0dXJuOworCisJZ3JlcF9hdHRyX2xvY2soKTsKKwlpZiAoZ3MtPnBhdGgpCisJCWdzLT5kcml2ZXIgPSB1c2VyZGlmZl9maW5kX2J5X3BhdGgoaXN0YXRlLCBncy0+cGF0aCk7CisJaWYgKCFncy0+ZHJpdmVyKQorCQlncy0+ZHJpdmVyID0gdXNlcmRpZmZfZmluZF9ieV9uYW1lKCJkZWZhdWx0Iik7CisJZ3JlcF9hdHRyX3VubG9jaygpOworfQorCitzdGF0aWMgaW50IGdyZXBfc291cmNlX2lzX2JpbmFyeShzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzLAorCQkJCSBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlncmVwX3NvdXJjZV9sb2FkX2RyaXZlcihncywgaXN0YXRlKTsKKwlpZiAoZ3MtPmRyaXZlci0+YmluYXJ5ICE9IC0xKQorCQlyZXR1cm4gZ3MtPmRyaXZlci0+YmluYXJ5OworCisJaWYgKCFncmVwX3NvdXJjZV9sb2FkKGdzKSkKKwkJcmV0dXJuIGJ1ZmZlcl9pc19iaW5hcnkoZ3MtPmJ1ZiwgZ3MtPnNpemUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9ncmVwLmggYi9ncmVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExNWRiOAotLS0gL2Rldi9udWxsCisrKyBiL2dyZXAuaApAQCAtMCwwICsxLDIyNCBAQAorI2lmbmRlZiBHUkVQX0gKKyNkZWZpbmUgR1JFUF9ICisjaW5jbHVkZSAiY29sb3IuaCIKKyNpZmRlZiBVU0VfTElCUENSRTEKKyNpbmNsdWRlIDxwY3JlLmg+CisjaWZuZGVmIFBDUkVfTk9fVVRGOF9DSEVDSworI2RlZmluZSBQQ1JFX05PX1VURjhfQ0hFQ0sgMAorI2VuZGlmCisjZWxzZQordHlwZWRlZiBpbnQgcGNyZTsKK3R5cGVkZWYgaW50IHBjcmVfZXh0cmE7CisjZW5kaWYKKyNpZmRlZiBVU0VfTElCUENSRTIKKyNkZWZpbmUgUENSRTJfQ09ERV9VTklUX1dJRFRIIDgKKyNpbmNsdWRlIDxwY3JlMi5oPgorI2Vsc2UKK3R5cGVkZWYgaW50IHBjcmUyX2NvZGU7Cit0eXBlZGVmIGludCBwY3JlMl9tYXRjaF9kYXRhOwordHlwZWRlZiBpbnQgcGNyZTJfY29tcGlsZV9jb250ZXh0OworI2VuZGlmCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKworc3RydWN0IHJlcG9zaXRvcnk7CisKK2VudW0gZ3JlcF9wYXRfdG9rZW4geworCUdSRVBfUEFUVEVSTiwKKwlHUkVQX1BBVFRFUk5fSEVBRCwKKwlHUkVQX1BBVFRFUk5fQk9EWSwKKwlHUkVQX0FORCwKKwlHUkVQX09QRU5fUEFSRU4sCisJR1JFUF9DTE9TRV9QQVJFTiwKKwlHUkVQX05PVCwKKwlHUkVQX09SCit9OworCitlbnVtIGdyZXBfY29udGV4dCB7CisJR1JFUF9DT05URVhUX0hFQUQsCisJR1JFUF9DT05URVhUX0JPRFkKK307CisKK2VudW0gZ3JlcF9oZWFkZXJfZmllbGQgeworCUdSRVBfSEVBREVSX0ZJRUxEX01JTiA9IDAsCisJR1JFUF9IRUFERVJfQVVUSE9SID0gR1JFUF9IRUFERVJfRklFTERfTUlOLAorCUdSRVBfSEVBREVSX0NPTU1JVFRFUiwKKwlHUkVQX0hFQURFUl9SRUZMT0csCisKKwkvKiBNdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIGVudW0gKi8KKwlHUkVQX0hFQURFUl9GSUVMRF9NQVgKK307CisKK2VudW0gZ3JlcF9jb2xvciB7CisJR1JFUF9DT0xPUl9DT05URVhULAorCUdSRVBfQ09MT1JfRklMRU5BTUUsCisJR1JFUF9DT0xPUl9GVU5DVElPTiwKKwlHUkVQX0NPTE9SX0xJTkVOTywKKwlHUkVQX0NPTE9SX0NPTFVNTk5PLAorCUdSRVBfQ09MT1JfTUFUQ0hfQ09OVEVYVCwKKwlHUkVQX0NPTE9SX01BVENIX1NFTEVDVEVELAorCUdSRVBfQ09MT1JfU0VMRUNURUQsCisJR1JFUF9DT0xPUl9TRVAsCisJTlJfR1JFUF9DT0xPUlMKK307CisKK3N0cnVjdCBncmVwX3BhdCB7CisJc3RydWN0IGdyZXBfcGF0ICpuZXh0OworCWNvbnN0IGNoYXIgKm9yaWdpbjsKKwlpbnQgbm87CisJZW51bSBncmVwX3BhdF90b2tlbiB0b2tlbjsKKwljaGFyICpwYXR0ZXJuOworCXNpemVfdCBwYXR0ZXJubGVuOworCWVudW0gZ3JlcF9oZWFkZXJfZmllbGQgZmllbGQ7CisJcmVnZXhfdCByZWdleHA7CisJcGNyZSAqcGNyZTFfcmVnZXhwOworCXBjcmVfZXh0cmEgKnBjcmUxX2V4dHJhX2luZm87CisJY29uc3QgdW5zaWduZWQgY2hhciAqcGNyZTFfdGFibGVzOworCWludCBwY3JlMV9qaXRfb247CisJcGNyZTJfY29kZSAqcGNyZTJfcGF0dGVybjsKKwlwY3JlMl9tYXRjaF9kYXRhICpwY3JlMl9tYXRjaF9kYXRhOworCXBjcmUyX2NvbXBpbGVfY29udGV4dCAqcGNyZTJfY29tcGlsZV9jb250ZXh0OworCWNvbnN0IHVpbnQ4X3QgKnBjcmUyX3RhYmxlczsKKwl1aW50MzJfdCBwY3JlMl9qaXRfb247CisJdW5zaWduZWQgZml4ZWQ6MTsKKwl1bnNpZ25lZCBpc19maXhlZDoxOworCXVuc2lnbmVkIGlnbm9yZV9jYXNlOjE7CisJdW5zaWduZWQgd29yZF9yZWdleHA6MTsKK307CisKK2VudW0gZ3JlcF9leHByX25vZGUgeworCUdSRVBfTk9ERV9BVE9NLAorCUdSRVBfTk9ERV9OT1QsCisJR1JFUF9OT0RFX0FORCwKKwlHUkVQX05PREVfVFJVRSwKKwlHUkVQX05PREVfT1IKK307CisKK2VudW0gZ3JlcF9wYXR0ZXJuX3R5cGUgeworCUdSRVBfUEFUVEVSTl9UWVBFX1VOU1BFQ0lGSUVEID0gMCwKKwlHUkVQX1BBVFRFUk5fVFlQRV9CUkUsCisJR1JFUF9QQVRURVJOX1RZUEVfRVJFLAorCUdSRVBfUEFUVEVSTl9UWVBFX0ZJWEVELAorCUdSRVBfUEFUVEVSTl9UWVBFX1BDUkUKK307CisKK3N0cnVjdCBncmVwX2V4cHIgeworCWVudW0gZ3JlcF9leHByX25vZGUgbm9kZTsKKwl1bnNpZ25lZCBoaXQ7CisJdW5pb24geworCQlzdHJ1Y3QgZ3JlcF9wYXQgKmF0b207CisJCXN0cnVjdCBncmVwX2V4cHIgKnVuYXJ5OworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGdyZXBfZXhwciAqbGVmdDsKKwkJCXN0cnVjdCBncmVwX2V4cHIgKnJpZ2h0OworCQl9IGJpbmFyeTsKKwl9IHU7Cit9OworCitzdHJ1Y3QgZ3JlcF9vcHQgeworCXN0cnVjdCBncmVwX3BhdCAqcGF0dGVybl9saXN0OworCXN0cnVjdCBncmVwX3BhdCAqKnBhdHRlcm5fdGFpbDsKKwlzdHJ1Y3QgZ3JlcF9wYXQgKmhlYWRlcl9saXN0OworCXN0cnVjdCBncmVwX3BhdCAqKmhlYWRlcl90YWlsOworCXN0cnVjdCBncmVwX2V4cHIgKnBhdHRlcm5fZXhwcmVzc2lvbjsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJaW50IHByZWZpeF9sZW5ndGg7CisJcmVnZXhfdCByZWdleHA7CisJaW50IGxpbmVudW07CisJaW50IGNvbHVtbm51bTsKKwlpbnQgaW52ZXJ0OworCWludCBpZ25vcmVfY2FzZTsKKwlpbnQgc3RhdHVzX29ubHk7CisJaW50IG5hbWVfb25seTsKKwlpbnQgdW5tYXRjaF9uYW1lX29ubHk7CisJaW50IGNvdW50OworCWludCB3b3JkX3JlZ2V4cDsKKwlpbnQgZml4ZWQ7CisJaW50IGFsbF9tYXRjaDsKKwlpbnQgZGVidWc7CisjZGVmaW5lIEdSRVBfQklOQVJZX0RFRkFVTFQJMAorI2RlZmluZSBHUkVQX0JJTkFSWV9OT01BVENICTEKKyNkZWZpbmUgR1JFUF9CSU5BUllfVEVYVAkyCisJaW50IGJpbmFyeTsKKwlpbnQgYWxsb3dfdGV4dGNvbnY7CisJaW50IGV4dGVuZGVkOworCWludCB1c2VfcmVmbG9nX2ZpbHRlcjsKKwlpbnQgcGNyZTE7CisJaW50IHBjcmUyOworCWludCByZWxhdGl2ZTsKKwlpbnQgcGF0aG5hbWU7CisJaW50IG51bGxfZm9sbG93aW5nX25hbWU7CisJaW50IG9ubHlfbWF0Y2hpbmc7CisJaW50IGNvbG9yOworCWludCBtYXhfZGVwdGg7CisJaW50IGZ1bmNuYW1lOworCWludCBmdW5jYm9keTsKKwlpbnQgZXh0ZW5kZWRfcmVnZXhwX29wdGlvbjsKKwlpbnQgcGF0dGVybl90eXBlX29wdGlvbjsKKwlpbnQgaWdub3JlX2xvY2FsZTsKKwljaGFyIGNvbG9yc1tOUl9HUkVQX0NPTE9SU11bQ09MT1JfTUFYTEVOXTsKKwl1bnNpZ25lZCBwcmVfY29udGV4dDsKKwl1bnNpZ25lZCBwb3N0X2NvbnRleHQ7CisJdW5zaWduZWQgbGFzdF9zaG93bjsKKwlpbnQgc2hvd19odW5rX21hcms7CisJaW50IGZpbGVfYnJlYWs7CisJaW50IGhlYWRpbmc7CisJdm9pZCAqcHJpdjsKKworCXZvaWQgKCpvdXRwdXQpKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisJdm9pZCAqb3V0cHV0X3ByaXY7Cit9OworCit2b2lkIGluaXRfZ3JlcF9kZWZhdWx0cyhzdHJ1Y3QgcmVwb3NpdG9yeSAqKTsKK2ludCBncmVwX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICopOwordm9pZCBncmVwX2luaXQoc3RydWN0IGdyZXBfb3B0ICosIHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwcmVmaXgpOwordm9pZCBncmVwX2Rlc3Ryb3kodm9pZCk7Cit2b2lkIGdyZXBfY29tbWl0X3BhdHRlcm5fdHlwZShlbnVtIGdyZXBfcGF0dGVybl90eXBlLCBzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCk7CisKK3ZvaWQgYXBwZW5kX2dyZXBfcGF0KHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpwYXQsIHNpemVfdCBwYXRsZW4sIGNvbnN0IGNoYXIgKm9yaWdpbiwgaW50IG5vLCBlbnVtIGdyZXBfcGF0X3Rva2VuIHQpOwordm9pZCBhcHBlbmRfZ3JlcF9wYXR0ZXJuKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpwYXQsIGNvbnN0IGNoYXIgKm9yaWdpbiwgaW50IG5vLCBlbnVtIGdyZXBfcGF0X3Rva2VuIHQpOwordm9pZCBhcHBlbmRfaGVhZGVyX2dyZXBfcGF0dGVybihzdHJ1Y3QgZ3JlcF9vcHQgKiwgZW51bSBncmVwX2hlYWRlcl9maWVsZCwgY29uc3QgY2hhciAqKTsKK3ZvaWQgY29tcGlsZV9ncmVwX3BhdHRlcm5zKHN0cnVjdCBncmVwX29wdCAqb3B0KTsKK3ZvaWQgZnJlZV9ncmVwX3BhdHRlcm5zKHN0cnVjdCBncmVwX29wdCAqb3B0KTsKK2ludCBncmVwX2J1ZmZlcihzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitzdHJ1Y3QgZ3JlcF9zb3VyY2UgeworCWNoYXIgKm5hbWU7CisKKwllbnVtIGdyZXBfc291cmNlX3R5cGUgeworCQlHUkVQX1NPVVJDRV9PSUQsCisJCUdSRVBfU09VUkNFX0ZJTEUsCisJCUdSRVBfU09VUkNFX0JVRiwKKwl9IHR5cGU7CisJdm9pZCAqaWRlbnRpZmllcjsKKworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwljaGFyICpwYXRoOyAvKiBmb3IgYXR0cmlidXRlIGxvb2t1cHMgKi8KKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcml2ZXI7Cit9OworCit2b2lkIGdyZXBfc291cmNlX2luaXQoc3RydWN0IGdyZXBfc291cmNlICpncywgZW51bSBncmVwX3NvdXJjZV90eXBlIHR5cGUsCisJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgICAgIGNvbnN0IHZvaWQgKmlkZW50aWZpZXIpOwordm9pZCBncmVwX3NvdXJjZV9jbGVhcl9kYXRhKHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpOwordm9pZCBncmVwX3NvdXJjZV9jbGVhcihzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKTsKK3ZvaWQgZ3JlcF9zb3VyY2VfbG9hZF9kcml2ZXIoc3RydWN0IGdyZXBfc291cmNlICpncywKKwkJCSAgICAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOworCisKK2ludCBncmVwX3NvdXJjZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgc3RydWN0IGdyZXBfc291cmNlICpncyk7CisKK3N0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHRfZHVwKGNvbnN0IHN0cnVjdCBncmVwX29wdCAqb3B0KTsKK2ludCBncmVwX3RocmVhZHNfb2soY29uc3Qgc3RydWN0IGdyZXBfb3B0ICpvcHQpOworCisvKgorICogTXV0ZXggdXNlZCBhcm91bmQgYWNjZXNzIHRvIHRoZSBhdHRyaWJ1dGVzIG1hY2hpbmVyeSBpZgorICogb3B0LT51c2VfdGhyZWFkcy4gIE11c3QgYmUgaW5pdGlhbGl6ZWQvZGVzdHJveWVkIGJ5IGNhbGxlcnMhCisgKi8KK2V4dGVybiBpbnQgZ3JlcF91c2VfbG9ja3M7CitleHRlcm4gcHRocmVhZF9tdXRleF90IGdyZXBfYXR0cl9tdXRleDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9oYXNoLmggYi9oYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBmM2YxNgotLS0gL2Rldi9udWxsCisrKyBiL2hhc2guaApAQCAtMCwwICsxLDE4NyBAQAorI2lmbmRlZiBIQVNIX0gKKyNkZWZpbmUgSEFTSF9ICisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKworI2lmIGRlZmluZWQoU0hBMV9QUEMpCisjaW5jbHVkZSAicHBjL3NoYTEuaCIKKyNlbGlmIGRlZmluZWQoU0hBMV9BUFBMRSkKKyNpbmNsdWRlIDxDb21tb25DcnlwdG8vQ29tbW9uRGlnZXN0Lmg+CisjZWxpZiBkZWZpbmVkKFNIQTFfT1BFTlNTTCkKKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorI2VsaWYgZGVmaW5lZChTSEExX0RDKQorI2luY2x1ZGUgInNoYTFkY19naXQuaCIKKyNlbHNlIC8qIFNIQTFfQkxLICovCisjaW5jbHVkZSAiYmxvY2stc2hhMS9zaGExLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoU0hBMjU2X0dDUllQVCkKKyNkZWZpbmUgU0hBMjU2X05FRURTX0NMT05FX0hFTFBFUgorI2luY2x1ZGUgInNoYTI1Ni9nY3J5cHQuaCIKKyNlbGlmIGRlZmluZWQoU0hBMjU2X09QRU5TU0wpCisjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKyNlbHNlCisjaW5jbHVkZSAic2hhMjU2L2Jsb2NrL3NoYTI1Ni5oIgorI2VuZGlmCisKKyNpZm5kZWYgcGxhdGZvcm1fU0hBX0NUWAorLyoKKyAqIHBsYXRmb3JtJ3MgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBvZiBTSEEtMTsgY291bGQgYmUgT3BlblNTTCwKKyAqIGJsa19TSEEsIEFwcGxlIENvbW1vbkNyeXB0bywgZXRjLi4uICBOb3RlIHRoYXQgdGhlIHJlbGV2YW50CisgKiBTSEEtMSBoZWFkZXIgbWF5IGhhdmUgYWxyZWFkeSBkZWZpbmVkIHBsYXRmb3JtX1NIQV9DVFggZm9yIG91cgorICogb3duIGltcGxlbWVudGF0aW9ucyBsaWtlIGJsb2NrLXNoYTEgYW5kIHBwYy1zaGExLCBzbyB3ZSBsaXN0CisgKiB0aGUgZGVmYXVsdCBmb3IgT3BlblNTTCBjb21wYXRpYmxlIFNIQS0xIGltcGxlbWVudGF0aW9ucyBoZXJlLgorICovCisjZGVmaW5lIHBsYXRmb3JtX1NIQV9DVFgJU0hBX0NUWAorI2RlZmluZSBwbGF0Zm9ybV9TSEExX0luaXQJU0hBMV9Jbml0CisjZGVmaW5lIHBsYXRmb3JtX1NIQTFfVXBkYXRlCVNIQTFfVXBkYXRlCisjZGVmaW5lIHBsYXRmb3JtX1NIQTFfRmluYWwgICAgCVNIQTFfRmluYWwKKyNlbmRpZgorCisjZGVmaW5lIGdpdF9TSEFfQ1RYCQlwbGF0Zm9ybV9TSEFfQ1RYCisjZGVmaW5lIGdpdF9TSEExX0luaXQJCXBsYXRmb3JtX1NIQTFfSW5pdAorI2RlZmluZSBnaXRfU0hBMV9VcGRhdGUJCXBsYXRmb3JtX1NIQTFfVXBkYXRlCisjZGVmaW5lIGdpdF9TSEExX0ZpbmFsCQlwbGF0Zm9ybV9TSEExX0ZpbmFsCisKKyNpZm5kZWYgcGxhdGZvcm1fU0hBMjU2X0NUWAorI2RlZmluZSBwbGF0Zm9ybV9TSEEyNTZfQ1RYCVNIQTI1Nl9DVFgKKyNkZWZpbmUgcGxhdGZvcm1fU0hBMjU2X0luaXQJU0hBMjU2X0luaXQKKyNkZWZpbmUgcGxhdGZvcm1fU0hBMjU2X1VwZGF0ZQlTSEEyNTZfVXBkYXRlCisjZGVmaW5lIHBsYXRmb3JtX1NIQTI1Nl9GaW5hbAlTSEEyNTZfRmluYWwKKyNlbmRpZgorCisjZGVmaW5lIGdpdF9TSEEyNTZfQ1RYCQlwbGF0Zm9ybV9TSEEyNTZfQ1RYCisjZGVmaW5lIGdpdF9TSEEyNTZfSW5pdAkJcGxhdGZvcm1fU0hBMjU2X0luaXQKKyNkZWZpbmUgZ2l0X1NIQTI1Nl9VcGRhdGUJcGxhdGZvcm1fU0hBMjU2X1VwZGF0ZQorI2RlZmluZSBnaXRfU0hBMjU2X0ZpbmFsCXBsYXRmb3JtX1NIQTI1Nl9GaW5hbAorCisjaWZkZWYgcGxhdGZvcm1fU0hBMjU2X0Nsb25lCisjZGVmaW5lIGdpdF9TSEEyNTZfQ2xvbmUJcGxhdGZvcm1fU0hBMjU2X0Nsb25lCisjZW5kaWYKKworI2lmZGVmIFNIQTFfTUFYX0JMT0NLX1NJWkUKKyNpbmNsdWRlICJjb21wYXQvc2hhMS1jaHVua2VkLmgiCisjdW5kZWYgZ2l0X1NIQTFfVXBkYXRlCisjZGVmaW5lIGdpdF9TSEExX1VwZGF0ZQkJZ2l0X1NIQTFfVXBkYXRlX0NodW5rZWQKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2l0X1NIQTFfQ2xvbmUoZ2l0X1NIQV9DVFggKmRzdCwgY29uc3QgZ2l0X1NIQV9DVFggKnNyYykKK3sKKwltZW1jcHkoZHN0LCBzcmMsIHNpemVvZigqZHN0KSk7Cit9CisKKyNpZm5kZWYgU0hBMjU2X05FRURTX0NMT05FX0hFTFBFUgorc3RhdGljIGlubGluZSB2b2lkIGdpdF9TSEEyNTZfQ2xvbmUoZ2l0X1NIQTI1Nl9DVFggKmRzdCwgY29uc3QgZ2l0X1NIQTI1Nl9DVFggKnNyYykKK3sKKwltZW1jcHkoZHN0LCBzcmMsIHNpemVvZigqZHN0KSk7Cit9CisjZW5kaWYKKworLyoKKyAqIE5vdGUgdGhhdCB0aGVzZSBjb25zdGFudHMgYXJlIHN1aXRhYmxlIGZvciBpbmRleGluZyB0aGUgaGFzaF9hbGdvcyBhcnJheSBhbmQKKyAqIGNvbXBhcmluZyBhZ2FpbnN0IGVhY2ggb3RoZXIsIGJ1dCBhcmUgb3RoZXJ3aXNlIGFyYml0cmFyeSwgc28gdGhleSBzaG91bGQgbm90CisgKiBiZSBleHBvc2VkIHRvIHRoZSB1c2VyIG9yIHNlcmlhbGl6ZWQgdG8gZGlzay4gIFRvIGtub3cgd2hldGhlciBhCisgKiBnaXRfaGFzaF9hbGdvIHN0cnVjdCBwb2ludHMgdG8gc29tZSB1c2FibGUgaGFzaCBmdW5jdGlvbiwgdGVzdCB0aGUgZm9ybWF0X2lkCisgKiBmaWVsZCBmb3IgYmVpbmcgbm9uLXplcm8uICBVc2UgdGhlIG5hbWUgZmllbGQgZm9yIHVzZXItdmlzaWJsZSBzaXR1YXRpb25zIGFuZAorICogdGhlIGZvcm1hdF9pZCBmaWVsZCBmb3IgZml4ZWQtbGVuZ3RoIGZpZWxkcyBvbiBkaXNrLgorICovCisvKiBBbiB1bmtub3duIGhhc2ggZnVuY3Rpb24uICovCisjZGVmaW5lIEdJVF9IQVNIX1VOS05PV04gMAorLyogU0hBLTEgKi8KKyNkZWZpbmUgR0lUX0hBU0hfU0hBMSAxCisvKiBTSEEtMjU2ICAqLworI2RlZmluZSBHSVRfSEFTSF9TSEEyNTYgMgorLyogTnVtYmVyIG9mIGFsZ29yaXRobXMgc3VwcG9ydGVkIChpbmNsdWRpbmcgdW5rbm93bikuICovCisjZGVmaW5lIEdJVF9IQVNIX05BTEdPUyAoR0lUX0hBU0hfU0hBMjU2ICsgMSkKKworLyogQSBzdWl0YWJseSBhbGlnbmVkIHR5cGUgZm9yIHN0YWNrIGFsbG9jYXRpb25zIG9mIGhhc2ggY29udGV4dHMuICovCit1bmlvbiBnaXRfaGFzaF9jdHggeworCWdpdF9TSEFfQ1RYIHNoYTE7CisJZ2l0X1NIQTI1Nl9DVFggc2hhMjU2OworfTsKK3R5cGVkZWYgdW5pb24gZ2l0X2hhc2hfY3R4IGdpdF9oYXNoX2N0eDsKKwordHlwZWRlZiB2b2lkICgqZ2l0X2hhc2hfaW5pdF9mbikoZ2l0X2hhc2hfY3R4ICpjdHgpOwordHlwZWRlZiB2b2lkICgqZ2l0X2hhc2hfY2xvbmVfZm4pKGdpdF9oYXNoX2N0eCAqZHN0LCBjb25zdCBnaXRfaGFzaF9jdHggKnNyYyk7Cit0eXBlZGVmIHZvaWQgKCpnaXRfaGFzaF91cGRhdGVfZm4pKGdpdF9oYXNoX2N0eCAqY3R4LCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGxlbik7Cit0eXBlZGVmIHZvaWQgKCpnaXRfaGFzaF9maW5hbF9mbikodW5zaWduZWQgY2hhciAqaGFzaCwgZ2l0X2hhc2hfY3R4ICpjdHgpOworCitzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyB7CisJLyoKKwkgKiBUaGUgbmFtZSBvZiB0aGUgYWxnb3JpdGhtLCBhcyBhcHBlYXJzIGluIHRoZSBjb25maWcgZmlsZSBhbmQgaW4KKwkgKiBtZXNzYWdlcy4KKwkgKi8KKwljb25zdCBjaGFyICpuYW1lOworCisJLyogQSBmb3VyLWJ5dGUgdmVyc2lvbiBpZGVudGlmaWVyLCB1c2VkIGluIHBhY2sgaW5kaWNlcy4gKi8KKwl1aW50MzJfdCBmb3JtYXRfaWQ7CisKKwkvKiBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIGluIGJpbmFyeS4gKi8KKwlzaXplX3QgcmF3c3o7CisKKwkvKiBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIGluIGhleCBjaGFyYWN0ZXJzLiAqLworCXNpemVfdCBoZXhzejsKKworCS8qIFRoZSBibG9jayBzaXplIG9mIHRoZSBoYXNoLiAqLworCXNpemVfdCBibGtzejsKKworCS8qIFRoZSBoYXNoIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiAqLworCWdpdF9oYXNoX2luaXRfZm4gaW5pdF9mbjsKKworCS8qIFRoZSBoYXNoIGNvbnRleHQgY2xvbmluZyBmdW5jdGlvbi4gKi8KKwlnaXRfaGFzaF9jbG9uZV9mbiBjbG9uZV9mbjsKKworCS8qIFRoZSBoYXNoIHVwZGF0ZSBmdW5jdGlvbi4gKi8KKwlnaXRfaGFzaF91cGRhdGVfZm4gdXBkYXRlX2ZuOworCisJLyogVGhlIGhhc2ggZmluYWxpemF0aW9uIGZ1bmN0aW9uLiAqLworCWdpdF9oYXNoX2ZpbmFsX2ZuIGZpbmFsX2ZuOworCisJLyogVGhlIE9JRCBvZiB0aGUgZW1wdHkgdHJlZS4gKi8KKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICplbXB0eV90cmVlOworCisJLyogVGhlIE9JRCBvZiB0aGUgZW1wdHkgYmxvYi4gKi8KKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICplbXB0eV9ibG9iOworfTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyBoYXNoX2FsZ29zW0dJVF9IQVNIX05BTEdPU107CisKKy8qCisgKiBSZXR1cm4gYSBHSVRfSEFTSF8qIGNvbnN0YW50IGJhc2VkIG9uIHRoZSBuYW1lLiAgUmV0dXJucyBHSVRfSEFTSF9VTktOT1dOIGlmCisgKiB0aGUgbmFtZSBkb2Vzbid0IG1hdGNoIGEga25vd24gYWxnb3JpdGhtLgorICovCitpbnQgaGFzaF9hbGdvX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisvKiBJZGVudGljYWwsIGV4Y2VwdCBiYXNlZCBvbiB0aGUgZm9ybWF0IElELiAqLworaW50IGhhc2hfYWxnb19ieV9pZCh1aW50MzJfdCBmb3JtYXRfaWQpOworLyogSWRlbnRpY2FsLCBleGNlcHQgYmFzZWQgb24gdGhlIGxlbmd0aC4gKi8KK2ludCBoYXNoX2FsZ29fYnlfbGVuZ3RoKGludCBsZW4pOworLyogSWRlbnRpY2FsLCBleGNlcHQgZm9yIGEgcG9pbnRlciB0byBzdHJ1Y3QgZ2l0X2hhc2hfYWxnby4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGhhc2hfYWxnb19ieV9wdHIoY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKnApCit7CisJcmV0dXJuIHAgLSBoYXNoX2FsZ29zOworfQorCisvKiBUaGUgbGVuZ3RoIGluIGJ5dGVzIGFuZCBpbiBoZXggZGlnaXRzIG9mIGFuIG9iamVjdCBuYW1lIChTSEEtMSB2YWx1ZSkuICovCisjZGVmaW5lIEdJVF9TSEExX1JBV1NaIDIwCisjZGVmaW5lIEdJVF9TSEExX0hFWFNaICgyICogR0lUX1NIQTFfUkFXU1opCisvKiBUaGUgYmxvY2sgc2l6ZSBvZiBTSEEtMS4gKi8KKyNkZWZpbmUgR0lUX1NIQTFfQkxLU1ogNjQKKworLyogVGhlIGxlbmd0aCBpbiBieXRlcyBhbmQgaW4gaGV4IGRpZ2l0cyBvZiBhbiBvYmplY3QgbmFtZSAoU0hBLTI1NiB2YWx1ZSkuICovCisjZGVmaW5lIEdJVF9TSEEyNTZfUkFXU1ogMzIKKyNkZWZpbmUgR0lUX1NIQTI1Nl9IRVhTWiAoMiAqIEdJVF9TSEEyNTZfUkFXU1opCisvKiBUaGUgYmxvY2sgc2l6ZSBvZiBTSEEtMjU2LiAqLworI2RlZmluZSBHSVRfU0hBMjU2X0JMS1NaIDY0CisKKy8qIFRoZSBsZW5ndGggaW4gYnl0ZSBhbmQgaW4gaGV4IGRpZ2l0cyBvZiB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBoYXNoIHZhbHVlLiAqLworI2RlZmluZSBHSVRfTUFYX1JBV1NaIEdJVF9TSEEyNTZfUkFXU1oKKyNkZWZpbmUgR0lUX01BWF9IRVhTWiBHSVRfU0hBMjU2X0hFWFNaCisvKiBUaGUgbGFyZ2VzdCBwb3NzaWJsZSBibG9jayBzaXplIGZvciBhbnkgc3VwcG9ydGVkIGhhc2guICovCisjZGVmaW5lIEdJVF9NQVhfQkxLU1ogR0lUX1NIQTI1Nl9CTEtTWgorCitzdHJ1Y3Qgb2JqZWN0X2lkIHsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9SQVdTWl07Cit9OworCisjZGVmaW5lIHRoZV9oYXNoX2FsZ28gdGhlX3JlcG9zaXRvcnktPmhhc2hfYWxnbworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2hhc2htYXAuYyBiL2hhc2htYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTgxM2UxCi0tLSAvZGV2L251bGwKKysrIGIvaGFzaG1hcC5jCkBAIC0wLDAgKzEsMzIzIEBACisvKgorICogR2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBoYXNoLWJhc2VkIGtleSB2YWx1ZSBtYXBwaW5ncy4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorCisjZGVmaW5lIEZOVjMyX0JBU0UgKCh1bnNpZ25lZCBpbnQpIDB4ODExYzlkYzUpCisjZGVmaW5lIEZOVjMyX1BSSU1FICgodW5zaWduZWQgaW50KSAweDAxMDAwMTkzKQorCit1bnNpZ25lZCBpbnQgc3RyaGFzaChjb25zdCBjaGFyICpzdHIpCit7CisJdW5zaWduZWQgaW50IGMsIGhhc2ggPSBGTlYzMl9CQVNFOworCXdoaWxlICgoYyA9ICh1bnNpZ25lZCBjaGFyKSAqc3RyKyspKQorCQloYXNoID0gKGhhc2ggKiBGTlYzMl9QUklNRSkgXiBjOworCXJldHVybiBoYXNoOworfQorCit1bnNpZ25lZCBpbnQgc3RyaWhhc2goY29uc3QgY2hhciAqc3RyKQoreworCXVuc2lnbmVkIGludCBjLCBoYXNoID0gRk5WMzJfQkFTRTsKKwl3aGlsZSAoKGMgPSAodW5zaWduZWQgY2hhcikgKnN0cisrKSkgeworCQlpZiAoYyA+PSAnYScgJiYgYyA8PSAneicpCisJCQljIC09ICdhJyAtICdBJzsKKwkJaGFzaCA9IChoYXNoICogRk5WMzJfUFJJTUUpIF4gYzsKKwl9CisJcmV0dXJuIGhhc2g7Cit9CisKK3Vuc2lnbmVkIGludCBtZW1oYXNoKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IEZOVjMyX0JBU0U7CisJdW5zaWduZWQgY2hhciAqdWNidWYgPSAodW5zaWduZWQgY2hhciAqKSBidWY7CisJd2hpbGUgKGxlbi0tKSB7CisJCXVuc2lnbmVkIGludCBjID0gKnVjYnVmKys7CisJCWhhc2ggPSAoaGFzaCAqIEZOVjMyX1BSSU1FKSBeIGM7CisJfQorCXJldHVybiBoYXNoOworfQorCit1bnNpZ25lZCBpbnQgbWVtaWhhc2goY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXVuc2lnbmVkIGludCBoYXNoID0gRk5WMzJfQkFTRTsKKwl1bnNpZ25lZCBjaGFyICp1Y2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopIGJ1ZjsKKwl3aGlsZSAobGVuLS0pIHsKKwkJdW5zaWduZWQgaW50IGMgPSAqdWNidWYrKzsKKwkJaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKQorCQkJYyAtPSAnYScgLSAnQSc7CisJCWhhc2ggPSAoaGFzaCAqIEZOVjMyX1BSSU1FKSBeIGM7CisJfQorCXJldHVybiBoYXNoOworfQorCisvKgorICogSW5jb3Jwb3JhdGUgYW5vdGhlciBjaHVuayBvZiBkYXRhIGludG8gYSBtZW1paGFzaAorICogY29tcHV0YXRpb24uCisgKi8KK3Vuc2lnbmVkIGludCBtZW1paGFzaF9jb250KHVuc2lnbmVkIGludCBoYXNoX3NlZWQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfc2VlZDsKKwl1bnNpZ25lZCBjaGFyICp1Y2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopIGJ1ZjsKKwl3aGlsZSAobGVuLS0pIHsKKwkJdW5zaWduZWQgaW50IGMgPSAqdWNidWYrKzsKKwkJaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKQorCQkJYyAtPSAnYScgLSAnQSc7CisJCWhhc2ggPSAoaGFzaCAqIEZOVjMyX1BSSU1FKSBeIGM7CisJfQorCXJldHVybiBoYXNoOworfQorCisjZGVmaW5lIEhBU0hNQVBfSU5JVElBTF9TSVpFIDY0CisvKiBncm93IC8gc2hyaW5rIGJ5IDJeMiAqLworI2RlZmluZSBIQVNITUFQX1JFU0laRV9CSVRTIDIKKy8qIGxvYWQgZmFjdG9yIGluIHBlcmNlbnQgKi8KKyNkZWZpbmUgSEFTSE1BUF9MT0FEX0ZBQ1RPUiA4MAorCitzdGF0aWMgdm9pZCBhbGxvY190YWJsZShzdHJ1Y3QgaGFzaG1hcCAqbWFwLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwltYXAtPnRhYmxlc2l6ZSA9IHNpemU7CisJbWFwLT50YWJsZSA9IHhjYWxsb2Moc2l6ZSwgc2l6ZW9mKHN0cnVjdCBoYXNobWFwX2VudHJ5ICopKTsKKworCS8qIGNhbGN1bGF0ZSByZXNpemUgdGhyZXNob2xkcyBmb3IgbmV3IHNpemUgKi8KKwltYXAtPmdyb3dfYXQgPSAodW5zaWduZWQgaW50KSAoKHVpbnQ2NF90KSBzaXplICogSEFTSE1BUF9MT0FEX0ZBQ1RPUiAvIDEwMCk7CisJaWYgKHNpemUgPD0gSEFTSE1BUF9JTklUSUFMX1NJWkUpCisJCW1hcC0+c2hyaW5rX2F0ID0gMDsKKwllbHNlCisJCS8qCisJCSAqIFRoZSBzaHJpbmstdGhyZXNob2xkIG11c3QgYmUgc2xpZ2h0bHkgc21hbGxlciB0aGFuCisJCSAqIChncm93LXRocmVzaG9sZCAvIHJlc2l6ZS1mYWN0b3IpIHRvIHByZXZlbnQgZXJyYXRpYyByZXNpemluZywKKwkJICogdGh1cyB3ZSBkaXZpZGUgYnkgKHJlc2l6ZS1mYWN0b3IgKyAxKS4KKwkJICovCisJCW1hcC0+c2hyaW5rX2F0ID0gbWFwLT5ncm93X2F0IC8gKCgxIDw8IEhBU0hNQVBfUkVTSVpFX0JJVFMpICsgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGVudHJ5X2VxdWFscyhjb25zdCBzdHJ1Y3QgaGFzaG1hcCAqbWFwLAorCQljb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZTEsIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplMiwKKwkJY29uc3Qgdm9pZCAqa2V5ZGF0YSkKK3sKKwlyZXR1cm4gKGUxID09IGUyKSB8fAorCSAgICAgICAoZTEtPmhhc2ggPT0gZTItPmhhc2ggJiYKKwkJIW1hcC0+Y21wZm4obWFwLT5jbXBmbl9kYXRhLCBlMSwgZTIsIGtleWRhdGEpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnVja2V0KGNvbnN0IHN0cnVjdCBoYXNobWFwICptYXAsCisJCWNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICprZXkpCit7CisJcmV0dXJuIGtleS0+aGFzaCAmIChtYXAtPnRhYmxlc2l6ZSAtIDEpOworfQorCitpbnQgaGFzaG1hcF9idWNrZXQoY29uc3Qgc3RydWN0IGhhc2htYXAgKm1hcCwgdW5zaWduZWQgaW50IGhhc2gpCit7CisJcmV0dXJuIGhhc2ggJiAobWFwLT50YWJsZXNpemUgLSAxKTsKK30KKworc3RhdGljIHZvaWQgcmVoYXNoKHN0cnVjdCBoYXNobWFwICptYXAsIHVuc2lnbmVkIGludCBuZXdzaXplKQoreworCXVuc2lnbmVkIGludCBpLCBvbGRzaXplID0gbWFwLT50YWJsZXNpemU7CisJc3RydWN0IGhhc2htYXBfZW50cnkgKipvbGR0YWJsZSA9IG1hcC0+dGFibGU7CisKKwlhbGxvY190YWJsZShtYXAsIG5ld3NpemUpOworCWZvciAoaSA9IDA7IGkgPCBvbGRzaXplOyBpKyspIHsKKwkJc3RydWN0IGhhc2htYXBfZW50cnkgKmUgPSBvbGR0YWJsZVtpXTsKKwkJd2hpbGUgKGUpIHsKKwkJCXN0cnVjdCBoYXNobWFwX2VudHJ5ICpuZXh0ID0gZS0+bmV4dDsKKwkJCXVuc2lnbmVkIGludCBiID0gYnVja2V0KG1hcCwgZSk7CisJCQllLT5uZXh0ID0gbWFwLT50YWJsZVtiXTsKKwkJCW1hcC0+dGFibGVbYl0gPSBlOworCQkJZSA9IG5leHQ7CisJCX0KKwl9CisJZnJlZShvbGR0YWJsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhhc2htYXBfZW50cnkgKipmaW5kX2VudHJ5X3B0cihjb25zdCBzdHJ1Y3QgaGFzaG1hcCAqbWFwLAorCQljb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqa2V5LCBjb25zdCB2b2lkICprZXlkYXRhKQoreworCXN0cnVjdCBoYXNobWFwX2VudHJ5ICoqZSA9ICZtYXAtPnRhYmxlW2J1Y2tldChtYXAsIGtleSldOworCXdoaWxlICgqZSAmJiAhZW50cnlfZXF1YWxzKG1hcCwgKmUsIGtleSwga2V5ZGF0YSkpCisJCWUgPSAmKCplKS0+bmV4dDsKKwlyZXR1cm4gZTsKK30KKworc3RhdGljIGludCBhbHdheXNfZXF1YWwoY29uc3Qgdm9pZCAqdW51c2VkX2NtcF9kYXRhLAorCQkJY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKnVudXNlZDEsCisJCQljb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqdW51c2VkMiwKKwkJCWNvbnN0IHZvaWQgKnVudXNlZF9rZXlkYXRhKQoreworCXJldHVybiAwOworfQorCit2b2lkIGhhc2htYXBfaW5pdChzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBoYXNobWFwX2NtcF9mbiBlcXVhbHNfZnVuY3Rpb24sCisJCWNvbnN0IHZvaWQgKmNtcGZuX2RhdGEsIHNpemVfdCBpbml0aWFsX3NpemUpCit7CisJdW5zaWduZWQgaW50IHNpemUgPSBIQVNITUFQX0lOSVRJQUxfU0laRTsKKworCW1lbXNldChtYXAsIDAsIHNpemVvZigqbWFwKSk7CisKKwltYXAtPmNtcGZuID0gZXF1YWxzX2Z1bmN0aW9uID8gZXF1YWxzX2Z1bmN0aW9uIDogYWx3YXlzX2VxdWFsOworCW1hcC0+Y21wZm5fZGF0YSA9IGNtcGZuX2RhdGE7CisKKwkvKiBjYWxjdWxhdGUgaW5pdGlhbCB0YWJsZSBzaXplIGFuZCBhbGxvY2F0ZSB0aGUgdGFibGUgKi8KKwlpbml0aWFsX3NpemUgPSAodW5zaWduZWQgaW50KSAoKHVpbnQ2NF90KSBpbml0aWFsX3NpemUgKiAxMDAKKwkJCS8gSEFTSE1BUF9MT0FEX0ZBQ1RPUik7CisJd2hpbGUgKGluaXRpYWxfc2l6ZSA+IHNpemUpCisJCXNpemUgPDw9IEhBU0hNQVBfUkVTSVpFX0JJVFM7CisJYWxsb2NfdGFibGUobWFwLCBzaXplKTsKKworCS8qCisJICogS2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBtYXAgYW5kCisJICogYWxsb3cgdGhlIG1hcCB0byBhdXRvbWF0aWNhbGx5IGdyb3cgYXMgbmVjZXNzYXJ5LgorCSAqLworCW1hcC0+ZG9fY291bnRfaXRlbXMgPSAxOworfQorCit2b2lkIGhhc2htYXBfZnJlZV8oc3RydWN0IGhhc2htYXAgKm1hcCwgc3NpemVfdCBlbnRyeV9vZmZzZXQpCit7CisJaWYgKCFtYXAgfHwgIW1hcC0+dGFibGUpCisJCXJldHVybjsKKwlpZiAoZW50cnlfb2Zmc2V0ID49IDApIHsgLyogY2FsbGVkIGJ5IGhhc2htYXBfZnJlZV9lbnRyaWVzICovCisJCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwkJc3RydWN0IGhhc2htYXBfZW50cnkgKmU7CisKKwkJaGFzaG1hcF9pdGVyX2luaXQobWFwLCAmaXRlcik7CisJCXdoaWxlICgoZSA9IGhhc2htYXBfaXRlcl9uZXh0KCZpdGVyKSkpCisJCQkvKgorCQkJICogbGlrZSBjb250YWluZXJfb2YsIGJ1dCB1c2luZyBjYWxsZXItY2FsY3VsYXRlZAorCQkJICogb2Zmc2V0IChjYWxsZXIgYmVpbmcgaGFzaG1hcF9mcmVlX2VudHJpZXMpCisJCQkgKi8KKwkJCWZyZWUoKGNoYXIgKillIC0gZW50cnlfb2Zmc2V0KTsKKwl9CisJZnJlZShtYXAtPnRhYmxlKTsKKwltZW1zZXQobWFwLCAwLCBzaXplb2YoKm1hcCkpOworfQorCitzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqaGFzaG1hcF9nZXQoY29uc3Qgc3RydWN0IGhhc2htYXAgKm1hcCwKKwkJCQljb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqa2V5LAorCQkJCWNvbnN0IHZvaWQgKmtleWRhdGEpCit7CisJcmV0dXJuICpmaW5kX2VudHJ5X3B0cihtYXAsIGtleSwga2V5ZGF0YSk7Cit9CisKK3N0cnVjdCBoYXNobWFwX2VudHJ5ICpoYXNobWFwX2dldF9uZXh0KGNvbnN0IHN0cnVjdCBoYXNobWFwICptYXAsCisJCQljb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IGhhc2htYXBfZW50cnkgKmUgPSBlbnRyeS0+bmV4dDsKKwlmb3IgKDsgZTsgZSA9IGUtPm5leHQpCisJCWlmIChlbnRyeV9lcXVhbHMobWFwLCBlbnRyeSwgZSwgTlVMTCkpCisJCQlyZXR1cm4gZTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBoYXNobWFwX2FkZChzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnkpCit7CisJdW5zaWduZWQgaW50IGIgPSBidWNrZXQobWFwLCBlbnRyeSk7CisKKwkvKiBhZGQgZW50cnkgKi8KKwllbnRyeS0+bmV4dCA9IG1hcC0+dGFibGVbYl07CisJbWFwLT50YWJsZVtiXSA9IGVudHJ5OworCisJLyogZml4IHNpemUgYW5kIHJlaGFzaCBpZiBhcHByb3ByaWF0ZSAqLworCWlmIChtYXAtPmRvX2NvdW50X2l0ZW1zKSB7CisJCW1hcC0+cHJpdmF0ZV9zaXplKys7CisJCWlmIChtYXAtPnByaXZhdGVfc2l6ZSA+IG1hcC0+Z3Jvd19hdCkKKwkJCXJlaGFzaChtYXAsIG1hcC0+dGFibGVzaXplIDw8IEhBU0hNQVBfUkVTSVpFX0JJVFMpOworCX0KK30KKworc3RydWN0IGhhc2htYXBfZW50cnkgKmhhc2htYXBfcmVtb3ZlKHN0cnVjdCBoYXNobWFwICptYXAsCisJCQkJCWNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICprZXksCisJCQkJCWNvbnN0IHZvaWQgKmtleWRhdGEpCit7CisJc3RydWN0IGhhc2htYXBfZW50cnkgKm9sZDsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqKmUgPSBmaW5kX2VudHJ5X3B0cihtYXAsIGtleSwga2V5ZGF0YSk7CisJaWYgKCEqZSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiByZW1vdmUgZXhpc3RpbmcgZW50cnkgKi8KKwlvbGQgPSAqZTsKKwkqZSA9IG9sZC0+bmV4dDsKKwlvbGQtPm5leHQgPSBOVUxMOworCisJLyogZml4IHNpemUgYW5kIHJlaGFzaCBpZiBhcHByb3ByaWF0ZSAqLworCWlmIChtYXAtPmRvX2NvdW50X2l0ZW1zKSB7CisJCW1hcC0+cHJpdmF0ZV9zaXplLS07CisJCWlmIChtYXAtPnByaXZhdGVfc2l6ZSA8IG1hcC0+c2hyaW5rX2F0KQorCQkJcmVoYXNoKG1hcCwgbWFwLT50YWJsZXNpemUgPj4gSEFTSE1BUF9SRVNJWkVfQklUUyk7CisJfQorCisJcmV0dXJuIG9sZDsKK30KKworc3RydWN0IGhhc2htYXBfZW50cnkgKmhhc2htYXBfcHV0KHN0cnVjdCBoYXNobWFwICptYXAsCisJCQkJc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBoYXNobWFwX2VudHJ5ICpvbGQgPSBoYXNobWFwX3JlbW92ZShtYXAsIGVudHJ5LCBOVUxMKTsKKwloYXNobWFwX2FkZChtYXAsIGVudHJ5KTsKKwlyZXR1cm4gb2xkOworfQorCit2b2lkIGhhc2htYXBfaXRlcl9pbml0KHN0cnVjdCBoYXNobWFwICptYXAsIHN0cnVjdCBoYXNobWFwX2l0ZXIgKml0ZXIpCit7CisJaXRlci0+bWFwID0gbWFwOworCWl0ZXItPnRhYmxlcG9zID0gMDsKKwlpdGVyLT5uZXh0ID0gTlVMTDsKK30KKworc3RydWN0IGhhc2htYXBfZW50cnkgKmhhc2htYXBfaXRlcl9uZXh0KHN0cnVjdCBoYXNobWFwX2l0ZXIgKml0ZXIpCit7CisJc3RydWN0IGhhc2htYXBfZW50cnkgKmN1cnJlbnQgPSBpdGVyLT5uZXh0OworCWZvciAoOzspIHsKKwkJaWYgKGN1cnJlbnQpIHsKKwkJCWl0ZXItPm5leHQgPSBjdXJyZW50LT5uZXh0OworCQkJcmV0dXJuIGN1cnJlbnQ7CisJCX0KKworCQlpZiAoaXRlci0+dGFibGVwb3MgPj0gaXRlci0+bWFwLT50YWJsZXNpemUpCisJCQlyZXR1cm4gTlVMTDsKKworCQljdXJyZW50ID0gaXRlci0+bWFwLT50YWJsZVtpdGVyLT50YWJsZXBvcysrXTsKKwl9Cit9CisKK3N0cnVjdCBwb29sX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJc2l6ZV90IGxlbjsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgaW50IHBvb2xfZW50cnlfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCSAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVwdHIsCisJCQkgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCQkgIGNvbnN0IHZvaWQgKmtleWRhdGEpCit7CisJY29uc3Qgc3RydWN0IHBvb2xfZW50cnkgKmUxLCAqZTI7CisKKwllMSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3QgcG9vbF9lbnRyeSwgZW50KTsKKwllMiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIGNvbnN0IHN0cnVjdCBwb29sX2VudHJ5LCBlbnQpOworCisJcmV0dXJuIGUxLT5kYXRhICE9IGtleWRhdGEgJiYKKwkgICAgICAgKGUxLT5sZW4gIT0gZTItPmxlbiB8fCBtZW1jbXAoZTEtPmRhdGEsIGtleWRhdGEsIGUxLT5sZW4pKTsKK30KKworY29uc3Qgdm9pZCAqbWVtaW50ZXJuKGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc3RhdGljIHN0cnVjdCBoYXNobWFwIG1hcDsKKwlzdHJ1Y3QgcG9vbF9lbnRyeSBrZXksICplOworCisJLyogaW5pdGlhbGl6ZSBzdHJpbmcgcG9vbCBoYXNobWFwICovCisJaWYgKCFtYXAudGFibGVzaXplKQorCQloYXNobWFwX2luaXQoJm1hcCwgcG9vbF9lbnRyeV9jbXAsIE5VTEwsIDApOworCisJLyogbG9va3VwIGludGVybmVkIHN0cmluZyBpbiBwb29sICovCisJaGFzaG1hcF9lbnRyeV9pbml0KCZrZXkuZW50LCBtZW1oYXNoKGRhdGEsIGxlbikpOworCWtleS5sZW4gPSBsZW47CisJZSA9IGhhc2htYXBfZ2V0X2VudHJ5KCZtYXAsICZrZXksIGVudCwgZGF0YSk7CisJaWYgKCFlKSB7CisJCS8qIG5vdCBmb3VuZDogY3JlYXRlIGl0ICovCisJCUZMRVhfQUxMT0NfTUVNKGUsIGRhdGEsIGRhdGEsIGxlbik7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmZS0+ZW50LCBrZXkuZW50Lmhhc2gpOworCQllLT5sZW4gPSBsZW47CisJCWhhc2htYXBfYWRkKCZtYXAsICZlLT5lbnQpOworCX0KKwlyZXR1cm4gZS0+ZGF0YTsKK30KZGlmZiAtLWdpdCBhL2hhc2htYXAuaCBiL2hhc2htYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWFlOWY4Ci0tLSAvZGV2L251bGwKKysrIGIvaGFzaG1hcC5oCkBAIC0wLDAgKzEsNTQ2IEBACisjaWZuZGVmIEhBU0hNQVBfSAorI2RlZmluZSBIQVNITUFQX0gKKworI2luY2x1ZGUgImhhc2guaCIKKworLyoKKyAqIEdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgaGFzaC1iYXNlZCBrZXktdmFsdWUgbWFwcGluZ3MuCisgKgorICogQW4gZXhhbXBsZSB0aGF0IG1hcHMgbG9uZyB0byBhIHN0cmluZzoKKyAqIEZvciB0aGUgc2FrZSBvZiB0aGUgZXhhbXBsZSB0aGlzIGFsbG93cyB0byBsb29rdXAgZXhhY3QgdmFsdWVzLCB0b28KKyAqIChpLmUuIGl0IGlzIG9wZXJhdGVkIGFzIGEgc2V0LCB0aGUgdmFsdWUgaXMgcGFydCBvZiB0aGUga2V5KQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHN0cnVjdCBoYXNobWFwIG1hcDsKKyAqIHN0cnVjdCBsb25nMnN0cmluZyB7CisgKiAgICAgc3RydWN0IGhhc2htYXBfZW50cnkgZW50OworICogICAgIGxvbmcga2V5OworICogICAgIGNoYXIgdmFsdWVbRkxFWF9BUlJBWV07ICAgLy8gYmUgY2FyZWZ1bCB3aXRoIGFsbG9jYXRpbmcgb24gc3RhY2shCisgKiB9OworICoKKyAqICNkZWZpbmUgQ09NUEFSRV9WQUxVRSAxCisgKgorICogc3RhdGljIGludCBsb25nMnN0cmluZ19jbXAoY29uc3Qgdm9pZCAqaGFzaG1hcF9jbXBfZm5fZGF0YSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleWRhdGEpCisgKiB7CisgKiAgICAgY29uc3QgY2hhciAqc3RyaW5nID0ga2V5ZGF0YTsKKyAqICAgICB1bnNpZ25lZCBmbGFncyA9ICoodW5zaWduZWQgKiloYXNobWFwX2NtcF9mbl9kYXRhOworICogICAgIGNvbnN0IHN0cnVjdCBsb25nMnN0cmluZyAqZTEsICplMjsKKyAqCisgKiAgICAgZTEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IGxvbmcyc3RyaW5nLCBlbnQpOworICogICAgIGUyID0gY29udGFpbmVyX29mKGVudHJ5X29yX2tleSwgY29uc3Qgc3RydWN0IGxvbmcyc3RyaW5nLCBlbnQpOworICoKKyAqICAgICBpZiAoZmxhZ3MgJiBDT01QQVJFX1ZBTFVFKQorICogICAgICAgICByZXR1cm4gZTEtPmtleSAhPSBlMi0+a2V5IHx8CisgKiAgICAgICAgICAgICAgICAgIHN0cmNtcChlMS0+dmFsdWUsIHN0cmluZyA/IHN0cmluZyA6IGUyLT52YWx1ZSk7CisgKiAgICAgZWxzZQorICogICAgICAgICByZXR1cm4gZTEtPmtleSAhPSBlMi0+a2V5OworICogfQorICoKKyAqIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAqIHsKKyAqICAgICBsb25nIGtleTsKKyAqICAgICBjaGFyIHZhbHVlWzI1NV0sIGFjdGlvblszMl07CisgKiAgICAgdW5zaWduZWQgZmxhZ3MgPSAwOworICoKKyAqICAgICBoYXNobWFwX2luaXQoJm1hcCwgbG9uZzJzdHJpbmdfY21wLCAmZmxhZ3MsIDApOworICoKKyAqICAgICB3aGlsZSAoc2NhbmYoIiVzICVsZCAlcyIsIGFjdGlvbiwgJmtleSwgdmFsdWUpKSB7CisgKgorICogICAgICAgICBpZiAoIXN0cmNtcCgiYWRkIiwgYWN0aW9uKSkgeworICogICAgICAgICAgICAgc3RydWN0IGxvbmcyc3RyaW5nICplOworICogICAgICAgICAgICAgRkxFWF9BTExPQ19TVFIoZSwgdmFsdWUsIHZhbHVlKTsKKyAqICAgICAgICAgICAgIGhhc2htYXBfZW50cnlfaW5pdCgmZS0+ZW50LCBtZW1oYXNoKCZrZXksIHNpemVvZihsb25nKSkpOworICogICAgICAgICAgICAgZS0+a2V5ID0ga2V5OworICogICAgICAgICAgICAgaGFzaG1hcF9hZGQoJm1hcCwgJmUtPmVudCk7CisgKiAgICAgICAgIH0KKyAqCisgKiAgICAgICAgIGlmICghc3RyY21wKCJwcmludF9hbGxfYnlfa2V5IiwgYWN0aW9uKSkgeworICogICAgICAgICAgICAgc3RydWN0IGxvbmcyc3RyaW5nIGssICplOworICogICAgICAgICAgICAgaGFzaG1hcF9lbnRyeV9pbml0KCZrLmVudCwgbWVtaGFzaCgma2V5LCBzaXplb2YobG9uZykpKTsKKyAqICAgICAgICAgICAgIGsua2V5ID0ga2V5OworICoKKyAqICAgICAgICAgICAgIGZsYWdzICY9IH5DT01QQVJFX1ZBTFVFOworICogICAgICAgICAgICAgZSA9IGhhc2htYXBfZ2V0X2VudHJ5KCZtYXAsICZrLCBlbnQsIE5VTEwpOworICogICAgICAgICAgICAgaWYgKGUpIHsKKyAqICAgICAgICAgICAgICAgICBwcmludGYoImZpcnN0OiAlbGQgJXNcbiIsIGUtPmtleSwgZS0+dmFsdWUpOworICogICAgICAgICAgICAgICAgIHdoaWxlICgoZSA9IGhhc2htYXBfZ2V0X25leHRfZW50cnkoJm1hcCwgZSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsb25nMnN0cmluZywgZW50KSkpIHsKKyAqICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJmb3VuZCBtb3JlOiAlbGQgJXNcbiIsIGUtPmtleSwgZS0+dmFsdWUpOworICogICAgICAgICAgICAgICAgIH0KKyAqICAgICAgICAgICAgIH0KKyAqICAgICAgICAgfQorICoKKyAqICAgICAgICAgaWYgKCFzdHJjbXAoImhhc19leGFjdF9tYXRjaCIsIGFjdGlvbikpIHsKKyAqICAgICAgICAgICAgIHN0cnVjdCBsb25nMnN0cmluZyAqZTsKKyAqICAgICAgICAgICAgIEZMRVhfQUxMT0NfU1RSKGUsIHZhbHVlLCB2YWx1ZSk7CisgKiAgICAgICAgICAgICBoYXNobWFwX2VudHJ5X2luaXQoJmUtPmVudCwgbWVtaGFzaCgma2V5LCBzaXplb2YobG9uZykpKTsKKyAqICAgICAgICAgICAgIGUtPmtleSA9IGtleTsKKyAqCisgKiAgICAgICAgICAgICBmbGFncyB8PSBDT01QQVJFX1ZBTFVFOworICogICAgICAgICAgICAgcHJpbnRmKCIlc2ZvdW5kXG4iLAorICogICAgICAgICAgICAgICAgICAgIGhhc2htYXBfZ2V0KCZtYXAsICZlLT5lbnQsIE5VTEwpID8gIiIgOiAibm90ICIpOworICogICAgICAgICAgICAgZnJlZShlKTsKKyAqICAgICAgICAgfQorICoKKyAqICAgICAgICAgaWYgKCFzdHJjbXAoImhhc19leGFjdF9tYXRjaF9ub19oZWFwX2FsbG9jIiwgYWN0aW9uKSkgeworICogICAgICAgICAgICAgc3RydWN0IGxvbmcyc3RyaW5nIGs7CisgKiAgICAgICAgICAgICBoYXNobWFwX2VudHJ5X2luaXQoJmsuZW50LCBtZW1oYXNoKCZrZXksIHNpemVvZihsb25nKSkpOworICogICAgICAgICAgICAgay5rZXkgPSBrZXk7CisgKgorICogICAgICAgICAgICAgZmxhZ3MgfD0gQ09NUEFSRV9WQUxVRTsKKyAqICAgICAgICAgICAgIHByaW50ZigiJXNmb3VuZFxuIiwKKyAqICAgICAgICAgICAgICAgICAgICBoYXNobWFwX2dldCgmbWFwLCAmay5lbnQsIHZhbHVlKSA/ICIiIDogIm5vdCAiKTsKKyAqICAgICAgICAgfQorICoKKyAqICAgICAgICAgaWYgKCFzdHJjbXAoImVuZCIsIGFjdGlvbikpIHsKKyAqICAgICAgICAgICAgIGhhc2htYXBfZnJlZV9lbnRyaWVzKCZtYXAsIHN0cnVjdCBsb25nMnN0cmluZywgZW50KTsKKyAqICAgICAgICAgICAgIGJyZWFrOworICogICAgICAgICB9CisgKiAgICAgfQorICoKKyAqICAgICByZXR1cm4gMDsKKyAqIH0KKyAqLworCisvKgorICogUmVhZHktdG8tdXNlIGhhc2ggZnVuY3Rpb25zIGZvciBzdHJpbmdzLCB1c2luZyB0aGUgRk5WLTEgYWxnb3JpdGhtIChzZWUKKyAqIGh0dHA6Ly93d3cuaXN0aGUuY29tL2Nob25nby90ZWNoL2NvbXAvZm52KS4KKyAqIGBzdHJoYXNoYCBhbmQgYHN0cmloYXNoYCB0YWtlIDAtdGVybWluYXRlZCBzdHJpbmdzLCB3aGlsZSBgbWVtaGFzaGAgYW5kCisgKiBgbWVtaWhhc2hgIG9wZXJhdGUgb24gYXJiaXRyYXJ5LWxlbmd0aCBtZW1vcnkuCisgKiBgc3RyaWhhc2hgIGFuZCBgbWVtaWhhc2hgIGFyZSBjYXNlIGluc2Vuc2l0aXZlIHZlcnNpb25zLgorICogYG1lbWloYXNoX2NvbnRgIGlzIGEgdmFyaWFudCBvZiBgbWVtaWhhc2hgIHRoYXQgYWxsb3dzIGEgY29tcHV0YXRpb24gdG8gYmUKKyAqIGNvbnRpbnVlZCB3aXRoIGFub3RoZXIgY2h1bmsgb2YgZGF0YS4KKyAqLwordW5zaWduZWQgaW50IHN0cmhhc2goY29uc3QgY2hhciAqYnVmKTsKK3Vuc2lnbmVkIGludCBzdHJpaGFzaChjb25zdCBjaGFyICpidWYpOwordW5zaWduZWQgaW50IG1lbWhhc2goY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKK3Vuc2lnbmVkIGludCBtZW1paGFzaChjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pOwordW5zaWduZWQgaW50IG1lbWloYXNoX2NvbnQodW5zaWduZWQgaW50IGhhc2hfc2VlZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKKworLyoKKyAqIENvbnZlcnRzIGEgY3J5cHRvZ3JhcGhpYyBoYXNoIChlLmcuIFNIQS0xKSBpbnRvIGFuIGludC1zaXplZCBoYXNoIGNvZGUKKyAqIGZvciB1c2UgaW4gaGFzaCB0YWJsZXMuIENyeXB0b2dyYXBoaWMgaGFzaGVzIGFyZSBzdXBwb3NlZCB0byBoYXZlCisgKiB1bmlmb3JtIGRpc3RyaWJ1dGlvbiwgc28gaW4gY29udHJhc3QgdG8gYG1lbWhhc2goKWAsIHRoaXMganVzdCBjb3BpZXMKKyAqIHRoZSBmaXJzdCBgc2l6ZW9mKGludClgIGJ5dGVzIHdpdGhvdXQgc2h1ZmZsaW5nIGFueSBiaXRzLiBOb3RlIHRoYXQKKyAqIHRoZSByZXN1bHRzIHdpbGwgYmUgZGlmZmVyZW50IG9uIGJpZy1lbmRpYW4gYW5kIGxpdHRsZS1lbmRpYW4KKyAqIHBsYXRmb3Jtcywgc28gdGhleSBzaG91bGQgbm90IGJlIHN0b3JlZCBvciB0cmFuc2ZlcnJlZCBvdmVyIHRoZSBuZXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9pZGhhc2goY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCS8qCisJICogRXF1aXZhbGVudCB0byAncmV0dXJuICoodW5zaWduZWQgaW50ICopb2lkLT5oYXNoOycsIGJ1dCBzYWZlIG9uCisJICogcGxhdGZvcm1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgcmVhZHMuCisJICovCisJdW5zaWduZWQgaW50IGhhc2g7CisJbWVtY3B5KCZoYXNoLCBvaWQtPmhhc2gsIHNpemVvZihoYXNoKSk7CisJcmV0dXJuIGhhc2g7Cit9CisKKy8qCisgKiBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBpcyBhbiBvcGFxdWUgc3RydWN0dXJlIHJlcHJlc2VudGluZyBhbiBlbnRyeSBpbiB0aGUKKyAqIGhhc2ggdGFibGUuCisgKiBJZGVhbGx5IGl0IHNob3VsZCBiZSBmb2xsb3dlZCBieSBhbiBpbnQtc2l6ZWQgbWVtYmVyIHRvIHByZXZlbnQgdW51c2VkCisgKiBtZW1vcnkgb24gNjQtYml0IHN5c3RlbXMgZHVlIHRvIGFsaWdubWVudC4KKyAqLworc3RydWN0IGhhc2htYXBfZW50cnkgeworCS8qCisJICogbmV4dCBwb2ludHMgdG8gdGhlIG5leHQgZW50cnkgaW4gY2FzZSBvZiBjb2xsaXNpb25zIChpLmUuIGlmCisJICogbXVsdGlwbGUgZW50cmllcyBtYXAgdG8gdGhlIHNhbWUgYnVja2V0KQorCSAqLworCXN0cnVjdCBoYXNobWFwX2VudHJ5ICpuZXh0OworCisJLyogZW50cnkncyBoYXNoIGNvZGUgKi8KKwl1bnNpZ25lZCBpbnQgaGFzaDsKK307CisKKy8qCisgKiBVc2VyLXN1cHBsaWVkIGZ1bmN0aW9uIHRvIHRlc3QgdHdvIGhhc2htYXAgZW50cmllcyBmb3IgZXF1YWxpdHkuIFNoYWxsCisgKiByZXR1cm4gMCBpZiB0aGUgZW50cmllcyBhcmUgZXF1YWwuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgY2FsbGVkIHdpdGggbm9uLU5VTEwgYGVudHJ5YCBhbmQgYGVudHJ5X29yX2tleWAKKyAqIHBhcmFtZXRlcnMgdGhhdCBoYXZlIHRoZSBzYW1lIGhhc2ggY29kZS4KKyAqCisgKiBXaGVuIGxvb2tpbmcgdXAgYW4gZW50cnksIHRoZSBga2V5YCBhbmQgYGtleWRhdGFgIHBhcmFtZXRlcnMgdG8gaGFzaG1hcF9nZXQKKyAqIGFuZCBoYXNobWFwX3JlbW92ZSBhcmUgYWx3YXlzIHBhc3NlZCBhcyBzZWNvbmQgYGVudHJ5X29yX2tleWAgYW5kIHRoaXJkCisgKiBhcmd1bWVudCBga2V5ZGF0YWAsIHJlc3BlY3RpdmVseS4gT3RoZXJ3aXNlLCBga2V5ZGF0YWAgaXMgTlVMTC4KKyAqCisgKiBXaGVuIGl0IGlzIHRvbyBleHBlbnNpdmUgdG8gYWxsb2NhdGUgYSB1c2VyIGVudHJ5IChlaXRoZXIgYmVjYXVzZSBpdCBpcworICogbGFyZ2Ugb3IgdmFyaWFsYmUgc2l6ZWQsIHN1Y2ggdGhhdCBpdCBpcyBub3Qgb24gdGhlIHN0YWNrKSwgdGhlbiB0aGUKKyAqIHJlbGV2YW50IGRhdGEgdG8gY2hlY2sgZm9yIGVxdWFsaXR5IHNob3VsZCBiZSBwYXNzZWQgdmlhIGBrZXlkYXRhYC4KKyAqIEluIHRoaXMgY2FzZSBga2V5YCBjYW4gYmUgYSBzdHJpcHBlZCBkb3duIHZlcnNpb24gb2YgdGhlIHVzZXIga2V5IGRhdGEKKyAqIG9yIGV2ZW4ganVzdCBhIGhhc2htYXBfZW50cnkgaGF2aW5nIHRoZSBjb3JyZWN0IGhhc2guCisgKgorICogVGhlIGBoYXNobWFwX2NtcF9mbl9kYXRhYCBlbnRyeSBpcyB0aGUgcG9pbnRlciBnaXZlbiBpbiB0aGUgaW5pdCBmdW5jdGlvbi4KKyAqLwordHlwZWRlZiBpbnQgKCpoYXNobWFwX2NtcF9mbikoY29uc3Qgdm9pZCAqaGFzaG1hcF9jbXBfZm5fZGF0YSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCQkgICAgICBjb25zdCB2b2lkICprZXlkYXRhKTsKKworLyoKKyAqIHN0cnVjdCBoYXNobWFwIGlzIHRoZSBoYXNoIHRhYmxlIHN0cnVjdHVyZS4gTWVtYmVycyBjYW4gYmUgdXNlZCBhcyBmb2xsb3dzLAorICogYnV0IHNob3VsZCBub3QgYmUgbW9kaWZpZWQgZGlyZWN0bHkuCisgKi8KK3N0cnVjdCBoYXNobWFwIHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqKnRhYmxlOworCisJLyogU3RvcmVzIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIHNwZWNpZmllZCBpbiBgaGFzaG1hcF9pbml0KClgLiAqLworCWhhc2htYXBfY21wX2ZuIGNtcGZuOworCWNvbnN0IHZvaWQgKmNtcGZuX2RhdGE7CisKKwkvKiB0b3RhbCBudW1iZXIgb2YgZW50cmllcyAoMCBtZWFucyB0aGUgaGFzaG1hcCBpcyBlbXB0eSkgKi8KKwl1bnNpZ25lZCBpbnQgcHJpdmF0ZV9zaXplOyAvKiB1c2UgaGFzaG1hcF9nZXRfc2l6ZSgpICovCisKKwkvKgorCSAqIHRhYmxlc2l6ZSBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgdGhlIGhhc2ggdGFibGUuIEEgbm9uLTAgdmFsdWUKKwkgKiBpbmRpY2F0ZXMgdGhhdCB0aGUgaGFzaG1hcCBpcyBpbml0aWFsaXplZC4gSXQgbWF5IGFsc28gYmUgdXNlZnVsCisJICogZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzIChpLmUuIGBzaXplIC8gdGFibGVzaXplYCBpcyB0aGUgY3VycmVudAorCSAqIGxvYWQgZmFjdG9yKS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgdGFibGVzaXplOworCisJdW5zaWduZWQgaW50IGdyb3dfYXQ7CisJdW5zaWduZWQgaW50IHNocmlua19hdDsKKworCXVuc2lnbmVkIGludCBkb19jb3VudF9pdGVtcyA6IDE7Cit9OworCisvKiBoYXNobWFwIGZ1bmN0aW9ucyAqLworCisvKgorICogSW5pdGlhbGl6ZXMgYSBoYXNobWFwIHN0cnVjdHVyZS4KKyAqCisgKiBgbWFwYCBpcyB0aGUgaGFzaG1hcCB0byBpbml0aWFsaXplLgorICoKKyAqIFRoZSBgZXF1YWxzX2Z1bmN0aW9uYCBjYW4gYmUgc3BlY2lmaWVkIHRvIGNvbXBhcmUgdHdvIGVudHJpZXMgZm9yIGVxdWFsaXR5LgorICogSWYgTlVMTCwgZW50cmllcyBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZiB0aGVpciBoYXNoIGNvZGVzIGFyZSBlcXVhbC4KKyAqCisgKiBUaGUgYGVxdWFsc19mdW5jdGlvbl9kYXRhYCBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIGRhdGEKKyAqIChhIGNhbGxiYWNrIGNvb2tpZSkgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBgZXF1YWxzX2Z1bmN0aW9uYCBlYWNoIHRpbWUgaXQKKyAqIGlzIGNhbGxlZC4gVGhpcyBhbGxvd3MgYSBzaW5nbGUgYGVxdWFsc19mdW5jdGlvbmAgdG8gaW1wbGVtZW50IG11bHRpcGxlCisgKiBjb21wYXJpc29uIGZ1bmN0aW9ucy4KKyAqCisgKiBJZiB0aGUgdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaXMga25vd24gaW4gYWR2YW5jZSwgdGhlIGBpbml0aWFsX3NpemVgCisgKiBwYXJhbWV0ZXIgbWF5IGJlIHVzZWQgdG8gcHJlYWxsb2NhdGUgYSBzdWZmaWNpZW50bHkgbGFyZ2UgdGFibGUgYW5kIHRodXMKKyAqIHByZXZlbnQgZXhwZW5zaXZlIHJlc2l6aW5nLiBJZiAwLCB0aGUgdGFibGUgaXMgZHluYW1pY2FsbHkgcmVzaXplZC4KKyAqLwordm9pZCBoYXNobWFwX2luaXQoc3RydWN0IGhhc2htYXAgKm1hcCwKKwkJCSBoYXNobWFwX2NtcF9mbiBlcXVhbHNfZnVuY3Rpb24sCisJCQkgY29uc3Qgdm9pZCAqZXF1YWxzX2Z1bmN0aW9uX2RhdGEsCisJCQkgc2l6ZV90IGluaXRpYWxfc2l6ZSk7CisKKy8qIGludGVybmFsIGZ1bmN0aW9uIGZvciBmcmVlaW5nIGhhc2htYXAgKi8KK3ZvaWQgaGFzaG1hcF9mcmVlXyhzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBzc2l6ZV90IG9mZnNldCk7CisKKy8qCisgKiBGcmVlcyBhIGhhc2htYXAgc3RydWN0dXJlIGFuZCBhbGxvY2F0ZWQgbWVtb3J5LCBsZWF2ZXMgZW50cmllcyB1bmRpc3R1cmJlZAorICovCisjZGVmaW5lIGhhc2htYXBfZnJlZShtYXApIGhhc2htYXBfZnJlZV8obWFwLCAtMSkKKworLyoKKyAqIEZyZWVzIEBtYXAgYW5kIGFsbCBlbnRyaWVzLiAgQHR5cGUgaXMgdGhlIHN0cnVjdCB0eXBlIG9mIHRoZSBlbnRyeQorICogd2hlcmUgQG1lbWJlciBpcyB0aGUgaGFzaG1hcF9lbnRyeSBzdHJ1Y3QgdXNlZCB0byBhc3NvY2lhdGUgd2l0aCBAbWFwCisgKi8KKyNkZWZpbmUgaGFzaG1hcF9mcmVlX2VudHJpZXMobWFwLCB0eXBlLCBtZW1iZXIpIFwKKwloYXNobWFwX2ZyZWVfKG1hcCwgb2Zmc2V0b2YodHlwZSwgbWVtYmVyKSk7CisKKy8qIGhhc2htYXBfZW50cnkgZnVuY3Rpb25zICovCisKKy8qCisgKiBJbml0aWFsaXplcyBhIGhhc2htYXBfZW50cnkgc3RydWN0dXJlLgorICoKKyAqIGBlbnRyeWAgcG9pbnRzIHRvIHRoZSBlbnRyeSB0byBpbml0aWFsaXplLgorICogYGhhc2hgIGlzIHRoZSBoYXNoIGNvZGUgb2YgdGhlIGVudHJ5LgorICoKKyAqIFRoZSBoYXNobWFwX2VudHJ5IHN0cnVjdHVyZSBkb2VzIG5vdCBob2xkIHJlZmVyZW5jZXMgdG8gZXh0ZXJuYWwgcmVzb3VyY2VzLAorICogYW5kIGl0IGlzIHNhZmUgdG8ganVzdCBkaXNjYXJkIGl0IG9uY2UgeW91IGFyZSBkb25lIHdpdGggaXQgKGkuZS4gaWYKKyAqIHlvdXIgc3RydWN0dXJlIHdhcyBhbGxvY2F0ZWQgd2l0aCB4bWFsbG9jKCksIHlvdSBjYW4ganVzdCBmcmVlKDMpIGl0LAorICogYW5kIGlmIGl0IGlzIG9uIHN0YWNrLCB5b3UgY2FuIGp1c3QgbGV0IGl0IGdvIG91dCBvZiBzY29wZSkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBoYXNobWFwX2VudHJ5X2luaXQoc3RydWN0IGhhc2htYXBfZW50cnkgKmUsCisJCQkJCXVuc2lnbmVkIGludCBoYXNoKQoreworCWUtPmhhc2ggPSBoYXNoOworCWUtPm5leHQgPSBOVUxMOworfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIG1hcC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaGFzaG1hcF9nZXRfc2l6ZShzdHJ1Y3QgaGFzaG1hcCAqbWFwKQoreworCWlmIChtYXAtPmRvX2NvdW50X2l0ZW1zKQorCQlyZXR1cm4gbWFwLT5wcml2YXRlX3NpemU7CisKKwlCVUcoImhhc2htYXBfZ2V0X3NpemU6IHNpemUgbm90IHNldCIpOworCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJucyB0aGUgaGFzaG1hcCBlbnRyeSBmb3IgdGhlIHNwZWNpZmllZCBrZXksIG9yIE5VTEwgaWYgbm90IGZvdW5kLgorICoKKyAqIGBtYXBgIGlzIHRoZSBoYXNobWFwIHN0cnVjdHVyZS4KKyAqCisgKiBga2V5YCBpcyBhIHVzZXIgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBzdGFydHMgd2l0aCBoYXNobWFwX2VudHJ5IHRoYXQgaGFzIGF0CisgKiBsZWFzdCBiZWVuIGluaXRpYWxpemVkIHdpdGggdGhlIHByb3BlciBoYXNoIGNvZGUgKHZpYSBgaGFzaG1hcF9lbnRyeV9pbml0YCkuCisgKgorICogYGtleWRhdGFgIGlzIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBqdXN0IGVub3VnaCBpbmZvcm1hdGlvbiB0byBjaGVjaworICogZm9yIGVxdWFsaXR5IHRvIGEgZ2l2ZW4gZW50cnkuCisgKgorICogSWYgdGhlIGtleSBkYXRhIGlzIHZhcmlhYmxlLXNpemVkIChlLmcuIGEgRkxFWF9BUlJBWSBzdHJpbmcpIG9yIHF1aXRlIGxhcmdlLAorICogaXQgaXMgdW5kZXNpcmFibGUgdG8gY3JlYXRlIGEgZnVsbC1mbGVkZ2VkIGVudHJ5IHN0cnVjdHVyZSBvbiB0aGUgaGVhcCBhbmQKKyAqIGNvcHkgYWxsIHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBzdHJ1Y3R1cmUuCisgKgorICogSW4gdGhpcyBjYXNlLCB0aGUgYGtleWRhdGFgIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBwYXNzCisgKiB2YXJpYWJsZS1zaXplZCBrZXkgZGF0YSBkaXJlY3RseSB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbiwgYW5kIHRoZSBga2V5YAorICogcGFyYW1ldGVyIGNhbiBiZSBhIHN0cmlwcGVkLWRvd24sIGZpeGVkIHNpemUgZW50cnkgc3RydWN0dXJlIGFsbG9jYXRlZCBvbiB0aGUKKyAqIHN0YWNrLgorICoKKyAqIElmIGFuIGVudHJ5IHdpdGggbWF0Y2hpbmcgaGFzaCBjb2RlIGlzIGZvdW5kLCBga2V5YCBhbmQgYGtleWRhdGFgIGFyZSBwYXNzZWQKKyAqIHRvIGBoYXNobWFwX2NtcF9mbmAgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIGVudHJ5IG1hdGNoZXMgdGhlIGtleS4KKyAqLworc3RydWN0IGhhc2htYXBfZW50cnkgKmhhc2htYXBfZ2V0KGNvbnN0IHN0cnVjdCBoYXNobWFwICptYXAsCisJCQkJY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmtleSwKKwkJCQljb25zdCB2b2lkICprZXlkYXRhKTsKKworLyoKKyAqIFJldHVybnMgdGhlIGhhc2htYXAgZW50cnkgZm9yIHRoZSBzcGVjaWZpZWQgaGFzaCBjb2RlIGFuZCBrZXkgZGF0YSwKKyAqIG9yIE5VTEwgaWYgbm90IGZvdW5kLgorICoKKyAqIGBtYXBgIGlzIHRoZSBoYXNobWFwIHN0cnVjdHVyZS4KKyAqIGBoYXNoYCBpcyB0aGUgaGFzaCBjb2RlIG9mIHRoZSBlbnRyeSB0byBsb29rIHVwLgorICoKKyAqIElmIGFuIGVudHJ5IHdpdGggbWF0Y2hpbmcgaGFzaCBjb2RlIGlzIGZvdW5kLCBga2V5ZGF0YWAgaXMgcGFzc2VkIHRvCisgKiBgaGFzaG1hcF9jbXBfZm5gIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSBlbnRyeSBtYXRjaGVzIHRoZSBrZXkuIFRoZQorICogYGVudHJ5X29yX2tleWAgcGFyYW1ldGVyIG9mIGBoYXNobWFwX2NtcF9mbmAgcG9pbnRzIHRvIGEgaGFzaG1hcF9lbnRyeQorICogc3RydWN0dXJlIHRoYXQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBoYXNobWFwX2VudHJ5ICpoYXNobWFwX2dldF9mcm9tX2hhc2goCisJCQkJCWNvbnN0IHN0cnVjdCBoYXNobWFwICptYXAsCisJCQkJCXVuc2lnbmVkIGludCBoYXNoLAorCQkJCQljb25zdCB2b2lkICprZXlkYXRhKQoreworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGtleTsKKwloYXNobWFwX2VudHJ5X2luaXQoJmtleSwgaGFzaCk7CisJcmV0dXJuIGhhc2htYXBfZ2V0KG1hcCwgJmtleSwga2V5ZGF0YSk7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBuZXh0IGVxdWFsIGhhc2htYXAgZW50cnksIG9yIE5VTEwgaWYgbm90IGZvdW5kLiBUaGlzIGNhbiBiZQorICogdXNlZCB0byBpdGVyYXRlIG92ZXIgZHVwbGljYXRlIGVudHJpZXMgKHNlZSBgaGFzaG1hcF9hZGRgKS4KKyAqCisgKiBgbWFwYCBpcyB0aGUgaGFzaG1hcCBzdHJ1Y3R1cmUuCisgKiBgZW50cnlgIGlzIHRoZSBoYXNobWFwX2VudHJ5IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbSwgb2J0YWluZWQgdmlhIGEgcHJldmlvdXMKKyAqIGNhbGwgdG8gYGhhc2htYXBfZ2V0YCBvciBgaGFzaG1hcF9nZXRfbmV4dGAuCisgKi8KK3N0cnVjdCBoYXNobWFwX2VudHJ5ICpoYXNobWFwX2dldF9uZXh0KGNvbnN0IHN0cnVjdCBoYXNobWFwICptYXAsCisJCQljb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnkpOworCisvKgorICogQWRkcyBhIGhhc2htYXAgZW50cnkuIFRoaXMgYWxsb3dzIHRvIGFkZCBkdXBsaWNhdGUgZW50cmllcyAoaS5lLgorICogc2VwYXJhdGUgdmFsdWVzIHdpdGggdGhlIHNhbWUga2V5IGFjY29yZGluZyB0byBoYXNobWFwX2NtcF9mbikuCisgKgorICogYG1hcGAgaXMgdGhlIGhhc2htYXAgc3RydWN0dXJlLgorICogYGVudHJ5YCBpcyB0aGUgZW50cnkgdG8gYWRkLgorICovCit2b2lkIGhhc2htYXBfYWRkKHN0cnVjdCBoYXNobWFwICptYXAsIHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeSk7CisKKy8qCisgKiBBZGRzIG9yIHJlcGxhY2VzIGEgaGFzaG1hcCBlbnRyeS4gSWYgdGhlIGhhc2htYXAgY29udGFpbnMgZHVwbGljYXRlCisgKiBlbnRyaWVzIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWQgZW50cnksIG9ubHkgb25lIG9mIHRoZW0gd2lsbCBiZSByZXBsYWNlZC4KKyAqCisgKiBgbWFwYCBpcyB0aGUgaGFzaG1hcCBzdHJ1Y3R1cmUuCisgKiBgZW50cnlgIGlzIHRoZSBlbnRyeSB0byBhZGQgb3IgcmVwbGFjZS4KKyAqIFJldHVybnMgdGhlIHJlcGxhY2VkIGVudHJ5LCBvciBOVUxMIGlmIG5vdCBmb3VuZCAoaS5lLiB0aGUgZW50cnkgd2FzIGFkZGVkKS4KKyAqLworc3RydWN0IGhhc2htYXBfZW50cnkgKmhhc2htYXBfcHV0KHN0cnVjdCBoYXNobWFwICptYXAsCisJCQkJc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5KTsKKworLyoKKyAqIEFkZHMgb3IgcmVwbGFjZXMgYSBoYXNobWFwIGVudHJ5IGNvbnRhaW5lZCB3aXRoaW4gQGtleXZhciwKKyAqIHdoZXJlIEBrZXl2YXIgaXMgYSBwb2ludGVyIHRvIGEgc3RydWN0IGNvbnRhaW5pbmcgYQorICogInN0cnVjdCBoYXNobWFwX2VudHJ5IiBAbWVtYmVyLgorICoKKyAqIFJldHVybnMgdGhlIHJlcGxhY2VkIHBvaW50ZXIgd2hpY2ggaXMgb2YgdGhlIHNhbWUgdHlwZSBhcyBAa2V5dmFyLAorICogb3IgTlVMTCBpZiBub3QgZm91bmQuCisgKi8KKyNkZWZpbmUgaGFzaG1hcF9wdXRfZW50cnkobWFwLCBrZXl2YXIsIG1lbWJlcikgXAorCWNvbnRhaW5lcl9vZl9vcl9udWxsX29mZnNldChoYXNobWFwX3B1dChtYXAsICYoa2V5dmFyKS0+bWVtYmVyKSwgXAorCQkJCU9GRlNFVE9GX1ZBUihrZXl2YXIsIG1lbWJlcikpCisKKy8qCisgKiBSZW1vdmVzIGEgaGFzaG1hcCBlbnRyeSBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIGtleS4gSWYgdGhlIGhhc2htYXAgY29udGFpbnMKKyAqIGR1cGxpY2F0ZSBlbnRyaWVzIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWQga2V5LCBvbmx5IG9uZSBvZiB0aGVtIHdpbGwgYmUKKyAqIHJlbW92ZWQuIFJldHVybnMgdGhlIHJlbW92ZWQgZW50cnksIG9yIE5VTEwgaWYgbm90IGZvdW5kLgorICoKKyAqIEFyZ3VtZW50IGV4cGxhbmF0aW9uIGlzIHRoZSBzYW1lIGFzIGluIGBoYXNobWFwX2dldGAuCisgKi8KK3N0cnVjdCBoYXNobWFwX2VudHJ5ICpoYXNobWFwX3JlbW92ZShzdHJ1Y3QgaGFzaG1hcCAqbWFwLAorCQkJCQljb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqa2V5LAorCQkJCQljb25zdCB2b2lkICprZXlkYXRhKTsKKworLyoKKyAqIFJlbW92ZXMgYSBoYXNobWFwIGVudHJ5IGNvbnRhaW5lZCB3aXRoaW4gQGtleXZhciwKKyAqIHdoZXJlIEBrZXl2YXIgaXMgYSBwb2ludGVyIHRvIGEgc3RydWN0IGNvbnRhaW5pbmcgYQorICogInN0cnVjdCBoYXNobWFwX2VudHJ5IiBAbWVtYmVyLgorICoKKyAqIFNlZSBgaGFzaG1hcF9nZXRgIGZvciBhbiBleHBsYW5hdGlvbiBvZiBAa2V5ZGF0YQorICoKKyAqIFJldHVybnMgdGhlIHJlcGxhY2VkIHBvaW50ZXIgd2hpY2ggaXMgb2YgdGhlIHNhbWUgdHlwZSBhcyBAa2V5dmFyLAorICogb3IgTlVMTCBpZiBub3QgZm91bmQuCisgKi8KKyNkZWZpbmUgaGFzaG1hcF9yZW1vdmVfZW50cnkobWFwLCBrZXl2YXIsIG1lbWJlciwga2V5ZGF0YSkgXAorCWNvbnRhaW5lcl9vZl9vcl9udWxsX29mZnNldCggXAorCQkJaGFzaG1hcF9yZW1vdmUobWFwLCAmKGtleXZhciktPm1lbWJlciwga2V5ZGF0YSksIFwKKwkJCU9GRlNFVE9GX1ZBUihrZXl2YXIsIG1lbWJlcikpCisKKy8qCisgKiBSZXR1cm5zIHRoZSBgYnVja2V0YCBhbiBlbnRyeSBpcyBzdG9yZWQgaW4uCisgKiBVc2VmdWwgZm9yIG11bHRpdGhyZWFkZWQgcmVhZCBhY2Nlc3MuCisgKi8KK2ludCBoYXNobWFwX2J1Y2tldChjb25zdCBzdHJ1Y3QgaGFzaG1hcCAqbWFwLCB1bnNpZ25lZCBpbnQgaGFzaCk7CisKKy8qCisgKiBVc2VkIHRvIGl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcyBvZiBhIGhhc2htYXAuIE5vdGUgdGhhdCBpdCBpcworICogbm90IHNhZmUgdG8gYWRkIG9yIHJlbW92ZSBlbnRyaWVzIHRvIHRoZSBoYXNobWFwIHdoaWxlCisgKiBpdGVyYXRpbmcuCisgKi8KK3N0cnVjdCBoYXNobWFwX2l0ZXIgeworCXN0cnVjdCBoYXNobWFwICptYXA7CisJc3RydWN0IGhhc2htYXBfZW50cnkgKm5leHQ7CisJdW5zaWduZWQgaW50IHRhYmxlcG9zOworfTsKKworLyogSW5pdGlhbGl6ZXMgYSBgaGFzaG1hcF9pdGVyYCBzdHJ1Y3R1cmUuICovCit2b2lkIGhhc2htYXBfaXRlcl9pbml0KHN0cnVjdCBoYXNobWFwICptYXAsIHN0cnVjdCBoYXNobWFwX2l0ZXIgKml0ZXIpOworCisvKiBSZXR1cm5zIHRoZSBuZXh0IGhhc2htYXBfZW50cnksIG9yIE5VTEwgaWYgdGhlcmUgYXJlIG5vIG1vcmUgZW50cmllcy4gKi8KK3N0cnVjdCBoYXNobWFwX2VudHJ5ICpoYXNobWFwX2l0ZXJfbmV4dChzdHJ1Y3QgaGFzaG1hcF9pdGVyICppdGVyKTsKKworLyogSW5pdGlhbGl6ZXMgdGhlIGl0ZXJhdG9yIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBlbnRyeSwgaWYgYW55LiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqaGFzaG1hcF9pdGVyX2ZpcnN0KHN0cnVjdCBoYXNobWFwICptYXAsCisJCXN0cnVjdCBoYXNobWFwX2l0ZXIgKml0ZXIpCit7CisJaGFzaG1hcF9pdGVyX2luaXQobWFwLCBpdGVyKTsKKwlyZXR1cm4gaGFzaG1hcF9pdGVyX25leHQoaXRlcik7Cit9CisKKy8qCisgKiByZXR1cm5zIHRoZSBmaXJzdCBlbnRyeSBpbiBAbWFwIHVzaW5nIEBpdGVyLCB3aGVyZSB0aGUgZW50cnkgaXMgb2YKKyAqIEB0eXBlIChlLmcuICJzdHJ1Y3QgZm9vIikgYW5kIEBtZW1iZXIgaXMgdGhlIG5hbWUgb2YgdGhlCisgKiAic3RydWN0IGhhc2htYXBfZW50cnkiIGluIEB0eXBlCisgKi8KKyNkZWZpbmUgaGFzaG1hcF9pdGVyX2ZpcnN0X2VudHJ5KG1hcCwgaXRlciwgdHlwZSwgbWVtYmVyKSBcCisJY29udGFpbmVyX29mX29yX251bGwoaGFzaG1hcF9pdGVyX2ZpcnN0KG1hcCwgaXRlciksIHR5cGUsIG1lbWJlcikKKworLyogaW50ZXJuYWwgbWFjcm8gZm9yIGhhc2htYXBfZm9yX2VhY2hfZW50cnkgKi8KKyNkZWZpbmUgaGFzaG1hcF9pdGVyX25leHRfZW50cnlfb2Zmc2V0KGl0ZXIsIG9mZnNldCkgXAorCWNvbnRhaW5lcl9vZl9vcl9udWxsX29mZnNldChoYXNobWFwX2l0ZXJfbmV4dChpdGVyKSwgb2Zmc2V0KQorCisvKiBpbnRlcm5hbCBtYWNybyBmb3IgaGFzaG1hcF9mb3JfZWFjaF9lbnRyeSAqLworI2RlZmluZSBoYXNobWFwX2l0ZXJfZmlyc3RfZW50cnlfb2Zmc2V0KG1hcCwgaXRlciwgb2Zmc2V0KSBcCisJY29udGFpbmVyX29mX29yX251bGxfb2Zmc2V0KGhhc2htYXBfaXRlcl9maXJzdChtYXAsIGl0ZXIpLCBvZmZzZXQpCisKKy8qCisgKiBpdGVyYXRlIHRocm91Z2ggQG1hcCB1c2luZyBAaXRlciwgQHZhciBpcyBhIHBvaW50ZXIgdG8gYSB0eXBlCisgKiBjb250YWluaW5nIGEgQG1lbWJlciB3aGljaCBpcyBhICJzdHJ1Y3QgaGFzaG1hcF9lbnRyeSIKKyAqLworI2RlZmluZSBoYXNobWFwX2Zvcl9lYWNoX2VudHJ5KG1hcCwgaXRlciwgdmFyLCBtZW1iZXIpIFwKKwlmb3IgKHZhciA9IGhhc2htYXBfaXRlcl9maXJzdF9lbnRyeV9vZmZzZXQobWFwLCBpdGVyLCBcCisJCQkJCQlPRkZTRVRPRl9WQVIodmFyLCBtZW1iZXIpKTsgXAorCQl2YXI7IFwKKwkJdmFyID0gaGFzaG1hcF9pdGVyX25leHRfZW50cnlfb2Zmc2V0KGl0ZXIsIFwKKwkJCQkJCU9GRlNFVE9GX1ZBUih2YXIsIG1lbWJlcikpKQorCisvKgorICogcmV0dXJucyBhIHBvaW50ZXIgb2YgdHlwZSBtYXRjaGluZyBAa2V5dmFyLCBvciBOVUxMIGlmIG5vdGhpbmcgZm91bmQuCisgKiBAa2V5dmFyIGlzIGEgcG9pbnRlciB0byBhIHN0cnVjdCBjb250YWluaW5nIGEKKyAqICJzdHJ1Y3QgaGFzaG1hcF9lbnRyeSIgQG1lbWJlci4KKyAqLworI2RlZmluZSBoYXNobWFwX2dldF9lbnRyeShtYXAsIGtleXZhciwgbWVtYmVyLCBrZXlkYXRhKSBcCisJY29udGFpbmVyX29mX29yX251bGxfb2Zmc2V0KCBcCisJCQkJaGFzaG1hcF9nZXQobWFwLCAmKGtleXZhciktPm1lbWJlciwga2V5ZGF0YSksIFwKKwkJCQlPRkZTRVRPRl9WQVIoa2V5dmFyLCBtZW1iZXIpKQorCisjZGVmaW5lIGhhc2htYXBfZ2V0X2VudHJ5X2Zyb21faGFzaChtYXAsIGhhc2gsIGtleWRhdGEsIHR5cGUsIG1lbWJlcikgXAorCWNvbnRhaW5lcl9vZl9vcl9udWxsKGhhc2htYXBfZ2V0X2Zyb21faGFzaChtYXAsIGhhc2gsIGtleWRhdGEpLCBcCisJCQkJdHlwZSwgbWVtYmVyKQorLyoKKyAqIHJldHVybnMgdGhlIG5leHQgZXF1YWwgcG9pbnRlciB0byBAdmFyLCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqIEB2YXIgaXMgYSBwb2ludGVyIG9mIGFueSB0eXBlIGNvbnRhaW5pbmcgInN0cnVjdCBoYXNobWFwX2VudHJ5IgorICogQG1lbWJlciBpcyB0aGUgbmFtZSBvZiB0aGUgInN0cnVjdCBoYXNobWFwX2VudHJ5IiBmaWVsZAorICovCisjZGVmaW5lIGhhc2htYXBfZ2V0X25leHRfZW50cnkobWFwLCB2YXIsIG1lbWJlcikgXAorCWNvbnRhaW5lcl9vZl9vcl9udWxsX29mZnNldChoYXNobWFwX2dldF9uZXh0KG1hcCwgJih2YXIpLT5tZW1iZXIpLCBcCisJCQkJT0ZGU0VUT0ZfVkFSKHZhciwgbWVtYmVyKSkKKworLyoKKyAqIGl0ZXJhdGUgQG1hcCBzdGFydGluZyBmcm9tIEB2YXIsIHdoZXJlIEB2YXIgaXMgYSBwb2ludGVyIG9mIEB0eXBlCisgKiBhbmQgQG1lbWJlciBpcyB0aGUgbmFtZSBvZiB0aGUgInN0cnVjdCBoYXNobWFwX2VudHJ5IiBmaWVsZCBpbiBAdHlwZQorICovCisjZGVmaW5lIGhhc2htYXBfZm9yX2VhY2hfZW50cnlfZnJvbShtYXAsIHZhciwgbWVtYmVyKSBcCisJZm9yICg7IFwKKwkJdmFyOyBcCisJCXZhciA9IGhhc2htYXBfZ2V0X25leHRfZW50cnkobWFwLCB2YXIsIG1lbWJlcikpCisKKy8qCisgKiBEaXNhYmxlIGl0ZW0gY291bnRpbmcgYW5kIGF1dG9tYXRpYyByZWhhc2hpbmcgd2hlbiBhZGRpbmcvcmVtb3ZpbmcgaXRlbXMuCisgKgorICogTm9ybWFsbHksIHRoZSBoYXNobWFwIGtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIG1hcAorICogYW5kIHVzZXMgaXQgdG8gZHluYW1pY2FsbHkgcmVzaXplIGl0LiAgVGhpcyAoYm90aCB0aGUgY291bnRpbmcgYW5kCisgKiB0aGUgcmVzaXppbmcpIGNhbiBjYXVzZSBwcm9ibGVtcyB3aGVuIHRoZSBtYXAgaXMgYmVpbmcgdXNlZCBieQorICogdGhyZWFkZWQgY2FsbGVycyAoYmVjYXVzZSB0aGUgaGFzaG1hcCBjb2RlIGRvZXMgbm90IGtub3cgYWJvdXQgdGhlCisgKiBsb2NraW5nIHN0cmF0ZWd5IHVzZWQgYnkgdGhlIHRocmVhZGVkIGNhbGxlcnMgYW5kIHRoZXJlZm9yZSwgZG9lcworICogbm90IGtub3cgaG93IHRvIHByb3RlY3QgdGhlICJwcml2YXRlX3NpemUiIGNvdW50ZXIpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGFzaG1hcF9kaXNhYmxlX2l0ZW1fY291bnRpbmcoc3RydWN0IGhhc2htYXAgKm1hcCkKK3sKKwltYXAtPmRvX2NvdW50X2l0ZW1zID0gMDsKK30KKworLyoKKyAqIFJlLWVuYWJsZSBpdGVtIGNvdW50aW5nIHdoZW4gYWRkaW5nL3JlbW92aW5nIGl0ZW1zLgorICogSWYgY291bnRpbmcgaXMgY3VycmVudGx5IGRpc2FibGVkLCBpdCB3aWxsIGZvcmNlIGNvdW50IHRoZW0uCisgKiBJdCBXSUxMIE5PVCBhdXRvbWF0aWNhbGx5IHJlaGFzaCB0aGVtLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGFzaG1hcF9lbmFibGVfaXRlbV9jb3VudGluZyhzdHJ1Y3QgaGFzaG1hcCAqbWFwKQoreworCXVuc2lnbmVkIGludCBuID0gMDsKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisKKwlpZiAobWFwLT5kb19jb3VudF9pdGVtcykKKwkJcmV0dXJuOworCisJaGFzaG1hcF9pdGVyX2luaXQobWFwLCAmaXRlcik7CisJd2hpbGUgKGhhc2htYXBfaXRlcl9uZXh0KCZpdGVyKSkKKwkJbisrOworCisJbWFwLT5kb19jb3VudF9pdGVtcyA9IDE7CisJbWFwLT5wcml2YXRlX3NpemUgPSBuOworfQorCisvKiBTdHJpbmcgaW50ZXJuaW5nICovCisKKy8qCisgKiBSZXR1cm5zIHRoZSB1bmlxdWUsIGludGVybmVkIHZlcnNpb24gb2YgdGhlIHNwZWNpZmllZCBzdHJpbmcgb3IgZGF0YSwKKyAqIHNpbWlsYXIgdG8gdGhlIGBTdHJpbmcuaW50ZXJuYCBBUEkgaW4gSmF2YSBhbmQgLk5FVCwgcmVzcGVjdGl2ZWx5LgorICogSW50ZXJuZWQgc3RyaW5ncyByZW1haW4gdmFsaWQgZm9yIHRoZSBlbnRpcmUgbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MuCisgKgorICogQ2FuIGJlIHVzZWQgYXMgYFt4XXN0cmR1cCgpYCBvciBgeG1lbWR1cHpgIHJlcGxhY2VtZW50LCBleGNlcHQgdGhhdCBpbnRlcm5lZAorICogc3RyaW5ncyAvIGRhdGEgbXVzdCBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKgorICogSW50ZXJuZWQgc3RyaW5ncyBhcmUgYmVzdCB1c2VkIGZvciBzaG9ydCBzdHJpbmdzIHdpdGggaGlnaCBwcm9iYWJpbGl0eSBvZgorICogZHVwbGljYXRlcy4KKyAqCisgKiBVc2VzIGEgaGFzaG1hcCB0byBzdG9yZSB0aGUgcG9vbCBvZiBpbnRlcm5lZCBzdHJpbmdzLgorICovCitjb25zdCB2b2lkICptZW1pbnRlcm4oY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnN0cmludGVybihjb25zdCBjaGFyICpzdHJpbmcpCit7CisJcmV0dXJuIG1lbWludGVybihzdHJpbmcsIHN0cmxlbihzdHJpbmcpKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9oZWxwLmMgYi9oZWxwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRlOWMwZAotLS0gL2Rldi9udWxsCisrKyBiL2hlbHAuYwpAQCAtMCwwICsxLDcyMSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJsZXZlbnNodGVpbi5oIgorI2luY2x1ZGUgImhlbHAuaCIKKyNpbmNsdWRlICJjb21tYW5kLWxpc3QuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImNvbHVtbi5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdHJ1Y3QgY2F0ZWdvcnlfZGVzY3JpcHRpb24geworCXVpbnQzMl90IGNhdGVnb3J5OworCWNvbnN0IGNoYXIgKmRlc2M7Cit9Oworc3RhdGljIHVpbnQzMl90IGNvbW1vbl9tYXNrID0KKwlDQVRfaW5pdCB8IENBVF93b3JrdHJlZSB8IENBVF9pbmZvIHwKKwlDQVRfaGlzdG9yeSB8IENBVF9yZW1vdGU7CitzdGF0aWMgc3RydWN0IGNhdGVnb3J5X2Rlc2NyaXB0aW9uIGNvbW1vbl9jYXRlZ29yaWVzW10gPSB7CisJeyBDQVRfaW5pdCwgTl8oInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIikgfSwKKwl7IENBVF93b3JrdHJlZSwgTl8oIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIikgfSwKKwl7IENBVF9pbmZvLCBOXygiZXhhbWluZSB0aGUgaGlzdG9yeSBhbmQgc3RhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCByZXZpc2lvbnMpIikgfSwKKwl7IENBVF9oaXN0b3J5LCBOXygiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIpIH0sCisJeyBDQVRfcmVtb3RlLCBOXygiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIikgfSwKKwl7IDAsIE5VTEwgfQorfTsKK3N0YXRpYyBzdHJ1Y3QgY2F0ZWdvcnlfZGVzY3JpcHRpb24gbWFpbl9jYXRlZ29yaWVzW10gPSB7CisJeyBDQVRfbWFpbnBvcmNlbGFpbiwgTl8oIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIikgfSwKKwl7IENBVF9hbmNpbGxhcnltYW5pcHVsYXRvcnMsIE5fKCJBbmNpbGxhcnkgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiKSB9LAorCXsgQ0FUX2FuY2lsbGFyeWludGVycm9nYXRvcnMsIE5fKCJBbmNpbGxhcnkgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIikgfSwKKwl7IENBVF9mb3JlaWduc2NtaW50ZXJmYWNlLCBOXygiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiKSB9LAorCXsgQ0FUX3BsdW1iaW5nbWFuaXB1bGF0b3JzLCBOXygiTG93LWxldmVsIENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIikgfSwKKwl7IENBVF9wbHVtYmluZ2ludGVycm9nYXRvcnMsIE5fKCJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIikgfSwKKwl7IENBVF9zeW5jaGluZ3JlcG9zaXRvcmllcywgTl8oIkxvdy1sZXZlbCBDb21tYW5kcyAvIFN5bmNpbmcgUmVwb3NpdG9yaWVzIikgfSwKKwl7IENBVF9wdXJlaGVscGVycywgTl8oIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVybmFsIEhlbHBlcnMiKSB9LAorCXsgMCwgTlVMTCB9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZHJvcF9wcmVmaXgoY29uc3QgY2hhciAqbmFtZSwgdWludDMyX3QgY2F0ZWdvcnkpCit7CisJY29uc3QgY2hhciAqbmV3X25hbWU7CisKKwlpZiAoc2tpcF9wcmVmaXgobmFtZSwgImdpdC0iLCAmbmV3X25hbWUpKQorCQlyZXR1cm4gbmV3X25hbWU7CisJaWYgKGNhdGVnb3J5ID09IENBVF9ndWlkZSAmJiBza2lwX3ByZWZpeChuYW1lLCAiZ2l0IiwgJm5ld19uYW1lKSkKKwkJcmV0dXJuIG5ld19uYW1lOworCXJldHVybiBuYW1lOworCit9CisKK3N0YXRpYyB2b2lkIGV4dHJhY3RfY21kcyhzdHJ1Y3QgY21kbmFtZV9oZWxwICoqcF9jbWRzLCB1aW50MzJfdCBtYXNrKQoreworCWludCBpLCBuciA9IDA7CisJc3RydWN0IGNtZG5hbWVfaGVscCAqY21kczsKKworCWlmIChBUlJBWV9TSVpFKGNvbW1hbmRfbGlzdCkgPT0gMCkKKwkJQlVHKCJlbXB0eSBjb21tYW5kX2xpc3RbXSBpcyBhIHNpZ24gb2YgYnJva2VuIGdlbmVyYXRlLWNtZGxpc3Quc2giKTsKKworCUFMTE9DX0FSUkFZKGNtZHMsIEFSUkFZX1NJWkUoY29tbWFuZF9saXN0KSArIDEpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbWFuZF9saXN0KTsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjbWRuYW1lX2hlbHAgKmNtZCA9IGNvbW1hbmRfbGlzdCArIGk7CisKKwkJaWYgKCEoY21kLT5jYXRlZ29yeSAmIG1hc2spKQorCQkJY29udGludWU7CisKKwkJY21kc1tucl0gPSAqY21kOworCQljbWRzW25yXS5uYW1lID0gZHJvcF9wcmVmaXgoY21kLT5uYW1lLCBjbWQtPmNhdGVnb3J5KTsKKworCQlucisrOworCX0KKwljbWRzW25yXS5uYW1lID0gTlVMTDsKKwkqcF9jbWRzID0gY21kczsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfY29tbWFuZF9saXN0KGNvbnN0IHN0cnVjdCBjbWRuYW1lX2hlbHAgKmNtZHMsCisJCQkgICAgICAgdWludDMyX3QgbWFzaywgaW50IGxvbmdlc3QpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBjbWRzW2ldLm5hbWU7IGkrKykgeworCQlpZiAoY21kc1tpXS5jYXRlZ29yeSAmIG1hc2spIHsKKwkJCXNpemVfdCBsZW4gPSBzdHJsZW4oY21kc1tpXS5uYW1lKTsKKwkJCXByaW50ZigiICAgJXMgICAiLCBjbWRzW2ldLm5hbWUpOworCQkJaWYgKGxvbmdlc3QgPiBsZW4pCisJCQkJbXB1dF9jaGFyKCcgJywgbG9uZ2VzdCAtIGxlbik7CisJCQlwdXRzKF8oY21kc1tpXS5oZWxwKSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY21kX25hbWVfY21wKGNvbnN0IHZvaWQgKmVsZW0xLCBjb25zdCB2b2lkICplbGVtMikKK3sKKwljb25zdCBzdHJ1Y3QgY21kbmFtZV9oZWxwICplMSA9IGVsZW0xOworCWNvbnN0IHN0cnVjdCBjbWRuYW1lX2hlbHAgKmUyID0gZWxlbTI7CisKKwlyZXR1cm4gc3RyY21wKGUxLT5uYW1lLCBlMi0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2NtZF9ieV9jYXRlZ29yeShjb25zdCBzdHJ1Y3QgY2F0ZWdvcnlfZGVzY3JpcHRpb24gKmNhdGRlc2MsCisJCQkJICBpbnQgKmxvbmdlc3RfcCkKK3sKKwlzdHJ1Y3QgY21kbmFtZV9oZWxwICpjbWRzOworCWludCBsb25nZXN0ID0gMDsKKwlpbnQgaSwgbnIgPSAwOworCXVpbnQzMl90IG1hc2sgPSAwOworCisJZm9yIChpID0gMDsgY2F0ZGVzY1tpXS5kZXNjOyBpKyspCisJCW1hc2sgfD0gY2F0ZGVzY1tpXS5jYXRlZ29yeTsKKworCWV4dHJhY3RfY21kcygmY21kcywgbWFzayk7CisKKwlmb3IgKGkgPSAwOyBjbWRzW2ldLm5hbWU7IGkrKywgbnIrKykgeworCQlpZiAobG9uZ2VzdCA8IHN0cmxlbihjbWRzW2ldLm5hbWUpKQorCQkJbG9uZ2VzdCA9IHN0cmxlbihjbWRzW2ldLm5hbWUpOworCX0KKwlRU09SVChjbWRzLCBuciwgY21kX25hbWVfY21wKTsKKworCWZvciAoaSA9IDA7IGNhdGRlc2NbaV0uZGVzYzsgaSsrKSB7CisJCXVpbnQzMl90IG1hc2sgPSBjYXRkZXNjW2ldLmNhdGVnb3J5OworCQljb25zdCBjaGFyICpkZXNjID0gY2F0ZGVzY1tpXS5kZXNjOworCisJCXByaW50ZigiXG4lc1xuIiwgXyhkZXNjKSk7CisJCXByaW50X2NvbW1hbmRfbGlzdChjbWRzLCBtYXNrLCBsb25nZXN0KTsKKwl9CisJZnJlZShjbWRzKTsKKwlpZiAobG9uZ2VzdF9wKQorCQkqbG9uZ2VzdF9wID0gbG9uZ2VzdDsKK30KKwordm9pZCBhZGRfY21kbmFtZShzdHJ1Y3QgY21kbmFtZXMgKmNtZHMsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJc3RydWN0IGNtZG5hbWUgKmVudDsKKwlGTEVYX0FMTE9DX01FTShlbnQsIG5hbWUsIG5hbWUsIGxlbik7CisJZW50LT5sZW4gPSBsZW47CisKKwlBTExPQ19HUk9XKGNtZHMtPm5hbWVzLCBjbWRzLT5jbnQgKyAxLCBjbWRzLT5hbGxvYyk7CisJY21kcy0+bmFtZXNbY21kcy0+Y250KytdID0gZW50OworfQorCitzdGF0aWMgdm9pZCBjbGVhbl9jbWRuYW1lcyhzdHJ1Y3QgY21kbmFtZXMgKmNtZHMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGNtZHMtPmNudDsgKytpKQorCQlmcmVlKGNtZHMtPm5hbWVzW2ldKTsKKwlmcmVlKGNtZHMtPm5hbWVzKTsKKwljbWRzLT5jbnQgPSAwOworCWNtZHMtPmFsbG9jID0gMDsKK30KKworc3RhdGljIGludCBjbWRuYW1lX2NvbXBhcmUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCBjbWRuYW1lICphID0gKihzdHJ1Y3QgY21kbmFtZSAqKilhXzsKKwlzdHJ1Y3QgY21kbmFtZSAqYiA9ICooc3RydWN0IGNtZG5hbWUgKiopYl87CisJcmV0dXJuIHN0cmNtcChhLT5uYW1lLCBiLT5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgdW5pcShzdHJ1Y3QgY21kbmFtZXMgKmNtZHMpCit7CisJaW50IGksIGo7CisKKwlpZiAoIWNtZHMtPmNudCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gaiA9IDE7IGkgPCBjbWRzLT5jbnQ7IGkrKykgeworCQlpZiAoIXN0cmNtcChjbWRzLT5uYW1lc1tpXS0+bmFtZSwgY21kcy0+bmFtZXNbai0xXS0+bmFtZSkpCisJCQlmcmVlKGNtZHMtPm5hbWVzW2ldKTsKKwkJZWxzZQorCQkJY21kcy0+bmFtZXNbaisrXSA9IGNtZHMtPm5hbWVzW2ldOworCX0KKworCWNtZHMtPmNudCA9IGo7Cit9CisKK3ZvaWQgZXhjbHVkZV9jbWRzKHN0cnVjdCBjbWRuYW1lcyAqY21kcywgc3RydWN0IGNtZG5hbWVzICpleGNsdWRlcykKK3sKKwlpbnQgY2ksIGNqLCBlaTsKKwlpbnQgY21wOworCisJY2kgPSBjaiA9IGVpID0gMDsKKwl3aGlsZSAoY2kgPCBjbWRzLT5jbnQgJiYgZWkgPCBleGNsdWRlcy0+Y250KSB7CisJCWNtcCA9IHN0cmNtcChjbWRzLT5uYW1lc1tjaV0tPm5hbWUsIGV4Y2x1ZGVzLT5uYW1lc1tlaV0tPm5hbWUpOworCQlpZiAoY21wIDwgMCkKKwkJCWNtZHMtPm5hbWVzW2NqKytdID0gY21kcy0+bmFtZXNbY2krK107CisJCWVsc2UgaWYgKGNtcCA9PSAwKSB7CisJCQllaSsrOworCQkJZnJlZShjbWRzLT5uYW1lc1tjaSsrXSk7CisJCX0gZWxzZSBpZiAoY21wID4gMCkKKwkJCWVpKys7CisJfQorCisJd2hpbGUgKGNpIDwgY21kcy0+Y250KQorCQljbWRzLT5uYW1lc1tjaisrXSA9IGNtZHMtPm5hbWVzW2NpKytdOworCisJY21kcy0+Y250ID0gY2o7Cit9CisKK3N0YXRpYyB2b2lkIHByZXR0eV9wcmludF9jbWRuYW1lcyhzdHJ1Y3QgY21kbmFtZXMgKmNtZHMsIHVuc2lnbmVkIGludCBjb2xvcHRzKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3QgY29sdW1uX29wdGlvbnMgY29wdHM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kcy0+Y250OyBpKyspCisJCXN0cmluZ19saXN0X2FwcGVuZCgmbGlzdCwgY21kcy0+bmFtZXNbaV0tPm5hbWUpOworCS8qCisJICogYWx3YXlzIGVuYWJsZSBjb2x1bW4gZGlzcGxheSwgd2Ugb25seSBjb25zdWx0IGNvbHVtbi4qCisJICogYWJvdXQgbGF5b3V0IHN0cmF0ZWd5IGFuZCBzdHVmZgorCSAqLworCWNvbG9wdHMgPSAoY29sb3B0cyAmIH5DT0xfRU5BQkxFX01BU0spIHwgQ09MX0VOQUJMRUQ7CisJbWVtc2V0KCZjb3B0cywgMCwgc2l6ZW9mKGNvcHRzKSk7CisJY29wdHMuaW5kZW50ID0gIiAgIjsKKwljb3B0cy5wYWRkaW5nID0gMjsKKwlwcmludF9jb2x1bW5zKCZsaXN0LCBjb2xvcHRzLCAmY29wdHMpOworCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKK30KKworc3RhdGljIHZvaWQgbGlzdF9jb21tYW5kc19pbl9kaXIoc3RydWN0IGNtZG5hbWVzICpjbWRzLAorCQkJCQkgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlESVIgKmRpciA9IG9wZW5kaXIocGF0aCk7CisJc3RydWN0IGRpcmVudCAqZGU7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgbGVuOworCisJaWYgKCFkaXIpCisJCXJldHVybjsKKwlpZiAoIXByZWZpeCkKKwkJcHJlZml4ID0gImdpdC0iOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzLyIsIHBhdGgpOworCWxlbiA9IGJ1Zi5sZW47CisKKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCWNvbnN0IGNoYXIgKmVudDsKKwkJc2l6ZV90IGVudGxlbjsKKworCQlpZiAoIXNraXBfcHJlZml4KGRlLT5kX25hbWUsIHByZWZpeCwgJmVudCkpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfc2V0bGVuKCZidWYsIGxlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZGUtPmRfbmFtZSk7CisJCWlmICghaXNfZXhlY3V0YWJsZShidWYuYnVmKSkKKwkJCWNvbnRpbnVlOworCisJCWVudGxlbiA9IHN0cmxlbihlbnQpOworCQlzdHJpcF9zdWZmaXgoZW50LCAiLmV4ZSIsICZlbnRsZW4pOworCisJCWFkZF9jbWRuYW1lKGNtZHMsIGVudCwgZW50bGVuKTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKwordm9pZCBsb2FkX2NvbW1hbmRfbGlzdChjb25zdCBjaGFyICpwcmVmaXgsCisJCXN0cnVjdCBjbWRuYW1lcyAqbWFpbl9jbWRzLAorCQlzdHJ1Y3QgY21kbmFtZXMgKm90aGVyX2NtZHMpCit7CisJY29uc3QgY2hhciAqZW52X3BhdGggPSBnZXRlbnYoIlBBVEgiKTsKKwljb25zdCBjaGFyICpleGVjX3BhdGggPSBnaXRfZXhlY19wYXRoKCk7CisKKwlpZiAoZXhlY19wYXRoKSB7CisJCWxpc3RfY29tbWFuZHNfaW5fZGlyKG1haW5fY21kcywgZXhlY19wYXRoLCBwcmVmaXgpOworCQlRU09SVChtYWluX2NtZHMtPm5hbWVzLCBtYWluX2NtZHMtPmNudCwgY21kbmFtZV9jb21wYXJlKTsKKwkJdW5pcShtYWluX2NtZHMpOworCX0KKworCWlmIChlbnZfcGF0aCkgeworCQljaGFyICpwYXRocywgKnBhdGgsICpjb2xvbjsKKwkJcGF0aCA9IHBhdGhzID0geHN0cmR1cChlbnZfcGF0aCk7CisJCXdoaWxlICgxKSB7CisJCQlpZiAoKGNvbG9uID0gc3RyY2hyKHBhdGgsIFBBVEhfU0VQKSkpCisJCQkJKmNvbG9uID0gMDsKKwkJCWlmICghZXhlY19wYXRoIHx8IHN0cmNtcChwYXRoLCBleGVjX3BhdGgpKQorCQkJCWxpc3RfY29tbWFuZHNfaW5fZGlyKG90aGVyX2NtZHMsIHBhdGgsIHByZWZpeCk7CisKKwkJCWlmICghY29sb24pCisJCQkJYnJlYWs7CisJCQlwYXRoID0gY29sb24gKyAxOworCQl9CisJCWZyZWUocGF0aHMpOworCisJCVFTT1JUKG90aGVyX2NtZHMtPm5hbWVzLCBvdGhlcl9jbWRzLT5jbnQsIGNtZG5hbWVfY29tcGFyZSk7CisJCXVuaXEob3RoZXJfY21kcyk7CisJfQorCWV4Y2x1ZGVfY21kcyhvdGhlcl9jbWRzLCBtYWluX2NtZHMpOworfQorCit2b2lkIGxpc3RfY29tbWFuZHModW5zaWduZWQgaW50IGNvbG9wdHMsCisJCSAgIHN0cnVjdCBjbWRuYW1lcyAqbWFpbl9jbWRzLCBzdHJ1Y3QgY21kbmFtZXMgKm90aGVyX2NtZHMpCit7CisJaWYgKG1haW5fY21kcy0+Y250KSB7CisJCWNvbnN0IGNoYXIgKmV4ZWNfcGF0aCA9IGdpdF9leGVjX3BhdGgoKTsKKwkJcHJpbnRmX2xuKF8oImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIpLCBleGVjX3BhdGgpOworCQlwdXRjaGFyKCdcbicpOworCQlwcmV0dHlfcHJpbnRfY21kbmFtZXMobWFpbl9jbWRzLCBjb2xvcHRzKTsKKwkJcHV0Y2hhcignXG4nKTsKKwl9CisKKwlpZiAob3RoZXJfY21kcy0+Y250KSB7CisJCXByaW50Zl9sbihfKCJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiKSk7CisJCXB1dGNoYXIoJ1xuJyk7CisJCXByZXR0eV9wcmludF9jbWRuYW1lcyhvdGhlcl9jbWRzLCBjb2xvcHRzKTsKKwkJcHV0Y2hhcignXG4nKTsKKwl9Cit9CisKK3ZvaWQgbGlzdF9jb21tb25fY21kc19oZWxwKHZvaWQpCit7CisJcHV0cyhfKCJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiKSk7CisJcHJpbnRfY21kX2J5X2NhdGVnb3J5KGNvbW1vbl9jYXRlZ29yaWVzLCBOVUxMKTsKK30KKwordm9pZCBsaXN0X2FsbF9tYWluX2NtZHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCXN0cnVjdCBjbWRuYW1lcyBtYWluX2NtZHMsIG90aGVyX2NtZHM7CisJaW50IGk7CisKKwltZW1zZXQoJm1haW5fY21kcywgMCwgc2l6ZW9mKG1haW5fY21kcykpOworCW1lbXNldCgmb3RoZXJfY21kcywgMCwgc2l6ZW9mKG90aGVyX2NtZHMpKTsKKwlsb2FkX2NvbW1hbmRfbGlzdCgiZ2l0LSIsICZtYWluX2NtZHMsICZvdGhlcl9jbWRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBtYWluX2NtZHMuY250OyBpKyspCisJCXN0cmluZ19saXN0X2FwcGVuZChsaXN0LCBtYWluX2NtZHMubmFtZXNbaV0tPm5hbWUpOworCisJY2xlYW5fY21kbmFtZXMoJm1haW5fY21kcyk7CisJY2xlYW5fY21kbmFtZXMoJm90aGVyX2NtZHMpOworfQorCit2b2lkIGxpc3RfYWxsX290aGVyX2NtZHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCXN0cnVjdCBjbWRuYW1lcyBtYWluX2NtZHMsIG90aGVyX2NtZHM7CisJaW50IGk7CisKKwltZW1zZXQoJm1haW5fY21kcywgMCwgc2l6ZW9mKG1haW5fY21kcykpOworCW1lbXNldCgmb3RoZXJfY21kcywgMCwgc2l6ZW9mKG90aGVyX2NtZHMpKTsKKwlsb2FkX2NvbW1hbmRfbGlzdCgiZ2l0LSIsICZtYWluX2NtZHMsICZvdGhlcl9jbWRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBvdGhlcl9jbWRzLmNudDsgaSsrKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgb3RoZXJfY21kcy5uYW1lc1tpXS0+bmFtZSk7CisKKwljbGVhbl9jbWRuYW1lcygmbWFpbl9jbWRzKTsKKwljbGVhbl9jbWRuYW1lcygmb3RoZXJfY21kcyk7Cit9CisKK3ZvaWQgbGlzdF9jbWRzX2J5X2NhdGVnb3J5KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCSAgIGNvbnN0IGNoYXIgKmNhdCkKK3sKKwlpbnQgaSwgbiA9IEFSUkFZX1NJWkUoY29tbWFuZF9saXN0KTsKKwl1aW50MzJfdCBjYXRfaWQgPSAwOworCisJZm9yIChpID0gMDsgY2F0ZWdvcnlfbmFtZXNbaV07IGkrKykgeworCQlpZiAoIXN0cmNtcChjYXQsIGNhdGVnb3J5X25hbWVzW2ldKSkgeworCQkJY2F0X2lkID0gMVVMIDw8IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIWNhdF9pZCkKKwkJZGllKF8oInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciKSwgY2F0KTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJc3RydWN0IGNtZG5hbWVfaGVscCAqY21kID0gY29tbWFuZF9saXN0ICsgaTsKKworCQlpZiAoIShjbWQtPmNhdGVnb3J5ICYgY2F0X2lkKSkKKwkJCWNvbnRpbnVlOworCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgZHJvcF9wcmVmaXgoY21kLT5uYW1lLCBjbWQtPmNhdGVnb3J5KSk7CisJfQorfQorCit2b2lkIGxpc3RfY21kc19ieV9jb25maWcoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCWNvbnN0IGNoYXIgKmNtZF9saXN0OworCisJaWYgKGdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdCgiY29tcGxldGlvbi5jb21tYW5kcyIsICZjbWRfbGlzdCkpCisJCXJldHVybjsKKworCXN0cmluZ19saXN0X3NvcnQobGlzdCk7CisJc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXMobGlzdCwgMCk7CisKKwl3aGlsZSAoKmNtZF9saXN0KSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqcCA9IHN0cmNocm51bChjbWRfbGlzdCwgJyAnKTsKKworCQlzdHJidWZfYWRkKCZzYiwgY21kX2xpc3QsIHAgLSBjbWRfbGlzdCk7CisJCWlmIChzYi5idWZbMF0gPT0gJy0nKQorCQkJc3RyaW5nX2xpc3RfcmVtb3ZlKGxpc3QsIHNiLmJ1ZiArIDEsIDApOworCQllbHNlCisJCQlzdHJpbmdfbGlzdF9pbnNlcnQobGlzdCwgc2IuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJd2hpbGUgKCpwID09ICcgJykKKwkJCXArKzsKKwkJY21kX2xpc3QgPSBwOworCX0KK30KKwordm9pZCBsaXN0X2NvbW1vbl9ndWlkZXNfaGVscCh2b2lkKQoreworCXN0cnVjdCBjYXRlZ29yeV9kZXNjcmlwdGlvbiBjYXRkZXNjW10gPSB7CisJCXsgQ0FUX2d1aWRlLCBOXygiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZToiKSB9LAorCQl7IDAsIE5VTEwgfQorCX07CisJcHJpbnRfY21kX2J5X2NhdGVnb3J5KGNhdGRlc2MsIE5VTEwpOworCXB1dGNoYXIoJ1xuJyk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2FsaWFzKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpsaXN0ID0gZGF0YTsKKworCWlmIChza2lwX3ByZWZpeCh2YXIsICJhbGlhcy4iLCAmdmFyKSkKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHZhciktPnV0aWwgPSB4c3RyZHVwKHZhbHVlKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGxpc3RfYWxsX2NtZHNfaGVscCh2b2lkKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBvdGhlcnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYWxpYXNfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBjbWRuYW1lX2hlbHAgKmFsaWFzZXM7CisJaW50IGksIGxvbmdlc3Q7CisKKwlwcmludGZfbG4oXygiU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIHRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIikpOworCXByaW50X2NtZF9ieV9jYXRlZ29yeShtYWluX2NhdGVnb3JpZXMsICZsb25nZXN0KTsKKworCWxpc3RfYWxsX290aGVyX2NtZHMoJm90aGVycyk7CisJaWYgKG90aGVycy5ucikKKwkJcHJpbnRmKCJcbiVzXG4iLCBfKCJFeHRlcm5hbCBjb21tYW5kcyIpKTsKKwlmb3IgKGkgPSAwOyBpIDwgb3RoZXJzLm5yOyBpKyspCisJCXByaW50ZigiICAgJXNcbiIsIG90aGVycy5pdGVtc1tpXS5zdHJpbmcpOworCXN0cmluZ19saXN0X2NsZWFyKCZvdGhlcnMsIDApOworCisJZ2l0X2NvbmZpZyhnZXRfYWxpYXMsICZhbGlhc19saXN0KTsKKwlzdHJpbmdfbGlzdF9zb3J0KCZhbGlhc19saXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBhbGlhc19saXN0Lm5yOyBpKyspIHsKKwkJc2l6ZV90IGxlbiA9IHN0cmxlbihhbGlhc19saXN0Lml0ZW1zW2ldLnN0cmluZyk7CisJCWlmIChsb25nZXN0IDwgbGVuKQorCQkJbG9uZ2VzdCA9IGxlbjsKKwl9CisKKwlpZiAoYWxpYXNfbGlzdC5ucikgeworCQlwcmludGYoIlxuJXNcbiIsIF8oIkNvbW1hbmQgYWxpYXNlcyIpKTsKKwkJQUxMT0NfQVJSQVkoYWxpYXNlcywgYWxpYXNfbGlzdC5uciArIDEpOworCQlmb3IgKGkgPSAwOyBpIDwgYWxpYXNfbGlzdC5ucjsgaSsrKSB7CisJCQlhbGlhc2VzW2ldLm5hbWUgPSBhbGlhc19saXN0Lml0ZW1zW2ldLnN0cmluZzsKKwkJCWFsaWFzZXNbaV0uaGVscCA9IGFsaWFzX2xpc3QuaXRlbXNbaV0udXRpbDsKKwkJCWFsaWFzZXNbaV0uY2F0ZWdvcnkgPSAxOworCQl9CisJCWFsaWFzZXNbYWxpYXNfbGlzdC5ucl0ubmFtZSA9IE5VTEw7CisJCXByaW50X2NvbW1hbmRfbGlzdChhbGlhc2VzLCAxLCBsb25nZXN0KTsKKwkJZnJlZShhbGlhc2VzKTsKKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJmFsaWFzX2xpc3QsIDEpOworfQorCitpbnQgaXNfaW5fY21kbGlzdChzdHJ1Y3QgY21kbmFtZXMgKmMsIGNvbnN0IGNoYXIgKnMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGMtPmNudDsgaSsrKQorCQlpZiAoIXN0cmNtcChzLCBjLT5uYW1lc1tpXS0+bmFtZSkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdXRvY29ycmVjdDsKK3N0YXRpYyBzdHJ1Y3QgY21kbmFtZXMgYWxpYXNlczsKKworc3RhdGljIGludCBnaXRfdW5rbm93bl9jbWRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWNvbnN0IGNoYXIgKnA7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJoZWxwLmF1dG9jb3JyZWN0IikpCisJCWF1dG9jb3JyZWN0ID0gZ2l0X2NvbmZpZ19pbnQodmFyLHZhbHVlKTsKKwkvKiBBbHNvIHVzZSBhbGlhc2VzIGZvciBjb21tYW5kIGxvb2t1cCAqLworCWlmIChza2lwX3ByZWZpeCh2YXIsICJhbGlhcy4iLCAmcCkpCisJCWFkZF9jbWRuYW1lKCZhbGlhc2VzLCBwLCBzdHJsZW4ocCkpOworCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBpbnQgbGV2ZW5zaHRlaW5fY29tcGFyZShjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCit7CisJY29uc3Qgc3RydWN0IGNtZG5hbWUgKmNvbnN0ICpjMSA9IHAxLCAqY29uc3QgKmMyID0gcDI7CisJY29uc3QgY2hhciAqczEgPSAoKmMxKS0+bmFtZSwgKnMyID0gKCpjMiktPm5hbWU7CisJaW50IGwxID0gKCpjMSktPmxlbjsKKwlpbnQgbDIgPSAoKmMyKS0+bGVuOworCXJldHVybiBsMSAhPSBsMiA/IGwxIC0gbDIgOiBzdHJjbXAoczEsIHMyKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2NtZF9saXN0KHN0cnVjdCBjbWRuYW1lcyAqY21kcywgc3RydWN0IGNtZG5hbWVzICpvbGQpCit7CisJaW50IGk7CisJQUxMT0NfR1JPVyhjbWRzLT5uYW1lcywgY21kcy0+Y250ICsgb2xkLT5jbnQsIGNtZHMtPmFsbG9jKTsKKworCWZvciAoaSA9IDA7IGkgPCBvbGQtPmNudDsgaSsrKQorCQljbWRzLT5uYW1lc1tjbWRzLT5jbnQrK10gPSBvbGQtPm5hbWVzW2ldOworCUZSRUVfQU5EX05VTEwob2xkLT5uYW1lcyk7CisJb2xkLT5jbnQgPSAwOworfQorCisvKiBBbiBlbXBpcmljYWxseSBkZXJpdmVkIG1hZ2ljIG51bWJlciAqLworI2RlZmluZSBTSU1JTEFSSVRZX0ZMT09SIDcKKyNkZWZpbmUgU0lNSUxBUl9FTk9VR0goeCkgKCh4KSA8IFNJTUlMQVJJVFlfRkxPT1IpCisKK3N0YXRpYyBjb25zdCBjaGFyIGJhZF9pbnRlcnByZXRlcl9hZHZpY2VbXSA9CisJTl8oIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKwkiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIpOworCitjb25zdCBjaGFyICpoZWxwX3Vua25vd25fY21kKGNvbnN0IGNoYXIgKmNtZCkKK3sKKwlpbnQgaSwgbiwgYmVzdF9zaW1pbGFyaXR5ID0gMDsKKwlzdHJ1Y3QgY21kbmFtZXMgbWFpbl9jbWRzLCBvdGhlcl9jbWRzOworCXN0cnVjdCBjbWRuYW1lX2hlbHAgKmNvbW1vbl9jbWRzOworCisJbWVtc2V0KCZtYWluX2NtZHMsIDAsIHNpemVvZihtYWluX2NtZHMpKTsKKwltZW1zZXQoJm90aGVyX2NtZHMsIDAsIHNpemVvZihvdGhlcl9jbWRzKSk7CisJbWVtc2V0KCZhbGlhc2VzLCAwLCBzaXplb2YoYWxpYXNlcykpOworCisJcmVhZF9lYXJseV9jb25maWcoZ2l0X3Vua25vd25fY21kX2NvbmZpZywgTlVMTCk7CisKKwlsb2FkX2NvbW1hbmRfbGlzdCgiZ2l0LSIsICZtYWluX2NtZHMsICZvdGhlcl9jbWRzKTsKKworCWFkZF9jbWRfbGlzdCgmbWFpbl9jbWRzLCAmYWxpYXNlcyk7CisJYWRkX2NtZF9saXN0KCZtYWluX2NtZHMsICZvdGhlcl9jbWRzKTsKKwlRU09SVChtYWluX2NtZHMubmFtZXMsIG1haW5fY21kcy5jbnQsIGNtZG5hbWVfY29tcGFyZSk7CisJdW5pcSgmbWFpbl9jbWRzKTsKKworCWV4dHJhY3RfY21kcygmY29tbW9uX2NtZHMsIGNvbW1vbl9tYXNrKTsKKworCS8qIFRoaXMgYWJ1c2VzIGNtZG5hbWUtPmxlbiBmb3IgbGV2ZW5zaHRlaW4gZGlzdGFuY2UgKi8KKwlmb3IgKGkgPSAwLCBuID0gMDsgaSA8IG1haW5fY21kcy5jbnQ7IGkrKykgeworCQlpbnQgY21wID0gMDsgLyogYXZvaWQgY29tcGlsZXIgc3R1cGlkaXR5ICovCisJCWNvbnN0IGNoYXIgKmNhbmRpZGF0ZSA9IG1haW5fY21kcy5uYW1lc1tpXS0+bmFtZTsKKworCQkvKgorCQkgKiBBbiBleGFjdCBtYXRjaCBtZWFucyB3ZSBoYXZlIHRoZSBjb21tYW5kLCBidXQKKwkJICogZm9yIHNvbWUgcmVhc29uIGV4ZWMnaW5nIGl0IGdhdmUgdXMgRU5PRU5UOyBwcm9iYWJseQorCQkgKiBpdCdzIGEgYmFkIGludGVycHJldGVyIGluIHRoZSAjISBsaW5lLgorCQkgKi8KKwkJaWYgKCFzdHJjbXAoY2FuZGlkYXRlLCBjbWQpKQorCQkJZGllKF8oYmFkX2ludGVycHJldGVyX2FkdmljZSksIGNtZCwgY21kKTsKKworCQkvKiBEb2VzIHRoZSBjYW5kaWRhdGUgYXBwZWFyIGluIGNvbW1vbl9jbWRzIGxpc3Q/ICovCisJCXdoaWxlIChjb21tb25fY21kc1tuXS5uYW1lICYmCisJCSAgICAgICAoY21wID0gc3RyY21wKGNvbW1vbl9jbWRzW25dLm5hbWUsIGNhbmRpZGF0ZSkpIDwgMCkKKwkJCW4rKzsKKwkJaWYgKGNvbW1vbl9jbWRzW25dLm5hbWUgJiYgIWNtcCkgeworCQkJLyogWWVzLCB0aGlzIGlzIG9uZSBvZiB0aGUgY29tbW9uIGNvbW1hbmRzICovCisJCQluKys7IC8qIHVzZSB0aGUgZW50cnkgZnJvbSBjb21tb25fY21kc1tdICovCisJCQlpZiAoc3RhcnRzX3dpdGgoY2FuZGlkYXRlLCBjbWQpKSB7CisJCQkJLyogR2l2ZSBwcmVmaXggbWF0Y2ggYSB2ZXJ5IGdvb2Qgc2NvcmUgKi8KKwkJCQltYWluX2NtZHMubmFtZXNbaV0tPmxlbiA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQltYWluX2NtZHMubmFtZXNbaV0tPmxlbiA9CisJCQlsZXZlbnNodGVpbihjbWQsIGNhbmRpZGF0ZSwgMCwgMiwgMSwgMykgKyAxOworCX0KKwlGUkVFX0FORF9OVUxMKGNvbW1vbl9jbWRzKTsKKworCVFTT1JUKG1haW5fY21kcy5uYW1lcywgbWFpbl9jbWRzLmNudCwgbGV2ZW5zaHRlaW5fY29tcGFyZSk7CisKKwlpZiAoIW1haW5fY21kcy5jbnQpCisJCWRpZShfKCJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIpKTsKKworCS8qIHNraXAgYW5kIGNvdW50IHByZWZpeCBtYXRjaGVzICovCisJZm9yIChuID0gMDsgbiA8IG1haW5fY21kcy5jbnQgJiYgIW1haW5fY21kcy5uYW1lc1tuXS0+bGVuOyBuKyspCisJCTsgLyogc3RpbGwgY291bnRpbmcgKi8KKworCWlmIChtYWluX2NtZHMuY250IDw9IG4pIHsKKwkJLyogcHJlZml4IG1hdGNoZXMgd2l0aCBldmVyeXRoaW5nPyB0aGF0IGlzIHRvbyBhbWJpZ3VvdXMgKi8KKwkJYmVzdF9zaW1pbGFyaXR5ID0gU0lNSUxBUklUWV9GTE9PUiArIDE7CisJfSBlbHNlIHsKKwkJLyogY291bnQgYWxsIHRoZSBtb3N0IHNpbWlsYXIgb25lcyAqLworCQlmb3IgKGJlc3Rfc2ltaWxhcml0eSA9IG1haW5fY21kcy5uYW1lc1tuKytdLT5sZW47CisJCSAgICAgKG4gPCBtYWluX2NtZHMuY250ICYmCisJCSAgICAgIGJlc3Rfc2ltaWxhcml0eSA9PSBtYWluX2NtZHMubmFtZXNbbl0tPmxlbik7CisJCSAgICAgbisrKQorCQkJOyAvKiBzdGlsbCBjb3VudGluZyAqLworCX0KKwlpZiAoYXV0b2NvcnJlY3QgJiYgbiA9PSAxICYmIFNJTUlMQVJfRU5PVUdIKGJlc3Rfc2ltaWxhcml0eSkpIHsKKwkJY29uc3QgY2hhciAqYXNzdW1lZCA9IG1haW5fY21kcy5uYW1lc1swXS0+bmFtZTsKKwkJbWFpbl9jbWRzLm5hbWVzWzBdID0gTlVMTDsKKwkJY2xlYW5fY21kbmFtZXMoJm1haW5fY21kcyk7CisJCWZwcmludGZfbG4oc3RkZXJyLAorCQkJICAgXygiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsICIKKwkJCSAgICAgIndoaWNoIGRvZXMgbm90IGV4aXN0LiIpLAorCQkJICAgY21kKTsKKwkJaWYgKGF1dG9jb3JyZWN0IDwgMCkKKwkJCWZwcmludGZfbG4oc3RkZXJyLAorCQkJCSAgIF8oIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCAiCisJCQkJICAgICAieW91IG1lYW50ICclcycuIiksCisJCQkJICAgYXNzdW1lZCk7CisJCWVsc2UgeworCQkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkJICAgXygiQ29udGludWluZyBpbiAlMC4xZiBzZWNvbmRzLCAiCisJCQkJICAgICAiYXNzdW1pbmcgdGhhdCB5b3UgbWVhbnQgJyVzJy4iKSwKKwkJCQkgICAoZmxvYXQpYXV0b2NvcnJlY3QvMTAuMCwgYXNzdW1lZCk7CisJCQlzbGVlcF9taWxsaXNlYyhhdXRvY29ycmVjdCAqIDEwMCk7CisJCX0KKwkJcmV0dXJuIGFzc3VtZWQ7CisJfQorCisJZnByaW50Zl9sbihzdGRlcnIsIF8oImdpdDogJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZC4gU2VlICdnaXQgLS1oZWxwJy4iKSwgY21kKTsKKworCWlmIChTSU1JTEFSX0VOT1VHSChiZXN0X3NpbWlsYXJpdHkpKSB7CisJCWZwcmludGZfbG4oc3RkZXJyLAorCQkJICAgUV8oIlxuVGhlIG1vc3Qgc2ltaWxhciBjb21tYW5kIGlzIiwKKwkJCSAgICAgICJcblRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZHMgYXJlIiwKKwkJCSAgIG4pKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJZnByaW50ZihzdGRlcnIsICJcdCVzXG4iLCBtYWluX2NtZHMubmFtZXNbaV0tPm5hbWUpOworCX0KKworCWV4aXQoMSk7Cit9CisKK3ZvaWQgZ2V0X3ZlcnNpb25faW5mbyhzdHJ1Y3Qgc3RyYnVmICpidWYsIGludCBzaG93X2J1aWxkX29wdGlvbnMpCit7CisJLyoKKwkgKiBUaGUgZm9ybWF0IG9mIHRoaXMgc3RyaW5nIHNob3VsZCBiZSBrZXB0IHN0YWJsZSBmb3IgY29tcGF0aWJpbGl0eQorCSAqIHdpdGggZXh0ZXJuYWwgcHJvamVjdHMgdGhhdCByZWx5IG9uIHRoZSBvdXRwdXQgb2YgImdpdCB2ZXJzaW9uIi4KKwkgKgorCSAqIEFsd2F5cyBzaG93IHRoZSB2ZXJzaW9uLCBldmVuIGlmIG90aGVyIG9wdGlvbnMgYXJlIGdpdmVuLgorCSAqLworCXN0cmJ1Zl9hZGRmKGJ1ZiwgImdpdCB2ZXJzaW9uICVzXG4iLCBnaXRfdmVyc2lvbl9zdHJpbmcpOworCisJaWYgKHNob3dfYnVpbGRfb3B0aW9ucykgeworCQlzdHJidWZfYWRkZihidWYsICJjcHU6ICVzXG4iLCBHSVRfSE9TVF9DUFUpOworCQlpZiAoZ2l0X2J1aWx0X2Zyb21fY29tbWl0X3N0cmluZ1swXSkKKwkJCXN0cmJ1Zl9hZGRmKGJ1ZiwgImJ1aWx0IGZyb20gY29tbWl0OiAlc1xuIiwKKwkJCSAgICAgICBnaXRfYnVpbHRfZnJvbV9jb21taXRfc3RyaW5nKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZHN0cihidWYsICJubyBjb21taXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYnVpbGRcbiIpOworCQlzdHJidWZfYWRkZihidWYsICJzaXplb2YtbG9uZzogJWRcbiIsIChpbnQpc2l6ZW9mKGxvbmcpKTsKKwkJc3RyYnVmX2FkZGYoYnVmLCAic2l6ZW9mLXNpemVfdDogJWRcbiIsIChpbnQpc2l6ZW9mKHNpemVfdCkpOworCQkvKiBORUVEU1dPUks6IGFsc28gc2F2ZSBhbmQgb3V0cHV0IEdJVC1CVUlMRF9PUFRJT05TPyAqLworCX0KK30KKworaW50IGNtZF92ZXJzaW9uKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGJ1aWxkX29wdGlvbnMgPSAwOworCWNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZVtdID0geworCQlOXygiZ2l0IHZlcnNpb24gWzxvcHRpb25zPl0iKSwKKwkJTlVMTAorCX07CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKDAsICJidWlsZC1vcHRpb25zIiwgJmJ1aWxkX29wdGlvbnMsCisJCQkgImFsc28gcHJpbnQgYnVpbGQgb3B0aW9ucyIpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCB1c2FnZSwgMCk7CisKKwlnZXRfdmVyc2lvbl9pbmZvKCZidWYsIGJ1aWxkX29wdGlvbnMpOworCXByaW50ZigiJXMiLCBidWYuYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzaW1pbGFyX3JlZl9jYiB7CisJY29uc3QgY2hhciAqYmFzZV9yZWY7CisJc3RydWN0IHN0cmluZ19saXN0ICpzaW1pbGFyX3JlZnM7Cit9OworCitzdGF0aWMgaW50IGFwcGVuZF9zaW1pbGFyX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHNpbWlsYXJfcmVmX2NiICpjYiA9IChzdHJ1Y3Qgc2ltaWxhcl9yZWZfY2IgKikoY2JfZGF0YSk7CisJY2hhciAqYnJhbmNoID0gc3RycmNocihyZWZuYW1lLCAnLycpICsgMTsKKworCS8qIEEgcmVtb3RlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIGlzIGRlZW1lZCBzaW1pbGFyICovCisJaWYgKHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL3JlbW90ZXMvIikgJiYKKwkgICAgIXN0cmNtcChicmFuY2gsIGNiLT5iYXNlX3JlZikpCisJCXN0cmluZ19saXN0X2FwcGVuZF9ub2R1cChjYi0+c2ltaWxhcl9yZWZzLAorCQkJCQkgc2hvcnRlbl91bmFtYmlndW91c19yZWYocmVmbmFtZSwgMSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGd1ZXNzX3JlZnMoY29uc3QgY2hhciAqcmVmKQoreworCXN0cnVjdCBzaW1pbGFyX3JlZl9jYiByZWZfY2I7CisJc3RydWN0IHN0cmluZ19saXN0IHNpbWlsYXJfcmVmcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJcmVmX2NiLmJhc2VfcmVmID0gcmVmOworCXJlZl9jYi5zaW1pbGFyX3JlZnMgPSAmc2ltaWxhcl9yZWZzOworCWZvcl9lYWNoX3JlZihhcHBlbmRfc2ltaWxhcl9yZWYsICZyZWZfY2IpOworCXJldHVybiBzaW1pbGFyX3JlZnM7Cit9CisKK05PUkVUVVJOIHZvaWQgaGVscF91bmtub3duX3JlZihjb25zdCBjaGFyICpyZWYsIGNvbnN0IGNoYXIgKmNtZCwKKwkJCSAgICAgICBjb25zdCBjaGFyICplcnJvcikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3VnZ2VzdGVkX3JlZnMgPSBndWVzc19yZWZzKHJlZik7CisKKwlmcHJpbnRmX2xuKHN0ZGVyciwgXygiJXM6ICVzIC0gJXMiKSwgY21kLCByZWYsIGVycm9yKTsKKworCWlmIChzdWdnZXN0ZWRfcmVmcy5uciA+IDApIHsKKwkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkgICBRXygiXG5EaWQgeW91IG1lYW4gdGhpcz8iLAorCQkJICAgICAgIlxuRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iLAorCQkJICAgICAgc3VnZ2VzdGVkX3JlZnMubnIpKTsKKwkJZm9yIChpID0gMDsgaSA8IHN1Z2dlc3RlZF9yZWZzLm5yOyBpKyspCisJCQlmcHJpbnRmKHN0ZGVyciwgIlx0JXNcbiIsIHN1Z2dlc3RlZF9yZWZzLml0ZW1zW2ldLnN0cmluZyk7CisJfQorCisJc3RyaW5nX2xpc3RfY2xlYXIoJnN1Z2dlc3RlZF9yZWZzLCAwKTsKKwlleGl0KDEpOworfQpkaWZmIC0tZ2l0IGEvaGVscC5oIGIvaGVscC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMDUyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9oZWxwLmgKQEAgLTAsMCArMSw4OSBAQAorI2lmbmRlZiBIRUxQX0gKKyNkZWZpbmUgSEVMUF9ICisKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitzdHJ1Y3QgY21kbmFtZXMgeworCWludCBhbGxvYzsKKwlpbnQgY250OworCXN0cnVjdCBjbWRuYW1lIHsKKwkJc2l6ZV90IGxlbjsgLyogYWxzbyB1c2VkIGZvciBzaW1pbGFyaXR5IGluZGV4IGluIGhlbHAuYyAqLworCQljaGFyIG5hbWVbRkxFWF9BUlJBWV07CisJfSAqKm5hbWVzOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIG1wdXRfY2hhcihjaGFyIGMsIHVuc2lnbmVkIGludCBudW0pCit7CisJd2hpbGUgKG51bS0tKQorCQlwdXRjaGFyKGMpOworfQorCit2b2lkIGxpc3RfY29tbW9uX2NtZHNfaGVscCh2b2lkKTsKK3ZvaWQgbGlzdF9hbGxfY21kc19oZWxwKHZvaWQpOwordm9pZCBsaXN0X2NvbW1vbl9ndWlkZXNfaGVscCh2b2lkKTsKKwordm9pZCBsaXN0X2FsbF9tYWluX2NtZHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KTsKK3ZvaWQgbGlzdF9hbGxfb3RoZXJfY21kcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpOwordm9pZCBsaXN0X2NtZHNfYnlfY2F0ZWdvcnkoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJICAgY29uc3QgY2hhciAqY2F0ZWdvcnkpOwordm9pZCBsaXN0X2NtZHNfYnlfY29uZmlnKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCk7Citjb25zdCBjaGFyICpoZWxwX3Vua25vd25fY21kKGNvbnN0IGNoYXIgKmNtZCk7Cit2b2lkIGxvYWRfY29tbWFuZF9saXN0KGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICAgICAgIHN0cnVjdCBjbWRuYW1lcyAqbWFpbl9jbWRzLAorCQkgICAgICAgc3RydWN0IGNtZG5hbWVzICpvdGhlcl9jbWRzKTsKK3ZvaWQgYWRkX2NtZG5hbWUoc3RydWN0IGNtZG5hbWVzICpjbWRzLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKKy8qIEhlcmUgd2UgcmVxdWlyZSB0aGF0IGV4Y2x1ZGVzIGlzIGEgc29ydGVkIGxpc3QuICovCit2b2lkIGV4Y2x1ZGVfY21kcyhzdHJ1Y3QgY21kbmFtZXMgKmNtZHMsIHN0cnVjdCBjbWRuYW1lcyAqZXhjbHVkZXMpOworaW50IGlzX2luX2NtZGxpc3Qoc3RydWN0IGNtZG5hbWVzICpjbWRzLCBjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgbGlzdF9jb21tYW5kcyh1bnNpZ25lZCBpbnQgY29sb3B0cywgc3RydWN0IGNtZG5hbWVzICptYWluX2NtZHMsIHN0cnVjdCBjbWRuYW1lcyAqb3RoZXJfY21kcyk7Cit2b2lkIGdldF92ZXJzaW9uX2luZm8oc3RydWN0IHN0cmJ1ZiAqYnVmLCBpbnQgc2hvd19idWlsZF9vcHRpb25zKTsKKworLyoKKyAqIGNhbGwgdGhpcyB0byBkaWUoKSwgd2hlbiBpdCBpcyBzdXNwZWN0ZWQgdGhhdCB0aGUgdXNlciBtaXN0eXBlZCBhCisgKiByZWYgdG8gdGhlIGNvbW1hbmQsIHRvIGdpdmUgc3VnZ2VzdGVkICJjb3JyZWN0IiByZWZzLgorICovCitOT1JFVFVSTiB2b2lkIGhlbHBfdW5rbm93bl9yZWYoY29uc3QgY2hhciAqcmVmLCBjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKmVycm9yKTsKKworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfY29uZmlnX2l0ZW0oc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJCSAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJICAgIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlzdHJpbmdfbGlzdF9hcHBlbmRfbm9kdXAobGlzdCwgeHN0cmZtdCgiJXMuJXMiLCBwcmVmaXgsIHN0cikpOworfQorCisjZGVmaW5lIGRlZmluZV9saXN0X2NvbmZpZ19hcnJheShhcnJheSkJCQkJCVwKK3ZvaWQgbGlzdF9jb25maWdfIyNhcnJheShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnByZWZpeCkJXAorewkJCQkJCQkJCVwKKwlpbnQgaTsJCQkJCQkJCVwKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcnJheSk7IGkrKykJCQkJXAorCQlpZiAoYXJyYXlbaV0pCQkJCQkJXAorCQkJbGlzdF9jb25maWdfaXRlbShsaXN0LCBwcmVmaXgsIGFycmF5W2ldKTsJXAorfQkJCQkJCQkJCVwKK3N0cnVjdCBzdHJpbmdfbGlzdAorCisjZGVmaW5lIGRlZmluZV9saXN0X2NvbmZpZ19hcnJheV9leHRyYShhcnJheSwgdmFsdWVzKQkJCVwKK3ZvaWQgbGlzdF9jb25maWdfIyNhcnJheShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnByZWZpeCkJXAorewkJCQkJCQkJCVwKKwlpbnQgaTsJCQkJCQkJCVwKKwlzdGF0aWMgY29uc3QgY2hhciAqZXh0cmFbXSA9IHZhbHVlczsJCQkJXAorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGV4dHJhKTsgaSsrKQkJCQlcCisJCWxpc3RfY29uZmlnX2l0ZW0obGlzdCwgcHJlZml4LCBleHRyYVtpXSk7CQlcCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXJyYXkpOyBpKyspCQkJCVwKKwkJaWYgKGFycmF5W2ldKQkJCQkJCVwKKwkJCWxpc3RfY29uZmlnX2l0ZW0obGlzdCwgcHJlZml4LCBhcnJheVtpXSk7CVwKK30JCQkJCQkJCQlcCitzdHJ1Y3Qgc3RyaW5nX2xpc3QKKworLyogVGhlc2UgYXJlIGFjdHVhbGx5IHNjYXR0ZXJlZCBvdmVyIG1hbnkgQyBmaWxlcyAqLwordm9pZCBsaXN0X2NvbmZpZ19hZHZpY2VzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqcHJlZml4KTsKK3ZvaWQgbGlzdF9jb25maWdfY29sb3JfYnJhbmNoX3Nsb3RzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqcHJlZml4KTsKK3ZvaWQgbGlzdF9jb25maWdfY29sb3JfZGVjb3JhdGVfc2xvdHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpwcmVmaXgpOwordm9pZCBsaXN0X2NvbmZpZ19jb2xvcl9kaWZmX3Nsb3RzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqcHJlZml4KTsKK3ZvaWQgbGlzdF9jb25maWdfY29sb3JfZ3JlcF9zbG90cyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnByZWZpeCk7Cit2b2lkIGxpc3RfY29uZmlnX2NvbG9yX2ludGVyYWN0aXZlX3Nsb3RzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqcHJlZml4KTsKK3ZvaWQgbGlzdF9jb25maWdfY29sb3Jfc3RhdHVzX3Nsb3RzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqcHJlZml4KTsKK3ZvaWQgbGlzdF9jb25maWdfY29sb3Jfc2lkZWJhbmRfc2xvdHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpwcmVmaXgpOwordm9pZCBsaXN0X2NvbmZpZ19mc2NrX21zZ19pZHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpwcmVmaXgpOworCisjZW5kaWYgLyogSEVMUF9IICovCmRpZmYgLS1naXQgYS9oZXguYyBiL2hleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNTFlNjQKLS0tIC9kZXYvbnVsbAorKysgYi9oZXguYwpAQCAtMCwwICsxLDE1NSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK2NvbnN0IHNpZ25lZCBjaGFyIGhleHZhbF90YWJsZVsyNTZdID0geworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAwMC0wNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAwOC0wZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAxMC0xNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAxOC0xZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAyMC0yNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAyOC0yZiAqLworCSAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsCQkvKiAzMC0zNyAqLworCSAgOCwgIDksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAzOC0zZiAqLworCSAtMSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgLTEsCQkvKiA0MC00NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA0OC00ZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA1MC01NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA1OC01ZiAqLworCSAtMSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgLTEsCQkvKiA2MC02NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA2OC02NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA3MC03NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA3OC03ZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA4MC04NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA4OC04ZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA5MC05NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA5OC05ZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBhMC1hNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBhOC1hZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBiMC1iNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBiOC1iZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBjMC1jNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBjOC1jZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBkMC1kNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBkOC1kZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBlMC1lNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBlOC1lZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBmMC1mNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBmOC1mZiAqLworfTsKKworaW50IGhleF90b19ieXRlcyh1bnNpZ25lZCBjaGFyICpiaW5hcnksIGNvbnN0IGNoYXIgKmhleCwgc2l6ZV90IGxlbikKK3sKKwlmb3IgKDsgbGVuOyBsZW4tLSwgaGV4ICs9IDIpIHsKKwkJdW5zaWduZWQgaW50IHZhbCA9IChoZXh2YWwoaGV4WzBdKSA8PCA0KSB8IGhleHZhbChoZXhbMV0pOworCisJCWlmICh2YWwgJiB+MHhmZikKKwkJCXJldHVybiAtMTsKKwkJKmJpbmFyeSsrID0gdmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfaGFzaF9oZXhfYWxnb3AoY29uc3QgY2hhciAqaGV4LCB1bnNpZ25lZCBjaGFyICpoYXNoLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKmFsZ29wKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBhbGdvcC0+cmF3c3o7IGkrKykgeworCQlpbnQgdmFsID0gaGV4MmNocihoZXgpOworCQlpZiAodmFsIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJKmhhc2grKyA9IHZhbDsKKwkJaGV4ICs9IDI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgZ2V0X3NoYTFfaGV4KGNvbnN0IGNoYXIgKmhleCwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gZ2V0X2hhc2hfaGV4X2FsZ29wKGhleCwgc2hhMSwgdGhlX2hhc2hfYWxnbyk7Cit9CisKK2ludCBnZXRfb2lkX2hleF9hbGdvcChjb25zdCBjaGFyICpoZXgsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKmFsZ29wKQoreworCXJldHVybiBnZXRfaGFzaF9oZXhfYWxnb3AoaGV4LCBvaWQtPmhhc2gsIGFsZ29wKTsKK30KKworLyoKKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIGhhc2ggYWxnb3JpdGhtcyBiZWluZyBpbiBvcmRlciBmcm9tIHNob3J0ZXN0CisgKiBsZW5ndGggdG8gbG9uZ2VzdCBsZW5ndGguCisgKi8KK2ludCBnZXRfb2lkX2hleF9hbnkoY29uc3QgY2hhciAqaGV4LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gR0lUX0hBU0hfTkFMR09TIC0gMTsgaSA+IDA7IGktLSkgeworCQlpZiAoIWdldF9oYXNoX2hleF9hbGdvcChoZXgsIG9pZC0+aGFzaCwgJmhhc2hfYWxnb3NbaV0pKQorCQkJcmV0dXJuIGk7CisJfQorCXJldHVybiBHSVRfSEFTSF9VTktOT1dOOworfQorCitpbnQgZ2V0X29pZF9oZXgoY29uc3QgY2hhciAqaGV4LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJcmV0dXJuIGdldF9vaWRfaGV4X2FsZ29wKGhleCwgb2lkLCB0aGVfaGFzaF9hbGdvKTsKK30KKworaW50IHBhcnNlX29pZF9oZXhfYWxnb3AoY29uc3QgY2hhciAqaGV4LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQljb25zdCBjaGFyICoqZW5kLAorCQkJY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKmFsZ29wKQoreworCWludCByZXQgPSBnZXRfaGFzaF9oZXhfYWxnb3AoaGV4LCBvaWQtPmhhc2gsIGFsZ29wKTsKKwlpZiAoIXJldCkKKwkJKmVuZCA9IGhleCArIGFsZ29wLT5oZXhzejsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcGFyc2Vfb2lkX2hleF9hbnkoY29uc3QgY2hhciAqaGV4LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKiplbmQpCit7CisJaW50IHJldCA9IGdldF9vaWRfaGV4X2FueShoZXgsIG9pZCk7CisJaWYgKHJldCkKKwkJKmVuZCA9IGhleCArIGhhc2hfYWxnb3NbcmV0XS5oZXhzejsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcGFyc2Vfb2lkX2hleChjb25zdCBjaGFyICpoZXgsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqKmVuZCkKK3sKKwlyZXR1cm4gcGFyc2Vfb2lkX2hleF9hbGdvcChoZXgsIG9pZCwgZW5kLCB0aGVfaGFzaF9hbGdvKTsKK30KKworY2hhciAqaGFzaF90b19oZXhfYWxnb3BfcihjaGFyICpidWZmZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsCisJCQkgIGNvbnN0IHN0cnVjdCBnaXRfaGFzaF9hbGdvICphbGdvcCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBoZXhbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKwljaGFyICpidWYgPSBidWZmZXI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWxnb3AtPnJhd3N6OyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHZhbCA9ICpoYXNoKys7CisJCSpidWYrKyA9IGhleFt2YWwgPj4gNF07CisJCSpidWYrKyA9IGhleFt2YWwgJiAweGZdOworCX0KKwkqYnVmID0gJ1wwJzsKKworCXJldHVybiBidWZmZXI7Cit9CisKK2NoYXIgKm9pZF90b19oZXhfcihjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gaGFzaF90b19oZXhfYWxnb3BfcihidWZmZXIsIG9pZC0+aGFzaCwgdGhlX2hhc2hfYWxnbyk7Cit9CisKK2NoYXIgKmhhc2hfdG9faGV4X2FsZ29wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIGNvbnN0IHN0cnVjdCBnaXRfaGFzaF9hbGdvICphbGdvcCkKK3sKKwlzdGF0aWMgaW50IGJ1Zm5vOworCXN0YXRpYyBjaGFyIGhleGJ1ZmZlcls0XVtHSVRfTUFYX0hFWFNaICsgMV07CisJYnVmbm8gPSAoYnVmbm8gKyAxKSAlIEFSUkFZX1NJWkUoaGV4YnVmZmVyKTsKKwlyZXR1cm4gaGFzaF90b19oZXhfYWxnb3BfcihoZXhidWZmZXJbYnVmbm9dLCBoYXNoLCBhbGdvcCk7Cit9CisKK2NoYXIgKmhhc2hfdG9faGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gpCit7CisJcmV0dXJuIGhhc2hfdG9faGV4X2FsZ29wKGhhc2gsIHRoZV9oYXNoX2FsZ28pOworfQorCitjaGFyICpvaWRfdG9faGV4KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gaGFzaF90b19oZXhfYWxnb3Aob2lkLT5oYXNoLCB0aGVfaGFzaF9hbGdvKTsKK30KZGlmZiAtLWdpdCBhL2h0dHAtYmFja2VuZC5jIGIvaHR0cC1iYWNrZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzMTQ0YgotLS0gL2Rldi9udWxsCisrKyBiL2h0dHAtYmFja2VuZC5jCkBAIC0wLDAgKzEsNzk1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgY29udGVudF90eXBlW10gPSAiQ29udGVudC1UeXBlIjsKK3N0YXRpYyBjb25zdCBjaGFyIGNvbnRlbnRfbGVuZ3RoW10gPSAiQ29udGVudC1MZW5ndGgiOworc3RhdGljIGNvbnN0IGNoYXIgbGFzdF9tb2RpZmllZFtdID0gIkxhc3QtTW9kaWZpZWQiOworc3RhdGljIGludCBnZXRhbnlmaWxlID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9yZXF1ZXN0X2J1ZmZlciA9IDEwICogMTAyNCAqIDEwMjQ7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnF1ZXJ5X3BhcmFtczsKKworc3RydWN0IHJwY19zZXJ2aWNlIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmNvbmZpZ19uYW1lOworCXVuc2lnbmVkIGJ1ZmZlcl9pbnB1dCA6IDE7CisJc2lnbmVkIGVuYWJsZWQgOiAyOworfTsKKworc3RhdGljIHN0cnVjdCBycGNfc2VydmljZSBycGNfc2VydmljZVtdID0geworCXsgInVwbG9hZC1wYWNrIiwgInVwbG9hZHBhY2siLCAxLCAxIH0sCisJeyAicmVjZWl2ZS1wYWNrIiwgInJlY2VpdmVwYWNrIiwgMCwgLTEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmdldF9wYXJhbWV0ZXJzKHZvaWQpCit7CisJaWYgKCFxdWVyeV9wYXJhbXMpIHsKKwkJY29uc3QgY2hhciAqcXVlcnkgPSBnZXRlbnYoIlFVRVJZX1NUUklORyIpOworCisJCXF1ZXJ5X3BhcmFtcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpxdWVyeV9wYXJhbXMpKTsKKwkJd2hpbGUgKHF1ZXJ5ICYmICpxdWVyeSkgeworCQkJY2hhciAqbmFtZSA9IHVybF9kZWNvZGVfcGFyYW1ldGVyX25hbWUoJnF1ZXJ5KTsKKwkJCWNoYXIgKnZhbHVlID0gdXJsX2RlY29kZV9wYXJhbWV0ZXJfdmFsdWUoJnF1ZXJ5KTsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppOworCisJCQlpID0gc3RyaW5nX2xpc3RfbG9va3VwKHF1ZXJ5X3BhcmFtcywgbmFtZSk7CisJCQlpZiAoIWkpCisJCQkJaSA9IHN0cmluZ19saXN0X2luc2VydChxdWVyeV9wYXJhbXMsIG5hbWUpOworCQkJZWxzZQorCQkJCWZyZWUoaS0+dXRpbCk7CisJCQlpLT51dGlsID0gdmFsdWU7CisJCX0KKwl9CisJcmV0dXJuIHF1ZXJ5X3BhcmFtczsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9wYXJhbWV0ZXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaTsKKwlpID0gc3RyaW5nX2xpc3RfbG9va3VwKGdldF9wYXJhbWV0ZXJzKCksIG5hbWUpOworCXJldHVybiBpID8gaS0+dXRpbCA6IE5VTEw7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCitzdGF0aWMgdm9pZCBmb3JtYXRfd3JpdGUoaW50IGZkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdGF0aWMgY2hhciBidWZmZXJbMTAyNF07CisKKwl2YV9saXN0IGFyZ3M7CisJdW5zaWduZWQgbjsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJbiA9IHZzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlpZiAobiA+PSBzaXplb2YoYnVmZmVyKSkKKwkJZGllKCJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiKTsKKworCXdyaXRlX29yX2RpZShmZCwgYnVmZmVyLCBuKTsKK30KKworc3RhdGljIHZvaWQgaHR0cF9zdGF0dXMoc3RydWN0IHN0cmJ1ZiAqaGRyLCB1bnNpZ25lZCBjb2RlLCBjb25zdCBjaGFyICptc2cpCit7CisJc3RyYnVmX2FkZGYoaGRyLCAiU3RhdHVzOiAldSAlc1xyXG4iLCBjb2RlLCBtc2cpOworfQorCitzdGF0aWMgdm9pZCBoZHJfc3RyKHN0cnVjdCBzdHJidWYgKmhkciwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJc3RyYnVmX2FkZGYoaGRyLCAiJXM6ICVzXHJcbiIsIG5hbWUsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgaGRyX2ludChzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNvbnN0IGNoYXIgKm5hbWUsIHVpbnRtYXhfdCB2YWx1ZSkKK3sKKwlzdHJidWZfYWRkZihoZHIsICIlczogJSIgUFJJdU1BWCAiXHJcbiIsIG5hbWUsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgaGRyX2RhdGUoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjb25zdCBjaGFyICpuYW1lLCB0aW1lc3RhbXBfdCB3aGVuKQoreworCWNvbnN0IGNoYXIgKnZhbHVlID0gc2hvd19kYXRlKHdoZW4sIDAsIERBVEVfTU9ERShSRkMyODIyKSk7CisJaGRyX3N0cihoZHIsIG5hbWUsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgaGRyX25vY2FjaGUoc3RydWN0IHN0cmJ1ZiAqaGRyKQoreworCWhkcl9zdHIoaGRyLCAiRXhwaXJlcyIsICJGcmksIDAxIEphbiAxOTgwIDAwOjAwOjAwIEdNVCIpOworCWhkcl9zdHIoaGRyLCAiUHJhZ21hIiwgIm5vLWNhY2hlIik7CisJaGRyX3N0cihoZHIsICJDYWNoZS1Db250cm9sIiwgIm5vLWNhY2hlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZSIpOworfQorCitzdGF0aWMgdm9pZCBoZHJfY2FjaGVfZm9yZXZlcihzdHJ1Y3Qgc3RyYnVmICpoZHIpCit7CisJdGltZXN0YW1wX3Qgbm93ID0gdGltZShOVUxMKTsKKwloZHJfZGF0ZShoZHIsICJEYXRlIiwgbm93KTsKKwloZHJfZGF0ZShoZHIsICJFeHBpcmVzIiwgbm93ICsgMzE1MzYwMDApOworCWhkcl9zdHIoaGRyLCAiQ2FjaGUtQ29udHJvbCIsICJwdWJsaWMsIG1heC1hZ2U9MzE1MzYwMDAiKTsKK30KKworc3RhdGljIHZvaWQgZW5kX2hlYWRlcnMoc3RydWN0IHN0cmJ1ZiAqaGRyKQoreworCXN0cmJ1Zl9hZGQoaGRyLCAiXHJcbiIsIDIpOworCXdyaXRlX29yX2RpZSgxLCBoZHItPmJ1ZiwgaGRyLT5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKGhkcik7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBub3RfZm91bmQoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKworCWh0dHBfc3RhdHVzKGhkciwgNDA0LCAiTm90IEZvdW5kIik7CisJaGRyX25vY2FjaGUoaGRyKTsKKwllbmRfaGVhZGVycyhoZHIpOworCisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCWlmIChlcnIgJiYgKmVycikKKwkJdmZwcmludGYoc3RkZXJyLCBlcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7CisJZXhpdCgwKTsKK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGZvcmJpZGRlbihzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCisJaHR0cF9zdGF0dXMoaGRyLCA0MDMsICJGb3JiaWRkZW4iKTsKKwloZHJfbm9jYWNoZShoZHIpOworCWVuZF9oZWFkZXJzKGhkcik7CisKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJaWYgKGVyciAmJiAqZXJyKQorCQl2ZnByaW50ZihzdGRlcnIsIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlleGl0KDApOworfQorCitzdGF0aWMgdm9pZCBzZWxlY3RfZ2V0YW55ZmlsZShzdHJ1Y3Qgc3RyYnVmICpoZHIpCit7CisJaWYgKCFnZXRhbnlmaWxlKQorCQlmb3JiaWRkZW4oaGRyLCAiVW5zdXBwb3J0ZWQgc2VydmljZTogZ2V0YW55ZmlsZSIpOworfQorCitzdGF0aWMgdm9pZCBzZW5kX3N0cmJ1ZihzdHJ1Y3Qgc3RyYnVmICpoZHIsCisJCQljb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJaGRyX2ludChoZHIsIGNvbnRlbnRfbGVuZ3RoLCBidWYtPmxlbik7CisJaGRyX3N0cihoZHIsIGNvbnRlbnRfdHlwZSwgdHlwZSk7CisJZW5kX2hlYWRlcnMoaGRyKTsKKwl3cml0ZV9vcl9kaWUoMSwgYnVmLT5idWYsIGJ1Zi0+bGVuKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9sb2NhbF9maWxlKHN0cnVjdCBzdHJidWYgKmhkciwgY29uc3QgY2hhciAqdGhlX3R5cGUsCisJCQkJY29uc3QgY2hhciAqbmFtZSkKK3sKKwljaGFyICpwID0gZ2l0X3BhdGhkdXAoIiVzIiwgbmFtZSk7CisJc2l6ZV90IGJ1Zl9hbGxvYyA9IDgxOTI7CisJY2hhciAqYnVmID0geG1hbGxvYyhidWZfYWxsb2MpOworCWludCBmZDsKKwlzdHJ1Y3Qgc3RhdCBzYjsKKworCWZkID0gb3BlbihwLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJbm90X2ZvdW5kKGhkciwgIkNhbm5vdCBvcGVuICclcyc6ICVzIiwgcCwgc3RyZXJyb3IoZXJybm8pKTsKKwlpZiAoZnN0YXQoZmQsICZzYikgPCAwKQorCQlkaWVfZXJybm8oIkNhbm5vdCBzdGF0ICclcyciLCBwKTsKKworCWhkcl9pbnQoaGRyLCBjb250ZW50X2xlbmd0aCwgc2Iuc3Rfc2l6ZSk7CisJaGRyX3N0cihoZHIsIGNvbnRlbnRfdHlwZSwgdGhlX3R5cGUpOworCWhkcl9kYXRlKGhkciwgbGFzdF9tb2RpZmllZCwgc2Iuc3RfbXRpbWUpOworCWVuZF9oZWFkZXJzKGhkcik7CisKKwlmb3IgKDs7KSB7CisJCXNzaXplX3QgbiA9IHhyZWFkKGZkLCBidWYsIGJ1Zl9hbGxvYyk7CisJCWlmIChuIDwgMCkKKwkJCWRpZV9lcnJubygiQ2Fubm90IHJlYWQgJyVzJyIsIHApOworCQlpZiAoIW4pCisJCQlicmVhazsKKwkJd3JpdGVfb3JfZGllKDEsIGJ1Ziwgbik7CisJfQorCWNsb3NlKGZkKTsKKwlmcmVlKGJ1Zik7CisJZnJlZShwKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3RleHRfZmlsZShzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNoYXIgKm5hbWUpCit7CisJc2VsZWN0X2dldGFueWZpbGUoaGRyKTsKKwloZHJfbm9jYWNoZShoZHIpOworCXNlbmRfbG9jYWxfZmlsZShoZHIsICJ0ZXh0L3BsYWluIiwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9sb29zZV9vYmplY3Qoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjaGFyICpuYW1lKQoreworCXNlbGVjdF9nZXRhbnlmaWxlKGhkcik7CisJaGRyX2NhY2hlX2ZvcmV2ZXIoaGRyKTsKKwlzZW5kX2xvY2FsX2ZpbGUoaGRyLCAiYXBwbGljYXRpb24veC1naXQtbG9vc2Utb2JqZWN0IiwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9wYWNrX2ZpbGUoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjaGFyICpuYW1lKQoreworCXNlbGVjdF9nZXRhbnlmaWxlKGhkcik7CisJaGRyX2NhY2hlX2ZvcmV2ZXIoaGRyKTsKKwlzZW5kX2xvY2FsX2ZpbGUoaGRyLCAiYXBwbGljYXRpb24veC1naXQtcGFja2VkLW9iamVjdHMiLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2lkeF9maWxlKHN0cnVjdCBzdHJidWYgKmhkciwgY2hhciAqbmFtZSkKK3sKKwlzZWxlY3RfZ2V0YW55ZmlsZShoZHIpOworCWhkcl9jYWNoZV9mb3JldmVyKGhkcik7CisJc2VuZF9sb2NhbF9maWxlKGhkciwgImFwcGxpY2F0aW9uL3gtZ2l0LXBhY2tlZC1vYmplY3RzLXRvYyIsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBodHRwX2NvbmZpZyh2b2lkKQoreworCWludCBpLCB2YWx1ZSA9IDA7CisJc3RydWN0IHN0cmJ1ZiB2YXIgPSBTVFJCVUZfSU5JVDsKKworCWdpdF9jb25maWdfZ2V0X2Jvb2woImh0dHAuZ2V0YW55ZmlsZSIsICZnZXRhbnlmaWxlKTsKKwlnaXRfY29uZmlnX2dldF91bG9uZygiaHR0cC5tYXhyZXF1ZXN0YnVmZmVyIiwgJm1heF9yZXF1ZXN0X2J1ZmZlcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShycGNfc2VydmljZSk7IGkrKykgeworCQlzdHJ1Y3QgcnBjX3NlcnZpY2UgKnN2YyA9ICZycGNfc2VydmljZVtpXTsKKwkJc3RyYnVmX2FkZGYoJnZhciwgImh0dHAuJXMiLCBzdmMtPmNvbmZpZ19uYW1lKTsKKwkJaWYgKCFnaXRfY29uZmlnX2dldF9ib29sKHZhci5idWYsICZ2YWx1ZSkpCisJCQlzdmMtPmVuYWJsZWQgPSB2YWx1ZTsKKwkJc3RyYnVmX3Jlc2V0KCZ2YXIpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZ2YXIpOworfQorCitzdGF0aWMgc3RydWN0IHJwY19zZXJ2aWNlICpzZWxlY3Rfc2VydmljZShzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY29uc3QgY2hhciAqc3ZjX25hbWU7CisJc3RydWN0IHJwY19zZXJ2aWNlICpzdmMgPSBOVUxMOworCWludCBpOworCisJaWYgKCFza2lwX3ByZWZpeChuYW1lLCAiZ2l0LSIsICZzdmNfbmFtZSkpCisJCWZvcmJpZGRlbihoZHIsICJVbnN1cHBvcnRlZCBzZXJ2aWNlOiAnJXMnIiwgbmFtZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShycGNfc2VydmljZSk7IGkrKykgeworCQlzdHJ1Y3QgcnBjX3NlcnZpY2UgKnMgPSAmcnBjX3NlcnZpY2VbaV07CisJCWlmICghc3RyY21wKHMtPm5hbWUsIHN2Y19uYW1lKSkgeworCQkJc3ZjID0gczsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFzdmMpCisJCWZvcmJpZGRlbihoZHIsICJVbnN1cHBvcnRlZCBzZXJ2aWNlOiAnJXMnIiwgbmFtZSk7CisKKwlpZiAoc3ZjLT5lbmFibGVkIDwgMCkgeworCQljb25zdCBjaGFyICp1c2VyID0gZ2V0ZW52KCJSRU1PVEVfVVNFUiIpOworCQlzdmMtPmVuYWJsZWQgPSAodXNlciAmJiAqdXNlcikgPyAxIDogMDsKKwl9CisJaWYgKCFzdmMtPmVuYWJsZWQpCisJCWZvcmJpZGRlbihoZHIsICJTZXJ2aWNlIG5vdCBlbmFibGVkOiAnJXMnIiwgc3ZjLT5uYW1lKTsKKwlyZXR1cm4gc3ZjOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV90b19jaGlsZChpbnQgb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNzaXplX3QgbGVuLCBjb25zdCBjaGFyICpwcm9nX25hbWUpCit7CisJaWYgKHdyaXRlX2luX2Z1bGwob3V0LCBidWYsIGxlbikgPCAwKQorCQlkaWUoInVuYWJsZSB0byB3cml0ZSB0byAnJXMnIiwgcHJvZ19uYW1lKTsKK30KKworLyoKKyAqIFRoaXMgaXMgYmFzaWNhbGx5IHN0cmJ1Zl9yZWFkKCksIGV4Y2VwdCB0aGF0IGlmIHdlCisgKiBoaXQgbWF4X3JlcXVlc3RfYnVmZmVyIHdlIGRpZSAod2UnZCByYXRoZXIgcmVqZWN0IGEKKyAqIG1hbGljaW91c2x5IGxhcmdlIHJlcXVlc3QgdGhhbiBjaGV3IHVwIGluZmluaXRlIG1lbW9yeSkuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHJlYWRfcmVxdWVzdF9lb2YoaW50IGZkLCB1bnNpZ25lZCBjaGFyICoqb3V0KQoreworCXNpemVfdCBsZW4gPSAwLCBhbGxvYyA9IDgxOTI7CisJdW5zaWduZWQgY2hhciAqYnVmID0geG1hbGxvYyhhbGxvYyk7CisKKwlpZiAobWF4X3JlcXVlc3RfYnVmZmVyIDwgYWxsb2MpCisJCW1heF9yZXF1ZXN0X2J1ZmZlciA9IGFsbG9jOworCisJd2hpbGUgKDEpIHsKKwkJc3NpemVfdCBjbnQ7CisKKwkJY250ID0gcmVhZF9pbl9mdWxsKGZkLCBidWYgKyBsZW4sIGFsbG9jIC0gbGVuKTsKKwkJaWYgKGNudCA8IDApIHsKKwkJCWZyZWUoYnVmKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCS8qIHBhcnRpYWwgcmVhZCBmcm9tIHJlYWRfaW5fZnVsbCBtZWFucyB3ZSBoaXQgRU9GICovCisJCWxlbiArPSBjbnQ7CisJCWlmIChsZW4gPCBhbGxvYykgeworCQkJKm91dCA9IGJ1ZjsKKwkJCXJldHVybiBsZW47CisJCX0KKworCQkvKiBvdGhlcndpc2UsIGdyb3cgYW5kIHRyeSBhZ2FpbiAoaWYgd2UgY2FuKSAqLworCQlpZiAoYWxsb2MgPT0gbWF4X3JlcXVlc3RfYnVmZmVyKQorCQkJZGllKCJyZXF1ZXN0IHdhcyBsYXJnZXIgdGhhbiBvdXIgbWF4aW11bSBzaXplICglbHUpOyIKKwkJCSAgICAiIHRyeSBzZXR0aW5nIEdJVF9IVFRQX01BWF9SRVFVRVNUX0JVRkZFUiIsCisJCQkgICAgbWF4X3JlcXVlc3RfYnVmZmVyKTsKKworCQlhbGxvYyA9IGFsbG9jX25yKGFsbG9jKTsKKwkJaWYgKGFsbG9jID4gbWF4X3JlcXVlc3RfYnVmZmVyKQorCQkJYWxsb2MgPSBtYXhfcmVxdWVzdF9idWZmZXI7CisJCVJFQUxMT0NfQVJSQVkoYnVmLCBhbGxvYyk7CisJfQorfQorCitzdGF0aWMgc3NpemVfdCByZWFkX3JlcXVlc3RfZml4ZWRfbGVuKGludCBmZCwgc3NpemVfdCByZXFfbGVuLCB1bnNpZ25lZCBjaGFyICoqb3V0KQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7CisJc3NpemVfdCBjbnQgPSAwOworCisJaWYgKG1heF9yZXF1ZXN0X2J1ZmZlciA8IHJlcV9sZW4pIHsKKwkJZGllKCJyZXF1ZXN0IHdhcyBsYXJnZXIgdGhhbiBvdXIgbWF4aW11bSBzaXplICglbHUpOiAiCisJCSAgICAiJSIgUFJJdU1BWCAiOyB0cnkgc2V0dGluZyBHSVRfSFRUUF9NQVhfUkVRVUVTVF9CVUZGRVIiLAorCQkgICAgbWF4X3JlcXVlc3RfYnVmZmVyLCAodWludG1heF90KXJlcV9sZW4pOworCX0KKworCWJ1ZiA9IHhtYWxsb2MocmVxX2xlbik7CisJY250ID0gcmVhZF9pbl9mdWxsKGZkLCBidWYsIHJlcV9sZW4pOworCWlmIChjbnQgPCAwKSB7CisJCWZyZWUoYnVmKTsKKwkJcmV0dXJuIC0xOworCX0KKwkqb3V0ID0gYnVmOworCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGdldF9jb250ZW50X2xlbmd0aCh2b2lkKQoreworCXNzaXplX3QgdmFsID0gLTE7CisJY29uc3QgY2hhciAqc3RyID0gZ2V0ZW52KCJDT05URU5UX0xFTkdUSCIpOworCisJaWYgKHN0ciAmJiAqc3RyICYmICFnaXRfcGFyc2Vfc3NpemVfdChzdHIsICZ2YWwpKQorCQlkaWUoImZhaWxlZCB0byBwYXJzZSBDT05URU5UX0xFTkdUSDogJXMiLCBzdHIpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfcmVxdWVzdChpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKipvdXQsIHNzaXplX3QgcmVxX2xlbikKK3sKKwlpZiAocmVxX2xlbiA8IDApCisJCXJldHVybiByZWFkX3JlcXVlc3RfZW9mKGZkLCBvdXQpOworCWVsc2UKKwkJcmV0dXJuIHJlYWRfcmVxdWVzdF9maXhlZF9sZW4oZmQsIHJlcV9sZW4sIG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIGluZmxhdGVfcmVxdWVzdChjb25zdCBjaGFyICpwcm9nX25hbWUsIGludCBvdXQsIGludCBidWZmZXJfaW5wdXQsIHNzaXplX3QgcmVxX2xlbikKK3sKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJdW5zaWduZWQgY2hhciAqZnVsbF9yZXF1ZXN0ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIGluX2J1Zls4MTkyXTsKKwl1bnNpZ25lZCBjaGFyIG91dF9idWZbODE5Ml07CisJdW5zaWduZWQgbG9uZyBjbnQgPSAwOworCWludCByZXFfbGVuX2RlZmluZWQgPSByZXFfbGVuID49IDA7CisJc2l6ZV90IHJlcV9yZW1haW5pbmdfbGVuID0gcmVxX2xlbjsKKworCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7CisJZ2l0X2luZmxhdGVfaW5pdF9nemlwX29ubHkoJnN0cmVhbSk7CisKKwl3aGlsZSAoMSkgeworCQlzc2l6ZV90IG47CisKKwkJaWYgKGJ1ZmZlcl9pbnB1dCkgeworCQkJaWYgKGZ1bGxfcmVxdWVzdCkKKwkJCQluID0gMDsgLyogbm90aGluZyBsZWZ0IHRvIHJlYWQgKi8KKwkJCWVsc2UKKwkJCQluID0gcmVhZF9yZXF1ZXN0KDAsICZmdWxsX3JlcXVlc3QsIHJlcV9sZW4pOworCQkJc3RyZWFtLm5leHRfaW4gPSBmdWxsX3JlcXVlc3Q7CisJCX0gZWxzZSB7CisJCQlzc2l6ZV90IGJ1ZmZlcl9sZW47CisJCQlpZiAocmVxX2xlbl9kZWZpbmVkICYmIHJlcV9yZW1haW5pbmdfbGVuIDw9IHNpemVvZihpbl9idWYpKQorCQkJCWJ1ZmZlcl9sZW4gPSByZXFfcmVtYWluaW5nX2xlbjsKKwkJCWVsc2UKKwkJCQlidWZmZXJfbGVuID0gc2l6ZW9mKGluX2J1Zik7CisJCQluID0geHJlYWQoMCwgaW5fYnVmLCBidWZmZXJfbGVuKTsKKwkJCXN0cmVhbS5uZXh0X2luID0gaW5fYnVmOworCQkJaWYgKHJlcV9sZW5fZGVmaW5lZCAmJiBuID4gMCkKKwkJCQlyZXFfcmVtYWluaW5nX2xlbiAtPSBuOworCQl9CisKKwkJaWYgKG4gPD0gMCkKKwkJCWRpZSgicmVxdWVzdCBlbmRlZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBnemlwIHN0cmVhbSIpOworCQlzdHJlYW0uYXZhaWxfaW4gPSBuOworCisJCXdoaWxlICgwIDwgc3RyZWFtLmF2YWlsX2luKSB7CisJCQlpbnQgcmV0OworCisJCQlzdHJlYW0ubmV4dF9vdXQgPSBvdXRfYnVmOworCQkJc3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihvdXRfYnVmKTsKKworCQkJcmV0ID0gZ2l0X2luZmxhdGUoJnN0cmVhbSwgWl9OT19GTFVTSCk7CisJCQlpZiAocmV0ICE9IFpfT0sgJiYgcmV0ICE9IFpfU1RSRUFNX0VORCkKKwkJCQlkaWUoInpsaWIgZXJyb3IgaW5mbGF0aW5nIHJlcXVlc3QsIHJlc3VsdCAlZCIsIHJldCk7CisKKwkJCW4gPSBzdHJlYW0udG90YWxfb3V0IC0gY250OworCQkJd3JpdGVfdG9fY2hpbGQob3V0LCBvdXRfYnVmLCBzdHJlYW0udG90YWxfb3V0IC0gY250LCBwcm9nX25hbWUpOworCQkJY250ID0gc3RyZWFtLnRvdGFsX291dDsKKworCQkJaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpCisJCQkJZ290byBkb25lOworCQl9CisJfQorCitkb25lOgorCWdpdF9pbmZsYXRlX2VuZCgmc3RyZWFtKTsKKwljbG9zZShvdXQpOworCWZyZWUoZnVsbF9yZXF1ZXN0KTsKK30KKworc3RhdGljIHZvaWQgY29weV9yZXF1ZXN0KGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgaW50IG91dCwgc3NpemVfdCByZXFfbGVuKQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwlzc2l6ZV90IG4gPSByZWFkX3JlcXVlc3QoMCwgJmJ1ZiwgcmVxX2xlbik7CisJaWYgKG4gPCAwKQorCQlkaWVfZXJybm8oImVycm9yIHJlYWRpbmcgcmVxdWVzdCBib2R5Iik7CisJd3JpdGVfdG9fY2hpbGQob3V0LCBidWYsIG4sIHByb2dfbmFtZSk7CisJY2xvc2Uob3V0KTsKKwlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHBpcGVfZml4ZWRfbGVuZ3RoKGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgaW50IG91dCwgc2l6ZV90IHJlcV9sZW4pCit7CisJdW5zaWduZWQgY2hhciBidWZbODE5Ml07CisJc2l6ZV90IHJlbWFpbmluZ19sZW4gPSByZXFfbGVuOworCisJd2hpbGUgKHJlbWFpbmluZ19sZW4gPiAwKSB7CisJCXNpemVfdCBjaHVua19sZW5ndGggPSByZW1haW5pbmdfbGVuID4gc2l6ZW9mKGJ1ZikgPyBzaXplb2YoYnVmKSA6IHJlbWFpbmluZ19sZW47CisJCXNzaXplX3QgbiA9IHhyZWFkKDAsIGJ1ZiwgY2h1bmtfbGVuZ3RoKTsKKwkJaWYgKG4gPCAwKQorCQkJZGllX2Vycm5vKCJSZWFkaW5nIHJlcXVlc3QgZmFpbGVkIik7CisJCXdyaXRlX3RvX2NoaWxkKG91dCwgYnVmLCBuLCBwcm9nX25hbWUpOworCQlyZW1haW5pbmdfbGVuIC09IG47CisJfQorCisJY2xvc2Uob3V0KTsKK30KKworc3RhdGljIHZvaWQgcnVuX3NlcnZpY2UoY29uc3QgY2hhciAqKmFyZ3YsIGludCBidWZmZXJfaW5wdXQpCit7CisJY29uc3QgY2hhciAqZW5jb2RpbmcgPSBnZXRlbnYoIkhUVFBfQ09OVEVOVF9FTkNPRElORyIpOworCWNvbnN0IGNoYXIgKnVzZXIgPSBnZXRlbnYoIlJFTU9URV9VU0VSIik7CisJY29uc3QgY2hhciAqaG9zdCA9IGdldGVudigiUkVNT1RFX0FERFIiKTsKKwlpbnQgZ3ppcHBlZF9yZXF1ZXN0ID0gMDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbGQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3NpemVfdCByZXFfbGVuID0gZ2V0X2NvbnRlbnRfbGVuZ3RoKCk7CisKKwlpZiAoZW5jb2RpbmcgJiYgIXN0cmNtcChlbmNvZGluZywgImd6aXAiKSkKKwkJZ3ppcHBlZF9yZXF1ZXN0ID0gMTsKKwllbHNlIGlmIChlbmNvZGluZyAmJiAhc3RyY21wKGVuY29kaW5nLCAieC1nemlwIikpCisJCWd6aXBwZWRfcmVxdWVzdCA9IDE7CisKKwlpZiAoIXVzZXIgfHwgISp1c2VyKQorCQl1c2VyID0gImFub255bW91cyI7CisJaWYgKCFob3N0IHx8ICEqaG9zdCkKKwkJaG9zdCA9ICIobm9uZSkiOworCisJaWYgKCFnZXRlbnYoIkdJVF9DT01NSVRURVJfTkFNRSIpKQorCQlhcmd2X2FycmF5X3B1c2hmKCZjbGQuZW52X2FycmF5LCAiR0lUX0NPTU1JVFRFUl9OQU1FPSVzIiwgdXNlcik7CisJaWYgKCFnZXRlbnYoIkdJVF9DT01NSVRURVJfRU1BSUwiKSkKKwkJYXJndl9hcnJheV9wdXNoZigmY2xkLmVudl9hcnJheSwKKwkJCQkgIkdJVF9DT01NSVRURVJfRU1BSUw9JXNAaHR0cC4lcyIsIHVzZXIsIGhvc3QpOworCisJY2xkLmFyZ3YgPSBhcmd2OworCWlmIChidWZmZXJfaW5wdXQgfHwgZ3ppcHBlZF9yZXF1ZXN0IHx8IHJlcV9sZW4gPj0gMCkKKwkJY2xkLmluID0gLTE7CisJY2xkLmdpdF9jbWQgPSAxOworCWNsZC5jbGVhbl9vbl9leGl0ID0gMTsKKwljbGQud2FpdF9hZnRlcl9jbGVhbiA9IDE7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNsZCkpCisJCWV4aXQoMSk7CisKKwljbG9zZSgxKTsKKwlpZiAoZ3ppcHBlZF9yZXF1ZXN0KQorCQlpbmZsYXRlX3JlcXVlc3QoYXJndlswXSwgY2xkLmluLCBidWZmZXJfaW5wdXQsIHJlcV9sZW4pOworCWVsc2UgaWYgKGJ1ZmZlcl9pbnB1dCkKKwkJY29weV9yZXF1ZXN0KGFyZ3ZbMF0sIGNsZC5pbiwgcmVxX2xlbik7CisJZWxzZSBpZiAocmVxX2xlbiA+PSAwKQorCQlwaXBlX2ZpeGVkX2xlbmd0aChhcmd2WzBdLCBjbGQuaW4sIHJlcV9sZW4pOworCWVsc2UKKwkJY2xvc2UoMCk7CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmNsZCkpCisJCWV4aXQoMSk7Cit9CisKK3N0YXRpYyBpbnQgc2hvd190ZXh0X3JlZihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJY29uc3QgY2hhciAqbmFtZV9ub25zID0gc3RyaXBfbmFtZXNwYWNlKG5hbWUpOworCXN0cnVjdCBzdHJidWYgKmJ1ZiA9IGNiX2RhdGE7CisJc3RydWN0IG9iamVjdCAqbyA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKwlpZiAoIW8pCisJCXJldHVybiAwOworCisJc3RyYnVmX2FkZGYoYnVmLCAiJXNcdCVzXG4iLCBvaWRfdG9faGV4KG9pZCksIG5hbWVfbm9ucyk7CisJaWYgKG8tPnR5cGUgPT0gT0JKX1RBRykgeworCQlvID0gZGVyZWZfdGFnKHRoZV9yZXBvc2l0b3J5LCBvLCBuYW1lLCAwKTsKKwkJaWYgKCFvKQorCQkJcmV0dXJuIDA7CisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzXHQlc157fVxuIiwgb2lkX3RvX2hleCgmby0+b2lkKSwKKwkJCSAgICBuYW1lX25vbnMpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2V0X2luZm9fcmVmcyhzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNoYXIgKmFyZykKK3sKKwljb25zdCBjaGFyICpzZXJ2aWNlX25hbWUgPSBnZXRfcGFyYW1ldGVyKCJzZXJ2aWNlIik7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWhkcl9ub2NhY2hlKGhkcik7CisKKwlpZiAoc2VydmljZV9uYW1lKSB7CisJCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHtOVUxMIC8qIHNlcnZpY2UgbmFtZSAqLywKKwkJCSItLXN0YXRlbGVzcy1ycGMiLCAiLS1hZHZlcnRpc2UtcmVmcyIsCisJCQkiLiIsIE5VTEx9OworCQlzdHJ1Y3QgcnBjX3NlcnZpY2UgKnN2YyA9IHNlbGVjdF9zZXJ2aWNlKGhkciwgc2VydmljZV9uYW1lKTsKKworCQlzdHJidWZfYWRkZigmYnVmLCAiYXBwbGljYXRpb24veC1naXQtJXMtYWR2ZXJ0aXNlbWVudCIsCisJCQlzdmMtPm5hbWUpOworCQloZHJfc3RyKGhkciwgY29udGVudF90eXBlLCBidWYuYnVmKTsKKwkJZW5kX2hlYWRlcnMoaGRyKTsKKworCisJCWlmIChkZXRlcm1pbmVfcHJvdG9jb2xfdmVyc2lvbl9zZXJ2ZXIoKSAhPSBwcm90b2NvbF92MikgeworCQkJcGFja2V0X3dyaXRlX2ZtdCgxLCAiIyBzZXJ2aWNlPWdpdC0lc1xuIiwgc3ZjLT5uYW1lKTsKKwkJCXBhY2tldF9mbHVzaCgxKTsKKwkJfQorCisJCWFyZ3ZbMF0gPSBzdmMtPm5hbWU7CisJCXJ1bl9zZXJ2aWNlKGFyZ3YsIDApOworCisJfSBlbHNlIHsKKwkJc2VsZWN0X2dldGFueWZpbGUoaGRyKTsKKwkJZm9yX2VhY2hfbmFtZXNwYWNlZF9yZWYoc2hvd190ZXh0X3JlZiwgJmJ1Zik7CisJCXNlbmRfc3RyYnVmKGhkciwgInRleHQvcGxhaW4iLCAmYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19oZWFkX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiAqYnVmID0gY2JfZGF0YTsKKworCWlmIChmbGFnICYgUkVGX0lTU1lNUkVGKSB7CisJCWNvbnN0IGNoYXIgKnRhcmdldCA9IHJlc29sdmVfcmVmX3Vuc2FmZShyZWZuYW1lLAorCQkJCQkJCVJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCQkJTlVMTCwgTlVMTCk7CisKKwkJaWYgKHRhcmdldCkKKwkJCXN0cmJ1Zl9hZGRmKGJ1ZiwgInJlZjogJXNcbiIsIHN0cmlwX25hbWVzcGFjZSh0YXJnZXQpKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZihidWYsICIlc1xuIiwgb2lkX3RvX2hleChvaWQpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2V0X2hlYWQoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjaGFyICphcmcpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXNlbGVjdF9nZXRhbnlmaWxlKGhkcik7CisJaGVhZF9yZWZfbmFtZXNwYWNlZChzaG93X2hlYWRfcmVmLCAmYnVmKTsKKwlzZW5kX3N0cmJ1ZihoZHIsICJ0ZXh0L3BsYWluIiwgJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9pbmZvX3BhY2tzKHN0cnVjdCBzdHJidWYgKmhkciwgY2hhciAqYXJnKQoreworCXNpemVfdCBvYmpkaXJsZW4gPSBzdHJsZW4oZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwlzaXplX3QgY250ID0gMDsKKworCXNlbGVjdF9nZXRhbnlmaWxlKGhkcik7CisJZm9yIChwID0gZ2V0X2FsbF9wYWNrcyh0aGVfcmVwb3NpdG9yeSk7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT5wYWNrX2xvY2FsKQorCQkJY250Kys7CisJfQorCisJc3RyYnVmX2dyb3coJmJ1ZiwgY250ICogNTMgKyAyKTsKKwlmb3IgKHAgPSBnZXRfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5KTsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPnBhY2tfbG9jYWwpCisJCQlzdHJidWZfYWRkZigmYnVmLCAiUCAlc1xuIiwgcC0+cGFja19uYW1lICsgb2JqZGlybGVuICsgNik7CisJfQorCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKworCWhkcl9ub2NhY2hlKGhkcik7CisJc2VuZF9zdHJidWYoaGRyLCAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsICZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19jb250ZW50X3R5cGUoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjb25zdCBjaGFyICphY2NlcHRlZF90eXBlKQoreworCWNvbnN0IGNoYXIgKmFjdHVhbF90eXBlID0gZ2V0ZW52KCJDT05URU5UX1RZUEUiKTsKKworCWlmICghYWN0dWFsX3R5cGUpCisJCWFjdHVhbF90eXBlID0gIiI7CisKKwlpZiAoc3RyY21wKGFjdHVhbF90eXBlLCBhY2NlcHRlZF90eXBlKSkgeworCQlodHRwX3N0YXR1cyhoZHIsIDQxNSwgIlVuc3VwcG9ydGVkIE1lZGlhIFR5cGUiKTsKKwkJaGRyX25vY2FjaGUoaGRyKTsKKwkJZW5kX2hlYWRlcnMoaGRyKTsKKwkJZm9ybWF0X3dyaXRlKDEsCisJCQkiRXhwZWN0ZWQgUE9TVCB3aXRoIENvbnRlbnQtVHlwZSAnJXMnLCIKKwkJCSIgYnV0IHJlY2VpdmVkICclcycgaW5zdGVhZC5cbiIsCisJCQlhY2NlcHRlZF90eXBlLCBhY3R1YWxfdHlwZSk7CisJCWV4aXQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXJ2aWNlX3JwYyhzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNoYXIgKnNlcnZpY2VfbmFtZSkKK3sKKwljb25zdCBjaGFyICphcmd2W10gPSB7TlVMTCwgIi0tc3RhdGVsZXNzLXJwYyIsICIuIiwgTlVMTH07CisJc3RydWN0IHJwY19zZXJ2aWNlICpzdmMgPSBzZWxlY3Rfc2VydmljZShoZHIsIHNlcnZpY2VfbmFtZSk7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlzdHJidWZfYWRkZigmYnVmLCAiYXBwbGljYXRpb24veC1naXQtJXMtcmVxdWVzdCIsIHN2Yy0+bmFtZSk7CisJY2hlY2tfY29udGVudF90eXBlKGhkciwgYnVmLmJ1Zik7CisKKwloZHJfbm9jYWNoZShoZHIpOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJhcHBsaWNhdGlvbi94LWdpdC0lcy1yZXN1bHQiLCBzdmMtPm5hbWUpOworCWhkcl9zdHIoaGRyLCBjb250ZW50X3R5cGUsIGJ1Zi5idWYpOworCisJZW5kX2hlYWRlcnMoaGRyKTsKKworCWFyZ3ZbMF0gPSBzdmMtPm5hbWU7CisJcnVuX3NlcnZpY2UoYXJndiwgc3ZjLT5idWZmZXJfaW5wdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgaW50IGRlYWQ7CitzdGF0aWMgTk9SRVRVUk4gdm9pZCBkaWVfd2ViY2dpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJaWYgKGRlYWQgPD0gMSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGhkciA9IFNUUkJVRl9JTklUOworCisJCXZyZXBvcnRmKCJmYXRhbDogIiwgZXJyLCBwYXJhbXMpOworCisJCWh0dHBfc3RhdHVzKCZoZHIsIDUwMCwgIkludGVybmFsIFNlcnZlciBFcnJvciIpOworCQloZHJfbm9jYWNoZSgmaGRyKTsKKwkJZW5kX2hlYWRlcnMoJmhkcik7CisJfQorCWV4aXQoMCk7IC8qIHdlIHN1Y2Nlc3NmdWxseSByZXBvcnRlZCBhIGZhaWx1cmUgOy0pICovCit9CisKK3N0YXRpYyBpbnQgZGllX3dlYmNnaV9yZWN1cnNpbmcodm9pZCkKK3sKKwlyZXR1cm4gZGVhZCsrID4gMTsKK30KKworc3RhdGljIGNoYXIqIGdldGRpcih2b2lkKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcGF0aGluZm8gPSBnZXRlbnYoIlBBVEhfSU5GTyIpOworCWNoYXIgKnJvb3QgPSBnZXRlbnYoIkdJVF9QUk9KRUNUX1JPT1QiKTsKKwljaGFyICpwYXRoID0gZ2V0ZW52KCJQQVRIX1RSQU5TTEFURUQiKTsKKworCWlmIChyb290ICYmICpyb290KSB7CisJCWlmICghcGF0aGluZm8gfHwgISpwYXRoaW5mbykKKwkJCWRpZSgiR0lUX1BST0pFQ1RfUk9PVCBpcyBzZXQgYnV0IFBBVEhfSU5GTyBpcyBub3QiKTsKKwkJaWYgKGRhZW1vbl9hdm9pZF9hbGlhcyhwYXRoaW5mbykpCisJCQlkaWUoIiclcyc6IGFsaWFzZWQiLCBwYXRoaW5mbyk7CisJCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCByb290KTsKKwkJaWYgKHBhdGhpbmZvWzBdID09ICcvJykKKwkJCXBhdGhpbmZvKys7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcGF0aGluZm8pOworCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwl9IGVsc2UgaWYgKHBhdGggJiYgKnBhdGgpIHsKKwkJcmV0dXJuIHhzdHJkdXAocGF0aCk7CisJfSBlbHNlCisJCWRpZSgiTm8gR0lUX1BST0pFQ1RfUk9PVCBvciBQQVRIX1RSQU5TTEFURUQgZnJvbSBzZXJ2ZXIiKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBzZXJ2aWNlX2NtZCB7CisJY29uc3QgY2hhciAqbWV0aG9kOworCWNvbnN0IGNoYXIgKnBhdHRlcm47CisJdm9pZCAoKmltcCkoc3RydWN0IHN0cmJ1ZiAqLCBjaGFyICopOworfSBzZXJ2aWNlc1tdID0geworCXsiR0VUIiwgIi9IRUFEJCIsIGdldF9oZWFkfSwKKwl7IkdFVCIsICIvaW5mby9yZWZzJCIsIGdldF9pbmZvX3JlZnN9LAorCXsiR0VUIiwgIi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyQiLCBnZXRfdGV4dF9maWxlfSwKKwl7IkdFVCIsICIvb2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcyQiLCBnZXRfdGV4dF9maWxlfSwKKwl7IkdFVCIsICIvb2JqZWN0cy9pbmZvL3BhY2tzJCIsIGdldF9pbmZvX3BhY2tzfSwKKwl7IkdFVCIsICIvb2JqZWN0cy9bMC05YS1mXXsyfS9bMC05YS1mXXszOH0kIiwgZ2V0X2xvb3NlX29iamVjdH0sCisJeyJHRVQiLCAiL29iamVjdHMvWzAtOWEtZl17Mn0vWzAtOWEtZl17NjJ9JCIsIGdldF9sb29zZV9vYmplY3R9LAorCXsiR0VUIiwgIi9vYmplY3RzL3BhY2svcGFjay1bMC05YS1mXXs0MH1cXC5wYWNrJCIsIGdldF9wYWNrX2ZpbGV9LAorCXsiR0VUIiwgIi9vYmplY3RzL3BhY2svcGFjay1bMC05YS1mXXs2NH1cXC5wYWNrJCIsIGdldF9wYWNrX2ZpbGV9LAorCXsiR0VUIiwgIi9vYmplY3RzL3BhY2svcGFjay1bMC05YS1mXXs0MH1cXC5pZHgkIiwgZ2V0X2lkeF9maWxlfSwKKwl7IkdFVCIsICIvb2JqZWN0cy9wYWNrL3BhY2stWzAtOWEtZl17NjR9XFwuaWR4JCIsIGdldF9pZHhfZmlsZX0sCisKKwl7IlBPU1QiLCAiL2dpdC11cGxvYWQtcGFjayQiLCBzZXJ2aWNlX3JwY30sCisJeyJQT1NUIiwgIi9naXQtcmVjZWl2ZS1wYWNrJCIsIHNlcnZpY2VfcnBjfQorfTsKKworc3RhdGljIGludCBiYWRfcmVxdWVzdChzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNvbnN0IHN0cnVjdCBzZXJ2aWNlX2NtZCAqYykKK3sKKwljb25zdCBjaGFyICpwcm90byA9IGdldGVudigiU0VSVkVSX1BST1RPQ09MIik7CisKKwlpZiAocHJvdG8gJiYgIXN0cmNtcChwcm90bywgIkhUVFAvMS4xIikpIHsKKwkJaHR0cF9zdGF0dXMoaGRyLCA0MDUsICJNZXRob2QgTm90IEFsbG93ZWQiKTsKKwkJaGRyX3N0cihoZHIsICJBbGxvdyIsCisJCQkhc3RyY21wKGMtPm1ldGhvZCwgIkdFVCIpID8gIkdFVCwgSEVBRCIgOiBjLT5tZXRob2QpOworCX0gZWxzZQorCQlodHRwX3N0YXR1cyhoZHIsIDQwMCwgIkJhZCBSZXF1ZXN0Iik7CisJaGRyX25vY2FjaGUoaGRyKTsKKwllbmRfaGVhZGVycyhoZHIpOworCXJldHVybiAwOworfQorCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNoYXIgKm1ldGhvZCA9IGdldGVudigiUkVRVUVTVF9NRVRIT0QiKTsKKwljaGFyICpkaXI7CisJc3RydWN0IHNlcnZpY2VfY21kICpjbWQgPSBOVUxMOworCWNoYXIgKmNtZF9hcmcgPSBOVUxMOworCWludCBpOworCXN0cnVjdCBzdHJidWYgaGRyID0gU1RSQlVGX0lOSVQ7CisKKwlzZXRfZGllX3JvdXRpbmUoZGllX3dlYmNnaSk7CisJc2V0X2RpZV9pc19yZWN1cnNpbmdfcm91dGluZShkaWVfd2ViY2dpX3JlY3Vyc2luZyk7CisKKwlpZiAoIW1ldGhvZCkKKwkJZGllKCJObyBSRVFVRVNUX01FVEhPRCBmcm9tIHNlcnZlciIpOworCWlmICghc3RyY21wKG1ldGhvZCwgIkhFQUQiKSkKKwkJbWV0aG9kID0gIkdFVCI7CisJZGlyID0gZ2V0ZGlyKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZXJ2aWNlcyk7IGkrKykgeworCQlzdHJ1Y3Qgc2VydmljZV9jbWQgKmMgPSAmc2VydmljZXNbaV07CisJCXJlZ2V4X3QgcmU7CisJCXJlZ21hdGNoX3Qgb3V0WzFdOworCisJCWlmIChyZWdjb21wKCZyZSwgYy0+cGF0dGVybiwgUkVHX0VYVEVOREVEKSkKKwkJCWRpZSgiQm9ndXMgcmVnZXggaW4gc2VydmljZSB0YWJsZTogJXMiLCBjLT5wYXR0ZXJuKTsKKwkJaWYgKCFyZWdleGVjKCZyZSwgZGlyLCAxLCBvdXQsIDApKSB7CisJCQlzaXplX3QgbjsKKworCQkJaWYgKHN0cmNtcChtZXRob2QsIGMtPm1ldGhvZCkpCisJCQkJcmV0dXJuIGJhZF9yZXF1ZXN0KCZoZHIsIGMpOworCisJCQljbWQgPSBjOworCQkJbiA9IG91dFswXS5ybV9lbyAtIG91dFswXS5ybV9zbzsKKwkJCWNtZF9hcmcgPSB4bWVtZHVweihkaXIgKyBvdXRbMF0ucm1fc28gKyAxLCBuIC0gMSk7CisJCQlkaXJbb3V0WzBdLnJtX3NvXSA9IDA7CisJCQlicmVhazsKKwkJfQorCQlyZWdmcmVlKCZyZSk7CisJfQorCisJaWYgKCFjbWQpCisJCW5vdF9mb3VuZCgmaGRyLCAiUmVxdWVzdCBub3Qgc3VwcG9ydGVkOiAnJXMnIiwgZGlyKTsKKworCXNldHVwX3BhdGgoKTsKKwlpZiAoIWVudGVyX3JlcG8oZGlyLCAwKSkKKwkJbm90X2ZvdW5kKCZoZHIsICJOb3QgYSBnaXQgcmVwb3NpdG9yeTogJyVzJyIsIGRpcik7CisJaWYgKCFnZXRlbnYoIkdJVF9IVFRQX0VYUE9SVF9BTEwiKSAmJgorCSAgICBhY2Nlc3MoImdpdC1kYWVtb24tZXhwb3J0LW9rIiwgRl9PSykgKQorCQlub3RfZm91bmQoJmhkciwgIlJlcG9zaXRvcnkgbm90IGV4cG9ydGVkOiAnJXMnIiwgZGlyKTsKKworCWh0dHBfY29uZmlnKCk7CisJbWF4X3JlcXVlc3RfYnVmZmVyID0gZ2l0X2Vudl91bG9uZygiR0lUX0hUVFBfTUFYX1JFUVVFU1RfQlVGRkVSIiwKKwkJCQkJICAgbWF4X3JlcXVlc3RfYnVmZmVyKTsKKworCWNtZC0+aW1wKCZoZHIsIGNtZF9hcmcpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvaHR0cC1mZXRjaC5jIGIvaHR0cC1mZXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMmFjMTEKLS0tIC9kZXYvbnVsbAorKysgYi9odHRwLWZldGNoLmMKQEAgLTAsMCArMSw4MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAid2Fsa2VyLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGh0dHBfZmV0Y2hfdXNhZ2VbXSA9ICJnaXQgaHR0cC1mZXRjaCAiCisiWy1jXSBbLXRdIFstYV0gWy12XSBbLS1yZWNvdmVyXSBbLXcgcmVmXSBbLS1zdGRpbl0gY29tbWl0LWlkIHVybCI7CisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHdhbGtlciAqd2Fsa2VyOworCWludCBjb21taXRzX29uX3N0ZGluID0gMDsKKwlpbnQgY29tbWl0czsKKwljb25zdCBjaGFyICoqd3JpdGVfcmVmID0gTlVMTDsKKwljaGFyICoqY29tbWl0X2lkOworCWNoYXIgKnVybCA9IE5VTEw7CisJaW50IGFyZyA9IDE7CisJaW50IHJjID0gMDsKKwlpbnQgZ2V0X3ZlcmJvc2VseSA9IDA7CisJaW50IGdldF9yZWNvdmVyID0gMDsKKworCXdoaWxlIChhcmcgPCBhcmdjICYmIGFyZ3ZbYXJnXVswXSA9PSAnLScpIHsKKwkJaWYgKGFyZ3ZbYXJnXVsxXSA9PSAndCcpIHsKKwkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2MnKSB7CisJCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICdhJykgeworCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAndicpIHsKKwkJCWdldF92ZXJib3NlbHkgPSAxOworCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAndycpIHsKKwkJCXdyaXRlX3JlZiA9ICZhcmd2W2FyZyArIDFdOworCQkJYXJnKys7CisJCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICdoJykgeworCQkJdXNhZ2UoaHR0cF9mZXRjaF91c2FnZSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2FyZ10sICItLXJlY292ZXIiKSkgeworCQkJZ2V0X3JlY292ZXIgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlthcmddLCAiLS1zdGRpbiIpKSB7CisJCQljb21taXRzX29uX3N0ZGluID0gMTsKKwkJfQorCQlhcmcrKzsKKwl9CisJaWYgKGFyZ2MgIT0gYXJnICsgMiAtIGNvbW1pdHNfb25fc3RkaW4pCisJCXVzYWdlKGh0dHBfZmV0Y2hfdXNhZ2UpOworCWlmIChjb21taXRzX29uX3N0ZGluKSB7CisJCWNvbW1pdHMgPSB3YWxrZXJfdGFyZ2V0c19zdGRpbigmY29tbWl0X2lkLCAmd3JpdGVfcmVmKTsKKwl9IGVsc2UgeworCQljb21taXRfaWQgPSAoY2hhciAqKikgJmFyZ3ZbYXJnKytdOworCQljb21taXRzID0gMTsKKwl9CisKKwlpZiAoYXJndlthcmddKQorCQlzdHJfZW5kX3VybF93aXRoX3NsYXNoKGFyZ3ZbYXJnXSwgJnVybCk7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlodHRwX2luaXQoTlVMTCwgdXJsLCAwKTsKKwl3YWxrZXIgPSBnZXRfaHR0cF93YWxrZXIodXJsKTsKKwl3YWxrZXItPmdldF92ZXJib3NlbHkgPSBnZXRfdmVyYm9zZWx5OworCXdhbGtlci0+Z2V0X3JlY292ZXIgPSBnZXRfcmVjb3ZlcjsKKworCXJjID0gd2Fsa2VyX2ZldGNoKHdhbGtlciwgY29tbWl0cywgY29tbWl0X2lkLCB3cml0ZV9yZWYsIHVybCk7CisKKwlpZiAoY29tbWl0c19vbl9zdGRpbikKKwkJd2Fsa2VyX3RhcmdldHNfZnJlZShjb21taXRzLCBjb21taXRfaWQsIHdyaXRlX3JlZik7CisKKwlpZiAod2Fsa2VyLT5jb3JydXB0X29iamVjdF9mb3VuZCkgeworCQlmcHJpbnRmKHN0ZGVyciwKKyJTb21lIGxvb3NlIG9iamVjdCB3ZXJlIGZvdW5kIHRvIGJlIGNvcnJ1cHQsIGJ1dCB0aGV5IG1pZ2h0IGJlIGp1c3RcbiIKKyJhIGZhbHNlICc0MDQgTm90IEZvdW5kJyBlcnJvciBtZXNzYWdlIHNlbnQgd2l0aCBpbmNvcnJlY3QgSFRUUFxuIgorInN0YXR1cyBjb2RlLiAgU3VnZ2VzdCBydW5uaW5nICdnaXQgZnNjaycuXG4iKTsKKwl9CisKKwl3YWxrZXJfZnJlZSh3YWxrZXIpOworCWh0dHBfY2xlYW51cCgpOworCisJZnJlZSh1cmwpOworCisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvaHR0cC1wdXNoLmMgYi9odHRwLXB1c2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjJmMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvaHR0cC1wdXNoLmMKQEAgLTAsMCArMSwxOTg5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImh0dHAuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorCisjaWZkZWYgRVhQQVRfTkVFRFNfWE1MUEFSU0VfSAorI2luY2x1ZGUgPHhtbHBhcnNlLmg+CisjZWxzZQorI2luY2x1ZGUgPGV4cGF0Lmg+CisjZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIgaHR0cF9wdXNoX3VzYWdlW10gPQorImdpdCBodHRwLXB1c2ggWy0tYWxsXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tdmVyYm9zZV0gPHJlbW90ZT4gWzxoZWFkPi4uLl1cbiI7CisKKyNpZm5kZWYgWE1MX1NUQVRVU19PSworZW51bSBYTUxfU3RhdHVzIHsKKyAgWE1MX1NUQVRVU19PSyA9IDEsCisgIFhNTF9TVEFUVVNfRVJST1IgPSAwCit9OworI2RlZmluZSBYTUxfU1RBVFVTX09LICAgIDEKKyNkZWZpbmUgWE1MX1NUQVRVU19FUlJPUiAwCisjZW5kaWYKKworI2RlZmluZSBQUkVWX0JVRl9TSVpFIDQwOTYKKworLyogREFWIG1ldGhvZHMgKi8KKyNkZWZpbmUgREFWX0xPQ0sgIkxPQ0siCisjZGVmaW5lIERBVl9NS0NPTCAiTUtDT0wiCisjZGVmaW5lIERBVl9NT1ZFICJNT1ZFIgorI2RlZmluZSBEQVZfUFJPUEZJTkQgIlBST1BGSU5EIgorI2RlZmluZSBEQVZfUFVUICJQVVQiCisjZGVmaW5lIERBVl9VTkxPQ0sgIlVOTE9DSyIKKyNkZWZpbmUgREFWX0RFTEVURSAiREVMRVRFIgorCisvKiBEQVYgbG9jayBmbGFncyAqLworI2RlZmluZSBEQVZfUFJPUF9MT0NLV1IgKDF1IDw8IDApCisjZGVmaW5lIERBVl9QUk9QX0xPQ0tFWCAoMXUgPDwgMSkKKyNkZWZpbmUgREFWX0xPQ0tfT0sgKDF1IDw8IDIpCisKKy8qIERBViBYTUwgcHJvcGVydGllcyAqLworI2RlZmluZSBEQVZfQ1RYX0xPQ0tFTlRSWSAiLm11bHRpc3RhdHVzLnJlc3BvbnNlLnByb3BzdGF0LnByb3Auc3VwcG9ydGVkbG9jay5sb2NrZW50cnkiCisjZGVmaW5lIERBVl9DVFhfTE9DS1RZUEVfV1JJVEUgIi5tdWx0aXN0YXR1cy5yZXNwb25zZS5wcm9wc3RhdC5wcm9wLnN1cHBvcnRlZGxvY2subG9ja2VudHJ5LmxvY2t0eXBlLndyaXRlIgorI2RlZmluZSBEQVZfQ1RYX0xPQ0tUWVBFX0VYQ0xVU0lWRSAiLm11bHRpc3RhdHVzLnJlc3BvbnNlLnByb3BzdGF0LnByb3Auc3VwcG9ydGVkbG9jay5sb2NrZW50cnkubG9ja3Njb3BlLmV4Y2x1c2l2ZSIKKyNkZWZpbmUgREFWX0FDVElWRUxPQ0tfT1dORVIgIi5wcm9wLmxvY2tkaXNjb3ZlcnkuYWN0aXZlbG9jay5vd25lci5ocmVmIgorI2RlZmluZSBEQVZfQUNUSVZFTE9DS19USU1FT1VUICIucHJvcC5sb2NrZGlzY292ZXJ5LmFjdGl2ZWxvY2sudGltZW91dCIKKyNkZWZpbmUgREFWX0FDVElWRUxPQ0tfVE9LRU4gIi5wcm9wLmxvY2tkaXNjb3ZlcnkuYWN0aXZlbG9jay5sb2NrdG9rZW4uaHJlZiIKKyNkZWZpbmUgREFWX1BST1BGSU5EX1JFU1AgIi5tdWx0aXN0YXR1cy5yZXNwb25zZSIKKyNkZWZpbmUgREFWX1BST1BGSU5EX05BTUUgIi5tdWx0aXN0YXR1cy5yZXNwb25zZS5ocmVmIgorI2RlZmluZSBEQVZfUFJPUEZJTkRfQ09MTEVDVElPTiAiLm11bHRpc3RhdHVzLnJlc3BvbnNlLnByb3BzdGF0LnByb3AucmVzb3VyY2V0eXBlLmNvbGxlY3Rpb24iCisKKy8qIERBViByZXF1ZXN0IGJvZHkgdGVtcGxhdGVzICovCisjZGVmaW5lIFBST1BGSU5EX1NVUFBPUlRFRExPQ0tfUkVRVUVTVCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiA/PlxuPEQ6cHJvcGZpbmQgeG1sbnM6RD1cIkRBVjpcIj5cbjxEOnByb3AgeG1sbnM6Uj1cIiVzXCI+XG48RDpzdXBwb3J0ZWRsb2NrLz5cbjwvRDpwcm9wPlxuPC9EOnByb3BmaW5kPiIKKyNkZWZpbmUgUFJPUEZJTkRfQUxMX1JFUVVFU1QgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgPz5cbjxEOnByb3BmaW5kIHhtbG5zOkQ9XCJEQVY6XCI+XG48RDphbGxwcm9wLz5cbjwvRDpwcm9wZmluZD4iCisjZGVmaW5lIExPQ0tfUkVRVUVTVCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiA/PlxuPEQ6bG9ja2luZm8geG1sbnM6RD1cIkRBVjpcIj5cbjxEOmxvY2tzY29wZT48RDpleGNsdXNpdmUvPjwvRDpsb2Nrc2NvcGU+XG48RDpsb2NrdHlwZT48RDp3cml0ZS8+PC9EOmxvY2t0eXBlPlxuPEQ6b3duZXI+XG48RDpocmVmPm1haWx0bzolczwvRDpocmVmPlxuPC9EOm93bmVyPlxuPC9EOmxvY2tpbmZvPiIKKworI2RlZmluZSBMT0NLX1RJTUUgNjAwCisjZGVmaW5lIExPQ0tfUkVGUkVTSCAzMAorCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworI2RlZmluZSBMT0NBTCAgICAoMXU8PDE2KQorI2RlZmluZSBSRU1PVEUgICAoMXU8PDE3KQorI2RlZmluZSBGRVRDSElORyAoMXU8PDE4KQorI2RlZmluZSBQVVNISU5HICAoMXU8PDE5KQorCisvKiBXZSBhbGxvdyAicmVjdXJzaXZlIiBzeW1ib2xpYyByZWZzLiBPbmx5IHdpdGhpbiByZWFzb24sIHRob3VnaCAqLworI2RlZmluZSBNQVhERVBUSCA1CisKK3N0YXRpYyBpbnQgcHVzaGluZzsKK3N0YXRpYyBpbnQgYWJvcnRlZDsKK3N0YXRpYyBzaWduZWQgY2hhciByZW1vdGVfZGlyX2V4aXN0c1syNTZdOworCitzdGF0aWMgaW50IHB1c2hfdmVyYm9zZWx5Oworc3RhdGljIGludCBwdXNoX2FsbCA9IE1BVENIX1JFRlNfTk9ORTsKK3N0YXRpYyBpbnQgZm9yY2VfYWxsOworc3RhdGljIGludCBkcnlfcnVuOworc3RhdGljIGludCBoZWxwZXJfc3RhdHVzOworCitzdGF0aWMgc3RydWN0IG9iamVjdF9saXN0ICpvYmplY3RzOworCitzdHJ1Y3QgcmVwbyB7CisJY2hhciAqdXJsOworCWNoYXIgKnBhdGg7CisJaW50IHBhdGhfbGVuOworCWludCBoYXNfaW5mb19yZWZzOworCWludCBjYW5fdXBkYXRlX2luZm9fcmVmczsKKwlpbnQgaGFzX2luZm9fcGFja3M7CisJc3RydWN0IHBhY2tlZF9naXQgKnBhY2tzOworCXN0cnVjdCByZW1vdGVfbG9jayAqbG9ja3M7Cit9OworCitzdGF0aWMgc3RydWN0IHJlcG8gKnJlcG87CisKK2VudW0gdHJhbnNmZXJfc3RhdGUgeworCU5FRURfRkVUQ0gsCisJUlVOX0ZFVENIX0xPT1NFLAorCVJVTl9GRVRDSF9QQUNLRUQsCisJTkVFRF9QVVNILAorCVJVTl9NS0NPTCwKKwlSVU5fUFVULAorCVJVTl9NT1ZFLAorCUFCT1JURUQsCisJQ09NUExFVEUKK307CisKK3N0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0IHsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJY2hhciAqdXJsOworCWNoYXIgKmRlc3Q7CisJc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrOworCXN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzOworCXN0cnVjdCBidWZmZXIgYnVmZmVyOworCWVudW0gdHJhbnNmZXJfc3RhdGUgc3RhdGU7CisJQ1VSTGNvZGUgY3VybF9yZXN1bHQ7CisJY2hhciBlcnJvcnN0cltDVVJMX0VSUk9SX1NJWkVdOworCWxvbmcgaHR0cF9jb2RlOworCXZvaWQgKnVzZXJEYXRhOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0X3F1ZXVlX2hlYWQ7CisKK3N0cnVjdCB4bWxfY3R4IHsKKwljaGFyICpuYW1lOworCWludCBsZW47CisJY2hhciAqY2RhdGE7CisJdm9pZCAoKnVzZXJGdW5jKShzdHJ1Y3QgeG1sX2N0eCAqY3R4LCBpbnQgdGFnX2Nsb3NlZCk7CisJdm9pZCAqdXNlckRhdGE7Cit9OworCitzdHJ1Y3QgcmVtb3RlX2xvY2sgeworCWNoYXIgKnVybDsKKwljaGFyICpvd25lcjsKKwljaGFyICp0b2tlbjsKKwljaGFyIHRtcGZpbGVfc3VmZml4W0dJVF9NQVhfSEVYU1ogKyAxXTsKKwl0aW1lX3Qgc3RhcnRfdGltZTsKKwlsb25nIHRpbWVvdXQ7CisJaW50IHJlZnJlc2hpbmc7CisJc3RydWN0IHJlbW90ZV9sb2NrICpuZXh0OworfTsKKworLyogRmxhZ3MgdGhhdCBjb250cm9sIHJlbW90ZV9scyBwcm9jZXNzaW5nICovCisjZGVmaW5lIFBST0NFU1NfRklMRVMgKDF1IDw8IDApCisjZGVmaW5lIFBST0NFU1NfRElSUyAgKDF1IDw8IDEpCisjZGVmaW5lIFJFQ1VSU0lWRSAgICAgKDF1IDw8IDIpCisKKy8qIEZsYWdzIHRoYXQgcmVtb3RlX2xzIHBhc3NlcyB0byBjYWxsYmFjayBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgSVNfRElSICgxdSA8PCAwKQorCitzdHJ1Y3QgcmVtb3RlX2xzX2N0eCB7CisJY2hhciAqcGF0aDsKKwl2b2lkICgqdXNlckZ1bmMpKHN0cnVjdCByZW1vdGVfbHNfY3R4ICpscyk7CisJdm9pZCAqdXNlckRhdGE7CisJaW50IGZsYWdzOworCWNoYXIgKmRlbnRyeV9uYW1lOworCWludCBkZW50cnlfZmxhZ3M7CisJc3RydWN0IHJlbW90ZV9sc19jdHggKnBhcmVudDsKK307CisKKy8qIGdldF9kYXZfdG9rZW5faGVhZGVycyBvcHRpb25zICovCitlbnVtIGRhdl9oZWFkZXJfZmxhZyB7CisJREFWX0hFQURFUl9JRiA9ICgxdSA8PCAwKSwKKwlEQVZfSEVBREVSX0xPQ0sgPSAoMXUgPDwgMSksCisJREFWX0hFQURFUl9USU1FT1VUID0gKDF1IDw8IDIpCit9OworCitzdGF0aWMgY2hhciAqeG1sX2VudGl0aWVzKGNvbnN0IGNoYXIgKnMpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkc3RyX3htbF9xdW90ZWQoJmJ1Ziwgcyk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGN1cmxfc2V0dXBfaHR0cF9nZXQoQ1VSTCAqY3VybCwgY29uc3QgY2hhciAqdXJsLAorCQljb25zdCBjaGFyICpjdXN0b21fcmVxKQoreworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IVFRQR0VULCAxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DVVNUT01SRVFVRVNULCBjdXN0b21fcmVxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX251bGwpOworfQorCitzdGF0aWMgdm9pZCBjdXJsX3NldHVwX2h0dHAoQ1VSTCAqY3VybCwgY29uc3QgY2hhciAqdXJsLAorCQljb25zdCBjaGFyICpjdXN0b21fcmVxLCBzdHJ1Y3QgYnVmZmVyICpidWZmZXIsCisJCWN1cmxfd3JpdGVfY2FsbGJhY2sgd3JpdGVfZm4pCit7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1BVVCwgMSk7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU5GSUxFLCBidWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTkZJTEVTSVpFLCBidWZmZXItPmJ1Zi5sZW4pOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRUFERlVOQ1RJT04sIGZyZWFkX2J1ZmZlcik7CisjaWZuZGVmIE5PX0NVUkxfSU9DVEwKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU9DVExGVU5DVElPTiwgaW9jdGxfYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU9DVExEQVRBLCBidWZmZXIpOworI2VuZGlmCisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIHdyaXRlX2ZuKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfTk9CT0RZLCAwKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCwgY3VzdG9tX3JlcSk7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VQTE9BRCwgMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqZ2V0X2Rhdl90b2tlbl9oZWFkZXJzKHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaywgZW51bSBkYXZfaGVhZGVyX2ZsYWcgb3B0aW9ucykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBjdXJsX3NsaXN0ICpkYXZfaGVhZGVycyA9IGh0dHBfY29weV9kZWZhdWx0X2hlYWRlcnMoKTsKKworCWlmIChvcHRpb25zICYgREFWX0hFQURFUl9JRikgeworCQlzdHJidWZfYWRkZigmYnVmLCAiSWY6ICg8JXM+KSIsIGxvY2stPnRva2VuKTsKKwkJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgYnVmLmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9CisJaWYgKG9wdGlvbnMgJiBEQVZfSEVBREVSX0xPQ0spIHsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIkxvY2stVG9rZW46IDwlcz4iLCBsb2NrLT50b2tlbik7CisJCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsIGJ1Zi5idWYpOworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJfQorCWlmIChvcHRpb25zICYgREFWX0hFQURFUl9USU1FT1VUKSB7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJUaW1lb3V0OiBTZWNvbmQtJWxkIiwgbG9jay0+dGltZW91dCk7CisJCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsIGJ1Zi5idWYpOworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIGRhdl9oZWFkZXJzOworfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfcmVxdWVzdChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCk7CitzdGF0aWMgdm9pZCByZWxlYXNlX3JlcXVlc3Qoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpOworCitzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3BvbnNlKHZvaWQgKmNhbGxiYWNrX2RhdGEpCit7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QgPQorCQkoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKiljYWxsYmFja19kYXRhOworCisJZmluaXNoX3JlcXVlc3QocmVxdWVzdCk7Cit9CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCitzdGF0aWMgdm9pZCBzdGFydF9mZXRjaF9sb29zZShzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqb2JqX3JlcTsKKworCW9ial9yZXEgPSBuZXdfaHR0cF9vYmplY3RfcmVxdWVzdChyZXBvLT51cmwsICZyZXF1ZXN0LT5vYmotPm9pZCk7CisJaWYgKG9ial9yZXEgPT0gTlVMTCkgeworCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7CisJCXJldHVybjsKKwl9CisKKwlzbG90ID0gb2JqX3JlcS0+c2xvdDsKKwlzbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19yZXNwb25zZTsKKwlzbG90LT5jYWxsYmFja19kYXRhID0gcmVxdWVzdDsKKwlyZXF1ZXN0LT5zbG90ID0gc2xvdDsKKwlyZXF1ZXN0LT51c2VyRGF0YSA9IG9ial9yZXE7CisKKwkvKiBUcnkgdG8gZ2V0IHRoZSByZXF1ZXN0IHN0YXJ0ZWQsIGFib3J0IHRoZSByZXF1ZXN0IG9uIGVycm9yICovCisJcmVxdWVzdC0+c3RhdGUgPSBSVU5fRkVUQ0hfTE9PU0U7CisJaWYgKCFzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzdGFydCBHRVQgcmVxdWVzdFxuIik7CisJCXJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzID0gMDsKKwkJcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOworCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdGFydF9ta2NvbChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwljaGFyICpoZXggPSBvaWRfdG9faGV4KCZyZXF1ZXN0LT5vYmotPm9pZCk7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisKKwlyZXF1ZXN0LT51cmwgPSBnZXRfcmVtb3RlX29iamVjdF91cmwocmVwby0+dXJsLCBoZXgsIDEpOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX3Jlc3BvbnNlOworCXNsb3QtPmNhbGxiYWNrX2RhdGEgPSByZXF1ZXN0OworCWN1cmxfc2V0dXBfaHR0cF9nZXQoc2xvdC0+Y3VybCwgcmVxdWVzdC0+dXJsLCBEQVZfTUtDT0wpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgcmVxdWVzdC0+ZXJyb3JzdHIpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJlcXVlc3QtPnNsb3QgPSBzbG90OworCQlyZXF1ZXN0LT5zdGF0ZSA9IFJVTl9NS0NPTDsKKwl9IGVsc2UgeworCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7CisJCUZSRUVfQU5EX05VTEwocmVxdWVzdC0+dXJsKTsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgc3RhcnRfZmV0Y2hfcGFja2VkKHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICp0YXJnZXQ7CisKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqY2hlY2tfcmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKKwlzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXE7CisKKwl0YXJnZXQgPSBmaW5kX3NoYTFfcGFjayhyZXF1ZXN0LT5vYmotPm9pZC5oYXNoLCByZXBvLT5wYWNrcyk7CisJaWYgKCF0YXJnZXQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZmV0Y2ggJXMsIHdpbGwgbm90IGJlIGFibGUgdG8gdXBkYXRlIHNlcnZlciBpbmZvIHJlZnNcbiIsIG9pZF90b19oZXgoJnJlcXVlc3QtPm9iai0+b2lkKSk7CisJCXJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzID0gMDsKKwkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCQlyZXR1cm47CisJfQorCisJZnByaW50ZihzdGRlcnIsCSJGZXRjaGluZyBwYWNrICVzXG4iLAorCQloYXNoX3RvX2hleCh0YXJnZXQtPmhhc2gpKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiB3aGljaCBjb250YWlucyAlc1xuIiwgb2lkX3RvX2hleCgmcmVxdWVzdC0+b2JqLT5vaWQpKTsKKworCXByZXEgPSBuZXdfaHR0cF9wYWNrX3JlcXVlc3QodGFyZ2V0LCByZXBvLT51cmwpOworCWlmIChwcmVxID09IE5VTEwpIHsKKwkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOworCQlyZXR1cm47CisJfQorCXByZXEtPmxzdCA9ICZyZXBvLT5wYWNrczsKKworCS8qIE1ha2Ugc3VyZSB0aGVyZSBpc24ndCBhbm90aGVyIG9wZW4gcmVxdWVzdCBmb3IgdGhpcyBwYWNrICovCisJd2hpbGUgKGNoZWNrX3JlcXVlc3QpIHsKKwkJaWYgKGNoZWNrX3JlcXVlc3QtPnN0YXRlID09IFJVTl9GRVRDSF9QQUNLRUQgJiYKKwkJICAgICFzdHJjbXAoY2hlY2tfcmVxdWVzdC0+dXJsLCBwcmVxLT51cmwpKSB7CisJCQlyZWxlYXNlX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpOworCQkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCQkJcmV0dXJuOworCQl9CisJCWNoZWNrX3JlcXVlc3QgPSBjaGVja19yZXF1ZXN0LT5uZXh0OworCX0KKworCXByZXEtPnNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX3Jlc3BvbnNlOworCXByZXEtPnNsb3QtPmNhbGxiYWNrX2RhdGEgPSByZXF1ZXN0OworCXJlcXVlc3QtPnNsb3QgPSBwcmVxLT5zbG90OworCXJlcXVlc3QtPnVzZXJEYXRhID0gcHJlcTsKKworCS8qIFRyeSB0byBnZXQgdGhlIHJlcXVlc3Qgc3RhcnRlZCwgYWJvcnQgdGhlIHJlcXVlc3Qgb24gZXJyb3IgKi8KKwlyZXF1ZXN0LT5zdGF0ZSA9IFJVTl9GRVRDSF9QQUNLRUQ7CisJaWYgKCFzdGFydF9hY3RpdmVfc2xvdChwcmVxLT5zbG90KSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzdGFydCBHRVQgcmVxdWVzdFxuIik7CisJCXJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CisJCXJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzID0gMDsKKwkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCX0KK30KKworc3RhdGljIHZvaWQgc3RhcnRfcHV0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCWNoYXIgKmhleCA9IG9pZF90b19oZXgoJnJlcXVlc3QtPm9iai0+b2lkKTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyIGhkcls1MF07CisJdm9pZCAqdW5wYWNrZWQ7CisJdW5zaWduZWQgbG9uZyBsZW47CisJaW50IGhkcmxlbjsKKwlzc2l6ZV90IHNpemU7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCisJdW5wYWNrZWQgPSByZWFkX29iamVjdF9maWxlKCZyZXF1ZXN0LT5vYmotPm9pZCwgJnR5cGUsICZsZW4pOworCWhkcmxlbiA9IHhzbnByaW50ZihoZHIsIHNpemVvZihoZHIpLCAiJXMgJSJQUkl1TUFYICwgdHlwZV9uYW1lKHR5cGUpLCAodWludG1heF90KWxlbikgKyAxOworCisJLyogU2V0IGl0IHVwICovCisJZ2l0X2RlZmxhdGVfaW5pdCgmc3RyZWFtLCB6bGliX2NvbXByZXNzaW9uX2xldmVsKTsKKwlzaXplID0gZ2l0X2RlZmxhdGVfYm91bmQoJnN0cmVhbSwgbGVuICsgaGRybGVuKTsKKwlzdHJidWZfaW5pdCgmcmVxdWVzdC0+YnVmZmVyLmJ1Ziwgc2l6ZSk7CisJcmVxdWVzdC0+YnVmZmVyLnBvc24gPSAwOworCisJLyogQ29tcHJlc3MgaXQgKi8KKwlzdHJlYW0ubmV4dF9vdXQgPSAodW5zaWduZWQgY2hhciAqKXJlcXVlc3QtPmJ1ZmZlci5idWYuYnVmOworCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplOworCisJLyogRmlyc3QgaGVhZGVyLi4gKi8KKwlzdHJlYW0ubmV4dF9pbiA9ICh2b2lkICopaGRyOworCXN0cmVhbS5hdmFpbF9pbiA9IGhkcmxlbjsKKwl3aGlsZSAoZ2l0X2RlZmxhdGUoJnN0cmVhbSwgMCkgPT0gWl9PSykKKwkJOyAvKiBub3RoaW5nICovCisKKwkvKiBUaGVuIHRoZSBkYXRhIGl0c2VsZi4uICovCisJc3RyZWFtLm5leHRfaW4gPSB1bnBhY2tlZDsKKwlzdHJlYW0uYXZhaWxfaW4gPSBsZW47CisJd2hpbGUgKGdpdF9kZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKSA9PSBaX09LKQorCQk7IC8qIG5vdGhpbmcgKi8KKwlnaXRfZGVmbGF0ZV9lbmQoJnN0cmVhbSk7CisJZnJlZSh1bnBhY2tlZCk7CisKKwlyZXF1ZXN0LT5idWZmZXIuYnVmLmxlbiA9IHN0cmVhbS50b3RhbF9vdXQ7CisKKwlzdHJidWZfYWRkc3RyKCZidWYsICJEZXN0aW5hdGlvbjogIik7CisJYXBwZW5kX3JlbW90ZV9vYmplY3RfdXJsKCZidWYsIHJlcG8tPnVybCwgaGV4LCAwKTsKKwlyZXF1ZXN0LT5kZXN0ID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCWFwcGVuZF9yZW1vdGVfb2JqZWN0X3VybCgmYnVmLCByZXBvLT51cmwsIGhleCwgMCk7CisJc3RyYnVmX2FkZCgmYnVmLCByZXF1ZXN0LT5sb2NrLT50bXBmaWxlX3N1ZmZpeCwgdGhlX2hhc2hfYWxnby0+aGV4c3ogKyAxKTsKKwlyZXF1ZXN0LT51cmwgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX3Jlc3BvbnNlOworCXNsb3QtPmNhbGxiYWNrX2RhdGEgPSByZXF1ZXN0OworCWN1cmxfc2V0dXBfaHR0cChzbG90LT5jdXJsLCByZXF1ZXN0LT51cmwsIERBVl9QVVQsCisJCQkmcmVxdWVzdC0+YnVmZmVyLCBmd3JpdGVfbnVsbCk7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcmVxdWVzdC0+c2xvdCA9IHNsb3Q7CisJCXJlcXVlc3QtPnN0YXRlID0gUlVOX1BVVDsKKwl9IGVsc2UgeworCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7CisJCUZSRUVfQU5EX05VTEwocmVxdWVzdC0+dXJsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X21vdmUoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gaHR0cF9jb3B5X2RlZmF1bHRfaGVhZGVycygpOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX3Jlc3BvbnNlOworCXNsb3QtPmNhbGxiYWNrX2RhdGEgPSByZXF1ZXN0OworCWN1cmxfc2V0dXBfaHR0cF9nZXQoc2xvdC0+Y3VybCwgcmVxdWVzdC0+dXJsLCBEQVZfTU9WRSk7CisJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgcmVxdWVzdC0+ZGVzdCk7CisJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgIk92ZXJ3cml0ZTogVCIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBkYXZfaGVhZGVycyk7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcmVxdWVzdC0+c2xvdCA9IHNsb3Q7CisJCXJlcXVlc3QtPnN0YXRlID0gUlVOX01PVkU7CisJfSBlbHNlIHsKKwkJcmVxdWVzdC0+c3RhdGUgPSBBQk9SVEVEOworCQlGUkVFX0FORF9OVUxMKHJlcXVlc3QtPnVybCk7CisJfQorfQorCitzdGF0aWMgaW50IHJlZnJlc2hfbG9jayhzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2spCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOworCXN0cnVjdCBjdXJsX3NsaXN0ICpkYXZfaGVhZGVyczsKKwlpbnQgcmMgPSAwOworCisJbG9jay0+cmVmcmVzaGluZyA9IDE7CisKKwlkYXZfaGVhZGVycyA9IGdldF9kYXZfdG9rZW5faGVhZGVycyhsb2NrLCBEQVZfSEVBREVSX0lGIHwgREFWX0hFQURFUl9USU1FT1VUKTsKKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7CisJY3VybF9zZXR1cF9odHRwX2dldChzbG90LT5jdXJsLCBsb2NrLT51cmwsIERBVl9MT0NLKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiTE9DSyBIVFRQIGVycm9yICVsZFxuIiwKKwkJCQlyZXN1bHRzLmh0dHBfY29kZSk7CisJCX0gZWxzZSB7CisJCQlsb2NrLT5zdGFydF90aW1lID0gdGltZShOVUxMKTsKKwkJCXJjID0gMTsKKwkJfQorCX0KKworCWxvY2stPnJlZnJlc2hpbmcgPSAwOworCWN1cmxfc2xpc3RfZnJlZV9hbGwoZGF2X2hlYWRlcnMpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBjaGVja19sb2Nrcyh2b2lkKQoreworCXN0cnVjdCByZW1vdGVfbG9jayAqbG9jayA9IHJlcG8tPmxvY2tzOworCXRpbWVfdCBjdXJyZW50X3RpbWUgPSB0aW1lKE5VTEwpOworCWludCB0aW1lX3JlbWFpbmluZzsKKworCXdoaWxlIChsb2NrKSB7CisJCXRpbWVfcmVtYWluaW5nID0gbG9jay0+c3RhcnRfdGltZSArIGxvY2stPnRpbWVvdXQgLQorCQkJY3VycmVudF90aW1lOworCQlpZiAoIWxvY2stPnJlZnJlc2hpbmcgJiYgdGltZV9yZW1haW5pbmcgPCBMT0NLX1JFRlJFU0gpIHsKKwkJCWlmICghcmVmcmVzaF9sb2NrKGxvY2spKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJVbmFibGUgdG8gcmVmcmVzaCBsb2NrIGZvciAlc1xuIiwKKwkJCQkJbG9jay0+dXJsKTsKKwkJCQlhYm9ydGVkID0gMTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJbG9jayA9IGxvY2stPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX3JlcXVlc3Qoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKmVudHJ5ID0gcmVxdWVzdF9xdWV1ZV9oZWFkOworCisJaWYgKHJlcXVlc3QgPT0gcmVxdWVzdF9xdWV1ZV9oZWFkKSB7CisJCXJlcXVlc3RfcXVldWVfaGVhZCA9IHJlcXVlc3QtPm5leHQ7CisJfSBlbHNlIHsKKwkJd2hpbGUgKGVudHJ5ICYmIGVudHJ5LT5uZXh0ICE9IHJlcXVlc3QpCisJCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCQlpZiAoZW50cnkpCisJCQllbnRyeS0+bmV4dCA9IHJlcXVlc3QtPm5leHQ7CisJfQorCisJZnJlZShyZXF1ZXN0LT51cmwpOworCWZyZWUocmVxdWVzdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9yZXF1ZXN0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqcHJlcTsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqb2JqX3JlcTsKKworCXJlcXVlc3QtPmN1cmxfcmVzdWx0ID0gcmVxdWVzdC0+c2xvdC0+Y3VybF9yZXN1bHQ7CisJcmVxdWVzdC0+aHR0cF9jb2RlID0gcmVxdWVzdC0+c2xvdC0+aHR0cF9jb2RlOworCXJlcXVlc3QtPnNsb3QgPSBOVUxMOworCisJLyogS2VlcCBsb2NrcyBhY3RpdmUgKi8KKwljaGVja19sb2NrcygpOworCisJaWYgKHJlcXVlc3QtPmhlYWRlcnMgIT0gTlVMTCkKKwkJY3VybF9zbGlzdF9mcmVlX2FsbChyZXF1ZXN0LT5oZWFkZXJzKTsKKworCS8qIFVSTCBpcyByZXVzZWQgZm9yIE1PVkUgYWZ0ZXIgUFVUIGFuZCB1c2VkIGR1cmluZyBGRVRDSCAqLworCWlmIChyZXF1ZXN0LT5zdGF0ZSAhPSBSVU5fUFVUICYmIHJlcXVlc3QtPnN0YXRlICE9IFJVTl9GRVRDSF9QQUNLRUQpIHsKKwkJRlJFRV9BTkRfTlVMTChyZXF1ZXN0LT51cmwpOworCX0KKworCWlmIChyZXF1ZXN0LT5zdGF0ZSA9PSBSVU5fTUtDT0wpIHsKKwkJaWYgKHJlcXVlc3QtPmN1cmxfcmVzdWx0ID09IENVUkxFX09LIHx8CisJCSAgICByZXF1ZXN0LT5odHRwX2NvZGUgPT0gNDA1KSB7CisJCQlyZW1vdGVfZGlyX2V4aXN0c1tyZXF1ZXN0LT5vYmotPm9pZC5oYXNoWzBdXSA9IDE7CisJCQlzdGFydF9wdXQocmVxdWVzdCk7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIk1LQ09MICVzIGZhaWxlZCwgYWJvcnRpbmcgKCVkLyVsZClcbiIsCisJCQkJb2lkX3RvX2hleCgmcmVxdWVzdC0+b2JqLT5vaWQpLAorCQkJCXJlcXVlc3QtPmN1cmxfcmVzdWx0LCByZXF1ZXN0LT5odHRwX2NvZGUpOworCQkJcmVxdWVzdC0+c3RhdGUgPSBBQk9SVEVEOworCQkJYWJvcnRlZCA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9QVVQpIHsKKwkJaWYgKHJlcXVlc3QtPmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7CisJCQlzdGFydF9tb3ZlKHJlcXVlc3QpOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsCSJQVVQgJXMgZmFpbGVkLCBhYm9ydGluZyAoJWQvJWxkKVxuIiwKKwkJCQlvaWRfdG9faGV4KCZyZXF1ZXN0LT5vYmotPm9pZCksCisJCQkJcmVxdWVzdC0+Y3VybF9yZXN1bHQsIHJlcXVlc3QtPmh0dHBfY29kZSk7CisJCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7CisJCQlhYm9ydGVkID0gMTsKKwkJfQorCX0gZWxzZSBpZiAocmVxdWVzdC0+c3RhdGUgPT0gUlVOX01PVkUpIHsKKwkJaWYgKHJlcXVlc3QtPmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7CisJCQlpZiAocHVzaF92ZXJib3NlbHkpCisJCQkJZnByaW50ZihzdGRlcnIsICIgICAgc2VudCAlc1xuIiwKKwkJCQkJb2lkX3RvX2hleCgmcmVxdWVzdC0+b2JqLT5vaWQpKTsKKwkJCXJlcXVlc3QtPm9iai0+ZmxhZ3MgfD0gUkVNT1RFOworCQkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJNT1ZFICVzIGZhaWxlZCwgYWJvcnRpbmcgKCVkLyVsZClcbiIsCisJCQkJb2lkX3RvX2hleCgmcmVxdWVzdC0+b2JqLT5vaWQpLAorCQkJCXJlcXVlc3QtPmN1cmxfcmVzdWx0LCByZXF1ZXN0LT5odHRwX2NvZGUpOworCQkJcmVxdWVzdC0+c3RhdGUgPSBBQk9SVEVEOworCQkJYWJvcnRlZCA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9GRVRDSF9MT09TRSkgeworCQlvYmpfcmVxID0gKHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICopcmVxdWVzdC0+dXNlckRhdGE7CisKKwkJaWYgKGZpbmlzaF9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpID09IDApCisJCQlpZiAob2JqX3JlcS0+cmVuYW1lID09IDApCisJCQkJcmVxdWVzdC0+b2JqLT5mbGFncyB8PSAoTE9DQUwgfCBSRU1PVEUpOworCisJCS8qIFRyeSBmZXRjaGluZyBwYWNrZWQgaWYgbmVjZXNzYXJ5ICovCisJCWlmIChyZXF1ZXN0LT5vYmotPmZsYWdzICYgTE9DQUwpIHsKKwkJCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKKwkJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKKwkJfSBlbHNlCisJCQlzdGFydF9mZXRjaF9wYWNrZWQocmVxdWVzdCk7CisKKwl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9GRVRDSF9QQUNLRUQpIHsKKwkJaW50IGZhaWwgPSAxOworCQlpZiAocmVxdWVzdC0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGdldCBwYWNrIGZpbGUgJXNcbiVzIiwKKwkJCQlyZXF1ZXN0LT51cmwsIGN1cmxfZXJyb3JzdHIpOworCQl9IGVsc2UgeworCQkJcHJlcSA9IChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKilyZXF1ZXN0LT51c2VyRGF0YTsKKworCQkJaWYgKHByZXEpIHsKKwkJCQlpZiAoZmluaXNoX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpID09IDApCisJCQkJCWZhaWwgPSAwOworCQkJCXJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CisJCQl9CisJCX0KKwkJaWYgKGZhaWwpCisJCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CisJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKKwl9Cit9CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorc3RhdGljIGludCBpc19ydW5uaW5nX3F1ZXVlOworc3RhdGljIGludCBmaWxsX2FjdGl2ZV9zbG90KHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKKworCWlmIChhYm9ydGVkIHx8ICFpc19ydW5uaW5nX3F1ZXVlKQorCQlyZXR1cm4gMDsKKworCWZvciAocmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKwkJaWYgKHJlcXVlc3QtPnN0YXRlID09IE5FRURfRkVUQ0gpIHsKKwkJCXN0YXJ0X2ZldGNoX2xvb3NlKHJlcXVlc3QpOworCQkJcmV0dXJuIDE7CisJCX0gZWxzZSBpZiAocHVzaGluZyAmJiByZXF1ZXN0LT5zdGF0ZSA9PSBORUVEX1BVU0gpIHsKKwkJCWlmIChyZW1vdGVfZGlyX2V4aXN0c1tyZXF1ZXN0LT5vYmotPm9pZC5oYXNoWzBdXSA9PSAxKSB7CisJCQkJc3RhcnRfcHV0KHJlcXVlc3QpOworCQkJfSBlbHNlIHsKKwkJCQlzdGFydF9ta2NvbChyZXF1ZXN0KTsKKwkJCX0KKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGdldF9yZW1vdGVfb2JqZWN0X2xpc3QodW5zaWduZWQgY2hhciBwYXJlbnQpOworCitzdGF0aWMgdm9pZCBhZGRfZmV0Y2hfcmVxdWVzdChzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3Q7CisKKwljaGVja19sb2NrcygpOworCisJLyoKKwkgKiBEb24ndCBmZXRjaCB0aGUgb2JqZWN0IGlmIGl0J3Mga25vd24gdG8gZXhpc3QgbG9jYWxseQorCSAqIG9yIGlzIGFscmVhZHkgaW4gdGhlIHJlcXVlc3QgcXVldWUKKwkgKi8KKwlpZiAocmVtb3RlX2Rpcl9leGlzdHNbb2JqLT5vaWQuaGFzaFswXV0gPT0gLTEpCisJCWdldF9yZW1vdGVfb2JqZWN0X2xpc3Qob2JqLT5vaWQuaGFzaFswXSk7CisJaWYgKG9iai0+ZmxhZ3MgJiAoTE9DQUwgfCBGRVRDSElORykpCisJCXJldHVybjsKKworCW9iai0+ZmxhZ3MgfD0gRkVUQ0hJTkc7CisJcmVxdWVzdCA9IHhtYWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KSk7CisJcmVxdWVzdC0+b2JqID0gb2JqOworCXJlcXVlc3QtPnVybCA9IE5VTEw7CisJcmVxdWVzdC0+bG9jayA9IE5VTEw7CisJcmVxdWVzdC0+aGVhZGVycyA9IE5VTEw7CisJcmVxdWVzdC0+c3RhdGUgPSBORUVEX0ZFVENIOworCXJlcXVlc3QtPm5leHQgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CisJcmVxdWVzdF9xdWV1ZV9oZWFkID0gcmVxdWVzdDsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJZmlsbF9hY3RpdmVfc2xvdHMoKTsKKwlzdGVwX2FjdGl2ZV9zbG90cygpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgYWRkX3NlbmRfcmVxdWVzdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0OworCisJLyogS2VlcCBsb2NrcyBhY3RpdmUgKi8KKwljaGVja19sb2NrcygpOworCisJLyoKKwkgKiBEb24ndCBwdXNoIHRoZSBvYmplY3QgaWYgaXQncyBrbm93biB0byBleGlzdCBvbiB0aGUgcmVtb3RlCisJICogb3IgaXMgYWxyZWFkeSBpbiB0aGUgcmVxdWVzdCBxdWV1ZQorCSAqLworCWlmIChyZW1vdGVfZGlyX2V4aXN0c1tvYmotPm9pZC5oYXNoWzBdXSA9PSAtMSkKKwkJZ2V0X3JlbW90ZV9vYmplY3RfbGlzdChvYmotPm9pZC5oYXNoWzBdKTsKKwlpZiAob2JqLT5mbGFncyAmIChSRU1PVEUgfCBQVVNISU5HKSkKKwkJcmV0dXJuIDA7CisJdGFyZ2V0ID0gZmluZF9zaGExX3BhY2sob2JqLT5vaWQuaGFzaCwgcmVwby0+cGFja3MpOworCWlmICh0YXJnZXQpIHsKKwkJb2JqLT5mbGFncyB8PSBSRU1PVEU7CisJCXJldHVybiAwOworCX0KKworCW9iai0+ZmxhZ3MgfD0gUFVTSElORzsKKwlyZXF1ZXN0ID0geG1hbGxvYyhzaXplb2YoKnJlcXVlc3QpKTsKKwlyZXF1ZXN0LT5vYmogPSBvYmo7CisJcmVxdWVzdC0+dXJsID0gTlVMTDsKKwlyZXF1ZXN0LT5sb2NrID0gbG9jazsKKwlyZXF1ZXN0LT5oZWFkZXJzID0gTlVMTDsKKwlyZXF1ZXN0LT5zdGF0ZSA9IE5FRURfUFVTSDsKKwlyZXF1ZXN0LT5uZXh0ID0gcmVxdWVzdF9xdWV1ZV9oZWFkOworCXJlcXVlc3RfcXVldWVfaGVhZCA9IHJlcXVlc3Q7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWZpbGxfYWN0aXZlX3Nsb3RzKCk7CisJc3RlcF9hY3RpdmVfc2xvdHMoKTsKKyNlbmRpZgorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfaW5kaWNlcyh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAocHVzaF92ZXJib3NlbHkpCisJCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBwYWNrIGxpc3RcbiIpOworCisJc3dpdGNoIChodHRwX2dldF9pbmZvX3BhY2tzKHJlcG8tPnVybCwgJnJlcG8tPnBhY2tzKSkgeworCWNhc2UgSFRUUF9PSzoKKwljYXNlIEhUVFBfTUlTU0lOR19UQVJHRVQ6CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC0xOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9uZV9yZW1vdGVfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwlvYmogPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCWlmICghb2JqKQorCQlvYmogPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CisKKwkvKiBJZ25vcmUgcmVtb3RlIG9iamVjdHMgdGhhdCBkb24ndCBleGlzdCBsb2NhbGx5ICovCisJaWYgKCFvYmopCisJCXJldHVybjsKKworCW9iai0+ZmxhZ3MgfD0gUkVNT1RFOworCWlmICghb2JqZWN0X2xpc3RfY29udGFpbnMob2JqZWN0cywgb2JqKSkKKwkJb2JqZWN0X2xpc3RfaW5zZXJ0KG9iaiwgJm9iamVjdHMpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbG9ja3Byb3BfY3R4KHN0cnVjdCB4bWxfY3R4ICpjdHgsIGludCB0YWdfY2xvc2VkKQoreworCWludCAqbG9ja19mbGFncyA9IChpbnQgKiljdHgtPnVzZXJEYXRhOworCisJaWYgKHRhZ19jbG9zZWQpIHsKKwkJaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfQ1RYX0xPQ0tFTlRSWSkpIHsKKwkJCWlmICgoKmxvY2tfZmxhZ3MgJiBEQVZfUFJPUF9MT0NLRVgpICYmCisJCQkgICAgKCpsb2NrX2ZsYWdzICYgREFWX1BST1BfTE9DS1dSKSkgeworCQkJCSpsb2NrX2ZsYWdzIHw9IERBVl9MT0NLX09LOworCQkJfQorCQkJKmxvY2tfZmxhZ3MgJj0gREFWX0xPQ0tfT0s7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9DVFhfTE9DS1RZUEVfV1JJVEUpKSB7CisJCQkqbG9ja19mbGFncyB8PSBEQVZfUFJPUF9MT0NLV1I7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9DVFhfTE9DS1RZUEVfRVhDTFVTSVZFKSkgeworCQkJKmxvY2tfZmxhZ3MgfD0gREFWX1BST1BfTE9DS0VYOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbmV3X2xvY2tfY3R4KHN0cnVjdCB4bWxfY3R4ICpjdHgsIGludCB0YWdfY2xvc2VkKQoreworCXN0cnVjdCByZW1vdGVfbG9jayAqbG9jayA9IChzdHJ1Y3QgcmVtb3RlX2xvY2sgKiljdHgtPnVzZXJEYXRhOworCWdpdF9oYXNoX2N0eCBoYXNoX2N0eDsKKwl1bnNpZ25lZCBjaGFyIGxvY2tfdG9rZW5faGFzaFtHSVRfTUFYX1JBV1NaXTsKKworCWlmICh0YWdfY2xvc2VkICYmIGN0eC0+Y2RhdGEpIHsKKwkJaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfQUNUSVZFTE9DS19PV05FUikpIHsKKwkJCWxvY2stPm93bmVyID0geHN0cmR1cChjdHgtPmNkYXRhKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGN0eC0+bmFtZSwgREFWX0FDVElWRUxPQ0tfVElNRU9VVCkpIHsKKwkJCWNvbnN0IGNoYXIgKmFyZzsKKwkJCWlmIChza2lwX3ByZWZpeChjdHgtPmNkYXRhLCAiU2Vjb25kLSIsICZhcmcpKQorCQkJCWxvY2stPnRpbWVvdXQgPSBzdHJ0b2woYXJnLCBOVUxMLCAxMCk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9BQ1RJVkVMT0NLX1RPS0VOKSkgeworCQkJbG9jay0+dG9rZW4gPSB4c3RyZHVwKGN0eC0+Y2RhdGEpOworCisJCQl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZoYXNoX2N0eCk7CisJCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmhhc2hfY3R4LCBsb2NrLT50b2tlbiwgc3RybGVuKGxvY2stPnRva2VuKSk7CisJCQl0aGVfaGFzaF9hbGdvLT5maW5hbF9mbihsb2NrX3Rva2VuX2hhc2gsICZoYXNoX2N0eCk7CisKKwkJCWxvY2stPnRtcGZpbGVfc3VmZml4WzBdID0gJ18nOworCQkJbWVtY3B5KGxvY2stPnRtcGZpbGVfc3VmZml4ICsgMSwgaGFzaF90b19oZXgobG9ja190b2tlbl9oYXNoKSwgdGhlX2hhc2hfYWxnby0+aGV4c3opOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBvbmVfcmVtb3RlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lKTsKKworc3RhdGljIHZvaWQKK3htbF9zdGFydF90YWcodm9pZCAqdXNlckRhdGEsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiphdHRzKQoreworCXN0cnVjdCB4bWxfY3R4ICpjdHggPSAoc3RydWN0IHhtbF9jdHggKil1c2VyRGF0YTsKKwljb25zdCBjaGFyICpjID0gc3RyY2hyKG5hbWUsICc6Jyk7CisJaW50IG9sZF9uYW1lbGVuLCBuZXdfbGVuOworCisJaWYgKGMgPT0gTlVMTCkKKwkJYyA9IG5hbWU7CisJZWxzZQorCQljKys7CisKKwlvbGRfbmFtZWxlbiA9IHN0cmxlbihjdHgtPm5hbWUpOworCW5ld19sZW4gPSBvbGRfbmFtZWxlbiArIHN0cmxlbihjKSArIDI7CisKKwlpZiAobmV3X2xlbiA+IGN0eC0+bGVuKSB7CisJCWN0eC0+bmFtZSA9IHhyZWFsbG9jKGN0eC0+bmFtZSwgbmV3X2xlbik7CisJCWN0eC0+bGVuID0gbmV3X2xlbjsKKwl9CisJeHNucHJpbnRmKGN0eC0+bmFtZSArIG9sZF9uYW1lbGVuLCBjdHgtPmxlbiAtIG9sZF9uYW1lbGVuLCAiLiVzIiwgYyk7CisKKwlGUkVFX0FORF9OVUxMKGN0eC0+Y2RhdGEpOworCisJY3R4LT51c2VyRnVuYyhjdHgsIDApOworfQorCitzdGF0aWMgdm9pZAoreG1sX2VuZF90YWcodm9pZCAqdXNlckRhdGEsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHhtbF9jdHggKmN0eCA9IChzdHJ1Y3QgeG1sX2N0eCAqKXVzZXJEYXRhOworCWNvbnN0IGNoYXIgKmMgPSBzdHJjaHIobmFtZSwgJzonKTsKKwljaGFyICplcDsKKworCWN0eC0+dXNlckZ1bmMoY3R4LCAxKTsKKworCWlmIChjID09IE5VTEwpCisJCWMgPSBuYW1lOworCWVsc2UKKwkJYysrOworCisJZXAgPSBjdHgtPm5hbWUgKyBzdHJsZW4oY3R4LT5uYW1lKSAtIHN0cmxlbihjKSAtIDE7CisJKmVwID0gMDsKK30KKworc3RhdGljIHZvaWQKK3htbF9jZGF0YSh2b2lkICp1c2VyRGF0YSwgY29uc3QgWE1MX0NoYXIgKnMsIGludCBsZW4pCit7CisJc3RydWN0IHhtbF9jdHggKmN0eCA9IChzdHJ1Y3QgeG1sX2N0eCAqKXVzZXJEYXRhOworCWZyZWUoY3R4LT5jZGF0YSk7CisJY3R4LT5jZGF0YSA9IHhtZW1kdXB6KHMsIGxlbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2tfcmVtb3RlKGNvbnN0IGNoYXIgKnBhdGgsIGxvbmcgdGltZW91dCkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IGJ1ZmZlciBvdXRfYnVmZmVyID0geyBTVFJCVUZfSU5JVCwgMCB9OworCXN0cnVjdCBzdHJidWYgaW5fYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqdXJsOworCWNoYXIgKmVwOworCWNoYXIgdGltZW91dF9oZWFkZXJbMjVdOworCXN0cnVjdCByZW1vdGVfbG9jayAqbG9jayA9IE5VTEw7CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gaHR0cF9jb3B5X2RlZmF1bHRfaGVhZGVycygpOworCXN0cnVjdCB4bWxfY3R4IGN0eDsKKwljaGFyICplc2NhcGVkOworCisJdXJsID0geHN0cmZtdCgiJXMlcyIsIHJlcG8tPnVybCwgcGF0aCk7CisKKwkvKiBNYWtlIHN1cmUgbGVhZGluZyBkaXJlY3RvcmllcyBleGlzdCBmb3IgdGhlIHJlbW90ZSByZWYgKi8KKwllcCA9IHN0cmNocih1cmwgKyBzdHJsZW4ocmVwby0+dXJsKSArIDEsICcvJyk7CisJd2hpbGUgKGVwKSB7CisJCWNoYXIgc2F2ZWRfY2hhcmFjdGVyID0gZXBbMV07CisJCWVwWzFdID0gJ1wwJzsKKwkJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCQlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7CisJCWN1cmxfc2V0dXBfaHR0cF9nZXQoc2xvdC0+Y3VybCwgdXJsLCBEQVZfTUtDT0wpOworCQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LICYmCisJCQkgICAgcmVzdWx0cy5odHRwX2NvZGUgIT0gNDA1KSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJVbmFibGUgdG8gY3JlYXRlIGJyYW5jaCBwYXRoICVzXG4iLAorCQkJCQl1cmwpOworCQkJCWZyZWUodXJsKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHN0YXJ0IE1LQ09MIHJlcXVlc3RcbiIpOworCQkJZnJlZSh1cmwpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJZXBbMV0gPSBzYXZlZF9jaGFyYWN0ZXI7CisJCWVwID0gc3RyY2hyKGVwICsgMSwgJy8nKTsKKwl9CisKKwllc2NhcGVkID0geG1sX2VudGl0aWVzKGlkZW50X2RlZmF1bHRfZW1haWwoKSk7CisJc3RyYnVmX2FkZGYoJm91dF9idWZmZXIuYnVmLCBMT0NLX1JFUVVFU1QsIGVzY2FwZWQpOworCWZyZWUoZXNjYXBlZCk7CisKKwl4c25wcmludGYodGltZW91dF9oZWFkZXIsIHNpemVvZih0aW1lb3V0X2hlYWRlciksICJUaW1lb3V0OiBTZWNvbmQtJWxkIiwgdGltZW91dCk7CisJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgdGltZW91dF9oZWFkZXIpOworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJDb250ZW50LVR5cGU6IHRleHQveG1sIik7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCWN1cmxfc2V0dXBfaHR0cChzbG90LT5jdXJsLCB1cmwsIERBVl9MT0NLLCAmb3V0X2J1ZmZlciwgZndyaXRlX2J1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmluX2J1ZmZlcik7CisKKwlsb2NrID0geGNhbGxvYygxLCBzaXplb2YoKmxvY2spKTsKKwlsb2NrLT50aW1lb3V0ID0gLTE7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCA9PSBDVVJMRV9PSykgeworCQkJWE1MX1BhcnNlciBwYXJzZXIgPSBYTUxfUGFyc2VyQ3JlYXRlKE5VTEwpOworCQkJZW51bSBYTUxfU3RhdHVzIHJlc3VsdDsKKwkJCWN0eC5uYW1lID0geGNhbGxvYygxMCwgMSk7CisJCQljdHgubGVuID0gMDsKKwkJCWN0eC5jZGF0YSA9IE5VTEw7CisJCQljdHgudXNlckZ1bmMgPSBoYW5kbGVfbmV3X2xvY2tfY3R4OworCQkJY3R4LnVzZXJEYXRhID0gbG9jazsKKwkJCVhNTF9TZXRVc2VyRGF0YShwYXJzZXIsICZjdHgpOworCQkJWE1MX1NldEVsZW1lbnRIYW5kbGVyKHBhcnNlciwgeG1sX3N0YXJ0X3RhZywKKwkJCQkJICAgICAgeG1sX2VuZF90YWcpOworCQkJWE1MX1NldENoYXJhY3RlckRhdGFIYW5kbGVyKHBhcnNlciwgeG1sX2NkYXRhKTsKKwkJCXJlc3VsdCA9IFhNTF9QYXJzZShwYXJzZXIsIGluX2J1ZmZlci5idWYsCisJCQkJCSAgIGluX2J1ZmZlci5sZW4sIDEpOworCQkJZnJlZShjdHgubmFtZSk7CisJCQlpZiAocmVzdWx0ICE9IFhNTF9TVEFUVVNfT0spIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlhNTCBlcnJvcjogJXNcbiIsCisJCQkJCVhNTF9FcnJvclN0cmluZygKKwkJCQkJCVhNTF9HZXRFcnJvckNvZGUocGFyc2VyKSkpOworCQkJCWxvY2stPnRpbWVvdXQgPSAtMTsKKwkJCX0KKwkJCVhNTF9QYXJzZXJGcmVlKHBhcnNlcik7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiZXJyb3I6IGN1cmwgcmVzdWx0PSVkLCBIVFRQIGNvZGU9JWxkXG4iLAorCQkJCXJlc3VsdHMuY3VybF9yZXN1bHQsIHJlc3VsdHMuaHR0cF9jb2RlKTsKKwkJfQorCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHN0YXJ0IExPQ0sgcmVxdWVzdFxuIik7CisJfQorCisJY3VybF9zbGlzdF9mcmVlX2FsbChkYXZfaGVhZGVycyk7CisJc3RyYnVmX3JlbGVhc2UoJm91dF9idWZmZXIuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmaW5fYnVmZmVyKTsKKworCWlmIChsb2NrLT50b2tlbiA9PSBOVUxMIHx8IGxvY2stPnRpbWVvdXQgPD0gMCkgeworCQlmcmVlKGxvY2stPnRva2VuKTsKKwkJZnJlZShsb2NrLT5vd25lcik7CisJCWZyZWUodXJsKTsKKwkJRlJFRV9BTkRfTlVMTChsb2NrKTsKKwl9IGVsc2UgeworCQlsb2NrLT51cmwgPSB1cmw7CisJCWxvY2stPnN0YXJ0X3RpbWUgPSB0aW1lKE5VTEwpOworCQlsb2NrLT5uZXh0ID0gcmVwby0+bG9ja3M7CisJCXJlcG8tPmxvY2tzID0gbG9jazsKKwl9CisKKwlyZXR1cm4gbG9jazsKK30KKworc3RhdGljIGludCB1bmxvY2tfcmVtb3RlKHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IHJlbW90ZV9sb2NrICpwcmV2ID0gcmVwby0+bG9ja3M7CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzOworCWludCByYyA9IDA7CisKKwlkYXZfaGVhZGVycyA9IGdldF9kYXZfdG9rZW5faGVhZGVycyhsb2NrLCBEQVZfSEVBREVSX0xPQ0spOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwljdXJsX3NldHVwX2h0dHBfZ2V0KHNsb3QtPmN1cmwsIGxvY2stPnVybCwgREFWX1VOTE9DSyk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ID09IENVUkxFX09LKQorCQkJcmMgPSAxOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIlVOTE9DSyBIVFRQIGVycm9yICVsZFxuIiwKKwkJCQlyZXN1bHRzLmh0dHBfY29kZSk7CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgVU5MT0NLIHJlcXVlc3RcbiIpOworCX0KKworCWN1cmxfc2xpc3RfZnJlZV9hbGwoZGF2X2hlYWRlcnMpOworCisJaWYgKHJlcG8tPmxvY2tzID09IGxvY2spIHsKKwkJcmVwby0+bG9ja3MgPSBsb2NrLT5uZXh0OworCX0gZWxzZSB7CisJCXdoaWxlIChwcmV2ICYmIHByZXYtPm5leHQgIT0gbG9jaykKKwkJCXByZXYgPSBwcmV2LT5uZXh0OworCQlpZiAocHJldikKKwkJCXByZXYtPm5leHQgPSBsb2NrLT5uZXh0OworCX0KKworCWZyZWUobG9jay0+b3duZXIpOworCWZyZWUobG9jay0+dXJsKTsKKwlmcmVlKGxvY2stPnRva2VuKTsKKwlmcmVlKGxvY2spOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfbG9ja3Modm9pZCkKK3sKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2sgPSByZXBvLT5sb2NrczsKKworCWZwcmludGYoc3RkZXJyLCAiUmVtb3ZpbmcgcmVtb3RlIGxvY2tzLi4uXG4iKTsKKwl3aGlsZSAobG9jaykgeworCQlzdHJ1Y3QgcmVtb3RlX2xvY2sgKm5leHQgPSBsb2NrLT5uZXh0OworCQl1bmxvY2tfcmVtb3RlKGxvY2spOworCQlsb2NrID0gbmV4dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9sb2Nrc19vbl9zaWduYWwoaW50IHNpZ25vKQoreworCXJlbW92ZV9sb2NrcygpOworCXNpZ2NoYWluX3BvcChzaWdubyk7CisJcmFpc2Uoc2lnbm8pOworfQorCitzdGF0aWMgdm9pZCByZW1vdGVfbHMoY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLAorCQkgICAgICB2b2lkICgqdXNlckZ1bmMpKHN0cnVjdCByZW1vdGVfbHNfY3R4ICpscyksCisJCSAgICAgIHZvaWQgKnVzZXJEYXRhKTsKKworLyogZXh0cmFjdCBoZXggZnJvbSBzaGFyZGVkICJ4eC94ezM4fSIgZmlsZW5hbWUgKi8KK3N0YXRpYyBpbnQgZ2V0X29pZF9oZXhfZnJvbV9vYmpwYXRoKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpZiAoc3RybGVuKHBhdGgpICE9IHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgMSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGhleF90b19ieXRlcyhvaWQtPmhhc2gsIHBhdGgsIDEpKQorCQlyZXR1cm4gLTE7CisJcGF0aCArPSAyOworCXBhdGgrKzsgLyogc2tpcCAnLycgKi8KKworCXJldHVybiBoZXhfdG9fYnl0ZXMob2lkLT5oYXNoICsgMSwgcGF0aCwgdGhlX2hhc2hfYWxnby0+cmF3c3ogLSAxKTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19sc19vYmplY3Qoc3RydWN0IHJlbW90ZV9sc19jdHggKmxzKQoreworCXVuc2lnbmVkIGludCAqcGFyZW50ID0gKHVuc2lnbmVkIGludCAqKWxzLT51c2VyRGF0YTsKKwljb25zdCBjaGFyICpwYXRoID0gbHMtPmRlbnRyeV9uYW1lOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJaWYgKCFzdHJjbXAobHMtPnBhdGgsIGxzLT5kZW50cnlfbmFtZSkgJiYgKGxzLT5mbGFncyAmIElTX0RJUikpIHsKKwkJcmVtb3RlX2Rpcl9leGlzdHNbKnBhcmVudF0gPSAxOworCQlyZXR1cm47CisJfQorCisJaWYgKCFza2lwX3ByZWZpeChwYXRoLCAib2JqZWN0cy8iLCAmcGF0aCkgfHwKKwkgICAgZ2V0X29pZF9oZXhfZnJvbV9vYmpwYXRoKHBhdGgsICZvaWQpKQorCQlyZXR1cm47CisKKwlvbmVfcmVtb3RlX29iamVjdCgmb2lkKTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19sc19yZWYoc3RydWN0IHJlbW90ZV9sc19jdHggKmxzKQoreworCWlmICghc3RyY21wKGxzLT5wYXRoLCBscy0+ZGVudHJ5X25hbWUpICYmIChscy0+ZGVudHJ5X2ZsYWdzICYgSVNfRElSKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiAgJXNcbiIsIGxzLT5kZW50cnlfbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIShscy0+ZGVudHJ5X2ZsYWdzICYgSVNfRElSKSkKKwkJb25lX3JlbW90ZV9yZWYobHMtPmRlbnRyeV9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3JlbW90ZV9sc19jdHgoc3RydWN0IHhtbF9jdHggKmN0eCwgaW50IHRhZ19jbG9zZWQpCit7CisJc3RydWN0IHJlbW90ZV9sc19jdHggKmxzID0gKHN0cnVjdCByZW1vdGVfbHNfY3R4ICopY3R4LT51c2VyRGF0YTsKKworCWlmICh0YWdfY2xvc2VkKSB7CisJCWlmICghc3RyY21wKGN0eC0+bmFtZSwgREFWX1BST1BGSU5EX1JFU1ApICYmIGxzLT5kZW50cnlfbmFtZSkgeworCQkJaWYgKGxzLT5kZW50cnlfZmxhZ3MgJiBJU19ESVIpIHsKKworCQkJCS8qIGVuc3VyZSBjb2xsZWN0aW9uIG5hbWVzIGVuZCB3aXRoIHNsYXNoICovCisJCQkJc3RyX2VuZF91cmxfd2l0aF9zbGFzaChscy0+ZGVudHJ5X25hbWUsICZscy0+ZGVudHJ5X25hbWUpOworCisJCQkJaWYgKGxzLT5mbGFncyAmIFBST0NFU1NfRElSUykgeworCQkJCQlscy0+dXNlckZ1bmMobHMpOworCQkJCX0KKwkJCQlpZiAoc3RyY21wKGxzLT5kZW50cnlfbmFtZSwgbHMtPnBhdGgpICYmCisJCQkJICAgIGxzLT5mbGFncyAmIFJFQ1VSU0lWRSkgeworCQkJCQlyZW1vdGVfbHMobHMtPmRlbnRyeV9uYW1lLAorCQkJCQkJICBscy0+ZmxhZ3MsCisJCQkJCQkgIGxzLT51c2VyRnVuYywKKwkJCQkJCSAgbHMtPnVzZXJEYXRhKTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGxzLT5mbGFncyAmIFBST0NFU1NfRklMRVMpIHsKKwkJCQlscy0+dXNlckZ1bmMobHMpOworCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfUFJPUEZJTkRfTkFNRSkgJiYgY3R4LT5jZGF0YSkgeworCQkJY2hhciAqcGF0aCA9IGN0eC0+Y2RhdGE7CisJCQlpZiAoKmN0eC0+Y2RhdGEgPT0gJ2gnKSB7CisJCQkJcGF0aCA9IHN0cnN0cihwYXRoLCAiLy8iKTsKKwkJCQlpZiAocGF0aCkgeworCQkJCQlwYXRoID0gc3RyY2hyKHBhdGgrMiwgJy8nKTsKKwkJCQl9CisJCQl9CisJCQlpZiAocGF0aCkgeworCQkJCWNvbnN0IGNoYXIgKnVybCA9IHJlcG8tPnVybDsKKwkJCQlpZiAocmVwby0+cGF0aCkKKwkJCQkJdXJsID0gcmVwby0+cGF0aDsKKwkJCQlpZiAoc3RybmNtcChwYXRoLCB1cmwsIHJlcG8tPnBhdGhfbGVuKSkKKwkJCQkJZXJyb3IoIlBhcnNlZCBwYXRoICclcycgZG9lcyBub3QgbWF0Y2ggdXJsOiAnJXMnIiwKKwkJCQkJICAgICAgcGF0aCwgdXJsKTsKKwkJCQllbHNlIHsKKwkJCQkJcGF0aCArPSByZXBvLT5wYXRoX2xlbjsKKwkJCQkJbHMtPmRlbnRyeV9uYW1lID0geHN0cmR1cChwYXRoKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9QUk9QRklORF9DT0xMRUNUSU9OKSkgeworCQkJbHMtPmRlbnRyeV9mbGFncyB8PSBJU19ESVI7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfUFJPUEZJTkRfUkVTUCkpIHsKKwkJRlJFRV9BTkRfTlVMTChscy0+ZGVudHJ5X25hbWUpOworCQlscy0+ZGVudHJ5X2ZsYWdzID0gMDsKKwl9Cit9CisKKy8qCisgKiBORUVEU1dPUks6IHJlbW90ZV9scygpIGlnbm9yZXMgaW5mby9yZWZzIG9uIHRoZSByZW1vdGUgc2lkZS4gIEJ1dCBpdAorICogc2hvdWxkIF9vbmx5XyBoZWVkIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoYXQgZmlsZSwgaW5zdGVhZCBvZiB0cnlpbmcgdG8KKyAqIGRldGVybWluZSB0aGUgcmVmcyBmcm9tIHRoZSByZW1vdGUgZmlsZSBzeXN0ZW0gKGJhZGx5OiBpdCBkb2VzIG5vdCBldmVuCisgKiBrbm93IGFib3V0IHBhY2tlZC1yZWZzKS4KKyAqLworc3RhdGljIHZvaWQgcmVtb3RlX2xzKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncywKKwkJICAgICAgdm9pZCAoKnVzZXJGdW5jKShzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMpLAorCQkgICAgICB2b2lkICp1c2VyRGF0YSkKK3sKKwljaGFyICp1cmwgPSB4c3RyZm10KCIlcyVzIiwgcmVwby0+dXJsLCBwYXRoKTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IHN0cmJ1ZiBpbl9idWZmZXIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgYnVmZmVyIG91dF9idWZmZXIgPSB7IFNUUkJVRl9JTklULCAwIH07CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gaHR0cF9jb3B5X2RlZmF1bHRfaGVhZGVycygpOworCXN0cnVjdCB4bWxfY3R4IGN0eDsKKwlzdHJ1Y3QgcmVtb3RlX2xzX2N0eCBsczsKKworCWxzLmZsYWdzID0gZmxhZ3M7CisJbHMucGF0aCA9IHhzdHJkdXAocGF0aCk7CisJbHMuZGVudHJ5X25hbWUgPSBOVUxMOworCWxzLmRlbnRyeV9mbGFncyA9IDA7CisJbHMudXNlckRhdGEgPSB1c2VyRGF0YTsKKwlscy51c2VyRnVuYyA9IHVzZXJGdW5jOworCisJc3RyYnVmX2FkZHN0cigmb3V0X2J1ZmZlci5idWYsIFBST1BGSU5EX0FMTF9SRVFVRVNUKTsKKworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJEZXB0aDogMSIpOworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJDb250ZW50LVR5cGU6IHRleHQveG1sIik7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCWN1cmxfc2V0dXBfaHR0cChzbG90LT5jdXJsLCB1cmwsIERBVl9QUk9QRklORCwKKwkJCSZvdXRfYnVmZmVyLCBmd3JpdGVfYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmaW5fYnVmZmVyKTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7CisJCQlYTUxfUGFyc2VyIHBhcnNlciA9IFhNTF9QYXJzZXJDcmVhdGUoTlVMTCk7CisJCQllbnVtIFhNTF9TdGF0dXMgcmVzdWx0OworCQkJY3R4Lm5hbWUgPSB4Y2FsbG9jKDEwLCAxKTsKKwkJCWN0eC5sZW4gPSAwOworCQkJY3R4LmNkYXRhID0gTlVMTDsKKwkJCWN0eC51c2VyRnVuYyA9IGhhbmRsZV9yZW1vdGVfbHNfY3R4OworCQkJY3R4LnVzZXJEYXRhID0gJmxzOworCQkJWE1MX1NldFVzZXJEYXRhKHBhcnNlciwgJmN0eCk7CisJCQlYTUxfU2V0RWxlbWVudEhhbmRsZXIocGFyc2VyLCB4bWxfc3RhcnRfdGFnLAorCQkJCQkgICAgICB4bWxfZW5kX3RhZyk7CisJCQlYTUxfU2V0Q2hhcmFjdGVyRGF0YUhhbmRsZXIocGFyc2VyLCB4bWxfY2RhdGEpOworCQkJcmVzdWx0ID0gWE1MX1BhcnNlKHBhcnNlciwgaW5fYnVmZmVyLmJ1ZiwKKwkJCQkJICAgaW5fYnVmZmVyLmxlbiwgMSk7CisJCQlmcmVlKGN0eC5uYW1lKTsKKworCQkJaWYgKHJlc3VsdCAhPSBYTUxfU1RBVFVTX09LKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJYTUwgZXJyb3I6ICVzXG4iLAorCQkJCQlYTUxfRXJyb3JTdHJpbmcoCisJCQkJCQlYTUxfR2V0RXJyb3JDb2RlKHBhcnNlcikpKTsKKwkJCX0KKwkJCVhNTF9QYXJzZXJGcmVlKHBhcnNlcik7CisJCX0KKwl9IGVsc2UgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzdGFydCBQUk9QRklORCByZXF1ZXN0XG4iKTsKKwl9CisKKwlmcmVlKGxzLnBhdGgpOworCWZyZWUodXJsKTsKKwlzdHJidWZfcmVsZWFzZSgmb3V0X2J1ZmZlci5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZpbl9idWZmZXIpOworCWN1cmxfc2xpc3RfZnJlZV9hbGwoZGF2X2hlYWRlcnMpOworfQorCitzdGF0aWMgdm9pZCBnZXRfcmVtb3RlX29iamVjdF9saXN0KHVuc2lnbmVkIGNoYXIgcGFyZW50KQoreworCWNoYXIgcGF0aFtdID0gIm9iamVjdHMvWFgvIjsKKwlzdGF0aWMgY29uc3QgY2hhciBoZXhbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKwl1bnNpZ25lZCBpbnQgdmFsID0gcGFyZW50OworCisJcGF0aFs4XSA9IGhleFt2YWwgPj4gNF07CisJcGF0aFs5XSA9IGhleFt2YWwgJiAweGZdOworCXJlbW90ZV9kaXJfZXhpc3RzW3ZhbF0gPSAwOworCXJlbW90ZV9scyhwYXRoLCAoUFJPQ0VTU19GSUxFUyB8IFBST0NFU1NfRElSUyksCisJCSAgcHJvY2Vzc19sc19vYmplY3QsICZ2YWwpOworfQorCitzdGF0aWMgaW50IGxvY2tpbmdfYXZhaWxhYmxlKHZvaWQpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOworCXN0cnVjdCBzdHJidWYgaW5fYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGJ1ZmZlciBvdXRfYnVmZmVyID0geyBTVFJCVUZfSU5JVCwgMCB9OworCXN0cnVjdCBjdXJsX3NsaXN0ICpkYXZfaGVhZGVycyA9IGh0dHBfY29weV9kZWZhdWx0X2hlYWRlcnMoKTsKKwlzdHJ1Y3QgeG1sX2N0eCBjdHg7CisJaW50IGxvY2tfZmxhZ3MgPSAwOworCWNoYXIgKmVzY2FwZWQ7CisKKwllc2NhcGVkID0geG1sX2VudGl0aWVzKHJlcG8tPnVybCk7CisJc3RyYnVmX2FkZGYoJm91dF9idWZmZXIuYnVmLCBQUk9QRklORF9TVVBQT1JURURMT0NLX1JFUVVFU1QsIGVzY2FwZWQpOworCWZyZWUoZXNjYXBlZCk7CisKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCAiRGVwdGg6IDAiKTsKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCAiQ29udGVudC1UeXBlOiB0ZXh0L3htbCIpOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwljdXJsX3NldHVwX2h0dHAoc2xvdC0+Y3VybCwgcmVwby0+dXJsLCBEQVZfUFJPUEZJTkQsCisJCQkmb3V0X2J1ZmZlciwgZndyaXRlX2J1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmluX2J1ZmZlcik7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCA9PSBDVVJMRV9PSykgeworCQkJWE1MX1BhcnNlciBwYXJzZXIgPSBYTUxfUGFyc2VyQ3JlYXRlKE5VTEwpOworCQkJZW51bSBYTUxfU3RhdHVzIHJlc3VsdDsKKwkJCWN0eC5uYW1lID0geGNhbGxvYygxMCwgMSk7CisJCQljdHgubGVuID0gMDsKKwkJCWN0eC5jZGF0YSA9IE5VTEw7CisJCQljdHgudXNlckZ1bmMgPSBoYW5kbGVfbG9ja3Byb3BfY3R4OworCQkJY3R4LnVzZXJEYXRhID0gJmxvY2tfZmxhZ3M7CisJCQlYTUxfU2V0VXNlckRhdGEocGFyc2VyLCAmY3R4KTsKKwkJCVhNTF9TZXRFbGVtZW50SGFuZGxlcihwYXJzZXIsIHhtbF9zdGFydF90YWcsCisJCQkJCSAgICAgIHhtbF9lbmRfdGFnKTsKKwkJCXJlc3VsdCA9IFhNTF9QYXJzZShwYXJzZXIsIGluX2J1ZmZlci5idWYsCisJCQkJCSAgIGluX2J1ZmZlci5sZW4sIDEpOworCQkJZnJlZShjdHgubmFtZSk7CisKKwkJCWlmIChyZXN1bHQgIT0gWE1MX1NUQVRVU19PSykgeworCQkJCWZwcmludGYoc3RkZXJyLCAiWE1MIGVycm9yOiAlc1xuIiwKKwkJCQkJWE1MX0Vycm9yU3RyaW5nKAorCQkJCQkJWE1MX0dldEVycm9yQ29kZShwYXJzZXIpKSk7CisJCQkJbG9ja19mbGFncyA9IDA7CisJCQl9CisJCQlYTUxfUGFyc2VyRnJlZShwYXJzZXIpOworCQkJaWYgKCFsb2NrX2ZsYWdzKQorCQkJCWVycm9yKCJubyBEQVYgbG9ja2luZyBzdXBwb3J0IG9uICVzIiwKKwkJCQkgICAgICByZXBvLT51cmwpOworCisJCX0gZWxzZSB7CisJCQllcnJvcigiQ2Fubm90IGFjY2VzcyBVUkwgJXMsIHJldHVybiBjb2RlICVkIiwKKwkJCSAgICAgIHJlcG8tPnVybCwgcmVzdWx0cy5jdXJsX3Jlc3VsdCk7CisJCQlsb2NrX2ZsYWdzID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWVycm9yKCJVbmFibGUgdG8gc3RhcnQgUFJPUEZJTkQgcmVxdWVzdCBvbiAlcyIsIHJlcG8tPnVybCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJm91dF9idWZmZXIuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmaW5fYnVmZmVyKTsKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKGRhdl9oZWFkZXJzKTsKKworCXJldHVybiBsb2NrX2ZsYWdzOworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdF9saXN0ICoqYWRkX29uZV9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKipwKQoreworCXN0cnVjdCBvYmplY3RfbGlzdCAqZW50cnkgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2xpc3QpKTsKKwllbnRyeS0+aXRlbSA9IG9iajsKKwllbnRyeS0+bmV4dCA9ICpwOworCSpwID0gZW50cnk7CisJcmV0dXJuICZlbnRyeS0+bmV4dDsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfbGlzdCAqKnByb2Nlc3NfYmxvYihzdHJ1Y3QgYmxvYiAqYmxvYiwKKwkJCQkJIHN0cnVjdCBvYmplY3RfbGlzdCAqKnApCit7CisJc3RydWN0IG9iamVjdCAqb2JqID0gJmJsb2ItPm9iamVjdDsKKworCW9iai0+ZmxhZ3MgfD0gTE9DQUw7CisKKwlpZiAob2JqLT5mbGFncyAmIChVTklOVEVSRVNUSU5HIHwgU0VFTikpCisJCXJldHVybiBwOworCisJb2JqLT5mbGFncyB8PSBTRUVOOworCXJldHVybiBhZGRfb25lX29iamVjdChvYmosIHApOworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdF9saXN0ICoqcHJvY2Vzc190cmVlKHN0cnVjdCB0cmVlICp0cmVlLAorCQkJCQkgc3RydWN0IG9iamVjdF9saXN0ICoqcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmdHJlZS0+b2JqZWN0OworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKworCW9iai0+ZmxhZ3MgfD0gTE9DQUw7CisKKwlpZiAob2JqLT5mbGFncyAmIChVTklOVEVSRVNUSU5HIHwgU0VFTikpCisJCXJldHVybiBwOworCWlmIChwYXJzZV90cmVlKHRyZWUpIDwgMCkKKwkJZGllKCJiYWQgdHJlZSBvYmplY3QgJXMiLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCisJb2JqLT5mbGFncyB8PSBTRUVOOworCXAgPSBhZGRfb25lX29iamVjdChvYmosIHApOworCisJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisKKwl3aGlsZSAodHJlZV9lbnRyeSgmZGVzYywgJmVudHJ5KSkKKwkJc3dpdGNoIChvYmplY3RfdHlwZShlbnRyeS5tb2RlKSkgeworCQljYXNlIE9CSl9UUkVFOgorCQkJcCA9IHByb2Nlc3NfdHJlZShsb29rdXBfdHJlZSh0aGVfcmVwb3NpdG9yeSwgJmVudHJ5Lm9pZCksCisJCQkJCSBwKTsKKwkJCWJyZWFrOworCQljYXNlIE9CSl9CTE9COgorCQkJcCA9IHByb2Nlc3NfYmxvYihsb29rdXBfYmxvYih0aGVfcmVwb3NpdG9yeSwgJmVudHJ5Lm9pZCksCisJCQkJCSBwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogU3VicHJvamVjdCBjb21taXQgLSBub3QgaW4gdGhpcyByZXBvc2l0b3J5ICovCisJCQlicmVhazsKKwkJfQorCisJZnJlZV90cmVlX2J1ZmZlcih0cmVlKTsKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIGludCBnZXRfZGVsdGEoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2spCit7CisJaW50IGk7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBvYmplY3RfbGlzdCAqKnAgPSAmb2JqZWN0czsKKwlpbnQgY291bnQgPSAwOworCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ocmV2cykpICE9IE5VTEwpIHsKKwkJcCA9IHByb2Nlc3NfdHJlZShnZXRfY29tbWl0X3RyZWUoY29tbWl0KSwgcCk7CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IExPQ0FMOworCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpKQorCQkJY291bnQgKz0gYWRkX3NlbmRfcmVxdWVzdCgmY29tbWl0LT5vYmplY3QsIGxvY2spOworCX0KKworCWZvciAoaSA9IDA7IGkgPCByZXZzLT5wZW5kaW5nLm5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZW50cnkgPSByZXZzLT5wZW5kaW5nLm9iamVjdHMgKyBpOworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBlbnRyeS0+aXRlbTsKKwkJY29uc3QgY2hhciAqbmFtZSA9IGVudHJ5LT5uYW1lOworCisJCWlmIChvYmotPmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBTRUVOKSkKKwkJCWNvbnRpbnVlOworCQlpZiAob2JqLT50eXBlID09IE9CSl9UQUcpIHsKKwkJCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKwkJCXAgPSBhZGRfb25lX29iamVjdChvYmosIHApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG9iai0+dHlwZSA9PSBPQkpfVFJFRSkgeworCQkJcCA9IHByb2Nlc3NfdHJlZSgoc3RydWN0IHRyZWUgKilvYmosIHApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG9iai0+dHlwZSA9PSBPQkpfQkxPQikgeworCQkJcCA9IHByb2Nlc3NfYmxvYigoc3RydWN0IGJsb2IgKilvYmosIHApOworCQkJY29udGludWU7CisJCX0KKwkJZGllKCJ1bmtub3duIHBlbmRpbmcgb2JqZWN0ICVzICglcykiLCBvaWRfdG9faGV4KCZvYmotPm9pZCksIG5hbWUpOworCX0KKworCXdoaWxlIChvYmplY3RzKSB7CisJCWlmICghKG9iamVjdHMtPml0ZW0tPmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQljb3VudCArPSBhZGRfc2VuZF9yZXF1ZXN0KG9iamVjdHMtPml0ZW0sIGxvY2spOworCQlvYmplY3RzID0gb2JqZWN0cy0+bmV4dDsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX3JlbW90ZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IGJ1ZmZlciBvdXRfYnVmZmVyID0geyBTVFJCVUZfSU5JVCwgMCB9OworCXN0cnVjdCBjdXJsX3NsaXN0ICpkYXZfaGVhZGVyczsKKworCWRhdl9oZWFkZXJzID0gZ2V0X2Rhdl90b2tlbl9oZWFkZXJzKGxvY2ssIERBVl9IRUFERVJfSUYpOworCisJc3RyYnVmX2FkZGYoJm91dF9idWZmZXIuYnVmLCAiJXNcbiIsIG9pZF90b19oZXgob2lkKSk7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCWN1cmxfc2V0dXBfaHR0cChzbG90LT5jdXJsLCBsb2NrLT51cmwsIERBVl9QVVQsCisJCQkmb3V0X2J1ZmZlciwgZndyaXRlX251bGwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBkYXZfaGVhZGVycyk7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQlzdHJidWZfcmVsZWFzZSgmb3V0X2J1ZmZlci5idWYpOworCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlBVVCBlcnJvcjogY3VybCByZXN1bHQ9JWQsIEhUVFAgY29kZT0lbGRcbiIsCisJCQkJcmVzdWx0cy5jdXJsX3Jlc3VsdCwgcmVzdWx0cy5odHRwX2NvZGUpOworCQkJLyogV2Ugc2hvdWxkIGF0dGVtcHQgcmVjb3Zlcnk/ICovCisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvdXRfYnVmZmVyLmJ1Zik7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHN0YXJ0IFBVVCByZXF1ZXN0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmczsKKworc3RhdGljIHZvaWQgb25lX3JlbW90ZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlzdHJ1Y3QgcmVmICpyZWY7CisJc3RydWN0IG9iamVjdCAqb2JqOworCisJcmVmID0gYWxsb2NfcmVmKHJlZm5hbWUpOworCisJaWYgKGh0dHBfZmV0Y2hfcmVmKHJlcG8tPnVybCwgcmVmKSAhPSAwKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIlVuYWJsZSB0byBmZXRjaCByZWYgJXMgZnJvbSAlc1xuIiwKKwkJCXJlZm5hbWUsIHJlcG8tPnVybCk7CisJCWZyZWUocmVmKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogRmV0Y2ggYSBjb3B5IG9mIHRoZSBvYmplY3QgaWYgaXQgZG9lc24ndCBleGlzdCBsb2NhbGx5IC0gaXQKKwkgKiBtYXkgYmUgcmVxdWlyZWQgZm9yIHVwZGF0aW5nIHNlcnZlciBpbmZvIGxhdGVyLgorCSAqLworCWlmIChyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyAmJiAhaGFzX29iamVjdF9maWxlKCZyZWYtPm9sZF9vaWQpKSB7CisJCW9iaiA9IGxvb2t1cF91bmtub3duX29iamVjdCgmcmVmLT5vbGRfb2lkKTsKKwkJZnByaW50ZihzdGRlcnIsCSIgIGZldGNoICVzIGZvciAlc1xuIiwKKwkJCW9pZF90b19oZXgoJnJlZi0+b2xkX29pZCksIHJlZm5hbWUpOworCQlhZGRfZmV0Y2hfcmVxdWVzdChvYmopOworCX0KKworCXJlZi0+bmV4dCA9IHJlbW90ZV9yZWZzOworCXJlbW90ZV9yZWZzID0gcmVmOworfQorCitzdGF0aWMgdm9pZCBnZXRfZGF2X3JlbW90ZV9oZWFkcyh2b2lkKQoreworCXJlbW90ZV9scygicmVmcy8iLCAoUFJPQ0VTU19GSUxFUyB8IFBST0NFU1NfRElSUyB8IFJFQ1VSU0lWRSksIHByb2Nlc3NfbHNfcmVmLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgYWRkX3JlbW90ZV9pbmZvX3JlZihzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMpCit7CisJc3RydWN0IHN0cmJ1ZiAqYnVmID0gKHN0cnVjdCBzdHJidWYgKilscy0+dXNlckRhdGE7CisJc3RydWN0IG9iamVjdCAqbzsKKwlzdHJ1Y3QgcmVmICpyZWY7CisKKwlyZWYgPSBhbGxvY19yZWYobHMtPmRlbnRyeV9uYW1lKTsKKworCWlmIChodHRwX2ZldGNoX3JlZihyZXBvLT51cmwsIHJlZikgIT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJVbmFibGUgdG8gZmV0Y2ggcmVmICVzIGZyb20gJXNcbiIsCisJCQlscy0+ZGVudHJ5X25hbWUsIHJlcG8tPnVybCk7CisJCWFib3J0ZWQgPSAxOworCQlmcmVlKHJlZik7CisJCXJldHVybjsKKwl9CisKKwlvID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmcmVmLT5vbGRfb2lkKTsKKwlpZiAoIW8pIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiVW5hYmxlIHRvIHBhcnNlIG9iamVjdCAlcyBmb3IgcmVtb3RlIHJlZiAlc1xuIiwKKwkJCW9pZF90b19oZXgoJnJlZi0+b2xkX29pZCksIGxzLT5kZW50cnlfbmFtZSk7CisJCWFib3J0ZWQgPSAxOworCQlmcmVlKHJlZik7CisJCXJldHVybjsKKwl9CisKKwlzdHJidWZfYWRkZihidWYsICIlc1x0JXNcbiIsCisJCSAgICBvaWRfdG9faGV4KCZyZWYtPm9sZF9vaWQpLCBscy0+ZGVudHJ5X25hbWUpOworCisJaWYgKG8tPnR5cGUgPT0gT0JKX1RBRykgeworCQlvID0gZGVyZWZfdGFnKHRoZV9yZXBvc2l0b3J5LCBvLCBscy0+ZGVudHJ5X25hbWUsIDApOworCQlpZiAobykKKwkJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzXHQlc157fVxuIiwKKwkJCQkgICAgb2lkX3RvX2hleCgmby0+b2lkKSwgbHMtPmRlbnRyeV9uYW1lKTsKKwl9CisJZnJlZShyZWYpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfcmVtb3RlX2luZm9fcmVmcyhzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2spCit7CisJc3RydWN0IGJ1ZmZlciBidWZmZXIgPSB7IFNUUkJVRl9JTklULCAwIH07CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOworCXN0cnVjdCBjdXJsX3NsaXN0ICpkYXZfaGVhZGVyczsKKworCXJlbW90ZV9scygicmVmcy8iLCAoUFJPQ0VTU19GSUxFUyB8IFJFQ1VSU0lWRSksCisJCSAgYWRkX3JlbW90ZV9pbmZvX3JlZiwgJmJ1ZmZlci5idWYpOworCWlmICghYWJvcnRlZCkgeworCQlkYXZfaGVhZGVycyA9IGdldF9kYXZfdG9rZW5faGVhZGVycyhsb2NrLCBEQVZfSEVBREVSX0lGKTsKKworCQlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwkJY3VybF9zZXR1cF9odHRwKHNsb3QtPmN1cmwsIGxvY2stPnVybCwgREFWX1BVVCwKKwkJCQkmYnVmZmVyLCBmd3JpdGVfbnVsbCk7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBkYXZfaGVhZGVycyk7CisKKwkJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkiUFVUIGVycm9yOiBjdXJsIHJlc3VsdD0lZCwgSFRUUCBjb2RlPSVsZFxuIiwKKwkJCQkJcmVzdWx0cy5jdXJsX3Jlc3VsdCwgcmVzdWx0cy5odHRwX2NvZGUpOworCQkJfQorCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIuYnVmKTsKK30KKworc3RhdGljIGludCByZW1vdGVfZXhpc3RzKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hhciAqdXJsID0geHN0cmZtdCgiJXMlcyIsIHJlcG8tPnVybCwgcGF0aCk7CisJaW50IHJldDsKKworCisJc3dpdGNoIChodHRwX2dldF9zdHJidWYodXJsLCBOVUxMLCBOVUxMKSkgeworCWNhc2UgSFRUUF9PSzoKKwkJcmV0ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBIVFRQX01JU1NJTkdfVEFSR0VUOgorCQlyZXQgPSAwOworCQlicmVhazsKKwljYXNlIEhUVFBfRVJST1I6CisJCWVycm9yKCJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIiwgdXJsLCBjdXJsX2Vycm9yc3RyKTsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlyZXQgPSAtMTsKKwl9CisJZnJlZSh1cmwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGZldGNoX3N5bXJlZihjb25zdCBjaGFyICpwYXRoLCBjaGFyICoqc3ltcmVmLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJY2hhciAqdXJsID0geHN0cmZtdCgiJXMlcyIsIHJlcG8tPnVybCwgcGF0aCk7CisJc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpuYW1lOworCisJaWYgKGh0dHBfZ2V0X3N0cmJ1Zih1cmwsICZidWZmZXIsIE5VTEwpICE9IEhUVFBfT0spCisJCWRpZSgiQ291bGRuJ3QgZ2V0ICVzIGZvciByZW1vdGUgc3ltcmVmXG4lcyIsIHVybCwKKwkJICAgIGN1cmxfZXJyb3JzdHIpOworCWZyZWUodXJsKTsKKworCUZSRUVfQU5EX05VTEwoKnN5bXJlZik7CisJb2lkY2xyKG9pZCk7CisKKwlpZiAoYnVmZmVyLmxlbiA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBDdXQgb2ZmIHRyYWlsaW5nIG5ld2xpbmUuICovCisJc3RyYnVmX3J0cmltKCZidWZmZXIpOworCisJLyogSWYgaXQncyBhIHN5bXJlZiwgc2V0IHRoZSByZWZuYW1lOyBvdGhlcndpc2UgdHJ5IGZvciBhIHNoYTEgKi8KKwlpZiAoc2tpcF9wcmVmaXgoYnVmZmVyLmJ1ZiwgInJlZjogIiwgJm5hbWUpKSB7CisJCSpzeW1yZWYgPSB4bWVtZHVweihuYW1lLCBidWZmZXIubGVuIC0gKG5hbWUgLSBidWZmZXIuYnVmKSk7CisJfSBlbHNlIHsKKwkJZ2V0X29pZF9oZXgoYnVmZmVyLmJ1Ziwgb2lkKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfbWVyZ2VfYmFzZShzdHJ1Y3Qgb2JqZWN0X2lkICpoZWFkX29pZCwgc3RydWN0IHJlZiAqcmVtb3RlKQoreworCXN0cnVjdCBjb21taXQgKmhlYWQgPSBsb29rdXBfY29tbWl0X29yX2RpZShoZWFkX29pZCwgIkhFQUQiKTsKKwlzdHJ1Y3QgY29tbWl0ICpicmFuY2ggPSBsb29rdXBfY29tbWl0X29yX2RpZSgmcmVtb3RlLT5vbGRfb2lkLAorCQkJCQkJICAgICByZW1vdGUtPm5hbWUpOworCisJcmV0dXJuIGluX21lcmdlX2Jhc2VzKGJyYW5jaCwgaGVhZCk7Cit9CisKK3N0YXRpYyBpbnQgZGVsZXRlX3JlbW90ZV9icmFuY2goY29uc3QgY2hhciAqcGF0dGVybiwgaW50IGZvcmNlKQoreworCXN0cnVjdCByZWYgKnJlZnMgPSByZW1vdGVfcmVmczsKKwlzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmID0gTlVMTDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWRfb2lkOworCWNoYXIgKnN5bXJlZiA9IE5VTEw7CisJaW50IG1hdGNoOworCWludCBwYXRsZW4gPSBzdHJsZW4ocGF0dGVybik7CisJaW50IGk7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOworCWNoYXIgKnVybDsKKworCS8qIEZpbmQgdGhlIHJlbW90ZSBicmFuY2goZXMpIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgYnJhbmNoIG5hbWUgKi8KKwlmb3IgKG1hdGNoID0gMDsgcmVmczsgcmVmcyA9IHJlZnMtPm5leHQpIHsKKwkJY2hhciAqbmFtZSA9IHJlZnMtPm5hbWU7CisJCWludCBuYW1lbGVuID0gc3RybGVuKG5hbWUpOworCQlpZiAobmFtZWxlbiA8IHBhdGxlbiB8fAorCQkgICAgbWVtY21wKG5hbWUgKyBuYW1lbGVuIC0gcGF0bGVuLCBwYXR0ZXJuLCBwYXRsZW4pKQorCQkJY29udGludWU7CisJCWlmIChuYW1lbGVuICE9IHBhdGxlbiAmJiBuYW1lW25hbWVsZW4gLSBwYXRsZW4gLSAxXSAhPSAnLycpCisJCQljb250aW51ZTsKKwkJbWF0Y2grKzsKKwkJcmVtb3RlX3JlZiA9IHJlZnM7CisJfQorCWlmIChtYXRjaCA9PSAwKQorCQlyZXR1cm4gZXJyb3IoIk5vIHJlbW90ZSBicmFuY2ggbWF0Y2hlcyAlcyIsIHBhdHRlcm4pOworCWlmIChtYXRjaCAhPSAxKQorCQlyZXR1cm4gZXJyb3IoIk1vcmUgdGhhbiBvbmUgcmVtb3RlIGJyYW5jaCBtYXRjaGVzICVzIiwKKwkJCSAgICAgcGF0dGVybik7CisKKwkvKgorCSAqIFJlbW90ZSBIRUFEIG11c3QgYmUgYSBzeW1yZWYgKG5vdCBleGFjdGx5IGZvb2xwcm9vZjsgYSByZW1vdGUKKwkgKiBzeW1saW5rIHRvIGEgc3ltcmVmIHdpbGwgbG9vayBsaWtlIGEgc3ltcmVmKQorCSAqLworCWZldGNoX3N5bXJlZigiSEVBRCIsICZzeW1yZWYsICZoZWFkX29pZCk7CisJaWYgKCFzeW1yZWYpCisJCXJldHVybiBlcnJvcigiUmVtb3RlIEhFQUQgaXMgbm90IGEgc3ltcmVmIik7CisKKwkvKiBSZW1vdGUgYnJhbmNoIG11c3Qgbm90IGJlIHRoZSByZW1vdGUgSEVBRCAqLworCWZvciAoaSA9IDA7IHN5bXJlZiAmJiBpIDwgTUFYREVQVEg7IGkrKykgeworCQlpZiAoIXN0cmNtcChyZW1vdGVfcmVmLT5uYW1lLCBzeW1yZWYpKQorCQkJcmV0dXJuIGVycm9yKCJSZW1vdGUgYnJhbmNoICVzIGlzIHRoZSBjdXJyZW50IEhFQUQiLAorCQkJCSAgICAgcmVtb3RlX3JlZi0+bmFtZSk7CisJCWZldGNoX3N5bXJlZihzeW1yZWYsICZzeW1yZWYsICZoZWFkX29pZCk7CisJfQorCisJLyogUnVuIGV4dHJhIHNhbml0eSBjaGVja3MgaWYgZGVsZXRlIGlzIG5vdCBmb3JjZWQgKi8KKwlpZiAoIWZvcmNlKSB7CisJCS8qIFJlbW90ZSBIRUFEIG11c3QgcmVzb2x2ZSB0byBhIGtub3duIG9iamVjdCAqLworCQlpZiAoc3ltcmVmKQorCQkJcmV0dXJuIGVycm9yKCJSZW1vdGUgSEVBRCBzeW1yZWZzIHRvbyBkZWVwIik7CisJCWlmIChpc19udWxsX29pZCgmaGVhZF9vaWQpKQorCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSByZW1vdGUgSEVBRCIpOworCQlpZiAoIWhhc19vYmplY3RfZmlsZSgmaGVhZF9vaWQpKQorCQkJcmV0dXJuIGVycm9yKCJSZW1vdGUgSEVBRCByZXNvbHZlcyB0byBvYmplY3QgJXNcbndoaWNoIGRvZXMgbm90IGV4aXN0IGxvY2FsbHksIHBlcmhhcHMgeW91IG5lZWQgdG8gZmV0Y2g/Iiwgb2lkX3RvX2hleCgmaGVhZF9vaWQpKTsKKworCQkvKiBSZW1vdGUgYnJhbmNoIG11c3QgcmVzb2x2ZSB0byBhIGtub3duIG9iamVjdCAqLworCQlpZiAoaXNfbnVsbF9vaWQoJnJlbW90ZV9yZWYtPm9sZF9vaWQpKQorCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSByZW1vdGUgYnJhbmNoICVzIiwKKwkJCQkgICAgIHJlbW90ZV9yZWYtPm5hbWUpOworCQlpZiAoIWhhc19vYmplY3RfZmlsZSgmcmVtb3RlX3JlZi0+b2xkX29pZCkpCisJCQlyZXR1cm4gZXJyb3IoIlJlbW90ZSBicmFuY2ggJXMgcmVzb2x2ZXMgdG8gb2JqZWN0ICVzXG53aGljaCBkb2VzIG5vdCBleGlzdCBsb2NhbGx5LCBwZXJoYXBzIHlvdSBuZWVkIHRvIGZldGNoPyIsIHJlbW90ZV9yZWYtPm5hbWUsIG9pZF90b19oZXgoJnJlbW90ZV9yZWYtPm9sZF9vaWQpKTsKKworCQkvKiBSZW1vdGUgYnJhbmNoIG11c3QgYmUgYW4gYW5jZXN0b3Igb2YgcmVtb3RlIEhFQUQgKi8KKwkJaWYgKCF2ZXJpZnlfbWVyZ2VfYmFzZSgmaGVhZF9vaWQsIHJlbW90ZV9yZWYpKSB7CisJCQlyZXR1cm4gZXJyb3IoIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgYW4gYW5jZXN0b3IgIgorCQkJCSAgICAgIm9mIHlvdXIgY3VycmVudCBIRUFELlxuIgorCQkJCSAgICAgIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIgorCQkJCSAgICAgIiBydW46XG5cdCdnaXQgaHR0cC1wdXNoIC1EICVzICVzJyIsCisJCQkJICAgICByZW1vdGVfcmVmLT5uYW1lLCByZXBvLT51cmwsIHBhdHRlcm4pOworCQl9CisJfQorCisJLyogU2VuZCBkZWxldGUgcmVxdWVzdCAqLworCWZwcmludGYoc3RkZXJyLCAiUmVtb3ZpbmcgcmVtb3RlIGJyYW5jaCAnJXMnXG4iLCByZW1vdGVfcmVmLT5uYW1lKTsKKwlpZiAoZHJ5X3J1bikKKwkJcmV0dXJuIDA7CisJdXJsID0geHN0cmZtdCgiJXMlcyIsIHJlcG8tPnVybCwgcmVtb3RlX3JlZi0+bmFtZSk7CisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwljdXJsX3NldHVwX2h0dHBfZ2V0KHNsb3QtPmN1cmwsIHVybCwgREFWX0RFTEVURSk7CisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJZnJlZSh1cmwpOworCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykKKwkJCXJldHVybiBlcnJvcigiREVMRVRFIHJlcXVlc3QgZmFpbGVkICglZC8lbGQpIiwKKwkJCQkgICAgIHJlc3VsdHMuY3VybF9yZXN1bHQsIHJlc3VsdHMuaHR0cF9jb2RlKTsKKwl9IGVsc2UgeworCQlmcmVlKHVybCk7CisJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IERFTEVURSByZXF1ZXN0Iik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9yZXF1ZXN0X3F1ZXVlKHZvaWQpCit7CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwlpc19ydW5uaW5nX3F1ZXVlID0gMTsKKwlmaWxsX2FjdGl2ZV9zbG90cygpOworCWFkZF9maWxsX2Z1bmN0aW9uKE5VTEwsIGZpbGxfYWN0aXZlX3Nsb3QpOworI2VuZGlmCisJZG8geworCQlmaW5pc2hfYWxsX2FjdGl2ZV9zbG90cygpOworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJCWZpbGxfYWN0aXZlX3Nsb3RzKCk7CisjZW5kaWYKKwl9IHdoaWxlIChyZXF1ZXN0X3F1ZXVlX2hlYWQgJiYgIWFib3J0ZWQpOworCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwlpc19ydW5uaW5nX3F1ZXVlID0gMDsKKyNlbmRpZgorfQorCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0OworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpuZXh0X3JlcXVlc3Q7CisJc3RydWN0IHJlZnNwZWMgcnMgPSBSRUZTUEVDX0lOSVRfUFVTSDsKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKnJlZl9sb2NrID0gTlVMTDsKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKmluZm9fcmVmX2xvY2sgPSBOVUxMOworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCWludCBkZWxldGVfYnJhbmNoID0gMDsKKwlpbnQgZm9yY2VfZGVsZXRlID0gMDsKKwlpbnQgb2JqZWN0c190b19zZW5kOworCWludCByYyA9IDA7CisJaW50IGk7CisJaW50IG5ld19yZWZzOworCXN0cnVjdCByZWYgKnJlZiwgKmxvY2FsX3JlZnM7CisKKwlyZXBvID0geGNhbGxvYygxLCBzaXplb2YoKnJlcG8pKTsKKworCWFyZ3YrKzsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrLCBhcmd2KyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gKmFyZ3Y7CisKKwkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCQkJcHVzaF9hbGwgPSBNQVRDSF9SRUZTX0FMTDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tZm9yY2UiKSkgeworCQkJCWZvcmNlX2FsbCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWRyeS1ydW4iKSkgeworCQkJCWRyeV9ydW4gPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1oZWxwZXItc3RhdHVzIikpIHsKKwkJCQloZWxwZXJfc3RhdHVzID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tdmVyYm9zZSIpKSB7CisJCQkJcHVzaF92ZXJib3NlbHkgPSAxOworCQkJCWh0dHBfaXNfdmVyYm9zZSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItZCIpKSB7CisJCQkJZGVsZXRlX2JyYW5jaCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItRCIpKSB7CisJCQkJZGVsZXRlX2JyYW5jaCA9IDE7CisJCQkJZm9yY2VfZGVsZXRlID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi1oIikpCisJCQkJdXNhZ2UoaHR0cF9wdXNoX3VzYWdlKTsKKwkJfQorCQlpZiAoIXJlcG8tPnVybCkgeworCQkJY2hhciAqcGF0aCA9IHN0cnN0cihhcmcsICIvLyIpOworCQkJc3RyX2VuZF91cmxfd2l0aF9zbGFzaChhcmcsICZyZXBvLT51cmwpOworCQkJcmVwby0+cGF0aF9sZW4gPSBzdHJsZW4ocmVwby0+dXJsKTsKKwkJCWlmIChwYXRoKSB7CisJCQkJcmVwby0+cGF0aCA9IHN0cmNocihwYXRoKzIsICcvJyk7CisJCQkJaWYgKHJlcG8tPnBhdGgpCisJCQkJCXJlcG8tPnBhdGhfbGVuID0gc3RybGVuKHJlcG8tPnBhdGgpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJcmVmc3BlY19hcHBlbmRuKCZycywgYXJndiwgYXJnYyAtIGkpOworCQlicmVhazsKKwl9CisKKyNpZm5kZWYgVVNFX0NVUkxfTVVMVEkKKwlkaWUoImdpdC1wdXNoIGlzIG5vdCBhdmFpbGFibGUgZm9yIGh0dHAvaHR0cHMgcmVwb3NpdG9yeSB3aGVuIG5vdCBjb21waWxlZCB3aXRoIFVTRV9DVVJMX01VTFRJIik7CisjZW5kaWYKKworCWlmICghcmVwby0+dXJsKQorCQl1c2FnZShodHRwX3B1c2hfdXNhZ2UpOworCisJaWYgKGRlbGV0ZV9icmFuY2ggJiYgcnMubnIgIT0gMSkKKwkJZGllKCJZb3UgbXVzdCBzcGVjaWZ5IG9ubHkgb25lIGJyYW5jaCBuYW1lIHdoZW4gZGVsZXRpbmcgYSByZW1vdGUgYnJhbmNoIik7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisKKwltZW1zZXQocmVtb3RlX2Rpcl9leGlzdHMsIC0xLCAyNTYpOworCisJaHR0cF9pbml0KE5VTEwsIHJlcG8tPnVybCwgMSk7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlzX3J1bm5pbmdfcXVldWUgPSAwOworI2VuZGlmCisKKwkvKiBWZXJpZnkgREFWIGNvbXBsaWFuY2UvbG9jayBzdXBwb3J0ICovCisJaWYgKCFsb2NraW5nX2F2YWlsYWJsZSgpKSB7CisJCXJjID0gMTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXNpZ2NoYWluX3B1c2hfY29tbW9uKHJlbW92ZV9sb2Nrc19vbl9zaWduYWwpOworCisJLyogQ2hlY2sgd2hldGhlciB0aGUgcmVtb3RlIGhhcyBzZXJ2ZXIgaW5mbyBmaWxlcyAqLworCXJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzID0gMDsKKwlyZXBvLT5oYXNfaW5mb19yZWZzID0gcmVtb3RlX2V4aXN0cygiaW5mby9yZWZzIik7CisJcmVwby0+aGFzX2luZm9fcGFja3MgPSByZW1vdGVfZXhpc3RzKCJvYmplY3RzL2luZm8vcGFja3MiKTsKKwlpZiAocmVwby0+aGFzX2luZm9fcmVmcykgeworCQlpbmZvX3JlZl9sb2NrID0gbG9ja19yZW1vdGUoImluZm8vcmVmcyIsIExPQ0tfVElNRSk7CisJCWlmIChpbmZvX3JlZl9sb2NrKQorCQkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAxOworCQllbHNlIHsKKwkJCWVycm9yKCJjYW5ub3QgbG9jayBleGlzdGluZyBpbmZvL3JlZnMiKTsKKwkJCXJjID0gMTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKwlpZiAocmVwby0+aGFzX2luZm9fcGFja3MpCisJCWZldGNoX2luZGljZXMoKTsKKworCS8qIEdldCBhIGxpc3Qgb2YgYWxsIGxvY2FsIGFuZCByZW1vdGUgaGVhZHMgdG8gdmFsaWRhdGUgcmVmc3BlY3MgKi8KKwlsb2NhbF9yZWZzID0gZ2V0X2xvY2FsX2hlYWRzKCk7CisJZnByaW50ZihzdGRlcnIsICJGZXRjaGluZyByZW1vdGUgaGVhZHMuLi5cbiIpOworCWdldF9kYXZfcmVtb3RlX2hlYWRzKCk7CisJcnVuX3JlcXVlc3RfcXVldWUoKTsKKworCS8qIFJlbW92ZSBhIHJlbW90ZSBicmFuY2ggaWYgLWQgb3IgLUQgd2FzIHNwZWNpZmllZCAqLworCWlmIChkZWxldGVfYnJhbmNoKSB7CisJCWNvbnN0IGNoYXIgKmJyYW5jaCA9IHJzLml0ZW1zW2ldLnNyYzsKKwkJaWYgKGRlbGV0ZV9yZW1vdGVfYnJhbmNoKGJyYW5jaCwgZm9yY2VfZGVsZXRlKSA9PSAtMSkgeworCQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZGVsZXRlIHJlbW90ZSBicmFuY2ggJXNcbiIsCisJCQkJYnJhbmNoKTsKKwkJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJCXByaW50ZigiZXJyb3IgJXMgY2Fubm90IHJlbW92ZVxuIiwgYnJhbmNoKTsKKwkJfQorCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogbWF0Y2ggdGhlbSB1cCAqLworCWlmIChtYXRjaF9wdXNoX3JlZnMobG9jYWxfcmVmcywgJnJlbW90ZV9yZWZzLCAmcnMsIHB1c2hfYWxsKSkgeworCQlyYyA9IC0xOworCQlnb3RvIGNsZWFudXA7CisJfQorCWlmICghcmVtb3RlX3JlZnMpIHsKKwkJZnByaW50ZihzdGRlcnIsICJObyByZWZzIGluIGNvbW1vbiBhbmQgbm9uZSBzcGVjaWZpZWQ7IGRvaW5nIG5vdGhpbmcuXG4iKTsKKwkJaWYgKGhlbHBlcl9zdGF0dXMpCisJCQlwcmludGYoImVycm9yIG51bGwgbm8gbWF0Y2hcbiIpOworCQlyYyA9IDA7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwluZXdfcmVmcyA9IDA7CisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgY29tbWl0X2FyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwkJaWYgKCFyZWYtPnBlZXJfcmVmKQorCQkJY29udGludWU7CisKKwkJaWYgKGlzX251bGxfb2lkKCZyZWYtPnBlZXJfcmVmLT5uZXdfb2lkKSkgeworCQkJaWYgKGRlbGV0ZV9yZW1vdGVfYnJhbmNoKHJlZi0+bmFtZSwgMSkgPT0gLTEpIHsKKwkJCQllcnJvcigiQ291bGQgbm90IHJlbW92ZSAlcyIsIHJlZi0+bmFtZSk7CisJCQkJaWYgKGhlbHBlcl9zdGF0dXMpCisJCQkJCXByaW50ZigiZXJyb3IgJXMgY2Fubm90IHJlbW92ZVxuIiwgcmVmLT5uYW1lKTsKKwkJCQlyYyA9IC00OworCQkJfQorCQkJZWxzZSBpZiAoaGVscGVyX3N0YXR1cykKKwkJCQlwcmludGYoIm9rICVzXG4iLCByZWYtPm5hbWUpOworCQkJbmV3X3JlZnMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKG9pZGVxKCZyZWYtPm9sZF9vaWQsICZyZWYtPnBlZXJfcmVmLT5uZXdfb2lkKSkgeworCQkJaWYgKHB1c2hfdmVyYm9zZWx5KQorCQkJCWZwcmludGYoc3RkZXJyLCAiJyVzJzogdXAtdG8tZGF0ZVxuIiwgcmVmLT5uYW1lKTsKKwkJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJCXByaW50Zigib2sgJXMgdXAgdG8gZGF0ZVxuIiwgcmVmLT5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFmb3JjZV9hbGwgJiYKKwkJICAgICFpc19udWxsX29pZCgmcmVmLT5vbGRfb2lkKSAmJgorCQkgICAgIXJlZi0+Zm9yY2UpIHsKKwkJCWlmICghaGFzX29iamVjdF9maWxlKCZyZWYtPm9sZF9vaWQpIHx8CisJCQkgICAgIXJlZl9uZXdlcigmcmVmLT5wZWVyX3JlZi0+bmV3X29pZCwKKwkJCQkgICAgICAgJnJlZi0+b2xkX29pZCkpIHsKKwkJCQkvKgorCQkJCSAqIFdlIGRvIG5vdCBoYXZlIHRoZSByZW1vdGUgcmVmLCBvcgorCQkJCSAqIHdlIGtub3cgdGhhdCB0aGUgcmVtb3RlIHJlZiBpcyBub3QKKwkJCQkgKiBhbiBhbmNlc3RvciBvZiB3aGF0IHdlIGFyZSB0cnlpbmcgdG8KKwkJCQkgKiBwdXNoLiAgRWl0aGVyIHdheSB0aGlzIGNhbiBiZSBsb3NpbmcKKwkJCQkgKiBjb21taXRzIGF0IHRoZSByZW1vdGUgZW5kIGFuZCBsaWtlbHkKKwkJCQkgKiB3ZSB3ZXJlIG5vdCB1cCB0byBkYXRlIHRvIGJlZ2luIHdpdGguCisJCQkJICovCisJCQkJZXJyb3IoInJlbW90ZSAnJXMnIGlzIG5vdCBhbiBhbmNlc3RvciBvZlxuIgorCQkJCSAgICAgICJsb2NhbCAnJXMnLlxuIgorCQkJCSAgICAgICJNYXliZSB5b3UgYXJlIG5vdCB1cC10by1kYXRlIGFuZCAiCisJCQkJICAgICAgIm5lZWQgdG8gcHVsbCBmaXJzdD8iLAorCQkJCSAgICAgIHJlZi0+bmFtZSwKKwkJCQkgICAgICByZWYtPnBlZXJfcmVmLT5uYW1lKTsKKwkJCQlpZiAoaGVscGVyX3N0YXR1cykKKwkJCQkJcHJpbnRmKCJlcnJvciAlcyBub24tZmFzdCBmb3J3YXJkXG4iLCByZWYtPm5hbWUpOworCQkJCXJjID0gLTI7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJb2lkY3B5KCZyZWYtPm5ld19vaWQsICZyZWYtPnBlZXJfcmVmLT5uZXdfb2lkKTsKKwkJbmV3X3JlZnMrKzsKKworCQlmcHJpbnRmKHN0ZGVyciwgInVwZGF0aW5nICclcyciLCByZWYtPm5hbWUpOworCQlpZiAoc3RyY21wKHJlZi0+bmFtZSwgcmVmLT5wZWVyX3JlZi0+bmFtZSkpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiB1c2luZyAnJXMnIiwgcmVmLT5wZWVyX3JlZi0+bmFtZSk7CisJCWZwcmludGYoc3RkZXJyLCAiXG4gIGZyb20gJXNcbiAgdG8gICAlc1xuIiwKKwkJCW9pZF90b19oZXgoJnJlZi0+b2xkX29pZCksIG9pZF90b19oZXgoJnJlZi0+bmV3X29pZCkpOworCQlpZiAoZHJ5X3J1bikgeworCQkJaWYgKGhlbHBlcl9zdGF0dXMpCisJCQkJcHJpbnRmKCJvayAlc1xuIiwgcmVmLT5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogTG9jayByZW1vdGUgYnJhbmNoIHJlZiAqLworCQlyZWZfbG9jayA9IGxvY2tfcmVtb3RlKHJlZi0+bmFtZSwgTE9DS19USU1FKTsKKwkJaWYgKHJlZl9sb2NrID09IE5VTEwpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGxvY2sgcmVtb3RlIGJyYW5jaCAlc1xuIiwKKwkJCQlyZWYtPm5hbWUpOworCQkJaWYgKGhlbHBlcl9zdGF0dXMpCisJCQkJcHJpbnRmKCJlcnJvciAlcyBsb2NrIGVycm9yXG4iLCByZWYtPm5hbWUpOworCQkJcmMgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBTZXQgdXAgcmV2aXNpb24gaW5mbyBmb3IgdGhpcyByZWZzcGVjICovCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY29tbWl0X2FyZ3YsICIiKTsgLyogaWdub3JlZCAqLworCQlhcmd2X2FycmF5X3B1c2goJmNvbW1pdF9hcmd2LCAiLS1vYmplY3RzIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY29tbWl0X2FyZ3YsIG9pZF90b19oZXgoJnJlZi0+bmV3X29pZCkpOworCQlpZiAoIXB1c2hfYWxsICYmICFpc19udWxsX29pZCgmcmVmLT5vbGRfb2lkKSkKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNvbW1pdF9hcmd2LCAiXiVzIiwKKwkJCQkJIG9pZF90b19oZXgoJnJlZi0+b2xkX29pZCkpOworCQlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2cywgc2V0dXBfZ2l0X2RpcmVjdG9yeSgpKTsKKwkJc2V0dXBfcmV2aXNpb25zKGNvbW1pdF9hcmd2LmFyZ2MsIGNvbW1pdF9hcmd2LmFyZ3YsICZyZXZzLCBOVUxMKTsKKwkJcmV2cy5lZGdlX2hpbnQgPSAwOyAvKiBqdXN0IGluIGNhc2UgKi8KKworCQkvKiBHZW5lcmF0ZSBhIGxpc3Qgb2Ygb2JqZWN0cyB0aGF0IG5lZWQgdG8gYmUgcHVzaGVkICovCisJCXB1c2hpbmcgPSAwOworCQlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKKwkJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwkJbWFya19lZGdlc191bmludGVyZXN0aW5nKCZyZXZzLCBOVUxMLCAwKTsKKwkJb2JqZWN0c190b19zZW5kID0gZ2V0X2RlbHRhKCZyZXZzLCByZWZfbG9jayk7CisJCWZpbmlzaF9hbGxfYWN0aXZlX3Nsb3RzKCk7CisKKwkJLyogUHVzaCBtaXNzaW5nIG9iamVjdHMgdG8gcmVtb3RlLCB0aGlzIHdvdWxkIGJlIGEKKwkJICAgY29udmVuaWVudCB0aW1lIHRvIHBhY2sgdGhlbSBmaXJzdCBpZiBhcHByb3ByaWF0ZS4gKi8KKwkJcHVzaGluZyA9IDE7CisJCWlmIChvYmplY3RzX3RvX3NlbmQpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICBzZW5kaW5nICVkIG9iamVjdHNcbiIsCisJCQkJb2JqZWN0c190b19zZW5kKTsKKworCQlydW5fcmVxdWVzdF9xdWV1ZSgpOworCisJCS8qIFVwZGF0ZSB0aGUgcmVtb3RlIGJyYW5jaCBpZiBhbGwgd2VudCB3ZWxsICovCisJCWlmIChhYm9ydGVkIHx8ICF1cGRhdGVfcmVtb3RlKCZyZWYtPm5ld19vaWQsIHJlZl9sb2NrKSkKKwkJCXJjID0gMTsKKworCQlpZiAoIXJjKQorCQkJZnByaW50ZihzdGRlcnIsICIgICAgZG9uZVxuIik7CisJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJcHJpbnRmKCIlcyAlc1xuIiwgIXJjID8gIm9rIiA6ICJlcnJvciIsIHJlZi0+bmFtZSk7CisJCXVubG9ja19yZW1vdGUocmVmX2xvY2spOworCQljaGVja19sb2NrcygpOworCQlhcmd2X2FycmF5X2NsZWFyKCZjb21taXRfYXJndik7CisJfQorCisJLyogVXBkYXRlIHJlbW90ZSBzZXJ2ZXIgaW5mbyBpZiBhcHByb3ByaWF0ZSAqLworCWlmIChyZXBvLT5oYXNfaW5mb19yZWZzICYmIG5ld19yZWZzKSB7CisJCWlmIChpbmZvX3JlZl9sb2NrICYmIHJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVwZGF0aW5nIHJlbW90ZSBzZXJ2ZXIgaW5mb1xuIik7CisJCQlpZiAoIWRyeV9ydW4pCisJCQkJdXBkYXRlX3JlbW90ZV9pbmZvX3JlZnMoaW5mb19yZWZfbG9jayk7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byB1cGRhdGUgc2VydmVyIGluZm9cbiIpOworCQl9CisJfQorCisgY2xlYW51cDoKKwlpZiAoaW5mb19yZWZfbG9jaykKKwkJdW5sb2NrX3JlbW90ZShpbmZvX3JlZl9sb2NrKTsKKwlmcmVlKHJlcG8pOworCisJaHR0cF9jbGVhbnVwKCk7CisKKwlyZXF1ZXN0ID0gcmVxdWVzdF9xdWV1ZV9oZWFkOworCXdoaWxlIChyZXF1ZXN0ICE9IE5VTEwpIHsKKwkJbmV4dF9yZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dDsKKwkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCQlyZXF1ZXN0ID0gbmV4dF9yZXF1ZXN0OworCX0KKworCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL2h0dHAtd2Fsa2VyLmMgYi9odHRwLXdhbGtlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMTVlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9odHRwLXdhbGtlci5jCkBAIC0wLDAgKzEsNjMwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAid2Fsa2VyLmgiCisjaW5jbHVkZSAiaHR0cC5oIgorI2luY2x1ZGUgImxpc3QuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorCitzdHJ1Y3QgYWx0X2Jhc2UgeworCWNoYXIgKmJhc2U7CisJaW50IGdvdF9pbmRpY2VzOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrczsKKwlzdHJ1Y3QgYWx0X2Jhc2UgKm5leHQ7Cit9OworCitlbnVtIG9iamVjdF9yZXF1ZXN0X3N0YXRlIHsKKwlXQUlUSU5HLAorCUFCT1JURUQsCisJQUNUSVZFLAorCUNPTVBMRVRFCit9OworCitzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgeworCXN0cnVjdCB3YWxrZXIgKndhbGtlcjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG87CisJZW51bSBvYmplY3RfcmVxdWVzdF9zdGF0ZSBzdGF0ZTsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKK307CisKK3N0cnVjdCBhbHRlcm5hdGVzX3JlcXVlc3QgeworCXN0cnVjdCB3YWxrZXIgKndhbGtlcjsKKwljb25zdCBjaGFyICpiYXNlOworCXN0cnVjdCBzdHJidWYgKnVybDsKKwlzdHJ1Y3Qgc3RyYnVmICpidWZmZXI7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJaW50IGh0dHBfc3BlY2lmaWM7Cit9OworCitzdHJ1Y3Qgd2Fsa2VyX2RhdGEgeworCWNvbnN0IGNoYXIgKnVybDsKKwlpbnQgZ290X2FsdGVybmF0ZXM7CisJc3RydWN0IGFsdF9iYXNlICphbHQ7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKG9iamVjdF9xdWV1ZV9oZWFkKTsKKworc3RhdGljIHZvaWQgZmV0Y2hfYWx0ZXJuYXRlcyhzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNvbnN0IGNoYXIgKmJhc2UpOworCitzdGF0aWMgdm9pZCBwcm9jZXNzX29iamVjdF9yZXNwb25zZSh2b2lkICpjYWxsYmFja19kYXRhKTsKKworc3RhdGljIHZvaWQgc3RhcnRfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IHdhbGtlciAqd2Fsa2VyLAorCQkJCSBzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKnJlcTsKKworCXJlcSA9IG5ld19odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcG8tPmJhc2UsICZvYmpfcmVxLT5vaWQpOworCWlmIChyZXEgPT0gTlVMTCkgeworCQlvYmpfcmVxLT5zdGF0ZSA9IEFCT1JURUQ7CisJCXJldHVybjsKKwl9CisJb2JqX3JlcS0+cmVxID0gcmVxOworCisJc2xvdCA9IHJlcS0+c2xvdDsKKwlzbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19vYmplY3RfcmVzcG9uc2U7CisJc2xvdC0+Y2FsbGJhY2tfZGF0YSA9IG9ial9yZXE7CisKKwkvKiBUcnkgdG8gZ2V0IHRoZSByZXF1ZXN0IHN0YXJ0ZWQsIGFib3J0IHRoZSByZXF1ZXN0IG9uIGVycm9yICovCisJb2JqX3JlcS0+c3RhdGUgPSBBQ1RJVkU7CisJaWYgKCFzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlvYmpfcmVxLT5zdGF0ZSA9IEFCT1JURUQ7CisJCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChyZXEpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxKQoreworCWlmIChmaW5pc2hfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxLT5yZXEpKQorCQlyZXR1cm47CisKKwlpZiAob2JqX3JlcS0+cmVxLT5yZW5hbWUgPT0gMCkKKwkJd2Fsa2VyX3NheShvYmpfcmVxLT53YWxrZXIsICJnb3QgJXNcbiIsIG9pZF90b19oZXgoJm9ial9yZXEtPm9pZCkpOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX29iamVjdF9yZXNwb25zZSh2b2lkICpjYWxsYmFja19kYXRhKQoreworCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqb2JqX3JlcSA9CisJCShzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKiljYWxsYmFja19kYXRhOworCXN0cnVjdCB3YWxrZXIgKndhbGtlciA9IG9ial9yZXEtPndhbGtlcjsKKwlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7CisJc3RydWN0IGFsdF9iYXNlICphbHQgPSBkYXRhLT5hbHQ7CisKKwlwcm9jZXNzX2h0dHBfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcS0+cmVxKTsKKwlvYmpfcmVxLT5zdGF0ZSA9IENPTVBMRVRFOworCisJbm9ybWFsaXplX2N1cmxfcmVzdWx0KCZvYmpfcmVxLT5yZXEtPmN1cmxfcmVzdWx0LAorCQkJICAgICAgb2JqX3JlcS0+cmVxLT5odHRwX2NvZGUsCisJCQkgICAgICBvYmpfcmVxLT5yZXEtPmVycm9yc3RyLAorCQkJICAgICAgc2l6ZW9mKG9ial9yZXEtPnJlcS0+ZXJyb3JzdHIpKTsKKworCS8qIFVzZSBhbHRlcm5hdGVzIGlmIG5lY2Vzc2FyeSAqLworCWlmIChtaXNzaW5nX3RhcmdldChvYmpfcmVxLT5yZXEpKSB7CisJCWZldGNoX2FsdGVybmF0ZXMod2Fsa2VyLCBhbHQtPmJhc2UpOworCQlpZiAob2JqX3JlcS0+cmVwby0+bmV4dCAhPSBOVUxMKSB7CisJCQlvYmpfcmVxLT5yZXBvID0KKwkJCQlvYmpfcmVxLT5yZXBvLT5uZXh0OworCQkJcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcSk7CisJCQlzdGFydF9vYmplY3RfcmVxdWVzdCh3YWxrZXIsIG9ial9yZXEpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZmluaXNoX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBvYmplY3RfcmVxdWVzdCAqb2JqX3JlcSkKK3sKKwlpZiAob2JqX3JlcS0+cmVxICE9TlVMTCAmJiBvYmpfcmVxLT5yZXEtPmxvY2FsZmlsZSAhPSAtMSkKKwkJZXJyb3IoImZkIGxlYWthZ2UgaW4gcmVsZWFzZTogJWQiLCBvYmpfcmVxLT5yZXEtPmxvY2FsZmlsZSk7CisKKwlsaXN0X2RlbCgmb2JqX3JlcS0+bm9kZSk7CisJZnJlZShvYmpfcmVxKTsKK30KKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCitzdGF0aWMgaW50IGZpbGxfYWN0aXZlX3Nsb3Qoc3RydWN0IHdhbGtlciAqd2Fsa2VyKQoreworCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqb2JqX3JlcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXAsICpoZWFkID0gJm9iamVjdF9xdWV1ZV9oZWFkOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdG1wLCBoZWFkKSB7CisJCW9ial9yZXEgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9iamVjdF9yZXF1ZXN0LCBub2RlKTsKKwkJaWYgKG9ial9yZXEtPnN0YXRlID09IFdBSVRJTkcpIHsKKwkJCWlmIChoYXNfb2JqZWN0X2ZpbGUoJm9ial9yZXEtPm9pZCkpCisJCQkJb2JqX3JlcS0+c3RhdGUgPSBDT01QTEVURTsKKwkJCWVsc2UgeworCQkJCXN0YXJ0X29iamVjdF9yZXF1ZXN0KHdhbGtlciwgb2JqX3JlcSk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgcHJlZmV0Y2goc3RydWN0IHdhbGtlciAqd2Fsa2VyLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqbmV3cmVxOworCXN0cnVjdCB3YWxrZXJfZGF0YSAqZGF0YSA9IHdhbGtlci0+ZGF0YTsKKworCW5ld3JlcSA9IHhtYWxsb2Moc2l6ZW9mKCpuZXdyZXEpKTsKKwluZXdyZXEtPndhbGtlciA9IHdhbGtlcjsKKwloYXNoY3B5KG5ld3JlcS0+b2lkLmhhc2gsIHNoYTEpOworCW5ld3JlcS0+cmVwbyA9IGRhdGEtPmFsdDsKKwluZXdyZXEtPnN0YXRlID0gV0FJVElORzsKKwluZXdyZXEtPnJlcSA9IE5VTEw7CisKKwlodHRwX2lzX3ZlcmJvc2UgPSB3YWxrZXItPmdldF92ZXJib3NlbHk7CisJbGlzdF9hZGRfdGFpbCgmbmV3cmVxLT5ub2RlLCAmb2JqZWN0X3F1ZXVlX2hlYWQpOworCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwlmaWxsX2FjdGl2ZV9zbG90cygpOworCXN0ZXBfYWN0aXZlX3Nsb3RzKCk7CisjZW5kaWYKK30KKworc3RhdGljIGludCBpc19hbHRlcm5hdGVfYWxsb3dlZChjb25zdCBjaGFyICp1cmwpCit7CisJY29uc3QgY2hhciAqcHJvdG9jb2xzW10gPSB7CisJCSJodHRwIiwgImh0dHBzIiwgImZ0cCIsICJmdHBzIgorCX07CisJaW50IGk7CisKKwlpZiAoaHR0cF9mb2xsb3dfY29uZmlnICE9IEhUVFBfRk9MTE9XX0FMV0FZUykgeworCQl3YXJuaW5nKCJhbHRlcm5hdGUgZGlzYWJsZWQgYnkgaHR0cC5mb2xsb3dSZWRpcmVjdHM6ICVzIiwgdXJsKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvdG9jb2xzKTsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmVuZDsKKwkJaWYgKHNraXBfcHJlZml4KHVybCwgcHJvdG9jb2xzW2ldLCAmZW5kKSAmJgorCQkgICAgc3RhcnRzX3dpdGgoZW5kLCAiOi8vIikpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA+PSBBUlJBWV9TSVpFKHByb3RvY29scykpIHsKKwkJd2FybmluZygiaWdub3JpbmcgYWx0ZXJuYXRlIHdpdGggdW5rbm93biBwcm90b2NvbDogJXMiLCB1cmwpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFpc190cmFuc3BvcnRfYWxsb3dlZChwcm90b2NvbHNbaV0sIDApKSB7CisJCXdhcm5pbmcoImlnbm9yaW5nIGFsdGVybmF0ZSB3aXRoIHJlc3RyaWN0ZWQgcHJvdG9jb2w6ICVzIiwgdXJsKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfYWx0ZXJuYXRlc19yZXNwb25zZSh2b2lkICpjYWxsYmFja19kYXRhKQoreworCXN0cnVjdCBhbHRlcm5hdGVzX3JlcXVlc3QgKmFsdF9yZXEgPQorCQkoc3RydWN0IGFsdGVybmF0ZXNfcmVxdWVzdCAqKWNhbGxiYWNrX2RhdGE7CisJc3RydWN0IHdhbGtlciAqd2Fsa2VyID0gYWx0X3JlcS0+d2Fsa2VyOworCXN0cnVjdCB3YWxrZXJfZGF0YSAqY2RhdGEgPSB3YWxrZXItPmRhdGE7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QgPSBhbHRfcmVxLT5zbG90OworCXN0cnVjdCBhbHRfYmFzZSAqdGFpbCA9IGNkYXRhLT5hbHQ7CisJY29uc3QgY2hhciAqYmFzZSA9IGFsdF9yZXEtPmJhc2U7CisJY29uc3QgY2hhciBudWxsX2J5dGUgPSAnXDAnOworCWNoYXIgKmRhdGE7CisJaW50IGkgPSAwOworCisJbm9ybWFsaXplX2N1cmxfcmVzdWx0KCZzbG90LT5jdXJsX3Jlc3VsdCwgc2xvdC0+aHR0cF9jb2RlLAorCQkJICAgICAgY3VybF9lcnJvcnN0ciwgc2l6ZW9mKGN1cmxfZXJyb3JzdHIpKTsKKworCWlmIChhbHRfcmVxLT5odHRwX3NwZWNpZmljKSB7CisJCWlmIChzbG90LT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSyB8fAorCQkgICAgIWFsdF9yZXEtPmJ1ZmZlci0+bGVuKSB7CisKKwkJCS8qIFRyeSByZXVzaW5nIHRoZSBzbG90IHRvIGdldCBub24taHR0cCBhbHRlcm5hdGVzICovCisJCQlhbHRfcmVxLT5odHRwX3NwZWNpZmljID0gMDsKKwkJCXN0cmJ1Zl9yZXNldChhbHRfcmVxLT51cmwpOworCQkJc3RyYnVmX2FkZGYoYWx0X3JlcS0+dXJsLCAiJXMvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiLAorCQkJCSAgICBiYXNlKTsKKwkJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsCisJCQkJCSBhbHRfcmVxLT51cmwtPmJ1Zik7CisJCQlhY3RpdmVfcmVxdWVzdHMrKzsKKwkJCXNsb3QtPmluX3VzZSA9IDE7CisJCQlpZiAoc2xvdC0+ZmluaXNoZWQgIT0gTlVMTCkKKwkJCQkoKnNsb3QtPmZpbmlzaGVkKSA9IDA7CisJCQlpZiAoIXN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCQkJY2RhdGEtPmdvdF9hbHRlcm5hdGVzID0gLTE7CisJCQkJc2xvdC0+aW5fdXNlID0gMDsKKwkJCQlpZiAoc2xvdC0+ZmluaXNoZWQgIT0gTlVMTCkKKwkJCQkJKCpzbG90LT5maW5pc2hlZCkgPSAxOworCQkJfQorCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIGlmIChzbG90LT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgeworCQlpZiAoIW1pc3NpbmdfdGFyZ2V0KHNsb3QpKSB7CisJCQljZGF0YS0+Z290X2FsdGVybmF0ZXMgPSAtMTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWZ3cml0ZV9idWZmZXIoKGNoYXIgKikmbnVsbF9ieXRlLCAxLCAxLCBhbHRfcmVxLT5idWZmZXIpOworCWFsdF9yZXEtPmJ1ZmZlci0+bGVuLS07CisJZGF0YSA9IGFsdF9yZXEtPmJ1ZmZlci0+YnVmOworCisJd2hpbGUgKGkgPCBhbHRfcmVxLT5idWZmZXItPmxlbikgeworCQlpbnQgcG9zbiA9IGk7CisJCXdoaWxlIChwb3NuIDwgYWx0X3JlcS0+YnVmZmVyLT5sZW4gJiYgZGF0YVtwb3NuXSAhPSAnXG4nKQorCQkJcG9zbisrOworCQlpZiAoZGF0YVtwb3NuXSA9PSAnXG4nKSB7CisJCQlpbnQgb2theSA9IDA7CisJCQlpbnQgc2VydmVybGVuID0gMDsKKwkJCXN0cnVjdCBhbHRfYmFzZSAqbmV3YWx0OworCQkJaWYgKGRhdGFbaV0gPT0gJy8nKSB7CisJCQkJLyoKKwkJCQkgKiBUaGlzIGNvdW50cworCQkJCSAqIGh0dHA6Ly9naXQuaG9zdC9wdWIvc2NtL2xpbnV4LmdpdC8KKwkJCQkgKiAtLS0tLS0tLS0tLWhlcmVeCisJCQkJICogc28gbWVtY3B5KGRzdCwgYmFzZSwgc2VydmVybGVuKSB3aWxsCisJCQkJICogY29weSB1cCB0byAiLi4uZ2l0Lmhvc3QiLgorCQkJCSAqLworCQkJCWNvbnN0IGNoYXIgKmNvbG9uX3NzID0gc3Ryc3RyKGJhc2UsIjovLyIpOworCQkJCWlmIChjb2xvbl9zcykgeworCQkJCQlzZXJ2ZXJsZW4gPSAoc3RyY2hyKGNvbG9uX3NzICsgMywgJy8nKQorCQkJCQkJICAgICAtIGJhc2UpOworCQkJCQlva2F5ID0gMTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKCFtZW1jbXAoZGF0YSArIGksICIuLi8iLCAzKSkgeworCQkJCS8qCisJCQkJICogUmVsYXRpdmUgVVJMOyBjaG9wIHRoZSBjb3JyZXNwb25kaW5nCisJCQkJICogbnVtYmVyIG9mIHN1YnBhdGggZnJvbSBiYXNlIChhbmQgLi4vCisJCQkJICogZnJvbSBkYXRhKSwgYW5kIGNvbmNhdGVuYXRlIHRoZSByZXN1bHQuCisJCQkJICoKKwkJCQkgKiBUaGUgY29kZSBmaXJzdCBkcm9wcyAuLi8gZnJvbSBkYXRhLCBhbmQKKwkJCQkgKiB0aGVuIGRyb3BzIG9uZSAuLi8gZnJvbSBkYXRhIGFuZCBvbmUgcGF0aAorCQkJCSAqIGZyb20gYmFzZS4gIElPVywgb25lIGV4dHJhIC4uLyBpcyBkcm9wcGVkCisJCQkJICogZnJvbSBkYXRhIHRoYW4gcGF0aCBpcyBkcm9wcGVkIGZyb20gYmFzZS4KKwkJCQkgKgorCQkJCSAqIFRoaXMgaXMgbm90IHdyb25nLiAgVGhlIGFsdGVybmF0ZSBpbgorCQkJCSAqICAgICBodHRwOi8vZ2l0Lmhvc3QvcHViL3NjbS9saW51eC5naXQvCisJCQkJICogdG8gYm9ycm93IGZyb20KKwkJCQkgKiAgICAgaHR0cDovL2dpdC5ob3N0L3B1Yi9zY20vbGludXMuZ2l0LworCQkJCSAqIGlzIC4uLy4uL2xpbnVzLmdpdC9vYmplY3RzLy4gIFlvdSBuZWVkCisJCQkJICogdHdvIC4uLy4uLyB0byBib3Jyb3cgZnJvbSB5b3VyIGRpcmVjdAorCQkJCSAqIG5laWdoYm91ci4KKwkJCQkgKi8KKwkJCQlpICs9IDM7CisJCQkJc2VydmVybGVuID0gc3RybGVuKGJhc2UpOworCQkJCXdoaWxlIChpICsgMiA8IHBvc24gJiYKKwkJCQkgICAgICAgIW1lbWNtcChkYXRhICsgaSwgIi4uLyIsIDMpKSB7CisJCQkJCWRvIHsKKwkJCQkJCXNlcnZlcmxlbi0tOworCQkJCQl9IHdoaWxlIChzZXJ2ZXJsZW4gJiYKKwkJCQkJCSBiYXNlW3NlcnZlcmxlbiAtIDFdICE9ICcvJyk7CisJCQkJCWkgKz0gMzsKKwkJCQl9CisJCQkJLyogSWYgdGhlIHNlcnZlciBnb3QgcmVtb3ZlZCwgZ2l2ZSB1cC4gKi8KKwkJCQlva2F5ID0gc3RyY2hyKGJhc2UsICc6JykgLSBiYXNlICsgMyA8CisJCQkJICAgICAgIHNlcnZlcmxlbjsKKwkJCX0gZWxzZSBpZiAoYWx0X3JlcS0+aHR0cF9zcGVjaWZpYykgeworCQkJCWNoYXIgKmNvbG9uID0gc3RyY2hyKGRhdGEgKyBpLCAnOicpOworCQkJCWNoYXIgKnNsYXNoID0gc3RyY2hyKGRhdGEgKyBpLCAnLycpOworCQkJCWlmIChjb2xvbiAmJiBzbGFzaCAmJiBjb2xvbiA8IGRhdGEgKyBwb3NuICYmCisJCQkJICAgIHNsYXNoIDwgZGF0YSArIHBvc24gJiYgY29sb24gPCBzbGFzaCkgeworCQkJCQlva2F5ID0gMTsKKwkJCQl9CisJCQl9CisJCQlpZiAob2theSkgeworCQkJCXN0cnVjdCBzdHJidWYgdGFyZ2V0ID0gU1RSQlVGX0lOSVQ7CisJCQkJc3RyYnVmX2FkZCgmdGFyZ2V0LCBiYXNlLCBzZXJ2ZXJsZW4pOworCQkJCXN0cmJ1Zl9hZGQoJnRhcmdldCwgZGF0YSArIGksIHBvc24gLSBpKTsKKwkJCQlpZiAoIXN0cmJ1Zl9zdHJpcF9zdWZmaXgoJnRhcmdldCwgIm9iamVjdHMiKSkgeworCQkJCQl3YXJuaW5nKCJpZ25vcmluZyBhbHRlcm5hdGUgdGhhdCBkb2VzIgorCQkJCQkJIiBub3QgZW5kIGluICdvYmplY3RzJzogJXMiLAorCQkJCQkJdGFyZ2V0LmJ1Zik7CisJCQkJCXN0cmJ1Zl9yZWxlYXNlKCZ0YXJnZXQpOworCQkJCX0gZWxzZSBpZiAoaXNfYWx0ZXJuYXRlX2FsbG93ZWQodGFyZ2V0LmJ1ZikpIHsKKwkJCQkJd2FybmluZygiYWRkaW5nIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmU6ICVzIiwKKwkJCQkJCXRhcmdldC5idWYpOworCQkJCQluZXdhbHQgPSB4bWFsbG9jKHNpemVvZigqbmV3YWx0KSk7CisJCQkJCW5ld2FsdC0+bmV4dCA9IE5VTEw7CisJCQkJCW5ld2FsdC0+YmFzZSA9IHN0cmJ1Zl9kZXRhY2goJnRhcmdldCwgTlVMTCk7CisJCQkJCW5ld2FsdC0+Z290X2luZGljZXMgPSAwOworCQkJCQluZXdhbHQtPnBhY2tzID0gTlVMTDsKKworCQkJCQl3aGlsZSAodGFpbC0+bmV4dCAhPSBOVUxMKQorCQkJCQkJdGFpbCA9IHRhaWwtPm5leHQ7CisJCQkJCXRhaWwtPm5leHQgPSBuZXdhbHQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RyYnVmX3JlbGVhc2UoJnRhcmdldCk7CisJCQkJfQorCQkJfQorCQl9CisJCWkgPSBwb3NuICsgMTsKKwl9CisKKwljZGF0YS0+Z290X2FsdGVybmF0ZXMgPSAxOworfQorCitzdGF0aWMgdm9pZCBmZXRjaF9hbHRlcm5hdGVzKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgY29uc3QgY2hhciAqYmFzZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgdXJsID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGFsdGVybmF0ZXNfcmVxdWVzdCBhbHRfcmVxOworCXN0cnVjdCB3YWxrZXJfZGF0YSAqY2RhdGEgPSB3YWxrZXItPmRhdGE7CisKKwkvKgorCSAqIElmIGFub3RoZXIgcmVxdWVzdCBoYXMgYWxyZWFkeSBzdGFydGVkIGZldGNoaW5nIGFsdGVybmF0ZXMsCisJICogd2FpdCBmb3IgdGhlbSB0byBhcnJpdmUgYW5kIHJldHVybiB0byBwcm9jZXNzaW5nIHRoaXMgcmVxdWVzdCdzCisJICogY3VybCBtZXNzYWdlCisJICovCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwl3aGlsZSAoY2RhdGEtPmdvdF9hbHRlcm5hdGVzID09IDApIHsKKwkJc3RlcF9hY3RpdmVfc2xvdHMoKTsKKwl9CisjZW5kaWYKKworCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhleSd2ZSBhbHJlYWR5IGJlZW4gZmV0Y2hlZCAqLworCWlmIChjZGF0YS0+Z290X2FsdGVybmF0ZXMgPT0gMSkKKwkJcmV0dXJuOworCisJLyogU3RhcnQgdGhlIGZldGNoICovCisJY2RhdGEtPmdvdF9hbHRlcm5hdGVzID0gMDsKKworCWlmICh3YWxrZXItPmdldF92ZXJib3NlbHkpCisJCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBhbHRlcm5hdGVzIGxpc3QgZm9yICVzXG4iLCBiYXNlKTsKKworCXN0cmJ1Zl9hZGRmKCZ1cmwsICIlcy9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIiwgYmFzZSk7CisKKwkvKgorCSAqIFVzZSBhIGNhbGxiYWNrIHRvIHByb2Nlc3MgdGhlIHJlc3VsdCwgc2luY2UgYW5vdGhlciByZXF1ZXN0CisJICogbWF5IGZhaWwgYW5kIG5lZWQgdG8gaGF2ZSBhbHRlcm5hdGVzIGxvYWRlZCBiZWZvcmUgY29udGludWluZworCSAqLworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlzbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19hbHRlcm5hdGVzX3Jlc3BvbnNlOworCWFsdF9yZXEud2Fsa2VyID0gd2Fsa2VyOworCXNsb3QtPmNhbGxiYWNrX2RhdGEgPSAmYWx0X3JlcTsKKworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX2J1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsLmJ1Zik7CisKKwlhbHRfcmVxLmJhc2UgPSBiYXNlOworCWFsdF9yZXEudXJsID0gJnVybDsKKwlhbHRfcmVxLmJ1ZmZlciA9ICZidWZmZXI7CisJYWx0X3JlcS5odHRwX3NwZWNpZmljID0gMTsKKwlhbHRfcmVxLnNsb3QgPSBzbG90OworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKQorCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJZWxzZQorCQljZGF0YS0+Z290X2FsdGVybmF0ZXMgPSAtMTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZ1cmwpOworfQorCitzdGF0aWMgaW50IGZldGNoX2luZGljZXMoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG8pCit7CisJaW50IHJldDsKKworCWlmIChyZXBvLT5nb3RfaW5kaWNlcykKKwkJcmV0dXJuIDA7CisKKwlpZiAod2Fsa2VyLT5nZXRfdmVyYm9zZWx5KQorCQlmcHJpbnRmKHN0ZGVyciwgIkdldHRpbmcgcGFjayBsaXN0IGZvciAlc1xuIiwgcmVwby0+YmFzZSk7CisKKwlzd2l0Y2ggKGh0dHBfZ2V0X2luZm9fcGFja3MocmVwby0+YmFzZSwgJnJlcG8tPnBhY2tzKSkgeworCWNhc2UgSFRUUF9PSzoKKwljYXNlIEhUVFBfTUlTU0lOR19UQVJHRVQ6CisJCXJlcG8tPmdvdF9pbmRpY2VzID0gMTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVwby0+Z290X2luZGljZXMgPSAwOworCQlyZXQgPSAtMTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGh0dHBfZmV0Y2hfcGFjayhzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCBhbHRfYmFzZSAqcmVwbywgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0OworCWludCByZXQ7CisJc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzOworCXN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqcHJlcTsKKworCWlmIChmZXRjaF9pbmRpY2VzKHdhbGtlciwgcmVwbykpCisJCXJldHVybiAtMTsKKwl0YXJnZXQgPSBmaW5kX3NoYTFfcGFjayhzaGExLCByZXBvLT5wYWNrcyk7CisJaWYgKCF0YXJnZXQpCisJCXJldHVybiAtMTsKKworCWlmICh3YWxrZXItPmdldF92ZXJib3NlbHkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJHZXR0aW5nIHBhY2sgJXNcbiIsCisJCQloYXNoX3RvX2hleCh0YXJnZXQtPmhhc2gpKTsKKwkJZnByaW50ZihzdGRlcnIsICIgd2hpY2ggY29udGFpbnMgJXNcbiIsCisJCQloYXNoX3RvX2hleChzaGExKSk7CisJfQorCisJcHJlcSA9IG5ld19odHRwX3BhY2tfcmVxdWVzdCh0YXJnZXQsIHJlcG8tPmJhc2UpOworCWlmIChwcmVxID09IE5VTEwpCisJCWdvdG8gYWJvcnQ7CisJcHJlcS0+bHN0ID0gJnJlcG8tPnBhY2tzOworCXByZXEtPnNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChwcmVxLT5zbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3QocHJlcS0+c2xvdCk7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQllcnJvcigiVW5hYmxlIHRvIGdldCBwYWNrIGZpbGUgJXNcbiVzIiwgcHJlcS0+dXJsLAorCQkJICAgICAgY3VybF9lcnJvcnN0cik7CisJCQlnb3RvIGFib3J0OworCQl9CisJfSBlbHNlIHsKKwkJZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7CisJCWdvdG8gYWJvcnQ7CisJfQorCisJcmV0ID0gZmluaXNoX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpOworCXJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworCithYm9ydDoKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGFib3J0X29iamVjdF9yZXF1ZXN0KHN0cnVjdCBvYmplY3RfcmVxdWVzdCAqb2JqX3JlcSkKK3sKKwlyZWxlYXNlX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOworfQorCitzdGF0aWMgaW50IGZldGNoX29iamVjdChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHVuc2lnbmVkIGNoYXIgKmhhc2gpCit7CisJY2hhciAqaGV4ID0gaGFzaF90b19oZXgoaGFzaCk7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxID0gTlVMTDsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKmhlYWQgPSAmb2JqZWN0X3F1ZXVlX2hlYWQ7CisKKwlsaXN0X2Zvcl9lYWNoKHBvcywgaGVhZCkgeworCQlvYmpfcmVxID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBvYmplY3RfcmVxdWVzdCwgbm9kZSk7CisJCWlmIChoYXNoZXEob2JqX3JlcS0+b2lkLmhhc2gsIGhhc2gpKQorCQkJYnJlYWs7CisJfQorCWlmIChvYmpfcmVxID09IE5VTEwpCisJCXJldHVybiBlcnJvcigiQ291bGRuJ3QgZmluZCByZXF1ZXN0IGZvciAlcyBpbiB0aGUgcXVldWUiLCBoZXgpOworCisJaWYgKGhhc19vYmplY3RfZmlsZSgmb2JqX3JlcS0+b2lkKSkgeworCQlpZiAob2JqX3JlcS0+cmVxICE9IE5VTEwpCisJCQlhYm9ydF9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcSk7CisJCWFib3J0X29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOworCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCXdoaWxlIChvYmpfcmVxLT5zdGF0ZSA9PSBXQUlUSU5HKQorCQlzdGVwX2FjdGl2ZV9zbG90cygpOworI2Vsc2UKKwlzdGFydF9vYmplY3RfcmVxdWVzdCh3YWxrZXIsIG9ial9yZXEpOworI2VuZGlmCisKKwkvKgorCSAqIG9ial9yZXEtPnJlcSBtaWdodCBjaGFuZ2Ugd2hlbiBmZXRjaGluZyBhbHRlcm5hdGVzIGluIHRoZSBjYWxsYmFjaworCSAqIHByb2Nlc3Nfb2JqZWN0X3Jlc3BvbnNlOyB0aGVyZWZvcmUsIHRoZSAic2hvcnRjdXQiIHZhcmlhYmxlLCByZXEsCisJICogaXMgdXNlZCBvbmx5IGFmdGVyIHdlJ3JlIGRvbmUgd2l0aCBzbG90cy4KKwkgKi8KKwl3aGlsZSAob2JqX3JlcS0+c3RhdGUgPT0gQUNUSVZFKQorCQlydW5fYWN0aXZlX3Nsb3Qob2JqX3JlcS0+cmVxLT5zbG90KTsKKworCXJlcSA9IG9ial9yZXEtPnJlcTsKKworCWlmIChyZXEtPmxvY2FsZmlsZSAhPSAtMSkgeworCQljbG9zZShyZXEtPmxvY2FsZmlsZSk7CisJCXJlcS0+bG9jYWxmaWxlID0gLTE7CisJfQorCisJbm9ybWFsaXplX2N1cmxfcmVzdWx0KCZyZXEtPmN1cmxfcmVzdWx0LCByZXEtPmh0dHBfY29kZSwKKwkJCSAgICAgIHJlcS0+ZXJyb3JzdHIsIHNpemVvZihyZXEtPmVycm9yc3RyKSk7CisKKwlpZiAob2JqX3JlcS0+c3RhdGUgPT0gQUJPUlRFRCkgeworCQlyZXQgPSBlcnJvcigiUmVxdWVzdCBmb3IgJXMgYWJvcnRlZCIsIGhleCk7CisJfSBlbHNlIGlmIChyZXEtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LICYmCisJCSAgIHJlcS0+aHR0cF9jb2RlICE9IDQxNikgeworCQlpZiAobWlzc2luZ190YXJnZXQocmVxKSkKKwkJCXJldCA9IC0xOyAvKiBCZSBzaWxlbnQsIGl0IGlzIHByb2JhYmx5IGluIGEgcGFjay4gKi8KKwkJZWxzZQorCQkJcmV0ID0gZXJyb3IoIiVzIChjdXJsX3Jlc3VsdCA9ICVkLCBodHRwX2NvZGUgPSAlbGQsIHNoYTEgPSAlcykiLAorCQkJCSAgICByZXEtPmVycm9yc3RyLCByZXEtPmN1cmxfcmVzdWx0LAorCQkJCSAgICByZXEtPmh0dHBfY29kZSwgaGV4KTsKKwl9IGVsc2UgaWYgKHJlcS0+enJldCAhPSBaX1NUUkVBTV9FTkQpIHsKKwkJd2Fsa2VyLT5jb3JydXB0X29iamVjdF9mb3VuZCsrOworCQlyZXQgPSBlcnJvcigiRmlsZSAlcyAoJXMpIGNvcnJ1cHQiLCBoZXgsIHJlcS0+dXJsKTsKKwl9IGVsc2UgaWYgKCFvaWRlcSgmb2JqX3JlcS0+b2lkLCAmcmVxLT5yZWFsX29pZCkpIHsKKwkJcmV0ID0gZXJyb3IoIkZpbGUgJXMgaGFzIGJhZCBoYXNoIiwgaGV4KTsKKwl9IGVsc2UgaWYgKHJlcS0+cmVuYW1lIDwgMCkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlsb29zZV9vYmplY3RfcGF0aCh0aGVfcmVwb3NpdG9yeSwgJmJ1ZiwgJnJlcS0+b2lkKTsKKwkJcmV0ID0gZXJyb3IoInVuYWJsZSB0byB3cml0ZSBzaGExIGZpbGVuYW1lICVzIiwgYnVmLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0KKworCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChyZXEpOworCXJlbGVhc2Vfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBmZXRjaChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHVuc2lnbmVkIGNoYXIgKmhhc2gpCit7CisJc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOworCXN0cnVjdCBhbHRfYmFzZSAqYWx0YmFzZSA9IGRhdGEtPmFsdDsKKworCWlmICghZmV0Y2hfb2JqZWN0KHdhbGtlciwgaGFzaCkpCisJCXJldHVybiAwOworCXdoaWxlIChhbHRiYXNlKSB7CisJCWlmICghaHR0cF9mZXRjaF9wYWNrKHdhbGtlciwgYWx0YmFzZSwgaGFzaCkpCisJCQlyZXR1cm4gMDsKKwkJZmV0Y2hfYWx0ZXJuYXRlcyh3YWxrZXIsIGRhdGEtPmFsdC0+YmFzZSk7CisJCWFsdGJhc2UgPSBhbHRiYXNlLT5uZXh0OworCX0KKwlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBmaW5kICVzIHVuZGVyICVzIiwgaGFzaF90b19oZXgoaGFzaCksCisJCSAgICAgZGF0YS0+YWx0LT5iYXNlKTsKK30KKworc3RhdGljIGludCBmZXRjaF9yZWYoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgcmVmICpyZWYpCit7CisJc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOworCXJldHVybiBodHRwX2ZldGNoX3JlZihkYXRhLT5hbHQtPmJhc2UsIHJlZik7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXAoc3RydWN0IHdhbGtlciAqd2Fsa2VyKQoreworCXN0cnVjdCB3YWxrZXJfZGF0YSAqZGF0YSA9IHdhbGtlci0+ZGF0YTsKKwlzdHJ1Y3QgYWx0X2Jhc2UgKmFsdCwgKmFsdF9uZXh0OworCisJaWYgKGRhdGEpIHsKKwkJYWx0ID0gZGF0YS0+YWx0OworCQl3aGlsZSAoYWx0KSB7CisJCQlhbHRfbmV4dCA9IGFsdC0+bmV4dDsKKworCQkJZnJlZShhbHQtPmJhc2UpOworCQkJZnJlZShhbHQpOworCisJCQlhbHQgPSBhbHRfbmV4dDsKKwkJfQorCQlmcmVlKGRhdGEpOworCQl3YWxrZXItPmRhdGEgPSBOVUxMOworCX0KK30KKworc3RydWN0IHdhbGtlciAqZ2V0X2h0dHBfd2Fsa2VyKGNvbnN0IGNoYXIgKnVybCkKK3sKKwljaGFyICpzOworCXN0cnVjdCB3YWxrZXJfZGF0YSAqZGF0YSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCB3YWxrZXJfZGF0YSkpOworCXN0cnVjdCB3YWxrZXIgKndhbGtlciA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCB3YWxrZXIpKTsKKworCWRhdGEtPmFsdCA9IHhtYWxsb2Moc2l6ZW9mKCpkYXRhLT5hbHQpKTsKKwlkYXRhLT5hbHQtPmJhc2UgPSB4c3RyZHVwKHVybCk7CisJZm9yIChzID0gZGF0YS0+YWx0LT5iYXNlICsgc3RybGVuKGRhdGEtPmFsdC0+YmFzZSkgLSAxOyAqcyA9PSAnLyc7IC0tcykKKwkJKnMgPSAwOworCisJZGF0YS0+YWx0LT5nb3RfaW5kaWNlcyA9IDA7CisJZGF0YS0+YWx0LT5wYWNrcyA9IE5VTEw7CisJZGF0YS0+YWx0LT5uZXh0ID0gTlVMTDsKKwlkYXRhLT5nb3RfYWx0ZXJuYXRlcyA9IC0xOworCisJd2Fsa2VyLT5jb3JydXB0X29iamVjdF9mb3VuZCA9IDA7CisJd2Fsa2VyLT5mZXRjaCA9IGZldGNoOworCXdhbGtlci0+ZmV0Y2hfcmVmID0gZmV0Y2hfcmVmOworCXdhbGtlci0+cHJlZmV0Y2ggPSBwcmVmZXRjaDsKKwl3YWxrZXItPmNsZWFudXAgPSBjbGVhbnVwOworCXdhbGtlci0+ZGF0YSA9IGRhdGE7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWFkZF9maWxsX2Z1bmN0aW9uKHdhbGtlciwgKGludCAoKikodm9pZCAqKSkgZmlsbF9hY3RpdmVfc2xvdCk7CisjZW5kaWYKKworCXJldHVybiB3YWxrZXI7Cit9CmRpZmYgLS1naXQgYS9odHRwLmMgYi9odHRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJhYTk5NQotLS0gL2Rldi9udWxsCisrKyBiL2h0dHAuYwpAQCAtMCwwICsxLDI2MDggQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJ1cmxtYXRjaC5oIgorI2luY2x1ZGUgImNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJnZXR0ZXh0LmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2Vfa2V5IHRyYWNlX2N1cmwgPSBUUkFDRV9LRVlfSU5JVChDVVJMKTsKK3N0YXRpYyBpbnQgdHJhY2VfY3VybF9kYXRhID0gMTsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgY29va2llc190b19yZWRhY3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwYTA4Citsb25nIGludCBnaXRfY3VybF9pcHJlc29sdmUgPSBDVVJMX0lQUkVTT0xWRV9XSEFURVZFUjsKKyNlbHNlCitsb25nIGludCBnaXRfY3VybF9pcHJlc29sdmU7CisjZW5kaWYKK2ludCBhY3RpdmVfcmVxdWVzdHM7CitpbnQgaHR0cF9pc192ZXJib3NlOworc3NpemVfdCBodHRwX3Bvc3RfYnVmZmVyID0gMTYgKiBMQVJHRV9QQUNLRVRfTUFYOworCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MGEwNgorI2RlZmluZSBMSUJDVVJMX0NBTl9IQU5ETEVfQVVUSF9BTlkKKyNlbmRpZgorCitzdGF0aWMgaW50IG1pbl9jdXJsX3Nlc3Npb25zID0gMTsKK3N0YXRpYyBpbnQgY3VybF9zZXNzaW9uX2NvdW50OworI2lmZGVmIFVTRV9DVVJMX01VTFRJCitzdGF0aWMgaW50IG1heF9yZXF1ZXN0cyA9IC0xOworc3RhdGljIENVUkxNICpjdXJsbTsKKyNlbmRpZgorI2lmbmRlZiBOT19DVVJMX0VBU1lfRFVQSEFORExFCitzdGF0aWMgQ1VSTCAqY3VybF9kZWZhdWx0OworI2VuZGlmCisKKyNkZWZpbmUgUFJFVl9CVUZfU0laRSA0MDk2CisKK2NoYXIgY3VybF9lcnJvcnN0cltDVVJMX0VSUk9SX1NJWkVdOworCitzdGF0aWMgaW50IGN1cmxfc3NsX3ZlcmlmeSA9IC0xOworc3RhdGljIGludCBjdXJsX3NzbF90cnk7CitzdGF0aWMgY29uc3QgY2hhciAqY3VybF9odHRwX3ZlcnNpb24gPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIgKnNzbF9jZXJ0Oworc3RhdGljIGNvbnN0IGNoYXIgKnNzbF9jaXBoZXJsaXN0Oworc3RhdGljIGNvbnN0IGNoYXIgKnNzbF92ZXJzaW9uOworc3RhdGljIHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlsb25nIHNzbF92ZXJzaW9uOworfSBzc2x2ZXJzaW9uc1tdID0geworCXsgInNzbHYyIiwgQ1VSTF9TU0xWRVJTSU9OX1NTTHYyIH0sCisJeyAic3NsdjMiLCBDVVJMX1NTTFZFUlNJT05fU1NMdjMgfSwKKwl7ICJ0bHN2MSIsIENVUkxfU1NMVkVSU0lPTl9UTFN2MSB9LAorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzIyMDAKKwl7ICJ0bHN2MS4wIiwgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzAgfSwKKwl7ICJ0bHN2MS4xIiwgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzEgfSwKKwl7ICJ0bHN2MS4yIiwgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzIgfSwKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzM0MDAKKwl7ICJ0bHN2MS4zIiwgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzMgfSwKKyNlbmRpZgorfTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAzCitzdGF0aWMgY29uc3QgY2hhciAqc3NsX2tleTsKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDgKK3N0YXRpYyBjb25zdCBjaGFyICpzc2xfY2FwYXRoOworI2VuZGlmCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTMwNAorc3RhdGljIGNvbnN0IGNoYXIgKmN1cmxfbm9fcHJveHk7CisjZW5kaWYKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcyYzAwCitzdGF0aWMgY29uc3QgY2hhciAqc3NsX3Bpbm5lZGtleTsKKyNlbmRpZgorc3RhdGljIGNvbnN0IGNoYXIgKnNzbF9jYWluZm87CitzdGF0aWMgbG9uZyBjdXJsX2xvd19zcGVlZF9saW1pdCA9IC0xOworc3RhdGljIGxvbmcgY3VybF9sb3dfc3BlZWRfdGltZSA9IC0xOworc3RhdGljIGludCBjdXJsX2Z0cF9ub19lcHN2Oworc3RhdGljIGNvbnN0IGNoYXIgKmN1cmxfaHR0cF9wcm94eTsKK3N0YXRpYyBjb25zdCBjaGFyICpodHRwX3Byb3h5X2F1dGhtZXRob2Q7CisKK3N0YXRpYyBjb25zdCBjaGFyICpodHRwX3Byb3h5X3NzbF9jZXJ0Oworc3RhdGljIGNvbnN0IGNoYXIgKmh0dHBfcHJveHlfc3NsX2tleTsKK3N0YXRpYyBjb25zdCBjaGFyICpodHRwX3Byb3h5X3NzbF9jYV9pbmZvOworc3RhdGljIHN0cnVjdCBjcmVkZW50aWFsIHByb3h5X2NlcnRfYXV0aCA9IENSRURFTlRJQUxfSU5JVDsKK3N0YXRpYyBpbnQgcHJveHlfc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQ7CisKK3N0YXRpYyBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJbG9uZyBjdXJsYXV0aF9wYXJhbTsKK30gcHJveHlfYXV0aG1ldGhvZHNbXSA9IHsKKwl7ICJiYXNpYyIsIENVUkxBVVRIX0JBU0lDIH0sCisJeyAiZGlnZXN0IiwgQ1VSTEFVVEhfRElHRVNUIH0sCisJeyAibmVnb3RpYXRlIiwgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFIH0sCisJeyAibnRsbSIsIENVUkxBVVRIX05UTE0gfSwKKyNpZmRlZiBMSUJDVVJMX0NBTl9IQU5ETEVfQVVUSF9BTlkKKwl7ICJhbnlhdXRoIiwgQ1VSTEFVVEhfQU5ZIH0sCisjZW5kaWYKKwkvKgorCSAqIENVUkxBVVRIX0RJR0VTVF9JRSBoYXMgbm8gY29ycmVzcG9uZGluZyBjb21tYW5kLWxpbmUgb3B0aW9uIGluCisJICogY3VybCgxKSBhbmQgaXMgbm90IGluY2x1ZGVkIGluIENVUkxBVVRIX0FOWSwgc28gd2UgbGVhdmUgaXQgb3V0CisJICogaGVyZSwgdG9vCisJICovCit9OworI2lmZGVmIENVUkxHU1NBUElfREVMRUdBVElPTl9GTEFHCitzdGF0aWMgY29uc3QgY2hhciAqY3VybF9kZWxlZzsKK3N0YXRpYyBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJbG9uZyBjdXJsX2RlbGVnX3BhcmFtOworfSBjdXJsX2RlbGVnX2xldmVsc1tdID0geworCXsgIm5vbmUiLCBDVVJMR1NTQVBJX0RFTEVHQVRJT05fTk9ORSB9LAorCXsgInBvbGljeSIsIENVUkxHU1NBUElfREVMRUdBVElPTl9QT0xJQ1lfRkxBRyB9LAorCXsgImFsd2F5cyIsIENVUkxHU1NBUElfREVMRUdBVElPTl9GTEFHIH0sCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgY3JlZGVudGlhbCBwcm94eV9hdXRoID0gQ1JFREVOVElBTF9JTklUOworc3RhdGljIGNvbnN0IGNoYXIgKmN1cmxfcHJveHl1c2VycHdkOworc3RhdGljIGNvbnN0IGNoYXIgKmN1cmxfY29va2llX2ZpbGU7CitzdGF0aWMgaW50IGN1cmxfc2F2ZV9jb29raWVzOworc3RydWN0IGNyZWRlbnRpYWwgaHR0cF9hdXRoID0gQ1JFREVOVElBTF9JTklUOworc3RhdGljIGludCBodHRwX3Byb2FjdGl2ZV9hdXRoOworc3RhdGljIGNvbnN0IGNoYXIgKnVzZXJfYWdlbnQ7CitzdGF0aWMgaW50IGN1cmxfZW1wdHlfYXV0aCA9IC0xOworCitlbnVtIGh0dHBfZm9sbG93X2NvbmZpZyBodHRwX2ZvbGxvd19jb25maWcgPSBIVFRQX0ZPTExPV19JTklUSUFMOworCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTcwMAorLyogVXNlIENVUkxPUFRfS0VZUEFTU1dEIGFzIGlzICovCisjZWxpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAzCisjZGVmaW5lIENVUkxPUFRfS0VZUEFTU1dEIENVUkxPUFRfU1NMS0VZUEFTU1dECisjZWxzZQorI2RlZmluZSBDVVJMT1BUX0tFWVBBU1NXRCBDVVJMT1BUX1NTTENFUlRQQVNTV0QKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGNyZWRlbnRpYWwgY2VydF9hdXRoID0gQ1JFREVOVElBTF9JTklUOworc3RhdGljIGludCBzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZDsKKyNpZmRlZiBMSUJDVVJMX0NBTl9IQU5ETEVfQVVUSF9BTlkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGh0dHBfYXV0aF9tZXRob2RzID0gQ1VSTEFVVEhfQU5ZOworc3RhdGljIGludCBodHRwX2F1dGhfbWV0aG9kc19yZXN0cmljdGVkOworLyogTW9kZXMgZm9yIHdoaWNoIGVtcHR5X2F1dGggY2Fubm90IGFjdHVhbGx5IGhlbHAgdXMuICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBlbXB0eV9hdXRoX3VzZWxlc3MgPQorCUNVUkxBVVRIX0JBU0lDCisjaWZkZWYgQ1VSTEFVVEhfRElHRVNUX0lFCisJfCBDVVJMQVVUSF9ESUdFU1RfSUUKKyNlbmRpZgorCXwgQ1VSTEFVVEhfRElHRVNUOworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqcHJhZ21hX2hlYWRlcjsKK3N0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqbm9fcHJhZ21hX2hlYWRlcjsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXh0cmFfaHR0cF9oZWFkZXJzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKK3N0YXRpYyBzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqYWN0aXZlX3F1ZXVlX2hlYWQ7CisKK3N0YXRpYyBjaGFyICpjYWNoZWRfYWNjZXB0X2xhbmd1YWdlOworCitzdGF0aWMgY2hhciAqaHR0cF9zc2xfYmFja2VuZDsKKworc3RhdGljIGludCBodHRwX3NjaGFubmVsX2NoZWNrX3Jldm9rZSA9IDE7CisvKgorICogV2l0aCB0aGUgYmFja2VuZCBiZWluZyBzZXQgdG8gYHNjaGFubmVsYCwgc2V0dGluZyBzc2xDQWluZm8gd291bGQgb3ZlcnJpZGUKKyAqIHRoZSBDZXJ0aWZpY2F0ZSBTdG9yZSBpbiBjVVJMIHY3LjYwLjAgYW5kIGxhdGVyLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50CisgKiBieSBkZWZhdWx0LgorICovCitzdGF0aWMgaW50IGh0dHBfc2NoYW5uZWxfdXNlX3NzbF9jYWluZm87CisKK3NpemVfdCBmcmVhZF9idWZmZXIoY2hhciAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpidWZmZXJfKQoreworCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOworCXN0cnVjdCBidWZmZXIgKmJ1ZmZlciA9IGJ1ZmZlcl87CisKKwlpZiAoc2l6ZSA+IGJ1ZmZlci0+YnVmLmxlbiAtIGJ1ZmZlci0+cG9zbikKKwkJc2l6ZSA9IGJ1ZmZlci0+YnVmLmxlbiAtIGJ1ZmZlci0+cG9zbjsKKwltZW1jcHkocHRyLCBidWZmZXItPmJ1Zi5idWYgKyBidWZmZXItPnBvc24sIHNpemUpOworCWJ1ZmZlci0+cG9zbiArPSBzaXplOworCisJcmV0dXJuIHNpemUgLyBlbHRzaXplOworfQorCisjaWZuZGVmIE5PX0NVUkxfSU9DVEwKK2N1cmxpb2VyciBpb2N0bF9idWZmZXIoQ1VSTCAqaGFuZGxlLCBpbnQgY21kLCB2b2lkICpjbGllbnRwKQoreworCXN0cnVjdCBidWZmZXIgKmJ1ZmZlciA9IGNsaWVudHA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ1VSTElPQ01EX05PUDoKKwkJcmV0dXJuIENVUkxJT0VfT0s7CisKKwljYXNlIENVUkxJT0NNRF9SRVNUQVJUUkVBRDoKKwkJYnVmZmVyLT5wb3NuID0gMDsKKwkJcmV0dXJuIENVUkxJT0VfT0s7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gQ1VSTElPRV9VTktOT1dOQ01EOworCX0KK30KKyNlbmRpZgorCitzaXplX3QgZndyaXRlX2J1ZmZlcihjaGFyICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKmJ1ZmZlcl8pCit7CisJc2l6ZV90IHNpemUgPSBlbHRzaXplICogbm1lbWI7CisJc3RydWN0IHN0cmJ1ZiAqYnVmZmVyID0gYnVmZmVyXzsKKworCXN0cmJ1Zl9hZGQoYnVmZmVyLCBwdHIsIHNpemUpOworCXJldHVybiBubWVtYjsKK30KKworc2l6ZV90IGZ3cml0ZV9udWxsKGNoYXIgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyYnVmKQoreworCXJldHVybiBubWVtYjsKK30KKworc3RhdGljIHZvaWQgY2xvc2Vkb3duX2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KQoreworCWFjdGl2ZV9yZXF1ZXN0cy0tOworCXNsb3QtPmluX3VzZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCkKK3sKKwljbG9zZWRvd25fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJY3VybF9lYXN5X2dldGluZm8oc2xvdC0+Y3VybCwgQ1VSTElORk9fSFRUUF9DT0RFLCAmc2xvdC0+aHR0cF9jb2RlKTsKKworCWlmIChzbG90LT5maW5pc2hlZCAhPSBOVUxMKQorCQkoKnNsb3QtPmZpbmlzaGVkKSA9IDE7CisKKwkvKiBTdG9yZSBzbG90IHJlc3VsdHMgc28gdGhleSBjYW4gYmUgcmVhZCBhZnRlciB0aGUgc2xvdCBpcyByZXVzZWQgKi8KKwlpZiAoc2xvdC0+cmVzdWx0cyAhPSBOVUxMKSB7CisJCXNsb3QtPnJlc3VsdHMtPmN1cmxfcmVzdWx0ID0gc2xvdC0+Y3VybF9yZXN1bHQ7CisJCXNsb3QtPnJlc3VsdHMtPmh0dHBfY29kZSA9IHNsb3QtPmh0dHBfY29kZTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwYTA4CisJCWN1cmxfZWFzeV9nZXRpbmZvKHNsb3QtPmN1cmwsIENVUkxJTkZPX0hUVFBBVVRIX0FWQUlMLAorCQkJCSAgJnNsb3QtPnJlc3VsdHMtPmF1dGhfYXZhaWwpOworI2Vsc2UKKwkJc2xvdC0+cmVzdWx0cy0+YXV0aF9hdmFpbCA9IDA7CisjZW5kaWYKKworCQljdXJsX2Vhc3lfZ2V0aW5mbyhzbG90LT5jdXJsLCBDVVJMSU5GT19IVFRQX0NPTk5FQ1RDT0RFLAorCQkJJnNsb3QtPnJlc3VsdHMtPmh0dHBfY29ubmVjdGNvZGUpOworCX0KKworCS8qIFJ1biBjYWxsYmFjayBpZiBhcHByb3ByaWF0ZSAqLworCWlmIChzbG90LT5jYWxsYmFja19mdW5jICE9IE5VTEwpCisJCXNsb3QtPmNhbGxiYWNrX2Z1bmMoc2xvdC0+Y2FsbGJhY2tfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHhtdWx0aV9yZW1vdmVfaGFuZGxlKHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KQoreworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGN1cmxtLCBzbG90LT5jdXJsKTsKKyNlbmRpZgorfQorCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKK3N0YXRpYyB2b2lkIHByb2Nlc3NfY3VybF9tZXNzYWdlcyh2b2lkKQoreworCWludCBudW1fbWVzc2FnZXM7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJQ1VSTE1zZyAqY3VybF9tZXNzYWdlID0gY3VybF9tdWx0aV9pbmZvX3JlYWQoY3VybG0sICZudW1fbWVzc2FnZXMpOworCisJd2hpbGUgKGN1cmxfbWVzc2FnZSAhPSBOVUxMKSB7CisJCWlmIChjdXJsX21lc3NhZ2UtPm1zZyA9PSBDVVJMTVNHX0RPTkUpIHsKKwkJCWludCBjdXJsX3Jlc3VsdCA9IGN1cmxfbWVzc2FnZS0+ZGF0YS5yZXN1bHQ7CisJCQlzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisJCQl3aGlsZSAoc2xvdCAhPSBOVUxMICYmCisJCQkgICAgICAgc2xvdC0+Y3VybCAhPSBjdXJsX21lc3NhZ2UtPmVhc3lfaGFuZGxlKQorCQkJCXNsb3QgPSBzbG90LT5uZXh0OworCQkJaWYgKHNsb3QgIT0gTlVMTCkgeworCQkJCXhtdWx0aV9yZW1vdmVfaGFuZGxlKHNsb3QpOworCQkJCXNsb3QtPmN1cmxfcmVzdWx0ID0gY3VybF9yZXN1bHQ7CisJCQkJZmluaXNoX2FjdGl2ZV9zbG90KHNsb3QpOworCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlJlY2VpdmVkIERPTkUgbWVzc2FnZSBmb3IgdW5rbm93biByZXF1ZXN0IVxuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gQ1VSTCBtZXNzYWdlIHJlY2VpdmVkOiAlZFxuIiwKKwkJCQkoaW50KWN1cmxfbWVzc2FnZS0+bXNnKTsKKwkJfQorCQljdXJsX21lc3NhZ2UgPSBjdXJsX211bHRpX2luZm9fcmVhZChjdXJsbSwgJm51bV9tZXNzYWdlcyk7CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaHR0cF9vcHRpb25zKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKCJodHRwLnZlcnNpb24iLCB2YXIpKSB7CisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmY3VybF9odHRwX3ZlcnNpb24sIHZhciwgdmFsdWUpOworCX0KKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2x2ZXJpZnkiLCB2YXIpKSB7CisJCWN1cmxfc3NsX3ZlcmlmeSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKCJodHRwLnNzbGNpcGhlcmxpc3QiLCB2YXIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnNzbF9jaXBoZXJsaXN0LCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2x2ZXJzaW9uIiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZzc2xfdmVyc2lvbiwgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2VydCIsIHZhcikpCisJCXJldHVybiBnaXRfY29uZmlnX3BhdGhuYW1lKCZzc2xfY2VydCwgdmFyLCB2YWx1ZSk7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMworCWlmICghc3RyY21wKCJodHRwLnNzbGtleSIsIHZhcikpCisJCXJldHVybiBnaXRfY29uZmlnX3BhdGhuYW1lKCZzc2xfa2V5LCB2YXIsIHZhbHVlKTsKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDgKKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjYXBhdGgiLCB2YXIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmc3NsX2NhcGF0aCwgdmFyLCB2YWx1ZSk7CisjZW5kaWYKKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjYWluZm8iLCB2YXIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmc3NsX2NhaW5mbywgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2VydHBhc3N3b3JkcHJvdGVjdGVkIiwgdmFyKSkgeworCQlzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKCJodHRwLnNzbHRyeSIsIHZhcikpIHsKKwkJY3VybF9zc2xfdHJ5ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsYmFja2VuZCIsIHZhcikpIHsKKwkJZnJlZShodHRwX3NzbF9iYWNrZW5kKTsKKwkJaHR0cF9zc2xfYmFja2VuZCA9IHhzdHJkdXBfb3JfbnVsbCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJodHRwLnNjaGFubmVsY2hlY2tyZXZva2UiLCB2YXIpKSB7CisJCWh0dHBfc2NoYW5uZWxfY2hlY2tfcmV2b2tlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCgiaHR0cC5zY2hhbm5lbHVzZXNzbGNhaW5mbyIsIHZhcikpIHsKKwkJaHR0cF9zY2hhbm5lbF91c2Vfc3NsX2NhaW5mbyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAoImh0dHAubWluc2Vzc2lvbnMiLCB2YXIpKSB7CisJCW1pbl9jdXJsX3Nlc3Npb25zID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisjaWZuZGVmIFVTRV9DVVJMX01VTFRJCisJCWlmIChtaW5fY3VybF9zZXNzaW9ucyA+IDEpCisJCQltaW5fY3VybF9zZXNzaW9ucyA9IDE7CisjZW5kaWYKKwkJcmV0dXJuIDA7CisJfQorI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaWYgKCFzdHJjbXAoImh0dHAubWF4cmVxdWVzdHMiLCB2YXIpKSB7CisJCW1heF9yZXF1ZXN0cyA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwlpZiAoIXN0cmNtcCgiaHR0cC5sb3dzcGVlZGxpbWl0IiwgdmFyKSkgeworCQljdXJsX2xvd19zcGVlZF9saW1pdCA9IChsb25nKWdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoImh0dHAubG93c3BlZWR0aW1lIiwgdmFyKSkgeworCQljdXJsX2xvd19zcGVlZF90aW1lID0gKGxvbmcpZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJodHRwLm5vZXBzdiIsIHZhcikpIHsKKwkJY3VybF9mdHBfbm9fZXBzdiA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKCJodHRwLnByb3h5IiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZjdXJsX2h0dHBfcHJveHksIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAoImh0dHAucHJveHlhdXRobWV0aG9kIiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZodHRwX3Byb3h5X2F1dGhtZXRob2QsIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAoImh0dHAucHJveHlzc2xjZXJ0IiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZodHRwX3Byb3h5X3NzbF9jZXJ0LCB2YXIsIHZhbHVlKTsKKworCWlmICghc3RyY21wKCJodHRwLnByb3h5c3Nsa2V5IiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZodHRwX3Byb3h5X3NzbF9rZXksIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAoImh0dHAucHJveHlzc2xjYWluZm8iLCB2YXIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmh0dHBfcHJveHlfc3NsX2NhX2luZm8sIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAoImh0dHAucHJveHlzc2xjZXJ0cGFzc3dvcmRwcm90ZWN0ZWQiLCB2YXIpKSB7CisJCXByb3h5X3NzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCgiaHR0cC5jb29raWVmaWxlIiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfcGF0aG5hbWUoJmN1cmxfY29va2llX2ZpbGUsIHZhciwgdmFsdWUpOworCWlmICghc3RyY21wKCJodHRwLnNhdmVjb29raWVzIiwgdmFyKSkgeworCQljdXJsX3NhdmVfY29va2llcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAoImh0dHAucG9zdGJ1ZmZlciIsIHZhcikpIHsKKwkJaHR0cF9wb3N0X2J1ZmZlciA9IGdpdF9jb25maWdfc3NpemVfdCh2YXIsIHZhbHVlKTsKKwkJaWYgKGh0dHBfcG9zdF9idWZmZXIgPCAwKQorCQkJd2FybmluZyhfKCJuZWdhdGl2ZSB2YWx1ZSBmb3IgaHR0cC5wb3N0YnVmZmVyOyBkZWZhdWx0aW5nIHRvICVkIiksIExBUkdFX1BBQ0tFVF9NQVgpOworCQlpZiAoaHR0cF9wb3N0X2J1ZmZlciA8IExBUkdFX1BBQ0tFVF9NQVgpCisJCQlodHRwX3Bvc3RfYnVmZmVyID0gTEFSR0VfUEFDS0VUX01BWDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAoImh0dHAudXNlcmFnZW50IiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZ1c2VyX2FnZW50LCB2YXIsIHZhbHVlKTsKKworCWlmICghc3RyY21wKCJodHRwLmVtcHR5YXV0aCIsIHZhcikpIHsKKwkJaWYgKHZhbHVlICYmICFzdHJjbXAoImF1dG8iLCB2YWx1ZSkpCisJCQljdXJsX2VtcHR5X2F1dGggPSAtMTsKKwkJZWxzZQorCQkJY3VybF9lbXB0eV9hdXRoID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCgiaHR0cC5kZWxlZ2F0aW9uIiwgdmFyKSkgeworI2lmZGVmIENVUkxHU1NBUElfREVMRUdBVElPTl9GTEFHCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmY3VybF9kZWxlZywgdmFyLCB2YWx1ZSk7CisjZWxzZQorCQl3YXJuaW5nKF8oIkRlbGVnYXRpb24gY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMjIuMCIpKTsKKwkJcmV0dXJuIDA7CisjZW5kaWYKKwl9CisKKwlpZiAoIXN0cmNtcCgiaHR0cC5waW5uZWRwdWJrZXkiLCB2YXIpKSB7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MmMwMAorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmc3NsX3Bpbm5lZGtleSwgdmFyLCB2YWx1ZSk7CisjZWxzZQorCQl3YXJuaW5nKF8oIlB1YmxpYyBrZXkgcGlubmluZyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIpKTsKKwkJcmV0dXJuIDA7CisjZW5kaWYKKwl9CisKKwlpZiAoIXN0cmNtcCgiaHR0cC5leHRyYWhlYWRlciIsIHZhcikpIHsKKwkJaWYgKCF2YWx1ZSkgeworCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCX0gZWxzZSBpZiAoISp2YWx1ZSkgeworCQkJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX2h0dHBfaGVhZGVycywgMCk7CisJCX0gZWxzZSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmV4dHJhX2h0dHBfaGVhZGVycywgdmFsdWUpOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJodHRwLmZvbGxvd3JlZGlyZWN0cyIsIHZhcikpIHsKKwkJaWYgKHZhbHVlICYmICFzdHJjbXAodmFsdWUsICJpbml0aWFsIikpCisJCQlodHRwX2ZvbGxvd19jb25maWcgPSBIVFRQX0ZPTExPV19JTklUSUFMOworCQllbHNlIGlmIChnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkpCisJCQlodHRwX2ZvbGxvd19jb25maWcgPSBIVFRQX0ZPTExPV19BTFdBWVM7CisJCWVsc2UKKwkJCWh0dHBfZm9sbG93X2NvbmZpZyA9IEhUVFBfRk9MTE9XX05PTkU7CisJCXJldHVybiAwOworCX0KKworCS8qIEZhbGwgYmFjayBvbiB0aGUgZGVmYXVsdCBvbmVzICovCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBpbnQgY3VybF9lbXB0eV9hdXRoX2VuYWJsZWQodm9pZCkKK3sKKwlpZiAoY3VybF9lbXB0eV9hdXRoID49IDApCisJCXJldHVybiBjdXJsX2VtcHR5X2F1dGg7CisKKyNpZm5kZWYgTElCQ1VSTF9DQU5fSEFORExFX0FVVEhfQU5ZCisJLyoKKwkgKiBPdXIgbGliY3VybCBpcyB0b28gb2xkIHRvIGRvIEFVVEhfQU5ZIGluIHRoZSBmaXJzdCBwbGFjZTsKKwkgKiBqdXN0IGRlZmF1bHQgdG8gdHVybmluZyB0aGUgZmVhdHVyZSBvZmYuCisJICovCisjZWxzZQorCS8qCisJICogSW4gdGhlIGF1dG9tYXRpYyBjYXNlLCBraWNrIGluIHRoZSBlbXB0eS1hdXRoCisJICogaGFjayBhcyBsb25nIGFzIHdlIHdvdWxkIHBvdGVudGlhbGx5IHRyeSBzb21lCisJICogbWV0aG9kIG1vcmUgZXhvdGljIHRoYW4gIkJhc2ljIiBvciAiRGlnZXN0Ii4KKwkgKgorCSAqIEJ1dCBvbmx5IGRvIHRoaXMgd2hlbiB0aGlzIGlzIG91ciBzZWNvbmQgb3IKKwkgKiBzdWJzZXF1ZW50IHJlcXVlc3QsIGFzIGJ5IHRoZW4gd2Uga25vdyB3aGF0CisJICogbWV0aG9kcyBhcmUgYXZhaWxhYmxlLgorCSAqLworCWlmIChodHRwX2F1dGhfbWV0aG9kc19yZXN0cmljdGVkICYmCisJICAgIChodHRwX2F1dGhfbWV0aG9kcyAmIH5lbXB0eV9hdXRoX3VzZWxlc3MpKQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbml0X2N1cmxfaHR0cF9hdXRoKENVUkwgKnJlc3VsdCkKK3sKKwlpZiAoIWh0dHBfYXV0aC51c2VybmFtZSB8fCAhKmh0dHBfYXV0aC51c2VybmFtZSkgeworCQlpZiAoY3VybF9lbXB0eV9hdXRoX2VuYWJsZWQoKSkKKwkJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1VTRVJQV0QsICI6Iik7CisJCXJldHVybjsKKwl9CisKKwljcmVkZW50aWFsX2ZpbGwoJmh0dHBfYXV0aCk7CisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcxMzAxCisJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfVVNFUk5BTUUsIGh0dHBfYXV0aC51c2VybmFtZSk7CisJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUEFTU1dPUkQsIGh0dHBfYXV0aC5wYXNzd29yZCk7CisjZWxzZQorCXsKKwkJc3RhdGljIHN0cnVjdCBzdHJidWYgdXAgPSBTVFJCVUZfSU5JVDsKKwkJLyoKKwkJICogTm90ZSB0aGF0IHdlIGFzc3VtZSB3ZSBvbmx5IGV2ZXIgaGF2ZSBhIHNpbmdsZSBzZXQgb2YKKwkJICogY3JlZGVudGlhbHMgaW4gYSBnaXZlbiBwcm9ncmFtIHJ1biwgc28gd2UgZG8gbm90IGhhdmUKKwkJICogdG8gd29ycnkgYWJvdXQgdXBkYXRpbmcgdGhpcyBidWZmZXIsIG9ubHkgc2V0dGluZyBpdHMKKwkJICogaW5pdGlhbCB2YWx1ZS4KKwkJICovCisJCWlmICghdXAubGVuKQorCQkJc3RyYnVmX2FkZGYoJnVwLCAiJXM6JXMiLAorCQkJCWh0dHBfYXV0aC51c2VybmFtZSwgaHR0cF9hdXRoLnBhc3N3b3JkKTsKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfVVNFUlBXRCwgdXAuYnVmKTsKKwl9CisjZW5kaWYKK30KKworLyogKnZhciBtdXN0IGJlIGZyZWUtYWJsZSAqLworc3RhdGljIHZvaWQgdmFyX292ZXJyaWRlKGNvbnN0IGNoYXIgKip2YXIsIGNoYXIgKnZhbHVlKQoreworCWlmICh2YWx1ZSkgeworCQlmcmVlKCh2b2lkICopKnZhcik7CisJCSp2YXIgPSB4c3RyZHVwKHZhbHVlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9wcm94eWF1dGhfbmFtZV9wYXNzd29yZChDVVJMICpyZXN1bHQpCit7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTMwMQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9QUk9YWVVTRVJOQU1FLAorCQkJcHJveHlfYXV0aC51c2VybmFtZSk7CisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BST1hZUEFTU1dPUkQsCisJCQlwcm94eV9hdXRoLnBhc3N3b3JkKTsKKyNlbHNlCisJCXN0cnVjdCBzdHJidWYgcyA9IFNUUkJVRl9JTklUOworCisJCXN0cmJ1Zl9hZGRzdHJfdXJsZW5jb2RlKCZzLCBwcm94eV9hdXRoLnVzZXJuYW1lLAorCQkJCQlpc19yZmMzOTg2X3VucmVzZXJ2ZWQpOworCQlzdHJidWZfYWRkY2goJnMsICc6Jyk7CisJCXN0cmJ1Zl9hZGRzdHJfdXJsZW5jb2RlKCZzLCBwcm94eV9hdXRoLnBhc3N3b3JkLAorCQkJCQlpc19yZmMzOTg2X3VucmVzZXJ2ZWQpOworCQljdXJsX3Byb3h5dXNlcnB3ZCA9IHN0cmJ1Zl9kZXRhY2goJnMsIE5VTEwpOworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9QUk9YWVVTRVJQV0QsIGN1cmxfcHJveHl1c2VycHdkKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBpbml0X2N1cmxfcHJveHlfYXV0aChDVVJMICpyZXN1bHQpCit7CisJaWYgKHByb3h5X2F1dGgudXNlcm5hbWUpIHsKKwkJaWYgKCFwcm94eV9hdXRoLnBhc3N3b3JkKQorCQkJY3JlZGVudGlhbF9maWxsKCZwcm94eV9hdXRoKTsKKwkJc2V0X3Byb3h5YXV0aF9uYW1lX3Bhc3N3b3JkKHJlc3VsdCk7CisJfQorCisJdmFyX292ZXJyaWRlKCZodHRwX3Byb3h5X2F1dGhtZXRob2QsIGdldGVudigiR0lUX0hUVFBfUFJPWFlfQVVUSE1FVEhPRCIpKTsKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzBhMDcgLyogQ1VSTE9QVF9QUk9YWUFVVEggYW5kIENVUkxBVVRIX0FOWSAqLworCWlmIChodHRwX3Byb3h5X2F1dGhtZXRob2QpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb3h5X2F1dGhtZXRob2RzKTsgaSsrKSB7CisJCQlpZiAoIXN0cmNtcChodHRwX3Byb3h5X2F1dGhtZXRob2QsIHByb3h5X2F1dGhtZXRob2RzW2ldLm5hbWUpKSB7CisJCQkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUFJPWFlBVVRILAorCQkJCQkJcHJveHlfYXV0aG1ldGhvZHNbaV0uY3VybGF1dGhfcGFyYW0pOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpID09IEFSUkFZX1NJWkUocHJveHlfYXV0aG1ldGhvZHMpKSB7CisJCQl3YXJuaW5nKCJ1bnN1cHBvcnRlZCBwcm94eSBhdXRoZW50aWNhdGlvbiBtZXRob2QgJXM6IHVzaW5nIGFueWF1dGgiLAorCQkJCQlodHRwX3Byb3h5X2F1dGhtZXRob2QpOworCQkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUFJPWFlBVVRILCBDVVJMQVVUSF9BTlkpOworCQl9CisJfQorCWVsc2UKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUFJPWFlBVVRILCBDVVJMQVVUSF9BTlkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgaGFzX2NlcnRfcGFzc3dvcmQodm9pZCkKK3sKKwlpZiAoc3NsX2NlcnQgPT0gTlVMTCB8fCBzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZCAhPSAxKQorCQlyZXR1cm4gMDsKKwlpZiAoIWNlcnRfYXV0aC5wYXNzd29yZCkgeworCQljZXJ0X2F1dGgucHJvdG9jb2wgPSB4c3RyZHVwKCJjZXJ0Iik7CisJCWNlcnRfYXV0aC5ob3N0ID0geHN0cmR1cCgiIik7CisJCWNlcnRfYXV0aC51c2VybmFtZSA9IHhzdHJkdXAoIiIpOworCQljZXJ0X2F1dGgucGF0aCA9IHhzdHJkdXAoc3NsX2NlcnQpOworCQljcmVkZW50aWFsX2ZpbGwoJmNlcnRfYXV0aCk7CisJfQorCXJldHVybiAxOworfQorCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MzQwMAorc3RhdGljIGludCBoYXNfcHJveHlfY2VydF9wYXNzd29yZCh2b2lkKQoreworCWlmIChodHRwX3Byb3h5X3NzbF9jZXJ0ID09IE5VTEwgfHwgcHJveHlfc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgIT0gMSkKKwkJcmV0dXJuIDA7CisJaWYgKCFwcm94eV9jZXJ0X2F1dGgucGFzc3dvcmQpIHsKKwkJcHJveHlfY2VydF9hdXRoLnByb3RvY29sID0geHN0cmR1cCgiY2VydCIpOworCQlwcm94eV9jZXJ0X2F1dGguaG9zdCA9IHhzdHJkdXAoIiIpOworCQlwcm94eV9jZXJ0X2F1dGgudXNlcm5hbWUgPSB4c3RyZHVwKCIiKTsKKwkJcHJveHlfY2VydF9hdXRoLnBhdGggPSB4c3RyZHVwKGh0dHBfcHJveHlfc3NsX2NlcnQpOworCQljcmVkZW50aWFsX2ZpbGwoJnByb3h5X2NlcnRfYXV0aCk7CisJfQorCXJldHVybiAxOworfQorI2VuZGlmCisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcxOTAwCitzdGF0aWMgdm9pZCBzZXRfY3VybF9rZWVwYWxpdmUoQ1VSTCAqYykKK3sKKwljdXJsX2Vhc3lfc2V0b3B0KGMsIENVUkxPUFRfVENQX0tFRVBBTElWRSwgMSk7Cit9CisKKyNlbGlmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzEwMDAKK3N0YXRpYyBpbnQgc29ja29wdF9jYWxsYmFjayh2b2lkICpjbGllbnQsIGN1cmxfc29ja2V0X3QgZmQsIGN1cmxzb2NrdHlwZSB0eXBlKQoreworCWludCBrYSA9IDE7CisJaW50IHJjOworCXNvY2tsZW5fdCBsZW4gPSAoc29ja2xlbl90KXNpemVvZihrYSk7CisKKwlpZiAodHlwZSAhPSBDVVJMU09DS1RZUEVfSVBDWE4pCisJCXJldHVybiAwOworCisJcmMgPSBzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19LRUVQQUxJVkUsICh2b2lkICopJmthLCBsZW4pOworCWlmIChyYyA8IDApCisJCXdhcm5pbmdfZXJybm8oInVuYWJsZSB0byBzZXQgU09fS0VFUEFMSVZFIG9uIHNvY2tldCIpOworCisJcmV0dXJuIDA7IC8qIENVUkxfU09DS09QVF9PSyBvbmx5IGV4aXN0cyBzaW5jZSBjdXJsIDcuMjEuNSAqLworfQorCitzdGF0aWMgdm9pZCBzZXRfY3VybF9rZWVwYWxpdmUoQ1VSTCAqYykKK3sKKwljdXJsX2Vhc3lfc2V0b3B0KGMsIENVUkxPUFRfU09DS09QVEZVTkNUSU9OLCBzb2Nrb3B0X2NhbGxiYWNrKTsKK30KKworI2Vsc2UKK3N0YXRpYyB2b2lkIHNldF9jdXJsX2tlZXBhbGl2ZShDVVJMICpjKQoreworCS8qIG5vdCBzdXBwb3J0ZWQgb24gb2xkZXIgY3VybCB2ZXJzaW9ucyAqLworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHJlZGFjdF9zZW5zaXRpdmVfaGVhZGVyKHN0cnVjdCBzdHJidWYgKmhlYWRlcikKK3sKKwljb25zdCBjaGFyICpzZW5zaXRpdmVfaGVhZGVyOworCisJaWYgKHNraXBfcHJlZml4KGhlYWRlci0+YnVmLCAiQXV0aG9yaXphdGlvbjoiLCAmc2Vuc2l0aXZlX2hlYWRlcikgfHwKKwkgICAgc2tpcF9wcmVmaXgoaGVhZGVyLT5idWYsICJQcm94eS1BdXRob3JpemF0aW9uOiIsICZzZW5zaXRpdmVfaGVhZGVyKSkgeworCQkvKiBUaGUgZmlyc3QgdG9rZW4gaXMgdGhlIHR5cGUsIHdoaWNoIGlzIE9LIHRvIGxvZyAqLworCQl3aGlsZSAoaXNzcGFjZSgqc2Vuc2l0aXZlX2hlYWRlcikpCisJCQlzZW5zaXRpdmVfaGVhZGVyKys7CisJCXdoaWxlICgqc2Vuc2l0aXZlX2hlYWRlciAmJiAhaXNzcGFjZSgqc2Vuc2l0aXZlX2hlYWRlcikpCisJCQlzZW5zaXRpdmVfaGVhZGVyKys7CisJCS8qIEV2ZXJ5dGhpbmcgZWxzZSBpcyBvcGFxdWUgYW5kIHBvc3NpYmx5IHNlbnNpdGl2ZSAqLworCQlzdHJidWZfc2V0bGVuKGhlYWRlciwgIHNlbnNpdGl2ZV9oZWFkZXIgLSBoZWFkZXItPmJ1Zik7CisJCXN0cmJ1Zl9hZGRzdHIoaGVhZGVyLCAiIDxyZWRhY3RlZD4iKTsKKwl9IGVsc2UgaWYgKGNvb2tpZXNfdG9fcmVkYWN0Lm5yICYmCisJCSAgIHNraXBfcHJlZml4KGhlYWRlci0+YnVmLCAiQ29va2llOiIsICZzZW5zaXRpdmVfaGVhZGVyKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHJlZGFjdGVkX2hlYWRlciA9IFNUUkJVRl9JTklUOworCQljaGFyICpjb29raWU7CisKKwkJd2hpbGUgKGlzc3BhY2UoKnNlbnNpdGl2ZV9oZWFkZXIpKQorCQkJc2Vuc2l0aXZlX2hlYWRlcisrOworCisJCS8qCisJCSAqIFRoZSBjb250ZW50cyBvZiBoZWFkZXIgc3RhcnRpbmcgZnJvbSBzZW5zaXRpdmVfaGVhZGVyIHdpbGwKKwkJICogc3Vic2VxdWVudGx5IGJlIG92ZXJyaWRkZW4sIHNvIGl0IGlzIGZpbmUgdG8gbXV0YXRlIHRoaXMKKwkJICogc3RyaW5nIChoZW5jZSB0aGUgYXNzaWdubWVudCB0byAiY2hhciAqIikuCisJCSAqLworCQljb29raWUgPSAoY2hhciAqKSBzZW5zaXRpdmVfaGVhZGVyOworCisJCXdoaWxlIChjb29raWUpIHsKKwkJCWNoYXIgKmVxdWFsczsKKwkJCWNoYXIgKnNlbWljb2xvbiA9IHN0cnN0cihjb29raWUsICI7ICIpOworCQkJaWYgKHNlbWljb2xvbikKKwkJCQkqc2VtaWNvbG9uID0gMDsKKwkJCWVxdWFscyA9IHN0cmNocm51bChjb29raWUsICc9Jyk7CisJCQlpZiAoIWVxdWFscykgeworCQkJCS8qIGludmFsaWQgY29va2llLCBqdXN0IGFwcGVuZCBhbmQgY29udGludWUgKi8KKwkJCQlzdHJidWZfYWRkc3RyKCZyZWRhY3RlZF9oZWFkZXIsIGNvb2tpZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQkqZXF1YWxzID0gMDsgLyogdGVtcG9yYXJpbHkgc2V0IHRvIE5VTCBmb3IgbG9va3VwICovCisJCQlpZiAoc3RyaW5nX2xpc3RfbG9va3VwKCZjb29raWVzX3RvX3JlZGFjdCwgY29va2llKSkgeworCQkJCXN0cmJ1Zl9hZGRzdHIoJnJlZGFjdGVkX2hlYWRlciwgY29va2llKTsKKwkJCQlzdHJidWZfYWRkc3RyKCZyZWRhY3RlZF9oZWFkZXIsICI9PHJlZGFjdGVkPiIpOworCQkJfSBlbHNlIHsKKwkJCQkqZXF1YWxzID0gJz0nOworCQkJCXN0cmJ1Zl9hZGRzdHIoJnJlZGFjdGVkX2hlYWRlciwgY29va2llKTsKKwkJCX0KKwkJCWlmIChzZW1pY29sb24pIHsKKwkJCQkvKgorCQkJCSAqIFRoZXJlIGFyZSBtb3JlIGNvb2tpZXMuIChPciwgZm9yIHNvbWUKKwkJCQkgKiByZWFzb24sIHRoZSBpbnB1dCBzdHJpbmcgZW5kcyBpbiAiOyAiLikKKwkJCQkgKi8KKwkJCQlzdHJidWZfYWRkc3RyKCZyZWRhY3RlZF9oZWFkZXIsICI7ICIpOworCQkJCWNvb2tpZSA9IHNlbWljb2xvbiArIHN0cmxlbigiOyAiKTsKKwkJCX0gZWxzZSB7CisJCQkJY29va2llID0gTlVMTDsKKwkJCX0KKwkJfQorCisJCXN0cmJ1Zl9zZXRsZW4oaGVhZGVyLCBzZW5zaXRpdmVfaGVhZGVyIC0gaGVhZGVyLT5idWYpOworCQlzdHJidWZfYWRkYnVmKGhlYWRlciwgJnJlZGFjdGVkX2hlYWRlcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBjdXJsX2R1bXBfaGVhZGVyKGNvbnN0IGNoYXIgKnRleHQsIHVuc2lnbmVkIGNoYXIgKnB0ciwgc2l6ZV90IHNpemUsIGludCBoaWRlX3NlbnNpdGl2ZV9oZWFkZXIpCit7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmICoqaGVhZGVycywgKipoZWFkZXI7CisKKwlzdHJidWZfYWRkZigmb3V0LCAiJXMsICUxMC4xMGxkIGJ5dGVzICgweCU4LjhseClcbiIsCisJCXRleHQsIChsb25nKXNpemUsIChsb25nKXNpemUpOworCXRyYWNlX3N0cmJ1ZigmdHJhY2VfY3VybCwgJm91dCk7CisJc3RyYnVmX3Jlc2V0KCZvdXQpOworCXN0cmJ1Zl9hZGQoJm91dCwgcHRyLCBzaXplKTsKKwloZWFkZXJzID0gc3RyYnVmX3NwbGl0X21heCgmb3V0LCAnXG4nLCAwKTsKKworCWZvciAoaGVhZGVyID0gaGVhZGVyczsgKmhlYWRlcjsgaGVhZGVyKyspIHsKKwkJaWYgKGhpZGVfc2Vuc2l0aXZlX2hlYWRlcikKKwkJCXJlZGFjdF9zZW5zaXRpdmVfaGVhZGVyKCpoZWFkZXIpOworCQlzdHJidWZfaW5zZXJ0c3RyKCgqaGVhZGVyKSwgMCwgdGV4dCk7CisJCXN0cmJ1Zl9pbnNlcnRzdHIoKCpoZWFkZXIpLCBzdHJsZW4odGV4dCksICI6ICIpOworCQlzdHJidWZfcnRyaW0oKCpoZWFkZXIpKTsKKwkJc3RyYnVmX2FkZGNoKCgqaGVhZGVyKSwgJ1xuJyk7CisJCXRyYWNlX3N0cmJ1ZigmdHJhY2VfY3VybCwgKCpoZWFkZXIpKTsKKwl9CisJc3RyYnVmX2xpc3RfZnJlZShoZWFkZXJzKTsKKwlzdHJidWZfcmVsZWFzZSgmb3V0KTsKK30KKworc3RhdGljIHZvaWQgY3VybF9kdW1wX2RhdGEoY29uc3QgY2hhciAqdGV4dCwgdW5zaWduZWQgY2hhciAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKwlzaXplX3QgaTsKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGludCB3aWR0aCA9IDYwOworCisJc3RyYnVmX2FkZGYoJm91dCwgIiVzLCAlMTAuMTBsZCBieXRlcyAoMHglOC44bHgpXG4iLAorCQl0ZXh0LCAobG9uZylzaXplLCAobG9uZylzaXplKTsKKwl0cmFjZV9zdHJidWYoJnRyYWNlX2N1cmwsICZvdXQpOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gd2lkdGgpIHsKKwkJc2l6ZV90IHc7CisKKwkJc3RyYnVmX3Jlc2V0KCZvdXQpOworCQlzdHJidWZfYWRkZigmb3V0LCAiJXM6ICIsIHRleHQpOworCQlmb3IgKHcgPSAwOyAodyA8IHdpZHRoKSAmJiAoaSArIHcgPCBzaXplKTsgdysrKSB7CisJCQl1bnNpZ25lZCBjaGFyIGNoID0gcHRyW2kgKyB3XTsKKworCQkJc3RyYnVmX2FkZGNoKCZvdXQsCisJCQkJICAgICAgIChjaCA+PSAweDIwKSAmJiAoY2ggPCAweDgwKQorCQkJCSAgICAgICA/IGNoIDogJy4nKTsKKwkJfQorCQlzdHJidWZfYWRkY2goJm91dCwgJ1xuJyk7CisJCXRyYWNlX3N0cmJ1ZigmdHJhY2VfY3VybCwgJm91dCk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworfQorCitzdGF0aWMgaW50IGN1cmxfdHJhY2UoQ1VSTCAqaGFuZGxlLCBjdXJsX2luZm90eXBlIHR5cGUsIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplLCB2b2lkICp1c2VycCkKK3sKKwljb25zdCBjaGFyICp0ZXh0OworCWVudW0geyBOT19GSUxURVIgPSAwLCBET19GSUxURVIgPSAxIH07CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIENVUkxJTkZPX1RFWFQ6CisJCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX2N1cmwsICI9PSBJbmZvOiAlcyIsIGRhdGEpOworCQlicmVhazsKKwljYXNlIENVUkxJTkZPX0hFQURFUl9PVVQ6CisJCXRleHQgPSAiPT4gU2VuZCBoZWFkZXIiOworCQljdXJsX2R1bXBfaGVhZGVyKHRleHQsICh1bnNpZ25lZCBjaGFyICopZGF0YSwgc2l6ZSwgRE9fRklMVEVSKTsKKwkJYnJlYWs7CisJY2FzZSBDVVJMSU5GT19EQVRBX09VVDoKKwkJaWYgKHRyYWNlX2N1cmxfZGF0YSkgeworCQkJdGV4dCA9ICI9PiBTZW5kIGRhdGEiOworCQkJY3VybF9kdW1wX2RhdGEodGV4dCwgKHVuc2lnbmVkIGNoYXIgKilkYXRhLCBzaXplKTsKKwkJfQorCQlicmVhazsKKwljYXNlIENVUkxJTkZPX1NTTF9EQVRBX09VVDoKKwkJaWYgKHRyYWNlX2N1cmxfZGF0YSkgeworCQkJdGV4dCA9ICI9PiBTZW5kIFNTTCBkYXRhIjsKKwkJCWN1cmxfZHVtcF9kYXRhKHRleHQsICh1bnNpZ25lZCBjaGFyICopZGF0YSwgc2l6ZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDVVJMSU5GT19IRUFERVJfSU46CisJCXRleHQgPSAiPD0gUmVjdiBoZWFkZXIiOworCQljdXJsX2R1bXBfaGVhZGVyKHRleHQsICh1bnNpZ25lZCBjaGFyICopZGF0YSwgc2l6ZSwgTk9fRklMVEVSKTsKKwkJYnJlYWs7CisJY2FzZSBDVVJMSU5GT19EQVRBX0lOOgorCQlpZiAodHJhY2VfY3VybF9kYXRhKSB7CisJCQl0ZXh0ID0gIjw9IFJlY3YgZGF0YSI7CisJCQljdXJsX2R1bXBfZGF0YSh0ZXh0LCAodW5zaWduZWQgY2hhciAqKWRhdGEsIHNpemUpOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1VSTElORk9fU1NMX0RBVEFfSU46CisJCWlmICh0cmFjZV9jdXJsX2RhdGEpIHsKKwkJCXRleHQgPSAiPD0gUmVjdiBTU0wgZGF0YSI7CisJCQljdXJsX2R1bXBfZGF0YSh0ZXh0LCAodW5zaWduZWQgY2hhciAqKWRhdGEsIHNpemUpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoJCS8qIHdlIGlnbm9yZSB1bmtub3duIHR5cGVzIGJ5IGRlZmF1bHQgKi8KKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHNldHVwX2N1cmxfdHJhY2UoQ1VSTCAqaGFuZGxlKQoreworCWlmICghdHJhY2Vfd2FudCgmdHJhY2VfY3VybCkpCisJCXJldHVybjsKKwljdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisJY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxPUFRfREVCVUdGVU5DVElPTiwgY3VybF90cmFjZSk7CisJY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxPUFRfREVCVUdEQVRBLCBOVUxMKTsKK30KKworI2lmZGVmIENVUkxQUk9UT19IVFRQCitzdGF0aWMgbG9uZyBnZXRfY3VybF9hbGxvd2VkX3Byb3RvY29scyhpbnQgZnJvbV91c2VyKQoreworCWxvbmcgYWxsb3dlZF9wcm90b2NvbHMgPSAwOworCisJaWYgKGlzX3RyYW5zcG9ydF9hbGxvd2VkKCJodHRwIiwgZnJvbV91c2VyKSkKKwkJYWxsb3dlZF9wcm90b2NvbHMgfD0gQ1VSTFBST1RPX0hUVFA7CisJaWYgKGlzX3RyYW5zcG9ydF9hbGxvd2VkKCJodHRwcyIsIGZyb21fdXNlcikpCisJCWFsbG93ZWRfcHJvdG9jb2xzIHw9IENVUkxQUk9UT19IVFRQUzsKKwlpZiAoaXNfdHJhbnNwb3J0X2FsbG93ZWQoImZ0cCIsIGZyb21fdXNlcikpCisJCWFsbG93ZWRfcHJvdG9jb2xzIHw9IENVUkxQUk9UT19GVFA7CisJaWYgKGlzX3RyYW5zcG9ydF9hbGxvd2VkKCJmdHBzIiwgZnJvbV91c2VyKSkKKwkJYWxsb3dlZF9wcm90b2NvbHMgfD0gQ1VSTFBST1RPX0ZUUFM7CisKKwlyZXR1cm4gYWxsb3dlZF9wcm90b2NvbHM7Cit9CisjZW5kaWYKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0weDA3MmYwMAorc3RhdGljIGludCBnZXRfY3VybF9odHRwX3ZlcnNpb25fb3B0KGNvbnN0IGNoYXIgKnZlcnNpb25fc3RyaW5nLCBsb25nICpvcHQpCit7CisJaW50IGk7CisJc3RhdGljIHN0cnVjdCB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCWxvbmcgb3B0X3Rva2VuOworCX0gY2hvaWNlW10gPSB7CisJCXsgIkhUVFAvMS4xIiwgQ1VSTF9IVFRQX1ZFUlNJT05fMV8xIH0sCisJCXsgIkhUVFAvMiIsIENVUkxfSFRUUF9WRVJTSU9OXzIgfQorCX07CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaG9pY2UpOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAodmVyc2lvbl9zdHJpbmcsIGNob2ljZVtpXS5uYW1lKSkgeworCQkJKm9wdCA9IGNob2ljZVtpXS5vcHRfdG9rZW47CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXdhcm5pbmcoInVua25vd24gdmFsdWUgZ2l2ZW4gdG8gaHR0cC52ZXJzaW9uOiAnJXMnIiwgdmVyc2lvbl9zdHJpbmcpOworCXJldHVybiAtMTsgLyogbm90IGZvdW5kICovCit9CisKKyNlbmRpZgorCitzdGF0aWMgQ1VSTCAqZ2V0X2N1cmxfaGFuZGxlKHZvaWQpCit7CisJQ1VSTCAqcmVzdWx0ID0gY3VybF9lYXN5X2luaXQoKTsKKworCWlmICghcmVzdWx0KQorCQlkaWUoImN1cmxfZWFzeV9pbml0IGZhaWxlZCIpOworCisJaWYgKCFjdXJsX3NzbF92ZXJpZnkpIHsKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDApOworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMCk7CisJfSBlbHNlIHsKKwkJLyogVmVyaWZ5IGF1dGhlbnRpY2l0eSBvZiB0aGUgcGVlcidzIGNlcnRpZmljYXRlICovCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAxKTsKKwkJLyogVGhlIG5hbWUgaW4gdGhlIGNlcnQgbXVzdCBtYXRjaCB3aG9tIHdlIHRyaWVkIHRvIGNvbm5lY3QgKi8KKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIDIpOworCX0KKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzJmMDAgLy8gNy40Ny4wCisgICAgaWYgKGN1cmxfaHR0cF92ZXJzaW9uKSB7CisJCWxvbmcgb3B0OworCQlpZiAoIWdldF9jdXJsX2h0dHBfdmVyc2lvbl9vcHQoY3VybF9odHRwX3ZlcnNpb24sICZvcHQpKSB7CisJCQkvKiBTZXQgcmVxdWVzdCB1c2UgaHR0cCB2ZXJzaW9uICovCisJCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9IVFRQX1ZFUlNJT04sIG9wdCk7CisJCX0KKyAgICB9CisjZW5kaWYKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDcKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9ORVRSQywgQ1VSTF9ORVRSQ19PUFRJT05BTCk7CisjZW5kaWYKKyNpZmRlZiBMSUJDVVJMX0NBTl9IQU5ETEVfQVVUSF9BTlkKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKKyNlbmRpZgorCisjaWZkZWYgQ1VSTEdTU0FQSV9ERUxFR0FUSU9OX0ZMQUcKKwlpZiAoY3VybF9kZWxlZykgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3VybF9kZWxlZ19sZXZlbHMpOyBpKyspIHsKKwkJCWlmICghc3RyY21wKGN1cmxfZGVsZWcsIGN1cmxfZGVsZWdfbGV2ZWxzW2ldLm5hbWUpKSB7CisJCQkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfR1NTQVBJX0RFTEVHQVRJT04sCisJCQkJCQljdXJsX2RlbGVnX2xldmVsc1tpXS5jdXJsX2RlbGVnX3BhcmFtKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA9PSBBUlJBWV9TSVpFKGN1cmxfZGVsZWdfbGV2ZWxzKSkKKwkJCXdhcm5pbmcoIlVua25vd24gZGVsZWdhdGlvbiBtZXRob2QgJyVzJzogdXNpbmcgZGVmYXVsdCIsCisJCQkJY3VybF9kZWxlZyk7CisJfQorI2VuZGlmCisKKwlpZiAoaHR0cF9zc2xfYmFja2VuZCAmJiAhc3RyY21wKCJzY2hhbm5lbCIsIGh0dHBfc3NsX2JhY2tlbmQpICYmCisJICAgICFodHRwX3NjaGFubmVsX2NoZWNrX3Jldm9rZSkgeworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzJjMDAKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMX09QVElPTlMsIENVUkxTU0xPUFRfTk9fUkVWT0tFKTsKKyNlbHNlCisJCXdhcm5pbmcoXygiQ1VSTFNTTE9QVF9OT19SRVZPS0Ugbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiKSk7CisjZW5kaWYKKwl9CisKKwlpZiAoaHR0cF9wcm9hY3RpdmVfYXV0aCkKKwkJaW5pdF9jdXJsX2h0dHBfYXV0aChyZXN1bHQpOworCisJaWYgKGdldGVudigiR0lUX1NTTF9WRVJTSU9OIikpCisJCXNzbF92ZXJzaW9uID0gZ2V0ZW52KCJHSVRfU1NMX1ZFUlNJT04iKTsKKwlpZiAoc3NsX3ZlcnNpb24gJiYgKnNzbF92ZXJzaW9uKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzc2x2ZXJzaW9ucyk7IGkrKykgeworCQkJaWYgKCFzdHJjbXAoc3NsX3ZlcnNpb24sIHNzbHZlcnNpb25zW2ldLm5hbWUpKSB7CisJCQkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMVkVSU0lPTiwKKwkJCQkJCSBzc2x2ZXJzaW9uc1tpXS5zc2xfdmVyc2lvbik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPT0gQVJSQVlfU0laRShzc2x2ZXJzaW9ucykpCisJCQl3YXJuaW5nKCJ1bnN1cHBvcnRlZCBzc2wgdmVyc2lvbiAlczogdXNpbmcgZGVmYXVsdCIsCisJCQkJc3NsX3ZlcnNpb24pOworCX0KKworCWlmIChnZXRlbnYoIkdJVF9TU0xfQ0lQSEVSX0xJU1QiKSkKKwkJc3NsX2NpcGhlcmxpc3QgPSBnZXRlbnYoIkdJVF9TU0xfQ0lQSEVSX0xJU1QiKTsKKwlpZiAoc3NsX2NpcGhlcmxpc3QgIT0gTlVMTCAmJiAqc3NsX2NpcGhlcmxpc3QpCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1NTTF9DSVBIRVJfTElTVCwKKwkJCQlzc2xfY2lwaGVybGlzdCk7CisKKwlpZiAoc3NsX2NlcnQgIT0gTlVMTCkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMQ0VSVCwgc3NsX2NlcnQpOworCWlmIChoYXNfY2VydF9wYXNzd29yZCgpKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9LRVlQQVNTV0QsIGNlcnRfYXV0aC5wYXNzd29yZCk7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMworCWlmIChzc2xfa2V5ICE9IE5VTEwpCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1NTTEtFWSwgc3NsX2tleSk7CisjZW5kaWYKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA4CisJaWYgKHNzbF9jYXBhdGggIT0gTlVMTCkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfQ0FQQVRILCBzc2xfY2FwYXRoKTsKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzJjMDAKKwlpZiAoc3NsX3Bpbm5lZGtleSAhPSBOVUxMKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9QSU5ORURQVUJMSUNLRVksIHNzbF9waW5uZWRrZXkpOworI2VuZGlmCisJaWYgKGh0dHBfc3NsX2JhY2tlbmQgJiYgIXN0cmNtcCgic2NoYW5uZWwiLCBodHRwX3NzbF9iYWNrZW5kKSAmJgorCSAgICAhaHR0cF9zY2hhbm5lbF91c2Vfc3NsX2NhaW5mbykgeworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9DQUlORk8sIE5VTEwpOworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzM0MDAKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUFJPWFlfQ0FJTkZPLCBOVUxMKTsKKyNlbmRpZgorCX0gZWxzZSBpZiAoc3NsX2NhaW5mbyAhPSBOVUxMIHx8IGh0dHBfcHJveHlfc3NsX2NhX2luZm8gIT0gTlVMTCkgeworCQlpZiAoc3NsX2NhaW5mbyAhPSBOVUxMKQorCQkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfQ0FJTkZPLCBzc2xfY2FpbmZvKTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDczNDAwCisJCWlmIChodHRwX3Byb3h5X3NzbF9jYV9pbmZvICE9IE5VTEwpCisJCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9QUk9YWV9DQUlORk8sIGh0dHBfcHJveHlfc3NsX2NhX2luZm8pOworI2VuZGlmCisJfQorCisJaWYgKGN1cmxfbG93X3NwZWVkX2xpbWl0ID4gMCAmJiBjdXJsX2xvd19zcGVlZF90aW1lID4gMCkgeworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9MT1dfU1BFRURfTElNSVQsCisJCQkJIGN1cmxfbG93X3NwZWVkX2xpbWl0KTsKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfTE9XX1NQRUVEX1RJTUUsCisJCQkJIGN1cmxfbG93X3NwZWVkX3RpbWUpOworCX0KKworCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX01BWFJFRElSUywgMjApOworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzEzMDEKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9QT1NUUkVESVIsIENVUkxfUkVESVJfUE9TVF9BTEwpOworI2VsaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTEwMQorCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BPU1QzMDEsIDEpOworI2VuZGlmCisjaWZkZWYgQ1VSTFBST1RPX0hUVFAKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9SRURJUl9QUk9UT0NPTFMsCisJCQkgZ2V0X2N1cmxfYWxsb3dlZF9wcm90b2NvbHMoMCkpOworCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BST1RPQ09MUywKKwkJCSBnZXRfY3VybF9hbGxvd2VkX3Byb3RvY29scygtMSkpOworI2Vsc2UKKwl3YXJuaW5nKF8oIlByb3RvY29sIHJlc3RyaWN0aW9ucyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMTkuNCIpKTsKKyNlbmRpZgorCWlmIChnZXRlbnYoIkdJVF9DVVJMX1ZFUkJPU0UiKSkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCXNldHVwX2N1cmxfdHJhY2UocmVzdWx0KTsKKwlpZiAoZ2V0ZW52KCJHSVRfVFJBQ0VfQ1VSTF9OT19EQVRBIikpCisJCXRyYWNlX2N1cmxfZGF0YSA9IDA7CisJaWYgKGdldGVudigiR0lUX1JFREFDVF9DT09LSUVTIikpIHsKKwkJc3RyaW5nX2xpc3Rfc3BsaXQoJmNvb2tpZXNfdG9fcmVkYWN0LAorCQkJCSAgZ2V0ZW52KCJHSVRfUkVEQUNUX0NPT0tJRVMiKSwgJywnLCAtMSk7CisJCXN0cmluZ19saXN0X3NvcnQoJmNvb2tpZXNfdG9fcmVkYWN0KTsKKwl9CisKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9VU0VSQUdFTlQsCisJCXVzZXJfYWdlbnQgPyB1c2VyX2FnZW50IDogZ2l0X3VzZXJfYWdlbnQoKSk7CisKKwlpZiAoY3VybF9mdHBfbm9fZXBzdikKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfRlRQX1VTRV9FUFNWLCAwKTsKKworI2lmZGVmIENVUkxPUFRfVVNFX1NTTAorCWlmIChjdXJsX3NzbF90cnkpCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1VTRV9TU0wsIENVUkxVU0VTU0xfVFJZKTsKKyNlbmRpZgorCisJLyoKKwkgKiBDVVJMIGFsc28gZXhhbWluZXMgdGhlc2UgdmFyaWFibGVzIGFzIGEgZmFsbGJhY2s7IGJ1dCB3ZSBuZWVkIHRvIHF1ZXJ5CisJICogdGhlbSBoZXJlIGluIG9yZGVyIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHByb21wdCBmb3IgbWlzc2luZyBwYXNzd29yZCAoY2YuCisJICogaW5pdF9jdXJsX3Byb3h5X2F1dGgoKSkuCisJICoKKwkgKiBVbmxpa2UgbWFueSBvdGhlciBjb21tb24gZW52aXJvbm1lbnQgdmFyaWFibGVzLCB0aGVzZSBhcmUgaGlzdG9yaWNhbGx5CisJICogbG93ZXJjYXNlIG9ubHkuIEl0IGFwcGVhcnMgdGhhdCBDVVJMIGRpZCBub3Qga25vdyB0aGlzIGFuZCBpbXBsZW1lbnRlZAorCSAqIG9ubHkgdXBwZXJjYXNlIHZhcmlhbnRzLCB3aGljaCB3YXMgbGF0ZXIgY29ycmVjdGVkIHRvIHRha2UgYm90aCAtIHdpdGgKKwkgKiB0aGUgZXhjZXB0aW9uIG9mIGh0dHBfcHJveHksIHdoaWNoIGlzIGxvd2VyY2FzZSBvbmx5IGFsc28gaW4gQ1VSTC4gQXMKKwkgKiB0aGUgbG93ZXJjYXNlIHZlcnNpb25zIGFyZSB0aGUgaGlzdG9yaWNhbCBxdWFzaS1zdGFuZGFyZCwgdGhleSB0YWtlCisJICogcHJlY2VkZW5jZSBoZXJlLCBhcyBpbiBDVVJMLgorCSAqLworCWlmICghY3VybF9odHRwX3Byb3h5KSB7CisJCWlmIChodHRwX2F1dGgucHJvdG9jb2wgJiYgIXN0cmNtcChodHRwX2F1dGgucHJvdG9jb2wsICJodHRwcyIpKSB7CisJCQl2YXJfb3ZlcnJpZGUoJmN1cmxfaHR0cF9wcm94eSwgZ2V0ZW52KCJIVFRQU19QUk9YWSIpKTsKKwkJCXZhcl9vdmVycmlkZSgmY3VybF9odHRwX3Byb3h5LCBnZXRlbnYoImh0dHBzX3Byb3h5IikpOworCQl9IGVsc2UgeworCQkJdmFyX292ZXJyaWRlKCZjdXJsX2h0dHBfcHJveHksIGdldGVudigiaHR0cF9wcm94eSIpKTsKKwkJfQorCQlpZiAoIWN1cmxfaHR0cF9wcm94eSkgeworCQkJdmFyX292ZXJyaWRlKCZjdXJsX2h0dHBfcHJveHksIGdldGVudigiQUxMX1BST1hZIikpOworCQkJdmFyX292ZXJyaWRlKCZjdXJsX2h0dHBfcHJveHksIGdldGVudigiYWxsX3Byb3h5IikpOworCQl9CisJfQorCisJaWYgKGN1cmxfaHR0cF9wcm94eSAmJiBjdXJsX2h0dHBfcHJveHlbMF0gPT0gJ1wwJykgeworCQkvKgorCQkgKiBIYW5kbGUgY2FzZSB3aXRoIHRoZSBlbXB0eSBodHRwLnByb3h5IHZhbHVlIGhlcmUgdG8ga2VlcAorCQkgKiBjb21tb24gY29kZSBjbGVhbi4KKwkJICogTkI6IGVtcHR5IG9wdGlvbiBkaXNhYmxlcyBwcm94eWluZyBhdCBhbGwuCisJCSAqLworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9QUk9YWSwgIiIpOworCX0gZWxzZSBpZiAoY3VybF9odHRwX3Byb3h5KSB7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTgwMAorCQlpZiAoc3RhcnRzX3dpdGgoY3VybF9odHRwX3Byb3h5LCAic29ja3M1aCIpKQorCQkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsCisJCQkJQ1VSTE9QVF9QUk9YWVRZUEUsIENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUUpOworCQllbHNlIGlmIChzdGFydHNfd2l0aChjdXJsX2h0dHBfcHJveHksICJzb2NrczUiKSkKKwkJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LAorCQkJCUNVUkxPUFRfUFJPWFlUWVBFLCBDVVJMUFJPWFlfU09DS1M1KTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgoY3VybF9odHRwX3Byb3h5LCAic29ja3M0YSIpKQorCQkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsCisJCQkJQ1VSTE9QVF9QUk9YWVRZUEUsIENVUkxQUk9YWV9TT0NLUzRBKTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgoY3VybF9odHRwX3Byb3h5LCAic29ja3MiKSkKKwkJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LAorCQkJCUNVUkxPUFRfUFJPWFlUWVBFLCBDVVJMUFJPWFlfU09DS1M0KTsKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzM0MDAKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgoY3VybF9odHRwX3Byb3h5LCAiaHR0cHMiKSkgeworCQkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUFJPWFlUWVBFLCBDVVJMUFJPWFlfSFRUUFMpOworCisJCQlpZiAoaHR0cF9wcm94eV9zc2xfY2VydCkKKwkJCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9QUk9YWV9TU0xDRVJULCBodHRwX3Byb3h5X3NzbF9jZXJ0KTsKKworCQkJaWYgKGh0dHBfcHJveHlfc3NsX2tleSkKKwkJCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9QUk9YWV9TU0xLRVksIGh0dHBfcHJveHlfc3NsX2tleSk7CisKKwkJCWlmIChoYXNfcHJveHlfY2VydF9wYXNzd29yZCgpKQorCQkJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BST1hZX0tFWVBBU1NXRCwgcHJveHlfY2VydF9hdXRoLnBhc3N3b3JkKTsKKwkJfQorI2VuZGlmCisJCWlmIChzdHJzdHIoY3VybF9odHRwX3Byb3h5LCAiOi8vIikpCisJCQljcmVkZW50aWFsX2Zyb21fdXJsKCZwcm94eV9hdXRoLCBjdXJsX2h0dHBfcHJveHkpOworCQllbHNlIHsKKwkJCXN0cnVjdCBzdHJidWYgdXJsID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJidWZfYWRkZigmdXJsLCAiaHR0cDovLyVzIiwgY3VybF9odHRwX3Byb3h5KTsKKwkJCWNyZWRlbnRpYWxfZnJvbV91cmwoJnByb3h5X2F1dGgsIHVybC5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJnVybCk7CisJCX0KKworCQlpZiAoIXByb3h5X2F1dGguaG9zdCkKKwkJCWRpZSgiSW52YWxpZCBwcm94eSBVUkwgJyVzJyIsIGN1cmxfaHR0cF9wcm94eSk7CisKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUFJPWFksIHByb3h5X2F1dGguaG9zdCk7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTMwNAorCQl2YXJfb3ZlcnJpZGUoJmN1cmxfbm9fcHJveHksIGdldGVudigiTk9fUFJPWFkiKSk7CisJCXZhcl9vdmVycmlkZSgmY3VybF9ub19wcm94eSwgZ2V0ZW52KCJub19wcm94eSIpKTsKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfTk9QUk9YWSwgY3VybF9ub19wcm94eSk7CisjZW5kaWYKKwl9CisJaW5pdF9jdXJsX3Byb3h5X2F1dGgocmVzdWx0KTsKKworCXNldF9jdXJsX2tlZXBhbGl2ZShyZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgc2V0X2Zyb21fZW52KGNvbnN0IGNoYXIgKip2YXIsIGNvbnN0IGNoYXIgKmVudm5hbWUpCit7CisJY29uc3QgY2hhciAqdmFsID0gZ2V0ZW52KGVudm5hbWUpOworCWlmICh2YWwpCisJCSp2YXIgPSB2YWw7Cit9CisKK3ZvaWQgaHR0cF9pbml0KHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqdXJsLCBpbnQgcHJvYWN0aXZlX2F1dGgpCit7CisJY2hhciAqbG93X3NwZWVkX2xpbWl0OworCWNoYXIgKmxvd19zcGVlZF90aW1lOworCWNoYXIgKm5vcm1hbGl6ZWRfdXJsOworCXN0cnVjdCB1cmxtYXRjaF9jb25maWcgY29uZmlnID0geyBTVFJJTkdfTElTVF9JTklUX0RVUCB9OworCisJY29uZmlnLnNlY3Rpb24gPSAiaHR0cCI7CisJY29uZmlnLmtleSA9IE5VTEw7CisJY29uZmlnLmNvbGxlY3RfZm4gPSBodHRwX29wdGlvbnM7CisJY29uZmlnLmNhc2NhZGVfZm4gPSBnaXRfZGVmYXVsdF9jb25maWc7CisJY29uZmlnLmNiID0gTlVMTDsKKworCWh0dHBfaXNfdmVyYm9zZSA9IDA7CisJbm9ybWFsaXplZF91cmwgPSB1cmxfbm9ybWFsaXplKHVybCwgJmNvbmZpZy51cmwpOworCisJZ2l0X2NvbmZpZyh1cmxtYXRjaF9jb25maWdfZW50cnksICZjb25maWcpOworCWZyZWUobm9ybWFsaXplZF91cmwpOworCXN0cmluZ19saXN0X2NsZWFyKCZjb25maWcudmFycywgMSk7CisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDczODAwCisJaWYgKGh0dHBfc3NsX2JhY2tlbmQpIHsKKwkJY29uc3QgY3VybF9zc2xfYmFja2VuZCAqKmJhY2tlbmRzOworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlpbnQgaTsKKworCQlzd2l0Y2ggKGN1cmxfZ2xvYmFsX3NzbHNldCgtMSwgaHR0cF9zc2xfYmFja2VuZCwgJmJhY2tlbmRzKSkgeworCQljYXNlIENVUkxTU0xTRVRfVU5LTk9XTl9CQUNLRU5EOgorCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgXygiVW5zdXBwb3J0ZWQgU1NMIGJhY2tlbmQgJyVzJy4gIgorCQkJCQkgICAgIlN1cHBvcnRlZCBTU0wgYmFja2VuZHM6IiksCisJCQkJCSAgICBodHRwX3NzbF9iYWNrZW5kKTsKKwkJCWZvciAoaSA9IDA7IGJhY2tlbmRzW2ldOyBpKyspCisJCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIlxuXHQlcyIsIGJhY2tlbmRzW2ldLT5uYW1lKTsKKwkJCWRpZSgiJXMiLCBidWYuYnVmKTsKKwkJY2FzZSBDVVJMU1NMU0VUX05PX0JBQ0tFTkRTOgorCQkJZGllKF8oIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogIgorCQkJICAgICAgImNVUkwgd2FzIGJ1aWx0IHdpdGhvdXQgU1NMIGJhY2tlbmRzIiksCisJCQkgICAgaHR0cF9zc2xfYmFja2VuZCk7CisJCWNhc2UgQ1VSTFNTTFNFVF9UT09fTEFURToKKwkJCWRpZShfKCJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGFscmVhZHkgc2V0IiksCisJCQkgICAgaHR0cF9zc2xfYmFja2VuZCk7CisJCWNhc2UgQ1VSTFNTTFNFVF9PSzoKKwkJCWJyZWFrOyAvKiBPa2F5ISAqLworCQl9CisJfQorI2VuZGlmCisKKwlpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpICE9IENVUkxFX09LKQorCQlkaWUoImN1cmxfZ2xvYmFsX2luaXQgZmFpbGVkIik7CisKKwlodHRwX3Byb2FjdGl2ZV9hdXRoID0gcHJvYWN0aXZlX2F1dGg7CisKKwlpZiAocmVtb3RlICYmIHJlbW90ZS0+aHR0cF9wcm94eSkKKwkJY3VybF9odHRwX3Byb3h5ID0geHN0cmR1cChyZW1vdGUtPmh0dHBfcHJveHkpOworCisJaWYgKHJlbW90ZSkKKwkJdmFyX292ZXJyaWRlKCZodHRwX3Byb3h5X2F1dGhtZXRob2QsIHJlbW90ZS0+aHR0cF9wcm94eV9hdXRobWV0aG9kKTsKKworCXByYWdtYV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChodHRwX2NvcHlfZGVmYXVsdF9oZWFkZXJzKCksCisJCSJQcmFnbWE6IG5vLWNhY2hlIik7CisJbm9fcHJhZ21hX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKGh0dHBfY29weV9kZWZhdWx0X2hlYWRlcnMoKSwKKwkJIlByYWdtYToiKTsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJeworCQljaGFyICpodHRwX21heF9yZXF1ZXN0cyA9IGdldGVudigiR0lUX0hUVFBfTUFYX1JFUVVFU1RTIik7CisJCWlmIChodHRwX21heF9yZXF1ZXN0cyAhPSBOVUxMKQorCQkJbWF4X3JlcXVlc3RzID0gYXRvaShodHRwX21heF9yZXF1ZXN0cyk7CisJfQorCisJY3VybG0gPSBjdXJsX211bHRpX2luaXQoKTsKKwlpZiAoIWN1cmxtKQorCQlkaWUoImN1cmxfbXVsdGlfaW5pdCBmYWlsZWQiKTsKKyNlbmRpZgorCisJaWYgKGdldGVudigiR0lUX1NTTF9OT19WRVJJRlkiKSkKKwkJY3VybF9zc2xfdmVyaWZ5ID0gMDsKKworCXNldF9mcm9tX2Vudigmc3NsX2NlcnQsICJHSVRfU1NMX0NFUlQiKTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAzCisJc2V0X2Zyb21fZW52KCZzc2xfa2V5LCAiR0lUX1NTTF9LRVkiKTsKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDgKKwlzZXRfZnJvbV9lbnYoJnNzbF9jYXBhdGgsICJHSVRfU1NMX0NBUEFUSCIpOworI2VuZGlmCisJc2V0X2Zyb21fZW52KCZzc2xfY2FpbmZvLCAiR0lUX1NTTF9DQUlORk8iKTsKKworCXNldF9mcm9tX2VudigmdXNlcl9hZ2VudCwgIkdJVF9IVFRQX1VTRVJfQUdFTlQiKTsKKworCWxvd19zcGVlZF9saW1pdCA9IGdldGVudigiR0lUX0hUVFBfTE9XX1NQRUVEX0xJTUlUIik7CisJaWYgKGxvd19zcGVlZF9saW1pdCAhPSBOVUxMKQorCQljdXJsX2xvd19zcGVlZF9saW1pdCA9IHN0cnRvbChsb3dfc3BlZWRfbGltaXQsIE5VTEwsIDEwKTsKKwlsb3dfc3BlZWRfdGltZSA9IGdldGVudigiR0lUX0hUVFBfTE9XX1NQRUVEX1RJTUUiKTsKKwlpZiAobG93X3NwZWVkX3RpbWUgIT0gTlVMTCkKKwkJY3VybF9sb3dfc3BlZWRfdGltZSA9IHN0cnRvbChsb3dfc3BlZWRfdGltZSwgTlVMTCwgMTApOworCisJaWYgKGN1cmxfc3NsX3ZlcmlmeSA9PSAtMSkKKwkJY3VybF9zc2xfdmVyaWZ5ID0gMTsKKworCWN1cmxfc2Vzc2lvbl9jb3VudCA9IDA7CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwlpZiAobWF4X3JlcXVlc3RzIDwgMSkKKwkJbWF4X3JlcXVlc3RzID0gREVGQVVMVF9NQVhfUkVRVUVTVFM7CisjZW5kaWYKKworCXNldF9mcm9tX2VudigmaHR0cF9wcm94eV9zc2xfY2VydCwgIkdJVF9QUk9YWV9TU0xfQ0VSVCIpOworCXNldF9mcm9tX2VudigmaHR0cF9wcm94eV9zc2xfa2V5LCAiR0lUX1BST1hZX1NTTF9LRVkiKTsKKwlzZXRfZnJvbV9lbnYoJmh0dHBfcHJveHlfc3NsX2NhX2luZm8sICJHSVRfUFJPWFlfU1NMX0NBSU5GTyIpOworCisJaWYgKGdldGVudigiR0lUX1BST1hZX1NTTF9DRVJUX1BBU1NXT1JEX1BST1RFQ1RFRCIpKQorCQlwcm94eV9zc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZCA9IDE7CisKKwlpZiAoZ2V0ZW52KCJHSVRfQ1VSTF9GVFBfTk9fRVBTViIpKQorCQljdXJsX2Z0cF9ub19lcHN2ID0gMTsKKworCWlmICh1cmwpIHsKKwkJY3JlZGVudGlhbF9mcm9tX3VybCgmaHR0cF9hdXRoLCB1cmwpOworCQlpZiAoIXNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkICYmCisJCSAgICBnZXRlbnYoIkdJVF9TU0xfQ0VSVF9QQVNTV09SRF9QUk9URUNURUQiKSAmJgorCQkgICAgc3RhcnRzX3dpdGgodXJsLCAiaHR0cHM6Ly8iKSkKKwkJCXNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkID0gMTsKKwl9CisKKyNpZm5kZWYgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQorCWN1cmxfZGVmYXVsdCA9IGdldF9jdXJsX2hhbmRsZSgpOworI2VuZGlmCit9CisKK3ZvaWQgaHR0cF9jbGVhbnVwKHZvaWQpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QgPSBhY3RpdmVfcXVldWVfaGVhZDsKKworCXdoaWxlIChzbG90ICE9IE5VTEwpIHsKKwkJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKm5leHQgPSBzbG90LT5uZXh0OworCQlpZiAoc2xvdC0+Y3VybCAhPSBOVUxMKSB7CisJCQl4bXVsdGlfcmVtb3ZlX2hhbmRsZShzbG90KTsKKwkJCWN1cmxfZWFzeV9jbGVhbnVwKHNsb3QtPmN1cmwpOworCQl9CisJCWZyZWUoc2xvdCk7CisJCXNsb3QgPSBuZXh0OworCX0KKwlhY3RpdmVfcXVldWVfaGVhZCA9IE5VTEw7CisKKyNpZm5kZWYgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQorCWN1cmxfZWFzeV9jbGVhbnVwKGN1cmxfZGVmYXVsdCk7CisjZW5kaWYKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJY3VybF9tdWx0aV9jbGVhbnVwKGN1cmxtKTsKKyNlbmRpZgorCWN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworCXN0cmluZ19saXN0X2NsZWFyKCZleHRyYV9odHRwX2hlYWRlcnMsIDApOworCisJY3VybF9zbGlzdF9mcmVlX2FsbChwcmFnbWFfaGVhZGVyKTsKKwlwcmFnbWFfaGVhZGVyID0gTlVMTDsKKworCWN1cmxfc2xpc3RfZnJlZV9hbGwobm9fcHJhZ21hX2hlYWRlcik7CisJbm9fcHJhZ21hX2hlYWRlciA9IE5VTEw7CisKKwlpZiAoY3VybF9odHRwX3Byb3h5KSB7CisJCWZyZWUoKHZvaWQgKiljdXJsX2h0dHBfcHJveHkpOworCQljdXJsX2h0dHBfcHJveHkgPSBOVUxMOworCX0KKworCWlmIChwcm94eV9hdXRoLnBhc3N3b3JkKSB7CisJCW1lbXNldChwcm94eV9hdXRoLnBhc3N3b3JkLCAwLCBzdHJsZW4ocHJveHlfYXV0aC5wYXNzd29yZCkpOworCQlGUkVFX0FORF9OVUxMKHByb3h5X2F1dGgucGFzc3dvcmQpOworCX0KKworCWZyZWUoKHZvaWQgKiljdXJsX3Byb3h5dXNlcnB3ZCk7CisJY3VybF9wcm94eXVzZXJwd2QgPSBOVUxMOworCisJZnJlZSgodm9pZCAqKWh0dHBfcHJveHlfYXV0aG1ldGhvZCk7CisJaHR0cF9wcm94eV9hdXRobWV0aG9kID0gTlVMTDsKKworCWlmIChjZXJ0X2F1dGgucGFzc3dvcmQgIT0gTlVMTCkgeworCQltZW1zZXQoY2VydF9hdXRoLnBhc3N3b3JkLCAwLCBzdHJsZW4oY2VydF9hdXRoLnBhc3N3b3JkKSk7CisJCUZSRUVfQU5EX05VTEwoY2VydF9hdXRoLnBhc3N3b3JkKTsKKwl9CisJc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgPSAwOworCisJaWYgKHByb3h5X2NlcnRfYXV0aC5wYXNzd29yZCAhPSBOVUxMKSB7CisJCW1lbXNldChwcm94eV9jZXJ0X2F1dGgucGFzc3dvcmQsIDAsIHN0cmxlbihwcm94eV9jZXJ0X2F1dGgucGFzc3dvcmQpKTsKKwkJRlJFRV9BTkRfTlVMTChwcm94eV9jZXJ0X2F1dGgucGFzc3dvcmQpOworCX0KKwlwcm94eV9zc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZCA9IDA7CisKKwlGUkVFX0FORF9OVUxMKGNhY2hlZF9hY2NlcHRfbGFuZ3VhZ2UpOworfQorCitzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqZ2V0X2FjdGl2ZV9zbG90KHZvaWQpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QgPSBhY3RpdmVfcXVldWVfaGVhZDsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqbmV3c2xvdDsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaW50IG51bV90cmFuc2ZlcnM7CisKKwkvKiBXYWl0IGZvciBhIHNsb3QgdG8gb3BlbiB1cCBpZiB0aGUgcXVldWUgaXMgZnVsbCAqLworCXdoaWxlIChhY3RpdmVfcmVxdWVzdHMgPj0gbWF4X3JlcXVlc3RzKSB7CisJCWN1cmxfbXVsdGlfcGVyZm9ybShjdXJsbSwgJm51bV90cmFuc2ZlcnMpOworCQlpZiAobnVtX3RyYW5zZmVycyA8IGFjdGl2ZV9yZXF1ZXN0cykKKwkJCXByb2Nlc3NfY3VybF9tZXNzYWdlcygpOworCX0KKyNlbmRpZgorCisJd2hpbGUgKHNsb3QgIT0gTlVMTCAmJiBzbG90LT5pbl91c2UpCisJCXNsb3QgPSBzbG90LT5uZXh0OworCisJaWYgKHNsb3QgPT0gTlVMTCkgeworCQluZXdzbG90ID0geG1hbGxvYyhzaXplb2YoKm5ld3Nsb3QpKTsKKwkJbmV3c2xvdC0+Y3VybCA9IE5VTEw7CisJCW5ld3Nsb3QtPmluX3VzZSA9IDA7CisJCW5ld3Nsb3QtPm5leHQgPSBOVUxMOworCisJCXNsb3QgPSBhY3RpdmVfcXVldWVfaGVhZDsKKwkJaWYgKHNsb3QgPT0gTlVMTCkgeworCQkJYWN0aXZlX3F1ZXVlX2hlYWQgPSBuZXdzbG90OworCQl9IGVsc2UgeworCQkJd2hpbGUgKHNsb3QtPm5leHQgIT0gTlVMTCkKKwkJCQlzbG90ID0gc2xvdC0+bmV4dDsKKwkJCXNsb3QtPm5leHQgPSBuZXdzbG90OworCQl9CisJCXNsb3QgPSBuZXdzbG90OworCX0KKworCWlmIChzbG90LT5jdXJsID09IE5VTEwpIHsKKyNpZmRlZiBOT19DVVJMX0VBU1lfRFVQSEFORExFCisJCXNsb3QtPmN1cmwgPSBnZXRfY3VybF9oYW5kbGUoKTsKKyNlbHNlCisJCXNsb3QtPmN1cmwgPSBjdXJsX2Vhc3lfZHVwaGFuZGxlKGN1cmxfZGVmYXVsdCk7CisjZW5kaWYKKwkJY3VybF9zZXNzaW9uX2NvdW50Kys7CisJfQorCisJYWN0aXZlX3JlcXVlc3RzKys7CisJc2xvdC0+aW5fdXNlID0gMTsKKwlzbG90LT5yZXN1bHRzID0gTlVMTDsKKwlzbG90LT5maW5pc2hlZCA9IE5VTEw7CisJc2xvdC0+Y2FsbGJhY2tfZGF0YSA9IE5VTEw7CisJc2xvdC0+Y2FsbGJhY2tfZnVuYyA9IE5VTEw7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0NPT0tJRUZJTEUsIGN1cmxfY29va2llX2ZpbGUpOworCWlmIChjdXJsX3NhdmVfY29va2llcykKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0NPT0tJRUpBUiwgY3VybF9jb29raWVfZmlsZSk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIHByYWdtYV9oZWFkZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgY3VybF9lcnJvcnN0cik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsIE5VTEwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9SRUFERlVOQ1RJT04sIE5VTEwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBOVUxMKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUE9TVEZJRUxEUywgTlVMTCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VQTE9BRCwgMCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBHRVQsIDEpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GQUlMT05FUlJPUiwgMSk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1JBTkdFLCBOVUxMKTsKKworCS8qCisJICogRGVmYXVsdCBmb2xsb3dpbmcgdG8gb2ZmIHVubGVzcyAiQUxXQVlTIiBpcyBjb25maWd1cmVkOyB0aGlzIGdpdmVzCisJICogY2FsbGVycyBhIHNhbmUgc3RhcnRpbmcgcG9pbnQsIGFuZCB0aGV5IGNhbiB0d2VhayBmb3IgaW5kaXZpZHVhbAorCSAqIEhUVFBfRk9MTE9XXyogY2FzZXMgdGhlbXNlbHZlcy4KKwkgKi8KKwlpZiAoaHR0cF9mb2xsb3dfY29uZmlnID09IEhUVFBfRk9MTE9XX0FMV0FZUykKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKKwllbHNlCisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMCk7CisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwYTA4CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0lQUkVTT0xWRSwgZ2l0X2N1cmxfaXByZXNvbHZlKTsKKyNlbmRpZgorI2lmZGVmIExJQkNVUkxfQ0FOX0hBTkRMRV9BVVRIX0FOWQorCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQQVVUSCwgaHR0cF9hdXRoX21ldGhvZHMpOworI2VuZGlmCisJaWYgKGh0dHBfYXV0aC5wYXNzd29yZCB8fCBjdXJsX2VtcHR5X2F1dGhfZW5hYmxlZCgpKQorCQlpbml0X2N1cmxfaHR0cF9hdXRoKHNsb3QtPmN1cmwpOworCisJcmV0dXJuIHNsb3Q7Cit9CisKK2ludCBzdGFydF9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCkKK3sKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCUNVUkxNY29kZSBjdXJsbV9yZXN1bHQgPSBjdXJsX211bHRpX2FkZF9oYW5kbGUoY3VybG0sIHNsb3QtPmN1cmwpOworCWludCBudW1fdHJhbnNmZXJzOworCisJaWYgKGN1cmxtX3Jlc3VsdCAhPSBDVVJMTV9PSyAmJgorCSAgICBjdXJsbV9yZXN1bHQgIT0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNKSB7CisJCXdhcm5pbmcoImN1cmxfbXVsdGlfYWRkX2hhbmRsZSBmYWlsZWQ6ICVzIiwKKwkJCWN1cmxfbXVsdGlfc3RyZXJyb3IoY3VybG1fcmVzdWx0KSk7CisJCWFjdGl2ZV9yZXF1ZXN0cy0tOworCQlzbG90LT5pbl91c2UgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFdlIGtub3cgdGhlcmUgbXVzdCBiZSBzb21ldGhpbmcgdG8gZG8sIHNpbmNlIHdlIGp1c3QgYWRkZWQKKwkgKiBzb21ldGhpbmcuCisJICovCisJY3VybF9tdWx0aV9wZXJmb3JtKGN1cmxtLCAmbnVtX3RyYW5zZmVycyk7CisjZW5kaWYKKwlyZXR1cm4gMTsKK30KKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCitzdHJ1Y3QgZmlsbF9jaGFpbiB7CisJdm9pZCAqZGF0YTsKKwlpbnQgKCpmaWxsKSh2b2lkICopOworCXN0cnVjdCBmaWxsX2NoYWluICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCBmaWxsX2NoYWluICpmaWxsX2NmZzsKKwordm9pZCBhZGRfZmlsbF9mdW5jdGlvbih2b2lkICpkYXRhLCBpbnQgKCpmaWxsKSh2b2lkICopKQoreworCXN0cnVjdCBmaWxsX2NoYWluICpuZXdfZmlsbCA9IHhtYWxsb2Moc2l6ZW9mKCpuZXdfZmlsbCkpOworCXN0cnVjdCBmaWxsX2NoYWluICoqbGlua3AgPSAmZmlsbF9jZmc7CisJbmV3X2ZpbGwtPmRhdGEgPSBkYXRhOworCW5ld19maWxsLT5maWxsID0gZmlsbDsKKwluZXdfZmlsbC0+bmV4dCA9IE5VTEw7CisJd2hpbGUgKCpsaW5rcCkKKwkJbGlua3AgPSAmKCpsaW5rcCktPm5leHQ7CisJKmxpbmtwID0gbmV3X2ZpbGw7Cit9CisKK3ZvaWQgZmlsbF9hY3RpdmVfc2xvdHModm9pZCkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCisJd2hpbGUgKGFjdGl2ZV9yZXF1ZXN0cyA8IG1heF9yZXF1ZXN0cykgeworCQlzdHJ1Y3QgZmlsbF9jaGFpbiAqZmlsbDsKKwkJZm9yIChmaWxsID0gZmlsbF9jZmc7IGZpbGw7IGZpbGwgPSBmaWxsLT5uZXh0KQorCQkJaWYgKGZpbGwtPmZpbGwoZmlsbC0+ZGF0YSkpCisJCQkJYnJlYWs7CisKKwkJaWYgKCFmaWxsKQorCQkJYnJlYWs7CisJfQorCisJd2hpbGUgKHNsb3QgIT0gTlVMTCkgeworCQlpZiAoIXNsb3QtPmluX3VzZSAmJiBzbG90LT5jdXJsICE9IE5VTEwKKwkJCSYmIGN1cmxfc2Vzc2lvbl9jb3VudCA+IG1pbl9jdXJsX3Nlc3Npb25zKSB7CisJCQljdXJsX2Vhc3lfY2xlYW51cChzbG90LT5jdXJsKTsKKwkJCXNsb3QtPmN1cmwgPSBOVUxMOworCQkJY3VybF9zZXNzaW9uX2NvdW50LS07CisJCX0KKwkJc2xvdCA9IHNsb3QtPm5leHQ7CisJfQorfQorCit2b2lkIHN0ZXBfYWN0aXZlX3Nsb3RzKHZvaWQpCit7CisJaW50IG51bV90cmFuc2ZlcnM7CisJQ1VSTE1jb2RlIGN1cmxtX3Jlc3VsdDsKKworCWRvIHsKKwkJY3VybG1fcmVzdWx0ID0gY3VybF9tdWx0aV9wZXJmb3JtKGN1cmxtLCAmbnVtX3RyYW5zZmVycyk7CisJfSB3aGlsZSAoY3VybG1fcmVzdWx0ID09IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSk7CisJaWYgKG51bV90cmFuc2ZlcnMgPCBhY3RpdmVfcmVxdWVzdHMpIHsKKwkJcHJvY2Vzc19jdXJsX21lc3NhZ2VzKCk7CisJCWZpbGxfYWN0aXZlX3Nsb3RzKCk7CisJfQorfQorI2VuZGlmCisKK3ZvaWQgcnVuX2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KQoreworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJZmRfc2V0IHJlYWRmZHM7CisJZmRfc2V0IHdyaXRlZmRzOworCWZkX3NldCBleGNmZHM7CisJaW50IG1heF9mZDsKKwlzdHJ1Y3QgdGltZXZhbCBzZWxlY3RfdGltZW91dDsKKwlpbnQgZmluaXNoZWQgPSAwOworCisJc2xvdC0+ZmluaXNoZWQgPSAmZmluaXNoZWQ7CisJd2hpbGUgKCFmaW5pc2hlZCkgeworCQlzdGVwX2FjdGl2ZV9zbG90cygpOworCisJCWlmIChzbG90LT5pbl91c2UpIHsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwZjA0CisJCQlsb25nIGN1cmxfdGltZW91dDsKKwkJCWN1cmxfbXVsdGlfdGltZW91dChjdXJsbSwgJmN1cmxfdGltZW91dCk7CisJCQlpZiAoY3VybF90aW1lb3V0ID09IDApIHsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoY3VybF90aW1lb3V0ID09IC0xKSB7CisJCQkJc2VsZWN0X3RpbWVvdXQudHZfc2VjICA9IDA7CisJCQkJc2VsZWN0X3RpbWVvdXQudHZfdXNlYyA9IDUwMDAwOworCQkJfSBlbHNlIHsKKwkJCQlzZWxlY3RfdGltZW91dC50dl9zZWMgID0gIGN1cmxfdGltZW91dCAvIDEwMDA7CisJCQkJc2VsZWN0X3RpbWVvdXQudHZfdXNlYyA9IChjdXJsX3RpbWVvdXQgJSAxMDAwKSAqIDEwMDA7CisJCQl9CisjZWxzZQorCQkJc2VsZWN0X3RpbWVvdXQudHZfc2VjICA9IDA7CisJCQlzZWxlY3RfdGltZW91dC50dl91c2VjID0gNTAwMDA7CisjZW5kaWYKKworCQkJbWF4X2ZkID0gLTE7CisJCQlGRF9aRVJPKCZyZWFkZmRzKTsKKwkJCUZEX1pFUk8oJndyaXRlZmRzKTsKKwkJCUZEX1pFUk8oJmV4Y2Zkcyk7CisJCQljdXJsX211bHRpX2Zkc2V0KGN1cmxtLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXhjZmRzLCAmbWF4X2ZkKTsKKworCQkJLyoKKwkJCSAqIEl0IGNhbiBoYXBwZW4gdGhhdCBjdXJsX211bHRpX3RpbWVvdXQgcmV0dXJucyBhIHBhdGhvbG9naWNhbGx5CisJCQkgKiBsb25nIHRpbWVvdXQgd2hlbiBjdXJsX211bHRpX2Zkc2V0IHJldHVybnMgbm8gZmlsZSBkZXNjcmlwdG9ycworCQkJICogdG8gcmVhZC4gIFNlZSBjb21taXQgbWVzc2FnZSBmb3IgbW9yZSBkZXRhaWxzLgorCQkJICovCisJCQlpZiAobWF4X2ZkIDwgMCAmJgorCQkJICAgIChzZWxlY3RfdGltZW91dC50dl9zZWMgPiAwIHx8CisJCQkgICAgIHNlbGVjdF90aW1lb3V0LnR2X3VzZWMgPiA1MDAwMCkpIHsKKwkJCQlzZWxlY3RfdGltZW91dC50dl9zZWMgID0gMDsKKwkJCQlzZWxlY3RfdGltZW91dC50dl91c2VjID0gNTAwMDA7CisJCQl9CisKKwkJCXNlbGVjdChtYXhfZmQrMSwgJnJlYWRmZHMsICZ3cml0ZWZkcywgJmV4Y2ZkcywgJnNlbGVjdF90aW1lb3V0KTsKKwkJfQorCX0KKyNlbHNlCisJd2hpbGUgKHNsb3QtPmluX3VzZSkgeworCQlzbG90LT5jdXJsX3Jlc3VsdCA9IGN1cmxfZWFzeV9wZXJmb3JtKHNsb3QtPmN1cmwpOworCQlmaW5pc2hfYWN0aXZlX3Nsb3Qoc2xvdCk7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfYWN0aXZlX3Nsb3Qoc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QpCit7CisJY2xvc2Vkb3duX2FjdGl2ZV9zbG90KHNsb3QpOworCWlmIChzbG90LT5jdXJsKSB7CisJCXhtdWx0aV9yZW1vdmVfaGFuZGxlKHNsb3QpOworCQlpZiAoY3VybF9zZXNzaW9uX2NvdW50ID4gbWluX2N1cmxfc2Vzc2lvbnMpIHsKKwkJCWN1cmxfZWFzeV9jbGVhbnVwKHNsb3QtPmN1cmwpOworCQkJc2xvdC0+Y3VybCA9IE5VTEw7CisJCQljdXJsX3Nlc3Npb25fY291bnQtLTsKKwkJfQorCX0KKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWZpbGxfYWN0aXZlX3Nsb3RzKCk7CisjZW5kaWYKK30KKwordm9pZCBmaW5pc2hfYWxsX2FjdGl2ZV9zbG90cyh2b2lkKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisKKwl3aGlsZSAoc2xvdCAhPSBOVUxMKQorCQlpZiAoc2xvdC0+aW5fdXNlKSB7CisJCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCQlzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisJCX0gZWxzZSB7CisJCQlzbG90ID0gc2xvdC0+bmV4dDsKKwkJfQorfQorCisvKiBIZWxwZXJzIGZvciBtb2RpZnlpbmcgYW5kIGNyZWF0aW5nIFVSTHMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5lZWRzX3F1b3RlKGludCBjaCkKK3sKKwlpZiAoKChjaCA+PSAnQScpICYmIChjaCA8PSAnWicpKQorCQkJfHwgKChjaCA+PSAnYScpICYmIChjaCA8PSAneicpKQorCQkJfHwgKChjaCA+PSAnMCcpICYmIChjaCA8PSAnOScpKQorCQkJfHwgKGNoID09ICcvJykKKwkJCXx8IChjaCA9PSAnLScpCisJCQl8fCAoY2ggPT0gJy4nKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjaGFyICpxdW90ZV9yZWZfdXJsKGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnJlZikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmNwOworCWludCBjaDsKKworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlKTsKKworCWZvciAoY3AgPSByZWY7IChjaCA9ICpjcCkgIT0gMDsgY3ArKykKKwkJaWYgKG5lZWRzX3F1b3RlKGNoKSkKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICIlJSUwMngiLCBjaCk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAqY3ApOworCisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKK3ZvaWQgYXBwZW5kX3JlbW90ZV9vYmplY3RfdXJsKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqdXJsLAorCQkJICAgICAgY29uc3QgY2hhciAqaGV4LAorCQkJICAgICAgaW50IG9ubHlfdHdvX2RpZ2l0X3ByZWZpeCkKK3sKKwllbmRfdXJsX3dpdGhfc2xhc2goYnVmLCB1cmwpOworCisJc3RyYnVmX2FkZGYoYnVmLCAib2JqZWN0cy8lLipzLyIsIDIsIGhleCk7CisJaWYgKCFvbmx5X3R3b19kaWdpdF9wcmVmaXgpCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBoZXggKyAyKTsKK30KKworY2hhciAqZ2V0X3JlbW90ZV9vYmplY3RfdXJsKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqaGV4LAorCQkJICAgIGludCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoJmJ1ZiwgdXJsLCBoZXgsIG9ubHlfdHdvX2RpZ2l0X3ByZWZpeCk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKK3ZvaWQgbm9ybWFsaXplX2N1cmxfcmVzdWx0KENVUkxjb2RlICpyZXN1bHQsIGxvbmcgaHR0cF9jb2RlLAorCQkJICAgY2hhciAqZXJyb3JzdHIsIHNpemVfdCBlcnJvcmxlbikKK3sKKwkvKgorCSAqIElmIHdlIHNlZSBhIGZhaWxpbmcgaHR0cCBjb2RlIHdpdGggQ1VSTEVfT0ssIHdlIGhhdmUgdHVybmVkIG9mZgorCSAqIEZBSUxPTkVSUk9SICh0byBrZWVwIHRoZSBzZXJ2ZXIncyBjdXN0b20gZXJyb3IgcmVzcG9uc2UpLCBhbmQgc2hvdWxkCisJICogdHJhbnNsYXRlIHRoZSBjb2RlIGludG8gZmFpbHVyZSBoZXJlLgorCSAqCisJICogTGlrZXdpc2UsIGlmIHdlIHNlZSBhIHJlZGlyZWN0ICgzMHggY29kZSksIHRoYXQgbWVhbnMgd2UgdHVybmVkIG9mZgorCSAqIHJlZGlyZWN0LWZvbGxvd2luZywgYW5kIHdlIHNob3VsZCB0cmVhdCB0aGUgcmVzdWx0IGFzIGFuIGVycm9yLgorCSAqLworCWlmICgqcmVzdWx0ID09IENVUkxFX09LICYmIGh0dHBfY29kZSA+PSAzMDApIHsKKwkJKnJlc3VsdCA9IENVUkxFX0hUVFBfUkVUVVJORURfRVJST1I7CisJCS8qCisJCSAqIE5vcm1hbGx5IGN1cmwgd2lsbCBhbHJlYWR5IGhhdmUgcHV0IHRoZSAicmVhc29uIHBocmFzZSIKKwkJICogZnJvbSB0aGUgc2VydmVyIGludG8gY3VybF9lcnJvcnN0cjsgdW5mb3J0dW5hdGVseSB3aXRob3V0CisJCSAqIEZBSUxPTkVSUk9SIGl0IGlzIGxvc3QsIHNvIHdlIGNhbiBnaXZlIG9ubHkgdGhlIG51bWVyaWMKKwkJICogc3RhdHVzIGNvZGUuCisJCSAqLworCQl4c25wcmludGYoZXJyb3JzdHIsIGVycm9ybGVuLAorCQkJICAiVGhlIHJlcXVlc3RlZCBVUkwgcmV0dXJuZWQgZXJyb3I6ICVsZCIsCisJCQkgIGh0dHBfY29kZSk7CisJfQorfQorCitzdGF0aWMgaW50IGhhbmRsZV9jdXJsX3Jlc3VsdChzdHJ1Y3Qgc2xvdF9yZXN1bHRzICpyZXN1bHRzKQoreworCW5vcm1hbGl6ZV9jdXJsX3Jlc3VsdCgmcmVzdWx0cy0+Y3VybF9yZXN1bHQsIHJlc3VsdHMtPmh0dHBfY29kZSwKKwkJCSAgICAgIGN1cmxfZXJyb3JzdHIsIHNpemVvZihjdXJsX2Vycm9yc3RyKSk7CisKKwlpZiAocmVzdWx0cy0+Y3VybF9yZXN1bHQgPT0gQ1VSTEVfT0spIHsKKwkJY3JlZGVudGlhbF9hcHByb3ZlKCZodHRwX2F1dGgpOworCQlpZiAocHJveHlfYXV0aC5wYXNzd29yZCkKKwkJCWNyZWRlbnRpYWxfYXBwcm92ZSgmcHJveHlfYXV0aCk7CisJCXJldHVybiBIVFRQX09LOworCX0gZWxzZSBpZiAobWlzc2luZ190YXJnZXQocmVzdWx0cykpCisJCXJldHVybiBIVFRQX01JU1NJTkdfVEFSR0VUOworCWVsc2UgaWYgKHJlc3VsdHMtPmh0dHBfY29kZSA9PSA0MDEpIHsKKwkJaWYgKGh0dHBfYXV0aC51c2VybmFtZSAmJiBodHRwX2F1dGgucGFzc3dvcmQpIHsKKwkJCWNyZWRlbnRpYWxfcmVqZWN0KCZodHRwX2F1dGgpOworCQkJcmV0dXJuIEhUVFBfTk9BVVRIOworCQl9IGVsc2UgeworI2lmZGVmIExJQkNVUkxfQ0FOX0hBTkRMRV9BVVRIX0FOWQorCQkJaHR0cF9hdXRoX21ldGhvZHMgJj0gfkNVUkxBVVRIX0dTU05FR09USUFURTsKKwkJCWlmIChyZXN1bHRzLT5hdXRoX2F2YWlsKSB7CisJCQkJaHR0cF9hdXRoX21ldGhvZHMgJj0gcmVzdWx0cy0+YXV0aF9hdmFpbDsKKwkJCQlodHRwX2F1dGhfbWV0aG9kc19yZXN0cmljdGVkID0gMTsKKwkJCX0KKyNlbmRpZgorCQkJcmV0dXJuIEhUVFBfUkVBVVRIOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHJlc3VsdHMtPmh0dHBfY29ubmVjdGNvZGUgPT0gNDA3KQorCQkJY3JlZGVudGlhbF9yZWplY3QoJnByb3h5X2F1dGgpOworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzBjMDAKKwkJaWYgKCFjdXJsX2Vycm9yc3RyWzBdKQorCQkJc3RybGNweShjdXJsX2Vycm9yc3RyLAorCQkJCWN1cmxfZWFzeV9zdHJlcnJvcihyZXN1bHRzLT5jdXJsX3Jlc3VsdCksCisJCQkJc2l6ZW9mKGN1cmxfZXJyb3JzdHIpKTsKKyNlbmRpZgorCQlyZXR1cm4gSFRUUF9FUlJPUjsKKwl9Cit9CisKK2ludCBydW5fb25lX3Nsb3Qoc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QsCisJCSBzdHJ1Y3Qgc2xvdF9yZXN1bHRzICpyZXN1bHRzKQoreworCXNsb3QtPnJlc3VsdHMgPSByZXN1bHRzOworCWlmICghc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJeHNucHJpbnRmKGN1cmxfZXJyb3JzdHIsIHNpemVvZihjdXJsX2Vycm9yc3RyKSwKKwkJCSAgImZhaWxlZCB0byBzdGFydCBIVFRQIHJlcXVlc3QiKTsKKwkJcmV0dXJuIEhUVFBfU1RBUlRfRkFJTEVEOworCX0KKworCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwlyZXR1cm4gaGFuZGxlX2N1cmxfcmVzdWx0KHJlc3VsdHMpOworfQorCitzdHJ1Y3QgY3VybF9zbGlzdCAqaHR0cF9jb3B5X2RlZmF1bHRfaGVhZGVycyh2b2lkKQoreworCXN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzID0gTlVMTDsKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJmV4dHJhX2h0dHBfaGVhZGVycykKKwkJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsIGl0ZW0tPnN0cmluZyk7CisKKwlyZXR1cm4gaGVhZGVyczsKK30KKworc3RhdGljIENVUkxjb2RlIGN1cmxpbmZvX3N0cmJ1ZihDVVJMICpjdXJsLCBDVVJMSU5GTyBpbmZvLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJY2hhciAqcHRyOworCUNVUkxjb2RlIHJldDsKKworCXN0cmJ1Zl9yZXNldChidWYpOworCXJldCA9IGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIGluZm8sICZwdHIpOworCWlmICghcmV0ICYmIHB0cikKKwkJc3RyYnVmX2FkZHN0cihidWYsIHB0cik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENoZWNrIGZvciBhbmQgZXh0cmFjdCBhIGNvbnRlbnQtdHlwZSBwYXJhbWV0ZXIuICJyYXciCisgKiBzaG91bGQgYmUgcG9zaXRpb25lZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBvdGVudGlhbAorICogcGFyYW1ldGVyLCB3aXRoIGFueSB3aGl0ZXNwYWNlIGFscmVhZHkgcmVtb3ZlZC4KKyAqCisgKiAibmFtZSIgaXMgdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci4gVGhlIHZhbHVlIGlzIGFwcGVuZGVkCisgKiB0byAib3V0Ii4KKyAqLworc3RhdGljIGludCBleHRyYWN0X3BhcmFtKGNvbnN0IGNoYXIgKnJhdywgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihuYW1lKTsKKworCWlmIChzdHJuY2FzZWNtcChyYXcsIG5hbWUsIGxlbikpCisJCXJldHVybiAtMTsKKwlyYXcgKz0gbGVuOworCisJaWYgKCpyYXcgIT0gJz0nKQorCQlyZXR1cm4gLTE7CisJcmF3Kys7CisKKwl3aGlsZSAoKnJhdyAmJiAhaXNzcGFjZSgqcmF3KSAmJiAqcmF3ICE9ICc7JykKKwkJc3RyYnVmX2FkZGNoKG91dCwgKnJhdysrKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEV4dHJhY3QgYSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgdHlwZSwgd2l0aCBhbnkKKyAqIHNwYWNlcyBzdXBwcmVzc2VkLCBhbGwgbGV0dGVycyBsb3dlcmNhc2VkLCBhbmQgbm8gdHJhaWxpbmcgIjsiCisgKiBvciBwYXJhbWV0ZXJzLgorICoKKyAqIE5vdGUgdGhhdCB3ZSB3aWxsIHNpbGVudGx5IHJlbW92ZSBldmVuIGludmFsaWQgd2hpdGVzcGFjZS4gRm9yCisgKiBleGFtcGxlLCAidGV4dCAvIHBsYWluIiBpcyBzcGVjaWZpY2FsbHkgZm9yYmlkZGVuIGJ5IFJGQyAyNjE2LAorICogYnV0ICJ0ZXh0L3BsYWluIiBpcyB0aGUgb25seSByZWFzb25hYmxlIG91dHB1dCwgYW5kIHRoaXMga2VlcHMKKyAqIG91ciBjb2RlIHNpbXBsZS4KKyAqCisgKiBJZiB0aGUgImNoYXJzZXQiIGFyZ3VtZW50IGlzIG5vdCBOVUxMLCBzdG9yZSB0aGUgdmFsdWUgb2YgYW55CisgKiBjaGFyc2V0IHBhcmFtZXRlciB0aGVyZS4KKyAqCisgKiBFeGFtcGxlOgorICogICAiVEVYVC9QTEFJTjsgY2hhcnNldD11dGYtOCIgLT4gInRleHQvcGxhaW4iLCAidXRmLTgiCisgKiAgICJ0ZXh0IC8gcGxhaW4iIC0+ICJ0ZXh0L3BsYWluIgorICovCitzdGF0aWMgdm9pZCBleHRyYWN0X2NvbnRlbnRfdHlwZShzdHJ1Y3Qgc3RyYnVmICpyYXcsIHN0cnVjdCBzdHJidWYgKnR5cGUsCisJCQkJIHN0cnVjdCBzdHJidWYgKmNoYXJzZXQpCit7CisJY29uc3QgY2hhciAqcDsKKworCXN0cmJ1Zl9yZXNldCh0eXBlKTsKKwlzdHJidWZfZ3Jvdyh0eXBlLCByYXctPmxlbik7CisJZm9yIChwID0gcmF3LT5idWY7ICpwOyBwKyspIHsKKwkJaWYgKGlzc3BhY2UoKnApKQorCQkJY29udGludWU7CisJCWlmICgqcCA9PSAnOycpIHsKKwkJCXArKzsKKwkJCWJyZWFrOworCQl9CisJCXN0cmJ1Zl9hZGRjaCh0eXBlLCB0b2xvd2VyKCpwKSk7CisJfQorCisJaWYgKCFjaGFyc2V0KQorCQlyZXR1cm47CisKKwlzdHJidWZfcmVzZXQoY2hhcnNldCk7CisJd2hpbGUgKCpwKSB7CisJCXdoaWxlIChpc3NwYWNlKCpwKSB8fCAqcCA9PSAnOycpCisJCQlwKys7CisJCWlmICghZXh0cmFjdF9wYXJhbShwLCAiY2hhcnNldCIsIGNoYXJzZXQpKQorCQkJcmV0dXJuOworCQl3aGlsZSAoKnAgJiYgIWlzc3BhY2UoKnApKQorCQkJcCsrOworCX0KKworCWlmICghY2hhcnNldC0+bGVuICYmIHN0YXJ0c193aXRoKHR5cGUtPmJ1ZiwgInRleHQvIikpCisJCXN0cmJ1Zl9hZGRzdHIoY2hhcnNldCwgIklTTy04ODU5LTEiKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfYWNjZXB0X2xhbmd1YWdlKHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwkvKgorCSAqIE1BWF9ERUNJTUFMX1BMQUNFUyBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiAzLiBJZiBpdCBpcyBsYXJnZXIgdGhhbgorCSAqIHRoYXQsIHEtdmFsdWUgd2lsbCBiZSBzbWFsbGVyIHRoYW4gMC4wMDEsIHRoZSBtaW5pbXVtIHEtdmFsdWUgdGhlCisJICogSFRUUCBzcGVjaWZpY2F0aW9uIGFsbG93cy4gU2VlCisJICogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTUuMy4xIGZvciBxLXZhbHVlLgorCSAqLworCWNvbnN0IGludCBNQVhfREVDSU1BTF9QTEFDRVMgPSAzOworCWNvbnN0IGludCBNQVhfTEFOR1VBR0VfVEFHUyA9IDEwMDA7CisJY29uc3QgaW50IE1BWF9BQ0NFUFRfTEFOR1VBR0VfSEVBREVSX1NJWkUgPSA0MDAwOworCWNoYXIgKipsYW5ndWFnZV90YWdzID0gTlVMTDsKKwlpbnQgbnVtX2xhbmdzID0gMDsKKwljb25zdCBjaGFyICpzID0gZ2V0X3ByZWZlcnJlZF9sYW5ndWFnZXMoKTsKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYnVmIHRhZyA9IFNUUkJVRl9JTklUOworCisJLyogRG9uJ3QgYWRkIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgaWYgbm8gbGFuZ3VhZ2UgaXMgcHJlZmVycmVkLiAqLworCWlmICghcykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTcGxpdCB0aGUgY29sb24tc2VwYXJhdGVkIHN0cmluZyBvZiBwcmVmZXJyZWQgbGFuZ3VhZ2VzIGludG8KKwkgKiBsYW5ndWFnZV90YWdzIGFycmF5LgorCSAqLworCWRvIHsKKwkJLyogY29sbGVjdCBsYW5ndWFnZSB0YWcgKi8KKwkJZm9yICg7ICpzICYmIChpc2FsbnVtKCpzKSB8fCAqcyA9PSAnXycpOyBzKyspCisJCQlzdHJidWZfYWRkY2goJnRhZywgKnMgPT0gJ18nID8gJy0nIDogKnMpOworCisJCS8qIHNraXAgLmNvZGVzZXQsIEBtb2RpZmllciBhbmQgYW55IG90aGVyIHVubmVjZXNzYXJ5IHBhcnRzICovCisJCXdoaWxlICgqcyAmJiAqcyAhPSAnOicpCisJCQlzKys7CisKKwkJaWYgKHRhZy5sZW4pIHsKKwkJCW51bV9sYW5ncysrOworCQkJUkVBTExPQ19BUlJBWShsYW5ndWFnZV90YWdzLCBudW1fbGFuZ3MpOworCQkJbGFuZ3VhZ2VfdGFnc1tudW1fbGFuZ3MgLSAxXSA9IHN0cmJ1Zl9kZXRhY2goJnRhZywgTlVMTCk7CisJCQlpZiAobnVtX2xhbmdzID49IE1BWF9MQU5HVUFHRV9UQUdTIC0gMSkgLyogLTEgZm9yICcqJyAqLworCQkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoKnMrKyk7CisKKwkvKiB3cml0ZSBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIGludG8gYnVmICovCisJaWYgKG51bV9sYW5ncykgeworCQlpbnQgbGFzdF9idWZfbGVuID0gMDsKKwkJaW50IG1heF9xOworCQlpbnQgZGVjaW1hbF9wbGFjZXM7CisJCWNoYXIgcV9mb3JtYXRbMzJdOworCisJCS8qIGFkZCAnKicgKi8KKwkJUkVBTExPQ19BUlJBWShsYW5ndWFnZV90YWdzLCBudW1fbGFuZ3MgKyAxKTsKKwkJbGFuZ3VhZ2VfdGFnc1tudW1fbGFuZ3MrK10gPSAiKiI7IC8qIGl0J3MgT0s7IHRoaXMgd29uJ3QgYmUgZnJlZWQgKi8KKworCQkvKiBjb21wdXRlIGRlY2ltYWxfcGxhY2VzICovCisJCWZvciAobWF4X3EgPSAxLCBkZWNpbWFsX3BsYWNlcyA9IDA7CisJCSAgICAgbWF4X3EgPCBudW1fbGFuZ3MgJiYgZGVjaW1hbF9wbGFjZXMgPD0gTUFYX0RFQ0lNQUxfUExBQ0VTOworCQkgICAgIGRlY2ltYWxfcGxhY2VzKyssIG1heF9xICo9IDEwKQorCQkJOworCisJCXhzbnByaW50ZihxX2Zvcm1hdCwgc2l6ZW9mKHFfZm9ybWF0KSwgIjtxPTAuJSUwJWRkIiwgZGVjaW1hbF9wbGFjZXMpOworCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiQWNjZXB0LUxhbmd1YWdlOiAiKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2xhbmdzOyBpKyspIHsKKwkJCWlmIChpID4gMCkKKwkJCQlzdHJidWZfYWRkc3RyKGJ1ZiwgIiwgIik7CisKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBsYW5ndWFnZV90YWdzW2ldKTsKKworCQkJaWYgKGkgPiAwKQorCQkJCXN0cmJ1Zl9hZGRmKGJ1ZiwgcV9mb3JtYXQsIG1heF9xIC0gaSk7CisKKwkJCWlmIChidWYtPmxlbiA+IE1BWF9BQ0NFUFRfTEFOR1VBR0VfSEVBREVSX1NJWkUpIHsKKwkJCQlzdHJidWZfcmVtb3ZlKGJ1ZiwgbGFzdF9idWZfbGVuLCBidWYtPmxlbiAtIGxhc3RfYnVmX2xlbik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWxhc3RfYnVmX2xlbiA9IGJ1Zi0+bGVuOworCQl9CisJfQorCisJLyogZnJlZSBsYW5ndWFnZSB0YWdzIC0tIGxhc3Qgb25lIGlzIGEgc3RhdGljICcqJyAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fbGFuZ3MgLSAxOyBpKyspCisJCWZyZWUobGFuZ3VhZ2VfdGFnc1tpXSk7CisJZnJlZShsYW5ndWFnZV90YWdzKTsKK30KKworLyoKKyAqIEdldCBhbiBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIHdoaWNoIGluZGljYXRlcyB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1YWdlcy4KKyAqCisgKiBFeGFtcGxlczoKKyAqICAgTEFOR1VBR0U9IC0+ICIiCisgKiAgIExBTkdVQUdFPWtvOmVuIC0+ICJBY2NlcHQtTGFuZ3VhZ2U6IGtvLCBlbjsgcT0wLjksICo7IHE9MC4xIgorICogICBMQU5HVUFHRT1rb19LUi5VVEYtODpzckBsYXRpbiAtPiAiQWNjZXB0LUxhbmd1YWdlOiBrby1LUiwgc3I7IHE9MC45LCAqOyBxPTAuMSIKKyAqICAgTEFOR1VBR0U9a28gTEFORz1lbl9VUy5VVEYtOCAtPiAiQWNjZXB0LUxhbmd1YWdlOiBrbywgKjsgcT0wLjEiCisgKiAgIExBTkdVQUdFPSBMQU5HPWVuX1VTLlVURi04IC0+ICJBY2NlcHQtTGFuZ3VhZ2U6IGVuLVVTLCAqOyBxPTAuMSIKKyAqICAgTEFOR1VBR0U9IExBTkc9QyAtPiAiIgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2FjY2VwdF9sYW5ndWFnZSh2b2lkKQoreworCWlmICghY2FjaGVkX2FjY2VwdF9sYW5ndWFnZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQl3cml0ZV9hY2NlcHRfbGFuZ3VhZ2UoJmJ1Zik7CisJCWlmIChidWYubGVuID4gMCkKKwkJCWNhY2hlZF9hY2NlcHRfbGFuZ3VhZ2UgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCX0KKworCXJldHVybiBjYWNoZWRfYWNjZXB0X2xhbmd1YWdlOworfQorCitzdGF0aWMgdm9pZCBodHRwX29wdF9yZXF1ZXN0X3JlbWFpbmRlcihDVVJMICpjdXJsLCBvZmZfdCBwb3MpCit7CisJY2hhciBidWZbMTI4XTsKKwl4c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUiUFJJdU1BWCItIiwgKHVpbnRtYXhfdClwb3MpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SQU5HRSwgYnVmKTsKK30KKworLyogaHR0cF9yZXF1ZXN0KCkgdGFyZ2V0cyAqLworI2RlZmluZSBIVFRQX1JFUVVFU1RfU1RSQlVGCTAKKyNkZWZpbmUgSFRUUF9SRVFVRVNUX0ZJTEUJMQorCitzdGF0aWMgaW50IGh0dHBfcmVxdWVzdChjb25zdCBjaGFyICp1cmwsCisJCQl2b2lkICpyZXN1bHQsIGludCB0YXJnZXQsCisJCQljb25zdCBzdHJ1Y3QgaHR0cF9nZXRfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnMgPSBodHRwX2NvcHlfZGVmYXVsdF9oZWFkZXJzKCk7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICphY2NlcHRfbGFuZ3VhZ2U7CisJaW50IHJldDsKKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEdFVCwgMSk7CisKKwlpZiAocmVzdWx0ID09IE5VTEwpIHsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMSk7CisJfSBlbHNlIHsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMCk7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCByZXN1bHQpOworCisJCWlmICh0YXJnZXQgPT0gSFRUUF9SRVFVRVNUX0ZJTEUpIHsKKwkJCW9mZl90IHBvc24gPSBmdGVsbG8ocmVzdWx0KTsKKwkJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLAorCQkJCQkgZndyaXRlKTsKKwkJCWlmIChwb3NuID4gMCkKKwkJCQlodHRwX29wdF9yZXF1ZXN0X3JlbWFpbmRlcihzbG90LT5jdXJsLCBwb3NuKTsKKwkJfSBlbHNlCisJCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwKKwkJCQkJIGZ3cml0ZV9idWZmZXIpOworCX0KKworCWFjY2VwdF9sYW5ndWFnZSA9IGdldF9hY2NlcHRfbGFuZ3VhZ2UoKTsKKworCWlmIChhY2NlcHRfbGFuZ3VhZ2UpCisJCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBhY2NlcHRfbGFuZ3VhZ2UpOworCisJc3RyYnVmX2FkZHN0cigmYnVmLCAiUHJhZ21hOiIpOworCWlmIChvcHRpb25zICYmIG9wdGlvbnMtPm5vX2NhY2hlKQorCQlzdHJidWZfYWRkc3RyKCZidWYsICIgbm8tY2FjaGUiKTsKKwlpZiAob3B0aW9ucyAmJiBvcHRpb25zLT5pbml0aWFsX3JlcXVlc3QgJiYKKwkgICAgaHR0cF9mb2xsb3dfY29uZmlnID09IEhUVFBfRk9MTE9XX0lOSVRJQUwpCisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7CisKKwloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgYnVmLmJ1Zik7CisKKwkvKiBBZGQgYWRkaXRpb25hbCBoZWFkZXJzIGhlcmUgKi8KKwlpZiAob3B0aW9ucyAmJiBvcHRpb25zLT5leHRyYV9oZWFkZXJzKSB7CisJCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIG9wdGlvbnMtPmV4dHJhX2hlYWRlcnMpIHsKKwkJCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBpdGVtLT5zdHJpbmcpOworCQl9CisJfQorCisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgaGVhZGVycyk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0VOQ09ESU5HLCAiIik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAwKTsKKworCXJldCA9IHJ1bl9vbmVfc2xvdChzbG90LCAmcmVzdWx0cyk7CisKKwlpZiAob3B0aW9ucyAmJiBvcHRpb25zLT5jb250ZW50X3R5cGUpIHsKKwkJc3RydWN0IHN0cmJ1ZiByYXcgPSBTVFJCVUZfSU5JVDsKKwkJY3VybGluZm9fc3RyYnVmKHNsb3QtPmN1cmwsIENVUkxJTkZPX0NPTlRFTlRfVFlQRSwgJnJhdyk7CisJCWV4dHJhY3RfY29udGVudF90eXBlKCZyYXcsIG9wdGlvbnMtPmNvbnRlbnRfdHlwZSwKKwkJCQkgICAgIG9wdGlvbnMtPmNoYXJzZXQpOworCQlzdHJidWZfcmVsZWFzZSgmcmF3KTsKKwl9CisKKwlpZiAob3B0aW9ucyAmJiBvcHRpb25zLT5lZmZlY3RpdmVfdXJsKQorCQljdXJsaW5mb19zdHJidWYoc2xvdC0+Y3VybCwgQ1VSTElORk9fRUZGRUNUSVZFX1VSTCwKKwkJCQlvcHRpb25zLT5lZmZlY3RpdmVfdXJsKTsKKworCWN1cmxfc2xpc3RfZnJlZV9hbGwoaGVhZGVycyk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVXBkYXRlIHRoZSAiYmFzZSIgdXJsIHRvIGEgbW9yZSBhcHByb3ByaWF0ZSB2YWx1ZSwgYXMgZGVkdWNlZCBieQorICogcmVkaXJlY3RzIHNlZW4gd2hlbiByZXF1ZXN0aW5nIGEgVVJMIHN0YXJ0aW5nIHdpdGggInVybCIuCisgKgorICogVGhlICJhc2tlZCIgcGFyYW1ldGVyIGlzIGEgVVJMIHRoYXQgd2UgYXNrZWQgY3VybCB0byBhY2Nlc3MsIGFuZCBtdXN0IGJlZ2luCisgKiB3aXRoICJiYXNlIi4KKyAqCisgKiBUaGUgImdvdCIgcGFyYW1ldGVyIGlzIHRoZSBVUkwgdGhhdCBjdXJsIHJlcG9ydGVkIHRvIHVzIGFzIHdoZXJlIHdlIGVuZGVkCisgKiB1cC4KKyAqCisgKiBSZXR1cm5zIDEgaWYgd2UgdXBkYXRlZCB0aGUgYmFzZSB1cmwsIDAgb3RoZXJ3aXNlLgorICoKKyAqIE91ciBiYXNpYyBzdHJhdGVneSBpcyB0byBjb21wYXJlICJiYXNlIiBhbmQgImFza2VkIiB0byBmaW5kIHRoZSBiaXRzCisgKiBzcGVjaWZpYyB0byBvdXIgcmVxdWVzdC4gV2UgdGhlbiBzdHJpcCB0aG9zZSBiaXRzIG9mZiBvZiAiZ290IiB0byB5aWVsZCB0aGUKKyAqIG5ldyBiYXNlLiBTbyBmb3IgZXhhbXBsZSwgaWYgb3VyIGJhc2UgaXMgImh0dHA6Ly9leGFtcGxlLmNvbS9mb28uZ2l0IiwKKyAqIGFuZCB3ZSBhc2sgZm9yICJodHRwOi8vZXhhbXBsZS5jb20vZm9vLmdpdC9pbmZvL3JlZnMiLCB3ZSBtaWdodCBlbmQgdXAKKyAqIHdpdGggImh0dHBzOi8vb3RoZXIuZXhhbXBsZS5jb20vZm9vLmdpdC9pbmZvL3JlZnMiLiBXZSB3b3VsZCB3YW50IHRoZQorICogbmV3IFVSTCB0byBiZWNvbWUgImh0dHBzOi8vb3RoZXIuZXhhbXBsZS5jb20vZm9vLmdpdCIuCisgKgorICogTm90ZSB0aGF0IHRoaXMgYXNzdW1lcyBhIHNhbmUgcmVkaXJlY3Qgc2NoZW1lLiBJdCdzIGVudGlyZWx5IHBvc3NpYmxlCisgKiBpbiB0aGUgZXhhbXBsZSBhYm92ZSB0byBlbmQgdXAgYXQgYSBVUkwgdGhhdCBkb2VzIG5vdCBldmVuIGVuZCBpbgorICogImluZm8vcmVmcyIuICBJbiBzdWNoIGEgY2FzZSB3ZSBkaWUuIFRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvLCBzdWNoIGEKKyAqIHNjaGVtZSBpcyB1bmxpa2VseSB0byByZXByZXNlbnQgYSByZWFsIGdpdCByZXBvc2l0b3J5LCBhbmQgZmFpbGluZyB0bworICogcmV3cml0ZSB0aGUgYmFzZSBvcGVucyBvcHRpb25zIGZvciBtYWxpY2lvdXMgcmVkaXJlY3RzIHRvIGRvIGZ1bm55IHRoaW5ncy4KKyAqLworc3RhdGljIGludCB1cGRhdGVfdXJsX2Zyb21fcmVkaXJlY3Qoc3RydWN0IHN0cmJ1ZiAqYmFzZSwKKwkJCQkgICAgY29uc3QgY2hhciAqYXNrZWQsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzdHJidWYgKmdvdCkKK3sKKwljb25zdCBjaGFyICp0YWlsOworCXNpemVfdCBuZXdfbGVuOworCisJaWYgKCFzdHJjbXAoYXNrZWQsIGdvdC0+YnVmKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXNraXBfcHJlZml4KGFza2VkLCBiYXNlLT5idWYsICZ0YWlsKSkKKwkJQlVHKCJ1cGRhdGVfdXJsX2Zyb21fcmVkaXJlY3Q6ICVzIGlzIG5vdCBhIHN1cGVyc2V0IG9mICVzIiwKKwkJICAgIGFza2VkLCBiYXNlLT5idWYpOworCisJbmV3X2xlbiA9IGdvdC0+bGVuOworCWlmICghc3RyaXBfc3VmZml4X21lbShnb3QtPmJ1ZiwgJm5ld19sZW4sIHRhaWwpKQorCQlkaWUoXygidW5hYmxlIHRvIHVwZGF0ZSB1cmwgYmFzZSBmcm9tIHJlZGlyZWN0aW9uOlxuIgorCQkgICAgICAiICBhc2tlZCBmb3I6ICVzXG4iCisJCSAgICAgICIgICByZWRpcmVjdDogJXMiKSwKKwkJICAgIGFza2VkLCBnb3QtPmJ1Zik7CisKKwlzdHJidWZfcmVzZXQoYmFzZSk7CisJc3RyYnVmX2FkZChiYXNlLCBnb3QtPmJ1ZiwgbmV3X2xlbik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBodHRwX3JlcXVlc3RfcmVhdXRoKGNvbnN0IGNoYXIgKnVybCwKKwkJCSAgICAgICB2b2lkICpyZXN1bHQsIGludCB0YXJnZXQsCisJCQkgICAgICAgc3RydWN0IGh0dHBfZ2V0X29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IHJldCA9IGh0dHBfcmVxdWVzdCh1cmwsIHJlc3VsdCwgdGFyZ2V0LCBvcHRpb25zKTsKKworCWlmIChyZXQgIT0gSFRUUF9PSyAmJiByZXQgIT0gSFRUUF9SRUFVVEgpCisJCXJldHVybiByZXQ7CisKKwlpZiAob3B0aW9ucyAmJiBvcHRpb25zLT5lZmZlY3RpdmVfdXJsICYmIG9wdGlvbnMtPmJhc2VfdXJsKSB7CisJCWlmICh1cGRhdGVfdXJsX2Zyb21fcmVkaXJlY3Qob3B0aW9ucy0+YmFzZV91cmwsCisJCQkJCSAgICAgdXJsLCBvcHRpb25zLT5lZmZlY3RpdmVfdXJsKSkgeworCQkJY3JlZGVudGlhbF9mcm9tX3VybCgmaHR0cF9hdXRoLCBvcHRpb25zLT5iYXNlX3VybC0+YnVmKTsKKwkJCXVybCA9IG9wdGlvbnMtPmVmZmVjdGl2ZV91cmwtPmJ1ZjsKKwkJfQorCX0KKworCWlmIChyZXQgIT0gSFRUUF9SRUFVVEgpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIFRoZSBwcmV2aW91cyByZXF1ZXN0IG1heSBoYXZlIHB1dCBjcnVmdCBpbnRvIG91ciBvdXRwdXQgc3RyZWFtOyB3ZQorCSAqIHNob3VsZCBjbGVhciBpdCBvdXQgYmVmb3JlIG1ha2luZyBvdXIgbmV4dCByZXF1ZXN0LgorCSAqLworCXN3aXRjaCAodGFyZ2V0KSB7CisJY2FzZSBIVFRQX1JFUVVFU1RfU1RSQlVGOgorCQlzdHJidWZfcmVzZXQocmVzdWx0KTsKKwkJYnJlYWs7CisJY2FzZSBIVFRQX1JFUVVFU1RfRklMRToKKwkJaWYgKGZmbHVzaChyZXN1bHQpKSB7CisJCQllcnJvcl9lcnJubygidW5hYmxlIHRvIGZsdXNoIGEgZmlsZSIpOworCQkJcmV0dXJuIEhUVFBfU1RBUlRfRkFJTEVEOworCQl9CisJCXJld2luZChyZXN1bHQpOworCQlpZiAoZnRydW5jYXRlKGZpbGVubyhyZXN1bHQpLCAwKSA8IDApIHsKKwkJCWVycm9yX2Vycm5vKCJ1bmFibGUgdG8gdHJ1bmNhdGUgYSBmaWxlIik7CisJCQlyZXR1cm4gSFRUUF9TVEFSVF9GQUlMRUQ7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCJVbmtub3duIGh0dHBfcmVxdWVzdCB0YXJnZXQiKTsKKwl9CisKKwljcmVkZW50aWFsX2ZpbGwoJmh0dHBfYXV0aCk7CisKKwlyZXR1cm4gaHR0cF9yZXF1ZXN0KHVybCwgcmVzdWx0LCB0YXJnZXQsIG9wdGlvbnMpOworfQorCitpbnQgaHR0cF9nZXRfc3RyYnVmKGNvbnN0IGNoYXIgKnVybCwKKwkJICAgIHN0cnVjdCBzdHJidWYgKnJlc3VsdCwKKwkJICAgIHN0cnVjdCBodHRwX2dldF9vcHRpb25zICpvcHRpb25zKQoreworCXJldHVybiBodHRwX3JlcXVlc3RfcmVhdXRoKHVybCwgcmVzdWx0LCBIVFRQX1JFUVVFU1RfU1RSQlVGLCBvcHRpb25zKTsKK30KKworLyoKKyAqIERvd25sb2FkcyBhIFVSTCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gdGhlIGdpdmVuIGZpbGUuCisgKgorICogSWYgYSBwcmV2aW91cyBpbnRlcnJ1cHRlZCBkb3dubG9hZCBpcyBkZXRlY3RlZCAoaS5lLiBhIHByZXZpb3VzIHRlbXBvcmFyeQorICogZmlsZSBpcyBzdGlsbCBhcm91bmQpIHRoZSBkb3dubG9hZCBpcyByZXN1bWVkLgorICovCitzdGF0aWMgaW50IGh0dHBfZ2V0X2ZpbGUoY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCSBzdHJ1Y3QgaHR0cF9nZXRfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzdHJidWYgdG1wZmlsZSA9IFNUUkJVRl9JTklUOworCUZJTEUgKnJlc3VsdDsKKworCXN0cmJ1Zl9hZGRmKCZ0bXBmaWxlLCAiJXMudGVtcCIsIGZpbGVuYW1lKTsKKwlyZXN1bHQgPSBmb3Blbih0bXBmaWxlLmJ1ZiwgImEiKTsKKwlpZiAoIXJlc3VsdCkgeworCQllcnJvcigiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyIsIHRtcGZpbGUuYnVmKTsKKwkJcmV0ID0gSFRUUF9FUlJPUjsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXJldCA9IGh0dHBfcmVxdWVzdF9yZWF1dGgodXJsLCByZXN1bHQsIEhUVFBfUkVRVUVTVF9GSUxFLCBvcHRpb25zKTsKKwlmY2xvc2UocmVzdWx0KTsKKworCWlmIChyZXQgPT0gSFRUUF9PSyAmJiBmaW5hbGl6ZV9vYmplY3RfZmlsZSh0bXBmaWxlLmJ1ZiwgZmlsZW5hbWUpKQorCQlyZXQgPSBIVFRQX0VSUk9SOworY2xlYW51cDoKKwlzdHJidWZfcmVsZWFzZSgmdG1wZmlsZSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGh0dHBfZmV0Y2hfcmVmKGNvbnN0IGNoYXIgKmJhc2UsIHN0cnVjdCByZWYgKnJlZikKK3sKKwlzdHJ1Y3QgaHR0cF9nZXRfb3B0aW9ucyBvcHRpb25zID0gezB9OworCWNoYXIgKnVybDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAtMTsKKworCW9wdGlvbnMubm9fY2FjaGUgPSAxOworCisJdXJsID0gcXVvdGVfcmVmX3VybChiYXNlLCByZWYtPm5hbWUpOworCWlmIChodHRwX2dldF9zdHJidWYodXJsLCAmYnVmZmVyLCAmb3B0aW9ucykgPT0gSFRUUF9PSykgeworCQlzdHJidWZfcnRyaW0oJmJ1ZmZlcik7CisJCWlmIChidWZmZXIubGVuID09IHRoZV9oYXNoX2FsZ28tPmhleHN6KQorCQkJcmV0ID0gZ2V0X29pZF9oZXgoYnVmZmVyLmJ1ZiwgJnJlZi0+b2xkX29pZCk7CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKGJ1ZmZlci5idWYsICJyZWY6ICIpKSB7CisJCQlyZWYtPnN5bXJlZiA9IHhzdHJkdXAoYnVmZmVyLmJ1ZiArIDUpOworCQkJcmV0ID0gMDsKKwkJfQorCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCWZyZWUodXJsKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBIZWxwZXJzIGZvciBmZXRjaGluZyBwYWNrcyAqLworc3RhdGljIGNoYXIgKmZldGNoX3BhY2tfaW5kZXgodW5zaWduZWQgY2hhciAqaGFzaCwgY29uc3QgY2hhciAqYmFzZV91cmwpCit7CisJY2hhciAqdXJsLCAqdG1wOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoaHR0cF9pc192ZXJib3NlKQorCQlmcHJpbnRmKHN0ZGVyciwgIkdldHRpbmcgaW5kZXggZm9yIHBhY2sgJXNcbiIsIGhhc2hfdG9faGV4KGhhc2gpKTsKKworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlX3VybCk7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIm9iamVjdHMvcGFjay9wYWNrLSVzLmlkeCIsIGhhc2hfdG9faGV4KGhhc2gpKTsKKwl1cmwgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzLnRlbXAiLCBzaGExX3BhY2tfaW5kZXhfbmFtZShoYXNoKSk7CisJdG1wID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCWlmIChodHRwX2dldF9maWxlKHVybCwgdG1wLCBOVUxMKSAhPSBIVFRQX09LKSB7CisJCWVycm9yKCJVbmFibGUgdG8gZ2V0IHBhY2sgaW5kZXggJXMiLCB1cmwpOworCQlGUkVFX0FORF9OVUxMKHRtcCk7CisJfQorCisJZnJlZSh1cmwpOworCXJldHVybiB0bXA7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfYW5kX3NldHVwX3BhY2tfaW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKipwYWNrc19oZWFkLAorCXVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmJhc2VfdXJsKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXdfcGFjazsKKwljaGFyICp0bXBfaWR4ID0gTlVMTDsKKwlpbnQgcmV0OworCisJaWYgKGhhc19wYWNrX2luZGV4KHNoYTEpKSB7CisJCW5ld19wYWNrID0gcGFyc2VfcGFja19pbmRleChzaGExLCBzaGExX3BhY2tfaW5kZXhfbmFtZShzaGExKSk7CisJCWlmICghbmV3X3BhY2spCisJCQlyZXR1cm4gLTE7IC8qIHBhcnNlX3BhY2tfaW5kZXgoKSBhbHJlYWR5IGlzc3VlZCBlcnJvciBtZXNzYWdlICovCisJCWdvdG8gYWRkX3BhY2s7CisJfQorCisJdG1wX2lkeCA9IGZldGNoX3BhY2tfaW5kZXgoc2hhMSwgYmFzZV91cmwpOworCWlmICghdG1wX2lkeCkKKwkJcmV0dXJuIC0xOworCisJbmV3X3BhY2sgPSBwYXJzZV9wYWNrX2luZGV4KHNoYTEsIHRtcF9pZHgpOworCWlmICghbmV3X3BhY2spIHsKKwkJdW5saW5rKHRtcF9pZHgpOworCQlmcmVlKHRtcF9pZHgpOworCisJCXJldHVybiAtMTsgLyogcGFyc2VfcGFja19pbmRleCgpIGFscmVhZHkgaXNzdWVkIGVycm9yIG1lc3NhZ2UgKi8KKwl9CisKKwlyZXQgPSB2ZXJpZnlfcGFja19pbmRleChuZXdfcGFjayk7CisJaWYgKCFyZXQpIHsKKwkJY2xvc2VfcGFja19pbmRleChuZXdfcGFjayk7CisJCXJldCA9IGZpbmFsaXplX29iamVjdF9maWxlKHRtcF9pZHgsIHNoYTFfcGFja19pbmRleF9uYW1lKHNoYTEpKTsKKwl9CisJZnJlZSh0bXBfaWR4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLTE7CisKK2FkZF9wYWNrOgorCW5ld19wYWNrLT5uZXh0ID0gKnBhY2tzX2hlYWQ7CisJKnBhY2tzX2hlYWQgPSBuZXdfcGFjazsKKwlyZXR1cm4gMDsKK30KKworaW50IGh0dHBfZ2V0X2luZm9fcGFja3MoY29uc3QgY2hhciAqYmFzZV91cmwsIHN0cnVjdCBwYWNrZWRfZ2l0ICoqcGFja3NfaGVhZCkKK3sKKwlzdHJ1Y3QgaHR0cF9nZXRfb3B0aW9ucyBvcHRpb25zID0gezB9OworCWludCByZXQgPSAwOworCWNoYXIgKnVybDsKKwljb25zdCBjaGFyICpkYXRhOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwllbmRfdXJsX3dpdGhfc2xhc2goJmJ1ZiwgYmFzZV91cmwpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIm9iamVjdHMvaW5mby9wYWNrcyIpOworCXVybCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwlvcHRpb25zLm5vX2NhY2hlID0gMTsKKwlyZXQgPSBodHRwX2dldF9zdHJidWYodXJsLCAmYnVmLCAmb3B0aW9ucyk7CisJaWYgKHJldCAhPSBIVFRQX09LKQorCQlnb3RvIGNsZWFudXA7CisKKwlkYXRhID0gYnVmLmJ1ZjsKKwl3aGlsZSAoKmRhdGEpIHsKKwkJaWYgKHNraXBfcHJlZml4KGRhdGEsICJQIHBhY2stIiwgJmRhdGEpICYmCisJCSAgICAhcGFyc2Vfb2lkX2hleChkYXRhLCAmb2lkLCAmZGF0YSkgJiYKKwkJICAgIHNraXBfcHJlZml4KGRhdGEsICIucGFjayIsICZkYXRhKSAmJgorCQkgICAgKCpkYXRhID09ICdcbicgfHwgKmRhdGEgPT0gJ1wwJykpIHsKKwkJCWZldGNoX2FuZF9zZXR1cF9wYWNrX2luZGV4KHBhY2tzX2hlYWQsIG9pZC5oYXNoLCBiYXNlX3VybCk7CisJCX0gZWxzZSB7CisJCQlkYXRhID0gc3RyY2hybnVsKGRhdGEsICdcbicpOworCQl9CisJCWlmICgqZGF0YSkKKwkJCWRhdGErKzsgLyogc2tpcCBwYXN0IG5ld2xpbmUgKi8KKwl9CisKK2NsZWFudXA6CisJZnJlZSh1cmwpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXEpCit7CisJaWYgKHByZXEtPnBhY2tmaWxlICE9IE5VTEwpIHsKKwkJZmNsb3NlKHByZXEtPnBhY2tmaWxlKTsKKwkJcHJlcS0+cGFja2ZpbGUgPSBOVUxMOworCX0KKwlwcmVxLT5zbG90ID0gTlVMTDsKKwlzdHJidWZfcmVsZWFzZSgmcHJlcS0+dG1wZmlsZSk7CisJZnJlZShwcmVxLT51cmwpOworCWZyZWUocHJlcSk7Cit9CisKK2ludCBmaW5pc2hfaHR0cF9wYWNrX3JlcXVlc3Qoc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICoqbHN0OworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gcHJlcS0+dGFyZ2V0OworCWNoYXIgKnRtcF9pZHg7CisJc2l6ZV90IGxlbjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBpcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCWNsb3NlX3BhY2tfaW5kZXgocCk7CisKKwlmY2xvc2UocHJlcS0+cGFja2ZpbGUpOworCXByZXEtPnBhY2tmaWxlID0gTlVMTDsKKworCWxzdCA9IHByZXEtPmxzdDsKKwl3aGlsZSAoKmxzdCAhPSBwKQorCQlsc3QgPSAmKCgqbHN0KS0+bmV4dCk7CisJKmxzdCA9ICgqbHN0KS0+bmV4dDsKKworCWlmICghc3RyaXBfc3VmZml4KHByZXEtPnRtcGZpbGUuYnVmLCAiLnBhY2sudGVtcCIsICZsZW4pKQorCQlCVUcoInBhY2sgdG1wZmlsZSBkb2VzIG5vdCBlbmQgaW4gLnBhY2sudGVtcD8iKTsKKwl0bXBfaWR4ID0geHN0cmZtdCgiJS4qcy5pZHgudGVtcCIsIChpbnQpbGVuLCBwcmVxLT50bXBmaWxlLmJ1Zik7CisKKwlhcmd2X2FycmF5X3B1c2goJmlwLmFyZ3MsICJpbmRleC1wYWNrIik7CisJYXJndl9hcnJheV9wdXNobCgmaXAuYXJncywgIi1vIiwgdG1wX2lkeCwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNoKCZpcC5hcmdzLCBwcmVxLT50bXBmaWxlLmJ1Zik7CisJaXAuZ2l0X2NtZCA9IDE7CisJaXAubm9fc3RkaW4gPSAxOworCWlwLm5vX3N0ZG91dCA9IDE7CisKKwlpZiAocnVuX2NvbW1hbmQoJmlwKSkgeworCQl1bmxpbmsocHJlcS0+dG1wZmlsZS5idWYpOworCQl1bmxpbmsodG1wX2lkeCk7CisJCWZyZWUodG1wX2lkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwl1bmxpbmsoc2hhMV9wYWNrX2luZGV4X25hbWUocC0+aGFzaCkpOworCisJaWYgKGZpbmFsaXplX29iamVjdF9maWxlKHByZXEtPnRtcGZpbGUuYnVmLCBzaGExX3BhY2tfbmFtZShwLT5oYXNoKSkKKwkgfHwgZmluYWxpemVfb2JqZWN0X2ZpbGUodG1wX2lkeCwgc2hhMV9wYWNrX2luZGV4X25hbWUocC0+aGFzaCkpKSB7CisJCWZyZWUodG1wX2lkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpbnN0YWxsX3BhY2tlZF9naXQodGhlX3JlcG9zaXRvcnksIHApOworCWZyZWUodG1wX2lkeCk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqbmV3X2h0dHBfcGFja19yZXF1ZXN0KAorCXN0cnVjdCBwYWNrZWRfZ2l0ICp0YXJnZXQsIGNvbnN0IGNoYXIgKmJhc2VfdXJsKQoreworCW9mZl90IHByZXZfcG9zbiA9IDA7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXE7CisKKwlwcmVxID0geGNhbGxvYygxLCBzaXplb2YoKnByZXEpKTsKKwlzdHJidWZfaW5pdCgmcHJlcS0+dG1wZmlsZSwgMCk7CisJcHJlcS0+dGFyZ2V0ID0gdGFyZ2V0OworCisJZW5kX3VybF93aXRoX3NsYXNoKCZidWYsIGJhc2VfdXJsKTsKKwlzdHJidWZfYWRkZigmYnVmLCAib2JqZWN0cy9wYWNrL3BhY2stJXMucGFjayIsCisJCWhhc2hfdG9faGV4KHRhcmdldC0+aGFzaCkpOworCXByZXEtPnVybCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwlzdHJidWZfYWRkZigmcHJlcS0+dG1wZmlsZSwgIiVzLnRlbXAiLCBzaGExX3BhY2tfbmFtZSh0YXJnZXQtPmhhc2gpKTsKKwlwcmVxLT5wYWNrZmlsZSA9IGZvcGVuKHByZXEtPnRtcGZpbGUuYnVmLCAiYSIpOworCWlmICghcHJlcS0+cGFja2ZpbGUpIHsKKwkJZXJyb3IoIlVuYWJsZSB0byBvcGVuIGxvY2FsIGZpbGUgJXMgZm9yIHBhY2siLAorCQkgICAgICBwcmVxLT50bXBmaWxlLmJ1Zik7CisJCWdvdG8gYWJvcnQ7CisJfQorCisJcHJlcS0+c2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCWN1cmxfZWFzeV9zZXRvcHQocHJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCBwcmVxLT5wYWNrZmlsZSk7CisJY3VybF9lYXN5X3NldG9wdChwcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZSk7CisJY3VybF9lYXN5X3NldG9wdChwcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgcHJlcS0+dXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHByZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwKKwkJbm9fcHJhZ21hX2hlYWRlcik7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGRhdGEgcHJlc2VudCBmcm9tIGEgcHJldmlvdXMgdHJhbnNmZXIgYXR0ZW1wdCwKKwkgKiByZXN1bWUgd2hlcmUgaXQgbGVmdCBvZmYKKwkgKi8KKwlwcmV2X3Bvc24gPSBmdGVsbG8ocHJlcS0+cGFja2ZpbGUpOworCWlmIChwcmV2X3Bvc24+MCkgeworCQlpZiAoaHR0cF9pc192ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlJlc3VtaW5nIGZldGNoIG9mIHBhY2sgJXMgYXQgYnl0ZSAlIlBSSXVNQVgiXG4iLAorCQkJCWhhc2hfdG9faGV4KHRhcmdldC0+aGFzaCksCisJCQkJKHVpbnRtYXhfdClwcmV2X3Bvc24pOworCQlodHRwX29wdF9yZXF1ZXN0X3JlbWFpbmRlcihwcmVxLT5zbG90LT5jdXJsLCBwcmV2X3Bvc24pOworCX0KKworCXJldHVybiBwcmVxOworCithYm9ydDoKKwlzdHJidWZfcmVsZWFzZSgmcHJlcS0+dG1wZmlsZSk7CisJZnJlZShwcmVxLT51cmwpOworCWZyZWUocHJlcSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIEhlbHBlcnMgZm9yIGZldGNoaW5nIG9iamVjdHMgKGxvb3NlKSAqLworc3RhdGljIHNpemVfdCBmd3JpdGVfc2hhMV9maWxlKGNoYXIgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwKKwkJCSAgICAgICB2b2lkICpkYXRhKQoreworCXVuc2lnbmVkIGNoYXIgZXhwbls0MDk2XTsKKwlzaXplX3Qgc2l6ZSA9IGVsdHNpemUgKiBubWVtYjsKKwlpbnQgcG9zbiA9IDA7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEgPSBkYXRhOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90ID0gZnJlcS0+c2xvdDsKKworCWlmIChzbG90KSB7CisJCUNVUkxjb2RlIGMgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhzbG90LT5jdXJsLCBDVVJMSU5GT19IVFRQX0NPREUsCisJCQkJCQkmc2xvdC0+aHR0cF9jb2RlKTsKKwkJaWYgKGMgIT0gQ1VSTEVfT0spCisJCQlCVUcoImN1cmxfZWFzeV9nZXRpbmZvIGZvciBIVFRQIGNvZGUgZmFpbGVkOiAlcyIsCisJCQkJY3VybF9lYXN5X3N0cmVycm9yKGMpKTsKKwkJaWYgKHNsb3QtPmh0dHBfY29kZSA+PSAzMDApCisJCQlyZXR1cm4gbm1lbWI7CisJfQorCisJZG8geworCQlzc2l6ZV90IHJldHZhbCA9IHh3cml0ZShmcmVxLT5sb2NhbGZpbGUsCisJCQkJCShjaGFyICopIHB0ciArIHBvc24sIHNpemUgLSBwb3NuKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlyZXR1cm4gcG9zbiAvIGVsdHNpemU7CisJCXBvc24gKz0gcmV0dmFsOworCX0gd2hpbGUgKHBvc24gPCBzaXplKTsKKworCWZyZXEtPnN0cmVhbS5hdmFpbF9pbiA9IHNpemU7CisJZnJlcS0+c3RyZWFtLm5leHRfaW4gPSAodm9pZCAqKXB0cjsKKwlkbyB7CisJCWZyZXEtPnN0cmVhbS5uZXh0X291dCA9IGV4cG47CisJCWZyZXEtPnN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoZXhwbik7CisJCWZyZXEtPnpyZXQgPSBnaXRfaW5mbGF0ZSgmZnJlcS0+c3RyZWFtLCBaX1NZTkNfRkxVU0gpOworCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmZyZXEtPmMsIGV4cG4sCisJCQkJCSBzaXplb2YoZXhwbikgLSBmcmVxLT5zdHJlYW0uYXZhaWxfb3V0KTsKKwl9IHdoaWxlIChmcmVxLT5zdHJlYW0uYXZhaWxfaW4gJiYgZnJlcS0+enJldCA9PSBaX09LKTsKKwlyZXR1cm4gbm1lbWI7Cit9CisKK3N0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpuZXdfaHR0cF9vYmplY3RfcmVxdWVzdChjb25zdCBjaGFyICpiYXNlX3VybCwKKwkJCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJY2hhciAqaGV4ID0gb2lkX3RvX2hleChvaWQpOworCXN0cnVjdCBzdHJidWYgZmlsZW5hbWUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHByZXZmaWxlID0gU1RSQlVGX0lOSVQ7CisJaW50IHByZXZsb2NhbDsKKwljaGFyIHByZXZfYnVmW1BSRVZfQlVGX1NJWkVdOworCXNzaXplX3QgcHJldl9yZWFkID0gMDsKKwlvZmZfdCBwcmV2X3Bvc24gPSAwOworCXN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxOworCisJZnJlcSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpmcmVxKSk7CisJc3RyYnVmX2luaXQoJmZyZXEtPnRtcGZpbGUsIDApOworCW9pZGNweSgmZnJlcS0+b2lkLCBvaWQpOworCWZyZXEtPmxvY2FsZmlsZSA9IC0xOworCisJbG9vc2Vfb2JqZWN0X3BhdGgodGhlX3JlcG9zaXRvcnksICZmaWxlbmFtZSwgb2lkKTsKKwlzdHJidWZfYWRkZigmZnJlcS0+dG1wZmlsZSwgIiVzLnRlbXAiLCBmaWxlbmFtZS5idWYpOworCisJc3RyYnVmX2FkZGYoJnByZXZmaWxlLCAiJXMucHJldiIsIGZpbGVuYW1lLmJ1Zik7CisJdW5saW5rX29yX3dhcm4ocHJldmZpbGUuYnVmKTsKKwlyZW5hbWUoZnJlcS0+dG1wZmlsZS5idWYsIHByZXZmaWxlLmJ1Zik7CisJdW5saW5rX29yX3dhcm4oZnJlcS0+dG1wZmlsZS5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZmaWxlbmFtZSk7CisKKwlpZiAoZnJlcS0+bG9jYWxmaWxlICE9IC0xKQorCQllcnJvcigiZmQgbGVha2FnZSBpbiBzdGFydDogJWQiLCBmcmVxLT5sb2NhbGZpbGUpOworCWZyZXEtPmxvY2FsZmlsZSA9IG9wZW4oZnJlcS0+dG1wZmlsZS5idWYsCisJCQkgICAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKKwkvKgorCSAqIFRoaXMgY291bGQgaGF2ZSBmYWlsZWQgZHVlIHRvIHRoZSAibGF6eSBkaXJlY3RvcnkgY3JlYXRpb24iOworCSAqIHRyeSB0byBta2RpciB0aGUgbGFzdCBwYXRoIGNvbXBvbmVudC4KKwkgKi8KKwlpZiAoZnJlcS0+bG9jYWxmaWxlIDwgMCAmJiBlcnJubyA9PSBFTk9FTlQpIHsKKwkJY2hhciAqZGlyID0gc3RycmNocihmcmVxLT50bXBmaWxlLmJ1ZiwgJy8nKTsKKwkJaWYgKGRpcikgeworCQkJKmRpciA9IDA7CisJCQlta2RpcihmcmVxLT50bXBmaWxlLmJ1ZiwgMDc3Nyk7CisJCQkqZGlyID0gJy8nOworCQl9CisJCWZyZXEtPmxvY2FsZmlsZSA9IG9wZW4oZnJlcS0+dG1wZmlsZS5idWYsCisJCQkJICAgICAgIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisJfQorCisJaWYgKGZyZXEtPmxvY2FsZmlsZSA8IDApIHsKKwkJZXJyb3JfZXJybm8oIkNvdWxkbid0IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAlcyIsCisJCQkgICAgZnJlcS0+dG1wZmlsZS5idWYpOworCQlnb3RvIGFib3J0OworCX0KKworCWdpdF9pbmZsYXRlX2luaXQoJmZyZXEtPnN0cmVhbSk7CisKKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZmcmVxLT5jKTsKKworCWZyZXEtPnVybCA9IGdldF9yZW1vdGVfb2JqZWN0X3VybChiYXNlX3VybCwgaGV4LCAwKTsKKworCS8qCisJICogSWYgYSBwcmV2aW91cyB0ZW1wIGZpbGUgaXMgcHJlc2VudCwgcHJvY2VzcyB3aGF0IHdhcyBhbHJlYWR5CisJICogZmV0Y2hlZC4KKwkgKi8KKwlwcmV2bG9jYWwgPSBvcGVuKHByZXZmaWxlLmJ1ZiwgT19SRE9OTFkpOworCWlmIChwcmV2bG9jYWwgIT0gLTEpIHsKKwkJZG8geworCQkJcHJldl9yZWFkID0geHJlYWQocHJldmxvY2FsLCBwcmV2X2J1ZiwgUFJFVl9CVUZfU0laRSk7CisJCQlpZiAocHJldl9yZWFkPjApIHsKKwkJCQlpZiAoZndyaXRlX3NoYTFfZmlsZShwcmV2X2J1ZiwKKwkJCQkJCSAgICAgMSwKKwkJCQkJCSAgICAgcHJldl9yZWFkLAorCQkJCQkJICAgICBmcmVxKSA9PSBwcmV2X3JlYWQpIHsKKwkJCQkJcHJldl9wb3NuICs9IHByZXZfcmVhZDsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmV2X3JlYWQgPSAtMTsKKwkJCQl9CisJCQl9CisJCX0gd2hpbGUgKHByZXZfcmVhZCA+IDApOworCQljbG9zZShwcmV2bG9jYWwpOworCX0KKwl1bmxpbmtfb3Jfd2FybihwcmV2ZmlsZS5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmV2ZmlsZSk7CisKKwkvKgorCSAqIFJlc2V0IGluZmxhdGUvU0hBMSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgcmVhZGluZyB0aGUgcHJldmlvdXMgdGVtcAorCSAqIGZpbGU7IGFsc28gcmV3aW5kIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvY2FsIGZpbGUuCisJICovCisJaWYgKHByZXZfcmVhZCA9PSAtMSkgeworCQltZW1zZXQoJmZyZXEtPnN0cmVhbSwgMCwgc2l6ZW9mKGZyZXEtPnN0cmVhbSkpOworCQlnaXRfaW5mbGF0ZV9pbml0KCZmcmVxLT5zdHJlYW0pOworCQl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZmcmVxLT5jKTsKKwkJaWYgKHByZXZfcG9zbj4wKSB7CisJCQlwcmV2X3Bvc24gPSAwOworCQkJbHNlZWsoZnJlcS0+bG9jYWxmaWxlLCAwLCBTRUVLX1NFVCk7CisJCQlpZiAoZnRydW5jYXRlKGZyZXEtPmxvY2FsZmlsZSwgMCkgPCAwKSB7CisJCQkJZXJyb3JfZXJybm8oIkNvdWxkbid0IHRydW5jYXRlIHRlbXBvcmFyeSBmaWxlICVzIiwKKwkJCQkJICAgIGZyZXEtPnRtcGZpbGUuYnVmKTsKKwkJCQlnb3RvIGFib3J0OworCQkJfQorCQl9CisJfQorCisJZnJlcS0+c2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCisJY3VybF9lYXN5X3NldG9wdChmcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsIGZyZXEpOworCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9GQUlMT05FUlJPUiwgMCk7CisJY3VybF9lYXN5X3NldG9wdChmcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9zaGExX2ZpbGUpOworCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgZnJlcS0+ZXJyb3JzdHIpOworCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIGZyZXEtPnVybCk7CisJY3VybF9lYXN5X3NldG9wdChmcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIG5vX3ByYWdtYV9oZWFkZXIpOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZGF0YSBmcm9tIGEgcHJldmlvdXMgZmV0Y2gKKwkgKiBhdHRlbXB0LCBvbmx5IGZldGNoIHRoZSBkYXRhIHdlIGRvbid0IGFscmVhZHkgaGF2ZS4KKwkgKi8KKwlpZiAocHJldl9wb3NuPjApIHsKKwkJaWYgKGh0dHBfaXNfdmVyYm9zZSkKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJSZXN1bWluZyBmZXRjaCBvZiBvYmplY3QgJXMgYXQgYnl0ZSAlIlBSSXVNQVgiXG4iLAorCQkJCWhleCwgKHVpbnRtYXhfdClwcmV2X3Bvc24pOworCQlodHRwX29wdF9yZXF1ZXN0X3JlbWFpbmRlcihmcmVxLT5zbG90LT5jdXJsLCBwcmV2X3Bvc24pOworCX0KKworCXJldHVybiBmcmVxOworCithYm9ydDoKKwlzdHJidWZfcmVsZWFzZSgmcHJldmZpbGUpOworCWZyZWUoZnJlcS0+dXJsKTsKKwlmcmVlKGZyZXEpOworCXJldHVybiBOVUxMOworfQorCit2b2lkIHByb2Nlc3NfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSkKK3sKKwlpZiAoZnJlcS0+c2xvdCA9PSBOVUxMKQorCQlyZXR1cm47CisJZnJlcS0+Y3VybF9yZXN1bHQgPSBmcmVxLT5zbG90LT5jdXJsX3Jlc3VsdDsKKwlmcmVxLT5odHRwX2NvZGUgPSBmcmVxLT5zbG90LT5odHRwX2NvZGU7CisJZnJlcS0+c2xvdCA9IE5VTEw7Cit9CisKK2ludCBmaW5pc2hfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3Qgc3RyYnVmIGZpbGVuYW1lID0gU1RSQlVGX0lOSVQ7CisKKwljbG9zZShmcmVxLT5sb2NhbGZpbGUpOworCWZyZXEtPmxvY2FsZmlsZSA9IC0xOworCisJcHJvY2Vzc19odHRwX29iamVjdF9yZXF1ZXN0KGZyZXEpOworCisJaWYgKGZyZXEtPmh0dHBfY29kZSA9PSA0MTYpIHsKKwkJd2FybmluZygicmVxdWVzdGVkIHJhbmdlIGludmFsaWQ7IHdlIG1heSBhbHJlYWR5IGhhdmUgYWxsIHRoZSBkYXRhLiIpOworCX0gZWxzZSBpZiAoZnJlcS0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKwkJaWYgKHN0YXQoZnJlcS0+dG1wZmlsZS5idWYsICZzdCkgPT0gMCkKKwkJCWlmIChzdC5zdF9zaXplID09IDApCisJCQkJdW5saW5rX29yX3dhcm4oZnJlcS0+dG1wZmlsZS5idWYpOworCQlyZXR1cm4gLTE7CisJfQorCisJZ2l0X2luZmxhdGVfZW5kKCZmcmVxLT5zdHJlYW0pOworCXRoZV9oYXNoX2FsZ28tPmZpbmFsX2ZuKGZyZXEtPnJlYWxfb2lkLmhhc2gsICZmcmVxLT5jKTsKKwlpZiAoZnJlcS0+enJldCAhPSBaX1NUUkVBTV9FTkQpIHsKKwkJdW5saW5rX29yX3dhcm4oZnJlcS0+dG1wZmlsZS5idWYpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghb2lkZXEoJmZyZXEtPm9pZCwgJmZyZXEtPnJlYWxfb2lkKSkgeworCQl1bmxpbmtfb3Jfd2FybihmcmVxLT50bXBmaWxlLmJ1Zik7CisJCXJldHVybiAtMTsKKwl9CisJbG9vc2Vfb2JqZWN0X3BhdGgodGhlX3JlcG9zaXRvcnksICZmaWxlbmFtZSwgJmZyZXEtPm9pZCk7CisJZnJlcS0+cmVuYW1lID0gZmluYWxpemVfb2JqZWN0X2ZpbGUoZnJlcS0+dG1wZmlsZS5idWYsIGZpbGVuYW1lLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmZpbGVuYW1lKTsKKworCXJldHVybiBmcmVxLT5yZW5hbWU7Cit9CisKK3ZvaWQgYWJvcnRfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSkKK3sKKwl1bmxpbmtfb3Jfd2FybihmcmVxLT50bXBmaWxlLmJ1Zik7CisKKwlyZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3QoZnJlcSk7Cit9CisKK3ZvaWQgcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKQoreworCWlmIChmcmVxLT5sb2NhbGZpbGUgIT0gLTEpIHsKKwkJY2xvc2UoZnJlcS0+bG9jYWxmaWxlKTsKKwkJZnJlcS0+bG9jYWxmaWxlID0gLTE7CisJfQorCUZSRUVfQU5EX05VTEwoZnJlcS0+dXJsKTsKKwlpZiAoZnJlcS0+c2xvdCAhPSBOVUxMKSB7CisJCWZyZXEtPnNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBOVUxMOworCQlmcmVxLT5zbG90LT5jYWxsYmFja19kYXRhID0gTlVMTDsKKwkJcmVsZWFzZV9hY3RpdmVfc2xvdChmcmVxLT5zbG90KTsKKwkJZnJlcS0+c2xvdCA9IE5VTEw7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZmcmVxLT50bXBmaWxlKTsKK30KZGlmZiAtLWdpdCBhL2h0dHAuaCBiL2h0dHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTBhZDcyCi0tLSAvZGV2L251bGwKKysrIGIvaHR0cC5oCkBAIC0wLDAgKzEsMjU3IEBACisjaWZuZGVmIEhUVFBfSAorI2RlZmluZSBIVFRQX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlIDxjdXJsL2Vhc3kuaD4KKworI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInVybC5oIgorCisvKgorICogV2UgZGV0ZWN0IGJhc2VkIG9uIHRoZSBjVVJMIHZlcnNpb24gaWYgbXVsdGktdHJhbnNmZXIgaXMKKyAqIHVzYWJsZSBpbiB0aGlzIGltcGxlbWVudGF0aW9uIGFuZCBkZWZpbmUgdGhpcyBzeW1ib2wgYWNjb3JkaW5nbHkuCisgKiBUaGlzIHNob3VsZG4ndCBiZSBzZXQgYnkgdGhlIE1ha2VmaWxlIG9yIGJ5IHRoZSB1c2VyIChlLmcuIHZpYSBDRkxBR1MpLgorICovCisjdW5kZWYgVVNFX0NVUkxfTVVMVEkKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzEwMDAKKyNkZWZpbmUgVVNFX0NVUkxfTVVMVEkKKyNkZWZpbmUgREVGQVVMVF9NQVhfUkVRVUVTVFMgNQorI2VuZGlmCisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNIDwgMHgwNzA3MDQKKyNkZWZpbmUgY3VybF9nbG9iYWxfY2xlYW51cCgpIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNIDwgMHgwNzA4MDAKKyNkZWZpbmUgY3VybF9nbG9iYWxfaW5pdChhKSBkbyB7IC8qIG5vdGhpbmcgKi8gfSB3aGlsZSAoMCkKKyNlbGlmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzBjMDAKKyNkZWZpbmUgY3VybF9nbG9iYWxfaW5pdChhKSBjdXJsX2dsb2JhbF9pbml0X21lbShhLCB4bWFsbG9jLCBmcmVlLCBcCisJCQkJCQl4cmVhbGxvYywgeHN0cmR1cCwgeGNhbGxvYykKKyNlbmRpZgorCisjaWYgKExJQkNVUkxfVkVSU0lPTl9OVU0gPCAweDA3MGMwNCkgfHwgKExJQkNVUkxfVkVSU0lPTl9OVU0gPT0gMHgwNzEwMDApCisjZGVmaW5lIE5PX0NVUkxfRUFTWV9EVVBIQU5ETEUKKyNlbmRpZgorCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA8IDB4MDcwYTAzCisjZGVmaW5lIENVUkxFX0hUVFBfUkVUVVJORURfRVJST1IgQ1VSTEVfSFRUUF9OT1RfRk9VTkQKKyNlbmRpZgorCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA8IDB4MDcwYzAzCisjZGVmaW5lIE5PX0NVUkxfSU9DVEwKKyNlbmRpZgorCisvKgorICogQ1VSTE9QVF9VU0VfU1NMIHdhcyBrbm93biBhcyBDVVJMT1BUX0ZUUF9TU0wgdXAgdG8gNy4xNi40LAorICogYW5kIHRoZSBjb25zdGFudHMgd2VyZSBrbm93biBhcyBDVVJMRlRQU1NMXyoKKyovCisjaWYgIWRlZmluZWQoQ1VSTE9QVF9VU0VfU1NMKSAmJiBkZWZpbmVkKENVUkxPUFRfRlRQX1NTTCkKKyNkZWZpbmUgQ1VSTE9QVF9VU0VfU1NMIENVUkxPUFRfRlRQX1NTTAorI2RlZmluZSBDVVJMVVNFU1NMX1RSWSBDVVJMRlRQU1NMX1RSWQorI2VuZGlmCisKK3N0cnVjdCBzbG90X3Jlc3VsdHMgeworCUNVUkxjb2RlIGN1cmxfcmVzdWx0OworCWxvbmcgaHR0cF9jb2RlOworCWxvbmcgYXV0aF9hdmFpbDsKKwlsb25nIGh0dHBfY29ubmVjdGNvZGU7Cit9OworCitzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCB7CisJQ1VSTCAqY3VybDsKKwlpbnQgaW5fdXNlOworCUNVUkxjb2RlIGN1cmxfcmVzdWx0OworCWxvbmcgaHR0cF9jb2RlOworCWludCAqZmluaXNoZWQ7CisJc3RydWN0IHNsb3RfcmVzdWx0cyAqcmVzdWx0czsKKwl2b2lkICpjYWxsYmFja19kYXRhOworCXZvaWQgKCpjYWxsYmFja19mdW5jKSh2b2lkICpkYXRhKTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqbmV4dDsKK307CisKK3N0cnVjdCBidWZmZXIgeworCXN0cnVjdCBzdHJidWYgYnVmOworCXNpemVfdCBwb3NuOworfTsKKworLyogQ3VybCByZXF1ZXN0IHJlYWQvd3JpdGUgY2FsbGJhY2tzICovCitzaXplX3QgZnJlYWRfYnVmZmVyKGNoYXIgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyYnVmKTsKK3NpemVfdCBmd3JpdGVfYnVmZmVyKGNoYXIgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyYnVmKTsKK3NpemVfdCBmd3JpdGVfbnVsbChjaGFyICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnN0cmJ1Zik7CisjaWZuZGVmIE5PX0NVUkxfSU9DVEwKK2N1cmxpb2VyciBpb2N0bF9idWZmZXIoQ1VSTCAqaGFuZGxlLCBpbnQgY21kLCB2b2lkICpjbGllbnRwKTsKKyNlbmRpZgorCisvKiBTbG90IGxpZmVjeWNsZSBmdW5jdGlvbnMgKi8KK3N0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpnZXRfYWN0aXZlX3Nsb3Qodm9pZCk7CitpbnQgc3RhcnRfYWN0aXZlX3Nsb3Qoc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QpOwordm9pZCBydW5fYWN0aXZlX3Nsb3Qoc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QpOwordm9pZCBmaW5pc2hfYWxsX2FjdGl2ZV9zbG90cyh2b2lkKTsKKworLyoKKyAqIFRoaXMgd2lsbCBydW4gb25lIHNsb3QgdG8gY29tcGxldGlvbiBpbiBhIGJsb2NraW5nIG1hbm5lciwgc2ltaWxhciB0byBob3cKKyAqIGN1cmxfZWFzeV9wZXJmb3JtIHdvdWxkIHdvcmsgKGJ1dCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGF0LCBiZWNhdXNlCisgKiB3ZSBkbyBub3Qgd2FudCB0byBpbnRlcm1pbmdsZSBjYWxscyB0byBjdXJsX211bHRpIGFuZCBjdXJsX2Vhc3kpLgorICoKKyAqLworaW50IHJ1bl9vbmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCwKKwkJIHN0cnVjdCBzbG90X3Jlc3VsdHMgKnJlc3VsdHMpOworCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKK3ZvaWQgZmlsbF9hY3RpdmVfc2xvdHModm9pZCk7Cit2b2lkIGFkZF9maWxsX2Z1bmN0aW9uKHZvaWQgKmRhdGEsIGludCAoKmZpbGwpKHZvaWQgKikpOwordm9pZCBzdGVwX2FjdGl2ZV9zbG90cyh2b2lkKTsKKyNlbmRpZgorCit2b2lkIGh0dHBfaW5pdChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnVybCwKKwkgICAgICAgaW50IHByb2FjdGl2ZV9hdXRoKTsKK3ZvaWQgaHR0cF9jbGVhbnVwKHZvaWQpOworc3RydWN0IGN1cmxfc2xpc3QgKmh0dHBfY29weV9kZWZhdWx0X2hlYWRlcnModm9pZCk7CisKK2V4dGVybiBsb25nIGludCBnaXRfY3VybF9pcHJlc29sdmU7CitleHRlcm4gaW50IGFjdGl2ZV9yZXF1ZXN0czsKK2V4dGVybiBpbnQgaHR0cF9pc192ZXJib3NlOworZXh0ZXJuIHNzaXplX3QgaHR0cF9wb3N0X2J1ZmZlcjsKK2V4dGVybiBzdHJ1Y3QgY3JlZGVudGlhbCBodHRwX2F1dGg7CisKK2V4dGVybiBjaGFyIGN1cmxfZXJyb3JzdHJbQ1VSTF9FUlJPUl9TSVpFXTsKKworZW51bSBodHRwX2ZvbGxvd19jb25maWcgeworCUhUVFBfRk9MTE9XX05PTkUsCisJSFRUUF9GT0xMT1dfQUxXQVlTLAorCUhUVFBfRk9MTE9XX0lOSVRJQUwKK307CitleHRlcm4gZW51bSBodHRwX2ZvbGxvd19jb25maWcgaHR0cF9mb2xsb3dfY29uZmlnOworCitzdGF0aWMgaW5saW5lIGludCBtaXNzaW5nX190YXJnZXQoaW50IGNvZGUsIGludCByZXN1bHQpCit7CisJcmV0dXJuCS8qIGZpbGU6Ly8gVVJMIC0tIGRvIHdlIGV2ZXIgdXNlIG9uZT8/PyAqLworCQkocmVzdWx0ID09IENVUkxFX0ZJTEVfQ09VTEROVF9SRUFEX0ZJTEUpIHx8CisJCS8qIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIFVSTCAqLworCQkoY29kZSA9PSA0MDQgJiYgcmVzdWx0ID09IENVUkxFX0hUVFBfUkVUVVJORURfRVJST1IpIHx8CisJCS8qIGZ0cDovLyBVUkwgKi8KKwkJKGNvZGUgPT0gNTUwICYmIHJlc3VsdCA9PSBDVVJMRV9GVFBfQ09VTEROVF9SRVRSX0ZJTEUpCisJCTsKK30KKworI2RlZmluZSBtaXNzaW5nX3RhcmdldChhKSBtaXNzaW5nX190YXJnZXQoKGEpLT5odHRwX2NvZGUsIChhKS0+Y3VybF9yZXN1bHQpCisKKy8qCisgKiBOb3JtYWxpemUgY3VybCByZXN1bHRzIHRvIGhhbmRsZSBDVVJMX0ZBSUxPTkVSUk9SIChvciBsYWNrIHRoZXJlb2YpLiBGYWlsaW5nCisgKiBodHRwIGNvZGVzIGhhdmUgdGhlaXIgInJlc3VsdCIgY29udmVydGVkIHRvIENVUkxFX0hUVFBfUkVUVVJORURfRVJST1IsIGFuZAorICogYW4gYXBwcm9wcmlhdGUgc3RyaW5nIHBsYWNlZCBpbiB0aGUgZXJyb3JzdHIgYnVmZmVyIChwYXNzIGN1cmxfZXJyb3JzdHIgaWYKKyAqIHlvdSBkb24ndCBoYXZlIGEgY3VzdG9tIGJ1ZmZlcikuCisgKi8KK3ZvaWQgbm9ybWFsaXplX2N1cmxfcmVzdWx0KENVUkxjb2RlICpyZXN1bHQsIGxvbmcgaHR0cF9jb2RlLCBjaGFyICplcnJvcnN0ciwKKwkJCSAgIHNpemVfdCBlcnJvcmxlbik7CisKKy8qIEhlbHBlcnMgZm9yIG1vZGlmeWluZyBhbmQgY3JlYXRpbmcgVVJMcyAqLwordm9pZCBhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICp1cmwsCisJCQkgICAgICBjb25zdCBjaGFyICpoZXgsCisJCQkgICAgICBpbnQgb25seV90d29fZGlnaXRfcHJlZml4KTsKK2NoYXIgKmdldF9yZW1vdGVfb2JqZWN0X3VybChjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmhleCwKKwkJCSAgICBpbnQgb25seV90d29fZGlnaXRfcHJlZml4KTsKKworLyogT3B0aW9ucyBmb3IgaHR0cF9nZXRfKigpICovCitzdHJ1Y3QgaHR0cF9nZXRfb3B0aW9ucyB7CisJdW5zaWduZWQgbm9fY2FjaGU6MSwKKwkJIGluaXRpYWxfcmVxdWVzdDoxOworCisJLyogSWYgbm9uLU5VTEwsIHJldHVybnMgdGhlIGNvbnRlbnQtdHlwZSBvZiB0aGUgcmVzcG9uc2UuICovCisJc3RydWN0IHN0cmJ1ZiAqY29udGVudF90eXBlOworCisJLyoKKwkgKiBJZiBub24tTlVMTCwgYW5kIGNvbnRlbnRfdHlwZSBhYm92ZSBpcyBub24tTlVMTCwgcmV0dXJucworCSAqIHRoZSBjaGFyc2V0IHBhcmFtZXRlciBmcm9tIHRoZSBjb250ZW50LXR5cGUuIElmIG5vbmUgaXMKKwkgKiBwcmVzZW50LCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKwkgKi8KKwlzdHJ1Y3Qgc3RyYnVmICpjaGFyc2V0OworCisJLyoKKwkgKiBJZiBub24tTlVMTCwgcmV0dXJucyB0aGUgVVJMIHdlIGVuZGVkIHVwIGF0LCBpbmNsdWRpbmcgYW55CisJICogcmVkaXJlY3RzIHdlIGZvbGxvd2VkLgorCSAqLworCXN0cnVjdCBzdHJidWYgKmVmZmVjdGl2ZV91cmw7CisKKwkvKgorCSAqIElmIGJvdGggYmFzZV91cmwgYW5kIGVmZmVjdGl2ZV91cmwgYXJlIG5vbi1OVUxMLCB0aGUgYmFzZSBVUkwgd2lsbAorCSAqIGJlIG11bmdlZCB0byByZWZsZWN0IGFueSByZWRpcmVjdGlvbnMgZ29pbmcgZnJvbSB0aGUgcmVxdWVzdGVkIHVybAorCSAqIHRvIGVmZmVjdGl2ZV91cmwuIFNlZSB0aGUgZGVmaW5pdGlvbiBvZiB1cGRhdGVfdXJsX2Zyb21fcmVkaXJlY3QKKwkgKiBmb3IgZGV0YWlscy4KKwkgKi8KKwlzdHJ1Y3Qgc3RyYnVmICpiYXNlX3VybDsKKworCS8qCisJICogSWYgbm90IE5VTEwsIGNvbnRhaW5zIGFkZGl0aW9uYWwgSFRUUCBoZWFkZXJzIHRvIGJlIHNlbnQgd2l0aCB0aGUKKwkgKiByZXF1ZXN0LiBUaGUgc3RyaW5ncyBpbiB0aGUgbGlzdCBtdXN0IG5vdCBiZSBmcmVlZCB1bnRpbCBhZnRlciB0aGUKKwkgKiByZXF1ZXN0IGhhcyBjb21wbGV0ZWQuCisJICovCisJc3RydWN0IHN0cmluZ19saXN0ICpleHRyYV9oZWFkZXJzOworfTsKKworLyogUmV0dXJuIHZhbHVlcyBmb3IgaHR0cF9nZXRfKigpICovCisjZGVmaW5lIEhUVFBfT0sJCQkwCisjZGVmaW5lIEhUVFBfTUlTU0lOR19UQVJHRVQJMQorI2RlZmluZSBIVFRQX0VSUk9SCQkyCisjZGVmaW5lIEhUVFBfU1RBUlRfRkFJTEVECTMKKyNkZWZpbmUgSFRUUF9SRUFVVEgJNAorI2RlZmluZSBIVFRQX05PQVVUSAk1CisKKy8qCisgKiBSZXF1ZXN0cyBhIFVSTCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gYSBzdHJidWYuCisgKgorICogSWYgdGhlIHJlc3VsdCBwb2ludGVyIGlzIE5VTEwsIGEgSFRUUCBIRUFEIHJlcXVlc3QgaXMgbWFkZSBpbnN0ZWFkIG9mIEdFVC4KKyAqLworaW50IGh0dHBfZ2V0X3N0cmJ1Zihjb25zdCBjaGFyICp1cmwsIHN0cnVjdCBzdHJidWYgKnJlc3VsdCwgc3RydWN0IGh0dHBfZ2V0X29wdGlvbnMgKm9wdGlvbnMpOworCitpbnQgaHR0cF9mZXRjaF9yZWYoY29uc3QgY2hhciAqYmFzZSwgc3RydWN0IHJlZiAqcmVmKTsKKworLyogSGVscGVycyBmb3IgZmV0Y2hpbmcgcGFja3MgKi8KK2ludCBodHRwX2dldF9pbmZvX3BhY2tzKGNvbnN0IGNoYXIgKmJhc2VfdXJsLAorCQkJc3RydWN0IHBhY2tlZF9naXQgKipwYWNrc19oZWFkKTsKKworc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0IHsKKwljaGFyICp1cmw7CisJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqKmxzdDsKKwlGSUxFICpwYWNrZmlsZTsKKwlzdHJ1Y3Qgc3RyYnVmIHRtcGZpbGU7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7Cit9OworCitzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKm5ld19odHRwX3BhY2tfcmVxdWVzdCgKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0LCBjb25zdCBjaGFyICpiYXNlX3VybCk7CitpbnQgZmluaXNoX2h0dHBfcGFja19yZXF1ZXN0KHN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqcHJlcSk7Cit2b2lkIHJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3Qoc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxKTsKKworLyogSGVscGVycyBmb3IgZmV0Y2hpbmcgb2JqZWN0ICovCitzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCB7CisJY2hhciAqdXJsOworCXN0cnVjdCBzdHJidWYgdG1wZmlsZTsKKwlpbnQgbG9jYWxmaWxlOworCUNVUkxjb2RlIGN1cmxfcmVzdWx0OworCWNoYXIgZXJyb3JzdHJbQ1VSTF9FUlJPUl9TSVpFXTsKKwlsb25nIGh0dHBfY29kZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHJlYWxfb2lkOworCWdpdF9oYXNoX2N0eCBjOworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwlpbnQgenJldDsKKwlpbnQgcmVuYW1lOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworfTsKKworc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKm5ld19odHRwX29iamVjdF9yZXF1ZXN0KAorCWNvbnN0IGNoYXIgKmJhc2VfdXJsLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOwordm9pZCBwcm9jZXNzX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpOworaW50IGZpbmlzaF9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKTsKK3ZvaWQgYWJvcnRfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSk7Cit2b2lkIHJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSk7CisKKy8qIHNldHVwIHJvdXRpbmUgZm9yIGN1cmxfZWFzeV9zZXRvcHQgQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OICovCit2b2lkIHNldHVwX2N1cmxfdHJhY2UoQ1VSTCAqaGFuZGxlKTsKKyNlbmRpZiAvKiBIVFRQX0ggKi8KZGlmZiAtLWdpdCBhL2lkZW50LmMgYi9pZGVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NjZlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9pZGVudC5jCkBAIC0wLDAgKzEsNjM1IEBACisvKgorICogaWRlbnQuYworICoKKyAqIGNyZWF0ZSBnaXQgaWRlbnRpZmllciBsaW5lcyBvZiB0aGUgZm9ybSAibmFtZSA8ZW1haWw+IGRhdGUiCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IExpbnVzIFRvcnZhbGRzCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBnaXRfZGVmYXVsdF9uYW1lID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBnaXRfZGVmYXVsdF9lbWFpbCA9IFNUUkJVRl9JTklUOworc3RhdGljIHN0cnVjdCBzdHJidWYgZ2l0X2RlZmF1bHRfZGF0ZSA9IFNUUkJVRl9JTklUOworc3RhdGljIHN0cnVjdCBzdHJidWYgZ2l0X2F1dGhvcl9uYW1lID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBnaXRfYXV0aG9yX2VtYWlsID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBnaXRfY29tbWl0dGVyX25hbWUgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGdpdF9jb21taXR0ZXJfZW1haWwgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBpbnQgZGVmYXVsdF9lbWFpbF9pc19ib2d1czsKK3N0YXRpYyBpbnQgZGVmYXVsdF9uYW1lX2lzX2JvZ3VzOworCitzdGF0aWMgaW50IGlkZW50X3VzZV9jb25maWdfb25seTsKKworI2RlZmluZSBJREVOVF9OQU1FX0dJVkVOIDAxCisjZGVmaW5lIElERU5UX01BSUxfR0lWRU4gMDIKKyNkZWZpbmUgSURFTlRfQUxMX0dJVkVOIChJREVOVF9OQU1FX0dJVkVOfElERU5UX01BSUxfR0lWRU4pCitzdGF0aWMgaW50IGNvbW1pdHRlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuOworc3RhdGljIGludCBhdXRob3JfaWRlbnRfZXhwbGljaXRseV9naXZlbjsKK3N0YXRpYyBpbnQgaWRlbnRfY29uZmlnX2dpdmVuOworCisjaWZkZWYgTk9fR0VDT1NfSU5fUFdFTlQKKyNkZWZpbmUgZ2V0X2dlY29zKGlnbm9yZWQpICImIgorI2Vsc2UKKyNkZWZpbmUgZ2V0X2dlY29zKHN0cnVjdF9wYXNzd2QpICgoc3RydWN0X3Bhc3N3ZCktPnB3X2dlY29zKQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGFzc3dkICp4Z2V0cHd1aWRfc2VsZihpbnQgKmlzX2JvZ3VzKQoreworCXN0cnVjdCBwYXNzd2QgKnB3OworCisJZXJybm8gPSAwOworCXB3ID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOworCWlmICghcHcpIHsKKwkJc3RhdGljIHN0cnVjdCBwYXNzd2QgZmFsbGJhY2s7CisJCWZhbGxiYWNrLnB3X25hbWUgPSAidW5rbm93biI7CisjaWZuZGVmIE5PX0dFQ09TX0lOX1BXRU5UCisJCWZhbGxiYWNrLnB3X2dlY29zID0gIlVua25vd24iOworI2VuZGlmCisJCXB3ID0gJmZhbGxiYWNrOworCQlpZiAoaXNfYm9ndXMpCisJCQkqaXNfYm9ndXMgPSAxOworCX0KKwlyZXR1cm4gcHc7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfZ2Vjb3MoY29uc3Qgc3RydWN0IHBhc3N3ZCAqdywgc3RydWN0IHN0cmJ1ZiAqbmFtZSkKK3sKKwljaGFyICpzcmM7CisKKwkvKiBUcmFkaXRpb25hbGx5IEdFQ09TIGZpZWxkIGhhZCBvZmZpY2UgcGhvbmUgbnVtYmVycyBldGMsIHNlcGFyYXRlZAorCSAqIHdpdGggY29tbWFzLiAgQWxzbyAmIHN0YW5kcyBmb3IgY2FwaXRhbGl6ZWQgZm9ybSBvZiB0aGUgbG9naW4gbmFtZS4KKwkgKi8KKworCWZvciAoc3JjID0gZ2V0X2dlY29zKHcpOyAqc3JjICYmICpzcmMgIT0gJywnOyBzcmMrKykgeworCQlpbnQgY2ggPSAqc3JjOworCQlpZiAoY2ggIT0gJyYnKQorCQkJc3RyYnVmX2FkZGNoKG5hbWUsIGNoKTsKKwkJZWxzZSB7CisJCQkvKiBTb3JyeSwgTXIuIE1jRG9uYWxkLi4uICovCisJCQlzdHJidWZfYWRkY2gobmFtZSwgdG91cHBlcigqdy0+cHdfbmFtZSkpOworCQkJc3RyYnVmX2FkZHN0cihuYW1lLCB3LT5wd19uYW1lICsgMSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgYWRkX21haWxuYW1lX2hvc3Qoc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCUZJTEUgKm1haWxuYW1lOworCXN0cnVjdCBzdHJidWYgbWFpbG5hbWVidWYgPSBTVFJCVUZfSU5JVDsKKworCW1haWxuYW1lID0gZm9wZW5fb3Jfd2FybigiL2V0Yy9tYWlsbmFtZSIsICJyIik7CisJaWYgKCFtYWlsbmFtZSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZtYWlsbmFtZWJ1ZiwgbWFpbG5hbWUpID09IEVPRikgeworCQlpZiAoZmVycm9yKG1haWxuYW1lKSkKKwkJCXdhcm5pbmdfZXJybm8oImNhbm5vdCByZWFkIC9ldGMvbWFpbG5hbWUiKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm1haWxuYW1lYnVmKTsKKwkJZmNsb3NlKG1haWxuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBzdWNjZXNzISAqLworCXN0cmJ1Zl9hZGRidWYoYnVmLCAmbWFpbG5hbWVidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZtYWlsbmFtZWJ1Zik7CisJZmNsb3NlKG1haWxuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYW5vbmljYWxfbmFtZShjb25zdCBjaGFyICpob3N0LCBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJaW50IHN0YXR1cyA9IC0xOworCisjaWZuZGVmIE5PX0lQVjYKKwlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTsKKwltZW1zZXQgKCZoaW50cywgJ1wwJywgc2l6ZW9mIChoaW50cykpOworCWhpbnRzLmFpX2ZsYWdzID0gQUlfQ0FOT05OQU1FOworCWlmICghZ2V0YWRkcmluZm8oaG9zdCwgTlVMTCwgJmhpbnRzLCAmYWkpKSB7CisJCWlmIChhaSAmJiBhaS0+YWlfY2Fub25uYW1lICYmIHN0cmNocihhaS0+YWlfY2Fub25uYW1lLCAnLicpKSB7CisJCQlzdHJidWZfYWRkc3RyKG91dCwgYWktPmFpX2Nhbm9ubmFtZSk7CisJCQlzdGF0dXMgPSAwOworCQl9CisJCWZyZWVhZGRyaW5mbyhhaSk7CisJfQorI2Vsc2UKKwlzdHJ1Y3QgaG9zdGVudCAqaGUgPSBnZXRob3N0YnluYW1lKGhvc3QpOworCWlmIChoZSAmJiBzdHJjaHIoaGUtPmhfbmFtZSwgJy4nKSkgeworCQlzdHJidWZfYWRkc3RyKG91dCwgaGUtPmhfbmFtZSk7CisJCXN0YXR1cyA9IDA7CisJfQorI2VuZGlmIC8qIE5PX0lQVjYgKi8KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9kb21haW5uYW1lKHN0cnVjdCBzdHJidWYgKm91dCwgaW50ICppc19ib2d1cykKK3sKKwljaGFyIGJ1ZltIT1NUX05BTUVfTUFYICsgMV07CisKKwlpZiAoeGdldGhvc3RuYW1lKGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7CisJCXdhcm5pbmdfZXJybm8oImNhbm5vdCBnZXQgaG9zdCBuYW1lIik7CisJCXN0cmJ1Zl9hZGRzdHIob3V0LCAiKG5vbmUpIik7CisJCSppc19ib2d1cyA9IDE7CisJCXJldHVybjsKKwl9CisJaWYgKHN0cmNocihidWYsICcuJykpCisJCXN0cmJ1Zl9hZGRzdHIob3V0LCBidWYpOworCWVsc2UgaWYgKGNhbm9uaWNhbF9uYW1lKGJ1Ziwgb3V0KSA8IDApIHsKKwkJc3RyYnVmX2FkZGYob3V0LCAiJXMuKG5vbmUpIiwgYnVmKTsKKwkJKmlzX2JvZ3VzID0gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfZW1haWwoY29uc3Qgc3RydWN0IHBhc3N3ZCAqcHcsIHN0cnVjdCBzdHJidWYgKmVtYWlsLAorCQkgICAgICAgaW50ICppc19ib2d1cykKK3sKKwkvKgorCSAqIE1ha2UgdXAgYSBmYWtlIGVtYWlsIGFkZHJlc3MKKwkgKiAobmFtZSArICdAJyArIGhvc3RuYW1lIFsrICcuJyArIGRvbWFpbm5hbWVdKQorCSAqLworCXN0cmJ1Zl9hZGRzdHIoZW1haWwsIHB3LT5wd19uYW1lKTsKKwlzdHJidWZfYWRkY2goZW1haWwsICdAJyk7CisKKwlpZiAoIWFkZF9tYWlsbmFtZV9ob3N0KGVtYWlsKSkKKwkJcmV0dXJuOwkvKiByZWFkIGZyb20gIi9ldGMvbWFpbG5hbWUiIChEZWJpYW4pICovCisJYWRkX2RvbWFpbm5hbWUoZW1haWwsIGlzX2JvZ3VzKTsKK30KKworY29uc3QgY2hhciAqaWRlbnRfZGVmYXVsdF9uYW1lKHZvaWQpCit7CisJaWYgKCEoaWRlbnRfY29uZmlnX2dpdmVuICYgSURFTlRfTkFNRV9HSVZFTikgJiYgIWdpdF9kZWZhdWx0X25hbWUubGVuKSB7CisJCWNvcHlfZ2Vjb3MoeGdldHB3dWlkX3NlbGYoJmRlZmF1bHRfbmFtZV9pc19ib2d1cyksICZnaXRfZGVmYXVsdF9uYW1lKTsKKwkJc3RyYnVmX3RyaW0oJmdpdF9kZWZhdWx0X25hbWUpOworCX0KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfbmFtZS5idWY7Cit9CisKK2NvbnN0IGNoYXIgKmlkZW50X2RlZmF1bHRfZW1haWwodm9pZCkKK3sKKwlpZiAoIShpZGVudF9jb25maWdfZ2l2ZW4gJiBJREVOVF9NQUlMX0dJVkVOKSAmJiAhZ2l0X2RlZmF1bHRfZW1haWwubGVuKSB7CisJCWNvbnN0IGNoYXIgKmVtYWlsID0gZ2V0ZW52KCJFTUFJTCIpOworCisJCWlmIChlbWFpbCAmJiBlbWFpbFswXSkgeworCQkJc3RyYnVmX2FkZHN0cigmZ2l0X2RlZmF1bHRfZW1haWwsIGVtYWlsKTsKKwkJCWNvbW1pdHRlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuIHw9IElERU5UX01BSUxfR0lWRU47CisJCQlhdXRob3JfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9NQUlMX0dJVkVOOworCQl9IGVsc2UgaWYgKChlbWFpbCA9IHF1ZXJ5X3VzZXJfZW1haWwoKSkgJiYgZW1haWxbMF0pIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmdpdF9kZWZhdWx0X2VtYWlsLCBlbWFpbCk7CisJCQlmcmVlKChjaGFyICopZW1haWwpOworCQl9IGVsc2UKKwkJCWNvcHlfZW1haWwoeGdldHB3dWlkX3NlbGYoJmRlZmF1bHRfZW1haWxfaXNfYm9ndXMpLAorCQkJCSAgICZnaXRfZGVmYXVsdF9lbWFpbCwgJmRlZmF1bHRfZW1haWxfaXNfYm9ndXMpOworCQlzdHJidWZfdHJpbSgmZ2l0X2RlZmF1bHRfZW1haWwpOworCX0KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfZW1haWwuYnVmOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqaWRlbnRfZGVmYXVsdF9kYXRlKHZvaWQpCit7CisJaWYgKCFnaXRfZGVmYXVsdF9kYXRlLmxlbikKKwkJZGF0ZXN0YW1wKCZnaXRfZGVmYXVsdF9kYXRlKTsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfZGF0ZS5idWY7Cit9CisKK3ZvaWQgcmVzZXRfaWRlbnRfZGF0ZSh2b2lkKQoreworCXN0cmJ1Zl9yZXNldCgmZ2l0X2RlZmF1bHRfZGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgY3J1ZCh1bnNpZ25lZCBjaGFyIGMpCit7CisJcmV0dXJuICBjIDw9IDMyICB8fAorCQljID09ICcuJyB8fAorCQljID09ICcsJyB8fAorCQljID09ICc6JyB8fAorCQljID09ICc7JyB8fAorCQljID09ICc8JyB8fAorCQljID09ICc+JyB8fAorCQljID09ICciJyB8fAorCQljID09ICdcXCcgfHwKKwkJYyA9PSAnXCcnOworfQorCitzdGF0aWMgaW50IGhhc19ub25fY3J1ZChjb25zdCBjaGFyICpzdHIpCit7CisJZm9yICg7ICpzdHI7IHN0cisrKSB7CisJCWlmICghY3J1ZCgqc3RyKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvcHkgb3ZlciBhIHN0cmluZyB0byB0aGUgZGVzdGluYXRpb24sIGJ1dCBhdm9pZCBzcGVjaWFsCisgKiBjaGFyYWN0ZXJzICgnXG4nLCAnPCcgYW5kICc+JykgYW5kIHJlbW92ZSBjcnVkIGF0IHRoZSBlbmQKKyAqLworc3RhdGljIHZvaWQgc3RyYnVmX2FkZHN0cl93aXRob3V0X2NydWQoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwlzaXplX3QgaSwgbGVuOworCXVuc2lnbmVkIGNoYXIgYzsKKworCS8qIFJlbW92ZSBjcnVkIGZyb20gdGhlIGJlZ2lubmluZy4uICovCisJd2hpbGUgKChjID0gKnNyYykgIT0gMCkgeworCQlpZiAoIWNydWQoYykpCisJCQlicmVhazsKKwkJc3JjKys7CisJfQorCisJLyogUmVtb3ZlIGNydWQgZnJvbSB0aGUgZW5kLi4gKi8KKwlsZW4gPSBzdHJsZW4oc3JjKTsKKwl3aGlsZSAobGVuID4gMCkgeworCQljID0gc3JjW2xlbi0xXTsKKwkJaWYgKCFjcnVkKGMpKQorCQkJYnJlYWs7CisJCS0tbGVuOworCX0KKworCS8qCisJICogQ29weSB0aGUgcmVzdCB0byB0aGUgYnVmZmVyLCBidXQgYXZvaWQgdGhlIHNwZWNpYWwKKwkgKiBjaGFyYWN0ZXJzICdcbicgJzwnIGFuZCAnPicgdGhhdCBhY3QgYXMgZGVsaW1pdGVycyBvbgorCSAqIGFuIGlkZW50aWZpY2F0aW9uIGxpbmUuIFdlIGNhbiBvbmx5IHJlbW92ZSBjcnVkLCBuZXZlciBhZGQgaXQsCisJICogc28gJ2xlbicgaXMgb3VyIG1heGltdW0uCisJICovCisJc3RyYnVmX2dyb3coc2IsIGxlbik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWMgPSAqc3JjKys7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdcbic6IGNhc2UgJzwnOiBjYXNlICc+JzoKKwkJCWNvbnRpbnVlOworCQl9CisJCXNiLT5idWZbc2ItPmxlbisrXSA9IGM7CisJfQorCXNiLT5idWZbc2ItPmxlbl0gPSAnXDAnOworfQorCisvKgorICogUmV2ZXJzZSBvZiBmbXRfaWRlbnQoKTsgZ2l2ZW4gYW4gaWRlbnQgbGluZSwgc3BsaXQgdGhlIGZpZWxkcworICogdG8gYWxsb3cgdGhlIGNhbGxlciB0byBwYXJzZSBpdC4KKyAqIFNpZ25hbCBhIHN1Y2Nlc3MgYnkgcmV0dXJuaW5nIDAsIGJ1dCBkYXRlL3R6IGZpZWxkcyBvZiB0aGUgcmVzdWx0CisgKiBjYW4gc3RpbGwgYmUgTlVMTCBpZiB0aGUgaW5wdXQgbGluZSBvbmx5IGhhcyB0aGUgbmFtZS9lbWFpbCBwYXJ0CisgKiAoZS5nLiByZWFkaW5nIGZyb20gYSByZWZsb2cgZW50cnkpLgorICovCitpbnQgc3BsaXRfaWRlbnRfbGluZShzdHJ1Y3QgaWRlbnRfc3BsaXQgKnNwbGl0LCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWNvbnN0IGNoYXIgKmNwOworCXNpemVfdCBzcGFuOworCWludCBzdGF0dXMgPSAtMTsKKworCW1lbXNldChzcGxpdCwgMCwgc2l6ZW9mKCpzcGxpdCkpOworCisJc3BsaXQtPm5hbWVfYmVnaW4gPSBsaW5lOworCWZvciAoY3AgPSBsaW5lOyAqY3AgJiYgY3AgPCBsaW5lICsgbGVuOyBjcCsrKQorCQlpZiAoKmNwID09ICc8JykgeworCQkJc3BsaXQtPm1haWxfYmVnaW4gPSBjcCArIDE7CisJCQlicmVhazsKKwkJfQorCWlmICghc3BsaXQtPm1haWxfYmVnaW4pCisJCXJldHVybiBzdGF0dXM7CisKKwlmb3IgKGNwID0gc3BsaXQtPm1haWxfYmVnaW4gLSAyOyBsaW5lIDw9IGNwOyBjcC0tKQorCQlpZiAoIWlzc3BhY2UoKmNwKSkgeworCQkJc3BsaXQtPm5hbWVfZW5kID0gY3AgKyAxOworCQkJYnJlYWs7CisJCX0KKwlpZiAoIXNwbGl0LT5uYW1lX2VuZCkgeworCQkvKiBubyBodW1hbiByZWFkYWJsZSBuYW1lICovCisJCXNwbGl0LT5uYW1lX2VuZCA9IHNwbGl0LT5uYW1lX2JlZ2luOworCX0KKworCWZvciAoY3AgPSBzcGxpdC0+bWFpbF9iZWdpbjsgY3AgPCBsaW5lICsgbGVuOyBjcCsrKQorCQlpZiAoKmNwID09ICc+JykgeworCQkJc3BsaXQtPm1haWxfZW5kID0gY3A7CisJCQlicmVhazsKKwkJfQorCWlmICghc3BsaXQtPm1haWxfZW5kKQorCQlyZXR1cm4gc3RhdHVzOworCisJLyoKKwkgKiBMb29rIGZyb20gdGhlIGVuZC1vZi1saW5lIHRvIGZpbmQgdGhlIHRyYWlsaW5nICI+IiBvZiB0aGUgbWFpbAorCSAqIGFkZHJlc3MsIGV2ZW4gdGhvdWdoIHdlIHNob3VsZCBhbHJlYWR5IGtub3cgaXQgYXMgc3BsaXQtPm1haWxfZW5kLgorCSAqIFRoaXMgY2FuIGhlbHAgaW4gY2FzZXMgb2YgYnJva2VuIGlkZW50cyB3aXRoIGFuIGV4dHJhICI+IiBzb21ld2hlcmUKKwkgKiBpbiB0aGUgZW1haWwgYWRkcmVzcy4gIE5vdGUgdGhhdCB3ZSBhcmUgYXNzdW1pbmcgdGhlIHRpbWVzdGFtcCB3aWxsCisJICogbmV2ZXIgaGF2ZSBhICI+IiBpbiBpdC4KKwkgKgorCSAqIE5vdGUgdGhhdCB3ZSB3aWxsIGFsd2F5cyBmaW5kIHNvbWUgIj4iIGJlZm9yZSBnb2luZyBvZmYgdGhlIGZyb250IG9mCisJICogdGhlIHN0cmluZywgYmVjYXVzZSB3aWxsIGFsd2F5cyBoaXQgdGhlIHNwbGl0LT5tYWlsX2VuZCBjbG9zaW5nCisJICogYnJhY2tldC4KKwkgKi8KKwlmb3IgKGNwID0gbGluZSArIGxlbiAtIDE7ICpjcCAhPSAnPic7IGNwLS0pCisJCTsKKworCWZvciAoY3AgPSBjcCArIDE7IGNwIDwgbGluZSArIGxlbiAmJiBpc3NwYWNlKCpjcCk7IGNwKyspCisJCTsKKwlpZiAobGluZSArIGxlbiA8PSBjcCkKKwkJZ290byBwZXJzb25fb25seTsKKwlzcGxpdC0+ZGF0ZV9iZWdpbiA9IGNwOworCXNwYW4gPSBzdHJzcG4oY3AsICIwMTIzNDU2Nzg5Iik7CisJaWYgKCFzcGFuKQorCQlnb3RvIHBlcnNvbl9vbmx5OworCXNwbGl0LT5kYXRlX2VuZCA9IHNwbGl0LT5kYXRlX2JlZ2luICsgc3BhbjsKKwlmb3IgKGNwID0gc3BsaXQtPmRhdGVfZW5kOyBjcCA8IGxpbmUgKyBsZW4gJiYgaXNzcGFjZSgqY3ApOyBjcCsrKQorCQk7CisJaWYgKGxpbmUgKyBsZW4gPD0gY3AgfHwgKCpjcCAhPSAnKycgJiYgKmNwICE9ICctJykpCisJCWdvdG8gcGVyc29uX29ubHk7CisJc3BsaXQtPnR6X2JlZ2luID0gY3A7CisJc3BhbiA9IHN0cnNwbihjcCArIDEsICIwMTIzNDU2Nzg5Iik7CisJaWYgKCFzcGFuKQorCQlnb3RvIHBlcnNvbl9vbmx5OworCXNwbGl0LT50el9lbmQgPSBzcGxpdC0+dHpfYmVnaW4gKyAxICsgc3BhbjsKKwlyZXR1cm4gMDsKKworcGVyc29uX29ubHk6CisJc3BsaXQtPmRhdGVfYmVnaW4gPSBOVUxMOworCXNwbGl0LT5kYXRlX2VuZCA9IE5VTEw7CisJc3BsaXQtPnR6X2JlZ2luID0gTlVMTDsKKwlzcGxpdC0+dHpfZW5kID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmVudl9oaW50ID0KK05fKCJcbiIKKyAgICIqKiogUGxlYXNlIHRlbGwgbWUgd2hvIHlvdSBhcmUuXG4iCisgICAiXG4iCisgICAiUnVuXG4iCisgICAiXG4iCisgICAiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuIgorICAgIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorICAgIlxuIgorICAgInRvIHNldCB5b3VyIGFjY291bnRcJ3MgZGVmYXVsdCBpZGVudGl0eS5cbiIKKyAgICJPbWl0IC0tZ2xvYmFsIHRvIHNldCB0aGUgaWRlbnRpdHkgb25seSBpbiB0aGlzIHJlcG9zaXRvcnkuXG4iCisgICAiXG4iKTsKKworY29uc3QgY2hhciAqZm10X2lkZW50KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmVtYWlsLAorCQkgICAgICBlbnVtIHdhbnRfaWRlbnQgd2hvc2VfaWRlbnQsIGNvbnN0IGNoYXIgKmRhdGVfc3RyLCBpbnQgZmxhZykKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBpZGVudCA9IFNUUkJVRl9JTklUOworCWludCBzdHJpY3QgPSAoZmxhZyAmIElERU5UX1NUUklDVCk7CisJaW50IHdhbnRfZGF0ZSA9ICEoZmxhZyAmIElERU5UX05PX0RBVEUpOworCWludCB3YW50X25hbWUgPSAhKGZsYWcgJiBJREVOVF9OT19OQU1FKTsKKworCWlmICghZW1haWwpIHsKKwkJaWYgKHdob3NlX2lkZW50ID09IFdBTlRfQVVUSE9SX0lERU5UICYmIGdpdF9hdXRob3JfZW1haWwubGVuKQorCQkJZW1haWwgPSBnaXRfYXV0aG9yX2VtYWlsLmJ1ZjsKKwkJZWxzZSBpZiAod2hvc2VfaWRlbnQgPT0gV0FOVF9DT01NSVRURVJfSURFTlQgJiYgZ2l0X2NvbW1pdHRlcl9lbWFpbC5sZW4pCisJCQllbWFpbCA9IGdpdF9jb21taXR0ZXJfZW1haWwuYnVmOworCX0KKwlpZiAoIWVtYWlsKSB7CisJCWlmIChzdHJpY3QgJiYgaWRlbnRfdXNlX2NvbmZpZ19vbmx5CisJCSAgICAmJiAhKGlkZW50X2NvbmZpZ19naXZlbiAmIElERU5UX01BSUxfR0lWRU4pKSB7CisJCQlmcHV0cyhfKGVudl9oaW50KSwgc3RkZXJyKTsKKwkJCWRpZShfKCJubyBlbWFpbCB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIikpOworCQl9CisJCWVtYWlsID0gaWRlbnRfZGVmYXVsdF9lbWFpbCgpOworCQlpZiAoc3RyaWN0ICYmIGRlZmF1bHRfZW1haWxfaXNfYm9ndXMpIHsKKwkJCWZwdXRzKF8oZW52X2hpbnQpLCBzdGRlcnIpOworCQkJZGllKF8oInVuYWJsZSB0byBhdXRvLWRldGVjdCBlbWFpbCBhZGRyZXNzIChnb3QgJyVzJykiKSwgZW1haWwpOworCQl9CisJfQorCisJaWYgKHdhbnRfbmFtZSkgeworCQlpbnQgdXNpbmdfZGVmYXVsdCA9IDA7CisJCWlmICghbmFtZSkgeworCQkJaWYgKHdob3NlX2lkZW50ID09IFdBTlRfQVVUSE9SX0lERU5UICYmIGdpdF9hdXRob3JfbmFtZS5sZW4pCisJCQkJbmFtZSA9IGdpdF9hdXRob3JfbmFtZS5idWY7CisJCQllbHNlIGlmICh3aG9zZV9pZGVudCA9PSBXQU5UX0NPTU1JVFRFUl9JREVOVCAmJgorCQkJCQlnaXRfY29tbWl0dGVyX25hbWUubGVuKQorCQkJCW5hbWUgPSBnaXRfY29tbWl0dGVyX25hbWUuYnVmOworCQl9CisJCWlmICghbmFtZSkgeworCQkJaWYgKHN0cmljdCAmJiBpZGVudF91c2VfY29uZmlnX29ubHkKKwkJCSAgICAmJiAhKGlkZW50X2NvbmZpZ19naXZlbiAmIElERU5UX05BTUVfR0lWRU4pKSB7CisJCQkJZnB1dHMoXyhlbnZfaGludCksIHN0ZGVycik7CisJCQkJZGllKF8oIm5vIG5hbWUgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIpKTsKKwkJCX0KKwkJCW5hbWUgPSBpZGVudF9kZWZhdWx0X25hbWUoKTsKKwkJCXVzaW5nX2RlZmF1bHQgPSAxOworCQkJaWYgKHN0cmljdCAmJiBkZWZhdWx0X25hbWVfaXNfYm9ndXMpIHsKKwkJCQlmcHV0cyhfKGVudl9oaW50KSwgc3RkZXJyKTsKKwkJCQlkaWUoXygidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IG5hbWUgKGdvdCAnJXMnKSIpLCBuYW1lKTsKKwkJCX0KKwkJfQorCQlpZiAoISpuYW1lKSB7CisJCQlzdHJ1Y3QgcGFzc3dkICpwdzsKKwkJCWlmIChzdHJpY3QpIHsKKwkJCQlpZiAodXNpbmdfZGVmYXVsdCkKKwkJCQkJZnB1dHMoXyhlbnZfaGludCksIHN0ZGVycik7CisJCQkJZGllKF8oImVtcHR5IGlkZW50IG5hbWUgKGZvciA8JXM+KSBub3QgYWxsb3dlZCIpLCBlbWFpbCk7CisJCQl9CisJCQlwdyA9IHhnZXRwd3VpZF9zZWxmKE5VTEwpOworCQkJbmFtZSA9IHB3LT5wd19uYW1lOworCQl9CisJCWlmIChzdHJpY3QgJiYgIWhhc19ub25fY3J1ZChuYW1lKSkKKwkJCWRpZShfKCJuYW1lIGNvbnNpc3RzIG9ubHkgb2YgZGlzYWxsb3dlZCBjaGFyYWN0ZXJzOiAlcyIpLCBuYW1lKTsKKwl9CisKKwlzdHJidWZfcmVzZXQoJmlkZW50KTsKKwlpZiAod2FudF9uYW1lKSB7CisJCXN0cmJ1Zl9hZGRzdHJfd2l0aG91dF9jcnVkKCZpZGVudCwgbmFtZSk7CisJCXN0cmJ1Zl9hZGRzdHIoJmlkZW50LCAiIDwiKTsKKwl9CisJc3RyYnVmX2FkZHN0cl93aXRob3V0X2NydWQoJmlkZW50LCBlbWFpbCk7CisJaWYgKHdhbnRfbmFtZSkKKwkJCXN0cmJ1Zl9hZGRjaCgmaWRlbnQsICc+Jyk7CisJaWYgKHdhbnRfZGF0ZSkgeworCQlzdHJidWZfYWRkY2goJmlkZW50LCAnICcpOworCQlpZiAoZGF0ZV9zdHIgJiYgZGF0ZV9zdHJbMF0pIHsKKwkJCWlmIChwYXJzZV9kYXRlKGRhdGVfc3RyLCAmaWRlbnQpIDwgMCkKKwkJCQlkaWUoXygiaW52YWxpZCBkYXRlIGZvcm1hdDogJXMiKSwgZGF0ZV9zdHIpOworCQl9CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoJmlkZW50LCBpZGVudF9kZWZhdWx0X2RhdGUoKSk7CisJfQorCisJcmV0dXJuIGlkZW50LmJ1ZjsKK30KKworY29uc3QgY2hhciAqZm10X25hbWUoZW51bSB3YW50X2lkZW50IHdob3NlX2lkZW50KQoreworCWNoYXIgKm5hbWUgPSBOVUxMOworCWNoYXIgKmVtYWlsID0gTlVMTDsKKworCXN3aXRjaCAod2hvc2VfaWRlbnQpIHsKKwljYXNlIFdBTlRfQkxBTktfSURFTlQ6CisJCWJyZWFrOworCWNhc2UgV0FOVF9BVVRIT1JfSURFTlQ6CisJCW5hbWUgPSBnZXRlbnYoIkdJVF9BVVRIT1JfTkFNRSIpOworCQllbWFpbCA9IGdldGVudigiR0lUX0FVVEhPUl9FTUFJTCIpOworCQlicmVhazsKKwljYXNlIFdBTlRfQ09NTUlUVEVSX0lERU5UOgorCQluYW1lID0gZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX05BTUUiKTsKKwkJZW1haWwgPSBnZXRlbnYoIkdJVF9DT01NSVRURVJfRU1BSUwiKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBmbXRfaWRlbnQobmFtZSwgZW1haWwsIHdob3NlX2lkZW50LCBOVUxMLAorCQkJSURFTlRfU1RSSUNUIHwgSURFTlRfTk9fREFURSk7Cit9CisKK2NvbnN0IGNoYXIgKmdpdF9hdXRob3JfaW5mbyhpbnQgZmxhZykKK3sKKwlpZiAoZ2V0ZW52KCJHSVRfQVVUSE9SX05BTUUiKSkKKwkJYXV0aG9yX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTkFNRV9HSVZFTjsKKwlpZiAoZ2V0ZW52KCJHSVRfQVVUSE9SX0VNQUlMIikpCisJCWF1dGhvcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuIHw9IElERU5UX01BSUxfR0lWRU47CisJcmV0dXJuIGZtdF9pZGVudChnZXRlbnYoIkdJVF9BVVRIT1JfTkFNRSIpLAorCQkJIGdldGVudigiR0lUX0FVVEhPUl9FTUFJTCIpLAorCQkJIFdBTlRfQVVUSE9SX0lERU5ULAorCQkJIGdldGVudigiR0lUX0FVVEhPUl9EQVRFIiksCisJCQkgZmxhZyk7Cit9CisKK2NvbnN0IGNoYXIgKmdpdF9jb21taXR0ZXJfaW5mbyhpbnQgZmxhZykKK3sKKwlpZiAoZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX05BTUUiKSkKKwkJY29tbWl0dGVyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTkFNRV9HSVZFTjsKKwlpZiAoZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX0VNQUlMIikpCisJCWNvbW1pdHRlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuIHw9IElERU5UX01BSUxfR0lWRU47CisJcmV0dXJuIGZtdF9pZGVudChnZXRlbnYoIkdJVF9DT01NSVRURVJfTkFNRSIpLAorCQkJIGdldGVudigiR0lUX0NPTU1JVFRFUl9FTUFJTCIpLAorCQkJIFdBTlRfQ09NTUlUVEVSX0lERU5ULAorCQkJIGdldGVudigiR0lUX0NPTU1JVFRFUl9EQVRFIiksCisJCQkgZmxhZyk7Cit9CisKK3N0YXRpYyBpbnQgaWRlbnRfaXNfc3VmZmljaWVudChpbnQgdXNlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuKQoreworI2lmbmRlZiBXSU5ET1dTCisJcmV0dXJuICh1c2VyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gJiBJREVOVF9NQUlMX0dJVkVOKTsKKyNlbHNlCisJcmV0dXJuICh1c2VyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gPT0gSURFTlRfQUxMX0dJVkVOKTsKKyNlbmRpZgorfQorCitpbnQgY29tbWl0dGVyX2lkZW50X3N1ZmZpY2llbnRseV9naXZlbih2b2lkKQoreworCXJldHVybiBpZGVudF9pc19zdWZmaWNpZW50KGNvbW1pdHRlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuKTsKK30KKworaW50IGF1dGhvcl9pZGVudF9zdWZmaWNpZW50bHlfZ2l2ZW4odm9pZCkKK3sKKwlyZXR1cm4gaWRlbnRfaXNfc3VmZmljaWVudChhdXRob3JfaWRlbnRfZXhwbGljaXRseV9naXZlbik7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2lkZW50KGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAodmFyLCAiYXV0aG9yLm5hbWUiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXN0cmJ1Zl9yZXNldCgmZ2l0X2F1dGhvcl9uYW1lKTsKKwkJc3RyYnVmX2FkZHN0cigmZ2l0X2F1dGhvcl9uYW1lLCB2YWx1ZSk7CisJCWF1dGhvcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuIHw9IElERU5UX05BTUVfR0lWRU47CisJCWlkZW50X2NvbmZpZ19naXZlbiB8PSBJREVOVF9OQU1FX0dJVkVOOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJhdXRob3IuZW1haWwiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXN0cmJ1Zl9yZXNldCgmZ2l0X2F1dGhvcl9lbWFpbCk7CisJCXN0cmJ1Zl9hZGRzdHIoJmdpdF9hdXRob3JfZW1haWwsIHZhbHVlKTsKKwkJYXV0aG9yX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTUFJTF9HSVZFTjsKKwkJaWRlbnRfY29uZmlnX2dpdmVuIHw9IElERU5UX01BSUxfR0lWRU47CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvbW1pdHRlci5uYW1lIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlzdHJidWZfcmVzZXQoJmdpdF9jb21taXR0ZXJfbmFtZSk7CisJCXN0cmJ1Zl9hZGRzdHIoJmdpdF9jb21taXR0ZXJfbmFtZSwgdmFsdWUpOworCQljb21taXR0ZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9OQU1FX0dJVkVOOworCQlpZGVudF9jb25maWdfZ2l2ZW4gfD0gSURFTlRfTkFNRV9HSVZFTjsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29tbWl0dGVyLmVtYWlsIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlzdHJidWZfcmVzZXQoJmdpdF9jb21taXR0ZXJfZW1haWwpOworCQlzdHJidWZfYWRkc3RyKCZnaXRfY29tbWl0dGVyX2VtYWlsLCB2YWx1ZSk7CisJCWNvbW1pdHRlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuIHw9IElERU5UX01BSUxfR0lWRU47CisJCWlkZW50X2NvbmZpZ19naXZlbiB8PSBJREVOVF9NQUlMX0dJVkVOOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJ1c2VyLm5hbWUiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXN0cmJ1Zl9yZXNldCgmZ2l0X2RlZmF1bHRfbmFtZSk7CisJCXN0cmJ1Zl9hZGRzdHIoJmdpdF9kZWZhdWx0X25hbWUsIHZhbHVlKTsKKwkJY29tbWl0dGVyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTkFNRV9HSVZFTjsKKwkJYXV0aG9yX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTkFNRV9HSVZFTjsKKwkJaWRlbnRfY29uZmlnX2dpdmVuIHw9IElERU5UX05BTUVfR0lWRU47CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgInVzZXIuZW1haWwiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXN0cmJ1Zl9yZXNldCgmZ2l0X2RlZmF1bHRfZW1haWwpOworCQlzdHJidWZfYWRkc3RyKCZnaXRfZGVmYXVsdF9lbWFpbCwgdmFsdWUpOworCQljb21taXR0ZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9NQUlMX0dJVkVOOworCQlhdXRob3JfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9NQUlMX0dJVkVOOworCQlpZGVudF9jb25maWdfZ2l2ZW4gfD0gSURFTlRfTUFJTF9HSVZFTjsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfaWRlbnRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJaWYgKCFzdHJjbXAodmFyLCAidXNlci51c2Vjb25maWdvbmx5IikpIHsKKwkJaWRlbnRfdXNlX2NvbmZpZ19vbmx5ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gc2V0X2lkZW50KHZhciwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBzZXRfZW52X2lmKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIGludCAqZ2l2ZW4sIGludCBiaXQpCit7CisJaWYgKCgqZ2l2ZW4gJiBiaXQpIHx8IGdldGVudihrZXkpKQorCQlyZXR1cm47IC8qIG5vdGhpbmcgdG8gZG8gKi8KKwlzZXRlbnYoa2V5LCB2YWx1ZSwgMCk7CisJKmdpdmVuIHw9IGJpdDsKK30KKwordm9pZCBwcmVwYXJlX2ZhbGxiYWNrX2lkZW50KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmVtYWlsKQoreworCXNldF9lbnZfaWYoIkdJVF9BVVRIT1JfTkFNRSIsIG5hbWUsCisJCSAgICZhdXRob3JfaWRlbnRfZXhwbGljaXRseV9naXZlbiwgSURFTlRfTkFNRV9HSVZFTik7CisJc2V0X2Vudl9pZigiR0lUX0FVVEhPUl9FTUFJTCIsIGVtYWlsLAorCQkgICAmYXV0aG9yX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4sIElERU5UX01BSUxfR0lWRU4pOworCXNldF9lbnZfaWYoIkdJVF9DT01NSVRURVJfTkFNRSIsIG5hbWUsCisJCSAgICZjb21taXR0ZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiwgSURFTlRfTkFNRV9HSVZFTik7CisJc2V0X2Vudl9pZigiR0lUX0NPTU1JVFRFUl9FTUFJTCIsIGVtYWlsLAorCQkgICAmY29tbWl0dGVyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4sIElERU5UX01BSUxfR0lWRU4pOworfQorCitzdGF0aWMgaW50IGJ1Zl9jbXAoY29uc3QgY2hhciAqYV9iZWdpbiwgY29uc3QgY2hhciAqYV9lbmQsCisJCSAgIGNvbnN0IGNoYXIgKmJfYmVnaW4sIGNvbnN0IGNoYXIgKmJfZW5kKQoreworCWludCBhX2xlbiA9IGFfZW5kIC0gYV9iZWdpbjsKKwlpbnQgYl9sZW4gPSBiX2VuZCAtIGJfYmVnaW47CisJaW50IG1pbiA9IGFfbGVuIDwgYl9sZW4gPyBhX2xlbiA6IGJfbGVuOworCWludCBjbXA7CisKKwljbXAgPSBtZW1jbXAoYV9iZWdpbiwgYl9iZWdpbiwgbWluKTsKKwlpZiAoY21wKQorCQlyZXR1cm4gY21wOworCisJcmV0dXJuIGFfbGVuIC0gYl9sZW47Cit9CisKK2ludCBpZGVudF9jbXAoY29uc3Qgc3RydWN0IGlkZW50X3NwbGl0ICphLAorCSAgICAgIGNvbnN0IHN0cnVjdCBpZGVudF9zcGxpdCAqYikKK3sKKwlpbnQgY21wOworCisJY21wID0gYnVmX2NtcChhLT5tYWlsX2JlZ2luLCBhLT5tYWlsX2VuZCwKKwkJICAgICAgYi0+bWFpbF9iZWdpbiwgYi0+bWFpbF9lbmQpOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisKKwlyZXR1cm4gYnVmX2NtcChhLT5uYW1lX2JlZ2luLCBhLT5uYW1lX2VuZCwKKwkJICAgICAgIGItPm5hbWVfYmVnaW4sIGItPm5hbWVfZW5kKTsKK30KZGlmZiAtLWdpdCBhL2ltYXAtc2VuZC5jIGIvaW1hcC1zZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1NGQ4YwotLS0gL2Rldi9udWxsCisrKyBiL2ltYXAtc2VuZC5jCkBAIC0wLDAgKzEsMTYwNCBAQAorLyoKKyAqIGdpdC1pbWFwLXNlbmQgLSBkcm9wcyBwYXRjaGVzIGludG8gYW4gaW1hcCBEcmFmdHMgZm9sZGVyCisgKiAgICAgICAgICAgICAgICAgZGVyaXZlZCBmcm9tIGlzeW5jL21ic3luYyAtIG1haWxib3ggc3luY2hyb25pemVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgTWljaGFlbCBSLiBFbGtpbnMgPG1lQG11dHQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgT3N3YWxkIEJ1ZGRlbmhhZ2VuIDxvc3NpQHVzZXJzLnNmLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pa2UgTWNDb3JtYWNrCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjcmVkZW50aWFsLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpZmRlZiBOT19PUEVOU1NMCit0eXBlZGVmIHZvaWQgKlNTTDsKKyNlbmRpZgorI2lmZGVmIFVTRV9DVVJMX0ZPUl9JTUFQX1NFTkQKKyNpbmNsdWRlICJodHRwLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoVVNFX0NVUkxfRk9SX0lNQVBfU0VORCkKKy8qIEFsd2F5cyBkZWZhdWx0IHRvIGN1cmwgaWYgaXQncyBhdmFpbGFibGUuICovCisjZGVmaW5lIFVTRV9DVVJMX0RFRkFVTFQgMQorI2Vsc2UKKy8qIFdlIGRvbid0IGhhdmUgY3VybCwgc28gY29udGludWUgdG8gdXNlIHRoZSBoaXN0b3JpY2FsIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIFVTRV9DVVJMX0RFRkFVTFQgMAorI2VuZGlmCisKK3N0YXRpYyBpbnQgdmVyYm9zaXR5Oworc3RhdGljIGludCB1c2VfY3VybCA9IFVTRV9DVVJMX0RFRkFVTFQ7CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaW1hcF9zZW5kX3VzYWdlW10gPSB7ICJnaXQgaW1hcC1zZW5kIFstdl0gWy1xXSBbLS1bbm8tXWN1cmxdIDwgPG1ib3g+IiwgTlVMTCB9OworCitzdGF0aWMgc3RydWN0IG9wdGlvbiBpbWFwX3NlbmRfb3B0aW9uc1tdID0geworCU9QVF9fVkVSQk9TSVRZKCZ2ZXJib3NpdHkpLAorCU9QVF9CT09MKDAsICJjdXJsIiwgJnVzZV9jdXJsLCAidXNlIGxpYmN1cmwgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgSU1BUCBzZXJ2ZXIiKSwKKwlPUFRfRU5EKCkKK307CisKKyN1bmRlZiBEUlZfT0sKKyNkZWZpbmUgRFJWX09LICAgICAgICAgIDAKKyNkZWZpbmUgRFJWX01TR19CQUQgICAgIC0xCisjZGVmaW5lIERSVl9CT1hfQkFEICAgICAtMgorI2RlZmluZSBEUlZfU1RPUkVfQkFEICAgLTMKKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK3N0YXRpYyB2b2lkIGltYXBfaW5mbyhjb25zdCBjaGFyICosIC4uLik7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorc3RhdGljIHZvaWQgaW1hcF93YXJuKGNvbnN0IGNoYXIgKiwgLi4uKTsKKworc3RhdGljIGNoYXIgKm5leHRfYXJnKGNoYXIgKiopOworCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQorc3RhdGljIGludCBuZnNucHJpbnRmKGNoYXIgKmJ1ZiwgaW50IGJsZW4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworc3RhdGljIGludCBuZnZhc3ByaW50ZihjaGFyICoqc3RycCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCWludCBsZW47CisJY2hhciB0bXBbODE5Ml07CisKKwlsZW4gPSB2c25wcmludGYodG1wLCBzaXplb2YodG1wKSwgZm10LCBhcCk7CisJaWYgKGxlbiA8IDApCisJCWRpZSgiRmF0YWw6IE91dCBvZiBtZW1vcnkiKTsKKwlpZiAobGVuID49IHNpemVvZih0bXApKQorCQlkaWUoImltYXAgY29tbWFuZCBvdmVyZmxvdyEiKTsKKwkqc3RycCA9IHhtZW1kdXB6KHRtcCwgbGVuKTsKKwlyZXR1cm4gbGVuOworfQorCitzdHJ1Y3QgaW1hcF9zZXJ2ZXJfY29uZiB7CisJY2hhciAqbmFtZTsKKwljaGFyICp0dW5uZWw7CisJY2hhciAqaG9zdDsKKwlpbnQgcG9ydDsKKwljaGFyICpmb2xkZXI7CisJY2hhciAqdXNlcjsKKwljaGFyICpwYXNzOworCWludCB1c2Vfc3NsOworCWludCBzc2xfdmVyaWZ5OworCWludCB1c2VfaHRtbDsKKwljaGFyICphdXRoX21ldGhvZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW1hcF9zZXJ2ZXJfY29uZiBzZXJ2ZXIgPSB7CisJTlVMTCwJLyogbmFtZSAqLworCU5VTEwsCS8qIHR1bm5lbCAqLworCU5VTEwsCS8qIGhvc3QgKi8KKwkwLAkvKiBwb3J0ICovCisJTlVMTCwJLyogZm9sZGVyICovCisJTlVMTCwJLyogdXNlciAqLworCU5VTEwsCS8qIHBhc3MgKi8KKwkwLCAgIAkvKiB1c2Vfc3NsICovCisJMSwgICAJLyogc3NsX3ZlcmlmeSAqLworCTAsICAgCS8qIHVzZV9odG1sICovCisJTlVMTCwJLyogYXV0aF9tZXRob2QgKi8KK307CisKK3N0cnVjdCBpbWFwX3NvY2tldCB7CisJaW50IGZkWzJdOworCVNTTCAqc3NsOworfTsKKworc3RydWN0IGltYXBfYnVmZmVyIHsKKwlzdHJ1Y3QgaW1hcF9zb2NrZXQgc29jazsKKwlpbnQgYnl0ZXM7CisJaW50IG9mZnNldDsKKwljaGFyIGJ1ZlsxMDI0XTsKK307CisKK3N0cnVjdCBpbWFwX2NtZDsKKworc3RydWN0IGltYXAgeworCWludCB1aWRuZXh0OyAvKiBmcm9tIFNFTEVDVCByZXNwb25zZXMgKi8KKwl1bnNpZ25lZCBjYXBzLCByY2FwczsgLyogQ0FQQUJJTElUWSByZXN1bHRzICovCisJLyogY29tbWFuZCBxdWV1ZSAqLworCWludCBuZXh0dGFnLCBudW1faW5fcHJvZ3Jlc3MsIGxpdGVyYWxfcGVuZGluZzsKKwlzdHJ1Y3QgaW1hcF9jbWQgKmluX3Byb2dyZXNzLCAqKmluX3Byb2dyZXNzX2FwcGVuZDsKKwlzdHJ1Y3QgaW1hcF9idWZmZXIgYnVmOyAvKiB0aGlzIGlzIEJJRywgc28gcHV0IGl0IGxhc3QgKi8KK307CisKK3N0cnVjdCBpbWFwX3N0b3JlIHsKKwkvKiBjdXJyZW50bHkgb3BlbiBtYWlsYm94ICovCisJY29uc3QgY2hhciAqbmFtZTsgLyogZm9yZWlnbiEgbWF5YmUgcHJlc2V0PyAqLworCWludCB1aWR2YWxpZGl0eTsKKwlzdHJ1Y3QgaW1hcCAqaW1hcDsKKwljb25zdCBjaGFyICpwcmVmaXg7Cit9OworCitzdHJ1Y3QgaW1hcF9jbWRfY2IgeworCWludCAoKmNvbnQpKHN0cnVjdCBpbWFwX3N0b3JlICpjdHgsIHN0cnVjdCBpbWFwX2NtZCAqY21kLCBjb25zdCBjaGFyICpwcm9tcHQpOworCXZvaWQgKCpkb25lKShzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LCBzdHJ1Y3QgaW1hcF9jbWQgKmNtZCwgaW50IHJlc3BvbnNlKTsKKwl2b2lkICpjdHg7CisJY2hhciAqZGF0YTsKKwlpbnQgZGxlbjsKKwlpbnQgdWlkOworfTsKKworc3RydWN0IGltYXBfY21kIHsKKwlzdHJ1Y3QgaW1hcF9jbWQgKm5leHQ7CisJc3RydWN0IGltYXBfY21kX2NiIGNiOworCWNoYXIgKmNtZDsKKwlpbnQgdGFnOworfTsKKworI2RlZmluZSBDQVAoY2FwKSAoaW1hcC0+Y2FwcyAmICgxIDw8IChjYXApKSkKKworZW51bSBDQVBBQklMSVRZIHsKKwlOT0xPR0lOID0gMCwKKwlVSURQTFVTLAorCUxJVEVSQUxQTFVTLAorCU5BTUVTUEFDRSwKKwlTVEFSVFRMUywKKwlBVVRIX0NSQU1fTUQ1Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY2FwX2xpc3RbXSA9IHsKKwkiTE9HSU5ESVNBQkxFRCIsCisJIlVJRFBMVVMiLAorCSJMSVRFUkFMKyIsCisJIk5BTUVTUEFDRSIsCisJIlNUQVJUVExTIiwKKwkiQVVUSD1DUkFNLU1ENSIsCit9OworCisjZGVmaW5lIFJFU1BfT0sgICAgMAorI2RlZmluZSBSRVNQX05PICAgIDEKKyNkZWZpbmUgUkVTUF9CQUQgICAyCisKK3N0YXRpYyBpbnQgZ2V0X2NtZF9yZXN1bHQoc3RydWN0IGltYXBfc3RvcmUgKmN0eCwgc3RydWN0IGltYXBfY21kICp0Y21kKTsKKworCisjaWZuZGVmIE5PX09QRU5TU0wKK3N0YXRpYyB2b2lkIHNzbF9zb2NrZXRfcGVycm9yKGNvbnN0IGNoYXIgKmZ1bmMpCit7CisJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIGZ1bmMsIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgc29ja2V0X3BlcnJvcihjb25zdCBjaGFyICpmdW5jLCBzdHJ1Y3QgaW1hcF9zb2NrZXQgKnNvY2ssIGludCByZXQpCit7CisjaWZuZGVmIE5PX09QRU5TU0wKKwlpZiAoc29jay0+c3NsKSB7CisJCWludCBzc2xlcnIgPSBTU0xfZ2V0X2Vycm9yKHNvY2stPnNzbCwgcmV0KTsKKwkJc3dpdGNoIChzc2xlcnIpIHsKKwkJY2FzZSBTU0xfRVJST1JfTk9ORToKKwkJCWJyZWFrOworCQljYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorCQkJcGVycm9yKCJTU0xfY29ubmVjdCIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzc2xfc29ja2V0X3BlcnJvcigiU1NMX2Nvbm5lY3QiKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCWlmIChyZXQgPCAwKQorCQkJcGVycm9yKGZ1bmMpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmV4cGVjdGVkIEVPRlxuIiwgZnVuYyk7CisJfQorfQorCisjaWZkZWYgTk9fT1BFTlNTTAorc3RhdGljIGludCBzc2xfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IGltYXBfc29ja2V0ICpzb2NrLCBpbnQgdXNlX3Rsc19vbmx5LCBpbnQgdmVyaWZ5KQoreworCWZwcmludGYoc3RkZXJyLCAiU1NMIHJlcXVlc3RlZCBidXQgU1NMIHN1cHBvcnQgbm90IGNvbXBpbGVkIGluXG4iKTsKKwlyZXR1cm4gLTE7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbnQgaG9zdF9tYXRjaGVzKGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKnBhdHRlcm4pCit7CisJaWYgKHBhdHRlcm5bMF0gPT0gJyonICYmIHBhdHRlcm5bMV0gPT0gJy4nKSB7CisJCXBhdHRlcm4gKz0gMjsKKwkJaWYgKCEoaG9zdCA9IHN0cmNocihob3N0LCAnLicpKSkKKwkJCXJldHVybiAwOworCQlob3N0Kys7CisJfQorCisJcmV0dXJuICpob3N0ICYmICpwYXR0ZXJuICYmICFzdHJjYXNlY21wKGhvc3QsIHBhdHRlcm4pOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9ob3N0bmFtZShYNTA5ICpjZXJ0LCBjb25zdCBjaGFyICpob3N0bmFtZSkKK3sKKwlpbnQgbGVuOworCVg1MDlfTkFNRSAqc3ViajsKKwljaGFyIGNuYW1lWzEwMDBdOworCWludCBpLCBmb3VuZDsKKwlTVEFDS19PRihHRU5FUkFMX05BTUUpICpzdWJqX2FsdF9uYW1lczsKKworCS8qIHRyeSB0aGUgRE5TIHN1YmplY3RBbHROYW1lcyAqLworCWZvdW5kID0gMDsKKwlpZiAoKHN1YmpfYWx0X25hbWVzID0gWDUwOV9nZXRfZXh0X2QyaShjZXJ0LCBOSURfc3ViamVjdF9hbHRfbmFtZSwgTlVMTCwgTlVMTCkpKSB7CisJCWludCBudW1fc3Vial9hbHRfbmFtZXMgPSBza19HRU5FUkFMX05BTUVfbnVtKHN1YmpfYWx0X25hbWVzKTsKKwkJZm9yIChpID0gMDsgIWZvdW5kICYmIGkgPCBudW1fc3Vial9hbHRfbmFtZXM7IGkrKykgeworCQkJR0VORVJBTF9OQU1FICpzdWJqX2FsdF9uYW1lID0gc2tfR0VORVJBTF9OQU1FX3ZhbHVlKHN1YmpfYWx0X25hbWVzLCBpKTsKKwkJCWlmIChzdWJqX2FsdF9uYW1lLT50eXBlID09IEdFTl9ETlMgJiYKKwkJCSAgICBzdHJsZW4oKGNvbnN0IGNoYXIgKilzdWJqX2FsdF9uYW1lLT5kLmlhNS0+ZGF0YSkgPT0gKHNpemVfdClzdWJqX2FsdF9uYW1lLT5kLmlhNS0+bGVuZ3RoICYmCisJCQkgICAgaG9zdF9tYXRjaGVzKGhvc3RuYW1lLCAoY29uc3QgY2hhciAqKShzdWJqX2FsdF9uYW1lLT5kLmlhNS0+ZGF0YSkpKQorCQkJCWZvdW5kID0gMTsKKwkJfQorCQlza19HRU5FUkFMX05BTUVfcG9wX2ZyZWUoc3Vial9hbHRfbmFtZXMsIEdFTkVSQUxfTkFNRV9mcmVlKTsKKwl9CisJaWYgKGZvdW5kKQorCQlyZXR1cm4gMDsKKworCS8qIHRyeSB0aGUgY29tbW9uIG5hbWUgKi8KKwlpZiAoIShzdWJqID0gWDUwOV9nZXRfc3ViamVjdF9uYW1lKGNlcnQpKSkKKwkJcmV0dXJuIGVycm9yKCJjYW5ub3QgZ2V0IGNlcnRpZmljYXRlIHN1YmplY3QiKTsKKwlpZiAoKGxlbiA9IFg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQoc3ViaiwgTklEX2NvbW1vbk5hbWUsIGNuYW1lLCBzaXplb2YoY25hbWUpKSkgPCAwKQorCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBnZXQgY2VydGlmaWNhdGUgY29tbW9uIG5hbWUiKTsKKwlpZiAoc3RybGVuKGNuYW1lKSA9PSAoc2l6ZV90KWxlbiAmJiBob3N0X21hdGNoZXMoaG9zdG5hbWUsIGNuYW1lKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGVycm9yKCJjZXJ0aWZpY2F0ZSBvd25lciAnJXMnIGRvZXMgbm90IG1hdGNoIGhvc3RuYW1lICclcyciLAorCQkgICAgIGNuYW1lLCBob3N0bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgc3NsX3NvY2tldF9jb25uZWN0KHN0cnVjdCBpbWFwX3NvY2tldCAqc29jaywgaW50IHVzZV90bHNfb25seSwgaW50IHZlcmlmeSkKK3sKKyNpZiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAwMDAwTCkKKwljb25zdCBTU0xfTUVUSE9EICptZXRoOworI2Vsc2UKKwlTU0xfTUVUSE9EICptZXRoOworI2VuZGlmCisJU1NMX0NUWCAqY3R4OworCWludCByZXQ7CisJWDUwOSAqY2VydDsKKworCVNTTF9saWJyYXJ5X2luaXQoKTsKKwlTU0xfbG9hZF9lcnJvcl9zdHJpbmdzKCk7CisKKwltZXRoID0gU1NMdjIzX21ldGhvZCgpOworCWlmICghbWV0aCkgeworCQlzc2xfc29ja2V0X3BlcnJvcigiU1NMdjIzX21ldGhvZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJY3R4ID0gU1NMX0NUWF9uZXcobWV0aCk7CisJaWYgKCFjdHgpIHsKKwkJc3NsX3NvY2tldF9wZXJyb3IoIlNTTF9DVFhfbmV3Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAodXNlX3Rsc19vbmx5KQorCQlTU0xfQ1RYX3NldF9vcHRpb25zKGN0eCwgU1NMX09QX05PX1NTTHYyIHwgU1NMX09QX05PX1NTTHYzKTsKKworCWlmICh2ZXJpZnkpCisJCVNTTF9DVFhfc2V0X3ZlcmlmeShjdHgsIFNTTF9WRVJJRllfUEVFUiwgTlVMTCk7CisKKwlpZiAoIVNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKGN0eCkpIHsKKwkJc3NsX3NvY2tldF9wZXJyb3IoIlNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzIik7CisJCXJldHVybiAtMTsKKwl9CisJc29jay0+c3NsID0gU1NMX25ldyhjdHgpOworCWlmICghc29jay0+c3NsKSB7CisJCXNzbF9zb2NrZXRfcGVycm9yKCJTU0xfbmV3Iik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKCFTU0xfc2V0X3JmZChzb2NrLT5zc2wsIHNvY2stPmZkWzBdKSkgeworCQlzc2xfc29ja2V0X3BlcnJvcigiU1NMX3NldF9yZmQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIVNTTF9zZXRfd2ZkKHNvY2stPnNzbCwgc29jay0+ZmRbMV0pKSB7CisJCXNzbF9zb2NrZXRfcGVycm9yKCJTU0xfc2V0X3dmZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisjaWZkZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorCS8qCisJICogU05JIChSRkM0MzY2KQorCSAqIE9wZW5TU0wgZG9lcyBub3QgZG9jdW1lbnQgdGhpcyBmdW5jdGlvbiwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbgorCSAqIHJldHVybnMgMSBvbiBzdWNjZXNzLCAwIG9uIGZhaWx1cmUgYWZ0ZXIgY2FsbGluZyBTU0xlcnIoKS4KKwkgKi8KKwlyZXQgPSBTU0xfc2V0X3Rsc2V4dF9ob3N0X25hbWUoc29jay0+c3NsLCBzZXJ2ZXIuaG9zdCk7CisJaWYgKHJldCAhPSAxKQorCQl3YXJuaW5nKCJTU0xfc2V0X3Rsc2V4dF9ob3N0X25hbWUoJXMpIGZhaWxlZC4iLCBzZXJ2ZXIuaG9zdCk7CisjZW5kaWYKKworCXJldCA9IFNTTF9jb25uZWN0KHNvY2stPnNzbCk7CisJaWYgKHJldCA8PSAwKSB7CisJCXNvY2tldF9wZXJyb3IoIlNTTF9jb25uZWN0Iiwgc29jaywgcmV0KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICh2ZXJpZnkpIHsKKwkJLyogbWFrZSBzdXJlIHRoZSBob3N0bmFtZSBtYXRjaGVzIHRoYXQgb2YgdGhlIGNlcnRpZmljYXRlICovCisJCWNlcnQgPSBTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoc29jay0+c3NsKTsKKwkJaWYgKCFjZXJ0KQorCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gZ2V0IHBlZXIgY2VydGlmaWNhdGUuIik7CisJCWlmICh2ZXJpZnlfaG9zdG5hbWUoY2VydCwgc2VydmVyLmhvc3QpIDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHNvY2tldF9yZWFkKHN0cnVjdCBpbWFwX3NvY2tldCAqc29jaywgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXNzaXplX3QgbjsKKyNpZm5kZWYgTk9fT1BFTlNTTAorCWlmIChzb2NrLT5zc2wpCisJCW4gPSBTU0xfcmVhZChzb2NrLT5zc2wsIGJ1ZiwgbGVuKTsKKwllbHNlCisjZW5kaWYKKwkJbiA9IHhyZWFkKHNvY2stPmZkWzBdLCBidWYsIGxlbik7CisJaWYgKG4gPD0gMCkgeworCQlzb2NrZXRfcGVycm9yKCJyZWFkIiwgc29jaywgbik7CisJCWNsb3NlKHNvY2stPmZkWzBdKTsKKwkJY2xvc2Uoc29jay0+ZmRbMV0pOworCQlzb2NrLT5mZFswXSA9IHNvY2stPmZkWzFdID0gLTE7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IHNvY2tldF93cml0ZShzdHJ1Y3QgaW1hcF9zb2NrZXQgKnNvY2ssIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgbjsKKyNpZm5kZWYgTk9fT1BFTlNTTAorCWlmIChzb2NrLT5zc2wpCisJCW4gPSBTU0xfd3JpdGUoc29jay0+c3NsLCBidWYsIGxlbik7CisJZWxzZQorI2VuZGlmCisJCW4gPSB3cml0ZV9pbl9mdWxsKHNvY2stPmZkWzFdLCBidWYsIGxlbik7CisJaWYgKG4gIT0gbGVuKSB7CisJCXNvY2tldF9wZXJyb3IoIndyaXRlIiwgc29jaywgbik7CisJCWNsb3NlKHNvY2stPmZkWzBdKTsKKwkJY2xvc2Uoc29jay0+ZmRbMV0pOworCQlzb2NrLT5mZFswXSA9IHNvY2stPmZkWzFdID0gLTE7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgdm9pZCBzb2NrZXRfc2h1dGRvd24oc3RydWN0IGltYXBfc29ja2V0ICpzb2NrKQoreworI2lmbmRlZiBOT19PUEVOU1NMCisJaWYgKHNvY2stPnNzbCkgeworCQlTU0xfc2h1dGRvd24oc29jay0+c3NsKTsKKwkJU1NMX2ZyZWUoc29jay0+c3NsKTsKKwl9CisjZW5kaWYKKwljbG9zZShzb2NrLT5mZFswXSk7CisJY2xvc2Uoc29jay0+ZmRbMV0pOworfQorCisvKiBzaW1wbGUgbGluZSBidWZmZXJpbmcgKi8KK3N0YXRpYyBpbnQgYnVmZmVyX2dldHMoc3RydWN0IGltYXBfYnVmZmVyICpiLCBjaGFyICoqcykKK3sKKwlpbnQgbjsKKwlpbnQgc3RhcnQgPSBiLT5vZmZzZXQ7CisKKwkqcyA9IGItPmJ1ZiArIHN0YXJ0OworCisJZm9yICg7OykgeworCQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggZGF0YSB0byByZWFkIHRoZSBcclxuIHNlcXVlbmNlICovCisJCWlmIChiLT5vZmZzZXQgKyAxID49IGItPmJ5dGVzKSB7CisJCQlpZiAoc3RhcnQpIHsKKwkJCQkvKiBzaGlmdCBkb3duIHVzZWQgYnl0ZXMgKi8KKwkJCQkqcyA9IGItPmJ1ZjsKKworCQkJCWFzc2VydChzdGFydCA8PSBiLT5ieXRlcyk7CisJCQkJbiA9IGItPmJ5dGVzIC0gc3RhcnQ7CisKKwkJCQlpZiAobikKKwkJCQkJbWVtbW92ZShiLT5idWYsIGItPmJ1ZiArIHN0YXJ0LCBuKTsKKwkJCQliLT5vZmZzZXQgLT0gc3RhcnQ7CisJCQkJYi0+Ynl0ZXMgPSBuOworCQkJCXN0YXJ0ID0gMDsKKwkJCX0KKworCQkJbiA9IHNvY2tldF9yZWFkKCZiLT5zb2NrLCBiLT5idWYgKyBiLT5ieXRlcywKKwkJCQkJIHNpemVvZihiLT5idWYpIC0gYi0+Ynl0ZXMpOworCisJCQlpZiAobiA8PSAwKQorCQkJCXJldHVybiAtMTsKKworCQkJYi0+Ynl0ZXMgKz0gbjsKKwkJfQorCisJCWlmIChiLT5idWZbYi0+b2Zmc2V0XSA9PSAnXHInKSB7CisJCQlhc3NlcnQoYi0+b2Zmc2V0ICsgMSA8IGItPmJ5dGVzKTsKKwkJCWlmIChiLT5idWZbYi0+b2Zmc2V0ICsgMV0gPT0gJ1xuJykgeworCQkJCWItPmJ1ZltiLT5vZmZzZXRdID0gMDsgIC8qIHRlcm1pbmF0ZSB0aGUgc3RyaW5nICovCisJCQkJYi0+b2Zmc2V0ICs9IDI7IC8qIG5leHQgbGluZSAqLworCQkJCWlmICgwIDwgdmVyYm9zaXR5KQorCQkJCQlwdXRzKCpzKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCisJCWItPm9mZnNldCsrOworCX0KKwkvKiBub3QgcmVhY2hlZCAqLworfQorCitzdGF0aWMgdm9pZCBpbWFwX2luZm8oY29uc3QgY2hhciAqbXNnLCAuLi4pCit7CisJdmFfbGlzdCB2YTsKKworCWlmICgwIDw9IHZlcmJvc2l0eSkgeworCQl2YV9zdGFydCh2YSwgbXNnKTsKKwkJdnByaW50Zihtc2csIHZhKTsKKwkJdmFfZW5kKHZhKTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbWFwX3dhcm4oY29uc3QgY2hhciAqbXNnLCAuLi4pCit7CisJdmFfbGlzdCB2YTsKKworCWlmICgtMiA8IHZlcmJvc2l0eSkgeworCQl2YV9zdGFydCh2YSwgbXNnKTsKKwkJdmZwcmludGYoc3RkZXJyLCBtc2csIHZhKTsKKwkJdmFfZW5kKHZhKTsKKwl9Cit9CisKK3N0YXRpYyBjaGFyICpuZXh0X2FyZyhjaGFyICoqcykKK3sKKwljaGFyICpyZXQ7CisKKwlpZiAoIXMgfHwgISpzKQorCQlyZXR1cm4gTlVMTDsKKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikgKipzKSkKKwkJKCpzKSsrOworCWlmICghKipzKSB7CisJCSpzID0gTlVMTDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmICgqKnMgPT0gJyInKSB7CisJCSsrKnM7CisJCXJldCA9ICpzOworCQkqcyA9IHN0cmNocigqcywgJyInKTsKKwl9IGVsc2UgeworCQlyZXQgPSAqczsKKwkJd2hpbGUgKCoqcyAmJiAhaXNzcGFjZSgodW5zaWduZWQgY2hhcikgKipzKSkKKwkJCSgqcykrKzsKKwl9CisJaWYgKCpzKSB7CisJCWlmICgqKnMpCisJCQkqKCpzKSsrID0gMDsKKwkJaWYgKCEqKnMpCisJCQkqcyA9IE5VTEw7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbmZzbnByaW50ZihjaGFyICpidWYsIGludCBibGVuLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgdmE7CisKKwl2YV9zdGFydCh2YSwgZm10KTsKKwlpZiAoYmxlbiA8PSAwIHx8ICh1bnNpZ25lZCkocmV0ID0gdnNucHJpbnRmKGJ1ZiwgYmxlbiwgZm10LCB2YSkpID49ICh1bnNpZ25lZClibGVuKQorCQlCVUcoImJ1ZmZlciB0b28gc21hbGwuIFBsZWFzZSByZXBvcnQgYSBidWcuIik7CisJdmFfZW5kKHZhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGltYXBfY21kICppc3N1ZV9pbWFwX2NtZChzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LAorCQkJCSAgICAgICBzdHJ1Y3QgaW1hcF9jbWRfY2IgKmNiLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJc3RydWN0IGltYXAgKmltYXAgPSBjdHgtPmltYXA7CisJc3RydWN0IGltYXBfY21kICpjbWQ7CisJaW50IG4sIGJ1Zmw7CisJY2hhciBidWZbMTAyNF07CisKKwljbWQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgaW1hcF9jbWQpKTsKKwluZnZhc3ByaW50ZigmY21kLT5jbWQsIGZtdCwgYXApOworCWNtZC0+dGFnID0gKytpbWFwLT5uZXh0dGFnOworCisJaWYgKGNiKQorCQljbWQtPmNiID0gKmNiOworCWVsc2UKKwkJbWVtc2V0KCZjbWQtPmNiLCAwLCBzaXplb2YoY21kLT5jYikpOworCisJd2hpbGUgKGltYXAtPmxpdGVyYWxfcGVuZGluZykKKwkJZ2V0X2NtZF9yZXN1bHQoY3R4LCBOVUxMKTsKKworCWlmICghY21kLT5jYi5kYXRhKQorCQlidWZsID0gbmZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQgJXNcclxuIiwgY21kLT50YWcsIGNtZC0+Y21kKTsKKwllbHNlCisJCWJ1ZmwgPSBuZnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCAlc3slZCVzfVxyXG4iLAorCQkJCSAgY21kLT50YWcsIGNtZC0+Y21kLCBjbWQtPmNiLmRsZW4sCisJCQkJICBDQVAoTElURVJBTFBMVVMpID8gIisiIDogIiIpOworCisJaWYgKDAgPCB2ZXJib3NpdHkpIHsKKwkJaWYgKGltYXAtPm51bV9pbl9wcm9ncmVzcykKKwkJCXByaW50ZigiKCVkIGluIHByb2dyZXNzKSAiLCBpbWFwLT5udW1faW5fcHJvZ3Jlc3MpOworCQlpZiAoIXN0YXJ0c193aXRoKGNtZC0+Y21kLCAiTE9HSU4iKSkKKwkJCXByaW50ZigiPj4+ICVzIiwgYnVmKTsKKwkJZWxzZQorCQkJcHJpbnRmKCI+Pj4gJWQgTE9HSU4gPHVzZXI+IDxwYXNzPlxuIiwgY21kLT50YWcpOworCX0KKwlpZiAoc29ja2V0X3dyaXRlKCZpbWFwLT5idWYuc29jaywgYnVmLCBidWZsKSAhPSBidWZsKSB7CisJCWZyZWUoY21kLT5jbWQpOworCQlmcmVlKGNtZCk7CisJCWlmIChjYikKKwkJCWZyZWUoY2ItPmRhdGEpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKGNtZC0+Y2IuZGF0YSkgeworCQlpZiAoQ0FQKExJVEVSQUxQTFVTKSkgeworCQkJbiA9IHNvY2tldF93cml0ZSgmaW1hcC0+YnVmLnNvY2ssIGNtZC0+Y2IuZGF0YSwgY21kLT5jYi5kbGVuKTsKKwkJCWZyZWUoY21kLT5jYi5kYXRhKTsKKwkJCWlmIChuICE9IGNtZC0+Y2IuZGxlbiB8fAorCQkJICAgIHNvY2tldF93cml0ZSgmaW1hcC0+YnVmLnNvY2ssICJcclxuIiwgMikgIT0gMikgeworCQkJCWZyZWUoY21kLT5jbWQpOworCQkJCWZyZWUoY21kKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCWNtZC0+Y2IuZGF0YSA9IE5VTEw7CisJCX0gZWxzZQorCQkJaW1hcC0+bGl0ZXJhbF9wZW5kaW5nID0gMTsKKwl9IGVsc2UgaWYgKGNtZC0+Y2IuY29udCkKKwkJaW1hcC0+bGl0ZXJhbF9wZW5kaW5nID0gMTsKKwljbWQtPm5leHQgPSBOVUxMOworCSppbWFwLT5pbl9wcm9ncmVzc19hcHBlbmQgPSBjbWQ7CisJaW1hcC0+aW5fcHJvZ3Jlc3NfYXBwZW5kID0gJmNtZC0+bmV4dDsKKwlpbWFwLT5udW1faW5fcHJvZ3Jlc3MrKzsKKwlyZXR1cm4gY21kOworfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQorc3RhdGljIGludCBpbWFwX2V4ZWMoc3RydWN0IGltYXBfc3RvcmUgKmN0eCwgc3RydWN0IGltYXBfY21kX2NiICpjYiwKKwkJICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXN0cnVjdCBpbWFwX2NtZCAqY21kcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCWNtZHAgPSBpc3N1ZV9pbWFwX2NtZChjdHgsIGNiLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCWlmICghY21kcCkKKwkJcmV0dXJuIFJFU1BfQkFEOworCisJcmV0dXJuIGdldF9jbWRfcmVzdWx0KGN0eCwgY21kcCk7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitzdGF0aWMgaW50IGltYXBfZXhlY19tKHN0cnVjdCBpbWFwX3N0b3JlICpjdHgsIHN0cnVjdCBpbWFwX2NtZF9jYiAqY2IsCisJCSAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXN0cnVjdCBpbWFwX2NtZCAqY21kcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCWNtZHAgPSBpc3N1ZV9pbWFwX2NtZChjdHgsIGNiLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCWlmICghY21kcCkKKwkJcmV0dXJuIERSVl9TVE9SRV9CQUQ7CisKKwlzd2l0Y2ggKGdldF9jbWRfcmVzdWx0KGN0eCwgY21kcCkpIHsKKwljYXNlIFJFU1BfQkFEOiByZXR1cm4gRFJWX1NUT1JFX0JBRDsKKwljYXNlIFJFU1BfTk86IHJldHVybiBEUlZfTVNHX0JBRDsKKwlkZWZhdWx0OiByZXR1cm4gRFJWX09LOworCX0KK30KKworc3RhdGljIGludCBza2lwX2ltYXBfbGlzdF9sKGNoYXIgKipzcCwgaW50IGxldmVsKQoreworCWNoYXIgKnMgPSAqc3A7CisKKwlmb3IgKDs7KSB7CisJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpzKSkKKwkJCXMrKzsKKwkJaWYgKGxldmVsICYmICpzID09ICcpJykgeworCQkJcysrOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCpzID09ICcoJykgeworCQkJLyogc3VibGlzdCAqLworCQkJcysrOworCQkJaWYgKHNraXBfaW1hcF9saXN0X2woJnMsIGxldmVsICsgMSkpCisJCQkJZ290byBiYWlsOworCQl9IGVsc2UgaWYgKCpzID09ICciJykgeworCQkJLyogcXVvdGVkIHN0cmluZyAqLworCQkJcysrOworCQkJZm9yICg7ICpzICE9ICciJzsgcysrKQorCQkJCWlmICghKnMpCisJCQkJCWdvdG8gYmFpbDsKKwkJCXMrKzsKKwkJfSBlbHNlIHsKKwkJCS8qIGF0b20gKi8KKwkJCWZvciAoOyAqcyAmJiAhaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcyk7IHMrKykKKwkJCQlpZiAobGV2ZWwgJiYgKnMgPT0gJyknKQorCQkJCQlicmVhazsKKwkJfQorCisJCWlmICghbGV2ZWwpCisJCQlicmVhazsKKwkJaWYgKCEqcykKKwkJCWdvdG8gYmFpbDsKKwl9CisJKnNwID0gczsKKwlyZXR1cm4gMDsKKworYmFpbDoKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHNraXBfbGlzdChjaGFyICoqc3ApCit7CisJc2tpcF9pbWFwX2xpc3RfbChzcCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NhcGFiaWxpdHkoc3RydWN0IGltYXAgKmltYXAsIGNoYXIgKmNtZCkKK3sKKwljaGFyICphcmc7CisJdW5zaWduZWQgaTsKKworCWltYXAtPmNhcHMgPSAweDgwMDAwMDAwOworCXdoaWxlICgoYXJnID0gbmV4dF9hcmcoJmNtZCkpKQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjYXBfbGlzdCk7IGkrKykKKwkJCWlmICghc3RyY21wKGNhcF9saXN0W2ldLCBhcmcpKQorCQkJCWltYXAtPmNhcHMgfD0gMSA8PCBpOworCWltYXAtPnJjYXBzID0gaW1hcC0+Y2FwczsKK30KKworc3RhdGljIGludCBwYXJzZV9yZXNwb25zZV9jb2RlKHN0cnVjdCBpbWFwX3N0b3JlICpjdHgsIHN0cnVjdCBpbWFwX2NtZF9jYiAqY2IsCisJCQkgICAgICAgY2hhciAqcykKK3sKKwlzdHJ1Y3QgaW1hcCAqaW1hcCA9IGN0eC0+aW1hcDsKKwljaGFyICphcmcsICpwOworCisJaWYgKCFzIHx8ICpzICE9ICdbJykKKwkJcmV0dXJuIFJFU1BfT0s7CQkvKiBubyByZXNwb25zZSBjb2RlICovCisJcysrOworCWlmICghKHAgPSBzdHJjaHIocywgJ10nKSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiBtYWxmb3JtZWQgcmVzcG9uc2UgY29kZVxuIik7CisJCXJldHVybiBSRVNQX0JBRDsKKwl9CisJKnArKyA9IDA7CisJYXJnID0gbmV4dF9hcmcoJnMpOworCWlmICghYXJnKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogZW1wdHkgcmVzcG9uc2UgY29kZVxuIik7CisJCXJldHVybiBSRVNQX0JBRDsKKwl9CisJaWYgKCFzdHJjbXAoIlVJRFZBTElESVRZIiwgYXJnKSkgeworCQlpZiAoIShhcmcgPSBuZXh0X2FyZygmcykpIHx8ICEoY3R4LT51aWR2YWxpZGl0eSA9IGF0b2koYXJnKSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogbWFsZm9ybWVkIFVJRFZBTElESVRZIHN0YXR1c1xuIik7CisJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoIlVJRE5FWFQiLCBhcmcpKSB7CisJCWlmICghKGFyZyA9IG5leHRfYXJnKCZzKSkgfHwgIShpbWFwLT51aWRuZXh0ID0gYXRvaShhcmcpKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiBtYWxmb3JtZWQgTkVYVFVJRCBzdGF0dXNcbiIpOworCQkJcmV0dXJuIFJFU1BfQkFEOworCQl9CisJfSBlbHNlIGlmICghc3RyY21wKCJDQVBBQklMSVRZIiwgYXJnKSkgeworCQlwYXJzZV9jYXBhYmlsaXR5KGltYXAsIHMpOworCX0gZWxzZSBpZiAoIXN0cmNtcCgiQUxFUlQiLCBhcmcpKSB7CisJCS8qIFJGQzIwNjAgc2F5cyB0aGF0IHRoZXNlIG1lc3NhZ2VzIE1VU1QgYmUgZGlzcGxheWVkCisJCSAqIHRvIHRoZSB1c2VyCisJCSAqLworCQlmb3IgKDsgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCk7IHArKyk7CisJCWZwcmludGYoc3RkZXJyLCAiKioqIElNQVAgQUxFUlQgKioqICVzXG4iLCBwKTsKKwl9IGVsc2UgaWYgKGNiICYmIGNiLT5jdHggJiYgIXN0cmNtcCgiQVBQRU5EVUlEIiwgYXJnKSkgeworCQlpZiAoIShhcmcgPSBuZXh0X2FyZygmcykpIHx8ICEoY3R4LT51aWR2YWxpZGl0eSA9IGF0b2koYXJnKSkgfHwKKwkJICAgICEoYXJnID0gbmV4dF9hcmcoJnMpKSB8fCAhKCooaW50ICopY2ItPmN0eCA9IGF0b2koYXJnKSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogbWFsZm9ybWVkIEFQUEVORFVJRCBzdGF0dXNcbiIpOworCQkJcmV0dXJuIFJFU1BfQkFEOworCQl9CisJfQorCXJldHVybiBSRVNQX09LOworfQorCitzdGF0aWMgaW50IGdldF9jbWRfcmVzdWx0KHN0cnVjdCBpbWFwX3N0b3JlICpjdHgsIHN0cnVjdCBpbWFwX2NtZCAqdGNtZCkKK3sKKwlzdHJ1Y3QgaW1hcCAqaW1hcCA9IGN0eC0+aW1hcDsKKwlzdHJ1Y3QgaW1hcF9jbWQgKmNtZHAsICoqcGNtZHA7CisJY2hhciAqY21kOworCWNvbnN0IGNoYXIgKmFyZywgKmFyZzE7CisJaW50IG4sIHJlc3AsIHJlc3AyLCB0YWc7CisKKwlmb3IgKDs7KSB7CisJCWlmIChidWZmZXJfZ2V0cygmaW1hcC0+YnVmLCAmY21kKSkKKwkJCXJldHVybiBSRVNQX0JBRDsKKworCQlhcmcgPSBuZXh0X2FyZygmY21kKTsKKwkJaWYgKCFhcmcpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogZW1wdHkgcmVzcG9uc2VcbiIpOworCQkJcmV0dXJuIFJFU1BfQkFEOworCQl9CisJCWlmICgqYXJnID09ICcqJykgeworCQkJYXJnID0gbmV4dF9hcmcoJmNtZCk7CisJCQlpZiAoIWFyZykgeworCQkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogdW5hYmxlIHRvIHBhcnNlIHVudGFnZ2VkIHJlc3BvbnNlXG4iKTsKKwkJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCQl9CisKKwkJCWlmICghc3RyY21wKCJOQU1FU1BBQ0UiLCBhcmcpKSB7CisJCQkJLyogcmZjMjM0MiBOQU1FU1BBQ0UgcmVzcG9uc2UuICovCisJCQkJc2tpcF9saXN0KCZjbWQpOyAvKiBQZXJzb25hbCBtYWlsYm94ZXMgKi8KKwkJCQlza2lwX2xpc3QoJmNtZCk7IC8qIE90aGVycycgbWFpbGJveGVzICovCisJCQkJc2tpcF9saXN0KCZjbWQpOyAvKiBTaGFyZWQgbWFpbGJveGVzICovCisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoIk9LIiwgYXJnKSB8fCAhc3RyY21wKCJCQUQiLCBhcmcpIHx8CisJCQkJICAgIXN0cmNtcCgiTk8iLCBhcmcpIHx8ICFzdHJjbXAoIkJZRSIsIGFyZykpIHsKKwkJCQlpZiAoKHJlc3AgPSBwYXJzZV9yZXNwb25zZV9jb2RlKGN0eCwgTlVMTCwgY21kKSkgIT0gUkVTUF9PSykKKwkJCQkJcmV0dXJuIHJlc3A7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoIkNBUEFCSUxJVFkiLCBhcmcpKSB7CisJCQkJcGFyc2VfY2FwYWJpbGl0eShpbWFwLCBjbWQpOworCQkJfSBlbHNlIGlmICgoYXJnMSA9IG5leHRfYXJnKCZjbWQpKSkgeworCQkJCTsgLyoKKwkJCQkgICAqIFVuaGFuZGxlZCByZXNwb25zZS1kYXRhIHdpdGggYXQgbGVhc3QgdHdvIHdvcmRzLgorCQkJCSAgICogSWdub3JlIGl0LgorCQkJCSAgICoKKwkJCQkgICAqIE5FRURTV09SSzogUHJldmlvdXNseSB0aGlzIGNhc2UgaGFuZGxlZCAnPG51bT4gRVhJU1RTJworCQkJCSAgICogYW5kICc8bnVtPiBSRUNFTlQnIGJ1dCBhcyBhIHByb2JhYmx5LXVuaW50ZW5kZWQgc2lkZQorCQkJCSAgICogZWZmZWN0IGl0IGlnbm9yZXMgb3RoZXIgdW5yZWNvZ25pemVkIHR3by13b3JkCisJCQkJICAgKiByZXNwb25zZXMuICBpbWFwLXNlbmQgZG9lc24ndCBldmVyIHRyeSB0byByZWFkCisJCQkJICAgKiBtZXNzYWdlcyBvciBtYWlsYm94ZXMgdGhlc2UgZGF5cywgc28gY29uc2lkZXIKKwkJCQkgICAqIGVsaW1pbmF0aW5nIHRoaXMgY2FzZS4KKwkJCQkgICAqLworCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IHVuYWJsZSB0byBwYXJzZSB1bnRhZ2dlZCByZXNwb25zZVxuIik7CisJCQkJcmV0dXJuIFJFU1BfQkFEOworCQkJfQorCQl9IGVsc2UgaWYgKCFpbWFwLT5pbl9wcm9ncmVzcykgeworCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiB1bmV4cGVjdGVkIHJlcGx5OiAlcyAlc1xuIiwgYXJnLCBjbWQgPyBjbWQgOiAiIik7CisJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCX0gZWxzZSBpZiAoKmFyZyA9PSAnKycpIHsKKwkJCS8qIFRoaXMgY2FuIGhhcHBlbiBvbmx5IHdpdGggdGhlIGxhc3QgY29tbWFuZCB1bmRlcndheSwgYXMKKwkJCSAgIGl0IGVuZm9yY2VzIGEgcm91bmQtdHJpcC4gKi8KKwkJCWNtZHAgPSAoc3RydWN0IGltYXBfY21kICopKChjaGFyICopaW1hcC0+aW5fcHJvZ3Jlc3NfYXBwZW5kIC0KKwkJCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgaW1hcF9jbWQsIG5leHQpKTsKKwkJCWlmIChjbWRwLT5jYi5kYXRhKSB7CisJCQkJbiA9IHNvY2tldF93cml0ZSgmaW1hcC0+YnVmLnNvY2ssIGNtZHAtPmNiLmRhdGEsIGNtZHAtPmNiLmRsZW4pOworCQkJCUZSRUVfQU5EX05VTEwoY21kcC0+Y2IuZGF0YSk7CisJCQkJaWYgKG4gIT0gKGludCljbWRwLT5jYi5kbGVuKQorCQkJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCQl9IGVsc2UgaWYgKGNtZHAtPmNiLmNvbnQpIHsKKwkJCQlpZiAoY21kcC0+Y2IuY29udChjdHgsIGNtZHAsIGNtZCkpCisJCQkJCXJldHVybiBSRVNQX0JBRDsKKwkJCX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiB1bmV4cGVjdGVkIGNvbW1hbmQgY29udGludWF0aW9uIHJlcXVlc3RcbiIpOworCQkJCXJldHVybiBSRVNQX0JBRDsKKwkJCX0KKwkJCWlmIChzb2NrZXRfd3JpdGUoJmltYXAtPmJ1Zi5zb2NrLCAiXHJcbiIsIDIpICE9IDIpCisJCQkJcmV0dXJuIFJFU1BfQkFEOworCQkJaWYgKCFjbWRwLT5jYi5jb250KQorCQkJCWltYXAtPmxpdGVyYWxfcGVuZGluZyA9IDA7CisJCQlpZiAoIXRjbWQpCisJCQkJcmV0dXJuIERSVl9PSzsKKwkJfSBlbHNlIHsKKwkJCXRhZyA9IGF0b2koYXJnKTsKKwkJCWZvciAocGNtZHAgPSAmaW1hcC0+aW5fcHJvZ3Jlc3M7IChjbWRwID0gKnBjbWRwKTsgcGNtZHAgPSAmY21kcC0+bmV4dCkKKwkJCQlpZiAoY21kcC0+dGFnID09IHRhZykKKwkJCQkJZ290byBnb3R0YWc7CisJCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IHVuZXhwZWN0ZWQgdGFnICVzXG4iLCBhcmcpOworCQkJcmV0dXJuIFJFU1BfQkFEOworCQlnb3R0YWc6CisJCQlpZiAoISgqcGNtZHAgPSBjbWRwLT5uZXh0KSkKKwkJCQlpbWFwLT5pbl9wcm9ncmVzc19hcHBlbmQgPSBwY21kcDsKKwkJCWltYXAtPm51bV9pbl9wcm9ncmVzcy0tOworCQkJaWYgKGNtZHAtPmNiLmNvbnQgfHwgY21kcC0+Y2IuZGF0YSkKKwkJCQlpbWFwLT5saXRlcmFsX3BlbmRpbmcgPSAwOworCQkJYXJnID0gbmV4dF9hcmcoJmNtZCk7CisJCQlpZiAoIWFyZykKKwkJCQlhcmcgPSAiIjsKKwkJCWlmICghc3RyY21wKCJPSyIsIGFyZykpCisJCQkJcmVzcCA9IERSVl9PSzsKKwkJCWVsc2UgeworCQkJCWlmICghc3RyY21wKCJOTyIsIGFyZykpCisJCQkJCXJlc3AgPSBSRVNQX05POworCQkJCWVsc2UgLyppZiAoIXN0cmNtcCgiQkFEIiwgYXJnKSkqLworCQkJCQlyZXNwID0gUkVTUF9CQUQ7CisJCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGNvbW1hbmQgJyVzJyByZXR1cm5lZCByZXNwb25zZSAoJXMpIC0gJXNcbiIsCisJCQkJCSFzdGFydHNfd2l0aChjbWRwLT5jbWQsICJMT0dJTiIpID8KKwkJCQkJCQljbWRwLT5jbWQgOiAiTE9HSU4gPHVzZXI+IDxwYXNzPiIsCisJCQkJCQkJYXJnLCBjbWQgPyBjbWQgOiAiIik7CisJCQl9CisJCQlpZiAoKHJlc3AyID0gcGFyc2VfcmVzcG9uc2VfY29kZShjdHgsICZjbWRwLT5jYiwgY21kKSkgPiByZXNwKQorCQkJCXJlc3AgPSByZXNwMjsKKwkJCWlmIChjbWRwLT5jYi5kb25lKQorCQkJCWNtZHAtPmNiLmRvbmUoY3R4LCBjbWRwLCByZXNwKTsKKwkJCWZyZWUoY21kcC0+Y2IuZGF0YSk7CisJCQlmcmVlKGNtZHAtPmNtZCk7CisJCQlmcmVlKGNtZHApOworCQkJaWYgKCF0Y21kIHx8IHRjbWQgPT0gY21kcCkKKwkJCQlyZXR1cm4gcmVzcDsKKwkJfQorCX0KKwkvKiBub3QgcmVhY2hlZCAqLworfQorCitzdGF0aWMgdm9pZCBpbWFwX2Nsb3NlX3NlcnZlcihzdHJ1Y3QgaW1hcF9zdG9yZSAqaWN0eCkKK3sKKwlzdHJ1Y3QgaW1hcCAqaW1hcCA9IGljdHgtPmltYXA7CisKKwlpZiAoaW1hcC0+YnVmLnNvY2suZmRbMF0gIT0gLTEpIHsKKwkJaW1hcF9leGVjKGljdHgsIE5VTEwsICJMT0dPVVQiKTsKKwkJc29ja2V0X3NodXRkb3duKCZpbWFwLT5idWYuc29jayk7CisJfQorCWZyZWUoaW1hcCk7Cit9CisKK3N0YXRpYyB2b2lkIGltYXBfY2xvc2Vfc3RvcmUoc3RydWN0IGltYXBfc3RvcmUgKmN0eCkKK3sKKwlpbWFwX2Nsb3NlX3NlcnZlcihjdHgpOworCWZyZWUoY3R4KTsKK30KKworI2lmbmRlZiBOT19PUEVOU1NMCisKKy8qCisgKiBoZXhjaGFyKCkgYW5kIGNyYW0oKSBmdW5jdGlvbnMgYXJlIGJhc2VkIG9uIHRoZSBjb2RlIGZyb20gdGhlIGlzeW5jCisgKiBwcm9qZWN0IChodHRwOi8vaXN5bmMuc2YubmV0LykuCisgKi8KK3N0YXRpYyBjaGFyIGhleGNoYXIodW5zaWduZWQgaW50IGIpCit7CisJcmV0dXJuIGIgPCAxMCA/ICcwJyArIGIgOiAnYScgKyAoYiAtIDEwKTsKK30KKworI2RlZmluZSBFTkNPREVEX1NJWkUobikgKDQgKiBESVZfUk9VTkRfVVAoKG4pLCAzKSkKK3N0YXRpYyBjaGFyICpjcmFtKGNvbnN0IGNoYXIgKmNoYWxsZW5nZV82NCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqcGFzcykKK3sKKwlpbnQgaSwgcmVzcF9sZW4sIGVuY29kZWRfbGVuLCBkZWNvZGVkX2xlbjsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbMTZdOworCWNoYXIgaGV4WzMzXTsKKwljaGFyICpyZXNwb25zZSwgKnJlc3BvbnNlXzY0LCAqY2hhbGxlbmdlOworCisJLyoKKwkgKiBsZW5ndGggb2YgY2hhbGxlbmdlXzY0IChpLmUuIGJhc2UtNjQgZW5jb2RlZCBzdHJpbmcpIGlzIGEgZ29vZAorCSAqIGVub3VnaCB1cHBlciBib3VuZCBmb3IgY2hhbGxlbmdlIChkZWNvZGVkIHJlc3VsdCkuCisJICovCisJZW5jb2RlZF9sZW4gPSBzdHJsZW4oY2hhbGxlbmdlXzY0KTsKKwljaGFsbGVuZ2UgPSB4bWFsbG9jKGVuY29kZWRfbGVuKTsKKwlkZWNvZGVkX2xlbiA9IEVWUF9EZWNvZGVCbG9jaygodW5zaWduZWQgY2hhciAqKWNoYWxsZW5nZSwKKwkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKWNoYWxsZW5nZV82NCwgZW5jb2RlZF9sZW4pOworCWlmIChkZWNvZGVkX2xlbiA8IDApCisJCWRpZSgiaW52YWxpZCBjaGFsbGVuZ2UgJXMiLCBjaGFsbGVuZ2VfNjQpOworCWlmICghSE1BQyhFVlBfbWQ1KCksIHBhc3MsIHN0cmxlbihwYXNzKSwgKHVuc2lnbmVkIGNoYXIgKiljaGFsbGVuZ2UsIGRlY29kZWRfbGVuLCBoYXNoLCBOVUxMKSkKKwkJZGllKCJITUFDIGVycm9yIik7CisKKwloZXhbMzJdID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQloZXhbMiAqIGldID0gaGV4Y2hhcigoaGFzaFtpXSA+PiA0KSAmIDB4Zik7CisJCWhleFsyICogaSArIDFdID0gaGV4Y2hhcihoYXNoW2ldICYgMHhmKTsKKwl9CisKKwkvKiByZXNwb25zZTogIjx1c2VyPiA8ZGlnZXN0IGluIGhleD4iICovCisJcmVzcG9uc2UgPSB4c3RyZm10KCIlcyAlcyIsIHVzZXIsIGhleCk7CisJcmVzcF9sZW4gPSBzdHJsZW4ocmVzcG9uc2UpOworCisJcmVzcG9uc2VfNjQgPSB4bWFsbG9jeihFTkNPREVEX1NJWkUocmVzcF9sZW4pKTsKKwllbmNvZGVkX2xlbiA9IEVWUF9FbmNvZGVCbG9jaygodW5zaWduZWQgY2hhciAqKXJlc3BvbnNlXzY0LAorCQkJCSAgICAgICh1bnNpZ25lZCBjaGFyICopcmVzcG9uc2UsIHJlc3BfbGVuKTsKKwlpZiAoZW5jb2RlZF9sZW4gPCAwKQorCQlkaWUoIkVWUF9FbmNvZGVCbG9jayBlcnJvciIpOworCXJldHVybiAoY2hhciAqKXJlc3BvbnNlXzY0OworfQorCisjZWxzZQorCitzdGF0aWMgY2hhciAqY3JhbShjb25zdCBjaGFyICpjaGFsbGVuZ2VfNjQsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKnBhc3MpCit7CisJZGllKCJJZiB5b3Ugd2FudCB0byB1c2UgQ1JBTS1NRDUgYXV0aGVudGljYXRlIG1ldGhvZCwgIgorCSAgICAieW91IGhhdmUgdG8gYnVpbGQgZ2l0LWltYXAtc2VuZCB3aXRoIE9wZW5TU0wgbGlicmFyeS4iKTsKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbnQgYXV0aF9jcmFtX21kNShzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LCBzdHJ1Y3QgaW1hcF9jbWQgKmNtZCwgY29uc3QgY2hhciAqcHJvbXB0KQoreworCWludCByZXQ7CisJY2hhciAqcmVzcG9uc2U7CisKKwlyZXNwb25zZSA9IGNyYW0ocHJvbXB0LCBzZXJ2ZXIudXNlciwgc2VydmVyLnBhc3MpOworCisJcmV0ID0gc29ja2V0X3dyaXRlKCZjdHgtPmltYXAtPmJ1Zi5zb2NrLCByZXNwb25zZSwgc3RybGVuKHJlc3BvbnNlKSk7CisJaWYgKHJldCAhPSBzdHJsZW4ocmVzcG9uc2UpKQorCQlyZXR1cm4gZXJyb3IoIklNQVAgZXJyb3I6IHNlbmRpbmcgcmVzcG9uc2UgZmFpbGVkIik7CisKKwlmcmVlKHJlc3BvbnNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJfZmlsbF9jcmVkZW50aWFsKHN0cnVjdCBpbWFwX3NlcnZlcl9jb25mICpzcnZjLCBzdHJ1Y3QgY3JlZGVudGlhbCAqY3JlZCkKK3sKKwlpZiAoc3J2Yy0+dXNlciAmJiBzcnZjLT5wYXNzKQorCQlyZXR1cm47CisKKwljcmVkLT5wcm90b2NvbCA9IHhzdHJkdXAoc3J2Yy0+dXNlX3NzbCA/ICJpbWFwcyIgOiAiaW1hcCIpOworCWNyZWQtPmhvc3QgPSB4c3RyZHVwKHNydmMtPmhvc3QpOworCisJY3JlZC0+dXNlcm5hbWUgPSB4c3RyZHVwX29yX251bGwoc3J2Yy0+dXNlcik7CisJY3JlZC0+cGFzc3dvcmQgPSB4c3RyZHVwX29yX251bGwoc3J2Yy0+cGFzcyk7CisKKwljcmVkZW50aWFsX2ZpbGwoY3JlZCk7CisKKwlpZiAoIXNydmMtPnVzZXIpCisJCXNydmMtPnVzZXIgPSB4c3RyZHVwKGNyZWQtPnVzZXJuYW1lKTsKKwlpZiAoIXNydmMtPnBhc3MpCisJCXNydmMtPnBhc3MgPSB4c3RyZHVwKGNyZWQtPnBhc3N3b3JkKTsKK30KKworc3RhdGljIHN0cnVjdCBpbWFwX3N0b3JlICppbWFwX29wZW5fc3RvcmUoc3RydWN0IGltYXBfc2VydmVyX2NvbmYgKnNydmMsIGNoYXIgKmZvbGRlcikKK3sKKwlzdHJ1Y3QgY3JlZGVudGlhbCBjcmVkID0gQ1JFREVOVElBTF9JTklUOworCXN0cnVjdCBpbWFwX3N0b3JlICpjdHg7CisJc3RydWN0IGltYXAgKmltYXA7CisJY2hhciAqYXJnLCAqcnNwOworCWludCBzID0gLTEsIHByZWF1dGg7CisKKwljdHggPSB4Y2FsbG9jKDEsIHNpemVvZigqY3R4KSk7CisKKwljdHgtPmltYXAgPSBpbWFwID0geGNhbGxvYygxLCBzaXplb2YoKmltYXApKTsKKwlpbWFwLT5idWYuc29jay5mZFswXSA9IGltYXAtPmJ1Zi5zb2NrLmZkWzFdID0gLTE7CisJaW1hcC0+aW5fcHJvZ3Jlc3NfYXBwZW5kID0gJmltYXAtPmluX3Byb2dyZXNzOworCisJLyogb3BlbiBjb25uZWN0aW9uIHRvIElNQVAgc2VydmVyICovCisKKwlpZiAoc3J2Yy0+dHVubmVsKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHR1bm5lbCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQlpbWFwX2luZm8oIlN0YXJ0aW5nIHR1bm5lbCAnJXMnLi4uICIsIHNydmMtPnR1bm5lbCk7CisKKwkJYXJndl9hcnJheV9wdXNoKCZ0dW5uZWwuYXJncywgc3J2Yy0+dHVubmVsKTsKKwkJdHVubmVsLnVzZV9zaGVsbCA9IDE7CisJCXR1bm5lbC5pbiA9IC0xOworCQl0dW5uZWwub3V0ID0gLTE7CisJCWlmIChzdGFydF9jb21tYW5kKCZ0dW5uZWwpKQorCQkJZGllKCJjYW5ub3Qgc3RhcnQgcHJveHkgJXMiLCBzcnZjLT50dW5uZWwpOworCisJCWltYXAtPmJ1Zi5zb2NrLmZkWzBdID0gdHVubmVsLm91dDsKKwkJaW1hcC0+YnVmLnNvY2suZmRbMV0gPSB0dW5uZWwuaW47CisKKwkJaW1hcF9pbmZvKCJva1xuIik7CisJfSBlbHNlIHsKKyNpZm5kZWYgTk9fSVBWNgorCQlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTAsICphaTsKKwkJaW50IGdhaTsKKwkJY2hhciBwb3J0c3RyWzZdOworCisJCXhzbnByaW50Zihwb3J0c3RyLCBzaXplb2YocG9ydHN0ciksICIlZCIsIHNydmMtPnBvcnQpOworCisJCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworCQloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworCQloaW50cy5haV9wcm90b2NvbCA9IElQUFJPVE9fVENQOworCisJCWltYXBfaW5mbygiUmVzb2x2aW5nICVzLi4uICIsIHNydmMtPmhvc3QpOworCQlnYWkgPSBnZXRhZGRyaW5mbyhzcnZjLT5ob3N0LCBwb3J0c3RyLCAmaGludHMsICZhaSk7CisJCWlmIChnYWkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiZ2V0YWRkcmluZm86ICVzXG4iLCBnYWlfc3RyZXJyb3IoZ2FpKSk7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaW1hcF9pbmZvKCJva1xuIik7CisKKwkJZm9yIChhaTAgPSBhaTsgYWk7IGFpID0gYWktPmFpX25leHQpIHsKKwkJCWNoYXIgYWRkcltOSV9NQVhIT1NUXTsKKworCQkJcyA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsCisJCQkJICAgYWktPmFpX3Byb3RvY29sKTsKKwkJCWlmIChzIDwgMCkKKwkJCQljb250aW51ZTsKKworCQkJZ2V0bmFtZWluZm8oYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuLCBhZGRyLAorCQkJCSAgICBzaXplb2YoYWRkciksIE5VTEwsIDAsIE5JX05VTUVSSUNIT1NUKTsKKwkJCWltYXBfaW5mbygiQ29ubmVjdGluZyB0byBbJXNdOiVzLi4uICIsIGFkZHIsIHBvcnRzdHIpOworCisJCQlpZiAoY29ubmVjdChzLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pIDwgMCkgeworCQkJCWNsb3NlKHMpOworCQkJCXMgPSAtMTsKKwkJCQlwZXJyb3IoImNvbm5lY3QiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKwkJZnJlZWFkZHJpbmZvKGFpMCk7CisjZWxzZSAvKiBOT19JUFY2ICovCisJCXN0cnVjdCBob3N0ZW50ICpoZTsKKwkJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisKKwkJbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworCQlhZGRyLnNpbl9wb3J0ID0gaHRvbnMoc3J2Yy0+cG9ydCk7CisJCWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisKKwkJaW1hcF9pbmZvKCJSZXNvbHZpbmcgJXMuLi4gIiwgc3J2Yy0+aG9zdCk7CisJCWhlID0gZ2V0aG9zdGJ5bmFtZShzcnZjLT5ob3N0KTsKKwkJaWYgKCFoZSkgeworCQkJcGVycm9yKCJnZXRob3N0YnluYW1lIik7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaW1hcF9pbmZvKCJva1xuIik7CisKKwkJYWRkci5zaW5fYWRkci5zX2FkZHIgPSAqKChpbnQgKikgaGUtPmhfYWRkcl9saXN0WzBdKTsKKworCQlzID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKworCQlpbWFwX2luZm8oIkNvbm5lY3RpbmcgdG8gJXM6JWh1Li4uICIsIGluZXRfbnRvYShhZGRyLnNpbl9hZGRyKSwgbnRvaHMoYWRkci5zaW5fcG9ydCkpOworCQlpZiAoY29ubmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSkpIHsKKwkJCWNsb3NlKHMpOworCQkJcyA9IC0xOworCQkJcGVycm9yKCJjb25uZWN0Iik7CisJCX0KKyNlbmRpZgorCQlpZiAocyA8IDApIHsKKwkJCWZwdXRzKCJFcnJvcjogdW5hYmxlIHRvIGNvbm5lY3QgdG8gc2VydmVyLlxuIiwgc3RkZXJyKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCWltYXAtPmJ1Zi5zb2NrLmZkWzBdID0gczsKKwkJaW1hcC0+YnVmLnNvY2suZmRbMV0gPSBkdXAocyk7CisKKwkJaWYgKHNydmMtPnVzZV9zc2wgJiYKKwkJICAgIHNzbF9zb2NrZXRfY29ubmVjdCgmaW1hcC0+YnVmLnNvY2ssIDAsIHNydmMtPnNzbF92ZXJpZnkpKSB7CisJCQljbG9zZShzKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlpbWFwX2luZm8oIm9rXG4iKTsKKwl9CisKKwkvKiByZWFkIHRoZSBncmVldGluZyBzdHJpbmcgKi8KKwlpZiAoYnVmZmVyX2dldHMoJmltYXAtPmJ1ZiwgJnJzcCkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiBubyBncmVldGluZyByZXNwb25zZVxuIik7CisJCWdvdG8gYmFpbDsKKwl9CisJYXJnID0gbmV4dF9hcmcoJnJzcCk7CisJaWYgKCFhcmcgfHwgKmFyZyAhPSAnKicgfHwgKGFyZyA9IG5leHRfYXJnKCZyc3ApKSA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogaW52YWxpZCBncmVldGluZyByZXNwb25zZVxuIik7CisJCWdvdG8gYmFpbDsKKwl9CisJcHJlYXV0aCA9IDA7CisJaWYgKCFzdHJjbXAoIlBSRUFVVEgiLCBhcmcpKQorCQlwcmVhdXRoID0gMTsKKwllbHNlIGlmIChzdHJjbXAoIk9LIiwgYXJnKSAhPSAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogdW5rbm93biBncmVldGluZyByZXNwb25zZVxuIik7CisJCWdvdG8gYmFpbDsKKwl9CisJcGFyc2VfcmVzcG9uc2VfY29kZShjdHgsIE5VTEwsIHJzcCk7CisJaWYgKCFpbWFwLT5jYXBzICYmIGltYXBfZXhlYyhjdHgsIE5VTEwsICJDQVBBQklMSVRZIikgIT0gUkVTUF9PSykKKwkJZ290byBiYWlsOworCisJaWYgKCFwcmVhdXRoKSB7CisjaWZuZGVmIE5PX09QRU5TU0wKKwkJaWYgKCFzcnZjLT51c2Vfc3NsICYmIENBUChTVEFSVFRMUykpIHsKKwkJCWlmIChpbWFwX2V4ZWMoY3R4LCBOVUxMLCAiU1RBUlRUTFMiKSAhPSBSRVNQX09LKQorCQkJCWdvdG8gYmFpbDsKKwkJCWlmIChzc2xfc29ja2V0X2Nvbm5lY3QoJmltYXAtPmJ1Zi5zb2NrLCAxLAorCQkJCQkgICAgICAgc3J2Yy0+c3NsX3ZlcmlmeSkpCisJCQkJZ290byBiYWlsOworCQkJLyogY2FwYWJpbGl0aWVzIG1heSBoYXZlIGNoYW5nZWQsIHNvIGdldCB0aGUgbmV3IGNhcGFiaWxpdGllcyAqLworCQkJaWYgKGltYXBfZXhlYyhjdHgsIE5VTEwsICJDQVBBQklMSVRZIikgIT0gUkVTUF9PSykKKwkJCQlnb3RvIGJhaWw7CisJCX0KKyNlbmRpZgorCQlpbWFwX2luZm8oIkxvZ2dpbmcgaW4uLi5cbiIpOworCQlzZXJ2ZXJfZmlsbF9jcmVkZW50aWFsKHNydmMsICZjcmVkKTsKKworCQlpZiAoc3J2Yy0+YXV0aF9tZXRob2QpIHsKKwkJCXN0cnVjdCBpbWFwX2NtZF9jYiBjYjsKKworCQkJaWYgKCFzdHJjbXAoc3J2Yy0+YXV0aF9tZXRob2QsICJDUkFNLU1ENSIpKSB7CisJCQkJaWYgKCFDQVAoQVVUSF9DUkFNX01ENSkpIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsICJZb3Ugc3BlY2lmaWVkICIKKwkJCQkJCSJDUkFNLU1ENSBhcyBhdXRoZW50aWNhdGlvbiBtZXRob2QsICIKKwkJCQkJCSJidXQgJXMgZG9lc24ndCBzdXBwb3J0IGl0LlxuIiwgc3J2Yy0+aG9zdCk7CisJCQkJCWdvdG8gYmFpbDsKKwkJCQl9CisJCQkJLyogQ1JBTS1NRDUgKi8KKworCQkJCW1lbXNldCgmY2IsIDAsIHNpemVvZihjYikpOworCQkJCWNiLmNvbnQgPSBhdXRoX2NyYW1fbWQ1OworCQkJCWlmIChpbWFwX2V4ZWMoY3R4LCAmY2IsICJBVVRIRU5USUNBVEUgQ1JBTS1NRDUiKSAhPSBSRVNQX09LKSB7CisJCQkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogQVVUSEVOVElDQVRFIENSQU0tTUQ1IGZhaWxlZFxuIik7CisJCQkJCWdvdG8gYmFpbDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBhdXRoZW50aWNhdGlvbiBtZXRob2Q6JXNcbiIsIHNydmMtPmhvc3QpOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChDQVAoTk9MT0dJTikpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlNraXBwaW5nIGFjY291bnQgJXNAJXMsIHNlcnZlciBmb3JiaWRzIExPR0lOXG4iLAorCQkJCQlzcnZjLT51c2VyLCBzcnZjLT5ob3N0KTsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCQlpZiAoIWltYXAtPmJ1Zi5zb2NrLnNzbCkKKwkJCQlpbWFwX3dhcm4oIioqKiBJTUFQIFdhcm5pbmcgKioqIFBhc3N3b3JkIGlzIGJlaW5nICIKKwkJCQkJICAic2VudCBpbiB0aGUgY2xlYXJcbiIpOworCQkJaWYgKGltYXBfZXhlYyhjdHgsIE5VTEwsICJMT0dJTiBcIiVzXCIgXCIlc1wiIiwgc3J2Yy0+dXNlciwgc3J2Yy0+cGFzcykgIT0gUkVTUF9PSykgeworCQkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogTE9HSU4gZmFpbGVkXG4iKTsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCX0KKwl9IC8qICFwcmVhdXRoICovCisKKwlpZiAoY3JlZC51c2VybmFtZSkKKwkJY3JlZGVudGlhbF9hcHByb3ZlKCZjcmVkKTsKKwljcmVkZW50aWFsX2NsZWFyKCZjcmVkKTsKKworCS8qIGNoZWNrIHRoZSB0YXJnZXQgbWFpbGJveCBleGlzdHMgKi8KKwljdHgtPm5hbWUgPSBmb2xkZXI7CisJc3dpdGNoIChpbWFwX2V4ZWMoY3R4LCBOVUxMLCAiRVhBTUlORSBcIiVzXCIiLCBjdHgtPm5hbWUpKSB7CisJY2FzZSBSRVNQX09LOgorCQkvKiBvayAqLworCQlicmVhazsKKwljYXNlIFJFU1BfQkFEOgorCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IGNvdWxkIG5vdCBjaGVjayBtYWlsYm94XG4iKTsKKwkJZ290byBvdXQ7CisJY2FzZSBSRVNQX05POgorCQlpZiAoaW1hcF9leGVjKGN0eCwgTlVMTCwgIkNSRUFURSBcIiVzXCIiLCBjdHgtPm5hbWUpID09IFJFU1BfT0spIHsKKwkJCWltYXBfaW5mbygiQ3JlYXRlZCBtaXNzaW5nIG1haWxib3hcbiIpOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiBjb3VsZCBub3QgY3JlYXRlIG1pc3NpbmcgbWFpbGJveFxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlicmVhazsKKwl9CisKKwljdHgtPnByZWZpeCA9ICIiOworCXJldHVybiBjdHg7CisKK2JhaWw6CisJaWYgKGNyZWQudXNlcm5hbWUpCisJCWNyZWRlbnRpYWxfcmVqZWN0KCZjcmVkKTsKKwljcmVkZW50aWFsX2NsZWFyKCZjcmVkKTsKKworIG91dDoKKwlpbWFwX2Nsb3NlX3N0b3JlKGN0eCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBJbnNlcnQgQ1IgY2hhcmFjdGVycyBhcyBuZWNlc3NhcnkgaW4gKm1zZyB0byBlbnN1cmUgdGhhdCBldmVyeSBMRgorICogY2hhcmFjdGVyIGluICptc2cgaXMgcHJlY2VkZWQgYnkgYSBDUi4KKyAqLworc3RhdGljIHZvaWQgbGZfdG9fY3JsZihzdHJ1Y3Qgc3RyYnVmICptc2cpCit7CisJY2hhciAqbmV3X21zZzsKKwlzaXplX3QgaSwgajsKKwljaGFyIGxhc3RjOworCisJLyogRmlyc3QgcGFzczogdGFsbHksIGluIGosIHRoZSBzaXplIG9mIHRoZSBuZXdfbXNnIHN0cmluZzogKi8KKwlmb3IgKGkgPSBqID0gMCwgbGFzdGMgPSAnXDAnOyBpIDwgbXNnLT5sZW47IGkrKykgeworCQlpZiAobXNnLT5idWZbaV0gPT0gJ1xuJyAmJiBsYXN0YyAhPSAnXHInKQorCQkJaisrOyAvKiBhIENSIHdpbGwgbmVlZCB0byBiZSBhZGRlZCBoZXJlICovCisJCWxhc3RjID0gbXNnLT5idWZbaV07CisJCWorKzsKKwl9CisKKwluZXdfbXNnID0geG1hbGxvY3ooaik7CisKKwkvKgorCSAqIFNlY29uZCBwYXNzOiB3cml0ZSB0aGUgbmV3X21zZyBzdHJpbmcuICBOb3RlIHRoYXQgdGhpcyBsb29wIGlzCisJICogb3RoZXJ3aXNlIGlkZW50aWNhbCB0byB0aGUgZmlyc3QgcGFzcy4KKwkgKi8KKwlmb3IgKGkgPSBqID0gMCwgbGFzdGMgPSAnXDAnOyBpIDwgbXNnLT5sZW47IGkrKykgeworCQlpZiAobXNnLT5idWZbaV0gPT0gJ1xuJyAmJiBsYXN0YyAhPSAnXHInKQorCQkJbmV3X21zZ1tqKytdID0gJ1xyJzsKKwkJbGFzdGMgPSBuZXdfbXNnW2orK10gPSBtc2ctPmJ1ZltpXTsKKwl9CisJc3RyYnVmX2F0dGFjaChtc2csIG5ld19tc2csIGosIGogKyAxKTsKK30KKworLyoKKyAqIFN0b3JlIG1zZyB0byBJTUFQLiAgQWxzbyBkZXRhY2ggYW5kIGZyZWUgdGhlIGRhdGEgZnJvbSBtc2ctPmRhdGEsCisgKiBsZWF2aW5nIG1zZy0+ZGF0YSBlbXB0eS4KKyAqLworc3RhdGljIGludCBpbWFwX3N0b3JlX21zZyhzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LCBzdHJ1Y3Qgc3RyYnVmICptc2cpCit7CisJc3RydWN0IGltYXAgKmltYXAgPSBjdHgtPmltYXA7CisJc3RydWN0IGltYXBfY21kX2NiIGNiOworCWNvbnN0IGNoYXIgKnByZWZpeCwgKmJveDsKKwlpbnQgcmV0OworCisJbGZfdG9fY3JsZihtc2cpOworCW1lbXNldCgmY2IsIDAsIHNpemVvZihjYikpOworCisJY2IuZGxlbiA9IG1zZy0+bGVuOworCWNiLmRhdGEgPSBzdHJidWZfZGV0YWNoKG1zZywgTlVMTCk7CisKKwlib3ggPSBjdHgtPm5hbWU7CisJcHJlZml4ID0gIXN0cmNtcChib3gsICJJTkJPWCIpID8gIiIgOiBjdHgtPnByZWZpeDsKKwlyZXQgPSBpbWFwX2V4ZWNfbShjdHgsICZjYiwgIkFQUEVORCBcIiVzJXNcIiAiLCBwcmVmaXgsIGJveCk7CisJaW1hcC0+Y2FwcyA9IGltYXAtPnJjYXBzOworCWlmIChyZXQgIT0gRFJWX09LKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIERSVl9PSzsKK30KKworc3RhdGljIHZvaWQgd3JhcF9pbl9odG1sKHN0cnVjdCBzdHJidWYgKm1zZykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBjaGFyICpjb250ZW50X3R5cGUgPSAiQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7XG4iOworCXN0YXRpYyBjaGFyICpwcmVfb3BlbiA9ICI8cHJlPlxuIjsKKwlzdGF0aWMgY2hhciAqcHJlX2Nsb3NlID0gIjwvcHJlPlxuIjsKKwljb25zdCBjaGFyICpib2R5ID0gc3Ryc3RyKG1zZy0+YnVmLCAiXG5cbiIpOworCisJaWYgKCFib2R5KQorCQlyZXR1cm47IC8qIEhlYWRlcnMgYnV0IG5vIGJvZHk7IG5vIHdyYXBwaW5nIG5lZWRlZCAqLworCisJYm9keSArPSAyOworCisJc3RyYnVmX2FkZCgmYnVmLCBtc2ctPmJ1ZiwgYm9keSAtIG1zZy0+YnVmIC0gMSk7CisJc3RyYnVmX2FkZHN0cigmYnVmLCBjb250ZW50X3R5cGUpOworCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIHByZV9vcGVuKTsKKwlzdHJidWZfYWRkc3RyX3htbF9xdW90ZWQoJmJ1ZiwgYm9keSk7CisJc3RyYnVmX2FkZHN0cigmYnVmLCBwcmVfY2xvc2UpOworCisJc3RyYnVmX3JlbGVhc2UobXNnKTsKKwkqbXNnID0gYnVmOworfQorCisjZGVmaW5lIENIVU5LU0laRSAweDEwMDAKKworc3RhdGljIGludCByZWFkX21lc3NhZ2UoRklMRSAqZiwgc3RydWN0IHN0cmJ1ZiAqYWxsX21zZ3MpCit7CisJZG8geworCQlpZiAoc3RyYnVmX2ZyZWFkKGFsbF9tc2dzLCBDSFVOS1NJWkUsIGYpIDw9IDApCisJCQlicmVhazsKKwl9IHdoaWxlICghZmVvZihmKSk7CisKKwlyZXR1cm4gZmVycm9yKGYpID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IGNvdW50X21lc3NhZ2VzKHN0cnVjdCBzdHJidWYgKmFsbF9tc2dzKQoreworCWludCBjb3VudCA9IDA7CisJY2hhciAqcCA9IGFsbF9tc2dzLT5idWY7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoc3RhcnRzX3dpdGgocCwgIkZyb20gIikpIHsKKwkJCXAgPSBzdHJzdHIocCs1LCAiXG5Gcm9tOiAiKTsKKwkJCWlmICghcCkgYnJlYWs7CisJCQlwID0gc3Ryc3RyKHArNywgIlxuRGF0ZTogIik7CisJCQlpZiAoIXApIGJyZWFrOworCQkJcCA9IHN0cnN0cihwKzcsICJcblN1YmplY3Q6ICIpOworCQkJaWYgKCFwKSBicmVhazsKKwkJCXAgKz0gMTA7CisJCQljb3VudCsrOworCQl9CisJCXAgPSBzdHJzdHIocCs1LCAiXG5Gcm9tICIpOworCQlpZiAoIXApCisJCQlicmVhazsKKwkJcCsrOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBDb3B5IHRoZSBuZXh0IG1lc3NhZ2UgZnJvbSBhbGxfbXNncywgc3RhcnRpbmcgYXQgb2Zmc2V0ICpvZnMsIHRvCisgKiBtc2cuICBVcGRhdGUgKm9mcyB0byB0aGUgc3RhcnQgb2YgdGhlIGZvbGxvd2luZyBtZXNzYWdlLiAgUmV0dXJuCisgKiB0cnVlIGlmZiBhIG1lc3NhZ2Ugd2FzIHN1Y2Nlc3NmdWxseSBjb3BpZWQuCisgKi8KK3N0YXRpYyBpbnQgc3BsaXRfbXNnKHN0cnVjdCBzdHJidWYgKmFsbF9tc2dzLCBzdHJ1Y3Qgc3RyYnVmICptc2csIGludCAqb2ZzKQoreworCWNoYXIgKnAsICpkYXRhOworCXNpemVfdCBsZW47CisKKwlpZiAoKm9mcyA+PSBhbGxfbXNncy0+bGVuKQorCQlyZXR1cm4gMDsKKworCWRhdGEgPSAmYWxsX21zZ3MtPmJ1Zlsqb2ZzXTsKKwlsZW4gPSBhbGxfbXNncy0+bGVuIC0gKm9mczsKKworCWlmIChsZW4gPCA1IHx8ICFzdGFydHNfd2l0aChkYXRhLCAiRnJvbSAiKSkKKwkJcmV0dXJuIDA7CisKKwlwID0gc3RyY2hyKGRhdGEsICdcbicpOworCWlmIChwKSB7CisJCXArKzsKKwkJbGVuIC09IHAgLSBkYXRhOworCQkqb2ZzICs9IHAgLSBkYXRhOworCQlkYXRhID0gcDsKKwl9CisKKwlwID0gc3Ryc3RyKGRhdGEsICJcbkZyb20gIik7CisJaWYgKHApCisJCWxlbiA9ICZwWzFdIC0gZGF0YTsKKworCXN0cmJ1Zl9hZGQobXNnLCBkYXRhLCBsZW4pOworCSpvZnMgKz0gbGVuOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBnaXRfaW1hcF9jb25maWcodm9pZCkKK3sKKwljb25zdCBjaGFyICp2YWwgPSBOVUxMOworCisJZ2l0X2NvbmZpZ19nZXRfYm9vbCgiaW1hcC5zc2x2ZXJpZnkiLCAmc2VydmVyLnNzbF92ZXJpZnkpOworCWdpdF9jb25maWdfZ2V0X2Jvb2woImltYXAucHJlZm9ybWF0dGVkaHRtbCIsICZzZXJ2ZXIudXNlX2h0bWwpOworCWdpdF9jb25maWdfZ2V0X3N0cmluZygiaW1hcC5mb2xkZXIiLCAmc2VydmVyLmZvbGRlcik7CisKKwlpZiAoIWdpdF9jb25maWdfZ2V0X3ZhbHVlKCJpbWFwLmhvc3QiLCAmdmFsKSkgeworCQlpZiAoIXZhbCkgeworCQkJZ2l0X2RpZV9jb25maWcoImltYXAuaG9zdCIsICJNaXNzaW5nIHZhbHVlIGZvciAnaW1hcC5ob3N0JyIpOworCQl9IGVsc2UgeworCQkJaWYgKHN0YXJ0c193aXRoKHZhbCwgImltYXA6IikpCisJCQkJdmFsICs9IDU7CisJCQllbHNlIGlmIChzdGFydHNfd2l0aCh2YWwsICJpbWFwczoiKSkgeworCQkJCXZhbCArPSA2OworCQkJCXNlcnZlci51c2Vfc3NsID0gMTsKKwkJCX0KKwkJCWlmIChzdGFydHNfd2l0aCh2YWwsICIvLyIpKQorCQkJCXZhbCArPSAyOworCQkJc2VydmVyLmhvc3QgPSB4c3RyZHVwKHZhbCk7CisJCX0KKwl9CisKKwlnaXRfY29uZmlnX2dldF9zdHJpbmcoImltYXAudXNlciIsICZzZXJ2ZXIudXNlcik7CisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJpbWFwLnBhc3MiLCAmc2VydmVyLnBhc3MpOworCWdpdF9jb25maWdfZ2V0X2ludCgiaW1hcC5wb3J0IiwgJnNlcnZlci5wb3J0KTsKKwlnaXRfY29uZmlnX2dldF9zdHJpbmcoImltYXAudHVubmVsIiwgJnNlcnZlci50dW5uZWwpOworCWdpdF9jb25maWdfZ2V0X3N0cmluZygiaW1hcC5hdXRobWV0aG9kIiwgJnNlcnZlci5hdXRoX21ldGhvZCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX21zZ3NfdG9faW1hcChzdHJ1Y3QgaW1hcF9zZXJ2ZXJfY29uZiAqc2VydmVyLAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYqIGFsbF9tc2dzLCBpbnQgdG90YWwpCit7CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4ID0gTlVMTDsKKwlpbnQgb2ZzID0gMDsKKwlpbnQgcjsKKwlpbnQgbiA9IDA7CisKKwljdHggPSBpbWFwX29wZW5fc3RvcmUoc2VydmVyLCBzZXJ2ZXItPmZvbGRlcik7CisJaWYgKCFjdHgpIHsKKwkJZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gb3BlbiBzdG9yZVxuIik7CisJCXJldHVybiAxOworCX0KKwljdHgtPm5hbWUgPSBzZXJ2ZXItPmZvbGRlcjsKKworCWZwcmludGYoc3RkZXJyLCAic2VuZGluZyAlZCBtZXNzYWdlJXNcbiIsIHRvdGFsLCAodG90YWwgIT0gMSkgPyAicyIgOiAiIik7CisJd2hpbGUgKDEpIHsKKwkJdW5zaWduZWQgcGVyY2VudCA9IG4gKiAxMDAgLyB0b3RhbDsKKworCQlmcHJpbnRmKHN0ZGVyciwgIiU0dSUlICglZC8lZCkgZG9uZVxyIiwgcGVyY2VudCwgbiwgdG90YWwpOworCisJCWlmICghc3BsaXRfbXNnKGFsbF9tc2dzLCAmbXNnLCAmb2ZzKSkKKwkJCWJyZWFrOworCQlpZiAoc2VydmVyLT51c2VfaHRtbCkKKwkJCXdyYXBfaW5faHRtbCgmbXNnKTsKKwkJciA9IGltYXBfc3RvcmVfbXNnKGN0eCwgJm1zZyk7CisJCWlmIChyICE9IERSVl9PSykKKwkJCWJyZWFrOworCQluKys7CisJfQorCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKworCWltYXBfY2xvc2Vfc3RvcmUoY3R4KTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgVVNFX0NVUkxfRk9SX0lNQVBfU0VORAorc3RhdGljIENVUkwgKnNldHVwX2N1cmwoc3RydWN0IGltYXBfc2VydmVyX2NvbmYgKnNydmMsIHN0cnVjdCBjcmVkZW50aWFsICpjcmVkKQoreworCUNVUkwgKmN1cmw7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqdXJpX2VuY29kZWRfZm9sZGVyOworCisJaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykKKwkJZGllKCJjdXJsX2dsb2JhbF9pbml0IGZhaWxlZCIpOworCisJY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisKKwlpZiAoIWN1cmwpCisJCWRpZSgiY3VybF9lYXN5X2luaXQgZmFpbGVkIik7CisKKwlzZXJ2ZXJfZmlsbF9jcmVkZW50aWFsKCZzZXJ2ZXIsIGNyZWQpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VU0VSTkFNRSwgc2VydmVyLnVzZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QQVNTV09SRCwgc2VydmVyLnBhc3MpOworCisJc3RyYnVmX2FkZHN0cigmcGF0aCwgc2VydmVyLnVzZV9zc2wgPyAiaW1hcHM6Ly8iIDogImltYXA6Ly8iKTsKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBzZXJ2ZXIuaG9zdCk7CisJaWYgKCFwYXRoLmxlbiB8fCBwYXRoLmJ1ZltwYXRoLmxlbiAtIDFdICE9ICcvJykKKwkJc3RyYnVmX2FkZGNoKCZwYXRoLCAnLycpOworCisJdXJpX2VuY29kZWRfZm9sZGVyID0gY3VybF9lYXN5X2VzY2FwZShjdXJsLCBzZXJ2ZXIuZm9sZGVyLCAwKTsKKwlpZiAoIXVyaV9lbmNvZGVkX2ZvbGRlcikKKwkJZGllKCJmYWlsZWQgdG8gZW5jb2RlIHNlcnZlciBmb2xkZXIiKTsKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCB1cmlfZW5jb2RlZF9mb2xkZXIpOworCWN1cmxfZnJlZSh1cmlfZW5jb2RlZF9mb2xkZXIpOworCisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgcGF0aC5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUE9SVCwgc2VydmVyLnBvcnQpOworCisJaWYgKHNlcnZlci5hdXRoX21ldGhvZCkgeworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPCAweDA3MjIwMAorCQl3YXJuaW5nKCJObyBMT0dJTl9PUFRJT05TIHN1cHBvcnQgaW4gdGhpcyBjVVJMIHZlcnNpb24iKTsKKyNlbHNlCisJCXN0cnVjdCBzdHJidWYgYXV0aCA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkc3RyKCZhdXRoLCAiQVVUSD0iKTsKKwkJc3RyYnVmX2FkZHN0cigmYXV0aCwgc2VydmVyLmF1dGhfbWV0aG9kKTsKKwkJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0xPR0lOX09QVElPTlMsIGF1dGguYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmF1dGgpOworI2VuZGlmCisJfQorCisJaWYgKCFzZXJ2ZXIudXNlX3NzbCkKKwkJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VTRV9TU0wsIChsb25nKUNVUkxVU0VTU0xfVFJZKTsKKworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgc2VydmVyLnNzbF92ZXJpZnkpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgc2VydmVyLnNzbF92ZXJpZnkpOworCisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgZnJlYWRfYnVmZmVyKTsKKworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUExPQUQsIDFMKTsKKworCWlmICgwIDwgdmVyYm9zaXR5IHx8IGdldGVudigiR0lUX0NVUkxfVkVSQk9TRSIpKQorCQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCXNldHVwX2N1cmxfdHJhY2UoY3VybCk7CisKKwlyZXR1cm4gY3VybDsKK30KKworc3RhdGljIGludCBjdXJsX2FwcGVuZF9tc2dzX3RvX2ltYXAoc3RydWN0IGltYXBfc2VydmVyX2NvbmYgKnNlcnZlciwKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiogYWxsX21zZ3MsIGludCB0b3RhbCkKK3sKKwlpbnQgb2ZzID0gMDsKKwlpbnQgbiA9IDA7CisJc3RydWN0IGJ1ZmZlciBtc2didWYgPSB7IFNUUkJVRl9JTklULCAwIH07CisJQ1VSTCAqY3VybDsKKwlDVVJMY29kZSByZXMgPSBDVVJMRV9PSzsKKwlzdHJ1Y3QgY3JlZGVudGlhbCBjcmVkID0gQ1JFREVOVElBTF9JTklUOworCisJY3VybCA9IHNldHVwX2N1cmwoc2VydmVyLCAmY3JlZCk7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQUREQVRBLCAmbXNnYnVmKTsKKworCWZwcmludGYoc3RkZXJyLCAic2VuZGluZyAlZCBtZXNzYWdlJXNcbiIsIHRvdGFsLCAodG90YWwgIT0gMSkgPyAicyIgOiAiIik7CisJd2hpbGUgKDEpIHsKKwkJdW5zaWduZWQgcGVyY2VudCA9IG4gKiAxMDAgLyB0b3RhbDsKKwkJaW50IHByZXZfbGVuOworCisJCWZwcmludGYoc3RkZXJyLCAiJTR1JSUgKCVkLyVkKSBkb25lXHIiLCBwZXJjZW50LCBuLCB0b3RhbCk7CisKKwkJcHJldl9sZW4gPSBtc2didWYuYnVmLmxlbjsKKwkJaWYgKCFzcGxpdF9tc2coYWxsX21zZ3MsICZtc2didWYuYnVmLCAmb2ZzKSkKKwkJCWJyZWFrOworCQlpZiAoc2VydmVyLT51c2VfaHRtbCkKKwkJCXdyYXBfaW5faHRtbCgmbXNnYnVmLmJ1Zik7CisJCWxmX3RvX2NybGYoJm1zZ2J1Zi5idWYpOworCisJCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTkZJTEVTSVpFX0xBUkdFLAorCQkJCSAoY3VybF9vZmZfdCkobXNnYnVmLmJ1Zi5sZW4tcHJldl9sZW4pKTsKKworCQlyZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKworCQlpZihyZXMgIT0gQ1VSTEVfT0spIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X3BlcmZvcm0oKSBmYWlsZWQ6ICVzXG4iLAorCQkJCQljdXJsX2Vhc3lfc3RyZXJyb3IocmVzKSk7CisJCQlicmVhazsKKwkJfQorCisJCW4rKzsKKwl9CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworCisJY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisJY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisJaWYgKGNyZWQudXNlcm5hbWUpIHsKKwkJaWYgKHJlcyA9PSBDVVJMRV9PSykKKwkJCWNyZWRlbnRpYWxfYXBwcm92ZSgmY3JlZCk7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MGQwMQorCQllbHNlIGlmIChyZXMgPT0gQ1VSTEVfTE9HSU5fREVOSUVEKQorI2Vsc2UKKwkJZWxzZQorI2VuZGlmCisJCQljcmVkZW50aWFsX3JlamVjdCgmY3JlZCk7CisJfQorCisJY3JlZGVudGlhbF9jbGVhcigmY3JlZCk7CisKKwlyZXR1cm4gcmVzICE9IENVUkxFX09LOworfQorI2VuZGlmCisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHN0cmJ1ZiBhbGxfbXNncyA9IFNUUkJVRl9JTklUOworCWludCB0b3RhbDsKKwlpbnQgbm9uZ2l0X29rOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vbmdpdF9vayk7CisJZ2l0X2ltYXBfY29uZmlnKCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCAoY29uc3QgY2hhciAqKilhcmd2LCAiIiwgaW1hcF9zZW5kX29wdGlvbnMsIGltYXBfc2VuZF91c2FnZSwgMCk7CisKKwlpZiAoYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGltYXBfc2VuZF91c2FnZSwgaW1hcF9zZW5kX29wdGlvbnMpOworCisjaWZuZGVmIFVTRV9DVVJMX0ZPUl9JTUFQX1NFTkQKKwlpZiAodXNlX2N1cmwpIHsKKwkJd2FybmluZygiLS1jdXJsIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBidWlsZCIpOworCQl1c2VfY3VybCA9IDA7CisJfQorI2VsaWYgZGVmaW5lZChOT19PUEVOU1NMKQorCWlmICghdXNlX2N1cmwpIHsKKwkJd2FybmluZygiLS1uby1jdXJsIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBidWlsZCIpOworCQl1c2VfY3VybCA9IDE7CisJfQorI2VuZGlmCisKKwlpZiAoIXNlcnZlci5wb3J0KQorCQlzZXJ2ZXIucG9ydCA9IHNlcnZlci51c2Vfc3NsID8gOTkzIDogMTQzOworCisJaWYgKCFzZXJ2ZXIuZm9sZGVyKSB7CisJCWZwcmludGYoc3RkZXJyLCAibm8gaW1hcCBzdG9yZSBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKCFzZXJ2ZXIuaG9zdCkgeworCQlpZiAoIXNlcnZlci50dW5uZWwpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAibm8gaW1hcCBob3N0IHNwZWNpZmllZFxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlzZXJ2ZXIuaG9zdCA9ICJ0dW5uZWwiOworCX0KKworCS8qIHJlYWQgdGhlIG1lc3NhZ2VzICovCisJaWYgKHJlYWRfbWVzc2FnZShzdGRpbiwgJmFsbF9tc2dzKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yIHJlYWRpbmcgaW5wdXRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoYWxsX21zZ3MubGVuID09IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJub3RoaW5nIHRvIHNlbmRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwl0b3RhbCA9IGNvdW50X21lc3NhZ2VzKCZhbGxfbXNncyk7CisJaWYgKCF0b3RhbCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIm5vIG1lc3NhZ2VzIHRvIHNlbmRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiB3cml0ZSBpdCB0byB0aGUgaW1hcCBzZXJ2ZXIgKi8KKworCWlmIChzZXJ2ZXIudHVubmVsKQorCQlyZXR1cm4gYXBwZW5kX21zZ3NfdG9faW1hcCgmc2VydmVyLCAmYWxsX21zZ3MsIHRvdGFsKTsKKworI2lmZGVmIFVTRV9DVVJMX0ZPUl9JTUFQX1NFTkQKKwlpZiAodXNlX2N1cmwpCisJCXJldHVybiBjdXJsX2FwcGVuZF9tc2dzX3RvX2ltYXAoJnNlcnZlciwgJmFsbF9tc2dzLCB0b3RhbCk7CisjZW5kaWYKKworCXJldHVybiBhcHBlbmRfbXNnc190b19pbWFwKCZzZXJ2ZXIsICZhbGxfbXNncywgdG90YWwpOworfQpkaWZmIC0tZ2l0IGEvaW50ZXJkaWZmLmMgYi9pbnRlcmRpZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODFkNjgwCi0tLSAvZGV2L251bGwKKysrIGIvaW50ZXJkaWZmLmMKQEAgLTAsMCArMSwyOCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJpbnRlcmRpZmYuaCIKKworc3RhdGljIHN0cnVjdCBzdHJidWYgKmlkaWZmX3ByZWZpeF9jYihzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQgc2hvd19pbnRlcmRpZmYoc3RydWN0IHJldl9pbmZvICpyZXYsIGludCBpbmRlbnQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBvcHRzOworCXN0cnVjdCBzdHJidWYgcHJlZml4ID0gU1RSQlVGX0lOSVQ7CisKKwltZW1jcHkoJm9wdHMsICZyZXYtPmRpZmZvcHQsIHNpemVvZihvcHRzKSk7CisJb3B0cy5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisJb3B0cy5vdXRwdXRfcHJlZml4ID0gaWRpZmZfcHJlZml4X2NiOworCXN0cmJ1Zl9hZGRjaGFycygmcHJlZml4LCAnICcsIGluZGVudCk7CisJb3B0cy5vdXRwdXRfcHJlZml4X2RhdGEgPSAmcHJlZml4OworCWRpZmZfc2V0dXBfZG9uZSgmb3B0cyk7CisKKwlkaWZmX3RyZWVfb2lkKHJldi0+aWRpZmZfb2lkMSwgcmV2LT5pZGlmZl9vaWQyLCAiIiwgJm9wdHMpOworCWRpZmZjb3JlX3N0ZCgmb3B0cyk7CisJZGlmZl9mbHVzaCgmb3B0cyk7CisKKwlzdHJidWZfcmVsZWFzZSgmcHJlZml4KTsKK30KZGlmZiAtLWdpdCBhL2ludGVyZGlmZi5oIGIvaW50ZXJkaWZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjNzMwYQotLS0gL2Rldi9udWxsCisrKyBiL2ludGVyZGlmZi5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBJTlRFUkRJRkZfSAorI2RlZmluZSBJTlRFUkRJRkZfSAorCitzdHJ1Y3QgcmV2X2luZm87CisKK3ZvaWQgc2hvd19pbnRlcmRpZmYoc3RydWN0IHJldl9pbmZvICosIGludCBpbmRlbnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2l0ZXJhdG9yLmggYi9pdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNjkwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9pdGVyYXRvci5oCkBAIC0wLDAgKzEsODEgQEAKKyNpZm5kZWYgSVRFUkFUT1JfSAorI2RlZmluZSBJVEVSQVRPUl9ICisKKy8qCisgKiBHZW5lcmljIGNvbnN0YW50cyByZWxhdGVkIHRvIGl0ZXJhdG9ycy4KKyAqLworCisvKgorICogVGhlIGF0dGVtcHQgdG8gYWR2YW5jZSB0aGUgaXRlcmF0b3Igd2FzIHN1Y2Nlc3NmdWw7IHRoZSBpdGVyYXRvcgorICogcmVmbGVjdHMgdGhlIG5ldyBjdXJyZW50IGVudHJ5LgorICovCisjZGVmaW5lIElURVJfT0sgMAorCisvKgorICogVGhlIGl0ZXJhdG9yIGlzIGV4aGF1c3RlZCBhbmQgaGFzIGJlZW4gZnJlZWQuCisgKi8KKyNkZWZpbmUgSVRFUl9ET05FIC0xCisKKy8qCisgKiBUaGUgaXRlcmF0b3IgZXhwZXJpZW5jZWQgYW4gZXJyb3IuIFRoZSBpdGVyYXRpb24gaGFzIGJlZW4gYWJvcnRlZAorICogYW5kIHRoZSBpdGVyYXRvciBoYXMgYmVlbiBmcmVlZC4KKyAqLworI2RlZmluZSBJVEVSX0VSUk9SIC0yCisKKy8qCisgKiBSZXR1cm4gdmFsdWVzIGZvciBzZWxlY3RvciBmdW5jdGlvbnMgZm9yIG1lcmdlIGl0ZXJhdG9ycy4gVGhlCisgKiBudW1lcmljYWwgdmFsdWVzIG9mIHRoZXNlIGNvbnN0YW50cyBhcmUgaW1wb3J0YW50IGFuZCBtdXN0IGJlCisgKiBjb21wYXRpYmxlIHdpdGggSVRFUl9ET05FIGFuZCBJVEVSX0VSUk9SLgorICovCitlbnVtIGl0ZXJhdG9yX3NlbGVjdGlvbiB7CisJLyogRW5kIHRoZSBpdGVyYXRpb24gd2l0aG91dCBhbiBlcnJvcjogKi8KKwlJVEVSX1NFTEVDVF9ET05FID0gSVRFUl9ET05FLAorCisJLyogUmVwb3J0IGFuIGVycm9yIGFuZCBhYm9ydCB0aGUgaXRlcmF0aW9uOiAqLworCUlURVJfU0VMRUNUX0VSUk9SID0gSVRFUl9FUlJPUiwKKworCS8qCisJICogVGhlIG5leHQgZ3JvdXAgb2YgY29uc3RhbnRzIGFyZSBtYXNrcyB0aGF0IGFyZSB1c2VmdWwKKwkgKiBtYWlubHkgaW50ZXJuYWxseS4KKwkgKi8KKworCS8qIFRoZSBMU0Igc2VsZWN0cyB3aGV0aGVyIGl0ZXIwL2l0ZXIxIGlzIHRoZSAiY3VycmVudCIgaXRlcmF0b3I6ICovCisJSVRFUl9DVVJSRU5UX1NFTEVDVElPTl9NQVNLID0gMHgwMSwKKworCS8qIGl0ZXIwIGlzIHRoZSAiY3VycmVudCIgaXRlcmF0b3IgdGhpcyByb3VuZDogKi8KKwlJVEVSX0NVUlJFTlRfU0VMRUNUSU9OXzAgPSAweDAwLAorCisJLyogaXRlcjEgaXMgdGhlICJjdXJyZW50IiBpdGVyYXRvciB0aGlzIHJvdW5kOiAqLworCUlURVJfQ1VSUkVOVF9TRUxFQ1RJT05fMSA9IDB4MDEsCisKKwkvKiBZaWVsZCB0aGUgdmFsdWUgZnJvbSB0aGUgY3VycmVudCBpdGVyYXRvcj8gKi8KKwlJVEVSX1lJRUxEX0NVUlJFTlQgPSAweDAyLAorCisJLyogRGlzY2FyZCB0aGUgdmFsdWUgZnJvbSB0aGUgc2Vjb25kYXJ5IGl0ZXJhdG9yPyAqLworCUlURVJfU0tJUF9TRUNPTkRBUlkgPSAweDA0LAorCisJLyoKKwkgKiBUaGUgY29uc3RhbnRzIHRoYXQgYSBzZWxlY3RvciBmdW5jdGlvbiBzaG91bGQgdXN1YWxseQorCSAqIHJldHVybi4KKwkgKi8KKworCS8qIFlpZWxkIHRoZSB2YWx1ZSBmcm9tIGl0ZXIwOiAqLworCUlURVJfU0VMRUNUXzAgPSBJVEVSX0NVUlJFTlRfU0VMRUNUSU9OXzAgfCBJVEVSX1lJRUxEX0NVUlJFTlQsCisKKwkvKiBZaWVsZCB0aGUgdmFsdWUgZnJvbSBpdGVyMCBhbmQgZGlzY2FyZCB0aGUgb25lIGZyb20gaXRlcjE6ICovCisJSVRFUl9TRUxFQ1RfMF9TS0lQXzEgPSBJVEVSX1NFTEVDVF8wIHwgSVRFUl9TS0lQX1NFQ09OREFSWSwKKworCS8qIERpc2NhcmQgdGhlIHZhbHVlIGZyb20gaXRlcjAgd2l0aG91dCB5aWVsZGluZyBhbnl0aGluZyB0aGlzIHJvdW5kOiAqLworCUlURVJfU0tJUF8wID0gSVRFUl9DVVJSRU5UX1NFTEVDVElPTl8xIHwgSVRFUl9TS0lQX1NFQ09OREFSWSwKKworCS8qIFlpZWxkIHRoZSB2YWx1ZSBmcm9tIGl0ZXIxOiAqLworCUlURVJfU0VMRUNUXzEgPSBJVEVSX0NVUlJFTlRfU0VMRUNUSU9OXzEgfCBJVEVSX1lJRUxEX0NVUlJFTlQsCisKKwkvKiBZaWVsZCB0aGUgdmFsdWUgZnJvbSBpdGVyMSBhbmQgZGlzY2FyZCB0aGUgb25lIGZyb20gaXRlcjA6ICovCisJSVRFUl9TRUxFQ1RfMV9TS0lQXzAgPSBJVEVSX1NFTEVDVF8xIHwgSVRFUl9TS0lQX1NFQ09OREFSWSwKKworCS8qIERpc2NhcmQgdGhlIHZhbHVlIGZyb20gaXRlcjEgd2l0aG91dCB5aWVsZGluZyBhbnl0aGluZyB0aGlzIHJvdW5kOiAqLworCUlURVJfU0tJUF8xID0gSVRFUl9DVVJSRU5UX1NFTEVDVElPTl8wIHwgSVRFUl9TS0lQX1NFQ09OREFSWQorfTsKKworI2VuZGlmIC8qIElURVJBVE9SX0ggKi8KZGlmZiAtLWdpdCBhL2pzb24td3JpdGVyLmMgYi9qc29uLXdyaXRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZGI5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9qc29uLXdyaXRlci5jCkBAIC0wLDAgKzEsNDE0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJqc29uLXdyaXRlci5oIgorCit2b2lkIGp3X2luaXQoc3RydWN0IGpzb25fd3JpdGVyICpqdykKK3sKKwlzdHJidWZfaW5pdCgmanctPmpzb24sIDApOworCXN0cmJ1Zl9pbml0KCZqdy0+b3Blbl9zdGFjaywgMCk7CisJanctPm5lZWRfY29tbWEgPSAwOworCWp3LT5wcmV0dHkgPSAwOworfQorCit2b2lkIGp3X3JlbGVhc2Uoc3RydWN0IGpzb25fd3JpdGVyICpqdykKK3sKKwlzdHJidWZfcmVsZWFzZSgmanctPmpzb24pOworCXN0cmJ1Zl9yZWxlYXNlKCZqdy0+b3Blbl9zdGFjayk7Cit9CisKKy8qCisgKiBBcHBlbmQgSlNPTi1xdW90ZWQgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gc3RyaW5nIHRvICdvdXQnLgorICovCitzdGF0aWMgdm9pZCBhcHBlbmRfcXVvdGVkX3N0cmluZyhzdHJ1Y3Qgc3RyYnVmICpvdXQsIGNvbnN0IGNoYXIgKmluKQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCXN0cmJ1Zl9hZGRjaChvdXQsICciJyk7CisJd2hpbGUgKChjID0gKmluKyspICE9ICdcMCcpIHsKKwkJaWYgKGMgPT0gJyInKQorCQkJc3RyYnVmX2FkZHN0cihvdXQsICJcXFwiIik7CisJCWVsc2UgaWYgKGMgPT0gJ1xcJykKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCAiXFxcXCIpOworCQllbHNlIGlmIChjID09ICdcbicpCisJCQlzdHJidWZfYWRkc3RyKG91dCwgIlxcbiIpOworCQllbHNlIGlmIChjID09ICdccicpCisJCQlzdHJidWZfYWRkc3RyKG91dCwgIlxcciIpOworCQllbHNlIGlmIChjID09ICdcdCcpCisJCQlzdHJidWZfYWRkc3RyKG91dCwgIlxcdCIpOworCQllbHNlIGlmIChjID09ICdcZicpCisJCQlzdHJidWZfYWRkc3RyKG91dCwgIlxcZiIpOworCQllbHNlIGlmIChjID09ICdcYicpCisJCQlzdHJidWZfYWRkc3RyKG91dCwgIlxcYiIpOworCQllbHNlIGlmIChjIDwgMHgyMCkKKwkJCXN0cmJ1Zl9hZGRmKG91dCwgIlxcdSUwNHgiLCBjKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKG91dCwgYyk7CisJfQorCXN0cmJ1Zl9hZGRjaChvdXQsICciJyk7Cit9CisKK3N0YXRpYyB2b2lkIGluZGVudF9wcmV0dHkoc3RydWN0IGpzb25fd3JpdGVyICpqdykKK3sKKwlpbnQgazsKKworCWZvciAoayA9IDA7IGsgPCBqdy0+b3Blbl9zdGFjay5sZW47IGsrKykKKwkJc3RyYnVmX2FkZHN0cigmanctPmpzb24sICIgICIpOworfQorCisvKgorICogQmVnaW4gYW4gb2JqZWN0IG9yIGFycmF5IChlaXRoZXIgdG9wLWxldmVsIG9yIG5lc3RlZCB3aXRoaW4gdGhlIGN1cnJlbnRseQorICogb3BlbiBvYmplY3Qgb3IgYXJyYXkpLgorICovCitzdGF0aWMgdm9pZCBiZWdpbihzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjaGFyIGNoX29wZW4sIGludCBwcmV0dHkpCit7CisJanctPnByZXR0eSA9IHByZXR0eTsKKworCXN0cmJ1Zl9hZGRjaCgmanctPmpzb24sIGNoX29wZW4pOworCisJc3RyYnVmX2FkZGNoKCZqdy0+b3Blbl9zdGFjaywgY2hfb3Blbik7CisJanctPm5lZWRfY29tbWEgPSAwOworfQorCisvKgorICogQXNzZXJ0IHRoYXQgdGhlIHRvcCBvZiB0aGUgb3Blbi1zdGFjayBpcyBhbiBvYmplY3QuCisgKi8KK3N0YXRpYyB2b2lkIGFzc2VydF9pbl9vYmplY3QoY29uc3Qgc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqa2V5KQoreworCWlmICghanctPm9wZW5fc3RhY2subGVuKQorCQlCVUcoImpzb24td3JpdGVyOiBvYmplY3Q6IG1pc3Npbmcgandfb2JqZWN0X2JlZ2luKCk6ICclcyciLCBrZXkpOworCWlmIChqdy0+b3Blbl9zdGFjay5idWZbanctPm9wZW5fc3RhY2subGVuIC0gMV0gIT0gJ3snKQorCQlCVUcoImpzb24td3JpdGVyOiBvYmplY3Q6IG5vdCBpbiBvYmplY3Q6ICclcyciLCBrZXkpOworfQorCisvKgorICogQXNzZXJ0IHRoYXQgdGhlIHRvcCBvZiB0aGUgb3Blbi1zdGFjayBpcyBhbiBhcnJheS4KKyAqLworc3RhdGljIHZvaWQgYXNzZXJ0X2luX2FycmF5KGNvbnN0IHN0cnVjdCBqc29uX3dyaXRlciAqancpCit7CisJaWYgKCFqdy0+b3Blbl9zdGFjay5sZW4pCisJCUJVRygianNvbi13cml0ZXI6IGFycmF5OiBtaXNzaW5nIGp3X2FycmF5X2JlZ2luKCkiKTsKKwlpZiAoanctPm9wZW5fc3RhY2suYnVmW2p3LT5vcGVuX3N0YWNrLmxlbiAtIDFdICE9ICdbJykKKwkJQlVHKCJqc29uLXdyaXRlcjogYXJyYXk6IG5vdCBpbiBhcnJheSIpOworfQorCisvKgorICogQWRkIGNvbW1hIGlmIHdlIGhhdmUgYWxyZWFkeSBzZWVuIGEgbWVtYmVyIGF0IHRoaXMgbGV2ZWwuCisgKi8KK3N0YXRpYyB2b2lkIG1heWJlX2FkZF9jb21tYShzdHJ1Y3QganNvbl93cml0ZXIgKmp3KQoreworCWlmIChqdy0+bmVlZF9jb21tYSkKKwkJc3RyYnVmX2FkZGNoKCZqdy0+anNvbiwgJywnKTsKKwllbHNlCisJCWp3LT5uZWVkX2NvbW1hID0gMTsKK30KKworc3RhdGljIHZvaWQgZm10X2RvdWJsZShzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBpbnQgcHJlY2lzaW9uLAorCQkJICAgICAgZG91YmxlIHZhbHVlKQoreworCWlmIChwcmVjaXNpb24gPCAwKSB7CisJCXN0cmJ1Zl9hZGRmKCZqdy0+anNvbiwgIiVmIiwgdmFsdWUpOworCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgZm10ID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRmKCZmbXQsICIlJS4lZGYiLCBwcmVjaXNpb24pOworCQlzdHJidWZfYWRkZigmanctPmpzb24sIGZtdC5idWYsIHZhbHVlKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmZtdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBvYmplY3RfY29tbW9uKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlhc3NlcnRfaW5fb2JqZWN0KGp3LCBrZXkpOworCW1heWJlX2FkZF9jb21tYShqdyk7CisKKwlpZiAoanctPnByZXR0eSkgeworCQlzdHJidWZfYWRkY2goJmp3LT5qc29uLCAnXG4nKTsKKwkJaW5kZW50X3ByZXR0eShqdyk7CisJfQorCisJYXBwZW5kX3F1b3RlZF9zdHJpbmcoJmp3LT5qc29uLCBrZXkpOworCXN0cmJ1Zl9hZGRjaCgmanctPmpzb24sICc6Jyk7CisJaWYgKGp3LT5wcmV0dHkpCisJCXN0cmJ1Zl9hZGRjaCgmanctPmpzb24sICcgJyk7Cit9CisKK3N0YXRpYyB2b2lkIGFycmF5X2NvbW1vbihzdHJ1Y3QganNvbl93cml0ZXIgKmp3KQoreworCWFzc2VydF9pbl9hcnJheShqdyk7CisJbWF5YmVfYWRkX2NvbW1hKGp3KTsKKworCWlmIChqdy0+cHJldHR5KSB7CisJCXN0cmJ1Zl9hZGRjaCgmanctPmpzb24sICdcbicpOworCQlpbmRlbnRfcHJldHR5KGp3KTsKKwl9Cit9CisKKy8qCisgKiBBc3NlcnQgdGhhdCB0aGUgZ2l2ZW4gSlNPTiBvYmplY3Qgb3IgSlNPTiBhcnJheSBoYXMgYmVlbiBwcm9wZXJseQorICogdGVybWluYXRlZC4gIChIYXMgY2xvc2luZyBicmFja2V0LikKKyAqLworc3RhdGljIHZvaWQgYXNzZXJ0X2lzX3Rlcm1pbmF0ZWQoY29uc3Qgc3RydWN0IGpzb25fd3JpdGVyICpqdykKK3sKKwlpZiAoanctPm9wZW5fc3RhY2subGVuKQorCQlCVUcoImpzb24td3JpdGVyOiBvYmplY3Q6IG1pc3NpbmcgandfZW5kKCk6ICclcyciLAorCQkgICAganctPmpzb24uYnVmKTsKK30KKwordm9pZCBqd19vYmplY3RfYmVnaW4oc3RydWN0IGpzb25fd3JpdGVyICpqdywgaW50IHByZXR0eSkKK3sKKwliZWdpbihqdywgJ3snLCBwcmV0dHkpOworfQorCit2b2lkIGp3X29iamVjdF9zdHJpbmcoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlvYmplY3RfY29tbW9uKGp3LCBrZXkpOworCWFwcGVuZF9xdW90ZWRfc3RyaW5nKCZqdy0+anNvbiwgdmFsdWUpOworfQorCit2b2lkIGp3X29iamVjdF9pbnRtYXgoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqa2V5LCBpbnRtYXhfdCB2YWx1ZSkKK3sKKwlvYmplY3RfY29tbW9uKGp3LCBrZXkpOworCXN0cmJ1Zl9hZGRmKCZqdy0+anNvbiwgIiUiUFJJZE1BWCwgdmFsdWUpOworfQorCit2b2lkIGp3X29iamVjdF9kb3VibGUoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqa2V5LCBpbnQgcHJlY2lzaW9uLAorCQkgICAgICBkb3VibGUgdmFsdWUpCit7CisJb2JqZWN0X2NvbW1vbihqdywga2V5KTsKKwlmbXRfZG91YmxlKGp3LCBwcmVjaXNpb24sIHZhbHVlKTsKK30KKwordm9pZCBqd19vYmplY3RfdHJ1ZShzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXkpCit7CisJb2JqZWN0X2NvbW1vbihqdywga2V5KTsKKwlzdHJidWZfYWRkc3RyKCZqdy0+anNvbiwgInRydWUiKTsKK30KKwordm9pZCBqd19vYmplY3RfZmFsc2Uoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqa2V5KQoreworCW9iamVjdF9jb21tb24oancsIGtleSk7CisJc3RyYnVmX2FkZHN0cigmanctPmpzb24sICJmYWxzZSIpOworfQorCit2b2lkIGp3X29iamVjdF9ib29sKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSwgaW50IHZhbHVlKQoreworCWlmICh2YWx1ZSkKKwkJandfb2JqZWN0X3RydWUoancsIGtleSk7CisJZWxzZQorCQlqd19vYmplY3RfZmFsc2UoancsIGtleSk7Cit9CisKK3ZvaWQgandfb2JqZWN0X251bGwoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqa2V5KQoreworCW9iamVjdF9jb21tb24oancsIGtleSk7CisJc3RyYnVmX2FkZHN0cigmanctPmpzb24sICJudWxsIik7Cit9CisKK3N0YXRpYyB2b2lkIGluY3JlYXNlX2luZGVudChzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QganNvbl93cml0ZXIgKmp3LAorCQkJICAgIGludCBpbmRlbnQpCit7CisJaW50IGs7CisKKwlzdHJidWZfcmVzZXQoc2IpOworCWZvciAoayA9IDA7IGsgPCBqdy0+anNvbi5sZW47IGsrKykgeworCQljaGFyIGNoID0ganctPmpzb24uYnVmW2tdOworCQlzdHJidWZfYWRkY2goc2IsIGNoKTsKKwkJaWYgKGNoID09ICdcbicpCisJCQlzdHJidWZfYWRkY2hhcnMoc2IsICcgJywgaW5kZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGtpbGxfaW5kZW50KHN0cnVjdCBzdHJidWYgKnNiLAorCQkJY29uc3Qgc3RydWN0IGpzb25fd3JpdGVyICpqdykKK3sKKwlpbnQgazsKKwlpbnQgZWF0X2l0ID0gMDsKKworCXN0cmJ1Zl9yZXNldChzYik7CisJZm9yIChrID0gMDsgayA8IGp3LT5qc29uLmxlbjsgaysrKSB7CisJCWNoYXIgY2ggPSBqdy0+anNvbi5idWZba107CisJCWlmIChlYXRfaXQgJiYgY2ggPT0gJyAnKQorCQkJY29udGludWU7CisJCWlmIChjaCA9PSAnXG4nKSB7CisJCQllYXRfaXQgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJZWF0X2l0ID0gMDsKKwkJc3RyYnVmX2FkZGNoKHNiLCBjaCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfc3ViX2p3KHN0cnVjdCBqc29uX3dyaXRlciAqancsCisJCQkgIGNvbnN0IHN0cnVjdCBqc29uX3dyaXRlciAqdmFsdWUpCit7CisJLyoKKwkgKiBJZiBib3RoIGFyZSBwcmV0dHksIGluY3JlYXNlIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgc3ViX2p3CisJICogdG8gYmV0dGVyIGZpdCB1bmRlciB0aGUgc3VwZXIuCisJICoKKwkgKiBJZiB0aGUgc3VwZXIgaXMgcHJldHR5LCBidXQgdGhlIHN1Yl9qdyBpcyBjb21wYWN0LCBsZWF2ZSB0aGUKKwkgKiBzdWJfancgY29tcGFjdC4gIChXZSBkb24ndCB3YW50IHRvIHBhcnNlIGFuZCByZWJ1aWxkIHRoZSBzdWJfancKKwkgKiBmb3IgdGhpcyBkZWJ1Zy1pc2ggZmVhdHVyZS4pCisJICoKKwkgKiBJZiB0aGUgc3VwZXIgaXMgY29tcGFjdCwgYW5kIHRoZSBzdWJfancgaXMgcHJldHR5LCBjb252ZXJ0CisJICogdGhlIHN1Yl9qdyB0byBjb21wYWN0LgorCSAqCisJICogSWYgYm90aCBhcmUgY29tcGFjdCwga2VlcCB0aGUgc3ViX2p3IGNvbXBhY3QuCisJICovCisJaWYgKGp3LT5wcmV0dHkgJiYganctPm9wZW5fc3RhY2subGVuICYmIHZhbHVlLT5wcmV0dHkpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQlpbmNyZWFzZV9pbmRlbnQoJnNiLCB2YWx1ZSwganctPm9wZW5fc3RhY2subGVuICogMik7CisJCXN0cmJ1Zl9hZGRidWYoJmp3LT5qc29uLCAmc2IpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm47CisJfQorCWlmICghanctPnByZXR0eSAmJiB2YWx1ZS0+cHJldHR5KSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJa2lsbF9pbmRlbnQoJnNiLCB2YWx1ZSk7CisJCXN0cmJ1Zl9hZGRidWYoJmp3LT5qc29uLCAmc2IpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm47CisJfQorCisJc3RyYnVmX2FkZGJ1ZigmanctPmpzb24sICZ2YWx1ZS0+anNvbik7Cit9CisKKy8qCisgKiBBcHBlbmQgZXhpc3RpbmcgKHByb3Blcmx5IHRlcm1pbmF0ZWQpIEpTT04gc3ViLWRhdGEgKG9iamVjdCBvciBhcnJheSkKKyAqIGFzLWlzIG9udG8gdGhlIGdpdmVuIEpTT04gZGF0YS4KKyAqLwordm9pZCBqd19vYmplY3Rfc3ViX2p3KHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSwKKwkJICAgICAgY29uc3Qgc3RydWN0IGpzb25fd3JpdGVyICp2YWx1ZSkKK3sKKwlhc3NlcnRfaXNfdGVybWluYXRlZCh2YWx1ZSk7CisKKwlvYmplY3RfY29tbW9uKGp3LCBrZXkpOworCWFwcGVuZF9zdWJfancoancsIHZhbHVlKTsKK30KKwordm9pZCBqd19vYmplY3RfaW5saW5lX2JlZ2luX29iamVjdChzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXkpCit7CisJb2JqZWN0X2NvbW1vbihqdywga2V5KTsKKworCWp3X29iamVjdF9iZWdpbihqdywganctPnByZXR0eSk7Cit9CisKK3ZvaWQgandfb2JqZWN0X2lubGluZV9iZWdpbl9hcnJheShzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXkpCit7CisJb2JqZWN0X2NvbW1vbihqdywga2V5KTsKKworCWp3X2FycmF5X2JlZ2luKGp3LCBqdy0+cHJldHR5KTsKK30KKwordm9pZCBqd19hcnJheV9iZWdpbihzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBpbnQgcHJldHR5KQoreworCWJlZ2luKGp3LCAnWycsIHByZXR0eSk7Cit9CisKK3ZvaWQgandfYXJyYXlfc3RyaW5nKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWFycmF5X2NvbW1vbihqdyk7CisJYXBwZW5kX3F1b3RlZF9zdHJpbmcoJmp3LT5qc29uLCB2YWx1ZSk7Cit9CisKK3ZvaWQgandfYXJyYXlfaW50bWF4KHN0cnVjdCBqc29uX3dyaXRlciAqancsIGludG1heF90IHZhbHVlKQoreworCWFycmF5X2NvbW1vbihqdyk7CisJc3RyYnVmX2FkZGYoJmp3LT5qc29uLCAiJSJQUklkTUFYLCB2YWx1ZSk7Cit9CisKK3ZvaWQgandfYXJyYXlfZG91YmxlKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGludCBwcmVjaXNpb24sIGRvdWJsZSB2YWx1ZSkKK3sKKwlhcnJheV9jb21tb24oancpOworCWZtdF9kb3VibGUoancsIHByZWNpc2lvbiwgdmFsdWUpOworfQorCit2b2lkIGp3X2FycmF5X3RydWUoc3RydWN0IGpzb25fd3JpdGVyICpqdykKK3sKKwlhcnJheV9jb21tb24oancpOworCXN0cmJ1Zl9hZGRzdHIoJmp3LT5qc29uLCAidHJ1ZSIpOworfQorCit2b2lkIGp3X2FycmF5X2ZhbHNlKHN0cnVjdCBqc29uX3dyaXRlciAqancpCit7CisJYXJyYXlfY29tbW9uKGp3KTsKKwlzdHJidWZfYWRkc3RyKCZqdy0+anNvbiwgImZhbHNlIik7Cit9CisKK3ZvaWQgandfYXJyYXlfYm9vbChzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBpbnQgdmFsdWUpCit7CisJaWYgKHZhbHVlKQorCQlqd19hcnJheV90cnVlKGp3KTsKKwllbHNlCisJCWp3X2FycmF5X2ZhbHNlKGp3KTsKK30KKwordm9pZCBqd19hcnJheV9udWxsKHN0cnVjdCBqc29uX3dyaXRlciAqancpCit7CisJYXJyYXlfY29tbW9uKGp3KTsKKwlzdHJidWZfYWRkc3RyKCZqdy0+anNvbiwgIm51bGwiKTsKK30KKwordm9pZCBqd19hcnJheV9zdWJfancoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3Qgc3RydWN0IGpzb25fd3JpdGVyICp2YWx1ZSkKK3sKKwlhc3NlcnRfaXNfdGVybWluYXRlZCh2YWx1ZSk7CisKKwlhcnJheV9jb21tb24oancpOworCWFwcGVuZF9zdWJfancoancsIHZhbHVlKTsKK30KKwordm9pZCBqd19hcnJheV9hcmdjX2FyZ3Yoc3RydWN0IGpzb25fd3JpdGVyICpqdywgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IGFyZ2M7IGsrKykKKwkJandfYXJyYXlfc3RyaW5nKGp3LCBhcmd2W2tdKTsKK30KKwordm9pZCBqd19hcnJheV9hcmd2KHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXdoaWxlICgqYXJndikKKwkJandfYXJyYXlfc3RyaW5nKGp3LCAqYXJndisrKTsKK30KKwordm9pZCBqd19hcnJheV9pbmxpbmVfYmVnaW5fb2JqZWN0KHN0cnVjdCBqc29uX3dyaXRlciAqancpCit7CisJYXJyYXlfY29tbW9uKGp3KTsKKworCWp3X29iamVjdF9iZWdpbihqdywganctPnByZXR0eSk7Cit9CisKK3ZvaWQgandfYXJyYXlfaW5saW5lX2JlZ2luX2FycmF5KHN0cnVjdCBqc29uX3dyaXRlciAqancpCit7CisJYXJyYXlfY29tbW9uKGp3KTsKKworCWp3X2FycmF5X2JlZ2luKGp3LCBqdy0+cHJldHR5KTsKK30KKworaW50IGp3X2lzX3Rlcm1pbmF0ZWQoY29uc3Qgc3RydWN0IGpzb25fd3JpdGVyICpqdykKK3sKKwlyZXR1cm4gIWp3LT5vcGVuX3N0YWNrLmxlbjsKK30KKwordm9pZCBqd19lbmQoc3RydWN0IGpzb25fd3JpdGVyICpqdykKK3sKKwljaGFyIGNoX29wZW47CisJaW50IGxlbjsKKworCWlmICghanctPm9wZW5fc3RhY2subGVuKQorCQlCVUcoImpzb24td3JpdGVyOiB0b28gbWFueSBqd19lbmQoKTogJyVzJyIsIGp3LT5qc29uLmJ1Zik7CisKKwlsZW4gPSBqdy0+b3Blbl9zdGFjay5sZW4gLSAxOworCWNoX29wZW4gPSBqdy0+b3Blbl9zdGFjay5idWZbbGVuXTsKKworCXN0cmJ1Zl9zZXRsZW4oJmp3LT5vcGVuX3N0YWNrLCBsZW4pOworCWp3LT5uZWVkX2NvbW1hID0gMTsKKworCWlmIChqdy0+cHJldHR5KSB7CisJCXN0cmJ1Zl9hZGRjaCgmanctPmpzb24sICdcbicpOworCQlpbmRlbnRfcHJldHR5KGp3KTsKKwl9CisKKwlpZiAoY2hfb3BlbiA9PSAneycpCisJCXN0cmJ1Zl9hZGRjaCgmanctPmpzb24sICd9Jyk7CisJZWxzZQorCQlzdHJidWZfYWRkY2goJmp3LT5qc29uLCAnXScpOworfQpkaWZmIC0tZ2l0IGEvanNvbi13cml0ZXIuaCBiL2pzb24td3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5MDZiMAotLS0gL2Rldi9udWxsCisrKyBiL2pzb24td3JpdGVyLmgKQEAgLTAsMCArMSwxMDcgQEAKKyNpZm5kZWYgSlNPTl9XUklURVJfSAorI2RlZmluZSBKU09OX1dSSVRFUl9ICisKKy8qCisgKiBKU09OIGRhdGEgc3RydWN0dXJlcyBhcmUgZGVmaW5lZCBhdDoKKyAqIFsxXSBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM3MTU5LnR4dAorICogWzJdIGh0dHA6Ly9qc29uLm9yZy8KKyAqCisgKiBUaGUgSlNPTi13cml0ZXIgQVBJIGFsbG93cyBvbmUgdG8gYnVpbGQgSlNPTiBkYXRhIHN0cnVjdHVyZXMgdXNpbmcgYQorICogc2ltcGxlIHdyYXBwZXIgYXJvdW5kIGEgInN0cnVjdCBzdHJidWYiIGJ1ZmZlci4gIEl0IGlzIGludGVuZGVkIGFzIGEKKyAqIHNpbXBsZSBBUEkgdG8gYnVpbGQgb3V0cHV0IHN0cmluZ3M7IGl0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSBhIGdlbmVyYWwKKyAqIG9iamVjdCBtb2RlbCBmb3IgSlNPTiBkYXRhLiAgSW4gcGFydGljdWxhciwgaXQgZG9lcyBub3QgcmUtb3JkZXIga2V5cworICogaW4gYW4gb2JqZWN0IChkaWN0aW9uYXJ5KSwgaXQgZG9lcyBub3QgZGUtZHVwIGtleXMgaW4gYW4gb2JqZWN0LCBhbmQKKyAqIGl0IGRvZXMgbm90IGFsbG93IGxvb2t1cCBvciBwYXJzaW5nIG9mIEpTT04gZGF0YS4KKyAqCisgKiBBbGwgc3RyaW5nIHZhbHVlcyAoYm90aCBrZXlzIGFuZCBzdHJpbmcgci12YWx1ZXMpIGFyZSBwcm9wZXJseSBxdW90ZWQKKyAqIGFuZCBlc2NhcGVkIGlmIHRoZXkgY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMuCisgKgorICogVGhlc2Ugcm91dGluZXMgY3JlYXRlIGNvbXBhY3QgSlNPTiBkYXRhICh3aXRoIG5vIHVubmVjZXNzYXJ5IHdoaXRlc3BhY2UsCisgKiBuZXdsaW5lcywgb3IgaW5kZW50aW5nKS4gIElmIHlvdSBnZXQgYW4gdW5leHBlY3RlZCByZXNwb25zZSwgdmVyaWZ5CisgKiB0aGF0IHlvdSdyZSBub3QgZXhwZWN0aW5nIGEgcHJldHR5IEpTT04gc3RyaW5nLgorICoKKyAqIEJvdGggIkpTT04gb2JqZWN0cyIgKGFrYSBzZXRzIG9mIGsvdiBwYWlycykgYW5kICJKU09OIGFycmF5IiBjYW4gYmUKKyAqIGNvbnN0cnVjdGVkIHVzaW5nIGEgJ2JlZ2luIGFwcGVuZCogZW5kJyBtb2RlbC4KKyAqCisgKiBOZXN0ZWQgb2JqZWN0cyBhbmQgYXJyYXlzIGNhbiBlaXRoZXIgYmUgY29uc3RydWN0ZWQgYm90dG9tIHVwIChieQorICogY3JlYXRpbmcgc3ViIG9iamVjdC9hcnJheXMgZmlyc3QgYW5kIGFwcGVuZGluZyB0aGVtIHRvIHRoZSBzdXBlcgorICogb2JqZWN0L2FycmF5KSAtb3ItIGJ5IGJ1aWxkaW5nIHRoZW0gaW5saW5lIGluIG9uZSBwYXNzLiAgVGhpcyBpcyBhCisgKiBwZXJzb25hbCBzdHlsZSBhbmQvb3IgZGF0YSBzaGFwZSBjaG9pY2UuCisgKgorICogU2VlIHQvaGVscGVyL3Rlc3QtanNvbi13cml0ZXIuYyBmb3IgdmFyaW91cyB1c2FnZSBleGFtcGxlcy4KKyAqCisgKiBMSU1JVEFUSU9OUzoKKyAqID09PT09PT09PT09PQorICoKKyAqIFRoZSBKU09OIHNwZWNpZmljYXRpb24gWzEsMl0gZGVmaW5lcyBzdHJpbmcgdmFsdWVzIGFzIFVuaWNvZGUgZGF0YQorICogYW5kIHByb2JhYmx5IFVURi04IGVuY29kZWQuICBUaGUgY3VycmVudCBqc29uLXdyaXRlciBBUEkgZG9lcyBub3QKKyAqIGVuZm9yY2UgdGhpcyBhbmQgd2lsbCB3cml0ZSBhbnkgc3RyaW5nIGFzIHJlY2VpdmVkLiAgSG93ZXZlciwgaXQgd2lsbAorICogcHJvcGVybHkgcXVvdGUgYW5kIGJhY2tzbGFzaC1lc2NhcGUgdGhlbSBhcyBuZWNlc3NhcnkuICBJdCBpcyB1cCB0bworICogdGhlIGNhbGxlciB0byBVVEYtOCBlbmNvZGUgdGhlaXIgc3RyaW5ncyAqYmVmb3JlKiBwYXNzaW5nIHRoZW0gdG8gdGhpcworICogQVBJLiAgVGhpcyBsYXllciBzaG91bGQgbm90IGhhdmUgdG8gdHJ5IHRvIGd1ZXNzIHRoZSBlbmNvZGluZyBvciBsb2NhbGUKKyAqIG9mIHRoZSBnaXZlbiBzdHJpbmdzLgorICovCisKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RydWN0IGpzb25fd3JpdGVyCit7CisJLyoKKwkgKiBCdWZmZXIgb2YgdGhlIGluLXByb2dyZXNzIEpTT04gY3VycmVudGx5IGJlaW5nIGNvbXBvc2VkLgorCSAqLworCXN0cnVjdCBzdHJidWYganNvbjsKKworCS8qCisJICogU2ltcGxlIHN0YWNrIG9mIHRoZSBjdXJyZW50bHkgb3BlbiBhcnJheSBhbmQgb2JqZWN0IGZvcm1zLgorCSAqIFRoaXMgaXMgYSBzdHJpbmcgb2YgJ3snIGFuZCAnWycgY2hhcmFjdGVycyBpbmRpY2F0aW5nIHRoZQorCSAqIGN1cnJlbnRseSB1bnRlcm1pbmF0ZWQgZm9ybXMuICBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoZQorCSAqIHByb3Blcmx5IGNsb3NpbmcgY2hhcmFjdGVyIGlzIHVzZWQgd2hlbiBwb3BwaW5nIGEgbGV2ZWwgYW5kCisJICogdG8ga25vdyB3aGVuIHRoZSBKU09OIGlzIGNvbXBsZXRlbHkgY2xvc2VkLgorCSAqLworCXN0cnVjdCBzdHJidWYgb3Blbl9zdGFjazsKKworCXVuc2lnbmVkIGludCBuZWVkX2NvbW1hOjE7CisJdW5zaWduZWQgaW50IHByZXR0eToxOworfTsKKworI2RlZmluZSBKU09OX1dSSVRFUl9JTklUIHsgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklULCAwLCAwIH0KKwordm9pZCBqd19pbml0KHN0cnVjdCBqc29uX3dyaXRlciAqancpOwordm9pZCBqd19yZWxlYXNlKHN0cnVjdCBqc29uX3dyaXRlciAqancpOworCit2b2lkIGp3X29iamVjdF9iZWdpbihzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBpbnQgcHJldHR5KTsKK3ZvaWQgandfYXJyYXlfYmVnaW4oc3RydWN0IGpzb25fd3JpdGVyICpqdywgaW50IHByZXR0eSk7CisKK3ZvaWQgandfb2JqZWN0X3N0cmluZyhzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXksCisJCSAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgandfb2JqZWN0X2ludG1heChzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXksIGludG1heF90IHZhbHVlKTsKK3ZvaWQgandfb2JqZWN0X2RvdWJsZShzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXksIGludCBwcmVjaXNpb24sCisJCSAgICAgIGRvdWJsZSB2YWx1ZSk7Cit2b2lkIGp3X29iamVjdF90cnVlKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSk7Cit2b2lkIGp3X29iamVjdF9mYWxzZShzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXkpOwordm9pZCBqd19vYmplY3RfYm9vbChzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXksIGludCB2YWx1ZSk7Cit2b2lkIGp3X29iamVjdF9udWxsKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSk7Cit2b2lkIGp3X29iamVjdF9zdWJfancoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqa2V5LAorCQkgICAgICBjb25zdCBzdHJ1Y3QganNvbl93cml0ZXIgKnZhbHVlKTsKKwordm9pZCBqd19vYmplY3RfaW5saW5lX2JlZ2luX29iamVjdChzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXkpOwordm9pZCBqd19vYmplY3RfaW5saW5lX2JlZ2luX2FycmF5KHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSk7CisKK3ZvaWQgandfYXJyYXlfc3RyaW5nKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgandfYXJyYXlfaW50bWF4KHN0cnVjdCBqc29uX3dyaXRlciAqancsIGludG1heF90IHZhbHVlKTsKK3ZvaWQgandfYXJyYXlfZG91YmxlKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGludCBwcmVjaXNpb24sIGRvdWJsZSB2YWx1ZSk7Cit2b2lkIGp3X2FycmF5X3RydWUoc3RydWN0IGpzb25fd3JpdGVyICpqdyk7Cit2b2lkIGp3X2FycmF5X2ZhbHNlKHN0cnVjdCBqc29uX3dyaXRlciAqancpOwordm9pZCBqd19hcnJheV9ib29sKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGludCB2YWx1ZSk7Cit2b2lkIGp3X2FycmF5X251bGwoc3RydWN0IGpzb25fd3JpdGVyICpqdyk7Cit2b2lkIGp3X2FycmF5X3N1Yl9qdyhzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBzdHJ1Y3QganNvbl93cml0ZXIgKnZhbHVlKTsKK3ZvaWQgandfYXJyYXlfYXJnY19hcmd2KHN0cnVjdCBqc29uX3dyaXRlciAqancsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7Cit2b2lkIGp3X2FycmF5X2FyZ3Yoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqKmFyZ3YpOworCit2b2lkIGp3X2FycmF5X2lubGluZV9iZWdpbl9vYmplY3Qoc3RydWN0IGpzb25fd3JpdGVyICpqdyk7Cit2b2lkIGp3X2FycmF5X2lubGluZV9iZWdpbl9hcnJheShzdHJ1Y3QganNvbl93cml0ZXIgKmp3KTsKKworaW50IGp3X2lzX3Rlcm1pbmF0ZWQoY29uc3Qgc3RydWN0IGpzb25fd3JpdGVyICpqdyk7Cit2b2lkIGp3X2VuZChzdHJ1Y3QganNvbl93cml0ZXIgKmp3KTsKKworI2VuZGlmIC8qIEpTT05fV1JJVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2toYXNoLmggYi9raGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYzIwOTUKLS0tIC9kZXYvbnVsbAorKysgYi9raGFzaC5oCkBAIC0wLDAgKzEsMzQzIEBACisvKiBUaGUgTUlUIExpY2Vuc2UKKworICAgQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCAyMDExIGJ5IEF0dHJhY3RpdmUgQ2hhb3MgPGF0dHJhY3RvckBsaXZlLmNvLnVrPgorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAgIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAgIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAgIFNPRlRXQVJFLgorKi8KKworI2lmbmRlZiBfX0FDX0tIQVNIX0gKKyNkZWZpbmUgX19BQ19LSEFTSF9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKworI2RlZmluZSBBQ19WRVJTSU9OX0tIQVNIX0ggIjAuMi44IgorCit0eXBlZGVmIHVpbnQzMl90IGtoaW50MzJfdDsKK3R5cGVkZWYgdWludDY0X3Qga2hpbnQ2NF90OworCit0eXBlZGVmIGtoaW50MzJfdCBraGludF90OwordHlwZWRlZiBraGludF90IGtoaXRlcl90OworCisjZGVmaW5lIF9fYWNfaXNlbXB0eShmbGFnLCBpKSAoKGZsYWdbaT4+NF0+PigoaSYweGZVKTw8MSkpJjIpCisjZGVmaW5lIF9fYWNfaXNkZWwoZmxhZywgaSkgKChmbGFnW2k+PjRdPj4oKGkmMHhmVSk8PDEpKSYxKQorI2RlZmluZSBfX2FjX2lzZWl0aGVyKGZsYWcsIGkpICgoZmxhZ1tpPj40XT4+KChpJjB4ZlUpPDwxKSkmMykKKyNkZWZpbmUgX19hY19zZXRfaXNkZWxfZmFsc2UoZmxhZywgaSkgKGZsYWdbaT4+NF0mPX4oMXVsPDwoKGkmMHhmVSk8PDEpKSkKKyNkZWZpbmUgX19hY19zZXRfaXNlbXB0eV9mYWxzZShmbGFnLCBpKSAoZmxhZ1tpPj40XSY9figydWw8PCgoaSYweGZVKTw8MSkpKQorI2RlZmluZSBfX2FjX3NldF9pc2JvdGhfZmFsc2UoZmxhZywgaSkgKGZsYWdbaT4+NF0mPX4oM3VsPDwoKGkmMHhmVSk8PDEpKSkKKyNkZWZpbmUgX19hY19zZXRfaXNkZWxfdHJ1ZShmbGFnLCBpKSAoZmxhZ1tpPj40XXw9MXVsPDwoKGkmMHhmVSk8PDEpKQorCisjZGVmaW5lIF9fYWNfZnNpemUobSkgKChtKSA8IDE2PyAxIDogKG0pPj40KQorCisjZGVmaW5lIGtyb3VuZHVwMzIoeCkgKC0tKHgpLCAoeCl8PSh4KT4+MSwgKHgpfD0oeCk+PjIsICh4KXw9KHgpPj40LCAoeCl8PSh4KT4+OCwgKHgpfD0oeCk+PjE2LCArKyh4KSkKKworc3RhdGljIGlubGluZSBraGludF90IF9fYWNfWDMxX2hhc2hfc3RyaW5nKGNvbnN0IGNoYXIgKnMpCit7CisJa2hpbnRfdCBoID0gKGtoaW50X3QpKnM7CisJaWYgKGgpIGZvciAoKytzIDsgKnM7ICsrcykgaCA9IChoIDw8IDUpIC0gaCArIChraGludF90KSpzOworCXJldHVybiBoOworfQorCisjZGVmaW5lIGtoX3N0cl9oYXNoX2Z1bmMoa2V5KSBfX2FjX1gzMV9oYXNoX3N0cmluZyhrZXkpCisjZGVmaW5lIGtoX3N0cl9oYXNoX2VxdWFsKGEsIGIpIChzdHJjbXAoYSwgYikgPT0gMCkKKworc3RhdGljIGNvbnN0IGRvdWJsZSBfX2FjX0hBU0hfVVBQRVIgPSAwLjc3OworCisjZGVmaW5lIF9fS0hBU0hfVFlQRShuYW1lLCBraGtleV90LCBraHZhbF90KSBcCisJdHlwZWRlZiBzdHJ1Y3QgeyBcCisJCWtoaW50X3Qgbl9idWNrZXRzLCBzaXplLCBuX29jY3VwaWVkLCB1cHBlcl9ib3VuZDsgXAorCQlraGludDMyX3QgKmZsYWdzOyBcCisJCWtoa2V5X3QgKmtleXM7IFwKKwkJa2h2YWxfdCAqdmFsczsgXAorCX0ga2hfIyNuYW1lIyNfdDsKKworI2RlZmluZSBfX0tIQVNIX1BST1RPVFlQRVMobmFtZSwga2hrZXlfdCwga2h2YWxfdCkJIAkJCVwKKwlraF8jI25hbWUjI190ICpraF9pbml0XyMjbmFtZSh2b2lkKTsJCQkJCQlcCisJdm9pZCBraF9kZXN0cm95XyMjbmFtZShraF8jI25hbWUjI190ICpoKTsJCQkJCVwKKwl2b2lkIGtoX2NsZWFyXyMjbmFtZShraF8jI25hbWUjI190ICpoKTsJCQkJCQlcCisJa2hpbnRfdCBraF9nZXRfIyNuYW1lKGNvbnN0IGtoXyMjbmFtZSMjX3QgKmgsIGtoa2V5X3Qga2V5KTsgXAorCWludCBraF9yZXNpemVfIyNuYW1lKGtoXyMjbmFtZSMjX3QgKmgsIGtoaW50X3QgbmV3X25fYnVja2V0cyk7IFwKKwlraGludF90IGtoX3B1dF8jI25hbWUoa2hfIyNuYW1lIyNfdCAqaCwga2hrZXlfdCBrZXksIGludCAqcmV0KTsgXAorCXZvaWQga2hfZGVsXyMjbmFtZShraF8jI25hbWUjI190ICpoLCBraGludF90IHgpOworCisjZGVmaW5lIF9fS0hBU0hfSU1QTChuYW1lLCBTQ09QRSwga2hrZXlfdCwga2h2YWxfdCwga2hfaXNfbWFwLCBfX2hhc2hfZnVuYywgX19oYXNoX2VxdWFsKSBcCisJU0NPUEUga2hfIyNuYW1lIyNfdCAqa2hfaW5pdF8jI25hbWUodm9pZCkgewkJCQkJCQlcCisJCXJldHVybiAoa2hfIyNuYW1lIyNfdCopeGNhbGxvYygxLCBzaXplb2Yoa2hfIyNuYW1lIyNfdCkpOwkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCVwKKwlTQ09QRSB2b2lkIGtoX3JlbGVhc2VfIyNuYW1lKGtoXyMjbmFtZSMjX3QgKmgpCQkJCQkJXAorCXsJCQkJCQkJCQkJCQkJCQkJCVwKKwkJZnJlZShoLT5mbGFncyk7CQkJCQkJCQkJCQkJCVwKKwkJZnJlZSgodm9pZCAqKWgtPmtleXMpOwkJCQkJCQkJCQkJXAorCQlmcmVlKCh2b2lkICopaC0+dmFscyk7CQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJXAorCVNDT1BFIHZvaWQga2hfZGVzdHJveV8jI25hbWUoa2hfIyNuYW1lIyNfdCAqaCkJCQkJCQlcCisJewkJCQkJCQkJCQkJCQkJCQkJXAorCQlpZiAoaCkgewkJCQkJCQkJCQkJCQkJXAorCQkJa2hfcmVsZWFzZV8jI25hbWUoaCk7CQkJCQkJCQkJCVwKKwkJCWZyZWUoaCk7CQkJCQkJCQkJCQkJCVwKKwkJfQkJCQkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJXAorCVNDT1BFIHZvaWQga2hfY2xlYXJfIyNuYW1lKGtoXyMjbmFtZSMjX3QgKmgpCQkJCQkJXAorCXsJCQkJCQkJCQkJCQkJCQkJCVwKKwkJaWYgKGggJiYgaC0+ZmxhZ3MpIHsJCQkJCQkJCQkJCVwKKwkJCW1lbXNldChoLT5mbGFncywgMHhhYSwgX19hY19mc2l6ZShoLT5uX2J1Y2tldHMpICogc2l6ZW9mKGtoaW50MzJfdCkpOyBcCisJCQloLT5zaXplID0gaC0+bl9vY2N1cGllZCA9IDA7CQkJCQkJCQlcCisJCX0JCQkJCQkJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCVwKKwlTQ09QRSBraGludF90IGtoX2dldF8jI25hbWUoY29uc3Qga2hfIyNuYW1lIyNfdCAqaCwga2hrZXlfdCBrZXkpIAlcCisJewkJCQkJCQkJCQkJCQkJCQkJXAorCQlpZiAoaC0+bl9idWNrZXRzKSB7CQkJCQkJCQkJCQkJXAorCQkJa2hpbnRfdCBrLCBpLCBsYXN0LCBtYXNrLCBzdGVwID0gMDsgXAorCQkJbWFzayA9IGgtPm5fYnVja2V0cyAtIDE7CQkJCQkJCQkJXAorCQkJayA9IF9faGFzaF9mdW5jKGtleSk7IGkgPSBrICYgbWFzazsJCQkJCQkJXAorCQkJbGFzdCA9IGk7IFwKKwkJCXdoaWxlICghX19hY19pc2VtcHR5KGgtPmZsYWdzLCBpKSAmJiAoX19hY19pc2RlbChoLT5mbGFncywgaSkgfHwgIV9faGFzaF9lcXVhbChoLT5rZXlzW2ldLCBrZXkpKSkgeyBcCisJCQkJaSA9IChpICsgKCsrc3RlcCkpICYgbWFzazsgXAorCQkJCWlmIChpID09IGxhc3QpIHJldHVybiBoLT5uX2J1Y2tldHM7CQkJCQkJXAorCQkJfQkJCQkJCQkJCQkJCQkJCVwKKwkJCXJldHVybiBfX2FjX2lzZWl0aGVyKGgtPmZsYWdzLCBpKT8gaC0+bl9idWNrZXRzIDogaTsJCVwKKwkJfSBlbHNlIHJldHVybiAwOwkJCQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQlcCisJU0NPUEUgaW50IGtoX3Jlc2l6ZV8jI25hbWUoa2hfIyNuYW1lIyNfdCAqaCwga2hpbnRfdCBuZXdfbl9idWNrZXRzKSBcCisJeyAvKiBUaGlzIGZ1bmN0aW9uIHVzZXMgMC4yNSpuX2J1Y2tldHMgYnl0ZXMgb2Ygd29ya2luZyBzcGFjZSBpbnN0ZWFkIG9mIFtzaXplb2Yoa2V5X3QrdmFsX3QpKy4yNV0qbl9idWNrZXRzLiAqLyBcCisJCWtoaW50MzJfdCAqbmV3X2ZsYWdzID0gTlVMTDsJCQkJCQkJCQkJXAorCQlraGludF90IGogPSAxOwkJCQkJCQkJCQkJCQlcCisJCXsJCQkJCQkJCQkJCQkJCQkJXAorCQkJa3JvdW5kdXAzMihuZXdfbl9idWNrZXRzKTsgCQkJCQkJCQkJXAorCQkJaWYgKG5ld19uX2J1Y2tldHMgPCA0KSBuZXdfbl9idWNrZXRzID0gNDsJCQkJCVwKKwkJCWlmIChoLT5zaXplID49IChraGludF90KShuZXdfbl9idWNrZXRzICogX19hY19IQVNIX1VQUEVSICsgMC41KSkgaiA9IDA7CS8qIHJlcXVlc3RlZCBzaXplIGlzIHRvbyBzbWFsbCAqLyBcCisJCQllbHNlIHsgLyogaGFzaCB0YWJsZSBzaXplIHRvIGJlIGNoYW5nZWQgKHNocmluayBvciBleHBhbmQpOyByZWhhc2ggKi8gXAorCQkJCUFMTE9DX0FSUkFZKG5ld19mbGFncywgX19hY19mc2l6ZShuZXdfbl9idWNrZXRzKSk7IFwKKwkJCQlpZiAoIW5ld19mbGFncykgcmV0dXJuIC0xOwkJCQkJCQkJXAorCQkJCW1lbXNldChuZXdfZmxhZ3MsIDB4YWEsIF9fYWNfZnNpemUobmV3X25fYnVja2V0cykgKiBzaXplb2Yoa2hpbnQzMl90KSk7IFwKKwkJCQlpZiAoaC0+bl9idWNrZXRzIDwgbmV3X25fYnVja2V0cykgewkvKiBleHBhbmQgKi8JCVwKKwkJCQkJUkVBTExPQ19BUlJBWShoLT5rZXlzLCBuZXdfbl9idWNrZXRzKTsgXAorCQkJCQlpZiAoa2hfaXNfbWFwKSB7CQkJCQkJCQkJXAorCQkJCQkJUkVBTExPQ19BUlJBWShoLT52YWxzLCBuZXdfbl9idWNrZXRzKTsgXAorCQkJCQl9CQkJCQkJCQkJCQkJCVwKKwkJCQl9IC8qIG90aGVyd2lzZSBzaHJpbmsgKi8JCQkJCQkJCVwKKwkJCX0JCQkJCQkJCQkJCQkJCQlcCisJCX0JCQkJCQkJCQkJCQkJCQkJXAorCQlpZiAoaikgeyAvKiByZWhhc2hpbmcgaXMgbmVlZGVkICovCQkJCQkJCQlcCisJCQlmb3IgKGogPSAwOyBqICE9IGgtPm5fYnVja2V0czsgKytqKSB7CQkJCQkJXAorCQkJCWlmIChfX2FjX2lzZWl0aGVyKGgtPmZsYWdzLCBqKSA9PSAwKSB7CQkJCQlcCisJCQkJCWtoa2V5X3Qga2V5ID0gaC0+a2V5c1tqXTsJCQkJCQkJXAorCQkJCQlraHZhbF90IHZhbDsJCQkJCQkJCQkJXAorCQkJCQlraGludF90IG5ld19tYXNrOwkJCQkJCQkJCVwKKwkJCQkJbmV3X21hc2sgPSBuZXdfbl9idWNrZXRzIC0gMTsgCQkJCQkJXAorCQkJCQlpZiAoa2hfaXNfbWFwKSB2YWwgPSBoLT52YWxzW2pdOwkJCQkJXAorCQkJCQlfX2FjX3NldF9pc2RlbF90cnVlKGgtPmZsYWdzLCBqKTsJCQkJCVwKKwkJCQkJd2hpbGUgKDEpIHsgLyoga2ljay1vdXQgcHJvY2Vzczsgc29ydCBvZiBsaWtlIGluIEN1Y2tvbyBoYXNoaW5nICovIFwKKwkJCQkJCWtoaW50X3QgaywgaSwgc3RlcCA9IDA7IFwKKwkJCQkJCWsgPSBfX2hhc2hfZnVuYyhrZXkpOwkJCQkJCQlcCisJCQkJCQlpID0gayAmIG5ld19tYXNrOwkJCQkJCQkJXAorCQkJCQkJd2hpbGUgKCFfX2FjX2lzZW1wdHkobmV3X2ZsYWdzLCBpKSkgaSA9IChpICsgKCsrc3RlcCkpICYgbmV3X21hc2s7IFwKKwkJCQkJCV9fYWNfc2V0X2lzZW1wdHlfZmFsc2UobmV3X2ZsYWdzLCBpKTsJCQlcCisJCQkJCQlpZiAoaSA8IGgtPm5fYnVja2V0cyAmJiBfX2FjX2lzZWl0aGVyKGgtPmZsYWdzLCBpKSA9PSAwKSB7IC8qIGtpY2sgb3V0IHRoZSBleGlzdGluZyBlbGVtZW50ICovIFwKKwkJCQkJCQl7IGtoa2V5X3QgdG1wID0gaC0+a2V5c1tpXTsgaC0+a2V5c1tpXSA9IGtleTsga2V5ID0gdG1wOyB9IFwKKwkJCQkJCQlpZiAoa2hfaXNfbWFwKSB7IGtodmFsX3QgdG1wID0gaC0+dmFsc1tpXTsgaC0+dmFsc1tpXSA9IHZhbDsgdmFsID0gdG1wOyB9IFwKKwkJCQkJCQlfX2FjX3NldF9pc2RlbF90cnVlKGgtPmZsYWdzLCBpKTsgLyogbWFyayBpdCBhcyBkZWxldGVkIGluIHRoZSBvbGQgaGFzaCB0YWJsZSAqLyBcCisJCQkJCQl9IGVsc2UgeyAvKiB3cml0ZSB0aGUgZWxlbWVudCBhbmQganVtcCBvdXQgb2YgdGhlIGxvb3AgKi8gXAorCQkJCQkJCWgtPmtleXNbaV0gPSBrZXk7CQkJCQkJCVwKKwkJCQkJCQlpZiAoa2hfaXNfbWFwKSBoLT52YWxzW2ldID0gdmFsOwkJCVwKKwkJCQkJCQlicmVhazsJCQkJCQkJCQkJXAorCQkJCQkJfQkJCQkJCQkJCQkJCVwKKwkJCQkJfQkJCQkJCQkJCQkJCQlcCisJCQkJfQkJCQkJCQkJCQkJCQkJXAorCQkJfQkJCQkJCQkJCQkJCQkJCVwKKwkJCWlmIChoLT5uX2J1Y2tldHMgPiBuZXdfbl9idWNrZXRzKSB7IC8qIHNocmluayB0aGUgaGFzaCB0YWJsZSAqLyBcCisJCQkJUkVBTExPQ19BUlJBWShoLT5rZXlzLCBuZXdfbl9idWNrZXRzKTsgXAorCQkJCWlmIChraF9pc19tYXApIFJFQUxMT0NfQVJSQVkoaC0+dmFscywgbmV3X25fYnVja2V0cyk7IFwKKwkJCX0JCQkJCQkJCQkJCQkJCQlcCisJCQlmcmVlKGgtPmZsYWdzKTsgLyogZnJlZSB0aGUgd29ya2luZyBzcGFjZSAqLwkJCQlcCisJCQloLT5mbGFncyA9IG5ld19mbGFnczsJCQkJCQkJCQkJXAorCQkJaC0+bl9idWNrZXRzID0gbmV3X25fYnVja2V0czsJCQkJCQkJCVwKKwkJCWgtPm5fb2NjdXBpZWQgPSBoLT5zaXplOwkJCQkJCQkJCVwKKwkJCWgtPnVwcGVyX2JvdW5kID0gKGtoaW50X3QpKGgtPm5fYnVja2V0cyAqIF9fYWNfSEFTSF9VUFBFUiArIDAuNSk7IFwKKwkJfQkJCQkJCQkJCQkJCQkJCQlcCisJCXJldHVybiAwOwkJCQkJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCVwKKwlTQ09QRSBraGludF90IGtoX3B1dF8jI25hbWUoa2hfIyNuYW1lIyNfdCAqaCwga2hrZXlfdCBrZXksIGludCAqcmV0KSBcCisJewkJCQkJCQkJCQkJCQkJCQkJXAorCQlraGludF90IHg7CQkJCQkJCQkJCQkJCQlcCisJCWlmIChoLT5uX29jY3VwaWVkID49IGgtPnVwcGVyX2JvdW5kKSB7IC8qIHVwZGF0ZSB0aGUgaGFzaCB0YWJsZSAqLyBcCisJCQlpZiAoaC0+bl9idWNrZXRzID4gKGgtPnNpemU8PDEpKSB7CQkJCQkJCVwKKwkJCQlpZiAoa2hfcmVzaXplXyMjbmFtZShoLCBoLT5uX2J1Y2tldHMgLSAxKSA8IDApIHsgLyogY2xlYXIgImRlbGV0ZWQiIGVsZW1lbnRzICovIFwKKwkJCQkJKnJldCA9IC0xOyByZXR1cm4gaC0+bl9idWNrZXRzOwkJCQkJCVwKKwkJCQl9CQkJCQkJCQkJCQkJCQlcCisJCQl9IGVsc2UgaWYgKGtoX3Jlc2l6ZV8jI25hbWUoaCwgaC0+bl9idWNrZXRzICsgMSkgPCAwKSB7IC8qIGV4cGFuZCB0aGUgaGFzaCB0YWJsZSAqLyBcCisJCQkJKnJldCA9IC0xOyByZXR1cm4gaC0+bl9idWNrZXRzOwkJCQkJCQlcCisJCQl9CQkJCQkJCQkJCQkJCQkJXAorCQl9IC8qIFRPRE86IHRvIGltcGxlbWVudCBhdXRvbWF0aWNhbGx5IHNocmlua2luZzsgcmVzaXplKCkgYWxyZWFkeSBzdXBwb3J0IHNocmlua2luZyAqLyBcCisJCXsJCQkJCQkJCQkJCQkJCQkJXAorCQkJa2hpbnRfdCBrLCBpLCBzaXRlLCBsYXN0LCBtYXNrID0gaC0+bl9idWNrZXRzIC0gMSwgc3RlcCA9IDA7IFwKKwkJCXggPSBzaXRlID0gaC0+bl9idWNrZXRzOyBrID0gX19oYXNoX2Z1bmMoa2V5KTsgaSA9IGsgJiBtYXNrOyBcCisJCQlpZiAoX19hY19pc2VtcHR5KGgtPmZsYWdzLCBpKSkgeCA9IGk7IC8qIGZvciBzcGVlZCB1cCAqLwlcCisJCQllbHNlIHsJCQkJCQkJCQkJCQkJCVwKKwkJCQlsYXN0ID0gaTsgXAorCQkJCXdoaWxlICghX19hY19pc2VtcHR5KGgtPmZsYWdzLCBpKSAmJiAoX19hY19pc2RlbChoLT5mbGFncywgaSkgfHwgIV9faGFzaF9lcXVhbChoLT5rZXlzW2ldLCBrZXkpKSkgeyBcCisJCQkJCWlmIChfX2FjX2lzZGVsKGgtPmZsYWdzLCBpKSkgc2l0ZSA9IGk7CQkJCVwKKwkJCQkJaSA9IChpICsgKCsrc3RlcCkpICYgbWFzazsgXAorCQkJCQlpZiAoaSA9PSBsYXN0KSB7IHggPSBzaXRlOyBicmVhazsgfQkJCQkJXAorCQkJCX0JCQkJCQkJCQkJCQkJCVwKKwkJCQlpZiAoeCA9PSBoLT5uX2J1Y2tldHMpIHsJCQkJCQkJCVwKKwkJCQkJaWYgKF9fYWNfaXNlbXB0eShoLT5mbGFncywgaSkgJiYgc2l0ZSAhPSBoLT5uX2J1Y2tldHMpIHggPSBzaXRlOyBcCisJCQkJCWVsc2UgeCA9IGk7CQkJCQkJCQkJCQlcCisJCQkJfQkJCQkJCQkJCQkJCQkJXAorCQkJfQkJCQkJCQkJCQkJCQkJCVwKKwkJfQkJCQkJCQkJCQkJCQkJCQlcCisJCWlmIChfX2FjX2lzZW1wdHkoaC0+ZmxhZ3MsIHgpKSB7IC8qIG5vdCBwcmVzZW50IGF0IGFsbCAqLwkJXAorCQkJaC0+a2V5c1t4XSA9IGtleTsJCQkJCQkJCQkJCVwKKwkJCV9fYWNfc2V0X2lzYm90aF9mYWxzZShoLT5mbGFncywgeCk7CQkJCQkJCVwKKwkJCSsraC0+c2l6ZTsgKytoLT5uX29jY3VwaWVkOwkJCQkJCQkJCVwKKwkJCSpyZXQgPSAxOwkJCQkJCQkJCQkJCQlcCisJCX0gZWxzZSBpZiAoX19hY19pc2RlbChoLT5mbGFncywgeCkpIHsgLyogZGVsZXRlZCAqLwkJCQlcCisJCQloLT5rZXlzW3hdID0ga2V5OwkJCQkJCQkJCQkJXAorCQkJX19hY19zZXRfaXNib3RoX2ZhbHNlKGgtPmZsYWdzLCB4KTsJCQkJCQkJXAorCQkJKytoLT5zaXplOwkJCQkJCQkJCQkJCQlcCisJCQkqcmV0ID0gMjsJCQkJCQkJCQkJCQkJXAorCQl9IGVsc2UgKnJldCA9IDA7IC8qIERvbid0IHRvdWNoIGgtPmtleXNbeF0gaWYgcHJlc2VudCBhbmQgbm90IGRlbGV0ZWQgKi8gXAorCQlyZXR1cm4geDsJCQkJCQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQlcCisJU0NPUEUgdm9pZCBraF9kZWxfIyNuYW1lKGtoXyMjbmFtZSMjX3QgKmgsIGtoaW50X3QgeCkJCQkJXAorCXsJCQkJCQkJCQkJCQkJCQkJCVwKKwkJaWYgKHggIT0gaC0+bl9idWNrZXRzICYmICFfX2FjX2lzZWl0aGVyKGgtPmZsYWdzLCB4KSkgewkJCVwKKwkJCV9fYWNfc2V0X2lzZGVsX3RydWUoaC0+ZmxhZ3MsIHgpOwkJCQkJCQlcCisJCQktLWgtPnNpemU7CQkJCQkJCQkJCQkJCVwKKwkJfQkJCQkJCQkJCQkJCQkJCQlcCisJfQorCisjZGVmaW5lIEtIQVNIX0RFQ0xBUkUobmFtZSwga2hrZXlfdCwga2h2YWxfdCkJCSAJCQkJCVwKKwlfX0tIQVNIX1RZUEUobmFtZSwga2hrZXlfdCwga2h2YWxfdCkgCQkJCQkJCQlcCisJX19LSEFTSF9QUk9UT1RZUEVTKG5hbWUsIGtoa2V5X3QsIGtodmFsX3QpCisKKyNkZWZpbmUgS0hBU0hfSU5JVDIobmFtZSwgU0NPUEUsIGtoa2V5X3QsIGtodmFsX3QsIGtoX2lzX21hcCwgX19oYXNoX2Z1bmMsIF9faGFzaF9lcXVhbCkgXAorCV9fS0hBU0hfVFlQRShuYW1lLCBraGtleV90LCBraHZhbF90KSAJCQkJCQkJCVwKKwlfX0tIQVNIX0lNUEwobmFtZSwgU0NPUEUsIGtoa2V5X3QsIGtodmFsX3QsIGtoX2lzX21hcCwgX19oYXNoX2Z1bmMsIF9faGFzaF9lcXVhbCkKKworI2RlZmluZSBLSEFTSF9JTklUKG5hbWUsIGtoa2V5X3QsIGtodmFsX3QsIGtoX2lzX21hcCwgX19oYXNoX2Z1bmMsIF9faGFzaF9lcXVhbCkgXAorCUtIQVNIX0lOSVQyKG5hbWUsIE1BWUJFX1VOVVNFRCBzdGF0aWMgaW5saW5lLCBraGtleV90LCBraHZhbF90LCBraF9pc19tYXAsIF9faGFzaF9mdW5jLCBfX2hhc2hfZXF1YWwpCisKKy8qIE90aGVyIGNvbnZlbmllbnQgbWFjcm9zLi4uICovCisKKy8qISBAZnVuY3Rpb24KKyAgQGFic3RyYWN0ICAgICBUZXN0IHdoZXRoZXIgYSBidWNrZXQgY29udGFpbnMgZGF0YS4KKyAgQHBhcmFtICBoICAgICBQb2ludGVyIHRvIHRoZSBoYXNoIHRhYmxlIFtraGFzaF90KG5hbWUpKl0KKyAgQHBhcmFtICB4ICAgICBJdGVyYXRvciB0byB0aGUgYnVja2V0IFtraGludF90XQorICBAcmV0dXJuICAgICAgIDEgaWYgY29udGFpbmluZyBkYXRhOyAwIG90aGVyd2lzZSBbaW50XQorICovCisjZGVmaW5lIGtoX2V4aXN0KGgsIHgpICghX19hY19pc2VpdGhlcigoaCktPmZsYWdzLCAoeCkpKQorCisvKiEgQGZ1bmN0aW9uCisgIEBhYnN0cmFjdCAgICAgR2V0IGtleSBnaXZlbiBhbiBpdGVyYXRvcgorICBAcGFyYW0gIGggICAgIFBvaW50ZXIgdG8gdGhlIGhhc2ggdGFibGUgW2toYXNoX3QobmFtZSkqXQorICBAcGFyYW0gIHggICAgIEl0ZXJhdG9yIHRvIHRoZSBidWNrZXQgW2toaW50X3RdCisgIEByZXR1cm4gICAgICAgS2V5IFt0eXBlIG9mIGtleXNdCisgKi8KKyNkZWZpbmUga2hfa2V5KGgsIHgpICgoaCktPmtleXNbeF0pCisKKy8qISBAZnVuY3Rpb24KKyAgQGFic3RyYWN0ICAgICBHZXQgdmFsdWUgZ2l2ZW4gYW4gaXRlcmF0b3IKKyAgQHBhcmFtICBoICAgICBQb2ludGVyIHRvIHRoZSBoYXNoIHRhYmxlIFtraGFzaF90KG5hbWUpKl0KKyAgQHBhcmFtICB4ICAgICBJdGVyYXRvciB0byB0aGUgYnVja2V0IFtraGludF90XQorICBAcmV0dXJuICAgICAgIFZhbHVlIFt0eXBlIG9mIHZhbHVlc10KKyAgQGRpc2N1c3Npb24gICBGb3IgaGFzaCBzZXRzLCBjYWxsaW5nIHRoaXMgcmVzdWx0cyBpbiBzZWdmYXVsdC4KKyAqLworI2RlZmluZSBraF92YWwoaCwgeCkgKChoKS0+dmFsc1t4XSkKKworLyohIEBmdW5jdGlvbgorICBAYWJzdHJhY3QgICAgIEFsaWFzIG9mIGtoX3ZhbCgpCisgKi8KKyNkZWZpbmUga2hfdmFsdWUoaCwgeCkgKChoKS0+dmFsc1t4XSkKKworLyohIEBmdW5jdGlvbgorICBAYWJzdHJhY3QgICAgIEdldCB0aGUgc3RhcnQgaXRlcmF0b3IKKyAgQHBhcmFtICBoICAgICBQb2ludGVyIHRvIHRoZSBoYXNoIHRhYmxlIFtraGFzaF90KG5hbWUpKl0KKyAgQHJldHVybiAgICAgICBUaGUgc3RhcnQgaXRlcmF0b3IgW2toaW50X3RdCisgKi8KKyNkZWZpbmUga2hfYmVnaW4oaCkgKGtoaW50X3QpKDApCisKKy8qISBAZnVuY3Rpb24KKyAgQGFic3RyYWN0ICAgICBHZXQgdGhlIGVuZCBpdGVyYXRvcgorICBAcGFyYW0gIGggICAgIFBvaW50ZXIgdG8gdGhlIGhhc2ggdGFibGUgW2toYXNoX3QobmFtZSkqXQorICBAcmV0dXJuICAgICAgIFRoZSBlbmQgaXRlcmF0b3IgW2toaW50X3RdCisgKi8KKyNkZWZpbmUga2hfZW5kKGgpICgoaCktPm5fYnVja2V0cykKKworLyohIEBmdW5jdGlvbgorICBAYWJzdHJhY3QgICAgIEdldCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBoYXNoIHRhYmxlCisgIEBwYXJhbSAgaCAgICAgUG9pbnRlciB0byB0aGUgaGFzaCB0YWJsZSBba2hhc2hfdChuYW1lKSpdCisgIEByZXR1cm4gICAgICAgTnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBoYXNoIHRhYmxlIFtraGludF90XQorICovCisjZGVmaW5lIGtoX3NpemUoaCkgKChoKS0+c2l6ZSkKKworLyohIEBmdW5jdGlvbgorICBAYWJzdHJhY3QgICAgIEdldCB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgaW4gdGhlIGhhc2ggdGFibGUKKyAgQHBhcmFtICBoICAgICBQb2ludGVyIHRvIHRoZSBoYXNoIHRhYmxlIFtraGFzaF90KG5hbWUpKl0KKyAgQHJldHVybiAgICAgICBOdW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgaGFzaCB0YWJsZSBba2hpbnRfdF0KKyAqLworI2RlZmluZSBraF9uX2J1Y2tldHMoaCkgKChoKS0+bl9idWNrZXRzKQorCisvKiEgQGZ1bmN0aW9uCisgIEBhYnN0cmFjdCAgICAgSXRlcmF0ZSBvdmVyIHRoZSBlbnRyaWVzIGluIHRoZSBoYXNoIHRhYmxlCisgIEBwYXJhbSAgaCAgICAgUG9pbnRlciB0byB0aGUgaGFzaCB0YWJsZSBba2hhc2hfdChuYW1lKSpdCisgIEBwYXJhbSAga3ZhciAgVmFyaWFibGUgdG8gd2hpY2gga2V5IHdpbGwgYmUgYXNzaWduZWQKKyAgQHBhcmFtICB2dmFyICBWYXJpYWJsZSB0byB3aGljaCB2YWx1ZSB3aWxsIGJlIGFzc2lnbmVkCisgIEBwYXJhbSAgY29kZSAgQmxvY2sgb2YgY29kZSB0byBleGVjdXRlCisgKi8KKyNkZWZpbmUga2hfZm9yZWFjaChoLCBrdmFyLCB2dmFyLCBjb2RlKSB7IGtoaW50X3QgX19pOwkJXAorCWZvciAoX19pID0ga2hfYmVnaW4oaCk7IF9faSAhPSBraF9lbmQoaCk7ICsrX19pKSB7CQlcCisJCWlmICgha2hfZXhpc3QoaCxfX2kpKSBjb250aW51ZTsJCQkJCQlcCisJCShrdmFyKSA9IGtoX2tleShoLF9faSk7CQkJCQkJCQlcCisJCSh2dmFyKSA9IGtoX3ZhbChoLF9faSk7CQkJCQkJCQlcCisJCWNvZGU7CQkJCQkJCQkJCQkJXAorCX0gfQorCisvKiEgQGZ1bmN0aW9uCisgIEBhYnN0cmFjdCAgICAgSXRlcmF0ZSBvdmVyIHRoZSB2YWx1ZXMgaW4gdGhlIGhhc2ggdGFibGUKKyAgQHBhcmFtICBoICAgICBQb2ludGVyIHRvIHRoZSBoYXNoIHRhYmxlIFtraGFzaF90KG5hbWUpKl0KKyAgQHBhcmFtICB2dmFyICBWYXJpYWJsZSB0byB3aGljaCB2YWx1ZSB3aWxsIGJlIGFzc2lnbmVkCisgIEBwYXJhbSAgY29kZSAgQmxvY2sgb2YgY29kZSB0byBleGVjdXRlCisgKi8KKyNkZWZpbmUga2hfZm9yZWFjaF92YWx1ZShoLCB2dmFyLCBjb2RlKSB7IGtoaW50X3QgX19pOwkJXAorCWZvciAoX19pID0ga2hfYmVnaW4oaCk7IF9faSAhPSBraF9lbmQoaCk7ICsrX19pKSB7CQlcCisJCWlmICgha2hfZXhpc3QoaCxfX2kpKSBjb250aW51ZTsJCQkJCQlcCisJCSh2dmFyKSA9IGtoX3ZhbChoLF9faSk7CQkJCQkJCQlcCisJCWNvZGU7CQkJCQkJCQkJCQkJXAorCX0gfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvaWRoYXNoX2J5X3ZhbHVlKHN0cnVjdCBvYmplY3RfaWQgb2lkKQoreworCXJldHVybiBvaWRoYXNoKCZvaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBvaWRlcV9ieV92YWx1ZShzdHJ1Y3Qgb2JqZWN0X2lkIGEsIHN0cnVjdCBvYmplY3RfaWQgYikKK3sKKwlyZXR1cm4gb2lkZXEoJmEsICZiKTsKK30KKworS0hBU0hfSU5JVChvaWRfc2V0LCBzdHJ1Y3Qgb2JqZWN0X2lkLCBpbnQsIDAsIG9pZGhhc2hfYnlfdmFsdWUsIG9pZGVxX2J5X3ZhbHVlKQorCitLSEFTSF9JTklUKG9pZF9tYXAsIHN0cnVjdCBvYmplY3RfaWQsIHZvaWQgKiwgMSwgb2lkaGFzaF9ieV92YWx1ZSwgb2lkZXFfYnlfdmFsdWUpCisKK0tIQVNIX0lOSVQob2lkX3Bvcywgc3RydWN0IG9iamVjdF9pZCwgaW50LCAxLCBvaWRoYXNoX2J5X3ZhbHVlLCBvaWRlcV9ieV92YWx1ZSkKKworI2VuZGlmIC8qIF9fQUNfS0hBU0hfSCAqLwpkaWZmIC0tZ2l0IGEva3dzZXQuYyBiL2t3c2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM0MzllMAotLS0gL2Rldi9udWxsCisrKyBiL2t3c2V0LmMKQEAgLTAsMCArMSw3NzUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gY29waWVkIGZyb20gY29tbWl0IGU3YWM3MTNkXiBpbiB0aGUgR05VIGdyZXAgZ2l0CisgKiByZXBvc2l0b3J5LiBBIGZldyBzbWFsbCBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIGFkYXB0IHRoZSBjb2RlIHRvCisgKiBHaXQuCisgKi8KKworLyoga3dzZXQuYyAtIHNlYXJjaCBmb3IgYW55IG9mIGEgc2V0IG9mIGtleXdvcmRzLgorICAgQ29weXJpZ2h0IDE5ODksIDE5OTgsIDIwMDAsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAqLworCisvKiBXcml0dGVuIEF1Z3VzdCAxOTg5IGJ5IE1pa2UgSGFlcnRlbC4KKyAgIFRoZSBhdXRob3IgbWF5IGJlIHJlYWNoZWQgKEVtYWlsKSBhdCB0aGUgYWRkcmVzcyBtaWtlQGFpLm1pdC5lZHUsCisgICBvciAoVVMgbWFpbCkgYXMgTWlrZSBIYWVydGVsIGMvbyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICovCisKKy8qIFRoZSBhbGdvcml0aG0gaW1wbGVtZW50ZWQgYnkgdGhlc2Ugcm91dGluZXMgYmVhcnMgYSBzdGFydGxpbmcgcmVzZW1ibGFuY2UKKyAgIHRvIG9uZSBkaXNjb3ZlcmVkIGJ5IEJlYXRlIENvbW1lbnR6LVdhbHRlciwgYWx0aG91Z2ggaXQgaXMgbm90IGlkZW50aWNhbC4KKyAgIFNlZSAiQSBTdHJpbmcgTWF0Y2hpbmcgQWxnb3JpdGhtIEZhc3Qgb24gdGhlIEF2ZXJhZ2UsIiBUZWNobmljYWwgUmVwb3J0LAorICAgSUJNLUdlcm1hbnksIFNjaWVudGlmaWMgQ2VudGVyIEhlaWRlbGJlcmcsIFRpZXJnYXJ0ZW5zdHJhc3NlIDE1LCBELTY5MDAKKyAgIEhlaWRlbGJlcmcsIEdlcm1hbnkuICBTZWUgYWxzbyBBaG8sIEEuVi4sIGFuZCBNLiBDb3Jhc2ljaywgIkVmZmljaWVudAorICAgU3RyaW5nIE1hdGNoaW5nOiAgQW4gQWlkIHRvIEJpYmxpb2dyYXBoaWMgU2VhcmNoLCIgQ0FDTSBKdW5lIDE5NzUsCisgICBWb2wuIDE4LCBOby4gNiwgd2hpY2ggZGVzY3JpYmVzIHRoZSBmYWlsdXJlIGZ1bmN0aW9uIHVzZWQgYmVsb3cuICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjaW5jbHVkZSAia3dzZXQuaCIKKyNpbmNsdWRlICJjb21wYXQvb2JzdGFjay5oIgorCisjZGVmaW5lIE5DSEFSIChVQ0hBUl9NQVggKyAxKQorLyogYWRhcHRlciBmb3IgYHhtYWxsb2MoKWAsIHdoaWNoIHRha2VzIGBzaXplX3RgLCBub3QgYGxvbmdgICovCitzdGF0aWMgdm9pZCAqb2JzdGFja19jaHVua19hbGxvYyhsb25nIHNpemUpCit7CisJaWYgKHNpemUgPCAwKQorCQlCVUcoIkNhbm5vdCBhbGxvY2F0ZSBhIG5lZ2F0aXZlIGFtb3VudDogJWxkIiwgc2l6ZSk7CisJcmV0dXJuIHhtYWxsb2Moc2l6ZSk7Cit9CisjZGVmaW5lIG9ic3RhY2tfY2h1bmtfZnJlZSBmcmVlCisKKyNkZWZpbmUgVShjKSAoKHVuc2lnbmVkIGNoYXIpIChjKSkKKworLyogQmFsYW5jZWQgdHJlZSBvZiBlZGdlcyBhbmQgbGFiZWxzIGxlYXZpbmcgYSBnaXZlbiB0cmllIG5vZGUuICovCitzdHJ1Y3QgdHJlZQoreworICBzdHJ1Y3QgdHJlZSAqbGxpbms7CQkvKiBMZWZ0IGxpbms7IE1VU1QgYmUgZmlyc3QgZmllbGQuICovCisgIHN0cnVjdCB0cmVlICpybGluazsJCS8qIFJpZ2h0IGxpbmsgKHRvIGxhcmdlciBsYWJlbHMpLiAqLworICBzdHJ1Y3QgdHJpZSAqdHJpZTsJCS8qIFRyaWUgbm9kZSBwb2ludGVkIHRvIGJ5IHRoaXMgZWRnZS4gKi8KKyAgdW5zaWduZWQgY2hhciBsYWJlbDsJCS8qIExhYmVsIG9uIHRoaXMgZWRnZS4gKi8KKyAgY2hhciBiYWxhbmNlOwkJCS8qIERpZmZlcmVuY2UgaW4gZGVwdGhzIG9mIHN1YnRyZWVzLiAqLworfTsKKworLyogTm9kZSBvZiBhIHRyaWUgcmVwcmVzZW50aW5nIGEgc2V0IG9mIHJldmVyc2VkIGtleXdvcmRzLiAqLworc3RydWN0IHRyaWUKK3sKKyAgdW5zaWduZWQgaW50IGFjY2VwdGluZzsJLyogV29yZCBpbmRleCBvZiBhY2NlcHRlZCB3b3JkLCBvciB6ZXJvLiAqLworICBzdHJ1Y3QgdHJlZSAqbGlua3M7CQkvKiBUcmVlIG9mIGVkZ2VzIGxlYXZpbmcgdGhpcyBub2RlLiAqLworICBzdHJ1Y3QgdHJpZSAqcGFyZW50OwkJLyogUGFyZW50IG9mIHRoaXMgbm9kZS4gKi8KKyAgc3RydWN0IHRyaWUgKm5leHQ7CQkvKiBMaXN0IG9mIGFsbCB0cmllIG5vZGVzIGluIGxldmVsIG9yZGVyLiAqLworICBzdHJ1Y3QgdHJpZSAqZmFpbDsJCS8qIEFoby1Db3Jhc2ljayBmYWlsdXJlIGZ1bmN0aW9uLiAqLworICBpbnQgZGVwdGg7CQkJLyogRGVwdGggb2YgdGhpcyBub2RlIGZyb20gdGhlIHJvb3QuICovCisgIGludCBzaGlmdDsJCQkvKiBTaGlmdCBmdW5jdGlvbiBmb3Igc2VhcmNoIGZhaWx1cmVzLiAqLworICBpbnQgbWF4c2hpZnQ7CQkJLyogTWF4IHNoaWZ0IG9mIHNlbGYgYW5kIGRlc2NlbmRhbnRzLiAqLworfTsKKworLyogU3RydWN0dXJlIHJldHVybmVkIG9wYXF1ZWx5IHRvIHRoZSBjYWxsZXIsIGNvbnRhaW5pbmcgZXZlcnl0aGluZy4gKi8KK3N0cnVjdCBrd3NldAoreworICBzdHJ1Y3Qgb2JzdGFjayBvYnN0YWNrOwkvKiBPYnN0YWNrIGZvciBub2RlIGFsbG9jYXRpb24uICovCisgIGludCB3b3JkczsJCQkvKiBOdW1iZXIgb2Ygd29yZHMgaW4gdGhlIHRyaWUuICovCisgIHN0cnVjdCB0cmllICp0cmllOwkJLyogVGhlIHRyaWUgaXRzZWxmLiAqLworICBpbnQgbWluZDsJCQkvKiBNaW5pbXVtIGRlcHRoIG9mIGFuIGFjY2VwdGluZyBub2RlLiAqLworICBpbnQgbWF4ZDsJCQkvKiBNYXhpbXVtIGRlcHRoIG9mIGFueSBub2RlLiAqLworICB1bnNpZ25lZCBjaGFyIGRlbHRhW05DSEFSXTsJLyogRGVsdGEgdGFibGUgZm9yIHJhcGlkIHNlYXJjaC4gKi8KKyAgc3RydWN0IHRyaWUgKm5leHRbTkNIQVJdOwkvKiBUYWJsZSBvZiBjaGlsZHJlbiBvZiB0aGUgcm9vdC4gKi8KKyAgY2hhciAqdGFyZ2V0OwkJCS8qIFRhcmdldCBzdHJpbmcgaWYgdGhlcmUncyBvbmx5IG9uZS4gKi8KKyAgaW50IG1pbmQyOwkJCS8qIFVzZWQgaW4gQm95ZXItTW9vcmUgc2VhcmNoIGZvciBvbmUgc3RyaW5nLiAqLworICB1bnNpZ25lZCBjaGFyIGNvbnN0ICp0cmFuczsgIC8qIENoYXJhY3RlciB0cmFuc2xhdGlvbiB0YWJsZS4gKi8KK307CisKKy8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEga2V5d29yZCBzZXQgb2JqZWN0LCByZXR1cm5pbmcgYW4gb3BhcXVlCisgICBwb2ludGVyIHRvIGl0LiAgUmV0dXJuIE5VTEwgaWYgbWVtb3J5IGlzIG5vdCBhdmFpbGFibGUuICovCitrd3NldF90Citrd3NhbGxvYyAodW5zaWduZWQgY2hhciBjb25zdCAqdHJhbnMpCit7CisgIHN0cnVjdCBrd3NldCAqa3dzZXQ7CisKKyAga3dzZXQgPSAoc3RydWN0IGt3c2V0ICopIHhtYWxsb2Moc2l6ZW9mIChzdHJ1Y3Qga3dzZXQpKTsKKworICBvYnN0YWNrX2luaXQoJmt3c2V0LT5vYnN0YWNrKTsKKyAga3dzZXQtPndvcmRzID0gMDsKKyAga3dzZXQtPnRyaWUKKyAgICA9IChzdHJ1Y3QgdHJpZSAqKSBvYnN0YWNrX2FsbG9jKCZrd3NldC0+b2JzdGFjaywgc2l6ZW9mIChzdHJ1Y3QgdHJpZSkpOworICBpZiAoIWt3c2V0LT50cmllKQorICAgIHsKKyAgICAgIGt3c2ZyZWUoKGt3c2V0X3QpIGt3c2V0KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAga3dzZXQtPnRyaWUtPmFjY2VwdGluZyA9IDA7CisgIGt3c2V0LT50cmllLT5saW5rcyA9IE5VTEw7CisgIGt3c2V0LT50cmllLT5wYXJlbnQgPSBOVUxMOworICBrd3NldC0+dHJpZS0+bmV4dCA9IE5VTEw7CisgIGt3c2V0LT50cmllLT5mYWlsID0gTlVMTDsKKyAga3dzZXQtPnRyaWUtPmRlcHRoID0gMDsKKyAga3dzZXQtPnRyaWUtPnNoaWZ0ID0gMDsKKyAga3dzZXQtPm1pbmQgPSBJTlRfTUFYOworICBrd3NldC0+bWF4ZCA9IC0xOworICBrd3NldC0+dGFyZ2V0ID0gTlVMTDsKKyAga3dzZXQtPnRyYW5zID0gdHJhbnM7CisKKyAgcmV0dXJuIChrd3NldF90KSBrd3NldDsKK30KKworLyogVGhpcyB1cHBlciBib3VuZCBpcyB2YWxpZCBmb3IgQ0hBUl9CSVQgPj0gNCBhbmQKKyAgIGV4YWN0IGZvciBDSEFSX0JJVCBpbiB7IDQuLjExLCAxMywgMTUsIDE3LCAxOSB9LiAqLworI2RlZmluZSBERVBUSF9TSVpFIChDSEFSX0JJVCArIENIQVJfQklULzIpCisKKy8qIEFkZCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBjb250ZW50cyBvZiB0aGUga2V5d29yZCBzZXQuICBSZXR1cm4gTlVMTAorICAgZm9yIHN1Y2Nlc3MsIGFuIGVycm9yIG1lc3NhZ2Ugb3RoZXJ3aXNlLiAqLworY29uc3QgY2hhciAqCitrd3NpbmNyIChrd3NldF90IGt3cywgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IGxlbikKK3sKKyAgc3RydWN0IGt3c2V0ICprd3NldDsKKyAgcmVnaXN0ZXIgc3RydWN0IHRyaWUgKnRyaWU7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgbGFiZWw7CisgIHJlZ2lzdGVyIHN0cnVjdCB0cmVlICpsaW5rOworICByZWdpc3RlciBpbnQgZGVwdGg7CisgIHN0cnVjdCB0cmVlICpsaW5rc1tERVBUSF9TSVpFXTsKKyAgZW51bSB7IEwsIFIgfSBkaXJzW0RFUFRIX1NJWkVdOworICBzdHJ1Y3QgdHJlZSAqdCwgKnIsICpsLCAqcmwsICpscjsKKworICBrd3NldCA9IChzdHJ1Y3Qga3dzZXQgKikga3dzOworICB0cmllID0ga3dzZXQtPnRyaWU7CisgIHRleHQgKz0gbGVuOworCisgIC8qIERlc2NlbmQgdGhlIHRyaWUgKGJ1aWx0IG9mIHJldmVyc2VkIGtleXdvcmRzKSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyLAorICAgICBpbnN0YWxsaW5nIG5ldyBub2RlcyB3aGVuIG5lY2Vzc2FyeS4gKi8KKyAgd2hpbGUgKGxlbi0tKQorICAgIHsKKyAgICAgIGxhYmVsID0ga3dzZXQtPnRyYW5zID8ga3dzZXQtPnRyYW5zW1UoKi0tdGV4dCldIDogKi0tdGV4dDsKKworICAgICAgLyogRGVzY2VuZCB0aGUgdHJlZSBvZiBvdXRnb2luZyBsaW5rcyBmb3IgdGhpcyB0cmllIG5vZGUsCisJIGxvb2tpbmcgZm9yIHRoZSBjdXJyZW50IGNoYXJhY3RlciBhbmQga2VlcGluZyB0cmFjaworCSBvZiB0aGUgcGF0aCBmb2xsb3dlZC4gKi8KKyAgICAgIGxpbmsgPSB0cmllLT5saW5rczsKKyAgICAgIGxpbmtzWzBdID0gKHN0cnVjdCB0cmVlICopICZ0cmllLT5saW5rczsKKyAgICAgIGRpcnNbMF0gPSBMOworICAgICAgZGVwdGggPSAxOworCisgICAgICB3aGlsZSAobGluayAmJiBsYWJlbCAhPSBsaW5rLT5sYWJlbCkKKwl7CisJICBsaW5rc1tkZXB0aF0gPSBsaW5rOworCSAgaWYgKGxhYmVsIDwgbGluay0+bGFiZWwpCisJICAgIGRpcnNbZGVwdGgrK10gPSBMLCBsaW5rID0gbGluay0+bGxpbms7CisJICBlbHNlCisJICAgIGRpcnNbZGVwdGgrK10gPSBSLCBsaW5rID0gbGluay0+cmxpbms7CisJfQorCisgICAgICAvKiBUaGUgY3VycmVudCBjaGFyYWN0ZXIgZG9lc24ndCBoYXZlIGFuIG91dGdvaW5nIGxpbmsgYXQKKwkgdGhpcyB0cmllIG5vZGUsIHNvIGJ1aWxkIGEgbmV3IHRyaWUgbm9kZSBhbmQgaW5zdGFsbAorCSBhIGxpbmsgaW4gdGhlIGN1cnJlbnQgdHJpZSBub2RlJ3MgdHJlZS4gKi8KKyAgICAgIGlmICghbGluaykKKwl7CisJICBsaW5rID0gKHN0cnVjdCB0cmVlICopIG9ic3RhY2tfYWxsb2MoJmt3c2V0LT5vYnN0YWNrLAorCQkJCQkgICAgICAgc2l6ZW9mIChzdHJ1Y3QgdHJlZSkpOworCSAgaWYgKCFsaW5rKQorCSAgICByZXR1cm4gIm1lbW9yeSBleGhhdXN0ZWQiOworCSAgbGluay0+bGxpbmsgPSBOVUxMOworCSAgbGluay0+cmxpbmsgPSBOVUxMOworCSAgbGluay0+dHJpZSA9IChzdHJ1Y3QgdHJpZSAqKSBvYnN0YWNrX2FsbG9jKCZrd3NldC0+b2JzdGFjaywKKwkJCQkJCSAgICAgc2l6ZW9mIChzdHJ1Y3QgdHJpZSkpOworCSAgaWYgKCFsaW5rLT50cmllKQorCSAgICB7CisJICAgICAgb2JzdGFja19mcmVlKCZrd3NldC0+b2JzdGFjaywgbGluayk7CisJICAgICAgcmV0dXJuICJtZW1vcnkgZXhoYXVzdGVkIjsKKwkgICAgfQorCSAgbGluay0+dHJpZS0+YWNjZXB0aW5nID0gMDsKKwkgIGxpbmstPnRyaWUtPmxpbmtzID0gTlVMTDsKKwkgIGxpbmstPnRyaWUtPnBhcmVudCA9IHRyaWU7CisJICBsaW5rLT50cmllLT5uZXh0ID0gTlVMTDsKKwkgIGxpbmstPnRyaWUtPmZhaWwgPSBOVUxMOworCSAgbGluay0+dHJpZS0+ZGVwdGggPSB0cmllLT5kZXB0aCArIDE7CisJICBsaW5rLT50cmllLT5zaGlmdCA9IDA7CisJICBsaW5rLT5sYWJlbCA9IGxhYmVsOworCSAgbGluay0+YmFsYW5jZSA9IDA7CisKKwkgIC8qIEluc3RhbGwgdGhlIG5ldyB0cmVlIG5vZGUgaW4gaXRzIHBhcmVudC4gKi8KKwkgIGlmIChkaXJzWy0tZGVwdGhdID09IEwpCisJICAgIGxpbmtzW2RlcHRoXS0+bGxpbmsgPSBsaW5rOworCSAgZWxzZQorCSAgICBsaW5rc1tkZXB0aF0tPnJsaW5rID0gbGluazsKKworCSAgLyogQmFjayB1cCB0aGUgdHJlZSBmaXhpbmcgdGhlIGJhbGFuY2UgZmxhZ3MuICovCisJICB3aGlsZSAoZGVwdGggJiYgIWxpbmtzW2RlcHRoXS0+YmFsYW5jZSkKKwkgICAgeworCSAgICAgIGlmIChkaXJzW2RlcHRoXSA9PSBMKQorCQktLWxpbmtzW2RlcHRoXS0+YmFsYW5jZTsKKwkgICAgICBlbHNlCisJCSsrbGlua3NbZGVwdGhdLT5iYWxhbmNlOworCSAgICAgIC0tZGVwdGg7CisJICAgIH0KKworCSAgLyogUmViYWxhbmNlIHRoZSB0cmVlIGJ5IHBvaW50ZXIgcm90YXRpb25zIGlmIG5lY2Vzc2FyeS4gKi8KKwkgIGlmIChkZXB0aCAmJiAoKGRpcnNbZGVwdGhdID09IEwgJiYgLS1saW5rc1tkZXB0aF0tPmJhbGFuY2UpCisJCQl8fCAoZGlyc1tkZXB0aF0gPT0gUiAmJiArK2xpbmtzW2RlcHRoXS0+YmFsYW5jZSkpKQorCSAgICB7CisJICAgICAgc3dpdGNoIChsaW5rc1tkZXB0aF0tPmJhbGFuY2UpCisJCXsKKwkJY2FzZSAoY2hhcikgLTI6CisJCSAgc3dpdGNoIChkaXJzW2RlcHRoICsgMV0pCisJCSAgICB7CisJCSAgICBjYXNlIEw6CisJCSAgICAgIHIgPSBsaW5rc1tkZXB0aF0sIHQgPSByLT5sbGluaywgcmwgPSB0LT5ybGluazsKKwkJICAgICAgdC0+cmxpbmsgPSByLCByLT5sbGluayA9IHJsOworCQkgICAgICB0LT5iYWxhbmNlID0gci0+YmFsYW5jZSA9IDA7CisJCSAgICAgIGJyZWFrOworCQkgICAgY2FzZSBSOgorCQkgICAgICByID0gbGlua3NbZGVwdGhdLCBsID0gci0+bGxpbmssIHQgPSBsLT5ybGluazsKKwkJICAgICAgcmwgPSB0LT5ybGluaywgbHIgPSB0LT5sbGluazsKKwkJICAgICAgdC0+bGxpbmsgPSBsLCBsLT5ybGluayA9IGxyLCB0LT5ybGluayA9IHIsIHItPmxsaW5rID0gcmw7CisJCSAgICAgIGwtPmJhbGFuY2UgPSB0LT5iYWxhbmNlICE9IDEgPyAwIDogLTE7CisJCSAgICAgIHItPmJhbGFuY2UgPSB0LT5iYWxhbmNlICE9IChjaGFyKSAtMSA/IDAgOiAxOworCQkgICAgICB0LT5iYWxhbmNlID0gMDsKKwkJICAgICAgYnJlYWs7CisJCSAgICBkZWZhdWx0OgorCQkgICAgICBhYm9ydCAoKTsKKwkJICAgIH0KKwkJICBicmVhazsKKwkJY2FzZSAyOgorCQkgIHN3aXRjaCAoZGlyc1tkZXB0aCArIDFdKQorCQkgICAgeworCQkgICAgY2FzZSBSOgorCQkgICAgICBsID0gbGlua3NbZGVwdGhdLCB0ID0gbC0+cmxpbmssIGxyID0gdC0+bGxpbms7CisJCSAgICAgIHQtPmxsaW5rID0gbCwgbC0+cmxpbmsgPSBscjsKKwkJICAgICAgdC0+YmFsYW5jZSA9IGwtPmJhbGFuY2UgPSAwOworCQkgICAgICBicmVhazsKKwkJICAgIGNhc2UgTDoKKwkJICAgICAgbCA9IGxpbmtzW2RlcHRoXSwgciA9IGwtPnJsaW5rLCB0ID0gci0+bGxpbms7CisJCSAgICAgIGxyID0gdC0+bGxpbmssIHJsID0gdC0+cmxpbms7CisJCSAgICAgIHQtPmxsaW5rID0gbCwgbC0+cmxpbmsgPSBsciwgdC0+cmxpbmsgPSByLCByLT5sbGluayA9IHJsOworCQkgICAgICBsLT5iYWxhbmNlID0gdC0+YmFsYW5jZSAhPSAxID8gMCA6IC0xOworCQkgICAgICByLT5iYWxhbmNlID0gdC0+YmFsYW5jZSAhPSAoY2hhcikgLTEgPyAwIDogMTsKKwkJICAgICAgdC0+YmFsYW5jZSA9IDA7CisJCSAgICAgIGJyZWFrOworCQkgICAgZGVmYXVsdDoKKwkJICAgICAgYWJvcnQgKCk7CisJCSAgICB9CisJCSAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCSAgYWJvcnQgKCk7CisJCX0KKworCSAgICAgIGlmIChkaXJzW2RlcHRoIC0gMV0gPT0gTCkKKwkJbGlua3NbZGVwdGggLSAxXS0+bGxpbmsgPSB0OworCSAgICAgIGVsc2UKKwkJbGlua3NbZGVwdGggLSAxXS0+cmxpbmsgPSB0OworCSAgICB9CisJfQorCisgICAgICB0cmllID0gbGluay0+dHJpZTsKKyAgICB9CisKKyAgLyogTWFyayB0aGUgbm9kZSB3ZSBmaW5hbGx5IHJlYWNoZWQgYXMgYWNjZXB0aW5nLCBlbmNvZGluZyB0aGUKKyAgICAgaW5kZXggbnVtYmVyIG9mIHRoaXMgd29yZCBpbiB0aGUga2V5d29yZCBzZXQgc28gZmFyLiAqLworICBpZiAoIXRyaWUtPmFjY2VwdGluZykKKyAgICB0cmllLT5hY2NlcHRpbmcgPSAxICsgMiAqIGt3c2V0LT53b3JkczsKKyAgKytrd3NldC0+d29yZHM7CisKKyAgLyogS2VlcCB0cmFjayBvZiB0aGUgbG9uZ2VzdCBhbmQgc2hvcnRlc3Qgc3RyaW5nIG9mIHRoZSBrZXl3b3JkIHNldC4gKi8KKyAgaWYgKHRyaWUtPmRlcHRoIDwga3dzZXQtPm1pbmQpCisgICAga3dzZXQtPm1pbmQgPSB0cmllLT5kZXB0aDsKKyAgaWYgKHRyaWUtPmRlcHRoID4ga3dzZXQtPm1heGQpCisgICAga3dzZXQtPm1heGQgPSB0cmllLT5kZXB0aDsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogRW5xdWV1ZSB0aGUgdHJpZSBub2RlcyByZWZlcmVuY2VkIGZyb20gdGhlIGdpdmVuIHRyZWUgaW4gdGhlCisgICBnaXZlbiBxdWV1ZS4gKi8KK3N0YXRpYyB2b2lkCitlbnF1ZXVlIChzdHJ1Y3QgdHJlZSAqdHJlZSwgc3RydWN0IHRyaWUgKipsYXN0KQoreworICBpZiAoIXRyZWUpCisgICAgcmV0dXJuOworICBlbnF1ZXVlKHRyZWUtPmxsaW5rLCBsYXN0KTsKKyAgZW5xdWV1ZSh0cmVlLT5ybGluaywgbGFzdCk7CisgICgqbGFzdCkgPSAoKmxhc3QpLT5uZXh0ID0gdHJlZS0+dHJpZTsKK30KKworLyogQ29tcHV0ZSB0aGUgQWhvLUNvcmFzaWNrIGZhaWx1cmUgZnVuY3Rpb24gZm9yIHRoZSB0cmllIG5vZGVzIHJlZmVyZW5jZWQKKyAgIGZyb20gdGhlIGdpdmVuIHRyZWUsIGdpdmVuIHRoZSBmYWlsdXJlIGZ1bmN0aW9uIGZvciB0aGVpciBwYXJlbnQgYXMKKyAgIHdlbGwgYXMgYSBsYXN0IHJlc29ydCBmYWlsdXJlIG5vZGUuICovCitzdGF0aWMgdm9pZAordHJlZWZhaWxzIChyZWdpc3RlciBzdHJ1Y3QgdHJlZSBjb25zdCAqdHJlZSwgc3RydWN0IHRyaWUgY29uc3QgKmZhaWwsCisJICAgc3RydWN0IHRyaWUgKnJlY291cnNlKQoreworICByZWdpc3RlciBzdHJ1Y3QgdHJlZSAqbGluazsKKworICBpZiAoIXRyZWUpCisgICAgcmV0dXJuOworCisgIHRyZWVmYWlscyh0cmVlLT5sbGluaywgZmFpbCwgcmVjb3Vyc2UpOworICB0cmVlZmFpbHModHJlZS0+cmxpbmssIGZhaWwsIHJlY291cnNlKTsKKworICAvKiBGaW5kLCBpbiB0aGUgY2hhaW4gb2YgZmFpbHMgZ29pbmcgYmFjayB0byB0aGUgcm9vdCwgdGhlIGZpcnN0CisgICAgIG5vZGUgdGhhdCBoYXMgYSBkZXNjZW5kYW50IG9uIHRoZSBjdXJyZW50IGxhYmVsLiAqLworICB3aGlsZSAoZmFpbCkKKyAgICB7CisgICAgICBsaW5rID0gZmFpbC0+bGlua3M7CisgICAgICB3aGlsZSAobGluayAmJiB0cmVlLT5sYWJlbCAhPSBsaW5rLT5sYWJlbCkKKwlpZiAodHJlZS0+bGFiZWwgPCBsaW5rLT5sYWJlbCkKKwkgIGxpbmsgPSBsaW5rLT5sbGluazsKKwllbHNlCisJICBsaW5rID0gbGluay0+cmxpbms7CisgICAgICBpZiAobGluaykKKwl7CisJICB0cmVlLT50cmllLT5mYWlsID0gbGluay0+dHJpZTsKKwkgIHJldHVybjsKKwl9CisgICAgICBmYWlsID0gZmFpbC0+ZmFpbDsKKyAgICB9CisKKyAgdHJlZS0+dHJpZS0+ZmFpbCA9IHJlY291cnNlOworfQorCisvKiBTZXQgZGVsdGEgZW50cmllcyBmb3IgdGhlIGxpbmtzIG9mIHRoZSBnaXZlbiB0cmVlIHN1Y2ggdGhhdAorICAgdGhlIHByZWV4aXN0aW5nIGRlbHRhIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50IGRlcHRoLiAqLworc3RhdGljIHZvaWQKK3RyZWVkZWx0YSAocmVnaXN0ZXIgc3RydWN0IHRyZWUgY29uc3QgKnRyZWUsCisJICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGRlcHRoLAorCSAgIHVuc2lnbmVkIGNoYXIgZGVsdGFbXSkKK3sKKyAgaWYgKCF0cmVlKQorICAgIHJldHVybjsKKyAgdHJlZWRlbHRhKHRyZWUtPmxsaW5rLCBkZXB0aCwgZGVsdGEpOworICB0cmVlZGVsdGEodHJlZS0+cmxpbmssIGRlcHRoLCBkZWx0YSk7CisgIGlmIChkZXB0aCA8IGRlbHRhW3RyZWUtPmxhYmVsXSkKKyAgICBkZWx0YVt0cmVlLT5sYWJlbF0gPSBkZXB0aDsKK30KKworLyogUmV0dXJuIHRydWUgaWYgQSBoYXMgZXZlcnkgbGFiZWwgaW4gQi4gKi8KK3N0YXRpYyBpbnQKK2hhc2V2ZXJ5IChyZWdpc3RlciBzdHJ1Y3QgdHJlZSBjb25zdCAqYSwgcmVnaXN0ZXIgc3RydWN0IHRyZWUgY29uc3QgKmIpCit7CisgIGlmICghYikKKyAgICByZXR1cm4gMTsKKyAgaWYgKCFoYXNldmVyeShhLCBiLT5sbGluaykpCisgICAgcmV0dXJuIDA7CisgIGlmICghaGFzZXZlcnkoYSwgYi0+cmxpbmspKQorICAgIHJldHVybiAwOworICB3aGlsZSAoYSAmJiBiLT5sYWJlbCAhPSBhLT5sYWJlbCkKKyAgICBpZiAoYi0+bGFiZWwgPCBhLT5sYWJlbCkKKyAgICAgIGEgPSBhLT5sbGluazsKKyAgICBlbHNlCisgICAgICBhID0gYS0+cmxpbms7CisgIHJldHVybiAhIWE7Cit9CisKKy8qIENvbXB1dGUgYSB2ZWN0b3IsIGluZGV4ZWQgYnkgY2hhcmFjdGVyIGNvZGUsIG9mIHRoZSB0cmllIG5vZGVzCisgICByZWZlcmVuY2VkIGZyb20gdGhlIGdpdmVuIHRyZWUuICovCitzdGF0aWMgdm9pZAordHJlZW5leHQgKHN0cnVjdCB0cmVlIGNvbnN0ICp0cmVlLCBzdHJ1Y3QgdHJpZSAqbmV4dFtdKQoreworICBpZiAoIXRyZWUpCisgICAgcmV0dXJuOworICB0cmVlbmV4dCh0cmVlLT5sbGluaywgbmV4dCk7CisgIHRyZWVuZXh0KHRyZWUtPnJsaW5rLCBuZXh0KTsKKyAgbmV4dFt0cmVlLT5sYWJlbF0gPSB0cmVlLT50cmllOworfQorCisvKiBDb21wdXRlIHRoZSBzaGlmdCBmb3IgZWFjaCB0cmllIG5vZGUsIGFzIHdlbGwgYXMgdGhlIGRlbHRhCisgICB0YWJsZSBhbmQgbmV4dCBjYWNoZSBmb3IgdGhlIGdpdmVuIGtleXdvcmQgc2V0LiAqLworY29uc3QgY2hhciAqCitrd3NwcmVwIChrd3NldF90IGt3cykKK3sKKyAgcmVnaXN0ZXIgc3RydWN0IGt3c2V0ICprd3NldDsKKyAgcmVnaXN0ZXIgaW50IGk7CisgIHJlZ2lzdGVyIHN0cnVjdCB0cmllICpjdXJyOworICByZWdpc3RlciB1bnNpZ25lZCBjaGFyIGNvbnN0ICp0cmFuczsKKyAgdW5zaWduZWQgY2hhciBkZWx0YVtOQ0hBUl07CisKKyAga3dzZXQgPSAoc3RydWN0IGt3c2V0ICopIGt3czsKKworICAvKiBJbml0aWFsIHZhbHVlcyBmb3IgdGhlIGRlbHRhIHRhYmxlOyB3aWxsIGJlIGNoYW5nZWQgbGF0ZXIuICBUaGUKKyAgICAgZGVsdGEgZW50cnkgZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyIGlzIHRoZSBzbWFsbGVzdCBkZXB0aCBvZiBhbnkKKyAgICAgbm9kZSBhdCB3aGljaCBhbiBvdXRnb2luZyBlZGdlIGlzIGxhYmVsZWQgYnkgdGhhdCBjaGFyYWN0ZXIuICovCisgIG1lbXNldChkZWx0YSwga3dzZXQtPm1pbmQgPCBVQ0hBUl9NQVggPyBrd3NldC0+bWluZCA6IFVDSEFSX01BWCwgTkNIQVIpOworCisgIC8qIENoZWNrIGlmIHdlIGNhbiB1c2UgdGhlIHNpbXBsZSBib3llci1tb29yZSBhbGdvcml0aG0sIGluc3RlYWQKKyAgICAgb2YgdGhlIGhhaXJ5IGNvbW1lbnR6LXdhbHRlciBhbGdvcml0aG0uICovCisgIGlmIChrd3NldC0+d29yZHMgPT0gMSAmJiBrd3NldC0+dHJhbnMgPT0gTlVMTCkKKyAgICB7CisgICAgICBjaGFyIGM7CisKKyAgICAgIC8qIExvb2tpbmcgZm9yIGp1c3Qgb25lIHN0cmluZy4gIEV4dHJhY3QgaXQgZnJvbSB0aGUgdHJpZS4gKi8KKyAgICAgIGt3c2V0LT50YXJnZXQgPSBvYnN0YWNrX2FsbG9jKCZrd3NldC0+b2JzdGFjaywga3dzZXQtPm1pbmQpOworICAgICAgaWYgKCFrd3NldC0+dGFyZ2V0KQorCXJldHVybiAibWVtb3J5IGV4aGF1c3RlZCI7CisgICAgICBmb3IgKGkgPSBrd3NldC0+bWluZCAtIDEsIGN1cnIgPSBrd3NldC0+dHJpZTsgaSA+PSAwOyAtLWkpCisJeworCSAga3dzZXQtPnRhcmdldFtpXSA9IGN1cnItPmxpbmtzLT5sYWJlbDsKKwkgIGN1cnIgPSBjdXJyLT5saW5rcy0+dHJpZTsKKwl9CisgICAgICAvKiBCdWlsZCB0aGUgQm95ZXIgTW9vcmUgZGVsdGEuICBCb3kgdGhhdCdzIGVhc3kgY29tcGFyZWQgdG8gQ1cuICovCisgICAgICBmb3IgKGkgPSAwOyBpIDwga3dzZXQtPm1pbmQ7ICsraSkKKwlkZWx0YVtVKGt3c2V0LT50YXJnZXRbaV0pXSA9IGt3c2V0LT5taW5kIC0gKGkgKyAxKTsKKyAgICAgIC8qIEZpbmQgdGhlIG1pbmltYWwgZGVsdGEyIHNoaWZ0IHRoYXQgd2UgbWlnaHQgbWFrZSBhZnRlcgorCSBhIGJhY2t3YXJkcyBtYXRjaCBoYXMgZmFpbGVkLiAqLworICAgICAgYyA9IGt3c2V0LT50YXJnZXRba3dzZXQtPm1pbmQgLSAxXTsKKyAgICAgIGZvciAoaSA9IGt3c2V0LT5taW5kIC0gMjsgaSA+PSAwOyAtLWkpCisJaWYgKGt3c2V0LT50YXJnZXRbaV0gPT0gYykKKwkgIGJyZWFrOworICAgICAga3dzZXQtPm1pbmQyID0ga3dzZXQtPm1pbmQgLSAoaSArIDEpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJlZ2lzdGVyIHN0cnVjdCB0cmllICpmYWlsOworICAgICAgc3RydWN0IHRyaWUgKmxhc3QsICpuZXh0W05DSEFSXTsKKworICAgICAgLyogVHJhdmVyc2UgdGhlIG5vZGVzIG9mIHRoZSB0cmllIGluIGxldmVsIG9yZGVyLCBzaW11bHRhbmVvdXNseQorCSBjb21wdXRpbmcgdGhlIGRlbHRhIHRhYmxlLCBmYWlsdXJlIGZ1bmN0aW9uLCBhbmQgc2hpZnQgZnVuY3Rpb24uICovCisgICAgICBmb3IgKGN1cnIgPSBsYXN0ID0ga3dzZXQtPnRyaWU7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0KQorCXsKKwkgIC8qIEVucXVldWUgdGhlIGltbWVkaWF0ZSBkZXNjZW5kYW50cyBpbiB0aGUgbGV2ZWwgb3JkZXIgcXVldWUuICovCisJICBlbnF1ZXVlKGN1cnItPmxpbmtzLCAmbGFzdCk7CisKKwkgIGN1cnItPnNoaWZ0ID0ga3dzZXQtPm1pbmQ7CisJICBjdXJyLT5tYXhzaGlmdCA9IGt3c2V0LT5taW5kOworCisJICAvKiBVcGRhdGUgdGhlIGRlbHRhIHRhYmxlIGZvciB0aGUgZGVzY2VuZGFudHMgb2YgdGhpcyBub2RlLiAqLworCSAgdHJlZWRlbHRhKGN1cnItPmxpbmtzLCBjdXJyLT5kZXB0aCwgZGVsdGEpOworCisJICAvKiBDb21wdXRlIHRoZSBmYWlsdXJlIGZ1bmN0aW9uIGZvciB0aGUgZGVzY2VuZGFudHMgb2YgdGhpcyBub2RlLiAqLworCSAgdHJlZWZhaWxzKGN1cnItPmxpbmtzLCBjdXJyLT5mYWlsLCBrd3NldC0+dHJpZSk7CisKKwkgIC8qIFVwZGF0ZSB0aGUgc2hpZnRzIGF0IGVhY2ggbm9kZSBpbiB0aGUgY3VycmVudCBub2RlJ3MgY2hhaW4KKwkgICAgIG9mIGZhaWxzIGJhY2sgdG8gdGhlIHJvb3QuICovCisJICBmb3IgKGZhaWwgPSBjdXJyLT5mYWlsOyBmYWlsOyBmYWlsID0gZmFpbC0+ZmFpbCkKKwkgICAgeworCSAgICAgIC8qIElmIHRoZSBjdXJyZW50IG5vZGUgaGFzIHNvbWUgb3V0Z29pbmcgZWRnZSB0aGF0IHRoZSBmYWlsCisJCSBkb2Vzbid0LCB0aGVuIHRoZSBzaGlmdCBhdCB0aGUgZmFpbCBzaG91bGQgYmUgbm8gbGFyZ2VyCisJCSB0aGFuIHRoZSBkaWZmZXJlbmNlIG9mIHRoZWlyIGRlcHRocy4gKi8KKwkgICAgICBpZiAoIWhhc2V2ZXJ5KGZhaWwtPmxpbmtzLCBjdXJyLT5saW5rcykpCisJCWlmIChjdXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoIDwgZmFpbC0+c2hpZnQpCisJCSAgZmFpbC0+c2hpZnQgPSBjdXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoOworCisJICAgICAgLyogSWYgdGhlIGN1cnJlbnQgbm9kZSBpcyBhY2NlcHRpbmcgdGhlbiB0aGUgc2hpZnQgYXQgdGhlCisJCSBmYWlsIGFuZCBpdHMgZGVzY2VuZGFudHMgc2hvdWxkIGJlIG5vIGxhcmdlciB0aGFuIHRoZQorCQkgZGlmZmVyZW5jZSBvZiB0aGVpciBkZXB0aHMuICovCisJICAgICAgaWYgKGN1cnItPmFjY2VwdGluZyAmJiBmYWlsLT5tYXhzaGlmdCA+IGN1cnItPmRlcHRoIC0gZmFpbC0+ZGVwdGgpCisJCWZhaWwtPm1heHNoaWZ0ID0gY3Vyci0+ZGVwdGggLSBmYWlsLT5kZXB0aDsKKwkgICAgfQorCX0KKworICAgICAgLyogVHJhdmVyc2UgdGhlIHRyaWUgaW4gbGV2ZWwgb3JkZXIgYWdhaW4sIGZpeGluZyB1cCBhbGwgbm9kZXMgd2hvc2UKKwkgc2hpZnQgZXhjZWVkcyB0aGVpciBpbmhlcml0ZWQgbWF4c2hpZnQuICovCisgICAgICBmb3IgKGN1cnIgPSBrd3NldC0+dHJpZS0+bmV4dDsgY3VycjsgY3VyciA9IGN1cnItPm5leHQpCisJeworCSAgaWYgKGN1cnItPm1heHNoaWZ0ID4gY3Vyci0+cGFyZW50LT5tYXhzaGlmdCkKKwkgICAgY3Vyci0+bWF4c2hpZnQgPSBjdXJyLT5wYXJlbnQtPm1heHNoaWZ0OworCSAgaWYgKGN1cnItPnNoaWZ0ID4gY3Vyci0+bWF4c2hpZnQpCisJICAgIGN1cnItPnNoaWZ0ID0gY3Vyci0+bWF4c2hpZnQ7CisJfQorCisgICAgICAvKiBDcmVhdGUgYSB2ZWN0b3IsIGluZGV4ZWQgYnkgY2hhcmFjdGVyIGNvZGUsIG9mIHRoZSBvdXRnb2luZyBsaW5rcworCSBmcm9tIHRoZSByb290IG5vZGUuICovCisgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIQVI7ICsraSkKKwluZXh0W2ldID0gTlVMTDsKKyAgICAgIHRyZWVuZXh0KGt3c2V0LT50cmllLT5saW5rcywgbmV4dCk7CisKKyAgICAgIGlmICgodHJhbnMgPSBrd3NldC0+dHJhbnMpICE9IE5VTEwpCisJZm9yIChpID0gMDsgaSA8IE5DSEFSOyArK2kpCisJICBrd3NldC0+bmV4dFtpXSA9IG5leHRbVSh0cmFuc1tpXSldOworICAgICAgZWxzZQorCUNPUFlfQVJSQVkoa3dzZXQtPm5leHQsIG5leHQsIE5DSEFSKTsKKyAgICB9CisKKyAgLyogRml4IHRoaW5ncyB1cCBmb3IgYW55IHRyYW5zbGF0aW9uIHRhYmxlLiAqLworICBpZiAoKHRyYW5zID0ga3dzZXQtPnRyYW5zKSAhPSBOVUxMKQorICAgIGZvciAoaSA9IDA7IGkgPCBOQ0hBUjsgKytpKQorICAgICAga3dzZXQtPmRlbHRhW2ldID0gZGVsdGFbVSh0cmFuc1tpXSldOworICBlbHNlCisgICAgbWVtY3B5KGt3c2V0LT5kZWx0YSwgZGVsdGEsIE5DSEFSKTsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogRmFzdCBib3llci1tb29yZSBzZWFyY2guICovCitzdGF0aWMgc2l6ZV90CitibWV4ZWMgKGt3c2V0X3Qga3dzLCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgc3RydWN0IGt3c2V0IGNvbnN0ICprd3NldDsKKyAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBjb25zdCAqZDE7CisgIHJlZ2lzdGVyIGNoYXIgY29uc3QgKmVwLCAqc3AsICp0cDsKKyAgcmVnaXN0ZXIgaW50IGQsIGdjLCBpLCBsZW4sIG1kMjsKKworICBrd3NldCA9IChzdHJ1Y3Qga3dzZXQgY29uc3QgKikga3dzOworICBsZW4gPSBrd3NldC0+bWluZDsKKworICBpZiAobGVuID09IDApCisgICAgcmV0dXJuIDA7CisgIGlmIChsZW4gPiBzaXplKQorICAgIHJldHVybiAtMTsKKyAgaWYgKGxlbiA9PSAxKQorICAgIHsKKyAgICAgIHRwID0gbWVtY2hyICh0ZXh0LCBrd3NldC0+dGFyZ2V0WzBdLCBzaXplKTsKKyAgICAgIHJldHVybiB0cCA/IHRwIC0gdGV4dCA6IC0xOworICAgIH0KKworICBkMSA9IGt3c2V0LT5kZWx0YTsKKyAgc3AgPSBrd3NldC0+dGFyZ2V0ICsgbGVuOworICBnYyA9IFUoc3BbLTJdKTsKKyAgbWQyID0ga3dzZXQtPm1pbmQyOworICB0cCA9IHRleHQgKyBsZW47CisKKyAgLyogU2lnbmlmaWNhbmNlIG9mIDEyOiAxIChpbml0aWFsIG9mZnNldCkgKyAxMCAoc2tpcCBsb29wKSArIDEgKG1kMikuICovCisgIGlmIChzaXplID4gMTIgKiBsZW4pCisgICAgLyogMTEgaXMgbm90IGEgYnVnLCB0aGUgaW5pdGlhbCBvZmZzZXQgaGFwcGVucyBvbmx5IG9uY2UuICovCisgICAgZm9yIChlcCA9IHRleHQgKyBzaXplIC0gMTEgKiBsZW47OykKKyAgICAgIHsKKwl3aGlsZSAodHAgPD0gZXApCisJICB7CisJICAgIGQgPSBkMVtVKHRwWy0xXSldLCB0cCArPSBkOworCSAgICBkID0gZDFbVSh0cFstMV0pXSwgdHAgKz0gZDsKKwkgICAgaWYgKGQgPT0gMCkKKwkgICAgICBnb3RvIGZvdW5kOworCSAgICBkID0gZDFbVSh0cFstMV0pXSwgdHAgKz0gZDsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICAgIGQgPSBkMVtVKHRwWy0xXSldLCB0cCArPSBkOworCSAgICBpZiAoZCA9PSAwKQorCSAgICAgIGdvdG8gZm91bmQ7CisJICAgIGQgPSBkMVtVKHRwWy0xXSldLCB0cCArPSBkOworCSAgICBkID0gZDFbVSh0cFstMV0pXSwgdHAgKz0gZDsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICAgIGlmIChkID09IDApCisJICAgICAgZ290byBmb3VuZDsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICAgIGQgPSBkMVtVKHRwWy0xXSldLCB0cCArPSBkOworCSAgfQorCWJyZWFrOworICAgICAgZm91bmQ6CisJaWYgKFUodHBbLTJdKSA9PSBnYykKKwkgIHsKKwkgICAgZm9yIChpID0gMzsgaSA8PSBsZW4gJiYgVSh0cFstaV0pID09IFUoc3BbLWldKTsgKytpKQorCSAgICAgIDsKKwkgICAgaWYgKGkgPiBsZW4pCisJICAgICAgcmV0dXJuIHRwIC0gbGVuIC0gdGV4dDsKKwkgIH0KKwl0cCArPSBtZDI7CisgICAgICB9CisKKyAgLyogTm93IHdlIGhhdmUgb25seSBhIGZldyBjaGFyYWN0ZXJzIGxlZnQgdG8gc2VhcmNoLiAgV2UKKyAgICAgY2FyZWZ1bGx5IGF2b2lkIGV2ZXIgcHJvZHVjaW5nIGFuIG91dC1vZi1ib3VuZHMgcG9pbnRlci4gKi8KKyAgZXAgPSB0ZXh0ICsgc2l6ZTsKKyAgZCA9IGQxW1UodHBbLTFdKV07CisgIHdoaWxlIChkIDw9IGVwIC0gdHApCisgICAgeworICAgICAgZCA9IGQxW1UoKHRwICs9IGQpWy0xXSldOworICAgICAgaWYgKGQgIT0gMCkKKwljb250aW51ZTsKKyAgICAgIGlmIChVKHRwWy0yXSkgPT0gZ2MpCisJeworCSAgZm9yIChpID0gMzsgaSA8PSBsZW4gJiYgVSh0cFstaV0pID09IFUoc3BbLWldKTsgKytpKQorCSAgICA7CisJICBpZiAoaSA+IGxlbikKKwkgICAgcmV0dXJuIHRwIC0gbGVuIC0gdGV4dDsKKwl9CisgICAgICBkID0gbWQyOworICAgIH0KKworICByZXR1cm4gLTE7Cit9CisKKy8qIEhhaXJ5IG11bHRpcGxlIHN0cmluZyBzZWFyY2guICovCitzdGF0aWMgc2l6ZV90Citjd2V4ZWMgKGt3c2V0X3Qga3dzLCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3QgbGVuLCBzdHJ1Y3Qga3dzbWF0Y2ggKmt3c21hdGNoKQoreworICBzdHJ1Y3Qga3dzZXQgY29uc3QgKmt3c2V0OworICBzdHJ1Y3QgdHJpZSAqIGNvbnN0ICpuZXh0OworICBzdHJ1Y3QgdHJpZSBjb25zdCAqdHJpZTsKKyAgc3RydWN0IHRyaWUgY29uc3QgKmFjY2VwdDsKKyAgY2hhciBjb25zdCAqYmVnLCAqbGltLCAqbWNoLCAqbG1jaDsKKyAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBjOworICByZWdpc3RlciB1bnNpZ25lZCBjaGFyIGNvbnN0ICpkZWx0YTsKKyAgcmVnaXN0ZXIgaW50IGQ7CisgIHJlZ2lzdGVyIGNoYXIgY29uc3QgKmVuZCwgKnFsaW07CisgIHJlZ2lzdGVyIHN0cnVjdCB0cmVlIGNvbnN0ICp0cmVlOworICByZWdpc3RlciB1bnNpZ25lZCBjaGFyIGNvbnN0ICp0cmFuczsKKworICBhY2NlcHQgPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgcmVnaXN0ZXIgY29waWVzIGFuZCBsb29rIGZvciBlYXN5IHdheXMgb3V0LiAqLworICBrd3NldCA9IChzdHJ1Y3Qga3dzZXQgKikga3dzOworICBpZiAobGVuIDwga3dzZXQtPm1pbmQpCisgICAgcmV0dXJuIC0xOworICBuZXh0ID0ga3dzZXQtPm5leHQ7CisgIGRlbHRhID0ga3dzZXQtPmRlbHRhOworICB0cmFucyA9IGt3c2V0LT50cmFuczsKKyAgbGltID0gdGV4dCArIGxlbjsKKyAgZW5kID0gdGV4dDsKKyAgaWYgKChkID0ga3dzZXQtPm1pbmQpICE9IDApCisgICAgbWNoID0gTlVMTDsKKyAgZWxzZQorICAgIHsKKyAgICAgIG1jaCA9IHRleHQsIGFjY2VwdCA9IGt3c2V0LT50cmllOworICAgICAgZ290byBtYXRjaDsKKyAgICB9CisKKyAgaWYgKGxlbiA+PSA0ICoga3dzZXQtPm1pbmQpCisgICAgcWxpbSA9IGxpbSAtIDQgKiBrd3NldC0+bWluZDsKKyAgZWxzZQorICAgIHFsaW0gPSBOVUxMOworCisgIHdoaWxlIChsaW0gLSBlbmQgPj0gZCkKKyAgICB7CisgICAgICBpZiAocWxpbSAmJiBlbmQgPD0gcWxpbSkKKwl7CisJICBlbmQgKz0gZCAtIDE7CisJICB3aGlsZSAoKGQgPSBkZWx0YVtjID0gKmVuZF0pICYmIGVuZCA8IHFsaW0pCisJICAgIHsKKwkgICAgICBlbmQgKz0gZDsKKwkgICAgICBlbmQgKz0gZGVsdGFbVSgqZW5kKV07CisJICAgICAgZW5kICs9IGRlbHRhW1UoKmVuZCldOworCSAgICB9CisJICArK2VuZDsKKwl9CisgICAgICBlbHNlCisJZCA9IGRlbHRhW2MgPSAoZW5kICs9IGQpWy0xXV07CisgICAgICBpZiAoZCkKKwljb250aW51ZTsKKyAgICAgIGJlZyA9IGVuZCAtIDE7CisgICAgICB0cmllID0gbmV4dFtjXTsKKyAgICAgIGlmICh0cmllLT5hY2NlcHRpbmcpCisJeworCSAgbWNoID0gYmVnOworCSAgYWNjZXB0ID0gdHJpZTsKKwl9CisgICAgICBkID0gdHJpZS0+c2hpZnQ7CisgICAgICB3aGlsZSAoYmVnID4gdGV4dCkKKwl7CisJICBjID0gdHJhbnMgPyB0cmFuc1tVKCotLWJlZyldIDogKi0tYmVnOworCSAgdHJlZSA9IHRyaWUtPmxpbmtzOworCSAgd2hpbGUgKHRyZWUgJiYgYyAhPSB0cmVlLT5sYWJlbCkKKwkgICAgaWYgKGMgPCB0cmVlLT5sYWJlbCkKKwkgICAgICB0cmVlID0gdHJlZS0+bGxpbms7CisJICAgIGVsc2UKKwkgICAgICB0cmVlID0gdHJlZS0+cmxpbms7CisJICBpZiAodHJlZSkKKwkgICAgeworCSAgICAgIHRyaWUgPSB0cmVlLT50cmllOworCSAgICAgIGlmICh0cmllLT5hY2NlcHRpbmcpCisJCXsKKwkJICBtY2ggPSBiZWc7CisJCSAgYWNjZXB0ID0gdHJpZTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIGJyZWFrOworCSAgZCA9IHRyaWUtPnNoaWZ0OworCX0KKyAgICAgIGlmIChtY2gpCisJZ290byBtYXRjaDsKKyAgICB9CisgIHJldHVybiAtMTsKKworIG1hdGNoOgorICAvKiBHaXZlbiBhIGtub3duIG1hdGNoLCBmaW5kIHRoZSBsb25nZXN0IHBvc3NpYmxlIG1hdGNoIGFuY2hvcmVkCisgICAgIGF0IG9yIGJlZm9yZSBpdHMgc3RhcnRpbmcgcG9pbnQuICBUaGlzIGlzIG5lYXJseSBhIHZlcmJhdGltCisgICAgIGNvcHkgb2YgdGhlIHByZWNlZGluZyBtYWluIHNlYXJjaCBsb29wcy4gKi8KKyAgaWYgKGxpbSAtIG1jaCA+IGt3c2V0LT5tYXhkKQorICAgIGxpbSA9IG1jaCArIGt3c2V0LT5tYXhkOworICBsbWNoID0gTlVMTDsKKyAgZCA9IDE7CisgIHdoaWxlIChsaW0gLSBlbmQgPj0gZCkKKyAgICB7CisgICAgICBpZiAoKGQgPSBkZWx0YVtjID0gKGVuZCArPSBkKVstMV1dKSAhPSAwKQorCWNvbnRpbnVlOworICAgICAgYmVnID0gZW5kIC0gMTsKKyAgICAgIGlmICghKHRyaWUgPSBuZXh0W2NdKSkKKwl7CisJICBkID0gMTsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIGlmICh0cmllLT5hY2NlcHRpbmcgJiYgYmVnIDw9IG1jaCkKKwl7CisJICBsbWNoID0gYmVnOworCSAgYWNjZXB0ID0gdHJpZTsKKwl9CisgICAgICBkID0gdHJpZS0+c2hpZnQ7CisgICAgICB3aGlsZSAoYmVnID4gdGV4dCkKKwl7CisJICBjID0gdHJhbnMgPyB0cmFuc1tVKCotLWJlZyldIDogKi0tYmVnOworCSAgdHJlZSA9IHRyaWUtPmxpbmtzOworCSAgd2hpbGUgKHRyZWUgJiYgYyAhPSB0cmVlLT5sYWJlbCkKKwkgICAgaWYgKGMgPCB0cmVlLT5sYWJlbCkKKwkgICAgICB0cmVlID0gdHJlZS0+bGxpbms7CisJICAgIGVsc2UKKwkgICAgICB0cmVlID0gdHJlZS0+cmxpbms7CisJICBpZiAodHJlZSkKKwkgICAgeworCSAgICAgIHRyaWUgPSB0cmVlLT50cmllOworCSAgICAgIGlmICh0cmllLT5hY2NlcHRpbmcgJiYgYmVnIDw9IG1jaCkKKwkJeworCQkgIGxtY2ggPSBiZWc7CisJCSAgYWNjZXB0ID0gdHJpZTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIGJyZWFrOworCSAgZCA9IHRyaWUtPnNoaWZ0OworCX0KKyAgICAgIGlmIChsbWNoKQorCXsKKwkgIG1jaCA9IGxtY2g7CisJICBnb3RvIG1hdGNoOworCX0KKyAgICAgIGlmICghZCkKKwlkID0gMTsKKyAgICB9CisKKyAgaWYgKGt3c21hdGNoKQorICAgIHsKKyAgICAgIGt3c21hdGNoLT5pbmRleCA9IGFjY2VwdC0+YWNjZXB0aW5nIC8gMjsKKyAgICAgIGt3c21hdGNoLT5vZmZzZXRbMF0gPSBtY2ggLSB0ZXh0OworICAgICAga3dzbWF0Y2gtPnNpemVbMF0gPSBhY2NlcHQtPmRlcHRoOworICAgIH0KKyAgcmV0dXJuIG1jaCAtIHRleHQ7Cit9CisKKy8qIFNlYXJjaCB0aHJvdWdoIHRoZSBnaXZlbiB0ZXh0IGZvciBhIG1hdGNoIG9mIGFueSBtZW1iZXIgb2YgdGhlCisgICBnaXZlbiBrZXl3b3JkIHNldC4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBvZgorICAgdGhlIG1hdGNoaW5nIHN1YnN0cmluZywgb3IgTlVMTCBpZiBubyBtYXRjaCBpcyBmb3VuZC4gIElmIEZPVU5ETEVOCisgICBpcyBub24tTlVMTCBzdG9yZSBpbiB0aGUgcmVmZXJlbmNlZCBsb2NhdGlvbiB0aGUgbGVuZ3RoIG9mIHRoZQorICAgbWF0Y2hpbmcgc3Vic3RyaW5nLiAgU2ltaWxhcmx5LCBpZiBGT1VORElEWCBpcyBub24tTlVMTCwgc3RvcmUKKyAgIGluIHRoZSByZWZlcmVuY2VkIGxvY2F0aW9uIHRoZSBpbmRleCBudW1iZXIgb2YgdGhlIHBhcnRpY3VsYXIKKyAgIGtleXdvcmQgbWF0Y2hlZC4gKi8KK3NpemVfdAora3dzZXhlYyAoa3dzZXRfdCBrd3MsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBzaXplLAorCSBzdHJ1Y3Qga3dzbWF0Y2ggKmt3c21hdGNoKQoreworICBzdHJ1Y3Qga3dzZXQgY29uc3QgKmt3c2V0ID0gKHN0cnVjdCBrd3NldCAqKSBrd3M7CisgIGlmIChrd3NldC0+d29yZHMgPT0gMSAmJiBrd3NldC0+dHJhbnMgPT0gTlVMTCkKKyAgICB7CisgICAgICBzaXplX3QgcmV0ID0gYm1leGVjIChrd3MsIHRleHQsIHNpemUpOworICAgICAgaWYgKGt3c21hdGNoICE9IE5VTEwgJiYgcmV0ICE9IChzaXplX3QpIC0xKQorCXsKKwkgIGt3c21hdGNoLT5pbmRleCA9IDA7CisJICBrd3NtYXRjaC0+b2Zmc2V0WzBdID0gcmV0OworCSAga3dzbWF0Y2gtPnNpemVbMF0gPSBrd3NldC0+bWluZDsKKwl9CisgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBjd2V4ZWMoa3dzLCB0ZXh0LCBzaXplLCBrd3NtYXRjaCk7Cit9CisKKy8qIEZyZWUgdGhlIGNvbXBvbmVudHMgb2YgdGhlIGdpdmVuIGtleXdvcmQgc2V0LiAqLwordm9pZAora3dzZnJlZSAoa3dzZXRfdCBrd3MpCit7CisgIHN0cnVjdCBrd3NldCAqa3dzZXQ7CisKKyAga3dzZXQgPSAoc3RydWN0IGt3c2V0ICopIGt3czsKKyAgb2JzdGFja19mcmVlKCZrd3NldC0+b2JzdGFjaywgTlVMTCk7CisgIGZyZWUoa3dzKTsKK30KZGlmZiAtLWdpdCBhL2t3c2V0LmggYi9rd3NldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MGVjYWUKLS0tIC9kZXYvbnVsbAorKysgYi9rd3NldC5oCkBAIC0wLDAgKzEsNjUgQEAKKyNpZm5kZWYgS1dTRVRfSAorI2RlZmluZSBLV1NFVF9ICisKKy8qIFRoaXMgZmlsZSBoYXMgYmVlbiBjb3BpZWQgZnJvbSBjb21taXQgZTdhYzcxM2ReIGluIHRoZSBHTlUgZ3JlcCBnaXQKKyAqIHJlcG9zaXRvcnkuIEEgZmV3IHNtYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gYWRhcHQgdGhlIGNvZGUgdG8KKyAqIEdpdC4KKyAqLworCisvKiBrd3NldC5oIC0gaGVhZGVyIGRlY2xhcmluZyB0aGUga2V5d29yZCBzZXQgbGlicmFyeS4KKyAgIENvcHlyaWdodCAoQykgMTk4OSwgMTk5OCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICovCisKKy8qIFdyaXR0ZW4gQXVndXN0IDE5ODkgYnkgTWlrZSBIYWVydGVsLgorICAgVGhlIGF1dGhvciBtYXkgYmUgcmVhY2hlZCAoRW1haWwpIGF0IHRoZSBhZGRyZXNzIG1pa2VAYWkubWl0LmVkdSwKKyAgIG9yIChVUyBtYWlsKSBhcyBNaWtlIEhhZXJ0ZWwgYy9vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gKi8KKworc3RydWN0IGt3c21hdGNoCit7CisgIGludCBpbmRleDsJCQkvKiBJbmRleCBudW1iZXIgb2YgbWF0Y2hpbmcga2V5d29yZC4gKi8KKyAgc2l6ZV90IG9mZnNldFsxXTsJCS8qIE9mZnNldCBvZiBlYWNoIHN1Ym1hdGNoLiAqLworICBzaXplX3Qgc2l6ZVsxXTsJCS8qIExlbmd0aCBvZiBlYWNoIHN1Ym1hdGNoLiAqLworfTsKKworc3RydWN0IGt3c2V0X3Q7Cit0eXBlZGVmIHN0cnVjdCBrd3NldF90KiBrd3NldF90OworCisvKiBSZXR1cm4gYW4gb3BhcXVlIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQga2V5d29yZCBzZXQsIG9yIE5VTEwKKyAgIGlmIGVub3VnaCBtZW1vcnkgY2Fubm90IGJlIG9idGFpbmVkLiAgVGhlIGFyZ3VtZW50IGlmIG5vbi1OVUxMCisgICBzcGVjaWZpZXMgYSB0YWJsZSBvZiBjaGFyYWN0ZXIgdHJhbnNsYXRpb25zIHRvIGJlIGFwcGxpZWQgdG8gYWxsCisgICBwYXR0ZXJuIGFuZCBzZWFyY2ggdGV4dC4gKi8KK2t3c2V0X3Qga3dzYWxsb2ModW5zaWduZWQgY2hhciBjb25zdCAqKTsKKworLyogSW5jcmVtZW50YWxseSBleHRlbmQgdGhlIGtleXdvcmQgc2V0IHRvIGluY2x1ZGUgdGhlIGdpdmVuIHN0cmluZy4KKyAgIFJldHVybiBOVUxMIGZvciBzdWNjZXNzLCBvciBhbiBlcnJvciBtZXNzYWdlLiAgUmVtZW1iZXIgYW4gaW5kZXgKKyAgIG51bWJlciBmb3IgZWFjaCBrZXl3b3JkIGluY2x1ZGVkIGluIHRoZSBzZXQuICovCitjb25zdCBjaGFyICprd3NpbmNyKGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90KTsKKworLyogV2hlbiB0aGUga2V5d29yZCBzZXQgaGFzIGJlZW4gY29tcGxldGVseSBidWlsdCwgcHJlcGFyZSBpdCBmb3IKKyAgIHVzZS4gIFJldHVybiBOVUxMIGZvciBzdWNjZXNzLCBvciBhbiBlcnJvciBtZXNzYWdlLiAqLworY29uc3QgY2hhciAqa3dzcHJlcChrd3NldF90KTsKKworLyogU2VhcmNoIHRocm91Z2ggdGhlIGdpdmVuIGJ1ZmZlciBmb3IgYSBtZW1iZXIgb2YgdGhlIGtleXdvcmQgc2V0LgorICAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbGVmdG1vc3QgbG9uZ2VzdCBtYXRjaCBmb3VuZCwgb3IgTlVMTCBpZgorICAgbm8gbWF0Y2ggaXMgZm91bmQuICBJZiBmb3VuZGxlbiBpcyBub24tTlVMTCwgc3RvcmUgdGhlIGxlbmd0aCBvZgorICAgdGhlIG1hdGNoaW5nIHN1YnN0cmluZyBpbiB0aGUgaW50ZWdlciBpdCBwb2ludHMgdG8uICBTaW1pbGFybHksCisgICBpZiBmb3VuZGluZGV4IGlzIG5vbi1OVUxMLCBzdG9yZSB0aGUgaW5kZXggb2YgdGhlIHBhcnRpY3VsYXIKKyAgIGtleXdvcmQgZm91bmQgdGhlcmVpbi4gKi8KK3NpemVfdCBrd3NleGVjKGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzdHJ1Y3Qga3dzbWF0Y2ggKik7CisKKy8qIERlYWxsb2NhdGUgdGhlIGdpdmVuIGtleXdvcmQgc2V0IGFuZCBhbGwgaXRzIGFzc29jaWF0ZWQgc3RvcmFnZS4gKi8KK3ZvaWQga3dzZnJlZShrd3NldF90KTsKKworI2VuZGlmIC8qIEtXU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2xldmVuc2h0ZWluLmMgYi9sZXZlbnNodGVpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjMyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9sZXZlbnNodGVpbi5jCkBAIC0wLDAgKzEsODYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxldmVuc2h0ZWluLmgiCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIERhbWVyYXUtTGV2ZW5zaHRlaW4gYWxnb3JpdGhtIHRvCisgKiBjYWxjdWxhdGUgYSBkaXN0YW5jZSBiZXR3ZWVuIHN0cmluZ3MuCisgKgorICogQmFzaWNhbGx5LCBpdCBzYXlzIGhvdyBtYW55IGxldHRlcnMgbmVlZCB0byBiZSBzd2FwcGVkLCBzdWJzdGl0dXRlZCwKKyAqIGRlbGV0ZWQgZnJvbSwgb3IgYWRkZWQgdG8gc3RyaW5nMSwgYXQgbGVhc3QsIHRvIGdldCBzdHJpbmcyLgorICoKKyAqIFRoZSBpZGVhIGlzIHRvIGJ1aWxkIGEgZGlzdGFuY2UgbWF0cml4IGZvciB0aGUgc3Vic3RyaW5ncyBvZiBib3RoCisgKiBzdHJpbmdzLiAgVG8gYXZvaWQgYSBsYXJnZSBzcGFjZSBjb21wbGV4aXR5LCBvbmx5IHRoZSBsYXN0IHRocmVlIHJvd3MKKyAqIGFyZSBrZXB0IGluIG1lbW9yeSAoaWYgc3dhcHMgaGFkIHRoZSBzYW1lIG9yIGhpZ2hlciBjb3N0IGFzIG9uZSBkZWxldGlvbgorICogcGx1cyBvbmUgaW5zZXJ0aW9uLCBvbmx5IHR3byByb3dzIHdvdWxkIGJlIG5lZWRlZCkuCisgKgorICogQXQgYW55IHN0YWdlLCAiaSArIDEiIGRlbm90ZXMgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCBzdWJzdHJpbmcgb2YKKyAqIHN0cmluZzEgdGhhdCB0aGUgZGlzdGFuY2UgaXMgY2FsY3VsYXRlZCBmb3IuCisgKgorICogcm93MiBob2xkcyB0aGUgY3VycmVudCByb3csIHJvdzEgdGhlIHByZXZpb3VzIHJvdyAoaS5lLiBmb3IgdGhlIHN1YnN0cmluZworICogb2Ygc3RyaW5nMSBvZiBsZW5ndGggImkiKSwgYW5kIHJvdzAgdGhlIHJvdyBiZWZvcmUgdGhhdC4KKyAqCisgKiBJbiBvdGhlciB3b3JkcywgYXQgdGhlIHN0YXJ0IG9mIHRoZSBiaWcgbG9vcCwgcm93MltqICsgMV0gY29udGFpbnMgdGhlCisgKiBEYW1lcmF1LUxldmVuc2h0ZWluIGRpc3RhbmNlIGJldHdlZW4gdGhlIHN1YnN0cmluZyBvZiBzdHJpbmcxIG9mIGxlbmd0aAorICogImkiIGFuZCB0aGUgc3Vic3RyaW5nIG9mIHN0cmluZzIgb2YgbGVuZ3RoICJqICsgMSIuCisgKgorICogQWxsIHRoZSBiaWcgbG9vcCBkb2VzIGlzIGRldGVybWluZSB0aGUgcGFydGlhbCBtaW5pbXVtLWNvc3QgcGF0aHMuCisgKgorICogSXQgZG9lcyBzbyBieSBjYWxjdWxhdGluZyB0aGUgY29zdHMgb2YgdGhlIHBhdGggZW5kaW5nIGluIGNoYXJhY3RlcnMKKyAqIGkgKGluIHN0cmluZzEpIGFuZCBqIChpbiBzdHJpbmcyKSwgcmVzcGVjdGl2ZWx5LCBnaXZlbiB0aGF0IHRoZSBsYXN0CisgKiBvcGVyYXRpb24gaXMgYSBzdWJzdGl0dXRpb24sIGEgc3dhcCwgYSBkZWxldGlvbiwgb3IgYW4gaW5zZXJ0aW9uLgorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gYWxsb3dzIHRoZSBjb3N0cyB0byBiZSB3ZWlnaHRlZDoKKyAqCisgKiAtIHcgKGFzIGluICJzV2FwIikKKyAqIC0gcyAoYXMgaW4gIlN1YnN0aXR1dGlvbiIpCisgKiAtIGEgKGZvciBpbnNlcnRpb24sIEFLQSAiQWRkIikKKyAqIC0gZCAoYXMgaW4gIkRlbGV0aW9uIikKKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBhbGdvcml0aG0gY2FsY3VsYXRlcyBhIGRpc3RhbmNlIF9pZmZfIGQgPT0gYS4KKyAqLworaW50IGxldmVuc2h0ZWluKGNvbnN0IGNoYXIgKnN0cmluZzEsIGNvbnN0IGNoYXIgKnN0cmluZzIsCisJCWludCB3LCBpbnQgcywgaW50IGEsIGludCBkKQoreworCWludCBsZW4xID0gc3RybGVuKHN0cmluZzEpLCBsZW4yID0gc3RybGVuKHN0cmluZzIpOworCWludCAqcm93MCwgKnJvdzEsICpyb3cyOworCWludCBpLCBqOworCisJQUxMT0NfQVJSQVkocm93MCwgbGVuMiArIDEpOworCUFMTE9DX0FSUkFZKHJvdzEsIGxlbjIgKyAxKTsKKwlBTExPQ19BUlJBWShyb3cyLCBsZW4yICsgMSk7CisKKwlmb3IgKGogPSAwOyBqIDw9IGxlbjI7IGorKykKKwkJcm93MVtqXSA9IGogKiBhOworCWZvciAoaSA9IDA7IGkgPCBsZW4xOyBpKyspIHsKKwkJaW50ICpkdW1teTsKKworCQlyb3cyWzBdID0gKGkgKyAxKSAqIGQ7CisJCWZvciAoaiA9IDA7IGogPCBsZW4yOyBqKyspIHsKKwkJCS8qIHN1YnN0aXR1dGlvbiAqLworCQkJcm93MltqICsgMV0gPSByb3cxW2pdICsgcyAqIChzdHJpbmcxW2ldICE9IHN0cmluZzJbal0pOworCQkJLyogc3dhcCAqLworCQkJaWYgKGkgPiAwICYmIGogPiAwICYmIHN0cmluZzFbaSAtIDFdID09IHN0cmluZzJbal0gJiYKKwkJCQkJc3RyaW5nMVtpXSA9PSBzdHJpbmcyW2ogLSAxXSAmJgorCQkJCQlyb3cyW2ogKyAxXSA+IHJvdzBbaiAtIDFdICsgdykKKwkJCQlyb3cyW2ogKyAxXSA9IHJvdzBbaiAtIDFdICsgdzsKKwkJCS8qIGRlbGV0aW9uICovCisJCQlpZiAocm93MltqICsgMV0gPiByb3cxW2ogKyAxXSArIGQpCisJCQkJcm93MltqICsgMV0gPSByb3cxW2ogKyAxXSArIGQ7CisJCQkvKiBpbnNlcnRpb24gKi8KKwkJCWlmIChyb3cyW2ogKyAxXSA+IHJvdzJbal0gKyBhKQorCQkJCXJvdzJbaiArIDFdID0gcm93MltqXSArIGE7CisJCX0KKworCQlkdW1teSA9IHJvdzA7CisJCXJvdzAgPSByb3cxOworCQlyb3cxID0gcm93MjsKKwkJcm93MiA9IGR1bW15OworCX0KKworCWkgPSByb3cxW2xlbjJdOworCWZyZWUocm93MCk7CisJZnJlZShyb3cxKTsKKwlmcmVlKHJvdzIpOworCisJcmV0dXJuIGk7Cit9CmRpZmYgLS1naXQgYS9sZXZlbnNodGVpbi5oIGIvbGV2ZW5zaHRlaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTA1YmYzCi0tLSAvZGV2L251bGwKKysrIGIvbGV2ZW5zaHRlaW4uaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgTEVWRU5TSFRFSU5fSAorI2RlZmluZSBMRVZFTlNIVEVJTl9ICisKK2ludCBsZXZlbnNodGVpbihjb25zdCBjaGFyICpzdHJpbmcxLCBjb25zdCBjaGFyICpzdHJpbmcyLAorCWludCBzd2FwX3BlbmFsdHksIGludCBzdWJzdGl0dXRpb25fcGVuYWx0eSwKKwlpbnQgaW5zZXJ0aW9uX3BlbmFsdHksIGludCBkZWxldGlvbl9wZW5hbHR5KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saW5lLWxvZy5jIGIvbGluZS1sb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGUxNzM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGluZS1sb2cuYwpAQCAtMCwwICsxLDEyODkgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJsaW5lLXJhbmdlLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkZWNvcmF0ZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJncmFwaC5oIgorI2luY2x1ZGUgInVzZXJkaWZmLmgiCisjaW5jbHVkZSAibGluZS1sb2cuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisKK3N0YXRpYyB2b2lkIHJhbmdlX3NldF9ncm93KHN0cnVjdCByYW5nZV9zZXQgKnJzLCBzaXplX3QgZXh0cmEpCit7CisJQUxMT0NfR1JPVyhycy0+cmFuZ2VzLCBycy0+bnIgKyBleHRyYSwgcnMtPmFsbG9jKTsKK30KKworLyogRWl0aGVyIGluaXRpYWxpemF0aW9uIHdvdWxkIGJlIGZpbmUgKi8KKyNkZWZpbmUgUkFOR0VfU0VUX0lOSVQgezB9CisKK3ZvaWQgcmFuZ2Vfc2V0X2luaXQoc3RydWN0IHJhbmdlX3NldCAqcnMsIHNpemVfdCBwcmVhbGxvYykKK3sKKwlycy0+YWxsb2MgPSBycy0+bnIgPSAwOworCXJzLT5yYW5nZXMgPSBOVUxMOworCWlmIChwcmVhbGxvYykKKwkJcmFuZ2Vfc2V0X2dyb3cocnMsIHByZWFsbG9jKTsKK30KKwordm9pZCByYW5nZV9zZXRfcmVsZWFzZShzdHJ1Y3QgcmFuZ2Vfc2V0ICpycykKK3sKKwlGUkVFX0FORF9OVUxMKHJzLT5yYW5nZXMpOworCXJzLT5hbGxvYyA9IHJzLT5uciA9IDA7Cit9CisKKy8qIGRzdCBtdXN0IGJlIHVuaW5pdGlhbGl6ZWQhICovCitzdGF0aWMgdm9pZCByYW5nZV9zZXRfY29weShzdHJ1Y3QgcmFuZ2Vfc2V0ICpkc3QsIHN0cnVjdCByYW5nZV9zZXQgKnNyYykKK3sKKwlyYW5nZV9zZXRfaW5pdChkc3QsIHNyYy0+bnIpOworCUNPUFlfQVJSQVkoZHN0LT5yYW5nZXMsIHNyYy0+cmFuZ2VzLCBzcmMtPm5yKTsKKwlkc3QtPm5yID0gc3JjLT5ucjsKK30KKworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X21vdmUoc3RydWN0IHJhbmdlX3NldCAqZHN0LCBzdHJ1Y3QgcmFuZ2Vfc2V0ICpzcmMpCit7CisJcmFuZ2Vfc2V0X3JlbGVhc2UoZHN0KTsKKwlkc3QtPnJhbmdlcyA9IHNyYy0+cmFuZ2VzOworCWRzdC0+bnIgPSBzcmMtPm5yOworCWRzdC0+YWxsb2MgPSBzcmMtPmFsbG9jOworCXNyYy0+cmFuZ2VzID0gTlVMTDsKKwlzcmMtPmFsbG9jID0gc3JjLT5uciA9IDA7Cit9CisKKy8qIHRhY2sgb24gYSBfbmV3XyByYW5nZSBfYXQgdGhlIGVuZF8gKi8KK3ZvaWQgcmFuZ2Vfc2V0X2FwcGVuZF91bnNhZmUoc3RydWN0IHJhbmdlX3NldCAqcnMsIGxvbmcgYSwgbG9uZyBiKQoreworCWFzc2VydChhIDw9IGIpOworCXJhbmdlX3NldF9ncm93KHJzLCAxKTsKKwlycy0+cmFuZ2VzW3JzLT5ucl0uc3RhcnQgPSBhOworCXJzLT5yYW5nZXNbcnMtPm5yXS5lbmQgPSBiOworCXJzLT5ucisrOworfQorCit2b2lkIHJhbmdlX3NldF9hcHBlbmQoc3RydWN0IHJhbmdlX3NldCAqcnMsIGxvbmcgYSwgbG9uZyBiKQoreworCWFzc2VydChycy0+bnIgPT0gMCB8fCBycy0+cmFuZ2VzW3JzLT5uci0xXS5lbmQgPD0gYSk7CisJcmFuZ2Vfc2V0X2FwcGVuZF91bnNhZmUocnMsIGEsIGIpOworfQorCitzdGF0aWMgaW50IHJhbmdlX2NtcChjb25zdCB2b2lkICpfciwgY29uc3Qgdm9pZCAqX3MpCit7CisJY29uc3Qgc3RydWN0IHJhbmdlICpyID0gX3I7CisJY29uc3Qgc3RydWN0IHJhbmdlICpzID0gX3M7CisKKwkvKiB0aGlzIGNvdWxkIGJlIHNpbXBseSAncmV0dXJuIHIuc3RhcnQtcy5zdGFydCcsIGJ1dCBmb3IgdGhlIHR5cGVzICovCisJaWYgKHItPnN0YXJ0ID09IHMtPnN0YXJ0KQorCQlyZXR1cm4gMDsKKwlpZiAoci0+c3RhcnQgPCBzLT5zdGFydCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAxOworfQorCisvKgorICogQ2hlY2sgdGhhdCB0aGUgcmFuZ2VzIGFyZSBub24tZW1wdHksIHNvcnRlZCBhbmQgbm9uLW92ZXJsYXBwaW5nCisgKi8KK3N0YXRpYyB2b2lkIHJhbmdlX3NldF9jaGVja19pbnZhcmlhbnRzKHN0cnVjdCByYW5nZV9zZXQgKnJzKQoreworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCFycykKKwkJcmV0dXJuOworCisJaWYgKHJzLT5ucikKKwkJYXNzZXJ0KHJzLT5yYW5nZXNbMF0uc3RhcnQgPCBycy0+cmFuZ2VzWzBdLmVuZCk7CisKKwlmb3IgKGkgPSAxOyBpIDwgcnMtPm5yOyBpKyspIHsKKwkJYXNzZXJ0KHJzLT5yYW5nZXNbaS0xXS5lbmQgPCBycy0+cmFuZ2VzW2ldLnN0YXJ0KTsKKwkJYXNzZXJ0KHJzLT5yYW5nZXNbaV0uc3RhcnQgPCBycy0+cmFuZ2VzW2ldLmVuZCk7CisJfQorfQorCisvKgorICogSW4tcGxhY2UgcGFzcyBvZiBzb3J0aW5nIGFuZCBtZXJnaW5nIHRoZSByYW5nZXMgaW4gdGhlIHJhbmdlIHNldCwKKyAqIHRvIGVzdGFibGlzaCB0aGUgaW52YXJpYW50cyB3aGVuIHdlIGdldCB0aGUgcmFuZ2VzIGZyb20gdGhlIHVzZXIKKyAqLwordm9pZCBzb3J0X2FuZF9tZXJnZV9yYW5nZV9zZXQoc3RydWN0IHJhbmdlX3NldCAqcnMpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IG8gPSAwOyAvKiBvdXRwdXQgY3Vyc29yICovCisKKwlRU09SVChycy0+cmFuZ2VzLCBycy0+bnIsIHJhbmdlX2NtcCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcnMtPm5yOyBpKyspIHsKKwkJaWYgKHJzLT5yYW5nZXNbaV0uc3RhcnQgPT0gcnMtPnJhbmdlc1tpXS5lbmQpCisJCQljb250aW51ZTsKKwkJaWYgKG8gPiAwICYmIHJzLT5yYW5nZXNbaV0uc3RhcnQgPD0gcnMtPnJhbmdlc1tvLTFdLmVuZCkgeworCQkJaWYgKHJzLT5yYW5nZXNbby0xXS5lbmQgPCBycy0+cmFuZ2VzW2ldLmVuZCkKKwkJCQlycy0+cmFuZ2VzW28tMV0uZW5kID0gcnMtPnJhbmdlc1tpXS5lbmQ7CisJCX0gZWxzZSB7CisJCQlycy0+cmFuZ2VzW29dLnN0YXJ0ID0gcnMtPnJhbmdlc1tpXS5zdGFydDsKKwkJCXJzLT5yYW5nZXNbb10uZW5kID0gcnMtPnJhbmdlc1tpXS5lbmQ7CisJCQlvKys7CisJCX0KKwl9CisJYXNzZXJ0KG8gPD0gcnMtPm5yKTsKKwlycy0+bnIgPSBvOworCisJcmFuZ2Vfc2V0X2NoZWNrX2ludmFyaWFudHMocnMpOworfQorCisvKgorICogVW5pb24gb2YgcmFuZ2Ugc2V0cyAoaS5lLiwgc2V0cyBvZiBsaW5lIG51bWJlcnMpLiAgVXNlZCB0byBtZXJnZQorICogdGhlbSB3aGVuIHNlYXJjaGVzIG1lZXQgYXQgYSBjb21tb24gYW5jZXN0b3IuCisgKgorICogVGhpcyBpcyBhbHNvIHdoZXJlIHRoZSByYW5nZXMgYXJlIGNvbnNvbGlkYXRlZCBpbnRvIGNhbm9uaWNhbCBmb3JtOgorICogb3ZlcmxhcHBpbmcgYW5kIGFkamFjZW50IHJhbmdlcyBhcmUgbWVyZ2VkLCBhbmQgZW1wdHkgcmFuZ2VzIGFyZQorICogcmVtb3ZlZC4KKyAqLworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X3VuaW9uKHN0cnVjdCByYW5nZV9zZXQgKm91dCwKKwkJCSAgICAgc3RydWN0IHJhbmdlX3NldCAqYSwgc3RydWN0IHJhbmdlX3NldCAqYikKK3sKKwl1bnNpZ25lZCBpbnQgaSA9IDAsIGogPSAwOworCXN0cnVjdCByYW5nZSAqcmEgPSBhLT5yYW5nZXM7CisJc3RydWN0IHJhbmdlICpyYiA9IGItPnJhbmdlczsKKwkvKiBjYW5ub3QgbWFrZSBhbiBhbGlhcyBvZiBvdXQtPnJhbmdlczogaXQgbWF5IGNoYW5nZSBkdXJpbmcgZ3JvdyAqLworCisJYXNzZXJ0KG91dC0+bnIgPT0gMCk7CisJd2hpbGUgKGkgPCBhLT5uciB8fCBqIDwgYi0+bnIpIHsKKwkJc3RydWN0IHJhbmdlICpuZXdfcmFuZ2U7CisJCWlmIChpIDwgYS0+bnIgJiYgaiA8IGItPm5yKSB7CisJCQlpZiAocmFbaV0uc3RhcnQgPCByYltqXS5zdGFydCkKKwkJCQluZXdfcmFuZ2UgPSAmcmFbaSsrXTsKKwkJCWVsc2UgaWYgKHJhW2ldLnN0YXJ0ID4gcmJbal0uc3RhcnQpCisJCQkJbmV3X3JhbmdlID0gJnJiW2orK107CisJCQllbHNlIGlmIChyYVtpXS5lbmQgPCByYltqXS5lbmQpCisJCQkJbmV3X3JhbmdlID0gJnJhW2krK107CisJCQllbHNlCisJCQkJbmV3X3JhbmdlID0gJnJiW2orK107CisJCX0gZWxzZSBpZiAoaSA8IGEtPm5yKSAgICAgIC8qIGIgZXhoYXVzdGVkICovCisJCQluZXdfcmFuZ2UgPSAmcmFbaSsrXTsKKwkJZWxzZSAgICAgICAgICAgICAgICAgICAgICAgLyogYSBleGhhdXN0ZWQgKi8KKwkJCW5ld19yYW5nZSA9ICZyYltqKytdOworCQlpZiAobmV3X3JhbmdlLT5zdGFydCA9PSBuZXdfcmFuZ2UtPmVuZCkKKwkJCTsgLyogZW1wdHkgcmFuZ2UgKi8KKwkJZWxzZSBpZiAoIW91dC0+bnIgfHwgb3V0LT5yYW5nZXNbb3V0LT5uci0xXS5lbmQgPCBuZXdfcmFuZ2UtPnN0YXJ0KSB7CisJCQlyYW5nZV9zZXRfZ3JvdyhvdXQsIDEpOworCQkJb3V0LT5yYW5nZXNbb3V0LT5ucl0uc3RhcnQgPSBuZXdfcmFuZ2UtPnN0YXJ0OworCQkJb3V0LT5yYW5nZXNbb3V0LT5ucl0uZW5kID0gbmV3X3JhbmdlLT5lbmQ7CisJCQlvdXQtPm5yKys7CisJCX0gZWxzZSBpZiAob3V0LT5yYW5nZXNbb3V0LT5uci0xXS5lbmQgPCBuZXdfcmFuZ2UtPmVuZCkgeworCQkJb3V0LT5yYW5nZXNbb3V0LT5uci0xXS5lbmQgPSBuZXdfcmFuZ2UtPmVuZDsKKwkJfQorCX0KK30KKworLyoKKyAqIERpZmZlcmVuY2Ugb2YgcmFuZ2Ugc2V0cyAob3V0ID0gYSBcIGIpLiAgUGFzcyB0aGUgImludGVyZXN0aW5nIgorICogcmFuZ2VzIGFzICdhJyBhbmQgdGhlIHRhcmdldCBzaWRlIG9mIHRoZSBkaWZmIGFzICdiJzogaXQgcmVtb3ZlcworICogdGhlIHJhbmdlcyBmb3Igd2hpY2ggdGhlIGNvbW1pdCBpcyByZXNwb25zaWJsZS4KKyAqLworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X2RpZmZlcmVuY2Uoc3RydWN0IHJhbmdlX3NldCAqb3V0LAorCQkJCSAgc3RydWN0IHJhbmdlX3NldCAqYSwgc3RydWN0IHJhbmdlX3NldCAqYikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgaiA9ICAwOworCWZvciAoaSA9IDA7IGkgPCBhLT5ucjsgaSsrKSB7CisJCWxvbmcgc3RhcnQgPSBhLT5yYW5nZXNbaV0uc3RhcnQ7CisJCWxvbmcgZW5kID0gYS0+cmFuZ2VzW2ldLmVuZDsKKwkJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisJCQl3aGlsZSAoaiA8IGItPm5yICYmIHN0YXJ0ID49IGItPnJhbmdlc1tqXS5lbmQpCisJCQkJLyoKKwkJCQkgKiBhOiAgICAgICAgIHwtLS0tLS0tCisJCQkJICogYjogLS0tLS0tfAorCQkJCSAqLworCQkJCWorKzsKKwkJCWlmIChqID49IGItPm5yIHx8IGVuZCA8IGItPnJhbmdlc1tqXS5zdGFydCkgeworCQkJCS8qCisJCQkJICogYiBleGhhdXN0ZWQsIG9yCisJCQkJICogYTogIC0tLS18CisJCQkJICogYjogICAgICAgICB8LS0tLQorCQkJCSAqLworCQkJCXJhbmdlX3NldF9hcHBlbmQob3V0LCBzdGFydCwgZW5kKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzdGFydCA+PSBiLT5yYW5nZXNbal0uc3RhcnQpIHsKKwkJCQkvKgorCQkJCSAqIGE6ICAgICB8LS0/Pz8/CisJCQkJICogYjogfC0tLS0tLXwKKwkJCQkgKi8KKwkJCQlzdGFydCA9IGItPnJhbmdlc1tqXS5lbmQ7CisJCQl9IGVsc2UgaWYgKGVuZCA+IGItPnJhbmdlc1tqXS5zdGFydCkgeworCQkJCS8qCisJCQkJICogYTogfC0tLS0tfAorCQkJCSAqIGI6ICAgIHwtLT8/Pz8/CisJCQkJICovCisJCQkJaWYgKHN0YXJ0IDwgYi0+cmFuZ2VzW2pdLnN0YXJ0KQorCQkJCQlyYW5nZV9zZXRfYXBwZW5kKG91dCwgc3RhcnQsIGItPnJhbmdlc1tqXS5zdGFydCk7CisJCQkJc3RhcnQgPSBiLT5yYW5nZXNbal0uZW5kOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBkaWZmX3Jhbmdlc19pbml0KHN0cnVjdCBkaWZmX3JhbmdlcyAqZGlmZikKK3sKKwlyYW5nZV9zZXRfaW5pdCgmZGlmZi0+cGFyZW50LCAwKTsKKwlyYW5nZV9zZXRfaW5pdCgmZGlmZi0+dGFyZ2V0LCAwKTsKK30KKworc3RhdGljIHZvaWQgZGlmZl9yYW5nZXNfcmVsZWFzZShzdHJ1Y3QgZGlmZl9yYW5nZXMgKmRpZmYpCit7CisJcmFuZ2Vfc2V0X3JlbGVhc2UoJmRpZmYtPnBhcmVudCk7CisJcmFuZ2Vfc2V0X3JlbGVhc2UoJmRpZmYtPnRhcmdldCk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmVfbG9nX2RhdGFfaW5pdChzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcikKK3sKKwltZW1zZXQociwgMCwgc2l6ZW9mKHN0cnVjdCBsaW5lX2xvZ19kYXRhKSk7CisJcmFuZ2Vfc2V0X2luaXQoJnItPnJhbmdlcywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmVfbG9nX2RhdGFfY2xlYXIoc3RydWN0IGxpbmVfbG9nX2RhdGEgKnIpCit7CisJcmFuZ2Vfc2V0X3JlbGVhc2UoJnItPnJhbmdlcyk7CisJaWYgKHItPnBhaXIpCisJCWRpZmZfZnJlZV9maWxlcGFpcihyLT5wYWlyKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9saW5lX2xvZ19kYXRhKHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyKQoreworCXdoaWxlIChyKSB7CisJCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpuZXh0ID0gci0+bmV4dDsKKwkJbGluZV9sb2dfZGF0YV9jbGVhcihyKTsKKwkJZnJlZShyKTsKKwkJciA9IG5leHQ7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGxpbmVfbG9nX2RhdGEgKgorc2VhcmNoX2xpbmVfbG9nX2RhdGEoc3RydWN0IGxpbmVfbG9nX2RhdGEgKmxpc3QsIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgICAgc3RydWN0IGxpbmVfbG9nX2RhdGEgKippbnNlcnRpb25fcG9pbnQpCit7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnAgPSBsaXN0OworCWlmIChpbnNlcnRpb25fcG9pbnQpCisJCSppbnNlcnRpb25fcG9pbnQgPSBOVUxMOworCXdoaWxlIChwKSB7CisJCWludCBjbXAgPSBzdHJjbXAocC0+cGF0aCwgcGF0aCk7CisJCWlmICghY21wKQorCQkJcmV0dXJuIHA7CisJCWlmIChpbnNlcnRpb25fcG9pbnQgJiYgY21wIDwgMCkKKwkJCSppbnNlcnRpb25fcG9pbnQgPSBwOworCQlwID0gcC0+bmV4dDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBOb3RlOiB0YWtlcyBvd25lcnNoaXAgb2YgJ3BhdGgnLCB3aGljaCBoYXBwZW5zIHRvIGJlIHdoYXQgdGhlIG9ubHkKKyAqIGNhbGxlciBuZWVkcy4KKyAqLworc3RhdGljIHZvaWQgbGluZV9sb2dfZGF0YV9pbnNlcnQoc3RydWN0IGxpbmVfbG9nX2RhdGEgKipsaXN0LAorCQkJCSBjaGFyICpwYXRoLAorCQkJCSBsb25nIGJlZ2luLCBsb25nIGVuZCkKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqaXA7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnAgPSBzZWFyY2hfbGluZV9sb2dfZGF0YSgqbGlzdCwgcGF0aCwgJmlwKTsKKworCWlmIChwKSB7CisJCXJhbmdlX3NldF9hcHBlbmRfdW5zYWZlKCZwLT5yYW5nZXMsIGJlZ2luLCBlbmQpOworCQlmcmVlKHBhdGgpOworCQlyZXR1cm47CisJfQorCisJcCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsaW5lX2xvZ19kYXRhKSk7CisJcC0+cGF0aCA9IHBhdGg7CisJcmFuZ2Vfc2V0X2FwcGVuZCgmcC0+cmFuZ2VzLCBiZWdpbiwgZW5kKTsKKwlpZiAoaXApIHsKKwkJcC0+bmV4dCA9IGlwLT5uZXh0OworCQlpcC0+bmV4dCA9IHA7CisJfSBlbHNlIHsKKwkJcC0+bmV4dCA9ICpsaXN0OworCQkqbGlzdCA9IHA7CisJfQorfQorCitzdHJ1Y3QgY29sbGVjdF9kaWZmX2NiZGF0YSB7CisJc3RydWN0IGRpZmZfcmFuZ2VzICpkaWZmOworfTsKKworc3RhdGljIGludCBjb2xsZWN0X2RpZmZfY2IobG9uZyBzdGFydF9hLCBsb25nIGNvdW50X2EsCisJCQkgICBsb25nIHN0YXJ0X2IsIGxvbmcgY291bnRfYiwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNvbGxlY3RfZGlmZl9jYmRhdGEgKmQgPSBkYXRhOworCisJaWYgKGNvdW50X2EgPj0gMCkKKwkJcmFuZ2Vfc2V0X2FwcGVuZCgmZC0+ZGlmZi0+cGFyZW50LCBzdGFydF9hLCBzdGFydF9hICsgY291bnRfYSk7CisJaWYgKGNvdW50X2IgPj0gMCkKKwkJcmFuZ2Vfc2V0X2FwcGVuZCgmZC0+ZGlmZi0+dGFyZ2V0LCBzdGFydF9iLCBzdGFydF9iICsgY291bnRfYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb2xsZWN0X2RpZmYobW1maWxlX3QgKnBhcmVudCwgbW1maWxlX3QgKnRhcmdldCwgc3RydWN0IGRpZmZfcmFuZ2VzICpvdXQpCit7CisJc3RydWN0IGNvbGxlY3RfZGlmZl9jYmRhdGEgY2JkYXRhID0ge05VTEx9OworCXhwcGFyYW1fdCB4cHA7CisJeGRlbWl0Y29uZl90IHhlY2ZnOworCXhkZW1pdGNiX3QgZWNiOworCisJbWVtc2V0KCZ4cHAsIDAsIHNpemVvZih4cHApKTsKKwltZW1zZXQoJnhlY2ZnLCAwLCBzaXplb2YoeGVjZmcpKTsKKwl4ZWNmZy5jdHhsZW4gPSB4ZWNmZy5pbnRlcmh1bmtjdHhsZW4gPSAwOworCisJY2JkYXRhLmRpZmYgPSBvdXQ7CisJeGVjZmcuaHVua19mdW5jID0gY29sbGVjdF9kaWZmX2NiOworCW1lbXNldCgmZWNiLCAwLCBzaXplb2YoZWNiKSk7CisJZWNiLnByaXYgPSAmY2JkYXRhOworCXJldHVybiB4ZGlfZGlmZihwYXJlbnQsIHRhcmdldCwgJnhwcCwgJnhlY2ZnLCAmZWNiKTsKK30KKworLyoKKyAqIFRoZXNlIGFyZSBoYW5keSBmb3IgZGVidWdnaW5nLiAgUmVtb3ZpbmcgdGhlbSB3aXRoICNpZiAwIHNpbGVuY2VzCisgKiB0aGUgInVudXNlZCBmdW5jdGlvbiIgd2FybmluZy4KKyAqLworI2lmIDAKK3N0YXRpYyB2b2lkIGR1bXBfcmFuZ2Vfc2V0KHN0cnVjdCByYW5nZV9zZXQgKnJzLCBjb25zdCBjaGFyICpkZXNjKQoreworCWludCBpOworCXByaW50ZigicmFuZ2Ugc2V0ICVzICglZCBpdGVtcyk6XG4iLCBkZXNjLCBycy0+bnIpOworCWZvciAoaSA9IDA7IGkgPCBycy0+bnI7IGkrKykKKwkJcHJpbnRmKCJcdFslbGQsJWxkXVxuIiwgcnMtPnJhbmdlc1tpXS5zdGFydCwgcnMtPnJhbmdlc1tpXS5lbmQpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2xpbmVfbG9nX2RhdGEoc3RydWN0IGxpbmVfbG9nX2RhdGEgKnIpCit7CisJY2hhciBidWZbNDA5Nl07CisJd2hpbGUgKHIpIHsKKwkJc25wcmludGYoYnVmLCA0MDk2LCAiZmlsZSAlc1xuIiwgci0+cGF0aCk7CisJCWR1bXBfcmFuZ2Vfc2V0KCZyLT5yYW5nZXMsIGJ1Zik7CisJCXIgPSByLT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgZHVtcF9kaWZmX3JhbmdlcyhzdHJ1Y3QgZGlmZl9yYW5nZXMgKmRpZmYsIGNvbnN0IGNoYXIgKmRlc2MpCit7CisJaW50IGk7CisJYXNzZXJ0KGRpZmYtPnBhcmVudC5uciA9PSBkaWZmLT50YXJnZXQubnIpOworCXByaW50ZigiZGlmZiByYW5nZXMgJXMgKCVkIGl0ZW1zKTpcbiIsIGRlc2MsIGRpZmYtPnBhcmVudC5ucik7CisJcHJpbnRmKCJcdHBhcmVudFx0dGFyZ2V0XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZi0+cGFyZW50Lm5yOyBpKyspIHsKKwkJcHJpbnRmKCJcdFslbGQsJWxkXVx0WyVsZCwlbGRdXG4iLAorCQkgICAgICAgZGlmZi0+cGFyZW50LnJhbmdlc1tpXS5zdGFydCwKKwkJICAgICAgIGRpZmYtPnBhcmVudC5yYW5nZXNbaV0uZW5kLAorCQkgICAgICAgZGlmZi0+dGFyZ2V0LnJhbmdlc1tpXS5zdGFydCwKKwkJICAgICAgIGRpZmYtPnRhcmdldC5yYW5nZXNbaV0uZW5kKTsKKwl9Cit9CisjZW5kaWYKKworCitzdGF0aWMgaW50IHJhbmdlc19vdmVybGFwKHN0cnVjdCByYW5nZSAqYSwgc3RydWN0IHJhbmdlICpiKQoreworCXJldHVybiAhKGEtPmVuZCA8PSBiLT5zdGFydCB8fCBiLT5lbmQgPD0gYS0+c3RhcnQpOworfQorCisvKgorICogR2l2ZW4gYSBkaWZmIGFuZCB0aGUgc2V0IG9mIGludGVyZXN0aW5nIHJhbmdlcywgZGV0ZXJtaW5lIGFsbCBodW5rcworICogb2YgdGhlIGRpZmYgd2hpY2ggdG91Y2ggKG92ZXJsYXApIGF0IGxlYXN0IG9uZSBvZiB0aGUgaW50ZXJlc3RpbmcKKyAqIHJhbmdlcyBpbiB0aGUgdGFyZ2V0LgorICovCitzdGF0aWMgdm9pZCBkaWZmX3Jhbmdlc19maWx0ZXJfdG91Y2hlZChzdHJ1Y3QgZGlmZl9yYW5nZXMgKm91dCwKKwkJCQkgICAgICAgc3RydWN0IGRpZmZfcmFuZ2VzICpkaWZmLAorCQkJCSAgICAgICBzdHJ1Y3QgcmFuZ2Vfc2V0ICpycykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgaiA9IDA7CisKKwlhc3NlcnQob3V0LT50YXJnZXQubnIgPT0gMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZi0+dGFyZ2V0Lm5yOyBpKyspIHsKKwkJd2hpbGUgKGRpZmYtPnRhcmdldC5yYW5nZXNbaV0uc3RhcnQgPiBycy0+cmFuZ2VzW2pdLmVuZCkgeworCQkJaisrOworCQkJaWYgKGogPT0gcnMtPm5yKQorCQkJCXJldHVybjsKKwkJfQorCQlpZiAocmFuZ2VzX292ZXJsYXAoJmRpZmYtPnRhcmdldC5yYW5nZXNbaV0sICZycy0+cmFuZ2VzW2pdKSkgeworCQkJcmFuZ2Vfc2V0X2FwcGVuZCgmb3V0LT5wYXJlbnQsCisJCQkJCSBkaWZmLT5wYXJlbnQucmFuZ2VzW2ldLnN0YXJ0LAorCQkJCQkgZGlmZi0+cGFyZW50LnJhbmdlc1tpXS5lbmQpOworCQkJcmFuZ2Vfc2V0X2FwcGVuZCgmb3V0LT50YXJnZXQsCisJCQkJCSBkaWZmLT50YXJnZXQucmFuZ2VzW2ldLnN0YXJ0LAorCQkJCQkgZGlmZi0+dGFyZ2V0LnJhbmdlc1tpXS5lbmQpOworCQl9CisJfQorfQorCisvKgorICogQWRqdXN0IHRoZSBsaW5lIGNvdW50cyBpbiAncnMnIHRvIGFjY291bnQgZm9yIHRoZSBsaW5lcworICogYWRkZWQvcmVtb3ZlZCBpbiB0aGUgZGlmZi4KKyAqLworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X3NoaWZ0X2RpZmYoc3RydWN0IHJhbmdlX3NldCAqb3V0LAorCQkJCSBzdHJ1Y3QgcmFuZ2Vfc2V0ICpycywKKwkJCQkgc3RydWN0IGRpZmZfcmFuZ2VzICpkaWZmKQoreworCXVuc2lnbmVkIGludCBpLCBqID0gMDsKKwlsb25nIG9mZnNldCA9IDA7CisJc3RydWN0IHJhbmdlICpzcmMgPSBycy0+cmFuZ2VzOworCXN0cnVjdCByYW5nZSAqdGFyZ2V0ID0gZGlmZi0+dGFyZ2V0LnJhbmdlczsKKwlzdHJ1Y3QgcmFuZ2UgKnBhcmVudCA9IGRpZmYtPnBhcmVudC5yYW5nZXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgcnMtPm5yOyBpKyspIHsKKwkJd2hpbGUgKGogPCBkaWZmLT50YXJnZXQubnIgJiYgc3JjW2ldLnN0YXJ0ID49IHRhcmdldFtqXS5zdGFydCkgeworCQkJb2Zmc2V0ICs9IChwYXJlbnRbal0uZW5kLXBhcmVudFtqXS5zdGFydCkKKwkJCQktICh0YXJnZXRbal0uZW5kLXRhcmdldFtqXS5zdGFydCk7CisJCQlqKys7CisJCX0KKwkJcmFuZ2Vfc2V0X2FwcGVuZChvdXQsIHNyY1tpXS5zdGFydCtvZmZzZXQsIHNyY1tpXS5lbmQrb2Zmc2V0KTsKKwl9Cit9CisKKy8qCisgKiBHaXZlbiBhIGRpZmYgYW5kIHRoZSBzZXQgb2YgaW50ZXJlc3RpbmcgcmFuZ2VzLCBtYXAgdGhlIHJhbmdlcworICogYWNyb3NzIHRoZSBkaWZmLiAgVGhhdCBpczogb2JzZXJ2ZSB0aGF0IHRoZSB0YXJnZXQgY29tbWl0IHRha2VzCisgKiBibGFtZSBmb3IgYWxsIHRoZSArICh0YXJnZXQtc2lkZSkgcmFuZ2VzLiAgU28gZm9yIGV2ZXJ5IHBhaXIgb2YKKyAqIHJhbmdlcyBpbiB0aGUgZGlmZiB0aGF0IHdhcyB0b3VjaGVkLCB3ZSByZW1vdmUgdGhlIGxhdHRlciBhbmQgYWRkCisgKiBpdHMgcGFyZW50IHNpZGUuCisgKi8KK3N0YXRpYyB2b2lkIHJhbmdlX3NldF9tYXBfYWNyb3NzX2RpZmYoc3RydWN0IHJhbmdlX3NldCAqb3V0LAorCQkJCSAgICAgIHN0cnVjdCByYW5nZV9zZXQgKnJzLAorCQkJCSAgICAgIHN0cnVjdCBkaWZmX3JhbmdlcyAqZGlmZiwKKwkJCQkgICAgICBzdHJ1Y3QgZGlmZl9yYW5nZXMgKip0b3VjaGVkX291dCkKK3sKKwlzdHJ1Y3QgZGlmZl9yYW5nZXMgKnRvdWNoZWQgPSB4bWFsbG9jKHNpemVvZigqdG91Y2hlZCkpOworCXN0cnVjdCByYW5nZV9zZXQgdG1wMSA9IFJBTkdFX1NFVF9JTklUOworCXN0cnVjdCByYW5nZV9zZXQgdG1wMiA9IFJBTkdFX1NFVF9JTklUOworCisJZGlmZl9yYW5nZXNfaW5pdCh0b3VjaGVkKTsKKwlkaWZmX3Jhbmdlc19maWx0ZXJfdG91Y2hlZCh0b3VjaGVkLCBkaWZmLCBycyk7CisJcmFuZ2Vfc2V0X2RpZmZlcmVuY2UoJnRtcDEsIHJzLCAmdG91Y2hlZC0+dGFyZ2V0KTsKKwlyYW5nZV9zZXRfc2hpZnRfZGlmZigmdG1wMiwgJnRtcDEsIGRpZmYpOworCXJhbmdlX3NldF91bmlvbihvdXQsICZ0bXAyLCAmdG91Y2hlZC0+cGFyZW50KTsKKwlyYW5nZV9zZXRfcmVsZWFzZSgmdG1wMSk7CisJcmFuZ2Vfc2V0X3JlbGVhc2UoJnRtcDIpOworCisJKnRvdWNoZWRfb3V0ID0gdG91Y2hlZDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmNoZWNrX3NpbmdsZV9jb21taXQoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBvYmplY3QgKmNvbW1pdCA9IE5VTEw7CisJaW50IGZvdW5kID0gLTE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmV2cy0+cGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5pdGVtOworCQlpZiAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQljb250aW51ZTsKKwkJb2JqID0gZGVyZWZfdGFnKHJldnMtPnJlcG8sIG9iaiwgTlVMTCwgMCk7CisJCWlmIChvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJCWRpZSgiTm9uIGNvbW1pdCAlcz8iLCByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZSk7CisJCWlmIChjb21taXQpCisJCQlkaWUoIk1vcmUgdGhhbiBvbmUgY29tbWl0IHRvIGRpZyBmcm9tOiAlcyBhbmQgJXM/IiwKKwkJCSAgICByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZSwKKwkJCSAgICByZXZzLT5wZW5kaW5nLm9iamVjdHNbZm91bmRdLm5hbWUpOworCQljb21taXQgPSBvYmo7CisJCWZvdW5kID0gaTsKKwl9CisKKwlpZiAoIWNvbW1pdCkKKwkJZGllKCJObyBjb21taXQgc3BlY2lmaWVkPyIpOworCisJcmV0dXJuIChzdHJ1Y3QgY29tbWl0ICopIGNvbW1pdDsKK30KKworc3RhdGljIHZvaWQgZmlsbF9ibG9iX3NoYTEoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjKQoreworCXVuc2lnbmVkIHNob3J0IG1vZGU7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlpZiAoZ2V0X3RyZWVfZW50cnkociwgJmNvbW1pdC0+b2JqZWN0Lm9pZCwgc3BlYy0+cGF0aCwgJm9pZCwgJm1vZGUpKQorCQlkaWUoIlRoZXJlIGlzIG5vIHBhdGggJXMgaW4gdGhlIGNvbW1pdCIsIHNwZWMtPnBhdGgpOworCWZpbGxfZmlsZXNwZWMoc3BlYywgJm9pZCwgMSwgbW9kZSk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfbGluZV9lbmRzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNwZWMsCisJCQkgICBsb25nICpsaW5lcywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKipsaW5lX2VuZHMpCit7CisJaW50IG51bSA9IDAsIHNpemUgPSA1MDsKKwlsb25nIGN1ciA9IDA7CisJdW5zaWduZWQgbG9uZyAqZW5kcyA9IE5VTEw7CisJY2hhciAqZGF0YSA9IE5VTEw7CisKKwlpZiAoZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCBzcGVjLCBOVUxMKSkKKwkJZGllKCJDYW5ub3QgcmVhZCBibG9iICVzIiwgb2lkX3RvX2hleCgmc3BlYy0+b2lkKSk7CisKKwlBTExPQ19BUlJBWShlbmRzLCBzaXplKTsKKwllbmRzW2N1cisrXSA9IDA7CisJZGF0YSA9IHNwZWMtPmRhdGE7CisJd2hpbGUgKG51bSA8IHNwZWMtPnNpemUpIHsKKwkJaWYgKGRhdGFbbnVtXSA9PSAnXG4nIHx8IG51bSA9PSBzcGVjLT5zaXplIC0gMSkgeworCQkJQUxMT0NfR1JPVyhlbmRzLCAoY3VyICsgMSksIHNpemUpOworCQkJZW5kc1tjdXIrK10gPSBudW07CisJCX0KKwkJbnVtKys7CisJfQorCisJLyogc2hyaW5rIHRoZSBhcnJheSB0byBmaXQgdGhlIGVsZW1lbnRzICovCisJUkVBTExPQ19BUlJBWShlbmRzLCBjdXIpOworCSpsaW5lcyA9IGN1ci0xOworCSpsaW5lX2VuZHMgPSBlbmRzOworfQorCitzdHJ1Y3QgbnRoX2xpbmVfY2IgeworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjOworCWxvbmcgbGluZXM7CisJdW5zaWduZWQgbG9uZyAqbGluZV9lbmRzOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm50aF9saW5lKHZvaWQgKmRhdGEsIGxvbmcgbGluZSkKK3sKKwlzdHJ1Y3QgbnRoX2xpbmVfY2IgKmQgPSBkYXRhOworCWFzc2VydChkICYmIGxpbmUgPD0gZC0+bGluZXMpOworCWFzc2VydChkLT5zcGVjICYmIGQtPnNwZWMtPmRhdGEpOworCisJaWYgKGxpbmUgPT0gMCkKKwkJcmV0dXJuIChjaGFyICopZC0+c3BlYy0+ZGF0YTsKKwllbHNlCisJCXJldHVybiAoY2hhciAqKWQtPnNwZWMtPmRhdGEgKyBkLT5saW5lX2VuZHNbbGluZV0gKyAxOworfQorCitzdGF0aWMgc3RydWN0IGxpbmVfbG9nX2RhdGEgKgorcGFyc2VfbGluZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkgICAgY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmFyZ3MpCit7CisJbG9uZyBsaW5lcyA9IDA7CisJdW5zaWduZWQgbG9uZyAqZW5kcyA9IE5VTEw7CisJc3RydWN0IG50aF9saW5lX2NiIGNiX2RhdGE7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlcyA9IE5VTEw7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnA7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIGFyZ3MpIHsKKwkJY29uc3QgY2hhciAqbmFtZV9wYXJ0LCAqcmFuZ2VfcGFydDsKKwkJY2hhciAqZnVsbF9uYW1lOworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3BlYzsKKwkJbG9uZyBiZWdpbiA9IDAsIGVuZCA9IDA7CisJCWxvbmcgYW5jaG9yOworCisJCW5hbWVfcGFydCA9IHNraXBfcmFuZ2VfYXJnKGl0ZW0tPnN0cmluZywgci0+aW5kZXgpOworCQlpZiAoIW5hbWVfcGFydCB8fCAqbmFtZV9wYXJ0ICE9ICc6JyB8fCAhbmFtZV9wYXJ0WzFdKQorCQkJZGllKCItTCBhcmd1bWVudCBub3QgJ3N0YXJ0LGVuZDpmaWxlJyBvciAnOmZ1bmNuYW1lOmZpbGUnOiAlcyIsCisJCQkgICAgaXRlbS0+c3RyaW5nKTsKKwkJcmFuZ2VfcGFydCA9IHhzdHJuZHVwKGl0ZW0tPnN0cmluZywgbmFtZV9wYXJ0IC0gaXRlbS0+c3RyaW5nKTsKKwkJbmFtZV9wYXJ0Kys7CisKKwkJZnVsbF9uYW1lID0gcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDAsCisJCQkJCW5hbWVfcGFydCk7CisKKwkJc3BlYyA9IGFsbG9jX2ZpbGVzcGVjKGZ1bGxfbmFtZSk7CisJCWZpbGxfYmxvYl9zaGExKHIsIGNvbW1pdCwgc3BlYyk7CisJCWZpbGxfbGluZV9lbmRzKHIsIHNwZWMsICZsaW5lcywgJmVuZHMpOworCQljYl9kYXRhLnNwZWMgPSBzcGVjOworCQljYl9kYXRhLmxpbmVzID0gbGluZXM7CisJCWNiX2RhdGEubGluZV9lbmRzID0gZW5kczsKKworCQlwID0gc2VhcmNoX2xpbmVfbG9nX2RhdGEocmFuZ2VzLCBmdWxsX25hbWUsIE5VTEwpOworCQlpZiAocCAmJiBwLT5yYW5nZXMubnIpCisJCQlhbmNob3IgPSBwLT5yYW5nZXMucmFuZ2VzW3AtPnJhbmdlcy5uciAtIDFdLmVuZCArIDE7CisJCWVsc2UKKwkJCWFuY2hvciA9IDE7CisKKwkJaWYgKHBhcnNlX3JhbmdlX2FyZyhyYW5nZV9wYXJ0LCBudGhfbGluZSwgJmNiX2RhdGEsCisJCQkJICAgIGxpbmVzLCBhbmNob3IsICZiZWdpbiwgJmVuZCwKKwkJCQkgICAgZnVsbF9uYW1lLCByLT5pbmRleCkpCisJCQlkaWUoIm1hbGZvcm1lZCAtTCBhcmd1bWVudCAnJXMnIiwgcmFuZ2VfcGFydCk7CisJCWlmICgoIWxpbmVzICYmIChiZWdpbiB8fCBlbmQpKSB8fCBsaW5lcyA8IGJlZ2luKQorCQkJZGllKCJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIsIG5hbWVfcGFydCwgbGluZXMpOworCQlpZiAoYmVnaW4gPCAxKQorCQkJYmVnaW4gPSAxOworCQlpZiAoZW5kIDwgMSB8fCBsaW5lcyA8IGVuZCkKKwkJCWVuZCA9IGxpbmVzOworCQliZWdpbi0tOworCQlsaW5lX2xvZ19kYXRhX2luc2VydCgmcmFuZ2VzLCBmdWxsX25hbWUsIGJlZ2luLCBlbmQpOworCisJCWZyZWVfZmlsZXNwZWMoc3BlYyk7CisJCUZSRUVfQU5EX05VTEwoZW5kcyk7CisJfQorCisJZm9yIChwID0gcmFuZ2VzOyBwOyBwID0gcC0+bmV4dCkKKwkJc29ydF9hbmRfbWVyZ2VfcmFuZ2Vfc2V0KCZwLT5yYW5nZXMpOworCisJcmV0dXJuIHJhbmdlczsKK30KKworc3RhdGljIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpsaW5lX2xvZ19kYXRhX2NvcHlfb25lKHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyKQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyZXQgPSB4bWFsbG9jKHNpemVvZigqcmV0KSk7CisKKwlhc3NlcnQocik7CisJbGluZV9sb2dfZGF0YV9pbml0KHJldCk7CisJcmFuZ2Vfc2V0X2NvcHkoJnJldC0+cmFuZ2VzLCAmci0+cmFuZ2VzKTsKKworCXJldC0+cGF0aCA9IHhzdHJkdXAoci0+cGF0aCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGxpbmVfbG9nX2RhdGEgKgorbGluZV9sb2dfZGF0YV9jb3B5KHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyKQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyZXQgPSBOVUxMOworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICp0bXAgPSBOVUxMLCAqcHJldiA9IE5VTEw7CisKKwlhc3NlcnQocik7CisJcmV0ID0gdG1wID0gcHJldiA9IGxpbmVfbG9nX2RhdGFfY29weV9vbmUocik7CisJciA9IHItPm5leHQ7CisJd2hpbGUgKHIpIHsKKwkJdG1wID0gbGluZV9sb2dfZGF0YV9jb3B5X29uZShyKTsKKwkJcHJldi0+bmV4dCA9IHRtcDsKKwkJcHJldiA9IHRtcDsKKwkJciA9IHItPm5leHQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogbWVyZ2UgdHdvIHJhbmdlIHNldHMgYWNyb3NzIGZpbGVzICovCitzdGF0aWMgc3RydWN0IGxpbmVfbG9nX2RhdGEgKmxpbmVfbG9nX2RhdGFfbWVyZ2Uoc3RydWN0IGxpbmVfbG9nX2RhdGEgKmEsCisJCQkJCQkgc3RydWN0IGxpbmVfbG9nX2RhdGEgKmIpCit7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKmhlYWQgPSBOVUxMLCAqKnBwID0gJmhlYWQ7CisKKwl3aGlsZSAoYSB8fCBiKSB7CisJCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpzcmM7CisJCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpzcmMyID0gTlVMTDsKKwkJc3RydWN0IGxpbmVfbG9nX2RhdGEgKmQ7CisJCWludCBjbXA7CisJCWlmICghYSkKKwkJCWNtcCA9IDE7CisJCWVsc2UgaWYgKCFiKQorCQkJY21wID0gLTE7CisJCWVsc2UKKwkJCWNtcCA9IHN0cmNtcChhLT5wYXRoLCBiLT5wYXRoKTsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCXNyYyA9IGE7CisJCQlhID0gYS0+bmV4dDsKKwkJfSBlbHNlIGlmIChjbXAgPT0gMCkgeworCQkJc3JjID0gYTsKKwkJCWEgPSBhLT5uZXh0OworCQkJc3JjMiA9IGI7CisJCQliID0gYi0+bmV4dDsKKwkJfSBlbHNlIHsKKwkJCXNyYyA9IGI7CisJCQliID0gYi0+bmV4dDsKKwkJfQorCQlkID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGxpbmVfbG9nX2RhdGEpKTsKKwkJbGluZV9sb2dfZGF0YV9pbml0KGQpOworCQlkLT5wYXRoID0geHN0cmR1cChzcmMtPnBhdGgpOworCQkqcHAgPSBkOworCQlwcCA9ICZkLT5uZXh0OworCQlpZiAoc3JjMikKKwkJCXJhbmdlX3NldF91bmlvbigmZC0+cmFuZ2VzLCAmc3JjLT5yYW5nZXMsICZzcmMyLT5yYW5nZXMpOworCQllbHNlCisJCQlyYW5nZV9zZXRfY29weSgmZC0+cmFuZ2VzLCAmc3JjLT5yYW5nZXMpOworCX0KKworCXJldHVybiBoZWFkOworfQorCitzdGF0aWMgdm9pZCBhZGRfbGluZV9yYW5nZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSkKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqb2xkX2xpbmUgPSBOVUxMOworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpuZXdfbGluZSA9IE5VTEw7CisKKwlvbGRfbGluZSA9IGxvb2t1cF9kZWNvcmF0aW9uKCZyZXZzLT5saW5lX2xvZ19kYXRhLCAmY29tbWl0LT5vYmplY3QpOworCWlmIChvbGRfbGluZSAmJiByYW5nZSkgeworCQluZXdfbGluZSA9IGxpbmVfbG9nX2RhdGFfbWVyZ2Uob2xkX2xpbmUsIHJhbmdlKTsKKwkJZnJlZV9saW5lX2xvZ19kYXRhKG9sZF9saW5lKTsKKwl9IGVsc2UgaWYgKHJhbmdlKQorCQluZXdfbGluZSA9IGxpbmVfbG9nX2RhdGFfY29weShyYW5nZSk7CisKKwlpZiAobmV3X2xpbmUpCisJCWFkZF9kZWNvcmF0aW9uKCZyZXZzLT5saW5lX2xvZ19kYXRhLCAmY29tbWl0LT5vYmplY3QsIG5ld19saW5lKTsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfY29tbWl0X2xpbmVfcmFuZ2Uoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnI7CisJciA9IGxvb2t1cF9kZWNvcmF0aW9uKCZyZXZzLT5saW5lX2xvZ19kYXRhLCAmY29tbWl0LT5vYmplY3QpOworCWlmICghcikKKwkJcmV0dXJuOworCWZyZWVfbGluZV9sb2dfZGF0YShyKTsKKwlhZGRfZGVjb3JhdGlvbigmcmV2cy0+bGluZV9sb2dfZGF0YSwgJmNvbW1pdC0+b2JqZWN0LCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpsb29rdXBfbGluZV9yYW5nZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCSAgICAgICBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJldCA9IE5VTEw7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKmQ7CisKKwlyZXQgPSBsb29rdXBfZGVjb3JhdGlvbigmcmV2cy0+bGluZV9sb2dfZGF0YSwgJmNvbW1pdC0+b2JqZWN0KTsKKworCWZvciAoZCA9IHJldDsgZDsgZCA9IGQtPm5leHQpCisJCXJhbmdlX3NldF9jaGVja19pbnZhcmlhbnRzKCZkLT5yYW5nZXMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzYW1lX3BhdGhzX2luX3BhdGhzcGVjX2FuZF9yYW5nZShzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJCQkgICAgc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlKQoreworCWludCBpOworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyOworCisJZm9yIChpID0gMCwgciA9IHJhbmdlOyBpIDwgcGF0aHNwZWMtPm5yICYmIHI7IGkrKywgciA9IHItPm5leHQpCisJCWlmIChzdHJjbXAocGF0aHNwZWMtPml0ZW1zW2ldLm1hdGNoLCByLT5wYXRoKSkKKwkJCXJldHVybiAwOworCWlmIChpIDwgcGF0aHNwZWMtPm5yIHx8IHIpCisJCS8qIGRpZmZlcmVudCBudW1iZXIgb2YgcGF0aHNwZWMgaXRlbXMgYW5kIHJhbmdlcyAqLworCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9wYXRoc3BlY19mcm9tX3JhbmdlcyhzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJCSAgICAgICBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UpCit7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnI7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJyYXkgPSBBUkdWX0FSUkFZX0lOSVQ7CisJY29uc3QgY2hhciAqKnBhdGhzOworCisJZm9yIChyID0gcmFuZ2U7IHI7IHIgPSByLT5uZXh0KQorCQlhcmd2X2FycmF5X3B1c2goJmFycmF5LCByLT5wYXRoKTsKKwlwYXRocyA9IGFyZ3ZfYXJyYXlfZGV0YWNoKCZhcnJheSk7CisKKwlwYXJzZV9wYXRoc3BlYyhwYXRoc3BlYywgMCwgUEFUSFNQRUNfUFJFRkVSX0ZVTEwsICIiLCBwYXRocyk7CisJLyogc3RyaW5ncyBhcmUgbm93IG93bmVkIGJ5IHBhdGhzcGVjICovCisJZnJlZShwYXRocyk7Cit9CisKK3ZvaWQgbGluZV9sb2dfaW5pdChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmFyZ3MpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gTlVMTDsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2U7CisKKwljb21taXQgPSBjaGVja19zaW5nbGVfY29tbWl0KHJldik7CisJcmFuZ2UgPSBwYXJzZV9saW5lcyhyZXYtPmRpZmZvcHQucmVwbywgY29tbWl0LCBwcmVmaXgsIGFyZ3MpOworCWFkZF9saW5lX3JhbmdlKHJldiwgY29tbWl0LCByYW5nZSk7CisKKwlwYXJzZV9wYXRoc3BlY19mcm9tX3JhbmdlcygmcmV2LT5kaWZmb3B0LnBhdGhzcGVjLCByYW5nZSk7Cit9CisKK3N0YXRpYyB2b2lkIG1vdmVfZGlmZl9xdWV1ZShzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKmRzdCwKKwkJCSAgICBzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnNyYykKK3sKKwlhc3NlcnQoc3JjICE9IGRzdCk7CisJbWVtY3B5KGRzdCwgc3JjLCBzaXplb2Yoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0KSk7CisJRElGRl9RVUVVRV9DTEVBUihzcmMpOworfQorCitzdGF0aWMgdm9pZCBmaWx0ZXJfZGlmZnNfZm9yX3BhdGhzKHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSwgaW50IGtlZXBfZGVsZXRpb25zKQoreworCWludCBpOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBvdXRxOworCURJRkZfUVVFVUVfQ0xFQVIoJm91dHEpOworCisJZm9yIChpID0gMDsgaSA8IGRpZmZfcXVldWVkX2RpZmYubnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IGRpZmZfcXVldWVkX2RpZmYucXVldWVbaV07CisJCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyZyA9IE5VTEw7CisKKwkJaWYgKCFESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkgeworCQkJaWYgKGtlZXBfZGVsZXRpb25zKQorCQkJCWRpZmZfcSgmb3V0cSwgcCk7CisJCQllbHNlCisJCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKHApOworCQkJY29udGludWU7CisJCX0KKwkJZm9yIChyZyA9IHJhbmdlOyByZzsgcmcgPSByZy0+bmV4dCkgeworCQkJaWYgKCFzdHJjbXAocmctPnBhdGgsIHAtPnR3by0+cGF0aCkpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJnKQorCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJZWxzZQorCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKHApOworCX0KKwlmcmVlKGRpZmZfcXVldWVkX2RpZmYucXVldWUpOworCWRpZmZfcXVldWVkX2RpZmYgPSBvdXRxOworfQorCitzdGF0aWMgaW5saW5lIGludCBkaWZmX21pZ2h0X2JlX3JlbmFtZSh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkaWZmX3F1ZXVlZF9kaWZmLm5yOyBpKyspCisJCWlmICghRElGRl9GSUxFX1ZBTElEKGRpZmZfcXVldWVkX2RpZmYucXVldWVbaV0tPm9uZSkpIHsKKwkJCS8qIGZwcmludGYoc3RkZXJyLCAiZGlmZl9taWdodF9iZV9yZW5hbWUgZm91bmQgY3JlYXRpb24gb2Y6ICVzXG4iLCAqLworCQkJLyogCWRpZmZfcXVldWVkX2RpZmYucXVldWVbaV0tPnR3by0+cGF0aCk7ICovCisJCQlyZXR1cm4gMTsKKwkJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxdWV1ZV9kaWZmcyhzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UsCisJCQlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsCisJCQlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnF1ZXVlLAorCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0ICpwYXJlbnQpCit7CisJc3RydWN0IG9iamVjdF9pZCAqdHJlZV9vaWQsICpwYXJlbnRfdHJlZV9vaWQ7CisKKwlhc3NlcnQoY29tbWl0KTsKKworCXRyZWVfb2lkID0gZ2V0X2NvbW1pdF90cmVlX29pZChjb21taXQpOworCXBhcmVudF90cmVlX29pZCA9IHBhcmVudCA/IGdldF9jb21taXRfdHJlZV9vaWQocGFyZW50KSA6IE5VTEw7CisKKwlpZiAob3B0LT5kZXRlY3RfcmVuYW1lICYmCisJICAgICFzYW1lX3BhdGhzX2luX3BhdGhzcGVjX2FuZF9yYW5nZSgmb3B0LT5wYXRoc3BlYywgcmFuZ2UpKSB7CisJCWNsZWFyX3BhdGhzcGVjKCZvcHQtPnBhdGhzcGVjKTsKKwkJcGFyc2VfcGF0aHNwZWNfZnJvbV9yYW5nZXMoJm9wdC0+cGF0aHNwZWMsIHJhbmdlKTsKKwl9CisJRElGRl9RVUVVRV9DTEVBUigmZGlmZl9xdWV1ZWRfZGlmZik7CisJZGlmZl90cmVlX29pZChwYXJlbnRfdHJlZV9vaWQsIHRyZWVfb2lkLCAiIiwgb3B0KTsKKwlpZiAob3B0LT5kZXRlY3RfcmVuYW1lICYmIGRpZmZfbWlnaHRfYmVfcmVuYW1lKCkpIHsKKwkJLyogbXVzdCBsb29rIGF0IHRoZSBmdWxsIHRyZWUgZGlmZiB0byBkZXRlY3QgcmVuYW1lcyAqLworCQljbGVhcl9wYXRoc3BlYygmb3B0LT5wYXRoc3BlYyk7CisJCURJRkZfUVVFVUVfQ0xFQVIoJmRpZmZfcXVldWVkX2RpZmYpOworCisJCWRpZmZfdHJlZV9vaWQocGFyZW50X3RyZWVfb2lkLCB0cmVlX29pZCwgIiIsIG9wdCk7CisKKwkJZmlsdGVyX2RpZmZzX2Zvcl9wYXRocyhyYW5nZSwgMSk7CisJCWRpZmZjb3JlX3N0ZChvcHQpOworCQlmaWx0ZXJfZGlmZnNfZm9yX3BhdGhzKHJhbmdlLCAwKTsKKwl9CisJbW92ZV9kaWZmX3F1ZXVlKHF1ZXVlLCAmZGlmZl9xdWV1ZWRfZGlmZik7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfbnRoX2xpbmUobG9uZyBsaW5lLCB1bnNpZ25lZCBsb25nICplbmRzLCB2b2lkICpkYXRhKQoreworCWlmIChsaW5lID09IDApCisJCXJldHVybiAoY2hhciAqKWRhdGE7CisJZWxzZQorCQlyZXR1cm4gKGNoYXIgKilkYXRhICsgZW5kc1tsaW5lXSArIDE7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2xpbmUoY29uc3QgY2hhciAqcHJlZml4LCBjaGFyIGZpcnN0LAorCQkgICAgICAgbG9uZyBsaW5lLCB1bnNpZ25lZCBsb25nICplbmRzLCB2b2lkICpkYXRhLAorCQkgICAgICAgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKnJlc2V0LCBGSUxFICpmaWxlKQoreworCWNoYXIgKmJlZ2luID0gZ2V0X250aF9saW5lKGxpbmUsIGVuZHMsIGRhdGEpOworCWNoYXIgKmVuZCA9IGdldF9udGhfbGluZShsaW5lKzEsIGVuZHMsIGRhdGEpOworCWludCBoYWRfbmwgPSAwOworCisJaWYgKGVuZCA+IGJlZ2luICYmIGVuZFstMV0gPT0gJ1xuJykgeworCQllbmQtLTsKKwkJaGFkX25sID0gMTsKKwl9CisKKwlmcHV0cyhwcmVmaXgsIGZpbGUpOworCWZwdXRzKGNvbG9yLCBmaWxlKTsKKwlwdXRjKGZpcnN0LCBmaWxlKTsKKwlmd3JpdGUoYmVnaW4sIDEsIGVuZC1iZWdpbiwgZmlsZSk7CisJZnB1dHMocmVzZXQsIGZpbGUpOworCXB1dGMoJ1xuJywgZmlsZSk7CisJaWYgKCFoYWRfbmwpCisJCWZwdXRzKCJcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG4iLCBmaWxlKTsKK30KKworc3RhdGljIGNoYXIgKm91dHB1dF9wcmVmaXgoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCWNoYXIgKnByZWZpeCA9ICIiOworCisJaWYgKG9wdC0+b3V0cHV0X3ByZWZpeCkgeworCQlzdHJ1Y3Qgc3RyYnVmICpzYiA9IG9wdC0+b3V0cHV0X3ByZWZpeChvcHQsIG9wdC0+b3V0cHV0X3ByZWZpeF9kYXRhKTsKKwkJcHJlZml4ID0gc2ItPmJ1ZjsKKwl9CisKKwlyZXR1cm4gcHJlZml4OworfQorCitzdGF0aWMgdm9pZCBkdW1wX2RpZmZfaGFja3lfb25lKHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UpCit7CisJdW5zaWduZWQgaW50IGksIGogPSAwOworCWxvbmcgcF9saW5lcywgdF9saW5lczsKKwl1bnNpZ25lZCBsb25nICpwX2VuZHMgPSBOVUxMLCAqdF9lbmRzID0gTlVMTDsKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpciA9IHJhbmdlLT5wYWlyOworCXN0cnVjdCBkaWZmX3JhbmdlcyAqZGlmZiA9ICZyYW5nZS0+ZGlmZjsKKworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCA9ICZyZXYtPmRpZmZvcHQ7CisJY2hhciAqcHJlZml4ID0gb3V0cHV0X3ByZWZpeChvcHQpOworCWNvbnN0IGNoYXIgKmNfcmVzZXQgPSBkaWZmX2dldF9jb2xvcihvcHQtPnVzZV9jb2xvciwgRElGRl9SRVNFVCk7CisJY29uc3QgY2hhciAqY19mcmFnID0gZGlmZl9nZXRfY29sb3Iob3B0LT51c2VfY29sb3IsIERJRkZfRlJBR0lORk8pOworCWNvbnN0IGNoYXIgKmNfbWV0YSA9IGRpZmZfZ2V0X2NvbG9yKG9wdC0+dXNlX2NvbG9yLCBESUZGX01FVEFJTkZPKTsKKwljb25zdCBjaGFyICpjX29sZCA9IGRpZmZfZ2V0X2NvbG9yKG9wdC0+dXNlX2NvbG9yLCBESUZGX0ZJTEVfT0xEKTsKKwljb25zdCBjaGFyICpjX25ldyA9IGRpZmZfZ2V0X2NvbG9yKG9wdC0+dXNlX2NvbG9yLCBESUZGX0ZJTEVfTkVXKTsKKwljb25zdCBjaGFyICpjX2NvbnRleHQgPSBkaWZmX2dldF9jb2xvcihvcHQtPnVzZV9jb2xvciwgRElGRl9DT05URVhUKTsKKworCWlmICghcGFpciB8fCAhZGlmZikKKwkJcmV0dXJuOworCisJaWYgKHBhaXItPm9uZS0+b2lkX3ZhbGlkKQorCQlmaWxsX2xpbmVfZW5kcyhyZXYtPmRpZmZvcHQucmVwbywgcGFpci0+b25lLCAmcF9saW5lcywgJnBfZW5kcyk7CisJZmlsbF9saW5lX2VuZHMocmV2LT5kaWZmb3B0LnJlcG8sIHBhaXItPnR3bywgJnRfbGluZXMsICZ0X2VuZHMpOworCisJZnByaW50ZihvcHQtPmZpbGUsICIlcyVzZGlmZiAtLWdpdCBhLyVzIGIvJXMlc1xuIiwgcHJlZml4LCBjX21ldGEsIHBhaXItPm9uZS0+cGF0aCwgcGFpci0+dHdvLT5wYXRoLCBjX3Jlc2V0KTsKKwlmcHJpbnRmKG9wdC0+ZmlsZSwgIiVzJXMtLS0gJXMlcyVzXG4iLCBwcmVmaXgsIGNfbWV0YSwKKwkgICAgICAgcGFpci0+b25lLT5vaWRfdmFsaWQgPyAiYS8iIDogIiIsCisJICAgICAgIHBhaXItPm9uZS0+b2lkX3ZhbGlkID8gcGFpci0+b25lLT5wYXRoIDogIi9kZXYvbnVsbCIsCisJICAgICAgIGNfcmVzZXQpOworCWZwcmludGYob3B0LT5maWxlLCAiJXMlcysrKyBiLyVzJXNcbiIsIHByZWZpeCwgY19tZXRhLCBwYWlyLT50d28tPnBhdGgsIGNfcmVzZXQpOworCWZvciAoaSA9IDA7IGkgPCByYW5nZS0+cmFuZ2VzLm5yOyBpKyspIHsKKwkJbG9uZyBwX3N0YXJ0LCBwX2VuZDsKKwkJbG9uZyB0X3N0YXJ0ID0gcmFuZ2UtPnJhbmdlcy5yYW5nZXNbaV0uc3RhcnQ7CisJCWxvbmcgdF9lbmQgPSByYW5nZS0+cmFuZ2VzLnJhbmdlc1tpXS5lbmQ7CisJCWxvbmcgdF9jdXIgPSB0X3N0YXJ0OworCQl1bnNpZ25lZCBpbnQgal9sYXN0OworCisJCXdoaWxlIChqIDwgZGlmZi0+dGFyZ2V0Lm5yICYmIGRpZmYtPnRhcmdldC5yYW5nZXNbal0uZW5kIDwgdF9zdGFydCkKKwkJCWorKzsKKwkJaWYgKGogPT0gZGlmZi0+dGFyZ2V0Lm5yIHx8IGRpZmYtPnRhcmdldC5yYW5nZXNbal0uc3RhcnQgPiB0X2VuZCkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNjYW4gYWhlYWQgdG8gZGV0ZXJtaW5lIHRoZSBsYXN0IGRpZmYgdGhhdCBmYWxscyBpbiB0aGlzIHJhbmdlICovCisJCWpfbGFzdCA9IGo7CisJCXdoaWxlIChqX2xhc3QgPCBkaWZmLT50YXJnZXQubnIgJiYgZGlmZi0+dGFyZ2V0LnJhbmdlc1tqX2xhc3RdLnN0YXJ0IDwgdF9lbmQpCisJCQlqX2xhc3QrKzsKKwkJaWYgKGpfbGFzdCA+IGopCisJCQlqX2xhc3QtLTsKKworCQkvKgorCQkgKiBDb21wdXRlIHBhcmVudCBodW5rIGhlYWRlcnM6IHdlIGtub3cgdGhhdCB0aGUgZGlmZgorCQkgKiBoYXMgdGhlIGNvcnJlY3QgbGluZSBudW1iZXJzIChidXQgbm90IGFsbCBodW5rcykuCisJCSAqIFNvIGl0IHN1ZmZpY2VzIHRvIHNoaWZ0IHRoZSBzdGFydC9lbmQgYWNjb3JkaW5nIHRvCisJCSAqIHRoZSBsaW5lIG51bWJlcnMgb2YgdGhlIGZpcnN0L2xhc3QgaHVuayhzKSB0aGF0CisJCSAqIGZhbGwgaW4gdGhpcyByYW5nZS4KKwkJICovCisJCWlmICh0X3N0YXJ0IDwgZGlmZi0+dGFyZ2V0LnJhbmdlc1tqXS5zdGFydCkKKwkJCXBfc3RhcnQgPSBkaWZmLT5wYXJlbnQucmFuZ2VzW2pdLnN0YXJ0IC0gKGRpZmYtPnRhcmdldC5yYW5nZXNbal0uc3RhcnQtdF9zdGFydCk7CisJCWVsc2UKKwkJCXBfc3RhcnQgPSBkaWZmLT5wYXJlbnQucmFuZ2VzW2pdLnN0YXJ0OworCQlpZiAodF9lbmQgPiBkaWZmLT50YXJnZXQucmFuZ2VzW2pfbGFzdF0uZW5kKQorCQkJcF9lbmQgPSBkaWZmLT5wYXJlbnQucmFuZ2VzW2pfbGFzdF0uZW5kICsgKHRfZW5kLWRpZmYtPnRhcmdldC5yYW5nZXNbal9sYXN0XS5lbmQpOworCQllbHNlCisJCQlwX2VuZCA9IGRpZmYtPnBhcmVudC5yYW5nZXNbal9sYXN0XS5lbmQ7CisKKwkJaWYgKCFwX3N0YXJ0ICYmICFwX2VuZCkgeworCQkJcF9zdGFydCA9IC0xOworCQkJcF9lbmQgPSAtMTsKKwkJfQorCisJCS8qIE5vdyBvdXRwdXQgYSBkaWZmIGh1bmsgZm9yIHRoaXMgcmFuZ2UgKi8KKwkJZnByaW50ZihvcHQtPmZpbGUsICIlcyVzQEAgLSVsZCwlbGQgKyVsZCwlbGQgQEAlc1xuIiwKKwkJICAgICAgIHByZWZpeCwgY19mcmFnLAorCQkgICAgICAgcF9zdGFydCsxLCBwX2VuZC1wX3N0YXJ0LCB0X3N0YXJ0KzEsIHRfZW5kLXRfc3RhcnQsCisJCSAgICAgICBjX3Jlc2V0KTsKKwkJd2hpbGUgKGogPCBkaWZmLT50YXJnZXQubnIgJiYgZGlmZi0+dGFyZ2V0LnJhbmdlc1tqXS5zdGFydCA8IHRfZW5kKSB7CisJCQlpbnQgazsKKwkJCWZvciAoOyB0X2N1ciA8IGRpZmYtPnRhcmdldC5yYW5nZXNbal0uc3RhcnQ7IHRfY3VyKyspCisJCQkJcHJpbnRfbGluZShwcmVmaXgsICcgJywgdF9jdXIsIHRfZW5kcywgcGFpci0+dHdvLT5kYXRhLAorCQkJCQkgICBjX2NvbnRleHQsIGNfcmVzZXQsIG9wdC0+ZmlsZSk7CisJCQlmb3IgKGsgPSBkaWZmLT5wYXJlbnQucmFuZ2VzW2pdLnN0YXJ0OyBrIDwgZGlmZi0+cGFyZW50LnJhbmdlc1tqXS5lbmQ7IGsrKykKKwkJCQlwcmludF9saW5lKHByZWZpeCwgJy0nLCBrLCBwX2VuZHMsIHBhaXItPm9uZS0+ZGF0YSwKKwkJCQkJICAgY19vbGQsIGNfcmVzZXQsIG9wdC0+ZmlsZSk7CisJCQlmb3IgKDsgdF9jdXIgPCBkaWZmLT50YXJnZXQucmFuZ2VzW2pdLmVuZCAmJiB0X2N1ciA8IHRfZW5kOyB0X2N1cisrKQorCQkJCXByaW50X2xpbmUocHJlZml4LCAnKycsIHRfY3VyLCB0X2VuZHMsIHBhaXItPnR3by0+ZGF0YSwKKwkJCQkJICAgY19uZXcsIGNfcmVzZXQsIG9wdC0+ZmlsZSk7CisJCQlqKys7CisJCX0KKwkJZm9yICg7IHRfY3VyIDwgdF9lbmQ7IHRfY3VyKyspCisJCQlwcmludF9saW5lKHByZWZpeCwgJyAnLCB0X2N1ciwgdF9lbmRzLCBwYWlyLT50d28tPmRhdGEsCisJCQkJICAgY19jb250ZXh0LCBjX3Jlc2V0LCBvcHQtPmZpbGUpOworCX0KKworCWZyZWUocF9lbmRzKTsKKwlmcmVlKHRfZW5kcyk7Cit9CisKKy8qCisgKiBORUVEU1dPUks6IG1hbnVhbGx5IGJ1aWxkaW5nIGEgZGlmZiBoZXJlIGlzIG5vdCB0aGUgUmlnaHQKKyAqIFRoaW5nKHRtKS4gIGxvZyAtTCBzaG91bGQgYmUgYnVpbHQgaW50byB0aGUgZGlmZiBwaXBlbGluZS4KKyAqLworc3RhdGljIHZvaWQgZHVtcF9kaWZmX2hhY2t5KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UpCit7CisJZnByaW50ZihyZXYtPmRpZmZvcHQuZmlsZSwgIiVzXG4iLCBvdXRwdXRfcHJlZml4KCZyZXYtPmRpZmZvcHQpKTsKKwl3aGlsZSAocmFuZ2UpIHsKKwkJZHVtcF9kaWZmX2hhY2t5X29uZShyZXYsIHJhbmdlKTsKKwkJcmFuZ2UgPSByYW5nZS0+bmV4dDsKKwl9Cit9CisKKy8qCisgKiBVbmxpa2UgbW9zdCBvdGhlciBmdW5jdGlvbnMsIHRoaXMgZGVzdHJ1Y3RpdmVseSBvcGVyYXRlcyBvbgorICogJ3JhbmdlJy4KKyAqLworc3RhdGljIGludCBwcm9jZXNzX2RpZmZfZmlsZXBhaXIoc3RydWN0IHJldl9pbmZvICpyZXYsCisJCQkJIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyLAorCQkJCSBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UsCisJCQkJIHN0cnVjdCBkaWZmX3JhbmdlcyAqKmRpZmZfb3V0KQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyZyA9IHJhbmdlOworCXN0cnVjdCByYW5nZV9zZXQgdG1wOworCXN0cnVjdCBkaWZmX3JhbmdlcyBkaWZmOworCW1tZmlsZV90IGZpbGVfcGFyZW50LCBmaWxlX3RhcmdldDsKKworCWFzc2VydChwYWlyLT50d28tPnBhdGgpOworCXdoaWxlIChyZykgeworCQlhc3NlcnQocmctPnBhdGgpOworCQlpZiAoIXN0cmNtcChyZy0+cGF0aCwgcGFpci0+dHdvLT5wYXRoKSkKKwkJCWJyZWFrOworCQlyZyA9IHJnLT5uZXh0OworCX0KKworCWlmICghcmcpCisJCXJldHVybiAwOworCWlmIChyZy0+cmFuZ2VzLm5yID09IDApCisJCXJldHVybiAwOworCisJYXNzZXJ0KHBhaXItPnR3by0+b2lkX3ZhbGlkKTsKKwlkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHJldi0+ZGlmZm9wdC5yZXBvLCBwYWlyLT50d28sIE5VTEwpOworCWZpbGVfdGFyZ2V0LnB0ciA9IHBhaXItPnR3by0+ZGF0YTsKKwlmaWxlX3RhcmdldC5zaXplID0gcGFpci0+dHdvLT5zaXplOworCisJaWYgKHBhaXItPm9uZS0+b2lkX3ZhbGlkKSB7CisJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMocmV2LT5kaWZmb3B0LnJlcG8sIHBhaXItPm9uZSwgTlVMTCk7CisJCWZpbGVfcGFyZW50LnB0ciA9IHBhaXItPm9uZS0+ZGF0YTsKKwkJZmlsZV9wYXJlbnQuc2l6ZSA9IHBhaXItPm9uZS0+c2l6ZTsKKwl9IGVsc2UgeworCQlmaWxlX3BhcmVudC5wdHIgPSAiIjsKKwkJZmlsZV9wYXJlbnQuc2l6ZSA9IDA7CisJfQorCisJZGlmZl9yYW5nZXNfaW5pdCgmZGlmZik7CisJaWYgKGNvbGxlY3RfZGlmZigmZmlsZV9wYXJlbnQsICZmaWxlX3RhcmdldCwgJmRpZmYpKQorCQlkaWUoInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmIGZvciAlcyIsIHBhaXItPm9uZS0+cGF0aCk7CisKKwkvKiBORUVEU1dPUksgc2hvdWxkIGFwcGx5IHNvbWUgaGV1cmlzdGljcyB0byBwcmV2ZW50IG1pc21hdGNoZXMgKi8KKwlmcmVlKHJnLT5wYXRoKTsKKwlyZy0+cGF0aCA9IHhzdHJkdXAocGFpci0+b25lLT5wYXRoKTsKKworCXJhbmdlX3NldF9pbml0KCZ0bXAsIDApOworCXJhbmdlX3NldF9tYXBfYWNyb3NzX2RpZmYoJnRtcCwgJnJnLT5yYW5nZXMsICZkaWZmLCBkaWZmX291dCk7CisJcmFuZ2Vfc2V0X3JlbGVhc2UoJnJnLT5yYW5nZXMpOworCXJhbmdlX3NldF9tb3ZlKCZyZy0+cmFuZ2VzLCAmdG1wKTsKKworCWRpZmZfcmFuZ2VzX3JlbGVhc2UoJmRpZmYpOworCisJcmV0dXJuICgoKmRpZmZfb3V0KS0+cGFyZW50Lm5yID4gMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqZGlmZl9maWxlcGFpcl9kdXAoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIpCit7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKm5ld19maWxlcGFpciA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaWZmX2ZpbGVwYWlyKSk7CisJbmV3X2ZpbGVwYWlyLT5vbmUgPSBwYWlyLT5vbmU7CisJbmV3X2ZpbGVwYWlyLT50d28gPSBwYWlyLT50d287CisJbmV3X2ZpbGVwYWlyLT5vbmUtPmNvdW50Kys7CisJbmV3X2ZpbGVwYWlyLT50d28tPmNvdW50Kys7CisJcmV0dXJuIG5ld19maWxlcGFpcjsKK30KKworc3RhdGljIHZvaWQgZnJlZV9kaWZmcXVldWVzKGludCBuLCBzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKmRxKQoreworCWludCBpLCBqOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBkcVtpXS5ucjsgaisrKQorCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKGRxW2ldLnF1ZXVlW2pdKTsKKwlmcmVlKGRxKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2FsbF9maWxlcyhzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqKnJhbmdlX291dCwKKwkJCSAgICAgc3RydWN0IHJldl9pbmZvICpyZXYsCisJCQkgICAgIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcXVldWUsCisJCQkgICAgIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSkKK3sKKwlpbnQgaSwgY2hhbmdlZCA9IDA7CisKKwkqcmFuZ2Vfb3V0ID0gbGluZV9sb2dfZGF0YV9jb3B5KHJhbmdlKTsKKworCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9yYW5nZXMgKnBhaXJkaWZmID0gTlVMTDsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIgPSBxdWV1ZS0+cXVldWVbaV07CisJCWlmIChwcm9jZXNzX2RpZmZfZmlsZXBhaXIocmV2LCBwYWlyLCAqcmFuZ2Vfb3V0LCAmcGFpcmRpZmYpKSB7CisJCQkvKgorCQkJICogU3RvcmUgYXdheSB0aGUgZGlmZiBmb3IgbGF0ZXIgb3V0cHV0LiAgV2UKKwkJCSAqIHR1Y2sgaXQgaW4gdGhlIHJhbmdlcyB3ZSBnb3QgYXMgX2lucHV0XywKKwkJCSAqIHNpbmNlIHRoYXQncyB0aGUgY29tbWl0IHRoYXQgY2F1c2VkIHRoZQorCQkJICogZGlmZi4KKwkJCSAqCisJCQkgKiBORUVEU1dPUksgbm90IGVub3VnaCB3aGVuIHdlIGdldCBhcm91bmQgdG8KKwkJCSAqIGRvaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZyB3aXRoIG1lcmdlczsKKwkJCSAqIGN1cnJlbnRseSBlYWNoIGludm9jYXRpb24gb24gYSBtZXJnZSBwYXJlbnQKKwkJCSAqIHRyYXNoZXMgdGhlIHByZXZpb3VzIG9uZSdzIGRpZmYuCisJCQkgKgorCQkJICogTkVFRFNXT1JLIHRyYW1wbGVzIG92ZXIgZGF0YSBzdHJ1Y3R1cmVzIG5vdCBvd25lZCBoZXJlCisJCQkgKi8KKwkJCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyZyA9IHJhbmdlOworCQkJY2hhbmdlZCsrOworCQkJd2hpbGUgKHJnICYmIHN0cmNtcChyZy0+cGF0aCwgcGFpci0+dHdvLT5wYXRoKSkKKwkJCQlyZyA9IHJnLT5uZXh0OworCQkJYXNzZXJ0KHJnKTsKKwkJCXJnLT5wYWlyID0gZGlmZl9maWxlcGFpcl9kdXAocXVldWUtPnF1ZXVlW2ldKTsKKwkJCW1lbWNweSgmcmctPmRpZmYsIHBhaXJkaWZmLCBzaXplb2Yoc3RydWN0IGRpZmZfcmFuZ2VzKSk7CisJCX0KKwkJZnJlZShwYWlyZGlmZik7CisJfQorCisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2ludCBsaW5lX2xvZ19wcmludChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCisJc2hvd19sb2cocmV2KTsKKwlpZiAoIShyZXYtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX05PX09VVFBVVCkpIHsKKwkJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlID0gbG9va3VwX2xpbmVfcmFuZ2UocmV2LCBjb21taXQpOworCQlkdW1wX2RpZmZfaGFja3kocmV2LCByYW5nZSk7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfcmFuZ2VzX29yZGluYXJ5X2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCQkgIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBxdWV1ZTsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcGFyZW50X3JhbmdlOworCWludCBjaGFuZ2VkOworCisJaWYgKGNvbW1pdC0+cGFyZW50cykKKwkJcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzLT5pdGVtOworCisJcXVldWVfZGlmZnMocmFuZ2UsICZyZXYtPmRpZmZvcHQsICZxdWV1ZSwgY29tbWl0LCBwYXJlbnQpOworCWNoYW5nZWQgPSBwcm9jZXNzX2FsbF9maWxlcygmcGFyZW50X3JhbmdlLCByZXYsICZxdWV1ZSwgcmFuZ2UpOworCWlmIChwYXJlbnQpCisJCWFkZF9saW5lX3JhbmdlKHJldiwgcGFyZW50LCBwYXJlbnRfcmFuZ2UpOworCWZyZWVfbGluZV9sb2dfZGF0YShwYXJlbnRfcmFuZ2UpOworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfcmFuZ2VzX21lcmdlX2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCSAgICAgICBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpkaWZmcXVldWVzOworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICoqY2FuZDsKKwlzdHJ1Y3QgY29tbWl0ICoqcGFyZW50czsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJaW50IGk7CisJaW50IG5wYXJlbnRzID0gY29tbWl0X2xpc3RfY291bnQoY29tbWl0LT5wYXJlbnRzKTsKKworCWlmIChucGFyZW50cyA+IDEgJiYgcmV2LT5maXJzdF9wYXJlbnRfb25seSkKKwkJbnBhcmVudHMgPSAxOworCisJQUxMT0NfQVJSQVkoZGlmZnF1ZXVlcywgbnBhcmVudHMpOworCUFMTE9DX0FSUkFZKGNhbmQsIG5wYXJlbnRzKTsKKwlBTExPQ19BUlJBWShwYXJlbnRzLCBucGFyZW50cyk7CisKKwlwID0gY29tbWl0LT5wYXJlbnRzOworCWZvciAoaSA9IDA7IGkgPCBucGFyZW50czsgaSsrKSB7CisJCXBhcmVudHNbaV0gPSBwLT5pdGVtOworCQlwID0gcC0+bmV4dDsKKwkJcXVldWVfZGlmZnMocmFuZ2UsICZyZXYtPmRpZmZvcHQsICZkaWZmcXVldWVzW2ldLCBjb21taXQsIHBhcmVudHNbaV0pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBucGFyZW50czsgaSsrKSB7CisJCWludCBjaGFuZ2VkOworCQljYW5kW2ldID0gTlVMTDsKKwkJY2hhbmdlZCA9IHByb2Nlc3NfYWxsX2ZpbGVzKCZjYW5kW2ldLCByZXYsICZkaWZmcXVldWVzW2ldLCByYW5nZSk7CisJCWlmICghY2hhbmdlZCkgeworCQkJLyoKKwkJCSAqIFRoaXMgcGFyZW50IGNhbiB0YWtlIGFsbCB0aGUgYmxhbWUsIHNvIHdlCisJCQkgKiBkb24ndCBmb2xsb3cgYW55IG90aGVyIHBhdGggaW4gaGlzdG9yeQorCQkJICovCisJCQlhZGRfbGluZV9yYW5nZShyZXYsIHBhcmVudHNbaV0sIGNhbmRbaV0pOworCQkJY2xlYXJfY29tbWl0X2xpbmVfcmFuZ2UocmV2LCBjb21taXQpOworCQkJY29tbWl0X2xpc3RfYXBwZW5kKHBhcmVudHNbaV0sICZjb21taXQtPnBhcmVudHMpOworCQkJZnJlZShwYXJlbnRzKTsKKwkJCWZyZWUoY2FuZCk7CisJCQlmcmVlX2RpZmZxdWV1ZXMobnBhcmVudHMsIGRpZmZxdWV1ZXMpOworCQkJLyogTkVFRFNXT1JLIGxlYWtpbmcgbGlrZSBhIHNpZXZlICovCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qCisJICogTm8gc2luZ2xlIHBhcmVudCB0b29rIHRoZSBibGFtZS4gIFdlIGFkZCB0aGUgY2FuZGlkYXRlcworCSAqIGZyb20gdGhlIGFib3ZlIGxvb3AgdG8gdGhlIHBhcmVudHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5wYXJlbnRzOyBpKyspIHsKKwkJYWRkX2xpbmVfcmFuZ2UocmV2LCBwYXJlbnRzW2ldLCBjYW5kW2ldKTsKKwl9CisKKwljbGVhcl9jb21taXRfbGluZV9yYW5nZShyZXYsIGNvbW1pdCk7CisJZnJlZShwYXJlbnRzKTsKKwlmcmVlKGNhbmQpOworCWZyZWVfZGlmZnF1ZXVlcyhucGFyZW50cywgZGlmZnF1ZXVlcyk7CisJcmV0dXJuIDE7CisKKwkvKiBORUVEU1dPUksgZXZpbCBtZXJnZSBkZXRlY3Rpb24gc3R1ZmYgKi8KKwkvKiBORUVEU1dPUksgbGVha2luZyBsaWtlIGEgc2lldmUgKi8KK30KKworc3RhdGljIGludCBwcm9jZXNzX3Jhbmdlc19hcmJpdHJhcnlfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlID0gbG9va3VwX2xpbmVfcmFuZ2UocmV2LCBjb21taXQpOworCWludCBjaGFuZ2VkID0gMDsKKworCWlmIChyYW5nZSkgeworCQlpZiAoIWNvbW1pdC0+cGFyZW50cyB8fCAhY29tbWl0LT5wYXJlbnRzLT5uZXh0KQorCQkJY2hhbmdlZCA9IHByb2Nlc3NfcmFuZ2VzX29yZGluYXJ5X2NvbW1pdChyZXYsIGNvbW1pdCwgcmFuZ2UpOworCQllbHNlCisJCQljaGFuZ2VkID0gcHJvY2Vzc19yYW5nZXNfbWVyZ2VfY29tbWl0KHJldiwgY29tbWl0LCByYW5nZSk7CisJfQorCisJaWYgKCFjaGFuZ2VkKQorCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBUUkVFU0FNRTsKKworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgZW51bSByZXdyaXRlX3Jlc3VsdCBsaW5lX2xvZ19yZXdyaXRlX29uZShzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGNvbW1pdCAqKnBwKQoreworCWZvciAoOzspIHsKKwkJc3RydWN0IGNvbW1pdCAqcCA9ICpwcDsKKwkJaWYgKHAtPnBhcmVudHMgJiYgcC0+cGFyZW50cy0+bmV4dCkKKwkJCXJldHVybiByZXdyaXRlX29uZV9vazsKKwkJaWYgKHAtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQlyZXR1cm4gcmV3cml0ZV9vbmVfb2s7CisJCWlmICghKHAtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSkKKwkJCXJldHVybiByZXdyaXRlX29uZV9vazsKKwkJaWYgKCFwLT5wYXJlbnRzKQorCQkJcmV0dXJuIHJld3JpdGVfb25lX25vcGFyZW50czsKKwkJKnBwID0gcC0+cGFyZW50cy0+aXRlbTsKKwl9Cit9CisKK2ludCBsaW5lX2xvZ19maWx0ZXIoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IHJldi0+Y29tbWl0czsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm91dCA9IE5VTEwsICoqcHAgPSAmb3V0OworCisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICp0b19mcmVlID0gTlVMTDsKKwkJY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJaWYgKHByb2Nlc3NfcmFuZ2VzX2FyYml0cmFyeV9jb21taXQocmV2LCBjb21taXQpKSB7CisJCQkqcHAgPSBsaXN0OworCQkJcHAgPSAmbGlzdC0+bmV4dDsKKwkJfSBlbHNlCisJCQl0b19mcmVlID0gbGlzdDsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJCWZyZWUodG9fZnJlZSk7CisJfQorCSpwcCA9IE5VTEw7CisKKwlmb3IgKGxpc3QgPSBvdXQ7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorCQlyZXdyaXRlX3BhcmVudHMocmV2LCBsaXN0LT5pdGVtLCBsaW5lX2xvZ19yZXdyaXRlX29uZSk7CisKKwlyZXYtPmNvbW1pdHMgPSBvdXQ7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpbmUtbG9nLmggYi9saW5lLWxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTdhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9saW5lLWxvZy5oCkBAIC0wLDAgKzEsNjMgQEAKKyNpZm5kZWYgTElORV9MT0dfSAorI2RlZmluZSBMSU5FX0xPR19ICisKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorCitzdHJ1Y3QgcmV2X2luZm87CitzdHJ1Y3QgY29tbWl0OworCisvKiBBIHJhbmdlIFtzdGFydCxlbmRdLiAgTGluZXMgYXJlIG51bWJlcmVkIHN0YXJ0aW5nIGF0IDAsIGFuZCB0aGUKKyAqIHJhbmdlcyBpbmNsdWRlIHN0YXJ0IGJ1dCBleGNsdWRlIGVuZC4gKi8KK3N0cnVjdCByYW5nZSB7CisJbG9uZyBzdGFydCwgZW5kOworfTsKKworLyogQSBzZXQgb2YgcmFuZ2VzLiAgVGhlIHJhbmdlcyBtdXN0IGFsd2F5cyBiZSBkaXNqb2ludCBhbmQgc29ydGVkLiAqLworc3RydWN0IHJhbmdlX3NldCB7CisJdW5zaWduZWQgaW50IGFsbG9jLCBucjsKKwlzdHJ1Y3QgcmFuZ2UgKnJhbmdlczsKK307CisKKy8qIEEgZGlmZiwgZW5jb2RlZCBhcyB0aGUgc2V0IG9mIHByZS0gYW5kIHBvc3QtaW1hZ2UgcmFuZ2VzIHdoZXJlIHRoZQorICogZmlsZXMgZGlmZmVyLiBBIHBhaXIgb2YgcmFuZ2VzIGNvcnJlc3BvbmRzIHRvIGEgaHVuay4gKi8KK3N0cnVjdCBkaWZmX3JhbmdlcyB7CisJc3RydWN0IHJhbmdlX3NldCBwYXJlbnQ7CisJc3RydWN0IHJhbmdlX3NldCB0YXJnZXQ7Cit9OworCit2b2lkIHJhbmdlX3NldF9pbml0KHN0cnVjdCByYW5nZV9zZXQgKiwgc2l6ZV90IHByZWFsbG9jKTsKK3ZvaWQgcmFuZ2Vfc2V0X3JlbGVhc2Uoc3RydWN0IHJhbmdlX3NldCAqKTsKKy8qIFJhbmdlIGluY2x1ZGVzIHN0YXJ0OyBleGNsdWRlcyBlbmQgKi8KK3ZvaWQgcmFuZ2Vfc2V0X2FwcGVuZF91bnNhZmUoc3RydWN0IHJhbmdlX3NldCAqLCBsb25nIHN0YXJ0LCBsb25nIGVuZCk7CisvKiBOZXcgcmFuZ2UgbXVzdCBiZWdpbiBhdCBvciBhZnRlciBlbmQgb2YgbGFzdCBhZGRlZCByYW5nZSAqLwordm9pZCByYW5nZV9zZXRfYXBwZW5kKHN0cnVjdCByYW5nZV9zZXQgKiwgbG9uZyBzdGFydCwgbG9uZyBlbmQpOworLyoKKyAqIEluLXBsYWNlIHBhc3Mgb2Ygc29ydGluZyBhbmQgbWVyZ2luZyB0aGUgcmFuZ2VzIGluIHRoZSByYW5nZSBzZXQsCisgKiB0byBzb3J0IGFuZCBtYWtlIHRoZSByYW5nZXMgZGlzam9pbnQuCisgKi8KK3ZvaWQgc29ydF9hbmRfbWVyZ2VfcmFuZ2Vfc2V0KHN0cnVjdCByYW5nZV9zZXQgKik7CisKKy8qIExpbmtlZCBsaXN0IG9mIGludGVyZXN0aW5nIGZpbGVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIHJhbmdlcy4gIFRoZQorICogbGlzdCBtdXN0IGJlIGtlcHQgc29ydGVkIGJ5IHBhdGguCisgKgorICogRm9yIHNpbXBsaWNpdHksIGV2ZW4gdGhvdWdoIHRoaXMgaXMgaGlnaGx5IHJlZHVuZGFudCwgZWFjaAorICogbGluZV9sb2dfZGF0YSBvd25zIGl0cyAncGF0aCcuCisgKi8KK3N0cnVjdCBsaW5lX2xvZ19kYXRhIHsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqbmV4dDsKKwljaGFyICpwYXRoOworCWNoYXIgc3RhdHVzOworCXN0cnVjdCByYW5nZV9zZXQgcmFuZ2VzOworCWludCBhcmdfYWxsb2MsIGFyZ19ucjsKKwljb25zdCBjaGFyICoqYXJnczsKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcjsKKwlzdHJ1Y3QgZGlmZl9yYW5nZXMgZGlmZjsKK307CisKK3ZvaWQgbGluZV9sb2dfaW5pdChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmFyZ3MpOworCitpbnQgbGluZV9sb2dfZmlsdGVyKHN0cnVjdCByZXZfaW5mbyAqcmV2KTsKKworaW50IGxpbmVfbG9nX3ByaW50KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworCisjZW5kaWYgLyogTElORV9MT0dfSCAqLwpkaWZmIC0tZ2l0IGEvbGluZS1yYW5nZS5jIGIvbGluZS1yYW5nZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNTA1ODMKLS0tIC9kZXYvbnVsbAorKysgYi9saW5lLXJhbmdlLmMKQEAgLTAsMCArMSwyOTUgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJsaW5lLXJhbmdlLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKworLyoKKyAqIFBhcnNlIG9uZSBpdGVtIGluIHRoZSAtTCBvcHRpb24KKyAqCisgKiAnYmVnaW4nIGlzIGFwcGxpY2FibGUgb25seSB0byByZWxhdGl2ZSByYW5nZSBhbmNob3JzLiBBYnNvbHV0ZSBhbmNob3JzCisgKiBpZ25vcmUgdGhpcyB2YWx1ZS4KKyAqCisgKiBXaGVuIHBhcnNpbmcgIi1MIEEsQiIsIHBhcnNlX2xvYygpIGlzIGNhbGxlZCBvbmNlIGZvciBBIGFuZCBvbmNlIGZvciBCLgorICoKKyAqIFdoZW4gcGFyc2luZyBBLCAnYmVnaW4nIG11c3QgYmUgYSBuZWdhdGl2ZSBudW1iZXIsIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZgorICogd2hpY2ggaXMgdGhlIGxpbmUgYXQgd2hpY2ggcmVsYXRpdmUgc3RhcnQtb2YtcmFuZ2UgYW5jaG9ycyBzaG91bGQgYmUKKyAqIGJhc2VkLiBCZWdpbm5pbmcgb2YgZmlsZSBpcyByZXByZXNlbnRlZCBieSAtMS4KKyAqCisgKiBXaGVuIHBhcnNpbmcgQiwgJ2JlZ2luJyBtdXN0IGJlIHRoZSBwb3NpdGl2ZSBsaW5lIG51bWJlciBpbW1lZGlhdGVseQorICogZm9sbG93aW5nIHRoZSBsaW5lIGNvbXB1dGVkIGZvciAnQScuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpwYXJzZV9sb2MoY29uc3QgY2hhciAqc3BlYywgbnRoX2xpbmVfZm5fdCBudGhfbGluZSwKKwkJCSAgICAgdm9pZCAqZGF0YSwgbG9uZyBsaW5lcywgbG9uZyBiZWdpbiwgbG9uZyAqcmV0KQoreworCWNoYXIgKnRlcm07CisJY29uc3QgY2hhciAqbGluZTsKKwlsb25nIG51bTsKKwlpbnQgcmVnX2Vycm9yOworCXJlZ2V4X3QgcmVnZXhwOworCXJlZ21hdGNoX3QgbWF0Y2hbMV07CisKKwkvKiBBbGxvdyAiLUwgPHNvbWV0aGluZz4sKzIwIiB0byBtZWFuIHN0YXJ0aW5nIGF0IDxzb21ldGhpbmc+CisJICogZm9yIDIwIGxpbmVzLCBvciAiLUwgPHNvbWV0aGluZz4sLTUiIGZvciA1IGxpbmVzIGVuZGluZyBhdAorCSAqIDxzb21ldGhpbmc+LgorCSAqLworCWlmICgxIDw9IGJlZ2luICYmIChzcGVjWzBdID09ICcrJyB8fCBzcGVjWzBdID09ICctJykpIHsKKwkJbnVtID0gc3RydG9sKHNwZWMgKyAxLCAmdGVybSwgMTApOworCQlpZiAodGVybSAhPSBzcGVjICsgMSkgeworCQkJaWYgKCFyZXQpCisJCQkJcmV0dXJuIHRlcm07CisJCQlpZiAobnVtID09IDApCisJCQkJZGllKCItTCBpbnZhbGlkIGVtcHR5IHJhbmdlIik7CisJCQlpZiAoc3BlY1swXSA9PSAnLScpCisJCQkJbnVtID0gMCAtIG51bTsKKwkJCWlmICgwIDwgbnVtKQorCQkJCSpyZXQgPSBiZWdpbiArIG51bSAtIDI7CisJCQllbHNlIGlmICghbnVtKQorCQkJCSpyZXQgPSBiZWdpbjsKKwkJCWVsc2UKKwkJCQkqcmV0ID0gYmVnaW4gKyBudW0gPiAwID8gYmVnaW4gKyBudW0gOiAxOworCQkJcmV0dXJuIHRlcm07CisJCX0KKwkJcmV0dXJuIHNwZWM7CisJfQorCW51bSA9IHN0cnRvbChzcGVjLCAmdGVybSwgMTApOworCWlmICh0ZXJtICE9IHNwZWMpIHsKKwkJaWYgKHJldCkgeworCQkJaWYgKG51bSA8PSAwKQorCQkJCWRpZSgiLUwgaW52YWxpZCBsaW5lIG51bWJlcjogJWxkIiwgbnVtKTsKKwkJCSpyZXQgPSBudW07CisJCX0KKwkJcmV0dXJuIHRlcm07CisJfQorCisJaWYgKGJlZ2luIDwgMCkgeworCQlpZiAoc3BlY1swXSAhPSAnXicpCisJCQliZWdpbiA9IC1iZWdpbjsKKwkJZWxzZSB7CisJCQliZWdpbiA9IDE7CisJCQlzcGVjKys7CisJCX0KKwl9CisKKwlpZiAoc3BlY1swXSAhPSAnLycpCisJCXJldHVybiBzcGVjOworCisJLyogaXQgY291bGQgYmUgYSByZWdleHAgb2YgZm9ybSAvLi4uLyAqLworCWZvciAodGVybSA9IChjaGFyICopIHNwZWMgKyAxOyAqdGVybSAmJiAqdGVybSAhPSAnLyc7IHRlcm0rKykgeworCQlpZiAoKnRlcm0gPT0gJ1xcJykKKwkJCXRlcm0rKzsKKwl9CisJaWYgKCp0ZXJtICE9ICcvJykKKwkJcmV0dXJuIHNwZWM7CisKKwkvKiBpbiB0aGUgc2Nhbi1vbmx5IGNhc2Ugd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHRoZSByZWdleCAqLworCWlmICghcmV0KQorCQlyZXR1cm4gdGVybSsxOworCisJLyogdHJ5IFtzcGVjKzEgLi4gdGVybS0xXSBhcyByZWdleHAgKi8KKwkqdGVybSA9IDA7CisJYmVnaW4tLTsgLyogaW5wdXQgaXMgaW4gaHVtYW4gdGVybXMgKi8KKwlsaW5lID0gbnRoX2xpbmUoZGF0YSwgYmVnaW4pOworCisJaWYgKCEocmVnX2Vycm9yID0gcmVnY29tcCgmcmVnZXhwLCBzcGVjICsgMSwgUkVHX05FV0xJTkUpKSAmJgorCSAgICAhKHJlZ19lcnJvciA9IHJlZ2V4ZWMoJnJlZ2V4cCwgbGluZSwgMSwgbWF0Y2gsIDApKSkgeworCQljb25zdCBjaGFyICpjcCA9IGxpbmUgKyBtYXRjaFswXS5ybV9zbzsKKwkJY29uc3QgY2hhciAqbmxpbmU7CisKKwkJd2hpbGUgKGJlZ2luKysgPCBsaW5lcykgeworCQkJbmxpbmUgPSBudGhfbGluZShkYXRhLCBiZWdpbik7CisJCQlpZiAobGluZSA8PSBjcCAmJiBjcCA8IG5saW5lKQorCQkJCWJyZWFrOworCQkJbGluZSA9IG5saW5lOworCQl9CisJCSpyZXQgPSBiZWdpbjsKKwkJcmVnZnJlZSgmcmVnZXhwKTsKKwkJKnRlcm0rKyA9ICcvJzsKKwkJcmV0dXJuIHRlcm07CisJfQorCWVsc2UgeworCQljaGFyIGVycmJ1ZlsxMDI0XTsKKwkJcmVnZXJyb3IocmVnX2Vycm9yLCAmcmVnZXhwLCBlcnJidWYsIDEwMjQpOworCQlkaWUoIi1MIHBhcmFtZXRlciAnJXMnIHN0YXJ0aW5nIGF0IGxpbmUgJWxkOiAlcyIsCisJCSAgICBzcGVjICsgMSwgYmVnaW4gKyAxLCBlcnJidWYpOworCX0KK30KKworc3RhdGljIGludCBtYXRjaF9mdW5jbmFtZSh4ZGVtaXRjb25mX3QgKnhlY2ZnLCBjb25zdCBjaGFyICpib2wsIGNvbnN0IGNoYXIgKmVvbCkKK3sKKwlpZiAoeGVjZmcpIHsKKwkJY2hhciBidWZbMV07CisJCXJldHVybiB4ZWNmZy0+ZmluZF9mdW5jKGJvbCwgZW9sIC0gYm9sLCBidWYsIDEsCisJCQkJCXhlY2ZnLT5maW5kX2Z1bmNfcHJpdikgPj0gMDsKKwl9CisKKwlpZiAoYm9sID09IGVvbCkKKwkJcmV0dXJuIDA7CisJaWYgKGlzYWxwaGEoKmJvbCkgfHwgKmJvbCA9PSAnXycgfHwgKmJvbCA9PSAnJCcpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZmluZF9mdW5jbmFtZV9tYXRjaGluZ19yZWdleHAoeGRlbWl0Y29uZl90ICp4ZWNmZywgY29uc3QgY2hhciAqc3RhcnQsCisJCQkJCQkgcmVnZXhfdCAqcmVnZXhwKQoreworCWludCByZWdfZXJyb3I7CisJcmVnbWF0Y2hfdCBtYXRjaFsxXTsKKwl3aGlsZSAoMSkgeworCQljb25zdCBjaGFyICpib2wsICplb2w7CisJCXJlZ19lcnJvciA9IHJlZ2V4ZWMocmVnZXhwLCBzdGFydCwgMSwgbWF0Y2gsIDApOworCQlpZiAocmVnX2Vycm9yID09IFJFR19OT01BVENIKQorCQkJcmV0dXJuIE5VTEw7CisJCWVsc2UgaWYgKHJlZ19lcnJvcikgeworCQkJY2hhciBlcnJidWZbMTAyNF07CisJCQlyZWdlcnJvcihyZWdfZXJyb3IsIHJlZ2V4cCwgZXJyYnVmLCAxMDI0KTsKKwkJCWRpZSgiLUwgcGFyYW1ldGVyOiByZWdleGVjKCkgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CisJCX0KKwkJLyogZGV0ZXJtaW5lIGV4dGVudCBvZiBsaW5lIG1hdGNoZWQgKi8KKwkJYm9sID0gc3RhcnQrbWF0Y2hbMF0ucm1fc287CisJCWVvbCA9IHN0YXJ0K21hdGNoWzBdLnJtX2VvOworCQl3aGlsZSAoYm9sID4gc3RhcnQgJiYgKmJvbCAhPSAnXG4nKQorCQkJYm9sLS07CisJCWlmICgqYm9sID09ICdcbicpCisJCQlib2wrKzsKKwkJd2hpbGUgKCplb2wgJiYgKmVvbCAhPSAnXG4nKQorCQkJZW9sKys7CisJCWlmICgqZW9sID09ICdcbicpCisJCQllb2wrKzsKKwkJLyogaXMgaXQgYSBmdW5jbmFtZSBsaW5lPyAqLworCQlpZiAobWF0Y2hfZnVuY25hbWUoeGVjZmcsIChjaGFyKikgYm9sLCAoY2hhciopIGVvbCkpCisJCQlyZXR1cm4gYm9sOworCQlzdGFydCA9IGVvbDsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYXJzZV9yYW5nZV9mdW5jbmFtZSgKKwljb25zdCBjaGFyICphcmcsIG50aF9saW5lX2ZuX3QgbnRoX2xpbmVfY2IsCisJdm9pZCAqY2JfZGF0YSwgbG9uZyBsaW5lcywgbG9uZyBhbmNob3IsIGxvbmcgKmJlZ2luLCBsb25nICplbmQsCisJY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJY2hhciAqcGF0dGVybjsKKwljb25zdCBjaGFyICp0ZXJtOworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRydjsKKwl4ZGVtaXRjb25mX3QgKnhlY2ZnID0gTlVMTDsKKwljb25zdCBjaGFyICpzdGFydDsKKwljb25zdCBjaGFyICpwOworCWludCByZWdfZXJyb3I7CisJcmVnZXhfdCByZWdleHA7CisKKwlpZiAoKmFyZyA9PSAnXicpIHsKKwkJYW5jaG9yID0gMTsKKwkJYXJnKys7CisJfQorCisJYXNzZXJ0KCphcmcgPT0gJzonKTsKKwl0ZXJtID0gYXJnKzE7CisJd2hpbGUgKCp0ZXJtICYmICp0ZXJtICE9ICc6JykgeworCQlpZiAoKnRlcm0gPT0gJ1xcJyAmJiAqKHRlcm0rMSkpCisJCQl0ZXJtKys7CisJCXRlcm0rKzsKKwl9CisJaWYgKHRlcm0gPT0gYXJnKzEpCisJCXJldHVybiBOVUxMOworCWlmICghYmVnaW4pIC8qIHNraXBfcmFuZ2VfYXJnIGNhc2UgKi8KKwkJcmV0dXJuIHRlcm07CisKKwlwYXR0ZXJuID0geHN0cm5kdXAoYXJnKzEsIHRlcm0tKGFyZysxKSk7CisKKwlhbmNob3ItLTsgLyogaW5wdXQgaXMgaW4gaHVtYW4gdGVybXMgKi8KKwlzdGFydCA9IG50aF9saW5lX2NiKGNiX2RhdGEsIGFuY2hvcik7CisKKwlkcnYgPSB1c2VyZGlmZl9maW5kX2J5X3BhdGgoaXN0YXRlLCBwYXRoKTsKKwlpZiAoZHJ2ICYmIGRydi0+ZnVuY25hbWUucGF0dGVybikgeworCQljb25zdCBzdHJ1Y3QgdXNlcmRpZmZfZnVuY25hbWUgKnBlID0gJmRydi0+ZnVuY25hbWU7CisJCXhlY2ZnID0geGNhbGxvYygxLCBzaXplb2YoKnhlY2ZnKSk7CisJCXhkaWZmX3NldF9maW5kX2Z1bmMoeGVjZmcsIHBlLT5wYXR0ZXJuLCBwZS0+Y2ZsYWdzKTsKKwl9CisKKwlyZWdfZXJyb3IgPSByZWdjb21wKCZyZWdleHAsIHBhdHRlcm4sIFJFR19ORVdMSU5FKTsKKwlpZiAocmVnX2Vycm9yKSB7CisJCWNoYXIgZXJyYnVmWzEwMjRdOworCQlyZWdlcnJvcihyZWdfZXJyb3IsICZyZWdleHAsIGVycmJ1ZiwgMTAyNCk7CisJCWRpZSgiLUwgcGFyYW1ldGVyICclcyc6ICVzIiwgcGF0dGVybiwgZXJyYnVmKTsKKwl9CisKKwlwID0gZmluZF9mdW5jbmFtZV9tYXRjaGluZ19yZWdleHAoeGVjZmcsIChjaGFyKikgc3RhcnQsICZyZWdleHApOworCWlmICghcCkKKwkJZGllKCItTCBwYXJhbWV0ZXIgJyVzJyBzdGFydGluZyBhdCBsaW5lICVsZDogbm8gbWF0Y2giLAorCQkgICAgcGF0dGVybiwgYW5jaG9yICsgMSk7CisJKmJlZ2luID0gMDsKKwl3aGlsZSAocCA+IG50aF9saW5lX2NiKGNiX2RhdGEsICpiZWdpbikpCisJCSgqYmVnaW4pKys7CisKKwlpZiAoKmJlZ2luID49IGxpbmVzKQorCQlkaWUoIi1MIHBhcmFtZXRlciAnJXMnIG1hdGNoZXMgYXQgRU9GIiwgcGF0dGVybik7CisKKwkqZW5kID0gKmJlZ2luKzE7CisJd2hpbGUgKCplbmQgPCBsaW5lcykgeworCQljb25zdCBjaGFyICpib2wgPSBudGhfbGluZV9jYihjYl9kYXRhLCAqZW5kKTsKKwkJY29uc3QgY2hhciAqZW9sID0gbnRoX2xpbmVfY2IoY2JfZGF0YSwgKmVuZCsxKTsKKwkJaWYgKG1hdGNoX2Z1bmNuYW1lKHhlY2ZnLCBib2wsIGVvbCkpCisJCQlicmVhazsKKwkJKCplbmQpKys7CisJfQorCisJcmVnZnJlZSgmcmVnZXhwKTsKKwlmcmVlKHhlY2ZnKTsKKwlmcmVlKHBhdHRlcm4pOworCisJLyogY29tcGVuc2F0ZSBmb3IgMS1iYXNlZCBudW1iZXJpbmcgKi8KKwkoKmJlZ2luKSsrOworCisJcmV0dXJuIHRlcm07Cit9CisKK2ludCBwYXJzZV9yYW5nZV9hcmcoY29uc3QgY2hhciAqYXJnLCBudGhfbGluZV9mbl90IG50aF9saW5lX2NiLAorCQkgICAgdm9pZCAqY2JfZGF0YSwgbG9uZyBsaW5lcywgbG9uZyBhbmNob3IsCisJCSAgICBsb25nICpiZWdpbiwgbG9uZyAqZW5kLAorCQkgICAgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJKmJlZ2luID0gKmVuZCA9IDA7CisKKwlpZiAoYW5jaG9yIDwgMSkKKwkJYW5jaG9yID0gMTsKKwlpZiAoYW5jaG9yID4gbGluZXMpCisJCWFuY2hvciA9IGxpbmVzICsgMTsKKworCWlmICgqYXJnID09ICc6JyB8fCAoKmFyZyA9PSAnXicgJiYgKihhcmcgKyAxKSA9PSAnOicpKSB7CisJCWFyZyA9IHBhcnNlX3JhbmdlX2Z1bmNuYW1lKGFyZywgbnRoX2xpbmVfY2IsIGNiX2RhdGEsCisJCQkJCSAgIGxpbmVzLCBhbmNob3IsIGJlZ2luLCBlbmQsCisJCQkJCSAgIHBhdGgsIGlzdGF0ZSk7CisJCWlmICghYXJnIHx8ICphcmcpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKworCWFyZyA9IHBhcnNlX2xvYyhhcmcsIG50aF9saW5lX2NiLCBjYl9kYXRhLCBsaW5lcywgLWFuY2hvciwgYmVnaW4pOworCisJaWYgKCphcmcgPT0gJywnKQorCQlhcmcgPSBwYXJzZV9sb2MoYXJnICsgMSwgbnRoX2xpbmVfY2IsIGNiX2RhdGEsIGxpbmVzLCAqYmVnaW4gKyAxLCBlbmQpOworCisJaWYgKCphcmcpCisJCXJldHVybiAtMTsKKworCWlmICgqYmVnaW4gJiYgKmVuZCAmJiAqZW5kIDwgKmJlZ2luKSB7CisJCVNXQVAoKmVuZCwgKmJlZ2luKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqc2tpcF9yYW5nZV9hcmcoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpZiAoKmFyZyA9PSAnOicgfHwgKCphcmcgPT0gJ14nICYmICooYXJnICsgMSkgPT0gJzonKSkKKwkJcmV0dXJuIHBhcnNlX3JhbmdlX2Z1bmNuYW1lKGFyZywgTlVMTCwgTlVMTCwKKwkJCQkJICAgIDAsIDAsIE5VTEwsIE5VTEwsCisJCQkJCSAgICBOVUxMLCBpc3RhdGUpOworCisJYXJnID0gcGFyc2VfbG9jKGFyZywgTlVMTCwgTlVMTCwgMCwgLTEsIE5VTEwpOworCisJaWYgKCphcmcgPT0gJywnKQorCQlhcmcgPSBwYXJzZV9sb2MoYXJnKzEsIE5VTEwsIE5VTEwsIDAsIDAsIE5VTEwpOworCisJcmV0dXJuIGFyZzsKK30KZGlmZiAtLWdpdCBhL2xpbmUtcmFuZ2UuaCBiL2xpbmUtcmFuZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjliZjdjCi0tLSAvZGV2L251bGwKKysrIGIvbGluZS1yYW5nZS5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgTElORV9SQU5HRV9ICisjZGVmaW5lIExJTkVfUkFOR0VfSAorCitzdHJ1Y3QgaW5kZXhfc3RhdGU7CisKKy8qCisgKiBQYXJzZSBvbmUgaXRlbSBpbiBhbiAtTCBiZWdpbixlbmQgb3B0aW9uIHcuci50LiB0aGUgbm90aW9uYWwgZmlsZQorICogb2JqZWN0ICdjYl9kYXRhJyBjb25zaXN0aW5nIG9mICdsaW5lcycgbGluZXMuCisgKgorICogVGhlICdudGhfbGluZV9jYicgY2FsbGJhY2sgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHN0YXJ0IG9mIHRoZQorICogbGluZSAnbG5vJyBpbnNpZGUgdGhlICdjYl9kYXRhJy4gIFRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gYWxyZWFkeQorICogaGF2ZSBhIHN1aXRhYmxlIG1hcCBhdCBoYW5kIHRvIG1ha2UgdGhpcyBhIGNvbnN0YW50LXRpbWUgbG9va3VwLgorICoKKyAqICdhbmNob3InIGlzIHRoZSAxLWJhc2VkIGxpbmUgYXQgd2hpY2ggcmVsYXRpdmUgcmFuZ2Ugc3BlY2lmaWNhdGlvbnMKKyAqIHNob3VsZCBiZSBhbmNob3JlZC4gQWJzb2x1dGUgcmFuZ2VzIGFyZSB1bmFmZmVjdGVkIGJ5IHRoaXMgdmFsdWUuCisgKgorICogUmV0dXJucyAwIGluIGNhc2Ugb2Ygc3VjY2VzcyBhbmQgLTEgaWYgdGhlcmUgd2FzIGFuIGVycm9yLiAgVGhlCisgKiBhY3R1YWwgcmFuZ2UgaXMgc3RvcmVkIGluICpiZWdpbiBhbmQgKmVuZC4gIFRoZSBjb3VudGluZyBzdGFydHMKKyAqIGF0IDEhICBJbiBjYXNlIG9mIGVycm9yLCB0aGUgY2FsbGVyIHNob3VsZCBzaG93IHVzYWdlIG1lc3NhZ2UuCisgKi8KKwordHlwZWRlZiBjb25zdCBjaGFyICooKm50aF9saW5lX2ZuX3QpKHZvaWQgKmRhdGEsIGxvbmcgbG5vKTsKKworaW50IHBhcnNlX3JhbmdlX2FyZyhjb25zdCBjaGFyICphcmcsCisJCSAgICBudGhfbGluZV9mbl90IG50aF9saW5lX2NiLAorCQkgICAgdm9pZCAqY2JfZGF0YSwgbG9uZyBsaW5lcywgbG9uZyBhbmNob3IsCisJCSAgICBsb25nICpiZWdpbiwgbG9uZyAqZW5kLAorCQkgICAgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOworCisvKgorICogU2NhbiBwYXN0IGEgcmFuZ2UgYXJndW1lbnQgdGhhdCBjb3VsZCBiZSBwYXJzZWQgYnkKKyAqICdwYXJzZV9yYW5nZV9hcmcnLCB0byBoZWxwIHRoZSBjYWxsZXIgZGV0ZXJtaW5lIHRoZSBzdGFydCBvZiB0aGUKKyAqIGZpbGVuYW1lIGluICctTCBuLG06ZmlsZScgc3ludGF4LgorICoKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlICduLG0nIHBhcnQsIG9yCisgKiBOVUxMIGluIGNhc2UgdGhlIGFyZ3VtZW50IGlzIG9idmlvdXNseSBtYWxmb3JtZWQuCisgKi8KKworY29uc3QgY2hhciAqc2tpcF9yYW5nZV9hcmcoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CisKKyNlbmRpZiAvKiBMSU5FX1JBTkdFX0ggKi8KZGlmZiAtLWdpdCBhL2xpbmVhci1hc3NpZ25tZW50LmMgYi9saW5lYXItYXNzaWdubWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZmZjMDkKLS0tIC9kZXYvbnVsbAorKysgYi9saW5lYXItYXNzaWdubWVudC5jCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogQmFzZWQgb246IEpvbmtlciwgUi4sICYgVm9sZ2VuYW50LCBBLiAoMTk4NykuIDxpPkEgc2hvcnRlc3QgYXVnbWVudGluZyBwYXRoCisgKiBhbGdvcml0aG0gZm9yIGRlbnNlIGFuZCBzcGFyc2UgbGluZWFyIGFzc2lnbm1lbnQgcHJvYmxlbXM8L2k+LiBDb21wdXRpbmcsCisgKiAzOCg0KSwgMzI1LTM0MC4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibGluZWFyLWFzc2lnbm1lbnQuaCIKKworI2RlZmluZSBDT1NUKGNvbHVtbiwgcm93KSBjb3N0Wyhjb2x1bW4pICsgY29sdW1uX2NvdW50ICogKHJvdyldCisKKy8qCisgKiBUaGUgcGFyYW1ldGVyIGBjb3N0YCBpcyB0aGUgY29zdCBtYXRyaXg6IHRoZSBjb3N0IHRvIGFzc2lnbiBjb2x1bW4gaiB0byByb3cKKyAqIGkgaXMgYGNvc3RbaiArIGNvbHVtbl9jb3VudCAqIGldLgorICovCit2b2lkIGNvbXB1dGVfYXNzaWdubWVudChpbnQgY29sdW1uX2NvdW50LCBpbnQgcm93X2NvdW50LCBpbnQgKmNvc3QsCisJCQlpbnQgKmNvbHVtbjJyb3csIGludCAqcm93MmNvbHVtbikKK3sKKwlpbnQgKnYsICpkOworCWludCAqZnJlZV9yb3csIGZyZWVfY291bnQgPSAwLCBzYXZlZF9mcmVlX2NvdW50LCAqcHJlZCwgKmNvbDsKKwlpbnQgaSwgaiwgcGhhc2U7CisKKwlpZiAoY29sdW1uX2NvdW50IDwgMikgeworCQltZW1zZXQoY29sdW1uMnJvdywgMCwgc2l6ZW9mKGludCkgKiBjb2x1bW5fY291bnQpOworCQltZW1zZXQocm93MmNvbHVtbiwgMCwgc2l6ZW9mKGludCkgKiByb3dfY291bnQpOworCQlyZXR1cm47CisJfQorCisJbWVtc2V0KGNvbHVtbjJyb3csIC0xLCBzaXplb2YoaW50KSAqIGNvbHVtbl9jb3VudCk7CisJbWVtc2V0KHJvdzJjb2x1bW4sIC0xLCBzaXplb2YoaW50KSAqIHJvd19jb3VudCk7CisJQUxMT0NfQVJSQVkodiwgY29sdW1uX2NvdW50KTsKKworCS8qIGNvbHVtbiByZWR1Y3Rpb24gKi8KKwlmb3IgKGogPSBjb2x1bW5fY291bnQgLSAxOyBqID49IDA7IGotLSkgeworCQlpbnQgaTEgPSAwOworCisJCWZvciAoaSA9IDE7IGkgPCByb3dfY291bnQ7IGkrKykKKwkJCWlmIChDT1NUKGosIGkxKSA+IENPU1QoaiwgaSkpCisJCQkJaTEgPSBpOworCQl2W2pdID0gQ09TVChqLCBpMSk7CisJCWlmIChyb3cyY29sdW1uW2kxXSA9PSAtMSkgeworCQkJLyogcm93IGkxIHVuYXNzaWduZWQgKi8KKwkJCXJvdzJjb2x1bW5baTFdID0gajsKKwkJCWNvbHVtbjJyb3dbal0gPSBpMTsKKwkJfSBlbHNlIHsKKwkJCWlmIChyb3cyY29sdW1uW2kxXSA+PSAwKQorCQkJCXJvdzJjb2x1bW5baTFdID0gLTIgLSByb3cyY29sdW1uW2kxXTsKKwkJCWNvbHVtbjJyb3dbal0gPSAtMTsKKwkJfQorCX0KKworCS8qIHJlZHVjdGlvbiB0cmFuc2ZlciAqLworCUFMTE9DX0FSUkFZKGZyZWVfcm93LCByb3dfY291bnQpOworCWZvciAoaSA9IDA7IGkgPCByb3dfY291bnQ7IGkrKykgeworCQlpbnQgajEgPSByb3cyY29sdW1uW2ldOworCQlpZiAoajEgPT0gLTEpCisJCQlmcmVlX3Jvd1tmcmVlX2NvdW50KytdID0gaTsKKwkJZWxzZSBpZiAoajEgPCAtMSkKKwkJCXJvdzJjb2x1bW5baV0gPSAtMiAtIGoxOworCQllbHNlIHsKKwkJCWludCBtaW4gPSBDT1NUKCFqMSwgaSkgLSB2WyFqMV07CisJCQlmb3IgKGogPSAxOyBqIDwgY29sdW1uX2NvdW50OyBqKyspCisJCQkJaWYgKGogIT0gajEgJiYgbWluID4gQ09TVChqLCBpKSAtIHZbal0pCisJCQkJCW1pbiA9IENPU1QoaiwgaSkgLSB2W2pdOworCQkJdltqMV0gLT0gbWluOworCQl9CisJfQorCisJaWYgKGZyZWVfY291bnQgPT0KKwkgICAgKGNvbHVtbl9jb3VudCA8IHJvd19jb3VudCA/IHJvd19jb3VudCAtIGNvbHVtbl9jb3VudCA6IDApKSB7CisJCWZyZWUodik7CisJCWZyZWUoZnJlZV9yb3cpOworCQlyZXR1cm47CisJfQorCisJLyogYXVnbWVudGluZyByb3cgcmVkdWN0aW9uICovCisJZm9yIChwaGFzZSA9IDA7IHBoYXNlIDwgMjsgcGhhc2UrKykgeworCQlpbnQgayA9IDA7CisKKwkJc2F2ZWRfZnJlZV9jb3VudCA9IGZyZWVfY291bnQ7CisJCWZyZWVfY291bnQgPSAwOworCQl3aGlsZSAoayA8IHNhdmVkX2ZyZWVfY291bnQpIHsKKwkJCWludCB1MSwgdTI7CisJCQlpbnQgajEgPSAwLCBqMiwgaTA7CisKKwkJCWkgPSBmcmVlX3Jvd1trKytdOworCQkJdTEgPSBDT1NUKGoxLCBpKSAtIHZbajFdOworCQkJajIgPSAtMTsKKwkJCXUyID0gSU5UX01BWDsKKwkJCWZvciAoaiA9IDE7IGogPCBjb2x1bW5fY291bnQ7IGorKykgeworCQkJCWludCBjID0gQ09TVChqLCBpKSAtIHZbal07CisJCQkJaWYgKHUyID4gYykgeworCQkJCQlpZiAodTEgPCBjKSB7CisJCQkJCQl1MiA9IGM7CisJCQkJCQlqMiA9IGo7CisJCQkJCX0gZWxzZSB7CisJCQkJCQl1MiA9IHUxOworCQkJCQkJdTEgPSBjOworCQkJCQkJajIgPSBqMTsKKwkJCQkJCWoxID0gajsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWlmIChqMiA8IDApIHsKKwkJCQlqMiA9IGoxOworCQkJCXUyID0gdTE7CisJCQl9CisKKwkJCWkwID0gY29sdW1uMnJvd1tqMV07CisJCQlpZiAodTEgPCB1MikKKwkJCQl2W2oxXSAtPSB1MiAtIHUxOworCQkJZWxzZSBpZiAoaTAgPj0gMCkgeworCQkJCWoxID0gajI7CisJCQkJaTAgPSBjb2x1bW4ycm93W2oxXTsKKwkJCX0KKworCQkJaWYgKGkwID49IDApIHsKKwkJCQlpZiAodTEgPCB1MikKKwkJCQkJZnJlZV9yb3dbLS1rXSA9IGkwOworCQkJCWVsc2UKKwkJCQkJZnJlZV9yb3dbZnJlZV9jb3VudCsrXSA9IGkwOworCQkJfQorCQkJcm93MmNvbHVtbltpXSA9IGoxOworCQkJY29sdW1uMnJvd1tqMV0gPSBpOworCQl9CisJfQorCisJLyogYXVnbWVudGF0aW9uICovCisJc2F2ZWRfZnJlZV9jb3VudCA9IGZyZWVfY291bnQ7CisJQUxMT0NfQVJSQVkoZCwgY29sdW1uX2NvdW50KTsKKwlBTExPQ19BUlJBWShwcmVkLCBjb2x1bW5fY291bnQpOworCUFMTE9DX0FSUkFZKGNvbCwgY29sdW1uX2NvdW50KTsKKwlmb3IgKGZyZWVfY291bnQgPSAwOyBmcmVlX2NvdW50IDwgc2F2ZWRfZnJlZV9jb3VudDsgZnJlZV9jb3VudCsrKSB7CisJCWludCBpMSA9IGZyZWVfcm93W2ZyZWVfY291bnRdLCBsb3cgPSAwLCB1cCA9IDAsIGxhc3QsIGs7CisJCWludCBtaW4sIGMsIHUxOworCisJCWZvciAoaiA9IDA7IGogPCBjb2x1bW5fY291bnQ7IGorKykgeworCQkJZFtqXSA9IENPU1QoaiwgaTEpIC0gdltqXTsKKwkJCXByZWRbal0gPSBpMTsKKwkJCWNvbFtqXSA9IGo7CisJCX0KKworCQlqID0gLTE7CisJCWRvIHsKKwkJCWxhc3QgPSBsb3c7CisJCQltaW4gPSBkW2NvbFt1cCsrXV07CisJCQlmb3IgKGsgPSB1cDsgayA8IGNvbHVtbl9jb3VudDsgaysrKSB7CisJCQkJaiA9IGNvbFtrXTsKKwkJCQljID0gZFtqXTsKKwkJCQlpZiAoYyA8PSBtaW4pIHsKKwkJCQkJaWYgKGMgPCBtaW4pIHsKKwkJCQkJCXVwID0gbG93OworCQkJCQkJbWluID0gYzsKKwkJCQkJfQorCQkJCQljb2xba10gPSBjb2xbdXBdOworCQkJCQljb2xbdXArK10gPSBqOworCQkJCX0KKwkJCX0KKwkJCWZvciAoayA9IGxvdzsgayA8IHVwOyBrKyspCisJCQkJaWYgKGNvbHVtbjJyb3dbY29sW2tdXSA9PSAtMSkKKwkJCQkJZ290byB1cGRhdGU7CisKKwkJCS8qIHNjYW4gYSByb3cgKi8KKwkJCWRvIHsKKwkJCQlpbnQgajEgPSBjb2xbbG93KytdOworCisJCQkJaSA9IGNvbHVtbjJyb3dbajFdOworCQkJCXUxID0gQ09TVChqMSwgaSkgLSB2W2oxXSAtIG1pbjsKKwkJCQlmb3IgKGsgPSB1cDsgayA8IGNvbHVtbl9jb3VudDsgaysrKSB7CisJCQkJCWogPSBjb2xba107CisJCQkJCWMgPSBDT1NUKGosIGkpIC0gdltqXSAtIHUxOworCQkJCQlpZiAoYyA8IGRbal0pIHsKKwkJCQkJCWRbal0gPSBjOworCQkJCQkJcHJlZFtqXSA9IGk7CisJCQkJCQlpZiAoYyA9PSBtaW4pIHsKKwkJCQkJCQlpZiAoY29sdW1uMnJvd1tqXSA9PSAtMSkKKwkJCQkJCQkJZ290byB1cGRhdGU7CisJCQkJCQkJY29sW2tdID0gY29sW3VwXTsKKwkJCQkJCQljb2xbdXArK10gPSBqOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfSB3aGlsZSAobG93ICE9IHVwKTsKKwkJfSB3aGlsZSAobG93ID09IHVwKTsKKwordXBkYXRlOgorCQkvKiB1cGRhdGluZyBvZiB0aGUgY29sdW1uIHBpZWNlcyAqLworCQlmb3IgKGsgPSAwOyBrIDwgbGFzdDsgaysrKSB7CisJCQlpbnQgajEgPSBjb2xba107CisJCQl2W2oxXSArPSBkW2oxXSAtIG1pbjsKKwkJfQorCisJCS8qIGF1Z21lbnRhdGlvbiAqLworCQlkbyB7CisJCQlpZiAoaiA8IDApCisJCQkJQlVHKCJuZWdhdGl2ZSBqOiAlZCIsIGopOworCQkJaSA9IHByZWRbal07CisJCQljb2x1bW4ycm93W2pdID0gaTsKKwkJCVNXQVAoaiwgcm93MmNvbHVtbltpXSk7CisJCX0gd2hpbGUgKGkxICE9IGkpOworCX0KKworCWZyZWUoY29sKTsKKwlmcmVlKHByZWQpOworCWZyZWUoZCk7CisJZnJlZSh2KTsKKwlmcmVlKGZyZWVfcm93KTsKK30KZGlmZiAtLWdpdCBhL2xpbmVhci1hc3NpZ25tZW50LmggYi9saW5lYXItYXNzaWdubWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZmVhNzYKLS0tIC9kZXYvbnVsbAorKysgYi9saW5lYXItYXNzaWdubWVudC5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgTElORUFSX0FTU0lHTk1FTlRfSAorI2RlZmluZSBMSU5FQVJfQVNTSUdOTUVOVF9ICisKKy8qCisgKiBDb21wdXRlIGFuIGFzc2lnbm1lbnQgb2YgY29sdW1ucyAtPiByb3dzIChhbmQgdmljZSB2ZXJzYSkgc3VjaCB0aGF0IGV2ZXJ5CisgKiBjb2x1bW4gaXMgYXNzaWduZWQgdG8gYXQgbW9zdCBvbmUgcm93IChhbmQgdmljZSB2ZXJzYSkgbWluaW1pemluZyB0aGUKKyAqIG92ZXJhbGwgY29zdC4KKyAqCisgKiBUaGUgcGFyYW1ldGVyIGBjb3N0YCBpcyB0aGUgY29zdCBtYXRyaXg6IHRoZSBjb3N0IHRvIGFzc2lnbiBjb2x1bW4gaiB0byByb3cKKyAqIGkgaXMgYGNvc3RbaiArIGNvbHVtbl9jb3VudCAqIGldLgorICoKKyAqIFRoZSBhcnJheXMgY29sdW1uMnJvdyBhbmQgcm93MmNvbHVtbiB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSByZXNwZWN0aXZlCisgKiBhc3NpZ25tZW50cyAoLTEgZm9yIHVuYXNzaWduZWQsIHdoaWNoIGNhbiBoYXBwZW4gb25seSBpZiBjb2x1bW5fY291bnQgIT0KKyAqIHJvd19jb3VudCkuCisgKi8KK3ZvaWQgY29tcHV0ZV9hc3NpZ25tZW50KGludCBjb2x1bW5fY291bnQsIGludCByb3dfY291bnQsIGludCAqY29zdCwKKwkJCWludCAqY29sdW1uMnJvdywgaW50ICpyb3cyY29sdW1uKTsKKworLyogVGhlIG1heGltYWwgY29zdCBpbiB0aGUgY29zdCBtYXRyaXggKHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MpLiAqLworI2RlZmluZSBDT1NUX01BWCAoMTw8MTYpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmMgYi9saXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTZiY2ZiCi0tLSAvZGV2L251bGwKKysrIGIvbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmMKQEAgLTAsMCArMSwzNzAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXIuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJwcm9taXNvci1yZW1vdGUuaCIKKyNpbmNsdWRlICJ0cmFjZS5oIgorI2luY2x1ZGUgInVybC5oIgorCitzdGF0aWMgaW50IHBhcnNlX2NvbWJpbmVfZmlsdGVyKAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zLAorCWNvbnN0IGNoYXIgKmFyZywKKwlzdHJ1Y3Qgc3RyYnVmICplcnJidWYpOworCisvKgorICogUGFyc2UgdmFsdWUgb2YgdGhlIGFyZ3VtZW50IHRvIHRoZSAiZmlsdGVyIiBrZXl3b3JkLgorICogT24gdGhlIGNvbW1hbmQgbGluZSB0aGlzIGxvb2tzIGxpa2U6CisgKiAgICAgICAtLWZpbHRlcj08YXJnPgorICogYW5kIGluIHRoZSBwYWNrIHByb3RvY29sIGFzOgorICogICAgICAgImZpbHRlciIgU1AgPGFyZz4KKyAqCisgKiBUaGUgZmlsdGVyIGtleXdvcmQgd2lsbCBiZSB1c2VkIGJ5IG1hbnkgY29tbWFuZHMuCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dCBmb3IgYWxsb3dlZCB2YWx1ZXMgZm9yIDxhcmc+LgorICoKKyAqIENhcHR1cmUgdGhlIGdpdmVuIGFyZyBhcyB0aGUgImZpbHRlcl9zcGVjIi4gIFRoaXMgY2FuIGJlIGZvcndhcmRlZCB0bworICogc3Vib3JkaW5hdGUgY29tbWFuZHMgd2hlbiBuZWNlc3NhcnkgKGFsdGhvdWdoIGl0J3MgYmV0dGVyIHRvIHBhc3MgaXQgdGhyb3VnaAorICogZXhwYW5kX2xpc3Rfb2JqZWN0c19maWx0ZXJfc3BlYygpIGZpcnN0KS4gIFdlIGFsc28gImludGVybiIgdGhlIGFyZyBmb3IgdGhlCisgKiBjb252ZW5pZW5jZSBvZiB0aGUgY3VycmVudCBjb21tYW5kLgorICovCitzdGF0aWMgaW50IGdlbnRseV9wYXJzZV9saXN0X29iamVjdHNfZmlsdGVyKAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zLAorCWNvbnN0IGNoYXIgKmFyZywKKwlzdHJ1Y3Qgc3RyYnVmICplcnJidWYpCit7CisJY29uc3QgY2hhciAqdjA7CisKKwlpZiAoIWFyZykKKwkJcmV0dXJuIDA7CisKKwlpZiAoZmlsdGVyX29wdGlvbnMtPmNob2ljZSkKKwkJQlVHKCJmaWx0ZXJfb3B0aW9ucyBhbHJlYWR5IHBvcHVsYXRlZCIpOworCisJaWYgKCFzdHJjbXAoYXJnLCAiYmxvYjpub25lIikpIHsKKwkJZmlsdGVyX29wdGlvbnMtPmNob2ljZSA9IExPRkNfQkxPQl9OT05FOworCQlyZXR1cm4gMDsKKworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiYmxvYjpsaW1pdD0iLCAmdjApKSB7CisJCWlmIChnaXRfcGFyc2VfdWxvbmcodjAsICZmaWx0ZXJfb3B0aW9ucy0+YmxvYl9saW1pdF92YWx1ZSkpIHsKKwkJCWZpbHRlcl9vcHRpb25zLT5jaG9pY2UgPSBMT0ZDX0JMT0JfTElNSVQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICJ0cmVlOiIsICZ2MCkpIHsKKwkJaWYgKCFnaXRfcGFyc2VfdWxvbmcodjAsICZmaWx0ZXJfb3B0aW9ucy0+dHJlZV9leGNsdWRlX2RlcHRoKSkgeworCQkJc3RyYnVmX2FkZHN0cihlcnJidWYsIF8oImV4cGVjdGVkICd0cmVlOjxkZXB0aD4nIikpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJZmlsdGVyX29wdGlvbnMtPmNob2ljZSA9IExPRkNfVFJFRV9ERVBUSDsKKwkJcmV0dXJuIDA7CisKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgInNwYXJzZTpvaWQ9IiwgJnYwKSkgeworCQlmaWx0ZXJfb3B0aW9ucy0+c3BhcnNlX29pZF9uYW1lID0geHN0cmR1cCh2MCk7CisJCWZpbHRlcl9vcHRpb25zLT5jaG9pY2UgPSBMT0ZDX1NQQVJTRV9PSUQ7CisJCXJldHVybiAwOworCisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICJzcGFyc2U6cGF0aD0iLCAmdjApKSB7CisJCWlmIChlcnJidWYpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoCisJCQkJZXJyYnVmLAorCQkJCV8oInNwYXJzZTpwYXRoIGZpbHRlcnMgc3VwcG9ydCBoYXMgYmVlbiBkcm9wcGVkIikpOworCQl9CisJCXJldHVybiAxOworCisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICJjb21iaW5lOiIsICZ2MCkpIHsKKwkJcmV0dXJuIHBhcnNlX2NvbWJpbmVfZmlsdGVyKGZpbHRlcl9vcHRpb25zLCB2MCwgZXJyYnVmKTsKKworCX0KKwkvKgorCSAqIFBsZWFzZSB1cGRhdGUgX2dpdF9mZXRjaCgpIGluIGdpdC1jb21wbGV0aW9uLmJhc2ggd2hlbiB5b3UKKwkgKiBhZGQgbmV3IGZpbHRlcnMKKwkgKi8KKworCXN0cmJ1Zl9hZGRmKGVycmJ1ZiwgXygiaW52YWxpZCBmaWx0ZXItc3BlYyAnJXMnIiksIGFyZyk7CisKKwltZW1zZXQoZmlsdGVyX29wdGlvbnMsIDAsIHNpemVvZigqZmlsdGVyX29wdGlvbnMpKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKlJFU0VSVkVEX05PTl9XUyA9ICJ+YCFAIyReJiooKVtde31cXDsnXCIsPD4/IjsKKworc3RhdGljIGludCBoYXNfcmVzZXJ2ZWRfY2hhcmFjdGVyKAorCXN0cnVjdCBzdHJidWYgKnN1Yl9zcGVjLCBzdHJ1Y3Qgc3RyYnVmICplcnJidWYpCit7CisJY29uc3QgY2hhciAqYyA9IHN1Yl9zcGVjLT5idWY7CisJd2hpbGUgKCpjKSB7CisJCWlmICgqYyA8PSAnICcgfHwgc3RyY2hyKFJFU0VSVkVEX05PTl9XUywgKmMpKSB7CisJCQlzdHJidWZfYWRkZigKKwkJCQllcnJidWYsCisJCQkJXygibXVzdCBlc2NhcGUgY2hhciBpbiBzdWItZmlsdGVyLXNwZWM6ICclYyciKSwKKwkJCQkqYyk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQljKys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfY29tYmluZV9zdWJmaWx0ZXIoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMsCisJc3RydWN0IHN0cmJ1ZiAqc3Vic3BlYywKKwlzdHJ1Y3Qgc3RyYnVmICplcnJidWYpCit7CisJc2l6ZV90IG5ld19pbmRleCA9IGZpbHRlcl9vcHRpb25zLT5zdWJfbnI7CisJY2hhciAqZGVjb2RlZDsKKwlpbnQgcmVzdWx0OworCisJQUxMT0NfR1JPV19CWShmaWx0ZXJfb3B0aW9ucy0+c3ViLCBmaWx0ZXJfb3B0aW9ucy0+c3ViX25yLCAxLAorCQkgICAgICBmaWx0ZXJfb3B0aW9ucy0+c3ViX2FsbG9jKTsKKworCWRlY29kZWQgPSB1cmxfcGVyY2VudF9kZWNvZGUoc3Vic3BlYy0+YnVmKTsKKworCXJlc3VsdCA9IGhhc19yZXNlcnZlZF9jaGFyYWN0ZXIoc3Vic3BlYywgZXJyYnVmKSB8fAorCQlnZW50bHlfcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcigKKwkJCSZmaWx0ZXJfb3B0aW9ucy0+c3ViW25ld19pbmRleF0sIGRlY29kZWQsIGVycmJ1Zik7CisKKwlmcmVlKGRlY29kZWQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfY29tYmluZV9maWx0ZXIoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMsCisJY29uc3QgY2hhciAqYXJnLAorCXN0cnVjdCBzdHJidWYgKmVycmJ1ZikKK3sKKwlzdHJ1Y3Qgc3RyYnVmICoqc3Vic3BlY3MgPSBzdHJidWZfc3BsaXRfc3RyKGFyZywgJysnLCAwKTsKKwlzaXplX3Qgc3ViOworCWludCByZXN1bHQgPSAwOworCisJaWYgKCFzdWJzcGVjc1swXSkgeworCQlzdHJidWZfYWRkc3RyKGVycmJ1ZiwgXygiZXhwZWN0ZWQgc29tZXRoaW5nIGFmdGVyIGNvbWJpbmU6IikpOworCQlyZXN1bHQgPSAxOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJZm9yIChzdWIgPSAwOyBzdWJzcGVjc1tzdWJdICYmICFyZXN1bHQ7IHN1YisrKSB7CisJCWlmIChzdWJzcGVjc1tzdWIgKyAxXSkgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgbm90IHRoZSBsYXN0IHN1YnNwZWMuIFJlbW92ZSB0cmFpbGluZyAiKyIgc28KKwkJCSAqIHdlIGNhbiBwYXJzZSBpdC4KKwkJCSAqLworCQkJc2l6ZV90IGxhc3QgPSBzdWJzcGVjc1tzdWJdLT5sZW4gLSAxOworCQkJYXNzZXJ0KHN1YnNwZWNzW3N1Yl0tPmJ1ZltsYXN0XSA9PSAnKycpOworCQkJc3RyYnVmX3JlbW92ZShzdWJzcGVjc1tzdWJdLCBsYXN0LCAxKTsKKwkJfQorCQlyZXN1bHQgPSBwYXJzZV9jb21iaW5lX3N1YmZpbHRlcigKKwkJCWZpbHRlcl9vcHRpb25zLCBzdWJzcGVjc1tzdWJdLCBlcnJidWYpOworCX0KKworCWZpbHRlcl9vcHRpb25zLT5jaG9pY2UgPSBMT0ZDX0NPTUJJTkU7CisKK2NsZWFudXA6CisJc3RyYnVmX2xpc3RfZnJlZShzdWJzcGVjcyk7CisJaWYgKHJlc3VsdCkgeworCQlsaXN0X29iamVjdHNfZmlsdGVyX3JlbGVhc2UoZmlsdGVyX29wdGlvbnMpOworCQltZW1zZXQoZmlsdGVyX29wdGlvbnMsIDAsIHNpemVvZigqZmlsdGVyX29wdGlvbnMpKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBhbGxvd191bmVuY29kZWQoY2hhciBjaCkKK3sKKwlpZiAoY2ggPD0gJyAnIHx8IGNoID09ICclJyB8fCBjaCA9PSAnKycpCisJCXJldHVybiAwOworCXJldHVybiAhc3RyY2hyKFJFU0VSVkVEX05PTl9XUywgY2gpOworfQorCitzdGF0aWMgdm9pZCBmaWx0ZXJfc3BlY19hcHBlbmRfdXJsZW5jb2RlKAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlciwgY29uc3QgY2hhciAqcmF3KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZHN0cl91cmxlbmNvZGUoJmJ1ZiwgcmF3LCBhbGxvd191bmVuY29kZWQpOworCXRyYWNlX3ByaW50ZigiQWRkIHRvIGNvbWJpbmUgZmlsdGVyLXNwZWM6ICVzXG4iLCBidWYuYnVmKTsKKwlzdHJpbmdfbGlzdF9hcHBlbmQoJmZpbHRlci0+ZmlsdGVyX3NwZWMsIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworfQorCisvKgorICogQ2hhbmdlcyBmaWx0ZXJfb3B0aW9ucyBpbnRvIGFuIGVxdWl2YWxlbnQgTE9GQ19DT01CSU5FIGZpbHRlciBvcHRpb25zCisgKiBpbnN0YW5jZS4gRG9lcyBub3QgZG8gYW55dGhpbmcgaWYgZmlsdGVyX29wdGlvbnMgaXMgYWxyZWFkeSBMT0ZDX0NPTUJJTkUuCisgKi8KK3N0YXRpYyB2b2lkIHRyYW5zZm9ybV90b19jb21iaW5lX3R5cGUoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMpCit7CisJYXNzZXJ0KGZpbHRlcl9vcHRpb25zLT5jaG9pY2UpOworCWlmIChmaWx0ZXJfb3B0aW9ucy0+Y2hvaWNlID09IExPRkNfQ09NQklORSkKKwkJcmV0dXJuOworCXsKKwkJY29uc3QgaW50IGluaXRpYWxfc3ViX2FsbG9jID0gMjsKKwkJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqc3ViX2FycmF5ID0KKwkJCXhjYWxsb2MoaW5pdGlhbF9zdWJfYWxsb2MsIHNpemVvZigqc3ViX2FycmF5KSk7CisJCXN1Yl9hcnJheVswXSA9ICpmaWx0ZXJfb3B0aW9uczsKKwkJbWVtc2V0KGZpbHRlcl9vcHRpb25zLCAwLCBzaXplb2YoKmZpbHRlcl9vcHRpb25zKSk7CisJCWZpbHRlcl9vcHRpb25zLT5zdWIgPSBzdWJfYXJyYXk7CisJCWZpbHRlcl9vcHRpb25zLT5zdWJfYWxsb2MgPSBpbml0aWFsX3N1Yl9hbGxvYzsKKwl9CisJZmlsdGVyX29wdGlvbnMtPnN1Yl9uciA9IDE7CisJZmlsdGVyX29wdGlvbnMtPmNob2ljZSA9IExPRkNfQ09NQklORTsKKwlzdHJpbmdfbGlzdF9hcHBlbmQoJmZpbHRlcl9vcHRpb25zLT5maWx0ZXJfc3BlYywgeHN0cmR1cCgiY29tYmluZToiKSk7CisJZmlsdGVyX3NwZWNfYXBwZW5kX3VybGVuY29kZSgKKwkJZmlsdGVyX29wdGlvbnMsCisJCWxpc3Rfb2JqZWN0c19maWx0ZXJfc3BlYygmZmlsdGVyX29wdGlvbnMtPnN1YlswXSkpOworCS8qCisJICogV2UgZG9uJ3QgbmVlZCB0aGUgZmlsdGVyX3NwZWMgc3RyaW5ncyBmb3Igc3ViZmlsdGVyIHNwZWNzLCBvbmx5IHRoZQorCSAqIHRvcCBsZXZlbC4KKwkgKi8KKwlzdHJpbmdfbGlzdF9jbGVhcigmZmlsdGVyX29wdGlvbnMtPnN1YlswXS5maWx0ZXJfc3BlYywgLypmcmVlX3V0aWw9Ki8wKTsKK30KKwordm9pZCBsaXN0X29iamVjdHNfZmlsdGVyX2RpZV9pZl9wb3B1bGF0ZWQoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMpCit7CisJaWYgKGZpbHRlcl9vcHRpb25zLT5jaG9pY2UpCisJCWRpZShfKCJtdWx0aXBsZSBmaWx0ZXItc3BlY3MgY2Fubm90IGJlIGNvbWJpbmVkIikpOworfQorCit2b2lkIHBhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMsCisJY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdCBzdHJidWYgZXJyYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHBhcnNlX2Vycm9yOworCisJaWYgKCFmaWx0ZXJfb3B0aW9ucy0+Y2hvaWNlKSB7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmZmlsdGVyX29wdGlvbnMtPmZpbHRlcl9zcGVjLCB4c3RyZHVwKGFyZykpOworCisJCXBhcnNlX2Vycm9yID0gZ2VudGx5X3BhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoCisJCQlmaWx0ZXJfb3B0aW9ucywgYXJnLCAmZXJyYnVmKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBNYWtlIGZpbHRlcl9vcHRpb25zIGFuIExPRkNfQ09NQklORSBzcGVjIHNvIHdlIGNhbiB0cml2aWFsbHkKKwkJICogYWRkIHN1YnNwZWNzIHRvIGl0LgorCQkgKi8KKwkJdHJhbnNmb3JtX3RvX2NvbWJpbmVfdHlwZShmaWx0ZXJfb3B0aW9ucyk7CisKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZmaWx0ZXJfb3B0aW9ucy0+ZmlsdGVyX3NwZWMsIHhzdHJkdXAoIisiKSk7CisJCWZpbHRlcl9zcGVjX2FwcGVuZF91cmxlbmNvZGUoZmlsdGVyX29wdGlvbnMsIGFyZyk7CisJCUFMTE9DX0dST1dfQlkoZmlsdGVyX29wdGlvbnMtPnN1YiwgZmlsdGVyX29wdGlvbnMtPnN1Yl9uciwgMSwKKwkJCSAgICAgIGZpbHRlcl9vcHRpb25zLT5zdWJfYWxsb2MpOworCisJCXBhcnNlX2Vycm9yID0gZ2VudGx5X3BhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoCisJCQkmZmlsdGVyX29wdGlvbnMtPnN1YltmaWx0ZXJfb3B0aW9ucy0+c3ViX25yIC0gMV0sIGFyZywKKwkJCSZlcnJidWYpOworCX0KKwlpZiAocGFyc2VfZXJyb3IpCisJCWRpZSgiJXMiLCBlcnJidWYuYnVmKTsKK30KKworaW50IG9wdF9wYXJzZV9saXN0X29iamVjdHNfZmlsdGVyKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zID0gb3B0LT52YWx1ZTsKKworCWlmICh1bnNldCB8fCAhYXJnKQorCQlsaXN0X29iamVjdHNfZmlsdGVyX3NldF9ub19maWx0ZXIoZmlsdGVyX29wdGlvbnMpOworCWVsc2UKKwkJcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcihmaWx0ZXJfb3B0aW9ucywgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqbGlzdF9vYmplY3RzX2ZpbHRlcl9zcGVjKHN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcikKK3sKKwlpZiAoIWZpbHRlci0+ZmlsdGVyX3NwZWMubnIpCisJCUJVRygibm8gZmlsdGVyX3NwZWMgYXZhaWxhYmxlIGZvciB0aGlzIGZpbHRlciIpOworCWlmIChmaWx0ZXItPmZpbHRlcl9zcGVjLm5yICE9IDEpIHsKKwkJc3RydWN0IHN0cmJ1ZiBjb25jYXR0ZWQgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZF9zZXBhcmF0ZWRfc3RyaW5nX2xpc3QoCisJCQkmY29uY2F0dGVkLCAiIiwgJmZpbHRlci0+ZmlsdGVyX3NwZWMpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmZmlsdGVyLT5maWx0ZXJfc3BlYywgLypmcmVlX3V0aWw9Ki8wKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKAorCQkJJmZpbHRlci0+ZmlsdGVyX3NwZWMsIHN0cmJ1Zl9kZXRhY2goJmNvbmNhdHRlZCwgTlVMTCkpOworCX0KKworCXJldHVybiBmaWx0ZXItPmZpbHRlcl9zcGVjLml0ZW1zWzBdLnN0cmluZzsKK30KKworY29uc3QgY2hhciAqZXhwYW5kX2xpc3Rfb2JqZWN0c19maWx0ZXJfc3BlYygKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXIpCit7CisJaWYgKGZpbHRlci0+Y2hvaWNlID09IExPRkNfQkxPQl9MSU1JVCkgeworCQlzdHJ1Y3Qgc3RyYnVmIGV4cGFuZGVkX3NwZWMgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZGYoJmV4cGFuZGVkX3NwZWMsICJibG9iOmxpbWl0PSVsdSIsCisJCQkgICAgZmlsdGVyLT5ibG9iX2xpbWl0X3ZhbHVlKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmZpbHRlci0+ZmlsdGVyX3NwZWMsIC8qZnJlZV91dGlsPSovMCk7CisJCXN0cmluZ19saXN0X2FwcGVuZCgKKwkJCSZmaWx0ZXItPmZpbHRlcl9zcGVjLAorCQkJc3RyYnVmX2RldGFjaCgmZXhwYW5kZWRfc3BlYywgTlVMTCkpOworCX0KKworCXJldHVybiBsaXN0X29iamVjdHNfZmlsdGVyX3NwZWMoZmlsdGVyKTsKK30KKwordm9pZCBsaXN0X29iamVjdHNfZmlsdGVyX3JlbGVhc2UoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMpCit7CisJc2l6ZV90IHN1YjsKKworCWlmICghZmlsdGVyX29wdGlvbnMpCisJCXJldHVybjsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZmlsdGVyX29wdGlvbnMtPmZpbHRlcl9zcGVjLCAvKmZyZWVfdXRpbD0qLzApOworCWZyZWUoZmlsdGVyX29wdGlvbnMtPnNwYXJzZV9vaWRfbmFtZSk7CisJZm9yIChzdWIgPSAwOyBzdWIgPCBmaWx0ZXJfb3B0aW9ucy0+c3ViX25yOyBzdWIrKykKKwkJbGlzdF9vYmplY3RzX2ZpbHRlcl9yZWxlYXNlKCZmaWx0ZXJfb3B0aW9ucy0+c3ViW3N1Yl0pOworCWZyZWUoZmlsdGVyX29wdGlvbnMtPnN1Yik7CisJbWVtc2V0KGZpbHRlcl9vcHRpb25zLCAwLCBzaXplb2YoKmZpbHRlcl9vcHRpb25zKSk7Cit9CisKK3ZvaWQgcGFydGlhbF9jbG9uZV9yZWdpc3RlcigKKwljb25zdCBjaGFyICpyZW1vdGUsCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMpCit7CisJY2hhciAqY2ZnX25hbWU7CisJY2hhciAqZmlsdGVyX25hbWU7CisKKwkvKiBDaGVjayBpZiBpdCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KKwlpZiAoIXByb21pc29yX3JlbW90ZV9maW5kKHJlbW90ZSkpIHsKKwkJZ2l0X2NvbmZpZ19zZXQoImNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24iLCAiMSIpOworCisJCS8qIEFkZCBwcm9taXNvciBjb25maWcgZm9yIHRoZSByZW1vdGUgKi8KKwkJY2ZnX25hbWUgPSB4c3RyZm10KCJyZW1vdGUuJXMucHJvbWlzb3IiLCByZW1vdGUpOworCQlnaXRfY29uZmlnX3NldChjZmdfbmFtZSwgInRydWUiKTsKKwkJZnJlZShjZmdfbmFtZSk7CisJfQorCisJLyoKKwkgKiBSZWNvcmQgdGhlIGluaXRpYWwgZmlsdGVyLXNwZWMgaW4gdGhlIGNvbmZpZyBhcworCSAqIHRoZSBkZWZhdWx0IGZvciBzdWJzZXF1ZW50IGZldGNoZXMgZnJvbSB0aGlzIHJlbW90ZS4KKwkgKi8KKwlmaWx0ZXJfbmFtZSA9IHhzdHJmbXQoInJlbW90ZS4lcy5wYXJ0aWFsY2xvbmVmaWx0ZXIiLCByZW1vdGUpOworCS8qIE5FRURTV09SSzogJ2V4cGFuZCcgcmVzdWx0IGxlYWtpbmc/Pz8gKi8KKwlnaXRfY29uZmlnX3NldChmaWx0ZXJfbmFtZSwKKwkJICAgICAgIGV4cGFuZF9saXN0X29iamVjdHNfZmlsdGVyX3NwZWMoZmlsdGVyX29wdGlvbnMpKTsKKwlmcmVlKGZpbHRlcl9uYW1lKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgY29uZmlnIGluZm8gYXJlIHJlc2V0ICovCisJcHJvbWlzb3JfcmVtb3RlX3JlaW5pdCgpOworfQorCit2b2lkIHBhcnRpYWxfY2xvbmVfZ2V0X2RlZmF1bHRfZmlsdGVyX3NwZWMoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMsCisJY29uc3QgY2hhciAqcmVtb3RlKQoreworCXN0cnVjdCBwcm9taXNvcl9yZW1vdGUgKnByb21pc29yID0gcHJvbWlzb3JfcmVtb3RlX2ZpbmQocmVtb3RlKTsKKwlzdHJ1Y3Qgc3RyYnVmIGVycmJ1ZiA9IFNUUkJVRl9JTklUOworCisJLyoKKwkgKiBQYXJzZSBkZWZhdWx0IHZhbHVlLCBidXQgc2lsZW50bHkgaWdub3JlIGl0IGlmIGl0IGlzIGludmFsaWQuCisJICovCisJaWYgKCFwcm9taXNvcikKKwkJcmV0dXJuOworCisJc3RyaW5nX2xpc3RfYXBwZW5kKCZmaWx0ZXJfb3B0aW9ucy0+ZmlsdGVyX3NwZWMsCisJCQkgICBwcm9taXNvci0+cGFydGlhbF9jbG9uZV9maWx0ZXIpOworCWdlbnRseV9wYXJzZV9saXN0X29iamVjdHNfZmlsdGVyKGZpbHRlcl9vcHRpb25zLAorCQkJCQkgcHJvbWlzb3ItPnBhcnRpYWxfY2xvbmVfZmlsdGVyLAorCQkJCQkgJmVycmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmVycmJ1Zik7Cit9CmRpZmYgLS1naXQgYS9saXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaCBiL2xpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZmZmYTQKLS0tIC9kZXYvbnVsbAorKysgYi9saXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaApAQCAtMCwwICsxLDEyNiBAQAorI2lmbmRlZiBMSVNUX09CSkVDVFNfRklMVEVSX09QVElPTlNfSAorI2RlZmluZSBMSVNUX09CSkVDVFNfRklMVEVSX09QVElPTlNfSAorCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKKy8qCisgKiBUaGUgbGlzdCBvZiBkZWZpbmVkIGZpbHRlcnMgZm9yIGxpc3Qtb2JqZWN0cy4KKyAqLworZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX2Nob2ljZSB7CisJTE9GQ19ESVNBQkxFRCA9IDAsCisJTE9GQ19CTE9CX05PTkUsCisJTE9GQ19CTE9CX0xJTUlULAorCUxPRkNfVFJFRV9ERVBUSCwKKwlMT0ZDX1NQQVJTRV9PSUQsCisJTE9GQ19DT01CSU5FLAorCUxPRkNfX0NPVU5UIC8qIG11c3QgYmUgbGFzdCAqLworfTsKKworc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyB7CisJLyoKKwkgKiAnZmlsdGVyX3NwZWMnIGlzIHRoZSByYXcgYXJndW1lbnQgdmFsdWUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZQorCSAqIG9yIHByb3RvY29sIHJlcXVlc3QuICAoVGhlIHBhcnQgYWZ0ZXIgdGhlICItLWtleXdvcmQ9Ii4pICBGb3IKKwkgKiBjb21tYW5kcyB0aGF0IGxhdW5jaCBmaWx0ZXJpbmcgc3ViLXByb2Nlc3Nlcywgb3IgZm9yIGNvbW11bmljYXRpb24KKwkgKiBvdmVyIHRoZSBuZXR3b3JrLCBkb24ndCB1c2UgdGhpcyB2YWx1ZTsgdXNlIHRoZSByZXN1bHQgb2YKKwkgKiBleHBhbmRfbGlzdF9vYmplY3RzX2ZpbHRlcl9zcGVjKCkgaW5zdGVhZC4KKwkgKiBUbyBnZXQgdGhlIHJhdyBmaWx0ZXIgc3BlYyBnaXZlbiBieSB0aGUgdXNlciwgdXNlIHRoZSByZXN1bHQgb2YKKwkgKiBsaXN0X29iamVjdHNfZmlsdGVyX3NwZWMoKS4KKwkgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZmlsdGVyX3NwZWM7CisKKwkvKgorCSAqICdjaG9pY2UnIGlzIGRldGVybWluZWQgYnkgcGFyc2luZyB0aGUgZmlsdGVyLXNwZWMuICBUaGlzIGluZGljYXRlcworCSAqIHRoZSBmaWx0ZXJpbmcgYWxnb3JpdGhtIHRvIHVzZS4KKwkgKi8KKwllbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfY2hvaWNlIGNob2ljZTsKKworCS8qCisJICogQ2hvaWNlIGlzIExPRkNfRElTQUJMRUQgYmVjYXVzZSAiLS1uby1maWx0ZXIiIHdhcyByZXF1ZXN0ZWQuCisJICovCisJdW5zaWduZWQgaW50IG5vX2ZpbHRlciA6IDE7CisKKwkvKgorCSAqIEJFR0lOIGNob2ljZS1zcGVjaWZpYyBwYXJzZWQgdmFsdWVzIGZyb20gd2l0aGluIHRoZSBmaWx0ZXItc3BlYy4gT25seQorCSAqIHNvbWUgdmFsdWVzIHdpbGwgYmUgZGVmaW5lZCBmb3IgYW55IGdpdmVuIGNob2ljZS4KKwkgKi8KKworCWNoYXIgKnNwYXJzZV9vaWRfbmFtZTsKKwl1bnNpZ25lZCBsb25nIGJsb2JfbGltaXRfdmFsdWU7CisJdW5zaWduZWQgbG9uZyB0cmVlX2V4Y2x1ZGVfZGVwdGg7CisKKwkvKiBMT0ZDX0NPTUJJTkUgdmFsdWVzICovCisKKwkvKiBUaGlzIGFycmF5IGNvbnRhaW5zIGFsbCB0aGUgc3ViZmlsdGVycyB3aGljaCB0aGlzIGZpbHRlciBjb21iaW5lcy4gKi8KKwlzaXplX3Qgc3ViX25yLCBzdWJfYWxsb2M7CisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqc3ViOworCisJLyoKKwkgKiBFTkQgY2hvaWNlLXNwZWNpZmljIHBhcnNlZCB2YWx1ZXMuCisJICovCit9OworCisvKiBOb3JtYWxpemVkIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgKi8KKyNkZWZpbmUgQ0xfQVJHX19GSUxURVIgImZpbHRlciIKKwordm9pZCBsaXN0X29iamVjdHNfZmlsdGVyX2RpZV9pZl9wb3B1bGF0ZWQoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMpOworCisvKgorICogUGFyc2VzIHRoZSBmaWx0ZXIgc3BlYyBzdHJpbmcgZ2l2ZW4gYnkgYXJnIGFuZCBlaXRoZXIgKDEpIHNpbXBseSBwbGFjZXMgdGhlCisgKiByZXN1bHQgaW4gZmlsdGVyX29wdGlvbnMgaWYgaXQgaXMgbm90IHlldCBwb3B1bGF0ZWQgb3IgKDIpIGNvbWJpbmVzIGl0IHdpdGgKKyAqIHRoZSBmaWx0ZXIgYWxyZWFkeSBpbiBmaWx0ZXJfb3B0aW9ucyBpZiBpdCBpcyBhbHJlYWR5IHBvcHVsYXRlZC4gSW4gdGhlIGNhc2UKKyAqIG9mICgyKSwgdGhlIGZpbHRlciBzcGVjcyBhcmUgY29tYmluZWQgYXMgaWYgc3BlY2lmaWVkIHdpdGggJ2NvbWJpbmU6Jy4KKyAqCisgKiBEaWVzIGFuZCBwcmludHMgYSB1c2VyLWZhY2luZyBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3Vycy4KKyAqLwordm9pZCBwYXJzZV9saXN0X29iamVjdHNfZmlsdGVyKAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zLAorCWNvbnN0IGNoYXIgKmFyZyk7CisKK2ludCBvcHRfcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCk7CisKKyNkZWZpbmUgT1BUX1BBUlNFX0xJU1RfT0JKRUNUU19GSUxURVIoZm8pIFwKKwlPUFRfQ0FMTEJBQ0soMCwgQ0xfQVJHX19GSUxURVIsIGZvLCBOXygiYXJncyIpLCBcCisJICBOXygib2JqZWN0IGZpbHRlcmluZyIpLCBcCisJICBvcHRfcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcikKKworLyoKKyAqIFRyYW5zbGF0ZXMgYWJicmV2aWF0ZWQgbnVtYmVycyBpbiB0aGUgZmlsdGVyJ3MgZmlsdGVyX3NwZWMgaW50byB0aGVpcgorICogZnVsbHktZXhwYW5kZWQgZm9ybXMgKGUuZy4sICJsaW1pdDpibG9iPTFrIiBiZWNvbWVzICJsaW1pdDpibG9iPTEwMjQiKS4KKyAqIFJldHVybnMgYSBzdHJpbmcgb3duZWQgYnkgdGhlIGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyBvYmplY3QuCisgKgorICogVGhpcyBmb3JtIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHJhdyBsaXN0X29iamVjdHNfZmlsdGVyX3NwZWMoKQorICogdmFsdWUgd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggYSByZW1vdGUgcHJvY2VzcyBvciBzdWJwcm9jZXNzLgorICovCitjb25zdCBjaGFyICpleHBhbmRfbGlzdF9vYmplY3RzX2ZpbHRlcl9zcGVjKAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcik7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBmaWx0ZXIgc3BlYyBzdHJpbmcgbW9yZSBvciBsZXNzIGluIHRoZSBmb3JtIGFzIHRoZSB1c2VyCisgKiBlbnRlcmVkIGl0LiBUaGlzIGZvcm0gb2YgdGhlIGZpbHRlcl9zcGVjIGNhbiBiZSB1c2VkIGluIHVzZXItZmFjaW5nCisgKiBtZXNzYWdlcy4gIFJldHVybnMgYSBzdHJpbmcgb3duZWQgYnkgdGhlIGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucworICogb2JqZWN0LgorICovCitjb25zdCBjaGFyICpsaXN0X29iamVjdHNfZmlsdGVyX3NwZWMoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyKTsKKwordm9pZCBsaXN0X29iamVjdHNfZmlsdGVyX3JlbGVhc2UoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9vYmplY3RzX2ZpbHRlcl9zZXRfbm9fZmlsdGVyKAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zKQoreworCWxpc3Rfb2JqZWN0c19maWx0ZXJfcmVsZWFzZShmaWx0ZXJfb3B0aW9ucyk7CisJZmlsdGVyX29wdGlvbnMtPm5vX2ZpbHRlciA9IDE7Cit9CisKK3ZvaWQgcGFydGlhbF9jbG9uZV9yZWdpc3RlcigKKwljb25zdCBjaGFyICpyZW1vdGUsCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMpOwordm9pZCBwYXJ0aWFsX2Nsb25lX2dldF9kZWZhdWx0X2ZpbHRlcl9zcGVjKAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zLAorCWNvbnN0IGNoYXIgKnJlbW90ZSk7CisKKyNlbmRpZiAvKiBMSVNUX09CSkVDVFNfRklMVEVSX09QVElPTlNfSCAqLwpkaWZmIC0tZ2l0IGEvbGlzdC1vYmplY3RzLWZpbHRlci5jIGIvbGlzdC1vYmplY3RzLWZpbHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhM2VmM2MKLS0tIC9kZXYvbnVsbAorKysgYi9saXN0LW9iamVjdHMtZmlsdGVyLmMKQEAgLTAsMCArMSw3MTQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLWZpbHRlci5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oIgorI2luY2x1ZGUgIm9pZG1hcC5oIgorI2luY2x1ZGUgIm9pZHNldC5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworLyoKKyAqIEZJTFRFUl9TSE9XTl9CVVRfUkVWSVNJVCAtLSB3ZSBzZXQgdGhpcyBiaXQgb24gdHJlZSBvYmplY3RzCisgKiB0aGF0IGhhdmUgYmVlbiBzaG93biwgYnV0IHNob3VsZCBiZSByZXZpc2l0ZWQgaWYgdGhleSBhcHBlYXIKKyAqIGluIHRoZSB0cmF2ZXJzYWwgKHVudGlsIHdlIG1hcmsgaXQgU0VFTikuICBUaGlzIGlzIGEgd2F5IHRvCisgKiBsZXQgdXMgc2lsZW50bHkgZGUtZHVwIGNhbGxzIHRvIHNob3coKSBpbiB0aGUgY2FsbGVyLiAgVGhpcworICogaXMgc3VidGx5IGRpZmZlcmVudCBmcm9tIHRoZSAicmV2aXNpb24uaDpTSE9XTiIgYW5kIHRoZQorICogInNoYTEtbmFtZS5jOk9ORUxJTkVfU0VFTiIgYml0cy4gIEFuZCBhbHNvIGRpZmZlcmVudCBmcm9tCisgKiB0aGUgbm9uLWRlLWR1cCB1c2FnZSBpbiBwYWNrLWJpdG1hcC5jCisgKi8KKyNkZWZpbmUgRklMVEVSX1NIT1dOX0JVVF9SRVZJU0lUICgxPDwyMSkKKworc3RydWN0IHN1YmZpbHRlciB7CisJc3RydWN0IGZpbHRlciAqZmlsdGVyOworCXN0cnVjdCBvaWRzZXQgc2VlbjsKKwlzdHJ1Y3Qgb2lkc2V0IG9taXRzOworCXN0cnVjdCBvYmplY3RfaWQgc2tpcF90cmVlOworCXVuc2lnbmVkIGlzX3NraXBwaW5nX3RyZWUgOiAxOworfTsKKworc3RydWN0IGZpbHRlciB7CisJZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX3Jlc3VsdCAoKmZpbHRlcl9vYmplY3RfZm4pKAorCQlzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX3NpdHVhdGlvbiBmaWx0ZXJfc2l0dWF0aW9uLAorCQlzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJCWNvbnN0IGNoYXIgKnBhdGhuYW1lLAorCQljb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJc3RydWN0IG9pZHNldCAqb21pdHMsCisJCXZvaWQgKmZpbHRlcl9kYXRhKTsKKworCS8qCisJICogT3B0aW9uYWwuIElmIHRoaXMgZnVuY3Rpb24gaXMgc3VwcGxpZWQgYW5kIHRoZSBmaWx0ZXIgbmVlZHMKKwkgKiB0byBjb2xsZWN0IG9taXRzLCB0aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgYmVmb3JlCisJICogZnJlZV9mbiBpcyBjYWxsZWQuCisJICoKKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhlIGZvbGxvd2luZyB0d28gY29uZGl0aW9ucyBob2xkOgorCSAqCisJICogICBhLiBBIHRyZWUgZmlsdGVyIGNhbiBhZGQgYW5kIHJlbW92ZSBvYmplY3RzIGFzIGFuIG9iamVjdAorCSAqICAgICAgZ3JhcGggaXMgdHJhdmVyc2VkLgorCSAqICAgYi4gQSBjb21iaW5lIGZpbHRlcidzIG9taXQgc2V0IGlzIHRoZSB1bmlvbiBvZiBhbGwgaXRzCisJICogICAgICBzdWJmaWx0ZXJzLCB3aGljaCBtYXkgaW5jbHVkZSB0cmVlOiBmaWx0ZXJzLgorCSAqCisJICogQXMgc3VjaCwgdGhlIG9taXRzIHNldHMgbXVzdCBiZSBzZXBhcmF0ZSBzZXRzLCBhbmQgY2FuIG9ubHkKKwkgKiBiZSB1bmlvbmVkIGFmdGVyIHRoZSB0cmF2ZXJzYWwgaXMgY29tcGxldGVkLgorCSAqLworCXZvaWQgKCpmaW5hbGl6ZV9vbWl0c19mbikoc3RydWN0IG9pZHNldCAqb21pdHMsIHZvaWQgKmZpbHRlcl9kYXRhKTsKKworCXZvaWQgKCpmcmVlX2ZuKSh2b2lkICpmaWx0ZXJfZGF0YSk7CisKKwl2b2lkICpmaWx0ZXJfZGF0YTsKKworCS8qIElmIG5vbi1OVUxMLCB0aGUgZmlsdGVyIGNvbGxlY3RzIGEgbGlzdCBvZiB0aGUgb21pdHRlZCBPSURzIGhlcmUuICovCisJc3RydWN0IG9pZHNldCAqb21pdHM7Cit9OworCitzdGF0aWMgZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX3Jlc3VsdCBmaWx0ZXJfYmxvYnNfbm9uZSgKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwllbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfc2l0dWF0aW9uIGZpbHRlcl9zaXR1YXRpb24sCisJc3RydWN0IG9iamVjdCAqb2JqLAorCWNvbnN0IGNoYXIgKnBhdGhuYW1lLAorCWNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCXN0cnVjdCBvaWRzZXQgKm9taXRzLAorCXZvaWQgKmZpbHRlcl9kYXRhXykKK3sKKwlzd2l0Y2ggKGZpbHRlcl9zaXR1YXRpb24pIHsKKwlkZWZhdWx0OgorCQlCVUcoInVua25vd24gZmlsdGVyX3NpdHVhdGlvbjogJWQiLCBmaWx0ZXJfc2l0dWF0aW9uKTsKKworCWNhc2UgTE9GU19CRUdJTl9UUkVFOgorCQlhc3NlcnQob2JqLT50eXBlID09IE9CSl9UUkVFKTsKKwkJLyogYWx3YXlzIGluY2x1ZGUgYWxsIHRyZWUgb2JqZWN0cyAqLworCQlyZXR1cm4gTE9GUl9NQVJLX1NFRU4gfCBMT0ZSX0RPX1NIT1c7CisKKwljYXNlIExPRlNfRU5EX1RSRUU6CisJCWFzc2VydChvYmotPnR5cGUgPT0gT0JKX1RSRUUpOworCQlyZXR1cm4gTE9GUl9aRVJPOworCisJY2FzZSBMT0ZTX0JMT0I6CisJCWFzc2VydChvYmotPnR5cGUgPT0gT0JKX0JMT0IpOworCQlhc3NlcnQoKG9iai0+ZmxhZ3MgJiBTRUVOKSA9PSAwKTsKKworCQlpZiAob21pdHMpCisJCQlvaWRzZXRfaW5zZXJ0KG9taXRzLCAmb2JqLT5vaWQpOworCQlyZXR1cm4gTE9GUl9NQVJLX1NFRU47IC8qIGJ1dCBub3QgTE9GUl9ET19TSE9XIChoYXJkIG9taXQpICovCisJfQorfQorCitzdGF0aWMgdm9pZCBmaWx0ZXJfYmxvYnNfbm9uZV9faW5pdCgKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucywKKwlzdHJ1Y3QgZmlsdGVyICpmaWx0ZXIpCit7CisJZmlsdGVyLT5maWx0ZXJfb2JqZWN0X2ZuID0gZmlsdGVyX2Jsb2JzX25vbmU7CisJZmlsdGVyLT5mcmVlX2ZuID0gZnJlZTsKK30KKworLyoKKyAqIEEgZmlsdGVyIGZvciBsaXN0LW9iamVjdHMgdG8gb21pdCBBTEwgdHJlZXMgYW5kIGJsb2JzIGZyb20gdGhlIHRyYXZlcnNhbC4KKyAqIENhbiBPUFRJT05BTExZIGNvbGxlY3QgYSBsaXN0IG9mIHRoZSBvbWl0dGVkIE9JRHMuCisgKi8KK3N0cnVjdCBmaWx0ZXJfdHJlZXNfZGVwdGhfZGF0YSB7CisJLyoKKwkgKiBNYXBzIHRyZWVzIHRvIHRoZSBtaW5pbXVtIGRlcHRoIGF0IHdoaWNoIHRoZXkgd2VyZSBzZWVuLiBJdCBpcyBub3QKKwkgKiBuZWNlc3NhcnkgdG8gcmUtdHJhdmVyc2UgYSB0cmVlIGF0IGRlZXBlciBvciBlcXVhbCBkZXB0aHMgdGhhbiBpdCBoYXMKKwkgKiBhbHJlYWR5IGJlZW4gdHJhdmVyc2VkLgorCSAqCisJICogV2UgY2FuJ3QgdXNlIExPRlJfTUFSS19TRUVOIGZvciB0cmVlIG9iamVjdHMgc2luY2UgdGhpcyB3aWxsIHByZXZlbnQKKwkgKiBpdCBmcm9tIGJlaW5nIHRyYXZlcnNlZCBhdCBzaGFsbG93ZXIgZGVwdGhzLgorCSAqLworCXN0cnVjdCBvaWRtYXAgc2Vlbl9hdF9kZXB0aDsKKworCXVuc2lnbmVkIGxvbmcgZXhjbHVkZV9kZXB0aDsKKwl1bnNpZ25lZCBsb25nIGN1cnJlbnRfZGVwdGg7Cit9OworCitzdHJ1Y3Qgc2Vlbl9tYXBfZW50cnkgeworCXN0cnVjdCBvaWRtYXBfZW50cnkgYmFzZTsKKwlzaXplX3QgZGVwdGg7Cit9OworCisvKiBSZXR1cm5zIDEgaWYgdGhlIG9pZCB3YXMgaW4gdGhlIG9taXRzIHNldCBiZWZvcmUgaXQgd2FzIGludm9rZWQuICovCitzdGF0aWMgaW50IGZpbHRlcl90cmVlc191cGRhdGVfb21pdHMoCisJc3RydWN0IG9iamVjdCAqb2JqLAorCXN0cnVjdCBvaWRzZXQgKm9taXRzLAorCWludCBpbmNsdWRlX2l0KQoreworCWlmICghb21pdHMpCisJCXJldHVybiAwOworCisJaWYgKGluY2x1ZGVfaXQpCisJCXJldHVybiBvaWRzZXRfcmVtb3ZlKG9taXRzLCAmb2JqLT5vaWQpOworCWVsc2UKKwkJcmV0dXJuIG9pZHNldF9pbnNlcnQob21pdHMsICZvYmotPm9pZCk7Cit9CisKK3N0YXRpYyBlbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfcmVzdWx0IGZpbHRlcl90cmVlc19kZXB0aCgKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwllbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfc2l0dWF0aW9uIGZpbHRlcl9zaXR1YXRpb24sCisJc3RydWN0IG9iamVjdCAqb2JqLAorCWNvbnN0IGNoYXIgKnBhdGhuYW1lLAorCWNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCXN0cnVjdCBvaWRzZXQgKm9taXRzLAorCXZvaWQgKmZpbHRlcl9kYXRhXykKK3sKKwlzdHJ1Y3QgZmlsdGVyX3RyZWVzX2RlcHRoX2RhdGEgKmZpbHRlcl9kYXRhID0gZmlsdGVyX2RhdGFfOworCXN0cnVjdCBzZWVuX21hcF9lbnRyeSAqc2Vlbl9pbmZvOworCWludCBpbmNsdWRlX2l0ID0gZmlsdGVyX2RhdGEtPmN1cnJlbnRfZGVwdGggPAorCQlmaWx0ZXJfZGF0YS0+ZXhjbHVkZV9kZXB0aDsKKwlpbnQgZmlsdGVyX3JlczsKKwlpbnQgYWxyZWFkeV9zZWVuOworCisJLyoKKwkgKiBOb3RlIHRoYXQgd2UgZG8gbm90IHVzZSBfTUFSS19TRUVOIGluIG9yZGVyIHRvIGFsbG93IHJlLXRyYXZlcnNhbCBpbgorCSAqIGNhc2Ugd2UgZW5jb3VudGVyIGEgdHJlZSBvciBibG9iIGFnYWluIGF0IGEgc2hhbGxvd2VyIGRlcHRoLgorCSAqLworCisJc3dpdGNoIChmaWx0ZXJfc2l0dWF0aW9uKSB7CisJZGVmYXVsdDoKKwkJQlVHKCJ1bmtub3duIGZpbHRlcl9zaXR1YXRpb246ICVkIiwgZmlsdGVyX3NpdHVhdGlvbik7CisKKwljYXNlIExPRlNfRU5EX1RSRUU6CisJCWFzc2VydChvYmotPnR5cGUgPT0gT0JKX1RSRUUpOworCQlmaWx0ZXJfZGF0YS0+Y3VycmVudF9kZXB0aC0tOworCQlyZXR1cm4gTE9GUl9aRVJPOworCisJY2FzZSBMT0ZTX0JMT0I6CisJCWZpbHRlcl90cmVlc191cGRhdGVfb21pdHMob2JqLCBvbWl0cywgaW5jbHVkZV9pdCk7CisJCXJldHVybiBpbmNsdWRlX2l0ID8gTE9GUl9NQVJLX1NFRU4gfCBMT0ZSX0RPX1NIT1cgOiBMT0ZSX1pFUk87CisKKwljYXNlIExPRlNfQkVHSU5fVFJFRToKKwkJc2Vlbl9pbmZvID0gb2lkbWFwX2dldCgKKwkJCSZmaWx0ZXJfZGF0YS0+c2Vlbl9hdF9kZXB0aCwgJm9iai0+b2lkKTsKKwkJaWYgKCFzZWVuX2luZm8pIHsKKwkJCXNlZW5faW5mbyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpzZWVuX2luZm8pKTsKKwkJCW9pZGNweSgmc2Vlbl9pbmZvLT5iYXNlLm9pZCwgJm9iai0+b2lkKTsKKwkJCXNlZW5faW5mby0+ZGVwdGggPSBmaWx0ZXJfZGF0YS0+Y3VycmVudF9kZXB0aDsKKwkJCW9pZG1hcF9wdXQoJmZpbHRlcl9kYXRhLT5zZWVuX2F0X2RlcHRoLCBzZWVuX2luZm8pOworCQkJYWxyZWFkeV9zZWVuID0gMDsKKwkJfSBlbHNlIHsKKwkJCWFscmVhZHlfc2VlbiA9CisJCQkJZmlsdGVyX2RhdGEtPmN1cnJlbnRfZGVwdGggPj0gc2Vlbl9pbmZvLT5kZXB0aDsKKwkJfQorCisJCWlmIChhbHJlYWR5X3NlZW4pIHsKKwkJCWZpbHRlcl9yZXMgPSBMT0ZSX1NLSVBfVFJFRTsKKwkJfSBlbHNlIHsKKwkJCWludCBiZWVuX29taXR0ZWQgPSBmaWx0ZXJfdHJlZXNfdXBkYXRlX29taXRzKAorCQkJCW9iaiwgb21pdHMsIGluY2x1ZGVfaXQpOworCQkJc2Vlbl9pbmZvLT5kZXB0aCA9IGZpbHRlcl9kYXRhLT5jdXJyZW50X2RlcHRoOworCisJCQlpZiAoaW5jbHVkZV9pdCkKKwkJCQlmaWx0ZXJfcmVzID0gTE9GUl9ET19TSE9XOworCQkJZWxzZSBpZiAob21pdHMgJiYgIWJlZW5fb21pdHRlZCkKKwkJCQkvKgorCQkJCSAqIE11c3QgdXBkYXRlIG9taXQgaW5mb3JtYXRpb24gb2YgY2hpbGRyZW4KKwkJCQkgKiByZWN1cnNpdmVseTsgdGhleSBoYXZlIG5vdCBiZWVuIG9taXR0ZWQgeWV0LgorCQkJCSAqLworCQkJCWZpbHRlcl9yZXMgPSBMT0ZSX1pFUk87CisJCQllbHNlCisJCQkJZmlsdGVyX3JlcyA9IExPRlJfU0tJUF9UUkVFOworCQl9CisKKwkJZmlsdGVyX2RhdGEtPmN1cnJlbnRfZGVwdGgrKzsKKwkJcmV0dXJuIGZpbHRlcl9yZXM7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaWx0ZXJfdHJlZXNfZnJlZSh2b2lkICpmaWx0ZXJfZGF0YSkgeworCXN0cnVjdCBmaWx0ZXJfdHJlZXNfZGVwdGhfZGF0YSAqZCA9IGZpbHRlcl9kYXRhOworCWlmICghZCkKKwkJcmV0dXJuOworCW9pZG1hcF9mcmVlKCZkLT5zZWVuX2F0X2RlcHRoLCAxKTsKKwlmcmVlKGQpOworfQorCitzdGF0aWMgdm9pZCBmaWx0ZXJfdHJlZXNfZGVwdGhfX2luaXQoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMsCisJc3RydWN0IGZpbHRlciAqZmlsdGVyKQoreworCXN0cnVjdCBmaWx0ZXJfdHJlZXNfZGVwdGhfZGF0YSAqZCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkKSk7CisJb2lkbWFwX2luaXQoJmQtPnNlZW5fYXRfZGVwdGgsIDApOworCWQtPmV4Y2x1ZGVfZGVwdGggPSBmaWx0ZXJfb3B0aW9ucy0+dHJlZV9leGNsdWRlX2RlcHRoOworCWQtPmN1cnJlbnRfZGVwdGggPSAwOworCisJZmlsdGVyLT5maWx0ZXJfZGF0YSA9IGQ7CisJZmlsdGVyLT5maWx0ZXJfb2JqZWN0X2ZuID0gZmlsdGVyX3RyZWVzX2RlcHRoOworCWZpbHRlci0+ZnJlZV9mbiA9IGZpbHRlcl90cmVlc19mcmVlOworfQorCisvKgorICogQSBmaWx0ZXIgZm9yIGxpc3Qtb2JqZWN0cyB0byBvbWl0IGxhcmdlIGJsb2JzLgorICogQW5kIHRvIE9QVElPTkFMTFkgY29sbGVjdCBhIGxpc3Qgb2YgdGhlIG9taXR0ZWQgT0lEcy4KKyAqLworc3RydWN0IGZpbHRlcl9ibG9ic19saW1pdF9kYXRhIHsKKwl1bnNpZ25lZCBsb25nIG1heF9ieXRlczsKK307CisKK3N0YXRpYyBlbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfcmVzdWx0IGZpbHRlcl9ibG9ic19saW1pdCgKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwllbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfc2l0dWF0aW9uIGZpbHRlcl9zaXR1YXRpb24sCisJc3RydWN0IG9iamVjdCAqb2JqLAorCWNvbnN0IGNoYXIgKnBhdGhuYW1lLAorCWNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCXN0cnVjdCBvaWRzZXQgKm9taXRzLAorCXZvaWQgKmZpbHRlcl9kYXRhXykKK3sKKwlzdHJ1Y3QgZmlsdGVyX2Jsb2JzX2xpbWl0X2RhdGEgKmZpbHRlcl9kYXRhID0gZmlsdGVyX2RhdGFfOworCXVuc2lnbmVkIGxvbmcgb2JqZWN0X2xlbmd0aDsKKwllbnVtIG9iamVjdF90eXBlIHQ7CisKKwlzd2l0Y2ggKGZpbHRlcl9zaXR1YXRpb24pIHsKKwlkZWZhdWx0OgorCQlCVUcoInVua25vd24gZmlsdGVyX3NpdHVhdGlvbjogJWQiLCBmaWx0ZXJfc2l0dWF0aW9uKTsKKworCWNhc2UgTE9GU19CRUdJTl9UUkVFOgorCQlhc3NlcnQob2JqLT50eXBlID09IE9CSl9UUkVFKTsKKwkJLyogYWx3YXlzIGluY2x1ZGUgYWxsIHRyZWUgb2JqZWN0cyAqLworCQlyZXR1cm4gTE9GUl9NQVJLX1NFRU4gfCBMT0ZSX0RPX1NIT1c7CisKKwljYXNlIExPRlNfRU5EX1RSRUU6CisJCWFzc2VydChvYmotPnR5cGUgPT0gT0JKX1RSRUUpOworCQlyZXR1cm4gTE9GUl9aRVJPOworCisJY2FzZSBMT0ZTX0JMT0I6CisJCWFzc2VydChvYmotPnR5cGUgPT0gT0JKX0JMT0IpOworCQlhc3NlcnQoKG9iai0+ZmxhZ3MgJiBTRUVOKSA9PSAwKTsKKworCQl0ID0gb2lkX29iamVjdF9pbmZvKHIsICZvYmotPm9pZCwgJm9iamVjdF9sZW5ndGgpOworCQlpZiAodCAhPSBPQkpfQkxPQikgeyAvKiBwcm9iYWJseSBPQkpfTk9ORSAqLworCQkJLyoKKwkJCSAqIFdlIERPIE5PVCBoYXZlIHRoZSBibG9iIGxvY2FsbHksIHNvIHdlIGNhbm5vdAorCQkJICogYXBwbHkgdGhlIHNpemUgZmlsdGVyIGNyaXRlcmlhLiAgQmUgY29uc2VydmF0aXZlCisJCQkgKiBhbmQgZm9yY2Ugc2hvdyBpdCAoYW5kIGxldCB0aGUgY2FsbGVyIGRlYWwgd2l0aAorCQkJICogdGhlIGFtYmlndWl0eSkuCisJCQkgKi8KKwkJCWdvdG8gaW5jbHVkZV9pdDsKKwkJfQorCisJCWlmIChvYmplY3RfbGVuZ3RoIDwgZmlsdGVyX2RhdGEtPm1heF9ieXRlcykKKwkJCWdvdG8gaW5jbHVkZV9pdDsKKworCQlpZiAob21pdHMpCisJCQlvaWRzZXRfaW5zZXJ0KG9taXRzLCAmb2JqLT5vaWQpOworCQlyZXR1cm4gTE9GUl9NQVJLX1NFRU47IC8qIGJ1dCBub3QgTE9GUl9ET19TSE9XIChoYXJkIG9taXQpICovCisJfQorCitpbmNsdWRlX2l0OgorCWlmIChvbWl0cykKKwkJb2lkc2V0X3JlbW92ZShvbWl0cywgJm9iai0+b2lkKTsKKwlyZXR1cm4gTE9GUl9NQVJLX1NFRU4gfCBMT0ZSX0RPX1NIT1c7Cit9CisKK3N0YXRpYyB2b2lkIGZpbHRlcl9ibG9ic19saW1pdF9faW5pdCgKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucywKKwlzdHJ1Y3QgZmlsdGVyICpmaWx0ZXIpCit7CisJc3RydWN0IGZpbHRlcl9ibG9ic19saW1pdF9kYXRhICpkID0geGNhbGxvYygxLCBzaXplb2YoKmQpKTsKKwlkLT5tYXhfYnl0ZXMgPSBmaWx0ZXJfb3B0aW9ucy0+YmxvYl9saW1pdF92YWx1ZTsKKworCWZpbHRlci0+ZmlsdGVyX2RhdGEgPSBkOworCWZpbHRlci0+ZmlsdGVyX29iamVjdF9mbiA9IGZpbHRlcl9ibG9ic19saW1pdDsKKwlmaWx0ZXItPmZyZWVfZm4gPSBmcmVlOworfQorCisvKgorICogQSBmaWx0ZXIgZHJpdmVuIGJ5IGEgc3BhcnNlLWNoZWNrb3V0IHNwZWNpZmljYXRpb24gdG8gb25seQorICogaW5jbHVkZSBibG9icyB0aGF0IGEgc3BhcnNlIGNoZWNrb3V0IHdvdWxkIHBvcHVsYXRlLgorICoKKyAqIFRoZSBzcGFyc2UtY2hlY2tvdXQgc3BlYyBjYW4gYmUgbG9hZGVkIGZyb20gYSBibG9iIHdpdGggdGhlCisgKiBnaXZlbiBPSUQgb3IgZnJvbSBhIGxvY2FsIHBhdGhuYW1lLiAgV2UgYWxsb3cgYW4gT0lEIGJlY2F1c2UKKyAqIHRoZSByZXBvIG1heSBiZSBiYXJlIG9yIHdlIG1heSBiZSBkb2luZyB0aGUgZmlsdGVyaW5nIG9uIHRoZQorICogc2VydmVyLgorICovCitzdHJ1Y3QgZnJhbWUgeworCS8qCisJICogZGVmYXVsdF9tYXRjaCBpcyB0aGUgdXN1YWwgZGVmYXVsdCBpbmNsdWRlL2V4Y2x1ZGUgdmFsdWUgdGhhdAorCSAqIHNob3VsZCBiZSBpbmhlcml0ZWQgYXMgd2UgcmVjdXJzZSBpbnRvIGRpcmVjdG9yaWVzIGJhc2VkCisJICogdXBvbiBwYXR0ZXJuIG1hdGNoaW5nIG9mIHRoZSBkaXJlY3RvcnkgaXRzZWxmIG9yIG9mIGEKKwkgKiBjb250YWluaW5nIGRpcmVjdG9yeS4KKwkgKi8KKwllbnVtIHBhdHRlcm5fbWF0Y2hfcmVzdWx0IGRlZmF1bHRfbWF0Y2g7CisKKwkvKgorCSAqIDEgaWYgdGhlIGRpcmVjdG9yeSAocmVjdXJzaXZlbHkpIGNvbnRhaW5zIGFueSBwcm92aXNpb25hbGx5CisJICogb21pdHRlZCBvYmplY3RzLgorCSAqCisJICogMCBpZiBldmVyeXRoaW5nIChyZWN1cnNpdmVseSkgY29udGFpbmVkIGluIHRoaXMgZGlyZWN0b3J5CisJICogaGFzIGJlZW4gZXhwbGljaXRseSBpbmNsdWRlZCAoU0hPV04pIGluIHRoZSByZXN1bHQgYW5kCisJICogdGhlIGRpcmVjdG9yeSBtYXkgYmUgc2hvcnQtY3V0IGxhdGVyIGluIHRoZSB0cmF2ZXJzYWwuCisJICovCisJdW5zaWduZWQgY2hpbGRfcHJvdl9vbWl0IDogMTsKK307CisKK3N0cnVjdCBmaWx0ZXJfc3BhcnNlX2RhdGEgeworCXN0cnVjdCBwYXR0ZXJuX2xpc3QgcGw7CisKKwlzaXplX3QgbnIsIGFsbG9jOworCXN0cnVjdCBmcmFtZSAqYXJyYXlfZnJhbWU7Cit9OworCitzdGF0aWMgZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX3Jlc3VsdCBmaWx0ZXJfc3BhcnNlKAorCXN0cnVjdCByZXBvc2l0b3J5ICpyLAorCWVudW0gbGlzdF9vYmplY3RzX2ZpbHRlcl9zaXR1YXRpb24gZmlsdGVyX3NpdHVhdGlvbiwKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJY29uc3QgY2hhciAqcGF0aG5hbWUsCisJY29uc3QgY2hhciAqZmlsZW5hbWUsCisJc3RydWN0IG9pZHNldCAqb21pdHMsCisJdm9pZCAqZmlsdGVyX2RhdGFfKQoreworCXN0cnVjdCBmaWx0ZXJfc3BhcnNlX2RhdGEgKmZpbHRlcl9kYXRhID0gZmlsdGVyX2RhdGFfOworCWludCBkdHlwZTsKKwlzdHJ1Y3QgZnJhbWUgKmZyYW1lOworCWVudW0gcGF0dGVybl9tYXRjaF9yZXN1bHQgbWF0Y2g7CisKKwlzd2l0Y2ggKGZpbHRlcl9zaXR1YXRpb24pIHsKKwlkZWZhdWx0OgorCQlCVUcoInVua25vd24gZmlsdGVyX3NpdHVhdGlvbjogJWQiLCBmaWx0ZXJfc2l0dWF0aW9uKTsKKworCWNhc2UgTE9GU19CRUdJTl9UUkVFOgorCQlhc3NlcnQob2JqLT50eXBlID09IE9CSl9UUkVFKTsKKwkJZHR5cGUgPSBEVF9ESVI7CisJCW1hdGNoID0gcGF0aF9tYXRjaGVzX3BhdHRlcm5fbGlzdChwYXRobmFtZSwgc3RybGVuKHBhdGhuYW1lKSwKKwkJCQkJCSAgZmlsZW5hbWUsICZkdHlwZSwgJmZpbHRlcl9kYXRhLT5wbCwKKwkJCQkJCSAgci0+aW5kZXgpOworCQlpZiAobWF0Y2ggPT0gVU5ERUNJREVEKQorCQkJbWF0Y2ggPSBmaWx0ZXJfZGF0YS0+YXJyYXlfZnJhbWVbZmlsdGVyX2RhdGEtPm5yIC0gMV0uZGVmYXVsdF9tYXRjaDsKKworCQlBTExPQ19HUk9XKGZpbHRlcl9kYXRhLT5hcnJheV9mcmFtZSwgZmlsdGVyX2RhdGEtPm5yICsgMSwKKwkJCSAgIGZpbHRlcl9kYXRhLT5hbGxvYyk7CisJCWZpbHRlcl9kYXRhLT5hcnJheV9mcmFtZVtmaWx0ZXJfZGF0YS0+bnJdLmRlZmF1bHRfbWF0Y2ggPSBtYXRjaDsKKwkJZmlsdGVyX2RhdGEtPmFycmF5X2ZyYW1lW2ZpbHRlcl9kYXRhLT5ucl0uY2hpbGRfcHJvdl9vbWl0ID0gMDsKKwkJZmlsdGVyX2RhdGEtPm5yKys7CisKKwkJLyoKKwkJICogQSBkaXJlY3Rvcnkgd2l0aCB0aGlzIHRyZWUgT0lEIG1heSBhcHBlYXIgaW4gbXVsdGlwbGUKKwkJICogcGxhY2VzIGluIHRoZSB0cmVlLiAoVGhpbmsgb2YgYSBkaXJlY3RvcnkgbW92ZSBvciBjb3B5LAorCQkgKiB3aXRoIG5vIG90aGVyIGNoYW5nZXMsIHNvIHRoZSBPSUQgaXMgdGhlIHNhbWUsIGJ1dCB0aGUKKwkJICogZnVsbCBwYXRobmFtZXMgb2Ygb2JqZWN0cyB3aXRoaW4gdGhpcyBkaXJlY3RvcnkgYXJlIG5ldworCQkgKiBhbmQgbWF5IG1hdGNoIGlzX2V4Y2x1ZGVkKCkgcGF0dGVybnMgZGlmZmVyZW50bHkuKQorCQkgKiBTbyB3ZSBjYW5ub3QgbWFyayB0aGlzIGRpcmVjdG9yeSBhcyBTRUVOICh5ZXQpLCBzaW5jZQorCQkgKiB0aGF0IHdpbGwgcHJldmVudCBwcm9jZXNzX3RyZWUoKSBmcm9tIHJldmlzaXRpbmcgdGhpcworCQkgKiB0cmVlIG9iamVjdCB3aXRoIG90aGVyIHBhdGhuYW1lIHByZWZpeGVzLgorCQkgKgorCQkgKiBPbmx5IF9ET19TSE9XIHRoZSB0cmVlIG9iamVjdCB0aGUgZmlyc3QgdGltZSB3ZSB2aXNpdAorCQkgKiB0aGlzIHRyZWUgb2JqZWN0LgorCQkgKgorCQkgKiBXZSBhbHdheXMgc2hvdyBhbGwgdHJlZSBvYmplY3RzLiAgQSBmdXR1cmUgb3B0aW1pemF0aW9uCisJCSAqIG1heSB3YW50IHRvIGF0dGVtcHQgdG8gbmFycm93IHRoaXMuCisJCSAqLworCQlpZiAob2JqLT5mbGFncyAmIEZJTFRFUl9TSE9XTl9CVVRfUkVWSVNJVCkKKwkJCXJldHVybiBMT0ZSX1pFUk87CisJCW9iai0+ZmxhZ3MgfD0gRklMVEVSX1NIT1dOX0JVVF9SRVZJU0lUOworCQlyZXR1cm4gTE9GUl9ET19TSE9XOworCisJY2FzZSBMT0ZTX0VORF9UUkVFOgorCQlhc3NlcnQob2JqLT50eXBlID09IE9CSl9UUkVFKTsKKwkJYXNzZXJ0KGZpbHRlcl9kYXRhLT5uciA+IDEpOworCisJCWZyYW1lID0gJmZpbHRlcl9kYXRhLT5hcnJheV9mcmFtZVstLWZpbHRlcl9kYXRhLT5ucl07CisKKwkJLyoKKwkJICogVGVsbCBvdXIgcGFyZW50IGRpcmVjdG9yeSBpZiBhbnkgb2Ygb3VyIGNoaWxkcmVuIHdlcmUKKwkJICogcHJvdmlzaW9uYWxseSBvbWl0dGVkLgorCQkgKi8KKwkJZmlsdGVyX2RhdGEtPmFycmF5X2ZyYW1lW2ZpbHRlcl9kYXRhLT5uciAtIDFdLmNoaWxkX3Byb3Zfb21pdCB8PQorCQkJZnJhbWUtPmNoaWxkX3Byb3Zfb21pdDsKKworCQkvKgorCQkgKiBJZiB0aGVyZSBhcmUgTk8gcHJvdmlzaW9uYWxseSBvbWl0dGVkIGNoaWxkIG9iamVjdHMgKEFMTCBjaGlsZAorCQkgKiBvYmplY3RzIGluIHRoaXMgZm9sZGVyIHdlcmUgSU5DTFVERUQpLCB0aGVuIHdlIGNhbiBtYXJrIHRoZQorCQkgKiBmb2xkZXIgYXMgU0VFTiAoc28gd2Ugd2lsbCBub3QgaGF2ZSB0byByZXZpc2l0IGl0IGFnYWluKS4KKwkJICovCisJCWlmICghZnJhbWUtPmNoaWxkX3Byb3Zfb21pdCkKKwkJCXJldHVybiBMT0ZSX01BUktfU0VFTjsKKwkJcmV0dXJuIExPRlJfWkVSTzsKKworCWNhc2UgTE9GU19CTE9COgorCQlhc3NlcnQob2JqLT50eXBlID09IE9CSl9CTE9CKTsKKwkJYXNzZXJ0KChvYmotPmZsYWdzICYgU0VFTikgPT0gMCk7CisKKwkJZnJhbWUgPSAmZmlsdGVyX2RhdGEtPmFycmF5X2ZyYW1lW2ZpbHRlcl9kYXRhLT5uciAtIDFdOworCisJCWR0eXBlID0gRFRfUkVHOworCQltYXRjaCA9IHBhdGhfbWF0Y2hlc19wYXR0ZXJuX2xpc3QocGF0aG5hbWUsIHN0cmxlbihwYXRobmFtZSksCisJCQkJCSAgICBmaWxlbmFtZSwgJmR0eXBlLCAmZmlsdGVyX2RhdGEtPnBsLAorCQkJCQkgICAgci0+aW5kZXgpOworCQlpZiAobWF0Y2ggPT0gVU5ERUNJREVEKQorCQkJbWF0Y2ggPSBmcmFtZS0+ZGVmYXVsdF9tYXRjaDsKKwkJaWYgKG1hdGNoID09IE1BVENIRUQpIHsKKwkJCWlmIChvbWl0cykKKwkJCQlvaWRzZXRfcmVtb3ZlKG9taXRzLCAmb2JqLT5vaWQpOworCQkJcmV0dXJuIExPRlJfTUFSS19TRUVOIHwgTE9GUl9ET19TSE9XOworCQl9CisKKwkJLyoKKwkJICogUHJvdmlzaW9uYWxseSBvbWl0IGl0LiAgV2UndmUgYWxyZWFkeSBlc3RhYmxpc2hlZCB0aGF0CisJCSAqIHRoaXMgcGF0aG5hbWUgaXMgbm90IGluIHRoZSBzcGFyc2UtY2hlY2tvdXQgc3BlY2lmaWNhdGlvbgorCQkgKiB3aXRoIHRoZSBDVVJSRU5UIHBhdGhuYW1lLCBzbyB3ZSAqV0FOVCogdG8gb21pdCB0aGlzIGJsb2IuCisJCSAqCisJCSAqIEhvd2V2ZXIsIGEgcGF0aG5hbWUgZWxzZXdoZXJlIGluIHRoZSB0cmVlIG1heSBhbHNvCisJCSAqIHJlZmVyZW5jZSB0aGlzIHNhbWUgYmxvYiwgc28gd2UgY2Fubm90IHJlamVjdCBpdCB5ZXQuCisJCSAqIExlYXZlIHRoZSBMT0ZSXyBiaXRzIHVuc2V0IHNvIHRoYXQgaWYgdGhlIGJsb2IgYXBwZWFycworCQkgKiBhZ2FpbiBpbiB0aGUgdHJhdmVyc2FsLCB3ZSB3aWxsIGJlIGFza2VkIGFnYWluLgorCQkgKi8KKwkJaWYgKG9taXRzKQorCQkJb2lkc2V0X2luc2VydChvbWl0cywgJm9iai0+b2lkKTsKKworCQkvKgorCQkgKiBSZW1lbWJlciB0aGF0IGF0IGxlYXN0IDEgYmxvYiBpbiB0aGlzIHRyZWUgd2FzCisJCSAqIHByb3Zpc2lvbmFsbHkgb21pdHRlZC4gIFRoaXMgcHJldmVudHMgdXMgZnJvbSBzaG9ydAorCQkgKiBjdXR0aW5nIHRoZSB0cmVlIGluIGZ1dHVyZSBpdGVyYXRpb25zLgorCQkgKi8KKwkJZnJhbWUtPmNoaWxkX3Byb3Zfb21pdCA9IDE7CisJCXJldHVybiBMT0ZSX1pFUk87CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGZpbHRlcl9zcGFyc2VfZnJlZSh2b2lkICpmaWx0ZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgZmlsdGVyX3NwYXJzZV9kYXRhICpkID0gZmlsdGVyX2RhdGE7CisJZnJlZShkLT5hcnJheV9mcmFtZSk7CisJZnJlZShkKTsKK30KKworc3RhdGljIHZvaWQgZmlsdGVyX3NwYXJzZV9vaWRfX2luaXQoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMsCisJc3RydWN0IGZpbHRlciAqZmlsdGVyKQoreworCXN0cnVjdCBmaWx0ZXJfc3BhcnNlX2RhdGEgKmQgPSB4Y2FsbG9jKDEsIHNpemVvZigqZCkpOworCXN0cnVjdCBvYmplY3RfY29udGV4dCBvYzsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHNwYXJzZV9vaWQ7CisKKwlpZiAoZ2V0X29pZF93aXRoX2NvbnRleHQodGhlX3JlcG9zaXRvcnksCisJCQkJIGZpbHRlcl9vcHRpb25zLT5zcGFyc2Vfb2lkX25hbWUsCisJCQkJIEdFVF9PSURfQkxPQiwgJnNwYXJzZV9vaWQsICZvYykpCisJCWRpZShfKCJ1bmFibGUgdG8gYWNjZXNzIHNwYXJzZSBibG9iIGluICclcyciKSwKKwkJICAgIGZpbHRlcl9vcHRpb25zLT5zcGFyc2Vfb2lkX25hbWUpOworCWlmIChhZGRfcGF0dGVybnNfZnJvbV9ibG9iX3RvX2xpc3QoJnNwYXJzZV9vaWQsICIiLCAwLCAmZC0+cGwpIDwgMCkKKwkJZGllKF8oInVuYWJsZSB0byBwYXJzZSBzcGFyc2UgZmlsdGVyIGRhdGEgaW4gJXMiKSwKKwkJICAgIG9pZF90b19oZXgoJnNwYXJzZV9vaWQpKTsKKworCUFMTE9DX0dST1coZC0+YXJyYXlfZnJhbWUsIGQtPm5yICsgMSwgZC0+YWxsb2MpOworCWQtPmFycmF5X2ZyYW1lW2QtPm5yXS5kZWZhdWx0X21hdGNoID0gMDsgLyogZGVmYXVsdCB0byBpbmNsdWRlICovCisJZC0+YXJyYXlfZnJhbWVbZC0+bnJdLmNoaWxkX3Byb3Zfb21pdCA9IDA7CisJZC0+bnIrKzsKKworCWZpbHRlci0+ZmlsdGVyX2RhdGEgPSBkOworCWZpbHRlci0+ZmlsdGVyX29iamVjdF9mbiA9IGZpbHRlcl9zcGFyc2U7CisJZmlsdGVyLT5mcmVlX2ZuID0gZmlsdGVyX3NwYXJzZV9mcmVlOworfQorCisvKiBBIGZpbHRlciB3aGljaCBvbmx5IHNob3dzIG9iamVjdHMgc2hvd24gYnkgYWxsIHN1Yi1maWx0ZXJzLiAqLworc3RydWN0IGNvbWJpbmVfZmlsdGVyX2RhdGEgeworCXN0cnVjdCBzdWJmaWx0ZXIgKnN1YjsKKwlzaXplX3QgbnI7Cit9OworCitzdGF0aWMgZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX3Jlc3VsdCBwcm9jZXNzX3N1YmZpbHRlcigKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwllbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfc2l0dWF0aW9uIGZpbHRlcl9zaXR1YXRpb24sCisJc3RydWN0IG9iamVjdCAqb2JqLAorCWNvbnN0IGNoYXIgKnBhdGhuYW1lLAorCWNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCXN0cnVjdCBzdWJmaWx0ZXIgKnN1YikKK3sKKwllbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfcmVzdWx0IHJlc3VsdDsKKworCS8qCisJICogQ2hlY2sgYW5kIHVwZGF0ZSBpc19za2lwcGluZ190cmVlIGJlZm9yZSBvaWRzZXRfY29udGFpbnMgc28KKwkgKiB0aGF0IGlzX3NraXBwaW5nX3RyZWUgZ2V0cyB1bnNldCBldmVuIHdoZW4gdGhlIG9iamVjdCBpcworCSAqIG1hcmtlZCBhcyBzZWVuLiAgQXMgb2YgdGhpcyB3cml0aW5nLCBubyBmaWx0ZXIgdXNlcworCSAqIExPRlJfTUFSS19TRUVOIG9uIHRyZWVzIHRoYXQgYWxzbyB1c2VzIExPRlJfU0tJUF9UUkVFLCBzbyB0aGUKKwkgKiBvcmRlcmluZyBpcyBvbmx5IHRoZW9yZXRpY2FsbHkgaW1wb3J0YW50LiBCZSBjYXV0aW91cyBpZiB5b3UKKwkgKiBjaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZSBiZWxvdyBjaGVja3MgYW5kIG1vcmUgZmlsdGVycyBoYXZlCisJICogYmVlbiBhZGRlZCEKKwkgKi8KKwlpZiAoc3ViLT5pc19za2lwcGluZ190cmVlKSB7CisJCWlmIChmaWx0ZXJfc2l0dWF0aW9uID09IExPRlNfRU5EX1RSRUUgJiYKKwkJICAgIG9pZGVxKCZvYmotPm9pZCwgJnN1Yi0+c2tpcF90cmVlKSkKKwkJCXN1Yi0+aXNfc2tpcHBpbmdfdHJlZSA9IDA7CisJCWVsc2UKKwkJCXJldHVybiBMT0ZSX1pFUk87CisJfQorCWlmIChvaWRzZXRfY29udGFpbnMoJnN1Yi0+c2VlbiwgJm9iai0+b2lkKSkKKwkJcmV0dXJuIExPRlJfWkVSTzsKKworCXJlc3VsdCA9IGxpc3Rfb2JqZWN0c19maWx0ZXJfX2ZpbHRlcl9vYmplY3QoCisJCXIsIGZpbHRlcl9zaXR1YXRpb24sIG9iaiwgcGF0aG5hbWUsIGZpbGVuYW1lLCBzdWItPmZpbHRlcik7CisKKwlpZiAocmVzdWx0ICYgTE9GUl9NQVJLX1NFRU4pCisJCW9pZHNldF9pbnNlcnQoJnN1Yi0+c2VlbiwgJm9iai0+b2lkKTsKKworCWlmIChyZXN1bHQgJiBMT0ZSX1NLSVBfVFJFRSkgeworCQlzdWItPmlzX3NraXBwaW5nX3RyZWUgPSAxOworCQlzdWItPnNraXBfdHJlZSA9IG9iai0+b2lkOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBlbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfcmVzdWx0IGZpbHRlcl9jb21iaW5lKAorCXN0cnVjdCByZXBvc2l0b3J5ICpyLAorCWVudW0gbGlzdF9vYmplY3RzX2ZpbHRlcl9zaXR1YXRpb24gZmlsdGVyX3NpdHVhdGlvbiwKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJY29uc3QgY2hhciAqcGF0aG5hbWUsCisJY29uc3QgY2hhciAqZmlsZW5hbWUsCisJc3RydWN0IG9pZHNldCAqb21pdHMsCisJdm9pZCAqZmlsdGVyX2RhdGEpCit7CisJc3RydWN0IGNvbWJpbmVfZmlsdGVyX2RhdGEgKmQgPSBmaWx0ZXJfZGF0YTsKKwllbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfcmVzdWx0IGNvbWJpbmVkX3Jlc3VsdCA9CisJCUxPRlJfRE9fU0hPVyB8IExPRlJfTUFSS19TRUVOIHwgTE9GUl9TS0lQX1RSRUU7CisJc2l6ZV90IHN1YjsKKworCWZvciAoc3ViID0gMDsgc3ViIDwgZC0+bnI7IHN1YisrKSB7CisJCWVudW0gbGlzdF9vYmplY3RzX2ZpbHRlcl9yZXN1bHQgc3ViX3Jlc3VsdCA9IHByb2Nlc3Nfc3ViZmlsdGVyKAorCQkJciwgZmlsdGVyX3NpdHVhdGlvbiwgb2JqLCBwYXRobmFtZSwgZmlsZW5hbWUsCisJCQkmZC0+c3ViW3N1Yl0pOworCQlpZiAoIShzdWJfcmVzdWx0ICYgTE9GUl9ET19TSE9XKSkKKwkJCWNvbWJpbmVkX3Jlc3VsdCAmPSB+TE9GUl9ET19TSE9XOworCQlpZiAoIShzdWJfcmVzdWx0ICYgTE9GUl9NQVJLX1NFRU4pKQorCQkJY29tYmluZWRfcmVzdWx0ICY9IH5MT0ZSX01BUktfU0VFTjsKKwkJaWYgKCFkLT5zdWJbc3ViXS5pc19za2lwcGluZ190cmVlKQorCQkJY29tYmluZWRfcmVzdWx0ICY9IH5MT0ZSX1NLSVBfVFJFRTsKKwl9CisKKwlyZXR1cm4gY29tYmluZWRfcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBmaWx0ZXJfY29tYmluZV9fZnJlZSh2b2lkICpmaWx0ZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgY29tYmluZV9maWx0ZXJfZGF0YSAqZCA9IGZpbHRlcl9kYXRhOworCXNpemVfdCBzdWI7CisJZm9yIChzdWIgPSAwOyBzdWIgPCBkLT5ucjsgc3ViKyspIHsKKwkJbGlzdF9vYmplY3RzX2ZpbHRlcl9fZnJlZShkLT5zdWJbc3ViXS5maWx0ZXIpOworCQlvaWRzZXRfY2xlYXIoJmQtPnN1YltzdWJdLnNlZW4pOworCQlpZiAoZC0+c3ViW3N1Yl0ub21pdHMuc2V0LnNpemUpCisJCQlCVUcoImV4cGVjdGVkIG9pZHNldCB0byBiZSBjbGVhcmVkIGFscmVhZHkiKTsKKwl9CisJZnJlZShkLT5zdWIpOworfQorCitzdGF0aWMgdm9pZCBhZGRfYWxsKHN0cnVjdCBvaWRzZXQgKmRlc3QsIHN0cnVjdCBvaWRzZXQgKnNyYykgeworCXN0cnVjdCBvaWRzZXRfaXRlciBpdGVyOworCXN0cnVjdCBvYmplY3RfaWQgKnNyY19vaWQ7CisKKwlvaWRzZXRfaXRlcl9pbml0KHNyYywgJml0ZXIpOworCXdoaWxlICgoc3JjX29pZCA9IG9pZHNldF9pdGVyX25leHQoJml0ZXIpKSAhPSBOVUxMKQorCQlvaWRzZXRfaW5zZXJ0KGRlc3QsIHNyY19vaWQpOworfQorCitzdGF0aWMgdm9pZCBmaWx0ZXJfY29tYmluZV9fZmluYWxpemVfb21pdHMoCisJc3RydWN0IG9pZHNldCAqb21pdHMsCisJdm9pZCAqZmlsdGVyX2RhdGEpCit7CisJc3RydWN0IGNvbWJpbmVfZmlsdGVyX2RhdGEgKmQgPSBmaWx0ZXJfZGF0YTsKKwlzaXplX3Qgc3ViOworCisJZm9yIChzdWIgPSAwOyBzdWIgPCBkLT5ucjsgc3ViKyspIHsKKwkJYWRkX2FsbChvbWl0cywgJmQtPnN1YltzdWJdLm9taXRzKTsKKwkJb2lkc2V0X2NsZWFyKCZkLT5zdWJbc3ViXS5vbWl0cyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaWx0ZXJfY29tYmluZV9faW5pdCgKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucywKKwlzdHJ1Y3QgZmlsdGVyKiBmaWx0ZXIpCit7CisJc3RydWN0IGNvbWJpbmVfZmlsdGVyX2RhdGEgKmQgPSB4Y2FsbG9jKDEsIHNpemVvZigqZCkpOworCXNpemVfdCBzdWI7CisKKwlkLT5uciA9IGZpbHRlcl9vcHRpb25zLT5zdWJfbnI7CisJZC0+c3ViID0geGNhbGxvYyhkLT5uciwgc2l6ZW9mKCpkLT5zdWIpKTsKKwlmb3IgKHN1YiA9IDA7IHN1YiA8IGQtPm5yOyBzdWIrKykKKwkJZC0+c3ViW3N1Yl0uZmlsdGVyID0gbGlzdF9vYmplY3RzX2ZpbHRlcl9faW5pdCgKKwkJCWZpbHRlci0+b21pdHMgPyAmZC0+c3ViW3N1Yl0ub21pdHMgOiBOVUxMLAorCQkJJmZpbHRlcl9vcHRpb25zLT5zdWJbc3ViXSk7CisKKwlmaWx0ZXItPmZpbHRlcl9kYXRhID0gZDsKKwlmaWx0ZXItPmZpbHRlcl9vYmplY3RfZm4gPSBmaWx0ZXJfY29tYmluZTsKKwlmaWx0ZXItPmZyZWVfZm4gPSBmaWx0ZXJfY29tYmluZV9fZnJlZTsKKwlmaWx0ZXItPmZpbmFsaXplX29taXRzX2ZuID0gZmlsdGVyX2NvbWJpbmVfX2ZpbmFsaXplX29taXRzOworfQorCit0eXBlZGVmIHZvaWQgKCpmaWx0ZXJfaW5pdF9mbikoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMsCisJc3RydWN0IGZpbHRlciAqZmlsdGVyKTsKKworLyoKKyAqIE11c3QgbWF0Y2ggImVudW0gbGlzdF9vYmplY3RzX2ZpbHRlcl9jaG9pY2UiLgorICovCitzdGF0aWMgZmlsdGVyX2luaXRfZm4gc19maWx0ZXJzW10gPSB7CisJTlVMTCwKKwlmaWx0ZXJfYmxvYnNfbm9uZV9faW5pdCwKKwlmaWx0ZXJfYmxvYnNfbGltaXRfX2luaXQsCisJZmlsdGVyX3RyZWVzX2RlcHRoX19pbml0LAorCWZpbHRlcl9zcGFyc2Vfb2lkX19pbml0LAorCWZpbHRlcl9jb21iaW5lX19pbml0LAorfTsKKworc3RydWN0IGZpbHRlciAqbGlzdF9vYmplY3RzX2ZpbHRlcl9faW5pdCgKKwlzdHJ1Y3Qgb2lkc2V0ICpvbWl0dGVkLAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zKQoreworCXN0cnVjdCBmaWx0ZXIgKmZpbHRlcjsKKwlmaWx0ZXJfaW5pdF9mbiBpbml0X2ZuOworCisJYXNzZXJ0KChzaXplb2Yoc19maWx0ZXJzKSAvIHNpemVvZihzX2ZpbHRlcnNbMF0pKSA9PSBMT0ZDX19DT1VOVCk7CisKKwlpZiAoIWZpbHRlcl9vcHRpb25zKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChmaWx0ZXJfb3B0aW9ucy0+Y2hvaWNlID49IExPRkNfX0NPVU5UKQorCQlCVUcoImludmFsaWQgbGlzdC1vYmplY3RzIGZpbHRlciBjaG9pY2U6ICVkIiwKKwkJICAgIGZpbHRlcl9vcHRpb25zLT5jaG9pY2UpOworCisJaW5pdF9mbiA9IHNfZmlsdGVyc1tmaWx0ZXJfb3B0aW9ucy0+Y2hvaWNlXTsKKwlpZiAoIWluaXRfZm4pCisJCXJldHVybiBOVUxMOworCisJZmlsdGVyID0geGNhbGxvYygxLCBzaXplb2YoKmZpbHRlcikpOworCWZpbHRlci0+b21pdHMgPSBvbWl0dGVkOworCWluaXRfZm4oZmlsdGVyX29wdGlvbnMsIGZpbHRlcik7CisJcmV0dXJuIGZpbHRlcjsKK30KKworZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX3Jlc3VsdCBsaXN0X29iamVjdHNfZmlsdGVyX19maWx0ZXJfb2JqZWN0KAorCXN0cnVjdCByZXBvc2l0b3J5ICpyLAorCWVudW0gbGlzdF9vYmplY3RzX2ZpbHRlcl9zaXR1YXRpb24gZmlsdGVyX3NpdHVhdGlvbiwKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJY29uc3QgY2hhciAqcGF0aG5hbWUsCisJY29uc3QgY2hhciAqZmlsZW5hbWUsCisJc3RydWN0IGZpbHRlciAqZmlsdGVyKQoreworCWlmIChmaWx0ZXIgJiYgKG9iai0+ZmxhZ3MgJiBOT1RfVVNFUl9HSVZFTikpCisJCXJldHVybiBmaWx0ZXItPmZpbHRlcl9vYmplY3RfZm4ociwgZmlsdGVyX3NpdHVhdGlvbiwgb2JqLAorCQkJCQkJcGF0aG5hbWUsIGZpbGVuYW1lLAorCQkJCQkJZmlsdGVyLT5vbWl0cywKKwkJCQkJCWZpbHRlci0+ZmlsdGVyX2RhdGEpOworCS8qCisJICogTm8gZmlsdGVyIGlzIGFjdGl2ZSBvciB1c2VyIGdhdmUgb2JqZWN0IGV4cGxpY2l0bHkuIEluIHRoaXMgY2FzZSwKKwkgKiBhbHdheXMgc2hvdyB0aGUgb2JqZWN0IChleGNlcHQgd2hlbiBMT0ZTX0VORF9UUkVFLCBzaW5jZSB0aGlzIHRyZWUKKwkgKiBoYWQgYWxyZWFkeSBiZWVuIHNob3duIHdoZW4gTE9GU19CRUdJTl9UUkVFKS4KKwkgKi8KKwlpZiAoZmlsdGVyX3NpdHVhdGlvbiA9PSBMT0ZTX0VORF9UUkVFKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gTE9GUl9NQVJLX1NFRU4gfCBMT0ZSX0RPX1NIT1c7Cit9CisKK3ZvaWQgbGlzdF9vYmplY3RzX2ZpbHRlcl9fZnJlZShzdHJ1Y3QgZmlsdGVyICpmaWx0ZXIpCit7CisJaWYgKCFmaWx0ZXIpCisJCXJldHVybjsKKwlpZiAoZmlsdGVyLT5maW5hbGl6ZV9vbWl0c19mbiAmJiBmaWx0ZXItPm9taXRzKQorCQlmaWx0ZXItPmZpbmFsaXplX29taXRzX2ZuKGZpbHRlci0+b21pdHMsIGZpbHRlci0+ZmlsdGVyX2RhdGEpOworCWZpbHRlci0+ZnJlZV9mbihmaWx0ZXItPmZpbHRlcl9kYXRhKTsKKwlmcmVlKGZpbHRlcik7Cit9CmRpZmYgLS1naXQgYS9saXN0LW9iamVjdHMtZmlsdGVyLmggYi9saXN0LW9iamVjdHMtZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkNzg0ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpc3Qtb2JqZWN0cy1maWx0ZXIuaApAQCAtMCwwICsxLDk1IEBACisjaWZuZGVmIExJU1RfT0JKRUNUU19GSUxURVJfSAorI2RlZmluZSBMSVNUX09CSkVDVFNfRklMVEVSX0gKKworc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9uczsKK3N0cnVjdCBvYmplY3Q7CitzdHJ1Y3Qgb2lkc2V0Oworc3RydWN0IHJlcG9zaXRvcnk7CisKKy8qCisgKiBEdXJpbmcgbGlzdC1vYmplY3QgdHJhdmVyc2FsIHdlIGFsbG93IGNlcnRhaW4gb2JqZWN0cyB0byBiZQorICogZmlsdGVyZWQgKG9taXR0ZWQpIGZyb20gdGhlIHJlc3VsdC4gIFRoZSBhY3RpdmUgZmlsdGVyIHVzZXMKKyAqIHRoZXNlIHJlc3VsdCB2YWx1ZXMgdG8gZ3VpZGUgbGlzdC1vYmplY3RzLgorICoKKyAqIF9aRVJPICAgICAgOiBEbyBub3RoaW5nIHdpdGggdGhlIG9iamVjdCBhdCB0aGlzIHRpbWUuICBJdCBtYXkKKyAqICAgICAgICAgICAgICBiZSByZXZpc2l0ZWQgaWYgaXQgYXBwZWFycyBpbiBhbm90aGVyIHBsYWNlIGluCisgKiAgICAgICAgICAgICAgdGhlIHRyZWUgb3IgaW4gYW5vdGhlciBjb21taXQgZHVyaW5nIHRoZSBvdmVyYWxsCisgKiAgICAgICAgICAgICAgdHJhdmVyc2FsLgorICoKKyAqIF9NQVJLX1NFRU4gOiBNYXJrIHRoaXMgb2JqZWN0IGFzICJTRUVOIiBpbiB0aGUgb2JqZWN0IGZsYWdzLgorICogICAgICAgICAgICAgIFRoaXMgd2lsbCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcmV2aXNpdGVkIGR1cmluZworICogICAgICAgICAgICAgIHRoZSByZW1haW5kZXIgb2YgdGhlIHRyYXZlcnNhbC4gIFRoaXMgRE9FUyBOT1QKKyAqICAgICAgICAgICAgICBpbXBseSB0aGF0IGl0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdHMuCisgKgorICogX0RPX1NIT1cgICA6IFNob3cgdGhpcyBvYmplY3QgaW4gdGhlIHJlc3VsdHMgKGNhbGwgc2hvdygpIG9uIGl0KS4KKyAqICAgICAgICAgICAgICBJbiBnZW5lcmFsLCBvYmplY3RzIHNob3VsZCBvbmx5IGJlIHNob3duIG9uY2UsIGJ1dAorICogICAgICAgICAgICAgIHRoaXMgcmVzdWx0IERPRVMgTk9UIGltcGx5IHRoYXQgd2UgbWFyayBpdCBTRUVOLgorICoKKyAqIF9TS0lQX1RSRUUgOiBVc2VkIGluIExPRlNfQkVHSU5fVFJFRSBzaXR1YXRpb24gLSBpbmRpY2F0ZXMgdGhhdAorICogICAgICAgICAgICAgIHRoZSB0cmVlJ3MgY2hpbGRyZW4gc2hvdWxkIG5vdCBiZSBpdGVyYXRlZCBvdmVyLiBUaGlzCisgKiAgICAgICAgICAgICAgaXMgdXNlZCBhcyBhbiBvcHRpbWl6YXRpb24gd2hlbiBhbGwgY2hpbGRyZW4gd2lsbAorICogICAgICAgICAgICAgIGRlZmluaXRlbHkgYmUgaWdub3JlZC4KKyAqCisgKiBNb3N0IG9mIHRoZSB0aW1lLCB5b3Ugd2FudCB0aGUgY29tYmluYXRpb24gKF9NQVJLX1NFRU4gfCBfRE9fU0hPVykKKyAqIGJ1dCB0aGV5IGNhbiBiZSB1c2VkIGluZGVwZW5kZW50bHksIHN1Y2ggYXMgd2hlbiBzcGFyc2UtY2hlY2tvdXQKKyAqIHBhdHRlcm4gbWF0Y2hpbmcgaXMgYmVpbmcgYXBwbGllZC4KKyAqCisgKiBBIF9NQVJLX1NFRU4gd2l0aG91dCBfRE9fU0hPVyBjYW4gYmUgY2FsbGVkIGEgaGFyZC1vbWl0IC0tIHRoZQorICogb2JqZWN0IGlzIG5vdCBzaG93biBhbmQgd2lsbCBuZXZlciBiZSByZWNvbnNpZGVyZWQgKHVubGVzcyBhCisgKiBwcmV2aW91cyBpdGVyYXRpb24gaGFzIGFscmVhZHkgc2hvd24gaXQpLgorICoKKyAqIEEgX0RPX1NIT1cgd2l0aG91dCBfTUFSS19TRUVOIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8KKyAqIGluY2x1ZGUgYSBkaXJlY3RvcnksIGJ1dCB0aGVuIHJldmlzaXQgaXQgdG8gc2VsZWN0aXZlbHkgaW5jbHVkZQorICogb3Igb21pdCBvYmplY3RzIHdpdGhpbiBpdC4KKyAqCisgKiBBIF9aRVJPIGNhbiBiZSBjYWxsZWQgYSBwcm92aXNpb25hbC1vbWl0IC0tIHRoZSBvYmplY3QgaXMgTk9UIHNob3duLAorICogYnV0ICptYXkqIGJlIHJldmlzaXRlZCAoaWYgdGhlIG9iamVjdCBhcHBlYXJzIGFnYWluIGluIHRoZSB0cmF2ZXJzYWwpLgorICogVGhlcmVmb3JlLCBpdCB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgcmVzdWx0cyAqdW5sZXNzKiBhIGxhdGVyCisgKiBpdGVyYXRpb24gY2F1c2VzIGl0IHRvIGJlIHNob3duLgorICovCitlbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfcmVzdWx0IHsKKwlMT0ZSX1pFUk8gICAgICA9IDAsCisJTE9GUl9NQVJLX1NFRU4gPSAxPDwwLAorCUxPRlJfRE9fU0hPVyAgID0gMTw8MSwKKwlMT0ZSX1NLSVBfVFJFRSA9IDE8PDIsCit9OworCitlbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfc2l0dWF0aW9uIHsKKwlMT0ZTX0JFR0lOX1RSRUUsCisJTE9GU19FTkRfVFJFRSwKKwlMT0ZTX0JMT0IKK307CisKK3N0cnVjdCBmaWx0ZXI7CisKKy8qCisgKiBDb25zdHJ1Y3RvciBmb3IgdGhlIHNldCBvZiBkZWZpbmVkIGxpc3Qtb2JqZWN0cyBmaWx0ZXJzLgorICogVGhlIGBvbWl0dGVkYCBzZXQgaXMgb3B0aW9uYWwuIEl0IGlzIHBvcHVsYXRlZCB3aXRoIG9iamVjdHMgdGhhdCB0aGUKKyAqIGZpbHRlciBleGNsdWRlcy4gVGhpcyBzZXQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGZpbmFsaXplZCB1bnRpbAorICogYWZ0ZXIgbGlzdF9vYmplY3RzX2ZpbHRlcl9fZnJlZSBpcyBjYWxsZWQgb24gdGhlIHJldHVybmVkIGBzdHJ1Y3QKKyAqIGZpbHRlciAqYC4KKyAqLworc3RydWN0IGZpbHRlciAqbGlzdF9vYmplY3RzX2ZpbHRlcl9faW5pdCgKKwlzdHJ1Y3Qgb2lkc2V0ICpvbWl0dGVkLAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zKTsKKworLyoKKyAqIExldHMgYGZpbHRlcmAgZGVjaWRlIGhvdyB0byBoYW5kbGUgdGhlIGBvYmpgLiBJZiBgZmlsdGVyYCBpcyBOVUxMLCB0aGlzCisgKiBmdW5jdGlvbiBiZWhhdmVzIGFzIGV4cGVjdGVkIGlmIG5vIGZpbHRlciBpcyBjb25maWd1cmVkOiBhbGwgb2JqZWN0cyBhcmUKKyAqIGluY2x1ZGVkLgorICovCitlbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfcmVzdWx0IGxpc3Rfb2JqZWN0c19maWx0ZXJfX2ZpbHRlcl9vYmplY3QoCisJc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX3NpdHVhdGlvbiBmaWx0ZXJfc2l0dWF0aW9uLAorCXN0cnVjdCBvYmplY3QgKm9iaiwKKwljb25zdCBjaGFyICpwYXRobmFtZSwKKwljb25zdCBjaGFyICpmaWxlbmFtZSwKKwlzdHJ1Y3QgZmlsdGVyICpmaWx0ZXIpOworCisvKgorICogRGVzdHJveXMgYGZpbHRlcmAgYW5kIGZpbmFsaXplcyB0aGUgYG9taXR0ZWRgIHNldCwgaWYgcHJlc2VudC4gRG9lcworICogbm90aGluZyBpZiBgZmlsdGVyYCBpcyBudWxsLgorICovCit2b2lkIGxpc3Rfb2JqZWN0c19maWx0ZXJfX2ZyZWUoc3RydWN0IGZpbHRlciAqZmlsdGVyKTsKKworI2VuZGlmIC8qIExJU1RfT0JKRUNUU19GSUxURVJfSCAqLwpkaWZmIC0tZ2l0IGEvbGlzdC1vYmplY3RzLmMgYi9saXN0LW9iamVjdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTk1ODliCi0tLSAvZGV2L251bGwKKysrIGIvbGlzdC1vYmplY3RzLmMKQEAgLTAsMCArMSw0MjMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLWZpbHRlci5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAidHJhY2UuaCIKKworc3RydWN0IHRyYXZlcnNhbF9jb250ZXh0IHsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7CisJc2hvd19vYmplY3RfZm4gc2hvd19vYmplY3Q7CisJc2hvd19jb21taXRfZm4gc2hvd19jb21taXQ7CisJdm9pZCAqc2hvd19kYXRhOworCXN0cnVjdCBmaWx0ZXIgKmZpbHRlcjsKK307CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfYmxvYihzdHJ1Y3QgdHJhdmVyc2FsX2NvbnRleHQgKmN0eCwKKwkJCSBzdHJ1Y3QgYmxvYiAqYmxvYiwKKwkJCSBzdHJ1Y3Qgc3RyYnVmICpwYXRoLAorCQkJIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IG9iamVjdCAqb2JqID0gJmJsb2ItPm9iamVjdDsKKwlzaXplX3QgcGF0aGxlbjsKKwllbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfcmVzdWx0IHI7CisKKwlpZiAoIWN0eC0+cmV2cy0+YmxvYl9vYmplY3RzKQorCQlyZXR1cm47CisJaWYgKCFvYmopCisJCWRpZSgiYmFkIGJsb2Igb2JqZWN0Iik7CisJaWYgKG9iai0+ZmxhZ3MgJiAoVU5JTlRFUkVTVElORyB8IFNFRU4pKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFByZS1maWx0ZXIga25vd24tbWlzc2luZyBvYmplY3RzIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQuCisJICogT3RoZXJ3aXNlLCBhIG1pc3Npbmcgb2JqZWN0IGVycm9yIG1lc3NhZ2UgbWF5IGJlIHJlcG9ydGVkCisJICogbGF0ZXIgKGRlcGVuZGluZyBvbiBvdGhlciBmaWx0ZXJpbmcgY3JpdGVyaWEpLgorCSAqCisJICogTm90ZSB0aGF0IHRoaXMgIi0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIiBwcmUtZmlsdGVyaW5nCisJICogbWF5IGNhdXNlIHRoZSBhY3R1YWwgZmlsdGVyIHRvIHJlcG9ydCBhbiBpbmNvbXBsZXRlIGxpc3QKKwkgKiBvZiBtaXNzaW5nIG9iamVjdHMuCisJICovCisJaWYgKGN0eC0+cmV2cy0+ZXhjbHVkZV9wcm9taXNvcl9vYmplY3RzICYmCisJICAgICFoYXNfb2JqZWN0X2ZpbGUoJm9iai0+b2lkKSAmJgorCSAgICBpc19wcm9taXNvcl9vYmplY3QoJm9iai0+b2lkKSkKKwkJcmV0dXJuOworCisJcGF0aGxlbiA9IHBhdGgtPmxlbjsKKwlzdHJidWZfYWRkc3RyKHBhdGgsIG5hbWUpOworCXIgPSBsaXN0X29iamVjdHNfZmlsdGVyX19maWx0ZXJfb2JqZWN0KGN0eC0+cmV2cy0+cmVwbywKKwkJCQkJICAgICAgIExPRlNfQkxPQiwgb2JqLAorCQkJCQkgICAgICAgcGF0aC0+YnVmLCAmcGF0aC0+YnVmW3BhdGhsZW5dLAorCQkJCQkgICAgICAgY3R4LT5maWx0ZXIpOworCWlmIChyICYgTE9GUl9NQVJLX1NFRU4pCisJCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKwlpZiAociAmIExPRlJfRE9fU0hPVykKKwkJY3R4LT5zaG93X29iamVjdChvYmosIHBhdGgtPmJ1ZiwgY3R4LT5zaG93X2RhdGEpOworCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgcGF0aGxlbik7Cit9CisKKy8qCisgKiBQcm9jZXNzaW5nIGEgZ2l0bGluayBlbnRyeSBjdXJyZW50bHkgZG9lcyBub3RoaW5nLCBzaW5jZQorICogd2UgZG8gbm90IHJlY3Vyc2UgaW50byB0aGUgc3VicHJvamVjdC4KKyAqCisgKiBXZSAqY291bGQqIGV2ZW50dWFsbHkgYWRkIGEgZmxhZyB0aGF0IGFjdHVhbGx5IGRvZXMgdGhhdCwKKyAqIHdoaWNoIHdvdWxkIGludm9sdmU6CisgKiAgLSBpcyB0aGUgc3VicHJvamVjdCBhY3R1YWxseSBjaGVja2VkIG91dD8KKyAqICAtIGlmIHNvLCBzZWUgaWYgdGhlIHN1YnByb2plY3QgaGFzIGFscmVhZHkgYmVlbiBhZGRlZAorICogICAgdG8gdGhlIGFsdGVybmF0ZXMgbGlzdCwgYW5kIGFkZCBpdCBpZiBub3QuCisgKiAgLSBwcm9jZXNzIHRoZSBjb21taXQgKG9yIHRhZykgdGhlIGdpdGxpbmsgcG9pbnRzIHRvCisgKiAgICByZWN1cnNpdmVseS4KKyAqCisgKiBIb3dldmVyLCBpdCdzIHVuY2xlYXIgd2hldGhlciB0aGVyZSBpcyByZWFsbHkgZXZlciBhbnkKKyAqIHJlYXNvbiB0byBzZWUgc3VwZXJwcm9qZWN0cyBhbmQgc3VicHJvamVjdHMgYXMgc3VjaCBhCisgKiAidW5pZmllZCIgb2JqZWN0IHBvb2wgKHBvdGVudGlhbGx5IHJlc3VsdGluZyBpbiBhIHRvdGFsbHkKKyAqIGh1bW9uZ291cyBwYWNrIC0gYXZvaWRpbmcgd2hpY2ggd2FzIHRoZSB3aG9sZSBwb2ludCBvZgorICogaGF2aW5nIGdpdGxpbmtzIGluIHRoZSBmaXJzdCBwbGFjZSEpLgorICoKKyAqIFNvIGZvciBub3csIHRoZXJlIGlzIGp1c3QgYSBub3RlIHRoYXQgd2UgKmNvdWxkKiBmb2xsb3cKKyAqIHRoZSBsaW5rLCBhbmQgaG93IHRvIGRvIGl0LiBXaGV0aGVyIGl0IG5lY2Vzc2FyaWx5IG1ha2VzCisgKiBhbnkgc2Vuc2Ugd2hhdC1zby1ldmVyIHRvIGV2ZXIgZG8gdGhhdCBpcyBhbm90aGVyIGlzc3VlLgorICovCitzdGF0aWMgdm9pZCBwcm9jZXNzX2dpdGxpbmsoc3RydWN0IHRyYXZlcnNhbF9jb250ZXh0ICpjdHgsCisJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpwYXRoLAorCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJLyogTm90aGluZyB0byBkbyAqLworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX3RyZWUoc3RydWN0IHRyYXZlcnNhbF9jb250ZXh0ICpjdHgsCisJCQkgc3RydWN0IHRyZWUgKnRyZWUsCisJCQkgc3RydWN0IHN0cmJ1ZiAqYmFzZSwKKwkJCSBjb25zdCBjaGFyICpuYW1lKTsKKworc3RhdGljIHZvaWQgcHJvY2Vzc190cmVlX2NvbnRlbnRzKHN0cnVjdCB0cmF2ZXJzYWxfY29udGV4dCAqY3R4LAorCQkJCSAgc3RydWN0IHRyZWUgKnRyZWUsCisJCQkJICBzdHJ1Y3Qgc3RyYnVmICpiYXNlKQoreworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKwllbnVtIGludGVyZXN0aW5nIG1hdGNoID0gY3R4LT5yZXZzLT5kaWZmb3B0LnBhdGhzcGVjLm5yID09IDAgPworCQlhbGxfZW50cmllc19pbnRlcmVzdGluZyA6IGVudHJ5X25vdF9pbnRlcmVzdGluZzsKKworCWluaXRfdHJlZV9kZXNjKCZkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKKwkJaWYgKG1hdGNoICE9IGFsbF9lbnRyaWVzX2ludGVyZXN0aW5nKSB7CisJCQltYXRjaCA9IHRyZWVfZW50cnlfaW50ZXJlc3RpbmcoY3R4LT5yZXZzLT5yZXBvLT5pbmRleCwKKwkJCQkJCSAgICAgICAmZW50cnksIGJhc2UsIDAsCisJCQkJCQkgICAgICAgJmN0eC0+cmV2cy0+ZGlmZm9wdC5wYXRoc3BlYyk7CisJCQlpZiAobWF0Y2ggPT0gYWxsX2VudHJpZXNfbm90X2ludGVyZXN0aW5nKQorCQkJCWJyZWFrOworCQkJaWYgKG1hdGNoID09IGVudHJ5X25vdF9pbnRlcmVzdGluZykKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChTX0lTRElSKGVudHJ5Lm1vZGUpKSB7CisJCQlzdHJ1Y3QgdHJlZSAqdCA9IGxvb2t1cF90cmVlKGN0eC0+cmV2cy0+cmVwbywgJmVudHJ5Lm9pZCk7CisJCQlpZiAoIXQpIHsKKwkJCQlkaWUoXygiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyB0cmVlIG1vZGUsICIKKwkJCQkgICAgICAiYnV0IGlzIG5vdCBhIHRyZWUiKSwKKwkJCQkgICAgZW50cnkucGF0aCwgb2lkX3RvX2hleCgmdHJlZS0+b2JqZWN0Lm9pZCkpOworCQkJfQorCQkJdC0+b2JqZWN0LmZsYWdzIHw9IE5PVF9VU0VSX0dJVkVOOworCQkJcHJvY2Vzc190cmVlKGN0eCwgdCwgYmFzZSwgZW50cnkucGF0aCk7CisJCX0KKwkJZWxzZSBpZiAoU19JU0dJVExJTksoZW50cnkubW9kZSkpCisJCQlwcm9jZXNzX2dpdGxpbmsoY3R4LCBlbnRyeS5vaWQuaGFzaCwKKwkJCQkJYmFzZSwgZW50cnkucGF0aCk7CisJCWVsc2UgeworCQkJc3RydWN0IGJsb2IgKmIgPSBsb29rdXBfYmxvYihjdHgtPnJldnMtPnJlcG8sICZlbnRyeS5vaWQpOworCQkJaWYgKCFiKSB7CisJCQkJZGllKF8oImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgYmxvYiBtb2RlLCAiCisJCQkJICAgICAgImJ1dCBpcyBub3QgYSBibG9iIiksCisJCQkJICAgIGVudHJ5LnBhdGgsIG9pZF90b19oZXgoJnRyZWUtPm9iamVjdC5vaWQpKTsKKwkJCX0KKwkJCWItPm9iamVjdC5mbGFncyB8PSBOT1RfVVNFUl9HSVZFTjsKKwkJCXByb2Nlc3NfYmxvYihjdHgsIGIsIGJhc2UsIGVudHJ5LnBhdGgpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX3RyZWUoc3RydWN0IHRyYXZlcnNhbF9jb250ZXh0ICpjdHgsCisJCQkgc3RydWN0IHRyZWUgKnRyZWUsCisJCQkgc3RydWN0IHN0cmJ1ZiAqYmFzZSwKKwkJCSBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9ICZ0cmVlLT5vYmplY3Q7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gY3R4LT5yZXZzOworCWludCBiYXNlbGVuID0gYmFzZS0+bGVuOworCWVudW0gbGlzdF9vYmplY3RzX2ZpbHRlcl9yZXN1bHQgcjsKKwlpbnQgZmFpbGVkX3BhcnNlOworCisJaWYgKCFyZXZzLT50cmVlX29iamVjdHMpCisJCXJldHVybjsKKwlpZiAoIW9iaikKKwkJZGllKCJiYWQgdHJlZSBvYmplY3QiKTsKKwlpZiAob2JqLT5mbGFncyAmIChVTklOVEVSRVNUSU5HIHwgU0VFTikpCisJCXJldHVybjsKKworCWZhaWxlZF9wYXJzZSA9IHBhcnNlX3RyZWVfZ2VudGx5KHRyZWUsIDEpOworCWlmIChmYWlsZWRfcGFyc2UpIHsKKwkJaWYgKHJldnMtPmlnbm9yZV9taXNzaW5nX2xpbmtzKQorCQkJcmV0dXJuOworCisJCS8qCisJCSAqIFByZS1maWx0ZXIga25vd24tbWlzc2luZyB0cmVlIG9iamVjdHMgd2hlbiBleHBsaWNpdGx5CisJCSAqIHJlcXVlc3RlZC4gIFRoaXMgbWF5IGNhdXNlIHRoZSBhY3R1YWwgZmlsdGVyIHRvIHJlcG9ydAorCQkgKiBhbiBpbmNvbXBsZXRlIGxpc3Qgb2YgbWlzc2luZyBvYmplY3RzLgorCQkgKi8KKwkJaWYgKHJldnMtPmV4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0cyAmJgorCQkgICAgaXNfcHJvbWlzb3Jfb2JqZWN0KCZvYmotPm9pZCkpCisJCQlyZXR1cm47CisKKwkJaWYgKCFyZXZzLT5kb19ub3RfZGllX29uX21pc3NpbmdfdHJlZSkKKwkJCWRpZSgiYmFkIHRyZWUgb2JqZWN0ICVzIiwgb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKKwl9CisKKwlzdHJidWZfYWRkc3RyKGJhc2UsIG5hbWUpOworCXIgPSBsaXN0X29iamVjdHNfZmlsdGVyX19maWx0ZXJfb2JqZWN0KGN0eC0+cmV2cy0+cmVwbywKKwkJCQkJICAgICAgIExPRlNfQkVHSU5fVFJFRSwgb2JqLAorCQkJCQkgICAgICAgYmFzZS0+YnVmLCAmYmFzZS0+YnVmW2Jhc2VsZW5dLAorCQkJCQkgICAgICAgY3R4LT5maWx0ZXIpOworCWlmIChyICYgTE9GUl9NQVJLX1NFRU4pCisJCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKwlpZiAociAmIExPRlJfRE9fU0hPVykKKwkJY3R4LT5zaG93X29iamVjdChvYmosIGJhc2UtPmJ1ZiwgY3R4LT5zaG93X2RhdGEpOworCWlmIChiYXNlLT5sZW4pCisJCXN0cmJ1Zl9hZGRjaChiYXNlLCAnLycpOworCisJaWYgKHIgJiBMT0ZSX1NLSVBfVFJFRSkKKwkJdHJhY2VfcHJpbnRmKCJTa2lwcGluZyBjb250ZW50cyBvZiB0cmVlICVzLi4uXG4iLCBiYXNlLT5idWYpOworCWVsc2UgaWYgKCFmYWlsZWRfcGFyc2UpCisJCXByb2Nlc3NfdHJlZV9jb250ZW50cyhjdHgsIHRyZWUsIGJhc2UpOworCisJciA9IGxpc3Rfb2JqZWN0c19maWx0ZXJfX2ZpbHRlcl9vYmplY3QoY3R4LT5yZXZzLT5yZXBvLAorCQkJCQkgICAgICAgTE9GU19FTkRfVFJFRSwgb2JqLAorCQkJCQkgICAgICAgYmFzZS0+YnVmLCAmYmFzZS0+YnVmW2Jhc2VsZW5dLAorCQkJCQkgICAgICAgY3R4LT5maWx0ZXIpOworCWlmIChyICYgTE9GUl9NQVJLX1NFRU4pCisJCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKwlpZiAociAmIExPRlJfRE9fU0hPVykKKwkJY3R4LT5zaG93X29iamVjdChvYmosIGJhc2UtPmJ1ZiwgY3R4LT5zaG93X2RhdGEpOworCisJc3RyYnVmX3NldGxlbihiYXNlLCBiYXNlbGVuKTsKKwlmcmVlX3RyZWVfYnVmZmVyKHRyZWUpOworfQorCitzdGF0aWMgdm9pZCBtYXJrX2VkZ2VfcGFyZW50c191bmludGVyZXN0aW5nKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkJICAgIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkJICAgIHNob3dfZWRnZV9mbiBzaG93X2VkZ2UpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCisJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOyBwYXJlbnRzOyBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwYXJlbnRzLT5pdGVtOworCQlpZiAoIShwYXJlbnQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpKQorCQkJY29udGludWU7CisJCW1hcmtfdHJlZV91bmludGVyZXN0aW5nKHJldnMtPnJlcG8sIGdldF9jb21taXRfdHJlZShwYXJlbnQpKTsKKwkJaWYgKHJldnMtPmVkZ2VfaGludCAmJiAhKHBhcmVudC0+b2JqZWN0LmZsYWdzICYgU0hPV04pKSB7CisJCQlwYXJlbnQtPm9iamVjdC5mbGFncyB8PSBTSE9XTjsKKwkJCXNob3dfZWRnZShwYXJlbnQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfZWRnZV9wYXJlbnRzKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICAgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgICBzaG93X2VkZ2VfZm4gc2hvd19lZGdlLAorCQkJICAgICBzdHJ1Y3Qgb2lkc2V0ICpzZXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCisJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOyBwYXJlbnRzOyBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwYXJlbnRzLT5pdGVtOworCQlzdHJ1Y3QgdHJlZSAqdHJlZSA9IGdldF9jb21taXRfdHJlZShwYXJlbnQpOworCisJCWlmICghdHJlZSkKKwkJCWNvbnRpbnVlOworCisJCW9pZHNldF9pbnNlcnQoc2V0LCAmdHJlZS0+b2JqZWN0Lm9pZCk7CisKKwkJaWYgKCEocGFyZW50LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCWNvbnRpbnVlOworCQl0cmVlLT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKworCQlpZiAocmV2cy0+ZWRnZV9oaW50ICYmICEocGFyZW50LT5vYmplY3QuZmxhZ3MgJiBTSE9XTikpIHsKKwkJCXBhcmVudC0+b2JqZWN0LmZsYWdzIHw9IFNIT1dOOworCQkJc2hvd19lZGdlKHBhcmVudCk7CisJCX0KKwl9Cit9CisKK3ZvaWQgbWFya19lZGdlc191bmludGVyZXN0aW5nKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICAgIHNob3dfZWRnZV9mbiBzaG93X2VkZ2UsCisJCQkgICAgICBpbnQgc3BhcnNlKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdDsKKwlpbnQgaTsKKworCWlmIChzcGFyc2UpIHsKKwkJc3RydWN0IG9pZHNldCBzZXQ7CisJCW9pZHNldF9pbml0KCZzZXQsIDE2KTsKKworCQlmb3IgKGxpc3QgPSByZXZzLT5jb21taXRzOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJCXN0cnVjdCB0cmVlICp0cmVlID0gZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCk7CisKKwkJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQkJdHJlZS0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisKKwkJCW9pZHNldF9pbnNlcnQoJnNldCwgJnRyZWUtPm9iamVjdC5vaWQpOworCQkJYWRkX2VkZ2VfcGFyZW50cyhjb21taXQsIHJldnMsIHNob3dfZWRnZSwgJnNldCk7CisJCX0KKworCQltYXJrX3RyZWVzX3VuaW50ZXJlc3Rpbmdfc3BhcnNlKHJldnMtPnJlcG8sICZzZXQpOworCQlvaWRzZXRfY2xlYXIoJnNldCk7CisJfSBlbHNlIHsKKwkJZm9yIChsaXN0ID0gcmV2cy0+Y29tbWl0czsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKKwkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CisJCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCQkJbWFya190cmVlX3VuaW50ZXJlc3RpbmcocmV2cy0+cmVwbywKKwkJCQkJCQlnZXRfY29tbWl0X3RyZWUoY29tbWl0KSk7CisJCQkJaWYgKHJldnMtPmVkZ2VfaGludF9hZ2dyZXNzaXZlICYmICEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTSE9XTikpIHsKKwkJCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gU0hPV047CisJCQkJCXNob3dfZWRnZShjb21taXQpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCW1hcmtfZWRnZV9wYXJlbnRzX3VuaW50ZXJlc3RpbmcoY29tbWl0LCByZXZzLCBzaG93X2VkZ2UpOworCQl9CisJfQorCisJaWYgKHJldnMtPmVkZ2VfaGludF9hZ2dyZXNzaXZlKSB7CisJCWZvciAoaSA9IDA7IGkgPCByZXZzLT5jbWRsaW5lLm5yOyBpKyspIHsKKwkJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHJldnMtPmNtZGxpbmUucmV2W2ldLml0ZW07CisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW9iajsKKwkJCWlmIChvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCB8fCAhKG9iai0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCQljb250aW51ZTsKKwkJCW1hcmtfdHJlZV91bmludGVyZXN0aW5nKHJldnMtPnJlcG8sCisJCQkJCQlnZXRfY29tbWl0X3RyZWUoY29tbWl0KSk7CisJCQlpZiAoIShvYmotPmZsYWdzICYgU0hPV04pKSB7CisJCQkJb2JqLT5mbGFncyB8PSBTSE9XTjsKKwkJCQlzaG93X2VkZ2UoY29tbWl0KTsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYWRkX3BlbmRpbmdfdHJlZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCB0cmVlICp0cmVlKQoreworCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCAmdHJlZS0+b2JqZWN0LCAiIik7Cit9CisKK3N0YXRpYyB2b2lkIHRyYXZlcnNlX3RyZWVzX2FuZF9ibG9icyhzdHJ1Y3QgdHJhdmVyc2FsX2NvbnRleHQgKmN0eCwKKwkJCQkgICAgIHN0cnVjdCBzdHJidWYgKmJhc2UpCit7CisJaW50IGk7CisKKwlhc3NlcnQoYmFzZS0+bGVuID09IDApOworCisJZm9yIChpID0gMDsgaSA8IGN0eC0+cmV2cy0+cGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKnBlbmRpbmcgPSBjdHgtPnJldnMtPnBlbmRpbmcub2JqZWN0cyArIGk7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHBlbmRpbmctPml0ZW07CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBwZW5kaW5nLT5uYW1lOworCQljb25zdCBjaGFyICpwYXRoID0gcGVuZGluZy0+cGF0aDsKKwkJaWYgKG9iai0+ZmxhZ3MgJiAoVU5JTlRFUkVTVElORyB8IFNFRU4pKQorCQkJY29udGludWU7CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX1RBRykgeworCQkJb2JqLT5mbGFncyB8PSBTRUVOOworCQkJY3R4LT5zaG93X29iamVjdChvYmosIG5hbWUsIGN0eC0+c2hvd19kYXRhKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghcGF0aCkKKwkJCXBhdGggPSAiIjsKKwkJaWYgKG9iai0+dHlwZSA9PSBPQkpfVFJFRSkgeworCQkJcHJvY2Vzc190cmVlKGN0eCwgKHN0cnVjdCB0cmVlICopb2JqLCBiYXNlLCBwYXRoKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpIHsKKwkJCXByb2Nlc3NfYmxvYihjdHgsIChzdHJ1Y3QgYmxvYiAqKW9iaiwgYmFzZSwgcGF0aCk7CisJCQljb250aW51ZTsKKwkJfQorCQlkaWUoInVua25vd24gcGVuZGluZyBvYmplY3QgJXMgKCVzKSIsCisJCSAgICBvaWRfdG9faGV4KCZvYmotPm9pZCksIG5hbWUpOworCX0KKwlvYmplY3RfYXJyYXlfY2xlYXIoJmN0eC0+cmV2cy0+cGVuZGluZyk7Cit9CisKK3N0YXRpYyB2b2lkIGRvX3RyYXZlcnNlKHN0cnVjdCB0cmF2ZXJzYWxfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3Qgc3RyYnVmIGNzcDsgLyogY2FsbGVlJ3Mgc2NyYXRjaCBwYWQgKi8KKwlzdHJidWZfaW5pdCgmY3NwLCBQQVRIX01BWCk7CisKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbihjdHgtPnJldnMpKSAhPSBOVUxMKSB7CisJCS8qCisJCSAqIGFuIHVuaW50ZXJlc3RpbmcgYm91bmRhcnkgY29tbWl0IG1heSBub3QgaGF2ZSBpdHMgdHJlZQorCQkgKiBwYXJzZWQgeWV0LCBidXQgd2UgYXJlIG5vdCBnb2luZyB0byBzaG93IHRoZW0gYW55d2F5CisJCSAqLworCQlpZiAoIWN0eC0+cmV2cy0+dHJlZV9vYmplY3RzKQorCQkJOyAvKiBkbyBub3QgYm90aGVyIGxvYWRpbmcgdHJlZSAqLworCQllbHNlIGlmIChnZXRfY29tbWl0X3RyZWUoY29tbWl0KSkgeworCQkJc3RydWN0IHRyZWUgKnRyZWUgPSBnZXRfY29tbWl0X3RyZWUoY29tbWl0KTsKKwkJCXRyZWUtPm9iamVjdC5mbGFncyB8PSBOT1RfVVNFUl9HSVZFTjsKKwkJCWFkZF9wZW5kaW5nX3RyZWUoY3R4LT5yZXZzLCB0cmVlKTsKKwkJfSBlbHNlIGlmIChjb21taXQtPm9iamVjdC5wYXJzZWQpIHsKKwkJCWRpZShfKCJ1bmFibGUgdG8gbG9hZCByb290IHRyZWUgZm9yIGNvbW1pdCAlcyIpLAorCQkJICAgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCX0KKwkJY3R4LT5zaG93X2NvbW1pdChjb21taXQsIGN0eC0+c2hvd19kYXRhKTsKKworCQlpZiAoY3R4LT5yZXZzLT50cmVlX2Jsb2JzX2luX2NvbW1pdF9vcmRlcikKKwkJCS8qCisJCQkgKiBORUVEU1dPUks6IEFkZGluZyB0aGUgdHJlZSBhbmQgdGhlbiBmbHVzaGluZyBpdCBoZXJlCisJCQkgKiBuZWVkcyBhIHJlYWxsb2NhdGlvbiBmb3IgZWFjaCBjb21taXQuIENhbiB3ZSBwYXNzIHRoZQorCQkJICogdHJlZSBkaXJlY3Rvcnkgd2l0aG91dCBhbGxvY2F0aW9uIGNodXJuPworCQkJICovCisJCQl0cmF2ZXJzZV90cmVlc19hbmRfYmxvYnMoY3R4LCAmY3NwKTsKKwl9CisJdHJhdmVyc2VfdHJlZXNfYW5kX2Jsb2JzKGN0eCwgJmNzcCk7CisJc3RyYnVmX3JlbGVhc2UoJmNzcCk7Cit9CisKK3ZvaWQgdHJhdmVyc2VfY29tbWl0X2xpc3Qoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICBzaG93X2NvbW1pdF9mbiBzaG93X2NvbW1pdCwKKwkJCSAgc2hvd19vYmplY3RfZm4gc2hvd19vYmplY3QsCisJCQkgIHZvaWQgKnNob3dfZGF0YSkKK3sKKwlzdHJ1Y3QgdHJhdmVyc2FsX2NvbnRleHQgY3R4OworCWN0eC5yZXZzID0gcmV2czsKKwljdHguc2hvd19jb21taXQgPSBzaG93X2NvbW1pdDsKKwljdHguc2hvd19vYmplY3QgPSBzaG93X29iamVjdDsKKwljdHguc2hvd19kYXRhID0gc2hvd19kYXRhOworCWN0eC5maWx0ZXIgPSBOVUxMOworCWRvX3RyYXZlcnNlKCZjdHgpOworfQorCit2b2lkIHRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zLAorCXN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwlzaG93X2NvbW1pdF9mbiBzaG93X2NvbW1pdCwKKwlzaG93X29iamVjdF9mbiBzaG93X29iamVjdCwKKwl2b2lkICpzaG93X2RhdGEsCisJc3RydWN0IG9pZHNldCAqb21pdHRlZCkKK3sKKwlzdHJ1Y3QgdHJhdmVyc2FsX2NvbnRleHQgY3R4OworCisJY3R4LnJldnMgPSByZXZzOworCWN0eC5zaG93X29iamVjdCA9IHNob3dfb2JqZWN0OworCWN0eC5zaG93X2NvbW1pdCA9IHNob3dfY29tbWl0OworCWN0eC5zaG93X2RhdGEgPSBzaG93X2RhdGE7CisJY3R4LmZpbHRlciA9IGxpc3Rfb2JqZWN0c19maWx0ZXJfX2luaXQob21pdHRlZCwgZmlsdGVyX29wdGlvbnMpOworCWRvX3RyYXZlcnNlKCZjdHgpOworCWxpc3Rfb2JqZWN0c19maWx0ZXJfX2ZyZWUoY3R4LmZpbHRlcik7Cit9CmRpZmYgLS1naXQgYS9saXN0LW9iamVjdHMuaCBiL2xpc3Qtb2JqZWN0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NTI2ODAKLS0tIC9kZXYvbnVsbAorKysgYi9saXN0LW9iamVjdHMuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIExJU1RfT0JKRUNUU19ICisjZGVmaW5lIExJU1RfT0JKRUNUU19ICisKK3N0cnVjdCBjb21taXQ7CitzdHJ1Y3Qgb2JqZWN0Oworc3RydWN0IHJldl9pbmZvOworCit0eXBlZGVmIHZvaWQgKCpzaG93X2NvbW1pdF9mbikoc3RydWN0IGNvbW1pdCAqLCB2b2lkICopOwordHlwZWRlZiB2b2lkICgqc2hvd19vYmplY3RfZm4pKHN0cnVjdCBvYmplY3QgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOwordm9pZCB0cmF2ZXJzZV9jb21taXRfbGlzdChzdHJ1Y3QgcmV2X2luZm8gKiwgc2hvd19jb21taXRfZm4sIHNob3dfb2JqZWN0X2ZuLCB2b2lkICopOworCit0eXBlZGVmIHZvaWQgKCpzaG93X2VkZ2VfZm4pKHN0cnVjdCBjb21taXQgKik7Cit2b2lkIG1hcmtfZWRnZXNfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgICBzaG93X2VkZ2VfZm4gc2hvd19lZGdlLAorCQkJICAgICAgaW50IHNwYXJzZSk7CisKK3N0cnVjdCBvaWRzZXQ7CitzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zOworCit2b2lkIHRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zLAorCXN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwlzaG93X2NvbW1pdF9mbiBzaG93X2NvbW1pdCwKKwlzaG93X29iamVjdF9mbiBzaG93X29iamVjdCwKKwl2b2lkICpzaG93X2RhdGEsCisJc3RydWN0IG9pZHNldCAqb21pdHRlZCk7CisKKyNlbmRpZiAvKiBMSVNUX09CSkVDVFNfSCAqLwpkaWZmIC0tZ2l0IGEvbGlzdC5oIGIvbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjAxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9saXN0LmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiAob3JpZ2luYWxseSBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5IGFuZCBVc2Vyc3BhY2UgUkNVKQorICogQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFBpZXJyZS1NYXJjIEZvdXJuaWVyCisgKiBDb252ZXJzaW9uIHRvIFJDVSBsaXN0LgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1hdGhpZXUgRGVzbm95ZXJzIDxtYXRoaWV1LmRlc25veWVyc0BlZmZpY2lvcy5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZQorICogPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgTElTVF9ICisjZGVmaW5lIExJU1RfSAkxCisKKy8qCisgKiBUaGUgZGVmaW5pdGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBhZG9wdGVkIGZyb20gdGhvc2Ugd2hpY2ggY2FuIGJlCisgKiBmb3VuZCBpbiB0aGUgTGludXgga2VybmVsIGhlYWRlcnMgdG8gZW5hYmxlIHBlb3BsZSBmYW1pbGlhciB3aXRoIHRoZQorICogbGF0dGVyIGZpbmQgdGhlaXIgd2F5IGluIHRoZXNlIHNvdXJjZXMgYXMgd2VsbC4KKyAqLworCisvKiBCYXNpYyB0eXBlIGZvciB0aGUgZG91YmxlLWxpbmsgbGlzdC4gKi8KK3N0cnVjdCBsaXN0X2hlYWQgeworCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQsICpwcmV2OworfTsKKworLyogYXZvaWQgY29uZmxpY3RzIHdpdGggQlNELW9ubHkgc3lzL3F1ZXVlLmggKi8KKyN1bmRlZiBMSVNUX0hFQUQKKy8qIERlZmluZSBhIHZhcmlhYmxlIHdpdGggdGhlIGhlYWQgYW5kIHRhaWwgb2YgdGhlIGxpc3QuICovCisjZGVmaW5lIExJU1RfSEVBRChuYW1lKSBcCisJc3RydWN0IGxpc3RfaGVhZCBuYW1lID0geyAmKG5hbWUpLCAmKG5hbWUpIH0KKworLyogSW5pdGlhbGl6ZSBhIG5ldyBsaXN0IGhlYWQuICovCisjZGVmaW5lIElOSVRfTElTVF9IRUFEKHB0cikgXAorCShwdHIpLT5uZXh0ID0gKHB0ciktPnByZXYgPSAocHRyKQorCisjZGVmaW5lIExJU1RfSEVBRF9JTklUKG5hbWUpIHsgJihuYW1lKSwgJihuYW1lKSB9CisKKy8qIEFkZCBuZXcgZWxlbWVudCBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdC4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpuZXdwLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWhlYWQtPm5leHQtPnByZXYgPSBuZXdwOworCW5ld3AtPm5leHQgPSBoZWFkLT5uZXh0OworCW5ld3AtPnByZXYgPSBoZWFkOworCWhlYWQtPm5leHQgPSBuZXdwOworfQorCisvKiBBZGQgbmV3IGVsZW1lbnQgYXQgdGhlIHRhaWwgb2YgdGhlIGxpc3QuICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9hZGRfdGFpbChzdHJ1Y3QgbGlzdF9oZWFkICpuZXdwLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWhlYWQtPnByZXYtPm5leHQgPSBuZXdwOworCW5ld3AtPm5leHQgPSBoZWFkOworCW5ld3AtPnByZXYgPSBoZWFkLT5wcmV2OworCWhlYWQtPnByZXYgPSBuZXdwOworfQorCisvKiBSZW1vdmUgZWxlbWVudCBmcm9tIGxpc3QuICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0KQoreworCW5leHQtPnByZXYgPSBwcmV2OworCXByZXYtPm5leHQgPSBuZXh0OworfQorCisvKiBSZW1vdmUgZWxlbWVudCBmcm9tIGxpc3QuICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqZWxlbSkKK3sKKwlfX2xpc3RfZGVsKGVsZW0tPnByZXYsIGVsZW0tPm5leHQpOworfQorCisvKiBSZW1vdmUgZWxlbWVudCBmcm9tIGxpc3QsIGluaXRpYWxpemluZyB0aGUgZWxlbWVudCdzIGxpc3QgcG9pbnRlcnMuICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWxfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICplbGVtKQoreworCWxpc3RfZGVsKGVsZW0pOworCUlOSVRfTElTVF9IRUFEKGVsZW0pOworfQorCisvKiBEZWxldGUgZnJvbSBsaXN0LCBhZGQgdG8gYW5vdGhlciBsaXN0IGFzIGhlYWQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKmVsZW0sIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2RlbChlbGVtLT5wcmV2LCBlbGVtLT5uZXh0KTsKKwlsaXN0X2FkZChlbGVtLCBoZWFkKTsKK30KKworLyogUmVwbGFjZSBhbiBvbGQgZW50cnkuICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9yZXBsYWNlKHN0cnVjdCBsaXN0X2hlYWQgKm9sZCwgc3RydWN0IGxpc3RfaGVhZCAqbmV3cCkKK3sKKwluZXdwLT5uZXh0ID0gb2xkLT5uZXh0OworCW5ld3AtPnByZXYgPSBvbGQtPnByZXY7CisJbmV3cC0+cHJldi0+bmV4dCA9IG5ld3A7CisJbmV3cC0+bmV4dC0+cHJldiA9IG5ld3A7Cit9CisKKy8qIEpvaW4gdHdvIGxpc3RzLiAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3Rfc3BsaWNlKHN0cnVjdCBsaXN0X2hlYWQgKmFkZCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwkvKiBEbyBub3RoaW5nIGlmIHRoZSBsaXN0IHdoaWNoIGdldHMgYWRkZWQgaXMgZW1wdHkuICovCisJaWYgKGFkZCAhPSBhZGQtPm5leHQpIHsKKwkJYWRkLT5uZXh0LT5wcmV2ID0gaGVhZDsKKwkJYWRkLT5wcmV2LT5uZXh0ID0gaGVhZC0+bmV4dDsKKwkJaGVhZC0+bmV4dC0+cHJldiA9IGFkZC0+cHJldjsKKwkJaGVhZC0+bmV4dCA9IGFkZC0+bmV4dDsKKwl9Cit9CisKKy8qIEdldCB0eXBlZCBlbGVtZW50IGZyb20gbGlzdCBhdCBhIGdpdmVuIHBvc2l0aW9uLiAqLworI2RlZmluZSBsaXN0X2VudHJ5KHB0ciwgdHlwZSwgbWVtYmVyKSBcCisJKCh0eXBlICopICgoY2hhciAqKSAocHRyKSAtIG9mZnNldG9mKHR5cGUsIG1lbWJlcikpKQorCisvKiBHZXQgZmlyc3QgZW50cnkgZnJvbSBhIGxpc3QuICovCisjZGVmaW5lIGxpc3RfZmlyc3RfZW50cnkocHRyLCB0eXBlLCBtZW1iZXIpIFwKKwlsaXN0X2VudHJ5KChwdHIpLT5uZXh0LCB0eXBlLCBtZW1iZXIpCisKKy8qIEl0ZXJhdGUgZm9yd2FyZCBvdmVyIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdC4gKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaChwb3MsIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dDsgcG9zICE9IChoZWFkKTsgcG9zID0gcG9zLT5uZXh0KQorCisvKgorICogSXRlcmF0ZSBmb3J3YXJkIG92ZXIgdGhlIGVsZW1lbnRzIGxpc3QuIFRoZSBsaXN0IGVsZW1lbnRzIGNhbiBiZQorICogcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IHdoaWxlIGRvaW5nIHRoaXMuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgcCwgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5uZXh0LCBwID0gcG9zLT5uZXh0OyBcCisJCXBvcyAhPSAoaGVhZCk7IFwKKwkJcG9zID0gcCwgcCA9IHBvcy0+bmV4dCkKKworLyogSXRlcmF0ZSBiYWNrd2FyZCBvdmVyIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdC4gKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9wcmV2KHBvcywgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5wcmV2OyBwb3MgIT0gKGhlYWQpOyBwb3MgPSBwb3MtPnByZXYpCisKKy8qCisgKiBJdGVyYXRlIGJhY2t3YXJkcyBvdmVyIHRoZSBlbGVtZW50cyBsaXN0LiBUaGUgbGlzdCBlbGVtZW50cyBjYW4gYmUKKyAqIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCB3aGlsZSBkb2luZyB0aGlzLgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfcHJldl9zYWZlKHBvcywgcCwgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5wcmV2LCBwID0gcG9zLT5wcmV2OyBcCisJCXBvcyAhPSAoaGVhZCk7IFwKKwkJcG9zID0gcCwgcCA9IHBvcy0+cHJldikKKworc3RhdGljIGlubGluZSBpbnQgbGlzdF9lbXB0eShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXJldHVybiBoZWFkID09IGhlYWQtPm5leHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X3JlcGxhY2VfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICpvbGQsCisJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpuZXdwKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBvbGQtPm5leHQ7CisKKwlsaXN0X2RlbChvbGQpOworCWxpc3RfYWRkX3RhaWwobmV3cCwgaGVhZCk7CisJSU5JVF9MSVNUX0hFQUQob2xkKTsKK30KKworLyoKKyAqIFRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBhIG5vcm1hbCBsaXN0X2hlYWQsIGV4Y2VwdCB0aGF0IGl0IGNhbiBiZQorICogZGVjbGFyZWQgdm9sYXRpbGUgKGUuZy4sIGlmIHlvdSBoYXZlIGEgbGlzdCB0aGF0IG1heSBiZSBhY2Nlc3NlZCBmcm9tIHNpZ25hbAorICogaGFuZGxlcnMpLgorICovCitzdHJ1Y3Qgdm9sYXRpbGVfbGlzdF9oZWFkIHsKKwl2b2xhdGlsZSBzdHJ1Y3Qgdm9sYXRpbGVfbGlzdF9oZWFkICpuZXh0LCAqcHJldjsKK307CisKKyNkZWZpbmUgVk9MQVRJTEVfTElTVF9IRUFEKG5hbWUpIFwKKwl2b2xhdGlsZSBzdHJ1Y3Qgdm9sYXRpbGVfbGlzdF9oZWFkIG5hbWUgPSB7ICYobmFtZSksICYobmFtZSkgfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX192b2xhdGlsZV9saXN0X2RlbCh2b2xhdGlsZSBzdHJ1Y3Qgdm9sYXRpbGVfbGlzdF9oZWFkICpwcmV2LAorCQkJCSAgICAgICB2b2xhdGlsZSBzdHJ1Y3Qgdm9sYXRpbGVfbGlzdF9oZWFkICpuZXh0KQoreworCW5leHQtPnByZXYgPSBwcmV2OworCXByZXYtPm5leHQgPSBuZXh0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdm9sYXRpbGVfbGlzdF9kZWwodm9sYXRpbGUgc3RydWN0IHZvbGF0aWxlX2xpc3RfaGVhZCAqZWxlbSkKK3sKKwlfX3ZvbGF0aWxlX2xpc3RfZGVsKGVsZW0tPnByZXYsIGVsZW0tPm5leHQpOworfQorCitzdGF0aWMgaW5saW5lIGludCB2b2xhdGlsZV9saXN0X2VtcHR5KHZvbGF0aWxlIHN0cnVjdCB2b2xhdGlsZV9saXN0X2hlYWQgKmhlYWQpCit7CisJcmV0dXJuIGhlYWQgPT0gaGVhZC0+bmV4dDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZvbGF0aWxlX2xpc3RfYWRkKHZvbGF0aWxlIHN0cnVjdCB2b2xhdGlsZV9saXN0X2hlYWQgKm5ld3AsCisJCQkJICAgICB2b2xhdGlsZSBzdHJ1Y3Qgdm9sYXRpbGVfbGlzdF9oZWFkICpoZWFkKQoreworCWhlYWQtPm5leHQtPnByZXYgPSBuZXdwOworCW5ld3AtPm5leHQgPSBoZWFkLT5uZXh0OworCW5ld3AtPnByZXYgPSBoZWFkOworCWhlYWQtPm5leHQgPSBuZXdwOworfQorCisjZW5kaWYgLyogTElTVF9IICovCmRpZmYgLS1naXQgYS9sbC1tZXJnZS5jIGIvbGwtbWVyZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWMwYjk1Ci0tLSAvZGV2L251bGwKKysrIGIvbGwtbWVyZ2UuYwpAQCAtMCwwICsxLDQyMSBAQAorLyoKKyAqIExvdyBsZXZlbCAzLXdheSBpbi1jb3JlIGZpbGUgbWVyZ2UuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEp1bmlvIEMgSGFtYW5vCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAibGwtbWVyZ2UuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorCitzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyOworCit0eXBlZGVmIGludCAoKmxsX21lcmdlX2ZuKShjb25zdCBzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICosCisJCQkgICBtbWJ1ZmZlcl90ICpyZXN1bHQsCisJCQkgICBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgbW1maWxlX3QgKm9yaWcsIGNvbnN0IGNoYXIgKm9yaWdfbmFtZSwKKwkJCSAgIG1tZmlsZV90ICpzcmMxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCSAgIG1tZmlsZV90ICpzcmMyLCBjb25zdCBjaGFyICpuYW1lMiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zICpvcHRzLAorCQkJICAgaW50IG1hcmtlcl9zaXplKTsKKworc3RydWN0IGxsX21lcmdlX2RyaXZlciB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpkZXNjcmlwdGlvbjsKKwlsbF9tZXJnZV9mbiBmbjsKKwljb25zdCBjaGFyICpyZWN1cnNpdmU7CisJc3RydWN0IGxsX21lcmdlX2RyaXZlciAqbmV4dDsKKwljaGFyICpjbWRsaW5lOworfTsKKworc3RhdGljIHN0cnVjdCBhdHRyX2NoZWNrICptZXJnZV9hdHRyaWJ1dGVzOworc3RhdGljIHN0cnVjdCBhdHRyX2NoZWNrICpsb2FkX21lcmdlX2F0dHJpYnV0ZXModm9pZCkKK3sKKwlpZiAoIW1lcmdlX2F0dHJpYnV0ZXMpCisJCW1lcmdlX2F0dHJpYnV0ZXMgPSBhdHRyX2NoZWNrX2luaXRsKCJtZXJnZSIsICJjb25mbGljdC1tYXJrZXItc2l6ZSIsIE5VTEwpOworCXJldHVybiBtZXJnZV9hdHRyaWJ1dGVzOworfQorCit2b2lkIHJlc2V0X21lcmdlX2F0dHJpYnV0ZXModm9pZCkKK3sKKwlhdHRyX2NoZWNrX2ZyZWUobWVyZ2VfYXR0cmlidXRlcyk7CisJbWVyZ2VfYXR0cmlidXRlcyA9IE5VTEw7Cit9CisKKy8qCisgKiBCdWlsdC1pbiBsb3ctbGV2ZWxzCisgKi8KK3N0YXRpYyBpbnQgbGxfYmluYXJ5X21lcmdlKGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmRydl91bnVzZWQsCisJCQkgICBtbWJ1ZmZlcl90ICpyZXN1bHQsCisJCQkgICBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgbW1maWxlX3QgKm9yaWcsIGNvbnN0IGNoYXIgKm9yaWdfbmFtZSwKKwkJCSAgIG1tZmlsZV90ICpzcmMxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCSAgIG1tZmlsZV90ICpzcmMyLCBjb25zdCBjaGFyICpuYW1lMiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zICpvcHRzLAorCQkJICAgaW50IG1hcmtlcl9zaXplKQoreworCW1tZmlsZV90ICpzdG9sZW47CisJYXNzZXJ0KG9wdHMpOworCisJLyoKKwkgKiBUaGUgdGVudGF0aXZlIG1lcmdlIHJlc3VsdCBpcyB0aGUgY29tbW9uIGFuY2VzdG9yIGZvciBhbgorCSAqIGludGVybmFsIG1lcmdlLiAgRm9yIHRoZSBmaW5hbCBtZXJnZSwgaXQgaXMgIm91cnMiIGJ5CisJICogZGVmYXVsdCBidXQgLVhvdXJzLy1YdGhlaXJzIGNhbiB0d2VhayB0aGUgY2hvaWNlLgorCSAqLworCWlmIChvcHRzLT52aXJ0dWFsX2FuY2VzdG9yKSB7CisJCXN0b2xlbiA9IG9yaWc7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChvcHRzLT52YXJpYW50KSB7CisJCWRlZmF1bHQ6CisJCQl3YXJuaW5nKCJDYW5ub3QgbWVyZ2UgYmluYXJ5IGZpbGVzOiAlcyAoJXMgdnMuICVzKSIsCisJCQkJcGF0aCwgbmFtZTEsIG5hbWUyKTsKKwkJCS8qIGZhbGx0aHJ1ICovCisJCWNhc2UgWERMX01FUkdFX0ZBVk9SX09VUlM6CisJCQlzdG9sZW4gPSBzcmMxOworCQkJYnJlYWs7CisJCWNhc2UgWERMX01FUkdFX0ZBVk9SX1RIRUlSUzoKKwkJCXN0b2xlbiA9IHNyYzI7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJlc3VsdC0+cHRyID0gc3RvbGVuLT5wdHI7CisJcmVzdWx0LT5zaXplID0gc3RvbGVuLT5zaXplOworCXN0b2xlbi0+cHRyID0gTlVMTDsKKworCS8qCisJICogV2l0aCAtWHRoZWlycyBvciAtWG91cnMsIHdlIGhhdmUgY2xlYW5seSBtZXJnZWQ7CisJICogb3RoZXJ3aXNlIHdlIGdvdCBhIGNvbmZsaWN0LgorCSAqLworCXJldHVybiAob3B0cy0+dmFyaWFudCA/IDAgOiAxKTsKK30KKworc3RhdGljIGludCBsbF94ZGxfbWVyZ2UoY29uc3Qgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqZHJ2X3VudXNlZCwKKwkJCW1tYnVmZmVyX3QgKnJlc3VsdCwKKwkJCWNvbnN0IGNoYXIgKnBhdGgsCisJCQltbWZpbGVfdCAqb3JpZywgY29uc3QgY2hhciAqb3JpZ19uYW1lLAorCQkJbW1maWxlX3QgKnNyYzEsIGNvbnN0IGNoYXIgKm5hbWUxLAorCQkJbW1maWxlX3QgKnNyYzIsIGNvbnN0IGNoYXIgKm5hbWUyLAorCQkJY29uc3Qgc3RydWN0IGxsX21lcmdlX29wdGlvbnMgKm9wdHMsCisJCQlpbnQgbWFya2VyX3NpemUpCit7CisJeG1wYXJhbV90IHhtcDsKKwlhc3NlcnQob3B0cyk7CisKKwlpZiAob3JpZy0+c2l6ZSA+IE1BWF9YRElGRl9TSVpFIHx8CisJICAgIHNyYzEtPnNpemUgPiBNQVhfWERJRkZfU0laRSB8fAorCSAgICBzcmMyLT5zaXplID4gTUFYX1hESUZGX1NJWkUgfHwKKwkgICAgYnVmZmVyX2lzX2JpbmFyeShvcmlnLT5wdHIsIG9yaWctPnNpemUpIHx8CisJICAgIGJ1ZmZlcl9pc19iaW5hcnkoc3JjMS0+cHRyLCBzcmMxLT5zaXplKSB8fAorCSAgICBidWZmZXJfaXNfYmluYXJ5KHNyYzItPnB0ciwgc3JjMi0+c2l6ZSkpIHsKKwkJcmV0dXJuIGxsX2JpbmFyeV9tZXJnZShkcnZfdW51c2VkLCByZXN1bHQsCisJCQkJICAgICAgIHBhdGgsCisJCQkJICAgICAgIG9yaWcsIG9yaWdfbmFtZSwKKwkJCQkgICAgICAgc3JjMSwgbmFtZTEsCisJCQkJICAgICAgIHNyYzIsIG5hbWUyLAorCQkJCSAgICAgICBvcHRzLCBtYXJrZXJfc2l6ZSk7CisJfQorCisJbWVtc2V0KCZ4bXAsIDAsIHNpemVvZih4bXApKTsKKwl4bXAubGV2ZWwgPSBYRExfTUVSR0VfWkVBTE9VUzsKKwl4bXAuZmF2b3IgPSBvcHRzLT52YXJpYW50OworCXhtcC54cHAuZmxhZ3MgPSBvcHRzLT54ZGxfb3B0czsKKwlpZiAoZ2l0X3htZXJnZV9zdHlsZSA+PSAwKQorCQl4bXAuc3R5bGUgPSBnaXRfeG1lcmdlX3N0eWxlOworCWlmIChtYXJrZXJfc2l6ZSA+IDApCisJCXhtcC5tYXJrZXJfc2l6ZSA9IG1hcmtlcl9zaXplOworCXhtcC5hbmNlc3RvciA9IG9yaWdfbmFtZTsKKwl4bXAuZmlsZTEgPSBuYW1lMTsKKwl4bXAuZmlsZTIgPSBuYW1lMjsKKwlyZXR1cm4geGRsX21lcmdlKG9yaWcsIHNyYzEsIHNyYzIsICZ4bXAsIHJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQgbGxfdW5pb25fbWVyZ2UoY29uc3Qgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqZHJ2X3VudXNlZCwKKwkJCSAgbW1idWZmZXJfdCAqcmVzdWx0LAorCQkJICBjb25zdCBjaGFyICpwYXRoX3VudXNlZCwKKwkJCSAgbW1maWxlX3QgKm9yaWcsIGNvbnN0IGNoYXIgKm9yaWdfbmFtZSwKKwkJCSAgbW1maWxlX3QgKnNyYzEsIGNvbnN0IGNoYXIgKm5hbWUxLAorCQkJICBtbWZpbGVfdCAqc3JjMiwgY29uc3QgY2hhciAqbmFtZTIsCisJCQkgIGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zICpvcHRzLAorCQkJICBpbnQgbWFya2VyX3NpemUpCit7CisJLyogVXNlIHVuaW9uIGZhdm9yICovCisJc3RydWN0IGxsX21lcmdlX29wdGlvbnMgbzsKKwlhc3NlcnQob3B0cyk7CisJbyA9ICpvcHRzOworCW8udmFyaWFudCA9IFhETF9NRVJHRV9GQVZPUl9VTklPTjsKKwlyZXR1cm4gbGxfeGRsX21lcmdlKGRydl91bnVzZWQsIHJlc3VsdCwgcGF0aF91bnVzZWQsCisJCQkgICAgb3JpZywgTlVMTCwgc3JjMSwgTlVMTCwgc3JjMiwgTlVMTCwKKwkJCSAgICAmbywgbWFya2VyX3NpemUpOworfQorCisjZGVmaW5lIExMX0JJTkFSWV9NRVJHRSAwCisjZGVmaW5lIExMX1RFWFRfTUVSR0UgMQorI2RlZmluZSBMTF9VTklPTl9NRVJHRSAyCitzdGF0aWMgc3RydWN0IGxsX21lcmdlX2RyaXZlciBsbF9tZXJnZV9kcnZbXSA9IHsKKwl7ICJiaW5hcnkiLCAiYnVpbHQtaW4gYmluYXJ5IG1lcmdlIiwgbGxfYmluYXJ5X21lcmdlIH0sCisJeyAidGV4dCIsICJidWlsdC1pbiAzLXdheSB0ZXh0IG1lcmdlIiwgbGxfeGRsX21lcmdlIH0sCisJeyAidW5pb24iLCAiYnVpbHQtaW4gdW5pb24gbWVyZ2UiLCBsbF91bmlvbl9tZXJnZSB9LAorfTsKKworc3RhdGljIHZvaWQgY3JlYXRlX3RlbXAobW1maWxlX3QgKnNyYywgY2hhciAqcGF0aCwgc2l6ZV90IGxlbikKK3sKKwlpbnQgZmQ7CisKKwl4c25wcmludGYocGF0aCwgbGVuLCAiLm1lcmdlX2ZpbGVfWFhYWFhYIik7CisJZmQgPSB4bWtzdGVtcChwYXRoKTsKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgc3JjLT5wdHIsIHNyYy0+c2l6ZSkgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSB0ZW1wLWZpbGUiKTsKKwljbG9zZShmZCk7Cit9CisKKy8qCisgKiBVc2VyIGRlZmluZWQgbG93LWxldmVsIG1lcmdlIGRyaXZlciBzdXBwb3J0LgorICovCitzdGF0aWMgaW50IGxsX2V4dF9tZXJnZShjb25zdCBzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpmbiwKKwkJCW1tYnVmZmVyX3QgKnJlc3VsdCwKKwkJCWNvbnN0IGNoYXIgKnBhdGgsCisJCQltbWZpbGVfdCAqb3JpZywgY29uc3QgY2hhciAqb3JpZ19uYW1lLAorCQkJbW1maWxlX3QgKnNyYzEsIGNvbnN0IGNoYXIgKm5hbWUxLAorCQkJbW1maWxlX3QgKnNyYzIsIGNvbnN0IGNoYXIgKm5hbWUyLAorCQkJY29uc3Qgc3RydWN0IGxsX21lcmdlX29wdGlvbnMgKm9wdHMsCisJCQlpbnQgbWFya2VyX3NpemUpCit7CisJY2hhciB0ZW1wWzRdWzUwXTsKKwlzdHJ1Y3Qgc3RyYnVmIGNtZCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWZfZXhwYW5kX2RpY3RfZW50cnkgZGljdFs2XTsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGhfc3EgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICphcmdzW10gPSB7IE5VTEwsIE5VTEwgfTsKKwlpbnQgc3RhdHVzLCBmZCwgaTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlhc3NlcnQob3B0cyk7CisKKwlzcV9xdW90ZV9idWYoJnBhdGhfc3EsIHBhdGgpOworCWRpY3RbMF0ucGxhY2Vob2xkZXIgPSAiTyI7IGRpY3RbMF0udmFsdWUgPSB0ZW1wWzBdOworCWRpY3RbMV0ucGxhY2Vob2xkZXIgPSAiQSI7IGRpY3RbMV0udmFsdWUgPSB0ZW1wWzFdOworCWRpY3RbMl0ucGxhY2Vob2xkZXIgPSAiQiI7IGRpY3RbMl0udmFsdWUgPSB0ZW1wWzJdOworCWRpY3RbM10ucGxhY2Vob2xkZXIgPSAiTCI7IGRpY3RbM10udmFsdWUgPSB0ZW1wWzNdOworCWRpY3RbNF0ucGxhY2Vob2xkZXIgPSAiUCI7IGRpY3RbNF0udmFsdWUgPSBwYXRoX3NxLmJ1ZjsKKwlkaWN0WzVdLnBsYWNlaG9sZGVyID0gTlVMTDsgZGljdFs1XS52YWx1ZSA9IE5VTEw7CisKKwlpZiAoZm4tPmNtZGxpbmUgPT0gTlVMTCkKKwkJZGllKCJjdXN0b20gbWVyZ2UgZHJpdmVyICVzIGxhY2tzIGNvbW1hbmQgbGluZS4iLCBmbi0+bmFtZSk7CisKKwlyZXN1bHQtPnB0ciA9IE5VTEw7CisJcmVzdWx0LT5zaXplID0gMDsKKwljcmVhdGVfdGVtcChvcmlnLCB0ZW1wWzBdLCBzaXplb2YodGVtcFswXSkpOworCWNyZWF0ZV90ZW1wKHNyYzEsIHRlbXBbMV0sIHNpemVvZih0ZW1wWzFdKSk7CisJY3JlYXRlX3RlbXAoc3JjMiwgdGVtcFsyXSwgc2l6ZW9mKHRlbXBbMl0pKTsKKwl4c25wcmludGYodGVtcFszXSwgc2l6ZW9mKHRlbXBbM10pLCAiJWQiLCBtYXJrZXJfc2l6ZSk7CisKKwlzdHJidWZfZXhwYW5kKCZjbWQsIGZuLT5jbWRsaW5lLCBzdHJidWZfZXhwYW5kX2RpY3RfY2IsICZkaWN0KTsKKworCWFyZ3NbMF0gPSBjbWQuYnVmOworCXN0YXR1cyA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MsIFJVTl9VU0lOR19TSEVMTCk7CisJZmQgPSBvcGVuKHRlbXBbMV0sIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlnb3RvIGJhZDsKKwlpZiAoZnN0YXQoZmQsICZzdCkpCisJCWdvdG8gY2xvc2VfYmFkOworCXJlc3VsdC0+c2l6ZSA9IHN0LnN0X3NpemU7CisJcmVzdWx0LT5wdHIgPSB4bWFsbG9jeihyZXN1bHQtPnNpemUpOworCWlmIChyZWFkX2luX2Z1bGwoZmQsIHJlc3VsdC0+cHRyLCByZXN1bHQtPnNpemUpICE9IHJlc3VsdC0+c2l6ZSkgeworCQlGUkVFX0FORF9OVUxMKHJlc3VsdC0+cHRyKTsKKwkJcmVzdWx0LT5zaXplID0gMDsKKwl9CisgY2xvc2VfYmFkOgorCWNsb3NlKGZkKTsKKyBiYWQ6CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJdW5saW5rX29yX3dhcm4odGVtcFtpXSk7CisJc3RyYnVmX3JlbGVhc2UoJmNtZCk7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGhfc3EpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBtZXJnZS5kZWZhdWx0IGFuZCBtZXJnZS5kcml2ZXIgY29uZmlndXJhdGlvbiBpdGVtcworICovCitzdGF0aWMgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqbGxfdXNlcl9tZXJnZSwgKipsbF91c2VyX21lcmdlX3RhaWw7CitzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9sbF9tZXJnZTsKKworc3RhdGljIGludCByZWFkX21lcmdlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpmbjsKKwljb25zdCBjaGFyICprZXksICpuYW1lOworCXNpemVfdCBuYW1lbGVuOworCisJaWYgKCFzdHJjbXAodmFyLCAibWVyZ2UuZGVmYXVsdCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRlZmF1bHRfbGxfbWVyZ2UsIHZhciwgdmFsdWUpOworCisJLyoKKwkgKiBXZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gYW55dGhpbmcgYnV0ICJtZXJnZS48bmFtZT4udmFyaWFibGUiOworCSAqIGVzcGVjaWFsbHksIHdlIGRvIG5vdCB3YW50IHRvIGxvb2sgYXQgdmFyaWFibGVzIHN1Y2ggYXMKKwkgKiAibWVyZ2Uuc3VtbWFyeSIsICJtZXJnZS50b29sIiwgYW5kICJtZXJnZS52ZXJib3NpdHkiLgorCSAqLworCWlmIChwYXJzZV9jb25maWdfa2V5KHZhciwgIm1lcmdlIiwgJm5hbWUsICZuYW1lbGVuLCAma2V5KSA8IDAgfHwgIW5hbWUpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBGaW5kIGV4aXN0aW5nIG9uZSBhcyB3ZSBtaWdodCBiZSBwcm9jZXNzaW5nIG1lcmdlLjxuYW1lPi52YXIyCisJICogYWZ0ZXIgc2VlaW5nIG1lcmdlLjxuYW1lPi52YXIxLgorCSAqLworCWZvciAoZm4gPSBsbF91c2VyX21lcmdlOyBmbjsgZm4gPSBmbi0+bmV4dCkKKwkJaWYgKCFzdHJuY21wKGZuLT5uYW1lLCBuYW1lLCBuYW1lbGVuKSAmJiAhZm4tPm5hbWVbbmFtZWxlbl0pCisJCQlicmVhazsKKwlpZiAoIWZuKSB7CisJCWZuID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxsX21lcmdlX2RyaXZlcikpOworCQlmbi0+bmFtZSA9IHhtZW1kdXB6KG5hbWUsIG5hbWVsZW4pOworCQlmbi0+Zm4gPSBsbF9leHRfbWVyZ2U7CisJCSpsbF91c2VyX21lcmdlX3RhaWwgPSBmbjsKKwkJbGxfdXNlcl9tZXJnZV90YWlsID0gJihmbi0+bmV4dCk7CisJfQorCisJaWYgKCFzdHJjbXAoIm5hbWUiLCBrZXkpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmZuLT5kZXNjcmlwdGlvbiwgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCgiZHJpdmVyIiwga2V5KSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGVycm9yKCIlczogbGFja3MgdmFsdWUiLCB2YXIpOworCQkvKgorCQkgKiBtZXJnZS48bmFtZT4uZHJpdmVyIHNwZWNpZmllcyB0aGUgY29tbWFuZCBsaW5lOgorCQkgKgorCQkgKgljb21tYW5kLWxpbmUKKwkJICoKKwkJICogVGhlIGNvbW1hbmQtbGluZSB3aWxsIGJlIGludGVycG9sYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcKKwkJICogdG9rZW5zIGFuZCBpcyBnaXZlbiB0byB0aGUgc2hlbGw6CisJCSAqCisJCSAqICAgICVPIC0gdGVtcG9yYXJ5IGZpbGUgbmFtZSBmb3IgdGhlIG1lcmdlIGJhc2UuCisJCSAqICAgICVBIC0gdGVtcG9yYXJ5IGZpbGUgbmFtZSBmb3Igb3VyIHZlcnNpb24uCisJCSAqICAgICVCIC0gdGVtcG9yYXJ5IGZpbGUgbmFtZSBmb3IgdGhlIG90aGVyIGJyYW5jaGVzJyB2ZXJzaW9uLgorCQkgKiAgICAlTCAtIGNvbmZsaWN0IG1hcmtlciBsZW5ndGgKKwkJICogICAgJVAgLSB0aGUgb3JpZ2luYWwgcGF0aCAoc2FmZWx5IHF1b3RlZCBmb3IgdGhlIHNoZWxsKQorCQkgKgorCQkgKiBUaGUgZXh0ZXJuYWwgbWVyZ2UgZHJpdmVyIHNob3VsZCB3cml0ZSB0aGUgcmVzdWx0cyBpbiB0aGUKKwkJICogZmlsZSBuYW1lZCBieSAlQSwgYW5kIHNpZ25hbCB0aGF0IGl0IGhhcyBkb25lIHdpdGggemVybyBleGl0CisJCSAqIHN0YXR1cy4KKwkJICovCisJCWZuLT5jbWRsaW5lID0geHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJyZWN1cnNpdmUiLCBrZXkpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmZuLT5yZWN1cnNpdmUsIHZhciwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVfbGxfbWVyZ2Uodm9pZCkKK3sKKwlpZiAobGxfdXNlcl9tZXJnZV90YWlsKQorCQlyZXR1cm47CisJbGxfdXNlcl9tZXJnZV90YWlsID0gJmxsX3VzZXJfbWVyZ2U7CisJZ2l0X2NvbmZpZyhyZWFkX21lcmdlX2NvbmZpZywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpmaW5kX2xsX21lcmdlX2RyaXZlcihjb25zdCBjaGFyICptZXJnZV9hdHRyKQoreworCXN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmZuOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGk7CisKKwlpbml0aWFsaXplX2xsX21lcmdlKCk7CisKKwlpZiAoQVRUUl9UUlVFKG1lcmdlX2F0dHIpKQorCQlyZXR1cm4gJmxsX21lcmdlX2RydltMTF9URVhUX01FUkdFXTsKKwllbHNlIGlmIChBVFRSX0ZBTFNFKG1lcmdlX2F0dHIpKQorCQlyZXR1cm4gJmxsX21lcmdlX2RydltMTF9CSU5BUllfTUVSR0VdOworCWVsc2UgaWYgKEFUVFJfVU5TRVQobWVyZ2VfYXR0cikpIHsKKwkJaWYgKCFkZWZhdWx0X2xsX21lcmdlKQorCQkJcmV0dXJuICZsbF9tZXJnZV9kcnZbTExfVEVYVF9NRVJHRV07CisJCWVsc2UKKwkJCW5hbWUgPSBkZWZhdWx0X2xsX21lcmdlOworCX0KKwllbHNlCisJCW5hbWUgPSBtZXJnZV9hdHRyOworCisJZm9yIChmbiA9IGxsX3VzZXJfbWVyZ2U7IGZuOyBmbiA9IGZuLT5uZXh0KQorCQlpZiAoIXN0cmNtcChmbi0+bmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gZm47CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsbF9tZXJnZV9kcnYpOyBpKyspCisJCWlmICghc3RyY21wKGxsX21lcmdlX2RydltpXS5uYW1lLCBuYW1lKSkKKwkJCXJldHVybiAmbGxfbWVyZ2VfZHJ2W2ldOworCisJLyogZGVmYXVsdCB0byB0aGUgMy13YXkgKi8KKwlyZXR1cm4gJmxsX21lcmdlX2RydltMTF9URVhUX01FUkdFXTsKK30KKworc3RhdGljIHZvaWQgbm9ybWFsaXplX2ZpbGUobW1maWxlX3QgKm1tLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHN0cmJ1ZiA9IFNUUkJVRl9JTklUOworCWlmIChyZW5vcm1hbGl6ZV9idWZmZXIoaXN0YXRlLCBwYXRoLCBtbS0+cHRyLCBtbS0+c2l6ZSwgJnN0cmJ1ZikpIHsKKwkJZnJlZShtbS0+cHRyKTsKKwkJbW0tPnNpemUgPSBzdHJidWYubGVuOworCQltbS0+cHRyID0gc3RyYnVmX2RldGFjaCgmc3RyYnVmLCBOVUxMKTsKKwl9Cit9CisKK2ludCBsbF9tZXJnZShtbWJ1ZmZlcl90ICpyZXN1bHRfYnVmLAorCSAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkgICAgIG1tZmlsZV90ICphbmNlc3RvciwgY29uc3QgY2hhciAqYW5jZXN0b3JfbGFiZWwsCisJICAgICBtbWZpbGVfdCAqb3VycywgY29uc3QgY2hhciAqb3VyX2xhYmVsLAorCSAgICAgbW1maWxlX3QgKnRoZWlycywgY29uc3QgY2hhciAqdGhlaXJfbGFiZWwsCisJICAgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkgICAgIGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zICpvcHRzKQoreworCXN0cnVjdCBhdHRyX2NoZWNrICpjaGVjayA9IGxvYWRfbWVyZ2VfYXR0cmlidXRlcygpOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9ucyBkZWZhdWx0X29wdHM7CisJY29uc3QgY2hhciAqbGxfZHJpdmVyX25hbWUgPSBOVUxMOworCWludCBtYXJrZXJfc2l6ZSA9IERFRkFVTFRfQ09ORkxJQ1RfTUFSS0VSX1NJWkU7CisJY29uc3Qgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqZHJpdmVyOworCisJaWYgKCFvcHRzKQorCQlvcHRzID0gJmRlZmF1bHRfb3B0czsKKworCWlmIChvcHRzLT5yZW5vcm1hbGl6ZSkgeworCQlub3JtYWxpemVfZmlsZShhbmNlc3RvciwgcGF0aCwgaXN0YXRlKTsKKwkJbm9ybWFsaXplX2ZpbGUob3VycywgcGF0aCwgaXN0YXRlKTsKKwkJbm9ybWFsaXplX2ZpbGUodGhlaXJzLCBwYXRoLCBpc3RhdGUpOworCX0KKworCWdpdF9jaGVja19hdHRyKGlzdGF0ZSwgcGF0aCwgY2hlY2spOworCWxsX2RyaXZlcl9uYW1lID0gY2hlY2stPml0ZW1zWzBdLnZhbHVlOworCWlmIChjaGVjay0+aXRlbXNbMV0udmFsdWUpIHsKKwkJbWFya2VyX3NpemUgPSBhdG9pKGNoZWNrLT5pdGVtc1sxXS52YWx1ZSk7CisJCWlmIChtYXJrZXJfc2l6ZSA8PSAwKQorCQkJbWFya2VyX3NpemUgPSBERUZBVUxUX0NPTkZMSUNUX01BUktFUl9TSVpFOworCX0KKwlkcml2ZXIgPSBmaW5kX2xsX21lcmdlX2RyaXZlcihsbF9kcml2ZXJfbmFtZSk7CisKKwlpZiAob3B0cy0+dmlydHVhbF9hbmNlc3RvcikgeworCQlpZiAoZHJpdmVyLT5yZWN1cnNpdmUpCisJCQlkcml2ZXIgPSBmaW5kX2xsX21lcmdlX2RyaXZlcihkcml2ZXItPnJlY3Vyc2l2ZSk7CisJfQorCWlmIChvcHRzLT5leHRyYV9tYXJrZXJfc2l6ZSkgeworCQltYXJrZXJfc2l6ZSArPSBvcHRzLT5leHRyYV9tYXJrZXJfc2l6ZTsKKwl9CisJcmV0dXJuIGRyaXZlci0+Zm4oZHJpdmVyLCByZXN1bHRfYnVmLCBwYXRoLCBhbmNlc3RvciwgYW5jZXN0b3JfbGFiZWwsCisJCQkgIG91cnMsIG91cl9sYWJlbCwgdGhlaXJzLCB0aGVpcl9sYWJlbCwKKwkJCSAgb3B0cywgbWFya2VyX3NpemUpOworfQorCitpbnQgbGxfbWVyZ2VfbWFya2VyX3NpemUoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RhdGljIHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKKwlpbnQgbWFya2VyX3NpemUgPSBERUZBVUxUX0NPTkZMSUNUX01BUktFUl9TSVpFOworCisJaWYgKCFjaGVjaykKKwkJY2hlY2sgPSBhdHRyX2NoZWNrX2luaXRsKCJjb25mbGljdC1tYXJrZXItc2l6ZSIsIE5VTEwpOworCWdpdF9jaGVja19hdHRyKGlzdGF0ZSwgcGF0aCwgY2hlY2spOworCWlmIChjaGVjay0+aXRlbXNbMF0udmFsdWUpIHsKKwkJbWFya2VyX3NpemUgPSBhdG9pKGNoZWNrLT5pdGVtc1swXS52YWx1ZSk7CisJCWlmIChtYXJrZXJfc2l6ZSA8PSAwKQorCQkJbWFya2VyX3NpemUgPSBERUZBVUxUX0NPTkZMSUNUX01BUktFUl9TSVpFOworCX0KKwlyZXR1cm4gbWFya2VyX3NpemU7Cit9CmRpZmYgLS1naXQgYS9sbC1tZXJnZS5oIGIvbGwtbWVyZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2ViMWIyCi0tLSAvZGV2L251bGwKKysrIGIvbGwtbWVyZ2UuaApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIExvdyBsZXZlbCAzLXdheSBpbi1jb3JlIGZpbGUgbWVyZ2UuCisgKi8KKworI2lmbmRlZiBMTF9NRVJHRV9ICisjZGVmaW5lIExMX01FUkdFX0gKKworI2luY2x1ZGUgInhkaWZmL3hkaWZmLmgiCisKKy8qKgorICoKKyAqIENhbGxpbmcgc2VxdWVuY2U6CisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKgorICogLSBQcmVwYXJlIGEgYHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zYCB0byByZWNvcmQgb3B0aW9ucy4KKyAqICAgSWYgeW91IGhhdmUgbm8gc3BlY2lhbCByZXF1ZXN0cywgc2tpcCB0aGlzIGFuZCBwYXNzIGBOVUxMYAorICogICBhcyB0aGUgYG9wdHNgIHBhcmFtZXRlciB0byB1c2UgdGhlIGRlZmF1bHQgb3B0aW9ucy4KKyAqCisgKiAtIEFsbG9jYXRlIGFuIG1tYnVmZmVyX3QgdmFyaWFibGUgZm9yIHRoZSByZXN1bHQuCisgKgorICogLSBBbGxvY2F0ZSBhbmQgZmlsbCB2YXJpYWJsZXMgd2l0aCB0aGUgZmlsZSdzIG9yaWdpbmFsIGNvbnRlbnQKKyAqICAgYW5kIHR3byBtb2RpZmllZCB2ZXJzaW9ucyAodXNpbmcgYHJlYWRfbW1maWxlYCwgZm9yIGV4YW1wbGUpLgorICoKKyAqIC0gQ2FsbCBgbGxfbWVyZ2UoKWAuCisgKgorICogLSBSZWFkIHRoZSBtZXJnZWQgY29udGVudCBmcm9tIGByZXN1bHRfYnVmLnB0cmAgYW5kIGByZXN1bHRfYnVmLnNpemVgLgorICoKKyAqIC0gUmVsZWFzZSBidWZmZXJzIHdoZW4gZmluaXNoZWQuICBBIHNpbXBsZQorICogICBgZnJlZShhbmNlc3Rvci5wdHIpOyBmcmVlKG91cnMucHRyKTsgZnJlZSh0aGVpcnMucHRyKTsKKyAqICAgZnJlZShyZXN1bHRfYnVmLnB0cik7YCB3aWxsIGRvLgorICoKKyAqIElmIHRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCBtZXJnZSBjbGVhbmx5LCBgbGxfbWVyZ2VgIHdpbGwgcmV0dXJuIGEKKyAqIG5vbnplcm8gdmFsdWUgYW5kIGByZXN1bHRfYnVmYCB3aWxsIGdlbmVyYWxseSBpbmNsdWRlIGEgZGVzY3JpcHRpb24gb2YKKyAqIHRoZSBjb25mbGljdCBicmFja2V0ZWQgYnkgbWFya2VycyBzdWNoIGFzIHRoZSB0cmFkaXRpb25hbCBgPDw8PDw8PGAKKyAqIGFuZCBgPj4+Pj4+PmAuCisgKgorICogVGhlIGBhbmNlc3Rvcl9sYWJlbGAsIGBvdXJfbGFiZWxgLCBhbmQgYHRoZWlyX2xhYmVsYCBwYXJhbWV0ZXJzIGFyZQorICogdXNlZCB0byBsYWJlbCB0aGUgZGlmZmVyZW50IHNpZGVzIG9mIGEgY29uZmxpY3QgaWYgdGhlIG1lcmdlIGRyaXZlcgorICogc3VwcG9ydHMgdGhpcy4KKyAqLworCisKK3N0cnVjdCBpbmRleF9zdGF0ZTsKKworLyoqCisgKiBUaGlzIGRlc2NyaWJlcyB0aGUgc2V0IG9mIG9wdGlvbnMgdGhlIGNhbGxpbmcgcHJvZ3JhbSB3YW50cyB0byBhZmZlY3QKKyAqIHRoZSBvcGVyYXRpb24gb2YgYSBsb3ctbGV2ZWwgKHNpbmdsZSBmaWxlKSBtZXJnZS4KKyAqLworc3RydWN0IGxsX21lcmdlX29wdGlvbnMgeworCisJLyoqCisJICogQmVoYXZlIGFzIHRob3VnaCB0aGlzIHdlcmUgcGFydCBvZiBhIG1lcmdlIGJldHdlZW4gY29tbW9uIGFuY2VzdG9ycyBpbgorCSAqIGEgcmVjdXJzaXZlIG1lcmdlIChtZXJnZXMgb2YgYmluYXJ5IGZpbGVzIG1heSBuZWVkIHRvIGJlIGhhbmRsZWQKKwkgKiBkaWZmZXJlbnRseSBpbiBzdWNoIGNhc2VzLCBmb3IgZXhhbXBsZSkuIElmIGEgaGVscGVyIHByb2dyYW0gaXMKKwkgKiBzcGVjaWZpZWQgYnkgdGhlIGBbbWVyZ2UgIjxkcml2ZXI+Il0gcmVjdXJzaXZlYCBjb25maWd1cmF0aW9uLCBpdCB3aWxsCisJICogYmUgdXNlZC4KKwkgKi8KKwl1bnNpZ25lZCB2aXJ0dWFsX2FuY2VzdG9yIDogMTsKKworCS8qKgorCSAqIFJlc29sdmUgbG9jYWwgY29uZmxpY3RzIGF1dG9tYXRpY2FsbHkgaW4gZmF2b3Igb2Ygb25lIHNpZGUgb3IgdGhlIG90aGVyCisJICogKGFzIGluICdnaXQgbWVyZ2UtZmlsZScgYC0tb3Vyc2AvYC0tdGhlaXJzYC9gLS11bmlvbmApLiAgQ2FuIGJlIGAwYCwKKwkgKiBgWERMX01FUkdFX0ZBVk9SX09VUlNgLCBgWERMX01FUkdFX0ZBVk9SX1RIRUlSU2AsCisJICogb3IgYFhETF9NRVJHRV9GQVZPUl9VTklPTmAuCisJICovCisJdW5zaWduZWQgdmFyaWFudCA6IDI7CisKKwkvKioKKwkgKiBSZXNtdWRnZSBhbmQgY2xlYW4gdGhlICJiYXNlIiwgInRoZWlycyIgYW5kICJvdXJzIiBmaWxlcyBiZWZvcmUgbWVyZ2luZy4KKwkgKiBVc2UgdGhpcyB3aGVuIHRoZSBtZXJnZSBpcyBsaWtlbHkgdG8gaGF2ZSBvdmVybGFwcGVkIHdpdGggYSBjaGFuZ2UgaW4KKwkgKiBzbXVkZ2UvY2xlYW4gb3IgZW5kLW9mLWxpbmUgbm9ybWFsaXphdGlvbiBydWxlcy4KKwkgKi8KKwl1bnNpZ25lZCByZW5vcm1hbGl6ZSA6IDE7CisKKwkvKioKKwkgKiBJbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIGNvbmZsaWN0IG1hcmtlcnMgc28gdGhhdCBuZXN0ZWQgY29uZmxpY3RzCisJwqAqIGNhbiBiZSBkaWZmZXJlbnRpYXRlZC4KKwkgKi8KKwl1bnNpZ25lZCBleHRyYV9tYXJrZXJfc2l6ZTsKKworCS8qIEV4dHJhIHhwcGFyYW1fdCBmbGFncyBhcyBkZWZpbmVkIGluIHhkaWZmL3hkaWZmLmguICovCisJbG9uZyB4ZGxfb3B0czsKK307CisKKy8qKgorICogUGVyZm9ybSBhIHRocmVlLXdheSBzaW5nbGUtZmlsZSBtZXJnZSBpbiBjb3JlLiAgVGhpcyBpcyBhIHRoaW4gd3JhcHBlcgorICogYXJvdW5kIGB4ZGxfbWVyZ2VgIHRoYXQgdGFrZXMgdGhlIHBhdGggYW5kIGFueSBtZXJnZSBiYWNrZW5kIHNwZWNpZmllZCBpbgorICogYC5naXRhdHRyaWJ1dGVzYCBvciBgLmdpdC9pbmZvL2F0dHJpYnV0ZXNgIGludG8gYWNjb3VudC4KKyAqIFJldHVybnMgMCBmb3IgYSBjbGVhbiBtZXJnZS4KKyAqLworaW50IGxsX21lcmdlKG1tYnVmZmVyX3QgKnJlc3VsdF9idWYsCisJICAgICBjb25zdCBjaGFyICpwYXRoLAorCSAgICAgbW1maWxlX3QgKmFuY2VzdG9yLCBjb25zdCBjaGFyICphbmNlc3Rvcl9sYWJlbCwKKwkgICAgIG1tZmlsZV90ICpvdXJzLCBjb25zdCBjaGFyICpvdXJfbGFiZWwsCisJICAgICBtbWZpbGVfdCAqdGhlaXJzLCBjb25zdCBjaGFyICp0aGVpcl9sYWJlbCwKKwkgICAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCSAgICAgY29uc3Qgc3RydWN0IGxsX21lcmdlX29wdGlvbnMgKm9wdHMpOworCitpbnQgbGxfbWVyZ2VfbWFya2VyX3NpemUoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgpOwordm9pZCByZXNldF9tZXJnZV9hdHRyaWJ1dGVzKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xvY2tmaWxlLmMgYi9sb2NrZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOWE0YjgKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NrZmlsZS5jCkBAIC0wLDAgKzEsMjE2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCBKdW5pbyBDIEhhbWFubworICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisKKy8qCisgKiBwYXRoID0gYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCBuYW1lCisgKgorICogUmVtb3ZlIHRoZSBsYXN0IHBhdGggbmFtZSBlbGVtZW50IGZyb20gcGF0aCAobGVhdmluZyB0aGUgcHJlY2VkaW5nCisgKiAiLyIsIGlmIGFueSkuICBJZiBwYXRoIGlzIGVtcHR5IG9yIHRoZSByb290IGRpcmVjdG9yeSAoIi8iKSwgc2V0CisgKiBwYXRoIHRvIHRoZSBlbXB0eSBzdHJpbmcuCisgKi8KK3N0YXRpYyB2b2lkIHRyaW1fbGFzdF9wYXRoX2NvbXBvbmVudChzdHJ1Y3Qgc3RyYnVmICpwYXRoKQoreworCWludCBpID0gcGF0aC0+bGVuOworCisJLyogYmFjayB1cCBwYXN0IHRyYWlsaW5nIHNsYXNoZXMsIGlmIGFueSAqLworCXdoaWxlIChpICYmIHBhdGgtPmJ1ZltpIC0gMV0gPT0gJy8nKQorCQlpLS07CisKKwkvKgorCSAqIHRoZW4gZ28gYmFja3dhcmRzIHVudGlsIGEgc2xhc2gsIG9yIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisJICogc3RyaW5nCisJICovCisJd2hpbGUgKGkgJiYgcGF0aC0+YnVmW2kgLSAxXSAhPSAnLycpCisJCWktLTsKKworCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgaSk7Cit9CisKKworLyogV2UgYWxsb3cgInJlY3Vyc2l2ZSIgc3ltYm9saWMgbGlua3MuIE9ubHkgd2l0aGluIHJlYXNvbiwgdGhvdWdoICovCisjZGVmaW5lIE1BWERFUFRIIDUKKworLyoKKyAqIHBhdGggY29udGFpbnMgYSBwYXRoIHRoYXQgbWlnaHQgYmUgYSBzeW1saW5rLgorICoKKyAqIElmIHBhdGggaXMgYSBzeW1saW5rLCBhdHRlbXB0IHRvIG92ZXJ3cml0ZSBpdCB3aXRoIGEgcGF0aCB0byB0aGUKKyAqIHJlYWwgZmlsZSBvciBkaXJlY3RvcnkgKHdoaWNoIG1heSBvciBtYXkgbm90IGV4aXN0KSwgZm9sbG93aW5nIGEKKyAqIGNoYWluIG9mIHN5bWxpbmtzIGlmIG5lY2Vzc2FyeS4gIE90aGVyd2lzZSwgbGVhdmUgcGF0aCB1bm1vZGlmaWVkLgorICoKKyAqIFRoaXMgaXMgYSBiZXN0LWVmZm9ydCByb3V0aW5lLiAgSWYgYW4gZXJyb3Igb2NjdXJzLCBwYXRoIHdpbGwKKyAqIGVpdGhlciBiZSBsZWZ0IHVubW9kaWZpZWQgb3Igd2lsbCBuYW1lIGEgZGlmZmVyZW50IHN5bWxpbmsgaW4gYQorICogc3ltbGluayBjaGFpbiB0aGF0IHN0YXJ0ZWQgd2l0aCB0aGUgb3JpZ2luYWwgcGF0aC4KKyAqLworc3RhdGljIHZvaWQgcmVzb2x2ZV9zeW1saW5rKHN0cnVjdCBzdHJidWYgKnBhdGgpCit7CisJaW50IGRlcHRoID0gTUFYREVQVEg7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgbGluayA9IFNUUkJVRl9JTklUOworCisJd2hpbGUgKGRlcHRoLS0pIHsKKwkJaWYgKHN0cmJ1Zl9yZWFkbGluaygmbGluaywgcGF0aC0+YnVmLCBwYXRoLT5sZW4pIDwgMCkKKwkJCWJyZWFrOworCisJCWlmIChpc19hYnNvbHV0ZV9wYXRoKGxpbmsuYnVmKSkKKwkJCS8qIGFic29sdXRlIHBhdGggc2ltcGx5IHJlcGxhY2VzIHAgKi8KKwkJCXN0cmJ1Zl9yZXNldChwYXRoKTsKKwkJZWxzZQorCQkJLyoKKwkJCSAqIGxpbmsgaXMgYSByZWxhdGl2ZSBwYXRoLCBzbyByZXBsYWNlIHRoZQorCQkJICogbGFzdCBlbGVtZW50IG9mIHAgd2l0aCBpdC4KKwkJCSAqLworCQkJdHJpbV9sYXN0X3BhdGhfY29tcG9uZW50KHBhdGgpOworCisJCXN0cmJ1Zl9hZGRidWYocGF0aCwgJmxpbmspOworCX0KKwlzdHJidWZfcmVzZXQoJmxpbmspOworfQorCisvKiBNYWtlIHN1cmUgZXJybm8gY29udGFpbnMgYSBtZWFuaW5nZnVsIHZhbHVlIG9uIGVycm9yICovCitzdGF0aWMgaW50IGxvY2tfZmlsZShzdHJ1Y3QgbG9ja19maWxlICpsaywgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLAorCQkgICAgIGludCBtb2RlKQoreworCXN0cnVjdCBzdHJidWYgZmlsZW5hbWUgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRzdHIoJmZpbGVuYW1lLCBwYXRoKTsKKwlpZiAoIShmbGFncyAmIExPQ0tfTk9fREVSRUYpKQorCQlyZXNvbHZlX3N5bWxpbmsoJmZpbGVuYW1lKTsKKworCXN0cmJ1Zl9hZGRzdHIoJmZpbGVuYW1lLCBMT0NLX1NVRkZJWCk7CisJbGstPnRlbXBmaWxlID0gY3JlYXRlX3RlbXBmaWxlX21vZGUoZmlsZW5hbWUuYnVmLCBtb2RlKTsKKwlzdHJidWZfcmVsZWFzZSgmZmlsZW5hbWUpOworCXJldHVybiBsay0+dGVtcGZpbGUgPyBsay0+dGVtcGZpbGUtPmZkIDogLTE7Cit9CisKKy8qCisgKiBDb25zdGFudHMgZGVmaW5pbmcgdGhlIGdhcHMgYmV0d2VlbiBhdHRlbXB0cyB0byBsb2NrIGEgZmlsZS4gVGhlCisgKiBmaXJzdCBiYWNrb2ZmIHBlcmlvZCBpcyBhcHByb3hpbWF0ZWx5IElOSVRJQUxfQkFDS09GRl9NUworICogbWlsbGlzZWNvbmRzLiBUaGUgbG9uZ2VzdCBiYWNrb2ZmIHBlcmlvZCBpcyBhcHByb3hpbWF0ZWx5CisgKiAoQkFDS09GRl9NQVhfTVVMVElQTElFUiAqIElOSVRJQUxfQkFDS09GRl9NUykgbWlsbGlzZWNvbmRzLgorICovCisjZGVmaW5lIElOSVRJQUxfQkFDS09GRl9NUyAxTAorI2RlZmluZSBCQUNLT0ZGX01BWF9NVUxUSVBMSUVSIDEwMDAKKworLyoKKyAqIFRyeSBsb2NraW5nIHBhdGgsIHJldHJ5aW5nIHdpdGggcXVhZHJhdGljIGJhY2tvZmYgZm9yIGF0IGxlYXN0CisgKiB0aW1lb3V0X21zIG1pbGxpc2Vjb25kcy4gSWYgdGltZW91dF9tcyBpcyAwLCB0cnkgbG9ja2luZyB0aGUgZmlsZQorICogZXhhY3RseSBvbmNlLiBJZiB0aW1lb3V0X21zIGlzIC0xLCB0cnkgaW5kZWZpbml0ZWx5LgorICovCitzdGF0aWMgaW50IGxvY2tfZmlsZV90aW1lb3V0KHN0cnVjdCBsb2NrX2ZpbGUgKmxrLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICBpbnQgZmxhZ3MsIGxvbmcgdGltZW91dF9tcywgaW50IG1vZGUpCit7CisJaW50IG4gPSAxOworCWludCBtdWx0aXBsaWVyID0gMTsKKwlsb25nIHJlbWFpbmluZ19tcyA9IDA7CisJc3RhdGljIGludCByYW5kb21faW5pdGlhbGl6ZWQgPSAwOworCisJaWYgKHRpbWVvdXRfbXMgPT0gMCkKKwkJcmV0dXJuIGxvY2tfZmlsZShsaywgcGF0aCwgZmxhZ3MsIG1vZGUpOworCisJaWYgKCFyYW5kb21faW5pdGlhbGl6ZWQpIHsKKwkJc3JhbmQoKHVuc2lnbmVkIGludClnZXRwaWQoKSk7CisJCXJhbmRvbV9pbml0aWFsaXplZCA9IDE7CisJfQorCisJaWYgKHRpbWVvdXRfbXMgPiAwKQorCQlyZW1haW5pbmdfbXMgPSB0aW1lb3V0X21zOworCisJd2hpbGUgKDEpIHsKKwkJbG9uZyBiYWNrb2ZmX21zLCB3YWl0X21zOworCQlpbnQgZmQ7CisKKwkJZmQgPSBsb2NrX2ZpbGUobGssIHBhdGgsIGZsYWdzLCBtb2RlKTsKKworCQlpZiAoZmQgPj0gMCkKKwkJCXJldHVybiBmZDsgLyogc3VjY2VzcyAqLworCQllbHNlIGlmIChlcnJubyAhPSBFRVhJU1QpCisJCQlyZXR1cm4gLTE7IC8qIGZhaWx1cmUgb3RoZXIgdGhhbiBsb2NrIGhlbGQgKi8KKwkJZWxzZSBpZiAodGltZW91dF9tcyA+IDAgJiYgcmVtYWluaW5nX21zIDw9IDApCisJCQlyZXR1cm4gLTE7IC8qIGZhaWx1cmUgZHVlIHRvIHRpbWVvdXQgKi8KKworCQliYWNrb2ZmX21zID0gbXVsdGlwbGllciAqIElOSVRJQUxfQkFDS09GRl9NUzsKKwkJLyogYmFjayBvZmYgZm9yIGJldHdlZW4gMC43NSpiYWNrb2ZmX21zIGFuZCAxLjI1KmJhY2tvZmZfbXMgKi8KKwkJd2FpdF9tcyA9ICg3NTAgKyByYW5kKCkgJSA1MDApICogYmFja29mZl9tcyAvIDEwMDA7CisJCXNsZWVwX21pbGxpc2VjKHdhaXRfbXMpOworCQlyZW1haW5pbmdfbXMgLT0gd2FpdF9tczsKKworCQkvKiBSZWN1cnNpb246IChuKzEpXjIgPSBuXjIgKyAybiArIDEgKi8KKwkJbXVsdGlwbGllciArPSAyKm4gKyAxOworCQlpZiAobXVsdGlwbGllciA+IEJBQ0tPRkZfTUFYX01VTFRJUExJRVIpCisJCQltdWx0aXBsaWVyID0gQkFDS09GRl9NQVhfTVVMVElQTElFUjsKKwkJZWxzZQorCQkJbisrOworCX0KK30KKwordm9pZCB1bmFibGVfdG9fbG9ja19tZXNzYWdlKGNvbnN0IGNoYXIgKnBhdGgsIGludCBlcnIsIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlpZiAoZXJyID09IEVFWElTVCkgeworCQlzdHJidWZfYWRkZihidWYsIF8oIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcy5cblxuIgorCQkgICAgIkFub3RoZXIgZ2l0IHByb2Nlc3Mgc2VlbXMgdG8gYmUgcnVubmluZyBpbiB0aGlzIHJlcG9zaXRvcnksIGUuZy5cbiIKKwkJICAgICJhbiBlZGl0b3Igb3BlbmVkIGJ5ICdnaXQgY29tbWl0Jy4gUGxlYXNlIG1ha2Ugc3VyZSBhbGwgcHJvY2Vzc2VzXG4iCisJCSAgICAiYXJlIHRlcm1pbmF0ZWQgdGhlbiB0cnkgYWdhaW4uIElmIGl0IHN0aWxsIGZhaWxzLCBhIGdpdCBwcm9jZXNzXG4iCisJCSAgICAibWF5IGhhdmUgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllcjpcbiIKKwkJICAgICJyZW1vdmUgdGhlIGZpbGUgbWFudWFsbHkgdG8gY29udGludWUuIiksCisJCQkgICAgYWJzb2x1dGVfcGF0aChwYXRoKSwgc3RyZXJyb3IoZXJyKSk7CisJfSBlbHNlCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgXygiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzIiksCisJCQkgICAgYWJzb2x1dGVfcGF0aChwYXRoKSwgc3RyZXJyb3IoZXJyKSk7Cit9CisKK05PUkVUVVJOIHZvaWQgdW5hYmxlX3RvX2xvY2tfZGllKGNvbnN0IGNoYXIgKnBhdGgsIGludCBlcnIpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXVuYWJsZV90b19sb2NrX21lc3NhZ2UocGF0aCwgZXJyLCAmYnVmKTsKKwlkaWUoIiVzIiwgYnVmLmJ1Zik7Cit9CisKKy8qIFRoaXMgc2hvdWxkIHJldHVybiBhIG1lYW5pbmdmdWwgZXJybm8gb24gZmFpbHVyZSAqLworaW50IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGVfdGltZW91dF9tb2RlKHN0cnVjdCBsb2NrX2ZpbGUgKmxrLAorCQkJCQkgICBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsCisJCQkJCSAgIGxvbmcgdGltZW91dF9tcywgaW50IG1vZGUpCit7CisJaW50IGZkID0gbG9ja19maWxlX3RpbWVvdXQobGssIHBhdGgsIGZsYWdzLCB0aW1lb3V0X21zLCBtb2RlKTsKKwlpZiAoZmQgPCAwKSB7CisJCWlmIChmbGFncyAmIExPQ0tfRElFX09OX0VSUk9SKQorCQkJdW5hYmxlX3RvX2xvY2tfZGllKHBhdGgsIGVycm5vKTsKKwkJaWYgKGZsYWdzICYgTE9DS19SRVBPUlRfT05fRVJST1IpIHsKKwkJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCQl1bmFibGVfdG9fbG9ja19tZXNzYWdlKHBhdGgsIGVycm5vLCAmYnVmKTsKKwkJCWVycm9yKCIlcyIsIGJ1Zi5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCX0KKwl9CisJcmV0dXJuIGZkOworfQorCitjaGFyICpnZXRfbG9ja2VkX2ZpbGVfcGF0aChzdHJ1Y3QgbG9ja19maWxlICpsaykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJldCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZHN0cigmcmV0LCBnZXRfdGVtcGZpbGVfcGF0aChsay0+dGVtcGZpbGUpKTsKKwlpZiAocmV0LmxlbiA8PSBMT0NLX1NVRkZJWF9MRU4gfHwKKwkgICAgc3RyY21wKHJldC5idWYgKyByZXQubGVuIC0gTE9DS19TVUZGSVhfTEVOLCBMT0NLX1NVRkZJWCkpCisJCUJVRygiZ2V0X2xvY2tlZF9maWxlX3BhdGgoKSBjYWxsZWQgZm9yIG1hbGZvcm1lZCBsb2NrIG9iamVjdCIpOworCS8qIHJlbW92ZSAiLmxvY2siOiAqLworCXN0cmJ1Zl9zZXRsZW4oJnJldCwgcmV0LmxlbiAtIExPQ0tfU1VGRklYX0xFTik7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnJldCwgTlVMTCk7Cit9CisKK2ludCBjb21taXRfbG9ja19maWxlKHN0cnVjdCBsb2NrX2ZpbGUgKmxrKQoreworCWNoYXIgKnJlc3VsdF9wYXRoID0gZ2V0X2xvY2tlZF9maWxlX3BhdGgobGspOworCisJaWYgKGNvbW1pdF9sb2NrX2ZpbGVfdG8obGssIHJlc3VsdF9wYXRoKSkgeworCQlpbnQgc2F2ZV9lcnJubyA9IGVycm5vOworCQlmcmVlKHJlc3VsdF9wYXRoKTsKKwkJZXJybm8gPSBzYXZlX2Vycm5vOworCQlyZXR1cm4gLTE7CisJfQorCWZyZWUocmVzdWx0X3BhdGgpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbG9ja2ZpbGUuaCBiL2xvY2tmaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5M2U2YgotLS0gL2Rldi9udWxsCisrKyBiL2xvY2tmaWxlLmgKQEAgLTAsMCArMSwzMzEgQEAKKyNpZm5kZWYgTE9DS0ZJTEVfSAorI2RlZmluZSBMT0NLRklMRV9ICisKKy8qCisgKiBGaWxlIHdyaXRlLWxvY2tzIGFzIHVzZWQgYnkgR2l0LgorICoKKyAqIFRoZSBsb2NrZmlsZSBBUEkgc2VydmVzIHR3byBwdXJwb3NlczoKKyAqCisgKiAqIE11dHVhbCBleGNsdXNpb24gYW5kIGF0b21pYyBmaWxlIHVwZGF0ZXMuIFdoZW4gd2Ugd2FudCB0byBjaGFuZ2UKKyAqICAgYSBmaWxlLCB3ZSBjcmVhdGUgYSBsb2NrZmlsZSBgPGZpbGVuYW1lPi5sb2NrYCwgd3JpdGUgdGhlIG5ldworICogICBmaWxlIGNvbnRlbnRzIGludG8gaXQsIGFuZCB0aGVuIHJlbmFtZSB0aGUgbG9ja2ZpbGUgdG8gaXRzIGZpbmFsCisgKiAgIGRlc3RpbmF0aW9uIGA8ZmlsZW5hbWU+YC4gV2UgY3JlYXRlIHRoZSBgPGZpbGVuYW1lPi5sb2NrYCBmaWxlCisgKiAgIHdpdGggYE9fQ1JFQVR8T19FWENMYCBzbyB0aGF0IHdlIGNhbiBub3RpY2UgYW5kIGZhaWwgaWYgc29tZWJvZHkKKyAqICAgZWxzZSBoYXMgYWxyZWFkeSBsb2NrZWQgdGhlIGZpbGUsIHRoZW4gYXRvbWljYWxseSByZW5hbWUgdGhlCisgKiAgIGxvY2tmaWxlIHRvIGl0cyBmaW5hbCBkZXN0aW5hdGlvbiB0byBjb21taXQgdGhlIGNoYW5nZXMgYW5kCisgKiAgIHVubG9jayB0aGUgZmlsZS4KKyAqCisgKiAqIEF1dG9tYXRpYyBjcnVmdCByZW1vdmFsLiBJZiB0aGUgcHJvZ3JhbSBleGl0cyBhZnRlciB3ZSBsb2NrIGEKKyAqICAgZmlsZSBidXQgYmVmb3JlIHRoZSBjaGFuZ2VzIGhhdmUgYmVlbiBjb21taXR0ZWQsIHdlIHdhbnQgdG8gbWFrZQorICogICBzdXJlIHRoYXQgd2UgcmVtb3ZlIHRoZSBsb2NrZmlsZS4gVGhpcyBpcyBkb25lIGJ5IHJlbWVtYmVyaW5nIHRoZQorICogICBsb2NrZmlsZXMgd2UgaGF2ZSBjcmVhdGVkIGluIGEgbGlua2VkIGxpc3QgYW5kIHNldHRpbmcgdXAgYW4KKyAqICAgYGF0ZXhpdCgzKWAgaGFuZGxlciBhbmQgYSBzaWduYWwgaGFuZGxlciB0aGF0IGNsZWFuIHVwIHRoZQorICogICBsb2NrZmlsZXMuIFRoaXMgbWVjaGFuaXNtIGVuc3VyZXMgdGhhdCBvdXRzdGFuZGluZyBsb2NrZmlsZXMgYXJlCisgKiAgIGNsZWFuZWQgdXAgaWYgdGhlIHByb2dyYW0gZXhpdHMgKGluY2x1ZGluZyB3aGVuIGBkaWUoKWAgaXMKKyAqICAgY2FsbGVkKSBvciBpZiB0aGUgcHJvZ3JhbSBpcyB0ZXJtaW5hdGVkIGJ5IGEgc2lnbmFsLgorICoKKyAqIFBsZWFzZSBub3RlIHRoYXQgbG9ja2ZpbGVzIG9ubHkgYmxvY2sgb3RoZXIgd3JpdGVycy4gUmVhZGVycyBkbyBub3QKKyAqIGJsb2NrLCBidXQgdGhleSBhcmUgZ3VhcmFudGVlZCB0byBzZWUgZWl0aGVyIHRoZSBvbGQgY29udGVudHMgb2YKKyAqIHRoZSBmaWxlIG9yIHRoZSBuZXcgY29udGVudHMgb2YgdGhlIGZpbGUgKGFzc3VtaW5nIHRoYXQgdGhlCisgKiBmaWxlc3lzdGVtIGltcGxlbWVudHMgYHJlbmFtZSgyKWAgYXRvbWljYWxseSkuCisgKgorICogTW9zdCBvZiB0aGUgaGVhdnkgbGlmdGluZyBpcyBkb25lIGJ5IHRoZSB0ZW1wZmlsZSBtb2R1bGUgKHNlZQorICogInRlbXBmaWxlLmgiKS4KKyAqCisgKiBDYWxsaW5nIHNlcXVlbmNlCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhlIGNhbGxlcjoKKyAqCisgKiAqIEFsbG9jYXRlcyBhIGBzdHJ1Y3QgbG9ja19maWxlYCB3aXRoIHdoYXRldmVyIHN0b3JhZ2UgZHVyYXRpb24geW91CisgKiAgIGRlc2lyZS4gVGhlIHN0cnVjdCBkb2VzIG5vdCBoYXZlIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZworICogICB1c2VkLCBidXQgaXQgaXMgZ29vZCBwcmFjdGljZSB0byBkbyBzbyB1c2luZyBieSBzZXR0aW5nIGl0IHRvCisgKiAgIGFsbC16ZXJvcyAob3IgdXNpbmcgdGhlIExPQ0tfSU5JVCBtYWNybykuIFRoaXMgcHV0cyB0aGUgb2JqZWN0IGluIGEKKyAqICAgY29uc2lzdGVudCBzdGF0ZSB0aGF0IGFsbG93cyB5b3UgdG8gY2FsbCByb2xsYmFja19sb2NrX2ZpbGUoKSBldmVuCisgKiAgIGlmIHRoZSBsb2NrIHdhcyBuZXZlciB0YWtlbiAoaW4gd2hpY2ggY2FzZSBpdCBpcyBhIG5vb3ApLgorICoKKyAqICogQXR0ZW1wdHMgdG8gY3JlYXRlIGEgbG9ja2ZpbGUgYnkgY2FsbGluZyBgaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgpYC4KKyAqCisgKiAqIFdyaXRlcyBuZXcgY29udGVudCBmb3IgdGhlIGRlc3RpbmF0aW9uIGZpbGUgYnkgZWl0aGVyOgorICoKKyAqICAgKiB3cml0aW5nIHRvIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgdGhlCisgKiAgICAgYGhvbGRfbG9ja19maWxlX2Zvcl8qKClgIGZ1bmN0aW9ucyAoYWxzbyBhdmFpbGFibGUgdmlhCisgKiAgICAgYGxvY2stPmZkYCkuCisgKgorICogICAqIGNhbGxpbmcgYGZkb3Blbl9sb2NrX2ZpbGUoKWAgdG8gZ2V0IGEgYEZJTEVgIHBvaW50ZXIgZm9yIHRoZQorICogICAgIG9wZW4gZmlsZSBhbmQgd3JpdGluZyB0byB0aGUgZmlsZSB1c2luZyBzdGRpby4KKyAqCisgKiAgIE5vdGUgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoKQorICogICBpcyBtYXJrZWQgT19DTE9FWEVDLCBzbyB0aGUgbmV3IGNvbnRlbnRzIG11c3QgYmUgd3JpdHRlbiBieSB0aGUKKyAqICAgY3VycmVudCBwcm9jZXNzLCBub3QgYSBzcGF3bmVkIG9uZS4KKyAqCisgKiBXaGVuIGZpbmlzaGVkIHdyaXRpbmcsIHRoZSBjYWxsZXIgY2FuOgorICoKKyAqICogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBhbmQgcmVuYW1lIHRoZSBsb2NrZmlsZSB0byBpdHMgZmluYWwKKyAqICAgZGVzdGluYXRpb24gYnkgY2FsbGluZyBgY29tbWl0X2xvY2tfZmlsZSgpYCBvcgorICogICBgY29tbWl0X2xvY2tfZmlsZV90bygpYC4KKyAqCisgKiAqIENsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgYW5kIHJlbW92ZSB0aGUgbG9ja2ZpbGUgYnkgY2FsbGluZworICogICBgcm9sbGJhY2tfbG9ja19maWxlKClgLgorICoKKyAqICogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciB3aXRob3V0IHJlbW92aW5nIG9yIHJlbmFtaW5nIHRoZQorICogICBsb2NrZmlsZSBieSBjYWxsaW5nIGBjbG9zZV9sb2NrX2ZpbGVfZ2VudGx5KClgLCBhbmQgbGF0ZXIgY2FsbAorICogICBgY29tbWl0X2xvY2tfZmlsZSgpYCwgYGNvbW1pdF9sb2NrX2ZpbGVfdG8oKWAsCisgKiAgIGByb2xsYmFja19sb2NrX2ZpbGUoKWAsIG9yIGByZW9wZW5fbG9ja19maWxlKClgLgorICoKKyAqIEFmdGVyIHRoZSBsb2NrZmlsZSBpcyBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2ssIHRoZSBgbG9ja19maWxlYAorICogb2JqZWN0IGNhbiBiZSBkaXNjYXJkZWQgb3IgcmV1c2VkLgorICoKKyAqIElmIHRoZSBwcm9ncmFtIGV4aXRzIGJlZm9yZSBgY29tbWl0X2xvY2tfZmlsZSgpYCwKKyAqIGBjb21taXRfbG9ja19maWxlX3RvKClgLCBvciBgcm9sbGJhY2tfbG9ja19maWxlKClgIGlzIGNhbGxlZCwgdGhlCisgKiB0ZW1wZmlsZSBtb2R1bGUgd2lsbCBjbG9zZSBhbmQgcmVtb3ZlIHRoZSBsb2NrZmlsZSwgdGhlcmVieSByb2xsaW5nCisgKiBiYWNrIGFueSB1bmNvbW1pdHRlZCBjaGFuZ2VzLgorICoKKyAqIElmIHlvdSBuZWVkIHRvIGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgeW91IG9idGFpbmVkIGZyb20gYQorICogYGhvbGRfbG9ja19maWxlX2Zvcl8qKClgIGZ1bmN0aW9uIHlvdXJzZWxmLCBkbyBzbyBieSBjYWxsaW5nCisgKiBgY2xvc2VfbG9ja19maWxlX2dlbnRseSgpYC4gU2VlICJ0ZW1wZmlsZS5oIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKgorICogVW5kZXIgdGhlIGNvdmVycywgYSBsb2NrZmlsZSBpcyBqdXN0IGEgdGVtcGZpbGUgd2l0aCBhIGZldyBoZWxwZXIKKyAqIGZ1bmN0aW9ucy4gSW4gcGFydGljdWxhciwgdGhlIHN0YXRlIGRpYWdyYW0gYW5kIHRoZSBjbGVhbnVwCisgKiBtYWNoaW5lcnkgYXJlIGFsbCBpbXBsZW1lbnRlZCBpbiB0aGUgdGVtcGZpbGUgbW9kdWxlLgorICoKKyAqIFBlcm1pc3Npb24gYml0cworICogLS0tLS0tLS0tLS0tLS0tCisgKgorICogSWYgeW91IGNhbGwgZWl0aGVyIGBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlX21vZGVgIG9yCisgKiBgaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZV90aW1lb3V0X21vZGVgLCB5b3UgY2FuIHNwZWNpZnkgYSBzdWdnZXN0ZWQKKyAqIG1vZGUgZm9yIHRoZSB1bmRlcmx5aW5nIHRlbXBvcmFyeSBmaWxlLiBOb3RlIHRoYXQgdGhlIGZpbGUgaXNuJ3QKKyAqIGd1YXJhbnRlZWQgdG8gaGF2ZSB0aGlzIGV4YWN0IG1vZGUsIHNpbmNlIGl0IG1heSBiZSBsaW1pdGVkIGJ5IGVpdGhlcgorICogdGhlIHVtYXNrLCAnY29yZS5zaGFyZWRSZXBvc2l0b3J5Jywgb3IgYm90aC4gU2VlIGBhZGp1c3Rfc2hhcmVkX3Blcm1gCisgKiBmb3IgbW9yZS4KKyAqCisgKiBFcnJvciBoYW5kbGluZworICogLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGUgYGhvbGRfbG9ja19maWxlX2Zvcl8qKClgIGZ1bmN0aW9ucyByZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3Igb24KKyAqIHN1Y2Nlc3Mgb3IgLTEgb24gZmFpbHVyZSAodW5sZXNzIGBMT0NLX0RJRV9PTl9FUlJPUmAgaXMgdXNlZDsgc2VlCisgKiAiZmxhZ3MiIGJlbG93KS4gT24gZXJyb3JzLCBgZXJybm9gIGRlc2NyaWJlcyB0aGUgcmVhc29uIGZvcgorICogZmFpbHVyZS4gRXJyb3JzIGNhbiBiZSByZXBvcnRlZCBieSBwYXNzaW5nIGBlcnJub2AgdG8KKyAqIGB1bmFibGVfdG9fbG9ja19tZXNzYWdlKClgIG9yIGB1bmFibGVfdG9fbG9ja19kaWUoKWAuCisgKgorICogU2ltaWxhcmx5LCBgY29tbWl0X2xvY2tfZmlsZWAsIGBjb21taXRfbG9ja19maWxlX3RvYCwgYW5kCisgKiBgY2xvc2VfbG9ja19maWxlYCByZXR1cm4gMCBvbiBzdWNjZXNzLiBPbiBmYWlsdXJlIHRoZXkgc2V0IGBlcnJub2AKKyAqIGFwcHJvcHJpYXRlbHkgYW5kIHJldHVybiAtMS4gVGhlIGBjb21taXRgIHZhcmlhbnRzIChidXQgbm90IGBjbG9zZWApCisgKiBkbyB0aGVpciBiZXN0IHRvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZpbGUgYmVmb3JlIHJldHVybmluZy4KKyAqLworCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKworc3RydWN0IGxvY2tfZmlsZSB7CisJc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZTsKK307CisKKyNkZWZpbmUgTE9DS19JTklUIHsgTlVMTCB9CisKKy8qIFN0cmluZyBhcHBlbmRlZCB0byBhIGZpbGVuYW1lIHRvIGRlcml2ZSB0aGUgbG9ja2ZpbGUgbmFtZTogKi8KKyNkZWZpbmUgTE9DS19TVUZGSVggIi5sb2NrIgorI2RlZmluZSBMT0NLX1NVRkZJWF9MRU4gNQorCisKKy8qCisgKiBGbGFncworICogLS0tLS0KKyAqCisgKiBUaGUgZm9sbG93aW5nIGZsYWdzIGNhbiBiZSBwYXNzZWQgdG8gYGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoKWAuCisgKi8KKworLyoKKyAqIElmIGEgbG9jayBpcyBhbHJlYWR5IHRha2VuIGZvciB0aGUgZmlsZSwgYGRpZSgpYCB3aXRoIGFuIGVycm9yCisgKiBtZXNzYWdlLiBJZiB0aGlzIGZsYWcgaXMgbm90IHNwZWNpZmllZCwgdHJ5aW5nIHRvIGxvY2sgYSBmaWxlIHRoYXQKKyAqIGlzIGFscmVhZHkgbG9ja2VkIHNpbGVudGx5IHJldHVybnMgLTEgdG8gdGhlIGNhbGxlciwgb3IgLi4uCisgKi8KKyNkZWZpbmUgTE9DS19ESUVfT05fRVJST1IgMQorCisvKgorICogLi4uIHRoaXMgZmxhZyBjYW4gYmUgcGFzc2VkIGluc3RlYWQgdG8gcmV0dXJuIC0xIGFuZCBnaXZlIHRoZSB1c3VhbAorICogZXJyb3IgbWVzc2FnZSB1cG9uIGFuIGVycm9yLgorICovCisjZGVmaW5lIExPQ0tfUkVQT1JUX09OX0VSUk9SIDQKKworLyoKKyAqIFVzdWFsbHkgc3ltYm9saWMgbGlua3MgaW4gdGhlIGRlc3RpbmF0aW9uIHBhdGggYXJlIHJlc29sdmVkLiBUaGlzCisgKiBtZWFucyB0aGF0ICgxKSB0aGUgbG9ja2ZpbGUgaXMgY3JlYXRlZCBieSBhZGRpbmcgIi5sb2NrIiB0byB0aGUKKyAqIHJlc29sdmVkIHBhdGgsIGFuZCAoMikgdXBvbiBjb21taXQsIHRoZSByZXNvbHZlZCBwYXRoIGlzCisgKiBvdmVyd3JpdHRlbi4gSG93ZXZlciwgaWYgYExPQ0tfTk9fREVSRUZgIGlzIHNldCwgdGhlbiB0aGUgbG9ja2ZpbGUKKyAqIGlzIGNyZWF0ZWQgYnkgYWRkaW5nICIubG9jayIgdG8gdGhlIHBhdGggYXJndW1lbnQgaXRzZWxmLiBUaGlzCisgKiBvcHRpb24gaXMgdXNlZCwgZm9yIGV4YW1wbGUsIHdoZW4gZGV0YWNoaW5nIGEgc3ltYm9saWMgcmVmZXJlbmNlLAorICogd2hpY2ggZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHJlYXNvbnMsIGNhbiBiZSBhIHN5bWJvbGljIGxpbmsKKyAqIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIHJlZmVycmVkLXRvLXJlZmVyZW5jZS4KKyAqLworI2RlZmluZSBMT0NLX05PX0RFUkVGIDIKKworLyoKKyAqIEF0dGVtcHQgdG8gY3JlYXRlIGEgbG9ja2ZpbGUgZm9yIHRoZSBmaWxlIGF0IGBwYXRoYCBhbmQgcmV0dXJuIGEKKyAqIGZpbGUgZGVzY3JpcHRvciBmb3Igd3JpdGluZyB0byBpdCwgb3IgLTEgb24gZXJyb3IuIElmIHRoZSBmaWxlIGlzCisgKiBjdXJyZW50bHkgbG9ja2VkLCByZXRyeSB3aXRoIHF1YWRyYXRpYyBiYWNrb2ZmIGZvciBhdCBsZWFzdAorICogdGltZW91dF9tcyBtaWxsaXNlY29uZHMuIElmIHRpbWVvdXRfbXMgaXMgMCwgdHJ5IGV4YWN0bHkgb25jZTsgaWYKKyAqIHRpbWVvdXRfbXMgaXMgLTEsIHJldHJ5IGluZGVmaW5pdGVseS4gVGhlIGZsYWdzIGFyZ3VtZW50LCBlcnJvcgorICogaGFuZGxpbmcsIGFuZCBtb2RlIGFyZSBkZXNjcmliZWQgYWJvdmUuCisgKi8KK2ludCBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlX3RpbWVvdXRfbW9kZSgKKwkJc3RydWN0IGxvY2tfZmlsZSAqbGssIGNvbnN0IGNoYXIgKnBhdGgsCisJCWludCBmbGFncywgbG9uZyB0aW1lb3V0X21zLCBpbnQgbW9kZSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGVfdGltZW91dCgKKwkJc3RydWN0IGxvY2tfZmlsZSAqbGssIGNvbnN0IGNoYXIgKnBhdGgsCisJCWludCBmbGFncywgbG9uZyB0aW1lb3V0X21zKQoreworCXJldHVybiBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlX3RpbWVvdXRfbW9kZShsaywgcGF0aCwgZmxhZ3MsCisJCQkJCQkgICAgICB0aW1lb3V0X21zLCAwNjY2KTsKK30KKworLyoKKyAqIEF0dGVtcHQgdG8gY3JlYXRlIGEgbG9ja2ZpbGUgZm9yIHRoZSBmaWxlIGF0IGBwYXRoYCBhbmQgcmV0dXJuIGEKKyAqIGZpbGUgZGVzY3JpcHRvciBmb3Igd3JpdGluZyB0byBpdCwgb3IgLTEgb24gZXJyb3IuIFRoZSBmbGFncworICogYXJndW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIGFyZSBkZXNjcmliZWQgYWJvdmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoCisJCXN0cnVjdCBsb2NrX2ZpbGUgKmxrLCBjb25zdCBjaGFyICpwYXRoLAorCQlpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGVfdGltZW91dChsaywgcGF0aCwgZmxhZ3MsIDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlX21vZGUoCisJCXN0cnVjdCBsb2NrX2ZpbGUgKmxrLCBjb25zdCBjaGFyICpwYXRoLAorCQlpbnQgZmxhZ3MsIGludCBtb2RlKQoreworCXJldHVybiBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlX3RpbWVvdXRfbW9kZShsaywgcGF0aCwgZmxhZ3MsIDAsIG1vZGUpOworfQorCisvKgorICogUmV0dXJuIGEgbm9uemVybyB2YWx1ZSBpZmYgYGxrYCBpcyBjdXJyZW50bHkgbG9ja2VkLgorICovCitzdGF0aWMgaW5saW5lIGludCBpc19sb2NrX2ZpbGVfbG9ja2VkKHN0cnVjdCBsb2NrX2ZpbGUgKmxrKQoreworCXJldHVybiBpc190ZW1wZmlsZV9hY3RpdmUobGstPnRlbXBmaWxlKTsKK30KKworLyoKKyAqIEFwcGVuZCBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIHRvIGBidWZgIGZvbGxvd2luZyB0aGUgZmFpbHVyZQorICogb2YgYGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoKWAgdG8gbG9jayBgcGF0aGAuIGBlcnJgIHNob3VsZCBiZSB0aGUKKyAqIGBlcnJub2Agc2V0IGJ5IHRoZSBmYWlsaW5nIGNhbGwuCisgKi8KK3ZvaWQgdW5hYmxlX3RvX2xvY2tfbWVzc2FnZShjb25zdCBjaGFyICpwYXRoLCBpbnQgZXJyLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKmJ1Zik7CisKKy8qCisgKiBFbWl0IGFuIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2UgYW5kIGBkaWUoKWAgZm9sbG93aW5nIHRoZSBmYWlsdXJlCisgKiBvZiBgaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgpYCB0byBsb2NrIGBwYXRoYC4gYGVycmAgc2hvdWxkIGJlIHRoZQorICogYGVycm5vYCBzZXQgYnkgdGhlIGZhaWxpbmcKKyAqIGNhbGwuCisgKi8KK05PUkVUVVJOIHZvaWQgdW5hYmxlX3RvX2xvY2tfZGllKGNvbnN0IGNoYXIgKnBhdGgsIGludCBlcnIpOworCisvKgorICogQXNzb2NpYXRlIGEgc3RkaW8gc3RyZWFtIHdpdGggdGhlIGxvY2tmaWxlICh3aGljaCBtdXN0IHN0aWxsIGJlCisgKiBvcGVuKS4gUmV0dXJuIGBOVUxMYCAoKndpdGhvdXQqIHJvbGxpbmcgYmFjayB0aGUgbG9ja2ZpbGUpIG9uCisgKiBlcnJvci4gVGhlIHN0cmVhbSBpcyBjbG9zZWQgYXV0b21hdGljYWxseSB3aGVuCisgKiBgY2xvc2VfbG9ja19maWxlX2dlbnRseSgpYCBpcyBjYWxsZWQgb3Igd2hlbiB0aGUgZmlsZSBpcyBjb21taXR0ZWQgb3IKKyAqIHJvbGxlZCBiYWNrLgorICovCitzdGF0aWMgaW5saW5lIEZJTEUgKmZkb3Blbl9sb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqbGssIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJcmV0dXJuIGZkb3Blbl90ZW1wZmlsZShsay0+dGVtcGZpbGUsIG1vZGUpOworfQorCisvKgorICogUmV0dXJuIHRoZSBwYXRoIG9mIHRoZSBsb2NrZmlsZS4gVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gYQorICogZmllbGQgd2l0aGluIHRoZSBsb2NrX2ZpbGUgb2JqZWN0IGFuZCBzaG91bGQgbm90IGJlIGZyZWVkLgorICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmdldF9sb2NrX2ZpbGVfcGF0aChzdHJ1Y3QgbG9ja19maWxlICpsaykKK3sKKwlyZXR1cm4gZ2V0X3RlbXBmaWxlX3BhdGgobGstPnRlbXBmaWxlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X2xvY2tfZmlsZV9mZChzdHJ1Y3QgbG9ja19maWxlICpsaykKK3sKKwlyZXR1cm4gZ2V0X3RlbXBmaWxlX2ZkKGxrLT50ZW1wZmlsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRklMRSAqZ2V0X2xvY2tfZmlsZV9mcChzdHJ1Y3QgbG9ja19maWxlICpsaykKK3sKKwlyZXR1cm4gZ2V0X3RlbXBmaWxlX2ZwKGxrLT50ZW1wZmlsZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHBhdGggb2YgdGhlIGZpbGUgdGhhdCBpcyBsb2NrZWQgYnkgdGhlIHNwZWNpZmllZAorICogbG9ja19maWxlIG9iamVjdC4gVGhlIGNhbGxlciBtdXN0IGZyZWUgdGhlIG1lbW9yeS4KKyAqLworY2hhciAqZ2V0X2xvY2tlZF9maWxlX3BhdGgoc3RydWN0IGxvY2tfZmlsZSAqbGspOworCisvKgorICogSWYgdGhlIGxvY2tmaWxlIGlzIHN0aWxsIG9wZW4sIGNsb3NlIGl0IChhbmQgdGhlIGZpbGUgcG9pbnRlciBpZiBpdAorICogaGFzIGJlZW4gb3BlbmVkIHVzaW5nIGBmZG9wZW5fbG9ja19maWxlKClgKSB3aXRob3V0IHJlbmFtaW5nIHRoZQorICogbG9ja2ZpbGUgb3ZlciB0aGUgZmlsZSBiZWluZyBsb2NrZWQuIFJldHVybiAwIHVwb24gc3VjY2Vzcy4gT24KKyAqIGZhaWx1cmUgdG8gYGNsb3NlKDIpYCwgcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUgKHRoZSBsb2NrZmlsZSBpcyBub3QKKyAqIHJvbGxlZCBiYWNrKS4gVXN1YWxseSBgY29tbWl0X2xvY2tfZmlsZSgpYCwgYGNvbW1pdF9sb2NrX2ZpbGVfdG8oKWAsCisgKiBvciBgcm9sbGJhY2tfbG9ja19maWxlKClgIHNob3VsZCBldmVudHVhbGx5IGJlIGNhbGxlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY2xvc2VfbG9ja19maWxlX2dlbnRseShzdHJ1Y3QgbG9ja19maWxlICpsaykKK3sKKwlyZXR1cm4gY2xvc2VfdGVtcGZpbGVfZ2VudGx5KGxrLT50ZW1wZmlsZSk7Cit9CisKKy8qCisgKiBSZS1vcGVuIGEgbG9ja2ZpbGUgdGhhdCBoYXMgYmVlbiBjbG9zZWQgdXNpbmcgYGNsb3NlX2xvY2tfZmlsZV9nZW50bHkoKWAKKyAqIGJ1dCBub3QgeWV0IGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay4gVGhpcyBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQKKyAqIGEgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBsaWtlIHRoZSBmb2xsb3dpbmc6CisgKgorICogKiBMb2NrIGZpbGUuCisgKgorICogKiBXcml0ZSBuZXcgY29udGVudHMgdG8gbG9ja2ZpbGUsIHRoZW4gYGNsb3NlX2xvY2tfZmlsZV9nZW50bHkoKWAgdG8KKyAqICAgY2F1c2UgdGhlIGNvbnRlbnRzIHRvIGJlIHdyaXR0ZW4gdG8gZGlzay4KKyAqCisgKiAqIFBhc3MgdGhlIG5hbWUgb2YgdGhlIGxvY2tmaWxlIHRvIGFub3RoZXIgcHJvZ3JhbSB0byBhbGxvdyBpdCAoYW5kCisgKiAgIG5vYm9keSBlbHNlKSB0byBpbnNwZWN0IHRoZSBjb250ZW50cyB5b3Ugd3JvdGUsIHdoaWxlIHN0aWxsCisgKiAgIGhvbGRpbmcgdGhlIGxvY2sgeW91cnNlbGYuCisgKgorICogKiBgcmVvcGVuX2xvY2tfZmlsZSgpYCB0byByZW9wZW4gdGhlIGxvY2tmaWxlLCB0cnVuY2F0aW5nIHRoZSBleGlzdGluZworICogICBjb250ZW50cy4gV3JpdGUgb3V0IHRoZSBuZXcgY29udGVudHMuCisgKgorICogKiBgY29tbWl0X2xvY2tfZmlsZSgpYCB0byBtYWtlIHRoZSBmaW5hbCB2ZXJzaW9uIHBlcm1hbmVudC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmVvcGVuX2xvY2tfZmlsZShzdHJ1Y3QgbG9ja19maWxlICpsaykKK3sKKwlyZXR1cm4gcmVvcGVuX3RlbXBmaWxlKGxrLT50ZW1wZmlsZSk7Cit9CisKKy8qCisgKiBDb21taXQgdGhlIGNoYW5nZSByZXByZXNlbnRlZCBieSBgbGtgOiBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yCisgKiBhbmQvb3IgZmlsZSBwb2ludGVyIGlmIHRoZXkgYXJlIHN0aWxsIG9wZW4gYW5kIHJlbmFtZSB0aGUgbG9ja2ZpbGUKKyAqIHRvIGl0cyBmaW5hbCBkZXN0aW5hdGlvbi4gUmV0dXJuIDAgdXBvbiBzdWNjZXNzLiBPbiBmYWlsdXJlLCByb2xsCisgKiBiYWNrIHRoZSBsb2NrIGZpbGUgYW5kIHJldHVybiAtMSwgd2l0aCBgZXJybm9gIHNldCB0byB0aGUgdmFsdWUKKyAqIGZyb20gdGhlIGZhaWxpbmcgY2FsbCB0byBgY2xvc2UoMilgIG9yIGByZW5hbWUoMilgLiBJdCBpcyBhIGJ1ZyB0bworICogY2FsbCBgY29tbWl0X2xvY2tfZmlsZSgpYCBmb3IgYSBgbG9ja19maWxlYCBvYmplY3QgdGhhdCBpcyBub3QKKyAqIGN1cnJlbnRseSBsb2NrZWQuCisgKi8KK2ludCBjb21taXRfbG9ja19maWxlKHN0cnVjdCBsb2NrX2ZpbGUgKmxrKTsKKworLyoKKyAqIExpa2UgYGNvbW1pdF9sb2NrX2ZpbGUoKWAsIGJ1dCByZW5hbWUgdGhlIGxvY2tmaWxlIHRvIHRoZSBwcm92aWRlZAorICogYHBhdGhgLiBgcGF0aGAgbXVzdCBiZSBvbiB0aGUgc2FtZSBmaWxlc3lzdGVtIGFzIHRoZSBsb2NrIGZpbGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNvbW1pdF9sb2NrX2ZpbGVfdG8oc3RydWN0IGxvY2tfZmlsZSAqbGssIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIHJlbmFtZV90ZW1wZmlsZSgmbGstPnRlbXBmaWxlLCBwYXRoKTsKK30KKworLyoKKyAqIFJvbGwgYmFjayBgbGtgOiBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGFuZC9vciBmaWxlIHBvaW50ZXIgYW5kCisgKiByZW1vdmUgdGhlIGxvY2tmaWxlLiBJdCBpcyBhIE5PT1AgdG8gY2FsbCBgcm9sbGJhY2tfbG9ja19maWxlKClgCisgKiBmb3IgYSBgbG9ja19maWxlYCBvYmplY3QgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNvbW1pdHRlZCBvciByb2xsZWQKKyAqIGJhY2suCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByb2xsYmFja19sb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqbGspCit7CisJZGVsZXRlX3RlbXBmaWxlKCZsay0+dGVtcGZpbGUpOworfQorCisjZW5kaWYgLyogTE9DS0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvbG9nLXRyZWUuYyBiL2xvZy10cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhNjhkMAotLS0gL2Rldi9udWxsCisrKyBiL2xvZy10cmVlLmMKQEAgLTAsMCArMSw5OTEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiZ3JhcGguaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgInJlZmxvZy13YWxrLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAibGluZS1sb2cuaCIKKyNpbmNsdWRlICJoZWxwLmgiCisjaW5jbHVkZSAiaW50ZXJkaWZmLmgiCisjaW5jbHVkZSAicmFuZ2UtZGlmZi5oIgorCitzdGF0aWMgc3RydWN0IGRlY29yYXRpb24gbmFtZV9kZWNvcmF0aW9uID0geyAib2JqZWN0IG5hbWVzIiB9Oworc3RhdGljIGludCBkZWNvcmF0aW9uX2xvYWRlZDsKK3N0YXRpYyBpbnQgZGVjb3JhdGlvbl9mbGFnczsKKworc3RhdGljIGNoYXIgZGVjb3JhdGlvbl9jb2xvcnNbXVtDT0xPUl9NQVhMRU5dID0geworCUdJVF9DT0xPUl9SRVNFVCwKKwlHSVRfQ09MT1JfQk9MRF9HUkVFTiwJLyogUkVGX0xPQ0FMICovCisJR0lUX0NPTE9SX0JPTERfUkVELAkvKiBSRUZfUkVNT1RFICovCisJR0lUX0NPTE9SX0JPTERfWUVMTE9XLAkvKiBSRUZfVEFHICovCisJR0lUX0NPTE9SX0JPTERfTUFHRU5UQSwJLyogUkVGX1NUQVNIICovCisJR0lUX0NPTE9SX0JPTERfQ1lBTiwJLyogUkVGX0hFQUQgKi8KKwlHSVRfQ09MT1JfQk9MRF9CTFVFLAkvKiBHUkFGVEVEICovCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29sb3JfZGVjb3JhdGVfc2xvdHNbXSA9IHsKKwlbREVDT1JBVElPTl9SRUZfTE9DQUxdCT0gImJyYW5jaCIsCisJW0RFQ09SQVRJT05fUkVGX1JFTU9URV0gPSAicmVtb3RlQnJhbmNoIiwKKwlbREVDT1JBVElPTl9SRUZfVEFHXQk9ICJ0YWciLAorCVtERUNPUkFUSU9OX1JFRl9TVEFTSF0JPSAic3Rhc2giLAorCVtERUNPUkFUSU9OX1JFRl9IRUFEXQk9ICJIRUFEIiwKKwlbREVDT1JBVElPTl9HUkFGVEVEXQk9ICJncmFmdGVkIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpkZWNvcmF0ZV9nZXRfY29sb3IoaW50IGRlY29yYXRlX3VzZV9jb2xvciwgZW51bSBkZWNvcmF0aW9uX3R5cGUgaXgpCit7CisJaWYgKHdhbnRfY29sb3IoZGVjb3JhdGVfdXNlX2NvbG9yKSkKKwkJcmV0dXJuIGRlY29yYXRpb25fY29sb3JzW2l4XTsKKwlyZXR1cm4gIiI7Cit9CisKK2RlZmluZV9saXN0X2NvbmZpZ19hcnJheShjb2xvcl9kZWNvcmF0ZV9zbG90cyk7CisKK2ludCBwYXJzZV9kZWNvcmF0ZV9jb2xvcl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICpzbG90X25hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCBzbG90ID0gTE9PS1VQX0NPTkZJRyhjb2xvcl9kZWNvcmF0ZV9zbG90cywgc2xvdF9uYW1lKTsKKwlpZiAoc2xvdCA8IDApCisJCXJldHVybiAwOworCWlmICghdmFsdWUpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCXJldHVybiBjb2xvcl9wYXJzZSh2YWx1ZSwgZGVjb3JhdGlvbl9jb2xvcnNbc2xvdF0pOworfQorCisvKgorICogbG9nLXRyZWUuYyB1c2VzIERJRkZfT1BUX1RTVCBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0byB1c2UgY29sb3IKKyAqIGZvciBzaG93aW5nIHRoZSBjb21taXQgc2hhMSwgdXNlIHRoZSBzYW1lIGNoZWNrIGZvciAtLWRlY29yYXRlCisgKi8KKyNkZWZpbmUgZGVjb3JhdGVfZ2V0X2NvbG9yX29wdChvLCBpeCkgXAorCWRlY29yYXRlX2dldF9jb2xvcigobyktPnVzZV9jb2xvciwgaXgpCisKK3ZvaWQgYWRkX25hbWVfZGVjb3JhdGlvbihlbnVtIGRlY29yYXRpb25fdHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG5hbWVfZGVjb3JhdGlvbiAqcmVzOworCUZMRVhfQUxMT0NfU1RSKHJlcywgbmFtZSwgbmFtZSk7CisJcmVzLT50eXBlID0gdHlwZTsKKwlyZXMtPm5leHQgPSBhZGRfZGVjb3JhdGlvbigmbmFtZV9kZWNvcmF0aW9uLCBvYmosIHJlcyk7Cit9CisKK2NvbnN0IHN0cnVjdCBuYW1lX2RlY29yYXRpb24gKmdldF9uYW1lX2RlY29yYXRpb24oY29uc3Qgc3RydWN0IG9iamVjdCAqb2JqKQoreworCWxvYWRfcmVmX2RlY29yYXRpb25zKE5VTEwsIERFQ09SQVRFX1NIT1JUX1JFRlMpOworCXJldHVybiBsb29rdXBfZGVjb3JhdGlvbigmbmFtZV9kZWNvcmF0aW9uLCBvYmopOworfQorCitzdGF0aWMgaW50IG1hdGNoX3JlZl9wYXR0ZXJuKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtKQoreworCWludCBtYXRjaGVkID0gMDsKKwlpZiAoaXRlbS0+dXRpbCA9PSBOVUxMKSB7CisJCWlmICghd2lsZG1hdGNoKGl0ZW0tPnN0cmluZywgcmVmbmFtZSwgMCkpCisJCQltYXRjaGVkID0gMTsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyICpyZXN0OworCQlpZiAoc2tpcF9wcmVmaXgocmVmbmFtZSwgaXRlbS0+c3RyaW5nLCAmcmVzdCkgJiYKKwkJICAgICghKnJlc3QgfHwgKnJlc3QgPT0gJy8nKSkKKwkJCW1hdGNoZWQgPSAxOworCX0KKwlyZXR1cm4gbWF0Y2hlZDsKK30KKworc3RhdGljIGludCByZWZfZmlsdGVyX21hdGNoKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICAgY29uc3Qgc3RydWN0IGRlY29yYXRpb25fZmlsdGVyICpmaWx0ZXIpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpleGNsdWRlX3BhdHRlcm5zID0gZmlsdGVyLT5leGNsdWRlX3JlZl9wYXR0ZXJuOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqaW5jbHVkZV9wYXR0ZXJucyA9IGZpbHRlci0+aW5jbHVkZV9yZWZfcGF0dGVybjsKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmV4Y2x1ZGVfcGF0dGVybnNfY29uZmlnID0KKwkJCQlmaWx0ZXItPmV4Y2x1ZGVfcmVmX2NvbmZpZ19wYXR0ZXJuOworCisJaWYgKGV4Y2x1ZGVfcGF0dGVybnMgJiYgZXhjbHVkZV9wYXR0ZXJucy0+bnIpIHsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCBleGNsdWRlX3BhdHRlcm5zKSB7CisJCQlpZiAobWF0Y2hfcmVmX3BhdHRlcm4ocmVmbmFtZSwgaXRlbSkpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoaW5jbHVkZV9wYXR0ZXJucyAmJiBpbmNsdWRlX3BhdHRlcm5zLT5ucikgeworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIGluY2x1ZGVfcGF0dGVybnMpIHsKKwkJCWlmIChtYXRjaF9yZWZfcGF0dGVybihyZWZuYW1lLCBpdGVtKSkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZXhjbHVkZV9wYXR0ZXJuc19jb25maWcgJiYgZXhjbHVkZV9wYXR0ZXJuc19jb25maWctPm5yKSB7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgZXhjbHVkZV9wYXR0ZXJuc19jb25maWcpIHsKKwkJCWlmIChtYXRjaF9yZWZfcGF0dGVybihyZWZuYW1lLCBpdGVtKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGFkZF9yZWZfZGVjb3JhdGlvbihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCWVudW0gZGVjb3JhdGlvbl90eXBlIHR5cGUgPSBERUNPUkFUSU9OX05PTkU7CisJc3RydWN0IGRlY29yYXRpb25fZmlsdGVyICpmaWx0ZXIgPSAoc3RydWN0IGRlY29yYXRpb25fZmlsdGVyICopY2JfZGF0YTsKKworCWlmIChmaWx0ZXIgJiYgIXJlZl9maWx0ZXJfbWF0Y2gocmVmbmFtZSwgZmlsdGVyKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgZ2l0X3JlcGxhY2VfcmVmX2Jhc2UpKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb3JpZ2luYWxfb2lkOworCQlpZiAoIXJlYWRfcmVwbGFjZV9yZWZzKQorCQkJcmV0dXJuIDA7CisJCWlmIChnZXRfb2lkX2hleChyZWZuYW1lICsgc3RybGVuKGdpdF9yZXBsYWNlX3JlZl9iYXNlKSwKKwkJCQkmb3JpZ2luYWxfb2lkKSkgeworCQkJd2FybmluZygiaW52YWxpZCByZXBsYWNlIHJlZiAlcyIsIHJlZm5hbWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJb2JqID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb3JpZ2luYWxfb2lkKTsKKwkJaWYgKG9iaikKKwkJCWFkZF9uYW1lX2RlY29yYXRpb24oREVDT1JBVElPTl9HUkFGVEVELCAicmVwbGFjZWQiLCBvYmopOworCQlyZXR1cm4gMDsKKwl9CisKKwlvYmogPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJaWYgKCFvYmopCisJCXJldHVybiAwOworCisJaWYgKHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL2hlYWRzLyIpKQorCQl0eXBlID0gREVDT1JBVElPTl9SRUZfTE9DQUw7CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSkKKwkJdHlwZSA9IERFQ09SQVRJT05fUkVGX1JFTU9URTsKKwllbHNlIGlmIChzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy90YWdzLyIpKQorCQl0eXBlID0gREVDT1JBVElPTl9SRUZfVEFHOworCWVsc2UgaWYgKCFzdHJjbXAocmVmbmFtZSwgInJlZnMvc3Rhc2giKSkKKwkJdHlwZSA9IERFQ09SQVRJT05fUkVGX1NUQVNIOworCWVsc2UgaWYgKCFzdHJjbXAocmVmbmFtZSwgIkhFQUQiKSkKKwkJdHlwZSA9IERFQ09SQVRJT05fUkVGX0hFQUQ7CisKKwlhZGRfbmFtZV9kZWNvcmF0aW9uKHR5cGUsIHJlZm5hbWUsIG9iaik7CisJd2hpbGUgKG9iai0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCW9iaiA9ICgoc3RydWN0IHRhZyAqKW9iaiktPnRhZ2dlZDsKKwkJaWYgKCFvYmopCisJCQlicmVhazsKKwkJaWYgKCFvYmotPnBhcnNlZCkKKwkJCXBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm9iai0+b2lkKTsKKwkJYWRkX25hbWVfZGVjb3JhdGlvbihERUNPUkFUSU9OX1JFRl9UQUcsIHJlZm5hbWUsIG9iaik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9ncmFmdF9kZWNvcmF0aW9uKGNvbnN0IHN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0LCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvb2t1cF9jb21taXQodGhlX3JlcG9zaXRvcnksICZncmFmdC0+b2lkKTsKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuIDA7CisJYWRkX25hbWVfZGVjb3JhdGlvbihERUNPUkFUSU9OX0dSQUZURUQsICJncmFmdGVkIiwgJmNvbW1pdC0+b2JqZWN0KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsb2FkX3JlZl9kZWNvcmF0aW9ucyhzdHJ1Y3QgZGVjb3JhdGlvbl9maWx0ZXIgKmZpbHRlciwgaW50IGZsYWdzKQoreworCWlmICghZGVjb3JhdGlvbl9sb2FkZWQpIHsKKwkJaWYgKGZpbHRlcikgeworCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIGZpbHRlci0+ZXhjbHVkZV9yZWZfcGF0dGVybikgeworCQkJCW5vcm1hbGl6ZV9nbG9iX3JlZihpdGVtLCBOVUxMLCBpdGVtLT5zdHJpbmcpOworCQkJfQorCQkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCBmaWx0ZXItPmluY2x1ZGVfcmVmX3BhdHRlcm4pIHsKKwkJCQlub3JtYWxpemVfZ2xvYl9yZWYoaXRlbSwgTlVMTCwgaXRlbS0+c3RyaW5nKTsKKwkJCX0KKwkJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgZmlsdGVyLT5leGNsdWRlX3JlZl9jb25maWdfcGF0dGVybikgeworCQkJCW5vcm1hbGl6ZV9nbG9iX3JlZihpdGVtLCBOVUxMLCBpdGVtLT5zdHJpbmcpOworCQkJfQorCQl9CisJCWRlY29yYXRpb25fbG9hZGVkID0gMTsKKwkJZGVjb3JhdGlvbl9mbGFncyA9IGZsYWdzOworCQlmb3JfZWFjaF9yZWYoYWRkX3JlZl9kZWNvcmF0aW9uLCBmaWx0ZXIpOworCQloZWFkX3JlZihhZGRfcmVmX2RlY29yYXRpb24sIGZpbHRlcik7CisJCWZvcl9lYWNoX2NvbW1pdF9ncmFmdChhZGRfZ3JhZnRfZGVjb3JhdGlvbiwgZmlsdGVyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcGFyZW50cyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBhYmJyZXYsIEZJTEUgKmZpbGUpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCWZvciAocCA9IGNvbW1pdC0+cGFyZW50czsgcCA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHAtPml0ZW07CisJCWZwcmludGYoZmlsZSwgIiAlcyIsIGZpbmRfdW5pcXVlX2FiYnJldigmcGFyZW50LT5vYmplY3Qub2lkLCBhYmJyZXYpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfY2hpbGRyZW4oc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IGFiYnJldikKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnAgPSBsb29rdXBfZGVjb3JhdGlvbigmb3B0LT5jaGlsZHJlbiwgJmNvbW1pdC0+b2JqZWN0KTsKKwlmb3IgKCA7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWZwcmludGYob3B0LT5kaWZmb3B0LmZpbGUsICIgJXMiLCBmaW5kX3VuaXF1ZV9hYmJyZXYoJnAtPml0ZW0tPm9iamVjdC5vaWQsIGFiYnJldikpOworCX0KK30KKworLyoKKyAqIERvIHdlIGhhdmUgSEVBRCBpbiB0aGUgb3V0cHV0LCBhbmQgYWxzbyB0aGUgYnJhbmNoIGl0IHBvaW50cyBhdD8KKyAqIElmIHNvLCBmaW5kIHRoYXQgZGVjb3JhdGlvbiBlbnRyeSBmb3IgdGhhdCBjdXJyZW50IGJyYW5jaC4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuYW1lX2RlY29yYXRpb24gKmN1cnJlbnRfcG9pbnRlZF9ieV9IRUFEKGNvbnN0IHN0cnVjdCBuYW1lX2RlY29yYXRpb24gKmRlY29yYXRpb24pCit7CisJY29uc3Qgc3RydWN0IG5hbWVfZGVjb3JhdGlvbiAqbGlzdCwgKmhlYWQgPSBOVUxMOworCWNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lID0gTlVMTDsKKwlpbnQgcnJ1X2ZsYWdzOworCisJLyogRmlyc3QgZmluZCBIRUFEICovCisJZm9yIChsaXN0ID0gZGVjb3JhdGlvbjsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCisJCWlmIChsaXN0LT50eXBlID09IERFQ09SQVRJT05fUkVGX0hFQUQpIHsKKwkJCWhlYWQgPSBsaXN0OworCQkJYnJlYWs7CisJCX0KKwlpZiAoIWhlYWQpCisJCXJldHVybiBOVUxMOworCisJLyogTm93IHJlc29sdmUgYW5kIGZpbmQgdGhlIG1hdGNoaW5nIGN1cnJlbnQgYnJhbmNoICovCisJYnJhbmNoX25hbWUgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCBOVUxMLCAmcnJ1X2ZsYWdzKTsKKwlpZiAoIWJyYW5jaF9uYW1lIHx8ICEocnJ1X2ZsYWdzICYgUkVGX0lTU1lNUkVGKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIXN0YXJ0c193aXRoKGJyYW5jaF9uYW1lLCAicmVmcy8iKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBPSywgZG8gd2UgaGF2ZSB0aGF0IHJlZiBpbiB0aGUgbGlzdD8gKi8KKwlmb3IgKGxpc3QgPSBkZWNvcmF0aW9uOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwkJaWYgKChsaXN0LT50eXBlID09IERFQ09SQVRJT05fUkVGX0xPQ0FMKSAmJgorCQkgICAgIXN0cmNtcChicmFuY2hfbmFtZSwgbGlzdC0+bmFtZSkpIHsKKwkJCXJldHVybiBsaXN0OworCQl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgc2hvd19uYW1lKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBzdHJ1Y3QgbmFtZV9kZWNvcmF0aW9uICpkZWNvcmF0aW9uKQoreworCWlmIChkZWNvcmF0aW9uX2ZsYWdzID09IERFQ09SQVRFX1NIT1JUX1JFRlMpCisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHByZXR0aWZ5X3JlZm5hbWUoZGVjb3JhdGlvbi0+bmFtZSkpOworCWVsc2UKKwkJc3RyYnVmX2FkZHN0cihzYiwgZGVjb3JhdGlvbi0+bmFtZSk7Cit9CisKKy8qCisgKiBUaGUgY2FsbGVyIG1ha2VzIHN1cmUgdGhlcmUgaXMgbm8gZnVubnkgY29sb3IgYmVmb3JlIGNhbGxpbmcuCisgKiBmb3JtYXRfZGVjb3JhdGlvbnNfZXh0ZW5kZWQgbWFrZXMgc3VyZSB0aGUgc2FtZSBhZnRlciByZXR1cm4uCisgKi8KK3ZvaWQgZm9ybWF0X2RlY29yYXRpb25zX2V4dGVuZGVkKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJaW50IHVzZV9jb2xvciwKKwkJCWNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCWNvbnN0IGNoYXIgKnNlcGFyYXRvciwKKwkJCWNvbnN0IGNoYXIgKnN1ZmZpeCkKK3sKKwljb25zdCBzdHJ1Y3QgbmFtZV9kZWNvcmF0aW9uICpkZWNvcmF0aW9uOworCWNvbnN0IHN0cnVjdCBuYW1lX2RlY29yYXRpb24gKmN1cnJlbnRfYW5kX0hFQUQ7CisJY29uc3QgY2hhciAqY29sb3JfY29tbWl0ID0KKwkJZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX0NPTU1JVCk7CisJY29uc3QgY2hhciAqY29sb3JfcmVzZXQgPQorCQlkZWNvcmF0ZV9nZXRfY29sb3IodXNlX2NvbG9yLCBERUNPUkFUSU9OX05PTkUpOworCisJZGVjb3JhdGlvbiA9IGdldF9uYW1lX2RlY29yYXRpb24oJmNvbW1pdC0+b2JqZWN0KTsKKwlpZiAoIWRlY29yYXRpb24pCisJCXJldHVybjsKKworCWN1cnJlbnRfYW5kX0hFQUQgPSBjdXJyZW50X3BvaW50ZWRfYnlfSEVBRChkZWNvcmF0aW9uKTsKKwl3aGlsZSAoZGVjb3JhdGlvbikgeworCQkvKgorCQkgKiBXaGVuIGJvdGggY3VycmVudCBhbmQgSEVBRCBhcmUgdGhlcmUsIG9ubHkKKwkJICogc2hvdyBIRUFELT5jdXJyZW50IHdoZXJlIEhFQUQgd291bGQgaGF2ZQorCQkgKiBhcHBlYXJlZCwgc2tpcHBpbmcgdGhlIGVudHJ5IGZvciBjdXJyZW50LgorCQkgKi8KKwkJaWYgKGRlY29yYXRpb24gIT0gY3VycmVudF9hbmRfSEVBRCkgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgY29sb3JfY29tbWl0KTsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIHByZWZpeCk7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBjb2xvcl9yZXNldCk7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBkZWNvcmF0ZV9nZXRfY29sb3IodXNlX2NvbG9yLCBkZWNvcmF0aW9uLT50eXBlKSk7CisJCQlpZiAoZGVjb3JhdGlvbi0+dHlwZSA9PSBERUNPUkFUSU9OX1JFRl9UQUcpCisJCQkJc3RyYnVmX2FkZHN0cihzYiwgInRhZzogIik7CisKKwkJCXNob3dfbmFtZShzYiwgZGVjb3JhdGlvbik7CisKKwkJCWlmIChjdXJyZW50X2FuZF9IRUFEICYmCisJCQkgICAgZGVjb3JhdGlvbi0+dHlwZSA9PSBERUNPUkFUSU9OX1JFRl9IRUFEKSB7CisJCQkJc3RyYnVmX2FkZHN0cihzYiwgIiAtPiAiKTsKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCBjb2xvcl9yZXNldCk7CisJCQkJc3RyYnVmX2FkZHN0cihzYiwgZGVjb3JhdGVfZ2V0X2NvbG9yKHVzZV9jb2xvciwgY3VycmVudF9hbmRfSEVBRC0+dHlwZSkpOworCQkJCXNob3dfbmFtZShzYiwgY3VycmVudF9hbmRfSEVBRCk7CisJCQl9CisJCQlzdHJidWZfYWRkc3RyKHNiLCBjb2xvcl9yZXNldCk7CisKKwkJCXByZWZpeCA9IHNlcGFyYXRvcjsKKwkJfQorCQlkZWNvcmF0aW9uID0gZGVjb3JhdGlvbi0+bmV4dDsKKwl9CisJc3RyYnVmX2FkZHN0cihzYiwgY29sb3JfY29tbWl0KTsKKwlzdHJidWZfYWRkc3RyKHNiLCBzdWZmaXgpOworCXN0cmJ1Zl9hZGRzdHIoc2IsIGNvbG9yX3Jlc2V0KTsKK30KKwordm9pZCBzaG93X2RlY29yYXRpb25zKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJaWYgKG9wdC0+c291cmNlcykgeworCQljaGFyICoqc2xvdCA9IHJldmlzaW9uX3NvdXJjZXNfcGVlayhvcHQtPnNvdXJjZXMsIGNvbW1pdCk7CisKKwkJaWYgKHNsb3QgJiYgKnNsb3QpCisJCQlmcHJpbnRmKG9wdC0+ZGlmZm9wdC5maWxlLCAiXHQlcyIsICpzbG90KTsKKwl9CisJaWYgKCFvcHQtPnNob3dfZGVjb3JhdGlvbnMpCisJCXJldHVybjsKKwlmb3JtYXRfZGVjb3JhdGlvbnMoJnNiLCBjb21taXQsIG9wdC0+ZGlmZm9wdC51c2VfY29sb3IpOworCWZwdXRzKHNiLmJ1Ziwgb3B0LT5kaWZmb3B0LmZpbGUpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGlnaXRzX2luX251bWJlcih1bnNpZ25lZCBpbnQgbnVtYmVyKQoreworCXVuc2lnbmVkIGludCBpID0gMTAsIHJlc3VsdCA9IDE7CisJd2hpbGUgKGkgPD0gbnVtYmVyKSB7CisJCWkgKj0gMTA7CisJCXJlc3VsdCsrOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkIGZtdF9vdXRwdXRfc3ViamVjdChzdHJ1Y3Qgc3RyYnVmICpmaWxlbmFtZSwKKwkJCWNvbnN0IGNoYXIgKnN1YmplY3QsCisJCQlzdHJ1Y3QgcmV2X2luZm8gKmluZm8pCit7CisJY29uc3QgY2hhciAqc3VmZml4ID0gaW5mby0+cGF0Y2hfc3VmZml4OworCWludCBuciA9IGluZm8tPm5yOworCWludCBzdGFydF9sZW4gPSBmaWxlbmFtZS0+bGVuOworCWludCBtYXhfbGVuID0gc3RhcnRfbGVuICsgRk9STUFUX1BBVENIX05BTUVfTUFYIC0gKHN0cmxlbihzdWZmaXgpICsgMSk7CisKKwlpZiAoMCA8IGluZm8tPnJlcm9sbF9jb3VudCkKKwkJc3RyYnVmX2FkZGYoZmlsZW5hbWUsICJ2JWQtIiwgaW5mby0+cmVyb2xsX2NvdW50KTsKKwlzdHJidWZfYWRkZihmaWxlbmFtZSwgIiUwNGQtJXMiLCBuciwgc3ViamVjdCk7CisKKwlpZiAobWF4X2xlbiA8IGZpbGVuYW1lLT5sZW4pCisJCXN0cmJ1Zl9zZXRsZW4oZmlsZW5hbWUsIG1heF9sZW4pOworCXN0cmJ1Zl9hZGRzdHIoZmlsZW5hbWUsIHN1ZmZpeCk7Cit9CisKK3ZvaWQgZm10X291dHB1dF9jb21taXQoc3RydWN0IHN0cmJ1ZiAqZmlsZW5hbWUsCisJCSAgICAgICBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCSAgICAgICBzdHJ1Y3QgcmV2X2luZm8gKmluZm8pCit7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwlzdHJ1Y3Qgc3RyYnVmIHN1YmplY3QgPSBTVFJCVUZfSU5JVDsKKworCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICIlZiIsICZzdWJqZWN0LCAmY3R4KTsKKwlmbXRfb3V0cHV0X3N1YmplY3QoZmlsZW5hbWUsIHN1YmplY3QuYnVmLCBpbmZvKTsKKwlzdHJidWZfcmVsZWFzZSgmc3ViamVjdCk7Cit9CisKK3ZvaWQgZm10X291dHB1dF9lbWFpbF9zdWJqZWN0KHN0cnVjdCBzdHJidWYgKnNiLCBzdHJ1Y3QgcmV2X2luZm8gKm9wdCkKK3sKKwlpZiAob3B0LT50b3RhbCA+IDApIHsKKwkJc3RyYnVmX2FkZGYoc2IsICJTdWJqZWN0OiBbJXMlcyUwKmQvJWRdICIsCisJCQkgICAgb3B0LT5zdWJqZWN0X3ByZWZpeCwKKwkJCSAgICAqb3B0LT5zdWJqZWN0X3ByZWZpeCA/ICIgIiA6ICIiLAorCQkJICAgIGRpZ2l0c19pbl9udW1iZXIob3B0LT50b3RhbCksCisJCQkgICAgb3B0LT5uciwgb3B0LT50b3RhbCk7CisJfSBlbHNlIGlmIChvcHQtPnRvdGFsID09IDAgJiYgb3B0LT5zdWJqZWN0X3ByZWZpeCAmJiAqb3B0LT5zdWJqZWN0X3ByZWZpeCkgeworCQlzdHJidWZfYWRkZihzYiwgIlN1YmplY3Q6IFslc10gIiwKKwkJCSAgICBvcHQtPnN1YmplY3RfcHJlZml4KTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkc3RyKHNiLCAiU3ViamVjdDogIik7CisJfQorfQorCit2b2lkIGxvZ193cml0ZV9lbWFpbF9oZWFkZXJzKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICAgIGNvbnN0IGNoYXIgKipleHRyYV9oZWFkZXJzX3AsCisJCQkgICAgIGludCAqbmVlZF84Yml0X2N0ZV9wLAorCQkJICAgICBpbnQgbWF5YmVfbXVsdGlwYXJ0KQoreworCWNvbnN0IGNoYXIgKmV4dHJhX2hlYWRlcnMgPSBvcHQtPmV4dHJhX2hlYWRlcnM7CisJY29uc3QgY2hhciAqbmFtZSA9IG9pZF90b19oZXgob3B0LT56ZXJvX2NvbW1pdCA/CisJCQkJICAgICAgJm51bGxfb2lkIDogJmNvbW1pdC0+b2JqZWN0Lm9pZCk7CisKKwkqbmVlZF84Yml0X2N0ZV9wID0gMDsgLyogdW5rbm93biAqLworCisJZnByaW50ZihvcHQtPmRpZmZvcHQuZmlsZSwgIkZyb20gJXMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxXG4iLCBuYW1lKTsKKwlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CisJaWYgKG9wdC0+bWVzc2FnZV9pZCkgeworCQlmcHJpbnRmKG9wdC0+ZGlmZm9wdC5maWxlLCAiTWVzc2FnZS1JZDogPCVzPlxuIiwgb3B0LT5tZXNzYWdlX2lkKTsKKwkJZ3JhcGhfc2hvd19vbmVsaW5lKG9wdC0+Z3JhcGgpOworCX0KKwlpZiAob3B0LT5yZWZfbWVzc2FnZV9pZHMgJiYgb3B0LT5yZWZfbWVzc2FnZV9pZHMtPm5yID4gMCkgeworCQlpbnQgaSwgbjsKKwkJbiA9IG9wdC0+cmVmX21lc3NhZ2VfaWRzLT5ucjsKKwkJZnByaW50ZihvcHQtPmRpZmZvcHQuZmlsZSwgIkluLVJlcGx5LVRvOiA8JXM+XG4iLCBvcHQtPnJlZl9tZXNzYWdlX2lkcy0+aXRlbXNbbi0xXS5zdHJpbmcpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJZnByaW50ZihvcHQtPmRpZmZvcHQuZmlsZSwgIiVzPCVzPlxuIiwgKGkgPiAwID8gIlx0IiA6ICJSZWZlcmVuY2VzOiAiKSwKKwkJCSAgICAgICBvcHQtPnJlZl9tZXNzYWdlX2lkcy0+aXRlbXNbaV0uc3RyaW5nKTsKKwkJZ3JhcGhfc2hvd19vbmVsaW5lKG9wdC0+Z3JhcGgpOworCX0KKwlpZiAob3B0LT5taW1lX2JvdW5kYXJ5ICYmIG1heWJlX211bHRpcGFydCkgeworCQlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBzdWJqZWN0X2J1ZmZlciA9IFNUUkJVRl9JTklUOworCQlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IHN0cmJ1ZiBmaWxlbmFtZSA9ICBTVFJCVUZfSU5JVDsKKwkJKm5lZWRfOGJpdF9jdGVfcCA9IC0xOyAvKiBORVZFUiAqLworCisJCXN0cmJ1Zl9yZXNldCgmc3ViamVjdF9idWZmZXIpOworCQlzdHJidWZfcmVzZXQoJmJ1ZmZlcik7CisKKwkJc3RyYnVmX2FkZGYoJnN1YmplY3RfYnVmZmVyLAorCQkJICIlcyIKKwkJCSAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKwkJCSAiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IgorCQkJICIgYm91bmRhcnk9XCIlcyVzXCJcbiIKKwkJCSAiXG4iCisJCQkgIlRoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSAiCisJCQkgImZvcm1hdC5cbiIKKwkJCSAiLS0lcyVzXG4iCisJCQkgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgIgorCQkJICJjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWRcbiIKKwkJCSAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuXG4iLAorCQkJIGV4dHJhX2hlYWRlcnMgPyBleHRyYV9oZWFkZXJzIDogIiIsCisJCQkgbWltZV9ib3VuZGFyeV9sZWFkZXIsIG9wdC0+bWltZV9ib3VuZGFyeSwKKwkJCSBtaW1lX2JvdW5kYXJ5X2xlYWRlciwgb3B0LT5taW1lX2JvdW5kYXJ5KTsKKwkJZXh0cmFfaGVhZGVycyA9IHN1YmplY3RfYnVmZmVyLmJ1ZjsKKworCQlpZiAob3B0LT5udW1iZXJlZF9maWxlcykKKwkJCXN0cmJ1Zl9hZGRmKCZmaWxlbmFtZSwgIiVkIiwgb3B0LT5ucik7CisJCWVsc2UKKwkJCWZtdF9vdXRwdXRfY29tbWl0KCZmaWxlbmFtZSwgY29tbWl0LCBvcHQpOworCQlzdHJidWZfYWRkZigmYnVmZmVyLAorCQkJICJcbi0tJXMlc1xuIgorCQkJICJDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsiCisJCQkgIiBuYW1lPVwiJXNcIlxuIgorCQkJICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisJCQkgIkNvbnRlbnQtRGlzcG9zaXRpb246ICVzOyIKKwkJCSAiIGZpbGVuYW1lPVwiJXNcIlxuXG4iLAorCQkJIG1pbWVfYm91bmRhcnlfbGVhZGVyLCBvcHQtPm1pbWVfYm91bmRhcnksCisJCQkgZmlsZW5hbWUuYnVmLAorCQkJIG9wdC0+bm9faW5saW5lID8gImF0dGFjaG1lbnQiIDogImlubGluZSIsCisJCQkgZmlsZW5hbWUuYnVmKTsKKwkJb3B0LT5kaWZmb3B0LnN0YXRfc2VwID0gYnVmZmVyLmJ1ZjsKKwkJc3RyYnVmX3JlbGVhc2UoJmZpbGVuYW1lKTsKKwl9CisJKmV4dHJhX2hlYWRlcnNfcCA9IGV4dHJhX2hlYWRlcnM7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfc2lnX2xpbmVzKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBpbnQgc3RhdHVzLCBjb25zdCBjaGFyICpib2wpCit7CisJY29uc3QgY2hhciAqY29sb3IsICpyZXNldCwgKmVvbDsKKworCWNvbG9yID0gZGlmZl9nZXRfY29sb3Jfb3B0KCZvcHQtPmRpZmZvcHQsCisJCQkJICAgc3RhdHVzID8gRElGRl9XSElURVNQQUNFIDogRElGRl9GUkFHSU5GTyk7CisJcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQoJm9wdC0+ZGlmZm9wdCwgRElGRl9SRVNFVCk7CisJd2hpbGUgKCpib2wpIHsKKwkJZW9sID0gc3RyY2hybnVsKGJvbCwgJ1xuJyk7CisJCWZwcmludGYob3B0LT5kaWZmb3B0LmZpbGUsICIlcyUuKnMlcyVzIiwgY29sb3IsIChpbnQpKGVvbCAtIGJvbCksIGJvbCwgcmVzZXQsCisJCSAgICAgICAqZW9sID8gIlxuIiA6ICIiKTsKKwkJZ3JhcGhfc2hvd19vbmVsaW5lKG9wdC0+Z3JhcGgpOworCQlib2wgPSAoKmVvbCkgPyAoZW9sICsgMSkgOiBlb2w7CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X3NpZ25hdHVyZShzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBzdHJidWYgcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgc2lnbmF0dXJlID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHNpZ25hdHVyZV9jaGVjayBzaWdjID0geyAwIH07CisJaW50IHN0YXR1czsKKworCWlmIChwYXJzZV9zaWduZWRfY29tbWl0KGNvbW1pdCwgJnBheWxvYWQsICZzaWduYXR1cmUpIDw9IDApCisJCWdvdG8gb3V0OworCisJc3RhdHVzID0gY2hlY2tfc2lnbmF0dXJlKHBheWxvYWQuYnVmLCBwYXlsb2FkLmxlbiwgc2lnbmF0dXJlLmJ1ZiwKKwkJCQkgc2lnbmF0dXJlLmxlbiwgJnNpZ2MpOworCWlmIChzdGF0dXMgJiYgIXNpZ2MuZ3BnX291dHB1dCkKKwkJc2hvd19zaWdfbGluZXMob3B0LCBzdGF0dXMsICJObyBzaWduYXR1cmVcbiIpOworCWVsc2UKKwkJc2hvd19zaWdfbGluZXMob3B0LCBzdGF0dXMsIHNpZ2MuZ3BnX291dHB1dCk7CisJc2lnbmF0dXJlX2NoZWNrX2NsZWFyKCZzaWdjKTsKKworIG91dDoKKwlzdHJidWZfcmVsZWFzZSgmcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJnNpZ25hdHVyZSk7Cit9CisKK3N0YXRpYyBpbnQgd2hpY2hfcGFyZW50KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWludCBudGg7CisJY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisKKwlmb3IgKG50aCA9IDAsIHBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpIHsKKwkJaWYgKG9pZGVxKCZwYXJlbnQtPml0ZW0tPm9iamVjdC5vaWQsIG9pZCkpCisJCQlyZXR1cm4gbnRoOworCQludGgrKzsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGlzX2NvbW1vbl9tZXJnZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJcmV0dXJuIChjb21taXQtPnBhcmVudHMKKwkJJiYgY29tbWl0LT5wYXJlbnRzLT5uZXh0CisJCSYmICFjb21taXQtPnBhcmVudHMtPm5leHQtPm5leHQpOworfQorCitzdGF0aWMgaW50IHNob3dfb25lX21lcmdldGFnKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICAgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhLAorCQkJICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCByZXZfaW5mbyAqb3B0ID0gKHN0cnVjdCByZXZfaW5mbyAqKWRhdGE7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IHRhZyAqdGFnOworCXN0cnVjdCBzdHJidWYgdmVyaWZ5X21lc3NhZ2U7CisJc3RydWN0IHNpZ25hdHVyZV9jaGVjayBzaWdjID0geyAwIH07CisJaW50IHN0YXR1cywgbnRoOworCXNpemVfdCBwYXlsb2FkX3NpemU7CisKKwloYXNoX29iamVjdF9maWxlKHRoZV9oYXNoX2FsZ28sIGV4dHJhLT52YWx1ZSwgZXh0cmEtPmxlbiwKKwkJCSB0eXBlX25hbWUoT0JKX1RBRyksICZvaWQpOworCXRhZyA9IGxvb2t1cF90YWcodGhlX3JlcG9zaXRvcnksICZvaWQpOworCWlmICghdGFnKQorCQlyZXR1cm4gLTE7IC8qIGVycm9yIG1lc3NhZ2UgYWxyZWFkeSBnaXZlbiAqLworCisJc3RyYnVmX2luaXQoJnZlcmlmeV9tZXNzYWdlLCAyNTYpOworCWlmIChwYXJzZV90YWdfYnVmZmVyKHRoZV9yZXBvc2l0b3J5LCB0YWcsIGV4dHJhLT52YWx1ZSwgZXh0cmEtPmxlbikpCisJCXN0cmJ1Zl9hZGRzdHIoJnZlcmlmeV9tZXNzYWdlLCAibWFsZm9ybWVkIG1lcmdldGFnXG4iKTsKKwllbHNlIGlmIChpc19jb21tb25fbWVyZ2UoY29tbWl0KSAmJgorCQkgb2lkZXEoJnRhZy0+dGFnZ2VkLT5vaWQsCisJCSAgICAgICAmY29tbWl0LT5wYXJlbnRzLT5uZXh0LT5pdGVtLT5vYmplY3Qub2lkKSkKKwkJc3RyYnVmX2FkZGYoJnZlcmlmeV9tZXNzYWdlLAorCQkJICAgICJtZXJnZWQgdGFnICclcydcbiIsIHRhZy0+dGFnKTsKKwllbHNlIGlmICgobnRoID0gd2hpY2hfcGFyZW50KCZ0YWctPnRhZ2dlZC0+b2lkLCBjb21taXQpKSA8IDApCisJCXN0cmJ1Zl9hZGRmKCZ2ZXJpZnlfbWVzc2FnZSwgInRhZyAlcyBuYW1lcyBhIG5vbi1wYXJlbnQgJXNcbiIsCisJCQkJICAgIHRhZy0+dGFnLCBvaWRfdG9faGV4KCZ0YWctPnRhZ2dlZC0+b2lkKSk7CisJZWxzZQorCQlzdHJidWZfYWRkZigmdmVyaWZ5X21lc3NhZ2UsCisJCQkgICAgInBhcmVudCAjJWQsIHRhZ2dlZCAnJXMnXG4iLCBudGggKyAxLCB0YWctPnRhZyk7CisKKwlwYXlsb2FkX3NpemUgPSBwYXJzZV9zaWduYXR1cmUoZXh0cmEtPnZhbHVlLCBleHRyYS0+bGVuKTsKKwlzdGF0dXMgPSAtMTsKKwlpZiAoZXh0cmEtPmxlbiA+IHBheWxvYWRfc2l6ZSkgeworCQkvKiBjb3VsZCBoYXZlIGEgZ29vZCBzaWduYXR1cmUgKi8KKwkJc3RhdHVzID0gY2hlY2tfc2lnbmF0dXJlKGV4dHJhLT52YWx1ZSwgcGF5bG9hZF9zaXplLAorCQkJCQkgZXh0cmEtPnZhbHVlICsgcGF5bG9hZF9zaXplLAorCQkJCQkgZXh0cmEtPmxlbiAtIHBheWxvYWRfc2l6ZSwgJnNpZ2MpOworCQlpZiAoc2lnYy5ncGdfb3V0cHV0KQorCQkJc3RyYnVmX2FkZHN0cigmdmVyaWZ5X21lc3NhZ2UsIHNpZ2MuZ3BnX291dHB1dCk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoJnZlcmlmeV9tZXNzYWdlLCAiTm8gc2lnbmF0dXJlXG4iKTsKKwkJc2lnbmF0dXJlX2NoZWNrX2NsZWFyKCZzaWdjKTsKKwkJLyogb3RoZXJ3aXNlIHdlIGNvdWxkbid0IHZlcmlmeSwgd2hpY2ggaXMgc2hvd24gYXMgYmFkICovCisJfQorCisJc2hvd19zaWdfbGluZXMob3B0LCBzdGF0dXMsIHZlcmlmeV9tZXNzYWdlLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnZlcmlmeV9tZXNzYWdlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X21lcmdldGFnKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJcmV0dXJuIGZvcl9lYWNoX21lcmdldGFnKHNob3dfb25lX21lcmdldGFnLCBjb21taXQsIG9wdCk7Cit9CisKK3N0YXRpYyB2b2lkIG5leHRfY29tbWVudGFyeV9ibG9jayhzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJY29uc3QgY2hhciAqeCA9IG9wdC0+c2hvd25fZGFzaGVzID8gIlxuIiA6ICItLS1cbiI7CisJaWYgKHNiKQorCQlzdHJidWZfYWRkc3RyKHNiLCB4KTsKKwllbHNlCisJCWZwdXRzKHgsIG9wdC0+ZGlmZm9wdC5maWxlKTsKKwlvcHQtPnNob3duX2Rhc2hlcyA9IDE7Cit9CisKK3ZvaWQgc2hvd19sb2coc3RydWN0IHJldl9pbmZvICpvcHQpCit7CisJc3RydWN0IHN0cmJ1ZiBtc2didWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgbG9nX2luZm8gKmxvZyA9IG9wdC0+bG9naW5mbzsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb2ctPmNvbW1pdCwgKnBhcmVudCA9IGxvZy0+cGFyZW50OworCWludCBhYmJyZXZfY29tbWl0ID0gb3B0LT5hYmJyZXZfY29tbWl0ID8gb3B0LT5hYmJyZXYgOiB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKwljb25zdCBjaGFyICpleHRyYV9oZWFkZXJzID0gb3B0LT5leHRyYV9oZWFkZXJzOworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CisKKwlvcHQtPmxvZ2luZm8gPSBOVUxMOworCWlmICghb3B0LT52ZXJib3NlX2hlYWRlcikgeworCQlncmFwaF9zaG93X2NvbW1pdChvcHQtPmdyYXBoKTsKKworCQlpZiAoIW9wdC0+Z3JhcGgpCisJCQlwdXRfcmV2aXNpb25fbWFyayhvcHQsIGNvbW1pdCk7CisJCWZwdXRzKGZpbmRfdW5pcXVlX2FiYnJldigmY29tbWl0LT5vYmplY3Qub2lkLCBhYmJyZXZfY29tbWl0KSwgb3B0LT5kaWZmb3B0LmZpbGUpOworCQlpZiAob3B0LT5wcmludF9wYXJlbnRzKQorCQkJc2hvd19wYXJlbnRzKGNvbW1pdCwgYWJicmV2X2NvbW1pdCwgb3B0LT5kaWZmb3B0LmZpbGUpOworCQlpZiAob3B0LT5jaGlsZHJlbi5uYW1lKQorCQkJc2hvd19jaGlsZHJlbihvcHQsIGNvbW1pdCwgYWJicmV2X2NvbW1pdCk7CisJCXNob3dfZGVjb3JhdGlvbnMob3B0LCBjb21taXQpOworCQlpZiAob3B0LT5ncmFwaCAmJiAhZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKG9wdC0+Z3JhcGgpKSB7CisJCQlwdXRjKCdcbicsIG9wdC0+ZGlmZm9wdC5maWxlKTsKKwkJCWdyYXBoX3Nob3dfcmVtYWluZGVyKG9wdC0+Z3JhcGgpOworCQl9CisJCXB1dGMob3B0LT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24sIG9wdC0+ZGlmZm9wdC5maWxlKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgdXNlX3Rlcm1pbmF0b3IgaXMgc2V0LCB3ZSBhbHJlYWR5IGhhbmRsZWQgYW55IHJlY29yZCB0ZXJtaW5hdGlvbgorCSAqIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgcmVjb3JkLgorCSAqIE90aGVyd2lzZSwgYWRkIGEgZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uIGNoYXJhY3RlciBiZWZvcmUgYWxsCisJICogZW50cmllcyBidXQgdGhlIGZpcnN0LiAgKElPVywgYXMgYSBzZXBhcmF0b3IgYmV0d2VlbiBlbnRyaWVzKQorCSAqLworCWlmIChvcHQtPnNob3duX29uZSAmJiAhb3B0LT51c2VfdGVybWluYXRvcikgeworCQkvKgorCQkgKiBJZiBlbnRyaWVzIGFyZSBzZXBhcmF0ZWQgYnkgYSBuZXdsaW5lLCB0aGUgb3V0cHV0CisJCSAqIHNob3VsZCBsb29rIGh1bWFuLXJlYWRhYmxlLiAgSWYgdGhlIGxhc3QgZW50cnkgZW5kZWQKKwkJICogd2l0aCBhIG5ld2xpbmUsIHByaW50IHRoZSBncmFwaCBvdXRwdXQgYmVmb3JlIHRoaXMKKwkJICogbmV3bGluZS4gIE90aGVyd2lzZSBpdCB3aWxsIGVuZCB1cCBhcyBhIGNvbXBsZXRlbHkgYmxhbmsKKwkJICogbGluZSBhbmQgd2lsbCBsb29rIGxpa2UgYSBnYXAgaW4gdGhlIGdyYXBoLgorCQkgKgorCQkgKiBJZiB0aGUgZW50cnkgc2VwYXJhdG9yIGlzIG5vdCBhIG5ld2xpbmUsIHRoZSBvdXRwdXQgaXMKKwkJICogcHJpbWFyaWx5IGludGVuZGVkIGZvciBwcm9ncmFtbWF0aWMgY29uc3VtcHRpb24sIGFuZCB3ZQorCQkgKiBuZXZlciB3YW50IHRoZSBleHRyYSBncmFwaCBvdXRwdXQgYmVmb3JlIHRoZSBlbnRyeQorCQkgKiBzZXBhcmF0b3IuCisJCSAqLworCQlpZiAob3B0LT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24gPT0gJ1xuJyAmJgorCQkgICAgIW9wdC0+bWlzc2luZ19uZXdsaW5lKQorCQkJZ3JhcGhfc2hvd19wYWRkaW5nKG9wdC0+Z3JhcGgpOworCQlwdXRjKG9wdC0+ZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uLCBvcHQtPmRpZmZvcHQuZmlsZSk7CisJfQorCW9wdC0+c2hvd25fb25lID0gMTsKKworCS8qCisJICogSWYgdGhlIGhpc3RvcnkgZ3JhcGggd2FzIHJlcXVlc3RlZCwKKwkgKiBwcmludCB0aGUgZ3JhcGgsIHVwIHRvIHRoaXMgY29tbWl0J3MgbGluZQorCSAqLworCWdyYXBoX3Nob3dfY29tbWl0KG9wdC0+Z3JhcGgpOworCisJLyoKKwkgKiBQcmludCBoZWFkZXIgbGluZSBvZiBoZWFkZXIuLgorCSAqLworCisJaWYgKGNtaXRfZm10X2lzX21haWwob3B0LT5jb21taXRfZm9ybWF0KSkgeworCQlsb2dfd3JpdGVfZW1haWxfaGVhZGVycyhvcHQsIGNvbW1pdCwgJmV4dHJhX2hlYWRlcnMsCisJCQkJCSZjdHgubmVlZF84Yml0X2N0ZSwgMSk7CisJCWN0eC5yZXYgPSBvcHQ7CisJCWN0eC5wcmludF9lbWFpbF9zdWJqZWN0ID0gMTsKKwl9IGVsc2UgaWYgKG9wdC0+Y29tbWl0X2Zvcm1hdCAhPSBDTUlUX0ZNVF9VU0VSRk9STUFUKSB7CisJCWZwdXRzKGRpZmZfZ2V0X2NvbG9yX29wdCgmb3B0LT5kaWZmb3B0LCBESUZGX0NPTU1JVCksIG9wdC0+ZGlmZm9wdC5maWxlKTsKKwkJaWYgKG9wdC0+Y29tbWl0X2Zvcm1hdCAhPSBDTUlUX0ZNVF9PTkVMSU5FKQorCQkJZnB1dHMoImNvbW1pdCAiLCBvcHQtPmRpZmZvcHQuZmlsZSk7CisKKwkJaWYgKCFvcHQtPmdyYXBoKQorCQkJcHV0X3JldmlzaW9uX21hcmsob3B0LCBjb21taXQpOworCQlmcHV0cyhmaW5kX3VuaXF1ZV9hYmJyZXYoJmNvbW1pdC0+b2JqZWN0Lm9pZCwKKwkJCQkJIGFiYnJldl9jb21taXQpLAorCQkgICAgICBvcHQtPmRpZmZvcHQuZmlsZSk7CisJCWlmIChvcHQtPnByaW50X3BhcmVudHMpCisJCQlzaG93X3BhcmVudHMoY29tbWl0LCBhYmJyZXZfY29tbWl0LCBvcHQtPmRpZmZvcHQuZmlsZSk7CisJCWlmIChvcHQtPmNoaWxkcmVuLm5hbWUpCisJCQlzaG93X2NoaWxkcmVuKG9wdCwgY29tbWl0LCBhYmJyZXZfY29tbWl0KTsKKwkJaWYgKHBhcmVudCkKKwkJCWZwcmludGYob3B0LT5kaWZmb3B0LmZpbGUsICIgKGZyb20gJXMpIiwKKwkJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoJnBhcmVudC0+b2JqZWN0Lm9pZCwgYWJicmV2X2NvbW1pdCkpOworCQlmcHV0cyhkaWZmX2dldF9jb2xvcl9vcHQoJm9wdC0+ZGlmZm9wdCwgRElGRl9SRVNFVCksIG9wdC0+ZGlmZm9wdC5maWxlKTsKKwkJc2hvd19kZWNvcmF0aW9ucyhvcHQsIGNvbW1pdCk7CisJCWlmIChvcHQtPmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfT05FTElORSkgeworCQkJcHV0YygnICcsIG9wdC0+ZGlmZm9wdC5maWxlKTsKKwkJfSBlbHNlIHsKKwkJCXB1dGMoJ1xuJywgb3B0LT5kaWZmb3B0LmZpbGUpOworCQkJZ3JhcGhfc2hvd19vbmVsaW5lKG9wdC0+Z3JhcGgpOworCQl9CisJCWlmIChvcHQtPnJlZmxvZ19pbmZvKSB7CisJCQkvKgorCQkJICogc2V0dXBfcmV2aXNpb25zKCkgZW5zdXJlcyB0aGF0IG9wdC0+cmVmbG9nX2luZm8KKwkJCSAqIGFuZCBvcHQtPmdyYXBoIGNhbm5vdCBib3RoIGJlIHNldCwKKwkJCSAqIHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgcHJpbnRpbmcgdGhlCisJCQkgKiBncmFwaCBpbmZvIGhlcmUuCisJCQkgKi8KKwkJCXNob3dfcmVmbG9nX21lc3NhZ2Uob3B0LT5yZWZsb2dfaW5mbywKKwkJCQkJICAgIG9wdC0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FLAorCQkJCQkgICAgJm9wdC0+ZGF0ZV9tb2RlLAorCQkJCQkgICAgb3B0LT5kYXRlX21vZGVfZXhwbGljaXQpOworCQkJaWYgKG9wdC0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKQorCQkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChvcHQtPnNob3dfc2lnbmF0dXJlKSB7CisJCXNob3dfc2lnbmF0dXJlKG9wdCwgY29tbWl0KTsKKwkJc2hvd19tZXJnZXRhZyhvcHQsIGNvbW1pdCk7CisJfQorCisJaWYgKG9wdC0+c2hvd19ub3RlcykgeworCQlpbnQgcmF3OworCQlzdHJ1Y3Qgc3RyYnVmIG5vdGVidWYgPSBTVFJCVUZfSU5JVDsKKworCQlyYXcgPSAob3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX1VTRVJGT1JNQVQpOworCQlmb3JtYXRfZGlzcGxheV9ub3RlcygmY29tbWl0LT5vYmplY3Qub2lkLCAmbm90ZWJ1ZiwKKwkJCQkgICAgIGdldF9sb2dfb3V0cHV0X2VuY29kaW5nKCksIHJhdyk7CisJCWN0eC5ub3Rlc19tZXNzYWdlID0gc3RyYnVmX2RldGFjaCgmbm90ZWJ1ZiwgTlVMTCk7CisJfQorCisJLyoKKwkgKiBBbmQgdGhlbiB0aGUgcHJldHR5LXByaW50ZWQgbWVzc2FnZSBpdHNlbGYKKwkgKi8KKwlpZiAoY3R4Lm5lZWRfOGJpdF9jdGUgPj0gMCAmJiBvcHQtPmFkZF9zaWdub2ZmKQorCQljdHgubmVlZF84Yml0X2N0ZSA9CisJCQloYXNfbm9uX2FzY2lpKGZtdF9uYW1lKFdBTlRfQ09NTUlUVEVSX0lERU5UKSk7CisJY3R4LmRhdGVfbW9kZSA9IG9wdC0+ZGF0ZV9tb2RlOworCWN0eC5kYXRlX21vZGVfZXhwbGljaXQgPSBvcHQtPmRhdGVfbW9kZV9leHBsaWNpdDsKKwljdHguYWJicmV2ID0gb3B0LT5kaWZmb3B0LmFiYnJldjsKKwljdHguYWZ0ZXJfc3ViamVjdCA9IGV4dHJhX2hlYWRlcnM7CisJY3R4LnByZXNlcnZlX3N1YmplY3QgPSBvcHQtPnByZXNlcnZlX3N1YmplY3Q7CisJY3R4LmVuY29kZV9lbWFpbF9oZWFkZXJzID0gb3B0LT5lbmNvZGVfZW1haWxfaGVhZGVyczsKKwljdHgucmVmbG9nX2luZm8gPSBvcHQtPnJlZmxvZ19pbmZvOworCWN0eC5mbXQgPSBvcHQtPmNvbW1pdF9mb3JtYXQ7CisJY3R4Lm1haWxtYXAgPSBvcHQtPm1haWxtYXA7CisJY3R4LmNvbG9yID0gb3B0LT5kaWZmb3B0LnVzZV9jb2xvcjsKKwljdHguZXhwYW5kX3RhYnNfaW5fbG9nID0gb3B0LT5leHBhbmRfdGFic19pbl9sb2c7CisJY3R4Lm91dHB1dF9lbmNvZGluZyA9IGdldF9sb2dfb3V0cHV0X2VuY29kaW5nKCk7CisJY3R4LnJldiA9IG9wdDsKKwlpZiAob3B0LT5mcm9tX2lkZW50Lm1haWxfYmVnaW4gJiYgb3B0LT5mcm9tX2lkZW50Lm5hbWVfYmVnaW4pCisJCWN0eC5mcm9tX2lkZW50ID0gJm9wdC0+ZnJvbV9pZGVudDsKKwlpZiAob3B0LT5ncmFwaCkKKwkJY3R4LmdyYXBoX3dpZHRoID0gZ3JhcGhfd2lkdGgob3B0LT5ncmFwaCk7CisJcHJldHR5X3ByaW50X2NvbW1pdCgmY3R4LCBjb21taXQsICZtc2didWYpOworCisJaWYgKG9wdC0+YWRkX3NpZ25vZmYpCisJCWFwcGVuZF9zaWdub2ZmKCZtc2didWYsIDAsIEFQUEVORF9TSUdOT0ZGX0RFRFVQKTsKKworCWlmICgoY3R4LmZtdCAhPSBDTUlUX0ZNVF9VU0VSRk9STUFUKSAmJgorCSAgICBjdHgubm90ZXNfbWVzc2FnZSAmJiAqY3R4Lm5vdGVzX21lc3NhZ2UpIHsKKwkJaWYgKGNtaXRfZm10X2lzX21haWwoY3R4LmZtdCkpCisJCQluZXh0X2NvbW1lbnRhcnlfYmxvY2sob3B0LCAmbXNnYnVmKTsKKwkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCBjdHgubm90ZXNfbWVzc2FnZSk7CisJfQorCisJaWYgKG9wdC0+c2hvd19sb2dfc2l6ZSkgeworCQlmcHJpbnRmKG9wdC0+ZGlmZm9wdC5maWxlLCAibG9nIHNpemUgJWlcbiIsIChpbnQpbXNnYnVmLmxlbik7CisJCWdyYXBoX3Nob3dfb25lbGluZShvcHQtPmdyYXBoKTsKKwl9CisKKwkvKgorCSAqIFNldCBvcHQtPm1pc3NpbmdfbmV3bGluZSBpZiBtc2didWYgZG9lc24ndAorCSAqIGVuZCBpbiBhIG5ld2xpbmUgKGluY2x1ZGluZyBpZiBpdCBpcyBlbXB0eSkKKwkgKi8KKwlpZiAoIW1zZ2J1Zi5sZW4gfHwgbXNnYnVmLmJ1Zlttc2didWYubGVuIC0gMV0gIT0gJ1xuJykKKwkJb3B0LT5taXNzaW5nX25ld2xpbmUgPSAxOworCWVsc2UKKwkJb3B0LT5taXNzaW5nX25ld2xpbmUgPSAwOworCisJZ3JhcGhfc2hvd19jb21taXRfbXNnKG9wdC0+Z3JhcGgsIG9wdC0+ZGlmZm9wdC5maWxlLCAmbXNnYnVmKTsKKwlpZiAob3B0LT51c2VfdGVybWluYXRvciAmJiAhY29tbWl0X2Zvcm1hdF9pc19lbXB0eShvcHQtPmNvbW1pdF9mb3JtYXQpKSB7CisJCWlmICghb3B0LT5taXNzaW5nX25ld2xpbmUpCisJCQlncmFwaF9zaG93X3BhZGRpbmcob3B0LT5ncmFwaCk7CisJCXB1dGMob3B0LT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24sIG9wdC0+ZGlmZm9wdC5maWxlKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmbXNnYnVmKTsKKwlmcmVlKGN0eC5ub3Rlc19tZXNzYWdlKTsKKworCWlmIChjbWl0X2ZtdF9pc19tYWlsKGN0eC5mbXQpICYmIG9wdC0+aWRpZmZfb2lkMSkgeworCQlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgZHE7CisKKwkJbWVtY3B5KCZkcSwgJmRpZmZfcXVldWVkX2RpZmYsIHNpemVvZihkaWZmX3F1ZXVlZF9kaWZmKSk7CisJCURJRkZfUVVFVUVfQ0xFQVIoJmRpZmZfcXVldWVkX2RpZmYpOworCisJCW5leHRfY29tbWVudGFyeV9ibG9jayhvcHQsIE5VTEwpOworCQlmcHJpbnRmX2xuKG9wdC0+ZGlmZm9wdC5maWxlLCAiJXMiLCBvcHQtPmlkaWZmX3RpdGxlKTsKKwkJc2hvd19pbnRlcmRpZmYob3B0LCAyKTsKKworCQltZW1jcHkoJmRpZmZfcXVldWVkX2RpZmYsICZkcSwgc2l6ZW9mKGRpZmZfcXVldWVkX2RpZmYpKTsKKwl9CisKKwlpZiAoY21pdF9mbXRfaXNfbWFpbChjdHguZm10KSAmJiBvcHQtPnJkaWZmMSkgeworCQlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgZHE7CisJCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0czsKKworCQltZW1jcHkoJmRxLCAmZGlmZl9xdWV1ZWRfZGlmZiwgc2l6ZW9mKGRpZmZfcXVldWVkX2RpZmYpKTsKKwkJRElGRl9RVUVVRV9DTEVBUigmZGlmZl9xdWV1ZWRfZGlmZik7CisKKwkJbmV4dF9jb21tZW50YXJ5X2Jsb2NrKG9wdCwgTlVMTCk7CisJCWZwcmludGZfbG4ob3B0LT5kaWZmb3B0LmZpbGUsICIlcyIsIG9wdC0+cmRpZmZfdGl0bGUpOworCQkvKgorCQkgKiBQYXNzIG1pbmltdW0gcmVxdWlyZWQgZGlmZi1vcHRpb25zIHRvIHJhbmdlLWRpZmY7IG90aGVycworCQkgKiBjYW4gYmUgYWRkZWQgbGF0ZXIgaWYgZGVlbWVkIGRlc2lyYWJsZS4KKwkJICovCisJCWRpZmZfc2V0dXAoJm9wdHMpOworCQlvcHRzLmZpbGUgPSBvcHQtPmRpZmZvcHQuZmlsZTsKKwkJb3B0cy51c2VfY29sb3IgPSBvcHQtPmRpZmZvcHQudXNlX2NvbG9yOworCQlkaWZmX3NldHVwX2RvbmUoJm9wdHMpOworCQlzaG93X3JhbmdlX2RpZmYob3B0LT5yZGlmZjEsIG9wdC0+cmRpZmYyLAorCQkJCW9wdC0+Y3JlYXRpb25fZmFjdG9yLCAxLCAmb3B0cywgTlVMTCk7CisKKwkJbWVtY3B5KCZkaWZmX3F1ZXVlZF9kaWZmLCAmZHEsIHNpemVvZihkaWZmX3F1ZXVlZF9kaWZmKSk7CisJfQorfQorCitpbnQgbG9nX3RyZWVfZGlmZl9mbHVzaChzdHJ1Y3QgcmV2X2luZm8gKm9wdCkKK3sKKwlvcHQtPnNob3duX2Rhc2hlcyA9IDA7CisJZGlmZmNvcmVfc3RkKCZvcHQtPmRpZmZvcHQpOworCisJaWYgKGRpZmZfcXVldWVfaXNfZW1wdHkoKSkgeworCQlpbnQgc2F2ZWRfZm10ID0gb3B0LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQ7CisJCW9wdC0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCQlkaWZmX2ZsdXNoKCZvcHQtPmRpZmZvcHQpOworCQlvcHQtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IHNhdmVkX2ZtdDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG9wdC0+bG9naW5mbyAmJiAhb3B0LT5ub19jb21taXRfaWQpIHsKKwkJc2hvd19sb2cob3B0KTsKKwkJaWYgKChvcHQtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIH5ESUZGX0ZPUk1BVF9OT19PVVRQVVQpICYmCisJCSAgICBvcHQtPnZlcmJvc2VfaGVhZGVyICYmCisJCSAgICBvcHQtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfT05FTElORSAmJgorCQkgICAgIWNvbW1pdF9mb3JtYXRfaXNfZW1wdHkob3B0LT5jb21taXRfZm9ybWF0KSkgeworCQkJLyoKKwkJCSAqIFdoZW4gc2hvd2luZyBhIHZlcmJvc2UgaGVhZGVyIChpLmUuIGxvZyBtZXNzYWdlKSwKKwkJCSAqIGFuZCBub3QgaW4gLS1wcmV0dHk9b25lbGluZSBmb3JtYXQsIHdlIHdvdWxkIHdhbnQKKwkJCSAqIGFuIGV4dHJhIG5ld2xpbmUgYmV0d2VlbiB0aGUgZW5kIG9mIGxvZyBhbmQgdGhlCisJCQkgKiBkaWZmL2RpZmZzdGF0IG91dHB1dCBmb3IgcmVhZGFiaWxpdHkuCisJCQkgKi8KKwkJCWludCBwY2ggPSBESUZGX0ZPUk1BVF9ESUZGU1RBVCB8IERJRkZfRk9STUFUX1BBVENIOworCQkJaWYgKG9wdC0+ZGlmZm9wdC5vdXRwdXRfcHJlZml4KSB7CisJCQkJc3RydWN0IHN0cmJ1ZiAqbXNnID0gTlVMTDsKKwkJCQltc2cgPSBvcHQtPmRpZmZvcHQub3V0cHV0X3ByZWZpeCgmb3B0LT5kaWZmb3B0LAorCQkJCQlvcHQtPmRpZmZvcHQub3V0cHV0X3ByZWZpeF9kYXRhKTsKKwkJCQlmd3JpdGUobXNnLT5idWYsIG1zZy0+bGVuLCAxLCBvcHQtPmRpZmZvcHQuZmlsZSk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBXZSBtYXkgaGF2ZSBzaG93biB0aHJlZS1kYXNoZXMgbGluZSBlYXJseQorCQkJICogYmV0d2VlbiBnZW5lcmF0ZWQgY29tbWVudGFyeSAobm90ZXMsIGV0Yy4pCisJCQkgKiBhbmQgdGhlIGxvZyBtZXNzYWdlLCBpbiB3aGljaCBjYXNlIHdlIG9ubHkKKwkJCSAqIHdhbnQgYSBibGFuayBsaW5lIGFmdGVyIHRoZSBjb21tZW50YXJ5CisJCQkgKiB3aXRob3V0IChhbiBleHRyYSkgdGhyZWUtZGFzaGVzIGxpbmUuCisJCQkgKiBPdGhlcndpc2UsIHdlIHNob3cgdGhlIHRocmVlLWRhc2hlcyBsaW5lIGlmCisJCQkgKiB3ZSBhcmUgc2hvd2luZyB0aGUgcGF0Y2ggd2l0aCBkaWZmc3RhdCwgYnV0CisJCQkgKiBpbiB0aGF0IGNhc2UsIHRoZXJlIGlzIG5vIGV4dHJhIGJsYW5rIGxpbmUKKwkJCSAqIGFmdGVyIHRoZSB0aHJlZS1kYXNoZXMgbGluZS4KKwkJCSAqLworCQkJaWYgKCFvcHQtPnNob3duX2Rhc2hlcyAmJgorCQkJICAgIChwY2ggJiBvcHQtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkgPT0gcGNoKQorCQkJCWZwcmludGYob3B0LT5kaWZmb3B0LmZpbGUsICItLS0iKTsKKwkJCXB1dGMoJ1xuJywgb3B0LT5kaWZmb3B0LmZpbGUpOworCQl9CisJfQorCWRpZmZfZmx1c2goJm9wdC0+ZGlmZm9wdCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZG9fZGlmZl9jb21iaW5lZChzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWRpZmZfdHJlZV9jb21iaW5lZF9tZXJnZShjb21taXQsIG9wdC0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzLCBvcHQpOworCXJldHVybiAhb3B0LT5sb2dpbmZvOworfQorCisvKgorICogU2hvdyB0aGUgZGlmZiBvZiBhIGNvbW1pdC4KKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBwcmludGVkIGFueSBsb2cgaW5mbyBtZXNzYWdlcworICovCitzdGF0aWMgaW50IGxvZ190cmVlX2RpZmYoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGxvZ19pbmZvICpsb2cpCit7CisJaW50IHNob3dlZF9sb2c7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCXN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKworCWlmICghb3B0LT5kaWZmICYmICFvcHQtPmRpZmZvcHQuZmxhZ3MuZXhpdF93aXRoX3N0YXR1cykKKwkJcmV0dXJuIDA7CisKKwlwYXJzZV9jb21taXRfb3JfZGllKGNvbW1pdCk7CisJb2lkID0gZ2V0X2NvbW1pdF90cmVlX29pZChjb21taXQpOworCisJLyogUm9vdCBjb21taXQ/ICovCisJcGFyZW50cyA9IGdldF9zYXZlZF9wYXJlbnRzKG9wdCwgY29tbWl0KTsKKwlpZiAoIXBhcmVudHMpIHsKKwkJaWYgKG9wdC0+c2hvd19yb290X2RpZmYpIHsKKwkJCWRpZmZfcm9vdF90cmVlX29pZChvaWQsICIiLCAmb3B0LT5kaWZmb3B0KTsKKwkJCWxvZ190cmVlX2RpZmZfZmx1c2gob3B0KTsKKwkJfQorCQlyZXR1cm4gIW9wdC0+bG9naW5mbzsKKwl9CisKKwkvKiBNb3JlIHRoYW4gb25lIHBhcmVudD8gKi8KKwlpZiAocGFyZW50cyAmJiBwYXJlbnRzLT5uZXh0KSB7CisJCWlmIChvcHQtPmlnbm9yZV9tZXJnZXMpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSBpZiAob3B0LT5jb21iaW5lX21lcmdlcykKKwkJCXJldHVybiBkb19kaWZmX2NvbWJpbmVkKG9wdCwgY29tbWl0KTsKKwkJZWxzZSBpZiAob3B0LT5maXJzdF9wYXJlbnRfb25seSkgeworCQkJLyoKKwkJCSAqIEdlbmVyYXRlIG1lcmdlIGxvZyBlbnRyeSBvbmx5IGZvciB0aGUgZmlyc3QKKwkJCSAqIHBhcmVudCwgc2hvd2luZyBzdW1tYXJ5IGRpZmYgb2YgdGhlIG90aGVycworCQkJICogd2UgbWVyZ2VkIF9pbl8uCisJCQkgKi8KKwkJCXBhcnNlX2NvbW1pdF9vcl9kaWUocGFyZW50cy0+aXRlbSk7CisJCQlkaWZmX3RyZWVfb2lkKGdldF9jb21taXRfdHJlZV9vaWQocGFyZW50cy0+aXRlbSksCisJCQkJICAgICAgb2lkLCAiIiwgJm9wdC0+ZGlmZm9wdCk7CisJCQlsb2dfdHJlZV9kaWZmX2ZsdXNoKG9wdCk7CisJCQlyZXR1cm4gIW9wdC0+bG9naW5mbzsKKwkJfQorCisJCS8qIElmIHdlIHNob3cgaW5kaXZpZHVhbCBkaWZmcywgc2hvdyB0aGUgcGFyZW50IGluZm8gKi8KKwkJbG9nLT5wYXJlbnQgPSBwYXJlbnRzLT5pdGVtOworCX0KKworCXNob3dlZF9sb2cgPSAwOworCWZvciAoOzspIHsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKworCQlwYXJzZV9jb21taXRfb3JfZGllKHBhcmVudCk7CisJCWRpZmZfdHJlZV9vaWQoZ2V0X2NvbW1pdF90cmVlX29pZChwYXJlbnQpLAorCQkJICAgICAgb2lkLCAiIiwgJm9wdC0+ZGlmZm9wdCk7CisJCWxvZ190cmVlX2RpZmZfZmx1c2gob3B0KTsKKworCQlzaG93ZWRfbG9nIHw9ICFvcHQtPmxvZ2luZm87CisKKwkJLyogU2V0IHVwIHRoZSBsb2cgaW5mbyBmb3IgdGhlIG5leHQgcGFyZW50LCBpZiBhbnkuLiAqLworCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJaWYgKCFwYXJlbnRzKQorCQkJYnJlYWs7CisJCWxvZy0+cGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwkJb3B0LT5sb2dpbmZvID0gbG9nOworCX0KKwlyZXR1cm4gc2hvd2VkX2xvZzsKK30KKworaW50IGxvZ190cmVlX2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBsb2dfaW5mbyBsb2c7CisJaW50IHNob3duLCBjbG9zZV9maWxlID0gb3B0LT5kaWZmb3B0LmNsb3NlX2ZpbGU7CisKKwlsb2cuY29tbWl0ID0gY29tbWl0OworCWxvZy5wYXJlbnQgPSBOVUxMOworCW9wdC0+bG9naW5mbyA9ICZsb2c7CisJb3B0LT5kaWZmb3B0LmNsb3NlX2ZpbGUgPSAwOworCisJaWYgKG9wdC0+bGluZV9sZXZlbF90cmF2ZXJzZSkKKwkJcmV0dXJuIGxpbmVfbG9nX3ByaW50KG9wdCwgY29tbWl0KTsKKworCWlmIChvcHQtPnRyYWNrX2xpbmVhciAmJiAhb3B0LT5saW5lYXIgJiYgIW9wdC0+cmV2ZXJzZV9vdXRwdXRfc3RhZ2UpCisJCWZwcmludGYob3B0LT5kaWZmb3B0LmZpbGUsICJcbiVzXG4iLCBvcHQtPmJyZWFrX2Jhcik7CisJc2hvd24gPSBsb2dfdHJlZV9kaWZmKG9wdCwgY29tbWl0LCAmbG9nKTsKKwlpZiAoIXNob3duICYmIG9wdC0+bG9naW5mbyAmJiBvcHQtPmFsd2F5c19zaG93X2hlYWRlcikgeworCQlsb2cucGFyZW50ID0gTlVMTDsKKwkJc2hvd19sb2cob3B0KTsKKwkJc2hvd24gPSAxOworCX0KKwlpZiAob3B0LT50cmFja19saW5lYXIgJiYgIW9wdC0+bGluZWFyICYmIG9wdC0+cmV2ZXJzZV9vdXRwdXRfc3RhZ2UpCisJCWZwcmludGYob3B0LT5kaWZmb3B0LmZpbGUsICJcbiVzXG4iLCBvcHQtPmJyZWFrX2Jhcik7CisJb3B0LT5sb2dpbmZvID0gTlVMTDsKKwltYXliZV9mbHVzaF9vcl9kaWUob3B0LT5kaWZmb3B0LmZpbGUsICJzdGRvdXQiKTsKKwlpZiAoY2xvc2VfZmlsZSkKKwkJZmNsb3NlKG9wdC0+ZGlmZm9wdC5maWxlKTsKKwlyZXR1cm4gc2hvd247Cit9CmRpZmYgLS1naXQgYS9sb2ctdHJlZS5oIGIvbG9nLXRyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmE3OTI4Ci0tLSAvZGV2L251bGwKKysrIGIvbG9nLXRyZWUuaApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmIExPR19UUkVFX0gKKyNkZWZpbmUgTE9HX1RSRUVfSAorCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKworc3RydWN0IGxvZ19pbmZvIHsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQsICpwYXJlbnQ7Cit9OworCitzdHJ1Y3QgZGVjb3JhdGlvbl9maWx0ZXIgeworCXN0cnVjdCBzdHJpbmdfbGlzdCAqaW5jbHVkZV9yZWZfcGF0dGVybjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmV4Y2x1ZGVfcmVmX3BhdHRlcm47CisJc3RydWN0IHN0cmluZ19saXN0ICpleGNsdWRlX3JlZl9jb25maWdfcGF0dGVybjsKK307CisKK2ludCBwYXJzZV9kZWNvcmF0ZV9jb2xvcl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICpzbG90X25hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgaW5pdF9sb2dfdHJlZV9vcHQoc3RydWN0IHJldl9pbmZvICopOworaW50IGxvZ190cmVlX2RpZmZfZmx1c2goc3RydWN0IHJldl9pbmZvICopOworaW50IGxvZ190cmVlX2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKiwgc3RydWN0IGNvbW1pdCAqKTsKK2ludCBsb2dfdHJlZV9vcHRfcGFyc2Uoc3RydWN0IHJldl9pbmZvICosIGNvbnN0IGNoYXIgKiosIGludCk7Cit2b2lkIHNob3dfbG9nKHN0cnVjdCByZXZfaW5mbyAqb3B0KTsKK3ZvaWQgZm9ybWF0X2RlY29yYXRpb25zX2V4dGVuZGVkKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICAgIGludCB1c2VfY29sb3IsCisJCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgY29uc3QgY2hhciAqc2VwYXJhdG9yLAorCQkJICAgICBjb25zdCBjaGFyICpzdWZmaXgpOworI2RlZmluZSBmb3JtYXRfZGVjb3JhdGlvbnMoc3RyYnVmLCBjb21taXQsIGNvbG9yKSBcCisJCQkgICAgIGZvcm1hdF9kZWNvcmF0aW9uc19leHRlbmRlZCgoc3RyYnVmKSwgKGNvbW1pdCksIChjb2xvciksICIgKCIsICIsICIsICIpIikKK3ZvaWQgc2hvd19kZWNvcmF0aW9ucyhzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKK3ZvaWQgbG9nX3dyaXRlX2VtYWlsX2hlYWRlcnMoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICAgY29uc3QgY2hhciAqKmV4dHJhX2hlYWRlcnNfcCwKKwkJCSAgICAgaW50ICpuZWVkXzhiaXRfY3RlX3AsCisJCQkgICAgIGludCBtYXliZV9tdWx0aXBhcnQpOwordm9pZCBsb2FkX3JlZl9kZWNvcmF0aW9ucyhzdHJ1Y3QgZGVjb3JhdGlvbl9maWx0ZXIgKmZpbHRlciwgaW50IGZsYWdzKTsKKworI2RlZmluZSBGT1JNQVRfUEFUQ0hfTkFNRV9NQVggNjQKK3ZvaWQgZm10X291dHB1dF9jb21taXQoc3RydWN0IHN0cmJ1ZiAqLCBzdHJ1Y3QgY29tbWl0ICosIHN0cnVjdCByZXZfaW5mbyAqKTsKK3ZvaWQgZm10X291dHB1dF9zdWJqZWN0KHN0cnVjdCBzdHJidWYgKiwgY29uc3QgY2hhciAqc3ViamVjdCwgc3RydWN0IHJldl9pbmZvICopOwordm9pZCBmbXRfb3V0cHV0X2VtYWlsX3N1YmplY3Qoc3RydWN0IHN0cmJ1ZiAqLCBzdHJ1Y3QgcmV2X2luZm8gKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbHMtcmVmcy5jIGIvbHMtcmVmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZDg2ODYKLS0tIC9kZXYvbnVsbAorKysgYi9scy1yZWZzLmMKQEAgLTAsMCArMSwxMTYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgImxzLXJlZnMuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorCisvKgorICogQ2hlY2sgaWYgb25lIG9mIHRoZSBwcmVmaXhlcyBpcyBhIHByZWZpeCBvZiB0aGUgcmVmLgorICogSWYgbm8gcHJlZml4ZXMgd2VyZSBwcm92aWRlZCwgYWxsIHJlZnMgbWF0Y2guCisgKi8KK3N0YXRpYyBpbnQgcmVmX21hdGNoKGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICpwcmVmaXhlcywgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlpbnQgaTsKKworCWlmICghcHJlZml4ZXMtPmFyZ2MpCisJCXJldHVybiAxOyAvKiBubyByZXN0cmljdGlvbiAqLworCisJZm9yIChpID0gMDsgaSA8IHByZWZpeGVzLT5hcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcHJlZml4ID0gcHJlZml4ZXMtPmFyZ3ZbaV07CisKKwkJaWYgKHN0YXJ0c193aXRoKHJlZm5hbWUsIHByZWZpeCkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGxzX3JlZnNfZGF0YSB7CisJdW5zaWduZWQgcGVlbDsKKwl1bnNpZ25lZCBzeW1yZWZzOworCXN0cnVjdCBhcmd2X2FycmF5IHByZWZpeGVzOworfTsKKworc3RhdGljIGludCBzZW5kX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgbHNfcmVmc19kYXRhICpkYXRhID0gY2JfZGF0YTsKKwljb25zdCBjaGFyICpyZWZuYW1lX25vbnMgPSBzdHJpcF9uYW1lc3BhY2UocmVmbmFtZSk7CisJc3RydWN0IHN0cmJ1ZiByZWZsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAocmVmX2lzX2hpZGRlbihyZWZuYW1lX25vbnMsIHJlZm5hbWUpKQorCQlyZXR1cm4gMDsKKworCWlmICghcmVmX21hdGNoKCZkYXRhLT5wcmVmaXhlcywgcmVmbmFtZV9ub25zKSkKKwkJcmV0dXJuIDA7CisKKwlzdHJidWZfYWRkZigmcmVmbGluZSwgIiVzICVzIiwgb2lkX3RvX2hleChvaWQpLCByZWZuYW1lX25vbnMpOworCWlmIChkYXRhLT5zeW1yZWZzICYmIGZsYWcgJiBSRUZfSVNTWU1SRUYpIHsKKwkJc3RydWN0IG9iamVjdF9pZCB1bnVzZWQ7CisJCWNvbnN0IGNoYXIgKnN5bXJlZl90YXJnZXQgPSByZXNvbHZlX3JlZl91bnNhZmUocmVmbmFtZSwgMCwKKwkJCQkJCQkgICAgICAgJnVudXNlZCwKKwkJCQkJCQkgICAgICAgJmZsYWcpOworCisJCWlmICghc3ltcmVmX3RhcmdldCkKKwkJCWRpZSgiJyVzJyBpcyBhIHN5bXJlZiBidXQgaXQgaXMgbm90PyIsIHJlZm5hbWUpOworCisJCXN0cmJ1Zl9hZGRmKCZyZWZsaW5lLCAiIHN5bXJlZi10YXJnZXQ6JXMiLAorCQkJICAgIHN0cmlwX25hbWVzcGFjZShzeW1yZWZfdGFyZ2V0KSk7CisJfQorCisJaWYgKGRhdGEtPnBlZWwpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBwZWVsZWQ7CisJCWlmICghcGVlbF9yZWYocmVmbmFtZSwgJnBlZWxlZCkpCisJCQlzdHJidWZfYWRkZigmcmVmbGluZSwgIiBwZWVsZWQ6JXMiLCBvaWRfdG9faGV4KCZwZWVsZWQpKTsKKwl9CisKKwlzdHJidWZfYWRkY2goJnJlZmxpbmUsICdcbicpOworCXBhY2tldF93cml0ZSgxLCByZWZsaW5lLmJ1ZiwgcmVmbGluZS5sZW4pOworCisJc3RyYnVmX3JlbGVhc2UoJnJlZmxpbmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxzX3JlZnNfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJLyoKKwkgKiBXZSBvbmx5IHNlcnZlIGZldGNoZXMgb3ZlciB2MiBmb3Igbm93LCBzbyByZXNwZWN0IG9ubHkgInVwbG9hZHBhY2siCisJICogY29uZmlnLiBUaGlzIG1heSBuZWVkIHRvIGV2ZW50dWFsbHkgYmUgZXhwYW5kZWQgdG8gInJlY2VpdmUiLCBidXQgd2UKKwkgKiBkb24ndCB5ZXQga25vdyBob3cgdGhhdCBpbmZvcm1hdGlvbiB3aWxsIGJlIHBhc3NlZCB0byBscy1yZWZzLgorCSAqLworCXJldHVybiBwYXJzZV9oaWRlX3JlZnNfY29uZmlnKHZhciwgdmFsdWUsICJ1cGxvYWRwYWNrIik7Cit9CisKK2ludCBsc19yZWZzKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgYXJndl9hcnJheSAqa2V5cywKKwkgICAgc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlcXVlc3QpCit7CisJc3RydWN0IGxzX3JlZnNfZGF0YSBkYXRhOworCisJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCisJZ2l0X2NvbmZpZyhsc19yZWZzX2NvbmZpZywgTlVMTCk7CisKKwl3aGlsZSAocGFja2V0X3JlYWRlcl9yZWFkKHJlcXVlc3QpID09IFBBQ0tFVF9SRUFEX05PUk1BTCkgeworCQljb25zdCBjaGFyICphcmcgPSByZXF1ZXN0LT5saW5lOworCQljb25zdCBjaGFyICpvdXQ7CisKKwkJaWYgKCFzdHJjbXAoInBlZWwiLCBhcmcpKQorCQkJZGF0YS5wZWVsID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcCgic3ltcmVmcyIsIGFyZykpCisJCQlkYXRhLnN5bXJlZnMgPSAxOworCQllbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICJyZWYtcHJlZml4ICIsICZvdXQpKQorCQkJYXJndl9hcnJheV9wdXNoKCZkYXRhLnByZWZpeGVzLCBvdXQpOworCX0KKworCWlmIChyZXF1ZXN0LT5zdGF0dXMgIT0gUEFDS0VUX1JFQURfRkxVU0gpCisJCWRpZShfKCJleHBlY3RlZCBmbHVzaCBhZnRlciBscy1yZWZzIGFyZ3VtZW50cyIpKTsKKworCWhlYWRfcmVmX25hbWVzcGFjZWQoc2VuZF9yZWYsICZkYXRhKTsKKwlmb3JfZWFjaF9uYW1lc3BhY2VkX3JlZihzZW5kX3JlZiwgJmRhdGEpOworCXBhY2tldF9mbHVzaCgxKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZkYXRhLnByZWZpeGVzKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xzLXJlZnMuaCBiL2xzLXJlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTU2NDZmCi0tLSAvZGV2L251bGwKKysrIGIvbHMtcmVmcy5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgTFNfUkVGU19ICisjZGVmaW5lIExTX1JFRlNfSAorCitzdHJ1Y3QgcmVwb3NpdG9yeTsKK3N0cnVjdCBhcmd2X2FycmF5Oworc3RydWN0IHBhY2tldF9yZWFkZXI7CitpbnQgbHNfcmVmcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGFyZ3ZfYXJyYXkgKmtleXMsCisJICAgIHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZXF1ZXN0KTsKKworI2VuZGlmIC8qIExTX1JFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvbWFpbGluZm8uYyBiL21haWxpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4MWQ5MQotLS0gL2Rldi9udWxsCisrKyBiL21haWxpbmZvLmMKQEAgLTAsMCArMSwxMjYyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAibWFpbGluZm8uaCIKKworc3RhdGljIHZvaWQgY2xlYW51cF9zcGFjZShzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlzaXplX3QgcG9zLCBjbnQ7CisJZm9yIChwb3MgPSAwOyBwb3MgPCBzYi0+bGVuOyBwb3MrKykgeworCQlpZiAoaXNzcGFjZShzYi0+YnVmW3Bvc10pKSB7CisJCQlzYi0+YnVmW3Bvc10gPSAnICc7CisJCQlmb3IgKGNudCA9IDA7IGlzc3BhY2Uoc2ItPmJ1Zltwb3MgKyBjbnQgKyAxXSk7IGNudCsrKTsKKwkJCXN0cmJ1Zl9yZW1vdmUoc2IsIHBvcyArIDEsIGNudCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdldF9zYW5lX25hbWUoc3RydWN0IHN0cmJ1ZiAqb3V0LCBzdHJ1Y3Qgc3RyYnVmICpuYW1lLCBzdHJ1Y3Qgc3RyYnVmICplbWFpbCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpzcmMgPSBuYW1lOworCWlmIChuYW1lLT5sZW4gPCAzIHx8IDYwIDwgbmFtZS0+bGVuIHx8IHN0cnBicmsobmFtZS0+YnVmLCAiQDw+IikpCisJCXNyYyA9IGVtYWlsOworCWVsc2UgaWYgKG5hbWUgPT0gb3V0KQorCQlyZXR1cm47CisJc3RyYnVmX3Jlc2V0KG91dCk7CisJc3RyYnVmX2FkZGJ1ZihvdXQsIHNyYyk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2JvZ3VzX2Zyb20oc3RydWN0IG1haWxpbmZvICptaSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwkvKiBKb2huIERvZSA8am9obmRvZT4gKi8KKworCWNoYXIgKmJyYSwgKmtldDsKKwkvKiBUaGlzIGlzIGZhbGxiYWNrLCBzbyBkbyBub3QgYm90aGVyIGlmIHdlIGFscmVhZHkgaGF2ZSBhbgorCSAqIGUtbWFpbCBhZGRyZXNzLgorCSAqLworCWlmIChtaS0+ZW1haWwubGVuKQorCQlyZXR1cm47CisKKwlicmEgPSBzdHJjaHIobGluZS0+YnVmLCAnPCcpOworCWlmICghYnJhKQorCQlyZXR1cm47CisJa2V0ID0gc3RyY2hyKGJyYSwgJz4nKTsKKwlpZiAoIWtldCkKKwkJcmV0dXJuOworCisJc3RyYnVmX3Jlc2V0KCZtaS0+ZW1haWwpOworCXN0cmJ1Zl9hZGQoJm1pLT5lbWFpbCwgYnJhICsgMSwga2V0IC0gYnJhIC0gMSk7CisKKwlzdHJidWZfcmVzZXQoJm1pLT5uYW1lKTsKKwlzdHJidWZfYWRkKCZtaS0+bmFtZSwgbGluZS0+YnVmLCBicmEgLSBsaW5lLT5idWYpOworCXN0cmJ1Zl90cmltKCZtaS0+bmFtZSk7CisJZ2V0X3NhbmVfbmFtZSgmbWktPm5hbWUsICZtaS0+bmFtZSwgJm1pLT5lbWFpbCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp1bnF1b3RlX2NvbW1lbnQoc3RydWN0IHN0cmJ1ZiAqb3V0YnVmLCBjb25zdCBjaGFyICppbikKK3sKKwlpbnQgYzsKKwlpbnQgdGFrZV9uZXh0X2xpdGVyYWxseSA9IDA7CisKKwlzdHJidWZfYWRkY2gob3V0YnVmLCAnKCcpOworCisJd2hpbGUgKChjID0gKmluKyspICE9IDApIHsKKwkJaWYgKHRha2VfbmV4dF9saXRlcmFsbHkgPT0gMSkgeworCQkJdGFrZV9uZXh0X2xpdGVyYWxseSA9IDA7CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgJ1xcJzoKKwkJCQl0YWtlX25leHRfbGl0ZXJhbGx5ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJygnOgorCQkJCWluID0gdW5xdW90ZV9jb21tZW50KG91dGJ1ZiwgaW4pOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnKSc6CisJCQkJc3RyYnVmX2FkZGNoKG91dGJ1ZiwgJyknKTsKKwkJCQlyZXR1cm4gaW47CisJCQl9CisJCX0KKworCQlzdHJidWZfYWRkY2gob3V0YnVmLCBjKTsKKwl9CisKKwlyZXR1cm4gaW47Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp1bnF1b3RlX3F1b3RlZF9zdHJpbmcoc3RydWN0IHN0cmJ1ZiAqb3V0YnVmLCBjb25zdCBjaGFyICppbikKK3sKKwlpbnQgYzsKKwlpbnQgdGFrZV9uZXh0X2xpdGVyYWxseSA9IDA7CisKKwl3aGlsZSAoKGMgPSAqaW4rKykgIT0gMCkgeworCQlpZiAodGFrZV9uZXh0X2xpdGVyYWxseSA9PSAxKSB7CisJCQl0YWtlX25leHRfbGl0ZXJhbGx5ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAnXFwnOgorCQkJCXRha2VfbmV4dF9saXRlcmFsbHkgPSAxOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnIic6CisJCQkJcmV0dXJuIGluOworCQkJfQorCQl9CisKKwkJc3RyYnVmX2FkZGNoKG91dGJ1ZiwgYyk7CisJfQorCisJcmV0dXJuIGluOworfQorCitzdGF0aWMgdm9pZCB1bnF1b3RlX3F1b3RlZF9wYWlyKHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiBvdXRidWY7CisJY29uc3QgY2hhciAqaW4gPSBsaW5lLT5idWY7CisJaW50IGM7CisKKwlzdHJidWZfaW5pdCgmb3V0YnVmLCBsaW5lLT5sZW4pOworCisJd2hpbGUgKChjID0gKmluKyspICE9IDApIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJyInOgorCQkJaW4gPSB1bnF1b3RlX3F1b3RlZF9zdHJpbmcoJm91dGJ1ZiwgaW4pOworCQkJY29udGludWU7CisJCWNhc2UgJygnOgorCQkJaW4gPSB1bnF1b3RlX2NvbW1lbnQoJm91dGJ1ZiwgaW4pOworCQkJY29udGludWU7CisJCX0KKworCQlzdHJidWZfYWRkY2goJm91dGJ1ZiwgYyk7CisJfQorCisJc3RyYnVmX3N3YXAoJm91dGJ1ZiwgbGluZSk7CisJc3RyYnVmX3JlbGVhc2UoJm91dGJ1Zik7CisKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2Zyb20oc3RydWN0IG1haWxpbmZvICptaSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqZnJvbSkKK3sKKwljaGFyICphdDsKKwlzaXplX3QgZWw7CisJc3RydWN0IHN0cmJ1ZiBmOworCisJc3RyYnVmX2luaXQoJmYsIGZyb20tPmxlbik7CisJc3RyYnVmX2FkZGJ1ZigmZiwgZnJvbSk7CisKKwl1bnF1b3RlX3F1b3RlZF9wYWlyKCZmKTsKKworCWF0ID0gc3RyY2hyKGYuYnVmLCAnQCcpOworCWlmICghYXQpIHsKKwkJcGFyc2VfYm9ndXNfZnJvbShtaSwgZnJvbSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogSWYgd2UgYWxyZWFkeSBoYXZlIG9uZSBlbWFpbCwgZG9uJ3QgdGFrZSBhbnkgY29uZnVzaW5nIGxpbmVzCisJICovCisJaWYgKG1pLT5lbWFpbC5sZW4gJiYgc3RyY2hyKGF0ICsgMSwgJ0AnKSkKKwkJZ290byBvdXQ7CisKKwkvKiBQaWNrIHVwIHRoZSBzdHJpbmcgYXJvdW5kICdAJywgcG9zc2libHkgZGVsaW1pdGVkIHdpdGggPD4KKwkgKiBwYWlyOyB0aGF0IGlzIHRoZSBlbWFpbCBwYXJ0LgorCSAqLworCXdoaWxlIChhdCA+IGYuYnVmKSB7CisJCWNoYXIgYyA9IGF0Wy0xXTsKKwkJaWYgKGlzc3BhY2UoYykpCisJCQlicmVhazsKKwkJaWYgKGMgPT0gJzwnKSB7CisJCQlhdFstMV0gPSAnICc7CisJCQlicmVhazsKKwkJfQorCQlhdC0tOworCX0KKwllbCA9IHN0cmNzcG4oYXQsICIgXG5cdFxyXHZcZj4iKTsKKwlzdHJidWZfcmVzZXQoJm1pLT5lbWFpbCk7CisJc3RyYnVmX2FkZCgmbWktPmVtYWlsLCBhdCwgZWwpOworCXN0cmJ1Zl9yZW1vdmUoJmYsIGF0IC0gZi5idWYsIGVsICsgKGF0W2VsXSA/IDEgOiAwKSk7CisKKwkvKiBUaGUgcmVtYWluZGVyIGlzIG5hbWUuICBJdCBjb3VsZCBiZQorCSAqCisJICogLSAiSm9obiBEb2UgPGpvaG4uZG9lQHh6PiIJCQkoYSksIG9yCisJICogLSAiam9obi5kb2VAeHogKEpvaG4gRG9lKSIJCQkoYiksIG9yCisJICogLSAiSm9obiAoenp6KSBEb2UgPGpvaG4uZG9lQHh6PiAoQ29tbWVudCkiCShjKQorCSAqCisJICogYnV0IHdlIGhhdmUgcmVtb3ZlZCB0aGUgZW1haWwgcGFydCwgc28KKwkgKgorCSAqIC0gcmVtb3ZlIGV4dHJhIHNwYWNlcyB3aGljaCBjb3VsZCBzdGF5IGFmdGVyIGVtYWlsIChjYXNlICdjJyksIGFuZAorCSAqIC0gdHJpbSBmcm9tIGJvdGggZW5kcywgcG9zc2libHkgcmVtb3ZpbmcgdGhlICgpIHBhaXIgYXQgdGhlIGVuZAorCSAqICAgKGNhc2VzICdhJyBhbmQgJ2InKS4KKwkgKi8KKwljbGVhbnVwX3NwYWNlKCZmKTsKKwlzdHJidWZfdHJpbSgmZik7CisJaWYgKGYuYnVmWzBdID09ICcoJyAmJiBmLmxlbiAmJiBmLmJ1ZltmLmxlbiAtIDFdID09ICcpJykgeworCQlzdHJidWZfcmVtb3ZlKCZmLCAwLCAxKTsKKwkJc3RyYnVmX3NldGxlbigmZiwgZi5sZW4gLSAxKTsKKwl9CisKKwlnZXRfc2FuZV9uYW1lKCZtaS0+bmFtZSwgJmYsICZtaS0+ZW1haWwpOworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZmKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2hlYWRlcihzdHJ1Y3Qgc3RyYnVmICoqb3V0LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCWlmICghKm91dCkgeworCQkqb3V0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0cmJ1ZikpOworCQlzdHJidWZfaW5pdCgqb3V0LCBsaW5lLT5sZW4pOworCX0gZWxzZQorCQlzdHJidWZfcmVzZXQoKm91dCk7CisKKwlzdHJidWZfYWRkYnVmKCpvdXQsIGxpbmUpOworfQorCisvKiBOT1RFIE5PVEUgTk9URS4gIFdlIGRvIG5vdCBjbGFpbSB3ZSBkbyBmdWxsIE1JTUUuICBXZSBqdXN0IGF0dGVtcHQKKyAqIHRvIGhhdmUgZW5vdWdoIGhldXJpc3RpY3MgdG8gZ3JvayBNSU1FIGVuY29kZWQgcGF0Y2hlcyBvZnRlbiBmb3VuZAorICogb24gb3VyIG1haWxpbmcgbGlzdHMuICBGb3IgZXhhbXBsZSwgd2UgZG8gbm90IGV2ZW4gdHJlYXQgaGVhZGVyIGxpbmVzCisgKiBjYXNlIGluc2Vuc2l0aXZlbHkuCisgKi8KKworc3RhdGljIGludCBzbHVycF9hdHRyKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKmF0dHIpCit7CisJY29uc3QgY2hhciAqZW5kcywgKmFwID0gc3RyY2FzZXN0cihsaW5lLCBuYW1lKTsKKwlzaXplX3Qgc3o7CisKKwlzdHJidWZfc2V0bGVuKGF0dHIsIDApOworCWlmICghYXApCisJCXJldHVybiAwOworCWFwICs9IHN0cmxlbihuYW1lKTsKKwlpZiAoKmFwID09ICciJykgeworCQlhcCsrOworCQllbmRzID0gIlwiIjsKKwl9CisJZWxzZQorCQllbmRzID0gIjsgXHQiOworCXN6ID0gc3RyY3NwbihhcCwgZW5kcyk7CisJc3RyYnVmX2FkZChhdHRyLCBhcCwgc3opOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGhhc19hdHRyX3ZhbHVlKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmMgPSBzbHVycF9hdHRyKGxpbmUsIG5hbWUsICZzYikgJiYgIXN0cmNhc2VjbXAoc2IuYnVmLCB2YWx1ZSk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9jb250ZW50X3R5cGUoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpib3VuZGFyeSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJidWYpKTsKKwlzdHJidWZfaW5pdChib3VuZGFyeSwgbGluZS0+bGVuKTsKKworCW1pLT5mb3JtYXRfZmxvd2VkID0gaGFzX2F0dHJfdmFsdWUobGluZS0+YnVmLCAiZm9ybWF0PSIsICJmbG93ZWQiKTsKKwltaS0+ZGVsc3AgPSBoYXNfYXR0cl92YWx1ZShsaW5lLT5idWYsICJkZWxzcD0iLCAieWVzIik7CisKKwlpZiAoc2x1cnBfYXR0cihsaW5lLT5idWYsICJib3VuZGFyeT0iLCBib3VuZGFyeSkpIHsKKwkJc3RyYnVmX2luc2VydHN0cihib3VuZGFyeSwgMCwgIi0tIik7CisJCWlmICgrK21pLT5jb250ZW50X3RvcCA+PSAmbWktPmNvbnRlbnRbTUFYX0JPVU5EQVJJRVNdKSB7CisJCQllcnJvcigiVG9vIG1hbnkgYm91bmRhcmllcyB0byBoYW5kbGUiKTsKKwkJCW1pLT5pbnB1dF9lcnJvciA9IC0xOworCQkJbWktPmNvbnRlbnRfdG9wID0gJm1pLT5jb250ZW50W01BWF9CT1VOREFSSUVTXSAtIDE7CisJCQlyZXR1cm47CisJCX0KKwkJKihtaS0+Y29udGVudF90b3ApID0gYm91bmRhcnk7CisJCWJvdW5kYXJ5ID0gTlVMTDsKKwl9CisJc2x1cnBfYXR0cihsaW5lLT5idWYsICJjaGFyc2V0PSIsICZtaS0+Y2hhcnNldCk7CisKKwlpZiAoYm91bmRhcnkpIHsKKwkJc3RyYnVmX3JlbGVhc2UoYm91bmRhcnkpOworCQlmcmVlKGJvdW5kYXJ5KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9jb250ZW50X3RyYW5zZmVyX2VuY29kaW5nKHN0cnVjdCBtYWlsaW5mbyAqbWksCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlpZiAoc3RyY2FzZXN0cihsaW5lLT5idWYsICJiYXNlNjQiKSkKKwkJbWktPnRyYW5zZmVyX2VuY29kaW5nID0gVEVfQkFTRTY0OworCWVsc2UgaWYgKHN0cmNhc2VzdHIobGluZS0+YnVmLCAicXVvdGVkLXByaW50YWJsZSIpKQorCQltaS0+dHJhbnNmZXJfZW5jb2RpbmcgPSBURV9RUDsKKwllbHNlCisJCW1pLT50cmFuc2Zlcl9lbmNvZGluZyA9IFRFX0RPTlRDQVJFOworfQorCitzdGF0aWMgaW50IGlzX211bHRpcGFydF9ib3VuZGFyeShzdHJ1Y3QgbWFpbGluZm8gKm1pLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN0cnVjdCBzdHJidWYgKmNvbnRlbnRfdG9wID0gKihtaS0+Y29udGVudF90b3ApOworCisJcmV0dXJuICgoY29udGVudF90b3AtPmxlbiA8PSBsaW5lLT5sZW4pICYmCisJCSFtZW1jbXAobGluZS0+YnVmLCBjb250ZW50X3RvcC0+YnVmLCBjb250ZW50X3RvcC0+bGVuKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfc3ViamVjdChzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpzdWJqZWN0KQoreworCXNpemVfdCBhdCA9IDA7CisKKwl3aGlsZSAoYXQgPCBzdWJqZWN0LT5sZW4pIHsKKwkJY2hhciAqcG9zOworCQlzaXplX3QgcmVtb3ZlOworCisJCXN3aXRjaCAoc3ViamVjdC0+YnVmW2F0XSkgeworCQljYXNlICdyJzogY2FzZSAnUic6CisJCQlpZiAoc3ViamVjdC0+bGVuIDw9IGF0ICsgMykKKwkJCQlicmVhazsKKwkJCWlmICgoc3ViamVjdC0+YnVmW2F0ICsgMV0gPT0gJ2UnIHx8CisJCQkgICAgIHN1YmplY3QtPmJ1ZlthdCArIDFdID09ICdFJykgJiYKKwkJCSAgICBzdWJqZWN0LT5idWZbYXQgKyAyXSA9PSAnOicpIHsKKwkJCQlzdHJidWZfcmVtb3ZlKHN1YmplY3QsIGF0LCAzKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWF0Kys7CisJCQlicmVhazsKKwkJY2FzZSAnICc6IGNhc2UgJ1x0JzogY2FzZSAnOic6CisJCQlzdHJidWZfcmVtb3ZlKHN1YmplY3QsIGF0LCAxKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdbJzoKKwkJCXBvcyA9IHN0cmNocihzdWJqZWN0LT5idWYgKyBhdCwgJ10nKTsKKwkJCWlmICghcG9zKQorCQkJCWJyZWFrOworCQkJcmVtb3ZlID0gcG9zIC0gc3ViamVjdC0+YnVmICsgYXQgKyAxOworCQkJaWYgKCFtaS0+a2VlcF9ub25fcGF0Y2hfYnJhY2tldHNfaW5fc3ViamVjdCB8fAorCQkJICAgICg3IDw9IHJlbW92ZSAmJgorCQkJICAgICBtZW1tZW0oc3ViamVjdC0+YnVmICsgYXQsIHJlbW92ZSwgIlBBVENIIiwgNSkpKQorCQkJCXN0cmJ1Zl9yZW1vdmUoc3ViamVjdCwgYXQsIHJlbW92ZSk7CisJCQllbHNlIHsKKwkJCQlhdCArPSByZW1vdmU7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgaW5wdXQgaGFkIGEgc3BhY2UgYWZ0ZXIgdGhlIF0sIGtlZXAKKwkJCQkgKiBpdC4gIFdlIGRvbid0IGJvdGhlciB3aXRoIGZpbmRpbmcgdGhlIGVuZCBvZgorCQkJCSAqIHRoZSBzcGFjZSwgc2luY2Ugd2UgbGF0ZXIgbm9ybWFsaXplIGl0CisJCQkJICogYW55d2F5LgorCQkJCSAqLworCQkJCWlmIChpc3NwYWNlKHN1YmplY3QtPmJ1ZlthdF0pKQorCQkJCQlhdCArPSAxOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJYnJlYWs7CisJfQorCXN0cmJ1Zl90cmltKHN1YmplY3QpOworfQorCisjZGVmaW5lIE1BWF9IRFJfUEFSU0VEIDEwCitzdGF0aWMgY29uc3QgY2hhciAqaGVhZGVyW01BWF9IRFJfUEFSU0VEXSA9IHsKKwkiRnJvbSIsIlN1YmplY3QiLCJEYXRlIiwKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHNraXBfaGVhZGVyKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUsIGNvbnN0IGNoYXIgKmhkciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKipvdXR2YWwpCit7CisJY29uc3QgY2hhciAqdmFsOworCWlmICghc2tpcF9pcHJlZml4KGxpbmUtPmJ1ZiwgaGRyLCAmdmFsKSB8fAorCSAgICAqdmFsKysgIT0gJzonKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoaXNzcGFjZSgqdmFsKSkKKwkJdmFsKys7CisJKm91dHZhbCA9IHZhbDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBpc19mb3JtYXRfcGF0Y2hfc2VwYXJhdG9yKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgU0FNUExFW10gPQorCQkiRnJvbSBlNjgwN2YzZWZjYTI4YjMwZGVjZmVjYjE3MzJhNTZjN2RiMTEzN2VlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMVxuIjsKKwljb25zdCBjaGFyICpjcDsKKworCWlmIChsZW4gIT0gc3RybGVuKFNBTVBMRSkpCisJCXJldHVybiAwOworCWlmICghc2tpcF9wcmVmaXgobGluZSwgIkZyb20gIiwgJmNwKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN0cnNwbihjcCwgIjAxMjM0NTY3ODlhYmNkZWYiKSAhPSA0MCkKKwkJcmV0dXJuIDA7CisJY3AgKz0gNDA7CisJcmV0dXJuICFtZW1jbXAoU0FNUExFICsgKGNwIC0gbGluZSksIGNwLCBzdHJsZW4oU0FNUExFKSAtIChjcCAtIGxpbmUpKTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJidWYgKmRlY29kZV9xX3NlZ21lbnQoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqcV9zZWcsIGludCByZmMyMDQ3KQoreworCWNvbnN0IGNoYXIgKmluID0gcV9zZWctPmJ1ZjsKKwlpbnQgYzsKKwlzdHJ1Y3Qgc3RyYnVmICpvdXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSk7CisJc3RyYnVmX2luaXQob3V0LCBxX3NlZy0+bGVuKTsKKworCXdoaWxlICgoYyA9ICppbisrKSAhPSAwKSB7CisJCWlmIChjID09ICc9JykgeworCQkJaW50IGNoLCBkID0gKmluOworCQkJaWYgKGQgPT0gJ1xuJyB8fCAhZCkKKwkJCQlicmVhazsgLyogZHJvcCB0cmFpbGluZyBuZXdsaW5lICovCisJCQljaCA9IGhleDJjaHIoaW4pOworCQkJaWYgKGNoID49IDApIHsKKwkJCQlzdHJidWZfYWRkY2gob3V0LCBjaCk7CisJCQkJaW4gKz0gMjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIGdhcmJhZ2UgLS0gZmFsbCB0aHJvdWdoICovCisJCX0KKwkJaWYgKHJmYzIwNDcgJiYgYyA9PSAnXycpIC8qIHJmYzIwNDcgNC4yICgyKSAqLworCQkJYyA9IDB4MjA7CisJCXN0cmJ1Zl9hZGRjaChvdXQsIGMpOworCX0KKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiAqZGVjb2RlX2Jfc2VnbWVudChjb25zdCBzdHJ1Y3Qgc3RyYnVmICpiX3NlZykKK3sKKwkvKiBEZWNvZGUgaW4uLmVwLCBwb3NzaWJseSBpbi1wbGFjZSB0byBvdCAqLworCWludCBjLCBwb3MgPSAwLCBhY2MgPSAwOworCWNvbnN0IGNoYXIgKmluID0gYl9zZWctPmJ1ZjsKKwlzdHJ1Y3Qgc3RyYnVmICpvdXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSk7CisJc3RyYnVmX2luaXQob3V0LCBiX3NlZy0+bGVuKTsKKworCXdoaWxlICgoYyA9ICppbisrKSAhPSAwKSB7CisJCWlmIChjID09ICcrJykKKwkJCWMgPSA2MjsKKwkJZWxzZSBpZiAoYyA9PSAnLycpCisJCQljID0gNjM7CisJCWVsc2UgaWYgKCdBJyA8PSBjICYmIGMgPD0gJ1onKQorCQkJYyAtPSAnQSc7CisJCWVsc2UgaWYgKCdhJyA8PSBjICYmIGMgPD0gJ3onKQorCQkJYyAtPSAnYScgLSAyNjsKKwkJZWxzZSBpZiAoJzAnIDw9IGMgJiYgYyA8PSAnOScpCisJCQljIC09ICcwJyAtIDUyOworCQllbHNlCisJCQljb250aW51ZTsgLyogZ2FyYmFnZSAqLworCQlzd2l0Y2ggKHBvcysrKSB7CisJCWNhc2UgMDoKKwkJCWFjYyA9IChjIDw8IDIpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXN0cmJ1Zl9hZGRjaChvdXQsIChhY2MgfCAoYyA+PiA0KSkpOworCQkJYWNjID0gKGMgJiAxNSkgPDwgNDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlzdHJidWZfYWRkY2gob3V0LCAoYWNjIHwgKGMgPj4gMikpKTsKKwkJCWFjYyA9IChjICYgMykgPDwgNjsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlzdHJidWZfYWRkY2gob3V0LCAoYWNjIHwgYykpOworCQkJYWNjID0gcG9zID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgY29udmVydF90b191dGY4KHN0cnVjdCBtYWlsaW5mbyAqbWksCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICpsaW5lLCBjb25zdCBjaGFyICpjaGFyc2V0KQoreworCWNoYXIgKm91dDsKKwlzaXplX3Qgb3V0X2xlbjsKKworCWlmICghbWktPm1ldGFpbmZvX2NoYXJzZXQgfHwgIWNoYXJzZXQgfHwgISpjaGFyc2V0KQorCQlyZXR1cm4gMDsKKworCWlmIChzYW1lX2VuY29kaW5nKG1pLT5tZXRhaW5mb19jaGFyc2V0LCBjaGFyc2V0KSkKKwkJcmV0dXJuIDA7CisJb3V0ID0gcmVlbmNvZGVfc3RyaW5nX2xlbihsaW5lLT5idWYsIGxpbmUtPmxlbiwKKwkJCQkgIG1pLT5tZXRhaW5mb19jaGFyc2V0LCBjaGFyc2V0LCAmb3V0X2xlbik7CisJaWYgKCFvdXQpIHsKKwkJbWktPmlucHV0X2Vycm9yID0gLTE7CisJCXJldHVybiBlcnJvcigiY2Fubm90IGNvbnZlcnQgZnJvbSAlcyB0byAlcyIsCisJCQkgICAgIGNoYXJzZXQsIG1pLT5tZXRhaW5mb19jaGFyc2V0KTsKKwl9CisJc3RyYnVmX2F0dGFjaChsaW5lLCBvdXQsIG91dF9sZW4sIG91dF9sZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfaGVhZGVyKHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKml0KQoreworCWNoYXIgKmluLCAqZXAsICpjcDsKKwlzdHJ1Y3Qgc3RyYnVmIG91dGJ1ZiA9IFNUUkJVRl9JTklULCAqZGVjOworCXN0cnVjdCBzdHJidWYgY2hhcnNldF9xID0gU1RSQlVGX0lOSVQsIHBpZWNlYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGZvdW5kX2Vycm9yID0gMTsgLyogcGVzc2ltaXNtICovCisKKwlpbiA9IGl0LT5idWY7CisJd2hpbGUgKGluIC0gaXQtPmJ1ZiA8PSBpdC0+bGVuICYmIChlcCA9IHN0cnN0cihpbiwgIj0/IikpICE9IE5VTEwpIHsKKwkJaW50IGVuY29kaW5nOworCQlzdHJidWZfcmVzZXQoJmNoYXJzZXRfcSk7CisJCXN0cmJ1Zl9yZXNldCgmcGllY2VidWYpOworCisJCWlmIChpbiAhPSBlcCkgeworCQkJLyoKKwkJCSAqIFdlIGFyZSBhYm91dCB0byBwcm9jZXNzIGFuIGVuY29kZWQtd29yZAorCQkJICogdGhhdCBiZWdpbnMgYXQgZXAsIGJ1dCB0aGVyZSBpcyBzb21ldGhpbmcKKwkJCSAqIGJlZm9yZSB0aGUgZW5jb2RlZCB3b3JkLgorCQkJICovCisJCQljaGFyICpzY2FuOworCQkJZm9yIChzY2FuID0gaW47IHNjYW4gPCBlcDsgc2NhbisrKQorCQkJCWlmICghaXNzcGFjZSgqc2NhbikpCisJCQkJCWJyZWFrOworCisJCQlpZiAoc2NhbiAhPSBlcCB8fCBpbiA9PSBpdC0+YnVmKSB7CisJCQkJLyoKKwkJCQkgKiBXZSBzaG91bGQgbm90IGxvc2UgdGhhdCAic29tZXRoaW5nIiwKKwkJCQkgKiB1bmxlc3Mgd2UgaGF2ZSBqdXN0IHByb2Nlc3NlZCBhbgorCQkJCSAqIGVuY29kZWQtd29yZCwgYW5kIHRoZXJlIGlzIG9ubHkgTFdTCisJCQkJICogYmVmb3JlIHRoZSBvbmUgd2UgYXJlIGFib3V0IHRvIHByb2Nlc3MuCisJCQkJICovCisJCQkJc3RyYnVmX2FkZCgmb3V0YnVmLCBpbiwgZXAgLSBpbik7CisJCQl9CisJCX0KKwkJLyogRS5nLgorCQkgKiBlcCA6ICI9P2lzby0yMDIyLWpwP0I/R3lSLi4uPz0gZm9vIgorCQkgKiBlcCA6ICI9P0lTTy04ODU5LTE/UT9Gb289RkNiYXI/PSBiYXoiCisJCSAqLworCQllcCArPSAyOworCisJCWlmIChlcCAtIGl0LT5idWYgPj0gaXQtPmxlbiB8fCAhKGNwID0gc3RyY2hyKGVwLCAnPycpKSkKKwkJCWdvdG8gcmVsZWFzZV9yZXR1cm47CisKKwkJaWYgKGNwICsgMyAtIGl0LT5idWYgPiBpdC0+bGVuKQorCQkJZ290byByZWxlYXNlX3JldHVybjsKKwkJc3RyYnVmX2FkZCgmY2hhcnNldF9xLCBlcCwgY3AgLSBlcCk7CisKKwkJZW5jb2RpbmcgPSBjcFsxXTsKKwkJaWYgKCFlbmNvZGluZyB8fCBjcFsyXSAhPSAnPycpCisJCQlnb3RvIHJlbGVhc2VfcmV0dXJuOworCQllcCA9IHN0cnN0cihjcCArIDMsICI/PSIpOworCQlpZiAoIWVwKQorCQkJZ290byByZWxlYXNlX3JldHVybjsKKwkJc3RyYnVmX2FkZCgmcGllY2VidWYsIGNwICsgMywgZXAgLSBjcCAtIDMpOworCQlzd2l0Y2ggKHRvbG93ZXIoZW5jb2RpbmcpKSB7CisJCWRlZmF1bHQ6CisJCQlnb3RvIHJlbGVhc2VfcmV0dXJuOworCQljYXNlICdiJzoKKwkJCWRlYyA9IGRlY29kZV9iX3NlZ21lbnQoJnBpZWNlYnVmKTsKKwkJCWJyZWFrOworCQljYXNlICdxJzoKKwkJCWRlYyA9IGRlY29kZV9xX3NlZ21lbnQoJnBpZWNlYnVmLCAxKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb252ZXJ0X3RvX3V0ZjgobWksIGRlYywgY2hhcnNldF9xLmJ1ZikpCisJCQlnb3RvIHJlbGVhc2VfcmV0dXJuOworCisJCXN0cmJ1Zl9hZGRidWYoJm91dGJ1ZiwgZGVjKTsKKwkJc3RyYnVmX3JlbGVhc2UoZGVjKTsKKwkJZnJlZShkZWMpOworCQlpbiA9IGVwICsgMjsKKwl9CisJc3RyYnVmX2FkZHN0cigmb3V0YnVmLCBpbik7CisJc3RyYnVmX3Jlc2V0KGl0KTsKKwlzdHJidWZfYWRkYnVmKGl0LCAmb3V0YnVmKTsKKwlmb3VuZF9lcnJvciA9IDA7CityZWxlYXNlX3JldHVybjoKKwlzdHJidWZfcmVsZWFzZSgmb3V0YnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmY2hhcnNldF9xKTsKKwlzdHJidWZfcmVsZWFzZSgmcGllY2VidWYpOworCisJaWYgKGZvdW5kX2Vycm9yKQorCQltaS0+aW5wdXRfZXJyb3IgPSAtMTsKK30KKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiAibGluZSIgY29udGFpbnMgYSBoZWFkZXIgbWF0Y2hpbmcgImhkciIsIGluIHdoaWNoIGNhc2UgInZhbCIKKyAqIHdpbGwgY29udGFpbiB0aGUgdmFsdWUgb2YgdGhlIGhlYWRlciB3aXRoIGFueSBSRkMyMDQ3IEIgYW5kIFEgZW5jb2RpbmcKKyAqIHVud3JhcHBlZCwgYW5kIG9wdGlvbmFsbHkgbm9ybWFsaXplIHRoZSBtZXRhIGluZm9ybWF0aW9uIHRvIHV0ZjguCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfaGVhZGVyKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUsCisJCQljb25zdCBjaGFyICpoZHIsCisJCQlzdHJ1Y3QgbWFpbGluZm8gKm1pLAorCQkJc3RydWN0IHN0cmJ1ZiAqdmFsKQoreworCWNvbnN0IGNoYXIgKnZhbF9zdHI7CisKKwlpZiAoIXNraXBfaGVhZGVyKGxpbmUsIGhkciwgJnZhbF9zdHIpKQorCQlyZXR1cm4gMDsKKwlzdHJidWZfYWRkc3RyKHZhbCwgdmFsX3N0cik7CisJZGVjb2RlX2hlYWRlcihtaSwgdmFsKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjaGVja19oZWFkZXIoc3RydWN0IG1haWxpbmZvICptaSwKKwkJCWNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUsCisJCQlzdHJ1Y3Qgc3RyYnVmICpoZHJfZGF0YVtdLCBpbnQgb3ZlcndyaXRlKQoreworCWludCBpLCByZXQgPSAwOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCS8qIHNlYXJjaCBmb3IgdGhlIGludGVyZXN0aW5nIHBhcnRzICovCisJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspIHsKKwkJaWYgKCghaGRyX2RhdGFbaV0gfHwgb3ZlcndyaXRlKSAmJgorCQkgICAgcGFyc2VfaGVhZGVyKGxpbmUsIGhlYWRlcltpXSwgbWksICZzYikpIHsKKwkJCWhhbmRsZV9oZWFkZXIoJmhkcl9kYXRhW2ldLCAmc2IpOworCQkJcmV0ID0gMTsKKwkJCWdvdG8gY2hlY2tfaGVhZGVyX291dDsKKwkJfQorCX0KKworCS8qIENvbnRlbnQgc3R1ZmYgKi8KKwlpZiAocGFyc2VfaGVhZGVyKGxpbmUsICJDb250ZW50LVR5cGUiLCBtaSwgJnNiKSkgeworCQloYW5kbGVfY29udGVudF90eXBlKG1pLCAmc2IpOworCQlyZXQgPSAxOworCQlnb3RvIGNoZWNrX2hlYWRlcl9vdXQ7CisJfQorCWlmIChwYXJzZV9oZWFkZXIobGluZSwgIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmciLCBtaSwgJnNiKSkgeworCQloYW5kbGVfY29udGVudF90cmFuc2Zlcl9lbmNvZGluZyhtaSwgJnNiKTsKKwkJcmV0ID0gMTsKKwkJZ290byBjaGVja19oZWFkZXJfb3V0OworCX0KKwlpZiAocGFyc2VfaGVhZGVyKGxpbmUsICJNZXNzYWdlLUlkIiwgbWksICZzYikpIHsKKwkJaWYgKG1pLT5hZGRfbWVzc2FnZV9pZCkKKwkJCW1pLT5tZXNzYWdlX2lkID0gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCQlyZXQgPSAxOworCQlnb3RvIGNoZWNrX2hlYWRlcl9vdXQ7CisJfQorCitjaGVja19oZWFkZXJfb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJldHVybnMgMSBpZiB0aGUgZ2l2ZW4gbGluZSBvciBhbnkgbGluZSBiZWdpbm5pbmcgd2l0aCB0aGUgZ2l2ZW4gbGluZSBpcyBhbgorICogaW4tYm9keSBoZWFkZXIgKHRoYXQgaXMsIGNoZWNrX2hlYWRlciB3aWxsIHN1Y2NlZWQgd2hlbiBwYXNzZWQKKyAqIG1pLT5zX2hkcl9kYXRhKS4KKyAqLworc3RhdGljIGludCBpc19pbmJvZHlfaGVhZGVyKGNvbnN0IHN0cnVjdCBtYWlsaW5mbyAqbWksCisJCQkgICAgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICp2YWw7CisJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspCisJCWlmICghbWktPnNfaGRyX2RhdGFbaV0gJiYgc2tpcF9oZWFkZXIobGluZSwgaGVhZGVyW2ldLCAmdmFsKSkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfdHJhbnNmZXJfZW5jb2Rpbmcoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpyZXQ7CisKKwlzd2l0Y2ggKG1pLT50cmFuc2Zlcl9lbmNvZGluZykgeworCWNhc2UgVEVfUVA6CisJCXJldCA9IGRlY29kZV9xX3NlZ21lbnQobGluZSwgMCk7CisJCWJyZWFrOworCWNhc2UgVEVfQkFTRTY0OgorCQlyZXQgPSBkZWNvZGVfYl9zZWdtZW50KGxpbmUpOworCQlicmVhazsKKwljYXNlIFRFX0RPTlRDQVJFOgorCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJc3RyYnVmX3Jlc2V0KGxpbmUpOworCXN0cmJ1Zl9hZGRidWYobGluZSwgcmV0KTsKKwlzdHJidWZfcmVsZWFzZShyZXQpOworCWZyZWUocmV0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGF0Y2hicmVhayhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXNpemVfdCBpOworCisJLyogQmVnaW5uaW5nIG9mIGEgImRpZmYgLSIgaGVhZGVyPyAqLworCWlmIChzdGFydHNfd2l0aChsaW5lLT5idWYsICJkaWZmIC0iKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBDVlMgIkluZGV4OiAiIGxpbmU/ICovCisJaWYgKHN0YXJ0c193aXRoKGxpbmUtPmJ1ZiwgIkluZGV4OiAiKSkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqICItLS0gPGZpbGVuYW1lPiIgc3RhcnRzIHBhdGNoZXMgd2l0aG91dCBoZWFkZXJzCisJICogIi0tLTxzcD4qIiBpcyBhIG1hbnVhbCBzZXBhcmF0b3IKKwkgKi8KKwlpZiAobGluZS0+bGVuIDwgNCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RhcnRzX3dpdGgobGluZS0+YnVmLCAiLS0tIikpIHsKKwkJLyogc3BhY2UgZm9sbG93ZWQgYnkgYSBmaWxlbmFtZT8gKi8KKwkJaWYgKGxpbmUtPmJ1ZlszXSA9PSAnICcgJiYgIWlzc3BhY2UobGluZS0+YnVmWzRdKSkKKwkJCXJldHVybiAxOworCQkvKiBKdXN0IHdoaXRlc3BhY2U/ICovCisJCWZvciAoaSA9IDM7IGkgPCBsaW5lLT5sZW47IGkrKykgeworCQkJdW5zaWduZWQgY2hhciBjID0gbGluZS0+YnVmW2ldOworCQkJaWYgKGMgPT0gJ1xuJykKKwkJCQlyZXR1cm4gMTsKKwkJCWlmICghaXNzcGFjZShjKSkKKwkJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfc2Npc3NvcnNfbGluZShjb25zdCBjaGFyICpsaW5lKQoreworCWNvbnN0IGNoYXIgKmM7CisJaW50IHNjaXNzb3JzID0gMCwgZ2FwID0gMDsKKwljb25zdCBjaGFyICpmaXJzdF9ub25ibGFuayA9IE5VTEwsICpsYXN0X25vbmJsYW5rID0gTlVMTDsKKwlpbnQgdmlzaWJsZSwgcGVyZm9yYXRpb24gPSAwLCBpbl9wZXJmb3JhdGlvbiA9IDA7CisKKwlmb3IgKGMgPSBsaW5lOyAqYzsgYysrKSB7CisJCWlmIChpc3NwYWNlKCpjKSkgeworCQkJaWYgKGluX3BlcmZvcmF0aW9uKSB7CisJCQkJcGVyZm9yYXRpb24rKzsKKwkJCQlnYXArKzsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWxhc3Rfbm9uYmxhbmsgPSBjOworCQlpZiAoZmlyc3Rfbm9uYmxhbmsgPT0gTlVMTCkKKwkJCWZpcnN0X25vbmJsYW5rID0gYzsKKwkJaWYgKCpjID09ICctJykgeworCQkJaW5fcGVyZm9yYXRpb24gPSAxOworCQkJcGVyZm9yYXRpb24rKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgoIW1lbWNtcChjLCAiPjgiLCAyKSB8fCAhbWVtY21wKGMsICI4PCIsIDIpIHx8CisJCSAgICAgIW1lbWNtcChjLCAiPiUiLCAyKSB8fCAhbWVtY21wKGMsICIlPCIsIDIpKSkgeworCQkJaW5fcGVyZm9yYXRpb24gPSAxOworCQkJcGVyZm9yYXRpb24gKz0gMjsKKwkJCXNjaXNzb3JzICs9IDI7CisJCQljKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpbl9wZXJmb3JhdGlvbiA9IDA7CisJfQorCisJLyoKKwkgKiBUaGUgbWFyayBtdXN0IGJlIGF0IGxlYXN0IDggYnl0ZXMgbG9uZyAoZS5nLiAiLS0gPjggLS0iKS4KKwkgKiBFdmVuIHRob3VnaCB0aGVyZSBjYW4gYmUgYXJiaXRyYXJ5IGNydWZ0IG9uIHRoZSBzYW1lIGxpbmUKKwkgKiAoZS5nLiAiY3V0IGhlcmUiKSwgaW4gb3JkZXIgdG8gYXZvaWQgbWlzaWRlbnRpZmljYXRpb24sIHRoZQorCSAqIHBlcmZvcmF0aW9uIG11c3Qgb2NjdXB5IG1vcmUgdGhhbiBhIHRoaXJkIG9mIHRoZSB2aXNpYmxlCisJICogd2lkdGggb2YgdGhlIGxpbmUsIGFuZCBkYXNoZXMgYW5kIHNjaXNzb3JzIG11c3Qgb2NjdXB5IG1vcmUKKwkgKiB0aGFuIGhhbGYgb2YgdGhlIHBlcmZvcmF0aW9uLgorCSAqLworCisJaWYgKGZpcnN0X25vbmJsYW5rICYmIGxhc3Rfbm9uYmxhbmspCisJCXZpc2libGUgPSBsYXN0X25vbmJsYW5rIC0gZmlyc3Rfbm9uYmxhbmsgKyAxOworCWVsc2UKKwkJdmlzaWJsZSA9IDA7CisJcmV0dXJuIChzY2lzc29ycyAmJiA4IDw9IHZpc2libGUgJiYKKwkJdmlzaWJsZSA8IHBlcmZvcmF0aW9uICogMyAmJgorCQlnYXAgKiAyIDwgcGVyZm9yYXRpb24pOworfQorCitzdGF0aWMgdm9pZCBmbHVzaF9pbmJvZHlfaGVhZGVyX2FjY3VtKHN0cnVjdCBtYWlsaW5mbyAqbWkpCit7CisJaWYgKCFtaS0+aW5ib2R5X2hlYWRlcl9hY2N1bS5sZW4pCisJCXJldHVybjsKKwlpZiAoIWNoZWNrX2hlYWRlcihtaSwgJm1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtLCBtaS0+c19oZHJfZGF0YSwgMCkpCisJCUJVRygiaW5ib2R5X2hlYWRlcl9hY2N1bSwgaWYgbm90IGVtcHR5LCBtdXN0IGFsd2F5cyBjb250YWluIGEgdmFsaWQgaW4tYm9keSBoZWFkZXIiKTsKKwlzdHJidWZfcmVzZXQoJm1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtKTsKK30KKworc3RhdGljIGludCBjaGVja19pbmJvZHlfaGVhZGVyKHN0cnVjdCBtYWlsaW5mbyAqbWksIGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJaWYgKG1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtLmxlbiAmJgorCSAgICAobGluZS0+YnVmWzBdID09ICcgJyB8fCBsaW5lLT5idWZbMF0gPT0gJ1x0JykpIHsKKwkJaWYgKG1pLT51c2Vfc2Npc3NvcnMgJiYgaXNfc2Npc3NvcnNfbGluZShsaW5lLT5idWYpKSB7CisJCQkvKgorCQkJICogVGhpcyBpcyBhIHNjaXNzb3JzIGxpbmU7IGRvIG5vdCBjb25zaWRlciB0aGlzIGxpbmUKKwkJCSAqIGFzIGEgaGVhZGVyIGNvbnRpbnVhdGlvbiBsaW5lLgorCQkJICovCisJCQlmbHVzaF9pbmJvZHlfaGVhZGVyX2FjY3VtKG1pKTsKKwkJCXJldHVybiAwOworCQl9CisJCXN0cmJ1Zl9zdHJpcF9zdWZmaXgoJm1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtLCAiXG4iKTsKKwkJc3RyYnVmX2FkZGJ1ZigmbWktPmluYm9keV9oZWFkZXJfYWNjdW0sIGxpbmUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmbHVzaF9pbmJvZHlfaGVhZGVyX2FjY3VtKG1pKTsKKworCWlmIChzdGFydHNfd2l0aChsaW5lLT5idWYsICI+RnJvbSIpICYmIGlzc3BhY2UobGluZS0+YnVmWzVdKSkKKwkJcmV0dXJuIGlzX2Zvcm1hdF9wYXRjaF9zZXBhcmF0b3IobGluZS0+YnVmICsgMSwgbGluZS0+bGVuIC0gMSk7CisJaWYgKHN0YXJ0c193aXRoKGxpbmUtPmJ1ZiwgIltQQVRDSF0iKSAmJiBpc3NwYWNlKGxpbmUtPmJ1Zls3XSkpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKQorCQkJaWYgKCFzdHJjbXAoIlN1YmplY3QiLCBoZWFkZXJbaV0pKSB7CisJCQkJaGFuZGxlX2hlYWRlcigmbWktPnNfaGRyX2RhdGFbaV0sIGxpbmUpOworCQkJCXJldHVybiAxOworCQkJfQorCQlyZXR1cm4gMDsKKwl9CisJaWYgKGlzX2luYm9keV9oZWFkZXIobWksIGxpbmUpKSB7CisJCXN0cmJ1Zl9hZGRidWYoJm1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtLCBsaW5lKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9jb21taXRfbXNnKHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJYXNzZXJ0KCFtaS0+ZmlsdGVyX3N0YWdlKTsKKworCWlmIChtaS0+aGVhZGVyX3N0YWdlKSB7CisJCWlmICghbGluZS0+bGVuIHx8IChsaW5lLT5sZW4gPT0gMSAmJiBsaW5lLT5idWZbMF0gPT0gJ1xuJykpIHsKKwkJCWlmIChtaS0+aW5ib2R5X2hlYWRlcl9hY2N1bS5sZW4pIHsKKwkJCQlmbHVzaF9pbmJvZHlfaGVhZGVyX2FjY3VtKG1pKTsKKwkJCQltaS0+aGVhZGVyX3N0YWdlID0gMDsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKG1pLT51c2VfaW5ib2R5X2hlYWRlcnMgJiYgbWktPmhlYWRlcl9zdGFnZSkgeworCQltaS0+aGVhZGVyX3N0YWdlID0gY2hlY2tfaW5ib2R5X2hlYWRlcihtaSwgbGluZSk7CisJCWlmIChtaS0+aGVhZGVyX3N0YWdlKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlCisJCS8qIE9ubHkgdHJpbSB0aGUgZmlyc3QgKGJsYW5rKSBsaW5lIG9mIHRoZSBjb21taXQgbWVzc2FnZQorCQkgKiB3aGVuIGlnbm9yaW5nIGluLWJvZHkgaGVhZGVycy4KKwkJICovCisJCW1pLT5oZWFkZXJfc3RhZ2UgPSAwOworCisJLyogbm9ybWFsaXplIHRoZSBsb2cgbWVzc2FnZSB0byBVVEYtOC4gKi8KKwlpZiAoY29udmVydF90b191dGY4KG1pLCBsaW5lLCBtaS0+Y2hhcnNldC5idWYpKQorCQlyZXR1cm4gMDsgLyogbWktPmlucHV0X2Vycm9yIGFscmVhZHkgc2V0ICovCisKKwlpZiAobWktPnVzZV9zY2lzc29ycyAmJiBpc19zY2lzc29yc19saW5lKGxpbmUtPmJ1ZikpIHsKKwkJaW50IGk7CisKKwkJc3RyYnVmX3NldGxlbigmbWktPmxvZ19tZXNzYWdlLCAwKTsKKwkJbWktPmhlYWRlcl9zdGFnZSA9IDE7CisKKwkJLyoKKwkJICogV2UgbWF5IGhhdmUgYWxyZWFkeSByZWFkICJzZWNvbmRhcnkgaGVhZGVycyI7IHB1cmdlCisJCSAqIHRoZW0gdG8gZ2l2ZSBvdXJzZWx2ZXMgYSBjbGVhbiByZXN0YXJ0LgorCQkgKi8KKwkJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspIHsKKwkJCWlmIChtaS0+c19oZHJfZGF0YVtpXSkKKwkJCQlzdHJidWZfcmVsZWFzZShtaS0+c19oZHJfZGF0YVtpXSk7CisJCQltaS0+c19oZHJfZGF0YVtpXSA9IE5VTEw7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHBhdGNoYnJlYWsobGluZSkpIHsKKwkJaWYgKG1pLT5tZXNzYWdlX2lkKQorCQkJc3RyYnVmX2FkZGYoJm1pLT5sb2dfbWVzc2FnZSwKKwkJCQkgICAgIk1lc3NhZ2UtSWQ6ICVzXG4iLCBtaS0+bWVzc2FnZV9pZCk7CisJCXJldHVybiAxOworCX0KKworCXN0cmJ1Zl9hZGRidWYoJm1pLT5sb2dfbWVzc2FnZSwgbGluZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9wYXRjaChzdHJ1Y3QgbWFpbGluZm8gKm1pLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCWZ3cml0ZShsaW5lLT5idWYsIDEsIGxpbmUtPmxlbiwgbWktPnBhdGNoZmlsZSk7CisJbWktPnBhdGNoX2xpbmVzKys7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9maWx0ZXIoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzd2l0Y2ggKG1pLT5maWx0ZXJfc3RhZ2UpIHsKKwljYXNlIDA6CisJCWlmICghaGFuZGxlX2NvbW1pdF9tc2cobWksIGxpbmUpKQorCQkJYnJlYWs7CisJCW1pLT5maWx0ZXJfc3RhZ2UrKzsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIDE6CisJCWhhbmRsZV9wYXRjaChtaSwgbGluZSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBpc19yZmMyODIyX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCS8qCisJICogVGhlIHNlY3Rpb24gdGhhdCBkZWZpbmVzIHRoZSBsb29zZXN0IHBvc3NpYmxlCisJICogZmllbGQgbmFtZSBpcyAiMy42LjggT3B0aW9uYWwgZmllbGRzIi4KKwkgKgorCSAqIG9wdGlvbmFsLWZpZWxkID0gZmllbGQtbmFtZSAiOiIgdW5zdHJ1Y3R1cmVkIENSTEYKKwkgKiBmaWVsZC1uYW1lID0gMSpmdGV4dAorCSAqIGZ0ZXh0ID0gJWQzMy01NyAvICU1OS0xMjYKKwkgKi8KKwlpbnQgY2g7CisJY2hhciAqY3AgPSBsaW5lLT5idWY7CisKKwkvKiBDb3VudCBtYm94IEZyb20gaGVhZGVycyBhcyBoZWFkZXJzICovCisJaWYgKHN0YXJ0c193aXRoKGNwLCAiRnJvbSAiKSB8fCBzdGFydHNfd2l0aChjcCwgIj5Gcm9tICIpKQorCQlyZXR1cm4gMTsKKworCXdoaWxlICgoY2ggPSAqY3ArKykpIHsKKwkJaWYgKGNoID09ICc6JykKKwkJCXJldHVybiAxOworCQlpZiAoKDMzIDw9IGNoICYmIGNoIDw9IDU3KSB8fAorCQkgICAgKDU5IDw9IGNoICYmIGNoIDw9IDEyNikpCisJCQljb250aW51ZTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfb25lX2hlYWRlcl9saW5lKHN0cnVjdCBzdHJidWYgKmxpbmUsIEZJTEUgKmluKQoreworCXN0cnVjdCBzdHJidWYgY29udGludWF0aW9uID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBHZXQgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGxpbmUuICovCisJaWYgKHN0cmJ1Zl9nZXRsaW5lX2xmKGxpbmUsIGluKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElzIGl0IGFuIGVtcHR5IGxpbmUgb3Igbm90IGEgdmFsaWQgcmZjMjgyMiBoZWFkZXI/CisJICogSWYgc28sIHN0b3AgaGVyZSwgYW5kIHJldHVybiBmYWxzZSAoIm5vdCBhIGhlYWRlciIpCisJICovCisJc3RyYnVmX3J0cmltKGxpbmUpOworCWlmICghbGluZS0+bGVuIHx8ICFpc19yZmMyODIyX2hlYWRlcihsaW5lKSkgeworCQkvKiBSZS1hZGQgdGhlIG5ld2xpbmUgKi8KKwkJc3RyYnVmX2FkZGNoKGxpbmUsICdcbicpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE5vdyB3ZSBuZWVkIHRvIGVhdCBhbGwgdGhlIGNvbnRpbnVhdGlvbiBsaW5lcy4uCisJICogWXVjaywgMjgyMiBoZWFkZXIgImZvbGRpbmciCisJICovCisJZm9yICg7OykgeworCQlpbnQgcGVlazsKKworCQlwZWVrID0gZmdldGMoaW4pOworCQlpZiAocGVlayA9PSBFT0YpCisJCQlicmVhazsKKwkJdW5nZXRjKHBlZWssIGluKTsKKwkJaWYgKHBlZWsgIT0gJyAnICYmIHBlZWsgIT0gJ1x0JykKKwkJCWJyZWFrOworCQlpZiAoc3RyYnVmX2dldGxpbmVfbGYoJmNvbnRpbnVhdGlvbiwgaW4pKQorCQkJYnJlYWs7CisJCWNvbnRpbnVhdGlvbi5idWZbMF0gPSAnICc7CisJCXN0cmJ1Zl9ydHJpbSgmY29udGludWF0aW9uKTsKKwkJc3RyYnVmX2FkZGJ1ZihsaW5lLCAmY29udGludWF0aW9uKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmNvbnRpbnVhdGlvbik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmaW5kX2JvdW5kYXJ5KHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJd2hpbGUgKCFzdHJidWZfZ2V0bGluZV9sZihsaW5lLCBtaS0+aW5wdXQpKSB7CisJCWlmICgqKG1pLT5jb250ZW50X3RvcCkgJiYgaXNfbXVsdGlwYXJ0X2JvdW5kYXJ5KG1pLCBsaW5lKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVfYm91bmRhcnkoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG5ld2xpbmUgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRjaCgmbmV3bGluZSwgJ1xuJyk7CithZ2FpbjoKKwlpZiAobGluZS0+bGVuID49ICgqKG1pLT5jb250ZW50X3RvcCkpLT5sZW4gKyAyICYmCisJICAgICFtZW1jbXAobGluZS0+YnVmICsgKCoobWktPmNvbnRlbnRfdG9wKSktPmxlbiwgIi0tIiwgMikpIHsKKwkJLyogd2UgaGl0IGFuIGVuZCBib3VuZGFyeSAqLworCQkvKiBwb3AgdGhlIGN1cnJlbnQgYm91bmRhcnkgb2ZmIHRoZSBzdGFjayAqLworCQlzdHJidWZfcmVsZWFzZSgqKG1pLT5jb250ZW50X3RvcCkpOworCQlGUkVFX0FORF9OVUxMKCoobWktPmNvbnRlbnRfdG9wKSk7CisKKwkJLyogdGVjaG5pY2FsbHkgd29uJ3QgaGFwcGVuIGFzIGlzX211bHRpcGFydF9ib3VuZGFyeSgpCisJCSAgIHdpbGwgZmFpbCBmaXJzdC4gIEJ1dCBqdXN0IGluIGNhc2UuLgorCQkgKi8KKwkJaWYgKC0tbWktPmNvbnRlbnRfdG9wIDwgbWktPmNvbnRlbnQpIHsKKwkJCWVycm9yKCJEZXRlY3RlZCBtaXNtYXRjaGVkIGJvdW5kYXJpZXMsIGNhbid0IHJlY292ZXIiKTsKKwkJCW1pLT5pbnB1dF9lcnJvciA9IC0xOworCQkJbWktPmNvbnRlbnRfdG9wID0gbWktPmNvbnRlbnQ7CisJCQlzdHJidWZfcmVsZWFzZSgmbmV3bGluZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQloYW5kbGVfZmlsdGVyKG1pLCAmbmV3bGluZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZuZXdsaW5lKTsKKwkJaWYgKG1pLT5pbnB1dF9lcnJvcikKKwkJCXJldHVybiAwOworCisJCS8qIHNraXAgdG8gdGhlIG5leHQgYm91bmRhcnkgKi8KKwkJaWYgKCFmaW5kX2JvdW5kYXJ5KG1pLCBsaW5lKSkKKwkJCXJldHVybiAwOworCQlnb3RvIGFnYWluOworCX0KKworCS8qIHNldCBzb21lIGRlZmF1bHRzICovCisJbWktPnRyYW5zZmVyX2VuY29kaW5nID0gVEVfRE9OVENBUkU7CisJc3RyYnVmX3Jlc2V0KCZtaS0+Y2hhcnNldCk7CisKKwkvKiBzbHVycCBpbiB0aGlzIHNlY3Rpb24ncyBpbmZvICovCisJd2hpbGUgKHJlYWRfb25lX2hlYWRlcl9saW5lKGxpbmUsIG1pLT5pbnB1dCkpCisJCWNoZWNrX2hlYWRlcihtaSwgbGluZSwgbWktPnBfaGRyX2RhdGEsIDApOworCisJc3RyYnVmX3JlbGVhc2UoJm5ld2xpbmUpOworCS8qIHJlcGxlbmlzaCBsaW5lICovCisJaWYgKHN0cmJ1Zl9nZXRsaW5lX2xmKGxpbmUsIG1pLT5pbnB1dCkpCisJCXJldHVybiAwOworCXN0cmJ1Zl9hZGRjaChsaW5lLCAnXG4nKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2ZpbHRlcl9mbG93ZWQoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSwKKwkJCQkgc3RydWN0IHN0cmJ1ZiAqcHJldikKK3sKKwlzaXplX3QgbGVuID0gbGluZS0+bGVuOworCWNvbnN0IGNoYXIgKnJlc3Q7CisKKwlpZiAoIW1pLT5mb3JtYXRfZmxvd2VkKSB7CisJCWhhbmRsZV9maWx0ZXIobWksIGxpbmUpOworCQlyZXR1cm47CisJfQorCisJaWYgKGxpbmUtPmJ1ZltsZW4gLSAxXSA9PSAnXG4nKSB7CisJCWxlbi0tOworCQlpZiAobGVuICYmIGxpbmUtPmJ1ZltsZW4gLSAxXSA9PSAnXHInKQorCQkJbGVuLS07CisJfQorCisJLyogS2VlcCBzaWduYXR1cmUgc2VwYXJhdG9yIGFzLWlzLiAqLworCWlmIChza2lwX3ByZWZpeChsaW5lLT5idWYsICItLSAiLCAmcmVzdCkgJiYgcmVzdCAtIGxpbmUtPmJ1ZiA9PSBsZW4pIHsKKwkJaWYgKHByZXYtPmxlbikgeworCQkJaGFuZGxlX2ZpbHRlcihtaSwgcHJldik7CisJCQlzdHJidWZfcmVzZXQocHJldik7CisJCX0KKwkJaGFuZGxlX2ZpbHRlcihtaSwgbGluZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBVbnN0dWZmIHNwYWNlLXN0dWZmZWQgbGluZS4gKi8KKwlpZiAobGVuICYmIGxpbmUtPmJ1ZlswXSA9PSAnICcpIHsKKwkJc3RyYnVmX3JlbW92ZShsaW5lLCAwLCAxKTsKKwkJbGVuLS07CisJfQorCisJLyogU2F2ZSBmbG93ZWQgbGluZSBmb3IgbGF0ZXIsIGJ1dCB3aXRob3V0IHRoZSBzb2Z0IGxpbmUgYnJlYWsuICovCisJaWYgKGxlbiAmJiBsaW5lLT5idWZbbGVuIC0gMV0gPT0gJyAnKSB7CisJCXN0cmJ1Zl9hZGQocHJldiwgbGluZS0+YnVmLCBsZW4gLSAhIW1pLT5kZWxzcCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBQcmVwZW5kIGFueSBwcmV2aW91cyBwYXJ0aWFsIGxpbmVzICovCisJc3RyYnVmX2luc2VydChsaW5lLCAwLCBwcmV2LT5idWYsIHByZXYtPmxlbik7CisJc3RyYnVmX3Jlc2V0KHByZXYpOworCisJaGFuZGxlX2ZpbHRlcihtaSwgbGluZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9ib2R5KHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiBwcmV2ID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBTa2lwIHVwIHRvIHRoZSBmaXJzdCBib3VuZGFyeSAqLworCWlmICgqKG1pLT5jb250ZW50X3RvcCkpIHsKKwkJaWYgKCFmaW5kX2JvdW5kYXJ5KG1pLCBsaW5lKSkKKwkJCWdvdG8gaGFuZGxlX2JvZHlfb3V0OworCX0KKworCWRvIHsKKwkJLyogcHJvY2VzcyBhbnkgYm91bmRhcnkgbGluZXMgKi8KKwkJaWYgKCoobWktPmNvbnRlbnRfdG9wKSAmJiBpc19tdWx0aXBhcnRfYm91bmRhcnkobWksIGxpbmUpKSB7CisJCQkvKiBmbHVzaCBhbnkgbGVmdG92ZXIgKi8KKwkJCWlmIChwcmV2LmxlbikgeworCQkJCWhhbmRsZV9maWx0ZXIobWksICZwcmV2KTsKKwkJCQlzdHJidWZfcmVzZXQoJnByZXYpOworCQkJfQorCQkJaWYgKCFoYW5kbGVfYm91bmRhcnkobWksIGxpbmUpKQorCQkJCWdvdG8gaGFuZGxlX2JvZHlfb3V0OworCQl9CisKKwkJLyogVW53cmFwIHRyYW5zZmVyIGVuY29kaW5nICovCisJCWRlY29kZV90cmFuc2Zlcl9lbmNvZGluZyhtaSwgbGluZSk7CisKKwkJc3dpdGNoIChtaS0+dHJhbnNmZXJfZW5jb2RpbmcpIHsKKwkJY2FzZSBURV9CQVNFNjQ6CisJCWNhc2UgVEVfUVA6CisJCXsKKwkJCXN0cnVjdCBzdHJidWYgKipsaW5lcywgKippdCwgKnNiOworCisJCQkvKiBQcmVwZW5kIGFueSBwcmV2aW91cyBwYXJ0aWFsIGxpbmVzICovCisJCQlzdHJidWZfaW5zZXJ0KGxpbmUsIDAsIHByZXYuYnVmLCBwcmV2Lmxlbik7CisJCQlzdHJidWZfcmVzZXQoJnByZXYpOworCisJCQkvKgorCQkJICogVGhpcyBpcyBhIGRlY29kZWQgbGluZSB0aGF0IG1heSBjb250YWluCisJCQkgKiBtdWx0aXBsZSBuZXcgbGluZXMuICBQYXNzIG9ubHkgb25lIGNodW5rCisJCQkgKiBhdCBhIHRpbWUgdG8gaGFuZGxlX2ZpbHRlcigpCisJCQkgKi8KKwkJCWxpbmVzID0gc3RyYnVmX3NwbGl0KGxpbmUsICdcbicpOworCQkJZm9yIChpdCA9IGxpbmVzOyAoc2IgPSAqaXQpOyBpdCsrKSB7CisJCQkJaWYgKCooaXQgKyAxKSA9PSBOVUxMKSAvKiBUaGUgbGFzdCBsaW5lICovCisJCQkJCWlmIChzYi0+YnVmW3NiLT5sZW4gLSAxXSAhPSAnXG4nKSB7CisJCQkJCQkvKiBQYXJ0aWFsIGxpbmUsIHNhdmUgaXQgZm9yIGxhdGVyLiAqLworCQkJCQkJc3RyYnVmX2FkZGJ1ZigmcHJldiwgc2IpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQloYW5kbGVfZmlsdGVyX2Zsb3dlZChtaSwgc2IsICZwcmV2KTsKKwkJCX0KKwkJCS8qCisJCQkgKiBUaGUgcGFydGlhbCBjaHVuayBpcyBzYXZlZCBpbiAicHJldiIgYW5kIHdpbGwgYmUKKwkJCSAqIGFwcGVuZGVkIGJ5IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiByZWFkX2xpbmVfd2l0aF9udWwoKS4KKwkJCSAqLworCQkJc3RyYnVmX2xpc3RfZnJlZShsaW5lcyk7CisJCQlicmVhazsKKwkJfQorCQlkZWZhdWx0OgorCQkJaGFuZGxlX2ZpbHRlcl9mbG93ZWQobWksIGxpbmUsICZwcmV2KTsKKwkJfQorCisJCWlmIChtaS0+aW5wdXRfZXJyb3IpCisJCQlicmVhazsKKwl9IHdoaWxlICghc3RyYnVmX2dldHdob2xlbGluZShsaW5lLCBtaS0+aW5wdXQsICdcbicpKTsKKworCWlmIChwcmV2LmxlbikKKwkJaGFuZGxlX2ZpbHRlcihtaSwgJnByZXYpOworCisJZmx1c2hfaW5ib2R5X2hlYWRlcl9hY2N1bShtaSk7CisKK2hhbmRsZV9ib2R5X291dDoKKwlzdHJidWZfcmVsZWFzZSgmcHJldik7Cit9CisKK3N0YXRpYyB2b2lkIG91dHB1dF9oZWFkZXJfbGluZXMoRklMRSAqZm91dCwgY29uc3QgY2hhciAqaGRyLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpkYXRhKQoreworCWNvbnN0IGNoYXIgKnNwID0gZGF0YS0+YnVmOworCXdoaWxlICgxKSB7CisJCWNoYXIgKmVwID0gc3RyY2hyKHNwLCAnXG4nKTsKKwkJaW50IGxlbjsKKwkJaWYgKCFlcCkKKwkJCWxlbiA9IHN0cmxlbihzcCk7CisJCWVsc2UKKwkJCWxlbiA9IGVwIC0gc3A7CisJCWZwcmludGYoZm91dCwgIiVzOiAlLipzXG4iLCBoZHIsIGxlbiwgc3ApOworCQlpZiAoIWVwKQorCQkJYnJlYWs7CisJCXNwID0gZXAgKyAxOworCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2luZm8oc3RydWN0IG1haWxpbmZvICptaSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpoZHI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBoZWFkZXJbaV07IGkrKykgeworCQkvKiBvbmx5IHByaW50IGluYm9keSBoZWFkZXJzIGlmIHdlIG91dHB1dCBhIHBhdGNoIGZpbGUgKi8KKwkJaWYgKG1pLT5wYXRjaF9saW5lcyAmJiBtaS0+c19oZHJfZGF0YVtpXSkKKwkJCWhkciA9IG1pLT5zX2hkcl9kYXRhW2ldOworCQllbHNlIGlmIChtaS0+cF9oZHJfZGF0YVtpXSkKKwkJCWhkciA9IG1pLT5wX2hkcl9kYXRhW2ldOworCQllbHNlCisJCQljb250aW51ZTsKKworCQlpZiAobWVtY2hyKGhkci0+YnVmLCAnXDAnLCBoZHItPmxlbikpIHsKKwkJCWVycm9yKCJhIE5VTCBieXRlIGluICclcycgaXMgbm90IGFsbG93ZWQuIiwgaGVhZGVyW2ldKTsKKwkJCW1pLT5pbnB1dF9lcnJvciA9IC0xOworCQl9CisKKwkJaWYgKCFzdHJjbXAoaGVhZGVyW2ldLCAiU3ViamVjdCIpKSB7CisJCQlpZiAoIW1pLT5rZWVwX3N1YmplY3QpIHsKKwkJCQljbGVhbnVwX3N1YmplY3QobWksIGhkcik7CisJCQkJY2xlYW51cF9zcGFjZShoZHIpOworCQkJfQorCQkJb3V0cHV0X2hlYWRlcl9saW5lcyhtaS0+b3V0cHV0LCAiU3ViamVjdCIsIGhkcik7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChoZWFkZXJbaV0sICJGcm9tIikpIHsKKwkJCWNsZWFudXBfc3BhY2UoaGRyKTsKKwkJCWhhbmRsZV9mcm9tKG1pLCBoZHIpOworCQkJZnByaW50ZihtaS0+b3V0cHV0LCAiQXV0aG9yOiAlc1xuIiwgbWktPm5hbWUuYnVmKTsKKwkJCWZwcmludGYobWktPm91dHB1dCwgIkVtYWlsOiAlc1xuIiwgbWktPmVtYWlsLmJ1Zik7CisJCX0gZWxzZSB7CisJCQljbGVhbnVwX3NwYWNlKGhkcik7CisJCQlmcHJpbnRmKG1pLT5vdXRwdXQsICIlczogJXNcbiIsIGhlYWRlcltpXSwgaGRyLT5idWYpOworCQl9CisJfQorCWZwcmludGYobWktPm91dHB1dCwgIlxuIik7Cit9CisKK2ludCBtYWlsaW5mbyhzdHJ1Y3QgbWFpbGluZm8gKm1pLCBjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKnBhdGNoKQoreworCUZJTEUgKmNtaXRtc2c7CisJaW50IHBlZWs7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwljbWl0bXNnID0gZm9wZW4obXNnLCAidyIpOworCWlmICghY21pdG1zZykgeworCQlwZXJyb3IobXNnKTsKKwkJcmV0dXJuIC0xOworCX0KKwltaS0+cGF0Y2hmaWxlID0gZm9wZW4ocGF0Y2gsICJ3Iik7CisJaWYgKCFtaS0+cGF0Y2hmaWxlKSB7CisJCXBlcnJvcihwYXRjaCk7CisJCWZjbG9zZShjbWl0bXNnKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1pLT5wX2hkcl9kYXRhID0geGNhbGxvYyhNQVhfSERSX1BBUlNFRCwgc2l6ZW9mKCoobWktPnBfaGRyX2RhdGEpKSk7CisJbWktPnNfaGRyX2RhdGEgPSB4Y2FsbG9jKE1BWF9IRFJfUEFSU0VELCBzaXplb2YoKihtaS0+c19oZHJfZGF0YSkpKTsKKworCWRvIHsKKwkJcGVlayA9IGZnZXRjKG1pLT5pbnB1dCk7CisJCWlmIChwZWVrID09IEVPRikgeworCQkJZmNsb3NlKGNtaXRtc2cpOworCQkJcmV0dXJuIGVycm9yKCJlbXB0eSBwYXRjaDogJyVzJyIsIHBhdGNoKTsKKwkJfQorCX0gd2hpbGUgKGlzc3BhY2UocGVlaykpOworCXVuZ2V0YyhwZWVrLCBtaS0+aW5wdXQpOworCisJLyogcHJvY2VzcyB0aGUgZW1haWwgaGVhZGVyICovCisJd2hpbGUgKHJlYWRfb25lX2hlYWRlcl9saW5lKCZsaW5lLCBtaS0+aW5wdXQpKQorCQljaGVja19oZWFkZXIobWksICZsaW5lLCBtaS0+cF9oZHJfZGF0YSwgMSk7CisKKwloYW5kbGVfYm9keShtaSwgJmxpbmUpOworCWZ3cml0ZShtaS0+bG9nX21lc3NhZ2UuYnVmLCAxLCBtaS0+bG9nX21lc3NhZ2UubGVuLCBjbWl0bXNnKTsKKwlmY2xvc2UoY21pdG1zZyk7CisJZmNsb3NlKG1pLT5wYXRjaGZpbGUpOworCisJaGFuZGxlX2luZm8obWkpOworCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwlyZXR1cm4gbWktPmlucHV0X2Vycm9yOworfQorCitzdGF0aWMgaW50IGdpdF9tYWlsaW5mb19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqbWlfKQoreworCXN0cnVjdCBtYWlsaW5mbyAqbWkgPSBtaV87CisKKwlpZiAoIXN0YXJ0c193aXRoKHZhciwgIm1haWxpbmZvLiIpKQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIE5VTEwpOworCWlmICghc3RyY21wKHZhciwgIm1haWxpbmZvLnNjaXNzb3JzIikpIHsKKwkJbWktPnVzZV9zY2lzc29ycyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIHBlcmhhcHMgb3RoZXJzIGhlcmUgKi8KKwlyZXR1cm4gMDsKK30KKwordm9pZCBzZXR1cF9tYWlsaW5mbyhzdHJ1Y3QgbWFpbGluZm8gKm1pKQoreworCW1lbXNldChtaSwgMCwgc2l6ZW9mKCptaSkpOworCXN0cmJ1Zl9pbml0KCZtaS0+bmFtZSwgMCk7CisJc3RyYnVmX2luaXQoJm1pLT5lbWFpbCwgMCk7CisJc3RyYnVmX2luaXQoJm1pLT5jaGFyc2V0LCAwKTsKKwlzdHJidWZfaW5pdCgmbWktPmxvZ19tZXNzYWdlLCAwKTsKKwlzdHJidWZfaW5pdCgmbWktPmluYm9keV9oZWFkZXJfYWNjdW0sIDApOworCW1pLT5oZWFkZXJfc3RhZ2UgPSAxOworCW1pLT51c2VfaW5ib2R5X2hlYWRlcnMgPSAxOworCW1pLT5jb250ZW50X3RvcCA9IG1pLT5jb250ZW50OworCWdpdF9jb25maWcoZ2l0X21haWxpbmZvX2NvbmZpZywgbWkpOworfQorCit2b2lkIGNsZWFyX21haWxpbmZvKHN0cnVjdCBtYWlsaW5mbyAqbWkpCit7CisJaW50IGk7CisKKwlzdHJidWZfcmVsZWFzZSgmbWktPm5hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZtaS0+ZW1haWwpOworCXN0cmJ1Zl9yZWxlYXNlKCZtaS0+Y2hhcnNldCk7CisJc3RyYnVmX3JlbGVhc2UoJm1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtKTsKKwlmcmVlKG1pLT5tZXNzYWdlX2lkKTsKKworCWlmIChtaS0+cF9oZHJfZGF0YSkKKwkJZm9yIChpID0gMDsgbWktPnBfaGRyX2RhdGFbaV07IGkrKykKKwkJCXN0cmJ1Zl9yZWxlYXNlKG1pLT5wX2hkcl9kYXRhW2ldKTsKKwlmcmVlKG1pLT5wX2hkcl9kYXRhKTsKKwlpZiAobWktPnNfaGRyX2RhdGEpCisJCWZvciAoaSA9IDA7IG1pLT5zX2hkcl9kYXRhW2ldOyBpKyspCisJCQlzdHJidWZfcmVsZWFzZShtaS0+c19oZHJfZGF0YVtpXSk7CisJZnJlZShtaS0+c19oZHJfZGF0YSk7CisKKwl3aGlsZSAobWktPmNvbnRlbnQgPCBtaS0+Y29udGVudF90b3ApIHsKKwkJZnJlZSgqKG1pLT5jb250ZW50X3RvcCkpOworCQltaS0+Y29udGVudF90b3AtLTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmbWktPmxvZ19tZXNzYWdlKTsKK30KZGlmZiAtLWdpdCBhL21haWxpbmZvLmggYi9tYWlsaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YjFkNjcKLS0tIC9kZXYvbnVsbAorKysgYi9tYWlsaW5mby5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgTUFJTElORk9fSAorI2RlZmluZSBNQUlMSU5GT19ICisKKyNpbmNsdWRlICJzdHJidWYuaCIKKworI2RlZmluZSBNQVhfQk9VTkRBUklFUyA1CisKK3N0cnVjdCBtYWlsaW5mbyB7CisJRklMRSAqaW5wdXQ7CisJRklMRSAqb3V0cHV0OworCUZJTEUgKnBhdGNoZmlsZTsKKworCXN0cnVjdCBzdHJidWYgbmFtZTsKKwlzdHJ1Y3Qgc3RyYnVmIGVtYWlsOworCWludCBrZWVwX3N1YmplY3Q7CisJaW50IGtlZXBfbm9uX3BhdGNoX2JyYWNrZXRzX2luX3N1YmplY3Q7CisJaW50IGFkZF9tZXNzYWdlX2lkOworCWludCB1c2Vfc2Npc3NvcnM7CisJaW50IHVzZV9pbmJvZHlfaGVhZGVyczsKKwljb25zdCBjaGFyICptZXRhaW5mb19jaGFyc2V0OworCisJc3RydWN0IHN0cmJ1ZiAqY29udGVudFtNQVhfQk9VTkRBUklFU107CisJc3RydWN0IHN0cmJ1ZiAqKmNvbnRlbnRfdG9wOworCXN0cnVjdCBzdHJidWYgY2hhcnNldDsKKwl1bnNpZ25lZCBpbnQgZm9ybWF0X2Zsb3dlZDoxOworCXVuc2lnbmVkIGludCBkZWxzcDoxOworCWNoYXIgKm1lc3NhZ2VfaWQ7CisJZW51bSAgeworCQlURV9ET05UQ0FSRSwgVEVfUVAsIFRFX0JBU0U2NAorCX0gdHJhbnNmZXJfZW5jb2Rpbmc7CisJaW50IHBhdGNoX2xpbmVzOworCWludCBmaWx0ZXJfc3RhZ2U7IC8qIHN0aWxsIHJlYWRpbmcgbG9nIG9yIGFyZSB3ZSBjb3B5aW5nIHBhdGNoPyAqLworCWludCBoZWFkZXJfc3RhZ2U7IC8qIHN0aWxsIGNoZWNraW5nIGluLWJvZHkgaGVhZGVycz8gKi8KKwlzdHJ1Y3Qgc3RyYnVmIGluYm9keV9oZWFkZXJfYWNjdW07CisJc3RydWN0IHN0cmJ1ZiAqKnBfaGRyX2RhdGE7CisJc3RydWN0IHN0cmJ1ZiAqKnNfaGRyX2RhdGE7CisKKwlzdHJ1Y3Qgc3RyYnVmIGxvZ19tZXNzYWdlOworCWludCBpbnB1dF9lcnJvcjsKK307CisKK3ZvaWQgc2V0dXBfbWFpbGluZm8oc3RydWN0IG1haWxpbmZvICopOworaW50IG1haWxpbmZvKHN0cnVjdCBtYWlsaW5mbyAqLCBjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKnBhdGNoKTsKK3ZvaWQgY2xlYXJfbWFpbGluZm8oc3RydWN0IG1haWxpbmZvICopOworCisjZW5kaWYgLyogTUFJTElORk9fSCAqLwpkaWZmIC0tZ2l0IGEvbWFpbG1hcC5jIGIvbWFpbG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MmZkODYKLS0tIC9kZXYvbnVsbAorKysgYi9tYWlsbWFwLmMKQEAgLTAsMCArMSwzNjMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibWFpbG1hcC5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorCisjZGVmaW5lIERFQlVHX01BSUxNQVAgMAorI2lmIERFQlVHX01BSUxNQVAKKyNkZWZpbmUgZGVidWdfbW0oLi4uKSBmcHJpbnRmKHN0ZGVyciwgX19WQV9BUkdTX18pCisjZGVmaW5lIGRlYnVnX3N0cihYKSAoKFgpID8gKFgpIDogIihub25lKSIpCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX21tKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7fQorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpkZWJ1Z19zdHIoY29uc3QgY2hhciAqcykgeyByZXR1cm4gczsgfQorI2VuZGlmCisKK2NvbnN0IGNoYXIgKmdpdF9tYWlsbWFwX2ZpbGU7Citjb25zdCBjaGFyICpnaXRfbWFpbG1hcF9ibG9iOworCitzdHJ1Y3QgbWFpbG1hcF9pbmZvIHsKKwljaGFyICpuYW1lOworCWNoYXIgKmVtYWlsOworfTsKKworc3RydWN0IG1haWxtYXBfZW50cnkgeworCS8qIG5hbWUgYW5kIGVtYWlsIGZvciB0aGUgc2ltcGxlIG1haWwtb25seSBjYXNlICovCisJY2hhciAqbmFtZTsKKwljaGFyICplbWFpbDsKKworCS8qIG5hbWUgYW5kIGVtYWlsIGZvciB0aGUgY29tcGxleCBtYWlsIGFuZCBuYW1lIG1hdGNoaW5nIGNhc2UgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbmFtZW1hcDsKK307CisKK3N0YXRpYyB2b2lkIGZyZWVfbWFpbG1hcF9pbmZvKHZvaWQgKnAsIGNvbnN0IGNoYXIgKnMpCit7CisJc3RydWN0IG1haWxtYXBfaW5mbyAqbWkgPSAoc3RydWN0IG1haWxtYXBfaW5mbyAqKXA7CisJZGVidWdfbW0oIm1haWxtYXA6IC0tIGNvbXBsZXg6ICclcycgLT4gJyVzJyA8JXM+XG4iLAorCQkgcywgZGVidWdfc3RyKG1pLT5uYW1lKSwgZGVidWdfc3RyKG1pLT5lbWFpbCkpOworCWZyZWUobWktPm5hbWUpOworCWZyZWUobWktPmVtYWlsKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9tYWlsbWFwX2VudHJ5KHZvaWQgKnAsIGNvbnN0IGNoYXIgKnMpCit7CisJc3RydWN0IG1haWxtYXBfZW50cnkgKm1lID0gKHN0cnVjdCBtYWlsbWFwX2VudHJ5ICopcDsKKwlkZWJ1Z19tbSgibWFpbG1hcDogcmVtb3ZpbmcgZW50cmllcyBmb3IgPCVzPiwgd2l0aCAlZCBzdWItZW50cmllc1xuIiwKKwkJIHMsIG1lLT5uYW1lbWFwLm5yKTsKKwlkZWJ1Z19tbSgibWFpbG1hcDogLSBzaW1wbGU6ICclcycgPCVzPlxuIiwKKwkJIGRlYnVnX3N0cihtZS0+bmFtZSksIGRlYnVnX3N0cihtZS0+ZW1haWwpKTsKKworCWZyZWUobWUtPm5hbWUpOworCWZyZWUobWUtPmVtYWlsKTsKKworCW1lLT5uYW1lbWFwLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlzdHJpbmdfbGlzdF9jbGVhcl9mdW5jKCZtZS0+bmFtZW1hcCwgZnJlZV9tYWlsbWFwX2luZm8pOworfQorCisvKgorICogT24gc29tZSBzeXN0ZW1zIChlLmcuIE1pbkdXIDQuMCksIHN0cmluZy5oIGhhcyBfb25seV8gaW5saW5lCisgKiBkZWZpbml0aW9uIG9mIHN0cmNhc2VjbXAgYW5kIG5vIG5vbi1pbmxpbmUgaW1wbGVtZW50YXRpb24gaXMKKyAqIHN1cHBsaWVkIGFueXdoZXJlLCB3aGljaCBpcywgZWgsICJ1bnVzdWFsIjsgd2UgY2Fubm90IHRha2UgYW4KKyAqIGFkZHJlc3Mgb2Ygc3VjaCBhIGZ1bmN0aW9uIHRvIHN0b3JlIGl0IGluIG5hbWVtYXAuY21wLiAgVGhpcyBpcworICogaGVyZSBhcyBhIHdvcmthcm91bmQtLS1kbyBub3QgYXNzaWduIHN0cmNhc2VjbXAgZGlyZWN0bHkgdG8KKyAqIG5hbWVtYXAuY21wIHVudGlsIHdlIGtub3cgbm8gc3lzdGVtcyB0aGF0IG1hdHRlciBoYXZlIHN1Y2ggYW4KKyAqICJ1bnVzdWFsIiBzdHJpbmcuaC4KKyAqLworc3RhdGljIGludCBuYW1lbWFwX2NtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworCXJldHVybiBzdHJjYXNlY21wKGEsIGIpOworfQorCitzdGF0aWMgdm9pZCBhZGRfbWFwcGluZyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1hcCwKKwkJCWNoYXIgKm5ld19uYW1lLCBjaGFyICpuZXdfZW1haWwsCisJCQljaGFyICpvbGRfbmFtZSwgY2hhciAqb2xkX2VtYWlsKQoreworCXN0cnVjdCBtYWlsbWFwX2VudHJ5ICptZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCWlmIChvbGRfZW1haWwgPT0gTlVMTCkgeworCQlvbGRfZW1haWwgPSBuZXdfZW1haWw7CisJCW5ld19lbWFpbCA9IE5VTEw7CisJfQorCisJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChtYXAsIG9sZF9lbWFpbCk7CisJaWYgKGl0ZW0tPnV0aWwpIHsKKwkJbWUgPSAoc3RydWN0IG1haWxtYXBfZW50cnkgKilpdGVtLT51dGlsOworCX0gZWxzZSB7CisJCW1lID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG1haWxtYXBfZW50cnkpKTsKKwkJbWUtPm5hbWVtYXAuc3RyZHVwX3N0cmluZ3MgPSAxOworCQltZS0+bmFtZW1hcC5jbXAgPSBuYW1lbWFwX2NtcDsKKwkJaXRlbS0+dXRpbCA9IG1lOworCX0KKworCWlmIChvbGRfbmFtZSA9PSBOVUxMKSB7CisJCWRlYnVnX21tKCJtYWlsbWFwOiBhZGRpbmcgKHNpbXBsZSkgZW50cnkgZm9yICclcydcbiIsIG9sZF9lbWFpbCk7CisKKwkJLyogUmVwbGFjZSBjdXJyZW50IG5hbWUgYW5kIG5ldyBlbWFpbCBmb3Igc2ltcGxlIGVudHJ5ICovCisJCWlmIChuZXdfbmFtZSkgeworCQkJZnJlZShtZS0+bmFtZSk7CisJCQltZS0+bmFtZSA9IHhzdHJkdXAobmV3X25hbWUpOworCQl9CisJCWlmIChuZXdfZW1haWwpIHsKKwkJCWZyZWUobWUtPmVtYWlsKTsKKwkJCW1lLT5lbWFpbCA9IHhzdHJkdXAobmV3X2VtYWlsKTsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBtYWlsbWFwX2luZm8gKm1pID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG1haWxtYXBfaW5mbykpOworCQlkZWJ1Z19tbSgibWFpbG1hcDogYWRkaW5nIChjb21wbGV4KSBlbnRyeSBmb3IgJyVzJ1xuIiwgb2xkX2VtYWlsKTsKKwkJbWktPm5hbWUgPSB4c3RyZHVwX29yX251bGwobmV3X25hbWUpOworCQltaS0+ZW1haWwgPSB4c3RyZHVwX29yX251bGwobmV3X2VtYWlsKTsKKwkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZtZS0+bmFtZW1hcCwgb2xkX25hbWUpLT51dGlsID0gbWk7CisJfQorCisJZGVidWdfbW0oIm1haWxtYXA6ICAnJXMnIDwlcz4gLT4gJyVzJyA8JXM+XG4iLAorCQkgZGVidWdfc3RyKG9sZF9uYW1lKSwgb2xkX2VtYWlsLAorCQkgZGVidWdfc3RyKG5ld19uYW1lKSwgZGVidWdfc3RyKG5ld19lbWFpbCkpOworfQorCitzdGF0aWMgY2hhciAqcGFyc2VfbmFtZV9hbmRfZW1haWwoY2hhciAqYnVmZmVyLCBjaGFyICoqbmFtZSwKKwkJCQkgIGNoYXIgKiplbWFpbCwgaW50IGFsbG93X2VtcHR5X2VtYWlsKQoreworCWNoYXIgKmxlZnQsICpyaWdodCwgKm5zdGFydCwgKm5lbmQ7CisJKm5hbWUgPSAqZW1haWwgPSBOVUxMOworCisJaWYgKChsZWZ0ID0gc3RyY2hyKGJ1ZmZlciwgJzwnKSkgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKChyaWdodCA9IHN0cmNocihsZWZ0KzEsICc+JykpID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWlmICghYWxsb3dfZW1wdHlfZW1haWwgJiYgKGxlZnQrMSA9PSByaWdodCkpCisJCXJldHVybiBOVUxMOworCisJLyogcmVtb3ZlIHdoaXRlc3BhY2UgZnJvbSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBuYW1lICovCisJbnN0YXJ0ID0gYnVmZmVyOworCXdoaWxlIChpc3NwYWNlKCpuc3RhcnQpICYmIG5zdGFydCA8IGxlZnQpCisJCSsrbnN0YXJ0OworCW5lbmQgPSBsZWZ0LTE7CisJd2hpbGUgKG5lbmQgPiBuc3RhcnQgJiYgaXNzcGFjZSgqbmVuZCkpCisJCS0tbmVuZDsKKworCSpuYW1lID0gKG5zdGFydCA8PSBuZW5kID8gbnN0YXJ0IDogTlVMTCk7CisJKmVtYWlsID0gbGVmdCsxOworCSoobmVuZCsxKSA9ICdcMCc7CisJKnJpZ2h0KysgPSAnXDAnOworCisJcmV0dXJuICgqcmlnaHQgPT0gJ1wwJyA/IE5VTEwgOiByaWdodCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfbWFpbG1hcF9saW5lKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLCBjaGFyICpidWZmZXIsCisJCQkgICAgICBjaGFyICoqcmVwb19hYmJyZXYpCit7CisJY2hhciAqbmFtZTEgPSBOVUxMLCAqZW1haWwxID0gTlVMTCwgKm5hbWUyID0gTlVMTCwgKmVtYWlsMiA9IE5VTEw7CisJaWYgKGJ1ZmZlclswXSA9PSAnIycpIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgYWJicmV2W10gPSAiIyByZXBvLWFiYnJldjoiOworCQlpbnQgYWJibGVuID0gc2l6ZW9mKGFiYnJldikgLSAxOworCQlpbnQgbGVuID0gc3RybGVuKGJ1ZmZlcik7CisKKwkJaWYgKCFyZXBvX2FiYnJldikKKwkJCXJldHVybjsKKworCQlpZiAobGVuICYmIGJ1ZmZlcltsZW4gLSAxXSA9PSAnXG4nKQorCQkJYnVmZmVyWy0tbGVuXSA9IDA7CisJCWlmICghc3RybmNtcChidWZmZXIsIGFiYnJldiwgYWJibGVuKSkgeworCQkJY2hhciAqY3A7CisKKwkJCWZyZWUoKnJlcG9fYWJicmV2KTsKKworCQkJZm9yIChjcCA9IGJ1ZmZlciArIGFiYmxlbjsgaXNzcGFjZSgqY3ApOyBjcCsrKQorCQkJCTsgLyogbm90aGluZyAqLworCQkJKnJlcG9fYWJicmV2ID0geHN0cmR1cChjcCk7CisJCX0KKwkJcmV0dXJuOworCX0KKwlpZiAoKG5hbWUyID0gcGFyc2VfbmFtZV9hbmRfZW1haWwoYnVmZmVyLCAmbmFtZTEsICZlbWFpbDEsIDApKSAhPSBOVUxMKQorCQlwYXJzZV9uYW1lX2FuZF9lbWFpbChuYW1lMiwgJm5hbWUyLCAmZW1haWwyLCAxKTsKKworCWlmIChlbWFpbDEpCisJCWFkZF9tYXBwaW5nKG1hcCwgbmFtZTEsIGVtYWlsMSwgbmFtZTIsIGVtYWlsMik7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9tYWlsbWFwX2ZpbGUoc3RydWN0IHN0cmluZ19saXN0ICptYXAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJICAgICBjaGFyICoqcmVwb19hYmJyZXYpCit7CisJY2hhciBidWZmZXJbMTAyNF07CisJRklMRSAqZjsKKworCWlmICghZmlsZW5hbWUpCisJCXJldHVybiAwOworCisJZiA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworCWlmICghZikgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiBlcnJvcl9lcnJubygidW5hYmxlIHRvIG9wZW4gbWFpbG1hcCBhdCAlcyIsIGZpbGVuYW1lKTsKKwl9CisKKwl3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZikgIT0gTlVMTCkKKwkJcmVhZF9tYWlsbWFwX2xpbmUobWFwLCBidWZmZXIsIHJlcG9fYWJicmV2KTsKKwlmY2xvc2UoZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfbWFpbG1hcF9zdHJpbmcoc3RydWN0IHN0cmluZ19saXN0ICptYXAsIGNoYXIgKmJ1ZiwKKwkJCQljaGFyICoqcmVwb19hYmJyZXYpCit7CisJd2hpbGUgKCpidWYpIHsKKwkJY2hhciAqZW5kID0gc3RyY2hybnVsKGJ1ZiwgJ1xuJyk7CisKKwkJaWYgKCplbmQpCisJCQkqZW5kKysgPSAnXDAnOworCisJCXJlYWRfbWFpbG1hcF9saW5lKG1hcCwgYnVmLCByZXBvX2FiYnJldik7CisJCWJ1ZiA9IGVuZDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9tYWlsbWFwX2Jsb2Ioc3RydWN0IHN0cmluZ19saXN0ICptYXAsCisJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgIGNoYXIgKipyZXBvX2FiYnJldikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIDA7CisJaWYgKGdldF9vaWQobmFtZSwgJm9pZCkgPCAwKQorCQlyZXR1cm4gMDsKKworCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUoJm9pZCwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gcmVhZCBtYWlsbWFwIG9iamVjdCBhdCAlcyIsIG5hbWUpOworCWlmICh0eXBlICE9IE9CSl9CTE9CKQorCQlyZXR1cm4gZXJyb3IoIm1haWxtYXAgaXMgbm90IGEgYmxvYjogJXMiLCBuYW1lKTsKKworCXJlYWRfbWFpbG1hcF9zdHJpbmcobWFwLCBidWYsIHJlcG9fYWJicmV2KTsKKworCWZyZWUoYnVmKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHJlYWRfbWFpbG1hcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1hcCwgY2hhciAqKnJlcG9fYWJicmV2KQoreworCWludCBlcnIgPSAwOworCisJbWFwLT5zdHJkdXBfc3RyaW5ncyA9IDE7CisJbWFwLT5jbXAgPSBuYW1lbWFwX2NtcDsKKworCWlmICghZ2l0X21haWxtYXBfYmxvYiAmJiBpc19iYXJlX3JlcG9zaXRvcnkoKSkKKwkJZ2l0X21haWxtYXBfYmxvYiA9ICJIRUFEOi5tYWlsbWFwIjsKKworCWVyciB8PSByZWFkX21haWxtYXBfZmlsZShtYXAsICIubWFpbG1hcCIsIHJlcG9fYWJicmV2KTsKKwlpZiAoc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpCisJCWVyciB8PSByZWFkX21haWxtYXBfYmxvYihtYXAsIGdpdF9tYWlsbWFwX2Jsb2IsIHJlcG9fYWJicmV2KTsKKwllcnIgfD0gcmVhZF9tYWlsbWFwX2ZpbGUobWFwLCBnaXRfbWFpbG1hcF9maWxlLCByZXBvX2FiYnJldik7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBjbGVhcl9tYWlsbWFwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwKQoreworCWRlYnVnX21tKCJtYWlsbWFwOiBjbGVhcmluZyAlZCBlbnRyaWVzLi4uXG4iLCBtYXAtPm5yKTsKKwltYXAtPnN0cmR1cF9zdHJpbmdzID0gMTsKKwlzdHJpbmdfbGlzdF9jbGVhcl9mdW5jKG1hcCwgZnJlZV9tYWlsbWFwX2VudHJ5KTsKKwlkZWJ1Z19tbSgibWFpbG1hcDogY2xlYXJlZFxuIik7Cit9CisKKy8qCisgKiBMb29rIGZvciBhbiBlbnRyeSBpbiBtYXAgdGhhdCBtYXRjaCBzdHJpbmdbMDpsZW5dOyBzdHJpbmdbbGVuXQorICogZG9lcyBub3QgaGF2ZSB0byBiZSBOVUwgKGJ1dCBpdCBjb3VsZCBiZSkuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqbG9va3VwX3ByZWZpeChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1hcCwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3QgbGVuKQoreworCWludCBpID0gc3RyaW5nX2xpc3RfZmluZF9pbnNlcnRfaW5kZXgobWFwLCBzdHJpbmcsIDEpOworCWlmIChpIDwgMCkgeworCQkvKiBleGFjdCBtYXRjaCAqLworCQlpID0gLTEgLSBpOworCQlpZiAoIXN0cmluZ1tsZW5dKQorCQkJcmV0dXJuICZtYXAtPml0ZW1zW2ldOworCQkvKgorCQkgKiB0aGF0IG1hcCBlbnRyeSBtYXRjaGVzIGV4YWN0bHkgdG8gdGhlIHN0cmluZywgaW5jbHVkaW5nCisJCSAqIHRoZSBjcnVmdCBhdCB0aGUgZW5kIGJleW9uZCAibGVuIi4gIFRoYXQgaXMgbm90IGEgbWF0Y2gKKwkJICogd2l0aCBzdHJpbmdbMDpsZW5dIHRoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLgorCQkgKi8KKwl9IGVsc2UgaWYgKCFzdHJpbmdbbGVuXSkgeworCQkvKgorCQkgKiBhc2tlZCB3aXRoIHRoZSB3aG9sZSBzdHJpbmcsIGFuZCBnb3Qgbm90aGluZy4gIE5vCisJCSAqIG1hdGNoaW5nIGVudHJ5IGNhbiBleGlzdCBpbiB0aGUgbWFwLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBpIGlzIGF0IHRoZSBleGFjdCBtYXRjaCB0byBhbiBvdmVybG9uZyBrZXksIG9yIGxvY2F0aW9uIHRoZQorCSAqIG92ZXJsb25nIGtleSB3b3VsZCBiZSBpbnNlcnRlZCwgd2hpY2ggbXVzdCBjb21lIGFmdGVyIHRoZQorCSAqIHJlYWwgbG9jYXRpb24gb2YgdGhlIGtleSBpZiBvbmUgZXhpc3RzLgorCSAqLworCXdoaWxlICgwIDw9IC0taSAmJiBpIDwgbWFwLT5ucikgeworCQlpbnQgY21wID0gc3RybmNhc2VjbXAobWFwLT5pdGVtc1tpXS5zdHJpbmcsIHN0cmluZywgbGVuKTsKKwkJaWYgKGNtcCA8IDApCisJCQkvKgorCQkJICogImkiIHBvaW50cyBhdCBhIGtleSBkZWZpbml0ZWx5IGJlbG93IHRoZSBwcmVmaXg7CisJCQkgKiB0aGUgbWFwIGRvZXMgbm90IGhhdmUgc3RyaW5nWzA6bGVuXSBpbiBpdC4KKwkJCSAqLworCQkJYnJlYWs7CisJCWVsc2UgaWYgKCFjbXAgJiYgIW1hcC0+aXRlbXNbaV0uc3RyaW5nW2xlbl0pCisJCQkvKiBmb3VuZCBpdCAqLworCQkJcmV0dXJuICZtYXAtPml0ZW1zW2ldOworCQkvKgorCQkgKiBvdGhlcndpc2UsIHRoZSBzdHJpbmcgYXQgImkiIG1heSBiZSBzdHJpbmdbMDpsZW5dCisJCSAqIGZvbGxvd2VkIGJ5IGEgc3RyaW5nIHRoYXQgc29ydHMgbGF0ZXIgdGhhbiBzdHJpbmdbbGVuOl07CisJCSAqIGtlZXAgdHJ5aW5nLgorCQkgKi8KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBtYXBfdXNlcihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1hcCwKKwkgICAgIGNvbnN0IGNoYXIgKiplbWFpbCwgc2l6ZV90ICplbWFpbGxlbiwKKwkgICAgIGNvbnN0IGNoYXIgKipuYW1lLCBzaXplX3QgKm5hbWVsZW4pCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IG1haWxtYXBfZW50cnkgKm1lOworCisJZGVidWdfbW0oIm1hcF91c2VyOiBtYXAgJyUuKnMnIDwlLipzPlxuIiwKKwkJIChpbnQpKm5hbWVsZW4sIGRlYnVnX3N0cigqbmFtZSksCisJCSAoaW50KSplbWFpbGxlbiwgZGVidWdfc3RyKCplbWFpbCkpOworCisJaXRlbSA9IGxvb2t1cF9wcmVmaXgobWFwLCAqZW1haWwsICplbWFpbGxlbik7CisJaWYgKGl0ZW0gIT0gTlVMTCkgeworCQltZSA9IChzdHJ1Y3QgbWFpbG1hcF9lbnRyeSAqKWl0ZW0tPnV0aWw7CisJCWlmIChtZS0+bmFtZW1hcC5ucikgeworCQkJLyoKKwkJCSAqIFRoZSBpdGVtIGhhcyBtdWx0aXBsZSBpdGVtcywgc28gd2UnbGwgbG9vayB1cCBvbgorCQkJICogbmFtZSB0b28uIElmIHRoZSBuYW1lIGlzIG5vdCBmb3VuZCwgd2UgY2hvb3NlIHRoZQorCQkJICogc2ltcGxlIGVudHJ5LgorCQkJICovCisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3ViaXRlbTsKKwkJCXN1Yml0ZW0gPSBsb29rdXBfcHJlZml4KCZtZS0+bmFtZW1hcCwgKm5hbWUsICpuYW1lbGVuKTsKKwkJCWlmIChzdWJpdGVtKQorCQkJCWl0ZW0gPSBzdWJpdGVtOworCQl9CisJfQorCWlmIChpdGVtICE9IE5VTEwpIHsKKwkJc3RydWN0IG1haWxtYXBfaW5mbyAqbWkgPSAoc3RydWN0IG1haWxtYXBfaW5mbyAqKWl0ZW0tPnV0aWw7CisJCWlmIChtaS0+bmFtZSA9PSBOVUxMICYmIG1pLT5lbWFpbCA9PSBOVUxMKSB7CisJCQlkZWJ1Z19tbSgibWFwX3VzZXI6ICAtLSAobm8gc2ltcGxlIG1hcHBpbmcpXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChtaS0+ZW1haWwpIHsKKwkJCQkqZW1haWwgPSBtaS0+ZW1haWw7CisJCQkJKmVtYWlsbGVuID0gc3RybGVuKCplbWFpbCk7CisJCX0KKwkJaWYgKG1pLT5uYW1lKSB7CisJCQkJKm5hbWUgPSBtaS0+bmFtZTsKKwkJCQkqbmFtZWxlbiA9IHN0cmxlbigqbmFtZSk7CisJCX0KKwkJZGVidWdfbW0oIm1hcF91c2VyOiAgdG8gJyUuKnMnIDwlLipzPlxuIiwKKwkJCSAoaW50KSpuYW1lbGVuLCBkZWJ1Z19zdHIoKm5hbWUpLAorCQkJIChpbnQpKmVtYWlsbGVuLCBkZWJ1Z19zdHIoKmVtYWlsKSk7CisJCXJldHVybiAxOworCX0KKwlkZWJ1Z19tbSgibWFwX3VzZXI6ICAtLVxuIik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9tYWlsbWFwLmggYi9tYWlsbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBlNjU2NAotLS0gL2Rldi9udWxsCisrKyBiL21haWxtYXAuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIE1BSUxNQVBfSAorI2RlZmluZSBNQUlMTUFQX0gKKworc3RydWN0IHN0cmluZ19saXN0OworCitpbnQgcmVhZF9tYWlsbWFwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLCBjaGFyICoqcmVwb19hYmJyZXYpOwordm9pZCBjbGVhcl9tYWlsbWFwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwKTsKKworaW50IG1hcF91c2VyKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLAorCQkJIGNvbnN0IGNoYXIgKiplbWFpbCwgc2l6ZV90ICplbWFpbGxlbiwgY29uc3QgY2hhciAqKm5hbWUsIHNpemVfdCAqbmFtZWxlbik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWF0Y2gtdHJlZXMuYyBiL21hdGNoLXRyZWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZjMTk0YwotLS0gL2Rldi9udWxsCisrKyBiL21hdGNoLXRyZWVzLmMKQEAgLTAsMCArMSwzNjUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKworc3RhdGljIGludCBzY29yZV9taXNzaW5nKHVuc2lnbmVkIG1vZGUpCit7CisJaW50IHNjb3JlOworCisJaWYgKFNfSVNESVIobW9kZSkpCisJCXNjb3JlID0gLTEwMDA7CisJZWxzZSBpZiAoU19JU0xOSyhtb2RlKSkKKwkJc2NvcmUgPSAtNTAwOworCWVsc2UKKwkJc2NvcmUgPSAtNTA7CisJcmV0dXJuIHNjb3JlOworfQorCitzdGF0aWMgaW50IHNjb3JlX2RpZmZlcnModW5zaWduZWQgbW9kZTEsIHVuc2lnbmVkIG1vZGUyKQoreworCWludCBzY29yZTsKKworCWlmIChTX0lTRElSKG1vZGUxKSAhPSBTX0lTRElSKG1vZGUyKSkKKwkJc2NvcmUgPSAtMTAwOworCWVsc2UgaWYgKFNfSVNMTksobW9kZTEpICE9IFNfSVNMTksobW9kZTIpKQorCQlzY29yZSA9IC01MDsKKwllbHNlCisJCXNjb3JlID0gLTU7CisJcmV0dXJuIHNjb3JlOworfQorCitzdGF0aWMgaW50IHNjb3JlX21hdGNoZXModW5zaWduZWQgbW9kZTEsIHVuc2lnbmVkIG1vZGUyKQoreworCWludCBzY29yZTsKKworCS8qIEhlaCwgd2UgZm91bmQgU0hBLTEgY29sbGlzaW9ucyBiZXR3ZWVuIGRpZmZlcmVudCBraW5kIG9mIG9iamVjdHMgKi8KKwlpZiAoU19JU0RJUihtb2RlMSkgIT0gU19JU0RJUihtb2RlMikpCisJCXNjb3JlID0gLTEwMDsKKwllbHNlIGlmIChTX0lTTE5LKG1vZGUxKSAhPSBTX0lTTE5LKG1vZGUyKSkKKwkJc2NvcmUgPSAtNTA7CisKKwllbHNlIGlmIChTX0lTRElSKG1vZGUxKSkKKwkJc2NvcmUgPSAxMDAwOworCWVsc2UgaWYgKFNfSVNMTksobW9kZTEpKQorCQlzY29yZSA9IDUwMDsKKwllbHNlCisJCXNjb3JlID0gMjUwOworCXJldHVybiBzY29yZTsKK30KKworc3RhdGljIHZvaWQgKmZpbGxfdHJlZV9kZXNjX3N0cmljdChzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmhhc2gpCit7CisJdm9pZCAqYnVmZmVyOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlidWZmZXIgPSByZWFkX29iamVjdF9maWxlKGhhc2gsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWZmZXIpCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIiwgb2lkX3RvX2hleChoYXNoKSk7CisJaWYgKHR5cGUgIT0gT0JKX1RSRUUpCisJCWRpZSgiJXMgaXMgbm90IGEgdHJlZSIsIG9pZF90b19oZXgoaGFzaCkpOworCWluaXRfdHJlZV9kZXNjKGRlc2MsIGJ1ZmZlciwgc2l6ZSk7CisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIGludCBiYXNlX25hbWVfZW50cmllc19jb21wYXJlKGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICphLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKmIpCit7CisJcmV0dXJuIGJhc2VfbmFtZV9jb21wYXJlKGEtPnBhdGgsIHRyZWVfZW50cnlfbGVuKGEpLCBhLT5tb2RlLAorCQkJCSBiLT5wYXRoLCB0cmVlX2VudHJ5X2xlbihiKSwgYi0+bW9kZSk7Cit9CisKKy8qCisgKiBJbnNwZWN0IHR3byB0cmVlcywgYW5kIGdpdmUgYSBzY29yZSB0aGF0IHRlbGxzIGhvdyBzaW1pbGFyIHRoZXkgYXJlLgorICovCitzdGF0aWMgaW50IHNjb3JlX3RyZWVzKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmhhc2gxLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpoYXNoMikKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIG9uZTsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHR3bzsKKwl2b2lkICpvbmVfYnVmID0gZmlsbF90cmVlX2Rlc2Nfc3RyaWN0KCZvbmUsIGhhc2gxKTsKKwl2b2lkICp0d29fYnVmID0gZmlsbF90cmVlX2Rlc2Nfc3RyaWN0KCZ0d28sIGhhc2gyKTsKKwlpbnQgc2NvcmUgPSAwOworCisJZm9yICg7OykgeworCQlpbnQgY21wOworCisJCWlmIChvbmUuc2l6ZSAmJiB0d28uc2l6ZSkKKwkJCWNtcCA9IGJhc2VfbmFtZV9lbnRyaWVzX2NvbXBhcmUoJm9uZS5lbnRyeSwgJnR3by5lbnRyeSk7CisJCWVsc2UgaWYgKG9uZS5zaXplKQorCQkJLyogdHdvIGxhY2tzIHRoaXMgZW50cnkgKi8KKwkJCWNtcCA9IC0xOworCQllbHNlIGlmICh0d28uc2l6ZSkKKwkJCS8qIHR3byBoYXMgbW9yZSBlbnRyaWVzICovCisJCQljbXAgPSAxOworCQllbHNlCisJCQlicmVhazsKKworCQlpZiAoY21wIDwgMCkgeworCQkJLyogcGF0aDEgZG9lcyBub3QgYXBwZWFyIGluIHR3byAqLworCQkJc2NvcmUgKz0gc2NvcmVfbWlzc2luZyhvbmUuZW50cnkubW9kZSk7CisJCQl1cGRhdGVfdHJlZV9lbnRyeSgmb25lKTsKKwkJfSBlbHNlIGlmIChjbXAgPiAwKSB7CisJCQkvKiBwYXRoMiBkb2VzIG5vdCBhcHBlYXIgaW4gb25lICovCisJCQlzY29yZSArPSBzY29yZV9taXNzaW5nKHR3by5lbnRyeS5tb2RlKTsKKwkJCXVwZGF0ZV90cmVlX2VudHJ5KCZ0d28pOworCQl9IGVsc2UgeworCQkJLyogcGF0aCBhcHBlYXJzIGluIGJvdGggKi8KKwkJCWlmICghb2lkZXEoJm9uZS5lbnRyeS5vaWQsICZ0d28uZW50cnkub2lkKSkgeworCQkJCS8qIHRoZXkgYXJlIGRpZmZlcmVudCAqLworCQkJCXNjb3JlICs9IHNjb3JlX2RpZmZlcnMob25lLmVudHJ5Lm1vZGUsCisJCQkJCQkgICAgICAgdHdvLmVudHJ5Lm1vZGUpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBzYW1lIHN1YnRyZWUgb3IgYmxvYiAqLworCQkJCXNjb3JlICs9IHNjb3JlX21hdGNoZXMob25lLmVudHJ5Lm1vZGUsCisJCQkJCQkgICAgICAgdHdvLmVudHJ5Lm1vZGUpOworCQkJfQorCQkJdXBkYXRlX3RyZWVfZW50cnkoJm9uZSk7CisJCQl1cGRhdGVfdHJlZV9lbnRyeSgmdHdvKTsKKwkJfQorCX0KKwlmcmVlKG9uZV9idWYpOworCWZyZWUodHdvX2J1Zik7CisJcmV0dXJuIHNjb3JlOworfQorCisvKgorICogTWF0Y2ggb25lIGl0c2VsZiBhbmQgaXRzIHN1YnRyZWVzIHdpdGggdHdvIGFuZCBwaWNrIHRoZSBiZXN0IG1hdGNoLgorICovCitzdGF0aWMgdm9pZCBtYXRjaF90cmVlcyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpoYXNoMSwKKwkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmhhc2gyLAorCQkJaW50ICpiZXN0X3Njb3JlLAorCQkJY2hhciAqKmJlc3RfbWF0Y2gsCisJCQljb25zdCBjaGFyICpiYXNlLAorCQkJaW50IHJlY3Vyc2VfbGltaXQpCit7CisJc3RydWN0IHRyZWVfZGVzYyBvbmU7CisJdm9pZCAqb25lX2J1ZiA9IGZpbGxfdHJlZV9kZXNjX3N0cmljdCgmb25lLCBoYXNoMSk7CisKKwl3aGlsZSAob25lLnNpemUpIHsKKwkJY29uc3QgY2hhciAqcGF0aDsKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZWxlbTsKKwkJdW5zaWduZWQgc2hvcnQgbW9kZTsKKwkJaW50IHNjb3JlOworCisJCWVsZW0gPSB0cmVlX2VudHJ5X2V4dHJhY3QoJm9uZSwgJnBhdGgsICZtb2RlKTsKKwkJaWYgKCFTX0lTRElSKG1vZGUpKQorCQkJZ290byBuZXh0OworCQlzY29yZSA9IHNjb3JlX3RyZWVzKGVsZW0sIGhhc2gyKTsKKwkJaWYgKCpiZXN0X3Njb3JlIDwgc2NvcmUpIHsKKwkJCWZyZWUoKmJlc3RfbWF0Y2gpOworCQkJKmJlc3RfbWF0Y2ggPSB4c3RyZm10KCIlcyVzIiwgYmFzZSwgcGF0aCk7CisJCQkqYmVzdF9zY29yZSA9IHNjb3JlOworCQl9CisJCWlmIChyZWN1cnNlX2xpbWl0KSB7CisJCQljaGFyICpuZXdiYXNlID0geHN0cmZtdCgiJXMlcy8iLCBiYXNlLCBwYXRoKTsKKwkJCW1hdGNoX3RyZWVzKGVsZW0sIGhhc2gyLCBiZXN0X3Njb3JlLCBiZXN0X21hdGNoLAorCQkJCSAgICBuZXdiYXNlLCByZWN1cnNlX2xpbWl0IC0gMSk7CisJCQlmcmVlKG5ld2Jhc2UpOworCQl9CisKKwluZXh0OgorCQl1cGRhdGVfdHJlZV9lbnRyeSgmb25lKTsKKwl9CisJZnJlZShvbmVfYnVmKTsKK30KKworLyoKKyAqIEEgdHJlZSAib2lkMSIgaGFzIGEgc3ViZGlyZWN0b3J5IGF0ICJwcmVmaXgiLiAgQ29tZSB1cCB3aXRoIGEgdHJlZSBvYmplY3QgYnkKKyAqIHJlcGxhY2luZyBpdCB3aXRoIGFub3RoZXIgdHJlZSAib2lkMiIuCisgKi8KK3N0YXRpYyBpbnQgc3BsaWNlX3RyZWUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkMSwgY29uc3QgY2hhciAqcHJlZml4LAorCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkMiwgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0KQoreworCWNoYXIgKnN1YnBhdGg7CisJaW50IHRvcGxlbjsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzejsKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJdW5zaWduZWQgY2hhciAqcmV3cml0ZV9oZXJlOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnJld3JpdGVfd2l0aDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHN1YnRyZWU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWludCBzdGF0dXM7CisKKwlzdWJwYXRoID0gc3RyY2hybnVsKHByZWZpeCwgJy8nKTsKKwl0b3BsZW4gPSBzdWJwYXRoIC0gcHJlZml4OworCWlmICgqc3VicGF0aCkKKwkJc3VicGF0aCsrOworCisJYnVmID0gcmVhZF9vYmplY3RfZmlsZShvaWQxLCAmdHlwZSwgJnN6KTsKKwlpZiAoIWJ1ZikKKwkJZGllKCJjYW5ub3QgcmVhZCB0cmVlICVzIiwgb2lkX3RvX2hleChvaWQxKSk7CisJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIGJ1Ziwgc3opOworCisJcmV3cml0ZV9oZXJlID0gTlVMTDsKKwl3aGlsZSAoZGVzYy5zaXplKSB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCXVuc2lnbmVkIHNob3J0IG1vZGU7CisKKwkJdHJlZV9lbnRyeV9leHRyYWN0KCZkZXNjLCAmbmFtZSwgJm1vZGUpOworCQlpZiAoc3RybGVuKG5hbWUpID09IHRvcGxlbiAmJgorCQkgICAgIW1lbWNtcChuYW1lLCBwcmVmaXgsIHRvcGxlbikpIHsKKwkJCWlmICghU19JU0RJUihtb2RlKSkKKwkJCQlkaWUoImVudHJ5ICVzIGluIHRyZWUgJXMgaXMgbm90IGEgdHJlZSIsIG5hbWUsCisJCQkJICAgIG9pZF90b19oZXgob2lkMSkpOworCisJCQkvKgorCQkJICogV2UgY2FzdCBoZXJlIGZvciB0d28gcmVhc29uczoKKwkJCSAqCisJCQkgKiAgIC0gdG8gZmxpcCB0aGUgImNoYXIgKiIgKGZvciB0aGUgcGF0aCkgdG8gInVuc2lnbmVkCisJCQkgKiAgICAgY2hhciAqIiAoZm9yIHRoZSBoYXNoIHN0b3JlZCBhZnRlciBpdCkKKwkJCSAqCisJCQkgKiAgIC0gdG8gZGlzY2FyZCB0aGUgImNvbnN0IjsgdGhpcyBpcyBPSyBiZWNhdXNlIHdlCisJCQkgKiAgICAga25vdyBpdCBwb2ludHMgaW50byBvdXIgbm9uLWNvbnN0ICJidWYiCisJCQkgKi8KKwkJCXJld3JpdGVfaGVyZSA9ICh1bnNpZ25lZCBjaGFyICopKGRlc2MuZW50cnkucGF0aCArCisJCQkJCQkJIHN0cmxlbihkZXNjLmVudHJ5LnBhdGgpICsKKwkJCQkJCQkgMSk7CisJCQlicmVhazsKKwkJfQorCQl1cGRhdGVfdHJlZV9lbnRyeSgmZGVzYyk7CisJfQorCWlmICghcmV3cml0ZV9oZXJlKQorCQlkaWUoImVudHJ5ICUuKnMgbm90IGZvdW5kIGluIHRyZWUgJXMiLCB0b3BsZW4sIHByZWZpeCwKKwkJICAgIG9pZF90b19oZXgob2lkMSkpOworCWlmICgqc3VicGF0aCkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIHRyZWVfb2lkOworCQloYXNoY3B5KHRyZWVfb2lkLmhhc2gsIHJld3JpdGVfaGVyZSk7CisJCXN0YXR1cyA9IHNwbGljZV90cmVlKCZ0cmVlX29pZCwgc3VicGF0aCwgb2lkMiwgJnN1YnRyZWUpOworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJuIHN0YXR1czsKKwkJcmV3cml0ZV93aXRoID0gJnN1YnRyZWU7CisJfSBlbHNlIHsKKwkJcmV3cml0ZV93aXRoID0gb2lkMjsKKwl9CisJaGFzaGNweShyZXdyaXRlX2hlcmUsIHJld3JpdGVfd2l0aC0+aGFzaCk7CisJc3RhdHVzID0gd3JpdGVfb2JqZWN0X2ZpbGUoYnVmLCBzeiwgdHJlZV90eXBlLCByZXN1bHQpOworCWZyZWUoYnVmKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogV2UgYXJlIHRyeWluZyB0byBjb21lIHVwIHdpdGggYSBtZXJnZSBiZXR3ZWVuIG9uZSBhbmQgdHdvIHRoYXQKKyAqIHJlc3VsdHMgaW4gYSB0cmVlIHNoYXBlIHNpbWlsYXIgdG8gb25lLiAgVGhlIHRyZWUgdHdvIG1pZ2h0CisgKiBjb3JyZXNwb25kIHRvIGEgc3VidHJlZSBvZiBvbmUsIGluIHdoaWNoIGNhc2UgaXQgbmVlZHMgdG8gYmUKKyAqIHNoaWZ0ZWQgZG93biBieSBwcmVmaXhpbmcgb3RoZXJ3aXNlIGVtcHR5IGRpcmVjdG9yaWVzLiAgT24gdGhlCisgKiBvdGhlciBoYW5kLCBpdCBjb3VsZCBjb3ZlciB0cmVlIG9uZSBhbmQgd2UgbWlnaHQgbmVlZCB0byBwaWNrIGEKKyAqIHN1YnRyZWUgb2YgaXQuCisgKi8KK3ZvaWQgc2hpZnRfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqaGFzaDEsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmhhc2gyLAorCQlzdHJ1Y3Qgb2JqZWN0X2lkICpzaGlmdGVkLAorCQlpbnQgZGVwdGhfbGltaXQpCit7CisJY2hhciAqYWRkX3ByZWZpeDsKKwljaGFyICpkZWxfcHJlZml4OworCWludCBhZGRfc2NvcmUsIGRlbF9zY29yZTsKKworCS8qCisJICogTkVFRFNXT1JLOiB0aGlzIGxpbWl0cyB0aGUgcmVjdXJzaW9uIGRlcHRoIHRvIGhhcmRjb2RlZAorCSAqIHZhbHVlICcyJyB0byBhdm9pZCBleGNlc3NpdmUgb3ZlcmhlYWQuCisJICovCisJaWYgKCFkZXB0aF9saW1pdCkKKwkJZGVwdGhfbGltaXQgPSAyOworCisJYWRkX3Njb3JlID0gZGVsX3Njb3JlID0gc2NvcmVfdHJlZXMoaGFzaDEsIGhhc2gyKTsKKwlhZGRfcHJlZml4ID0geGNhbGxvYygxLCAxKTsKKwlkZWxfcHJlZml4ID0geGNhbGxvYygxLCAxKTsKKworCS8qCisJICogU2VlIGlmIG9uZSdzIHN1YnRyZWUgcmVzZW1ibGVzIHR3bzsgaWYgc28gd2UgbmVlZCB0byBwcmVmaXgKKwkgKiB0d28gd2l0aCBhIGZldyBmYWtlIHRyZWVzIHRvIG1hdGNoIHRoZSBwcmVmaXguCisJICovCisJbWF0Y2hfdHJlZXMoaGFzaDEsIGhhc2gyLCAmYWRkX3Njb3JlLCAmYWRkX3ByZWZpeCwgIiIsIGRlcHRoX2xpbWl0KTsKKworCS8qCisJICogU2VlIGlmIHR3bydzIHN1YnRyZWUgcmVzZW1ibGVzIG9uZTsgaWYgc28gd2UgbmVlZCB0bworCSAqIHBpY2sgb25seSBzdWJ0cmVlIG9mIHR3by4KKwkgKi8KKwltYXRjaF90cmVlcyhoYXNoMiwgaGFzaDEsICZkZWxfc2NvcmUsICZkZWxfcHJlZml4LCAiIiwgZGVwdGhfbGltaXQpOworCisJLyogQXNzdW1lIHdlIGRvIG5vdCBoYXZlIHRvIGRvIGFueSBzaGlmdGluZyAqLworCW9pZGNweShzaGlmdGVkLCBoYXNoMik7CisKKwlpZiAoYWRkX3Njb3JlIDwgZGVsX3Njb3JlKSB7CisJCS8qIFdlIG5lZWQgdG8gcGljayBhIHN1YnRyZWUgb2YgdHdvICovCisJCXVuc2lnbmVkIHNob3J0IG1vZGU7CisKKwkJaWYgKCEqZGVsX3ByZWZpeCkKKwkJCXJldHVybjsKKworCQlpZiAoZ2V0X3RyZWVfZW50cnkociwgaGFzaDIsIGRlbF9wcmVmaXgsIHNoaWZ0ZWQsICZtb2RlKSkKKwkJCWRpZSgiY2Fubm90IGZpbmQgcGF0aCAlcyBpbiB0cmVlICVzIiwKKwkJCSAgICBkZWxfcHJlZml4LCBvaWRfdG9faGV4KGhhc2gyKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoISphZGRfcHJlZml4KQorCQlyZXR1cm47CisKKwlzcGxpY2VfdHJlZShoYXNoMSwgYWRkX3ByZWZpeCwgaGFzaDIsIHNoaWZ0ZWQpOworfQorCisvKgorICogVGhlIHVzZXIgc2F5cyB0aGUgdHJlZXMgd2lsbCBiZSBzaGlmdGVkIGJ5IHRoaXMgbXVjaC4KKyAqIFVuZm9ydHVuYXRlbHkgd2UgY2Fubm90IGZ1bmRhbWVudGFsbHkgdGVsbCB3aGljaCBvbmUgdG8KKyAqIGJlIHByZWZpeGVkLCBhcyByZWN1cnNpdmUgbWVyZ2UgY2FuIHdvcmsgaW4gZWl0aGVyIGRpcmVjdGlvbi4KKyAqLwordm9pZCBzaGlmdF90cmVlX2J5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpoYXNoMSwKKwkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqaGFzaDIsCisJCSAgIHN0cnVjdCBvYmplY3RfaWQgKnNoaWZ0ZWQsCisJCSAgIGNvbnN0IGNoYXIgKnNoaWZ0X3ByZWZpeCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHN1YjEsIHN1YjI7CisJdW5zaWduZWQgc2hvcnQgbW9kZTEsIG1vZGUyOworCXVuc2lnbmVkIGNhbmRpZGF0ZSA9IDA7CisKKwkvKiBDYW4gaGFzaDIgYmUgYSB0cmVlIGF0IHNoaWZ0X3ByZWZpeCBpbiB0cmVlIGhhc2gxPyAqLworCWlmICghZ2V0X3RyZWVfZW50cnkociwgaGFzaDEsIHNoaWZ0X3ByZWZpeCwgJnN1YjEsICZtb2RlMSkgJiYKKwkgICAgU19JU0RJUihtb2RlMSkpCisJCWNhbmRpZGF0ZSB8PSAxOworCisJLyogQ2FuIGhhc2gxIGJlIGEgdHJlZSBhdCBzaGlmdF9wcmVmaXggaW4gdHJlZSBoYXNoMj8gKi8KKwlpZiAoIWdldF90cmVlX2VudHJ5KHIsIGhhc2gyLCBzaGlmdF9wcmVmaXgsICZzdWIyLCAmbW9kZTIpICYmCisJICAgIFNfSVNESVIobW9kZTIpKQorCQljYW5kaWRhdGUgfD0gMjsKKworCWlmIChjYW5kaWRhdGUgPT0gMykgeworCQkvKiBCb3RoIGFyZSBwbGF1c2libGUgLS0gd2UgbmVlZCB0byBldmFsdWF0ZSB0aGUgc2NvcmUgKi8KKwkJaW50IGJlc3Rfc2NvcmUgPSBzY29yZV90cmVlcyhoYXNoMSwgaGFzaDIpOworCQlpbnQgc2NvcmU7CisKKwkJY2FuZGlkYXRlID0gMDsKKwkJc2NvcmUgPSBzY29yZV90cmVlcygmc3ViMSwgaGFzaDIpOworCQlpZiAoc2NvcmUgPiBiZXN0X3Njb3JlKSB7CisJCQljYW5kaWRhdGUgPSAxOworCQkJYmVzdF9zY29yZSA9IHNjb3JlOworCQl9CisJCXNjb3JlID0gc2NvcmVfdHJlZXMoJnN1YjIsIGhhc2gxKTsKKwkJaWYgKHNjb3JlID4gYmVzdF9zY29yZSkKKwkJCWNhbmRpZGF0ZSA9IDI7CisJfQorCisJaWYgKCFjYW5kaWRhdGUpIHsKKwkJLyogTmVpdGhlciBpcyBwbGF1c2libGUgLS0gZG8gbm90IHNoaWZ0ICovCisJCW9pZGNweShzaGlmdGVkLCBoYXNoMik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY2FuZGlkYXRlID09IDEpCisJCS8qCisJCSAqIHNoaWZ0IHRyZWUyIGRvd24gYnkgYWRkaW5nIHNoaWZ0X3ByZWZpeCBhYm92ZSBpdAorCQkgKiB0byBtYXRjaCB0cmVlMS4KKwkJICovCisJCXNwbGljZV90cmVlKGhhc2gxLCBzaGlmdF9wcmVmaXgsIGhhc2gyLCBzaGlmdGVkKTsKKwllbHNlCisJCS8qCisJCSAqIHNoaWZ0IHRyZWUyIHVwIGJ5IHJlbW92aW5nIHNoaWZ0X3ByZWZpeCBmcm9tIGl0CisJCSAqIHRvIG1hdGNoIHRyZWUxLgorCQkgKi8KKwkJb2lkY3B5KHNoaWZ0ZWQsICZzdWIyKTsKK30KZGlmZiAtLWdpdCBhL21lbS1wb29sLmMgYi9tZW0tcG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyODQxYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZW0tcG9vbC5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogTWVtb3J5IFBvb2wgaW1wbGVtZW50YXRpb24gbG9naWMuCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibWVtLXBvb2wuaCIKKworI2RlZmluZSBCTE9DS19HUk9XVEhfU0laRSAxMDI0KjEwMjQgLSBzaXplb2Yoc3RydWN0IG1wX2Jsb2NrKTsKKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG1wX2Jsb2NrIGFuZCBpbnNlcnQgaXQgYWZ0ZXIgdGhlIGJsb2NrIHNwZWNpZmllZCBpbgorICogYGluc2VydF9hZnRlcmAuIElmIGBpbnNlcnRfYWZ0ZXJgIGlzIE5VTEwsIHRoZW4gaW5zZXJ0IGJsb2NrIGF0IHRoZQorICogaGVhZCBvZiB0aGUgbGlua2VkIGxpc3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXBfYmxvY2sgKm1lbV9wb29sX2FsbG9jX2Jsb2NrKHN0cnVjdCBtZW1fcG9vbCAqbWVtX3Bvb2wsIHNpemVfdCBibG9ja19hbGxvYywgc3RydWN0IG1wX2Jsb2NrICppbnNlcnRfYWZ0ZXIpCit7CisJc3RydWN0IG1wX2Jsb2NrICpwOworCisJbWVtX3Bvb2wtPnBvb2xfYWxsb2MgKz0gc2l6ZW9mKHN0cnVjdCBtcF9ibG9jaykgKyBibG9ja19hbGxvYzsKKwlwID0geG1hbGxvYyhzdF9hZGQoc2l6ZW9mKHN0cnVjdCBtcF9ibG9jayksIGJsb2NrX2FsbG9jKSk7CisKKwlwLT5uZXh0X2ZyZWUgPSAoY2hhciAqKXAtPnNwYWNlOworCXAtPmVuZCA9IHAtPm5leHRfZnJlZSArIGJsb2NrX2FsbG9jOworCisJaWYgKGluc2VydF9hZnRlcikgeworCQlwLT5uZXh0X2Jsb2NrID0gaW5zZXJ0X2FmdGVyLT5uZXh0X2Jsb2NrOworCQlpbnNlcnRfYWZ0ZXItPm5leHRfYmxvY2sgPSBwOworCX0gZWxzZSB7CisJCXAtPm5leHRfYmxvY2sgPSBtZW1fcG9vbC0+bXBfYmxvY2s7CisJCW1lbV9wb29sLT5tcF9ibG9jayA9IHA7CisJfQorCisJcmV0dXJuIHA7Cit9CisKK3ZvaWQgbWVtX3Bvb2xfaW5pdChzdHJ1Y3QgbWVtX3Bvb2wgKiptZW1fcG9vbCwgc2l6ZV90IGluaXRpYWxfc2l6ZSkKK3sKKwlzdHJ1Y3QgbWVtX3Bvb2wgKnBvb2w7CisKKwlpZiAoKm1lbV9wb29sKQorCQlyZXR1cm47CisKKwlwb29sID0geGNhbGxvYygxLCBzaXplb2YoKnBvb2wpKTsKKworCXBvb2wtPmJsb2NrX2FsbG9jID0gQkxPQ0tfR1JPV1RIX1NJWkU7CisKKwlpZiAoaW5pdGlhbF9zaXplID4gMCkKKwkJbWVtX3Bvb2xfYWxsb2NfYmxvY2socG9vbCwgaW5pdGlhbF9zaXplLCBOVUxMKTsKKworCSptZW1fcG9vbCA9IHBvb2w7Cit9CisKK3ZvaWQgbWVtX3Bvb2xfZGlzY2FyZChzdHJ1Y3QgbWVtX3Bvb2wgKm1lbV9wb29sLCBpbnQgaW52YWxpZGF0ZV9tZW1vcnkpCit7CisJc3RydWN0IG1wX2Jsb2NrICpibG9jaywgKmJsb2NrX3RvX2ZyZWU7CisKKwlibG9jayA9IG1lbV9wb29sLT5tcF9ibG9jazsKKwl3aGlsZSAoYmxvY2spCisJeworCQlibG9ja190b19mcmVlID0gYmxvY2s7CisJCWJsb2NrID0gYmxvY2stPm5leHRfYmxvY2s7CisKKwkJaWYgKGludmFsaWRhdGVfbWVtb3J5KQorCQkJbWVtc2V0KGJsb2NrX3RvX2ZyZWUtPnNwYWNlLCAweERELCAoKGNoYXIgKilibG9ja190b19mcmVlLT5lbmQpIC0gKChjaGFyICopYmxvY2tfdG9fZnJlZS0+c3BhY2UpKTsKKworCQlmcmVlKGJsb2NrX3RvX2ZyZWUpOworCX0KKworCWZyZWUobWVtX3Bvb2wpOworfQorCit2b2lkICptZW1fcG9vbF9hbGxvYyhzdHJ1Y3QgbWVtX3Bvb2wgKm1lbV9wb29sLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBtcF9ibG9jayAqcCA9IE5VTEw7CisJdm9pZCAqcjsKKworCS8qIHJvdW5kIHVwIHRvIGEgJ3VpbnRtYXhfdCcgYWxpZ25tZW50ICovCisJaWYgKGxlbiAmIChzaXplb2YodWludG1heF90KSAtIDEpKQorCQlsZW4gKz0gc2l6ZW9mKHVpbnRtYXhfdCkgLSAobGVuICYgKHNpemVvZih1aW50bWF4X3QpIC0gMSkpOworCisJaWYgKG1lbV9wb29sLT5tcF9ibG9jayAmJgorCSAgICBtZW1fcG9vbC0+bXBfYmxvY2stPmVuZCAtIG1lbV9wb29sLT5tcF9ibG9jay0+bmV4dF9mcmVlID49IGxlbikKKwkJcCA9IG1lbV9wb29sLT5tcF9ibG9jazsKKworCWlmICghcCkgeworCQlpZiAobGVuID49IChtZW1fcG9vbC0+YmxvY2tfYWxsb2MgLyAyKSkKKwkJCXJldHVybiBtZW1fcG9vbF9hbGxvY19ibG9jayhtZW1fcG9vbCwgbGVuLCBtZW1fcG9vbC0+bXBfYmxvY2spOworCisJCXAgPSBtZW1fcG9vbF9hbGxvY19ibG9jayhtZW1fcG9vbCwgbWVtX3Bvb2wtPmJsb2NrX2FsbG9jLCBOVUxMKTsKKwl9CisKKwlyID0gcC0+bmV4dF9mcmVlOworCXAtPm5leHRfZnJlZSArPSBsZW47CisJcmV0dXJuIHI7Cit9CisKK3ZvaWQgKm1lbV9wb29sX2NhbGxvYyhzdHJ1Y3QgbWVtX3Bvb2wgKm1lbV9wb29sLCBzaXplX3QgY291bnQsIHNpemVfdCBzaXplKQoreworCXNpemVfdCBsZW4gPSBzdF9tdWx0KGNvdW50LCBzaXplKTsKKwl2b2lkICpyID0gbWVtX3Bvb2xfYWxsb2MobWVtX3Bvb2wsIGxlbik7CisJbWVtc2V0KHIsIDAsIGxlbik7CisJcmV0dXJuIHI7Cit9CisKK2ludCBtZW1fcG9vbF9jb250YWlucyhzdHJ1Y3QgbWVtX3Bvb2wgKm1lbV9wb29sLCB2b2lkICptZW0pCit7CisJc3RydWN0IG1wX2Jsb2NrICpwOworCisJLyogQ2hlY2sgaWYgbWVtb3J5IGlzIGFsbG9jYXRlZCBpbiBhIGJsb2NrICovCisJZm9yIChwID0gbWVtX3Bvb2wtPm1wX2Jsb2NrOyBwOyBwID0gcC0+bmV4dF9ibG9jaykKKwkJaWYgKChtZW0gPj0gKCh2b2lkICopcC0+c3BhY2UpKSAmJgorCQkgICAgKG1lbSA8ICgodm9pZCAqKXAtPmVuZCkpKQorCQkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtZW1fcG9vbF9jb21iaW5lKHN0cnVjdCBtZW1fcG9vbCAqZHN0LCBzdHJ1Y3QgbWVtX3Bvb2wgKnNyYykKK3sKKwlzdHJ1Y3QgbXBfYmxvY2sgKnA7CisKKwkvKiBBcHBlbmQgdGhlIGJsb2NrcyBmcm9tIHNyYyB0byBkc3QgKi8KKwlpZiAoZHN0LT5tcF9ibG9jayAmJiBzcmMtPm1wX2Jsb2NrKSB7CisJCS8qCisJCSAqIHNyYyBhbmQgZHN0IGhhdmUgYmxvY2tzLCBhcHBlbmQKKwkJICogYmxvY2tzIGZyb20gc3JjIHRvIGRzdC4KKwkJICovCisJCXAgPSBkc3QtPm1wX2Jsb2NrOworCQl3aGlsZSAocC0+bmV4dF9ibG9jaykKKwkJCXAgPSBwLT5uZXh0X2Jsb2NrOworCisJCXAtPm5leHRfYmxvY2sgPSBzcmMtPm1wX2Jsb2NrOworCX0gZWxzZSBpZiAoc3JjLT5tcF9ibG9jaykgeworCQkvKgorCQkgKiBzcmMgaGFzIGJsb2NrcywgZHN0IGlzIGVtcHR5LgorCQkgKi8KKwkJZHN0LT5tcF9ibG9jayA9IHNyYy0+bXBfYmxvY2s7CisJfSBlbHNlIHsKKwkJLyogc3JjIGlzIGVtcHR5LCBub3RoaW5nIHRvIGRvLiAqLworCX0KKworCWRzdC0+cG9vbF9hbGxvYyArPSBzcmMtPnBvb2xfYWxsb2M7CisJc3JjLT5wb29sX2FsbG9jID0gMDsKKwlzcmMtPm1wX2Jsb2NrID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL21lbS1wb29sLmggYi9tZW0tcG9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OWQzYzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZW0tcG9vbC5oCkBAIC0wLDAgKzEsNTcgQEAKKyNpZm5kZWYgTUVNX1BPT0xfSAorI2RlZmluZSBNRU1fUE9PTF9ICisKK3N0cnVjdCBtcF9ibG9jayB7CisJc3RydWN0IG1wX2Jsb2NrICpuZXh0X2Jsb2NrOworCWNoYXIgKm5leHRfZnJlZTsKKwljaGFyICplbmQ7CisJdWludG1heF90IHNwYWNlW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCitzdHJ1Y3QgbWVtX3Bvb2wgeworCXN0cnVjdCBtcF9ibG9jayAqbXBfYmxvY2s7CisKKwkvKgorCSAqIFRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIG1lbW9yeSB0byBncm93IHRoZSBwb29sIGJ5LgorCSAqIFRoaXMgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlIHRoZSBvdmVyaGVhZCBmb3IgdGhlIG1wX2Jsb2NrLgorCSAqLworCXNpemVfdCBibG9ja19hbGxvYzsKKworCS8qIFRoZSB0b3RhbCBhbW91bnQgb2YgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgcG9vbC4gKi8KKwlzaXplX3QgcG9vbF9hbGxvYzsKK307CisKKy8qCisgKiBJbml0aWFsaXplIG1lbV9wb29sIHdpdGggc3BlY2lmaWVkIGluaXRpYWwgc2l6ZS4KKyAqLwordm9pZCBtZW1fcG9vbF9pbml0KHN0cnVjdCBtZW1fcG9vbCAqKm1lbV9wb29sLCBzaXplX3QgaW5pdGlhbF9zaXplKTsKKworLyoKKyAqIERpc2NhcmQgYSBtZW1vcnkgcG9vbCBhbmQgZnJlZSBhbGwgdGhlIG1lbW9yeSBpdCBpcyByZXNwb25zaWJsZSBmb3IuCisgKi8KK3ZvaWQgbWVtX3Bvb2xfZGlzY2FyZChzdHJ1Y3QgbWVtX3Bvb2wgKm1lbV9wb29sLCBpbnQgaW52YWxpZGF0ZV9tZW1vcnkpOworCisvKgorICogQWxsb2MgbWVtb3J5IGZyb20gdGhlIG1lbV9wb29sLgorICovCit2b2lkICptZW1fcG9vbF9hbGxvYyhzdHJ1Y3QgbWVtX3Bvb2wgKnBvb2wsIHNpemVfdCBsZW4pOworCisvKgorICogQWxsb2NhdGUgYW5kIHplcm8gbWVtb3J5IGZyb20gdGhlIG1lbW9yeSBwb29sLgorICovCit2b2lkICptZW1fcG9vbF9jYWxsb2Moc3RydWN0IG1lbV9wb29sICpwb29sLCBzaXplX3QgY291bnQsIHNpemVfdCBzaXplKTsKKworLyoKKyAqIE1vdmUgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlICdzcmMnIHBvb2wgdG8gdGhlICdkc3QnIHBvb2wuIFRoZSAnc3JjJworICogcG9vbCB3aWxsIGJlIGVtcHR5IGFuZCBub3QgY29udGFpbiBhbnkgbWVtb3J5LiBJdCBzdGlsbCBuZWVkcyB0byBiZSBmcmVlJ2QKKyAqIHdpdGggYSBjYWxsIHRvIGBtZW1fcG9vbF9kaXNjYXJkYC4KKyAqLwordm9pZCBtZW1fcG9vbF9jb21iaW5lKHN0cnVjdCBtZW1fcG9vbCAqZHN0LCBzdHJ1Y3QgbWVtX3Bvb2wgKnNyYyk7CisKKy8qCisgKiBDaGVjayBpZiBhIG1lbW9yeSBwb2ludGVkIGF0IGJ5ICdtZW0nIGlzIHBhcnQgb2YgdGhlIHJhbmdlIG9mCisgKiBtZW1vcnkgbWFuYWdlZCBieSB0aGUgc3BlY2lmaWVkIG1lbV9wb29sLgorICovCitpbnQgbWVtX3Bvb2xfY29udGFpbnMoc3RydWN0IG1lbV9wb29sICptZW1fcG9vbCwgdm9pZCAqbWVtKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9tZXJnZS1ibG9icy5jIGIvbWVyZ2UtYmxvYnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTBhMGU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2UtYmxvYnMuYwpAQCAtMCwwICsxLDEwMSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJsbC1tZXJnZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJtZXJnZS1ibG9icy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorCitzdGF0aWMgaW50IGZpbGxfbW1maWxlX2Jsb2IobW1maWxlX3QgKmYsIHN0cnVjdCBibG9iICpvYmopCit7CisJdm9pZCAqYnVmOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwlidWYgPSByZWFkX29iamVjdF9maWxlKCZvYmotPm9iamVjdC5vaWQsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWYpCisJCXJldHVybiAtMTsKKwlpZiAodHlwZSAhPSBPQkpfQkxPQikgeworCQlmcmVlKGJ1Zik7CisJCXJldHVybiAtMTsKKwl9CisJZi0+cHRyID0gYnVmOworCWYtPnNpemUgPSBzaXplOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmcmVlX21tZmlsZShtbWZpbGVfdCAqZikKK3sKKwlmcmVlKGYtPnB0cik7Cit9CisKK3N0YXRpYyB2b2lkICp0aHJlZV93YXlfZmlsZW1lcmdlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSBjb25zdCBjaGFyICpwYXRoLAorCQkJCSBtbWZpbGVfdCAqYmFzZSwKKwkJCQkgbW1maWxlX3QgKm91ciwKKwkJCQkgbW1maWxlX3QgKnRoZWlyLAorCQkJCSB1bnNpZ25lZCBsb25nICpzaXplKQoreworCWludCBtZXJnZV9zdGF0dXM7CisJbW1idWZmZXJfdCByZXM7CisKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIGJ5IGNtZF9tZXJnZV90cmVlLCB3aGljaAorCSAqIGRvZXMgbm90IHJlc3BlY3QgdGhlIG1lcmdlLmNvbmZsaWN0c3R5bGUgb3B0aW9uLgorCSAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgYSBsYWJlbCBmb3IgdGhlCisJICogY29tbW9uIGFuY2VzdG9yLgorCSAqLworCW1lcmdlX3N0YXR1cyA9IGxsX21lcmdlKCZyZXMsIHBhdGgsIGJhc2UsIE5VTEwsCisJCQkJb3VyLCAiLm91ciIsIHRoZWlyLCAiLnRoZWlyIiwKKwkJCQlpc3RhdGUsIE5VTEwpOworCWlmIChtZXJnZV9zdGF0dXMgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCSpzaXplID0gcmVzLnNpemU7CisJcmV0dXJuIHJlcy5wdHI7Cit9CisKK3ZvaWQgKm1lcmdlX2Jsb2JzKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoLAorCQkgIHN0cnVjdCBibG9iICpiYXNlLCBzdHJ1Y3QgYmxvYiAqb3VyLAorCQkgIHN0cnVjdCBibG9iICp0aGVpciwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwl2b2lkICpyZXMgPSBOVUxMOworCW1tZmlsZV90IGYxLCBmMiwgY29tbW9uOworCisJLyoKKwkgKiBSZW1vdmVkIGluIGVpdGhlciBicmFuY2g/CisJICoKKwkgKiBOT1RFISBUaGlzIGRlcGVuZHMgb24gdGhlIGNhbGxlciBoYXZpbmcgZG9uZSB0aGUKKwkgKiBwcm9wZXIgd2FybmluZyBhYm91dCByZW1vdmluZyBhIGZpbGUgdGhhdCBnb3QKKwkgKiBtb2RpZmllZCBpbiB0aGUgb3RoZXIgYnJhbmNoIQorCSAqLworCWlmICghb3VyIHx8ICF0aGVpcikgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCWlmIChiYXNlKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmICghb3VyKQorCQkJb3VyID0gdGhlaXI7CisJCXJldHVybiByZWFkX29iamVjdF9maWxlKCZvdXItPm9iamVjdC5vaWQsICZ0eXBlLCBzaXplKTsKKwl9CisKKwlpZiAoZmlsbF9tbWZpbGVfYmxvYigmZjEsIG91cikgPCAwKQorCQlnb3RvIG91dF9ub19tbWZpbGU7CisJaWYgKGZpbGxfbW1maWxlX2Jsb2IoJmYyLCB0aGVpcikgPCAwKQorCQlnb3RvIG91dF9mcmVlX2YxOworCisJaWYgKGJhc2UpIHsKKwkJaWYgKGZpbGxfbW1maWxlX2Jsb2IoJmNvbW1vbiwgYmFzZSkgPCAwKQorCQkJZ290byBvdXRfZnJlZV9mMl9mMTsKKwl9IGVsc2UgeworCQljb21tb24ucHRyID0geHN0cmR1cCgiIik7CisJCWNvbW1vbi5zaXplID0gMDsKKwl9CisJcmVzID0gdGhyZWVfd2F5X2ZpbGVtZXJnZShpc3RhdGUsIHBhdGgsICZjb21tb24sICZmMSwgJmYyLCBzaXplKTsKKwlmcmVlX21tZmlsZSgmY29tbW9uKTsKK291dF9mcmVlX2YyX2YxOgorCWZyZWVfbW1maWxlKCZmMik7CitvdXRfZnJlZV9mMToKKwlmcmVlX21tZmlsZSgmZjEpOworb3V0X25vX21tZmlsZToKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvbWVyZ2UtYmxvYnMuaCBiL21lcmdlLWJsb2JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL21lcmdlLWJsb2JzLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBNRVJHRV9CTE9CU19ICisjZGVmaW5lIE1FUkdFX0JMT0JTX0gKKworc3RydWN0IGJsb2I7CitzdHJ1Y3QgaW5kZXhfc3RhdGU7CisKK3ZvaWQgKm1lcmdlX2Jsb2JzKHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICosCisJCSAgc3RydWN0IGJsb2IgKiwgc3RydWN0IGJsb2IgKiwKKwkJICBzdHJ1Y3QgYmxvYiAqLCB1bnNpZ25lZCBsb25nICopOworCisjZW5kaWYgLyogTUVSR0VfQkxPQlNfSCAqLwpkaWZmIC0tZ2l0IGEvbWVyZ2UtcmVjdXJzaXZlLmMgYi9tZXJnZS1yZWN1cnNpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjk0OGVhCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2UtcmVjdXJzaXZlLmMKQEAgLTAsMCArMSwzOTA0IEBACisvKgorICogUmVjdXJzaXZlIE1lcmdlIGFsZ29yaXRobSBzdG9sZW4gZnJvbSBnaXQtbWVyZ2UtcmVjdXJzaXZlLnB5IGJ5CisgKiBGcmVkcmlrIEt1aXZpbmVuLgorICogVGhlIHRoaWV2ZXMgd2VyZSBBbGV4IFJpZXNlbiBhbmQgSm9oYW5uZXMgU2NoaW5kZWxpbiwgaW4gSnVuZS9KdWx5IDIwMDYKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibWVyZ2UtcmVjdXJzaXZlLmgiCisKKyNpbmNsdWRlICJhZHZpY2UuaCIKKyNpbmNsdWRlICJhbGxvYy5oIgorI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJsbC1tZXJnZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKworc3RydWN0IG1lcmdlX29wdGlvbnNfaW50ZXJuYWwgeworCWludCBjYWxsX2RlcHRoOworCWludCBuZWVkZWRfcmVuYW1lX2xpbWl0OworCXN0cnVjdCBoYXNobWFwIGN1cnJlbnRfZmlsZV9kaXJfc2V0OworCXN0cnVjdCBzdHJpbmdfbGlzdCBkZl9jb25mbGljdF9maWxlX3NldDsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgdW5wYWNrX29wdHM7CisJc3RydWN0IGluZGV4X3N0YXRlIG9yaWdfaW5kZXg7Cit9OworCitzdHJ1Y3QgcGF0aF9oYXNobWFwX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlOworCWNoYXIgcGF0aFtGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyBpbnQgcGF0aF9oYXNobWFwX2NtcChjb25zdCB2b2lkICpjbXBfZGF0YSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZXB0ciwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnlfb3Jfa2V5LAorCQkJICAgIGNvbnN0IHZvaWQgKmtleWRhdGEpCit7CisJY29uc3Qgc3RydWN0IHBhdGhfaGFzaG1hcF9lbnRyeSAqYSwgKmI7CisJY29uc3QgY2hhciAqa2V5ID0ga2V5ZGF0YTsKKworCWEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IHBhdGhfaGFzaG1hcF9lbnRyeSwgZSk7CisJYiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIGNvbnN0IHN0cnVjdCBwYXRoX2hhc2htYXBfZW50cnksIGUpOworCisJaWYgKGlnbm9yZV9jYXNlKQorCQlyZXR1cm4gc3RyY2FzZWNtcChhLT5wYXRoLCBrZXkgPyBrZXkgOiBiLT5wYXRoKTsKKwllbHNlCisJCXJldHVybiBzdHJjbXAoYS0+cGF0aCwga2V5ID8ga2V5IDogYi0+cGF0aCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGF0aF9oYXNoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIGlnbm9yZV9jYXNlID8gc3RyaWhhc2gocGF0aCkgOiBzdHJoYXNoKHBhdGgpOworfQorCisvKgorICogRm9yIGRpcl9yZW5hbWVfZW50cnksIGRpcmVjdG9yeSBuYW1lcyBhcmUgc3RvcmVkIGFzIGEgZnVsbCBwYXRoIGZyb20gdGhlCisgKiB0b3BsZXZlbCBvZiB0aGUgcmVwb3NpdG9yeSBhbmQgZG8gbm90IGluY2x1ZGUgYSB0cmFpbGluZyAnLycuICBBbHNvOgorICoKKyAqICAgZGlyOiAgICAgICAgICAgICAgICBvcmlnaW5hbCBuYW1lIG9mIGRpcmVjdG9yeSBiZWluZyByZW5hbWVkCisgKiAgIG5vbl91bmlxdWVfbmV3X2RpcjogaWYgdHJ1ZSwgY291bGQgbm90IGRldGVybWluZSBuZXdfZGlyCisgKiAgIG5ld19kaXI6ICAgICAgICAgICAgZmluYWwgbmFtZSBvZiBkaXJlY3RvcnkgYmVpbmcgcmVuYW1lZAorICogICBwb3NzaWJsZV9uZXdfZGlyczogIHRlbXBvcmFyeSB1c2VkIHRvIGhlbHAgZGV0ZXJtaW5lIG5ld19kaXI7IHNlZSBjb21tZW50cworICogICAgICAgICAgICAgICAgICAgICAgIGluIGdldF9kaXJlY3RvcnlfcmVuYW1lcygpIGZvciBkZXRhaWxzCisgKi8KK3N0cnVjdCBkaXJfcmVuYW1lX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJY2hhciAqZGlyOworCXVuc2lnbmVkIG5vbl91bmlxdWVfbmV3X2RpcjoxOworCXN0cnVjdCBzdHJidWYgbmV3X2RpcjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcG9zc2libGVfbmV3X2RpcnM7Cit9OworCitzdGF0aWMgc3RydWN0IGRpcl9yZW5hbWVfZW50cnkgKmRpcl9yZW5hbWVfZmluZF9lbnRyeShzdHJ1Y3QgaGFzaG1hcCAqaGFzaG1hcCwKKwkJCQkJCSAgICAgIGNoYXIgKmRpcikKK3sKKwlzdHJ1Y3QgZGlyX3JlbmFtZV9lbnRyeSBrZXk7CisKKwlpZiAoZGlyID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWhhc2htYXBfZW50cnlfaW5pdCgma2V5LmVudCwgc3RyaGFzaChkaXIpKTsKKwlrZXkuZGlyID0gZGlyOworCXJldHVybiBoYXNobWFwX2dldF9lbnRyeShoYXNobWFwLCAma2V5LCBlbnQsIE5VTEwpOworfQorCitzdGF0aWMgaW50IGRpcl9yZW5hbWVfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCSAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVwdHIsCisJCQkgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCQkgIGNvbnN0IHZvaWQgKnVudXNlZF9rZXlkYXRhKQoreworCWNvbnN0IHN0cnVjdCBkaXJfcmVuYW1lX2VudHJ5ICplMSwgKmUyOworCisJZTEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IGRpcl9yZW5hbWVfZW50cnksIGVudCk7CisJZTIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3QgZGlyX3JlbmFtZV9lbnRyeSwgZW50KTsKKworCXJldHVybiBzdHJjbXAoZTEtPmRpciwgZTItPmRpcik7Cit9CisKK3N0YXRpYyB2b2lkIGRpcl9yZW5hbWVfaW5pdChzdHJ1Y3QgaGFzaG1hcCAqbWFwKQoreworCWhhc2htYXBfaW5pdChtYXAsIGRpcl9yZW5hbWVfY21wLCBOVUxMLCAwKTsKK30KKworc3RhdGljIHZvaWQgZGlyX3JlbmFtZV9lbnRyeV9pbml0KHN0cnVjdCBkaXJfcmVuYW1lX2VudHJ5ICplbnRyeSwKKwkJCQkgIGNoYXIgKmRpcmVjdG9yeSkKK3sKKwloYXNobWFwX2VudHJ5X2luaXQoJmVudHJ5LT5lbnQsIHN0cmhhc2goZGlyZWN0b3J5KSk7CisJZW50cnktPmRpciA9IGRpcmVjdG9yeTsKKwllbnRyeS0+bm9uX3VuaXF1ZV9uZXdfZGlyID0gMDsKKwlzdHJidWZfaW5pdCgmZW50cnktPm5ld19kaXIsIDApOworCXN0cmluZ19saXN0X2luaXQoJmVudHJ5LT5wb3NzaWJsZV9uZXdfZGlycywgMCk7Cit9CisKK3N0cnVjdCBjb2xsaXNpb25fZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwljaGFyICp0YXJnZXRfZmlsZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc291cmNlX2ZpbGVzOworCXVuc2lnbmVkIHJlcG9ydGVkX2FscmVhZHk6MTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY29sbGlzaW9uX2VudHJ5ICpjb2xsaXNpb25fZmluZF9lbnRyeShzdHJ1Y3QgaGFzaG1hcCAqaGFzaG1hcCwKKwkJCQkJCSAgICBjaGFyICp0YXJnZXRfZmlsZSkKK3sKKwlzdHJ1Y3QgY29sbGlzaW9uX2VudHJ5IGtleTsKKworCWhhc2htYXBfZW50cnlfaW5pdCgma2V5LmVudCwgc3RyaGFzaCh0YXJnZXRfZmlsZSkpOworCWtleS50YXJnZXRfZmlsZSA9IHRhcmdldF9maWxlOworCXJldHVybiBoYXNobWFwX2dldF9lbnRyeShoYXNobWFwLCAma2V5LCBlbnQsIE5VTEwpOworfQorCitzdGF0aWMgaW50IGNvbGxpc2lvbl9jbXAoY29uc3Qgdm9pZCAqdW51c2VkX2NtcF9kYXRhLAorCQkJIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCQkgY29uc3Qgdm9pZCAqdW51c2VkX2tleWRhdGEpCit7CisJY29uc3Qgc3RydWN0IGNvbGxpc2lvbl9lbnRyeSAqZTEsICplMjsKKworCWUxID0gY29udGFpbmVyX29mKGVwdHIsIGNvbnN0IHN0cnVjdCBjb2xsaXNpb25fZW50cnksIGVudCk7CisJZTIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3QgY29sbGlzaW9uX2VudHJ5LCBlbnQpOworCisJcmV0dXJuIHN0cmNtcChlMS0+dGFyZ2V0X2ZpbGUsIGUyLT50YXJnZXRfZmlsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxpc2lvbl9pbml0KHN0cnVjdCBoYXNobWFwICptYXApCit7CisJaGFzaG1hcF9pbml0KG1hcCwgY29sbGlzaW9uX2NtcCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoX291dHB1dChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0KQoreworCWlmIChvcHQtPmJ1ZmZlcl9vdXRwdXQgPCAyICYmIG9wdC0+b2J1Zi5sZW4pIHsKKwkJZnB1dHMob3B0LT5vYnVmLmJ1Ziwgc3Rkb3V0KTsKKwkJc3RyYnVmX3Jlc2V0KCZvcHQtPm9idWYpOworCX0KK30KKworc3RhdGljIGludCBlcnIoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwgY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisKKwlpZiAob3B0LT5idWZmZXJfb3V0cHV0IDwgMikKKwkJZmx1c2hfb3V0cHV0KG9wdCk7CisJZWxzZSB7CisJCXN0cmJ1Zl9jb21wbGV0ZSgmb3B0LT5vYnVmLCAnXG4nKTsKKwkJc3RyYnVmX2FkZHN0cigmb3B0LT5vYnVmLCAiZXJyb3I6ICIpOworCX0KKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJc3RyYnVmX3ZhZGRmKCZvcHQtPm9idWYsIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlpZiAob3B0LT5idWZmZXJfb3V0cHV0ID4gMSkKKwkJc3RyYnVmX2FkZGNoKCZvcHQtPm9idWYsICdcbicpOworCWVsc2UgeworCQllcnJvcigiJXMiLCBvcHQtPm9idWYuYnVmKTsKKwkJc3RyYnVmX3Jlc2V0KCZvcHQtPm9idWYpOworCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCB0cmVlICpzaGlmdF90cmVlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQkgICAgICBzdHJ1Y3QgdHJlZSAqb25lLCBzdHJ1Y3QgdHJlZSAqdHdvLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnN1YnRyZWVfc2hpZnQpCit7CisJc3RydWN0IG9iamVjdF9pZCBzaGlmdGVkOworCisJaWYgKCEqc3VidHJlZV9zaGlmdCkgeworCQlzaGlmdF90cmVlKHJlcG8sICZvbmUtPm9iamVjdC5vaWQsICZ0d28tPm9iamVjdC5vaWQsICZzaGlmdGVkLCAwKTsKKwl9IGVsc2UgeworCQlzaGlmdF90cmVlX2J5KHJlcG8sICZvbmUtPm9iamVjdC5vaWQsICZ0d28tPm9iamVjdC5vaWQsICZzaGlmdGVkLAorCQkJICAgICAgc3VidHJlZV9zaGlmdCk7CisJfQorCWlmIChvaWRlcSgmdHdvLT5vYmplY3Qub2lkLCAmc2hpZnRlZCkpCisJCXJldHVybiB0d287CisJcmV0dXJuIGxvb2t1cF90cmVlKHJlcG8sICZzaGlmdGVkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9jb21taXRfdHJlZShzdHJ1Y3QgY29tbWl0ICpjLCBzdHJ1Y3QgdHJlZSAqdCkKK3sKKwljLT5tYXliZV90cmVlID0gdDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKm1ha2VfdmlydHVhbF9jb21taXQoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkJCSAgc3RydWN0IHRyZWUgKnRyZWUsCisJCQkJCSAgY29uc3QgY2hhciAqY29tbWVudCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBhbGxvY19jb21taXRfbm9kZShyZXBvKTsKKworCXNldF9tZXJnZV9yZW1vdGVfZGVzYyhjb21taXQsIGNvbW1lbnQsIChzdHJ1Y3Qgb2JqZWN0ICopY29tbWl0KTsKKwlzZXRfY29tbWl0X3RyZWUoY29tbWl0LCB0cmVlKTsKKwljb21taXQtPm9iamVjdC5wYXJzZWQgPSAxOworCXJldHVybiBjb21taXQ7Cit9CisKK2VudW0gcmVuYW1lX3R5cGUgeworCVJFTkFNRV9OT1JNQUwgPSAwLAorCVJFTkFNRV9WSUFfRElSLAorCVJFTkFNRV9BREQsCisJUkVOQU1FX0RFTEVURSwKKwlSRU5BTUVfT05FX0ZJTEVfVE9fT05FLAorCVJFTkFNRV9PTkVfRklMRV9UT19UV08sCisJUkVOQU1FX1RXT19GSUxFU19UT19PTkUKK307CisKKy8qCisgKiBTaW5jZSB3ZSB3YW50IHRvIHdyaXRlIHRoZSBpbmRleCBldmVudHVhbGx5LCB3ZSBjYW5ub3QgcmV1c2UgdGhlIGluZGV4CisgKiBmb3IgdGhlc2UgKHRlbXBvcmFyeSkgZGF0YS4KKyAqLworc3RydWN0IHN0YWdlX2RhdGEgeworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjIHN0YWdlc1s0XTsgLyogbW9zdGx5IGZvciBvaWQgJiBtb2RlOyBtYXliZSBwYXRoICovCisJc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvICpyZW5hbWVfY29uZmxpY3RfaW5mbzsKKwl1bnNpZ25lZCBwcm9jZXNzZWQ6MTsKK307CisKK3N0cnVjdCByZW5hbWUgeworCXVuc2lnbmVkIHByb2Nlc3NlZDoxOworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyOworCWNvbnN0IGNoYXIgKmJyYW5jaDsgLyogYnJhbmNoIHRoYXQgdGhlIHJlbmFtZSBvY2N1cnJlZCBvbiAqLworCS8qCisJICogSWYgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gYWZmZWN0ZWQgdGhpcyByZW5hbWUsIHdoYXQgd2FzIGl0cworCSAqIG9yaWdpbmFsIHR5cGUgKCdBJyBvciAnUicpIGFuZCBpdCdzIG9yaWdpbmFsIGRlc3RpbmF0aW9uIGJlZm9yZQorCSAqIHRoZSBkaXJlY3RvcnkgcmVuYW1lIChvdGhlcndpc2UsICdcMCcgYW5kIE5VTEwgZm9yIHRoZXNlIHR3byB2YXJzKS4KKwkgKi8KKwljaGFyIGRpcl9yZW5hbWVfb3JpZ2luYWxfdHlwZTsKKwljaGFyICpkaXJfcmVuYW1lX29yaWdpbmFsX2Rlc3Q7CisJLyoKKwkgKiBQdXJwb3NlIG9mIHNyY19lbnRyeSBhbmQgZHN0X2VudHJ5OgorCSAqCisJICogSWYgJ2JlZm9yZScgaXMgcmVuYW1lZCB0byAnYWZ0ZXInIHRoZW4gc3JjX2VudHJ5IHdpbGwgY29udGFpbgorCSAqIHRoZSB2ZXJzaW9ucyBvZiAnYmVmb3JlJyBmcm9tIHRoZSBtZXJnZV9iYXNlLCBIRUFELCBhbmQgTUVSR0UgaW4KKwkgKiBzdGFnZXMgMSwgMiwgYW5kIDM7IGRzdF9lbnRyeSB3aWxsIGNvbnRhaW4gdGhlIHJlc3BlY3RpdmUKKwkgKiB2ZXJzaW9ucyBvZiAnYWZ0ZXInIGluIGNvcnJlc3BvbmRpbmcgbG9jYXRpb25zLiAgVGh1cywgd2UgaGF2ZSBhCisJICogdG90YWwgb2Ygc2l4IG1vZGVzIGFuZCBvaWRzLCB0aG91Z2ggc29tZSB3aWxsIGJlIG51bGwuICAoU3RhZ2UgMAorCSAqIGlzIGlnbm9yZWQ7IHdlJ3JlIGludGVyZXN0ZWQgaW4gaGFuZGxpbmcgY29uZmxpY3RzLikKKwkgKgorCSAqIFNpbmNlIHdlIGRvbid0IHR1cm4gb24gYnJlYWstcmV3cml0ZXMgYnkgZGVmYXVsdCwgbmVpdGhlcgorCSAqIHNyY19lbnRyeSBub3IgZHN0X2VudHJ5IGNhbiBoYXZlIGFsbCB0aHJlZSBvZiB0aGVpciBzdGFnZXMgaGF2ZQorCSAqIG5vbi1udWxsIG9pZHMsIG1lYW5pbmcgYXQgbW9zdCBmb3VyIG9mIHRoZSBzaXggd2lsbCBiZSBub24tbnVsbC4KKwkgKiBBbHNvLCBzaW5jZSB0aGlzIGlzIGEgcmVuYW1lLCBib3RoIHNyY19lbnRyeSBhbmQgZHN0X2VudHJ5IHdpbGwKKwkgKiBoYXZlIGF0IGxlYXN0IG9uZSBub24tbnVsbCBvaWQsIG1lYW5pbmcgYXQgbGVhc3QgdHdvIHdpbGwgYmUKKwkgKiBub24tbnVsbC4gIE9mIHRoZSBzaXggb2lkcywgYSB0eXBpY2FsIHJlbmFtZSB3aWxsIGhhdmUgdGhyZWUgYmUKKwkgKiBub24tbnVsbC4gIE9ubHkgdHdvIGltcGxpZXMgYSByZW5hbWUvZGVsZXRlLCBhbmQgZm91ciBpbXBsaWVzIGEKKwkgKiByZW5hbWUvYWRkLgorCSAqLworCXN0cnVjdCBzdGFnZV9kYXRhICpzcmNfZW50cnk7CisJc3RydWN0IHN0YWdlX2RhdGEgKmRzdF9lbnRyeTsKK307CisKK3N0cnVjdCByZW5hbWVfY29uZmxpY3RfaW5mbyB7CisJZW51bSByZW5hbWVfdHlwZSByZW5hbWVfdHlwZTsKKwlzdHJ1Y3QgcmVuYW1lICpyZW4xOworCXN0cnVjdCByZW5hbWUgKnJlbjI7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcmVuYW1lX2NvbmZsaWN0X2luZm8oZW51bSByZW5hbWVfdHlwZSByZW5hbWVfdHlwZSwKKwkJCQkJICAgICAgc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCQkJICAgICAgc3RydWN0IHJlbmFtZSAqcmVuMSwKKwkJCQkJICAgICAgc3RydWN0IHJlbmFtZSAqcmVuMikKK3sKKwlzdHJ1Y3QgcmVuYW1lX2NvbmZsaWN0X2luZm8gKmNpOworCisJLyoKKwkgKiBXaGVuIHdlIGhhdmUgdHdvIHJlbmFtZXMgaW52b2x2ZWQsIGl0J3MgZWFzaWVzdCB0byBnZXQgdGhlCisJICogY29ycmVjdCB0aGluZ3MgaW50byBzdGFnZSAyIGFuZCAzLCBhbmQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisJICogY29udGVudCBtZXJnZSBwdXRzIEhFQUQgYmVmb3JlIHRoZSBvdGhlciBicmFuY2ggaWYgd2UganVzdAorCSAqIGVuc3VyZSB0aGF0IGJyYW5jaDEgPT0gb3B0LT5icmFuY2gxLiAgU28sIHNpbXBseSBmbGlwIGFyZ3VtZW50cworCSAqIGFyb3VuZCBpZiB3ZSBkb24ndCBoYXZlIHRoYXQuCisJICovCisJaWYgKHJlbjIgJiYgcmVuMS0+YnJhbmNoICE9IG9wdC0+YnJhbmNoMSkgeworCQlzZXR1cF9yZW5hbWVfY29uZmxpY3RfaW5mbyhyZW5hbWVfdHlwZSwgb3B0LCByZW4yLCByZW4xKTsKKwkJcmV0dXJuOworCX0KKworCWNpID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvKSk7CisJY2ktPnJlbmFtZV90eXBlID0gcmVuYW1lX3R5cGU7CisJY2ktPnJlbjEgPSByZW4xOworCWNpLT5yZW4yID0gcmVuMjsKKworCWNpLT5yZW4xLT5kc3RfZW50cnktPnByb2Nlc3NlZCA9IDA7CisJY2ktPnJlbjEtPmRzdF9lbnRyeS0+cmVuYW1lX2NvbmZsaWN0X2luZm8gPSBjaTsKKwlpZiAocmVuMikgeworCQljaS0+cmVuMi0+ZHN0X2VudHJ5LT5yZW5hbWVfY29uZmxpY3RfaW5mbyA9IGNpOworCX0KK30KKworc3RhdGljIGludCBzaG93KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsIGludCB2KQoreworCXJldHVybiAoIW9wdC0+cHJpdi0+Y2FsbF9kZXB0aCAmJiBvcHQtPnZlcmJvc2l0eSA+PSB2KSB8fAorCQlvcHQtPnZlcmJvc2l0eSA+PSA1OworfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQorc3RhdGljIHZvaWQgb3V0cHV0KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsIGludCB2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJaWYgKCFzaG93KG9wdCwgdikpCisJCXJldHVybjsKKworCXN0cmJ1Zl9hZGRjaGFycygmb3B0LT5vYnVmLCAnICcsIG9wdC0+cHJpdi0+Y2FsbF9kZXB0aCAqIDIpOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKCZvcHQtPm9idWYsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlzdHJidWZfYWRkY2goJm9wdC0+b2J1ZiwgJ1xuJyk7CisJaWYgKCFvcHQtPmJ1ZmZlcl9vdXRwdXQpCisJCWZsdXNoX291dHB1dChvcHQpOworfQorCitzdGF0aWMgdm9pZCBvdXRwdXRfY29tbWl0X3RpdGxlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgbWVyZ2VfcmVtb3RlX2Rlc2MgKmRlc2M7CisKKwlzdHJidWZfYWRkY2hhcnMoJm9wdC0+b2J1ZiwgJyAnLCBvcHQtPnByaXYtPmNhbGxfZGVwdGggKiAyKTsKKwlkZXNjID0gbWVyZ2VfcmVtb3RlX3V0aWwoY29tbWl0KTsKKwlpZiAoZGVzYykKKwkJc3RyYnVmX2FkZGYoJm9wdC0+b2J1ZiwgInZpcnR1YWwgJXNcbiIsIGRlc2MtPm5hbWUpOworCWVsc2UgeworCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJm9wdC0+b2J1ZiwgJmNvbW1pdC0+b2JqZWN0Lm9pZCwKKwkJCQkJIERFRkFVTFRfQUJCUkVWKTsKKwkJc3RyYnVmX2FkZGNoKCZvcHQtPm9idWYsICcgJyk7CisJCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSAhPSAwKQorCQkJc3RyYnVmX2FkZHN0cigmb3B0LT5vYnVmLCBfKCIoYmFkIGNvbW1pdClcbiIpKTsKKwkJZWxzZSB7CisJCQljb25zdCBjaGFyICp0aXRsZTsKKwkJCWNvbnN0IGNoYXIgKm1zZyA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgTlVMTCk7CisJCQlpbnQgbGVuID0gZmluZF9jb21taXRfc3ViamVjdChtc2csICZ0aXRsZSk7CisJCQlpZiAobGVuKQorCQkJCXN0cmJ1Zl9hZGRmKCZvcHQtPm9idWYsICIlLipzXG4iLCBsZW4sIHRpdGxlKTsKKwkJCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBtc2cpOworCQl9CisJfQorCWZsdXNoX291dHB1dChvcHQpOworfQorCitzdGF0aWMgaW50IGFkZF9jYWNoZWluZm8oc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCSBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYmxvYiwKKwkJCSBjb25zdCBjaGFyICpwYXRoLCBpbnQgc3RhZ2UsIGludCByZWZyZXNoLCBpbnQgb3B0aW9ucykKK3sKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSA9IG9wdC0+cmVwby0+aW5kZXg7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwlpbnQgcmV0OworCisJY2UgPSBtYWtlX2NhY2hlX2VudHJ5KGlzdGF0ZSwgYmxvYi0+bW9kZSwgJmJsb2ItPm9pZCwgcGF0aCwgc3RhZ2UsIDApOworCWlmICghY2UpCisJCXJldHVybiBlcnIob3B0LCBfKCJhZGRfY2FjaGVpbmZvIGZhaWxlZCBmb3IgcGF0aCAnJXMnOyBtZXJnZSBhYm9ydGluZy4iKSwgcGF0aCk7CisKKwlyZXQgPSBhZGRfaW5kZXhfZW50cnkoaXN0YXRlLCBjZSwgb3B0aW9ucyk7CisJaWYgKHJlZnJlc2gpIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpuY2U7CisKKwkJbmNlID0gcmVmcmVzaF9jYWNoZV9lbnRyeShpc3RhdGUsIGNlLAorCQkJCQkgIENFX01BVENIX1JFRlJFU0ggfCBDRV9NQVRDSF9JR05PUkVfTUlTU0lORyk7CisJCWlmICghbmNlKQorCQkJcmV0dXJuIGVycihvcHQsIF8oImFkZF9jYWNoZWluZm8gZmFpbGVkIHRvIHJlZnJlc2ggZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIiksIHBhdGgpOworCQlpZiAobmNlICE9IGNlKQorCQkJcmV0ID0gYWRkX2luZGV4X2VudHJ5KGlzdGF0ZSwgbmNlLCBvcHRpb25zKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWVyZ2VfZGV0ZWN0X3JlbmFtZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0KQoreworCXJldHVybiAob3B0LT5kZXRlY3RfcmVuYW1lcyA+PSAwKSA/IG9wdC0+ZGV0ZWN0X3JlbmFtZXMgOiAxOworfQorCitzdGF0aWMgdm9pZCBpbml0X3RyZWVfZGVzY19mcm9tX3RyZWUoc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgc3RydWN0IHRyZWUgKnRyZWUpCit7CisJcGFyc2VfdHJlZSh0cmVlKTsKKwlpbml0X3RyZWVfZGVzYyhkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworfQorCitzdGF0aWMgaW50IHVucGFja190cmVlc19zdGFydChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJICAgICAgc3RydWN0IHRyZWUgKmNvbW1vbiwKKwkJCSAgICAgIHN0cnVjdCB0cmVlICpoZWFkLAorCQkJICAgICAgc3RydWN0IHRyZWUgKm1lcmdlKQoreworCWludCByYzsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRbM107CisJc3RydWN0IGluZGV4X3N0YXRlIHRtcF9pbmRleCA9IHsgTlVMTCB9OworCisJbWVtc2V0KCZvcHQtPnByaXYtPnVucGFja19vcHRzLCAwLCBzaXplb2Yob3B0LT5wcml2LT51bnBhY2tfb3B0cykpOworCWlmIChvcHQtPnByaXYtPmNhbGxfZGVwdGgpCisJCW9wdC0+cHJpdi0+dW5wYWNrX29wdHMuaW5kZXhfb25seSA9IDE7CisJZWxzZQorCQlvcHQtPnByaXYtPnVucGFja19vcHRzLnVwZGF0ZSA9IDE7CisJb3B0LT5wcml2LT51bnBhY2tfb3B0cy5tZXJnZSA9IDE7CisJb3B0LT5wcml2LT51bnBhY2tfb3B0cy5oZWFkX2lkeCA9IDI7CisJb3B0LT5wcml2LT51bnBhY2tfb3B0cy5mbiA9IHRocmVld2F5X21lcmdlOworCW9wdC0+cHJpdi0+dW5wYWNrX29wdHMuc3JjX2luZGV4ID0gb3B0LT5yZXBvLT5pbmRleDsKKwlvcHQtPnByaXYtPnVucGFja19vcHRzLmRzdF9pbmRleCA9ICZ0bXBfaW5kZXg7CisJb3B0LT5wcml2LT51bnBhY2tfb3B0cy5hZ2dyZXNzaXZlID0gIW1lcmdlX2RldGVjdF9yZW5hbWUob3B0KTsKKwlzZXR1cF91bnBhY2tfdHJlZXNfcG9yY2VsYWluKCZvcHQtPnByaXYtPnVucGFja19vcHRzLCAibWVyZ2UiKTsKKworCWluaXRfdHJlZV9kZXNjX2Zyb21fdHJlZSh0KzAsIGNvbW1vbik7CisJaW5pdF90cmVlX2Rlc2NfZnJvbV90cmVlKHQrMSwgaGVhZCk7CisJaW5pdF90cmVlX2Rlc2NfZnJvbV90cmVlKHQrMiwgbWVyZ2UpOworCisJcmMgPSB1bnBhY2tfdHJlZXMoMywgdCwgJm9wdC0+cHJpdi0+dW5wYWNrX29wdHMpOworCWNhY2hlX3RyZWVfZnJlZSgmb3B0LT5yZXBvLT5pbmRleC0+Y2FjaGVfdHJlZSk7CisKKwkvKgorCSAqIFVwZGF0ZSBvcHQtPnJlcG8tPmluZGV4IHRvIG1hdGNoIHRoZSBuZXcgcmVzdWx0cywgQUZURVIgc2F2aW5nIGEKKwkgKiBjb3B5IGluIG9wdC0+cHJpdi0+b3JpZ19pbmRleC4gIFVwZGF0ZSBzcmNfaW5kZXggdG8gcG9pbnQgdG8gdGhlCisJICogc2F2ZWQgY29weS4gICh2ZXJpZnlfdXB0b2RhdGUoKSBjaGVja3Mgc3JjX2luZGV4LCBhbmQgdGhlIG9yaWdpbmFsCisJICogaW5kZXggaXMgdGhlIG9uZSB0aGF0IGhhZCB0aGUgbmVjZXNzYXJ5IG1vZGlmaWNhdGlvbiB0aW1lc3RhbXBzLikKKwkgKi8KKwlvcHQtPnByaXYtPm9yaWdfaW5kZXggPSAqb3B0LT5yZXBvLT5pbmRleDsKKwkqb3B0LT5yZXBvLT5pbmRleCA9IHRtcF9pbmRleDsKKwlvcHQtPnByaXYtPnVucGFja19vcHRzLnNyY19pbmRleCA9ICZvcHQtPnByaXYtPm9yaWdfaW5kZXg7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHVucGFja190cmVlc19maW5pc2goc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCkKK3sKKwlkaXNjYXJkX2luZGV4KCZvcHQtPnByaXYtPm9yaWdfaW5kZXgpOworCWNsZWFyX3VucGFja190cmVlc19wb3JjZWxhaW4oJm9wdC0+cHJpdi0+dW5wYWNrX29wdHMpOworfQorCitzdGF0aWMgaW50IHNhdmVfZmlsZXNfZGlycyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgdW5zaWduZWQgaW50IG1vZGUsIGludCBzdGFnZSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcGF0aF9oYXNobWFwX2VudHJ5ICplbnRyeTsKKwlpbnQgYmFzZWxlbiA9IGJhc2UtPmxlbjsKKwlzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0ID0gY29udGV4dDsKKworCXN0cmJ1Zl9hZGRzdHIoYmFzZSwgcGF0aCk7CisKKwlGTEVYX0FMTE9DX01FTShlbnRyeSwgcGF0aCwgYmFzZS0+YnVmLCBiYXNlLT5sZW4pOworCWhhc2htYXBfZW50cnlfaW5pdCgmZW50cnktPmUsIHBhdGhfaGFzaChlbnRyeS0+cGF0aCkpOworCWhhc2htYXBfYWRkKCZvcHQtPnByaXYtPmN1cnJlbnRfZmlsZV9kaXJfc2V0LCAmZW50cnktPmUpOworCisJc3RyYnVmX3NldGxlbihiYXNlLCBiYXNlbGVuKTsKKwlyZXR1cm4gKFNfSVNESVIobW9kZSkgPyBSRUFEX1RSRUVfUkVDVVJTSVZFIDogMCk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9maWxlc19kaXJzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsIHN0cnVjdCB0cmVlICp0cmVlKQoreworCXN0cnVjdCBwYXRoc3BlYyBtYXRjaF9hbGw7CisJbWVtc2V0KCZtYXRjaF9hbGwsIDAsIHNpemVvZihtYXRjaF9hbGwpKTsKKwlyZWFkX3RyZWVfcmVjdXJzaXZlKG9wdC0+cmVwbywgdHJlZSwgIiIsIDAsIDAsCisJCQkgICAgJm1hdGNoX2FsbCwgc2F2ZV9maWxlc19kaXJzLCBvcHQpOworfQorCitzdGF0aWMgaW50IGdldF90cmVlX2VudHJ5X2lmX2Jsb2Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlLAorCQkJCSAgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkZnMpCit7CisJaW50IHJldDsKKworCXJldCA9IGdldF90cmVlX2VudHJ5KHIsIHRyZWUsIHBhdGgsICZkZnMtPm9pZCwgJmRmcy0+bW9kZSk7CisJaWYgKFNfSVNESVIoZGZzLT5tb2RlKSkgeworCQlvaWRjcHkoJmRmcy0+b2lkLCAmbnVsbF9vaWQpOworCQlkZnMtPm1vZGUgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJucyBhbiBpbmRleF9lbnRyeSBpbnN0YW5jZSB3aGljaCBkb2Vzbid0IGhhdmUgdG8gY29ycmVzcG9uZCB0bworICogYSByZWFsIGNhY2hlIGVudHJ5IGluIEdpdCdzIGluZGV4LgorICovCitzdGF0aWMgc3RydWN0IHN0YWdlX2RhdGEgKmluc2VydF9zdGFnZV9kYXRhKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQljb25zdCBjaGFyICpwYXRoLAorCQlzdHJ1Y3QgdHJlZSAqbywgc3RydWN0IHRyZWUgKmEsIHN0cnVjdCB0cmVlICpiLAorCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmVudHJpZXMpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IHN0YWdlX2RhdGEgKmUgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3RhZ2VfZGF0YSkpOworCWdldF90cmVlX2VudHJ5X2lmX2Jsb2IociwgJm8tPm9iamVjdC5vaWQsIHBhdGgsICZlLT5zdGFnZXNbMV0pOworCWdldF90cmVlX2VudHJ5X2lmX2Jsb2IociwgJmEtPm9iamVjdC5vaWQsIHBhdGgsICZlLT5zdGFnZXNbMl0pOworCWdldF90cmVlX2VudHJ5X2lmX2Jsb2IociwgJmItPm9iamVjdC5vaWQsIHBhdGgsICZlLT5zdGFnZXNbM10pOworCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoZW50cmllcywgcGF0aCk7CisJaXRlbS0+dXRpbCA9IGU7CisJcmV0dXJuIGU7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgZmlsZSBuYW1lcyB0byBzdGFnZV9kYXRhIG9iamVjdHMuIFRoZQorICogZGljdGlvbmFyeSBjb250YWlucyBvbmUgZW50cnkgZm9yIGV2ZXJ5IHBhdGggd2l0aCBhIG5vbi16ZXJvIHN0YWdlIGVudHJ5LgorICovCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0ICpnZXRfdW5tZXJnZWQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICp1bm1lcmdlZCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdCkpOworCWludCBpOworCisJdW5tZXJnZWQtPnN0cmR1cF9zdHJpbmdzID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCXN0cnVjdCBzdGFnZV9kYXRhICplOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJaWYgKCFjZV9zdGFnZShjZSkpCisJCQljb250aW51ZTsKKworCQlpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKHVubWVyZ2VkLCBjZS0+bmFtZSk7CisJCWlmICghaXRlbSkgeworCQkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCh1bm1lcmdlZCwgY2UtPm5hbWUpOworCQkJaXRlbS0+dXRpbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdGFnZV9kYXRhKSk7CisJCX0KKwkJZSA9IGl0ZW0tPnV0aWw7CisJCWUtPnN0YWdlc1tjZV9zdGFnZShjZSldLm1vZGUgPSBjZS0+Y2VfbW9kZTsKKwkJb2lkY3B5KCZlLT5zdGFnZXNbY2Vfc3RhZ2UoY2UpXS5vaWQsICZjZS0+b2lkKTsKKwl9CisKKwlyZXR1cm4gdW5tZXJnZWQ7Cit9CisKK3N0YXRpYyBpbnQgc3RyaW5nX2xpc3RfZGZfbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKm9uZSwgY29uc3QgY2hhciAqdHdvKQoreworCWludCBvbmVsZW4gPSBzdHJsZW4ob25lKTsKKwlpbnQgdHdvbGVuID0gc3RybGVuKHR3byk7CisJLyoKKwkgKiBIZXJlIHdlIG9ubHkgY2FyZSB0aGF0IGVudHJpZXMgZm9yIEQvRiBjb25mbGljdHMgYXJlCisJICogYWRqYWNlbnQsIGluIHBhcnRpY3VsYXIgd2l0aCB0aGUgZmlsZSBvZiB0aGUgRC9GIGNvbmZsaWN0CisJICogYXBwZWFyaW5nIGJlZm9yZSBmaWxlcyBiZWxvdyB0aGUgY29ycmVzcG9uZGluZyBkaXJlY3RvcnkuCisJICogVGhlIG9yZGVyIG9mIHRoZSByZXN0IG9mIHRoZSBsaXN0IGlzIGlycmVsZXZhbnQgZm9yIHVzLgorCSAqCisJICogVG8gYWNoaWV2ZSB0aGlzLCB3ZSBzb3J0IHdpdGggZGZfbmFtZV9jb21wYXJlIGFuZCBwcm92aWRlCisJICogdGhlIG1vZGUgU19JRkRJUiBzbyB0aGF0IEQvRiBjb25mbGljdHMgd2lsbCBzb3J0IGNvcnJlY3RseS4KKwkgKiBXZSB1c2UgdGhlIG1vZGUgU19JRkRJUiBmb3IgZXZlcnl0aGluZyBlbHNlIGZvciBzaW1wbGljaXR5LAorCSAqIHNpbmNlIGluIG90aGVyIGNhc2VzIGFueSBjaGFuZ2VzIGluIHRoZWlyIG9yZGVyIGR1ZSB0bworCSAqIHNvcnRpbmcgY2F1c2Ugbm8gcHJvYmxlbXMgZm9yIHVzLgorCSAqLworCWludCBjbXAgPSBkZl9uYW1lX2NvbXBhcmUob25lLCBvbmVsZW4sIFNfSUZESVIsCisJCQkJICB0d28sIHR3b2xlbiwgU19JRkRJUik7CisJLyoKKwkgKiBOb3cgdGhhdCAnZm9vJyBhbmQgJ2Zvby9iYXInIGNvbXBhcmUgZXF1YWwsIHdlIGhhdmUgdG8gbWFrZSBzdXJlCisJICogdGhhdCAnZm9vJyBjb21lcyBiZWZvcmUgJ2Zvby9iYXInLgorCSAqLworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisJcmV0dXJuIG9uZWxlbiAtIHR3b2xlbjsKK30KKworc3RhdGljIHZvaWQgcmVjb3JkX2RmX2NvbmZsaWN0X2ZpbGVzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmVudHJpZXMpCit7CisJLyogSWYgdGhlcmUgaXMgYSBEL0YgY29uZmxpY3QgYW5kIHRoZSBmaWxlIGZvciBzdWNoIGEgY29uZmxpY3QKKwkgKiBjdXJyZW50bHkgZXhpc3RzIGluIHRoZSB3b3JraW5nIHRyZWUsIHdlIHdhbnQgdG8gYWxsb3cgaXQgdG8gYmUKKwkgKiByZW1vdmVkIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZGlyZWN0b3J5IGlmIG5lZWRlZC4KKwkgKiBUaGUgZmlsZXMgdW5kZXJuZWF0aCB0aGUgZGlyZWN0b3JpZXMgb2Ygc3VjaCBEL0YgY29uZmxpY3RzIHdpbGwKKwkgKiBiZSBwcm9jZXNzZWQgYmVmb3JlIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgaW52b2x2ZWQgaW4gdGhlIEQvRgorCSAqIGNvbmZsaWN0LiAgSWYgdGhlIEQvRiBkaXJlY3RvcnkgZW5kcyB1cCBiZWluZyByZW1vdmVkIGJ5IHRoZQorCSAqIG1lcmdlLCB0aGVuIHdlIHdvbid0IGhhdmUgdG8gdG91Y2ggdGhlIEQvRiBmaWxlLiAgSWYgdGhlIEQvRgorCSAqIGRpcmVjdG9yeSBuZWVkcyB0byBiZSB3cml0dGVuIHRvIHRoZSB3b3JraW5nIGNvcHksIHRoZW4gdGhlIEQvRgorCSAqIGZpbGUgd2lsbCBzaW1wbHkgYmUgcmVtb3ZlZCAoaW4gbWFrZV9yb29tX2Zvcl9wYXRoKCkpIHRvIG1ha2UKKwkgKiByb29tIGZvciB0aGUgbmVjZXNzYXJ5IHBhdGhzLiAgTm90ZSB0aGF0IGlmIGJvdGggdGhlIGRpcmVjdG9yeQorCSAqIGFuZCB0aGUgZmlsZSBuZWVkIHRvIGJlIHByZXNlbnQsIHRoZW4gdGhlIEQvRiBmaWxlIHdpbGwgYmUKKwkgKiByZWluc3RhdGVkIHdpdGggYSBuZXcgdW5pcXVlIG5hbWUgYXQgdGhlIHRpbWUgaXQgaXMgcHJvY2Vzc2VkLgorCSAqLworCXN0cnVjdCBzdHJpbmdfbGlzdCBkZl9zb3J0ZWRfZW50cmllcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJY29uc3QgY2hhciAqbGFzdF9maWxlID0gTlVMTDsKKwlpbnQgbGFzdF9sZW4gPSAwOworCWludCBpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBtZXJnaW5nIG1lcmdlLWJhc2VzLCB3ZSBkb24ndCB3YW50IHRvIGJvdGhlciB3aXRoCisJICogYW55IHdvcmtpbmcgZGlyZWN0b3J5IGNoYW5nZXMuCisJICovCisJaWYgKG9wdC0+cHJpdi0+Y2FsbF9kZXB0aCkKKwkJcmV0dXJuOworCisJLyogRW5zdXJlIEQvRiBjb25mbGljdHMgYXJlIGFkamFjZW50IGluIHRoZSBlbnRyaWVzIGxpc3QuICovCisJZm9yIChpID0gMDsgaSA8IGVudHJpZXMtPm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKm5leHQgPSAmZW50cmllcy0+aXRlbXNbaV07CisJCXN0cmluZ19saXN0X2FwcGVuZCgmZGZfc29ydGVkX2VudHJpZXMsIG5leHQtPnN0cmluZyktPnV0aWwgPQorCQkJCSAgIG5leHQtPnV0aWw7CisJfQorCWRmX3NvcnRlZF9lbnRyaWVzLmNtcCA9IHN0cmluZ19saXN0X2RmX25hbWVfY29tcGFyZTsKKwlzdHJpbmdfbGlzdF9zb3J0KCZkZl9zb3J0ZWRfZW50cmllcyk7CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmb3B0LT5wcml2LT5kZl9jb25mbGljdF9maWxlX3NldCwgMSk7CisJZm9yIChpID0gMDsgaSA8IGRmX3NvcnRlZF9lbnRyaWVzLm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aCA9IGRmX3NvcnRlZF9lbnRyaWVzLml0ZW1zW2ldLnN0cmluZzsKKwkJaW50IGxlbiA9IHN0cmxlbihwYXRoKTsKKwkJc3RydWN0IHN0YWdlX2RhdGEgKmUgPSBkZl9zb3J0ZWRfZW50cmllcy5pdGVtc1tpXS51dGlsOworCisJCS8qCisJCSAqIENoZWNrIGlmIGxhc3RfZmlsZSAmIHBhdGggY29ycmVzcG9uZCB0byBhIEQvRiBjb25mbGljdDsKKwkJICogaS5lLiB3aGV0aGVyIHBhdGggaXMgbGFzdF9maWxlKycvJys8c29tZXRoaW5nPi4KKwkJICogSWYgc28sIHJlY29yZCB0aGF0IGl0J3Mgb2theSB0byByZW1vdmUgbGFzdF9maWxlIHRvIG1ha2UKKwkJICogcm9vbSBmb3IgcGF0aCBhbmQgZnJpZW5kcyBpZiBuZWVkZWQuCisJCSAqLworCQlpZiAobGFzdF9maWxlICYmCisJCSAgICBsZW4gPiBsYXN0X2xlbiAmJgorCQkgICAgbWVtY21wKHBhdGgsIGxhc3RfZmlsZSwgbGFzdF9sZW4pID09IDAgJiYKKwkJICAgIHBhdGhbbGFzdF9sZW5dID09ICcvJykgeworCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZvcHQtPnByaXYtPmRmX2NvbmZsaWN0X2ZpbGVfc2V0LCBsYXN0X2ZpbGUpOworCQl9CisKKwkJLyoKKwkJICogRGV0ZXJtaW5lIHdoZXRoZXIgcGF0aCBjb3VsZCBleGlzdCBhcyBhIGZpbGUgaW4gdGhlCisJCSAqIHdvcmtpbmcgZGlyZWN0b3J5IGFzIGEgcG9zc2libGUgRC9GIGNvbmZsaWN0LiAgVGhpcworCQkgKiB3aWxsIG9ubHkgb2NjdXIgd2hlbiBpdCBleGlzdHMgaW4gc3RhZ2UgMiBhcyBhCisJCSAqIGZpbGUuCisJCSAqLworCQlpZiAoU19JU1JFRyhlLT5zdGFnZXNbMl0ubW9kZSkgfHwgU19JU0xOSyhlLT5zdGFnZXNbMl0ubW9kZSkpIHsKKwkJCWxhc3RfZmlsZSA9IHBhdGg7CisJCQlsYXN0X2xlbiA9IGxlbjsKKwkJfSBlbHNlIHsKKwkJCWxhc3RfZmlsZSA9IE5VTEw7CisJCX0KKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJmRmX3NvcnRlZF9lbnRyaWVzLCAwKTsKK30KKworc3RhdGljIGludCB1cGRhdGVfc3RhZ2VzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm8sCisJCQkgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmEsCisJCQkgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmIpCit7CisKKwkvKgorCSAqIE5PVEU6IEl0IGlzIHVzdWFsbHkgYSBiYWQgaWRlYSB0byBjYWxsIHVwZGF0ZV9zdGFnZXMgb24gYSBwYXRoCisJICogYmVmb3JlIGNhbGxpbmcgdXBkYXRlX2ZpbGUgb24gdGhhdCBzYW1lIHBhdGgsIHNpbmNlIGl0IGNhbgorCSAqIHNvbWV0aW1lcyBsZWFkIHRvIHNwdXJpb3VzICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlLi4uIgorCSAqIG1lc3NhZ2VzIGZyb20gdXBkYXRlX2ZpbGUgKHZpYSBtYWtlX3Jvb21fZm9yIHBhdGggdmlhCisJICogd291bGRfbG9zZV91bnRyYWNrZWQpLiAgSW5zdGVhZCwgcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIGNhbGxzCisJICogKGV4ZWN1dGluZyB1cGRhdGVfZmlsZSBmaXJzdCBhbmQgdGhlbiB1cGRhdGVfc3RhZ2VzKS4KKwkgKi8KKwlpbnQgY2xlYXIgPSAxOworCWludCBvcHRpb25zID0gQUREX0NBQ0hFX09LX1RPX0FERCB8IEFERF9DQUNIRV9TS0lQX0RGQ0hFQ0s7CisJaWYgKGNsZWFyKQorCQlpZiAocmVtb3ZlX2ZpbGVfZnJvbV9pbmRleChvcHQtPnJlcG8tPmluZGV4LCBwYXRoKSkKKwkJCXJldHVybiAtMTsKKwlpZiAobykKKwkJaWYgKGFkZF9jYWNoZWluZm8ob3B0LCBvLCBwYXRoLCAxLCAwLCBvcHRpb25zKSkKKwkJCXJldHVybiAtMTsKKwlpZiAoYSkKKwkJaWYgKGFkZF9jYWNoZWluZm8ob3B0LCBhLCBwYXRoLCAyLCAwLCBvcHRpb25zKSkKKwkJCXJldHVybiAtMTsKKwlpZiAoYikKKwkJaWYgKGFkZF9jYWNoZWluZm8ob3B0LCBiLCBwYXRoLCAzLCAwLCBvcHRpb25zKSkKKwkJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2VudHJ5KHN0cnVjdCBzdGFnZV9kYXRhICplbnRyeSwKKwkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqbywKKwkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSwKKwkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYikKK3sKKwllbnRyeS0+cHJvY2Vzc2VkID0gMDsKKwllbnRyeS0+c3RhZ2VzWzFdLm1vZGUgPSBvLT5tb2RlOworCWVudHJ5LT5zdGFnZXNbMl0ubW9kZSA9IGEtPm1vZGU7CisJZW50cnktPnN0YWdlc1szXS5tb2RlID0gYi0+bW9kZTsKKwlvaWRjcHkoJmVudHJ5LT5zdGFnZXNbMV0ub2lkLCAmby0+b2lkKTsKKwlvaWRjcHkoJmVudHJ5LT5zdGFnZXNbMl0ub2lkLCAmYS0+b2lkKTsKKwlvaWRjcHkoJmVudHJ5LT5zdGFnZXNbM10ub2lkLCAmYi0+b2lkKTsKK30KKworc3RhdGljIGludCByZW1vdmVfZmlsZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LCBpbnQgY2xlYW4sCisJCSAgICAgICBjb25zdCBjaGFyICpwYXRoLCBpbnQgbm9fd2QpCit7CisJaW50IHVwZGF0ZV9jYWNoZSA9IG9wdC0+cHJpdi0+Y2FsbF9kZXB0aCB8fCBjbGVhbjsKKwlpbnQgdXBkYXRlX3dvcmtpbmdfZGlyZWN0b3J5ID0gIW9wdC0+cHJpdi0+Y2FsbF9kZXB0aCAmJiAhbm9fd2Q7CisKKwlpZiAodXBkYXRlX2NhY2hlKSB7CisJCWlmIChyZW1vdmVfZmlsZV9mcm9tX2luZGV4KG9wdC0+cmVwby0+aW5kZXgsIHBhdGgpKQorCQkJcmV0dXJuIC0xOworCX0KKwlpZiAodXBkYXRlX3dvcmtpbmdfZGlyZWN0b3J5KSB7CisJCWlmIChpZ25vcmVfY2FzZSkgeworCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwkJCWNlID0gaW5kZXhfZmlsZV9leGlzdHMob3B0LT5yZXBvLT5pbmRleCwgcGF0aCwgc3RybGVuKHBhdGgpLAorCQkJCQkgICAgICAgaWdub3JlX2Nhc2UpOworCQkJaWYgKGNlICYmIGNlX3N0YWdlKGNlKSA9PSAwICYmIHN0cmNtcChwYXRoLCBjZS0+bmFtZSkpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKHJlbW92ZV9wYXRoKHBhdGgpKQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogYWRkIGEgc3RyaW5nIHRvIGEgc3RyYnVmLCBidXQgY29udmVydGluZyAiLyIgdG8gIl8iICovCitzdGF0aWMgdm9pZCBhZGRfZmxhdHRlbmVkX3BhdGgoc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICpzKQoreworCXNpemVfdCBpID0gb3V0LT5sZW47CisJc3RyYnVmX2FkZHN0cihvdXQsIHMpOworCWZvciAoOyBpIDwgb3V0LT5sZW47IGkrKykKKwkJaWYgKG91dC0+YnVmW2ldID09ICcvJykKKwkJCW91dC0+YnVmW2ldID0gJ18nOworfQorCitzdGF0aWMgY2hhciAqdW5pcXVlX3BhdGgoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCSBjb25zdCBjaGFyICpwYXRoLAorCQkJIGNvbnN0IGNoYXIgKmJyYW5jaCkKK3sKKwlzdHJ1Y3QgcGF0aF9oYXNobWFwX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3Qgc3RyYnVmIG5ld3BhdGggPSBTVFJCVUZfSU5JVDsKKwlpbnQgc3VmZml4ID0gMDsKKwlzaXplX3QgYmFzZV9sZW47CisKKwlzdHJidWZfYWRkZigmbmV3cGF0aCwgIiVzfiIsIHBhdGgpOworCWFkZF9mbGF0dGVuZWRfcGF0aCgmbmV3cGF0aCwgYnJhbmNoKTsKKworCWJhc2VfbGVuID0gbmV3cGF0aC5sZW47CisJd2hpbGUgKGhhc2htYXBfZ2V0X2Zyb21faGFzaCgmb3B0LT5wcml2LT5jdXJyZW50X2ZpbGVfZGlyX3NldCwKKwkJCQkgICAgIHBhdGhfaGFzaChuZXdwYXRoLmJ1ZiksIG5ld3BhdGguYnVmKSB8fAorCSAgICAgICAoIW9wdC0+cHJpdi0+Y2FsbF9kZXB0aCAmJiBmaWxlX2V4aXN0cyhuZXdwYXRoLmJ1ZikpKSB7CisJCXN0cmJ1Zl9zZXRsZW4oJm5ld3BhdGgsIGJhc2VfbGVuKTsKKwkJc3RyYnVmX2FkZGYoJm5ld3BhdGgsICJfJWQiLCBzdWZmaXgrKyk7CisJfQorCisJRkxFWF9BTExPQ19NRU0oZW50cnksIHBhdGgsIG5ld3BhdGguYnVmLCBuZXdwYXRoLmxlbik7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZlbnRyeS0+ZSwgcGF0aF9oYXNoKGVudHJ5LT5wYXRoKSk7CisJaGFzaG1hcF9hZGQoJm9wdC0+cHJpdi0+Y3VycmVudF9maWxlX2Rpcl9zZXQsICZlbnRyeS0+ZSk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJm5ld3BhdGgsIE5VTEwpOworfQorCisvKioKKyAqIENoZWNrIHdoZXRoZXIgYSBkaXJlY3RvcnkgaW4gdGhlIGluZGV4IGlzIGluIHRoZSB3YXkgb2YgYW4gaW5jb21pbmcKKyAqIGZpbGUuICBSZXR1cm4gMSBpZiBzby4gIElmIGNoZWNrX3dvcmtpbmdfY29weSBpcyBub24temVybywgYWxzbworICogY2hlY2sgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiAgSWYgZW1wdHlfb2sgaXMgbm9uLXplcm8sIGFsc28gcmV0dXJuCisgKiAwIGluIHRoZSBjYXNlIHdoZXJlIHRoZSB3b3JraW5nLXRyZWUgZGlyIGV4aXN0cyBidXQgaXMgZW1wdHkuCisgKi8KK3N0YXRpYyBpbnQgZGlyX2luX3dheShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwKKwkJICAgICAgaW50IGNoZWNrX3dvcmtpbmdfY29weSwgaW50IGVtcHR5X29rKQoreworCWludCBwb3M7CisJc3RydWN0IHN0cmJ1ZiBkaXJwYXRoID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlzdHJidWZfYWRkc3RyKCZkaXJwYXRoLCBwYXRoKTsKKwlzdHJidWZfYWRkY2goJmRpcnBhdGgsICcvJyk7CisKKwlwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIGRpcnBhdGguYnVmLCBkaXJwYXRoLmxlbik7CisKKwlpZiAocG9zIDwgMCkKKwkJcG9zID0gLTEgLSBwb3M7CisJaWYgKHBvcyA8IGlzdGF0ZS0+Y2FjaGVfbnIgJiYKKwkgICAgIXN0cm5jbXAoZGlycGF0aC5idWYsIGlzdGF0ZS0+Y2FjaGVbcG9zXS0+bmFtZSwgZGlycGF0aC5sZW4pKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZkaXJwYXRoKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmRpcnBhdGgpOworCXJldHVybiBjaGVja193b3JraW5nX2NvcHkgJiYgIWxzdGF0KHBhdGgsICZzdCkgJiYgU19JU0RJUihzdC5zdF9tb2RlKSAmJgorCQkhKGVtcHR5X29rICYmIGlzX2VtcHR5X2RpcihwYXRoKSkgJiYKKwkJIWhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChwYXRoLCBzdHJsZW4ocGF0aCkpOworfQorCisvKgorICogUmV0dXJucyB3aGV0aGVyIHBhdGggd2FzIHRyYWNrZWQgaW4gdGhlIGluZGV4IGJlZm9yZSB0aGUgbWVyZ2Ugc3RhcnRlZCwKKyAqIGFuZCBpdHMgb2lkIGFuZCBtb2RlIG1hdGNoIHRoZSBzcGVjaWZpZWQgdmFsdWVzCisgKi8KK3N0YXRpYyBpbnQgd2FzX3RyYWNrZWRfYW5kX21hdGNoZXMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYmxvYikKK3sKKwlpbnQgcG9zID0gaW5kZXhfbmFtZV9wb3MoJm9wdC0+cHJpdi0+b3JpZ19pbmRleCwgcGF0aCwgc3RybGVuKHBhdGgpKTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJaWYgKDAgPiBwb3MpCisJCS8qIHdlIHdlcmUgbm90IHRyYWNraW5nIHRoaXMgcGF0aCBiZWZvcmUgdGhlIG1lcmdlICovCisJCXJldHVybiAwOworCisJLyogU2VlIGlmIHRoZSBmaWxlIHdlIHdlcmUgdHJhY2tpbmcgYmVmb3JlIG1hdGNoZXMgKi8KKwljZSA9IG9wdC0+cHJpdi0+b3JpZ19pbmRleC5jYWNoZVtwb3NdOworCXJldHVybiAob2lkZXEoJmNlLT5vaWQsICZibG9iLT5vaWQpICYmIGNlLT5jZV9tb2RlID09IGJsb2ItPm1vZGUpOworfQorCisvKgorICogUmV0dXJucyB3aGV0aGVyIHBhdGggd2FzIHRyYWNrZWQgaW4gdGhlIGluZGV4IGJlZm9yZSB0aGUgbWVyZ2Ugc3RhcnRlZAorICovCitzdGF0aWMgaW50IHdhc190cmFja2VkKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKCZvcHQtPnByaXYtPm9yaWdfaW5kZXgsIHBhdGgsIHN0cmxlbihwYXRoKSk7CisKKwlpZiAoMCA8PSBwb3MpCisJCS8qIHdlIHdlcmUgdHJhY2tpbmcgdGhpcyBwYXRoIGJlZm9yZSB0aGUgbWVyZ2UgKi8KKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3b3VsZF9sb3NlX3VudHJhY2tlZChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlID0gb3B0LT5yZXBvLT5pbmRleDsKKworCS8qCisJICogVGhpcyBtYXkgbG9vayBsaWtlIGl0IGNhbiBiZSBzaW1wbGlmaWVkIHRvOgorCSAqICAgcmV0dXJuICF3YXNfdHJhY2tlZChvcHQsIHBhdGgpICYmIGZpbGVfZXhpc3RzKHBhdGgpCisJICogYnV0IGl0IGNhbid0LiAgVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBrbm93IHdoZXRoZXIgcGF0aCB3YXMgaW4KKwkgKiB0aGUgd29ya2luZyB0cmVlIGR1ZSB0byBFSVRIRVIgaGF2aW5nIGJlZW4gdHJhY2tlZCBpbiB0aGUgaW5kZXgKKwkgKiBiZWZvcmUgdGhlIG1lcmdlIE9SIGhhdmluZyBiZWVuIHB1dCBpbnRvIHRoZSB3b3JraW5nIGNvcHkgYW5kCisJICogaW5kZXggYnkgdW5wYWNrX3RyZWVzKCkuICBEdWUgdG8gdGhhdCBlaXRoZXItb3IgcmVxdWlyZW1lbnQsIHdlCisJICogY2hlY2sgdGhlIGN1cnJlbnQgaW5kZXggaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgb25lLgorCSAqCisJICogTm90ZSB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IG1lcmdlLXJlY3Vyc2l2ZSBpdHNlbGYKKwkgKiB1cGRhdGluZyB0aGUgaW5kZXggYWZ0ZXIgdW5wYWNrX3RyZWVzKCkgYW5kIGJlZm9yZSBjYWxsaW5nIHRoaXMKKwkgKiBmdW5jdGlvbiwgYmVjYXVzZSB3ZSBzdHJpY3RseSByZXF1aXJlIGFsbCBjb2RlIHBhdGhzIGluCisJICogbWVyZ2UtcmVjdXJzaXZlIHRvIHVwZGF0ZSB0aGUgd29ya2luZyB0cmVlIGZpcnN0IGFuZCB0aGUgaW5kZXgKKwkgKiBzZWNvbmQuICBEb2luZyBvdGhlcndpc2Ugd291bGQgYnJlYWsKKwkgKiB1cGRhdGVfZmlsZSgpL3dvdWxkX2xvc2VfdW50cmFja2VkKCk7IHNlZSBldmVyeSBjb21tZW50IGluIHRoaXMKKwkgKiBmaWxlIHdoaWNoIG1lbnRpb25zICJ1cGRhdGVfc3RhZ2VzIi4KKwkgKi8KKwlpbnQgcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBwYXRoLCBzdHJsZW4ocGF0aCkpOworCisJaWYgKHBvcyA8IDApCisJCXBvcyA9IC0xIC0gcG9zOworCXdoaWxlIChwb3MgPCBpc3RhdGUtPmNhY2hlX25yICYmCisJICAgICAgICFzdHJjbXAocGF0aCwgaXN0YXRlLT5jYWNoZVtwb3NdLT5uYW1lKSkgeworCQkvKgorCQkgKiBJZiBzdGFnZSAjMCwgaXQgaXMgZGVmaW5pdGVseSB0cmFja2VkLgorCQkgKiBJZiBpdCBoYXMgc3RhZ2UgIzIgdGhlbiBpdCB3YXMgdHJhY2tlZAorCQkgKiBiZWZvcmUgdGhpcyBtZXJnZSBzdGFydGVkLiAgQWxsIG90aGVyCisJCSAqIGNhc2VzIHRoZSBwYXRoIHdhcyBub3QgdHJhY2tlZC4KKwkJICovCisJCXN3aXRjaCAoY2Vfc3RhZ2UoaXN0YXRlLT5jYWNoZVtwb3NdKSkgeworCQljYXNlIDA6CisJCWNhc2UgMjoKKwkJCXJldHVybiAwOworCQl9CisJCXBvcysrOworCX0KKwlyZXR1cm4gZmlsZV9leGlzdHMocGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgd2FzX2RpcnR5KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwlpbnQgZGlydHkgPSAxOworCisJaWYgKG9wdC0+cHJpdi0+Y2FsbF9kZXB0aCB8fCAhd2FzX3RyYWNrZWQob3B0LCBwYXRoKSkKKwkJcmV0dXJuICFkaXJ0eTsKKworCWNlID0gaW5kZXhfZmlsZV9leGlzdHMob3B0LT5wcml2LT51bnBhY2tfb3B0cy5zcmNfaW5kZXgsCisJCQkgICAgICAgcGF0aCwgc3RybGVuKHBhdGgpLCBpZ25vcmVfY2FzZSk7CisJZGlydHkgPSB2ZXJpZnlfdXB0b2RhdGUoY2UsICZvcHQtPnByaXYtPnVucGFja19vcHRzKSAhPSAwOworCXJldHVybiBkaXJ0eTsKK30KKworc3RhdGljIGludCBtYWtlX3Jvb21fZm9yX3BhdGgoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgc3RhdHVzLCBpOworCWNvbnN0IGNoYXIgKm1zZyA9IF8oImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiKTsKKworCS8qIFVubGluayBhbnkgRC9GIGNvbmZsaWN0IGZpbGVzIHRoYXQgYXJlIGluIHRoZSB3YXkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgb3B0LT5wcml2LT5kZl9jb25mbGljdF9maWxlX3NldC5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmRmX3BhdGggPSBvcHQtPnByaXYtPmRmX2NvbmZsaWN0X2ZpbGVfc2V0Lml0ZW1zW2ldLnN0cmluZzsKKwkJc2l6ZV90IHBhdGhsZW4gPSBzdHJsZW4ocGF0aCk7CisJCXNpemVfdCBkZl9wYXRobGVuID0gc3RybGVuKGRmX3BhdGgpOworCQlpZiAoZGZfcGF0aGxlbiA8IHBhdGhsZW4gJiYKKwkJICAgIHBhdGhbZGZfcGF0aGxlbl0gPT0gJy8nICYmCisJCSAgICBzdHJuY21wKHBhdGgsIGRmX3BhdGgsIGRmX3BhdGhsZW4pID09IDApIHsKKwkJCW91dHB1dChvcHQsIDMsCisJCQkgICAgICAgXygiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIpLAorCQkJICAgICAgIGRmX3BhdGgpOworCQkJdW5saW5rKGRmX3BhdGgpOworCQkJdW5zb3J0ZWRfc3RyaW5nX2xpc3RfZGVsZXRlX2l0ZW0oJm9wdC0+cHJpdi0+ZGZfY29uZmxpY3RfZmlsZV9zZXQsCisJCQkJCQkJIGksIDApOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBNYWtlIHN1cmUgbGVhZGluZyBkaXJlY3RvcmllcyBhcmUgY3JlYXRlZCAqLworCXN0YXR1cyA9IHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QocGF0aCk7CisJaWYgKHN0YXR1cykgeworCQlpZiAoc3RhdHVzID09IFNDTERfRVhJU1RTKQorCQkJLyogc29tZXRoaW5nIGVsc2UgZXhpc3RzICovCisJCQlyZXR1cm4gZXJyKG9wdCwgbXNnLCBwYXRoLCBfKCI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IikpOworCQlyZXR1cm4gZXJyKG9wdCwgbXNnLCBwYXRoLCAiIik7CisJfQorCisJLyoKKwkgKiBEbyBub3QgdW5saW5rIGEgZmlsZSBpbiB0aGUgd29yayB0cmVlIGlmIHdlIGFyZSBub3QKKwkgKiB0cmFja2luZyBpdC4KKwkgKi8KKwlpZiAod291bGRfbG9zZV91bnRyYWNrZWQob3B0LCBwYXRoKSkKKwkJcmV0dXJuIGVycihvcHQsIF8oInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJyVzJyIpLAorCQkJICAgcGF0aCk7CisKKwkvKiBTdWNjZXNzZnVsIHVubGluayBpcyBnb29kLi4gKi8KKwlpZiAoIXVubGluayhwYXRoKSkKKwkJcmV0dXJuIDA7CisJLyogLi4gYW5kIHNvIGlzIG5vIGV4aXN0aW5nIGZpbGUgKi8KKwlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQlyZXR1cm4gMDsKKwkvKiAuLiBidXQgbm90IHNvbWUgb3RoZXIgZXJyb3IgKHdobyByZWFsbHkgY2FyZXMgd2hhdD8pICovCisJcmV0dXJuIGVycihvcHQsIG1zZywgcGF0aCwgXygiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIpKTsKK30KKworc3RhdGljIGludCB1cGRhdGVfZmlsZV9mbGFncyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqY29udGVudHMsCisJCQkgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgIGludCB1cGRhdGVfY2FjaGUsCisJCQkgICAgIGludCB1cGRhdGVfd2QpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAob3B0LT5wcml2LT5jYWxsX2RlcHRoKQorCQl1cGRhdGVfd2QgPSAwOworCisJaWYgKHVwZGF0ZV93ZCkgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXZvaWQgKmJ1ZjsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCisJCWlmIChTX0lTR0lUTElOSyhjb250ZW50cy0+bW9kZSkpIHsKKwkJCS8qCisJCQkgKiBXZSBtYXkgbGF0ZXIgZGVjaWRlIHRvIHJlY3Vyc2l2ZWx5IGRlc2NlbmQgaW50bworCQkJICogdGhlIHN1Ym1vZHVsZSBkaXJlY3RvcnkgYW5kIHVwZGF0ZSBpdHMgaW5kZXgKKwkJCSAqIGFuZC9vciB3b3JrIHRyZWUsIGJ1dCB3ZSBkbyBub3QgZG8gdGhhdCBub3cuCisJCQkgKi8KKwkJCXVwZGF0ZV93ZCA9IDA7CisJCQlnb3RvIHVwZGF0ZV9pbmRleDsKKwkJfQorCisJCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUoJmNvbnRlbnRzLT5vaWQsICZ0eXBlLCAmc2l6ZSk7CisJCWlmICghYnVmKSB7CisJCQlyZXQgPSBlcnIob3B0LCBfKCJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIpLAorCQkJCSAgb2lkX3RvX2hleCgmY29udGVudHMtPm9pZCksIHBhdGgpOworCQkJZ290byBmcmVlX2J1ZjsKKwkJfQorCQlpZiAodHlwZSAhPSBPQkpfQkxPQikgeworCQkJcmV0ID0gZXJyKG9wdCwgXygiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIpLAorCQkJCSAgb2lkX3RvX2hleCgmY29udGVudHMtPm9pZCksIHBhdGgpOworCQkJZ290byBmcmVlX2J1ZjsKKwkJfQorCQlpZiAoU19JU1JFRyhjb250ZW50cy0+bW9kZSkpIHsKKwkJCXN0cnVjdCBzdHJidWYgc3RyYnVmID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAoY29udmVydF90b193b3JraW5nX3RyZWUob3B0LT5yZXBvLT5pbmRleCwKKwkJCQkJCSAgICBwYXRoLCBidWYsIHNpemUsICZzdHJidWYsIE5VTEwpKSB7CisJCQkJZnJlZShidWYpOworCQkJCXNpemUgPSBzdHJidWYubGVuOworCQkJCWJ1ZiA9IHN0cmJ1Zl9kZXRhY2goJnN0cmJ1ZiwgTlVMTCk7CisJCQl9CisJCX0KKworCQlpZiAobWFrZV9yb29tX2Zvcl9wYXRoKG9wdCwgcGF0aCkgPCAwKSB7CisJCQl1cGRhdGVfd2QgPSAwOworCQkJZ290byBmcmVlX2J1ZjsKKwkJfQorCQlpZiAoU19JU1JFRyhjb250ZW50cy0+bW9kZSkgfHwKKwkJICAgICghaGFzX3N5bWxpbmtzICYmIFNfSVNMTksoY29udGVudHMtPm1vZGUpKSkgeworCQkJaW50IGZkOworCQkJaW50IG1vZGUgPSAoY29udGVudHMtPm1vZGUgJiAwMTAwID8gMDc3NyA6IDA2NjYpOworCisJCQlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX1RSVU5DIHwgT19DUkVBVCwgbW9kZSk7CisJCQlpZiAoZmQgPCAwKSB7CisJCQkJcmV0ID0gZXJyKG9wdCwgXygiZmFpbGVkIHRvIG9wZW4gJyVzJzogJXMiKSwKKwkJCQkJICBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQkJCWdvdG8gZnJlZV9idWY7CisJCQl9CisJCQl3cml0ZV9pbl9mdWxsKGZkLCBidWYsIHNpemUpOworCQkJY2xvc2UoZmQpOworCQl9IGVsc2UgaWYgKFNfSVNMTksoY29udGVudHMtPm1vZGUpKSB7CisJCQljaGFyICpsbmsgPSB4bWVtZHVweihidWYsIHNpemUpOworCQkJc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChwYXRoKTsKKwkJCXVubGluayhwYXRoKTsKKwkJCWlmIChzeW1saW5rKGxuaywgcGF0aCkpCisJCQkJcmV0ID0gZXJyKG9wdCwgXygiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJzogJXMiKSwKKwkJCQkJICBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQkJZnJlZShsbmspOworCQl9IGVsc2UKKwkJCXJldCA9IGVycihvcHQsCisJCQkJICBfKCJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIiksCisJCQkJICBjb250ZW50cy0+bW9kZSwgb2lkX3RvX2hleCgmY29udGVudHMtPm9pZCksIHBhdGgpOworCWZyZWVfYnVmOgorCQlmcmVlKGJ1Zik7CisJfQordXBkYXRlX2luZGV4OgorCWlmICghcmV0ICYmIHVwZGF0ZV9jYWNoZSkgeworCQlpbnQgcmVmcmVzaCA9ICghb3B0LT5wcml2LT5jYWxsX2RlcHRoICYmCisJCQkgICAgICAgY29udGVudHMtPm1vZGUgIT0gU19JRkdJVExJTkspOworCQlpZiAoYWRkX2NhY2hlaW5mbyhvcHQsIGNvbnRlbnRzLCBwYXRoLCAwLCByZWZyZXNoLAorCQkJCSAgQUREX0NBQ0hFX09LX1RPX0FERCkpCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX2ZpbGUoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJICAgICAgIGludCBjbGVhbiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpjb250ZW50cywKKwkJICAgICAgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIHVwZGF0ZV9maWxlX2ZsYWdzKG9wdCwgY29udGVudHMsIHBhdGgsCisJCQkJIG9wdC0+cHJpdi0+Y2FsbF9kZXB0aCB8fCBjbGVhbiwgIW9wdC0+cHJpdi0+Y2FsbF9kZXB0aCk7Cit9CisKKy8qIExvdyBsZXZlbCBmaWxlIG1lcmdpbmcsIHVwZGF0ZSBhbmQgcmVtb3ZhbCAqLworCitzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIHsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyBibG9iOyAvKiBtb3N0bHkgdXNlIG9pZCAmIG1vZGU7IHNvbWV0aW1lcyBwYXRoICovCisJdW5zaWduZWQgY2xlYW46MSwKKwkJIG1lcmdlOjE7Cit9OworCitzdGF0aWMgaW50IG1lcmdlXzN3YXkoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJICAgICAgbW1idWZmZXJfdCAqcmVzdWx0X2J1ZiwKKwkJICAgICAgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm8sCisJCSAgICAgIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICphLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYiwKKwkJICAgICAgY29uc3QgY2hhciAqYnJhbmNoMSwKKwkJICAgICAgY29uc3QgY2hhciAqYnJhbmNoMiwKKwkJICAgICAgY29uc3QgaW50IGV4dHJhX21hcmtlcl9zaXplKQoreworCW1tZmlsZV90IG9yaWcsIHNyYzEsIHNyYzI7CisJc3RydWN0IGxsX21lcmdlX29wdGlvbnMgbGxfb3B0cyA9IHswfTsKKwljaGFyICpiYXNlLCAqbmFtZTEsICpuYW1lMjsKKwlpbnQgbWVyZ2Vfc3RhdHVzOworCisJbGxfb3B0cy5yZW5vcm1hbGl6ZSA9IG9wdC0+cmVub3JtYWxpemU7CisJbGxfb3B0cy5leHRyYV9tYXJrZXJfc2l6ZSA9IGV4dHJhX21hcmtlcl9zaXplOworCWxsX29wdHMueGRsX29wdHMgPSBvcHQtPnhkbF9vcHRzOworCisJaWYgKG9wdC0+cHJpdi0+Y2FsbF9kZXB0aCkgeworCQlsbF9vcHRzLnZpcnR1YWxfYW5jZXN0b3IgPSAxOworCQlsbF9vcHRzLnZhcmlhbnQgPSAwOworCX0gZWxzZSB7CisJCXN3aXRjaCAob3B0LT5yZWN1cnNpdmVfdmFyaWFudCkgeworCQljYXNlIE1FUkdFX1ZBUklBTlRfT1VSUzoKKwkJCWxsX29wdHMudmFyaWFudCA9IFhETF9NRVJHRV9GQVZPUl9PVVJTOworCQkJYnJlYWs7CisJCWNhc2UgTUVSR0VfVkFSSUFOVF9USEVJUlM6CisJCQlsbF9vcHRzLnZhcmlhbnQgPSBYRExfTUVSR0VfRkFWT1JfVEhFSVJTOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlsbF9vcHRzLnZhcmlhbnQgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlhc3NlcnQoYS0+cGF0aCAmJiBiLT5wYXRoICYmIG8tPnBhdGggJiYgb3B0LT5hbmNlc3Rvcik7CisJaWYgKHN0cmNtcChhLT5wYXRoLCBiLT5wYXRoKSB8fCBzdHJjbXAoYS0+cGF0aCwgby0+cGF0aCkgIT0gMCkgeworCQliYXNlICA9IG1rcGF0aGR1cCgiJXM6JXMiLCBvcHQtPmFuY2VzdG9yLCBvLT5wYXRoKTsKKwkJbmFtZTEgPSBta3BhdGhkdXAoIiVzOiVzIiwgYnJhbmNoMSwgYS0+cGF0aCk7CisJCW5hbWUyID0gbWtwYXRoZHVwKCIlczolcyIsIGJyYW5jaDIsIGItPnBhdGgpOworCX0gZWxzZSB7CisJCWJhc2UgID0gbWtwYXRoZHVwKCIlcyIsIG9wdC0+YW5jZXN0b3IpOworCQluYW1lMSA9IG1rcGF0aGR1cCgiJXMiLCBicmFuY2gxKTsKKwkJbmFtZTIgPSBta3BhdGhkdXAoIiVzIiwgYnJhbmNoMik7CisJfQorCisJcmVhZF9tbWJsb2IoJm9yaWcsICZvLT5vaWQpOworCXJlYWRfbW1ibG9iKCZzcmMxLCAmYS0+b2lkKTsKKwlyZWFkX21tYmxvYigmc3JjMiwgJmItPm9pZCk7CisKKwltZXJnZV9zdGF0dXMgPSBsbF9tZXJnZShyZXN1bHRfYnVmLCBhLT5wYXRoLCAmb3JpZywgYmFzZSwKKwkJCQkmc3JjMSwgbmFtZTEsICZzcmMyLCBuYW1lMiwKKwkJCQlvcHQtPnJlcG8tPmluZGV4LCAmbGxfb3B0cyk7CisKKwlmcmVlKGJhc2UpOworCWZyZWUobmFtZTEpOworCWZyZWUobmFtZTIpOworCWZyZWUob3JpZy5wdHIpOworCWZyZWUoc3JjMS5wdHIpOworCWZyZWUoc3JjMi5wdHIpOworCXJldHVybiBtZXJnZV9zdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9maXJzdF9tZXJnZXMoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICAgIHN0cnVjdCBvYmplY3RfYXJyYXkgKnJlc3VsdCwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICAgc3RydWN0IGNvbW1pdCAqYSwgc3RydWN0IGNvbW1pdCAqYikKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IG1lcmdlcyA9IE9CSkVDVF9BUlJBWV9JTklUOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlpbnQgY29udGFpbnNfYW5vdGhlcjsKKworCWNoYXIgbWVyZ2VkX3JldmlzaW9uW0dJVF9NQVhfSEVYU1ogKyAyXTsKKwljb25zdCBjaGFyICpyZXZfYXJnc1tdID0geyAicmV2LWxpc3QiLCAiLS1tZXJnZXMiLCAiLS1hbmNlc3RyeS1wYXRoIiwKKwkJCQkgICAiLS1hbGwiLCBtZXJnZWRfcmV2aXNpb24sIE5VTEwgfTsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IHJldl9vcHRzOworCisJbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKHN0cnVjdCBvYmplY3RfYXJyYXkpKTsKKwltZW1zZXQoJnJldl9vcHRzLCAwLCBzaXplb2YocmV2X29wdHMpKTsKKworCS8qIGdldCBhbGwgcmV2aXNpb25zIHRoYXQgbWVyZ2UgY29tbWl0IGEgKi8KKwl4c25wcmludGYobWVyZ2VkX3JldmlzaW9uLCBzaXplb2YobWVyZ2VkX3JldmlzaW9uKSwgIl4lcyIsCisJCSAgb2lkX3RvX2hleCgmYS0+b2JqZWN0Lm9pZCkpOworCXJlcG9faW5pdF9yZXZpc2lvbnMocmVwbywgJnJldnMsIE5VTEwpOworCXJldl9vcHRzLnN1Ym1vZHVsZSA9IHBhdGg7CisJLyogRklYTUU6IGNhbid0IGhhbmRsZSBsaW5rZWQgd29ya3RyZWVzIGluIHN1Ym1vZHVsZXMgeWV0ICovCisJcmV2cy5zaW5nbGVfd29ya3RyZWUgPSBwYXRoICE9IE5VTEw7CisJc2V0dXBfcmV2aXNpb25zKEFSUkFZX1NJWkUocmV2X2FyZ3MpLTEsIHJldl9hcmdzLCAmcmV2cywgJnJldl9vcHRzKTsKKworCS8qIHNhdmUgYWxsIHJldmlzaW9ucyBmcm9tIHRoZSBhYm92ZSBsaXN0IHRoYXQgY29udGFpbiBiICovCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2cykpICE9IE5VTEwpIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9ICYoY29tbWl0LT5vYmplY3QpOworCQlpZiAoaW5fbWVyZ2VfYmFzZXMoYiwgY29tbWl0KSkKKwkJCWFkZF9vYmplY3RfYXJyYXkobywgTlVMTCwgJm1lcmdlcyk7CisJfQorCXJlc2V0X3JldmlzaW9uX3dhbGsoKTsKKworCS8qIE5vdyB3ZSd2ZSBnb3QgYWxsIG1lcmdlcyB0aGF0IGNvbnRhaW4gYSBhbmQgYi4gUHJ1bmUgYWxsCisJICogbWVyZ2VzIHRoYXQgY29udGFpbiBhbm90aGVyIGZvdW5kIG1lcmdlIGFuZCBzYXZlIHRoZW0gaW4KKwkgKiByZXN1bHQuCisJICovCisJZm9yIChpID0gMDsgaSA8IG1lcmdlcy5ucjsgaSsrKSB7CisJCXN0cnVjdCBjb21taXQgKm0xID0gKHN0cnVjdCBjb21taXQgKikgbWVyZ2VzLm9iamVjdHNbaV0uaXRlbTsKKworCQljb250YWluc19hbm90aGVyID0gMDsKKwkJZm9yIChqID0gMDsgaiA8IG1lcmdlcy5ucjsgaisrKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICptMiA9IChzdHJ1Y3QgY29tbWl0ICopIG1lcmdlcy5vYmplY3RzW2pdLml0ZW07CisJCQlpZiAoaSAhPSBqICYmIGluX21lcmdlX2Jhc2VzKG0yLCBtMSkpIHsKKwkJCQljb250YWluc19hbm90aGVyID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghY29udGFpbnNfYW5vdGhlcikKKwkJCWFkZF9vYmplY3RfYXJyYXkobWVyZ2VzLm9iamVjdHNbaV0uaXRlbSwgTlVMTCwgcmVzdWx0KTsKKwl9CisKKwlvYmplY3RfYXJyYXlfY2xlYXIoJm1lcmdlcyk7CisJcmV0dXJuIHJlc3VsdC0+bnI7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CisJY3R4LmRhdGVfbW9kZS50eXBlID0gREFURV9OT1JNQUw7CisJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgIiAlaDogJW0gJXMiLCAmc2IsICZjdHgpOworCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHNiLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RhdGljIGludCBpc192YWxpZChjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGZzKQoreworCXJldHVybiBkZnMtPm1vZGUgIT0gMCAmJiAhaXNfbnVsbF9vaWQoJmRmcy0+b2lkKTsKK30KKworc3RhdGljIGludCBtZXJnZV9zdWJtb2R1bGUoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCSAgIHN0cnVjdCBvYmplY3RfaWQgKnJlc3VsdCwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmJhc2UsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmEsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpiKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdF9iYXNlLCAqY29tbWl0X2EsICpjb21taXRfYjsKKwlpbnQgcGFyZW50X2NvdW50OworCXN0cnVjdCBvYmplY3RfYXJyYXkgbWVyZ2VzOworCisJaW50IGk7CisJaW50IHNlYXJjaCA9ICFvcHQtPnByaXYtPmNhbGxfZGVwdGg7CisKKwkvKiBzdG9yZSBhIGluIHJlc3VsdCBpbiBjYXNlIHdlIGZhaWwgKi8KKwlvaWRjcHkocmVzdWx0LCBhKTsKKworCS8qIHdlIGNhbiBub3QgaGFuZGxlIGRlbGV0aW9uIGNvbmZsaWN0cyAqLworCWlmIChpc19udWxsX29pZChiYXNlKSkKKwkJcmV0dXJuIDA7CisJaWYgKGlzX251bGxfb2lkKGEpKQorCQlyZXR1cm4gMDsKKwlpZiAoaXNfbnVsbF9vaWQoYikpCisJCXJldHVybiAwOworCisJaWYgKGFkZF9zdWJtb2R1bGVfb2RiKHBhdGgpKSB7CisJCW91dHB1dChvcHQsIDEsIF8oIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBjaGVja2VkIG91dCkiKSwgcGF0aCk7CisJCXJldHVybiAwOworCX0KKworCWlmICghKGNvbW1pdF9iYXNlID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uob3B0LT5yZXBvLCBiYXNlKSkgfHwKKwkgICAgIShjb21taXRfYSA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKG9wdC0+cmVwbywgYSkpIHx8CisJICAgICEoY29tbWl0X2IgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShvcHQtPnJlcG8sIGIpKSkgeworCQlvdXRwdXQob3B0LCAxLCBfKCJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIG5vdCBwcmVzZW50KSIpLCBwYXRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogY2hlY2sgd2hldGhlciBib3RoIGNoYW5nZXMgYXJlIGZvcndhcmQgKi8KKwlpZiAoIWluX21lcmdlX2Jhc2VzKGNvbW1pdF9iYXNlLCBjb21taXRfYSkgfHwKKwkgICAgIWluX21lcmdlX2Jhc2VzKGNvbW1pdF9iYXNlLCBjb21taXRfYikpIHsKKwkJb3V0cHV0KG9wdCwgMSwgXygiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBkb24ndCBmb2xsb3cgbWVyZ2UtYmFzZSkiKSwgcGF0aCk7CisJCXJldHVybiAwOworCX0KKworCS8qIENhc2UgIzE6IGEgaXMgY29udGFpbmVkIGluIGIgb3IgdmljZSB2ZXJzYSAqLworCWlmIChpbl9tZXJnZV9iYXNlcyhjb21taXRfYSwgY29tbWl0X2IpKSB7CisJCW9pZGNweShyZXN1bHQsIGIpOworCQlpZiAoc2hvdyhvcHQsIDMpKSB7CisJCQlvdXRwdXQob3B0LCAzLCBfKCJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIHRvIHRoZSBmb2xsb3dpbmcgY29tbWl0OiIpLCBwYXRoKTsKKwkJCW91dHB1dF9jb21taXRfdGl0bGUob3B0LCBjb21taXRfYik7CisJCX0gZWxzZSBpZiAoc2hvdyhvcHQsIDIpKQorCQkJb3V0cHV0KG9wdCwgMiwgXygiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIpLCBwYXRoKTsKKwkJZWxzZQorCQkJOyAvKiBubyBvdXRwdXQgKi8KKworCQlyZXR1cm4gMTsKKwl9CisJaWYgKGluX21lcmdlX2Jhc2VzKGNvbW1pdF9iLCBjb21taXRfYSkpIHsKKwkJb2lkY3B5KHJlc3VsdCwgYSk7CisJCWlmIChzaG93KG9wdCwgMykpIHsKKwkJCW91dHB1dChvcHQsIDMsIF8oIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMgdG8gdGhlIGZvbGxvd2luZyBjb21taXQ6IiksIHBhdGgpOworCQkJb3V0cHV0X2NvbW1pdF90aXRsZShvcHQsIGNvbW1pdF9hKTsKKwkJfSBlbHNlIGlmIChzaG93KG9wdCwgMikpCisJCQlvdXRwdXQob3B0LCAyLCBfKCJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIiksIHBhdGgpOworCQllbHNlCisJCQk7IC8qIG5vIG91dHB1dCAqLworCisJCXJldHVybiAxOworCX0KKworCS8qCisJICogQ2FzZSAjMjogVGhlcmUgYXJlIG9uZSBvciBtb3JlIG1lcmdlcyB0aGF0IGNvbnRhaW4gYSBhbmQgYiBpbgorCSAqIHRoZSBzdWJtb2R1bGUuIElmIHRoZXJlIGlzIG9ubHkgb25lLCB0aGVuIHByZXNlbnQgaXQgYXMgYQorCSAqIHN1Z2dlc3Rpb24gdG8gdGhlIHVzZXIsIGJ1dCBsZWF2ZSBpdCBtYXJrZWQgdW5tZXJnZWQgc28gdGhlCisJICogdXNlciBuZWVkcyB0byBjb25maXJtIHRoZSByZXNvbHV0aW9uLgorCSAqLworCisJLyogU2tpcCB0aGUgc2VhcmNoIGlmIG1ha2VzIG5vIHNlbnNlIHRvIHRoZSBjYWxsaW5nIGNvbnRleHQuICAqLworCWlmICghc2VhcmNoKQorCQlyZXR1cm4gMDsKKworCS8qIGZpbmQgY29tbWl0IHdoaWNoIG1lcmdlcyB0aGVtICovCisJcGFyZW50X2NvdW50ID0gZmluZF9maXJzdF9tZXJnZXMob3B0LT5yZXBvLCAmbWVyZ2VzLCBwYXRoLAorCQkJCQkgY29tbWl0X2EsIGNvbW1pdF9iKTsKKwlzd2l0Y2ggKHBhcmVudF9jb3VudCkgeworCWNhc2UgMDoKKwkJb3V0cHV0KG9wdCwgMSwgXygiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobWVyZ2UgZm9sbG93aW5nIGNvbW1pdHMgbm90IGZvdW5kKSIpLCBwYXRoKTsKKwkJYnJlYWs7CisKKwljYXNlIDE6CisJCW91dHB1dChvcHQsIDEsIF8oIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBmYXN0LWZvcndhcmQpIiksIHBhdGgpOworCQlvdXRwdXQob3B0LCAyLCBfKCJGb3VuZCBhIHBvc3NpYmxlIG1lcmdlIHJlc29sdXRpb24gZm9yIHRoZSBzdWJtb2R1bGU6XG4iKSk7CisJCXByaW50X2NvbW1pdCgoc3RydWN0IGNvbW1pdCAqKSBtZXJnZXMub2JqZWN0c1swXS5pdGVtKTsKKwkJb3V0cHV0KG9wdCwgMiwgXygKKwkJICAgICAgICJJZiB0aGlzIGlzIGNvcnJlY3Qgc2ltcGx5IGFkZCBpdCB0byB0aGUgaW5kZXggIgorCQkgICAgICAgImZvciBleGFtcGxlXG4iCisJCSAgICAgICAiYnkgdXNpbmc6XG5cbiIKKwkJICAgICAgICIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuXG4iCisJCSAgICAgICAid2hpY2ggd2lsbCBhY2NlcHQgdGhpcyBzdWdnZXN0aW9uLlxuIiksCisJCSAgICAgICBvaWRfdG9faGV4KCZtZXJnZXMub2JqZWN0c1swXS5pdGVtLT5vaWQpLCBwYXRoKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlvdXRwdXQob3B0LCAxLCBfKCJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtdWx0aXBsZSBtZXJnZXMgZm91bmQpIiksIHBhdGgpOworCQlmb3IgKGkgPSAwOyBpIDwgbWVyZ2VzLm5yOyBpKyspCisJCQlwcmludF9jb21taXQoKHN0cnVjdCBjb21taXQgKikgbWVyZ2VzLm9iamVjdHNbaV0uaXRlbSk7CisJfQorCisJb2JqZWN0X2FycmF5X2NsZWFyKCZtZXJnZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lcmdlX21vZGVfYW5kX2NvbnRlbnRzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJICAgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm8sCisJCQkJICAgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmEsCisJCQkJICAgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmIsCisJCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJICAgY29uc3QgY2hhciAqYnJhbmNoMSwKKwkJCQkgICBjb25zdCBjaGFyICpicmFuY2gyLAorCQkJCSAgIGNvbnN0IGludCBleHRyYV9tYXJrZXJfc2l6ZSwKKwkJCQkgICBzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvICpyZXN1bHQpCit7CisJaWYgKG9wdC0+YnJhbmNoMSAhPSBicmFuY2gxKSB7CisJCS8qCisJCSAqIEl0J3Mgd2VpcmQgZ2V0dGluZyBhIHJldmVyc2UgbWVyZ2Ugd2l0aCBIRUFEIG9uIHRoZSBib3R0b20KKwkJICogc2lkZSBvZiB0aGUgY29uZmxpY3QgbWFya2VycyBhbmQgdGhlIG90aGVyIGJyYW5jaCBvbiB0aGUKKwkJICogdG9wLiAgRml4IHRoYXQuCisJCSAqLworCQlyZXR1cm4gbWVyZ2VfbW9kZV9hbmRfY29udGVudHMob3B0LCBvLCBiLCBhLAorCQkJCQkgICAgICAgZmlsZW5hbWUsCisJCQkJCSAgICAgICBicmFuY2gyLCBicmFuY2gxLAorCQkJCQkgICAgICAgZXh0cmFfbWFya2VyX3NpemUsIHJlc3VsdCk7CisJfQorCisJcmVzdWx0LT5tZXJnZSA9IDA7CisJcmVzdWx0LT5jbGVhbiA9IDE7CisKKwlpZiAoKFNfSUZNVCAmIGEtPm1vZGUpICE9IChTX0lGTVQgJiBiLT5tb2RlKSkgeworCQlyZXN1bHQtPmNsZWFuID0gMDsKKwkJaWYgKFNfSVNSRUcoYS0+bW9kZSkpIHsKKwkJCXJlc3VsdC0+YmxvYi5tb2RlID0gYS0+bW9kZTsKKwkJCW9pZGNweSgmcmVzdWx0LT5ibG9iLm9pZCwgJmEtPm9pZCk7CisJCX0gZWxzZSB7CisJCQlyZXN1bHQtPmJsb2IubW9kZSA9IGItPm1vZGU7CisJCQlvaWRjcHkoJnJlc3VsdC0+YmxvYi5vaWQsICZiLT5vaWQpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCFvaWRlcSgmYS0+b2lkLCAmby0+b2lkKSAmJiAhb2lkZXEoJmItPm9pZCwgJm8tPm9pZCkpCisJCQlyZXN1bHQtPm1lcmdlID0gMTsKKworCQkvKgorCQkgKiBNZXJnZSBtb2RlcworCQkgKi8KKwkJaWYgKGEtPm1vZGUgPT0gYi0+bW9kZSB8fCBhLT5tb2RlID09IG8tPm1vZGUpCisJCQlyZXN1bHQtPmJsb2IubW9kZSA9IGItPm1vZGU7CisJCWVsc2UgeworCQkJcmVzdWx0LT5ibG9iLm1vZGUgPSBhLT5tb2RlOworCQkJaWYgKGItPm1vZGUgIT0gby0+bW9kZSkgeworCQkJCXJlc3VsdC0+Y2xlYW4gPSAwOworCQkJCXJlc3VsdC0+bWVyZ2UgPSAxOworCQkJfQorCQl9CisKKwkJaWYgKG9pZGVxKCZhLT5vaWQsICZiLT5vaWQpIHx8IG9pZGVxKCZhLT5vaWQsICZvLT5vaWQpKQorCQkJb2lkY3B5KCZyZXN1bHQtPmJsb2Iub2lkLCAmYi0+b2lkKTsKKwkJZWxzZSBpZiAob2lkZXEoJmItPm9pZCwgJm8tPm9pZCkpCisJCQlvaWRjcHkoJnJlc3VsdC0+YmxvYi5vaWQsICZhLT5vaWQpOworCQllbHNlIGlmIChTX0lTUkVHKGEtPm1vZGUpKSB7CisJCQltbWJ1ZmZlcl90IHJlc3VsdF9idWY7CisJCQlpbnQgcmV0ID0gMCwgbWVyZ2Vfc3RhdHVzOworCisJCQltZXJnZV9zdGF0dXMgPSBtZXJnZV8zd2F5KG9wdCwgJnJlc3VsdF9idWYsIG8sIGEsIGIsCisJCQkJCQkgIGJyYW5jaDEsIGJyYW5jaDIsCisJCQkJCQkgIGV4dHJhX21hcmtlcl9zaXplKTsKKworCQkJaWYgKChtZXJnZV9zdGF0dXMgPCAwKSB8fCAhcmVzdWx0X2J1Zi5wdHIpCisJCQkJcmV0ID0gZXJyKG9wdCwgXygiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiKSk7CisKKwkJCWlmICghcmV0ICYmCisJCQkgICAgd3JpdGVfb2JqZWN0X2ZpbGUocmVzdWx0X2J1Zi5wdHIsIHJlc3VsdF9idWYuc2l6ZSwKKwkJCQkJICAgICAgYmxvYl90eXBlLCAmcmVzdWx0LT5ibG9iLm9pZCkpCisJCQkJcmV0ID0gZXJyKG9wdCwgXygiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIpLAorCQkJCQkgIGEtPnBhdGgpOworCisJCQlmcmVlKHJlc3VsdF9idWYucHRyKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCXJlc3VsdC0+Y2xlYW4gPSAobWVyZ2Vfc3RhdHVzID09IDApOworCQl9IGVsc2UgaWYgKFNfSVNHSVRMSU5LKGEtPm1vZGUpKSB7CisJCQlyZXN1bHQtPmNsZWFuID0gbWVyZ2Vfc3VibW9kdWxlKG9wdCwgJnJlc3VsdC0+YmxvYi5vaWQsCisJCQkJCQkJby0+cGF0aCwKKwkJCQkJCQkmby0+b2lkLAorCQkJCQkJCSZhLT5vaWQsCisJCQkJCQkJJmItPm9pZCk7CisJCX0gZWxzZSBpZiAoU19JU0xOSyhhLT5tb2RlKSkgeworCQkJc3dpdGNoIChvcHQtPnJlY3Vyc2l2ZV92YXJpYW50KSB7CisJCQljYXNlIE1FUkdFX1ZBUklBTlRfTk9STUFMOgorCQkJCW9pZGNweSgmcmVzdWx0LT5ibG9iLm9pZCwgJmEtPm9pZCk7CisJCQkJaWYgKCFvaWRlcSgmYS0+b2lkLCAmYi0+b2lkKSkKKwkJCQkJcmVzdWx0LT5jbGVhbiA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIE1FUkdFX1ZBUklBTlRfT1VSUzoKKwkJCQlvaWRjcHkoJnJlc3VsdC0+YmxvYi5vaWQsICZhLT5vaWQpOworCQkJCWJyZWFrOworCQkJY2FzZSBNRVJHRV9WQVJJQU5UX1RIRUlSUzoKKwkJCQlvaWRjcHkoJnJlc3VsdC0+YmxvYi5vaWQsICZiLT5vaWQpOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UKKwkJCUJVRygidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgaW4gdGhlIHRyZWUiKTsKKwl9CisKKwlpZiAocmVzdWx0LT5tZXJnZSkKKwkJb3V0cHV0KG9wdCwgMiwgXygiQXV0by1tZXJnaW5nICVzIiksIGZpbGVuYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9yZW5hbWVfdmlhX2RpcihzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJCSBzdHJ1Y3QgcmVuYW1lX2NvbmZsaWN0X2luZm8gKmNpKQoreworCS8qCisJICogSGFuZGxlIGZpbGUgYWRkcyB0aGF0IG5lZWQgdG8gYmUgcmVuYW1lZCBkdWUgdG8gZGlyZWN0b3J5IHJlbmFtZQorCSAqIGRldGVjdGlvbi4gIFRoaXMgZGlmZmVycyBmcm9tIGhhbmRsZV9yZW5hbWVfbm9ybWFsLCBiZWNhdXNlCisJICogdGhlcmUgaXMgbm8gY29udGVudCBtZXJnZSB0byBkbzsganVzdCBtb3ZlIHRoZSBmaWxlIGludG8gdGhlCisJICogZGVzaXJlZCBmaW5hbCBsb2NhdGlvbi4KKwkgKi8KKwljb25zdCBzdHJ1Y3QgcmVuYW1lICpyZW4gPSBjaS0+cmVuMTsKKwljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGVzdCA9IHJlbi0+cGFpci0+dHdvOworCWNoYXIgKmZpbGVfcGF0aCA9IGRlc3QtPnBhdGg7CisJaW50IG1hcmtfY29uZmxpY3RlZCA9IChvcHQtPmRldGVjdF9kaXJlY3RvcnlfcmVuYW1lcyA9PQorCQkJICAgICAgIE1FUkdFX0RJUkVDVE9SWV9SRU5BTUVTX0NPTkZMSUNUKTsKKwlhc3NlcnQocmVuLT5kaXJfcmVuYW1lX29yaWdpbmFsX2Rlc3QpOworCisJaWYgKCFvcHQtPnByaXYtPmNhbGxfZGVwdGggJiYgd291bGRfbG9zZV91bnRyYWNrZWQob3B0LCBkZXN0LT5wYXRoKSkgeworCQltYXJrX2NvbmZsaWN0ZWQgPSAxOworCQlmaWxlX3BhdGggPSB1bmlxdWVfcGF0aChvcHQsIGRlc3QtPnBhdGgsIHJlbi0+YnJhbmNoKTsKKwkJb3V0cHV0KG9wdCwgMSwgXygiRXJyb3I6IFJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7ICIKKwkJCQkgIndyaXRpbmcgdG8gJXMgaW5zdGVhZC4iKSwKKwkJICAgICAgIGRlc3QtPnBhdGgsIGZpbGVfcGF0aCk7CisJfQorCisJaWYgKG1hcmtfY29uZmxpY3RlZCkgeworCQkvKgorCQkgKiBXcml0ZSB0aGUgZmlsZSBpbiB3b3JrdHJlZSBhdCBmaWxlX3BhdGguICBJbiB0aGUgaW5kZXgsCisJCSAqIG9ubHkgcmVjb3JkIHRoZSBmaWxlIGF0IGRlc3QtPnBhdGggaW4gdGhlIGFwcHJvcHJpYXRlCisJCSAqIGhpZ2hlciBzdGFnZS4KKwkJICovCisJCWlmICh1cGRhdGVfZmlsZShvcHQsIDAsIGRlc3QsIGZpbGVfcGF0aCkpCisJCQlyZXR1cm4gLTE7CisJCWlmIChmaWxlX3BhdGggIT0gZGVzdC0+cGF0aCkKKwkJCWZyZWUoZmlsZV9wYXRoKTsKKwkJaWYgKHVwZGF0ZV9zdGFnZXMob3B0LCBkZXN0LT5wYXRoLCBOVUxMLAorCQkJCSAgcmVuLT5icmFuY2ggPT0gb3B0LT5icmFuY2gxID8gZGVzdCA6IE5VTEwsCisJCQkJICByZW4tPmJyYW5jaCA9PSBvcHQtPmJyYW5jaDEgPyBOVUxMIDogZGVzdCkpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOyAvKiBub3QgY2xlYW4sIGJ1dCBjb25mbGljdGVkICovCisJfSBlbHNlIHsKKwkJLyogVXBkYXRlIGRlc3QtPnBhdGggYm90aCBpbiBpbmRleCBhbmQgaW4gd29ya3RyZWUgKi8KKwkJaWYgKHVwZGF0ZV9maWxlKG9wdCwgMSwgZGVzdCwgZGVzdC0+cGF0aCkpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAxOyAvKiBjbGVhbiAqLworCX0KK30KKworc3RhdGljIGludCBoYW5kbGVfY2hhbmdlX2RlbGV0ZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm9sZF9wYXRoLAorCQkJCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvLAorCQkJCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpjaGFuZ2VkLAorCQkJCWNvbnN0IGNoYXIgKmNoYW5nZV9icmFuY2gsCisJCQkJY29uc3QgY2hhciAqZGVsZXRlX2JyYW5jaCwKKwkJCQljb25zdCBjaGFyICpjaGFuZ2UsIGNvbnN0IGNoYXIgKmNoYW5nZV9wYXN0KQoreworCWNoYXIgKmFsdF9wYXRoID0gTlVMTDsKKwljb25zdCBjaGFyICp1cGRhdGVfcGF0aCA9IHBhdGg7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZGlyX2luX3dheShvcHQtPnJlcG8tPmluZGV4LCBwYXRoLCAhb3B0LT5wcml2LT5jYWxsX2RlcHRoLCAwKSB8fAorCSAgICAoIW9wdC0+cHJpdi0+Y2FsbF9kZXB0aCAmJiB3b3VsZF9sb3NlX3VudHJhY2tlZChvcHQsIHBhdGgpKSkgeworCQl1cGRhdGVfcGF0aCA9IGFsdF9wYXRoID0gdW5pcXVlX3BhdGgob3B0LCBwYXRoLCBjaGFuZ2VfYnJhbmNoKTsKKwl9CisKKwlpZiAob3B0LT5wcml2LT5jYWxsX2RlcHRoKSB7CisJCS8qCisJCSAqIFdlIGNhbm5vdCBhcmJpdHJhcmlseSBhY2NlcHQgZWl0aGVyIGFfc2hhIG9yIGJfc2hhIGFzCisJCSAqIGNvcnJlY3Q7IHNpbmNlIHRoZXJlIGlzIG5vIHRydWUgIm1pZGRsZSBwb2ludCIgYmV0d2VlbgorCQkgKiB0aGVtLCBzaW1wbHkgcmV1c2UgdGhlIGJhc2UgdmVyc2lvbiBmb3IgdmlydHVhbCBtZXJnZSBiYXNlLgorCQkgKi8KKwkJcmV0ID0gcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleChvcHQtPnJlcG8tPmluZGV4LCBwYXRoKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSB1cGRhdGVfZmlsZShvcHQsIDAsIG8sIHVwZGF0ZV9wYXRoKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBEZXNwaXRlIHRoZSBmb3VyIG5lYXJseSBkdXBsaWNhdGUgbWVzc2FnZXMgYW5kIGFyZ3VtZW50CisJCSAqIGxpc3RzIGJlbG93IGFuZCB0aGUgdWdsaW5lc3Mgb2YgdGhlIG5lc3RlZCBpZi1zdGF0ZW1lbnRzLAorCQkgKiBoYXZpbmcgY29tcGxldGUgbWVzc2FnZXMgbWFrZXMgdGhlIGpvYiBlYXNpZXIgZm9yCisJCSAqIHRyYW5zbGF0b3JzLgorCQkgKgorCQkgKiBUaGUgc2xpZ2h0IHZhcmlhbmNlIGFtb25nIHRoZSBjYXNlcyBpcyBkdWUgdG8gdGhlIGZhY3QKKwkJICogdGhhdDoKKwkJICogICAxKSBkaXJlY3RvcnkvZmlsZSBjb25mbGljdHMgKGluIGVmZmVjdCBpZgorCQkgKiAgICAgICFhbHRfcGF0aCkgY291bGQgY2F1c2UgdXMgdG8gbmVlZCB0byB3cml0ZSB0aGUKKwkJICogICAgICBmaWxlIHRvIGEgZGlmZmVyZW50IHBhdGguCisJCSAqICAgMikgcmVuYW1lcyAoaW4gZWZmZWN0IGlmICFvbGRfcGF0aCkgY291bGQgbWVhbiB0aGF0CisJCSAqICAgICAgdGhlcmUgYXJlIHR3byBuYW1lcyBmb3IgdGhlIHBhdGggdGhhdCB0aGUgdXNlcgorCQkgKiAgICAgIG1heSBrbm93IHRoZSBmaWxlIGJ5LgorCQkgKi8KKwkJaWYgKCFhbHRfcGF0aCkgeworCQkJaWYgKCFvbGRfcGF0aCkgeworCQkJCW91dHB1dChvcHQsIDEsIF8oIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzICIKKwkJCQkgICAgICAgImFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0IGluIHRyZWUuIiksCisJCQkJICAgICAgIGNoYW5nZSwgcGF0aCwgZGVsZXRlX2JyYW5jaCwgY2hhbmdlX3Bhc3QsCisJCQkJICAgICAgIGNoYW5nZV9icmFuY2gsIGNoYW5nZV9icmFuY2gsIHBhdGgpOworCQkJfSBlbHNlIHsKKwkJCQlvdXRwdXQob3B0LCAxLCBfKCJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyAiCisJCQkJICAgICAgICJhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCBpbiB0cmVlLiIpLAorCQkJCSAgICAgICBjaGFuZ2UsIG9sZF9wYXRoLCBkZWxldGVfYnJhbmNoLCBjaGFuZ2VfcGFzdCwgcGF0aCwKKwkJCQkgICAgICAgY2hhbmdlX2JyYW5jaCwgY2hhbmdlX2JyYW5jaCwgcGF0aCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoIW9sZF9wYXRoKSB7CisJCQkJb3V0cHV0KG9wdCwgMSwgXygiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgIgorCQkJCSAgICAgICAiYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgaW4gdHJlZSBhdCAlcy4iKSwKKwkJCQkgICAgICAgY2hhbmdlLCBwYXRoLCBkZWxldGVfYnJhbmNoLCBjaGFuZ2VfcGFzdCwKKwkJCQkgICAgICAgY2hhbmdlX2JyYW5jaCwgY2hhbmdlX2JyYW5jaCwgcGF0aCwgYWx0X3BhdGgpOworCQkJfSBlbHNlIHsKKwkJCQlvdXRwdXQob3B0LCAxLCBfKCJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyAiCisJCQkJICAgICAgICJhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCBpbiB0cmVlIGF0ICVzLiIpLAorCQkJCSAgICAgICBjaGFuZ2UsIG9sZF9wYXRoLCBkZWxldGVfYnJhbmNoLCBjaGFuZ2VfcGFzdCwgcGF0aCwKKwkJCQkgICAgICAgY2hhbmdlX2JyYW5jaCwgY2hhbmdlX2JyYW5jaCwgcGF0aCwgYWx0X3BhdGgpOworCQkJfQorCQl9CisJCS8qCisJCSAqIE5vIG5lZWQgdG8gY2FsbCB1cGRhdGVfZmlsZSgpIG9uIHBhdGggd2hlbiBjaGFuZ2VfYnJhbmNoID09CisJCSAqIG9wdC0+YnJhbmNoMSAmJiAhYWx0X3BhdGgsIHNpbmNlIHRoYXQgd291bGQgbmVlZGxlc3NseSB0b3VjaAorCQkgKiBwYXRoLiAgV2UgY291bGQgY2FsbCB1cGRhdGVfZmlsZV9mbGFncygpIHdpdGggdXBkYXRlX2NhY2hlPTAKKwkJICogYW5kIHVwZGF0ZV93ZD0wLCBidXQgdGhhdCdzIGEgbm8tb3AuCisJCSAqLworCQlpZiAoY2hhbmdlX2JyYW5jaCAhPSBvcHQtPmJyYW5jaDEgfHwgYWx0X3BhdGgpCisJCQlyZXQgPSB1cGRhdGVfZmlsZShvcHQsIDAsIGNoYW5nZWQsIHVwZGF0ZV9wYXRoKTsKKwl9CisJZnJlZShhbHRfcGF0aCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGhhbmRsZV9yZW5hbWVfZGVsZXRlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvICpjaSkKK3sKKwljb25zdCBzdHJ1Y3QgcmVuYW1lICpyZW4gPSBjaS0+cmVuMTsKKwljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb3JpZyA9IHJlbi0+cGFpci0+b25lOworCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkZXN0ID0gcmVuLT5wYWlyLT50d287CisJY29uc3QgY2hhciAqcmVuYW1lX2JyYW5jaCA9IHJlbi0+YnJhbmNoOworCWNvbnN0IGNoYXIgKmRlbGV0ZV9icmFuY2ggPSAob3B0LT5icmFuY2gxID09IHJlbi0+YnJhbmNoID8KKwkJCQkgICAgIG9wdC0+YnJhbmNoMiA6IG9wdC0+YnJhbmNoMSk7CisKKwlpZiAoaGFuZGxlX2NoYW5nZV9kZWxldGUob3B0LAorCQkJCSBvcHQtPnByaXYtPmNhbGxfZGVwdGggPyBvcmlnLT5wYXRoIDogZGVzdC0+cGF0aCwKKwkJCQkgb3B0LT5wcml2LT5jYWxsX2RlcHRoID8gTlVMTCA6IG9yaWctPnBhdGgsCisJCQkJIG9yaWcsIGRlc3QsCisJCQkJIHJlbmFtZV9icmFuY2gsIGRlbGV0ZV9icmFuY2gsCisJCQkJIF8oInJlbmFtZSIpLCBfKCJyZW5hbWVkIikpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAob3B0LT5wcml2LT5jYWxsX2RlcHRoKQorCQlyZXR1cm4gcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleChvcHQtPnJlcG8tPmluZGV4LCBkZXN0LT5wYXRoKTsKKwllbHNlCisJCXJldHVybiB1cGRhdGVfc3RhZ2VzKG9wdCwgZGVzdC0+cGF0aCwgTlVMTCwKKwkJCQkgICAgIHJlbmFtZV9icmFuY2ggPT0gb3B0LT5icmFuY2gxID8gZGVzdCA6IE5VTEwsCisJCQkJICAgICByZW5hbWVfYnJhbmNoID09IG9wdC0+YnJhbmNoMSA/IE5VTEwgOiBkZXN0KTsKK30KKworc3RhdGljIGludCBoYW5kbGVfZmlsZV9jb2xsaXNpb24oc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCQkgY29uc3QgY2hhciAqY29sbGlkZV9wYXRoLAorCQkJCSBjb25zdCBjaGFyICpwcmV2X3BhdGgxLAorCQkJCSBjb25zdCBjaGFyICpwcmV2X3BhdGgyLAorCQkJCSBjb25zdCBjaGFyICpicmFuY2gxLCBjb25zdCBjaGFyICpicmFuY2gyLAorCQkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSwKKwkJCQkgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmIpCit7CisJc3RydWN0IG1lcmdlX2ZpbGVfaW5mbyBtZmk7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgbnVsbDsKKwljaGFyICphbHRfcGF0aCA9IE5VTEw7CisJY29uc3QgY2hhciAqdXBkYXRlX3BhdGggPSBjb2xsaWRlX3BhdGg7CisKKwkvKgorCSAqIEl0J3MgZWFzaWVzdCB0byBnZXQgdGhlIGNvcnJlY3QgdGhpbmdzIGludG8gc3RhZ2UgMiBhbmQgMywgYW5kCisJICogdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvbnRlbnQgbWVyZ2UgcHV0cyBIRUFEIGJlZm9yZSB0aGUgb3RoZXIKKwkgKiBicmFuY2ggaWYgd2UganVzdCBlbnN1cmUgdGhhdCBicmFuY2gxID09IG9wdC0+YnJhbmNoMS4gIFNvLCBzaW1wbHkKKwkgKiBmbGlwIGFyZ3VtZW50cyBhcm91bmQgaWYgd2UgZG9uJ3QgaGF2ZSB0aGF0LgorCSAqLworCWlmIChicmFuY2gxICE9IG9wdC0+YnJhbmNoMSkgeworCQlyZXR1cm4gaGFuZGxlX2ZpbGVfY29sbGlzaW9uKG9wdCwgY29sbGlkZV9wYXRoLAorCQkJCQkgICAgIHByZXZfcGF0aDIsIHByZXZfcGF0aDEsCisJCQkJCSAgICAgYnJhbmNoMiwgYnJhbmNoMSwKKwkJCQkJICAgICBiLCBhKTsKKwl9CisKKwkvKiBSZW1vdmUgcmVuYW1lIHNvdXJjZXMgaWYgcmVuYW1lL2FkZCBvciByZW5hbWUvcmVuYW1lKDJ0bzEpICovCisJaWYgKHByZXZfcGF0aDEpCisJCXJlbW92ZV9maWxlKG9wdCwgMSwgcHJldl9wYXRoMSwKKwkJCSAgICBvcHQtPnByaXYtPmNhbGxfZGVwdGggfHwgd291bGRfbG9zZV91bnRyYWNrZWQob3B0LCBwcmV2X3BhdGgxKSk7CisJaWYgKHByZXZfcGF0aDIpCisJCXJlbW92ZV9maWxlKG9wdCwgMSwgcHJldl9wYXRoMiwKKwkJCSAgICBvcHQtPnByaXYtPmNhbGxfZGVwdGggfHwgd291bGRfbG9zZV91bnRyYWNrZWQob3B0LCBwcmV2X3BhdGgyKSk7CisKKwkvKgorCSAqIFJlbW92ZSB0aGUgY29sbGlzaW9uIHBhdGgsIGlmIGl0IHdvdWxkbid0IGNhdXNlIGRpcnR5IGNvbnRlbnRzCisJICogb3IgYW4gdW50cmFja2VkIGZpbGUgdG8gZ2V0IGxvc3QuICBXZSdsbCBlaXRoZXIgb3ZlcndyaXRlIHdpdGgKKwkgKiBtZXJnZWQgY29udGVudHMsIG9yIGp1c3Qgd3JpdGUgb3V0IHRvIGRpZmZlcmVudGx5IG5hbWVkIGZpbGVzLgorCSAqLworCWlmICh3YXNfZGlydHkob3B0LCBjb2xsaWRlX3BhdGgpKSB7CisJCW91dHB1dChvcHQsIDEsIF8oIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCAlcyIpLAorCQkgICAgICAgY29sbGlkZV9wYXRoKTsKKwkJdXBkYXRlX3BhdGggPSBhbHRfcGF0aCA9IHVuaXF1ZV9wYXRoKG9wdCwgY29sbGlkZV9wYXRoLCAibWVyZ2VkIik7CisJfSBlbHNlIGlmICh3b3VsZF9sb3NlX3VudHJhY2tlZChvcHQsIGNvbGxpZGVfcGF0aCkpIHsKKwkJLyoKKwkJICogT25seSB3YXkgd2UgZ2V0IGhlcmUgaXMgaWYgYm90aCByZW5hbWVzIHdlcmUgZnJvbQorCQkgKiBhIGRpcmVjdG9yeSByZW5hbWUgQU5EIHVzZXIgaGFkIGFuIHVudHJhY2tlZCBmaWxlCisJCSAqIGF0IHRoZSBsb2NhdGlvbiB3aGVyZSBib3RoIGZpbGVzIGVuZCB1cCBhZnRlciB0aGUKKwkJICogdHdvIGRpcmVjdG9yeSByZW5hbWVzLiAgU2VlIHRlc3RjYXNlIDEwZCBvZiB0NjA0My4KKwkJICovCisJCW91dHB1dChvcHQsIDEsIF8oIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgIgorCQkJICAgICAgICIlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIpLAorCQkgICAgICAgY29sbGlkZV9wYXRoKTsKKwkJdXBkYXRlX3BhdGggPSBhbHRfcGF0aCA9IHVuaXF1ZV9wYXRoKG9wdCwgY29sbGlkZV9wYXRoLCAibWVyZ2VkIik7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRklYTUU6IEl0J3MgcG9zc2libGUgdGhhdCB0aGUgdHdvIGZpbGVzIGFyZSBpZGVudGljYWwKKwkJICogYW5kIHRoYXQgdGhlIGN1cnJlbnQgd29ya2luZyBjb3B5IGhhcHBlbnMgdG8gbWF0Y2gsIGluCisJCSAqIHdoaWNoIGNhc2Ugd2UgYXJlIHVubmVjZXNzYXJpbHkgdG91Y2hpbmcgdGhlIHdvcmtpbmcKKwkJICogdHJlZSBmaWxlLiAgSXQncyBub3QgYSBsaWtlbHkgZW5vdWdoIHNjZW5hcmlvIHRoYXQgSQorCQkgKiB3YW50IHRvIGNvZGUgdXAgdGhlIGNoZWNrcyBmb3IgaXQgYW5kIGEgYmV0dGVyIGZpeCBpcworCQkgKiBhdmFpbGFibGUgaWYgd2UgcmVzdHJ1Y3R1cmUgaG93IHVucGFja190cmVlcygpIGFuZAorCQkgKiBtZXJnZS1yZWN1cnNpdmUgaW50ZXJvcGVyYXRlIGFueXdheSwgc28gcHVudGluZyBmb3IKKwkJICogbm93Li4uCisJCSAqLworCQlyZW1vdmVfZmlsZShvcHQsIDAsIGNvbGxpZGVfcGF0aCwgMCk7CisJfQorCisJLyogU3RvcmUgdGhpbmdzIGluIGRpZmZfZmlsZXNwZWNzIGZvciBmdW5jdGlvbnMgdGhhdCBuZWVkIGl0ICovCisJbnVsbC5wYXRoID0gKGNoYXIgKiljb2xsaWRlX3BhdGg7CisJb2lkY3B5KCZudWxsLm9pZCwgJm51bGxfb2lkKTsKKwludWxsLm1vZGUgPSAwOworCisJaWYgKG1lcmdlX21vZGVfYW5kX2NvbnRlbnRzKG9wdCwgJm51bGwsIGEsIGIsIGNvbGxpZGVfcGF0aCwKKwkJCQkgICAgYnJhbmNoMSwgYnJhbmNoMiwgb3B0LT5wcml2LT5jYWxsX2RlcHRoICogMiwgJm1maSkpCisJCXJldHVybiAtMTsKKwltZmkuY2xlYW4gJj0gIWFsdF9wYXRoOworCWlmICh1cGRhdGVfZmlsZShvcHQsIG1maS5jbGVhbiwgJm1maS5ibG9iLCB1cGRhdGVfcGF0aCkpCisJCXJldHVybiAtMTsKKwlpZiAoIW1maS5jbGVhbiAmJiAhb3B0LT5wcml2LT5jYWxsX2RlcHRoICYmCisJICAgIHVwZGF0ZV9zdGFnZXMob3B0LCBjb2xsaWRlX3BhdGgsIE5VTEwsIGEsIGIpKQorCQlyZXR1cm4gLTE7CisJZnJlZShhbHRfcGF0aCk7CisJLyoKKwkgKiBGSVhNRTogSWYgYm90aCBhICYgYiBib3RoIHN0YXJ0ZWQgd2l0aCBjb25mbGljdHMgKG9ubHkgcG9zc2libGUKKwkgKiBpZiB0aGV5IGNhbWUgZnJvbSBhIHJlbmFtZS9yZW5hbWUoMnRvMSkpLCBidXQgaGFkIElERU5USUNBTAorCSAqIGNvbnRlbnRzIGluY2x1ZGluZyB0aG9zZSBjb25mbGljdHMsIHRoZW4gaW4gdGhlIG5leHQgbGluZSB3ZSBjbGFpbQorCSAqIGl0IHdhcyBjbGVhbi4gIElmIHNvbWVvbmUgY2FyZXMgYWJvdXQgdGhpcyBjYXNlLCB3ZSBzaG91bGQgaGF2ZSB0aGUKKwkgKiBjYWxsZXIgbm90aWZ5IHVzIGlmIHdlIHN0YXJ0ZWQgd2l0aCBjb25mbGljdHMuCisJICovCisJcmV0dXJuIG1maS5jbGVhbjsKK30KKworc3RhdGljIGludCBoYW5kbGVfcmVuYW1lX2FkZChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJICAgICBzdHJ1Y3QgcmVuYW1lX2NvbmZsaWN0X2luZm8gKmNpKQoreworCS8qIGEgd2FzIHJlbmFtZWQgdG8gYywgYW5kIGEgc2VwYXJhdGUgYyB3YXMgYWRkZWQuICovCisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmEgPSBjaS0+cmVuMS0+cGFpci0+b25lOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpjID0gY2ktPnJlbjEtPnBhaXItPnR3bzsKKwljaGFyICpwYXRoID0gYy0+cGF0aDsKKwljaGFyICpwcmV2X3BhdGhfZGVzYzsKKwlzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1maTsKKworCWNvbnN0IGNoYXIgKnJlbmFtZV9icmFuY2ggPSBjaS0+cmVuMS0+YnJhbmNoOworCWNvbnN0IGNoYXIgKmFkZF9icmFuY2ggPSAob3B0LT5icmFuY2gxID09IHJlbmFtZV9icmFuY2ggPworCQkJCSAgb3B0LT5icmFuY2gyIDogb3B0LT5icmFuY2gxKTsKKwlpbnQgb3RoZXJfc3RhZ2UgPSAoY2ktPnJlbjEtPmJyYW5jaCA9PSBvcHQtPmJyYW5jaDEgPyAzIDogMik7CisKKwlvdXRwdXQob3B0LCAxLCBfKCJDT05GTElDVCAocmVuYW1lL2FkZCk6ICIKKwkgICAgICAgIlJlbmFtZSAlcy0+JXMgaW4gJXMuICBBZGRlZCAlcyBpbiAlcyIpLAorCSAgICAgICBhLT5wYXRoLCBjLT5wYXRoLCByZW5hbWVfYnJhbmNoLAorCSAgICAgICBjLT5wYXRoLCBhZGRfYnJhbmNoKTsKKworCXByZXZfcGF0aF9kZXNjID0geHN0cmZtdCgidmVyc2lvbiBvZiAlcyBmcm9tICVzIiwgcGF0aCwgYS0+cGF0aCk7CisJY2ktPnJlbjEtPnNyY19lbnRyeS0+c3RhZ2VzW290aGVyX3N0YWdlXS5wYXRoID0gYS0+cGF0aDsKKwlpZiAobWVyZ2VfbW9kZV9hbmRfY29udGVudHMob3B0LCBhLCBjLAorCQkJCSAgICAmY2ktPnJlbjEtPnNyY19lbnRyeS0+c3RhZ2VzW290aGVyX3N0YWdlXSwKKwkJCQkgICAgcHJldl9wYXRoX2Rlc2MsCisJCQkJICAgIG9wdC0+YnJhbmNoMSwgb3B0LT5icmFuY2gyLAorCQkJCSAgICAxICsgb3B0LT5wcml2LT5jYWxsX2RlcHRoICogMiwgJm1maSkpCisJCXJldHVybiAtMTsKKwlmcmVlKHByZXZfcGF0aF9kZXNjKTsKKworCWNpLT5yZW4xLT5kc3RfZW50cnktPnN0YWdlc1tvdGhlcl9zdGFnZV0ucGF0aCA9IG1maS5ibG9iLnBhdGggPSBjLT5wYXRoOworCXJldHVybiBoYW5kbGVfZmlsZV9jb2xsaXNpb24ob3B0LAorCQkJCSAgICAgYy0+cGF0aCwgYS0+cGF0aCwgTlVMTCwKKwkJCQkgICAgIHJlbmFtZV9icmFuY2gsIGFkZF9icmFuY2gsCisJCQkJICAgICAmbWZpLmJsb2IsCisJCQkJICAgICAmY2ktPnJlbjEtPmRzdF9lbnRyeS0+c3RhZ2VzW290aGVyX3N0YWdlXSk7Cit9CisKK3N0YXRpYyBjaGFyICpmaW5kX3BhdGhfZm9yX2NvbmZsaWN0KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJyYW5jaDEsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJyYW5jaDIpCit7CisJY2hhciAqbmV3X3BhdGggPSBOVUxMOworCWlmIChkaXJfaW5fd2F5KG9wdC0+cmVwby0+aW5kZXgsIHBhdGgsICFvcHQtPnByaXYtPmNhbGxfZGVwdGgsIDApKSB7CisJCW5ld19wYXRoID0gdW5pcXVlX3BhdGgob3B0LCBwYXRoLCBicmFuY2gxKTsKKwkJb3V0cHV0KG9wdCwgMSwgXygiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nICIKKwkJCSAgICAgICAiYXMgJXMgaW5zdGVhZCIpLAorCQkgICAgICAgcGF0aCwgYnJhbmNoMiwgbmV3X3BhdGgpOworCX0gZWxzZSBpZiAod291bGRfbG9zZV91bnRyYWNrZWQob3B0LCBwYXRoKSkgeworCQluZXdfcGF0aCA9IHVuaXF1ZV9wYXRoKG9wdCwgcGF0aCwgYnJhbmNoMSk7CisJCW91dHB1dChvcHQsIDEsIF8oIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUiCisJCQkgICAgICAgIiBhdCAlczsgYWRkaW5nIGFzICVzIGluc3RlYWQiKSwKKwkJICAgICAgIHBhdGgsIG5ld19wYXRoKTsKKwl9CisKKwlyZXR1cm4gbmV3X3BhdGg7Cit9CisKKy8qCisgKiBUb2dnbGUgdGhlIHN0YWdlIG51bWJlciBiZXR3ZWVuICJvdXJzIiBhbmQgInRoZWlycyIgKDIgYW5kIDMpLgorICovCitzdGF0aWMgaW5saW5lIGludCBmbGlwX3N0YWdlKGludCBzdGFnZSkKK3sKKwlyZXR1cm4gKDIgKyAzKSAtIHN0YWdlOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9yZW5hbWVfcmVuYW1lXzF0bzIoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCQkgICAgIHN0cnVjdCByZW5hbWVfY29uZmxpY3RfaW5mbyAqY2kpCit7CisJLyogT25lIGZpbGUgd2FzIHJlbmFtZWQgaW4gYm90aCBicmFuY2hlcywgYnV0IHRvIGRpZmZlcmVudCBuYW1lcy4gKi8KKwlzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1maTsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYWRkOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvID0gY2ktPnJlbjEtPnBhaXItPm9uZTsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSA9IGNpLT5yZW4xLT5wYWlyLT50d287CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmIgPSBjaS0+cmVuMi0+cGFpci0+dHdvOworCWNoYXIgKnBhdGhfZGVzYzsKKworCW91dHB1dChvcHQsIDEsIF8oIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogIgorCSAgICAgICAiUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgIgorCSAgICAgICAicmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIFwiJXNcIiVzIiksCisJICAgICAgIG8tPnBhdGgsIGEtPnBhdGgsIGNpLT5yZW4xLT5icmFuY2gsCisJICAgICAgIG8tPnBhdGgsIGItPnBhdGgsIGNpLT5yZW4yLT5icmFuY2gsCisJICAgICAgIG9wdC0+cHJpdi0+Y2FsbF9kZXB0aCA/IF8oIiAobGVmdCB1bnJlc29sdmVkKSIpIDogIiIpOworCisJcGF0aF9kZXNjID0geHN0cmZtdCgiJXMgYW5kICVzLCBib3RoIHJlbmFtZWQgZnJvbSAlcyIsCisJCQkgICAgYS0+cGF0aCwgYi0+cGF0aCwgby0+cGF0aCk7CisJaWYgKG1lcmdlX21vZGVfYW5kX2NvbnRlbnRzKG9wdCwgbywgYSwgYiwgcGF0aF9kZXNjLAorCQkJCSAgICBjaS0+cmVuMS0+YnJhbmNoLCBjaS0+cmVuMi0+YnJhbmNoLAorCQkJCSAgICBvcHQtPnByaXYtPmNhbGxfZGVwdGggKiAyLCAmbWZpKSkKKwkJcmV0dXJuIC0xOworCWZyZWUocGF0aF9kZXNjKTsKKworCWlmIChvcHQtPnByaXYtPmNhbGxfZGVwdGgpCisJCXJlbW92ZV9maWxlX2Zyb21faW5kZXgob3B0LT5yZXBvLT5pbmRleCwgby0+cGF0aCk7CisKKwkvKgorCSAqIEZvciBlYWNoIGRlc3RpbmF0aW9uIHBhdGgsIHdlIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGEKKwkgKiByZW5hbWUvYWRkIGNvbGxpc2lvbi4gIElmIG5vdCwgd2UgY2FuIHdyaXRlIHRoZSBmaWxlIG91dAorCSAqIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uCisJICovCisJYWRkID0gJmNpLT5yZW4xLT5kc3RfZW50cnktPnN0YWdlc1tmbGlwX3N0YWdlKDIpXTsKKwlpZiAoaXNfdmFsaWQoYWRkKSkgeworCQlhZGQtPnBhdGggPSBtZmkuYmxvYi5wYXRoID0gYS0+cGF0aDsKKwkJaWYgKGhhbmRsZV9maWxlX2NvbGxpc2lvbihvcHQsIGEtPnBhdGgsCisJCQkJCSAgTlVMTCwgTlVMTCwKKwkJCQkJICBjaS0+cmVuMS0+YnJhbmNoLAorCQkJCQkgIGNpLT5yZW4yLT5icmFuY2gsCisJCQkJCSAgJm1maS5ibG9iLCBhZGQpIDwgMCkKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQljaGFyICpuZXdfcGF0aCA9IGZpbmRfcGF0aF9mb3JfY29uZmxpY3Qob3B0LCBhLT5wYXRoLAorCQkJCQkJCWNpLT5yZW4xLT5icmFuY2gsCisJCQkJCQkJY2ktPnJlbjItPmJyYW5jaCk7CisJCWlmICh1cGRhdGVfZmlsZShvcHQsIDAsICZtZmkuYmxvYiwKKwkJCQluZXdfcGF0aCA/IG5ld19wYXRoIDogYS0+cGF0aCkpCisJCQlyZXR1cm4gLTE7CisJCWZyZWUobmV3X3BhdGgpOworCQlpZiAoIW9wdC0+cHJpdi0+Y2FsbF9kZXB0aCAmJgorCQkgICAgdXBkYXRlX3N0YWdlcyhvcHQsIGEtPnBhdGgsIE5VTEwsIGEsIE5VTEwpKQorCQkJcmV0dXJuIC0xOworCX0KKworCWlmICghbWZpLmNsZWFuICYmIG1maS5ibG9iLm1vZGUgPT0gYS0+bW9kZSAmJgorCSAgICBvaWRlcSgmbWZpLmJsb2Iub2lkLCAmYS0+b2lkKSkgeworCQkvKgorCQkgKiBHZXR0aW5nIGhlcmUgbWVhbnMgd2Ugd2VyZSBhdHRlbXB0aW5nIHRvIG1lcmdlIGEgYmluYXJ5CisJCSAqIGJsb2IuICBTaW5jZSB3ZSBjYW4ndCBtZXJnZSBiaW5hcmllcywgdGhlIG1lcmdlIGFsZ29yaXRobQorCQkgKiBqdXN0IHRha2VzIG9uZSBzaWRlLiAgQnV0IHdlIGRvbid0IHdhbnQgdG8gY29weSB0aGUKKwkJICogY29udGVudHMgb2Ygb25lIHNpZGUgdG8gYm90aCBwYXRoczsgd2UnZCByYXRoZXIgdXNlIHRoZQorCQkgKiBvcmlnaW5hbCBjb250ZW50IGF0IHRoZSBnaXZlbiBwYXRoIGZvciBlYWNoIHBhdGguCisJCSAqLworCQlvaWRjcHkoJm1maS5ibG9iLm9pZCwgJmItPm9pZCk7CisJCW1maS5ibG9iLm1vZGUgPSBiLT5tb2RlOworCX0KKwlhZGQgPSAmY2ktPnJlbjItPmRzdF9lbnRyeS0+c3RhZ2VzW2ZsaXBfc3RhZ2UoMyldOworCWlmIChpc192YWxpZChhZGQpKSB7CisJCWFkZC0+cGF0aCA9IG1maS5ibG9iLnBhdGggPSBiLT5wYXRoOworCQlpZiAoaGFuZGxlX2ZpbGVfY29sbGlzaW9uKG9wdCwgYi0+cGF0aCwKKwkJCQkJICBOVUxMLCBOVUxMLAorCQkJCQkgIGNpLT5yZW4xLT5icmFuY2gsCisJCQkJCSAgY2ktPnJlbjItPmJyYW5jaCwKKwkJCQkJICBhZGQsICZtZmkuYmxvYikgPCAwKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCWNoYXIgKm5ld19wYXRoID0gZmluZF9wYXRoX2Zvcl9jb25mbGljdChvcHQsIGItPnBhdGgsCisJCQkJCQkJY2ktPnJlbjItPmJyYW5jaCwKKwkJCQkJCQljaS0+cmVuMS0+YnJhbmNoKTsKKwkJaWYgKHVwZGF0ZV9maWxlKG9wdCwgMCwgJm1maS5ibG9iLAorCQkJCW5ld19wYXRoID8gbmV3X3BhdGggOiBiLT5wYXRoKSkKKwkJCXJldHVybiAtMTsKKwkJZnJlZShuZXdfcGF0aCk7CisJCWlmICghb3B0LT5wcml2LT5jYWxsX2RlcHRoICYmCisJCSAgICB1cGRhdGVfc3RhZ2VzKG9wdCwgYi0+cGF0aCwgTlVMTCwgTlVMTCwgYikpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX3JlbmFtZV9yZW5hbWVfMnRvMShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJCSAgICAgc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvICpjaSkKK3sKKwkvKiBUd28gZmlsZXMsIGEgJiBiLCB3ZXJlIHJlbmFtZWQgdG8gdGhlIHNhbWUgdGhpbmcsIGMuICovCisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmEgPSBjaS0+cmVuMS0+cGFpci0+b25lOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpiID0gY2ktPnJlbjItPnBhaXItPm9uZTsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYzEgPSBjaS0+cmVuMS0+cGFpci0+dHdvOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpjMiA9IGNpLT5yZW4yLT5wYWlyLT50d287CisJY2hhciAqcGF0aCA9IGMxLT5wYXRoOyAvKiA9PSBjMi0+cGF0aCAqLworCWNoYXIgKnBhdGhfc2lkZV8xX2Rlc2M7CisJY2hhciAqcGF0aF9zaWRlXzJfZGVzYzsKKwlzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1maV9jMTsKKwlzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1maV9jMjsKKwlpbnQgb3N0YWdlMSwgb3N0YWdlMjsKKworCW91dHB1dChvcHQsIDEsIF8oIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogIgorCSAgICAgICAiUmVuYW1lICVzLT4lcyBpbiAlcy4gIgorCSAgICAgICAiUmVuYW1lICVzLT4lcyBpbiAlcyIpLAorCSAgICAgICBhLT5wYXRoLCBjMS0+cGF0aCwgY2ktPnJlbjEtPmJyYW5jaCwKKwkgICAgICAgYi0+cGF0aCwgYzItPnBhdGgsIGNpLT5yZW4yLT5icmFuY2gpOworCisJcGF0aF9zaWRlXzFfZGVzYyA9IHhzdHJmbXQoInZlcnNpb24gb2YgJXMgZnJvbSAlcyIsIHBhdGgsIGEtPnBhdGgpOworCXBhdGhfc2lkZV8yX2Rlc2MgPSB4c3RyZm10KCJ2ZXJzaW9uIG9mICVzIGZyb20gJXMiLCBwYXRoLCBiLT5wYXRoKTsKKwlvc3RhZ2UxID0gY2ktPnJlbjEtPmJyYW5jaCA9PSBvcHQtPmJyYW5jaDEgPyAzIDogMjsKKwlvc3RhZ2UyID0gZmxpcF9zdGFnZShvc3RhZ2UxKTsKKwljaS0+cmVuMS0+c3JjX2VudHJ5LT5zdGFnZXNbb3N0YWdlMV0ucGF0aCA9IGEtPnBhdGg7CisJY2ktPnJlbjItPnNyY19lbnRyeS0+c3RhZ2VzW29zdGFnZTJdLnBhdGggPSBiLT5wYXRoOworCWlmIChtZXJnZV9tb2RlX2FuZF9jb250ZW50cyhvcHQsIGEsIGMxLAorCQkJCSAgICAmY2ktPnJlbjEtPnNyY19lbnRyeS0+c3RhZ2VzW29zdGFnZTFdLAorCQkJCSAgICBwYXRoX3NpZGVfMV9kZXNjLAorCQkJCSAgICBvcHQtPmJyYW5jaDEsIG9wdC0+YnJhbmNoMiwKKwkJCQkgICAgMSArIG9wdC0+cHJpdi0+Y2FsbF9kZXB0aCAqIDIsICZtZmlfYzEpIHx8CisJICAgIG1lcmdlX21vZGVfYW5kX2NvbnRlbnRzKG9wdCwgYiwKKwkJCQkgICAgJmNpLT5yZW4yLT5zcmNfZW50cnktPnN0YWdlc1tvc3RhZ2UyXSwKKwkJCQkgICAgYzIsIHBhdGhfc2lkZV8yX2Rlc2MsCisJCQkJICAgIG9wdC0+YnJhbmNoMSwgb3B0LT5icmFuY2gyLAorCQkJCSAgICAxICsgb3B0LT5wcml2LT5jYWxsX2RlcHRoICogMiwgJm1maV9jMikpCisJCXJldHVybiAtMTsKKwlmcmVlKHBhdGhfc2lkZV8xX2Rlc2MpOworCWZyZWUocGF0aF9zaWRlXzJfZGVzYyk7CisJbWZpX2MxLmJsb2IucGF0aCA9IHBhdGg7CisJbWZpX2MyLmJsb2IucGF0aCA9IHBhdGg7CisKKwlyZXR1cm4gaGFuZGxlX2ZpbGVfY29sbGlzaW9uKG9wdCwgcGF0aCwgYS0+cGF0aCwgYi0+cGF0aCwKKwkJCQkgICAgIGNpLT5yZW4xLT5icmFuY2gsIGNpLT5yZW4yLT5icmFuY2gsCisJCQkJICAgICAmbWZpX2MxLmJsb2IsICZtZmlfYzIuYmxvYik7Cit9CisKKy8qCisgKiBHZXQgdGhlIGRpZmZfZmlsZXBhaXJzIGNoYW5nZWQgYmV0d2VlbiBvX3RyZWUgYW5kIHRyZWUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKmdldF9kaWZmcGFpcnMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCQkJICAgICAgIHN0cnVjdCB0cmVlICpvX3RyZWUsCisJCQkJCSAgICAgICBzdHJ1Y3QgdHJlZSAqdHJlZSkKK3sKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnJldDsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIG9wdHM7CisKKwlyZXBvX2RpZmZfc2V0dXAob3B0LT5yZXBvLCAmb3B0cyk7CisJb3B0cy5mbGFncy5yZWN1cnNpdmUgPSAxOworCW9wdHMuZmxhZ3MucmVuYW1lX2VtcHR5ID0gMDsKKwlvcHRzLmRldGVjdF9yZW5hbWUgPSBtZXJnZV9kZXRlY3RfcmVuYW1lKG9wdCk7CisJLyoKKwkgKiBXZSBkbyBub3QgaGF2ZSBsb2dpYyB0byBoYW5kbGUgdGhlIGRldGVjdGlvbiBvZiBjb3BpZXMuICBJbgorCSAqIGZhY3QsIGl0IG1heSBub3QgZXZlbiBtYWtlIHNlbnNlIHRvIGFkZCBzdWNoIGxvZ2ljOiB3b3VsZCB3ZQorCSAqIHJlYWxseSB3YW50IGEgY2hhbmdlIHRvIGEgYmFzZSBmaWxlIHRvIGJlIHByb3BhZ2F0ZWQgdGhyb3VnaAorCSAqIG11bHRpcGxlIG90aGVyIGZpbGVzIGJ5IGEgbWVyZ2U/CisJICovCisJaWYgKG9wdHMuZGV0ZWN0X3JlbmFtZSA+IERJRkZfREVURUNUX1JFTkFNRSkKKwkJb3B0cy5kZXRlY3RfcmVuYW1lID0gRElGRl9ERVRFQ1RfUkVOQU1FOworCW9wdHMucmVuYW1lX2xpbWl0ID0gKG9wdC0+cmVuYW1lX2xpbWl0ID49IDApID8gb3B0LT5yZW5hbWVfbGltaXQgOiAxMDAwOworCW9wdHMucmVuYW1lX3Njb3JlID0gb3B0LT5yZW5hbWVfc2NvcmU7CisJb3B0cy5zaG93X3JlbmFtZV9wcm9ncmVzcyA9IG9wdC0+c2hvd19yZW5hbWVfcHJvZ3Jlc3M7CisJb3B0cy5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCWRpZmZfc2V0dXBfZG9uZSgmb3B0cyk7CisJZGlmZl90cmVlX29pZCgmb190cmVlLT5vYmplY3Qub2lkLCAmdHJlZS0+b2JqZWN0Lm9pZCwgIiIsICZvcHRzKTsKKwlkaWZmY29yZV9zdGQoJm9wdHMpOworCWlmIChvcHRzLm5lZWRlZF9yZW5hbWVfbGltaXQgPiBvcHQtPnByaXYtPm5lZWRlZF9yZW5hbWVfbGltaXQpCisJCW9wdC0+cHJpdi0+bmVlZGVkX3JlbmFtZV9saW1pdCA9IG9wdHMubmVlZGVkX3JlbmFtZV9saW1pdDsKKworCXJldCA9IHhtYWxsb2Moc2l6ZW9mKCpyZXQpKTsKKwkqcmV0ID0gZGlmZl9xdWV1ZWRfZGlmZjsKKworCW9wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlkaWZmX3F1ZXVlZF9kaWZmLm5yID0gMDsKKwlkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlID0gTlVMTDsKKwlkaWZmX2ZsdXNoKCZvcHRzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRyZWVfaGFzX3BhdGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCB0cmVlICp0cmVlLAorCQkJIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IG9iamVjdF9pZCBoYXNoeTsKKwl1bnNpZ25lZCBzaG9ydCBtb2RlX287CisKKwlyZXR1cm4gIWdldF90cmVlX2VudHJ5KHIsCisJCQkgICAgICAgJnRyZWUtPm9iamVjdC5vaWQsIHBhdGgsCisJCQkgICAgICAgJmhhc2h5LCAmbW9kZV9vKTsKK30KKworLyoKKyAqIFJldHVybiBhIG5ldyBzdHJpbmcgdGhhdCByZXBsYWNlcyB0aGUgYmVnaW5uaW5nIHBvcnRpb24gKHdoaWNoIG1hdGNoZXMKKyAqIGVudHJ5LT5kaXIpLCB3aXRoIGVudHJ5LT5uZXdfZGlyLiAgSW4gcGVybC1zcGVhazoKKyAqICAgbmV3X3BhdGhfbmFtZSA9IChvbGRfcGF0aCA9fiBzL2VudHJ5LT5kaXIvZW50cnktPm5ld19kaXIvKTsKKyAqIE5PVEU6CisgKiAgIENhbGxlciBtdXN0IGVuc3VyZSB0aGF0IG9sZF9wYXRoIHN0YXJ0cyB3aXRoIGVudHJ5LT5kaXIgKyAnLycuCisgKi8KK3N0YXRpYyBjaGFyICphcHBseV9kaXJfcmVuYW1lKHN0cnVjdCBkaXJfcmVuYW1lX2VudHJ5ICplbnRyeSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm9sZF9wYXRoKQoreworCXN0cnVjdCBzdHJidWYgbmV3X3BhdGggPSBTVFJCVUZfSU5JVDsKKwlpbnQgb2xkbGVuLCBuZXdsZW47CisKKwlpZiAoZW50cnktPm5vbl91bmlxdWVfbmV3X2RpcikKKwkJcmV0dXJuIE5VTEw7CisKKwlvbGRsZW4gPSBzdHJsZW4oZW50cnktPmRpcik7CisJaWYgKGVudHJ5LT5uZXdfZGlyLmxlbiA9PSAwKQorCQkvKgorCQkgKiBJZiBzb21lb25lIHJlbmFtZWQvbWVyZ2VkIGEgc3ViZGlyZWN0b3J5IGludG8gdGhlIHJvb3QKKwkJICogZGlyZWN0b3J5IChlLmcuICdzb21lL3N1YmRpcicgLT4gJycpLCB0aGVuIHdlIHdhbnQgdG8KKwkJICogYXZvaWQgcmV0dXJuaW5nCisJCSAqICAgICAnJyArICcvZmlsZW5hbWUnCisJCSAqIGFzIHRoZSByZW5hbWU7IHdlIG5lZWQgdG8gbWFrZSBvbGRfcGF0aCArIG9sZGxlbiBhZHZhbmNlCisJCSAqIHBhc3QgdGhlICcvJyBjaGFyYWN0ZXIuCisJCSAqLworCQlvbGRsZW4rKzsKKwluZXdsZW4gPSBlbnRyeS0+bmV3X2Rpci5sZW4gKyAoc3RybGVuKG9sZF9wYXRoKSAtIG9sZGxlbikgKyAxOworCXN0cmJ1Zl9ncm93KCZuZXdfcGF0aCwgbmV3bGVuKTsKKwlzdHJidWZfYWRkYnVmKCZuZXdfcGF0aCwgJmVudHJ5LT5uZXdfZGlyKTsKKwlzdHJidWZfYWRkc3RyKCZuZXdfcGF0aCwgJm9sZF9wYXRoW29sZGxlbl0pOworCisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJm5ld19wYXRoLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3JlbmFtZWRfZGlyX3BvcnRpb24oY29uc3QgY2hhciAqb2xkX3BhdGgsIGNvbnN0IGNoYXIgKm5ld19wYXRoLAorCQkJCSAgICBjaGFyICoqb2xkX2RpciwgY2hhciAqKm5ld19kaXIpCit7CisJY2hhciAqZW5kX29mX29sZCwgKmVuZF9vZl9uZXc7CisKKwkvKiBEZWZhdWx0IHJldHVybiB2YWx1ZXM6IE5VTEwsIG1lYW5pbmcgbm8gcmVuYW1lICovCisJKm9sZF9kaXIgPSBOVUxMOworCSpuZXdfZGlyID0gTlVMTDsKKworCS8qCisJICogRm9yCisJICogICAgImEvYi9jL2QvZS9mb28uYyIgLT4gImEvYi9zb21lL3RoaW5nL2Vsc2UvZS9mb28uYyIKKwkgKiB0aGUgImUvZm9vLmMiIHBhcnQgaXMgdGhlIHNhbWUsIHdlIGp1c3Qgd2FudCB0byBrbm93IHRoYXQKKwkgKiAgICAiYS9iL2MvZCIgd2FzIHJlbmFtZWQgdG8gImEvYi9zb21lL3RoaW5nL2Vsc2UiCisJICogc28sIGZvciB0aGlzIGV4YW1wbGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAiYS9iL2MvZCIgaW4KKwkgKiAqb2xkX2RpciBhbmQgImEvYi9zb21lL3RoaW5nL2Vsc2UiIGluICpuZXdfZGlyLgorCSAqLworCisJLyoKKwkgKiBJZiB0aGUgYmFzZW5hbWUgb2YgdGhlIGZpbGUgY2hhbmdlZCwgd2UgZG9uJ3QgY2FyZS4gIFdlIHdhbnQKKwkgKiB0byBrbm93IHdoaWNoIHBvcnRpb24gb2YgdGhlIGRpcmVjdG9yeSwgaWYgYW55LCBjaGFuZ2VkLgorCSAqLworCWVuZF9vZl9vbGQgPSBzdHJyY2hyKG9sZF9wYXRoLCAnLycpOworCWVuZF9vZl9uZXcgPSBzdHJyY2hyKG5ld19wYXRoLCAnLycpOworCisJLyoKKwkgKiBJZiBlbmRfb2Zfb2xkIGlzIE5VTEwsIG9sZF9wYXRoIHdhc24ndCBpbiBhIGRpcmVjdG9yeSwgc28gdGhlcmUKKwkgKiBjb3VsZCBub3QgYmUgYSBkaXJlY3RvcnkgcmVuYW1lIChvdXIgcnVsZSBlbHNld2hlcmUgdGhhdCBhCisJICogZGlyZWN0b3J5IHdoaWNoIHN0aWxsIGV4aXN0cyBpcyBub3QgY29uc2lkZXJlZCB0byBoYXZlIGJlZW4KKwkgKiByZW5hbWVkIG1lYW5zIHRoZSByb290IGRpcmVjdG9yeSBjYW4gbmV2ZXIgYmUgcmVuYW1lZCAtLSBiZWNhdXNlCisJICogdGhlIHJvb3QgZGlyZWN0b3J5IGFsd2F5cyBleGlzdHMpLgorCSAqLworCWlmIChlbmRfb2Zfb2xkID09IE5VTEwpCisJCXJldHVybjsgLyogTm90ZTogKm9sZF9kaXIgYW5kICpuZXdfZGlyIGFyZSBzdGlsbCBOVUxMICovCisKKwkvKgorCSAqIElmIG5ld19wYXRoIGNvbnRhaW5zIG5vIGRpcmVjdG9yeSAoZW5kX29mX25ldyBpcyBOVUxMKSwgdGhlbiB3ZQorCSAqIGhhdmUgYSByZW5hbWUgb2Ygb2xkX3BhdGgncyBkaXJlY3RvcnkgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LgorCSAqLworCWlmIChlbmRfb2ZfbmV3ID09IE5VTEwpIHsKKwkJKm9sZF9kaXIgPSB4c3RybmR1cChvbGRfcGF0aCwgZW5kX29mX29sZCAtIG9sZF9wYXRoKTsKKwkJKm5ld19kaXIgPSB4c3RyZHVwKCIiKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEZpbmQgdGhlIGZpcnN0IG5vbi1tYXRjaGluZyBjaGFyYWN0ZXIgdHJhdmVyc2luZyBiYWNrd2FyZHMgKi8KKwl3aGlsZSAoKi0tZW5kX29mX25ldyA9PSAqLS1lbmRfb2Zfb2xkICYmCisJICAgICAgIGVuZF9vZl9vbGQgIT0gb2xkX3BhdGggJiYKKwkgICAgICAgZW5kX29mX25ldyAhPSBuZXdfcGF0aCkKKwkJOyAvKiBEbyBub3RoaW5nOyBhbGwgaW4gdGhlIHdoaWxlIGxvb3AgKi8KKworCS8qCisJICogSWYgYm90aCBnb3QgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZWlyIHN0cmluZ3MsIHRoZW4gdGhlCisJICogZGlyZWN0b3J5IGRpZG4ndCBjaGFuZ2UgYXQgYWxsLCBvbmx5IHRoZSBiYXNlbmFtZSBkaWQuCisJICovCisJaWYgKGVuZF9vZl9vbGQgPT0gb2xkX3BhdGggJiYgZW5kX29mX25ldyA9PSBuZXdfcGF0aCAmJgorCSAgICAqZW5kX29mX29sZCA9PSAqZW5kX29mX25ldykKKwkJcmV0dXJuOyAvKiBOb3RlOiAqb2xkX2RpciBhbmQgKm5ld19kaXIgYXJlIHN0aWxsIE5VTEwgKi8KKworCS8qCisJICogSWYgZW5kX29mX25ldyBnb3QgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIGl0cyBzdHJpbmcsIGFuZAorCSAqIGVuZF9vZl9vbGQgZ290IGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiBzb21lIHN1YmRpcmVjdG9yeSwgdGhlbgorCSAqIHdlIGhhdmUgYSByZW5hbWUvbWVyZ2Ugb2YgYSBzdWJkaXJlY3RvcnkgaW50byB0aGUgcm9vdCwgd2hpY2gKKwkgKiBuZWVkcyBzbGlnaHRseSBzcGVjaWFsIGhhbmRsaW5nLgorCSAqCisJICogTm90ZTogVGhlcmUgaXMgbm8gbmVlZCB0byBjb25zaWRlciB0aGUgb3Bwb3NpdGUgY2FzZSwgd2l0aCBhCisJICogcmVuYW1lL21lcmdlIG9mIHRoZSByb290IGRpcmVjdG9yeSBpbnRvIHNvbWUgc3ViZGlyZWN0b3J5CisJICogYmVjYXVzZSBhcyBub3RlZCBhYm92ZSB0aGUgcm9vdCBkaXJlY3RvcnkgYWx3YXlzIGV4aXN0cyBzbyBpdAorCSAqIGNhbm5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIHJlbmFtZWQuCisJICovCisJaWYgKGVuZF9vZl9uZXcgPT0gbmV3X3BhdGggJiYKKwkgICAgZW5kX29mX29sZCAhPSBvbGRfcGF0aCAmJiBlbmRfb2Zfb2xkWy0xXSA9PSAnLycpIHsKKwkJKm9sZF9kaXIgPSB4c3RybmR1cChvbGRfcGF0aCwgLS1lbmRfb2Zfb2xkIC0gb2xkX3BhdGgpOworCQkqbmV3X2RpciA9IHhzdHJkdXAoIiIpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBXZSd2ZSBmb3VuZCB0aGUgZmlyc3Qgbm9uLW1hdGNoaW5nIGNoYXJhY3RlciBpbiB0aGUgZGlyZWN0b3J5CisJICogcGF0aHMuICBUaGF0IG1lYW5zIHRoZSBjdXJyZW50IGNoYXJhY3RlcnMgd2Ugd2VyZSBsb29raW5nIGF0CisJICogd2VyZSBwYXJ0IG9mIHRoZSBmaXJzdCBub24tbWF0Y2hpbmcgc3ViZGlyIG5hbWUgZ29pbmcgYmFjayBmcm9tCisJICogdGhlIGVuZCBvZiB0aGUgc3RyaW5ncy4gIEdldCB0aGUgd2hvbGUgbmFtZSBieSBhZHZhbmNpbmcgYm90aAorCSAqIGVuZF9vZl9vbGQgYW5kIGVuZF9vZl9uZXcgdG8gdGhlIE5FWFQgJy8nIGNoYXJhY3Rlci4gIFRoYXQgd2lsbAorCSAqIHJlcHJlc2VudCB0aGUgZW50aXJlIGRpcmVjdG9yeSByZW5hbWUuCisJICoKKwkgKiBUaGUgcmVhc29uIGZvciB0aGUgaW5jcmVtZW50IGlzIGNhc2VzIGxpa2UKKwkgKiAgICBhL2Ivc3Rhci9mb28vd2hhdGV2ZXIuYyAtPiBhL2IvdGFyL2Zvby9yYW5kb20uYworCSAqIEFmdGVyIGRyb3BwaW5nIHRoZSBiYXNlbmFtZSBhbmQgZ29pbmcgYmFjayB0byB0aGUgZmlyc3QKKwkgKiBub24tbWF0Y2hpbmcgY2hhcmFjdGVyLCB3ZSdyZSBub3cgY29tcGFyaW5nOgorCSAqICAgIGEvYi9zICAgICAgICAgIGFuZCAgICAgICAgIGEvYi8KKwkgKiBhbmQgd2Ugd2FudCB0byBiZSBjb21wYXJpbmc6CisJICogICAgYS9iL3N0YXIvICAgICAgYW5kICAgICAgICAgYS9iL3Rhci8KKwkgKiBidXQgd2l0aG91dCB0aGUgcHJlLWluY3JlbWVudCwgdGhlIG9uZSBvbiB0aGUgcmlnaHQgd291bGQgc3RheQorCSAqIGEvYi8uCisJICovCisJZW5kX29mX29sZCA9IHN0cmNocigrK2VuZF9vZl9vbGQsICcvJyk7CisJZW5kX29mX25ldyA9IHN0cmNocigrK2VuZF9vZl9uZXcsICcvJyk7CisKKwkvKiBDb3B5IHRoZSBvbGQgYW5kIG5ldyBkaXJlY3RvcmllcyBpbnRvICpvbGRfZGlyIGFuZCAqbmV3X2Rpci4gKi8KKwkqb2xkX2RpciA9IHhzdHJuZHVwKG9sZF9wYXRoLCBlbmRfb2Zfb2xkIC0gb2xkX3BhdGgpOworCSpuZXdfZGlyID0geHN0cm5kdXAobmV3X3BhdGgsIGVuZF9vZl9uZXcgLSBuZXdfcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9oYXNobWFwX2VudHJpZXMoc3RydWN0IGhhc2htYXAgKmRpcl9yZW5hbWVzLAorCQkJCSAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqaXRlbXNfdG9fcmVtb3ZlKQoreworCWludCBpOworCXN0cnVjdCBkaXJfcmVuYW1lX2VudHJ5ICplbnRyeTsKKworCWZvciAoaSA9IDA7IGkgPCBpdGVtc190b19yZW1vdmUtPm5yOyBpKyspIHsKKwkJZW50cnkgPSBpdGVtc190b19yZW1vdmUtPml0ZW1zW2ldLnV0aWw7CisJCWhhc2htYXBfcmVtb3ZlKGRpcl9yZW5hbWVzLCAmZW50cnktPmVudCwgTlVMTCk7CisJfQorCXN0cmluZ19saXN0X2NsZWFyKGl0ZW1zX3RvX3JlbW92ZSwgMCk7Cit9CisKKy8qCisgKiBTZWUgaWYgdGhlcmUgaXMgYSBkaXJlY3RvcnkgcmVuYW1lIGZvciBwYXRoLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBmaWxlCisgKiBsZXZlbCBjb25mbGljdHMgZm9yIHRoZSByZW5hbWVkIGxvY2F0aW9uLiAgSWYgdGhlcmUgaXMgYSByZW5hbWUgYW5kCisgKiB0aGVyZSBhcmUgbm8gY29uZmxpY3RzLCByZXR1cm4gdGhlIG5ldyBuYW1lLiAgT3RoZXJ3aXNlLCByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIGNoYXIgKmhhbmRsZV9wYXRoX2xldmVsX2NvbmZsaWN0cyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJCQkgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJIHN0cnVjdCBkaXJfcmVuYW1lX2VudHJ5ICplbnRyeSwKKwkJCQkJIHN0cnVjdCBoYXNobWFwICpjb2xsaXNpb25zLAorCQkJCQkgc3RydWN0IHRyZWUgKnRyZWUpCit7CisJY2hhciAqbmV3X3BhdGggPSBOVUxMOworCXN0cnVjdCBjb2xsaXNpb25fZW50cnkgKmNvbGxpc2lvbl9lbnQ7CisJaW50IGNsZWFuID0gMTsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbGxpc2lvbl9wYXRocyA9IFNUUkJVRl9JTklUOworCisJLyoKKwkgKiBlbnRyeSBoYXMgdGhlIG1hcHBpbmcgb2Ygb2xkIGRpcmVjdG9yeSBuYW1lIHRvIG5ldyBkaXJlY3RvcnkgbmFtZQorCSAqIHRoYXQgd2Ugd2FudCB0byBhcHBseSB0byBwYXRoLgorCSAqLworCW5ld19wYXRoID0gYXBwbHlfZGlyX3JlbmFtZShlbnRyeSwgcGF0aCk7CisKKwlpZiAoIW5ld19wYXRoKSB7CisJCS8qIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIHdoZW4gZW50cnktPm5vbl91bmlxdWVfbmV3X2RpciBzZXQgKi8KKwkJaWYgKCFlbnRyeS0+bm9uX3VuaXF1ZV9uZXdfZGlyKQorCQkJQlVHKCJlbnRyeS0+bm9uX3VucWl1ZV9kaXIgbm90IHNldCBhbmQgIW5ld19wYXRoIik7CisJCW91dHB1dChvcHQsIDEsIF8oIkNPTkZMSUNUIChkaXJlY3RvcnkgcmVuYW1lIHNwbGl0KTogIgorCQkJICAgICAgICJVbmNsZWFyIHdoZXJlIHRvIHBsYWNlICVzIGJlY2F1c2UgZGlyZWN0b3J5ICIKKwkJCSAgICAgICAiJXMgd2FzIHJlbmFtZWQgdG8gbXVsdGlwbGUgb3RoZXIgZGlyZWN0b3JpZXMsICIKKwkJCSAgICAgICAid2l0aCBubyBkZXN0aW5hdGlvbiBnZXR0aW5nIGEgbWFqb3JpdHkgb2YgdGhlICIKKwkJCSAgICAgICAiZmlsZXMuIiksCisJCSAgICAgICBwYXRoLCBlbnRyeS0+ZGlyKTsKKwkJY2xlYW4gPSAwOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIFRoZSBjYWxsZXIgbmVlZHMgdG8gaGF2ZSBlbnN1cmVkIHRoYXQgaXQgaGFzIHByZS1wb3B1bGF0ZWQKKwkgKiBjb2xsaXNpb25zIHdpdGggYWxsIHBhdGhzIHRoYXQgbWFwIHRvIG5ld19wYXRoLiAgRG8gYSBxdWljayBjaGVjaworCSAqIHRvIGVuc3VyZSB0aGF0J3MgdGhlIGNhc2UuCisJICovCisJY29sbGlzaW9uX2VudCA9IGNvbGxpc2lvbl9maW5kX2VudHJ5KGNvbGxpc2lvbnMsIG5ld19wYXRoKTsKKwlpZiAoY29sbGlzaW9uX2VudCA9PSBOVUxMKQorCQlCVUcoImNvbGxpc2lvbl9lbnQgaXMgTlVMTCIpOworCisJLyoKKwkgKiBDaGVjayBmb3Igb25lLXNpZGVkIGFkZC9hZGQvLi4uL2FkZCBjb25mbGljdHMsIGkuZS4KKwkgKiB3aGVyZSBpbXBsaWNpdCByZW5hbWVzIGZyb20gdGhlIG90aGVyIHNpZGUgZG9pbmcKKwkgKiBkaXJlY3RvcnkgcmVuYW1lKHMpIGNhbiBhZmZlY3QgdGhpcyBzaWRlIG9mIGhpc3RvcnkKKwkgKiB0byBwdXQgbXVsdGlwbGUgcGF0aHMgaW50byB0aGUgc2FtZSBsb2NhdGlvbi4gIFdhcm4KKwkgKiBhbmQgYmFpbCBvbiBkaXJlY3RvcnkgcmVuYW1lcyBmb3Igc3VjaCBwYXRocy4KKwkgKi8KKwlpZiAoY29sbGlzaW9uX2VudC0+cmVwb3J0ZWRfYWxyZWFkeSkgeworCQljbGVhbiA9IDA7CisJfSBlbHNlIGlmICh0cmVlX2hhc19wYXRoKG9wdC0+cmVwbywgdHJlZSwgbmV3X3BhdGgpKSB7CisJCWNvbGxpc2lvbl9lbnQtPnJlcG9ydGVkX2FscmVhZHkgPSAxOworCQlzdHJidWZfYWRkX3NlcGFyYXRlZF9zdHJpbmdfbGlzdCgmY29sbGlzaW9uX3BhdGhzLCAiLCAiLAorCQkJCQkJICZjb2xsaXNpb25fZW50LT5zb3VyY2VfZmlsZXMpOworCQlvdXRwdXQob3B0LCAxLCBfKCJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IEV4aXN0aW5nICIKKwkJCSAgICAgICAiZmlsZS9kaXIgYXQgJXMgaW4gdGhlIHdheSBvZiBpbXBsaWNpdCAiCisJCQkgICAgICAgImRpcmVjdG9yeSByZW5hbWUocykgcHV0dGluZyB0aGUgZm9sbG93aW5nICIKKwkJCSAgICAgICAicGF0aChzKSB0aGVyZTogJXMuIiksCisJCSAgICAgICBuZXdfcGF0aCwgY29sbGlzaW9uX3BhdGhzLmJ1Zik7CisJCWNsZWFuID0gMDsKKwl9IGVsc2UgaWYgKGNvbGxpc2lvbl9lbnQtPnNvdXJjZV9maWxlcy5uciA+IDEpIHsKKwkJY29sbGlzaW9uX2VudC0+cmVwb3J0ZWRfYWxyZWFkeSA9IDE7CisJCXN0cmJ1Zl9hZGRfc2VwYXJhdGVkX3N0cmluZ19saXN0KCZjb2xsaXNpb25fcGF0aHMsICIsICIsCisJCQkJCQkgJmNvbGxpc2lvbl9lbnQtPnNvdXJjZV9maWxlcyk7CisJCW91dHB1dChvcHQsIDEsIF8oIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogQ2Fubm90IG1hcCAiCisJCQkgICAgICAgIm1vcmUgdGhhbiBvbmUgcGF0aCB0byAlczsgaW1wbGljaXQgZGlyZWN0b3J5ICIKKwkJCSAgICAgICAicmVuYW1lcyB0cmllZCB0byBwdXQgdGhlc2UgcGF0aHMgdGhlcmU6ICVzIiksCisJCSAgICAgICBuZXdfcGF0aCwgY29sbGlzaW9uX3BhdGhzLmJ1Zik7CisJCWNsZWFuID0gMDsKKwl9CisKKwkvKiBGcmVlIG1lbW9yeSB3ZSBubyBsb25nZXIgbmVlZCAqLworCXN0cmJ1Zl9yZWxlYXNlKCZjb2xsaXNpb25fcGF0aHMpOworCWlmICghY2xlYW4gJiYgbmV3X3BhdGgpIHsKKwkJZnJlZShuZXdfcGF0aCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBuZXdfcGF0aDsKK30KKworLyoKKyAqIFRoZXJlIGFyZSBhIGNvdXBsZSB0aGluZ3Mgd2Ugd2FudCB0byBkbyBhdCB0aGUgZGlyZWN0b3J5IGxldmVsOgorICogICAxLiBDaGVjayBmb3IgYm90aCBzaWRlcyByZW5hbWluZyB0byB0aGUgc2FtZSB0aGluZywgaW4gb3JkZXIgdG8gYXZvaWQKKyAqICAgICAgaW1wbGljaXQgcmVuYW1pbmcgb2YgZmlsZXMgdGhhdCBzaG91bGQgYmUgbGVmdCBpbiBwbGFjZS4gIChTZWUKKyAqICAgICAgdGVzdGNhc2UgNmIgaW4gdDYwNDMgZm9yIGRldGFpbHMuKQorICogICAyLiBQcnVuZSBkaXJlY3RvcnkgcmVuYW1lcyBpZiB0aGVyZSBhcmUgc3RpbGwgZmlsZXMgbGVmdCBpbiB0aGUKKyAqICAgICAgdGhlIG9yaWdpbmFsIGRpcmVjdG9yeS4gIFRoZXNlIHJlcHJlc2VudCBhIHBhcnRpYWwgZGlyZWN0b3J5IHJlbmFtZSwKKyAqICAgICAgaS5lLiBhIHJlbmFtZSB3aGVyZSBvbmx5IHNvbWUgb2YgdGhlIGZpbGVzIHdpdGhpbiB0aGUgZGlyZWN0b3J5CisgKiAgICAgIHdlcmUgcmVuYW1lZCBlbHNld2hlcmUuICAoVGVjaG5pY2FsbHksIHRoaXMgY291bGQgYmUgZG9uZSBlYXJsaWVyCisgKiAgICAgIGluIGdldF9kaXJlY3RvcnlfcmVuYW1lcygpLCBleGNlcHQgdGhhdCB3b3VsZCBwcmV2ZW50IHVzIGZyb20KKyAqICAgICAgZG9pbmcgdGhlIHByZXZpb3VzIGNoZWNrIGFuZCB0aHVzIGZhaWxpbmcgdGVzdGNhc2UgNmIuKQorICogICAzLiBDaGVjayBmb3IgcmVuYW1lL3JlbmFtZSgxdG8yKSBjb25mbGljdHMgKGF0IHRoZSBkaXJlY3RvcnkgbGV2ZWwpLgorICogICAgICBJbiB0aGUgZnV0dXJlLCB3ZSBjb3VsZCBwb3RlbnRpYWxseSByZWNvcmQgdGhpcyBpbmZvIGFzIHdlbGwgYW5kCisgKiAgICAgIG9taXQgcmVwb3J0aW5nIHJlbmFtZS9yZW5hbWUoMXRvMikgY29uZmxpY3RzIGZvciBlYWNoIHBhdGggd2l0aGluCisgKiAgICAgIHRoZSBhZmZlY3RlZCBkaXJlY3RvcmllcywgdGh1cyBjbGVhbmluZyB1cCB0aGUgbWVyZ2Ugb3V0cHV0LgorICogICBOT1RFOiBXZSBkbyBOT1QgY2hlY2sgZm9yIHJlbmFtZS9yZW5hbWUoMnRvMSkgY29uZmxpY3RzIGF0IHRoZQorICogICAgICAgICBkaXJlY3RvcnkgbGV2ZWwsIGJlY2F1c2UgbWVyZ2luZyBkaXJlY3RvcmllcyBpcyBmaW5lLiAgSWYgaXQKKyAqICAgICAgICAgY2F1c2VzIGNvbmZsaWN0cyBmb3IgZmlsZXMgd2l0aGluIHRob3NlIG1lcmdlZCBkaXJlY3RvcmllcywgdGhlbgorICogICAgICAgICB0aGF0IHNob3VsZCBiZSBkZXRlY3RlZCBhdCB0aGUgaW5kaXZpZHVhbCBwYXRoIGxldmVsLgorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfZGlyZWN0b3J5X2xldmVsX2NvbmZsaWN0cyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJCQkgICAgIHN0cnVjdCBoYXNobWFwICpkaXJfcmVfaGVhZCwKKwkJCQkJICAgICBzdHJ1Y3QgdHJlZSAqaGVhZCwKKwkJCQkJICAgICBzdHJ1Y3QgaGFzaG1hcCAqZGlyX3JlX21lcmdlLAorCQkJCQkgICAgIHN0cnVjdCB0cmVlICptZXJnZSkKK3sKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisJc3RydWN0IGRpcl9yZW5hbWVfZW50cnkgKmhlYWRfZW50OworCXN0cnVjdCBkaXJfcmVuYW1lX2VudHJ5ICptZXJnZV9lbnQ7CisKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVtb3ZlX2Zyb21faGVhZCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IHJlbW92ZV9mcm9tX21lcmdlID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKworCWhhc2htYXBfZm9yX2VhY2hfZW50cnkoZGlyX3JlX2hlYWQsICZpdGVyLCBoZWFkX2VudCwKKwkJCQllbnQgLyogbWVtYmVyIG5hbWUgKi8pIHsKKwkJbWVyZ2VfZW50ID0gZGlyX3JlbmFtZV9maW5kX2VudHJ5KGRpcl9yZV9tZXJnZSwgaGVhZF9lbnQtPmRpcik7CisJCWlmIChtZXJnZV9lbnQgJiYKKwkJICAgICFoZWFkX2VudC0+bm9uX3VuaXF1ZV9uZXdfZGlyICYmCisJCSAgICAhbWVyZ2VfZW50LT5ub25fdW5pcXVlX25ld19kaXIgJiYKKwkJICAgICFzdHJidWZfY21wKCZoZWFkX2VudC0+bmV3X2RpciwgJm1lcmdlX2VudC0+bmV3X2RpcikpIHsKKwkJCS8qIDEuIFJlbmFtZWQgaWRlbnRpY2FsbHk7IHJlbW92ZSBpdCBmcm9tIGJvdGggc2lkZXMgKi8KKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVtb3ZlX2Zyb21faGVhZCwKKwkJCQkJICAgaGVhZF9lbnQtPmRpciktPnV0aWwgPSBoZWFkX2VudDsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkX2VudC0+bmV3X2Rpcik7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJlbW92ZV9mcm9tX21lcmdlLAorCQkJCQkgICBtZXJnZV9lbnQtPmRpciktPnV0aWwgPSBtZXJnZV9lbnQ7CisJCQlzdHJidWZfcmVsZWFzZSgmbWVyZ2VfZW50LT5uZXdfZGlyKTsKKwkJfSBlbHNlIGlmICh0cmVlX2hhc19wYXRoKG9wdC0+cmVwbywgaGVhZCwgaGVhZF9lbnQtPmRpcikpIHsKKwkJCS8qIDIuIFRoaXMgd2Fzbid0IGEgZGlyZWN0b3J5IHJlbmFtZSBhZnRlciBhbGwgKi8KKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVtb3ZlX2Zyb21faGVhZCwKKwkJCQkJICAgaGVhZF9lbnQtPmRpciktPnV0aWwgPSBoZWFkX2VudDsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkX2VudC0+bmV3X2Rpcik7CisJCX0KKwl9CisKKwlyZW1vdmVfaGFzaG1hcF9lbnRyaWVzKGRpcl9yZV9oZWFkLCAmcmVtb3ZlX2Zyb21faGVhZCk7CisJcmVtb3ZlX2hhc2htYXBfZW50cmllcyhkaXJfcmVfbWVyZ2UsICZyZW1vdmVfZnJvbV9tZXJnZSk7CisKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KGRpcl9yZV9tZXJnZSwgJml0ZXIsIG1lcmdlX2VudCwKKwkJCQllbnQgLyogbWVtYmVyIG5hbWUgKi8pIHsKKwkJaGVhZF9lbnQgPSBkaXJfcmVuYW1lX2ZpbmRfZW50cnkoZGlyX3JlX2hlYWQsIG1lcmdlX2VudC0+ZGlyKTsKKwkJaWYgKHRyZWVfaGFzX3BhdGgob3B0LT5yZXBvLCBtZXJnZSwgbWVyZ2VfZW50LT5kaXIpKSB7CisJCQkvKiAyLiBUaGlzIHdhc24ndCBhIGRpcmVjdG9yeSByZW5hbWUgYWZ0ZXIgYWxsICovCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJlbW92ZV9mcm9tX21lcmdlLAorCQkJCQkgICBtZXJnZV9lbnQtPmRpciktPnV0aWwgPSBtZXJnZV9lbnQ7CisJCX0gZWxzZSBpZiAoaGVhZF9lbnQgJiYKKwkJCSAgICFoZWFkX2VudC0+bm9uX3VuaXF1ZV9uZXdfZGlyICYmCisJCQkgICAhbWVyZ2VfZW50LT5ub25fdW5pcXVlX25ld19kaXIpIHsKKwkJCS8qIDMuIHJlbmFtZS9yZW5hbWUoMXRvMikgKi8KKwkJCS8qCisJCQkgKiBXZSBjYW4gYXNzdW1lIGl0J3Mgbm90IHJlbmFtZS9yZW5hbWUoMXRvMSkgYmVjYXVzZQorCQkJICogdGhhdCB3YXMgY2FzZSAoMSksIGFscmVhZHkgY2hlY2tlZCBhYm92ZS4gIFNvIHdlCisJCQkgKiBrbm93IHRoYXQgaGVhZF9lbnQtPm5ld19kaXIgYW5kIG1lcmdlX2VudC0+bmV3X2RpcgorCQkJICogYXJlIGRpZmZlcmVudCBzdHJpbmdzLgorCQkJICovCisJCQlvdXRwdXQob3B0LCAxLCBfKCJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6ICIKKwkJCQkgICAgICAgIlJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiAiCisJCQkJICAgICAgICJSZW5hbWUgZGlyZWN0b3J5ICVzLT4lcyBpbiAlcyIpLAorCQkJICAgICAgIGhlYWRfZW50LT5kaXIsIGhlYWRfZW50LT5uZXdfZGlyLmJ1Ziwgb3B0LT5icmFuY2gxLAorCQkJICAgICAgIGhlYWRfZW50LT5kaXIsIG1lcmdlX2VudC0+bmV3X2Rpci5idWYsIG9wdC0+YnJhbmNoMik7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJlbW92ZV9mcm9tX2hlYWQsCisJCQkJCSAgIGhlYWRfZW50LT5kaXIpLT51dGlsID0gaGVhZF9lbnQ7CisJCQlzdHJidWZfcmVsZWFzZSgmaGVhZF9lbnQtPm5ld19kaXIpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyZW1vdmVfZnJvbV9tZXJnZSwKKwkJCQkJICAgbWVyZ2VfZW50LT5kaXIpLT51dGlsID0gbWVyZ2VfZW50OworCQkJc3RyYnVmX3JlbGVhc2UoJm1lcmdlX2VudC0+bmV3X2Rpcik7CisJCX0KKwl9CisKKwlyZW1vdmVfaGFzaG1hcF9lbnRyaWVzKGRpcl9yZV9oZWFkLCAmcmVtb3ZlX2Zyb21faGVhZCk7CisJcmVtb3ZlX2hhc2htYXBfZW50cmllcyhkaXJfcmVfbWVyZ2UsICZyZW1vdmVfZnJvbV9tZXJnZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGFzaG1hcCAqZ2V0X2RpcmVjdG9yeV9yZW5hbWVzKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcGFpcnMpCit7CisJc3RydWN0IGhhc2htYXAgKmRpcl9yZW5hbWVzOworCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwlzdHJ1Y3QgZGlyX3JlbmFtZV9lbnRyeSAqZW50cnk7CisJaW50IGk7CisKKwkvKgorCSAqIFR5cGljYWxseSwgd2UgdGhpbmsgb2YgYSBkaXJlY3RvcnkgcmVuYW1lIGFzIGFsbCBmaWxlcyBmcm9tIGEKKwkgKiBjZXJ0YWluIGRpcmVjdG9yeSBiZWluZyBtb3ZlZCB0byBhIHRhcmdldCBkaXJlY3RvcnkuICBIb3dldmVyLAorCSAqIHdoYXQgaWYgc29tZW9uZSBmaXJzdCBtb3ZlZCB0d28gZmlsZXMgZnJvbSB0aGUgb3JpZ2luYWwKKwkgKiBkaXJlY3RvcnkgaW4gb25lIGNvbW1pdCwgYW5kIHRoZW4gcmVuYW1lZCB0aGUgZGlyZWN0b3J5CisJICogc29tZXdoZXJlIGVsc2UgaW4gYSBsYXRlciBjb21taXQ/ICBBdCBtZXJnZSB0aW1lLCB3ZSBqdXN0IGtub3cKKwkgKiB0aGF0IGZpbGVzIGZyb20gdGhlIG9yaWdpbmFsIGRpcmVjdG9yeSB3ZW50IHRvIHR3byBkaWZmZXJlbnQKKwkgKiBwbGFjZXMsIGFuZCB0aGF0IHRoZSBidWxrIG9mIHRoZW0gZW5kZWQgdXAgaW4gdGhlIHNhbWUgcGxhY2UuCisJICogV2Ugd2FudCBlYWNoIGRpcmVjdG9yeSByZW5hbWUgdG8gcmVwcmVzZW50IHdoZXJlIHRoZSBidWxrIG9mIHRoZQorCSAqIGZpbGVzIGZyb20gdGhhdCBkaXJlY3RvcnkgZW5kIHVwOyB0aGlzIGZ1bmN0aW9uIGV4aXN0cyB0byBmaW5kCisJICogd2hlcmUgdGhlIGJ1bGsgb2YgdGhlIGZpbGVzIHdlbnQuCisJICoKKwkgKiBUaGUgZmlyc3QgbG9vcCBiZWxvdyBzaW1wbHkgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBmaWxlCisJICogcmVuYW1lcywgZmluZGluZyBvdXQgaG93IG9mdGVuIGVhY2ggZGlyZWN0b3J5IHJlbmFtZSBwYWlyCisJICogcG9zc2liaWxpdHkgb2NjdXJzLgorCSAqLworCWRpcl9yZW5hbWVzID0geG1hbGxvYyhzaXplb2YoKmRpcl9yZW5hbWVzKSk7CisJZGlyX3JlbmFtZV9pbml0KGRpcl9yZW5hbWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGFpcnMtPm5yOyArK2kpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCWludCAqY291bnQ7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyID0gcGFpcnMtPnF1ZXVlW2ldOworCQljaGFyICpvbGRfZGlyLCAqbmV3X2RpcjsKKworCQkvKiBGaWxlIG5vdCBwYXJ0IG9mIGRpcmVjdG9yeSByZW5hbWUgaWYgaXQgd2Fzbid0IHJlbmFtZWQgKi8KKwkJaWYgKHBhaXItPnN0YXR1cyAhPSAnUicpCisJCQljb250aW51ZTsKKworCQlnZXRfcmVuYW1lZF9kaXJfcG9ydGlvbihwYWlyLT5vbmUtPnBhdGgsIHBhaXItPnR3by0+cGF0aCwKKwkJCQkJJm9sZF9kaXIsICAgICAgICAmbmV3X2Rpcik7CisJCWlmICghb2xkX2RpcikKKwkJCS8qIERpcmVjdG9yeSBkaWRuJ3QgY2hhbmdlIGF0IGFsbDsgaWdub3JlIHRoaXMgb25lLiAqLworCQkJY29udGludWU7CisKKwkJZW50cnkgPSBkaXJfcmVuYW1lX2ZpbmRfZW50cnkoZGlyX3JlbmFtZXMsIG9sZF9kaXIpOworCQlpZiAoIWVudHJ5KSB7CisJCQllbnRyeSA9IHhtYWxsb2Moc2l6ZW9mKCplbnRyeSkpOworCQkJZGlyX3JlbmFtZV9lbnRyeV9pbml0KGVudHJ5LCBvbGRfZGlyKTsKKwkJCWhhc2htYXBfcHV0KGRpcl9yZW5hbWVzLCAmZW50cnktPmVudCk7CisJCX0gZWxzZSB7CisJCQlmcmVlKG9sZF9kaXIpOworCQl9CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoJmVudHJ5LT5wb3NzaWJsZV9uZXdfZGlycywgbmV3X2Rpcik7CisJCWlmICghaXRlbSkgeworCQkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCgmZW50cnktPnBvc3NpYmxlX25ld19kaXJzLAorCQkJCQkJICBuZXdfZGlyKTsKKwkJCWl0ZW0tPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZihpbnQpKTsKKwkJfSBlbHNlIHsKKwkJCWZyZWUobmV3X2Rpcik7CisJCX0KKwkJY291bnQgPSBpdGVtLT51dGlsOworCQkqY291bnQgKz0gMTsKKwl9CisKKwkvKgorCSAqIEZvciBlYWNoIGRpcmVjdG9yeSB3aXRoIGZpbGVzIG1vdmVkIG91dCBvZiBpdCwgd2UgZmluZCBvdXQgd2hpY2gKKwkgKiB0YXJnZXQgZGlyZWN0b3J5IHJlY2VpdmVkIHRoZSBtb3N0IGZpbGVzIHNvIHdlIGNhbiBkZWNsYXJlIGl0IHRvCisJICogYmUgdGhlICJ3aW5uaW5nIiB0YXJnZXQgbG9jYXRpb24gZm9yIHRoZSBkaXJlY3RvcnkgcmVuYW1lLiAgVGhpcworCSAqIHdpbm5lciBnZXRzIHJlY29yZGVkIGluIG5ld19kaXIuICBJZiB0aGVyZSBpcyBubyB3aW5uZXIKKwkgKiAobXVsdGlwbGUgdGFyZ2V0IGRpcmVjdG9yaWVzIHJlY2VpdmVkIHRoZSBzYW1lIG51bWJlciBvZiBmaWxlcyksCisJICogd2Ugc2V0IG5vbl91bmlxdWVfbmV3X2Rpci4gIE9uY2Ugd2UndmUgZGV0ZXJtaW5lZCB0aGUgd2lubmVyIChvcgorCSAqIHRoYXQgdGhlcmUgaXMgbm8gd2lubmVyKSwgd2Ugbm8gbG9uZ2VyIG5lZWQgcG9zc2libGVfbmV3X2RpcnMuCisJICovCisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeShkaXJfcmVuYW1lcywgJml0ZXIsIGVudHJ5LAorCQkJCWVudCAvKiBtZW1iZXIgbmFtZSAqLykgeworCQlpbnQgbWF4ID0gMDsKKwkJaW50IGJhZF9tYXggPSAwOworCQljaGFyICpiZXN0ID0gTlVMTDsKKworCQlmb3IgKGkgPSAwOyBpIDwgZW50cnktPnBvc3NpYmxlX25ld19kaXJzLm5yOyBpKyspIHsKKwkJCWludCAqY291bnQgPSBlbnRyeS0+cG9zc2libGVfbmV3X2RpcnMuaXRlbXNbaV0udXRpbDsKKworCQkJaWYgKCpjb3VudCA9PSBtYXgpCisJCQkJYmFkX21heCA9IG1heDsKKwkJCWVsc2UgaWYgKCpjb3VudCA+IG1heCkgeworCQkJCW1heCA9ICpjb3VudDsKKwkJCQliZXN0ID0gZW50cnktPnBvc3NpYmxlX25ld19kaXJzLml0ZW1zW2ldLnN0cmluZzsKKwkJCX0KKwkJfQorCQlpZiAoYmFkX21heCA9PSBtYXgpCisJCQllbnRyeS0+bm9uX3VuaXF1ZV9uZXdfZGlyID0gMTsKKwkJZWxzZSB7CisJCQlhc3NlcnQoZW50cnktPm5ld19kaXIubGVuID09IDApOworCQkJc3RyYnVmX2FkZHN0cigmZW50cnktPm5ld19kaXIsIGJlc3QpOworCQl9CisJCS8qCisJCSAqIFRoZSByZWxldmFudCBkaXJlY3Rvcnkgc3ViLXBvcnRpb24gb2YgdGhlIG9yaWdpbmFsIGZ1bGwKKwkJICogZmlsZXBhdGhzIHdlcmUgeHN0cm5kdXAnZWQgYmVmb3JlIGluc2VydGluZyBpbnRvCisJCSAqIHBvc3NpYmxlX25ld19kaXJzLCBhbmQgaW5zdGVhZCBvZiBtYW51YWxseSBpdGVyYXRpbmcgdGhlCisJCSAqIGxpc3QgYW5kIGZyZWUnaW5nIGVhY2gsIGp1c3QgbGllIGFuZCB0ZWxsCisJCSAqIHBvc3NpYmxlX25ld19kaXJzIHRoYXQgaXQgZGlkIHRoZSBzdHJkdXAnaW5nIHNvIHRoYXQgaXQKKwkJICogd2lsbCBmcmVlIHRoZW0gZm9yIHVzLgorCQkgKi8KKwkJZW50cnktPnBvc3NpYmxlX25ld19kaXJzLnN0cmR1cF9zdHJpbmdzID0gMTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmVudHJ5LT5wb3NzaWJsZV9uZXdfZGlycywgMSk7CisJfQorCisJcmV0dXJuIGRpcl9yZW5hbWVzOworfQorCitzdGF0aWMgc3RydWN0IGRpcl9yZW5hbWVfZW50cnkgKmNoZWNrX2Rpcl9yZW5hbWVkKGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCQkgIHN0cnVjdCBoYXNobWFwICpkaXJfcmVuYW1lcykKK3sKKwljaGFyICp0ZW1wID0geHN0cmR1cChwYXRoKTsKKwljaGFyICplbmQ7CisJc3RydWN0IGRpcl9yZW5hbWVfZW50cnkgKmVudHJ5ID0gTlVMTDsKKworCXdoaWxlICgoZW5kID0gc3RycmNocih0ZW1wLCAnLycpKSkgeworCQkqZW5kID0gJ1wwJzsKKwkJZW50cnkgPSBkaXJfcmVuYW1lX2ZpbmRfZW50cnkoZGlyX3JlbmFtZXMsIHRlbXApOworCQlpZiAoZW50cnkpCisJCQlicmVhazsKKwl9CisJZnJlZSh0ZW1wKTsKKwlyZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVfY29sbGlzaW9ucyhzdHJ1Y3QgaGFzaG1hcCAqY29sbGlzaW9ucywKKwkJCSAgICAgICBzdHJ1Y3QgaGFzaG1hcCAqZGlyX3JlbmFtZXMsCisJCQkgICAgICAgc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpwYWlycykKK3sKKwlpbnQgaTsKKworCS8qCisJICogTXVsdGlwbGUgZmlsZXMgY2FuIGJlIG1hcHBlZCB0byB0aGUgc2FtZSBwYXRoIGR1ZSB0byBkaXJlY3RvcnkKKwkgKiByZW5hbWVzIGRvbmUgYnkgdGhlIG90aGVyIHNpZGUgb2YgaGlzdG9yeS4gIFNpbmNlIHRoYXQgb3RoZXIKKwkgKiBzaWRlIG9mIGhpc3RvcnkgY291bGQgaGF2ZSBtZXJnZWQgbXVsdGlwbGUgZGlyZWN0b3JpZXMgaW50byBvbmUsCisJICogaWYgb3VyIHNpZGUgb2YgaGlzdG9yeSBhZGRlZCB0aGUgc2FtZSBmaWxlIGJhc2VuYW1lIHRvIGVhY2ggb2YKKwkgKiB0aG9zZSBkaXJlY3RvcmllcywgdGhlbiBhbGwgTiBvZiB0aGVtIHdvdWxkIGdldCBpbXBsaWNpdGx5CisJICogcmVuYW1lZCBieSB0aGUgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gaW50byB0aGUgc2FtZSBwYXRoLAorCSAqIGFuZCB3ZSdkIGdldCBhbiBhZGQvYWRkLy4uLi9hZGQgY29uZmxpY3QsIGFuZCBhbGwgdGhvc2UgYWRkcworCSAqIGZyb20gKnRoaXMqIHNpZGUgb2YgaGlzdG9yeS4gIFRoaXMgaXMgbm90IHJlcHJlc2VudGFibGUgaW4gdGhlCisJICogaW5kZXgsIGFuZCB1c2VycyBhcmVuJ3QgZ29pbmcgdG8gZWFzaWx5IGJlIGFibGUgdG8gbWFrZSBzZW5zZSBvZgorCSAqIGl0LiAgU28gd2UgbmVlZCB0byBwcm92aWRlIGEgZ29vZCB3YXJuaW5nIGFib3V0IHdoYXQncworCSAqIGhhcHBlbmluZywgYW5kIGZhbGwgYmFjayB0byBuby1kaXJlY3RvcnktcmVuYW1lIGRldGVjdGlvbgorCSAqIGJlaGF2aW9yIGZvciB0aG9zZSBwYXRocy4KKwkgKgorCSAqIFNlZSB0ZXN0Y2FzZXMgOWUgYW5kIGFsbCBvZiBzZWN0aW9uIDUgZnJvbSB0NjA0MyBmb3IgZXhhbXBsZXMuCisJICovCisJY29sbGlzaW9uX2luaXQoY29sbGlzaW9ucyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGFpcnMtPm5yOyArK2kpIHsKKwkJc3RydWN0IGRpcl9yZW5hbWVfZW50cnkgKmRpcl9yZW5hbWVfZW50OworCQlzdHJ1Y3QgY29sbGlzaW9uX2VudHJ5ICpjb2xsaXNpb25fZW50OworCQljaGFyICpuZXdfcGF0aDsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIgPSBwYWlycy0+cXVldWVbaV07CisKKwkJaWYgKHBhaXItPnN0YXR1cyAhPSAnQScgJiYgcGFpci0+c3RhdHVzICE9ICdSJykKKwkJCWNvbnRpbnVlOworCQlkaXJfcmVuYW1lX2VudCA9IGNoZWNrX2Rpcl9yZW5hbWVkKHBhaXItPnR3by0+cGF0aCwKKwkJCQkJCSAgIGRpcl9yZW5hbWVzKTsKKwkJaWYgKCFkaXJfcmVuYW1lX2VudCkKKwkJCWNvbnRpbnVlOworCisJCW5ld19wYXRoID0gYXBwbHlfZGlyX3JlbmFtZShkaXJfcmVuYW1lX2VudCwgcGFpci0+dHdvLT5wYXRoKTsKKwkJaWYgKCFuZXdfcGF0aCkKKwkJCS8qCisJCQkgKiBkaXJfcmVuYW1lX2VudC0+bm9uX3VuaXF1ZV9uZXdfcGF0aCBpcyB0cnVlLCB3aGljaAorCQkJICogbWVhbnMgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IHJlbmFtZSBmb3IgdXMgdG8gdXNlLAorCQkJICogd2hpY2ggbWVhbnMgaXQgd29uJ3QgY2F1c2UgdXMgYW55IGFkZGl0aW9uYWwKKwkJCSAqIGNvbGxpc2lvbnMuCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQljb2xsaXNpb25fZW50ID0gY29sbGlzaW9uX2ZpbmRfZW50cnkoY29sbGlzaW9ucywgbmV3X3BhdGgpOworCQlpZiAoIWNvbGxpc2lvbl9lbnQpIHsKKwkJCWNvbGxpc2lvbl9lbnQgPSB4Y2FsbG9jKDEsCisJCQkJCQlzaXplb2Yoc3RydWN0IGNvbGxpc2lvbl9lbnRyeSkpOworCQkJaGFzaG1hcF9lbnRyeV9pbml0KCZjb2xsaXNpb25fZW50LT5lbnQsCisJCQkJCQlzdHJoYXNoKG5ld19wYXRoKSk7CisJCQloYXNobWFwX3B1dChjb2xsaXNpb25zLCAmY29sbGlzaW9uX2VudC0+ZW50KTsKKwkJCWNvbGxpc2lvbl9lbnQtPnRhcmdldF9maWxlID0gbmV3X3BhdGg7CisJCX0gZWxzZSB7CisJCQlmcmVlKG5ld19wYXRoKTsKKwkJfQorCQlzdHJpbmdfbGlzdF9pbnNlcnQoJmNvbGxpc2lvbl9lbnQtPnNvdXJjZV9maWxlcywKKwkJCQkgICBwYWlyLT50d28tPnBhdGgpOworCX0KK30KKworc3RhdGljIGNoYXIgKmNoZWNrX2Zvcl9kaXJlY3RvcnlfcmVuYW1lKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJCWNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCXN0cnVjdCB0cmVlICp0cmVlLAorCQkJCQlzdHJ1Y3QgaGFzaG1hcCAqZGlyX3JlbmFtZXMsCisJCQkJCXN0cnVjdCBoYXNobWFwICpkaXJfcmVuYW1lX2V4Y2x1c2lvbnMsCisJCQkJCXN0cnVjdCBoYXNobWFwICpjb2xsaXNpb25zLAorCQkJCQlpbnQgKmNsZWFuX21lcmdlKQoreworCWNoYXIgKm5ld19wYXRoID0gTlVMTDsKKwlzdHJ1Y3QgZGlyX3JlbmFtZV9lbnRyeSAqZW50cnkgPSBjaGVja19kaXJfcmVuYW1lZChwYXRoLCBkaXJfcmVuYW1lcyk7CisJc3RydWN0IGRpcl9yZW5hbWVfZW50cnkgKm9lbnRyeSA9IE5VTEw7CisKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm4gbmV3X3BhdGg7CisKKwkvKgorCSAqIFRoaXMgbmV4dCBwYXJ0IGlzIGEgbGl0dGxlIHdlaXJkLiAgV2UgZG8gbm90IHdhbnQgdG8gZG8gYW4KKwkgKiBpbXBsaWNpdCByZW5hbWUgaW50byBhIGRpcmVjdG9yeSB3ZSByZW5hbWVkIG9uIG91ciBzaWRlLCBiZWNhdXNlCisJICogdGhhdCB3aWxsIHJlc3VsdCBpbiBhIHNwdXJpb3VzIHJlbmFtZS9yZW5hbWUoMXRvMikgY29uZmxpY3QuICBBbgorCSAqIGV4YW1wbGU6CisJICogICBCYXNlIGNvbW1pdDogZHVtYmRpci9hZmlsZSwgb3RoZXJkaXIvYmZpbGUKKwkgKiAgIFNpZGUgMTogICAgICBzbXJ0ZGlyL2FmaWxlLCBvdGhlcmRpci9iZmlsZQorCSAqICAgU2lkZSAyOiAgICAgIGR1bWJkaXIvYWZpbGUsIGR1bWJkaXIvYmZpbGUKKwkgKiBIZXJlLCB3aGlsZSB3b3JraW5nIG9uIFNpZGUgMSwgd2UgY291bGQgbm90aWNlIHRoYXQgb3RoZXJkaXIgd2FzCisJICogcmVuYW1lZC9tZXJnZWQgdG8gZHVtYmRpciwgYW5kIGNoYW5nZSB0aGUgZGlmZl9maWxlcGFpciBmb3IKKwkgKiBvdGhlcmRpci9iZmlsZSBpbnRvIGEgcmVuYW1lIGludG8gZHVtYmRpci9iZmlsZS4gIEhvd2V2ZXIsIFNpZGUKKwkgKiAyIHdpbGwgbm90aWNlIHRoZSByZW5hbWUgZnJvbSBkdW1iZGlyIHRvIHNtcnRkaXIsIGFuZCBkbyB0aGUKKwkgKiB0cmFuc2l0aXZlIHJlbmFtZSB0byBtb3ZlIGl0IGZyb20gZHVtYmRpci9iZmlsZSB0bworCSAqIHNtcnRkaXIvYmZpbGUuICBUaGF0IGdpdmVzIHVzIGJmaWxlIGluIGR1bWJkaXIgdnMgYmVpbmcgaW4KKwkgKiBzbXJ0ZGlyLCBhIHJlbmFtZS9yZW5hbWUoMXRvMikgY29uZmxpY3QuICBXZSByZWFsbHkganVzdCB3YW50CisJICogdGhlIGZpbGUgdG8gZW5kIHVwIGluIHNtcnRkaXIuICBBbmQgdGhlIHdheSB0byBhY2hpZXZlIHRoYXQgaXMKKwkgKiB0byBub3QgbGV0IFNpZGUxIGRvIHRoZSByZW5hbWUgdG8gZHVtYmRpciwgc2luY2Ugd2Uga25vdyB0aGF0IGlzCisJICogdGhlIHNvdXJjZSBvZiBvbmUgb2Ygb3VyIGRpcmVjdG9yeSByZW5hbWVzLgorCSAqCisJICogVGhhdCdzIHdoeSBvZW50cnkgYW5kIGRpcl9yZW5hbWVfZXhjbHVzaW9ucyBpcyBoZXJlLgorCSAqCisJICogQXMgaXQgdHVybnMgb3V0LCB0aGlzIGFsc28gcHJldmVudHMgTi13YXkgdHJhbnNpZW50IHJlbmFtZQorCSAqIGNvbmZ1c2lvbjsgU2VlIHRlc3RjYXNlcyA5YyBhbmQgOWQgb2YgdDYwNDMuCisJICovCisJb2VudHJ5ID0gZGlyX3JlbmFtZV9maW5kX2VudHJ5KGRpcl9yZW5hbWVfZXhjbHVzaW9ucywgZW50cnktPm5ld19kaXIuYnVmKTsKKwlpZiAob2VudHJ5KSB7CisJCW91dHB1dChvcHQsIDEsIF8oIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nICVzIC0+ICVzIHJlbmFtZSAiCisJCQkgICAgICAgInRvICVzLCBiZWNhdXNlICVzIGl0c2VsZiB3YXMgcmVuYW1lZC4iKSwKKwkJICAgICAgIGVudHJ5LT5kaXIsIGVudHJ5LT5uZXdfZGlyLmJ1ZiwgcGF0aCwgZW50cnktPm5ld19kaXIuYnVmKTsKKwl9IGVsc2UgeworCQluZXdfcGF0aCA9IGhhbmRsZV9wYXRoX2xldmVsX2NvbmZsaWN0cyhvcHQsIHBhdGgsIGVudHJ5LAorCQkJCQkJICAgICAgIGNvbGxpc2lvbnMsIHRyZWUpOworCQkqY2xlYW5fbWVyZ2UgJj0gKG5ld19wYXRoICE9IE5VTEwpOworCX0KKworCXJldHVybiBuZXdfcGF0aDsKK30KKworc3RhdGljIHZvaWQgYXBwbHlfZGlyZWN0b3J5X3JlbmFtZV9tb2RpZmljYXRpb25zKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJCQkgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIsCisJCQkJCQkgY2hhciAqbmV3X3BhdGgsCisJCQkJCQkgc3RydWN0IHJlbmFtZSAqcmUsCisJCQkJCQkgc3RydWN0IHRyZWUgKnRyZWUsCisJCQkJCQkgc3RydWN0IHRyZWUgKm9fdHJlZSwKKwkJCQkJCSBzdHJ1Y3QgdHJlZSAqYV90cmVlLAorCQkJCQkJIHN0cnVjdCB0cmVlICpiX3RyZWUsCisJCQkJCQkgc3RydWN0IHN0cmluZ19saXN0ICplbnRyaWVzKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWludCBzdGFnZSA9ICh0cmVlID09IGFfdHJlZSA/IDIgOiAzKTsKKwlpbnQgdXBkYXRlX3dkOworCisJLyoKKwkgKiBJbiBhbGwgY2FzZXMgd2hlcmUgd2UgY2FuIGRvIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uLAorCSAqIHVucGFja190cmVlcygpIHdpbGwgaGF2ZSByZWFkIHBhaXItPnR3by0+cGF0aCBpbnRvIHRoZQorCSAqIGluZGV4IGFuZCB0aGUgd29ya2luZyBjb3B5LiAgV2UgbmVlZCB0byByZW1vdmUgaXQgc28gdGhhdAorCSAqIHdlIGNhbiBpbnN0ZWFkIHBsYWNlIGl0IGF0IG5ld19wYXRoLiAgSXQgaXMgZ3VhcmFudGVlZCB0bworCSAqIG5vdCBiZSB1bnRyYWNrZWQgKHVucGFja190cmVlcygpIHdvdWxkIGhhdmUgZXJyb3JlZCBvdXQKKwkgKiBzYXlpbmcgdGhlIGZpbGUgd291bGQgaGF2ZSBiZWVuIG92ZXJ3cml0dGVuKSwgYnV0IGl0IG1pZ2h0CisJICogYmUgZGlydHksIHRob3VnaC4KKwkgKi8KKwl1cGRhdGVfd2QgPSAhd2FzX2RpcnR5KG9wdCwgcGFpci0+dHdvLT5wYXRoKTsKKwlpZiAoIXVwZGF0ZV93ZCkKKwkJb3V0cHV0KG9wdCwgMSwgXygiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0ICVzIiksCisJCSAgICAgICBwYWlyLT50d28tPnBhdGgpOworCXJlbW92ZV9maWxlKG9wdCwgMSwgcGFpci0+dHdvLT5wYXRoLCAhdXBkYXRlX3dkKTsKKworCS8qIEZpbmQgb3IgY3JlYXRlIGEgbmV3IHJlLT5kc3RfZW50cnkgKi8KKwlpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKGVudHJpZXMsIG5ld19wYXRoKTsKKwlpZiAoaXRlbSkgeworCQkvKgorCQkgKiBTaW5jZSB3ZSdyZSByZW5hbWluZyBvbiB0aGlzIHNpZGUgb2YgaGlzdG9yeSwgYW5kIGl0J3MKKwkJICogZHVlIHRvIGEgZGlyZWN0b3J5IHJlbmFtZSBvbiB0aGUgb3RoZXIgc2lkZSBvZiBoaXN0b3J5CisJCSAqICh3aGljaCB3ZSBvbmx5IGFsbG93IHdoZW4gdGhlIGRpcmVjdG9yeSBpbiBxdWVzdGlvbiBubworCQkgKiBsb25nZXIgZXhpc3RzIG9uIHRoZSBvdGhlciBzaWRlIG9mIGhpc3RvcnkpLCB0aGUKKwkJICogb3JpZ2luYWwgZW50cnkgZm9yIHJlLT5kc3RfZW50cnkgaXMgbm8gbG9uZ2VyCisJCSAqIG5lY2Vzc2FyeS4uLgorCQkgKi8KKwkJcmUtPmRzdF9lbnRyeS0+cHJvY2Vzc2VkID0gMTsKKworCQkvKgorCQkgKiAuLi5iZWNhdXNlIHdlJ2xsIGJlIHVzaW5nIHRoaXMgbmV3IG9uZS4KKwkJICovCisJCXJlLT5kc3RfZW50cnkgPSBpdGVtLT51dGlsOworCX0gZWxzZSB7CisJCS8qCisJCSAqIHJlLT5kc3RfZW50cnkgaXMgZm9yIHRoZSBiZWZvcmUtZGlyLXJlbmFtZSBwYXRoLCBhbmQgd2UKKwkJICogbmVlZCBpdCB0byBob2xkIGluZm9ybWF0aW9uIGZvciB0aGUgYWZ0ZXItZGlyLXJlbmFtZQorCQkgKiBwYXRoLiAgQmVmb3JlIGNyZWF0aW5nIGEgbmV3IGVudHJ5LCB3ZSBuZWVkIHRvIG1hcmsgdGhlCisJCSAqIG9sZCBvbmUgYXMgdW5uZWNlc3NhcnkgKC4uLnVubGVzcyBpdCBpcyBzaGFyZWQgYnkKKwkJICogc3JjX2VudHJ5LCBpLmUuIHRoaXMgZGlkbid0IHVzZSB0byBiZSBhIHJlbmFtZSwgaW4gd2hpY2gKKwkJICogY2FzZSB3ZSBjYW4ganVzdCBhbGxvdyB0aGUgbm9ybWFsIHByb2Nlc3NpbmcgdG8gaGFwcGVuCisJCSAqIGZvciBpdCkuCisJCSAqLworCQlpZiAocGFpci0+c3RhdHVzID09ICdSJykKKwkJCXJlLT5kc3RfZW50cnktPnByb2Nlc3NlZCA9IDE7CisKKwkJcmUtPmRzdF9lbnRyeSA9IGluc2VydF9zdGFnZV9kYXRhKG9wdC0+cmVwbywgbmV3X3BhdGgsCisJCQkJCQkgIG9fdHJlZSwgYV90cmVlLCBiX3RyZWUsCisJCQkJCQkgIGVudHJpZXMpOworCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KGVudHJpZXMsIG5ld19wYXRoKTsKKwkJaXRlbS0+dXRpbCA9IHJlLT5kc3RfZW50cnk7CisJfQorCisJLyoKKwkgKiBVcGRhdGUgdGhlIHN0YWdlX2RhdGEgd2l0aCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhdGggd2UgYXJlCisJICogbW92aW5nIGludG8gcGxhY2UuICBUaGF0IHNsb3Qgd2lsbCBiZSBlbXB0eSBhbmQgYXZhaWxhYmxlIGZvciB1cworCSAqIHRvIHdyaXRlIHRvIGJlY2F1c2Ugb2YgdGhlIGNvbGxpc2lvbiBjaGVja3MgaW4KKwkgKiBoYW5kbGVfcGF0aF9sZXZlbF9jb25mbGljdHMoKS4gIEluIG90aGVyIHdvcmRzLAorCSAqIHJlLT5kc3RfZW50cnktPnN0YWdlc1tzdGFnZV0ub2lkIHdpbGwgYmUgdGhlIG51bGxfb2lkLCBzbyBpdCdzCisJICogb3BlbiBmb3IgdXMgdG8gd3JpdGUgdG8uCisJICoKKwkgKiBJdCBtYXkgYmUgdGVtcHRpbmcgdG8gYWN0dWFsbHkgdXBkYXRlIHRoZSBpbmRleCBhdCB0aGlzIHBvaW50IGFzCisJICogd2VsbCwgdXNpbmcgdXBkYXRlX3N0YWdlc19mb3Jfc3RhZ2VfZGF0YSgpLCBidXQgYXMgcGVyIHRoZSBiaWcKKwkgKiAiTk9URSIgaW4gdXBkYXRlX3N0YWdlcygpLCBkb2luZyBzbyB3aWxsIG1vZGlmeSB0aGUgY3VycmVudAorCSAqIGluLW1lbW9yeSBpbmRleCB3aGljaCB3aWxsIGJyZWFrIGNhbGxzIHRvIHdvdWxkX2xvc2VfdW50cmFja2VkKCkKKwkgKiB0aGF0IHdlIG5lZWQgdG8gbWFrZS4gIEluc3RlYWQsIHdlIG5lZWQgdG8ganVzdCBtYWtlIHN1cmUgdGhhdAorCSAqIHRoZSB2YXJpb3VzIGhhbmRsZV9yZW5hbWVfKigpIGZ1bmN0aW9ucyB1cGRhdGUgdGhlIGluZGV4CisJICogZXhwbGljaXRseSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHVucGFja190cmVlcygpIHRvIGhhdmUgZG9uZSBpdC4KKwkgKi8KKwlnZXRfdHJlZV9lbnRyeShvcHQtPnJlcG8sCisJCSAgICAgICAmdHJlZS0+b2JqZWN0Lm9pZCwKKwkJICAgICAgIHBhaXItPnR3by0+cGF0aCwKKwkJICAgICAgICZyZS0+ZHN0X2VudHJ5LT5zdGFnZXNbc3RhZ2VdLm9pZCwKKwkJICAgICAgICZyZS0+ZHN0X2VudHJ5LT5zdGFnZXNbc3RhZ2VdLm1vZGUpOworCisJLyoKKwkgKiBSZWNvcmQgdGhlIG9yaWdpbmFsIGNoYW5nZSBzdGF0dXMgKG9yICd0eXBlJyBvZiBjaGFuZ2UpLiAgSWYgaXQKKwkgKiB3YXMgb3JpZ2luYWxseSBhbiBhZGQgKCdBJyksIHRoaXMgbGV0cyB1cyBkaWZmZXJlbnRpYXRlIGxhdGVyCisJICogYmV0d2VlbiBhIFJFTkFNRV9ERUxFVEUgY29uZmxpY3QgYW5kIFJFTkFNRV9WSUFfRElSICh0aGV5CisJICogb3RoZXJ3aXNlIGxvb2sgdGhlIHNhbWUpLiAgSWYgaXQgd2FzIG9yaWdpbmFsbHkgYSByZW5hbWUgKCdSJyksCisJICogdGhpcyBsZXRzIHVzIHJlbWVtYmVyIGFuZCByZXBvcnQgYWNjdXJhdGVseSBhYm91dCB0aGUgdHJhbnNpdGl2ZQorCSAqIHJlbmFtaW5nIHRoYXQgb2NjdXJyZWQgdmlhIHRoZSBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbi4gIEFsc28sCisJICogcmVjb3JkIHRoZSBvcmlnaW5hbCBkZXN0aW5hdGlvbiBuYW1lLgorCSAqLworCXJlLT5kaXJfcmVuYW1lX29yaWdpbmFsX3R5cGUgPSBwYWlyLT5zdGF0dXM7CisJcmUtPmRpcl9yZW5hbWVfb3JpZ2luYWxfZGVzdCA9IHBhaXItPnR3by0+cGF0aDsKKworCS8qCisJICogV2UgZG9uJ3QgYWN0dWFsbHkgbG9vayBhdCBwYWlyLT5zdGF0dXMgYWdhaW4sIGJ1dCBpdCBzZWVtcworCSAqIHBlZGFnb2dpY2FsbHkgY29ycmVjdCB0byBhZGp1c3QgaXQuCisJICovCisJcGFpci0+c3RhdHVzID0gJ1InOworCisJLyoKKwkgKiBGaW5hbGx5LCByZWNvcmQgdGhlIG5ldyBsb2NhdGlvbi4KKwkgKi8KKwlwYWlyLT50d28tPnBhdGggPSBuZXdfcGF0aDsKK30KKworLyoKKyAqIEdldCBpbmZvcm1hdGlvbiBvZiBhbGwgcmVuYW1lcyB3aGljaCBvY2N1cnJlZCBpbiAncGFpcnMnLCBtYWtpbmcgdXNlIG9mCisgKiBhbnkgaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZXMgaW5mZXJyZWQgZnJvbSB0aGUgb3RoZXIgc2lkZSBvZiBoaXN0b3J5LgorICogV2UgbmVlZCB0aGUgdGhyZWUgdHJlZXMgaW4gdGhlIG1lcmdlICgnb190cmVlJywgJ2FfdHJlZScgYW5kICdiX3RyZWUnKQorICogdG8gYmUgYWJsZSB0byBhc3NvY2lhdGUgdGhlIGNvcnJlY3QgY2FjaGUgZW50cmllcyB3aXRoIHRoZSByZW5hbWUKKyAqIGluZm9ybWF0aW9uOyB0cmVlIGlzIGFsd2F5cyBlcXVhbCB0byBlaXRoZXIgYV90cmVlIG9yIGJfdHJlZS4KKyAqLworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2V0X3JlbmFtZXMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYnJhbmNoLAorCQkJCSAgICAgICBzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnBhaXJzLAorCQkJCSAgICAgICBzdHJ1Y3QgaGFzaG1hcCAqZGlyX3JlbmFtZXMsCisJCQkJICAgICAgIHN0cnVjdCBoYXNobWFwICpkaXJfcmVuYW1lX2V4Y2x1c2lvbnMsCisJCQkJICAgICAgIHN0cnVjdCB0cmVlICp0cmVlLAorCQkJCSAgICAgICBzdHJ1Y3QgdHJlZSAqb190cmVlLAorCQkJCSAgICAgICBzdHJ1Y3QgdHJlZSAqYV90cmVlLAorCQkJCSAgICAgICBzdHJ1Y3QgdHJlZSAqYl90cmVlLAorCQkJCSAgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmVudHJpZXMsCisJCQkJICAgICAgIGludCAqY2xlYW5fbWVyZ2UpCit7CisJaW50IGk7CisJc3RydWN0IGhhc2htYXAgY29sbGlzaW9uczsKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisJc3RydWN0IGNvbGxpc2lvbl9lbnRyeSAqZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlbmFtZXM7CisKKwljb21wdXRlX2NvbGxpc2lvbnMoJmNvbGxpc2lvbnMsIGRpcl9yZW5hbWVzLCBwYWlycyk7CisJcmVuYW1lcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdCkpOworCisJZm9yIChpID0gMDsgaSA8IHBhaXJzLT5ucjsgKytpKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlzdHJ1Y3QgcmVuYW1lICpyZTsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIgPSBwYWlycy0+cXVldWVbaV07CisJCWNoYXIgKm5ld19wYXRoOyAvKiBub24tTlVMTCBvbmx5IHdpdGggZGlyZWN0b3J5IHJlbmFtZXMgKi8KKworCQlpZiAocGFpci0+c3RhdHVzICE9ICdBJyAmJiBwYWlyLT5zdGF0dXMgIT0gJ1InKSB7CisJCQlkaWZmX2ZyZWVfZmlsZXBhaXIocGFpcik7CisJCQljb250aW51ZTsKKwkJfQorCQluZXdfcGF0aCA9IGNoZWNrX2Zvcl9kaXJlY3RvcnlfcmVuYW1lKG9wdCwgcGFpci0+dHdvLT5wYXRoLCB0cmVlLAorCQkJCQkJICAgICAgZGlyX3JlbmFtZXMsCisJCQkJCQkgICAgICBkaXJfcmVuYW1lX2V4Y2x1c2lvbnMsCisJCQkJCQkgICAgICAmY29sbGlzaW9ucywKKwkJCQkJCSAgICAgIGNsZWFuX21lcmdlKTsKKwkJaWYgKHBhaXItPnN0YXR1cyAhPSAnUicgJiYgIW5ld19wYXRoKSB7CisJCQlkaWZmX2ZyZWVfZmlsZXBhaXIocGFpcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJlID0geG1hbGxvYyhzaXplb2YoKnJlKSk7CisJCXJlLT5wcm9jZXNzZWQgPSAwOworCQlyZS0+cGFpciA9IHBhaXI7CisJCXJlLT5icmFuY2ggPSBicmFuY2g7CisJCXJlLT5kaXJfcmVuYW1lX29yaWdpbmFsX3R5cGUgPSAnXDAnOworCQlyZS0+ZGlyX3JlbmFtZV9vcmlnaW5hbF9kZXN0ID0gTlVMTDsKKwkJaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cChlbnRyaWVzLCByZS0+cGFpci0+b25lLT5wYXRoKTsKKwkJaWYgKCFpdGVtKQorCQkJcmUtPnNyY19lbnRyeSA9IGluc2VydF9zdGFnZV9kYXRhKG9wdC0+cmVwbywKKwkJCQkJcmUtPnBhaXItPm9uZS0+cGF0aCwKKwkJCQkJb190cmVlLCBhX3RyZWUsIGJfdHJlZSwgZW50cmllcyk7CisJCWVsc2UKKwkJCXJlLT5zcmNfZW50cnkgPSBpdGVtLT51dGlsOworCisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoZW50cmllcywgcmUtPnBhaXItPnR3by0+cGF0aCk7CisJCWlmICghaXRlbSkKKwkJCXJlLT5kc3RfZW50cnkgPSBpbnNlcnRfc3RhZ2VfZGF0YShvcHQtPnJlcG8sCisJCQkJCXJlLT5wYWlyLT50d28tPnBhdGgsCisJCQkJCW9fdHJlZSwgYV90cmVlLCBiX3RyZWUsIGVudHJpZXMpOworCQllbHNlCisJCQlyZS0+ZHN0X2VudHJ5ID0gaXRlbS0+dXRpbDsKKwkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChyZW5hbWVzLCBwYWlyLT5vbmUtPnBhdGgpOworCQlpdGVtLT51dGlsID0gcmU7CisJCWlmIChuZXdfcGF0aCkKKwkJCWFwcGx5X2RpcmVjdG9yeV9yZW5hbWVfbW9kaWZpY2F0aW9ucyhvcHQsIHBhaXIsIG5ld19wYXRoLAorCQkJCQkJCSAgICAgcmUsIHRyZWUsIG9fdHJlZSwKKwkJCQkJCQkgICAgIGFfdHJlZSwgYl90cmVlLAorCQkJCQkJCSAgICAgZW50cmllcyk7CisJfQorCisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeSgmY29sbGlzaW9ucywgJml0ZXIsIGUsCisJCQkJZW50IC8qIG1lbWJlciBuYW1lICovKSB7CisJCWZyZWUoZS0+dGFyZ2V0X2ZpbGUpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmZS0+c291cmNlX2ZpbGVzLCAwKTsKKwl9CisJaGFzaG1hcF9mcmVlX2VudHJpZXMoJmNvbGxpc2lvbnMsIHN0cnVjdCBjb2xsaXNpb25fZW50cnksIGVudCk7CisJcmV0dXJuIHJlbmFtZXM7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19yZW5hbWVzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmFfcmVuYW1lcywKKwkJCSAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqYl9yZW5hbWVzKQoreworCWludCBjbGVhbl9tZXJnZSA9IDEsIGksIGo7CisJc3RydWN0IHN0cmluZ19saXN0IGFfYnlfZHN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYl9ieV9kc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWNvbnN0IHN0cnVjdCByZW5hbWUgKnNyZTsKKworCWZvciAoaSA9IDA7IGkgPCBhX3JlbmFtZXMtPm5yOyBpKyspIHsKKwkJc3JlID0gYV9yZW5hbWVzLT5pdGVtc1tpXS51dGlsOworCQlzdHJpbmdfbGlzdF9pbnNlcnQoJmFfYnlfZHN0LCBzcmUtPnBhaXItPnR3by0+cGF0aCktPnV0aWwKKwkJCT0gKHZvaWQgKilzcmU7CisJfQorCWZvciAoaSA9IDA7IGkgPCBiX3JlbmFtZXMtPm5yOyBpKyspIHsKKwkJc3JlID0gYl9yZW5hbWVzLT5pdGVtc1tpXS51dGlsOworCQlzdHJpbmdfbGlzdF9pbnNlcnQoJmJfYnlfZHN0LCBzcmUtPnBhaXItPnR3by0+cGF0aCktPnV0aWwKKwkJCT0gKHZvaWQgKilzcmU7CisJfQorCisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBhX3JlbmFtZXMtPm5yIHx8IGogPCBiX3JlbmFtZXMtPm5yOykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlbmFtZXMxLCAqcmVuYW1lczJEc3Q7CisJCXN0cnVjdCByZW5hbWUgKnJlbjEgPSBOVUxMLCAqcmVuMiA9IE5VTEw7CisJCWNvbnN0IGNoYXIgKnJlbjFfc3JjLCAqcmVuMV9kc3Q7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpsb29rdXA7CisKKwkJaWYgKGkgPj0gYV9yZW5hbWVzLT5ucikgeworCQkJcmVuMiA9IGJfcmVuYW1lcy0+aXRlbXNbaisrXS51dGlsOworCQl9IGVsc2UgaWYgKGogPj0gYl9yZW5hbWVzLT5ucikgeworCQkJcmVuMSA9IGFfcmVuYW1lcy0+aXRlbXNbaSsrXS51dGlsOworCQl9IGVsc2UgeworCQkJaW50IGNvbXBhcmUgPSBzdHJjbXAoYV9yZW5hbWVzLT5pdGVtc1tpXS5zdHJpbmcsCisJCQkJCSAgICAgYl9yZW5hbWVzLT5pdGVtc1tqXS5zdHJpbmcpOworCQkJaWYgKGNvbXBhcmUgPD0gMCkKKwkJCQlyZW4xID0gYV9yZW5hbWVzLT5pdGVtc1tpKytdLnV0aWw7CisJCQlpZiAoY29tcGFyZSA+PSAwKQorCQkJCXJlbjIgPSBiX3JlbmFtZXMtPml0ZW1zW2orK10udXRpbDsKKwkJfQorCisJCS8qIFRPRE86IHJlZmFjdG9yLCBzbyB0aGF0IDEvMiBhcmUgbm90IG5lZWRlZCAqLworCQlpZiAocmVuMSkgeworCQkJcmVuYW1lczEgPSBhX3JlbmFtZXM7CisJCQlyZW5hbWVzMkRzdCA9ICZiX2J5X2RzdDsKKwkJfSBlbHNlIHsKKwkJCXJlbmFtZXMxID0gYl9yZW5hbWVzOworCQkJcmVuYW1lczJEc3QgPSAmYV9ieV9kc3Q7CisJCQlTV0FQKHJlbjIsIHJlbjEpOworCQl9CisKKwkJaWYgKHJlbjEtPnByb2Nlc3NlZCkKKwkJCWNvbnRpbnVlOworCQlyZW4xLT5wcm9jZXNzZWQgPSAxOworCQlyZW4xLT5kc3RfZW50cnktPnByb2Nlc3NlZCA9IDE7CisJCS8qIEJVRzogV2Ugc2hvdWxkIG9ubHkgbWFyayBzcmNfZW50cnkgYXMgcHJvY2Vzc2VkIGlmIHdlCisJCSAqIGFyZSBub3QgZGVhbGluZyB3aXRoIGEgcmVuYW1lICsgYWRkLXNvdXJjZSBjYXNlLgorCQkgKi8KKwkJcmVuMS0+c3JjX2VudHJ5LT5wcm9jZXNzZWQgPSAxOworCisJCXJlbjFfc3JjID0gcmVuMS0+cGFpci0+b25lLT5wYXRoOworCQlyZW4xX2RzdCA9IHJlbjEtPnBhaXItPnR3by0+cGF0aDsKKworCQlpZiAocmVuMikgeworCQkJLyogT25lIGZpbGUgcmVuYW1lZCBvbiBib3RoIHNpZGVzICovCisJCQljb25zdCBjaGFyICpyZW4yX3NyYyA9IHJlbjItPnBhaXItPm9uZS0+cGF0aDsKKwkJCWNvbnN0IGNoYXIgKnJlbjJfZHN0ID0gcmVuMi0+cGFpci0+dHdvLT5wYXRoOworCQkJZW51bSByZW5hbWVfdHlwZSByZW5hbWVfdHlwZTsKKwkJCWlmIChzdHJjbXAocmVuMV9zcmMsIHJlbjJfc3JjKSAhPSAwKQorCQkJCUJVRygicmVuMV9zcmMgIT0gcmVuMl9zcmMiKTsKKwkJCXJlbjItPmRzdF9lbnRyeS0+cHJvY2Vzc2VkID0gMTsKKwkJCXJlbjItPnByb2Nlc3NlZCA9IDE7CisJCQlpZiAoc3RyY21wKHJlbjFfZHN0LCByZW4yX2RzdCkgIT0gMCkgeworCQkJCXJlbmFtZV90eXBlID0gUkVOQU1FX09ORV9GSUxFX1RPX1RXTzsKKwkJCQljbGVhbl9tZXJnZSA9IDA7CisJCQl9IGVsc2UgeworCQkJCXJlbmFtZV90eXBlID0gUkVOQU1FX09ORV9GSUxFX1RPX09ORTsKKwkJCQkvKiBCVUc6IFdlIHNob3VsZCBvbmx5IHJlbW92ZSByZW4xX3NyYyBpbgorCQkJCSAqIHRoZSBiYXNlIHN0YWdlICh0aGluayBvZiByZW5hbWUgKworCQkJCSAqIGFkZC1zb3VyY2UgY2FzZXMpLgorCQkJCSAqLworCQkJCXJlbW92ZV9maWxlKG9wdCwgMSwgcmVuMV9zcmMsIDEpOworCQkJCXVwZGF0ZV9lbnRyeShyZW4xLT5kc3RfZW50cnksCisJCQkJCSAgICAgcmVuMS0+cGFpci0+b25lLAorCQkJCQkgICAgIHJlbjEtPnBhaXItPnR3bywKKwkJCQkJICAgICByZW4yLT5wYWlyLT50d28pOworCQkJfQorCQkJc2V0dXBfcmVuYW1lX2NvbmZsaWN0X2luZm8ocmVuYW1lX3R5cGUsIG9wdCwgcmVuMSwgcmVuMik7CisJCX0gZWxzZSBpZiAoKGxvb2t1cCA9IHN0cmluZ19saXN0X2xvb2t1cChyZW5hbWVzMkRzdCwgcmVuMV9kc3QpKSkgeworCQkJLyogVHdvIGRpZmZlcmVudCBmaWxlcyByZW5hbWVkIHRvIHRoZSBzYW1lIHRoaW5nICovCisJCQljaGFyICpyZW4yX2RzdDsKKwkJCXJlbjIgPSBsb29rdXAtPnV0aWw7CisJCQlyZW4yX2RzdCA9IHJlbjItPnBhaXItPnR3by0+cGF0aDsKKwkJCWlmIChzdHJjbXAocmVuMV9kc3QsIHJlbjJfZHN0KSAhPSAwKQorCQkJCUJVRygicmVuMV9kc3QgIT0gcmVuMl9kc3QiKTsKKworCQkJY2xlYW5fbWVyZ2UgPSAwOworCQkJcmVuMi0+cHJvY2Vzc2VkID0gMTsKKwkJCS8qCisJCQkgKiBCVUc6IFdlIHNob3VsZCBvbmx5IG1hcmsgc3JjX2VudHJ5IGFzIHByb2Nlc3NlZAorCQkJICogaWYgd2UgYXJlIG5vdCBkZWFsaW5nIHdpdGggYSByZW5hbWUgKyBhZGQtc291cmNlCisJCQkgKiBjYXNlLgorCQkJICovCisJCQlyZW4yLT5zcmNfZW50cnktPnByb2Nlc3NlZCA9IDE7CisKKwkJCXNldHVwX3JlbmFtZV9jb25mbGljdF9pbmZvKFJFTkFNRV9UV09fRklMRVNfVE9fT05FLAorCQkJCQkJICAgb3B0LCByZW4xLCByZW4yKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFJlbmFtZWQgaW4gMSwgbWF5YmUgY2hhbmdlZCBpbiAyICovCisJCQkvKiB3ZSBvbmx5IHVzZSBzaGExIGFuZCBtb2RlIG9mIHRoZXNlICovCisJCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyBzcmNfb3RoZXIsIGRzdF9vdGhlcjsKKwkJCWludCB0cnlfbWVyZ2U7CisKKwkJCS8qCisJCQkgKiB1bnBhY2tfdHJlZXMgbG9hZHMgZW50cmllcyBmcm9tIGNvbW1vbi1jb21taXQKKwkJCSAqIGludG8gc3RhZ2UgMSwgZnJvbSBoZWFkLWNvbW1pdCBpbnRvIHN0YWdlIDIsIGFuZAorCQkJICogZnJvbSBtZXJnZS1jb21taXQgaW50byBzdGFnZSAzLiAgV2Uga2VlcCB0cmFjaworCQkJICogb2Ygd2hpY2ggc2lkZSBjb3JyZXNwb25kcyB0byB0aGUgcmVuYW1lLgorCQkJICovCisJCQlpbnQgcmVuYW1lZF9zdGFnZSA9IGFfcmVuYW1lcyA9PSByZW5hbWVzMSA/IDIgOiAzOworCQkJaW50IG90aGVyX3N0YWdlID0gICBhX3JlbmFtZXMgPT0gcmVuYW1lczEgPyAzIDogMjsKKworCQkJLyogQlVHOiBXZSBzaG91bGQgb25seSByZW1vdmUgcmVuMV9zcmMgaW4gdGhlIGJhc2UKKwkJCSAqIHN0YWdlIGFuZCBpbiBvdGhlcl9zdGFnZSAodGhpbmsgb2YgcmVuYW1lICsKKwkJCSAqIGFkZC1zb3VyY2UgY2FzZSkuCisJCQkgKi8KKwkJCXJlbW92ZV9maWxlKG9wdCwgMSwgcmVuMV9zcmMsCisJCQkJICAgIHJlbmFtZWRfc3RhZ2UgPT0gMiB8fCAhd2FzX3RyYWNrZWQob3B0LCByZW4xX3NyYykpOworCisJCQlvaWRjcHkoJnNyY19vdGhlci5vaWQsCisJCQkgICAgICAgJnJlbjEtPnNyY19lbnRyeS0+c3RhZ2VzW290aGVyX3N0YWdlXS5vaWQpOworCQkJc3JjX290aGVyLm1vZGUgPSByZW4xLT5zcmNfZW50cnktPnN0YWdlc1tvdGhlcl9zdGFnZV0ubW9kZTsKKwkJCW9pZGNweSgmZHN0X290aGVyLm9pZCwKKwkJCSAgICAgICAmcmVuMS0+ZHN0X2VudHJ5LT5zdGFnZXNbb3RoZXJfc3RhZ2VdLm9pZCk7CisJCQlkc3Rfb3RoZXIubW9kZSA9IHJlbjEtPmRzdF9lbnRyeS0+c3RhZ2VzW290aGVyX3N0YWdlXS5tb2RlOworCQkJdHJ5X21lcmdlID0gMDsKKworCQkJaWYgKG9pZGVxKCZzcmNfb3RoZXIub2lkLCAmbnVsbF9vaWQpICYmCisJCQkgICAgcmVuMS0+ZGlyX3JlbmFtZV9vcmlnaW5hbF90eXBlID09ICdBJykgeworCQkJCXNldHVwX3JlbmFtZV9jb25mbGljdF9pbmZvKFJFTkFNRV9WSUFfRElSLAorCQkJCQkJCSAgIG9wdCwgcmVuMSwgTlVMTCk7CisJCQl9IGVsc2UgaWYgKG9pZGVxKCZzcmNfb3RoZXIub2lkLCAmbnVsbF9vaWQpKSB7CisJCQkJc2V0dXBfcmVuYW1lX2NvbmZsaWN0X2luZm8oUkVOQU1FX0RFTEVURSwKKwkJCQkJCQkgICBvcHQsIHJlbjEsIE5VTEwpOworCQkJfSBlbHNlIGlmICgoZHN0X290aGVyLm1vZGUgPT0gcmVuMS0+cGFpci0+dHdvLT5tb2RlKSAmJgorCQkJCSAgIG9pZGVxKCZkc3Rfb3RoZXIub2lkLCAmcmVuMS0+cGFpci0+dHdvLT5vaWQpKSB7CisJCQkJLyoKKwkJCQkgKiBBZGRlZCBmaWxlIG9uIHRoZSBvdGhlciBzaWRlIGlkZW50aWNhbCB0bworCQkJCSAqIHRoZSBmaWxlIGJlaW5nIHJlbmFtZWQ6IGNsZWFuIG1lcmdlLgorCQkJCSAqIEFsc28sIHRoZXJlIGlzIG5vIG5lZWQgdG8gb3ZlcndyaXRlIHRoZQorCQkJCSAqIGZpbGUgYWxyZWFkeSBpbiB0aGUgd29ya2luZyBjb3B5LCBzbyBjYWxsCisJCQkJICogdXBkYXRlX2ZpbGVfZmxhZ3MoKSBpbnN0ZWFkIG9mCisJCQkJICogdXBkYXRlX2ZpbGUoKS4KKwkJCQkgKi8KKwkJCQlpZiAodXBkYXRlX2ZpbGVfZmxhZ3Mob3B0LAorCQkJCQkJICAgICAgcmVuMS0+cGFpci0+dHdvLAorCQkJCQkJICAgICAgcmVuMV9kc3QsCisJCQkJCQkgICAgICAxLCAvKiB1cGRhdGVfY2FjaGUgKi8KKwkJCQkJCSAgICAgIDAgIC8qIHVwZGF0ZV93ZCAgICAqLykpCisJCQkJCWNsZWFuX21lcmdlID0gLTE7CisJCQl9IGVsc2UgaWYgKCFvaWRlcSgmZHN0X290aGVyLm9pZCwgJm51bGxfb2lkKSkgeworCQkJCS8qCisJCQkJICogUHJvYmFibHkgbm90IGEgY2xlYW4gbWVyZ2UsIGJ1dCBpdCdzCisJCQkJICogcHJlbWF0dXJlIHRvIHNldCBjbGVhbl9tZXJnZSB0byAwIGhlcmUsCisJCQkJICogYmVjYXVzZSBpZiB0aGUgcmVuYW1lIG1lcmdlcyBjbGVhbmx5IGFuZAorCQkJCSAqIHRoZSBtZXJnZSBleGFjdGx5IG1hdGNoZXMgdGhlIG5ld2x5IGFkZGVkCisJCQkJICogZmlsZSwgdGhlbiB0aGUgbWVyZ2Ugd2lsbCBiZSBjbGVhbi4KKwkJCQkgKi8KKwkJCQlzZXR1cF9yZW5hbWVfY29uZmxpY3RfaW5mbyhSRU5BTUVfQURELAorCQkJCQkJCSAgIG9wdCwgcmVuMSwgTlVMTCk7CisJCQl9IGVsc2UKKwkJCQl0cnlfbWVyZ2UgPSAxOworCisJCQlpZiAoY2xlYW5fbWVyZ2UgPCAwKQorCQkJCWdvdG8gY2xlYW51cF9hbmRfcmV0dXJuOworCQkJaWYgKHRyeV9tZXJnZSkgeworCQkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvLCAqYSwgKmI7CisJCQkJc3JjX290aGVyLnBhdGggPSAoY2hhciAqKXJlbjFfc3JjOworCisJCQkJbyA9IHJlbjEtPnBhaXItPm9uZTsKKwkJCQlpZiAoYV9yZW5hbWVzID09IHJlbmFtZXMxKSB7CisJCQkJCWEgPSByZW4xLT5wYWlyLT50d287CisJCQkJCWIgPSAmc3JjX290aGVyOworCQkJCX0gZWxzZSB7CisJCQkJCWIgPSByZW4xLT5wYWlyLT50d287CisJCQkJCWEgPSAmc3JjX290aGVyOworCQkJCX0KKwkJCQl1cGRhdGVfZW50cnkocmVuMS0+ZHN0X2VudHJ5LCBvLCBhLCBiKTsKKwkJCQlzZXR1cF9yZW5hbWVfY29uZmxpY3RfaW5mbyhSRU5BTUVfTk9STUFMLAorCQkJCQkJCSAgIG9wdCwgcmVuMSwgTlVMTCk7CisJCQl9CisJCX0KKwl9CitjbGVhbnVwX2FuZF9yZXR1cm46CisJc3RyaW5nX2xpc3RfY2xlYXIoJmFfYnlfZHN0LCAwKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmYl9ieV9kc3QsIDApOworCisJcmV0dXJuIGNsZWFuX21lcmdlOworfQorCitzdHJ1Y3QgcmVuYW1lX2luZm8geworCXN0cnVjdCBzdHJpbmdfbGlzdCAqaGVhZF9yZW5hbWVzOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbWVyZ2VfcmVuYW1lczsKK307CisKK3N0YXRpYyB2b2lkIGluaXRpYWxfY2xlYW51cF9yZW5hbWUoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpwYWlycywKKwkJCQkgICBzdHJ1Y3QgaGFzaG1hcCAqZGlyX3JlbmFtZXMpCit7CisJc3RydWN0IGhhc2htYXBfaXRlciBpdGVyOworCXN0cnVjdCBkaXJfcmVuYW1lX2VudHJ5ICplOworCisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeShkaXJfcmVuYW1lcywgJml0ZXIsIGUsCisJCQkJZW50IC8qIG1lbWJlciBuYW1lICovKSB7CisJCWZyZWUoZS0+ZGlyKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmUtPm5ld19kaXIpOworCQkvKiBwb3NzaWJsZV9uZXdfZGlycyBhbHJlYWR5IGNsZWFyZWQgaW4gZ2V0X2RpcmVjdG9yeV9yZW5hbWVzICovCisJfQorCWhhc2htYXBfZnJlZV9lbnRyaWVzKGRpcl9yZW5hbWVzLCBzdHJ1Y3QgZGlyX3JlbmFtZV9lbnRyeSwgZW50KTsKKwlmcmVlKGRpcl9yZW5hbWVzKTsKKworCWZyZWUocGFpcnMtPnF1ZXVlKTsKKwlmcmVlKHBhaXJzKTsKK30KKworc3RhdGljIGludCBkZXRlY3RfYW5kX3Byb2Nlc3NfcmVuYW1lcyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJCSAgICAgIHN0cnVjdCB0cmVlICpjb21tb24sCisJCQkJICAgICAgc3RydWN0IHRyZWUgKmhlYWQsCisJCQkJICAgICAgc3RydWN0IHRyZWUgKm1lcmdlLAorCQkJCSAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqZW50cmllcywKKwkJCQkgICAgICBzdHJ1Y3QgcmVuYW1lX2luZm8gKnJpKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqaGVhZF9wYWlycywgKm1lcmdlX3BhaXJzOworCXN0cnVjdCBoYXNobWFwICpkaXJfcmVfaGVhZCwgKmRpcl9yZV9tZXJnZTsKKwlpbnQgY2xlYW4gPSAxOworCisJcmktPmhlYWRfcmVuYW1lcyA9IE5VTEw7CisJcmktPm1lcmdlX3JlbmFtZXMgPSBOVUxMOworCisJaWYgKCFtZXJnZV9kZXRlY3RfcmVuYW1lKG9wdCkpCisJCXJldHVybiAxOworCisJaGVhZF9wYWlycyA9IGdldF9kaWZmcGFpcnMob3B0LCBjb21tb24sIGhlYWQpOworCW1lcmdlX3BhaXJzID0gZ2V0X2RpZmZwYWlycyhvcHQsIGNvbW1vbiwgbWVyZ2UpOworCisJaWYgKChvcHQtPmRldGVjdF9kaXJlY3RvcnlfcmVuYW1lcyA9PSBNRVJHRV9ESVJFQ1RPUllfUkVOQU1FU19UUlVFKSB8fAorCSAgICAob3B0LT5kZXRlY3RfZGlyZWN0b3J5X3JlbmFtZXMgPT0gTUVSR0VfRElSRUNUT1JZX1JFTkFNRVNfQ09ORkxJQ1QgJiYKKwkgICAgICFvcHQtPnByaXYtPmNhbGxfZGVwdGgpKSB7CisJCWRpcl9yZV9oZWFkID0gZ2V0X2RpcmVjdG9yeV9yZW5hbWVzKGhlYWRfcGFpcnMpOworCQlkaXJfcmVfbWVyZ2UgPSBnZXRfZGlyZWN0b3J5X3JlbmFtZXMobWVyZ2VfcGFpcnMpOworCisJCWhhbmRsZV9kaXJlY3RvcnlfbGV2ZWxfY29uZmxpY3RzKG9wdCwKKwkJCQkJCSBkaXJfcmVfaGVhZCwgaGVhZCwKKwkJCQkJCSBkaXJfcmVfbWVyZ2UsIG1lcmdlKTsKKwl9IGVsc2UgeworCQlkaXJfcmVfaGVhZCAgPSB4bWFsbG9jKHNpemVvZigqZGlyX3JlX2hlYWQpKTsKKwkJZGlyX3JlX21lcmdlID0geG1hbGxvYyhzaXplb2YoKmRpcl9yZV9tZXJnZSkpOworCQlkaXJfcmVuYW1lX2luaXQoZGlyX3JlX2hlYWQpOworCQlkaXJfcmVuYW1lX2luaXQoZGlyX3JlX21lcmdlKTsKKwl9CisKKwlyaS0+aGVhZF9yZW5hbWVzICA9IGdldF9yZW5hbWVzKG9wdCwgb3B0LT5icmFuY2gxLCBoZWFkX3BhaXJzLAorCQkJCQlkaXJfcmVfbWVyZ2UsIGRpcl9yZV9oZWFkLCBoZWFkLAorCQkJCQljb21tb24sIGhlYWQsIG1lcmdlLCBlbnRyaWVzLAorCQkJCQkmY2xlYW4pOworCWlmIChjbGVhbiA8IDApCisJCWdvdG8gY2xlYW51cDsKKwlyaS0+bWVyZ2VfcmVuYW1lcyA9IGdldF9yZW5hbWVzKG9wdCwgb3B0LT5icmFuY2gyLCBtZXJnZV9wYWlycywKKwkJCQkJZGlyX3JlX2hlYWQsIGRpcl9yZV9tZXJnZSwgbWVyZ2UsCisJCQkJCWNvbW1vbiwgaGVhZCwgbWVyZ2UsIGVudHJpZXMsCisJCQkJCSZjbGVhbik7CisJaWYgKGNsZWFuIDwgMCkKKwkJZ290byBjbGVhbnVwOworCWNsZWFuICY9IHByb2Nlc3NfcmVuYW1lcyhvcHQsIHJpLT5oZWFkX3JlbmFtZXMsIHJpLT5tZXJnZV9yZW5hbWVzKTsKKworY2xlYW51cDoKKwkvKgorCSAqIFNvbWUgY2xlYW51cCBpcyBkZWZlcnJlZCB1bnRpbCBjbGVhbnVwX3JlbmFtZXMoKSBiZWNhdXNlIHRoZQorCSAqIGRhdGEgc3RydWN0dXJlcyBhcmUgc3RpbGwgbmVlZGVkIGFuZCByZWZlcmVuY2VkIGluCisJICogcHJvY2Vzc19lbnRyeSgpLiAgQnV0IHRoZXJlIGFyZSBhIGZldyB0aGluZ3Mgd2UgY2FuIGZyZWUgbm93LgorCSAqLworCWluaXRpYWxfY2xlYW51cF9yZW5hbWUoaGVhZF9wYWlycywgZGlyX3JlX2hlYWQpOworCWluaXRpYWxfY2xlYW51cF9yZW5hbWUobWVyZ2VfcGFpcnMsIGRpcl9yZV9tZXJnZSk7CisKKwlyZXR1cm4gY2xlYW47Cit9CisKK3N0YXRpYyB2b2lkIGZpbmFsX2NsZWFudXBfcmVuYW1lKHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVuYW1lKQoreworCWNvbnN0IHN0cnVjdCByZW5hbWUgKnJlOworCWludCBpOworCisJaWYgKHJlbmFtZSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVuYW1lLT5ucjsgaSsrKSB7CisJCXJlID0gcmVuYW1lLT5pdGVtc1tpXS51dGlsOworCQlkaWZmX2ZyZWVfZmlsZXBhaXIocmUtPnBhaXIpOworCX0KKwlzdHJpbmdfbGlzdF9jbGVhcihyZW5hbWUsIDEpOworCWZyZWUocmVuYW1lKTsKK30KKworc3RhdGljIHZvaWQgZmluYWxfY2xlYW51cF9yZW5hbWVzKHN0cnVjdCByZW5hbWVfaW5mbyAqcmVfaW5mbykKK3sKKwlmaW5hbF9jbGVhbnVwX3JlbmFtZShyZV9pbmZvLT5oZWFkX3JlbmFtZXMpOworCWZpbmFsX2NsZWFudXBfcmVuYW1lKHJlX2luZm8tPm1lcmdlX3JlbmFtZXMpOworfQorCitzdGF0aWMgaW50IHJlYWRfb2lkX3N0cmJ1ZihzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZHN0KQoreworCXZvaWQgKmJ1ZjsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlyZXR1cm4gZXJyKG9wdCwgXygiY2Fubm90IHJlYWQgb2JqZWN0ICVzIiksIG9pZF90b19oZXgob2lkKSk7CisJaWYgKHR5cGUgIT0gT0JKX0JMT0IpIHsKKwkJZnJlZShidWYpOworCQlyZXR1cm4gZXJyKG9wdCwgXygib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiKSwgb2lkX3RvX2hleChvaWQpKTsKKwl9CisJc3RyYnVmX2F0dGFjaChkc3QsIGJ1Ziwgc2l6ZSwgc2l6ZSArIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJsb2JfdW5jaGFuZ2VkKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkgIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvLAorCQkJICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSwKKwkJCSAgaW50IHJlbm9ybWFsaXplLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJidWYgb2J1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYWJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAwOyAvKiBhc3N1bWUgY2hhbmdlZCBmb3Igc2FmZXR5ICovCisJY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppZHggPSBvcHQtPnJlcG8tPmluZGV4OworCisJaWYgKGEtPm1vZGUgIT0gby0+bW9kZSkKKwkJcmV0dXJuIDA7CisJaWYgKG9pZGVxKCZvLT5vaWQsICZhLT5vaWQpKQorCQlyZXR1cm4gMTsKKwlpZiAoIXJlbm9ybWFsaXplKQorCQlyZXR1cm4gMDsKKworCWlmIChyZWFkX29pZF9zdHJidWYob3B0LCAmby0+b2lkLCAmb2J1ZikgfHwKKwkgICAgcmVhZF9vaWRfc3RyYnVmKG9wdCwgJmEtPm9pZCwgJmFidWYpKQorCQlnb3RvIGVycm9yX3JldHVybjsKKwkvKgorCSAqIE5vdGU6IGJpbmFyeSB8IGlzIHVzZWQgc28gdGhhdCBib3RoIHJlbm9ybWFsaXphdGlvbnMgYXJlCisJICogcGVyZm9ybWVkLiAgQ29tcGFyaXNvbiBjYW4gYmUgc2tpcHBlZCBpZiBib3RoIGZpbGVzIGFyZQorCSAqIHVuY2hhbmdlZCBzaW5jZSB0aGVpciBzaGExcyBoYXZlIGFscmVhZHkgYmVlbiBjb21wYXJlZC4KKwkgKi8KKwlpZiAocmVub3JtYWxpemVfYnVmZmVyKGlkeCwgcGF0aCwgb2J1Zi5idWYsIG9idWYubGVuLCAmb2J1ZikgfAorCSAgICByZW5vcm1hbGl6ZV9idWZmZXIoaWR4LCBwYXRoLCBhYnVmLmJ1ZiwgYWJ1Zi5sZW4sICZhYnVmKSkKKwkJcmV0ID0gKG9idWYubGVuID09IGFidWYubGVuICYmICFtZW1jbXAob2J1Zi5idWYsIGFidWYuYnVmLCBvYnVmLmxlbikpOworCitlcnJvcl9yZXR1cm46CisJc3RyYnVmX3JlbGVhc2UoJm9idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZhYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGhhbmRsZV9tb2RpZnlfZGVsZXRlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJY29uc3QgY2hhciAqcGF0aCwKKwkJCQljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqbywKKwkJCQljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSwKKwkJCQljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYikKK3sKKwljb25zdCBjaGFyICptb2RpZnlfYnJhbmNoLCAqZGVsZXRlX2JyYW5jaDsKKwljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqY2hhbmdlZDsKKworCWlmIChpc192YWxpZChhKSkgeworCQltb2RpZnlfYnJhbmNoID0gb3B0LT5icmFuY2gxOworCQlkZWxldGVfYnJhbmNoID0gb3B0LT5icmFuY2gyOworCQljaGFuZ2VkID0gYTsKKwl9IGVsc2UgeworCQltb2RpZnlfYnJhbmNoID0gb3B0LT5icmFuY2gyOworCQlkZWxldGVfYnJhbmNoID0gb3B0LT5icmFuY2gxOworCQljaGFuZ2VkID0gYjsKKwl9CisKKwlyZXR1cm4gaGFuZGxlX2NoYW5nZV9kZWxldGUob3B0LAorCQkJCSAgICBwYXRoLCBOVUxMLAorCQkJCSAgICBvLCBjaGFuZ2VkLAorCQkJCSAgICBtb2RpZnlfYnJhbmNoLCBkZWxldGVfYnJhbmNoLAorCQkJCSAgICBfKCJtb2RpZnkiKSwgXygibW9kaWZpZWQiKSk7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2NvbnRlbnRfbWVyZ2Uoc3RydWN0IG1lcmdlX2ZpbGVfaW5mbyAqbWZpLAorCQkJCXN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJY29uc3QgY2hhciAqcGF0aCwKKwkJCQlpbnQgaXNfZGlydHksCisJCQkJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm8sCisJCQkJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmEsCisJCQkJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmIsCisJCQkJc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvICpjaSkKK3sKKwljb25zdCBjaGFyICpyZWFzb24gPSBfKCJjb250ZW50Iik7CisJdW5zaWduZWQgZGZfY29uZmxpY3RfcmVtYWlucyA9IDA7CisKKwlpZiAoIWlzX3ZhbGlkKG8pKQorCQlyZWFzb24gPSBfKCJhZGQvYWRkIik7CisKKwlhc3NlcnQoby0+cGF0aCAmJiBhLT5wYXRoICYmIGItPnBhdGgpOworCWlmIChjaSAmJiBkaXJfaW5fd2F5KG9wdC0+cmVwby0+aW5kZXgsIHBhdGgsICFvcHQtPnByaXYtPmNhbGxfZGVwdGgsCisJCQkgICAgIFNfSVNHSVRMSU5LKGNpLT5yZW4xLT5wYWlyLT50d28tPm1vZGUpKSkKKwkJZGZfY29uZmxpY3RfcmVtYWlucyA9IDE7CisKKwlpZiAobWVyZ2VfbW9kZV9hbmRfY29udGVudHMob3B0LCBvLCBhLCBiLCBwYXRoLAorCQkJCSAgICBvcHQtPmJyYW5jaDEsIG9wdC0+YnJhbmNoMiwKKwkJCQkgICAgb3B0LT5wcml2LT5jYWxsX2RlcHRoICogMiwgbWZpKSkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBXZSBjYW4gc2tpcCB1cGRhdGluZyB0aGUgd29ya2luZyB0cmVlIGZpbGUgaWZmOgorCSAqICAgYSkgVGhlIG1lcmdlIGlzIGNsZWFuCisJICogICBiKSBUaGUgbWVyZ2UgbWF0Y2hlcyB3aGF0IHdhcyBpbiBIRUFEIChjb250ZW50LCBtb2RlLCBwYXRobmFtZSkKKwkgKiAgIGMpIFRoZSB0YXJnZXQgcGF0aCBpcyB1c2FibGUgKGkuZS4gbm90IGludm9sdmVkIGluIEQvRiBjb25mbGljdCkKKwkgKi8KKwlpZiAobWZpLT5jbGVhbiAmJiB3YXNfdHJhY2tlZF9hbmRfbWF0Y2hlcyhvcHQsIHBhdGgsICZtZmktPmJsb2IpICYmCisJICAgICFkZl9jb25mbGljdF9yZW1haW5zKSB7CisJCWludCBwb3M7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwkJb3V0cHV0KG9wdCwgMywgXygiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIiksIHBhdGgpOworCQlpZiAoYWRkX2NhY2hlaW5mbyhvcHQsICZtZmktPmJsb2IsIHBhdGgsCisJCQkJICAwLCAoIW9wdC0+cHJpdi0+Y2FsbF9kZXB0aCAmJiAhaXNfZGlydHkpLCAwKSkKKwkJCXJldHVybiAtMTsKKwkJLyoKKwkJICogSG93ZXZlciwgYWRkX2NhY2hlaW5mbygpIHdpbGwgZGVsZXRlIHRoZSBvbGQgY2FjaGUgZW50cnkKKwkJICogYW5kIGFkZCBhIG5ldyBvbmUuICBXZSBuZWVkIHRvIGNvcHkgb3ZlciBhbnkgc2tpcF93b3JrdHJlZQorCQkgKiBmbGFnIHRvIGF2b2lkIG1ha2luZyB0aGUgZmlsZSBhcHBlYXIgYXMgaWYgaXQgd2VyZQorCQkgKiBkZWxldGVkIGJ5IHRoZSB1c2VyLgorCQkgKi8KKwkJcG9zID0gaW5kZXhfbmFtZV9wb3MoJm9wdC0+cHJpdi0+b3JpZ19pbmRleCwgcGF0aCwgc3RybGVuKHBhdGgpKTsKKwkJY2UgPSBvcHQtPnByaXYtPm9yaWdfaW5kZXguY2FjaGVbcG9zXTsKKwkJaWYgKGNlX3NraXBfd29ya3RyZWUoY2UpKSB7CisJCQlwb3MgPSBpbmRleF9uYW1lX3BvcyhvcHQtPnJlcG8tPmluZGV4LCBwYXRoLCBzdHJsZW4ocGF0aCkpOworCQkJY2UgPSBvcHQtPnJlcG8tPmluZGV4LT5jYWNoZVtwb3NdOworCQkJY2UtPmNlX2ZsYWdzIHw9IENFX1NLSVBfV09SS1RSRUU7CisJCX0KKwkJcmV0dXJuIG1maS0+Y2xlYW47CisJfQorCisJaWYgKCFtZmktPmNsZWFuKSB7CisJCWlmIChTX0lTR0lUTElOSyhtZmktPmJsb2IubW9kZSkpCisJCQlyZWFzb24gPSBfKCJzdWJtb2R1bGUiKTsKKwkJb3V0cHV0KG9wdCwgMSwgXygiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiKSwKKwkJCQlyZWFzb24sIHBhdGgpOworCQlpZiAoY2kgJiYgIWRmX2NvbmZsaWN0X3JlbWFpbnMpCisJCQlpZiAodXBkYXRlX3N0YWdlcyhvcHQsIHBhdGgsIG8sIGEsIGIpKQorCQkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoZGZfY29uZmxpY3RfcmVtYWlucyB8fCBpc19kaXJ0eSkgeworCQljaGFyICpuZXdfcGF0aDsKKwkJaWYgKG9wdC0+cHJpdi0+Y2FsbF9kZXB0aCkgeworCQkJcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleChvcHQtPnJlcG8tPmluZGV4LCBwYXRoKTsKKwkJfSBlbHNlIHsKKwkJCWlmICghbWZpLT5jbGVhbikgeworCQkJCWlmICh1cGRhdGVfc3RhZ2VzKG9wdCwgcGF0aCwgbywgYSwgYikpCisJCQkJCXJldHVybiAtMTsKKwkJCX0gZWxzZSB7CisJCQkJaW50IGZpbGVfZnJvbV9zdGFnZTIgPSB3YXNfdHJhY2tlZChvcHQsIHBhdGgpOworCisJCQkJaWYgKHVwZGF0ZV9zdGFnZXMob3B0LCBwYXRoLCBOVUxMLAorCQkJCQkJICBmaWxlX2Zyb21fc3RhZ2UyID8gJm1maS0+YmxvYiA6IE5VTEwsCisJCQkJCQkgIGZpbGVfZnJvbV9zdGFnZTIgPyBOVUxMIDogJm1maS0+YmxvYikpCisJCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQl9CisJCW5ld19wYXRoID0gdW5pcXVlX3BhdGgob3B0LCBwYXRoLCBjaS0+cmVuMS0+YnJhbmNoKTsKKwkJaWYgKGlzX2RpcnR5KSB7CisJCQlvdXRwdXQob3B0LCAxLCBfKCJSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgJXMiKSwKKwkJCSAgICAgICBwYXRoKTsKKwkJfQorCQlvdXRwdXQob3B0LCAxLCBfKCJBZGRpbmcgYXMgJXMgaW5zdGVhZCIpLCBuZXdfcGF0aCk7CisJCWlmICh1cGRhdGVfZmlsZShvcHQsIDAsICZtZmktPmJsb2IsIG5ld19wYXRoKSkgeworCQkJZnJlZShuZXdfcGF0aCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZnJlZShuZXdfcGF0aCk7CisJCW1maS0+Y2xlYW4gPSAwOworCX0gZWxzZSBpZiAodXBkYXRlX2ZpbGUob3B0LCBtZmktPmNsZWFuLCAmbWZpLT5ibG9iLCBwYXRoKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAhaXNfZGlydHkgJiYgbWZpLT5jbGVhbjsKK30KKworc3RhdGljIGludCBoYW5kbGVfcmVuYW1lX25vcm1hbChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKnBhdGgsCisJCQkJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm8sCisJCQkJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmEsCisJCQkJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmIsCisJCQkJc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvICpjaSkKK3sKKwlzdHJ1Y3QgcmVuYW1lICpyZW4gPSBjaS0+cmVuMTsKKwlzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1maTsKKwlpbnQgY2xlYW47CisJaW50IHNpZGUgPSAocmVuLT5icmFuY2ggPT0gb3B0LT5icmFuY2gxID8gMiA6IDMpOworCisJLyogTWVyZ2UgdGhlIGNvbnRlbnQgYW5kIHdyaXRlIGl0IG91dCAqLworCWNsZWFuID0gaGFuZGxlX2NvbnRlbnRfbWVyZ2UoJm1maSwgb3B0LCBwYXRoLCB3YXNfZGlydHkob3B0LCBwYXRoKSwKKwkJCQkgICAgIG8sIGEsIGIsIGNpKTsKKworCWlmIChjbGVhbiAmJgorCSAgICBvcHQtPmRldGVjdF9kaXJlY3RvcnlfcmVuYW1lcyA9PSBNRVJHRV9ESVJFQ1RPUllfUkVOQU1FU19DT05GTElDVCAmJgorCSAgICByZW4tPmRpcl9yZW5hbWVfb3JpZ2luYWxfZGVzdCkgeworCQlpZiAodXBkYXRlX3N0YWdlcyhvcHQsIHBhdGgsCisJCQkJICBOVUxMLAorCQkJCSAgc2lkZSA9PSAyID8gJm1maS5ibG9iIDogTlVMTCwKKwkJCQkgIHNpZGUgPT0gMiA/IE5VTEwgOiAmbWZpLmJsb2IpKQorCQkJcmV0dXJuIC0xOworCQljbGVhbiA9IDA7IC8qIG5vdCBjbGVhbiwgYnV0IGNvbmZsaWN0ZWQgKi8KKwl9CisJcmV0dXJuIGNsZWFuOworfQorCitzdGF0aWMgdm9pZCBkaXJfcmVuYW1lX3dhcm5pbmcoY29uc3QgY2hhciAqbXNnLAorCQkJICAgICAgIGludCBpc19hZGQsCisJCQkgICAgICAgaW50IGNsZWFuLAorCQkJICAgICAgIHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkgICAgICAgc3RydWN0IHJlbmFtZSAqcmVuKQoreworCWNvbnN0IGNoYXIgKm90aGVyX2JyYW5jaDsKKwlvdGhlcl9icmFuY2ggPSAocmVuLT5icmFuY2ggPT0gb3B0LT5icmFuY2gxID8KKwkJCW9wdC0+YnJhbmNoMiA6IG9wdC0+YnJhbmNoMSk7CisJaWYgKGlzX2FkZCkgeworCQlvdXRwdXQob3B0LCBjbGVhbiA/IDIgOiAxLCBtc2csCisJCSAgICAgICByZW4tPnBhaXItPm9uZS0+cGF0aCwgcmVuLT5icmFuY2gsCisJCSAgICAgICBvdGhlcl9icmFuY2gsIHJlbi0+cGFpci0+dHdvLT5wYXRoKTsKKwkJcmV0dXJuOworCX0KKwlvdXRwdXQob3B0LCBjbGVhbiA/IDIgOiAxLCBtc2csCisJICAgICAgIHJlbi0+cGFpci0+b25lLT5wYXRoLCByZW4tPmRpcl9yZW5hbWVfb3JpZ2luYWxfZGVzdCwgcmVuLT5icmFuY2gsCisJICAgICAgIG90aGVyX2JyYW5jaCwgcmVuLT5wYWlyLT50d28tPnBhdGgpOworfQorc3RhdGljIGludCB3YXJuX2Fib3V0X2Rpcl9yZW5hbWVkX2VudHJpZXMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCQkJICBzdHJ1Y3QgcmVuYW1lICpyZW4pCit7CisJY29uc3QgY2hhciAqbXNnOworCWludCBjbGVhbiA9IDEsIGlzX2FkZDsKKworCWlmICghcmVuKQorCQlyZXR1cm4gY2xlYW47CisKKwkvKiBSZXR1cm4gZWFybHkgaWYgcmVuIHdhcyBub3QgYWZmZWN0ZWQvY3JlYXRlZCBieSBhIGRpcmVjdG9yeSByZW5hbWUgKi8KKwlpZiAoIXJlbi0+ZGlyX3JlbmFtZV9vcmlnaW5hbF9kZXN0KQorCQlyZXR1cm4gY2xlYW47CisKKwkvKiBTYW5pdHkgY2hlY2tzICovCisJYXNzZXJ0KG9wdC0+ZGV0ZWN0X2RpcmVjdG9yeV9yZW5hbWVzID4gTUVSR0VfRElSRUNUT1JZX1JFTkFNRVNfTk9ORSk7CisJYXNzZXJ0KHJlbi0+ZGlyX3JlbmFtZV9vcmlnaW5hbF90eXBlID09ICdBJyB8fAorCSAgICAgICByZW4tPmRpcl9yZW5hbWVfb3JpZ2luYWxfdHlwZSA9PSAnUicpOworCisJLyogQ2hlY2sgd2hldGhlciB0byB0cmVhdCBkaXJlY3RvcnkgcmVuYW1lcyBhcyBhIGNvbmZsaWN0ICovCisJY2xlYW4gPSAob3B0LT5kZXRlY3RfZGlyZWN0b3J5X3JlbmFtZXMgPT0gTUVSR0VfRElSRUNUT1JZX1JFTkFNRVNfVFJVRSk7CisKKwlpc19hZGQgPSAocmVuLT5kaXJfcmVuYW1lX29yaWdpbmFsX3R5cGUgPT0gJ0EnKTsKKwlpZiAocmVuLT5kaXJfcmVuYW1lX29yaWdpbmFsX3R5cGUgPT0gJ0EnICYmIGNsZWFuKSB7CisJCW1zZyA9IF8oIlBhdGggdXBkYXRlZDogJXMgYWRkZWQgaW4gJXMgaW5zaWRlIGEgIgorCQkJImRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzOyBtb3ZpbmcgaXQgdG8gJXMuIik7CisJfSBlbHNlIGlmIChyZW4tPmRpcl9yZW5hbWVfb3JpZ2luYWxfdHlwZSA9PSAnQScgJiYgIWNsZWFuKSB7CisJCW1zZyA9IF8oIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgYWRkZWQgaW4gJXMgIgorCQkJImluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzLCAiCisJCQkic3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iKTsKKwl9IGVsc2UgaWYgKHJlbi0+ZGlyX3JlbmFtZV9vcmlnaW5hbF90eXBlID09ICdSJyAmJiBjbGVhbikgeworCQltc2cgPSBfKCJQYXRoIHVwZGF0ZWQ6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhICIKKwkJCSJkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAlczsgbW92aW5nIGl0IHRvICVzLiIpOworCX0gZWxzZSBpZiAocmVuLT5kaXJfcmVuYW1lX29yaWdpbmFsX3R5cGUgPT0gJ1InICYmICFjbGVhbikgeworCQltc2cgPSBfKCJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsICIKKwkJCSJpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAlcywgIgorCQkJInN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIik7CisJfSBlbHNlIHsKKwkJQlVHKCJJbXBvc3NpYmxlIGRpcl9yZW5hbWVfb3JpZ2luYWxfdHlwZS9jbGVhbiBjb21iaW5hdGlvbiIpOworCX0KKwlkaXJfcmVuYW1lX3dhcm5pbmcobXNnLCBpc19hZGQsIGNsZWFuLCBvcHQsIHJlbik7CisKKwlyZXR1cm4gY2xlYW47Cit9CisKKy8qIFBlciBlbnRyeSBtZXJnZSBmdW5jdGlvbiAqLworc3RhdGljIGludCBwcm9jZXNzX2VudHJ5KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YWdlX2RhdGEgKmVudHJ5KQoreworCWludCBjbGVhbl9tZXJnZSA9IDE7CisJaW50IG5vcm1hbGl6ZSA9IG9wdC0+cmVub3JtYWxpemU7CisKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqbyA9ICZlbnRyeS0+c3RhZ2VzWzFdOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICphID0gJmVudHJ5LT5zdGFnZXNbMl07CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmIgPSAmZW50cnktPnN0YWdlc1szXTsKKwlpbnQgb192YWxpZCA9IGlzX3ZhbGlkKG8pOworCWludCBhX3ZhbGlkID0gaXNfdmFsaWQoYSk7CisJaW50IGJfdmFsaWQgPSBpc192YWxpZChiKTsKKwlvLT5wYXRoID0gYS0+cGF0aCA9IGItPnBhdGggPSAoY2hhciopcGF0aDsKKworCWVudHJ5LT5wcm9jZXNzZWQgPSAxOworCWlmIChlbnRyeS0+cmVuYW1lX2NvbmZsaWN0X2luZm8pIHsKKwkJc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvICpjaSA9IGVudHJ5LT5yZW5hbWVfY29uZmxpY3RfaW5mbzsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnRlbXA7CisJCWludCBwYXRoX2NsZWFuOworCisJCXBhdGhfY2xlYW4gPSB3YXJuX2Fib3V0X2Rpcl9yZW5hbWVkX2VudHJpZXMob3B0LCBjaS0+cmVuMSk7CisJCXBhdGhfY2xlYW4gJj0gd2Fybl9hYm91dF9kaXJfcmVuYW1lZF9lbnRyaWVzKG9wdCwgY2ktPnJlbjIpOworCisJCS8qCisJCSAqIEZvciBjYXNlcyB3aXRoIGEgc2luZ2xlIHJlbmFtZSwge28sYSxifS0+cGF0aCBoYXZlIGFsbCBiZWVuCisJCSAqIHNldCB0byB0aGUgcmVuYW1lIHRhcmdldCBwYXRoOyB3ZSBuZWVkIHRvIHNldCB0d28gb2YgdGhlc2UKKwkJICogYmFjayB0byB0aGUgcmVuYW1lIHNvdXJjZS4KKwkJICogRm9yIHJlbmFtZS9yZW5hbWUgY29uZmxpY3RzLCB3ZSdsbCBtYW51YWxseSBmaXggcGF0aHMgYmVsb3cuCisJCSAqLworCQl0ZW1wID0gKG9wdC0+YnJhbmNoMSA9PSBjaS0+cmVuMS0+YnJhbmNoKSA/IGIgOiBhOworCQlvLT5wYXRoID0gdGVtcC0+cGF0aCA9IGNpLT5yZW4xLT5wYWlyLT5vbmUtPnBhdGg7CisJCWlmIChjaS0+cmVuMikgeworCQkJYXNzZXJ0KG9wdC0+YnJhbmNoMSA9PSBjaS0+cmVuMS0+YnJhbmNoKTsKKwkJfQorCisJCXN3aXRjaCAoY2ktPnJlbmFtZV90eXBlKSB7CisJCWNhc2UgUkVOQU1FX05PUk1BTDoKKwkJY2FzZSBSRU5BTUVfT05FX0ZJTEVfVE9fT05FOgorCQkJY2xlYW5fbWVyZ2UgPSBoYW5kbGVfcmVuYW1lX25vcm1hbChvcHQsIHBhdGgsIG8sIGEsIGIsCisJCQkJCQkJICAgY2kpOworCQkJYnJlYWs7CisJCWNhc2UgUkVOQU1FX1ZJQV9ESVI6CisJCQljbGVhbl9tZXJnZSA9IGhhbmRsZV9yZW5hbWVfdmlhX2RpcihvcHQsIGNpKTsKKwkJCWJyZWFrOworCQljYXNlIFJFTkFNRV9BREQ6CisJCQkvKgorCQkJICogUHJvYmFibHkgdW5jbGVhbiBtZXJnZSwgYnV0IGlmIHRoZSByZW5hbWVkIGZpbGUKKwkJCSAqIG1lcmdlcyBjbGVhbmx5IGFuZCB0aGUgcmVzdWx0IGNhbiB0aGVuIGJlCisJCQkgKiB0d28td2F5IG1lcmdlZCBjbGVhbmx5IHdpdGggdGhlIGFkZGVkIGZpbGUsIEkKKwkJCSAqIGd1ZXNzIGl0J3MgYSBjbGVhbiBtZXJnZT8KKwkJCSAqLworCQkJY2xlYW5fbWVyZ2UgPSBoYW5kbGVfcmVuYW1lX2FkZChvcHQsIGNpKTsKKwkJCWJyZWFrOworCQljYXNlIFJFTkFNRV9ERUxFVEU6CisJCQljbGVhbl9tZXJnZSA9IDA7CisJCQlpZiAoaGFuZGxlX3JlbmFtZV9kZWxldGUob3B0LCBjaSkpCisJCQkJY2xlYW5fbWVyZ2UgPSAtMTsKKwkJCWJyZWFrOworCQljYXNlIFJFTkFNRV9PTkVfRklMRV9UT19UV086CisJCQkvKgorCQkJICogTWFudWFsbHkgZml4IHVwIHBhdGhzOyBub3RlOgorCQkJICogcmVuWzEyXS0+cGFpci0+b25lLT5wYXRoIGFyZSBlcXVhbC4KKwkJCSAqLworCQkJby0+cGF0aCA9IGNpLT5yZW4xLT5wYWlyLT5vbmUtPnBhdGg7CisJCQlhLT5wYXRoID0gY2ktPnJlbjEtPnBhaXItPnR3by0+cGF0aDsKKwkJCWItPnBhdGggPSBjaS0+cmVuMi0+cGFpci0+dHdvLT5wYXRoOworCisJCQljbGVhbl9tZXJnZSA9IDA7CisJCQlpZiAoaGFuZGxlX3JlbmFtZV9yZW5hbWVfMXRvMihvcHQsIGNpKSkKKwkJCQljbGVhbl9tZXJnZSA9IC0xOworCQkJYnJlYWs7CisJCWNhc2UgUkVOQU1FX1RXT19GSUxFU19UT19PTkU6CisJCQkvKgorCQkJICogTWFudWFsbHkgZml4IHVwIHBhdGhzOyBub3RlLAorCQkJICogcmVuWzEyXS0+cGFpci0+dHdvLT5wYXRoIGFyZSBhY3R1YWxseSBlcXVhbC4KKwkJCSAqLworCQkJby0+cGF0aCA9IE5VTEw7CisJCQlhLT5wYXRoID0gY2ktPnJlbjEtPnBhaXItPnR3by0+cGF0aDsKKwkJCWItPnBhdGggPSBjaS0+cmVuMi0+cGFpci0+dHdvLT5wYXRoOworCisJCQkvKgorCQkJICogUHJvYmFibHkgdW5jbGVhbiBtZXJnZSwgYnV0IGlmIHRoZSB0d28gcmVuYW1lZAorCQkJICogZmlsZXMgbWVyZ2UgY2xlYW5seSBhbmQgdGhlIHR3byByZXN1bHRpbmcgZmlsZXMKKwkJCSAqIGNhbiB0aGVuIGJlIHR3by13YXkgbWVyZ2VkIGNsZWFubHksIEkgZ3Vlc3MgaXQncworCQkJICogYSBjbGVhbiBtZXJnZT8KKwkJCSAqLworCQkJY2xlYW5fbWVyZ2UgPSBoYW5kbGVfcmVuYW1lX3JlbmFtZV8ydG8xKG9wdCwgY2kpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbnRyeS0+cHJvY2Vzc2VkID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChwYXRoX2NsZWFuIDwgY2xlYW5fbWVyZ2UpCisJCQljbGVhbl9tZXJnZSA9IHBhdGhfY2xlYW47CisJfSBlbHNlIGlmIChvX3ZhbGlkICYmICghYV92YWxpZCB8fCAhYl92YWxpZCkpIHsKKwkJLyogQ2FzZSBBOiBEZWxldGVkIGluIG9uZSAqLworCQlpZiAoKCFhX3ZhbGlkICYmICFiX3ZhbGlkKSB8fAorCQkgICAgKCFiX3ZhbGlkICYmIGJsb2JfdW5jaGFuZ2VkKG9wdCwgbywgYSwgbm9ybWFsaXplLCBwYXRoKSkgfHwKKwkJICAgICghYV92YWxpZCAmJiBibG9iX3VuY2hhbmdlZChvcHQsIG8sIGIsIG5vcm1hbGl6ZSwgcGF0aCkpKSB7CisJCQkvKiBEZWxldGVkIGluIGJvdGggb3IgZGVsZXRlZCBpbiBvbmUgYW5kCisJCQkgKiB1bmNoYW5nZWQgaW4gdGhlIG90aGVyICovCisJCQlpZiAoYV92YWxpZCkKKwkJCQlvdXRwdXQob3B0LCAyLCBfKCJSZW1vdmluZyAlcyIpLCBwYXRoKTsKKwkJCS8qIGRvIG5vdCB0b3VjaCB3b3JraW5nIGZpbGUgaWYgaXQgZGlkIG5vdCBleGlzdCAqLworCQkJcmVtb3ZlX2ZpbGUob3B0LCAxLCBwYXRoLCAhYV92YWxpZCk7CisJCX0gZWxzZSB7CisJCQkvKiBNb2RpZnkvZGVsZXRlOyBkZWxldGVkIHNpZGUgbWF5IGhhdmUgcHV0IGEgZGlyZWN0b3J5IGluIHRoZSB3YXkgKi8KKwkJCWNsZWFuX21lcmdlID0gMDsKKwkJCWlmIChoYW5kbGVfbW9kaWZ5X2RlbGV0ZShvcHQsIHBhdGgsIG8sIGEsIGIpKQorCQkJCWNsZWFuX21lcmdlID0gLTE7CisJCX0KKwl9IGVsc2UgaWYgKCghb192YWxpZCAmJiBhX3ZhbGlkICYmICFiX3ZhbGlkKSB8fAorCQkgICAoIW9fdmFsaWQgJiYgIWFfdmFsaWQgJiYgYl92YWxpZCkpIHsKKwkJLyogQ2FzZSBCOiBBZGRlZCBpbiBvbmUuICovCisJCS8qIFtub3RoaW5nfGRpcmVjdG9yeV0gLT4gKFtub3RoaW5nfGRpcmVjdG9yeV0sIGZpbGUpICovCisKKwkJY29uc3QgY2hhciAqYWRkX2JyYW5jaDsKKwkJY29uc3QgY2hhciAqb3RoZXJfYnJhbmNoOworCQljb25zdCBjaGFyICpjb25mOworCQljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqY29udGVudHM7CisKKwkJaWYgKGFfdmFsaWQpIHsKKwkJCWFkZF9icmFuY2ggPSBvcHQtPmJyYW5jaDE7CisJCQlvdGhlcl9icmFuY2ggPSBvcHQtPmJyYW5jaDI7CisJCQljb250ZW50cyA9IGE7CisJCQljb25mID0gXygiZmlsZS9kaXJlY3RvcnkiKTsKKwkJfSBlbHNlIHsKKwkJCWFkZF9icmFuY2ggPSBvcHQtPmJyYW5jaDI7CisJCQlvdGhlcl9icmFuY2ggPSBvcHQtPmJyYW5jaDE7CisJCQljb250ZW50cyA9IGI7CisJCQljb25mID0gXygiZGlyZWN0b3J5L2ZpbGUiKTsKKwkJfQorCQlpZiAoZGlyX2luX3dheShvcHQtPnJlcG8tPmluZGV4LCBwYXRoLAorCQkJICAgICAgICFvcHQtPnByaXYtPmNhbGxfZGVwdGggJiYgIVNfSVNHSVRMSU5LKGEtPm1vZGUpLAorCQkJICAgICAgIDApKSB7CisJCQljaGFyICpuZXdfcGF0aCA9IHVuaXF1ZV9wYXRoKG9wdCwgcGF0aCwgYWRkX2JyYW5jaCk7CisJCQljbGVhbl9tZXJnZSA9IDA7CisJCQlvdXRwdXQob3B0LCAxLCBfKCJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuICIKKwkJCSAgICAgICAiQWRkaW5nICVzIGFzICVzIiksCisJCQkgICAgICAgY29uZiwgcGF0aCwgb3RoZXJfYnJhbmNoLCBwYXRoLCBuZXdfcGF0aCk7CisJCQlpZiAodXBkYXRlX2ZpbGUob3B0LCAwLCBjb250ZW50cywgbmV3X3BhdGgpKQorCQkJCWNsZWFuX21lcmdlID0gLTE7CisJCQllbHNlIGlmIChvcHQtPnByaXYtPmNhbGxfZGVwdGgpCisJCQkJcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleChvcHQtPnJlcG8tPmluZGV4LCBwYXRoKTsKKwkJCWZyZWUobmV3X3BhdGgpOworCQl9IGVsc2UgeworCQkJb3V0cHV0KG9wdCwgMiwgXygiQWRkaW5nICVzIiksIHBhdGgpOworCQkJLyogZG8gbm90IG92ZXJ3cml0ZSBmaWxlIGlmIGFscmVhZHkgcHJlc2VudCAqLworCQkJaWYgKHVwZGF0ZV9maWxlX2ZsYWdzKG9wdCwgY29udGVudHMsIHBhdGgsIDEsICFhX3ZhbGlkKSkKKwkJCQljbGVhbl9tZXJnZSA9IC0xOworCQl9CisJfSBlbHNlIGlmIChhX3ZhbGlkICYmIGJfdmFsaWQpIHsKKwkJaWYgKCFvX3ZhbGlkKSB7CisJCQkvKiBDYXNlIEM6IEFkZGVkIGluIGJvdGggKGNoZWNrIGZvciBzYW1lIHBlcm1pc3Npb25zKSAqLworCQkJb3V0cHV0KG9wdCwgMSwKKwkJCSAgICAgICBfKCJDT05GTElDVCAoYWRkL2FkZCk6IE1lcmdlIGNvbmZsaWN0IGluICVzIiksCisJCQkgICAgICAgcGF0aCk7CisJCQljbGVhbl9tZXJnZSA9IGhhbmRsZV9maWxlX2NvbGxpc2lvbihvcHQsCisJCQkJCQkJICAgIHBhdGgsIE5VTEwsIE5VTEwsCisJCQkJCQkJICAgIG9wdC0+YnJhbmNoMSwKKwkJCQkJCQkgICAgb3B0LT5icmFuY2gyLAorCQkJCQkJCSAgICBhLCBiKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGNhc2UgRDogTW9kaWZpZWQgaW4gYm90aCwgYnV0IGRpZmZlcmVudGx5LiAqLworCQkJc3RydWN0IG1lcmdlX2ZpbGVfaW5mbyBtZmk7CisJCQlpbnQgaXNfZGlydHkgPSAwOyAvKiB1bnBhY2tfdHJlZXMgd291bGQgaGF2ZSBiYWlsZWQgaWYgZGlydHkgKi8KKwkJCWNsZWFuX21lcmdlID0gaGFuZGxlX2NvbnRlbnRfbWVyZ2UoJm1maSwgb3B0LCBwYXRoLAorCQkJCQkJCSAgIGlzX2RpcnR5LAorCQkJCQkJCSAgIG8sIGEsIGIsIE5VTEwpOworCQl9CisJfSBlbHNlIGlmICghb192YWxpZCAmJiAhYV92YWxpZCAmJiAhYl92YWxpZCkgeworCQkvKgorCQkgKiB0aGlzIGVudHJ5IHdhcyBkZWxldGVkIGFsdG9nZXRoZXIuIGFfbW9kZSA9PSAwIG1lYW5zCisJCSAqIHdlIGhhZCB0aGF0IHBhdGggYW5kIHdhbnQgdG8gYWN0aXZlbHkgcmVtb3ZlIGl0LgorCQkgKi8KKwkJcmVtb3ZlX2ZpbGUob3B0LCAxLCBwYXRoLCAhYS0+bW9kZSk7CisJfSBlbHNlCisJCUJVRygiZmF0YWwgbWVyZ2UgZmFpbHVyZSwgc2hvdWxkbid0IGhhcHBlbi4iKTsKKworCXJldHVybiBjbGVhbl9tZXJnZTsKK30KKworc3RhdGljIGludCBtZXJnZV90cmVlc19pbnRlcm5hbChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJCXN0cnVjdCB0cmVlICpoZWFkLAorCQkJCXN0cnVjdCB0cmVlICptZXJnZSwKKwkJCQlzdHJ1Y3QgdHJlZSAqbWVyZ2VfYmFzZSwKKwkJCQlzdHJ1Y3QgdHJlZSAqKnJlc3VsdCkKK3sKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSA9IG9wdC0+cmVwby0+aW5kZXg7CisJaW50IGNvZGUsIGNsZWFuOworCisJaWYgKG9wdC0+c3VidHJlZV9zaGlmdCkgeworCQltZXJnZSA9IHNoaWZ0X3RyZWVfb2JqZWN0KG9wdC0+cmVwbywgaGVhZCwgbWVyZ2UsCisJCQkJCSAgb3B0LT5zdWJ0cmVlX3NoaWZ0KTsKKwkJbWVyZ2VfYmFzZSA9IHNoaWZ0X3RyZWVfb2JqZWN0KG9wdC0+cmVwbywgaGVhZCwgbWVyZ2VfYmFzZSwKKwkJCQkJICAgICAgIG9wdC0+c3VidHJlZV9zaGlmdCk7CisJfQorCisJaWYgKG9pZGVxKCZtZXJnZV9iYXNlLT5vYmplY3Qub2lkLCAmbWVyZ2UtPm9iamVjdC5vaWQpKSB7CisJCW91dHB1dChvcHQsIDAsIF8oIkFscmVhZHkgdXAgdG8gZGF0ZSEiKSk7CisJCSpyZXN1bHQgPSBoZWFkOworCQlyZXR1cm4gMTsKKwl9CisKKwljb2RlID0gdW5wYWNrX3RyZWVzX3N0YXJ0KG9wdCwgbWVyZ2VfYmFzZSwgaGVhZCwgbWVyZ2UpOworCisJaWYgKGNvZGUgIT0gMCkgeworCQlpZiAoc2hvdyhvcHQsIDQpIHx8IG9wdC0+cHJpdi0+Y2FsbF9kZXB0aCkKKwkJCWVycihvcHQsIF8oIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIpLAorCQkJICAgIG9pZF90b19oZXgoJmhlYWQtPm9iamVjdC5vaWQpLAorCQkJICAgIG9pZF90b19oZXgoJm1lcmdlLT5vYmplY3Qub2lkKSk7CisJCXVucGFja190cmVlc19maW5pc2gob3B0KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICh1bm1lcmdlZF9pbmRleChpc3RhdGUpKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCAqZW50cmllczsKKwkJc3RydWN0IHJlbmFtZV9pbmZvIHJlX2luZm87CisJCWludCBpOworCQkvKgorCQkgKiBPbmx5IG5lZWQgdGhlIGhhc2htYXAgd2hpbGUgcHJvY2Vzc2luZyBlbnRyaWVzLCBzbworCQkgKiBpbml0aWFsaXplIGl0IGhlcmUgYW5kIGZyZWUgaXQgd2hlbiB3ZSBhcmUgZG9uZSBydW5uaW5nCisJCSAqIHRocm91Z2ggdGhlIGVudHJpZXMuIEtlZXBpbmcgaXQgaW4gdGhlIG1lcmdlX29wdGlvbnMgYXMKKwkJICogb3Bwb3NlZCB0byBkZWNhcmluZyBhIGxvY2FsIGhhc2htYXAgaXMgZm9yIGNvbnZlbmllbmNlCisJCSAqIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIGl0IHRvIGFyb3VuZC4KKwkJICovCisJCWhhc2htYXBfaW5pdCgmb3B0LT5wcml2LT5jdXJyZW50X2ZpbGVfZGlyX3NldCwgcGF0aF9oYXNobWFwX2NtcCwKKwkJCSAgICAgTlVMTCwgNTEyKTsKKwkJZ2V0X2ZpbGVzX2RpcnMob3B0LCBoZWFkKTsKKwkJZ2V0X2ZpbGVzX2RpcnMob3B0LCBtZXJnZSk7CisKKwkJZW50cmllcyA9IGdldF91bm1lcmdlZChvcHQtPnJlcG8tPmluZGV4KTsKKwkJY2xlYW4gPSBkZXRlY3RfYW5kX3Byb2Nlc3NfcmVuYW1lcyhvcHQsIG1lcmdlX2Jhc2UsIGhlYWQsIG1lcmdlLAorCQkJCQkJICAgZW50cmllcywgJnJlX2luZm8pOworCQlyZWNvcmRfZGZfY29uZmxpY3RfZmlsZXMob3B0LCBlbnRyaWVzKTsKKwkJaWYgKGNsZWFuIDwgMCkKKwkJCWdvdG8gY2xlYW51cDsKKwkJZm9yIChpID0gZW50cmllcy0+bnItMTsgMCA8PSBpOyBpLS0pIHsKKwkJCWNvbnN0IGNoYXIgKnBhdGggPSBlbnRyaWVzLT5pdGVtc1tpXS5zdHJpbmc7CisJCQlzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZSA9IGVudHJpZXMtPml0ZW1zW2ldLnV0aWw7CisJCQlpZiAoIWUtPnByb2Nlc3NlZCkgeworCQkJCWludCByZXQgPSBwcm9jZXNzX2VudHJ5KG9wdCwgcGF0aCwgZSk7CisJCQkJaWYgKCFyZXQpCisJCQkJCWNsZWFuID0gMDsKKwkJCQllbHNlIGlmIChyZXQgPCAwKSB7CisJCQkJCWNsZWFuID0gcmV0OworCQkJCQlnb3RvIGNsZWFudXA7CisJCQkJfQorCQkJfQorCQl9CisJCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzLT5ucjsgaSsrKSB7CisJCQlzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZSA9IGVudHJpZXMtPml0ZW1zW2ldLnV0aWw7CisJCQlpZiAoIWUtPnByb2Nlc3NlZCkKKwkJCQlCVUcoInVucHJvY2Vzc2VkIHBhdGg/Pz8gJXMiLAorCQkJCSAgICBlbnRyaWVzLT5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisKKwljbGVhbnVwOgorCQlmaW5hbF9jbGVhbnVwX3JlbmFtZXMoJnJlX2luZm8pOworCisJCXN0cmluZ19saXN0X2NsZWFyKGVudHJpZXMsIDEpOworCQlmcmVlKGVudHJpZXMpOworCisJCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZvcHQtPnByaXYtPmN1cnJlbnRfZmlsZV9kaXJfc2V0LAorCQkJCQlzdHJ1Y3QgcGF0aF9oYXNobWFwX2VudHJ5LCBlKTsKKworCQlpZiAoY2xlYW4gPCAwKSB7CisJCQl1bnBhY2tfdHJlZXNfZmluaXNoKG9wdCk7CisJCQlyZXR1cm4gY2xlYW47CisJCX0KKwl9CisJZWxzZQorCQljbGVhbiA9IDE7CisKKwl1bnBhY2tfdHJlZXNfZmluaXNoKG9wdCk7CisKKwlpZiAob3B0LT5wcml2LT5jYWxsX2RlcHRoICYmCisJICAgICEoKnJlc3VsdCA9IHdyaXRlX2luX2NvcmVfaW5kZXhfYXNfdHJlZShvcHQtPnJlcG8pKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGNsZWFuOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpyZXZlcnNlX2NvbW1pdF9saXN0KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm5leHQgPSBOVUxMLCAqY3VycmVudCwgKmJhY2t1cDsKKwlmb3IgKGN1cnJlbnQgPSBsaXN0OyBjdXJyZW50OyBjdXJyZW50ID0gYmFja3VwKSB7CisJCWJhY2t1cCA9IGN1cnJlbnQtPm5leHQ7CisJCWN1cnJlbnQtPm5leHQgPSBuZXh0OworCQluZXh0ID0gY3VycmVudDsKKwl9CisJcmV0dXJuIG5leHQ7Cit9CisKKy8qCisgKiBNZXJnZSB0aGUgY29tbWl0cyBoMSBhbmQgaDIsIHJldHVybiB0aGUgcmVzdWx0aW5nIHZpcnR1YWwKKyAqIGNvbW1pdCBvYmplY3QgYW5kIGEgZmxhZyBpbmRpY2F0aW5nIHRoZSBjbGVhbm5lc3Mgb2YgdGhlIG1lcmdlLgorICovCitzdGF0aWMgaW50IG1lcmdlX3JlY3Vyc2l2ZV9pbnRlcm5hbChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJCSAgICBzdHJ1Y3QgY29tbWl0ICpoMSwKKwkJCQkgICAgc3RydWN0IGNvbW1pdCAqaDIsCisJCQkJICAgIHN0cnVjdCBjb21taXRfbGlzdCAqbWVyZ2VfYmFzZXMsCisJCQkJICAgIHN0cnVjdCBjb21taXQgKipyZXN1bHQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICppdGVyOworCXN0cnVjdCBjb21taXQgKm1lcmdlZF9tZXJnZV9iYXNlczsKKwlzdHJ1Y3QgdHJlZSAqcmVzdWx0X3RyZWU7CisJaW50IGNsZWFuOworCWNvbnN0IGNoYXIgKmFuY2VzdG9yX25hbWU7CisJc3RydWN0IHN0cmJ1ZiBtZXJnZV9iYXNlX2FiYnJldiA9IFNUUkJVRl9JTklUOworCisJaWYgKHNob3cob3B0LCA0KSkgeworCQlvdXRwdXQob3B0LCA0LCBfKCJNZXJnaW5nOiIpKTsKKwkJb3V0cHV0X2NvbW1pdF90aXRsZShvcHQsIGgxKTsKKwkJb3V0cHV0X2NvbW1pdF90aXRsZShvcHQsIGgyKTsKKwl9CisKKwlpZiAoIW1lcmdlX2Jhc2VzKSB7CisJCW1lcmdlX2Jhc2VzID0gZ2V0X21lcmdlX2Jhc2VzKGgxLCBoMik7CisJCW1lcmdlX2Jhc2VzID0gcmV2ZXJzZV9jb21taXRfbGlzdChtZXJnZV9iYXNlcyk7CisJfQorCisJaWYgKHNob3cob3B0LCA1KSkgeworCQl1bnNpZ25lZCBjbnQgPSBjb21taXRfbGlzdF9jb3VudChtZXJnZV9iYXNlcyk7CisKKwkJb3V0cHV0KG9wdCwgNSwgUV8oImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiLAorCQkJCSJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIsIGNudCksIGNudCk7CisJCWZvciAoaXRlciA9IG1lcmdlX2Jhc2VzOyBpdGVyOyBpdGVyID0gaXRlci0+bmV4dCkKKwkJCW91dHB1dF9jb21taXRfdGl0bGUob3B0LCBpdGVyLT5pdGVtKTsKKwl9CisKKwltZXJnZWRfbWVyZ2VfYmFzZXMgPSBwb3BfY29tbWl0KCZtZXJnZV9iYXNlcyk7CisJaWYgKG1lcmdlZF9tZXJnZV9iYXNlcyA9PSBOVUxMKSB7CisJCS8qIGlmIHRoZXJlIGlzIG5vIGNvbW1vbiBhbmNlc3RvciwgdXNlIGFuIGVtcHR5IHRyZWUgKi8KKwkJc3RydWN0IHRyZWUgKnRyZWU7CisKKwkJdHJlZSA9IGxvb2t1cF90cmVlKG9wdC0+cmVwbywgb3B0LT5yZXBvLT5oYXNoX2FsZ28tPmVtcHR5X3RyZWUpOworCQltZXJnZWRfbWVyZ2VfYmFzZXMgPSBtYWtlX3ZpcnR1YWxfY29tbWl0KG9wdC0+cmVwbywgdHJlZSwKKwkJCQkJCQkgImFuY2VzdG9yIik7CisJCWFuY2VzdG9yX25hbWUgPSAiZW1wdHkgdHJlZSI7CisJfSBlbHNlIGlmIChvcHQtPmFuY2VzdG9yICYmICFvcHQtPnByaXYtPmNhbGxfZGVwdGgpIHsKKwkJYW5jZXN0b3JfbmFtZSA9IG9wdC0+YW5jZXN0b3I7CisJfSBlbHNlIGlmIChtZXJnZV9iYXNlcykgeworCQlhbmNlc3Rvcl9uYW1lID0gIm1lcmdlZCBjb21tb24gYW5jZXN0b3JzIjsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJm1lcmdlX2Jhc2VfYWJicmV2LAorCQkJCQkgJm1lcmdlZF9tZXJnZV9iYXNlcy0+b2JqZWN0Lm9pZCwKKwkJCQkJIERFRkFVTFRfQUJCUkVWKTsKKwkJYW5jZXN0b3JfbmFtZSA9IG1lcmdlX2Jhc2VfYWJicmV2LmJ1ZjsKKwl9CisKKwlmb3IgKGl0ZXIgPSBtZXJnZV9iYXNlczsgaXRlcjsgaXRlciA9IGl0ZXItPm5leHQpIHsKKwkJY29uc3QgY2hhciAqc2F2ZWRfYjEsICpzYXZlZF9iMjsKKwkJb3B0LT5wcml2LT5jYWxsX2RlcHRoKys7CisJCS8qCisJCSAqIFdoZW4gdGhlIG1lcmdlIGZhaWxzLCB0aGUgcmVzdWx0IGNvbnRhaW5zIGZpbGVzCisJCSAqIHdpdGggY29uZmxpY3QgbWFya2Vycy4gVGhlIGNsZWFubmVzcyBmbGFnIGlzCisJCSAqIGlnbm9yZWQgKHVubGVzcyBpbmRpY2F0aW5nIGFuIGVycm9yKSwgaXQgd2FzIG5ldmVyCisJCSAqIGFjdHVhbGx5IHVzZWQsIGFzIHJlc3VsdCBvZiBtZXJnZV90cmVlcyBoYXMgYWx3YXlzCisJCSAqIG92ZXJ3cml0dGVuIGl0OiB0aGUgY29tbWl0dGVkICJjb25mbGljdHMiIHdlcmUKKwkJICogYWxyZWFkeSByZXNvbHZlZC4KKwkJICovCisJCWRpc2NhcmRfaW5kZXgob3B0LT5yZXBvLT5pbmRleCk7CisJCXNhdmVkX2IxID0gb3B0LT5icmFuY2gxOworCQlzYXZlZF9iMiA9IG9wdC0+YnJhbmNoMjsKKwkJb3B0LT5icmFuY2gxID0gIlRlbXBvcmFyeSBtZXJnZSBicmFuY2ggMSI7CisJCW9wdC0+YnJhbmNoMiA9ICJUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDIiOworCQlpZiAobWVyZ2VfcmVjdXJzaXZlX2ludGVybmFsKG9wdCwgbWVyZ2VkX21lcmdlX2Jhc2VzLCBpdGVyLT5pdGVtLAorCQkJCQkgICAgIE5VTEwsICZtZXJnZWRfbWVyZ2VfYmFzZXMpIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJb3B0LT5icmFuY2gxID0gc2F2ZWRfYjE7CisJCW9wdC0+YnJhbmNoMiA9IHNhdmVkX2IyOworCQlvcHQtPnByaXYtPmNhbGxfZGVwdGgtLTsKKworCQlpZiAoIW1lcmdlZF9tZXJnZV9iYXNlcykKKwkJCXJldHVybiBlcnIob3B0LCBfKCJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiKSk7CisJfQorCisJZGlzY2FyZF9pbmRleChvcHQtPnJlcG8tPmluZGV4KTsKKwlpZiAoIW9wdC0+cHJpdi0+Y2FsbF9kZXB0aCkKKwkJcmVwb19yZWFkX2luZGV4KG9wdC0+cmVwbyk7CisKKwlvcHQtPmFuY2VzdG9yID0gYW5jZXN0b3JfbmFtZTsKKwljbGVhbiA9IG1lcmdlX3RyZWVzX2ludGVybmFsKG9wdCwKKwkJCQkgICAgIHJlcG9fZ2V0X2NvbW1pdF90cmVlKG9wdC0+cmVwbywgaDEpLAorCQkJCSAgICAgcmVwb19nZXRfY29tbWl0X3RyZWUob3B0LT5yZXBvLCBoMiksCisJCQkJICAgICByZXBvX2dldF9jb21taXRfdHJlZShvcHQtPnJlcG8sCisJCQkJCQkJICBtZXJnZWRfbWVyZ2VfYmFzZXMpLAorCQkJCSAgICAgJnJlc3VsdF90cmVlKTsKKwlzdHJidWZfcmVsZWFzZSgmbWVyZ2VfYmFzZV9hYmJyZXYpOworCW9wdC0+YW5jZXN0b3IgPSBOVUxMOyAgLyogYXZvaWQgYWNjaWRlbnRhbCByZS11c2Ugb2Ygb3B0LT5hbmNlc3RvciAqLworCWlmIChjbGVhbiA8IDApIHsKKwkJZmx1c2hfb3V0cHV0KG9wdCk7CisJCXJldHVybiBjbGVhbjsKKwl9CisKKwlpZiAob3B0LT5wcml2LT5jYWxsX2RlcHRoKSB7CisJCSpyZXN1bHQgPSBtYWtlX3ZpcnR1YWxfY29tbWl0KG9wdC0+cmVwbywgcmVzdWx0X3RyZWUsCisJCQkJCSAgICAgICJtZXJnZWQgdHJlZSIpOworCQljb21taXRfbGlzdF9pbnNlcnQoaDEsICYoKnJlc3VsdCktPnBhcmVudHMpOworCQljb21taXRfbGlzdF9pbnNlcnQoaDIsICYoKnJlc3VsdCktPnBhcmVudHMtPm5leHQpOworCX0KKwlyZXR1cm4gY2xlYW47Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2Vfc3RhcnQoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwgc3RydWN0IHRyZWUgKmhlYWQpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJLyogU2FuaXR5IGNoZWNrcyBvbiBvcHQgKi8KKwlhc3NlcnQob3B0LT5yZXBvKTsKKworCWFzc2VydChvcHQtPmJyYW5jaDEgJiYgb3B0LT5icmFuY2gyKTsKKworCWFzc2VydChvcHQtPmRldGVjdF9yZW5hbWVzID49IC0xICYmCisJICAgICAgIG9wdC0+ZGV0ZWN0X3JlbmFtZXMgPD0gRElGRl9ERVRFQ1RfQ09QWSk7CisJYXNzZXJ0KG9wdC0+ZGV0ZWN0X2RpcmVjdG9yeV9yZW5hbWVzID49IE1FUkdFX0RJUkVDVE9SWV9SRU5BTUVTX05PTkUgJiYKKwkgICAgICAgb3B0LT5kZXRlY3RfZGlyZWN0b3J5X3JlbmFtZXMgPD0gTUVSR0VfRElSRUNUT1JZX1JFTkFNRVNfVFJVRSk7CisJYXNzZXJ0KG9wdC0+cmVuYW1lX2xpbWl0ID49IC0xKTsKKwlhc3NlcnQob3B0LT5yZW5hbWVfc2NvcmUgPj0gMCAmJiBvcHQtPnJlbmFtZV9zY29yZSA8PSBNQVhfU0NPUkUpOworCWFzc2VydChvcHQtPnNob3dfcmVuYW1lX3Byb2dyZXNzID49IDAgJiYgb3B0LT5zaG93X3JlbmFtZV9wcm9ncmVzcyA8PSAxKTsKKworCWFzc2VydChvcHQtPnhkbF9vcHRzID49IDApOworCWFzc2VydChvcHQtPnJlY3Vyc2l2ZV92YXJpYW50ID49IE1FUkdFX1ZBUklBTlRfTk9STUFMICYmCisJICAgICAgIG9wdC0+cmVjdXJzaXZlX3ZhcmlhbnQgPD0gTUVSR0VfVkFSSUFOVF9USEVJUlMpOworCisJYXNzZXJ0KG9wdC0+dmVyYm9zaXR5ID49IDAgJiYgb3B0LT52ZXJib3NpdHkgPD0gNSk7CisJYXNzZXJ0KG9wdC0+YnVmZmVyX291dHB1dCA8PSAyKTsKKwlhc3NlcnQob3B0LT5vYnVmLmxlbiA9PSAwKTsKKworCWFzc2VydChvcHQtPnByaXYgPT0gTlVMTCk7CisKKwkvKiBTYW5pdHkgY2hlY2sgb24gcmVwbyBzdGF0ZTsgaW5kZXggbXVzdCBtYXRjaCBoZWFkICovCisJaWYgKHJlcG9faW5kZXhfaGFzX2NoYW5nZXMob3B0LT5yZXBvLCBoZWFkLCAmc2IpKSB7CisJCWVycihvcHQsIF8oIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuICAlcyIpLAorCQkgICAgc2IuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW9wdC0+cHJpdiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpvcHQtPnByaXYpKTsKKwlzdHJpbmdfbGlzdF9pbml0KCZvcHQtPnByaXYtPmRmX2NvbmZsaWN0X2ZpbGVfc2V0LCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWVyZ2VfZmluYWxpemUoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCkKK3sKKwlmbHVzaF9vdXRwdXQob3B0KTsKKwlpZiAoIW9wdC0+cHJpdi0+Y2FsbF9kZXB0aCAmJiBvcHQtPmJ1ZmZlcl9vdXRwdXQgPCAyKQorCQlzdHJidWZfcmVsZWFzZSgmb3B0LT5vYnVmKTsKKwlpZiAoc2hvdyhvcHQsIDIpKQorCQlkaWZmX3dhcm5fcmVuYW1lX2xpbWl0KCJtZXJnZS5yZW5hbWVsaW1pdCIsCisJCQkJICAgICAgIG9wdC0+cHJpdi0+bmVlZGVkX3JlbmFtZV9saW1pdCwgMCk7CisJRlJFRV9BTkRfTlVMTChvcHQtPnByaXYpOworfQorCitpbnQgbWVyZ2VfdHJlZXMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJc3RydWN0IHRyZWUgKmhlYWQsCisJCXN0cnVjdCB0cmVlICptZXJnZSwKKwkJc3RydWN0IHRyZWUgKm1lcmdlX2Jhc2UpCit7CisJaW50IGNsZWFuOworCXN0cnVjdCB0cmVlICppZ25vcmVkOworCisJYXNzZXJ0KG9wdC0+YW5jZXN0b3IgIT0gTlVMTCk7CisKKwlpZiAobWVyZ2Vfc3RhcnQob3B0LCBoZWFkKSkKKwkJcmV0dXJuIC0xOworCWNsZWFuID0gbWVyZ2VfdHJlZXNfaW50ZXJuYWwob3B0LCBoZWFkLCBtZXJnZSwgbWVyZ2VfYmFzZSwgJmlnbm9yZWQpOworCW1lcmdlX2ZpbmFsaXplKG9wdCk7CisKKwlyZXR1cm4gY2xlYW47Cit9CisKK2ludCBtZXJnZV9yZWN1cnNpdmUoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJICAgIHN0cnVjdCBjb21taXQgKmgxLAorCQkgICAgc3RydWN0IGNvbW1pdCAqaDIsCisJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKm1lcmdlX2Jhc2VzLAorCQkgICAgc3RydWN0IGNvbW1pdCAqKnJlc3VsdCkKK3sKKwlpbnQgY2xlYW47CisKKwlhc3NlcnQob3B0LT5hbmNlc3RvciA9PSBOVUxMIHx8CisJICAgICAgICFzdHJjbXAob3B0LT5hbmNlc3RvciwgImNvbnN0cnVjdGVkIG1lcmdlIGJhc2UiKSk7CisKKwlpZiAobWVyZ2Vfc3RhcnQob3B0LCByZXBvX2dldF9jb21taXRfdHJlZShvcHQtPnJlcG8sIGgxKSkpCisJCXJldHVybiAtMTsKKwljbGVhbiA9IG1lcmdlX3JlY3Vyc2l2ZV9pbnRlcm5hbChvcHQsIGgxLCBoMiwgbWVyZ2VfYmFzZXMsIHJlc3VsdCk7CisJbWVyZ2VfZmluYWxpemUob3B0KTsKKworCXJldHVybiBjbGVhbjsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9yZWYoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKworCW9iamVjdCA9IGRlcmVmX3RhZyhyZXBvLCBwYXJzZV9vYmplY3QocmVwbywgb2lkKSwKKwkJCSAgIG5hbWUsIHN0cmxlbihuYW1lKSk7CisJaWYgKCFvYmplY3QpCisJCXJldHVybiBOVUxMOworCWlmIChvYmplY3QtPnR5cGUgPT0gT0JKX1RSRUUpCisJCXJldHVybiBtYWtlX3ZpcnR1YWxfY29tbWl0KHJlcG8sIChzdHJ1Y3QgdHJlZSopb2JqZWN0LCBuYW1lKTsKKwlpZiAob2JqZWN0LT50eXBlICE9IE9CSl9DT01NSVQpCisJCXJldHVybiBOVUxMOworCWlmIChwYXJzZV9jb21taXQoKHN0cnVjdCBjb21taXQgKilvYmplY3QpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gKHN0cnVjdCBjb21taXQgKilvYmplY3Q7Cit9CisKK2ludCBtZXJnZV9yZWN1cnNpdmVfZ2VuZXJpYyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmhlYWQsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbWVyZ2UsCisJCQkgICAgaW50IG51bV9tZXJnZV9iYXNlcywKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICoqbWVyZ2VfYmFzZXMsCisJCQkgICAgc3RydWN0IGNvbW1pdCAqKnJlc3VsdCkKK3sKKwlpbnQgY2xlYW47CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrID0gTE9DS19JTklUOworCXN0cnVjdCBjb21taXQgKmhlYWRfY29tbWl0ID0gZ2V0X3JlZihvcHQtPnJlcG8sIGhlYWQsIG9wdC0+YnJhbmNoMSk7CisJc3RydWN0IGNvbW1pdCAqbmV4dF9jb21taXQgPSBnZXRfcmVmKG9wdC0+cmVwbywgbWVyZ2UsIG9wdC0+YnJhbmNoMik7CisJc3RydWN0IGNvbW1pdF9saXN0ICpjYSA9IE5VTEw7CisKKwlpZiAobWVyZ2VfYmFzZXMpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fbWVyZ2VfYmFzZXM7ICsraSkgeworCQkJc3RydWN0IGNvbW1pdCAqYmFzZTsKKwkJCWlmICghKGJhc2UgPSBnZXRfcmVmKG9wdC0+cmVwbywgbWVyZ2VfYmFzZXNbaV0sCisJCQkJCSAgICAgb2lkX3RvX2hleChtZXJnZV9iYXNlc1tpXSkpKSkKKwkJCQlyZXR1cm4gZXJyKG9wdCwgXygiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIiksCisJCQkJCSAgIG9pZF90b19oZXgobWVyZ2VfYmFzZXNbaV0pKTsKKwkJCWNvbW1pdF9saXN0X2luc2VydChiYXNlLCAmY2EpOworCQl9CisJCWlmIChudW1fbWVyZ2VfYmFzZXMgPT0gMSkKKwkJCW9wdC0+YW5jZXN0b3IgPSAiY29uc3RydWN0ZWQgbWVyZ2UgYmFzZSI7CisJfQorCisJcmVwb19ob2xkX2xvY2tlZF9pbmRleChvcHQtPnJlcG8sICZsb2NrLCBMT0NLX0RJRV9PTl9FUlJPUik7CisJY2xlYW4gPSBtZXJnZV9yZWN1cnNpdmUob3B0LCBoZWFkX2NvbW1pdCwgbmV4dF9jb21taXQsIGNhLAorCQkJCXJlc3VsdCk7CisJaWYgKGNsZWFuIDwgMCkgeworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCQlyZXR1cm4gY2xlYW47CisJfQorCisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleChvcHQtPnJlcG8tPmluZGV4LCAmbG9jaywKKwkJCSAgICAgICBDT01NSVRfTE9DSyB8IFNLSVBfSUZfVU5DSEFOR0VEKSkKKwkJcmV0dXJuIGVycihvcHQsIF8oIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iKSk7CisKKwlyZXR1cm4gY2xlYW4gPyAwIDogMTsKK30KKworc3RhdGljIHZvaWQgbWVyZ2VfcmVjdXJzaXZlX2NvbmZpZyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0KQoreworCWNoYXIgKnZhbHVlID0gTlVMTDsKKwlnaXRfY29uZmlnX2dldF9pbnQoIm1lcmdlLnZlcmJvc2l0eSIsICZvcHQtPnZlcmJvc2l0eSk7CisJZ2l0X2NvbmZpZ19nZXRfaW50KCJkaWZmLnJlbmFtZWxpbWl0IiwgJm9wdC0+cmVuYW1lX2xpbWl0KTsKKwlnaXRfY29uZmlnX2dldF9pbnQoIm1lcmdlLnJlbmFtZWxpbWl0IiwgJm9wdC0+cmVuYW1lX2xpbWl0KTsKKwlpZiAoIWdpdF9jb25maWdfZ2V0X3N0cmluZygiZGlmZi5yZW5hbWVzIiwgJnZhbHVlKSkgeworCQlvcHQtPmRldGVjdF9yZW5hbWVzID0gZ2l0X2NvbmZpZ19yZW5hbWUoImRpZmYucmVuYW1lcyIsIHZhbHVlKTsKKwkJZnJlZSh2YWx1ZSk7CisJfQorCWlmICghZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJtZXJnZS5yZW5hbWVzIiwgJnZhbHVlKSkgeworCQlvcHQtPmRldGVjdF9yZW5hbWVzID0gZ2l0X2NvbmZpZ19yZW5hbWUoIm1lcmdlLnJlbmFtZXMiLCB2YWx1ZSk7CisJCWZyZWUodmFsdWUpOworCX0KKwlpZiAoIWdpdF9jb25maWdfZ2V0X3N0cmluZygibWVyZ2UuZGlyZWN0b3J5cmVuYW1lcyIsICZ2YWx1ZSkpIHsKKwkJaW50IGJvb2x2YWwgPSBnaXRfcGFyc2VfbWF5YmVfYm9vbCh2YWx1ZSk7CisJCWlmICgwIDw9IGJvb2x2YWwpIHsKKwkJCW9wdC0+ZGV0ZWN0X2RpcmVjdG9yeV9yZW5hbWVzID0gYm9vbHZhbCA/CisJCQkJTUVSR0VfRElSRUNUT1JZX1JFTkFNRVNfVFJVRSA6CisJCQkJTUVSR0VfRElSRUNUT1JZX1JFTkFNRVNfTk9ORTsKKwkJfSBlbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImNvbmZsaWN0IikpIHsKKwkJCW9wdC0+ZGV0ZWN0X2RpcmVjdG9yeV9yZW5hbWVzID0KKwkJCQlNRVJHRV9ESVJFQ1RPUllfUkVOQU1FU19DT05GTElDVDsKKwkJfSAvKiBhdm9pZCBlcnJvcmluZyBvbiB2YWx1ZXMgZnJvbSBmdXR1cmUgdmVyc2lvbnMgb2YgZ2l0ICovCisJCWZyZWUodmFsdWUpOworCX0KKwlnaXRfY29uZmlnKGdpdF94bWVyZ2VfY29uZmlnLCBOVUxMKTsKK30KKwordm9pZCBpbml0X21lcmdlX29wdGlvbnMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCXN0cnVjdCByZXBvc2l0b3J5ICpyZXBvKQoreworCWNvbnN0IGNoYXIgKm1lcmdlX3ZlcmJvc2l0eTsKKwltZW1zZXQob3B0LCAwLCBzaXplb2Yoc3RydWN0IG1lcmdlX29wdGlvbnMpKTsKKworCW9wdC0+cmVwbyA9IHJlcG87CisKKwlvcHQtPmRldGVjdF9yZW5hbWVzID0gLTE7CisJb3B0LT5kZXRlY3RfZGlyZWN0b3J5X3JlbmFtZXMgPSBNRVJHRV9ESVJFQ1RPUllfUkVOQU1FU19DT05GTElDVDsKKwlvcHQtPnJlbmFtZV9saW1pdCA9IC0xOworCisJb3B0LT52ZXJib3NpdHkgPSAyOworCW9wdC0+YnVmZmVyX291dHB1dCA9IDE7CisJc3RyYnVmX2luaXQoJm9wdC0+b2J1ZiwgMCk7CisKKwlvcHQtPnJlbm9ybWFsaXplID0gMDsKKworCW1lcmdlX3JlY3Vyc2l2ZV9jb25maWcob3B0KTsKKwltZXJnZV92ZXJib3NpdHkgPSBnZXRlbnYoIkdJVF9NRVJHRV9WRVJCT1NJVFkiKTsKKwlpZiAobWVyZ2VfdmVyYm9zaXR5KQorCQlvcHQtPnZlcmJvc2l0eSA9IHN0cnRvbChtZXJnZV92ZXJib3NpdHksIE5VTEwsIDEwKTsKKwlpZiAob3B0LT52ZXJib3NpdHkgPj0gNSkKKwkJb3B0LT5idWZmZXJfb3V0cHV0ID0gMDsKK30KKworaW50IHBhcnNlX21lcmdlX29wdChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LCBjb25zdCBjaGFyICpzKQoreworCWNvbnN0IGNoYXIgKmFyZzsKKworCWlmICghcyB8fCAhKnMpCisJCXJldHVybiAtMTsKKwlpZiAoIXN0cmNtcChzLCAib3VycyIpKQorCQlvcHQtPnJlY3Vyc2l2ZV92YXJpYW50ID0gTUVSR0VfVkFSSUFOVF9PVVJTOworCWVsc2UgaWYgKCFzdHJjbXAocywgInRoZWlycyIpKQorCQlvcHQtPnJlY3Vyc2l2ZV92YXJpYW50ID0gTUVSR0VfVkFSSUFOVF9USEVJUlM7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAic3VidHJlZSIpKQorCQlvcHQtPnN1YnRyZWVfc2hpZnQgPSAiIjsKKwllbHNlIGlmIChza2lwX3ByZWZpeChzLCAic3VidHJlZT0iLCAmYXJnKSkKKwkJb3B0LT5zdWJ0cmVlX3NoaWZ0ID0gYXJnOworCWVsc2UgaWYgKCFzdHJjbXAocywgInBhdGllbmNlIikpCisJCW9wdC0+eGRsX29wdHMgPSBESUZGX1dJVEhfQUxHKG9wdCwgUEFUSUVOQ0VfRElGRik7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAiaGlzdG9ncmFtIikpCisJCW9wdC0+eGRsX29wdHMgPSBESUZGX1dJVEhfQUxHKG9wdCwgSElTVE9HUkFNX0RJRkYpOworCWVsc2UgaWYgKHNraXBfcHJlZml4KHMsICJkaWZmLWFsZ29yaXRobT0iLCAmYXJnKSkgeworCQlsb25nIHZhbHVlID0gcGFyc2VfYWxnb3JpdGhtX3ZhbHVlKGFyZyk7CisJCWlmICh2YWx1ZSA8IDApCisJCQlyZXR1cm4gLTE7CisJCS8qIGNsZWFyIG91dCBwcmV2aW91cyBzZXR0aW5ncyAqLworCQlESUZGX1hETF9DTFIob3B0LCBORUVEX01JTklNQUwpOworCQlvcHQtPnhkbF9vcHRzICY9IH5YREZfRElGRl9BTEdPUklUSE1fTUFTSzsKKwkJb3B0LT54ZGxfb3B0cyB8PSB2YWx1ZTsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChzLCAiaWdub3JlLXNwYWNlLWNoYW5nZSIpKQorCQlESUZGX1hETF9TRVQob3B0LCBJR05PUkVfV0hJVEVTUEFDRV9DSEFOR0UpOworCWVsc2UgaWYgKCFzdHJjbXAocywgImlnbm9yZS1hbGwtc3BhY2UiKSkKKwkJRElGRl9YRExfU0VUKG9wdCwgSUdOT1JFX1dISVRFU1BBQ0UpOworCWVsc2UgaWYgKCFzdHJjbXAocywgImlnbm9yZS1zcGFjZS1hdC1lb2wiKSkKKwkJRElGRl9YRExfU0VUKG9wdCwgSUdOT1JFX1dISVRFU1BBQ0VfQVRfRU9MKTsKKwllbHNlIGlmICghc3RyY21wKHMsICJpZ25vcmUtY3ItYXQtZW9sIikpCisJCURJRkZfWERMX1NFVChvcHQsIElHTk9SRV9DUl9BVF9FT0wpOworCWVsc2UgaWYgKCFzdHJjbXAocywgInJlbm9ybWFsaXplIikpCisJCW9wdC0+cmVub3JtYWxpemUgPSAxOworCWVsc2UgaWYgKCFzdHJjbXAocywgIm5vLXJlbm9ybWFsaXplIikpCisJCW9wdC0+cmVub3JtYWxpemUgPSAwOworCWVsc2UgaWYgKCFzdHJjbXAocywgIm5vLXJlbmFtZXMiKSkKKwkJb3B0LT5kZXRlY3RfcmVuYW1lcyA9IDA7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAiZmluZC1yZW5hbWVzIikpIHsKKwkJb3B0LT5kZXRlY3RfcmVuYW1lcyA9IDE7CisJCW9wdC0+cmVuYW1lX3Njb3JlID0gMDsKKwl9CisJZWxzZSBpZiAoc2tpcF9wcmVmaXgocywgImZpbmQtcmVuYW1lcz0iLCAmYXJnKSB8fAorCQkgc2tpcF9wcmVmaXgocywgInJlbmFtZS10aHJlc2hvbGQ9IiwgJmFyZykpIHsKKwkJaWYgKChvcHQtPnJlbmFtZV9zY29yZSA9IHBhcnNlX3JlbmFtZV9zY29yZSgmYXJnKSkgPT0gLTEgfHwgKmFyZyAhPSAwKQorCQkJcmV0dXJuIC0xOworCQlvcHQtPmRldGVjdF9yZW5hbWVzID0gMTsKKwl9CisJLyoKKwkgKiBQbGVhc2UgdXBkYXRlICRfX2dpdF9tZXJnZV9zdHJhdGVneV9vcHRpb25zIGluCisJICogZ2l0LWNvbXBsZXRpb24uYmFzaCB3aGVuIHlvdSBhZGQgbmV3IG9wdGlvbnMKKwkgKi8KKwllbHNlCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL21lcmdlLXJlY3Vyc2l2ZS5oIGIvbWVyZ2UtcmVjdXJzaXZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4ODQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL21lcmdlLXJlY3Vyc2l2ZS5oCkBAIC0wLDAgKzEsMTI0IEBACisjaWZuZGVmIE1FUkdFX1JFQ1VSU0lWRV9ICisjZGVmaW5lIE1FUkdFX1JFQ1VSU0lWRV9ICisKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RydWN0IGNvbW1pdDsKK3N0cnVjdCBjb21taXRfbGlzdDsKK3N0cnVjdCBvYmplY3RfaWQ7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKK3N0cnVjdCB0cmVlOworCitzdHJ1Y3QgbWVyZ2Vfb3B0aW9uc19pbnRlcm5hbDsKK3N0cnVjdCBtZXJnZV9vcHRpb25zIHsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKworCS8qIHJlZiBuYW1lcyB1c2VkIGluIGNvbnNvbGUgbWVzc2FnZXMgYW5kIGNvbmZsaWN0IG1hcmtlcnMgKi8KKwljb25zdCBjaGFyICphbmNlc3RvcjsKKwljb25zdCBjaGFyICpicmFuY2gxOworCWNvbnN0IGNoYXIgKmJyYW5jaDI7CisKKwkvKiByZW5hbWUgcmVsYXRlZCBvcHRpb25zICovCisJaW50IGRldGVjdF9yZW5hbWVzOworCWVudW0geworCQlNRVJHRV9ESVJFQ1RPUllfUkVOQU1FU19OT05FID0gMCwKKwkJTUVSR0VfRElSRUNUT1JZX1JFTkFNRVNfQ09ORkxJQ1QgPSAxLAorCQlNRVJHRV9ESVJFQ1RPUllfUkVOQU1FU19UUlVFID0gMgorCX0gZGV0ZWN0X2RpcmVjdG9yeV9yZW5hbWVzOworCWludCByZW5hbWVfbGltaXQ7CisJaW50IHJlbmFtZV9zY29yZTsKKwlpbnQgc2hvd19yZW5hbWVfcHJvZ3Jlc3M7CisKKwkvKiB4ZGlmZi1yZWxhdGVkIG9wdGlvbnMgKHBhdGllbmNlLCBpZ25vcmUgd2hpdGVzcGFjZSwgb3Vycy90aGVpcnMpICovCisJbG9uZyB4ZGxfb3B0czsKKwllbnVtIHsKKwkJTUVSR0VfVkFSSUFOVF9OT1JNQUwgPSAwLAorCQlNRVJHRV9WQVJJQU5UX09VUlMsCisJCU1FUkdFX1ZBUklBTlRfVEhFSVJTCisJfSByZWN1cnNpdmVfdmFyaWFudDsKKworCS8qIGNvbnNvbGUgb3V0cHV0IHJlbGF0ZWQgb3B0aW9ucyAqLworCWludCB2ZXJib3NpdHk7CisJdW5zaWduZWQgYnVmZmVyX291dHB1dDsgLyogMTogb3V0cHV0IGF0IGVuZCwgMjoga2VlcCBidWZmZXJlZCAqLworCXN0cnVjdCBzdHJidWYgb2J1ZjsgICAgIC8qIG91dHB1dCBidWZmZXI7IGlmIGJ1ZmZlcl9vdXRwdXQgPT0gMiwgY2FsbGVyCisJCQkJICogbXVzdCBoYW5kbGUgYW5kIGNhbGwgc3RyYnVmX3JlbGVhc2UgKi8KKworCS8qIG1pc2NlbGxhbmVvdXMgY29udHJvbCBvcHRpb25zICovCisJY29uc3QgY2hhciAqc3VidHJlZV9zaGlmdDsKKwl1bnNpZ25lZCByZW5vcm1hbGl6ZSA6IDE7CisKKwkvKiBpbnRlcm5hbCBmaWVsZHMgdXNlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gKi8KKwlzdHJ1Y3QgbWVyZ2Vfb3B0aW9uc19pbnRlcm5hbCAqcHJpdjsKK307CisKK3ZvaWQgaW5pdF9tZXJnZV9vcHRpb25zKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsIHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvKTsKKworLyogcGFyc2UgdGhlIG9wdGlvbiBpbiBzIGFuZCB1cGRhdGUgdGhlIHJlbGV2YW50IGZpZWxkIG9mIG9wdCAqLworaW50IHBhcnNlX21lcmdlX29wdChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LCBjb25zdCBjaGFyICpzKTsKKworLyoKKyAqIFJFVFVSTiBWQUxVRVM6IEFsbCB0aGUgbWVyZ2VfKiBmdW5jdGlvbnMgYmVsb3cgcmV0dXJuIGEgdmFsdWUgYXMgZm9sbG93czoKKyAqICAgPiAwICAgICBNZXJnZSB3YXMgY2xlYW4KKyAqICAgPSAwICAgICBNZXJnZSBoYWQgY29uZmxpY3RzCisgKiAgIDwgMCAgICAgTWVyZ2UgaGl0IGFuIHVuZXhwZWN0ZWQgYW5kIHVucmVjb3ZlcmFibGUgcHJvYmxlbSAoZS5nLiBkaXNrCisgKiAgICAgICAgICAgICBmdWxsKSBhbmQgYWJvcnRlZCBtZXJnZSBwYXJ0LXdheSB0aHJvdWdoLgorICovCisKKy8qCisgKiByZW5hbWUtZGV0ZWN0aW5nIHRocmVlLXdheSBtZXJnZSwgbm8gcmVjdXJzaW9uLgorICoKKyAqIE91dHB1dHM6CisgKiAgIC0gU2VlIFJFVFVSTiBWQUxVRVMgYWJvdmUKKyAqICAgLSBObyBjb21taXQgaXMgY3JlYXRlZAorICogICAtIG9wdC0+cmVwby0+aW5kZXggaGFzIHRoZSBuZXcgaW5kZXgKKyAqICAgLSAkR0lUX0lOREVYX0ZJTEUgaXMgbm90IHVwZGF0ZWQKKyAqICAgLSBUaGUgd29ya2luZyB0cmVlIGlzIHVwZGF0ZWQgd2l0aCByZXN1bHRzIG9mIHRoZSBtZXJnZQorICovCitpbnQgbWVyZ2VfdHJlZXMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJc3RydWN0IHRyZWUgKmhlYWQsCisJCXN0cnVjdCB0cmVlICptZXJnZSwKKwkJc3RydWN0IHRyZWUgKm1lcmdlX2Jhc2UpOworCisvKgorICogbWVyZ2VfcmVjdXJzaXZlIGlzIGxpa2UgbWVyZ2VfdHJlZXMoKSBidXQgd2l0aCByZWN1cnNpdmUgYW5jZXN0b3IKKyAqIGNvbnNvbGlkYXRpb24gYW5kLCBpZiB0aGUgY29tbWl0IGlzIGNsZWFuLCBjcmVhdGlvbiBvZiBhIGNvbW1pdC4KKyAqCisgKiBOT1RFOiBlbXBpcmljYWxseSwgYWJvdXQgYSBkZWNhZGUgYWdvIGl0IHdhcyBkZXRlcm1pbmVkIHRoYXQgd2l0aCBtb3JlCisgKiAgICAgICB0aGFuIHR3byBtZXJnZSBiYXNlcywgb3B0aW1hbCBiZWhhdmlvciB3YXMgZm91bmQgd2hlbiB0aGUKKyAqICAgICAgIG1lcmdlX2Jhc2VzIHdlcmUgcGFzc2VkIGluIHRoZSBvcmRlciBvZiBvbGRlc3QgY29tbWl0IHRvIG5ld2VzdAorICogICAgICAgY29tbWl0LiAgQWxzbywgbWVyZ2VfYmFzZXMgd2lsbCBiZSBjb25zdW1lZCAoZW1wdGllZCkgc28gbWFrZSBhCisgKiAgICAgICBjb3B5IGlmIHlvdSBuZWVkIGl0LgorICoKKyAqIE91dHB1dHM6CisgKiAgIC0gU2VlIFJFVFVSTiBWQUxVRVMgYWJvdmUKKyAqICAgLSBJZiBtZXJnZSBpcyBjbGVhbiwgYSBjb21taXQgaXMgY3JlYXRlZCBhbmQgaXRzIGFkZHJlc3Mgd3JpdHRlbiB0byAqcmVzdWx0CisgKiAgIC0gb3B0LT5yZXBvLT5pbmRleCBoYXMgdGhlIG5ldyBpbmRleAorICogICAtICRHSVRfSU5ERVhfRklMRSBpcyBub3QgdXBkYXRlZAorICogICAtIFRoZSB3b3JraW5nIHRyZWUgaXMgdXBkYXRlZCB3aXRoIHJlc3VsdHMgb2YgdGhlIG1lcmdlCisgKi8KK2ludCBtZXJnZV9yZWN1cnNpdmUoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJICAgIHN0cnVjdCBjb21taXQgKmgxLAorCQkgICAgc3RydWN0IGNvbW1pdCAqaDIsCisJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKm1lcmdlX2Jhc2VzLAorCQkgICAgc3RydWN0IGNvbW1pdCAqKnJlc3VsdCk7CisKKy8qCisgKiBtZXJnZV9yZWN1cnNpdmVfZ2VuZXJpYyBjYW4gb3BlcmF0ZSBvbiB0cmVlcyBpbnN0ZWFkIG9mIGNvbW1pdHMsIGJ5CisgKiB3cmFwcGluZyB0aGUgdHJlZXMgaW50byB2aXJ0dWFsIGNvbW1pdHMsIGFuZCBjYWxsaW5nIG1lcmdlX3JlY3Vyc2l2ZSgpLgorICogSXQgYWxzbyB3cml0ZXMgb3V0IHRoZSBpbi1tZW1vcnkgaW5kZXggdG8gZGlzayBpZiB0aGUgbWVyZ2UgaXMgc3VjY2Vzc2Z1bC4KKyAqCisgKiBPdXRwdXRzOgorICogICAtIFNlZSBSRVRVUk4gVkFMVUVTIGFib3ZlCisgKiAgIC0gSWYgbWVyZ2UgaXMgY2xlYW4sIGEgY29tbWl0IGlzIGNyZWF0ZWQgYW5kIGl0cyBhZGRyZXNzIHdyaXR0ZW4gdG8gKnJlc3VsdAorICogICAtIG9wdC0+cmVwby0+aW5kZXggaGFzIHRoZSBuZXcgaW5kZXgKKyAqICAgLSAkR0lUX0lOREVYX0ZJTEUgaXMgdXBkYXRlZAorICogICAtIFRoZSB3b3JraW5nIHRyZWUgaXMgdXBkYXRlZCB3aXRoIHJlc3VsdHMgb2YgdGhlIG1lcmdlCisgKi8KK2ludCBtZXJnZV9yZWN1cnNpdmVfZ2VuZXJpYyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmhlYWQsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbWVyZ2UsCisJCQkgICAgaW50IG51bV9tZXJnZV9iYXNlcywKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICoqbWVyZ2VfYmFzZXMsCisJCQkgICAgc3RydWN0IGNvbW1pdCAqKnJlc3VsdCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWVyZ2UuYyBiL21lcmdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzNmRlMgotLS0gL2Rldi9udWxsCisrKyBiL21lcmdlLmMKQEAgLTAsMCArMSwxMTAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJkaXIuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKm1lcmdlX2FyZ3VtZW50KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlyZXR1cm4gb2lkX3RvX2hleChjb21taXQgPyAmY29tbWl0LT5vYmplY3Qub2lkIDogdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSk7Cit9CisKK2ludCB0cnlfbWVyZ2VfY29tbWFuZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgICAgY29uc3QgY2hhciAqc3RyYXRlZ3ksIHNpemVfdCB4b3B0c19uciwKKwkJICAgICAgY29uc3QgY2hhciAqKnhvcHRzLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1vbiwKKwkJICAgICAgY29uc3QgY2hhciAqaGVhZF9hcmcsIHN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlcykKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCWludCBpLCByZXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpqOworCisJYXJndl9hcnJheV9wdXNoZigmYXJncywgIm1lcmdlLSVzIiwgc3RyYXRlZ3kpOworCWZvciAoaSA9IDA7IGkgPCB4b3B0c19ucjsgaSsrKQorCQlhcmd2X2FycmF5X3B1c2hmKCZhcmdzLCAiLS0lcyIsIHhvcHRzW2ldKTsKKwlmb3IgKGogPSBjb21tb247IGo7IGogPSBqLT5uZXh0KQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG1lcmdlX2FyZ3VtZW50KGotPml0ZW0pKTsKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLSIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgaGVhZF9hcmcpOworCWZvciAoaiA9IHJlbW90ZXM7IGo7IGogPSBqLT5uZXh0KQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG1lcmdlX2FyZ3VtZW50KGotPml0ZW0pKTsKKworCXJldCA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MuYXJndiwgUlVOX0dJVF9DTUQpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCisJZGlzY2FyZF9pbmRleChyLT5pbmRleCk7CisJaWYgKHJlcG9fcmVhZF9pbmRleChyKSA8IDApCisJCWRpZShfKCJmYWlsZWQgdG8gcmVhZCB0aGUgY2FjaGUiKSk7CisJcmVzb2x2ZV91bmRvX2NsZWFyX2luZGV4KHItPmluZGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBjaGVja291dF9mYXN0X2ZvcndhcmQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmhlYWQsCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnJlbW90ZSwKKwkJCSAgaW50IG92ZXJ3cml0ZV9pZ25vcmUpCit7CisJc3RydWN0IHRyZWUgKnRyZWVzW01BWF9VTlBBQ0tfVFJFRVNdOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCXN0cnVjdCB0cmVlX2Rlc2MgdFtNQVhfVU5QQUNLX1RSRUVTXTsKKwlpbnQgaSwgbnJfdHJlZXMgPSAwOworCXN0cnVjdCBkaXJfc3RydWN0IGRpcjsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKworCXJlZnJlc2hfaW5kZXgoci0+aW5kZXgsIFJFRlJFU0hfUVVJRVQsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJaWYgKHJlcG9faG9sZF9sb2NrZWRfaW5kZXgociwgJmxvY2tfZmlsZSwgTE9DS19SRVBPUlRfT05fRVJST1IpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJbWVtc2V0KCZ0cmVlcywgMCwgc2l6ZW9mKHRyZWVzKSk7CisJbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOworCisJdHJlZXNbbnJfdHJlZXNdID0gcGFyc2VfdHJlZV9pbmRpcmVjdChoZWFkKTsKKwlpZiAoIXRyZWVzW25yX3RyZWVzKytdKSB7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9ja19maWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKwl0cmVlc1tucl90cmVlc10gPSBwYXJzZV90cmVlX2luZGlyZWN0KHJlbW90ZSk7CisJaWYgKCF0cmVlc1tucl90cmVlcysrXSkgeworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2tfZmlsZSk7CisJCXJldHVybiAtMTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG5yX3RyZWVzOyBpKyspIHsKKwkJcGFyc2VfdHJlZSh0cmVlc1tpXSk7CisJCWluaXRfdHJlZV9kZXNjKHQraSwgdHJlZXNbaV0tPmJ1ZmZlciwgdHJlZXNbaV0tPnNpemUpOworCX0KKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlpZiAob3ZlcndyaXRlX2lnbm9yZSkgeworCQltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCQlkaXIuZmxhZ3MgfD0gRElSX1NIT1dfSUdOT1JFRDsKKwkJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoJmRpcik7CisJCW9wdHMuZGlyID0gJmRpcjsKKwl9CisKKwlvcHRzLmhlYWRfaWR4ID0gMTsKKwlvcHRzLnNyY19pbmRleCA9IHItPmluZGV4OworCW9wdHMuZHN0X2luZGV4ID0gci0+aW5kZXg7CisJb3B0cy51cGRhdGUgPSAxOworCW9wdHMudmVyYm9zZV91cGRhdGUgPSAxOworCW9wdHMubWVyZ2UgPSAxOworCW9wdHMuZm4gPSB0d293YXlfbWVyZ2U7CisJaW5pdF9jaGVja291dF9tZXRhZGF0YSgmb3B0cy5tZXRhLCBOVUxMLCByZW1vdGUsIE5VTEwpOworCXNldHVwX3VucGFja190cmVlc19wb3JjZWxhaW4oJm9wdHMsICJtZXJnZSIpOworCisJaWYgKHVucGFja190cmVlcyhucl90cmVlcywgdCwgJm9wdHMpKSB7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9ja19maWxlKTsKKwkJY2xlYXJfdW5wYWNrX3RyZWVzX3BvcmNlbGFpbigmb3B0cyk7CisJCXJldHVybiAtMTsKKwl9CisJY2xlYXJfdW5wYWNrX3RyZWVzX3BvcmNlbGFpbigmb3B0cyk7CisKKwlpZiAod3JpdGVfbG9ja2VkX2luZGV4KHItPmluZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9tZXJnZXNvcnQuYyBiL21lcmdlc29ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZmRmMmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXNvcnQuYwpAQCAtMCwwICsxLDczIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJtZXJnZXNvcnQuaCIKKworc3RydWN0IG1lcmdlc29ydF9zdWJsaXN0IHsKKwl2b2lkICpwdHI7CisJdW5zaWduZWQgbG9uZyBsZW47Cit9OworCitzdGF0aWMgdm9pZCAqZ2V0X250aF9uZXh0KHZvaWQgKmxpc3QsIHVuc2lnbmVkIGxvbmcgbiwKKwkJCSAgdm9pZCAqKCpnZXRfbmV4dF9mbikoY29uc3Qgdm9pZCAqKSkKK3sKKwl3aGlsZSAobi0tICYmIGxpc3QpCisJCWxpc3QgPSBnZXRfbmV4dF9mbihsaXN0KTsKKwlyZXR1cm4gbGlzdDsKK30KKworc3RhdGljIHZvaWQgKnBvcF9pdGVtKHN0cnVjdCBtZXJnZXNvcnRfc3VibGlzdCAqbCwKKwkJICAgICAgdm9pZCAqKCpnZXRfbmV4dF9mbikoY29uc3Qgdm9pZCAqKSkKK3sKKwl2b2lkICpwID0gbC0+cHRyOworCWwtPnB0ciA9IGdldF9uZXh0X2ZuKGwtPnB0cik7CisJbC0+bGVuID0gbC0+cHRyID8gKGwtPmxlbiAtIDEpIDogMDsKKwlyZXR1cm4gcDsKK30KKwordm9pZCAqbGxpc3RfbWVyZ2Vzb3J0KHZvaWQgKmxpc3QsCisJCSAgICAgIHZvaWQgKigqZ2V0X25leHRfZm4pKGNvbnN0IHZvaWQgKiksCisJCSAgICAgIHZvaWQgKCpzZXRfbmV4dF9mbikodm9pZCAqLCB2b2lkICopLAorCQkgICAgICBpbnQgKCpjb21wYXJlX2ZuKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCit7CisJdW5zaWduZWQgbG9uZyBsOworCisJaWYgKCFsaXN0KQorCQlyZXR1cm4gTlVMTDsKKwlmb3IgKGwgPSAxOyA7IGwgKj0gMikgeworCQl2b2lkICpjdXJyOworCQlzdHJ1Y3QgbWVyZ2Vzb3J0X3N1Ymxpc3QgcCwgcTsKKworCQlwLnB0ciA9IGxpc3Q7CisJCXEucHRyID0gZ2V0X250aF9uZXh0KHAucHRyLCBsLCBnZXRfbmV4dF9mbik7CisJCWlmICghcS5wdHIpCisJCQlicmVhazsKKwkJcC5sZW4gPSBxLmxlbiA9IGw7CisKKwkJaWYgKGNvbXBhcmVfZm4ocC5wdHIsIHEucHRyKSA+IDApCisJCQlsaXN0ID0gY3VyciA9IHBvcF9pdGVtKCZxLCBnZXRfbmV4dF9mbik7CisJCWVsc2UKKwkJCWxpc3QgPSBjdXJyID0gcG9wX2l0ZW0oJnAsIGdldF9uZXh0X2ZuKTsKKworCQl3aGlsZSAocC5wdHIpIHsKKwkJCXdoaWxlIChwLmxlbiB8fCBxLmxlbikgeworCQkJCXZvaWQgKnByZXYgPSBjdXJyOworCisJCQkJaWYgKCFwLmxlbikKKwkJCQkJY3VyciA9IHBvcF9pdGVtKCZxLCBnZXRfbmV4dF9mbik7CisJCQkJZWxzZSBpZiAoIXEubGVuKQorCQkJCQljdXJyID0gcG9wX2l0ZW0oJnAsIGdldF9uZXh0X2ZuKTsKKwkJCQllbHNlIGlmIChjb21wYXJlX2ZuKHAucHRyLCBxLnB0cikgPiAwKQorCQkJCQljdXJyID0gcG9wX2l0ZW0oJnEsIGdldF9uZXh0X2ZuKTsKKwkJCQllbHNlCisJCQkJCWN1cnIgPSBwb3BfaXRlbSgmcCwgZ2V0X25leHRfZm4pOworCQkJCXNldF9uZXh0X2ZuKHByZXYsIGN1cnIpOworCQkJfQorCQkJcC5wdHIgPSBxLnB0cjsKKwkJCXAubGVuID0gbDsKKwkJCXEucHRyID0gZ2V0X250aF9uZXh0KHAucHRyLCBsLCBnZXRfbmV4dF9mbik7CisJCQlxLmxlbiA9IHEucHRyID8gbCA6IDA7CisKKwkJfQorCQlzZXRfbmV4dF9mbihjdXJyLCBOVUxMKTsKKwl9CisJcmV0dXJuIGxpc3Q7Cit9CmRpZmYgLS1naXQgYS9tZXJnZXNvcnQuaCBiL21lcmdlc29ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NGNmZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXNvcnQuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIE1FUkdFU09SVF9ICisjZGVmaW5lIE1FUkdFU09SVF9ICisKKy8qCisgKiBTb3J0IGxpbmtlZCBsaXN0IGluIHBsYWNlLgorICogLSBnZXRfbmV4dF9mbigpIHJldHVybnMgdGhlIG5leHQgZWxlbWVudCBnaXZlbiBhbiBlbGVtZW50IG9mIGEgbGlua2VkIGxpc3QuCisgKiAtIHNldF9uZXh0X2ZuKCkgdGFrZXMgdHdvIGVsZW1lbnRzIEEgYW5kIEIsIGFuZCBtYWtlcyBCIHRoZSAibmV4dCIgZWxlbWVudAorICogICBvZiBBIG9uIHRoZSBsaXN0LgorICogLSBjb21wYXJlX2ZuKCkgdGFrZXMgdHdvIGVsZW1lbnRzIEEgYW5kIEIsIGFuZCByZXR1cm5zIG5lZ2F0aXZlLCAwLCBwb3NpdGl2ZQorICogICBhcyB0aGUgc2FtZSBzaWduIGFzICJzdWJ0cmFjdGluZyIgQiBmcm9tIEEuCisgKi8KK3ZvaWQgKmxsaXN0X21lcmdlc29ydCh2b2lkICpsaXN0LAorCQkgICAgICB2b2lkICooKmdldF9uZXh0X2ZuKShjb25zdCB2b2lkICopLAorCQkgICAgICB2b2lkICgqc2V0X25leHRfZm4pKHZvaWQgKiwgdm9pZCAqKSwKKwkJICAgICAgaW50ICgqY29tcGFyZV9mbikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2FyYXhpcyBiL21lcmdldG9vbHMvYXJheGlzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNDA3YjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2FyYXhpcwpAQCAtMCwwICsxLDE4IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiIC13YWl0IC0yICIkTE9DQUwiICIkUkVNT1RFIiA+L2Rldi9udWxsIDI+JjEKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLXdhaXQgLW1lcmdlIC0zIC1hMSBcCisJCQkiJEJBU0UiICIkTE9DQUwiICIkUkVNT1RFIiAiJE1FUkdFRCIgPi9kZXYvbnVsbCAyPiYxCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLXdhaXQgLTIgXAorCQkJIiRMT0NBTCIgIiRSRU1PVEUiICIkTUVSR0VEIiA+L2Rldi9udWxsIDI+JjEKKwlmaQorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoKCkgeworCWVjaG8gY29tcGFyZQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9iYyBiL21lcmdldG9vbHMvYmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E2OWU2MAotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvYmMKQEAgLTAsMCArMSwyMyBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiICIkQkFTRSIgXAorCQkJLW1lcmdlb3V0cHV0PSIkTUVSR0VEIgorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQktbWVyZ2VvdXRwdXQ9IiRNRVJHRUQiCisJZmkKK30KKwordHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCgpIHsKKwlpZiB0eXBlIGJjb21wID4vZGV2L251bGwgMj4vZGV2L251bGwKKwl0aGVuCisJCWVjaG8gYmNvbXAKKwllbHNlCisJCWVjaG8gYmNvbXBhcmUKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9iYzMgYi9tZXJnZXRvb2xzL2JjMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDhkZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9iYzMKQEAgLTAsMCArMSBAQAorLiAiJE1FUkdFX1RPT0xTX0RJUi9iYyIKZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvY29kZWNvbXBhcmUgYi9tZXJnZXRvb2xzL2NvZGVjb21wYXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNjBlOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2NvZGVjb21wYXJlCkBAIC0wLDAgKzEsMjMgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiCit9CisKK21lcmdlX2NtZCAoKSB7CisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiIC1NRj0iJExPQ0FMIiAtVEY9IiRSRU1PVEUiIC1CRj0iJEJBU0UiIFwKKwkJCS1SRj0iJE1FUkdFRCIKKwllbHNlCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtTUY9IiRMT0NBTCIgLVRGPSIkUkVNT1RFIiBcCisJCQktUkY9IiRNRVJHRUQiCisJZmkKK30KKwordHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCgpIHsKKwlpZiBtZXJnZV9tb2RlCisJdGhlbgorCQllY2hvIENvZGVNZXJnZQorCWVsc2UKKwkJZWNobyBDb2RlQ29tcGFyZQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2RlbHRhd2Fsa2VyIGIvbWVyZ2V0b29scy9kZWx0YXdhbGtlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTZmMzc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9kZWx0YXdhbGtlcgpAQCAtMCwwICsxLDI1IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiA+L2Rldi9udWxsIDI+JjEKK30KKworbWVyZ2VfY21kICgpIHsKKwkjIEFkZGluZyAkKHB3ZCkvIGluIGZyb250IG9mICRNRVJHRUQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuCisJIyBIb3dldmVyIHdpdGhvdXQgaXQsIERlbHRhV2Fsa2VyIChhdCBsZWFzdCB2MS45Ljggb24gV2luZG93cykKKwkjIGNyYXNoZXMgd2l0aCBhIEpSRSBleGNlcHRpb24uICBUaGUgRGVsdGFXYWxrZXIgdXNlciBtYW51YWwsCisJIyBzaG93cyAkKHB3ZCkvIHdoZW5ldmVyIHRoZSAnLW1lcmdlZCcgb3B0aW9ucyBpcyBnaXZlbi4KKwkjIEFkZGluZyBpdCBoZXJlIHNlZW1zIHRvIHdvcmsgYXJvdW5kIHRoZSBwcm9ibGVtLgorCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgIiRCQVNFIiAtbWVyZ2VkPSIkKHB3ZCkvJE1FUkdFRCIKKwllbHNlCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgLW1lcmdlZD0iJChwd2QpLyRNRVJHRUQiCisJZmkgPi9kZXYvbnVsbCAyPiYxCit9CisKK3RyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGggKCkgeworCWVjaG8gRGVsdGFXYWxrZXIKK30KKworZXhpdF9jb2RlX3RydXN0YWJsZSAoKSB7CisJdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9kaWZmbWVyZ2UgYi9tZXJnZXRvb2xzL2RpZmZtZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjYzNTViCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9kaWZmbWVyZ2UKQEAgLTAsMCArMSwxOCBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgPi9kZXYvbnVsbCAyPiYxCit9CisKK21lcmdlX2NtZCAoKSB7CisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiIC0tbWVyZ2UgLS1yZXN1bHQ9IiRNRVJHRUQiIFwKKwkJCSIkTE9DQUwiICIkQkFTRSIgIiRSRU1PVEUiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLS1tZXJnZSBcCisJCQktLXJlc3VsdD0iJE1FUkdFRCIgIiRMT0NBTCIgIiRSRU1PVEUiCisJZmkKK30KKworZXhpdF9jb2RlX3RydXN0YWJsZSAoKSB7CisJdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9kaWZmdXNlIGIvbWVyZ2V0b29scy9kaWZmdXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhM2FlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2RpZmZ1c2UKQEAgLTAsMCArMSwxNSBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgfCBjYXQKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgXAorCQkJIiRMT0NBTCIgIiRNRVJHRUQiICIkUkVNT1RFIiBcCisJCQkiJEJBU0UiIHwgY2F0CisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgXAorCQkJIiRMT0NBTCIgIiRNRVJHRUQiICIkUkVNT1RFIiB8IGNhdAorCWZpCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2VjbWVyZ2UgYi9tZXJnZXRvb2xzL2VjbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1MTAxYwotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZWNtZXJnZQpAQCAtMCwwICsxLDE0IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiIC0tZGVmYXVsdCAtLW1vZGU9ZGlmZjIgIiRMT0NBTCIgIiRSRU1PVEUiCit9CisKK21lcmdlX2NtZCAoKSB7CisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiICIkQkFTRSIgIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJCS0tZGVmYXVsdCAtLW1vZGU9bWVyZ2UzIC0tdG89IiRNRVJHRUQiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJCS0tZGVmYXVsdCAtLW1vZGU9bWVyZ2UyIC0tdG89IiRNRVJHRUQiCisJZmkKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvZW1lcmdlIGIvbWVyZ2V0b29scy9lbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjZTUxMwotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZW1lcmdlCkBAIC0wLDAgKzEsMjYgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgLWYgZW1lcmdlLWZpbGVzLWNvbW1hbmQgIiRMT0NBTCIgIiRSRU1PVEUiCit9CisKK21lcmdlX2NtZCAoKSB7CisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiIFwKKwkJCS1mIGVtZXJnZS1maWxlcy13aXRoLWFuY2VzdG9yLWNvbW1hbmQgXAorCQkJIiRMT0NBTCIgIiRSRU1PVEUiICIkQkFTRSIgXAorCQkJIiQoYmFzZW5hbWUgIiRNRVJHRUQiKSIKKwllbHNlCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiBcCisJCQktZiBlbWVyZ2UtZmlsZXMtY29tbWFuZCBcCisJCQkiJExPQ0FMIiAiJFJFTU9URSIgXAorCQkJIiQoYmFzZW5hbWUgIiRNRVJHRUQiKSIKKwlmaQorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoKCkgeworCWVjaG8gZW1hY3MKK30KKworZXhpdF9jb2RlX3RydXN0YWJsZSAoKSB7CisJdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9leGFtZGlmZiBiL21lcmdldG9vbHMvZXhhbWRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcyYjA2ZgotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZXhhbWRpZmYKQEAgLTAsMCArMSwxNiBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgLW5oCit9CisKK21lcmdlX2NtZCAoKSB7CisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiIC1tZXJnZSAiJExPQ0FMIiAiJEJBU0UiICIkUkVNT1RFIiAtbzoiJE1FUkdFRCIgLW5oCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLW1lcmdlICIkTE9DQUwiICIkUkVNT1RFIiAtbzoiJE1FUkdFRCIgLW5oCisJZmkKK30KKwordHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCgpIHsKKwltZXJnZXRvb2xfZmluZF93aW4zMl9jbWQgIkV4YW1EaWZmLmNvbSIgIkV4YW1EaWZmIFBybyIKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvZ3VpZmZ5IGIvbWVyZ2V0b29scy9ndWlmZnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyM2ExMwotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZ3VpZmZ5CkBAIC0wLDAgKzEsMTggQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiCit9CisKK21lcmdlX2NtZCAoKSB7CisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiIC1zICIkTE9DQUwiIFwKKwkJIiRSRU1PVEUiICIkQkFTRSIgIiRNRVJHRUQiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLW0gIiRMT0NBTCIgXAorCQkiJFJFTU9URSIgIiRNRVJHRUQiCisJZmkKK30KKworZXhpdF9jb2RlX3RydXN0YWJsZSAoKSB7CisJdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9ndmltZGlmZiBiL21lcmdldG9vbHMvZ3ZpbWRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhNWJiMAotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZ3ZpbWRpZmYKQEAgLTAsMCArMSBAQAorLiAiJE1FUkdFX1RPT0xTX0RJUi92aW1kaWZmIgpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9ndmltZGlmZjIgYi9tZXJnZXRvb2xzL2d2aW1kaWZmMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGE1YmIwCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9ndmltZGlmZjIKQEAgLTAsMCArMSBAQAorLiAiJE1FUkdFX1RPT0xTX0RJUi92aW1kaWZmIgpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9ndmltZGlmZjMgYi9tZXJnZXRvb2xzL2d2aW1kaWZmMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGE1YmIwCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9ndmltZGlmZjMKQEAgLTAsMCArMSBAQAorLiAiJE1FUkdFX1RPT0xTX0RJUi92aW1kaWZmIgpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9rZGlmZjMgYi9tZXJnZXRvb2xzL2tkaWZmMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjY0ZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9rZGlmZjMKQEAgLTAsMCArMSwyNyBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiBcCisJCS0tTDEgIiRNRVJHRUQgKEEpIiAtLUwyICIkTUVSR0VEIChCKSIgXAorCQkiJExPQ0FMIiAiJFJFTU9URSIgPi9kZXYvbnVsbCAyPiYxCit9CisKK21lcmdlX2NtZCAoKSB7CisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiIC0tYXV0byBcCisJCQktLUwxICIkTUVSR0VEIChCYXNlKSIgXAorCQkJLS1MMiAiJE1FUkdFRCAoTG9jYWwpIiBcCisJCQktLUwzICIkTUVSR0VEIChSZW1vdGUpIiBcCisJCQktbyAiJE1FUkdFRCIgIiRCQVNFIiAiJExPQ0FMIiAiJFJFTU9URSIgXAorCQk+L2Rldi9udWxsIDI+JjEKKwllbHNlCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtLWF1dG8gXAorCQkJLS1MMSAiJE1FUkdFRCAoTG9jYWwpIiBcCisJCQktLUwyICIkTUVSR0VEIChSZW1vdGUpIiBcCisJCQktbyAiJE1FUkdFRCIgIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJPi9kZXYvbnVsbCAyPiYxCisJZmkKK30KKworZXhpdF9jb2RlX3RydXN0YWJsZSAoKSB7CisJdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9rb21wYXJlIGIvbWVyZ2V0b29scy9rb21wYXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YzBiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2tvbXBhcmUKQEAgLTAsMCArMSwxMSBAQAorY2FuX21lcmdlICgpIHsKKwlyZXR1cm4gMQorfQorCitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIgorfQorCitleGl0X2NvZGVfdHJ1c3RhYmxlICgpIHsKKwl0cnVlCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL21lbGQgYi9tZXJnZXRvb2xzL21lbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EwODQ3MAotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvbWVsZApAQCAtMCwwICsxLDM2IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIgorfQorCittZXJnZV9jbWQgKCkgeworCWlmIHRlc3QgLXogIiR7bWVsZF9oYXNfb3V0cHV0X29wdGlvbjorc2V0fSIKKwl0aGVuCisJCWNoZWNrX21lbGRfZm9yX291dHB1dF92ZXJzaW9uCisJZmkKKworCWlmIHRlc3QgIiRtZWxkX2hhc19vdXRwdXRfb3B0aW9uIiA9IHRydWUKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtLW91dHB1dD0iJE1FUkdFRCIgXAorCQkJIiRMT0NBTCIgIiRCQVNFIiAiJFJFTU9URSIKKwllbHNlCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJE1FUkdFRCIgIiRSRU1PVEUiCisJZmkKK30KKworIyBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCB1c2UgJ21lbGQgLS1vdXRwdXQgPGZpbGU+JworY2hlY2tfbWVsZF9mb3Jfb3V0cHV0X3ZlcnNpb24gKCkgeworCW1lbGRfcGF0aD0iJChnaXQgY29uZmlnIG1lcmdldG9vbC5tZWxkLnBhdGgpIgorCW1lbGRfcGF0aD0iJHttZWxkX3BhdGg6LW1lbGR9IgorCisJaWYgbWVsZF9oYXNfb3V0cHV0X29wdGlvbj0kKGdpdCBjb25maWcgLS1ib29sIG1lcmdldG9vbC5tZWxkLmhhc091dHB1dCkKKwl0aGVuCisJCTogdXNlIGNvbmZpZ3VyZWQgdmFsdWUKKwllbGlmICIkbWVsZF9wYXRoIiAtLWhlbHAgMj4mMSB8CisJCWdyZXAgLWUgJy0tb3V0cHV0PScgLWUgJ1xbT1BUSU9OXC5cLlwuXF0nID4vZGV2L251bGwKKwl0aGVuCisJCTogb2xkIG9uZXMgbWVudGlvbiAtLW91dHB1dCBhbmQgbmV3IG9uZXMganVzdCBzYXkgT1BUSU9OLi4uCisJCW1lbGRfaGFzX291dHB1dF9vcHRpb249dHJ1ZQorCWVsc2UKKwkJbWVsZF9oYXNfb3V0cHV0X29wdGlvbj1mYWxzZQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL29wZW5kaWZmIGIvbWVyZ2V0b29scy9vcGVuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjA4ZGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9vcGVuZGlmZgpAQCAtMCwwICsxLDE0IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiB8IGNhdAorfQorCittZXJnZV9jbWQgKCkgeworCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgXAorCQkJLWFuY2VzdG9yICIkQkFTRSIgLW1lcmdlICIkTUVSR0VEIiB8IGNhdAorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQktbWVyZ2UgIiRNRVJHRUQiIHwgY2F0CisJZmkKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvcDRtZXJnZSBiL21lcmdldG9vbHMvcDRtZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTViMjkxCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9wNG1lcmdlCkBAIC0wLDAgKzEsMzYgQEAKK2RpZmZfY21kICgpIHsKKwllbXB0eV9maWxlPQorCisJIyBwNG1lcmdlIGRvZXMgbm90IGxpa2UgL2Rldi9udWxsCisJaWYgdGVzdCAiL2Rldi9udWxsIiA9ICIkTE9DQUwiCisJdGhlbgorCQlMT0NBTD0iJChjcmVhdGVfZW1wdHlfZmlsZSkiCisJZmkKKwlpZiB0ZXN0ICIvZGV2L251bGwiID0gIiRSRU1PVEUiCisJdGhlbgorCQlSRU1PVEU9IiQoY3JlYXRlX2VtcHR5X2ZpbGUpIgorCWZpCisKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiCisKKwlpZiB0ZXN0IC1uICIkZW1wdHlfZmlsZSIKKwl0aGVuCisJCXJtIC1mICIkZW1wdHlfZmlsZSIKKwlmaQorfQorCittZXJnZV9jbWQgKCkgeworCWlmICEgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJY3AgLS0gIiRMT0NBTCIgIiRCQVNFIgorCQljcmVhdGVfdmlydHVhbF9iYXNlICIkQkFTRSIgIiRSRU1PVEUiCisJZmkKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRCQVNFIiAiJFJFTU9URSIgIiRMT0NBTCIgIiRNRVJHRUQiCit9CisKK2NyZWF0ZV9lbXB0eV9maWxlICgpIHsKKwllbXB0eV9maWxlPSIke1RNUERJUjotL3RtcH0vZ2l0LWRpZmZ0b29sLXA0bWVyZ2UtZW1wdHktZmlsZS4kJCIKKwk+IiRlbXB0eV9maWxlIgorCisJcHJpbnRmICIlcyIgIiRlbXB0eV9maWxlIgorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9zbWVyZ2UgYi9tZXJnZXRvb2xzL3NtZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzJlNmY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9zbWVyZ2UKQEAgLTAsMCArMSwxMiBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiBtZXJnZXRvb2wgIiRMT0NBTCIgIiRSRU1PVEUiIC1vICIkTUVSR0VEIgorfQorCittZXJnZV9jbWQgKCkgeworCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiBtZXJnZXRvb2wgIiRCQVNFIiAiJExPQ0FMIiAiJFJFTU9URSIgLW8gIiRNRVJHRUQiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgbWVyZ2V0b29sICIkTE9DQUwiICIkUkVNT1RFIiAtbyAiJE1FUkdFRCIKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy90a2RpZmYgYi9tZXJnZXRvb2xzL3RrZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWU1Y2I1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy90a2RpZmYKQEAgLTAsMCArMSwxNiBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWEgIiRCQVNFIiAtbyAiJE1FUkdFRCIgIiRMT0NBTCIgIiRSRU1PVEUiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLW8gIiRNRVJHRUQiICIkTE9DQUwiICIkUkVNT1RFIgorCWZpCit9CisKK2V4aXRfY29kZV90cnVzdGFibGUgKCkgeworCXRydWUKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvdG9ydG9pc2VtZXJnZSBiL21lcmdldG9vbHMvdG9ydG9pc2VtZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2FiNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy90b3J0b2lzZW1lcmdlCkBAIC0wLDAgKzEsMzIgQEAKK2Nhbl9kaWZmICgpIHsKKwlyZXR1cm4gMQorfQorCittZXJnZV9jbWQgKCkgeworCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCWJhc2VuYW1lPSIkKGJhc2VuYW1lICIkbWVyZ2VfdG9vbF9wYXRoIiAuZXhlKSIKKwkJaWYgdGVzdCAiJGJhc2VuYW1lIiA9ICJ0b3J0b2lzZWdpdG1lcmdlIgorCQl0aGVuCisJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgXAorCQkJCS1iYXNlICIkQkFTRSIgLW1pbmUgIiRMT0NBTCIgXAorCQkJCS10aGVpcnMgIiRSRU1PVEUiIC1tZXJnZWQgIiRNRVJHRUQiCisJCWVsc2UKKwkJCSIkbWVyZ2VfdG9vbF9wYXRoIiBcCisJCQkJLWJhc2U6IiRCQVNFIiAtbWluZToiJExPQ0FMIiBcCisJCQkJLXRoZWlyczoiJFJFTU9URSIgLW1lcmdlZDoiJE1FUkdFRCIKKwkJZmkKKwllbHNlCisJCWVjaG8gIiRtZXJnZV90b29sX3BhdGggY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIGJhc2UiIDE+JjIKKwkJcmV0dXJuIDEKKwlmaQorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoKCkgeworCWlmIHR5cGUgdG9ydG9pc2VnaXRtZXJnZSA+L2Rldi9udWxsIDI+L2Rldi9udWxsCisJdGhlbgorCQllY2hvIHRvcnRvaXNlZ2l0bWVyZ2UKKwllbHNlCisJCWVjaG8gdG9ydG9pc2VtZXJnZQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL3ZpbWRpZmYgYi9tZXJnZXRvb2xzL3ZpbWRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkODZmMwotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvdmltZGlmZgpAQCAtMCwwICsxLDQ4IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiIC1SIC1mIC1kIFwKKwkJLWMgJ3dpbmNtZCBsJyAtYyAnY2QgJEdJVF9QUkVGSVgnICIkTE9DQUwiICIkUkVNT1RFIgorfQorCittZXJnZV9jbWQgKCkgeworCWNhc2UgIiQxIiBpbgorCWd2aW1kaWZmfHZpbWRpZmYpCisJCWlmICRiYXNlX3ByZXNlbnQKKwkJdGhlbgorCQkJIiRtZXJnZV90b29sX3BhdGgiIC1mIC1kIC1jICc0d2luY21kIHcgfCB3aW5jbWQgSicgXAorCQkJCSIkTE9DQUwiICIkQkFTRSIgIiRSRU1PVEUiICIkTUVSR0VEIgorCQllbHNlCisJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWYgLWQgLWMgJ3dpbmNtZCBsJyBcCisJCQkJIiRMT0NBTCIgIiRNRVJHRUQiICIkUkVNT1RFIgorCQlmaQorCQk7OworCWd2aW1kaWZmMnx2aW1kaWZmMikKKwkJIiRtZXJnZV90b29sX3BhdGgiIC1mIC1kIC1jICd3aW5jbWQgbCcgXAorCQkJIiRMT0NBTCIgIiRNRVJHRUQiICIkUkVNT1RFIgorCQk7OworCWd2aW1kaWZmM3x2aW1kaWZmMykKKwkJaWYgJGJhc2VfcHJlc2VudAorCQl0aGVuCisJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWYgLWQgLWMgJ2hpZCB8IGhpZCB8IGhpZCcgXAorCQkJCSIkTE9DQUwiICIkUkVNT1RFIiAiJEJBU0UiICIkTUVSR0VEIgorCQllbHNlCisJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWYgLWQgLWMgJ2hpZCB8IGhpZCcgXAorCQkJCSIkTE9DQUwiICIkUkVNT1RFIiAiJE1FUkdFRCIKKwkJZmkKKwkJOzsKKwllc2FjCit9CisKK3RyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGgoKSB7CisJY2FzZSAiJDEiIGluCisJZ3ZpbWRpZmZ8Z3ZpbWRpZmYyfGd2aW1kaWZmMykKKwkJZWNobyBndmltCisJCTs7CisJdmltZGlmZnx2aW1kaWZmMnx2aW1kaWZmMykKKwkJZWNobyB2aW0KKwkJOzsKKwllc2FjCit9CisKK2V4aXRfY29kZV90cnVzdGFibGUgKCkgeworCXRydWUKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvdmltZGlmZjIgYi9tZXJnZXRvb2xzL3ZpbWRpZmYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTViYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL3ZpbWRpZmYyCkBAIC0wLDAgKzEgQEAKKy4gIiRNRVJHRV9UT09MU19ESVIvdmltZGlmZiIKZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvdmltZGlmZjMgYi9tZXJnZXRvb2xzL3ZpbWRpZmYzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTViYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL3ZpbWRpZmYzCkBAIC0wLDAgKzEgQEAKKy4gIiRNRVJHRV9UT09MU19ESVIvdmltZGlmZiIKZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvd2lubWVyZ2UgYi9tZXJnZXRvb2xzL3dpbm1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZDAzMjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL3dpbm1lcmdlCkBAIC0wLDAgKzEsMTUgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgLXUgLWUgIiRMT0NBTCIgIiRSRU1PVEUiCisJcmV0dXJuIDAKK30KKworbWVyZ2VfY21kICgpIHsKKwkjIG1lcmdldG9vbC53aW5tZXJnZS50cnVzdEV4aXRDb2RlIGlzIGltcGxpY2l0bHkgZmFsc2UuCisJIyB0b3VjaCAkQkFDS1VQIHNvIHRoYXQgd2UgY2FuIGNoZWNrX3VuY2hhbmdlZC4KKwkiJG1lcmdlX3Rvb2xfcGF0aCIgLXUgLWUgLWRsIExvY2FsIC1kciBSZW1vdGUgXAorCQkiJExPQ0FMIiAiJFJFTU9URSIgIiRNRVJHRUQiCit9CisKK3RyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGgoKSB7CisJbWVyZ2V0b29sX2ZpbmRfd2luMzJfY21kICJXaW5NZXJnZVUuZXhlIiAiV2luTWVyZ2UiCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL3h4ZGlmZiBiL21lcmdldG9vbHMveHhkaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNWI4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL3h4ZGlmZgpAQCAtMCwwICsxLDIzIEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiIFwKKwkJLVIgJ0FjY2VsLlNlYXJjaDogIkN0cmwrRiInIFwKKwkJLVIgJ0FjY2VsLlNlYXJjaEZvcndhcmQ6ICJDdHJsK0ciJyBcCisJCSIkTE9DQUwiICIkUkVNT1RFIgorfQorCittZXJnZV9jbWQgKCkgeworCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtWCAtLXNob3ctbWVyZ2VkLXBhbmUgXAorCQkJLVIgJ0FjY2VsLlNhdmVBc01lcmdlZDogIkN0cmwrUyInIFwKKwkJCS1SICdBY2NlbC5TZWFyY2g6ICJDdHJsK0YiJyBcCisJCQktUiAnQWNjZWwuU2VhcmNoRm9yd2FyZDogIkN0cmwrRyInIFwKKwkJCS0tbWVyZ2VkLWZpbGUgIiRNRVJHRUQiICIkTE9DQUwiICIkQkFTRSIgIiRSRU1PVEUiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLVggJGV4dHJhIFwKKwkJCS1SICdBY2NlbC5TYXZlQXNNZXJnZWQ6ICJDdHJsK1MiJyBcCisJCQktUiAnQWNjZWwuU2VhcmNoOiAiQ3RybCtGIicgXAorCQkJLVIgJ0FjY2VsLlNlYXJjaEZvcndhcmQ6ICJDdHJsK0ciJyBcCisJCQktLW1lcmdlZC1maWxlICIkTUVSR0VEIiAiJExPQ0FMIiAiJFJFTU9URSIKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWlkeC5jIGIvbWlkeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMTU4NGMKLS0tIC9kZXYvbnVsbAorKysgYi9taWR4LmMKQEAgLTAsMCArMSwxNDY1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjc3VtLWZpbGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKyNpbmNsdWRlICJtaWR4LmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJ0cmFjZTIuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCisjZGVmaW5lIE1JRFhfU0lHTkFUVVJFIDB4NGQ0OTQ0NTggLyogIk1JRFgiICovCisjZGVmaW5lIE1JRFhfVkVSU0lPTiAxCisjZGVmaW5lIE1JRFhfQllURV9GSUxFX1ZFUlNJT04gNAorI2RlZmluZSBNSURYX0JZVEVfSEFTSF9WRVJTSU9OIDUKKyNkZWZpbmUgTUlEWF9CWVRFX05VTV9DSFVOS1MgNgorI2RlZmluZSBNSURYX0JZVEVfTlVNX1BBQ0tTIDgKKyNkZWZpbmUgTUlEWF9IQVNIX1ZFUlNJT04gMQorI2RlZmluZSBNSURYX0hFQURFUl9TSVpFIDEyCisjZGVmaW5lIE1JRFhfTUlOX1NJWkUgKE1JRFhfSEVBREVSX1NJWkUgKyB0aGVfaGFzaF9hbGdvLT5yYXdzeikKKworI2RlZmluZSBNSURYX01BWF9DSFVOS1MgNQorI2RlZmluZSBNSURYX0NIVU5LX0FMSUdOTUVOVCA0CisjZGVmaW5lIE1JRFhfQ0hVTktJRF9QQUNLTkFNRVMgMHg1MDRlNDE0ZCAvKiAiUE5BTSIgKi8KKyNkZWZpbmUgTUlEWF9DSFVOS0lEX09JREZBTk9VVCAweDRmNDk0NDQ2IC8qICJPSURGIiAqLworI2RlZmluZSBNSURYX0NIVU5LSURfT0lETE9PS1VQIDB4NGY0OTQ0NGMgLyogIk9JREwiICovCisjZGVmaW5lIE1JRFhfQ0hVTktJRF9PQkpFQ1RPRkZTRVRTIDB4NGY0ZjQ2NDYgLyogIk9PRkYiICovCisjZGVmaW5lIE1JRFhfQ0hVTktJRF9MQVJHRU9GRlNFVFMgMHg0YzRmNDY0NiAvKiAiTE9GRiIgKi8KKyNkZWZpbmUgTUlEWF9DSFVOS0xPT0tVUF9XSURUSCAoc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZih1aW50NjRfdCkpCisjZGVmaW5lIE1JRFhfQ0hVTktfRkFOT1VUX1NJWkUgKHNpemVvZih1aW50MzJfdCkgKiAyNTYpCisjZGVmaW5lIE1JRFhfQ0hVTktfT0ZGU0VUX1dJRFRIICgyICogc2l6ZW9mKHVpbnQzMl90KSkKKyNkZWZpbmUgTUlEWF9DSFVOS19MQVJHRV9PRkZTRVRfV0lEVEggKHNpemVvZih1aW50NjRfdCkpCisjZGVmaW5lIE1JRFhfTEFSR0VfT0ZGU0VUX05FRURFRCAweDgwMDAwMDAwCisKKyNkZWZpbmUgUEFDS19FWFBJUkVEIFVJTlRfTUFYCisKK3N0YXRpYyBjaGFyICpnZXRfbWlkeF9maWxlbmFtZShjb25zdCBjaGFyICpvYmplY3RfZGlyKQoreworCXJldHVybiB4c3RyZm10KCIlcy9wYWNrL211bHRpLXBhY2staW5kZXgiLCBvYmplY3RfZGlyKTsKK30KKworc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKmxvYWRfbXVsdGlfcGFja19pbmRleChjb25zdCBjaGFyICpvYmplY3RfZGlyLCBpbnQgbG9jYWwpCit7CisJc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0gPSBOVUxMOworCWludCBmZDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzaXplX3QgbWlkeF9zaXplOworCXZvaWQgKm1pZHhfbWFwID0gTlVMTDsKKwl1aW50MzJfdCBoYXNoX3ZlcnNpb247CisJY2hhciAqbWlkeF9uYW1lID0gZ2V0X21pZHhfZmlsZW5hbWUob2JqZWN0X2Rpcik7CisJdWludDMyX3QgaTsKKwljb25zdCBjaGFyICpjdXJfcGFja19uYW1lOworCisJZmQgPSBnaXRfb3BlbihtaWR4X25hbWUpOworCisJaWYgKGZkIDwgMCkKKwkJZ290byBjbGVhbnVwX2ZhaWw7CisJaWYgKGZzdGF0KGZkLCAmc3QpKSB7CisJCWVycm9yX2Vycm5vKF8oImZhaWxlZCB0byByZWFkICVzIiksIG1pZHhfbmFtZSk7CisJCWdvdG8gY2xlYW51cF9mYWlsOworCX0KKworCW1pZHhfc2l6ZSA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisKKwlpZiAobWlkeF9zaXplIDwgTUlEWF9NSU5fU0laRSkgeworCQllcnJvcihfKCJtdWx0aS1wYWNrLWluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIiksIG1pZHhfbmFtZSk7CisJCWdvdG8gY2xlYW51cF9mYWlsOworCX0KKworCUZSRUVfQU5EX05VTEwobWlkeF9uYW1lKTsKKworCW1pZHhfbWFwID0geG1tYXAoTlVMTCwgbWlkeF9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJY2xvc2UoZmQpOworCisJRkxFWF9BTExPQ19TVFIobSwgb2JqZWN0X2Rpciwgb2JqZWN0X2Rpcik7CisJbS0+ZGF0YSA9IG1pZHhfbWFwOworCW0tPmRhdGFfbGVuID0gbWlkeF9zaXplOworCW0tPmxvY2FsID0gbG9jYWw7CisKKwltLT5zaWduYXR1cmUgPSBnZXRfYmUzMihtLT5kYXRhKTsKKwlpZiAobS0+c2lnbmF0dXJlICE9IE1JRFhfU0lHTkFUVVJFKQorCQlkaWUoXygibXVsdGktcGFjay1pbmRleCBzaWduYXR1cmUgMHglMDh4IGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAweCUwOHgiKSwKKwkJICAgICAgbS0+c2lnbmF0dXJlLCBNSURYX1NJR05BVFVSRSk7CisKKwltLT52ZXJzaW9uID0gbS0+ZGF0YVtNSURYX0JZVEVfRklMRV9WRVJTSU9OXTsKKwlpZiAobS0+dmVyc2lvbiAhPSBNSURYX1ZFUlNJT04pCisJCWRpZShfKCJtdWx0aS1wYWNrLWluZGV4IHZlcnNpb24gJWQgbm90IHJlY29nbml6ZWQiKSwKKwkJICAgICAgbS0+dmVyc2lvbik7CisKKwloYXNoX3ZlcnNpb24gPSBtLT5kYXRhW01JRFhfQllURV9IQVNIX1ZFUlNJT05dOworCWlmIChoYXNoX3ZlcnNpb24gIT0gTUlEWF9IQVNIX1ZFUlNJT04pCisJCWRpZShfKCJoYXNoIHZlcnNpb24gJXUgZG9lcyBub3QgbWF0Y2giKSwgaGFzaF92ZXJzaW9uKTsKKwltLT5oYXNoX2xlbiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCisJbS0+bnVtX2NodW5rcyA9IG0tPmRhdGFbTUlEWF9CWVRFX05VTV9DSFVOS1NdOworCisJbS0+bnVtX3BhY2tzID0gZ2V0X2JlMzIobS0+ZGF0YSArIE1JRFhfQllURV9OVU1fUEFDS1MpOworCisJZm9yIChpID0gMDsgaSA8IG0tPm51bV9jaHVua3M7IGkrKykgeworCQl1aW50MzJfdCBjaHVua19pZCA9IGdldF9iZTMyKG0tPmRhdGEgKyBNSURYX0hFQURFUl9TSVpFICsKKwkJCQkJICAgICBNSURYX0NIVU5LTE9PS1VQX1dJRFRIICogaSk7CisJCXVpbnQ2NF90IGNodW5rX29mZnNldCA9IGdldF9iZTY0KG0tPmRhdGEgKyBNSURYX0hFQURFUl9TSVpFICsgNCArCisJCQkJCQkgTUlEWF9DSFVOS0xPT0tVUF9XSURUSCAqIGkpOworCisJCWlmIChjaHVua19vZmZzZXQgPj0gbS0+ZGF0YV9sZW4pCisJCQlkaWUoXygiaW52YWxpZCBjaHVuayBvZmZzZXQgKHRvbyBsYXJnZSkiKSk7CisKKwkJc3dpdGNoIChjaHVua19pZCkgeworCQkJY2FzZSBNSURYX0NIVU5LSURfUEFDS05BTUVTOgorCQkJCW0tPmNodW5rX3BhY2tfbmFtZXMgPSBtLT5kYXRhICsgY2h1bmtfb2Zmc2V0OworCQkJCWJyZWFrOworCisJCQljYXNlIE1JRFhfQ0hVTktJRF9PSURGQU5PVVQ6CisJCQkJbS0+Y2h1bmtfb2lkX2Zhbm91dCA9ICh1aW50MzJfdCAqKShtLT5kYXRhICsgY2h1bmtfb2Zmc2V0KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBNSURYX0NIVU5LSURfT0lETE9PS1VQOgorCQkJCW0tPmNodW5rX29pZF9sb29rdXAgPSBtLT5kYXRhICsgY2h1bmtfb2Zmc2V0OworCQkJCWJyZWFrOworCisJCQljYXNlIE1JRFhfQ0hVTktJRF9PQkpFQ1RPRkZTRVRTOgorCQkJCW0tPmNodW5rX29iamVjdF9vZmZzZXRzID0gbS0+ZGF0YSArIGNodW5rX29mZnNldDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBNSURYX0NIVU5LSURfTEFSR0VPRkZTRVRTOgorCQkJCW0tPmNodW5rX2xhcmdlX29mZnNldHMgPSBtLT5kYXRhICsgY2h1bmtfb2Zmc2V0OworCQkJCWJyZWFrOworCisJCQljYXNlIDA6CisJCQkJZGllKF8oInRlcm1pbmF0aW5nIG11bHRpLXBhY2staW5kZXggY2h1bmsgaWQgYXBwZWFycyBlYXJsaWVyIHRoYW4gZXhwZWN0ZWQiKSk7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJLyoKKwkJCQkgKiBEbyBub3RoaW5nIG9uIHVucmVjb2duaXplZCBjaHVua3MsIGFsbG93aW5nIGZ1dHVyZQorCQkJCSAqIGV4dGVuc2lvbnMgdG8gYWRkIG9wdGlvbmFsIGNodW5rcy4KKwkJCQkgKi8KKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghbS0+Y2h1bmtfcGFja19uYW1lcykKKwkJZGllKF8oIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBwYWNrLW5hbWUgY2h1bmsiKSk7CisJaWYgKCFtLT5jaHVua19vaWRfZmFub3V0KQorCQlkaWUoXygibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBmYW5vdXQgY2h1bmsiKSk7CisJaWYgKCFtLT5jaHVua19vaWRfbG9va3VwKQorCQlkaWUoXygibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBsb29rdXAgY2h1bmsiKSk7CisJaWYgKCFtLT5jaHVua19vYmplY3Rfb2Zmc2V0cykKKwkJZGllKF8oIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBvYmplY3Qgb2Zmc2V0cyBjaHVuayIpKTsKKworCW0tPm51bV9vYmplY3RzID0gbnRvaGwobS0+Y2h1bmtfb2lkX2Zhbm91dFsyNTVdKTsKKworCW0tPnBhY2tfbmFtZXMgPSB4Y2FsbG9jKG0tPm51bV9wYWNrcywgc2l6ZW9mKCptLT5wYWNrX25hbWVzKSk7CisJbS0+cGFja3MgPSB4Y2FsbG9jKG0tPm51bV9wYWNrcywgc2l6ZW9mKCptLT5wYWNrcykpOworCisJY3VyX3BhY2tfbmFtZSA9IChjb25zdCBjaGFyICopbS0+Y2h1bmtfcGFja19uYW1lczsKKwlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX3BhY2tzOyBpKyspIHsKKwkJbS0+cGFja19uYW1lc1tpXSA9IGN1cl9wYWNrX25hbWU7CisKKwkJY3VyX3BhY2tfbmFtZSArPSBzdHJsZW4oY3VyX3BhY2tfbmFtZSkgKyAxOworCisJCWlmIChpICYmIHN0cmNtcChtLT5wYWNrX25hbWVzW2ldLCBtLT5wYWNrX25hbWVzW2kgLSAxXSkgPD0gMCkKKwkJCWRpZShfKCJtdWx0aS1wYWNrLWluZGV4IHBhY2sgbmFtZXMgb3V0IG9mIG9yZGVyOiAnJXMnIGJlZm9yZSAnJXMnIiksCisJCQkgICAgICBtLT5wYWNrX25hbWVzW2kgLSAxXSwKKwkJCSAgICAgIG0tPnBhY2tfbmFtZXNbaV0pOworCX0KKworCXRyYWNlMl9kYXRhX2ludG1heCgibWlkeCIsIHRoZV9yZXBvc2l0b3J5LCAibG9hZC9udW1fcGFja3MiLCBtLT5udW1fcGFja3MpOworCXRyYWNlMl9kYXRhX2ludG1heCgibWlkeCIsIHRoZV9yZXBvc2l0b3J5LCAibG9hZC9udW1fb2JqZWN0cyIsIG0tPm51bV9vYmplY3RzKTsKKworCXJldHVybiBtOworCitjbGVhbnVwX2ZhaWw6CisJZnJlZShtKTsKKwlmcmVlKG1pZHhfbmFtZSk7CisJaWYgKG1pZHhfbWFwKQorCQltdW5tYXAobWlkeF9tYXAsIG1pZHhfc2l6ZSk7CisJaWYgKDAgPD0gZmQpCisJCWNsb3NlKGZkKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBjbG9zZV9taWR4KHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptKQoreworCXVpbnQzMl90IGk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCW11bm1hcCgodW5zaWduZWQgY2hhciAqKW0tPmRhdGEsIG0tPmRhdGFfbGVuKTsKKworCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fcGFja3M7IGkrKykgeworCQlpZiAobS0+cGFja3NbaV0pCisJCQltLT5wYWNrc1tpXS0+bXVsdGlfcGFja19pbmRleCA9IDA7CisJfQorCUZSRUVfQU5EX05VTEwobS0+cGFja3MpOworCUZSRUVfQU5EX05VTEwobS0+cGFja19uYW1lcyk7Cit9CisKK2ludCBwcmVwYXJlX21pZHhfcGFjayhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sIHVpbnQzMl90IHBhY2tfaW50X2lkKQoreworCXN0cnVjdCBzdHJidWYgcGFja19uYW1lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisKKwlpZiAocGFja19pbnRfaWQgPj0gbS0+bnVtX3BhY2tzKQorCQlkaWUoXygiYmFkIHBhY2staW50LWlkOiAldSAoJXUgdG90YWwgcGFja3MpIiksCisJCSAgICBwYWNrX2ludF9pZCwgbS0+bnVtX3BhY2tzKTsKKworCWlmIChtLT5wYWNrc1twYWNrX2ludF9pZF0pCisJCXJldHVybiAwOworCisJc3RyYnVmX2FkZGYoJnBhY2tfbmFtZSwgIiVzL3BhY2svJXMiLCBtLT5vYmplY3RfZGlyLAorCQkgICAgbS0+cGFja19uYW1lc1twYWNrX2ludF9pZF0pOworCisJcCA9IGFkZF9wYWNrZWRfZ2l0KHBhY2tfbmFtZS5idWYsIHBhY2tfbmFtZS5sZW4sIG0tPmxvY2FsKTsKKwlzdHJidWZfcmVsZWFzZSgmcGFja19uYW1lKTsKKworCWlmICghcCkKKwkJcmV0dXJuIDE7CisKKwlwLT5tdWx0aV9wYWNrX2luZGV4ID0gMTsKKwltLT5wYWNrc1twYWNrX2ludF9pZF0gPSBwOworCWluc3RhbGxfcGFja2VkX2dpdChyLCBwKTsKKwlsaXN0X2FkZF90YWlsKCZwLT5tcnUsICZyLT5vYmplY3RzLT5wYWNrZWRfZ2l0X21ydSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGJzZWFyY2hfbWlkeChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLCB1aW50MzJfdCAqcmVzdWx0KQoreworCXJldHVybiBic2VhcmNoX2hhc2gob2lkLT5oYXNoLCBtLT5jaHVua19vaWRfZmFub3V0LCBtLT5jaHVua19vaWRfbG9va3VwLAorCQkJICAgIHRoZV9oYXNoX2FsZ28tPnJhd3N6LCByZXN1bHQpOworfQorCitzdHJ1Y3Qgb2JqZWN0X2lkICpudGhfbWlkeGVkX29iamVjdF9vaWQoc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwKKwkJCQkJdWludDMyX3QgbikKK3sKKwlpZiAobiA+PSBtLT5udW1fb2JqZWN0cykKKwkJcmV0dXJuIE5VTEw7CisKKwloYXNoY3B5KG9pZC0+aGFzaCwgbS0+Y2h1bmtfb2lkX2xvb2t1cCArIG0tPmhhc2hfbGVuICogbik7CisJcmV0dXJuIG9pZDsKK30KKworc3RhdGljIG9mZl90IG50aF9taWR4ZWRfb2Zmc2V0KHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLCB1aW50MzJfdCBwb3MpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqb2Zmc2V0X2RhdGE7CisJdWludDMyX3Qgb2Zmc2V0MzI7CisKKwlvZmZzZXRfZGF0YSA9IG0tPmNodW5rX29iamVjdF9vZmZzZXRzICsgcG9zICogTUlEWF9DSFVOS19PRkZTRVRfV0lEVEg7CisJb2Zmc2V0MzIgPSBnZXRfYmUzMihvZmZzZXRfZGF0YSArIHNpemVvZih1aW50MzJfdCkpOworCisJaWYgKG0tPmNodW5rX2xhcmdlX29mZnNldHMgJiYgb2Zmc2V0MzIgJiBNSURYX0xBUkdFX09GRlNFVF9ORUVERUQpIHsKKwkJaWYgKHNpemVvZihvZmZfdCkgPCBzaXplb2YodWludDY0X3QpKQorCQkJZGllKF8oIm11bHRpLXBhY2staW5kZXggc3RvcmVzIGEgNjQtYml0IG9mZnNldCwgYnV0IG9mZl90IGlzIHRvbyBzbWFsbCIpKTsKKworCQlvZmZzZXQzMiBePSBNSURYX0xBUkdFX09GRlNFVF9ORUVERUQ7CisJCXJldHVybiBnZXRfYmU2NChtLT5jaHVua19sYXJnZV9vZmZzZXRzICsgc2l6ZW9mKHVpbnQ2NF90KSAqIG9mZnNldDMyKTsKKwl9CisKKwlyZXR1cm4gb2Zmc2V0MzI7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBudGhfbWlkeGVkX3BhY2tfaW50X2lkKHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLCB1aW50MzJfdCBwb3MpCit7CisJcmV0dXJuIGdldF9iZTMyKG0tPmNodW5rX29iamVjdF9vZmZzZXRzICsgcG9zICogTUlEWF9DSFVOS19PRkZTRVRfV0lEVEgpOworfQorCitzdGF0aWMgaW50IG50aF9taWR4ZWRfcGFja19lbnRyeShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sCisJCQkJIHN0cnVjdCBwYWNrX2VudHJ5ICplLAorCQkJCSB1aW50MzJfdCBwb3MpCit7CisJdWludDMyX3QgcGFja19pbnRfaWQ7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisKKwlpZiAocG9zID49IG0tPm51bV9vYmplY3RzKQorCQlyZXR1cm4gMDsKKworCXBhY2tfaW50X2lkID0gbnRoX21pZHhlZF9wYWNrX2ludF9pZChtLCBwb3MpOworCisJaWYgKHByZXBhcmVfbWlkeF9wYWNrKHIsIG0sIHBhY2tfaW50X2lkKSkKKwkJZGllKF8oImVycm9yIHByZXBhcmluZyBwYWNrZmlsZSBmcm9tIG11bHRpLXBhY2staW5kZXgiKSk7CisJcCA9IG0tPnBhY2tzW3BhY2tfaW50X2lkXTsKKworCS8qCisJKiBXZSBhcmUgYWJvdXQgdG8gdGVsbCB0aGUgY2FsbGVyIHdoZXJlIHRoZXkgY2FuIGxvY2F0ZSB0aGUKKwkqIHJlcXVlc3RlZCBvYmplY3QuICBXZSBiZXR0ZXIgbWFrZSBzdXJlIHRoZSBwYWNrZmlsZSBpcworCSogc3RpbGwgaGVyZSBhbmQgY2FuIGJlIGFjY2Vzc2VkIGJlZm9yZSBzdXBwbHlpbmcgdGhhdAorCSogYW5zd2VyLCBhcyBpdCBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQgc2luY2UgdGhlIE1JRFggd2FzCisJKiBsb2FkZWQhCisJKi8KKwlpZiAoIWlzX3BhY2tfdmFsaWQocCkpCisJCXJldHVybiAwOworCisJaWYgKHAtPm51bV9iYWRfb2JqZWN0cykgeworCQl1aW50MzJfdCBpOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJbnRoX21pZHhlZF9vYmplY3Rfb2lkKCZvaWQsIG0sIHBvcyk7CisJCWZvciAoaSA9IDA7IGkgPCBwLT5udW1fYmFkX29iamVjdHM7IGkrKykKKwkJCWlmIChoYXNoZXEob2lkLmhhc2gsCisJCQkJICAgcC0+YmFkX29iamVjdF9zaGExICsgdGhlX2hhc2hfYWxnby0+cmF3c3ogKiBpKSkKKwkJCQlyZXR1cm4gMDsKKwl9CisKKwllLT5vZmZzZXQgPSBudGhfbWlkeGVkX29mZnNldChtLCBwb3MpOworCWUtPnAgPSBwOworCisJcmV0dXJuIDE7Cit9CisKK2ludCBmaWxsX21pZHhfZW50cnkoc3RydWN0IHJlcG9zaXRvcnkgKiByLAorCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgc3RydWN0IHBhY2tfZW50cnkgKmUsCisJCSAgICBzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSkKK3sKKwl1aW50MzJfdCBwb3M7CisKKwlpZiAoIWJzZWFyY2hfbWlkeChvaWQsIG0sICZwb3MpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBudGhfbWlkeGVkX3BhY2tfZW50cnkociwgbSwgZSwgcG9zKTsKK30KKworLyogTWF0Y2ggImZvby5pZHgiIGFnYWluc3QgZWl0aGVyICJmb28ucGFjayIgX29yXyAiZm9vLmlkeCIuICovCitzdGF0aWMgaW50IGNtcF9pZHhfb3JfcGFja19uYW1lKGNvbnN0IGNoYXIgKmlkeF9vcl9wYWNrX25hbWUsCisJCQkJY29uc3QgY2hhciAqaWR4X25hbWUpCit7CisJLyogU2tpcCBwYXN0IGFueSBpbml0aWFsIG1hdGNoaW5nIHByZWZpeC4gKi8KKwl3aGlsZSAoKmlkeF9uYW1lICYmICppZHhfbmFtZSA9PSAqaWR4X29yX3BhY2tfbmFtZSkgeworCQlpZHhfbmFtZSsrOworCQlpZHhfb3JfcGFja19uYW1lKys7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBkaWRuJ3QgbWF0Y2ggY29tcGxldGVseSwgd2UgbWF5IGhhdmUgbWF0Y2hlZCAicGFjay0xMjM0LiIgYW5kCisJICogYmUgbGVmdCB3aXRoICJpZHgiIGFuZCAicGFjayIgcmVzcGVjdGl2ZWx5LCB3aGljaCBpcyBhbHNvIE9LLiBXZSBkbworCSAqIG5vdCBoYXZlIHRvIGNoZWNrIGZvciAiaWR4IiBhbmQgImlkeCIsIGJlY2F1c2UgdGhhdCB3b3VsZCBoYXZlIGJlZW4KKwkgKiBhIGNvbXBsZXRlIG1hdGNoIChhbmQgaW4gdGhhdCBjYXNlIHRoZXNlIHN0cmNtcHMgd2lsbCBiZSBmYWxzZSwgYnV0CisJICogd2UnbGwgY29ycmVjdGx5IHJldHVybiAwIGZyb20gdGhlIGZpbmFsIHN0cmNtcCgpIGJlbG93LgorCSAqCisJICogVGVjaG5pY2FsbHkgdGhpcyBtYXRjaGVzICJmb29pZHgiIGFuZCAiZm9vcGFjayIsIGJ1dCB3ZSdkIG5ldmVyIGhhdmUKKwkgKiBzdWNoIG5hbWVzIGluIHRoZSBmaXJzdCBwbGFjZS4KKwkgKi8KKwlpZiAoIXN0cmNtcChpZHhfbmFtZSwgImlkeCIpICYmICFzdHJjbXAoaWR4X29yX3BhY2tfbmFtZSwgInBhY2siKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFRoaXMgbm90IG9ubHkgY2hlY2tzIGZvciBhIGNvbXBsZXRlIG1hdGNoLCBidXQgYWxzbyBvcmRlcnMgYmFzZWQgb24KKwkgKiB0aGUgZmlyc3Qgbm9uLWlkZW50aWNhbCBjaGFyYWN0ZXIsIHdoaWNoIG1lYW5zIG91ciBvcmRlcmluZyB3aWxsCisJICogbWF0Y2ggYSByYXcgc3RyY21wKCkuIFRoYXQgbWFrZXMgaXQgT0sgdG8gdXNlIHRoaXMgdG8gYmluYXJ5IHNlYXJjaAorCSAqIGEgbmFpdmVseS1zb3J0ZWQgbGlzdC4KKwkgKi8KKwlyZXR1cm4gc3RyY21wKGlkeF9vcl9wYWNrX25hbWUsIGlkeF9uYW1lKTsKK30KKworaW50IG1pZHhfY29udGFpbnNfcGFjayhzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwgY29uc3QgY2hhciAqaWR4X29yX3BhY2tfbmFtZSkKK3sKKwl1aW50MzJfdCBmaXJzdCA9IDAsIGxhc3QgPSBtLT5udW1fcGFja3M7CisKKwl3aGlsZSAoZmlyc3QgPCBsYXN0KSB7CisJCXVpbnQzMl90IG1pZCA9IGZpcnN0ICsgKGxhc3QgLSBmaXJzdCkgLyAyOworCQljb25zdCBjaGFyICpjdXJyZW50OworCQlpbnQgY21wOworCisJCWN1cnJlbnQgPSBtLT5wYWNrX25hbWVzW21pZF07CisJCWNtcCA9IGNtcF9pZHhfb3JfcGFja19uYW1lKGlkeF9vcl9wYWNrX25hbWUsIGN1cnJlbnQpOworCQlpZiAoIWNtcCkKKwkJCXJldHVybiAxOworCQlpZiAoY21wID4gMCkgeworCQkJZmlyc3QgPSBtaWQgKyAxOworCQkJY29udGludWU7CisJCX0KKwkJbGFzdCA9IG1pZDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHByZXBhcmVfbXVsdGlfcGFja19pbmRleF9vbmUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIGludCBsb2NhbCkKK3sKKwlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbTsKKwlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbV9zZWFyY2g7CisJaW50IGNvbmZpZ192YWx1ZTsKKwlzdGF0aWMgaW50IGVudl92YWx1ZSA9IC0xOworCisJaWYgKGVudl92YWx1ZSA8IDApCisJCWVudl92YWx1ZSA9IGdpdF9lbnZfYm9vbChHSVRfVEVTVF9NVUxUSV9QQUNLX0lOREVYLCAwKTsKKworCWlmICghZW52X3ZhbHVlICYmCisJICAgIChyZXBvX2NvbmZpZ19nZXRfYm9vbChyLCAiY29yZS5tdWx0aXBhY2tpbmRleCIsICZjb25maWdfdmFsdWUpIHx8CisJICAgICFjb25maWdfdmFsdWUpKQorCQlyZXR1cm4gMDsKKworCWZvciAobV9zZWFyY2ggPSByLT5vYmplY3RzLT5tdWx0aV9wYWNrX2luZGV4OyBtX3NlYXJjaDsgbV9zZWFyY2ggPSBtX3NlYXJjaC0+bmV4dCkKKwkJaWYgKCFzdHJjbXAob2JqZWN0X2RpciwgbV9zZWFyY2gtPm9iamVjdF9kaXIpKQorCQkJcmV0dXJuIDE7CisKKwltID0gbG9hZF9tdWx0aV9wYWNrX2luZGV4KG9iamVjdF9kaXIsIGxvY2FsKTsKKworCWlmIChtKSB7CisJCW0tPm5leHQgPSByLT5vYmplY3RzLT5tdWx0aV9wYWNrX2luZGV4OworCQlyLT5vYmplY3RzLT5tdWx0aV9wYWNrX2luZGV4ID0gbTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzaXplX3Qgd3JpdGVfbWlkeF9oZWFkZXIoc3RydWN0IGhhc2hmaWxlICpmLAorCQkJCXVuc2lnbmVkIGNoYXIgbnVtX2NodW5rcywKKwkJCQl1aW50MzJfdCBudW1fcGFja3MpCit7CisJdW5zaWduZWQgY2hhciBieXRlX3ZhbHVlc1s0XTsKKworCWhhc2h3cml0ZV9iZTMyKGYsIE1JRFhfU0lHTkFUVVJFKTsKKwlieXRlX3ZhbHVlc1swXSA9IE1JRFhfVkVSU0lPTjsKKwlieXRlX3ZhbHVlc1sxXSA9IE1JRFhfSEFTSF9WRVJTSU9OOworCWJ5dGVfdmFsdWVzWzJdID0gbnVtX2NodW5rczsKKwlieXRlX3ZhbHVlc1szXSA9IDA7IC8qIHVudXNlZCAqLworCWhhc2h3cml0ZShmLCBieXRlX3ZhbHVlcywgc2l6ZW9mKGJ5dGVfdmFsdWVzKSk7CisJaGFzaHdyaXRlX2JlMzIoZiwgbnVtX3BhY2tzKTsKKworCXJldHVybiBNSURYX0hFQURFUl9TSVpFOworfQorCitzdHJ1Y3QgcGFja19pbmZvIHsKKwl1aW50MzJfdCBvcmlnX3BhY2tfaW50X2lkOworCWNoYXIgKnBhY2tfbmFtZTsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwl1bnNpZ25lZCBleHBpcmVkIDogMTsKK307CisKK3N0YXRpYyBpbnQgcGFja19pbmZvX2NvbXBhcmUoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQoreworCXN0cnVjdCBwYWNrX2luZm8gKmEgPSAoc3RydWN0IHBhY2tfaW5mbyAqKV9hOworCXN0cnVjdCBwYWNrX2luZm8gKmIgPSAoc3RydWN0IHBhY2tfaW5mbyAqKV9iOworCXJldHVybiBzdHJjbXAoYS0+cGFja19uYW1lLCBiLT5wYWNrX25hbWUpOworfQorCitzdHJ1Y3QgcGFja19saXN0IHsKKwlzdHJ1Y3QgcGFja19pbmZvICppbmZvOworCXVpbnQzMl90IG5yOworCXVpbnQzMl90IGFsbG9jOworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CisJdW5zaWduZWQgcGFja19wYXRoc19jaGVja2VkOworfTsKKworc3RhdGljIHZvaWQgYWRkX3BhY2tfdG9fbWlkeChjb25zdCBjaGFyICpmdWxsX3BhdGgsIHNpemVfdCBmdWxsX3BhdGhfbGVuLAorCQkJICAgICBjb25zdCBjaGFyICpmaWxlX25hbWUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBhY2tfbGlzdCAqcGFja3MgPSAoc3RydWN0IHBhY2tfbGlzdCAqKWRhdGE7CisKKwlpZiAoZW5kc193aXRoKGZpbGVfbmFtZSwgIi5pZHgiKSkgeworCQlkaXNwbGF5X3Byb2dyZXNzKHBhY2tzLT5wcm9ncmVzcywgKytwYWNrcy0+cGFja19wYXRoc19jaGVja2VkKTsKKwkJaWYgKHBhY2tzLT5tICYmIG1pZHhfY29udGFpbnNfcGFjayhwYWNrcy0+bSwgZmlsZV9uYW1lKSkKKwkJCXJldHVybjsKKworCQlBTExPQ19HUk9XKHBhY2tzLT5pbmZvLCBwYWNrcy0+bnIgKyAxLCBwYWNrcy0+YWxsb2MpOworCisJCXBhY2tzLT5pbmZvW3BhY2tzLT5ucl0ucCA9IGFkZF9wYWNrZWRfZ2l0KGZ1bGxfcGF0aCwKKwkJCQkJCQkgIGZ1bGxfcGF0aF9sZW4sCisJCQkJCQkJICAwKTsKKworCQlpZiAoIXBhY2tzLT5pbmZvW3BhY2tzLT5ucl0ucCkgeworCQkJd2FybmluZyhfKCJmYWlsZWQgdG8gYWRkIHBhY2tmaWxlICclcyciKSwKKwkJCQlmdWxsX3BhdGgpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKG9wZW5fcGFja19pbmRleChwYWNrcy0+aW5mb1twYWNrcy0+bnJdLnApKSB7CisJCQl3YXJuaW5nKF8oImZhaWxlZCB0byBvcGVuIHBhY2staW5kZXggJyVzJyIpLAorCQkJCWZ1bGxfcGF0aCk7CisJCQljbG9zZV9wYWNrKHBhY2tzLT5pbmZvW3BhY2tzLT5ucl0ucCk7CisJCQlGUkVFX0FORF9OVUxMKHBhY2tzLT5pbmZvW3BhY2tzLT5ucl0ucCk7CisJCQlyZXR1cm47CisJCX0KKworCQlwYWNrcy0+aW5mb1twYWNrcy0+bnJdLnBhY2tfbmFtZSA9IHhzdHJkdXAoZmlsZV9uYW1lKTsKKwkJcGFja3MtPmluZm9bcGFja3MtPm5yXS5vcmlnX3BhY2tfaW50X2lkID0gcGFja3MtPm5yOworCQlwYWNrcy0+aW5mb1twYWNrcy0+bnJdLmV4cGlyZWQgPSAwOworCQlwYWNrcy0+bnIrKzsKKwl9Cit9CisKK3N0cnVjdCBwYWNrX21pZHhfZW50cnkgeworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXVpbnQzMl90IHBhY2tfaW50X2lkOworCXRpbWVfdCBwYWNrX210aW1lOworCXVpbnQ2NF90IG9mZnNldDsKK307CisKK3N0YXRpYyBpbnQgbWlkeF9vaWRfY29tcGFyZShjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJY29uc3Qgc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqYSA9IChjb25zdCBzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICopX2E7CisJY29uc3Qgc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqYiA9IChjb25zdCBzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICopX2I7CisJaW50IGNtcCA9IG9pZGNtcCgmYS0+b2lkLCAmYi0+b2lkKTsKKworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisKKwlpZiAoYS0+cGFja19tdGltZSA+IGItPnBhY2tfbXRpbWUpCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChhLT5wYWNrX210aW1lIDwgYi0+cGFja19tdGltZSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gYS0+cGFja19pbnRfaWQgLSBiLT5wYWNrX2ludF9pZDsKK30KKworc3RhdGljIGludCBudGhfbWlkeGVkX3BhY2tfbWlkeF9lbnRyeShzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwKKwkJCQkgICAgICBzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICplLAorCQkJCSAgICAgIHVpbnQzMl90IHBvcykKK3sKKwlpZiAocG9zID49IG0tPm51bV9vYmplY3RzKQorCQlyZXR1cm4gMTsKKworCW50aF9taWR4ZWRfb2JqZWN0X29pZCgmZS0+b2lkLCBtLCBwb3MpOworCWUtPnBhY2tfaW50X2lkID0gbnRoX21pZHhlZF9wYWNrX2ludF9pZChtLCBwb3MpOworCWUtPm9mZnNldCA9IG50aF9taWR4ZWRfb2Zmc2V0KG0sIHBvcyk7CisKKwkvKiBjb25zaWRlciBvYmplY3RzIGluIG1pZHggdG8gYmUgZnJvbSAib2xkIiBwYWNrcyAqLworCWUtPnBhY2tfbXRpbWUgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmaWxsX3BhY2tfZW50cnkodWludDMyX3QgcGFja19pbnRfaWQsCisJCQkgICAgc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkgICAgdWludDMyX3QgY3VyX29iamVjdCwKKwkJCSAgICBzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICplbnRyeSkKK3sKKwlpZiAobnRoX3BhY2tlZF9vYmplY3RfaWQoJmVudHJ5LT5vaWQsIHAsIGN1cl9vYmplY3QpIDwgMCkKKwkJZGllKF8oImZhaWxlZCB0byBsb2NhdGUgb2JqZWN0ICVkIGluIHBhY2tmaWxlIiksIGN1cl9vYmplY3QpOworCisJZW50cnktPnBhY2tfaW50X2lkID0gcGFja19pbnRfaWQ7CisJZW50cnktPnBhY2tfbXRpbWUgPSBwLT5tdGltZTsKKworCWVudHJ5LT5vZmZzZXQgPSBudGhfcGFja2VkX29iamVjdF9vZmZzZXQocCwgY3VyX29iamVjdCk7Cit9CisKKy8qCisgKiBJdCBpcyBwb3NzaWJsZSB0byBhcnRpZmljaWFsbHkgZ2V0IGludG8gYSBzdGF0ZSB3aGVyZSB0aGVyZSBhcmUgbWFueQorICogZHVwbGljYXRlIGNvcGllcyBvZiBvYmplY3RzLiBUaGF0IGNhbiBjcmVhdGUgaGlnaCBtZW1vcnkgcHJlc3N1cmUgaWYKKyAqIHdlIGFyZSB0byBjcmVhdGUgYSBsaXN0IG9mIGFsbCBvYmplY3RzIGJlZm9yZSBkZS1kdXBsaWNhdGlvbi4gVG8gcmVkdWNlCisgKiB0aGlzIG1lbW9yeSBwcmVzc3VyZSB3aXRob3V0IGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgZHJvcCwgYXV0b21hdGljYWxseQorICogZ3JvdXAgb2JqZWN0cyBieSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGVpciBvYmplY3QgaWQuIFVzZSB0aGUgSURYIGZhbm91dAorICogdGFibGVzIHRvIGdyb3VwIHRoZSBkYXRhLCBjb3B5IHRvIGEgbG9jYWwgYXJyYXksIHRoZW4gc29ydC4KKyAqCisgKiBDb3B5IG9ubHkgdGhlIGRlLWR1cGxpY2F0ZWQgZW50cmllcyAoc2VsZWN0ZWQgYnkgbW9zdC1yZWNlbnQgbW9kaWZpZWQgdGltZQorICogb2YgYSBwYWNrZmlsZSBjb250YWluaW5nIHRoZSBvYmplY3QpLgorICovCitzdGF0aWMgc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqZ2V0X3NvcnRlZF9lbnRyaWVzKHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLAorCQkJCQkJICBzdHJ1Y3QgcGFja19pbmZvICppbmZvLAorCQkJCQkJICB1aW50MzJfdCBucl9wYWNrcywKKwkJCQkJCSAgdWludDMyX3QgKm5yX29iamVjdHMpCit7CisJdWludDMyX3QgY3VyX2Zhbm91dCwgY3VyX3BhY2ssIGN1cl9vYmplY3Q7CisJdWludDMyX3QgYWxsb2NfZmFub3V0LCBhbGxvY19vYmplY3RzLCB0b3RhbF9vYmplY3RzID0gMDsKKwlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICplbnRyaWVzX2J5X2Zhbm91dCA9IE5VTEw7CisJc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqZGVkdXBsaWNhdGVkX2VudHJpZXMgPSBOVUxMOworCXVpbnQzMl90IHN0YXJ0X3BhY2sgPSBtID8gbS0+bnVtX3BhY2tzIDogMDsKKworCWZvciAoY3VyX3BhY2sgPSBzdGFydF9wYWNrOyBjdXJfcGFjayA8IG5yX3BhY2tzOyBjdXJfcGFjaysrKQorCQl0b3RhbF9vYmplY3RzICs9IGluZm9bY3VyX3BhY2tdLnAtPm51bV9vYmplY3RzOworCisJLyoKKwkgKiBBcyB3ZSBkZS1kdXBsaWNhdGUgYnkgZmFub3V0IHZhbHVlLCB3ZSBleHBlY3QgdGhlIGZhbm91dAorCSAqIHNsaWNlcyB0byBiZSBldmVubHkgZGlzdHJpYnV0ZWQsIHdpdGggc29tZSBub2lzZS4gSGVuY2UsCisJICogYWxsb2NhdGUgc2xpZ2h0bHkgbW9yZSB0aGFuIG9uZSAyNTZ0aC4KKwkgKi8KKwlhbGxvY19vYmplY3RzID0gYWxsb2NfZmFub3V0ID0gdG90YWxfb2JqZWN0cyA+IDMyMDAgPyB0b3RhbF9vYmplY3RzIC8gMjAwIDogMTY7CisKKwlBTExPQ19BUlJBWShlbnRyaWVzX2J5X2Zhbm91dCwgYWxsb2NfZmFub3V0KTsKKwlBTExPQ19BUlJBWShkZWR1cGxpY2F0ZWRfZW50cmllcywgYWxsb2Nfb2JqZWN0cyk7CisJKm5yX29iamVjdHMgPSAwOworCisJZm9yIChjdXJfZmFub3V0ID0gMDsgY3VyX2Zhbm91dCA8IDI1NjsgY3VyX2Zhbm91dCsrKSB7CisJCXVpbnQzMl90IG5yX2Zhbm91dCA9IDA7CisKKwkJaWYgKG0pIHsKKwkJCXVpbnQzMl90IHN0YXJ0ID0gMCwgZW5kOworCisJCQlpZiAoY3VyX2Zhbm91dCkKKwkJCQlzdGFydCA9IG50b2hsKG0tPmNodW5rX29pZF9mYW5vdXRbY3VyX2Zhbm91dCAtIDFdKTsKKwkJCWVuZCA9IG50b2hsKG0tPmNodW5rX29pZF9mYW5vdXRbY3VyX2Zhbm91dF0pOworCisJCQlmb3IgKGN1cl9vYmplY3QgPSBzdGFydDsgY3VyX29iamVjdCA8IGVuZDsgY3VyX29iamVjdCsrKSB7CisJCQkJQUxMT0NfR1JPVyhlbnRyaWVzX2J5X2Zhbm91dCwgbnJfZmFub3V0ICsgMSwgYWxsb2NfZmFub3V0KTsKKwkJCQludGhfbWlkeGVkX3BhY2tfbWlkeF9lbnRyeShtLAorCQkJCQkJCSAgICZlbnRyaWVzX2J5X2Zhbm91dFtucl9mYW5vdXRdLAorCQkJCQkJCSAgIGN1cl9vYmplY3QpOworCQkJCW5yX2Zhbm91dCsrOworCQkJfQorCQl9CisKKwkJZm9yIChjdXJfcGFjayA9IHN0YXJ0X3BhY2s7IGN1cl9wYWNrIDwgbnJfcGFja3M7IGN1cl9wYWNrKyspIHsKKwkJCXVpbnQzMl90IHN0YXJ0ID0gMCwgZW5kOworCisJCQlpZiAoY3VyX2Zhbm91dCkKKwkJCQlzdGFydCA9IGdldF9wYWNrX2Zhbm91dChpbmZvW2N1cl9wYWNrXS5wLCBjdXJfZmFub3V0IC0gMSk7CisJCQllbmQgPSBnZXRfcGFja19mYW5vdXQoaW5mb1tjdXJfcGFja10ucCwgY3VyX2Zhbm91dCk7CisKKwkJCWZvciAoY3VyX29iamVjdCA9IHN0YXJ0OyBjdXJfb2JqZWN0IDwgZW5kOyBjdXJfb2JqZWN0KyspIHsKKwkJCQlBTExPQ19HUk9XKGVudHJpZXNfYnlfZmFub3V0LCBucl9mYW5vdXQgKyAxLCBhbGxvY19mYW5vdXQpOworCQkJCWZpbGxfcGFja19lbnRyeShjdXJfcGFjaywgaW5mb1tjdXJfcGFja10ucCwgY3VyX29iamVjdCwgJmVudHJpZXNfYnlfZmFub3V0W25yX2Zhbm91dF0pOworCQkJCW5yX2Zhbm91dCsrOworCQkJfQorCQl9CisKKwkJUVNPUlQoZW50cmllc19ieV9mYW5vdXQsIG5yX2Zhbm91dCwgbWlkeF9vaWRfY29tcGFyZSk7CisKKwkJLyoKKwkJICogVGhlIGJhdGNoIGlzIG5vdyBzb3J0ZWQgYnkgT0lEIGFuZCB0aGVuIG10aW1lIChkZXNjZW5kaW5nKS4KKwkJICogVGFrZSBvbmx5IHRoZSBmaXJzdCBkdXBsaWNhdGUuCisJCSAqLworCQlmb3IgKGN1cl9vYmplY3QgPSAwOyBjdXJfb2JqZWN0IDwgbnJfZmFub3V0OyBjdXJfb2JqZWN0KyspIHsKKwkJCWlmIChjdXJfb2JqZWN0ICYmIG9pZGVxKCZlbnRyaWVzX2J5X2Zhbm91dFtjdXJfb2JqZWN0IC0gMV0ub2lkLAorCQkJCQkJJmVudHJpZXNfYnlfZmFub3V0W2N1cl9vYmplY3RdLm9pZCkpCisJCQkJY29udGludWU7CisKKwkJCUFMTE9DX0dST1coZGVkdXBsaWNhdGVkX2VudHJpZXMsICpucl9vYmplY3RzICsgMSwgYWxsb2Nfb2JqZWN0cyk7CisJCQltZW1jcHkoJmRlZHVwbGljYXRlZF9lbnRyaWVzWypucl9vYmplY3RzXSwKKwkJCSAgICAgICAmZW50cmllc19ieV9mYW5vdXRbY3VyX29iamVjdF0sCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwYWNrX21pZHhfZW50cnkpKTsKKwkJCSgqbnJfb2JqZWN0cykrKzsKKwkJfQorCX0KKworCWZyZWUoZW50cmllc19ieV9mYW5vdXQpOworCXJldHVybiBkZWR1cGxpY2F0ZWRfZW50cmllczsKK30KKworc3RhdGljIHNpemVfdCB3cml0ZV9taWR4X3BhY2tfbmFtZXMoc3RydWN0IGhhc2hmaWxlICpmLAorCQkJCSAgICBzdHJ1Y3QgcGFja19pbmZvICppbmZvLAorCQkJCSAgICB1aW50MzJfdCBudW1fcGFja3MpCit7CisJdWludDMyX3QgaTsKKwl1bnNpZ25lZCBjaGFyIHBhZGRpbmdbTUlEWF9DSFVOS19BTElHTk1FTlRdOworCXNpemVfdCB3cml0dGVuID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFja3M7IGkrKykgeworCQlzaXplX3Qgd3JpdGVsZW47CisKKwkJaWYgKGluZm9baV0uZXhwaXJlZCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpICYmIHN0cmNtcChpbmZvW2ldLnBhY2tfbmFtZSwgaW5mb1tpIC0gMV0ucGFja19uYW1lKSA8PSAwKQorCQkJQlVHKCJpbmNvcnJlY3QgcGFjay1maWxlIG9yZGVyOiAlcyBiZWZvcmUgJXMiLAorCQkJICAgIGluZm9baSAtIDFdLnBhY2tfbmFtZSwKKwkJCSAgICBpbmZvW2ldLnBhY2tfbmFtZSk7CisKKwkJd3JpdGVsZW4gPSBzdHJsZW4oaW5mb1tpXS5wYWNrX25hbWUpICsgMTsKKwkJaGFzaHdyaXRlKGYsIGluZm9baV0ucGFja19uYW1lLCB3cml0ZWxlbik7CisJCXdyaXR0ZW4gKz0gd3JpdGVsZW47CisJfQorCisJLyogYWRkIHBhZGRpbmcgdG8gYmUgYWxpZ25lZCAqLworCWkgPSBNSURYX0NIVU5LX0FMSUdOTUVOVCAtICh3cml0dGVuICUgTUlEWF9DSFVOS19BTElHTk1FTlQpOworCWlmIChpIDwgTUlEWF9DSFVOS19BTElHTk1FTlQpIHsKKwkJbWVtc2V0KHBhZGRpbmcsIDAsIHNpemVvZihwYWRkaW5nKSk7CisJCWhhc2h3cml0ZShmLCBwYWRkaW5nLCBpKTsKKwkJd3JpdHRlbiArPSBpOworCX0KKworCXJldHVybiB3cml0dGVuOworfQorCitzdGF0aWMgc2l6ZV90IHdyaXRlX21pZHhfb2lkX2Zhbm91dChzdHJ1Y3QgaGFzaGZpbGUgKmYsCisJCQkJICAgIHN0cnVjdCBwYWNrX21pZHhfZW50cnkgKm9iamVjdHMsCisJCQkJICAgIHVpbnQzMl90IG5yX29iamVjdHMpCit7CisJc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqbGlzdCA9IG9iamVjdHM7CisJc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqbGFzdCA9IG9iamVjdHMgKyBucl9vYmplY3RzOworCXVpbnQzMl90IGNvdW50ID0gMDsKKwl1aW50MzJfdCBpOworCisJLyoKKwkqIFdyaXRlIHRoZSBmaXJzdC1sZXZlbCB0YWJsZSAodGhlIGxpc3QgaXMgc29ydGVkLAorCSogYnV0IHdlIHVzZSBhIDI1Ni1lbnRyeSBsb29rdXAgdG8gYmUgYWJsZSB0byBhdm9pZAorCSogaGF2aW5nIHRvIGRvIGVpZ2h0IGV4dHJhIGJpbmFyeSBzZWFyY2ggaXRlcmF0aW9ucykuCisJKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqbmV4dCA9IGxpc3Q7CisKKwkJd2hpbGUgKG5leHQgPCBsYXN0ICYmIG5leHQtPm9pZC5oYXNoWzBdID09IGkpIHsKKwkJCWNvdW50Kys7CisJCQluZXh0Kys7CisJCX0KKworCQloYXNod3JpdGVfYmUzMihmLCBjb3VudCk7CisJCWxpc3QgPSBuZXh0OworCX0KKworCXJldHVybiBNSURYX0NIVU5LX0ZBTk9VVF9TSVpFOworfQorCitzdGF0aWMgc2l6ZV90IHdyaXRlX21pZHhfb2lkX2xvb2t1cChzdHJ1Y3QgaGFzaGZpbGUgKmYsIHVuc2lnbmVkIGNoYXIgaGFzaF9sZW4sCisJCQkJICAgIHN0cnVjdCBwYWNrX21pZHhfZW50cnkgKm9iamVjdHMsCisJCQkJICAgIHVpbnQzMl90IG5yX29iamVjdHMpCit7CisJc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqbGlzdCA9IG9iamVjdHM7CisJdWludDMyX3QgaTsKKwlzaXplX3Qgd3JpdHRlbiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCXN0cnVjdCBwYWNrX21pZHhfZW50cnkgKm9iaiA9IGxpc3QrKzsKKworCQlpZiAoaSA8IG5yX29iamVjdHMgLSAxKSB7CisJCQlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICpuZXh0ID0gbGlzdDsKKwkJCWlmIChvaWRjbXAoJm9iai0+b2lkLCAmbmV4dC0+b2lkKSA+PSAwKQorCQkJCUJVRygiT0lEcyBub3QgaW4gb3JkZXI6ICVzID49ICVzIiwKKwkJCQkgICAgb2lkX3RvX2hleCgmb2JqLT5vaWQpLAorCQkJCSAgICBvaWRfdG9faGV4KCZuZXh0LT5vaWQpKTsKKwkJfQorCisJCWhhc2h3cml0ZShmLCBvYmotPm9pZC5oYXNoLCAoaW50KWhhc2hfbGVuKTsKKwkJd3JpdHRlbiArPSBoYXNoX2xlbjsKKwl9CisKKwlyZXR1cm4gd3JpdHRlbjsKK30KKworc3RhdGljIHNpemVfdCB3cml0ZV9taWR4X29iamVjdF9vZmZzZXRzKHN0cnVjdCBoYXNoZmlsZSAqZiwgaW50IGxhcmdlX29mZnNldF9uZWVkZWQsCisJCQkJCXVpbnQzMl90ICpwZXJtLAorCQkJCQlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICpvYmplY3RzLCB1aW50MzJfdCBucl9vYmplY3RzKQoreworCXN0cnVjdCBwYWNrX21pZHhfZW50cnkgKmxpc3QgPSBvYmplY3RzOworCXVpbnQzMl90IGksIG5yX2xhcmdlX29mZnNldCA9IDA7CisJc2l6ZV90IHdyaXR0ZW4gPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICpvYmogPSBsaXN0Kys7CisKKwkJaWYgKHBlcm1bb2JqLT5wYWNrX2ludF9pZF0gPT0gUEFDS19FWFBJUkVEKQorCQkJQlVHKCJvYmplY3QgJXMgaXMgaW4gYW4gZXhwaXJlZCBwYWNrIHdpdGggaW50LWlkICVkIiwKKwkJCSAgICBvaWRfdG9faGV4KCZvYmotPm9pZCksCisJCQkgICAgb2JqLT5wYWNrX2ludF9pZCk7CisKKwkJaGFzaHdyaXRlX2JlMzIoZiwgcGVybVtvYmotPnBhY2tfaW50X2lkXSk7CisKKwkJaWYgKGxhcmdlX29mZnNldF9uZWVkZWQgJiYgb2JqLT5vZmZzZXQgPj4gMzEpCisJCQloYXNod3JpdGVfYmUzMihmLCBNSURYX0xBUkdFX09GRlNFVF9ORUVERUQgfCBucl9sYXJnZV9vZmZzZXQrKyk7CisJCWVsc2UgaWYgKCFsYXJnZV9vZmZzZXRfbmVlZGVkICYmIG9iai0+b2Zmc2V0ID4+IDMyKQorCQkJQlVHKCJvYmplY3QgJXMgcmVxdWlyZXMgYSBsYXJnZSBvZmZzZXQgKCUiUFJJeDY0IikgYnV0IHRoZSBNSURYIGlzIG5vdCB3cml0aW5nIGxhcmdlIG9mZnNldHMhIiwKKwkJCSAgICBvaWRfdG9faGV4KCZvYmotPm9pZCksCisJCQkgICAgb2JqLT5vZmZzZXQpOworCQllbHNlCisJCQloYXNod3JpdGVfYmUzMihmLCAodWludDMyX3Qpb2JqLT5vZmZzZXQpOworCisJCXdyaXR0ZW4gKz0gTUlEWF9DSFVOS19PRkZTRVRfV0lEVEg7CisJfQorCisJcmV0dXJuIHdyaXR0ZW47Cit9CisKK3N0YXRpYyBzaXplX3Qgd3JpdGVfbWlkeF9sYXJnZV9vZmZzZXRzKHN0cnVjdCBoYXNoZmlsZSAqZiwgdWludDMyX3QgbnJfbGFyZ2Vfb2Zmc2V0LAorCQkJCSAgICAgICBzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICpvYmplY3RzLCB1aW50MzJfdCBucl9vYmplY3RzKQoreworCXN0cnVjdCBwYWNrX21pZHhfZW50cnkgKmxpc3QgPSBvYmplY3RzLCAqZW5kID0gb2JqZWN0cyArIG5yX29iamVjdHM7CisJc2l6ZV90IHdyaXR0ZW4gPSAwOworCisJd2hpbGUgKG5yX2xhcmdlX29mZnNldCkgeworCQlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICpvYmo7CisJCXVpbnQ2NF90IG9mZnNldDsKKworCQlpZiAobGlzdCA+PSBlbmQpCisJCQlCVUcoInRvbyBtYW55IGxhcmdlLW9mZnNldCBvYmplY3RzIik7CisKKwkJb2JqID0gbGlzdCsrOworCQlvZmZzZXQgPSBvYmotPm9mZnNldDsKKworCQlpZiAoIShvZmZzZXQgPj4gMzEpKQorCQkJY29udGludWU7CisKKwkJaGFzaHdyaXRlX2JlMzIoZiwgb2Zmc2V0ID4+IDMyKTsKKwkJaGFzaHdyaXRlX2JlMzIoZiwgb2Zmc2V0ICYgMHhmZmZmZmZmZlVMKTsKKwkJd3JpdHRlbiArPSAyICogc2l6ZW9mKHVpbnQzMl90KTsKKworCQlucl9sYXJnZV9vZmZzZXQtLTsKKwl9CisKKwlyZXR1cm4gd3JpdHRlbjsKK30KKworc3RhdGljIGludCB3cml0ZV9taWR4X2ludGVybmFsKGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLAorCQkJICAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqcGFja3NfdG9fZHJvcCwgdW5zaWduZWQgZmxhZ3MpCit7CisJdW5zaWduZWQgY2hhciBjdXJfY2h1bmssIG51bV9jaHVua3MgPSAwOworCWNoYXIgKm1pZHhfbmFtZTsKKwl1aW50MzJfdCBpOworCXN0cnVjdCBoYXNoZmlsZSAqZiA9IE5VTEw7CisJc3RydWN0IGxvY2tfZmlsZSBsazsKKwlzdHJ1Y3QgcGFja19saXN0IHBhY2tzOworCXVpbnQzMl90ICpwYWNrX3Blcm0gPSBOVUxMOworCXVpbnQ2NF90IHdyaXR0ZW4gPSAwOworCXVpbnQzMl90IGNodW5rX2lkc1tNSURYX01BWF9DSFVOS1MgKyAxXTsKKwl1aW50NjRfdCBjaHVua19vZmZzZXRzW01JRFhfTUFYX0NIVU5LUyArIDFdOworCXVpbnQzMl90IG5yX2VudHJpZXMsIG51bV9sYXJnZV9vZmZzZXRzID0gMDsKKwlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICplbnRyaWVzID0gTlVMTDsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKKwlpbnQgbGFyZ2Vfb2Zmc2V0c19uZWVkZWQgPSAwOworCWludCBwYWNrX25hbWVfY29uY2F0X2xlbiA9IDA7CisJaW50IGRyb3BwZWRfcGFja3MgPSAwOworCWludCByZXN1bHQgPSAwOworCisJbWlkeF9uYW1lID0gZ2V0X21pZHhfZmlsZW5hbWUob2JqZWN0X2Rpcik7CisJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMobWlkeF9uYW1lKSkgeworCQlVTkxFQUsobWlkeF9uYW1lKTsKKwkJZGllX2Vycm5vKF8oInVuYWJsZSB0byBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAlcyIpLAorCQkJICBtaWR4X25hbWUpOworCX0KKworCWlmIChtKQorCQlwYWNrcy5tID0gbTsKKwllbHNlCisJCXBhY2tzLm0gPSBsb2FkX211bHRpX3BhY2tfaW5kZXgob2JqZWN0X2RpciwgMSk7CisKKwlwYWNrcy5uciA9IDA7CisJcGFja3MuYWxsb2MgPSBwYWNrcy5tID8gcGFja3MubS0+bnVtX3BhY2tzIDogMTY7CisJcGFja3MuaW5mbyA9IE5VTEw7CisJQUxMT0NfQVJSQVkocGFja3MuaW5mbywgcGFja3MuYWxsb2MpOworCisJaWYgKHBhY2tzLm0pIHsKKwkJZm9yIChpID0gMDsgaSA8IHBhY2tzLm0tPm51bV9wYWNrczsgaSsrKSB7CisJCQlBTExPQ19HUk9XKHBhY2tzLmluZm8sIHBhY2tzLm5yICsgMSwgcGFja3MuYWxsb2MpOworCisJCQlwYWNrcy5pbmZvW3BhY2tzLm5yXS5vcmlnX3BhY2tfaW50X2lkID0gaTsKKwkJCXBhY2tzLmluZm9bcGFja3MubnJdLnBhY2tfbmFtZSA9IHhzdHJkdXAocGFja3MubS0+cGFja19uYW1lc1tpXSk7CisJCQlwYWNrcy5pbmZvW3BhY2tzLm5yXS5wID0gTlVMTDsKKwkJCXBhY2tzLmluZm9bcGFja3MubnJdLmV4cGlyZWQgPSAwOworCQkJcGFja3MubnIrKzsKKwkJfQorCX0KKworCXBhY2tzLnBhY2tfcGF0aHNfY2hlY2tlZCA9IDA7CisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcGFja3MucHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJBZGRpbmcgcGFja2ZpbGVzIHRvIG11bHRpLXBhY2staW5kZXgiKSwgMCk7CisJZWxzZQorCQlwYWNrcy5wcm9ncmVzcyA9IE5VTEw7CisKKwlmb3JfZWFjaF9maWxlX2luX3BhY2tfZGlyKG9iamVjdF9kaXIsIGFkZF9wYWNrX3RvX21pZHgsICZwYWNrcyk7CisJc3RvcF9wcm9ncmVzcygmcGFja3MucHJvZ3Jlc3MpOworCisJaWYgKHBhY2tzLm0gJiYgcGFja3MubnIgPT0gcGFja3MubS0+bnVtX3BhY2tzICYmICFwYWNrc190b19kcm9wKQorCQlnb3RvIGNsZWFudXA7CisKKwllbnRyaWVzID0gZ2V0X3NvcnRlZF9lbnRyaWVzKHBhY2tzLm0sIHBhY2tzLmluZm8sIHBhY2tzLm5yLCAmbnJfZW50cmllcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfZW50cmllczsgaSsrKSB7CisJCWlmIChlbnRyaWVzW2ldLm9mZnNldCA+IDB4N2ZmZmZmZmYpCisJCQludW1fbGFyZ2Vfb2Zmc2V0cysrOworCQlpZiAoZW50cmllc1tpXS5vZmZzZXQgPiAweGZmZmZmZmZmKQorCQkJbGFyZ2Vfb2Zmc2V0c19uZWVkZWQgPSAxOworCX0KKworCVFTT1JUKHBhY2tzLmluZm8sIHBhY2tzLm5yLCBwYWNrX2luZm9fY29tcGFyZSk7CisKKwlpZiAocGFja3NfdG9fZHJvcCAmJiBwYWNrc190b19kcm9wLT5ucikgeworCQlpbnQgZHJvcF9pbmRleCA9IDA7CisJCWludCBtaXNzaW5nX2Ryb3BzID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgcGFja3MubnIgJiYgZHJvcF9pbmRleCA8IHBhY2tzX3RvX2Ryb3AtPm5yOyBpKyspIHsKKwkJCWludCBjbXAgPSBzdHJjbXAocGFja3MuaW5mb1tpXS5wYWNrX25hbWUsCisJCQkJCSBwYWNrc190b19kcm9wLT5pdGVtc1tkcm9wX2luZGV4XS5zdHJpbmcpOworCisJCQlpZiAoIWNtcCkgeworCQkJCWRyb3BfaW5kZXgrKzsKKwkJCQlwYWNrcy5pbmZvW2ldLmV4cGlyZWQgPSAxOworCQkJfSBlbHNlIGlmIChjbXAgPiAwKSB7CisJCQkJZXJyb3IoXygiZGlkIG5vdCBzZWUgcGFjay1maWxlICVzIHRvIGRyb3AiKSwKKwkJCQkgICAgICBwYWNrc190b19kcm9wLT5pdGVtc1tkcm9wX2luZGV4XS5zdHJpbmcpOworCQkJCWRyb3BfaW5kZXgrKzsKKwkJCQltaXNzaW5nX2Ryb3BzKys7CisJCQkJaS0tOworCQkJfSBlbHNlIHsKKwkJCQlwYWNrcy5pbmZvW2ldLmV4cGlyZWQgPSAwOworCQkJfQorCQl9CisKKwkJaWYgKG1pc3NpbmdfZHJvcHMpIHsKKwkJCXJlc3VsdCA9IDE7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisKKwkvKgorCSAqIHBhY2tfcGVybSBzdG9yZXMgYSBwZXJtdXRhdGlvbiBiZXR3ZWVuIHBhY2staW50LWlkcyBmcm9tIHRoZQorCSAqIHByZXZpb3VzIG11bHRpLXBhY2staW5kZXggdG8gdGhlIG5ldyBvbmUgd2UgYXJlIHdyaXRpbmc6CisJICoKKwkgKiBwYWNrX3Blcm1bb2xkX2lkXSA9IG5ld19pZAorCSAqLworCUFMTE9DX0FSUkFZKHBhY2tfcGVybSwgcGFja3MubnIpOworCWZvciAoaSA9IDA7IGkgPCBwYWNrcy5ucjsgaSsrKSB7CisJCWlmIChwYWNrcy5pbmZvW2ldLmV4cGlyZWQpIHsKKwkJCWRyb3BwZWRfcGFja3MrKzsKKwkJCXBhY2tfcGVybVtwYWNrcy5pbmZvW2ldLm9yaWdfcGFja19pbnRfaWRdID0gUEFDS19FWFBJUkVEOworCQl9IGVsc2UgeworCQkJcGFja19wZXJtW3BhY2tzLmluZm9baV0ub3JpZ19wYWNrX2ludF9pZF0gPSBpIC0gZHJvcHBlZF9wYWNrczsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBwYWNrcy5ucjsgaSsrKSB7CisJCWlmICghcGFja3MuaW5mb1tpXS5leHBpcmVkKQorCQkJcGFja19uYW1lX2NvbmNhdF9sZW4gKz0gc3RybGVuKHBhY2tzLmluZm9baV0ucGFja19uYW1lKSArIDE7CisJfQorCisJaWYgKHBhY2tfbmFtZV9jb25jYXRfbGVuICUgTUlEWF9DSFVOS19BTElHTk1FTlQpCisJCXBhY2tfbmFtZV9jb25jYXRfbGVuICs9IE1JRFhfQ0hVTktfQUxJR05NRU5UIC0KKwkJCQkJKHBhY2tfbmFtZV9jb25jYXRfbGVuICUgTUlEWF9DSFVOS19BTElHTk1FTlQpOworCisJaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbGssIG1pZHhfbmFtZSwgTE9DS19ESUVfT05fRVJST1IpOworCWYgPSBoYXNoZmQobGsudGVtcGZpbGUtPmZkLCBsay50ZW1wZmlsZS0+ZmlsZW5hbWUuYnVmKTsKKwlGUkVFX0FORF9OVUxMKG1pZHhfbmFtZSk7CisKKwlpZiAocGFja3MubSkKKwkJY2xvc2VfbWlkeChwYWNrcy5tKTsKKworCWN1cl9jaHVuayA9IDA7CisJbnVtX2NodW5rcyA9IGxhcmdlX29mZnNldHNfbmVlZGVkID8gNSA6IDQ7CisKKwlpZiAocGFja3MubnIgLSBkcm9wcGVkX3BhY2tzID09IDApIHsKKwkJZXJyb3IoXygibm8gcGFjayBmaWxlcyB0byBpbmRleC4iKSk7CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwl3cml0dGVuID0gd3JpdGVfbWlkeF9oZWFkZXIoZiwgbnVtX2NodW5rcywgcGFja3MubnIgLSBkcm9wcGVkX3BhY2tzKTsKKworCWNodW5rX2lkc1tjdXJfY2h1bmtdID0gTUlEWF9DSFVOS0lEX1BBQ0tOQU1FUzsKKwljaHVua19vZmZzZXRzW2N1cl9jaHVua10gPSB3cml0dGVuICsgKG51bV9jaHVua3MgKyAxKSAqIE1JRFhfQ0hVTktMT09LVVBfV0lEVEg7CisKKwljdXJfY2h1bmsrKzsKKwljaHVua19pZHNbY3VyX2NodW5rXSA9IE1JRFhfQ0hVTktJRF9PSURGQU5PVVQ7CisJY2h1bmtfb2Zmc2V0c1tjdXJfY2h1bmtdID0gY2h1bmtfb2Zmc2V0c1tjdXJfY2h1bmsgLSAxXSArIHBhY2tfbmFtZV9jb25jYXRfbGVuOworCisJY3VyX2NodW5rKys7CisJY2h1bmtfaWRzW2N1cl9jaHVua10gPSBNSURYX0NIVU5LSURfT0lETE9PS1VQOworCWNodW5rX29mZnNldHNbY3VyX2NodW5rXSA9IGNodW5rX29mZnNldHNbY3VyX2NodW5rIC0gMV0gKyBNSURYX0NIVU5LX0ZBTk9VVF9TSVpFOworCisJY3VyX2NodW5rKys7CisJY2h1bmtfaWRzW2N1cl9jaHVua10gPSBNSURYX0NIVU5LSURfT0JKRUNUT0ZGU0VUUzsKKwljaHVua19vZmZzZXRzW2N1cl9jaHVua10gPSBjaHVua19vZmZzZXRzW2N1cl9jaHVuayAtIDFdICsgbnJfZW50cmllcyAqIHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCisJY3VyX2NodW5rKys7CisJY2h1bmtfb2Zmc2V0c1tjdXJfY2h1bmtdID0gY2h1bmtfb2Zmc2V0c1tjdXJfY2h1bmsgLSAxXSArIG5yX2VudHJpZXMgKiBNSURYX0NIVU5LX09GRlNFVF9XSURUSDsKKwlpZiAobGFyZ2Vfb2Zmc2V0c19uZWVkZWQpIHsKKwkJY2h1bmtfaWRzW2N1cl9jaHVua10gPSBNSURYX0NIVU5LSURfTEFSR0VPRkZTRVRTOworCisJCWN1cl9jaHVuaysrOworCQljaHVua19vZmZzZXRzW2N1cl9jaHVua10gPSBjaHVua19vZmZzZXRzW2N1cl9jaHVuayAtIDFdICsKKwkJCQkJICAgbnVtX2xhcmdlX29mZnNldHMgKiBNSURYX0NIVU5LX0xBUkdFX09GRlNFVF9XSURUSDsKKwl9CisKKwljaHVua19pZHNbY3VyX2NodW5rXSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDw9IG51bV9jaHVua3M7IGkrKykgeworCQlpZiAoaSAmJiBjaHVua19vZmZzZXRzW2ldIDwgY2h1bmtfb2Zmc2V0c1tpIC0gMV0pCisJCQlCVUcoImluY29ycmVjdCBjaHVuayBvZmZzZXRzOiAlIlBSSXU2NCIgYmVmb3JlICUiUFJJdTY0LAorCQkJICAgIGNodW5rX29mZnNldHNbaSAtIDFdLAorCQkJICAgIGNodW5rX29mZnNldHNbaV0pOworCisJCWlmIChjaHVua19vZmZzZXRzW2ldICUgTUlEWF9DSFVOS19BTElHTk1FTlQpCisJCQlCVUcoImNodW5rIG9mZnNldCAlIlBSSXU2NCIgaXMgbm90IHByb3Blcmx5IGFsaWduZWQiLAorCQkJICAgIGNodW5rX29mZnNldHNbaV0pOworCisJCWhhc2h3cml0ZV9iZTMyKGYsIGNodW5rX2lkc1tpXSk7CisJCWhhc2h3cml0ZV9iZTMyKGYsIGNodW5rX29mZnNldHNbaV0gPj4gMzIpOworCQloYXNod3JpdGVfYmUzMihmLCBjaHVua19vZmZzZXRzW2ldKTsKKworCQl3cml0dGVuICs9IE1JRFhfQ0hVTktMT09LVVBfV0lEVEg7CisJfQorCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJXcml0aW5nIGNodW5rcyB0byBtdWx0aS1wYWNrLWluZGV4IiksCisJCQkJCSAgbnVtX2NodW5rcyk7CisJZm9yIChpID0gMDsgaSA8IG51bV9jaHVua3M7IGkrKykgeworCQlpZiAod3JpdHRlbiAhPSBjaHVua19vZmZzZXRzW2ldKQorCQkJQlVHKCJpbmNvcnJlY3QgY2h1bmsgb2Zmc2V0ICglIlBSSXU2NCIgIT0gJSJQUkl1NjQiKSBmb3IgY2h1bmsgaWQgJSJQUkl4MzIsCisJCQkgICAgY2h1bmtfb2Zmc2V0c1tpXSwKKwkJCSAgICB3cml0dGVuLAorCQkJICAgIGNodW5rX2lkc1tpXSk7CisKKwkJc3dpdGNoIChjaHVua19pZHNbaV0pIHsKKwkJCWNhc2UgTUlEWF9DSFVOS0lEX1BBQ0tOQU1FUzoKKwkJCQl3cml0dGVuICs9IHdyaXRlX21pZHhfcGFja19uYW1lcyhmLCBwYWNrcy5pbmZvLCBwYWNrcy5ucik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgTUlEWF9DSFVOS0lEX09JREZBTk9VVDoKKwkJCQl3cml0dGVuICs9IHdyaXRlX21pZHhfb2lkX2Zhbm91dChmLCBlbnRyaWVzLCBucl9lbnRyaWVzKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBNSURYX0NIVU5LSURfT0lETE9PS1VQOgorCQkJCXdyaXR0ZW4gKz0gd3JpdGVfbWlkeF9vaWRfbG9va3VwKGYsIHRoZV9oYXNoX2FsZ28tPnJhd3N6LCBlbnRyaWVzLCBucl9lbnRyaWVzKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBNSURYX0NIVU5LSURfT0JKRUNUT0ZGU0VUUzoKKwkJCQl3cml0dGVuICs9IHdyaXRlX21pZHhfb2JqZWN0X29mZnNldHMoZiwgbGFyZ2Vfb2Zmc2V0c19uZWVkZWQsIHBhY2tfcGVybSwgZW50cmllcywgbnJfZW50cmllcyk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgTUlEWF9DSFVOS0lEX0xBUkdFT0ZGU0VUUzoKKwkJCQl3cml0dGVuICs9IHdyaXRlX21pZHhfbGFyZ2Vfb2Zmc2V0cyhmLCBudW1fbGFyZ2Vfb2Zmc2V0cywgZW50cmllcywgbnJfZW50cmllcyk7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJQlVHKCJ0cnlpbmcgdG8gd3JpdGUgdW5rbm93biBjaHVuayBpZCAlIlBSSXgzMiwKKwkJCQkgICAgY2h1bmtfaWRzW2ldKTsKKwkJfQorCisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCisJaWYgKHdyaXR0ZW4gIT0gY2h1bmtfb2Zmc2V0c1tudW1fY2h1bmtzXSkKKwkJQlVHKCJpbmNvcnJlY3QgZmluYWwgb2Zmc2V0ICUiUFJJdTY0IiAhPSAlIlBSSXU2NCwKKwkJICAgIHdyaXR0ZW4sCisJCSAgICBjaHVua19vZmZzZXRzW251bV9jaHVua3NdKTsKKworCWZpbmFsaXplX2hhc2hmaWxlKGYsIE5VTEwsIENTVU1fRlNZTkMgfCBDU1VNX0hBU0hfSU5fU1RSRUFNKTsKKwljb21taXRfbG9ja19maWxlKCZsayk7CisKK2NsZWFudXA6CisJZm9yIChpID0gMDsgaSA8IHBhY2tzLm5yOyBpKyspIHsKKwkJaWYgKHBhY2tzLmluZm9baV0ucCkgeworCQkJY2xvc2VfcGFjayhwYWNrcy5pbmZvW2ldLnApOworCQkJZnJlZShwYWNrcy5pbmZvW2ldLnApOworCQl9CisJCWZyZWUocGFja3MuaW5mb1tpXS5wYWNrX25hbWUpOworCX0KKworCWZyZWUocGFja3MuaW5mbyk7CisJZnJlZShlbnRyaWVzKTsKKwlmcmVlKHBhY2tfcGVybSk7CisJZnJlZShtaWR4X25hbWUpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCB3cml0ZV9taWR4X2ZpbGUoY29uc3QgY2hhciAqb2JqZWN0X2RpciwgdW5zaWduZWQgZmxhZ3MpCit7CisJcmV0dXJuIHdyaXRlX21pZHhfaW50ZXJuYWwob2JqZWN0X2RpciwgTlVMTCwgTlVMTCwgZmxhZ3MpOworfQorCit2b2lkIGNsZWFyX21pZHhfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwljaGFyICptaWR4ID0gZ2V0X21pZHhfZmlsZW5hbWUoci0+b2JqZWN0cy0+b2RiLT5wYXRoKTsKKworCWlmIChyLT5vYmplY3RzICYmIHItPm9iamVjdHMtPm11bHRpX3BhY2tfaW5kZXgpIHsKKwkJY2xvc2VfbWlkeChyLT5vYmplY3RzLT5tdWx0aV9wYWNrX2luZGV4KTsKKwkJci0+b2JqZWN0cy0+bXVsdGlfcGFja19pbmRleCA9IE5VTEw7CisJfQorCisJaWYgKHJlbW92ZV9wYXRoKG1pZHgpKSB7CisJCVVOTEVBSyhtaWR4KTsKKwkJZGllKF8oImZhaWxlZCB0byBjbGVhciBtdWx0aS1wYWNrLWluZGV4IGF0ICVzIiksIG1pZHgpOworCX0KKworCWZyZWUobWlkeCk7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X21pZHhfZXJyb3I7CisKK3N0YXRpYyB2b2lkIG1pZHhfcmVwb3J0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmVyaWZ5X21pZHhfZXJyb3IgPSAxOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworCXZhX2VuZChhcCk7Cit9CisKK3N0cnVjdCBwYWlyX3Bvc192c19pZAoreworCXVpbnQzMl90IHBvczsKKwl1aW50MzJfdCBwYWNrX2ludF9pZDsKK307CisKK3N0YXRpYyBpbnQgY29tcGFyZV9wYWlyX3Bvc192c19pZChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJc3RydWN0IHBhaXJfcG9zX3ZzX2lkICphID0gKHN0cnVjdCBwYWlyX3Bvc192c19pZCAqKV9hOworCXN0cnVjdCBwYWlyX3Bvc192c19pZCAqYiA9IChzdHJ1Y3QgcGFpcl9wb3NfdnNfaWQgKilfYjsKKworCXJldHVybiBiLT5wYWNrX2ludF9pZCAtIGEtPnBhY2tfaW50X2lkOworfQorCisvKgorICogTGltaXQgY2FsbHMgdG8gZGlzcGxheV9wcm9ncmVzcygpIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorICogVGhlIGludGVydmFsIGhlcmUgd2FzIGFyYml0cmFyaWx5IGNob3Nlbi4KKyAqLworI2RlZmluZSBTUEFSU0VfUFJPR1JFU1NfSU5URVJWQUwgKDEgPDwgMTIpCisjZGVmaW5lIG1pZHhfZGlzcGxheV9zcGFyc2VfcHJvZ3Jlc3MocHJvZ3Jlc3MsIG4pIFwKKwlkbyB7IFwKKwkJdWludDY0X3QgX24gPSAobik7IFwKKwkJaWYgKChfbiAmIChTUEFSU0VfUFJPR1JFU1NfSU5URVJWQUwgLSAxKSkgPT0gMCkgXAorCQkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgX24pOyBcCisJfSB3aGlsZSAoMCkKKworaW50IHZlcmlmeV9taWR4X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBwYWlyX3Bvc192c19pZCAqcGFpcnMgPSBOVUxMOworCXVpbnQzMl90IGk7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CisJc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0gPSBsb2FkX211bHRpX3BhY2tfaW5kZXgob2JqZWN0X2RpciwgMSk7CisJdmVyaWZ5X21pZHhfZXJyb3IgPSAwOworCisJaWYgKCFtKQorCQlyZXR1cm4gMDsKKworCWlmIChmbGFncyAmIE1JRFhfUFJPR1JFU1MpCisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3MoXygiTG9va2luZyBmb3IgcmVmZXJlbmNlZCBwYWNrZmlsZXMiKSwKKwkJCQkJICBtLT5udW1fcGFja3MpOworCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fcGFja3M7IGkrKykgeworCQlpZiAocHJlcGFyZV9taWR4X3BhY2sociwgbSwgaSkpCisJCQltaWR4X3JlcG9ydCgiZmFpbGVkIHRvIGxvYWQgcGFjayBpbiBwb3NpdGlvbiAlZCIsIGkpOworCisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCisJZm9yIChpID0gMDsgaSA8IDI1NTsgaSsrKSB7CisJCXVpbnQzMl90IG9pZF9mYW5vdXQxID0gbnRvaGwobS0+Y2h1bmtfb2lkX2Zhbm91dFtpXSk7CisJCXVpbnQzMl90IG9pZF9mYW5vdXQyID0gbnRvaGwobS0+Y2h1bmtfb2lkX2Zhbm91dFtpICsgMV0pOworCisJCWlmIChvaWRfZmFub3V0MSA+IG9pZF9mYW5vdXQyKQorCQkJbWlkeF9yZXBvcnQoXygib2lkIGZhbm91dCBvdXQgb2Ygb3JkZXI6IGZhbm91dFslZF0gPSAlIlBSSXgzMiIgPiAlIlBSSXgzMiIgPSBmYW5vdXRbJWRdIiksCisJCQkJICAgIGksIG9pZF9mYW5vdXQxLCBvaWRfZmFub3V0MiwgaSArIDEpOworCX0KKworCWlmIChtLT5udW1fb2JqZWN0cyA9PSAwKSB7CisJCW1pZHhfcmVwb3J0KF8oInRoZSBtaWR4IGNvbnRhaW5zIG5vIG9pZCIpKTsKKwkJLyoKKwkJICogUmVtYWluaW5nIHRlc3RzIGFzc3VtZSB0aGF0IHdlIGhhdmUgb2JqZWN0cywgc28gd2UgY2FuCisJCSAqIHJldHVybiBoZXJlLgorCQkgKi8KKwkJcmV0dXJuIHZlcmlmeV9taWR4X2Vycm9yOworCX0KKworCWlmIChmbGFncyAmIE1JRFhfUFJPR1JFU1MpCisJCXByb2dyZXNzID0gc3RhcnRfc3BhcnNlX3Byb2dyZXNzKF8oIlZlcmlmeWluZyBPSUQgb3JkZXIgaW4gbXVsdGktcGFjay1pbmRleCIpLAorCQkJCQkJIG0tPm51bV9vYmplY3RzIC0gMSk7CisJZm9yIChpID0gMDsgaSA8IG0tPm51bV9vYmplY3RzIC0gMTsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkMSwgb2lkMjsKKworCQludGhfbWlkeGVkX29iamVjdF9vaWQoJm9pZDEsIG0sIGkpOworCQludGhfbWlkeGVkX29iamVjdF9vaWQoJm9pZDIsIG0sIGkgKyAxKTsKKworCQlpZiAob2lkY21wKCZvaWQxLCAmb2lkMikgPj0gMCkKKwkJCW1pZHhfcmVwb3J0KF8oIm9pZCBsb29rdXAgb3V0IG9mIG9yZGVyOiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIiksCisJCQkJICAgIGksIG9pZF90b19oZXgoJm9pZDEpLCBvaWRfdG9faGV4KCZvaWQyKSwgaSArIDEpOworCisJCW1pZHhfZGlzcGxheV9zcGFyc2VfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCisJLyoKKwkgKiBDcmVhdGUgYW4gYXJyYXkgbWFwcGluZyBlYWNoIG9iamVjdCB0byBpdHMgcGFja2ZpbGUgaWQuICBTb3J0IGl0CisJICogdG8gZ3JvdXAgdGhlIG9iamVjdHMgYnkgcGFja2ZpbGUuICBVc2UgdGhpcyBwZXJtdXRhdGlvbiB0byB2aXNpdAorCSAqIGVhY2ggb2YgdGhlIG9iamVjdHMgYW5kIG9ubHkgcmVxdWlyZSAxIHBhY2tmaWxlIHRvIGJlIG9wZW4gYXQgYQorCSAqIHRpbWUuCisJICovCisJQUxMT0NfQVJSQVkocGFpcnMsIG0tPm51bV9vYmplY3RzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX29iamVjdHM7IGkrKykgeworCQlwYWlyc1tpXS5wb3MgPSBpOworCQlwYWlyc1tpXS5wYWNrX2ludF9pZCA9IG50aF9taWR4ZWRfcGFja19pbnRfaWQobSwgaSk7CisJfQorCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9zcGFyc2VfcHJvZ3Jlc3MoXygiU29ydGluZyBvYmplY3RzIGJ5IHBhY2tmaWxlIiksCisJCQkJCQkgbS0+bnVtX29iamVjdHMpOworCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIDApOyAvKiBUT0RPOiBNZWFzdXJlIFFTT1JUKCkgcHJvZ3Jlc3MgKi8KKwlRU09SVChwYWlycywgbS0+bnVtX29iamVjdHMsIGNvbXBhcmVfcGFpcl9wb3NfdnNfaWQpOworCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKworCWlmIChmbGFncyAmIE1JRFhfUFJPR1JFU1MpCisJCXByb2dyZXNzID0gc3RhcnRfc3BhcnNlX3Byb2dyZXNzKF8oIlZlcmlmeWluZyBvYmplY3Qgb2Zmc2V0cyIpLCBtLT5udW1fb2JqZWN0cyk7CisJZm9yIChpID0gMDsgaSA8IG0tPm51bV9vYmplY3RzOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBwYWNrX2VudHJ5IGU7CisJCW9mZl90IG1fb2Zmc2V0LCBwX29mZnNldDsKKworCQlpZiAoaSA+IDAgJiYgcGFpcnNbaS0xXS5wYWNrX2ludF9pZCAhPSBwYWlyc1tpXS5wYWNrX2ludF9pZCAmJgorCQkgICAgbS0+cGFja3NbcGFpcnNbaS0xXS5wYWNrX2ludF9pZF0pCisJCXsKKwkJCWNsb3NlX3BhY2tfZmQobS0+cGFja3NbcGFpcnNbaS0xXS5wYWNrX2ludF9pZF0pOworCQkJY2xvc2VfcGFja19pbmRleChtLT5wYWNrc1twYWlyc1tpLTFdLnBhY2tfaW50X2lkXSk7CisJCX0KKworCQludGhfbWlkeGVkX29iamVjdF9vaWQoJm9pZCwgbSwgcGFpcnNbaV0ucG9zKTsKKworCQlpZiAoIWZpbGxfbWlkeF9lbnRyeShyLCAmb2lkLCAmZSwgbSkpIHsKKwkJCW1pZHhfcmVwb3J0KF8oImZhaWxlZCB0byBsb2FkIHBhY2sgZW50cnkgZm9yIG9pZFslZF0gPSAlcyIpLAorCQkJCSAgICBwYWlyc1tpXS5wb3MsIG9pZF90b19oZXgoJm9pZCkpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAob3Blbl9wYWNrX2luZGV4KGUucCkpIHsKKwkJCW1pZHhfcmVwb3J0KF8oImZhaWxlZCB0byBsb2FkIHBhY2staW5kZXggZm9yIHBhY2tmaWxlICVzIiksCisJCQkJICAgIGUucC0+cGFja19uYW1lKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbV9vZmZzZXQgPSBlLm9mZnNldDsKKwkJcF9vZmZzZXQgPSBmaW5kX3BhY2tfZW50cnlfb25lKG9pZC5oYXNoLCBlLnApOworCisJCWlmIChtX29mZnNldCAhPSBwX29mZnNldCkKKwkJCW1pZHhfcmVwb3J0KF8oImluY29ycmVjdCBvYmplY3Qgb2Zmc2V0IGZvciBvaWRbJWRdID0gJXM6ICUiUFJJeDY0IiAhPSAlIlBSSXg2NCksCisJCQkJICAgIHBhaXJzW2ldLnBvcywgb2lkX3RvX2hleCgmb2lkKSwgbV9vZmZzZXQsIHBfb2Zmc2V0KTsKKworCQltaWR4X2Rpc3BsYXlfc3BhcnNlX3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7CisJfQorCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKworCWZyZWUocGFpcnMpOworCisJcmV0dXJuIHZlcmlmeV9taWR4X2Vycm9yOworfQorCitpbnQgZXhwaXJlX21pZHhfcGFja3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHVuc2lnbmVkIGZsYWdzKQoreworCXVpbnQzMl90IGksICpjb3VudCwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcGFja3NfdG9fZHJvcCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptID0gbG9hZF9tdWx0aV9wYWNrX2luZGV4KG9iamVjdF9kaXIsIDEpOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCisJaWYgKCFtKQorCQlyZXR1cm4gMDsKKworCWNvdW50ID0geGNhbGxvYyhtLT5udW1fcGFja3MsIHNpemVvZih1aW50MzJfdCkpOworCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJDb3VudGluZyByZWZlcmVuY2VkIG9iamVjdHMiKSwKKwkJCQkJICBtLT5udW1fb2JqZWN0cyk7CisJZm9yIChpID0gMDsgaSA8IG0tPm51bV9vYmplY3RzOyBpKyspIHsKKwkJaW50IHBhY2tfaW50X2lkID0gbnRoX21pZHhlZF9wYWNrX2ludF9pZChtLCBpKTsKKwkJY291bnRbcGFja19pbnRfaWRdKys7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJGaW5kaW5nIGFuZCBkZWxldGluZyB1bnJlZmVyZW5jZWQgcGFja2ZpbGVzIiksCisJCQkJCSAgbS0+bnVtX3BhY2tzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX3BhY2tzOyBpKyspIHsKKwkJY2hhciAqcGFja19uYW1lOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7CisKKwkJaWYgKGNvdW50W2ldKQorCQkJY29udGludWU7CisKKwkJaWYgKHByZXBhcmVfbWlkeF9wYWNrKHIsIG0sIGkpKQorCQkJY29udGludWU7CisKKwkJaWYgKG0tPnBhY2tzW2ldLT5wYWNrX2tlZXApCisJCQljb250aW51ZTsKKworCQlwYWNrX25hbWUgPSB4c3RyZHVwKG0tPnBhY2tzW2ldLT5wYWNrX25hbWUpOworCQljbG9zZV9wYWNrKG0tPnBhY2tzW2ldKTsKKworCQlzdHJpbmdfbGlzdF9pbnNlcnQoJnBhY2tzX3RvX2Ryb3AsIG0tPnBhY2tfbmFtZXNbaV0pOworCQl1bmxpbmtfcGFja19wYXRoKHBhY2tfbmFtZSwgMCk7CisJCWZyZWUocGFja19uYW1lKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCisJZnJlZShjb3VudCk7CisKKwlpZiAocGFja3NfdG9fZHJvcC5ucikKKwkJcmVzdWx0ID0gd3JpdGVfbWlkeF9pbnRlcm5hbChvYmplY3RfZGlyLCBtLCAmcGFja3NfdG9fZHJvcCwgZmxhZ3MpOworCisJc3RyaW5nX2xpc3RfY2xlYXIoJnBhY2tzX3RvX2Ryb3AsIDApOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0cnVjdCByZXBhY2tfaW5mbyB7CisJdGltZXN0YW1wX3QgbXRpbWU7CisJdWludDMyX3QgcmVmZXJlbmNlZF9vYmplY3RzOworCXVpbnQzMl90IHBhY2tfaW50X2lkOworfTsKKworc3RhdGljIGludCBjb21wYXJlX2J5X210aW1lKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBzdHJ1Y3QgcmVwYWNrX2luZm8gKmEsICpiOworCisJYSA9IChjb25zdCBzdHJ1Y3QgcmVwYWNrX2luZm8gKilhXzsKKwliID0gKGNvbnN0IHN0cnVjdCByZXBhY2tfaW5mbyAqKWJfOworCisJaWYgKGEtPm10aW1lIDwgYi0+bXRpbWUpCisJCXJldHVybiAtMTsKKwlpZiAoYS0+bXRpbWUgPiBiLT5tdGltZSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9pbmNsdWRlZF9wYWNrc19hbGwoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sCisJCQkJICAgdW5zaWduZWQgY2hhciAqaW5jbHVkZV9wYWNrKQoreworCXVpbnQzMl90IGksIGNvdW50ID0gMDsKKwlpbnQgcGFja19rZXB0X29iamVjdHMgPSAwOworCisJcmVwb19jb25maWdfZ2V0X2Jvb2wociwgInJlcGFjay5wYWNra2VwdG9iamVjdHMiLCAmcGFja19rZXB0X29iamVjdHMpOworCisJZm9yIChpID0gMDsgaSA8IG0tPm51bV9wYWNrczsgaSsrKSB7CisJCWlmIChwcmVwYXJlX21pZHhfcGFjayhyLCBtLCBpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBhY2tfa2VwdF9vYmplY3RzICYmIG0tPnBhY2tzW2ldLT5wYWNrX2tlZXApCisJCQljb250aW51ZTsKKworCQlpbmNsdWRlX3BhY2tbaV0gPSAxOworCQljb3VudCsrOworCX0KKworCXJldHVybiBjb3VudCA8IDI7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9pbmNsdWRlZF9wYWNrc19iYXRjaChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgIHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLAorCQkJCSAgICAgdW5zaWduZWQgY2hhciAqaW5jbHVkZV9wYWNrLAorCQkJCSAgICAgc2l6ZV90IGJhdGNoX3NpemUpCit7CisJdWludDMyX3QgaSwgcGFja3NfdG9fcmVwYWNrOworCXNpemVfdCB0b3RhbF9zaXplOworCXN0cnVjdCByZXBhY2tfaW5mbyAqcGFja19pbmZvID0geGNhbGxvYyhtLT5udW1fcGFja3MsIHNpemVvZihzdHJ1Y3QgcmVwYWNrX2luZm8pKTsKKwlpbnQgcGFja19rZXB0X29iamVjdHMgPSAwOworCisJcmVwb19jb25maWdfZ2V0X2Jvb2wociwgInJlcGFjay5wYWNra2VwdG9iamVjdHMiLCAmcGFja19rZXB0X29iamVjdHMpOworCisJZm9yIChpID0gMDsgaSA8IG0tPm51bV9wYWNrczsgaSsrKSB7CisJCXBhY2tfaW5mb1tpXS5wYWNrX2ludF9pZCA9IGk7CisKKwkJaWYgKHByZXBhcmVfbWlkeF9wYWNrKHIsIG0sIGkpKQorCQkJY29udGludWU7CisKKwkJcGFja19pbmZvW2ldLm10aW1lID0gbS0+cGFja3NbaV0tPm10aW1lOworCX0KKworCWZvciAoaSA9IDA7IGJhdGNoX3NpemUgJiYgaSA8IG0tPm51bV9vYmplY3RzOyBpKyspIHsKKwkJdWludDMyX3QgcGFja19pbnRfaWQgPSBudGhfbWlkeGVkX3BhY2tfaW50X2lkKG0sIGkpOworCQlwYWNrX2luZm9bcGFja19pbnRfaWRdLnJlZmVyZW5jZWRfb2JqZWN0cysrOworCX0KKworCVFTT1JUKHBhY2tfaW5mbywgbS0+bnVtX3BhY2tzLCBjb21wYXJlX2J5X210aW1lKTsKKworCXRvdGFsX3NpemUgPSAwOworCXBhY2tzX3RvX3JlcGFjayA9IDA7CisJZm9yIChpID0gMDsgdG90YWxfc2l6ZSA8IGJhdGNoX3NpemUgJiYgaSA8IG0tPm51bV9wYWNrczsgaSsrKSB7CisJCWludCBwYWNrX2ludF9pZCA9IHBhY2tfaW5mb1tpXS5wYWNrX2ludF9pZDsKKwkJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBtLT5wYWNrc1twYWNrX2ludF9pZF07CisJCXNpemVfdCBleHBlY3RlZF9zaXplOworCisJCWlmICghcCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBhY2tfa2VwdF9vYmplY3RzICYmIHAtPnBhY2tfa2VlcCkKKwkJCWNvbnRpbnVlOworCQlpZiAob3Blbl9wYWNrX2luZGV4KHApIHx8ICFwLT5udW1fb2JqZWN0cykKKwkJCWNvbnRpbnVlOworCisJCWV4cGVjdGVkX3NpemUgPSAoc2l6ZV90KShwLT5wYWNrX3NpemUKKwkJCQkJICogcGFja19pbmZvW2ldLnJlZmVyZW5jZWRfb2JqZWN0cyk7CisJCWV4cGVjdGVkX3NpemUgLz0gcC0+bnVtX29iamVjdHM7CisKKwkJaWYgKGV4cGVjdGVkX3NpemUgPj0gYmF0Y2hfc2l6ZSkKKwkJCWNvbnRpbnVlOworCisJCXBhY2tzX3RvX3JlcGFjaysrOworCQl0b3RhbF9zaXplICs9IGV4cGVjdGVkX3NpemU7CisJCWluY2x1ZGVfcGFja1twYWNrX2ludF9pZF0gPSAxOworCX0KKworCWZyZWUocGFja19pbmZvKTsKKworCWlmICh0b3RhbF9zaXplIDwgYmF0Y2hfc2l6ZSB8fCBwYWNrc190b19yZXBhY2sgPCAyKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitpbnQgbWlkeF9yZXBhY2soc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHNpemVfdCBiYXRjaF9zaXplLCB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwl1aW50MzJfdCBpOworCXVuc2lnbmVkIGNoYXIgKmluY2x1ZGVfcGFjazsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbWQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBiYXNlX25hbWUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSA9IGxvYWRfbXVsdGlfcGFja19pbmRleChvYmplY3RfZGlyLCAxKTsKKworCS8qCisJICogV2hlbiB1cGRhdGluZyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgY29uZmlndXJhdGlvbgorCSAqIHZhcmlhYmxlcyBpbiBidWlsdGluL3JlcGFjay5jLCB0aGVzZSBtdXN0IGJlIGFkanVzdGVkCisJICogdG8gbWF0Y2guCisJICovCisJaW50IGRlbHRhX2Jhc2Vfb2Zmc2V0ID0gMTsKKwlpbnQgdXNlX2RlbHRhX2lzbGFuZHMgPSAwOworCisJaWYgKCFtKQorCQlyZXR1cm4gMDsKKworCWluY2x1ZGVfcGFjayA9IHhjYWxsb2MobS0+bnVtX3BhY2tzLCBzaXplb2YodW5zaWduZWQgY2hhcikpOworCisJaWYgKGJhdGNoX3NpemUpIHsKKwkJaWYgKGZpbGxfaW5jbHVkZWRfcGFja3NfYmF0Y2gociwgbSwgaW5jbHVkZV9wYWNrLCBiYXRjaF9zaXplKSkKKwkJCWdvdG8gY2xlYW51cDsKKwl9IGVsc2UgaWYgKGZpbGxfaW5jbHVkZWRfcGFja3NfYWxsKHIsIG0sIGluY2x1ZGVfcGFjaykpCisJCWdvdG8gY2xlYW51cDsKKworCXJlcG9fY29uZmlnX2dldF9ib29sKHIsICJyZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IiwgJmRlbHRhX2Jhc2Vfb2Zmc2V0KTsKKwlyZXBvX2NvbmZpZ19nZXRfYm9vbChyLCAicmVwYWNrLnVzZWRlbHRhaXNsYW5kcyIsICZ1c2VfZGVsdGFfaXNsYW5kcyk7CisKKwlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAicGFjay1vYmplY3RzIik7CisKKwlzdHJidWZfYWRkc3RyKCZiYXNlX25hbWUsIG9iamVjdF9kaXIpOworCXN0cmJ1Zl9hZGRzdHIoJmJhc2VfbmFtZSwgIi9wYWNrL3BhY2siKTsKKwlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCBiYXNlX25hbWUuYnVmKTsKKworCWlmIChkZWx0YV9iYXNlX29mZnNldCkKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tZGVsdGEtYmFzZS1vZmZzZXQiKTsKKwlpZiAodXNlX2RlbHRhX2lzbGFuZHMpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLWRlbHRhLWlzbGFuZHMiKTsKKworCWlmIChmbGFncyAmIE1JRFhfUFJPR1JFU1MpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLXByb2dyZXNzIik7CisJZWxzZQorCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLXEiKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZiYXNlX25hbWUpOworCisJY21kLmdpdF9jbWQgPSAxOworCWNtZC5pbiA9IGNtZC5vdXQgPSAtMTsKKworCWlmIChzdGFydF9jb21tYW5kKCZjbWQpKSB7CisJCWVycm9yKF8oImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMiKSk7CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX29iamVjdHM7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJdWludDMyX3QgcGFja19pbnRfaWQgPSBudGhfbWlkeGVkX3BhY2tfaW50X2lkKG0sIGkpOworCisJCWlmICghaW5jbHVkZV9wYWNrW3BhY2tfaW50X2lkXSkKKwkJCWNvbnRpbnVlOworCisJCW50aF9taWR4ZWRfb2JqZWN0X29pZCgmb2lkLCBtLCBpKTsKKwkJeHdyaXRlKGNtZC5pbiwgb2lkX3RvX2hleCgmb2lkKSwgdGhlX2hhc2hfYWxnby0+aGV4c3opOworCQl4d3JpdGUoY21kLmluLCAiXG4iLCAxKTsKKwl9CisJY2xvc2UoY21kLmluKTsKKworCWlmIChmaW5pc2hfY29tbWFuZCgmY21kKSkgeworCQllcnJvcihfKCJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyIpKTsKKwkJcmVzdWx0ID0gMTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXJlc3VsdCA9IHdyaXRlX21pZHhfaW50ZXJuYWwob2JqZWN0X2RpciwgbSwgTlVMTCwgZmxhZ3MpOworCW0gPSBOVUxMOworCitjbGVhbnVwOgorCWlmIChtKQorCQljbG9zZV9taWR4KG0pOworCWZyZWUoaW5jbHVkZV9wYWNrKTsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvbWlkeC5oIGIvbWlkeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOGNmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9taWR4LmgKQEAgLTAsMCArMSw1OCBAQAorI2lmbmRlZiBNSURYX0gKKyNkZWZpbmUgTUlEWF9ICisKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisKK3N0cnVjdCBvYmplY3RfaWQ7CitzdHJ1Y3QgcGFja19lbnRyeTsKK3N0cnVjdCByZXBvc2l0b3J5OworCisjZGVmaW5lIEdJVF9URVNUX01VTFRJX1BBQ0tfSU5ERVggIkdJVF9URVNUX01VTFRJX1BBQ0tfSU5ERVgiCisKK3N0cnVjdCBtdWx0aV9wYWNrX2luZGV4IHsKKwlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbmV4dDsKKworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE7CisJc2l6ZV90IGRhdGFfbGVuOworCisJdWludDMyX3Qgc2lnbmF0dXJlOworCXVuc2lnbmVkIGNoYXIgdmVyc2lvbjsKKwl1bnNpZ25lZCBjaGFyIGhhc2hfbGVuOworCXVuc2lnbmVkIGNoYXIgbnVtX2NodW5rczsKKwl1aW50MzJfdCBudW1fcGFja3M7CisJdWludDMyX3QgbnVtX29iamVjdHM7CisKKwlpbnQgbG9jYWw7CisKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjaHVua19wYWNrX25hbWVzOworCWNvbnN0IHVpbnQzMl90ICpjaHVua19vaWRfZmFub3V0OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNodW5rX29pZF9sb29rdXA7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY2h1bmtfb2JqZWN0X29mZnNldHM7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY2h1bmtfbGFyZ2Vfb2Zmc2V0czsKKworCWNvbnN0IGNoYXIgKipwYWNrX25hbWVzOworCXN0cnVjdCBwYWNrZWRfZ2l0ICoqcGFja3M7CisJY2hhciBvYmplY3RfZGlyW0ZMRVhfQVJSQVldOworfTsKKworI2RlZmluZSBNSURYX1BST0dSRVNTICAgICAoMSA8PCAwKQorCitzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbG9hZF9tdWx0aV9wYWNrX2luZGV4KGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIGludCBsb2NhbCk7CitpbnQgcHJlcGFyZV9taWR4X3BhY2soc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLCB1aW50MzJfdCBwYWNrX2ludF9pZCk7CitpbnQgYnNlYXJjaF9taWR4KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sIHVpbnQzMl90ICpyZXN1bHQpOworc3RydWN0IG9iamVjdF9pZCAqbnRoX21pZHhlZF9vYmplY3Rfb2lkKHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkJc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sCisJCQkJCXVpbnQzMl90IG4pOworaW50IGZpbGxfbWlkeF9lbnRyeShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3QgcGFja19lbnRyeSAqZSwgc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0pOworaW50IG1pZHhfY29udGFpbnNfcGFjayhzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwgY29uc3QgY2hhciAqaWR4X29yX3BhY2tfbmFtZSk7CitpbnQgcHJlcGFyZV9tdWx0aV9wYWNrX2luZGV4X29uZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2RpciwgaW50IGxvY2FsKTsKKworaW50IHdyaXRlX21pZHhfZmlsZShjb25zdCBjaGFyICpvYmplY3RfZGlyLCB1bnNpZ25lZCBmbGFncyk7Cit2b2lkIGNsZWFyX21pZHhfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CitpbnQgdmVyaWZ5X21pZHhfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2RpciwgdW5zaWduZWQgZmxhZ3MpOworaW50IGV4cGlyZV9taWR4X3BhY2tzKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCB1bnNpZ25lZCBmbGFncyk7CitpbnQgbWlkeF9yZXBhY2soc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHNpemVfdCBiYXRjaF9zaXplLCB1bnNpZ25lZCBmbGFncyk7CisKK3ZvaWQgY2xvc2VfbWlkeChzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmFtZS1oYXNoLmMgYi9uYW1lLWhhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjUyNmEzCi0tLSAvZGV2L251bGwKKysrIGIvbmFtZS1oYXNoLmMKQEAgLTAsMCArMSw3MzEgQEAKKy8qCisgKiBuYW1lLWhhc2guYworICoKKyAqIEhhc2hpbmcgbmFtZXMgaW4gdGhlIGluZGV4IHN0YXRlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IExpbnVzIFRvcnZhbGRzCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRocmVhZC11dGlscy5oIgorCitzdHJ1Y3QgZGlyX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJc3RydWN0IGRpcl9lbnRyeSAqcGFyZW50OworCWludCBucjsKKwl1bnNpZ25lZCBpbnQgbmFtZWxlbjsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgaW50IGRpcl9lbnRyeV9jbXAoY29uc3Qgdm9pZCAqdW51c2VkX2NtcF9kYXRhLAorCQkJIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCQkgY29uc3Qgdm9pZCAqa2V5ZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgZGlyX2VudHJ5ICplMSwgKmUyOworCWNvbnN0IGNoYXIgKm5hbWUgPSBrZXlkYXRhOworCisJZTEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IGRpcl9lbnRyeSwgZW50KTsKKwllMiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIGNvbnN0IHN0cnVjdCBkaXJfZW50cnksIGVudCk7CisKKwlyZXR1cm4gZTEtPm5hbWVsZW4gIT0gZTItPm5hbWVsZW4gfHwgc3RybmNhc2VjbXAoZTEtPm5hbWUsCisJCQluYW1lID8gbmFtZSA6IGUyLT5uYW1lLCBlMS0+bmFtZWxlbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlyX2VudHJ5ICpmaW5kX2Rpcl9lbnRyeV9faGFzaChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IG5hbWVsZW4sIHVuc2lnbmVkIGludCBoYXNoKQoreworCXN0cnVjdCBkaXJfZW50cnkga2V5OworCWhhc2htYXBfZW50cnlfaW5pdCgma2V5LmVudCwgaGFzaCk7CisJa2V5Lm5hbWVsZW4gPSBuYW1lbGVuOworCXJldHVybiBoYXNobWFwX2dldF9lbnRyeSgmaXN0YXRlLT5kaXJfaGFzaCwgJmtleSwgZW50LCBuYW1lKTsKK30KKworc3RhdGljIHN0cnVjdCBkaXJfZW50cnkgKmZpbmRfZGlyX2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQljb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbmFtZWxlbikKK3sKKwlyZXR1cm4gZmluZF9kaXJfZW50cnlfX2hhc2goaXN0YXRlLCBuYW1lLCBuYW1lbGVuLCBtZW1paGFzaChuYW1lLCBuYW1lbGVuKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlyX2VudHJ5ICpoYXNoX2Rpcl9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IG5hbWVsZW4pCit7CisJLyoKKwkgKiBUaHJvdyBlYWNoIGRpcmVjdG9yeSBjb21wb25lbnQgaW4gdGhlIGhhc2ggZm9yIHF1aWNrIGxvb2t1cAorCSAqIGR1cmluZyBhIGdpdCBzdGF0dXMuIERpcmVjdG9yeSBjb21wb25lbnRzIGFyZSBzdG9yZWQgd2l0aG91dCB0aGVpcgorCSAqIGNsb3Npbmcgc2xhc2guICBEZXNwaXRlIHN1Ym1vZHVsZXMgYmVpbmcgYSBkaXJlY3RvcnksIHRoZXkgbmV2ZXIKKwkgKiByZWFjaCB0aGlzIHBvaW50LCBiZWNhdXNlIHRoZXkgYXJlIHN0b3JlZAorCSAqIGluIGluZGV4X3N0YXRlLm5hbWVfaGFzaCAoYXMgb3JkaW5hcnkgY2FjaGVfZW50cmllcykuCisJICovCisJc3RydWN0IGRpcl9lbnRyeSAqZGlyOworCisJLyogZ2V0IGxlbmd0aCBvZiBwYXJlbnQgZGlyZWN0b3J5ICovCisJd2hpbGUgKG5hbWVsZW4gPiAwICYmICFpc19kaXJfc2VwKGNlLT5uYW1lW25hbWVsZW4gLSAxXSkpCisJCW5hbWVsZW4tLTsKKwlpZiAobmFtZWxlbiA8PSAwKQorCQlyZXR1cm4gTlVMTDsKKwluYW1lbGVuLS07CisKKwkvKiBsb29rdXAgZXhpc3RpbmcgZW50cnkgZm9yIHRoYXQgZGlyZWN0b3J5ICovCisJZGlyID0gZmluZF9kaXJfZW50cnkoaXN0YXRlLCBjZS0+bmFtZSwgbmFtZWxlbik7CisJaWYgKCFkaXIpIHsKKwkJLyogbm90IGZvdW5kLCBjcmVhdGUgaXQgYW5kIGFkZCB0byBoYXNoIHRhYmxlICovCisJCUZMRVhfQUxMT0NfTUVNKGRpciwgbmFtZSwgY2UtPm5hbWUsIG5hbWVsZW4pOworCQloYXNobWFwX2VudHJ5X2luaXQoJmRpci0+ZW50LCBtZW1paGFzaChjZS0+bmFtZSwgbmFtZWxlbikpOworCQlkaXItPm5hbWVsZW4gPSBuYW1lbGVuOworCQloYXNobWFwX2FkZCgmaXN0YXRlLT5kaXJfaGFzaCwgJmRpci0+ZW50KTsKKworCQkvKiByZWN1cnNpdmVseSBhZGQgbWlzc2luZyBwYXJlbnQgZGlyZWN0b3JpZXMgKi8KKwkJZGlyLT5wYXJlbnQgPSBoYXNoX2Rpcl9lbnRyeShpc3RhdGUsIGNlLCBuYW1lbGVuKTsKKwl9CisJcmV0dXJuIGRpcjsKK30KKworc3RhdGljIHZvaWQgYWRkX2Rpcl9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwkvKiBBZGQgcmVmZXJlbmNlIHRvIHRoZSBkaXJlY3RvcnkgZW50cnkgKGFuZCBwYXJlbnRzIGlmIDApLiAqLworCXN0cnVjdCBkaXJfZW50cnkgKmRpciA9IGhhc2hfZGlyX2VudHJ5KGlzdGF0ZSwgY2UsIGNlX25hbWVsZW4oY2UpKTsKKwl3aGlsZSAoZGlyICYmICEoZGlyLT5ucisrKSkKKwkJZGlyID0gZGlyLT5wYXJlbnQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9kaXJfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJLyoKKwkgKiBSZWxlYXNlIHJlZmVyZW5jZSB0byB0aGUgZGlyZWN0b3J5IGVudHJ5LiBJZiAwLCByZW1vdmUgYW5kIGNvbnRpbnVlCisJICogd2l0aCBwYXJlbnQgZGlyZWN0b3J5LgorCSAqLworCXN0cnVjdCBkaXJfZW50cnkgKmRpciA9IGhhc2hfZGlyX2VudHJ5KGlzdGF0ZSwgY2UsIGNlX25hbWVsZW4oY2UpKTsKKwl3aGlsZSAoZGlyICYmICEoLS1kaXItPm5yKSkgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICpwYXJlbnQgPSBkaXItPnBhcmVudDsKKwkJaGFzaG1hcF9yZW1vdmUoJmlzdGF0ZS0+ZGlyX2hhc2gsICZkaXItPmVudCwgTlVMTCk7CisJCWZyZWUoZGlyKTsKKwkJZGlyID0gcGFyZW50OworCX0KK30KKworc3RhdGljIHZvaWQgaGFzaF9pbmRleF9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfSEFTSEVEKQorCQlyZXR1cm47CisJY2UtPmNlX2ZsYWdzIHw9IENFX0hBU0hFRDsKKwloYXNobWFwX2VudHJ5X2luaXQoJmNlLT5lbnQsIG1lbWloYXNoKGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSkpOworCWhhc2htYXBfYWRkKCZpc3RhdGUtPm5hbWVfaGFzaCwgJmNlLT5lbnQpOworCisJaWYgKGlnbm9yZV9jYXNlKQorCQlhZGRfZGlyX2VudHJ5KGlzdGF0ZSwgY2UpOworfQorCitzdGF0aWMgaW50IGNhY2hlX2VudHJ5X2NtcChjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCQkgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZXB0ciwKKwkJCSAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCQkgICBjb25zdCB2b2lkICpyZW1vdmUpCit7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTEsICpjZTI7CisKKwljZTEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5LCBlbnQpOworCWNlMiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSwgZW50KTsKKworCS8qCisJICogRm9yIHJlbW92ZV9uYW1lX2hhc2gsIGZpbmQgdGhlIGV4YWN0IGVudHJ5IChwb2ludGVyIGVxdWFsaXR5KTsgZm9yCisJICogaW5kZXhfZmlsZV9leGlzdHMsIGZpbmQgYWxsIGVudHJpZXMgd2l0aCBtYXRjaGluZyBoYXNoIGNvZGUgYW5kCisJICogZGVjaWRlIHdoZXRoZXIgdGhlIGVudHJ5IG1hdGNoZXMgaW4gc2FtZV9uYW1lLgorCSAqLworCXJldHVybiByZW1vdmUgPyAhKGNlMSA9PSBjZTIpIDogMDsKK30KKworc3RhdGljIGludCBsYXp5X3RyeV90aHJlYWRlZCA9IDE7CitzdGF0aWMgaW50IGxhenlfbnJfZGlyX3RocmVhZHM7CisKKy8qCisgKiBTZXQgYSBtaW5pbXVtIG51bWJlciBvZiBjYWNoZV9lbnRyaWVzIHRoYXQgd2Ugd2lsbCBoYW5kbGUgcGVyCisgKiB0aHJlYWQgYW5kIHVzZSB0aGF0IHRvIGRlY2lkZSBob3cgbWFueSB0aHJlYWRzIHRvIHJ1biAodXAgdG8KKyAqIHRoZSBudW1iZXIgb24gdGhlIHN5c3RlbSkuCisgKgorICogRm9yIGd1aWRhbmNlIHNldHRpbmcgdGhlIGxvd2VyIHBlci10aHJlYWQgYm91bmQsIHNlZToKKyAqICAgICB0L2hlbHBlci90ZXN0LWxhenktaW5pdC1uYW1lLWhhc2ggLS1hbmFseXplCisgKi8KKyNkZWZpbmUgTEFaWV9USFJFQURfQ09TVCAoMjAwMCkKKworLyoKKyAqIFdlIHVzZSBuIG11dGV4ZXMgdG8gZ3VhcmQgbiBwYXJ0aXRpb25zIG9mIHRoZSAiaXN0YXRlLT5kaXJfaGFzaCIKKyAqIGhhc2h0YWJsZS4gIFNpbmNlICJmaW5kIiBhbmQgImluc2VydCIgb3BlcmF0aW9ucyB3aWxsIGhhc2ggdG8gYQorICogcGFydGljdWxhciBidWNrZXQgYW5kIG1vZGlmeS9zZWFyY2ggYSBzaW5nbGUgY2hhaW4sIHdlIGNhbiBzYXkKKyAqIHRoYXQgImFsbCBjaGFpbnMgbW9kIG4iIGFyZSBndWFyZGVkIGJ5IHRoZSBzYW1lIG11dGV4IC0tIHJhdGhlcgorICogdGhhbiBoYXZpbmcgYSBzaW5nbGUgbXV0ZXggdG8gZ3VhcmQgdGhlIGVudGlyZSB0YWJsZS4gIChUaGlzIGRvZXMKKyAqIHJlcXVpcmUgdGhhdCB3ZSBkaXNhYmxlICJyZWhhc2hpbmciIG9uIHRoZSBoYXNodGFibGUuKQorICoKKyAqIFNvLCBhIGxhcmdlciB2YWx1ZSBoZXJlIGRlY3JlYXNlcyB0aGUgcHJvYmFiaWxpdHkgb2YgYSBjb2xsaXNpb24KKyAqIGFuZCB0aGUgdGltZSB0aGF0IGVhY2ggdGhyZWFkIG11c3Qgd2FpdCBmb3IgdGhlIG11dGV4LgorICovCisjZGVmaW5lIExBWllfTUFYX01VVEVYICAgKDMyKQorCitzdGF0aWMgcHRocmVhZF9tdXRleF90ICpsYXp5X2Rpcl9tdXRleF9hcnJheTsKKworLyoKKyAqIEFuIGFycmF5IG9mIGxhenlfZW50cnkgaXRlbXMgaXMgdXNlZCBieSB0aGUgbiB0aHJlYWRzIGluCisgKiB0aGUgZGlyZWN0b3J5IHBhcnNlIChmaXJzdCkgcGhhc2UgdG8gKGxvY2stZnJlZSkgc3RvcmUgdGhlCisgKiBpbnRlcm1lZGlhdGUgcmVzdWx0cy4gIFRoZXNlIHZhbHVlcyBhcmUgdGhlbiByZWZlcmVuY2VkIGJ5CisgKiB0aGUgMiB0aHJlYWRzIGluIHRoZSBzZWNvbmQgcGhhc2UuCisgKi8KK3N0cnVjdCBsYXp5X2VudHJ5IHsKKwlzdHJ1Y3QgZGlyX2VudHJ5ICpkaXI7CisJdW5zaWduZWQgaW50IGhhc2hfZGlyOworCXVuc2lnbmVkIGludCBoYXNoX25hbWU7Cit9OworCisvKgorICogRGVjaWRlIGlmIHdlIHdhbnQgdG8gdXNlIHRocmVhZHMgKGlmIGF2YWlsYWJsZSkgdG8gbG9hZAorICogdGhlIGhhc2ggdGFibGVzLiAgV2Ugc2V0ICJsYXp5X25yX2Rpcl90aHJlYWRzIiB0byB6ZXJvIHdoZW4KKyAqIGl0IGlzIG5vdCB3b3J0aCBpdC4KKyAqLworc3RhdGljIGludCBsb29rdXBfbGF6eV9wYXJhbXMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaW50IG5yX2NwdXM7CisKKwlsYXp5X25yX2Rpcl90aHJlYWRzID0gMDsKKworCWlmICghbGF6eV90cnlfdGhyZWFkZWQpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgcmVzcGVjdGluZyBjYXNlLCBqdXN0IHVzZSB0aGUgb3JpZ2luYWwKKwkgKiBjb2RlIHRvIGJ1aWxkIHRoZSAiaXN0YXRlLT5uYW1lX2hhc2giLiAgV2UgZG9uJ3QKKwkgKiBuZWVkIHRoZSBjb21wbGV4aXR5IGhlcmUuCisJICovCisJaWYgKCFpZ25vcmVfY2FzZSkKKwkJcmV0dXJuIDA7CisKKwlucl9jcHVzID0gb25saW5lX2NwdXMoKTsKKwlpZiAobnJfY3B1cyA8IDIpCisJCXJldHVybiAwOworCisJaWYgKGlzdGF0ZS0+Y2FjaGVfbnIgPCAyICogTEFaWV9USFJFQURfQ09TVCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXN0YXRlLT5jYWNoZV9uciA8IG5yX2NwdXMgKiBMQVpZX1RIUkVBRF9DT1NUKQorCQlucl9jcHVzID0gaXN0YXRlLT5jYWNoZV9uciAvIExBWllfVEhSRUFEX0NPU1Q7CisJbGF6eV9ucl9kaXJfdGhyZWFkcyA9IG5yX2NwdXM7CisJcmV0dXJuIGxhenlfbnJfZGlyX3RocmVhZHM7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIG4gbXV0ZXhlcyBmb3IgdXNlIHdoZW4gc2VhcmNoaW5nIGFuZCBpbnNlcnRpbmcKKyAqIGludG8gImlzdGF0ZS0+ZGlyX2hhc2giLiAgQWxsICJkaXIiIHRocmVhZHMgYXJlIHRyeWluZworICogdG8gaW5zZXJ0IHBhcnRpYWwgcGF0aG5hbWVzIGludG8gdGhlIGhhc2ggYXMgdGhleSBpdGVyYXRlCisgKiBvdmVyIHRoZWlyIHBvcnRpb25zIG9mIHRoZSBpbmRleCwgc28gbG9jayBjb250ZW50aW9uIGlzCisgKiBoaWdoLgorICoKKyAqIEhvd2V2ZXIsIHRoZSBoYXNobWFwIGlzIGdvaW5nIHRvIHB1dCBpdGVtcyBpbnRvIGJ1Y2tldAorICogY2hhaW5zIGJhc2VkIG9uIHRoZWlyIGhhc2ggdmFsdWVzLiAgVXNlIHRoYXQgdG8gY3JlYXRlIG4KKyAqIG11dGV4ZXMgYW5kIGxvY2sgb24gbXV0ZXhbYnVja2V0KGhhc2gpICUgbl0uICBUaGlzIHdpbGwKKyAqIGRlY3JlYXNlIHRoZSBjb2xsaXNpb24gcmF0ZSBieSAoaG9wZWZ1bGx5KSBhIGZhY3RvciBvZiBuLgorICovCitzdGF0aWMgdm9pZCBpbml0X2Rpcl9tdXRleCh2b2lkKQoreworCWludCBqOworCisJbGF6eV9kaXJfbXV0ZXhfYXJyYXkgPSB4Y2FsbG9jKExBWllfTUFYX01VVEVYLCBzaXplb2YocHRocmVhZF9tdXRleF90KSk7CisKKwlmb3IgKGogPSAwOyBqIDwgTEFaWV9NQVhfTVVURVg7IGorKykKKwkJaW5pdF9yZWN1cnNpdmVfbXV0ZXgoJmxhenlfZGlyX211dGV4X2FycmF5W2pdKTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF9kaXJfbXV0ZXgodm9pZCkKK3sKKwlpbnQgajsKKworCWZvciAoaiA9IDA7IGogPCBMQVpZX01BWF9NVVRFWDsgaisrKQorCQlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmxhenlfZGlyX211dGV4X2FycmF5W2pdKTsKKworCWZyZWUobGF6eV9kaXJfbXV0ZXhfYXJyYXkpOworfQorCitzdGF0aWMgdm9pZCBsb2NrX2Rpcl9tdXRleChpbnQgaikKK3sKKwlwdGhyZWFkX211dGV4X2xvY2soJmxhenlfZGlyX211dGV4X2FycmF5W2pdKTsKK30KKworc3RhdGljIHZvaWQgdW5sb2NrX2Rpcl9tdXRleChpbnQgaikKK3sKKwlwdGhyZWFkX211dGV4X3VubG9jaygmbGF6eV9kaXJfbXV0ZXhfYXJyYXlbal0pOworfQorCitzdGF0aWMgaW5saW5lIGludCBjb21wdXRlX2Rpcl9sb2NrX25yKAorCWNvbnN0IHN0cnVjdCBoYXNobWFwICptYXAsCisJdW5zaWduZWQgaW50IGhhc2gpCit7CisJcmV0dXJuIGhhc2htYXBfYnVja2V0KG1hcCwgaGFzaCkgJSBMQVpZX01BWF9NVVRFWDsKK30KKworc3RhdGljIHN0cnVjdCBkaXJfZW50cnkgKmhhc2hfZGlyX2VudHJ5X3dpdGhfcGFyZW50X2FuZF9wcmVmaXgoCisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJc3RydWN0IGRpcl9lbnRyeSAqcGFyZW50LAorCXN0cnVjdCBzdHJidWYgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgZGlyX2VudHJ5ICpkaXI7CisJdW5zaWduZWQgaW50IGhhc2g7CisJaW50IGxvY2tfbnI7CisKKwkvKgorCSAqIEVpdGhlciB3ZSBoYXZlIGEgcGFyZW50IGRpcmVjdG9yeSBhbmQgcGF0aCB3aXRoIHNsYXNoKGVzKQorCSAqIG9yIHRoZSBkaXJlY3RvcnkgaXMgYW4gaW1tZWRpYXRlIGNoaWxkIG9mIHRoZSByb290IGRpcmVjdG9yeS4KKwkgKi8KKwlhc3NlcnQoKHBhcmVudCAhPSBOVUxMKSBeIChzdHJjaHIocHJlZml4LT5idWYsICcvJykgPT0gTlVMTCkpOworCisJaWYgKHBhcmVudCkKKwkJaGFzaCA9IG1lbWloYXNoX2NvbnQocGFyZW50LT5lbnQuaGFzaCwKKwkJCXByZWZpeC0+YnVmICsgcGFyZW50LT5uYW1lbGVuLAorCQkJcHJlZml4LT5sZW4gLSBwYXJlbnQtPm5hbWVsZW4pOworCWVsc2UKKwkJaGFzaCA9IG1lbWloYXNoKHByZWZpeC0+YnVmLCBwcmVmaXgtPmxlbik7CisKKwlsb2NrX25yID0gY29tcHV0ZV9kaXJfbG9ja19ucigmaXN0YXRlLT5kaXJfaGFzaCwgaGFzaCk7CisJbG9ja19kaXJfbXV0ZXgobG9ja19ucik7CisKKwlkaXIgPSBmaW5kX2Rpcl9lbnRyeV9faGFzaChpc3RhdGUsIHByZWZpeC0+YnVmLCBwcmVmaXgtPmxlbiwgaGFzaCk7CisJaWYgKCFkaXIpIHsKKwkJRkxFWF9BTExPQ19NRU0oZGlyLCBuYW1lLCBwcmVmaXgtPmJ1ZiwgcHJlZml4LT5sZW4pOworCQloYXNobWFwX2VudHJ5X2luaXQoJmRpci0+ZW50LCBoYXNoKTsKKwkJZGlyLT5uYW1lbGVuID0gcHJlZml4LT5sZW47CisJCWRpci0+cGFyZW50ID0gcGFyZW50OworCQloYXNobWFwX2FkZCgmaXN0YXRlLT5kaXJfaGFzaCwgJmRpci0+ZW50KTsKKworCQlpZiAocGFyZW50KSB7CisJCQl1bmxvY2tfZGlyX211dGV4KGxvY2tfbnIpOworCisJCQkvKiBBbGwgSSByZWFsbHkgbmVlZCBoZXJlIGlzIGFuIEludGVybG9ja2VkSW5jcmVtZW50KCYocGFyZW50LT5ucikpICovCisJCQlsb2NrX25yID0gY29tcHV0ZV9kaXJfbG9ja19ucigmaXN0YXRlLT5kaXJfaGFzaCwgcGFyZW50LT5lbnQuaGFzaCk7CisJCQlsb2NrX2Rpcl9tdXRleChsb2NrX25yKTsKKwkJCXBhcmVudC0+bnIrKzsKKwkJfQorCX0KKworCXVubG9ja19kaXJfbXV0ZXgobG9ja19ucik7CisKKwlyZXR1cm4gZGlyOworfQorCisvKgorICogaGFuZGxlX3JhbmdlXzEoKSBhbmQgaGFuZGxlX3JhbmdlX2RpcigpIGFyZSBkZXJpdmVkIGZyb20KKyAqIGNsZWFyX2NlX2ZsYWdzXzEoKSBhbmQgY2xlYXJfY2VfZmxhZ3NfZGlyKCkgaW4gdW5wYWNrLXRyZWVzLmMKKyAqIGFuZCBoYW5kbGUgdGhlIGl0ZXJhdGlvbiBvdmVyIHRoZSBlbnRpcmUgYXJyYXkgb2YgaW5kZXggZW50cmllcy4KKyAqIFRoZXkgdXNlIHJlY3Vyc2lvbiBmb3IgYWRqYWNlbnQgZW50cmllcyBpbiB0aGUgc2FtZSBwYXJlbnQKKyAqIGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGludCBoYW5kbGVfcmFuZ2VfMSgKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwlpbnQga19zdGFydCwKKwlpbnQga19lbmQsCisJc3RydWN0IGRpcl9lbnRyeSAqcGFyZW50LAorCXN0cnVjdCBzdHJidWYgKnByZWZpeCwKKwlzdHJ1Y3QgbGF6eV9lbnRyeSAqbGF6eV9lbnRyaWVzKTsKKworc3RhdGljIGludCBoYW5kbGVfcmFuZ2VfZGlyKAorCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCWludCBrX3N0YXJ0LAorCWludCBrX2VuZCwKKwlzdHJ1Y3QgZGlyX2VudHJ5ICpwYXJlbnQsCisJc3RydWN0IHN0cmJ1ZiAqcHJlZml4LAorCXN0cnVjdCBsYXp5X2VudHJ5ICpsYXp5X2VudHJpZXMsCisJc3RydWN0IGRpcl9lbnRyeSAqKmRpcl9uZXdfb3V0KQoreworCWludCByYywgazsKKwlpbnQgaW5wdXRfcHJlZml4X2xlbiA9IHByZWZpeC0+bGVuOworCXN0cnVjdCBkaXJfZW50cnkgKmRpcl9uZXc7CisKKwlkaXJfbmV3ID0gaGFzaF9kaXJfZW50cnlfd2l0aF9wYXJlbnRfYW5kX3ByZWZpeChpc3RhdGUsIHBhcmVudCwgcHJlZml4KTsKKworCXN0cmJ1Zl9hZGRjaChwcmVmaXgsICcvJyk7CisKKwkvKgorCSAqIFNjYW4gZm9yd2FyZCBpbiB0aGUgaW5kZXggYXJyYXkgZm9yIGluZGV4IGVudHJpZXMgaGF2aW5nIHRoZSBzYW1lCisJICogcGF0aCBwcmVmaXggKHRoYXQgYXJlIGFsc28gaW4gdGhpcyBkaXJlY3RvcnkpLgorCSAqLworCWlmIChrX3N0YXJ0ICsgMSA+PSBrX2VuZCkKKwkJayA9IGtfZW5kOworCWVsc2UgaWYgKHN0cm5jbXAoaXN0YXRlLT5jYWNoZVtrX3N0YXJ0ICsgMV0tPm5hbWUsIHByZWZpeC0+YnVmLCBwcmVmaXgtPmxlbikgPiAwKQorCQlrID0ga19zdGFydCArIDE7CisJZWxzZSBpZiAoc3RybmNtcChpc3RhdGUtPmNhY2hlW2tfZW5kIC0gMV0tPm5hbWUsIHByZWZpeC0+YnVmLCBwcmVmaXgtPmxlbikgPT0gMCkKKwkJayA9IGtfZW5kOworCWVsc2UgeworCQlpbnQgYmVnaW4gPSBrX3N0YXJ0OworCQlpbnQgZW5kID0ga19lbmQ7CisJCWFzc2VydChiZWdpbiA+PSAwKTsKKwkJd2hpbGUgKGJlZ2luIDwgZW5kKSB7CisJCQlpbnQgbWlkID0gYmVnaW4gKyAoKGVuZCAtIGJlZ2luKSA+PiAxKTsKKwkJCWludCBjbXAgPSBzdHJuY21wKGlzdGF0ZS0+Y2FjaGVbbWlkXS0+bmFtZSwgcHJlZml4LT5idWYsIHByZWZpeC0+bGVuKTsKKwkJCWlmIChjbXAgPT0gMCkgLyogbWlkIGhhcyBzYW1lIHByZWZpeDsgbG9vayBpbiBzZWNvbmQgcGFydCAqLworCQkJCWJlZ2luID0gbWlkICsgMTsKKwkJCWVsc2UgaWYgKGNtcCA+IDApIC8qIG1pZCBpcyBwYXN0IGdyb3VwOyBsb29rIGluIGZpcnN0IHBhcnQgKi8KKwkJCQllbmQgPSBtaWQ7CisJCQllbHNlCisJCQkJZGllKCJjYWNoZSBlbnRyeSBvdXQgb2Ygb3JkZXIiKTsKKwkJfQorCQlrID0gYmVnaW47CisJfQorCisJLyoKKwkgKiBSZWN1cnNlIGFuZCBwcm9jZXNzIHdoYXQgd2UgY2FuIG9mIHRoaXMgc3Vic2V0IFtrX3N0YXJ0LCBrKS4KKwkgKi8KKwlyYyA9IGhhbmRsZV9yYW5nZV8xKGlzdGF0ZSwga19zdGFydCwgaywgZGlyX25ldywgcHJlZml4LCBsYXp5X2VudHJpZXMpOworCisJc3RyYnVmX3NldGxlbihwcmVmaXgsIGlucHV0X3ByZWZpeF9sZW4pOworCisJKmRpcl9uZXdfb3V0ID0gZGlyX25ldzsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX3JhbmdlXzEoCisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJaW50IGtfc3RhcnQsCisJaW50IGtfZW5kLAorCXN0cnVjdCBkaXJfZW50cnkgKnBhcmVudCwKKwlzdHJ1Y3Qgc3RyYnVmICpwcmVmaXgsCisJc3RydWN0IGxhenlfZW50cnkgKmxhenlfZW50cmllcykKK3sKKwlpbnQgaW5wdXRfcHJlZml4X2xlbiA9IHByZWZpeC0+bGVuOworCWludCBrID0ga19zdGFydDsKKworCXdoaWxlIChrIDwga19lbmQpIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZV9rID0gaXN0YXRlLT5jYWNoZVtrXTsKKwkJY29uc3QgY2hhciAqbmFtZSwgKnNsYXNoOworCisJCWlmIChwcmVmaXgtPmxlbiAmJiBzdHJuY21wKGNlX2stPm5hbWUsIHByZWZpeC0+YnVmLCBwcmVmaXgtPmxlbikpCisJCQlicmVhazsKKworCQluYW1lID0gY2Vfay0+bmFtZSArIHByZWZpeC0+bGVuOworCQlzbGFzaCA9IHN0cmNocihuYW1lLCAnLycpOworCisJCWlmIChzbGFzaCkgeworCQkJaW50IGxlbiA9IHNsYXNoIC0gbmFtZTsKKwkJCWludCBwcm9jZXNzZWQ7CisJCQlzdHJ1Y3QgZGlyX2VudHJ5ICpkaXJfbmV3OworCisJCQlzdHJidWZfYWRkKHByZWZpeCwgbmFtZSwgbGVuKTsKKwkJCXByb2Nlc3NlZCA9IGhhbmRsZV9yYW5nZV9kaXIoaXN0YXRlLCBrLCBrX2VuZCwgcGFyZW50LCBwcmVmaXgsIGxhenlfZW50cmllcywgJmRpcl9uZXcpOworCQkJaWYgKHByb2Nlc3NlZCkgeworCQkJCWsgKz0gcHJvY2Vzc2VkOworCQkJCXN0cmJ1Zl9zZXRsZW4ocHJlZml4LCBpbnB1dF9wcmVmaXhfbGVuKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJc3RyYnVmX2FkZGNoKHByZWZpeCwgJy8nKTsKKwkJCXByb2Nlc3NlZCA9IGhhbmRsZV9yYW5nZV8xKGlzdGF0ZSwgaywga19lbmQsIGRpcl9uZXcsIHByZWZpeCwgbGF6eV9lbnRyaWVzKTsKKwkJCWsgKz0gcHJvY2Vzc2VkOworCQkJc3RyYnVmX3NldGxlbihwcmVmaXgsIGlucHV0X3ByZWZpeF9sZW4pOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBJdCBpcyB0b28gZXhwZW5zaXZlIHRvIHRha2UgYSBsb2NrIHRvIGluc2VydCAiY2VfayIKKwkJICogaW50byAiaXN0YXRlLT5uYW1lX2hhc2giIGFuZCBpbmNyZW1lbnQgdGhlIHJlZi1jb3VudAorCQkgKiBvbiB0aGUgInBhcmVudCIgZGlyLiAgU28gd2UgZGVmZXIgYWN0dWFsbHkgdXBkYXRpbmcKKwkJICogcGVybWFuZW50IGRhdGEgc3RydWN0dXJlcyB1bnRpbCBwaGFzZSAyICh3aGVyZSB3ZQorCQkgKiBjYW4gY2hhbmdlIHRoZSBsb2NraW5nIHJlcXVpcmVtZW50cykgYW5kIHNpbXBseQorCQkgKiBhY2N1bXVsYXRlIG91ciBjdXJyZW50IHJlc3VsdHMgaW50byB0aGUgbGF6eV9lbnRyaWVzCisJCSAqIGRhdGEgYXJyYXkpLgorCQkgKgorCQkgKiBXZSBkbyBub3QgbmVlZCB0byBsb2NrIHRoZSBsYXp5X2VudHJpZXMgYXJyYXkgYmVjYXVzZQorCQkgKiB3ZSBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGNlbGxzIGluIHRoZSByYW5nZQorCQkgKiBba19zdGFydCxrX2VuZCkgdGhhdCB0aGlzIHRocmVhZCB3YXMgZ2l2ZW4uCisJCSAqLworCQlsYXp5X2VudHJpZXNba10uZGlyID0gcGFyZW50OworCQlpZiAocGFyZW50KSB7CisJCQlsYXp5X2VudHJpZXNba10uaGFzaF9uYW1lID0gbWVtaWhhc2hfY29udCgKKwkJCQlwYXJlbnQtPmVudC5oYXNoLAorCQkJCWNlX2stPm5hbWUgKyBwYXJlbnQtPm5hbWVsZW4sCisJCQkJY2VfbmFtZWxlbihjZV9rKSAtIHBhcmVudC0+bmFtZWxlbik7CisJCQlsYXp5X2VudHJpZXNba10uaGFzaF9kaXIgPSBwYXJlbnQtPmVudC5oYXNoOworCQl9IGVsc2UgeworCQkJbGF6eV9lbnRyaWVzW2tdLmhhc2hfbmFtZSA9IG1lbWloYXNoKGNlX2stPm5hbWUsIGNlX25hbWVsZW4oY2VfaykpOworCQl9CisKKwkJaysrOworCX0KKworCXJldHVybiBrIC0ga19zdGFydDsKK30KKworc3RydWN0IGxhenlfZGlyX3RocmVhZF9kYXRhIHsKKwlwdGhyZWFkX3QgcHRocmVhZDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZTsKKwlzdHJ1Y3QgbGF6eV9lbnRyeSAqbGF6eV9lbnRyaWVzOworCWludCBrX3N0YXJ0OworCWludCBrX2VuZDsKK307CisKK3N0YXRpYyB2b2lkICpsYXp5X2Rpcl90aHJlYWRfcHJvYyh2b2lkICpfZGF0YSkKK3sKKwlzdHJ1Y3QgbGF6eV9kaXJfdGhyZWFkX2RhdGEgKmQgPSBfZGF0YTsKKwlzdHJ1Y3Qgc3RyYnVmIHByZWZpeCA9IFNUUkJVRl9JTklUOworCWhhbmRsZV9yYW5nZV8xKGQtPmlzdGF0ZSwgZC0+a19zdGFydCwgZC0+a19lbmQsIE5VTEwsICZwcmVmaXgsIGQtPmxhenlfZW50cmllcyk7CisJc3RyYnVmX3JlbGVhc2UoJnByZWZpeCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBsYXp5X25hbWVfdGhyZWFkX2RhdGEgeworCXB0aHJlYWRfdCBwdGhyZWFkOworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlOworCXN0cnVjdCBsYXp5X2VudHJ5ICpsYXp5X2VudHJpZXM7Cit9OworCitzdGF0aWMgdm9pZCAqbGF6eV9uYW1lX3RocmVhZF9wcm9jKHZvaWQgKl9kYXRhKQoreworCXN0cnVjdCBsYXp5X25hbWVfdGhyZWFkX2RhdGEgKmQgPSBfZGF0YTsKKwlpbnQgazsKKworCWZvciAoayA9IDA7IGsgPCBkLT5pc3RhdGUtPmNhY2hlX25yOyBrKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZV9rID0gZC0+aXN0YXRlLT5jYWNoZVtrXTsKKwkJY2Vfay0+Y2VfZmxhZ3MgfD0gQ0VfSEFTSEVEOworCQloYXNobWFwX2VudHJ5X2luaXQoJmNlX2stPmVudCwgZC0+bGF6eV9lbnRyaWVzW2tdLmhhc2hfbmFtZSk7CisJCWhhc2htYXBfYWRkKCZkLT5pc3RhdGUtPm5hbWVfaGFzaCwgJmNlX2stPmVudCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsYXp5X3VwZGF0ZV9kaXJfcmVmX2NvdW50cygKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwlzdHJ1Y3QgbGF6eV9lbnRyeSAqbGF6eV9lbnRyaWVzKQoreworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGsrKykgeworCQlpZiAobGF6eV9lbnRyaWVzW2tdLmRpcikKKwkJCWxhenlfZW50cmllc1trXS5kaXItPm5yKys7CisJfQorfQorCitzdGF0aWMgdm9pZCB0aHJlYWRlZF9sYXp5X2luaXRfbmFtZV9oYXNoKAorCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWludCBlcnI7CisJaW50IG5yX2VhY2g7CisJaW50IGtfc3RhcnQ7CisJaW50IHQ7CisJc3RydWN0IGxhenlfZW50cnkgKmxhenlfZW50cmllczsKKwlzdHJ1Y3QgbGF6eV9kaXJfdGhyZWFkX2RhdGEgKnRkX2RpcjsKKwlzdHJ1Y3QgbGF6eV9uYW1lX3RocmVhZF9kYXRhICp0ZF9uYW1lOworCisJaWYgKCFIQVZFX1RIUkVBRFMpCisJCXJldHVybjsKKworCWtfc3RhcnQgPSAwOworCW5yX2VhY2ggPSBESVZfUk9VTkRfVVAoaXN0YXRlLT5jYWNoZV9uciwgbGF6eV9ucl9kaXJfdGhyZWFkcyk7CisKKwlsYXp5X2VudHJpZXMgPSB4Y2FsbG9jKGlzdGF0ZS0+Y2FjaGVfbnIsIHNpemVvZihzdHJ1Y3QgbGF6eV9lbnRyeSkpOworCXRkX2RpciA9IHhjYWxsb2MobGF6eV9ucl9kaXJfdGhyZWFkcywgc2l6ZW9mKHN0cnVjdCBsYXp5X2Rpcl90aHJlYWRfZGF0YSkpOworCXRkX25hbWUgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbGF6eV9uYW1lX3RocmVhZF9kYXRhKSk7CisKKwlpbml0X2Rpcl9tdXRleCgpOworCisJLyoKKwkgKiBQaGFzZSAxOgorCSAqIEJ1aWxkICJpc3RhdGUtPmRpcl9oYXNoIiB1c2luZyBuICJkaXIiIHRocmVhZHMgKGFuZCBhIHJlYWQtb25seSBpbmRleCkuCisJICovCisJZm9yICh0ID0gMDsgdCA8IGxhenlfbnJfZGlyX3RocmVhZHM7IHQrKykgeworCQlzdHJ1Y3QgbGF6eV9kaXJfdGhyZWFkX2RhdGEgKnRkX2Rpcl90ID0gdGRfZGlyICsgdDsKKwkJdGRfZGlyX3QtPmlzdGF0ZSA9IGlzdGF0ZTsKKwkJdGRfZGlyX3QtPmxhenlfZW50cmllcyA9IGxhenlfZW50cmllczsKKwkJdGRfZGlyX3QtPmtfc3RhcnQgPSBrX3N0YXJ0OworCQlrX3N0YXJ0ICs9IG5yX2VhY2g7CisJCWlmIChrX3N0YXJ0ID4gaXN0YXRlLT5jYWNoZV9ucikKKwkJCWtfc3RhcnQgPSBpc3RhdGUtPmNhY2hlX25yOworCQl0ZF9kaXJfdC0+a19lbmQgPSBrX3N0YXJ0OworCQllcnIgPSBwdGhyZWFkX2NyZWF0ZSgmdGRfZGlyX3QtPnB0aHJlYWQsIE5VTEwsIGxhenlfZGlyX3RocmVhZF9wcm9jLCB0ZF9kaXJfdCk7CisJCWlmIChlcnIpCisJCQlkaWUoXygidW5hYmxlIHRvIGNyZWF0ZSBsYXp5X2RpciB0aHJlYWQ6ICVzIiksIHN0cmVycm9yKGVycikpOworCX0KKwlmb3IgKHQgPSAwOyB0IDwgbGF6eV9ucl9kaXJfdGhyZWFkczsgdCsrKSB7CisJCXN0cnVjdCBsYXp5X2Rpcl90aHJlYWRfZGF0YSAqdGRfZGlyX3QgPSB0ZF9kaXIgKyB0OworCQlpZiAocHRocmVhZF9qb2luKHRkX2Rpcl90LT5wdGhyZWFkLCBOVUxMKSkKKwkJCWRpZSgidW5hYmxlIHRvIGpvaW4gbGF6eV9kaXJfdGhyZWFkIik7CisJfQorCisJLyoKKwkgKiBQaGFzZSAyOgorCSAqIEl0ZXJhdGUgb3ZlciBhbGwgaW5kZXggZW50cmllcyBhbmQgYWRkIHRoZW0gdG8gdGhlICJpc3RhdGUtPm5hbWVfaGFzaCIKKwkgKiB1c2luZyBhIHNpbmdsZSAibmFtZSIgYmFja2dyb3VuZCB0aHJlYWQuCisJICogKFRlc3Rpbmcgc2hvd2VkIGl0IHdhc24ndCB3b3J0aCBydW5uaW5nIG1vcmUgdGhhbiAxIHRocmVhZCBmb3IgdGhpcy4pCisJICoKKwkgKiBNZWFud2hpbGUsIGZpbmlzaCB1cGRhdGluZyB0aGUgcGFyZW50IGRpcmVjdG9yeSByZWYtY291bnRzIGZvciBlYWNoCisJICogaW5kZXggZW50cnkgdXNpbmcgdGhlIGN1cnJlbnQgdGhyZWFkLiAgKFRoaXMgc3RlcCBpcyB2ZXJ5IGZhc3QgYW5kCisJICogZG9lc24ndCBuZWVkIHRocmVhZGluZy4pCisJICovCisJdGRfbmFtZS0+aXN0YXRlID0gaXN0YXRlOworCXRkX25hbWUtPmxhenlfZW50cmllcyA9IGxhenlfZW50cmllczsKKwllcnIgPSBwdGhyZWFkX2NyZWF0ZSgmdGRfbmFtZS0+cHRocmVhZCwgTlVMTCwgbGF6eV9uYW1lX3RocmVhZF9wcm9jLCB0ZF9uYW1lKTsKKwlpZiAoZXJyKQorCQlkaWUoXygidW5hYmxlIHRvIGNyZWF0ZSBsYXp5X25hbWUgdGhyZWFkOiAlcyIpLCBzdHJlcnJvcihlcnIpKTsKKworCWxhenlfdXBkYXRlX2Rpcl9yZWZfY291bnRzKGlzdGF0ZSwgbGF6eV9lbnRyaWVzKTsKKworCWVyciA9IHB0aHJlYWRfam9pbih0ZF9uYW1lLT5wdGhyZWFkLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlkaWUoXygidW5hYmxlIHRvIGpvaW4gbGF6eV9uYW1lIHRocmVhZDogJXMiKSwgc3RyZXJyb3IoZXJyKSk7CisKKwljbGVhbnVwX2Rpcl9tdXRleCgpOworCisJZnJlZSh0ZF9uYW1lKTsKKwlmcmVlKHRkX2Rpcik7CisJZnJlZShsYXp5X2VudHJpZXMpOworfQorCitzdGF0aWMgdm9pZCBsYXp5X2luaXRfbmFtZV9oYXNoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCisJaWYgKGlzdGF0ZS0+bmFtZV9oYXNoX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisJdHJhY2VfcGVyZm9ybWFuY2VfZW50ZXIoKTsKKwloYXNobWFwX2luaXQoJmlzdGF0ZS0+bmFtZV9oYXNoLCBjYWNoZV9lbnRyeV9jbXAsIE5VTEwsIGlzdGF0ZS0+Y2FjaGVfbnIpOworCWhhc2htYXBfaW5pdCgmaXN0YXRlLT5kaXJfaGFzaCwgZGlyX2VudHJ5X2NtcCwgTlVMTCwgaXN0YXRlLT5jYWNoZV9ucik7CisKKwlpZiAobG9va3VwX2xhenlfcGFyYW1zKGlzdGF0ZSkpIHsKKwkJLyoKKwkJICogRGlzYWJsZSBpdGVtIGNvdW50aW5nIGFuZCBhdXRvbWF0aWMgcmVoYXNoaW5nIGJlY2F1c2UKKwkJICogd2UgZG8gcGVyLWNoYWluIChtb2QgbikgbG9ja2luZyByYXRoZXIgdGhhbiB3aG9sZSBoYXNobWFwCisJCSAqIGxvY2tpbmcgYW5kIHdlIG5lZWQgdG8gcHJldmVudCB0aGUgdGFibGUtc2l6ZSBmcm9tIGNoYW5naW5nCisJCSAqIGFuZCBidWNrZXQgaXRlbXMgZnJvbSBiZWluZyByZWRpc3RyaWJ1dGVkLgorCQkgKi8KKwkJaGFzaG1hcF9kaXNhYmxlX2l0ZW1fY291bnRpbmcoJmlzdGF0ZS0+ZGlyX2hhc2gpOworCQl0aHJlYWRlZF9sYXp5X2luaXRfbmFtZV9oYXNoKGlzdGF0ZSk7CisJCWhhc2htYXBfZW5hYmxlX2l0ZW1fY291bnRpbmcoJmlzdGF0ZS0+ZGlyX2hhc2gpOworCX0gZWxzZSB7CisJCWludCBucjsKKwkJZm9yIChuciA9IDA7IG5yIDwgaXN0YXRlLT5jYWNoZV9ucjsgbnIrKykKKwkJCWhhc2hfaW5kZXhfZW50cnkoaXN0YXRlLCBpc3RhdGUtPmNhY2hlW25yXSk7CisJfQorCisJaXN0YXRlLT5uYW1lX2hhc2hfaW5pdGlhbGl6ZWQgPSAxOworCXRyYWNlX3BlcmZvcm1hbmNlX2xlYXZlKCJpbml0aWFsaXplIG5hbWUgaGFzaCIpOworfQorCisvKgorICogQSB0ZXN0IHJvdXRpbmUgZm9yIHQvaGVscGVyLyBzb3VyY2VzLgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aHJlYWRzIHVzZWQgb3IgMCB3aGVuCisgKiB0aGUgbm9uLXRocmVhZGVkIGNvZGUgcGF0aCB3YXMgdXNlZC4KKyAqCisgKiBSZXF1ZXN0aW5nIHRocmVhZGluZyBXSUxMIE5PVCBvdmVycmlkZSBndWFyZHMKKyAqIGluIGxvb2t1cF9sYXp5X3BhcmFtcygpLgorICovCitpbnQgdGVzdF9sYXp5X2luaXRfbmFtZV9oYXNoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgdHJ5X3RocmVhZGVkKQoreworCWxhenlfbnJfZGlyX3RocmVhZHMgPSAwOworCWxhenlfdHJ5X3RocmVhZGVkID0gdHJ5X3RocmVhZGVkOworCisJbGF6eV9pbml0X25hbWVfaGFzaChpc3RhdGUpOworCisJcmV0dXJuIGxhenlfbnJfZGlyX3RocmVhZHM7Cit9CisKK3ZvaWQgYWRkX25hbWVfaGFzaChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpZiAoaXN0YXRlLT5uYW1lX2hhc2hfaW5pdGlhbGl6ZWQpCisJCWhhc2hfaW5kZXhfZW50cnkoaXN0YXRlLCBjZSk7Cit9CisKK3ZvaWQgcmVtb3ZlX25hbWVfaGFzaChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpZiAoIWlzdGF0ZS0+bmFtZV9oYXNoX2luaXRpYWxpemVkIHx8ICEoY2UtPmNlX2ZsYWdzICYgQ0VfSEFTSEVEKSkKKwkJcmV0dXJuOworCWNlLT5jZV9mbGFncyAmPSB+Q0VfSEFTSEVEOworCWhhc2htYXBfcmVtb3ZlKCZpc3RhdGUtPm5hbWVfaGFzaCwgJmNlLT5lbnQsIGNlKTsKKworCWlmIChpZ25vcmVfY2FzZSkKKwkJcmVtb3ZlX2Rpcl9lbnRyeShpc3RhdGUsIGNlKTsKK30KKworc3RhdGljIGludCBzbG93X3NhbWVfbmFtZShjb25zdCBjaGFyICpuYW1lMSwgaW50IGxlbjEsIGNvbnN0IGNoYXIgKm5hbWUyLCBpbnQgbGVuMikKK3sKKwlpZiAobGVuMSAhPSBsZW4yKQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChsZW4xKSB7CisJCXVuc2lnbmVkIGNoYXIgYzEgPSAqbmFtZTErKzsKKwkJdW5zaWduZWQgY2hhciBjMiA9ICpuYW1lMisrOworCQlsZW4xLS07CisJCWlmIChjMSAhPSBjMikgeworCQkJYzEgPSB0b3VwcGVyKGMxKTsKKwkJCWMyID0gdG91cHBlcihjMik7CisJCQlpZiAoYzEgIT0gYzIpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc2FtZV9uYW1lKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBpbnQgaWNhc2UpCit7CisJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UpOworCisJLyoKKwkgKiBBbHdheXMgZG8gZXhhY3QgY29tcGFyZSwgZXZlbiBpZiB3ZSB3YW50IGEgY2FzZS1pZ25vcmluZyBjb21wYXJpc29uOworCSAqIHdlIGRvIHRoZSBxdWljayBleGFjdCBvbmUgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSB0aGUgY29tbW9uIGNhc2UuCisJICovCisJaWYgKGxlbiA9PSBuYW1lbGVuICYmICFtZW1jbXAobmFtZSwgY2UtPm5hbWUsIGxlbikpCisJCXJldHVybiAxOworCisJaWYgKCFpY2FzZSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc2xvd19zYW1lX25hbWUobmFtZSwgbmFtZWxlbiwgY2UtPm5hbWUsIGxlbik7Cit9CisKK2ludCBpbmRleF9kaXJfZXhpc3RzKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbikKK3sKKwlzdHJ1Y3QgZGlyX2VudHJ5ICpkaXI7CisKKwlsYXp5X2luaXRfbmFtZV9oYXNoKGlzdGF0ZSk7CisJZGlyID0gZmluZF9kaXJfZW50cnkoaXN0YXRlLCBuYW1lLCBuYW1lbGVuKTsKKwlyZXR1cm4gZGlyICYmIGRpci0+bnI7Cit9CisKK3ZvaWQgYWRqdXN0X2Rpcm5hbWVfY2FzZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY2hhciAqbmFtZSkKK3sKKwljb25zdCBjaGFyICpzdGFydFB0ciA9IG5hbWU7CisJY29uc3QgY2hhciAqcHRyID0gc3RhcnRQdHI7CisKKwlsYXp5X2luaXRfbmFtZV9oYXNoKGlzdGF0ZSk7CisJd2hpbGUgKCpwdHIpIHsKKwkJd2hpbGUgKCpwdHIgJiYgKnB0ciAhPSAnLycpCisJCQlwdHIrKzsKKworCQlpZiAoKnB0ciA9PSAnLycpIHsKKwkJCXN0cnVjdCBkaXJfZW50cnkgKmRpcjsKKworCQkJZGlyID0gZmluZF9kaXJfZW50cnkoaXN0YXRlLCBuYW1lLCBwdHIgLSBuYW1lKTsKKwkJCWlmIChkaXIpIHsKKwkJCQltZW1jcHkoKHZvaWQgKilzdGFydFB0ciwgZGlyLT5uYW1lICsgKHN0YXJ0UHRyIC0gbmFtZSksIHB0ciAtIHN0YXJ0UHRyKTsKKwkJCQlzdGFydFB0ciA9IHB0ciArIDE7CisJCQl9CisJCQlwdHIrKzsKKwkJfQorCX0KK30KKworc3RydWN0IGNhY2hlX2VudHJ5ICppbmRleF9maWxlX2V4aXN0cyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBpY2FzZSkKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCXVuc2lnbmVkIGludCBoYXNoID0gbWVtaWhhc2gobmFtZSwgbmFtZWxlbik7CisKKwlsYXp5X2luaXRfbmFtZV9oYXNoKGlzdGF0ZSk7CisKKwljZSA9IGhhc2htYXBfZ2V0X2VudHJ5X2Zyb21faGFzaCgmaXN0YXRlLT5uYW1lX2hhc2gsIGhhc2gsIE5VTEwsCisJCQkJCSBzdHJ1Y3QgY2FjaGVfZW50cnksIGVudCk7CisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeV9mcm9tKCZpc3RhdGUtPm5hbWVfaGFzaCwgY2UsIGVudCkgeworCQlpZiAoc2FtZV9uYW1lKGNlLCBuYW1lLCBuYW1lbGVuLCBpY2FzZSkpCisJCQlyZXR1cm4gY2U7CisJfQorCXJldHVybiBOVUxMOworfQorCit2b2lkIGZyZWVfbmFtZV9oYXNoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWlmICghaXN0YXRlLT5uYW1lX2hhc2hfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwlpc3RhdGUtPm5hbWVfaGFzaF9pbml0aWFsaXplZCA9IDA7CisKKwloYXNobWFwX2ZyZWUoJmlzdGF0ZS0+bmFtZV9oYXNoKTsKKwloYXNobWFwX2ZyZWVfZW50cmllcygmaXN0YXRlLT5kaXJfaGFzaCwgc3RydWN0IGRpcl9lbnRyeSwgZW50KTsKK30KZGlmZiAtLWdpdCBhL25lZ290aWF0b3IvZGVmYXVsdC5jIGIvbmVnb3RpYXRvci9kZWZhdWx0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI3OGY2YgotLS0gL2Rldi9udWxsCisrKyBiL25lZ290aWF0b3IvZGVmYXVsdC5jCkBAIC0wLDAgKzEsMTc2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkZWZhdWx0LmgiCisjaW5jbHVkZSAiLi4vY29tbWl0LmgiCisjaW5jbHVkZSAiLi4vZmV0Y2gtbmVnb3RpYXRvci5oIgorI2luY2x1ZGUgIi4uL3ByaW8tcXVldWUuaCIKKyNpbmNsdWRlICIuLi9yZWZzLmgiCisjaW5jbHVkZSAiLi4vdGFnLmgiCisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIENPTU1PTgkJKDFVIDw8IDIpCisjZGVmaW5lIENPTU1PTl9SRUYJKDFVIDw8IDMpCisjZGVmaW5lIFNFRU4JCSgxVSA8PCA0KQorI2RlZmluZSBQT1BQRUQJCSgxVSA8PCA1KQorCitzdGF0aWMgaW50IG1hcmtlZDsKKworc3RydWN0IG5lZ290aWF0aW9uX3N0YXRlIHsKKwlzdHJ1Y3QgcHJpb19xdWV1ZSByZXZfbGlzdDsKKwlpbnQgbm9uX2NvbW1vbl9yZXZzOworfTsKKworc3RhdGljIHZvaWQgcmV2X2xpc3RfcHVzaChzdHJ1Y3QgbmVnb3RpYXRpb25fc3RhdGUgKm5zLAorCQkJICBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBtYXJrKQoreworCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgbWFyaykpIHsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gbWFyazsKKworCQlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCQlyZXR1cm47CisKKwkJcHJpb19xdWV1ZV9wdXQoJm5zLT5yZXZfbGlzdCwgY29tbWl0KTsKKworCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIENPTU1PTikpCisJCQlucy0+bm9uX2NvbW1vbl9yZXZzKys7CisJfQorfQorCitzdGF0aWMgaW50IGNsZWFyX21hcmtzKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3QgKm8gPSBkZXJlZl90YWcodGhlX3JlcG9zaXRvcnksIHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKSwgcmVmbmFtZSwgMCk7CisKKwlpZiAobyAmJiBvLT50eXBlID09IE9CSl9DT01NSVQpCisJCWNsZWFyX2NvbW1pdF9tYXJrcygoc3RydWN0IGNvbW1pdCAqKW8sCisJCQkJICAgQ09NTU9OIHwgQ09NTU9OX1JFRiB8IFNFRU4gfCBQT1BQRUQpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBtYXJrcyBhIHJldiBhbmQgaXRzIGFuY2VzdG9ycyBhcyBjb21tb24uCisgKiBJbiBzb21lIGNhc2VzLCBpdCBpcyBkZXNpcmFibGUgdG8gbWFyayBvbmx5IHRoZSBhbmNlc3RvcnMgKGZvciBleGFtcGxlCisgKiB3aGVuIG9ubHkgdGhlIHNlcnZlciBkb2VzIG5vdCB5ZXQga25vdyB0aGF0IHRoZXkgYXJlIGNvbW1vbikuCisgKi8KK3N0YXRpYyB2b2lkIG1hcmtfY29tbW9uKHN0cnVjdCBuZWdvdGlhdGlvbl9zdGF0ZSAqbnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJaW50IGFuY2VzdG9yc19vbmx5LCBpbnQgZG9udF9wYXJzZSkKK3sKKwlpZiAoY29tbWl0ICE9IE5VTEwgJiYgIShjb21taXQtPm9iamVjdC5mbGFncyAmIENPTU1PTikpIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9IChzdHJ1Y3Qgb2JqZWN0ICopY29tbWl0OworCisJCWlmICghYW5jZXN0b3JzX29ubHkpCisJCQlvLT5mbGFncyB8PSBDT01NT047CisKKwkJaWYgKCEoby0+ZmxhZ3MgJiBTRUVOKSkKKwkJCXJldl9saXN0X3B1c2gobnMsIGNvbW1pdCwgU0VFTik7CisJCWVsc2UgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCisJCQlpZiAoIWFuY2VzdG9yc19vbmx5ICYmICEoby0+ZmxhZ3MgJiBQT1BQRUQpKQorCQkJCW5zLT5ub25fY29tbW9uX3JldnMtLTsKKwkJCWlmICghby0+cGFyc2VkICYmICFkb250X3BhcnNlKQorCQkJCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJCQkJcmV0dXJuOworCisJCQlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisJCQkJCXBhcmVudHM7CisJCQkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KQorCQkJCW1hcmtfY29tbW9uKG5zLCBwYXJlbnRzLT5pdGVtLCAwLAorCQkJCQkgICAgZG9udF9wYXJzZSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBHZXQgdGhlIG5leHQgcmV2IHRvIHNlbmQsIGlnbm9yaW5nIHRoZSBjb21tb24uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpnZXRfcmV2KHN0cnVjdCBuZWdvdGlhdGlvbl9zdGF0ZSAqbnMpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gTlVMTDsKKworCXdoaWxlIChjb21taXQgPT0gTlVMTCkgeworCQl1bnNpZ25lZCBpbnQgbWFyazsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCisJCWlmIChucy0+cmV2X2xpc3QubnIgPT0gMCB8fCBucy0+bm9uX2NvbW1vbl9yZXZzID09IDApCisJCQlyZXR1cm4gTlVMTDsKKworCQljb21taXQgPSBwcmlvX3F1ZXVlX2dldCgmbnMtPnJldl9saXN0KTsKKwkJcGFyc2VfY29tbWl0KGNvbW1pdCk7CisJCXBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gUE9QUEVEOworCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIENPTU1PTikpCisJCQlucy0+bm9uX2NvbW1vbl9yZXZzLS07CisKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSB7CisJCQkvKiBkbyBub3Qgc2VuZCAiaGF2ZSIsIGFuZCBpZ25vcmUgYW5jZXN0b3JzICovCisJCQljb21taXQgPSBOVUxMOworCQkJbWFyayA9IENPTU1PTiB8IFNFRU47CisJCX0gZWxzZSBpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBDT01NT05fUkVGKQorCQkJLyogc2VuZCAiaGF2ZSIsIGFuZCBpZ25vcmUgYW5jZXN0b3JzICovCisJCQltYXJrID0gQ09NTU9OIHwgU0VFTjsKKwkJZWxzZQorCQkJLyogc2VuZCAiaGF2ZSIsIGFsc28gZm9yIGl0cyBhbmNlc3RvcnMgKi8KKwkJCW1hcmsgPSBTRUVOOworCisJCXdoaWxlIChwYXJlbnRzKSB7CisJCQlpZiAoIShwYXJlbnRzLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBTRUVOKSkKKwkJCQlyZXZfbGlzdF9wdXNoKG5zLCBwYXJlbnRzLT5pdGVtLCBtYXJrKTsKKwkJCWlmIChtYXJrICYgQ09NTU9OKQorCQkJCW1hcmtfY29tbW9uKG5zLCBwYXJlbnRzLT5pdGVtLCAxLCAwKTsKKwkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCQl9CisJfQorCisJcmV0dXJuICZjb21taXQtPm9iamVjdC5vaWQ7Cit9CisKK3N0YXRpYyB2b2lkIGtub3duX2NvbW1vbihzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbiwgc3RydWN0IGNvbW1pdCAqYykKK3sKKwlpZiAoIShjLT5vYmplY3QuZmxhZ3MgJiBTRUVOKSkgeworCQlyZXZfbGlzdF9wdXNoKG4tPmRhdGEsIGMsIENPTU1PTl9SRUYgfCBTRUVOKTsKKwkJbWFya19jb21tb24obi0+ZGF0YSwgYywgMSwgMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfdGlwKHN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICpuLCBzdHJ1Y3QgY29tbWl0ICpjKQoreworCW4tPmtub3duX2NvbW1vbiA9IE5VTEw7CisJcmV2X2xpc3RfcHVzaChuLT5kYXRhLCBjLCBTRUVOKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5leHQoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKm4pCit7CisJbi0+a25vd25fY29tbW9uID0gTlVMTDsKKwluLT5hZGRfdGlwID0gTlVMTDsKKwlyZXR1cm4gZ2V0X3JldihuLT5kYXRhKTsKK30KKworc3RhdGljIGludCBhY2soc3RydWN0IGZldGNoX25lZ290aWF0b3IgKm4sIHN0cnVjdCBjb21taXQgKmMpCit7CisJaW50IGtub3duX3RvX2JlX2NvbW1vbiA9ICEhKGMtPm9iamVjdC5mbGFncyAmIENPTU1PTik7CisJbWFya19jb21tb24obi0+ZGF0YSwgYywgMCwgMSk7CisJcmV0dXJuIGtub3duX3RvX2JlX2NvbW1vbjsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZShzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbikKK3sKKwljbGVhcl9wcmlvX3F1ZXVlKCYoKHN0cnVjdCBuZWdvdGlhdGlvbl9zdGF0ZSAqKW4tPmRhdGEpLT5yZXZfbGlzdCk7CisJRlJFRV9BTkRfTlVMTChuLT5kYXRhKTsKK30KKwordm9pZCBkZWZhdWx0X25lZ290aWF0b3JfaW5pdChzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvcikKK3sKKwlzdHJ1Y3QgbmVnb3RpYXRpb25fc3RhdGUgKm5zOworCW5lZ290aWF0b3ItPmtub3duX2NvbW1vbiA9IGtub3duX2NvbW1vbjsKKwluZWdvdGlhdG9yLT5hZGRfdGlwID0gYWRkX3RpcDsKKwluZWdvdGlhdG9yLT5uZXh0ID0gbmV4dDsKKwluZWdvdGlhdG9yLT5hY2sgPSBhY2s7CisJbmVnb3RpYXRvci0+cmVsZWFzZSA9IHJlbGVhc2U7CisJbmVnb3RpYXRvci0+ZGF0YSA9IG5zID0geGNhbGxvYygxLCBzaXplb2YoKm5zKSk7CisJbnMtPnJldl9saXN0LmNvbXBhcmUgPSBjb21wYXJlX2NvbW1pdHNfYnlfY29tbWl0X2RhdGU7CisKKwlpZiAobWFya2VkKQorCQlmb3JfZWFjaF9yZWYoY2xlYXJfbWFya3MsIE5VTEwpOworCW1hcmtlZCA9IDE7Cit9CmRpZmYgLS1naXQgYS9uZWdvdGlhdG9yL2RlZmF1bHQuaCBiL25lZ290aWF0b3IvZGVmYXVsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyM2E4ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9uZWdvdGlhdG9yL2RlZmF1bHQuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgTkVHT1RJQVRPUl9ERUZBVUxUX0gKKyNkZWZpbmUgTkVHT1RJQVRPUl9ERUZBVUxUX0gKKworc3RydWN0IGZldGNoX25lZ290aWF0b3I7CisKK3ZvaWQgZGVmYXVsdF9uZWdvdGlhdG9yX2luaXQoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKm5lZ290aWF0b3IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25lZ290aWF0b3Ivc2tpcHBpbmcuYyBiL25lZ290aWF0b3Ivc2tpcHBpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmZiYzc2Ci0tLSAvZGV2L251bGwKKysrIGIvbmVnb3RpYXRvci9za2lwcGluZy5jCkBAIC0wLDAgKzEsMjUwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJza2lwcGluZy5oIgorI2luY2x1ZGUgIi4uL2NvbW1pdC5oIgorI2luY2x1ZGUgIi4uL2ZldGNoLW5lZ290aWF0b3IuaCIKKyNpbmNsdWRlICIuLi9wcmlvLXF1ZXVlLmgiCisjaW5jbHVkZSAiLi4vcmVmcy5oIgorI2luY2x1ZGUgIi4uL3RhZy5oIgorCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworLyoKKyAqIEJvdGggdXMgYW5kIHRoZSBzZXJ2ZXIga25vdyB0aGF0IGJvdGggcGFydGllcyBoYXZlIHRoaXMgb2JqZWN0LgorICovCisjZGVmaW5lIENPTU1PTgkJKDFVIDw8IDIpCisvKgorICogVGhlIHNlcnZlciBoYXMgdG9sZCB1cyB0aGF0IGl0IGhhcyB0aGlzIG9iamVjdC4gV2Ugc3RpbGwgbmVlZCB0byB0ZWxsIHRoZQorICogc2VydmVyIHRoYXQgd2UgaGF2ZSB0aGlzIG9iamVjdCAob3Igb25lIG9mIGl0cyBkZXNjZW5kYW50cyksIGJ1dCBzaW5jZSB3ZSBhcmUKKyAqIGdvaW5nIHRvIGRvIHRoYXQsIHdlIGRvIG5vdCBuZWVkIHRvIHRlbGwgdGhlIHNlcnZlciBhYm91dCBpdHMgYW5jZXN0b3JzLgorICovCisjZGVmaW5lIEFEVkVSVElTRUQJKDFVIDw8IDMpCisvKgorICogVGhpcyBjb21taXQgaGFzIGVudGVyZWQgdGhlIHByaW9yaXR5IHF1ZXVlLgorICovCisjZGVmaW5lIFNFRU4JCSgxVSA8PCA0KQorLyoKKyAqIFRoaXMgY29tbWl0IGhhcyBsZWZ0IHRoZSBwcmlvcml0eSBxdWV1ZS4KKyAqLworI2RlZmluZSBQT1BQRUQJCSgxVSA8PCA1KQorCitzdGF0aWMgaW50IG1hcmtlZDsKKworLyoKKyAqIEFuIGVudHJ5IGluIHRoZSBwcmlvcml0eSBxdWV1ZS4KKyAqLworc3RydWN0IGVudHJ5IHsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwkvKgorCSAqIFVzZWQgb25seSBpZiBjb21taXQgaXMgbm90IENPTU1PTi4KKwkgKi8KKwl1aW50MTZfdCBvcmlnaW5hbF90dGw7CisJdWludDE2X3QgdHRsOworfTsKKworc3RydWN0IGRhdGEgeworCXN0cnVjdCBwcmlvX3F1ZXVlIHJldl9saXN0OworCisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIG5vbi1DT01NT04gY29tbWl0cyBpbiByZXZfbGlzdC4KKwkgKi8KKwlpbnQgbm9uX2NvbW1vbl9yZXZzOworfTsKKworc3RhdGljIGludCBjb21wYXJlKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXywgdm9pZCAqdW51c2VkKQoreworCWNvbnN0IHN0cnVjdCBlbnRyeSAqYSA9IGFfOworCWNvbnN0IHN0cnVjdCBlbnRyeSAqYiA9IGJfOworCXJldHVybiBjb21wYXJlX2NvbW1pdHNfYnlfY29tbWl0X2RhdGUoYS0+Y29tbWl0LCBiLT5jb21taXQsIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IGVudHJ5ICpyZXZfbGlzdF9wdXNoKHN0cnVjdCBkYXRhICpkYXRhLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBtYXJrKQoreworCXN0cnVjdCBlbnRyeSAqZW50cnk7CisJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gbWFyayB8IFNFRU47CisKKwllbnRyeSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCplbnRyeSkpOworCWVudHJ5LT5jb21taXQgPSBjb21taXQ7CisJcHJpb19xdWV1ZV9wdXQoJmRhdGEtPnJldl9saXN0LCBlbnRyeSk7CisKKwlpZiAoIShtYXJrICYgQ09NTU9OKSkKKwkJZGF0YS0+bm9uX2NvbW1vbl9yZXZzKys7CisJcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgaW50IGNsZWFyX21hcmtzKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3QgKm8gPSBkZXJlZl90YWcodGhlX3JlcG9zaXRvcnksIHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKSwgcmVmbmFtZSwgMCk7CisKKwlpZiAobyAmJiBvLT50eXBlID09IE9CSl9DT01NSVQpCisJCWNsZWFyX2NvbW1pdF9tYXJrcygoc3RydWN0IGNvbW1pdCAqKW8sCisJCQkJICAgQ09NTU9OIHwgQURWRVJUSVNFRCB8IFNFRU4gfCBQT1BQRUQpOworCXJldHVybiAwOworfQorCisvKgorICogTWFyayB0aGlzIFNFRU4gY29tbWl0IGFuZCBhbGwgaXRzIFNFRU4gYW5jZXN0b3JzIGFzIENPTU1PTi4KKyAqLworc3RhdGljIHZvaWQgbWFya19jb21tb24oc3RydWN0IGRhdGEgKmRhdGEsIHN0cnVjdCBjb21taXQgKmMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCisJaWYgKGMtPm9iamVjdC5mbGFncyAmIENPTU1PTikKKwkJcmV0dXJuOworCWMtPm9iamVjdC5mbGFncyB8PSBDT01NT047CisJaWYgKCEoYy0+b2JqZWN0LmZsYWdzICYgUE9QUEVEKSkKKwkJZGF0YS0+bm9uX2NvbW1vbl9yZXZzLS07CisKKwlpZiAoIWMtPm9iamVjdC5wYXJzZWQpCisJCXJldHVybjsKKwlmb3IgKHAgPSBjLT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgU0VFTikKKwkJCW1hcmtfY29tbW9uKGRhdGEsIHAtPml0ZW0pOworCX0KK30KKworLyoKKyAqIEVuc3VyZSB0aGF0IHRoZSBwcmlvcml0eSBxdWV1ZSBoYXMgYW4gZW50cnkgZm9yIHRvX3B1c2gsIGFuZCBlbnN1cmUgdGhhdCB0aGUKKyAqIGVudHJ5IGhhcyB0aGUgY29ycmVjdCBmbGFncyBhbmQgdHRsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAxIGlmIGFuIGVudHJ5IHdhcyBmb3VuZCBvciBjcmVhdGVkLCBhbmQgMCBvdGhlcndpc2UKKyAqIChiZWNhdXNlIHRoZSBlbnRyeSBmb3IgdGhpcyBjb21taXQgaGFkIGFscmVhZHkgYmVlbiBwb3BwZWQpLgorICovCitzdGF0aWMgaW50IHB1c2hfcGFyZW50KHN0cnVjdCBkYXRhICpkYXRhLCBzdHJ1Y3QgZW50cnkgKmVudHJ5LAorCQkgICAgICAgc3RydWN0IGNvbW1pdCAqdG9fcHVzaCkKK3sKKwlzdHJ1Y3QgZW50cnkgKnBhcmVudF9lbnRyeTsKKworCWlmICh0b19wdXNoLT5vYmplY3QuZmxhZ3MgJiBTRUVOKSB7CisJCWludCBpOworCQlpZiAodG9fcHVzaC0+b2JqZWN0LmZsYWdzICYgUE9QUEVEKQorCQkJLyoKKwkJCSAqIFRoZSBlbnRyeSBmb3IgdGhpcyBjb21taXQgaGFzIGFscmVhZHkgYmVlbiBwb3BwZWQsCisJCQkgKiBkdWUgdG8gY2xvY2sgc2tldy4gUHJldGVuZCB0aGF0IHRoaXMgcGFyZW50IGRvZXMgbm90CisJCQkgKiBleGlzdC4KKwkJCSAqLworCQkJcmV0dXJuIDA7CisJCS8qCisJCSAqIEZpbmQgdGhlIGV4aXN0aW5nIGVudHJ5IGFuZCB1c2UgaXQuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cmV2X2xpc3QubnI7IGkrKykgeworCQkJcGFyZW50X2VudHJ5ID0gZGF0YS0+cmV2X2xpc3QuYXJyYXlbaV0uZGF0YTsKKwkJCWlmIChwYXJlbnRfZW50cnktPmNvbW1pdCA9PSB0b19wdXNoKQorCQkJCWdvdG8gcGFyZW50X2ZvdW5kOworCQl9CisJCUJVRygibWlzc2luZyBwYXJlbnQgaW4gcHJpb3JpdHkgcXVldWUiKTsKK3BhcmVudF9mb3VuZDoKKwkJOworCX0gZWxzZSB7CisJCXBhcmVudF9lbnRyeSA9IHJldl9saXN0X3B1c2goZGF0YSwgdG9fcHVzaCwgMCk7CisJfQorCisJaWYgKGVudHJ5LT5jb21taXQtPm9iamVjdC5mbGFncyAmIChDT01NT04gfCBBRFZFUlRJU0VEKSkgeworCQltYXJrX2NvbW1vbihkYXRhLCB0b19wdXNoKTsKKwl9IGVsc2UgeworCQl1aW50MTZfdCBuZXdfb3JpZ2luYWxfdHRsID0gZW50cnktPnR0bAorCQkJPyBlbnRyeS0+b3JpZ2luYWxfdHRsIDogZW50cnktPm9yaWdpbmFsX3R0bCAqIDMgLyAyICsgMTsKKwkJdWludDE2X3QgbmV3X3R0bCA9IGVudHJ5LT50dGwKKwkJCT8gZW50cnktPnR0bCAtIDEgOiBuZXdfb3JpZ2luYWxfdHRsOworCQlpZiAocGFyZW50X2VudHJ5LT5vcmlnaW5hbF90dGwgPCBuZXdfb3JpZ2luYWxfdHRsKSB7CisJCQlwYXJlbnRfZW50cnktPm9yaWdpbmFsX3R0bCA9IG5ld19vcmlnaW5hbF90dGw7CisJCQlwYXJlbnRfZW50cnktPnR0bCA9IG5ld190dGw7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmdldF9yZXYoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJc3RydWN0IGNvbW1pdCAqdG9fc2VuZCA9IE5VTEw7CisKKwl3aGlsZSAodG9fc2VuZCA9PSBOVUxMKSB7CisJCXN0cnVjdCBlbnRyeSAqZW50cnk7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCQlpbnQgcGFyZW50X3B1c2hlZCA9IDA7CisKKwkJaWYgKGRhdGEtPnJldl9saXN0Lm5yID09IDAgfHwgZGF0YS0+bm9uX2NvbW1vbl9yZXZzID09IDApCisJCQlyZXR1cm4gTlVMTDsKKworCQllbnRyeSA9IHByaW9fcXVldWVfZ2V0KCZkYXRhLT5yZXZfbGlzdCk7CisJCWNvbW1pdCA9IGVudHJ5LT5jb21taXQ7CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFBPUFBFRDsKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBDT01NT04pKQorCQkJZGF0YS0+bm9uX2NvbW1vbl9yZXZzLS07CisKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBDT01NT04pICYmICFlbnRyeS0+dHRsKQorCQkJdG9fc2VuZCA9IGNvbW1pdDsKKworCQlwYXJzZV9jb21taXQoY29tbWl0KTsKKwkJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkKKwkJCXBhcmVudF9wdXNoZWQgfD0gcHVzaF9wYXJlbnQoZGF0YSwgZW50cnksIHAtPml0ZW0pOworCisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSAmJiAhcGFyZW50X3B1c2hlZCkKKwkJCS8qCisJCQkgKiBUaGlzIGNvbW1pdCBoYXMgbm8gcGFyZW50cywgb3IgYWxsIG9mIGl0cyBwYXJlbnRzCisJCQkgKiBoYXZlIGFscmVhZHkgYmVlbiBwb3BwZWQgKGR1ZSB0byBjbG9jayBza2V3KSwgc28gc2VuZAorCQkJICogaXQgYW55d2F5LgorCQkJICovCisJCQl0b19zZW5kID0gY29tbWl0OworCisJCWZyZWUoZW50cnkpOworCX0KKworCXJldHVybiAmdG9fc2VuZC0+b2JqZWN0Lm9pZDsKK30KKworc3RhdGljIHZvaWQga25vd25fY29tbW9uKHN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICpuLCBzdHJ1Y3QgY29tbWl0ICpjKQoreworCWlmIChjLT5vYmplY3QuZmxhZ3MgJiBTRUVOKQorCQlyZXR1cm47CisJcmV2X2xpc3RfcHVzaChuLT5kYXRhLCBjLCBBRFZFUlRJU0VEKTsKK30KKworc3RhdGljIHZvaWQgYWRkX3RpcChzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbiwgc3RydWN0IGNvbW1pdCAqYykKK3sKKwluLT5rbm93bl9jb21tb24gPSBOVUxMOworCWlmIChjLT5vYmplY3QuZmxhZ3MgJiBTRUVOKQorCQlyZXR1cm47CisJcmV2X2xpc3RfcHVzaChuLT5kYXRhLCBjLCAwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5leHQoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKm4pCit7CisJbi0+a25vd25fY29tbW9uID0gTlVMTDsKKwluLT5hZGRfdGlwID0gTlVMTDsKKwlyZXR1cm4gZ2V0X3JldihuLT5kYXRhKTsKK30KKworc3RhdGljIGludCBhY2soc3RydWN0IGZldGNoX25lZ290aWF0b3IgKm4sIHN0cnVjdCBjb21taXQgKmMpCit7CisJaW50IGtub3duX3RvX2JlX2NvbW1vbiA9ICEhKGMtPm9iamVjdC5mbGFncyAmIENPTU1PTik7CisJaWYgKCEoYy0+b2JqZWN0LmZsYWdzICYgU0VFTikpCisJCWRpZSgicmVjZWl2ZWQgYWNrIGZvciBjb21taXQgJXMgbm90IHNlbnQgYXMgJ2hhdmUnXG4iLAorCQkgICAgb2lkX3RvX2hleCgmYy0+b2JqZWN0Lm9pZCkpOworCW1hcmtfY29tbW9uKG4tPmRhdGEsIGMpOworCXJldHVybiBrbm93bl90b19iZV9jb21tb247Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2Uoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKm4pCit7CisJY2xlYXJfcHJpb19xdWV1ZSgmKChzdHJ1Y3QgZGF0YSAqKW4tPmRhdGEpLT5yZXZfbGlzdCk7CisJRlJFRV9BTkRfTlVMTChuLT5kYXRhKTsKK30KKwordm9pZCBza2lwcGluZ19uZWdvdGlhdG9yX2luaXQoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKm5lZ290aWF0b3IpCit7CisJc3RydWN0IGRhdGEgKmRhdGE7CisJbmVnb3RpYXRvci0+a25vd25fY29tbW9uID0ga25vd25fY29tbW9uOworCW5lZ290aWF0b3ItPmFkZF90aXAgPSBhZGRfdGlwOworCW5lZ290aWF0b3ItPm5leHQgPSBuZXh0OworCW5lZ290aWF0b3ItPmFjayA9IGFjazsKKwluZWdvdGlhdG9yLT5yZWxlYXNlID0gcmVsZWFzZTsKKwluZWdvdGlhdG9yLT5kYXRhID0gZGF0YSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkYXRhKSk7CisJZGF0YS0+cmV2X2xpc3QuY29tcGFyZSA9IGNvbXBhcmU7CisKKwlpZiAobWFya2VkKQorCQlmb3JfZWFjaF9yZWYoY2xlYXJfbWFya3MsIE5VTEwpOworCW1hcmtlZCA9IDE7Cit9CmRpZmYgLS1naXQgYS9uZWdvdGlhdG9yL3NraXBwaW5nLmggYi9uZWdvdGlhdG9yL3NraXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdkZmE2YwotLS0gL2Rldi9udWxsCisrKyBiL25lZ290aWF0b3Ivc2tpcHBpbmcuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgTkVHT1RJQVRPUl9TS0lQUElOR19ICisjZGVmaW5lIE5FR09USUFUT1JfU0tJUFBJTkdfSAorCitzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvcjsKKwordm9pZCBza2lwcGluZ19uZWdvdGlhdG9yX2luaXQoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKm5lZ290aWF0b3IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25vdGVzLWNhY2hlLmMgYi9ub3Rlcy1jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NzMzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9ub3Rlcy1jYWNoZS5jCkBAIC0wLDAgKzEsOTggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm5vdGVzLWNhY2hlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RhdGljIGludCBub3Rlc19jYWNoZV9tYXRjaF92YWxpZGl0eShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpyZWYsCisJCQkJICAgICAgY29uc3QgY2hhciAqdmFsaWRpdHkpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBwcmV0dHlfY3R4OworCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldDsKKworCWlmIChyZWFkX3JlZihyZWYsICZvaWQpIDwgMCkKKwkJcmV0dXJuIDA7CisKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkociwgJm9pZCwgMSk7CisJaWYgKCFjb21taXQpCisJCXJldHVybiAwOworCisJbWVtc2V0KCZwcmV0dHlfY3R4LCAwLCBzaXplb2YocHJldHR5X2N0eCkpOworCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICIlcyIsICZtc2csICZwcmV0dHlfY3R4KTsKKwlzdHJidWZfdHJpbSgmbXNnKTsKKworCXJldCA9ICFzdHJjbXAobXNnLmJ1ZiwgdmFsaWRpdHkpOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBub3Rlc19jYWNoZV9pbml0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMsCisJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbGlkaXR5KQoreworCXN0cnVjdCBzdHJidWYgcmVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGZsYWdzID0gTk9URVNfSU5JVF9XUklUQUJMRTsKKworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwljLT52YWxpZGl0eSA9IHhzdHJkdXAodmFsaWRpdHkpOworCisJc3RyYnVmX2FkZGYoJnJlZiwgInJlZnMvbm90ZXMvJXMiLCBuYW1lKTsKKwlpZiAoIW5vdGVzX2NhY2hlX21hdGNoX3ZhbGlkaXR5KHIsIHJlZi5idWYsIHZhbGlkaXR5KSkKKwkJZmxhZ3MgfD0gTk9URVNfSU5JVF9FTVBUWTsKKwlpbml0X25vdGVzKCZjLT50cmVlLCByZWYuYnVmLCBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSwgZmxhZ3MpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZWYpOworfQorCitpbnQgbm90ZXNfY2FjaGVfd3JpdGUoc3RydWN0IG5vdGVzX2NhY2hlICpjKQoreworCXN0cnVjdCBvYmplY3RfaWQgdHJlZV9vaWQsIGNvbW1pdF9vaWQ7CisKKwlpZiAoIWMgfHwgIWMtPnRyZWUuaW5pdGlhbGl6ZWQgfHwgIWMtPnRyZWUudXBkYXRlX3JlZiB8fAorCSAgICAhKmMtPnRyZWUudXBkYXRlX3JlZikKKwkJcmV0dXJuIC0xOworCWlmICghYy0+dHJlZS5kaXJ0eSkKKwkJcmV0dXJuIDA7CisKKwlpZiAod3JpdGVfbm90ZXNfdHJlZSgmYy0+dHJlZSwgJnRyZWVfb2lkKSkKKwkJcmV0dXJuIC0xOworCWlmIChjb21taXRfdHJlZShjLT52YWxpZGl0eSwgc3RybGVuKGMtPnZhbGlkaXR5KSwgJnRyZWVfb2lkLCBOVUxMLAorCQkJJmNvbW1pdF9vaWQsIE5VTEwsIE5VTEwpIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmICh1cGRhdGVfcmVmKCJ1cGRhdGUgbm90ZXMgY2FjaGUiLCBjLT50cmVlLnVwZGF0ZV9yZWYsICZjb21taXRfb2lkLAorCQkgICAgICAgTlVMTCwgMCwgVVBEQVRFX1JFRlNfUVVJRVRfT05fRVJSKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitjaGFyICpub3Rlc19jYWNoZV9nZXQoc3RydWN0IG5vdGVzX2NhY2hlICpjLCBzdHJ1Y3Qgb2JqZWN0X2lkICprZXlfb2lkLAorCQkgICAgICBzaXplX3QgKm91dHNpemUpCit7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdmFsdWVfb2lkOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyICp2YWx1ZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwl2YWx1ZV9vaWQgPSBnZXRfbm90ZSgmYy0+dHJlZSwga2V5X29pZCk7CisJaWYgKCF2YWx1ZV9vaWQpCisJCXJldHVybiBOVUxMOworCXZhbHVlID0gcmVhZF9vYmplY3RfZmlsZSh2YWx1ZV9vaWQsICZ0eXBlLCAmc2l6ZSk7CisKKwkqb3V0c2l6ZSA9IHNpemU7CisJcmV0dXJuIHZhbHVlOworfQorCitpbnQgbm90ZXNfY2FjaGVfcHV0KHN0cnVjdCBub3Rlc19jYWNoZSAqYywgc3RydWN0IG9iamVjdF9pZCAqa2V5X29pZCwKKwkJICAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBvYmplY3RfaWQgdmFsdWVfb2lkOworCisJaWYgKHdyaXRlX29iamVjdF9maWxlKGRhdGEsIHNpemUsICJibG9iIiwgJnZhbHVlX29pZCkgPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGFkZF9ub3RlKCZjLT50cmVlLCBrZXlfb2lkLCAmdmFsdWVfb2lkLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL25vdGVzLWNhY2hlLmggYi9ub3Rlcy1jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZjhjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9ub3Rlcy1jYWNoZS5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgTk9URVNfQ0FDSEVfSAorI2RlZmluZSBOT1RFU19DQUNIRV9ICisKKyNpbmNsdWRlICJub3Rlcy5oIgorCitzdHJ1Y3QgcmVwb3NpdG9yeTsKKworc3RydWN0IG5vdGVzX2NhY2hlIHsKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSB0cmVlOworCWNoYXIgKnZhbGlkaXR5OworfTsKKwordm9pZCBub3Rlc19jYWNoZV9pbml0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMsCisJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbGlkaXR5KTsKK2ludCBub3Rlc19jYWNoZV93cml0ZShzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMpOworCitjaGFyICpub3Rlc19jYWNoZV9nZXQoc3RydWN0IG5vdGVzX2NhY2hlICpjLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHNpemVfdAorCQkgICAgICAqb3V0c2l6ZSk7CitpbnQgbm90ZXNfY2FjaGVfcHV0KHN0cnVjdCBub3Rlc19jYWNoZSAqYywgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpOworCisjZW5kaWYgLyogTk9URVNfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvbm90ZXMtbWVyZ2UuYyBiL25vdGVzLW1lcmdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlNzI0ZgotLS0gL2Rldi9udWxsCisrKyBiL25vdGVzLW1lcmdlLmMKQEAgLTAsMCArMSw3NTQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibGwtbWVyZ2UuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJub3Rlcy5oIgorI2luY2x1ZGUgIm5vdGVzLW1lcmdlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAibm90ZXMtdXRpbHMuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKworc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgeworCXN0cnVjdCBvYmplY3RfaWQgb2JqLCBiYXNlLCBsb2NhbCwgcmVtb3RlOworfTsKKwordm9pZCBpbml0X25vdGVzX21lcmdlX29wdGlvbnMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICBzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbykKK3sKKwltZW1zZXQobywgMCwgc2l6ZW9mKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zKSk7CisJc3RyYnVmX2luaXQoJihvLT5jb21taXRfbXNnKSwgMCk7CisJby0+dmVyYm9zaXR5ID0gTk9URVNfTUVSR0VfVkVSQk9TSVRZX0RFRkFVTFQ7CisJby0+cmVwbyA9IHI7Cit9CisKK3N0YXRpYyBpbnQgcGF0aF90b19vaWQoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWNoYXIgaGV4X29pZFtHSVRfTUFYX0hFWFNaXTsKKwlpbnQgaSA9IDA7CisJd2hpbGUgKCpwYXRoICYmIGkgPCB0aGVfaGFzaF9hbGdvLT5oZXhzeikgeworCQlpZiAoKnBhdGggIT0gJy8nKQorCQkJaGV4X29pZFtpKytdID0gKnBhdGg7CisJCXBhdGgrKzsKKwl9CisJaWYgKCpwYXRoIHx8IGkgIT0gdGhlX2hhc2hfYWxnby0+aGV4c3opCisJCXJldHVybiAtMTsKKwlyZXR1cm4gZ2V0X29pZF9oZXgoaGV4X29pZCwgb2lkKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfbm90ZXNfZmlsZXBhaXIoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzd2l0Y2ggKHAtPnN0YXR1cykgeworCWNhc2UgRElGRl9TVEFUVVNfTU9ESUZJRUQ6CisJCWFzc2VydChwLT5vbmUtPm1vZGUgPT0gcC0+dHdvLT5tb2RlKTsKKwkJYXNzZXJ0KCFpc19udWxsX29pZCgmcC0+b25lLT5vaWQpKTsKKwkJYXNzZXJ0KCFpc19udWxsX29pZCgmcC0+dHdvLT5vaWQpKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NUQVRVU19BRERFRDoKKwkJYXNzZXJ0KGlzX251bGxfb2lkKCZwLT5vbmUtPm9pZCkpOworCQlicmVhazsKKwljYXNlIERJRkZfU1RBVFVTX0RFTEVURUQ6CisJCWFzc2VydChpc19udWxsX29pZCgmcC0+dHdvLT5vaWQpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKwlhc3NlcnQoIXN0cmNtcChwLT5vbmUtPnBhdGgsIHAtPnR3by0+cGF0aCkpOworCXJldHVybiBwYXRoX3RvX29pZChwLT5vbmUtPnBhdGgsIG9pZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpciAqZmluZF9ub3Rlc19tZXJnZV9wYWlyX3BvcygKKwkJc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKmxpc3QsIGludCBsZW4sIHN0cnVjdCBvYmplY3RfaWQgKm9iaiwKKwkJaW50IGluc2VydF9uZXcsIGludCAqb2NjdXBpZWQpCit7CisJLyoKKwkgKiBCb3RoIGRpZmZfdHJlZV9yZW1vdGUoKSBhbmQgZGlmZl90cmVlX2xvY2FsKCkgdGVuZCB0byBwcm9jZXNzCisJICogbWVyZ2VfcGFpcnMgaW4gYXNjZW5kaW5nIG9yZGVyLiBUaGVyZWZvcmUsIGNhY2hlIGxhc3QgcmV0dXJuZWQKKwkgKiBpbmRleCwgYW5kIHNlYXJjaCBzZXF1ZW50aWFsbHkgZnJvbSB0aGVyZSB1bnRpbCB0aGUgYXBwcm9wcmlhdGUKKwkgKiBwb3NpdGlvbiBpcyBmb3VuZC4KKwkgKgorCSAqIFNpbmNlIGluc2VydHMgb25seSBoYXBwZW4gZnJvbSBkaWZmX3RyZWVfcmVtb3RlKCkgKHdoaWNoIG1haW5seQorCSAqIF9hcHBlbmRzXyksIHdlIGRvbid0IGNhcmUgdGhhdCBpbnNlcnRpbmcgaW50byB0aGUgbWlkZGxlIG9mIHRoZQorCSAqIGxpc3QgaXMgZXhwZW5zaXZlICh1c2luZyBtZW1tb3ZlKCkpLgorCSAqLworCXN0YXRpYyBpbnQgbGFzdF9pbmRleDsKKwlpbnQgaSA9IGxhc3RfaW5kZXggPCBsZW4gPyBsYXN0X2luZGV4IDogbGVuIC0gMTsKKwlpbnQgcHJldl9jbXAgPSAwLCBjbXAgPSAtMTsKKwl3aGlsZSAoaSA+PSAwICYmIGkgPCBsZW4pIHsKKwkJY21wID0gb2lkY21wKG9iaiwgJmxpc3RbaV0ub2JqKTsKKwkJaWYgKCFjbXApIC8qIG9iaiBiZWxvbmdzIEAgaSAqLworCQkJYnJlYWs7CisJCWVsc2UgaWYgKGNtcCA8IDAgJiYgcHJldl9jbXAgPD0gMCkgLyogb2JqIGJlbG9uZ3MgPCBpICovCisJCQlpLS07CisJCWVsc2UgaWYgKGNtcCA8IDApIC8qIG9iaiBiZWxvbmdzIGJldHdlZW4gaS0xIGFuZCBpICovCisJCQlicmVhazsKKwkJZWxzZSBpZiAoY21wID4gMCAmJiBwcmV2X2NtcCA+PSAwKSAvKiBvYmogYmVsb25ncyA+IGkgKi8KKwkJCWkrKzsKKwkJZWxzZSAvKiBpZiAoY21wID4gMCkgKi8geyAvKiBvYmogYmVsb25ncyBiZXR3ZWVuIGkgYW5kIGkrMSAqLworCQkJaSsrOworCQkJYnJlYWs7CisJCX0KKwkJcHJldl9jbXAgPSBjbXA7CisJfQorCWlmIChpIDwgMCkKKwkJaSA9IDA7CisJLyogb2JqIGJlbG9uZ3MgYXQsIG9yIGltbWVkaWF0ZWx5IHByZWNlZGluZywgaW5kZXggaSAoMCA8PSBpIDw9IGxlbikgKi8KKworCWlmICghY21wKQorCQkqb2NjdXBpZWQgPSAxOworCWVsc2UgeworCQkqb2NjdXBpZWQgPSAwOworCQlpZiAoaW5zZXJ0X25ldyAmJiBpIDwgbGVuKSB7CisJCQlNT1ZFX0FSUkFZKGxpc3QgKyBpICsgMSwgbGlzdCArIGksIGxlbiAtIGkpOworCQkJbWVtc2V0KGxpc3QgKyBpLCAwLCBzaXplb2Yoc3RydWN0IG5vdGVzX21lcmdlX3BhaXIpKTsKKwkJfQorCX0KKwlsYXN0X2luZGV4ID0gaTsKKwlyZXR1cm4gbGlzdCArIGk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2lkIHVuaW5pdGlhbGl6ZWQgPSB7CisJIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiIFwKKwkiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIKK307CisKK3N0YXRpYyBzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpciAqZGlmZl90cmVlX3JlbW90ZShzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpiYXNlLAorCQkJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnJlbW90ZSwKKwkJCQkJCSBpbnQgKm51bV9jaGFuZ2VzKQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0OworCXN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpjaGFuZ2VzOworCWludCBpLCBsZW4gPSAwOworCisJdHJhY2VfcHJpbnRmKCJcdGRpZmZfdHJlZV9yZW1vdGUoYmFzZSA9ICUuN3MsIHJlbW90ZSA9ICUuN3MpXG4iLAorCSAgICAgICBvaWRfdG9faGV4KGJhc2UpLCBvaWRfdG9faGV4KHJlbW90ZSkpOworCisJcmVwb19kaWZmX3NldHVwKG8tPnJlcG8sICZvcHQpOworCW9wdC5mbGFncy5yZWN1cnNpdmUgPSAxOworCW9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCWRpZmZfc2V0dXBfZG9uZSgmb3B0KTsKKwlkaWZmX3RyZWVfb2lkKGJhc2UsIHJlbW90ZSwgIiIsICZvcHQpOworCWRpZmZjb3JlX3N0ZCgmb3B0KTsKKworCWNoYW5nZXMgPSB4Y2FsbG9jKGRpZmZfcXVldWVkX2RpZmYubnIsIHNpemVvZihzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpcikpOworCisJZm9yIChpID0gMDsgaSA8IGRpZmZfcXVldWVkX2RpZmYubnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IGRpZmZfcXVldWVkX2RpZmYucXVldWVbaV07CisJCXN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICptcDsKKwkJaW50IG9jY3VwaWVkOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9iajsKKworCQlpZiAodmVyaWZ5X25vdGVzX2ZpbGVwYWlyKHAsICZvYmopKSB7CisJCQl0cmFjZV9wcmludGYoIlx0XHRDYW5ub3QgbWVyZ2UgZW50cnkgJyVzJyAoJWMpOiAiCisJCQkgICAgICAgIiUuN3MgLT4gJS43cy4gU2tpcHBpbmchXG4iLCBwLT5vbmUtPnBhdGgsCisJCQkgICAgICAgcC0+c3RhdHVzLCBvaWRfdG9faGV4KCZwLT5vbmUtPm9pZCksCisJCQkgICAgICAgb2lkX3RvX2hleCgmcC0+dHdvLT5vaWQpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCW1wID0gZmluZF9ub3Rlc19tZXJnZV9wYWlyX3BvcyhjaGFuZ2VzLCBsZW4sICZvYmosIDEsICZvY2N1cGllZCk7CisJCWlmIChvY2N1cGllZCkgeworCQkJLyogV2UndmUgZm91bmQgYW4gYWRkaXRpb24vZGVsZXRpb24gcGFpciAqLworCQkJYXNzZXJ0KG9pZGVxKCZtcC0+b2JqLCAmb2JqKSk7CisJCQlpZiAoaXNfbnVsbF9vaWQoJnAtPm9uZS0+b2lkKSkgeyAvKiBhZGRpdGlvbiAqLworCQkJCWFzc2VydChpc19udWxsX29pZCgmbXAtPnJlbW90ZSkpOworCQkJCW9pZGNweSgmbXAtPnJlbW90ZSwgJnAtPnR3by0+b2lkKTsKKwkJCX0gZWxzZSBpZiAoaXNfbnVsbF9vaWQoJnAtPnR3by0+b2lkKSkgeyAvKiBkZWxldGlvbiAqLworCQkJCWFzc2VydChpc19udWxsX29pZCgmbXAtPmJhc2UpKTsKKwkJCQlvaWRjcHkoJm1wLT5iYXNlLCAmcC0+b25lLT5vaWQpOworCQkJfSBlbHNlCisJCQkJYXNzZXJ0KCEiSW52YWxpZCBleGlzdGluZyBjaGFuZ2UgcmVjb3JkZWQiKTsKKwkJfSBlbHNlIHsKKwkJCW9pZGNweSgmbXAtPm9iaiwgJm9iaik7CisJCQlvaWRjcHkoJm1wLT5iYXNlLCAmcC0+b25lLT5vaWQpOworCQkJb2lkY3B5KCZtcC0+bG9jYWwsICZ1bmluaXRpYWxpemVkKTsKKwkJCW9pZGNweSgmbXAtPnJlbW90ZSwgJnAtPnR3by0+b2lkKTsKKwkJCWxlbisrOworCQl9CisJCXRyYWNlX3ByaW50ZigiXHRcdFN0b3JlZCByZW1vdGUgY2hhbmdlIGZvciAlczogJS43cyAtPiAlLjdzXG4iLAorCQkgICAgICAgb2lkX3RvX2hleCgmbXAtPm9iaiksIG9pZF90b19oZXgoJm1wLT5iYXNlKSwKKwkJICAgICAgIG9pZF90b19oZXgoJm1wLT5yZW1vdGUpKTsKKwl9CisJZGlmZl9mbHVzaCgmb3B0KTsKKwljbGVhcl9wYXRoc3BlYygmb3B0LnBhdGhzcGVjKTsKKworCSpudW1fY2hhbmdlcyA9IGxlbjsKKwlyZXR1cm4gY2hhbmdlczsKK30KKworc3RhdGljIHZvaWQgZGlmZl90cmVlX2xvY2FsKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQkJICAgIHN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpjaGFuZ2VzLCBpbnQgbGVuLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmJhc2UsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbG9jYWwpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBvcHQ7CisJaW50IGk7CisKKwl0cmFjZV9wcmludGYoIlx0ZGlmZl90cmVlX2xvY2FsKGxlbiA9ICVpLCBiYXNlID0gJS43cywgbG9jYWwgPSAlLjdzKVxuIiwKKwkgICAgICAgbGVuLCBvaWRfdG9faGV4KGJhc2UpLCBvaWRfdG9faGV4KGxvY2FsKSk7CisKKwlyZXBvX2RpZmZfc2V0dXAoby0+cmVwbywgJm9wdCk7CisJb3B0LmZsYWdzLnJlY3Vyc2l2ZSA9IDE7CisJb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisJZGlmZl9zZXR1cF9kb25lKCZvcHQpOworCWRpZmZfdHJlZV9vaWQoYmFzZSwgbG9jYWwsICIiLCAmb3B0KTsKKwlkaWZmY29yZV9zdGQoJm9wdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXTsKKwkJc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKm1wOworCQlpbnQgbWF0Y2g7CisJCXN0cnVjdCBvYmplY3RfaWQgb2JqOworCisJCWlmICh2ZXJpZnlfbm90ZXNfZmlsZXBhaXIocCwgJm9iaikpIHsKKwkJCXRyYWNlX3ByaW50ZigiXHRcdENhbm5vdCBtZXJnZSBlbnRyeSAnJXMnICglYyk6ICIKKwkJCSAgICAgICAiJS43cyAtPiAlLjdzLiBTa2lwcGluZyFcbiIsIHAtPm9uZS0+cGF0aCwKKwkJCSAgICAgICBwLT5zdGF0dXMsIG9pZF90b19oZXgoJnAtPm9uZS0+b2lkKSwKKwkJCSAgICAgICBvaWRfdG9faGV4KCZwLT50d28tPm9pZCkpOworCQkJY29udGludWU7CisJCX0KKwkJbXAgPSBmaW5kX25vdGVzX21lcmdlX3BhaXJfcG9zKGNoYW5nZXMsIGxlbiwgJm9iaiwgMCwgJm1hdGNoKTsKKwkJaWYgKCFtYXRjaCkgeworCQkJdHJhY2VfcHJpbnRmKCJcdFx0SWdub3JpbmcgbG9jYWwtb25seSBjaGFuZ2UgZm9yICVzOiAiCisJCQkgICAgICAgIiUuN3MgLT4gJS43c1xuIiwgb2lkX3RvX2hleCgmb2JqKSwKKwkJCSAgICAgICBvaWRfdG9faGV4KCZwLT5vbmUtPm9pZCksCisJCQkgICAgICAgb2lkX3RvX2hleCgmcC0+dHdvLT5vaWQpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYXNzZXJ0KG9pZGVxKCZtcC0+b2JqLCAmb2JqKSk7CisJCWlmIChpc19udWxsX29pZCgmcC0+dHdvLT5vaWQpKSB7IC8qIGRlbGV0aW9uICovCisJCQkvKgorCQkJICogRWl0aGVyIHRoaXMgaXMgYSB0cnVlIGRlbGV0aW9uICgxKSwgb3IgaXQgaXMgcGFydAorCQkJICogb2YgYW4gQS9EIHBhaXIgKDIpLCBvciBEL0EgcGFpciAoMyk6CisJCQkgKgorCQkJICogKDEpIG1wLT5sb2NhbCBpcyB1bmluaXRpYWxpemVkOyBzZXQgaXQgdG8gbnVsbF9zaGExCisJCQkgKiAoMikgbXAtPmxvY2FsIGlzIG5vdCB1bmluaXRpYWxpemVkOyBkb24ndCB0b3VjaCBpdAorCQkJICogKDMpIG1wLT5sb2NhbCBpcyB1bmluaXRpYWxpemVkOyBzZXQgaXQgdG8gbnVsbF9zaGExCisJCQkgKiAgICAgKHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgZm9sbG93aW5nIGFkZGl0aW9uKQorCQkJICovCisJCQlpZiAob2lkZXEoJm1wLT5sb2NhbCwgJnVuaW5pdGlhbGl6ZWQpKQorCQkJCW9pZGNscigmbXAtPmxvY2FsKTsKKwkJfSBlbHNlIGlmIChpc19udWxsX29pZCgmcC0+b25lLT5vaWQpKSB7IC8qIGFkZGl0aW9uICovCisJCQkvKgorCQkJICogRWl0aGVyIHRoaXMgaXMgYSB0cnVlIGFkZGl0aW9uICgxKSwgb3IgaXQgaXMgcGFydAorCQkJICogb2YgYW4gQS9EIHBhaXIgKDIpLCBvciBEL0EgcGFpciAoMyk6CisJCQkgKgorCQkJICogKDEpIG1wLT5sb2NhbCBpcyB1bmluaXRpYWxpemVkOyBzZXQgdG8gcC0+dHdvLT5zaGExCisJCQkgKiAoMikgbXAtPmxvY2FsIGlzIHVuaW5pdGlhbGl6ZWQ7IHNldCB0byBwLT50d28tPnNoYTEKKwkJCSAqICgzKSBtcC0+bG9jYWwgaXMgbnVsbF9zaGExOyAgICAgc2V0IHRvIHAtPnR3by0+c2hhMQorCQkJICovCisJCQlhc3NlcnQoaXNfbnVsbF9vaWQoJm1wLT5sb2NhbCkgfHwKKwkJCSAgICAgICBvaWRlcSgmbXAtPmxvY2FsLCAmdW5pbml0aWFsaXplZCkpOworCQkJb2lkY3B5KCZtcC0+bG9jYWwsICZwLT50d28tPm9pZCk7CisJCX0gZWxzZSB7IC8qIG1vZGlmaWNhdGlvbiAqLworCQkJLyoKKwkJCSAqIFRoaXMgaXMgYSB0cnVlIG1vZGlmaWNhdGlvbi4gcC0+b25lLT5zaGExIHNoYWxsCisJCQkgKiBtYXRjaCBtcC0+YmFzZSwgYW5kIG1wLT5sb2NhbCBzaGFsbCBiZSB1bmluaXRpYWxpemVkLgorCQkJICogU2V0IG1wLT5sb2NhbCB0byBwLT50d28tPnNoYTEuCisJCQkgKi8KKwkJCWFzc2VydChvaWRlcSgmcC0+b25lLT5vaWQsICZtcC0+YmFzZSkpOworCQkJYXNzZXJ0KG9pZGVxKCZtcC0+bG9jYWwsICZ1bmluaXRpYWxpemVkKSk7CisJCQlvaWRjcHkoJm1wLT5sb2NhbCwgJnAtPnR3by0+b2lkKTsKKwkJfQorCQl0cmFjZV9wcmludGYoIlx0XHRTdG9yZWQgbG9jYWwgY2hhbmdlIGZvciAlczogJS43cyAtPiAlLjdzXG4iLAorCQkgICAgICAgb2lkX3RvX2hleCgmbXAtPm9iaiksIG9pZF90b19oZXgoJm1wLT5iYXNlKSwKKwkJICAgICAgIG9pZF90b19oZXgoJm1wLT5sb2NhbCkpOworCX0KKwlkaWZmX2ZsdXNoKCZvcHQpOworCWNsZWFyX3BhdGhzcGVjKCZvcHQucGF0aHNwZWMpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19ub3Rlc19tZXJnZV93b3JrdHJlZShzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbykKK3sKKwlpZiAoIW8tPmhhc193b3JrdHJlZSkgeworCQkvKgorCQkgKiBNdXN0IGVzdGFibGlzaCBOT1RFU19NRVJHRV9XT1JLVFJFRS4KKwkJICogQWJvcnQgaWYgTk9URVNfTUVSR0VfV09SS1RSRUUgYWxyZWFkeSBleGlzdHMKKwkJICovCisJCWlmIChmaWxlX2V4aXN0cyhnaXRfcGF0aChOT1RFU19NRVJHRV9XT1JLVFJFRSkpICYmCisJCSAgICAhaXNfZW1wdHlfZGlyKGdpdF9wYXRoKE5PVEVTX01FUkdFX1dPUktUUkVFKSkpIHsKKwkJCWlmIChhZHZpY2VfcmVzb2x2ZV9jb25mbGljdCkKKwkJCQlkaWUoXygiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIHByZXZpb3VzICIKKwkJCQkgICAgIm5vdGVzIG1lcmdlICglcyBleGlzdHMpLlxuUGxlYXNlLCB1c2UgIgorCQkJCSAgICAiJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcgb3IgJ2dpdCBub3RlcyAiCisJCQkJICAgICJtZXJnZSAtLWFib3J0JyB0byBjb21taXQvYWJvcnQgdGhlICIKKwkJCQkgICAgInByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgIgorCQkJCSAgICAibm90ZXMgbWVyZ2UuIiksIGdpdF9wYXRoKCJOT1RFU19NRVJHRV8qIikpOworCQkJZWxzZQorCQkJCWRpZShfKCJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgIgorCQkJCSAgICAiKCVzIGV4aXN0cykuIiksIGdpdF9wYXRoKCJOT1RFU19NRVJHRV8qIikpOworCQl9CisKKwkJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoZ2l0X3BhdGgoCisJCQkJTk9URVNfTUVSR0VfV09SS1RSRUUgIi8udGVzdCIpKSkKKwkJCWRpZV9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiLAorCQkJCSAgZ2l0X3BhdGgoTk9URVNfTUVSR0VfV09SS1RSRUUpKTsKKwkJby0+aGFzX3dvcmt0cmVlID0gMTsKKwl9IGVsc2UgaWYgKCFmaWxlX2V4aXN0cyhnaXRfcGF0aChOT1RFU19NRVJHRV9XT1JLVFJFRSkpKQorCQkvKiBOT1RFU19NRVJHRV9XT1JLVFJFRSBzaG91bGQgYWxyZWFkeSBiZSBlc3RhYmxpc2hlZCAqLworCQlkaWUoIm1pc3NpbmcgJyVzJy4gVGhpcyBzaG91bGQgbm90IGhhcHBlbiIsCisJCSAgICBnaXRfcGF0aChOT1RFU19NRVJHRV9XT1JLVFJFRSkpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9idWZfdG9fd29ya3RyZWUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2JqLAorCQkJCSAgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IGZkOworCWNoYXIgKnBhdGggPSBnaXRfcGF0aGR1cChOT1RFU19NRVJHRV9XT1JLVFJFRSAiLyVzIiwgb2lkX3RvX2hleChvYmopKTsKKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChwYXRoKSkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIsIHBhdGgpOworCisJZmQgPSB4b3BlbihwYXRoLCBPX1dST05MWSB8IE9fRVhDTCB8IE9fQ1JFQVQsIDA2NjYpOworCisJd2hpbGUgKHNpemUgPiAwKSB7CisJCXNzaXplX3QgcmV0ID0gd3JpdGVfaW5fZnVsbChmZCwgYnVmLCBzaXplKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCS8qIElnbm9yZSBlcGlwZSAqLworCQkJaWYgKGVycm5vID09IEVQSVBFKQorCQkJCWJyZWFrOworCQkJZGllX2Vycm5vKCJub3Rlcy1tZXJnZSIpOworCQl9CisJCXNpemUgLT0gcmV0OworCQlidWYgKz0gcmV0OworCX0KKworCWNsb3NlKGZkKTsKKwlmcmVlKHBhdGgpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9ub3RlX3RvX3dvcmt0cmVlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9iaiwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpub3RlKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdm9pZCAqYnVmID0gcmVhZF9vYmplY3RfZmlsZShub3RlLCAmdHlwZSwgJnNpemUpOworCisJaWYgKCFidWYpCisJCWRpZSgiY2Fubm90IHJlYWQgbm90ZSAlcyBmb3Igb2JqZWN0ICVzIiwKKwkJICAgIG9pZF90b19oZXgobm90ZSksIG9pZF90b19oZXgob2JqKSk7CisJaWYgKHR5cGUgIT0gT0JKX0JMT0IpCisJCWRpZSgiYmxvYiBleHBlY3RlZCBpbiBub3RlICVzIGZvciBvYmplY3QgJXMiLAorCQkgICAgb2lkX3RvX2hleChub3RlKSwgb2lkX3RvX2hleChvYmopKTsKKwl3cml0ZV9idWZfdG9fd29ya3RyZWUob2JqLCBidWYsIHNpemUpOworCWZyZWUoYnVmKTsKK30KKworc3RhdGljIGludCBsbF9tZXJnZV9pbl93b3JrdHJlZShzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCQlzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpciAqcCkKK3sKKwltbWJ1ZmZlcl90IHJlc3VsdF9idWY7CisJbW1maWxlX3QgYmFzZSwgbG9jYWwsIHJlbW90ZTsKKwlpbnQgc3RhdHVzOworCisJcmVhZF9tbWJsb2IoJmJhc2UsICZwLT5iYXNlKTsKKwlyZWFkX21tYmxvYigmbG9jYWwsICZwLT5sb2NhbCk7CisJcmVhZF9tbWJsb2IoJnJlbW90ZSwgJnAtPnJlbW90ZSk7CisKKwlzdGF0dXMgPSBsbF9tZXJnZSgmcmVzdWx0X2J1Ziwgb2lkX3RvX2hleCgmcC0+b2JqKSwgJmJhc2UsIE5VTEwsCisJCQkgICZsb2NhbCwgby0+bG9jYWxfcmVmLCAmcmVtb3RlLCBvLT5yZW1vdGVfcmVmLAorCQkJICBvLT5yZXBvLT5pbmRleCwgTlVMTCk7CisKKwlmcmVlKGJhc2UucHRyKTsKKwlmcmVlKGxvY2FsLnB0cik7CisJZnJlZShyZW1vdGUucHRyKTsKKworCWlmICgoc3RhdHVzIDwgMCkgfHwgIXJlc3VsdF9idWYucHRyKQorCQlkaWUoIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIik7CisKKwl3cml0ZV9idWZfdG9fd29ya3RyZWUoJnAtPm9iaiwgcmVzdWx0X2J1Zi5wdHIsIHJlc3VsdF9idWYuc2l6ZSk7CisJZnJlZShyZXN1bHRfYnVmLnB0cik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IG1lcmdlX29uZV9jaGFuZ2VfbWFudWFsKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQkJCSAgIHN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpwLAorCQkJCSAgIHN0cnVjdCBub3Rlc190cmVlICp0KQoreworCWNvbnN0IGNoYXIgKmxyZWYgPSBvLT5sb2NhbF9yZWYgPyBvLT5sb2NhbF9yZWYgOiAibG9jYWwgdmVyc2lvbiI7CisJY29uc3QgY2hhciAqcnJlZiA9IG8tPnJlbW90ZV9yZWYgPyBvLT5yZW1vdGVfcmVmIDogInJlbW90ZSB2ZXJzaW9uIjsKKworCXRyYWNlX3ByaW50ZigiXHRcdFx0bWVyZ2Vfb25lX2NoYW5nZV9tYW51YWwob2JqID0gJS43cywgYmFzZSA9ICUuN3MsICIKKwkgICAgICAgImxvY2FsID0gJS43cywgcmVtb3RlID0gJS43cylcbiIsCisJICAgICAgIG9pZF90b19oZXgoJnAtPm9iaiksIG9pZF90b19oZXgoJnAtPmJhc2UpLAorCSAgICAgICBvaWRfdG9faGV4KCZwLT5sb2NhbCksIG9pZF90b19oZXgoJnAtPnJlbW90ZSkpOworCisJLyogYWRkICJDb25mbGljdHM6IiBzZWN0aW9uIHRvIGNvbW1pdCBtZXNzYWdlIGZpcnN0IHRpbWUgdGhyb3VnaCAqLworCWlmICghby0+aGFzX3dvcmt0cmVlKQorCQlzdHJidWZfYWRkc3RyKCYoby0+Y29tbWl0X21zZyksICJcblxuQ29uZmxpY3RzOlxuIik7CisKKwlzdHJidWZfYWRkZigmKG8tPmNvbW1pdF9tc2cpLCAiXHQlc1xuIiwgb2lkX3RvX2hleCgmcC0+b2JqKSk7CisKKwlpZiAoby0+dmVyYm9zaXR5ID49IDIpCisJCXByaW50ZigiQXV0by1tZXJnaW5nIG5vdGVzIGZvciAlc1xuIiwgb2lkX3RvX2hleCgmcC0+b2JqKSk7CisJY2hlY2tfbm90ZXNfbWVyZ2Vfd29ya3RyZWUobyk7CisJaWYgKGlzX251bGxfb2lkKCZwLT5sb2NhbCkpIHsKKwkJLyogRC9GIGNvbmZsaWN0LCBjaGVja291dCBwLT5yZW1vdGUgKi8KKwkJYXNzZXJ0KCFpc19udWxsX29pZCgmcC0+cmVtb3RlKSk7CisJCWlmIChvLT52ZXJib3NpdHkgPj0gMSkKKwkJCXByaW50ZigiQ09ORkxJQ1QgKGRlbGV0ZS9tb2RpZnkpOiBOb3RlcyBmb3Igb2JqZWN0ICVzICIKKwkJCQkiZGVsZXRlZCBpbiAlcyBhbmQgbW9kaWZpZWQgaW4gJXMuIFZlcnNpb24gZnJvbSAlcyAiCisJCQkJImxlZnQgaW4gdHJlZS5cbiIsCisJCQkJb2lkX3RvX2hleCgmcC0+b2JqKSwgbHJlZiwgcnJlZiwgcnJlZik7CisJCXdyaXRlX25vdGVfdG9fd29ya3RyZWUoJnAtPm9iaiwgJnAtPnJlbW90ZSk7CisJfSBlbHNlIGlmIChpc19udWxsX29pZCgmcC0+cmVtb3RlKSkgeworCQkvKiBEL0YgY29uZmxpY3QsIGNoZWNrb3V0IHAtPmxvY2FsICovCisJCWFzc2VydCghaXNfbnVsbF9vaWQoJnAtPmxvY2FsKSk7CisJCWlmIChvLT52ZXJib3NpdHkgPj0gMSkKKwkJCXByaW50ZigiQ09ORkxJQ1QgKGRlbGV0ZS9tb2RpZnkpOiBOb3RlcyBmb3Igb2JqZWN0ICVzICIKKwkJCQkiZGVsZXRlZCBpbiAlcyBhbmQgbW9kaWZpZWQgaW4gJXMuIFZlcnNpb24gZnJvbSAlcyAiCisJCQkJImxlZnQgaW4gdHJlZS5cbiIsCisJCQkJb2lkX3RvX2hleCgmcC0+b2JqKSwgcnJlZiwgbHJlZiwgbHJlZik7CisJCXdyaXRlX25vdGVfdG9fd29ya3RyZWUoJnAtPm9iaiwgJnAtPmxvY2FsKTsKKwl9IGVsc2UgeworCQkvKiAicmVndWxhciIgY29uZmxpY3QsIGNoZWNrb3V0IHJlc3VsdCBvZiBsbF9tZXJnZSgpICovCisJCWNvbnN0IGNoYXIgKnJlYXNvbiA9ICJjb250ZW50IjsKKwkJaWYgKGlzX251bGxfb2lkKCZwLT5iYXNlKSkKKwkJCXJlYXNvbiA9ICJhZGQvYWRkIjsKKwkJYXNzZXJ0KCFpc19udWxsX29pZCgmcC0+bG9jYWwpKTsKKwkJYXNzZXJ0KCFpc19udWxsX29pZCgmcC0+cmVtb3RlKSk7CisJCWlmIChvLT52ZXJib3NpdHkgPj0gMSkKKwkJCXByaW50ZigiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gbm90ZXMgZm9yICIKKwkJCQkib2JqZWN0ICVzXG4iLCByZWFzb24sCisJCQkJb2lkX3RvX2hleCgmcC0+b2JqKSk7CisJCWxsX21lcmdlX2luX3dvcmt0cmVlKG8sIHApOworCX0KKworCXRyYWNlX3ByaW50ZigiXHRcdFx0cmVtb3ZpbmcgZnJvbSBwYXJ0aWFsIG1lcmdlIHJlc3VsdFxuIik7CisJcmVtb3ZlX25vdGUodCwgcC0+b2JqLmhhc2gpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2Vfb25lX2NoYW5nZShzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCSAgICBzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpciAqcCwgc3RydWN0IG5vdGVzX3RyZWUgKnQpCit7CisJLyoKKwkgKiBSZXR1cm4gMCBpZiBjaGFuZ2UgaXMgc3VjY2Vzc2Z1bGx5IHJlc29sdmVkIChzdG9yZWQgaW4gbm90ZXNfdHJlZSkuCisJICogUmV0dXJuIDEgaXMgY2hhbmdlIHJlc3VsdHMgaW4gYSBjb25mbGljdCAoTk9UIHN0b3JlZCBpbiBub3Rlc190cmVlLAorCSAqIGJ1dCBpbnN0ZWFkIHdyaXR0ZW4gdG8gTk9URVNfTUVSR0VfV09SS1RSRUUgd2l0aCBjb25mbGljdCBtYXJrZXJzKS4KKwkgKi8KKwlzd2l0Y2ggKG8tPnN0cmF0ZWd5KSB7CisJY2FzZSBOT1RFU19NRVJHRV9SRVNPTFZFX01BTlVBTDoKKwkJcmV0dXJuIG1lcmdlX29uZV9jaGFuZ2VfbWFudWFsKG8sIHAsIHQpOworCWNhc2UgTk9URVNfTUVSR0VfUkVTT0xWRV9PVVJTOgorCQlpZiAoby0+dmVyYm9zaXR5ID49IDIpCisJCQlwcmludGYoIlVzaW5nIGxvY2FsIG5vdGVzIGZvciAlc1xuIiwKKwkJCQkJCW9pZF90b19oZXgoJnAtPm9iaikpOworCQkvKiBub3RoaW5nIHRvIGRvICovCisJCXJldHVybiAwOworCWNhc2UgTk9URVNfTUVSR0VfUkVTT0xWRV9USEVJUlM6CisJCWlmIChvLT52ZXJib3NpdHkgPj0gMikKKwkJCXByaW50ZigiVXNpbmcgcmVtb3RlIG5vdGVzIGZvciAlc1xuIiwKKwkJCQkJCW9pZF90b19oZXgoJnAtPm9iaikpOworCQlpZiAoYWRkX25vdGUodCwgJnAtPm9iaiwgJnAtPnJlbW90ZSwgY29tYmluZV9ub3Rlc19vdmVyd3JpdGUpKQorCQkJQlVHKCJjb21iaW5lX25vdGVzX292ZXJ3cml0ZSBmYWlsZWQiKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBOT1RFU19NRVJHRV9SRVNPTFZFX1VOSU9OOgorCQlpZiAoby0+dmVyYm9zaXR5ID49IDIpCisJCQlwcmludGYoIkNvbmNhdGVuYXRpbmcgbG9jYWwgYW5kIHJlbW90ZSBub3RlcyBmb3IgJXNcbiIsCisJCQkJCQkJb2lkX3RvX2hleCgmcC0+b2JqKSk7CisJCWlmIChhZGRfbm90ZSh0LCAmcC0+b2JqLCAmcC0+cmVtb3RlLCBjb21iaW5lX25vdGVzX2NvbmNhdGVuYXRlKSkKKwkJCWRpZSgiZmFpbGVkIHRvIGNvbmNhdGVuYXRlIG5vdGVzICIKKwkJCSAgICAiKGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGUpIik7CisJCXJldHVybiAwOworCWNhc2UgTk9URVNfTUVSR0VfUkVTT0xWRV9DQVRfU09SVF9VTklROgorCQlpZiAoby0+dmVyYm9zaXR5ID49IDIpCisJCQlwcmludGYoIkNvbmNhdGVuYXRpbmcgdW5pcXVlIGxpbmVzIGluIGxvY2FsIGFuZCByZW1vdGUgIgorCQkJCSJub3RlcyBmb3IgJXNcbiIsIG9pZF90b19oZXgoJnAtPm9iaikpOworCQlpZiAoYWRkX25vdGUodCwgJnAtPm9iaiwgJnAtPnJlbW90ZSwgY29tYmluZV9ub3Rlc19jYXRfc29ydF91bmlxKSkKKwkJCWRpZSgiZmFpbGVkIHRvIGNvbmNhdGVuYXRlIG5vdGVzICIKKwkJCSAgICAiKGNvbWJpbmVfbm90ZXNfY2F0X3NvcnRfdW5pcSkiKTsKKwkJcmV0dXJuIDA7CisJfQorCWRpZSgiVW5rbm93biBzdHJhdGVneSAoJWkpLiIsIG8tPnN0cmF0ZWd5KTsKK30KKworc3RhdGljIGludCBtZXJnZV9jaGFuZ2VzKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQkJIHN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpjaGFuZ2VzLCBpbnQgKm51bV9jaGFuZ2VzLAorCQkJIHN0cnVjdCBub3Rlc190cmVlICp0KQoreworCWludCBpLCBjb25mbGljdHMgPSAwOworCisJdHJhY2VfcHJpbnRmKCJcdG1lcmdlX2NoYW5nZXMobnVtX2NoYW5nZXMgPSAlaSlcbiIsICpudW1fY2hhbmdlcyk7CisJZm9yIChpID0gMDsgaSA8ICpudW1fY2hhbmdlczsgaSsrKSB7CisJCXN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpwID0gY2hhbmdlcyArIGk7CisJCXRyYWNlX3ByaW50ZigiXHRcdCUuN3M6ICUuN3MgLT4gJS43cy8lLjdzXG4iLAorCQkgICAgICAgb2lkX3RvX2hleCgmcC0+b2JqKSwgb2lkX3RvX2hleCgmcC0+YmFzZSksCisJCSAgICAgICBvaWRfdG9faGV4KCZwLT5sb2NhbCksCisJCSAgICAgICBvaWRfdG9faGV4KCZwLT5yZW1vdGUpKTsKKworCQlpZiAob2lkZXEoJnAtPmJhc2UsICZwLT5yZW1vdGUpKSB7CisJCQkvKiBubyByZW1vdGUgY2hhbmdlOyBub3RoaW5nIHRvIGRvICovCisJCQl0cmFjZV9wcmludGYoIlx0XHRcdHNraXBwaW5nIChubyByZW1vdGUgY2hhbmdlKVxuIik7CisJCX0gZWxzZSBpZiAob2lkZXEoJnAtPmxvY2FsLCAmcC0+cmVtb3RlKSkgeworCQkJLyogc2FtZSBjaGFuZ2UgaW4gbG9jYWwgYW5kIHJlbW90ZTsgbm90aGluZyB0byBkbyAqLworCQkJdHJhY2VfcHJpbnRmKCJcdFx0XHRza2lwcGluZyAobG9jYWwgPT0gcmVtb3RlKVxuIik7CisJCX0gZWxzZSBpZiAob2lkZXEoJnAtPmxvY2FsLCAmdW5pbml0aWFsaXplZCkgfHwKKwkJCSAgIG9pZGVxKCZwLT5sb2NhbCwgJnAtPmJhc2UpKSB7CisJCQkvKiBubyBsb2NhbCBjaGFuZ2U7IGFkb3B0IHJlbW90ZSBjaGFuZ2UgKi8KKwkJCXRyYWNlX3ByaW50ZigiXHRcdFx0bm8gbG9jYWwgY2hhbmdlLCBhZG9wdGVkIHJlbW90ZVxuIik7CisJCQlpZiAoYWRkX25vdGUodCwgJnAtPm9iaiwgJnAtPnJlbW90ZSwKKwkJCQkgICAgIGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlKSkKKwkJCQlCVUcoImNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlIGZhaWxlZCIpOworCQl9IGVsc2UgeworCQkJLyogbmVlZCBmaWxlLWxldmVsIG1lcmdlIGJldHdlZW4gbG9jYWwgYW5kIHJlbW90ZSAqLworCQkJdHJhY2VfcHJpbnRmKCJcdFx0XHRuZWVkIGNvbnRlbnQtbGV2ZWwgbWVyZ2VcbiIpOworCQkJY29uZmxpY3RzICs9IG1lcmdlX29uZV9jaGFuZ2UobywgcCwgdCk7CisJCX0KKwl9CisKKwlyZXR1cm4gY29uZmxpY3RzOworfQorCitzdGF0aWMgaW50IG1lcmdlX2Zyb21fZGlmZnMoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYmFzZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpsb2NhbCwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZW1vdGUsCisJCQkgICAgc3RydWN0IG5vdGVzX3RyZWUgKnQpCit7CisJc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKmNoYW5nZXM7CisJaW50IG51bV9jaGFuZ2VzLCBjb25mbGljdHM7CisKKwl0cmFjZV9wcmludGYoIlx0bWVyZ2VfZnJvbV9kaWZmcyhiYXNlID0gJS43cywgbG9jYWwgPSAlLjdzLCAiCisJICAgICAgICJyZW1vdGUgPSAlLjdzKVxuIiwgb2lkX3RvX2hleChiYXNlKSwgb2lkX3RvX2hleChsb2NhbCksCisJICAgICAgIG9pZF90b19oZXgocmVtb3RlKSk7CisKKwljaGFuZ2VzID0gZGlmZl90cmVlX3JlbW90ZShvLCBiYXNlLCByZW1vdGUsICZudW1fY2hhbmdlcyk7CisJZGlmZl90cmVlX2xvY2FsKG8sIGNoYW5nZXMsIG51bV9jaGFuZ2VzLCBiYXNlLCBsb2NhbCk7CisKKwljb25mbGljdHMgPSBtZXJnZV9jaGFuZ2VzKG8sIGNoYW5nZXMsICZudW1fY2hhbmdlcywgdCk7CisJZnJlZShjaGFuZ2VzKTsKKworCWlmIChvLT52ZXJib3NpdHkgPj0gNCkKKwkJcHJpbnRmKHQtPmRpcnR5ID8KKwkJICAgICAgICJNZXJnZSByZXN1bHQ6ICVpIHVubWVyZ2VkIG5vdGVzIGFuZCBhIGRpcnR5IG5vdGVzIHRyZWVcbiIgOgorCQkgICAgICAgIk1lcmdlIHJlc3VsdDogJWkgdW5tZXJnZWQgbm90ZXMgYW5kIGEgY2xlYW4gbm90ZXMgdHJlZVxuIiwKKwkJICAgICAgIGNvbmZsaWN0cyk7CisKKwlyZXR1cm4gY29uZmxpY3RzID8gLTEgOiAxOworfQorCitpbnQgbm90ZXNfbWVyZ2Uoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCXN0cnVjdCBub3Rlc190cmVlICpsb2NhbF90cmVlLAorCQlzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHRfb2lkKQoreworCXN0cnVjdCBvYmplY3RfaWQgbG9jYWxfb2lkLCByZW1vdGVfb2lkOworCXN0cnVjdCBjb21taXQgKmxvY2FsLCAqcmVtb3RlOworCXN0cnVjdCBjb21taXRfbGlzdCAqYmFzZXMgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmJhc2Vfb2lkLCAqYmFzZV90cmVlX29pZDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWFzc2VydChvLT5sb2NhbF9yZWYgJiYgby0+cmVtb3RlX3JlZik7CisJYXNzZXJ0KCFzdHJjbXAoby0+bG9jYWxfcmVmLCBsb2NhbF90cmVlLT5yZWYpKTsKKwlvaWRjbHIocmVzdWx0X29pZCk7CisKKwl0cmFjZV9wcmludGYoIm5vdGVzX21lcmdlKG8tPmxvY2FsX3JlZiA9ICVzLCBvLT5yZW1vdGVfcmVmID0gJXMpXG4iLAorCSAgICAgICBvLT5sb2NhbF9yZWYsIG8tPnJlbW90ZV9yZWYpOworCisJLyogRGVyZWZlcmVuY2Ugby0+bG9jYWxfcmVmIGludG8gbG9jYWxfc2hhMSAqLworCWlmIChyZWFkX3JlZl9mdWxsKG8tPmxvY2FsX3JlZiwgMCwgJmxvY2FsX29pZCwgTlVMTCkpCisJCWRpZSgiRmFpbGVkIHRvIHJlc29sdmUgbG9jYWwgbm90ZXMgcmVmICclcyciLCBvLT5sb2NhbF9yZWYpOworCWVsc2UgaWYgKCFjaGVja19yZWZuYW1lX2Zvcm1hdChvLT5sb2NhbF9yZWYsIDApICYmCisJCWlzX251bGxfb2lkKCZsb2NhbF9vaWQpKQorCQlsb2NhbCA9IE5VTEw7IC8qIGxvY2FsX29pZCA9PSBudWxsX29pZCBpbmRpY2F0ZXMgdW5ib3JuIHJlZiAqLworCWVsc2UgaWYgKCEobG9jYWwgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShvLT5yZXBvLCAmbG9jYWxfb2lkKSkpCisJCWRpZSgiQ291bGQgbm90IHBhcnNlIGxvY2FsIGNvbW1pdCAlcyAoJXMpIiwKKwkJICAgIG9pZF90b19oZXgoJmxvY2FsX29pZCksIG8tPmxvY2FsX3JlZik7CisJdHJhY2VfcHJpbnRmKCJcdGxvY2FsIGNvbW1pdDogJS43c1xuIiwgb2lkX3RvX2hleCgmbG9jYWxfb2lkKSk7CisKKwkvKiBEZXJlZmVyZW5jZSBvLT5yZW1vdGVfcmVmIGludG8gcmVtb3RlX29pZCAqLworCWlmIChnZXRfb2lkKG8tPnJlbW90ZV9yZWYsICZyZW1vdGVfb2lkKSkgeworCQkvKgorCQkgKiBGYWlsZWQgdG8gZ2V0IHJlbW90ZV9vaWQuIElmIG8tPnJlbW90ZV9yZWYgbG9va3MgbGlrZSBhbgorCQkgKiB1bmJvcm4gcmVmLCBwZXJmb3JtIHRoZSBtZXJnZSB1c2luZyBhbiBlbXB0eSBub3RlcyB0cmVlLgorCQkgKi8KKwkJaWYgKCFjaGVja19yZWZuYW1lX2Zvcm1hdChvLT5yZW1vdGVfcmVmLCAwKSkgeworCQkJb2lkY2xyKCZyZW1vdGVfb2lkKTsKKwkJCXJlbW90ZSA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQlkaWUoIkZhaWxlZCB0byByZXNvbHZlIHJlbW90ZSBub3RlcyByZWYgJyVzJyIsCisJCQkgICAgby0+cmVtb3RlX3JlZik7CisJCX0KKwl9IGVsc2UgaWYgKCEocmVtb3RlID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoby0+cmVwbywgJnJlbW90ZV9vaWQpKSkgeworCQlkaWUoIkNvdWxkIG5vdCBwYXJzZSByZW1vdGUgY29tbWl0ICVzICglcykiLAorCQkgICAgb2lkX3RvX2hleCgmcmVtb3RlX29pZCksIG8tPnJlbW90ZV9yZWYpOworCX0KKwl0cmFjZV9wcmludGYoIlx0cmVtb3RlIGNvbW1pdDogJS43c1xuIiwgb2lkX3RvX2hleCgmcmVtb3RlX29pZCkpOworCisJaWYgKCFsb2NhbCAmJiAhcmVtb3RlKQorCQlkaWUoIkNhbm5vdCBtZXJnZSBlbXB0eSBub3RlcyByZWYgKCVzKSBpbnRvIGVtcHR5IG5vdGVzIHJlZiAiCisJCSAgICAiKCVzKSIsIG8tPnJlbW90ZV9yZWYsIG8tPmxvY2FsX3JlZik7CisJaWYgKCFsb2NhbCkgeworCQkvKiByZXN1bHQgPT0gcmVtb3RlIGNvbW1pdCAqLworCQlvaWRjcHkocmVzdWx0X29pZCwgJnJlbW90ZV9vaWQpOworCQlnb3RvIGZvdW5kX3Jlc3VsdDsKKwl9CisJaWYgKCFyZW1vdGUpIHsKKwkJLyogcmVzdWx0ID09IGxvY2FsIGNvbW1pdCAqLworCQlvaWRjcHkocmVzdWx0X29pZCwgJmxvY2FsX29pZCk7CisJCWdvdG8gZm91bmRfcmVzdWx0OworCX0KKwlhc3NlcnQobG9jYWwgJiYgcmVtb3RlKTsKKworCS8qIEZpbmQgbWVyZ2UgYmFzZXMgKi8KKwliYXNlcyA9IGdldF9tZXJnZV9iYXNlcyhsb2NhbCwgcmVtb3RlKTsKKwlpZiAoIWJhc2VzKSB7CisJCWJhc2Vfb2lkID0gJm51bGxfb2lkOworCQliYXNlX3RyZWVfb2lkID0gdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZTsKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSA0KQorCQkJcHJpbnRmKCJObyBtZXJnZSBiYXNlIGZvdW5kOyBkb2luZyBoaXN0b3J5LWxlc3MgbWVyZ2VcbiIpOworCX0gZWxzZSBpZiAoIWJhc2VzLT5uZXh0KSB7CisJCWJhc2Vfb2lkID0gJmJhc2VzLT5pdGVtLT5vYmplY3Qub2lkOworCQliYXNlX3RyZWVfb2lkID0gZ2V0X2NvbW1pdF90cmVlX29pZChiYXNlcy0+aXRlbSk7CisJCWlmIChvLT52ZXJib3NpdHkgPj0gNCkKKwkJCXByaW50ZigiT25lIG1lcmdlIGJhc2UgZm91bmQgKCUuN3MpXG4iLAorCQkJICAgICAgIG9pZF90b19oZXgoYmFzZV9vaWQpKTsKKwl9IGVsc2UgeworCQkvKiBUT0RPOiBIb3cgdG8gaGFuZGxlIG11bHRpcGxlIG1lcmdlLWJhc2VzPyAqLworCQliYXNlX29pZCA9ICZiYXNlcy0+aXRlbS0+b2JqZWN0Lm9pZDsKKwkJYmFzZV90cmVlX29pZCA9IGdldF9jb21taXRfdHJlZV9vaWQoYmFzZXMtPml0ZW0pOworCQlpZiAoby0+dmVyYm9zaXR5ID49IDMpCisJCQlwcmludGYoIk11bHRpcGxlIG1lcmdlIGJhc2VzIGZvdW5kLiBVc2luZyB0aGUgZmlyc3QgIgorCQkJCSIoJS43cylcbiIsIG9pZF90b19oZXgoYmFzZV9vaWQpKTsKKwl9CisKKwlpZiAoby0+dmVyYm9zaXR5ID49IDQpCisJCXByaW50ZigiTWVyZ2luZyByZW1vdGUgY29tbWl0ICUuN3MgaW50byBsb2NhbCBjb21taXQgJS43cyB3aXRoICIKKwkJCSJtZXJnZS1iYXNlICUuN3NcbiIsIG9pZF90b19oZXgoJnJlbW90ZS0+b2JqZWN0Lm9pZCksCisJCQlvaWRfdG9faGV4KCZsb2NhbC0+b2JqZWN0Lm9pZCksCisJCQlvaWRfdG9faGV4KGJhc2Vfb2lkKSk7CisKKwlpZiAob2lkZXEoJnJlbW90ZS0+b2JqZWN0Lm9pZCwgYmFzZV9vaWQpKSB7CisJCS8qIEFscmVhZHkgbWVyZ2VkOyByZXN1bHQgPT0gbG9jYWwgY29tbWl0ICovCisJCWlmIChvLT52ZXJib3NpdHkgPj0gMikKKwkJCXByaW50ZigiQWxyZWFkeSB1cCB0byBkYXRlIVxuIik7CisJCW9pZGNweShyZXN1bHRfb2lkLCAmbG9jYWwtPm9iamVjdC5vaWQpOworCQlnb3RvIGZvdW5kX3Jlc3VsdDsKKwl9CisJaWYgKG9pZGVxKCZsb2NhbC0+b2JqZWN0Lm9pZCwgYmFzZV9vaWQpKSB7CisJCS8qIEZhc3QtZm9yd2FyZDsgcmVzdWx0ID09IHJlbW90ZSBjb21taXQgKi8KKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSAyKQorCQkJcHJpbnRmKCJGYXN0LWZvcndhcmRcbiIpOworCQlvaWRjcHkocmVzdWx0X29pZCwgJnJlbW90ZS0+b2JqZWN0Lm9pZCk7CisJCWdvdG8gZm91bmRfcmVzdWx0OworCX0KKworCXJlc3VsdCA9IG1lcmdlX2Zyb21fZGlmZnMobywgYmFzZV90cmVlX29pZCwKKwkJCQkgIGdldF9jb21taXRfdHJlZV9vaWQobG9jYWwpLAorCQkJCSAgZ2V0X2NvbW1pdF90cmVlX29pZChyZW1vdGUpLCBsb2NhbF90cmVlKTsKKworCWlmIChyZXN1bHQgIT0gMCkgeyAvKiBub24tdHJpdmlhbCBtZXJnZSAod2l0aCBvciB3aXRob3V0IGNvbmZsaWN0cykgKi8KKwkJLyogQ29tbWl0IChwYXJ0aWFsKSByZXN1bHQgKi8KKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gTlVMTDsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KHJlbW90ZSwgJnBhcmVudHMpOyAvKiBMSUZPIG9yZGVyICovCisJCWNvbW1pdF9saXN0X2luc2VydChsb2NhbCwgJnBhcmVudHMpOworCQljcmVhdGVfbm90ZXNfY29tbWl0KG8tPnJlcG8sIGxvY2FsX3RyZWUsIHBhcmVudHMsIG8tPmNvbW1pdF9tc2cuYnVmLAorCQkJCSAgICBvLT5jb21taXRfbXNnLmxlbiwgcmVzdWx0X29pZCk7CisJfQorCitmb3VuZF9yZXN1bHQ6CisJZnJlZV9jb21taXRfbGlzdChiYXNlcyk7CisJc3RyYnVmX3JlbGVhc2UoJihvLT5jb21taXRfbXNnKSk7CisJdHJhY2VfcHJpbnRmKCJub3Rlc19tZXJnZSgpOiByZXN1bHQgPSAlaSwgcmVzdWx0X29pZCA9ICUuN3NcbiIsCisJICAgICAgIHJlc3VsdCwgb2lkX3RvX2hleChyZXN1bHRfb2lkKSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IG5vdGVzX21lcmdlX2NvbW1pdChzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbywKKwkJICAgICAgIHN0cnVjdCBub3Rlc190cmVlICpwYXJ0aWFsX3RyZWUsCisJCSAgICAgICBzdHJ1Y3QgY29tbWl0ICpwYXJ0aWFsX2NvbW1pdCwKKwkJICAgICAgIHN0cnVjdCBvYmplY3RfaWQgKnJlc3VsdF9vaWQpCit7CisJLyoKKwkgKiBJdGVyYXRlIHRocm91Z2ggZmlsZXMgaW4gLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSBhbmQgYWRkIGFsbAorCSAqIGZvdW5kIG5vdGVzIHRvICdwYXJ0aWFsX3RyZWUnLiBXcml0ZSB0aGUgdXBkYXRlZCBub3RlcyB0cmVlIHRvCisJICogdGhlIERCLCBhbmQgY29tbWl0IHRoZSByZXN1bHRpbmcgdHJlZSBvYmplY3Qgd2hpbGUgcmV1c2luZyB0aGUKKwkgKiBjb21taXQgbWVzc2FnZSBhbmQgcGFyZW50cyBmcm9tICdwYXJ0aWFsX2NvbW1pdCcuCisJICogRmluYWxseSBzdG9yZSB0aGUgbmV3IGNvbW1pdCBvYmplY3QgT0lEIGludG8gJ3Jlc3VsdF9vaWQnLgorCSAqLworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmU7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqYnVmZmVyID0gZ2V0X2NvbW1pdF9idWZmZXIocGFydGlhbF9jb21taXQsIE5VTEwpOworCWNvbnN0IGNoYXIgKm1zZyA9IHN0cnN0cihidWZmZXIsICJcblxuIik7CisJaW50IGJhc2VsZW47CisKKwlnaXRfcGF0aF9idWYoJnBhdGgsIE5PVEVTX01FUkdFX1dPUktUUkVFKTsKKwlpZiAoby0+dmVyYm9zaXR5ID49IDMpCisJCXByaW50ZigiQ29tbWl0dGluZyBub3RlcyBpbiBub3RlcyBtZXJnZSB3b3JrdHJlZSBhdCAlc1xuIiwKKwkJCXBhdGguYnVmKTsKKworCWlmICghbXNnIHx8IG1zZ1syXSA9PSAnXDAnKQorCQlkaWUoInBhcnRpYWwgbm90ZXMgY29tbWl0IGhhcyBlbXB0eSBtZXNzYWdlIik7CisJbXNnICs9IDI7CisKKwlkaXIgPSBvcGVuZGlyKHBhdGguYnVmKTsKKwlpZiAoIWRpcikKKwkJZGllX2Vycm5vKCJjb3VsZCBub3Qgb3BlbiAlcyIsIHBhdGguYnVmKTsKKworCXN0cmJ1Zl9hZGRjaCgmcGF0aCwgJy8nKTsKKwliYXNlbGVuID0gcGF0aC5sZW47CisJd2hpbGUgKChlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9ial9vaWQsIGJsb2Jfb2lkOworCisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGUtPmRfbmFtZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoZ2V0X29pZF9oZXgoZS0+ZF9uYW1lLCAmb2JqX29pZCkpIHsKKwkJCWlmIChvLT52ZXJib3NpdHkgPj0gMykKKwkJCQlwcmludGYoIlNraXBwaW5nIG5vbi1TSEExIGVudHJ5ICclcyVzJ1xuIiwKKwkJCQkJcGF0aC5idWYsIGUtPmRfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIGUtPmRfbmFtZSk7CisJCS8qIHdyaXRlIGZpbGUgYXMgYmxvYiwgYW5kIGFkZCB0byBwYXJ0aWFsX3RyZWUgKi8KKwkJaWYgKHN0YXQocGF0aC5idWYsICZzdCkpCisJCQlkaWVfZXJybm8oIkZhaWxlZCB0byBzdGF0ICclcyciLCBwYXRoLmJ1Zik7CisJCWlmIChpbmRleF9wYXRoKG8tPnJlcG8tPmluZGV4LCAmYmxvYl9vaWQsIHBhdGguYnVmLCAmc3QsIEhBU0hfV1JJVEVfT0JKRUNUKSkKKwkJCWRpZSgiRmFpbGVkIHRvIHdyaXRlIGJsb2Igb2JqZWN0IGZyb20gJyVzJyIsIHBhdGguYnVmKTsKKwkJaWYgKGFkZF9ub3RlKHBhcnRpYWxfdHJlZSwgJm9ial9vaWQsICZibG9iX29pZCwgTlVMTCkpCisJCQlkaWUoIkZhaWxlZCB0byBhZGQgcmVzb2x2ZWQgbm90ZSAnJXMnIHRvIG5vdGVzIHRyZWUiLAorCQkJICAgIHBhdGguYnVmKTsKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSA0KQorCQkJcHJpbnRmKCJBZGRlZCByZXNvbHZlZCBub3RlIGZvciBvYmplY3QgJXM6ICVzXG4iLAorCQkJCW9pZF90b19oZXgoJm9ial9vaWQpLCBvaWRfdG9faGV4KCZibG9iX29pZCkpOworCQlzdHJidWZfc2V0bGVuKCZwYXRoLCBiYXNlbGVuKTsKKwl9CisKKwljcmVhdGVfbm90ZXNfY29tbWl0KG8tPnJlcG8sIHBhcnRpYWxfdHJlZSwgcGFydGlhbF9jb21taXQtPnBhcmVudHMsIG1zZywKKwkJCSAgICBzdHJsZW4obXNnKSwgcmVzdWx0X29pZCk7CisJdW51c2VfY29tbWl0X2J1ZmZlcihwYXJ0aWFsX2NvbW1pdCwgYnVmZmVyKTsKKwlpZiAoby0+dmVyYm9zaXR5ID49IDQpCisJCXByaW50ZigiRmluYWxpemVkIG5vdGVzIG1lcmdlIGNvbW1pdDogJXNcbiIsCisJCQlvaWRfdG9faGV4KHJlc3VsdF9vaWQpKTsKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJY2xvc2VkaXIoZGlyKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG5vdGVzX21lcmdlX2Fib3J0KHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvKQoreworCS8qCisJICogUmVtb3ZlIGFsbCBmaWxlcyB3aXRoaW4gLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS4gV2UgZG8gbm90IHJlbW92ZQorCSAqIHRoZSAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIGRpcmVjdG9yeSBpdHNlbGYsIHNpbmNlIGl0IG1pZ2h0IGJlCisJICogdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb2YgdGhlIHVzZXIuCisJICovCisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJZ2l0X3BhdGhfYnVmKCZidWYsIE5PVEVTX01FUkdFX1dPUktUUkVFKTsKKwlpZiAoby0+dmVyYm9zaXR5ID49IDMpCisJCXByaW50ZigiUmVtb3Zpbmcgbm90ZXMgbWVyZ2Ugd29ya3RyZWUgYXQgJXMvKlxuIiwgYnVmLmJ1Zik7CisJcmV0ID0gcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmYnVmLCBSRU1PVkVfRElSX0tFRVBfVE9QTEVWRUwpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9ub3Rlcy1tZXJnZS5oIGIvbm90ZXMtbWVyZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWY5YzcwCi0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMtbWVyZ2UuaApAQCAtMCwwICsxLDg3IEBACisjaWZuZGVmIE5PVEVTX01FUkdFX0gKKyNkZWZpbmUgTk9URVNfTUVSR0VfSAorCisjaW5jbHVkZSAibm90ZXMtdXRpbHMuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RydWN0IGNvbW1pdDsKK3N0cnVjdCBvYmplY3RfaWQ7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKKworI2RlZmluZSBOT1RFU19NRVJHRV9XT1JLVFJFRSAiTk9URVNfTUVSR0VfV09SS1RSRUUiCisKK2VudW0gbm90ZXNfbWVyZ2VfdmVyYm9zaXR5IHsKKwlOT1RFU19NRVJHRV9WRVJCT1NJVFlfREVGQVVMVCA9IDIsCisJTk9URVNfTUVSR0VfVkVSQk9TSVRZX01BWCA9IDUKK307CisKK3N0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zIHsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKwljb25zdCBjaGFyICpsb2NhbF9yZWY7CisJY29uc3QgY2hhciAqcmVtb3RlX3JlZjsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdF9tc2c7CisJaW50IHZlcmJvc2l0eTsKKwllbnVtIG5vdGVzX21lcmdlX3N0cmF0ZWd5IHN0cmF0ZWd5OworCXVuc2lnbmVkIGhhc193b3JrdHJlZToxOworfTsKKwordm9pZCBpbml0X25vdGVzX21lcmdlX29wdGlvbnMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICBzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbyk7CisKKy8qCisgKiBNZXJnZSBub3RlcyBmcm9tIG8tPnJlbW90ZV9yZWYgaW50byBvLT5sb2NhbF9yZWYKKyAqCisgKiBUaGUgZ2l2ZW4gbm90ZXNfdHJlZSAnbG9jYWxfdHJlZScgbXVzdCBiZSB0aGUgbm90ZXNfdHJlZSByZWZlcmVuY2VkIGJ5IHRoZQorICogby0+bG9jYWxfcmVmLiBUaGlzIGlzIHRoZSBub3Rlc190cmVlIGluIHdoaWNoIHRoZSBvYmplY3QtbGV2ZWwgbWVyZ2UgaXMKKyAqIHBlcmZvcm1lZC4KKyAqCisgKiBUaGUgY29tbWl0cyBnaXZlbiBieSB0aGUgdHdvIHJlZnMgYXJlIG1lcmdlZCwgcHJvZHVjaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBvdXRjb21lczoKKyAqCisgKiAxLiBUaGUgbWVyZ2UgdHJpdmlhbGx5IHJlc3VsdHMgaW4gYW4gZXhpc3RpbmcgY29tbWl0IChlLmcuIGZhc3QtZm9yd2FyZCBvcgorICogICAgYWxyZWFkeS11cC10by1kYXRlKS4gJ2xvY2FsX3RyZWUnIGlzIHVudG91Y2hlZCwgdGhlIE9JRCBvZiB0aGUgcmVzdWx0CisgKiAgICBpcyB3cml0dGVuIGludG8gJ3Jlc3VsdF9vaWQnIGFuZCAwIGlzIHJldHVybmVkLgorICogMi4gVGhlIG1lcmdlIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMsIHByb2R1Y2luZyBhIG1lcmdlIGNvbW1pdC4gbG9jYWxfdHJlZQorICogICAgY29udGFpbnMgdGhlIHVwZGF0ZWQgbm90ZXMgdHJlZSwgdGhlIE9JRCBvZiB0aGUgcmVzdWx0aW5nIGNvbW1pdCBpcworICogICAgd3JpdHRlbiBpbnRvICdyZXN1bHRfb2lkJywgYW5kIDEgaXMgcmV0dXJuZWQuCisgKiAzLiBUaGUgbWVyZ2UgcmVzdWx0cyBpbiBjb25mbGljdHMuIFRoaXMgaXMgc2ltaWxhciB0byAjMiBpbiB0aGF0IHRoZQorICogICAgcGFydGlhbCBtZXJnZSByZXN1bHQgKGkuZS4gbWVyZ2UgcmVzdWx0IG1pbnVzIHRoZSB1bm1lcmdlZCBlbnRyaWVzKQorICogICAgYXJlIHN0b3JlZCBpbiAnbG9jYWxfdHJlZScsIGFuZCB0aGUgT0lEIG9yIHRoZSByZXN1bHRpbmcgY29tbWl0CisgKiAgICAodG8gYmUgYW1lbmRlZCB3aGVuIHRoZSBjb25mbGljdHMgaGF2ZSBiZWVuIHJlc29sdmVkKSBpcyB3cml0dGVuIGludG8KKyAqICAgICdyZXN1bHRfb2lkJy4gVGhlIHVubWVyZ2VkIGVudHJpZXMgYXJlIHdyaXR0ZW4gaW50byB0aGUKKyAqICAgIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUgZGlyZWN0b3J5IHdpdGggY29uZmxpY3QgbWFya2Vycy4KKyAqICAgIC0xIGlzIHJldHVybmVkLgorICoKKyAqIEJvdGggby0+bG9jYWxfcmVmIGFuZCBvLT5yZW1vdGVfcmVmIG11c3QgYmUgZ2l2ZW4gKG5vbi1OVUxMKSwgYnV0IGVpdGhlciByZWYKKyAqIChhbHRob3VnaCBub3QgYm90aCkgbWF5IHJlZmVyIHRvIGEgbm9uLWV4aXN0aW5nIG5vdGVzIHJlZiwgaW4gd2hpY2ggY2FzZQorICogdGhhdCBub3RlcyByZWYgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gZW1wdHkgbm90ZXMgdHJlZSwgYW5kIHRoZSBtZXJnZQorICogdHJpdmlhbGx5IHJlc3VsdHMgaW4gd2hhdCB0aGUgb3RoZXIgcmVmIHBvaW50cyB0by4KKyAqLworaW50IG5vdGVzX21lcmdlKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQlzdHJ1Y3Qgbm90ZXNfdHJlZSAqbG9jYWxfdHJlZSwKKwkJc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0X29pZCk7CisKKy8qCisgKiBGaW5hbGl6ZSBjb25mbGljdCByZXNvbHV0aW9uIGZyb20gYW4gZWFybGllciBub3Rlc19tZXJnZSgpCisgKgorICogVGhlIGdpdmVuIG5vdGVzIHRyZWUgJ3BhcnRpYWxfdHJlZScgbXVzdCBiZSB0aGUgbm90ZXNfdHJlZSBjb3JyZXNwb25kaW5nIHRvCisgKiB0aGUgZ2l2ZW4gJ3BhcnRpYWxfY29tbWl0JywgdGhlIHBhcnRpYWwgcmVzdWx0IGNvbW1pdCBjcmVhdGVkIGJ5IGEgcHJldmlvdXMKKyAqIGNhbGwgdG8gbm90ZXNfbWVyZ2UoKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWRkIHRoZSAobm93IHJlc29sdmVkKSBub3RlcyBpbiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFCisgKiB0byAncGFydGlhbF90cmVlJywgYW5kIGNyZWF0ZSBhIGZpbmFsIG5vdGVzIG1lcmdlIGNvbW1pdCwgdGhlIE9JRCBvZiB3aGljaAorICogd2lsbCBiZSBzdG9yZWQgaW4gJ3Jlc3VsdF9vaWQnLgorICovCitpbnQgbm90ZXNfbWVyZ2VfY29tbWl0KHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQkgICAgICAgc3RydWN0IG5vdGVzX3RyZWUgKnBhcnRpYWxfdHJlZSwKKwkJICAgICAgIHN0cnVjdCBjb21taXQgKnBhcnRpYWxfY29tbWl0LAorCQkgICAgICAgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0X29pZCk7CisKKy8qCisgKiBBYm9ydCBjb25mbGljdCByZXNvbHV0aW9uIGZyb20gYW4gZWFybGllciBub3Rlc19tZXJnZSgpCisgKgorICogUmVtb3ZlcyB0aGUgbm90ZXMgbWVyZ2Ugd29ya3RyZWUgaW4gLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS4KKyAqLworaW50IG5vdGVzX21lcmdlX2Fib3J0KHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9ub3Rlcy11dGlscy5jIGIvbm90ZXMtdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmY0ODg4Ci0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMtdXRpbHMuYwpAQCAtMCwwICsxLDE4NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgIm5vdGVzLXV0aWxzLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorCit2b2lkIGNyZWF0ZV9ub3Rlc19jb21taXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgc3RydWN0IG5vdGVzX3RyZWUgKnQsCisJCQkgc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzLAorCQkJIGNvbnN0IGNoYXIgKm1zZywgc2l6ZV90IG1zZ19sZW4sCisJCQkgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0X29pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHRyZWVfb2lkOworCisJYXNzZXJ0KHQtPmluaXRpYWxpemVkKTsKKworCWlmICh3cml0ZV9ub3Rlc190cmVlKHQsICZ0cmVlX29pZCkpCisJCWRpZSgiRmFpbGVkIHRvIHdyaXRlIG5vdGVzIHRyZWUgdG8gZGF0YWJhc2UiKTsKKworCWlmICghcGFyZW50cykgeworCQkvKiBEZWR1Y2UgcGFyZW50IGNvbW1pdCBmcm9tIHQtPnJlZiAqLworCQlzdHJ1Y3Qgb2JqZWN0X2lkIHBhcmVudF9vaWQ7CisJCWlmICghcmVhZF9yZWYodC0+cmVmLCAmcGFyZW50X29pZCkpIHsKKwkJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IGxvb2t1cF9jb21taXQociwgJnBhcmVudF9vaWQpOworCQkJaWYgKHBhcnNlX2NvbW1pdChwYXJlbnQpKQorCQkJCWRpZSgiRmFpbGVkIHRvIGZpbmQvcGFyc2UgY29tbWl0ICVzIiwgdC0+cmVmKTsKKwkJCWNvbW1pdF9saXN0X2luc2VydChwYXJlbnQsICZwYXJlbnRzKTsKKwkJfQorCQkvKiBlbHNlOiB0LT5yZWYgcG9pbnRzIHRvIG5vdGhpbmcsIGFzc3VtZSByb290L29ycGhhbiBjb21taXQgKi8KKwl9CisKKwlpZiAoY29tbWl0X3RyZWUobXNnLCBtc2dfbGVuLCAmdHJlZV9vaWQsIHBhcmVudHMsIHJlc3VsdF9vaWQsIE5VTEwsCisJCQlOVUxMKSkKKwkJZGllKCJGYWlsZWQgdG8gY29tbWl0IG5vdGVzIHRyZWUgdG8gZGF0YWJhc2UiKTsKK30KKwordm9pZCBjb21taXRfbm90ZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCBjaGFyICptc2cpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGNvbW1pdF9vaWQ7CisKKwlpZiAoIXQpCisJCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOworCWlmICghdC0+aW5pdGlhbGl6ZWQgfHwgIXQtPnVwZGF0ZV9yZWYgfHwgISp0LT51cGRhdGVfcmVmKQorCQlkaWUoXygiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIikpOworCWlmICghdC0+ZGlydHkpCisJCXJldHVybjsgLyogZG9uJ3QgaGF2ZSB0byBjb21taXQgYW4gdW5jaGFuZ2VkIHRyZWUgKi8KKworCS8qIFByZXBhcmUgY29tbWl0IG1lc3NhZ2UgYW5kIHJlZmxvZyBtZXNzYWdlICovCisJc3RyYnVmX2FkZHN0cigmYnVmLCBtc2cpOworCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKCZidWYpOworCisJY3JlYXRlX25vdGVzX2NvbW1pdChyLCB0LCBOVUxMLCBidWYuYnVmLCBidWYubGVuLCAmY29tbWl0X29pZCk7CisJc3RyYnVmX2luc2VydHN0cigmYnVmLCAwLCAibm90ZXM6ICIpOworCXVwZGF0ZV9yZWYoYnVmLmJ1ZiwgdC0+dXBkYXRlX3JlZiwgJmNvbW1pdF9vaWQsIE5VTEwsIDAsCisJCSAgIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK2ludCBwYXJzZV9ub3Rlc19tZXJnZV9zdHJhdGVneShjb25zdCBjaGFyICp2LCBlbnVtIG5vdGVzX21lcmdlX3N0cmF0ZWd5ICpzKQoreworCWlmICghc3RyY21wKHYsICJtYW51YWwiKSkKKwkJKnMgPSBOT1RFU19NRVJHRV9SRVNPTFZFX01BTlVBTDsKKwllbHNlIGlmICghc3RyY21wKHYsICJvdXJzIikpCisJCSpzID0gTk9URVNfTUVSR0VfUkVTT0xWRV9PVVJTOworCWVsc2UgaWYgKCFzdHJjbXAodiwgInRoZWlycyIpKQorCQkqcyA9IE5PVEVTX01FUkdFX1JFU09MVkVfVEhFSVJTOworCWVsc2UgaWYgKCFzdHJjbXAodiwgInVuaW9uIikpCisJCSpzID0gTk9URVNfTUVSR0VfUkVTT0xWRV9VTklPTjsKKwllbHNlIGlmICghc3RyY21wKHYsICJjYXRfc29ydF91bmlxIikpCisJCSpzID0gTk9URVNfTUVSR0VfUkVTT0xWRV9DQVRfU09SVF9VTklROworCWVsc2UKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb21iaW5lX25vdGVzX2ZuIHBhcnNlX2NvbWJpbmVfbm90ZXNfZm4oY29uc3QgY2hhciAqdikKK3sKKwlpZiAoIXN0cmNhc2VjbXAodiwgIm92ZXJ3cml0ZSIpKQorCQlyZXR1cm4gY29tYmluZV9ub3Rlc19vdmVyd3JpdGU7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAodiwgImlnbm9yZSIpKQorCQlyZXR1cm4gY29tYmluZV9ub3Rlc19pZ25vcmU7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAodiwgImNvbmNhdGVuYXRlIikpCisJCXJldHVybiBjb21iaW5lX25vdGVzX2NvbmNhdGVuYXRlOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKHYsICJjYXRfc29ydF91bmlxIikpCisJCXJldHVybiBjb21iaW5lX25vdGVzX2NhdF9zb3J0X3VuaXE7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBub3Rlc19yZXdyaXRlX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMgPSBjYjsKKwlpZiAoc3RhcnRzX3dpdGgoaywgIm5vdGVzLnJld3JpdGUuIikgJiYgIXN0cmNtcChrKzE0LCBjLT5jbWQpKSB7CisJCWMtPmVuYWJsZWQgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIWMtPm1vZGVfZnJvbV9lbnYgJiYgIXN0cmNtcChrLCAibm90ZXMucmV3cml0ZW1vZGUiKSkgeworCQlpZiAoIXYpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2woayk7CisJCWMtPmNvbWJpbmUgPSBwYXJzZV9jb21iaW5lX25vdGVzX2ZuKHYpOworCQlpZiAoIWMtPmNvbWJpbmUpIHsKKwkJCWVycm9yKF8oIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIpLCB2KTsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIWMtPnJlZnNfZnJvbV9lbnYgJiYgIXN0cmNtcChrLCAibm90ZXMucmV3cml0ZXJlZiIpKSB7CisJCS8qIG5vdGUgdGhhdCBhIHJlZnMvIHByZWZpeCBpcyBpbXBsaWVkIGluIHRoZQorCQkgKiB1bmRlcmx5aW5nIGZvcl9lYWNoX2dsb2JfcmVmICovCisJCWlmIChzdGFydHNfd2l0aCh2LCAicmVmcy9ub3Rlcy8iKSkKKwkJCXN0cmluZ19saXN0X2FkZF9yZWZzX2J5X2dsb2IoYy0+cmVmcywgdik7CisJCWVsc2UKKwkJCXdhcm5pbmcoXygiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyIKKwkJCQkiIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIpLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICppbml0X2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoY29uc3QgY2hhciAqY21kKQoreworCXN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqYyA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZykpOworCWNvbnN0IGNoYXIgKnJld3JpdGVfbW9kZV9lbnYgPSBnZXRlbnYoR0lUX05PVEVTX1JFV1JJVEVfTU9ERV9FTlZJUk9OTUVOVCk7CisJY29uc3QgY2hhciAqcmV3cml0ZV9yZWZzX2VudiA9IGdldGVudihHSVRfTk9URVNfUkVXUklURV9SRUZfRU5WSVJPTk1FTlQpOworCWMtPmNtZCA9IGNtZDsKKwljLT5lbmFibGVkID0gMTsKKwljLT5jb21iaW5lID0gY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZTsKKwljLT5yZWZzID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0KSk7CisJYy0+cmVmcy0+c3RyZHVwX3N0cmluZ3MgPSAxOworCWMtPnJlZnNfZnJvbV9lbnYgPSAwOworCWMtPm1vZGVfZnJvbV9lbnYgPSAwOworCWlmIChyZXdyaXRlX21vZGVfZW52KSB7CisJCWMtPm1vZGVfZnJvbV9lbnYgPSAxOworCQljLT5jb21iaW5lID0gcGFyc2VfY29tYmluZV9ub3Rlc19mbihyZXdyaXRlX21vZGVfZW52KTsKKwkJaWYgKCFjLT5jb21iaW5lKQorCQkJLyoKKwkJCSAqIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YKKwkJCSAqIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcworCQkJICogaXRzIHZhbHVlLgorCQkJICovCisJCQllcnJvcihfKCJCYWQgJXMgdmFsdWU6ICclcyciKSwgR0lUX05PVEVTX1JFV1JJVEVfTU9ERV9FTlZJUk9OTUVOVCwKKwkJCQkJcmV3cml0ZV9tb2RlX2Vudik7CisJfQorCWlmIChyZXdyaXRlX3JlZnNfZW52KSB7CisJCWMtPnJlZnNfZnJvbV9lbnYgPSAxOworCQlzdHJpbmdfbGlzdF9hZGRfcmVmc19mcm9tX2NvbG9uX3NlcChjLT5yZWZzLCByZXdyaXRlX3JlZnNfZW52KTsKKwl9CisJZ2l0X2NvbmZpZyhub3Rlc19yZXdyaXRlX2NvbmZpZywgYyk7CisJaWYgKCFjLT5lbmFibGVkIHx8ICFjLT5yZWZzLT5ucikgeworCQlzdHJpbmdfbGlzdF9jbGVhcihjLT5yZWZzLCAwKTsKKwkJZnJlZShjLT5yZWZzKTsKKwkJZnJlZShjKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWMtPnRyZWVzID0gbG9hZF9ub3Rlc190cmVlcyhjLT5yZWZzLCBOT1RFU19JTklUX1dSSVRBQkxFKTsKKwlzdHJpbmdfbGlzdF9jbGVhcihjLT5yZWZzLCAwKTsKKwlmcmVlKGMtPnJlZnMpOworCXJldHVybiBjOworfQorCitpbnQgY29weV9ub3RlX2Zvcl9yZXdyaXRlKHN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqYywKKwkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZnJvbV9vYmosIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnRvX29iaikKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBjLT50cmVlc1tpXTsgaSsrKQorCQlyZXQgPSBjb3B5X25vdGUoYy0+dHJlZXNbaV0sIGZyb21fb2JqLCB0b19vYmosIDEsIGMtPmNvbWJpbmUpIHx8IHJldDsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGZpbmlzaF9jb3B5X25vdGVzX2Zvcl9yZXdyaXRlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgIHN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqYywKKwkJCQkgICBjb25zdCBjaGFyICptc2cpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgYy0+dHJlZXNbaV07IGkrKykgeworCQljb21taXRfbm90ZXMociwgYy0+dHJlZXNbaV0sIG1zZyk7CisJCWZyZWVfbm90ZXMoYy0+dHJlZXNbaV0pOworCX0KKwlmcmVlKGMtPnRyZWVzKTsKKwlmcmVlKGMpOworfQpkaWZmIC0tZ2l0IGEvbm90ZXMtdXRpbHMuaCBiL25vdGVzLXV0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliM2MwOQotLS0gL2Rldi9udWxsCisrKyBiL25vdGVzLXV0aWxzLmgKQEAgLTAsMCArMSw1NSBAQAorI2lmbmRlZiBOT1RFU19VVElMU19ICisjZGVmaW5lIE5PVEVTX1VUSUxTX0gKKworI2luY2x1ZGUgIm5vdGVzLmgiCisKK3N0cnVjdCBjb21taXRfbGlzdDsKK3N0cnVjdCBvYmplY3RfaWQ7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKKworLyoKKyAqIENyZWF0ZSBuZXcgbm90ZXMgY29tbWl0IGZyb20gdGhlIGdpdmVuIG5vdGVzIHRyZWUKKyAqCisgKiBQcm9wZXJ0aWVzIG9mIHRoZSBjcmVhdGVkIGNvbW1pdDoKKyAqIC0gdHJlZTogdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHQgdG8gYSB0cmVlIG9iamVjdCB3aXRoIHdyaXRlX25vdGVzX3RyZWUoKS4KKyAqIC0gcGFyZW50czogdGhlIGdpdmVuIHBhcmVudHMgT1IgKGlmIE5VTEwpIHRoZSBjb21taXQgcmVmZXJlbmNlZCBieSB0LT5yZWYuCisgKiAtIGF1dGhvci9jb21taXR0ZXI6IHRoZSBkZWZhdWx0IGRldGVybWluZWQgYnkgY29tbWl0X3RyZWUoKS4KKyAqIC0gY29tbWl0IG1lc3NhZ2U6IG1zZworICoKKyAqIFRoZSByZXN1bHRpbmcgY29tbWl0IFNIQTEgaXMgc3RvcmVkIGluIHJlc3VsdF9zaGExLgorICovCit2b2lkIGNyZWF0ZV9ub3Rlc19jb21taXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgc3RydWN0IG5vdGVzX3RyZWUgKnQsCisJCQkgc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzLAorCQkJIGNvbnN0IGNoYXIgKm1zZywgc2l6ZV90IG1zZ19sZW4sCisJCQkgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0X29pZCk7CisKK3ZvaWQgY29tbWl0X25vdGVzKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3QgY2hhciAqbXNnKTsKKworZW51bSBub3Rlc19tZXJnZV9zdHJhdGVneSB7CisJCU5PVEVTX01FUkdFX1JFU09MVkVfTUFOVUFMID0gMCwKKwkJTk9URVNfTUVSR0VfUkVTT0xWRV9PVVJTLAorCQlOT1RFU19NRVJHRV9SRVNPTFZFX1RIRUlSUywKKwkJTk9URVNfTUVSR0VfUkVTT0xWRV9VTklPTiwKKwkJTk9URVNfTUVSR0VfUkVTT0xWRV9DQVRfU09SVF9VTklRCit9OworCitzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgeworCXN0cnVjdCBub3Rlc190cmVlICoqdHJlZXM7CisJY29uc3QgY2hhciAqY21kOworCWludCBlbmFibGVkOworCWNvbWJpbmVfbm90ZXNfZm4gY29tYmluZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZnM7CisJaW50IHJlZnNfZnJvbV9lbnY7CisJaW50IG1vZGVfZnJvbV9lbnY7Cit9OworCitpbnQgcGFyc2Vfbm90ZXNfbWVyZ2Vfc3RyYXRlZ3koY29uc3QgY2hhciAqdiwgZW51bSBub3Rlc19tZXJnZV9zdHJhdGVneSAqcyk7CitzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmluaXRfY29weV9ub3Rlc19mb3JfcmV3cml0ZShjb25zdCBjaGFyICpjbWQpOworaW50IGNvcHlfbm90ZV9mb3JfcmV3cml0ZShzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMsCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmZyb21fb2JqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0b19vYmopOwordm9pZCBmaW5pc2hfY29weV9ub3Rlc19mb3JfcmV3cml0ZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICBzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMsCisJCQkJICAgY29uc3QgY2hhciAqbXNnKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9ub3Rlcy5jIGIvbm90ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjRiYWFjCi0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMuYwpAQCAtMCwwICsxLDEzNTAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIm5vdGVzLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisKKy8qCisgKiBVc2UgYSBub24tYmFsYW5jaW5nIHNpbXBsZSAxNi10cmVlIHN0cnVjdHVyZSB3aXRoIHN0cnVjdCBpbnRfbm9kZSBhcworICogaW50ZXJuYWwgbm9kZXMsIGFuZCBzdHJ1Y3QgbGVhZl9ub2RlIGFzIGxlYWYgbm9kZXMuIEVhY2ggaW50X25vZGUgaGFzIGEKKyAqIDE2LWFycmF5IG9mIHBvaW50ZXJzIHRvIGl0cyBjaGlsZHJlbi4KKyAqIFRoZSBib3R0b20gMiBiaXRzIG9mIGVhY2ggcG9pbnRlciBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBwb2ludGVyIHR5cGUKKyAqIC0gcHRyICYgMyA9PSAwIC0gTlVMTCBwb2ludGVyLCBhc3NlcnQocHRyID09IE5VTEwpCisgKiAtIHB0ciAmIDMgPT0gMSAtIHBvaW50ZXIgdG8gbmV4dCBpbnRlcm5hbCBub2RlIC0gY2FzdCB0byBzdHJ1Y3QgaW50X25vZGUgKgorICogLSBwdHIgJiAzID09IDIgLSBwb2ludGVyIHRvIG5vdGUgZW50cnkgLSBjYXN0IHRvIHN0cnVjdCBsZWFmX25vZGUgKgorICogLSBwdHIgJiAzID09IDMgLSBwb2ludGVyIHRvIHN1YnRyZWUgZW50cnkgLSBjYXN0IHRvIHN0cnVjdCBsZWFmX25vZGUgKgorICoKKyAqIFRoZSByb290IG5vZGUgaXMgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBzdHJ1Y3QgaW50X25vZGUuCisgKi8KK3N0cnVjdCBpbnRfbm9kZSB7CisJdm9pZCAqYVsxNl07Cit9OworCisvKgorICogTGVhZiBub2RlcyBjb21lIGluIHR3byB2YXJpYW50cywgbm90ZSBlbnRyaWVzIGFuZCBzdWJ0cmVlIGVudHJpZXMsCisgKiBkaXN0aW5ndWlzaGVkIGJ5IHRoZSBMU2Igb2YgdGhlIGxlYWYgbm9kZSBwb2ludGVyIChzZWUgYWJvdmUpLgorICogQXMgYSBub3RlIGVudHJ5LCB0aGUga2V5IGlzIHRoZSBTSEExIG9mIHRoZSByZWZlcmVuY2VkIG9iamVjdCwgYW5kIHRoZQorICogdmFsdWUgaXMgdGhlIFNIQTEgb2YgdGhlIG5vdGUgb2JqZWN0LgorICogQXMgYSBzdWJ0cmVlIGVudHJ5LCB0aGUga2V5IGlzIHRoZSBwcmVmaXggU0hBMSAody90cmFpbGluZyBOVUxzKSBvZiB0aGUKKyAqIHJlZmVyZW5jZWQgb2JqZWN0LCB1c2luZyB0aGUgbGFzdCBieXRlIG9mIHRoZSBrZXkgdG8gc3RvcmUgdGhlIGxlbmd0aCBvZgorICogdGhlIHByZWZpeC4gVGhlIHZhbHVlIGlzIHRoZSBTSEExIG9mIHRoZSB0cmVlIG9iamVjdCBjb250YWluaW5nIHRoZSBub3RlcworICogc3VidHJlZS4KKyAqLworc3RydWN0IGxlYWZfbm9kZSB7CisJc3RydWN0IG9iamVjdF9pZCBrZXlfb2lkOworCXN0cnVjdCBvYmplY3RfaWQgdmFsX29pZDsKK307CisKKy8qCisgKiBBIG5vdGVzIHRyZWUgbWF5IGNvbnRhaW4gZW50cmllcyB0aGF0IGFyZSBub3Qgbm90ZXMsIGFuZCB0aGF0IGRvIG5vdCBmb2xsb3cKKyAqIHRoZSBuYW1pbmcgY29udmVudGlvbnMgb2Ygbm90ZXMuIFRoZXJlIGFyZSB0eXBpY2FsbHkgbm9uZS9mZXcgb2YgdGhlc2UsIGJ1dAorICogd2Ugc3RpbGwgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZW0uIEtlZXAgYSBzaW1wbGUgbGlua2VkIGxpc3Qgc29ydGVkIGFscGhhLQorICogYmV0aWNhbGx5IG9uIHRoZSBub24tbm90ZSBwYXRoLiBUaGUgbGlzdCBpcyBwb3B1bGF0ZWQgd2hlbiBwYXJzaW5nIHRyZWUKKyAqIG9iamVjdHMgaW4gbG9hZF9zdWJ0cmVlKCksIGFuZCB0aGUgbm9uLW5vdGVzIGFyZSBjb3JyZWN0bHkgd3JpdHRlbiBiYWNrIGludG8KKyAqIHRoZSB0cmVlIG9iamVjdHMgcHJvZHVjZWQgYnkgd3JpdGVfbm90ZXNfdHJlZSgpLgorICovCitzdHJ1Y3Qgbm9uX25vdGUgeworCXN0cnVjdCBub25fbm90ZSAqbmV4dDsgLyogZ3JvdW5kZWQgKGxhc3QtPm5leHQgPT0gTlVMTCkgKi8KKwljaGFyICpwYXRoOworCXVuc2lnbmVkIGludCBtb2RlOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworfTsKKworI2RlZmluZSBQVFJfVFlQRV9OVUxMICAgICAwCisjZGVmaW5lIFBUUl9UWVBFX0lOVEVSTkFMIDEKKyNkZWZpbmUgUFRSX1RZUEVfTk9URSAgICAgMgorI2RlZmluZSBQVFJfVFlQRV9TVUJUUkVFICAzCisKKyNkZWZpbmUgR0VUX1BUUl9UWVBFKHB0cikgICAgICAgKCh1aW50cHRyX3QpIChwdHIpICYgMykKKyNkZWZpbmUgQ0xSX1BUUl9UWVBFKHB0cikgICAgICAgKCh2b2lkICopICgodWludHB0cl90KSAocHRyKSAmIH4zKSkKKyNkZWZpbmUgU0VUX1BUUl9UWVBFKHB0ciwgdHlwZSkgKCh2b2lkICopICgodWludHB0cl90KSAocHRyKSB8ICh0eXBlKSkpCisKKyNkZWZpbmUgR0VUX05JQkJMRShuLCBzaGExKSAoKCgoc2hhMSlbKG4pID4+IDFdKSA+PiAoKH4obikgJiAweDAxKSA8PCAyKSkgJiAweDBmKQorCisjZGVmaW5lIEtFWV9JTkRFWCAodGhlX2hhc2hfYWxnby0+cmF3c3ogLSAxKQorI2RlZmluZSBGQU5PVVRfUEFUSF9TRVBBUkFUT1JTICh0aGVfaGFzaF9hbGdvLT5yYXdzeiAtIDEpCisjZGVmaW5lIEZBTk9VVF9QQVRIX1NFUEFSQVRPUlNfTUFYICgoR0lUX01BWF9IRVhTWiAvIDIpIC0gMSkKKyNkZWZpbmUgU1VCVFJFRV9TSEExX1BSRUZJWENNUChrZXlfc2hhMSwgc3VidHJlZV9zaGExKSBcCisJKG1lbWNtcChrZXlfc2hhMSwgc3VidHJlZV9zaGExLCBzdWJ0cmVlX3NoYTFbS0VZX0lOREVYXSkpCisKK3N0cnVjdCBub3Rlc190cmVlIGRlZmF1bHRfbm90ZXNfdHJlZTsKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBkaXNwbGF5X25vdGVzX3JlZnMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworc3RhdGljIHN0cnVjdCBub3Rlc190cmVlICoqZGlzcGxheV9ub3Rlc190cmVlczsKKworc3RhdGljIHZvaWQgbG9hZF9zdWJ0cmVlKHN0cnVjdCBub3Rlc190cmVlICp0LCBzdHJ1Y3QgbGVhZl9ub2RlICpzdWJ0cmVlLAorCQlzdHJ1Y3QgaW50X25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBuKTsKKworLyoKKyAqIFNlYXJjaCB0aGUgdHJlZSB1bnRpbCB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb24gZm9yIHRoZSBnaXZlbiBrZXkgaXMgZm91bmQ6CisgKiAxLiBTdGFydCBhdCB0aGUgcm9vdCBub2RlLCB3aXRoIG4gPSAwCisgKiAyLiBJZiBhWzBdIGF0IHRoZSBjdXJyZW50IGxldmVsIGlzIGEgbWF0Y2hpbmcgc3VidHJlZSBlbnRyeSwgdW5wYWNrIHRoYXQKKyAqICAgIHN1YnRyZWUgZW50cnkgYW5kIHJlbW92ZSBpdDsgcmVzdGFydCBzZWFyY2ggYXQgdGhlIGN1cnJlbnQgbGV2ZWwuCisgKiAzLiBVc2UgdGhlIG50aCBuaWJibGUgb2YgdGhlIGtleSBhcyBhbiBpbmRleCBpbnRvIGE6CisgKiAgICAtIElmIGFbbl0gaXMgYW4gaW50X25vZGUsIHJlY3Vyc2UgZnJvbSAjMiBpbnRvIHRoYXQgbm9kZSBhbmQgaW5jcmVtZW50IG4KKyAqICAgIC0gSWYgYSBtYXRjaGluZyBzdWJ0cmVlIGVudHJ5LCB1bnBhY2sgdGhhdCBzdWJ0cmVlIGVudHJ5IChhbmQgcmVtb3ZlIGl0KTsKKyAqICAgICAgcmVzdGFydCBzZWFyY2ggYXQgdGhlIGN1cnJlbnQgbGV2ZWwuCisgKiAgICAtIE90aGVyd2lzZSwgd2UgaGF2ZSBmb3VuZCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAqICAgICAgLSBhIHN1YnRyZWUgZW50cnkgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGtleQorICogICAgICAtIGEgbm90ZSBlbnRyeSB3aGljaCBtYXkgb3IgbWF5IG5vdCBtYXRjaCB0aGUga2V5CisgKiAgICAgIC0gYW4gdW51c2VkIGxlYWYgbm9kZSAoTlVMTCkKKyAqICAgICAgSW4gYW55IGNhc2UsIHNldCAqdHJlZSBhbmQgKm4sIGFuZCByZXR1cm4gcG9pbnRlciB0byB0aGUgdHJlZSBsb2NhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgKipub3RlX3RyZWVfc2VhcmNoKHN0cnVjdCBub3Rlc190cmVlICp0LCBzdHJ1Y3QgaW50X25vZGUgKip0cmVlLAorCQl1bnNpZ25lZCBjaGFyICpuLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXlfc2hhMSkKK3sKKwlzdHJ1Y3QgbGVhZl9ub2RlICpsOworCXVuc2lnbmVkIGNoYXIgaTsKKwl2b2lkICpwID0gKCp0cmVlKS0+YVswXTsKKworCWlmIChHRVRfUFRSX1RZUEUocCkgPT0gUFRSX1RZUEVfU1VCVFJFRSkgeworCQlsID0gKHN0cnVjdCBsZWFmX25vZGUgKikgQ0xSX1BUUl9UWVBFKHApOworCQlpZiAoIVNVQlRSRUVfU0hBMV9QUkVGSVhDTVAoa2V5X3NoYTEsIGwtPmtleV9vaWQuaGFzaCkpIHsKKwkJCS8qIHVucGFjayB0cmVlIGFuZCByZXN1bWUgc2VhcmNoICovCisJCQkoKnRyZWUpLT5hWzBdID0gTlVMTDsKKwkJCWxvYWRfc3VidHJlZSh0LCBsLCAqdHJlZSwgKm4pOworCQkJZnJlZShsKTsKKwkJCXJldHVybiBub3RlX3RyZWVfc2VhcmNoKHQsIHRyZWUsIG4sIGtleV9zaGExKTsKKwkJfQorCX0KKworCWkgPSBHRVRfTklCQkxFKCpuLCBrZXlfc2hhMSk7CisJcCA9ICgqdHJlZSktPmFbaV07CisJc3dpdGNoIChHRVRfUFRSX1RZUEUocCkpIHsKKwljYXNlIFBUUl9UWVBFX0lOVEVSTkFMOgorCQkqdHJlZSA9IENMUl9QVFJfVFlQRShwKTsKKwkJKCpuKSsrOworCQlyZXR1cm4gbm90ZV90cmVlX3NlYXJjaCh0LCB0cmVlLCBuLCBrZXlfc2hhMSk7CisJY2FzZSBQVFJfVFlQRV9TVUJUUkVFOgorCQlsID0gKHN0cnVjdCBsZWFmX25vZGUgKikgQ0xSX1BUUl9UWVBFKHApOworCQlpZiAoIVNVQlRSRUVfU0hBMV9QUkVGSVhDTVAoa2V5X3NoYTEsIGwtPmtleV9vaWQuaGFzaCkpIHsKKwkJCS8qIHVucGFjayB0cmVlIGFuZCByZXN1bWUgc2VhcmNoICovCisJCQkoKnRyZWUpLT5hW2ldID0gTlVMTDsKKwkJCWxvYWRfc3VidHJlZSh0LCBsLCAqdHJlZSwgKm4pOworCQkJZnJlZShsKTsKKwkJCXJldHVybiBub3RlX3RyZWVfc2VhcmNoKHQsIHRyZWUsIG4sIGtleV9zaGExKTsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gJigoKnRyZWUpLT5hW2ldKTsKKwl9Cit9CisKKy8qCisgKiBUbyBmaW5kIGEgbGVhZl9ub2RlOgorICogU2VhcmNoIHRvIHRoZSB0cmVlIGxvY2F0aW9uIGFwcHJvcHJpYXRlIGZvciB0aGUgZ2l2ZW4ga2V5OgorICogSWYgYSBub3RlIGVudHJ5IHdpdGggbWF0Y2hpbmcga2V5LCByZXR1cm4gdGhlIG5vdGUgZW50cnksIGVsc2UgcmV0dXJuIE5VTEwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbGVhZl9ub2RlICpub3RlX3RyZWVfZmluZChzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwKKwkJc3RydWN0IGludF9ub2RlICp0cmVlLCB1bnNpZ25lZCBjaGFyIG4sCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV9zaGExKQoreworCXZvaWQgKipwID0gbm90ZV90cmVlX3NlYXJjaCh0LCAmdHJlZSwgJm4sIGtleV9zaGExKTsKKwlpZiAoR0VUX1BUUl9UWVBFKCpwKSA9PSBQVFJfVFlQRV9OT1RFKSB7CisJCXN0cnVjdCBsZWFmX25vZGUgKmwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKSBDTFJfUFRSX1RZUEUoKnApOworCQlpZiAoaGFzaGVxKGtleV9zaGExLCBsLT5rZXlfb2lkLmhhc2gpKQorCQkJcmV0dXJuIGw7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogSG93IHRvIGNvbnNvbGlkYXRlIGFuIGludF9ub2RlOgorICogSWYgdGhlcmUgYXJlID4gMSBub24tTlVMTCBlbnRyaWVzLCBnaXZlIHVwIGFuZCByZXR1cm4gbm9uLXplcm8uCisgKiBPdGhlcndpc2UgcmVwbGFjZSB0aGUgaW50X25vZGUgYXQgdGhlIGdpdmVuIGluZGV4IGluIHRoZSBnaXZlbiBwYXJlbnQgbm9kZQorICogd2l0aCB0aGUgb25seSBOT1RFIGVudHJ5IChvciBhIE5VTEwgZW50cnkgaWYgbm8gZW50cmllcykgZnJvbSB0aGUgZ2l2ZW4KKyAqIHRyZWUsIGFuZCByZXR1cm4gMC4KKyAqLworc3RhdGljIGludCBub3RlX3RyZWVfY29uc29saWRhdGUoc3RydWN0IGludF9ub2RlICp0cmVlLAorCXN0cnVjdCBpbnRfbm9kZSAqcGFyZW50LCB1bnNpZ25lZCBjaGFyIGluZGV4KQoreworCXVuc2lnbmVkIGludCBpOworCXZvaWQgKnAgPSBOVUxMOworCisJYXNzZXJ0KHRyZWUgJiYgcGFyZW50KTsKKwlhc3NlcnQoQ0xSX1BUUl9UWVBFKHBhcmVudC0+YVtpbmRleF0pID09IHRyZWUpOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJaWYgKEdFVF9QVFJfVFlQRSh0cmVlLT5hW2ldKSAhPSBQVFJfVFlQRV9OVUxMKSB7CisJCQlpZiAocCkgLyogbW9yZSB0aGFuIG9uZSBlbnRyeSAqLworCQkJCXJldHVybiAtMjsKKwkJCXAgPSB0cmVlLT5hW2ldOworCQl9CisJfQorCisJaWYgKHAgJiYgKEdFVF9QVFJfVFlQRShwKSAhPSBQVFJfVFlQRV9OT1RFKSkKKwkJcmV0dXJuIC0yOworCS8qIHJlcGxhY2UgdHJlZSB3aXRoIHAgaW4gcGFyZW50W2luZGV4XSAqLworCXBhcmVudC0+YVtpbmRleF0gPSBwOworCWZyZWUodHJlZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUbyByZW1vdmUgYSBsZWFmX25vZGU6CisgKiBTZWFyY2ggdG8gdGhlIHRyZWUgbG9jYXRpb24gYXBwcm9wcmlhdGUgZm9yIHRoZSBnaXZlbiBsZWFmX25vZGUncyBrZXk6CisgKiAtIElmIGxvY2F0aW9uIGRvZXMgbm90IGhvbGQgYSBtYXRjaGluZyBlbnRyeSwgYWJvcnQgYW5kIGRvIG5vdGhpbmcuCisgKiAtIENvcHkgdGhlIG1hdGNoaW5nIGVudHJ5J3MgdmFsdWUgaW50byB0aGUgZ2l2ZW4gZW50cnkuCisgKiAtIFJlcGxhY2UgdGhlIG1hdGNoaW5nIGxlYWZfbm9kZSB3aXRoIGEgTlVMTCBlbnRyeSAoYW5kIGZyZWUgdGhlIGxlYWZfbm9kZSkuCisgKiAtIENvbnNvbGlkYXRlIGludF9ub2RlcyByZXBlYXRlZGx5LCB3aGlsZSB3YWxraW5nIHVwIHRoZSB0cmVlIHRvd2FyZHMgcm9vdC4KKyAqLworc3RhdGljIHZvaWQgbm90ZV90cmVlX3JlbW92ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwKKwkJc3RydWN0IGludF9ub2RlICp0cmVlLCB1bnNpZ25lZCBjaGFyIG4sCisJCXN0cnVjdCBsZWFmX25vZGUgKmVudHJ5KQoreworCXN0cnVjdCBsZWFmX25vZGUgKmw7CisJc3RydWN0IGludF9ub2RlICpwYXJlbnRfc3RhY2tbR0lUX01BWF9SQVdTWl07CisJdW5zaWduZWQgY2hhciBpLCBqOworCXZvaWQgKipwID0gbm90ZV90cmVlX3NlYXJjaCh0LCAmdHJlZSwgJm4sIGVudHJ5LT5rZXlfb2lkLmhhc2gpOworCisJYXNzZXJ0KEdFVF9QVFJfVFlQRShlbnRyeSkgPT0gMCk7IC8qIG5vIHR5cGUgYml0cyBzZXQgKi8KKwlpZiAoR0VUX1BUUl9UWVBFKCpwKSAhPSBQVFJfVFlQRV9OT1RFKQorCQlyZXR1cm47IC8qIHR5cGUgbWlzbWF0Y2gsIG5vdGhpbmcgdG8gcmVtb3ZlICovCisJbCA9IChzdHJ1Y3QgbGVhZl9ub2RlICopIENMUl9QVFJfVFlQRSgqcCk7CisJaWYgKCFvaWRlcSgmbC0+a2V5X29pZCwgJmVudHJ5LT5rZXlfb2lkKSkKKwkJcmV0dXJuOyAvKiBrZXkgbWlzbWF0Y2gsIG5vdGhpbmcgdG8gcmVtb3ZlICovCisKKwkvKiB3ZSBoYXZlIGZvdW5kIGEgbWF0Y2hpbmcgZW50cnkgKi8KKwlvaWRjcHkoJmVudHJ5LT52YWxfb2lkLCAmbC0+dmFsX29pZCk7CisJZnJlZShsKTsKKwkqcCA9IFNFVF9QVFJfVFlQRShOVUxMLCBQVFJfVFlQRV9OVUxMKTsKKworCS8qIGNvbnNvbGlkYXRlIHRoaXMgdHJlZSBsZXZlbCwgYW5kIHBhcmVudCBsZXZlbHMsIGlmIHBvc3NpYmxlICovCisJaWYgKCFuKQorCQlyZXR1cm47IC8qIGNhbm5vdCBjb25zb2xpZGF0ZSB0b3AgbGV2ZWwgKi8KKwkvKiBmaXJzdCwgYnVpbGQgc3RhY2sgb2YgYW5jZXN0b3JzIGJldHdlZW4gcm9vdCBhbmQgY3VycmVudCBub2RlICovCisJcGFyZW50X3N0YWNrWzBdID0gdC0+cm9vdDsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWogPSBHRVRfTklCQkxFKGksIGVudHJ5LT5rZXlfb2lkLmhhc2gpOworCQlwYXJlbnRfc3RhY2tbaSArIDFdID0gQ0xSX1BUUl9UWVBFKHBhcmVudF9zdGFja1tpXS0+YVtqXSk7CisJfQorCWFzc2VydChpID09IG4gJiYgcGFyZW50X3N0YWNrW2ldID09IHRyZWUpOworCS8qIG5leHQsIHVud2luZCBzdGFjayB1bnRpbCBub3RlX3RyZWVfY29uc29saWRhdGUoKSBpcyBkb25lICovCisJd2hpbGUgKGkgPiAwICYmCisJICAgICAgICFub3RlX3RyZWVfY29uc29saWRhdGUocGFyZW50X3N0YWNrW2ldLCBwYXJlbnRfc3RhY2tbaSAtIDFdLAorCQkJCSAgICAgIEdFVF9OSUJCTEUoaSAtIDEsIGVudHJ5LT5rZXlfb2lkLmhhc2gpKSkKKwkJaS0tOworfQorCisvKgorICogVG8gaW5zZXJ0IGEgbGVhZl9ub2RlOgorICogU2VhcmNoIHRvIHRoZSB0cmVlIGxvY2F0aW9uIGFwcHJvcHJpYXRlIGZvciB0aGUgZ2l2ZW4gbGVhZl9ub2RlJ3Mga2V5OgorICogLSBJZiBsb2NhdGlvbiBpcyB1bnVzZWQgKE5VTEwpLCBzdG9yZSB0aGUgdHdlYWtlZCBwb2ludGVyIGRpcmVjdGx5IHRoZXJlCisgKiAtIElmIGxvY2F0aW9uIGhvbGRzIGEgbm90ZSBlbnRyeSB0aGF0IG1hdGNoZXMgdGhlIG5vdGUtdG8tYmUtaW5zZXJ0ZWQsIHRoZW4KKyAqICAgY29tYmluZSB0aGUgdHdvIG5vdGVzIChieSBjYWxsaW5nIHRoZSBnaXZlbiBjb21iaW5lX25vdGVzIGZ1bmN0aW9uKS4KKyAqIC0gSWYgbG9jYXRpb24gaG9sZHMgYSBub3RlIGVudHJ5IHRoYXQgbWF0Y2hlcyB0aGUgc3VidHJlZS10by1iZS1pbnNlcnRlZCwKKyAqICAgdGhlbiB1bnBhY2sgdGhlIHN1YnRyZWUtdG8tYmUtaW5zZXJ0ZWQgaW50byB0aGUgbG9jYXRpb24uCisgKiAtIElmIGxvY2F0aW9uIGhvbGRzIGEgbWF0Y2hpbmcgc3VidHJlZSBlbnRyeSwgdW5wYWNrIHRoZSBzdWJ0cmVlIGF0IHRoYXQKKyAqICAgbG9jYXRpb24sIGFuZCByZXN0YXJ0IHRoZSBpbnNlcnQgb3BlcmF0aW9uIGZyb20gdGhhdCBsZXZlbC4KKyAqIC0gRWxzZSwgY3JlYXRlIGEgbmV3IGludF9ub2RlLCBob2xkaW5nIGJvdGggdGhlIG5vZGUtYXQtbG9jYXRpb24gYW5kIHRoZQorICogICBub2RlLXRvLWJlLWluc2VydGVkLCBhbmQgc3RvcmUgdGhlIG5ldyBpbnRfbm9kZSBpbnRvIHRoZSBsb2NhdGlvbi4KKyAqLworc3RhdGljIGludCBub3RlX3RyZWVfaW5zZXJ0KHN0cnVjdCBub3Rlc190cmVlICp0LCBzdHJ1Y3QgaW50X25vZGUgKnRyZWUsCisJCXVuc2lnbmVkIGNoYXIgbiwgc3RydWN0IGxlYWZfbm9kZSAqZW50cnksIHVuc2lnbmVkIGNoYXIgdHlwZSwKKwkJY29tYmluZV9ub3Rlc19mbiBjb21iaW5lX25vdGVzKQoreworCXN0cnVjdCBpbnRfbm9kZSAqbmV3X25vZGU7CisJc3RydWN0IGxlYWZfbm9kZSAqbDsKKwl2b2lkICoqcCA9IG5vdGVfdHJlZV9zZWFyY2godCwgJnRyZWUsICZuLCBlbnRyeS0+a2V5X29pZC5oYXNoKTsKKwlpbnQgcmV0ID0gMDsKKworCWFzc2VydChHRVRfUFRSX1RZUEUoZW50cnkpID09IDApOyAvKiBubyB0eXBlIGJpdHMgc2V0ICovCisJbCA9IChzdHJ1Y3QgbGVhZl9ub2RlICopIENMUl9QVFJfVFlQRSgqcCk7CisJc3dpdGNoIChHRVRfUFRSX1RZUEUoKnApKSB7CisJY2FzZSBQVFJfVFlQRV9OVUxMOgorCQlhc3NlcnQoISpwKTsKKwkJaWYgKGlzX251bGxfb2lkKCZlbnRyeS0+dmFsX29pZCkpCisJCQlmcmVlKGVudHJ5KTsKKwkJZWxzZQorCQkJKnAgPSBTRVRfUFRSX1RZUEUoZW50cnksIHR5cGUpOworCQlyZXR1cm4gMDsKKwljYXNlIFBUUl9UWVBFX05PVEU6CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIFBUUl9UWVBFX05PVEU6CisJCQlpZiAob2lkZXEoJmwtPmtleV9vaWQsICZlbnRyeS0+a2V5X29pZCkpIHsKKwkJCQkvKiBza2lwIGNvbmNhdGVuYXRpb24gaWYgbCA9PSBlbnRyeSAqLworCQkJCWlmIChvaWRlcSgmbC0+dmFsX29pZCwgJmVudHJ5LT52YWxfb2lkKSkgeworCQkJCQlmcmVlKGVudHJ5KTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCisJCQkJcmV0ID0gY29tYmluZV9ub3RlcygmbC0+dmFsX29pZCwKKwkJCQkJCSAgICAmZW50cnktPnZhbF9vaWQpOworCQkJCWlmICghcmV0ICYmIGlzX251bGxfb2lkKCZsLT52YWxfb2lkKSkKKwkJCQkJbm90ZV90cmVlX3JlbW92ZSh0LCB0cmVlLCBuLCBlbnRyeSk7CisJCQkJZnJlZShlbnRyeSk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBUUl9UWVBFX1NVQlRSRUU6CisJCQlpZiAoIVNVQlRSRUVfU0hBMV9QUkVGSVhDTVAobC0+a2V5X29pZC5oYXNoLAorCQkJCQkJICAgIGVudHJ5LT5rZXlfb2lkLmhhc2gpKSB7CisJCQkJLyogdW5wYWNrICdlbnRyeScgKi8KKwkJCQlsb2FkX3N1YnRyZWUodCwgZW50cnksIHRyZWUsIG4pOworCQkJCWZyZWUoZW50cnkpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQVFJfVFlQRV9TVUJUUkVFOgorCQlpZiAoIVNVQlRSRUVfU0hBMV9QUkVGSVhDTVAoZW50cnktPmtleV9vaWQuaGFzaCwgbC0+a2V5X29pZC5oYXNoKSkgeworCQkJLyogdW5wYWNrICdsJyBhbmQgcmVzdGFydCBpbnNlcnQgKi8KKwkJCSpwID0gTlVMTDsKKwkJCWxvYWRfc3VidHJlZSh0LCBsLCB0cmVlLCBuKTsKKwkJCWZyZWUobCk7CisJCQlyZXR1cm4gbm90ZV90cmVlX2luc2VydCh0LCB0cmVlLCBuLCBlbnRyeSwgdHlwZSwKKwkJCQkJCWNvbWJpbmVfbm90ZXMpOworCQl9CisJCWJyZWFrOworCX0KKworCS8qIG5vbi1tYXRjaGluZyBsZWFmX25vZGUgKi8KKwlhc3NlcnQoR0VUX1BUUl9UWVBFKCpwKSA9PSBQVFJfVFlQRV9OT1RFIHx8CisJICAgICAgIEdFVF9QVFJfVFlQRSgqcCkgPT0gUFRSX1RZUEVfU1VCVFJFRSk7CisJaWYgKGlzX251bGxfb2lkKCZlbnRyeS0+dmFsX29pZCkpIHsgLyogc2tpcCBpbnNlcnRpb24gb2YgZW1wdHkgbm90ZSAqLworCQlmcmVlKGVudHJ5KTsKKwkJcmV0dXJuIDA7CisJfQorCW5ld19ub2RlID0gKHN0cnVjdCBpbnRfbm9kZSAqKSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgaW50X25vZGUpKTsKKwlyZXQgPSBub3RlX3RyZWVfaW5zZXJ0KHQsIG5ld19ub2RlLCBuICsgMSwgbCwgR0VUX1BUUl9UWVBFKCpwKSwKKwkJCSAgICAgICBjb21iaW5lX25vdGVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCSpwID0gU0VUX1BUUl9UWVBFKG5ld19ub2RlLCBQVFJfVFlQRV9JTlRFUk5BTCk7CisJcmV0dXJuIG5vdGVfdHJlZV9pbnNlcnQodCwgbmV3X25vZGUsIG4gKyAxLCBlbnRyeSwgdHlwZSwgY29tYmluZV9ub3Rlcyk7Cit9CisKKy8qIEZyZWUgdGhlIGVudGlyZSBub3RlcyBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgZ2l2ZW4gdHJlZSAqLworc3RhdGljIHZvaWQgbm90ZV90cmVlX2ZyZWUoc3RydWN0IGludF9ub2RlICp0cmVlKQoreworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXZvaWQgKnAgPSB0cmVlLT5hW2ldOworCQlzd2l0Y2ggKEdFVF9QVFJfVFlQRShwKSkgeworCQljYXNlIFBUUl9UWVBFX0lOVEVSTkFMOgorCQkJbm90ZV90cmVlX2ZyZWUoQ0xSX1BUUl9UWVBFKHApKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFBUUl9UWVBFX05PVEU6CisJCWNhc2UgUFRSX1RZUEVfU1VCVFJFRToKKwkJCWZyZWUoQ0xSX1BUUl9UWVBFKHApKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBub25fbm90ZV9jbXAoY29uc3Qgc3RydWN0IG5vbl9ub3RlICphLCBjb25zdCBzdHJ1Y3Qgbm9uX25vdGUgKmIpCit7CisJcmV0dXJuIHN0cmNtcChhLT5wYXRoLCBiLT5wYXRoKTsKK30KKworLyogbm90ZTogdGFrZXMgb3duZXJzaGlwIG9mIHBhdGggc3RyaW5nICovCitzdGF0aWMgdm9pZCBhZGRfbm9uX25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGNoYXIgKnBhdGgsCisJCXVuc2lnbmVkIGludCBtb2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBub25fbm90ZSAqcCA9IHQtPnByZXZfbm9uX25vdGUsICpuOworCW4gPSAoc3RydWN0IG5vbl9ub3RlICopIHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub25fbm90ZSkpOworCW4tPm5leHQgPSBOVUxMOworCW4tPnBhdGggPSBwYXRoOworCW4tPm1vZGUgPSBtb2RlOworCWhhc2hjcHkobi0+b2lkLmhhc2gsIHNoYTEpOworCXQtPnByZXZfbm9uX25vdGUgPSBuOworCisJaWYgKCF0LT5maXJzdF9ub25fbm90ZSkgeworCQl0LT5maXJzdF9ub25fbm90ZSA9IG47CisJCXJldHVybjsKKwl9CisKKwlpZiAobm9uX25vdGVfY21wKHAsIG4pIDwgMCkKKwkJOyAvKiBkbyBub3RoaW5nICAqLworCWVsc2UgaWYgKG5vbl9ub3RlX2NtcCh0LT5maXJzdF9ub25fbm90ZSwgbikgPD0gMCkKKwkJcCA9IHQtPmZpcnN0X25vbl9ub3RlOworCWVsc2UgeworCQkvKiBuIHNvcnRzIGJlZm9yZSB0LT5maXJzdF9ub25fbm90ZSAqLworCQluLT5uZXh0ID0gdC0+Zmlyc3Rfbm9uX25vdGU7CisJCXQtPmZpcnN0X25vbl9ub3RlID0gbjsKKwkJcmV0dXJuOworCX0KKworCS8qIG4gc29ydHMgZXF1YWwgb3IgYWZ0ZXIgcCAqLworCXdoaWxlIChwLT5uZXh0ICYmIG5vbl9ub3RlX2NtcChwLT5uZXh0LCBuKSA8PSAwKQorCQlwID0gcC0+bmV4dDsKKworCWlmIChub25fbm90ZV9jbXAocCwgbikgPT0gMCkgeyAvKiBuIH49IHA7IG92ZXJ3cml0ZSBwIHdpdGggbiAqLworCQlhc3NlcnQoc3RyY21wKHAtPnBhdGgsIG4tPnBhdGgpID09IDApOworCQlwLT5tb2RlID0gbi0+bW9kZTsKKwkJb2lkY3B5KCZwLT5vaWQsICZuLT5vaWQpOworCQlmcmVlKG4pOworCQl0LT5wcmV2X25vbl9ub3RlID0gcDsKKwkJcmV0dXJuOworCX0KKworCS8qIG4gc29ydHMgYmV0d2VlbiBwIGFuZCBwLT5uZXh0ICovCisJbi0+bmV4dCA9IHAtPm5leHQ7CisJcC0+bmV4dCA9IG47Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfc3VidHJlZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgc3RydWN0IGxlYWZfbm9kZSAqc3VidHJlZSwKKwkJc3RydWN0IGludF9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgbikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9iamVjdF9vaWQ7CisJc2l6ZV90IHByZWZpeF9sZW47CisJdm9pZCAqYnVmOworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKwljb25zdCB1bnNpZ25lZCBoYXNoc3ogPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKworCWJ1ZiA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKHRoZV9yZXBvc2l0b3J5LCAmZGVzYywgJnN1YnRyZWUtPnZhbF9vaWQpOworCWlmICghYnVmKQorCQlkaWUoIkNvdWxkIG5vdCByZWFkICVzIGZvciBub3Rlcy1pbmRleCIsCisJCSAgICAgb2lkX3RvX2hleCgmc3VidHJlZS0+dmFsX29pZCkpOworCisJcHJlZml4X2xlbiA9IHN1YnRyZWUtPmtleV9vaWQuaGFzaFtLRVlfSU5ERVhdOworCWlmIChwcmVmaXhfbGVuID49IGhhc2hzeikKKwkJQlVHKCJwcmVmaXhfbGVuICglIlBSSXVNQVgiKSBpcyBvdXQgb2YgcmFuZ2UiLCAodWludG1heF90KXByZWZpeF9sZW4pOworCWlmIChwcmVmaXhfbGVuICogMiA8IG4pCisJCUJVRygicHJlZml4X2xlbiAoJSJQUkl1TUFYIikgaXMgdG9vIHNtYWxsIiwgKHVpbnRtYXhfdClwcmVmaXhfbGVuKTsKKwltZW1jcHkob2JqZWN0X29pZC5oYXNoLCBzdWJ0cmVlLT5rZXlfb2lkLmhhc2gsIHByZWZpeF9sZW4pOworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CisJCXVuc2lnbmVkIGNoYXIgdHlwZTsKKwkJc3RydWN0IGxlYWZfbm9kZSAqbDsKKwkJc2l6ZV90IHBhdGhfbGVuID0gc3RybGVuKGVudHJ5LnBhdGgpOworCisJCWlmIChwYXRoX2xlbiA9PSAyICogKGhhc2hzeiAtIHByZWZpeF9sZW4pKSB7CisJCQkvKiBUaGlzIGlzIHBvdGVudGlhbGx5IHRoZSByZW1haW5kZXIgb2YgdGhlIFNIQS0xICovCisKKwkJCWlmICghU19JU1JFRyhlbnRyeS5tb2RlKSkKKwkJCQkvKiBub3RlcyBtdXN0IGJlIGJsb2JzICovCisJCQkJZ290byBoYW5kbGVfbm9uX25vdGU7CisKKwkJCWlmIChoZXhfdG9fYnl0ZXMob2JqZWN0X29pZC5oYXNoICsgcHJlZml4X2xlbiwgZW50cnkucGF0aCwKKwkJCQkJIGhhc2hzeiAtIHByZWZpeF9sZW4pKQorCQkJCWdvdG8gaGFuZGxlX25vbl9ub3RlOyAvKiBlbnRyeS5wYXRoIGlzIG5vdCBhIFNIQTEgKi8KKworCQkJdHlwZSA9IFBUUl9UWVBFX05PVEU7CisJCX0gZWxzZSBpZiAocGF0aF9sZW4gPT0gMikgeworCQkJLyogVGhpcyBpcyBwb3RlbnRpYWxseSBhbiBpbnRlcm5hbCBub2RlICovCisJCQlzaXplX3QgbGVuID0gcHJlZml4X2xlbjsKKworCQkJaWYgKCFTX0lTRElSKGVudHJ5Lm1vZGUpKQorCQkJCS8qIGludGVybmFsIG5vZGVzIG11c3QgYmUgdHJlZXMgKi8KKwkJCQlnb3RvIGhhbmRsZV9ub25fbm90ZTsKKworCQkJaWYgKGhleF90b19ieXRlcyhvYmplY3Rfb2lkLmhhc2ggKyBsZW4rKywgZW50cnkucGF0aCwgMSkpCisJCQkJZ290byBoYW5kbGVfbm9uX25vdGU7IC8qIGVudHJ5LnBhdGggaXMgbm90IGEgU0hBMSAqLworCisJCQkvKgorCQkJICogUGFkIHRoZSByZXN0IG9mIHRoZSBTSEEtMSB3aXRoIHplcm9zLAorCQkJICogZXhjZXB0IGZvciB0aGUgbGFzdCBieXRlLCB3aGVyZSB3ZSB3cml0ZQorCQkJICogdGhlIGxlbmd0aDoKKwkJCSAqLworCQkJbWVtc2V0KG9iamVjdF9vaWQuaGFzaCArIGxlbiwgMCwgaGFzaHN6IC0gbGVuIC0gMSk7CisJCQlvYmplY3Rfb2lkLmhhc2hbS0VZX0lOREVYXSA9ICh1bnNpZ25lZCBjaGFyKWxlbjsKKworCQkJdHlwZSA9IFBUUl9UWVBFX1NVQlRSRUU7CisJCX0gZWxzZSB7CisJCQkvKiBUaGlzIGNhbid0IGJlIHBhcnQgb2YgYSBub3RlICovCisJCQlnb3RvIGhhbmRsZV9ub25fbm90ZTsKKwkJfQorCisJCWwgPSB4Y2FsbG9jKDEsIHNpemVvZigqbCkpOworCQlvaWRjcHkoJmwtPmtleV9vaWQsICZvYmplY3Rfb2lkKTsKKwkJb2lkY3B5KCZsLT52YWxfb2lkLCAmZW50cnkub2lkKTsKKwkJaWYgKG5vdGVfdHJlZV9pbnNlcnQodCwgbm9kZSwgbiwgbCwgdHlwZSwKKwkJCQkgICAgIGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGUpKQorCQkJZGllKCJGYWlsZWQgdG8gbG9hZCAlcyAlcyBpbnRvIG5vdGVzIHRyZWUgIgorCQkJICAgICJmcm9tICVzIiwKKwkJCSAgICB0eXBlID09IFBUUl9UWVBFX05PVEUgPyAibm90ZSIgOiAic3VidHJlZSIsCisJCQkgICAgb2lkX3RvX2hleCgmb2JqZWN0X29pZCksIHQtPnJlZik7CisKKwkJY29udGludWU7CisKK2hhbmRsZV9ub25fbm90ZToKKwkJLyoKKwkJICogRGV0ZXJtaW5lIGZ1bGwgcGF0aCBmb3IgdGhpcyBub24tbm90ZSBlbnRyeS4gVGhlCisJCSAqIGZpbGVuYW1lIGlzIGFscmVhZHkgZm91bmQgaW4gZW50cnkucGF0aCwgYnV0IHRoZQorCQkgKiBkaXJlY3RvcnkgcGFydCBvZiB0aGUgcGF0aCBtdXN0IGJlIGRlZHVjZWQgZnJvbSB0aGUKKwkJICogc3VidHJlZSBjb250YWluaW5nIHRoaXMgZW50cnkgYmFzZWQgb24gb3VyCisJCSAqIGtub3dsZWRnZSB0aGF0IHRoZSBvdmVyYWxsIG5vdGVzIHRyZWUgZm9sbG93cyBhCisJCSAqIHN0cmljdCBieXRlLWJhc2VkIHByb2dyZXNzaXZlIGZhbm91dCBzdHJ1Y3R1cmUKKwkJICogKGkuZS4gdXNpbmcgMi8zOCwgMi8yLzM2LCBldGMuIGZhbm91dHMpLgorCQkgKi8KKwkJeworCQkJc3RydWN0IHN0cmJ1ZiBub25fbm90ZV9wYXRoID0gU1RSQlVGX0lOSVQ7CisJCQljb25zdCBjaGFyICpxID0gb2lkX3RvX2hleCgmc3VidHJlZS0+a2V5X29pZCk7CisJCQlzaXplX3QgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCBwcmVmaXhfbGVuOyBpKyspIHsKKwkJCQlzdHJidWZfYWRkY2goJm5vbl9ub3RlX3BhdGgsICpxKyspOworCQkJCXN0cmJ1Zl9hZGRjaCgmbm9uX25vdGVfcGF0aCwgKnErKyk7CisJCQkJc3RyYnVmX2FkZGNoKCZub25fbm90ZV9wYXRoLCAnLycpOworCQkJfQorCQkJc3RyYnVmX2FkZHN0cigmbm9uX25vdGVfcGF0aCwgZW50cnkucGF0aCk7CisJCQlhZGRfbm9uX25vdGUodCwgc3RyYnVmX2RldGFjaCgmbm9uX25vdGVfcGF0aCwgTlVMTCksCisJCQkJICAgICBlbnRyeS5tb2RlLCBlbnRyeS5vaWQuaGFzaCk7CisJCX0KKwl9CisJZnJlZShidWYpOworfQorCisvKgorICogRGV0ZXJtaW5lIG9wdGltYWwgb24tZGlzayBmYW5vdXQgZm9yIHRoaXMgcGFydCBvZiB0aGUgbm90ZXMgdHJlZQorICoKKyAqIEdpdmVuIGEgKHN1Yil0cmVlIGFuZCB0aGUgbGV2ZWwgaW4gdGhlIGludGVybmFsIHRyZWUgc3RydWN0dXJlLCBkZXRlcm1pbmUKKyAqIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBleGlzdGluZyBmYW5vdXQgc2hvdWxkIGJlIGV4cGFuZGVkIGZvciB0aGlzCisgKiAoc3ViKXRyZWUuCisgKgorICogVmFsdWVzIG9mIHRoZSAnZmFub3V0JyB2YXJpYWJsZToKKyAqIC0gMDogTm8gZmFub3V0IChhbGwgbm90ZXMgYXJlIHN0b3JlZCBkaXJlY3RseSBpbiB0aGUgcm9vdCBub3RlcyB0cmVlKQorICogLSAxOiAyLzM4IGZhbm91dAorICogLSAyOiAyLzIvMzYgZmFub3V0CisgKiAtIDM6IDIvMi8yLzM0IGZhbm91dAorICogZXRjLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBkZXRlcm1pbmVfZmFub3V0KHN0cnVjdCBpbnRfbm9kZSAqdHJlZSwgdW5zaWduZWQgY2hhciBuLAorCQl1bnNpZ25lZCBjaGFyIGZhbm91dCkKK3sKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgaXMgYSBzaW1wbGUgaGV1cmlzdGljIHRoYXQgd29ya3Mgd2VsbCBpbiBwcmFjdGljZToKKwkgKiBGb3IgZWFjaCBldmVuLW51bWJlcmVkIDE2LXRyZWUgbGV2ZWwgKHJlbWVtYmVyIHRoYXQgZWFjaCBvbi1kaXNrCisJICogZmFub3V0IGxldmVsIGNvcnJlc3BvbmRzIHRvIF90d29fIDE2LXRyZWUgbGV2ZWxzKSwgcGVlayBhdCBhbGwgMTYKKwkgKiBlbnRyaWVzIGF0IHRoYXQgdHJlZSBsZXZlbC4gSWYgYWxsIG9mIHRoZW0gYXJlIGVpdGhlciBpbnRfbm9kZXMgb3IKKwkgKiBzdWJ0cmVlIGVudHJpZXMsIHRoZW4gdGhlcmUgYXJlIGxpa2VseSBwbGVudHkgb2Ygbm90ZXMgYmVsb3cgdGhpcworCSAqIGxldmVsLCBzbyB3ZSByZXR1cm4gYW4gaW5jcmVtZW50ZWQgZmFub3V0LgorCSAqLworCXVuc2lnbmVkIGludCBpOworCWlmICgobiAlIDIpIHx8IChuID4gMiAqIGZhbm91dCkpCisJCXJldHVybiBmYW5vdXQ7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJc3dpdGNoIChHRVRfUFRSX1RZUEUodHJlZS0+YVtpXSkpIHsKKwkJY2FzZSBQVFJfVFlQRV9TVUJUUkVFOgorCQljYXNlIFBUUl9UWVBFX0lOVEVSTkFMOgorCQkJY29udGludWU7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gZmFub3V0OworCQl9CisJfQorCXJldHVybiBmYW5vdXQgKyAxOworfQorCisvKiBoZXggb2lkICsgJy8nIGJldHdlZW4gZWFjaCBwYWlyIG9mIGhleCBkaWdpdHMgKyBOVUwgKi8KKyNkZWZpbmUgRkFOT1VUX1BBVEhfTUFYIEdJVF9NQVhfSEVYU1ogKyBGQU5PVVRfUEFUSF9TRVBBUkFUT1JTX01BWCArIDEKKworc3RhdGljIHZvaWQgY29uc3RydWN0X3BhdGhfd2l0aF9mYW5vdXQoY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwKKwkJdW5zaWduZWQgY2hhciBmYW5vdXQsIGNoYXIgKnBhdGgpCit7CisJdW5zaWduZWQgaW50IGkgPSAwLCBqID0gMDsKKwljb25zdCBjaGFyICpoZXhfaGFzaCA9IGhhc2hfdG9faGV4KGhhc2gpOworCWFzc2VydChmYW5vdXQgPCB0aGVfaGFzaF9hbGdvLT5yYXdzeik7CisJd2hpbGUgKGZhbm91dCkgeworCQlwYXRoW2krK10gPSBoZXhfaGFzaFtqKytdOworCQlwYXRoW2krK10gPSBoZXhfaGFzaFtqKytdOworCQlwYXRoW2krK10gPSAnLyc7CisJCWZhbm91dC0tOworCX0KKwl4c25wcmludGYocGF0aCArIGksIEZBTk9VVF9QQVRIX01BWCAtIGksICIlcyIsIGhleF9oYXNoICsgaik7Cit9CisKK3N0YXRpYyBpbnQgZm9yX2VhY2hfbm90ZV9oZWxwZXIoc3RydWN0IG5vdGVzX3RyZWUgKnQsIHN0cnVjdCBpbnRfbm9kZSAqdHJlZSwKKwkJdW5zaWduZWQgY2hhciBuLCB1bnNpZ25lZCBjaGFyIGZhbm91dCwgaW50IGZsYWdzLAorCQllYWNoX25vdGVfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJdW5zaWduZWQgaW50IGk7CisJdm9pZCAqcDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbGVhZl9ub2RlICpsOworCXN0YXRpYyBjaGFyIHBhdGhbRkFOT1VUX1BBVEhfTUFYXTsKKworCWZhbm91dCA9IGRldGVybWluZV9mYW5vdXQodHJlZSwgbiwgZmFub3V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworcmVkbzoKKwkJcCA9IHRyZWUtPmFbaV07CisJCXN3aXRjaCAoR0VUX1BUUl9UWVBFKHApKSB7CisJCWNhc2UgUFRSX1RZUEVfSU5URVJOQUw6CisJCQkvKiByZWN1cnNlIGludG8gaW50X25vZGUgKi8KKwkJCXJldCA9IGZvcl9lYWNoX25vdGVfaGVscGVyKHQsIENMUl9QVFJfVFlQRShwKSwgbiArIDEsCisJCQkJZmFub3V0LCBmbGFncywgZm4sIGNiX2RhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgUFRSX1RZUEVfU1VCVFJFRToKKwkJCWwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKSBDTFJfUFRSX1RZUEUocCk7CisJCQkvKgorCQkJICogU3VidHJlZSBlbnRyaWVzIGluIHRoZSBub3RlIHRyZWUgcmVwcmVzZW50IHBhcnRzIG9mCisJCQkgKiB0aGUgbm90ZSB0cmVlIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gZXhwbG9yZWQuIFRoZXJlCisJCQkgKiBpcyBhIGRpcmVjdCByZWxhdGlvbnNoaXAgYmV0d2VlbiBzdWJ0cmVlIGVudHJpZXMgYXQKKwkJCSAqIGxldmVsICduJyBpbiB0aGUgdHJlZSwgYW5kIHRoZSAnZmFub3V0JyB2YXJpYWJsZToKKwkJCSAqIFN1YnRyZWUgZW50cmllcyBhdCBsZXZlbCAnbiA8IDIgKiBmYW5vdXQnIHNob3VsZCBiZQorCQkJICogcHJlc2VydmVkLCBzaW5jZSB0aGV5IGNvcnJlc3BvbmQgZXhhY3RseSB0byBhIGZhbm91dAorCQkJICogZGlyZWN0b3J5IGluIHRoZSBvbi1kaXNrIHN0cnVjdHVyZS4gSG93ZXZlciwgc3VidHJlZQorCQkJICogZW50cmllcyBhdCBsZXZlbCAnbiA+PSAyICogZmFub3V0JyBzaG91bGQgTk9UIGJlCisJCQkgKiBwcmVzZXJ2ZWQsIGJ1dCByYXRoZXIgY29uc29saWRhdGVkIGludG8gdGhlIGFib3ZlCisJCQkgKiBub3RlcyB0cmVlIGxldmVsLiBXZSBhY2hpZXZlIHRoaXMgYnkgdW5jb25kaXRpb25hbGx5CisJCQkgKiB1bnBhY2tpbmcgc3VidHJlZSBlbnRyaWVzIHRoYXQgZXhpc3QgYmVsb3cgdGhlCisJCQkgKiB0aHJlc2hvbGQgbGV2ZWwgYXQgJ24gPSAyICogZmFub3V0Jy4KKwkJCSAqLworCQkJaWYgKG4gPCAyICogZmFub3V0ICYmCisJCQkgICAgZmxhZ3MgJiBGT1JfRUFDSF9OT1RFX1lJRUxEX1NVQlRSRUVTKSB7CisJCQkJLyogaW52b2tlIGNhbGxiYWNrIHdpdGggc3VidHJlZSAqLworCQkJCXVuc2lnbmVkIGludCBwYXRoX2xlbiA9CisJCQkJCWwtPmtleV9vaWQuaGFzaFtLRVlfSU5ERVhdICogMiArIGZhbm91dDsKKwkJCQlhc3NlcnQocGF0aF9sZW4gPCBGQU5PVVRfUEFUSF9NQVggLSAxKTsKKwkJCQljb25zdHJ1Y3RfcGF0aF93aXRoX2Zhbm91dChsLT5rZXlfb2lkLmhhc2gsCisJCQkJCQkJICAgZmFub3V0LAorCQkJCQkJCSAgIHBhdGgpOworCQkJCS8qIENyZWF0ZSB0cmFpbGluZyBzbGFzaCwgaWYgbmVlZGVkICovCisJCQkJaWYgKHBhdGhbcGF0aF9sZW4gLSAxXSAhPSAnLycpCisJCQkJCXBhdGhbcGF0aF9sZW4rK10gPSAnLyc7CisJCQkJcGF0aFtwYXRoX2xlbl0gPSAnXDAnOworCQkJCXJldCA9IGZuKCZsLT5rZXlfb2lkLCAmbC0+dmFsX29pZCwKKwkJCQkJIHBhdGgsCisJCQkJCSBjYl9kYXRhKTsKKwkJCX0KKwkJCWlmIChuID49IDIgKiBmYW5vdXQgfHwKKwkJCSAgICAhKGZsYWdzICYgRk9SX0VBQ0hfTk9URV9ET05UX1VOUEFDS19TVUJUUkVFUykpIHsKKwkJCQkvKiB1bnBhY2sgc3VidHJlZSBhbmQgcmVzdW1lIHRyYXZlcnNhbCAqLworCQkJCXRyZWUtPmFbaV0gPSBOVUxMOworCQkJCWxvYWRfc3VidHJlZSh0LCBsLCB0cmVlLCBuKTsKKwkJCQlmcmVlKGwpOworCQkJCWdvdG8gcmVkbzsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBUUl9UWVBFX05PVEU6CisJCQlsID0gKHN0cnVjdCBsZWFmX25vZGUgKikgQ0xSX1BUUl9UWVBFKHApOworCQkJY29uc3RydWN0X3BhdGhfd2l0aF9mYW5vdXQobC0+a2V5X29pZC5oYXNoLCBmYW5vdXQsCisJCQkJCQkgICBwYXRoKTsKKwkJCXJldCA9IGZuKCZsLT5rZXlfb2lkLCAmbC0+dmFsX29pZCwgcGF0aCwKKwkJCQkgY2JfZGF0YSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB0cmVlX3dyaXRlX3N0YWNrIHsKKwlzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjayAqbmV4dDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKKwljaGFyIHBhdGhbMl07IC8qIHBhdGggdG8gc3VidHJlZSBpbiBuZXh0LCBpZiBhbnkgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hdGNoZXNfdHJlZV93cml0ZV9zdGFjayhzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjayAqdHdzLAorCQljb25zdCBjaGFyICpmdWxsX3BhdGgpCit7CisJcmV0dXJuICBmdWxsX3BhdGhbMF0gPT0gdHdzLT5wYXRoWzBdICYmCisJCWZ1bGxfcGF0aFsxXSA9PSB0d3MtPnBhdGhbMV0gJiYKKwkJZnVsbF9wYXRoWzJdID09ICcvJzsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfdHJlZV9lbnRyeShzdHJ1Y3Qgc3RyYnVmICpidWYsIHVuc2lnbmVkIGludCBtb2RlLAorCQljb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBpbnQgcGF0aF9sZW4sIGNvbnN0CisJCXVuc2lnbmVkIGNoYXIgKmhhc2gpCit7CisJc3RyYnVmX2FkZGYoYnVmLCAiJW8gJS4qcyVjIiwgbW9kZSwgcGF0aF9sZW4sIHBhdGgsICdcMCcpOworCXN0cmJ1Zl9hZGQoYnVmLCBoYXNoLCB0aGVfaGFzaF9hbGdvLT5yYXdzeik7Cit9CisKK3N0YXRpYyB2b2lkIHRyZWVfd3JpdGVfc3RhY2tfaW5pdF9zdWJ0cmVlKHN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICp0d3MsCisJCWNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHRyZWVfd3JpdGVfc3RhY2sgKm47CisJYXNzZXJ0KCF0d3MtPm5leHQpOworCWFzc2VydCh0d3MtPnBhdGhbMF0gPT0gJ1wwJyAmJiB0d3MtPnBhdGhbMV0gPT0gJ1wwJyk7CisJbiA9IChzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjayAqKQorCQl4bWFsbG9jKHNpemVvZihzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjaykpOworCW4tPm5leHQgPSBOVUxMOworCXN0cmJ1Zl9pbml0KCZuLT5idWYsIDI1NiAqICgzMiArIHRoZV9oYXNoX2FsZ28tPmhleHN6KSk7IC8qIGFzc3VtZSAyNTYgZW50cmllcyBwZXIgdHJlZSAqLworCW4tPnBhdGhbMF0gPSBuLT5wYXRoWzFdID0gJ1wwJzsKKwl0d3MtPm5leHQgPSBuOworCXR3cy0+cGF0aFswXSA9IHBhdGhbMF07CisJdHdzLT5wYXRoWzFdID0gcGF0aFsxXTsKK30KKworc3RhdGljIGludCB0cmVlX3dyaXRlX3N0YWNrX2ZpbmlzaF9zdWJ0cmVlKHN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICp0d3MpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjayAqbiA9IHR3cy0+bmV4dDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHM7CisJaWYgKG4pIHsKKwkJcmV0ID0gdHJlZV93cml0ZV9zdGFja19maW5pc2hfc3VidHJlZShuKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9IHdyaXRlX29iamVjdF9maWxlKG4tPmJ1Zi5idWYsIG4tPmJ1Zi5sZW4sIHRyZWVfdHlwZSwgJnMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJc3RyYnVmX3JlbGVhc2UoJm4tPmJ1Zik7CisJCWZyZWUobik7CisJCXR3cy0+bmV4dCA9IE5VTEw7CisJCXdyaXRlX3RyZWVfZW50cnkoJnR3cy0+YnVmLCAwNDAwMDAsIHR3cy0+cGF0aCwgMiwgcy5oYXNoKTsKKwkJdHdzLT5wYXRoWzBdID0gdHdzLT5wYXRoWzFdID0gJ1wwJzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfZWFjaF9ub3RlX2hlbHBlcihzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjayAqdHdzLAorCQljb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBpbnQgbW9kZSwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXNpemVfdCBwYXRoX2xlbiA9IHN0cmxlbihwYXRoKTsKKwl1bnNpZ25lZCBpbnQgbiA9IDA7CisJaW50IHJldDsKKworCS8qIERldGVybWluZSBjb21tb24gcGFydCBvZiB0cmVlIHdyaXRlIHN0YWNrICovCisJd2hpbGUgKHR3cyAmJiAzICogbiA8IHBhdGhfbGVuICYmCisJICAgICAgIG1hdGNoZXNfdHJlZV93cml0ZV9zdGFjayh0d3MsIHBhdGggKyAzICogbikpIHsKKwkJbisrOworCQl0d3MgPSB0d3MtPm5leHQ7CisJfQorCisJLyogdHdzIHBvaW50IHRvIGxhc3QgbWF0Y2hpbmcgdHJlZV93cml0ZV9zdGFjayBlbnRyeSAqLworCXJldCA9IHRyZWVfd3JpdGVfc3RhY2tfZmluaXNoX3N1YnRyZWUodHdzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU3RhcnQgc3VidHJlZXMgbmVlZGVkIHRvIHNhdGlzZnkgcGF0aCAqLworCXdoaWxlICgzICogbiArIDIgPCBwYXRoX2xlbiAmJiBwYXRoWzMgKiBuICsgMl0gPT0gJy8nKSB7CisJCXRyZWVfd3JpdGVfc3RhY2tfaW5pdF9zdWJ0cmVlKHR3cywgcGF0aCArIDMgKiBuKTsKKwkJbisrOworCQl0d3MgPSB0d3MtPm5leHQ7CisJfQorCisJLyogVGhlcmUgc2hvdWxkIGJlIG5vIG1vcmUgZGlyZWN0b3J5IGNvbXBvbmVudHMgaW4gdGhlIGdpdmVuIHBhdGggKi8KKwlhc3NlcnQobWVtY2hyKHBhdGggKyAzICogbiwgJy8nLCBwYXRoX2xlbiAtICgzICogbikpID09IE5VTEwpOworCisJLyogRmluYWxseSBhZGQgZ2l2ZW4gZW50cnkgdG8gdGhlIGN1cnJlbnQgdHJlZSBvYmplY3QgKi8KKwl3cml0ZV90cmVlX2VudHJ5KCZ0d3MtPmJ1ZiwgbW9kZSwgcGF0aCArIDMgKiBuLCBwYXRoX2xlbiAtICgzICogbiksCisJCQkgb2lkLT5oYXNoKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgd3JpdGVfZWFjaF9ub3RlX2RhdGEgeworCXN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICpyb290OworCXN0cnVjdCBub25fbm90ZSAqKm5uX2xpc3Q7CisJc3RydWN0IG5vbl9ub3RlICpubl9wcmV2OworfTsKKworc3RhdGljIGludCB3cml0ZV9lYWNoX25vbl9ub3RlX3VudGlsKGNvbnN0IGNoYXIgKm5vdGVfcGF0aCwKKwkJc3RydWN0IHdyaXRlX2VhY2hfbm90ZV9kYXRhICpkKQoreworCXN0cnVjdCBub25fbm90ZSAqcCA9IGQtPm5uX3ByZXY7CisJc3RydWN0IG5vbl9ub3RlICpuID0gcCA/IHAtPm5leHQgOiAqZC0+bm5fbGlzdDsKKwlpbnQgY21wID0gMCwgcmV0OworCXdoaWxlIChuICYmICghbm90ZV9wYXRoIHx8IChjbXAgPSBzdHJjbXAobi0+cGF0aCwgbm90ZV9wYXRoKSkgPD0gMCkpIHsKKwkJaWYgKG5vdGVfcGF0aCAmJiBjbXAgPT0gMCkKKwkJCTsgLyogZG8gbm90aGluZywgcHJlZmVyIG5vdGUgdG8gbm9uLW5vdGUgKi8KKwkJZWxzZSB7CisJCQlyZXQgPSB3cml0ZV9lYWNoX25vdGVfaGVscGVyKGQtPnJvb3QsIG4tPnBhdGgsIG4tPm1vZGUsCisJCQkJCQkgICAgICZuLT5vaWQpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCXAgPSBuOworCQluID0gbi0+bmV4dDsKKwl9CisJZC0+bm5fcHJldiA9IHA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfZWFjaF9ub3RlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9iamVjdF9vaWQsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5vdGVfb2lkLCBjaGFyICpub3RlX3BhdGgsCisJCXZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHdyaXRlX2VhY2hfbm90ZV9kYXRhICpkID0KKwkJKHN0cnVjdCB3cml0ZV9lYWNoX25vdGVfZGF0YSAqKSBjYl9kYXRhOworCXNpemVfdCBub3RlX3BhdGhfbGVuID0gc3RybGVuKG5vdGVfcGF0aCk7CisJdW5zaWduZWQgaW50IG1vZGUgPSAwMTAwNjQ0OworCisJaWYgKG5vdGVfcGF0aFtub3RlX3BhdGhfbGVuIC0gMV0gPT0gJy8nKSB7CisJCS8qIHN1YnRyZWUgZW50cnkgKi8KKwkJbm90ZV9wYXRoX2xlbi0tOworCQlub3RlX3BhdGhbbm90ZV9wYXRoX2xlbl0gPSAnXDAnOworCQltb2RlID0gMDQwMDAwOworCX0KKwlhc3NlcnQobm90ZV9wYXRoX2xlbiA8PSBHSVRfTUFYX0hFWFNaICsgRkFOT1VUX1BBVEhfU0VQQVJBVE9SUyk7CisKKwkvKiBXZWF2ZSBub24tbm90ZSBlbnRyaWVzIGludG8gbm90ZSBlbnRyaWVzICovCisJcmV0dXJuICB3cml0ZV9lYWNoX25vbl9ub3RlX3VudGlsKG5vdGVfcGF0aCwgZCkgfHwKKwkJd3JpdGVfZWFjaF9ub3RlX2hlbHBlcihkLT5yb290LCBub3RlX3BhdGgsIG1vZGUsIG5vdGVfb2lkKTsKK30KKworc3RydWN0IG5vdGVfZGVsZXRlX2xpc3QgeworCXN0cnVjdCBub3RlX2RlbGV0ZV9saXN0ICpuZXh0OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTE7Cit9OworCitzdGF0aWMgaW50IHBydW5lX25vdGVzX2hlbHBlcihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvYmplY3Rfb2lkLAorCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpub3RlX29pZCwgY2hhciAqbm90ZV9wYXRoLAorCQl2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBub3RlX2RlbGV0ZV9saXN0ICoqbCA9IChzdHJ1Y3Qgbm90ZV9kZWxldGVfbGlzdCAqKikgY2JfZGF0YTsKKwlzdHJ1Y3Qgbm90ZV9kZWxldGVfbGlzdCAqbjsKKworCWlmIChoYXNfb2JqZWN0X2ZpbGUob2JqZWN0X29pZCkpCisJCXJldHVybiAwOyAvKiBub3RoaW5nIHRvIGRvIGZvciB0aGlzIG5vdGUgKi8KKworCS8qIGZhaWxlZCB0byBmaW5kIG9iamVjdCA9PiBwcnVuZSB0aGlzIG5vdGUgKi8KKwluID0gKHN0cnVjdCBub3RlX2RlbGV0ZV9saXN0ICopIHhtYWxsb2Moc2l6ZW9mKCpuKSk7CisJbi0+bmV4dCA9ICpsOworCW4tPnNoYTEgPSBvYmplY3Rfb2lkLT5oYXNoOworCSpsID0gbjsKKwlyZXR1cm4gMDsKK30KKworaW50IGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGUoc3RydWN0IG9iamVjdF9pZCAqY3VyX29pZCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQpCit7CisJY2hhciAqY3VyX21zZyA9IE5VTEwsICpuZXdfbXNnID0gTlVMTCwgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGN1cl9sZW4sIG5ld19sZW4sIGJ1Zl9sZW47CisJZW51bSBvYmplY3RfdHlwZSBjdXJfdHlwZSwgbmV3X3R5cGU7CisJaW50IHJldDsKKworCS8qIHJlYWQgaW4gYm90aCBub3RlIGJsb2Igb2JqZWN0cyAqLworCWlmICghaXNfbnVsbF9vaWQobmV3X29pZCkpCisJCW5ld19tc2cgPSByZWFkX29iamVjdF9maWxlKG5ld19vaWQsICZuZXdfdHlwZSwgJm5ld19sZW4pOworCWlmICghbmV3X21zZyB8fCAhbmV3X2xlbiB8fCBuZXdfdHlwZSAhPSBPQkpfQkxPQikgeworCQlmcmVlKG5ld19tc2cpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFpc19udWxsX29pZChjdXJfb2lkKSkKKwkJY3VyX21zZyA9IHJlYWRfb2JqZWN0X2ZpbGUoY3VyX29pZCwgJmN1cl90eXBlLCAmY3VyX2xlbik7CisJaWYgKCFjdXJfbXNnIHx8ICFjdXJfbGVuIHx8IGN1cl90eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUoY3VyX21zZyk7CisJCWZyZWUobmV3X21zZyk7CisJCW9pZGNweShjdXJfb2lkLCBuZXdfb2lkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogd2Ugd2lsbCBzZXBhcmF0ZSB0aGUgbm90ZXMgYnkgdHdvIG5ld2xpbmVzIGFueXdheSAqLworCWlmIChjdXJfbXNnW2N1cl9sZW4gLSAxXSA9PSAnXG4nKQorCQljdXJfbGVuLS07CisKKwkvKiBjb25jYXRlbmF0ZSBjdXJfbXNnIGFuZCBuZXdfbXNnIGludG8gYnVmICovCisJYnVmX2xlbiA9IGN1cl9sZW4gKyAyICsgbmV3X2xlbjsKKwlidWYgPSAoY2hhciAqKSB4bWFsbG9jKGJ1Zl9sZW4pOworCW1lbWNweShidWYsIGN1cl9tc2csIGN1cl9sZW4pOworCWJ1ZltjdXJfbGVuXSA9ICdcbic7CisJYnVmW2N1cl9sZW4gKyAxXSA9ICdcbic7CisJbWVtY3B5KGJ1ZiArIGN1cl9sZW4gKyAyLCBuZXdfbXNnLCBuZXdfbGVuKTsKKwlmcmVlKGN1cl9tc2cpOworCWZyZWUobmV3X21zZyk7CisKKwkvKiBjcmVhdGUgYSBuZXcgYmxvYiBvYmplY3QgZnJvbSBidWYgKi8KKwlyZXQgPSB3cml0ZV9vYmplY3RfZmlsZShidWYsIGJ1Zl9sZW4sIGJsb2JfdHlwZSwgY3VyX29pZCk7CisJZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjb21iaW5lX25vdGVzX292ZXJ3cml0ZShzdHJ1Y3Qgb2JqZWN0X2lkICpjdXJfb2lkLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQpCit7CisJb2lkY3B5KGN1cl9vaWQsIG5ld19vaWQpOworCXJldHVybiAwOworfQorCitpbnQgY29tYmluZV9ub3Rlc19pZ25vcmUoc3RydWN0IG9iamVjdF9pZCAqY3VyX29pZCwKKwkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkKQoreworCXJldHVybiAwOworfQorCisvKgorICogQWRkIHRoZSBsaW5lcyBmcm9tIHRoZSBuYW1lZCBvYmplY3QgdG8gbGlzdCwgd2l0aCB0cmFpbGluZworICogbmV3bGluZXMgcmVtb3ZlZC4KKyAqLworc3RhdGljIGludCBzdHJpbmdfbGlzdF9hZGRfbm90ZV9saW5lcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWNoYXIgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBsZW47CisJZW51bSBvYmplY3RfdHlwZSB0OworCisJaWYgKGlzX251bGxfb2lkKG9pZCkpCisJCXJldHVybiAwOworCisJLyogcmVhZF9zaGExX2ZpbGUgTlVMLXRlcm1pbmF0ZXMgKi8KKwlkYXRhID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0LCAmbGVuKTsKKwlpZiAodCAhPSBPQkpfQkxPQiB8fCAhZGF0YSB8fCAhbGVuKSB7CisJCWZyZWUoZGF0YSk7CisJCXJldHVybiB0ICE9IE9CSl9CTE9CIHx8ICFkYXRhOworCX0KKworCS8qCisJICogSWYgdGhlIGxhc3QgbGluZSBvZiB0aGUgZmlsZSBpcyBFT0wtdGVybWluYXRlZCwgdGhpcyB3aWxsCisJICogYWRkIGFuIGVtcHR5IHN0cmluZyB0byB0aGUgbGlzdC4gIEJ1dCBpdCB3aWxsIGJlIHJlbW92ZWQKKwkgKiBsYXRlciwgYWxvbmcgd2l0aCBhbnkgZW1wdHkgc3RyaW5ncyB0aGF0IGNhbWUgZnJvbSBlbXB0eQorCSAqIGxpbmVzIHdpdGhpbiB0aGUgZmlsZS4KKwkgKi8KKwlzdHJpbmdfbGlzdF9zcGxpdChsaXN0LCBkYXRhLCAnXG4nLCAtMSk7CisJZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHJpbmdfbGlzdF9qb2luX2xpbmVzX2hlbHBlcihzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwKKwkJCQkJIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiAqYnVmID0gY2JfZGF0YTsKKwlzdHJidWZfYWRkc3RyKGJ1ZiwgaXRlbS0+c3RyaW5nKTsKKwlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNvbWJpbmVfbm90ZXNfY2F0X3NvcnRfdW5pcShzdHJ1Y3Qgb2JqZWN0X2lkICpjdXJfb2lkLAorCQkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQpCit7CisJc3RydWN0IHN0cmluZ19saXN0IHNvcnRfdW5pcV9saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gMTsKKworCS8qIHJlYWQgYm90aCBub3RlIGJsb2Igb2JqZWN0cyBpbnRvIHVuaXF1ZV9saW5lcyAqLworCWlmIChzdHJpbmdfbGlzdF9hZGRfbm90ZV9saW5lcygmc29ydF91bmlxX2xpc3QsIGN1cl9vaWQpKQorCQlnb3RvIG91dDsKKwlpZiAoc3RyaW5nX2xpc3RfYWRkX25vdGVfbGluZXMoJnNvcnRfdW5pcV9saXN0LCBuZXdfb2lkKSkKKwkJZ290byBvdXQ7CisJc3RyaW5nX2xpc3RfcmVtb3ZlX2VtcHR5X2l0ZW1zKCZzb3J0X3VuaXFfbGlzdCwgMCk7CisJc3RyaW5nX2xpc3Rfc29ydCgmc29ydF91bmlxX2xpc3QpOworCXN0cmluZ19saXN0X3JlbW92ZV9kdXBsaWNhdGVzKCZzb3J0X3VuaXFfbGlzdCwgMCk7CisKKwkvKiBjcmVhdGUgYSBuZXcgYmxvYiBvYmplY3QgZnJvbSBzb3J0X3VuaXFfbGlzdCAqLworCWlmIChmb3JfZWFjaF9zdHJpbmdfbGlzdCgmc29ydF91bmlxX2xpc3QsCisJCQkJIHN0cmluZ19saXN0X2pvaW5fbGluZXNfaGVscGVyLCAmYnVmKSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3cml0ZV9vYmplY3RfZmlsZShidWYuYnVmLCBidWYubGVuLCBibG9iX3R5cGUsIGN1cl9vaWQpOworCitvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnNvcnRfdW5pcV9saXN0LCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN0cmluZ19saXN0X2FkZF9vbmVfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICBpbnQgZmxhZywgdm9pZCAqY2IpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpyZWZzID0gY2I7CisJaWYgKCF1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nKHJlZnMsIHJlZm5hbWUpKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQocmVmcywgcmVmbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgbGlzdCBhcmd1bWVudCBtdXN0IGhhdmUgc3RyZHVwX3N0cmluZ3Mgc2V0IG9uIGl0LgorICovCit2b2lkIHN0cmluZ19saXN0X2FkZF9yZWZzX2J5X2dsb2Ioc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpnbG9iKQoreworCWFzc2VydChsaXN0LT5zdHJkdXBfc3RyaW5ncyk7CisJaWYgKGhhc19nbG9iX3NwZWNpYWxzKGdsb2IpKSB7CisJCWZvcl9lYWNoX2dsb2JfcmVmKHN0cmluZ19saXN0X2FkZF9vbmVfcmVmLCBnbG9iLCBsaXN0KTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJaWYgKGdldF9vaWQoZ2xvYiwgJm9pZCkpCisJCQl3YXJuaW5nKCJub3RlcyByZWYgJXMgaXMgaW52YWxpZCIsIGdsb2IpOworCQlpZiAoIXVuc29ydGVkX3N0cmluZ19saXN0X2hhc19zdHJpbmcobGlzdCwgZ2xvYikpCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgZ2xvYik7CisJfQorfQorCit2b2lkIHN0cmluZ19saXN0X2FkZF9yZWZzX2Zyb21fY29sb25fc2VwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCQkJIGNvbnN0IGNoYXIgKmdsb2JzKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBzcGxpdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJY2hhciAqZ2xvYnNfY29weSA9IHhzdHJkdXAoZ2xvYnMpOworCWludCBpOworCisJc3RyaW5nX2xpc3Rfc3BsaXRfaW5fcGxhY2UoJnNwbGl0LCBnbG9ic19jb3B5LCAnOicsIC0xKTsKKwlzdHJpbmdfbGlzdF9yZW1vdmVfZW1wdHlfaXRlbXMoJnNwbGl0LCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBzcGxpdC5ucjsgaSsrKQorCQlzdHJpbmdfbGlzdF9hZGRfcmVmc19ieV9nbG9iKGxpc3QsIHNwbGl0Lml0ZW1zW2ldLnN0cmluZyk7CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3BsaXQsIDApOworCWZyZWUoZ2xvYnNfY29weSk7Cit9CisKK3N0YXRpYyBpbnQgbm90ZXNfZGlzcGxheV9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJaW50ICpsb2FkX3JlZnMgPSBjYjsKKworCWlmICgqbG9hZF9yZWZzICYmICFzdHJjbXAoaywgIm5vdGVzLmRpc3BsYXlyZWYiKSkgeworCQlpZiAoIXYpCisJCQljb25maWdfZXJyb3Jfbm9uYm9vbChrKTsKKwkJc3RyaW5nX2xpc3RfYWRkX3JlZnNfYnlfZ2xvYigmZGlzcGxheV9ub3Rlc19yZWZzLCB2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqZGVmYXVsdF9ub3Rlc19yZWYodm9pZCkKK3sKKwljb25zdCBjaGFyICpub3Rlc19yZWYgPSBOVUxMOworCWlmICghbm90ZXNfcmVmKQorCQlub3Rlc19yZWYgPSBnZXRlbnYoR0lUX05PVEVTX1JFRl9FTlZJUk9OTUVOVCk7CisJaWYgKCFub3Rlc19yZWYpCisJCW5vdGVzX3JlZiA9IG5vdGVzX3JlZl9uYW1lOyAvKiB2YWx1ZSBvZiBjb3JlLm5vdGVzUmVmIGNvbmZpZyAqLworCWlmICghbm90ZXNfcmVmKQorCQlub3Rlc19yZWYgPSBHSVRfTk9URVNfREVGQVVMVF9SRUY7CisJcmV0dXJuIG5vdGVzX3JlZjsKK30KKwordm9pZCBpbml0X25vdGVzKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCBjaGFyICpub3Rlc19yZWYsCisJCWNvbWJpbmVfbm90ZXNfZm4gY29tYmluZV9ub3RlcywgaW50IGZsYWdzKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkLCBvYmplY3Rfb2lkOworCXVuc2lnbmVkIHNob3J0IG1vZGU7CisJc3RydWN0IGxlYWZfbm9kZSByb290X3RyZWU7CisKKwlpZiAoIXQpCisJCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOworCWFzc2VydCghdC0+aW5pdGlhbGl6ZWQpOworCisJaWYgKCFub3Rlc19yZWYpCisJCW5vdGVzX3JlZiA9IGRlZmF1bHRfbm90ZXNfcmVmKCk7CisKKwlpZiAoIWNvbWJpbmVfbm90ZXMpCisJCWNvbWJpbmVfbm90ZXMgPSBjb21iaW5lX25vdGVzX2NvbmNhdGVuYXRlOworCisJdC0+cm9vdCA9IChzdHJ1Y3QgaW50X25vZGUgKikgeGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGludF9ub2RlKSk7CisJdC0+Zmlyc3Rfbm9uX25vdGUgPSBOVUxMOworCXQtPnByZXZfbm9uX25vdGUgPSBOVUxMOworCXQtPnJlZiA9IHhzdHJkdXBfb3JfbnVsbChub3Rlc19yZWYpOworCXQtPnVwZGF0ZV9yZWYgPSAoZmxhZ3MgJiBOT1RFU19JTklUX1dSSVRBQkxFKSA/IHQtPnJlZiA6IE5VTEw7CisJdC0+Y29tYmluZV9ub3RlcyA9IGNvbWJpbmVfbm90ZXM7CisJdC0+aW5pdGlhbGl6ZWQgPSAxOworCXQtPmRpcnR5ID0gMDsKKworCWlmIChmbGFncyAmIE5PVEVTX0lOSVRfRU1QVFkgfHwgIW5vdGVzX3JlZiB8fAorCSAgICBnZXRfb2lkX3RyZWVpc2gobm90ZXNfcmVmLCAmb2JqZWN0X29pZCkpCisJCXJldHVybjsKKwlpZiAoZmxhZ3MgJiBOT1RFU19JTklUX1dSSVRBQkxFICYmIHJlYWRfcmVmKG5vdGVzX3JlZiwgJm9iamVjdF9vaWQpKQorCQlkaWUoIkNhbm5vdCB1c2Ugbm90ZXMgcmVmICVzIiwgbm90ZXNfcmVmKTsKKwlpZiAoZ2V0X3RyZWVfZW50cnkodGhlX3JlcG9zaXRvcnksICZvYmplY3Rfb2lkLCAiIiwgJm9pZCwgJm1vZGUpKQorCQlkaWUoIkZhaWxlZCB0byByZWFkIG5vdGVzIHRyZWUgcmVmZXJlbmNlZCBieSAlcyAoJXMpIiwKKwkJICAgIG5vdGVzX3JlZiwgb2lkX3RvX2hleCgmb2JqZWN0X29pZCkpOworCisJb2lkY2xyKCZyb290X3RyZWUua2V5X29pZCk7CisJb2lkY3B5KCZyb290X3RyZWUudmFsX29pZCwgJm9pZCk7CisJbG9hZF9zdWJ0cmVlKHQsICZyb290X3RyZWUsIHQtPnJvb3QsIDApOworfQorCitzdHJ1Y3Qgbm90ZXNfdHJlZSAqKmxvYWRfbm90ZXNfdHJlZXMoc3RydWN0IHN0cmluZ19saXN0ICpyZWZzLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJaW50IGNvdW50ZXIgPSAwOworCXN0cnVjdCBub3Rlc190cmVlICoqdHJlZXM7CisJQUxMT0NfQVJSQVkodHJlZXMsIHJlZnMtPm5yICsgMSk7CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCByZWZzKSB7CisJCXN0cnVjdCBub3Rlc190cmVlICp0ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG5vdGVzX3RyZWUpKTsKKwkJaW5pdF9ub3Rlcyh0LCBpdGVtLT5zdHJpbmcsIGNvbWJpbmVfbm90ZXNfaWdub3JlLCBmbGFncyk7CisJCXRyZWVzW2NvdW50ZXIrK10gPSB0OworCX0KKwl0cmVlc1tjb3VudGVyXSA9IE5VTEw7CisJcmV0dXJuIHRyZWVzOworfQorCit2b2lkIGluaXRfZGlzcGxheV9ub3RlcyhzdHJ1Y3QgZGlzcGxheV9ub3Rlc19vcHQgKm9wdCkKK3sKKwltZW1zZXQob3B0LCAwLCBzaXplb2YoKm9wdCkpOworCW9wdC0+dXNlX2RlZmF1bHRfbm90ZXMgPSAtMTsKK30KKwordm9pZCBlbmFibGVfZGVmYXVsdF9kaXNwbGF5X25vdGVzKHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCAqb3B0LCBpbnQgKnNob3dfbm90ZXMpCit7CisJb3B0LT51c2VfZGVmYXVsdF9ub3RlcyA9IDE7CisJKnNob3dfbm90ZXMgPSAxOworfQorCit2b2lkIGVuYWJsZV9yZWZfZGlzcGxheV9ub3RlcyhzdHJ1Y3QgZGlzcGxheV9ub3Rlc19vcHQgKm9wdCwgaW50ICpzaG93X25vdGVzLAorCQljb25zdCBjaGFyICpyZWYpIHsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcmVmKTsKKwlleHBhbmRfbm90ZXNfcmVmKCZidWYpOworCXN0cmluZ19saXN0X2FwcGVuZCgmb3B0LT5leHRyYV9ub3Rlc19yZWZzLAorCQkJc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKSk7CisJKnNob3dfbm90ZXMgPSAxOworfQorCit2b2lkIGRpc2FibGVfZGlzcGxheV9ub3RlcyhzdHJ1Y3QgZGlzcGxheV9ub3Rlc19vcHQgKm9wdCwgaW50ICpzaG93X25vdGVzKQoreworCW9wdC0+dXNlX2RlZmF1bHRfbm90ZXMgPSAtMTsKKwkvKiB3ZSBoYXZlIGJlZW4gc3RyZHVwJ2luZyBvdXJzZWx2ZXMsIHNvIHRyaWNrCisJICogc3RyaW5nX2xpc3QgaW50byBmcmVlKClpbmcgc3RyaW5ncyAqLworCW9wdC0+ZXh0cmFfbm90ZXNfcmVmcy5zdHJkdXBfc3RyaW5ncyA9IDE7CisJc3RyaW5nX2xpc3RfY2xlYXIoJm9wdC0+ZXh0cmFfbm90ZXNfcmVmcywgMCk7CisJb3B0LT5leHRyYV9ub3Rlc19yZWZzLnN0cmR1cF9zdHJpbmdzID0gMDsKKwkqc2hvd19ub3RlcyA9IDA7Cit9CisKK3ZvaWQgbG9hZF9kaXNwbGF5X25vdGVzKHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCAqb3B0KQoreworCWNoYXIgKmRpc3BsYXlfcmVmX2VudjsKKwlpbnQgbG9hZF9jb25maWdfcmVmcyA9IDA7CisJZGlzcGxheV9ub3Rlc19yZWZzLnN0cmR1cF9zdHJpbmdzID0gMTsKKworCWFzc2VydCghZGlzcGxheV9ub3Rlc190cmVlcyk7CisKKwlpZiAoIW9wdCB8fCBvcHQtPnVzZV9kZWZhdWx0X25vdGVzID4gMCB8fAorCSAgICAob3B0LT51c2VfZGVmYXVsdF9ub3RlcyA9PSAtMSAmJiAhb3B0LT5leHRyYV9ub3Rlc19yZWZzLm5yKSkgeworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmRpc3BsYXlfbm90ZXNfcmVmcywgZGVmYXVsdF9ub3Rlc19yZWYoKSk7CisJCWRpc3BsYXlfcmVmX2VudiA9IGdldGVudihHSVRfTk9URVNfRElTUExBWV9SRUZfRU5WSVJPTk1FTlQpOworCQlpZiAoZGlzcGxheV9yZWZfZW52KSB7CisJCQlzdHJpbmdfbGlzdF9hZGRfcmVmc19mcm9tX2NvbG9uX3NlcCgmZGlzcGxheV9ub3Rlc19yZWZzLAorCQkJCQkJCSAgICBkaXNwbGF5X3JlZl9lbnYpOworCQkJbG9hZF9jb25maWdfcmVmcyA9IDA7CisJCX0gZWxzZQorCQkJbG9hZF9jb25maWdfcmVmcyA9IDE7CisJfQorCisJZ2l0X2NvbmZpZyhub3Rlc19kaXNwbGF5X2NvbmZpZywgJmxvYWRfY29uZmlnX3JlZnMpOworCisJaWYgKG9wdCkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmb3B0LT5leHRyYV9ub3Rlc19yZWZzKQorCQkJc3RyaW5nX2xpc3RfYWRkX3JlZnNfYnlfZ2xvYigmZGlzcGxheV9ub3Rlc19yZWZzLAorCQkJCQkJICAgICBpdGVtLT5zdHJpbmcpOworCX0KKworCWRpc3BsYXlfbm90ZXNfdHJlZXMgPSBsb2FkX25vdGVzX3RyZWVzKCZkaXNwbGF5X25vdGVzX3JlZnMsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZkaXNwbGF5X25vdGVzX3JlZnMsIDApOworfQorCitpbnQgYWRkX25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9iamVjdF9vaWQsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5vdGVfb2lkLCBjb21iaW5lX25vdGVzX2ZuIGNvbWJpbmVfbm90ZXMpCit7CisJc3RydWN0IGxlYWZfbm9kZSAqbDsKKworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJYXNzZXJ0KHQtPmluaXRpYWxpemVkKTsKKwl0LT5kaXJ0eSA9IDE7CisJaWYgKCFjb21iaW5lX25vdGVzKQorCQljb21iaW5lX25vdGVzID0gdC0+Y29tYmluZV9ub3RlczsKKwlsID0gKHN0cnVjdCBsZWFmX25vZGUgKikgeG1hbGxvYyhzaXplb2Yoc3RydWN0IGxlYWZfbm9kZSkpOworCW9pZGNweSgmbC0+a2V5X29pZCwgb2JqZWN0X29pZCk7CisJb2lkY3B5KCZsLT52YWxfb2lkLCBub3RlX29pZCk7CisJcmV0dXJuIG5vdGVfdHJlZV9pbnNlcnQodCwgdC0+cm9vdCwgMCwgbCwgUFRSX1RZUEVfTk9URSwgY29tYmluZV9ub3Rlcyk7Cit9CisKK2ludCByZW1vdmVfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0X3NoYTEpCit7CisJc3RydWN0IGxlYWZfbm9kZSBsOworCisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlhc3NlcnQodC0+aW5pdGlhbGl6ZWQpOworCWhhc2hjcHkobC5rZXlfb2lkLmhhc2gsIG9iamVjdF9zaGExKTsKKwlvaWRjbHIoJmwudmFsX29pZCk7CisJbm90ZV90cmVlX3JlbW92ZSh0LCB0LT5yb290LCAwLCAmbCk7CisJaWYgKGlzX251bGxfb2lkKCZsLnZhbF9vaWQpKSAvKiBubyBub3RlIHdhcyByZW1vdmVkICovCisJCXJldHVybiAxOworCXQtPmRpcnR5ID0gMTsKKwlyZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZ2V0X25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgbGVhZl9ub2RlICpmb3VuZDsKKworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJYXNzZXJ0KHQtPmluaXRpYWxpemVkKTsKKwlmb3VuZCA9IG5vdGVfdHJlZV9maW5kKHQsIHQtPnJvb3QsIDAsIG9pZC0+aGFzaCk7CisJcmV0dXJuIGZvdW5kID8gJmZvdW5kLT52YWxfb2lkIDogTlVMTDsKK30KKworaW50IGZvcl9lYWNoX25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGludCBmbGFncywgZWFjaF9ub3RlX2ZuIGZuLAorCQl2b2lkICpjYl9kYXRhKQoreworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJYXNzZXJ0KHQtPmluaXRpYWxpemVkKTsKKwlyZXR1cm4gZm9yX2VhY2hfbm90ZV9oZWxwZXIodCwgdC0+cm9vdCwgMCwgMCwgZmxhZ3MsIGZuLCBjYl9kYXRhKTsKK30KKworaW50IHdyaXRlX25vdGVzX3RyZWUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIHN0cnVjdCBvYmplY3RfaWQgKnJlc3VsdCkKK3sKKwlzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjayByb290OworCXN0cnVjdCB3cml0ZV9lYWNoX25vdGVfZGF0YSBjYl9kYXRhOworCWludCByZXQ7CisJaW50IGZsYWdzOworCisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlhc3NlcnQodC0+aW5pdGlhbGl6ZWQpOworCisJLyogUHJlcGFyZSBmb3IgdHJhdmVyc2FsIG9mIGN1cnJlbnQgbm90ZXMgdHJlZSAqLworCXJvb3QubmV4dCA9IE5VTEw7IC8qIGxhc3QgZm9yd2FyZCBlbnRyeSBpbiBsaXN0IGlzIGdyb3VuZGVkICovCisJc3RyYnVmX2luaXQoJnJvb3QuYnVmLCAyNTYgKiAoMzIgKyB0aGVfaGFzaF9hbGdvLT5oZXhzeikpOyAvKiBhc3N1bWUgMjU2IGVudHJpZXMgKi8KKwlyb290LnBhdGhbMF0gPSByb290LnBhdGhbMV0gPSAnXDAnOworCWNiX2RhdGEucm9vdCA9ICZyb290OworCWNiX2RhdGEubm5fbGlzdCA9ICYodC0+Zmlyc3Rfbm9uX25vdGUpOworCWNiX2RhdGEubm5fcHJldiA9IE5VTEw7CisKKwkvKiBXcml0ZSB0cmVlIG9iamVjdHMgcmVwcmVzZW50aW5nIGN1cnJlbnQgbm90ZXMgdHJlZSAqLworCWZsYWdzID0gRk9SX0VBQ0hfTk9URV9ET05UX1VOUEFDS19TVUJUUkVFUyB8CisJCUZPUl9FQUNIX05PVEVfWUlFTERfU1VCVFJFRVM7CisJcmV0ID0gZm9yX2VhY2hfbm90ZSh0LCBmbGFncywgd3JpdGVfZWFjaF9ub3RlLCAmY2JfZGF0YSkgfHwKKwkgICAgICB3cml0ZV9lYWNoX25vbl9ub3RlX3VudGlsKE5VTEwsICZjYl9kYXRhKSB8fAorCSAgICAgIHRyZWVfd3JpdGVfc3RhY2tfZmluaXNoX3N1YnRyZWUoJnJvb3QpIHx8CisJICAgICAgd3JpdGVfb2JqZWN0X2ZpbGUocm9vdC5idWYuYnVmLCByb290LmJ1Zi5sZW4sIHRyZWVfdHlwZSwgcmVzdWx0KTsKKwlzdHJidWZfcmVsZWFzZSgmcm9vdC5idWYpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcHJ1bmVfbm90ZXMoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgbm90ZV9kZWxldGVfbGlzdCAqbCA9IE5VTEw7CisKKwlpZiAoIXQpCisJCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOworCWFzc2VydCh0LT5pbml0aWFsaXplZCk7CisKKwlmb3JfZWFjaF9ub3RlKHQsIDAsIHBydW5lX25vdGVzX2hlbHBlciwgJmwpOworCisJd2hpbGUgKGwpIHsKKwkJaWYgKGZsYWdzICYgTk9URVNfUFJVTkVfVkVSQk9TRSkKKwkJCXByaW50ZigiJXNcbiIsIGhhc2hfdG9faGV4KGwtPnNoYTEpKTsKKwkJaWYgKCEoZmxhZ3MgJiBOT1RFU19QUlVORV9EUllSVU4pKQorCQkJcmVtb3ZlX25vdGUodCwgbC0+c2hhMSk7CisJCWwgPSBsLT5uZXh0OworCX0KK30KKwordm9pZCBmcmVlX25vdGVzKHN0cnVjdCBub3Rlc190cmVlICp0KQoreworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJaWYgKHQtPnJvb3QpCisJCW5vdGVfdHJlZV9mcmVlKHQtPnJvb3QpOworCWZyZWUodC0+cm9vdCk7CisJd2hpbGUgKHQtPmZpcnN0X25vbl9ub3RlKSB7CisJCXQtPnByZXZfbm9uX25vdGUgPSB0LT5maXJzdF9ub25fbm90ZS0+bmV4dDsKKwkJZnJlZSh0LT5maXJzdF9ub25fbm90ZS0+cGF0aCk7CisJCWZyZWUodC0+Zmlyc3Rfbm9uX25vdGUpOworCQl0LT5maXJzdF9ub25fbm90ZSA9IHQtPnByZXZfbm9uX25vdGU7CisJfQorCWZyZWUodC0+cmVmKTsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKHN0cnVjdCBub3Rlc190cmVlKSk7Cit9CisKKy8qCisgKiBGaWxsIHRoZSBnaXZlbiBzdHJidWYgd2l0aCB0aGUgbm90ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBvYmplY3QuCisgKgorICogSWYgdGhlIGdpdmVuIG5vdGVzX3RyZWUgc3RydWN0dXJlIGlzIG5vdCBpbml0aWFsaXplZCwgaXQgd2lsbCBiZSBhdXRvLQorICogaW5pdGlhbGl6ZWQgdG8gdGhlIGRlZmF1bHQgdmFsdWUgKHNlZSBkb2N1bWVudGF0aW9uIGZvciBpbml0X25vdGVzKCkgYWJvdmUpLgorICogSWYgdGhlIGdpdmVuIG5vdGVzX3RyZWUgaXMgTlVMTCwgdGhlIGludGVybmFsL2RlZmF1bHQgbm90ZXNfdHJlZSB3aWxsIGJlCisgKiB1c2VkIGluc3RlYWQuCisgKgorICogKHJhdyAhPSAwKSBnaXZlcyB0aGUgJU4gdXNlcmZvcm1hdDsgb3RoZXJ3aXNlLCB0aGUgbm90ZSBtZXNzYWdlIGlzIGdpdmVuCisgKiBmb3IgaHVtYW4gY29uc3VtcHRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGZvcm1hdF9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvYmplY3Rfb2lkLAorCQkJc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm91dHB1dF9lbmNvZGluZywgaW50IHJhdykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciB1dGY4W10gPSAidXRmLTgiOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwljaGFyICptc2csICptc2dfcDsKKwl1bnNpZ25lZCBsb25nIGxpbmVsZW4sIG1zZ2xlbjsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwlpZiAoIXQpCisJCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOworCWlmICghdC0+aW5pdGlhbGl6ZWQpCisJCWluaXRfbm90ZXModCwgTlVMTCwgTlVMTCwgMCk7CisKKwlvaWQgPSBnZXRfbm90ZSh0LCBvYmplY3Rfb2lkKTsKKwlpZiAoIW9pZCkKKwkJcmV0dXJuOworCisJaWYgKCEobXNnID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCAmbXNnbGVuKSkgfHwgdHlwZSAhPSBPQkpfQkxPQikgeworCQlmcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAob3V0cHV0X2VuY29kaW5nICYmICpvdXRwdXRfZW5jb2RpbmcgJiYKKwkgICAgIWlzX2VuY29kaW5nX3V0Zjgob3V0cHV0X2VuY29kaW5nKSkgeworCQljaGFyICpyZWVuY29kZWQgPSByZWVuY29kZV9zdHJpbmcobXNnLCBvdXRwdXRfZW5jb2RpbmcsIHV0ZjgpOworCQlpZiAocmVlbmNvZGVkKSB7CisJCQlmcmVlKG1zZyk7CisJCQltc2cgPSByZWVuY29kZWQ7CisJCQltc2dsZW4gPSBzdHJsZW4obXNnKTsKKwkJfQorCX0KKworCS8qIHdlIHdpbGwgZW5kIHRoZSBhbm5vdGF0aW9uIGJ5IGEgbmV3bGluZSBhbnl3YXkgKi8KKwlpZiAobXNnbGVuICYmIG1zZ1ttc2dsZW4gLSAxXSA9PSAnXG4nKQorCQltc2dsZW4tLTsKKworCWlmICghcmF3KSB7CisJCWNvbnN0IGNoYXIgKnJlZiA9IHQtPnJlZjsKKwkJaWYgKCFyZWYgfHwgIXN0cmNtcChyZWYsIEdJVF9OT1RFU19ERUZBVUxUX1JFRikpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcbk5vdGVzOlxuIik7CisJCX0gZWxzZSB7CisJCQlza2lwX3ByZWZpeChyZWYsICJyZWZzLyIsICZyZWYpOworCQkJc2tpcF9wcmVmaXgocmVmLCAibm90ZXMvIiwgJnJlZik7CisJCQlzdHJidWZfYWRkZihzYiwgIlxuTm90ZXMgKCVzKTpcbiIsIHJlZik7CisJCX0KKwl9CisKKwlmb3IgKG1zZ19wID0gbXNnOyBtc2dfcCA8IG1zZyArIG1zZ2xlbjsgbXNnX3AgKz0gbGluZWxlbiArIDEpIHsKKwkJbGluZWxlbiA9IHN0cmNocm51bChtc2dfcCwgJ1xuJykgLSBtc2dfcDsKKworCQlpZiAoIXJhdykKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICIgICAgIik7CisJCXN0cmJ1Zl9hZGQoc2IsIG1zZ19wLCBsaW5lbGVuKTsKKwkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKwl9CisKKwlmcmVlKG1zZyk7Cit9CisKK3ZvaWQgZm9ybWF0X2Rpc3BsYXlfbm90ZXMoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2JqZWN0X29pZCwKKwkJCSAgc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm91dHB1dF9lbmNvZGluZywgaW50IHJhdykKK3sKKwlpbnQgaTsKKwlhc3NlcnQoZGlzcGxheV9ub3Rlc190cmVlcyk7CisJZm9yIChpID0gMDsgZGlzcGxheV9ub3Rlc190cmVlc1tpXTsgaSsrKQorCQlmb3JtYXRfbm90ZShkaXNwbGF5X25vdGVzX3RyZWVzW2ldLCBvYmplY3Rfb2lkLCBzYiwKKwkJCSAgICBvdXRwdXRfZW5jb2RpbmcsIHJhdyk7Cit9CisKK2ludCBjb3B5X25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsCisJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZnJvbV9vYmosIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnRvX29iaiwKKwkgICAgICBpbnQgZm9yY2UsIGNvbWJpbmVfbm90ZXNfZm4gY29tYmluZV9ub3RlcykKK3sKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpub3RlID0gZ2V0X25vdGUodCwgZnJvbV9vYmopOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmV4aXN0aW5nX25vdGUgPSBnZXRfbm90ZSh0LCB0b19vYmopOworCisJaWYgKCFmb3JjZSAmJiBleGlzdGluZ19ub3RlKQorCQlyZXR1cm4gMTsKKworCWlmIChub3RlKQorCQlyZXR1cm4gYWRkX25vdGUodCwgdG9fb2JqLCBub3RlLCBjb21iaW5lX25vdGVzKTsKKwllbHNlIGlmIChleGlzdGluZ19ub3RlKQorCQlyZXR1cm4gYWRkX25vdGUodCwgdG9fb2JqLCAmbnVsbF9vaWQsIGNvbWJpbmVfbm90ZXMpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZXhwYW5kX25vdGVzX3JlZihzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpZiAoc3RhcnRzX3dpdGgoc2ItPmJ1ZiwgInJlZnMvbm90ZXMvIikpCisJCXJldHVybjsgLyogd2UncmUgaGFwcHkgKi8KKwllbHNlIGlmIChzdGFydHNfd2l0aChzYi0+YnVmLCAibm90ZXMvIikpCisJCXN0cmJ1Zl9pbnNlcnRzdHIoc2IsIDAsICJyZWZzLyIpOworCWVsc2UKKwkJc3RyYnVmX2luc2VydHN0cihzYiwgMCwgInJlZnMvbm90ZXMvIik7Cit9CisKK3ZvaWQgZXhwYW5kX2xvb3NlX25vdGVzX3JlZihzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9iamVjdDsKKworCWlmIChnZXRfb2lkKHNiLT5idWYsICZvYmplY3QpKSB7CisJCS8qIGZhbGxiYWNrIHRvIGV4cGFuZF9ub3Rlc19yZWYgKi8KKwkJZXhwYW5kX25vdGVzX3JlZihzYik7CisJfQorfQpkaWZmIC0tZ2l0IGEvbm90ZXMuaCBiL25vdGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE2ODJjMwotLS0gL2Rldi9udWxsCisrKyBiL25vdGVzLmgKQEAgLTAsMCArMSwzMzggQEAKKyNpZm5kZWYgTk9URVNfSAorI2RlZmluZSBOT1RFU19ICisKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCitzdHJ1Y3Qgb2JqZWN0X2lkOworc3RydWN0IHN0cmJ1ZjsKKworLyoKKyAqIEZ1bmN0aW9uIHR5cGUgZm9yIGNvbWJpbmluZyB0d28gbm90ZXMgYW5ub3RhdGluZyB0aGUgc2FtZSBvYmplY3QuCisgKgorICogV2hlbiBhZGRpbmcgYSBuZXcgbm90ZSBhbm5vdGF0aW5nIHRoZSBzYW1lIG9iamVjdCBhcyBhbiBleGlzdGluZyBub3RlLCBpdCBpcworICogdXAgdG8gdGhlIGNhbGxlciB0byBkZWNpZGUgaG93IHRvIGNvbWJpbmUgdGhlIHR3byBub3Rlcy4gVGhlIGRlY2lzaW9uIGlzCisgKiBtYWRlIGJ5IHBhc3NpbmcgaW4gYSBmdW5jdGlvbiBvZiB0aGUgZm9sbG93aW5nIGZvcm0uIFRoZSBmdW5jdGlvbiBhY2NlcHRzCisgKiB0d28gb2JqZWN0X2lkcyAtLSBvZiB0aGUgZXhpc3Rpbmcgbm90ZSBhbmQgdGhlIG5ldyBub3RlLCByZXNwZWN0aXZlbHkuIFRoZQorICogZnVuY3Rpb24gdGhlbiBjb21iaW5lcyB0aGUgbm90ZXMgaW4gd2hhdGV2ZXIgd2F5IGl0IHNlZXMgZml0LCBhbmQgd3JpdGVzIHRoZQorICogcmVzdWx0aW5nIG9pZCBpbnRvIHRoZSBmaXJzdCBhcmd1bWVudCAoY3VyX29pZCkuIEEgbm9uLXplcm8gcmV0dXJuCisgKiB2YWx1ZSBpbmRpY2F0ZXMgZmFpbHVyZS4KKyAqCisgKiBUaGUgdHdvIGdpdmVuIG9iamVjdF9pZHMgc2hhbGwgYm90aCBiZSBub24tTlVMTCBhbmQgZGlmZmVyZW50IGZyb20gZWFjaAorICogb3RoZXIuIEVpdGhlciBvZiB0aGVtIChidXQgbm90IGJvdGgpIG1heSBiZSA9PSBudWxsX29pZCwgd2hpY2ggaW5kaWNhdGVzIGFuCisgKiBlbXB0eS9ub24tZXhpc3RlbnQgbm90ZS4gSWYgdGhlIHJlc3VsdGluZyBvaWQgKGN1cl9vaWQpIGlzID09IG51bGxfb2lkLAorICogdGhlIG5vdGUgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIG5vdGVzIHRyZWUuCisgKgorICogVGhlIGRlZmF1bHQgY29tYmluZV9ub3RlcyBmdW5jdGlvbiAoeW91IGdldCB0aGlzIHdoZW4gcGFzc2luZyBOVUxMKSBpcworICogY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZSgpLCB3aGljaCBhcHBlbmRzIHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IG5vdGUgdG8KKyAqIHRoZSBjb250ZW50cyBvZiB0aGUgZXhpc3Rpbmcgbm90ZS4KKyAqLwordHlwZWRlZiBpbnQgKCpjb21iaW5lX25vdGVzX2ZuKShzdHJ1Y3Qgb2JqZWN0X2lkICpjdXJfb2lkLAorCQkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQpOworCisvKiBDb21tb24gbm90ZXMgY29tYmluYXRvcnMgKi8KK2ludCBjb21iaW5lX25vdGVzX2NvbmNhdGVuYXRlKHN0cnVjdCBvYmplY3RfaWQgKmN1cl9vaWQsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkKTsKK2ludCBjb21iaW5lX25vdGVzX292ZXJ3cml0ZShzdHJ1Y3Qgb2JqZWN0X2lkICpjdXJfb2lkLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQpOworaW50IGNvbWJpbmVfbm90ZXNfaWdub3JlKHN0cnVjdCBvYmplY3RfaWQgKmN1cl9vaWQsCisJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCk7CitpbnQgY29tYmluZV9ub3Rlc19jYXRfc29ydF91bmlxKHN0cnVjdCBvYmplY3RfaWQgKmN1cl9vaWQsCisJCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCk7CisKKy8qCisgKiBOb3RlcyB0cmVlIG9iamVjdAorICoKKyAqIEVuY2Fwc3VsYXRlcyB0aGUgaW50ZXJuYWwgbm90ZXMgdHJlZSBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIGEgbm90ZXMgcmVmLgorICogV2hlbmV2ZXIgYSBzdHJ1Y3Qgbm90ZXNfdHJlZSBwb2ludGVyIGlzIHJlcXVpcmVkIGJlbG93LCB5b3UgbWF5IHBhc3MgTlVMTCBpbgorICogb3JkZXIgdG8gdXNlIHRoZSBkZWZhdWx0L2ludGVybmFsIG5vdGVzIHRyZWUuIEUuZy4geW91IG9ubHkgbmVlZCB0byBwYXNzIGEKKyAqIG5vbi1OVUxMIHZhbHVlIGlmIHlvdSBuZWVkIHRvIHJlZmVyIHRvIHNldmVyYWwgZGlmZmVyZW50IG5vdGVzIHRyZWVzCisgKiBzaW11bHRhbmVvdXNseS4KKyAqLworZXh0ZXJuIHN0cnVjdCBub3Rlc190cmVlIHsKKwlzdHJ1Y3QgaW50X25vZGUgKnJvb3Q7CisJc3RydWN0IG5vbl9ub3RlICpmaXJzdF9ub25fbm90ZSwgKnByZXZfbm9uX25vdGU7CisJY2hhciAqcmVmOworCWNoYXIgKnVwZGF0ZV9yZWY7CisJY29tYmluZV9ub3Rlc19mbiBjb21iaW5lX25vdGVzOworCWludCBpbml0aWFsaXplZDsKKwlpbnQgZGlydHk7Cit9IGRlZmF1bHRfbm90ZXNfdHJlZTsKKworLyoKKyAqIFJldHVybiB0aGUgZGVmYXVsdCBub3RlcyByZWYuCisgKgorICogVGhlIGRlZmF1bHQgbm90ZXMgcmVmIGlzIHRoZSBub3RlcyByZWYgdGhhdCBpcyB1c2VkIHdoZW4gbm90ZXNfcmVmID09IE5VTEwKKyAqIGlzIHBhc3NlZCB0byBpbml0X25vdGVzKCkuCisgKgorICogVGhpcyB0aGUgZmlyc3Qgb2YgdGhlIGZvbGxvd2luZyB0byBiZSBkZWZpbmVkOgorICogMS4gVGhlICctLXJlZicgb3B0aW9uIHRvICdnaXQgbm90ZXMnLCBpZiBnaXZlbgorICogMi4gVGhlICRHSVRfTk9URVNfUkVGIGVudmlyb25tZW50IHZhcmlhYmxlLCBpZiBzZXQKKyAqIDMuIFRoZSB2YWx1ZSBvZiB0aGUgY29yZS5ub3Rlc1JlZiBjb25maWcgdmFyaWFibGUsIGlmIHNldAorICogNC4gR0lUX05PVEVTX0RFRkFVTFRfUkVGIChpLmUuICJyZWZzL25vdGVzL2NvbW1pdHMiKQorICovCitjb25zdCBjaGFyICpkZWZhdWx0X25vdGVzX3JlZih2b2lkKTsKKworLyoKKyAqIEZsYWdzIGNvbnRyb2xsaW5nIGJlaGF2aW91ciBvZiBub3RlcyB0cmVlIGluaXRpYWxpemF0aW9uCisgKgorICogRGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gaW5pdGlhbGl6ZSB0aGUgbm90ZXMgdHJlZSBmcm9tIHRoZSB0cmVlIG9iamVjdAorICogc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiAob3IgZGVmYXVsdCkgbm90ZXMgcmVmLgorICovCisjZGVmaW5lIE5PVEVTX0lOSVRfRU1QVFkgMQorCisvKgorICogQnkgZGVmYXVsdCwgdGhlIG5vdGVzIHRyZWUgaXMgb25seSByZWFkYWJsZSwgYW5kIHRoZSBub3RlcyByZWYgY2FuIGJlCisgKiBhbnkgdHJlZWlzaC4gVGhlIG5vdGVzIHRyZWUgY2FuIGhvd2V2ZXIgYmUgbWFkZSB3cml0YWJsZSB3aXRoIHRoaXMgZmxhZywKKyAqIGluIHdoaWNoIGNhc2Ugb25seSBzdHJpY3QgcmVmIG5hbWVzIGNhbiBiZSB1c2VkLgorICovCisjZGVmaW5lIE5PVEVTX0lOSVRfV1JJVEFCTEUgMgorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgZ2l2ZW4gbm90ZXNfdHJlZSB3aXRoIHRoZSBub3RlcyB0cmVlIHN0cnVjdHVyZSBhdCB0aGUgZ2l2ZW4KKyAqIHJlZi4gSWYgZ2l2ZW4gcmVmIGlzIE5VTEwsIHRoZSB2YWx1ZSBvZiB0aGUgJEdJVF9OT1RFU19SRUYgZW52aXJvbm1lbnQKKyAqIHZhcmlhYmxlIGlzIHVzZWQsIGFuZCBpZiB0aGF0IGlzIG1pc3NpbmcsIHRoZSBkZWZhdWx0IG5vdGVzIHJlZiBpcyB1c2VkCisgKiAoInJlZnMvbm90ZXMvY29tbWl0cyIpLgorICoKKyAqIElmIHlvdSBuZWVkIHRvIHJlLWluaXRpYWxpemUgYSBub3Rlc190cmVlIHN0cnVjdHVyZSAoZS5nLiB3aGVuIHN3aXRjaGluZyBmcm9tCisgKiBvbmUgbm90ZXMgcmVmIHRvIGFub3RoZXIpLCB5b3UgbXVzdCBmaXJzdCBkZS1pbml0aWFsaXplIHRoZSBub3Rlc190cmVlCisgKiBzdHJ1Y3R1cmUgYnkgY2FsbGluZyBmcmVlX25vdGVzKHN0cnVjdCBub3Rlc190cmVlICopLgorICoKKyAqIElmIHlvdSBwYXNzIHQgPT0gTlVMTCwgdGhlIGRlZmF1bHQgaW50ZXJuYWwgbm90ZXNfdHJlZSB3aWxsIGJlIGluaXRpYWxpemVkLgorICoKKyAqIFRoZSBjb21iaW5lX25vdGVzIGZ1bmN0aW9uIHRoYXQgaXMgcGFzc2VkIGJlY29tZXMgdGhlIGRlZmF1bHQgY29tYmluZV9ub3RlcworICogZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBub3Rlc190cmVlLiBJZiBOVUxMIGlzIHBhc3NlZCwgdGhlIGRlZmF1bHQKKyAqIGNvbWJpbmVfbm90ZXMgZnVuY3Rpb24gaXMgY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZSgpLgorICoKKyAqIFByZWNvbmRpdGlvbjogVGhlIG5vdGVzX3RyZWUgc3RydWN0dXJlIGlzIHplcm9lZCAodGhpcyBjYW4gYmUgYWNoaWV2ZWQgd2l0aAorICogbWVtc2V0KHQsIDAsIHNpemVvZihzdHJ1Y3Qgbm90ZXNfdHJlZSkpKQorICovCit2b2lkIGluaXRfbm90ZXMoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGNvbnN0IGNoYXIgKm5vdGVzX3JlZiwKKwkJY29tYmluZV9ub3Rlc19mbiBjb21iaW5lX25vdGVzLCBpbnQgZmxhZ3MpOworCisvKgorICogQWRkIHRoZSBnaXZlbiBub3RlIG9iamVjdCB0byB0aGUgZ2l2ZW4gbm90ZXNfdHJlZSBzdHJ1Y3R1cmUKKyAqCisgKiBJZiB0aGVyZSBhbHJlYWR5IGV4aXN0cyBhIG5vdGUgZm9yIHRoZSBnaXZlbiBvYmplY3Rfc2hhMSwgdGhlIGdpdmVuCisgKiBjb21iaW5lX25vdGVzIGZ1bmN0aW9uIGlzIGludm9rZWQgdG8gYnJlYWsgdGhlIHRpZS4gSWYgbm90IGdpdmVuIChpLmUuCisgKiBjb21iaW5lX25vdGVzID09IE5VTEwpLCB0aGUgZGVmYXVsdCBjb21iaW5lX25vdGVzIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4KKyAqIG5vdGVzX3RyZWUgaXMgdXNlZC4KKyAqCisgKiBQYXNzaW5nIG5vdGVfc2hhMSA9PSBudWxsX3NoYTEgaW5kaWNhdGVzIHRoZSBhZGRpdGlvbiBvZiBhbgorICogZW1wdHkvbm9uLWV4aXN0ZW50IG5vdGUuIFRoaXMgaXMgYSAocG90ZW50aWFsbHkgZXhwZW5zaXZlKSBuby1vcCB1bmxlc3MKKyAqIHRoZXJlIGFscmVhZHkgZXhpc3RzIGEgbm90ZSBmb3IgdGhlIGdpdmVuIG9iamVjdF9zaGExLCBBTkQgY29tYmluaW5nIHRoYXQKKyAqIG5vdGUgd2l0aCB0aGUgZW1wdHkgbm90ZSAodXNpbmcgdGhlIGdpdmVuIGNvbWJpbmVfbm90ZXMgZnVuY3Rpb24pIHJlc3VsdHMKKyAqIGluIGEgbmV3L2NoYW5nZWQgbm90ZS4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gbWVhbnMgY29tYmluZV9ub3RlcyBmYWlsZWQuCisgKgorICogSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBtYWRlIGJ5IGFkZF9ub3RlKCkgdG8gdGhlIGdpdmVuIG5vdGVzX3RyZWUgc3RydWN0dXJlCisgKiBhcmUgbm90IHBlcnNpc3RlbnQgdW50aWwgYSBzdWJzZXF1ZW50IGNhbGwgdG8gd3JpdGVfbm90ZXNfdHJlZSgpIHJldHVybnMKKyAqIHplcm8uCisgKi8KK2ludCBhZGRfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2JqZWN0X29pZCwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbm90ZV9vaWQsIGNvbWJpbmVfbm90ZXNfZm4gY29tYmluZV9ub3Rlcyk7CisKKy8qCisgKiBSZW1vdmUgdGhlIGdpdmVuIG5vdGUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIG5vdGVzX3RyZWUgc3RydWN0dXJlCisgKgorICogSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBtYWRlIGJ5IHJlbW92ZV9ub3RlKCkgdG8gdGhlIGdpdmVuIG5vdGVzX3RyZWUKKyAqIHN0cnVjdHVyZSBhcmUgbm90IHBlcnNpc3RlbnQgdW50aWwgYSBzdWJzZXF1ZW50IGNhbGwgdG8gd3JpdGVfbm90ZXNfdHJlZSgpCisgKiByZXR1cm5zIHplcm8uCisgKgorICogUmV0dXJuIDAgaWYgYSBub3RlIHdhcyByZW1vdmVkOyAxIGlmIHRoZXJlIHdhcyBubyBub3RlIHRvIHJlbW92ZS4KKyAqLworaW50IHJlbW92ZV9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpvYmplY3Rfc2hhMSk7CisKKy8qCisgKiBHZXQgdGhlIG5vdGUgb2JqZWN0IFNIQTEgY29udGFpbmluZyB0aGUgbm90ZSBkYXRhIGZvciB0aGUgZ2l2ZW4gb2JqZWN0CisgKgorICogUmV0dXJuIE5VTEwgaWYgdGhlIGdpdmVuIG9iamVjdCBoYXMgbm8gbm90ZXMuCisgKi8KK2NvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmdldF9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LAorCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvYmplY3Rfb2lkKTsKKworLyoKKyAqIENvcHkgYSBub3RlIGZyb20gb25lIG9iamVjdCB0byBhbm90aGVyIGluIHRoZSBnaXZlbiBub3Rlc190cmVlLgorICoKKyAqIFJldHVybnMgMSBpZiB0aGUgdG9fb2JqIGFscmVhZHkgaGFzIGEgbm90ZSBhbmQgJ2ZvcmNlJyBpcyBmYWxzZS4gT3RoZXJ3aXNlLAorICogcmV0dXJucyBub24temVybyBpZiAnZm9yY2UnIGlzIHRydWUsIGJ1dCB0aGUgZ2l2ZW4gY29tYmluZV9ub3RlcyBmdW5jdGlvbgorICogZmFpbGVkIHRvIGNvbWJpbmUgZnJvbV9vYmoncyBub3RlIHdpdGggdG9fb2JqJ3MgZXhpc3Rpbmcgbm90ZS4KKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLgorICoKKyAqIElNUE9SVEFOVDogVGhlIGNoYW5nZXMgbWFkZSBieSBjb3B5X25vdGUoKSB0byB0aGUgZ2l2ZW4gbm90ZXNfdHJlZSBzdHJ1Y3R1cmUKKyAqIGFyZSBub3QgcGVyc2lzdGVudCB1bnRpbCBhIHN1YnNlcXVlbnQgY2FsbCB0byB3cml0ZV9ub3Rlc190cmVlKCkgcmV0dXJucworICogemVyby4KKyAqLworaW50IGNvcHlfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwKKwkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpmcm9tX29iaiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdG9fb2JqLAorCSAgICAgIGludCBmb3JjZSwgY29tYmluZV9ub3Rlc19mbiBjb21iaW5lX25vdGVzKTsKKworLyoKKyAqIEZsYWdzIGNvbnRyb2xsaW5nIGJlaGF2aW91ciBvZiBmb3JfZWFjaF9ub3RlKCkKKyAqCisgKiBEZWZhdWx0IGJlaGF2aW91ciBvZiBmb3JfZWFjaF9ub3RlKCkgaXMgdG8gdHJhdmVyc2UgZXZlcnkgc2luZ2xlIG5vdGUgb2JqZWN0CisgKiBpbiB0aGUgZ2l2ZW4gbm90ZXMgdHJlZSwgdW5wYWNraW5nIHN1YnRyZWUgZW50cmllcyBhbG9uZyB0aGUgd2F5LgorICogVGhlIGZvbGxvd2luZyBmbGFncyBjYW4gYmUgdXNlZCB0byBhbHRlciB0aGUgZGVmYXVsdCBiZWhhdmlvdXI6CisgKgorICogLSBET05UX1VOUEFDS19TVUJUUkVFUyBjYXVzZXMgZm9yX2VhY2hfbm90ZSgpIE5PVCB0byB1bnBhY2sgYW5kIHJlY3Vyc2UgaW50bworICogICBzdWJ0cmVlIGVudHJpZXMgd2hpbGUgdHJhdmVyc2luZyB0aGUgbm90ZXMgdHJlZS4gVGhpcyBjYXVzZXMgbm90ZXMgd2l0aGluCisgKiAgIHRob3NlIHN1YnRyZWVzIE5PVCB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLiBVc2UgdGhpcyBmbGFnIGlmIHlvdQorICogICBkb24ndCB3YW50IHRvIHRyYXZlcnNlIF9hbGxfIG5vdGVzLCBidXQgb25seSB3YW50IHRvIHRyYXZlcnNlIHRoZSBwYXJ0cworICogICBvZiB0aGUgbm90ZXMgdHJlZSB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHVucGFja2VkICh0aGlzIGluY2x1ZGVzIGF0IGxlYXN0CisgKiAgIGFsbCBub3RlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZC9jaGFuZ2VkKS4KKyAqCisgKiAtIFlJRUxEX1NVQlRSRUVTIGNhdXNlcyBhbnkgc3VidHJlZSBlbnRyaWVzIHRoYXQgYXJlIGVuY291bnRlcmVkIHRvIGJlCisgKiAgIHBhc3NlZCB0byB0aGUgY2FsbGJhY2ssIGJlZm9yZSByZWN1cnNpbmcgaW50byB0aGVtLiBTdWJ0cmVlIGVudHJpZXMgYXJlCisgKiAgIG5vdCBub3RlIG9iamVjdHMsIGJ1dCByZXByZXNlbnQgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzIGluIHRoZSBub3RlcworICogICB0cmVlLiBXaGVuIHBhc3NlZCB0byB0aGUgY2FsbGJhY2ssIHN1YnRyZWUgZW50cmllcyB3aWxsIGhhdmUgYSB0cmFpbGluZworICogICBzbGFzaCBpbiB0aGVpciBwYXRoLCB3aGljaCB0aGUgY2FsbGJhY2sgbWF5IHVzZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4KKyAqICAgbm90ZSBlbnRyaWVzIGFuZCBzdWJ0cmVlIGVudHJpZXMuIE5vdGUgdGhhdCBhbHJlYWR5LXVucGFja2VkIHN1YnRyZWUKKyAqICAgZW50cmllcyBhcmUgbm90IHBhcnQgb2YgdGhlIG5vdGVzIHRyZWUsIGFuZCB3aWxsIHRoZXJlZm9yZSBub3QgYmUgeWllbGRlZC4KKyAqICAgSWYgdGhpcyBmbGFnIGlzIHVzZWQgdG9nZXRoZXIgd2l0aCBET05UX1VOUEFDS19TVUJUUkVFUywgZm9yX2VhY2hfbm90ZSgpCisgKiAgIHdpbGwgeWllbGQgdGhlIHN1YnRyZWUgZW50cnksIGJ1dCBub3QgcmVjdXJzZSBpbnRvIGl0LgorICovCisjZGVmaW5lIEZPUl9FQUNIX05PVEVfRE9OVF9VTlBBQ0tfU1VCVFJFRVMgMQorI2RlZmluZSBGT1JfRUFDSF9OT1RFX1lJRUxEX1NVQlRSRUVTIDIKKworLyoKKyAqIEludm9rZSB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG5vdGUgaW4gdGhlIGdpdmVuIG5vdGVzX3RyZWUKKyAqCisgKiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBub256ZXJvLCB0aGUgbm90ZSB3YWxrIGlzIGFib3J0ZWQsIGFuZCB0aGUgcmV0dXJuCisgKiB2YWx1ZSBmcm9tIHRoZSBjYWxsYmFjayBpcyByZXR1cm5lZCBmcm9tIGZvcl9lYWNoX25vdGUoKS4gSGVuY2UsIGEgemVybworICogcmV0dXJuIHZhbHVlIGZyb20gZm9yX2VhY2hfbm90ZSgpIGluZGljYXRlcyB0aGF0IGFsbCBub3RlcyB3ZXJlIHdhbGtlZAorICogc3VjY2Vzc2Z1bGx5LgorICoKKyAqIElNUE9SVEFOVDogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIE5PVCBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgbm90ZXMgdHJlZS4KKyAqIEluIG90aGVyIHdvcmRzLCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjYW4gTk9UIGJlIGludm9rZWQgKG9uIHRoZSBjdXJyZW50CisgKiBub3RlcyB0cmVlKSBmcm9tIHdpdGhpbiB0aGUgY2FsbGJhY2s6CisgKiAtIGFkZF9ub3RlKCkKKyAqIC0gcmVtb3ZlX25vdGUoKQorICogLSBjb3B5X25vdGUoKQorICogLSBmcmVlX25vdGVzKCkKKyAqLwordHlwZWRlZiBpbnQgZWFjaF9ub3RlX2ZuKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9iamVjdF9vaWQsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5vdGVfb2lkLCBjaGFyICpub3RlX3BhdGgsCisJCXZvaWQgKmNiX2RhdGEpOworaW50IGZvcl9lYWNoX25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGludCBmbGFncywgZWFjaF9ub3RlX2ZuIGZuLAorCQl2b2lkICpjYl9kYXRhKTsKKworLyoKKyAqIFdyaXRlIHRoZSBnaXZlbiBub3Rlc190cmVlIHN0cnVjdHVyZSB0byB0aGUgb2JqZWN0IGRhdGFiYXNlCisgKgorICogQ3JlYXRlcyBhIG5ldyB0cmVlIG9iamVjdCBlbmNhcHN1bGF0aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnaXZlbgorICogbm90ZXNfdHJlZSwgYW5kIHN0b3JlcyBpdHMgb2JqZWN0IGlkIGludG8gdGhlICdyZXN1bHQnIGFyZ3VtZW50LgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlLgorICoKKyAqIElNUE9SVEFOVDogQ2hhbmdlcyBtYWRlIHRvIHRoZSBnaXZlbiBub3Rlc190cmVlIGFyZSBub3QgcGVyc2lzdGVudCB1bnRpbAorICogdGhpcyBmdW5jdGlvbiBoYXMgcmV0dXJuZWQgemVyby4gUGxlYXNlIGFsc28gcmVtZW1iZXIgdG8gY3JlYXRlIGEKKyAqIGNvcnJlc3BvbmRpbmcgY29tbWl0IG9iamVjdCwgYW5kIHVwZGF0ZSB0aGUgYXBwcm9wcmlhdGUgbm90ZXMgcmVmLgorICovCitpbnQgd3JpdGVfbm90ZXNfdHJlZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0KTsKKworLyogRmxhZ3MgY29udHJvbGxpbmcgdGhlIG9wZXJhdGlvbiBvZiBwcnVuZSAqLworI2RlZmluZSBOT1RFU19QUlVORV9WRVJCT1NFIDEKKyNkZWZpbmUgTk9URVNfUFJVTkVfRFJZUlVOIDIKKy8qCisgKiBSZW1vdmUgYWxsIG5vdGVzIGFubm90YXRpbmcgbm9uLWV4aXN0aW5nIG9iamVjdHMgZnJvbSB0aGUgZ2l2ZW4gbm90ZXMgdHJlZQorICoKKyAqIEFsbCBub3RlcyBpbiB0aGUgZ2l2ZW4gbm90ZXNfdHJlZSB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggb2JqZWN0cyB0aGF0IG5vCisgKiBsb25nZXIgZXhpc3QgaW4gdGhlIGRhdGFiYXNlLCBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBub3RlcyB0cmVlLgorICoKKyAqIElNUE9SVEFOVDogVGhlIGNoYW5nZXMgbWFkZSBieSBwcnVuZV9ub3RlcygpIHRvIHRoZSBnaXZlbiBub3Rlc190cmVlCisgKiBzdHJ1Y3R1cmUgYXJlIG5vdCBwZXJzaXN0ZW50IHVudGlsIGEgc3Vic2VxdWVudCBjYWxsIHRvIHdyaXRlX25vdGVzX3RyZWUoKQorICogcmV0dXJucyB6ZXJvLgorICovCit2b2lkIHBydW5lX25vdGVzKHN0cnVjdCBub3Rlc190cmVlICp0LCBpbnQgZmxhZ3MpOworCisvKgorICogRnJlZSAoYW5kIGRlLWluaXRpYWxpemUpIHRoZSBnaXZlbiBub3Rlc190cmVlIHN0cnVjdHVyZQorICoKKyAqIElNUE9SVEFOVDogQ2hhbmdlcyBtYWRlIHRvIHRoZSBnaXZlbiBub3Rlc190cmVlIHNpbmNlIHRoZSBsYXN0LCBzdWNjZXNzZnVsCisgKiBjYWxsIHRvIHdyaXRlX25vdGVzX3RyZWUoKSB3aWxsIGJlIGxvc3QuCisgKi8KK3ZvaWQgZnJlZV9ub3RlcyhzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCk7CisKK3N0cnVjdCBzdHJpbmdfbGlzdDsKKworc3RydWN0IGRpc3BsYXlfbm90ZXNfb3B0IHsKKwlpbnQgdXNlX2RlZmF1bHRfbm90ZXM7CisJc3RydWN0IHN0cmluZ19saXN0IGV4dHJhX25vdGVzX3JlZnM7Cit9OworCisvKgorICogSW5pdGlhbGl6ZSBhIGRpc3BsYXlfbm90ZXNfb3B0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICovCit2b2lkIGluaXRfZGlzcGxheV9ub3RlcyhzdHJ1Y3QgZGlzcGxheV9ub3Rlc19vcHQgKm9wdCk7CisKKy8qCisgKiBUaGlzIGZhbWlseSBvZiBmdW5jdGlvbnMgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZGlzcGxheSBvZiBub3Rlcy4gSW4KKyAqIHBhcnRpY3VsYXIsICdlbmFibGVfZGVmYXVsdF9kaXNwbGF5X25vdGVzJyB3aWxsIGRpc3BsYXkgdGhlIGRlZmF1bHQgbm90ZXMsCisgKiAnZW5hYmxlX3JlZl9kaXNwbGF5X25vdGVzJyB3aWxsIGRpc3BsYXkgdGhlIG5vdGVzIHJlZiAncmVmJyBhbmQKKyAqICdkaXNhYmxlX2Rpc3BsYXlfbm90ZXMnIHdpbGwgZGlzYWJsZSBub3RlcywgaW5jbHVkaW5nIHRob3NlIGFkZGVkIGJ5IHByZXZpb3VzCisgKiBpbnZvY2F0aW9ucyBvZiB0aGUgJ2VuYWJsZV8qX2Rpc3BsYXlfbm90ZXMnIGZ1bmN0aW9ucy4KKyAqCisgKiAnc2hvd19ub3RlcycgaXMgYSBwb2ludGVyIHRvIGEgYm9vbGVhbiB3aGljaCB3aWxsIGJlIHNldCB0byAxIGlmIG5vdGVzIGFyZQorICogZGlzcGxheWVkLCBlbHNlIDAuIEl0IG11c3Qgbm90IGJlIE5VTEwuCisgKi8KK3ZvaWQgZW5hYmxlX2RlZmF1bHRfZGlzcGxheV9ub3RlcyhzdHJ1Y3QgZGlzcGxheV9ub3Rlc19vcHQgKm9wdCwgaW50ICpzaG93X25vdGVzKTsKK3ZvaWQgZW5hYmxlX3JlZl9kaXNwbGF5X25vdGVzKHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCAqb3B0LCBpbnQgKnNob3dfbm90ZXMsCisJCWNvbnN0IGNoYXIgKnJlZik7Cit2b2lkIGRpc2FibGVfZGlzcGxheV9ub3RlcyhzdHJ1Y3QgZGlzcGxheV9ub3Rlc19vcHQgKm9wdCwgaW50ICpzaG93X25vdGVzKTsKKworLyoKKyAqIExvYWQgdGhlIG5vdGVzIG1hY2hpbmVyeSBmb3IgZGlzcGxheWluZyBzZXZlcmFsIG5vdGVzIHRyZWVzLgorICoKKyAqIElmICdvcHQnIGlzIG5vdCBOVUxMLCB0aGVuIGl0IHNwZWNpZmllcyBhZGRpdGlvbmFsIHNldHRpbmdzIGZvciB0aGUKKyAqIGRpc3BsYXlpbmc6CisgKgorICogLSBzdXBwcmVzc19kZWZhdWx0X25vdGVzIGluZGljYXRlcyB0aGF0IHRoZSBub3RlcyBmcm9tCisgKiAgIGNvcmUubm90ZXNSZWYgYW5kIG5vdGVzLmRpc3BsYXlSZWYgc2hvdWxkIG5vdCBiZSBsb2FkZWQuCisgKgorICogLSBleHRyYV9ub3Rlc19yZWZzIG1heSBjb250YWluIGEgbGlzdCBvZiBnbG9icyAoaW4gdGhlIHNhbWUgc3R5bGUKKyAqICAgYXMgbm90ZXMuZGlzcGxheVJlZikgd2hlcmUgbm90ZXMgc2hvdWxkIGJlIGxvYWRlZCBmcm9tLgorICovCit2b2lkIGxvYWRfZGlzcGxheV9ub3RlcyhzdHJ1Y3QgZGlzcGxheV9ub3Rlc19vcHQgKm9wdCk7CisKKy8qCisgKiBBcHBlbmQgbm90ZXMgZm9yIHRoZSBnaXZlbiAnb2JqZWN0X3NoYTEnIGZyb20gYWxsIHRyZWVzIHNldCB1cCBieQorICogbG9hZF9kaXNwbGF5X25vdGVzKCkgdG8gJ3NiJy4KKyAqCisgKiBJZiAncmF3JyBpcyBmYWxzZSB0aGUgbm90ZSB3aWxsIGJlIGluZGVudGVkIGJ5IDQgcGxhY2VzIGFuZAorICogYSAnTm90ZXMgKHJlZm5hbWUpOicgaGVhZGVyIGFkZGVkLgorICoKKyAqIFlvdSAqbXVzdCogY2FsbCBsb2FkX2Rpc3BsYXlfbm90ZXMoKSBiZWZvcmUgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAqLwordm9pZCBmb3JtYXRfZGlzcGxheV9ub3Rlcyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvYmplY3Rfb2lkLAorCQkJICBzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nLCBpbnQgcmF3KTsKKworLyoKKyAqIExvYWQgdGhlIG5vdGVzIHRyZWUgZnJvbSBlYWNoIHJlZiBsaXN0ZWQgaW4gJ3JlZnMnLiAgVGhlIG91dHB1dCBpcworICogYW4gYXJyYXkgb2Ygbm90ZXNfdHJlZSosIHRlcm1pbmF0ZWQgYnkgYSBOVUxMLgorICovCitzdHJ1Y3Qgbm90ZXNfdHJlZSAqKmxvYWRfbm90ZXNfdHJlZXMoc3RydWN0IHN0cmluZ19saXN0ICpyZWZzLCBpbnQgZmxhZ3MpOworCisvKgorICogQWRkIGFsbCByZWZzIHRoYXQgbWF0Y2ggJ2dsb2InIHRvIHRoZSAnbGlzdCcuCisgKi8KK3ZvaWQgc3RyaW5nX2xpc3RfYWRkX3JlZnNfYnlfZ2xvYihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKmdsb2IpOworCisvKgorICogQWRkIGFsbCByZWZzIGZyb20gYSBjb2xvbi1zZXBhcmF0ZWQgZ2xvYiBsaXN0ICdnbG9icycgdG8gdGhlIGVuZCBvZgorICogJ2xpc3QnLiAgRW1wdHkgY29tcG9uZW50cyBhcmUgaWdub3JlZC4gIFRoaXMgaGVscGVyIGlzIHVzZWQgdG8KKyAqIHBhcnNlIEdJVF9OT1RFU19ESVNQTEFZX1JFRiBzdHlsZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisgKi8KK3ZvaWQgc3RyaW5nX2xpc3RfYWRkX3JlZnNfZnJvbV9jb2xvbl9zZXAoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJCQkgY29uc3QgY2hhciAqZ2xvYnMpOworCisvKiBFeHBhbmQgaW5wbGFjZSBhIG5vdGUgcmVmIGxpa2UgImZvbyIgb3IgIm5vdGVzL2ZvbyIgaW50byAicmVmcy9ub3Rlcy9mb28iICovCit2b2lkIGV4cGFuZF9ub3Rlc19yZWYoc3RydWN0IHN0cmJ1ZiAqc2IpOworCisvKgorICogU2ltaWxhciB0byBleHBhbmRfbm90ZXNfcmVmLCBidXQgd2lsbCBjaGVjayB3aGV0aGVyIHRoZSByZWYgY2FuIGJlIGxvY2F0ZWQKKyAqIHZpYSBnZXRfc2hhMSBmaXJzdCwgYW5kIG9ubHkgZmFsbHMgYmFjayB0byBleHBhbmRfbm90ZXNfcmVmIGluIHRoZSBjYXNlCisgKiB3aGVyZSBnZXRfc2hhMSBmYWlscy4KKyAqLwordm9pZCBleHBhbmRfbG9vc2Vfbm90ZXNfcmVmKHN0cnVjdCBzdHJidWYgKnNiKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9vYmplY3Qtc3RvcmUuaCBiL29iamVjdC1zdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZTQ5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9vYmplY3Qtc3RvcmUuaApAQCAtMCwwICsxLDQ1MCBAQAorI2lmbmRlZiBPQkpFQ1RfU1RPUkVfSAorI2RlZmluZSBPQkpFQ1RfU1RPUkVfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvaWRtYXAuaCIKKyNpbmNsdWRlICJsaXN0LmgiCisjaW5jbHVkZSAib2lkLWFycmF5LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisKK3N0cnVjdCBvYmplY3RfZGlyZWN0b3J5IHsKKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqbmV4dDsKKworCS8qCisJICogVXNlZCB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiByZWFkZGlyKDMpIGNhbGxzIHdoZW4gd2UgYXJlIE9LCisJICogc2FjcmlmaWNpbmcgYWNjdXJhY3kgZHVlIHRvIHJhY2VzIGZvciBzcGVlZC4gVGhhdCBpbmNsdWRlcworCSAqIG9iamVjdCBleGlzdGVuY2Ugd2l0aCBPQkpFQ1RfSU5GT19RVUlDSywgYXMgd2VsbCBhcworCSAqIG91ciBzZWFyY2ggZm9yIHVuaXF1ZSBhYmJyZXZpYXRlZCBoYXNoZXMuIERvbid0IHVzZSBpdCBmb3IgdGFza3MKKwkgKiByZXF1aXJpbmcgZ3JlYXRlciBhY2N1cmFjeSEKKwkgKgorCSAqIEJlIHN1cmUgdG8gY2FsbCBvZGJfbG9hZF9sb29zZV9jYWNoZSgpIGJlZm9yZSB1c2luZy4KKwkgKi8KKwljaGFyIGxvb3NlX29iamVjdHNfc3ViZGlyX3NlZW5bMjU2XTsKKwlzdHJ1Y3Qgb2lkX2FycmF5IGxvb3NlX29iamVjdHNfY2FjaGVbMjU2XTsKKworCS8qCisJICogUGF0aCB0byB0aGUgYWx0ZXJuYXRpdmUgb2JqZWN0IHN0b3JlLiBJZiB0aGlzIGlzIGEgcmVsYXRpdmUgcGF0aCwKKwkgKiBpdCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKwkgKi8KKwljaGFyICpwYXRoOworfTsKKwordm9pZCBwcmVwYXJlX2FsdF9vZGIoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworY2hhciAqY29tcHV0ZV9hbHRlcm5hdGVfcGF0aChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyYnVmICplcnIpOwordHlwZWRlZiBpbnQgYWx0X29kYl9mbihzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqLCB2b2lkICopOworaW50IGZvcmVhY2hfYWx0X29kYihhbHRfb2RiX2ZuLCB2b2lkKik7Cit0eXBlZGVmIHZvaWQgYWx0ZXJuYXRlX3JlZl9mbihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHZvaWQgKik7Cit2b2lkIGZvcl9lYWNoX2FsdGVybmF0ZV9yZWYoYWx0ZXJuYXRlX3JlZl9mbiwgdm9pZCAqKTsKKworLyoKKyAqIEFkZCB0aGUgZGlyZWN0b3J5IHRvIHRoZSBvbi1kaXNrIGFsdGVybmF0ZXMgZmlsZTsgdGhlIG5ldyBlbnRyeSB3aWxsIGFsc28KKyAqIHRha2UgZWZmZWN0IGluIHRoZSBjdXJyZW50IHByb2Nlc3MuCisgKi8KK3ZvaWQgYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShjb25zdCBjaGFyICpkaXIpOworCisvKgorICogQWRkIHRoZSBkaXJlY3RvcnkgdG8gdGhlIGluLW1lbW9yeSBsaXN0IG9mIGFsdGVybmF0ZXMgKGFsb25nIHdpdGggYW55CisgKiByZWN1cnNpdmUgYWx0ZXJuYXRlcyBpdCBwb2ludHMgdG8pLCBidXQgZG8gbm90IG1vZGlmeSB0aGUgb24tZGlzayBhbHRlcm5hdGVzCisgKiBmaWxlLgorICovCit2b2lkIGFkZF90b19hbHRlcm5hdGVzX21lbW9yeShjb25zdCBjaGFyICpkaXIpOworCisvKgorICogUG9wdWxhdGUgYW5kIHJldHVybiB0aGUgbG9vc2Ugb2JqZWN0IGNhY2hlIGFycmF5IGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgKiBnaXZlbiBvYmplY3QgSUQuCisgKi8KK3N0cnVjdCBvaWRfYXJyYXkgKm9kYl9sb29zZV9jYWNoZShzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiLAorCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyogRW1wdHkgdGhlIGxvb3NlIG9iamVjdCBjYWNoZSBmb3IgdGhlIHNwZWNpZmllZCBvYmplY3QgZGlyZWN0b3J5LiAqLwordm9pZCBvZGJfY2xlYXJfbG9vc2VfY2FjaGUoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYik7CisKK3N0cnVjdCBwYWNrZWRfZ2l0IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBwYWNrbWFwX2VudDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqbmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1ydTsKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndpbmRvd3M7CisJb2ZmX3QgcGFja19zaXplOworCWNvbnN0IHZvaWQgKmluZGV4X2RhdGE7CisJc2l6ZV90IGluZGV4X3NpemU7CisJdWludDMyX3QgbnVtX29iamVjdHM7CisJdWludDMyX3QgbnVtX2JhZF9vYmplY3RzOworCXVuc2lnbmVkIGNoYXIgKmJhZF9vYmplY3Rfc2hhMTsKKwlpbnQgaW5kZXhfdmVyc2lvbjsKKwl0aW1lX3QgbXRpbWU7CisJaW50IHBhY2tfZmQ7CisJaW50IGluZGV4OyAgICAgICAgICAgICAgLyogZm9yIGJ1aWx0aW4vcGFjay1vYmplY3RzLmMgKi8KKwl1bnNpZ25lZCBwYWNrX2xvY2FsOjEsCisJCSBwYWNrX2tlZXA6MSwKKwkJIHBhY2tfa2VlcF9pbl9jb3JlOjEsCisJCSBmcmVzaGVuZWQ6MSwKKwkJIGRvX25vdF9jbG9zZToxLAorCQkgcGFja19wcm9taXNvcjoxLAorCQkgbXVsdGlfcGFja19pbmRleDoxOworCXVuc2lnbmVkIGNoYXIgaGFzaFtHSVRfTUFYX1JBV1NaXTsKKwlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmluZGV4OworCS8qIHNvbWV0aGluZyBsaWtlICIuZ2l0L29iamVjdHMvcGFjay94eHh4eC5wYWNrIiAqLworCWNoYXIgcGFja19uYW1lW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCitzdHJ1Y3QgbXVsdGlfcGFja19pbmRleDsKKworc3RhdGljIGlubGluZSBpbnQgcGFja19tYXBfZW50cnlfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeTIsCisJCQkJICAgICBjb25zdCB2b2lkICprZXlkYXRhKQoreworCWNvbnN0IGNoYXIgKmtleSA9IGtleWRhdGE7CisJY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKnBnMSwgKnBnMjsKKworCXBnMSA9IGNvbnRhaW5lcl9vZihlbnRyeSwgY29uc3Qgc3RydWN0IHBhY2tlZF9naXQsIHBhY2ttYXBfZW50KTsKKwlwZzIgPSBjb250YWluZXJfb2YoZW50cnkyLCBjb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCwgcGFja21hcF9lbnQpOworCisJcmV0dXJuIHN0cmNtcChwZzEtPnBhY2tfbmFtZSwga2V5ID8ga2V5IDogcGcyLT5wYWNrX25hbWUpOworfQorCitzdHJ1Y3QgcmF3X29iamVjdF9zdG9yZSB7CisJLyoKKwkgKiBTZXQgb2YgYWxsIG9iamVjdCBkaXJlY3RvcmllczsgdGhlIG1haW4gZGlyZWN0b3J5IGlzIGZpcnN0IChhbmQKKwkgKiBjYW5ub3QgYmUgTlVMTCBhZnRlciBpbml0aWFsaXphdGlvbikuIFN1YnNlcXVlbnQgZGlyZWN0b3JpZXMgYXJlCisJICogYWx0ZXJuYXRlcy4KKwkgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiOworCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICoqb2RiX3RhaWw7CisJaW50IGxvYWRlZF9hbHRlcm5hdGVzOworCisJLyoKKwkgKiBBIGxpc3Qgb2YgYWx0ZXJuYXRlIG9iamVjdCBkaXJlY3RvcmllcyBsb2FkZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQ7CisJICogdGhpcyBzaG91bGQgbm90IGdlbmVyYWxseSBuZWVkIHRvIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LCBidXQgd2lsbAorCSAqIHBvcHVsYXRlIHRoZSAib2RiIiBsaXN0IHdoZW4gcHJlcGFyZV9hbHRfb2RiKCkgaXMgcnVuLgorCSAqLworCWNoYXIgKmFsdGVybmF0ZV9kYjsKKworCS8qCisJICogT2JqZWN0cyB0aGF0IHNob3VsZCBiZSBzdWJzdGl0dXRlZCBieSBvdGhlciBvYmplY3RzCisJICogKHNlZSBnaXQtcmVwbGFjZSgxKSkuCisJICovCisJc3RydWN0IG9pZG1hcCAqcmVwbGFjZV9tYXA7CisJdW5zaWduZWQgcmVwbGFjZV9tYXBfaW5pdGlhbGl6ZWQgOiAxOworCXB0aHJlYWRfbXV0ZXhfdCByZXBsYWNlX211dGV4OyAvKiBwcm90ZWN0IG9iamVjdCByZXBsYWNlIGZ1bmN0aW9ucyAqLworCisJc3RydWN0IGNvbW1pdF9ncmFwaCAqY29tbWl0X2dyYXBoOworCXVuc2lnbmVkIGNvbW1pdF9ncmFwaF9hdHRlbXB0ZWQgOiAxOyAvKiBpZiBsb2FkaW5nIGhhcyBiZWVuIGF0dGVtcHRlZCAqLworCisJLyoKKwkgKiBwcml2YXRlIGRhdGEKKwkgKgorCSAqIHNob3VsZCBvbmx5IGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGJ5IHBhY2tmaWxlLmMgYW5kIG1pZHguYworCSAqLworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptdWx0aV9wYWNrX2luZGV4OworCisJLyoKKwkgKiBwcml2YXRlIGRhdGEKKwkgKgorCSAqIHNob3VsZCBvbmx5IGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGJ5IHBhY2tmaWxlLmMKKwkgKi8KKworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrZWRfZ2l0OworCS8qIEEgbW9zdC1yZWNlbnRseS11c2VkIG9yZGVyZWQgdmVyc2lvbiBvZiB0aGUgcGFja2VkX2dpdCBsaXN0LiAqLworCXN0cnVjdCBsaXN0X2hlYWQgcGFja2VkX2dpdF9tcnU7CisKKwkvKgorCSAqIEEgbWFwIG9mIHBhY2tmaWxlcyB0byBwYWNrZWRfZ2l0IHN0cnVjdHMgZm9yIHRyYWNraW5nIHdoaWNoCisJICogcGFja3MgaGF2ZSBiZWVuIGxvYWRlZCBhbHJlYWR5LgorCSAqLworCXN0cnVjdCBoYXNobWFwIHBhY2tfbWFwOworCisJLyoKKwkgKiBBIGZhc3QsIHJvdWdoIGNvdW50IG9mIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgcmVwb3NpdG9yeS4KKwkgKiBUaGVzZSB0d28gZmllbGRzIGFyZSBub3QgbWVhbnQgZm9yIGRpcmVjdCBhY2Nlc3MuIFVzZQorCSAqIGFwcHJveGltYXRlX29iamVjdF9jb3VudCgpIGluc3RlYWQuCisJICovCisJdW5zaWduZWQgbG9uZyBhcHByb3hpbWF0ZV9vYmplY3RfY291bnQ7CisJdW5zaWduZWQgYXBwcm94aW1hdGVfb2JqZWN0X2NvdW50X3ZhbGlkIDogMTsKKworCS8qCisJICogV2hldGhlciBwYWNrZWRfZ2l0IGhhcyBhbHJlYWR5IGJlZW4gcG9wdWxhdGVkIHdpdGggdGhpcyByZXBvc2l0b3J5J3MKKwkgKiBwYWNrcy4KKwkgKi8KKwl1bnNpZ25lZCBwYWNrZWRfZ2l0X2luaXRpYWxpemVkIDogMTsKK307CisKK3N0cnVjdCByYXdfb2JqZWN0X3N0b3JlICpyYXdfb2JqZWN0X3N0b3JlX25ldyh2b2lkKTsKK3ZvaWQgcmF3X29iamVjdF9zdG9yZV9jbGVhcihzdHJ1Y3QgcmF3X29iamVjdF9zdG9yZSAqbyk7CisKKy8qCisgKiBQdXQgaW4gYGJ1ZmAgdGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIGxvY2FsIG9iamVjdCBkYXRhYmFzZSB0aGF0CisgKiB3b3VsZCBiZSB1c2VkIHRvIHN0b3JlIGEgbG9vc2Ugb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBvaWQuCisgKi8KK2NvbnN0IGNoYXIgKmxvb3NlX29iamVjdF9wYXRoKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCit2b2lkICptYXBfbG9vc2Vfb2JqZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICB1bnNpZ25lZCBsb25nICpzaXplKTsKKwordm9pZCAqcmVhZF9vYmplY3RfZmlsZV9leHRlbmRlZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJZW51bSBvYmplY3RfdHlwZSAqdHlwZSwKKwkJCQl1bnNpZ25lZCBsb25nICpzaXplLCBpbnQgbG9va3VwX3JlcGxhY2UpOworc3RhdGljIGlubGluZSB2b2lkICpyZXBvX3JlYWRfb2JqZWN0X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQkgIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsCisJCQkJCSAgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwlyZXR1cm4gcmVhZF9vYmplY3RfZmlsZV9leHRlbmRlZChyLCBvaWQsIHR5cGUsIHNpemUsIDEpOworfQorI2lmbmRlZiBOT19USEVfUkVQT1NJVE9SWV9DT01QQVRJQklMSVRZX01BQ1JPUworI2RlZmluZSByZWFkX29iamVjdF9maWxlKG9pZCwgdHlwZSwgc2l6ZSkgcmVwb19yZWFkX29iamVjdF9maWxlKHRoZV9yZXBvc2l0b3J5LCBvaWQsIHR5cGUsIHNpemUpCisjZW5kaWYKKworLyogUmVhZCBhbmQgdW5wYWNrIGFuIG9iamVjdCBmaWxlIGludG8gbWVtb3J5LCB3cml0ZSBtZW1vcnkgdG8gYW4gb2JqZWN0IGZpbGUgKi8KK2ludCBvaWRfb2JqZWN0X2luZm8oc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiwgdW5zaWduZWQgbG9uZyAqKTsKKworaW50IGhhc2hfb2JqZWN0X2ZpbGUoY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKmFsZ28sIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJICAgICB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgY2hhciAqdHlwZSwKKwkJICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCitpbnQgd3JpdGVfb2JqZWN0X2ZpbGUoY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJICAgICAgY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworaW50IGhhc2hfb2JqZWN0X2ZpbGVfbGl0ZXJhbGx5KGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgICAgICAgY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgIHVuc2lnbmVkIGZsYWdzKTsKKworLyoKKyAqIEFkZCBhbiBvYmplY3QgZmlsZSB0byB0aGUgaW4tbWVtb3J5IG9iamVjdCBzdG9yZSwgd2l0aG91dCB3cml0aW5nIGl0CisgKiB0byBkaXNrLgorICoKKyAqIENhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHdyaXRlX29iamVjdF9maWxlIHRvIHJlY29yZCB0aGUKKyAqIG9iamVjdCBpbiBwZXJzaXN0ZW50IHN0b3JhZ2UgYmVmb3JlIHdyaXRpbmcgYW55IG90aGVyIG5ldyBvYmplY3RzCisgKiB0aGF0IHJlZmVyZW5jZSBpdC4KKyAqLworaW50IHByZXRlbmRfb2JqZWN0X2ZpbGUodm9pZCAqLCB1bnNpZ25lZCBsb25nLCBlbnVtIG9iamVjdF90eXBlLAorCQkJc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworaW50IGZvcmNlX29iamVjdF9sb29zZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHRpbWVfdCBtdGltZSk7CisKKy8qCisgKiBPcGVuIHRoZSBsb29zZSBvYmplY3QgYXQgcGF0aCwgY2hlY2sgaXRzIGhhc2gsIGFuZCByZXR1cm4gdGhlIGNvbnRlbnRzLAorICogdHlwZSwgYW5kIHNpemUuIElmIHRoZSBvYmplY3QgaXMgYSBibG9iLCB0aGVuICJjb250ZW50cyIgbWF5IHJldHVybiBOVUxMLAorICogdG8gYWxsb3cgc3RyZWFtaW5nIG9mIGxhcmdlIGJsb2JzLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBlcnJvciAoZGV0YWlscyBtYXkgYmUgd3JpdHRlbiB0byBzdGRlcnIpLgorICovCitpbnQgcmVhZF9sb29zZV9vYmplY3QoY29uc3QgY2hhciAqcGF0aCwKKwkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZXhwZWN0ZWRfb2lkLAorCQkgICAgICBlbnVtIG9iamVjdF90eXBlICp0eXBlLAorCQkgICAgICB1bnNpZ25lZCBsb25nICpzaXplLAorCQkgICAgICB2b2lkICoqY29udGVudHMpOworCisjaWZuZGVmIE5PX1RIRV9SRVBPU0lUT1JZX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjZGVmaW5lIGhhc19zaGExX2ZpbGVfd2l0aF9mbGFncyhzaGExLCBmbGFncykgcmVwb19oYXNfc2hhMV9maWxlX3dpdGhfZmxhZ3ModGhlX3JlcG9zaXRvcnksIHNoYTEsIGZsYWdzKQorI2RlZmluZSBoYXNfc2hhMV9maWxlKHNoYTEpIHJlcG9faGFzX3NoYTFfZmlsZSh0aGVfcmVwb3NpdG9yeSwgc2hhMSkKKyNlbmRpZgorCisvKiBTYW1lIGFzIHRoZSBhYm92ZSwgZXhjZXB0IGZvciBzdHJ1Y3Qgb2JqZWN0X2lkLiAqLworaW50IHJlcG9faGFzX29iamVjdF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworaW50IHJlcG9faGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZsYWdzKTsKKyNpZm5kZWYgTk9fVEhFX1JFUE9TSVRPUllfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNkZWZpbmUgaGFzX29iamVjdF9maWxlKG9pZCkgcmVwb19oYXNfb2JqZWN0X2ZpbGUodGhlX3JlcG9zaXRvcnksIG9pZCkKKyNkZWZpbmUgaGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3Mob2lkLCBmbGFncykgcmVwb19oYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncyh0aGVfcmVwb3NpdG9yeSwgb2lkLCBmbGFncykKKyNlbmRpZgorCisvKgorICogUmV0dXJuIHRydWUgaWZmIGFuIGFsdGVybmF0ZSBvYmplY3QgZGF0YWJhc2UgaGFzIGEgbG9vc2Ugb2JqZWN0CisgKiB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzcGVjdCByZXBsYWNlCisgKiByZWZlcmVuY2VzLgorICovCitpbnQgaGFzX2xvb3NlX29iamVjdF9ub25sb2NhbChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICopOworCit2b2lkIGFzc2VydF9vaWRfdHlwZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGVudW0gb2JqZWN0X3R5cGUgZXhwZWN0KTsKKworLyoKKyAqIEVuYWJsaW5nIHRoZSBvYmplY3QgcmVhZCBsb2NrIGFsbG93cyBtdWx0aXBsZSB0aHJlYWRzIHRvIHNhZmVseSBjYWxsIHRoZQorICogZm9sbG93aW5nIGZ1bmN0aW9ucyBpbiBwYXJhbGxlbDogcmVwb19yZWFkX29iamVjdF9maWxlKCksIHJlYWRfb2JqZWN0X2ZpbGUoKSwKKyAqIHJlYWRfb2JqZWN0X2ZpbGVfZXh0ZW5kZWQoKSwgcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UoKSwgcmVhZF9vYmplY3QoKSwKKyAqIG9pZF9vYmplY3RfaW5mbygpIGFuZCBvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQoKS4KKyAqCisgKiBvYmpfcmVhZF9sb2NrKCkgYW5kIG9ial9yZWFkX3VubG9jaygpIG1heSBhbHNvIGJlIHVzZWQgdG8gcHJvdGVjdCBvdGhlcgorICogc2VjdGlvbiB3aGljaCBjYW5ub3QgZXhlY3V0ZSBpbiBwYXJhbGxlbCB3aXRoIG9iamVjdCByZWFkaW5nLiBTaW5jZSB0aGUgdXNlZAorICogbG9jayBpcyBhIHJlY3Vyc2l2ZSBtdXRleCwgdGhlc2Ugc2VjdGlvbnMgY2FuIGV2ZW4gY29udGFpbiBjYWxscyB0byBvYmplY3QKKyAqIHJlYWRpbmcgZnVuY3Rpb25zLiBIb3dldmVyLCBiZXdhcmUgdGhhdCBpbiB0aGVzZSBjYXNlcyB6bGliIGluZmxhdGlvbiB3b24ndAorICogYmUgcGVyZm9ybWVkIGluIHBhcmFsbGVsLCBsb3NpbmcgcGVyZm9ybWFuY2UuCisgKgorICogVE9ETzogb2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKCkncyBjYWxsIHN0YWNrIGhhcyBhIHJlY3Vyc2l2ZSBiZWhhdmlvci4gSWYKKyAqIGFueSBvZiBpdHMgY2FsbGVlcyBlbmQgdXAgY2FsbGluZyBpdCwgdGhpcyByZWN1cnNpdmUgY2FsbCB3b24ndCBiZW5lZml0IGZyb20KKyAqIHBhcmFsbGVsIGluZmxhdGlvbi4KKyAqLwordm9pZCBlbmFibGVfb2JqX3JlYWRfbG9jayh2b2lkKTsKK3ZvaWQgZGlzYWJsZV9vYmpfcmVhZF9sb2NrKHZvaWQpOworCitleHRlcm4gaW50IG9ial9yZWFkX3VzZV9sb2NrOworZXh0ZXJuIHB0aHJlYWRfbXV0ZXhfdCBvYmpfcmVhZF9tdXRleDsKKworc3RhdGljIGlubGluZSB2b2lkIG9ial9yZWFkX2xvY2sodm9pZCkKK3sKKwlpZihvYmpfcmVhZF91c2VfbG9jaykKKwkJcHRocmVhZF9tdXRleF9sb2NrKCZvYmpfcmVhZF9tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvYmpfcmVhZF91bmxvY2sodm9pZCkKK3sKKwlpZihvYmpfcmVhZF91c2VfbG9jaykKKwkJcHRocmVhZF9tdXRleF91bmxvY2soJm9ial9yZWFkX211dGV4KTsKK30KKworc3RydWN0IG9iamVjdF9pbmZvIHsKKwkvKiBSZXF1ZXN0ICovCisJZW51bSBvYmplY3RfdHlwZSAqdHlwZXA7CisJdW5zaWduZWQgbG9uZyAqc2l6ZXA7CisJb2ZmX3QgKmRpc2tfc2l6ZXA7CisJc3RydWN0IG9iamVjdF9pZCAqZGVsdGFfYmFzZV9vaWQ7CisJc3RydWN0IHN0cmJ1ZiAqdHlwZV9uYW1lOworCXZvaWQgKipjb250ZW50cDsKKworCS8qIFJlc3BvbnNlICovCisJZW51bSB7CisJCU9JX0NBQ0hFRCwKKwkJT0lfTE9PU0UsCisJCU9JX1BBQ0tFRCwKKwkJT0lfREJDQUNIRUQKKwl9IHdoZW5jZTsKKwl1bmlvbiB7CisJCS8qCisJCSAqIHN0cnVjdCB7CisJCSAqIAkuLi4gTm90aGluZyB0byBleHBvc2UgaW4gdGhpcyBjYXNlCisJCSAqIH0gY2FjaGVkOworCQkgKiBzdHJ1Y3QgeworCQkgKiAJLi4uIE5vdGhpbmcgdG8gZXhwb3NlIGluIHRoaXMgY2FzZQorCQkgKiB9IGxvb3NlOworCQkgKi8KKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrOworCQkJb2ZmX3Qgb2Zmc2V0OworCQkJdW5zaWduZWQgaW50IGlzX2RlbHRhOworCQl9IHBhY2tlZDsKKwl9IHU7Cit9OworCisvKgorICogSW5pdGlhbGl6ZXIgZm9yIGEgInN0cnVjdCBvYmplY3RfaW5mbyIgdGhhdCB3YW50cyBubyBpdGVtcy4gWW91IG1heQorICogYWxzbyBtZW1zZXQoKSB0aGUgbWVtb3J5IHRvIGFsbC16ZXJvZXMuCisgKi8KKyNkZWZpbmUgT0JKRUNUX0lORk9fSU5JVCB7TlVMTH0KKworLyogSW52b2tlIGxvb2t1cF9yZXBsYWNlX29iamVjdCgpIG9uIHRoZSBnaXZlbiBoYXNoICovCisjZGVmaW5lIE9CSkVDVF9JTkZPX0xPT0tVUF9SRVBMQUNFIDEKKy8qIEFsbG93IHJlYWRpbmcgZnJvbSBhIGxvb3NlIG9iamVjdCBmaWxlIG9mIHVua25vd24vYm9ndXMgdHlwZSAqLworI2RlZmluZSBPQkpFQ1RfSU5GT19BTExPV19VTktOT1dOX1RZUEUgMgorLyogRG8gbm90IHJldHJ5IHBhY2tlZCBzdG9yYWdlIGFmdGVyIGNoZWNraW5nIHBhY2tlZCBhbmQgbG9vc2Ugc3RvcmFnZSAqLworI2RlZmluZSBPQkpFQ1RfSU5GT19RVUlDSyA4CisvKiBEbyBub3QgY2hlY2sgbG9vc2Ugb2JqZWN0ICovCisjZGVmaW5lIE9CSkVDVF9JTkZPX0lHTk9SRV9MT09TRSAxNgorLyoKKyAqIERvIG5vdCBhdHRlbXB0IHRvIGZldGNoIHRoZSBvYmplY3QgaWYgbWlzc2luZyAoZXZlbiBpZiBmZXRjaF9pc19taXNzaW5nIGlzCisgKiBub256ZXJvKS4KKyAqLworI2RlZmluZSBPQkpFQ1RfSU5GT19TS0lQX0ZFVENIX09CSkVDVCAzMgorLyoKKyAqIFRoaXMgaXMgbWVhbnQgZm9yIGJ1bGsgcHJlZmV0Y2hpbmcgb2YgbWlzc2luZyBibG9icyBpbiBhIHBhcnRpYWwKKyAqIGNsb25lLiBJbXBsaWVzIE9CSkVDVF9JTkZPX1NLSVBfRkVUQ0hfT0JKRUNUIGFuZCBPQkpFQ1RfSU5GT19RVUlDSworICovCisjZGVmaW5lIE9CSkVDVF9JTkZPX0ZPUl9QUkVGRVRDSCAoT0JKRUNUX0lORk9fU0tJUF9GRVRDSF9PQkpFQ1QgfCBPQkpFQ1RfSU5GT19RVUlDSykKKworaW50IG9pZF9vYmplY3RfaW5mb19leHRlbmRlZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqLAorCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2luZm8gKiwgdW5zaWduZWQgZmxhZ3MpOworCisvKgorICogSXRlcmF0ZSBvdmVyIHRoZSBmaWxlcyBpbiB0aGUgbG9vc2Utb2JqZWN0IHBhcnRzIG9mIHRoZSBvYmplY3QKKyAqIGRpcmVjdG9yeSAicGF0aCIsIHRyaWdnZXJpbmcgdGhlIGZvbGxvd2luZyBjYWxsYmFja3M6CisgKgorICogIC0gbG9vc2Vfb2JqZWN0IGlzIGNhbGxlZCBmb3IgZWFjaCBsb29zZSBvYmplY3Qgd2UgZmluZC4KKyAqCisgKiAgLSBsb29zZV9jcnVmdCBpcyBjYWxsZWQgZm9yIGFueSBmaWxlcyB0aGF0IGRvIG5vdCBhcHBlYXIgdG8gYmUKKyAqICAgIGxvb3NlIG9iamVjdHMuIE5vdGUgdGhhdCB3ZSBvbmx5IGxvb2sgaW4gdGhlIGxvb3NlIG9iamVjdAorICogICAgZGlyZWN0b3JpZXMgIm9iamVjdHMvWzAtOWEtZl17Mn0vIiwgc28gd2Ugd2lsbCBub3QgcmVwb3J0CisgKiAgICAib2JqZWN0cy9mb29iYXIiIGFzIGNydWZ0LgorICoKKyAqICAtIGxvb3NlX3N1YmRpciBpcyBjYWxsZWQgZm9yIGVhY2ggdG9wLWxldmVsIGhhc2hlZCBzdWJkaXJlY3RvcnkKKyAqICAgIG9mIHRoZSBvYmplY3QgZGlyZWN0b3J5IChlLmcuLCAiJE9CSkRJUi9mMCIpLiBJdCBpcyBjYWxsZWQKKyAqICAgIGFmdGVyIHRoZSBvYmplY3RzIGluIHRoZSBkaXJlY3RvcnkgYXJlIHByb2Nlc3NlZC4KKyAqCisgKiBBbnkgY2FsbGJhY2sgdGhhdCBpcyBOVUxMIHdpbGwgYmUgaWdub3JlZC4gQ2FsbGJhY2tzIHJldHVybmluZyBub24temVybworICogd2lsbCBlbmQgdGhlIGl0ZXJhdGlvbi4KKyAqCisgKiBJbiB0aGUgImJ1ZiIgdmFyaWFudCwgInBhdGgiIGlzIGEgc3RyYnVmIHdoaWNoIHdpbGwgYWxzbyBiZSB1c2VkIGFzIGEKKyAqIHNjcmF0Y2ggYnVmZmVyLCBidXQgcmVzdG9yZWQgdG8gaXRzIG9yaWdpbmFsIGNvbnRlbnRzIGJlZm9yZQorICogdGhlIGZ1bmN0aW9uIHJldHVybnMuCisgKi8KK3R5cGVkZWYgaW50IGVhY2hfbG9vc2Vfb2JqZWN0X2ZuKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgdm9pZCAqZGF0YSk7Cit0eXBlZGVmIGludCBlYWNoX2xvb3NlX2NydWZ0X2ZuKGNvbnN0IGNoYXIgKmJhc2VuYW1lLAorCQkJCWNvbnN0IGNoYXIgKnBhdGgsCisJCQkJdm9pZCAqZGF0YSk7Cit0eXBlZGVmIGludCBlYWNoX2xvb3NlX3N1YmRpcl9mbih1bnNpZ25lZCBpbnQgbnIsCisJCQkJIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJIHZvaWQgKmRhdGEpOworaW50IGZvcl9lYWNoX2ZpbGVfaW5fb2JqX3N1YmRpcih1bnNpZ25lZCBpbnQgc3ViZGlyX25yLAorCQkJCXN0cnVjdCBzdHJidWYgKnBhdGgsCisJCQkJZWFjaF9sb29zZV9vYmplY3RfZm4gb2JqX2NiLAorCQkJCWVhY2hfbG9vc2VfY3J1ZnRfZm4gY3J1ZnRfY2IsCisJCQkJZWFjaF9sb29zZV9zdWJkaXJfZm4gc3ViZGlyX2NiLAorCQkJCXZvaWQgKmRhdGEpOworaW50IGZvcl9lYWNoX2xvb3NlX2ZpbGVfaW5fb2JqZGlyKGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICBlYWNoX2xvb3NlX29iamVjdF9mbiBvYmpfY2IsCisJCQkJICBlYWNoX2xvb3NlX2NydWZ0X2ZuIGNydWZ0X2NiLAorCQkJCSAgZWFjaF9sb29zZV9zdWJkaXJfZm4gc3ViZGlyX2NiLAorCQkJCSAgdm9pZCAqZGF0YSk7CitpbnQgZm9yX2VhY2hfbG9vc2VfZmlsZV9pbl9vYmpkaXJfYnVmKHN0cnVjdCBzdHJidWYgKnBhdGgsCisJCQkJICAgICAgZWFjaF9sb29zZV9vYmplY3RfZm4gb2JqX2NiLAorCQkJCSAgICAgIGVhY2hfbG9vc2VfY3J1ZnRfZm4gY3J1ZnRfY2IsCisJCQkJICAgICAgZWFjaF9sb29zZV9zdWJkaXJfZm4gc3ViZGlyX2NiLAorCQkJCSAgICAgIHZvaWQgKmRhdGEpOworCisvKiBGbGFncyBmb3IgZm9yX2VhY2hfKl9vYmplY3QoKSBiZWxvdy4gKi8KK2VudW0gZm9yX2VhY2hfb2JqZWN0X2ZsYWdzIHsKKwkvKiBJdGVyYXRlIG9ubHkgb3ZlciBsb2NhbCBvYmplY3RzLCBub3QgYWx0ZXJuYXRlcy4gKi8KKwlGT1JfRUFDSF9PQkpFQ1RfTE9DQUxfT05MWSA9ICgxPDwwKSwKKworCS8qIE9ubHkgaXRlcmF0ZSBvdmVyIHBhY2tzIG9idGFpbmVkIGZyb20gdGhlIHByb21pc29yIHJlbW90ZS4gKi8KKwlGT1JfRUFDSF9PQkpFQ1RfUFJPTUlTT1JfT05MWSA9ICgxPDwxKSwKKworCS8qCisJICogVmlzaXQgb2JqZWN0cyB3aXRoaW4gYSBwYWNrIGluIHBhY2tmaWxlIG9yZGVyIHJhdGhlciB0aGFuIC5pZHggb3JkZXIKKwkgKi8KKwlGT1JfRUFDSF9PQkpFQ1RfUEFDS19PUkRFUiA9ICgxPDwyKSwKK307CisKKy8qCisgKiBJdGVyYXRlIG92ZXIgYWxsIGFjY2Vzc2libGUgbG9vc2Ugb2JqZWN0cyB3aXRob3V0IHJlc3BlY3QgdG8KKyAqIHJlYWNoYWJpbGl0eS4gQnkgZGVmYXVsdCwgdGhpcyBpbmNsdWRlcyBib3RoIGxvY2FsIGFuZCBhbHRlcm5hdGUgb2JqZWN0cy4KKyAqIFRoZSBvcmRlciBpbiB3aGljaCBvYmplY3RzIGFyZSB2aXNpdGVkIGlzIHVuc3BlY2lmaWVkLgorICoKKyAqIEFueSBmbGFncyBzcGVjaWZpYyB0byBwYWNrcyBhcmUgaWdub3JlZC4KKyAqLworaW50IGZvcl9lYWNoX2xvb3NlX29iamVjdChlYWNoX2xvb3NlX29iamVjdF9mbiwgdm9pZCAqLAorCQkJICBlbnVtIGZvcl9lYWNoX29iamVjdF9mbGFncyBmbGFncyk7CisKKy8qCisgKiBJdGVyYXRlIG92ZXIgYWxsIGFjY2Vzc2libGUgcGFja2VkIG9iamVjdHMgd2l0aG91dCByZXNwZWN0IHRvIHJlYWNoYWJpbGl0eS4KKyAqIEJ5IGRlZmF1bHQsIHRoaXMgaW5jbHVkZXMgYm90aCBsb2NhbCBhbmQgYWx0ZXJuYXRlIHBhY2tzLgorICoKKyAqIE5vdGUgdGhhdCBzb21lIG9iamVjdHMgbWF5IGFwcGVhciB0d2ljZSBpZiB0aGV5IGFyZSBmb3VuZCBpbiBtdWx0aXBsZSBwYWNrcy4KKyAqIEVhY2ggcGFjayBpcyB2aXNpdGVkIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLiBCeSBkZWZhdWx0LCBvYmplY3RzIHdpdGhpbiBhCisgKiBwYWNrIGFyZSB2aXNpdGVkIGluIHBhY2staWR4IG9yZGVyIChpLmUuLCBzb3J0ZWQgYnkgb2lkKS4KKyAqLwordHlwZWRlZiBpbnQgZWFjaF9wYWNrZWRfb2JqZWN0X2ZuKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrLAorCQkJCSAgdWludDMyX3QgcG9zLAorCQkJCSAgdm9pZCAqZGF0YSk7CitpbnQgZm9yX2VhY2hfb2JqZWN0X2luX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkgICAgZWFjaF9wYWNrZWRfb2JqZWN0X2ZuLCB2b2lkICpkYXRhLAorCQkJICAgIGVudW0gZm9yX2VhY2hfb2JqZWN0X2ZsYWdzIGZsYWdzKTsKK2ludCBmb3JfZWFjaF9wYWNrZWRfb2JqZWN0KGVhY2hfcGFja2VkX29iamVjdF9mbiwgdm9pZCAqLAorCQkJICAgZW51bSBmb3JfZWFjaF9vYmplY3RfZmxhZ3MgZmxhZ3MpOworCisjZW5kaWYgLyogT0JKRUNUX1NUT1JFX0ggKi8KZGlmZiAtLWdpdCBhL29iamVjdC5jIGIvb2JqZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0Yzg2NgotLS0gL2Rldi9udWxsCisrKyBiL29iamVjdC5jCkBAIC0wLDAgKzEsNTgxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJyZXBsYWNlLW9iamVjdC5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiYWxsb2MuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgImNvbW1pdC1ncmFwaC5oIgorCit1bnNpZ25lZCBpbnQgZ2V0X21heF9vYmplY3RfaW5kZXgodm9pZCkKK3sKKwlyZXR1cm4gdGhlX3JlcG9zaXRvcnktPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaF9zaXplOworfQorCitzdHJ1Y3Qgb2JqZWN0ICpnZXRfaW5kZXhlZF9vYmplY3QodW5zaWduZWQgaW50IGlkeCkKK3sKKwlyZXR1cm4gdGhlX3JlcG9zaXRvcnktPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaFtpZHhdOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqb2JqZWN0X3R5cGVfc3RyaW5nc1tdID0geworCU5VTEwsCQkvKiBPQkpfTk9ORSA9IDAgKi8KKwkiY29tbWl0IiwJLyogT0JKX0NPTU1JVCA9IDEgKi8KKwkidHJlZSIsCQkvKiBPQkpfVFJFRSA9IDIgKi8KKwkiYmxvYiIsCQkvKiBPQkpfQkxPQiA9IDMgKi8KKwkidGFnIiwJCS8qIE9CSl9UQUcgPSA0ICovCit9OworCitjb25zdCBjaGFyICp0eXBlX25hbWUodW5zaWduZWQgaW50IHR5cGUpCit7CisJaWYgKHR5cGUgPj0gQVJSQVlfU0laRShvYmplY3RfdHlwZV9zdHJpbmdzKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIG9iamVjdF90eXBlX3N0cmluZ3NbdHlwZV07Cit9CisKK2ludCB0eXBlX2Zyb21fc3RyaW5nX2dlbnRseShjb25zdCBjaGFyICpzdHIsIHNzaXplX3QgbGVuLCBpbnQgZ2VudGxlKQoreworCWludCBpOworCisJaWYgKGxlbiA8IDApCisJCWxlbiA9IHN0cmxlbihzdHIpOworCisJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUob2JqZWN0X3R5cGVfc3RyaW5ncyk7IGkrKykKKwkJaWYgKCFzdHJuY21wKHN0ciwgb2JqZWN0X3R5cGVfc3RyaW5nc1tpXSwgbGVuKSAmJgorCQkgICAgb2JqZWN0X3R5cGVfc3RyaW5nc1tpXVtsZW5dID09ICdcMCcpCisJCQlyZXR1cm4gaTsKKworCWlmIChnZW50bGUpCisJCXJldHVybiAtMTsKKworCWRpZShfKCJpbnZhbGlkIG9iamVjdCB0eXBlIFwiJXNcIiIpLCBzdHIpOworfQorCisvKgorICogUmV0dXJuIGEgbnVtZXJpY2FsIGhhc2ggdmFsdWUgYmV0d2VlbiAwIGFuZCBuLTEgZm9yIHRoZSBvYmplY3Qgd2l0aAorICogdGhlIHNwZWNpZmllZCBzaGExLiAgbiBtdXN0IGJlIGEgcG93ZXIgb2YgMi4gIFBsZWFzZSBub3RlIHRoYXQgdGhlCisgKiByZXR1cm4gdmFsdWUgaXMgKm5vdCogY29uc2lzdGVudCBhY3Jvc3MgY29tcHV0ZXIgYXJjaGl0ZWN0dXJlcy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBoYXNoX29iaihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHVuc2lnbmVkIGludCBuKQoreworCXJldHVybiBvaWRoYXNoKG9pZCkgJiAobiAtIDEpOworfQorCisvKgorICogSW5zZXJ0IG9iaiBpbnRvIHRoZSBoYXNoIHRhYmxlIGhhc2gsIHdoaWNoIGhhcyBsZW5ndGggc2l6ZSAod2hpY2gKKyAqIG11c3QgYmUgYSBwb3dlciBvZiAyKS4gIE9uIGNvbGxpc2lvbnMsIHNpbXBseSBvdmVyZmxvdyB0byB0aGUgbmV4dAorICogZW1wdHkgYnVja2V0LgorICovCitzdGF0aWMgdm9pZCBpbnNlcnRfb2JqX2hhc2goc3RydWN0IG9iamVjdCAqb2JqLCBzdHJ1Y3Qgb2JqZWN0ICoqaGFzaCwgdW5zaWduZWQgaW50IHNpemUpCit7CisJdW5zaWduZWQgaW50IGogPSBoYXNoX29iaigmb2JqLT5vaWQsIHNpemUpOworCisJd2hpbGUgKGhhc2hbal0pIHsKKwkJaisrOworCQlpZiAoaiA+PSBzaXplKQorCQkJaiA9IDA7CisJfQorCWhhc2hbal0gPSBvYmo7Cit9CisKKy8qCisgKiBMb29rIHVwIHRoZSByZWNvcmQgZm9yIHRoZSBnaXZlbiBzaGExIGluIHRoZSBoYXNoIG1hcCBzdG9yZWQgaW4KKyAqIG9ial9oYXNoLiAgUmV0dXJuIE5VTEwgaWYgaXQgd2FzIG5vdCBmb3VuZC4KKyAqLworc3RydWN0IG9iamVjdCAqbG9va3VwX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXVuc2lnbmVkIGludCBpLCBmaXJzdDsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwlpZiAoIXItPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmaXJzdCA9IGkgPSBoYXNoX29iaihvaWQsIHItPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaF9zaXplKTsKKwl3aGlsZSAoKG9iaiA9IHItPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaFtpXSkgIT0gTlVMTCkgeworCQlpZiAob2lkZXEob2lkLCAmb2JqLT5vaWQpKQorCQkJYnJlYWs7CisJCWkrKzsKKwkJaWYgKGkgPT0gci0+cGFyc2VkX29iamVjdHMtPm9ial9oYXNoX3NpemUpCisJCQlpID0gMDsKKwl9CisJaWYgKG9iaiAmJiBpICE9IGZpcnN0KSB7CisJCS8qCisJCSAqIE1vdmUgb2JqZWN0IHRvIHdoZXJlIHdlIHN0YXJ0ZWQgdG8gbG9vayBmb3IgaXQgc28KKwkJICogdGhhdCB3ZSBkbyBub3QgbmVlZCB0byB3YWxrIHRoZSBoYXNoIHRhYmxlIHRoZSBuZXh0CisJCSAqIHRpbWUgd2UgbG9vayBmb3IgaXQuCisJCSAqLworCQlTV0FQKHItPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaFtpXSwKKwkJICAgICByLT5wYXJzZWRfb2JqZWN0cy0+b2JqX2hhc2hbZmlyc3RdKTsKKwl9CisJcmV0dXJuIG9iajsKK30KKworLyoKKyAqIEluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBoYXNoIG1hcCBzdG9yZWQgaW4gb2JqX2hhc2ggdG8gdGhlIG5leHQKKyAqIHBvd2VyIG9mIDIgKGJ1dCBhdCBsZWFzdCAzMikuICBDb3B5IHRoZSBleGlzdGluZyB2YWx1ZXMgdG8gdGhlIG5ldworICogaGFzaCBtYXAuCisgKi8KK3N0YXRpYyB2b2lkIGdyb3dfb2JqZWN0X2hhc2goc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJaW50IGk7CisJLyoKKwkgKiBOb3RlIHRoYXQgdGhpcyBzaXplIG11c3QgYWx3YXlzIGJlIHBvd2VyLW9mLTIgdG8gbWF0Y2ggaGFzaF9vYmoKKwkgKiBhYm92ZS4KKwkgKi8KKwlpbnQgbmV3X2hhc2hfc2l6ZSA9IHItPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaF9zaXplIDwgMzIgPyAzMiA6IDIgKiByLT5wYXJzZWRfb2JqZWN0cy0+b2JqX2hhc2hfc2l6ZTsKKwlzdHJ1Y3Qgb2JqZWN0ICoqbmV3X2hhc2g7CisKKwluZXdfaGFzaCA9IHhjYWxsb2MobmV3X2hhc2hfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBvYmplY3QgKikpOworCWZvciAoaSA9IDA7IGkgPCByLT5wYXJzZWRfb2JqZWN0cy0+b2JqX2hhc2hfc2l6ZTsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHItPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaFtpXTsKKworCQlpZiAoIW9iaikKKwkJCWNvbnRpbnVlOworCQlpbnNlcnRfb2JqX2hhc2gob2JqLCBuZXdfaGFzaCwgbmV3X2hhc2hfc2l6ZSk7CisJfQorCWZyZWUoci0+cGFyc2VkX29iamVjdHMtPm9ial9oYXNoKTsKKwlyLT5wYXJzZWRfb2JqZWN0cy0+b2JqX2hhc2ggPSBuZXdfaGFzaDsKKwlyLT5wYXJzZWRfb2JqZWN0cy0+b2JqX2hhc2hfc2l6ZSA9IG5ld19oYXNoX3NpemU7Cit9CisKK3ZvaWQgKmNyZWF0ZV9vYmplY3Qoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdm9pZCAqbykKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBvOworCisJb2JqLT5wYXJzZWQgPSAwOworCW9iai0+ZmxhZ3MgPSAwOworCW9pZGNweSgmb2JqLT5vaWQsIG9pZCk7CisKKwlpZiAoci0+cGFyc2VkX29iamVjdHMtPm9ial9oYXNoX3NpemUgLSAxIDw9IHItPnBhcnNlZF9vYmplY3RzLT5ucl9vYmpzICogMikKKwkJZ3Jvd19vYmplY3RfaGFzaChyKTsKKworCWluc2VydF9vYmpfaGFzaChvYmosIHItPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaCwKKwkJCXItPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaF9zaXplKTsKKwlyLT5wYXJzZWRfb2JqZWN0cy0+bnJfb2JqcysrOworCXJldHVybiBvYmo7Cit9CisKK3ZvaWQgKm9iamVjdF9hc190eXBlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgaW50IHF1aWV0KQoreworCWlmIChvYmotPnR5cGUgPT0gdHlwZSkKKwkJcmV0dXJuIG9iajsKKwllbHNlIGlmIChvYmotPnR5cGUgPT0gT0JKX05PTkUpIHsKKwkJaWYgKHR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJCWluaXRfY29tbWl0X25vZGUociwgKHN0cnVjdCBjb21taXQgKikgb2JqKTsKKwkJZWxzZQorCQkJb2JqLT50eXBlID0gdHlwZTsKKwkJcmV0dXJuIG9iajsKKwl9CisJZWxzZSB7CisJCWlmICghcXVpZXQpCisJCQllcnJvcihfKCJvYmplY3QgJXMgaXMgYSAlcywgbm90IGEgJXMiKSwKKwkJCSAgICAgIG9pZF90b19oZXgoJm9iai0+b2lkKSwKKwkJCSAgICAgIHR5cGVfbmFtZShvYmotPnR5cGUpLCB0eXBlX25hbWUodHlwZSkpOworCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0cnVjdCBvYmplY3QgKmxvb2t1cF91bmtub3duX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKwlpZiAoIW9iaikKKwkJb2JqID0gY3JlYXRlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkLAorCQkJCSAgICBhbGxvY19vYmplY3Rfbm9kZSh0aGVfcmVwb3NpdG9yeSkpOworCXJldHVybiBvYmo7Cit9CisKK3N0cnVjdCBvYmplY3QgKnBhcnNlX29iamVjdF9idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgZW51bSBvYmplY3RfdHlwZSB0eXBlLCB1bnNpZ25lZCBsb25nIHNpemUsIHZvaWQgKmJ1ZmZlciwgaW50ICplYXRlbl9wKQoreworCXN0cnVjdCBvYmplY3QgKm9iajsKKwkqZWF0ZW5fcCA9IDA7CisKKwlvYmogPSBOVUxMOworCWlmICh0eXBlID09IE9CSl9CTE9CKSB7CisJCXN0cnVjdCBibG9iICpibG9iID0gbG9va3VwX2Jsb2Iociwgb2lkKTsKKwkJaWYgKGJsb2IpIHsKKwkJCWlmIChwYXJzZV9ibG9iX2J1ZmZlcihibG9iLCBidWZmZXIsIHNpemUpKQorCQkJCXJldHVybiBOVUxMOworCQkJb2JqID0gJmJsb2ItPm9iamVjdDsKKwkJfQorCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfVFJFRSkgeworCQlzdHJ1Y3QgdHJlZSAqdHJlZSA9IGxvb2t1cF90cmVlKHIsIG9pZCk7CisJCWlmICh0cmVlKSB7CisJCQlvYmogPSAmdHJlZS0+b2JqZWN0OworCQkJaWYgKCF0cmVlLT5idWZmZXIpCisJCQkJdHJlZS0+b2JqZWN0LnBhcnNlZCA9IDA7CisJCQlpZiAoIXRyZWUtPm9iamVjdC5wYXJzZWQpIHsKKwkJCQlpZiAocGFyc2VfdHJlZV9idWZmZXIodHJlZSwgYnVmZmVyLCBzaXplKSkKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQkJKmVhdGVuX3AgPSAxOworCQkJfQorCQl9CisJfSBlbHNlIGlmICh0eXBlID09IE9CSl9DT01NSVQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbG9va3VwX2NvbW1pdChyLCBvaWQpOworCQlpZiAoY29tbWl0KSB7CisJCQlpZiAocGFyc2VfY29tbWl0X2J1ZmZlcihyLCBjb21taXQsIGJ1ZmZlciwgc2l6ZSwgMSkpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlpZiAoIWdldF9jYWNoZWRfY29tbWl0X2J1ZmZlcihyLCBjb21taXQsIE5VTEwpKSB7CisJCQkJc2V0X2NvbW1pdF9idWZmZXIociwgY29tbWl0LCBidWZmZXIsIHNpemUpOworCQkJCSplYXRlbl9wID0gMTsKKwkJCX0KKwkJCW9iaiA9ICZjb21taXQtPm9iamVjdDsKKwkJfQorCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfVEFHKSB7CisJCXN0cnVjdCB0YWcgKnRhZyA9IGxvb2t1cF90YWcociwgb2lkKTsKKwkJaWYgKHRhZykgeworCQkJaWYgKHBhcnNlX3RhZ19idWZmZXIociwgdGFnLCBidWZmZXIsIHNpemUpKQorCQkJICAgICAgIHJldHVybiBOVUxMOworCQkJb2JqID0gJnRhZy0+b2JqZWN0OworCQl9CisJfSBlbHNlIHsKKwkJd2FybmluZyhfKCJvYmplY3QgJXMgaGFzIHVua25vd24gdHlwZSBpZCAlZCIpLCBvaWRfdG9faGV4KG9pZCksIHR5cGUpOworCQlvYmogPSBOVUxMOworCX0KKwlyZXR1cm4gb2JqOworfQorCitzdHJ1Y3Qgb2JqZWN0ICpwYXJzZV9vYmplY3Rfb3JfZGllKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvYmplY3QgKm8gPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJaWYgKG8pCisJCXJldHVybiBvOworCisJZGllKF8oInVuYWJsZSB0byBwYXJzZSBvYmplY3Q6ICVzIiksIG5hbWUgPyBuYW1lIDogb2lkX3RvX2hleChvaWQpKTsKK30KKworc3RydWN0IG9iamVjdCAqcGFyc2Vfb2JqZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlpbnQgZWF0ZW47CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqcmVwbCA9IGxvb2t1cF9yZXBsYWNlX29iamVjdChyLCBvaWQpOworCXZvaWQgKmJ1ZmZlcjsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwlvYmogPSBsb29rdXBfb2JqZWN0KHIsIG9pZCk7CisJaWYgKG9iaiAmJiBvYmotPnBhcnNlZCkKKwkJcmV0dXJuIG9iajsKKworCWlmICgob2JqICYmIG9iai0+dHlwZSA9PSBPQkpfQkxPQiAmJiByZXBvX2hhc19vYmplY3RfZmlsZShyLCBvaWQpKSB8fAorCSAgICAoIW9iaiAmJiByZXBvX2hhc19vYmplY3RfZmlsZShyLCBvaWQpICYmCisJICAgICBvaWRfb2JqZWN0X2luZm8ociwgb2lkLCBOVUxMKSA9PSBPQkpfQkxPQikpIHsKKwkJaWYgKGNoZWNrX29iamVjdF9zaWduYXR1cmUociwgcmVwbCwgTlVMTCwgMCwgTlVMTCkgPCAwKSB7CisJCQllcnJvcihfKCJoYXNoIG1pc21hdGNoICVzIiksIG9pZF90b19oZXgob2lkKSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlwYXJzZV9ibG9iX2J1ZmZlcihsb29rdXBfYmxvYihyLCBvaWQpLCBOVUxMLCAwKTsKKwkJcmV0dXJuIGxvb2t1cF9vYmplY3Qociwgb2lkKTsKKwl9CisKKwlidWZmZXIgPSByZXBvX3JlYWRfb2JqZWN0X2ZpbGUociwgb2lkLCAmdHlwZSwgJnNpemUpOworCWlmIChidWZmZXIpIHsKKwkJaWYgKGNoZWNrX29iamVjdF9zaWduYXR1cmUociwgcmVwbCwgYnVmZmVyLCBzaXplLAorCQkJCQkgICB0eXBlX25hbWUodHlwZSkpIDwgMCkgeworCQkJZnJlZShidWZmZXIpOworCQkJZXJyb3IoXygiaGFzaCBtaXNtYXRjaCAlcyIpLCBvaWRfdG9faGV4KHJlcGwpKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJb2JqID0gcGFyc2Vfb2JqZWN0X2J1ZmZlcihyLCBvaWQsIHR5cGUsIHNpemUsCisJCQkJCSAgYnVmZmVyLCAmZWF0ZW4pOworCQlpZiAoIWVhdGVuKQorCQkJZnJlZShidWZmZXIpOworCQlyZXR1cm4gb2JqOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IG9iamVjdF9saXN0ICpvYmplY3RfbGlzdF9pbnNlcnQoc3RydWN0IG9iamVjdCAqaXRlbSwKKwkJCQkgICAgICAgc3RydWN0IG9iamVjdF9saXN0ICoqbGlzdF9wKQoreworCXN0cnVjdCBvYmplY3RfbGlzdCAqbmV3X2xpc3QgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2xpc3QpKTsKKwluZXdfbGlzdC0+aXRlbSA9IGl0ZW07CisJbmV3X2xpc3QtPm5leHQgPSAqbGlzdF9wOworCSpsaXN0X3AgPSBuZXdfbGlzdDsKKwlyZXR1cm4gbmV3X2xpc3Q7Cit9CisKK2ludCBvYmplY3RfbGlzdF9jb250YWlucyhzdHJ1Y3Qgb2JqZWN0X2xpc3QgKmxpc3QsIHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwl3aGlsZSAobGlzdCkgeworCQlpZiAobGlzdC0+aXRlbSA9PSBvYmopCisJCQlyZXR1cm4gMTsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIG9iamVjdF9saXN0X2ZyZWUoc3RydWN0IG9iamVjdF9saXN0ICoqbGlzdCkKK3sKKwl3aGlsZSAoKmxpc3QpIHsKKwkJc3RydWN0IG9iamVjdF9saXN0ICpwID0gKmxpc3Q7CisJCSpsaXN0ID0gcC0+bmV4dDsKKwkJZnJlZShwKTsKKwl9Cit9CisKKy8qCisgKiBBIHplcm8tbGVuZ3RoIHN0cmluZyB0byB3aGljaCBvYmplY3RfYXJyYXlfZW50cnk6Om5hbWUgY2FuIGJlCisgKiBpbml0aWFsaXplZCB3aXRob3V0IHJlcXVpcmluZyBhIG1hbGxvYy9mcmVlLgorICovCitzdGF0aWMgY2hhciBvYmplY3RfYXJyYXlfc2xvcGJ1ZlsxXTsKKwordm9pZCBhZGRfb2JqZWN0X2FycmF5X3dpdGhfcGF0aChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXksCisJCQkJdW5zaWduZWQgbW9kZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwl1bnNpZ25lZCBuciA9IGFycmF5LT5ucjsKKwl1bnNpZ25lZCBhbGxvYyA9IGFycmF5LT5hbGxvYzsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICpvYmplY3RzID0gYXJyYXktPm9iamVjdHM7CisJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZW50cnk7CisKKwlpZiAobnIgPj0gYWxsb2MpIHsKKwkJYWxsb2MgPSAoYWxsb2MgKyAzMikgKiAyOworCQlSRUFMTE9DX0FSUkFZKG9iamVjdHMsIGFsbG9jKTsKKwkJYXJyYXktPmFsbG9jID0gYWxsb2M7CisJCWFycmF5LT5vYmplY3RzID0gb2JqZWN0czsKKwl9CisJZW50cnkgPSAmb2JqZWN0c1tucl07CisJZW50cnktPml0ZW0gPSBvYmo7CisJaWYgKCFuYW1lKQorCQllbnRyeS0+bmFtZSA9IE5VTEw7CisJZWxzZSBpZiAoISpuYW1lKQorCQkvKiBVc2Ugb3VyIG93biBlbXB0eSBzdHJpbmcgaW5zdGVhZCBvZiBhbGxvY2F0aW5nIG9uZTogKi8KKwkJZW50cnktPm5hbWUgPSBvYmplY3RfYXJyYXlfc2xvcGJ1ZjsKKwllbHNlCisJCWVudHJ5LT5uYW1lID0geHN0cmR1cChuYW1lKTsKKwllbnRyeS0+bW9kZSA9IG1vZGU7CisJaWYgKHBhdGgpCisJCWVudHJ5LT5wYXRoID0geHN0cmR1cChwYXRoKTsKKwllbHNlCisJCWVudHJ5LT5wYXRoID0gTlVMTDsKKwlhcnJheS0+bnIgPSArK25yOworfQorCit2b2lkIGFkZF9vYmplY3RfYXJyYXkoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICphcnJheSkKK3sKKwlhZGRfb2JqZWN0X2FycmF5X3dpdGhfcGF0aChvYmosIG5hbWUsIGFycmF5LCBTX0lGSU5WQUxJRCwgTlVMTCk7Cit9CisKKy8qCisgKiBGcmVlIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGFuIGVudHJ5OyB0aGUgcmVzdWx0IGlzCisgKiBpbiBhbiB1bnNwZWNpZmllZCBzdGF0ZSBhbmQgc2hvdWxkIG5vdCBiZSBleGFtaW5lZC4KKyAqLworc3RhdGljIHZvaWQgb2JqZWN0X2FycmF5X3JlbGVhc2VfZW50cnkoc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZW50KQoreworCWlmIChlbnQtPm5hbWUgIT0gb2JqZWN0X2FycmF5X3Nsb3BidWYpCisJCWZyZWUoZW50LT5uYW1lKTsKKwlmcmVlKGVudC0+cGF0aCk7Cit9CisKK3N0cnVjdCBvYmplY3QgKm9iamVjdF9hcnJheV9wb3Aoc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXkpCit7CisJc3RydWN0IG9iamVjdCAqcmV0OworCisJaWYgKCFhcnJheS0+bnIpCisJCXJldHVybiBOVUxMOworCisJcmV0ID0gYXJyYXktPm9iamVjdHNbYXJyYXktPm5yIC0gMV0uaXRlbTsKKwlvYmplY3RfYXJyYXlfcmVsZWFzZV9lbnRyeSgmYXJyYXktPm9iamVjdHNbYXJyYXktPm5yIC0gMV0pOworCWFycmF5LT5uci0tOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgb2JqZWN0X2FycmF5X2ZpbHRlcihzdHJ1Y3Qgb2JqZWN0X2FycmF5ICphcnJheSwKKwkJCSBvYmplY3RfYXJyYXlfZWFjaF9mdW5jX3Qgd2FudCwgdm9pZCAqY2JfZGF0YSkKK3sKKwl1bnNpZ25lZCBuciA9IGFycmF5LT5uciwgc3JjLCBkc3Q7CisJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqb2JqZWN0cyA9IGFycmF5LT5vYmplY3RzOworCisJZm9yIChzcmMgPSBkc3QgPSAwOyBzcmMgPCBucjsgc3JjKyspIHsKKwkJaWYgKHdhbnQoJm9iamVjdHNbc3JjXSwgY2JfZGF0YSkpIHsKKwkJCWlmIChzcmMgIT0gZHN0KQorCQkJCW9iamVjdHNbZHN0XSA9IG9iamVjdHNbc3JjXTsKKwkJCWRzdCsrOworCQl9IGVsc2UgeworCQkJb2JqZWN0X2FycmF5X3JlbGVhc2VfZW50cnkoJm9iamVjdHNbc3JjXSk7CisJCX0KKwl9CisJYXJyYXktPm5yID0gZHN0OworfQorCit2b2lkIG9iamVjdF9hcnJheV9jbGVhcihzdHJ1Y3Qgb2JqZWN0X2FycmF5ICphcnJheSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5yOyBpKyspCisJCW9iamVjdF9hcnJheV9yZWxlYXNlX2VudHJ5KCZhcnJheS0+b2JqZWN0c1tpXSk7CisJRlJFRV9BTkRfTlVMTChhcnJheS0+b2JqZWN0cyk7CisJYXJyYXktPm5yID0gYXJyYXktPmFsbG9jID0gMDsKK30KKworLyoKKyAqIFJldHVybiB0cnVlIGlmZiBhcnJheSBhbHJlYWR5IGNvbnRhaW5zIGFuIGVudHJ5IHdpdGggbmFtZS4KKyAqLworc3RhdGljIGludCBjb250YWluc19uYW1lKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5LCBjb25zdCBjaGFyICpuYW1lKQoreworCXVuc2lnbmVkIG5yID0gYXJyYXktPm5yLCBpOworCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKm9iamVjdCA9IGFycmF5LT5vYmplY3RzOworCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyssIG9iamVjdCsrKQorCQlpZiAoIXN0cmNtcChvYmplY3QtPm5hbWUsIG5hbWUpKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgb2JqZWN0X2FycmF5X3JlbW92ZV9kdXBsaWNhdGVzKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5KQoreworCXVuc2lnbmVkIG5yID0gYXJyYXktPm5yLCBzcmM7CisJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqb2JqZWN0cyA9IGFycmF5LT5vYmplY3RzOworCisJYXJyYXktPm5yID0gMDsKKwlmb3IgKHNyYyA9IDA7IHNyYyA8IG5yOyBzcmMrKykgeworCQlpZiAoIWNvbnRhaW5zX25hbWUoYXJyYXksIG9iamVjdHNbc3JjXS5uYW1lKSkgeworCQkJaWYgKHNyYyAhPSBhcnJheS0+bnIpCisJCQkJb2JqZWN0c1thcnJheS0+bnJdID0gb2JqZWN0c1tzcmNdOworCQkJYXJyYXktPm5yKys7CisJCX0gZWxzZSB7CisJCQlvYmplY3RfYXJyYXlfcmVsZWFzZV9lbnRyeSgmb2JqZWN0c1tzcmNdKTsKKwkJfQorCX0KK30KKwordm9pZCBjbGVhcl9vYmplY3RfZmxhZ3ModW5zaWduZWQgZmxhZ3MpCit7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaSA8IHRoZV9yZXBvc2l0b3J5LT5wYXJzZWRfb2JqZWN0cy0+b2JqX2hhc2hfc2l6ZTsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHRoZV9yZXBvc2l0b3J5LT5wYXJzZWRfb2JqZWN0cy0+b2JqX2hhc2hbaV07CisJCWlmIChvYmopCisJCQlvYmotPmZsYWdzICY9IH5mbGFnczsKKwl9Cit9CisKK3ZvaWQgY2xlYXJfY29tbWl0X21hcmtzX2FsbCh1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGhlX3JlcG9zaXRvcnktPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaF9zaXplOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gdGhlX3JlcG9zaXRvcnktPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaFtpXTsKKwkJaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJCW9iai0+ZmxhZ3MgJj0gfmZsYWdzOworCX0KK30KKworc3RydWN0IHBhcnNlZF9vYmplY3RfcG9vbCAqcGFyc2VkX29iamVjdF9wb29sX25ldyh2b2lkKQoreworCXN0cnVjdCBwYXJzZWRfb2JqZWN0X3Bvb2wgKm8gPSB4bWFsbG9jKHNpemVvZigqbykpOworCW1lbXNldChvLCAwLCBzaXplb2YoKm8pKTsKKworCW8tPmJsb2Jfc3RhdGUgPSBhbGxvY2F0ZV9hbGxvY19zdGF0ZSgpOworCW8tPnRyZWVfc3RhdGUgPSBhbGxvY2F0ZV9hbGxvY19zdGF0ZSgpOworCW8tPmNvbW1pdF9zdGF0ZSA9IGFsbG9jYXRlX2FsbG9jX3N0YXRlKCk7CisJby0+dGFnX3N0YXRlID0gYWxsb2NhdGVfYWxsb2Nfc3RhdGUoKTsKKwlvLT5vYmplY3Rfc3RhdGUgPSBhbGxvY2F0ZV9hbGxvY19zdGF0ZSgpOworCisJby0+aXNfc2hhbGxvdyA9IC0xOworCW8tPnNoYWxsb3dfc3RhdCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpvLT5zaGFsbG93X3N0YXQpKTsKKworCW8tPmJ1ZmZlcl9zbGFiID0gYWxsb2NhdGVfY29tbWl0X2J1ZmZlcl9zbGFiKCk7CisKKwlyZXR1cm4gbzsKK30KKworc3RydWN0IHJhd19vYmplY3Rfc3RvcmUgKnJhd19vYmplY3Rfc3RvcmVfbmV3KHZvaWQpCit7CisJc3RydWN0IHJhd19vYmplY3Rfc3RvcmUgKm8gPSB4bWFsbG9jKHNpemVvZigqbykpOworCisJbWVtc2V0KG8sIDAsIHNpemVvZigqbykpOworCUlOSVRfTElTVF9IRUFEKCZvLT5wYWNrZWRfZ2l0X21ydSk7CisJaGFzaG1hcF9pbml0KCZvLT5wYWNrX21hcCwgcGFja19tYXBfZW50cnlfY21wLCBOVUxMLCAwKTsKKwlwdGhyZWFkX211dGV4X2luaXQoJm8tPnJlcGxhY2VfbXV0ZXgsIE5VTEwpOworCXJldHVybiBvOworfQorCitzdGF0aWMgdm9pZCBmcmVlX29iamVjdF9kaXJlY3Rvcnkoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYikKK3sKKwlmcmVlKG9kYi0+cGF0aCk7CisJb2RiX2NsZWFyX2xvb3NlX2NhY2hlKG9kYik7CisJZnJlZShvZGIpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX29iamVjdF9kaXJlY3RvcmllcyhzdHJ1Y3QgcmF3X29iamVjdF9zdG9yZSAqbykKK3sKKwl3aGlsZSAoby0+b2RiKSB7CisJCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpuZXh0OworCisJCW5leHQgPSBvLT5vZGItPm5leHQ7CisJCWZyZWVfb2JqZWN0X2RpcmVjdG9yeShvLT5vZGIpOworCQlvLT5vZGIgPSBuZXh0OworCX0KK30KKwordm9pZCByYXdfb2JqZWN0X3N0b3JlX2NsZWFyKHN0cnVjdCByYXdfb2JqZWN0X3N0b3JlICpvKQoreworCUZSRUVfQU5EX05VTEwoby0+YWx0ZXJuYXRlX2RiKTsKKworCW9pZG1hcF9mcmVlKG8tPnJlcGxhY2VfbWFwLCAxKTsKKwlGUkVFX0FORF9OVUxMKG8tPnJlcGxhY2VfbWFwKTsKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJm8tPnJlcGxhY2VfbXV0ZXgpOworCisJZnJlZV9jb21taXRfZ3JhcGgoby0+Y29tbWl0X2dyYXBoKTsKKwlvLT5jb21taXRfZ3JhcGggPSBOVUxMOworCW8tPmNvbW1pdF9ncmFwaF9hdHRlbXB0ZWQgPSAwOworCisJZnJlZV9vYmplY3RfZGlyZWN0b3JpZXMobyk7CisJby0+b2RiX3RhaWwgPSBOVUxMOworCW8tPmxvYWRlZF9hbHRlcm5hdGVzID0gMDsKKworCUlOSVRfTElTVF9IRUFEKCZvLT5wYWNrZWRfZ2l0X21ydSk7CisJY2xvc2Vfb2JqZWN0X3N0b3JlKG8pOworCW8tPnBhY2tlZF9naXQgPSBOVUxMOworCisJaGFzaG1hcF9mcmVlKCZvLT5wYWNrX21hcCk7Cit9CisKK3ZvaWQgcGFyc2VkX29iamVjdF9wb29sX2NsZWFyKHN0cnVjdCBwYXJzZWRfb2JqZWN0X3Bvb2wgKm8pCit7CisJLyoKKwkgKiBBcyBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgaW4gc2xhYnMgKHNlZSBhbGxvYy5jKSwgd2UgZG8KKwkgKiBub3QgbmVlZCB0byBmcmVlIGVhY2ggb2JqZWN0LCBidXQgZWFjaCBzbGFiIGluc3RlYWQuCisJICoKKwkgKiBCZWZvcmUgZG9pbmcgc28sIHdlIG5lZWQgdG8gZnJlZSBhbnkgYWRkaXRpb25hbCBtZW1vcnkKKwkgKiB0aGUgb2JqZWN0cyBtYXkgaG9sZC4KKwkgKi8KKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgaSA8IG8tPm9ial9oYXNoX3NpemU7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBvLT5vYmpfaGFzaFtpXTsKKworCQlpZiAoIW9iaikKKwkJCWNvbnRpbnVlOworCisJCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpCisJCQlmcmVlX3RyZWVfYnVmZmVyKChzdHJ1Y3QgdHJlZSopb2JqKTsKKwkJZWxzZSBpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpCisJCQlyZWxlYXNlX2NvbW1pdF9tZW1vcnkobywgKHN0cnVjdCBjb21taXQqKW9iaik7CisJCWVsc2UgaWYgKG9iai0+dHlwZSA9PSBPQkpfVEFHKQorCQkJcmVsZWFzZV90YWdfbWVtb3J5KChzdHJ1Y3QgdGFnKilvYmopOworCX0KKworCUZSRUVfQU5EX05VTEwoby0+b2JqX2hhc2gpOworCW8tPm9ial9oYXNoX3NpemUgPSAwOworCisJZnJlZV9jb21taXRfYnVmZmVyX3NsYWIoby0+YnVmZmVyX3NsYWIpOworCW8tPmJ1ZmZlcl9zbGFiID0gTlVMTDsKKworCWNsZWFyX2FsbG9jX3N0YXRlKG8tPmJsb2Jfc3RhdGUpOworCWNsZWFyX2FsbG9jX3N0YXRlKG8tPnRyZWVfc3RhdGUpOworCWNsZWFyX2FsbG9jX3N0YXRlKG8tPmNvbW1pdF9zdGF0ZSk7CisJY2xlYXJfYWxsb2Nfc3RhdGUoby0+dGFnX3N0YXRlKTsKKwljbGVhcl9hbGxvY19zdGF0ZShvLT5vYmplY3Rfc3RhdGUpOworCXN0YXRfdmFsaWRpdHlfY2xlYXIoby0+c2hhbGxvd19zdGF0KTsKKwlGUkVFX0FORF9OVUxMKG8tPmJsb2Jfc3RhdGUpOworCUZSRUVfQU5EX05VTEwoby0+dHJlZV9zdGF0ZSk7CisJRlJFRV9BTkRfTlVMTChvLT5jb21taXRfc3RhdGUpOworCUZSRUVfQU5EX05VTEwoby0+dGFnX3N0YXRlKTsKKwlGUkVFX0FORF9OVUxMKG8tPm9iamVjdF9zdGF0ZSk7CisJRlJFRV9BTkRfTlVMTChvLT5zaGFsbG93X3N0YXQpOworfQpkaWZmIC0tZ2l0IGEvb2JqZWN0LmggYi9vYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjIzMjhiCi0tLSAvZGV2L251bGwKKysrIGIvb2JqZWN0LmgKQEAgLTAsMCArMSwxOTcgQEAKKyNpZm5kZWYgT0JKRUNUX0gKKyNkZWZpbmUgT0JKRUNUX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0cnVjdCBidWZmZXJfc2xhYjsKKworc3RydWN0IHBhcnNlZF9vYmplY3RfcG9vbCB7CisJc3RydWN0IG9iamVjdCAqKm9ial9oYXNoOworCWludCBucl9vYmpzLCBvYmpfaGFzaF9zaXplOworCisJLyogVE9ETzogbWlncmF0ZSBhbGxvY19zdGF0ZXMgdG8gbWVtLXBvb2w/ICovCisJc3RydWN0IGFsbG9jX3N0YXRlICpibG9iX3N0YXRlOworCXN0cnVjdCBhbGxvY19zdGF0ZSAqdHJlZV9zdGF0ZTsKKwlzdHJ1Y3QgYWxsb2Nfc3RhdGUgKmNvbW1pdF9zdGF0ZTsKKwlzdHJ1Y3QgYWxsb2Nfc3RhdGUgKnRhZ19zdGF0ZTsKKwlzdHJ1Y3QgYWxsb2Nfc3RhdGUgKm9iamVjdF9zdGF0ZTsKKwl1bnNpZ25lZCBjb21taXRfY291bnQ7CisKKwkvKiBwYXJlbnQgc3Vic3RpdHV0aW9ucyBmcm9tIC5naXQvaW5mby9ncmFmdHMgYW5kIC5naXQvc2hhbGxvdyAqLworCXN0cnVjdCBjb21taXRfZ3JhZnQgKipncmFmdHM7CisJaW50IGdyYWZ0c19hbGxvYywgZ3JhZnRzX25yOworCisJaW50IGlzX3NoYWxsb3c7CisJc3RydWN0IHN0YXRfdmFsaWRpdHkgKnNoYWxsb3dfc3RhdDsKKwljaGFyICphbHRlcm5hdGVfc2hhbGxvd19maWxlOworCisJaW50IGNvbW1pdF9ncmFmdF9wcmVwYXJlZDsKKworCXN0cnVjdCBidWZmZXJfc2xhYiAqYnVmZmVyX3NsYWI7Cit9OworCitzdHJ1Y3QgcGFyc2VkX29iamVjdF9wb29sICpwYXJzZWRfb2JqZWN0X3Bvb2xfbmV3KHZvaWQpOwordm9pZCBwYXJzZWRfb2JqZWN0X3Bvb2xfY2xlYXIoc3RydWN0IHBhcnNlZF9vYmplY3RfcG9vbCAqbyk7CisKK3N0cnVjdCBvYmplY3RfbGlzdCB7CisJc3RydWN0IG9iamVjdCAqaXRlbTsKKwlzdHJ1Y3Qgb2JqZWN0X2xpc3QgKm5leHQ7Cit9OworCitzdHJ1Y3Qgb2JqZWN0X2FycmF5IHsKKwl1bnNpZ25lZCBpbnQgbnI7CisJdW5zaWduZWQgaW50IGFsbG9jOworCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgeworCQlzdHJ1Y3Qgb2JqZWN0ICppdGVtOworCQkvKgorCQkgKiBuYW1lIG9yIE5VTEwuICBJZiBub24tTlVMTCwgdGhlIG1lbW9yeSBwb2ludGVkIHRvCisJCSAqIGlzIG93bmVkIGJ5IHRoaXMgb2JqZWN0ICpleGNlcHQqIGlmIGl0IHBvaW50cyBhdAorCQkgKiBvYmplY3RfYXJyYXlfc2xvcGJ1Ziwgd2hpY2ggaXMgYSBzdGF0aWMgY29weSBvZiB0aGUKKwkJICogZW1wdHkgc3RyaW5nLgorCQkgKi8KKwkJY2hhciAqbmFtZTsKKwkJY2hhciAqcGF0aDsKKwkJdW5zaWduZWQgbW9kZTsKKwl9ICpvYmplY3RzOworfTsKKworI2RlZmluZSBPQkpFQ1RfQVJSQVlfSU5JVCB7IDAsIDAsIE5VTEwgfQorCisvKgorICogb2JqZWN0IGZsYWcgYWxsb2NhdGlvbjoKKyAqIHJldmlzaW9uLmg6ICAgICAgICAgICAgICAgMC0tLS0tLS0tLTEwICAgICAgICAgMTUgICAgICAgICAgICAgICAgICAgMjUtLS0tMjgKKyAqIGZldGNoLXBhY2suYzogICAgICAgICAgICAgMDEKKyAqIG5lZ290aWF0b3IvZGVmYXVsdC5jOiAgICAgICAyLS01CisgKiB3YWxrZXIuYzogICAgICAgICAgICAgICAgIDAtMgorICogdXBsb2FkLXBhY2suYzogICAgICAgICAgICAgICAgNCAgICAgICAxMS0tLS0tMTQgIDE2LS0tLS0xOQorICogYnVpbHRpbi9ibGFtZS5jOiAgICAgICAgICAgICAgICAgICAgICAgIDEyLTEzCisgKiBiaXNlY3QuYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyAqIGJ1bmRsZS5jOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorICogaHR0cC1wdXNoLmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LS0tLS0xOQorICogY29tbWl0LWdyYXBoLmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorICogY29tbWl0LXJlYWNoLmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LS0tLS0xOQorICogc2hhMS1uYW1lLmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisgKiBsaXN0LW9iamVjdHMtZmlsdGVyLmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorICogYnVpbHRpbi9mc2NrLmM6ICAgICAgICAgICAwLS0zCisgKiBidWlsdGluL2luZGV4LXBhY2suYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAyMQorICogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisgKiBidWlsdGluL3JlZmxvZy5jOiAgICAgICAgICAgICAgICAgICAxMC0tMTIKKyAqIGJ1aWx0aW4vc2hvdy1icmFuY2guYzogICAgMC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0yNgorICogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMjEKKyAqLworI2RlZmluZSBGTEFHX0JJVFMgIDI5CisKKy8qCisgKiBUaGUgb2JqZWN0IHR5cGUgaXMgc3RvcmVkIGluIDMgYml0cy4KKyAqLworc3RydWN0IG9iamVjdCB7CisJdW5zaWduZWQgcGFyc2VkIDogMTsKKwl1bnNpZ25lZCB0eXBlIDogVFlQRV9CSVRTOworCXVuc2lnbmVkIGZsYWdzIDogRkxBR19CSVRTOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworfTsKKworY29uc3QgY2hhciAqdHlwZV9uYW1lKHVuc2lnbmVkIGludCB0eXBlKTsKK2ludCB0eXBlX2Zyb21fc3RyaW5nX2dlbnRseShjb25zdCBjaGFyICpzdHIsIHNzaXplX3QsIGludCBnZW50bGUpOworI2RlZmluZSB0eXBlX2Zyb21fc3RyaW5nKHN0cikgdHlwZV9mcm9tX3N0cmluZ19nZW50bHkoc3RyLCAtMSwgMCkKKworLyoKKyAqIFJldHVybiB0aGUgY3VycmVudCBudW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgb2JqZWN0IGhhc2htYXAuCisgKi8KK3Vuc2lnbmVkIGludCBnZXRfbWF4X29iamVjdF9pbmRleCh2b2lkKTsKKworLyoKKyAqIFJldHVybiB0aGUgb2JqZWN0IGZyb20gdGhlIHNwZWNpZmllZCBidWNrZXQgaW4gdGhlIG9iamVjdCBoYXNobWFwLgorICovCitzdHJ1Y3Qgb2JqZWN0ICpnZXRfaW5kZXhlZF9vYmplY3QodW5zaWduZWQgaW50KTsKKworLyoKKyAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2VlIGlmIHdlIGhhdmUgaGVhcmQgb2YgdGhlIG9iamVjdCBiZWZvcmUsIGJ1dAorICogaXQgY2FuIHJldHVybiAieWVzIHdlIGhhdmUsIGFuZCBoZXJlIGlzIGEgaGFsZi1pbml0aWFsaXNlZCBvYmplY3QiCisgKiBmb3IgYW4gb2JqZWN0IHRoYXQgd2UgaGF2ZW4ndCBsb2FkZWQvcGFyc2VkIHlldC4KKyAqCisgKiBXaGVuIHBhcnNpbmcgYSBjb21taXQgdG8gY3JlYXRlIGFuIGluLWNvcmUgY29tbWl0IG9iamVjdCwgaXRzCisgKiBwYXJlbnRzIGxpc3QgaG9sZHMgY29tbWl0IG9iamVjdHMgdGhhdCByZXByZXNlbnQgaXRzIHBhcmVudHMsIGJ1dAorICogdGhleSBhcmUgZXhwZWN0ZWQgdG8gYmUgbGF6aWx5IGluaXRpYWxpemVkIGFuZCBkbyBub3Qga25vdyB3aGF0CisgKiB0aGVpciB0cmVlcyBvciBwYXJlbnRzIGFyZSB5ZXQuICBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBzdWNoIGEKKyAqIGhhbGYtaW5pdGlhbGlzZWQgb2JqZWN0cywgdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBpbml0aWFsaXplIHRoZW0KKyAqIGJ5IGNhbGxpbmcgcGFyc2Vfb2JqZWN0KCkgb24gdGhlbS4KKyAqLworc3RydWN0IG9iamVjdCAqbG9va3VwX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKwordm9pZCAqY3JlYXRlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICpvYmopOworCit2b2lkICpvYmplY3RfYXNfdHlwZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IG9iamVjdCAqb2JqLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsIGludCBxdWlldCk7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBvYmplY3QsIGhhdmluZyBwYXJzZWQgaXQgdG8gZmluZCBvdXQgd2hhdCBpdCBpcy4KKyAqCisgKiBSZXR1cm5zIE5VTEwgaWYgdGhlIG9iamVjdCBpcyBtaXNzaW5nIG9yIGNvcnJ1cHQuCisgKi8KK3N0cnVjdCBvYmplY3QgKnBhcnNlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoKKyAqIExpa2UgcGFyc2Vfb2JqZWN0LCBidXQgd2lsbCBkaWUoKSBpbnN0ZWFkIG9mIHJldHVybmluZyBOVUxMLiBJZiB0aGUKKyAqICJuYW1lIiBwYXJhbWV0ZXIgaXMgbm90IE5VTEwsIGl0IGlzIGluY2x1ZGVkIGluIHRoZSBlcnJvciBtZXNzYWdlCisgKiAob3RoZXJ3aXNlLCB0aGUgaGV4IG9iamVjdCBJRCBpcyBnaXZlbikuCisgKi8KK3N0cnVjdCBvYmplY3QgKnBhcnNlX29iamVjdF9vcl9kaWUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpuYW1lKTsKKworLyogR2l2ZW4gdGhlIHJlc3VsdCBvZiByZWFkX3NoYTFfZmlsZSgpLCByZXR1cm5zIHRoZSBvYmplY3QgYWZ0ZXIKKyAqIHBhcnNpbmcgaXQuICBlYXRlbl9wIGluZGljYXRlcyBpZiB0aGUgb2JqZWN0IGhhcyBhIGJvcnJvd2VkIGNvcHkKKyAqIG9mIGJ1ZmZlciBhbmQgdGhlIGNhbGxlciBzaG91bGQgbm90IGZyZWUoKSBpdC4KKyAqLworc3RydWN0IG9iamVjdCAqcGFyc2Vfb2JqZWN0X2J1ZmZlcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdm9pZCAqYnVmZmVyLCBpbnQgKmVhdGVuX3ApOworCisvKiogUmV0dXJucyB0aGUgb2JqZWN0LCB3aXRoIHBvdGVudGlhbGx5IGV4Y2VzcyBtZW1vcnkgYWxsb2NhdGVkLiAqKi8KK3N0cnVjdCBvYmplY3QgKmxvb2t1cF91bmtub3duX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCitzdHJ1Y3Qgb2JqZWN0X2xpc3QgKm9iamVjdF9saXN0X2luc2VydChzdHJ1Y3Qgb2JqZWN0ICppdGVtLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKipsaXN0X3ApOworCitpbnQgb2JqZWN0X2xpc3RfY29udGFpbnMoc3RydWN0IG9iamVjdF9saXN0ICpsaXN0LCBzdHJ1Y3Qgb2JqZWN0ICpvYmopOworCit2b2lkIG9iamVjdF9saXN0X2ZyZWUoc3RydWN0IG9iamVjdF9saXN0ICoqbGlzdCk7CisKKy8qIE9iamVjdCBhcnJheSBoYW5kbGluZyAuLiAqLwordm9pZCBhZGRfb2JqZWN0X2FycmF5KHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXkpOwordm9pZCBhZGRfb2JqZWN0X2FycmF5X3dpdGhfcGF0aChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5LCB1bnNpZ25lZCBtb2RlLCBjb25zdCBjaGFyICpwYXRoKTsKKworLyoKKyAqIFJldHVybnMgTlVMTCBpZiB0aGUgYXJyYXkgaXMgZW1wdHkuIE90aGVyd2lzZSwgcmV0dXJucyB0aGUgbGFzdCBvYmplY3QKKyAqIGFmdGVyIHJlbW92aW5nIGl0cyBlbnRyeSBmcm9tIHRoZSBhcnJheS4gT3RoZXIgcmVzb3VyY2VzIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhhdCBvYmplY3QgYXJlIGxlZnQgaW4gYW4gdW5zcGVjaWZpZWQgc3RhdGUgYW5kIHNob3VsZCBub3QgYmUKKyAqIGV4YW1pbmVkLgorICovCitzdHJ1Y3Qgb2JqZWN0ICpvYmplY3RfYXJyYXlfcG9wKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5KTsKKwordHlwZWRlZiBpbnQgKCpvYmplY3RfYXJyYXlfZWFjaF9mdW5jX3QpKHN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKiwgdm9pZCAqKTsKKworLyoKKyAqIEFwcGx5IHdhbnQgdG8gZWFjaCBlbnRyeSBpbiBhcnJheSwgcmV0YWluaW5nIG9ubHkgdGhlIGVudHJpZXMgZm9yCisgKiB3aGljaCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLiAgUHJlc2VydmUgdGhlIG9yZGVyIG9mIHRoZSBlbnRyaWVzCisgKiB0aGF0IGFyZSByZXRhaW5lZC4KKyAqLwordm9pZCBvYmplY3RfYXJyYXlfZmlsdGVyKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5LAorCQkJIG9iamVjdF9hcnJheV9lYWNoX2Z1bmNfdCB3YW50LCB2b2lkICpjYl9kYXRhKTsKKworLyoKKyAqIFJlbW92ZSBmcm9tIGFycmF5IGFsbCBidXQgdGhlIGZpcnN0IGVudHJ5IHdpdGggYSBnaXZlbiBuYW1lLgorICogV2FybmluZzogdGhpcyBmdW5jdGlvbiB1c2VzIGFuIE8oTl4yKSBhbGdvcml0aG0uCisgKi8KK3ZvaWQgb2JqZWN0X2FycmF5X3JlbW92ZV9kdXBsaWNhdGVzKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5KTsKKworLyoKKyAqIFJlbW92ZSBhbnkgb2JqZWN0cyBmcm9tIHRoZSBhcnJheSwgZnJlZWluZyBhbGwgdXNlZCBtZW1vcnk7IGFmdGVyd2FyZHMKKyAqIHRoZSBhcnJheSBpcyByZWFkeSB0byBzdG9yZSBtb3JlIG9iamVjdHMgd2l0aCBhZGRfb2JqZWN0X2FycmF5KCkuCisgKi8KK3ZvaWQgb2JqZWN0X2FycmF5X2NsZWFyKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5KTsKKwordm9pZCBjbGVhcl9vYmplY3RfZmxhZ3ModW5zaWduZWQgZmxhZ3MpOworCisvKgorICogQ2xlYXIgdGhlIHNwZWNpZmllZCBvYmplY3QgZmxhZ3MgZnJvbSBhbGwgaW4tY29yZSBjb21taXQgb2JqZWN0cy4KKyAqLwordm9pZCBjbGVhcl9jb21taXRfbWFya3NfYWxsKHVuc2lnbmVkIGludCBmbGFncyk7CisKKyNlbmRpZiAvKiBPQkpFQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvb2lkLWFycmF5LmMgYi9vaWQtYXJyYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjU3YTVjCi0tLSAvZGV2L251bGwKKysrIGIvb2lkLWFycmF5LmMKQEAgLTAsMCArMSw5NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2lkLWFycmF5LmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKwordm9pZCBvaWRfYXJyYXlfYXBwZW5kKHN0cnVjdCBvaWRfYXJyYXkgKmFycmF5LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJQUxMT0NfR1JPVyhhcnJheS0+b2lkLCBhcnJheS0+bnIgKyAxLCBhcnJheS0+YWxsb2MpOworCW9pZGNweSgmYXJyYXktPm9pZFthcnJheS0+bnIrK10sIG9pZCk7CisJYXJyYXktPnNvcnRlZCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgdm9pZF9oYXNoY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJcmV0dXJuIG9pZGNtcChhLCBiKTsKK30KKworc3RhdGljIHZvaWQgb2lkX2FycmF5X3NvcnQoc3RydWN0IG9pZF9hcnJheSAqYXJyYXkpCit7CisJUVNPUlQoYXJyYXktPm9pZCwgYXJyYXktPm5yLCB2b2lkX2hhc2hjbXApOworCWFycmF5LT5zb3J0ZWQgPSAxOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMV9hY2Nlc3Moc2l6ZV90IGluZGV4LCB2b2lkICp0YWJsZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkICphcnJheSA9IHRhYmxlOworCXJldHVybiBhcnJheVtpbmRleF0uaGFzaDsKK30KKworaW50IG9pZF9hcnJheV9sb29rdXAoc3RydWN0IG9pZF9hcnJheSAqYXJyYXksIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpZiAoIWFycmF5LT5zb3J0ZWQpCisJCW9pZF9hcnJheV9zb3J0KGFycmF5KTsKKwlyZXR1cm4gc2hhMV9wb3Mob2lkLT5oYXNoLCBhcnJheS0+b2lkLCBhcnJheS0+bnIsIHNoYTFfYWNjZXNzKTsKK30KKwordm9pZCBvaWRfYXJyYXlfY2xlYXIoc3RydWN0IG9pZF9hcnJheSAqYXJyYXkpCit7CisJRlJFRV9BTkRfTlVMTChhcnJheS0+b2lkKTsKKwlhcnJheS0+bnIgPSAwOworCWFycmF5LT5hbGxvYyA9IDA7CisJYXJyYXktPnNvcnRlZCA9IDA7Cit9CisKKworaW50IG9pZF9hcnJheV9mb3JfZWFjaChzdHJ1Y3Qgb2lkX2FycmF5ICphcnJheSwKKwkJICAgICAgIGZvcl9lYWNoX29pZF9mbiBmbiwKKwkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJc2l6ZV90IGk7CisKKwkvKiBObyBvaWRfYXJyYXlfc29ydCgpIGhlcmUhIFNlZSBvaWQtYXJyYXkuaCAqLworCisJZm9yIChpID0gMDsgaSA8IGFycmF5LT5ucjsgaSsrKSB7CisJCWludCByZXQgPSBmbihhcnJheS0+b2lkICsgaSwgZGF0YSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG9pZF9hcnJheV9mb3JfZWFjaF91bmlxdWUoc3RydWN0IG9pZF9hcnJheSAqYXJyYXksCisJCQkgICAgICBmb3JfZWFjaF9vaWRfZm4gZm4sCisJCQkgICAgICB2b2lkICpkYXRhKQoreworCXNpemVfdCBpOworCisJaWYgKCFhcnJheS0+c29ydGVkKQorCQlvaWRfYXJyYXlfc29ydChhcnJheSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5yOyBpKyspIHsKKwkJaW50IHJldDsKKwkJaWYgKGkgPiAwICYmIG9pZGVxKGFycmF5LT5vaWQgKyBpLCBhcnJheS0+b2lkICsgaSAtIDEpKQorCQkJY29udGludWU7CisJCXJldCA9IGZuKGFycmF5LT5vaWQgKyBpLCBkYXRhKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIG9pZF9hcnJheV9maWx0ZXIoc3RydWN0IG9pZF9hcnJheSAqYXJyYXksCisJCSAgICAgIGZvcl9lYWNoX29pZF9mbiB3YW50LAorCQkgICAgICB2b2lkICpjYl9kYXRhKQoreworCXNpemVfdCBuciA9IGFycmF5LT5uciwgc3JjLCBkc3Q7CisJc3RydWN0IG9iamVjdF9pZCAqb2lkcyA9IGFycmF5LT5vaWQ7CisKKwlmb3IgKHNyYyA9IGRzdCA9IDA7IHNyYyA8IG5yOyBzcmMrKykgeworCQlpZiAod2FudCgmb2lkc1tzcmNdLCBjYl9kYXRhKSkgeworCQkJaWYgKHNyYyAhPSBkc3QpCisJCQkJb2lkY3B5KCZvaWRzW2RzdF0sICZvaWRzW3NyY10pOworCQkJZHN0Kys7CisJCX0KKwl9CisJYXJyYXktPm5yID0gZHN0OworfQpkaWZmIC0tZ2l0IGEvb2lkLWFycmF5LmggYi9vaWQtYXJyYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjhkMzIyCi0tLSAvZGV2L251bGwKKysrIGIvb2lkLWFycmF5LmgKQEAgLTAsMCArMSwxMDkgQEAKKyNpZm5kZWYgU0hBMV9BUlJBWV9ICisjZGVmaW5lIFNIQTFfQVJSQVlfSAorCisvKioKKyAqIFRoZSBBUEkgcHJvdmlkZXMgc3RvcmFnZSBhbmQgbWFuaXB1bGF0aW9uIG9mIHNldHMgb2Ygb2JqZWN0IGlkZW50aWZpZXJzLgorICogVGhlIGVtcGhhc2lzIGlzIG9uIHN0b3JhZ2UgYW5kIHByb2Nlc3NpbmcgZWZmaWNpZW5jeSwgbWFraW5nIHRoZW0gc3VpdGFibGUKKyAqIGZvciBsYXJnZSBsaXN0cy4gTm90ZSB0aGF0IHRoZSBvcmRlcmluZyBvZiBpdGVtcyBpcyBub3QgcHJlc2VydmVkIG92ZXIgc29tZQorICogb3BlcmF0aW9ucy4KKyAqCisgKiBFeGFtcGxlcworICogLS0tLS0tLS0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBpbnQgcHJpbnRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorICogCQkgICAgdm9pZCAqZGF0YSkKKyAqIHsKKyAqIAlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOworICogCXJldHVybiAwOyAvLyBhbHdheXMgY29udGludWUKKyAqIH0KKyAqCisgKiB2b2lkIHNvbWVfZnVuYyh2b2lkKQorICogeworICogICAgIHN0cnVjdCBvaWRfYXJyYXkgaGFzaGVzID0gT0lEX0FSUkFZX0lOSVQ7CisgKiAgICAgc3RydWN0IG9iamVjdF9pZCBvaWQ7CisgKgorICogICAgIC8vIFJlYWQgb2JqZWN0cyBpbnRvIG91ciBzZXQKKyAqICAgICB3aGlsZSAocmVhZF9vYmplY3RfZnJvbV9zdGRpbihvaWQuaGFzaCkpCisgKiAgICAgICAgIG9pZF9hcnJheV9hcHBlbmQoJmhhc2hlcywgJm9pZCk7CisgKgorICogICAgIC8vIENoZWNrIGlmIHNvbWUgb2JqZWN0cyBhcmUgaW4gb3VyIHNldAorICogICAgIHdoaWxlIChyZWFkX29iamVjdF9mcm9tX3N0ZGluKG9pZC5oYXNoKSkgeworICogICAgICAgICBpZiAob2lkX2FycmF5X2xvb2t1cCgmaGFzaGVzLCAmb2lkKSA+PSAwKQorICogICAgICAgICAgICAgcHJpbnRmKCJpdCdzIGluIHRoZXJlIVxuIik7CisgKgorICogICAgICAgICAgLy8gUHJpbnQgdGhlIHVuaXF1ZSBzZXQgb2Ygb2JqZWN0cy4gV2UgY291bGQgYWxzbyBoYXZlCisgKiAgICAgICAgICAvLyBhdm9pZGVkIGFkZGluZyBkdXBsaWNhdGUgb2JqZWN0cyBpbiB0aGUgZmlyc3QgcGxhY2UsCisgKiAgICAgICAgICAvLyBidXQgd2Ugd291bGQgZW5kIHVwIHJlLXNvcnRpbmcgdGhlIGFycmF5IHJlcGVhdGVkbHkuCisgKiAgICAgICAgICAvLyBJbnN0ZWFkLCB0aGlzIHdpbGwgc29ydCBvbmNlIGFuZCB0aGVuIHNraXAgZHVwbGljYXRlcworICogICAgICAgICAgLy8gaW4gbGluZWFyIHRpbWUuCisgKgorICogICAgICAgICBvaWRfYXJyYXlfZm9yX2VhY2hfdW5pcXVlKCZoYXNoZXMsIHByaW50X2NhbGxiYWNrLCBOVUxMKTsKKyAqICAgICB9CisgKi8KKworLyoqCisgKiBBIHNpbmdsZSBhcnJheSBvZiBvYmplY3QgSURzLiBUaGlzIHNob3VsZCBiZSBpbml0aWFsaXplZCBieSBhc3NpZ25tZW50IGZyb20KKyAqIGBPSURfQVJSQVlfSU5JVGAuIFRoZSBgb2lkYCBtZW1iZXIgY29udGFpbnMgdGhlIGFjdHVhbCBkYXRhLiBUaGUgYG5yYCBtZW1iZXIKKyAqIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHNldC4gVGhlIGBhbGxvY2AgYW5kIGBzb3J0ZWRgIG1lbWJlcnMKKyAqIGFyZSB1c2VkIGludGVybmFsbHksIGFuZCBzaG91bGQgbm90IGJlIG5lZWRlZCBieSBBUEkgY2FsbGVycy4KKyAqLworc3RydWN0IG9pZF9hcnJheSB7CisJc3RydWN0IG9iamVjdF9pZCAqb2lkOworCXNpemVfdCBucjsKKwlzaXplX3QgYWxsb2M7CisJaW50IHNvcnRlZDsKK307CisKKyNkZWZpbmUgT0lEX0FSUkFZX0lOSVQgeyBOVUxMLCAwLCAwLCAwIH0KKworLyoqCisgKiBBZGQgYW4gaXRlbSB0byB0aGUgc2V0LiBUaGUgb2JqZWN0IElEIHdpbGwgYmUgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5CisgKiAoYnV0IG5vdGUgdGhhdCBzb21lIG9wZXJhdGlvbnMgYmVsb3cgbWF5IGxvc2UgdGhpcyBvcmRlcmluZykuCisgKi8KK3ZvaWQgb2lkX2FycmF5X2FwcGVuZChzdHJ1Y3Qgb2lkX2FycmF5ICphcnJheSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoqCisgKiBQZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCBvZiB0aGUgYXJyYXkgZm9yIGEgc3BlY2lmaWMgb2JqZWN0IElELiBJZiBmb3VuZCwKKyAqIHJldHVybnMgdGhlIG9mZnNldCAoaW4gbnVtYmVyIG9mIGVsZW1lbnRzKSBvZiB0aGUgb2JqZWN0IElELiBJZiBub3QgZm91bmQsCisgKiByZXR1cm5zIGEgbmVnYXRpdmUgaW50ZWdlci4gSWYgdGhlIGFycmF5IGlzIG5vdCBzb3J0ZWQsIHRoaXMgZnVuY3Rpb24gaGFzCisgKiB0aGUgc2lkZSBlZmZlY3Qgb2Ygc29ydGluZyBpdC4KKyAqLworaW50IG9pZF9hcnJheV9sb29rdXAoc3RydWN0IG9pZF9hcnJheSAqYXJyYXksIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKKy8qKgorICogRnJlZSBhbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB0byB0aGUgaW5pdGlhbCwKKyAqIGVtcHR5IHN0YXRlLgorICovCit2b2lkIG9pZF9hcnJheV9jbGVhcihzdHJ1Y3Qgb2lkX2FycmF5ICphcnJheSk7CisKK3R5cGVkZWYgaW50ICgqZm9yX2VhY2hfb2lkX2ZuKShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICAgdm9pZCAqZGF0YSk7CisvKioKKyAqIEl0ZXJhdGUgb3ZlciBlYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QsIGV4ZWN1dGluZyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yCisgKiBlYWNoIG9uZS4gRG9lcyBub3Qgc29ydCB0aGUgbGlzdCwgc28gYW55IGN1c3RvbSBoYXNoIG9yZGVyIGlzIHJldGFpbmVkLgorICogSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYSBub24temVybyB2YWx1ZSwgdGhlIGl0ZXJhdGlvbiBlbmRzIGltbWVkaWF0ZWx5CisgKiBhbmQgdGhlIGNhbGxiYWNrJ3MgcmV0dXJuIGlzIHByb3BhZ2F0ZWQ7IG90aGVyd2lzZSwgMCBpcyByZXR1cm5lZC4KKyAqLworaW50IG9pZF9hcnJheV9mb3JfZWFjaChzdHJ1Y3Qgb2lkX2FycmF5ICphcnJheSwKKwkJICAgICAgIGZvcl9lYWNoX29pZF9mbiBmbiwKKwkJICAgICAgIHZvaWQgKmRhdGEpOworCisvKioKKyAqIEl0ZXJhdGUgb3ZlciBlYWNoIHVuaXF1ZSBlbGVtZW50IG9mIHRoZSBsaXN0IGluIHNvcnRlZCBvcmRlciwgYnV0IG90aGVyd2lzZQorICogYmVoYXZlIGxpa2UgYG9pZF9hcnJheV9mb3JfZWFjaGAuIElmIHRoZSBhcnJheSBpcyBub3Qgc29ydGVkLCB0aGlzIGZ1bmN0aW9uCisgKiBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIHNvcnRpbmcgaXQuCisgKi8KK2ludCBvaWRfYXJyYXlfZm9yX2VhY2hfdW5pcXVlKHN0cnVjdCBvaWRfYXJyYXkgKmFycmF5LAorCQkJICAgICAgZm9yX2VhY2hfb2lkX2ZuIGZuLAorCQkJICAgICAgdm9pZCAqZGF0YSk7CisKKy8qKgorICogQXBwbHkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGB3YW50YCB0byBlYWNoIGVudHJ5IGluIHRoZSBhcnJheSwgcmV0YWluaW5nCisgKiBvbmx5IHRoZSBlbnRyaWVzIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLiBQcmVzZXJ2ZSB0aGUgb3JkZXIKKyAqIG9mIHRoZSBlbnRyaWVzIHRoYXQgYXJlIHJldGFpbmVkLgorICovCit2b2lkIG9pZF9hcnJheV9maWx0ZXIoc3RydWN0IG9pZF9hcnJheSAqYXJyYXksCisJCSAgICAgIGZvcl9lYWNoX29pZF9mbiB3YW50LAorCQkgICAgICB2b2lkICpjYmRhdGEpOworCisjZW5kaWYgLyogU0hBMV9BUlJBWV9IICovCmRpZmYgLS1naXQgYS9vaWRtYXAuYyBiL29pZG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyM2FhMDEKLS0tIC9kZXYvbnVsbAorKysgYi9vaWRtYXAuYwpAQCAtMCwwICsxLDYxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvaWRtYXAuaCIKKworc3RhdGljIGludCBvaWRtYXBfbmVxKGNvbnN0IHZvaWQgKmhhc2htYXBfY21wX2ZuX2RhdGEsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplMSwKKwkJICAgICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmUyLAorCQkgICAgICBjb25zdCB2b2lkICprZXlkYXRhKQoreworCWNvbnN0IHN0cnVjdCBvaWRtYXBfZW50cnkgKmEsICpiOworCisJYSA9IGNvbnRhaW5lcl9vZihlMSwgY29uc3Qgc3RydWN0IG9pZG1hcF9lbnRyeSwgaW50ZXJuYWxfZW50cnkpOworCWIgPSBjb250YWluZXJfb2YoZTIsIGNvbnN0IHN0cnVjdCBvaWRtYXBfZW50cnksIGludGVybmFsX2VudHJ5KTsKKworCWlmIChrZXlkYXRhKQorCQlyZXR1cm4gIW9pZGVxKCZhLT5vaWQsIChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICopIGtleWRhdGEpOworCXJldHVybiAhb2lkZXEoJmEtPm9pZCwgJmItPm9pZCk7Cit9CisKK3ZvaWQgb2lkbWFwX2luaXQoc3RydWN0IG9pZG1hcCAqbWFwLCBzaXplX3QgaW5pdGlhbF9zaXplKQoreworCWhhc2htYXBfaW5pdCgmbWFwLT5tYXAsIG9pZG1hcF9uZXEsIE5VTEwsIGluaXRpYWxfc2l6ZSk7Cit9CisKK3ZvaWQgb2lkbWFwX2ZyZWUoc3RydWN0IG9pZG1hcCAqbWFwLCBpbnQgZnJlZV9lbnRyaWVzKQoreworCWlmICghbWFwKQorCQlyZXR1cm47CisKKwkvKiBUT0RPOiBtYWtlIG9pZG1hcCBpdHNlbGYgbm90IGRlcGVuZCBvbiBzdHJ1Y3QgbGF5b3V0cyAqLworCWhhc2htYXBfZnJlZV8oJm1hcC0+bWFwLCBmcmVlX2VudHJpZXMgPyAwIDogLTEpOworfQorCit2b2lkICpvaWRtYXBfZ2V0KGNvbnN0IHN0cnVjdCBvaWRtYXAgKm1hcCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqa2V5KQoreworCWlmICghbWFwLT5tYXAuY21wZm4pCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGhhc2htYXBfZ2V0X2Zyb21faGFzaCgmbWFwLT5tYXAsIG9pZGhhc2goa2V5KSwga2V5KTsKK30KKwordm9pZCAqb2lkbWFwX3JlbW92ZShzdHJ1Y3Qgb2lkbWFwICptYXAsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmtleSkKK3sKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnRyeTsKKworCWlmICghbWFwLT5tYXAuY21wZm4pCisJCW9pZG1hcF9pbml0KG1hcCwgMCk7CisKKwloYXNobWFwX2VudHJ5X2luaXQoJmVudHJ5LCBvaWRoYXNoKGtleSkpOworCXJldHVybiBoYXNobWFwX3JlbW92ZSgmbWFwLT5tYXAsICZlbnRyeSwga2V5KTsKK30KKwordm9pZCAqb2lkbWFwX3B1dChzdHJ1Y3Qgb2lkbWFwICptYXAsIHZvaWQgKmVudHJ5KQoreworCXN0cnVjdCBvaWRtYXBfZW50cnkgKnRvX3B1dCA9IGVudHJ5OworCisJaWYgKCFtYXAtPm1hcC5jbXBmbikKKwkJb2lkbWFwX2luaXQobWFwLCAwKTsKKworCWhhc2htYXBfZW50cnlfaW5pdCgmdG9fcHV0LT5pbnRlcm5hbF9lbnRyeSwgb2lkaGFzaCgmdG9fcHV0LT5vaWQpKTsKKwlyZXR1cm4gaGFzaG1hcF9wdXQoJm1hcC0+bWFwLCAmdG9fcHV0LT5pbnRlcm5hbF9lbnRyeSk7Cit9CmRpZmYgLS1naXQgYS9vaWRtYXAuaCBiL29pZG1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NmE4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9vaWRtYXAuaApAQCAtMCwwICsxLDkzIEBACisjaWZuZGVmIE9JRE1BUF9ICisjZGVmaW5lIE9JRE1BUF9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKworLyoKKyAqIHN0cnVjdCBvaWRtYXBfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGFuIGVudHJ5IGluIHRoZSBoYXNoIHRhYmxlLAorICogd2hpY2ggbXVzdCBiZSB1c2VkIGFzIGZpcnN0IG1lbWJlciBvZiB1c2VyIGRhdGEgc3RydWN0dXJlcy4KKyAqCisgKiBVc2VycyBzaG91bGQgc2V0IHRoZSBvaWQgZmllbGQuIG9pZG1hcF9wdXQoKSB3aWxsIHBvcHVsYXRlIHRoZQorICogaW50ZXJuYWxfZW50cnkgZmllbGQuCisgKi8KK3N0cnVjdCBvaWRtYXBfZW50cnkgeworCS8qIEZvciBpbnRlcm5hbCB1c2Ugb25seSAqLworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGludGVybmFsX2VudHJ5OworCisJc3RydWN0IG9iamVjdF9pZCBvaWQ7Cit9OworCitzdHJ1Y3Qgb2lkbWFwIHsKKwlzdHJ1Y3QgaGFzaG1hcCBtYXA7Cit9OworCisjZGVmaW5lIE9JRE1BUF9JTklUIHsgeyBOVUxMIH0gfQorCisvKgorICogSW5pdGlhbGl6ZXMgYW4gb2lkbWFwIHN0cnVjdHVyZS4KKyAqCisgKiBgbWFwYCBpcyB0aGUgb2lkbWFwIHRvIGluaXRpYWxpemUuCisgKgorICogSWYgdGhlIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGlzIGtub3duIGluIGFkdmFuY2UsIHRoZSBgaW5pdGlhbF9zaXplYAorICogcGFyYW1ldGVyIG1heSBiZSB1c2VkIHRvIHByZWFsbG9jYXRlIGEgc3VmZmljaWVudGx5IGxhcmdlIHRhYmxlIGFuZCB0aHVzCisgKiBwcmV2ZW50IGV4cGVuc2l2ZSByZXNpemluZy4gSWYgMCwgdGhlIHRhYmxlIGlzIGR5bmFtaWNhbGx5IHJlc2l6ZWQuCisgKi8KK3ZvaWQgb2lkbWFwX2luaXQoc3RydWN0IG9pZG1hcCAqbWFwLCBzaXplX3QgaW5pdGlhbF9zaXplKTsKKworLyoKKyAqIEZyZWVzIGFuIG9pZG1hcCBzdHJ1Y3R1cmUgYW5kIGFsbG9jYXRlZCBtZW1vcnkuCisgKgorICogSWYgYGZyZWVfZW50cmllc2AgaXMgdHJ1ZSwgZWFjaCBvaWRtYXBfZW50cnkgaW4gdGhlIG1hcCBpcyBmcmVlZCBhcyB3ZWxsCisgKiB1c2luZyBzdGRsaWJzIGZyZWUoKS4KKyAqLwordm9pZCBvaWRtYXBfZnJlZShzdHJ1Y3Qgb2lkbWFwICptYXAsIGludCBmcmVlX2VudHJpZXMpOworCisvKgorICogUmV0dXJucyB0aGUgb2lkbWFwIGVudHJ5IGZvciB0aGUgc3BlY2lmaWVkIG9pZCwgb3IgTlVMTCBpZiBub3QgZm91bmQuCisgKi8KK3ZvaWQgKm9pZG1hcF9nZXQoY29uc3Qgc3RydWN0IG9pZG1hcCAqbWFwLAorCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqa2V5KTsKKworLyoKKyAqIEFkZHMgb3IgcmVwbGFjZXMgYW4gb2lkbWFwIGVudHJ5LgorICoKKyAqICgoc3RydWN0IG9pZG1hcF9lbnRyeSAqKSBlbnRyeSktPmludGVybmFsX2VudHJ5IHdpbGwgYmUgcG9wdWxhdGVkIGJ5IHRoaXMKKyAqIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnMgdGhlIHJlcGxhY2VkIGVudHJ5LCBvciBOVUxMIGlmIG5vdCBmb3VuZCAoaS5lLiB0aGUgZW50cnkgd2FzIGFkZGVkKS4KKyAqLwordm9pZCAqb2lkbWFwX3B1dChzdHJ1Y3Qgb2lkbWFwICptYXAsIHZvaWQgKmVudHJ5KTsKKworLyoKKyAqIFJlbW92ZXMgYW4gb2lkbWFwIGVudHJ5IG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgb2lkLgorICoKKyAqIFJldHVybnMgdGhlIHJlbW92ZWQgZW50cnksIG9yIE5VTEwgaWYgbm90IGZvdW5kLgorICovCit2b2lkICpvaWRtYXBfcmVtb3ZlKHN0cnVjdCBvaWRtYXAgKm1hcCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqa2V5KTsKKworCitzdHJ1Y3Qgb2lkbWFwX2l0ZXIgeworCXN0cnVjdCBoYXNobWFwX2l0ZXIgaF9pdGVyOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIG9pZG1hcF9pdGVyX2luaXQoc3RydWN0IG9pZG1hcCAqbWFwLCBzdHJ1Y3Qgb2lkbWFwX2l0ZXIgKml0ZXIpCit7CisJaGFzaG1hcF9pdGVyX2luaXQoJm1hcC0+bWFwLCAmaXRlci0+aF9pdGVyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpvaWRtYXBfaXRlcl9uZXh0KHN0cnVjdCBvaWRtYXBfaXRlciAqaXRlcikKK3sKKwkvKiBUT0RPOiB0aGlzIEFQSSBjb3VsZCBiZSByZXdvcmtlZCB0byBkbyBjb21waWxlLXRpbWUgdHlwZSBjaGVja3MgKi8KKwlyZXR1cm4gKHZvaWQgKiloYXNobWFwX2l0ZXJfbmV4dCgmaXRlci0+aF9pdGVyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpvaWRtYXBfaXRlcl9maXJzdChzdHJ1Y3Qgb2lkbWFwICptYXAsCisJCQkJICAgICAgc3RydWN0IG9pZG1hcF9pdGVyICppdGVyKQoreworCW9pZG1hcF9pdGVyX2luaXQobWFwLCBpdGVyKTsKKwkvKiBUT0RPOiB0aGlzIEFQSSBjb3VsZCBiZSByZXdvcmtlZCB0byBkbyBjb21waWxlLXRpbWUgdHlwZSBjaGVja3MgKi8KKwlyZXR1cm4gKHZvaWQgKilvaWRtYXBfaXRlcl9uZXh0KGl0ZXIpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL29pZHNldC5jIGIvb2lkc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVkNGUxOAotLS0gL2Rldi9udWxsCisrKyBiL29pZHNldC5jCkBAIC0wLDAgKzEsNzcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9pZHNldC5oIgorCit2b2lkIG9pZHNldF9pbml0KHN0cnVjdCBvaWRzZXQgKnNldCwgc2l6ZV90IGluaXRpYWxfc2l6ZSkKK3sKKwltZW1zZXQoJnNldC0+c2V0LCAwLCBzaXplb2Yoc2V0LT5zZXQpKTsKKwlpZiAoaW5pdGlhbF9zaXplKQorCQlraF9yZXNpemVfb2lkX3NldCgmc2V0LT5zZXQsIGluaXRpYWxfc2l6ZSk7Cit9CisKK2ludCBvaWRzZXRfY29udGFpbnMoY29uc3Qgc3RydWN0IG9pZHNldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJa2hpdGVyX3QgcG9zID0ga2hfZ2V0X29pZF9zZXQoJnNldC0+c2V0LCAqb2lkKTsKKwlyZXR1cm4gcG9zICE9IGtoX2VuZCgmc2V0LT5zZXQpOworfQorCitpbnQgb2lkc2V0X2luc2VydChzdHJ1Y3Qgb2lkc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpbnQgYWRkZWQ7CisJa2hfcHV0X29pZF9zZXQoJnNldC0+c2V0LCAqb2lkLCAmYWRkZWQpOworCXJldHVybiAhYWRkZWQ7Cit9CisKK2ludCBvaWRzZXRfcmVtb3ZlKHN0cnVjdCBvaWRzZXQgKnNldCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWtoaXRlcl90IHBvcyA9IGtoX2dldF9vaWRfc2V0KCZzZXQtPnNldCwgKm9pZCk7CisJaWYgKHBvcyA9PSBraF9lbmQoJnNldC0+c2V0KSkKKwkJcmV0dXJuIDA7CisJa2hfZGVsX29pZF9zZXQoJnNldC0+c2V0LCBwb3MpOworCXJldHVybiAxOworfQorCit2b2lkIG9pZHNldF9jbGVhcihzdHJ1Y3Qgb2lkc2V0ICpzZXQpCit7CisJa2hfcmVsZWFzZV9vaWRfc2V0KCZzZXQtPnNldCk7CisJb2lkc2V0X2luaXQoc2V0LCAwKTsKK30KKworaW50IG9pZHNldF9zaXplKHN0cnVjdCBvaWRzZXQgKnNldCkKK3sKKwlyZXR1cm4ga2hfc2l6ZSgmc2V0LT5zZXQpOworfQorCit2b2lkIG9pZHNldF9wYXJzZV9maWxlKHN0cnVjdCBvaWRzZXQgKnNldCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlGSUxFICpmcDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlmcCA9IGZvcGVuKHBhdGgsICJyIik7CisJaWYgKCFmcCkKKwkJZGllKCJjb3VsZCBub3Qgb3BlbiBvYmplY3QgbmFtZSBsaXN0OiAlcyIsIHBhdGgpOworCXdoaWxlICghc3RyYnVmX2dldGxpbmUoJnNiLCBmcCkpIHsKKwkJY29uc3QgY2hhciAqcDsKKwkJY29uc3QgY2hhciAqbmFtZTsKKworCQkvKgorCQkgKiBBbGxvdyB0cmFpbGluZyBjb21tZW50cywgbGVhZGluZyB3aGl0ZXNwYWNlCisJCSAqIChpbmNsdWRpbmcgYmVmb3JlIGNvbW1pdHMpLCBhbmQgZW1wdHkgb3Igd2hpdGVzcGFjZQorCQkgKiBvbmx5IGxpbmVzLgorCQkgKi8KKwkJbmFtZSA9IHN0cmNocihzYi5idWYsICcjJyk7CisJCWlmIChuYW1lKQorCQkJc3RyYnVmX3NldGxlbigmc2IsIG5hbWUgLSBzYi5idWYpOworCQlzdHJidWZfdHJpbSgmc2IpOworCQlpZiAoIXNiLmxlbikKKwkJCWNvbnRpbnVlOworCisJCWlmIChwYXJzZV9vaWRfaGV4KHNiLmJ1ZiwgJm9pZCwgJnApIHx8ICpwICE9ICdcMCcpCisJCQlkaWUoImludmFsaWQgb2JqZWN0IG5hbWU6ICVzIiwgc2IuYnVmKTsKKwkJb2lkc2V0X2luc2VydChzZXQsICZvaWQpOworCX0KKwlpZiAoZmVycm9yKGZwKSkKKwkJZGllX2Vycm5vKCJDb3VsZCBub3QgcmVhZCAnJXMnIiwgcGF0aCk7CisJZmNsb3NlKGZwKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQpkaWZmIC0tZ2l0IGEvb2lkc2V0LmggYi9vaWRzZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDlhZTdhCi0tLSAvZGV2L251bGwKKysrIGIvb2lkc2V0LmgKQEAgLTAsMCArMSwxMDQgQEAKKyNpZm5kZWYgT0lEU0VUX0gKKyNkZWZpbmUgT0lEU0VUX0gKKworI2luY2x1ZGUgImtoYXNoLmgiCisKKy8qKgorICogVGhpcyBBUEkgaXMgc2ltaWxhciB0byBvaWQtYXJyYXksIGluIHRoYXQgaXQgbWFpbnRhaW5zIGEgc2V0IG9mIG9iamVjdCBpZHMKKyAqIGluIGEgbWVtb3J5LWVmZmljaWVudCB3YXkuIFRoZSBtYWpvciBkaWZmZXJlbmNlcyBhcmU6CisgKgorICogICAxLiBJdCB1c2VzIGEgaGFzaCwgc28gd2UgY2FuIGRvIG9ubGluZSBkdXBsaWNhdGUgcmVtb3ZhbCwgcmF0aGVyIHRoYW4KKyAqICAgICAgc29ydC1hbmQtdW5pcSBhdCB0aGUgZW5kLiBUaGlzIGNhbiByZWR1Y2UgbWVtb3J5IGZvb3RwcmludCBpZiB5b3UgaGF2ZQorICogICAgICBhIGxhcmdlIGxpc3Qgb2Ygb2lkcyB3aXRoIG1hbnkgZHVwbGljYXRlcy4KKyAqCisgKiAgIDIuIFRoZSBwZXItdW5pcXVlLW9pZCBtZW1vcnkgZm9vdHByaW50IGlzIHNsaWdodGx5IGhpZ2hlciBkdWUgdG8gaGFzaAorICogICAgICB0YWJsZSBvdmVyaGVhZC4KKyAqLworCisvKioKKyAqIEEgc2luZ2xlIG9pZHNldDsgc2hvdWxkIGJlIHplcm8taW5pdGlhbGl6ZWQgKG9yIHVzZSBPSURTRVRfSU5JVCkuCisgKi8KK3N0cnVjdCBvaWRzZXQgeworCWtoX29pZF9zZXRfdCBzZXQ7Cit9OworCisjZGVmaW5lIE9JRFNFVF9JTklUIHsgeyAwIH0gfQorCisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgb2lkc2V0IHN0cnVjdHVyZSBgc2V0YC4KKyAqCisgKiBJZiBgaW5pdGlhbF9zaXplYCBpcyBiaWdnZXIgdGhhbiAwIHRoZW4gcHJlYWxsb2NhdGUgdG8gYWxsb3cgaW5zZXJ0aW5nCisgKiB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBlbGVtZW50cyB3aXRob3V0IGZ1cnRoZXIgYWxsb2NhdGlvbnMuCisgKi8KK3ZvaWQgb2lkc2V0X2luaXQoc3RydWN0IG9pZHNldCAqc2V0LCBzaXplX3QgaW5pdGlhbF9zaXplKTsKKworLyoqCisgKiBSZXR1cm5zIHRydWUgaWZmIGBzZXRgIGNvbnRhaW5zIGBvaWRgLgorICovCitpbnQgb2lkc2V0X2NvbnRhaW5zKGNvbnN0IHN0cnVjdCBvaWRzZXQgKnNldCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoqCisgKiBJbnNlcnQgdGhlIG9pZCBpbnRvIHRoZSBzZXQ7IGEgY29weSBpcyBtYWRlLCBzbyAib2lkIiBkb2VzIG5vdCBuZWVkCisgKiB0byBwZXJzaXN0IGFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICoKKyAqIFJldHVybnMgMSBpZiB0aGUgb2lkIHdhcyBhbHJlYWR5IGluIHRoZSBzZXQsIDAgb3RoZXJ3aXNlLiBUaGlzIGNhbiBiZSB1c2VkCisgKiB0byBwZXJmb3JtIGFuIGVmZmljaWVudCBjaGVjay1hbmQtYWRkLgorICovCitpbnQgb2lkc2V0X2luc2VydChzdHJ1Y3Qgb2lkc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKKy8qKgorICogUmVtb3ZlIHRoZSBvaWQgZnJvbSB0aGUgc2V0LgorICoKKyAqIFJldHVybnMgMSBpZiB0aGUgb2lkIHdhcyBwcmVzZW50IGluIHRoZSBzZXQsIDAgb3RoZXJ3aXNlLgorICovCitpbnQgb2lkc2V0X3JlbW92ZShzdHJ1Y3Qgb2lkc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG9pZHMgaW4gdGhlIHNldC4KKyAqLworaW50IG9pZHNldF9zaXplKHN0cnVjdCBvaWRzZXQgKnNldCk7CisKKy8qKgorICogUmVtb3ZlIGFsbCBlbnRyaWVzIGZyb20gdGhlIG9pZHNldCwgZnJlZWluZyBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aAorICogaXQuCisgKi8KK3ZvaWQgb2lkc2V0X2NsZWFyKHN0cnVjdCBvaWRzZXQgKnNldCk7CisKKy8qKgorICogQWRkIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSAncGF0aCcgdG8gYW4gaW5pdGlhbGl6ZWQgb2lkc2V0LiAgRWFjaCBsaW5lIGlzCisgKiBhbiB1bmFiYnJldmlhdGVkIG9iamVjdCBuYW1lLiAgQ29tbWVudHMgYmVnaW4gd2l0aCAnIycsIGFuZCB0cmFpbGluZyBjb21tZW50cworICogYXJlIGFsbG93ZWQuICBMZWFkaW5nIHdoaXRlc3BhY2UgYW5kIGVtcHR5IG9yIHdoaXRlLXNwYWNlIG9ubHkgbGluZXMgYXJlCisgKiBpZ25vcmVkLgorICovCit2b2lkIG9pZHNldF9wYXJzZV9maWxlKHN0cnVjdCBvaWRzZXQgKnNldCwgY29uc3QgY2hhciAqcGF0aCk7CisKK3N0cnVjdCBvaWRzZXRfaXRlciB7CisJa2hfb2lkX3NldF90ICpzZXQ7CisJa2hpdGVyX3QgaXRlcjsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvaWRzZXRfaXRlcl9pbml0KHN0cnVjdCBvaWRzZXQgKnNldCwKKwkJCQkgICAgc3RydWN0IG9pZHNldF9pdGVyICppdGVyKQoreworCWl0ZXItPnNldCA9ICZzZXQtPnNldDsKKwlpdGVyLT5pdGVyID0ga2hfYmVnaW4oaXRlci0+c2V0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWRzZXRfaXRlcl9uZXh0KHN0cnVjdCBvaWRzZXRfaXRlciAqaXRlcikKK3sKKwlmb3IgKDsgaXRlci0+aXRlciAhPSBraF9lbmQoaXRlci0+c2V0KTsgaXRlci0+aXRlcisrKSB7CisJCWlmIChraF9leGlzdChpdGVyLT5zZXQsIGl0ZXItPml0ZXIpKQorCQkJcmV0dXJuICZraF9rZXkoaXRlci0+c2V0LCBpdGVyLT5pdGVyKyspOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWRzZXRfaXRlcl9maXJzdChzdHJ1Y3Qgb2lkc2V0ICpzZXQsCisJCQkJCQkgIHN0cnVjdCBvaWRzZXRfaXRlciAqaXRlcikKK3sKKwlvaWRzZXRfaXRlcl9pbml0KHNldCwgaXRlcik7CisJcmV0dXJuIG9pZHNldF9pdGVyX25leHQoaXRlcik7Cit9CisKKyNlbmRpZiAvKiBPSURTRVRfSCAqLwpkaWZmIC0tZ2l0IGEvcGFjay1iaXRtYXAtd3JpdGUuYyBiL3BhY2stYml0bWFwLXdyaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdhNDk2NAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2stYml0bWFwLXdyaXRlLmMKQEAgLTAsMCArMSw1NTcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAicGFjay1yZXZpbmRleC5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJwYWNrLWJpdG1hcC5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisjaW5jbHVkZSAicGFjay1vYmplY3RzLmgiCisjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisKK3N0cnVjdCBiaXRtYXBwZWRfY29tbWl0IHsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGV3YWhfYml0bWFwICpiaXRtYXA7CisJc3RydWN0IGV3YWhfYml0bWFwICp3cml0ZV9hczsKKwlpbnQgZmxhZ3M7CisJaW50IHhvcl9vZmZzZXQ7CisJdWludDMyX3QgY29tbWl0X3BvczsKK307CisKK3N0cnVjdCBiaXRtYXBfd3JpdGVyIHsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmNvbW1pdHM7CisJc3RydWN0IGV3YWhfYml0bWFwICp0cmVlczsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmJsb2JzOworCXN0cnVjdCBld2FoX2JpdG1hcCAqdGFnczsKKworCWtoX29pZF9tYXBfdCAqYml0bWFwczsKKwlraF9vaWRfbWFwX3QgKnJldXNlZDsKKwlzdHJ1Y3QgcGFja2luZ19kYXRhICp0b19wYWNrOworCisJc3RydWN0IGJpdG1hcHBlZF9jb21taXQgKnNlbGVjdGVkOworCXVuc2lnbmVkIGludCBzZWxlY3RlZF9uciwgc2VsZWN0ZWRfYWxsb2M7CisKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOworCWludCBzaG93X3Byb2dyZXNzOworCXVuc2lnbmVkIGNoYXIgcGFja19jaGVja3N1bVtHSVRfTUFYX1JBV1NaXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgYml0bWFwX3dyaXRlciB3cml0ZXI7CisKK3ZvaWQgYml0bWFwX3dyaXRlcl9zaG93X3Byb2dyZXNzKGludCBzaG93KQoreworCXdyaXRlci5zaG93X3Byb2dyZXNzID0gc2hvdzsKK30KKworLyoqCisgKiBCdWlsZCB0aGUgaW5pdGlhbCB0eXBlIGluZGV4IGZvciB0aGUgcGFja2ZpbGUKKyAqLwordm9pZCBiaXRtYXBfd3JpdGVyX2J1aWxkX3R5cGVfaW5kZXgoc3RydWN0IHBhY2tpbmdfZGF0YSAqdG9fcGFjaywKKwkJCQkgICAgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqaW5kZXgsCisJCQkJICAgIHVpbnQzMl90IGluZGV4X25yKQoreworCXVpbnQzMl90IGk7CisKKwl3cml0ZXIuY29tbWl0cyA9IGV3YWhfbmV3KCk7CisJd3JpdGVyLnRyZWVzID0gZXdhaF9uZXcoKTsKKwl3cml0ZXIuYmxvYnMgPSBld2FoX25ldygpOworCXdyaXRlci50YWdzID0gZXdhaF9uZXcoKTsKKwlBTExPQ19BUlJBWSh0b19wYWNrLT5pbl9wYWNrX3BvcywgdG9fcGFjay0+bnJfb2JqZWN0cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXhfbnI7ICsraSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSA9IChzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICopaW5kZXhbaV07CisJCWVudW0gb2JqZWN0X3R5cGUgcmVhbF90eXBlOworCisJCW9lX3NldF9pbl9wYWNrX3Bvcyh0b19wYWNrLCBlbnRyeSwgaSk7CisKKwkJc3dpdGNoIChvZV90eXBlKGVudHJ5KSkgeworCQljYXNlIE9CSl9DT01NSVQ6CisJCWNhc2UgT0JKX1RSRUU6CisJCWNhc2UgT0JKX0JMT0I6CisJCWNhc2UgT0JKX1RBRzoKKwkJCXJlYWxfdHlwZSA9IG9lX3R5cGUoZW50cnkpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJlYWxfdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0b19wYWNrLT5yZXBvLAorCQkJCQkJICAgICZlbnRyeS0+aWR4Lm9pZCwgTlVMTCk7CisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAocmVhbF90eXBlKSB7CisJCWNhc2UgT0JKX0NPTU1JVDoKKwkJCWV3YWhfc2V0KHdyaXRlci5jb21taXRzLCBpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKX1RSRUU6CisJCQlld2FoX3NldCh3cml0ZXIudHJlZXMsIGkpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpfQkxPQjoKKwkJCWV3YWhfc2V0KHdyaXRlci5ibG9icywgaSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSl9UQUc6CisJCQlld2FoX3NldCh3cml0ZXIudGFncywgaSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGllKCJNaXNzaW5nIHR5cGUgaW5mb3JtYXRpb24gZm9yICVzICglZC8lZCkiLAorCQkJICAgIG9pZF90b19oZXgoJmVudHJ5LT5pZHgub2lkKSwgcmVhbF90eXBlLAorCQkJICAgIG9lX3R5cGUoZW50cnkpKTsKKwkJfQorCX0KK30KKworLyoqCisgKiBDb21wdXRlIHRoZSBhY3R1YWwgYml0bWFwcworICovCitzdGF0aWMgc3RydWN0IG9iamVjdCAqKnNlZW5fb2JqZWN0czsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2Vlbl9vYmplY3RzX25yLCBzZWVuX29iamVjdHNfYWxsb2M7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXNoX2JpdG1hcHBlZF9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgZXdhaF9iaXRtYXAgKnJldXNlZCkKK3sKKwlpZiAod3JpdGVyLnNlbGVjdGVkX25yID49IHdyaXRlci5zZWxlY3RlZF9hbGxvYykgeworCQl3cml0ZXIuc2VsZWN0ZWRfYWxsb2MgPSAod3JpdGVyLnNlbGVjdGVkX2FsbG9jICsgMzIpICogMjsKKwkJUkVBTExPQ19BUlJBWSh3cml0ZXIuc2VsZWN0ZWQsIHdyaXRlci5zZWxlY3RlZF9hbGxvYyk7CisJfQorCisJd3JpdGVyLnNlbGVjdGVkW3dyaXRlci5zZWxlY3RlZF9ucl0uY29tbWl0ID0gY29tbWl0OworCXdyaXRlci5zZWxlY3RlZFt3cml0ZXIuc2VsZWN0ZWRfbnJdLmJpdG1hcCA9IHJldXNlZDsKKwl3cml0ZXIuc2VsZWN0ZWRbd3JpdGVyLnNlbGVjdGVkX25yXS5mbGFncyA9IDA7CisKKwl3cml0ZXIuc2VsZWN0ZWRfbnIrKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hcmtfYXNfc2VlbihzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QpCit7CisJQUxMT0NfR1JPVyhzZWVuX29iamVjdHMsIHNlZW5fb2JqZWN0c19uciArIDEsIHNlZW5fb2JqZWN0c19hbGxvYyk7CisJc2Vlbl9vYmplY3RzW3NlZW5fb2JqZWN0c19ucisrXSA9IG9iamVjdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2FsbF9zZWVuKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHNlZW5fb2JqZWN0c19ucjsgKytpKSB7CisJCXNlZW5fb2JqZWN0c1tpXS0+ZmxhZ3MgJj0gfihTRUVOIHwgQURERUQgfCBTSE9XTik7CisJfQorCXNlZW5fb2JqZWN0c19uciA9IDA7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBmaW5kX29iamVjdF9wb3MoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5ID0gcGFja2xpc3RfZmluZCh3cml0ZXIudG9fcGFjaywgb2lkKTsKKworCWlmICghZW50cnkpIHsKKwkJZGllKCJGYWlsZWQgdG8gd3JpdGUgYml0bWFwIGluZGV4LiBQYWNrZmlsZSBkb2Vzbid0IGhhdmUgZnVsbCBjbG9zdXJlICIKKwkJCSIob2JqZWN0ICVzIGlzIG1pc3NpbmcpIiwgb2lkX3RvX2hleChvaWQpKTsKKwl9CisKKwlyZXR1cm4gb2VfaW5fcGFja19wb3Mod3JpdGVyLnRvX3BhY2ssIGVudHJ5KTsKK30KKworc3RhdGljIHZvaWQgc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqZWN0LCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBiaXRtYXAgKmJhc2UgPSBkYXRhOworCWJpdG1hcF9zZXQoYmFzZSwgZmluZF9vYmplY3RfcG9zKCZvYmplY3QtPm9pZCkpOworCW1hcmtfYXNfc2VlbihvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7CisJbWFya19hc19zZWVuKChzdHJ1Y3Qgb2JqZWN0ICopY29tbWl0KTsKK30KKworc3RhdGljIGludAorYWRkX3RvX2luY2x1ZGVfc2V0KHN0cnVjdCBiaXRtYXAgKmJhc2UsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlraGl0ZXJfdCBoYXNoX3BvczsKKwl1aW50MzJfdCBiaXRtYXBfcG9zID0gZmluZF9vYmplY3RfcG9zKCZjb21taXQtPm9iamVjdC5vaWQpOworCisJaWYgKGJpdG1hcF9nZXQoYmFzZSwgYml0bWFwX3BvcykpCisJCXJldHVybiAwOworCisJaGFzaF9wb3MgPSBraF9nZXRfb2lkX21hcCh3cml0ZXIuYml0bWFwcywgY29tbWl0LT5vYmplY3Qub2lkKTsKKwlpZiAoaGFzaF9wb3MgPCBraF9lbmQod3JpdGVyLmJpdG1hcHMpKSB7CisJCXN0cnVjdCBiaXRtYXBwZWRfY29tbWl0ICpiYyA9IGtoX3ZhbHVlKHdyaXRlci5iaXRtYXBzLCBoYXNoX3Bvcyk7CisJCWJpdG1hcF9vcl9ld2FoKGJhc2UsIGJjLT5iaXRtYXApOworCQlyZXR1cm4gMDsKKwl9CisKKwliaXRtYXBfc2V0KGJhc2UsIGJpdG1hcF9wb3MpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitzaG91bGRfaW5jbHVkZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKl9kYXRhKQoreworCXN0cnVjdCBiaXRtYXAgKmJhc2UgPSBfZGF0YTsKKworCWlmICghYWRkX3RvX2luY2x1ZGVfc2V0KGJhc2UsIGNvbW1pdCkpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7CisKKwkJbWFya19hc19zZWVuKChzdHJ1Y3Qgb2JqZWN0ICopY29tbWl0KTsKKworCQl3aGlsZSAocGFyZW50KSB7CisJCQlwYXJlbnQtPml0ZW0tPm9iamVjdC5mbGFncyB8PSBTRUVOOworCQkJbWFya19hc19zZWVuKChzdHJ1Y3Qgb2JqZWN0ICopcGFyZW50LT5pdGVtKTsKKwkJCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKKwkJfQorCisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBjb21wdXRlX3hvcl9vZmZzZXRzKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IGludCBNQVhfWE9SX09GRlNFVF9TRUFSQ0ggPSAxMDsKKworCWludCBpLCBuZXh0ID0gMDsKKworCXdoaWxlIChuZXh0IDwgd3JpdGVyLnNlbGVjdGVkX25yKSB7CisJCXN0cnVjdCBiaXRtYXBwZWRfY29tbWl0ICpzdG9yZWQgPSAmd3JpdGVyLnNlbGVjdGVkW25leHRdOworCisJCWludCBiZXN0X29mZnNldCA9IDA7CisJCXN0cnVjdCBld2FoX2JpdG1hcCAqYmVzdF9iaXRtYXAgPSBzdG9yZWQtPmJpdG1hcDsKKwkJc3RydWN0IGV3YWhfYml0bWFwICp0ZXN0X3hvcjsKKworCQlmb3IgKGkgPSAxOyBpIDw9IE1BWF9YT1JfT0ZGU0VUX1NFQVJDSDsgKytpKSB7CisJCQlpbnQgY3VyciA9IG5leHQgLSBpOworCisJCQlpZiAoY3VyciA8IDApCisJCQkJYnJlYWs7CisKKwkJCXRlc3RfeG9yID0gZXdhaF9wb29sX25ldygpOworCQkJZXdhaF94b3Iod3JpdGVyLnNlbGVjdGVkW2N1cnJdLmJpdG1hcCwgc3RvcmVkLT5iaXRtYXAsIHRlc3RfeG9yKTsKKworCQkJaWYgKHRlc3RfeG9yLT5idWZmZXJfc2l6ZSA8IGJlc3RfYml0bWFwLT5idWZmZXJfc2l6ZSkgeworCQkJCWlmIChiZXN0X2JpdG1hcCAhPSBzdG9yZWQtPmJpdG1hcCkKKwkJCQkJZXdhaF9wb29sX2ZyZWUoYmVzdF9iaXRtYXApOworCisJCQkJYmVzdF9iaXRtYXAgPSB0ZXN0X3hvcjsKKwkJCQliZXN0X29mZnNldCA9IGk7CisJCQl9IGVsc2UgeworCQkJCWV3YWhfcG9vbF9mcmVlKHRlc3RfeG9yKTsKKwkJCX0KKwkJfQorCisJCXN0b3JlZC0+eG9yX29mZnNldCA9IGJlc3Rfb2Zmc2V0OworCQlzdG9yZWQtPndyaXRlX2FzID0gYmVzdF9iaXRtYXA7CisKKwkJbmV4dCsrOworCX0KK30KKwordm9pZCBiaXRtYXBfd3JpdGVyX2J1aWxkKHN0cnVjdCBwYWNraW5nX2RhdGEgKnRvX3BhY2spCit7CisJc3RhdGljIGNvbnN0IGRvdWJsZSBSRVVTRV9CSVRNQVBfVEhSRVNIT0xEID0gMC4yOworCisJaW50IGksIHJldXNlX2FmdGVyLCBuZWVkX3Jlc2V0OworCXN0cnVjdCBiaXRtYXAgKmJhc2UgPSBiaXRtYXBfbmV3KCk7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisKKwl3cml0ZXIuYml0bWFwcyA9IGtoX2luaXRfb2lkX21hcCgpOworCXdyaXRlci50b19wYWNrID0gdG9fcGFjazsKKworCWlmICh3cml0ZXIuc2hvd19wcm9ncmVzcykKKwkJd3JpdGVyLnByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3MoIkJ1aWxkaW5nIGJpdG1hcHMiLCB3cml0ZXIuc2VsZWN0ZWRfbnIpOworCisJcmVwb19pbml0X3JldmlzaW9ucyh0b19wYWNrLT5yZXBvLCAmcmV2cywgTlVMTCk7CisJcmV2cy50YWdfb2JqZWN0cyA9IDE7CisJcmV2cy50cmVlX29iamVjdHMgPSAxOworCXJldnMuYmxvYl9vYmplY3RzID0gMTsKKwlyZXZzLm5vX3dhbGsgPSAwOworCisJcmV2cy5pbmNsdWRlX2NoZWNrID0gc2hvdWxkX2luY2x1ZGU7CisJcmVzZXRfcmV2aXNpb25fd2FsaygpOworCisJcmV1c2VfYWZ0ZXIgPSB3cml0ZXIuc2VsZWN0ZWRfbnIgKiBSRVVTRV9CSVRNQVBfVEhSRVNIT0xEOworCW5lZWRfcmVzZXQgPSAwOworCisJZm9yIChpID0gd3JpdGVyLnNlbGVjdGVkX25yIC0gMTsgaSA+PSAwOyAtLWkpIHsKKwkJc3RydWN0IGJpdG1hcHBlZF9jb21taXQgKnN0b3JlZDsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0OworCisJCWtoaXRlcl90IGhhc2hfcG9zOworCQlpbnQgaGFzaF9yZXQ7CisKKwkJc3RvcmVkID0gJndyaXRlci5zZWxlY3RlZFtpXTsKKwkJb2JqZWN0ID0gKHN0cnVjdCBvYmplY3QgKilzdG9yZWQtPmNvbW1pdDsKKworCQlpZiAoc3RvcmVkLT5iaXRtYXAgPT0gTlVMTCkgeworCQkJaWYgKGkgPCB3cml0ZXIuc2VsZWN0ZWRfbnIgLSAxICYmCisJCQkgICAgKG5lZWRfcmVzZXQgfHwKKwkJCSAgICAgIWluX21lcmdlX2Jhc2VzKHdyaXRlci5zZWxlY3RlZFtpICsgMV0uY29tbWl0LAorCQkJCQkgICAgIHN0b3JlZC0+Y29tbWl0KSkpIHsKKwkJCSAgICBiaXRtYXBfcmVzZXQoYmFzZSk7CisJCQkgICAgcmVzZXRfYWxsX3NlZW4oKTsKKwkJCX0KKworCQkJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXZzLCBvYmplY3QsICIiKTsKKwkJCXJldnMuaW5jbHVkZV9jaGVja19kYXRhID0gYmFzZTsKKworCQkJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCQkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCisJCQl0cmF2ZXJzZV9jb21taXRfbGlzdCgmcmV2cywgc2hvd19jb21taXQsIHNob3dfb2JqZWN0LCBiYXNlKTsKKworCQkJb2JqZWN0X2FycmF5X2NsZWFyKCZyZXZzLnBlbmRpbmcpOworCisJCQlzdG9yZWQtPmJpdG1hcCA9IGJpdG1hcF90b19ld2FoKGJhc2UpOworCQkJbmVlZF9yZXNldCA9IDA7CisJCX0gZWxzZQorCQkJbmVlZF9yZXNldCA9IDE7CisKKwkJaWYgKGkgPj0gcmV1c2VfYWZ0ZXIpCisJCQlzdG9yZWQtPmZsYWdzIHw9IEJJVE1BUF9GTEFHX1JFVVNFOworCisJCWhhc2hfcG9zID0ga2hfcHV0X29pZF9tYXAod3JpdGVyLmJpdG1hcHMsIG9iamVjdC0+b2lkLCAmaGFzaF9yZXQpOworCQlpZiAoaGFzaF9yZXQgPT0gMCkKKwkJCWRpZSgiRHVwbGljYXRlIGVudHJ5IHdoZW4gd3JpdGluZyBpbmRleDogJXMiLAorCQkJICAgIG9pZF90b19oZXgoJm9iamVjdC0+b2lkKSk7CisKKwkJa2hfdmFsdWUod3JpdGVyLmJpdG1hcHMsIGhhc2hfcG9zKSA9IHN0b3JlZDsKKwkJZGlzcGxheV9wcm9ncmVzcyh3cml0ZXIucHJvZ3Jlc3MsIHdyaXRlci5zZWxlY3RlZF9uciAtIGkpOworCX0KKworCWJpdG1hcF9mcmVlKGJhc2UpOworCXN0b3BfcHJvZ3Jlc3MoJndyaXRlci5wcm9ncmVzcyk7CisKKwljb21wdXRlX3hvcl9vZmZzZXRzKCk7Cit9CisKKy8qKgorICogU2VsZWN0IHRoZSBjb21taXRzIHRoYXQgd2lsbCBiZSBiaXRtYXBwZWQKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbmV4dF9jb21taXRfaW5kZXgodW5zaWduZWQgaW50IGlkeCkKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IE1JTl9DT01NSVRTID0gMTAwOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgTUFYX0NPTU1JVFMgPSA1MDAwOworCisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBNVVNUX1JFR0lPTiA9IDEwMDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IE1JTl9SRUdJT04gPSAyMDAwMDsKKworCXVuc2lnbmVkIGludCBvZmZzZXQsIG5leHQ7CisKKwlpZiAoaWR4IDw9IE1VU1RfUkVHSU9OKQorCQlyZXR1cm4gMDsKKworCWlmIChpZHggPD0gTUlOX1JFR0lPTikgeworCQlvZmZzZXQgPSBpZHggLSBNVVNUX1JFR0lPTjsKKwkJcmV0dXJuIChvZmZzZXQgPCBNSU5fQ09NTUlUUykgPyBvZmZzZXQgOiBNSU5fQ09NTUlUUzsKKwl9CisKKwlvZmZzZXQgPSBpZHggLSBNSU5fUkVHSU9OOworCW5leHQgPSAob2Zmc2V0IDwgTUFYX0NPTU1JVFMpID8gb2Zmc2V0IDogTUFYX0NPTU1JVFM7CisKKwlyZXR1cm4gKG5leHQgPiBNSU5fQ09NTUlUUykgPyBuZXh0IDogTUlOX0NPTU1JVFM7Cit9CisKK3N0YXRpYyBpbnQgZGF0ZV9jb21wYXJlKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwlzdHJ1Y3QgY29tbWl0ICphID0gKihzdHJ1Y3QgY29tbWl0ICoqKV9hOworCXN0cnVjdCBjb21taXQgKmIgPSAqKHN0cnVjdCBjb21taXQgKiopX2I7CisJcmV0dXJuIChsb25nKWItPmRhdGUgLSAobG9uZylhLT5kYXRlOworfQorCit2b2lkIGJpdG1hcF93cml0ZXJfcmV1c2VfYml0bWFwcyhzdHJ1Y3QgcGFja2luZ19kYXRhICp0b19wYWNrKQoreworCXN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQ7CisJaWYgKCEoYml0bWFwX2dpdCA9IHByZXBhcmVfYml0bWFwX2dpdCh0b19wYWNrLT5yZXBvKSkpCisJCXJldHVybjsKKworCXdyaXRlci5yZXVzZWQgPSBraF9pbml0X29pZF9tYXAoKTsKKwlyZWJ1aWxkX2V4aXN0aW5nX2JpdG1hcHMoYml0bWFwX2dpdCwgdG9fcGFjaywgd3JpdGVyLnJldXNlZCwKKwkJCQkgd3JpdGVyLnNob3dfcHJvZ3Jlc3MpOworCS8qCisJICogTkVFRFNXT1JLOiByZWJ1aWxkX2V4aXN0aW5nX2JpdG1hcHMoKSBtYWtlcyB3cml0ZXIucmV1c2VkIHJlZmVyZW5jZQorCSAqIHNvbWUgYml0bWFwcyBpbiBiaXRtYXBfZ2l0LCBzbyB3ZSBjYW4ndCBmcmVlIHRoZSBsYXR0ZXIuCisJICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgZXdhaF9iaXRtYXAgKmZpbmRfcmV1c2VkX2JpdG1hcChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJa2hpdGVyX3QgaGFzaF9wb3M7CisKKwlpZiAoIXdyaXRlci5yZXVzZWQpCisJCXJldHVybiBOVUxMOworCisJaGFzaF9wb3MgPSBraF9nZXRfb2lkX21hcCh3cml0ZXIucmV1c2VkLCAqb2lkKTsKKwlpZiAoaGFzaF9wb3MgPj0ga2hfZW5kKHdyaXRlci5yZXVzZWQpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBraF92YWx1ZSh3cml0ZXIucmV1c2VkLCBoYXNoX3Bvcyk7Cit9CisKK3ZvaWQgYml0bWFwX3dyaXRlcl9zZWxlY3RfY29tbWl0cyhzdHJ1Y3QgY29tbWl0ICoqaW5kZXhlZF9jb21taXRzLAorCQkJCSAgdW5zaWduZWQgaW50IGluZGV4ZWRfY29tbWl0c19uciwKKwkJCQkgIGludCBtYXhfYml0bWFwcykKK3sKKwl1bnNpZ25lZCBpbnQgaSA9IDAsIGosIG5leHQ7CisKKwlRU09SVChpbmRleGVkX2NvbW1pdHMsIGluZGV4ZWRfY29tbWl0c19uciwgZGF0ZV9jb21wYXJlKTsKKworCWlmICh3cml0ZXIuc2hvd19wcm9ncmVzcykKKwkJd3JpdGVyLnByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3MoIlNlbGVjdGluZyBiaXRtYXAgY29tbWl0cyIsIDApOworCisJaWYgKGluZGV4ZWRfY29tbWl0c19uciA8IDEwMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgaW5kZXhlZF9jb21taXRzX25yOyArK2kpCisJCQlwdXNoX2JpdG1hcHBlZF9jb21taXQoaW5kZXhlZF9jb21taXRzW2ldLCBOVUxMKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoOzspIHsKKwkJc3RydWN0IGV3YWhfYml0bWFwICpyZXVzZWRfYml0bWFwID0gTlVMTDsKKwkJc3RydWN0IGNvbW1pdCAqY2hvc2VuID0gTlVMTDsKKworCQluZXh0ID0gbmV4dF9jb21taXRfaW5kZXgoaSk7CisKKwkJaWYgKGkgKyBuZXh0ID49IGluZGV4ZWRfY29tbWl0c19ucikKKwkJCWJyZWFrOworCisJCWlmIChtYXhfYml0bWFwcyA+IDAgJiYgd3JpdGVyLnNlbGVjdGVkX25yID49IG1heF9iaXRtYXBzKSB7CisJCQl3cml0ZXIuc2VsZWN0ZWRfbnIgPSBtYXhfYml0bWFwczsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKG5leHQgPT0gMCkgeworCQkJY2hvc2VuID0gaW5kZXhlZF9jb21taXRzW2ldOworCQkJcmV1c2VkX2JpdG1hcCA9IGZpbmRfcmV1c2VkX2JpdG1hcCgmY2hvc2VuLT5vYmplY3Qub2lkKTsKKwkJfSBlbHNlIHsKKwkJCWNob3NlbiA9IGluZGV4ZWRfY29tbWl0c1tpICsgbmV4dF07CisKKwkJCWZvciAoaiA9IDA7IGogPD0gbmV4dDsgKytqKSB7CisJCQkJc3RydWN0IGNvbW1pdCAqY20gPSBpbmRleGVkX2NvbW1pdHNbaSArIGpdOworCisJCQkJcmV1c2VkX2JpdG1hcCA9IGZpbmRfcmV1c2VkX2JpdG1hcCgmY20tPm9iamVjdC5vaWQpOworCQkJCWlmIChyZXVzZWRfYml0bWFwIHx8IChjbS0+b2JqZWN0LmZsYWdzICYgTkVFRFNfQklUTUFQKSAhPSAwKSB7CisJCQkJCWNob3NlbiA9IGNtOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoY20tPnBhcmVudHMgJiYgY20tPnBhcmVudHMtPm5leHQpCisJCQkJCWNob3NlbiA9IGNtOworCQkJfQorCQl9CisKKwkJcHVzaF9iaXRtYXBwZWRfY29tbWl0KGNob3NlbiwgcmV1c2VkX2JpdG1hcCk7CisKKwkJaSArPSBuZXh0ICsgMTsKKwkJZGlzcGxheV9wcm9ncmVzcyh3cml0ZXIucHJvZ3Jlc3MsIGkpOworCX0KKworCXN0b3BfcHJvZ3Jlc3MoJndyaXRlci5wcm9ncmVzcyk7Cit9CisKKworc3RhdGljIGludCBoYXNod3JpdGVfZXdhaF9oZWxwZXIodm9pZCAqZiwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCS8qIGhhc2h3cml0ZSB3aWxsIGRpZSBvbiBlcnJvciAqLworCWhhc2h3cml0ZShmLCBidWYsIGxlbik7CisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiBXcml0ZSB0aGUgYml0bWFwIGluZGV4IHRvIGRpc2sKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGR1bXBfYml0bWFwKHN0cnVjdCBoYXNoZmlsZSAqZiwgc3RydWN0IGV3YWhfYml0bWFwICpiaXRtYXApCit7CisJaWYgKGV3YWhfc2VyaWFsaXplX3RvKGJpdG1hcCwgaGFzaHdyaXRlX2V3YWhfaGVscGVyLCBmKSA8IDApCisJCWRpZSgiRmFpbGVkIHRvIHdyaXRlIGJpdG1hcCBpbmRleCIpOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMV9hY2Nlc3Moc2l6ZV90IHBvcywgdm9pZCAqdGFibGUpCit7CisJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqaW5kZXggPSB0YWJsZTsKKwlyZXR1cm4gaW5kZXhbcG9zXS0+b2lkLmhhc2g7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3NlbGVjdGVkX2NvbW1pdHNfdjEoc3RydWN0IGhhc2hmaWxlICpmLAorCQkJCSAgICAgIHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKmluZGV4LAorCQkJCSAgICAgIHVpbnQzMl90IGluZGV4X25yKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHdyaXRlci5zZWxlY3RlZF9ucjsgKytpKSB7CisJCXN0cnVjdCBiaXRtYXBwZWRfY29tbWl0ICpzdG9yZWQgPSAmd3JpdGVyLnNlbGVjdGVkW2ldOworCisJCWludCBjb21taXRfcG9zID0KKwkJCXNoYTFfcG9zKHN0b3JlZC0+Y29tbWl0LT5vYmplY3Qub2lkLmhhc2gsIGluZGV4LCBpbmRleF9uciwgc2hhMV9hY2Nlc3MpOworCisJCWlmIChjb21taXRfcG9zIDwgMCkKKwkJCUJVRygidHJ5aW5nIHRvIHdyaXRlIGNvbW1pdCBub3QgaW4gaW5kZXgiKTsKKworCQloYXNod3JpdGVfYmUzMihmLCBjb21taXRfcG9zKTsKKwkJaGFzaHdyaXRlX3U4KGYsIHN0b3JlZC0+eG9yX29mZnNldCk7CisJCWhhc2h3cml0ZV91OChmLCBzdG9yZWQtPmZsYWdzKTsKKworCQlkdW1wX2JpdG1hcChmLCBzdG9yZWQtPndyaXRlX2FzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2hhc2hfY2FjaGUoc3RydWN0IGhhc2hmaWxlICpmLAorCQkJICAgICBzdHJ1Y3QgcGFja19pZHhfZW50cnkgKippbmRleCwKKwkJCSAgICAgdWludDMyX3QgaW5kZXhfbnIpCit7CisJdWludDMyX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmRleF9ucjsgKytpKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5ID0gKHN0cnVjdCBvYmplY3RfZW50cnkgKilpbmRleFtpXTsKKwkJdWludDMyX3QgaGFzaF92YWx1ZSA9IGh0b25sKGVudHJ5LT5oYXNoKTsKKwkJaGFzaHdyaXRlKGYsICZoYXNoX3ZhbHVlLCBzaXplb2YoaGFzaF92YWx1ZSkpOworCX0KK30KKwordm9pZCBiaXRtYXBfd3JpdGVyX3NldF9jaGVja3N1bSh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWhhc2hjcHkod3JpdGVyLnBhY2tfY2hlY2tzdW0sIHNoYTEpOworfQorCit2b2lkIGJpdG1hcF93cml0ZXJfZmluaXNoKHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKmluZGV4LAorCQkJICB1aW50MzJfdCBpbmRleF9uciwKKwkJCSAgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkgIHVpbnQxNl90IG9wdGlvbnMpCit7CisJc3RhdGljIHVpbnQxNl90IGRlZmF1bHRfdmVyc2lvbiA9IDE7CisJc3RhdGljIHVpbnQxNl90IGZsYWdzID0gQklUTUFQX09QVF9GVUxMX0RBRzsKKwlzdHJ1Y3Qgc3RyYnVmIHRtcF9maWxlID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGhhc2hmaWxlICpmOworCisJc3RydWN0IGJpdG1hcF9kaXNrX2hlYWRlciBoZWFkZXI7CisKKwlpbnQgZmQgPSBvZGJfbWtzdGVtcCgmdG1wX2ZpbGUsICJwYWNrL3RtcF9iaXRtYXBfWFhYWFhYIik7CisKKwlmID0gaGFzaGZkKGZkLCB0bXBfZmlsZS5idWYpOworCisJbWVtY3B5KGhlYWRlci5tYWdpYywgQklUTUFQX0lEWF9TSUdOQVRVUkUsIHNpemVvZihCSVRNQVBfSURYX1NJR05BVFVSRSkpOworCWhlYWRlci52ZXJzaW9uID0gaHRvbnMoZGVmYXVsdF92ZXJzaW9uKTsKKwloZWFkZXIub3B0aW9ucyA9IGh0b25zKGZsYWdzIHwgb3B0aW9ucyk7CisJaGVhZGVyLmVudHJ5X2NvdW50ID0gaHRvbmwod3JpdGVyLnNlbGVjdGVkX25yKTsKKwloYXNoY3B5KGhlYWRlci5jaGVja3N1bSwgd3JpdGVyLnBhY2tfY2hlY2tzdW0pOworCisJaGFzaHdyaXRlKGYsICZoZWFkZXIsIHNpemVvZihoZWFkZXIpIC0gR0lUX01BWF9SQVdTWiArIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKKwlkdW1wX2JpdG1hcChmLCB3cml0ZXIuY29tbWl0cyk7CisJZHVtcF9iaXRtYXAoZiwgd3JpdGVyLnRyZWVzKTsKKwlkdW1wX2JpdG1hcChmLCB3cml0ZXIuYmxvYnMpOworCWR1bXBfYml0bWFwKGYsIHdyaXRlci50YWdzKTsKKwl3cml0ZV9zZWxlY3RlZF9jb21taXRzX3YxKGYsIGluZGV4LCBpbmRleF9ucik7CisKKwlpZiAob3B0aW9ucyAmIEJJVE1BUF9PUFRfSEFTSF9DQUNIRSkKKwkJd3JpdGVfaGFzaF9jYWNoZShmLCBpbmRleCwgaW5kZXhfbnIpOworCisJZmluYWxpemVfaGFzaGZpbGUoZiwgTlVMTCwgQ1NVTV9IQVNIX0lOX1NUUkVBTSB8IENTVU1fRlNZTkMgfCBDU1VNX0NMT1NFKTsKKworCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0odG1wX2ZpbGUuYnVmKSkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gbWFrZSB0ZW1wb3JhcnkgYml0bWFwIGZpbGUgcmVhZGFibGUiKTsKKworCWlmIChyZW5hbWUodG1wX2ZpbGUuYnVmLCBmaWxlbmFtZSkpCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHJlbmFtZSB0ZW1wb3JhcnkgYml0bWFwIGZpbGUgdG8gJyVzJyIsIGZpbGVuYW1lKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZ0bXBfZmlsZSk7Cit9CmRpZmYgLS1naXQgYS9wYWNrLWJpdG1hcC5jIGIvcGFjay1iaXRtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDc3ZTczCi0tLSAvZGV2L251bGwKKysrIGIvcGFjay1iaXRtYXAuYwpAQCAtMCwwICsxLDE0NDUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInBhY2stYml0bWFwLmgiCisjaW5jbHVkZSAicGFjay1yZXZpbmRleC5oIgorI2luY2x1ZGUgInBhY2stb2JqZWN0cy5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oIgorCisvKgorICogQW4gZW50cnkgb24gdGhlIGJpdG1hcCBpbmRleCwgcmVwcmVzZW50aW5nIHRoZSBiaXRtYXAgZm9yIGEgZ2l2ZW4KKyAqIGNvbW1pdC4KKyAqLworc3RydWN0IHN0b3JlZF9iaXRtYXAgeworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBld2FoX2JpdG1hcCAqcm9vdDsKKwlzdHJ1Y3Qgc3RvcmVkX2JpdG1hcCAqeG9yOworCWludCBmbGFnczsKK307CisKKy8qCisgKiBUaGUgYWN0aXZlIGJpdG1hcCBpbmRleCBmb3IgYSByZXBvc2l0b3J5LiBCeSBkZXNpZ24sIHJlcG9zaXRvcmllcyBvbmx5IGhhdmUKKyAqIGEgc2luZ2xlIGJpdG1hcCBpbmRleCBhdmFpbGFibGUgKHRoZSBpbmRleCBmb3IgdGhlIGJpZ2dlc3QgcGFja2ZpbGUgaW4KKyAqIHRoZSByZXBvc2l0b3J5KSwgc2luY2UgYml0bWFwIGluZGV4ZXMgbmVlZCBmdWxsIGNsb3N1cmUuCisgKgorICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBiaXRtYXAgaW5kZXggYXZhaWxhYmxlIChlLmcuIGJlY2F1c2Ugb2YgYWx0ZXJuYXRlcyksCisgKiB0aGUgYWN0aXZlIGJpdG1hcCBpbmRleCBpcyB0aGUgbGFyZ2VzdCBvbmUuCisgKi8KK3N0cnVjdCBiaXRtYXBfaW5kZXggeworCS8qIFBhY2tmaWxlIHRvIHdoaWNoIHRoaXMgYml0bWFwIGluZGV4IGJlbG9uZ3MgdG8gKi8KKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjazsKKworCS8qCisJICogTWFyayB0aGUgZmlyc3QgYHJldXNlX29iamVjdHNgIGluIHRoZSBwYWNrZmlsZSBhcyByZXVzZWQ6CisJICogdGhleSB3aWxsIGJlIHNlbnQgYXMtaXMgd2l0aG91dCB1c2luZyB0aGVtIGZvciByZXBhY2tpbmcKKwkgKiBjYWxjdWxhdGlvbnMKKwkgKi8KKwl1aW50MzJfdCByZXVzZV9vYmplY3RzOworCisJLyogbW1hcHBlZCBidWZmZXIgb2YgdGhlIHdob2xlIGJpdG1hcCBpbmRleCAqLworCXVuc2lnbmVkIGNoYXIgKm1hcDsKKwlzaXplX3QgbWFwX3NpemU7IC8qIHNpemUgb2YgdGhlIG1tYXBlZCBidWZmZXIgKi8KKwlzaXplX3QgbWFwX3BvczsgLyogY3VycmVudCBwb3NpdGlvbiB3aGVuIGxvYWRpbmcgdGhlIGluZGV4ICovCisKKwkvKgorCSAqIFR5cGUgaW5kZXhlcy4KKwkgKgorCSAqIEVhY2ggYml0bWFwIG1hcmtzIHdoaWNoIG9iamVjdHMgaW4gdGhlIHBhY2tmaWxlICBhcmUgb2YgdGhlIGdpdmVuCisJICogdHlwZS4gVGhpcyBwcm92aWRlcyB0eXBlIGluZm9ybWF0aW9uIHdoZW4geWllbGRpbmcgdGhlIG9iamVjdHMgZnJvbQorCSAqIHRoZSBwYWNrZmlsZSBkdXJpbmcgYSB3YWxrLCB3aGljaCBhbGxvd3MgZm9yIGJldHRlciBkZWx0YSBiYXNlcy4KKwkgKi8KKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmNvbW1pdHM7CisJc3RydWN0IGV3YWhfYml0bWFwICp0cmVlczsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmJsb2JzOworCXN0cnVjdCBld2FoX2JpdG1hcCAqdGFnczsKKworCS8qIE1hcCBmcm9tIG9iamVjdCBJRCAtPiBgc3RvcmVkX2JpdG1hcGAgZm9yIGFsbCB0aGUgYml0bWFwcGVkIGNvbW1pdHMgKi8KKwlraF9vaWRfbWFwX3QgKmJpdG1hcHM7CisKKwkvKiBOdW1iZXIgb2YgYml0bWFwcGVkIGNvbW1pdHMgKi8KKwl1aW50MzJfdCBlbnRyeV9jb3VudDsKKworCS8qIElmIG5vdCBOVUxMLCB0aGlzIGlzIGEgbmFtZS1oYXNoIGNhY2hlIHBvaW50aW5nIGludG8gbWFwLiAqLworCXVpbnQzMl90ICpoYXNoZXM7CisKKwkvKgorCSAqIEV4dGVuZGVkIGluZGV4LgorCSAqCisJICogV2hlbiB0cnlpbmcgdG8gcGVyZm9ybSBiaXRtYXAgb3BlcmF0aW9ucyB3aXRoIG9iamVjdHMgdGhhdCBhcmUgbm90CisJICogcGFja2VkIGluIGBwYWNrYCwgdGhlc2Ugb2JqZWN0cyBhcmUgYWRkZWQgdG8gdGhpcyAiZmFrZSBpbmRleCIgYW5kCisJICogYXJlIGFzc3VtZWQgdG8gYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlIHBhY2tmaWxlIGZvciBhbGwgb3BlcmF0aW9ucworCSAqLworCXN0cnVjdCBlaW5kZXggeworCQlzdHJ1Y3Qgb2JqZWN0ICoqb2JqZWN0czsKKwkJdWludDMyX3QgKmhhc2hlczsKKwkJdWludDMyX3QgY291bnQsIGFsbG9jOworCQlraF9vaWRfcG9zX3QgKnBvc2l0aW9uczsKKwl9IGV4dF9pbmRleDsKKworCS8qIEJpdG1hcCByZXN1bHQgb2YgdGhlIGxhc3QgcGVyZm9ybWVkIHdhbGsgKi8KKwlzdHJ1Y3QgYml0bWFwICpyZXN1bHQ7CisKKwkvKiAiaGF2ZSIgYml0bWFwIGZyb20gdGhlIGxhc3QgcGVyZm9ybWVkIHdhbGsgKi8KKwlzdHJ1Y3QgYml0bWFwICpoYXZlczsKKworCS8qIFZlcnNpb24gb2YgdGhlIGJpdG1hcCBpbmRleCAqLworCXVuc2lnbmVkIGludCB2ZXJzaW9uOworfTsKKworc3RhdGljIHN0cnVjdCBld2FoX2JpdG1hcCAqbG9va3VwX3N0b3JlZF9iaXRtYXAoc3RydWN0IHN0b3JlZF9iaXRtYXAgKnN0KQoreworCXN0cnVjdCBld2FoX2JpdG1hcCAqcGFyZW50OworCXN0cnVjdCBld2FoX2JpdG1hcCAqY29tcG9zZWQ7CisKKwlpZiAoc3QtPnhvciA9PSBOVUxMKQorCQlyZXR1cm4gc3QtPnJvb3Q7CisKKwljb21wb3NlZCA9IGV3YWhfcG9vbF9uZXcoKTsKKwlwYXJlbnQgPSBsb29rdXBfc3RvcmVkX2JpdG1hcChzdC0+eG9yKTsKKwlld2FoX3hvcihzdC0+cm9vdCwgcGFyZW50LCBjb21wb3NlZCk7CisKKwlld2FoX3Bvb2xfZnJlZShzdC0+cm9vdCk7CisJc3QtPnJvb3QgPSBjb21wb3NlZDsKKwlzdC0+eG9yID0gTlVMTDsKKworCXJldHVybiBjb21wb3NlZDsKK30KKworLyoKKyAqIFJlYWQgYSBiaXRtYXAgZnJvbSB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uIG9uIHRoZSBtbWFwZWQKKyAqIGluZGV4LCBhbmQgaW5jcmVhc2UgdGhlIHJlYWQgcG9zaXRpb24gYWNjb3JkaW5nbHkKKyAqLworc3RhdGljIHN0cnVjdCBld2FoX2JpdG1hcCAqcmVhZF9iaXRtYXBfMShzdHJ1Y3QgYml0bWFwX2luZGV4ICppbmRleCkKK3sKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmIgPSBld2FoX3Bvb2xfbmV3KCk7CisKKwlzc2l6ZV90IGJpdG1hcF9zaXplID0gZXdhaF9yZWFkX21tYXAoYiwKKwkJaW5kZXgtPm1hcCArIGluZGV4LT5tYXBfcG9zLAorCQlpbmRleC0+bWFwX3NpemUgLSBpbmRleC0+bWFwX3Bvcyk7CisKKwlpZiAoYml0bWFwX3NpemUgPCAwKSB7CisJCWVycm9yKCJGYWlsZWQgdG8gbG9hZCBiaXRtYXAgaW5kZXggKGNvcnJ1cHRlZD8pIik7CisJCWV3YWhfcG9vbF9mcmVlKGIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpbmRleC0+bWFwX3BvcyArPSBiaXRtYXBfc2l6ZTsKKwlyZXR1cm4gYjsKK30KKworc3RhdGljIGludCBsb2FkX2JpdG1hcF9oZWFkZXIoc3RydWN0IGJpdG1hcF9pbmRleCAqaW5kZXgpCit7CisJc3RydWN0IGJpdG1hcF9kaXNrX2hlYWRlciAqaGVhZGVyID0gKHZvaWQgKilpbmRleC0+bWFwOworCisJaWYgKGluZGV4LT5tYXBfc2l6ZSA8IHNpemVvZigqaGVhZGVyKSArIHRoZV9oYXNoX2FsZ28tPnJhd3N6KQorCQlyZXR1cm4gZXJyb3IoIkNvcnJ1cHRlZCBiaXRtYXAgaW5kZXggKG1pc3NpbmcgaGVhZGVyIGRhdGEpIik7CisKKwlpZiAobWVtY21wKGhlYWRlci0+bWFnaWMsIEJJVE1BUF9JRFhfU0lHTkFUVVJFLCBzaXplb2YoQklUTUFQX0lEWF9TSUdOQVRVUkUpKSAhPSAwKQorCQlyZXR1cm4gZXJyb3IoIkNvcnJ1cHRlZCBiaXRtYXAgaW5kZXggZmlsZSAod3JvbmcgaGVhZGVyKSIpOworCisJaW5kZXgtPnZlcnNpb24gPSBudG9ocyhoZWFkZXItPnZlcnNpb24pOworCWlmIChpbmRleC0+dmVyc2lvbiAhPSAxKQorCQlyZXR1cm4gZXJyb3IoIlVuc3VwcG9ydGVkIHZlcnNpb24gZm9yIGJpdG1hcCBpbmRleCBmaWxlICglZCkiLCBpbmRleC0+dmVyc2lvbik7CisKKwkvKiBQYXJzZSBrbm93biBiaXRtYXAgZm9ybWF0IG9wdGlvbnMgKi8KKwl7CisJCXVpbnQzMl90IGZsYWdzID0gbnRvaHMoaGVhZGVyLT5vcHRpb25zKTsKKworCQlpZiAoKGZsYWdzICYgQklUTUFQX09QVF9GVUxMX0RBRykgPT0gMCkKKwkJCXJldHVybiBlcnJvcigiVW5zdXBwb3J0ZWQgb3B0aW9ucyBmb3IgYml0bWFwIGluZGV4IGZpbGUgIgorCQkJCSIoR2l0IHJlcXVpcmVzIEJJVE1BUF9PUFRfRlVMTF9EQUcpIik7CisKKwkJaWYgKGZsYWdzICYgQklUTUFQX09QVF9IQVNIX0NBQ0hFKSB7CisJCQl1bnNpZ25lZCBjaGFyICplbmQgPSBpbmRleC0+bWFwICsgaW5kZXgtPm1hcF9zaXplIC0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJCQlpbmRleC0+aGFzaGVzID0gKCh1aW50MzJfdCAqKWVuZCkgLSBpbmRleC0+cGFjay0+bnVtX29iamVjdHM7CisJCX0KKwl9CisKKwlpbmRleC0+ZW50cnlfY291bnQgPSBudG9obChoZWFkZXItPmVudHJ5X2NvdW50KTsKKwlpbmRleC0+bWFwX3BvcyArPSBzaXplb2YoKmhlYWRlcikgLSBHSVRfTUFYX1JBV1NaICsgdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RvcmVkX2JpdG1hcCAqc3RvcmVfYml0bWFwKHN0cnVjdCBiaXRtYXBfaW5kZXggKmluZGV4LAorCQkJCQkgIHN0cnVjdCBld2FoX2JpdG1hcCAqcm9vdCwKKwkJCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJCSAgc3RydWN0IHN0b3JlZF9iaXRtYXAgKnhvcl93aXRoLAorCQkJCQkgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RvcmVkX2JpdG1hcCAqc3RvcmVkOworCWtoaXRlcl90IGhhc2hfcG9zOworCWludCByZXQ7CisKKwlzdG9yZWQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RvcmVkX2JpdG1hcCkpOworCXN0b3JlZC0+cm9vdCA9IHJvb3Q7CisJc3RvcmVkLT54b3IgPSB4b3Jfd2l0aDsKKwlzdG9yZWQtPmZsYWdzID0gZmxhZ3M7CisJb2lkY3B5KCZzdG9yZWQtPm9pZCwgb2lkKTsKKworCWhhc2hfcG9zID0ga2hfcHV0X29pZF9tYXAoaW5kZXgtPmJpdG1hcHMsIHN0b3JlZC0+b2lkLCAmcmV0KTsKKworCS8qIGEgMCByZXR1cm4gY29kZSBtZWFucyB0aGUgaW5zZXJ0aW9uIHN1Y2NlZWRlZCB3aXRoIG5vIGNoYW5nZXMsCisJICogYmVjYXVzZSB0aGUgU0hBMSBhbHJlYWR5IGV4aXN0ZWQgb24gdGhlIG1hcC4gdGhpcyBpcyBiYWQsIHRoZXJlCisJICogc2hvdWxkbid0IGJlIGR1cGxpY2F0ZWQgY29tbWl0cyBpbiB0aGUgaW5kZXggKi8KKwlpZiAocmV0ID09IDApIHsKKwkJZXJyb3IoIkR1cGxpY2F0ZSBlbnRyeSBpbiBiaXRtYXAgaW5kZXg6ICVzIiwgb2lkX3RvX2hleChvaWQpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJa2hfdmFsdWUoaW5kZXgtPmJpdG1hcHMsIGhhc2hfcG9zKSA9IHN0b3JlZDsKKwlyZXR1cm4gc3RvcmVkOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHJlYWRfYmUzMihjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCAqcG9zKQoreworCXVpbnQzMl90IHJlc3VsdCA9IGdldF9iZTMyKGJ1ZmZlciArICpwb3MpOworCSgqcG9zKSArPSBzaXplb2YocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgcmVhZF91OChjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCAqcG9zKQoreworCXJldHVybiBidWZmZXJbKCpwb3MpKytdOworfQorCisjZGVmaW5lIE1BWF9YT1JfT0ZGU0VUIDE2MAorCitzdGF0aWMgaW50IGxvYWRfYml0bWFwX2VudHJpZXNfdjEoc3RydWN0IGJpdG1hcF9pbmRleCAqaW5kZXgpCit7CisJdWludDMyX3QgaTsKKwlzdHJ1Y3Qgc3RvcmVkX2JpdG1hcCAqcmVjZW50X2JpdG1hcHNbTUFYX1hPUl9PRkZTRVRdID0geyBOVUxMIH07CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXgtPmVudHJ5X2NvdW50OyArK2kpIHsKKwkJaW50IHhvcl9vZmZzZXQsIGZsYWdzOworCQlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmJpdG1hcCA9IE5VTEw7CisJCXN0cnVjdCBzdG9yZWRfYml0bWFwICp4b3JfYml0bWFwID0gTlVMTDsKKwkJdWludDMyX3QgY29tbWl0X2lkeF9wb3M7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCWNvbW1pdF9pZHhfcG9zID0gcmVhZF9iZTMyKGluZGV4LT5tYXAsICZpbmRleC0+bWFwX3Bvcyk7CisJCXhvcl9vZmZzZXQgPSByZWFkX3U4KGluZGV4LT5tYXAsICZpbmRleC0+bWFwX3Bvcyk7CisJCWZsYWdzID0gcmVhZF91OChpbmRleC0+bWFwLCAmaW5kZXgtPm1hcF9wb3MpOworCisJCW50aF9wYWNrZWRfb2JqZWN0X2lkKCZvaWQsIGluZGV4LT5wYWNrLCBjb21taXRfaWR4X3Bvcyk7CisKKwkJYml0bWFwID0gcmVhZF9iaXRtYXBfMShpbmRleCk7CisJCWlmICghYml0bWFwKQorCQkJcmV0dXJuIC0xOworCisJCWlmICh4b3Jfb2Zmc2V0ID4gTUFYX1hPUl9PRkZTRVQgfHwgeG9yX29mZnNldCA+IGkpCisJCQlyZXR1cm4gZXJyb3IoIkNvcnJ1cHRlZCBiaXRtYXAgcGFjayBpbmRleCIpOworCisJCWlmICh4b3Jfb2Zmc2V0ID4gMCkgeworCQkJeG9yX2JpdG1hcCA9IHJlY2VudF9iaXRtYXBzWyhpIC0geG9yX29mZnNldCkgJSBNQVhfWE9SX09GRlNFVF07CisKKwkJCWlmICh4b3JfYml0bWFwID09IE5VTEwpCisJCQkJcmV0dXJuIGVycm9yKCJJbnZhbGlkIFhPUiBvZmZzZXQgaW4gYml0bWFwIHBhY2sgaW5kZXgiKTsKKwkJfQorCisJCXJlY2VudF9iaXRtYXBzW2kgJSBNQVhfWE9SX09GRlNFVF0gPSBzdG9yZV9iaXRtYXAoCisJCQlpbmRleCwgYml0bWFwLCAmb2lkLCB4b3JfYml0bWFwLCBmbGFncyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpwYWNrX2JpdG1hcF9maWxlbmFtZShzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwlzaXplX3QgbGVuOworCisJaWYgKCFzdHJpcF9zdWZmaXgocC0+cGFja19uYW1lLCAiLnBhY2siLCAmbGVuKSkKKwkJQlVHKCJwYWNrX25hbWUgZG9lcyBub3QgZW5kIGluIC5wYWNrIik7CisJcmV0dXJuIHhzdHJmbXQoIiUuKnMuYml0bWFwIiwgKGludClsZW4sIHAtPnBhY2tfbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9wYWNrX2JpdG1hcF8xKHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrZmlsZSkKK3sKKwlpbnQgZmQ7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhciAqaWR4X25hbWU7CisKKwlpZiAob3Blbl9wYWNrX2luZGV4KHBhY2tmaWxlKSkKKwkJcmV0dXJuIC0xOworCisJaWR4X25hbWUgPSBwYWNrX2JpdG1hcF9maWxlbmFtZShwYWNrZmlsZSk7CisJZmQgPSBnaXRfb3BlbihpZHhfbmFtZSk7CisJZnJlZShpZHhfbmFtZSk7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZnN0YXQoZmQsICZzdCkpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGJpdG1hcF9naXQtPnBhY2spIHsKKwkJd2FybmluZygiaWdub3JpbmcgZXh0cmEgYml0bWFwIGZpbGU6ICVzIiwgcGFja2ZpbGUtPnBhY2tfbmFtZSk7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWJpdG1hcF9naXQtPnBhY2sgPSBwYWNrZmlsZTsKKwliaXRtYXBfZ2l0LT5tYXBfc2l6ZSA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisJYml0bWFwX2dpdC0+bWFwID0geG1tYXAoTlVMTCwgYml0bWFwX2dpdC0+bWFwX3NpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKwliaXRtYXBfZ2l0LT5tYXBfcG9zID0gMDsKKwljbG9zZShmZCk7CisKKwlpZiAobG9hZF9iaXRtYXBfaGVhZGVyKGJpdG1hcF9naXQpIDwgMCkgeworCQltdW5tYXAoYml0bWFwX2dpdC0+bWFwLCBiaXRtYXBfZ2l0LT5tYXBfc2l6ZSk7CisJCWJpdG1hcF9naXQtPm1hcCA9IE5VTEw7CisJCWJpdG1hcF9naXQtPm1hcF9zaXplID0gMDsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvYWRfcGFja19iaXRtYXAoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCkKK3sKKwlhc3NlcnQoYml0bWFwX2dpdC0+bWFwKTsKKworCWJpdG1hcF9naXQtPmJpdG1hcHMgPSBraF9pbml0X29pZF9tYXAoKTsKKwliaXRtYXBfZ2l0LT5leHRfaW5kZXgucG9zaXRpb25zID0ga2hfaW5pdF9vaWRfcG9zKCk7CisJaWYgKGxvYWRfcGFja19yZXZpbmRleChiaXRtYXBfZ2l0LT5wYWNrKSkKKwkJZ290byBmYWlsZWQ7CisKKwlpZiAoIShiaXRtYXBfZ2l0LT5jb21taXRzID0gcmVhZF9iaXRtYXBfMShiaXRtYXBfZ2l0KSkgfHwKKwkJIShiaXRtYXBfZ2l0LT50cmVlcyA9IHJlYWRfYml0bWFwXzEoYml0bWFwX2dpdCkpIHx8CisJCSEoYml0bWFwX2dpdC0+YmxvYnMgPSByZWFkX2JpdG1hcF8xKGJpdG1hcF9naXQpKSB8fAorCQkhKGJpdG1hcF9naXQtPnRhZ3MgPSByZWFkX2JpdG1hcF8xKGJpdG1hcF9naXQpKSkKKwkJZ290byBmYWlsZWQ7CisKKwlpZiAobG9hZF9iaXRtYXBfZW50cmllc192MShiaXRtYXBfZ2l0KSA8IDApCisJCWdvdG8gZmFpbGVkOworCisJcmV0dXJuIDA7CisKK2ZhaWxlZDoKKwltdW5tYXAoYml0bWFwX2dpdC0+bWFwLCBiaXRtYXBfZ2l0LT5tYXBfc2l6ZSk7CisJYml0bWFwX2dpdC0+bWFwID0gTlVMTDsKKwliaXRtYXBfZ2l0LT5tYXBfc2l6ZSA9IDA7CisKKwlraF9kZXN0cm95X29pZF9tYXAoYml0bWFwX2dpdC0+Yml0bWFwcyk7CisJYml0bWFwX2dpdC0+Yml0bWFwcyA9IE5VTEw7CisKKwlraF9kZXN0cm95X29pZF9wb3MoYml0bWFwX2dpdC0+ZXh0X2luZGV4LnBvc2l0aW9ucyk7CisJYml0bWFwX2dpdC0+ZXh0X2luZGV4LnBvc2l0aW9ucyA9IE5VTEw7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9wYWNrX2JpdG1hcChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICBzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0KQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCWludCByZXQgPSAtMTsKKworCWFzc2VydCghYml0bWFwX2dpdC0+bWFwKTsKKworCWZvciAocCA9IGdldF9hbGxfcGFja3Mocik7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChvcGVuX3BhY2tfYml0bWFwXzEoYml0bWFwX2dpdCwgcCkgPT0gMCkKKwkJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGJpdG1hcF9pbmRleCAqcHJlcGFyZV9iaXRtYXBfZ2l0KHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQgPSB4Y2FsbG9jKDEsIHNpemVvZigqYml0bWFwX2dpdCkpOworCisJaWYgKCFvcGVuX3BhY2tfYml0bWFwKHIsIGJpdG1hcF9naXQpICYmICFsb2FkX3BhY2tfYml0bWFwKGJpdG1hcF9naXQpKQorCQlyZXR1cm4gYml0bWFwX2dpdDsKKworCWZyZWVfYml0bWFwX2luZGV4KGJpdG1hcF9naXQpOworCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgaW5jbHVkZV9kYXRhIHsKKwlzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0OworCXN0cnVjdCBiaXRtYXAgKmJhc2U7CisJc3RydWN0IGJpdG1hcCAqc2VlbjsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGJpdG1hcF9wb3NpdGlvbl9leHRlbmRlZChzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJa2hfb2lkX3Bvc190ICpwb3NpdGlvbnMgPSBiaXRtYXBfZ2l0LT5leHRfaW5kZXgucG9zaXRpb25zOworCWtoaXRlcl90IHBvcyA9IGtoX2dldF9vaWRfcG9zKHBvc2l0aW9ucywgKm9pZCk7CisKKwlpZiAocG9zIDwga2hfZW5kKHBvc2l0aW9ucykpIHsKKwkJaW50IGJpdG1hcF9wb3MgPSBraF92YWx1ZShwb3NpdGlvbnMsIHBvcyk7CisJCXJldHVybiBiaXRtYXBfcG9zICsgYml0bWFwX2dpdC0+cGFjay0+bnVtX29iamVjdHM7CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludCBiaXRtYXBfcG9zaXRpb25fcGFja2ZpbGUoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCW9mZl90IG9mZnNldCA9IGZpbmRfcGFja19lbnRyeV9vbmUob2lkLT5oYXNoLCBiaXRtYXBfZ2l0LT5wYWNrKTsKKwlpZiAoIW9mZnNldCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGZpbmRfcmV2aW5kZXhfcG9zaXRpb24oYml0bWFwX2dpdC0+cGFjaywgb2Zmc2V0KTsKK30KKworc3RhdGljIGludCBiaXRtYXBfcG9zaXRpb24oc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpbnQgcG9zID0gYml0bWFwX3Bvc2l0aW9uX3BhY2tmaWxlKGJpdG1hcF9naXQsIG9pZCk7CisJcmV0dXJuIChwb3MgPj0gMCkgPyBwb3MgOiBiaXRtYXBfcG9zaXRpb25fZXh0ZW5kZWQoYml0bWFwX2dpdCwgb2lkKTsKK30KKworc3RhdGljIGludCBleHRfaW5kZXhfYWRkX29iamVjdChzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJCXN0cnVjdCBvYmplY3QgKm9iamVjdCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZWluZGV4ICplaW5kZXggPSAmYml0bWFwX2dpdC0+ZXh0X2luZGV4OworCisJa2hpdGVyX3QgaGFzaF9wb3M7CisJaW50IGhhc2hfcmV0OworCWludCBiaXRtYXBfcG9zOworCisJaGFzaF9wb3MgPSBraF9wdXRfb2lkX3BvcyhlaW5kZXgtPnBvc2l0aW9ucywgb2JqZWN0LT5vaWQsICZoYXNoX3JldCk7CisJaWYgKGhhc2hfcmV0ID4gMCkgeworCQlpZiAoZWluZGV4LT5jb3VudCA+PSBlaW5kZXgtPmFsbG9jKSB7CisJCQllaW5kZXgtPmFsbG9jID0gKGVpbmRleC0+YWxsb2MgKyAxNikgKiAzIC8gMjsKKwkJCVJFQUxMT0NfQVJSQVkoZWluZGV4LT5vYmplY3RzLCBlaW5kZXgtPmFsbG9jKTsKKwkJCVJFQUxMT0NfQVJSQVkoZWluZGV4LT5oYXNoZXMsIGVpbmRleC0+YWxsb2MpOworCQl9CisKKwkJYml0bWFwX3BvcyA9IGVpbmRleC0+Y291bnQ7CisJCWVpbmRleC0+b2JqZWN0c1tlaW5kZXgtPmNvdW50XSA9IG9iamVjdDsKKwkJZWluZGV4LT5oYXNoZXNbZWluZGV4LT5jb3VudF0gPSBwYWNrX25hbWVfaGFzaChuYW1lKTsKKwkJa2hfdmFsdWUoZWluZGV4LT5wb3NpdGlvbnMsIGhhc2hfcG9zKSA9IGJpdG1hcF9wb3M7CisJCWVpbmRleC0+Y291bnQrKzsKKwl9IGVsc2UgeworCQliaXRtYXBfcG9zID0ga2hfdmFsdWUoZWluZGV4LT5wb3NpdGlvbnMsIGhhc2hfcG9zKTsKKwl9CisKKwlyZXR1cm4gYml0bWFwX3BvcyArIGJpdG1hcF9naXQtPnBhY2stPm51bV9vYmplY3RzOworfQorCitzdHJ1Y3QgYml0bWFwX3Nob3dfZGF0YSB7CisJc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdDsKKwlzdHJ1Y3QgYml0bWFwICpiYXNlOworfTsKKworc3RhdGljIHZvaWQgc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqZWN0LCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhXykKK3sKKwlzdHJ1Y3QgYml0bWFwX3Nob3dfZGF0YSAqZGF0YSA9IGRhdGFfOworCWludCBiaXRtYXBfcG9zOworCisJYml0bWFwX3BvcyA9IGJpdG1hcF9wb3NpdGlvbihkYXRhLT5iaXRtYXBfZ2l0LCAmb2JqZWN0LT5vaWQpOworCisJaWYgKGJpdG1hcF9wb3MgPCAwKQorCQliaXRtYXBfcG9zID0gZXh0X2luZGV4X2FkZF9vYmplY3QoZGF0YS0+Yml0bWFwX2dpdCwgb2JqZWN0LAorCQkJCQkJICBuYW1lKTsKKworCWJpdG1hcF9zZXQoZGF0YS0+YmFzZSwgYml0bWFwX3Bvcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqZGF0YSkKK3sKK30KKworc3RhdGljIGludCBhZGRfdG9faW5jbHVkZV9zZXQoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCSAgICAgIHN0cnVjdCBpbmNsdWRlX2RhdGEgKmRhdGEsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICBpbnQgYml0bWFwX3BvcykKK3sKKwlraGl0ZXJfdCBoYXNoX3BvczsKKworCWlmIChkYXRhLT5zZWVuICYmIGJpdG1hcF9nZXQoZGF0YS0+c2VlbiwgYml0bWFwX3BvcykpCisJCXJldHVybiAwOworCisJaWYgKGJpdG1hcF9nZXQoZGF0YS0+YmFzZSwgYml0bWFwX3BvcykpCisJCXJldHVybiAwOworCisJaGFzaF9wb3MgPSBraF9nZXRfb2lkX21hcChiaXRtYXBfZ2l0LT5iaXRtYXBzLCAqb2lkKTsKKwlpZiAoaGFzaF9wb3MgPCBraF9lbmQoYml0bWFwX2dpdC0+Yml0bWFwcykpIHsKKwkJc3RydWN0IHN0b3JlZF9iaXRtYXAgKnN0ID0ga2hfdmFsdWUoYml0bWFwX2dpdC0+Yml0bWFwcywgaGFzaF9wb3MpOworCQliaXRtYXBfb3JfZXdhaChkYXRhLT5iYXNlLCBsb29rdXBfc3RvcmVkX2JpdG1hcChzdCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwliaXRtYXBfc2V0KGRhdGEtPmJhc2UsIGJpdG1hcF9wb3MpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNob3VsZF9pbmNsdWRlKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqX2RhdGEpCit7CisJc3RydWN0IGluY2x1ZGVfZGF0YSAqZGF0YSA9IF9kYXRhOworCWludCBiaXRtYXBfcG9zOworCisJYml0bWFwX3BvcyA9IGJpdG1hcF9wb3NpdGlvbihkYXRhLT5iaXRtYXBfZ2l0LCAmY29tbWl0LT5vYmplY3Qub2lkKTsKKwlpZiAoYml0bWFwX3BvcyA8IDApCisJCWJpdG1hcF9wb3MgPSBleHRfaW5kZXhfYWRkX29iamVjdChkYXRhLT5iaXRtYXBfZ2l0LAorCQkJCQkJICAoc3RydWN0IG9iamVjdCAqKWNvbW1pdCwKKwkJCQkJCSAgTlVMTCk7CisKKwlpZiAoIWFkZF90b19pbmNsdWRlX3NldChkYXRhLT5iaXRtYXBfZ2l0LCBkYXRhLCAmY29tbWl0LT5vYmplY3Qub2lkLAorCQkJCWJpdG1hcF9wb3MpKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOworCisJCXdoaWxlIChwYXJlbnQpIHsKKwkJCXBhcmVudC0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFNFRU47CisJCQlwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBiaXRtYXAgKmZpbmRfb2JqZWN0cyhzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJCSAgIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgICBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKnJvb3RzLAorCQkJCSAgIHN0cnVjdCBiaXRtYXAgKnNlZW4sCisJCQkJICAgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyKQoreworCXN0cnVjdCBiaXRtYXAgKmJhc2UgPSBOVUxMOworCWludCBuZWVkc193YWxrID0gMDsKKworCXN0cnVjdCBvYmplY3RfbGlzdCAqbm90X21hcHBlZCA9IE5VTEw7CisKKwkvKgorCSAqIEdvIHRocm91Z2ggYWxsIHRoZSByb290cyBmb3IgdGhlIHdhbGsuIFRoZSBvbmVzIHRoYXQgaGF2ZSBiaXRtYXBzCisJICogb24gdGhlIGJpdG1hcCBpbmRleCB3aWxsIGJlIGBvcmBlZCB0b2dldGhlciB0byBmb3JtIGFuIGluaXRpYWwKKwkgKiBnbG9iYWwgcmVhY2hhYmlsaXR5IGFuYWx5c2lzLgorCSAqCisJICogVGhlIG9uZXMgd2l0aG91dCBiaXRtYXBzIGluIHRoZSBpbmRleCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUKKwkgKiBgbm90X21hcHBlZF9saXN0YCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgorCSAqLworCXdoaWxlIChyb290cykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSByb290cy0+aXRlbTsKKwkJcm9vdHMgPSByb290cy0+bmV4dDsKKworCQlpZiAob2JqZWN0LT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJCWtoaXRlcl90IHBvcyA9IGtoX2dldF9vaWRfbWFwKGJpdG1hcF9naXQtPmJpdG1hcHMsIG9iamVjdC0+b2lkKTsKKworCQkJaWYgKHBvcyA8IGtoX2VuZChiaXRtYXBfZ2l0LT5iaXRtYXBzKSkgeworCQkJCXN0cnVjdCBzdG9yZWRfYml0bWFwICpzdCA9IGtoX3ZhbHVlKGJpdG1hcF9naXQtPmJpdG1hcHMsIHBvcyk7CisJCQkJc3RydWN0IGV3YWhfYml0bWFwICpvcl93aXRoID0gbG9va3VwX3N0b3JlZF9iaXRtYXAoc3QpOworCisJCQkJaWYgKGJhc2UgPT0gTlVMTCkKKwkJCQkJYmFzZSA9IGV3YWhfdG9fYml0bWFwKG9yX3dpdGgpOworCQkJCWVsc2UKKwkJCQkJYml0bWFwX29yX2V3YWgoYmFzZSwgb3Jfd2l0aCk7CisKKwkJCQlvYmplY3QtPmZsYWdzIHw9IFNFRU47CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlvYmplY3RfbGlzdF9pbnNlcnQob2JqZWN0LCAmbm90X21hcHBlZCk7CisJfQorCisJLyoKKwkgKiBCZXN0IGNhc2Ugc2NlbmFyaW86IFdlIGZvdW5kIGJpdG1hcHMgZm9yIGFsbCB0aGUgcm9vdHMsCisJICogc28gdGhlIHJlc3VsdGluZyBgb3JgIGJpdG1hcCBoYXMgdGhlIGZ1bGwgcmVhY2hhYmlsaXR5IGFuYWx5c2lzCisJICovCisJaWYgKG5vdF9tYXBwZWQgPT0gTlVMTCkKKwkJcmV0dXJuIGJhc2U7CisKKwlyb290cyA9IG5vdF9tYXBwZWQ7CisKKwkvKgorCSAqIExldCdzIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIHJvb3RzIHRoYXQgZG9uJ3QgaGF2ZSBiaXRtYXBzIHRvCisJICogY2hlY2sgaWYgd2UgY2FuIGRldGVybWluZSB0aGVtIHRvIGJlIHJlYWNoYWJsZSBmcm9tIHRoZSBleGlzdGluZworCSAqIGdsb2JhbCBiaXRtYXAuCisJICoKKwkgKiBJZiB3ZSBjYW5ub3QgZmluZCB0aGVtIGluIHRoZSBleGlzdGluZyBnbG9iYWwgYml0bWFwLCB3ZSdsbCBuZWVkCisJICogdG8gcHVzaCB0aGVtIHRvIGFuIGFjdHVhbCB3YWxrIGFuZCBydW4gaXQgdW50aWwgd2UgY2FuIGNvbmZpcm0KKwkgKiB0aGV5IGFyZSByZWFjaGFibGUKKwkgKi8KKwl3aGlsZSAocm9vdHMpIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gcm9vdHMtPml0ZW07CisJCWludCBwb3M7CisKKwkJcm9vdHMgPSByb290cy0+bmV4dDsKKwkJcG9zID0gYml0bWFwX3Bvc2l0aW9uKGJpdG1hcF9naXQsICZvYmplY3QtPm9pZCk7CisKKwkJaWYgKHBvcyA8IDAgfHwgYmFzZSA9PSBOVUxMIHx8ICFiaXRtYXBfZ2V0KGJhc2UsIHBvcykpIHsKKwkJCW9iamVjdC0+ZmxhZ3MgJj0gflVOSU5URVJFU1RJTkc7CisJCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCAiIik7CisJCQluZWVkc193YWxrID0gMTsKKwkJfSBlbHNlIHsKKwkJCW9iamVjdC0+ZmxhZ3MgfD0gU0VFTjsKKwkJfQorCX0KKworCWlmIChuZWVkc193YWxrKSB7CisJCXN0cnVjdCBpbmNsdWRlX2RhdGEgaW5jZGF0YTsKKwkJc3RydWN0IGJpdG1hcF9zaG93X2RhdGEgc2hvd19kYXRhOworCisJCWlmIChiYXNlID09IE5VTEwpCisJCQliYXNlID0gYml0bWFwX25ldygpOworCisJCWluY2RhdGEuYml0bWFwX2dpdCA9IGJpdG1hcF9naXQ7CisJCWluY2RhdGEuYmFzZSA9IGJhc2U7CisJCWluY2RhdGEuc2VlbiA9IHNlZW47CisKKwkJcmV2cy0+aW5jbHVkZV9jaGVjayA9IHNob3VsZF9pbmNsdWRlOworCQlyZXZzLT5pbmNsdWRlX2NoZWNrX2RhdGEgPSAmaW5jZGF0YTsKKworCQlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldnMpKQorCQkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCisJCXNob3dfZGF0YS5iaXRtYXBfZ2l0ID0gYml0bWFwX2dpdDsKKwkJc2hvd19kYXRhLmJhc2UgPSBiYXNlOworCisJCXRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKGZpbHRlciwgcmV2cywKKwkJCQkJICAgICAgc2hvd19jb21taXQsIHNob3dfb2JqZWN0LAorCQkJCQkgICAgICAmc2hvd19kYXRhLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gYmFzZTsKK30KKworc3RhdGljIHZvaWQgc2hvd19leHRlbmRlZF9vYmplY3RzKHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsCisJCQkJICBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJICBzaG93X3JlYWNoYWJsZV9mbiBzaG93X3JlYWNoKQoreworCXN0cnVjdCBiaXRtYXAgKm9iamVjdHMgPSBiaXRtYXBfZ2l0LT5yZXN1bHQ7CisJc3RydWN0IGVpbmRleCAqZWluZGV4ID0gJmJpdG1hcF9naXQtPmV4dF9pbmRleDsKKwl1aW50MzJfdCBpOworCisJZm9yIChpID0gMDsgaSA8IGVpbmRleC0+Y291bnQ7ICsraSkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwkJaWYgKCFiaXRtYXBfZ2V0KG9iamVjdHMsIGJpdG1hcF9naXQtPnBhY2stPm51bV9vYmplY3RzICsgaSkpCisJCQljb250aW51ZTsKKworCQlvYmogPSBlaW5kZXgtPm9iamVjdHNbaV07CisJCWlmICgob2JqLT50eXBlID09IE9CSl9CTE9CICYmICFyZXZzLT5ibG9iX29iamVjdHMpIHx8CisJCSAgICAob2JqLT50eXBlID09IE9CSl9UUkVFICYmICFyZXZzLT50cmVlX29iamVjdHMpIHx8CisJCSAgICAob2JqLT50eXBlID09IE9CSl9UQUcgJiYgIXJldnMtPnRhZ19vYmplY3RzKSkKKwkJCWNvbnRpbnVlOworCisJCXNob3dfcmVhY2goJm9iai0+b2lkLCBvYmotPnR5cGUsIDAsIGVpbmRleC0+aGFzaGVzW2ldLCBOVUxMLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdHlwZV9pdGVyYXRvcihzdHJ1Y3QgZXdhaF9pdGVyYXRvciAqaXQsCisJCQkgICAgICAgc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCSAgICAgICBlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBPQkpfQ09NTUlUOgorCQlld2FoX2l0ZXJhdG9yX2luaXQoaXQsIGJpdG1hcF9naXQtPmNvbW1pdHMpOworCQlicmVhazsKKworCWNhc2UgT0JKX1RSRUU6CisJCWV3YWhfaXRlcmF0b3JfaW5pdChpdCwgYml0bWFwX2dpdC0+dHJlZXMpOworCQlicmVhazsKKworCWNhc2UgT0JKX0JMT0I6CisJCWV3YWhfaXRlcmF0b3JfaW5pdChpdCwgYml0bWFwX2dpdC0+YmxvYnMpOworCQlicmVhazsKKworCWNhc2UgT0JKX1RBRzoKKwkJZXdhaF9pdGVyYXRvcl9pbml0KGl0LCBiaXRtYXBfZ2l0LT50YWdzKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVUcoIm9iamVjdCB0eXBlICVkIG5vdCBzdG9yZWQgYnkgYml0bWFwIHR5cGUgaW5kZXgiLCB0eXBlKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X29iamVjdHNfZm9yX3R5cGUoCisJc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwllbnVtIG9iamVjdF90eXBlIG9iamVjdF90eXBlLAorCXNob3dfcmVhY2hhYmxlX2ZuIHNob3dfcmVhY2gpCit7CisJc2l6ZV90IGkgPSAwOworCXVpbnQzMl90IG9mZnNldDsKKworCXN0cnVjdCBld2FoX2l0ZXJhdG9yIGl0OworCWV3b3JkX3QgZmlsdGVyOworCisJc3RydWN0IGJpdG1hcCAqb2JqZWN0cyA9IGJpdG1hcF9naXQtPnJlc3VsdDsKKworCWluaXRfdHlwZV9pdGVyYXRvcigmaXQsIGJpdG1hcF9naXQsIG9iamVjdF90eXBlKTsKKworCWZvciAoaSA9IDA7IGkgPCBvYmplY3RzLT53b3JkX2FsbG9jICYmCisJCQlld2FoX2l0ZXJhdG9yX25leHQoJmZpbHRlciwgJml0KTsgaSsrKSB7CisJCWV3b3JkX3Qgd29yZCA9IG9iamVjdHMtPndvcmRzW2ldICYgZmlsdGVyOworCQlzaXplX3QgcG9zID0gKGkgKiBCSVRTX0lOX0VXT1JEKTsKKworCQlpZiAoIXdvcmQpCisJCQljb250aW51ZTsKKworCQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IEJJVFNfSU5fRVdPUkQ7ICsrb2Zmc2V0KSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqZW50cnk7CisJCQl1aW50MzJfdCBoYXNoID0gMDsKKworCQkJaWYgKCh3b3JkID4+IG9mZnNldCkgPT0gMCkKKwkJCQlicmVhazsKKworCQkJb2Zmc2V0ICs9IGV3YWhfYml0X2N0ejY0KHdvcmQgPj4gb2Zmc2V0KTsKKworCQkJZW50cnkgPSAmYml0bWFwX2dpdC0+cGFjay0+cmV2aW5kZXhbcG9zICsgb2Zmc2V0XTsKKwkJCW50aF9wYWNrZWRfb2JqZWN0X2lkKCZvaWQsIGJpdG1hcF9naXQtPnBhY2ssIGVudHJ5LT5ucik7CisKKwkJCWlmIChiaXRtYXBfZ2l0LT5oYXNoZXMpCisJCQkJaGFzaCA9IGdldF9iZTMyKGJpdG1hcF9naXQtPmhhc2hlcyArIGVudHJ5LT5ucik7CisKKwkJCXNob3dfcmVhY2goJm9pZCwgb2JqZWN0X3R5cGUsIDAsIGhhc2gsIGJpdG1hcF9naXQtPnBhY2ssIGVudHJ5LT5vZmZzZXQpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGluX2JpdG1hcHBlZF9wYWNrKHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsCisJCQkgICAgIHN0cnVjdCBvYmplY3RfbGlzdCAqcm9vdHMpCit7CisJd2hpbGUgKHJvb3RzKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IHJvb3RzLT5pdGVtOworCQlyb290cyA9IHJvb3RzLT5uZXh0OworCisJCWlmIChmaW5kX3BhY2tfZW50cnlfb25lKG9iamVjdC0+b2lkLmhhc2gsIGJpdG1hcF9naXQtPnBhY2spID4gMCkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGJpdG1hcCAqZmluZF90aXBfb2JqZWN0cyhzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKnRpcF9vYmplY3RzLAorCQkJCSAgICAgICBlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJc3RydWN0IGJpdG1hcCAqcmVzdWx0ID0gYml0bWFwX25ldygpOworCXN0cnVjdCBvYmplY3RfbGlzdCAqcDsKKworCWZvciAocCA9IHRpcF9vYmplY3RzOyBwOyBwID0gcC0+bmV4dCkgeworCQlpbnQgcG9zOworCisJCWlmIChwLT5pdGVtLT50eXBlICE9IHR5cGUpCisJCQljb250aW51ZTsKKworCQlwb3MgPSBiaXRtYXBfcG9zaXRpb24oYml0bWFwX2dpdCwgJnAtPml0ZW0tPm9pZCk7CisJCWlmIChwb3MgPCAwKQorCQkJY29udGludWU7CisKKwkJYml0bWFwX3NldChyZXN1bHQsIHBvcyk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZmlsdGVyX2JpdG1hcF9leGNsdWRlX3R5cGUoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCQkgICAgICAgc3RydWN0IG9iamVjdF9saXN0ICp0aXBfb2JqZWN0cywKKwkJCQkgICAgICAgc3RydWN0IGJpdG1hcCAqdG9fZmlsdGVyLAorCQkJCSAgICAgICBlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJc3RydWN0IGVpbmRleCAqZWluZGV4ID0gJmJpdG1hcF9naXQtPmV4dF9pbmRleDsKKwlzdHJ1Y3QgYml0bWFwICp0aXBzOworCXN0cnVjdCBld2FoX2l0ZXJhdG9yIGl0OworCWV3b3JkX3QgbWFzazsKKwl1aW50MzJfdCBpOworCisJaWYgKHR5cGUgIT0gT0JKX0JMT0IgJiYgdHlwZSAhPSBPQkpfVFJFRSkKKwkJQlVHKCJmaWx0ZXJfYml0bWFwX2V4Y2x1ZGVfdHlwZTogdW5zdXBwb3J0ZWQgdHlwZSAnJWQnIiwgdHlwZSk7CisKKwkvKgorCSAqIFRoZSBub24tYml0bWFwIHZlcnNpb24gb2YgdGhpcyBmaWx0ZXIgbmV2ZXIgcmVtb3ZlcworCSAqIG9iamVjdHMgd2hpY2ggdGhlIG90aGVyIHNpZGUgc3BlY2lmaWNhbGx5IGFza2VkIGZvciwKKwkgKiBzbyB3ZSBtdXN0IG1hdGNoIHRoYXQgYmVoYXZpb3IuCisJICovCisJdGlwcyA9IGZpbmRfdGlwX29iamVjdHMoYml0bWFwX2dpdCwgdGlwX29iamVjdHMsIHR5cGUpOworCisJLyoKKwkgKiBXZSBjYW4gdXNlIHRoZSBibG9iIHR5cGUtYml0bWFwIHRvIHdvcmsgaW4gd2hvbGUgd29yZHMKKwkgKiBmb3IgdGhlIG9iamVjdHMgdGhhdCBhcmUgYWN0dWFsbHkgaW4gdGhlIGJpdG1hcHBlZCBwYWNrZmlsZS4KKwkgKi8KKwlmb3IgKGkgPSAwLCBpbml0X3R5cGVfaXRlcmF0b3IoJml0LCBiaXRtYXBfZ2l0LCB0eXBlKTsKKwkgICAgIGkgPCB0b19maWx0ZXItPndvcmRfYWxsb2MgJiYgZXdhaF9pdGVyYXRvcl9uZXh0KCZtYXNrLCAmaXQpOworCSAgICAgaSsrKSB7CisJCWlmIChpIDwgdGlwcy0+d29yZF9hbGxvYykKKwkJCW1hc2sgJj0gfnRpcHMtPndvcmRzW2ldOworCQl0b19maWx0ZXItPndvcmRzW2ldICY9IH5tYXNrOworCX0KKworCS8qCisJICogQ2xlYXIgYW55IGJsb2JzIHRoYXQgd2VyZW4ndCBpbiB0aGUgcGFja2ZpbGUgKGFuZCBzbyB3b3VsZCBub3QgaGF2ZQorCSAqIGJlZW4gY2F1Z2h0IGJ5IHRoZSBsb29wIGFib3ZlLiBXZSdsbCBoYXZlIHRvIGNoZWNrIHRoZW0KKwkgKiBpbmRpdmlkdWFsbHkuCisJICovCisJZm9yIChpID0gMDsgaSA8IGVpbmRleC0+Y291bnQ7IGkrKykgeworCQl1aW50MzJfdCBwb3MgPSBpICsgYml0bWFwX2dpdC0+cGFjay0+bnVtX29iamVjdHM7CisJCWlmIChlaW5kZXgtPm9iamVjdHNbaV0tPnR5cGUgPT0gdHlwZSAmJgorCQkgICAgYml0bWFwX2dldCh0b19maWx0ZXIsIHBvcykgJiYKKwkJICAgICFiaXRtYXBfZ2V0KHRpcHMsIHBvcykpCisJCQliaXRtYXBfdW5zZXQodG9fZmlsdGVyLCBwb3MpOworCX0KKworCWJpdG1hcF9mcmVlKHRpcHMpOworfQorCitzdGF0aWMgdm9pZCBmaWx0ZXJfYml0bWFwX2Jsb2Jfbm9uZShzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJCSAgICBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKnRpcF9vYmplY3RzLAorCQkJCSAgICBzdHJ1Y3QgYml0bWFwICp0b19maWx0ZXIpCit7CisJZmlsdGVyX2JpdG1hcF9leGNsdWRlX3R5cGUoYml0bWFwX2dpdCwgdGlwX29iamVjdHMsIHRvX2ZpbHRlciwKKwkJCQkgICBPQkpfQkxPQik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zaXplX2J5X3BvcyhzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJCSAgICAgdWludDMyX3QgcG9zKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrID0gYml0bWFwX2dpdC0+cGFjazsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJc3RydWN0IG9iamVjdF9pbmZvIG9pID0gT0JKRUNUX0lORk9fSU5JVDsKKworCW9pLnNpemVwID0gJnNpemU7CisKKwlpZiAocG9zIDwgcGFjay0+bnVtX29iamVjdHMpIHsKKwkJc3RydWN0IHJldmluZGV4X2VudHJ5ICplbnRyeSA9ICZwYWNrLT5yZXZpbmRleFtwb3NdOworCQlpZiAocGFja2VkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBwYWNrLAorCQkJCSAgICAgICBlbnRyeS0+b2Zmc2V0LCAmb2kpIDwgMCkgeworCQkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCQludGhfcGFja2VkX29iamVjdF9pZCgmb2lkLCBwYWNrLCBlbnRyeS0+bnIpOworCQkJZGllKF8oInVuYWJsZSB0byBnZXQgc2l6ZSBvZiAlcyIpLCBvaWRfdG9faGV4KCZvaWQpKTsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBlaW5kZXggKmVpbmRleCA9ICZiaXRtYXBfZ2l0LT5leHRfaW5kZXg7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IGVpbmRleC0+b2JqZWN0c1twb3MgLSBwYWNrLT5udW1fb2JqZWN0c107CisJCWlmIChvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQodGhlX3JlcG9zaXRvcnksICZvYmotPm9pZCwgJm9pLCAwKSA8IDApCisJCQlkaWUoXygidW5hYmxlIHRvIGdldCBzaXplIG9mICVzIiksIG9pZF90b19oZXgoJm9iai0+b2lkKSk7CisJfQorCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyB2b2lkIGZpbHRlcl9iaXRtYXBfYmxvYl9saW1pdChzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJCSAgICAgc3RydWN0IG9iamVjdF9saXN0ICp0aXBfb2JqZWN0cywKKwkJCQkgICAgIHN0cnVjdCBiaXRtYXAgKnRvX2ZpbHRlciwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbGltaXQpCit7CisJc3RydWN0IGVpbmRleCAqZWluZGV4ID0gJmJpdG1hcF9naXQtPmV4dF9pbmRleDsKKwlzdHJ1Y3QgYml0bWFwICp0aXBzOworCXN0cnVjdCBld2FoX2l0ZXJhdG9yIGl0OworCWV3b3JkX3QgbWFzazsKKwl1aW50MzJfdCBpOworCisJdGlwcyA9IGZpbmRfdGlwX29iamVjdHMoYml0bWFwX2dpdCwgdGlwX29iamVjdHMsIE9CSl9CTE9CKTsKKworCWZvciAoaSA9IDAsIGluaXRfdHlwZV9pdGVyYXRvcigmaXQsIGJpdG1hcF9naXQsIE9CSl9CTE9CKTsKKwkgICAgIGkgPCB0b19maWx0ZXItPndvcmRfYWxsb2MgJiYgZXdhaF9pdGVyYXRvcl9uZXh0KCZtYXNrLCAmaXQpOworCSAgICAgaSsrKSB7CisJCWV3b3JkX3Qgd29yZCA9IHRvX2ZpbHRlci0+d29yZHNbaV0gJiBtYXNrOworCQl1bnNpZ25lZCBvZmZzZXQ7CisKKwkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBCSVRTX0lOX0VXT1JEOyBvZmZzZXQrKykgeworCQkJdWludDMyX3QgcG9zOworCisJCQlpZiAoKHdvcmQgPj4gb2Zmc2V0KSA9PSAwKQorCQkJCWJyZWFrOworCQkJb2Zmc2V0ICs9IGV3YWhfYml0X2N0ejY0KHdvcmQgPj4gb2Zmc2V0KTsKKwkJCXBvcyA9IGkgKiBCSVRTX0lOX0VXT1JEICsgb2Zmc2V0OworCisJCQlpZiAoIWJpdG1hcF9nZXQodGlwcywgcG9zKSAmJgorCQkJICAgIGdldF9zaXplX2J5X3BvcyhiaXRtYXBfZ2l0LCBwb3MpID49IGxpbWl0KQorCQkJCWJpdG1hcF91bnNldCh0b19maWx0ZXIsIHBvcyk7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZWluZGV4LT5jb3VudDsgaSsrKSB7CisJCXVpbnQzMl90IHBvcyA9IGkgKyBiaXRtYXBfZ2l0LT5wYWNrLT5udW1fb2JqZWN0czsKKwkJaWYgKGVpbmRleC0+b2JqZWN0c1tpXS0+dHlwZSA9PSBPQkpfQkxPQiAmJgorCQkgICAgYml0bWFwX2dldCh0b19maWx0ZXIsIHBvcykgJiYKKwkJICAgICFiaXRtYXBfZ2V0KHRpcHMsIHBvcykgJiYKKwkJICAgIGdldF9zaXplX2J5X3BvcyhiaXRtYXBfZ2l0LCBwb3MpID49IGxpbWl0KQorCQkJYml0bWFwX3Vuc2V0KHRvX2ZpbHRlciwgcG9zKTsKKwl9CisKKwliaXRtYXBfZnJlZSh0aXBzKTsKK30KKworc3RhdGljIHZvaWQgZmlsdGVyX2JpdG1hcF90cmVlX2RlcHRoKHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsCisJCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKnRpcF9vYmplY3RzLAorCQkJCSAgICAgc3RydWN0IGJpdG1hcCAqdG9fZmlsdGVyLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBsaW1pdCkKK3sKKwlpZiAobGltaXQpCisJCUJVRygiZmlsdGVyX2JpdG1hcF90cmVlX2RlcHRoIGdpdmVuIG5vbi16ZXJvIGxpbWl0Iik7CisKKwlmaWx0ZXJfYml0bWFwX2V4Y2x1ZGVfdHlwZShiaXRtYXBfZ2l0LCB0aXBfb2JqZWN0cywgdG9fZmlsdGVyLAorCQkJCSAgIE9CSl9UUkVFKTsKKwlmaWx0ZXJfYml0bWFwX2V4Y2x1ZGVfdHlwZShiaXRtYXBfZ2l0LCB0aXBfb2JqZWN0cywgdG9fZmlsdGVyLAorCQkJCSAgIE9CSl9CTE9CKTsKK30KKworc3RhdGljIGludCBmaWx0ZXJfYml0bWFwKHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsCisJCQkgc3RydWN0IG9iamVjdF9saXN0ICp0aXBfb2JqZWN0cywKKwkJCSBzdHJ1Y3QgYml0bWFwICp0b19maWx0ZXIsCisJCQkgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyKQoreworCWlmICghZmlsdGVyIHx8IGZpbHRlci0+Y2hvaWNlID09IExPRkNfRElTQUJMRUQpCisJCXJldHVybiAwOworCisJaWYgKGZpbHRlci0+Y2hvaWNlID09IExPRkNfQkxPQl9OT05FKSB7CisJCWlmIChiaXRtYXBfZ2l0KQorCQkJZmlsdGVyX2JpdG1hcF9ibG9iX25vbmUoYml0bWFwX2dpdCwgdGlwX29iamVjdHMsCisJCQkJCQl0b19maWx0ZXIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZmlsdGVyLT5jaG9pY2UgPT0gTE9GQ19CTE9CX0xJTUlUKSB7CisJCWlmIChiaXRtYXBfZ2l0KQorCQkJZmlsdGVyX2JpdG1hcF9ibG9iX2xpbWl0KGJpdG1hcF9naXQsIHRpcF9vYmplY3RzLAorCQkJCQkJIHRvX2ZpbHRlciwKKwkJCQkJCSBmaWx0ZXItPmJsb2JfbGltaXRfdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZmlsdGVyLT5jaG9pY2UgPT0gTE9GQ19UUkVFX0RFUFRIICYmCisJICAgIGZpbHRlci0+dHJlZV9leGNsdWRlX2RlcHRoID09IDApIHsKKwkJaWYgKGJpdG1hcF9naXQpCisJCQlmaWx0ZXJfYml0bWFwX3RyZWVfZGVwdGgoYml0bWFwX2dpdCwgdGlwX29iamVjdHMsCisJCQkJCQkgdG9fZmlsdGVyLAorCQkJCQkJIGZpbHRlci0+dHJlZV9leGNsdWRlX2RlcHRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogZmlsdGVyIGNob2ljZSBub3QgaGFuZGxlZCAqLworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBjYW5fZmlsdGVyX2JpdG1hcChzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXIpCit7CisJcmV0dXJuICFmaWx0ZXJfYml0bWFwKE5VTEwsIE5VTEwsIE5VTEwsIGZpbHRlcik7Cit9CisKK3N0cnVjdCBiaXRtYXBfaW5kZXggKnByZXBhcmVfYml0bWFwX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyKQoreworCXVuc2lnbmVkIGludCBpOworCisJc3RydWN0IG9iamVjdF9saXN0ICp3YW50cyA9IE5VTEw7CisJc3RydWN0IG9iamVjdF9saXN0ICpoYXZlcyA9IE5VTEw7CisKKwlzdHJ1Y3QgYml0bWFwICp3YW50c19iaXRtYXAgPSBOVUxMOworCXN0cnVjdCBiaXRtYXAgKmhhdmVzX2JpdG1hcCA9IE5VTEw7CisKKwlzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0OworCisJLyoKKwkgKiBXZSBjYW4ndCBkbyBwYXRoc3BlYyBsaW1pdGluZyB3aXRoIGJpdG1hcHMsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdworCSAqIHdoaWNoIGNvbW1pdHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB3aGljaCBvYmplY3QgY2hhbmdlcyAobGV0IGFsb25lCisJICogZXZlbiB3aGljaCBvYmplY3RzIGFyZSBhc3NvY2lhdGVkIHdpdGggd2hpY2ggcGF0aHMpLgorCSAqLworCWlmIChyZXZzLT5wcnVuZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWNhbl9maWx0ZXJfYml0bWFwKGZpbHRlcikpCisJCXJldHVybiBOVUxMOworCisJLyogdHJ5IHRvIG9wZW4gYSBiaXRtYXBwZWQgcGFjaywgYnV0IGRvbid0IHBhcnNlIGl0IHlldAorCSAqIGJlY2F1c2Ugd2UgbWF5IG5vdCBuZWVkIHRvIHVzZSBpdCAqLworCWJpdG1hcF9naXQgPSB4Y2FsbG9jKDEsIHNpemVvZigqYml0bWFwX2dpdCkpOworCWlmIChvcGVuX3BhY2tfYml0bWFwKHJldnMtPnJlcG8sIGJpdG1hcF9naXQpIDwgMCkKKwkJZ290byBjbGVhbnVwOworCisJZm9yIChpID0gMDsgaSA8IHJldnMtPnBlbmRpbmcubnI7ICsraSkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0uaXRlbTsKKworCQlpZiAob2JqZWN0LT50eXBlID09IE9CSl9OT05FKQorCQkJcGFyc2Vfb2JqZWN0X29yX2RpZSgmb2JqZWN0LT5vaWQsIE5VTEwpOworCisJCXdoaWxlIChvYmplY3QtPnR5cGUgPT0gT0JKX1RBRykgeworCQkJc3RydWN0IHRhZyAqdGFnID0gKHN0cnVjdCB0YWcgKikgb2JqZWN0OworCisJCQlpZiAob2JqZWN0LT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQkJb2JqZWN0X2xpc3RfaW5zZXJ0KG9iamVjdCwgJmhhdmVzKTsKKwkJCWVsc2UKKwkJCQlvYmplY3RfbGlzdF9pbnNlcnQob2JqZWN0LCAmd2FudHMpOworCisJCQlvYmplY3QgPSBwYXJzZV9vYmplY3Rfb3JfZGllKGdldF90YWdnZWRfb2lkKHRhZyksIE5VTEwpOworCQl9CisKKwkJaWYgKG9iamVjdC0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJb2JqZWN0X2xpc3RfaW5zZXJ0KG9iamVjdCwgJmhhdmVzKTsKKwkJZWxzZQorCQkJb2JqZWN0X2xpc3RfaW5zZXJ0KG9iamVjdCwgJndhbnRzKTsKKwl9CisKKwkvKgorCSAqIGlmIHdlIGhhdmUgYSBIQVZFUyBsaXN0LCBidXQgbm9uZSBvZiB0aG9zZSBoYXZlcyBpcyBjb250YWluZWQKKwkgKiBpbiB0aGUgcGFja2ZpbGUgdGhhdCBoYXMgYSBiaXRtYXAsIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8KKwkgKiBvcHRpbWl6ZSBoZXJlCisJICovCisJaWYgKGhhdmVzICYmICFpbl9iaXRtYXBwZWRfcGFjayhiaXRtYXBfZ2l0LCBoYXZlcykpCisJCWdvdG8gY2xlYW51cDsKKworCS8qIGlmIHdlIGRvbid0IHdhbnQgYW55dGhpbmcsIHdlJ3JlIGRvbmUgaGVyZSAqLworCWlmICghd2FudHMpCisJCWdvdG8gY2xlYW51cDsKKworCS8qCisJICogbm93IHdlJ3JlIGdvaW5nIHRvIHVzZSBiaXRtYXBzLCBzbyBsb2FkIHRoZSBhY3R1YWwgYml0bWFwIGVudHJpZXMKKwkgKiBmcm9tIGRpc2suIHRoaXMgaXMgdGhlIHBvaW50IG9mIG5vIHJldHVybjsgYWZ0ZXIgdGhpcyB0aGUgcmV2X2xpc3QKKwkgKiBiZWNvbWVzIGludmFsaWRhdGVkIGFuZCB3ZSBtdXN0IHBlcmZvcm0gdGhlIHJldndhbGsgdGhyb3VnaCBiaXRtYXBzCisJICovCisJaWYgKGxvYWRfcGFja19iaXRtYXAoYml0bWFwX2dpdCkgPCAwKQorCQlnb3RvIGNsZWFudXA7CisKKwlvYmplY3RfYXJyYXlfY2xlYXIoJnJldnMtPnBlbmRpbmcpOworCisJaWYgKGhhdmVzKSB7CisJCXJldnMtPmlnbm9yZV9taXNzaW5nX2xpbmtzID0gMTsKKwkJaGF2ZXNfYml0bWFwID0gZmluZF9vYmplY3RzKGJpdG1hcF9naXQsIHJldnMsIGhhdmVzLCBOVUxMLAorCQkJCQkgICAgZmlsdGVyKTsKKwkJcmVzZXRfcmV2aXNpb25fd2FsaygpOworCQlyZXZzLT5pZ25vcmVfbWlzc2luZ19saW5rcyA9IDA7CisKKwkJaWYgKGhhdmVzX2JpdG1hcCA9PSBOVUxMKQorCQkJQlVHKCJmYWlsZWQgdG8gcGVyZm9ybSBiaXRtYXAgd2FsayIpOworCX0KKworCXdhbnRzX2JpdG1hcCA9IGZpbmRfb2JqZWN0cyhiaXRtYXBfZ2l0LCByZXZzLCB3YW50cywgaGF2ZXNfYml0bWFwLAorCQkJCSAgICBmaWx0ZXIpOworCisJaWYgKCF3YW50c19iaXRtYXApCisJCUJVRygiZmFpbGVkIHRvIHBlcmZvcm0gYml0bWFwIHdhbGsiKTsKKworCWlmIChoYXZlc19iaXRtYXApCisJCWJpdG1hcF9hbmRfbm90KHdhbnRzX2JpdG1hcCwgaGF2ZXNfYml0bWFwKTsKKworCWZpbHRlcl9iaXRtYXAoYml0bWFwX2dpdCwgd2FudHMsIHdhbnRzX2JpdG1hcCwgZmlsdGVyKTsKKworCWJpdG1hcF9naXQtPnJlc3VsdCA9IHdhbnRzX2JpdG1hcDsKKwliaXRtYXBfZ2l0LT5oYXZlcyA9IGhhdmVzX2JpdG1hcDsKKworCW9iamVjdF9saXN0X2ZyZWUoJndhbnRzKTsKKwlvYmplY3RfbGlzdF9mcmVlKCZoYXZlcyk7CisKKwlyZXR1cm4gYml0bWFwX2dpdDsKKworY2xlYW51cDoKKwlmcmVlX2JpdG1hcF9pbmRleChiaXRtYXBfZ2l0KTsKKwlvYmplY3RfbGlzdF9mcmVlKCZ3YW50cyk7CisJb2JqZWN0X2xpc3RfZnJlZSgmaGF2ZXMpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCB0cnlfcGFydGlhbF9yZXVzZShzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJICAgICAgc2l6ZV90IHBvcywKKwkJCSAgICAgIHN0cnVjdCBiaXRtYXAgKnJldXNlLAorCQkJICAgICAgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzKQoreworCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqcmV2aWR4OworCW9mZl90IG9mZnNldDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJaWYgKHBvcyA+PSBiaXRtYXBfZ2l0LT5wYWNrLT5udW1fb2JqZWN0cykKKwkJcmV0dXJuOyAvKiBub3QgYWN0dWFsbHkgaW4gdGhlIHBhY2sgKi8KKworCXJldmlkeCA9ICZiaXRtYXBfZ2l0LT5wYWNrLT5yZXZpbmRleFtwb3NdOworCW9mZnNldCA9IHJldmlkeC0+b2Zmc2V0OworCXR5cGUgPSB1bnBhY2tfb2JqZWN0X2hlYWRlcihiaXRtYXBfZ2l0LT5wYWNrLCB3X2N1cnMsICZvZmZzZXQsICZzaXplKTsKKwlpZiAodHlwZSA8IDApCisJCXJldHVybjsgLyogYnJva2VuIHBhY2tmaWxlLCBwdW50ICovCisKKwlpZiAodHlwZSA9PSBPQkpfUkVGX0RFTFRBIHx8IHR5cGUgPT0gT0JKX09GU19ERUxUQSkgeworCQlvZmZfdCBiYXNlX29mZnNldDsKKwkJaW50IGJhc2VfcG9zOworCisJCS8qCisJCSAqIEZpbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBiYXNlIG9iamVjdCBzbyB3ZSBjYW4gbG9vayBpdCB1cAorCQkgKiBpbiBvdXIgYml0bWFwcy4gSWYgd2UgY2FuJ3QgY29tZSB1cCB3aXRoIGFuIG9mZnNldCwgb3IgaWYKKwkJICogdGhhdCBvZmZzZXQgaXMgbm90IGluIHRoZSByZXZpZHgsIHRoZSBwYWNrIGlzIGNvcnJ1cHQuCisJCSAqIFRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8sIHNvIGp1c3QgcHVudCBvbiB0aGlzIG9iamVjdCwKKwkJICogYW5kIHRoZSBub3JtYWwgc2xvdyBwYXRoIHdpbGwgY29tcGxhaW4gYWJvdXQgaXQgaW4KKwkJICogbW9yZSBkZXRhaWwuCisJCSAqLworCQliYXNlX29mZnNldCA9IGdldF9kZWx0YV9iYXNlKGJpdG1hcF9naXQtPnBhY2ssIHdfY3VycywKKwkJCQkJICAgICAmb2Zmc2V0LCB0eXBlLCByZXZpZHgtPm9mZnNldCk7CisJCWlmICghYmFzZV9vZmZzZXQpCisJCQlyZXR1cm47CisJCWJhc2VfcG9zID0gZmluZF9yZXZpbmRleF9wb3NpdGlvbihiaXRtYXBfZ2l0LT5wYWNrLCBiYXNlX29mZnNldCk7CisJCWlmIChiYXNlX3BvcyA8IDApCisJCQlyZXR1cm47CisKKwkJLyoKKwkJICogV2UgYXNzdW1lIGRlbHRhIGRlcGVuZGVuY2llcyBhbHdheXMgcG9pbnQgYmFja3dhcmRzLiBUaGlzCisJCSAqIGxldHMgdXMgZG8gYSBzaW5nbGUgcGFzcywgYW5kIGlzIGJhc2ljYWxseSBhbHdheXMgdHJ1ZQorCQkgKiBkdWUgdG8gdGhlIHdheSBPRlNfREVMVEFzIHdvcmsuIFlvdSB3b3VsZCBub3QgdHlwaWNhbGx5CisJCSAqIGZpbmQgUkVGX0RFTFRBIGluIGEgYml0bWFwcGVkIHBhY2ssIHNpbmNlIHdlIG9ubHkgYml0bWFwCisJCSAqIHBhY2tzIHdlIHdyaXRlIGZyZXNoLCBhbmQgT0ZTX0RFTFRBIGlzIHRoZSBkZWZhdWx0KS4gQnV0CisJCSAqIGxldCdzIGRvdWJsZSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHBhY2sgd2Fzbid0IHdyaXR0ZW4gd2l0aAorCQkgKiBvZGQgcGFyYW1ldGVycy4KKwkJICovCisJCWlmIChiYXNlX3BvcyA+PSBwb3MpCisJCQlyZXR1cm47CisKKwkJLyoKKwkJICogQW5kIGZpbmFsbHksIGlmIHdlJ3JlIG5vdCBzZW5kaW5nIHRoZSBiYXNlIGFzIHBhcnQgb2Ygb3VyCisJCSAqIHJldXNlIGNodW5rLCB0aGVuIGRvbid0IHNlbmQgdGhpcyBvYmplY3QgZWl0aGVyLiBUaGUgYmFzZQorCQkgKiB3b3VsZCBjb21lIGFmdGVyIHVzLCBhbG9uZyB3aXRoIG90aGVyIG9iamVjdHMgbm90CisJCSAqIG5lY2Vzc2FyaWx5IGluIHRoZSBwYWNrLCB3aGljaCBtZWFucyB3ZSdkIG5lZWQgdG8gY29udmVydAorCQkgKiB0byBSRUZfREVMVEEgb24gdGhlIGZseS4gQmV0dGVyIHRvIGp1c3QgbGV0IHRoZSBub3JtYWwKKwkJICogb2JqZWN0X2VudHJ5IGNvZGUgcGF0aCBoYW5kbGUgaXQuCisJCSAqLworCQlpZiAoIWJpdG1hcF9nZXQocmV1c2UsIGJhc2VfcG9zKSkKKwkJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHdlIGdvdCBoZXJlLCB0aGVuIHRoZSBvYmplY3QgaXMgT0sgdG8gcmV1c2UuIE1hcmsgaXQuCisJICovCisJYml0bWFwX3NldChyZXVzZSwgcG9zKTsKK30KKworaW50IHJldXNlX3BhcnRpYWxfcGFja2ZpbGVfZnJvbV9iaXRtYXAoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCQkgICAgICAgc3RydWN0IHBhY2tlZF9naXQgKipwYWNrZmlsZV9vdXQsCisJCQkJICAgICAgIHVpbnQzMl90ICplbnRyaWVzLAorCQkJCSAgICAgICBzdHJ1Y3QgYml0bWFwICoqcmV1c2Vfb3V0KQoreworCXN0cnVjdCBiaXRtYXAgKnJlc3VsdCA9IGJpdG1hcF9naXQtPnJlc3VsdDsKKwlzdHJ1Y3QgYml0bWFwICpyZXVzZTsKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndfY3VycyA9IE5VTEw7CisJc2l6ZV90IGkgPSAwOworCXVpbnQzMl90IG9mZnNldDsKKworCWFzc2VydChyZXN1bHQpOworCisJd2hpbGUgKGkgPCByZXN1bHQtPndvcmRfYWxsb2MgJiYgcmVzdWx0LT53b3Jkc1tpXSA9PSAoZXdvcmRfdCl+MCkKKwkJaSsrOworCisJLyogRG9uJ3QgbWFyayBvYmplY3RzIG5vdCBpbiB0aGUgcGFja2ZpbGUgKi8KKwlpZiAoaSA+IGJpdG1hcF9naXQtPnBhY2stPm51bV9vYmplY3RzIC8gQklUU19JTl9FV09SRCkKKwkJaSA9IGJpdG1hcF9naXQtPnBhY2stPm51bV9vYmplY3RzIC8gQklUU19JTl9FV09SRDsKKworCXJldXNlID0gYml0bWFwX3dvcmRfYWxsb2MoaSk7CisJbWVtc2V0KHJldXNlLT53b3JkcywgMHhGRiwgaSAqIHNpemVvZihld29yZF90KSk7CisKKwlmb3IgKDsgaSA8IHJlc3VsdC0+d29yZF9hbGxvYzsgKytpKSB7CisJCWV3b3JkX3Qgd29yZCA9IHJlc3VsdC0+d29yZHNbaV07CisJCXNpemVfdCBwb3MgPSAoaSAqIEJJVFNfSU5fRVdPUkQpOworCisJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgQklUU19JTl9FV09SRDsgKytvZmZzZXQpIHsKKwkJCWlmICgod29yZCA+PiBvZmZzZXQpID09IDApCisJCQkJYnJlYWs7CisKKwkJCW9mZnNldCArPSBld2FoX2JpdF9jdHo2NCh3b3JkID4+IG9mZnNldCk7CisJCQl0cnlfcGFydGlhbF9yZXVzZShiaXRtYXBfZ2l0LCBwb3MgKyBvZmZzZXQsIHJldXNlLCAmd19jdXJzKTsKKwkJfQorCX0KKworCXVudXNlX3BhY2soJndfY3Vycyk7CisKKwkqZW50cmllcyA9IGJpdG1hcF9wb3Bjb3VudChyZXVzZSk7CisJaWYgKCEqZW50cmllcykgeworCQliaXRtYXBfZnJlZShyZXVzZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIERyb3AgYW55IHJldXNlZCBvYmplY3RzIGZyb20gdGhlIHJlc3VsdCwgc2luY2UgdGhleSB3aWxsIG5vdAorCSAqIG5lZWQgdG8gYmUgaGFuZGxlZCBzZXBhcmF0ZWx5LgorCSAqLworCWJpdG1hcF9hbmRfbm90KHJlc3VsdCwgcmV1c2UpOworCSpwYWNrZmlsZV9vdXQgPSBiaXRtYXBfZ2l0LT5wYWNrOworCSpyZXVzZV9vdXQgPSByZXVzZTsKKwlyZXR1cm4gMDsKK30KKworaW50IGJpdG1hcF93YWxrX2NvbnRhaW5zKHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsCisJCQkgc3RydWN0IGJpdG1hcCAqYml0bWFwLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaW50IGlkeDsKKworCWlmICghYml0bWFwKQorCQlyZXR1cm4gMDsKKworCWlkeCA9IGJpdG1hcF9wb3NpdGlvbihiaXRtYXBfZ2l0LCBvaWQpOworCXJldHVybiBpZHggPj0gMCAmJiBiaXRtYXBfZ2V0KGJpdG1hcCwgaWR4KTsKK30KKwordm9pZCB0cmF2ZXJzZV9iaXRtYXBfY29tbWl0X2xpc3Qoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCQkgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCSBzaG93X3JlYWNoYWJsZV9mbiBzaG93X3JlYWNoYWJsZSkKK3sKKwlhc3NlcnQoYml0bWFwX2dpdC0+cmVzdWx0KTsKKworCXNob3dfb2JqZWN0c19mb3JfdHlwZShiaXRtYXBfZ2l0LCBPQkpfQ09NTUlULCBzaG93X3JlYWNoYWJsZSk7CisJaWYgKHJldnMtPnRyZWVfb2JqZWN0cykKKwkJc2hvd19vYmplY3RzX2Zvcl90eXBlKGJpdG1hcF9naXQsIE9CSl9UUkVFLCBzaG93X3JlYWNoYWJsZSk7CisJaWYgKHJldnMtPmJsb2Jfb2JqZWN0cykKKwkJc2hvd19vYmplY3RzX2Zvcl90eXBlKGJpdG1hcF9naXQsIE9CSl9CTE9CLCBzaG93X3JlYWNoYWJsZSk7CisJaWYgKHJldnMtPnRhZ19vYmplY3RzKQorCQlzaG93X29iamVjdHNfZm9yX3R5cGUoYml0bWFwX2dpdCwgT0JKX1RBRywgc2hvd19yZWFjaGFibGUpOworCisJc2hvd19leHRlbmRlZF9vYmplY3RzKGJpdG1hcF9naXQsIHJldnMsIHNob3dfcmVhY2hhYmxlKTsKK30KKworc3RhdGljIHVpbnQzMl90IGNvdW50X29iamVjdF90eXBlKHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsCisJCQkJICBlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJc3RydWN0IGJpdG1hcCAqb2JqZWN0cyA9IGJpdG1hcF9naXQtPnJlc3VsdDsKKwlzdHJ1Y3QgZWluZGV4ICplaW5kZXggPSAmYml0bWFwX2dpdC0+ZXh0X2luZGV4OworCisJdWludDMyX3QgaSA9IDAsIGNvdW50ID0gMDsKKwlzdHJ1Y3QgZXdhaF9pdGVyYXRvciBpdDsKKwlld29yZF90IGZpbHRlcjsKKworCWluaXRfdHlwZV9pdGVyYXRvcigmaXQsIGJpdG1hcF9naXQsIHR5cGUpOworCisJd2hpbGUgKGkgPCBvYmplY3RzLT53b3JkX2FsbG9jICYmIGV3YWhfaXRlcmF0b3JfbmV4dCgmZmlsdGVyLCAmaXQpKSB7CisJCWV3b3JkX3Qgd29yZCA9IG9iamVjdHMtPndvcmRzW2krK10gJiBmaWx0ZXI7CisJCWNvdW50ICs9IGV3YWhfYml0X3BvcGNvdW50NjQod29yZCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGVpbmRleC0+Y291bnQ7ICsraSkgeworCQlpZiAoZWluZGV4LT5vYmplY3RzW2ldLT50eXBlID09IHR5cGUgJiYKKwkJCWJpdG1hcF9nZXQob2JqZWN0cywgYml0bWFwX2dpdC0+cGFjay0+bnVtX29iamVjdHMgKyBpKSkKKwkJCWNvdW50Kys7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCit2b2lkIGNvdW50X2JpdG1hcF9jb21taXRfbGlzdChzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJICAgICAgdWludDMyX3QgKmNvbW1pdHMsIHVpbnQzMl90ICp0cmVlcywKKwkJCSAgICAgIHVpbnQzMl90ICpibG9icywgdWludDMyX3QgKnRhZ3MpCit7CisJYXNzZXJ0KGJpdG1hcF9naXQtPnJlc3VsdCk7CisKKwlpZiAoY29tbWl0cykKKwkJKmNvbW1pdHMgPSBjb3VudF9vYmplY3RfdHlwZShiaXRtYXBfZ2l0LCBPQkpfQ09NTUlUKTsKKworCWlmICh0cmVlcykKKwkJKnRyZWVzID0gY291bnRfb2JqZWN0X3R5cGUoYml0bWFwX2dpdCwgT0JKX1RSRUUpOworCisJaWYgKGJsb2JzKQorCQkqYmxvYnMgPSBjb3VudF9vYmplY3RfdHlwZShiaXRtYXBfZ2l0LCBPQkpfQkxPQik7CisKKwlpZiAodGFncykKKwkJKnRhZ3MgPSBjb3VudF9vYmplY3RfdHlwZShiaXRtYXBfZ2l0LCBPQkpfVEFHKTsKK30KKworc3RydWN0IGJpdG1hcF90ZXN0X2RhdGEgeworCXN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQ7CisJc3RydWN0IGJpdG1hcCAqYmFzZTsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByZzsKKwlzaXplX3Qgc2VlbjsKK307CisKK3N0YXRpYyB2b2lkIHRlc3Rfc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqZWN0LCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBiaXRtYXBfdGVzdF9kYXRhICp0ZGF0YSA9IGRhdGE7CisJaW50IGJpdG1hcF9wb3M7CisKKwliaXRtYXBfcG9zID0gYml0bWFwX3Bvc2l0aW9uKHRkYXRhLT5iaXRtYXBfZ2l0LCAmb2JqZWN0LT5vaWQpOworCWlmIChiaXRtYXBfcG9zIDwgMCkKKwkJZGllKCJPYmplY3Qgbm90IGluIGJpdG1hcDogJXNcbiIsIG9pZF90b19oZXgoJm9iamVjdC0+b2lkKSk7CisKKwliaXRtYXBfc2V0KHRkYXRhLT5iYXNlLCBiaXRtYXBfcG9zKTsKKwlkaXNwbGF5X3Byb2dyZXNzKHRkYXRhLT5wcmcsICsrdGRhdGEtPnNlZW4pOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3Nob3dfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYml0bWFwX3Rlc3RfZGF0YSAqdGRhdGEgPSBkYXRhOworCWludCBiaXRtYXBfcG9zOworCisJYml0bWFwX3BvcyA9IGJpdG1hcF9wb3NpdGlvbih0ZGF0YS0+Yml0bWFwX2dpdCwKKwkJCQkgICAgICZjb21taXQtPm9iamVjdC5vaWQpOworCWlmIChiaXRtYXBfcG9zIDwgMCkKKwkJZGllKCJPYmplY3Qgbm90IGluIGJpdG1hcDogJXNcbiIsIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCisJYml0bWFwX3NldCh0ZGF0YS0+YmFzZSwgYml0bWFwX3Bvcyk7CisJZGlzcGxheV9wcm9ncmVzcyh0ZGF0YS0+cHJnLCArK3RkYXRhLT5zZWVuKTsKK30KKwordm9pZCB0ZXN0X2JpdG1hcF93YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpyb290OworCXN0cnVjdCBiaXRtYXAgKnJlc3VsdCA9IE5VTEw7CisJa2hpdGVyX3QgcG9zOworCXNpemVfdCByZXN1bHRfcG9wY250OworCXN0cnVjdCBiaXRtYXBfdGVzdF9kYXRhIHRkYXRhOworCXN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQ7CisKKwlpZiAoIShiaXRtYXBfZ2l0ID0gcHJlcGFyZV9iaXRtYXBfZ2l0KHJldnMtPnJlcG8pKSkKKwkJZGllKCJmYWlsZWQgdG8gbG9hZCBiaXRtYXAgaW5kZXhlcyIpOworCisJaWYgKHJldnMtPnBlbmRpbmcubnIgIT0gMSkKKwkJZGllKCJ5b3UgbXVzdCBzcGVjaWZ5IGV4YWN0bHkgb25lIGNvbW1pdCB0byB0ZXN0Iik7CisKKwlmcHJpbnRmKHN0ZGVyciwgIkJpdG1hcCB2JWQgdGVzdCAoJWQgZW50cmllcyBsb2FkZWQpXG4iLAorCQliaXRtYXBfZ2l0LT52ZXJzaW9uLCBiaXRtYXBfZ2l0LT5lbnRyeV9jb3VudCk7CisKKwlyb290ID0gcmV2cy0+cGVuZGluZy5vYmplY3RzWzBdLml0ZW07CisJcG9zID0ga2hfZ2V0X29pZF9tYXAoYml0bWFwX2dpdC0+Yml0bWFwcywgcm9vdC0+b2lkKTsKKworCWlmIChwb3MgPCBraF9lbmQoYml0bWFwX2dpdC0+Yml0bWFwcykpIHsKKwkJc3RydWN0IHN0b3JlZF9iaXRtYXAgKnN0ID0ga2hfdmFsdWUoYml0bWFwX2dpdC0+Yml0bWFwcywgcG9zKTsKKwkJc3RydWN0IGV3YWhfYml0bWFwICpibSA9IGxvb2t1cF9zdG9yZWRfYml0bWFwKHN0KTsKKworCQlmcHJpbnRmKHN0ZGVyciwgIkZvdW5kIGJpdG1hcCBmb3IgJXMuICVkIGJpdHMgLyAlMDh4IGNoZWNrc3VtXG4iLAorCQkJb2lkX3RvX2hleCgmcm9vdC0+b2lkKSwgKGludClibS0+Yml0X3NpemUsIGV3YWhfY2hlY2tzdW0oYm0pKTsKKworCQlyZXN1bHQgPSBld2FoX3RvX2JpdG1hcChibSk7CisJfQorCisJaWYgKHJlc3VsdCA9PSBOVUxMKQorCQlkaWUoIkNvbW1pdCAlcyBkb2Vzbid0IGhhdmUgYW4gaW5kZXhlZCBiaXRtYXAiLCBvaWRfdG9faGV4KCZyb290LT5vaWQpKTsKKworCXJldnMtPnRhZ19vYmplY3RzID0gMTsKKwlyZXZzLT50cmVlX29iamVjdHMgPSAxOworCXJldnMtPmJsb2Jfb2JqZWN0cyA9IDE7CisKKwlyZXN1bHRfcG9wY250ID0gYml0bWFwX3BvcGNvdW50KHJlc3VsdCk7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldnMpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisKKwl0ZGF0YS5iaXRtYXBfZ2l0ID0gYml0bWFwX2dpdDsKKwl0ZGF0YS5iYXNlID0gYml0bWFwX25ldygpOworCXRkYXRhLnByZyA9IHN0YXJ0X3Byb2dyZXNzKCJWZXJpZnlpbmcgYml0bWFwIGVudHJpZXMiLCByZXN1bHRfcG9wY250KTsKKwl0ZGF0YS5zZWVuID0gMDsKKworCXRyYXZlcnNlX2NvbW1pdF9saXN0KHJldnMsICZ0ZXN0X3Nob3dfY29tbWl0LCAmdGVzdF9zaG93X29iamVjdCwgJnRkYXRhKTsKKworCXN0b3BfcHJvZ3Jlc3MoJnRkYXRhLnByZyk7CisKKwlpZiAoYml0bWFwX2VxdWFscyhyZXN1bHQsIHRkYXRhLmJhc2UpKQorCQlmcHJpbnRmKHN0ZGVyciwgIk9LIVxuIik7CisJZWxzZQorCQlmcHJpbnRmKHN0ZGVyciwgIk1pc21hdGNoIVxuIik7CisKKwlmcmVlX2JpdG1hcF9pbmRleChiaXRtYXBfZ2l0KTsKK30KKworc3RhdGljIGludCByZWJ1aWxkX2JpdG1hcCh1aW50MzJfdCAqcmVwb3NpdGlvbiwKKwkJCSAgc3RydWN0IGV3YWhfYml0bWFwICpzb3VyY2UsCisJCQkgIHN0cnVjdCBiaXRtYXAgKmRlc3QpCit7CisJdWludDMyX3QgcG9zID0gMDsKKwlzdHJ1Y3QgZXdhaF9pdGVyYXRvciBpdDsKKwlld29yZF90IHdvcmQ7CisKKwlld2FoX2l0ZXJhdG9yX2luaXQoJml0LCBzb3VyY2UpOworCisJd2hpbGUgKGV3YWhfaXRlcmF0b3JfbmV4dCgmd29yZCwgJml0KSkgeworCQl1aW50MzJfdCBvZmZzZXQsIGJpdF9wb3M7CisKKwkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBCSVRTX0lOX0VXT1JEOyArK29mZnNldCkgeworCQkJaWYgKCh3b3JkID4+IG9mZnNldCkgPT0gMCkKKwkJCQlicmVhazsKKworCQkJb2Zmc2V0ICs9IGV3YWhfYml0X2N0ejY0KHdvcmQgPj4gb2Zmc2V0KTsKKworCQkJYml0X3BvcyA9IHJlcG9zaXRpb25bcG9zICsgb2Zmc2V0XTsKKwkJCWlmIChiaXRfcG9zID4gMCkKKwkJCQliaXRtYXBfc2V0KGRlc3QsIGJpdF9wb3MgLSAxKTsKKwkJCWVsc2UgLyogY2FuJ3QgcmV1c2UsIHdlIGRvbid0IGhhdmUgdGhlIG9iamVjdCAqLworCQkJCXJldHVybiAtMTsKKwkJfQorCisJCXBvcyArPSBCSVRTX0lOX0VXT1JEOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJlYnVpbGRfZXhpc3RpbmdfYml0bWFwcyhzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJICAgICBzdHJ1Y3QgcGFja2luZ19kYXRhICptYXBwaW5nLAorCQkJICAgICBraF9vaWRfbWFwX3QgKnJldXNlZF9iaXRtYXBzLAorCQkJICAgICBpbnQgc2hvd19wcm9ncmVzcykKK3sKKwl1aW50MzJfdCBpLCBudW1fb2JqZWN0czsKKwl1aW50MzJfdCAqcmVwb3NpdGlvbjsKKwlzdHJ1Y3QgYml0bWFwICpyZWJ1aWxkOworCXN0cnVjdCBzdG9yZWRfYml0bWFwICpzdG9yZWQ7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CisKKwlraGl0ZXJfdCBoYXNoX3BvczsKKwlpbnQgaGFzaF9yZXQ7CisKKwludW1fb2JqZWN0cyA9IGJpdG1hcF9naXQtPnBhY2stPm51bV9vYmplY3RzOworCXJlcG9zaXRpb24gPSB4Y2FsbG9jKG51bV9vYmplY3RzLCBzaXplb2YodWludDMyX3QpKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fb2JqZWN0czsgKytpKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKmVudHJ5OworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZTsKKworCQllbnRyeSA9ICZiaXRtYXBfZ2l0LT5wYWNrLT5yZXZpbmRleFtpXTsKKwkJbnRoX3BhY2tlZF9vYmplY3RfaWQoJm9pZCwgYml0bWFwX2dpdC0+cGFjaywgZW50cnktPm5yKTsKKwkJb2UgPSBwYWNrbGlzdF9maW5kKG1hcHBpbmcsICZvaWQpOworCisJCWlmIChvZSkKKwkJCXJlcG9zaXRpb25baV0gPSBvZV9pbl9wYWNrX3BvcyhtYXBwaW5nLCBvZSkgKyAxOworCX0KKworCXJlYnVpbGQgPSBiaXRtYXBfbmV3KCk7CisJaSA9IDA7CisKKwlpZiAoc2hvd19wcm9ncmVzcykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcygiUmV1c2luZyBiaXRtYXBzIiwgMCk7CisKKwlraF9mb3JlYWNoX3ZhbHVlKGJpdG1hcF9naXQtPmJpdG1hcHMsIHN0b3JlZCwgeworCQlpZiAoc3RvcmVkLT5mbGFncyAmIEJJVE1BUF9GTEFHX1JFVVNFKSB7CisJCQlpZiAoIXJlYnVpbGRfYml0bWFwKHJlcG9zaXRpb24sCisJCQkJCSAgICBsb29rdXBfc3RvcmVkX2JpdG1hcChzdG9yZWQpLAorCQkJCQkgICAgcmVidWlsZCkpIHsKKwkJCQloYXNoX3BvcyA9IGtoX3B1dF9vaWRfbWFwKHJldXNlZF9iaXRtYXBzLAorCQkJCQkJCSAgc3RvcmVkLT5vaWQsCisJCQkJCQkJICAmaGFzaF9yZXQpOworCQkJCWtoX3ZhbHVlKHJldXNlZF9iaXRtYXBzLCBoYXNoX3BvcykgPQorCQkJCQliaXRtYXBfdG9fZXdhaChyZWJ1aWxkKTsKKwkJCX0KKwkJCWJpdG1hcF9yZXNldChyZWJ1aWxkKTsKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsraSk7CisJCX0KKwl9KTsKKworCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKworCWZyZWUocmVwb3NpdGlvbik7CisJYml0bWFwX2ZyZWUocmVidWlsZCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZnJlZV9iaXRtYXBfaW5kZXgoc3RydWN0IGJpdG1hcF9pbmRleCAqYikKK3sKKwlpZiAoIWIpCisJCXJldHVybjsKKworCWlmIChiLT5tYXApCisJCW11bm1hcChiLT5tYXAsIGItPm1hcF9zaXplKTsKKwlld2FoX3Bvb2xfZnJlZShiLT5jb21taXRzKTsKKwlld2FoX3Bvb2xfZnJlZShiLT50cmVlcyk7CisJZXdhaF9wb29sX2ZyZWUoYi0+YmxvYnMpOworCWV3YWhfcG9vbF9mcmVlKGItPnRhZ3MpOworCWtoX2Rlc3Ryb3lfb2lkX21hcChiLT5iaXRtYXBzKTsKKwlmcmVlKGItPmV4dF9pbmRleC5vYmplY3RzKTsKKwlmcmVlKGItPmV4dF9pbmRleC5oYXNoZXMpOworCWJpdG1hcF9mcmVlKGItPnJlc3VsdCk7CisJYml0bWFwX2ZyZWUoYi0+aGF2ZXMpOworCWZyZWUoYik7Cit9CisKK2ludCBiaXRtYXBfaGFzX29pZF9pbl91bmludGVyZXN0aW5nKHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gYml0bWFwX2dpdCAmJgorCQliaXRtYXBfd2Fsa19jb250YWlucyhiaXRtYXBfZ2l0LCBiaXRtYXBfZ2l0LT5oYXZlcywgb2lkKTsKK30KZGlmZiAtLWdpdCBhL3BhY2stYml0bWFwLmggYi9wYWNrLWJpdG1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMDMxMjAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrLWJpdG1hcC5oCkBAIC0wLDAgKzEsODUgQEAKKyNpZm5kZWYgUEFDS19CSVRNQVBfSAorI2RlZmluZSBQQUNLX0JJVE1BUF9ICisKKyNpbmNsdWRlICJld2FoL2V3b2suaCIKKyNpbmNsdWRlICJraGFzaC5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJwYWNrLW9iamVjdHMuaCIKKworc3RydWN0IGNvbW1pdDsKK3N0cnVjdCByZXBvc2l0b3J5Oworc3RydWN0IHJldl9pbmZvOworc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9uczsKKworc3RhdGljIGNvbnN0IGNoYXIgQklUTUFQX0lEWF9TSUdOQVRVUkVbXSA9IHsnQicsICdJJywgJ1QnLCAnTSd9OworCitzdHJ1Y3QgYml0bWFwX2Rpc2tfaGVhZGVyIHsKKwljaGFyIG1hZ2ljW0FSUkFZX1NJWkUoQklUTUFQX0lEWF9TSUdOQVRVUkUpXTsKKwl1aW50MTZfdCB2ZXJzaW9uOworCXVpbnQxNl90IG9wdGlvbnM7CisJdWludDMyX3QgZW50cnlfY291bnQ7CisJdW5zaWduZWQgY2hhciBjaGVja3N1bVtHSVRfTUFYX1JBV1NaXTsKK307CisKKyNkZWZpbmUgTkVFRFNfQklUTUFQICgxdTw8MjIpCisKK2VudW0gcGFja19iaXRtYXBfb3B0cyB7CisJQklUTUFQX09QVF9GVUxMX0RBRyA9IDEsCisJQklUTUFQX09QVF9IQVNIX0NBQ0hFID0gNCwKK307CisKK2VudW0gcGFja19iaXRtYXBfZmxhZ3MgeworCUJJVE1BUF9GTEFHX1JFVVNFID0gMHgxCit9OworCit0eXBlZGVmIGludCAoKnNob3dfcmVhY2hhYmxlX2ZuKSgKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCWludCBmbGFncywKKwl1aW50MzJfdCBoYXNoLAorCXN0cnVjdCBwYWNrZWRfZ2l0ICpmb3VuZF9wYWNrLAorCW9mZl90IGZvdW5kX29mZnNldCk7CisKK3N0cnVjdCBiaXRtYXBfaW5kZXg7CisKK3N0cnVjdCBiaXRtYXBfaW5kZXggKnByZXBhcmVfYml0bWFwX2dpdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7Cit2b2lkIGNvdW50X2JpdG1hcF9jb21taXRfbGlzdChzdHJ1Y3QgYml0bWFwX2luZGV4ICosIHVpbnQzMl90ICpjb21taXRzLAorCQkJICAgICAgdWludDMyX3QgKnRyZWVzLCB1aW50MzJfdCAqYmxvYnMsIHVpbnQzMl90ICp0YWdzKTsKK3ZvaWQgdHJhdmVyc2VfYml0bWFwX2NvbW1pdF9saXN0KHN0cnVjdCBiaXRtYXBfaW5kZXggKiwKKwkJCQkgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCSBzaG93X3JlYWNoYWJsZV9mbiBzaG93X3JlYWNoYWJsZSk7Cit2b2lkIHRlc3RfYml0bWFwX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzKTsKK3N0cnVjdCBiaXRtYXBfaW5kZXggKnByZXBhcmVfYml0bWFwX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyKTsKK2ludCByZXVzZV9wYXJ0aWFsX3BhY2tmaWxlX2Zyb21fYml0bWFwKHN0cnVjdCBiaXRtYXBfaW5kZXggKiwKKwkJCQkgICAgICAgc3RydWN0IHBhY2tlZF9naXQgKipwYWNrZmlsZSwKKwkJCQkgICAgICAgdWludDMyX3QgKmVudHJpZXMsCisJCQkJICAgICAgIHN0cnVjdCBiaXRtYXAgKipyZXVzZV9vdXQpOworaW50IHJlYnVpbGRfZXhpc3RpbmdfYml0bWFwcyhzdHJ1Y3QgYml0bWFwX2luZGV4ICosIHN0cnVjdCBwYWNraW5nX2RhdGEgKm1hcHBpbmcsCisJCQkgICAgIGtoX29pZF9tYXBfdCAqcmV1c2VkX2JpdG1hcHMsIGludCBzaG93X3Byb2dyZXNzKTsKK3ZvaWQgZnJlZV9iaXRtYXBfaW5kZXgoc3RydWN0IGJpdG1hcF9pbmRleCAqKTsKK2ludCBiaXRtYXBfd2Fsa19jb250YWlucyhzdHJ1Y3QgYml0bWFwX2luZGV4ICosCisJCQkgc3RydWN0IGJpdG1hcCAqYml0bWFwLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCisvKgorICogQWZ0ZXIgYSB0cmF2ZXJzYWwgaGFzIGJlZW4gcGVyZm9ybWVkIGJ5IHByZXBhcmVfYml0bWFwX3dhbGsoKSwgdGhpcyBjYW4gYmUKKyAqIHF1ZXJpZWQgdG8gc2VlIGlmIGEgcGFydGljdWxhciBvYmplY3Qgd2FzIHJlYWNoYWJsZSBmcm9tIGFueSBvZiB0aGUKKyAqIG9iamVjdHMgZmxhZ2dlZCBhcyBVTklOVEVSRVNUSU5HLgorICovCitpbnQgYml0bWFwX2hhc19vaWRfaW5fdW5pbnRlcmVzdGluZyhzdHJ1Y3QgYml0bWFwX2luZGV4ICosIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKK3ZvaWQgYml0bWFwX3dyaXRlcl9zaG93X3Byb2dyZXNzKGludCBzaG93KTsKK3ZvaWQgYml0bWFwX3dyaXRlcl9zZXRfY2hlY2tzdW0odW5zaWduZWQgY2hhciAqc2hhMSk7Cit2b2lkIGJpdG1hcF93cml0ZXJfYnVpbGRfdHlwZV9pbmRleChzdHJ1Y3QgcGFja2luZ19kYXRhICp0b19wYWNrLAorCQkJCSAgICBzdHJ1Y3QgcGFja19pZHhfZW50cnkgKippbmRleCwKKwkJCQkgICAgdWludDMyX3QgaW5kZXhfbnIpOwordm9pZCBiaXRtYXBfd3JpdGVyX3JldXNlX2JpdG1hcHMoc3RydWN0IHBhY2tpbmdfZGF0YSAqdG9fcGFjayk7Cit2b2lkIGJpdG1hcF93cml0ZXJfc2VsZWN0X2NvbW1pdHMoc3RydWN0IGNvbW1pdCAqKmluZGV4ZWRfY29tbWl0cywKKwkJdW5zaWduZWQgaW50IGluZGV4ZWRfY29tbWl0c19uciwgaW50IG1heF9iaXRtYXBzKTsKK3ZvaWQgYml0bWFwX3dyaXRlcl9idWlsZChzdHJ1Y3QgcGFja2luZ19kYXRhICp0b19wYWNrKTsKK3ZvaWQgYml0bWFwX3dyaXRlcl9maW5pc2goc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqaW5kZXgsCisJCQkgIHVpbnQzMl90IGluZGV4X25yLAorCQkJICBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCSAgdWludDE2X3Qgb3B0aW9ucyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcGFjay1jaGVjay5jIGIvcGFjay1jaGVjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZDZkOGEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrLWNoZWNrLmMKQEAgLTAsMCArMSwyMDIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAicGFjay1yZXZpbmRleC5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKworc3RydWN0IGlkeF9lbnRyeSB7CisJb2ZmX3QgICAgICAgICAgICAgICAgb2Zmc2V0OworCXVuc2lnbmVkIGludCBucjsKK307CisKK3N0YXRpYyBpbnQgY29tcGFyZV9lbnRyaWVzKGNvbnN0IHZvaWQgKmUxLCBjb25zdCB2b2lkICplMikKK3sKKwljb25zdCBzdHJ1Y3QgaWR4X2VudHJ5ICplbnRyeTEgPSBlMTsKKwljb25zdCBzdHJ1Y3QgaWR4X2VudHJ5ICplbnRyeTIgPSBlMjsKKwlpZiAoZW50cnkxLT5vZmZzZXQgPCBlbnRyeTItPm9mZnNldCkKKwkJcmV0dXJuIC0xOworCWlmIChlbnRyeTEtPm9mZnNldCA+IGVudHJ5Mi0+b2Zmc2V0KQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNoZWNrX3BhY2tfY3JjKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCSAgIG9mZl90IG9mZnNldCwgb2ZmX3QgbGVuLCB1bnNpZ25lZCBpbnQgbnIpCit7CisJY29uc3QgdWludDMyX3QgKmluZGV4X2NyYzsKKwl1aW50MzJfdCBkYXRhX2NyYyA9IGNyYzMyKDAsIE5VTEwsIDApOworCisJZG8geworCQl1bnNpZ25lZCBsb25nIGF2YWlsOworCQl2b2lkICpkYXRhID0gdXNlX3BhY2socCwgd19jdXJzLCBvZmZzZXQsICZhdmFpbCk7CisJCWlmIChhdmFpbCA+IGxlbikKKwkJCWF2YWlsID0gbGVuOworCQlkYXRhX2NyYyA9IGNyYzMyKGRhdGFfY3JjLCBkYXRhLCBhdmFpbCk7CisJCW9mZnNldCArPSBhdmFpbDsKKwkJbGVuIC09IGF2YWlsOworCX0gd2hpbGUgKGxlbik7CisKKwlpbmRleF9jcmMgPSBwLT5pbmRleF9kYXRhOworCWluZGV4X2NyYyArPSAyICsgMjU2ICsgcC0+bnVtX29iamVjdHMgKiAodGhlX2hhc2hfYWxnby0+cmF3c3ovNCkgKyBucjsKKworCXJldHVybiBkYXRhX2NyYyAhPSBudG9obCgqaW5kZXhfY3JjKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfcGFja2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCSAgIHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3VycywKKwkJCSAgIHZlcmlmeV9mbiBmbiwKKwkJCSAgIHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MsIHVpbnQzMl90IGJhc2VfY291bnQpCisKK3sKKwlvZmZfdCBpbmRleF9zaXplID0gcC0+aW5kZXhfc2l6ZTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleF9iYXNlID0gcC0+aW5kZXhfZGF0YTsKKwlnaXRfaGFzaF9jdHggY3R4OworCXVuc2lnbmVkIGNoYXIgaGFzaFtHSVRfTUFYX1JBV1NaXSwgKnBhY2tfc2lnOworCW9mZl90IG9mZnNldCA9IDAsIHBhY2tfc2lnX29mcyA9IDA7CisJdWludDMyX3QgbnJfb2JqZWN0cywgaTsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaWR4X2VudHJ5ICplbnRyaWVzOworCisJaWYgKCFpc19wYWNrX3ZhbGlkKHApKQorCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIGNhbm5vdCBiZSBhY2Nlc3NlZCIsIHAtPnBhY2tfbmFtZSk7CisKKwlyLT5oYXNoX2FsZ28tPmluaXRfZm4oJmN0eCk7CisJZG8geworCQl1bnNpZ25lZCBsb25nIHJlbWFpbmluZzsKKwkJdW5zaWduZWQgY2hhciAqaW4gPSB1c2VfcGFjayhwLCB3X2N1cnMsIG9mZnNldCwgJnJlbWFpbmluZyk7CisJCW9mZnNldCArPSByZW1haW5pbmc7CisJCWlmICghcGFja19zaWdfb2ZzKQorCQkJcGFja19zaWdfb2ZzID0gcC0+cGFja19zaXplIC0gci0+aGFzaF9hbGdvLT5yYXdzejsKKwkJaWYgKG9mZnNldCA+IHBhY2tfc2lnX29mcykKKwkJCXJlbWFpbmluZyAtPSAodW5zaWduZWQgaW50KShvZmZzZXQgLSBwYWNrX3NpZ19vZnMpOworCQlyLT5oYXNoX2FsZ28tPnVwZGF0ZV9mbigmY3R4LCBpbiwgcmVtYWluaW5nKTsKKwl9IHdoaWxlIChvZmZzZXQgPCBwYWNrX3NpZ19vZnMpOworCXItPmhhc2hfYWxnby0+ZmluYWxfZm4oaGFzaCwgJmN0eCk7CisJcGFja19zaWcgPSB1c2VfcGFjayhwLCB3X2N1cnMsIHBhY2tfc2lnX29mcywgTlVMTCk7CisJaWYgKCFoYXNoZXEoaGFzaCwgcGFja19zaWcpKQorCQllcnIgPSBlcnJvcigiJXMgcGFjayBjaGVja3N1bSBtaXNtYXRjaCIsCisJCQkgICAgcC0+cGFja19uYW1lKTsKKwlpZiAoIWhhc2hlcShpbmRleF9iYXNlICsgaW5kZXhfc2l6ZSAtIHItPmhhc2hfYWxnby0+aGV4c3osIHBhY2tfc2lnKSkKKwkJZXJyID0gZXJyb3IoIiVzIHBhY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggaXRzIGluZGV4IiwKKwkJCSAgICBwLT5wYWNrX25hbWUpOworCXVudXNlX3BhY2sod19jdXJzKTsKKworCS8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIHJlYWNoYWJsZSBmcm9tIGlkeCBpcyB2YWxpZC4gIFNpbmNlIHdlCisJICogaGF2ZSB2ZXJpZmllZCB0aGF0IG5yX29iamVjdHMgbWF0Y2hlcyBiZXR3ZWVuIGlkeCBhbmQgcGFjaywKKwkgKiB3ZSBkbyBub3QgZG8gc2Nhbi1zdHJlYW1pbmcgY2hlY2sgb24gdGhlIHBhY2sgZmlsZS4KKwkgKi8KKwlucl9vYmplY3RzID0gcC0+bnVtX29iamVjdHM7CisJQUxMT0NfQVJSQVkoZW50cmllcywgbnJfb2JqZWN0cyArIDEpOworCWVudHJpZXNbbnJfb2JqZWN0c10ub2Zmc2V0ID0gcGFja19zaWdfb2ZzOworCS8qIGZpcnN0IHNvcnQgZW50cmllcyBieSBwYWNrIG9mZnNldCwgc2luY2UgdW5wYWNraW5nIHRoZW0gaXMgbW9yZSBlZmZpY2llbnQgdGhhdCB3YXkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCWVudHJpZXNbaV0ub2Zmc2V0ID0gbnRoX3BhY2tlZF9vYmplY3Rfb2Zmc2V0KHAsIGkpOworCQllbnRyaWVzW2ldLm5yID0gaTsKKwl9CisJUVNPUlQoZW50cmllcywgbnJfb2JqZWN0cywgY29tcGFyZV9lbnRyaWVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJdm9pZCAqZGF0YTsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQlvZmZfdCBjdXJwb3M7CisJCWludCBkYXRhX3ZhbGlkOworCisJCWlmIChudGhfcGFja2VkX29iamVjdF9pZCgmb2lkLCBwLCBlbnRyaWVzW2ldLm5yKSA8IDApCisJCQlCVUcoInVuYWJsZSB0byBnZXQgb2lkIG9mIG9iamVjdCAlbHUgZnJvbSAlcyIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpZW50cmllc1tpXS5uciwgcC0+cGFja19uYW1lKTsKKworCQlpZiAocC0+aW5kZXhfdmVyc2lvbiA+IDEpIHsKKwkJCW9mZl90IG9mZnNldCA9IGVudHJpZXNbaV0ub2Zmc2V0OworCQkJb2ZmX3QgbGVuID0gZW50cmllc1tpKzFdLm9mZnNldCAtIG9mZnNldDsKKwkJCXVuc2lnbmVkIGludCBuciA9IGVudHJpZXNbaV0ubnI7CisJCQlpZiAoY2hlY2tfcGFja19jcmMocCwgd19jdXJzLCBvZmZzZXQsIGxlbiwgbnIpKQorCQkJCWVyciA9IGVycm9yKCJpbmRleCBDUkMgbWlzbWF0Y2ggZm9yIG9iamVjdCAlcyAiCisJCQkJCSAgICAiZnJvbSAlcyBhdCBvZmZzZXQgJSJQUkl1TUFYIiIsCisJCQkJCSAgICBvaWRfdG9faGV4KCZvaWQpLAorCQkJCQkgICAgcC0+cGFja19uYW1lLCAodWludG1heF90KW9mZnNldCk7CisJCX0KKworCQljdXJwb3MgPSBlbnRyaWVzW2ldLm9mZnNldDsKKwkJdHlwZSA9IHVucGFja19vYmplY3RfaGVhZGVyKHAsIHdfY3VycywgJmN1cnBvcywgJnNpemUpOworCQl1bnVzZV9wYWNrKHdfY3Vycyk7CisKKwkJaWYgKHR5cGUgPT0gT0JKX0JMT0IgJiYgYmlnX2ZpbGVfdGhyZXNob2xkIDw9IHNpemUpIHsKKwkJCS8qCisJCQkgKiBMZXQgY2hlY2tfb2JqZWN0X3NpZ25hdHVyZSgpIGNoZWNrIGl0IHdpdGgKKwkJCSAqIHRoZSBzdHJlYW1pbmcgaW50ZXJmYWNlOyBubyBwb2ludCBzbHVycGluZworCQkJICogdGhlIGRhdGEgaW4tY29yZSBvbmx5IHRvIGRpc2NhcmQuCisJCQkgKi8KKwkJCWRhdGEgPSBOVUxMOworCQkJZGF0YV92YWxpZCA9IDA7CisJCX0gZWxzZSB7CisJCQlkYXRhID0gdW5wYWNrX2VudHJ5KHIsIHAsIGVudHJpZXNbaV0ub2Zmc2V0LCAmdHlwZSwgJnNpemUpOworCQkJZGF0YV92YWxpZCA9IDE7CisJCX0KKworCQlpZiAoZGF0YV92YWxpZCAmJiAhZGF0YSkKKwkJCWVyciA9IGVycm9yKCJjYW5ub3QgdW5wYWNrICVzIGZyb20gJXMgYXQgb2Zmc2V0ICUiUFJJdU1BWCIiLAorCQkJCSAgICBvaWRfdG9faGV4KCZvaWQpLCBwLT5wYWNrX25hbWUsCisJCQkJICAgICh1aW50bWF4X3QpZW50cmllc1tpXS5vZmZzZXQpOworCQllbHNlIGlmIChjaGVja19vYmplY3Rfc2lnbmF0dXJlKHIsICZvaWQsIGRhdGEsIHNpemUsIHR5cGVfbmFtZSh0eXBlKSkpCisJCQllcnIgPSBlcnJvcigicGFja2VkICVzIGZyb20gJXMgaXMgY29ycnVwdCIsCisJCQkJICAgIG9pZF90b19oZXgoJm9pZCksIHAtPnBhY2tfbmFtZSk7CisJCWVsc2UgaWYgKGZuKSB7CisJCQlpbnQgZWF0ZW4gPSAwOworCQkJZXJyIHw9IGZuKCZvaWQsIHR5cGUsIHNpemUsIGRhdGEsICZlYXRlbik7CisJCQlpZiAoZWF0ZW4pCisJCQkJZGF0YSA9IE5VTEw7CisJCX0KKwkJaWYgKCgoYmFzZV9jb3VudCArIGkpICYgMTAyMykgPT0gMCkKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGJhc2VfY291bnQgKyBpKTsKKwkJZnJlZShkYXRhKTsKKworCX0KKwlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBiYXNlX2NvdW50ICsgaSk7CisJZnJlZShlbnRyaWVzKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCB2ZXJpZnlfcGFja19pbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwlvZmZfdCBpbmRleF9zaXplOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGV4X2Jhc2U7CisJZ2l0X2hhc2hfY3R4IGN0eDsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9SQVdTWl07CisJaW50IGVyciA9IDA7CisKKwlpZiAob3Blbl9wYWNrX2luZGV4KHApKQorCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIGluZGV4IG5vdCBvcGVuZWQiLCBwLT5wYWNrX25hbWUpOworCWluZGV4X3NpemUgPSBwLT5pbmRleF9zaXplOworCWluZGV4X2Jhc2UgPSBwLT5pbmRleF9kYXRhOworCisJLyogVmVyaWZ5IFNIQTEgc3VtIG9mIHRoZSBpbmRleCBmaWxlICovCisJdGhlX2hhc2hfYWxnby0+aW5pdF9mbigmY3R4KTsKKwl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmN0eCwgaW5kZXhfYmFzZSwgKHVuc2lnbmVkIGludCkoaW5kZXhfc2l6ZSAtIHRoZV9oYXNoX2FsZ28tPnJhd3N6KSk7CisJdGhlX2hhc2hfYWxnby0+ZmluYWxfZm4oaGFzaCwgJmN0eCk7CisJaWYgKCFoYXNoZXEoaGFzaCwgaW5kZXhfYmFzZSArIGluZGV4X3NpemUgLSB0aGVfaGFzaF9hbGdvLT5yYXdzeikpCisJCWVyciA9IGVycm9yKCJQYWNrZmlsZSBpbmRleCBmb3IgJXMgaGFzaCBtaXNtYXRjaCIsCisJCQkgICAgcC0+cGFja19uYW1lKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgdmVyaWZ5X3BhY2soc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCB2ZXJpZnlfZm4gZm4sCisJCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MsIHVpbnQzMl90IGJhc2VfY291bnQpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IHBhY2tfd2luZG93ICp3X2N1cnMgPSBOVUxMOworCisJZXJyIHw9IHZlcmlmeV9wYWNrX2luZGV4KHApOworCWlmICghcC0+aW5kZXhfZGF0YSkKKwkJcmV0dXJuIC0xOworCisJZXJyIHw9IHZlcmlmeV9wYWNrZmlsZShyLCBwLCAmd19jdXJzLCBmbiwgcHJvZ3Jlc3MsIGJhc2VfY291bnQpOworCXVudXNlX3BhY2soJndfY3Vycyk7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvcGFjay1vYmplY3RzLmMgYi9wYWNrLW9iamVjdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmE0MzM4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFjay1vYmplY3RzLmMKQEAgLTAsMCArMSwyMjEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJwYWNrLW9iamVjdHMuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorCitzdGF0aWMgdWludDMyX3QgbG9jYXRlX29iamVjdF9lbnRyeV9oYXNoKHN0cnVjdCBwYWNraW5nX2RhdGEgKnBkYXRhLAorCQkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQkgaW50ICpmb3VuZCkKK3sKKwl1aW50MzJfdCBpLCBtYXNrID0gKHBkYXRhLT5pbmRleF9zaXplIC0gMSk7CisKKwlpID0gb2lkaGFzaChvaWQpICYgbWFzazsKKworCXdoaWxlIChwZGF0YS0+aW5kZXhbaV0gPiAwKSB7CisJCXVpbnQzMl90IHBvcyA9IHBkYXRhLT5pbmRleFtpXSAtIDE7CisKKwkJaWYgKG9pZGVxKG9pZCwgJnBkYXRhLT5vYmplY3RzW3Bvc10uaWR4Lm9pZCkpIHsKKwkJCSpmb3VuZCA9IDE7CisJCQlyZXR1cm4gaTsKKwkJfQorCisJCWkgPSAoaSArIDEpICYgbWFzazsKKwl9CisKKwkqZm91bmQgPSAwOworCXJldHVybiBpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNsb3Nlc3RfcG93Mih1aW50MzJfdCB2KQoreworCXYgPSB2IC0gMTsKKwl2IHw9IHYgPj4gMTsKKwl2IHw9IHYgPj4gMjsKKwl2IHw9IHYgPj4gNDsKKwl2IHw9IHYgPj4gODsKKwl2IHw9IHYgPj4gMTY7CisJcmV0dXJuIHYgKyAxOworfQorCitzdGF0aWMgdm9pZCByZWhhc2hfb2JqZWN0cyhzdHJ1Y3QgcGFja2luZ19kYXRhICpwZGF0YSkKK3sKKwl1aW50MzJfdCBpOworCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5OworCisJcGRhdGEtPmluZGV4X3NpemUgPSBjbG9zZXN0X3BvdzIocGRhdGEtPm5yX29iamVjdHMgKiAzKTsKKwlpZiAocGRhdGEtPmluZGV4X3NpemUgPCAxMDI0KQorCQlwZGF0YS0+aW5kZXhfc2l6ZSA9IDEwMjQ7CisKKwlmcmVlKHBkYXRhLT5pbmRleCk7CisJcGRhdGEtPmluZGV4ID0geGNhbGxvYyhwZGF0YS0+aW5kZXhfc2l6ZSwgc2l6ZW9mKCpwZGF0YS0+aW5kZXgpKTsKKworCWVudHJ5ID0gcGRhdGEtPm9iamVjdHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm5yX29iamVjdHM7IGkrKykgeworCQlpbnQgZm91bmQ7CisJCXVpbnQzMl90IGl4ID0gbG9jYXRlX29iamVjdF9lbnRyeV9oYXNoKHBkYXRhLAorCQkJCQkJICAgICAgICZlbnRyeS0+aWR4Lm9pZCwKKwkJCQkJCSAgICAgICAmZm91bmQpOworCisJCWlmIChmb3VuZCkKKwkJCUJVRygiRHVwbGljYXRlIG9iamVjdCBpbiBoYXNoIik7CisKKwkJcGRhdGEtPmluZGV4W2l4XSA9IGkgKyAxOworCQllbnRyeSsrOworCX0KK30KKworc3RydWN0IG9iamVjdF9lbnRyeSAqcGFja2xpc3RfZmluZChzdHJ1Y3QgcGFja2luZ19kYXRhICpwZGF0YSwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJdWludDMyX3QgaTsKKwlpbnQgZm91bmQ7CisKKwlpZiAoIXBkYXRhLT5pbmRleF9zaXplKQorCQlyZXR1cm4gTlVMTDsKKworCWkgPSBsb2NhdGVfb2JqZWN0X2VudHJ5X2hhc2gocGRhdGEsIG9pZCwgJmZvdW5kKTsKKworCWlmICghZm91bmQpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuICZwZGF0YS0+b2JqZWN0c1twZGF0YS0+aW5kZXhbaV0gLSAxXTsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9pbl9wYWNrX2J5X2lkeChzdHJ1Y3QgcGFja2luZ19kYXRhICpwZGF0YSkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqKm1hcHBpbmcsICpwOworCWludCBjbnQgPSAwLCBuciA9IDFVIDw8IE9FX0lOX1BBQ0tfQklUUzsKKworCUFMTE9DX0FSUkFZKG1hcHBpbmcsIG5yKTsKKwkvKgorCSAqIG9lX2luX3BhY2soKSBvbiBhbiBhbGwtemVybydkIG9iamVjdF9lbnRyeQorCSAqIChpLmUuIGluX3BhY2tfaWR4IGFsc28gemVybykgc2hvdWxkIHJldHVybiBOVUxMLgorCSAqLworCW1hcHBpbmdbY250KytdID0gTlVMTDsKKwlmb3IgKHAgPSBnZXRfYWxsX3BhY2tzKHBkYXRhLT5yZXBvKTsgcDsgcCA9IHAtPm5leHQsIGNudCsrKSB7CisJCWlmIChjbnQgPT0gbnIpIHsKKwkJCWZyZWUobWFwcGluZyk7CisJCQlyZXR1cm47CisJCX0KKwkJcC0+aW5kZXggPSBjbnQ7CisJCW1hcHBpbmdbY250XSA9IHA7CisJfQorCXBkYXRhLT5pbl9wYWNrX2J5X2lkeCA9IG1hcHBpbmc7Cit9CisKKy8qCisgKiBBIG5ldyBwYWNrIGFwcGVhcnMgYWZ0ZXIgcHJlcGFyZV9pbl9wYWNrX2J5X2lkeCgpIGhhcyBiZWVuCisgKiBydW4uIFRoaXMgaXMgbGlrZWx5IGEgcmFjZS4KKyAqCisgKiBXZSBjb3VsZCBtYXAgdGhpcyBuZXcgcGFjayB0byBpbl9wYWNrX2J5X2lkeFtdIGFycmF5LCBidXQgdGhlbiB3ZQorICogaGF2ZSB0byBkZWFsIHdpdGggZnVsbCBhcnJheSBhbnl3YXkuIEFuZCBzaW5jZSBpdCdzIGhhcmQgdG8gdGVzdAorICogdGhpcyBmYWxsIGJhY2sgY29kZSwganVzdCBzdGF5IHNpbXBsZSBhbmQgZmFsbCBiYWNrIHRvIHVzaW5nCisgKiBpbl9wYWNrW10gYXJyYXkuCisgKi8KK3ZvaWQgb2VfbWFwX25ld19wYWNrKHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2spCit7CisJdWludDMyX3QgaTsKKworCWlmIChwYWNrLT5pbl9wYWNrKQorCQlCVUcoInBhY2tpbmdfZGF0YSBoYXMgYWxyZWFkeSBiZWVuIGNvbnZlcnRlZCB0byBwYWNrIGFycmF5Iik7CisKKwlBTExPQ19BUlJBWShwYWNrLT5pbl9wYWNrLCBwYWNrLT5ucl9hbGxvYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGFjay0+bnJfb2JqZWN0czsgaSsrKQorCQlwYWNrLT5pbl9wYWNrW2ldID0gb2VfaW5fcGFjayhwYWNrLCBwYWNrLT5vYmplY3RzICsgaSk7CisKKwlGUkVFX0FORF9OVUxMKHBhY2stPmluX3BhY2tfYnlfaWR4KTsKK30KKworLyogYXNzdW1lIHBkYXRhIGlzIGFscmVhZHkgemVybydkIGJ5IGNhbGxlciAqLwordm9pZCBwcmVwYXJlX3BhY2tpbmdfZGF0YShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEpCit7CisJcGRhdGEtPnJlcG8gPSByOworCisJaWYgKGdpdF9lbnZfYm9vbCgiR0lUX1RFU1RfRlVMTF9JTl9QQUNLX0FSUkFZIiwgMCkpIHsKKwkJLyoKKwkJICogZG8gbm90IGluaXRpYWxpemUgaW5fcGFja19ieV9pZHhbXSB0byBmb3JjZSB0aGUKKwkJICogc2xvdyBwYXRoIGluIG9lX2luX3BhY2soKQorCQkgKi8KKwl9IGVsc2UgeworCQlwcmVwYXJlX2luX3BhY2tfYnlfaWR4KHBkYXRhKTsKKwl9CisKKwlwZGF0YS0+b2Vfc2l6ZV9saW1pdCA9IGdpdF9lbnZfdWxvbmcoIkdJVF9URVNUX09FX1NJWkUiLAorCQkJCQkgICAgIDFVIDw8IE9FX1NJWkVfQklUUyk7CisJcGRhdGEtPm9lX2RlbHRhX3NpemVfbGltaXQgPSBnaXRfZW52X3Vsb25nKCJHSVRfVEVTVF9PRV9ERUxUQV9TSVpFIiwKKwkJCQkJCSAgIDFVTCA8PCBPRV9ERUxUQV9TSVpFX0JJVFMpOworCWluaXRfcmVjdXJzaXZlX211dGV4KCZwZGF0YS0+b2RiX2xvY2spOworfQorCitzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpwYWNrbGlzdF9hbGxvYyhzdHJ1Y3QgcGFja2luZ19kYXRhICpwZGF0YSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKm5ld19lbnRyeTsKKworCWlmIChwZGF0YS0+bnJfb2JqZWN0cyA+PSBwZGF0YS0+bnJfYWxsb2MpIHsKKwkJcGRhdGEtPm5yX2FsbG9jID0gKHBkYXRhLT5ucl9hbGxvYyAgKyAxMDI0KSAqIDMgLyAyOworCQlSRUFMTE9DX0FSUkFZKHBkYXRhLT5vYmplY3RzLCBwZGF0YS0+bnJfYWxsb2MpOworCisJCWlmICghcGRhdGEtPmluX3BhY2tfYnlfaWR4KQorCQkJUkVBTExPQ19BUlJBWShwZGF0YS0+aW5fcGFjaywgcGRhdGEtPm5yX2FsbG9jKTsKKwkJaWYgKHBkYXRhLT5kZWx0YV9zaXplKQorCQkJUkVBTExPQ19BUlJBWShwZGF0YS0+ZGVsdGFfc2l6ZSwgcGRhdGEtPm5yX2FsbG9jKTsKKworCQlpZiAocGRhdGEtPnRyZWVfZGVwdGgpCisJCQlSRUFMTE9DX0FSUkFZKHBkYXRhLT50cmVlX2RlcHRoLCBwZGF0YS0+bnJfYWxsb2MpOworCisJCWlmIChwZGF0YS0+bGF5ZXIpCisJCQlSRUFMTE9DX0FSUkFZKHBkYXRhLT5sYXllciwgcGRhdGEtPm5yX2FsbG9jKTsKKwl9CisKKwluZXdfZW50cnkgPSBwZGF0YS0+b2JqZWN0cyArIHBkYXRhLT5ucl9vYmplY3RzKys7CisKKwltZW1zZXQobmV3X2VudHJ5LCAwLCBzaXplb2YoKm5ld19lbnRyeSkpOworCW9pZGNweSgmbmV3X2VudHJ5LT5pZHgub2lkLCBvaWQpOworCisJaWYgKHBkYXRhLT5pbmRleF9zaXplICogMyA8PSBwZGF0YS0+bnJfb2JqZWN0cyAqIDQpCisJCXJlaGFzaF9vYmplY3RzKHBkYXRhKTsKKwllbHNlIHsKKwkJaW50IGZvdW5kOworCQl1aW50MzJfdCBwb3MgPSBsb2NhdGVfb2JqZWN0X2VudHJ5X2hhc2gocGRhdGEsCisJCQkJCQkJJm5ld19lbnRyeS0+aWR4Lm9pZCwKKwkJCQkJCQkmZm91bmQpOworCQlpZiAoZm91bmQpCisJCQlCVUcoImR1cGxpY2F0ZSBvYmplY3QgaW5zZXJ0ZWQgaW50byBoYXNoIik7CisJCXBkYXRhLT5pbmRleFtwb3NdID0gcGRhdGEtPm5yX29iamVjdHM7CisJfQorCisJaWYgKHBkYXRhLT5pbl9wYWNrKQorCQlwZGF0YS0+aW5fcGFja1twZGF0YS0+bnJfb2JqZWN0cyAtIDFdID0gTlVMTDsKKworCWlmIChwZGF0YS0+dHJlZV9kZXB0aCkKKwkJcGRhdGEtPnRyZWVfZGVwdGhbcGRhdGEtPm5yX29iamVjdHMgLSAxXSA9IDA7CisKKwlpZiAocGRhdGEtPmxheWVyKQorCQlwZGF0YS0+bGF5ZXJbcGRhdGEtPm5yX29iamVjdHMgLSAxXSA9IDA7CisKKwlyZXR1cm4gbmV3X2VudHJ5OworfQorCit2b2lkIG9lX3NldF9kZWx0YV9leHQoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEsCisJCSAgICAgIHN0cnVjdCBvYmplY3RfZW50cnkgKmRlbHRhLAorCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqYmFzZTsKKworCUFMTE9DX0dST1cocGRhdGEtPmV4dF9iYXNlcywgcGRhdGEtPm5yX2V4dCArIDEsIHBkYXRhLT5hbGxvY19leHQpOworCWJhc2UgPSAmcGRhdGEtPmV4dF9iYXNlc1twZGF0YS0+bnJfZXh0KytdOworCW1lbXNldChiYXNlLCAwLCBzaXplb2YoKmJhc2UpKTsKKwlvaWRjcHkoJmJhc2UtPmlkeC5vaWQsIG9pZCk7CisKKwkvKiBUaGVzZSBmbGFncyBtYXJrIHRoYXQgd2UgYXJlIG5vdCBwYXJ0IG9mIHRoZSBhY3R1YWwgcGFjayBvdXRwdXQuICovCisJYmFzZS0+cHJlZmVycmVkX2Jhc2UgPSAxOworCWJhc2UtPmZpbGxlZCA9IDE7CisKKwlkZWx0YS0+ZXh0X2Jhc2UgPSAxOworCWRlbHRhLT5kZWx0YV9pZHggPSBiYXNlIC0gcGRhdGEtPmV4dF9iYXNlcyArIDE7Cit9CmRpZmYgLS1naXQgYS9wYWNrLW9iamVjdHMuaCBiL3BhY2stb2JqZWN0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkODhlM2UKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrLW9iamVjdHMuaApAQCAtMCwwICsxLDQ1MSBAQAorI2lmbmRlZiBQQUNLX09CSkVDVFNfSAorI2RlZmluZSBQQUNLX09CSkVDVFNfSAorCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisjaW5jbHVkZSAicGFjay5oIgorCitzdHJ1Y3QgcmVwb3NpdG9yeTsKKworI2RlZmluZSBERUZBVUxUX0RFTFRBX0NBQ0hFX1NJWkUgKDI1NiAqIDEwMjQgKiAxMDI0KQorCisjZGVmaW5lIE9FX0RGU19TVEFURV9CSVRTCTIKKyNkZWZpbmUgT0VfREVQVEhfQklUUwkJMTIKKyNkZWZpbmUgT0VfSU5fUEFDS19CSVRTCQkxMAorI2RlZmluZSBPRV9aX0RFTFRBX0JJVFMJCTIwCisvKgorICogTm90ZSB0aGF0IG9lX3NldF9zaXplKCkgYmVjb21lcyBleHBlbnNpdmUgd2hlbiB0aGUgZ2l2ZW4gc2l6ZSBpcworICogYWJvdmUgdGhpcyBsaW1pdC4gRG9uJ3QgbG93ZXIgaXQgdG9vIG11Y2guCisgKi8KKyNkZWZpbmUgT0VfU0laRV9CSVRTCQkzMQorI2RlZmluZSBPRV9ERUxUQV9TSVpFX0JJVFMJMjMKKworLyoKKyAqIFN0YXRlIGZsYWdzIGZvciBkZXB0aC1maXJzdCBzZWFyY2ggdXNlZCBmb3IgYW5hbHl6aW5nIGRlbHRhIGN5Y2xlcy4KKyAqCisgKiBUaGUgZGVwdGggaXMgbWVhc3VyZWQgaW4gZGVsdGEtbGlua3MgdG8gdGhlIGJhc2UgKHNvIGlmIEEgaXMgYSBkZWx0YQorICogYWdhaW5zdCBCLCB0aGVuIEEgaGFzIGEgZGVwdGggb2YgMSwgYW5kIEIgYSBkZXB0aCBvZiAwKS4KKyAqLworZW51bSBkZnNfc3RhdGUgeworCURGU19OT05FID0gMCwKKwlERlNfQUNUSVZFLAorCURGU19ET05FLAorCURGU19OVU1fU1RBVEVTCit9OworCisvKgorICogVGhlIHNpemUgb2Ygc3RydWN0IG5lYXJseSBkZXRlcm1pbmVzIHBhY2stb2JqZWN0cydzIG1lbW9yeQorICogY29uc3VtcHRpb24uIFRoaXMgc3RydWN0IGlzIHBhY2tlZCB0aWdodCBmb3IgdGhhdCByZWFzb24uIFdoZW4geW91CisgKiBhZGQgb3IgcmVvcmRlciBzb21ldGhpbmcgaW4gdGhpcyBzdHJ1Y3QsIHRoaW5rIGEgYml0IGFib3V0IHRoaXMuCisgKgorICogYmFzaWMgb2JqZWN0IGluZm8KKyAqIC0tLS0tLS0tLS0tLS0tLS0tCisgKiBpZHgub2lkIGlzIGZpbGxlZCB1cCBiZWZvcmUgZGVsdGEgc2VhcmNoaW5nIHN0YXJ0cy4gaWR4LmNyYzMyIGlzCisgKiBvbmx5IHZhbGlkIGFmdGVyIHRoZSBvYmplY3QgaXMgd3JpdHRlbiBvdXQgYW5kIHdpbGwgYmUgdXNlZCBmb3IKKyAqIGdlbmVyYXRpbmcgdGhlIGluZGV4LiBpZHgub2Zmc2V0IHdpbGwgYmUgYm90aCBncmFkdWFsbHkgc2V0IGFuZAorICogdXNlZCBpbiB3cml0aW5nIHBoYXNlIChiYXNlIG9iamVjdHMgZ2V0IG9mZnNldCBmaXJzdCwgdGhlbiBkZWx0YXMKKyAqIHJlZmVyIHRvIHRoZW0pCisgKgorICogInNpemUiIGlzIHRoZSB1bmNvbXByZXNzZWQgb2JqZWN0IHNpemUuIENvbXByZXNzZWQgc2l6ZSBvZiB0aGUgcmF3CisgKiBkYXRhIGZvciBhbiBvYmplY3QgaW4gYSBwYWNrIGlzIG5vdCBzdG9yZWQgYW55d2hlcmUgYnV0IGlzIGNvbXB1dGVkCisgKiBhbmQgbWFkZSBhdmFpbGFibGUgd2hlbiByZXZlcnNlIC5pZHggaXMgbWFkZS4gTm90ZSB0aGF0IHdoZW4gYQorICogZGVsdGEgaXMgcmV1c2VkLCAic2l6ZSIgaXMgdGhlIHVuY29tcHJlc3NlZCBfZGVsdGFfIHNpemUsIG5vdCB0aGUKKyAqIGNhbm9uaWNhbCBvbmUgYWZ0ZXIgdGhlIGRlbHRhIGhhcyBiZWVuIGFwcGxpZWQuCisgKgorICogImhhc2giIGNvbnRhaW5zIGEgcGF0aCBuYW1lIGhhc2ggd2hpY2ggaXMgdXNlZCBmb3Igc29ydGluZyB0aGUKKyAqIGRlbHRhIGxpc3QgYW5kIGFsc28gZHVyaW5nIGRlbHRhIHNlYXJjaGluZy4gT25jZSBwcmVwYXJlX3BhY2soKQorICogcmV0dXJucyBpdCdzIG5vIGxvbmdlciBuZWVkZWQuCisgKgorICogc291cmNlIHBhY2sgaW5mbworICogLS0tLS0tLS0tLS0tLS0tLQorICogVGhlIChpbl9wYWNrLCBpbl9wYWNrX29mZnNldCkgdHVwbGUgY29udGFpbnMgdGhlIGxvY2F0aW9uIG9mIHRoZQorICogb2JqZWN0IGluIHRoZSBzb3VyY2UgcGFjay4gaW5fcGFja19oZWFkZXJfc2l6ZSBhbGxvd3MgcXVpY2tseQorICogc2tpcHBpbmcgdGhlIGhlYWRlciBhbmQgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHpsaWIgc3RyZWFtLgorICoKKyAqICJ0eXBlIiBhbmQgImluX3BhY2tfdHlwZSIgYm90aCBkZXNjcmliZSBvYmplY3QgdHlwZS4gaW5fcGFja190eXBlCisgKiBtYXkgY29udGFpbiBhIGRlbHRhIHR5cGUsIHdoaWxlIHR5cGUgaXMgYWx3YXlzIHRoZSBjYW5vbmljYWwgdHlwZS4KKyAqCisgKiBkZWx0YXMKKyAqIC0tLS0tLQorICogRGVsdGEgbGlua3MgKGRlbHRhLCBkZWx0YV9jaGlsZCBhbmQgZGVsdGFfc2libGluZykgYXJlIGNyZWF0ZWQgdG8KKyAqIHJlZmxlY3QgdGhhdCBkZWx0YSBncmFwaCBmcm9tIHRoZSBzb3VyY2UgcGFjayB0aGVuIHVwZGF0ZWQgb3IgYWRkZWQKKyAqIGR1cmluZyBkZWx0YSBzZWFyY2hpbmcgcGhhc2Ugd2hlbiB3ZSBmaW5kIGJldHRlciBkZWx0YXMuCisgKgorICogZGVsdGFfY2hpbGQgYW5kIGRlbHRhX3NpYmxpbmcgYXJlIGxhc3QgbmVlZGVkIGluCisgKiBjb21wdXRlX3dyaXRlX29yZGVyKCkuICJkZWx0YSIgYW5kICJkZWx0YV9zaXplIiBtdXN0IHJlbWFpbiB2YWxpZAorICogYXQgb2JqZWN0IHdyaXRpbmcgcGhhc2UgaW4gY2FzZSB0aGUgZGVsdGEgaXMgbm90IGNhY2hlZC4KKyAqCisgKiBJZiBhIGRlbHRhIGlzIGNhY2hlZCBpbiBtZW1vcnkgYW5kIGlzIGNvbXByZXNzZWQsIGRlbHRhX2RhdGEgcG9pbnRzCisgKiB0byB0aGUgZGF0YSBhbmQgel9kZWx0YV9zaXplIGNvbnRhaW5zIHRoZSBjb21wcmVzc2VkIHNpemUuIElmIGl0J3MKKyAqIHVuY29tcHJlc3NlZCBbMV0sIHpfZGVsdGFfc2l6ZSBtdXN0IGJlIHplcm8uIGRlbHRhX3NpemUgaXMgYWx3YXlzCisgKiB0aGUgdW5jb21wcmVzc2VkIHNpemUgYW5kIG11c3QgYmUgdmFsaWQgZXZlbiBpZiB0aGUgZGVsdGEgaXMgbm90CisgKiBjYWNoZWQuCisgKgorICogWzFdIGR1cmluZyB0cnlfZGVsdGEgcGhhc2Ugd2UgZG9uJ3QgYm90aGVyIHdpdGggY29tcHJlc3NpbmcgYmVjYXVzZQorICogdGhlIGRlbHRhIGNvdWxkIGJlIHF1aWNrbHkgcmVwbGFjZWQgd2l0aCBhIGJldHRlciBvbmUuCisgKi8KK3N0cnVjdCBvYmplY3RfZW50cnkgeworCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSBpZHg7CisJdm9pZCAqZGVsdGFfZGF0YTsJLyogY2FjaGVkIGRlbHRhICh1bmNvbXByZXNzZWQpICovCisJb2ZmX3QgaW5fcGFja19vZmZzZXQ7CisJdWludDMyX3QgaGFzaDsJCQkvKiBuYW1lIGhpbnQgaGFzaCAqLworCXVuc2lnbmVkIHNpemVfOk9FX1NJWkVfQklUUzsKKwl1bnNpZ25lZCBzaXplX3ZhbGlkOjE7CisJdWludDMyX3QgZGVsdGFfaWR4OwkvKiBkZWx0YSBiYXNlIG9iamVjdCAqLworCXVpbnQzMl90IGRlbHRhX2NoaWxkX2lkeDsgLyogZGVsdGlmaWVkIG9iamVjdHMgd2hvIGJhc2VzIG1lICovCisJdWludDMyX3QgZGVsdGFfc2libGluZ19pZHg7IC8qIG90aGVyIGRlbHRpZmllZCBvYmplY3RzIHdobworCQkJCSAgICAgKiB1c2VzIHRoZSBzYW1lIGJhc2UgYXMgbWUKKwkJCQkgICAgICovCisJdW5zaWduZWQgZGVsdGFfc2l6ZV86T0VfREVMVEFfU0laRV9CSVRTOyAvKiBkZWx0YSBkYXRhIHNpemUgKHVuY29tcHJlc3NlZCkgKi8KKwl1bnNpZ25lZCBkZWx0YV9zaXplX3ZhbGlkOjE7CisJdW5zaWduZWQgY2hhciBpbl9wYWNrX2hlYWRlcl9zaXplOworCXVuc2lnbmVkIGluX3BhY2tfaWR4Ok9FX0lOX1BBQ0tfQklUUzsJLyogYWxyZWFkeSBpbiBwYWNrICovCisJdW5zaWduZWQgel9kZWx0YV9zaXplOk9FX1pfREVMVEFfQklUUzsKKwl1bnNpZ25lZCB0eXBlX3ZhbGlkOjE7CisJdW5zaWduZWQgbm9fdHJ5X2RlbHRhOjE7CisJdW5zaWduZWQgdHlwZV86VFlQRV9CSVRTOworCXVuc2lnbmVkIGluX3BhY2tfdHlwZTpUWVBFX0JJVFM7IC8qIGNvdWxkIGJlIGRlbHRhICovCisKKwl1bnNpZ25lZCBwcmVmZXJyZWRfYmFzZToxOyAvKgorCQkJCSAgICAqIHdlIGRvIG5vdCBwYWNrIHRoaXMsIGJ1dCBpcyBhdmFpbGFibGUKKwkJCQkgICAgKiB0byBiZSB1c2VkIGFzIHRoZSBiYXNlIG9iamVjdCB0byBkZWx0YQorCQkJCSAgICAqIG9iamVjdHMgYWdhaW5zdC4KKwkJCQkgICAgKi8KKwl1bnNpZ25lZCB0YWdnZWQ6MTsgLyogbmVhciB0aGUgdmVyeSB0aXAgb2YgcmVmcyAqLworCXVuc2lnbmVkIGZpbGxlZDoxOyAvKiBhc3NpZ25lZCB3cml0ZS1vcmRlciAqLworCXVuc2lnbmVkIGRmc19zdGF0ZTpPRV9ERlNfU1RBVEVfQklUUzsKKwl1bnNpZ25lZCBkZXB0aDpPRV9ERVBUSF9CSVRTOworCXVuc2lnbmVkIGV4dF9iYXNlOjE7IC8qIGRlbHRhX2lkeCBwb2ludHMgb3V0c2lkZSBwYWNrbGlzdCAqLworCisJLyoKKwkgKiBwYWhvbGUgcmVzdWx0cyBvbiA2NC1iaXQgbGludXggKGdjYyBhbmQgY2xhbmcpCisJICoKKwkgKiAgIHNpemU6IDgwLCBiaXRfcGFkZGluZzogOSBiaXRzCisJICoKKwkgKiBhbmQgb24gMzItYml0IChnY2MpCisJICoKKwkgKiAgIHNpemU6IDc2LCBiaXRfcGFkZGluZzogOSBiaXRzCisJICovCit9OworCitzdHJ1Y3QgcGFja2luZ19kYXRhIHsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmplY3RzOworCXVpbnQzMl90IG5yX29iamVjdHMsIG5yX2FsbG9jOworCisJaW50MzJfdCAqaW5kZXg7CisJdWludDMyX3QgaW5kZXhfc2l6ZTsKKworCXVuc2lnbmVkIGludCAqaW5fcGFja19wb3M7CisJdW5zaWduZWQgbG9uZyAqZGVsdGFfc2l6ZTsKKworCS8qCisJICogT25seSBvbmUgb2YgdGhlc2UgY2FuIGJlIG5vbi1OVUxMIGFuZCB0aGV5IGhhdmUgZGlmZmVyZW50CisJICogc2l6ZXMuIGlmIGluX3BhY2tfYnlfaWR4IGlzIGFsbG9jYXRlZCwgb2VfaW5fcGFjaygpIHJldHVybnMKKwkgKiB0aGUgcGFjayBvZiBhbiBvYmplY3QgdXNpbmcgaW5fcGFja19pZHggZmllbGQuIElmIG5vdCwKKwkgKiBpbl9wYWNrW10gYXJyYXkgaXMgdXNlZCB0aGUgc2FtZSB3YXkgYXMgaW5fcGFja19wb3NbXQorCSAqLworCXN0cnVjdCBwYWNrZWRfZ2l0ICoqaW5fcGFja19ieV9pZHg7CisJc3RydWN0IHBhY2tlZF9naXQgKippbl9wYWNrOworCisJLyoKKwkgKiBEdXJpbmcgcGFja2luZyB3aXRoIG11bHRpcGxlIHRocmVhZHMsIHByb3RlY3QgdGhlIGluLWNvcmUKKwkgKiBvYmplY3QgZGF0YWJhc2UgZnJvbSBjb25jdXJyZW50IGFjY2Vzc2VzLgorCSAqLworCXB0aHJlYWRfbXV0ZXhfdCBvZGJfbG9jazsKKworCS8qCisJICogVGhpcyBsaXN0IGNvbnRhaW5zIGVudHJpZXMgZm9yIGJhc2VzIHdoaWNoIHdlIGtub3cgdGhlIG90aGVyIHNpZGUKKwkgKiBoYXMgKGUuZy4sIHZpYSByZWFjaGFiaWxpdHkgYml0bWFwcyksIGJ1dCB3aGljaCBhcmVuJ3QgaW4gb3VyCisJICogIm9iamVjdHMiIGxpc3QuCisJICovCisJc3RydWN0IG9iamVjdF9lbnRyeSAqZXh0X2Jhc2VzOworCXVpbnQzMl90IG5yX2V4dCwgYWxsb2NfZXh0OworCisJdWludG1heF90IG9lX3NpemVfbGltaXQ7CisJdWludG1heF90IG9lX2RlbHRhX3NpemVfbGltaXQ7CisKKwkvKiBkZWx0YSBpc2xhbmRzICovCisJdW5zaWduZWQgaW50ICp0cmVlX2RlcHRoOworCXVuc2lnbmVkIGNoYXIgKmxheWVyOworfTsKKwordm9pZCBwcmVwYXJlX3BhY2tpbmdfZGF0YShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEpOworCisvKiBQcm90ZWN0IGFjY2VzcyB0byBvYmplY3QgZGF0YWJhc2UgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWNraW5nX2RhdGFfbG9jayhzdHJ1Y3QgcGFja2luZ19kYXRhICpwZGF0YSkKK3sKKwlwdGhyZWFkX211dGV4X2xvY2soJnBkYXRhLT5vZGJfbG9jayk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcGFja2luZ19kYXRhX3VubG9jayhzdHJ1Y3QgcGFja2luZ19kYXRhICpwZGF0YSkKK3sKKwlwdGhyZWFkX211dGV4X3VubG9jaygmcGRhdGEtPm9kYl9sb2NrKTsKK30KKworc3RydWN0IG9iamVjdF9lbnRyeSAqcGFja2xpc3RfYWxsb2Moc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKK3N0cnVjdCBvYmplY3RfZW50cnkgKnBhY2tsaXN0X2ZpbmQoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEsCisJCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworc3RhdGljIGlubGluZSB1aW50MzJfdCBwYWNrX25hbWVfaGFzaChjb25zdCBjaGFyICpuYW1lKQoreworCXVpbnQzMl90IGMsIGhhc2ggPSAwOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVGhpcyBlZmZlY3RpdmVseSBqdXN0IGNyZWF0ZXMgYSBzb3J0YWJsZSBudW1iZXIgZnJvbSB0aGUKKwkgKiBsYXN0IHNpeHRlZW4gbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycy4gTGFzdCBjaGFyYWN0ZXJzCisJICogY291bnQgIm1vc3QiLCBzbyB0aGluZ3MgdGhhdCBlbmQgaW4gIi5jIiBzb3J0IHRvZ2V0aGVyLgorCSAqLworCXdoaWxlICgoYyA9ICpuYW1lKyspICE9IDApIHsKKwkJaWYgKGlzc3BhY2UoYykpCisJCQljb250aW51ZTsKKwkJaGFzaCA9IChoYXNoID4+IDIpICsgKGMgPDwgMjQpOworCX0KKwlyZXR1cm4gaGFzaDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG9iamVjdF90eXBlIG9lX3R5cGUoY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqZSkKK3sKKwlyZXR1cm4gZS0+dHlwZV92YWxpZCA/IGUtPnR5cGVfIDogT0JKX0JBRDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9lX3NldF90eXBlKHN0cnVjdCBvYmplY3RfZW50cnkgKmUsCisJCQkgICAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlKQoreworCWlmICh0eXBlID49IE9CSl9BTlkpCisJCUJVRygiT0JKX0FOWSBjYW5ub3QgYmUgc2V0IGluIHBhY2stb2JqZWN0cyBjb2RlIik7CisKKwllLT50eXBlX3ZhbGlkID0gdHlwZSA+PSBPQkpfTk9ORTsKKwllLT50eXBlXyA9ICh1bnNpZ25lZCl0eXBlOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvZV9pbl9wYWNrX3Bvcyhjb25zdCBzdHJ1Y3QgcGFja2luZ19kYXRhICpwYWNrLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmUpCit7CisJcmV0dXJuIHBhY2stPmluX3BhY2tfcG9zW2UgLSBwYWNrLT5vYmplY3RzXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9lX3NldF9pbl9wYWNrX3Bvcyhjb25zdCBzdHJ1Y3QgcGFja2luZ19kYXRhICpwYWNrLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmUsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHBvcykKK3sKKwlwYWNrLT5pbl9wYWNrX3Bvc1tlIC0gcGFjay0+b2JqZWN0c10gPSBwb3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhY2tlZF9naXQgKm9lX2luX3BhY2soY29uc3Qgc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmUpCit7CisJaWYgKHBhY2stPmluX3BhY2tfYnlfaWR4KQorCQlyZXR1cm4gcGFjay0+aW5fcGFja19ieV9pZHhbZS0+aW5fcGFja19pZHhdOworCWVsc2UKKwkJcmV0dXJuIHBhY2stPmluX3BhY2tbZSAtIHBhY2stPm9iamVjdHNdOworfQorCit2b2lkIG9lX21hcF9uZXdfcGFjayhzdHJ1Y3QgcGFja2luZ19kYXRhICpwYWNrKTsKKworc3RhdGljIGlubGluZSB2b2lkIG9lX3NldF9pbl9wYWNrKHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCQkJICBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplLAorCQkJCSAgc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJaWYgKHBhY2stPmluX3BhY2tfYnlfaWR4KSB7CisJCWlmIChwLT5pbmRleCkgeworCQkJZS0+aW5fcGFja19pZHggPSBwLT5pbmRleDsKKwkJCXJldHVybjsKKwkJfQorCQkvKgorCQkgKiBXZSdyZSBhY2Nlc3NpbmcgcGFja3MgYnkgaW5kZXgsIGJ1dCB0aGlzIHBhY2sgZG9lc24ndCBoYXZlCisJCSAqIGFuIGluZGV4IChlLmcuLCBiZWNhdXNlIGl0IHdhcyBhZGRlZCBzaW5jZSB3ZSBjcmVhdGVkIHRoZQorCQkgKiBpbl9wYWNrX2J5X2lkeCBhcnJheSkuIEJhaWwgdG8gb2VfbWFwX25ld19wYWNrKCksIHdoaWNoCisJCSAqIHdpbGwgY29udmVydCB1cyB0byB1c2luZyB0aGUgZnVsbCBpbl9wYWNrIGFycmF5LCBhbmQgdGhlbgorCQkgKiBmYWxsIHRocm91Z2ggdG8gb3VyIGluX3BhY2sgaGFuZGxpbmcuCisJCSAqLworCQlvZV9tYXBfbmV3X3BhY2socGFjayk7CisJfQorCXBhY2stPmluX3BhY2tbZSAtIHBhY2stPm9iamVjdHNdID0gcDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZV9kZWx0YSgKKwkJY29uc3Qgc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqZSkKK3sKKwlpZiAoIWUtPmRlbHRhX2lkeCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGUtPmV4dF9iYXNlKQorCQlyZXR1cm4gJnBhY2stPmV4dF9iYXNlc1tlLT5kZWx0YV9pZHggLSAxXTsKKwllbHNlCisJCXJldHVybiAmcGFjay0+b2JqZWN0c1tlLT5kZWx0YV9pZHggLSAxXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9lX3NldF9kZWx0YShzdHJ1Y3QgcGFja2luZ19kYXRhICpwYWNrLAorCQkJCXN0cnVjdCBvYmplY3RfZW50cnkgKmUsCisJCQkJc3RydWN0IG9iamVjdF9lbnRyeSAqZGVsdGEpCit7CisJaWYgKGRlbHRhKQorCQllLT5kZWx0YV9pZHggPSAoZGVsdGEgLSBwYWNrLT5vYmplY3RzKSArIDE7CisJZWxzZQorCQllLT5kZWx0YV9pZHggPSAwOworfQorCit2b2lkIG9lX3NldF9kZWx0YV9leHQoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJICAgICAgc3RydWN0IG9iamVjdF9lbnRyeSAqZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZV9kZWx0YV9jaGlsZCgKKwkJY29uc3Qgc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqZSkKK3sKKwlpZiAoZS0+ZGVsdGFfY2hpbGRfaWR4KQorCQlyZXR1cm4gJnBhY2stPm9iamVjdHNbZS0+ZGVsdGFfY2hpbGRfaWR4IC0gMV07CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvZV9zZXRfZGVsdGFfY2hpbGQoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplLAorCQkJCSAgICAgIHN0cnVjdCBvYmplY3RfZW50cnkgKmRlbHRhKQoreworCWlmIChkZWx0YSkKKwkJZS0+ZGVsdGFfY2hpbGRfaWR4ID0gKGRlbHRhIC0gcGFjay0+b2JqZWN0cykgKyAxOworCWVsc2UKKwkJZS0+ZGVsdGFfY2hpbGRfaWR4ID0gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZV9kZWx0YV9zaWJsaW5nKAorCQljb25zdCBzdHJ1Y3QgcGFja2luZ19kYXRhICpwYWNrLAorCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplKQoreworCWlmIChlLT5kZWx0YV9zaWJsaW5nX2lkeCkKKwkJcmV0dXJuICZwYWNrLT5vYmplY3RzW2UtPmRlbHRhX3NpYmxpbmdfaWR4IC0gMV07CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvZV9zZXRfZGVsdGFfc2libGluZyhzdHJ1Y3QgcGFja2luZ19kYXRhICpwYWNrLAorCQkJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplLAorCQkJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpkZWx0YSkKK3sKKwlpZiAoZGVsdGEpCisJCWUtPmRlbHRhX3NpYmxpbmdfaWR4ID0gKGRlbHRhIC0gcGFjay0+b2JqZWN0cykgKyAxOworCWVsc2UKKwkJZS0+ZGVsdGFfc2libGluZ19pZHggPSAwOworfQorCit1bnNpZ25lZCBsb25nIG9lX2dldF9zaXplX3Nsb3coc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplKTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvZV9zaXplKHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmUpCit7CisJaWYgKGUtPnNpemVfdmFsaWQpCisJCXJldHVybiBlLT5zaXplXzsKKworCXJldHVybiBvZV9nZXRfc2l6ZV9zbG93KHBhY2ssIGUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBvZV9zaXplX2xlc3NfdGhhbihzdHJ1Y3QgcGFja2luZ19kYXRhICpwYWNrLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpsaHMsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgcmhzKQoreworCWlmIChsaHMtPnNpemVfdmFsaWQpCisJCXJldHVybiBsaHMtPnNpemVfIDwgcmhzOworCWlmIChyaHMgPCBwYWNrLT5vZV9zaXplX2xpbWl0KSAvKiByaHMgPCAyXnggPD0gbGhzID8gKi8KKwkJcmV0dXJuIDA7CisJcmV0dXJuIG9lX2dldF9zaXplX3Nsb3cocGFjaywgbGhzKSA8IHJoczsKK30KKworc3RhdGljIGlubGluZSBpbnQgb2Vfc2l6ZV9ncmVhdGVyX3RoYW4oc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqbGhzLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHJocykKK3sKKwlpZiAobGhzLT5zaXplX3ZhbGlkKQorCQlyZXR1cm4gbGhzLT5zaXplXyA+IHJoczsKKwlpZiAocmhzIDwgcGFjay0+b2Vfc2l6ZV9saW1pdCkgLyogcmhzIDwgMl54IDw9IGxocyA/ICovCisJCXJldHVybiAxOworCXJldHVybiBvZV9nZXRfc2l6ZV9zbG93KHBhY2ssIGxocykgPiByaHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvZV9zZXRfc2l6ZShzdHJ1Y3QgcGFja2luZ19kYXRhICpwYWNrLAorCQkJICAgICAgIHN0cnVjdCBvYmplY3RfZW50cnkgKmUsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWlmIChzaXplIDwgcGFjay0+b2Vfc2l6ZV9saW1pdCkgeworCQllLT5zaXplXyA9IHNpemU7CisJCWUtPnNpemVfdmFsaWQgPSAxOworCX0gZWxzZSB7CisJCWUtPnNpemVfdmFsaWQgPSAwOworCQlpZiAob2VfZ2V0X3NpemVfc2xvdyhwYWNrLCBlKSAhPSBzaXplKQorCQkJQlVHKCInc2l6ZScgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIG9iamVjdCBzaXplISIpOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9lX2RlbHRhX3NpemUoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplKQoreworCWlmIChlLT5kZWx0YV9zaXplX3ZhbGlkKQorCQlyZXR1cm4gZS0+ZGVsdGFfc2l6ZV87CisKKwkvKgorCSAqIHBhY2stPmRlbHRhX3NpemVbXSBjYW4ndCBiZSBOVUxMIGJlY2F1c2Ugb2Vfc2V0X2RlbHRhX3NpemUoKQorCSAqIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCB3aGVuIGEgbmV3IGRlbHRhIGlzIHNhdmVkIHdpdGgKKwkgKiBvZV9zZXRfZGVsdGEoKS4KKwkgKiBJZiBvZV9kZWx0YSgpIHJldHVybnMgTlVMTCAoaS5lLiBkZWZhdWx0IHN0YXRlLCB3aGljaCBtZWFucworCSAqIGRlbHRhX3NpemVfdmFsaWQgaXMgYWxzbyBmYWxzZSksIHRoZW4gdGhlIGNhbGxlciBtdXN0IG5ldmVyCisJICogY2FsbCBvZV9kZWx0YV9zaXplKCkuCisJICovCisJcmV0dXJuIHBhY2stPmRlbHRhX3NpemVbZSAtIHBhY2stPm9iamVjdHNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2Vfc2V0X2RlbHRhX3NpemUoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJCQkgICAgIHN0cnVjdCBvYmplY3RfZW50cnkgKmUsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKHNpemUgPCBwYWNrLT5vZV9kZWx0YV9zaXplX2xpbWl0KSB7CisJCWUtPmRlbHRhX3NpemVfID0gc2l6ZTsKKwkJZS0+ZGVsdGFfc2l6ZV92YWxpZCA9IDE7CisJfSBlbHNlIHsKKwkJcGFja2luZ19kYXRhX2xvY2socGFjayk7CisJCWlmICghcGFjay0+ZGVsdGFfc2l6ZSkKKwkJCUFMTE9DX0FSUkFZKHBhY2stPmRlbHRhX3NpemUsIHBhY2stPm5yX2FsbG9jKTsKKwkJcGFja2luZ19kYXRhX3VubG9jayhwYWNrKTsKKworCQlwYWNrLT5kZWx0YV9zaXplW2UgLSBwYWNrLT5vYmplY3RzXSA9IHNpemU7CisJCWUtPmRlbHRhX3NpemVfdmFsaWQgPSAwOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2VfdHJlZV9kZXB0aChzdHJ1Y3QgcGFja2luZ19kYXRhICpwYWNrLAorCQkJCQkgc3RydWN0IG9iamVjdF9lbnRyeSAqZSkKK3sKKwlpZiAoIXBhY2stPnRyZWVfZGVwdGgpCisJCXJldHVybiAwOworCXJldHVybiBwYWNrLT50cmVlX2RlcHRoW2UgLSBwYWNrLT5vYmplY3RzXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9lX3NldF90cmVlX2RlcHRoKHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHRyZWVfZGVwdGgpCit7CisJaWYgKCFwYWNrLT50cmVlX2RlcHRoKQorCQlDQUxMT0NfQVJSQVkocGFjay0+dHJlZV9kZXB0aCwgcGFjay0+bnJfYWxsb2MpOworCXBhY2stPnRyZWVfZGVwdGhbZSAtIHBhY2stPm9iamVjdHNdID0gdHJlZV9kZXB0aDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIG9lX2xheWVyKHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplKQoreworCWlmICghcGFjay0+bGF5ZXIpCisJCXJldHVybiAwOworCXJldHVybiBwYWNrLT5sYXllcltlIC0gcGFjay0+b2JqZWN0c107Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvZV9zZXRfbGF5ZXIoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplLAorCQkJCXVuc2lnbmVkIGNoYXIgbGF5ZXIpCit7CisJaWYgKCFwYWNrLT5sYXllcikKKwkJQ0FMTE9DX0FSUkFZKHBhY2stPmxheWVyLCBwYWNrLT5ucl9hbGxvYyk7CisJcGFjay0+bGF5ZXJbZSAtIHBhY2stPm9iamVjdHNdID0gbGF5ZXI7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcGFjay1yZXZpbmRleC5jIGIvcGFjay1yZXZpbmRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOGE3ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrLXJldmluZGV4LmMKQEAgLTAsMCArMSwyMDUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInBhY2stcmV2aW5kZXguaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorCisvKgorICogUGFjayBpbmRleCBmb3IgZXhpc3RpbmcgcGFja3MgZ2l2ZSB1cyBlYXN5IGFjY2VzcyB0byB0aGUgb2Zmc2V0cyBpbnRvCisgKiBjb3JyZXNwb25kaW5nIHBhY2sgZmlsZSB3aGVyZSBlYWNoIG9iamVjdCdzIGRhdGEgc3RhcnRzLCBidXQgdGhlIGVudHJpZXMKKyAqIGRvIG5vdCBzdG9yZSB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiAodW5jb21wcmVzc2VkCisgKiBzaXplIGlzIGVhc2lseSBhdmFpbGFibGUgYnkgZXhhbWluaW5nIHRoZSBwYWNrIGVudHJ5IGhlYWRlcikuICBJdCBpcworICogYWxzbyByYXRoZXIgZXhwZW5zaXZlIHRvIGZpbmQgdGhlIHNoYTEgZm9yIGFuIG9iamVjdCBnaXZlbiBpdHMgb2Zmc2V0LgorICoKKyAqIFRoZSBwYWNrIGluZGV4IGZpbGUgaXMgc29ydGVkIGJ5IG9iamVjdCBuYW1lIG1hcHBpbmcgdG8gb2Zmc2V0OworICogdGhpcyByZXZpbmRleCBhcnJheSBpcyBhIGxpc3Qgb2Ygb2Zmc2V0L2luZGV4X25yIHBhaXJzCisgKiBvcmRlcmVkIGJ5IG9mZnNldCwgc28gaWYgeW91IGtub3cgdGhlIG9mZnNldCBvZiBhbiBvYmplY3QsIG5leHQgb2Zmc2V0CisgKiBpcyB3aGVyZSBpdHMgcGFja2VkIHJlcHJlc2VudGF0aW9uIGVuZHMgYW5kIHRoZSBpbmRleF9uciBjYW4gYmUgdXNlZCB0bworICogZ2V0IHRoZSBvYmplY3Qgc2hhMSBmcm9tIHRoZSBtYWluIGluZGV4LgorICovCisKKy8qCisgKiBUaGlzIGlzIGEgbGVhc3Qtc2lnbmlmaWNhbnQtZGlnaXQgcmFkaXggc29ydC4KKyAqCisgKiBJdCBzb3J0cyBlYWNoIG9mIHRoZSAibiIgaXRlbXMgaW4gImVudHJpZXMiIGJ5IGl0cyBvZmZzZXQgZmllbGQuIFRoZSAibWF4IgorICogcGFyYW1ldGVyIG11c3QgYmUgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIGxhcmdlc3Qgb2Zmc2V0IGluIHRoZSBhcnJheSwKKyAqIGFuZCBsZXRzIHVzIHF1aXQgdGhlIHNvcnQgZWFybHkuCisgKi8KK3N0YXRpYyB2b2lkIHNvcnRfcmV2aW5kZXgoc3RydWN0IHJldmluZGV4X2VudHJ5ICplbnRyaWVzLCB1bnNpZ25lZCBuLCBvZmZfdCBtYXgpCit7CisJLyoKKwkgKiBXZSB1c2UgYSAiZGlnaXQiIHNpemUgb2YgMTYgYml0cy4gVGhhdCBrZWVwcyBvdXIgbWVtb3J5CisJICogdXNhZ2UgcmVhc29uYWJsZSwgYW5kIHdlIGNhbiBnZW5lcmFsbHkgKGZvciBhIDRHIG9yIHNtYWxsZXIKKwkgKiBwYWNrZmlsZSkgcXVpdCBhZnRlciB0d28gcm91bmRzIG9mIHJhZGl4LXNvcnRpbmcuCisJICovCisjZGVmaW5lIERJR0lUX1NJWkUgKDE2KQorI2RlZmluZSBCVUNLRVRTICgxIDw8IERJR0lUX1NJWkUpCisJLyoKKwkgKiBXZSB3YW50IHRvIGtub3cgdGhlIGJ1Y2tldCB0aGF0IGFbaV0gd2lsbCBnbyBpbnRvIHdoZW4gd2UgYXJlIHVzaW5nCisJICogdGhlIGRpZ2l0IHRoYXQgaXMgTiBiaXRzIGZyb20gdGhlIChsZWFzdCBzaWduaWZpY2FudCkgZW5kLgorCSAqLworI2RlZmluZSBCVUNLRVRfRk9SKGEsIGksIGJpdHMpICgoKGEpWyhpKV0ub2Zmc2V0ID4+IChiaXRzKSkgJiAoQlVDS0VUUy0xKSkKKworCS8qCisJICogV2UgbmVlZCBPKG4pIHRlbXBvcmFyeSBzdG9yYWdlLiBSYXRoZXIgdGhhbiBkbyBhbiBleHRyYSBjb3B5IG9mIHRoZQorCSAqIHBhcnRpYWwgcmVzdWx0cyBpbnRvICJlbnRyaWVzIiwgd2Ugc29ydCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZQorCSAqIHJlYWwgYXJyYXkgYW5kIHRlbXBvcmFyeSBzdG9yYWdlLiBJbiBlYWNoIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgd2UKKwkgKiBrZWVwIHRyYWNrIG9mIHRoZW0gd2l0aCBhbGlhcyBwb2ludGVycywgYWx3YXlzIHNvcnRpbmcgZnJvbSAiZnJvbSIKKwkgKiB0byAidG8iLgorCSAqLworCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqdG1wLCAqZnJvbSwgKnRvOworCWludCBiaXRzOworCXVuc2lnbmVkICpwb3M7CisKKwlBTExPQ19BUlJBWShwb3MsIEJVQ0tFVFMpOworCUFMTE9DX0FSUkFZKHRtcCwgbik7CisJZnJvbSA9IGVudHJpZXM7CisJdG8gPSB0bXA7CisKKwkvKgorCSAqIElmIChtYXggPj4gYml0cykgaXMgemVybywgdGhlbiB3ZSBrbm93IHRoYXQgdGhlIHJhZGl4IGRpZ2l0IHdlIGFyZQorCSAqIG9uIChhbmQgYW55IGhpZ2hlcikgd2lsbCBiZSB6ZXJvIGZvciBhbGwgZW50cmllcywgYW5kIG91ciBsb29wIHdpbGwKKwkgKiBiZSBhIG5vLW9wLCBhcyBldmVyeWJvZHkgbGFuZHMgaW4gdGhlIHNhbWUgemVyby10aCBidWNrZXQuCisJICovCisJZm9yIChiaXRzID0gMDsgbWF4ID4+IGJpdHM7IGJpdHMgKz0gRElHSVRfU0laRSkgeworCQl1bnNpZ25lZCBpOworCisJCW1lbXNldChwb3MsIDAsIEJVQ0tFVFMgKiBzaXplb2YoKnBvcykpOworCisJCS8qCisJCSAqIFdlIHdhbnQgcG9zW2ldIHRvIHN0b3JlIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBlbGVtZW50IHRoYXQKKwkJICogd2lsbCBnbyBpbiBidWNrZXQgImkiIChhY3R1YWxseSBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50KS4KKwkJICogVG8gZG8gdGhpcywgd2UgZmlyc3QgY291bnQgdGhlIGl0ZW1zIHRoYXQgd2lsbCBnbyBpbiBlYWNoCisJCSAqIGJ1Y2tldCwgd2hpY2ggZ2l2ZXMgdXMgYSByZWxhdGl2ZSBvZmZzZXQgZnJvbSB0aGUgbGFzdAorCQkgKiBidWNrZXQuIFdlIGNhbiB0aGVuIGN1bXVsYXRpdmVseSBhZGQgdGhlIGluZGV4IGZyb20gdGhlCisJCSAqIHByZXZpb3VzIGJ1Y2tldCB0byBnZXQgdGhlIHRydWUgaW5kZXguCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJcG9zW0JVQ0tFVF9GT1IoZnJvbSwgaSwgYml0cyldKys7CisJCWZvciAoaSA9IDE7IGkgPCBCVUNLRVRTOyBpKyspCisJCQlwb3NbaV0gKz0gcG9zW2ktMV07CisKKwkJLyoKKwkJICogTm93IHdlIGNhbiBkcm9wIHRoZSBlbGVtZW50cyBpbnRvIHRoZWlyIGNvcnJlY3QgYnVja2V0cyAoaW4KKwkJICogb3VyIHRlbXBvcmFyeSBhcnJheSkuICBXZSBpdGVyYXRlIHRoZSBwb3MgY291bnRlciBiYWNrd2FyZHMKKwkJICogdG8gYXZvaWQgdXNpbmcgYW4gZXh0cmEgaW5kZXggdG8gY291bnQgdXAuIEFuZCBzaW5jZSB3ZSBhcmUKKwkJICogZ29pbmcgYmFja3dhcmRzIHRoZXJlLCB3ZSBtdXN0IGFsc28gZ28gYmFja3dhcmRzIHRocm91Z2ggdGhlCisJCSAqIGFycmF5IGl0c2VsZiwgdG8ga2VlcCB0aGUgc29ydCBzdGFibGUuCisJCSAqCisJCSAqIE5vdGUgdGhhdCB3ZSB1c2UgYW4gdW5zaWduZWQgaXRlcmF0b3IgdG8gbWFrZSBzdXJlIHdlIGNhbgorCQkgKiBoYW5kbGUgMl4zMi0xIG9iamVjdHMsIGV2ZW4gb24gYSAzMi1iaXQgc3lzdGVtLiBCdXQgdGhpcworCQkgKiBtZWFucyB3ZSBjYW5ub3QgdXNlIHRoZSBtb3JlIG9idmlvdXMgImkgPj0gMCIgbG9vcCBjb25kaXRpb24KKwkJICogZm9yIGNvdW50aW5nIGJhY2t3YXJkcywgYW5kIG11c3QgaW5zdGVhZCBjaGVjayBmb3IKKwkJICogd3JhcC1hcm91bmQgd2l0aCBVSU5UX01BWC4KKwkJICovCisJCWZvciAoaSA9IG4gLSAxOyBpICE9IFVJTlRfTUFYOyBpLS0pCisJCQl0b1stLXBvc1tCVUNLRVRfRk9SKGZyb20sIGksIGJpdHMpXV0gPSBmcm9tW2ldOworCisJCS8qCisJCSAqIE5vdyAidG8iIGNvbnRhaW5zIHRoZSBtb3N0IHNvcnRlZCBsaXN0LCBzbyB3ZSBzd2FwICJmcm9tIiBhbmQKKwkJICogInRvIiBmb3IgdGhlIG5leHQgaXRlcmF0aW9uLgorCQkgKi8KKwkJU1dBUChmcm9tLCB0byk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBlbmRlZCB3aXRoIG91ciBkYXRhIGluIHRoZSBvcmlnaW5hbCBhcnJheSwgZ3JlYXQuIElmIG5vdCwKKwkgKiB3ZSBoYXZlIHRvIG1vdmUgaXQgYmFjayBmcm9tIHRoZSB0ZW1wb3Jhcnkgc3RvcmFnZS4KKwkgKi8KKwlpZiAoZnJvbSAhPSBlbnRyaWVzKQorCQlDT1BZX0FSUkFZKGVudHJpZXMsIHRtcCwgbik7CisJZnJlZSh0bXApOworCWZyZWUocG9zKTsKKworI3VuZGVmIEJVQ0tFVF9GT1IKKyN1bmRlZiBCVUNLRVRTCisjdW5kZWYgRElHSVRfU0laRQorfQorCisvKgorICogT3JkZXJlZCBsaXN0IG9mIG9mZnNldHMgb2Ygb2JqZWN0cyBpbiB0aGUgcGFjay4KKyAqLworc3RhdGljIHZvaWQgY3JlYXRlX3BhY2tfcmV2aW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJY29uc3QgdW5zaWduZWQgbnVtX2VudCA9IHAtPm51bV9vYmplY3RzOworCXVuc2lnbmVkIGk7CisJY29uc3QgY2hhciAqaW5kZXggPSBwLT5pbmRleF9kYXRhOworCWNvbnN0IHVuc2lnbmVkIGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCisJQUxMT0NfQVJSQVkocC0+cmV2aW5kZXgsIG51bV9lbnQgKyAxKTsKKwlpbmRleCArPSA0ICogMjU2OworCisJaWYgKHAtPmluZGV4X3ZlcnNpb24gPiAxKSB7CisJCWNvbnN0IHVpbnQzMl90ICpvZmZfMzIgPQorCQkJKHVpbnQzMl90ICopKGluZGV4ICsgOCArIHAtPm51bV9vYmplY3RzICogKGhhc2hzeiArIDQpKTsKKwkJY29uc3QgdWludDMyX3QgKm9mZl82NCA9IG9mZl8zMiArIHAtPm51bV9vYmplY3RzOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudDsgaSsrKSB7CisJCQljb25zdCB1aW50MzJfdCBvZmYgPSBudG9obCgqb2ZmXzMyKyspOworCQkJaWYgKCEob2ZmICYgMHg4MDAwMDAwMCkpIHsKKwkJCQlwLT5yZXZpbmRleFtpXS5vZmZzZXQgPSBvZmY7CisJCQl9IGVsc2UgeworCQkJCXAtPnJldmluZGV4W2ldLm9mZnNldCA9IGdldF9iZTY0KG9mZl82NCk7CisJCQkJb2ZmXzY0ICs9IDI7CisJCQl9CisJCQlwLT5yZXZpbmRleFtpXS5uciA9IGk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudDsgaSsrKSB7CisJCQljb25zdCB1aW50MzJfdCBobCA9ICooKHVpbnQzMl90ICopKGluZGV4ICsgKGhhc2hzeiArIDQpICogaSkpOworCQkJcC0+cmV2aW5kZXhbaV0ub2Zmc2V0ID0gbnRvaGwoaGwpOworCQkJcC0+cmV2aW5kZXhbaV0ubnIgPSBpOworCQl9CisJfQorCisJLyoKKwkgKiBUaGlzIGtub3dzIHRoZSBwYWNrIGZvcm1hdCAtLSB0aGUgaGFzaCB0cmFpbGVyCisJICogZm9sbG93cyBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGFzdCBvYmplY3QgZGF0YS4KKwkgKi8KKwlwLT5yZXZpbmRleFtudW1fZW50XS5vZmZzZXQgPSBwLT5wYWNrX3NpemUgLSBoYXNoc3o7CisJcC0+cmV2aW5kZXhbbnVtX2VudF0ubnIgPSAtMTsKKwlzb3J0X3JldmluZGV4KHAtPnJldmluZGV4LCBudW1fZW50LCBwLT5wYWNrX3NpemUpOworfQorCitpbnQgbG9hZF9wYWNrX3JldmluZGV4KHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCWlmICghcC0+cmV2aW5kZXgpIHsKKwkJaWYgKG9wZW5fcGFja19pbmRleChwKSkKKwkJCXJldHVybiAtMTsKKwkJY3JlYXRlX3BhY2tfcmV2aW5kZXgocCk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgZmluZF9yZXZpbmRleF9wb3NpdGlvbihzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3Qgb2ZzKQoreworCWludCBsbyA9IDA7CisJaW50IGhpID0gcC0+bnVtX29iamVjdHMgKyAxOworCWNvbnN0IHN0cnVjdCByZXZpbmRleF9lbnRyeSAqcmV2aW5kZXggPSBwLT5yZXZpbmRleDsKKworCWRvIHsKKwkJY29uc3QgdW5zaWduZWQgbWkgPSBsbyArIChoaSAtIGxvKSAvIDI7CisJCWlmIChyZXZpbmRleFttaV0ub2Zmc2V0ID09IG9mcykgeworCQkJcmV0dXJuIG1pOworCQl9IGVsc2UgaWYgKG9mcyA8IHJldmluZGV4W21pXS5vZmZzZXQpCisJCQloaSA9IG1pOworCQllbHNlCisJCQlsbyA9IG1pICsgMTsKKwl9IHdoaWxlIChsbyA8IGhpKTsKKworCWVycm9yKCJiYWQgb2Zmc2V0IGZvciByZXZpbmRleCIpOworCXJldHVybiAtMTsKK30KKworc3RydWN0IHJldmluZGV4X2VudHJ5ICpmaW5kX3BhY2tfcmV2aW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IG9mcykKK3sKKwlpbnQgcG9zOworCisJaWYgKGxvYWRfcGFja19yZXZpbmRleChwKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwb3MgPSBmaW5kX3JldmluZGV4X3Bvc2l0aW9uKHAsIG9mcyk7CisKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcC0+cmV2aW5kZXggKyBwb3M7Cit9CmRpZmYgLS1naXQgYS9wYWNrLXJldmluZGV4LmggYi9wYWNrLXJldmluZGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4MzMxZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2stcmV2aW5kZXguaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIFBBQ0tfUkVWSU5ERVhfSAorI2RlZmluZSBQQUNLX1JFVklOREVYX0gKKworc3RydWN0IHBhY2tlZF9naXQ7CisKK3N0cnVjdCByZXZpbmRleF9lbnRyeSB7CisJb2ZmX3Qgb2Zmc2V0OworCXVuc2lnbmVkIGludCBucjsKK307CisKK2ludCBsb2FkX3BhY2tfcmV2aW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKnApOworaW50IGZpbmRfcmV2aW5kZXhfcG9zaXRpb24oc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IG9mcyk7CisKK3N0cnVjdCByZXZpbmRleF9lbnRyeSAqZmluZF9wYWNrX3JldmluZGV4KHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBvZnMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhY2std3JpdGUuYyBiL3BhY2std3JpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDAxN2JlCi0tLSAvZGV2L251bGwKKysrIGIvcGFjay13cml0ZS5jCkBAIC0wLDAgKzEsMzc5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAiY3N1bS1maWxlLmgiCisKK3ZvaWQgcmVzZXRfcGFja19pZHhfb3B0aW9uKHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gKm9wdHMpCit7CisJbWVtc2V0KG9wdHMsIDAsIHNpemVvZigqb3B0cykpOworCW9wdHMtPnZlcnNpb24gPSAyOworCW9wdHMtPm9mZjMyX2xpbWl0ID0gMHg3ZmZmZmZmZjsKK30KKworc3RhdGljIGludCBzaGExX2NvbXBhcmUoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQoreworCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqYSA9ICooc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqKV9hOworCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqYiA9ICooc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqKV9iOworCXJldHVybiBvaWRjbXAoJmEtPm9pZCwgJmItPm9pZCk7Cit9CisKK3N0YXRpYyBpbnQgY21wX3VpbnQzMihjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJdWludDMyX3QgYSA9ICooKHVpbnQzMl90ICopYV8pOworCXVpbnQzMl90IGIgPSAqKCh1aW50MzJfdCAqKWJfKTsKKworCXJldHVybiAoYSA8IGIpID8gLTEgOiAoYSAhPSBiKTsKK30KKworc3RhdGljIGludCBuZWVkX2xhcmdlX29mZnNldChvZmZfdCBvZmZzZXQsIGNvbnN0IHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gKm9wdHMpCit7CisJdWludDMyX3Qgb2ZzdmFsOworCisJaWYgKChvZmZzZXQgPj4gMzEpIHx8IChvcHRzLT5vZmYzMl9saW1pdCA8IG9mZnNldCkpCisJCXJldHVybiAxOworCWlmICghb3B0cy0+YW5vbWFseV9ucikKKwkJcmV0dXJuIDA7CisJb2ZzdmFsID0gb2Zmc2V0OworCXJldHVybiAhIWJzZWFyY2goJm9mc3ZhbCwgb3B0cy0+YW5vbWFseSwgb3B0cy0+YW5vbWFseV9uciwKKwkJCSBzaXplb2Yob2ZzdmFsKSwgY21wX3VpbnQzMik7Cit9CisKKy8qCisgKiBPbiBlbnRyeSAqc2hhMSBjb250YWlucyB0aGUgcGFjayBjb250ZW50IFNIQTEgaGFzaCwgb24gZXhpdCBpdCBpcworICogdGhlIFNIQTEgaGFzaCBvZiBzb3J0ZWQgb2JqZWN0IG5hbWVzLiBUaGUgb2JqZWN0cyBhcnJheSBwYXNzZWQgaW4KKyAqIHdpbGwgYmUgc29ydGVkIGJ5IFNIQTEgb24gZXhpdC4KKyAqLworY29uc3QgY2hhciAqd3JpdGVfaWR4X2ZpbGUoY29uc3QgY2hhciAqaW5kZXhfbmFtZSwgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqb2JqZWN0cywKKwkJCSAgIGludCBucl9vYmplY3RzLCBjb25zdCBzdHJ1Y3QgcGFja19pZHhfb3B0aW9uICpvcHRzLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgaGFzaGZpbGUgKmY7CisJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqc29ydGVkX2J5X3NoYSwgKipsaXN0LCAqKmxhc3Q7CisJb2ZmX3QgbGFzdF9vYmpfb2Zmc2V0ID0gMDsKKwl1aW50MzJfdCBhcnJheVsyNTZdOworCWludCBpLCBmZDsKKwl1aW50MzJfdCBpbmRleF92ZXJzaW9uOworCisJaWYgKG5yX29iamVjdHMpIHsKKwkJc29ydGVkX2J5X3NoYSA9IG9iamVjdHM7CisJCWxpc3QgPSBzb3J0ZWRfYnlfc2hhOworCQlsYXN0ID0gc29ydGVkX2J5X3NoYSArIG5yX29iamVjdHM7CisJCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyArK2kpIHsKKwkJCWlmIChvYmplY3RzW2ldLT5vZmZzZXQgPiBsYXN0X29ial9vZmZzZXQpCisJCQkJbGFzdF9vYmpfb2Zmc2V0ID0gb2JqZWN0c1tpXS0+b2Zmc2V0OworCQl9CisJCVFTT1JUKHNvcnRlZF9ieV9zaGEsIG5yX29iamVjdHMsIHNoYTFfY29tcGFyZSk7CisJfQorCWVsc2UKKwkJc29ydGVkX2J5X3NoYSA9IGxpc3QgPSBsYXN0ID0gTlVMTDsKKworCWlmIChvcHRzLT5mbGFncyAmIFdSSVRFX0lEWF9WRVJJRlkpIHsKKwkJYXNzZXJ0KGluZGV4X25hbWUpOworCQlmID0gaGFzaGZkX2NoZWNrKGluZGV4X25hbWUpOworCX0gZWxzZSB7CisJCWlmICghaW5kZXhfbmFtZSkgeworCQkJc3RydWN0IHN0cmJ1ZiB0bXBfZmlsZSA9IFNUUkJVRl9JTklUOworCQkJZmQgPSBvZGJfbWtzdGVtcCgmdG1wX2ZpbGUsICJwYWNrL3RtcF9pZHhfWFhYWFhYIik7CisJCQlpbmRleF9uYW1lID0gc3RyYnVmX2RldGFjaCgmdG1wX2ZpbGUsIE5VTEwpOworCQl9IGVsc2UgeworCQkJdW5saW5rKGluZGV4X25hbWUpOworCQkJZmQgPSBvcGVuKGluZGV4X25hbWUsIE9fQ1JFQVR8T19FWENMfE9fV1JPTkxZLCAwNjAwKTsKKwkJCWlmIChmZCA8IDApCisJCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlICclcyciLCBpbmRleF9uYW1lKTsKKwkJfQorCQlmID0gaGFzaGZkKGZkLCBpbmRleF9uYW1lKTsKKwl9CisKKwkvKiBpZiBsYXN0IG9iamVjdCdzIG9mZnNldCBpcyA+PSAyXjMxIHdlIHNob3VsZCB1c2UgaW5kZXggVjIgKi8KKwlpbmRleF92ZXJzaW9uID0gbmVlZF9sYXJnZV9vZmZzZXQobGFzdF9vYmpfb2Zmc2V0LCBvcHRzKSA/IDIgOiBvcHRzLT52ZXJzaW9uOworCisJLyogaW5kZXggdmVyc2lvbnMgMiBhbmQgYWJvdmUgbmVlZCBhIGhlYWRlciAqLworCWlmIChpbmRleF92ZXJzaW9uID49IDIpIHsKKwkJc3RydWN0IHBhY2tfaWR4X2hlYWRlciBoZHI7CisJCWhkci5pZHhfc2lnbmF0dXJlID0gaHRvbmwoUEFDS19JRFhfU0lHTkFUVVJFKTsKKwkJaGRyLmlkeF92ZXJzaW9uID0gaHRvbmwoaW5kZXhfdmVyc2lvbik7CisJCWhhc2h3cml0ZShmLCAmaGRyLCBzaXplb2YoaGRyKSk7CisJfQorCisJLyoKKwkgKiBXcml0ZSB0aGUgZmlyc3QtbGV2ZWwgdGFibGUgKHRoZSBsaXN0IGlzIHNvcnRlZCwKKwkgKiBidXQgd2UgdXNlIGEgMjU2LWVudHJ5IGxvb2t1cCB0byBiZSBhYmxlIHRvIGF2b2lkCisJICogaGF2aW5nIHRvIGRvIGVpZ2h0IGV4dHJhIGJpbmFyeSBzZWFyY2ggaXRlcmF0aW9ucykuCisJICovCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKm5leHQgPSBsaXN0OworCQl3aGlsZSAobmV4dCA8IGxhc3QpIHsKKwkJCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqb2JqID0gKm5leHQ7CisJCQlpZiAob2JqLT5vaWQuaGFzaFswXSAhPSBpKQorCQkJCWJyZWFrOworCQkJbmV4dCsrOworCQl9CisJCWFycmF5W2ldID0gaHRvbmwobmV4dCAtIHNvcnRlZF9ieV9zaGEpOworCQlsaXN0ID0gbmV4dDsKKwl9CisJaGFzaHdyaXRlKGYsIGFycmF5LCAyNTYgKiA0KTsKKworCS8qCisJICogV3JpdGUgdGhlIGFjdHVhbCBTSEExIGVudHJpZXMuLgorCSAqLworCWxpc3QgPSBzb3J0ZWRfYnlfc2hhOworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICpvYmogPSAqbGlzdCsrOworCQlpZiAoaW5kZXhfdmVyc2lvbiA8IDIpIHsKKwkJCXVpbnQzMl90IG9mZnNldCA9IGh0b25sKG9iai0+b2Zmc2V0KTsKKwkJCWhhc2h3cml0ZShmLCAmb2Zmc2V0LCA0KTsKKwkJfQorCQloYXNod3JpdGUoZiwgb2JqLT5vaWQuaGFzaCwgdGhlX2hhc2hfYWxnby0+cmF3c3opOworCQlpZiAoKG9wdHMtPmZsYWdzICYgV1JJVEVfSURYX1NUUklDVCkgJiYKKwkJICAgIChpICYmIG9pZGVxKCZsaXN0Wy0yXS0+b2lkLCAmb2JqLT5vaWQpKSkKKwkJCWRpZSgiVGhlIHNhbWUgb2JqZWN0ICVzIGFwcGVhcnMgdHdpY2UgaW4gdGhlIHBhY2siLAorCQkJICAgIG9pZF90b19oZXgoJm9iai0+b2lkKSk7CisJfQorCisJaWYgKGluZGV4X3ZlcnNpb24gPj0gMikgeworCQl1bnNpZ25lZCBpbnQgbnJfbGFyZ2Vfb2Zmc2V0ID0gMDsKKworCQkvKiB3cml0ZSB0aGUgY3JjMzIgdGFibGUgKi8KKwkJbGlzdCA9IHNvcnRlZF9ieV9zaGE7CisJCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqb2JqID0gKmxpc3QrKzsKKwkJCXVpbnQzMl90IGNyYzMyX3ZhbCA9IGh0b25sKG9iai0+Y3JjMzIpOworCQkJaGFzaHdyaXRlKGYsICZjcmMzMl92YWwsIDQpOworCQl9CisKKwkJLyogd3JpdGUgdGhlIDMyLWJpdCBvZmZzZXQgdGFibGUgKi8KKwkJbGlzdCA9IHNvcnRlZF9ieV9zaGE7CisJCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqb2JqID0gKmxpc3QrKzsKKwkJCXVpbnQzMl90IG9mZnNldDsKKworCQkJb2Zmc2V0ID0gKG5lZWRfbGFyZ2Vfb2Zmc2V0KG9iai0+b2Zmc2V0LCBvcHRzKQorCQkJCSAgPyAoMHg4MDAwMDAwMCB8IG5yX2xhcmdlX29mZnNldCsrKQorCQkJCSAgOiBvYmotPm9mZnNldCk7CisJCQlvZmZzZXQgPSBodG9ubChvZmZzZXQpOworCQkJaGFzaHdyaXRlKGYsICZvZmZzZXQsIDQpOworCQl9CisKKwkJLyogd3JpdGUgdGhlIGxhcmdlIG9mZnNldCB0YWJsZSAqLworCQlsaXN0ID0gc29ydGVkX2J5X3NoYTsKKwkJd2hpbGUgKG5yX2xhcmdlX29mZnNldCkgeworCQkJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICpvYmogPSAqbGlzdCsrOworCQkJdWludDY0X3Qgb2Zmc2V0ID0gb2JqLT5vZmZzZXQ7CisJCQl1aW50MzJfdCBzcGxpdFsyXTsKKworCQkJaWYgKCFuZWVkX2xhcmdlX29mZnNldChvZmZzZXQsIG9wdHMpKQorCQkJCWNvbnRpbnVlOworCQkJc3BsaXRbMF0gPSBodG9ubChvZmZzZXQgPj4gMzIpOworCQkJc3BsaXRbMV0gPSBodG9ubChvZmZzZXQgJiAweGZmZmZmZmZmKTsKKwkJCWhhc2h3cml0ZShmLCBzcGxpdCwgOCk7CisJCQlucl9sYXJnZV9vZmZzZXQtLTsKKwkJfQorCX0KKworCWhhc2h3cml0ZShmLCBzaGExLCB0aGVfaGFzaF9hbGdvLT5yYXdzeik7CisJZmluYWxpemVfaGFzaGZpbGUoZiwgTlVMTCwgQ1NVTV9IQVNIX0lOX1NUUkVBTSB8IENTVU1fQ0xPU0UgfAorCQkJCSAgICAoKG9wdHMtPmZsYWdzICYgV1JJVEVfSURYX1ZFUklGWSkKKwkJCQkgICAgPyAwIDogQ1NVTV9GU1lOQykpOworCXJldHVybiBpbmRleF9uYW1lOworfQorCitvZmZfdCB3cml0ZV9wYWNrX2hlYWRlcihzdHJ1Y3QgaGFzaGZpbGUgKmYsIHVpbnQzMl90IG5yX2VudHJpZXMpCit7CisJc3RydWN0IHBhY2tfaGVhZGVyIGhkcjsKKworCWhkci5oZHJfc2lnbmF0dXJlID0gaHRvbmwoUEFDS19TSUdOQVRVUkUpOworCWhkci5oZHJfdmVyc2lvbiA9IGh0b25sKFBBQ0tfVkVSU0lPTik7CisJaGRyLmhkcl9lbnRyaWVzID0gaHRvbmwobnJfZW50cmllcyk7CisJaGFzaHdyaXRlKGYsICZoZHIsIHNpemVvZihoZHIpKTsKKwlyZXR1cm4gc2l6ZW9mKGhkcik7Cit9CisKKy8qCisgKiBVcGRhdGUgcGFjayBoZWFkZXIgd2l0aCBvYmplY3RfY291bnQgYW5kIGNvbXB1dGUgbmV3IFNIQTEgZm9yIHBhY2sgZGF0YQorICogYXNzb2NpYXRlZCB0byBwYWNrX2ZkLCBhbmQgd3JpdGUgdGhhdCBTSEExIGF0IHRoZSBlbmQuICBUaGF0IG5ldyBTSEExCisgKiBpcyBhbHNvIHJldHVybmVkIGluIG5ld19wYWNrX3NoYTEuCisgKgorICogSWYgcGFydGlhbF9wYWNrX3NoYTEgaXMgbm9uIG51bGwsIHRoZW4gdGhlIFNIQTEgb2YgdGhlIGV4aXN0aW5nIHBhY2sKKyAqICh3aXRob3V0IHRoZSBoZWFkZXIgdXBkYXRlKSBpcyBjb21wdXRlZCBhbmQgdmFsaWRhdGVkIGFnYWluc3QgdGhlCisgKiBvbmUgcHJvdmlkZWQgaW4gcGFydGlhbF9wYWNrX3NoYTEuICBUaGUgdmFsaWRhdGlvbiBpcyBwZXJmb3JtZWQgYXQKKyAqIHBhcnRpYWxfcGFja19vZmZzZXQgYnl0ZXMgaW4gdGhlIHBhY2sgZmlsZS4gIFRoZSBTSEExIG9mIHRoZSByZW1haW5pbmcKKyAqIGRhdGEgKGkuZS4gZnJvbSBwYXJ0aWFsX3BhY2tfb2Zmc2V0IHRvIHRoZSBlbmQpIGlzIHRoZW4gY29tcHV0ZWQgYW5kCisgKiByZXR1cm5lZCBpbiBwYXJ0aWFsX3BhY2tfc2hhMS4KKyAqCisgKiBOb3RlIHRoYXQgbmV3X3BhY2tfc2hhMSBpcyB1cGRhdGVkIGxhc3QsIHNvIGJvdGggbmV3X3BhY2tfc2hhMSBhbmQKKyAqIHBhcnRpYWxfcGFja19zaGExIGNhbiByZWZlciB0byB0aGUgc2FtZSBidWZmZXIgaWYgdGhlIGNhbGxlciBpcyBub3QKKyAqIGludGVyZXN0ZWQgaW4gdGhlIHJlc3VsdGluZyBTSEExIG9mIHBhY2sgZGF0YSBhYm92ZSBwYXJ0aWFsX3BhY2tfb2Zmc2V0LgorICovCit2b2lkIGZpeHVwX3BhY2tfaGVhZGVyX2Zvb3RlcihpbnQgcGFja19mZCwKKwkJCSB1bnNpZ25lZCBjaGFyICpuZXdfcGFja19oYXNoLAorCQkJIGNvbnN0IGNoYXIgKnBhY2tfbmFtZSwKKwkJCSB1aW50MzJfdCBvYmplY3RfY291bnQsCisJCQkgdW5zaWduZWQgY2hhciAqcGFydGlhbF9wYWNrX2hhc2gsCisJCQkgb2ZmX3QgcGFydGlhbF9wYWNrX29mZnNldCkKK3sKKwlpbnQgYWxpZ25lZF9zeiwgYnVmX3N6ID0gOCAqIDEwMjQ7CisJZ2l0X2hhc2hfY3R4IG9sZF9oYXNoX2N0eCwgbmV3X2hhc2hfY3R4OworCXN0cnVjdCBwYWNrX2hlYWRlciBoZHI7CisJY2hhciAqYnVmOworCXNzaXplX3QgcmVhZF9yZXN1bHQ7CisKKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZvbGRfaGFzaF9jdHgpOworCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJm5ld19oYXNoX2N0eCk7CisKKwlpZiAobHNlZWsocGFja19mZCwgMCwgU0VFS19TRVQpICE9IDApCisJCWRpZV9lcnJubygiRmFpbGVkIHNlZWtpbmcgdG8gc3RhcnQgb2YgJyVzJyIsIHBhY2tfbmFtZSk7CisJcmVhZF9yZXN1bHQgPSByZWFkX2luX2Z1bGwocGFja19mZCwgJmhkciwgc2l6ZW9mKGhkcikpOworCWlmIChyZWFkX3Jlc3VsdCA8IDApCisJCWRpZV9lcnJubygiVW5hYmxlIHRvIHJlcmVhZCBoZWFkZXIgb2YgJyVzJyIsIHBhY2tfbmFtZSk7CisJZWxzZSBpZiAocmVhZF9yZXN1bHQgIT0gc2l6ZW9mKGhkcikpCisJCWRpZV9lcnJubygiVW5leHBlY3RlZCBzaG9ydCByZWFkIGZvciBoZWFkZXIgb2YgJyVzJyIsCisJCQkgIHBhY2tfbmFtZSk7CisJaWYgKGxzZWVrKHBhY2tfZmQsIDAsIFNFRUtfU0VUKSAhPSAwKQorCQlkaWVfZXJybm8oIkZhaWxlZCBzZWVraW5nIHRvIHN0YXJ0IG9mICclcyciLCBwYWNrX25hbWUpOworCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmb2xkX2hhc2hfY3R4LCAmaGRyLCBzaXplb2YoaGRyKSk7CisJaGRyLmhkcl9lbnRyaWVzID0gaHRvbmwob2JqZWN0X2NvdW50KTsKKwl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJm5ld19oYXNoX2N0eCwgJmhkciwgc2l6ZW9mKGhkcikpOworCXdyaXRlX29yX2RpZShwYWNrX2ZkLCAmaGRyLCBzaXplb2YoaGRyKSk7CisJcGFydGlhbF9wYWNrX29mZnNldCAtPSBzaXplb2YoaGRyKTsKKworCWJ1ZiA9IHhtYWxsb2MoYnVmX3N6KTsKKwlhbGlnbmVkX3N6ID0gYnVmX3N6IC0gc2l6ZW9mKGhkcik7CisJZm9yICg7OykgeworCQlzc2l6ZV90IG0sIG47CisJCW0gPSAocGFydGlhbF9wYWNrX2hhc2ggJiYgcGFydGlhbF9wYWNrX29mZnNldCA8IGFsaWduZWRfc3opID8KKwkJCXBhcnRpYWxfcGFja19vZmZzZXQgOiBhbGlnbmVkX3N6OworCQluID0geHJlYWQocGFja19mZCwgYnVmLCBtKTsKKwkJaWYgKCFuKQorCQkJYnJlYWs7CisJCWlmIChuIDwgMCkKKwkJCWRpZV9lcnJubygiRmFpbGVkIHRvIGNoZWNrc3VtICclcyciLCBwYWNrX25hbWUpOworCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJm5ld19oYXNoX2N0eCwgYnVmLCBuKTsKKworCQlhbGlnbmVkX3N6IC09IG47CisJCWlmICghYWxpZ25lZF9zeikKKwkJCWFsaWduZWRfc3ogPSBidWZfc3o7CisKKwkJaWYgKCFwYXJ0aWFsX3BhY2tfaGFzaCkKKwkJCWNvbnRpbnVlOworCisJCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmb2xkX2hhc2hfY3R4LCBidWYsIG4pOworCQlwYXJ0aWFsX3BhY2tfb2Zmc2V0IC09IG47CisJCWlmIChwYXJ0aWFsX3BhY2tfb2Zmc2V0ID09IDApIHsKKwkJCXVuc2lnbmVkIGNoYXIgaGFzaFtHSVRfTUFYX1JBV1NaXTsKKwkJCXRoZV9oYXNoX2FsZ28tPmZpbmFsX2ZuKGhhc2gsICZvbGRfaGFzaF9jdHgpOworCQkJaWYgKCFoYXNoZXEoaGFzaCwgcGFydGlhbF9wYWNrX2hhc2gpKQorCQkJCWRpZSgiVW5leHBlY3RlZCBjaGVja3N1bSBmb3IgJXMgIgorCQkJCSAgICAiKGRpc2sgY29ycnVwdGlvbj8pIiwgcGFja19uYW1lKTsKKwkJCS8qCisJCQkgKiBOb3cgbGV0J3MgY29tcHV0ZSB0aGUgU0hBMSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZQorCQkJICogcGFjaywgd2hpY2ggYWxzbyBtZWFucyBtYWtpbmcgcGFydGlhbF9wYWNrX29mZnNldAorCQkJICogYmlnIGVub3VnaCBub3QgdG8gbWF0dGVyIGFueW1vcmUuCisJCQkgKi8KKwkJCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJm9sZF9oYXNoX2N0eCk7CisJCQlwYXJ0aWFsX3BhY2tfb2Zmc2V0ID0gfnBhcnRpYWxfcGFja19vZmZzZXQ7CisJCQlwYXJ0aWFsX3BhY2tfb2Zmc2V0IC09IE1TQihwYXJ0aWFsX3BhY2tfb2Zmc2V0LCAxKTsKKwkJfQorCX0KKwlmcmVlKGJ1Zik7CisKKwlpZiAocGFydGlhbF9wYWNrX2hhc2gpCisJCXRoZV9oYXNoX2FsZ28tPmZpbmFsX2ZuKHBhcnRpYWxfcGFja19oYXNoLCAmb2xkX2hhc2hfY3R4KTsKKwl0aGVfaGFzaF9hbGdvLT5maW5hbF9mbihuZXdfcGFja19oYXNoLCAmbmV3X2hhc2hfY3R4KTsKKwl3cml0ZV9vcl9kaWUocGFja19mZCwgbmV3X3BhY2tfaGFzaCwgdGhlX2hhc2hfYWxnby0+cmF3c3opOworCWZzeW5jX29yX2RpZShwYWNrX2ZkLCBwYWNrX25hbWUpOworfQorCitjaGFyICppbmRleF9wYWNrX2xvY2tmaWxlKGludCBpcF9vdXQpCit7CisJY2hhciBwYWNrbmFtZVtHSVRfTUFYX0hFWFNaICsgNl07CisJY29uc3QgaW50IGxlbiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgNjsKKworCS8qCisJICogVGhlIGZpcnN0IHRoaW5nIHdlIGV4cGVjdCBmcm9tIGluZGV4LXBhY2sncyBvdXRwdXQKKwkgKiBpcyAicGFja1x0JTQwc1xuIiBvciAia2VlcFx0JTQwc1xuIiAoNDYgYnl0ZXMpIHdoZXJlCisJICogJTQwcyBpcyB0aGUgbmV3bHkgY3JlYXRlZCBwYWNrIFNIQTEgbmFtZS4gIEluIHRoZSAia2VlcCIKKwkgKiBjYXNlLCB3ZSBuZWVkIGl0IHRvIHJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyAua2VlcCBmaWxlCisJICogbGF0ZXIgb24uICBJZiB3ZSBkb24ndCBnZXQgdGhhdCB0aGVuIHRvdWdoIGx1Y2sgd2l0aCBpdC4KKwkgKi8KKwlpZiAocmVhZF9pbl9mdWxsKGlwX291dCwgcGFja25hbWUsIGxlbikgPT0gbGVuICYmIHBhY2tuYW1lW2xlbi0xXSA9PSAnXG4nKSB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCXBhY2tuYW1lW2xlbi0xXSA9IDA7CisJCWlmIChza2lwX3ByZWZpeChwYWNrbmFtZSwgImtlZXBcdCIsICZuYW1lKSkKKwkJCXJldHVybiB4c3RyZm10KCIlcy9wYWNrL3BhY2stJXMua2VlcCIsCisJCQkJICAgICAgIGdldF9vYmplY3RfZGlyZWN0b3J5KCksIG5hbWUpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFRoZSBwZXItb2JqZWN0IGhlYWRlciBpcyBhIHByZXR0eSBkZW5zZSB0aGluZywgd2hpY2ggaXMKKyAqICAtIGZpcnN0IGJ5dGU6IGxvdyBmb3VyIGJpdHMgYXJlICJzaXplIiwgdGhlbiB0aHJlZSBiaXRzIG9mICJ0eXBlIiwKKyAqICAgIGFuZCB0aGUgaGlnaCBiaXQgaXMgInNpemUgY29udGludWVzIi4KKyAqICAtIGVhY2ggYnl0ZSBhZnRlcndhcmRzOiBsb3cgc2V2ZW4gYml0cyBhcmUgc2l6ZSBjb250aW51YXRpb24sCisgKiAgICB3aXRoIHRoZSBoaWdoIGJpdCBiZWluZyAic2l6ZSBjb250aW51ZXMiCisgKi8KK2ludCBlbmNvZGVfaW5fcGFja19vYmplY3RfaGVhZGVyKHVuc2lnbmVkIGNoYXIgKmhkciwgaW50IGhkcl9sZW4sCisJCQkJIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgdWludG1heF90IHNpemUpCit7CisJaW50IG4gPSAxOworCXVuc2lnbmVkIGNoYXIgYzsKKworCWlmICh0eXBlIDwgT0JKX0NPTU1JVCB8fCB0eXBlID4gT0JKX1JFRl9ERUxUQSkKKwkJZGllKCJiYWQgdHlwZSAlZCIsIHR5cGUpOworCisJYyA9ICh0eXBlIDw8IDQpIHwgKHNpemUgJiAxNSk7CisJc2l6ZSA+Pj0gNDsKKwl3aGlsZSAoc2l6ZSkgeworCQlpZiAobiA9PSBoZHJfbGVuKQorCQkJZGllKCJvYmplY3Qgc2l6ZSBpcyB0b28gZW5vcm1vdXMgdG8gZm9ybWF0Iik7CisJCSpoZHIrKyA9IGMgfCAweDgwOworCQljID0gc2l6ZSAmIDB4N2Y7CisJCXNpemUgPj49IDc7CisJCW4rKzsKKwl9CisJKmhkciA9IGM7CisJcmV0dXJuIG47Cit9CisKK3N0cnVjdCBoYXNoZmlsZSAqY3JlYXRlX3RtcF9wYWNrZmlsZShjaGFyICoqcGFja190bXBfbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHRtcG5hbWUgPSBTVFJCVUZfSU5JVDsKKwlpbnQgZmQ7CisKKwlmZCA9IG9kYl9ta3N0ZW1wKCZ0bXBuYW1lLCAicGFjay90bXBfcGFja19YWFhYWFgiKTsKKwkqcGFja190bXBfbmFtZSA9IHN0cmJ1Zl9kZXRhY2goJnRtcG5hbWUsIE5VTEwpOworCXJldHVybiBoYXNoZmQoZmQsICpwYWNrX3RtcF9uYW1lKTsKK30KKwordm9pZCBmaW5pc2hfdG1wX3BhY2tmaWxlKHN0cnVjdCBzdHJidWYgKm5hbWVfYnVmZmVyLAorCQkJIGNvbnN0IGNoYXIgKnBhY2tfdG1wX25hbWUsCisJCQkgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqd3JpdHRlbl9saXN0LAorCQkJIHVpbnQzMl90IG5yX3dyaXR0ZW4sCisJCQkgc3RydWN0IHBhY2tfaWR4X29wdGlvbiAqcGFja19pZHhfb3B0cywKKwkJCSB1bnNpZ25lZCBjaGFyIGhhc2hbXSkKK3sKKwljb25zdCBjaGFyICppZHhfdG1wX25hbWU7CisJaW50IGJhc2VuYW1lX2xlbiA9IG5hbWVfYnVmZmVyLT5sZW47CisKKwlpZiAoYWRqdXN0X3NoYXJlZF9wZXJtKHBhY2tfdG1wX25hbWUpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBtYWtlIHRlbXBvcmFyeSBwYWNrIGZpbGUgcmVhZGFibGUiKTsKKworCWlkeF90bXBfbmFtZSA9IHdyaXRlX2lkeF9maWxlKE5VTEwsIHdyaXR0ZW5fbGlzdCwgbnJfd3JpdHRlbiwKKwkJCQkgICAgICBwYWNrX2lkeF9vcHRzLCBoYXNoKTsKKwlpZiAoYWRqdXN0X3NoYXJlZF9wZXJtKGlkeF90bXBfbmFtZSkpCisJCWRpZV9lcnJubygidW5hYmxlIHRvIG1ha2UgdGVtcG9yYXJ5IGluZGV4IGZpbGUgcmVhZGFibGUiKTsKKworCXN0cmJ1Zl9hZGRmKG5hbWVfYnVmZmVyLCAiJXMucGFjayIsIGhhc2hfdG9faGV4KGhhc2gpKTsKKworCWlmIChyZW5hbWUocGFja190bXBfbmFtZSwgbmFtZV9idWZmZXItPmJ1ZikpCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHJlbmFtZSB0ZW1wb3JhcnkgcGFjayBmaWxlIik7CisKKwlzdHJidWZfc2V0bGVuKG5hbWVfYnVmZmVyLCBiYXNlbmFtZV9sZW4pOworCisJc3RyYnVmX2FkZGYobmFtZV9idWZmZXIsICIlcy5pZHgiLCBoYXNoX3RvX2hleChoYXNoKSk7CisJaWYgKHJlbmFtZShpZHhfdG1wX25hbWUsIG5hbWVfYnVmZmVyLT5idWYpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byByZW5hbWUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiKTsKKworCXN0cmJ1Zl9zZXRsZW4obmFtZV9idWZmZXIsIGJhc2VuYW1lX2xlbik7CisKKwlmcmVlKCh2b2lkICopaWR4X3RtcF9uYW1lKTsKK30KZGlmZiAtLWdpdCBhL3BhY2suaCBiL3BhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmMwOTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFjay5oCkBAIC0wLDAgKzEsMTA2IEBACisjaWZuZGVmIFBBQ0tfSAorI2RlZmluZSBQQUNLX0gKKworI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImNzdW0tZmlsZS5oIgorCitzdHJ1Y3QgcmVwb3NpdG9yeTsKKworLyoKKyAqIFBhY2tlZCBvYmplY3QgaGVhZGVyCisgKi8KKyNkZWZpbmUgUEFDS19TSUdOQVRVUkUgMHg1MDQxNDM0YgkvKiAiUEFDSyIgKi8KKyNkZWZpbmUgUEFDS19WRVJTSU9OIDIKKyNkZWZpbmUgcGFja192ZXJzaW9uX29rKHYpICgodikgPT0gaHRvbmwoMikgfHwgKHYpID09IGh0b25sKDMpKQorc3RydWN0IHBhY2tfaGVhZGVyIHsKKwl1aW50MzJfdCBoZHJfc2lnbmF0dXJlOworCXVpbnQzMl90IGhkcl92ZXJzaW9uOworCXVpbnQzMl90IGhkcl9lbnRyaWVzOworfTsKKworLyoKKyAqIFRoZSBmaXJzdCBmb3VyIGJ5dGVzIG9mIGluZGV4IGZvcm1hdHMgbGF0ZXIgdGhhbiB2ZXJzaW9uIDEgc2hvdWxkCisgKiBzdGFydCB3aXRoIHRoaXMgc2lnbmF0dXJlLCBhcyBhbGwgb2xkZXIgZ2l0IGJpbmFyaWVzIHdvdWxkIGZpbmQgdGhpcworICogdmFsdWUgaWxsZWdhbCBhbmQgYWJvcnQgcmVhZGluZyB0aGUgZmlsZS4KKyAqCisgKiBUaGlzIGlzIHRoZSBjYXNlIGJlY2F1c2UgdGhlIG51bWJlciBvZiBvYmplY3RzIGluIGEgcGFja2ZpbGUKKyAqIGNhbm5vdCBleGNlZWQgMSw0MzEsNjYwLDAwMCBhcyBldmVyeSBvYmplY3Qgd291bGQgbmVlZCBhdCBsZWFzdAorICogMyBieXRlcyBvZiBkYXRhIGFuZCB0aGUgb3ZlcmFsbCBwYWNrZmlsZSBjYW5ub3QgZXhjZWVkIDQgR2lCIHdpdGgKKyAqIHZlcnNpb24gMSBvZiB0aGUgaW5kZXggZmlsZSBkdWUgdG8gdGhlIG9mZnNldHMgbGltaXRlZCB0byAzMiBiaXRzLgorICogQ2xlYXJseSB0aGUgc2lnbmF0dXJlIGV4Y2VlZHMgdGhpcyBtYXhpbXVtLgorICoKKyAqIFZlcnkgb2xkIGdpdCBiaW5hcmllcyB3aWxsIGFsc28gY29tcGFyZSB0aGUgZmlyc3QgNCBieXRlcyB0byB0aGUKKyAqIG5leHQgNCBieXRlcyBpbiB0aGUgaW5kZXggYW5kIGFib3J0IHdpdGggYSAibm9uLW1vbm90b25pYyBpbmRleCIKKyAqIGVycm9yIGlmIHRoZSBzZWNvbmQgNCBieXRlIHdvcmQgaXMgc21hbGxlciB0aGFuIHRoZSBmaXJzdCA0CisgKiBieXRlIHdvcmQuICBUaGlzIHdvdWxkIGJlIHRydWUgaW4gdGhlIHByb3Bvc2VkIGZ1dHVyZSBpbmRleAorICogZm9ybWF0IGFzIGlkeF9zaWduYXR1cmUgd291bGQgYmUgZ3JlYXRlciB0aGFuIGlkeF92ZXJzaW9uLgorICovCisjZGVmaW5lIFBBQ0tfSURYX1NJR05BVFVSRSAweGZmNzQ0ZjYzCS8qICJcMzc3dE9jIiAqLworCitzdHJ1Y3QgcGFja19pZHhfb3B0aW9uIHsKKwl1bnNpZ25lZCBmbGFnczsKKwkvKiBmbGFnIGJpdHMgKi8KKyNkZWZpbmUgV1JJVEVfSURYX1ZFUklGWSAwMSAvKiB2ZXJpZnkgb25seSwgZG8gbm90IHdyaXRlIHRoZSBpZHggZmlsZSAqLworI2RlZmluZSBXUklURV9JRFhfU1RSSUNUIDAyCisKKwl1aW50MzJfdCB2ZXJzaW9uOworCXVpbnQzMl90IG9mZjMyX2xpbWl0OworCisJLyoKKwkgKiBMaXN0IG9mIG9mZnNldHMgdGhhdCB3b3VsZCBmaXQgd2l0aGluIG9mZjMyX2xpbWl0IGJ1dAorCSAqIG5lZWQgdG8gYmUgd3JpdHRlbiBvdXQgYXMgNjQtYml0IGVudGl0eSBmb3IgYnl0ZS1mb3ItYnl0ZQorCSAqIHZlcmlmaWNhdGlvbi4KKwkgKi8KKwlpbnQgYW5vbWFseV9hbGxvYywgYW5vbWFseV9ucjsKKwl1aW50MzJfdCAqYW5vbWFseTsKK307CisKK3ZvaWQgcmVzZXRfcGFja19pZHhfb3B0aW9uKHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gKik7CisKKy8qCisgKiBQYWNrZWQgb2JqZWN0IGluZGV4IGhlYWRlcgorICovCitzdHJ1Y3QgcGFja19pZHhfaGVhZGVyIHsKKwl1aW50MzJfdCBpZHhfc2lnbmF0dXJlOworCXVpbnQzMl90IGlkeF92ZXJzaW9uOworfTsKKworLyoKKyAqIENvbW1vbiBwYXJ0IG9mIG9iamVjdCBzdHJ1Y3R1cmUgdXNlZCBmb3Igd3JpdGVfaWR4X2ZpbGUKKyAqLworc3RydWN0IHBhY2tfaWR4X2VudHJ5IHsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwl1aW50MzJfdCBjcmMzMjsKKwlvZmZfdCBvZmZzZXQ7Cit9OworCisKK3N0cnVjdCBwcm9ncmVzczsKKy8qIE5vdGUsIHRoZSBkYXRhIGFyZ3VtZW50IGNvdWxkIGJlIE5VTEwgaWYgb2JqZWN0IHR5cGUgaXMgYmxvYiAqLwordHlwZWRlZiBpbnQgKCp2ZXJpZnlfZm4pKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiwgZW51bSBvYmplY3RfdHlwZSwgdW5zaWduZWQgbG9uZywgdm9pZCosIGludCopOworCitjb25zdCBjaGFyICp3cml0ZV9pZHhfZmlsZShjb25zdCBjaGFyICppbmRleF9uYW1lLCBzdHJ1Y3QgcGFja19pZHhfZW50cnkgKipvYmplY3RzLCBpbnQgbnJfb2JqZWN0cywgY29uc3Qgc3RydWN0IHBhY2tfaWR4X29wdGlvbiAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2ludCBjaGVja19wYWNrX2NyYyhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLCBvZmZfdCBvZmZzZXQsIG9mZl90IGxlbiwgdW5zaWduZWQgaW50IG5yKTsKK2ludCB2ZXJpZnlfcGFja19pbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqKTsKK2ludCB2ZXJpZnlfcGFjayhzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBzdHJ1Y3QgcGFja2VkX2dpdCAqLCB2ZXJpZnlfZm4gZm4sIHN0cnVjdCBwcm9ncmVzcyAqLCB1aW50MzJfdCk7CitvZmZfdCB3cml0ZV9wYWNrX2hlYWRlcihzdHJ1Y3QgaGFzaGZpbGUgKmYsIHVpbnQzMl90KTsKK3ZvaWQgZml4dXBfcGFja19oZWFkZXJfZm9vdGVyKGludCwgdW5zaWduZWQgY2hhciAqLCBjb25zdCBjaGFyICosIHVpbnQzMl90LCB1bnNpZ25lZCBjaGFyICosIG9mZl90KTsKK2NoYXIgKmluZGV4X3BhY2tfbG9ja2ZpbGUoaW50IGZkKTsKKworLyoKKyAqIFRoZSAiaGRyIiBvdXRwdXQgYnVmZmVyIHNob3VsZCBiZSBhdCBsZWFzdCB0aGlzIGJpZywgd2hpY2ggd2lsbCBoYW5kbGUgc2l6ZXMKKyAqIHVwIHRvIDJeNjcuCisgKi8KKyNkZWZpbmUgTUFYX1BBQ0tfT0JKRUNUX0hFQURFUiAxMAoraW50IGVuY29kZV9pbl9wYWNrX29iamVjdF9oZWFkZXIodW5zaWduZWQgY2hhciAqaGRyLCBpbnQgaGRyX2xlbiwKKwkJCQkgZW51bSBvYmplY3RfdHlwZSwgdWludG1heF90KTsKKworI2RlZmluZSBQSF9FUlJPUl9FT0YJCSgtMSkKKyNkZWZpbmUgUEhfRVJST1JfUEFDS19TSUdOQVRVUkUJKC0yKQorI2RlZmluZSBQSF9FUlJPUl9QUk9UT0NPTAkoLTMpCitpbnQgcmVhZF9wYWNrX2hlYWRlcihpbnQgZmQsIHN0cnVjdCBwYWNrX2hlYWRlciAqKTsKKworc3RydWN0IGhhc2hmaWxlICpjcmVhdGVfdG1wX3BhY2tmaWxlKGNoYXIgKipwYWNrX3RtcF9uYW1lKTsKK3ZvaWQgZmluaXNoX3RtcF9wYWNrZmlsZShzdHJ1Y3Qgc3RyYnVmICpuYW1lX2J1ZmZlciwgY29uc3QgY2hhciAqcGFja190bXBfbmFtZSwgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqd3JpdHRlbl9saXN0LCB1aW50MzJfdCBucl93cml0dGVuLCBzdHJ1Y3QgcGFja19pZHhfb3B0aW9uICpwYWNrX2lkeF9vcHRzLCB1bnNpZ25lZCBjaGFyIHNoYTFbXSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcGFja2ZpbGUuYyBiL3BhY2tmaWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlNzUyOQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2tmaWxlLmMKQEAgLTAsMCArMSwyMTYxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJsaXN0LmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJtZXJnZXNvcnQuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisjaW5jbHVkZSAic3RyZWFtaW5nLmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAibWlkeC5oIgorI2luY2x1ZGUgImNvbW1pdC1ncmFwaC5oIgorI2luY2x1ZGUgInByb21pc29yLXJlbW90ZS5oIgorCitjaGFyICpvZGJfcGFja19uYW1lKHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsCisJCSAgICBjb25zdCBjaGFyICpleHQpCit7CisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJc3RyYnVmX2FkZGYoYnVmLCAiJXMvcGFjay9wYWNrLSVzLiVzIiwgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwKKwkJICAgIGhhc2hfdG9faGV4KGhhc2gpLCBleHQpOworCXJldHVybiBidWYtPmJ1ZjsKK30KKworY2hhciAqc2hhMV9wYWNrX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlyZXR1cm4gb2RiX3BhY2tfbmFtZSgmYnVmLCBzaGExLCAicGFjayIpOworfQorCitjaGFyICpzaGExX3BhY2tfaW5kZXhfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXJldHVybiBvZGJfcGFja19uYW1lKCZidWYsIHNoYTEsICJpZHgiKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBwYWNrX3VzZWRfY3RyOworc3RhdGljIHVuc2lnbmVkIGludCBwYWNrX21tYXBfY2FsbHM7CitzdGF0aWMgdW5zaWduZWQgaW50IHBlYWtfcGFja19vcGVuX3dpbmRvd3M7CitzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tfb3Blbl93aW5kb3dzOworc3RhdGljIHVuc2lnbmVkIGludCBwYWNrX29wZW5fZmRzOworc3RhdGljIHVuc2lnbmVkIGludCBwYWNrX21heF9mZHM7CitzdGF0aWMgc2l6ZV90IHBlYWtfcGFja19tYXBwZWQ7CitzdGF0aWMgc2l6ZV90IHBhY2tfbWFwcGVkOworCisjZGVmaW5lIFNaX0ZNVCBQUkl1TUFYCitzdGF0aWMgaW5saW5lIHVpbnRtYXhfdCBzel9mbXQoc2l6ZV90IHMpIHsgcmV0dXJuIHM7IH0KKwordm9pZCBwYWNrX3JlcG9ydCh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLAorCQkicGFja19yZXBvcnQ6IGdldHBhZ2VzaXplKCkgICAgICAgICAgICA9ICUxMCIgU1pfRk1UICJcbiIKKwkJInBhY2tfcmVwb3J0OiBjb3JlLnBhY2tlZEdpdFdpbmRvd1NpemUgPSAlMTAiIFNaX0ZNVCAiXG4iCisJCSJwYWNrX3JlcG9ydDogY29yZS5wYWNrZWRHaXRMaW1pdCAgICAgID0gJTEwIiBTWl9GTVQgIlxuIiwKKwkJc3pfZm10KGdldHBhZ2VzaXplKCkpLAorCQlzel9mbXQocGFja2VkX2dpdF93aW5kb3dfc2l6ZSksCisJCXN6X2ZtdChwYWNrZWRfZ2l0X2xpbWl0KSk7CisJZnByaW50ZihzdGRlcnIsCisJCSJwYWNrX3JlcG9ydDogcGFja191c2VkX2N0ciAgICAgICAgICAgID0gJTEwdVxuIgorCQkicGFja19yZXBvcnQ6IHBhY2tfbW1hcF9jYWxscyAgICAgICAgICA9ICUxMHVcbiIKKwkJInBhY2tfcmVwb3J0OiBwYWNrX29wZW5fd2luZG93cyAgICAgICAgPSAlMTB1IC8gJTEwdVxuIgorCQkicGFja19yZXBvcnQ6IHBhY2tfbWFwcGVkICAgICAgICAgICAgICA9ICIKKwkJCSIlMTAiIFNaX0ZNVCAiIC8gJTEwIiBTWl9GTVQgIlxuIiwKKwkJcGFja191c2VkX2N0ciwKKwkJcGFja19tbWFwX2NhbGxzLAorCQlwYWNrX29wZW5fd2luZG93cywgcGVha19wYWNrX29wZW5fd2luZG93cywKKwkJc3pfZm10KHBhY2tfbWFwcGVkKSwgc3pfZm10KHBlYWtfcGFja19tYXBwZWQpKTsKK30KKworLyoKKyAqIE9wZW4gYW5kIG1tYXAgdGhlIGluZGV4IGZpbGUgYXQgcGF0aCwgcGVyZm9ybSBhIGNvdXBsZSBvZgorICogY29uc2lzdGVuY3kgY2hlY2tzLCB0aGVuIHJlY29yZCBpdHMgaW5mb3JtYXRpb24gdG8gcC4gIFJldHVybiAwIG9uCisgKiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IGNoZWNrX3BhY2tlZF9naXRfaWR4KGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCXZvaWQgKmlkeF9tYXA7CisJc2l6ZV90IGlkeF9zaXplOworCWludCBmZCA9IGdpdF9vcGVuKHBhdGgpLCByZXQ7CisJc3RydWN0IHN0YXQgc3Q7CisJY29uc3QgdW5zaWduZWQgaW50IGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChmc3RhdChmZCwgJnN0KSkgeworCQljbG9zZShmZCk7CisJCXJldHVybiAtMTsKKwl9CisJaWR4X3NpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCWlmIChpZHhfc2l6ZSA8IDQgKiAyNTYgKyBoYXNoc3ogKyBoYXNoc3opIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gZXJyb3IoImluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIiwgcGF0aCk7CisJfQorCWlkeF9tYXAgPSB4bW1hcChOVUxMLCBpZHhfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCWNsb3NlKGZkKTsKKworCXJldCA9IGxvYWRfaWR4KHBhdGgsIGhhc2hzeiwgaWR4X21hcCwgaWR4X3NpemUsIHApOworCisJaWYgKHJldCkKKwkJbXVubWFwKGlkeF9tYXAsIGlkeF9zaXplKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBsb2FkX2lkeChjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBpbnQgaGFzaHN6LCB2b2lkICppZHhfbWFwLAorCSAgICAgc2l6ZV90IGlkeF9zaXplLCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwlzdHJ1Y3QgcGFja19pZHhfaGVhZGVyICpoZHIgPSBpZHhfbWFwOworCXVpbnQzMl90IHZlcnNpb24sIG5yLCBpLCAqaW5kZXg7CisKKwlpZiAoaWR4X3NpemUgPCA0ICogMjU2ICsgaGFzaHN6ICsgaGFzaHN6KQorCQlyZXR1cm4gZXJyb3IoImluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIiwgcGF0aCk7CisJaWYgKGlkeF9tYXAgPT0gTlVMTCkKKwkJcmV0dXJuIGVycm9yKCJlbXB0eSBkYXRhIik7CisKKwlpZiAoaGRyLT5pZHhfc2lnbmF0dXJlID09IGh0b25sKFBBQ0tfSURYX1NJR05BVFVSRSkpIHsKKwkJdmVyc2lvbiA9IG50b2hsKGhkci0+aWR4X3ZlcnNpb24pOworCQlpZiAodmVyc2lvbiA8IDIgfHwgdmVyc2lvbiA+IDIpCisJCQlyZXR1cm4gZXJyb3IoImluZGV4IGZpbGUgJXMgaXMgdmVyc2lvbiAlIlBSSXUzMgorCQkJCSAgICAgIiBhbmQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJpbmFyeSIKKwkJCQkgICAgICIgKHRyeSB1cGdyYWRpbmcgR0lUIHRvIGEgbmV3ZXIgdmVyc2lvbikiLAorCQkJCSAgICAgcGF0aCwgdmVyc2lvbik7CisJfSBlbHNlCisJCXZlcnNpb24gPSAxOworCisJbnIgPSAwOworCWluZGV4ID0gaWR4X21hcDsKKwlpZiAodmVyc2lvbiA+IDEpCisJCWluZGV4ICs9IDI7ICAvKiBza2lwIGluZGV4IGhlYWRlciAqLworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQl1aW50MzJfdCBuID0gbnRvaGwoaW5kZXhbaV0pOworCQlpZiAobiA8IG5yKQorCQkJcmV0dXJuIGVycm9yKCJub24tbW9ub3RvbmljIGluZGV4ICVzIiwgcGF0aCk7CisJCW5yID0gbjsKKwl9CisKKwlpZiAodmVyc2lvbiA9PSAxKSB7CisJCS8qCisJCSAqIFRvdGFsIHNpemU6CisJCSAqICAtIDI1NiBpbmRleCBlbnRyaWVzIDQgYnl0ZXMgZWFjaAorCQkgKiAgLSAyNC1ieXRlIGVudHJpZXMgKiBuciAob2JqZWN0IElEICsgNC1ieXRlIG9mZnNldCkKKwkJICogIC0gaGFzaCBvZiB0aGUgcGFja2ZpbGUKKwkJICogIC0gZmlsZSBjaGVja3N1bQorCQkgKi8KKwkJaWYgKGlkeF9zaXplICE9IDQgKiAyNTYgKyBuciAqIChoYXNoc3ogKyA0KSArIGhhc2hzeiArIGhhc2hzeikKKwkJCXJldHVybiBlcnJvcigid3JvbmcgaW5kZXggdjEgZmlsZSBzaXplIGluICVzIiwgcGF0aCk7CisJfSBlbHNlIGlmICh2ZXJzaW9uID09IDIpIHsKKwkJLyoKKwkJICogTWluaW11bSBzaXplOgorCQkgKiAgLSA4IGJ5dGVzIG9mIGhlYWRlcgorCQkgKiAgLSAyNTYgaW5kZXggZW50cmllcyA0IGJ5dGVzIGVhY2gKKwkJICogIC0gb2JqZWN0IElEIGVudHJ5ICogbnIKKwkJICogIC0gNC1ieXRlIGNyYyBlbnRyeSAqIG5yCisJCSAqICAtIDQtYnl0ZSBvZmZzZXQgZW50cnkgKiBucgorCQkgKiAgLSBoYXNoIG9mIHRoZSBwYWNrZmlsZQorCQkgKiAgLSBmaWxlIGNoZWNrc3VtCisJCSAqIEFuZCBhZnRlciB0aGUgNC1ieXRlIG9mZnNldCB0YWJsZSBtaWdodCBiZSBhCisJCSAqIHZhcmlhYmxlIHNpemVkIHRhYmxlIGNvbnRhaW5pbmcgOC1ieXRlIGVudHJpZXMKKwkJICogZm9yIG9mZnNldHMgbGFyZ2VyIHRoYW4gMl4zMS4KKwkJICovCisJCXVuc2lnbmVkIGxvbmcgbWluX3NpemUgPSA4ICsgNCoyNTYgKyBuciooaGFzaHN6ICsgNCArIDQpICsgaGFzaHN6ICsgaGFzaHN6OworCQl1bnNpZ25lZCBsb25nIG1heF9zaXplID0gbWluX3NpemU7CisJCWlmIChucikKKwkJCW1heF9zaXplICs9IChuciAtIDEpKjg7CisJCWlmIChpZHhfc2l6ZSA8IG1pbl9zaXplIHx8IGlkeF9zaXplID4gbWF4X3NpemUpCisJCQlyZXR1cm4gZXJyb3IoIndyb25nIGluZGV4IHYyIGZpbGUgc2l6ZSBpbiAlcyIsIHBhdGgpOworCQlpZiAoaWR4X3NpemUgIT0gbWluX3NpemUgJiYKKwkJICAgIC8qCisJCSAgICAgKiBtYWtlIHN1cmUgd2UgY2FuIGRlYWwgd2l0aCBsYXJnZSBwYWNrIG9mZnNldHMuCisJCSAgICAgKiAzMS1iaXQgc2lnbmVkIG9mZnNldCB3b24ndCBiZSBlbm91Z2gsIG5laXRoZXIKKwkJICAgICAqIDMyLWJpdCB1bnNpZ25lZCBvbmUgd2lsbCBiZS4KKwkJICAgICAqLworCQkgICAgKHNpemVvZihvZmZfdCkgPD0gNCkpCisJCQlyZXR1cm4gZXJyb3IoInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QgaW4gJXMiLCBwYXRoKTsKKwl9CisKKwlwLT5pbmRleF92ZXJzaW9uID0gdmVyc2lvbjsKKwlwLT5pbmRleF9kYXRhID0gaWR4X21hcDsKKwlwLT5pbmRleF9zaXplID0gaWR4X3NpemU7CisJcC0+bnVtX29iamVjdHMgPSBucjsKKwlyZXR1cm4gMDsKK30KKworaW50IG9wZW5fcGFja19pbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwljaGFyICppZHhfbmFtZTsKKwlzaXplX3QgbGVuOworCWludCByZXQ7CisKKwlpZiAocC0+aW5kZXhfZGF0YSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN0cmlwX3N1ZmZpeChwLT5wYWNrX25hbWUsICIucGFjayIsICZsZW4pKQorCQlCVUcoInBhY2tfbmFtZSBkb2VzIG5vdCBlbmQgaW4gLnBhY2siKTsKKwlpZHhfbmFtZSA9IHhzdHJmbXQoIiUuKnMuaWR4IiwgKGludClsZW4sIHAtPnBhY2tfbmFtZSk7CisJcmV0ID0gY2hlY2tfcGFja2VkX2dpdF9pZHgoaWR4X25hbWUsIHApOworCWZyZWUoaWR4X25hbWUpOworCXJldHVybiByZXQ7Cit9CisKK3VpbnQzMl90IGdldF9wYWNrX2Zhbm91dChzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgdWludDMyX3QgdmFsdWUpCit7CisJY29uc3QgdWludDMyX3QgKmxldmVsMV9vZnMgPSBwLT5pbmRleF9kYXRhOworCisJaWYgKCFsZXZlbDFfb2ZzKSB7CisJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCisJCQlyZXR1cm4gMDsKKwkJbGV2ZWwxX29mcyA9IHAtPmluZGV4X2RhdGE7CisJfQorCisJaWYgKHAtPmluZGV4X3ZlcnNpb24gPiAxKSB7CisJCWxldmVsMV9vZnMgKz0gMjsKKwl9CisKKwlyZXR1cm4gbnRvaGwobGV2ZWwxX29mc1t2YWx1ZV0pOworfQorCitzdGF0aWMgc3RydWN0IHBhY2tlZF9naXQgKmFsbG9jX3BhY2tlZF9naXQoaW50IGV4dHJhKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0geG1hbGxvYyhzdF9hZGQoc2l6ZW9mKCpwKSwgZXh0cmEpKTsKKwltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7CisJcC0+cGFja19mZCA9IC0xOworCXJldHVybiBwOworfQorCitzdHJ1Y3QgcGFja2VkX2dpdCAqcGFyc2VfcGFja19pbmRleCh1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICppZHhfcGF0aCkKK3sKKwljb25zdCBjaGFyICpwYXRoID0gc2hhMV9wYWNrX25hbWUoc2hhMSk7CisJc2l6ZV90IGFsbG9jID0gc3RfYWRkKHN0cmxlbihwYXRoKSwgMSk7CisJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBhbGxvY19wYWNrZWRfZ2l0KGFsbG9jKTsKKworCW1lbWNweShwLT5wYWNrX25hbWUsIHBhdGgsIGFsbG9jKTsgLyogaW5jbHVkZXMgTlVMICovCisJaGFzaGNweShwLT5oYXNoLCBzaGExKTsKKwlpZiAoY2hlY2tfcGFja2VkX2dpdF9pZHgoaWR4X3BhdGgsIHApKSB7CisJCWZyZWUocCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBwOworfQorCitzdGF0aWMgdm9pZCBzY2FuX3dpbmRvd3Moc3RydWN0IHBhY2tlZF9naXQgKnAsCisJc3RydWN0IHBhY2tlZF9naXQgKipscnVfcCwKKwlzdHJ1Y3QgcGFja193aW5kb3cgKipscnVfdywKKwlzdHJ1Y3QgcGFja193aW5kb3cgKipscnVfbCkKK3sKKwlzdHJ1Y3QgcGFja193aW5kb3cgKncsICp3X2w7CisKKwlmb3IgKHdfbCA9IE5VTEwsIHcgPSBwLT53aW5kb3dzOyB3OyB3ID0gdy0+bmV4dCkgeworCQlpZiAoIXctPmludXNlX2NudCkgeworCQkJaWYgKCEqbHJ1X3cgfHwgdy0+bGFzdF91c2VkIDwgKCpscnVfdyktPmxhc3RfdXNlZCkgeworCQkJCSpscnVfcCA9IHA7CisJCQkJKmxydV93ID0gdzsKKwkJCQkqbHJ1X2wgPSB3X2w7CisJCQl9CisJCX0KKwkJd19sID0gdzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdW51c2Vfb25lX3dpbmRvdyhzdHJ1Y3QgcGFja2VkX2dpdCAqY3VycmVudCkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgKmxydV9wID0gTlVMTDsKKwlzdHJ1Y3QgcGFja193aW5kb3cgKmxydV93ID0gTlVMTCwgKmxydV9sID0gTlVMTDsKKworCWlmIChjdXJyZW50KQorCQlzY2FuX3dpbmRvd3MoY3VycmVudCwgJmxydV9wLCAmbHJ1X3csICZscnVfbCk7CisJZm9yIChwID0gdGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPnBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KQorCQlzY2FuX3dpbmRvd3MocCwgJmxydV9wLCAmbHJ1X3csICZscnVfbCk7CisJaWYgKGxydV9wKSB7CisJCW11bm1hcChscnVfdy0+YmFzZSwgbHJ1X3ctPmxlbik7CisJCXBhY2tfbWFwcGVkIC09IGxydV93LT5sZW47CisJCWlmIChscnVfbCkKKwkJCWxydV9sLT5uZXh0ID0gbHJ1X3ctPm5leHQ7CisJCWVsc2UKKwkJCWxydV9wLT53aW5kb3dzID0gbHJ1X3ctPm5leHQ7CisJCWZyZWUobHJ1X3cpOworCQlwYWNrX29wZW5fd2luZG93cy0tOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY2xvc2VfcGFja193aW5kb3dzKHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCXdoaWxlIChwLT53aW5kb3dzKSB7CisJCXN0cnVjdCBwYWNrX3dpbmRvdyAqdyA9IHAtPndpbmRvd3M7CisKKwkJaWYgKHctPmludXNlX2NudCkKKwkJCWRpZSgicGFjayAnJXMnIHN0aWxsIGhhcyBvcGVuIHdpbmRvd3MgdG8gaXQiLAorCQkJICAgIHAtPnBhY2tfbmFtZSk7CisJCW11bm1hcCh3LT5iYXNlLCB3LT5sZW4pOworCQlwYWNrX21hcHBlZCAtPSB3LT5sZW47CisJCXBhY2tfb3Blbl93aW5kb3dzLS07CisJCXAtPndpbmRvd3MgPSB3LT5uZXh0OworCQlmcmVlKHcpOworCX0KK30KKworaW50IGNsb3NlX3BhY2tfZmQoc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJaWYgKHAtPnBhY2tfZmQgPCAwKQorCQlyZXR1cm4gMDsKKworCWNsb3NlKHAtPnBhY2tfZmQpOworCXBhY2tfb3Blbl9mZHMtLTsKKwlwLT5wYWNrX2ZkID0gLTE7CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBjbG9zZV9wYWNrX2luZGV4KHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCWlmIChwLT5pbmRleF9kYXRhKSB7CisJCW11bm1hcCgodm9pZCAqKXAtPmluZGV4X2RhdGEsIHAtPmluZGV4X3NpemUpOworCQlwLT5pbmRleF9kYXRhID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgY2xvc2VfcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwljbG9zZV9wYWNrX3dpbmRvd3MocCk7CisJY2xvc2VfcGFja19mZChwKTsKKwljbG9zZV9wYWNrX2luZGV4KHApOworfQorCit2b2lkIGNsb3NlX29iamVjdF9zdG9yZShzdHJ1Y3QgcmF3X29iamVjdF9zdG9yZSAqbykKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCWZvciAocCA9IG8tPnBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KQorCQlpZiAocC0+ZG9fbm90X2Nsb3NlKQorCQkJQlVHKCJ3YW50IHRvIGNsb3NlIHBhY2sgbWFya2VkICdkby1ub3QtY2xvc2UnIik7CisJCWVsc2UKKwkJCWNsb3NlX3BhY2socCk7CisKKwlpZiAoby0+bXVsdGlfcGFja19pbmRleCkgeworCQljbG9zZV9taWR4KG8tPm11bHRpX3BhY2tfaW5kZXgpOworCQlvLT5tdWx0aV9wYWNrX2luZGV4ID0gTlVMTDsKKwl9CisKKwljbG9zZV9jb21taXRfZ3JhcGgobyk7Cit9CisKK3ZvaWQgdW5saW5rX3BhY2tfcGF0aChjb25zdCBjaGFyICpwYWNrX25hbWUsIGludCBmb3JjZV9kZWxldGUpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmV4dHNbXSA9IHsiLnBhY2siLCAiLmlkeCIsICIua2VlcCIsICIuYml0bWFwIiwgIi5wcm9taXNvciJ9OworCWludCBpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IHBsZW47CisKKwlzdHJidWZfYWRkc3RyKCZidWYsIHBhY2tfbmFtZSk7CisJc3RyaXBfc3VmZml4X21lbShidWYuYnVmLCAmYnVmLmxlbiwgIi5wYWNrIik7CisJcGxlbiA9IGJ1Zi5sZW47CisKKwlpZiAoIWZvcmNlX2RlbGV0ZSkgeworCQlzdHJidWZfYWRkc3RyKCZidWYsICIua2VlcCIpOworCQlpZiAoIWFjY2VzcyhidWYuYnVmLCBGX09LKSkgeworCQkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShleHRzKTsgaSsrKSB7CisJCXN0cmJ1Zl9zZXRsZW4oJmJ1ZiwgcGxlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZXh0c1tpXSk7CisJCXVubGluayhidWYuYnVmKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworLyoKKyAqIFRoZSBMUlUgcGFjayBpcyB0aGUgb25lIHdpdGggdGhlIG9sZGVzdCBNUlUgd2luZG93LCBwcmVmZXJyaW5nIHBhY2tzCisgKiB3aXRoIG5vIHVzZWQgd2luZG93cywgb3IgdGhlIG9sZGVzdCBtdGltZSBpZiBpdCBoYXMgbm8gd2luZG93cyBhbGxvY2F0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGZpbmRfbHJ1X3BhY2soc3RydWN0IHBhY2tlZF9naXQgKnAsIHN0cnVjdCBwYWNrZWRfZ2l0ICoqbHJ1X3AsIHN0cnVjdCBwYWNrX3dpbmRvdyAqKm1ydV93LCBpbnQgKmFjY2VwdF93aW5kb3dzX2ludXNlKQoreworCXN0cnVjdCBwYWNrX3dpbmRvdyAqdywgKnRoaXNfbXJ1X3c7CisJaW50IGhhc193aW5kb3dzX2ludXNlID0gMDsKKworCS8qCisJICogUmVqZWN0IHRoaXMgcGFjayBpZiBpdCBoYXMgd2luZG93cyBhbmQgdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQKKwkgKiBvbmUgZG9lcyBub3QuICBJZiB0aGlzIHBhY2sgZG9lcyBub3QgaGF2ZSB3aW5kb3dzLCByZWplY3QKKwkgKiBpdCBpZiB0aGUgcGFjayBmaWxlIGlzIG5ld2VyIHRoYW4gdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgb25lLgorCSAqLworCWlmICgqbHJ1X3AgJiYgISptcnVfdyAmJiAocC0+d2luZG93cyB8fCBwLT5tdGltZSA+ICgqbHJ1X3ApLT5tdGltZSkpCisJCXJldHVybjsKKworCWZvciAodyA9IHRoaXNfbXJ1X3cgPSBwLT53aW5kb3dzOyB3OyB3ID0gdy0+bmV4dCkgeworCQkvKgorCQkgKiBSZWplY3QgdGhpcyBwYWNrIGlmIGFueSBvZiBpdHMgd2luZG93cyBhcmUgaW4gdXNlLAorCQkgKiBidXQgdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgcGFjayBkaWQgbm90IGhhdmUgYW55CisJCSAqIGludXNlIHdpbmRvd3MuICBPdGhlcndpc2UsIHJlY29yZCB0aGF0IHRoaXMgcGFjaworCQkgKiBoYXMgd2luZG93cyBpbiB1c2UuCisJCSAqLworCQlpZiAody0+aW51c2VfY250KSB7CisJCQlpZiAoKmFjY2VwdF93aW5kb3dzX2ludXNlKQorCQkJCWhhc193aW5kb3dzX2ludXNlID0gMTsKKwkJCWVsc2UKKwkJCQlyZXR1cm47CisJCX0KKworCQlpZiAody0+bGFzdF91c2VkID4gdGhpc19tcnVfdy0+bGFzdF91c2VkKQorCQkJdGhpc19tcnVfdyA9IHc7CisKKwkJLyoKKwkJICogUmVqZWN0IHRoaXMgcGFjayBpZiBpdCBoYXMgd2luZG93cyB0aGF0IGhhdmUgYmVlbgorCQkgKiB1c2VkIG1vcmUgcmVjZW50bHkgdGhhbiB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBwYWNrLgorCQkgKiBJZiB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBwYWNrIGhhZCB3aW5kb3dzIGludXNlIGFuZAorCQkgKiB3ZSBoYXZlIG5vdCBlbmNvdW50ZXJlZCBhIHdpbmRvdyBpbiB0aGlzIHBhY2sgdGhhdCBpcworCQkgKiBpbnVzZSwgc2tpcCB0aGlzIGNoZWNrIHNpbmNlIHdlIHByZWZlciBhIHBhY2sgd2l0aCBubworCQkgKiBpbnVzZSB3aW5kb3dzIHRvIG9uZSB0aGF0IGhhcyBpbnVzZSB3aW5kb3dzLgorCQkgKi8KKwkJaWYgKCptcnVfdyAmJiAqYWNjZXB0X3dpbmRvd3NfaW51c2UgPT0gaGFzX3dpbmRvd3NfaW51c2UgJiYKKwkJICAgIHRoaXNfbXJ1X3ctPmxhc3RfdXNlZCA+ICgqbXJ1X3cpLT5sYXN0X3VzZWQpCisJCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBTZWxlY3QgdGhpcyBwYWNrLgorCSAqLworCSptcnVfdyA9IHRoaXNfbXJ1X3c7CisJKmxydV9wID0gcDsKKwkqYWNjZXB0X3dpbmRvd3NfaW51c2UgPSBoYXNfd2luZG93c19pbnVzZTsKK30KKworc3RhdGljIGludCBjbG9zZV9vbmVfcGFjayh2b2lkKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwLCAqbHJ1X3AgPSBOVUxMOworCXN0cnVjdCBwYWNrX3dpbmRvdyAqbXJ1X3cgPSBOVUxMOworCWludCBhY2NlcHRfd2luZG93c19pbnVzZSA9IDE7CisKKwlmb3IgKHAgPSB0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cy0+cGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPnBhY2tfZmQgPT0gLTEpCisJCQljb250aW51ZTsKKwkJZmluZF9scnVfcGFjayhwLCAmbHJ1X3AsICZtcnVfdywgJmFjY2VwdF93aW5kb3dzX2ludXNlKTsKKwl9CisKKwlpZiAobHJ1X3ApCisJCXJldHVybiBjbG9zZV9wYWNrX2ZkKGxydV9wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9tYXhfZmRfbGltaXQodm9pZCkKK3sKKyNpZmRlZiBSTElNSVRfTk9GSUxFCisJeworCQlzdHJ1Y3QgcmxpbWl0IGxpbTsKKworCQlpZiAoIWdldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmbGltKSkKKwkJCXJldHVybiBsaW0ucmxpbV9jdXI7CisJfQorI2VuZGlmCisKKyNpZmRlZiBfU0NfT1BFTl9NQVgKKwl7CisJCWxvbmcgb3Blbl9tYXggPSBzeXNjb25mKF9TQ19PUEVOX01BWCk7CisJCWlmICgwIDwgb3Blbl9tYXgpCisJCQlyZXR1cm4gb3Blbl9tYXg7CisJCS8qCisJCSAqIE90aGVyd2lzZSwgd2UgZ290IC0xIGZvciBvbmUgb2YgdGhlIHR3bworCQkgKiByZWFzb25zOgorCQkgKgorCQkgKiAoMSkgc3lzY29uZigpIGRpZCBub3QgdW5kZXJzdGFuZCBfU0NfT1BFTl9NQVgKKwkJICogICAgIGFuZCBzaWduYWxlZCBhbiBlcnJvciB3aXRoIC0xOyBvcgorCQkgKiAoMikgc3lzY29uZigpIHNhaWQgdGhlcmUgaXMgbm8gbGltaXQuCisJCSAqCisJCSAqIFdlIF9jb3VsZF8gY2xlYXIgZXJybm8gYmVmb3JlIGNhbGxpbmcgc3lzY29uZigpIHRvCisJCSAqIHRlbGwgdGhlc2UgdHdvIGNhc2VzIGFwYXJ0IGFuZCByZXR1cm4gYSBodWdlIG51bWJlcgorCQkgKiBpbiB0aGUgbGF0dGVyIGNhc2UgdG8gbGV0IHRoZSBjYWxsZXIgY2FwIGl0IHRvIGEKKwkJICogdmFsdWUgdGhhdCBpcyBub3Qgc28gc2VsZmlzaCwgYnV0IGxldHRpbmcgdGhlCisJCSAqIGZhbGxiYWNrIE9QRU5fTUFYIGNvZGVwYXRoIHRha2UgY2FyZSBvZiB0aGVzZSBjYXNlcworCQkgKiBpcyBhIGxvdCBzaW1wbGVyLgorCQkgKi8KKwl9CisjZW5kaWYKKworI2lmZGVmIE9QRU5fTUFYCisJcmV0dXJuIE9QRU5fTUFYOworI2Vsc2UKKwlyZXR1cm4gMTsgLyogc2VlIHRoZSBjYWxsZXIgOy0pICovCisjZW5kaWYKK30KKworY29uc3QgY2hhciAqcGFja19iYXNlbmFtZShzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwljb25zdCBjaGFyICpyZXQgPSBzdHJyY2hyKHAtPnBhY2tfbmFtZSwgJy8nKTsKKwlpZiAocmV0KQorCQlyZXQgPSByZXQgKyAxOyAvKiBza2lwIHBhc3Qgc2xhc2ggKi8KKwllbHNlCisJCXJldCA9IHAtPnBhY2tfbmFtZTsgLyogd2Ugb25seSBoYXZlIGEgYmFzZSAqLworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5IGFzIHRoaXMgbGVha3MgcC0+cGFja19mZCBvbiBlcnJvciByZXR1cm47CisgKiBjYWxsIG9wZW5fcGFja2VkX2dpdCgpIGluc3RlYWQuCisgKi8KK3N0YXRpYyBpbnQgb3Blbl9wYWNrZWRfZ2l0XzEoc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IHBhY2tfaGVhZGVyIGhkcjsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9SQVdTWl07CisJdW5zaWduZWQgY2hhciAqaWR4X2hhc2g7CisJc3NpemVfdCByZWFkX3Jlc3VsdDsKKwljb25zdCB1bnNpZ25lZCBoYXNoc3ogPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKworCWlmICghcC0+aW5kZXhfZGF0YSkgeworCQlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbTsKKwkJY29uc3QgY2hhciAqcGFja19uYW1lID0gcGFja19iYXNlbmFtZShwKTsKKworCQlmb3IgKG0gPSB0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cy0+bXVsdGlfcGFja19pbmRleDsKKwkJICAgICBtOyBtID0gbS0+bmV4dCkgeworCQkJaWYgKG1pZHhfY29udGFpbnNfcGFjayhtLCBwYWNrX25hbWUpKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFtICYmIG9wZW5fcGFja19pbmRleChwKSkKKwkJCXJldHVybiBlcnJvcigicGFja2ZpbGUgJXMgaW5kZXggdW5hdmFpbGFibGUiLCBwLT5wYWNrX25hbWUpOworCX0KKworCWlmICghcGFja19tYXhfZmRzKSB7CisJCXVuc2lnbmVkIGludCBtYXhfZmRzID0gZ2V0X21heF9mZF9saW1pdCgpOworCisJCS8qIFNhdmUgMyBmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyciwgMjIgZm9yIHdvcmsgKi8KKwkJaWYgKDI1IDwgbWF4X2ZkcykKKwkJCXBhY2tfbWF4X2ZkcyA9IG1heF9mZHMgLSAyNTsKKwkJZWxzZQorCQkJcGFja19tYXhfZmRzID0gMTsKKwl9CisKKwl3aGlsZSAocGFja19tYXhfZmRzIDw9IHBhY2tfb3Blbl9mZHMgJiYgY2xvc2Vfb25lX3BhY2soKSkKKwkJOyAvKiBub3RoaW5nICovCisKKwlwLT5wYWNrX2ZkID0gZ2l0X29wZW4ocC0+cGFja19uYW1lKTsKKwlpZiAocC0+cGFja19mZCA8IDAgfHwgZnN0YXQocC0+cGFja19mZCwgJnN0KSkKKwkJcmV0dXJuIC0xOworCXBhY2tfb3Blbl9mZHMrKzsKKworCS8qIElmIHdlIGNyZWF0ZWQgdGhlIHN0cnVjdCBiZWZvcmUgd2UgaGFkIHRoZSBwYWNrIHdlIGxhY2sgc2l6ZS4gKi8KKwlpZiAoIXAtPnBhY2tfc2l6ZSkgeworCQlpZiAoIVNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIG5vdCBhIHJlZ3VsYXIgZmlsZSIsIHAtPnBhY2tfbmFtZSk7CisJCXAtPnBhY2tfc2l6ZSA9IHN0LnN0X3NpemU7CisJfSBlbHNlIGlmIChwLT5wYWNrX3NpemUgIT0gc3Quc3Rfc2l6ZSkKKwkJcmV0dXJuIGVycm9yKCJwYWNrZmlsZSAlcyBzaXplIGNoYW5nZWQiLCBwLT5wYWNrX25hbWUpOworCisJLyogVmVyaWZ5IHdlIHJlY29nbml6ZSB0aGlzIHBhY2sgZmlsZSBmb3JtYXQuICovCisJcmVhZF9yZXN1bHQgPSByZWFkX2luX2Z1bGwocC0+cGFja19mZCwgJmhkciwgc2l6ZW9mKGhkcikpOworCWlmIChyZWFkX3Jlc3VsdCA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubygiZXJyb3IgcmVhZGluZyBmcm9tICVzIiwgcC0+cGFja19uYW1lKTsKKwlpZiAocmVhZF9yZXN1bHQgIT0gc2l6ZW9mKGhkcikpCisJCXJldHVybiBlcnJvcigiZmlsZSAlcyBpcyBmYXIgdG9vIHNob3J0IHRvIGJlIGEgcGFja2ZpbGUiLCBwLT5wYWNrX25hbWUpOworCWlmIChoZHIuaGRyX3NpZ25hdHVyZSAhPSBodG9ubChQQUNLX1NJR05BVFVSRSkpCisJCXJldHVybiBlcnJvcigiZmlsZSAlcyBpcyBub3QgYSBHSVQgcGFja2ZpbGUiLCBwLT5wYWNrX25hbWUpOworCWlmICghcGFja192ZXJzaW9uX29rKGhkci5oZHJfdmVyc2lvbikpCisJCXJldHVybiBlcnJvcigicGFja2ZpbGUgJXMgaXMgdmVyc2lvbiAlIlBSSXUzMiIgYW5kIG5vdCIKKwkJCSIgc3VwcG9ydGVkICh0cnkgdXBncmFkaW5nIEdJVCB0byBhIG5ld2VyIHZlcnNpb24pIiwKKwkJCXAtPnBhY2tfbmFtZSwgbnRvaGwoaGRyLmhkcl92ZXJzaW9uKSk7CisKKwkvKiBTa2lwIGluZGV4IGNoZWNraW5nIGlmIGluIG11bHRpLXBhY2staW5kZXggKi8KKwlpZiAoIXAtPmluZGV4X2RhdGEpCisJCXJldHVybiAwOworCisJLyogVmVyaWZ5IHRoZSBwYWNrIG1hdGNoZXMgaXRzIGluZGV4LiAqLworCWlmIChwLT5udW1fb2JqZWN0cyAhPSBudG9obChoZHIuaGRyX2VudHJpZXMpKQorCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIGNsYWltcyB0byBoYXZlICUiUFJJdTMyIiBvYmplY3RzIgorCQkJICAgICAiIHdoaWxlIGluZGV4IGluZGljYXRlcyAlIlBSSXUzMiIgb2JqZWN0cyIsCisJCQkgICAgIHAtPnBhY2tfbmFtZSwgbnRvaGwoaGRyLmhkcl9lbnRyaWVzKSwKKwkJCSAgICAgcC0+bnVtX29iamVjdHMpOworCXJlYWRfcmVzdWx0ID0gcHJlYWRfaW5fZnVsbChwLT5wYWNrX2ZkLCBoYXNoLCBoYXNoc3osCisJCQkJCXAtPnBhY2tfc2l6ZSAtIGhhc2hzeik7CisJaWYgKHJlYWRfcmVzdWx0IDwgMCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKCJlcnJvciByZWFkaW5nIGZyb20gJXMiLCBwLT5wYWNrX25hbWUpOworCWlmIChyZWFkX3Jlc3VsdCAhPSBoYXNoc3opCisJCXJldHVybiBlcnJvcigicGFja2ZpbGUgJXMgc2lnbmF0dXJlIGlzIHVuYXZhaWxhYmxlIiwgcC0+cGFja19uYW1lKTsKKwlpZHhfaGFzaCA9ICgodW5zaWduZWQgY2hhciAqKXAtPmluZGV4X2RhdGEpICsgcC0+aW5kZXhfc2l6ZSAtIGhhc2hzeiAqIDI7CisJaWYgKCFoYXNoZXEoaGFzaCwgaWR4X2hhc2gpKQorCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIGRvZXMgbm90IG1hdGNoIGluZGV4IiwgcC0+cGFja19uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcGVuX3BhY2tlZF9naXQoc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJaWYgKCFvcGVuX3BhY2tlZF9naXRfMShwKSkKKwkJcmV0dXJuIDA7CisJY2xvc2VfcGFja19mZChwKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgaW5fd2luZG93KHN0cnVjdCBwYWNrX3dpbmRvdyAqd2luLCBvZmZfdCBvZmZzZXQpCit7CisJLyogV2UgbXVzdCBwcm9taXNlIGF0IGxlYXN0IG9uZSBmdWxsIGhhc2ggYWZ0ZXIgdGhlCisJICogb2Zmc2V0IGlzIGF2YWlsYWJsZSBmcm9tIHRoaXMgd2luZG93LCBvdGhlcndpc2UgdGhlIG9mZnNldAorCSAqIGlzIG5vdCBhY3R1YWxseSBpbiB0aGlzIHdpbmRvdyBhbmQgYSBkaWZmZXJlbnQgd2luZG93ICh3aGljaAorCSAqIGhhcyB0aGF0IG9uZSBoYXNoIGV4Y2VzcykgbXVzdCBiZSB1c2VkLiAgVGhpcyBpcyB0byBzdXBwb3J0CisJICogdGhlIG9iamVjdCBoZWFkZXIgYW5kIGRlbHRhIGJhc2UgcGFyc2luZyByb3V0aW5lcyBiZWxvdy4KKwkgKi8KKwlvZmZfdCB3aW5fb2ZmID0gd2luLT5vZmZzZXQ7CisJcmV0dXJuIHdpbl9vZmYgPD0gb2Zmc2V0CisJCSYmIChvZmZzZXQgKyB0aGVfaGFzaF9hbGdvLT5yYXdzeikgPD0gKHdpbl9vZmYgKyB3aW4tPmxlbik7Cit9CisKK3Vuc2lnbmVkIGNoYXIgKnVzZV9wYWNrKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQlzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnNvciwKKwkJb2ZmX3Qgb2Zmc2V0LAorCQl1bnNpZ25lZCBsb25nICpsZWZ0KQoreworCXN0cnVjdCBwYWNrX3dpbmRvdyAqd2luID0gKndfY3Vyc29yOworCisJLyogU2luY2UgcGFja2ZpbGVzIGVuZCBpbiBhIGhhc2ggb2YgdGhlaXIgY29udGVudCBhbmQgaXQncworCSAqIHBvaW50bGVzcyB0byBhc2sgZm9yIGFuIG9mZnNldCBpbnRvIHRoZSBtaWRkbGUgb2YgdGhhdAorCSAqIGhhc2gsIGFuZCB0aGUgaW5fd2luZG93IGZ1bmN0aW9uIGFib3ZlIHdvdWxkbid0IG1hdGNoCisJICogZG9uJ3QgYWxsb3cgYW4gb2Zmc2V0IHRvbyBjbG9zZSB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCSAqLworCWlmICghcC0+cGFja19zaXplICYmIHAtPnBhY2tfZmQgPT0gLTEgJiYgb3Blbl9wYWNrZWRfZ2l0KHApKQorCQlkaWUoInBhY2tmaWxlICVzIGNhbm5vdCBiZSBhY2Nlc3NlZCIsIHAtPnBhY2tfbmFtZSk7CisJaWYgKG9mZnNldCA+IChwLT5wYWNrX3NpemUgLSB0aGVfaGFzaF9hbGdvLT5yYXdzeikpCisJCWRpZSgib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFja2ZpbGUgKHRydW5jYXRlZCBwYWNrPykiKTsKKwlpZiAob2Zmc2V0IDwgMCkKKwkJZGllKF8oIm9mZnNldCBiZWZvcmUgZW5kIG9mIHBhY2tmaWxlIChicm9rZW4gLmlkeD8pIikpOworCisJaWYgKCF3aW4gfHwgIWluX3dpbmRvdyh3aW4sIG9mZnNldCkpIHsKKwkJaWYgKHdpbikKKwkJCXdpbi0+aW51c2VfY250LS07CisJCWZvciAod2luID0gcC0+d2luZG93czsgd2luOyB3aW4gPSB3aW4tPm5leHQpIHsKKwkJCWlmIChpbl93aW5kb3cod2luLCBvZmZzZXQpKQorCQkJCWJyZWFrOworCQl9CisJCWlmICghd2luKSB7CisJCQlzaXplX3Qgd2luZG93X2FsaWduID0gcGFja2VkX2dpdF93aW5kb3dfc2l6ZSAvIDI7CisJCQlvZmZfdCBsZW47CisKKwkJCWlmIChwLT5wYWNrX2ZkID09IC0xICYmIG9wZW5fcGFja2VkX2dpdChwKSkKKwkJCQlkaWUoInBhY2tmaWxlICVzIGNhbm5vdCBiZSBhY2Nlc3NlZCIsIHAtPnBhY2tfbmFtZSk7CisKKwkJCXdpbiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCp3aW4pKTsKKwkJCXdpbi0+b2Zmc2V0ID0gKG9mZnNldCAvIHdpbmRvd19hbGlnbikgKiB3aW5kb3dfYWxpZ247CisJCQlsZW4gPSBwLT5wYWNrX3NpemUgLSB3aW4tPm9mZnNldDsKKwkJCWlmIChsZW4gPiBwYWNrZWRfZ2l0X3dpbmRvd19zaXplKQorCQkJCWxlbiA9IHBhY2tlZF9naXRfd2luZG93X3NpemU7CisJCQl3aW4tPmxlbiA9IChzaXplX3QpbGVuOworCQkJcGFja19tYXBwZWQgKz0gd2luLT5sZW47CisJCQl3aGlsZSAocGFja2VkX2dpdF9saW1pdCA8IHBhY2tfbWFwcGVkCisJCQkJJiYgdW51c2Vfb25lX3dpbmRvdyhwKSkKKwkJCQk7IC8qIG5vdGhpbmcgKi8KKwkJCXdpbi0+YmFzZSA9IHhtbWFwX2dlbnRseShOVUxMLCB3aW4tPmxlbiwKKwkJCQlQUk9UX1JFQUQsIE1BUF9QUklWQVRFLAorCQkJCXAtPnBhY2tfZmQsIHdpbi0+b2Zmc2V0KTsKKwkJCWlmICh3aW4tPmJhc2UgPT0gTUFQX0ZBSUxFRCkKKwkJCQlkaWVfZXJybm8oInBhY2tmaWxlICVzIGNhbm5vdCBiZSBtYXBwZWQiLAorCQkJCQkgIHAtPnBhY2tfbmFtZSk7CisJCQlpZiAoIXdpbi0+b2Zmc2V0ICYmIHdpbi0+bGVuID09IHAtPnBhY2tfc2l6ZQorCQkJCSYmICFwLT5kb19ub3RfY2xvc2UpCisJCQkJY2xvc2VfcGFja19mZChwKTsKKwkJCXBhY2tfbW1hcF9jYWxscysrOworCQkJcGFja19vcGVuX3dpbmRvd3MrKzsKKwkJCWlmIChwYWNrX21hcHBlZCA+IHBlYWtfcGFja19tYXBwZWQpCisJCQkJcGVha19wYWNrX21hcHBlZCA9IHBhY2tfbWFwcGVkOworCQkJaWYgKHBhY2tfb3Blbl93aW5kb3dzID4gcGVha19wYWNrX29wZW5fd2luZG93cykKKwkJCQlwZWFrX3BhY2tfb3Blbl93aW5kb3dzID0gcGFja19vcGVuX3dpbmRvd3M7CisJCQl3aW4tPm5leHQgPSBwLT53aW5kb3dzOworCQkJcC0+d2luZG93cyA9IHdpbjsKKwkJfQorCX0KKwlpZiAod2luICE9ICp3X2N1cnNvcikgeworCQl3aW4tPmxhc3RfdXNlZCA9IHBhY2tfdXNlZF9jdHIrKzsKKwkJd2luLT5pbnVzZV9jbnQrKzsKKwkJKndfY3Vyc29yID0gd2luOworCX0KKwlvZmZzZXQgLT0gd2luLT5vZmZzZXQ7CisJaWYgKGxlZnQpCisJCSpsZWZ0ID0gd2luLT5sZW4gLSB4c2l6ZV90KG9mZnNldCk7CisJcmV0dXJuIHdpbi0+YmFzZSArIG9mZnNldDsKK30KKwordm9pZCB1bnVzZV9wYWNrKHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3Vyc29yKQoreworCXN0cnVjdCBwYWNrX3dpbmRvdyAqdyA9ICp3X2N1cnNvcjsKKwlpZiAodykgeworCQl3LT5pbnVzZV9jbnQtLTsKKwkJKndfY3Vyc29yID0gTlVMTDsKKwl9Cit9CisKK3N0cnVjdCBwYWNrZWRfZ2l0ICphZGRfcGFja2VkX2dpdChjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9sZW4sIGludCBsb2NhbCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzaXplX3QgYWxsb2M7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBhIGNvcnJlc3BvbmRpbmcgLnBhY2sgZmlsZSBleGlzdHMgYW5kIHRoYXQKKwkgKiB0aGUgaW5kZXggbG9va3Mgc2FuZS4KKwkgKi8KKwlpZiAoIXN0cmlwX3N1ZmZpeF9tZW0ocGF0aCwgJnBhdGhfbGVuLCAiLmlkeCIpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogIi5wcm9taXNvciIgaXMgbG9uZyBlbm91Z2ggdG8gaG9sZCBhbnkgc3VmZml4IHdlJ3JlIGFkZGluZyAoYW5kCisJICogdGhlIHVzZSB4c25wcmludGYgZG91YmxlLWNoZWNrcyB0aGF0KQorCSAqLworCWFsbG9jID0gc3RfYWRkMyhwYXRoX2xlbiwgc3RybGVuKCIucHJvbWlzb3IiKSwgMSk7CisJcCA9IGFsbG9jX3BhY2tlZF9naXQoYWxsb2MpOworCW1lbWNweShwLT5wYWNrX25hbWUsIHBhdGgsIHBhdGhfbGVuKTsKKworCXhzbnByaW50ZihwLT5wYWNrX25hbWUgKyBwYXRoX2xlbiwgYWxsb2MgLSBwYXRoX2xlbiwgIi5rZWVwIik7CisJaWYgKCFhY2Nlc3MocC0+cGFja19uYW1lLCBGX09LKSkKKwkJcC0+cGFja19rZWVwID0gMTsKKworCXhzbnByaW50ZihwLT5wYWNrX25hbWUgKyBwYXRoX2xlbiwgYWxsb2MgLSBwYXRoX2xlbiwgIi5wcm9taXNvciIpOworCWlmICghYWNjZXNzKHAtPnBhY2tfbmFtZSwgRl9PSykpCisJCXAtPnBhY2tfcHJvbWlzb3IgPSAxOworCisJeHNucHJpbnRmKHAtPnBhY2tfbmFtZSArIHBhdGhfbGVuLCBhbGxvYyAtIHBhdGhfbGVuLCAiLnBhY2siKTsKKwlpZiAoc3RhdChwLT5wYWNrX25hbWUsICZzdCkgfHwgIVNfSVNSRUcoc3Quc3RfbW9kZSkpIHsKKwkJZnJlZShwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogb2ssIGl0IGxvb2tzIHNhbmUgYXMgZmFyIGFzIHdlIGNhbiBjaGVjayB3aXRob3V0CisJICogYWN0dWFsbHkgbWFwcGluZyB0aGUgcGFjayBmaWxlLgorCSAqLworCXAtPnBhY2tfc2l6ZSA9IHN0LnN0X3NpemU7CisJcC0+cGFja19sb2NhbCA9IGxvY2FsOworCXAtPm10aW1lID0gc3Quc3RfbXRpbWU7CisJaWYgKHBhdGhfbGVuIDwgdGhlX2hhc2hfYWxnby0+aGV4c3ogfHwKKwkgICAgZ2V0X3NoYTFfaGV4KHBhdGggKyBwYXRoX2xlbiAtIHRoZV9oYXNoX2FsZ28tPmhleHN6LCBwLT5oYXNoKSkKKwkJaGFzaGNscihwLT5oYXNoKTsKKwlyZXR1cm4gcDsKK30KKwordm9pZCBpbnN0YWxsX3BhY2tlZF9naXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrKQoreworCWlmIChwYWNrLT5wYWNrX2ZkICE9IC0xKQorCQlwYWNrX29wZW5fZmRzKys7CisKKwlwYWNrLT5uZXh0ID0gci0+b2JqZWN0cy0+cGFja2VkX2dpdDsKKwlyLT5vYmplY3RzLT5wYWNrZWRfZ2l0ID0gcGFjazsKKworCWhhc2htYXBfZW50cnlfaW5pdCgmcGFjay0+cGFja21hcF9lbnQsIHN0cmhhc2gocGFjay0+cGFja19uYW1lKSk7CisJaGFzaG1hcF9hZGQoJnItPm9iamVjdHMtPnBhY2tfbWFwLCAmcGFjay0+cGFja21hcF9lbnQpOworfQorCit2b2lkICgqcmVwb3J0X2dhcmJhZ2UpKHVuc2lnbmVkIHNlZW5fYml0cywgY29uc3QgY2hhciAqcGF0aCk7CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9oZWxwZXIoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJICBpbnQgc2Vlbl9iaXRzLCBpbnQgZmlyc3QsIGludCBsYXN0KQoreworCWlmIChzZWVuX2JpdHMgPT0gKFBBQ0tESVJfRklMRV9QQUNLfFBBQ0tESVJfRklMRV9JRFgpKQorCQlyZXR1cm47CisKKwlmb3IgKDsgZmlyc3QgPCBsYXN0OyBmaXJzdCsrKQorCQlyZXBvcnRfZ2FyYmFnZShzZWVuX2JpdHMsIGxpc3QtPml0ZW1zW2ZpcnN0XS5zdHJpbmcpOworfQorCitzdGF0aWMgdm9pZCByZXBvcnRfcGFja19nYXJiYWdlKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwlpbnQgaSwgYmFzZWxlbiA9IC0xLCBmaXJzdCA9IDAsIHNlZW5fYml0cyA9IDA7CisKKwlpZiAoIXJlcG9ydF9nYXJiYWdlKQorCQlyZXR1cm47CisKKwlzdHJpbmdfbGlzdF9zb3J0KGxpc3QpOworCisJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aCA9IGxpc3QtPml0ZW1zW2ldLnN0cmluZzsKKwkJaWYgKGJhc2VsZW4gIT0gLTEgJiYKKwkJICAgIHN0cm5jbXAocGF0aCwgbGlzdC0+aXRlbXNbZmlyc3RdLnN0cmluZywgYmFzZWxlbikpIHsKKwkJCXJlcG9ydF9oZWxwZXIobGlzdCwgc2Vlbl9iaXRzLCBmaXJzdCwgaSk7CisJCQliYXNlbGVuID0gLTE7CisJCQlzZWVuX2JpdHMgPSAwOworCQl9CisJCWlmIChiYXNlbGVuID09IC0xKSB7CisJCQljb25zdCBjaGFyICpkb3QgPSBzdHJyY2hyKHBhdGgsICcuJyk7CisJCQlpZiAoIWRvdCkgeworCQkJCXJlcG9ydF9nYXJiYWdlKFBBQ0tESVJfRklMRV9HQVJCQUdFLCBwYXRoKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWJhc2VsZW4gPSBkb3QgLSBwYXRoICsgMTsKKwkJCWZpcnN0ID0gaTsKKwkJfQorCQlpZiAoIXN0cmNtcChwYXRoICsgYmFzZWxlbiwgInBhY2siKSkKKwkJCXNlZW5fYml0cyB8PSAxOworCQllbHNlIGlmICghc3RyY21wKHBhdGggKyBiYXNlbGVuLCAiaWR4IikpCisJCQlzZWVuX2JpdHMgfD0gMjsKKwl9CisJcmVwb3J0X2hlbHBlcihsaXN0LCBzZWVuX2JpdHMsIGZpcnN0LCBsaXN0LT5ucik7Cit9CisKK3ZvaWQgZm9yX2VhY2hfZmlsZV9pbl9wYWNrX2Rpcihjb25zdCBjaGFyICpvYmpkaXIsCisJCQkgICAgICAgZWFjaF9maWxlX2luX3BhY2tfZGlyX2ZuIGZuLAorCQkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IGRpcm5hbWVsZW47CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZGU7CisKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBvYmpkaXIpOworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsICIvcGFjayIpOworCWRpciA9IG9wZW5kaXIocGF0aC5idWYpOworCWlmICghZGlyKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQllcnJvcl9lcnJubygidW5hYmxlIHRvIG9wZW4gb2JqZWN0IHBhY2sgZGlyZWN0b3J5OiAlcyIsCisJCQkJICAgIHBhdGguYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCQlyZXR1cm47CisJfQorCXN0cmJ1Zl9hZGRjaCgmcGF0aCwgJy8nKTsKKwlkaXJuYW1lbGVuID0gcGF0aC5sZW47CisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlpZiAoaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmJ1Zl9zZXRsZW4oJnBhdGgsIGRpcm5hbWVsZW4pOworCQlzdHJidWZfYWRkc3RyKCZwYXRoLCBkZS0+ZF9uYW1lKTsKKworCQlmbihwYXRoLmJ1ZiwgcGF0aC5sZW4sIGRlLT5kX25hbWUsIGRhdGEpOworCX0KKworCWNsb3NlZGlyKGRpcik7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworfQorCitzdHJ1Y3QgcHJlcGFyZV9wYWNrX2RhdGEgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqZ2FyYmFnZTsKKwlpbnQgbG9jYWw7CisJc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm07Cit9OworCitzdGF0aWMgdm9pZCBwcmVwYXJlX3BhY2soY29uc3QgY2hhciAqZnVsbF9uYW1lLCBzaXplX3QgZnVsbF9uYW1lX2xlbiwKKwkJCSBjb25zdCBjaGFyICpmaWxlX25hbWUsIHZvaWQgKl9kYXRhKQoreworCXN0cnVjdCBwcmVwYXJlX3BhY2tfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgcHJlcGFyZV9wYWNrX2RhdGEgKilfZGF0YTsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwlzaXplX3QgYmFzZV9sZW4gPSBmdWxsX25hbWVfbGVuOworCisJaWYgKHN0cmlwX3N1ZmZpeF9tZW0oZnVsbF9uYW1lLCAmYmFzZV9sZW4sICIuaWR4IikgJiYKKwkgICAgIShkYXRhLT5tICYmIG1pZHhfY29udGFpbnNfcGFjayhkYXRhLT5tLCBmaWxlX25hbWUpKSkgeworCQlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBoZW50OworCQljaGFyICpwYWNrX25hbWUgPSB4c3RyZm10KCIlLipzLnBhY2siLCAoaW50KWJhc2VfbGVuLCBmdWxsX25hbWUpOworCQl1bnNpZ25lZCBpbnQgaGFzaCA9IHN0cmhhc2gocGFja19uYW1lKTsKKwkJaGFzaG1hcF9lbnRyeV9pbml0KCZoZW50LCBoYXNoKTsKKworCQkvKiBEb24ndCByZW9wZW4gYSBwYWNrIHdlIGFscmVhZHkgaGF2ZS4gKi8KKwkJaWYgKCFoYXNobWFwX2dldCgmZGF0YS0+ci0+b2JqZWN0cy0+cGFja19tYXAsICZoZW50LCBwYWNrX25hbWUpKSB7CisJCQlwID0gYWRkX3BhY2tlZF9naXQoZnVsbF9uYW1lLCBmdWxsX25hbWVfbGVuLCBkYXRhLT5sb2NhbCk7CisJCQlpZiAocCkKKwkJCQlpbnN0YWxsX3BhY2tlZF9naXQoZGF0YS0+ciwgcCk7CisJCX0KKwkJZnJlZShwYWNrX25hbWUpOworCX0KKworCWlmICghcmVwb3J0X2dhcmJhZ2UpCisJCXJldHVybjsKKworCWlmICghc3RyY21wKGZpbGVfbmFtZSwgIm11bHRpLXBhY2staW5kZXgiKSkKKwkJcmV0dXJuOworCWlmIChlbmRzX3dpdGgoZmlsZV9uYW1lLCAiLmlkeCIpIHx8CisJICAgIGVuZHNfd2l0aChmaWxlX25hbWUsICIucGFjayIpIHx8CisJICAgIGVuZHNfd2l0aChmaWxlX25hbWUsICIuYml0bWFwIikgfHwKKwkgICAgZW5kc193aXRoKGZpbGVfbmFtZSwgIi5rZWVwIikgfHwKKwkgICAgZW5kc193aXRoKGZpbGVfbmFtZSwgIi5wcm9taXNvciIpKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQoZGF0YS0+Z2FyYmFnZSwgZnVsbF9uYW1lKTsKKwllbHNlCisJCXJlcG9ydF9nYXJiYWdlKFBBQ0tESVJfRklMRV9HQVJCQUdFLCBmdWxsX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3BhY2tlZF9naXRfb25lKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjaGFyICpvYmpkaXIsIGludCBsb2NhbCkKK3sKKwlzdHJ1Y3QgcHJlcGFyZV9wYWNrX2RhdGEgZGF0YTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZ2FyYmFnZSA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJZGF0YS5tID0gci0+b2JqZWN0cy0+bXVsdGlfcGFja19pbmRleDsKKworCS8qIGxvb2sgZm9yIHRoZSBtdWx0aS1wYWNrLWluZGV4IGZvciB0aGlzIG9iamVjdCBkaXJlY3RvcnkgKi8KKwl3aGlsZSAoZGF0YS5tICYmIHN0cmNtcChkYXRhLm0tPm9iamVjdF9kaXIsIG9iamRpcikpCisJCWRhdGEubSA9IGRhdGEubS0+bmV4dDsKKworCWRhdGEuciA9IHI7CisJZGF0YS5nYXJiYWdlID0gJmdhcmJhZ2U7CisJZGF0YS5sb2NhbCA9IGxvY2FsOworCisJZm9yX2VhY2hfZmlsZV9pbl9wYWNrX2RpcihvYmpkaXIsIHByZXBhcmVfcGFjaywgJmRhdGEpOworCisJcmVwb3J0X3BhY2tfZ2FyYmFnZShkYXRhLmdhcmJhZ2UpOworCXN0cmluZ19saXN0X2NsZWFyKGRhdGEuZ2FyYmFnZSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfcGFja2VkX2dpdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisvKgorICogR2l2ZSBhIGZhc3QsIHJvdWdoIGNvdW50IG9mIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgcmVwb3NpdG9yeS4gVGhpcworICogaWdub3JlcyBsb29zZSBvYmplY3RzIGNvbXBsZXRlbHkuIElmIHlvdSBoYXZlIGEgbG90IG9mIHRoZW0sIHRoZW4gZWl0aGVyCisgKiB5b3Ugc2hvdWxkIHJlcGFjayBiZWNhdXNlIHlvdXIgcGVyZm9ybWFuY2Ugd2lsbCBiZSBhd2Z1bCwgb3IgdGhleSBhcmUKKyAqIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIGFib3V0IHRvIGJlIHBydW5lZCwgaW4gd2hpY2ggY2FzZSB0aGV5J3JlIG5vdCByZWFsbHkKKyAqIGludGVyZXN0aW5nIGFzIGEgbWVhc3VyZSBvZiByZXBvIHNpemUgaW4gdGhlIGZpcnN0IHBsYWNlLgorICovCit1bnNpZ25lZCBsb25nIHJlcG9fYXBwcm94aW1hdGVfb2JqZWN0X2NvdW50KHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCWlmICghci0+b2JqZWN0cy0+YXBwcm94aW1hdGVfb2JqZWN0X2NvdW50X3ZhbGlkKSB7CisJCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptOworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCQlwcmVwYXJlX3BhY2tlZF9naXQocik7CisJCWNvdW50ID0gMDsKKwkJZm9yIChtID0gZ2V0X211bHRpX3BhY2tfaW5kZXgocik7IG07IG0gPSBtLT5uZXh0KQorCQkJY291bnQgKz0gbS0+bnVtX29iamVjdHM7CisJCWZvciAocCA9IHItPm9iamVjdHMtPnBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQlpZiAob3Blbl9wYWNrX2luZGV4KHApKQorCQkJCWNvbnRpbnVlOworCQkJY291bnQgKz0gcC0+bnVtX29iamVjdHM7CisJCX0KKwkJci0+b2JqZWN0cy0+YXBwcm94aW1hdGVfb2JqZWN0X2NvdW50ID0gY291bnQ7CisJfQorCXJldHVybiByLT5vYmplY3RzLT5hcHByb3hpbWF0ZV9vYmplY3RfY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkICpnZXRfbmV4dF9wYWNrZWRfZ2l0KGNvbnN0IHZvaWQgKnApCit7CisJcmV0dXJuICgoY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKilwKS0+bmV4dDsKK30KKworc3RhdGljIHZvaWQgc2V0X25leHRfcGFja2VkX2dpdCh2b2lkICpwLCB2b2lkICpuZXh0KQoreworCSgoc3RydWN0IHBhY2tlZF9naXQgKilwKS0+bmV4dCA9IG5leHQ7Cit9CisKK3N0YXRpYyBpbnQgc29ydF9wYWNrKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqYSA9IGFfOworCWNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICpiID0gYl87CisJaW50IHN0OworCisJLyoKKwkgKiBMb2NhbCBwYWNrcyB0ZW5kIHRvIGNvbnRhaW4gb2JqZWN0cyBzcGVjaWZpYyB0byBvdXIKKwkgKiB2YXJpYW50IG9mIHRoZSBwcm9qZWN0IHRoYW4gcmVtb3RlIG9uZXMuICBJbiBhZGRpdGlvbiwKKwkgKiByZW1vdGUgb25lcyBjb3VsZCBiZSBvbiBhIG5ldHdvcmsgbW91bnRlZCBmaWxlc3lzdGVtLgorCSAqIEZhdm9yIGxvY2FsIG9uZXMgZm9yIHRoZXNlIHJlYXNvbnMuCisJICovCisJc3QgPSBhLT5wYWNrX2xvY2FsIC0gYi0+cGFja19sb2NhbDsKKwlpZiAoc3QpCisJCXJldHVybiAtc3Q7CisKKwkvKgorCSAqIFlvdW5nZXIgcGFja3MgdGVuZCB0byBjb250YWluIG1vcmUgcmVjZW50IG9iamVjdHMsCisJICogYW5kIG1vcmUgcmVjZW50IG9iamVjdHMgdGVuZCB0byBnZXQgYWNjZXNzZWQgbW9yZQorCSAqIG9mdGVuLgorCSAqLworCWlmIChhLT5tdGltZSA8IGItPm10aW1lKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChhLT5tdGltZSA9PSBiLT5tdGltZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCByZWFycmFuZ2VfcGFja2VkX2dpdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlyLT5vYmplY3RzLT5wYWNrZWRfZ2l0ID0gbGxpc3RfbWVyZ2Vzb3J0KAorCQlyLT5vYmplY3RzLT5wYWNrZWRfZ2l0LCBnZXRfbmV4dF9wYWNrZWRfZ2l0LAorCQlzZXRfbmV4dF9wYWNrZWRfZ2l0LCBzb3J0X3BhY2spOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3BhY2tlZF9naXRfbXJ1KHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCisJSU5JVF9MSVNUX0hFQUQoJnItPm9iamVjdHMtPnBhY2tlZF9naXRfbXJ1KTsKKworCWZvciAocCA9IHItPm9iamVjdHMtPnBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KQorCQlsaXN0X2FkZF90YWlsKCZwLT5tcnUsICZyLT5vYmplY3RzLT5wYWNrZWRfZ2l0X21ydSk7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfcGFja2VkX2dpdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiOworCisJaWYgKHItPm9iamVjdHMtPnBhY2tlZF9naXRfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKworCXByZXBhcmVfYWx0X29kYihyKTsKKwlmb3IgKG9kYiA9IHItPm9iamVjdHMtPm9kYjsgb2RiOyBvZGIgPSBvZGItPm5leHQpIHsKKwkJaW50IGxvY2FsID0gKG9kYiA9PSByLT5vYmplY3RzLT5vZGIpOworCQlwcmVwYXJlX211bHRpX3BhY2tfaW5kZXhfb25lKHIsIG9kYi0+cGF0aCwgbG9jYWwpOworCQlwcmVwYXJlX3BhY2tlZF9naXRfb25lKHIsIG9kYi0+cGF0aCwgbG9jYWwpOworCX0KKwlyZWFycmFuZ2VfcGFja2VkX2dpdChyKTsKKworCXByZXBhcmVfcGFja2VkX2dpdF9tcnUocik7CisJci0+b2JqZWN0cy0+cGFja2VkX2dpdF9pbml0aWFsaXplZCA9IDE7Cit9CisKK3ZvaWQgcmVwcmVwYXJlX3BhY2tlZF9naXQoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYjsKKworCW9ial9yZWFkX2xvY2soKTsKKwlmb3IgKG9kYiA9IHItPm9iamVjdHMtPm9kYjsgb2RiOyBvZGIgPSBvZGItPm5leHQpCisJCW9kYl9jbGVhcl9sb29zZV9jYWNoZShvZGIpOworCisJci0+b2JqZWN0cy0+YXBwcm94aW1hdGVfb2JqZWN0X2NvdW50X3ZhbGlkID0gMDsKKwlyLT5vYmplY3RzLT5wYWNrZWRfZ2l0X2luaXRpYWxpemVkID0gMDsKKwlwcmVwYXJlX3BhY2tlZF9naXQocik7CisJb2JqX3JlYWRfdW5sb2NrKCk7Cit9CisKK3N0cnVjdCBwYWNrZWRfZ2l0ICpnZXRfcGFja2VkX2dpdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlwcmVwYXJlX3BhY2tlZF9naXQocik7CisJcmV0dXJuIHItPm9iamVjdHMtPnBhY2tlZF9naXQ7Cit9CisKK3N0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICpnZXRfbXVsdGlfcGFja19pbmRleChzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlwcmVwYXJlX3BhY2tlZF9naXQocik7CisJcmV0dXJuIHItPm9iamVjdHMtPm11bHRpX3BhY2tfaW5kZXg7Cit9CisKK3N0cnVjdCBwYWNrZWRfZ2l0ICpnZXRfYWxsX3BhY2tzKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptOworCisJcHJlcGFyZV9wYWNrZWRfZ2l0KHIpOworCWZvciAobSA9IHItPm9iamVjdHMtPm11bHRpX3BhY2tfaW5kZXg7IG07IG0gPSBtLT5uZXh0KSB7CisJCXVpbnQzMl90IGk7CisJCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fcGFja3M7IGkrKykKKwkJCXByZXBhcmVfbWlkeF9wYWNrKHIsIG0sIGkpOworCX0KKworCXJldHVybiByLT5vYmplY3RzLT5wYWNrZWRfZ2l0OworfQorCitzdHJ1Y3QgbGlzdF9oZWFkICpnZXRfcGFja2VkX2dpdF9tcnUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJcHJlcGFyZV9wYWNrZWRfZ2l0KHIpOworCXJldHVybiAmci0+b2JqZWN0cy0+cGFja2VkX2dpdF9tcnU7Cit9CisKK3Vuc2lnbmVkIGxvbmcgdW5wYWNrX29iamVjdF9oZWFkZXJfYnVmZmVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJdW5zaWduZWQgbG9uZyBsZW4sIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxvbmcgKnNpemVwKQoreworCXVuc2lnbmVkIHNoaWZ0OworCXVuc2lnbmVkIGxvbmcgc2l6ZSwgYzsKKwl1bnNpZ25lZCBsb25nIHVzZWQgPSAwOworCisJYyA9IGJ1Zlt1c2VkKytdOworCSp0eXBlID0gKGMgPj4gNCkgJiA3OworCXNpemUgPSBjICYgMTU7CisJc2hpZnQgPSA0OworCXdoaWxlIChjICYgMHg4MCkgeworCQlpZiAobGVuIDw9IHVzZWQgfHwgYml0c2l6ZW9mKGxvbmcpIDw9IHNoaWZ0KSB7CisJCQllcnJvcigiYmFkIG9iamVjdCBoZWFkZXIiKTsKKwkJCXNpemUgPSB1c2VkID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWMgPSBidWZbdXNlZCsrXTsKKwkJc2l6ZSArPSAoYyAmIDB4N2YpIDw8IHNoaWZ0OworCQlzaGlmdCArPSA3OworCX0KKwkqc2l6ZXAgPSBzaXplOworCXJldHVybiB1c2VkOworfQorCit1bnNpZ25lZCBsb25nIGdldF9zaXplX2Zyb21fZGVsdGEoc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkJICBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCQkJICBvZmZfdCBjdXJwb3MpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YTsKKwl1bnNpZ25lZCBjaGFyIGRlbHRhX2hlYWRbMjBdLCAqaW47CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCWludCBzdDsKKworCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7CisJc3RyZWFtLm5leHRfb3V0ID0gZGVsdGFfaGVhZDsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGRlbHRhX2hlYWQpOworCisJZ2l0X2luZmxhdGVfaW5pdCgmc3RyZWFtKTsKKwlkbyB7CisJCWluID0gdXNlX3BhY2socCwgd19jdXJzLCBjdXJwb3MsICZzdHJlYW0uYXZhaWxfaW4pOworCQlzdHJlYW0ubmV4dF9pbiA9IGluOworCQkvKgorCQkgKiBOb3RlOiB0aGUgd2luZG93IHNlY3Rpb24gcmV0dXJuZWQgYnkgdXNlX3BhY2soKSBtdXN0IGJlCisJCSAqIGF2YWlsYWJsZSB0aHJvdWdob3V0IGdpdF9pbmZsYXRlKCkncyB1bmxvY2tlZCBleGVjdXRpb24uIFRvCisJCSAqIGVuc3VyZSBubyBvdGhlciB0aHJlYWQgd2lsbCBtb2RpZnkgdGhlIHdpbmRvdyBpbiB0aGUKKwkJICogbWVhbnRpbWUsIHdlIHJlbHkgb24gdGhlIHBhY2tlZF93aW5kb3cuaW51c2VfY250LiBUaGlzCisJCSAqIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYmVmb3JlIHdpbmRvdyByZWFkaW5nIGFuZCBjaGVja2VkCisJCSAqIGJlZm9yZSB3aW5kb3cgZGlzcG9zYWwuCisJCSAqCisJCSAqIE90aGVyIHdvcnJ5aW5nIHNlY3Rpb25zIGNvdWxkIGJlIHRoZSBjYWxsIHRvIGNsb3NlX3BhY2tfZmQoKSwKKwkJICogd2hpY2ggY2FuIGNsb3NlIHBhY2tzIGV2ZW4gd2l0aCBpbi11c2Ugd2luZG93cywgYW5kIHRvCisJCSAqIHJlcHJlcGFyZV9wYWNrZWRfZ2l0KCkuIFJlZ2FyZGluZyB0aGUgZm9ybWVyLCBtbWFwIGRvYyBzYXlzOgorCQkgKiAiY2xvc2luZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGRvZXMgbm90IHVubWFwIHRoZSByZWdpb24iLiBBbmQKKwkJICogZm9yIHRoZSBsYXR0ZXIsIGl0IHdvbid0IHJlLW9wZW4gYWxyZWFkeSBhdmFpbGFibGUgcGFja3MuCisJCSAqLworCQlvYmpfcmVhZF91bmxvY2soKTsKKwkJc3QgPSBnaXRfaW5mbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7CisJCW9ial9yZWFkX2xvY2soKTsKKwkJY3VycG9zICs9IHN0cmVhbS5uZXh0X2luIC0gaW47CisJfSB3aGlsZSAoKHN0ID09IFpfT0sgfHwgc3QgPT0gWl9CVUZfRVJST1IpICYmCisJCSBzdHJlYW0udG90YWxfb3V0IDwgc2l6ZW9mKGRlbHRhX2hlYWQpKTsKKwlnaXRfaW5mbGF0ZV9lbmQoJnN0cmVhbSk7CisJaWYgKChzdCAhPSBaX1NUUkVBTV9FTkQpICYmIHN0cmVhbS50b3RhbF9vdXQgIT0gc2l6ZW9mKGRlbHRhX2hlYWQpKSB7CisJCWVycm9yKCJkZWx0YSBkYXRhIHVucGFjay1pbml0aWFsIGZhaWxlZCIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBFeGFtaW5lIHRoZSBpbml0aWFsIHBhcnQgb2YgdGhlIGRlbHRhIHRvIGZpZ3VyZSBvdXQKKwkgKiB0aGUgcmVzdWx0IHNpemUuCisJICovCisJZGF0YSA9IGRlbHRhX2hlYWQ7CisKKwkvKiBpZ25vcmUgYmFzZSBzaXplICovCisJZ2V0X2RlbHRhX2hkcl9zaXplKCZkYXRhLCBkZWx0YV9oZWFkK3NpemVvZihkZWx0YV9oZWFkKSk7CisKKwkvKiBSZWFkIHRoZSByZXN1bHQgc2l6ZSAqLworCXJldHVybiBnZXRfZGVsdGFfaGRyX3NpemUoJmRhdGEsIGRlbHRhX2hlYWQrc2l6ZW9mKGRlbHRhX2hlYWQpKTsKK30KKworaW50IHVucGFja19vYmplY3RfaGVhZGVyKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJIHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3VycywKKwkJCSBvZmZfdCAqY3VycG9zLAorCQkJIHVuc2lnbmVkIGxvbmcgKnNpemVwKQoreworCXVuc2lnbmVkIGNoYXIgKmJhc2U7CisJdW5zaWduZWQgbG9uZyBsZWZ0OworCXVuc2lnbmVkIGxvbmcgdXNlZDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwkvKiB1c2VfcGFjaygpIGFzc3VyZXMgdXMgd2UgaGF2ZSBbYmFzZSwgYmFzZSArIDIwKSBhdmFpbGFibGUKKwkgKiBhcyBhIHJhbmdlIHRoYXQgd2UgY2FuIGxvb2sgYXQuICAoSXRzIGFjdHVhbGx5IHRoZSBoYXNoCisJICogc2l6ZSB0aGF0IGlzIGFzc3VyZWQuKSAgV2l0aCBvdXIgb2JqZWN0IGhlYWRlciBlbmNvZGluZworCSAqIHRoZSBtYXhpbXVtIGRlZmxhdGVkIG9iamVjdCBzaXplIGlzIDJeMTM3LCB3aGljaCBpcyBqdXN0CisJICogaW5zYW5lLCBzbyB3ZSBrbm93IHdvbid0IGV4Y2VlZCB3aGF0IHdlIGhhdmUgYmVlbiBnaXZlbi4KKwkgKi8KKwliYXNlID0gdXNlX3BhY2socCwgd19jdXJzLCAqY3VycG9zLCAmbGVmdCk7CisJdXNlZCA9IHVucGFja19vYmplY3RfaGVhZGVyX2J1ZmZlcihiYXNlLCBsZWZ0LCAmdHlwZSwgc2l6ZXApOworCWlmICghdXNlZCkgeworCQl0eXBlID0gT0JKX0JBRDsKKwl9IGVsc2UKKwkJKmN1cnBvcyArPSB1c2VkOworCisJcmV0dXJuIHR5cGU7Cit9CisKK3ZvaWQgbWFya19iYWRfcGFja2VkX29iamVjdChzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwl1bnNpZ25lZCBpOworCWNvbnN0IHVuc2lnbmVkIGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCWZvciAoaSA9IDA7IGkgPCBwLT5udW1fYmFkX29iamVjdHM7IGkrKykKKwkJaWYgKGhhc2hlcShzaGExLCBwLT5iYWRfb2JqZWN0X3NoYTEgKyBoYXNoc3ogKiBpKSkKKwkJCXJldHVybjsKKwlwLT5iYWRfb2JqZWN0X3NoYTEgPSB4cmVhbGxvYyhwLT5iYWRfb2JqZWN0X3NoYTEsCisJCQkJICAgICAgc3RfbXVsdChHSVRfTUFYX1JBV1NaLAorCQkJCQkgICAgICBzdF9hZGQocC0+bnVtX2JhZF9vYmplY3RzLCAxKSkpOworCWhhc2hjcHkocC0+YmFkX29iamVjdF9zaGExICsgaGFzaHN6ICogcC0+bnVtX2JhZF9vYmplY3RzLCBzaGExKTsKKwlwLT5udW1fYmFkX29iamVjdHMrKzsKK30KKworY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKmhhc19wYWNrZWRfYW5kX2JhZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJdW5zaWduZWQgaTsKKworCWZvciAocCA9IHItPm9iamVjdHMtPnBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KQorCQlmb3IgKGkgPSAwOyBpIDwgcC0+bnVtX2JhZF9vYmplY3RzOyBpKyspCisJCQlpZiAoaGFzaGVxKHNoYTEsCisJCQkJICAgcC0+YmFkX29iamVjdF9zaGExICsgdGhlX2hhc2hfYWxnby0+cmF3c3ogKiBpKSkKKwkJCQlyZXR1cm4gcDsKKwlyZXR1cm4gTlVMTDsKK30KKworb2ZmX3QgZ2V0X2RlbHRhX2Jhc2Uoc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCSAgICAgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQkgICAgIG9mZl90ICpjdXJwb3MsCisJCSAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkgICAgIG9mZl90IGRlbHRhX29ial9vZmZzZXQpCit7CisJdW5zaWduZWQgY2hhciAqYmFzZV9pbmZvID0gdXNlX3BhY2socCwgd19jdXJzLCAqY3VycG9zLCBOVUxMKTsKKwlvZmZfdCBiYXNlX29mZnNldDsKKworCS8qIHVzZV9wYWNrKCkgYXNzdXJlZCB1cyB3ZSBoYXZlIFtiYXNlX2luZm8sIGJhc2VfaW5mbyArIDIwKQorCSAqIGFzIGEgcmFuZ2UgdGhhdCB3ZSBjYW4gbG9vayBhdCB3aXRob3V0IHdhbGtpbmcgb2ZmIHRoZQorCSAqIGVuZCBvZiB0aGUgbWFwcGVkIHdpbmRvdy4gIEl0cyBhY3R1YWxseSB0aGUgaGFzaCBzaXplCisJICogdGhhdCBpcyBhc3N1cmVkLiAgQW4gT0ZTX0RFTFRBIGxvbmdlciB0aGFuIHRoZSBoYXNoIHNpemUKKwkgKiBpcyBzdHVwaWQsIGFzIHRoZW4gYSBSRUZfREVMVEEgd291bGQgYmUgc21hbGxlciB0byBzdG9yZS4KKwkgKi8KKwlpZiAodHlwZSA9PSBPQkpfT0ZTX0RFTFRBKSB7CisJCXVuc2lnbmVkIHVzZWQgPSAwOworCQl1bnNpZ25lZCBjaGFyIGMgPSBiYXNlX2luZm9bdXNlZCsrXTsKKwkJYmFzZV9vZmZzZXQgPSBjICYgMTI3OworCQl3aGlsZSAoYyAmIDEyOCkgeworCQkJYmFzZV9vZmZzZXQgKz0gMTsKKwkJCWlmICghYmFzZV9vZmZzZXQgfHwgTVNCKGJhc2Vfb2Zmc2V0LCA3KSkKKwkJCQlyZXR1cm4gMDsgIC8qIG92ZXJmbG93ICovCisJCQljID0gYmFzZV9pbmZvW3VzZWQrK107CisJCQliYXNlX29mZnNldCA9IChiYXNlX29mZnNldCA8PCA3KSArIChjICYgMTI3KTsKKwkJfQorCQliYXNlX29mZnNldCA9IGRlbHRhX29ial9vZmZzZXQgLSBiYXNlX29mZnNldDsKKwkJaWYgKGJhc2Vfb2Zmc2V0IDw9IDAgfHwgYmFzZV9vZmZzZXQgPj0gZGVsdGFfb2JqX29mZnNldCkKKwkJCXJldHVybiAwOyAgLyogb3V0IG9mIGJvdW5kICovCisJCSpjdXJwb3MgKz0gdXNlZDsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gT0JKX1JFRl9ERUxUQSkgeworCQkvKiBUaGUgYmFzZSBlbnRyeSBfbXVzdF8gYmUgaW4gdGhlIHNhbWUgcGFjayAqLworCQliYXNlX29mZnNldCA9IGZpbmRfcGFja19lbnRyeV9vbmUoYmFzZV9pbmZvLCBwKTsKKwkJKmN1cnBvcyArPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKwl9IGVsc2UKKwkJZGllKCJJIGFtIHRvdGFsbHkgc2NyZXdlZCIpOworCXJldHVybiBiYXNlX29mZnNldDsKK30KKworLyoKKyAqIExpa2UgZ2V0X2RlbHRhX2Jhc2UgYWJvdmUsIGJ1dCB3ZSByZXR1cm4gdGhlIHNoYTEgaW5zdGVhZCBvZiB0aGUgcGFjaworICogb2Zmc2V0LiBUaGlzIG1lYW5zIGl0IGlzIGNoZWFwZXIgZm9yIFJFRiBkZWx0YXMgKHdlIGRvIG5vdCBoYXZlIHRvIGRvCisgKiB0aGUgZmluYWwgb2JqZWN0IGxvb2t1cCksIGJ1dCBtb3JlIGV4cGVuc2l2ZSBmb3IgT0ZTIGRlbHRhcyAod2UKKyAqIGhhdmUgdG8gbG9hZCB0aGUgcmV2aWR4IHRvIGNvbnZlcnQgdGhlIG9mZnNldCBiYWNrIGludG8gYSBzaGExKS4KKyAqLworc3RhdGljIGludCBnZXRfZGVsdGFfYmFzZV9vaWQoc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkgICAgICBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCQkgICAgICBvZmZfdCBjdXJwb3MsCisJCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkgICAgICBvZmZfdCBkZWx0YV9vYmpfb2Zmc2V0KQoreworCWlmICh0eXBlID09IE9CSl9SRUZfREVMVEEpIHsKKwkJdW5zaWduZWQgY2hhciAqYmFzZSA9IHVzZV9wYWNrKHAsIHdfY3VycywgY3VycG9zLCBOVUxMKTsKKwkJb2lkcmVhZChvaWQsIGJhc2UpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gT0JKX09GU19ERUxUQSkgeworCQlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmlkeDsKKwkJb2ZmX3QgYmFzZV9vZmZzZXQgPSBnZXRfZGVsdGFfYmFzZShwLCB3X2N1cnMsICZjdXJwb3MsCisJCQkJCQkgICB0eXBlLCBkZWx0YV9vYmpfb2Zmc2V0KTsKKworCQlpZiAoIWJhc2Vfb2Zmc2V0KQorCQkJcmV0dXJuIC0xOworCisJCXJldmlkeCA9IGZpbmRfcGFja19yZXZpbmRleChwLCBiYXNlX29mZnNldCk7CisJCWlmICghcmV2aWR4KQorCQkJcmV0dXJuIC0xOworCisJCXJldHVybiBudGhfcGFja2VkX29iamVjdF9pZChvaWQsIHAsIHJldmlkeC0+bnIpOworCX0gZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcmV0cnlfYmFkX3BhY2tlZF9vZmZzZXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkJICAgb2ZmX3Qgb2JqX29mZnNldCkKK3sKKwlpbnQgdHlwZTsKKwlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmlkeDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlyZXZpZHggPSBmaW5kX3BhY2tfcmV2aW5kZXgocCwgb2JqX29mZnNldCk7CisJaWYgKCFyZXZpZHgpCisJCXJldHVybiBPQkpfQkFEOworCW50aF9wYWNrZWRfb2JqZWN0X2lkKCZvaWQsIHAsIHJldmlkeC0+bnIpOworCW1hcmtfYmFkX3BhY2tlZF9vYmplY3QocCwgb2lkLmhhc2gpOworCXR5cGUgPSBvaWRfb2JqZWN0X2luZm8ociwgJm9pZCwgTlVMTCk7CisJaWYgKHR5cGUgPD0gT0JKX05PTkUpCisJCXJldHVybiBPQkpfQkFEOworCXJldHVybiB0eXBlOworfQorCisjZGVmaW5lIFBPSV9TVEFDS19QUkVBTExPQyA2NAorCitzdGF0aWMgZW51bSBvYmplY3RfdHlwZSBwYWNrZWRfdG9fb2JqZWN0X3R5cGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICAgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJCQkgICAgICBvZmZfdCBvYmpfb2Zmc2V0LAorCQkJCQkgICAgICBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkJCSAgICAgIHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3VycywKKwkJCQkJICAgICAgb2ZmX3QgY3VycG9zKQoreworCW9mZl90IHNtYWxsX3BvaV9zdGFja1tQT0lfU1RBQ0tfUFJFQUxMT0NdOworCW9mZl90ICpwb2lfc3RhY2sgPSBzbWFsbF9wb2lfc3RhY2s7CisJaW50IHBvaV9zdGFja19uciA9IDAsIHBvaV9zdGFja19hbGxvYyA9IFBPSV9TVEFDS19QUkVBTExPQzsKKworCXdoaWxlICh0eXBlID09IE9CSl9PRlNfREVMVEEgfHwgdHlwZSA9PSBPQkpfUkVGX0RFTFRBKSB7CisJCW9mZl90IGJhc2Vfb2Zmc2V0OworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCS8qIFB1c2ggdGhlIG9iamVjdCB3ZSdyZSBnb2luZyB0byBsZWF2ZSBiZWhpbmQgKi8KKwkJaWYgKHBvaV9zdGFja19uciA+PSBwb2lfc3RhY2tfYWxsb2MgJiYgcG9pX3N0YWNrID09IHNtYWxsX3BvaV9zdGFjaykgeworCQkJcG9pX3N0YWNrX2FsbG9jID0gYWxsb2NfbnIocG9pX3N0YWNrX25yKTsKKwkJCUFMTE9DX0FSUkFZKHBvaV9zdGFjaywgcG9pX3N0YWNrX2FsbG9jKTsKKwkJCUNPUFlfQVJSQVkocG9pX3N0YWNrLCBzbWFsbF9wb2lfc3RhY2ssIHBvaV9zdGFja19ucik7CisJCX0gZWxzZSB7CisJCQlBTExPQ19HUk9XKHBvaV9zdGFjaywgcG9pX3N0YWNrX25yKzEsIHBvaV9zdGFja19hbGxvYyk7CisJCX0KKwkJcG9pX3N0YWNrW3BvaV9zdGFja19ucisrXSA9IG9ial9vZmZzZXQ7CisJCS8qIElmIHBhcnNpbmcgdGhlIGJhc2Ugb2Zmc2V0IGZhaWxzLCBqdXN0IHVud2luZCAqLworCQliYXNlX29mZnNldCA9IGdldF9kZWx0YV9iYXNlKHAsIHdfY3VycywgJmN1cnBvcywgdHlwZSwgb2JqX29mZnNldCk7CisJCWlmICghYmFzZV9vZmZzZXQpCisJCQlnb3RvIHVud2luZDsKKwkJY3VycG9zID0gb2JqX29mZnNldCA9IGJhc2Vfb2Zmc2V0OworCQl0eXBlID0gdW5wYWNrX29iamVjdF9oZWFkZXIocCwgd19jdXJzLCAmY3VycG9zLCAmc2l6ZSk7CisJCWlmICh0eXBlIDw9IE9CSl9OT05FKSB7CisJCQkvKiBJZiBnZXR0aW5nIHRoZSBiYXNlIGl0c2VsZiBmYWlscywgd2UgZmlyc3QKKwkJCSAqIHJldHJ5IHRoZSBiYXNlLCBvdGhlcndpc2UgdW53aW5kICovCisJCQl0eXBlID0gcmV0cnlfYmFkX3BhY2tlZF9vZmZzZXQociwgcCwgYmFzZV9vZmZzZXQpOworCQkJaWYgKHR5cGUgPiBPQkpfTk9ORSkKKwkJCQlnb3RvIG91dDsKKwkJCWdvdG8gdW53aW5kOworCQl9CisJfQorCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBPQkpfQkFEOgorCWNhc2UgT0JKX0NPTU1JVDoKKwljYXNlIE9CSl9UUkVFOgorCWNhc2UgT0JKX0JMT0I6CisJY2FzZSBPQkpfVEFHOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnJvcigidW5rbm93biBvYmplY3QgdHlwZSAlaSBhdCBvZmZzZXQgJSJQUkl1TUFYIiBpbiAlcyIsCisJCSAgICAgIHR5cGUsICh1aW50bWF4X3Qpb2JqX29mZnNldCwgcC0+cGFja19uYW1lKTsKKwkJdHlwZSA9IE9CSl9CQUQ7CisJfQorCitvdXQ6CisJaWYgKHBvaV9zdGFjayAhPSBzbWFsbF9wb2lfc3RhY2spCisJCWZyZWUocG9pX3N0YWNrKTsKKwlyZXR1cm4gdHlwZTsKKwordW53aW5kOgorCXdoaWxlIChwb2lfc3RhY2tfbnIpIHsKKwkJb2JqX29mZnNldCA9IHBvaV9zdGFja1stLXBvaV9zdGFja19ucl07CisJCXR5cGUgPSByZXRyeV9iYWRfcGFja2VkX29mZnNldChyLCBwLCBvYmpfb2Zmc2V0KTsKKwkJaWYgKHR5cGUgPiBPQkpfTk9ORSkKKwkJCWdvdG8gb3V0OworCX0KKwl0eXBlID0gT0JKX0JBRDsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIHN0cnVjdCBoYXNobWFwIGRlbHRhX2Jhc2VfY2FjaGU7CitzdGF0aWMgc2l6ZV90IGRlbHRhX2Jhc2VfY2FjaGVkOworCitzdGF0aWMgTElTVF9IRUFEKGRlbHRhX2Jhc2VfY2FjaGVfbHJ1KTsKKworc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfa2V5IHsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwlvZmZfdCBiYXNlX29mZnNldDsKK307CisKK3N0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfa2V5IGtleTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxydTsKKwl2b2lkICpkYXRhOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tfZW50cnlfaGFzaChzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3QgYmFzZV9vZmZzZXQpCit7CisJdW5zaWduZWQgaW50IGhhc2g7CisKKwloYXNoID0gKHVuc2lnbmVkIGludCkoaW50cHRyX3QpcCArICh1bnNpZ25lZCBpbnQpYmFzZV9vZmZzZXQ7CisJaGFzaCArPSAoaGFzaCA+PiA4KSArIChoYXNoID4+IDE2KTsKKwlyZXR1cm4gaGFzaDsKK30KKworc3RhdGljIHN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5ICoKK2dldF9kZWx0YV9iYXNlX2NhY2hlX2VudHJ5KHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBiYXNlX29mZnNldCkKK3sKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnRyeSwgKmU7CisJc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfa2V5IGtleTsKKworCWlmICghZGVsdGFfYmFzZV9jYWNoZS5jbXBmbikKKwkJcmV0dXJuIE5VTEw7CisKKwloYXNobWFwX2VudHJ5X2luaXQoJmVudHJ5LCBwYWNrX2VudHJ5X2hhc2gocCwgYmFzZV9vZmZzZXQpKTsKKwlrZXkucCA9IHA7CisJa2V5LmJhc2Vfb2Zmc2V0ID0gYmFzZV9vZmZzZXQ7CisJZSA9IGhhc2htYXBfZ2V0KCZkZWx0YV9iYXNlX2NhY2hlLCAmZW50cnksICZrZXkpOworCXJldHVybiBlID8gY29udGFpbmVyX29mKGUsIHN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5LCBlbnQpIDogTlVMTDsKK30KKworc3RhdGljIGludCBkZWx0YV9iYXNlX2NhY2hlX2tleV9lcShjb25zdCBzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9rZXkgKmEsCisJCQkJICAgY29uc3Qgc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfa2V5ICpiKQoreworCXJldHVybiBhLT5wID09IGItPnAgJiYgYS0+YmFzZV9vZmZzZXQgPT0gYi0+YmFzZV9vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGVsdGFfYmFzZV9jYWNoZV9oYXNoX2NtcChjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqdmEsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqdmIsCisJCQkJICAgICBjb25zdCB2b2lkICp2a2V5KQoreworCWNvbnN0IHN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5ICphLCAqYjsKKwljb25zdCBzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9rZXkgKmtleSA9IHZrZXk7CisKKwlhID0gY29udGFpbmVyX29mKHZhLCBjb25zdCBzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSwgZW50KTsKKwliID0gY29udGFpbmVyX29mKHZiLCBjb25zdCBzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSwgZW50KTsKKworCWlmIChrZXkpCisJCXJldHVybiAhZGVsdGFfYmFzZV9jYWNoZV9rZXlfZXEoJmEtPmtleSwga2V5KTsKKwllbHNlCisJCXJldHVybiAhZGVsdGFfYmFzZV9jYWNoZV9rZXlfZXEoJmEtPmtleSwgJmItPmtleSk7Cit9CisKK3N0YXRpYyBpbnQgaW5fZGVsdGFfYmFzZV9jYWNoZShzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3QgYmFzZV9vZmZzZXQpCit7CisJcmV0dXJuICEhZ2V0X2RlbHRhX2Jhc2VfY2FjaGVfZW50cnkocCwgYmFzZV9vZmZzZXQpOworfQorCisvKgorICogUmVtb3ZlIHRoZSBlbnRyeSBmcm9tIHRoZSBjYWNoZSwgYnV0IGRvIF9ub3RfIGZyZWUgdGhlIGFzc29jaWF0ZWQKKyAqIGVudHJ5IGRhdGEuIFRoZSBjYWxsZXIgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSAiZGF0YSIgYnVmZmVyLCBhbmQKKyAqIHNob3VsZCBjb3B5IG91dCBhbnkgZmllbGRzIGl0IHdhbnRzIGJlZm9yZSBkZXRhY2hpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGRldGFjaF9kZWx0YV9iYXNlX2NhY2hlX2VudHJ5KHN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5ICplbnQpCit7CisJaGFzaG1hcF9yZW1vdmUoJmRlbHRhX2Jhc2VfY2FjaGUsICZlbnQtPmVudCwgJmVudC0+a2V5KTsKKwlsaXN0X2RlbCgmZW50LT5scnUpOworCWRlbHRhX2Jhc2VfY2FjaGVkIC09IGVudC0+c2l6ZTsKKwlmcmVlKGVudCk7Cit9CisKK3N0YXRpYyB2b2lkICpjYWNoZV9vcl91bnBhY2tfZW50cnkoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJCSAgIG9mZl90IGJhc2Vfb2Zmc2V0LCB1bnNpZ25lZCBsb25nICpiYXNlX3NpemUsCisJCQkJICAgZW51bSBvYmplY3RfdHlwZSAqdHlwZSkKK3sKKwlzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSAqZW50OworCisJZW50ID0gZ2V0X2RlbHRhX2Jhc2VfY2FjaGVfZW50cnkocCwgYmFzZV9vZmZzZXQpOworCWlmICghZW50KQorCQlyZXR1cm4gdW5wYWNrX2VudHJ5KHIsIHAsIGJhc2Vfb2Zmc2V0LCB0eXBlLCBiYXNlX3NpemUpOworCisJaWYgKHR5cGUpCisJCSp0eXBlID0gZW50LT50eXBlOworCWlmIChiYXNlX3NpemUpCisJCSpiYXNlX3NpemUgPSBlbnQtPnNpemU7CisJcmV0dXJuIHhtZW1kdXB6KGVudC0+ZGF0YSwgZW50LT5zaXplKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfZGVsdGFfYmFzZV9jYWNoZShzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSAqZW50KQoreworCWZyZWUoZW50LT5kYXRhKTsKKwlkZXRhY2hfZGVsdGFfYmFzZV9jYWNoZV9lbnRyeShlbnQpOworfQorCit2b2lkIGNsZWFyX2RlbHRhX2Jhc2VfY2FjaGUodm9pZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpscnUsICp0bXA7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGxydSwgdG1wLCAmZGVsdGFfYmFzZV9jYWNoZV9scnUpIHsKKwkJc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnkgKmVudHJ5ID0KKwkJCWxpc3RfZW50cnkobHJ1LCBzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSwgbHJ1KTsKKwkJcmVsZWFzZV9kZWx0YV9iYXNlX2NhY2hlKGVudHJ5KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9kZWx0YV9iYXNlX2NhY2hlKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBiYXNlX29mZnNldCwKKwl2b2lkICpiYXNlLCB1bnNpZ25lZCBsb25nIGJhc2Vfc2l6ZSwgZW51bSBvYmplY3RfdHlwZSB0eXBlKQoreworCXN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5ICplbnQgPSB4bWFsbG9jKHNpemVvZigqZW50KSk7CisJc3RydWN0IGxpc3RfaGVhZCAqbHJ1LCAqdG1wOworCisJLyoKKwkgKiBDaGVjayByZXF1aXJlZCB0byBhdm9pZCByZWR1bmRhbnQgZW50cmllcyB3aGVuIG1vcmUgdGhhbiBvbmUgdGhyZWFkCisJICogaXMgdW5wYWNraW5nIHRoZSBzYW1lIG9iamVjdCwgaW4gdW5wYWNrX2VudHJ5KCkgKHNpbmNlIGl0cyBwaGFzZXMgSQorCSAqIGFuZCBJSUkgbWlnaHQgcnVuIGNvbmN1cnJlbnRseSBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFkcykuCisJICovCisJaWYgKGluX2RlbHRhX2Jhc2VfY2FjaGUocCwgYmFzZV9vZmZzZXQpKQorCQlyZXR1cm47CisKKwlkZWx0YV9iYXNlX2NhY2hlZCArPSBiYXNlX3NpemU7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobHJ1LCB0bXAsICZkZWx0YV9iYXNlX2NhY2hlX2xydSkgeworCQlzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSAqZiA9CisJCQlsaXN0X2VudHJ5KGxydSwgc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnksIGxydSk7CisJCWlmIChkZWx0YV9iYXNlX2NhY2hlZCA8PSBkZWx0YV9iYXNlX2NhY2hlX2xpbWl0KQorCQkJYnJlYWs7CisJCXJlbGVhc2VfZGVsdGFfYmFzZV9jYWNoZShmKTsKKwl9CisKKwllbnQtPmtleS5wID0gcDsKKwllbnQtPmtleS5iYXNlX29mZnNldCA9IGJhc2Vfb2Zmc2V0OworCWVudC0+dHlwZSA9IHR5cGU7CisJZW50LT5kYXRhID0gYmFzZTsKKwllbnQtPnNpemUgPSBiYXNlX3NpemU7CisJbGlzdF9hZGRfdGFpbCgmZW50LT5scnUsICZkZWx0YV9iYXNlX2NhY2hlX2xydSk7CisKKwlpZiAoIWRlbHRhX2Jhc2VfY2FjaGUuY21wZm4pCisJCWhhc2htYXBfaW5pdCgmZGVsdGFfYmFzZV9jYWNoZSwgZGVsdGFfYmFzZV9jYWNoZV9oYXNoX2NtcCwgTlVMTCwgMCk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZlbnQtPmVudCwgcGFja19lbnRyeV9oYXNoKHAsIGJhc2Vfb2Zmc2V0KSk7CisJaGFzaG1hcF9hZGQoJmRlbHRhX2Jhc2VfY2FjaGUsICZlbnQtPmVudCk7Cit9CisKK2ludCBwYWNrZWRfb2JqZWN0X2luZm8oc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkgICAgICAgb2ZmX3Qgb2JqX29mZnNldCwgc3RydWN0IG9iamVjdF9pbmZvICpvaSkKK3sKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndfY3VycyA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBzaXplOworCW9mZl90IGN1cnBvcyA9IG9ial9vZmZzZXQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJLyoKKwkgKiBXZSBhbHdheXMgZ2V0IHRoZSByZXByZXNlbnRhdGlvbiB0eXBlLCBidXQgb25seSBjb252ZXJ0IGl0IHRvCisJICogYSAicmVhbCIgdHlwZSBsYXRlciBpZiB0aGUgY2FsbGVyIGlzIGludGVyZXN0ZWQuCisJICovCisJaWYgKG9pLT5jb250ZW50cCkgeworCQkqb2ktPmNvbnRlbnRwID0gY2FjaGVfb3JfdW5wYWNrX2VudHJ5KHIsIHAsIG9ial9vZmZzZXQsIG9pLT5zaXplcCwKKwkJCQkJCSAgICAgICZ0eXBlKTsKKwkJaWYgKCEqb2ktPmNvbnRlbnRwKQorCQkJdHlwZSA9IE9CSl9CQUQ7CisJfSBlbHNlIHsKKwkJdHlwZSA9IHVucGFja19vYmplY3RfaGVhZGVyKHAsICZ3X2N1cnMsICZjdXJwb3MsICZzaXplKTsKKwl9CisKKwlpZiAoIW9pLT5jb250ZW50cCAmJiBvaS0+c2l6ZXApIHsKKwkJaWYgKHR5cGUgPT0gT0JKX09GU19ERUxUQSB8fCB0eXBlID09IE9CSl9SRUZfREVMVEEpIHsKKwkJCW9mZl90IHRtcF9wb3MgPSBjdXJwb3M7CisJCQlvZmZfdCBiYXNlX29mZnNldCA9IGdldF9kZWx0YV9iYXNlKHAsICZ3X2N1cnMsICZ0bXBfcG9zLAorCQkJCQkJCSAgIHR5cGUsIG9ial9vZmZzZXQpOworCQkJaWYgKCFiYXNlX29mZnNldCkgeworCQkJCXR5cGUgPSBPQkpfQkFEOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJKm9pLT5zaXplcCA9IGdldF9zaXplX2Zyb21fZGVsdGEocCwgJndfY3VycywgdG1wX3Bvcyk7CisJCQlpZiAoKm9pLT5zaXplcCA9PSAwKSB7CisJCQkJdHlwZSA9IE9CSl9CQUQ7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQkqb2ktPnNpemVwID0gc2l6ZTsKKwkJfQorCX0KKworCWlmIChvaS0+ZGlza19zaXplcCkgeworCQlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmlkeCA9IGZpbmRfcGFja19yZXZpbmRleChwLCBvYmpfb2Zmc2V0KTsKKwkJKm9pLT5kaXNrX3NpemVwID0gcmV2aWR4WzFdLm9mZnNldCAtIG9ial9vZmZzZXQ7CisJfQorCisJaWYgKG9pLT50eXBlcCB8fCBvaS0+dHlwZV9uYW1lKSB7CisJCWVudW0gb2JqZWN0X3R5cGUgcHRvdDsKKwkJcHRvdCA9IHBhY2tlZF90b19vYmplY3RfdHlwZShyLCBwLCBvYmpfb2Zmc2V0LAorCQkJCQkgICAgIHR5cGUsICZ3X2N1cnMsIGN1cnBvcyk7CisJCWlmIChvaS0+dHlwZXApCisJCQkqb2ktPnR5cGVwID0gcHRvdDsKKwkJaWYgKG9pLT50eXBlX25hbWUpIHsKKwkJCWNvbnN0IGNoYXIgKnRuID0gdHlwZV9uYW1lKHB0b3QpOworCQkJaWYgKHRuKQorCQkJCXN0cmJ1Zl9hZGRzdHIob2ktPnR5cGVfbmFtZSwgdG4pOworCQl9CisJCWlmIChwdG90IDwgMCkgeworCQkJdHlwZSA9IE9CSl9CQUQ7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChvaS0+ZGVsdGFfYmFzZV9vaWQpIHsKKwkJaWYgKHR5cGUgPT0gT0JKX09GU19ERUxUQSB8fCB0eXBlID09IE9CSl9SRUZfREVMVEEpIHsKKwkJCWlmIChnZXRfZGVsdGFfYmFzZV9vaWQocCwgJndfY3VycywgY3VycG9zLAorCQkJCQkgICAgICAgb2ktPmRlbHRhX2Jhc2Vfb2lkLAorCQkJCQkgICAgICAgdHlwZSwgb2JqX29mZnNldCkgPCAwKSB7CisJCQkJdHlwZSA9IE9CSl9CQUQ7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZQorCQkJb2lkY2xyKG9pLT5kZWx0YV9iYXNlX29pZCk7CisJfQorCisJb2ktPndoZW5jZSA9IGluX2RlbHRhX2Jhc2VfY2FjaGUocCwgb2JqX29mZnNldCkgPyBPSV9EQkNBQ0hFRCA6CisJCQkJCQkJICBPSV9QQUNLRUQ7CisKK291dDoKKwl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCXJldHVybiB0eXBlOworfQorCitzdGF0aWMgdm9pZCAqdW5wYWNrX2NvbXByZXNzZWRfZW50cnkoc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkJICAgIHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3VycywKKwkJCQkgICAgb2ZmX3QgY3VycG9zLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IHN0OworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIsICppbjsKKworCWJ1ZmZlciA9IHhtYWxsb2N6X2dlbnRseShzaXplKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlzdHJlYW0ubmV4dF9vdXQgPSBidWZmZXI7CisJc3RyZWFtLmF2YWlsX291dCA9IHNpemUgKyAxOworCisJZ2l0X2luZmxhdGVfaW5pdCgmc3RyZWFtKTsKKwlkbyB7CisJCWluID0gdXNlX3BhY2socCwgd19jdXJzLCBjdXJwb3MsICZzdHJlYW0uYXZhaWxfaW4pOworCQlzdHJlYW0ubmV4dF9pbiA9IGluOworCQkvKgorCQkgKiBOb3RlOiB3ZSBtdXN0IGVuc3VyZSB0aGUgd2luZG93IHNlY3Rpb24gcmV0dXJuZWQgYnkKKwkJICogdXNlX3BhY2soKSB3aWxsIGJlIGF2YWlsYWJsZSB0aHJvdWdob3V0IGdpdF9pbmZsYXRlKCkncworCQkgKiB1bmxvY2tlZCBleGVjdXRpb24uIFBsZWFzZSByZWZlciB0byB0aGUgY29tbWVudCBhdAorCQkgKiBnZXRfc2l6ZV9mcm9tX2RlbHRhKCkgdG8gc2VlIGhvdyB0aGlzIGlzIGRvbmUuCisJCSAqLworCQlvYmpfcmVhZF91bmxvY2soKTsKKwkJc3QgPSBnaXRfaW5mbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7CisJCW9ial9yZWFkX2xvY2soKTsKKwkJaWYgKCFzdHJlYW0uYXZhaWxfb3V0KQorCQkJYnJlYWs7IC8qIHRoZSBwYXlsb2FkIGlzIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZSAqLworCQljdXJwb3MgKz0gc3RyZWFtLm5leHRfaW4gLSBpbjsKKwl9IHdoaWxlIChzdCA9PSBaX09LIHx8IHN0ID09IFpfQlVGX0VSUk9SKTsKKwlnaXRfaW5mbGF0ZV9lbmQoJnN0cmVhbSk7CisJaWYgKChzdCAhPSBaX1NUUkVBTV9FTkQpIHx8IHN0cmVhbS50b3RhbF9vdXQgIT0gc2l6ZSkgeworCQlmcmVlKGJ1ZmZlcik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIHZlcnNpb25zIG9mIHpsaWIgY2FuIGNsb2JiZXIgdW5jb25zdW1lZCBwb3J0aW9uIG9mIG91dGJ1ZiAqLworCWJ1ZmZlcltzaXplXSA9ICdcMCc7CisKKwlyZXR1cm4gYnVmZmVyOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9wYWNrX2FjY2Vzc19sb2coc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IG9ial9vZmZzZXQpCit7CisJc3RhdGljIHN0cnVjdCB0cmFjZV9rZXkgcGFja19hY2Nlc3MgPSBUUkFDRV9LRVlfSU5JVChQQUNLX0FDQ0VTUyk7CisJdHJhY2VfcHJpbnRmX2tleSgmcGFja19hY2Nlc3MsICIlcyAlIlBSSXVNQVgiXG4iLAorCQkJIHAtPnBhY2tfbmFtZSwgKHVpbnRtYXhfdClvYmpfb2Zmc2V0KTsKK30KKworaW50IGRvX2NoZWNrX3BhY2tlZF9vYmplY3RfY3JjOworCisjZGVmaW5lIFVOUEFDS19FTlRSWV9TVEFDS19QUkVBTExPQyA2NAorc3RydWN0IHVucGFja19lbnRyeV9zdGFja19lbnQgeworCW9mZl90IG9ial9vZmZzZXQ7CisJb2ZmX3QgY3VycG9zOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKK307CisKK3N0YXRpYyB2b2lkICpyZWFkX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwKKwkJCSB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXN0cnVjdCBvYmplY3RfaW5mbyBvaSA9IE9CSkVDVF9JTkZPX0lOSVQ7CisJdm9pZCAqY29udGVudDsKKwlvaS50eXBlcCA9IHR5cGU7CisJb2kuc2l6ZXAgPSBzaXplOworCW9pLmNvbnRlbnRwID0gJmNvbnRlbnQ7CisKKwlpZiAob2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKHIsIG9pZCwgJm9pLCAwKSA8IDApCisJCXJldHVybiBOVUxMOworCXJldHVybiBjb250ZW50OworfQorCit2b2lkICp1bnBhY2tfZW50cnkoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBvYmpfb2Zmc2V0LAorCQkgICBlbnVtIG9iamVjdF90eXBlICpmaW5hbF90eXBlLCB1bnNpZ25lZCBsb25nICpmaW5hbF9zaXplKQoreworCXN0cnVjdCBwYWNrX3dpbmRvdyAqd19jdXJzID0gTlVMTDsKKwlvZmZfdCBjdXJwb3MgPSBvYmpfb2Zmc2V0OworCXZvaWQgKmRhdGEgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJc3RydWN0IHVucGFja19lbnRyeV9zdGFja19lbnQgc21hbGxfZGVsdGFfc3RhY2tbVU5QQUNLX0VOVFJZX1NUQUNLX1BSRUFMTE9DXTsKKwlzdHJ1Y3QgdW5wYWNrX2VudHJ5X3N0YWNrX2VudCAqZGVsdGFfc3RhY2sgPSBzbWFsbF9kZWx0YV9zdGFjazsKKwlpbnQgZGVsdGFfc3RhY2tfbnIgPSAwLCBkZWx0YV9zdGFja19hbGxvYyA9IFVOUEFDS19FTlRSWV9TVEFDS19QUkVBTExPQzsKKwlpbnQgYmFzZV9mcm9tX2NhY2hlID0gMDsKKworCXdyaXRlX3BhY2tfYWNjZXNzX2xvZyhwLCBvYmpfb2Zmc2V0KTsKKworCS8qIFBIQVNFIDE6IGRyaWxsIGRvd24gdG8gdGhlIGlubmVybW9zdCBiYXNlIG9iamVjdCAqLworCWZvciAoOzspIHsKKwkJb2ZmX3QgYmFzZV9vZmZzZXQ7CisJCWludCBpOworCQlzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSAqZW50OworCisJCWVudCA9IGdldF9kZWx0YV9iYXNlX2NhY2hlX2VudHJ5KHAsIGN1cnBvcyk7CisJCWlmIChlbnQpIHsKKwkJCXR5cGUgPSBlbnQtPnR5cGU7CisJCQlkYXRhID0gZW50LT5kYXRhOworCQkJc2l6ZSA9IGVudC0+c2l6ZTsKKwkJCWRldGFjaF9kZWx0YV9iYXNlX2NhY2hlX2VudHJ5KGVudCk7CisJCQliYXNlX2Zyb21fY2FjaGUgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZG9fY2hlY2tfcGFja2VkX29iamVjdF9jcmMgJiYgcC0+aW5kZXhfdmVyc2lvbiA+IDEpIHsKKwkJCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqcmV2aWR4ID0gZmluZF9wYWNrX3JldmluZGV4KHAsIG9ial9vZmZzZXQpOworCQkJb2ZmX3QgbGVuID0gcmV2aWR4WzFdLm9mZnNldCAtIG9ial9vZmZzZXQ7CisJCQlpZiAoY2hlY2tfcGFja19jcmMocCwgJndfY3Vycywgb2JqX29mZnNldCwgbGVuLCByZXZpZHgtPm5yKSkgeworCQkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQkJCW50aF9wYWNrZWRfb2JqZWN0X2lkKCZvaWQsIHAsIHJldmlkeC0+bnIpOworCQkJCWVycm9yKCJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIiwKKwkJCQkgICAgICBvaWRfdG9faGV4KCZvaWQpKTsKKwkJCQltYXJrX2JhZF9wYWNrZWRfb2JqZWN0KHAsIG9pZC5oYXNoKTsKKwkJCQlkYXRhID0gTlVMTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCisJCXR5cGUgPSB1bnBhY2tfb2JqZWN0X2hlYWRlcihwLCAmd19jdXJzLCAmY3VycG9zLCAmc2l6ZSk7CisJCWlmICh0eXBlICE9IE9CSl9PRlNfREVMVEEgJiYgdHlwZSAhPSBPQkpfUkVGX0RFTFRBKQorCQkJYnJlYWs7CisKKwkJYmFzZV9vZmZzZXQgPSBnZXRfZGVsdGFfYmFzZShwLCAmd19jdXJzLCAmY3VycG9zLCB0eXBlLCBvYmpfb2Zmc2V0KTsKKwkJaWYgKCFiYXNlX29mZnNldCkgeworCQkJZXJyb3IoImZhaWxlZCB0byB2YWxpZGF0ZSBkZWx0YSBiYXNlIHJlZmVyZW5jZSAiCisJCQkgICAgICAiYXQgb2Zmc2V0ICUiUFJJdU1BWCIgZnJvbSAlcyIsCisJCQkgICAgICAodWludG1heF90KWN1cnBvcywgcC0+cGFja19uYW1lKTsKKwkJCS8qIGJhaWwgdG8gcGhhc2UgMiwgaW4gaG9wZXMgb2YgcmVjb3ZlcnkgKi8KKwkJCWRhdGEgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBwdXNoIG9iamVjdCwgcHJvY2VlZCB0byBiYXNlICovCisJCWlmIChkZWx0YV9zdGFja19uciA+PSBkZWx0YV9zdGFja19hbGxvYworCQkgICAgJiYgZGVsdGFfc3RhY2sgPT0gc21hbGxfZGVsdGFfc3RhY2spIHsKKwkJCWRlbHRhX3N0YWNrX2FsbG9jID0gYWxsb2NfbnIoZGVsdGFfc3RhY2tfbnIpOworCQkJQUxMT0NfQVJSQVkoZGVsdGFfc3RhY2ssIGRlbHRhX3N0YWNrX2FsbG9jKTsKKwkJCUNPUFlfQVJSQVkoZGVsdGFfc3RhY2ssIHNtYWxsX2RlbHRhX3N0YWNrLAorCQkJCSAgIGRlbHRhX3N0YWNrX25yKTsKKwkJfSBlbHNlIHsKKwkJCUFMTE9DX0dST1coZGVsdGFfc3RhY2ssIGRlbHRhX3N0YWNrX25yKzEsIGRlbHRhX3N0YWNrX2FsbG9jKTsKKwkJfQorCQlpID0gZGVsdGFfc3RhY2tfbnIrKzsKKwkJZGVsdGFfc3RhY2tbaV0ub2JqX29mZnNldCA9IG9ial9vZmZzZXQ7CisJCWRlbHRhX3N0YWNrW2ldLmN1cnBvcyA9IGN1cnBvczsKKwkJZGVsdGFfc3RhY2tbaV0uc2l6ZSA9IHNpemU7CisKKwkJY3VycG9zID0gb2JqX29mZnNldCA9IGJhc2Vfb2Zmc2V0OworCX0KKworCS8qIFBIQVNFIDI6IGhhbmRsZSB0aGUgYmFzZSAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgT0JKX09GU19ERUxUQToKKwljYXNlIE9CSl9SRUZfREVMVEE6CisJCWlmIChkYXRhKQorCQkJQlVHKCJ1bnBhY2tfZW50cnk6IGxlZnQgbG9vcCBhdCBhIHZhbGlkIGRlbHRhIik7CisJCWJyZWFrOworCWNhc2UgT0JKX0NPTU1JVDoKKwljYXNlIE9CSl9UUkVFOgorCWNhc2UgT0JKX0JMT0I6CisJY2FzZSBPQkpfVEFHOgorCQlpZiAoIWJhc2VfZnJvbV9jYWNoZSkKKwkJCWRhdGEgPSB1bnBhY2tfY29tcHJlc3NlZF9lbnRyeShwLCAmd19jdXJzLCBjdXJwb3MsIHNpemUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYXRhID0gTlVMTDsKKwkJZXJyb3IoInVua25vd24gb2JqZWN0IHR5cGUgJWkgYXQgb2Zmc2V0ICUiUFJJdU1BWCIgaW4gJXMiLAorCQkgICAgICB0eXBlLCAodWludG1heF90KW9ial9vZmZzZXQsIHAtPnBhY2tfbmFtZSk7CisJfQorCisJLyogUEhBU0UgMzogYXBwbHkgZGVsdGFzIGluIG9yZGVyICovCisKKwkvKiBpbnZhcmlhbnRzOgorCSAqICAgJ2RhdGEnIGhvbGRzIHRoZSBiYXNlIGRhdGEsIG9yIE5VTEwgaWYgdGhlcmUgd2FzIGNvcnJ1cHRpb24KKwkgKi8KKwl3aGlsZSAoZGVsdGFfc3RhY2tfbnIpIHsKKwkJdm9pZCAqZGVsdGFfZGF0YTsKKwkJdm9pZCAqYmFzZSA9IGRhdGE7CisJCXZvaWQgKmV4dGVybmFsX2Jhc2UgPSBOVUxMOworCQl1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUsIGJhc2Vfc2l6ZSA9IHNpemU7CisJCWludCBpOworCisJCWRhdGEgPSBOVUxMOworCisJCWlmIChiYXNlKQorCQkJYWRkX2RlbHRhX2Jhc2VfY2FjaGUocCwgb2JqX29mZnNldCwgYmFzZSwgYmFzZV9zaXplLCB0eXBlKTsKKworCQlpZiAoIWJhc2UpIHsKKwkJCS8qCisJCQkgKiBXZSdyZSBwcm9iYWJseSBpbiBkZWVwIHNoaXQsIGJ1dCBsZXQncyB0cnkgdG8gZmV0Y2gKKwkJCSAqIHRoZSByZXF1aXJlZCBiYXNlIGFueXdheSBmcm9tIGFub3RoZXIgcGFjayBvciBsb29zZS4KKwkJCSAqIFRoaXMgaXMgY29zdGx5IGJ1dCBzaG91bGQgaGFwcGVuIG9ubHkgaW4gdGhlIHByZXNlbmNlCisJCQkgKiBvZiBhIGNvcnJ1cHRlZCBwYWNrLCBhbmQgaXMgYmV0dGVyIHRoYW4gZmFpbGluZyBvdXRyaWdodC4KKwkJCSAqLworCQkJc3RydWN0IHJldmluZGV4X2VudHJ5ICpyZXZpZHg7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIGJhc2Vfb2lkOworCQkJcmV2aWR4ID0gZmluZF9wYWNrX3JldmluZGV4KHAsIG9ial9vZmZzZXQpOworCQkJaWYgKHJldmlkeCkgeworCQkJCW50aF9wYWNrZWRfb2JqZWN0X2lkKCZiYXNlX29pZCwgcCwgcmV2aWR4LT5ucik7CisJCQkJZXJyb3IoImZhaWxlZCB0byByZWFkIGRlbHRhIGJhc2Ugb2JqZWN0ICVzIgorCQkJCSAgICAgICIgYXQgb2Zmc2V0ICUiUFJJdU1BWCIgZnJvbSAlcyIsCisJCQkJICAgICAgb2lkX3RvX2hleCgmYmFzZV9vaWQpLCAodWludG1heF90KW9ial9vZmZzZXQsCisJCQkJICAgICAgcC0+cGFja19uYW1lKTsKKwkJCQltYXJrX2JhZF9wYWNrZWRfb2JqZWN0KHAsIGJhc2Vfb2lkLmhhc2gpOworCQkJCWJhc2UgPSByZWFkX29iamVjdChyLCAmYmFzZV9vaWQsICZ0eXBlLCAmYmFzZV9zaXplKTsKKwkJCQlleHRlcm5hbF9iYXNlID0gYmFzZTsKKwkJCX0KKwkJfQorCisJCWkgPSAtLWRlbHRhX3N0YWNrX25yOworCQlvYmpfb2Zmc2V0ID0gZGVsdGFfc3RhY2tbaV0ub2JqX29mZnNldDsKKwkJY3VycG9zID0gZGVsdGFfc3RhY2tbaV0uY3VycG9zOworCQlkZWx0YV9zaXplID0gZGVsdGFfc3RhY2tbaV0uc2l6ZTsKKworCQlpZiAoIWJhc2UpCisJCQljb250aW51ZTsKKworCQlkZWx0YV9kYXRhID0gdW5wYWNrX2NvbXByZXNzZWRfZW50cnkocCwgJndfY3VycywgY3VycG9zLCBkZWx0YV9zaXplKTsKKworCQlpZiAoIWRlbHRhX2RhdGEpIHsKKwkJCWVycm9yKCJmYWlsZWQgdG8gdW5wYWNrIGNvbXByZXNzZWQgZGVsdGEgIgorCQkJICAgICAgImF0IG9mZnNldCAlIlBSSXVNQVgiIGZyb20gJXMiLAorCQkJICAgICAgKHVpbnRtYXhfdCljdXJwb3MsIHAtPnBhY2tfbmFtZSk7CisJCQlkYXRhID0gTlVMTDsKKwkJCWZyZWUoZXh0ZXJuYWxfYmFzZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWRhdGEgPSBwYXRjaF9kZWx0YShiYXNlLCBiYXNlX3NpemUsCisJCQkJICAgZGVsdGFfZGF0YSwgZGVsdGFfc2l6ZSwKKwkJCQkgICAmc2l6ZSk7CisKKwkJLyoKKwkJICogV2UgY291bGQgbm90IGFwcGx5IHRoZSBkZWx0YTsgd2FybiB0aGUgdXNlciwgYnV0IGtlZXAgZ29pbmcuCisJCSAqIE91ciBmYWlsdXJlIHdpbGwgYmUgbm90aWNlZCBlaXRoZXIgaW4gdGhlIG5leHQgaXRlcmF0aW9uIG9mCisJCSAqIHRoZSBsb29wLCBvciBpZiB0aGlzIGlzIHRoZSBmaW5hbCBkZWx0YSwgaW4gdGhlIGNhbGxlciB3aGVuCisJCSAqIHdlIHJldHVybiBOVUxMLiBUaG9zZSBjb2RlIHBhdGhzIHdpbGwgdGFrZSBjYXJlIG9mIG1ha2luZworCQkgKiBhIG1vcmUgZXhwbGljaXQgd2FybmluZyBhbmQgcmV0cnlpbmcgd2l0aCBhbm90aGVyIGNvcHkgb2YKKwkJICogdGhlIG9iamVjdC4KKwkJICovCisJCWlmICghZGF0YSkKKwkJCWVycm9yKCJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiKTsKKworCQlmcmVlKGRlbHRhX2RhdGEpOworCQlmcmVlKGV4dGVybmFsX2Jhc2UpOworCX0KKworCWlmIChmaW5hbF90eXBlKQorCQkqZmluYWxfdHlwZSA9IHR5cGU7CisJaWYgKGZpbmFsX3NpemUpCisJCSpmaW5hbF9zaXplID0gc2l6ZTsKKworb3V0OgorCXVudXNlX3BhY2soJndfY3Vycyk7CisKKwlpZiAoZGVsdGFfc3RhY2sgIT0gc21hbGxfZGVsdGFfc3RhY2spCisJCWZyZWUoZGVsdGFfc3RhY2spOworCisJcmV0dXJuIGRhdGE7Cit9CisKK2ludCBic2VhcmNoX3BhY2soY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgdWludDMyX3QgKnJlc3VsdCkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleF9mYW5vdXQgPSBwLT5pbmRleF9kYXRhOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGV4X2xvb2t1cDsKKwljb25zdCB1bnNpZ25lZCBpbnQgaGFzaHN6ID0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJaW50IGluZGV4X2xvb2t1cF93aWR0aDsKKworCWlmICghaW5kZXhfZmFub3V0KQorCQlCVUcoImJzZWFyY2hfcGFjayBjYWxsZWQgd2l0aG91dCBhIHZhbGlkIHBhY2staW5kZXgiKTsKKworCWluZGV4X2xvb2t1cCA9IGluZGV4X2Zhbm91dCArIDQgKiAyNTY7CisJaWYgKHAtPmluZGV4X3ZlcnNpb24gPT0gMSkgeworCQlpbmRleF9sb29rdXBfd2lkdGggPSBoYXNoc3ogKyA0OworCQlpbmRleF9sb29rdXAgKz0gNDsKKwl9IGVsc2UgeworCQlpbmRleF9sb29rdXBfd2lkdGggPSBoYXNoc3o7CisJCWluZGV4X2Zhbm91dCArPSA4OworCQlpbmRleF9sb29rdXAgKz0gODsKKwl9CisKKwlyZXR1cm4gYnNlYXJjaF9oYXNoKG9pZC0+aGFzaCwgKGNvbnN0IHVpbnQzMl90KilpbmRleF9mYW5vdXQsCisJCQkgICAgaW5kZXhfbG9va3VwLCBpbmRleF9sb29rdXBfd2lkdGgsIHJlc3VsdCk7Cit9CisKK2ludCBudGhfcGFja2VkX29iamVjdF9pZChzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkgdWludDMyX3QgbikKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleCA9IHAtPmluZGV4X2RhdGE7CisJY29uc3QgdW5zaWduZWQgaW50IGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCWlmICghaW5kZXgpIHsKKwkJaWYgKG9wZW5fcGFja19pbmRleChwKSkKKwkJCXJldHVybiAtMTsKKwkJaW5kZXggPSBwLT5pbmRleF9kYXRhOworCX0KKwlpZiAobiA+PSBwLT5udW1fb2JqZWN0cykKKwkJcmV0dXJuIC0xOworCWluZGV4ICs9IDQgKiAyNTY7CisJaWYgKHAtPmluZGV4X3ZlcnNpb24gPT0gMSkgeworCQlvaWRyZWFkKG9pZCwgaW5kZXggKyAoaGFzaHN6ICsgNCkgKiBuICsgNCk7CisJfSBlbHNlIHsKKwkJaW5kZXggKz0gODsKKwkJb2lkcmVhZChvaWQsIGluZGV4ICsgaGFzaHN6ICogbik7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIGNoZWNrX3BhY2tfaW5kZXhfcHRyKGNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBjb25zdCB2b2lkICp2cHRyKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0ciA9IHZwdHI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc3RhcnQgPSBwLT5pbmRleF9kYXRhOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHN0YXJ0ICsgcC0+aW5kZXhfc2l6ZTsKKwlpZiAocHRyIDwgc3RhcnQpCisJCWRpZShfKCJvZmZzZXQgYmVmb3JlIHN0YXJ0IG9mIHBhY2sgaW5kZXggZm9yICVzIChjb3JydXB0IGluZGV4PykiKSwKKwkJICAgIHAtPnBhY2tfbmFtZSk7CisJLyogTm8gbmVlZCB0byBjaGVjayBmb3IgdW5kZXJmbG93OyAuaWR4IGZpbGVzIG11c3QgYmUgYXQgbGVhc3QgOCBieXRlcyAqLworCWlmIChwdHIgPj0gZW5kIC0gOCkKKwkJZGllKF8oIm9mZnNldCBiZXlvbmQgZW5kIG9mIHBhY2sgaW5kZXggZm9yICVzICh0cnVuY2F0ZWQgaW5kZXg/KSIpLAorCQkgICAgcC0+cGFja19uYW1lKTsKK30KKworb2ZmX3QgbnRoX3BhY2tlZF9vYmplY3Rfb2Zmc2V0KGNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCB1aW50MzJfdCBuKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGV4ID0gcC0+aW5kZXhfZGF0YTsKKwljb25zdCB1bnNpZ25lZCBpbnQgaGFzaHN6ID0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJaW5kZXggKz0gNCAqIDI1NjsKKwlpZiAocC0+aW5kZXhfdmVyc2lvbiA9PSAxKSB7CisJCXJldHVybiBudG9obCgqKCh1aW50MzJfdCAqKShpbmRleCArIChoYXNoc3ogKyA0KSAqIG4pKSk7CisJfSBlbHNlIHsKKwkJdWludDMyX3Qgb2ZmOworCQlpbmRleCArPSA4ICsgcC0+bnVtX29iamVjdHMgKiAoaGFzaHN6ICsgNCk7CisJCW9mZiA9IG50b2hsKCooKHVpbnQzMl90ICopKGluZGV4ICsgNCAqIG4pKSk7CisJCWlmICghKG9mZiAmIDB4ODAwMDAwMDApKQorCQkJcmV0dXJuIG9mZjsKKwkJaW5kZXggKz0gcC0+bnVtX29iamVjdHMgKiA0ICsgKG9mZiAmIDB4N2ZmZmZmZmYpICogODsKKwkJY2hlY2tfcGFja19pbmRleF9wdHIocCwgaW5kZXgpOworCQlyZXR1cm4gZ2V0X2JlNjQoaW5kZXgpOworCX0KK30KKworb2ZmX3QgZmluZF9wYWNrX2VudHJ5X29uZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqaW5kZXggPSBwLT5pbmRleF9kYXRhOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXVpbnQzMl90IHJlc3VsdDsKKworCWlmICghaW5kZXgpIHsKKwkJaWYgKG9wZW5fcGFja19pbmRleChwKSkKKwkJCXJldHVybiAwOworCX0KKworCWhhc2hjcHkob2lkLmhhc2gsIHNoYTEpOworCWlmIChic2VhcmNoX3BhY2soJm9pZCwgcCwgJnJlc3VsdCkpCisJCXJldHVybiBudGhfcGFja2VkX29iamVjdF9vZmZzZXQocCwgcmVzdWx0KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGlzX3BhY2tfdmFsaWQoc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJLyogQW4gYWxyZWFkeSBvcGVuIHBhY2sgaXMga25vd24gdG8gYmUgdmFsaWQuICovCisJaWYgKHAtPnBhY2tfZmQgIT0gLTEpCisJCXJldHVybiAxOworCisJLyogSWYgdGhlIHBhY2sgaGFzIG9uZSB3aW5kb3cgY29tcGxldGVseSBjb3ZlcmluZyB0aGUKKwkgKiBmaWxlIHNpemUsIHRoZSBwYWNrIGlzIGtub3duIHRvIGJlIHZhbGlkIGV2ZW4gaWYKKwkgKiB0aGUgZGVzY3JpcHRvciBpcyBub3QgY3VycmVudGx5IG9wZW4uCisJICovCisJaWYgKHAtPndpbmRvd3MpIHsKKwkJc3RydWN0IHBhY2tfd2luZG93ICp3ID0gcC0+d2luZG93czsKKworCQlpZiAoIXctPm9mZnNldCAmJiB3LT5sZW4gPT0gcC0+cGFja19zaXplKQorCQkJcmV0dXJuIDE7CisJfQorCisJLyogRm9yY2UgdGhlIHBhY2sgdG8gb3BlbiB0byBwcm92ZSBpdHMgdmFsaWQuICovCisJcmV0dXJuICFvcGVuX3BhY2tlZF9naXQocCk7Cit9CisKK3N0cnVjdCBwYWNrZWRfZ2l0ICpmaW5kX3NoYTFfcGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgc3RydWN0IHBhY2tlZF9naXQgKnBhY2tzKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCisJZm9yIChwID0gcGFja3M7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChmaW5kX3BhY2tfZW50cnlfb25lKHNoYTEsIHApKQorCQkJcmV0dXJuIHA7CisJfQorCXJldHVybiBOVUxMOworCit9CisKK3N0YXRpYyBpbnQgZmlsbF9wYWNrX2VudHJ5KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgIHN0cnVjdCBwYWNrX2VudHJ5ICplLAorCQkJICAgc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJb2ZmX3Qgb2Zmc2V0OworCisJaWYgKHAtPm51bV9iYWRfb2JqZWN0cykgeworCQl1bnNpZ25lZCBpOworCQlmb3IgKGkgPSAwOyBpIDwgcC0+bnVtX2JhZF9vYmplY3RzOyBpKyspCisJCQlpZiAoaGFzaGVxKG9pZC0+aGFzaCwKKwkJCQkgICBwLT5iYWRfb2JqZWN0X3NoYTEgKyB0aGVfaGFzaF9hbGdvLT5yYXdzeiAqIGkpKQorCQkJCXJldHVybiAwOworCX0KKworCW9mZnNldCA9IGZpbmRfcGFja19lbnRyeV9vbmUob2lkLT5oYXNoLCBwKTsKKwlpZiAoIW9mZnNldCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFdlIGFyZSBhYm91dCB0byB0ZWxsIHRoZSBjYWxsZXIgd2hlcmUgdGhleSBjYW4gbG9jYXRlIHRoZQorCSAqIHJlcXVlc3RlZCBvYmplY3QuICBXZSBiZXR0ZXIgbWFrZSBzdXJlIHRoZSBwYWNrZmlsZSBpcworCSAqIHN0aWxsIGhlcmUgYW5kIGNhbiBiZSBhY2Nlc3NlZCBiZWZvcmUgc3VwcGx5aW5nIHRoYXQKKwkgKiBhbnN3ZXIsIGFzIGl0IG1heSBoYXZlIGJlZW4gZGVsZXRlZCBzaW5jZSB0aGUgaW5kZXggd2FzCisJICogbG9hZGVkIQorCSAqLworCWlmICghaXNfcGFja192YWxpZChwKSkKKwkJcmV0dXJuIDA7CisJZS0+b2Zmc2V0ID0gb2Zmc2V0OworCWUtPnAgPSBwOworCXJldHVybiAxOworfQorCitpbnQgZmluZF9wYWNrX2VudHJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBwYWNrX2VudHJ5ICplKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbTsKKworCXByZXBhcmVfcGFja2VkX2dpdChyKTsKKwlpZiAoIXItPm9iamVjdHMtPnBhY2tlZF9naXQgJiYgIXItPm9iamVjdHMtPm11bHRpX3BhY2tfaW5kZXgpCisJCXJldHVybiAwOworCisJZm9yIChtID0gci0+b2JqZWN0cy0+bXVsdGlfcGFja19pbmRleDsgbTsgbSA9IG0tPm5leHQpIHsKKwkJaWYgKGZpbGxfbWlkeF9lbnRyeShyLCBvaWQsIGUsIG0pKQorCQkJcmV0dXJuIDE7CisJfQorCisJbGlzdF9mb3JfZWFjaChwb3MsICZyLT5vYmplY3RzLT5wYWNrZWRfZ2l0X21ydSkgeworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgcGFja2VkX2dpdCwgbXJ1KTsKKwkJaWYgKCFwLT5tdWx0aV9wYWNrX2luZGV4ICYmIGZpbGxfcGFja19lbnRyeShvaWQsIGUsIHApKSB7CisJCQlsaXN0X21vdmUoJnAtPm1ydSwgJnItPm9iamVjdHMtPnBhY2tlZF9naXRfbXJ1KTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCitpbnQgaGFzX29iamVjdF9wYWNrKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgcGFja19lbnRyeSBlOworCXJldHVybiBmaW5kX3BhY2tfZW50cnkodGhlX3JlcG9zaXRvcnksIG9pZCwgJmUpOworfQorCitpbnQgaGFzX3BhY2tfaW5kZXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpZiAoc3RhdChzaGExX3BhY2tfaW5kZXhfbmFtZShzaGExKSwgJnN0KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK2ludCBmb3JfZWFjaF9vYmplY3RfaW5fcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCSAgICBlYWNoX3BhY2tlZF9vYmplY3RfZm4gY2IsIHZvaWQgKmRhdGEsCisJCQkgICAgZW51bSBmb3JfZWFjaF9vYmplY3RfZmxhZ3MgZmxhZ3MpCit7CisJdWludDMyX3QgaTsKKwlpbnQgciA9IDA7CisKKwlpZiAoZmxhZ3MgJiBGT1JfRUFDSF9PQkpFQ1RfUEFDS19PUkRFUikgeworCQlpZiAobG9hZF9wYWNrX3JldmluZGV4KHApKQorCQkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBwLT5udW1fb2JqZWN0czsgaSsrKSB7CisJCXVpbnQzMl90IHBvczsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJaWYgKGZsYWdzICYgRk9SX0VBQ0hfT0JKRUNUX1BBQ0tfT1JERVIpCisJCQlwb3MgPSBwLT5yZXZpbmRleFtpXS5ucjsKKwkJZWxzZQorCQkJcG9zID0gaTsKKworCQlpZiAobnRoX3BhY2tlZF9vYmplY3RfaWQoJm9pZCwgcCwgcG9zKSA8IDApCisJCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byBnZXQgc2hhMSBvZiBvYmplY3QgJXUgaW4gJXMiLAorCQkJCSAgICAgcG9zLCBwLT5wYWNrX25hbWUpOworCisJCXIgPSBjYigmb2lkLCBwLCBwb3MsIGRhdGEpOworCQlpZiAocikKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gcjsKK30KKworaW50IGZvcl9lYWNoX3BhY2tlZF9vYmplY3QoZWFjaF9wYWNrZWRfb2JqZWN0X2ZuIGNiLCB2b2lkICpkYXRhLAorCQkJICAgZW51bSBmb3JfZWFjaF9vYmplY3RfZmxhZ3MgZmxhZ3MpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJaW50IHIgPSAwOworCWludCBwYWNrX2Vycm9ycyA9IDA7CisKKwlwcmVwYXJlX3BhY2tlZF9naXQodGhlX3JlcG9zaXRvcnkpOworCWZvciAocCA9IGdldF9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnkpOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAoKGZsYWdzICYgRk9SX0VBQ0hfT0JKRUNUX0xPQ0FMX09OTFkpICYmICFwLT5wYWNrX2xvY2FsKQorCQkJY29udGludWU7CisJCWlmICgoZmxhZ3MgJiBGT1JfRUFDSF9PQkpFQ1RfUFJPTUlTT1JfT05MWSkgJiYKKwkJICAgICFwLT5wYWNrX3Byb21pc29yKQorCQkJY29udGludWU7CisJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpIHsKKwkJCXBhY2tfZXJyb3JzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXIgPSBmb3JfZWFjaF9vYmplY3RfaW5fcGFjayhwLCBjYiwgZGF0YSwgZmxhZ3MpOworCQlpZiAocikKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gciA/IHIgOiBwYWNrX2Vycm9yczsKK30KKworc3RhdGljIGludCBhZGRfcHJvbWlzb3Jfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgICBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjaywKKwkJCSAgICAgICB1aW50MzJfdCBwb3MsCisJCQkgICAgICAgdm9pZCAqc2V0XykKK3sKKwlzdHJ1Y3Qgb2lkc2V0ICpzZXQgPSBzZXRfOworCXN0cnVjdCBvYmplY3QgKm9iaiA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIDE7CisKKwlvaWRzZXRfaW5zZXJ0KHNldCwgb2lkKTsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIHRyZWUsIGNvbW1pdCwgb3IgdGFnLCB0aGUgb2JqZWN0cyBpdCByZWZlcnMKKwkgKiB0byBhcmUgYWxzbyBwcm9taXNvciBvYmplY3RzLiAoQmxvYnMgcmVmZXIgdG8gbm8gb2JqZWN0cy0+KQorCSAqLworCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJc3RydWN0IHRyZWUgKnRyZWUgPSAoc3RydWN0IHRyZWUgKilvYmo7CisJCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwkJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJCWlmIChpbml0X3RyZWVfZGVzY19nZW50bHkoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSkpCisJCQkvKgorCQkJICogRXJyb3IgbWVzc2FnZXMgYXJlIGdpdmVuIHdoZW4gcGFja3MgYXJlCisJCQkgKiB2ZXJpZmllZCwgc28gZG8gbm90IHByaW50IGFueSBoZXJlLgorCQkJICovCisJCQlyZXR1cm4gMDsKKwkJd2hpbGUgKHRyZWVfZW50cnlfZ2VudGx5KCZkZXNjLCAmZW50cnkpKQorCQkJb2lkc2V0X2luc2VydChzZXQsICZlbnRyeS5vaWQpOworCX0gZWxzZSBpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKikgb2JqOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisKKwkJb2lkc2V0X2luc2VydChzZXQsIGdldF9jb21taXRfdHJlZV9vaWQoY29tbWl0KSk7CisJCWZvciAoOyBwYXJlbnRzOyBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkKKwkJCW9pZHNldF9pbnNlcnQoc2V0LCAmcGFyZW50cy0+aXRlbS0+b2JqZWN0Lm9pZCk7CisJfSBlbHNlIGlmIChvYmotPnR5cGUgPT0gT0JKX1RBRykgeworCQlzdHJ1Y3QgdGFnICp0YWcgPSAoc3RydWN0IHRhZyAqKSBvYmo7CisJCW9pZHNldF9pbnNlcnQoc2V0LCBnZXRfdGFnZ2VkX29pZCh0YWcpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBpc19wcm9taXNvcl9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0YXRpYyBzdHJ1Y3Qgb2lkc2V0IHByb21pc29yX29iamVjdHM7CisJc3RhdGljIGludCBwcm9taXNvcl9vYmplY3RzX3ByZXBhcmVkOworCisJaWYgKCFwcm9taXNvcl9vYmplY3RzX3ByZXBhcmVkKSB7CisJCWlmIChoYXNfcHJvbWlzb3JfcmVtb3RlKCkpIHsKKwkJCWZvcl9lYWNoX3BhY2tlZF9vYmplY3QoYWRkX3Byb21pc29yX29iamVjdCwKKwkJCQkJICAgICAgICZwcm9taXNvcl9vYmplY3RzLAorCQkJCQkgICAgICAgRk9SX0VBQ0hfT0JKRUNUX1BST01JU09SX09OTFkpOworCQl9CisJCXByb21pc29yX29iamVjdHNfcHJlcGFyZWQgPSAxOworCX0KKwlyZXR1cm4gb2lkc2V0X2NvbnRhaW5zKCZwcm9taXNvcl9vYmplY3RzLCBvaWQpOworfQpkaWZmIC0tZ2l0IGEvcGFja2ZpbGUuaCBiL3BhY2tmaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQwYWE3MwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2tmaWxlLmgKQEAgLTAsMCArMSwxOTIgQEAKKyNpZm5kZWYgUEFDS0ZJTEVfSAorI2RlZmluZSBQQUNLRklMRV9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9pZHNldC5oIgorCisvKiBpbiBvYmplY3Qtc3RvcmUuaCAqLworc3RydWN0IHBhY2tlZF9naXQ7CitzdHJ1Y3Qgb2JqZWN0X2luZm87CisKKy8qCisgKiBHZW5lcmF0ZSB0aGUgZmlsZW5hbWUgdG8gYmUgdXNlZCBmb3IgYSBwYWNrIGZpbGUgd2l0aCBjaGVja3N1bSAic2hhMSIgYW5kCisgKiBleHRlbnNpb24gImV4dCIuIFRoZSByZXN1bHQgaXMgd3JpdHRlbiBpbnRvIHRoZSBzdHJidWYgImJ1ZiIsIG92ZXJ3cml0aW5nCisgKiBhbnkgZXhpc3RpbmcgY29udGVudHMuIEEgcG9pbnRlciB0byBidWYtPmJ1ZiBpcyByZXR1cm5lZCBhcyBhIGNvbnZlbmllbmNlLgorICoKKyAqIEV4YW1wbGU6IG9kYl9wYWNrX25hbWUob3V0LCBzaGExLCAiaWR4IikgPT4gIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stMTIzNC4uaWR4IgorICovCitjaGFyICpvZGJfcGFja19uYW1lKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqZXh0KTsKKworLyoKKyAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgKGxvY2FsKSBwYWNrZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgc2hhMSBpbgorICogaXRzIG5hbWUuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcG9pbnRlciB0byBtZW1vcnkgdGhhdCBpcworICogb3ZlcndyaXR0ZW4gZWFjaCB0aW1lIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICovCitjaGFyICpzaGExX3BhY2tfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworLyoKKyAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgKGxvY2FsKSBwYWNrIGluZGV4IGZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkCisgKiBzaGExIGluIGl0cyBuYW1lLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gbWVtb3J5IHRoYXQgaXMKKyAqIG92ZXJ3cml0dGVuIGVhY2ggdGltZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqLworY2hhciAqc2hhMV9wYWNrX2luZGV4X25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CisKKy8qCisgKiBSZXR1cm4gdGhlIGJhc2VuYW1lIG9mIHRoZSBwYWNrZmlsZSwgb21pdHRpbmcgYW55IGNvbnRhaW5pbmcgZGlyZWN0b3J5CisgKiAoZS5nLiwgInBhY2stMTIzNGFiY2RbLi4uXS5wYWNrIikuCisgKi8KK2NvbnN0IGNoYXIgKnBhY2tfYmFzZW5hbWUoc3RydWN0IHBhY2tlZF9naXQgKnApOworCitzdHJ1Y3QgcGFja2VkX2dpdCAqcGFyc2VfcGFja19pbmRleCh1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICppZHhfcGF0aCk7CisKK3R5cGVkZWYgdm9pZCBlYWNoX2ZpbGVfaW5fcGFja19kaXJfZm4oY29uc3QgY2hhciAqZnVsbF9wYXRoLCBzaXplX3QgZnVsbF9wYXRoX2xlbiwKKwkJCQkgICAgICBjb25zdCBjaGFyICpmaWxlX3BhY2gsIHZvaWQgKmRhdGEpOwordm9pZCBmb3JfZWFjaF9maWxlX2luX3BhY2tfZGlyKGNvbnN0IGNoYXIgKm9iamRpciwKKwkJCSAgICAgICBlYWNoX2ZpbGVfaW5fcGFja19kaXJfZm4gZm4sCisJCQkgICAgICAgdm9pZCAqZGF0YSk7CisKKy8qIEEgaG9vayB0byByZXBvcnQgaW52YWxpZCBmaWxlcyBpbiBwYWNrIGRpcmVjdG9yeSAqLworI2RlZmluZSBQQUNLRElSX0ZJTEVfUEFDSyAxCisjZGVmaW5lIFBBQ0tESVJfRklMRV9JRFggMgorI2RlZmluZSBQQUNLRElSX0ZJTEVfR0FSQkFHRSA0CitleHRlcm4gdm9pZCAoKnJlcG9ydF9nYXJiYWdlKSh1bnNpZ25lZCBzZWVuX2JpdHMsIGNvbnN0IGNoYXIgKnBhdGgpOworCit2b2lkIHJlcHJlcGFyZV9wYWNrZWRfZ2l0KHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKK3ZvaWQgaW5zdGFsbF9wYWNrZWRfZ2l0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjayk7CisKK3N0cnVjdCBwYWNrZWRfZ2l0ICpnZXRfcGFja2VkX2dpdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CitzdHJ1Y3QgbGlzdF9oZWFkICpnZXRfcGFja2VkX2dpdF9tcnUoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKmdldF9tdWx0aV9wYWNrX2luZGV4KHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKK3N0cnVjdCBwYWNrZWRfZ2l0ICpnZXRfYWxsX3BhY2tzKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKKworLyoKKyAqIEdpdmUgYSByb3VnaCBjb3VudCBvZiBvYmplY3RzIGluIHRoZSByZXBvc2l0b3J5LiBUaGlzIHNhY3JpZmljZXMgYWNjdXJhY3kKKyAqIGZvciBzcGVlZC4KKyAqLwordW5zaWduZWQgbG9uZyByZXBvX2FwcHJveGltYXRlX29iamVjdF9jb3VudChzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisjZGVmaW5lIGFwcHJveGltYXRlX29iamVjdF9jb3VudCgpIHJlcG9fYXBwcm94aW1hdGVfb2JqZWN0X2NvdW50KHRoZV9yZXBvc2l0b3J5KQorCitzdHJ1Y3QgcGFja2VkX2dpdCAqZmluZF9zaGExX3BhY2soY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrcyk7CisKK3ZvaWQgcGFja19yZXBvcnQodm9pZCk7CisKKy8qCisgKiBtbWFwIHRoZSBpbmRleCBmaWxlIGZvciB0aGUgc3BlY2lmaWVkIHBhY2tmaWxlIChpZiBpdCBpcyBub3QKKyAqIGFscmVhZHkgbW1hcHBlZCkuICBSZXR1cm4gMCBvbiBzdWNjZXNzLgorICovCitpbnQgb3Blbl9wYWNrX2luZGV4KHN0cnVjdCBwYWNrZWRfZ2l0ICopOworCisvKgorICogbXVubWFwIHRoZSBpbmRleCBmaWxlIGZvciB0aGUgc3BlY2lmaWVkIHBhY2tmaWxlIChpZiBpdCBpcworICogY3VycmVudGx5IG1tYXBwZWQpLgorICovCit2b2lkIGNsb3NlX3BhY2tfaW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKik7CisKK2ludCBjbG9zZV9wYWNrX2ZkKHN0cnVjdCBwYWNrZWRfZ2l0ICpwKTsKKwordWludDMyX3QgZ2V0X3BhY2tfZmFub3V0KHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCB1aW50MzJfdCB2YWx1ZSk7CisKK3Vuc2lnbmVkIGNoYXIgKnVzZV9wYWNrKHN0cnVjdCBwYWNrZWRfZ2l0ICosIHN0cnVjdCBwYWNrX3dpbmRvdyAqKiwgb2ZmX3QsIHVuc2lnbmVkIGxvbmcgKik7Cit2b2lkIGNsb3NlX3BhY2tfd2luZG93cyhzdHJ1Y3QgcGFja2VkX2dpdCAqKTsKK3ZvaWQgY2xvc2VfcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAqKTsKK3ZvaWQgY2xvc2Vfb2JqZWN0X3N0b3JlKHN0cnVjdCByYXdfb2JqZWN0X3N0b3JlICpvKTsKK3ZvaWQgdW51c2VfcGFjayhzdHJ1Y3QgcGFja193aW5kb3cgKiopOwordm9pZCBjbGVhcl9kZWx0YV9iYXNlX2NhY2hlKHZvaWQpOworc3RydWN0IHBhY2tlZF9naXQgKmFkZF9wYWNrZWRfZ2l0KGNvbnN0IGNoYXIgKnBhdGgsIHNpemVfdCBwYXRoX2xlbiwgaW50IGxvY2FsKTsKKworLyoKKyAqIFVubGluayB0aGUgLnBhY2sgYW5kIGFzc29jaWF0ZWQgZXh0ZW5zaW9uIGZpbGVzLgorICogRG9lcyBub3QgdW5saW5rIGlmICdmb3JjZV9kZWxldGUnIGlzIGZhbHNlIGFuZCB0aGUgcGFjay1maWxlIGlzCisgKiBtYXJrZWQgYXMgIi5rZWVwIi4KKyAqLwordm9pZCB1bmxpbmtfcGFja19wYXRoKGNvbnN0IGNoYXIgKnBhY2tfbmFtZSwgaW50IGZvcmNlX2RlbGV0ZSk7CisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCBhIHBvaW50ZXIgYWNjZXNzIGludG8gYW4gbW1hcCdkIGluZGV4IGZpbGUgaXMgd2l0aGluIGJvdW5kcywKKyAqIGFuZCBjYW4gcHJvdmlkZSBhdCBsZWFzdCA4IGJ5dGVzIG9mIGRhdGEuCisgKgorICogTm90ZSB0aGF0IHRoaXMgaXMgb25seSBuZWNlc3NhcnkgZm9yIHZhcmlhYmxlLWxlbmd0aCBzZWdtZW50cyBvZiB0aGUgZmlsZQorICogKGxpa2UgdGhlIDY0LWJpdCBleHRlbmRlZCBvZmZzZXQgdGFibGUpLCBhcyB3ZSBjb21wYXJlIHRoZSBzaXplIHRvIHRoZQorICogZml4ZWQtbGVuZ3RoIHBhcnRzIHdoZW4gd2Ugb3BlbiB0aGUgZmlsZS4KKyAqLwordm9pZCBjaGVja19wYWNrX2luZGV4X3B0cihjb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgY29uc3Qgdm9pZCAqcHRyKTsKKworLyoKKyAqIFBlcmZvcm0gYmluYXJ5IHNlYXJjaCBvbiBhIHBhY2staW5kZXggZm9yIGEgZ2l2ZW4gb2lkLiBQYWNrZmlsZSBpcyBleHBlY3RlZCB0bworICogaGF2ZSBhIHZhbGlkIHBhY2staW5kZXguCisgKgorICogU2VlICdic2VhcmNoX2hhc2gnIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCitpbnQgYnNlYXJjaF9wYWNrKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKnAsIHVpbnQzMl90ICpyZXN1bHQpOworCisvKgorICogV3JpdGUgdGhlIG9pZCBvZiB0aGUgbnRoIG9iamVjdCB3aXRoaW4gdGhlIHNwZWNpZmllZCBwYWNrZmlsZSBpbnRvIHRoZSBmaXJzdAorICogcGFyYW1ldGVyLiBPcGVuIHRoZSBpbmRleCBpZiBpdCBpcyBub3QgYWxyZWFkeSBvcGVuLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsCisgKiBuZWdhdGl2ZSBvdGhlcndpc2UuCisgKi8KK2ludCBudGhfcGFja2VkX29iamVjdF9pZChzdHJ1Y3Qgb2JqZWN0X2lkICosIHN0cnVjdCBwYWNrZWRfZ2l0ICosIHVpbnQzMl90IG4pOworCisvKgorICogUmV0dXJuIHRoZSBvZmZzZXQgb2YgdGhlIG50aCBvYmplY3Qgd2l0aGluIHRoZSBzcGVjaWZpZWQgcGFja2ZpbGUuCisgKiBUaGUgaW5kZXggbXVzdCBhbHJlYWR5IGJlIG9wZW5lZC4KKyAqLworb2ZmX3QgbnRoX3BhY2tlZF9vYmplY3Rfb2Zmc2V0KGNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICosIHVpbnQzMl90IG4pOworCisvKgorICogSWYgdGhlIG9iamVjdCBuYW1lZCBzaGExIGlzIHByZXNlbnQgaW4gdGhlIHNwZWNpZmllZCBwYWNrZmlsZSwKKyAqIHJldHVybiBpdHMgb2Zmc2V0IHdpdGhpbiB0aGUgcGFja2ZpbGU7IG90aGVyd2lzZSwgcmV0dXJuIDAuCisgKi8KK29mZl90IGZpbmRfcGFja19lbnRyeV9vbmUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgc3RydWN0IHBhY2tlZF9naXQgKik7CisKK2ludCBpc19wYWNrX3ZhbGlkKHN0cnVjdCBwYWNrZWRfZ2l0ICopOwordm9pZCAqdW5wYWNrX2VudHJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgcGFja2VkX2dpdCAqLCBvZmZfdCwgZW51bSBvYmplY3RfdHlwZSAqLCB1bnNpZ25lZCBsb25nICopOwordW5zaWduZWQgbG9uZyB1bnBhY2tfb2JqZWN0X2hlYWRlcl9idWZmZXIoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwgdW5zaWduZWQgbG9uZyAqc2l6ZXApOwordW5zaWduZWQgbG9uZyBnZXRfc2l6ZV9mcm9tX2RlbHRhKHN0cnVjdCBwYWNrZWRfZ2l0ICosIHN0cnVjdCBwYWNrX3dpbmRvdyAqKiwgb2ZmX3QpOworaW50IHVucGFja19vYmplY3RfaGVhZGVyKHN0cnVjdCBwYWNrZWRfZ2l0ICosIHN0cnVjdCBwYWNrX3dpbmRvdyAqKiwgb2ZmX3QgKiwgdW5zaWduZWQgbG9uZyAqKTsKK29mZl90IGdldF9kZWx0YV9iYXNlKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCSAgICAgb2ZmX3QgKmN1cnBvcywgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkgICAgIG9mZl90IGRlbHRhX29ial9vZmZzZXQpOworCit2b2lkIHJlbGVhc2VfcGFja19tZW1vcnkoc2l6ZV90KTsKKworLyogZ2xvYmFsIGZsYWcgdG8gZW5hYmxlIGV4dHJhIGNoZWNrcyB3aGVuIGFjY2Vzc2luZyBwYWNrZWQgb2JqZWN0cyAqLworZXh0ZXJuIGludCBkb19jaGVja19wYWNrZWRfb2JqZWN0X2NyYzsKKworaW50IHBhY2tlZF9vYmplY3RfaW5mbyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgICAgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrLAorCQkgICAgICAgb2ZmX3Qgb2Zmc2V0LCBzdHJ1Y3Qgb2JqZWN0X2luZm8gKik7CisKK3ZvaWQgbWFya19iYWRfcGFja2VkX29iamVjdChzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7Citjb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqaGFzX3BhY2tlZF9hbmRfYmFkKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworLyoKKyAqIElmZiBhIHBhY2sgZmlsZSBpbiB0aGUgZ2l2ZW4gcmVwb3NpdG9yeSBjb250YWlucyB0aGUgb2JqZWN0IG5hbWVkIGJ5IHNoYTEsCisgKiByZXR1cm4gdHJ1ZSBhbmQgc3RvcmUgaXRzIGxvY2F0aW9uIHRvIGUuCisgKi8KK2ludCBmaW5kX3BhY2tfZW50cnkoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgc3RydWN0IHBhY2tfZW50cnkgKmUpOworCitpbnQgaGFzX29iamVjdF9wYWNrKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKK2ludCBoYXNfcGFja19pbmRleChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworLyoKKyAqIFJldHVybiAxIGlmIGFuIG9iamVjdCBpbiBhIHByb21pc29yIHBhY2tmaWxlIGlzIG9yIHJlZmVycyB0byB0aGUgZ2l2ZW4KKyAqIG9iamVjdCwgMCBvdGhlcndpc2UuCisgKi8KK2ludCBpc19wcm9taXNvcl9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoKKyAqIEV4cG9zZSBhIGZ1bmN0aW9uIGZvciBmdXp6IHRlc3RpbmcuCisgKgorICogbG9hZF9pZHgoKSBwYXJzZXMgYSBibG9jayBvZiBtZW1vcnkgYXMgYSBwYWNrZmlsZSBpbmRleCBhbmQgcHV0cyB0aGUgcmVzdWx0cworICogaW50byBhIHN0cnVjdCBwYWNrZWRfZ2l0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LiBJdCBpcyBleHBvc2VkIGhlcmUgb25seSBzbyB0aGF0IHdlCisgKiBoYXZlIGEgY29udmVuaWVudCBlbnRyeS1wb2ludCBmb3IgZnV6eiB0ZXN0aW5nLiBGb3IgcmVhbCB1c2VzLCB5b3Ugc2hvdWxkCisgKiBwcm9iYWJseSB1c2Ugb3Blbl9wYWNrX2luZGV4KCkgb3IgcGFyc2VfcGFja19pbmRleCgpIGluc3RlYWQuCisgKi8KK2ludCBsb2FkX2lkeChjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBpbnQgaGFzaHN6LCB2b2lkICppZHhfbWFwLAorCSAgICAgc2l6ZV90IGlkeF9zaXplLCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcGFnZXIuYyBiL3BhZ2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0NDZkNAotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VyLmMKQEAgLTAsMCArMSwyNTAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJhbGlhcy5oIgorCisjaWZuZGVmIERFRkFVTFRfUEFHRVIKKyNkZWZpbmUgREVGQVVMVF9QQUdFUiAibGVzcyIKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGNoaWxkX3Byb2Nlc3MgcGFnZXJfcHJvY2VzcyA9IENISUxEX1BST0NFU1NfSU5JVDsKK3N0YXRpYyBjb25zdCBjaGFyICpwYWdlcl9wcm9ncmFtOworCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYWdlcihpbnQgaW5fc2lnbmFsKQoreworCWlmICghaW5fc2lnbmFsKSB7CisJCWZmbHVzaChzdGRvdXQpOworCQlmZmx1c2goc3RkZXJyKTsKKwl9CisJLyogc2lnbmFsIEVPRiB0byBwYWdlciAqLworCWNsb3NlKDEpOworCWNsb3NlKDIpOworCWlmIChpbl9zaWduYWwpCisJCWZpbmlzaF9jb21tYW5kX2luX3NpZ25hbCgmcGFnZXJfcHJvY2Vzcyk7CisJZWxzZQorCQlmaW5pc2hfY29tbWFuZCgmcGFnZXJfcHJvY2Vzcyk7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX3BhZ2VyX2F0ZXhpdCh2b2lkKQoreworCXdhaXRfZm9yX3BhZ2VyKDApOworfQorCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYWdlcl9zaWduYWwoaW50IHNpZ25vKQoreworCXdhaXRfZm9yX3BhZ2VyKDEpOworCXNpZ2NoYWluX3BvcChzaWdubyk7CisJcmFpc2Uoc2lnbm8pOworfQorCitzdGF0aWMgaW50IGNvcmVfcGFnZXJfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5wYWdlciIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnBhZ2VyX3Byb2dyYW0sIHZhciwgdmFsdWUpOworCXJldHVybiAwOworfQorCitjb25zdCBjaGFyICpnaXRfcGFnZXIoaW50IHN0ZG91dF9pc190dHkpCit7CisJY29uc3QgY2hhciAqcGFnZXI7CisKKwlpZiAoIXN0ZG91dF9pc190dHkpCisJCXJldHVybiBOVUxMOworCisJcGFnZXIgPSBnZXRlbnYoIkdJVF9QQUdFUiIpOworCWlmICghcGFnZXIpIHsKKwkJaWYgKCFwYWdlcl9wcm9ncmFtKQorCQkJcmVhZF9lYXJseV9jb25maWcoY29yZV9wYWdlcl9jb25maWcsIE5VTEwpOworCQlwYWdlciA9IHBhZ2VyX3Byb2dyYW07CisJfQorCWlmICghcGFnZXIpCisJCXBhZ2VyID0gZ2V0ZW52KCJQQUdFUiIpOworCWlmICghcGFnZXIpCisJCXBhZ2VyID0gREVGQVVMVF9QQUdFUjsKKwlpZiAoISpwYWdlciB8fCAhc3RyY21wKHBhZ2VyLCAiY2F0IikpCisJCXBhZ2VyID0gTlVMTDsKKworCXJldHVybiBwYWdlcjsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfcGFnZXJfZW52KHN0cnVjdCBhcmd2X2FycmF5ICplbnYpCit7CisJY29uc3QgY2hhciAqKmFyZ3Y7CisJaW50IGk7CisJY2hhciAqcGFnZXJfZW52ID0geHN0cmR1cChQQUdFUl9FTlYpOworCWludCBuID0gc3BsaXRfY21kbGluZShwYWdlcl9lbnYsICZhcmd2KTsKKworCWlmIChuIDwgMCkKKwkJZGllKCJtYWxmb3JtZWQgYnVpbGQtdGltZSBQQUdFUl9FTlY6ICVzIiwKKwkJCXNwbGl0X2NtZGxpbmVfc3RyZXJyb3IobikpOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQljaGFyICpjcCA9IHN0cmNocihhcmd2W2ldLCAnPScpOworCisJCWlmICghY3ApCisJCQlkaWUoIm1hbGZvcm1lZCBidWlsZC10aW1lIFBBR0VSX0VOViIpOworCisJCSpjcCA9ICdcMCc7CisJCWlmICghZ2V0ZW52KGFyZ3ZbaV0pKSB7CisJCQkqY3AgPSAnPSc7CisJCQlhcmd2X2FycmF5X3B1c2goZW52LCBhcmd2W2ldKTsKKwkJfQorCX0KKwlmcmVlKHBhZ2VyX2Vudik7CisJZnJlZShhcmd2KTsKK30KKwordm9pZCBwcmVwYXJlX3BhZ2VyX2FyZ3Moc3RydWN0IGNoaWxkX3Byb2Nlc3MgKnBhZ2VyX3Byb2Nlc3MsIGNvbnN0IGNoYXIgKnBhZ2VyKQoreworCWFyZ3ZfYXJyYXlfcHVzaCgmcGFnZXJfcHJvY2Vzcy0+YXJncywgcGFnZXIpOworCXBhZ2VyX3Byb2Nlc3MtPnVzZV9zaGVsbCA9IDE7CisJc2V0dXBfcGFnZXJfZW52KCZwYWdlcl9wcm9jZXNzLT5lbnZfYXJyYXkpOworCXBhZ2VyX3Byb2Nlc3MtPnRyYWNlMl9jaGlsZF9jbGFzcyA9ICJwYWdlciI7Cit9CisKK3ZvaWQgc2V0dXBfcGFnZXIodm9pZCkKK3sKKwljb25zdCBjaGFyICpwYWdlciA9IGdpdF9wYWdlcihpc2F0dHkoMSkpOworCisJaWYgKCFwYWdlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBZnRlciB3ZSByZWRpcmVjdCBzdGFuZGFyZCBvdXRwdXQsIHdlIHdvbid0IGJlIGFibGUgdG8gdXNlIGFuIGlvY3RsCisJICogdG8gZ2V0IHRoZSB0ZXJtaW5hbCBzaXplLiBMZXQncyBncmFiIGl0IG5vdywgYW5kIHRoZW4gc2V0ICRDT0xVTU5TCisJICogdG8gY29tbXVuaWNhdGUgaXQgdG8gYW55IHN1Yi1wcm9jZXNzZXMuCisJICovCisJeworCQljaGFyIGJ1Zls2NF07CisJCXhzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCB0ZXJtX2NvbHVtbnMoKSk7CisJCXNldGVudigiQ09MVU1OUyIsIGJ1ZiwgMCk7CisJfQorCisJc2V0ZW52KCJHSVRfUEFHRVJfSU5fVVNFIiwgInRydWUiLCAxKTsKKworCS8qIHNwYXduIHRoZSBwYWdlciAqLworCXByZXBhcmVfcGFnZXJfYXJncygmcGFnZXJfcHJvY2VzcywgcGFnZXIpOworCXBhZ2VyX3Byb2Nlc3MuaW4gPSAtMTsKKwlhcmd2X2FycmF5X3B1c2goJnBhZ2VyX3Byb2Nlc3MuZW52X2FycmF5LCAiR0lUX1BBR0VSX0lOX1VTRSIpOworCWlmIChzdGFydF9jb21tYW5kKCZwYWdlcl9wcm9jZXNzKSkKKwkJcmV0dXJuOworCisJLyogb3JpZ2luYWwgcHJvY2VzcyBjb250aW51ZXMsIGJ1dCB3cml0ZXMgdG8gdGhlIHBpcGUgKi8KKwlkdXAyKHBhZ2VyX3Byb2Nlc3MuaW4sIDEpOworCWlmIChpc2F0dHkoMikpCisJCWR1cDIocGFnZXJfcHJvY2Vzcy5pbiwgMik7CisJY2xvc2UocGFnZXJfcHJvY2Vzcy5pbik7CisKKwkvKiB0aGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgcGFyZW50IHRlcm1pbmF0ZXMgYWZ0ZXIgdGhlIHBhZ2VyICovCisJc2lnY2hhaW5fcHVzaF9jb21tb24od2FpdF9mb3JfcGFnZXJfc2lnbmFsKTsKKwlhdGV4aXQod2FpdF9mb3JfcGFnZXJfYXRleGl0KTsKK30KKworaW50IHBhZ2VyX2luX3VzZSh2b2lkKQoreworCXJldHVybiBnaXRfZW52X2Jvb2woIkdJVF9QQUdFUl9JTl9VU0UiLCAwKTsKK30KKworLyoKKyAqIFJldHVybiBjYWNoZWQgdmFsdWUgKGlmIHNldCkgb3IgJENPTFVNTlMgZW52aXJvbm1lbnQgdmFyaWFibGUgKGlmCisgKiBzZXQgYW5kIHBvc2l0aXZlKSBvciBpb2N0bCgxLCBUSU9DR1dJTlNaKS53c19jb2wgKGlmIHBvc2l0aXZlKSwKKyAqIGFuZCBkZWZhdWx0IHRvIDgwIGlmIGFsbCBlbHNlIGZhaWxzLgorICovCitpbnQgdGVybV9jb2x1bW5zKHZvaWQpCit7CisJc3RhdGljIGludCB0ZXJtX2NvbHVtbnNfYXRfc3RhcnR1cDsKKworCWNoYXIgKmNvbF9zdHJpbmc7CisJaW50IG5fY29sczsKKworCWlmICh0ZXJtX2NvbHVtbnNfYXRfc3RhcnR1cCkKKwkJcmV0dXJuIHRlcm1fY29sdW1uc19hdF9zdGFydHVwOworCisJdGVybV9jb2x1bW5zX2F0X3N0YXJ0dXAgPSA4MDsKKworCWNvbF9zdHJpbmcgPSBnZXRlbnYoIkNPTFVNTlMiKTsKKwlpZiAoY29sX3N0cmluZyAmJiAobl9jb2xzID0gYXRvaShjb2xfc3RyaW5nKSkgPiAwKQorCQl0ZXJtX2NvbHVtbnNfYXRfc3RhcnR1cCA9IG5fY29sczsKKyNpZmRlZiBUSU9DR1dJTlNaCisJZWxzZSB7CisJCXN0cnVjdCB3aW5zaXplIHdzOworCQlpZiAoIWlvY3RsKDEsIFRJT0NHV0lOU1osICZ3cykgJiYgd3Mud3NfY29sKQorCQkJdGVybV9jb2x1bW5zX2F0X3N0YXJ0dXAgPSB3cy53c19jb2w7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gdGVybV9jb2x1bW5zX2F0X3N0YXJ0dXA7Cit9CisKKy8qCisgKiBDbGVhciB0aGUgZW50aXJlIGxpbmUsIGxlYXZlIGN1cnNvciBpbiBmaXJzdCBjb2x1bW4uCisgKi8KK3ZvaWQgdGVybV9jbGVhcl9saW5lKHZvaWQpCit7CisJaWYgKGlzX3Rlcm1pbmFsX2R1bWIoKSkKKwkJLyoKKwkJICogRmFsbCBiYWNrIHRvIHByaW50IGEgdGVybWluYWwgd2lkdGggd29ydGggb2Ygc3BhY2UKKwkJICogY2hhcmFjdGVycyAoaG9waW5nIHRoYXQgdGhlIHRlcm1pbmFsIGlzIHN0aWxsIGFzIHdpZGUKKwkJICogYXMgaXQgd2FzIHVwb24gdGhlIGZpcnN0IGNhbGwgdG8gdGVybV9jb2x1bW5zKCkpLgorCQkgKi8KKwkJZnByaW50ZihzdGRlcnIsICJcciUqc1xyIiwgdGVybV9jb2x1bW5zKCksICIiKTsKKwllbHNlCisJCS8qCisJCSAqIE9uIG5vbi1kdW1iIHRlcm1pbmFscyB1c2UgYW4gZXNjYXBlIHNlcXVlbmNlIHRvIGNsZWFyCisJCSAqIHRoZSB3aG9sZSBsaW5lLCBubyBtYXR0ZXIgaG93IHdpZGUgdGhlIHRlcm1pbmFsLgorCQkgKi8KKwkJZnB1dHMoIlxyXDAzM1tLIiwgc3RkZXJyKTsKK30KKworLyoKKyAqIEhvdyBtYW55IGNvbHVtbnMgZG8gd2UgbmVlZCB0byBzaG93IHRoaXMgbnVtYmVyIGluIGRlY2ltYWw/CisgKi8KK2ludCBkZWNpbWFsX3dpZHRoKHVpbnRtYXhfdCBudW1iZXIpCit7CisJaW50IHdpZHRoOworCisJZm9yICh3aWR0aCA9IDE7IG51bWJlciA+PSAxMDsgd2lkdGgrKykKKwkJbnVtYmVyIC89IDEwOworCXJldHVybiB3aWR0aDsKK30KKworc3RydWN0IHBhZ2VyX2NvbW1hbmRfY29uZmlnX2RhdGEgeworCWNvbnN0IGNoYXIgKmNtZDsKKwlpbnQgd2FudDsKKwljaGFyICp2YWx1ZTsKK307CisKK3N0YXRpYyBpbnQgcGFnZXJfY29tbWFuZF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqdmRhdGEpCit7CisJc3RydWN0IHBhZ2VyX2NvbW1hbmRfY29uZmlnX2RhdGEgKmRhdGEgPSB2ZGF0YTsKKwljb25zdCBjaGFyICpjbWQ7CisKKwlpZiAoc2tpcF9wcmVmaXgodmFyLCAicGFnZXIuIiwgJmNtZCkgJiYgIXN0cmNtcChjbWQsIGRhdGEtPmNtZCkpIHsKKwkJaW50IGIgPSBnaXRfcGFyc2VfbWF5YmVfYm9vbCh2YWx1ZSk7CisJCWlmIChiID49IDApCisJCQlkYXRhLT53YW50ID0gYjsKKwkJZWxzZSB7CisJCQlkYXRhLT53YW50ID0gMTsKKwkJCWRhdGEtPnZhbHVlID0geHN0cmR1cCh2YWx1ZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogcmV0dXJucyAwIGZvciAibm8gcGFnZXIiLCAxIGZvciAidXNlIHBhZ2VyIiwgYW5kIC0xIGZvciAibm90IHNwZWNpZmllZCIgKi8KK2ludCBjaGVja19wYWdlcl9jb25maWcoY29uc3QgY2hhciAqY21kKQoreworCXN0cnVjdCBwYWdlcl9jb21tYW5kX2NvbmZpZ19kYXRhIGRhdGE7CisKKwlkYXRhLmNtZCA9IGNtZDsKKwlkYXRhLndhbnQgPSAtMTsKKwlkYXRhLnZhbHVlID0gTlVMTDsKKworCXJlYWRfZWFybHlfY29uZmlnKHBhZ2VyX2NvbW1hbmRfY29uZmlnLCAmZGF0YSk7CisKKwlpZiAoZGF0YS52YWx1ZSkKKwkJcGFnZXJfcHJvZ3JhbSA9IGRhdGEudmFsdWU7CisJcmV0dXJuIGRhdGEud2FudDsKK30KZGlmZiAtLWdpdCBhL3BhcnNlLW9wdGlvbnMtY2IuYyBiL3BhcnNlLW9wdGlvbnMtY2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmNkMzkzCi0tLSAvZGV2L251bGwKKysrIGIvcGFyc2Utb3B0aW9ucy1jYi5jCkBAIC0wLDAgKzEsMjkzIEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJvaWQtYXJyYXkuaCIKKworLyotLS0tLSBzb21lIG9mdGVuIHVzZWQgb3B0aW9ucyAtLS0tLSovCisKK2ludCBwYXJzZV9vcHRfYWJicmV2X2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50IHY7CisKKwlpZiAoIWFyZykgeworCQl2ID0gdW5zZXQgPyAwIDogREVGQVVMVF9BQkJSRVY7CisJfSBlbHNlIHsKKwkJaWYgKCEqYXJnKQorCQkJcmV0dXJuIGVycm9yKF8oIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiKSwKKwkJCQkgICAgIG9wdC0+bG9uZ19uYW1lKTsKKwkJdiA9IHN0cnRvbChhcmcsIChjaGFyICoqKSZhcmcsIDEwKTsKKwkJaWYgKCphcmcpCisJCQlyZXR1cm4gZXJyb3IoXygib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIpLAorCQkJCSAgICAgb3B0LT5sb25nX25hbWUpOworCQlpZiAodiAmJiB2IDwgTUlOSU1VTV9BQkJSRVYpCisJCQl2ID0gTUlOSU1VTV9BQkJSRVY7CisJCWVsc2UgaWYgKHYgPiB0aGVfaGFzaF9hbGdvLT5oZXhzeikKKwkJCXYgPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKwl9CisJKihpbnQgKikob3B0LT52YWx1ZSkgPSB2OworCXJldHVybiAwOworfQorCitpbnQgcGFyc2Vfb3B0X2V4cGlyeV9kYXRlX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgICBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KQorCQlhcmcgPSAibmV2ZXIiOworCWlmIChwYXJzZV9leHBpcnlfZGF0ZShhcmcsICh0aW1lc3RhbXBfdCAqKW9wdC0+dmFsdWUpKQorCQlkaWUoXygibWFsZm9ybWVkIGV4cGlyYXRpb24gZGF0ZSAnJXMnIiksIGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9vcHRfY29sb3JfZmxhZ19jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICBpbnQgdW5zZXQpCit7CisJaW50IHZhbHVlOworCisJaWYgKCFhcmcpCisJCWFyZyA9IHVuc2V0ID8gIm5ldmVyIiA6IChjb25zdCBjaGFyICopb3B0LT5kZWZ2YWw7CisJdmFsdWUgPSBnaXRfY29uZmlnX2NvbG9yYm9vbChOVUxMLCBhcmcpOworCWlmICh2YWx1ZSA8IDApCisJCXJldHVybiBlcnJvcihfKCJvcHRpb24gYCVzJyBleHBlY3RzIFwiYWx3YXlzXCIsIFwiYXV0b1wiLCBvciBcIm5ldmVyXCIiKSwKKwkJCSAgICAgb3B0LT5sb25nX25hbWUpOworCSooaW50ICopb3B0LT52YWx1ZSA9IHZhbHVlOworCXJldHVybiAwOworfQorCitpbnQgcGFyc2Vfb3B0X3ZlcmJvc2l0eV9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgIGludCB1bnNldCkKK3sKKwlpbnQgKnRhcmdldCA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCisJaWYgKHVuc2V0KQorCQkvKiAtLW5vLXF1aWV0LCAtLW5vLXZlcmJvc2UgKi8KKwkJKnRhcmdldCA9IDA7CisJZWxzZSBpZiAob3B0LT5zaG9ydF9uYW1lID09ICd2JykgeworCQlpZiAoKnRhcmdldCA+PSAwKQorCQkJKCp0YXJnZXQpKys7CisJCWVsc2UKKwkJCSp0YXJnZXQgPSAxOworCX0gZWxzZSB7CisJCWlmICgqdGFyZ2V0IDw9IDApCisJCQkoKnRhcmdldCktLTsKKwkJZWxzZQorCQkJKnRhcmdldCA9IC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX29wdF9jb21taXRzKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJaWYgKCFhcmcpCisJCXJldHVybiAtMTsKKwlpZiAoZ2V0X29pZChhcmcsICZvaWQpKQorCQlyZXR1cm4gZXJyb3IoIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIsIGFyZyk7CisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksICZvaWQpOworCWlmICghY29tbWl0KQorCQlyZXR1cm4gZXJyb3IoIm5vIHN1Y2ggY29tbWl0ICVzIiwgYXJnKTsKKwljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCBvcHQtPnZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX29wdF9jb21taXQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGNvbW1pdCAqKnRhcmdldCA9IG9wdC0+dmFsdWU7CisKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCWlmIChnZXRfb2lkKGFyZywgJm9pZCkpCisJCXJldHVybiBlcnJvcigibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIiwgYXJnKTsKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJaWYgKCFjb21taXQpCisJCXJldHVybiBlcnJvcigibm8gc3VjaCBjb21taXQgJXMiLCBhcmcpOworCSp0YXJnZXQgPSBjb21taXQ7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9vcHRfb2JqZWN0X25hbWUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCWlmICh1bnNldCkgeworCQlvaWRfYXJyYXlfY2xlYXIob3B0LT52YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCWlmIChnZXRfb2lkKGFyZywgJm9pZCkpCisJCXJldHVybiBlcnJvcihfKCJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIpLCBhcmcpOworCW9pZF9hcnJheV9hcHBlbmQob3B0LT52YWx1ZSwgJm9pZCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9vcHRfb2JqZWN0X2lkKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IG9iamVjdF9pZCAqdGFyZ2V0ID0gb3B0LT52YWx1ZTsKKworCWlmICh1bnNldCkgeworCQkqdGFyZ2V0ID0gbnVsbF9vaWQ7CisJCXJldHVybiAwOworCX0KKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCWlmIChnZXRfb2lkKGFyZywgJm9pZCkpCisJCXJldHVybiBlcnJvcihfKCJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIpLCBhcmcpOworCSp0YXJnZXQgPSBvaWQ7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9vcHRfdGVydGlhcnkoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgKnRhcmdldCA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCisJKnRhcmdldCA9IHVuc2V0ID8gMiA6IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzaXplX3QgcGFyc2Vfb3B0aW9uc19jb3VudChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQpCit7CisJc2l6ZV90IG4gPSAwOworCisJZm9yICg7IG9wdCAmJiBvcHQtPnR5cGUgIT0gT1BUSU9OX0VORDsgb3B0KyspCisJCW4rKzsKKwlyZXR1cm4gbjsKK30KKworc3RydWN0IG9wdGlvbiAqcGFyc2Vfb3B0aW9uc19kdXAoY29uc3Qgc3RydWN0IG9wdGlvbiAqbykKK3sKKwlzdHJ1Y3Qgb3B0aW9uIG5vX29wdGlvbnNbXSA9IHsgT1BUX0VORCgpIH07CisKKwlyZXR1cm4gcGFyc2Vfb3B0aW9uc19jb25jYXQobywgbm9fb3B0aW9ucyk7Cit9CisKK3N0cnVjdCBvcHRpb24gKnBhcnNlX29wdGlvbnNfY29uY2F0KGNvbnN0IHN0cnVjdCBvcHRpb24gKmEsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmIpCit7CisJc3RydWN0IG9wdGlvbiAqcmV0OworCXNpemVfdCBhX2xlbiA9IHBhcnNlX29wdGlvbnNfY291bnQoYSk7CisJc2l6ZV90IGJfbGVuID0gcGFyc2Vfb3B0aW9uc19jb3VudChiKTsKKworCUFMTE9DX0FSUkFZKHJldCwgc3RfYWRkMyhhX2xlbiwgYl9sZW4sIDEpKTsKKwlDT1BZX0FSUkFZKHJldCwgYSwgYV9sZW4pOworCUNPUFlfQVJSQVkocmV0ICsgYV9sZW4sIGIsIGJfbGVuICsgMSk7IC8qICsgMSBmb3IgZmluYWwgT1BUSU9OX0VORCAqLworCisJcmV0dXJuIHJldDsKK30KKworaW50IHBhcnNlX29wdF9zdHJpbmdfbGlzdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqdiA9IG9wdC0+dmFsdWU7CisKKwlpZiAodW5zZXQpIHsKKwkJc3RyaW5nX2xpc3RfY2xlYXIodiwgMCk7CisJCXJldHVybiAwOworCX0KKworCWlmICghYXJnKQorCQlyZXR1cm4gLTE7CisKKwlzdHJpbmdfbGlzdF9hcHBlbmQodiwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX29wdF9ub29wX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogUmVwb3J0IHRoYXQgdGhlIG9wdGlvbiBpcyB1bmtub3duLCBzbyB0aGF0IG90aGVyIGNvZGUgY2FuIGhhbmRsZQorICogaXQuIFRoaXMgY2FuIGJlIHVzZWQgYXMgYSBjYWxsYmFjayB0b2dldGhlciB3aXRoCisgKiBPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0sgdG8gYWxsb3cgYW4gb3B0aW9uIHRvIGJlIGRvY3VtZW50ZWQgaW4gdGhlCisgKiAiLWgiIG91dHB1dCBldmVuIGlmIGl0J3Mgbm90IGJlaW5nIGhhbmRsZWQgZGlyZWN0bHkgYnkKKyAqIHBhcnNlX29wdGlvbnMoKS4KKyAqLworZW51bSBwYXJzZV9vcHRfcmVzdWx0IHBhcnNlX29wdF91bmtub3duX2NiKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCQkJICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCXJldHVybiBQQVJTRV9PUFRfVU5LTk9XTjsKK30KKworLyoqCisgKiBSZWNyZWF0ZXMgdGhlIGNvbW1hbmQtbGluZSBvcHRpb24gaW4gdGhlIHN0cmJ1Zi4KKyAqLworc3RhdGljIGludCByZWNyZWF0ZV9vcHQoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RyYnVmX3Jlc2V0KHNiKTsKKworCWlmIChvcHQtPmxvbmdfbmFtZSkgeworCQlzdHJidWZfYWRkc3RyKHNiLCB1bnNldCA/ICItLW5vLSIgOiAiLS0iKTsKKwkJc3RyYnVmX2FkZHN0cihzYiwgb3B0LT5sb25nX25hbWUpOworCQlpZiAoYXJnKSB7CisJCQlzdHJidWZfYWRkY2goc2IsICc9Jyk7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBhcmcpOworCQl9CisJfSBlbHNlIGlmIChvcHQtPnNob3J0X25hbWUgJiYgIXVuc2V0KSB7CisJCXN0cmJ1Zl9hZGRjaChzYiwgJy0nKTsKKwkJc3RyYnVmX2FkZGNoKHNiLCBvcHQtPnNob3J0X25hbWUpOworCQlpZiAoYXJnKQorCQkJc3RyYnVmX2FkZHN0cihzYiwgYXJnKTsKKwl9IGVsc2UKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogRm9yIGFuIG9wdGlvbiBvcHQsIHJlY3JlYXRlcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiBpbiBvcHQtPnZhbHVlIHdoaWNoCisgKiBtdXN0IGJlIGFuIGNoYXIqIGluaXRpYWxpemVkIHRvIE5VTEwuIFRoaXMgaXMgdXNlZnVsIHdoZW4gd2UgbmVlZCB0byBwYXNzCisgKiB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiB0byBhbm90aGVyIGNvbW1hbmQuIFNpbmNlIGFueSBwcmV2aW91cyB2YWx1ZSB3aWxsIGJlCisgKiBvdmVyd3JpdHRlbiwgdGhpcyBjYWxsYmFjayBzaG91bGQgb25seSBiZSB1c2VkIGZvciBvcHRpb25zIHdoZXJlIHRoZSBsYXN0CisgKiBvbmUgd2lucy4KKyAqLworaW50IHBhcnNlX29wdF9wYXNzdGhydShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqKm9wdF92YWx1ZSA9IG9wdC0+dmFsdWU7CisKKwlpZiAocmVjcmVhdGVfb3B0KCZzYiwgb3B0LCBhcmcsIHVuc2V0KSA8IDApCisJCXJldHVybiAtMTsKKworCWZyZWUoKm9wdF92YWx1ZSk7CisKKwkqb3B0X3ZhbHVlID0gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogRm9yIGFuIG9wdGlvbiBvcHQsIHJlY3JlYXRlIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uLCBhcHBlbmRpbmcgaXQgdG8KKyAqIG9wdC0+dmFsdWUgd2hpY2ggbXVzdCBiZSBhIGFyZ3ZfYXJyYXkuIFRoaXMgaXMgdXNlZnVsIHdoZW4gd2UgbmVlZCB0byBwYXNzCisgKiB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiwgd2hpY2ggY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcywgdG8gYW5vdGhlcgorICogY29tbWFuZC4KKyAqLworaW50IHBhcnNlX29wdF9wYXNzdGhydV9hcmd2KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgYXJndl9hcnJheSAqb3B0X3ZhbHVlID0gb3B0LT52YWx1ZTsKKworCWlmIChyZWNyZWF0ZV9vcHQoJnNiLCBvcHQsIGFyZywgdW5zZXQpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJYXJndl9hcnJheV9wdXNoKG9wdF92YWx1ZSwgc2IuYnVmKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy5jIGIvcGFyc2Utb3B0aW9ucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzYxOGQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJzZS1vcHRpb25zLmMKQEAgLTAsMCArMSwxMDA1IEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisKK3N0YXRpYyBpbnQgZGlzYWxsb3dfYWJicmV2aWF0ZWRfb3B0aW9uczsKKworI2RlZmluZSBPUFRfU0hPUlQgMQorI2RlZmluZSBPUFRfVU5TRVQgMgorCitpbnQgb3B0YnVnKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqcmVhc29uKQoreworCWlmIChvcHQtPmxvbmdfbmFtZSkgeworCQlpZiAob3B0LT5zaG9ydF9uYW1lKQorCQkJcmV0dXJuIGVycm9yKCJCVUc6IHN3aXRjaCAnJWMnICgtLSVzKSAlcyIsCisJCQkJICAgICBvcHQtPnNob3J0X25hbWUsIG9wdC0+bG9uZ19uYW1lLCByZWFzb24pOworCQlyZXR1cm4gZXJyb3IoIkJVRzogb3B0aW9uICclcycgJXMiLCBvcHQtPmxvbmdfbmFtZSwgcmVhc29uKTsKKwl9CisJcmV0dXJuIGVycm9yKCJCVUc6IHN3aXRjaCAnJWMnICVzIiwgb3B0LT5zaG9ydF9uYW1lLCByZWFzb24pOworfQorCitzdGF0aWMgZW51bSBwYXJzZV9vcHRfcmVzdWx0IGdldF9hcmcoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqcCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgICAgIGludCBmbGFncywgY29uc3QgY2hhciAqKmFyZykKK3sKKwlpZiAocC0+b3B0KSB7CisJCSphcmcgPSBwLT5vcHQ7CisJCXAtPm9wdCA9IE5VTEw7CisJfSBlbHNlIGlmIChwLT5hcmdjID09IDEgJiYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfTEFTVEFSR19ERUZBVUxUKSkgeworCQkqYXJnID0gKGNvbnN0IGNoYXIgKilvcHQtPmRlZnZhbDsKKwl9IGVsc2UgaWYgKHAtPmFyZ2MgPiAxKSB7CisJCXAtPmFyZ2MtLTsKKwkJKmFyZyA9ICorK3AtPmFyZ3Y7CisJfSBlbHNlCisJCXJldHVybiBlcnJvcihfKCIlcyByZXF1aXJlcyBhIHZhbHVlIiksIG9wdG5hbWUob3B0LCBmbGFncykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmaXhfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICoqZmlsZSkKK3sKKwlpZiAoIWZpbGUgfHwgISpmaWxlIHx8ICFwcmVmaXggfHwgaXNfYWJzb2x1dGVfcGF0aCgqZmlsZSkKKwkgICAgfHwgIXN0cmNtcCgiLSIsICpmaWxlKSkKKwkJcmV0dXJuOworCSpmaWxlID0gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgKmZpbGUpOworfQorCitzdGF0aWMgZW51bSBwYXJzZV9vcHRfcmVzdWx0IG9wdF9jb21tYW5kX21vZGVfZXJyb3IoCisJY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCWNvbnN0IHN0cnVjdCBvcHRpb24gKmFsbF9vcHRzLAorCWludCBmbGFncykKK3sKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uICp0aGF0OworCXN0cnVjdCBzdHJidWYgdGhhdF9uYW1lID0gU1RSQlVGX0lOSVQ7CisKKwkvKgorCSAqIEZpbmQgdGhlIG90aGVyIG9wdGlvbiB0aGF0IHdhcyB1c2VkIHRvIHNldCB0aGUgdmFyaWFibGUKKwkgKiBhbHJlYWR5LCBhbmQgcmVwb3J0IHRoYXQgdGhpcyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGl0LgorCSAqLworCWZvciAodGhhdCA9IGFsbF9vcHRzOyB0aGF0LT50eXBlICE9IE9QVElPTl9FTkQ7IHRoYXQrKykgeworCQlpZiAodGhhdCA9PSBvcHQgfHwKKwkJICAgICEodGhhdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfQ01ETU9ERSkgfHwKKwkJICAgIHRoYXQtPnZhbHVlICE9IG9wdC0+dmFsdWUgfHwKKwkJICAgIHRoYXQtPmRlZnZhbCAhPSAqKGludCAqKW9wdC0+dmFsdWUpCisJCQljb250aW51ZTsKKworCQlpZiAodGhhdC0+bG9uZ19uYW1lKQorCQkJc3RyYnVmX2FkZGYoJnRoYXRfbmFtZSwgIi0tJXMiLCB0aGF0LT5sb25nX25hbWUpOworCQllbHNlCisJCQlzdHJidWZfYWRkZigmdGhhdF9uYW1lLCAiLSVjIiwgdGhhdC0+c2hvcnRfbmFtZSk7CisJCWVycm9yKF8oIiVzIGlzIGluY29tcGF0aWJsZSB3aXRoICVzIiksCisJCSAgICAgIG9wdG5hbWUob3B0LCBmbGFncyksIHRoYXRfbmFtZS5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmdGhhdF9uYW1lKTsKKwkJcmV0dXJuIFBBUlNFX09QVF9FUlJPUjsKKwl9CisJcmV0dXJuIGVycm9yKF8oIiVzIDogaW5jb21wYXRpYmxlIHdpdGggc29tZXRoaW5nIGVsc2UiKSwKKwkJICAgICBvcHRuYW1lKG9wdCwgZmxhZ3MpKTsKK30KKworc3RhdGljIGVudW0gcGFyc2Vfb3B0X3Jlc3VsdCBnZXRfdmFsdWUoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqcCwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICphbGxfb3B0cywKKwkJCQkgICAgICAgaW50IGZsYWdzKQoreworCWNvbnN0IGNoYXIgKnMsICphcmc7CisJY29uc3QgaW50IHVuc2V0ID0gZmxhZ3MgJiBPUFRfVU5TRVQ7CisJaW50IGVycjsKKworCWlmICh1bnNldCAmJiBwLT5vcHQpCisJCXJldHVybiBlcnJvcihfKCIlcyB0YWtlcyBubyB2YWx1ZSIpLCBvcHRuYW1lKG9wdCwgZmxhZ3MpKTsKKwlpZiAodW5zZXQgJiYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9ORUcpKQorCQlyZXR1cm4gZXJyb3IoXygiJXMgaXNuJ3QgYXZhaWxhYmxlIiksIG9wdG5hbWUob3B0LCBmbGFncykpOworCWlmICghKGZsYWdzICYgT1BUX1NIT1JUKSAmJiBwLT5vcHQgJiYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9BUkcpKQorCQlyZXR1cm4gZXJyb3IoXygiJXMgdGFrZXMgbm8gdmFsdWUiKSwgb3B0bmFtZShvcHQsIGZsYWdzKSk7CisKKwkvKgorCSAqIEdpdmluZyB0aGUgc2FtZSBtb2RlIG9wdGlvbiB0d2ljZSwgYWx0aG91Z2ggdW5uZWNlc3NhcnksCisJICogaXMgbm90IGEgZ3JhdmUgZXJyb3IsIHNvIGxldCBpdCBwYXNzLgorCSAqLworCWlmICgob3B0LT5mbGFncyAmIFBBUlNFX09QVF9DTURNT0RFKSAmJgorCSAgICAqKGludCAqKW9wdC0+dmFsdWUgJiYgKihpbnQgKilvcHQtPnZhbHVlICE9IG9wdC0+ZGVmdmFsKQorCQlyZXR1cm4gb3B0X2NvbW1hbmRfbW9kZV9lcnJvcihvcHQsIGFsbF9vcHRzLCBmbGFncyk7CisKKwlzd2l0Y2ggKG9wdC0+dHlwZSkgeworCWNhc2UgT1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLOgorCQlyZXR1cm4gb3B0LT5sbF9jYWxsYmFjayhwLCBvcHQsIE5VTEwsIHVuc2V0KTsKKworCWNhc2UgT1BUSU9OX0JJVDoKKwkJaWYgKHVuc2V0KQorCQkJKihpbnQgKilvcHQtPnZhbHVlICY9IH5vcHQtPmRlZnZhbDsKKwkJZWxzZQorCQkJKihpbnQgKilvcHQtPnZhbHVlIHw9IG9wdC0+ZGVmdmFsOworCQlyZXR1cm4gMDsKKworCWNhc2UgT1BUSU9OX05FR0JJVDoKKwkJaWYgKHVuc2V0KQorCQkJKihpbnQgKilvcHQtPnZhbHVlIHw9IG9wdC0+ZGVmdmFsOworCQllbHNlCisJCQkqKGludCAqKW9wdC0+dmFsdWUgJj0gfm9wdC0+ZGVmdmFsOworCQlyZXR1cm4gMDsKKworCWNhc2UgT1BUSU9OX0JJVE9QOgorCQlpZiAodW5zZXQpCisJCQlCVUcoIkJJVE9QIGNhbid0IGhhdmUgdW5zZXQgZm9ybSIpOworCQkqKGludCAqKW9wdC0+dmFsdWUgJj0gfm9wdC0+ZXh0cmE7CisJCSooaW50ICopb3B0LT52YWx1ZSB8PSBvcHQtPmRlZnZhbDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIE9QVElPTl9DT1VOVFVQOgorCQlpZiAoKihpbnQgKilvcHQtPnZhbHVlIDwgMCkKKwkJCSooaW50ICopb3B0LT52YWx1ZSA9IDA7CisJCSooaW50ICopb3B0LT52YWx1ZSA9IHVuc2V0ID8gMCA6ICooaW50ICopb3B0LT52YWx1ZSArIDE7CisJCXJldHVybiAwOworCisJY2FzZSBPUFRJT05fU0VUX0lOVDoKKwkJKihpbnQgKilvcHQtPnZhbHVlID0gdW5zZXQgPyAwIDogb3B0LT5kZWZ2YWw7CisJCXJldHVybiAwOworCisJY2FzZSBPUFRJT05fU1RSSU5HOgorCQlpZiAodW5zZXQpCisJCQkqKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSA9IE5VTEw7CisJCWVsc2UgaWYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHICYmICFwLT5vcHQpCisJCQkqKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSA9IChjb25zdCBjaGFyICopb3B0LT5kZWZ2YWw7CisJCWVsc2UKKwkJCXJldHVybiBnZXRfYXJnKHAsIG9wdCwgZmxhZ3MsIChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWUpOworCQlyZXR1cm4gMDsKKworCWNhc2UgT1BUSU9OX0ZJTEVOQU1FOgorCQllcnIgPSAwOworCQlpZiAodW5zZXQpCisJCQkqKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSA9IE5VTEw7CisJCWVsc2UgaWYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHICYmICFwLT5vcHQpCisJCQkqKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSA9IChjb25zdCBjaGFyICopb3B0LT5kZWZ2YWw7CisJCWVsc2UKKwkJCWVyciA9IGdldF9hcmcocCwgb3B0LCBmbGFncywgKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSk7CisKKwkJaWYgKCFlcnIpCisJCQlmaXhfZmlsZW5hbWUocC0+cHJlZml4LCAoY29uc3QgY2hhciAqKilvcHQtPnZhbHVlKTsKKwkJcmV0dXJuIGVycjsKKworCWNhc2UgT1BUSU9OX0NBTExCQUNLOgorCXsKKwkJY29uc3QgY2hhciAqcF9hcmcgPSBOVUxMOworCQlpbnQgcF91bnNldDsKKworCQlpZiAodW5zZXQpCisJCQlwX3Vuc2V0ID0gMTsKKwkJZWxzZSBpZiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9OT0FSRykKKwkJCXBfdW5zZXQgPSAwOworCQllbHNlIGlmIChvcHQtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRyAmJiAhcC0+b3B0KQorCQkJcF91bnNldCA9IDA7CisJCWVsc2UgaWYgKGdldF9hcmcocCwgb3B0LCBmbGFncywgJmFyZykpCisJCQlyZXR1cm4gLTE7CisJCWVsc2UgeworCQkJcF91bnNldCA9IDA7CisJCQlwX2FyZyA9IGFyZzsKKwkJfQorCQlpZiAob3B0LT5jYWxsYmFjaykKKwkJCXJldHVybiAoKm9wdC0+Y2FsbGJhY2spKG9wdCwgcF9hcmcsIHBfdW5zZXQpID8gKC0xKSA6IDA7CisJCWVsc2UKKwkJCXJldHVybiAoKm9wdC0+bGxfY2FsbGJhY2spKHAsIG9wdCwgcF9hcmcsIHBfdW5zZXQpOworCX0KKwljYXNlIE9QVElPTl9JTlRFR0VSOgorCQlpZiAodW5zZXQpIHsKKwkJCSooaW50ICopb3B0LT52YWx1ZSA9IDA7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcgJiYgIXAtPm9wdCkgeworCQkJKihpbnQgKilvcHQtPnZhbHVlID0gb3B0LT5kZWZ2YWw7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoZ2V0X2FyZyhwLCBvcHQsIGZsYWdzLCAmYXJnKSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKCEqYXJnKQorCQkJcmV0dXJuIGVycm9yKF8oIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiKSwKKwkJCQkgICAgIG9wdG5hbWUob3B0LCBmbGFncykpOworCQkqKGludCAqKW9wdC0+dmFsdWUgPSBzdHJ0b2woYXJnLCAoY2hhciAqKikmcywgMTApOworCQlpZiAoKnMpCisJCQlyZXR1cm4gZXJyb3IoXygiJXMgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIpLAorCQkJCSAgICAgb3B0bmFtZShvcHQsIGZsYWdzKSk7CisJCXJldHVybiAwOworCisJY2FzZSBPUFRJT05fTUFHTklUVURFOgorCQlpZiAodW5zZXQpIHsKKwkJCSoodW5zaWduZWQgbG9uZyAqKW9wdC0+dmFsdWUgPSAwOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHICYmICFwLT5vcHQpIHsKKwkJCSoodW5zaWduZWQgbG9uZyAqKW9wdC0+dmFsdWUgPSBvcHQtPmRlZnZhbDsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChnZXRfYXJnKHAsIG9wdCwgZmxhZ3MsICZhcmcpKQorCQkJcmV0dXJuIC0xOworCQlpZiAoIWdpdF9wYXJzZV91bG9uZyhhcmcsIG9wdC0+dmFsdWUpKQorCQkJcmV0dXJuIGVycm9yKF8oIiVzIGV4cGVjdHMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSIKKwkJCQkgICAgICAgIiB3aXRoIGFuIG9wdGlvbmFsIGsvbS9nIHN1ZmZpeCIpLAorCQkJCSAgICAgb3B0bmFtZShvcHQsIGZsYWdzKSk7CisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKwkJQlVHKCJvcHQtPnR5cGUgJWQgc2hvdWxkIG5vdCBoYXBwZW4iLCBvcHQtPnR5cGUpOworCX0KK30KKworc3RhdGljIGVudW0gcGFyc2Vfb3B0X3Jlc3VsdCBwYXJzZV9zaG9ydF9vcHQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqcCwKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zKQoreworCWNvbnN0IHN0cnVjdCBvcHRpb24gKmFsbF9vcHRzID0gb3B0aW9uczsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uICpudW1vcHQgPSBOVUxMOworCisJZm9yICg7IG9wdGlvbnMtPnR5cGUgIT0gT1BUSU9OX0VORDsgb3B0aW9ucysrKSB7CisJCWlmIChvcHRpb25zLT5zaG9ydF9uYW1lID09ICpwLT5vcHQpIHsKKwkJCXAtPm9wdCA9IHAtPm9wdFsxXSA/IHAtPm9wdCArIDEgOiBOVUxMOworCQkJcmV0dXJuIGdldF92YWx1ZShwLCBvcHRpb25zLCBhbGxfb3B0cywgT1BUX1NIT1JUKTsKKwkJfQorCisJCS8qCisJCSAqIEhhbmRsZSB0aGUgbnVtZXJpY2FsIG9wdGlvbiBsYXRlciwgZXhwbGljaXQgb25lLWRpZ2l0CisJCSAqIG9wdGlvbnMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgaXQuCisJCSAqLworCQlpZiAob3B0aW9ucy0+dHlwZSA9PSBPUFRJT05fTlVNQkVSKQorCQkJbnVtb3B0ID0gb3B0aW9uczsKKwl9CisJaWYgKG51bW9wdCAmJiBpc2RpZ2l0KCpwLT5vcHQpKSB7CisJCXNpemVfdCBsZW4gPSAxOworCQljaGFyICphcmc7CisJCWludCByYzsKKworCQl3aGlsZSAoaXNkaWdpdChwLT5vcHRbbGVuXSkpCisJCQlsZW4rKzsKKwkJYXJnID0geG1lbWR1cHoocC0+b3B0LCBsZW4pOworCQlwLT5vcHQgPSBwLT5vcHRbbGVuXSA/IHAtPm9wdCArIGxlbiA6IE5VTEw7CisJCWlmIChudW1vcHQtPmNhbGxiYWNrKQorCQkJcmMgPSAoKm51bW9wdC0+Y2FsbGJhY2spKG51bW9wdCwgYXJnLCAwKSA/ICgtMSkgOiAwOworCQllbHNlCisJCQlyYyA9ICgqbnVtb3B0LT5sbF9jYWxsYmFjaykocCwgbnVtb3B0LCBhcmcsIDApOworCQlmcmVlKGFyZyk7CisJCXJldHVybiByYzsKKwl9CisJcmV0dXJuIFBBUlNFX09QVF9VTktOT1dOOworfQorCitzdGF0aWMgaW50IGhhc19zdHJpbmcoY29uc3QgY2hhciAqaXQsIGNvbnN0IGNoYXIgKiphcnJheSkKK3sKKwl3aGlsZSAoKmFycmF5KQorCQlpZiAoIXN0cmNtcChpdCwgKihhcnJheSsrKSkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19hbGlhcyhzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCSAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvbmVfb3B0LAorCQkgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqYW5vdGhlcl9vcHQpCit7CisJY29uc3QgY2hhciAqKmdyb3VwOworCisJaWYgKCFjdHgtPmFsaWFzX2dyb3VwcykKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW9uZV9vcHQtPmxvbmdfbmFtZSB8fCAhYW5vdGhlcl9vcHQtPmxvbmdfbmFtZSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGdyb3VwID0gY3R4LT5hbGlhc19ncm91cHM7ICpncm91cDsgZ3JvdXAgKz0gMykgeworCQkvKiBpdCBhbmQgb3RoZXIgYXJlIGZyb20gdGhlIHNhbWUgZmFtaWx5PyAqLworCQlpZiAoaGFzX3N0cmluZyhvbmVfb3B0LT5sb25nX25hbWUsIGdyb3VwKSAmJgorCQkgICAgaGFzX3N0cmluZyhhbm90aGVyX29wdC0+bG9uZ19uYW1lLCBncm91cCkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIHBhcnNlX29wdF9yZXN1bHQgcGFyc2VfbG9uZ19vcHQoCisJc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqcCwgY29uc3QgY2hhciAqYXJnLAorCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpCit7CisJY29uc3Qgc3RydWN0IG9wdGlvbiAqYWxsX29wdHMgPSBvcHRpb25zOworCWNvbnN0IGNoYXIgKmFyZ19lbmQgPSBzdHJjaHJudWwoYXJnLCAnPScpOworCWNvbnN0IHN0cnVjdCBvcHRpb24gKmFiYnJldl9vcHRpb24gPSBOVUxMLCAqYW1iaWd1b3VzX29wdGlvbiA9IE5VTEw7CisJaW50IGFiYnJldl9mbGFncyA9IDAsIGFtYmlndW91c19mbGFncyA9IDA7CisKKwlmb3IgKDsgb3B0aW9ucy0+dHlwZSAhPSBPUFRJT05fRU5EOyBvcHRpb25zKyspIHsKKwkJY29uc3QgY2hhciAqcmVzdCwgKmxvbmdfbmFtZSA9IG9wdGlvbnMtPmxvbmdfbmFtZTsKKwkJaW50IGZsYWdzID0gMCwgb3B0X2ZsYWdzID0gMDsKKworCQlpZiAoIWxvbmdfbmFtZSkKKwkJCWNvbnRpbnVlOworCithZ2FpbjoKKwkJaWYgKCFza2lwX3ByZWZpeChhcmcsIGxvbmdfbmFtZSwgJnJlc3QpKQorCQkJcmVzdCA9IE5VTEw7CisJCWlmIChvcHRpb25zLT50eXBlID09IE9QVElPTl9BUkdVTUVOVCkgeworCQkJaWYgKCFyZXN0KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCpyZXN0ID09ICc9JykKKwkJCQlyZXR1cm4gZXJyb3IoXygiJXMgdGFrZXMgbm8gdmFsdWUiKSwKKwkJCQkJICAgICBvcHRuYW1lKG9wdGlvbnMsIGZsYWdzKSk7CisJCQlpZiAoKnJlc3QpCisJCQkJY29udGludWU7CisJCQlpZiAob3B0aW9ucy0+dmFsdWUpCisJCQkJKihpbnQgKilvcHRpb25zLT52YWx1ZSA9IG9wdGlvbnMtPmRlZnZhbDsKKwkJCXAtPm91dFtwLT5jcGlkeCsrXSA9IGFyZyAtIDI7CisJCQlyZXR1cm4gUEFSU0VfT1BUX0RPTkU7CisJCX0KKwkJaWYgKCFyZXN0KSB7CisJCQkvKiBhYmJyZXZpYXRlZD8gKi8KKwkJCWlmICghKHAtPmZsYWdzICYgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTikgJiYKKwkJCSAgICAhc3RybmNtcChsb25nX25hbWUsIGFyZywgYXJnX2VuZCAtIGFyZykpIHsKK2lzX2FiYnJldmlhdGVkOgorCQkJCWlmIChhYmJyZXZfb3B0aW9uICYmCisJCQkJICAgICFpc19hbGlhcyhwLCBhYmJyZXZfb3B0aW9uLCBvcHRpb25zKSkgeworCQkJCQkvKgorCQkJCQkgKiBJZiB0aGlzIGlzIGFiYnJldmlhdGVkLCBpdCBpcworCQkJCQkgKiBhbWJpZ3VvdXMuIFNvIHdoZW4gdGhlcmUgaXMgbm8KKwkJCQkJICogZXhhY3QgbWF0Y2ggbGF0ZXIsIHdlIG5lZWQgdG8KKwkJCQkJICogZXJyb3Igb3V0LgorCQkJCQkgKi8KKwkJCQkJYW1iaWd1b3VzX29wdGlvbiA9IGFiYnJldl9vcHRpb247CisJCQkJCWFtYmlndW91c19mbGFncyA9IGFiYnJldl9mbGFnczsKKwkJCQl9CisJCQkJaWYgKCEoZmxhZ3MgJiBPUFRfVU5TRVQpICYmICphcmdfZW5kKQorCQkJCQlwLT5vcHQgPSBhcmdfZW5kICsgMTsKKwkJCQlhYmJyZXZfb3B0aW9uID0gb3B0aW9uczsKKwkJCQlhYmJyZXZfZmxhZ3MgPSBmbGFncyBeIG9wdF9mbGFnczsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIG5lZ2F0aW9uIGFsbG93ZWQ/ICovCisJCQlpZiAob3B0aW9ucy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9ORUcpCisJCQkJY29udGludWU7CisJCQkvKiBuZWdhdGVkIGFuZCBhYmJyZXZpYXRlZCB2ZXJ5IG11Y2g/ICovCisJCQlpZiAoc3RhcnRzX3dpdGgoIm5vLSIsIGFyZykpIHsKKwkJCQlmbGFncyB8PSBPUFRfVU5TRVQ7CisJCQkJZ290byBpc19hYmJyZXZpYXRlZDsKKwkJCX0KKwkJCS8qIG5lZ2F0ZWQ/ICovCisJCQlpZiAoIXN0YXJ0c193aXRoKGFyZywgIm5vLSIpKSB7CisJCQkJaWYgKHNraXBfcHJlZml4KGxvbmdfbmFtZSwgIm5vLSIsICZsb25nX25hbWUpKSB7CisJCQkJCW9wdF9mbGFncyB8PSBPUFRfVU5TRVQ7CisJCQkJCWdvdG8gYWdhaW47CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZmxhZ3MgfD0gT1BUX1VOU0VUOworCQkJaWYgKCFza2lwX3ByZWZpeChhcmcgKyAzLCBsb25nX25hbWUsICZyZXN0KSkgeworCQkJCS8qIGFiYnJldmlhdGVkIGFuZCBuZWdhdGVkPyAqLworCQkJCWlmIChzdGFydHNfd2l0aChsb25nX25hbWUsIGFyZyArIDMpKQorCQkJCQlnb3RvIGlzX2FiYnJldmlhdGVkOworCQkJCWVsc2UKKwkJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJaWYgKCpyZXN0KSB7CisJCQlpZiAoKnJlc3QgIT0gJz0nKQorCQkJCWNvbnRpbnVlOworCQkJcC0+b3B0ID0gcmVzdCArIDE7CisJCX0KKwkJcmV0dXJuIGdldF92YWx1ZShwLCBvcHRpb25zLCBhbGxfb3B0cywgZmxhZ3MgXiBvcHRfZmxhZ3MpOworCX0KKworCWlmIChkaXNhbGxvd19hYmJyZXZpYXRlZF9vcHRpb25zICYmIChhbWJpZ3VvdXNfb3B0aW9uIHx8IGFiYnJldl9vcHRpb24pKQorCQlkaWUoImRpc2FsbG93ZWQgYWJicmV2aWF0ZWQgb3IgYW1iaWd1b3VzIG9wdGlvbiAnJS4qcyciLAorCQkgICAgKGludCkoYXJnX2VuZCAtIGFyZyksIGFyZyk7CisKKwlpZiAoYW1iaWd1b3VzX29wdGlvbikgeworCQllcnJvcihfKCJhbWJpZ3VvdXMgb3B0aW9uOiAlcyAiCisJCQkiKGNvdWxkIGJlIC0tJXMlcyBvciAtLSVzJXMpIiksCisJCQlhcmcsCisJCQkoYW1iaWd1b3VzX2ZsYWdzICYgT1BUX1VOU0VUKSA/ICAibm8tIiA6ICIiLAorCQkJYW1iaWd1b3VzX29wdGlvbi0+bG9uZ19uYW1lLAorCQkJKGFiYnJldl9mbGFncyAmIE9QVF9VTlNFVCkgPyAgIm5vLSIgOiAiIiwKKwkJCWFiYnJldl9vcHRpb24tPmxvbmdfbmFtZSk7CisJCXJldHVybiBQQVJTRV9PUFRfSEVMUDsKKwl9CisJaWYgKGFiYnJldl9vcHRpb24pCisJCXJldHVybiBnZXRfdmFsdWUocCwgYWJicmV2X29wdGlvbiwgYWxsX29wdHMsIGFiYnJldl9mbGFncyk7CisJcmV0dXJuIFBBUlNFX09QVF9VTktOT1dOOworfQorCitzdGF0aWMgaW50IHBhcnNlX25vZGFzaF9vcHQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqcCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpCit7CisJY29uc3Qgc3RydWN0IG9wdGlvbiAqYWxsX29wdHMgPSBvcHRpb25zOworCisJZm9yICg7IG9wdGlvbnMtPnR5cGUgIT0gT1BUSU9OX0VORDsgb3B0aW9ucysrKSB7CisJCWlmICghKG9wdGlvbnMtPmZsYWdzICYgUEFSU0VfT1BUX05PREFTSCkpCisJCQljb250aW51ZTsKKwkJaWYgKG9wdGlvbnMtPnNob3J0X25hbWUgPT0gYXJnWzBdICYmIGFyZ1sxXSA9PSAnXDAnKQorCQkJcmV0dXJuIGdldF92YWx1ZShwLCBvcHRpb25zLCBhbGxfb3B0cywgT1BUX1NIT1JUKTsKKwl9CisJcmV0dXJuIC0yOworfQorCitzdGF0aWMgdm9pZCBjaGVja190eXBvcyhjb25zdCBjaGFyICphcmcsIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpCit7CisJaWYgKHN0cmxlbihhcmcpIDwgMykKKwkJcmV0dXJuOworCisJaWYgKHN0YXJ0c193aXRoKGFyZywgIm5vLSIpKSB7CisJCWVycm9yKF8oImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyk/IiksIGFyZyk7CisJCWV4aXQoMTI5KTsKKwl9CisKKwlmb3IgKDsgb3B0aW9ucy0+dHlwZSAhPSBPUFRJT05fRU5EOyBvcHRpb25zKyspIHsKKwkJaWYgKCFvcHRpb25zLT5sb25nX25hbWUpCisJCQljb250aW51ZTsKKwkJaWYgKHN0YXJ0c193aXRoKG9wdGlvbnMtPmxvbmdfbmFtZSwgYXJnKSkgeworCQkJZXJyb3IoXygiZGlkIHlvdSBtZWFuIGAtLSVzYCAod2l0aCB0d28gZGFzaGVzKT8iKSwgYXJnKTsKKwkJCWV4aXQoMTI5KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcGFyc2Vfb3B0aW9uc19jaGVjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRzKQoreworCWludCBlcnIgPSAwOworCWNoYXIgc2hvcnRfb3B0c1sxMjhdOworCisJbWVtc2V0KHNob3J0X29wdHMsICdcMCcsIHNpemVvZihzaG9ydF9vcHRzKSk7CisJZm9yICg7IG9wdHMtPnR5cGUgIT0gT1BUSU9OX0VORDsgb3B0cysrKSB7CisJCWlmICgob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTEFTVEFSR19ERUZBVUxUKSAmJgorCQkgICAgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRykpCisJCQllcnIgfD0gb3B0YnVnKG9wdHMsICJ1c2VzIGluY29tcGF0aWJsZSBmbGFncyAiCisJCQkJCSJMQVNUQVJHX0RFRkFVTFQgYW5kIE9QVEFSRyIpOworCQlpZiAob3B0cy0+c2hvcnRfbmFtZSkgeworCQkJaWYgKDB4N0YgPD0gb3B0cy0+c2hvcnRfbmFtZSkKKwkJCQllcnIgfD0gb3B0YnVnKG9wdHMsICJpbnZhbGlkIHNob3J0IG5hbWUiKTsKKwkJCWVsc2UgaWYgKHNob3J0X29wdHNbb3B0cy0+c2hvcnRfbmFtZV0rKykKKwkJCQllcnIgfD0gb3B0YnVnKG9wdHMsICJzaG9ydCBuYW1lIGFscmVhZHkgdXNlZCIpOworCQl9CisJCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9OT0RBU0ggJiYKKwkJICAgICgob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKSB8fAorCQkgICAgICEob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9BUkcpIHx8CisJCSAgICAgIShvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9OT05FRykgfHwKKwkJICAgICBvcHRzLT5sb25nX25hbWUpKQorCQkJZXJyIHw9IG9wdGJ1ZyhvcHRzLCAidXNlcyBmZWF0dXJlICIKKwkJCQkJIm5vdCBzdXBwb3J0ZWQgZm9yIGRhc2hsZXNzIG9wdGlvbnMiKTsKKwkJc3dpdGNoIChvcHRzLT50eXBlKSB7CisJCWNhc2UgT1BUSU9OX0NPVU5UVVA6CisJCWNhc2UgT1BUSU9OX0JJVDoKKwkJY2FzZSBPUFRJT05fTkVHQklUOgorCQljYXNlIE9QVElPTl9TRVRfSU5UOgorCQljYXNlIE9QVElPTl9OVU1CRVI6CisJCQlpZiAoKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRykgfHwKKwkJCSAgICAhKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PQVJHKSkKKwkJCQllcnIgfD0gb3B0YnVnKG9wdHMsICJzaG91bGQgbm90IGFjY2VwdCBhbiBhcmd1bWVudCIpOworCQkJYnJlYWs7CisJCWNhc2UgT1BUSU9OX0NBTExCQUNLOgorCQkJaWYgKCFvcHRzLT5jYWxsYmFjayAmJiAhb3B0cy0+bGxfY2FsbGJhY2spCisJCQkJQlVHKCJPUFRJT05fQ0FMTEJBQ0sgbmVlZHMgb25lIGNhbGxiYWNrIik7CisJCQlpZiAob3B0cy0+Y2FsbGJhY2sgJiYgb3B0cy0+bGxfY2FsbGJhY2spCisJCQkJQlVHKCJPUFRJT05fQ0FMTEJBQ0sgY2FuJ3QgaGF2ZSB0d28gY2FsbGJhY2tzIik7CisJCQlicmVhazsKKwkJY2FzZSBPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0s6CisJCQlpZiAoIW9wdHMtPmxsX2NhbGxiYWNrKQorCQkJCUJVRygiT1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLIG5lZWRzIGEgY2FsbGJhY2siKTsKKwkJCWlmIChvcHRzLT5jYWxsYmFjaykKKwkJCQlCVUcoIk9QVElPTl9MT1dMRVZFTF9DQUxMQkFDSyBuZWVkcyBubyBoaWdoIGxldmVsIGNhbGxiYWNrIik7CisJCQlicmVhazsKKwkJY2FzZSBPUFRJT05fQUxJQVM6CisJCQlCVUcoIk9QVF9BTElBUygpIHNob3VsZCBub3QgcmVtYWluIGF0IHRoaXMgcG9pbnQuICIKKwkJCSAgICAiQXJlIHlvdSB1c2luZyBwYXJzZV9vcHRpb25zX3N0ZXAoKSBkaXJlY3RseT9cbiIKKwkJCSAgICAiVGhhdCBjYXNlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiIpOworCQlkZWZhdWx0OgorCQkJOyAvKiBvay4gKHVzdWFsbHkgYWNjZXB0cyBhbiBhcmd1bWVudCkgKi8KKwkJfQorCQlpZiAob3B0cy0+YXJnaCAmJgorCQkgICAgc3RyY3NwbihvcHRzLT5hcmdoLCAiIF8iKSAhPSBzdHJsZW4ob3B0cy0+YXJnaCkpCisJCQllcnIgfD0gb3B0YnVnKG9wdHMsICJtdWx0aS13b3JkIGFyZ2ggc2hvdWxkIHVzZSBkYXNoIHRvIHNlcGFyYXRlIHdvcmRzIik7CisJfQorCWlmIChlcnIpCisJCWV4aXQoMTI4KTsKK30KKworc3RhdGljIHZvaWQgcGFyc2Vfb3B0aW9uc19zdGFydF8xKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCQkgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywgaW50IGZsYWdzKQoreworCWN0eC0+YXJnYyA9IGFyZ2M7CisJY3R4LT5hcmd2ID0gYXJndjsKKwlpZiAoIShmbGFncyAmIFBBUlNFX09QVF9PTkVfU0hPVCkpIHsKKwkJY3R4LT5hcmdjLS07CisJCWN0eC0+YXJndisrOworCX0KKwljdHgtPnRvdGFsID0gY3R4LT5hcmdjOworCWN0eC0+b3V0ICAgPSBhcmd2OworCWN0eC0+cHJlZml4ID0gcHJlZml4OworCWN0eC0+Y3BpZHggPSAoKGZsYWdzICYgUEFSU0VfT1BUX0tFRVBfQVJHVjApICE9IDApOworCWN0eC0+ZmxhZ3MgPSBmbGFnczsKKwlpZiAoKGZsYWdzICYgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTikgJiYKKwkgICAgKGZsYWdzICYgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTikgJiYKKwkgICAgIShmbGFncyAmIFBBUlNFX09QVF9PTkVfU0hPVCkpCisJCUJVRygiU1RPUF9BVF9OT05fT1BUSU9OIGFuZCBLRUVQX1VOS05PV04gZG9uJ3QgZ28gdG9nZXRoZXIiKTsKKwlpZiAoKGZsYWdzICYgUEFSU0VfT1BUX09ORV9TSE9UKSAmJgorCSAgICAoZmxhZ3MgJiBQQVJTRV9PUFRfS0VFUF9BUkdWMCkpCisJCUJVRygiQ2FuJ3Qga2VlcCBhcmd2MCBpZiB5b3UgZG9uJ3QgaGF2ZSBpdCIpOworCXBhcnNlX29wdGlvbnNfY2hlY2sob3B0aW9ucyk7Cit9CisKK3ZvaWQgcGFyc2Vfb3B0aW9uc19zdGFydChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQkgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywgaW50IGZsYWdzKQoreworCW1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7CisJcGFyc2Vfb3B0aW9uc19zdGFydF8xKGN0eCwgYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbmVnYXRlZF9naXRjb21wKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMsIGludCBucl9ub29wdHMpCit7CisJaW50IHByaW50ZWRfZGFzaGRhc2ggPSAwOworCisJZm9yICg7IG9wdHMtPnR5cGUgIT0gT1BUSU9OX0VORDsgb3B0cysrKSB7CisJCWludCBoYXNfdW5zZXRfZm9ybSA9IDA7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJaWYgKCFvcHRzLT5sb25nX25hbWUpCisJCQljb250aW51ZTsKKwkJaWYgKG9wdHMtPmZsYWdzICYgKFBBUlNFX09QVF9ISURERU4gfCBQQVJTRV9PUFRfTk9DT01QTEVURSkpCisJCQljb250aW51ZTsKKwkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PTkVHKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChvcHRzLT50eXBlKSB7CisJCWNhc2UgT1BUSU9OX1NUUklORzoKKwkJY2FzZSBPUFRJT05fRklMRU5BTUU6CisJCWNhc2UgT1BUSU9OX0lOVEVHRVI6CisJCWNhc2UgT1BUSU9OX01BR05JVFVERToKKwkJY2FzZSBPUFRJT05fQ0FMTEJBQ0s6CisJCWNhc2UgT1BUSU9OX0JJVDoKKwkJY2FzZSBPUFRJT05fTkVHQklUOgorCQljYXNlIE9QVElPTl9DT1VOVFVQOgorCQljYXNlIE9QVElPTl9TRVRfSU5UOgorCQkJaGFzX3Vuc2V0X2Zvcm0gPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlpZiAoIWhhc191bnNldF9mb3JtKQorCQkJY29udGludWU7CisKKwkJaWYgKHNraXBfcHJlZml4KG9wdHMtPmxvbmdfbmFtZSwgIm5vLSIsICZuYW1lKSkgeworCQkJaWYgKG5yX25vb3B0cyA8IDApCisJCQkJcHJpbnRmKCIgLS0lcyIsIG5hbWUpOworCQl9IGVsc2UgaWYgKG5yX25vb3B0cyA+PSAwKSB7CisJCQlpZiAobnJfbm9vcHRzICYmICFwcmludGVkX2Rhc2hkYXNoKSB7CisJCQkJcHJpbnRmKCIgLS0iKTsKKwkJCQlwcmludGVkX2Rhc2hkYXNoID0gMTsKKwkJCX0KKwkJCXByaW50ZigiIC0tbm8tJXMiLCBvcHRzLT5sb25nX25hbWUpOworCQkJbnJfbm9vcHRzKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgc2hvd19naXRjb21wKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMpCit7CisJY29uc3Qgc3RydWN0IG9wdGlvbiAqb3JpZ2luYWxfb3B0cyA9IG9wdHM7CisJaW50IG5yX25vb3B0cyA9IDA7CisKKwlmb3IgKDsgb3B0cy0+dHlwZSAhPSBPUFRJT05fRU5EOyBvcHRzKyspIHsKKwkJY29uc3QgY2hhciAqc3VmZml4ID0gIiI7CisKKwkJaWYgKCFvcHRzLT5sb25nX25hbWUpCisJCQljb250aW51ZTsKKwkJaWYgKG9wdHMtPmZsYWdzICYgKFBBUlNFX09QVF9ISURERU4gfCBQQVJTRV9PUFRfTk9DT01QTEVURSkpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKG9wdHMtPnR5cGUpIHsKKwkJY2FzZSBPUFRJT05fR1JPVVA6CisJCQljb250aW51ZTsKKwkJY2FzZSBPUFRJT05fU1RSSU5HOgorCQljYXNlIE9QVElPTl9GSUxFTkFNRToKKwkJY2FzZSBPUFRJT05fSU5URUdFUjoKKwkJY2FzZSBPUFRJT05fTUFHTklUVURFOgorCQljYXNlIE9QVElPTl9DQUxMQkFDSzoKKwkJCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9OT0FSRykKKwkJCQlicmVhazsKKwkJCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpCisJCQkJYnJlYWs7CisJCQlpZiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTEFTVEFSR19ERUZBVUxUKQorCQkJCWJyZWFrOworCQkJc3VmZml4ID0gIj0iOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlpZiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfQ09NUF9BUkcpCisJCQlzdWZmaXggPSAiPSI7CisJCWlmIChzdGFydHNfd2l0aChvcHRzLT5sb25nX25hbWUsICJuby0iKSkKKwkJCW5yX25vb3B0cysrOworCQlwcmludGYoIiAtLSVzJXMiLCBvcHRzLT5sb25nX25hbWUsIHN1ZmZpeCk7CisJfQorCXNob3dfbmVnYXRlZF9naXRjb21wKG9yaWdpbmFsX29wdHMsIC0xKTsKKwlzaG93X25lZ2F0ZWRfZ2l0Y29tcChvcmlnaW5hbF9vcHRzLCBucl9ub29wdHMpOworCWZwdXRjKCdcbicsIHN0ZG91dCk7CisJcmV0dXJuIFBBUlNFX09QVF9DT01QTEVURTsKK30KKworLyoKKyAqIFNjYW4gYW5kIG1heSBwcm9kdWNlIGEgbmV3IG9wdGlvbltdIGFycmF5LCB3aGljaCBzaG91bGQgYmUgdXNlZAorICogaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgJ29wdGlvbnMnLgorICoKKyAqIFJpZ2h0IG5vdyB0aGlzIGlzIG9ubHkgdXNlZCB0byBwcmVwcm9jZXNzIGFuZCBzdWJzdGl0dXRlCisgKiBPUFRJT05fQUxJQVMuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uICpwcmVwcm9jZXNzX29wdGlvbnMoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJCQkgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucykKK3sKKwlzdHJ1Y3Qgb3B0aW9uICpuZXdvcHQ7CisJaW50IGksIG5yLCBhbGlhczsKKwlpbnQgbnJfYWxpYXNlcyA9IDA7CisKKwlmb3IgKG5yID0gMDsgb3B0aW9uc1tucl0udHlwZSAhPSBPUFRJT05fRU5EOyBucisrKSB7CisJCWlmIChvcHRpb25zW25yXS50eXBlID09IE9QVElPTl9BTElBUykKKwkJCW5yX2FsaWFzZXMrKzsKKwl9CisKKwlpZiAoIW5yX2FsaWFzZXMpCisJCXJldHVybiBOVUxMOworCisJQUxMT0NfQVJSQVkobmV3b3B0LCBuciArIDEpOworCUNPUFlfQVJSQVkobmV3b3B0LCBvcHRpb25zLCBuciArIDEpOworCisJLyogZWFjaCBhbGlhcyBoYXMgdHdvIHN0cmluZyBwb2ludGVycyBhbmQgTlVMTCAqLworCUNBTExPQ19BUlJBWShjdHgtPmFsaWFzX2dyb3VwcywgMyAqIChucl9hbGlhc2VzICsgMSkpOworCisJZm9yIChhbGlhcyA9IDAsIGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlpbnQgc2hvcnRfbmFtZTsKKwkJY29uc3QgY2hhciAqbG9uZ19uYW1lOworCQljb25zdCBjaGFyICpzb3VyY2U7CisJCXN0cnVjdCBzdHJidWYgaGVscCA9IFNUUkJVRl9JTklUOworCQlpbnQgajsKKworCQlpZiAobmV3b3B0W2ldLnR5cGUgIT0gT1BUSU9OX0FMSUFTKQorCQkJY29udGludWU7CisKKwkJc2hvcnRfbmFtZSA9IG5ld29wdFtpXS5zaG9ydF9uYW1lOworCQlsb25nX25hbWUgPSBuZXdvcHRbaV0ubG9uZ19uYW1lOworCQlzb3VyY2UgPSBuZXdvcHRbaV0udmFsdWU7CisKKwkJaWYgKCFsb25nX25hbWUpCisJCQlCVUcoIkFuIGFsaWFzIG11c3QgaGF2ZSBsb25nIG9wdGlvbiBuYW1lIik7CisJCXN0cmJ1Zl9hZGRmKCZoZWxwLCBfKCJhbGlhcyBvZiAtLSVzIiksIHNvdXJjZSk7CisKKwkJZm9yIChqID0gMDsgaiA8IG5yOyBqKyspIHsKKwkJCWNvbnN0IGNoYXIgKm5hbWUgPSBvcHRpb25zW2pdLmxvbmdfbmFtZTsKKworCQkJaWYgKCFuYW1lIHx8IHN0cmNtcChuYW1lLCBzb3VyY2UpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAob3B0aW9uc1tqXS50eXBlID09IE9QVElPTl9BTElBUykKKwkJCQlCVUcoIk5vIHBsZWFzZS4gTmVzdGVkIGFsaWFzZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIik7CisKKwkJCW1lbWNweShuZXdvcHQgKyBpLCBvcHRpb25zICsgaiwgc2l6ZW9mKCpuZXdvcHQpKTsKKwkJCW5ld29wdFtpXS5zaG9ydF9uYW1lID0gc2hvcnRfbmFtZTsKKwkJCW5ld29wdFtpXS5sb25nX25hbWUgPSBsb25nX25hbWU7CisJCQluZXdvcHRbaV0uaGVscCA9IHN0cmJ1Zl9kZXRhY2goJmhlbHAsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaiA9PSBucikKKwkJCUJVRygiY291bGQgbm90IGZpbmQgc291cmNlIG9wdGlvbiAnJXMnIG9mIGFsaWFzICclcyciLAorCQkJICAgIHNvdXJjZSwgbmV3b3B0W2ldLmxvbmdfbmFtZSk7CisJCWN0eC0+YWxpYXNfZ3JvdXBzW2FsaWFzICogMyArIDBdID0gbmV3b3B0W2ldLmxvbmdfbmFtZTsKKwkJY3R4LT5hbGlhc19ncm91cHNbYWxpYXMgKiAzICsgMV0gPSBvcHRpb25zW2pdLmxvbmdfbmFtZTsKKwkJY3R4LT5hbGlhc19ncm91cHNbYWxpYXMgKiAzICsgMl0gPSBOVUxMOworCQlhbGlhcysrOworCX0KKworCXJldHVybiBuZXdvcHQ7Cit9CisKK3N0YXRpYyBpbnQgdXNhZ2Vfd2l0aF9vcHRpb25zX2ludGVybmFsKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKiwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqIGNvbnN0ICosCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgaW50LCBpbnQpOworCitpbnQgcGFyc2Vfb3B0aW9uc19zdGVwKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCisJCSAgICAgICBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSkKK3sKKwlpbnQgaW50ZXJuYWxfaGVscCA9ICEoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9OT19JTlRFUk5BTF9IRUxQKTsKKworCS8qIHdlIG11c3QgcmVzZXQgLT5vcHQsIHVua25vd24gc2hvcnQgb3B0aW9uIGxlYXZlIGl0IGRhbmdsaW5nICovCisJY3R4LT5vcHQgPSBOVUxMOworCisJZm9yICg7IGN0eC0+YXJnYzsgY3R4LT5hcmdjLS0sIGN0eC0+YXJndisrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGN0eC0+YXJndlswXTsKKworCQlpZiAoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9PTkVfU0hPVCAmJgorCQkgICAgY3R4LT5hcmdjICE9IGN0eC0+dG90YWwpCisJCQlicmVhazsKKworCQlpZiAoKmFyZyAhPSAnLScgfHwgIWFyZ1sxXSkgeworCQkJaWYgKHBhcnNlX25vZGFzaF9vcHQoY3R4LCBhcmcsIG9wdGlvbnMpID09IDApCisJCQkJY29udGludWU7CisJCQlpZiAoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pCisJCQkJcmV0dXJuIFBBUlNFX09QVF9OT05fT1BUSU9OOworCQkJY3R4LT5vdXRbY3R4LT5jcGlkeCsrXSA9IGN0eC0+YXJndlswXTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogbG9uZSAtaCBhc2tzIGZvciBoZWxwICovCisJCWlmIChpbnRlcm5hbF9oZWxwICYmIGN0eC0+dG90YWwgPT0gMSAmJiAhc3RyY21wKGFyZyArIDEsICJoIikpCisJCQlnb3RvIHNob3dfdXNhZ2U7CisKKwkJLyogbG9uZSAtLWdpdC1jb21wbGV0aW9uLWhlbHBlciBpcyBhc2tlZCBieSBnaXQtY29tcGxldGlvbi5iYXNoICovCisJCWlmIChjdHgtPnRvdGFsID09IDEgJiYgIXN0cmNtcChhcmcgKyAxLCAiLWdpdC1jb21wbGV0aW9uLWhlbHBlciIpKQorCQkJcmV0dXJuIHNob3dfZ2l0Y29tcChvcHRpb25zKTsKKworCQlpZiAoYXJnWzFdICE9ICctJykgeworCQkJY3R4LT5vcHQgPSBhcmcgKyAxOworCQkJc3dpdGNoIChwYXJzZV9zaG9ydF9vcHQoY3R4LCBvcHRpb25zKSkgeworCQkJY2FzZSBQQVJTRV9PUFRfRVJST1I6CisJCQkJcmV0dXJuIFBBUlNFX09QVF9FUlJPUjsKKwkJCWNhc2UgUEFSU0VfT1BUX1VOS05PV046CisJCQkJaWYgKGN0eC0+b3B0KQorCQkJCQljaGVja190eXBvcyhhcmcgKyAxLCBvcHRpb25zKTsKKwkJCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAqY3R4LT5vcHQgPT0gJ2gnKQorCQkJCQlnb3RvIHNob3dfdXNhZ2U7CisJCQkJZ290byB1bmtub3duOworCQkJY2FzZSBQQVJTRV9PUFRfTk9OX09QVElPTjoKKwkJCWNhc2UgUEFSU0VfT1BUX0hFTFA6CisJCQljYXNlIFBBUlNFX09QVF9DT01QTEVURToKKwkJCQlCVUcoInBhcnNlX3Nob3J0X29wdCgpIGNhbm5vdCByZXR1cm4gdGhlc2UiKTsKKwkJCWNhc2UgUEFSU0VfT1BUX0RPTkU6CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoY3R4LT5vcHQpCisJCQkJY2hlY2tfdHlwb3MoYXJnICsgMSwgb3B0aW9ucyk7CisJCQl3aGlsZSAoY3R4LT5vcHQpIHsKKwkJCQlzd2l0Y2ggKHBhcnNlX3Nob3J0X29wdChjdHgsIG9wdGlvbnMpKSB7CisJCQkJY2FzZSBQQVJTRV9PUFRfRVJST1I6CisJCQkJCXJldHVybiBQQVJTRV9PUFRfRVJST1I7CisJCQkJY2FzZSBQQVJTRV9PUFRfVU5LTk9XTjoKKwkJCQkJaWYgKGludGVybmFsX2hlbHAgJiYgKmN0eC0+b3B0ID09ICdoJykKKwkJCQkJCWdvdG8gc2hvd191c2FnZTsKKworCQkJCQkvKiBmYWtlIGEgc2hvcnQgb3B0aW9uIHRoaW5nIHRvIGhpZGUgdGhlIGZhY3QgdGhhdCB3ZSBtYXkgaGF2ZQorCQkJCQkgKiBzdGFydGVkIHRvIHBhcnNlIGFnZ3JlZ2F0ZWQgc3R1ZmYKKwkJCQkJICoKKwkJCQkJICogVGhpcyBpcyBsZWFreSwgdG9vIGJhZC4KKwkJCQkJICovCisJCQkJCWN0eC0+YXJndlswXSA9IHhzdHJkdXAoY3R4LT5vcHQgLSAxKTsKKwkJCQkJKihjaGFyICopY3R4LT5hcmd2WzBdID0gJy0nOworCQkJCQlnb3RvIHVua25vd247CisJCQkJY2FzZSBQQVJTRV9PUFRfTk9OX09QVElPTjoKKwkJCQljYXNlIFBBUlNFX09QVF9DT01QTEVURToKKwkJCQljYXNlIFBBUlNFX09QVF9IRUxQOgorCQkJCQlCVUcoInBhcnNlX3Nob3J0X29wdCgpIGNhbm5vdCByZXR1cm4gdGhlc2UiKTsKKwkJCQljYXNlIFBBUlNFX09QVF9ET05FOgorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghYXJnWzJdIC8qICItLSIgKi8gfHwKKwkJICAgICFzdHJjbXAoYXJnICsgMiwgImVuZC1vZi1vcHRpb25zIikpIHsKKwkJCWlmICghKGN0eC0+ZmxhZ3MgJiBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCkpIHsKKwkJCQljdHgtPmFyZ2MtLTsKKwkJCQljdHgtPmFyZ3YrKzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGludGVybmFsX2hlbHAgJiYgIXN0cmNtcChhcmcgKyAyLCAiaGVscC1hbGwiKSkKKwkJCXJldHVybiB1c2FnZV93aXRoX29wdGlvbnNfaW50ZXJuYWwoY3R4LCB1c2FnZXN0ciwgb3B0aW9ucywgMSwgMCk7CisJCWlmIChpbnRlcm5hbF9oZWxwICYmICFzdHJjbXAoYXJnICsgMiwgImhlbHAiKSkKKwkJCWdvdG8gc2hvd191c2FnZTsKKwkJc3dpdGNoIChwYXJzZV9sb25nX29wdChjdHgsIGFyZyArIDIsIG9wdGlvbnMpKSB7CisJCWNhc2UgUEFSU0VfT1BUX0VSUk9SOgorCQkJcmV0dXJuIFBBUlNFX09QVF9FUlJPUjsKKwkJY2FzZSBQQVJTRV9PUFRfVU5LTk9XTjoKKwkJCWdvdG8gdW5rbm93bjsKKwkJY2FzZSBQQVJTRV9PUFRfSEVMUDoKKwkJCWdvdG8gc2hvd191c2FnZTsKKwkJY2FzZSBQQVJTRV9PUFRfTk9OX09QVElPTjoKKwkJY2FzZSBQQVJTRV9PUFRfQ09NUExFVEU6CisJCQlCVUcoInBhcnNlX2xvbmdfb3B0KCkgY2Fubm90IHJldHVybiB0aGVzZSIpOworCQljYXNlIFBBUlNFX09QVF9ET05FOgorCQkJYnJlYWs7CisJCX0KKwkJY29udGludWU7Cit1bmtub3duOgorCQlpZiAoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9PTkVfU0hPVCkKKwkJCWJyZWFrOworCQlpZiAoIShjdHgtPmZsYWdzICYgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTikpCisJCQlyZXR1cm4gUEFSU0VfT1BUX1VOS05PV047CisJCWN0eC0+b3V0W2N0eC0+Y3BpZHgrK10gPSBjdHgtPmFyZ3ZbMF07CisJCWN0eC0+b3B0ID0gTlVMTDsKKwl9CisJcmV0dXJuIFBBUlNFX09QVF9ET05FOworCisgc2hvd191c2FnZToKKwlyZXR1cm4gdXNhZ2Vfd2l0aF9vcHRpb25zX2ludGVybmFsKGN0eCwgdXNhZ2VzdHIsIG9wdGlvbnMsIDAsIDApOworfQorCitpbnQgcGFyc2Vfb3B0aW9uc19lbmQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4KQoreworCWlmIChjdHgtPmZsYWdzICYgUEFSU0VfT1BUX09ORV9TSE9UKQorCQlyZXR1cm4gY3R4LT50b3RhbCAtIGN0eC0+YXJnYzsKKworCU1PVkVfQVJSQVkoY3R4LT5vdXQgKyBjdHgtPmNwaWR4LCBjdHgtPmFyZ3YsIGN0eC0+YXJnYyk7CisJY3R4LT5vdXRbY3R4LT5jcGlkeCArIGN0eC0+YXJnY10gPSBOVUxMOworCXJldHVybiBjdHgtPmNwaWR4ICsgY3R4LT5hcmdjOworfQorCitpbnQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLCBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSwKKwkJICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBhcnNlX29wdF9jdHhfdCBjdHg7CisJc3RydWN0IG9wdGlvbiAqcmVhbF9vcHRpb25zOworCisJZGlzYWxsb3dfYWJicmV2aWF0ZWRfb3B0aW9ucyA9CisJCWdpdF9lbnZfYm9vbCgiR0lUX1RFU1RfRElTQUxMT1dfQUJCUkVWSUFURURfT1BUSU9OUyIsIDApOworCisJbWVtc2V0KCZjdHgsIDAsIHNpemVvZihjdHgpKTsKKwlyZWFsX29wdGlvbnMgPSBwcmVwcm9jZXNzX29wdGlvbnMoJmN0eCwgb3B0aW9ucyk7CisJaWYgKHJlYWxfb3B0aW9ucykKKwkJb3B0aW9ucyA9IHJlYWxfb3B0aW9uczsKKwlwYXJzZV9vcHRpb25zX3N0YXJ0XzEoJmN0eCwgYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBmbGFncyk7CisJc3dpdGNoIChwYXJzZV9vcHRpb25zX3N0ZXAoJmN0eCwgb3B0aW9ucywgdXNhZ2VzdHIpKSB7CisJY2FzZSBQQVJTRV9PUFRfSEVMUDoKKwljYXNlIFBBUlNFX09QVF9FUlJPUjoKKwkJZXhpdCgxMjkpOworCWNhc2UgUEFSU0VfT1BUX0NPTVBMRVRFOgorCQlleGl0KDApOworCWNhc2UgUEFSU0VfT1BUX05PTl9PUFRJT046CisJY2FzZSBQQVJTRV9PUFRfRE9ORToKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogUEFSU0VfT1BUX1VOS05PV04gKi8KKwkJaWYgKGN0eC5hcmd2WzBdWzFdID09ICctJykgeworCQkJZXJyb3IoXygidW5rbm93biBvcHRpb24gYCVzJyIpLCBjdHguYXJndlswXSArIDIpOworCQl9IGVsc2UgaWYgKGlzYXNjaWkoKmN0eC5vcHQpKSB7CisJCQllcnJvcihfKCJ1bmtub3duIHN3aXRjaCBgJWMnIiksICpjdHgub3B0KTsKKwkJfSBlbHNlIHsKKwkJCWVycm9yKF8oInVua25vd24gbm9uLWFzY2lpIG9wdGlvbiBpbiBzdHJpbmc6IGAlcyciKSwKKwkJCSAgICAgIGN0eC5hcmd2WzBdKTsKKwkJfQorCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2VzdHIsIG9wdGlvbnMpOworCX0KKworCXByZWNvbXBvc2VfYXJndihhcmdjLCBhcmd2KTsKKwlmcmVlKHJlYWxfb3B0aW9ucyk7CisJZnJlZShjdHguYWxpYXNfZ3JvdXBzKTsKKwlyZXR1cm4gcGFyc2Vfb3B0aW9uc19lbmQoJmN0eCk7Cit9CisKK3N0YXRpYyBpbnQgdXNhZ2VfYXJnaChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRzLCBGSUxFICpvdXRmaWxlKQoreworCWNvbnN0IGNoYXIgKnM7CisJaW50IGxpdGVyYWwgPSAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQKSB8fAorCQkhb3B0cy0+YXJnaCB8fCAhIXN0cnBicmsob3B0cy0+YXJnaCwgIigpPD5bXXwiKTsKKwlpZiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKQorCQlpZiAob3B0cy0+bG9uZ19uYW1lKQorCQkJcyA9IGxpdGVyYWwgPyAiWz0lc10iIDogIls9PCVzPl0iOworCQllbHNlCisJCQlzID0gbGl0ZXJhbCA/ICJbJXNdIiA6ICJbPCVzPl0iOworCWVsc2UKKwkJcyA9IGxpdGVyYWwgPyAiICVzIiA6ICIgPCVzPiI7CisJcmV0dXJuIHV0ZjhfZnByaW50ZihvdXRmaWxlLCBzLCBvcHRzLT5hcmdoID8gXyhvcHRzLT5hcmdoKSA6IF8oIi4uLiIpKTsKK30KKworI2RlZmluZSBVU0FHRV9PUFRTX1dJRFRIIDI0CisjZGVmaW5lIFVTQUdFX0dBUCAgICAgICAgIDIKKworc3RhdGljIGludCB1c2FnZV93aXRoX29wdGlvbnNfaW50ZXJuYWwoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJCSAgICAgICBjb25zdCBjaGFyICogY29uc3QgKnVzYWdlc3RyLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRzLCBpbnQgZnVsbCwgaW50IGVycikKK3sKKwlGSUxFICpvdXRmaWxlID0gZXJyID8gc3RkZXJyIDogc3Rkb3V0OworCWludCBuZWVkX25ld2xpbmU7CisKKwlpZiAoIXVzYWdlc3RyKQorCQlyZXR1cm4gUEFSU0VfT1BUX0hFTFA7CisKKwlpZiAoIWVyciAmJiBjdHggJiYgY3R4LT5mbGFncyAmIFBBUlNFX09QVF9TSEVMTF9FVkFMKQorCQlmcHJpbnRmKG91dGZpbGUsICJjYXQgPDxcXEVPRlxuIik7CisKKwlmcHJpbnRmX2xuKG91dGZpbGUsIF8oInVzYWdlOiAlcyIpLCBfKCp1c2FnZXN0cisrKSk7CisJd2hpbGUgKCp1c2FnZXN0ciAmJiAqKnVzYWdlc3RyKQorCQkvKgorCQkgKiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uIGhlcmUgc2hvdWxkIGFsaWduIHdpdGggdGhlCisJCSAqIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbi4KKwkJICovCisJCWZwcmludGZfbG4ob3V0ZmlsZSwgXygiICAgb3I6ICVzIiksIF8oKnVzYWdlc3RyKyspKTsKKwl3aGlsZSAoKnVzYWdlc3RyKSB7CisJCWlmICgqKnVzYWdlc3RyKQorCQkJZnByaW50Zl9sbihvdXRmaWxlLCBfKCIgICAgJXMiKSwgXygqdXNhZ2VzdHIpKTsKKwkJZWxzZQorCQkJZnB1dGMoJ1xuJywgb3V0ZmlsZSk7CisJCXVzYWdlc3RyKys7CisJfQorCisJbmVlZF9uZXdsaW5lID0gMTsKKworCWZvciAoOyBvcHRzLT50eXBlICE9IE9QVElPTl9FTkQ7IG9wdHMrKykgeworCQlzaXplX3QgcG9zOworCQlpbnQgcGFkOworCisJCWlmIChvcHRzLT50eXBlID09IE9QVElPTl9HUk9VUCkgeworCQkJZnB1dGMoJ1xuJywgb3V0ZmlsZSk7CisJCQluZWVkX25ld2xpbmUgPSAwOworCQkJaWYgKCpvcHRzLT5oZWxwKQorCQkJCWZwcmludGYob3V0ZmlsZSwgIiVzXG4iLCBfKG9wdHMtPmhlbHApKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghZnVsbCAmJiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfSElEREVOKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChuZWVkX25ld2xpbmUpIHsKKwkJCWZwdXRjKCdcbicsIG91dGZpbGUpOworCQkJbmVlZF9uZXdsaW5lID0gMDsKKwkJfQorCisJCXBvcyA9IGZwcmludGYob3V0ZmlsZSwgIiAgICAiKTsKKwkJaWYgKG9wdHMtPnNob3J0X25hbWUpIHsKKwkJCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9OT0RBU0gpCisJCQkJcG9zICs9IGZwcmludGYob3V0ZmlsZSwgIiVjIiwgb3B0cy0+c2hvcnRfbmFtZSk7CisJCQllbHNlCisJCQkJcG9zICs9IGZwcmludGYob3V0ZmlsZSwgIi0lYyIsIG9wdHMtPnNob3J0X25hbWUpOworCQl9CisJCWlmIChvcHRzLT5sb25nX25hbWUgJiYgb3B0cy0+c2hvcnRfbmFtZSkKKwkJCXBvcyArPSBmcHJpbnRmKG91dGZpbGUsICIsICIpOworCQlpZiAob3B0cy0+bG9uZ19uYW1lKQorCQkJcG9zICs9IGZwcmludGYob3V0ZmlsZSwgIi0tJXMiLCBvcHRzLT5sb25nX25hbWUpOworCQlpZiAob3B0cy0+dHlwZSA9PSBPUFRJT05fTlVNQkVSKQorCQkJcG9zICs9IHV0ZjhfZnByaW50ZihvdXRmaWxlLCBfKCItTlVNIikpOworCisJCWlmICgob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQKSB8fAorCQkgICAgIShvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9OT0FSRykpCisJCQlwb3MgKz0gdXNhZ2VfYXJnaChvcHRzLCBvdXRmaWxlKTsKKworCQlpZiAocG9zIDw9IFVTQUdFX09QVFNfV0lEVEgpCisJCQlwYWQgPSBVU0FHRV9PUFRTX1dJRFRIIC0gcG9zOworCQllbHNlIHsKKwkJCWZwdXRjKCdcbicsIG91dGZpbGUpOworCQkJcGFkID0gVVNBR0VfT1BUU19XSURUSDsKKwkJfQorCQlpZiAob3B0cy0+dHlwZSA9PSBPUFRJT05fQUxJQVMpIHsKKwkJCWZwcmludGYob3V0ZmlsZSwgIiUqcyIsIHBhZCArIFVTQUdFX0dBUCwgIiIpOworCQkJZnByaW50Zl9sbihvdXRmaWxlLCBfKCJhbGlhcyBvZiAtLSVzIiksCisJCQkJICAgKGNvbnN0IGNoYXIgKilvcHRzLT52YWx1ZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlmcHJpbnRmKG91dGZpbGUsICIlKnMlc1xuIiwgcGFkICsgVVNBR0VfR0FQLCAiIiwgXyhvcHRzLT5oZWxwKSk7CisJfQorCWZwdXRjKCdcbicsIG91dGZpbGUpOworCisJaWYgKCFlcnIgJiYgY3R4ICYmIGN0eC0+ZmxhZ3MgJiBQQVJTRV9PUFRfU0hFTExfRVZBTCkKKwkJZnB1dHMoIkVPRlxuIiwgb3V0ZmlsZSk7CisKKwlyZXR1cm4gUEFSU0VfT1BUX0hFTFA7Cit9CisKK3ZvaWQgTk9SRVRVUk4gdXNhZ2Vfd2l0aF9vcHRpb25zKGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCisJCQljb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRzKQoreworCXVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbChOVUxMLCB1c2FnZXN0ciwgb3B0cywgMCwgMSk7CisJZXhpdCgxMjkpOworfQorCit2b2lkIE5PUkVUVVJOIHVzYWdlX21zZ19vcHQoY29uc3QgY2hhciAqbXNnLAorCQkgICBjb25zdCBjaGFyICogY29uc3QgKnVzYWdlc3RyLAorCQkgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zKQoreworCWZwcmludGYoc3RkZXJyLCAiZmF0YWw6ICVzXG5cbiIsIG1zZyk7CisJdXNhZ2Vfd2l0aF9vcHRpb25zKHVzYWdlc3RyLCBvcHRpb25zKTsKK30KKworY29uc3QgY2hhciAqb3B0bmFtZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGludCBmbGFncykKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZzYik7CisJaWYgKGZsYWdzICYgT1BUX1NIT1JUKQorCQlzdHJidWZfYWRkZigmc2IsICJzd2l0Y2ggYCVjJyIsIG9wdC0+c2hvcnRfbmFtZSk7CisJZWxzZSBpZiAoZmxhZ3MgJiBPUFRfVU5TRVQpCisJCXN0cmJ1Zl9hZGRmKCZzYiwgIm9wdGlvbiBgbm8tJXMnIiwgb3B0LT5sb25nX25hbWUpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoJnNiLCAib3B0aW9uIGAlcyciLCBvcHQtPmxvbmdfbmFtZSk7CisKKwlyZXR1cm4gc2IuYnVmOworfQpkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy5oIGIvcGFyc2Utb3B0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YWY5NDIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJzZS1vcHRpb25zLmgKQEAgLTAsMCArMSwzNDEgQEAKKyNpZm5kZWYgUEFSU0VfT1BUSU9OU19ICisjZGVmaW5lIFBBUlNFX09QVElPTlNfSAorCisvKioKKyAqIFJlZmVyIHRvIERvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1wYXJzZS1vcHRpb25zLnR4dCBmb3IgdGhlIEFQSSBkb2MuCisgKi8KKworZW51bSBwYXJzZV9vcHRfdHlwZSB7CisJLyogc3BlY2lhbCB0eXBlcyAqLworCU9QVElPTl9FTkQsCisJT1BUSU9OX0FSR1VNRU5ULAorCU9QVElPTl9HUk9VUCwKKwlPUFRJT05fTlVNQkVSLAorCU9QVElPTl9BTElBUywKKwkvKiBvcHRpb25zIHdpdGggbm8gYXJndW1lbnRzICovCisJT1BUSU9OX0JJVCwKKwlPUFRJT05fTkVHQklULAorCU9QVElPTl9CSVRPUCwKKwlPUFRJT05fQ09VTlRVUCwKKwlPUFRJT05fU0VUX0lOVCwKKwkvKiBvcHRpb25zIHdpdGggYXJndW1lbnRzICh1c3VhbGx5KSAqLworCU9QVElPTl9TVFJJTkcsCisJT1BUSU9OX0lOVEVHRVIsCisJT1BUSU9OX01BR05JVFVERSwKKwlPUFRJT05fQ0FMTEJBQ0ssCisJT1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLLAorCU9QVElPTl9GSUxFTkFNRQorfTsKKworZW51bSBwYXJzZV9vcHRfZmxhZ3MgeworCVBBUlNFX09QVF9LRUVQX0RBU0hEQVNIID0gMSwKKwlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OID0gMiwKKwlQQVJTRV9PUFRfS0VFUF9BUkdWMCA9IDQsCisJUEFSU0VfT1BUX0tFRVBfVU5LTk9XTiA9IDgsCisJUEFSU0VfT1BUX05PX0lOVEVSTkFMX0hFTFAgPSAxNiwKKwlQQVJTRV9PUFRfT05FX1NIT1QgPSAzMgorfTsKKworZW51bSBwYXJzZV9vcHRfb3B0aW9uX2ZsYWdzIHsKKwlQQVJTRV9PUFRfT1BUQVJHICA9IDEsCisJUEFSU0VfT1BUX05PQVJHICAgPSAyLAorCVBBUlNFX09QVF9OT05FRyAgID0gNCwKKwlQQVJTRV9PUFRfSElEREVOICA9IDgsCisJUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCA9IDE2LAorCVBBUlNFX09QVF9OT0RBU0ggPSAzMiwKKwlQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQID0gNjQsCisJUEFSU0VfT1BUX1NIRUxMX0VWQUwgPSAyNTYsCisJUEFSU0VfT1BUX05PQ09NUExFVEUgPSA1MTIsCisJUEFSU0VfT1BUX0NPTVBfQVJHID0gMTAyNCwKKwlQQVJTRV9PUFRfQ01ETU9ERSA9IDIwNDgKK307CisKK2VudW0gcGFyc2Vfb3B0X3Jlc3VsdCB7CisJUEFSU0VfT1BUX0NPTVBMRVRFID0gLTMsCisJUEFSU0VfT1BUX0hFTFAgPSAtMiwKKwlQQVJTRV9PUFRfRVJST1IgPSAtMSwJLyogbXVzdCBiZSB0aGUgc2FtZSBhcyBlcnJvcigpICovCisJUEFSU0VfT1BUX0RPTkUgPSAwLAkvKiBmaXhlZCBzbyB0aGF0ICJyZXR1cm4gMCIgd29ya3MgKi8KKwlQQVJTRV9PUFRfTk9OX09QVElPTiwKKwlQQVJTRV9PUFRfVU5LTk9XTgorfTsKKworc3RydWN0IG9wdGlvbjsKK3R5cGVkZWYgaW50IHBhcnNlX29wdF9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KTsKKworc3RydWN0IHBhcnNlX29wdF9jdHhfdDsKK3R5cGVkZWYgZW51bSBwYXJzZV9vcHRfcmVzdWx0IHBhcnNlX29wdF9sbF9jYihzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpOworCisvKgorICogYHR5cGVgOjoKKyAqICAgaG9sZHMgdGhlIHR5cGUgb2YgdGhlIG9wdGlvbiwgeW91IG11c3QgaGF2ZSBhbiBPUFRJT05fRU5EIGxhc3QgaW4geW91cgorICogICBhcnJheS4KKyAqCisgKiBgc2hvcnRfbmFtZWA6OgorICogICB0aGUgY2hhcmFjdGVyIHRvIHVzZSBhcyBhIHNob3J0IG9wdGlvbiBuYW1lLCAnXDAnIGlmIG5vbmUuCisgKgorICogYGxvbmdfbmFtZWA6OgorICogICB0aGUgbG9uZyBvcHRpb24gbmFtZSwgd2l0aG91dCB0aGUgbGVhZGluZyBkYXNoZXMsIE5VTEwgaWYgbm9uZS4KKyAqCisgKiBgdmFsdWVgOjoKKyAqICAgc3RvcmVzIHBvaW50ZXJzIHRvIHRoZSB2YWx1ZXMgdG8gYmUgZmlsbGVkLgorICoKKyAqIGBhcmdoYDo6CisgKiAgIHRva2VuIHRvIGV4cGxhaW4gdGhlIGtpbmQgb2YgYXJndW1lbnQgdGhpcyBvcHRpb24gd2FudHMuIEtlZXAgaXQKKyAqICAgaG9tb2dlbmVvdXMgYWNyb3NzIHRoZSByZXBvc2l0b3J5LiBTaG91bGQgYmUgd3JhcHBlZCBieSBOXygpIGZvcgorICogICB0cmFuc2xhdGlvbi4KKyAqCisgKiBgaGVscGA6OgorICogICB0aGUgc2hvcnQgaGVscCBhc3NvY2lhdGVkIHRvIHdoYXQgdGhlIG9wdGlvbiBkb2VzLgorICogICBNdXN0IG5ldmVyIGJlIE5VTEwgKGV4Y2VwdCBmb3IgT1BUSU9OX0VORCkuCisgKiAgIE9QVElPTl9HUk9VUCB1c2VzIHRoaXMgcG9pbnRlciB0byBzdG9yZSB0aGUgZ3JvdXAgaGVhZGVyLgorICogICBTaG91bGQgYmUgd3JhcHBlZCBieSBOXygpIGZvciB0cmFuc2xhdGlvbi4KKyAqCisgKiBgZmxhZ3NgOjoKKyAqICAgbWFzayBvZiBwYXJzZV9vcHRfb3B0aW9uX2ZsYWdzLgorICogICBQQVJTRV9PUFRfT1BUQVJHOiBzYXlzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIG9wdGlvbmFsIChub3QgZm9yIEJPT0xFQU5zKQorICogICBQQVJTRV9PUFRfTk9BUkc6IHNheXMgdGhhdCB0aGlzIG9wdGlvbiBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50CisgKiAgIFBBUlNFX09QVF9OT05FRzogc2F5cyB0aGF0IHRoaXMgb3B0aW9uIGNhbm5vdCBiZSBuZWdhdGVkCisgKiAgIFBBUlNFX09QVF9ISURERU46IHRoaXMgb3B0aW9uIGlzIHNraXBwZWQgaW4gdGhlIGRlZmF1bHQgdXNhZ2UsIGFuZAorICogICAgICAgICAgICAgICAgICAgICBzaG93biBvbmx5IGluIHRoZSBmdWxsIHVzYWdlLgorICogICBQQVJTRV9PUFRfTEFTVEFSR19ERUZBVUxUOiBzYXlzIHRoYXQgdGhpcyBvcHRpb24gd2lsbCB0YWtlIHRoZSBkZWZhdWx0CisgKgkJCQl2YWx1ZSBpZiBubyBhcmd1bWVudCBpcyBnaXZlbiB3aGVuIHRoZSBvcHRpb24KKyAqCQkJCWlzIGxhc3Qgb24gdGhlIGNvbW1hbmQgbGluZS4gSWYgdGhlIG9wdGlvbiBpcworICoJCQkJbm90IGxhc3QgaXQgd2lsbCByZXF1aXJlIGFuIGFyZ3VtZW50LgorICoJCQkJU2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggUEFSU0VfT1BUX09QVEFSRy4KKyAqICAgUEFSU0VfT1BUX05PREFTSDogdGhpcyBvcHRpb24gZG9lc24ndCBzdGFydCB3aXRoIGEgZGFzaC4KKyAqICAgUEFSU0VfT1BUX0xJVEVSQUxfQVJHSEVMUDogc2F5cyB0aGF0IGFyZ2ggc2hvdWxkbid0IGJlIGVuY2xvc2VkIGluIGJyYWNrZXRzCisgKgkJCQkoaS5lLiAnPGFyZ2g+JykgaW4gdGhlIGhlbHAgbWVzc2FnZS4KKyAqCQkJCVVzZWZ1bCBmb3Igb3B0aW9ucyB3aXRoIG11bHRpcGxlIHBhcmFtZXRlcnMuCisgKiAgIFBBUlNFX09QVF9OT0NPTVBMRVRFOiBieSBkZWZhdWx0IGFsbCB2aXNpYmxlIG9wdGlvbnMgYXJlIGNvbXBsZXRhYmxlCisgKgkJCSAgIGJ5IGdpdC1jb21wbGV0aW9uLmJhc2guIFRoaXMgb3B0aW9uIHN1cHByZXNzZXMgdGhhdC4KKyAqICAgUEFSU0VfT1BUX0NPTVBfQVJHOiB0aGlzIG9wdGlvbiBmb3JjZXMgdG8gZ2l0LWNvbXBsZXRpb24uYmFzaCB0bworICoJCQkgY29tcGxldGUgYW4gb3B0aW9uIGFzIC0tbmFtZT0gbm90IC0tbmFtZSBldmVuIGlmCisgKgkJCSB0aGUgb3B0aW9uIHRha2VzIG9wdGlvbmFsIGFyZ3VtZW50LgorICoKKyAqIGBjYWxsYmFja2A6OgorICogICBwb2ludGVyIHRvIHRoZSBjYWxsYmFjayB0byB1c2UgZm9yIE9QVElPTl9DQUxMQkFDSworICoKKyAqIGBkZWZ2YWxgOjoKKyAqICAgZGVmYXVsdCB2YWx1ZSB0byBmaWxsICgqLT52YWx1ZSkgd2l0aCBmb3IgUEFSU0VfT1BUX09QVEFSRy4KKyAqICAgT1BUSU9OX3tCSVQsU0VUX0lOVH0gc3RvcmUgdGhlIHttYXNrLGludGVnZXJ9IHRvIHB1dCBpbiB0aGUgdmFsdWUgd2hlbiBtZXQuCisgKiAgIENBTExCQUNLUyBjYW4gdXNlIGl0IGxpa2UgdGhleSB3YW50LgorICoKKyAqIGBsbF9jYWxsYmFja2A6OgorICogICBwb2ludGVyIHRvIHRoZSBjYWxsYmFjayB0byB1c2UgZm9yIE9QVElPTl9MT1dMRVZFTF9DQUxMQkFDSworICoKKyAqLworc3RydWN0IG9wdGlvbiB7CisJZW51bSBwYXJzZV9vcHRfdHlwZSB0eXBlOworCWludCBzaG9ydF9uYW1lOworCWNvbnN0IGNoYXIgKmxvbmdfbmFtZTsKKwl2b2lkICp2YWx1ZTsKKwljb25zdCBjaGFyICphcmdoOworCWNvbnN0IGNoYXIgKmhlbHA7CisKKwlpbnQgZmxhZ3M7CisJcGFyc2Vfb3B0X2NiICpjYWxsYmFjazsKKwlpbnRwdHJfdCBkZWZ2YWw7CisJcGFyc2Vfb3B0X2xsX2NiICpsbF9jYWxsYmFjazsKKwlpbnRwdHJfdCBleHRyYTsKK307CisKKyNkZWZpbmUgT1BUX0JJVF9GKHMsIGwsIHYsIGgsIGIsIGYpIHsgT1BUSU9OX0JJVCwgKHMpLCAobCksICh2KSwgTlVMTCwgKGgpLCBcCisJCQkJICAgICAgUEFSU0VfT1BUX05PQVJHfChmKSwgTlVMTCwgKGIpIH0KKyNkZWZpbmUgT1BUX0NPVU5UVVBfRihzLCBsLCB2LCBoLCBmKSB7IE9QVElPTl9DT1VOVFVQLCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgIChoKSwgUEFSU0VfT1BUX05PQVJHfChmKSB9CisjZGVmaW5lIE9QVF9TRVRfSU5UX0YocywgbCwgdiwgaCwgaSwgZikgeyBPUFRJT05fU0VUX0lOVCwgKHMpLCAobCksICh2KSwgTlVMTCwgXAorCQkJCQkgIChoKSwgUEFSU0VfT1BUX05PQVJHIHwgKGYpLCBOVUxMLCAoaSkgfQorI2RlZmluZSBPUFRfQk9PTF9GKHMsIGwsIHYsIGgsIGYpICAgT1BUX1NFVF9JTlRfRihzLCBsLCB2LCBoLCAxLCBmKQorI2RlZmluZSBPUFRfQ0FMTEJBQ0tfRihzLCBsLCB2LCBhLCBoLCBmLCBjYikJCQlcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksIChhKSwgKGgpLCAoZiksIChjYikgfQorI2RlZmluZSBPUFRfU1RSSU5HX0YocywgbCwgdiwgYSwgaCwgZikgICB7IE9QVElPTl9TVFJJTkcsICAocyksIChsKSwgKHYpLCAoYSksIChoKSwgKGYpIH0KKyNkZWZpbmUgT1BUX0lOVEVHRVJfRihzLCBsLCB2LCBoLCBmKSAgICAgeyBPUFRJT05fSU5URUdFUiwgKHMpLCAobCksICh2KSwgTl8oIm4iKSwgKGgpLCAoZikgfQorCisjZGVmaW5lIE9QVF9FTkQoKSAgICAgICAgICAgICAgICAgICB7IE9QVElPTl9FTkQgfQorI2RlZmluZSBPUFRfQVJHVU1FTlQobCwgdiwgaCkgICAgICAgeyBPUFRJT05fQVJHVU1FTlQsIDAsIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIDEgfQorI2RlZmluZSBPUFRfR1JPVVAoaCkgICAgICAgICAgICAgICAgeyBPUFRJT05fR1JPVVAsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIChoKSB9CisjZGVmaW5lIE9QVF9CSVQocywgbCwgdiwgaCwgYikgICAgICBPUFRfQklUX0YocywgbCwgdiwgaCwgYiwgMCkKKyNkZWZpbmUgT1BUX0JJVE9QKHMsIGwsIHYsIGgsIHNldCwgY2xlYXIpIHsgT1BUSU9OX0JJVE9QLCAocyksIChsKSwgKHYpLCBOVUxMLCAoaCksIFwKKwkJCQkJICAgIFBBUlNFX09QVF9OT0FSR3xQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIFwKKwkJCQkJICAgIChzZXQpLCBOVUxMLCAoY2xlYXIpIH0KKyNkZWZpbmUgT1BUX05FR0JJVChzLCBsLCB2LCBoLCBiKSAgIHsgT1BUSU9OX05FR0JJVCwgKHMpLCAobCksICh2KSwgTlVMTCwgXAorCQkJCSAgICAgIChoKSwgUEFSU0VfT1BUX05PQVJHLCBOVUxMLCAoYikgfQorI2RlZmluZSBPUFRfQ09VTlRVUChzLCBsLCB2LCBoKSAgICAgT1BUX0NPVU5UVVBfRihzLCBsLCB2LCBoLCAwKQorI2RlZmluZSBPUFRfU0VUX0lOVChzLCBsLCB2LCBoLCBpKSAgT1BUX1NFVF9JTlRfRihzLCBsLCB2LCBoLCBpLCAwKQorI2RlZmluZSBPUFRfQk9PTChzLCBsLCB2LCBoKSAgICAgICAgT1BUX0JPT0xfRihzLCBsLCB2LCBoLCAwKQorI2RlZmluZSBPUFRfSElEREVOX0JPT0wocywgbCwgdiwgaCkgeyBPUFRJT05fU0VUX0lOVCwgKHMpLCAobCksICh2KSwgTlVMTCwgXAorCQkJCSAgICAgIChoKSwgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX0hJRERFTiwgTlVMTCwgMX0KKyNkZWZpbmUgT1BUX0NNRE1PREUocywgbCwgdiwgaCwgaSkgIHsgT1BUSU9OX1NFVF9JTlQsIChzKSwgKGwpLCAodiksIE5VTEwsIFwKKwkJCQkgICAgICAoaCksIFBBUlNFX09QVF9DTURNT0RFfFBBUlNFX09QVF9OT0FSR3xQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIChpKSB9CisjZGVmaW5lIE9QVF9JTlRFR0VSKHMsIGwsIHYsIGgpICAgICBPUFRfSU5URUdFUl9GKHMsIGwsIHYsIGgsIDApCisjZGVmaW5lIE9QVF9NQUdOSVRVREUocywgbCwgdiwgaCkgICB7IE9QVElPTl9NQUdOSVRVREUsIChzKSwgKGwpLCAodiksIFwKKwkJCQkgICAgICBOXygibiIpLCAoaCksIFBBUlNFX09QVF9OT05FRyB9CisjZGVmaW5lIE9QVF9TVFJJTkcocywgbCwgdiwgYSwgaCkgICBPUFRfU1RSSU5HX0YocywgbCwgdiwgYSwgaCwgMCkKKyNkZWZpbmUgT1BUX1NUUklOR19MSVNUKHMsIGwsIHYsIGEsIGgpIFwKKwkJCQkgICAgeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksIChhKSwgXAorCQkJCSAgICAgIChoKSwgMCwgJnBhcnNlX29wdF9zdHJpbmdfbGlzdCB9CisjZGVmaW5lIE9QVF9VWU4ocywgbCwgdiwgaCkgICAgICAgICB7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgTlVMTCwgXAorCQkJCSAgICAgIChoKSwgUEFSU0VfT1BUX05PQVJHLCAmcGFyc2Vfb3B0X3RlcnRpYXJ5IH0KKyNkZWZpbmUgT1BUX0VYUElSWV9EQVRFKHMsIGwsIHYsIGgpIFwKKwl7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgTl8oImV4cGlyeS1kYXRlIiksKGgpLCAwLAlcCisJICBwYXJzZV9vcHRfZXhwaXJ5X2RhdGVfY2IgfQorI2RlZmluZSBPUFRfQ0FMTEJBQ0socywgbCwgdiwgYSwgaCwgZikgT1BUX0NBTExCQUNLX0YocywgbCwgdiwgYSwgaCwgMCwgZikKKyNkZWZpbmUgT1BUX05VTUJFUl9DQUxMQkFDSyh2LCBoLCBmKSBcCisJeyBPUFRJT05fTlVNQkVSLCAwLCBOVUxMLCAodiksIE5VTEwsIChoKSwgXAorCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCAoZikgfQorI2RlZmluZSBPUFRfRklMRU5BTUUocywgbCwgdiwgaCkgICAgeyBPUFRJT05fRklMRU5BTUUsIChzKSwgKGwpLCAodiksIFwKKwkJCQkgICAgICAgTl8oImZpbGUiKSwgKGgpIH0KKyNkZWZpbmUgT1BUX0NPTE9SX0ZMQUcocywgbCwgdiwgaCkgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgKHYpLCBOXygid2hlbiIpLCAoaCksIFBBUlNFX09QVF9PUFRBUkcsIFwKKwkJcGFyc2Vfb3B0X2NvbG9yX2ZsYWdfY2IsIChpbnRwdHJfdCkiYWx3YXlzIiB9CisKKyNkZWZpbmUgT1BUX05PT1BfTk9BUkcocywgbCkgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgTlVMTCwgTlVMTCwgXAorCSAgTl8oIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIpLAkJXAorCSAgUEFSU0VfT1BUX0hJRERFTiB8IFBBUlNFX09QVF9OT0FSRywgcGFyc2Vfb3B0X25vb3BfY2IgfQorCisjZGVmaW5lIE9QVF9BTElBUyhzLCBsLCBzb3VyY2VfbG9uZ19uYW1lKSBcCisJeyBPUFRJT05fQUxJQVMsIChzKSwgKGwpLCAoc291cmNlX2xvbmdfbmFtZSkgfQorCisvKgorICogcGFyc2Vfb3B0aW9ucygpIHdpbGwgZmlsdGVyIG91dCB0aGUgcHJvY2Vzc2VkIG9wdGlvbnMgYW5kIGxlYXZlIHRoZQorICogbm9uLW9wdGlvbiBhcmd1bWVudHMgaW4gYXJndltdLiBhcmd2MCBpcyBhc3N1bWVkIHByb2dyYW0gbmFtZSBhbmQKKyAqIHNraXBwZWQuCisgKgorICogdXNhZ2VzdHIgc3RyaW5ncyBzaG91bGQgYmUgbWFya2VkIGZvciB0cmFuc2xhdGlvbiB3aXRoIE5fKCkuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBsZWZ0IGluIGFyZ3ZbXS4KKyAqCisgKiBJbiBvbmUtc2hvdCBtb2RlLCBhcmd2MCBpcyBub3QgYSBwcm9ncmFtIG5hbWUsIGFyZ3ZbXSBpcyBsZWZ0CisgKiB1bnRvdWNoZWQgYW5kIHBhcnNlX29wdGlvbnMoKSByZXR1cm5zIHRoZSBudW1iZXIgb2Ygb3B0aW9ucworICogcHJvY2Vzc2VkLgorICovCitpbnQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLAorCQkgIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZXN0cltdLCBpbnQgZmxhZ3MpOworCitOT1JFVFVSTiB2b2lkIHVzYWdlX3dpdGhfb3B0aW9ucyhjb25zdCBjaGFyICogY29uc3QgKnVzYWdlc3RyLAorCQkJCSBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zKTsKKworTk9SRVRVUk4gdm9pZCB1c2FnZV9tc2dfb3B0KGNvbnN0IGNoYXIgKm1zZywKKwkJCSAgICBjb25zdCBjaGFyICogY29uc3QgKnVzYWdlc3RyLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpOworCitpbnQgb3B0YnVnKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqcmVhc29uKTsKK2NvbnN0IGNoYXIgKm9wdG5hbWUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBpbnQgZmxhZ3MpOworCisvKgorICogVXNlIHRoZXNlIGFzc2VydGlvbnMgZm9yIGNhbGxiYWNrcyB0aGF0IGV4cGVjdCB0byBiZSBjYWxsZWQgd2l0aCBOT05FRyBhbmQKKyAqIE5PQVJHIHJlc3BlY3RpdmVseSwgYW5kIGRvIG5vdCBvdGhlcndpc2UgaGFuZGxlIHRoZSAidW5zZXQiIGFuZCAiYXJnIgorICogcGFyYW1ldGVycy4KKyAqLworI2RlZmluZSBCVUdfT05fT1BUX05FRyh1bnNldCkgZG8geyBcCisJaWYgKCh1bnNldCkpIFwKKwkJQlVHKCJvcHRpb24gY2FsbGJhY2sgZG9lcyBub3QgZXhwZWN0IG5lZ2F0aW9uIik7IFwKK30gd2hpbGUgKDApCisjZGVmaW5lIEJVR19PTl9PUFRfQVJHKGFyZykgZG8geyBcCisJaWYgKChhcmcpKSBcCisJCUJVRygib3B0aW9uIGNhbGxiYWNrIGRvZXMgbm90IGV4cGVjdCBhbiBhcmd1bWVudCIpOyBcCit9IHdoaWxlICgwKQorCisvKgorICogU2ltaWxhciB0byB0aGUgYXNzZXJ0aW9ucyBhYm92ZSwgYnV0IGNoZWNrcyB0aGF0ICJhcmciIGlzIGFsd2F5cyBub24tTlVMTC4KKyAqIFRoaXMgYXNzZXJ0aW9uIGFsc28gaW1wbGllcyBCVUdfT05fT1BUX05FRygpLCBsZXR0aW5nIHlvdSBkZWNsYXJlIGJvdGgKKyAqIGFzc2VydGlvbnMgaW4gYSBzaW5nbGUgbGluZS4KKyAqLworI2RlZmluZSBCVUdfT05fT1BUX05FR19OT0FSRyh1bnNldCwgYXJnKSBkbyB7IFwKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7IFwKKwlpZighKGFyZykpIFwKKwkJQlVHKCJvcHRpb24gY2FsbGJhY2sgZXhwZWN0cyBhbiBhcmd1bWVudCIpOyBcCit9IHdoaWxlKDApCisKKy8qLS0tLS0gaW5jcmVtZW50YWwgYWR2YW5jZWQgQVBJcyAtLS0tLSovCisKKy8qCisgKiBJdCdzIG9rYXkgZm9yIHRoZSBjYWxsZXIgdG8gY29uc3VtZSBhcmd2L2FyZ2MgaW4gdGhlIHVzdWFsIHdheS4KKyAqIE90aGVyIGZpZWxkcyBvZiB0aGF0IHN0cnVjdHVyZSBhcmUgcHJpdmF0ZSB0byBwYXJzZS1vcHRpb25zIGFuZCBzaG91bGQgbm90CisgKiBiZSBtb2RpZmllZCBpbiBhbnkgd2F5LgorICovCitzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90IHsKKwljb25zdCBjaGFyICoqYXJndjsKKwljb25zdCBjaGFyICoqb3V0OworCWludCBhcmdjLCBjcGlkeCwgdG90YWw7CisJY29uc3QgY2hhciAqb3B0OworCWludCBmbGFnczsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJY29uc3QgY2hhciAqKmFsaWFzX2dyb3VwczsgLyogbXVzdCBiZSBpbiBncm91cHMgb2YgMyBlbGVtZW50cyEgKi8KKwlzdHJ1Y3Qgb3B0aW9uICp1cGRhdGVkX29wdGlvbnM7Cit9OworCit2b2lkIHBhcnNlX29wdGlvbnNfc3RhcnQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsIGludCBmbGFncyk7CisKK2ludCBwYXJzZV9vcHRpb25zX3N0ZXAoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywKKwkJICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZXN0cltdKTsKKworaW50IHBhcnNlX29wdGlvbnNfZW5kKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCk7CisKK3N0cnVjdCBvcHRpb24gKnBhcnNlX29wdGlvbnNfZHVwKGNvbnN0IHN0cnVjdCBvcHRpb24gKmEpOworc3RydWN0IG9wdGlvbiAqcGFyc2Vfb3B0aW9uc19jb25jYXQoY29uc3Qgc3RydWN0IG9wdGlvbiAqYSwgY29uc3Qgc3RydWN0IG9wdGlvbiAqYik7CisKKy8qLS0tLS0gc29tZSBvZnRlbiB1c2VkIG9wdGlvbnMgLS0tLS0qLworaW50IHBhcnNlX29wdF9hYmJyZXZfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitpbnQgcGFyc2Vfb3B0X2V4cGlyeV9kYXRlX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworaW50IHBhcnNlX29wdF9jb2xvcl9mbGFnX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworaW50IHBhcnNlX29wdF92ZXJib3NpdHlfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CisvKiB2YWx1ZSBpcyBzdHJ1Y3Qgb2lkX2FycmF5KiAqLworaW50IHBhcnNlX29wdF9vYmplY3RfbmFtZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKy8qIHZhbHVlIGlzIHN0cnVjdCBvYmplY3RfaWQqICovCitpbnQgcGFyc2Vfb3B0X29iamVjdF9pZChjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2ludCBwYXJzZV9vcHRfY29tbWl0cyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2ludCBwYXJzZV9vcHRfY29tbWl0KGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworaW50IHBhcnNlX29wdF90ZXJ0aWFyeShjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2ludCBwYXJzZV9vcHRfc3RyaW5nX2xpc3QoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitpbnQgcGFyc2Vfb3B0X25vb3BfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitlbnVtIHBhcnNlX29wdF9yZXN1bHQgcGFyc2Vfb3B0X3Vua25vd25fY2Ioc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJCQkgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICosCisJCQkJCSAgIGNvbnN0IGNoYXIgKiwgaW50KTsKK2ludCBwYXJzZV9vcHRfcGFzc3RocnUoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitpbnQgcGFyc2Vfb3B0X3Bhc3N0aHJ1X2FyZ3YoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CisKKyNkZWZpbmUgT1BUX19WRVJCT1NFKHZhciwgaCkgIE9QVF9DT1VOVFVQKCd2JywgInZlcmJvc2UiLCAodmFyKSwgKGgpKQorI2RlZmluZSBPUFRfX1FVSUVUKHZhciwgaCkgICAgT1BUX0NPVU5UVVAoJ3EnLCAicXVpZXQiLCAgICh2YXIpLCAoaCkpCisjZGVmaW5lIE9QVF9fVkVSQk9TSVRZKHZhcikgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAndicsICJ2ZXJib3NlIiwgKHZhciksIE5VTEwsIE5fKCJiZSBtb3JlIHZlcmJvc2UiKSwgXAorCSAgUEFSU0VfT1BUX05PQVJHLCAmcGFyc2Vfb3B0X3ZlcmJvc2l0eV9jYiwgMCB9LCBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssICdxJywgInF1aWV0IiwgKHZhciksIE5VTEwsIE5fKCJiZSBtb3JlIHF1aWV0IiksIFwKKwkgIFBBUlNFX09QVF9OT0FSRywgJnBhcnNlX29wdF92ZXJib3NpdHlfY2IsIDAgfQorI2RlZmluZSBPUFRfX0RSWV9SVU4odmFyLCBoKSAgT1BUX0JPT0woJ24nLCAiZHJ5LXJ1biIsICh2YXIpLCAoaCkpCisjZGVmaW5lIE9QVF9fRk9SQ0UodmFyLCBoLCBmKSBPUFRfQ09VTlRVUF9GKCdmJywgImZvcmNlIiwgICAodmFyKSwgKGgpLCAoZikpCisjZGVmaW5lIE9QVF9fQUJCUkVWKHZhcikgIFwKKwl7IE9QVElPTl9DQUxMQkFDSywgMCwgImFiYnJldiIsICh2YXIpLCBOXygibiIpLAlcCisJICBOXygidXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMiKSwJXAorCSAgUEFSU0VfT1BUX09QVEFSRywgJnBhcnNlX29wdF9hYmJyZXZfY2IsIDAgfQorI2RlZmluZSBPUFRfX0NPTE9SKHZhciwgaCkgXAorCU9QVF9DT0xPUl9GTEFHKDAsICJjb2xvciIsICh2YXIpLCAoaCkpCisjZGVmaW5lIE9QVF9DT0xVTU4ocywgbCwgdiwgaCkgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgKHYpLCBOXygic3R5bGUiKSwgKGgpLCBQQVJTRV9PUFRfT1BUQVJHLCBwYXJzZW9wdF9jb2x1bW5fY2FsbGJhY2sgfQorI2RlZmluZSBPUFRfUEFTU1RIUlUocywgbCwgdiwgYSwgaCwgZikgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgKHYpLCAoYSksIChoKSwgKGYpLCBwYXJzZV9vcHRfcGFzc3RocnUgfQorI2RlZmluZSBPUFRfUEFTU1RIUlVfQVJHVihzLCBsLCB2LCBhLCBoLCBmKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksIChhKSwgKGgpLCAoZiksIHBhcnNlX29wdF9wYXNzdGhydV9hcmd2IH0KKyNkZWZpbmUgX09QVF9DT05UQUlOU19PUl9XSVRIKG5hbWUsIHZhcmlhYmxlLCBoZWxwLCBmbGFnKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsIG5hbWUsICh2YXJpYWJsZSksIE5fKCJjb21taXQiKSwgKGhlbHApLCBcCisJICBQQVJTRV9PUFRfTEFTVEFSR19ERUZBVUxUIHwgZmxhZywgXAorCSAgcGFyc2Vfb3B0X2NvbW1pdHMsIChpbnRwdHJfdCkgIkhFQUQiIFwKKwl9CisjZGVmaW5lIE9QVF9DT05UQUlOUyh2LCBoKSBfT1BUX0NPTlRBSU5TX09SX1dJVEgoImNvbnRhaW5zIiwgdiwgaCwgUEFSU0VfT1BUX05PTkVHKQorI2RlZmluZSBPUFRfTk9fQ09OVEFJTlModiwgaCkgX09QVF9DT05UQUlOU19PUl9XSVRIKCJuby1jb250YWlucyIsIHYsIGgsIFBBUlNFX09QVF9OT05FRykKKyNkZWZpbmUgT1BUX1dJVEgodiwgaCkgX09QVF9DT05UQUlOU19PUl9XSVRIKCJ3aXRoIiwgdiwgaCwgUEFSU0VfT1BUX0hJRERFTiB8IFBBUlNFX09QVF9OT05FRykKKyNkZWZpbmUgT1BUX1dJVEhPVVQodiwgaCkgX09QVF9DT05UQUlOU19PUl9XSVRIKCJ3aXRob3V0IiwgdiwgaCwgUEFSU0VfT1BUX0hJRERFTiB8IFBBUlNFX09QVF9OT05FRykKKyNkZWZpbmUgT1BUX0NMRUFOVVAodikgT1BUX1NUUklORygwLCAiY2xlYW51cCIsIHYsIE5fKCJtb2RlIiksIE5fKCJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIikpCisjZGVmaW5lIE9QVF9QQVRIU1BFQ19GUk9NX0ZJTEUodikgT1BUX0ZJTEVOQU1FKDAsICJwYXRoc3BlYy1mcm9tLWZpbGUiLCB2LCBOXygicmVhZCBwYXRoc3BlYyBmcm9tIGZpbGUiKSkKKyNkZWZpbmUgT1BUX1BBVEhTUEVDX0ZJTEVfTlVMKHYpICBPUFRfQk9PTCgwLCAicGF0aHNwZWMtZmlsZS1udWwiLCB2LCBOXygid2l0aCAtLXBhdGhzcGVjLWZyb20tZmlsZSwgcGF0aHNwZWMgZWxlbWVudHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiKSkKKyNkZWZpbmUgT1BUX0FVVE9TVEFTSCh2KSBPUFRfQk9PTCgwLCAiYXV0b3N0YXNoIiwgdiwgTl8oImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIiKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9wYXRjaC1kZWx0YS5jIGIvcGF0Y2gtZGVsdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWM4NTk0Ci0tLSAvZGV2L251bGwKKysrIGIvcGF0Y2gtZGVsdGEuYwpAQCAtMCwwICsxLDk0IEBACisvKgorICogcGF0Y2gtZGVsdGEuYzoKKyAqIHJlY3JlYXRlIGEgYnVmZmVyIGZyb20gYSBzb3VyY2UgYW5kIHRoZSBkZWx0YSBwcm9kdWNlZCBieSBkaWZmLWRlbHRhLmMKKyAqCisgKiAoQykgMjAwNSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgorICoKKyAqIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisKK3ZvaWQgKnBhdGNoX2RlbHRhKGNvbnN0IHZvaWQgKnNyY19idWYsIHVuc2lnbmVkIGxvbmcgc3JjX3NpemUsCisJCSAgY29uc3Qgdm9pZCAqZGVsdGFfYnVmLCB1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUsCisJCSAgdW5zaWduZWQgbG9uZyAqZHN0X3NpemUpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgKnRvcDsKKwl1bnNpZ25lZCBjaGFyICpkc3RfYnVmLCAqb3V0LCBjbWQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJaWYgKGRlbHRhX3NpemUgPCBERUxUQV9TSVpFX01JTikKKwkJcmV0dXJuIE5VTEw7CisKKwlkYXRhID0gZGVsdGFfYnVmOworCXRvcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIGRlbHRhX2J1ZiArIGRlbHRhX3NpemU7CisKKwkvKiBtYWtlIHN1cmUgdGhlIG9yaWcgZmlsZSBzaXplIG1hdGNoZXMgd2hhdCB3ZSBleHBlY3QgKi8KKwlzaXplID0gZ2V0X2RlbHRhX2hkcl9zaXplKCZkYXRhLCB0b3ApOworCWlmIChzaXplICE9IHNyY19zaXplKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIG5vdyB0aGUgcmVzdWx0IHNpemUgKi8KKwlzaXplID0gZ2V0X2RlbHRhX2hkcl9zaXplKCZkYXRhLCB0b3ApOworCWRzdF9idWYgPSB4bWFsbG9jeihzaXplKTsKKworCW91dCA9IGRzdF9idWY7CisJd2hpbGUgKGRhdGEgPCB0b3ApIHsKKwkJY21kID0gKmRhdGErKzsKKwkJaWYgKGNtZCAmIDB4ODApIHsKKwkJCXVuc2lnbmVkIGxvbmcgY3Bfb2ZmID0gMCwgY3Bfc2l6ZSA9IDA7CisjZGVmaW5lIFBBUlNFX0NQX1BBUkFNKGJpdCwgdmFyLCBzaGlmdCkgZG8geyBcCisJCQlpZiAoY21kICYgKGJpdCkpIHsgXAorCQkJCWlmIChkYXRhID49IHRvcCkgXAorCQkJCQlnb3RvIGJhZF9sZW5ndGg7IFwKKwkJCQl2YXIgfD0gKCh1bnNpZ25lZCkgKmRhdGErKyA8PCAoc2hpZnQpKTsgXAorCQkJfSB9IHdoaWxlICgwKQorCQkJUEFSU0VfQ1BfUEFSQU0oMHgwMSwgY3Bfb2ZmLCAwKTsKKwkJCVBBUlNFX0NQX1BBUkFNKDB4MDIsIGNwX29mZiwgOCk7CisJCQlQQVJTRV9DUF9QQVJBTSgweDA0LCBjcF9vZmYsIDE2KTsKKwkJCVBBUlNFX0NQX1BBUkFNKDB4MDgsIGNwX29mZiwgMjQpOworCQkJUEFSU0VfQ1BfUEFSQU0oMHgxMCwgY3Bfc2l6ZSwgMCk7CisJCQlQQVJTRV9DUF9QQVJBTSgweDIwLCBjcF9zaXplLCA4KTsKKwkJCVBBUlNFX0NQX1BBUkFNKDB4NDAsIGNwX3NpemUsIDE2KTsKKyN1bmRlZiBQQVJTRV9DUF9QQVJBTQorCQkJaWYgKGNwX3NpemUgPT0gMCkgY3Bfc2l6ZSA9IDB4MTAwMDA7CisJCQlpZiAodW5zaWduZWRfYWRkX292ZXJmbG93cyhjcF9vZmYsIGNwX3NpemUpIHx8CisJCQkgICAgY3Bfb2ZmICsgY3Bfc2l6ZSA+IHNyY19zaXplIHx8CisJCQkgICAgY3Bfc2l6ZSA+IHNpemUpCisJCQkJZ290byBiYWRfbGVuZ3RoOworCQkJbWVtY3B5KG91dCwgKGNoYXIgKikgc3JjX2J1ZiArIGNwX29mZiwgY3Bfc2l6ZSk7CisJCQlvdXQgKz0gY3Bfc2l6ZTsKKwkJCXNpemUgLT0gY3Bfc2l6ZTsKKwkJfSBlbHNlIGlmIChjbWQpIHsKKwkJCWlmIChjbWQgPiBzaXplIHx8IGNtZCA+IHRvcCAtIGRhdGEpCisJCQkJZ290byBiYWRfbGVuZ3RoOworCQkJbWVtY3B5KG91dCwgZGF0YSwgY21kKTsKKwkJCW91dCArPSBjbWQ7CisJCQlkYXRhICs9IGNtZDsKKwkJCXNpemUgLT0gY21kOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIGNtZCA9PSAwIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgZW5jb2RpbmcKKwkJCSAqIGV4dGVuc2lvbnMuIEluIHRoZSBtZWFuIHRpbWUgd2UgbXVzdCBmYWlsIHdoZW4KKwkJCSAqIGVuY291bnRlcmluZyB0aGVtIChtaWdodCBiZSBkYXRhIGNvcnJ1cHRpb24pLgorCQkJICovCisJCQllcnJvcigidW5leHBlY3RlZCBkZWx0YSBvcGNvZGUgMCIpOworCQkJZ290byBiYWQ7CisJCX0KKwl9CisKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoZGF0YSAhPSB0b3AgfHwgc2l6ZSAhPSAwKSB7CisJCWJhZF9sZW5ndGg6CisJCWVycm9yKCJkZWx0YSByZXBsYXkgaGFzIGdvbmUgd2lsZCIpOworCQliYWQ6CisJCWZyZWUoZHN0X2J1Zik7CisJCXJldHVybiBOVUxMOworCX0KKworCSpkc3Rfc2l6ZSA9IG91dCAtIGRzdF9idWY7CisJcmV0dXJuIGRzdF9idWY7Cit9CmRpZmYgLS1naXQgYS9wYXRjaC1pZHMuYyBiL3BhdGNoLWlkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYWE2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaC1pZHMuYwpAQCAtMCwwICsxLDEyMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisjaW5jbHVkZSAicGF0Y2gtaWRzLmgiCisKK3N0YXRpYyBpbnQgcGF0Y2hfaWRfZGVmaW5lZChzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJLyogbXVzdCBiZSAwIG9yIDEgcGFyZW50cyAqLworCXJldHVybiAhY29tbWl0LT5wYXJlbnRzIHx8ICFjb21taXQtPnBhcmVudHMtPm5leHQ7Cit9CisKK2ludCBjb21taXRfcGF0Y2hfaWQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZGlmZl9oZWFkZXJfb25seSwgaW50IHN0YWJsZSkKK3sKKwlpZiAoIXBhdGNoX2lkX2RlZmluZWQoY29tbWl0KSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGNvbW1pdC0+cGFyZW50cykKKwkJZGlmZl90cmVlX29pZCgmY29tbWl0LT5wYXJlbnRzLT5pdGVtLT5vYmplY3Qub2lkLAorCQkJICAgICAgJmNvbW1pdC0+b2JqZWN0Lm9pZCwgIiIsIG9wdGlvbnMpOworCWVsc2UKKwkJZGlmZl9yb290X3RyZWVfb2lkKCZjb21taXQtPm9iamVjdC5vaWQsICIiLCBvcHRpb25zKTsKKwlkaWZmY29yZV9zdGQob3B0aW9ucyk7CisJcmV0dXJuIGRpZmZfZmx1c2hfcGF0Y2hfaWQob3B0aW9ucywgb2lkLCBkaWZmX2hlYWRlcl9vbmx5LCBzdGFibGUpOworfQorCisvKgorICogV2hlbiB3ZSBjYW5ub3QgbG9hZCB0aGUgZnVsbCBwYXRjaC1pZCBmb3IgYm90aCBjb21taXRzIGZvciB3aGF0ZXZlcgorICogcmVhc29uLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAtMSAoaS5lLiByZXR1cm4gZXJyb3IoLi4uKSkuIERlc3BpdGUKKyAqIHRoZSAibmVxIiBpbiB0aGUgbmFtZSBvZiB0aGlzIGZ1bmN0aW9uLCB0aGUgY2FsbGVyIG9ubHkgY2FyZXMgYWJvdXQKKyAqIHRoZSByZXR1cm4gdmFsdWUgYmVpbmcgemVybyAoYSBhbmQgYiBhcmUgZXF1aXZhbGVudCkgb3Igbm9uLXplcm8gKGEKKyAqIGFuZCBiIGFyZSBkaWZmZXJlbnQpLCBhbmQgcmV0dXJuaW5nIG5vbi16ZXJvIHdvdWxkIGtlZXAgYm90aCBpbiB0aGUKKyAqIHJlc3VsdCwgZXZlbiBpZiB0aGV5IGFjdHVhbGx5IHdlcmUgZXF1aXZhbGVudCwgaW4gb3JkZXIgdG8gZXJyIG9uCisgKiB0aGUgc2lkZSBvZiBzYWZldHkuICBUaGUgYWN0dWFsIHZhbHVlIGJlaW5nIG5lZ2F0aXZlIGRvZXMgbm90IGhhdmUKKyAqIGFueSBzaWduaWZpY2FuY2U7IG9ubHkgdGhhdCBpdCBpcyBub24temVybyBtYXR0ZXJzLgorICovCitzdGF0aWMgaW50IHBhdGNoX2lkX25lcShjb25zdCB2b2lkICpjbXBmbl9kYXRhLAorCQkJY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVwdHIsCisJCQljb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnlfb3Jfa2V5LAorCQkJY29uc3Qgdm9pZCAqdW51c2VkX2tleWRhdGEpCit7CisJLyogTkVFRFNXT1JLOiBjb25zdCBjb3JyZWN0bmVzcz8gKi8KKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQgPSAodm9pZCAqKWNtcGZuX2RhdGE7CisJc3RydWN0IHBhdGNoX2lkICphLCAqYjsKKworCWEgPSBjb250YWluZXJfb2YoZXB0ciwgc3RydWN0IHBhdGNoX2lkLCBlbnQpOworCWIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBzdHJ1Y3QgcGF0Y2hfaWQsIGVudCk7CisKKwlpZiAoaXNfbnVsbF9vaWQoJmEtPnBhdGNoX2lkKSAmJgorCSAgICBjb21taXRfcGF0Y2hfaWQoYS0+Y29tbWl0LCBvcHQsICZhLT5wYXRjaF9pZCwgMCwgMCkpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IGdldCBwYXRjaCBJRCBmb3IgJXMiLAorCQkJb2lkX3RvX2hleCgmYS0+Y29tbWl0LT5vYmplY3Qub2lkKSk7CisJaWYgKGlzX251bGxfb2lkKCZiLT5wYXRjaF9pZCkgJiYKKwkgICAgY29tbWl0X3BhdGNoX2lkKGItPmNvbW1pdCwgb3B0LCAmYi0+cGF0Y2hfaWQsIDAsIDApKQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBnZXQgcGF0Y2ggSUQgZm9yICVzIiwKKwkJCW9pZF90b19oZXgoJmItPmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCXJldHVybiAhb2lkZXEoJmEtPnBhdGNoX2lkLCAmYi0+cGF0Y2hfaWQpOworfQorCitpbnQgaW5pdF9wYXRjaF9pZHMoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBwYXRjaF9pZHMgKmlkcykKK3sKKwltZW1zZXQoaWRzLCAwLCBzaXplb2YoKmlkcykpOworCXJlcG9fZGlmZl9zZXR1cChyLCAmaWRzLT5kaWZmb3B0cyk7CisJaWRzLT5kaWZmb3B0cy5kZXRlY3RfcmVuYW1lID0gMDsKKwlpZHMtPmRpZmZvcHRzLmZsYWdzLnJlY3Vyc2l2ZSA9IDE7CisJZGlmZl9zZXR1cF9kb25lKCZpZHMtPmRpZmZvcHRzKTsKKwloYXNobWFwX2luaXQoJmlkcy0+cGF0Y2hlcywgcGF0Y2hfaWRfbmVxLCAmaWRzLT5kaWZmb3B0cywgMjU2KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGZyZWVfcGF0Y2hfaWRzKHN0cnVjdCBwYXRjaF9pZHMgKmlkcykKK3sKKwloYXNobWFwX2ZyZWVfZW50cmllcygmaWRzLT5wYXRjaGVzLCBzdHJ1Y3QgcGF0Y2hfaWQsIGVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9wYXRjaF9pZF9lbnRyeShzdHJ1Y3QgcGF0Y2hfaWQgKnBhdGNoLAorCQkJICAgICAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICAgICBzdHJ1Y3QgcGF0Y2hfaWRzICppZHMpCit7CisJc3RydWN0IG9iamVjdF9pZCBoZWFkZXJfb25seV9wYXRjaF9pZDsKKworCXBhdGNoLT5jb21taXQgPSBjb21taXQ7CisJaWYgKGNvbW1pdF9wYXRjaF9pZChjb21taXQsICZpZHMtPmRpZmZvcHRzLCAmaGVhZGVyX29ubHlfcGF0Y2hfaWQsIDEsIDApKQorCQlyZXR1cm4gLTE7CisKKwloYXNobWFwX2VudHJ5X2luaXQoJnBhdGNoLT5lbnQsIG9pZGhhc2goJmhlYWRlcl9vbmx5X3BhdGNoX2lkKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwYXRjaF9pZCAqaGFzX2NvbW1pdF9wYXRjaF9pZChzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJICAgICBzdHJ1Y3QgcGF0Y2hfaWRzICppZHMpCit7CisJc3RydWN0IHBhdGNoX2lkIHBhdGNoOworCisJaWYgKCFwYXRjaF9pZF9kZWZpbmVkKGNvbW1pdCkpCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KCZwYXRjaCwgMCwgc2l6ZW9mKHBhdGNoKSk7CisJaWYgKGluaXRfcGF0Y2hfaWRfZW50cnkoJnBhdGNoLCBjb21taXQsIGlkcykpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGhhc2htYXBfZ2V0X2VudHJ5KCZpZHMtPnBhdGNoZXMsICZwYXRjaCwgZW50LCBOVUxMKTsKK30KKworc3RydWN0IHBhdGNoX2lkICphZGRfY29tbWl0X3BhdGNoX2lkKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkgICAgIHN0cnVjdCBwYXRjaF9pZHMgKmlkcykKK3sKKwlzdHJ1Y3QgcGF0Y2hfaWQgKmtleTsKKworCWlmICghcGF0Y2hfaWRfZGVmaW5lZChjb21taXQpKQorCQlyZXR1cm4gTlVMTDsKKworCWtleSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCprZXkpKTsKKwlpZiAoaW5pdF9wYXRjaF9pZF9lbnRyeShrZXksIGNvbW1pdCwgaWRzKSkgeworCQlmcmVlKGtleSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWhhc2htYXBfYWRkKCZpZHMtPnBhdGNoZXMsICZrZXktPmVudCk7CisJcmV0dXJuIGtleTsKK30KZGlmZiAtLWdpdCBhL3BhdGNoLWlkcy5oIGIvcGF0Y2gtaWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiYjA0ZQotLS0gL2Rldi9udWxsCisrKyBiL3BhdGNoLWlkcy5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgUEFUQ0hfSURTX0gKKyNkZWZpbmUgUEFUQ0hfSURTX0gKKworI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisKK3N0cnVjdCBjb21taXQ7CitzdHJ1Y3Qgb2JqZWN0X2lkOworc3RydWN0IHJlcG9zaXRvcnk7CisKK3N0cnVjdCBwYXRjaF9pZCB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50OworCXN0cnVjdCBvYmplY3RfaWQgcGF0Y2hfaWQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworfTsKKworc3RydWN0IHBhdGNoX2lkcyB7CisJc3RydWN0IGhhc2htYXAgcGF0Y2hlczsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZvcHRzOworfTsKKworaW50IGNvbW1pdF9wYXRjaF9pZChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCwgaW50KTsKK2ludCBpbml0X3BhdGNoX2lkcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBzdHJ1Y3QgcGF0Y2hfaWRzICopOworaW50IGZyZWVfcGF0Y2hfaWRzKHN0cnVjdCBwYXRjaF9pZHMgKik7CitzdHJ1Y3QgcGF0Y2hfaWQgKmFkZF9jb21taXRfcGF0Y2hfaWQoc3RydWN0IGNvbW1pdCAqLCBzdHJ1Y3QgcGF0Y2hfaWRzICopOworc3RydWN0IHBhdGNoX2lkICpoYXNfY29tbWl0X3BhdGNoX2lkKHN0cnVjdCBjb21taXQgKiwgc3RydWN0IHBhdGNoX2lkcyAqKTsKKworI2VuZGlmIC8qIFBBVENIX0lEU19IICovCmRpZmYgLS1naXQgYS9wYXRoLmMgYi9wYXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyYzc1MwotLS0gL2Rldi9udWxsCisrKyBiL3BhdGguYwpAQCAtMCwwICsxLDE1NDAgQEAKKy8qCisgKiBVdGlsaXRpZXMgZm9yIHBhdGhzIGFuZCBwYXRobmFtZXMKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUtY29uZmlnLmgiCisjaW5jbHVkZSAicGF0aC5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKworc3RhdGljIGludCBnZXRfc3RfbW9kZV9iaXRzKGNvbnN0IGNoYXIgKnBhdGgsIGludCAqbW9kZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApCisJCXJldHVybiAtMTsKKwkqbW9kZSA9IHN0LnN0X21vZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyIGJhZF9wYXRoW10gPSAiL2JhZC1wYXRoLyI7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmICpnZXRfcGF0aG5hbWUodm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBwYXRobmFtZV9hcnJheVs0XSA9IHsKKwkJU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQKKwl9OworCXN0YXRpYyBpbnQgaW5kZXg7CisJc3RydWN0IHN0cmJ1ZiAqc2IgPSAmcGF0aG5hbWVfYXJyYXlbaW5kZXhdOworCWluZGV4ID0gKGluZGV4ICsgMSkgJSBBUlJBWV9TSVpFKHBhdGhuYW1lX2FycmF5KTsKKwlzdHJidWZfcmVzZXQoc2IpOworCXJldHVybiBzYjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNsZWFudXBfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCS8qIENsZWFuIGl0IHVwICovCisJaWYgKHNraXBfcHJlZml4KHBhdGgsICIuLyIsICZwYXRoKSkgeworCQl3aGlsZSAoKnBhdGggPT0gJy8nKQorCQkJcGF0aCsrOworCX0KKwlyZXR1cm4gcGF0aDsKK30KKworc3RhdGljIHZvaWQgc3RyYnVmX2NsZWFudXBfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwljb25zdCBjaGFyICpwYXRoID0gY2xlYW51cF9wYXRoKHNiLT5idWYpOworCWlmIChwYXRoID4gc2ItPmJ1ZikKKwkJc3RyYnVmX3JlbW92ZShzYiwgMCwgcGF0aCAtIHNiLT5idWYpOworfQorCitjaGFyICpta3NucGF0aChjaGFyICpidWYsIHNpemVfdCBuLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJdW5zaWduZWQgbGVuOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlsZW4gPSB2c25wcmludGYoYnVmLCBuLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlpZiAobGVuID49IG4pIHsKKwkJc3RybGNweShidWYsIGJhZF9wYXRoLCBuKTsKKwkJcmV0dXJuIGJ1ZjsKKwl9CisJcmV0dXJuIChjaGFyICopY2xlYW51cF9wYXRoKGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgZGlyX3ByZWZpeChjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKmRpcikKK3sKKwlpbnQgbGVuID0gc3RybGVuKGRpcik7CisJcmV0dXJuICFzdHJuY21wKGJ1ZiwgZGlyLCBsZW4pICYmCisJCShpc19kaXJfc2VwKGJ1ZltsZW5dKSB8fCBidWZbbGVuXSA9PSAnXDAnKTsKK30KKworLyogJGJ1ZiA9fiBtfCRkaXIvKyRmaWxlfCBidXQgd2l0aG91dCByZWdleCAqLworc3RhdGljIGludCBpc19kaXJfZmlsZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZSkKK3sKKwlpbnQgbGVuID0gc3RybGVuKGRpcik7CisJaWYgKHN0cm5jbXAoYnVmLCBkaXIsIGxlbikgfHwgIWlzX2Rpcl9zZXAoYnVmW2xlbl0pKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoaXNfZGlyX3NlcChidWZbbGVuXSkpCisJCWxlbisrOworCXJldHVybiAhc3RyY21wKGJ1ZiArIGxlbiwgZmlsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcGxhY2VfZGlyKHN0cnVjdCBzdHJidWYgKmJ1ZiwgaW50IGxlbiwgY29uc3QgY2hhciAqbmV3ZGlyKQoreworCWludCBuZXdsZW4gPSBzdHJsZW4obmV3ZGlyKTsKKwlpbnQgbmVlZF9zZXAgPSAoYnVmLT5idWZbbGVuXSAmJiAhaXNfZGlyX3NlcChidWYtPmJ1ZltsZW5dKSkgJiYKKwkJIWlzX2Rpcl9zZXAobmV3ZGlyW25ld2xlbiAtIDFdKTsKKwlpZiAobmVlZF9zZXApCisJCWxlbi0tOwkgLyoga2VlcCBvbmUgY2hhciwgdG8gYmUgcmVwbGFjZWQgd2l0aCAnLycgICovCisJc3RyYnVmX3NwbGljZShidWYsIDAsIGxlbiwgbmV3ZGlyLCBuZXdsZW4pOworCWlmIChuZWVkX3NlcCkKKwkJYnVmLT5idWZbbmV3bGVuXSA9ICcvJzsKK30KKworc3RydWN0IGNvbW1vbl9kaXIgeworCS8qIE5vdCBjb25zaWRlcmVkIGdhcmJhZ2UgZm9yIHJlcG9ydF9saW5rZWRfY2hlY2tvdXRfZ2FyYmFnZSAqLworCXVuc2lnbmVkIGlnbm9yZV9nYXJiYWdlOjE7CisJdW5zaWduZWQgaXNfZGlyOjE7CisJLyogQmVsb25ncyB0byB0aGUgY29tbW9uIGRpciwgdGhvdWdoIGl0IG1heSBjb250YWluIHBhdGhzIHRoYXQgZG9uJ3QgKi8KKwl1bnNpZ25lZCBpc19jb21tb246MTsKKwljb25zdCBjaGFyICpwYXRoOworfTsKKworc3RhdGljIHN0cnVjdCBjb21tb25fZGlyIGNvbW1vbl9saXN0W10gPSB7CisJeyAwLCAxLCAxLCAiYnJhbmNoZXMiIH0sCisJeyAwLCAxLCAxLCAiY29tbW9uIiB9LAorCXsgMCwgMSwgMSwgImhvb2tzIiB9LAorCXsgMCwgMSwgMSwgImluZm8iIH0sCisJeyAwLCAwLCAwLCAiaW5mby9zcGFyc2UtY2hlY2tvdXQiIH0sCisJeyAxLCAxLCAxLCAibG9ncyIgfSwKKwl7IDEsIDAsIDAsICJsb2dzL0hFQUQiIH0sCisJeyAwLCAxLCAwLCAibG9ncy9yZWZzL2Jpc2VjdCIgfSwKKwl7IDAsIDEsIDAsICJsb2dzL3JlZnMvcmV3cml0dGVuIiB9LAorCXsgMCwgMSwgMCwgImxvZ3MvcmVmcy93b3JrdHJlZSIgfSwKKwl7IDAsIDEsIDEsICJsb3N0LWZvdW5kIiB9LAorCXsgMCwgMSwgMSwgIm9iamVjdHMiIH0sCisJeyAwLCAxLCAxLCAicmVmcyIgfSwKKwl7IDAsIDEsIDAsICJyZWZzL2Jpc2VjdCIgfSwKKwl7IDAsIDEsIDAsICJyZWZzL3Jld3JpdHRlbiIgfSwKKwl7IDAsIDEsIDAsICJyZWZzL3dvcmt0cmVlIiB9LAorCXsgMCwgMSwgMSwgInJlbW90ZXMiIH0sCisJeyAwLCAxLCAxLCAid29ya3RyZWVzIiB9LAorCXsgMCwgMSwgMSwgInJyLWNhY2hlIiB9LAorCXsgMCwgMSwgMSwgInN2biIgfSwKKwl7IDAsIDAsIDEsICJjb25maWciIH0sCisJeyAxLCAwLCAxLCAiZ2MucGlkIiB9LAorCXsgMCwgMCwgMSwgInBhY2tlZC1yZWZzIiB9LAorCXsgMCwgMCwgMSwgInNoYWxsb3ciIH0sCisJeyAwLCAwLCAwLCBOVUxMIH0KK307CisKKy8qCisgKiBBIGNvbXByZXNzZWQgdHJpZS4gIEEgdHJpZSBub2RlIGNvbnNpc3RzIG9mIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzIHRoYXQKKyAqIGFyZSBjb21tb24gdG8gYWxsIGVsZW1lbnRzIHdpdGggdGhpcyBwcmVmaXgsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgc29tZQorICogY2hpbGRyZW4uICBJZiB2YWx1ZSBpcyBub3QgTlVMTCwgdGhlIHRyaWUgbm9kZSBpcyBhIHRlcm1pbmFsIG5vZGUuCisgKgorICogRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2V0IG9mIHN0cmluZ3M6CisgKiBhYmMKKyAqIGRlZgorICogZGVmaW5pdGUKKyAqIGRlZmluaXRpb24KKyAqCisgKiBUaGUgdHJpZSB3b3VsZCBsb29rIGxpa2U6CisgKiByb290OiBsZW4gPSAwLCBjaGlsZHJlbiBhIGFuZCBkIG5vbi1OVUxMLCB2YWx1ZSA9IE5VTEwuCisgKiAgICBhOiBsZW4gPSAyLCBjb250ZW50cyA9IGJjLCB2YWx1ZSA9IChkYXRhIGZvciAiYWJjIikKKyAqICAgIGQ6IGxlbiA9IDIsIGNvbnRlbnRzID0gZWYsIGNoaWxkcmVuIGkgbm9uLU5VTEwsIHZhbHVlID0gKGRhdGEgZm9yICJkZWYiKQorICogICAgICAgaTogbGVuID0gMywgY29udGVudHMgPSBuaXQsIGNoaWxkcmVuIGUgYW5kIGkgbm9uLU5VTEwsIHZhbHVlID0gTlVMTAorICogICAgICAgICAgIGU6IGxlbiA9IDAsIGNoaWxkcmVuIGFsbCBOVUxMLCB2YWx1ZSA9IChkYXRhIGZvciAiZGVmaW5pdGUiKQorICogICAgICAgICAgIGk6IGxlbiA9IDIsIGNvbnRlbnRzID0gb24sIGNoaWxkcmVuIGFsbCBOVUxMLAorICogICAgICAgICAgICAgIHZhbHVlID0gKGRhdGEgZm9yICJkZWZpbml0aW9uIikKKyAqLworc3RydWN0IHRyaWUgeworCXN0cnVjdCB0cmllICpjaGlsZHJlblsyNTZdOworCWludCBsZW47CisJY2hhciAqY29udGVudHM7CisJdm9pZCAqdmFsdWU7Cit9OworCitzdGF0aWMgc3RydWN0IHRyaWUgKm1ha2VfdHJpZV9ub2RlKGNvbnN0IGNoYXIgKmtleSwgdm9pZCAqdmFsdWUpCit7CisJc3RydWN0IHRyaWUgKm5ld19ub2RlID0geGNhbGxvYygxLCBzaXplb2YoKm5ld19ub2RlKSk7CisJbmV3X25vZGUtPmxlbiA9IHN0cmxlbihrZXkpOworCWlmIChuZXdfbm9kZS0+bGVuKSB7CisJCW5ld19ub2RlLT5jb250ZW50cyA9IHhtYWxsb2MobmV3X25vZGUtPmxlbik7CisJCW1lbWNweShuZXdfbm9kZS0+Y29udGVudHMsIGtleSwgbmV3X25vZGUtPmxlbik7CisJfQorCW5ld19ub2RlLT52YWx1ZSA9IHZhbHVlOworCXJldHVybiBuZXdfbm9kZTsKK30KKworLyoKKyAqIEFkZCBhIGtleS92YWx1ZSBwYWlyIHRvIGEgdHJpZS4gIFRoZSBrZXkgaXMgYXNzdW1lZCB0byBiZSBcMC10ZXJtaW5hdGVkLgorICogSWYgdGhlcmUgd2FzIGFuIGV4aXN0aW5nIHZhbHVlIGZvciB0aGlzIGtleSwgcmV0dXJuIGl0LgorICovCitzdGF0aWMgdm9pZCAqYWRkX3RvX3RyaWUoc3RydWN0IHRyaWUgKnJvb3QsIGNvbnN0IGNoYXIgKmtleSwgdm9pZCAqdmFsdWUpCit7CisJc3RydWN0IHRyaWUgKmNoaWxkOworCXZvaWQgKm9sZDsKKwlpbnQgaTsKKworCWlmICghKmtleSkgeworCQkvKiB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUga2V5ICovCisJCW9sZCA9IHJvb3QtPnZhbHVlOworCQlyb290LT52YWx1ZSA9IHZhbHVlOworCQlyZXR1cm4gb2xkOworCX0KKworCWZvciAoaSA9IDA7IGkgPCByb290LT5sZW47IGkrKykgeworCQlpZiAocm9vdC0+Y29udGVudHNbaV0gPT0ga2V5W2ldKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogU3BsaXQgdGhpcyBub2RlOiBjaGlsZCB3aWxsIGNvbnRhaW4gdGhpcyBub2RlJ3MKKwkJICogZXhpc3RpbmcgY2hpbGRyZW4uCisJCSAqLworCQljaGlsZCA9IHhtYWxsb2Moc2l6ZW9mKCpjaGlsZCkpOworCQltZW1jcHkoY2hpbGQtPmNoaWxkcmVuLCByb290LT5jaGlsZHJlbiwgc2l6ZW9mKHJvb3QtPmNoaWxkcmVuKSk7CisKKwkJY2hpbGQtPmxlbiA9IHJvb3QtPmxlbiAtIGkgLSAxOworCQlpZiAoY2hpbGQtPmxlbikgeworCQkJY2hpbGQtPmNvbnRlbnRzID0geHN0cm5kdXAocm9vdC0+Y29udGVudHMgKyBpICsgMSwKKwkJCQkJCSAgIGNoaWxkLT5sZW4pOworCQl9CisJCWNoaWxkLT52YWx1ZSA9IHJvb3QtPnZhbHVlOworCQlyb290LT52YWx1ZSA9IE5VTEw7CisJCXJvb3QtPmxlbiA9IGk7CisKKwkJbWVtc2V0KHJvb3QtPmNoaWxkcmVuLCAwLCBzaXplb2Yocm9vdC0+Y2hpbGRyZW4pKTsKKwkJcm9vdC0+Y2hpbGRyZW5bKHVuc2lnbmVkIGNoYXIpcm9vdC0+Y29udGVudHNbaV1dID0gY2hpbGQ7CisKKwkJLyogVGhpcyBpcyB0aGUgbmV3bHktYWRkZWQgY2hpbGQuICovCisJCXJvb3QtPmNoaWxkcmVuWyh1bnNpZ25lZCBjaGFyKWtleVtpXV0gPQorCQkJbWFrZV90cmllX25vZGUoa2V5ICsgaSArIDEsIHZhbHVlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogV2UgaGF2ZSBtYXRjaGVkIHRoZSBlbnRpcmUgY29tcHJlc3NlZCBzZWN0aW9uICovCisJaWYgKGtleVtpXSkgeworCQljaGlsZCA9IHJvb3QtPmNoaWxkcmVuWyh1bnNpZ25lZCBjaGFyKWtleVtyb290LT5sZW5dXTsKKwkJaWYgKGNoaWxkKSB7CisJCQlyZXR1cm4gYWRkX3RvX3RyaWUoY2hpbGQsIGtleSArIHJvb3QtPmxlbiArIDEsIHZhbHVlKTsKKwkJfSBlbHNlIHsKKwkJCWNoaWxkID0gbWFrZV90cmllX25vZGUoa2V5ICsgcm9vdC0+bGVuICsgMSwgdmFsdWUpOworCQkJcm9vdC0+Y2hpbGRyZW5bKHVuc2lnbmVkIGNoYXIpa2V5W3Jvb3QtPmxlbl1dID0gY2hpbGQ7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCW9sZCA9IHJvb3QtPnZhbHVlOworCXJvb3QtPnZhbHVlID0gdmFsdWU7CisJcmV0dXJuIG9sZDsKK30KKwordHlwZWRlZiBpbnQgKCptYXRjaF9mbikoY29uc3QgY2hhciAqdW5tYXRjaGVkLCB2b2lkICp2YWx1ZSwgdm9pZCAqYmF0b24pOworCisvKgorICogU2VhcmNoIGEgdHJpZSBmb3Igc29tZSBrZXkuICBGaW5kIHRoZSBsb25nZXN0IC8tb3ItXDAtdGVybWluYXRlZAorICogcHJlZml4IG9mIHRoZSBrZXkgZm9yIHdoaWNoIHRoZSB0cmllIGNvbnRhaW5zIGEgdmFsdWUuICBJZiB0aGVyZSBpcworICogbm8gc3VjaCBwcmVmaXgsIHJldHVybiAtMS4gIE90aGVyd2lzZSBjYWxsIGZuIHdpdGggdGhlIHVubWF0Y2hlZAorICogcG9ydGlvbiBvZiB0aGUga2V5IGFuZCB0aGUgZm91bmQgdmFsdWUuICBJZiBmbiByZXR1cm5zIDAgb3IKKyAqIHBvc2l0aXZlLCB0aGVuIHJldHVybiBpdHMgcmV0dXJuIHZhbHVlLiAgSWYgZm4gcmV0dXJucyBuZWdhdGl2ZSwKKyAqIHRoZW4gY2FsbCBmbiB3aXRoIHRoZSBuZXh0LWxvbmdlc3QgLy10ZXJtaW5hdGVkIHByZWZpeCBvZiB0aGUga2V5CisgKiAoaS5lLiBhIHBhcmVudCBkaXJlY3RvcnkpIGZvciB3aGljaCB0aGUgdHJpZSBjb250YWlucyBhIHZhbHVlLCBhbmQKKyAqIGhhbmRsZSBpdHMgcmV0dXJuIHZhbHVlIHRoZSBzYW1lIHdheS4gIElmIHRoZXJlIGlzIG5vIHNob3J0ZXIKKyAqIC8tdGVybWluYXRlZCBwcmVmaXggd2l0aCBhIHZhbHVlIGxlZnQsIHRoZW4gcmV0dXJuIHRoZSBuZWdhdGl2ZQorICogcmV0dXJuIHZhbHVlIG9mIHRoZSBtb3N0IHJlY2VudCBmbiBpbnZvY2F0aW9uLgorICoKKyAqIFRoZSBrZXkgaXMgcGFydGlhbGx5IG5vcm1hbGl6ZWQ6IGNvbnNlY3V0aXZlIHNsYXNoZXMgYXJlIHNraXBwZWQuCisgKgorICogRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSB0cmllIGNvbnRhaW5pbmcgb25seSBbbG9ncywKKyAqIGxvZ3MvcmVmcy9iaXNlY3RdLCBib3RoIHdpdGggdmFsdWVzLCBidXQgbm90IGxvZ3MvcmVmcy4KKyAqCisgKiB8IGtleSAgICAgICAgICAgICAgICB8IHVubWF0Y2hlZCAgICAgIHwgcHJlZml4IHRvIG5vZGUgICB8IHJldHVybiB2YWx1ZSB8CisgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18CisgKiB8IGEgICAgICAgICAgICAgICAgICB8IG5vdCBjYWxsZWQgICAgIHwgbi9hICAgICAgICAgICAgICB8IC0xICAgICAgICAgICB8CisgKiB8IGxvZ3N0b3JlICAgICAgICAgICB8IG5vdCBjYWxsZWQgICAgIHwgbi9hICAgICAgICAgICAgICB8IC0xICAgICAgICAgICB8CisgKiB8IGxvZ3MgICAgICAgICAgICAgICB8IFwwICAgICAgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvICAgICAgICAgICAgICB8IC8gICAgICAgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcyAgICAgICAgICB8IC9yZWZzICAgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy8gICAgICAgICB8IC9yZWZzLyAgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iICAgICAgICB8IC9yZWZzL2IgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3RlZCB8IC9yZWZzL2Jpc2VjdGVkIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3QgICB8IFwwICAgICAgICAgICAgIHwgbG9ncy9yZWZzL2Jpc2VjdCB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3QvICB8IC8gICAgICAgICAgICAgIHwgbG9ncy9yZWZzL2Jpc2VjdCB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3QvYSB8IC9hICAgICAgICAgICAgIHwgbG9ncy9yZWZzL2Jpc2VjdCB8IGFzIHBlciBmbiAgICB8CisgKiB8IChJZiBmbiBpbiB0aGUgcHJldmlvdXMgbGluZSByZXR1cm5zIC0xLCB0aGVuIGZuIGlzIGNhbGxlZCBvbmNlIG1vcmU6KSB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3QvYSB8IC9yZWZzL2Jpc2VjdC9hIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18CisgKi8KK3N0YXRpYyBpbnQgdHJpZV9maW5kKHN0cnVjdCB0cmllICpyb290LCBjb25zdCBjaGFyICprZXksIG1hdGNoX2ZuIGZuLAorCQkgICAgIHZvaWQgKmJhdG9uKQoreworCWludCBpOworCWludCByZXN1bHQ7CisJc3RydWN0IHRyaWUgKmNoaWxkOworCisJaWYgKCEqa2V5KSB7CisJCS8qIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBrZXkgKi8KKwkJaWYgKHJvb3QtPnZhbHVlICYmICFyb290LT5sZW4pCisJCQlyZXR1cm4gZm4oa2V5LCByb290LT52YWx1ZSwgYmF0b24pOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJvb3QtPmxlbjsgaSsrKSB7CisJCS8qIFBhcnRpYWwgcGF0aCBub3JtYWxpemF0aW9uOiBza2lwIGNvbnNlY3V0aXZlIHNsYXNoZXMuICovCisJCWlmIChrZXlbaV0gPT0gJy8nICYmIGtleVtpKzFdID09ICcvJykgeworCQkJa2V5Kys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocm9vdC0+Y29udGVudHNbaV0gIT0ga2V5W2ldKQorCQkJcmV0dXJuIC0xOworCX0KKworCS8qIE1hdGNoZWQgdGhlIGVudGlyZSBjb21wcmVzc2VkIHNlY3Rpb24gKi8KKwlrZXkgKz0gaTsKKwlpZiAoISprZXkpIHsKKwkJLyogRW5kIG9mIGtleSAqLworCQlpZiAocm9vdC0+dmFsdWUpCisJCQlyZXR1cm4gZm4oa2V5LCByb290LT52YWx1ZSwgYmF0b24pOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQorCisJLyogUGFydGlhbCBwYXRoIG5vcm1hbGl6YXRpb246IHNraXAgY29uc2VjdXRpdmUgc2xhc2hlcyAqLworCXdoaWxlIChrZXlbMF0gPT0gJy8nICYmIGtleVsxXSA9PSAnLycpCisJCWtleSsrOworCisJY2hpbGQgPSByb290LT5jaGlsZHJlblsodW5zaWduZWQgY2hhcikqa2V5XTsKKwlpZiAoY2hpbGQpCisJCXJlc3VsdCA9IHRyaWVfZmluZChjaGlsZCwga2V5ICsgMSwgZm4sIGJhdG9uKTsKKwllbHNlCisJCXJlc3VsdCA9IC0xOworCisJaWYgKHJlc3VsdCA+PSAwIHx8ICgqa2V5ICE9ICcvJyAmJiAqa2V5ICE9IDApKQorCQlyZXR1cm4gcmVzdWx0OworCWlmIChyb290LT52YWx1ZSkKKwkJcmV0dXJuIGZuKGtleSwgcm9vdC0+dmFsdWUsIGJhdG9uKTsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCB0cmllIGNvbW1vbl90cmllOworc3RhdGljIGludCBjb21tb25fdHJpZV9kb25lX3NldHVwOworCitzdGF0aWMgdm9pZCBpbml0X2NvbW1vbl90cmllKHZvaWQpCit7CisJc3RydWN0IGNvbW1vbl9kaXIgKnA7CisKKwlpZiAoY29tbW9uX3RyaWVfZG9uZV9zZXR1cCkKKwkJcmV0dXJuOworCisJZm9yIChwID0gY29tbW9uX2xpc3Q7IHAtPnBhdGg7IHArKykKKwkJYWRkX3RvX3RyaWUoJmNvbW1vbl90cmllLCBwLT5wYXRoLCBwKTsKKworCWNvbW1vbl90cmllX2RvbmVfc2V0dXAgPSAxOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciB1cGRhdGVfY29tbW9uX2RpcjogcmV0dXJucyAxIGlmIHRoZSBkaXIKKyAqIHByZWZpeCBpcyBjb21tb24uCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfY29tbW9uKGNvbnN0IGNoYXIgKnVubWF0Y2hlZCwgdm9pZCAqdmFsdWUsIHZvaWQgKmJhdG9uKQoreworCXN0cnVjdCBjb21tb25fZGlyICpkaXIgPSB2YWx1ZTsKKworCWlmIChkaXItPmlzX2RpciAmJiAodW5tYXRjaGVkWzBdID09IDAgfHwgdW5tYXRjaGVkWzBdID09ICcvJykpCisJCXJldHVybiBkaXItPmlzX2NvbW1vbjsKKworCWlmICghZGlyLT5pc19kaXIgJiYgdW5tYXRjaGVkWzBdID09IDApCisJCXJldHVybiBkaXItPmlzX2NvbW1vbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfY29tbW9uX2RpcihzdHJ1Y3Qgc3RyYnVmICpidWYsIGludCBnaXRfZGlyX2xlbiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmNvbW1vbl9kaXIpCit7CisJY2hhciAqYmFzZSA9IGJ1Zi0+YnVmICsgZ2l0X2Rpcl9sZW47CisJaW50IGhhc19sb2NrX3N1ZmZpeCA9IHN0cmJ1Zl9zdHJpcF9zdWZmaXgoYnVmLCBMT0NLX1NVRkZJWCk7CisKKwlpbml0X2NvbW1vbl90cmllKCk7CisJaWYgKHRyaWVfZmluZCgmY29tbW9uX3RyaWUsIGJhc2UsIGNoZWNrX2NvbW1vbiwgTlVMTCkgPiAwKQorCQlyZXBsYWNlX2RpcihidWYsIGdpdF9kaXJfbGVuLCBjb21tb25fZGlyKTsKKworCWlmIChoYXNfbG9ja19zdWZmaXgpCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBMT0NLX1NVRkZJWCk7Cit9CisKK3ZvaWQgcmVwb3J0X2xpbmtlZF9jaGVja291dF9nYXJiYWdlKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNvbnN0IHN0cnVjdCBjb21tb25fZGlyICpwOworCWludCBsZW47CisKKwlpZiAoIXRoZV9yZXBvc2l0b3J5LT5kaWZmZXJlbnRfY29tbW9uZGlyKQorCQlyZXR1cm47CisJc3RyYnVmX2FkZGYoJnNiLCAiJXMvIiwgZ2V0X2dpdF9kaXIoKSk7CisJbGVuID0gc2IubGVuOworCWZvciAocCA9IGNvbW1vbl9saXN0OyBwLT5wYXRoOyBwKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aCA9IHAtPnBhdGg7CisJCWlmIChwLT5pZ25vcmVfZ2FyYmFnZSkKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfc2V0bGVuKCZzYiwgbGVuKTsKKwkJc3RyYnVmX2FkZHN0cigmc2IsIHBhdGgpOworCQlpZiAoZmlsZV9leGlzdHMoc2IuYnVmKSkKKwkJCXJlcG9ydF9nYXJiYWdlKFBBQ0tESVJfRklMRV9HQVJCQUdFLCBzYi5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgdm9pZCBhZGp1c3RfZ2l0X3BhdGgoY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLCBpbnQgZ2l0X2Rpcl9sZW4pCit7CisJY29uc3QgY2hhciAqYmFzZSA9IGJ1Zi0+YnVmICsgZ2l0X2Rpcl9sZW47CisJaWYgKGlzX2Rpcl9maWxlKGJhc2UsICJpbmZvIiwgImdyYWZ0cyIpKQorCQlzdHJidWZfc3BsaWNlKGJ1ZiwgMCwgYnVmLT5sZW4sCisJCQkgICAgICByZXBvLT5ncmFmdF9maWxlLCBzdHJsZW4ocmVwby0+Z3JhZnRfZmlsZSkpOworCWVsc2UgaWYgKCFzdHJjbXAoYmFzZSwgImluZGV4IikpCisJCXN0cmJ1Zl9zcGxpY2UoYnVmLCAwLCBidWYtPmxlbiwKKwkJCSAgICAgIHJlcG8tPmluZGV4X2ZpbGUsIHN0cmxlbihyZXBvLT5pbmRleF9maWxlKSk7CisJZWxzZSBpZiAoZGlyX3ByZWZpeChiYXNlLCAib2JqZWN0cyIpKQorCQlyZXBsYWNlX2RpcihidWYsIGdpdF9kaXJfbGVuICsgNywgcmVwby0+b2JqZWN0cy0+b2RiLT5wYXRoKTsKKwllbHNlIGlmIChnaXRfaG9va3NfcGF0aCAmJiBkaXJfcHJlZml4KGJhc2UsICJob29rcyIpKQorCQlyZXBsYWNlX2RpcihidWYsIGdpdF9kaXJfbGVuICsgNSwgZ2l0X2hvb2tzX3BhdGgpOworCWVsc2UgaWYgKHJlcG8tPmRpZmZlcmVudF9jb21tb25kaXIpCisJCXVwZGF0ZV9jb21tb25fZGlyKGJ1ZiwgZ2l0X2Rpcl9sZW4sIHJlcG8tPmNvbW1vbmRpcik7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmJ1Zl93b3JrdHJlZV9naXRkaXIoc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQkJCSAgIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCSAgIGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QpCit7CisJaWYgKCF3dCkKKwkJc3RyYnVmX2FkZHN0cihidWYsIHJlcG8tPmdpdGRpcik7CisJZWxzZSBpZiAoIXd0LT5pZCkKKwkJc3RyYnVmX2FkZHN0cihidWYsIHJlcG8tPmNvbW1vbmRpcik7CisJZWxzZQorCQlzdHJidWZfZ2l0X2NvbW1vbl9wYXRoKGJ1ZiwgcmVwbywgIndvcmt0cmVlcy8lcyIsIHd0LT5pZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2dpdF9wYXRoKGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCwgc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQkJY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCit7CisJaW50IGdpdGRpcl9sZW47CisJc3RyYnVmX3dvcmt0cmVlX2dpdGRpcihidWYsIHJlcG8sIHd0KTsKKwlpZiAoYnVmLT5sZW4gJiYgIWlzX2Rpcl9zZXAoYnVmLT5idWZbYnVmLT5sZW4gLSAxXSkpCisJCXN0cmJ1Zl9hZGRjaChidWYsICcvJyk7CisJZ2l0ZGlyX2xlbiA9IGJ1Zi0+bGVuOworCXN0cmJ1Zl92YWRkZihidWYsIGZtdCwgYXJncyk7CisJaWYgKCF3dCkKKwkJYWRqdXN0X2dpdF9wYXRoKHJlcG8sIGJ1ZiwgZ2l0ZGlyX2xlbik7CisJc3RyYnVmX2NsZWFudXBfcGF0aChidWYpOworfQorCitjaGFyICpyZXBvX2dpdF9wYXRoKGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZG9fZ2l0X3BhdGgocmVwbywgTlVMTCwgJnBhdGgsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZwYXRoLCBOVUxMKTsKK30KKwordm9pZCBzdHJidWZfcmVwb19naXRfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWRvX2dpdF9wYXRoKHJlcG8sIE5VTEwsIHNiLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKK30KKworY2hhciAqZ2l0X3BhdGhfYnVmKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCXN0cmJ1Zl9yZXNldChidWYpOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZG9fZ2l0X3BhdGgodGhlX3JlcG9zaXRvcnksIE5VTEwsIGJ1ZiwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIGJ1Zi0+YnVmOworfQorCit2b2lkIHN0cmJ1Zl9naXRfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZG9fZ2l0X3BhdGgodGhlX3JlcG9zaXRvcnksIE5VTEwsIHNiLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKK30KKworY29uc3QgY2hhciAqZ2l0X3BhdGgoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJc3RydWN0IHN0cmJ1ZiAqcGF0aG5hbWUgPSBnZXRfcGF0aG5hbWUoKTsKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlkb19naXRfcGF0aCh0aGVfcmVwb3NpdG9yeSwgTlVMTCwgcGF0aG5hbWUsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCXJldHVybiBwYXRobmFtZS0+YnVmOworfQorCitjaGFyICpnaXRfcGF0aGR1cChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlkb19naXRfcGF0aCh0aGVfcmVwb3NpdG9yeSwgTlVMTCwgJnBhdGgsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZwYXRoLCBOVUxMKTsKK30KKworY2hhciAqbWtwYXRoZHVwKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlzdHJidWZfdmFkZGYoJnNiLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlzdHJidWZfY2xlYW51cF9wYXRoKCZzYik7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKK30KKworY29uc3QgY2hhciAqbWtwYXRoKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwlzdHJ1Y3Qgc3RyYnVmICpwYXRobmFtZSA9IGdldF9wYXRobmFtZSgpOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKHBhdGhuYW1lLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gY2xlYW51cF9wYXRoKHBhdGhuYW1lLT5idWYpOworfQorCitjb25zdCBjaGFyICp3b3JrdHJlZV9naXRfcGF0aChjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0LCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpwYXRobmFtZSA9IGdldF9wYXRobmFtZSgpOworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWRvX2dpdF9wYXRoKHRoZV9yZXBvc2l0b3J5LCB3dCwgcGF0aG5hbWUsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCXJldHVybiBwYXRobmFtZS0+YnVmOworfQorCitzdGF0aWMgdm9pZCBkb193b3JrdHJlZV9wYXRoKGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkgICAgIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQoreworCXN0cmJ1Zl9hZGRzdHIoYnVmLCByZXBvLT53b3JrdHJlZSk7CisJaWYoYnVmLT5sZW4gJiYgIWlzX2Rpcl9zZXAoYnVmLT5idWZbYnVmLT5sZW4gLSAxXSkpCisJCXN0cmJ1Zl9hZGRjaChidWYsICcvJyk7CisKKwlzdHJidWZfdmFkZGYoYnVmLCBmbXQsIGFyZ3MpOworCXN0cmJ1Zl9jbGVhbnVwX3BhdGgoYnVmKTsKK30KKworY2hhciAqcmVwb193b3JrdHJlZV9wYXRoKGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwl2YV9saXN0IGFyZ3M7CisKKwlpZiAoIXJlcG8tPndvcmt0cmVlKQorCQlyZXR1cm4gTlVMTDsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZG9fd29ya3RyZWVfcGF0aChyZXBvLCAmcGF0aCwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmcGF0aCwgTlVMTCk7Cit9CisKK3ZvaWQgc3RyYnVmX3JlcG9fd29ya3RyZWVfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisKKwlpZiAoIXJlcG8tPndvcmt0cmVlKQorCQlyZXR1cm47CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWRvX3dvcmt0cmVlX3BhdGgocmVwbywgc2IsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworfQorCisvKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZS4gKi8KK3N0YXRpYyBpbnQgZG9fc3VibW9kdWxlX3BhdGgoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGdpdF9zdWJtb2R1bGVfY29tbW9uX2RpciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgZ2l0X3N1Ym1vZHVsZV9kaXIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJcmV0ID0gc3VibW9kdWxlX3RvX2dpdGRpcigmZ2l0X3N1Ym1vZHVsZV9kaXIsIHBhdGgpOworCWlmIChyZXQpCisJCWdvdG8gY2xlYW51cDsKKworCXN0cmJ1Zl9jb21wbGV0ZSgmZ2l0X3N1Ym1vZHVsZV9kaXIsICcvJyk7CisJc3RyYnVmX2FkZGJ1ZihidWYsICZnaXRfc3VibW9kdWxlX2Rpcik7CisJc3RyYnVmX3ZhZGRmKGJ1ZiwgZm10LCBhcmdzKTsKKworCWlmIChnZXRfY29tbW9uX2Rpcl9ub2VudigmZ2l0X3N1Ym1vZHVsZV9jb21tb25fZGlyLCBnaXRfc3VibW9kdWxlX2Rpci5idWYpKQorCQl1cGRhdGVfY29tbW9uX2RpcihidWYsIGdpdF9zdWJtb2R1bGVfZGlyLmxlbiwgZ2l0X3N1Ym1vZHVsZV9jb21tb25fZGlyLmJ1Zik7CisKKwlzdHJidWZfY2xlYW51cF9wYXRoKGJ1Zik7CisKK2NsZWFudXA6CisJc3RyYnVmX3JlbGVhc2UoJmdpdF9zdWJtb2R1bGVfZGlyKTsKKwlzdHJidWZfcmVsZWFzZSgmZ2l0X3N1Ym1vZHVsZV9jb21tb25fZGlyKTsKKwlyZXR1cm4gcmV0OworfQorCitjaGFyICpnaXRfcGF0aGR1cF9zdWJtb2R1bGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IGVycjsKKwl2YV9saXN0IGFyZ3M7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWVyciA9IGRvX3N1Ym1vZHVsZV9wYXRoKCZidWYsIHBhdGgsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWlmIChlcnIpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworaW50IHN0cmJ1Zl9naXRfcGF0aF9zdWJtb2R1bGUoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IGVycjsKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwllcnIgPSBkb19zdWJtb2R1bGVfcGF0aChidWYsIHBhdGgsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZG9fZ2l0X2NvbW1vbl9wYXRoKGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJCSAgICAgICBjb25zdCBjaGFyICpmbXQsCisJCQkgICAgICAgdmFfbGlzdCBhcmdzKQoreworCXN0cmJ1Zl9hZGRzdHIoYnVmLCByZXBvLT5jb21tb25kaXIpOworCWlmIChidWYtPmxlbiAmJiAhaXNfZGlyX3NlcChidWYtPmJ1ZltidWYtPmxlbiAtIDFdKSkKKwkJc3RyYnVmX2FkZGNoKGJ1ZiwgJy8nKTsKKwlzdHJidWZfdmFkZGYoYnVmLCBmbXQsIGFyZ3MpOworCXN0cmJ1Zl9jbGVhbnVwX3BhdGgoYnVmKTsKK30KKworY29uc3QgY2hhciAqZ2l0X2NvbW1vbl9wYXRoKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0cnVjdCBzdHJidWYgKnBhdGhuYW1lID0gZ2V0X3BhdGhuYW1lKCk7CisJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZG9fZ2l0X2NvbW1vbl9wYXRoKHRoZV9yZXBvc2l0b3J5LCBwYXRobmFtZSwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHBhdGhuYW1lLT5idWY7Cit9CisKK3ZvaWQgc3RyYnVmX2dpdF9jb21tb25fcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlkb19naXRfY29tbW9uX3BhdGgocmVwbywgc2IsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworfQorCitpbnQgdmFsaWRhdGVfaGVhZHJlZihjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIgYnVmZmVyWzI1Nl07CisJY29uc3QgY2hhciAqcmVmbmFtZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgZmQ7CisJc3NpemVfdCBsZW47CisKKwlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApCisJCXJldHVybiAtMTsKKworCS8qIE1ha2Ugc3VyZSBpdCBpcyBhICJyZWZzLy4uIiBzeW1saW5rICovCisJaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpIHsKKwkJbGVuID0gcmVhZGxpbmsocGF0aCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKS0xKTsKKwkJaWYgKGxlbiA+PSA1ICYmICFtZW1jbXAoInJlZnMvIiwgYnVmZmVyLCA1KSkKKwkJCXJldHVybiAwOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBBbnl0aGluZyBlbHNlLCBqdXN0IG9wZW4gaXQgYW5kIHRyeSB0byBzZWUgaWYgaXQgaXMgYSBzeW1ib2xpYyByZWYuCisJICovCisJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisJbGVuID0gcmVhZF9pbl9mdWxsKGZkLCBidWZmZXIsIHNpemVvZihidWZmZXIpLTEpOworCWNsb3NlKGZkKTsKKworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gLTE7CisJYnVmZmVyW2xlbl0gPSAnXDAnOworCisJLyoKKwkgKiBJcyBpdCBhIHN5bWJvbGljIHJlZj8KKwkgKi8KKwlpZiAoc2tpcF9wcmVmaXgoYnVmZmVyLCAicmVmOiIsICZyZWZuYW1lKSkgeworCQl3aGlsZSAoaXNzcGFjZSgqcmVmbmFtZSkpCisJCQlyZWZuYW1lKys7CisJCWlmIChzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy8iKSkKKwkJCXJldHVybiAwOworCX0KKworCS8qCisJICogSXMgdGhpcyBhIGRldGFjaGVkIEhFQUQ/CisJICovCisJaWYgKCFnZXRfb2lkX2hleChidWZmZXIsICZvaWQpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBwYXNzd2QgKmdldHB3X3N0cihjb25zdCBjaGFyICp1c2VybmFtZSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgcGFzc3dkICpwdzsKKwljaGFyICp1c2VybmFtZV96ID0geG1lbWR1cHoodXNlcm5hbWUsIGxlbik7CisJcHcgPSBnZXRwd25hbSh1c2VybmFtZV96KTsKKwlmcmVlKHVzZXJuYW1lX3opOworCXJldHVybiBwdzsKK30KKworLyoKKyAqIFJldHVybiBhIHN0cmluZyB3aXRoIH4gYW5kIH51c2VyIGV4cGFuZGVkIHZpYSBnZXRwdyouICBJZiBidWYgIT0gTlVMTCwKKyAqIHRoZW4gaXQgaXMgYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nLiBSZXR1cm5zIE5VTEwgb24gZ2V0cHcgZmFpbHVyZSBvcgorICogaWYgcGF0aCBpcyBOVUxMLgorICoKKyAqIElmIHJlYWxfaG9tZSBpcyB0cnVlLCBzdHJidWZfcmVhbHBhdGgoJEhPTUUpIGlzIHVzZWQgaW4gdGhlIGV4cGFuc2lvbi4KKyAqLworY2hhciAqZXhwYW5kX3VzZXJfcGF0aChjb25zdCBjaGFyICpwYXRoLCBpbnQgcmVhbF9ob21lKQoreworCXN0cnVjdCBzdHJidWYgdXNlcl9wYXRoID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqdG9fY29weSA9IHBhdGg7CisKKwlpZiAocGF0aCA9PSBOVUxMKQorCQlnb3RvIHJldHVybl9udWxsOworCWlmIChwYXRoWzBdID09ICd+JykgeworCQljb25zdCBjaGFyICpmaXJzdF9zbGFzaCA9IHN0cmNocm51bChwYXRoLCAnLycpOworCQljb25zdCBjaGFyICp1c2VybmFtZSA9IHBhdGggKyAxOworCQlzaXplX3QgdXNlcm5hbWVfbGVuID0gZmlyc3Rfc2xhc2ggLSB1c2VybmFtZTsKKwkJaWYgKHVzZXJuYW1lX2xlbiA9PSAwKSB7CisJCQljb25zdCBjaGFyICpob21lID0gZ2V0ZW52KCJIT01FIik7CisJCQlpZiAoIWhvbWUpCisJCQkJZ290byByZXR1cm5fbnVsbDsKKwkJCWlmIChyZWFsX2hvbWUpCisJCQkJc3RyYnVmX2FkZF9yZWFsX3BhdGgoJnVzZXJfcGF0aCwgaG9tZSk7CisJCQllbHNlCisJCQkJc3RyYnVmX2FkZHN0cigmdXNlcl9wYXRoLCBob21lKTsKKyNpZmRlZiBHSVRfV0lORE9XU19OQVRJVkUKKwkJCWNvbnZlcnRfc2xhc2hlcyh1c2VyX3BhdGguYnVmKTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJc3RydWN0IHBhc3N3ZCAqcHcgPSBnZXRwd19zdHIodXNlcm5hbWUsIHVzZXJuYW1lX2xlbik7CisJCQlpZiAoIXB3KQorCQkJCWdvdG8gcmV0dXJuX251bGw7CisJCQlzdHJidWZfYWRkc3RyKCZ1c2VyX3BhdGgsIHB3LT5wd19kaXIpOworCQl9CisJCXRvX2NvcHkgPSBmaXJzdF9zbGFzaDsKKwl9CisJc3RyYnVmX2FkZHN0cigmdXNlcl9wYXRoLCB0b19jb3B5KTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmdXNlcl9wYXRoLCBOVUxMKTsKK3JldHVybl9udWxsOgorCXN0cmJ1Zl9yZWxlYXNlKCZ1c2VyX3BhdGgpOworCXJldHVybiBOVUxMOworfQorCisvKgorICogRmlyc3QsIG9uZSBkaXJlY3RvcnkgdG8gdHJ5IGlzIGRldGVybWluZWQgYnkgdGhlIGZvbGxvd2luZyBhbGdvcml0aG0uCisgKgorICogKDApIElmICJzdHJpY3QiIGlzIGdpdmVuLCB0aGUgcGF0aCBpcyB1c2VkIGFzIGdpdmVuIGFuZCBubyBEV0lNIGlzCisgKiAgICAgZG9uZS4gT3RoZXJ3aXNlOgorICogKDEpICJ+L3BhdGgiIHRvIG1lYW4gcGF0aCB1bmRlciB0aGUgcnVubmluZyB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnk7CisgKiAoMikgIn51c2VyL3BhdGgiIHRvIG1lYW4gcGF0aCB1bmRlciBuYW1lZCB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnk7CisgKiAoMykgInJlbGF0aXZlL3BhdGgiIHRvIG1lYW4gY3dkIHJlbGF0aXZlIGRpcmVjdG9yeTsgb3IKKyAqICg0KSAiL2Fic29sdXRlL3BhdGgiIHRvIG1lYW4gYWJzb2x1dGUgZGlyZWN0b3J5LgorICoKKyAqIFVubGVzcyAic3RyaWN0IiBpcyBnaXZlbiwgd2UgY2hlY2sgIiVzLy5naXQiLCAiJXMiLCAiJXMuZ2l0Ly5naXQiLCAiJXMuZ2l0IgorICogaW4gdGhpcyBvcmRlci4gV2Ugc2VsZWN0IHRoZSBmaXJzdCBvbmUgdGhhdCBpcyBhIHZhbGlkIGdpdCByZXBvc2l0b3J5LCBhbmQKKyAqIGNoZGlyKCkgdG8gaXQuIElmIG5vbmUgbWF0Y2gsIG9yIHdlIGZhaWwgdG8gY2hkaXIsIHdlIHJldHVybiBOVUxMLgorICoKKyAqIElmIGFsbCBnb2VzIHdlbGwsIHdlIHJldHVybiB0aGUgZGlyZWN0b3J5IHdlIHVzZWQgdG8gY2hkaXIoKSAoYnV0CisgKiBiZWZvcmUgfnVzZXIgaXMgZXhwYW5kZWQpLCBhdm9pZGluZyBnZXRjd2QoKSByZXNvbHZpbmcgc3ltYm9saWMKKyAqIGxpbmtzLiAgVXNlciByZWxhdGl2ZSBwYXRocyBhcmUgYWxzbyByZXR1cm5lZCBhcyB0aGV5IGFyZSBnaXZlbiwKKyAqIGV4Y2VwdCBEV0lNIHN1ZmZpeGluZy4KKyAqLworY29uc3QgY2hhciAqZW50ZXJfcmVwbyhjb25zdCBjaGFyICpwYXRoLCBpbnQgc3RyaWN0KQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHZhbGlkYXRlZF9wYXRoID0gU1RSQlVGX0lOSVQ7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgdXNlZF9wYXRoID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIXBhdGgpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFzdHJpY3QpIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKnN1ZmZpeFtdID0geworCQkJIi8uZ2l0IiwgIiIsICIuZ2l0Ly5naXQiLCAiLmdpdCIsIE5VTEwsCisJCX07CisJCWNvbnN0IGNoYXIgKmdpdGZpbGU7CisJCWludCBsZW4gPSBzdHJsZW4ocGF0aCk7CisJCWludCBpOworCQl3aGlsZSAoKDEgPCBsZW4pICYmIChwYXRoW2xlbi0xXSA9PSAnLycpKQorCQkJbGVuLS07CisKKwkJLyoKKwkJICogV2UgY2FuIGhhbmRsZSBhcmJpdHJhcnktc2l6ZWQgYnVmZmVycywgYnV0IHRoaXMgcmVtYWlucyBhcyBhCisJCSAqIHNhbml0eSBjaGVjayBvbiB1bnRydXN0ZWQgaW5wdXQuCisJCSAqLworCQlpZiAoUEFUSF9NQVggPD0gbGVuKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJc3RyYnVmX3Jlc2V0KCZ1c2VkX3BhdGgpOworCQlzdHJidWZfcmVzZXQoJnZhbGlkYXRlZF9wYXRoKTsKKwkJc3RyYnVmX2FkZCgmdXNlZF9wYXRoLCBwYXRoLCBsZW4pOworCQlzdHJidWZfYWRkKCZ2YWxpZGF0ZWRfcGF0aCwgcGF0aCwgbGVuKTsKKworCQlpZiAodXNlZF9wYXRoLmJ1ZlswXSA9PSAnficpIHsKKwkJCWNoYXIgKm5ld3BhdGggPSBleHBhbmRfdXNlcl9wYXRoKHVzZWRfcGF0aC5idWYsIDApOworCQkJaWYgKCFuZXdwYXRoKQorCQkJCXJldHVybiBOVUxMOworCQkJc3RyYnVmX2F0dGFjaCgmdXNlZF9wYXRoLCBuZXdwYXRoLCBzdHJsZW4obmV3cGF0aCksCisJCQkJICAgICAgc3RybGVuKG5ld3BhdGgpKTsKKwkJfQorCQlmb3IgKGkgPSAwOyBzdWZmaXhbaV07IGkrKykgeworCQkJc3RydWN0IHN0YXQgc3Q7CisJCQlzaXplX3QgYmFzZWxlbiA9IHVzZWRfcGF0aC5sZW47CisJCQlzdHJidWZfYWRkc3RyKCZ1c2VkX3BhdGgsIHN1ZmZpeFtpXSk7CisJCQlpZiAoIXN0YXQodXNlZF9wYXRoLmJ1ZiwgJnN0KSAmJgorCQkJICAgIChTX0lTUkVHKHN0LnN0X21vZGUpIHx8CisJCQkgICAgKFNfSVNESVIoc3Quc3RfbW9kZSkgJiYgaXNfZ2l0X2RpcmVjdG9yeSh1c2VkX3BhdGguYnVmKSkpKSB7CisJCQkJc3RyYnVmX2FkZHN0cigmdmFsaWRhdGVkX3BhdGgsIHN1ZmZpeFtpXSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzdHJidWZfc2V0bGVuKCZ1c2VkX3BhdGgsIGJhc2VsZW4pOworCQl9CisJCWlmICghc3VmZml4W2ldKQorCQkJcmV0dXJuIE5VTEw7CisJCWdpdGZpbGUgPSByZWFkX2dpdGZpbGUodXNlZF9wYXRoLmJ1Zik7CisJCWlmIChnaXRmaWxlKSB7CisJCQlzdHJidWZfcmVzZXQoJnVzZWRfcGF0aCk7CisJCQlzdHJidWZfYWRkc3RyKCZ1c2VkX3BhdGgsIGdpdGZpbGUpOworCQl9CisJCWlmIChjaGRpcih1c2VkX3BhdGguYnVmKSkKKwkJCXJldHVybiBOVUxMOworCQlwYXRoID0gdmFsaWRhdGVkX3BhdGguYnVmOworCX0KKwllbHNlIHsKKwkJY29uc3QgY2hhciAqZ2l0ZmlsZSA9IHJlYWRfZ2l0ZmlsZShwYXRoKTsKKwkJaWYgKGdpdGZpbGUpCisJCQlwYXRoID0gZ2l0ZmlsZTsKKwkJaWYgKGNoZGlyKHBhdGgpKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGlzX2dpdF9kaXJlY3RvcnkoIi4iKSkgeworCQlzZXRfZ2l0X2RpcigiLiIsIDApOworCQljaGVja19yZXBvc2l0b3J5X2Zvcm1hdChOVUxMKTsKKwkJcmV0dXJuIHBhdGg7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgY2FsY19zaGFyZWRfcGVybShpbnQgbW9kZSkKK3sKKwlpbnQgdHdlYWs7CisKKwlpZiAoZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCkgPCAwKQorCQl0d2VhayA9IC1nZXRfc2hhcmVkX3JlcG9zaXRvcnkoKTsKKwllbHNlCisJCXR3ZWFrID0gZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCk7CisKKwlpZiAoIShtb2RlICYgU19JV1VTUikpCisJCXR3ZWFrICY9IH4wMjIyOworCWlmIChtb2RlICYgU19JWFVTUikKKwkJLyogQ29weSByZWFkIGJpdHMgdG8gZXhlY3V0ZSBiaXRzICovCisJCXR3ZWFrIHw9ICh0d2VhayAmIDA0NDQpID4+IDI7CisJaWYgKGdldF9zaGFyZWRfcmVwb3NpdG9yeSgpIDwgMCkKKwkJbW9kZSA9IChtb2RlICYgfjA3NzcpIHwgdHdlYWs7CisJZWxzZQorCQltb2RlIHw9IHR3ZWFrOworCisJcmV0dXJuIG1vZGU7Cit9CisKKworaW50IGFkanVzdF9zaGFyZWRfcGVybShjb25zdCBjaGFyICpwYXRoKQoreworCWludCBvbGRfbW9kZSwgbmV3X21vZGU7CisKKwlpZiAoIWdldF9zaGFyZWRfcmVwb3NpdG9yeSgpKQorCQlyZXR1cm4gMDsKKwlpZiAoZ2V0X3N0X21vZGVfYml0cyhwYXRoLCAmb2xkX21vZGUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJbmV3X21vZGUgPSBjYWxjX3NoYXJlZF9wZXJtKG9sZF9tb2RlKTsKKwlpZiAoU19JU0RJUihvbGRfbW9kZSkpIHsKKwkJLyogQ29weSByZWFkIGJpdHMgdG8gZXhlY3V0ZSBiaXRzICovCisJCW5ld19tb2RlIHw9IChuZXdfbW9kZSAmIDA0NDQpID4+IDI7CisJCW5ld19tb2RlIHw9IEZPUkNFX0RJUl9TRVRfR0lEOworCX0KKworCWlmICgoKG9sZF9tb2RlIF4gbmV3X21vZGUpICYgflNfSUZNVCkgJiYKKwkJCWNobW9kKHBhdGgsIChuZXdfbW9kZSAmIH5TX0lGTVQpKSA8IDApCisJCXJldHVybiAtMjsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzYWZlX2NyZWF0ZV9kaXIoY29uc3QgY2hhciAqZGlyLCBpbnQgc2hhcmUpCit7CisJaWYgKG1rZGlyKGRpciwgMDc3NykgPCAwKSB7CisJCWlmIChlcnJubyAhPSBFRVhJU1QpIHsKKwkJCXBlcnJvcihkaXIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwllbHNlIGlmIChzaGFyZSAmJiBhZGp1c3Rfc2hhcmVkX3Blcm0oZGlyKSkKKwkJZGllKF8oIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIiksIGRpcik7Cit9CisKK3N0YXRpYyBpbnQgaGF2ZV9zYW1lX3Jvb3QoY29uc3QgY2hhciAqcGF0aDEsIGNvbnN0IGNoYXIgKnBhdGgyKQoreworCWludCBpc19hYnMxLCBpc19hYnMyOworCisJaXNfYWJzMSA9IGlzX2Fic29sdXRlX3BhdGgocGF0aDEpOworCWlzX2FiczIgPSBpc19hYnNvbHV0ZV9wYXRoKHBhdGgyKTsKKwlyZXR1cm4gKGlzX2FiczEgJiYgaXNfYWJzMiAmJiB0b2xvd2VyKHBhdGgxWzBdKSA9PSB0b2xvd2VyKHBhdGgyWzBdKSkgfHwKKwkgICAgICAgKCFpc19hYnMxICYmICFpc19hYnMyKTsKK30KKworLyoKKyAqIEdpdmUgcGF0aCBhcyByZWxhdGl2ZSB0byBwcmVmaXguCisgKgorICogVGhlIHN0cmJ1ZiBtYXkgb3IgbWF5IG5vdCBiZSB1c2VkLCBzbyBkbyBub3QgYXNzdW1lIGl0IGNvbnRhaW5zIHRoZQorICogcmV0dXJuZWQgcGF0aC4KKyAqLworY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aChjb25zdCBjaGFyICppbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgaW5fbGVuID0gaW4gPyBzdHJsZW4oaW4pIDogMDsKKwlpbnQgcHJlZml4X2xlbiA9IHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMDsKKwlpbnQgaW5fb2ZmID0gMDsKKwlpbnQgcHJlZml4X29mZiA9IDA7CisJaW50IGkgPSAwLCBqID0gMDsKKworCWlmICghaW5fbGVuKQorCQlyZXR1cm4gIi4vIjsKKwllbHNlIGlmICghcHJlZml4X2xlbikKKwkJcmV0dXJuIGluOworCisJaWYgKGhhdmVfc2FtZV9yb290KGluLCBwcmVmaXgpKQorCQkvKiBieXBhc3MgZG9zX2RyaXZlLCBmb3IgImM6IiBpcyBpZGVudGljYWwgdG8gIkM6IiAqLworCQlpID0gaiA9IGhhc19kb3NfZHJpdmVfcHJlZml4KGluKTsKKwllbHNlIHsKKwkJcmV0dXJuIGluOworCX0KKworCXdoaWxlIChpIDwgcHJlZml4X2xlbiAmJiBqIDwgaW5fbGVuICYmIHByZWZpeFtpXSA9PSBpbltqXSkgeworCQlpZiAoaXNfZGlyX3NlcChwcmVmaXhbaV0pKSB7CisJCQl3aGlsZSAoaXNfZGlyX3NlcChwcmVmaXhbaV0pKQorCQkJCWkrKzsKKwkJCXdoaWxlIChpc19kaXJfc2VwKGluW2pdKSkKKwkJCQlqKys7CisJCQlwcmVmaXhfb2ZmID0gaTsKKwkJCWluX29mZiA9IGo7CisJCX0gZWxzZSB7CisJCQlpKys7CisJCQlqKys7CisJCX0KKwl9CisKKwlpZiAoCisJICAgIC8qICJwcmVmaXgiIHNlZW1zIGxpa2UgcHJlZml4IG9mICJpbiIgKi8KKwkgICAgaSA+PSBwcmVmaXhfbGVuICYmCisJICAgIC8qCisJICAgICAqIGJ1dCAiL2ZvbyIgaXMgbm90IGEgcHJlZml4IG9mICIvZm9vYmFyIgorCSAgICAgKiAoaS5lLiBwcmVmaXggbm90IGVuZCB3aXRoICcvJykKKwkgICAgICovCisJICAgIHByZWZpeF9vZmYgPCBwcmVmaXhfbGVuKSB7CisJCWlmIChqID49IGluX2xlbikgeworCQkJLyogaW49Ii9hL2IiLCBwcmVmaXg9Ii9hL2IiICovCisJCQlpbl9vZmYgPSBpbl9sZW47CisJCX0gZWxzZSBpZiAoaXNfZGlyX3NlcChpbltqXSkpIHsKKwkJCS8qIGluPSIvYS9iL2MiLCBwcmVmaXg9Ii9hL2IiICovCisJCQl3aGlsZSAoaXNfZGlyX3NlcChpbltqXSkpCisJCQkJaisrOworCQkJaW5fb2ZmID0gajsKKwkJfSBlbHNlIHsKKwkJCS8qIGluPSIvYS9iYmIvYyIsIHByZWZpeD0iL2EvYiIgKi8KKwkJCWkgPSBwcmVmaXhfb2ZmOworCQl9CisJfSBlbHNlIGlmICgKKwkJICAgLyogImluIiBpcyBzaG9ydCB0aGFuICJwcmVmaXgiICovCisJCSAgIGogPj0gaW5fbGVuICYmCisJCSAgIC8qICJpbiIgbm90IGVuZCB3aXRoICcvJyAqLworCQkgICBpbl9vZmYgPCBpbl9sZW4pIHsKKwkJaWYgKGlzX2Rpcl9zZXAocHJlZml4W2ldKSkgeworCQkJLyogaW49Ii9hL2IiLCBwcmVmaXg9Ii9hL2IvYy8iICovCisJCQl3aGlsZSAoaXNfZGlyX3NlcChwcmVmaXhbaV0pKQorCQkJCWkrKzsKKwkJCWluX29mZiA9IGluX2xlbjsKKwkJfQorCX0KKwlpbiArPSBpbl9vZmY7CisJaW5fbGVuIC09IGluX29mZjsKKworCWlmIChpID49IHByZWZpeF9sZW4pIHsKKwkJaWYgKCFpbl9sZW4pCisJCQlyZXR1cm4gIi4vIjsKKwkJZWxzZQorCQkJcmV0dXJuIGluOworCX0KKworCXN0cmJ1Zl9yZXNldChzYik7CisJc3RyYnVmX2dyb3coc2IsIGluX2xlbik7CisKKwl3aGlsZSAoaSA8IHByZWZpeF9sZW4pIHsKKwkJaWYgKGlzX2Rpcl9zZXAocHJlZml4W2ldKSkgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgIi4uLyIpOworCQkJd2hpbGUgKGlzX2Rpcl9zZXAocHJlZml4W2ldKSkKKwkJCQlpKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpKys7CisJfQorCWlmICghaXNfZGlyX3NlcChwcmVmaXhbcHJlZml4X2xlbiAtIDFdKSkKKwkJc3RyYnVmX2FkZHN0cihzYiwgIi4uLyIpOworCisJc3RyYnVmX2FkZHN0cihzYiwgaW4pOworCisJcmV0dXJuIHNiLT5idWY7Cit9CisKKy8qCisgKiBBIHNpbXBsZXIgaW1wbGVtZW50YXRpb24gb2YgcmVsYXRpdmVfcGF0aAorICoKKyAqIEdldCByZWxhdGl2ZSBwYXRoIGJ5IHJlbW92aW5nICJwcmVmaXgiIGZyb20gImluIi4gVGhpcyBmdW5jdGlvbgorICogZmlyc3QgYXBwZWFycyBpbiB2MS41LjYtMS1nMDQ0YmJiYywgYW5kIG1ha2VzIGdpdF9kaXIgc2hvcnRlcgorICogdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2Ugd2hlbiB0cmF2ZXJzaW5nIHRoZSBwYXRoIHRvIHdvcmtfdHJlZS4KKyAqLworY29uc3QgY2hhciAqcmVtb3ZlX2xlYWRpbmdfcGF0aChjb25zdCBjaGFyICppbiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBpID0gMCwgaiA9IDA7CisKKwlpZiAoIXByZWZpeCB8fCAhcHJlZml4WzBdKQorCQlyZXR1cm4gaW47CisJd2hpbGUgKHByZWZpeFtpXSkgeworCQlpZiAoaXNfZGlyX3NlcChwcmVmaXhbaV0pKSB7CisJCQlpZiAoIWlzX2Rpcl9zZXAoaW5bal0pKQorCQkJCXJldHVybiBpbjsKKwkJCXdoaWxlIChpc19kaXJfc2VwKHByZWZpeFtpXSkpCisJCQkJaSsrOworCQkJd2hpbGUgKGlzX2Rpcl9zZXAoaW5bal0pKQorCQkJCWorKzsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKGluW2pdICE9IHByZWZpeFtpXSkgeworCQkJcmV0dXJuIGluOworCQl9CisJCWkrKzsKKwkJaisrOworCX0KKwlpZiAoCisJICAgIC8qICIvZm9vIiBpcyBhIHByZWZpeCBvZiAiL2ZvbyIgKi8KKwkgICAgaW5bal0gJiYKKwkgICAgLyogIi9mb28iIGlzIG5vdCBhIHByZWZpeCBvZiAiL2Zvb2JhciIgKi8KKwkgICAgIWlzX2Rpcl9zZXAocHJlZml4W2ktMV0pICYmICFpc19kaXJfc2VwKGluW2pdKQorCSAgICkKKwkJcmV0dXJuIGluOworCXdoaWxlIChpc19kaXJfc2VwKGluW2pdKSkKKwkJaisrOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCWlmICghaW5bal0pCisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIi4iKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgaW4gKyBqKTsKKwlyZXR1cm4gYnVmLmJ1ZjsKK30KKworLyoKKyAqIEl0IGlzIG9rYXkgaWYgZHN0ID09IHNyYywgYnV0IHRoZXkgc2hvdWxkIG5vdCBvdmVybGFwIG90aGVyd2lzZS4KKyAqIFRoZSAiZHN0IiBidWZmZXIgbXVzdCBiZSBhdCBsZWFzdCBhcyBsb25nIGFzICJzcmMiOyBub3JtYWxpemluZyBtYXkgc2hyaW5rCisgKiB0aGUgc2l6ZSBvZiB0aGUgcGF0aCwgYnV0IHdpbGwgbmV2ZXIgZ3JvdyBpdC4KKyAqCisgKiBQZXJmb3JtcyB0aGUgZm9sbG93aW5nIG5vcm1hbGl6YXRpb25zIG9uIHNyYywgc3RvcmluZyB0aGUgcmVzdWx0IGluIGRzdDoKKyAqIC0gRW5zdXJlcyB0aGF0IGNvbXBvbmVudHMgYXJlIHNlcGFyYXRlZCBieSAnLycgKFdpbmRvd3Mgb25seSkKKyAqIC0gU3F1YXNoZXMgc2VxdWVuY2VzIG9mICcvJyBleGNlcHQgIi8vc2VydmVyL3NoYXJlIiBvbiBXaW5kb3dzCisgKiAtIFJlbW92ZXMgIi4iIGNvbXBvbmVudHMuCisgKiAtIFJlbW92ZXMgIi4uIiBjb21wb25lbnRzLCBhbmQgdGhlIGNvbXBvbmVudHMgdGhlIHByZWNlZGUgdGhlbS4KKyAqIFJldHVybnMgZmFpbHVyZSAobm9uLXplcm8pIGlmIGEgIi4uIiBjb21wb25lbnQgYXBwZWFycyBhcyBmaXJzdCBwYXRoCisgKiBjb21wb25lbnQgYW55dGltZSBkdXJpbmcgdGhlIG5vcm1hbGl6YXRpb24uIE90aGVyd2lzZSwgcmV0dXJucyBzdWNjZXNzICgwKS4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBwdXJlbHkgdGV4dHVhbC4gIEl0IGRvZXMgbm90IGZvbGxvdyBzeW1saW5rcywKKyAqIHZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBwYXRoLCBvciBtYWtlIGFueSBzeXN0ZW0gY2FsbHMuCisgKgorICogcHJlZml4X2xlbiAhPSBOVUxMIGlzIGZvciBhIHNwZWNpZmljIGNhc2Ugb2YgcHJlZml4X3BhdGhzcGVjKCk6CisgKiBhc3N1bWUgdGhhdCBzcmMgPT0gZHN0IGFuZCBzcmNbMC4ucHJlZml4X2xlbi0xXSBpcyBhbHJlYWR5CisgKiBub3JtYWxpemVkLCBhbnkgdGltZSAiLi4vIiBlYXRzIHVwIHRvIHRoZSBwcmVmaXhfbGVuIHBhcnQsCisgKiBwcmVmaXhfbGVuIGlzIHJlZHVjZWQuIEluIHRoZSBlbmQgcHJlZml4X2xlbiBpcyB0aGUgcmVtYWluaW5nCisgKiBwcmVmaXggdGhhdCBoYXMgbm90IGJlZW4gb3ZlcnJpZGRlbiBieSB1c2VyIHBhdGhzcGVjLgorICoKKyAqIE5FRURTV09SSzogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHBlcmZvcm0gbm9ybWFsaXphdGlvbiB3LnIudC4gdHJhaWxpbmcgJy8nLgorICogRm9yIGV2ZXJ5dGhpbmcgYnV0IHRoZSByb290IGZvbGRlciBpdHNlbGYsIHRoZSBub3JtYWxpemVkIHBhdGggc2hvdWxkIG5vdAorICogZW5kIHdpdGggYSAnLycsIHRoZW4gdGhlIGNhbGxlcnMgbmVlZCB0byBiZSBmaXhlZCB1cCBhY2NvcmRpbmdseS4KKyAqCisgKi8KK2ludCBub3JtYWxpemVfcGF0aF9jb3B5X2xlbihjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50ICpwcmVmaXhfbGVuKQoreworCWNoYXIgKmRzdDA7CisJY29uc3QgY2hhciAqZW5kOworCisJLyoKKwkgKiBDb3B5IGluaXRpYWwgcGFydCBvZiBhYnNvbHV0ZSBwYXRoOiAiLyIsICJDOi8iLCAiLy9zZXJ2ZXIvc2hhcmUvIi4KKwkgKi8KKwllbmQgPSBzcmMgKyBvZmZzZXRfMXN0X2NvbXBvbmVudChzcmMpOworCXdoaWxlIChzcmMgPCBlbmQpIHsKKwkJY2hhciBjID0gKnNyYysrOworCQlpZiAoaXNfZGlyX3NlcChjKSkKKwkJCWMgPSAnLyc7CisJCSpkc3QrKyA9IGM7CisJfQorCWRzdDAgPSBkc3Q7CisKKwl3aGlsZSAoaXNfZGlyX3NlcCgqc3JjKSkKKwkJc3JjKys7CisKKwlmb3IgKDs7KSB7CisJCWNoYXIgYyA9ICpzcmM7CisKKwkJLyoKKwkJICogQSBwYXRoIGNvbXBvbmVudCB0aGF0IGJlZ2lucyB3aXRoIC4gY291bGQgYmUKKwkJICogc3BlY2lhbDoKKwkJICogKDEpICIuIiBhbmQgZW5kcyAgIC0tIGlnbm9yZSBhbmQgdGVybWluYXRlLgorCQkgKiAoMikgIi4vIiAgICAgICAgICAgLS0gaWdub3JlIHRoZW0sIGVhdCBzbGFzaCBhbmQgY29udGludWUuCisJCSAqICgzKSAiLi4iIGFuZCBlbmRzICAtLSBzdHJpcCBvbmUgYW5kIHRlcm1pbmF0ZS4KKwkJICogKDQpICIuLi8iICAgICAgICAgIC0tIHN0cmlwIG9uZSwgZWF0IHNsYXNoIGFuZCBjb250aW51ZS4KKwkJICovCisJCWlmIChjID09ICcuJykgeworCQkJaWYgKCFzcmNbMV0pIHsKKwkJCQkvKiAoMSkgKi8KKwkJCQlzcmMrKzsKKwkJCX0gZWxzZSBpZiAoaXNfZGlyX3NlcChzcmNbMV0pKSB7CisJCQkJLyogKDIpICovCisJCQkJc3JjICs9IDI7CisJCQkJd2hpbGUgKGlzX2Rpcl9zZXAoKnNyYykpCisJCQkJCXNyYysrOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChzcmNbMV0gPT0gJy4nKSB7CisJCQkJaWYgKCFzcmNbMl0pIHsKKwkJCQkJLyogKDMpICovCisJCQkJCXNyYyArPSAyOworCQkJCQlnb3RvIHVwX29uZTsKKwkJCQl9IGVsc2UgaWYgKGlzX2Rpcl9zZXAoc3JjWzJdKSkgeworCQkJCQkvKiAoNCkgKi8KKwkJCQkJc3JjICs9IDM7CisJCQkJCXdoaWxlIChpc19kaXJfc2VwKCpzcmMpKQorCQkJCQkJc3JjKys7CisJCQkJCWdvdG8gdXBfb25lOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIGNvcHkgdXAgdG8gdGhlIG5leHQgJy8nLCBhbmQgZWF0IGFsbCAnLycgKi8KKwkJd2hpbGUgKChjID0gKnNyYysrKSAhPSAnXDAnICYmICFpc19kaXJfc2VwKGMpKQorCQkJKmRzdCsrID0gYzsKKwkJaWYgKGlzX2Rpcl9zZXAoYykpIHsKKwkJCSpkc3QrKyA9ICcvJzsKKwkJCXdoaWxlIChpc19kaXJfc2VwKGMpKQorCQkJCWMgPSAqc3JjKys7CisJCQlzcmMtLTsKKwkJfSBlbHNlIGlmICghYykKKwkJCWJyZWFrOworCQljb250aW51ZTsKKworCXVwX29uZToKKwkJLyoKKwkJICogZHN0MC4uZHN0IGlzIHByZWZpeCBwb3J0aW9uLCBhbmQgZHN0Wy0xXSBpcyAnLyc7CisJCSAqIGdvIHVwIG9uZSBsZXZlbC4KKwkJICovCisJCWRzdC0tOwkvKiBnbyB0byB0cmFpbGluZyAnLycgKi8KKwkJaWYgKGRzdCA8PSBkc3QwKQorCQkJcmV0dXJuIC0xOworCQkvKiBXaW5kb3dzOiBkc3RbLTFdIGNhbm5vdCBiZSBiYWNrc2xhc2ggYW55bW9yZSAqLworCQl3aGlsZSAoZHN0MCA8IGRzdCAmJiBkc3RbLTFdICE9ICcvJykKKwkJCWRzdC0tOworCQlpZiAocHJlZml4X2xlbiAmJiAqcHJlZml4X2xlbiA+IGRzdCAtIGRzdDApCisJCQkqcHJlZml4X2xlbiA9IGRzdCAtIGRzdDA7CisJfQorCSpkc3QgPSAnXDAnOworCXJldHVybiAwOworfQorCitpbnQgbm9ybWFsaXplX3BhdGhfY29weShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwlyZXR1cm4gbm9ybWFsaXplX3BhdGhfY29weV9sZW4oZHN0LCBzcmMsIE5VTEwpOworfQorCisvKgorICogcGF0aCA9IENhbm9uaWNhbCBhYnNvbHV0ZSBwYXRoCisgKiBwcmVmaXhlcyA9IHN0cmluZ19saXN0IGNvbnRhaW5pbmcgbm9ybWFsaXplZCwgYWJzb2x1dGUgcGF0aHMgd2l0aG91dAorICogdHJhaWxpbmcgc2xhc2hlcyAoZXhjZXB0IGZvciB0aGUgcm9vdCBkaXJlY3RvcnksIHdoaWNoIGlzIGRlbm90ZWQgYnkgIi8iKS4KKyAqCisgKiBEZXRlcm1pbmVzLCBmb3IgZWFjaCBwYXRoIGluIHByZWZpeGVzLCB3aGV0aGVyIHRoZSAicHJlZml4IgorICogaXMgYW4gYW5jZXN0b3IgZGlyZWN0b3J5IG9mIHBhdGguICBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGxvbmdlc3QKKyAqIGFuY2VzdG9yIGRpcmVjdG9yeSwgZXhjbHVkaW5nIGFueSB0cmFpbGluZyBzbGFzaGVzLCBvciAtMSBpZiBubyBwcmVmaXgKKyAqIGlzIGFuIGFuY2VzdG9yLiAgKE5vdGUgdGhhdCB0aGlzIG1lYW5zIDAgaXMgcmV0dXJuZWQgaWYgcHJlZml4ZXMgaXMKKyAqIFsiLyJdLikgIi9mb28iIGlzIG5vdCBjb25zaWRlcmVkIGFuIGFuY2VzdG9yIG9mICIvZm9vYmFyIi4gIERpcmVjdG9yaWVzCisgKiBhcmUgbm90IGNvbnNpZGVyZWQgdG8gYmUgdGhlaXIgb3duIGFuY2VzdG9ycy4gIHBhdGggbXVzdCBiZSBpbiBhCisgKiBjYW5vbmljYWwgZm9ybTogZW1wdHkgY29tcG9uZW50cywgb3IgIi4iIG9yICIuLiIgY29tcG9uZW50cyBhcmUgbm90CisgKiBhbGxvd2VkLgorICovCitpbnQgbG9uZ2VzdF9hbmNlc3Rvcl9sZW5ndGgoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0cmluZ19saXN0ICpwcmVmaXhlcykKK3sKKwlpbnQgaSwgbWF4X2xlbiA9IC0xOworCisJaWYgKCFzdHJjbXAocGF0aCwgIi8iKSkKKwkJcmV0dXJuIC0xOworCisJZm9yIChpID0gMDsgaSA8IHByZWZpeGVzLT5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmNlaWwgPSBwcmVmaXhlcy0+aXRlbXNbaV0uc3RyaW5nOworCQlpbnQgbGVuID0gc3RybGVuKGNlaWwpOworCisJCWlmIChsZW4gPT0gMSAmJiBjZWlsWzBdID09ICcvJykKKwkJCWxlbiA9IDA7IC8qIHJvb3QgbWF0Y2hlcyBhbnl0aGluZywgd2l0aCBsZW5ndGggMCAqLworCQllbHNlIGlmICghc3RybmNtcChwYXRoLCBjZWlsLCBsZW4pICYmIHBhdGhbbGVuXSA9PSAnLycpCisJCQk7IC8qIG1hdGNoIG9mIGxlbmd0aCBsZW4gKi8KKwkJZWxzZQorCQkJY29udGludWU7IC8qIG5vIG1hdGNoICovCisKKwkJaWYgKGxlbiA+IG1heF9sZW4pCisJCQltYXhfbGVuID0gbGVuOworCX0KKworCXJldHVybiBtYXhfbGVuOworfQorCisvKiBzdHJpcCBhcmJpdHJhcnkgYW1vdW50IG9mIGRpcmVjdG9yeSBzZXBhcmF0b3JzIGF0IGVuZCBvZiBwYXRoICovCitzdGF0aWMgaW5saW5lIGludCBjaG9tcF90cmFpbGluZ19kaXJfc2VwKGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pCit7CisJd2hpbGUgKGxlbiAmJiBpc19kaXJfc2VwKHBhdGhbbGVuIC0gMV0pKQorCQlsZW4tLTsKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogSWYgcGF0aCBlbmRzIHdpdGggc3VmZml4IChjb21wbGV0ZSBwYXRoIGNvbXBvbmVudHMpLCByZXR1cm5zIHRoZSBvZmZzZXQgb2YKKyAqIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgcGF0aCBiZWZvcmUgdGhlIHN1ZmZpeCAoc2FucyB0cmFpbGluZyBkaXJlY3RvcnkKKyAqIHNlcGFyYXRvcnMpLCBhbmQgLTEgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgc3NpemVfdCBzdHJpcHBlZF9wYXRoX3N1ZmZpeF9vZmZzZXQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3VmZml4KQoreworCWludCBwYXRoX2xlbiA9IHN0cmxlbihwYXRoKSwgc3VmZml4X2xlbiA9IHN0cmxlbihzdWZmaXgpOworCisJd2hpbGUgKHN1ZmZpeF9sZW4pIHsKKwkJaWYgKCFwYXRoX2xlbikKKwkJCXJldHVybiAtMTsKKworCQlpZiAoaXNfZGlyX3NlcChwYXRoW3BhdGhfbGVuIC0gMV0pKSB7CisJCQlpZiAoIWlzX2Rpcl9zZXAoc3VmZml4W3N1ZmZpeF9sZW4gLSAxXSkpCisJCQkJcmV0dXJuIC0xOworCQkJcGF0aF9sZW4gPSBjaG9tcF90cmFpbGluZ19kaXJfc2VwKHBhdGgsIHBhdGhfbGVuKTsKKwkJCXN1ZmZpeF9sZW4gPSBjaG9tcF90cmFpbGluZ19kaXJfc2VwKHN1ZmZpeCwgc3VmZml4X2xlbik7CisJCX0KKwkJZWxzZSBpZiAocGF0aFstLXBhdGhfbGVuXSAhPSBzdWZmaXhbLS1zdWZmaXhfbGVuXSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocGF0aF9sZW4gJiYgIWlzX2Rpcl9zZXAocGF0aFtwYXRoX2xlbiAtIDFdKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBjaG9tcF90cmFpbGluZ19kaXJfc2VwKHBhdGgsIHBhdGhfbGVuKTsKK30KKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGF0aCBlbmRzIHdpdGggY29tcG9uZW50cywgY29uc2lkZXJpbmcgb25seSBjb21wbGV0ZSBwYXRoCisgKiBjb21wb25lbnRzLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitpbnQgZW5kc193aXRoX3BhdGhfY29tcG9uZW50cyhjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpjb21wb25lbnRzKQoreworCXJldHVybiBzdHJpcHBlZF9wYXRoX3N1ZmZpeF9vZmZzZXQocGF0aCwgY29tcG9uZW50cykgIT0gLTE7Cit9CisKKy8qCisgKiBJZiBwYXRoIGVuZHMgd2l0aCBzdWZmaXggKGNvbXBsZXRlIHBhdGggY29tcG9uZW50cyksIHJldHVybnMgdGhlCisgKiBwYXJ0IGJlZm9yZSBzdWZmaXggKHNhbnMgdHJhaWxpbmcgZGlyZWN0b3J5IHNlcGFyYXRvcnMpLgorICogT3RoZXJ3aXNlIHJldHVybnMgTlVMTC4KKyAqLworY2hhciAqc3RyaXBfcGF0aF9zdWZmaXgoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3VmZml4KQoreworCXNzaXplX3Qgb2Zmc2V0ID0gc3RyaXBwZWRfcGF0aF9zdWZmaXhfb2Zmc2V0KHBhdGgsIHN1ZmZpeCk7CisKKwlyZXR1cm4gb2Zmc2V0ID09IC0xID8gTlVMTCA6IHhzdHJuZHVwKHBhdGgsIG9mZnNldCk7Cit9CisKK2ludCBkYWVtb25fYXZvaWRfYWxpYXMoY29uc3QgY2hhciAqcCkKK3sKKwlpbnQgc2wsIG5kb3Q7CisKKwkvKgorCSAqIFRoaXMgcmVzdXJyZWN0cyB0aGUgYmVsdHMgYW5kIHN1c3BlbmRlcnMgcGFyYW5vaWEgY2hlY2sgYnkgSFBBCisJICogZG9uZSBpbiA8NDM1NTYwRjcuNDA4MDAwNkB6eXRvci5jb20+IHRocmVhZCwgbm93IGVudGVyX3JlcG8oKQorCSAqIGRvZXMgbm90IGRvIGdldGN3ZCgpIGJhc2VkIHBhdGggY2Fub25pY2FsaXphdGlvbi4KKwkgKgorCSAqIHNsIGJlY29tZXMgdHJ1ZSBpbW1lZGlhdGVseSBhZnRlciBzZWVpbmcgJy8nIGFuZCBjb250aW51ZXMgdG8KKwkgKiBiZSB0cnVlIGFzIGxvbmcgYXMgZG90cyBjb250aW51ZSBhZnRlciB0aGF0IHdpdGhvdXQgaW50ZXJ2ZW5pbmcKKwkgKiBub24tZG90IGNoYXJhY3Rlci4KKwkgKi8KKwlpZiAoIXAgfHwgKCpwICE9ICcvJyAmJiAqcCAhPSAnficpKQorCQlyZXR1cm4gLTE7CisJc2wgPSAxOyBuZG90ID0gMDsKKwlwKys7CisKKwl3aGlsZSAoMSkgeworCQljaGFyIGNoID0gKnArKzsKKwkJaWYgKHNsKSB7CisJCQlpZiAoY2ggPT0gJy4nKQorCQkJCW5kb3QrKzsKKwkJCWVsc2UgaWYgKGNoID09ICcvJykgeworCQkJCWlmIChuZG90IDwgMykKKwkJCQkJLyogcmVqZWN0IC8vLCAvLi8gYW5kIC8uLi8gKi8KKwkJCQkJcmV0dXJuIC0xOworCQkJCW5kb3QgPSAwOworCQkJfQorCQkJZWxzZSBpZiAoY2ggPT0gMCkgeworCQkJCWlmICgwIDwgbmRvdCAmJiBuZG90IDwgMykKKwkJCQkJLyogcmVqZWN0IC8uJCBhbmQgLy4uJCAqLworCQkJCQlyZXR1cm4gLTE7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQllbHNlCisJCQkJc2wgPSBuZG90ID0gMDsKKwkJfQorCQllbHNlIGlmIChjaCA9PSAwKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYgKGNoID09ICcvJykgeworCQkJc2wgPSAxOworCQkJbmRvdCA9IDA7CisJCX0KKwl9Cit9CisKKy8qCisgKiBPbiBOVEZTLCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gZGlzYWxsb3cgY2VydGFpbiBzeW5vbnltcyBvZiB0aGUgYC5naXQvYAorICogZGlyZWN0b3J5OgorICoKKyAqIC0gRm9yIGhpc3RvcmljYWwgcmVhc29ucywgZmlsZSBuYW1lcyB0aGF0IGVuZCBpbiBzcGFjZXMgb3IgcGVyaW9kcyBhcmUKKyAqICAgYXV0b21hdGljYWxseSB0cmltbWVkLiBUaGVyZWZvcmUsIGAuZ2l0IC4gLiAuL2AgaXMgYSB2YWxpZCB3YXkgdG8gcmVmZXIKKyAqICAgdG8gYC5naXQvYC4KKyAqCisgKiAtIEZvciBvdGhlciBoaXN0b3JpY2FsIHJlYXNvbnMsIGZpbGUgbmFtZXMgdGhhdCBkbyBub3QgY29uZm9ybSB0byB0aGUgOC4zCisgKiAgIGZvcm1hdCAodXAgdG8gZWlnaHQgY2hhcmFjdGVycyBmb3IgdGhlIGJhc2VuYW1lLCB0aHJlZSBmb3IgdGhlIGZpbGUKKyAqICAgZXh0ZW5zaW9uLCBjZXJ0YWluIGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgc3VjaCBhcyBgK2AsIGV0YykgYXJlIGFzc29jaWF0ZWQKKyAqICAgd2l0aCBhIHNvLWNhbGxlZCAic2hvcnQgbmFtZSIsIGF0IGxlYXN0IG9uIHRoZSBgQzpgIGRyaXZlIGJ5IGRlZmF1bHQuCisgKiAgIFdoaWNoIG1lYW5zIHRoYXQgYGdpdH4xL2AgaXMgYSB2YWxpZCB3YXkgdG8gcmVmZXIgdG8gYC5naXQvYC4KKyAqCisgKiAgIE5vdGU6IFRlY2huaWNhbGx5LCBgLmdpdC9gIGNvdWxkIHJlY2VpdmUgdGhlIHNob3J0IG5hbWUgYGdpdH4yYCBpZiB0aGUKKyAqICAgc2hvcnQgbmFtZSBgZ2l0fjFgIHdlcmUgYWxyZWFkeSB1c2VkLiBJbiBHaXQsIGhvd2V2ZXIsIHdlIGd1YXJhbnRlZSB0aGF0CisgKiAgIGAuZ2l0YCBpcyB0aGUgZmlyc3QgaXRlbSBpbiBhIGRpcmVjdG9yeSwgdGhlcmVmb3JlIGl0IHdpbGwgYmUgYXNzb2NpYXRlZAorICogICB3aXRoIHRoZSBzaG9ydCBuYW1lIGBnaXR+MWAgKHVubGVzcyBzaG9ydCBuYW1lcyBhcmUgZGlzYWJsZWQpLgorICoKKyAqIC0gRm9yIHlldCBvdGhlciBoaXN0b3JpY2FsIHJlYXNvbnMsIE5URlMgc3VwcG9ydHMgc28tY2FsbGVkICJBbHRlcm5hdGUgRGF0YQorICogICBTdHJlYW1zIiwgaS5lLiBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBmaWxlLCByZWZlcnJlZCB0byB2aWEKKyAqICAgYDxmaWxlbmFtZT46PHN0cmVhbS1uYW1lPjo8c3RyZWFtLXR5cGU+YC4gVGhlcmUgZXhpc3RzIGEgZGVmYXVsdCBzdHJlYW0KKyAqICAgdHlwZSBmb3IgZGlyZWN0b3JpZXMsIGFsbG93aW5nIGAuZ2l0L2AgdG8gYmUgYWNjZXNzZWQgdmlhCisgKiAgIGAuZ2l0OjokSU5ERVhfQUxMT0NBVElPTi9gLgorICoKKyAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIDEsIGl0IGluZGljYXRlcyB0aGF0IHRoZSBzcGVjaWZpZWQgZmlsZS9kaXJlY3RvcnkKKyAqIG5hbWUgcmVmZXJzIHRvIGEgYC5naXRgIGZpbGUgb3IgZGlyZWN0b3J5LCBvciB0byBhbnkgb2YgdGhlc2Ugc3lub255bXMsIGFuZAorICogR2l0IHNob3VsZCB0aGVyZWZvcmUgbm90IHRyYWNrIGl0LgorICoKKyAqIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBfYWxsXyBBbHRlcm5hdGUgRGF0YSBTdHJlYW1zIG9mIGAuZ2l0L2AgYXJlCisgKiBmb3JiaWRkZW4sIG5vdCBqdXN0IGA6OiRJTkRFWF9BTExPQ0FUSU9OYC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgYGdpdCBmc2NrYCBldmVuIG9uIHBsYXRmb3JtcyB3aGVyZQorICogdGhlIGJhY2tzbGFzaCBpcyBhIHJlZ3VsYXIgZmlsZW5hbWUgY2hhcmFjdGVyLCB0aGVyZWZvcmUgaXQgbmVlZHMgdG8gaGFuZGxlCisgKiBiYWNrbGFzaCBjaGFyYWN0ZXJzIGluIHRoZSBwcm92aWRlZCBgbmFtZWAgc3BlY2lhbGx5OiB0aGV5IGFyZSBpbnRlcnByZXRlZAorICogYXMgZGlyZWN0b3J5IHNlcGFyYXRvcnMuCisgKi8KK2ludCBpc19udGZzX2RvdGdpdChjb25zdCBjaGFyICpuYW1lKQoreworCWNoYXIgYzsKKworCS8qCisJICogTm90ZSB0aGF0IHdoZW4gd2UgZG9uJ3QgZmluZCBgLmdpdGAgb3IgYGdpdH4xYCB3ZSBlbmQgdXAgd2l0aCBgbmFtZWAKKwkgKiBhZHZhbmNlZCBwYXJ0d2F5IHRocm91Z2ggdGhlIHN0cmluZy4gVGhhdCdzIG9rYXksIHRob3VnaCwgYXMgd2UKKwkgKiByZXR1cm4gaW1tZWRpYXRlbHkgaW4gdGhvc2UgY2FzZXMsIHdpdGhvdXQgbG9va2luZyBhdCBgbmFtZWAgYW55CisJICogZnVydGhlci4KKwkgKi8KKwljID0gKihuYW1lKyspOworCWlmIChjID09ICcuJykgeworCQkvKiAuZ2l0ICovCisJCWlmICgoKGMgPSAqKG5hbWUrKykpICE9ICdnJyAmJiBjICE9ICdHJykgfHwKKwkJICAgICgoYyA9ICoobmFtZSsrKSkgIT0gJ2knICYmIGMgIT0gJ0knKSB8fAorCQkgICAgKChjID0gKihuYW1lKyspKSAhPSAndCcgJiYgYyAhPSAnVCcpKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChjID09ICdnJyB8fCBjID09ICdHJykgeworCQkvKiBnaXQgfjEgKi8KKwkJaWYgKCgoYyA9ICoobmFtZSsrKSkgIT0gJ2knICYmIGMgIT0gJ0knKSB8fAorCQkgICAgKChjID0gKihuYW1lKyspKSAhPSAndCcgJiYgYyAhPSAnVCcpIHx8CisJCSAgICAqKG5hbWUrKykgIT0gJ34nIHx8CisJCSAgICAqKG5hbWUrKykgIT0gJzEnKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAwOworCisJZm9yICg7OykgeworCQljID0gKihuYW1lKyspOworCQlpZiAoIWMgfHwgYyA9PSAnXFwnIHx8IGMgPT0gJy8nIHx8IGMgPT0gJzonKQorCQkJcmV0dXJuIDE7CisJCWlmIChjICE9ICcuJyAmJiBjICE9ICcgJykKKwkJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBpc19udGZzX2RvdF9nZW5lcmljKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICAgY29uc3QgY2hhciAqZG90Z2l0X25hbWUsCisJCQkgICAgICAgc2l6ZV90IGxlbiwKKwkJCSAgICAgICBjb25zdCBjaGFyICpkb3RnaXRfbnRmc19zaG9ydG5hbWVfcHJlZml4KQoreworCWludCBzYXdfdGlsZGU7CisJc2l6ZV90IGk7CisKKwlpZiAoKG5hbWVbMF0gPT0gJy4nICYmICFzdHJuY2FzZWNtcChuYW1lICsgMSwgZG90Z2l0X25hbWUsIGxlbikpKSB7CisJCWkgPSBsZW4gKyAxOworb25seV9zcGFjZXNfYW5kX3BlcmlvZHM6CisJCWZvciAoOzspIHsKKwkJCWNoYXIgYyA9IG5hbWVbaSsrXTsKKwkJCWlmICghYyB8fCBjID09ICc6JykKKwkJCQlyZXR1cm4gMTsKKwkJCWlmIChjICE9ICcgJyAmJiBjICE9ICcuJykKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qCisJICogSXMgaXQgYSByZWd1bGFyIE5URlMgc2hvcnQgbmFtZSwgaS5lLiBzaG9ydGVuZWQgdG8gNiBjaGFyYWN0ZXJzLAorCSAqIGZvbGxvd2VkIGJ5IH4xLCAuLi4gfjQ/CisJICovCisJaWYgKCFzdHJuY2FzZWNtcChuYW1lLCBkb3RnaXRfbmFtZSwgNikgJiYgbmFtZVs2XSA9PSAnficgJiYKKwkgICAgbmFtZVs3XSA+PSAnMScgJiYgbmFtZVs3XSA8PSAnNCcpIHsKKwkJaSA9IDg7CisJCWdvdG8gb25seV9zcGFjZXNfYW5kX3BlcmlvZHM7CisJfQorCisJLyoKKwkgKiBJcyBpdCBhIGZhbGwtYmFjayBOVEZTIHNob3J0IG5hbWUgKGZvciBkZXRhaWxzLCBzZWUKKwkgKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS84LjNfZmlsZW5hbWU/CisJICovCisJZm9yIChpID0gMCwgc2F3X3RpbGRlID0gMDsgaSA8IDg7IGkrKykKKwkJaWYgKG5hbWVbaV0gPT0gJ1wwJykKKwkJCXJldHVybiAwOworCQllbHNlIGlmIChzYXdfdGlsZGUpIHsKKwkJCWlmIChuYW1lW2ldIDwgJzAnIHx8IG5hbWVbaV0gPiAnOScpCisJCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAobmFtZVtpXSA9PSAnficpIHsKKwkJCWlmIChuYW1lWysraV0gPCAnMScgfHwgbmFtZVtpXSA+ICc5JykKKwkJCQlyZXR1cm4gMDsKKwkJCXNhd190aWxkZSA9IDE7CisJCX0gZWxzZSBpZiAoaSA+PSA2KQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYgKG5hbWVbaV0gJiAweDgwKSB7CisJCQkvKgorCQkJICogV2Uga25vdyBvdXIgbmVlZGxlcyBjb250YWluIG9ubHkgQVNDSUksIHNvIHdlIGNsYW1wCisJCQkgKiBoZXJlIHRvIG1ha2UgdGhlIHJlc3VsdHMgb2YgdG9sb3dlcigpIHNhbmUuCisJCQkgKi8KKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKHRvbG93ZXIobmFtZVtpXSkgIT0gZG90Z2l0X250ZnNfc2hvcnRuYW1lX3ByZWZpeFtpXSkKKwkJCXJldHVybiAwOworCisJZ290byBvbmx5X3NwYWNlc19hbmRfcGVyaW9kczsKK30KKworLyoKKyAqIElubGluZSBoZWxwZXIgdG8gbWFrZSBzdXJlIGNvbXBpbGVyIHJlc29sdmVzIHN0cmxlbigpIG9uIGxpdGVyYWxzIGF0CisgKiBjb21waWxlIHRpbWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX250ZnNfZG90X3N0cihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkb3RnaXRfbmFtZSwKKwkJCQkgIGNvbnN0IGNoYXIgKmRvdGdpdF9udGZzX3Nob3J0bmFtZV9wcmVmaXgpCit7CisJcmV0dXJuIGlzX250ZnNfZG90X2dlbmVyaWMobmFtZSwgZG90Z2l0X25hbWUsIHN0cmxlbihkb3RnaXRfbmFtZSksCisJCQkJICAgZG90Z2l0X250ZnNfc2hvcnRuYW1lX3ByZWZpeCk7Cit9CisKK2ludCBpc19udGZzX2RvdGdpdG1vZHVsZXMoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gaXNfbnRmc19kb3Rfc3RyKG5hbWUsICJnaXRtb2R1bGVzIiwgImdpN2ViYSIpOworfQorCitpbnQgaXNfbnRmc19kb3RnaXRpZ25vcmUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gaXNfbnRmc19kb3Rfc3RyKG5hbWUsICJnaXRpZ25vcmUiLCAiZ2kyNTBhIik7Cit9CisKK2ludCBpc19udGZzX2RvdGdpdGF0dHJpYnV0ZXMoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gaXNfbnRmc19kb3Rfc3RyKG5hbWUsICJnaXRhdHRyaWJ1dGVzIiwgImdpN2QyOSIpOworfQorCitpbnQgbG9va3NfbGlrZV9jb21tYW5kX2xpbmVfb3B0aW9uKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gc3RyICYmIHN0clswXSA9PSAnLSc7Cit9CisKK2NoYXIgKnhkZ19jb25maWdfaG9tZShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwljb25zdCBjaGFyICpob21lLCAqY29uZmlnX2hvbWU7CisKKwlhc3NlcnQoZmlsZW5hbWUpOworCWNvbmZpZ19ob21lID0gZ2V0ZW52KCJYREdfQ09ORklHX0hPTUUiKTsKKwlpZiAoY29uZmlnX2hvbWUgJiYgKmNvbmZpZ19ob21lKQorCQlyZXR1cm4gbWtwYXRoZHVwKCIlcy9naXQvJXMiLCBjb25maWdfaG9tZSwgZmlsZW5hbWUpOworCisJaG9tZSA9IGdldGVudigiSE9NRSIpOworCWlmIChob21lKQorCQlyZXR1cm4gbWtwYXRoZHVwKCIlcy8uY29uZmlnL2dpdC8lcyIsIGhvbWUsIGZpbGVuYW1lKTsKKwlyZXR1cm4gTlVMTDsKK30KKworY2hhciAqeGRnX2NhY2hlX2hvbWUoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJY29uc3QgY2hhciAqaG9tZSwgKmNhY2hlX2hvbWU7CisKKwlhc3NlcnQoZmlsZW5hbWUpOworCWNhY2hlX2hvbWUgPSBnZXRlbnYoIlhER19DQUNIRV9IT01FIik7CisJaWYgKGNhY2hlX2hvbWUgJiYgKmNhY2hlX2hvbWUpCisJCXJldHVybiBta3BhdGhkdXAoIiVzL2dpdC8lcyIsIGNhY2hlX2hvbWUsIGZpbGVuYW1lKTsKKworCWhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKKwlpZiAoaG9tZSkKKwkJcmV0dXJuIG1rcGF0aGR1cCgiJXMvLmNhY2hlL2dpdC8lcyIsIGhvbWUsIGZpbGVuYW1lKTsKKwlyZXR1cm4gTlVMTDsKK30KKworUkVQT19HSVRfUEFUSF9GVU5DKGNoZXJyeV9waWNrX2hlYWQsICJDSEVSUllfUElDS19IRUFEIikKK1JFUE9fR0lUX1BBVEhfRlVOQyhyZXZlcnRfaGVhZCwgIlJFVkVSVF9IRUFEIikKK1JFUE9fR0lUX1BBVEhfRlVOQyhzcXVhc2hfbXNnLCAiU1FVQVNIX01TRyIpCitSRVBPX0dJVF9QQVRIX0ZVTkMobWVyZ2VfbXNnLCAiTUVSR0VfTVNHIikKK1JFUE9fR0lUX1BBVEhfRlVOQyhtZXJnZV9yciwgIk1FUkdFX1JSIikKK1JFUE9fR0lUX1BBVEhfRlVOQyhtZXJnZV9tb2RlLCAiTUVSR0VfTU9ERSIpCitSRVBPX0dJVF9QQVRIX0ZVTkMobWVyZ2VfaGVhZCwgIk1FUkdFX0hFQUQiKQorUkVQT19HSVRfUEFUSF9GVU5DKG1lcmdlX2F1dG9zdGFzaCwgIk1FUkdFX0FVVE9TVEFTSCIpCitSRVBPX0dJVF9QQVRIX0ZVTkMoZmV0Y2hfaGVhZCwgIkZFVENIX0hFQUQiKQorUkVQT19HSVRfUEFUSF9GVU5DKHNoYWxsb3csICJzaGFsbG93IikKZGlmZiAtLWdpdCBhL3BhdGguaCBiL3BhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjFiZjhmCi0tLSAvZGV2L251bGwKKysrIGIvcGF0aC5oCkBAIC0wLDAgKzEsMjAxIEBACisjaWZuZGVmIFBBVEhfSAorI2RlZmluZSBQQVRIX0gKKworc3RydWN0IHJlcG9zaXRvcnk7CitzdHJ1Y3Qgc3RyYnVmOworCisvKgorICogVGhlIHJlc3VsdCB0byBhbGwgZnVuY3Rpb25zIHdoaWNoIHJldHVybiBzdGF0aWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgbWF5IGJlCisgKiBvdmVyd3JpdHRlbiBieSBhbm90aGVyIGNhbGwgdG8gX2FueV8gb25lIG9mIHRoZXNlIGZ1bmN0aW9ucy4gQ29uc2lkZXIgdXNpbmcKKyAqIHRoZSBzYWZlciB2YXJpYW50cyB3aGljaCBvcGVyYXRlIG9uIHN0cmJ1ZnMgb3IgcmV0dXJuIGFsbG9jYXRlZCBtZW1vcnkuCisgKi8KKworLyoKKyAqIFJldHVybiBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHBhdGguCisgKi8KK2NvbnN0IGNoYXIgKm1rcGF0aChjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworLyoKKyAqIFJldHVybiBhIHBhdGguCisgKi8KK2NoYXIgKm1rcGF0aGR1cChjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworLyoKKyAqIENvbnN0cnVjdCBhIHBhdGggYW5kIHBsYWNlIHRoZSByZXN1bHQgaW4gdGhlIHByb3ZpZGVkIGJ1ZmZlciBgYnVmYC4KKyAqLworY2hhciAqbWtzbnBhdGgoY2hhciAqYnVmLCBzaXplX3QgbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CisKKy8qCisgKiBUaGUgYGdpdF9jb21tb25fcGF0aGAgZmFtaWx5IG9mIGZ1bmN0aW9ucyB3aWxsIGNvbnN0cnVjdCBhIHBhdGggaW50byBhCisgKiByZXBvc2l0b3J5J3MgY29tbW9uIGdpdCBkaXJlY3RvcnksIHdoaWNoIGlzIHNoYXJlZCBieSBhbGwgd29ya3RyZWVzLgorICovCisKKy8qCisgKiBDb25zdHJ1Y3RzIGEgcGF0aCBpbnRvIHRoZSBjb21tb24gZ2l0IGRpcmVjdG9yeSBvZiByZXBvc2l0b3J5IGByZXBvYCBhbmQKKyAqIGFwcGVuZCBpdCBpbiB0aGUgcHJvdmlkZWQgYnVmZmVyIGBzYmAuCisgKi8KK3ZvaWQgc3RyYnVmX2dpdF9jb21tb25fcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKKworLyoKKyAqIFJldHVybiBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHBhdGggaW50byB0aGUgbWFpbiByZXBvc2l0b3J5J3MKKyAqICh0aGVfcmVwb3NpdG9yeSkgY29tbW9uIGdpdCBkaXJlY3RvcnkuCisgKi8KK2NvbnN0IGNoYXIgKmdpdF9jb21tb25fcGF0aChjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworCisvKgorICogVGhlIGBnaXRfcGF0aGAgZmFtaWx5IG9mIGZ1bmN0aW9ucyB3aWxsIGNvbnN0cnVjdCBhIHBhdGggaW50byBhIHJlcG9zaXRvcnkncworICogZ2l0IGRpcmVjdG9yeS4KKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgd2lsbCBwZXJmb3JtIGFkanVzdG1lbnRzIHRvIHRoZSByZXN1bHRhbnQgcGF0aCB0byBhY2NvdW50CisgKiBmb3Igc3BlY2lhbCBwYXRocyB3aGljaCBhcmUgZWl0aGVyIGNvbnNpZGVyZWQgY29tbW9uIGFtb25nIHdvcmt0cmVlcyAoZS5nLgorICogcGF0aHMgaW50byB0aGUgb2JqZWN0IGRpcmVjdG9yeSkgb3IgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgc2V0IHZpYSBhbgorICogZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgY29uZmlnIChlLmcuIHBhdGggdG8gdGhlIGluZGV4IGZpbGUpLgorICoKKyAqIEZvciBhbiBleGhhdXN0aXZlIGxpc3Qgb2YgdGhlIGFkanVzdG1lbnRzIG1hZGUgbG9vayBhdCBgY29tbW9uX2xpc3RgIGFuZAorICogYGFkanVzdF9naXRfcGF0aGAgaW4gcGF0aC5jLgorICovCisKKy8qCisgKiBSZXR1cm4gYSBwYXRoIGludG8gdGhlIGdpdCBkaXJlY3Rvcnkgb2YgcmVwb3NpdG9yeSBgcmVwb2AuCisgKi8KK2NoYXIgKnJlcG9fZ2l0X3BhdGgoY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCSAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKworLyoKKyAqIENvbnN0cnVjdCBhIHBhdGggaW50byB0aGUgZ2l0IGRpcmVjdG9yeSBvZiByZXBvc2l0b3J5IGByZXBvYCBhbmQgYXBwZW5kIGl0CisgKiB0byB0aGUgcHJvdmlkZWQgYnVmZmVyIGBzYmAuCisgKi8KK3ZvaWQgc3RyYnVmX3JlcG9fZ2l0X3BhdGgoc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKKworLyoKKyAqIFJldHVybiBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHBhdGggaW50byB0aGUgbWFpbiByZXBvc2l0b3J5J3MKKyAqICh0aGVfcmVwb3NpdG9yeSkgZ2l0IGRpcmVjdG9yeS4KKyAqLworY29uc3QgY2hhciAqZ2l0X3BhdGgoY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CisKKy8qCisgKiBSZXR1cm4gYSBwYXRoIGludG8gdGhlIG1haW4gcmVwb3NpdG9yeSdzICh0aGVfcmVwb3NpdG9yeSkgZ2l0IGRpcmVjdG9yeS4KKyAqLworY2hhciAqZ2l0X3BhdGhkdXAoY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CisKKy8qCisgKiBDb25zdHJ1Y3QgYSBwYXRoIGludG8gdGhlIG1haW4gcmVwb3NpdG9yeSdzICh0aGVfcmVwb3NpdG9yeSkgZ2l0IGRpcmVjdG9yeQorICogYW5kIHBsYWNlIGl0IGluIHRoZSBwcm92aWRlZCBidWZmZXIgYGJ1ZmAsIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIHdpbGwKKyAqIGJlIG92ZXJyaWRkZW4uCisgKi8KK2NoYXIgKmdpdF9wYXRoX2J1ZihzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworCisvKgorICogQ29uc3RydWN0IGEgcGF0aCBpbnRvIHRoZSBtYWluIHJlcG9zaXRvcnkncyAodGhlX3JlcG9zaXRvcnkpIGdpdCBkaXJlY3RvcnkKKyAqIGFuZCBhcHBlbmQgaXQgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciBgc2JgLgorICovCit2b2lkIHN0cmJ1Zl9naXRfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CisKKy8qCisgKiBSZXR1cm4gYSBwYXRoIGludG8gdGhlIHdvcmt0cmVlIG9mIHJlcG9zaXRvcnkgYHJlcG9gLgorICoKKyAqIElmIHRoZSByZXBvc2l0b3J5IGRvZXNuJ3QgaGF2ZSBhIHdvcmt0cmVlIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8KK2NoYXIgKnJlcG9fd29ya3RyZWVfcGF0aChjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQljb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKworLyoKKyAqIENvbnN0cnVjdCBhIHBhdGggaW50byB0aGUgd29ya3RyZWUgb2YgcmVwb3NpdG9yeSBgcmVwb2AgYW5kIGFwcGVuZCBpdAorICogdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciBgc2JgLgorICoKKyAqIElmIHRoZSByZXBvc2l0b3J5IGRvZXNuJ3QgaGF2ZSBhIHdvcmt0cmVlIG5vdGhpbmcgd2lsbCBiZSBhcHBlbmRlZCB0byBgc2JgLgorICovCit2b2lkIHN0cmJ1Zl9yZXBvX3dvcmt0cmVlX3BhdGgoc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkJICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CisKKy8qCisgKiBSZXR1cm4gYSBwYXRoIGludG8gYSBzdWJtb2R1bGUncyBnaXQgZGlyZWN0b3J5IGxvY2F0ZWQgYXQgYHBhdGhgLiAgYHBhdGhgCisgKiBtdXN0IG9ubHkgcmVmZXJlbmNlIGEgc3VibW9kdWxlIG9mIHRoZSBtYWluIHJlcG9zaXRvcnkgKHRoZV9yZXBvc2l0b3J5KS4KKyAqLworY2hhciAqZ2l0X3BhdGhkdXBfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworCisvKgorICogQ29uc3RydWN0IGEgcGF0aCBpbnRvIGEgc3VibW9kdWxlJ3MgZ2l0IGRpcmVjdG9yeSBsb2NhdGVkIGF0IGBwYXRoYCBhbmQKKyAqIGFwcGVuZCBpdCB0byB0aGUgcHJvdmlkZWQgYnVmZmVyIGBzYmAuICBgcGF0aGAgbXVzdCBvbmx5IHJlZmVyZW5jZSBhCisgKiBzdWJtb2R1bGUgb2YgdGhlIG1haW4gcmVwb3NpdG9yeSAodGhlX3JlcG9zaXRvcnkpLgorICovCitpbnQgc3RyYnVmX2dpdF9wYXRoX3N1Ym1vZHVsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOworCit2b2lkIHJlcG9ydF9saW5rZWRfY2hlY2tvdXRfZ2FyYmFnZSh2b2lkKTsKKworLyoKKyAqIFlvdSBjYW4gZGVmaW5lIGEgc3RhdGljIG1lbW9pemVkIGdpdCBwYXRoIGxpa2U6CisgKgorICogICAgc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfZm9vLCAiRk9PIikKKyAqCisgKiBvciB1c2Ugb25lIG9mIHRoZSBnbG9iYWwgb25lcyBiZWxvdy4KKyAqLworI2RlZmluZSBHSVRfUEFUSF9GVU5DKGZ1bmMsIGZpbGVuYW1lKSBcCisJY29uc3QgY2hhciAqZnVuYyh2b2lkKSBcCisJeyBcCisJCXN0YXRpYyBjaGFyICpyZXQ7IFwKKwkJaWYgKCFyZXQpIFwKKwkJCXJldCA9IGdpdF9wYXRoZHVwKGZpbGVuYW1lKTsgXAorCQlyZXR1cm4gcmV0OyBcCisJfQorCisjZGVmaW5lIFJFUE9fR0lUX1BBVEhfRlVOQyh2YXIsIGZpbGVuYW1lKSBcCisJY29uc3QgY2hhciAqZ2l0X3BhdGhfIyN2YXIoc3RydWN0IHJlcG9zaXRvcnkgKnIpIFwKKwl7IFwKKwkJaWYgKCFyLT5jYWNoZWRfcGF0aHMudmFyKSBcCisJCQlyLT5jYWNoZWRfcGF0aHMudmFyID0gcmVwb19naXRfcGF0aChyLCBmaWxlbmFtZSk7IFwKKwkJcmV0dXJuIHItPmNhY2hlZF9wYXRocy52YXI7IFwKKwl9CisKK3N0cnVjdCBwYXRoX2NhY2hlIHsKKwljb25zdCBjaGFyICpjaGVycnlfcGlja19oZWFkOworCWNvbnN0IGNoYXIgKnJldmVydF9oZWFkOworCWNvbnN0IGNoYXIgKnNxdWFzaF9tc2c7CisJY29uc3QgY2hhciAqbWVyZ2VfbXNnOworCWNvbnN0IGNoYXIgKm1lcmdlX3JyOworCWNvbnN0IGNoYXIgKm1lcmdlX21vZGU7CisJY29uc3QgY2hhciAqbWVyZ2VfaGVhZDsKKwljb25zdCBjaGFyICptZXJnZV9hdXRvc3Rhc2g7CisJY29uc3QgY2hhciAqZmV0Y2hfaGVhZDsKKwljb25zdCBjaGFyICpzaGFsbG93OworfTsKKworI2RlZmluZSBQQVRIX0NBQ0hFX0lOSVQgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KKworY29uc3QgY2hhciAqZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZChzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7Citjb25zdCBjaGFyICpnaXRfcGF0aF9yZXZlcnRfaGVhZChzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7Citjb25zdCBjaGFyICpnaXRfcGF0aF9zcXVhc2hfbXNnKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKK2NvbnN0IGNoYXIgKmdpdF9wYXRoX21lcmdlX21zZyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7Citjb25zdCBjaGFyICpnaXRfcGF0aF9tZXJnZV9ycihzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7Citjb25zdCBjaGFyICpnaXRfcGF0aF9tZXJnZV9tb2RlKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKK2NvbnN0IGNoYXIgKmdpdF9wYXRoX21lcmdlX2hlYWQoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworY29uc3QgY2hhciAqZ2l0X3BhdGhfbWVyZ2VfYXV0b3N0YXNoKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKK2NvbnN0IGNoYXIgKmdpdF9wYXRoX2ZldGNoX2hlYWQoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworY29uc3QgY2hhciAqZ2l0X3BhdGhfc2hhbGxvdyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisKKworaW50IGVuZHNfd2l0aF9wYXRoX2NvbXBvbmVudHMoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqY29tcG9uZW50cyk7CisKKyNlbmRpZiAvKiBQQVRIX0ggKi8KZGlmZiAtLWdpdCBhL3BhdGhzcGVjLmMgYi9wYXRoc3BlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNDNlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRoc3BlYy5jCkBAIC0wLDAgKzEsNzQxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKworLyoKKyAqIEZpbmRzIHdoaWNoIG9mIHRoZSBnaXZlbiBwYXRoc3BlY3MgbWF0Y2ggaXRlbXMgaW4gdGhlIGluZGV4LgorICoKKyAqIEZvciBlYWNoIHBhdGhzcGVjLCBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBzZWVuW10gYXJyYXkKKyAqICh3aGljaCBzaG91bGQgYmUgc3BlY3MgaXRlbXMgbG9uZywgaS5lLiB0aGUgc2FtZSBzaXplIGFzIHBhdGhzcGVjKQorICogdG8gdGhlIG5hdHVyZSBvZiB0aGUgImNsb3Nlc3QiIChpLmUuIG1vc3Qgc3BlY2lmaWMpIG1hdGNoIGZvdW5kIGZvcgorICogdGhhdCBwYXRoc3BlYyBpbiB0aGUgaW5kZXgsIGlmIGl0IHdhcyBhIGNsb3NlciB0eXBlIG9mIG1hdGNoIHRoYW4KKyAqIHRoZSBleGlzdGluZyBlbnRyeS4gIEFzIGFuIG9wdGltaXphdGlvbiwgbWF0Y2hpbmcgaXMgc2tpcHBlZAorICogYWx0b2dldGhlciBpZiBzZWVuW10gYWxyZWFkeSBvbmx5IGNvbnRhaW5zIG5vbi16ZXJvIGVudHJpZXMuCisgKgorICogSWYgc2VlbltdIGhhcyBub3QgYWxyZWFkeSBiZWVuIHdyaXR0ZW4gdG8sIGl0IG1heSBtYWtlIHNlbnNlCisgKiB0byB1c2UgZmluZF9wYXRoc3BlY3NfbWF0Y2hpbmdfYWdhaW5zdF9pbmRleCgpIGluc3RlYWQuCisgKi8KK3ZvaWQgYWRkX3BhdGhzcGVjX21hdGNoZXNfYWdhaW5zdF9pbmRleChjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJCQljb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkJY2hhciAqc2VlbikKK3sKKwlpbnQgbnVtX3VubWF0Y2hlZCA9IDAsIGk7CisKKwkvKgorCSAqIFNpbmNlIHdlIGFyZSB3YWxraW5nIHRoZSBpbmRleCBhcyBpZiB3ZSB3ZXJlIHdhbGtpbmcgdGhlIGRpcmVjdG9yeSwKKwkgKiB3ZSBoYXZlIHRvIG1hcmsgdGhlIG1hdGNoZWQgcGF0aHNwZWMgYXMgc2Vlbjsgb3RoZXJ3aXNlIHdlIHdpbGwKKwkgKiBtaXN0YWtlbmx5IHRoaW5rIHRoYXQgdGhlIHVzZXIgZ2F2ZSBhIHBhdGhzcGVjIHRoYXQgZGlkIG5vdCBtYXRjaAorCSAqIGFueXRoaW5nLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwYXRoc3BlYy0+bnI7IGkrKykKKwkJaWYgKCFzZWVuW2ldKQorCQkJbnVtX3VubWF0Y2hlZCsrOworCWlmICghbnVtX3VubWF0Y2hlZCkKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWNlX3BhdGhfbWF0Y2goaXN0YXRlLCBjZSwgcGF0aHNwZWMsIHNlZW4pOworCX0KK30KKworLyoKKyAqIEZpbmRzIHdoaWNoIG9mIHRoZSBnaXZlbiBwYXRoc3BlY3MgbWF0Y2ggaXRlbXMgaW4gdGhlIGluZGV4LgorICoKKyAqIFRoaXMgaXMgYSBvbmUtc2hvdCB3cmFwcGVyIGFyb3VuZCBhZGRfcGF0aHNwZWNfbWF0Y2hlc19hZ2FpbnN0X2luZGV4KCkKKyAqIHdoaWNoIGFsbG9jYXRlcywgcG9wdWxhdGVzLCBhbmQgcmV0dXJucyBhIHNlZW5bXSBhcnJheSBpbmRpY2F0aW5nIHRoZQorICogbmF0dXJlIG9mIHRoZSAiY2xvc2VzdCIgKGkuZS4gbW9zdCBzcGVjaWZpYykgbWF0Y2hlcyB3aGljaCBlYWNoIG9mIHRoZQorICogZ2l2ZW4gcGF0aHNwZWNzIGFjaGlldmVzIGFnYWluc3QgYWxsIGl0ZW1zIGluIHRoZSBpbmRleC4KKyAqLworY2hhciAqZmluZF9wYXRoc3BlY3NfbWF0Y2hpbmdfYWdhaW5zdF9pbmRleChjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJCQkgICAgY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJY2hhciAqc2VlbiA9IHhjYWxsb2MocGF0aHNwZWMtPm5yLCAxKTsKKwlhZGRfcGF0aHNwZWNfbWF0Y2hlc19hZ2FpbnN0X2luZGV4KHBhdGhzcGVjLCBpc3RhdGUsIHNlZW4pOworCXJldHVybiBzZWVuOworfQorCisvKgorICogTWFnaWMgcGF0aHNwZWMKKyAqCisgKiBQb3NzaWJsZSBmdXR1cmUgbWFnaWMgc2VtYW50aWNzIGluY2x1ZGUgc3R1ZmYgbGlrZToKKyAqCisgKgl7IFBBVEhTUEVDX1JFQ1VSU0lWRSwgJyonLCAicmVjdXJzaXZlIiB9LAorICoJeyBQQVRIU1BFQ19SRUdFWFAsICdcMCcsICJyZWdleHAiIH0sCisgKgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcGF0aHNwZWNfbWFnaWMgeworCXVuc2lnbmVkIGJpdDsKKwljaGFyIG1uZW1vbmljOyAvKiB0aGlzIGNhbm5vdCBiZSAnOichICovCisJY29uc3QgY2hhciAqbmFtZTsKK30gcGF0aHNwZWNfbWFnaWNbXSA9IHsKKwl7IFBBVEhTUEVDX0ZST01UT1AsICAnLycsICJ0b3AiIH0sCisJeyBQQVRIU1BFQ19MSVRFUkFMLCAnXDAnLCAibGl0ZXJhbCIgfSwKKwl7IFBBVEhTUEVDX0dMT0IsICAgICdcMCcsICJnbG9iIiB9LAorCXsgUEFUSFNQRUNfSUNBU0UsICAgJ1wwJywgImljYXNlIiB9LAorCXsgUEFUSFNQRUNfRVhDTFVERSwgICchJywgImV4Y2x1ZGUiIH0sCisJeyBQQVRIU1BFQ19BVFRSLCAgICAnXDAnLCAiYXR0ciIgfSwKK307CisKK3N0YXRpYyB2b2lkIHByZWZpeF9tYWdpYyhzdHJ1Y3Qgc3RyYnVmICpzYiwgaW50IHByZWZpeGxlbiwgdW5zaWduZWQgbWFnaWMpCit7CisJaW50IGk7CisJc3RyYnVmX2FkZHN0cihzYiwgIjooIik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGF0aHNwZWNfbWFnaWMpOyBpKyspCisJCWlmIChtYWdpYyAmIHBhdGhzcGVjX21hZ2ljW2ldLmJpdCkgeworCQkJaWYgKHNiLT5idWZbc2ItPmxlbiAtIDFdICE9ICcoJykKKwkJCQlzdHJidWZfYWRkY2goc2IsICcsJyk7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBwYXRoc3BlY19tYWdpY1tpXS5uYW1lKTsKKwkJfQorCXN0cmJ1Zl9hZGRmKHNiLCAiLHByZWZpeDolZCkiLCBwcmVmaXhsZW4pOworfQorCitzdGF0aWMgc2l6ZV90IHN0cmNzcG5fZXNjYXBlZChjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpzdG9wKQoreworCWNvbnN0IGNoYXIgKmk7CisKKwlmb3IgKGkgPSBzOyAqaTsgaSsrKSB7CisJCS8qIHNraXAgdGhlIGVzY2FwZWQgY2hhcmFjdGVyICovCisJCWlmIChpWzBdID09ICdcXCcgJiYgaVsxXSkgeworCQkJaSsrOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoc3RyY2hyKHN0b3AsICppKSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gaSAtIHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGludmFsaWRfdmFsdWVfY2hhcihjb25zdCBjaGFyIGNoKQoreworCWlmIChpc2FsbnVtKGNoKSB8fCBzdHJjaHIoIiwtXyIsIGNoKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY2hhciAqYXR0cl92YWx1ZV91bmVzY2FwZShjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwljb25zdCBjaGFyICpzcmM7CisJY2hhciAqZHN0LCAqcmV0OworCisJcmV0ID0geG1hbGxvY3ooc3RybGVuKHZhbHVlKSk7CisJZm9yIChzcmMgPSB2YWx1ZSwgZHN0ID0gcmV0OyAqc3JjOyBzcmMrKywgZHN0KyspIHsKKwkJaWYgKCpzcmMgPT0gJ1xcJykgeworCQkJaWYgKCFzcmNbMV0pCisJCQkJZGllKF8oIkVzY2FwZSBjaGFyYWN0ZXIgJ1xcJyBub3QgYWxsb3dlZCBhcyAiCisJCQkJICAgICAgImxhc3QgY2hhcmFjdGVyIGluIGF0dHIgdmFsdWUiKSk7CisJCQlzcmMrKzsKKwkJfQorCQlpZiAoaW52YWxpZF92YWx1ZV9jaGFyKCpzcmMpKQorCQkJZGllKCJjYW5ub3QgdXNlICclYycgZm9yIHZhbHVlIG1hdGNoaW5nIiwgKnNyYyk7CisJCSpkc3QgPSAqc3JjOworCX0KKwkqZHN0ID0gJ1wwJzsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9wYXRoc3BlY19hdHRyX21hdGNoKHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc2k7CisJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCWlmIChpdGVtLT5hdHRyX2NoZWNrIHx8IGl0ZW0tPmF0dHJfbWF0Y2gpCisJCWRpZShfKCJPbmx5IG9uZSAnYXR0cjonIHNwZWNpZmljYXRpb24gaXMgYWxsb3dlZC4iKSk7CisKKwlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpCisJCWRpZShfKCJhdHRyIHNwZWMgbXVzdCBub3QgYmUgZW1wdHkiKSk7CisKKwlzdHJpbmdfbGlzdF9zcGxpdCgmbGlzdCwgdmFsdWUsICcgJywgLTEpOworCXN0cmluZ19saXN0X3JlbW92ZV9lbXB0eV9pdGVtcygmbGlzdCwgMCk7CisKKwlpdGVtLT5hdHRyX2NoZWNrID0gYXR0cl9jaGVja19hbGxvYygpOworCWl0ZW0tPmF0dHJfbWF0Y2ggPSB4Y2FsbG9jKGxpc3QubnIsIHNpemVvZihzdHJ1Y3QgYXR0cl9tYXRjaCkpOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShzaSwgJmxpc3QpIHsKKwkJc2l6ZV90IGF0dHJfbGVuOworCQljaGFyICphdHRyX25hbWU7CisJCWNvbnN0IHN0cnVjdCBnaXRfYXR0ciAqYTsKKworCQlpbnQgaiA9IGl0ZW0tPmF0dHJfbWF0Y2hfbnIrKzsKKwkJY29uc3QgY2hhciAqYXR0ciA9IHNpLT5zdHJpbmc7CisJCXN0cnVjdCBhdHRyX21hdGNoICphbSA9ICZpdGVtLT5hdHRyX21hdGNoW2pdOworCisJCXN3aXRjaCAoKmF0dHIpIHsKKwkJY2FzZSAnISc6CisJCQlhbS0+bWF0Y2hfbW9kZSA9IE1BVENIX1VOU1BFQ0lGSUVEOworCQkJYXR0cisrOworCQkJYXR0cl9sZW4gPSBzdHJsZW4oYXR0cik7CisJCQlicmVhazsKKwkJY2FzZSAnLSc6CisJCQlhbS0+bWF0Y2hfbW9kZSA9IE1BVENIX1VOU0VUOworCQkJYXR0cisrOworCQkJYXR0cl9sZW4gPSBzdHJsZW4oYXR0cik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWF0dHJfbGVuID0gc3RyY3NwbihhdHRyLCAiPSIpOworCQkJaWYgKGF0dHJbYXR0cl9sZW5dICE9ICc9JykKKwkJCQlhbS0+bWF0Y2hfbW9kZSA9IE1BVENIX1NFVDsKKwkJCWVsc2UgeworCQkJCWNvbnN0IGNoYXIgKnYgPSAmYXR0clthdHRyX2xlbiArIDFdOworCQkJCWFtLT5tYXRjaF9tb2RlID0gTUFUQ0hfVkFMVUU7CisJCQkJYW0tPnZhbHVlID0gYXR0cl92YWx1ZV91bmVzY2FwZSh2KTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJYXR0cl9uYW1lID0geG1lbWR1cHooYXR0ciwgYXR0cl9sZW4pOworCQlhID0gZ2l0X2F0dHIoYXR0cl9uYW1lKTsKKwkJaWYgKCFhKQorCQkJZGllKF8oImludmFsaWQgYXR0cmlidXRlIG5hbWUgJXMiKSwgYXR0cl9uYW1lKTsKKworCQlhdHRyX2NoZWNrX2FwcGVuZChpdGVtLT5hdHRyX2NoZWNrLCBhKTsKKworCQlmcmVlKGF0dHJfbmFtZSk7CisJfQorCisJaWYgKGl0ZW0tPmF0dHJfY2hlY2stPm5yICE9IGl0ZW0tPmF0dHJfbWF0Y2hfbnIpCisJCUJVRygic2hvdWxkIGhhdmUgc2FtZSBudW1iZXIgb2YgZW50cmllcyIpOworCisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfbGl0ZXJhbF9nbG9iYWwodm9pZCkKK3sKKwlzdGF0aWMgaW50IGxpdGVyYWwgPSAtMTsKKworCWlmIChsaXRlcmFsIDwgMCkKKwkJbGl0ZXJhbCA9IGdpdF9lbnZfYm9vbChHSVRfTElURVJBTF9QQVRIU1BFQ1NfRU5WSVJPTk1FTlQsIDApOworCisJcmV0dXJuIGxpdGVyYWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9nbG9iX2dsb2JhbCh2b2lkKQoreworCXN0YXRpYyBpbnQgZ2xvYiA9IC0xOworCisJaWYgKGdsb2IgPCAwKQorCQlnbG9iID0gZ2l0X2Vudl9ib29sKEdJVF9HTE9CX1BBVEhTUEVDU19FTlZJUk9OTUVOVCwgMCk7CisKKwlyZXR1cm4gZ2xvYjsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X25vZ2xvYl9nbG9iYWwodm9pZCkKK3sKKwlzdGF0aWMgaW50IG5vZ2xvYiA9IC0xOworCisJaWYgKG5vZ2xvYiA8IDApCisJCW5vZ2xvYiA9IGdpdF9lbnZfYm9vbChHSVRfTk9HTE9CX1BBVEhTUEVDU19FTlZJUk9OTUVOVCwgMCk7CisKKwlyZXR1cm4gbm9nbG9iOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfaWNhc2VfZ2xvYmFsKHZvaWQpCit7CisJc3RhdGljIGludCBpY2FzZSA9IC0xOworCisJaWYgKGljYXNlIDwgMCkKKwkJaWNhc2UgPSBnaXRfZW52X2Jvb2woR0lUX0lDQVNFX1BBVEhTUEVDU19FTlZJUk9OTUVOVCwgMCk7CisKKwlyZXR1cm4gaWNhc2U7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2dsb2JhbF9tYWdpYyhpbnQgZWxlbWVudF9tYWdpYykKK3sKKwlpbnQgZ2xvYmFsX21hZ2ljID0gMDsKKworCWlmIChnZXRfbGl0ZXJhbF9nbG9iYWwoKSkKKwkJZ2xvYmFsX21hZ2ljIHw9IFBBVEhTUEVDX0xJVEVSQUw7CisKKwkvKiAtLWdsb2ItcGF0aHNwZWMgaXMgb3ZlcnJpZGRlbiBieSA6KGxpdGVyYWwpICovCisJaWYgKGdldF9nbG9iX2dsb2JhbCgpICYmICEoZWxlbWVudF9tYWdpYyAmIFBBVEhTUEVDX0xJVEVSQUwpKQorCQlnbG9iYWxfbWFnaWMgfD0gUEFUSFNQRUNfR0xPQjsKKworCWlmIChnZXRfZ2xvYl9nbG9iYWwoKSAmJiBnZXRfbm9nbG9iX2dsb2JhbCgpKQorCQlkaWUoXygiZ2xvYmFsICdnbG9iJyBhbmQgJ25vZ2xvYicgcGF0aHNwZWMgc2V0dGluZ3MgYXJlIGluY29tcGF0aWJsZSIpKTsKKworCWlmIChnZXRfaWNhc2VfZ2xvYmFsKCkpCisJCWdsb2JhbF9tYWdpYyB8PSBQQVRIU1BFQ19JQ0FTRTsKKworCWlmICgoZ2xvYmFsX21hZ2ljICYgUEFUSFNQRUNfTElURVJBTCkgJiYKKwkgICAgKGdsb2JhbF9tYWdpYyAmIH5QQVRIU1BFQ19MSVRFUkFMKSkKKwkJZGllKF8oImdsb2JhbCAnbGl0ZXJhbCcgcGF0aHNwZWMgc2V0dGluZyBpcyBpbmNvbXBhdGlibGUgIgorCQkgICAgICAid2l0aCBhbGwgb3RoZXIgZ2xvYmFsIHBhdGhzcGVjIHNldHRpbmdzIikpOworCisJLyogLS1ub2dsb2ItcGF0aHNwZWMgYWRkcyA6KGxpdGVyYWwpIF91bmxlc3NfIDooZ2xvYikgaXMgc3BlY2lmaWVkICovCisJaWYgKGdldF9ub2dsb2JfZ2xvYmFsKCkgJiYgIShlbGVtZW50X21hZ2ljICYgUEFUSFNQRUNfR0xPQikpCisJCWdsb2JhbF9tYWdpYyB8PSBQQVRIU1BFQ19MSVRFUkFMOworCisJcmV0dXJuIGdsb2JhbF9tYWdpYzsKK30KKworLyoKKyAqIFBhcnNlIHRoZSBwYXRoc3BlYyBlbGVtZW50IGxvb2tpbmcgZm9yIGxvbmcgbWFnaWMKKyAqCisgKiBzYXZlcyBhbGwgbWFnaWMgaW4gJ21hZ2ljJworICogaWYgcHJlZml4IG1hZ2ljIGlzIHVzZWQsIHNhdmUgdGhlIHByZWZpeCBsZW5ndGggaW4gJ3ByZWZpeF9sZW4nCisgKiByZXR1cm5zIHRoZSBwb3NpdGlvbiBpbiAnZWxlbScgYWZ0ZXIgYWxsIG1hZ2ljIGhhcyBiZWVuIHBhcnNlZAorICovCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfbG9uZ19tYWdpYyh1bnNpZ25lZCAqbWFnaWMsIGludCAqcHJlZml4X2xlbiwKKwkJCQkgICAgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0sCisJCQkJICAgIGNvbnN0IGNoYXIgKmVsZW0pCit7CisJY29uc3QgY2hhciAqcG9zOworCWNvbnN0IGNoYXIgKm5leHRhdDsKKworCWZvciAocG9zID0gZWxlbSArIDI7ICpwb3MgJiYgKnBvcyAhPSAnKSc7IHBvcyA9IG5leHRhdCkgeworCQlzaXplX3QgbGVuID0gc3RyY3Nwbl9lc2NhcGVkKHBvcywgIiwpIik7CisJCWludCBpOworCisJCWlmIChwb3NbbGVuXSA9PSAnLCcpCisJCQluZXh0YXQgPSBwb3MgKyBsZW4gKyAxOyAvKiBoYW5kbGUgJywnICovCisJCWVsc2UKKwkJCW5leHRhdCA9IHBvcyArIGxlbjsgLyogaGFuZGxlICcpJyBhbmQgJ1wwJyAqLworCisJCWlmICghbGVuKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0YXJ0c193aXRoKHBvcywgInByZWZpeDoiKSkgeworCQkJY2hhciAqZW5kcHRyOworCQkJKnByZWZpeF9sZW4gPSBzdHJ0b2wocG9zICsgNywgJmVuZHB0ciwgMTApOworCQkJaWYgKGVuZHB0ciAtIHBvcyAhPSBsZW4pCisJCQkJZGllKF8oImludmFsaWQgcGFyYW1ldGVyIGZvciBwYXRoc3BlYyBtYWdpYyAncHJlZml4JyIpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHN0YXJ0c193aXRoKHBvcywgImF0dHI6IikpIHsKKwkJCWNoYXIgKmF0dHJfYm9keSA9IHhtZW1kdXB6KHBvcyArIDUsIGxlbiAtIDUpOworCQkJcGFyc2VfcGF0aHNwZWNfYXR0cl9tYXRjaChpdGVtLCBhdHRyX2JvZHkpOworCQkJKm1hZ2ljIHw9IFBBVEhTUEVDX0FUVFI7CisJCQlmcmVlKGF0dHJfYm9keSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBhdGhzcGVjX21hZ2ljKTsgaSsrKSB7CisJCQlpZiAoc3RybGVuKHBhdGhzcGVjX21hZ2ljW2ldLm5hbWUpID09IGxlbiAmJgorCQkJICAgICFzdHJuY21wKHBhdGhzcGVjX21hZ2ljW2ldLm5hbWUsIHBvcywgbGVuKSkgeworCQkJCSptYWdpYyB8PSBwYXRoc3BlY19tYWdpY1tpXS5iaXQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoQVJSQVlfU0laRShwYXRoc3BlY19tYWdpYykgPD0gaSkKKwkJCWRpZShfKCJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIiksCisJCQkgICAgKGludCkgbGVuLCBwb3MsIGVsZW0pOworCX0KKworCWlmICgqcG9zICE9ICcpJykKKwkJZGllKF8oIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIpLAorCQkgICAgZWxlbSk7CisJcG9zKys7CisKKwlyZXR1cm4gcG9zOworfQorCisvKgorICogUGFyc2UgdGhlIHBhdGhzcGVjIGVsZW1lbnQgbG9va2luZyBmb3Igc2hvcnQgbWFnaWMKKyAqCisgKiBzYXZlcyBhbGwgbWFnaWMgaW4gJ21hZ2ljJworICogcmV0dXJucyB0aGUgcG9zaXRpb24gaW4gJ2VsZW0nIGFmdGVyIGFsbCBtYWdpYyBoYXMgYmVlbiBwYXJzZWQKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX3Nob3J0X21hZ2ljKHVuc2lnbmVkICptYWdpYywgY29uc3QgY2hhciAqZWxlbSkKK3sKKwljb25zdCBjaGFyICpwb3M7CisKKwlmb3IgKHBvcyA9IGVsZW0gKyAxOyAqcG9zICYmICpwb3MgIT0gJzonOyBwb3MrKykgeworCQljaGFyIGNoID0gKnBvczsKKwkJaW50IGk7CisKKwkJLyogU3BlY2lhbCBjYXNlIGFsaWFzIGZvciAnIScgKi8KKwkJaWYgKGNoID09ICdeJykgeworCQkJKm1hZ2ljIHw9IFBBVEhTUEVDX0VYQ0xVREU7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghaXNfcGF0aHNwZWNfbWFnaWMoY2gpKQorCQkJYnJlYWs7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGF0aHNwZWNfbWFnaWMpOyBpKyspIHsKKwkJCWlmIChwYXRoc3BlY19tYWdpY1tpXS5tbmVtb25pYyA9PSBjaCkgeworCQkJCSptYWdpYyB8PSBwYXRoc3BlY19tYWdpY1tpXS5iaXQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoQVJSQVlfU0laRShwYXRoc3BlY19tYWdpYykgPD0gaSkKKwkJCWRpZShfKCJVbmltcGxlbWVudGVkIHBhdGhzcGVjIG1hZ2ljICclYycgaW4gJyVzJyIpLAorCQkJICAgIGNoLCBlbGVtKTsKKwl9CisKKwlpZiAoKnBvcyA9PSAnOicpCisJCXBvcysrOworCisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2VsZW1lbnRfbWFnaWModW5zaWduZWQgKm1hZ2ljLCBpbnQgKnByZWZpeF9sZW4sCisJCQkJICAgICAgIHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtLAorCQkJCSAgICAgICBjb25zdCBjaGFyICplbGVtKQoreworCWlmIChlbGVtWzBdICE9ICc6JyB8fCBnZXRfbGl0ZXJhbF9nbG9iYWwoKSkKKwkJcmV0dXJuIGVsZW07IC8qIG5vdGhpbmcgdG8gZG8gKi8KKwllbHNlIGlmIChlbGVtWzFdID09ICcoJykKKwkJLyogbG9uZ2hhbmQgKi8KKwkJcmV0dXJuIHBhcnNlX2xvbmdfbWFnaWMobWFnaWMsIHByZWZpeF9sZW4sIGl0ZW0sIGVsZW0pOworCWVsc2UKKwkJLyogc2hvcnRoYW5kICovCisJCXJldHVybiBwYXJzZV9zaG9ydF9tYWdpYyhtYWdpYywgZWxlbSk7Cit9CisKKy8qCisgKiBQZXJmb3JtIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhIHBhdGhzcGVjX2l0ZW0gYmFzZWQgb24gYSBwYXRoc3BlYyBlbGVtZW50LgorICovCitzdGF0aWMgdm9pZCBpbml0X3BhdGhzcGVjX2l0ZW0oc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0sIHVuc2lnbmVkIGZsYWdzLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKKwkJCSAgICAgICBjb25zdCBjaGFyICplbHQpCit7CisJdW5zaWduZWQgbWFnaWMgPSAwLCBlbGVtZW50X21hZ2ljID0gMDsKKwljb25zdCBjaGFyICpjb3B5ZnJvbSA9IGVsdDsKKwljaGFyICptYXRjaDsKKwlpbnQgcGF0aHNwZWNfcHJlZml4ID0gLTE7CisKKwlpdGVtLT5hdHRyX2NoZWNrID0gTlVMTDsKKwlpdGVtLT5hdHRyX21hdGNoID0gTlVMTDsKKwlpdGVtLT5hdHRyX21hdGNoX25yID0gMDsKKworCS8qIFBBVEhTUEVDX0xJVEVSQUxfUEFUSCBpZ25vcmVzIG1hZ2ljICovCisJaWYgKGZsYWdzICYgUEFUSFNQRUNfTElURVJBTF9QQVRIKSB7CisJCW1hZ2ljID0gUEFUSFNQRUNfTElURVJBTDsKKwl9IGVsc2UgeworCQljb3B5ZnJvbSA9IHBhcnNlX2VsZW1lbnRfbWFnaWMoJmVsZW1lbnRfbWFnaWMsCisJCQkJCSAgICAgICAmcGF0aHNwZWNfcHJlZml4LAorCQkJCQkgICAgICAgaXRlbSwKKwkJCQkJICAgICAgIGVsdCk7CisJCW1hZ2ljIHw9IGVsZW1lbnRfbWFnaWM7CisJCW1hZ2ljIHw9IGdldF9nbG9iYWxfbWFnaWMoZWxlbWVudF9tYWdpYyk7CisJfQorCisJaXRlbS0+bWFnaWMgPSBtYWdpYzsKKworCWlmIChwYXRoc3BlY19wcmVmaXggPj0gMCAmJgorCSAgICAocHJlZml4bGVuIHx8IChwcmVmaXggJiYgKnByZWZpeCkpKQorCQlCVUcoIidwcmVmaXgnIG1hZ2ljIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgYXQgd29ya3RyZWUncyByb290Iik7CisKKwlpZiAoKG1hZ2ljICYgUEFUSFNQRUNfTElURVJBTCkgJiYgKG1hZ2ljICYgUEFUSFNQRUNfR0xPQikpCisJCWRpZShfKCIlczogJ2xpdGVyYWwnIGFuZCAnZ2xvYicgYXJlIGluY29tcGF0aWJsZSIpLCBlbHQpOworCisJLyogQ3JlYXRlIG1hdGNoIHN0cmluZyB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIHBhdGhzcGVjIG1hdGNoaW5nICovCisJaWYgKHBhdGhzcGVjX3ByZWZpeCA+PSAwKSB7CisJCW1hdGNoID0geHN0cmR1cChjb3B5ZnJvbSk7CisJCXByZWZpeGxlbiA9IHBhdGhzcGVjX3ByZWZpeDsKKwl9IGVsc2UgaWYgKG1hZ2ljICYgUEFUSFNQRUNfRlJPTVRPUCkgeworCQltYXRjaCA9IHhzdHJkdXAoY29weWZyb20pOworCQlwcmVmaXhsZW4gPSAwOworCX0gZWxzZSB7CisJCW1hdGNoID0gcHJlZml4X3BhdGhfZ2VudGx5KHByZWZpeCwgcHJlZml4bGVuLAorCQkJCQkgICAmcHJlZml4bGVuLCBjb3B5ZnJvbSk7CisJCWlmICghbWF0Y2gpIHsKKwkJCWNvbnN0IGNoYXIgKmhpbnRfcGF0aCA9IGdldF9naXRfd29ya190cmVlKCk7CisJCQlpZiAoIWhpbnRfcGF0aCkKKwkJCQloaW50X3BhdGggPSBnZXRfZ2l0X2RpcigpOworCQkJZGllKF8oIiVzOiAnJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSBhdCAnJXMnIiksIGVsdCwKKwkJCSAgICBjb3B5ZnJvbSwgYWJzb2x1dGVfcGF0aChoaW50X3BhdGgpKTsKKwkJfQorCX0KKworCWl0ZW0tPm1hdGNoID0gbWF0Y2g7CisJaXRlbS0+bGVuID0gc3RybGVuKGl0ZW0tPm1hdGNoKTsKKwlpdGVtLT5wcmVmaXggPSBwcmVmaXhsZW47CisKKwkvKgorCSAqIFByZWZpeCB0aGUgcGF0aHNwZWMgKGtlZXAgYWxsIG1hZ2ljKSBhbmQgYXNzaWduIHRvCisJICogb3JpZ2luYWwuIFVzZWZ1bCBmb3IgcGFzc2luZyB0byBhbm90aGVyIGNvbW1hbmQuCisJICovCisJaWYgKChmbGFncyAmIFBBVEhTUEVDX1BSRUZJWF9PUklHSU4pICYmCisJICAgICFnZXRfbGl0ZXJhbF9nbG9iYWwoKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJLyogUHJlc2VydmUgdGhlIGFjdHVhbCBwcmVmaXggbGVuZ3RoIG9mIGVhY2ggcGF0dGVybiAqLworCQlwcmVmaXhfbWFnaWMoJnNiLCBwcmVmaXhsZW4sIGVsZW1lbnRfbWFnaWMpOworCisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBtYXRjaCk7CisJCWl0ZW0tPm9yaWdpbmFsID0gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCX0gZWxzZSB7CisJCWl0ZW0tPm9yaWdpbmFsID0geHN0cmR1cChlbHQpOworCX0KKworCWlmIChtYWdpYyAmIFBBVEhTUEVDX0xJVEVSQUwpIHsKKwkJaXRlbS0+bm93aWxkY2FyZF9sZW4gPSBpdGVtLT5sZW47CisJfSBlbHNlIHsKKwkJaXRlbS0+bm93aWxkY2FyZF9sZW4gPSBzaW1wbGVfbGVuZ3RoKGl0ZW0tPm1hdGNoKTsKKwkJaWYgKGl0ZW0tPm5vd2lsZGNhcmRfbGVuIDwgcHJlZml4bGVuKQorCQkJaXRlbS0+bm93aWxkY2FyZF9sZW4gPSBwcmVmaXhsZW47CisJfQorCisJaXRlbS0+ZmxhZ3MgPSAwOworCWlmIChtYWdpYyAmIFBBVEhTUEVDX0dMT0IpIHsKKwkJLyoKKwkJICogRklYTUU6IHNob3VsZCB3ZSBlbmFibGUgT05FU1RBUiBpbiBfR0xPQiBmb3IKKwkJICogcGF0dGVybiAiKiAqIC8gKiAuIGMiPworCQkgKi8KKwl9IGVsc2UgeworCQlpZiAoaXRlbS0+bm93aWxkY2FyZF9sZW4gPCBpdGVtLT5sZW4gJiYKKwkJICAgIGl0ZW0tPm1hdGNoW2l0ZW0tPm5vd2lsZGNhcmRfbGVuXSA9PSAnKicgJiYKKwkJICAgIG5vX3dpbGRjYXJkKGl0ZW0tPm1hdGNoICsgaXRlbS0+bm93aWxkY2FyZF9sZW4gKyAxKSkKKwkJCWl0ZW0tPmZsYWdzIHw9IFBBVEhTUEVDX09ORVNUQVI7CisJfQorCisJLyogc2FuaXR5IGNoZWNrcywgcGF0aHNwZWMgbWF0Y2hlcnMgYXNzdW1lIHRoZXNlIGFyZSBzYW5lICovCisJaWYgKGl0ZW0tPm5vd2lsZGNhcmRfbGVuID4gaXRlbS0+bGVuIHx8CisJICAgIGl0ZW0tPnByZWZpeCAgICAgICAgID4gaXRlbS0+bGVuKSB7CisJCUJVRygiZXJyb3IgaW5pdGlhbGl6aW5nIHBhdGhzcGVjX2l0ZW0iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGF0aHNwZWNfaXRlbV9jbXAoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCBwYXRoc3BlY19pdGVtICphLCAqYjsKKworCWEgPSAoc3RydWN0IHBhdGhzcGVjX2l0ZW0gKilhXzsKKwliID0gKHN0cnVjdCBwYXRoc3BlY19pdGVtICopYl87CisJcmV0dXJuIHN0cmNtcChhLT5tYXRjaCwgYi0+bWF0Y2gpOworfQorCitzdGF0aWMgdm9pZCBOT1JFVFVSTiB1bnN1cHBvcnRlZF9tYWdpYyhjb25zdCBjaGFyICpwYXR0ZXJuLAorCQkJCSAgICAgICB1bnNpZ25lZCBtYWdpYykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGF0aHNwZWNfbWFnaWMpOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHBhdGhzcGVjX21hZ2ljICptID0gcGF0aHNwZWNfbWFnaWMgKyBpOworCQlpZiAoIShtYWdpYyAmIG0tPmJpdCkpCisJCQljb250aW51ZTsKKwkJaWYgKHNiLmxlbikKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCAiLCAiKTsKKworCQlpZiAobS0+bW5lbW9uaWMpCisJCQlzdHJidWZfYWRkZigmc2IsIF8oIiclcycgKG1uZW1vbmljOiAnJWMnKSIpLAorCQkJCSAgICBtLT5uYW1lLCBtLT5tbmVtb25pYyk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKCZzYiwgIiclcyciLCBtLT5uYW1lKTsKKwl9CisJLyoKKwkgKiBXZSBtYXkgd2FudCB0byBzdWJzdGl0dXRlICJ0aGlzIGNvbW1hbmQiIHdpdGggYSBjb21tYW5kCisJICogbmFtZS4gRS5nLiB3aGVuIGFkZC0taW50ZXJhY3RpdmUgZGllcyB3aGVuIHJ1bm5pbmcKKwkgKiAiY2hlY2tvdXQgLXAiCisJICovCisJZGllKF8oIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiKSwKKwkgICAgcGF0dGVybiwgc2IuYnVmKTsKK30KKwordm9pZCBwYXJzZV9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkgICAgdW5zaWduZWQgbWFnaWNfbWFzaywgdW5zaWduZWQgZmxhZ3MsCisJCSAgICBjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtOworCWNvbnN0IGNoYXIgKmVudHJ5ID0gYXJndiA/ICphcmd2IDogTlVMTDsKKwlpbnQgaSwgbiwgcHJlZml4bGVuLCBucl9leGNsdWRlID0gMDsKKworCW1lbXNldChwYXRoc3BlYywgMCwgc2l6ZW9mKCpwYXRoc3BlYykpOworCisJaWYgKGZsYWdzICYgUEFUSFNQRUNfTUFYREVQVEhfVkFMSUQpCisJCXBhdGhzcGVjLT5tYWdpYyB8PSBQQVRIU1BFQ19NQVhERVBUSDsKKworCS8qIE5vIGFyZ3VtZW50cywgbm8gcHJlZml4IC0+IG5vIHBhdGhzcGVjICovCisJaWYgKCFlbnRyeSAmJiAhcHJlZml4KQorCQlyZXR1cm47CisKKwlpZiAoKGZsYWdzICYgUEFUSFNQRUNfUFJFRkVSX0NXRCkgJiYKKwkgICAgKGZsYWdzICYgUEFUSFNQRUNfUFJFRkVSX0ZVTEwpKQorCQlCVUcoIlBBVEhTUEVDX1BSRUZFUl9DV0QgYW5kIFBBVEhTUEVDX1BSRUZFUl9GVUxMIGFyZSBpbmNvbXBhdGlibGUiKTsKKworCS8qIE5vIGFyZ3VtZW50cyB3aXRoIHByZWZpeCAtPiBwcmVmaXggcGF0aHNwZWMgKi8KKwlpZiAoIWVudHJ5KSB7CisJCWlmIChmbGFncyAmIFBBVEhTUEVDX1BSRUZFUl9GVUxMKQorCQkJcmV0dXJuOworCisJCWlmICghKGZsYWdzICYgUEFUSFNQRUNfUFJFRkVSX0NXRCkpCisJCQlCVUcoIlBBVEhTUEVDX1BSRUZFUl9DV0QgcmVxdWlyZXMgYXJndW1lbnRzIik7CisKKwkJcGF0aHNwZWMtPml0ZW1zID0gaXRlbSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCppdGVtKSk7CisJCWl0ZW0tPm1hdGNoID0geHN0cmR1cChwcmVmaXgpOworCQlpdGVtLT5vcmlnaW5hbCA9IHhzdHJkdXAocHJlZml4KTsKKwkJaXRlbS0+bm93aWxkY2FyZF9sZW4gPSBpdGVtLT5sZW4gPSBzdHJsZW4ocHJlZml4KTsKKwkJaXRlbS0+cHJlZml4ID0gaXRlbS0+bGVuOworCQlwYXRoc3BlYy0+bnIgPSAxOworCQlyZXR1cm47CisJfQorCisJbiA9IDA7CisJd2hpbGUgKGFyZ3Zbbl0pIHsKKwkJaWYgKCphcmd2W25dID09ICdcMCcpCisJCQlkaWUoImVtcHR5IHN0cmluZyBpcyBub3QgYSB2YWxpZCBwYXRoc3BlYy4gIgorCQkJCSAgInBsZWFzZSB1c2UgLiBpbnN0ZWFkIGlmIHlvdSBtZWFudCB0byBtYXRjaCBhbGwgcGF0aHMiKTsKKwkJbisrOworCX0KKworCXBhdGhzcGVjLT5uciA9IG47CisJQUxMT0NfQVJSQVkocGF0aHNwZWMtPml0ZW1zLCBuICsgMSk7CisJaXRlbSA9IHBhdGhzcGVjLT5pdGVtczsKKwlwcmVmaXhsZW4gPSBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWVudHJ5ID0gYXJndltpXTsKKworCQlpbml0X3BhdGhzcGVjX2l0ZW0oaXRlbSArIGksIGZsYWdzLCBwcmVmaXgsIHByZWZpeGxlbiwgZW50cnkpOworCisJCWlmIChpdGVtW2ldLm1hZ2ljICYgUEFUSFNQRUNfRVhDTFVERSkKKwkJCW5yX2V4Y2x1ZGUrKzsKKwkJaWYgKGl0ZW1baV0ubWFnaWMgJiBtYWdpY19tYXNrKQorCQkJdW5zdXBwb3J0ZWRfbWFnaWMoZW50cnksIGl0ZW1baV0ubWFnaWMgJiBtYWdpY19tYXNrKTsKKworCQlpZiAoKGZsYWdzICYgUEFUSFNQRUNfU1lNTElOS19MRUFESU5HX1BBVEgpICYmCisJCSAgICBoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoaXRlbVtpXS5tYXRjaCwgaXRlbVtpXS5sZW4pKSB7CisJCQlkaWUoXygicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIiksIGVudHJ5KTsKKwkJfQorCisJCWlmIChpdGVtW2ldLm5vd2lsZGNhcmRfbGVuIDwgaXRlbVtpXS5sZW4pCisJCQlwYXRoc3BlYy0+aGFzX3dpbGRjYXJkID0gMTsKKwkJcGF0aHNwZWMtPm1hZ2ljIHw9IGl0ZW1baV0ubWFnaWM7CisJfQorCisJLyoKKwkgKiBJZiBldmVyeXRoaW5nIGlzIGFuIGV4Y2x1ZGUgcGF0dGVybiwgYWRkIG9uZSBwb3NpdGl2ZSBwYXR0ZXJuCisJICogdGhhdCBtYXRjaGVzIGV2ZXJ5dGhpbmcuIFdlIGFsbG9jYXRlZCBhbiBleHRyYSBvbmUgZm9yIHRoaXMuCisJICovCisJaWYgKG5yX2V4Y2x1ZGUgPT0gbikgeworCQlpbnQgcGxlbiA9ICghKGZsYWdzICYgUEFUSFNQRUNfUFJFRkVSX0NXRCkpID8gMCA6IHByZWZpeGxlbjsKKwkJaW5pdF9wYXRoc3BlY19pdGVtKGl0ZW0gKyBuLCAwLCBwcmVmaXgsIHBsZW4sICIiKTsKKwkJcGF0aHNwZWMtPm5yKys7CisJfQorCisJaWYgKHBhdGhzcGVjLT5tYWdpYyAmIFBBVEhTUEVDX01BWERFUFRIKSB7CisJCWlmIChmbGFncyAmIFBBVEhTUEVDX0tFRVBfT1JERVIpCisJCQlCVUcoIlBBVEhTUEVDX01BWERFUFRIX1ZBTElEIGFuZCBQQVRIU1BFQ19LRUVQX09SREVSIGFyZSBpbmNvbXBhdGlibGUiKTsKKwkJUVNPUlQocGF0aHNwZWMtPml0ZW1zLCBwYXRoc3BlYy0+bnIsIHBhdGhzcGVjX2l0ZW1fY21wKTsKKwl9Cit9CisKK3ZvaWQgcGFyc2VfcGF0aHNwZWNfZmlsZShzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLCB1bnNpZ25lZCBtYWdpY19tYXNrLAorCQkJIHVuc2lnbmVkIGZsYWdzLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgY29uc3QgY2hhciAqZmlsZSwgaW50IG51bF90ZXJtX2xpbmUpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgcGFyc2VkX2ZpbGUgPSBBUkdWX0FSUkFZX0lOSVQ7CisJc3RyYnVmX2dldGxpbmVfZm4gZ2V0bGluZV9mbiA9IG51bF90ZXJtX2xpbmUgPyBzdHJidWZfZ2V0bGluZV9udWwgOgorCQkJCQkJICAgICAgIHN0cmJ1Zl9nZXRsaW5lOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB1bnF1b3RlZCA9IFNUUkJVRl9JTklUOworCUZJTEUgKmluOworCisJaWYgKCFzdHJjbXAoZmlsZSwgIi0iKSkKKwkJaW4gPSBzdGRpbjsKKwllbHNlCisJCWluID0geGZvcGVuKGZpbGUsICJyIik7CisKKwl3aGlsZSAoZ2V0bGluZV9mbigmYnVmLCBpbikgIT0gRU9GKSB7CisJCWlmICghbnVsX3Rlcm1fbGluZSAmJiBidWYuYnVmWzBdID09ICciJykgeworCQkJc3RyYnVmX3Jlc2V0KCZ1bnF1b3RlZCk7CisJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZ1bnF1b3RlZCwgYnVmLmJ1ZiwgTlVMTCkpCisJCQkJZGllKF8oImxpbmUgaXMgYmFkbHkgcXVvdGVkOiAlcyIpLCBidWYuYnVmKTsKKwkJCXN0cmJ1Zl9zd2FwKCZidWYsICZ1bnF1b3RlZCk7CisJCX0KKwkJYXJndl9hcnJheV9wdXNoKCZwYXJzZWRfZmlsZSwgYnVmLmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmdW5xdW90ZWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWlmIChpbiAhPSBzdGRpbikKKwkJZmNsb3NlKGluKTsKKworCXBhcnNlX3BhdGhzcGVjKHBhdGhzcGVjLCBtYWdpY19tYXNrLCBmbGFncywgcHJlZml4LCBwYXJzZWRfZmlsZS5hcmd2KTsKKwlhcmd2X2FycmF5X2NsZWFyKCZwYXJzZWRfZmlsZSk7Cit9CisKK3ZvaWQgY29weV9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKmRzdCwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpzcmMpCit7CisJaW50IGksIGo7CisKKwkqZHN0ID0gKnNyYzsKKwlBTExPQ19BUlJBWShkc3QtPml0ZW1zLCBkc3QtPm5yKTsKKwlDT1BZX0FSUkFZKGRzdC0+aXRlbXMsIHNyYy0+aXRlbXMsIGRzdC0+bnIpOworCisJZm9yIChpID0gMDsgaSA8IGRzdC0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqZCA9ICZkc3QtPml0ZW1zW2ldOworCQlzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqcyA9ICZzcmMtPml0ZW1zW2ldOworCisJCWQtPm1hdGNoID0geHN0cmR1cChzLT5tYXRjaCk7CisJCWQtPm9yaWdpbmFsID0geHN0cmR1cChzLT5vcmlnaW5hbCk7CisKKwkJQUxMT0NfQVJSQVkoZC0+YXR0cl9tYXRjaCwgZC0+YXR0cl9tYXRjaF9ucik7CisJCUNPUFlfQVJSQVkoZC0+YXR0cl9tYXRjaCwgcy0+YXR0cl9tYXRjaCwgZC0+YXR0cl9tYXRjaF9ucik7CisJCWZvciAoaiA9IDA7IGogPCBkLT5hdHRyX21hdGNoX25yOyBqKyspIHsKKwkJCWNvbnN0IGNoYXIgKnZhbHVlID0gcy0+YXR0cl9tYXRjaFtqXS52YWx1ZTsKKwkJCWQtPmF0dHJfbWF0Y2hbal0udmFsdWUgPSB4c3RyZHVwX29yX251bGwodmFsdWUpOworCQl9CisKKwkJZC0+YXR0cl9jaGVjayA9IGF0dHJfY2hlY2tfZHVwKHMtPmF0dHJfY2hlY2spOworCX0KK30KKwordm9pZCBjbGVhcl9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IHBhdGhzcGVjLT5ucjsgaSsrKSB7CisJCWZyZWUocGF0aHNwZWMtPml0ZW1zW2ldLm1hdGNoKTsKKwkJZnJlZShwYXRoc3BlYy0+aXRlbXNbaV0ub3JpZ2luYWwpOworCisJCWZvciAoaiA9IDA7IGogPCBwYXRoc3BlYy0+aXRlbXNbaV0uYXR0cl9tYXRjaF9ucjsgaisrKQorCQkJZnJlZShwYXRoc3BlYy0+aXRlbXNbaV0uYXR0cl9tYXRjaFtqXS52YWx1ZSk7CisJCWZyZWUocGF0aHNwZWMtPml0ZW1zW2ldLmF0dHJfbWF0Y2gpOworCisJCWlmIChwYXRoc3BlYy0+aXRlbXNbaV0uYXR0cl9jaGVjaykKKwkJCWF0dHJfY2hlY2tfZnJlZShwYXRoc3BlYy0+aXRlbXNbaV0uYXR0cl9jaGVjayk7CisJfQorCisJRlJFRV9BTkRfTlVMTChwYXRoc3BlYy0+aXRlbXMpOworCXBhdGhzcGVjLT5uciA9IDA7Cit9CisKK2ludCBtYXRjaF9wYXRoc3BlY19hdHRycyhjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCSBjb25zdCBzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqaXRlbSkKK3sKKwlpbnQgaTsKKwljaGFyICp0b19mcmVlID0gTlVMTDsKKworCWlmIChuYW1lW25hbWVsZW5dKQorCQluYW1lID0gdG9fZnJlZSA9IHhtZW1kdXB6KG5hbWUsIG5hbWVsZW4pOworCisJZ2l0X2NoZWNrX2F0dHIoaXN0YXRlLCBuYW1lLCBpdGVtLT5hdHRyX2NoZWNrKTsKKworCWZyZWUodG9fZnJlZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaXRlbS0+YXR0cl9tYXRjaF9ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnZhbHVlOworCQlpbnQgbWF0Y2hlZDsKKwkJZW51bSBhdHRyX21hdGNoX21vZGUgbWF0Y2hfbW9kZTsKKworCQl2YWx1ZSA9IGl0ZW0tPmF0dHJfY2hlY2stPml0ZW1zW2ldLnZhbHVlOworCQltYXRjaF9tb2RlID0gaXRlbS0+YXR0cl9tYXRjaFtpXS5tYXRjaF9tb2RlOworCisJCWlmIChBVFRSX1RSVUUodmFsdWUpKQorCQkJbWF0Y2hlZCA9IChtYXRjaF9tb2RlID09IE1BVENIX1NFVCk7CisJCWVsc2UgaWYgKEFUVFJfRkFMU0UodmFsdWUpKQorCQkJbWF0Y2hlZCA9IChtYXRjaF9tb2RlID09IE1BVENIX1VOU0VUKTsKKwkJZWxzZSBpZiAoQVRUUl9VTlNFVCh2YWx1ZSkpCisJCQltYXRjaGVkID0gKG1hdGNoX21vZGUgPT0gTUFUQ0hfVU5TUEVDSUZJRUQpOworCQllbHNlCisJCQltYXRjaGVkID0gKG1hdGNoX21vZGUgPT0gTUFUQ0hfVkFMVUUgJiYKKwkJCQkgICAhc3RyY21wKGl0ZW0tPmF0dHJfbWF0Y2hbaV0udmFsdWUsIHZhbHVlKSk7CisJCWlmICghbWF0Y2hlZCkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvcGF0aHNwZWMuaCBiL3BhdGhzcGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU0Y2UzNgotLS0gL2Rldi9udWxsCisrKyBiL3BhdGhzcGVjLmgKQEAgLTAsMCArMSwxNjEgQEAKKyNpZm5kZWYgUEFUSFNQRUNfSAorI2RlZmluZSBQQVRIU1BFQ19ICisKK3N0cnVjdCBpbmRleF9zdGF0ZTsKKworLyogUGF0aHNwZWMgbWFnaWMgKi8KKyNkZWZpbmUgUEFUSFNQRUNfRlJPTVRPUAkoMTw8MCkKKyNkZWZpbmUgUEFUSFNQRUNfTUFYREVQVEgJKDE8PDEpCisjZGVmaW5lIFBBVEhTUEVDX0xJVEVSQUwJKDE8PDIpCisjZGVmaW5lIFBBVEhTUEVDX0dMT0IJCSgxPDwzKQorI2RlZmluZSBQQVRIU1BFQ19JQ0FTRQkJKDE8PDQpCisjZGVmaW5lIFBBVEhTUEVDX0VYQ0xVREUJKDE8PDUpCisjZGVmaW5lIFBBVEhTUEVDX0FUVFIJCSgxPDw2KQorI2RlZmluZSBQQVRIU1BFQ19BTExfTUFHSUMJICBcCisJKFBBVEhTUEVDX0ZST01UT1AJfCBcCisJIFBBVEhTUEVDX01BWERFUFRICXwgXAorCSBQQVRIU1BFQ19MSVRFUkFMCXwgXAorCSBQQVRIU1BFQ19HTE9CCQl8IFwKKwkgUEFUSFNQRUNfSUNBU0UJCXwgXAorCSBQQVRIU1BFQ19FWENMVURFCXwgXAorCSBQQVRIU1BFQ19BVFRSKQorCisjZGVmaW5lIFBBVEhTUEVDX09ORVNUQVIgMQkvKiB0aGUgcGF0aHNwZWMgcGF0dGVybiBzYXRpc2ZpZXMgR0ZOTV9PTkVTVEFSICovCisKKy8qKgorICogU2VlIGdsb3NzYXJ5LWNvbnRleHQudHh0IGZvciB0aGUgc3ludGF4IG9mIHBhdGhzcGVjLgorICogSW4gbWVtb3J5LCBhIHBhdGhzcGVjIHNldCBpcyByZXByZXNlbnRlZCBieSAic3RydWN0IHBhdGhzcGVjIiBhbmQgaXMKKyAqIHByZXBhcmVkIGJ5IHBhcnNlX3BhdGhzcGVjKCkuCisgKi8KK3N0cnVjdCBwYXRoc3BlYyB7CisJaW50IG5yOworCXVuc2lnbmVkIGludCBoYXNfd2lsZGNhcmQ6MTsKKwl1bnNpZ25lZCBpbnQgcmVjdXJzaXZlOjE7CisJdW5zaWduZWQgaW50IHJlY3Vyc2Vfc3VibW9kdWxlczoxOworCXVuc2lnbmVkIG1hZ2ljOworCWludCBtYXhfZGVwdGg7CisJc3RydWN0IHBhdGhzcGVjX2l0ZW0geworCQljaGFyICptYXRjaDsKKwkJY2hhciAqb3JpZ2luYWw7CisJCXVuc2lnbmVkIG1hZ2ljOworCQlpbnQgbGVuLCBwcmVmaXg7CisJCWludCBub3dpbGRjYXJkX2xlbjsKKwkJaW50IGZsYWdzOworCQlpbnQgYXR0cl9tYXRjaF9ucjsKKwkJc3RydWN0IGF0dHJfbWF0Y2ggeworCQkJY2hhciAqdmFsdWU7CisJCQllbnVtIGF0dHJfbWF0Y2hfbW9kZSB7CisJCQkJTUFUQ0hfU0VULAorCQkJCU1BVENIX1VOU0VULAorCQkJCU1BVENIX1ZBTFVFLAorCQkJCU1BVENIX1VOU1BFQ0lGSUVECisJCQl9IG1hdGNoX21vZGU7CisJCX0gKmF0dHJfbWF0Y2g7CisJCXN0cnVjdCBhdHRyX2NoZWNrICphdHRyX2NoZWNrOworCX0gKml0ZW1zOworfTsKKworI2RlZmluZSBHVUFSRF9QQVRIU1BFQyhwcywgbWFzaykgXAorCWRvIHsgXAorCQlpZiAoKHBzKS0+bWFnaWMgJiB+KG1hc2spKQkgICAgICAgXAorCQkJZGllKCJCVUc6JXM6JWQ6IHVuc3VwcG9ydGVkIG1hZ2ljICV4IiwJXAorCQkJICAgIF9fRklMRV9fLCBfX0xJTkVfXywgKHBzKS0+bWFnaWMgJiB+KG1hc2spKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIHBhcnNlX3BhdGhzcGVjIGZsYWdzICovCisjZGVmaW5lIFBBVEhTUEVDX1BSRUZFUl9DV0QgKDE8PDApIC8qIE5vIGFyZ3MgbWVhbnMgbWF0Y2ggY3dkICovCisjZGVmaW5lIFBBVEhTUEVDX1BSRUZFUl9GVUxMICgxPDwxKSAvKiBObyBhcmdzIG1lYW5zIG1hdGNoIGV2ZXJ5dGhpbmcgKi8KKyNkZWZpbmUgUEFUSFNQRUNfTUFYREVQVEhfVkFMSUQgKDE8PDIpIC8qIG1heF9kZXB0aCBmaWVsZCBpcyB2YWxpZCAqLworLyogZGllIGlmIGEgc3ltbGluayBpcyBwYXJ0IG9mIHRoZSBnaXZlbiBwYXRoJ3MgZGlyZWN0b3J5ICovCisjZGVmaW5lIFBBVEhTUEVDX1NZTUxJTktfTEVBRElOR19QQVRIICgxPDwzKQorI2RlZmluZSBQQVRIU1BFQ19QUkVGSVhfT1JJR0lOICgxPDw0KQorI2RlZmluZSBQQVRIU1BFQ19LRUVQX09SREVSICgxPDw1KQorLyoKKyAqIEZvciB0aGUgY2FsbGVycyB0aGF0IGp1c3QgbmVlZCBwdXJlIHBhdGhzIGZyb20gc29tZXdoZXJlIGVsc2UsIG5vdAorICogZnJvbSBjb21tYW5kIGxpbmUuIEdsb2JhbCAtLSotcGF0aHNwZWNzIG9wdGlvbnMgYXJlIGlnbm9yZWQuIE5vCisgKiBtYWdpYyBpcyBwYXJzZWQgaW4gZWFjaCBwYXRoc3BlYyBlaXRoZXIuIElmIFBBVEhTUEVDX0xJVEVSQUwgaXMKKyAqIGFsbG93ZWQsIHRoZW4gaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCBmb3IgZXZlcnkgcGF0aHNwZWMuCisgKi8KKyNkZWZpbmUgUEFUSFNQRUNfTElURVJBTF9QQVRIICgxPDw2KQorCisvKioKKyAqIEdpdmVuIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYW5kIGEgcHJlZml4LCBjb252ZXJ0IHRoZSBpbnB1dCB0bworICogcGF0aHNwZWMuIGRpZSgpIGlmIGFueSBtYWdpYyBpbiBtYWdpY19tYXNrIGlzIHVzZWQuCisgKgorICogQW55IGFyZ3VtZW50cyB1c2VkIGFyZSBjb3BpZWQuIEl0IGlzIHNhZmUgZm9yIHRoZSBjYWxsZXIgdG8gbW9kaWZ5CisgKiBvciBmcmVlICdwcmVmaXgnIGFuZCAnYXJncycgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIC0gbWFnaWNfbWFzayBzcGVjaWZpZXMgd2hhdCBmZWF0dXJlcyB0aGF0IGFyZSBOT1Qgc3VwcG9ydGVkIGJ5IHRoZSBmb2xsb3dpbmcKKyAqIGNvZGUuIElmIGEgdXNlciBhdHRlbXB0cyB0byB1c2Ugc3VjaCBhIGZlYXR1cmUsIHBhcnNlX3BhdGhzcGVjKCkgY2FuIHJlamVjdAorICogaXQgZWFybHkuCisgKgorICogLSBmbGFncyBzcGVjaWZpZXMgb3RoZXIgdGhpbmdzIHRoYXQgdGhlIGNhbGxlciB3YW50cyBwYXJzZV9wYXRoc3BlYyB0bworICogcGVyZm9ybS4KKyAqCisgKiAtIHByZWZpeCBhbmQgYXJncyBjb21lIGZyb20gY21kXyogZnVuY3Rpb25zCisgKgorICogcGFyc2VfcGF0aHNwZWMoKSBoZWxwcyBjYXRjaCB1bnN1cHBvcnRlZCBmZWF0dXJlcyBhbmQgcmVqZWN0IHRoZW0gcG9saXRlbHkuCisgKiBBdCBhIGxvd2VyIGxldmVsLCBkaWZmZXJlbnQgcGF0aHNwZWMtcmVsYXRlZCBmdW5jdGlvbnMgbWF5IG5vdCBzdXBwb3J0IHRoZQorICogc2FtZSBzZXQgb2YgZmVhdHVyZXMuIFN1Y2ggcGF0aHNwZWMtc2Vuc2l0aXZlIGZ1bmN0aW9ucyBhcmUgZ3VhcmRlZCB3aXRoCisgKiBHVUFSRF9QQVRIU1BFQygpLCB3aGljaCB3aWxsIGRpZSBpbiBhbiB1bmZyaWVuZGx5IHdheSB3aGVuIGFuIHVuc3VwcG9ydGVkCisgKiBmZWF0dXJlIGlzIHJlcXVlc3RlZC4KKyAqCisgKiBUaGUgY29tbWFuZCBkZXNpZ25lcnMgYXJlIHN1cHBvc2VkIHRvIG1ha2Ugc3VyZSB0aGF0IEdVQVJEX1BBVEhTUEVDKCkgbmV2ZXIKKyAqIGRpZXMuIFRoZXkgaGF2ZSB0byBtYWtlIHN1cmUgYWxsIHVuc3VwcG9ydGVkIGZlYXR1cmVzIGFyZSBjYXVnaHQgYnkKKyAqIHBhcnNlX3BhdGhzcGVjKCksIG5vdCBieSBHVUFSRF9QQVRIU1BFQy4gZ3JlcHBpbmcgR1VBUkRfUEFUSFNQRUMoKSBzaG91bGQKKyAqIGdpdmUgdGhlIGRlc2lnbmVycyBhbGwgcGF0aHNwZWMtc2Vuc2l0aXZlIGNvZGVwYXRocyBhbmQgd2hhdCBmZWF0dXJlcyB0aGV5CisgKiBzdXBwb3J0LgorICoKKyAqIEEgc2ltaWxhciBwcm9jZXNzIGlzIGFwcGxpZWQgd2hlbiBhIG5ldyBwYXRoc3BlYyBtYWdpYyBpcyBhZGRlZC4gVGhlIGRlc2lnbmVyCisgKiBsaWZ0cyB0aGUgR1VBUkRfUEFUSFNQRUMgcmVzdHJpY3Rpb24gaW4gdGhlIGZ1bmN0aW9ucyB0aGF0IHN1cHBvcnQgdGhlIG5ldworICogbWFnaWMuIEF0IHRoZSBzYW1lIHRpbWUgKHMpaGUgaGFzIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBmZWF0dXJlIHdpbGwgYmUKKyAqIGNhdWdodCBhdCBwYXJzZV9wYXRoc3BlYygpIGluIGNvbW1hbmRzIHRoYXQgY2Fubm90IGhhbmRsZSB0aGUgbmV3IG1hZ2ljIGluCisgKiBzb21lIGNhc2VzLiBncmVwcGluZyBwYXJzZV9wYXRoc3BlYygpIHNob3VsZCBoZWxwLgorICovCit2b2lkIHBhcnNlX3BhdGhzcGVjKHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCSAgICB1bnNpZ25lZCBtYWdpY19tYXNrLAorCQkgICAgdW5zaWduZWQgZmxhZ3MsCisJCSAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgICBjb25zdCBjaGFyICoqYXJncyk7CisvKgorICogU2FtZSBhcyBwYXJzZV9wYXRoc3BlYygpIGJ1dCB1c2VzIGZpbGUgYXMgaW5wdXQuCisgKiBXaGVuICdmaWxlJyBpcyBleGFjdGx5ICItIiBpdCB1c2VzICdzdGRpbicgaW5zdGVhZC4KKyAqLwordm9pZCBwYXJzZV9wYXRoc3BlY19maWxlKHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkgdW5zaWduZWQgbWFnaWNfbWFzaywKKwkJCSB1bnNpZ25lZCBmbGFncywKKwkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgY29uc3QgY2hhciAqZmlsZSwKKwkJCSBpbnQgbnVsX3Rlcm1fbGluZSk7CisKK3ZvaWQgY29weV9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKmRzdCwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpzcmMpOwordm9pZCBjbGVhcl9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKik7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBzX3N0cm5jbXAoY29uc3Qgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0sCisJCQkgICAgIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pCit7CisJaWYgKGl0ZW0tPm1hZ2ljICYgUEFUSFNQRUNfSUNBU0UpCisJCXJldHVybiBzdHJuY2FzZWNtcChzMSwgczIsIG4pOworCWVsc2UKKwkJcmV0dXJuIHN0cm5jbXAoczEsIHMyLCBuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHNfc3RyY21wKGNvbnN0IHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtLAorCQkJICAgIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKK3sKKwlpZiAoaXRlbS0+bWFnaWMgJiBQQVRIU1BFQ19JQ0FTRSkKKwkJcmV0dXJuIHN0cmNhc2VjbXAoczEsIHMyKTsKKwllbHNlCisJCXJldHVybiBzdHJjbXAoczEsIHMyKTsKK30KKwordm9pZCBhZGRfcGF0aHNwZWNfbWF0Y2hlc19hZ2FpbnN0X2luZGV4KGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkJCWNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQljaGFyICpzZWVuKTsKK2NoYXIgKmZpbmRfcGF0aHNwZWNzX21hdGNoaW5nX2FnYWluc3RfaW5kZXgoY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKK2ludCBtYXRjaF9wYXRoc3BlY19hdHRycyhjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCSBjb25zdCBzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqaXRlbSk7CisKKyNlbmRpZiAvKiBQQVRIU1BFQ19IICovCmRpZmYgLS1naXQgYS9wZXJsLy5naXRpZ25vcmUgYi9wZXJsLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRjMDQ4YQotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACisvYnVpbGQvCmRpZmYgLS1naXQgYS9wZXJsL0Zyb21DUEFOLy5naXRhdHRyaWJ1dGVzIGIvcGVybC9Gcm9tQ1BBTi8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjY0ZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvcGVybC9Gcm9tQ1BBTi8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisvRXJyb3IucG0gd2hpdGVzcGFjZT0tYmxhbmstYXQtZW9mCmRpZmYgLS1naXQgYS9wZXJsL0Zyb21DUEFOL0Vycm9yLnBtIGIvcGVybC9Gcm9tQ1BBTi9FcnJvci5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjk1ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9Gcm9tQ1BBTi9FcnJvci5wbQpAQCAtMCwwICsxLDEwNDAgQEAKKyMgRXJyb3IucG0KKyMKKyMgQ29weXJpZ2h0IChjKSAxOTk3LTggR3JhaGFtIEJhcnIgPGdiYXJyQHRpLmNvbT4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwgaXRzZWxmLgorIworIyBCYXNlZCBvbiBteSBvcmlnaW5hbCBFcnJvci5wbSwgYW5kIEV4Y2VwdGlvbnMucG0gYnkgUGV0ZXIgU2VpYmVsCisjIDxwZXRlckB3ZWJsb2dpYy5jb20+IGFuZCBhZGFwdGVkIGJ5IEplc3NlIEdsaWNrIDxqZ2xpY2tAc2lnLmJzaC5jb20+LgorIworIyBidXQgbW9kaWZpZWQgKioqc2lnbmlmaWNhbnRseSoqKgorCitwYWNrYWdlIEVycm9yOworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgdmFycyBxdygkVkVSU0lPTik7Cit1c2UgNS4wMDQ7CisKKyRWRVJTSU9OID0gIjAuMTcwMjUiOworCit1c2Ugb3ZlcmxvYWQgKAorCSciIicJICAgPT4JJ3N0cmluZ2lmeScsCisJJzArJwkgICA9PgkndmFsdWUnLAorCSdib29sJyAgICAgPT4Jc3ViIHsgcmV0dXJuIDE7IH0sCisJJ2ZhbGxiYWNrJyA9PgkxCispOworCiskRXJyb3I6OkRlcHRoID0gMDsJIyBEZXB0aCB0byBwYXNzIHRvIGNhbGxlcigpCiskRXJyb3I6OkRlYnVnID0gMDsJIyBHZW5lcmF0ZSB2ZXJib3NlIHN0YWNrIHRyYWNlcworQEVycm9yOjpTVEFDSyA9ICgpOwkjIENsYXVzZSBzdGFjayBmb3IgdHJ5CiskRXJyb3I6OlRIUk9XTiA9IHVuZGVmOwkjIGxhc3QgZXJyb3IgdGhyb3duLCBhIHdvcmthcm91bmQgdW50aWwgZGllICRyZWYgd29ya3MKKworbXkgJExBU1Q7CQkjIExhc3QgZXJyb3IgY3JlYXRlZAorbXkgJUVSUk9SOwkJIyBMYXN0IGVycm9yIGFzc29jaWF0ZWQgd2l0aCBwYWNrYWdlCisKK3N1YiBfdGhyb3dfRXJyb3JfU2ltcGxlCit7CisgICAgbXkgJGFyZ3MgPSBzaGlmdDsKKyAgICByZXR1cm4gRXJyb3I6OlNpbXBsZS0+bmV3KCRhcmdzLT57J3RleHQnfSk7Cit9CisKKyRFcnJvcjo6T2JqZWN0aWZ5Q2FsbGJhY2sgPSBcJl90aHJvd19FcnJvcl9TaW1wbGU7CisKKworIyBFeHBvcnRlZCBzdWJzIGFyZSBkZWZpbmVkIGluIEVycm9yOjpzdWJzCisKK3VzZSBTY2FsYXI6OlV0aWwgKCk7CisKK3N1YiBpbXBvcnQgeworICAgIHNoaWZ0OworICAgIG15IEB0YWdzID0gQF87CisgICAgbG9jYWwgJEV4cG9ydGVyOjpFeHBvcnRMZXZlbCA9ICRFeHBvcnRlcjo6RXhwb3J0TGV2ZWwgKyAxOworCisgICAgQHRhZ3MgPSBncmVwIHsKKyAgICAgICBpZiggJF8gZXEgJzp3YXJuZGllJyApIHsKKyAgICAgICAgICBFcnJvcjo6V2FybkRpZS0+aW1wb3J0KCk7CisgICAgICAgICAgMDsKKyAgICAgICB9CisgICAgICAgZWxzZSB7CisgICAgICAgICAgMTsKKyAgICAgICB9CisgICAgfSBAdGFnczsKKworICAgIEVycm9yOjpzdWJzLT5pbXBvcnQoQHRhZ3MpOworfQorCisjIEkgcmVhbGx5IHdhbnQgdG8gdXNlIGxhc3QgZm9yIHRoZSBuYW1lIG9mIHRoaXMgbWV0aG9kLCBidXQgaXQgaXMgYSBrZXl3b3JkCisjIHdoaWNoIHByZXZlbnQgdGhlIHN5bnRheCAgbGFzdCBFcnJvcgorCitzdWIgcHJpb3IgeworICAgIHNoaWZ0OyAjIGlnbm9yZQorCisgICAgcmV0dXJuICRMQVNUIHVubGVzcyBAXzsKKworICAgIG15ICRwa2cgPSBzaGlmdDsKKyAgICByZXR1cm4gZXhpc3RzICRFUlJPUnskcGtnfSA/ICRFUlJPUnskcGtnfSA6IHVuZGVmCisJdW5sZXNzIHJlZigkcGtnKTsKKworICAgIG15ICRvYmogPSAkcGtnOworICAgIG15ICRlcnIgPSB1bmRlZjsKKyAgICBpZigkb2JqLT5pc2EoJ0hBU0gnKSkgeworCSRlcnIgPSAkb2JqLT57J19fRXJyb3JfXyd9CisJICAgIGlmIGV4aXN0cyAkb2JqLT57J19fRXJyb3JfXyd9OworICAgIH0KKyAgICBlbHNpZigkb2JqLT5pc2EoJ0dMT0InKSkgeworCSRlcnIgPSAkeyokb2JqfXsnX19FcnJvcl9fJ30KKwkgICAgaWYgZXhpc3RzICR7KiRvYmp9eydfX0Vycm9yX18nfTsKKyAgICB9CisKKyAgICAkZXJyOworfQorCitzdWIgZmx1c2ggeworICAgIHNoaWZ0OyAjaWdub3JlCisKKyAgICB1bmxlc3MgKEBfKSB7CisgICAgICAgJExBU1QgPSB1bmRlZjsKKyAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbXkgJHBrZyA9IHNoaWZ0OworICAgIHJldHVybiB1bmxlc3MgcmVmKCRwa2cpOworCisgICAgdW5kZWYgJEVSUk9SeyRwa2d9IGlmIGRlZmluZWQgJEVSUk9SeyRwa2d9OworfQorCisjIFJldHVybiBhcyBtdWNoIGluZm9ybWF0aW9uIGFzIHBvc3NpYmxlIGFib3V0IHdoZXJlIHRoZSBlcnJvcgorIyBoYXBwZW5lZC4gVGhlIC1zdGFja3RyYWNlIGVsZW1lbnQgb25seSBleGlzdHMgaWYgJEVycm9yOjpERUJVRworIyB3YXMgc2V0IHdoZW4gdGhlIGVycm9yIHdhcyBjcmVhdGVkCisKK3N1YiBzdGFja3RyYWNlIHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworCisgICAgcmV0dXJuICRzZWxmLT57Jy1zdGFja3RyYWNlJ30KKwlpZiBleGlzdHMgJHNlbGYtPnsnLXN0YWNrdHJhY2UnfTsKKworICAgIG15ICR0ZXh0ID0gZXhpc3RzICRzZWxmLT57Jy10ZXh0J30gPyAkc2VsZi0+eyctdGV4dCd9IDogIkRpZWQiOworCisgICAgJHRleHQgLj0gc3ByaW50ZigiIGF0ICVzIGxpbmUgJWQuXG4iLCAkc2VsZi0+ZmlsZSwgJHNlbGYtPmxpbmUpCisJdW5sZXNzKCR0ZXh0ID1+IC9cbiQvcyk7CisKKyAgICAkdGV4dDsKK30KKworCitzdWIgYXNzb2NpYXRlIHsKKyAgICBteSAkZXJyID0gc2hpZnQ7CisgICAgbXkgJG9iaiA9IHNoaWZ0OworCisgICAgcmV0dXJuIHVubGVzcyByZWYoJG9iaik7CisKKyAgICBpZigkb2JqLT5pc2EoJ0hBU0gnKSkgeworCSRvYmotPnsnX19FcnJvcl9fJ30gPSAkZXJyOworICAgIH0KKyAgICBlbHNpZigkb2JqLT5pc2EoJ0dMT0InKSkgeworCSR7KiRvYmp9eydfX0Vycm9yX18nfSA9ICRlcnI7CisgICAgfQorICAgICRvYmogPSByZWYoJG9iaik7CisgICAgJEVSUk9SeyByZWYoJG9iaikgfSA9ICRlcnI7CisKKyAgICByZXR1cm47Cit9CisKKworc3ViIG5ldyB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSgkcGtnLCRmaWxlLCRsaW5lKSA9IGNhbGxlcigkRXJyb3I6OkRlcHRoKTsKKworICAgIG15ICRlcnIgPSBibGVzcyB7CisJJy1wYWNrYWdlJyA9PiAkcGtnLAorCSctZmlsZScgICAgPT4gJGZpbGUsCisJJy1saW5lJyAgICA9PiAkbGluZSwKKwlAXworICAgIH0sICRzZWxmOworCisgICAgJGVyci0+YXNzb2NpYXRlKCRlcnItPnsnLW9iamVjdCd9KQorCWlmKGV4aXN0cyAkZXJyLT57Jy1vYmplY3QnfSk7CisKKyAgICAjIFRvIGFsd2F5cyBjcmVhdGUgYSBzdGFja3RyYWNlIHdvdWxkIGJlIHZlcnkgaW5lZmZpY2llbnQsIHNvCisgICAgIyB3ZSBvbmx5IGRvIGl0IGlmICRFcnJvcjo6RGVidWcgaXMgc2V0CisKKyAgICBpZigkRXJyb3I6OkRlYnVnKSB7CisJcmVxdWlyZSBDYXJwOworCWxvY2FsICRDYXJwOjpDYXJwTGV2ZWwgPSAkRXJyb3I6OkRlcHRoOworCW15ICR0ZXh0ID0gZGVmaW5lZCgkZXJyLT57Jy10ZXh0J30pID8gJGVyci0+eyctdGV4dCd9IDogIkVycm9yIjsKKwlteSAkdHJhY2UgPSBDYXJwOjpsb25nbWVzcygkdGV4dCk7CisJIyBSZW1vdmUgdHJ5IGNhbGxzIGZyb20gdGhlIHRyYWNlCisJJHRyYWNlID1+IHMvKFxuXHMrXFMrX19BTk9OX19bXlxuXSspP1xuXHMrZXZhbFteXG5dK1xuXHMrRXJyb3I6OnN1YnM6OnRyeVteXG5dKyg/PVxuKS8vc29nOworCSR0cmFjZSA9fiBzLyhcblxzK1xTK19fQU5PTl9fW15cbl0rKT9cblxzK2V2YWxbXlxuXStcblxzK0Vycm9yOjpzdWJzOjpydW5fY2xhdXNlc1teXG5dK1xuXHMrRXJyb3I6OnN1YnM6OnRyeVteXG5dKyg/PVxuKS8vc29nOworCSRlcnItPnsnLXN0YWNrdHJhY2UnfSA9ICR0cmFjZQorICAgIH0KKworICAgICRAID0gJExBU1QgPSAkRVJST1J7JHBrZ30gPSAkZXJyOworfQorCisjIFRocm93IGFuIGVycm9yLiB0aGlzIGNvbnRhaW5zIHNvbWUgdmVyeSBnb3J5IGNvZGUuCisKK3N1YiB0aHJvdyB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBsb2NhbCAkRXJyb3I6OkRlcHRoID0gJEVycm9yOjpEZXB0aCArIDE7CisKKyAgICAjIGlmIHdlIGFyZSBub3QgcmV0aHJvdy1pbmcgdGhlbiBjcmVhdGUgdGhlIG9iamVjdCB0byB0aHJvdworICAgICRzZWxmID0gJHNlbGYtPm5ldyhAXykgdW5sZXNzIHJlZigkc2VsZik7CisKKyAgICBkaWUgJEVycm9yOjpUSFJPV04gPSAkc2VsZjsKK30KKworIyBzeW50YWN0aWMgc3VnYXIgZm9yCisjCisjICAgIGRpZSB3aXRoIEVycm9yKCAuLi4gKTsKKworc3ViIHdpdGggeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbG9jYWwgJEVycm9yOjpEZXB0aCA9ICRFcnJvcjo6RGVwdGggKyAxOworCisgICAgJHNlbGYtPm5ldyhAXyk7Cit9CisKKyMgc3ludGFjdGljIHN1Z2FyIGZvcgorIworIyAgICByZWNvcmQgRXJyb3IoIC4uLiApIGFuZCByZXR1cm47CisKK3N1YiByZWNvcmQgeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbG9jYWwgJEVycm9yOjpEZXB0aCA9ICRFcnJvcjo6RGVwdGggKyAxOworCisgICAgJHNlbGYtPm5ldyhAXyk7Cit9CisKKyMgY2F0Y2ggY2xhdXNlIGZvcgorIworIyB0cnkgeyAuLi4gfSBjYXRjaCBDTEFTUyB3aXRoIHsgLi4uIH0KKworc3ViIGNhdGNoIHsKKyAgICBteSAkcGtnID0gc2hpZnQ7CisgICAgbXkgJGNvZGUgPSBzaGlmdDsKKyAgICBteSAkY2xhdXNlcyA9IHNoaWZ0IHx8IHt9OworICAgIG15ICRjYXRjaCA9ICRjbGF1c2VzLT57J2NhdGNoJ30gfHw9IFtdOworCisgICAgdW5zaGlmdCBAJGNhdGNoLCAgJHBrZywgJGNvZGU7CisKKyAgICAkY2xhdXNlczsKK30KKworIyBPYmplY3QgcXVlcnkgbWV0aG9kcworCitzdWIgb2JqZWN0IHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIGV4aXN0cyAkc2VsZi0+eyctb2JqZWN0J30gPyAkc2VsZi0+eyctb2JqZWN0J30gOiB1bmRlZjsKK30KKworc3ViIGZpbGUgeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgZXhpc3RzICRzZWxmLT57Jy1maWxlJ30gPyAkc2VsZi0+eyctZmlsZSd9IDogdW5kZWY7Cit9CisKK3N1YiBsaW5lIHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIGV4aXN0cyAkc2VsZi0+eyctbGluZSd9ID8gJHNlbGYtPnsnLWxpbmUnfSA6IHVuZGVmOworfQorCitzdWIgdGV4dCB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBleGlzdHMgJHNlbGYtPnsnLXRleHQnfSA/ICRzZWxmLT57Jy10ZXh0J30gOiB1bmRlZjsKK30KKworIyBvdmVybG9hZCBtZXRob2RzCisKK3N1YiBzdHJpbmdpZnkgeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgZGVmaW5lZCAkc2VsZi0+eyctdGV4dCd9ID8gJHNlbGYtPnsnLXRleHQnfSA6ICJEaWVkIjsKK30KKworc3ViIHZhbHVlIHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIGV4aXN0cyAkc2VsZi0+eyctdmFsdWUnfSA/ICRzZWxmLT57Jy12YWx1ZSd9IDogdW5kZWY7Cit9CisKK3BhY2thZ2UgRXJyb3I6OlNpbXBsZTsKKwordXNlIHZhcnMgcXcoJFZFUlNJT04pOworCiskVkVSU0lPTiA9ICIwLjE3MDI1IjsKKworQEVycm9yOjpTaW1wbGU6OklTQSA9IHF3KEVycm9yKTsKKworc3ViIG5ldyB7CisgICAgbXkgJHNlbGYgID0gc2hpZnQ7CisgICAgbXkgJHRleHQgID0gIiIgLiBzaGlmdDsKKyAgICBteSAkdmFsdWUgPSBzaGlmdDsKKyAgICBteShAYXJncykgPSAoKTsKKworICAgIGxvY2FsICRFcnJvcjo6RGVwdGggPSAkRXJyb3I6OkRlcHRoICsgMTsKKworICAgIEBhcmdzID0gKCAtZmlsZSA9PiAkMSwgLWxpbmUgPT4gJDIpCisJaWYoJHRleHQgPX4gcy9ccythdFxzKyhcUyspXHMrbGluZVxzKyhcZCspKD86LFxzKjxbXj5dKj5ccytsaW5lXHMrXGQrKT9cLj9cbj8kLy9zKTsKKyAgICBwdXNoKEBhcmdzLCAnLXZhbHVlJywgMCArICR2YWx1ZSkKKwlpZiBkZWZpbmVkKCR2YWx1ZSk7CisKKyAgICAkc2VsZi0+U1VQRVI6Om5ldygtdGV4dCA9PiAkdGV4dCwgQGFyZ3MpOworfQorCitzdWIgc3RyaW5naWZ5IHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICR0ZXh0ID0gJHNlbGYtPlNVUEVSOjpzdHJpbmdpZnk7CisgICAgJHRleHQgLj0gc3ByaW50ZigiIGF0ICVzIGxpbmUgJWQuXG4iLCAkc2VsZi0+ZmlsZSwgJHNlbGYtPmxpbmUpCisJdW5sZXNzKCR0ZXh0ID1+IC9cbiQvcyk7CisgICAgJHRleHQ7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEluc3BpcmVkIGJ5IGNvZGUgZnJvbSBKZXNzZSBHbGljayA8amdsaWNrQHNpZy5ic2guY29tPiBhbmQKKyMgUGV0ZXIgU2VpYmVsIDxwZXRlckB3ZWJsb2dpYy5jb20+CisKK3BhY2thZ2UgRXJyb3I6OnN1YnM7CisKK3VzZSBFeHBvcnRlciAoKTsKK3VzZSB2YXJzIHF3KEBFWFBPUlRfT0sgQElTQSAlRVhQT1JUX1RBR1MpOworCitARVhQT1JUX09LICAgPSBxdyh0cnkgd2l0aCBmaW5hbGx5IGV4Y2VwdCBvdGhlcndpc2UpOworJUVYUE9SVF9UQUdTID0gKHRyeSA9PiBcQEVYUE9SVF9PSyk7CisKK0BJU0EgPSBxdyhFeHBvcnRlcik7CisKK3N1YiBydW5fY2xhdXNlcyAoJCQkXEApIHsKKyAgICBteSgkY2xhdXNlcywkZXJyLCR3YW50YXJyYXksJHJlc3VsdCkgPSBAXzsKKyAgICBteSAkY29kZSA9IHVuZGVmOworCisgICAgJGVyciA9ICRFcnJvcjo6T2JqZWN0aWZ5Q2FsbGJhY2stPih7J3RleHQnID0+JGVycn0pIHVubGVzcyByZWYoJGVycik7CisKKyAgICBDQVRDSDogeworCisJIyBjYXRjaAorCW15ICRjYXRjaDsKKwlpZihkZWZpbmVkKCRjYXRjaCA9ICRjbGF1c2VzLT57J2NhdGNoJ30pKSB7CisJICAgIG15ICRpID0gMDsKKworCSAgICBDQVRDSExPT1A6CisJICAgIGZvciggOyAkaSA8IEAkY2F0Y2ggOyAkaSArPSAyKSB7CisJCW15ICRwa2cgPSAkY2F0Y2gtPlskaV07CisJCXVubGVzcyhkZWZpbmVkICRwa2cpIHsKKwkJICAgICNleGNlcHQKKwkJICAgIHNwbGljZShAJGNhdGNoLCRpLDIsJGNhdGNoLT5bJGkrMV0tPigkZXJyKSk7CisJCSAgICAkaSAtPSAyOworCQkgICAgbmV4dCBDQVRDSExPT1A7CisJCX0KKwkJZWxzaWYoU2NhbGFyOjpVdGlsOjpibGVzc2VkKCRlcnIpICYmICRlcnItPmlzYSgkcGtnKSkgeworCQkgICAgJGNvZGUgPSAkY2F0Y2gtPlskaSsxXTsKKwkJICAgIHdoaWxlKDEpIHsKKwkJCW15ICRtb3JlID0gMDsKKwkJCWxvY2FsKCRFcnJvcjo6VEhST1dOLCAkQCk7CisJCQlteSAkb2sgPSBldmFsIHsKKwkJCSAgICAkQCA9ICRlcnI7CisJCQkgICAgaWYoJHdhbnRhcnJheSkgeworCQkJCUB7JHJlc3VsdH0gPSAkY29kZS0+KCRlcnIsXCRtb3JlKTsKKwkJCSAgICB9CisJCQkgICAgZWxzaWYoZGVmaW5lZCgkd2FudGFycmF5KSkgeworCQkJICAgICAgICBAeyRyZXN1bHR9ID0gKCk7CisJCQkJJHJlc3VsdC0+WzBdID0gJGNvZGUtPigkZXJyLFwkbW9yZSk7CisJCQkgICAgfQorCQkJICAgIGVsc2UgeworCQkJCSRjb2RlLT4oJGVycixcJG1vcmUpOworCQkJICAgIH0KKwkJCSAgICAxOworCQkJfTsKKwkJCWlmKCAkb2sgKSB7CisJCQkgICAgbmV4dCBDQVRDSExPT1AgaWYgJG1vcmU7CisJCQkgICAgdW5kZWYgJGVycjsKKwkJCX0KKwkJCWVsc2UgeworCQkJICAgICRlcnIgPSAkQCB8fCAkRXJyb3I6OlRIUk9XTjsKKwkJCQkkZXJyID0gJEVycm9yOjpPYmplY3RpZnlDYWxsYmFjay0+KHsndGV4dCcgPT4kZXJyfSkKKwkJCQkJdW5sZXNzIHJlZigkZXJyKTsKKwkJCX0KKwkJCWxhc3QgQ0FUQ0g7CisJCSAgICB9OworCQl9CisJICAgIH0KKwl9CisKKwkjIG90aGVyd2lzZQorCW15ICRvd2lzZTsKKwlpZihkZWZpbmVkKCRvd2lzZSA9ICRjbGF1c2VzLT57J290aGVyd2lzZSd9KSkgeworCSAgICBteSAkY29kZSA9ICRjbGF1c2VzLT57J290aGVyd2lzZSd9OworCSAgICBteSAkbW9yZSA9IDA7CisgICAgICAgIGxvY2FsKCRFcnJvcjo6VEhST1dOLCAkQCk7CisJICAgIG15ICRvayA9IGV2YWwgeworCQkkQCA9ICRlcnI7CisJCWlmKCR3YW50YXJyYXkpIHsKKwkJICAgIEB7JHJlc3VsdH0gPSAkY29kZS0+KCRlcnIsXCRtb3JlKTsKKwkJfQorCQllbHNpZihkZWZpbmVkKCR3YW50YXJyYXkpKSB7CisJCSAgICBAeyRyZXN1bHR9ID0gKCk7CisJCSAgICAkcmVzdWx0LT5bMF0gPSAkY29kZS0+KCRlcnIsXCRtb3JlKTsKKwkJfQorCQllbHNlIHsKKwkJICAgICRjb2RlLT4oJGVycixcJG1vcmUpOworCQl9CisJCTE7CisJICAgIH07CisJICAgIGlmKCAkb2sgKSB7CisJCXVuZGVmICRlcnI7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCSRlcnIgPSAkQCB8fCAkRXJyb3I6OlRIUk9XTjsKKworCQkkZXJyID0gJEVycm9yOjpPYmplY3RpZnlDYWxsYmFjay0+KHsndGV4dCcgPT4kZXJyfSkKKwkJCXVubGVzcyByZWYoJGVycik7CisJICAgIH0KKwl9CisgICAgfQorICAgICRlcnI7Cit9CisKK3N1YiB0cnkgKCY7JCkgeworICAgIG15ICR0cnkgPSBzaGlmdDsKKyAgICBteSAkY2xhdXNlcyA9IEBfID8gc2hpZnQgOiB7fTsKKyAgICBteSAkb2sgPSAwOworICAgIG15ICRlcnIgPSB1bmRlZjsKKyAgICBteSBAcmVzdWx0ID0gKCk7CisKKyAgICB1bnNoaWZ0IEBFcnJvcjo6U1RBQ0ssICRjbGF1c2VzOworCisgICAgbXkgJHdhbnRhcnJheSA9IHdhbnRhcnJheSgpOworCisgICAgZG8geworCWxvY2FsICRFcnJvcjo6VEhST1dOID0gdW5kZWY7CisJbG9jYWwgJEAgPSB1bmRlZjsKKworCSRvayA9IGV2YWwgeworCSAgICBpZigkd2FudGFycmF5KSB7CisJCUByZXN1bHQgPSAkdHJ5LT4oKTsKKwkgICAgfQorCSAgICBlbHNpZihkZWZpbmVkICR3YW50YXJyYXkpIHsKKwkJJHJlc3VsdFswXSA9ICR0cnktPigpOworCSAgICB9CisJICAgIGVsc2UgeworCQkkdHJ5LT4oKTsKKwkgICAgfQorCSAgICAxOworCX07CisKKwkkZXJyID0gJEAgfHwgJEVycm9yOjpUSFJPV04KKwkgICAgdW5sZXNzICRvazsKKyAgICB9OworCisgICAgc2hpZnQgQEVycm9yOjpTVEFDSzsKKworICAgICRlcnIgPSBydW5fY2xhdXNlcygkY2xhdXNlcywkZXJyLHdhbnRhcnJheSxAcmVzdWx0KQorICAgIHVubGVzcygkb2spOworCisgICAgJGNsYXVzZXMtPnsnZmluYWxseSd9LT4oKQorCWlmKGRlZmluZWQoJGNsYXVzZXMtPnsnZmluYWxseSd9KSk7CisKKyAgICBpZiAoZGVmaW5lZCgkZXJyKSkKKyAgICB7CisgICAgICAgIGlmIChTY2FsYXI6OlV0aWw6OmJsZXNzZWQoJGVycikgJiYgJGVyci0+Y2FuKCd0aHJvdycpKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyAkZXJyOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGllICRlcnI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3YW50YXJyYXkgPyBAcmVzdWx0IDogJHJlc3VsdFswXTsKK30KKworIyBFYWNoIGNsYXVzZSBhZGRzIGEgc3ViIHRvIHRoZSBsaXN0IG9mIGNsYXVzZXMuIFRoZSBmaW5hbGx5IGNsYXVzZSBpcworIyBhbHdheXMgdGhlIGxhc3QsIGFuZCB0aGUgb3RoZXJ3aXNlIGNsYXVzZSBpcyBhbHdheXMgYWRkZWQganVzdCBiZWZvcmUKKyMgdGhlIGZpbmFsbHkgY2xhdXNlLgorIworIyBBbGwgY2xhdXNlcywgZXhjZXB0IHRoZSBmaW5hbGx5IGNsYXVzZSwgYWRkIGEgc3ViIHdoaWNoIHRha2VzIG9uZSBhcmd1bWVudAorIyB0aGlzIGFyZ3VtZW50IHdpbGwgYmUgdGhlIGVycm9yIGJlaW5nIHRocm93bi4gVGhlIHN1YiB3aWxsIHJldHVybiBhIGNvZGUgcmVmCisjIGlmIHRoYXQgY2xhdXNlIGNhbiBoYW5kbGUgdGhhdCBlcnJvciwgb3RoZXJ3aXNlIHVuZGVmIGlzIHJldHVybmVkLgorIworIyBUaGUgb3RoZXJ3aXNlIGNsYXVzZSBhZGRzIGEgc3ViIHdoaWNoIHVuY29uZGl0aW9uYWxseSByZXR1cm5zIHRoZSB1c2VycworIyBjb2RlIHJlZmVyZW5jZSwgdGhpcyBpcyB3aHkgaXQgaXMgZm9yY2VkIHRvIGJlIGxhc3QuCisjCisjIFRoZSBjYXRjaCBjbGF1c2UgaXMgZGVmaW5lZCBpbiBFcnJvci5wbSwgYXMgdGhlIHN5bnRheCBjYXVzZXMgaXQgdG8KKyMgYmUgY2FsbGVkIGFzIGEgbWV0aG9kCisKK3N1YiB3aXRoICgmOyQpIHsKKyAgICBAXworfQorCitzdWIgZmluYWxseSAoJikgeworICAgIG15ICRjb2RlID0gc2hpZnQ7CisgICAgbXkgJGNsYXVzZXMgPSB7ICdmaW5hbGx5JyA9PiAkY29kZSB9OworICAgICRjbGF1c2VzOworfQorCisjIFRoZSBleGNlcHQgY2xhdXNlIGlzIGEgYmxvY2sgd2hpY2ggcmV0dXJucyBhIGhhc2hyZWYgb3IgYSBsaXN0IG9mCisjIGtleS12YWx1ZSBwYWlycywgd2hlcmUgdGhlIGtleXMgYXJlIHRoZSBjbGFzc2VzIGFuZCB0aGUgdmFsdWVzIGFyZSBzdWJzLgorCitzdWIgZXhjZXB0ICgmOyQpIHsKKyAgICBteSAkY29kZSA9IHNoaWZ0OworICAgIG15ICRjbGF1c2VzID0gc2hpZnQgfHwge307CisgICAgbXkgJGNhdGNoID0gJGNsYXVzZXMtPnsnY2F0Y2gnfSB8fD0gW107CisKKyAgICBteSAkc3ViID0gc3ViIHsKKwlteSAkcmVmOworCW15KEBhcnJheSkgPSAkY29kZS0+KCRfWzBdKTsKKwlpZihAYXJyYXkgPT0gMSAmJiByZWYoJGFycmF5WzBdKSkgeworCSAgICAkcmVmID0gJGFycmF5WzBdOworCSAgICAkcmVmID0gWyAlJHJlZiBdCisJCWlmKFVOSVZFUlNBTDo6aXNhKCRyZWYsJ0hBU0gnKSk7CisJfQorCWVsc2UgeworCSAgICAkcmVmID0gXEBhcnJheTsKKwl9CisJQCRyZWYKKyAgICB9OworCisgICAgdW5zaGlmdCBAeyRjYXRjaH0sIHVuZGVmLCAkc3ViOworCisgICAgJGNsYXVzZXM7Cit9CisKK3N1YiBvdGhlcndpc2UgKCY7JCkgeworICAgIG15ICRjb2RlID0gc2hpZnQ7CisgICAgbXkgJGNsYXVzZXMgPSBzaGlmdCB8fCB7fTsKKworICAgIGlmKGV4aXN0cyAkY2xhdXNlcy0+eydvdGhlcndpc2UnfSkgeworCXJlcXVpcmUgQ2FycDsKKwlDYXJwOjpjcm9haygiTXVsdGlwbGUgb3RoZXJ3aXNlIGNsYXVzZXMiKTsKKyAgICB9CisKKyAgICAkY2xhdXNlcy0+eydvdGhlcndpc2UnfSA9ICRjb2RlOworCisgICAgJGNsYXVzZXM7Cit9CisKKzE7CisKK3BhY2thZ2UgRXJyb3I6Oldhcm5EaWU7CisKK3N1YiBnZW5fY2FsbHN0YWNrKCQpCit7CisgICAgbXkgKCAkc3RhcnQgKSA9IEBfOworCisgICAgcmVxdWlyZSBDYXJwOworICAgIGxvY2FsICRDYXJwOjpDYXJwTGV2ZWwgPSAkc3RhcnQ7CisgICAgbXkgJHRyYWNlID0gQ2FycDo6bG9uZ21lc3MoIiIpOworICAgICMgUmVtb3ZlIHRyeSBjYWxscyBmcm9tIHRoZSB0cmFjZQorICAgICR0cmFjZSA9fiBzLyhcblxzK1xTK19fQU5PTl9fW15cbl0rKT9cblxzK2V2YWxbXlxuXStcblxzK0Vycm9yOjpzdWJzOjp0cnlbXlxuXSsoPz1cbikvL3NvZzsKKyAgICAkdHJhY2UgPX4gcy8oXG5ccytcUytfX0FOT05fX1teXG5dKyk/XG5ccytldmFsW15cbl0rXG5ccytFcnJvcjo6c3Viczo6cnVuX2NsYXVzZXNbXlxuXStcblxzK0Vycm9yOjpzdWJzOjp0cnlbXlxuXSsoPz1cbikvL3NvZzsKKyAgICBteSBAY2FsbHN0YWNrID0gc3BsaXQoIG0vXG4vLCAkdHJhY2UgKTsKKyAgICByZXR1cm4gQGNhbGxzdGFjazsKK30KKworbXkgJG9sZF9ESUU7CitteSAkb2xkX1dBUk47CisKK3N1YiBERUFUSAoreworICAgIG15ICggJGUgKSA9IEBfOworCisgICAgbG9jYWwgJFNJR3tfX0RJRV9ffSA9ICRvbGRfRElFIGlmKCBkZWZpbmVkICRvbGRfRElFICk7CisKKyAgICBkaWUgQF8gaWYgJF5TOworCisgICAgbXkgKCAkZXR5cGUsICRtZXNzYWdlLCAkbG9jYXRpb24sIEBjYWxsc3RhY2sgKTsKKyAgICBpZiAoIHJlZigkZSkgJiYgJGUtPmlzYSggIkVycm9yIiApICkgeworICAgICAgICAkZXR5cGUgPSAiZXhjZXB0aW9uIG9mIHR5cGUgIiAuIHJlZiggJGUgKTsKKyAgICAgICAgJG1lc3NhZ2UgPSAkZS0+dGV4dDsKKyAgICAgICAgJGxvY2F0aW9uID0gJGUtPmZpbGUgLiAiOiIgLiAkZS0+bGluZTsKKyAgICAgICAgQGNhbGxzdGFjayA9IHNwbGl0KCBtL1xuLywgJGUtPnN0YWNrdHJhY2UgKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgICMgRG9uJ3QgYXBwbHkgc3Vic2VxdWVudCBsYXllciBvZiBtZXNzYWdlIGZvcm1hdHRpbmcKKyAgICAgICAgZGllICRlIGlmKCAkZSA9fiBtL15cblVuaGFuZGxlZCBwZXJsIGVycm9yIGNhdWdodCBhdCB0b3BsZXZlbDpcblxuLyApOworICAgICAgICAkZXR5cGUgPSAicGVybCBlcnJvciI7CisgICAgICAgIG15ICRzdGFja2RlcHRoID0gMDsKKyAgICAgICAgd2hpbGUoIGNhbGxlciggJHN0YWNrZGVwdGggKSA9fiBtL15FcnJvcig/OiR8OjopLyApIHsKKyAgICAgICAgICAgICRzdGFja2RlcHRoKysKKyAgICAgICAgfQorCisgICAgICAgIEBjYWxsc3RhY2sgPSBnZW5fY2FsbHN0YWNrKCAkc3RhY2tkZXB0aCArIDEgKTsKKworICAgICAgICAkbWVzc2FnZSA9ICIkZSI7CisgICAgICAgIGNob21wICRtZXNzYWdlOworCisgICAgICAgIGlmICggJG1lc3NhZ2UgPX4gcy8gYXQgKC4qPykgbGluZSAoXGQrKVwuJC8vICkgeworICAgICAgICAgICAgJGxvY2F0aW9uID0gJDEgLiAiOiIgLiAkMjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG15IEBjYWxsZXIgPSBjYWxsZXIoICRzdGFja2RlcHRoICk7CisgICAgICAgICAgICAkbG9jYXRpb24gPSAkY2FsbGVyWzFdIC4gIjoiIC4gJGNhbGxlclsyXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNoaWZ0IEBjYWxsc3RhY2s7CisgICAgIyBEbyBpdCB0aGlzIHdheSBpbiBjYXNlIHRoZXJlIGFyZSBubyBlbGVtZW50czsgd2UgZG9uJ3QgcHJpbnQgYSBzcHVyaW91cyBcbgorICAgIG15ICRjYWxsc3RhY2sgPSBqb2luKCAiIiwgbWFwIHsgIiRfXG4ifSBAY2FsbHN0YWNrICk7CisKKyAgICBkaWUgIlxuVW5oYW5kbGVkICRldHlwZSBjYXVnaHQgYXQgdG9wbGV2ZWw6XG5cbiAgJG1lc3NhZ2VcblxuVGhyb3duIGZyb206ICRsb2NhdGlvblxuXG5GdWxsIHN0YWNrIHRyYWNlOlxuXG4kY2FsbHN0YWNrXG4iOworfQorCitzdWIgVEFYRVMKK3sKKyAgICBteSAoICRtZXNzYWdlICkgPSBAXzsKKworICAgIGxvY2FsICRTSUd7X19XQVJOX199ID0gJG9sZF9XQVJOIGlmKCBkZWZpbmVkICRvbGRfV0FSTiApOworCisgICAgJG1lc3NhZ2UgPX4gcy8gYXQgLio/IGxpbmUgXGQrXC4kLy87CisgICAgY2hvbXAgJG1lc3NhZ2U7CisKKyAgICBteSBAY2FsbHN0YWNrID0gZ2VuX2NhbGxzdGFjayggMSApOworICAgIG15ICRsb2NhdGlvbiA9IHNoaWZ0IEBjYWxsc3RhY2s7CisKKyAgICAjICRsb2NhdGlvbiBhbHJlYWR5IHN0YXJ0cyBpbiBhIGxlYWRpbmcgc3BhY2UKKyAgICAkbWVzc2FnZSAuPSAkbG9jYXRpb247CisKKyAgICAjIERvIGl0IHRoaXMgd2F5IGluIGNhc2UgdGhlcmUgYXJlIG5vIGVsZW1lbnRzOyB3ZSBkb24ndCBwcmludCBhIHNwdXJpb3VzIFxuCisgICAgbXkgJGNhbGxzdGFjayA9IGpvaW4oICIiLCBtYXAgeyAiJF9cbiJ9IEBjYWxsc3RhY2sgKTsKKworICAgIHdhcm4gIiRtZXNzYWdlOlxuJGNhbGxzdGFjayI7Cit9CisKK3N1YiBpbXBvcnQKK3sKKyAgICAkb2xkX0RJRSAgPSAkU0lHe19fRElFX199OworICAgICRvbGRfV0FSTiA9ICRTSUd7X19XQVJOX199OworCisgICAgJFNJR3tfX0RJRV9ffSAgPSBcJkRFQVRIOworICAgICRTSUd7X19XQVJOX199ID0gXCZUQVhFUzsKK30KKworMTsKKworX19FTkRfXworCis9aGVhZDEgTkFNRQorCitFcnJvciAtIEVycm9yL2V4Y2VwdGlvbiBoYW5kbGluZyBpbiBhbiBPTy1pc2ggd2F5CisKKz1oZWFkMSBXQVJOSU5HCisKK1VzaW5nIHRoZSAiRXJyb3IiIG1vZHVsZSBpcyBCPG5vIGxvbmdlciByZWNvbW1lbmRlZD4gZHVlIHRvIHRoZSBibGFjay1tYWdpY2FsCituYXR1cmUgb2YgaXRzIHN5bnRhY3RpYyBzdWdhciwgd2hpY2ggb2Z0ZW4gdGVuZHMgdG8gYnJlYWsuIEl0cyBtYWludGFpbmVycworaGF2ZSBzdG9wcGVkIGFjdGl2ZWx5IHdyaXRpbmcgY29kZSB0aGF0IHVzZXMgaXQsIGFuZCBkaXNjb3VyYWdlIHBlb3BsZQorZnJvbSBkb2luZyBzby4gU2VlIHRoZSAiU0VFIEFMU08iIHNlY3Rpb24gYmVsb3cgZm9yIGJldHRlciByZWNvbW1lbmRhdGlvbnMuCisKKz1oZWFkMSBTWU5PUFNJUworCisgICAgdXNlIEVycm9yIHF3KDp0cnkpOworCisgICAgdGhyb3cgRXJyb3I6OlNpbXBsZSggIkEgc2ltcGxlIGVycm9yIik7CisKKyAgICBzdWIgeHl6IHsKKyAgICAgICAgLi4uCisJcmVjb3JkIEVycm9yOjpTaW1wbGUoIkEgc2ltcGxlIGVycm9yIikKKwkgICAgYW5kIHJldHVybjsKKyAgICB9CisKKyAgICB1bmxpbmsoJGZpbGUpIG9yIHRocm93IEVycm9yOjpTaW1wbGUoIiRmaWxlOiAkISIsJCEpOworCisgICAgdHJ5IHsKKwlkb19zb21lX3N0dWZmKCk7CisJZGllICJlcnJvciEiIGlmICRjb25kaXRpb247CisJdGhyb3cgRXJyb3I6OlNpbXBsZSAiT29wcyEiIGlmICRvdGhlcl9jb25kaXRpb247CisgICAgfQorICAgIGNhdGNoIEVycm9yOjpJTyB3aXRoIHsKKwlteSAkRSA9IHNoaWZ0OworCXByaW50IFNUREVSUiAiRmlsZSAiLCAkRS0+eyctZmlsZSd9LCAiIGhhZCBhIHByb2JsZW1cbiI7CisgICAgfQorICAgIGV4Y2VwdCB7CisJbXkgJEUgPSBzaGlmdDsKKwlteSAkZ2VuZXJhbF9oYW5kbGVyPXN1YiB7c2VuZF9tZXNzYWdlICRFLT57LWRlc2NyaXB0aW9ufX07CisJcmV0dXJuIHsKKwkgICAgVXNlckV4Y2VwdGlvbjEgPT4gJGdlbmVyYWxfaGFuZGxlciwKKwkgICAgVXNlckV4Y2VwdGlvbjIgPT4gJGdlbmVyYWxfaGFuZGxlcgorCX07CisgICAgfQorICAgIG90aGVyd2lzZSB7CisJcHJpbnQgU1RERVJSICJXZWxsIEkgZG9uJ3Qga25vdyB3aGF0IHRvIHNheVxuIjsKKyAgICB9CisgICAgZmluYWxseSB7CisJY2xvc2VfdGhlX2dhcmFnZV9kb29yX2FscmVhZHkoKTsgIyBTaG91bGQgYmUgcmVsaWFibGUKKyAgICB9OyAjIERvbid0IGZvcmdldCB0aGUgdHJhaWxpbmcgOyBvciB5b3UgbWlnaHQgYmUgc3VycHJpc2VkCisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGUgQzxFcnJvcj4gcGFja2FnZSBwcm92aWRlcyB0d28gaW50ZXJmYWNlcy4gRmlyc3RseSBDPEVycm9yPiBwcm92aWRlcworYSBwcm9jZWR1cmFsIGludGVyZmFjZSB0byBleGNlcHRpb24gaGFuZGxpbmcuIFNlY29uZGx5IEM8RXJyb3I+IGlzIGEKK2Jhc2UgY2xhc3MgZm9yIGVycm9ycy9leGNlcHRpb25zIHRoYXQgY2FuIGVpdGhlciBiZSB0aHJvd24sIGZvcgorc3Vic2VxdWVudCBjYXRjaCwgb3IgY2FuIHNpbXBseSBiZSByZWNvcmRlZC4KKworRXJyb3JzIGluIHRoZSBjbGFzcyBDPEVycm9yPiBzaG91bGQgbm90IGJlIHRocm93biBkaXJlY3RseSwgYnV0IHRoZQordXNlciBzaG91bGQgdGhyb3cgZXJyb3JzIGZyb20gYSBzdWItY2xhc3Mgb2YgQzxFcnJvcj4uCisKKz1oZWFkMSBQUk9DRURVUkFMIElOVEVSRkFDRQorCitDPEVycm9yPiBleHBvcnRzIHN1YnJvdXRpbmVzIHRvIHBlcmZvcm0gZXhjZXB0aW9uIGhhbmRsaW5nLiBUaGVzZSB3aWxsCitiZSBleHBvcnRlZCBpZiB0aGUgQzw6dHJ5PiB0YWcgaXMgdXNlZCBpbiB0aGUgQzx1c2U+IGxpbmUuCisKKz1vdmVyIDQKKworPWl0ZW0gdHJ5IEJMT0NLIENMQVVTRVMKKworQzx0cnk+IGlzIHRoZSBtYWluIHN1YnJvdXRpbmUgY2FsbGVkIGJ5IHRoZSB1c2VyLiBBbGwgb3RoZXIgc3Vicm91dGluZXMKK2V4cG9ydGVkIGFyZSBjbGF1c2VzIHRvIHRoZSB0cnkgc3Vicm91dGluZS4KKworVGhlIEJMT0NLIHdpbGwgYmUgZXZhbHVhdGVkIGFuZCwgaWYgbm8gZXJyb3IgaXMgdGhyb3csIHRyeSB3aWxsIHJldHVybgordGhlIHJlc3VsdCBvZiB0aGUgYmxvY2suCisKK0M8Q0xBVVNFUz4gYXJlIHRoZSBzdWJyb3V0aW5lcyBiZWxvdywgd2hpY2ggZGVzY3JpYmUgd2hhdCB0byBkbyBpbiB0aGUKK2V2ZW50IG9mIGFuIGVycm9yIGJlaW5nIHRocm93biB3aXRoaW4gQkxPQ0suCisKKz1pdGVtIGNhdGNoIENMQVNTIHdpdGggQkxPQ0sKKworVGhpcyBjbGF1c2VzIHdpbGwgY2F1c2UgYWxsIGVycm9ycyB0aGF0IHNhdGlzZnkgQzwkZXJyLUU8Z3Q+aXNhKENMQVNTKT4KK3RvIGJlIGNhdWdodCBhbmQgaGFuZGxlZCBieSBldmFsdWF0aW5nIEM8QkxPQ0s+LgorCitDPEJMT0NLPiB3aWxsIGJlIHBhc3NlZCB0d28gYXJndW1lbnRzLiBUaGUgZmlyc3Qgd2lsbCBiZSB0aGUgZXJyb3IKK2JlaW5nIHRocm93bi4gVGhlIHNlY29uZCBpcyBhIHJlZmVyZW5jZSB0byBhIHNjYWxhciB2YXJpYWJsZS4gSWYgdGhpcwordmFyaWFibGUgaXMgc2V0IGJ5IHRoZSBjYXRjaCBibG9jayB0aGVuLCBvbiByZXR1cm4gZnJvbSB0aGUgY2F0Y2gKK2Jsb2NrLCB0cnkgd2lsbCBjb250aW51ZSBwcm9jZXNzaW5nIGFzIGlmIHRoZSBjYXRjaCBibG9jayB3YXMgbmV2ZXIKK2ZvdW5kLiBUaGUgZXJyb3Igd2lsbCBhbHNvIGJlIGF2YWlsYWJsZSBpbiBDPCRAPi4KKworVG8gcHJvcGFnYXRlIHRoZSBlcnJvciB0aGUgY2F0Y2ggYmxvY2sgbWF5IGNhbGwgQzwkZXJyLUU8Z3Q+dGhyb3c+CisKK0lmIHRoZSBzY2FsYXIgcmVmZXJlbmNlIGJ5IHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbm90IHNldCwgYW5kIHRoZQorZXJyb3IgaXMgbm90IHRocm93bi4gVGhlbiB0aGUgY3VycmVudCB0cnkgYmxvY2sgd2lsbCByZXR1cm4gd2l0aCB0aGUKK3Jlc3VsdCBmcm9tIHRoZSBjYXRjaCBibG9jay4KKworPWl0ZW0gZXhjZXB0IEJMT0NLCisKK1doZW4gQzx0cnk+IGlzIGxvb2tpbmcgZm9yIGEgaGFuZGxlciwgaWYgYW4gZXhjZXB0IGNsYXVzZSBpcyBmb3VuZAorQzxCTE9DSz4gaXMgZXZhbHVhdGVkLiBUaGUgcmV0dXJuIHZhbHVlIGZyb20gdGhpcyBibG9jayBzaG91bGQgYmUgYQorSEFTSFJFRiBvciBhIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzLCB3aGVyZSB0aGUga2V5cyBhcmUgY2xhc3MgbmFtZXMKK2FuZCB0aGUgdmFsdWVzIGFyZSBDT0RFIHJlZmVyZW5jZXMgZm9yIHRoZSBoYW5kbGVyIG9mIGVycm9ycyBvZiB0aGF0Cit0eXBlLgorCis9aXRlbSBvdGhlcndpc2UgQkxPQ0sKKworQ2F0Y2ggYW55IGVycm9yIGJ5IGV4ZWN1dGluZyB0aGUgY29kZSBpbiBDPEJMT0NLPgorCitXaGVuIGV2YWx1YXRlZCBDPEJMT0NLPiB3aWxsIGJlIHBhc3NlZCBvbmUgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgdGhlCitlcnJvciBiZWluZyBwcm9jZXNzZWQuIFRoZSBlcnJvciB3aWxsIGFsc28gYmUgYXZhaWxhYmxlIGluIEM8JEA+LgorCitPbmx5IG9uZSBvdGhlcndpc2UgYmxvY2sgbWF5IGJlIHNwZWNpZmllZCBwZXIgdHJ5IGJsb2NrCisKKz1pdGVtIGZpbmFsbHkgQkxPQ0sKKworRXhlY3V0ZSB0aGUgY29kZSBpbiBDPEJMT0NLPiBlaXRoZXIgYWZ0ZXIgdGhlIGNvZGUgaW4gdGhlIHRyeSBibG9jayBoYXMKK3N1Y2Nlc3NmdWxseSBjb21wbGV0ZWQsIG9yIGlmIHRoZSB0cnkgYmxvY2sgdGhyb3dzIGFuIGVycm9yIHRoZW4KK0M8QkxPQ0s+IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGhhbmRsZXIgaGFzIGNvbXBsZXRlZC4KKworSWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGVycm9yIHRoZW4gdGhlIGVycm9yIHdpbGwgYmUgY2F1Z2h0LCB0aGUKK2ZpbmFsbHkgYmxvY2sgd2lsbCBiZSBleGVjdXRlZCBhbmQgdGhlIGVycm9yIHdpbGwgYmUgcmUtdGhyb3duLgorCitPbmx5IG9uZSBmaW5hbGx5IGJsb2NrIG1heSBiZSBzcGVjaWZpZWQgcGVyIHRyeSBibG9jaworCis9YmFjaworCis9aGVhZDEgQ09NUEFUSUJJTElUWQorCitMPE1vb3NlPiBleHBvcnRzIGEga2V5d29yZCBjYWxsZWQgQzx3aXRoPiB3aGljaCBjbGFzaGVzIHdpdGggRXJyb3Incy4gVGhpcworZXhhbXBsZSByZXR1cm5zIGEgcHJvdG90eXBlIG1pc21hdGNoIGVycm9yOgorCisgICAgcGFja2FnZSBNeVRlc3Q7CisKKyAgICB1c2Ugd2FybmluZ3M7CisgICAgdXNlIE1vb3NlOworICAgIHVzZSBFcnJvciBxdyg6dHJ5KTsKKworKFRoYW5rcyB0byBDPG1haWsuaGVudHNjaGVAYW1kLmNvbT4gZm9yIHRoZSByZXBvcnQuKS4KKworPWhlYWQxIENMQVNTIElOVEVSRkFDRQorCis9aGVhZDIgQ09OU1RSVUNUT1JTCisKK1RoZSBDPEVycm9yPiBvYmplY3QgaXMgaW1wbGVtZW50ZWQgYXMgYSBIQVNILiBUaGlzIEhBU0ggaXMgaW5pdGlhbGl6ZWQKK3dpdGggdGhlIGFyZ3VtZW50cyB0aGF0IGFyZSBwYXNzZWQgdG8gaXQncyBjb25zdHJ1Y3Rvci4gVGhlIGVsZW1lbnRzCit0aGF0IGFyZSB1c2VkIGJ5LCBvciBhcmUgcmV0cmlldmFibGUgYnkgdGhlIEM8RXJyb3I+IGNsYXNzIGFyZSBsaXN0ZWQKK2JlbG93LCBvdGhlciBjbGFzc2VzIG1heSBhZGQgdG8gdGhlc2UuCisKKwktZmlsZQorCS1saW5lCisJLXRleHQKKwktdmFsdWUKKwktb2JqZWN0CisKK0lmIEM8LWZpbGU+IG9yIEM8LWxpbmU+IGFyZSBub3Qgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMKK3RoZW4gdGhlc2Ugd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIHRoZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyIHdoZXJlCit0aGUgY29uc3RydWN0b3Igd2FzIGNhbGxlZCBmcm9tLgorCitJZiB0aGUgZXJyb3IgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIG9iamVjdCB0aGVuIHRoZSBvYmplY3Qgc2hvdWxkIGJlCitwYXNzZWQgYXMgdGhlIEM8LW9iamVjdD4gYXJndW1lbnQuIFRoaXMgd2lsbCBhbGxvdyB0aGUgQzxFcnJvcj4gcGFja2FnZQordG8gYXNzb2NpYXRlIHRoZSBlcnJvciB3aXRoIHRoZSBvYmplY3QuCisKK1RoZSBDPEVycm9yPiBwYWNrYWdlIHJlbWVtYmVycyB0aGUgbGFzdCBlcnJvciBjcmVhdGVkLCBhbmQgYWxzbyB0aGUKK2xhc3QgZXJyb3IgYXNzb2NpYXRlZCB3aXRoIGEgcGFja2FnZS4gVGhpcyBjb3VsZCBlaXRoZXIgYmUgdGhlIGxhc3QKK2Vycm9yIGNyZWF0ZWQgYnkgYSBzdWIgaW4gdGhhdCBwYWNrYWdlLCBvciB0aGUgbGFzdCBlcnJvciB3aGljaCBwYXNzZWQKK2FuIG9iamVjdCBibGVzc2VkIGludG8gdGhhdCBwYWNrYWdlIGFzIHRoZSBDPC1vYmplY3Q+IGFyZ3VtZW50LgorCis9b3ZlciA0CisKKz1pdGVtIEVycm9yLT5uZXcoKQorCitTZWUgdGhlIEVycm9yOjpTaW1wbGUgZG9jdW1lbnRhdGlvbi4KKworPWl0ZW0gdGhyb3cgKCBbIEFSR1MgXSApCisKK0NyZWF0ZSBhIG5ldyBDPEVycm9yPiBvYmplY3QgYW5kIHRocm93IGFuIGVycm9yLCB3aGljaCB3aWxsIGJlIGNhdWdodAorYnkgYSBzdXJyb3VuZGluZyBDPHRyeT4gYmxvY2ssIGlmIHRoZXJlIGlzIG9uZS4gT3RoZXJ3aXNlIGl0IHdpbGwgY2F1c2UKK3RoZSBwcm9ncmFtIHRvIGV4aXQuCisKK0M8dGhyb3c+IG1heSBhbHNvIGJlIGNhbGxlZCBvbiBhbiBleGlzdGluZyBlcnJvciB0byByZS10aHJvdyBpdC4KKworPWl0ZW0gd2l0aCAoIFsgQVJHUyBdICkKKworQ3JlYXRlIGEgbmV3IEM8RXJyb3I+IG9iamVjdCBhbmQgcmV0dXJucyBpdC4gVGhpcyBpcyBkZWZpbmVkIGZvcgorc3ludGFjdGljIHN1Z2FyLCBlZworCisgICAgZGllIHdpdGggU29tZTo6RXJyb3IgKCAuLi4gKTsKKworPWl0ZW0gcmVjb3JkICggWyBBUkdTIF0gKQorCitDcmVhdGUgYSBuZXcgQzxFcnJvcj4gb2JqZWN0IGFuZCByZXR1cm5zIGl0LiBUaGlzIGlzIGRlZmluZWQgZm9yCitzeW50YWN0aWMgc3VnYXIsIGVnCisKKyAgICByZWNvcmQgU29tZTo6RXJyb3IgKCAuLi4gKQorCWFuZCByZXR1cm47CisKKz1iYWNrCisKKz1oZWFkMiBTVEFUSUMgTUVUSE9EUworCis9b3ZlciA0CisKKz1pdGVtIHByaW9yICggWyBQQUNLQUdFIF0gKQorCitSZXR1cm4gdGhlIGxhc3QgZXJyb3IgY3JlYXRlZCwgb3IgdGhlIGxhc3QgZXJyb3IgYXNzb2NpYXRlZCB3aXRoCitDPFBBQ0tBR0U+CisKKz1pdGVtIGZsdXNoICggWyBQQUNLQUdFIF0gKQorCitGbHVzaCB0aGUgbGFzdCBlcnJvciBjcmVhdGVkLCBvciB0aGUgbGFzdCBlcnJvciBhc3NvY2lhdGVkIHdpdGgKK0M8UEFDS0FHRT4uSXQgaXMgbmVjZXNzYXJ5IHRvIGNsZWFyIHRoZSBlcnJvciBzdGFjayBiZWZvcmUgZXhpdGluZyB0aGUKK3BhY2thZ2Ugb3IgdW5jYXVnaHQgZXJyb3JzIGdlbmVyYXRlZCB1c2luZyBDPHJlY29yZD4gd2lsbCBiZSByZXBvcnRlZC4KKworICAgICAkRXJyb3ItPmZsdXNoOworCis9Y3V0CisKKz1iYWNrCisKKz1oZWFkMiBPQkpFQ1QgTUVUSE9EUworCis9b3ZlciA0CisKKz1pdGVtIHN0YWNrdHJhY2UKKworSWYgdGhlIHZhcmlhYmxlIEM8JEVycm9yOjpEZWJ1Zz4gd2FzIG5vbi16ZXJvIHdoZW4gdGhlIGVycm9yIHdhcworY3JlYXRlZCwgdGhlbiBDPHN0YWNrdHJhY2U+IHJldHVybnMgYSBzdHJpbmcgY3JlYXRlZCBieSBjYWxsaW5nCitDPENhcnA6OmxvbmdtZXNzPi4gSWYgdGhlIHZhcmlhYmxlIHdhcyB6ZXJvIHRoZSBDPHN0YWNrdHJhY2U+IHJldHVybnMKK3RoZSB0ZXh0IG9mIHRoZSBlcnJvciBhcHBlbmRlZCB3aXRoIHRoZSBmaWxlbmFtZSBhbmQgbGluZSBudW1iZXIgb2YKK3doZXJlIHRoZSBlcnJvciB3YXMgY3JlYXRlZCwgcHJvdmlkaW5nIHRoZSB0ZXh0IGRvZXMgbm90IGVuZCB3aXRoIGEKK25ld2xpbmUuCisKKz1pdGVtIG9iamVjdAorCitUaGUgb2JqZWN0IHRoaXMgZXJyb3Igd2FzIGFzc29jaWF0ZWQgd2l0aAorCis9aXRlbSBmaWxlCisKK1RoZSBmaWxlIHdoZXJlIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGlzIGVycm9yIHdhcyBjYWxsZWQgZnJvbQorCis9aXRlbSBsaW5lCisKK1RoZSBsaW5lIHdoZXJlIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGlzIGVycm9yIHdhcyBjYWxsZWQgZnJvbQorCis9aXRlbSB0ZXh0CisKK1RoZSB0ZXh0IG9mIHRoZSBlcnJvcgorCis9aXRlbSAkZXJyLT5hc3NvY2lhdGUoJG9iaikKKworQXNzb2NpYXRlcyBhbiBlcnJvciB3aXRoIGFuIG9iamVjdCB0byBhbGxvdyBlcnJvciBwcm9wYWdhdGlvbi4gSS5lOgorCisgICAgJGJlci0+ZW5jb2RlKC4uLikgb3IKKyAgICAgICAgcmV0dXJuIEVycm9yLT5wcmlvcigkYmVyKS0+YXNzb2NpYXRlKCRsZGFwKTsKKworPWJhY2sKKworPWhlYWQyIE9WRVJMT0FEIE1FVEhPRFMKKworPW92ZXIgNAorCis9aXRlbSBzdHJpbmdpZnkKKworQSBtZXRob2QgdGhhdCBjb252ZXJ0cyB0aGUgb2JqZWN0IGludG8gYSBzdHJpbmcuIFRoaXMgbWV0aG9kIG1heSBzaW1wbHkKK3JldHVybiB0aGUgc2FtZSBhcyB0aGUgQzx0ZXh0PiBtZXRob2QsIG9yIGl0IG1heSBhcHBlbmQgbW9yZQoraW5mb3JtYXRpb24uIEZvciBleGFtcGxlIHRoZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyLgorCitCeSBkZWZhdWx0IHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIEM8LXRleHQ+IGFyZ3VtZW50IHRoYXQgd2FzIHBhc3NlZCB0bwordGhlIGNvbnN0cnVjdG9yLCBvciB0aGUgc3RyaW5nIEM8IkRpZWQiPiBpZiBub25lIHdhcyBnaXZlbi4KKworPWl0ZW0gdmFsdWUKKworQSBtZXRob2QgdGhhdCB3aWxsIHJldHVybiBhIHZhbHVlIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUKK2Vycm9yLiBGb3IgZXhhbXBsZSBpZiBhbiBlcnJvciB3YXMgY3JlYXRlZCBkdWUgdG8gdGhlIGZhaWx1cmUgb2YgYQorc3lzdGVtIGNhbGwsIHRoZW4gdGhpcyBtYXkgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIG9mIEM8JCE+IGF0IHRoZQordGltZS4KKworQnkgZGVmYXVsdCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDPC12YWx1ZT4gYXJndW1lbnQgdGhhdCB3YXMgcGFzc2VkCit0byB0aGUgY29uc3RydWN0b3IuCisKKz1iYWNrCisKKz1oZWFkMSBQUkUtREVGSU5FRCBFUlJPUiBDTEFTU0VTCisKKz1oZWFkMiBFcnJvcjo6U2ltcGxlCisKK1RoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gaG9sZCBzaW1wbGUgZXJyb3Igc3RyaW5ncyBhbmQgdmFsdWVzLiBJdCdzCitjb25zdHJ1Y3RvciB0YWtlcyB0d28gYXJndW1lbnRzLiBUaGUgZmlyc3QgaXMgYSB0ZXh0IHZhbHVlLCB0aGUgc2Vjb25kCitpcyBhIG51bWVyaWMgdmFsdWUuIFRoZXNlIHZhbHVlcyBhcmUgd2hhdCB3aWxsIGJlIHJldHVybmVkIGJ5IHRoZQorb3ZlcmxvYWQgbWV0aG9kcy4KKworSWYgdGhlIHRleHQgdmFsdWUgZW5kcyB3aXRoIEM8YXQgZmlsZSBsaW5lIDE+IGFzICRAIHN0cmluZ3MgZG8sIHRoZW4KK3RoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIHRvIHNldCB0aGUgQzwtZmlsZT4gYW5kIEM8LWxpbmU+IGFyZ3VtZW50cworb2YgdGhlIGVycm9yIG9iamVjdC4KKworVGhpcyBjbGFzcyBpcyB1c2VkIGludGVybmFsbHkgaWYgYW4gZXZhbCdkIGJsb2NrIGRpZSdzIHdpdGggYW4gZXJyb3IKK3RoYXQgaXMgYSBwbGFpbiBzdHJpbmcuIChVbmxlc3MgQzwkRXJyb3I6Ok9iamVjdGlmeUNhbGxiYWNrPiBpcyBtb2RpZmllZCkKKworCis9aGVhZDEgJEVycm9yOjpPYmplY3RpZnlDYWxsYmFjaworCitUaGlzIHZhcmlhYmxlIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGEgc3Vicm91dGluZSB0aGF0IGNvbnZlcnRzIGVycm9ycyB0aGF0CithcmUgcGxhaW4gc3RyaW5ncyB0byBvYmplY3RzLiBJdCBpcyB1c2VkIGJ5IEVycm9yLnBtIHRvIGNvbnZlcnQgdGV4dHVhbAorZXJyb3JzIHRvIG9iamVjdHMsIGFuZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgdXNlci4KKworSXQgYWNjZXB0cyBhIHNpbmdsZSBhcmd1bWVudCB3aGljaCBpcyBhIGhhc2ggcmVmZXJlbmNlIHRvIG5hbWVkIHBhcmFtZXRlcnMuCitDdXJyZW50bHkgdGhlIG9ubHkgbmFtZWQgcGFyYW1ldGVyIHBhc3NlZCBpcyBDPCd0ZXh0Jz4gd2hpY2ggaXMgdGhlIHRleHQKK29mIHRoZSBlcnJvciwgYnV0IG90aGVycyBtYXkgYmUgYXZhaWxhYmxlIGluIHRoZSBmdXR1cmUuCisKK0ZvciBleGFtcGxlIHRoZSBmb2xsb3dpbmcgY29kZSB3aWxsIGNhdXNlIEVycm9yLnBtIHRvIHRocm93IG9iamVjdHMgb2YgdGhlCitjbGFzcyBNeUVycm9yOjpCYXIgYnkgZGVmYXVsdDoKKworICAgIHN1YiB0aHJvd19NeUVycm9yX0JhcgorICAgIHsKKyAgICAgICAgbXkgJGFyZ3MgPSBzaGlmdDsKKyAgICAgICAgbXkgJGVyciA9IE15RXJyb3I6OkJhci0+bmV3KCk7CisgICAgICAgICRlcnItPnsnTXlCYXJUZXh0J30gPSAkYXJncy0+eyd0ZXh0J307CisgICAgICAgIHJldHVybiAkZXJyOworICAgIH0KKworICAgIHsKKyAgICAgICAgbG9jYWwgJEVycm9yOjpPYmplY3RpZnlDYWxsYmFjayA9IFwmdGhyb3dfTXlFcnJvcl9CYXI7CisKKyAgICAgICAgIyBFcnJvciBoYW5kbGluZyBoZXJlLgorICAgIH0KKworPWN1dAorCis9aGVhZDEgTUVTU0FHRSBIQU5ETEVSUworCitDPEVycm9yPiBhbHNvIHByb3ZpZGVzIGhhbmRsZXJzIHRvIGV4dGVuZCB0aGUgb3V0cHV0IG9mIHRoZSBDPHdhcm4oKT4gcGVybAorZnVuY3Rpb24sIGFuZCB0byBoYW5kbGUgdGhlIHByaW50aW5nIG9mIGEgdGhyb3duIEM8RXJyb3I+IHRoYXQgaXMgbm90IGNhdWdodAorb3Igb3RoZXJ3aXNlIGhhbmRsZWQuIFRoZXNlIGFyZSBub3QgaW5zdGFsbGVkIGJ5IGRlZmF1bHQsIGJ1dCBhcmUgcmVxdWVzdGVkCit1c2luZyB0aGUgQzw6d2FybmRpZT4gdGFnIGluIHRoZSBDPHVzZT4gbGluZS4KKworIHVzZSBFcnJvciBxdyggOndhcm5kaWUgKTsKKworVGhlc2UgbmV3IGVycm9yIGhhbmRsZXJzIGFyZSBpbnN0YWxsZWQgaW4gQzwkU0lHe19fV0FSTl9ffT4gYW5kCitDPCRTSUd7X19ESUVfX30+LiBJZiB0aGVzZSBoYW5kbGVycyBhcmUgYWxyZWFkeSBkZWZpbmVkIHdoZW4gdGhlIHRhZyBpcworaW1wb3J0ZWQsIHRoZSBvbGQgdmFsdWVzIGFyZSBzdG9yZWQsIGFuZCB1c2VkIGR1cmluZyB0aGUgbmV3IGNvZGUuIFRodXMsIHRvCithcnJhbmdlIGZvciBjdXN0b20gaGFuZGxpbmcgb2Ygd2FybmluZ3MgYW5kIGVycm9ycywgeW91IHdpbGwgbmVlZCB0byBwZXJmb3JtCitzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOgorCisgQkVHSU4geworICAgJFNJR3tfX1dBUk5fX30gPSBzdWIgeworICAgICBwcmludCBTVERFUlIgIk15IHNwZWNpYWwgd2FybmluZyBoYW5kbGVyOiAkX1swXSIKKyAgIH07CisgfQorCisgdXNlIEVycm9yIHF3KCA6d2FybmRpZSApOworCitOb3RlIHRoYXQgc2V0dGluZyBDPCRTSUd7X19XQVJOX199PiBhZnRlciB0aGUgQzw6d2FybmRpZT4gdGFnIGhhcyBiZWVuCitpbXBvcnRlZCB3aWxsIG92ZXJ3cml0ZSB0aGUgaGFuZGxlciB0aGF0IEM8RXJyb3I+IHByb3ZpZGVzLiBJZiB0aGlzIGNhbm5vdCBiZQorYXZvaWRlZCwgdGhlbiB0aGUgdGFnIGNhbiBiZSBleHBsaWNpdGx5IEM8aW1wb3J0PmVkIGxhdGVyCisKKyB1c2UgRXJyb3I7CisKKyAkU0lHe19fV0FSTl9ffSA9IC4uLjsKKworIGltcG9ydCBFcnJvciBxdyggOndhcm5kaWUgKTsKKworPWhlYWQyIEVYQU1QTEUKKworVGhlIEM8X19ESUVfXz4gaGFuZGxlciB0dXJucyBtZXNzYWdlcyBzdWNoIGFzCisKKyBDYW4ndCBjYWxsIG1ldGhvZCAiZm9vIiBvbiBhbiB1bmRlZmluZWQgdmFsdWUgYXQgZXhhbXBsZXMvd2FybmRpZS5wbCBsaW5lIDE2LgorCitpbnRvCisKKyBVbmhhbmRsZWQgcGVybCBlcnJvciBjYXVnaHQgYXQgdG9wbGV2ZWw6CisKKyAgIENhbid0IGNhbGwgbWV0aG9kICJmb28iIG9uIGFuIHVuZGVmaW5lZCB2YWx1ZQorCisgVGhyb3duIGZyb206IGV4YW1wbGVzL3dhcm5kaWUucGw6MTYKKworIEZ1bGwgc3RhY2sgdHJhY2U6CisKKyAgICAgICAgIG1haW46OmlubmVyKCd1bmRlZicpIGNhbGxlZCBhdCBleGFtcGxlcy93YXJuZGllLnBsIGxpbmUgMjAKKyAgICAgICAgIG1haW46Om91dGVyKCd1bmRlZicpIGNhbGxlZCBhdCBleGFtcGxlcy93YXJuZGllLnBsIGxpbmUgMjMKKworPWN1dAorCis9aGVhZDEgU0VFIEFMU08KKworU2VlIEw8RXhjZXB0aW9uOjpDbGFzcz4gZm9yIGEgZGlmZmVyZW50IG1vZHVsZSBwcm92aWRpbmcgT2JqZWN0LU9yaWVudGVkCitleGNlcHRpb24gaGFuZGxpbmcsIGFsb25nIHdpdGggYSBjb252ZW5pZW50IHN5bnRheCBmb3IgZGVjbGFyaW5nIGhpZXJhcmNoaWVzCitmb3IgdGhlbS4gSXQgZG9lc24ndCBwcm92aWRlIEVycm9yJ3Mgc3ludGFjdGljIHN1Z2FyIG9mIEM8dHJ5IHsgLi4uIH0+LAorQzxjYXRjaCB7IC4uLiB9PiwgZXRjLiB3aGljaCBtYXkgYmUgYSBnb29kIHRoaW5nIG9yIGEgYmFkIHRoaW5nIGJhc2VkCitvbiB3aGF0IHlvdSB3YW50LiAoQmVjYXVzZSBFcnJvcidzIHN5bnRhY3RpYyBzdWdhciB0ZW5kcyB0byBicmVhay4pCisKK0w8RXJyb3I6OkV4Y2VwdGlvbj4gYWltcyB0byBjb21iaW5lIEw8RXJyb3I+IGFuZCBMPEV4Y2VwdGlvbjo6Q2xhc3M+Cisid2l0aCBjb3JyZWN0IHN0cmluZ2lmaWNhdGlvbiIuCisKK0w8VHJ5Q2F0Y2g+IGFuZCBMPFRyeTo6VGlueT4gYXJlIHNpbWlsYXIgaW4gY29uY2VwdCB0byBFcnJvci5wbSBvbmx5IHByb3ZpZGluZworYSBzeW50YXggdGhhdCBob3BlZnVsbHkgYnJlYWtzIGxlc3MuCisKKz1oZWFkMSBLTk9XTiBCVUdTCisKK05vbmUsIGJ1dCB0aGF0IGRvZXMgbm90IG1lYW4gdGhlcmUgYXJlIG5vdCBhbnkuCisKKz1oZWFkMSBBVVRIT1JTCisKK0dyYWhhbSBCYXJyIDxnYmFyckBwb2JveC5jb20+CisKK1RoZSBjb2RlIHRoYXQgaW5zcGlyZWQgbWUgdG8gd3JpdGUgdGhpcyB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5CitQZXRlciBTZWliZWwgPHBldGVyQHdlYmxvZ2ljLmNvbT4gYW5kIGFkYXB0ZWQgYnkgSmVzc2UgR2xpY2sKKzxqZ2xpY2tAc2lnLmJzaC5jb20+LgorCitDPDp3YXJuZGllPiBoYW5kbGVycyBhZGRlZCBieSBQYXVsIEV2YW5zIDxsZW9uZXJkQGxlb25lcmQub3JnLnVrPgorCis9aGVhZDEgTUFJTlRBSU5FUgorCitTaGxvbWkgRmlzaCwgTDxodHRwOi8vd3d3LnNobG9taWZpc2gub3JnLz4gLgorCis9aGVhZDEgUEFTVCBNQUlOVEFJTkVSUworCitBcnVuIEt1bWFyIFUgPHVfYXJ1bmt1bWFyQHlhaG9vLmNvbT4KKworPWhlYWQxIENPUFlSSUdIVAorCitDb3B5cmlnaHQgKGMpIDE5OTctOCAgR3JhaGFtIEJhcnIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUGVybCBpdHNlbGYuCisKKz1jdXQKZGlmZiAtLWdpdCBhL3BlcmwvRnJvbUNQQU4vTWFpbC9BZGRyZXNzLnBtIGIvcGVybC9Gcm9tQ1BBTi9NYWlsL0FkZHJlc3MucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzZDQ5MAotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvRnJvbUNQQU4vTWFpbC9BZGRyZXNzLnBtCkBAIC0wLDAgKzEsMjgwIEBACisjIENvcHlyaWdodHMgMTk5NS0yMDE4IGJ5IFtNYXJrIE92ZXJtZWVyXS4KKyMgIEZvciBvdGhlciBjb250cmlidXRvcnMgc2VlIENoYW5nZUxvZy4KKyMgU2VlIHRoZSBtYW51YWwgcGFnZXMgZm9yIGRldGFpbHMgb24gdGhlIGxpY2Vuc2luZyB0ZXJtcy4KKyMgUG9kIHN0cmlwcGVkIGZyb20gcG0gZmlsZSBieSBPT0RvYyAyLjAyLgorIyBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgYnVuZGxlIE1haWxUb29scy4gIE1ldGEtUE9EIHByb2Nlc3NlZCB3aXRoCisjIE9PRG9jIGludG8gUE9EIGFuZCBIVE1MIG1hbnVhbC1wYWdlcy4gIFNlZSBSRUFETUUubWQgZm9yIENvcHlyaWdodC4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUGVybCBpdHNlbGYuCisKK3BhY2thZ2UgTWFpbDo6QWRkcmVzczsKK3VzZSB2YXJzICckVkVSU0lPTic7CiskVkVSU0lPTiA9ICcyLjIwJzsKKwordXNlIHN0cmljdDsKKwordXNlIENhcnA7CisKKyMgdXNlIGxvY2FsZTsgICByZW1vdmVkIGluIHZlcnNpb24gMS43OCwgYmVjYXVzZSBpdCBjYXVzZXMgdGFpbnQgcHJvYmxlbXMKKworc3ViIFZlcnNpb24geyBvdXIgJFZFUlNJT04gfQorCisKKworIyBnaXZlbiBhIGNvbW1lbnQsIGF0dGVtcHQgdG8gZXh0cmFjdCBhIHBlcnNvbidzIG5hbWUKK3N1YiBfZXh0cmFjdF9uYW1lCit7ICAgIyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXMgbWV0aG9kIGFzIHdlbGwKKyAgICBteSAkc2VsZiA9IEBfICYmIHJlZiAkX1swXSA/IHNoaWZ0IDogdW5kZWY7CisKKyAgICBsb2NhbCAkXyA9IHNoaWZ0CisgICAgICAgIG9yIHJldHVybiAnJzsKKworICAgICMgVXNpbmcgZW5jb2RpbmdzLCB0b28gaGFyZC4gU2VlIE1haWw6Ok1lc3NhZ2U6OkZpZWxkOjpGdWxsLgorICAgIHJldHVybiAnJyBpZiBtL1w9XD8uKj9cP1w9LzsKKworICAgICMgdHJpbSB3aGl0ZXNwYWNlCisgICAgcy9eXHMrLy87CisgICAgcy9ccyskLy87CisgICAgcy9ccysvIC87CisKKyAgICAjIERpc3JlZ2FyZCBudW1lcmljIG5hbWVzIChlLmcuIDEyMzQ1Ni4xMjM0QGNvbXB1c2VydmUuY29tKQorICAgIHJldHVybiAiIiBpZiAvXltcZCBdKyQvOworCisgICAgcy9eXCgoLiopXCkkLyQxLzsgIyByZW1vdmUgb3V0ZXJtb3N0IHBhcmVudGhlc2lzCisgICAgcy9eIiguKikiJC8kMS87ICAgIyByZW1vdmUgb3V0ZXIgcXVvdGF0aW9uIG1hcmtzCisgICAgcy9cKC4qP1wpLy9nOyAgICAgIyByZW1vdmUgbWluaW1hbCBlbWJlZGRlZCBjb21tZW50cworICAgIHMvXFwvL2c7ICAgICAgICAgICMgcmVtb3ZlIGFsbCBlc2NhcGVzCisgICAgcy9eIiguKikiJC8kMS87ICAgIyByZW1vdmUgaW50ZXJuYWwgcXVvdGF0aW9uIG1hcmtzCisgICAgcy9eKFteXHNdKykgPywgPyguKikkLyQyICQxLzsgIyByZXZlcnNlICJMYXN0LCBGaXJzdCBNLiIgaWYgYXBwbGljYWJsZQorICAgIHMvLC4qLy87CisKKyAgICAjIENoYW5nZSBjYXNpbmcgb25seSB3aGVuIHRoZSBuYW1lIGNvbnRhaW5zIG9ubHkgdXBwZXIgb3Igb25seQorICAgICMgbG93ZXIgY2FzZWQgY2hhcmFjdGVycy4KKyAgICB1bmxlc3MoIG0vW0EtWl0vICYmIG0vW2Etel0vICkKKyAgICB7ICAgIyBTZXQgdGhlIGNhc2Ugb2YgdGhlIG5hbWUgdG8gZmlyc3QgY2hhciB1cHBlciByZXN0IGxvd2VyCisgICAgICAgIHMvXGIoXHcrKS9cTFx1JDEvaWdvOyAgIyBVcGNhc2UgZmlyc3QgbGV0dGVyIG9uIG5hbWUKKyAgICAgICAgcy9cYk1jKFx3KS9NY1x1JDEvaWdvOyAjIFNjb3R0aXNoIG5hbWVzIHN1Y2ggYXMgJ01jTGVvZCcKKyAgICAgICAgcy9cYm8nKFx3KS9PJ1x1JDEvaWdvOyAjIElyaXNoIG5hbWVzIHN1Y2ggYXMgJ08nTWFsbGV5LCBPJ1JlaWxseScKKyAgICAgICAgcy9cYih4KihpeCk/diooaXYpP2kqKVxiL1xVJDEvaWdvOyAjIFJvbWFuIG51bWVyYWxzLCBlZyAnTGV2ZWwgSUlJIFN1cHBvcnQnCisgICAgfQorCisgICAgIyBzb21lIGNsZWFudXAKKyAgICBzL1xbW15cXV0qXF0vL2c7CisgICAgcy8oXltccyciXSt8W1xzJyJdKyQpLy9nOworICAgIHMvXHN7Mix9LyAvZzsKKworICAgICRfOworfQorCitzdWIgX3Rva2VuaXNlCit7ICAgbG9jYWwgJF8gPSBqb2luICcsJywgQF87CisgICAgbXkgKEB3b3Jkcywkc25pcHBldCwkZmllbGQpOworCisgICAgcy9cQVxzKy8vOworICAgIHMvW1xyXG5dKy8gL2c7CisKKyAgICB3aGlsZSAoJF8gbmUgJycpCisgICAgeyAgICRmaWVsZCA9ICcnOworICAgICAgICBpZihzL15ccypcKC8oLyApICAgICMgKC4uLikKKyAgICAgICAgeyAgIG15ICRkZXB0aCA9IDA7CisKKyAgICAgUEFSRU46IHdoaWxlKHMvXihcKChbXlwoXClcXF18XFwuKSopLy8pCisgICAgICAgICAgICB7ICAgJGZpZWxkIC49ICQxOworICAgICAgICAgICAgICAgICRkZXB0aCsrOworICAgICAgICAgICAgICAgIHdoaWxlKHMvXigoW15cKFwpXFxdfFxcLikqXClccyopLy8pCisgICAgICAgICAgICAgICAgeyAgICRmaWVsZCAuPSAkMTsKKyAgICAgICAgICAgICAgICAgICAgbGFzdCBQQVJFTiB1bmxlc3MgLS0kZGVwdGg7CisJICAgICAgICAgICAgJGZpZWxkIC49ICQxIGlmIHMvXigoW15cKFwpXFxdfFxcLikrKS8vOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FycCAiVW5tYXRjaGVkICgpICckZmllbGQnICckXyciCisgICAgICAgICAgICAgICAgaWYgJGRlcHRoOworCisgICAgICAgICAgICAkZmllbGQgPX4gcy9ccytcWi8vOworICAgICAgICAgICAgcHVzaCBAd29yZHMsICRmaWVsZDsKKworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBzL14oIig/OlteIlxcXSt8XFwuKSoiKVxzKi8vICAgICAgICMgIi4uLiIKKyAgICAgICAgIHx8IHMvXihcWyg/OlteXF1cXF0rfFxcLikqXF0pXHMqLy8gICAgIyBbLi4uXQorICAgICAgICAgfHwgcy9eKFteXHMoKTw+XEAsOzpcXCIuW1xdXSspXHMqLy8KKyAgICAgICAgIHx8IHMvXihbKCk8PlxALDs6XFwiLltcXV0pXHMqLy8KKyAgICAgICAgICApCisgICAgICAgIHsgICBwdXNoIEB3b3JkcywgJDE7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgY3JvYWsgIlVucmVjb2duaXNlZCBsaW5lOiAkXyI7CisgICAgfQorCisgICAgcHVzaCBAd29yZHMsICIsIjsKKyAgICBcQHdvcmRzOworfQorCitzdWIgX2ZpbmRfbmV4dAoreyAgIG15ICgkaWR4LCAkdG9rZW5zLCAkbGVuKSA9IEBfOworCisgICAgd2hpbGUoJGlkeCA8ICRsZW4pCisgICAgeyAgIG15ICRjID0gJHRva2Vucy0+WyRpZHhdOworICAgICAgICByZXR1cm4gJGMgaWYgJGMgZXEgJywnIHx8ICRjIGVxICc7JyB8fCAkYyBlcSAnPCc7CisgICAgICAgICRpZHgrKzsKKyAgICB9CisKKyAgICAiIjsKK30KKworc3ViIF9jb21wbGV0ZQoreyAgIG15ICgkY2xhc3MsICRwaHJhc2UsICRhZGRyZXNzLCAkY29tbWVudCkgPSBAXzsKKworICAgIEAkcGhyYXNlIHx8IEAkY29tbWVudCB8fCBAJGFkZHJlc3MKKyAgICAgICBvciByZXR1cm4gdW5kZWY7CisKKyAgICBteSAkbyA9ICRjbGFzcy0+bmV3KGpvaW4oIiAiLEAkcGhyYXNlKSwgam9pbigiIixAJGFkZHJlc3MpLCBqb2luKCIgIixAJGNvbW1lbnQpKTsKKyAgICBAJHBocmFzZSA9IEAkYWRkcmVzcyA9IEAkY29tbWVudCA9ICgpOworICAgICRvOworfQorCisjLS0tLS0tLS0tLS0tCisKK3N1YiBuZXcoQCkKK3sgICBteSAkY2xhc3MgPSBzaGlmdDsKKyAgICBibGVzcyBbQF9dLCAkY2xhc3M7Cit9CisKKworc3ViIHBhcnNlKEApCit7ICAgbXkgJGNsYXNzID0gc2hpZnQ7CisgICAgbXkgQGxpbmUgID0gZ3JlcCB7ZGVmaW5lZH0gQF87CisgICAgbXkgJGxpbmUgID0gam9pbiAnJywgQGxpbmU7CisKKyAgICBteSAoQHBocmFzZSwgQGNvbW1lbnQsIEBhZGRyZXNzLCBAb2Jqcyk7CisgICAgbXkgKCRkZXB0aCwgJGlkeCkgPSAoMCwgMCk7CisKKyAgICBteSAkdG9rZW5zICA9IF90b2tlbmlzZSBAbGluZTsKKyAgICBteSAkbGVuICAgICA9IEAkdG9rZW5zOworICAgIG15ICRuZXh0ICAgID0gX2ZpbmRfbmV4dCAkaWR4LCAkdG9rZW5zLCAkbGVuOworCisgICAgbG9jYWwgJF87CisgICAgZm9yKG15ICRpZHggPSAwOyAkaWR4IDwgJGxlbjsgJGlkeCsrKQorICAgIHsgICAkXyA9ICR0b2tlbnMtPlskaWR4XTsKKworICAgICAgICBpZihzdWJzdHIoJF8sMCwxKSBlcSAnKCcpIHsgcHVzaCBAY29tbWVudCwgJF8gfQorICAgICAgICBlbHNpZigkXyBlcSAnPCcpICAgIHsgJGRlcHRoKysgfQorICAgICAgICBlbHNpZigkXyBlcSAnPicpICAgIHsgJGRlcHRoLS0gaWYgJGRlcHRoIH0KKyAgICAgICAgZWxzaWYoJF8gZXEgJywnIHx8ICRfIGVxICc7JykKKyAgICAgICAgeyAgIHdhcm4gIlVubWF0Y2hlZCAnPD4nIGluICRsaW5lIiBpZiAkZGVwdGg7CisgICAgICAgICAgICBteSAkbyA9ICRjbGFzcy0+X2NvbXBsZXRlKFxAcGhyYXNlLCBcQGFkZHJlc3MsIFxAY29tbWVudCk7CisgICAgICAgICAgICBwdXNoIEBvYmpzLCAkbyBpZiBkZWZpbmVkICRvOworICAgICAgICAgICAgJGRlcHRoID0gMDsKKyAgICAgICAgICAgICRuZXh0ID0gX2ZpbmRfbmV4dCAkaWR4KzEsICR0b2tlbnMsICRsZW47CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJGRlcHRoKSAgICAgICB7IHB1c2ggQGFkZHJlc3MsICRfIH0KKyAgICAgICAgZWxzaWYoJG5leHQgZXEgJzwnKSB7IHB1c2ggQHBocmFzZSwgICRfIH0KKyAgICAgICAgZWxzaWYoIC9eWy5cQDo7XSQvIHx8ICFAYWRkcmVzcyB8fCAkYWRkcmVzc1stMV0gPX4gL15bLlxAOjtdJC8gKQorICAgICAgICB7ICAgcHVzaCBAYWRkcmVzcywgJF8gfQorICAgICAgICBlbHNlCisgICAgICAgIHsgICB3YXJuICJVbm1hdGNoZWQgJzw+JyBpbiAkbGluZSIgaWYgJGRlcHRoOworICAgICAgICAgICAgbXkgJG8gPSAkY2xhc3MtPl9jb21wbGV0ZShcQHBocmFzZSwgXEBhZGRyZXNzLCBcQGNvbW1lbnQpOworICAgICAgICAgICAgcHVzaCBAb2JqcywgJG8gaWYgZGVmaW5lZCAkbzsKKyAgICAgICAgICAgICRkZXB0aCA9IDA7CisgICAgICAgICAgICBwdXNoIEBhZGRyZXNzLCAkXzsKKyAgICAgICAgfQorICAgIH0KKyAgICBAb2JqczsKK30KKworIy0tLS0tLS0tLS0tLQorCitzdWIgcGhyYXNlICB7IHNoaWZ0LT5zZXRfb3JfZ2V0KDAsIEBfKSB9CitzdWIgYWRkcmVzcyB7IHNoaWZ0LT5zZXRfb3JfZ2V0KDEsIEBfKSB9CitzdWIgY29tbWVudCB7IHNoaWZ0LT5zZXRfb3JfZ2V0KDIsIEBfKSB9CisKK3N1YiBzZXRfb3JfZ2V0KCQpCit7ICAgbXkgKCRzZWxmLCAkaSkgPSAoc2hpZnQsIHNoaWZ0KTsKKyAgICBAXyBvciByZXR1cm4gJHNlbGYtPlskaV07CisKKyAgICBteSAkdmFsID0gJHNlbGYtPlskaV07CisgICAgJHNlbGYtPlskaV0gPSBzaGlmdCBpZiBAXzsKKyAgICAkdmFsOworfQorCisKK215ICRhdGV4dCA9ICdbXC1cdyAhIyQlJlwnKisvPT9eYHt8fX5dJzsKK3N1YiBmb3JtYXQKK3sgICBteSBAYWRkcnM7CisKKyAgICBmb3JlYWNoIChAXykKKyAgICB7ICAgbXkgKCRwaHJhc2UsICRlbWFpbCwgJGNvbW1lbnQpID0gQCRfOworICAgICAgICBteSBAYWRkcjsKKworICAgICAgICBpZihkZWZpbmVkICRwaHJhc2UgJiYgbGVuZ3RoICRwaHJhc2UpCisgICAgICAgIHsgICBwdXNoIEBhZGRyCisgICAgICAgICAgICAgICwgJHBocmFzZSA9fiAvXig/OlxzKiRhdGV4dFxzKikrJC9vID8gJHBocmFzZQorICAgICAgICAgICAgICA6ICRwaHJhc2UgPX4gLyg/PCFcXCkiLyAgICAgICAgICAgICA/ICRwaHJhc2UKKyAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFxKCIkcGhyYXNlIik7CisKKyAgICAgICAgICAgIHB1c2ggQGFkZHIsICI8JGVtYWlsPiIKKyAgICAgICAgICAgICAgICBpZiBkZWZpbmVkICRlbWFpbCAmJiBsZW5ndGggJGVtYWlsOworICAgICAgICB9CisgICAgICAgIGVsc2lmKGRlZmluZWQgJGVtYWlsICYmIGxlbmd0aCAkZW1haWwpCisgICAgICAgIHsgICBwdXNoIEBhZGRyLCAkZW1haWw7CisgICAgICAgIH0KKworICAgICAgICBpZihkZWZpbmVkICRjb21tZW50ICYmICRjb21tZW50ID1+IC9cUy8pCisgICAgICAgIHsgICAkY29tbWVudCA9fiBzL15ccypcKD8vKC87CisgICAgICAgICAgICAkY29tbWVudCA9fiBzL1wpP1xzKiQvKS87CisgICAgICAgIH0KKworICAgICAgICBwdXNoIEBhZGRyLCAkY29tbWVudAorICAgICAgICAgICAgaWYgZGVmaW5lZCAkY29tbWVudCAmJiBsZW5ndGggJGNvbW1lbnQ7CisKKyAgICAgICAgcHVzaCBAYWRkcnMsIGpvaW4oIiAiLCBAYWRkcikKKyAgICAgICAgICAgIGlmIEBhZGRyOworICAgIH0KKworICAgIGpvaW4gIiwgIiwgQGFkZHJzOworfQorCisjLS0tLS0tLS0tLS0tCisKK3N1YiBuYW1lCit7ICAgbXkgJHNlbGYgICA9IHNoaWZ0OworICAgIG15ICRwaHJhc2UgPSAkc2VsZi0+cGhyYXNlOworICAgIG15ICRhZGRyICAgPSAkc2VsZi0+YWRkcmVzczsKKworICAgICRwaHJhc2UgICAgPSAkc2VsZi0+Y29tbWVudAorICAgICAgICB1bmxlc3MgZGVmaW5lZCAkcGhyYXNlICYmIGxlbmd0aCAkcGhyYXNlOworCisgICAgbXkgJG5hbWUgICA9ICRzZWxmLT5fZXh0cmFjdF9uYW1lKCRwaHJhc2UpOworCisgICAgIyBmaXJzdC5sYXN0QGRvbWFpbiBhZGRyZXNzCisgICAgaWYoJG5hbWUgZXEgJycgJiYgJGFkZHIgPX4gLyhbXlwlXC5cQF9dKyhbXC5fXVteXCVcLlxAX10rKSspW1xAXCVdLykKKyAgICB7ICAgKCRuYW1lICA9ICQxKSA9fiBzL1tcLl9dKy8gL2c7CisJJG5hbWUgICA9IF9leHRyYWN0X25hbWUgJG5hbWU7CisgICAgfQorCisgICAgaWYoJG5hbWUgZXEgJycgJiYgJGFkZHIgPX4gbSMvZz0jaSkgICAgIyBYNDAwIHN0eWxlIGFkZHJlc3MKKyAgICB7ICAgbXkgKCRmKSA9ICRhZGRyID1+IG0jZz0oW14vXSopI2k7CisJbXkgKCRsKSA9ICRhZGRyID1+IG0jcz0oW14vXSopI2k7CisJJG5hbWUgICA9IF9leHRyYWN0X25hbWUgIiRmICRsIjsKKyAgICB9CisKKyAgICBsZW5ndGggJG5hbWUgPyAkbmFtZSA6IHVuZGVmOworfQorCisKK3N1YiBob3N0Cit7ICAgbXkgJGFkZHIgPSBzaGlmdC0+YWRkcmVzcyB8fCAnJzsKKyAgICBteSAkaSAgICA9IHJpbmRleCAkYWRkciwgJ0AnOworICAgICRpID49IDAgPyBzdWJzdHIoJGFkZHIsICRpKzEpIDogdW5kZWY7Cit9CisKKworc3ViIHVzZXIKK3sgICBteSAkYWRkciA9IHNoaWZ0LT5hZGRyZXNzIHx8ICcnOworICAgIG15ICRpICAgID0gcmluZGV4ICRhZGRyLCAnQCc7CisgICAgJGkgPj0gMCA/IHN1YnN0cigkYWRkciwwLCRpKSA6ICRhZGRyOworfQorCisxOwpkaWZmIC0tZ2l0IGEvcGVybC9HaXQucG0gYi9wZXJsL0dpdC5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGM5ZWQwCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9HaXQucG0KQEAgLTAsMCArMSwxNzMwIEBACis9aGVhZDEgTkFNRQorCitHaXQgLSBQZXJsIGludGVyZmFjZSB0byB0aGUgR2l0IHZlcnNpb24gY29udHJvbCBzeXN0ZW0KKworPWN1dAorCisKK3BhY2thZ2UgR2l0OworCit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgRmlsZTo6VGVtcCAoKTsKK3VzZSBGaWxlOjpTcGVjICgpOworCitCRUdJTiB7CisKK291ciAoJFZFUlNJT04sIEBJU0EsIEBFWFBPUlQsIEBFWFBPUlRfT0spOworCisjIFRvdGFsbHkgdW5zdGFibGUgQVBJLgorJFZFUlNJT04gPSAnMC4wMSc7CisKKworPWhlYWQxIFNZTk9QU0lTCisKKyAgdXNlIEdpdDsKKworICBteSAkdmVyc2lvbiA9IEdpdDo6Y29tbWFuZF9vbmVsaW5lKCd2ZXJzaW9uJyk7CisKKyAgZ2l0X2NtZF90cnkgeyBHaXQ6OmNvbW1hbmRfbm9pc3koJ3VwZGF0ZS1zZXJ2ZXItaW5mbycpIH0KKyAgICAgICAgICAgICAgJyVzIGZhaWxlZCB3LyBjb2RlICVkJzsKKworICBteSAkcmVwbyA9IEdpdC0+cmVwb3NpdG9yeSAoRGlyZWN0b3J5ID0+ICcvc3J2L2dpdC9jb2dpdG8uZ2l0Jyk7CisKKworICBteSBAcmV2cyA9ICRyZXBvLT5jb21tYW5kKCdyZXYtbGlzdCcsICctLXNpbmNlPWxhc3QgbW9uZGF5JywgJy0tYWxsJyk7CisKKyAgbXkgKCRmaCwgJGMpID0gJHJlcG8tPmNvbW1hbmRfb3V0cHV0X3BpcGUoJ3Jldi1saXN0JywgJy0tc2luY2U9bGFzdCBtb25kYXknLCAnLS1hbGwnKTsKKyAgbXkgJGxhc3RyZXYgPSA8JGZoPjsgY2hvbXAgJGxhc3RyZXY7CisgICRyZXBvLT5jb21tYW5kX2Nsb3NlX3BpcGUoJGZoLCAkYyk7CisKKyAgbXkgJGxhc3RyZXYgPSAkcmVwby0+Y29tbWFuZF9vbmVsaW5lKCBbICdyZXYtbGlzdCcsICctLWFsbCcgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVERFUlIgPT4gMCApOworCisgIG15ICRzaGExID0gJHJlcG8tPmhhc2hfYW5kX2luc2VydF9vYmplY3QoJ2ZpbGUudHh0Jyk7CisgIG15ICR0ZW1wZmlsZSA9IHRlbXBmaWxlKCk7CisgIG15ICRzaXplID0gJHJlcG8tPmNhdF9ibG9iKCRzaGExLCAkdGVtcGZpbGUpOworCis9Y3V0CisKKworcmVxdWlyZSBFeHBvcnRlcjsKKworQElTQSA9IHF3KEV4cG9ydGVyKTsKKworQEVYUE9SVCA9IHF3KGdpdF9jbWRfdHJ5KTsKKworIyBNZXRob2RzIHdoaWNoIGNhbiBiZSBjYWxsZWQgYXMgc3RhbmRhbG9uZSBmdW5jdGlvbnMgYXMgd2VsbDoKK0BFWFBPUlRfT0sgPSBxdyhjb21tYW5kIGNvbW1hbmRfb25lbGluZSBjb21tYW5kX25vaXN5CisgICAgICAgICAgICAgICAgY29tbWFuZF9vdXRwdXRfcGlwZSBjb21tYW5kX2lucHV0X3BpcGUgY29tbWFuZF9jbG9zZV9waXBlCisgICAgICAgICAgICAgICAgY29tbWFuZF9iaWRpX3BpcGUgY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUKKyAgICAgICAgICAgICAgICB2ZXJzaW9uIGV4ZWNfcGF0aCBodG1sX3BhdGggaGFzaF9vYmplY3QgZ2l0X2NtZF90cnkKKyAgICAgICAgICAgICAgICByZW1vdGVfcmVmcyBwcm9tcHQKKyAgICAgICAgICAgICAgICBnZXRfdHpfb2Zmc2V0IGdldF9yZWNvcmQKKyAgICAgICAgICAgICAgICBjcmVkZW50aWFsIGNyZWRlbnRpYWxfcmVhZCBjcmVkZW50aWFsX3dyaXRlCisgICAgICAgICAgICAgICAgdGVtcF9hY3F1aXJlIHRlbXBfaXNfbG9ja2VkIHRlbXBfcmVsZWFzZSB0ZW1wX3Jlc2V0IHRlbXBfcGF0aAorICAgICAgICAgICAgICAgIHVucXVvdGVfcGF0aCk7CisKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIFBlcmwgc2NyaXB0cyBlYXN5IHdheSB0byBpbnRlcmZhY2UgdGhlIEdpdCB2ZXJzaW9uIGNvbnRyb2wKK3N5c3RlbS4gVGhlIG1vZHVsZXMgaGF2ZSBhbiBlYXN5IGFuZCB3ZWxsLXRlc3RlZCB3YXkgdG8gY2FsbCBhcmJpdHJhcnkgR2l0Citjb21tYW5kczsgaW4gdGhlIGZ1dHVyZSwgdGhlIGludGVyZmFjZSB3aWxsIGFsc28gcHJvdmlkZSBzcGVjaWFsaXplZCBtZXRob2RzCitmb3IgZG9pbmcgZWFzaWx5IG9wZXJhdGlvbnMgd2hpY2ggYXJlIG5vdCB0b3RhbGx5IHRyaXZpYWwgdG8gZG8gb3ZlcgordGhlIGdlbmVyaWMgY29tbWFuZCBpbnRlcmZhY2UuCisKK1doaWxlIHNvbWUgY29tbWFuZHMgY2FuIGJlIGV4ZWN1dGVkIG91dHNpZGUgb2YgYW55IGNvbnRleHQgKGUuZy4gJ3ZlcnNpb24nCitvciAnaW5pdCcpLCBtb3N0IG9wZXJhdGlvbnMgcmVxdWlyZSBhIHJlcG9zaXRvcnkgY29udGV4dCwgd2hpY2ggaW4gcHJhY3RpY2UKK21lYW5zIGdldHRpbmcgYW4gaW5zdGFuY2Ugb2YgdGhlIEdpdCBvYmplY3QgdXNpbmcgdGhlIHJlcG9zaXRvcnkoKSBjb25zdHJ1Y3Rvci4KKyhJbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGFsc28gZ2V0IGEgbmV3X3JlcG9zaXRvcnkoKSBjb25zdHJ1Y3Rvci4pIEFsbCBjb21tYW5kcworY2FsbGVkIGFzIG1ldGhvZHMgb2YgdGhlIG9iamVjdCBhcmUgdGhlbiBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUKK3JlcG9zaXRvcnkuCisKK1BhcnQgb2YgdGhlICJyZXBvc2l0b3J5IHN0YXRlIiBpcyBhbHNvIGluZm9ybWF0aW9uIGFib3V0IHBhdGggdG8gdGhlIGF0dGFjaGVkCit3b3JraW5nIGNvcHkgKHVubGVzcyB5b3Ugd29yayB3aXRoIGEgYmFyZSByZXBvc2l0b3J5KS4gWW91IGNhbiBhbHNvIG5hdmlnYXRlCitpbnNpZGUgb2YgdGhlIHdvcmtpbmcgY29weSB1c2luZyB0aGUgQzx3Y19jaGRpcigpPiBtZXRob2QuIChOb3RlIHRoYXQKK3RoZSByZXBvc2l0b3J5IG9iamVjdCBpcyBzZWxmLWNvbnRhaW5lZCBhbmQgd2lsbCBub3QgY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5CitvZiB5b3VyIHByb2Nlc3MuKQorCitUT0RPOiBJbiB0aGUgZnV0dXJlLCB3ZSBtaWdodCBhbHNvIGRvCisKKwlteSAkcmVtb3RlcmVwbyA9ICRyZXBvLT5yZW1vdGVfcmVwb3NpdG9yeSAoTmFtZSA9PiAnY29naXRvJywgQnJhbmNoID0+ICdtYXN0ZXInKTsKKwkkcmVtb3RlcmVwbyB8fD0gR2l0LT5yZW1vdGVfcmVwb3NpdG9yeSAoJ2h0dHA6Ly9naXQub3IuY3ovY29naXRvLmdpdC8nKTsKKwlteSBAcmVmcyA9ICRyZW1vdGVyZXBvLT5yZWZzKCk7CisKK0N1cnJlbnRseSwgdGhlIG1vZHVsZSBtZXJlbHkgd3JhcHMgY2FsbHMgdG8gZXh0ZXJuYWwgR2l0IHRvb2xzLiBJbiB0aGUgZnV0dXJlLAoraXQgd2lsbCBwcm92aWRlIGEgbXVjaCBmYXN0ZXIgd2F5IHRvIGludGVyYWN0IHdpdGggR2l0IGJ5IGxpbmtpbmcgZGlyZWN0bHkKK3RvIGxpYmdpdC4gVGhpcyBzaG91bGQgYmUgY29tcGxldGVseSBvcGFxdWUgdG8gdGhlIHVzZXIsIHRob3VnaCAocGVyZm9ybWFuY2UKK2luY3JlYXNlIG5vdHdpdGhzdGFuZGluZykuCisKKz1jdXQKKworCit1c2UgQ2FycCBxdyhjYXJwIGNyb2FrKTsgIyBidXQgY3JvYWsgaXMgYmFkIC0gdGhyb3cgaW5zdGVhZAordXNlIEdpdDo6TG9hZENQQU46OkVycm9yIHF3KDp0cnkpOwordXNlIEN3ZCBxdyhhYnNfcGF0aCBjd2QpOwordXNlIElQQzo6T3BlbjIgcXcob3BlbjIpOwordXNlIEZjbnRsIHF3KFNFRUtfU0VUIFNFRUtfQ1VSKTsKK3VzZSBUaW1lOjpMb2NhbCBxdyh0aW1lZ20pOworfQorCisKKz1oZWFkMSBDT05TVFJVQ1RPUlMKKworPW92ZXIgNAorCis9aXRlbSByZXBvc2l0b3J5ICggT1BUSU9OUyApCisKKz1pdGVtIHJlcG9zaXRvcnkgKCBESVJFQ1RPUlkgKQorCis9aXRlbSByZXBvc2l0b3J5ICgpCisKK0NvbnN0cnVjdCBhIG5ldyByZXBvc2l0b3J5IG9iamVjdC4KK0M8T1BUSU9OUz4gYXJlIHBhc3NlZCBpbiBhIGhhc2ggbGlrZSBmYXNoaW9uLCB1c2luZyBrZXkgYW5kIHZhbHVlIHBhaXJzLgorUG9zc2libGUgb3B0aW9ucyBhcmU6CisKK0I8UmVwb3NpdG9yeT4gLSBQYXRoIHRvIHRoZSBHaXQgcmVwb3NpdG9yeS4KKworQjxXb3JraW5nQ29weT4gLSBQYXRoIHRvIHRoZSBhc3NvY2lhdGVkIHdvcmtpbmcgY29weTsgbm90IHN0cmljdGx5IHJlcXVpcmVkCithcyBtYW55IGNvbW1hbmRzIHdpbGwgaGFwcGlseSBjcnVuY2ggb24gYSBiYXJlIHJlcG9zaXRvcnkuCisKK0I8V29ya2luZ1N1YmRpcj4gLSBTdWJkaXJlY3RvcnkgaW4gdGhlIHdvcmtpbmcgY29weSB0byB3b3JrIGluc2lkZS4KK0p1c3QgbGVmdCB1bmRlZmluZWQgaWYgeW91IGRvIG5vdCB3YW50IHRvIGxpbWl0IHRoZSBzY29wZSBvZiBvcGVyYXRpb25zLgorCitCPERpcmVjdG9yeT4gLSBQYXRoIHRvIHRoZSBHaXQgd29ya2luZyBkaXJlY3RvcnkgaW4gaXRzIHVzdWFsIHNldHVwLgorVGhlIEM8LmdpdD4gZGlyZWN0b3J5IGlzIHNlYXJjaGVkIGluIHRoZSBkaXJlY3RvcnkgYW5kIGFsbCB0aGUgcGFyZW50CitkaXJlY3RvcmllczsgaWYgZm91bmQsIEM8V29ya2luZ0NvcHk+IGlzIHNldCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcKK2l0IGFuZCBDPFJlcG9zaXRvcnk+IHRvIHRoZSBDPC5naXQ+IGRpcmVjdG9yeSBpdHNlbGYuIElmIG5vIEM8LmdpdD4KK2RpcmVjdG9yeSB3YXMgZm91bmQsIHRoZSBDPERpcmVjdG9yeT4gaXMgYXNzdW1lZCB0byBiZSBhIGJhcmUgcmVwb3NpdG9yeSwKK0M8UmVwb3NpdG9yeT4gaXMgc2V0IHRvIHBvaW50IGF0IGl0IGFuZCBDPFdvcmtpbmdDb3B5PiBpcyBsZWZ0IHVuZGVmaW5lZC4KK0lmIHRoZSBDPCRHSVRfRElSPiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIHRoaW5ncyBiZWhhdmUgYXMgZXhwZWN0ZWQKK2FzIHdlbGwuCisKK1lvdSBzaG91bGQgbm90IHVzZSBib3RoIEM8RGlyZWN0b3J5PiBhbmQgZWl0aGVyIG9mIEM8UmVwb3NpdG9yeT4gYW5kCitDPFdvcmtpbmdDb3B5PiAtIHRoZSByZXN1bHRzIG9mIHRoYXQgYXJlIHVuZGVmaW5lZC4KKworQWx0ZXJuYXRpdmVseSwgYSBkaXJlY3RvcnkgcGF0aCBtYXkgYmUgcGFzc2VkIGFzIGEgc2luZ2xlIHNjYWxhciBhcmd1bWVudAordG8gdGhlIGNvbnN0cnVjdG9yOyBpdCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgb25seSB0aGUgQzxEaXJlY3Rvcnk+IG9wdGlvbgorZmllbGQuCisKK0NhbGxpbmcgdGhlIGNvbnN0cnVjdG9yIHdpdGggbm8gb3B0aW9ucyB3aGF0c29ldmVyIGlzIGVxdWl2YWxlbnQgdG8KK2NhbGxpbmcgaXQgd2l0aCBDPDwgRGlyZWN0b3J5ID0+ICcuJyA+Pi4gSW4gZ2VuZXJhbCwgaWYgeW91IGFyZSBidWlsZGluZworYSBzdGFuZGFyZCBwb3JjZWxhaW4gY29tbWFuZCwgc2ltcGx5IGRvaW5nIEM8PCBHaXQtPnJlcG9zaXRvcnkoKSA+PiBzaG91bGQKK2RvIHRoZSByaWdodCB0aGluZyBhbmQgc2V0dXAgdGhlIG9iamVjdCB0byByZWZsZWN0IGV4YWN0bHkgd2hlcmUgdGhlIHVzZXIKK2lzIHJpZ2h0IG5vdy4KKworPWN1dAorCitzdWIgcmVwb3NpdG9yeSB7CisJbXkgJGNsYXNzID0gc2hpZnQ7CisJbXkgQGFyZ3MgPSBAXzsKKwlteSAlb3B0cyA9ICgpOworCW15ICRzZWxmOworCisJaWYgKGRlZmluZWQgJGFyZ3NbMF0pIHsKKwkJaWYgKCQjYXJncyAlIDIgIT0gMSkgeworCQkJIyBOb3QgYSBoYXNoLgorCQkJJCNhcmdzID09IDAgb3IgdGhyb3cgRXJyb3I6OlNpbXBsZSgiYmFkIHVzYWdlIik7CisJCQklb3B0cyA9ICggRGlyZWN0b3J5ID0+ICRhcmdzWzBdICk7CisJCX0gZWxzZSB7CisJCQklb3B0cyA9IEBhcmdzOworCQl9CisJfQorCisJaWYgKG5vdCBkZWZpbmVkICRvcHRze1JlcG9zaXRvcnl9IGFuZCBub3QgZGVmaW5lZCAkb3B0c3tXb3JraW5nQ29weX0KKwkJYW5kIG5vdCBkZWZpbmVkICRvcHRze0RpcmVjdG9yeX0pIHsKKwkJJG9wdHN7RGlyZWN0b3J5fSA9ICcuJzsKKwl9CisKKwlpZiAoZGVmaW5lZCAkb3B0c3tEaXJlY3Rvcnl9KSB7CisJCS1kICRvcHRze0RpcmVjdG9yeX0gb3IgdGhyb3cgRXJyb3I6OlNpbXBsZSgiRGlyZWN0b3J5IG5vdCBmb3VuZDogJG9wdHN7RGlyZWN0b3J5fSAkISIpOworCisJCW15ICRzZWFyY2ggPSBHaXQtPnJlcG9zaXRvcnkoV29ya2luZ0NvcHkgPT4gJG9wdHN7RGlyZWN0b3J5fSk7CisJCW15ICRkaXI7CisJCXRyeSB7CisJCQkkZGlyID0gJHNlYXJjaC0+Y29tbWFuZF9vbmVsaW5lKFsncmV2LXBhcnNlJywgJy0tZ2l0LWRpciddLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVERFUlIgPT4gMCk7CisJCX0gY2F0Y2ggR2l0OjpFcnJvcjo6Q29tbWFuZCB3aXRoIHsKKwkJCSRkaXIgPSB1bmRlZjsKKwkJfTsKKworCQlpZiAoJGRpcikgeworCQkJRmlsZTo6U3BlYy0+ZmlsZV9uYW1lX2lzX2Fic29sdXRlKCRkaXIpIG9yICRkaXIgPSAkb3B0c3tEaXJlY3Rvcnl9IC4gJy8nIC4gJGRpcjsKKwkJCSRvcHRze1JlcG9zaXRvcnl9ID0gYWJzX3BhdGgoJGRpcik7CisKKwkJCSMgSWYgLS1naXQtZGlyIHdlbnQgb2ssIHRoaXMgc2hvdWxkbid0IGRpZSBlaXRoZXIuCisJCQlteSAkcHJlZml4ID0gJHNlYXJjaC0+Y29tbWFuZF9vbmVsaW5lKCdyZXYtcGFyc2UnLCAnLS1zaG93LXByZWZpeCcpOworCQkJJGRpciA9IGFic19wYXRoKCRvcHRze0RpcmVjdG9yeX0pIC4gJy8nOworCQkJaWYgKCRwcmVmaXgpIHsKKwkJCQlpZiAoc3Vic3RyKCRkaXIsIC1sZW5ndGgoJHByZWZpeCkpIG5lICRwcmVmaXgpIHsKKwkJCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgicmV2LXBhcnNlIGNvbmZ1c2VkIG1lIC0gJGRpciBkb2VzIG5vdCBoYXZlIHRyYWlsaW5nICRwcmVmaXgiKTsKKwkJCQl9CisJCQkJc3Vic3RyKCRkaXIsIC1sZW5ndGgoJHByZWZpeCkpID0gJyc7CisJCQl9CisJCQkkb3B0c3tXb3JraW5nQ29weX0gPSAkZGlyOworCQkJJG9wdHN7V29ya2luZ1N1YmRpcn0gPSAkcHJlZml4OworCisJCX0gZWxzZSB7CisJCQkjIEEgYmFyZSByZXBvc2l0b3J5PyBMZXQncyBzZWUuLi4KKwkJCSRkaXIgPSAkb3B0c3tEaXJlY3Rvcnl9OworCisJCQl1bmxlc3MgKC1kICIkZGlyL3JlZnMiIGFuZCAtZCAiJGRpci9vYmplY3RzIiBhbmQgLWUgIiRkaXIvSEVBRCIpIHsKKwkJCQkjIE1pbWljIGdpdC1yZXYtcGFyc2UgLS1naXQtZGlyIGVycm9yIG1lc3NhZ2U6CisJCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiZmF0YWw6IE5vdCBhIGdpdCByZXBvc2l0b3J5OiAkZGlyIik7CisJCQl9CisJCQlteSAkc2VhcmNoID0gR2l0LT5yZXBvc2l0b3J5KFJlcG9zaXRvcnkgPT4gJGRpcik7CisJCQl0cnkgeworCQkJCSRzZWFyY2gtPmNvbW1hbmQoJ3N5bWJvbGljLXJlZicsICdIRUFEJyk7CisJCQl9IGNhdGNoIEdpdDo6RXJyb3I6OkNvbW1hbmQgd2l0aCB7CisJCQkJIyBNaW1pYyBnaXQtcmV2LXBhcnNlIC0tZ2l0LWRpciBlcnJvciBtZXNzYWdlOgorCQkJCXRocm93IEVycm9yOjpTaW1wbGUoImZhdGFsOiBOb3QgYSBnaXQgcmVwb3NpdG9yeTogJGRpciIpOworCQkJfQorCisJCQkkb3B0c3tSZXBvc2l0b3J5fSA9IGFic19wYXRoKCRkaXIpOworCQl9CisKKwkJZGVsZXRlICRvcHRze0RpcmVjdG9yeX07CisJfQorCisJJHNlbGYgPSB7IG9wdHMgPT4gXCVvcHRzIH07CisJYmxlc3MgJHNlbGYsICRjbGFzczsKK30KKworPWJhY2sKKworPWhlYWQxIE1FVEhPRFMKKworPW92ZXIgNAorCis9aXRlbSBjb21tYW5kICggQ09NTUFORCBbLCBBUkdVTUVOVFMuLi4gXSApCisKKz1pdGVtIGNvbW1hbmQgKCBbIENPTU1BTkQsIEFSR1VNRU5UUy4uLiBdLCB7IE9wdCA9PiBWYWwgLi4uIH0gKQorCitFeGVjdXRlIHRoZSBnaXZlbiBHaXQgQzxDT01NQU5EPiAoc3BlY2lmeSBpdCB3aXRob3V0IHRoZSAnZ2l0LScKK3ByZWZpeCksIG9wdGlvbmFsbHkgd2l0aCB0aGUgc3BlY2lmaWVkIGV4dHJhIEM8QVJHVU1FTlRTPi4KKworVGhlIHNlY29uZCBtb3JlIGVsYWJvcmF0ZSBmb3JtIGNhbiBiZSB1c2VkIGlmIHlvdSB3YW50IHRvIGZ1cnRoZXIgYWRqdXN0Cit0aGUgY29tbWFuZCBleGVjdXRpb24uIEN1cnJlbnRseSwgb25seSBvbmUgb3B0aW9uIGlzIHN1cHBvcnRlZDoKKworQjxTVERFUlI+IC0gSG93IHRvIGRlYWwgd2l0aCB0aGUgY29tbWFuZCdzIGVycm9yIG91dHB1dC4gQnkgZGVmYXVsdCAoQzx1bmRlZj4pCitpdCBpcyBkZWxpdmVyZWQgdG8gdGhlIGNhbGxlcidzIEM8U1RERVJSPi4gQSBmYWxzZSB2YWx1ZSAoMCBvciAnJykgd2lsbCBjYXVzZQoraXQgdG8gYmUgdGhyb3duIGF3YXkuIElmIHlvdSB3YW50IHRvIHByb2Nlc3MgaXQsIHlvdSBjYW4gZ2V0IGl0IGluIGEgZmlsZWhhbmRsZQoreW91IHNwZWNpZnksIGJ1dCB5b3UgbXVzdCBiZSBleHRyZW1lbHkgY2FyZWZ1bDsgaWYgdGhlIGVycm9yIG91dHB1dCBpcyBub3QKK3Zlcnkgc2hvcnQgYW5kIHlvdSB3YW50IHRvIHJlYWQgaXQgaW4gdGhlIHNhbWUgcHJvY2VzcyBhcyB3aGVyZSB5b3UgY2FsbGVkCitDPGNvbW1hbmQoKT4sIHlvdSBhcmUgc2V0IHVwIGZvciBhIG5pY2UgZGVhZGxvY2shCisKK1RoZSBtZXRob2QgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGFueSBpbnN0YW5jZSBvciBvbiBhIHNwZWNpZmllZCBHaXQgcmVwb3NpdG9yeQorKGluIHRoYXQgY2FzZSB0aGUgY29tbWFuZCB3aWxsIGJlIHJ1biBpbiB0aGUgcmVwb3NpdG9yeSBjb250ZXh0KS4KKworSW4gc2NhbGFyIGNvbnRleHQsIGl0IHJldHVybnMgYWxsIHRoZSBjb21tYW5kIG91dHB1dCBpbiBhIHNpbmdsZSBzdHJpbmcKKyh2ZXJiYXRpbSkuCisKK0luIGFycmF5IGNvbnRleHQsIGl0IHJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyBsaW5lcyBwcmludGVkIHRvIHRoZQorY29tbWFuZCdzIHN0ZG91dCAod2l0aG91dCB0cmFpbGluZyBuZXdsaW5lcykuCisKK0luIGJvdGggY2FzZXMsIHRoZSBjb21tYW5kJ3Mgc3RkaW4gYW5kIHN0ZGVyciBhcmUgdGhlIHNhbWUgYXMgdGhlIGNhbGxlcidzLgorCis9Y3V0CisKK3N1YiBjb21tYW5kIHsKKwlteSAoJGZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoQF8pOworCisJaWYgKG5vdCBkZWZpbmVkIHdhbnRhcnJheSkgeworCQkjIE5vdGhpbmcgdG8gcGVwcGVyIHRoZSBwb3NzaWJsZSBleGNlcHRpb24gd2l0aC4KKwkJX2NtZF9jbG9zZSgkY3R4LCAkZmgpOworCisJfSBlbHNpZiAobm90IHdhbnRhcnJheSkgeworCQlsb2NhbCAkLzsKKwkJbXkgJHRleHQgPSA8JGZoPjsKKwkJdHJ5IHsKKwkJCV9jbWRfY2xvc2UoJGN0eCwgJGZoKTsKKwkJfSBjYXRjaCBHaXQ6OkVycm9yOjpDb21tYW5kIHdpdGggeworCQkJIyBQZXBwZXIgd2l0aCB0aGUgb3V0cHV0OgorCQkJbXkgJEUgPSBzaGlmdDsKKwkJCSRFLT57Jy1vdXRwdXRyZWYnfSA9IFwkdGV4dDsKKwkJCXRocm93ICRFOworCQl9OworCQlyZXR1cm4gJHRleHQ7CisKKwl9IGVsc2UgeworCQlteSBAbGluZXMgPSA8JGZoPjsKKwkJZGVmaW5lZCBhbmQgY2hvbXAgZm9yIEBsaW5lczsKKwkJdHJ5IHsKKwkJCV9jbWRfY2xvc2UoJGN0eCwgJGZoKTsKKwkJfSBjYXRjaCBHaXQ6OkVycm9yOjpDb21tYW5kIHdpdGggeworCQkJbXkgJEUgPSBzaGlmdDsKKwkJCSRFLT57Jy1vdXRwdXRyZWYnfSA9IFxAbGluZXM7CisJCQl0aHJvdyAkRTsKKwkJfTsKKwkJcmV0dXJuIEBsaW5lczsKKwl9Cit9CisKKworPWl0ZW0gY29tbWFuZF9vbmVsaW5lICggQ09NTUFORCBbLCBBUkdVTUVOVFMuLi4gXSApCisKKz1pdGVtIGNvbW1hbmRfb25lbGluZSAoIFsgQ09NTUFORCwgQVJHVU1FTlRTLi4uIF0sIHsgT3B0ID0+IFZhbCAuLi4gfSApCisKK0V4ZWN1dGUgdGhlIGdpdmVuIEM8Q09NTUFORD4gaW4gdGhlIHNhbWUgd2F5IGFzIGNvbW1hbmQoKQorZG9lcyBidXQgYWx3YXlzIHJldHVybiBhIHNjYWxhciBzdHJpbmcgY29udGFpbmluZyB0aGUgZmlyc3QgbGluZQorb2YgdGhlIGNvbW1hbmQncyBzdGFuZGFyZCBvdXRwdXQuCisKKz1jdXQKKworc3ViIGNvbW1hbmRfb25lbGluZSB7CisJbXkgKCRmaCwgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKEBfKTsKKworCW15ICRsaW5lID0gPCRmaD47CisJZGVmaW5lZCAkbGluZSBhbmQgY2hvbXAgJGxpbmU7CisJdHJ5IHsKKwkJX2NtZF9jbG9zZSgkY3R4LCAkZmgpOworCX0gY2F0Y2ggR2l0OjpFcnJvcjo6Q29tbWFuZCB3aXRoIHsKKwkJIyBQZXBwZXIgd2l0aCB0aGUgb3V0cHV0OgorCQlteSAkRSA9IHNoaWZ0OworCQkkRS0+eyctb3V0cHV0cmVmJ30gPSBcJGxpbmU7CisJCXRocm93ICRFOworCX07CisJcmV0dXJuICRsaW5lOworfQorCisKKz1pdGVtIGNvbW1hbmRfb3V0cHV0X3BpcGUgKCBDT01NQU5EIFssIEFSR1VNRU5UUy4uLiBdICkKKworPWl0ZW0gY29tbWFuZF9vdXRwdXRfcGlwZSAoIFsgQ09NTUFORCwgQVJHVU1FTlRTLi4uIF0sIHsgT3B0ID0+IFZhbCAuLi4gfSApCisKK0V4ZWN1dGUgdGhlIGdpdmVuIEM8Q09NTUFORD4gaW4gdGhlIHNhbWUgd2F5IGFzIGNvbW1hbmQoKQorZG9lcyBidXQgcmV0dXJuIGEgcGlwZSBmaWxlaGFuZGxlIGZyb20gd2hpY2ggdGhlIGNvbW1hbmQgb3V0cHV0IGNhbiBiZQorcmVhZC4KKworVGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gQzwoJHBpcGUsICRjdHgpPiBpbiBhcnJheSBjb250ZXh0LgorU2VlIEM8Y29tbWFuZF9jbG9zZV9waXBlKCk+IGZvciBkZXRhaWxzLgorCis9Y3V0CisKK3N1YiBjb21tYW5kX291dHB1dF9waXBlIHsKKwlfY29tbWFuZF9jb21tb25fcGlwZSgnLXwnLCBAXyk7Cit9CisKKworPWl0ZW0gY29tbWFuZF9pbnB1dF9waXBlICggQ09NTUFORCBbLCBBUkdVTUVOVFMuLi4gXSApCisKKz1pdGVtIGNvbW1hbmRfaW5wdXRfcGlwZSAoIFsgQ09NTUFORCwgQVJHVU1FTlRTLi4uIF0sIHsgT3B0ID0+IFZhbCAuLi4gfSApCisKK0V4ZWN1dGUgdGhlIGdpdmVuIEM8Q09NTUFORD4gaW4gdGhlIHNhbWUgd2F5IGFzIGNvbW1hbmRfb3V0cHV0X3BpcGUoKQorZG9lcyBidXQgcmV0dXJuIGFuIGlucHV0IHBpcGUgZmlsZWhhbmRsZSBpbnN0ZWFkOyB0aGUgY29tbWFuZCBvdXRwdXQKK2lzIG5vdCBjYXB0dXJlZC4KKworVGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gQzwoJHBpcGUsICRjdHgpPiBpbiBhcnJheSBjb250ZXh0LgorU2VlIEM8Y29tbWFuZF9jbG9zZV9waXBlKCk+IGZvciBkZXRhaWxzLgorCis9Y3V0CisKK3N1YiBjb21tYW5kX2lucHV0X3BpcGUgeworCV9jb21tYW5kX2NvbW1vbl9waXBlKCd8LScsIEBfKTsKK30KKworCis9aXRlbSBjb21tYW5kX2Nsb3NlX3BpcGUgKCBQSVBFIFssIENUWCBdICkKKworQ2xvc2UgdGhlIEM8UElQRT4gYXMgcmV0dXJuZWQgZnJvbSBDPGNvbW1hbmRfKl9waXBlKCk+LCBjaGVja2luZword2hldGhlciB0aGUgY29tbWFuZCBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuIFRoZSBvcHRpb25hbCBDPENUWD4gYXJndW1lbnQKK2lzIHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgY29tbWFuZCBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlLAorYW5kIGl0IGlzIHRoZSBzZWNvbmQgdmFsdWUgcmV0dXJuZWQgYnkgQzxjb21tYW5kXypfcGlwZSgpPiB3aGVuCitjYWxsZWQgaW4gYXJyYXkgY29udGV4dC4gVGhlIGNhbGwgaWRpb20gaXM6CisKKwlteSAoJGZoLCAkY3R4KSA9ICRyLT5jb21tYW5kX291dHB1dF9waXBlKCdzdGF0dXMnKTsKKwl3aGlsZSAoPCRmaD4pIHsgLi4uIH0KKwkkci0+Y29tbWFuZF9jbG9zZV9waXBlKCRmaCwgJGN0eCk7CisKK05vdGUgdGhhdCB5b3Ugc2hvdWxkIG5vdCByZWx5IG9uIHdoYXRldmVyIGFjdHVhbGx5IGlzIGluIEM8Q1RYPjsKK2N1cnJlbnRseSBpdCBpcyBzaW1wbHkgdGhlIGNvbW1hbmQgbmFtZSBidXQgaW4gZnV0dXJlIHRoZSBjb250ZXh0IG1pZ2h0CitoYXZlIG1vcmUgY29tcGxpY2F0ZWQgc3RydWN0dXJlLgorCis9Y3V0CisKK3N1YiBjb21tYW5kX2Nsb3NlX3BpcGUgeworCW15ICgkc2VsZiwgJGZoLCAkY3R4KSA9IF9tYXliZV9zZWxmKEBfKTsKKwkkY3R4IHx8PSAnPHVua25vd24+JzsKKwlfY21kX2Nsb3NlKCRjdHgsICRmaCk7Cit9CisKKz1pdGVtIGNvbW1hbmRfYmlkaV9waXBlICggQ09NTUFORCBbLCBBUkdVTUVOVFMuLi4gXSApCisKK0V4ZWN1dGUgdGhlIGdpdmVuIEM8Q09NTUFORD4gaW4gdGhlIHNhbWUgd2F5IGFzIGNvbW1hbmRfb3V0cHV0X3BpcGUoKQorZG9lcyBidXQgcmV0dXJuIGJvdGggYW4gaW5wdXQgcGlwZSBmaWxlaGFuZGxlIGFuZCBhbiBvdXRwdXQgcGlwZSBmaWxlaGFuZGxlLgorCitUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gQzwoJHBpZCwgJHBpcGVfaW4sICRwaXBlX291dCwgJGN0eCk+LgorU2VlIEM8Y29tbWFuZF9jbG9zZV9iaWRpX3BpcGUoKT4gZm9yIGRldGFpbHMuCisKKz1jdXQKKworc3ViIGNvbW1hbmRfYmlkaV9waXBlIHsKKwlteSAoJHBpZCwgJGluLCAkb3V0KTsKKwlteSAoJHNlbGYpID0gX21heWJlX3NlbGYoQF8pOworCWxvY2FsICVFTlYgPSAlRU5WOworCW15ICRjd2Rfc2F2ZSA9IHVuZGVmOworCWlmICgkc2VsZikgeworCQlzaGlmdDsKKwkJJGN3ZF9zYXZlID0gY3dkKCk7CisJCV9zZXR1cF9naXRfY21kX2Vudigkc2VsZik7CisJfQorCSRwaWQgPSBvcGVuMigkaW4sICRvdXQsICdnaXQnLCBAXyk7CisJY2hkaXIoJGN3ZF9zYXZlKSBpZiAkY3dkX3NhdmU7CisJcmV0dXJuICgkcGlkLCAkaW4sICRvdXQsIGpvaW4oJyAnLCBAXykpOworfQorCis9aXRlbSBjb21tYW5kX2Nsb3NlX2JpZGlfcGlwZSAoIFBJRCwgUElQRV9JTiwgUElQRV9PVVQgWywgQ1RYXSApCisKK0Nsb3NlIHRoZSBDPFBJUEVfSU4+IGFuZCBDPFBJUEVfT1VUPiBhcyByZXR1cm5lZCBmcm9tIEM8Y29tbWFuZF9iaWRpX3BpcGUoKT4sCitjaGVja2luZyB3aGV0aGVyIHRoZSBjb21tYW5kIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4gVGhlIG9wdGlvbmFsIEM8Q1RYPgorYXJndW1lbnQgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gc2VlIHRoZSBjb21tYW5kIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2UsCithbmQgaXQgaXMgdGhlIGZvdXJ0aCB2YWx1ZSByZXR1cm5lZCBieSBDPGNvbW1hbmRfYmlkaV9waXBlKCk+LiAgVGhlIGNhbGwgaWRpb20KK2lzOgorCisJbXkgKCRwaWQsICRpbiwgJG91dCwgJGN0eCkgPSAkci0+Y29tbWFuZF9iaWRpX3BpcGUoJ2NhdC1maWxlIC0tYmF0Y2gtY2hlY2snKTsKKwlwcmludCAkb3V0ICIwMDAwMDAwMDBcbiI7CisJd2hpbGUgKDwkaW4+KSB7IC4uLiB9CisJJHItPmNvbW1hbmRfY2xvc2VfYmlkaV9waXBlKCRwaWQsICRpbiwgJG91dCwgJGN0eCk7CisKK05vdGUgdGhhdCB5b3Ugc2hvdWxkIG5vdCByZWx5IG9uIHdoYXRldmVyIGFjdHVhbGx5IGlzIGluIEM8Q1RYPjsKK2N1cnJlbnRseSBpdCBpcyBzaW1wbHkgdGhlIGNvbW1hbmQgbmFtZSBidXQgaW4gZnV0dXJlIHRoZSBjb250ZXh0IG1pZ2h0CitoYXZlIG1vcmUgY29tcGxpY2F0ZWQgc3RydWN0dXJlLgorCitDPFBJUEVfSU4+IGFuZCBDPFBJUEVfT1VUPiBtYXkgYmUgQzx1bmRlZj4gaWYgdGhleSBoYXZlIGJlZW4gY2xvc2VkIHByaW9yIHRvCitjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICBUaGlzIG1heSBiZSB1c2VmdWwgaW4gYSBxdWVyeS1yZXNwb25zZSB0eXBlIG9mCitjb21tYW5kcyB3aGVyZSBjYWxsZXIgZmlyc3Qgd3JpdGVzIGEgcXVlcnkgYW5kIGxhdGVyIHJlYWRzIHJlc3BvbnNlLCBlZzoKKworCW15ICgkcGlkLCAkaW4sICRvdXQsICRjdHgpID0gJHItPmNvbW1hbmRfYmlkaV9waXBlKCdjYXQtZmlsZSAtLWJhdGNoLWNoZWNrJyk7CisJcHJpbnQgJG91dCAiMDAwMDAwMDAwXG4iOworCWNsb3NlICRvdXQ7CisJd2hpbGUgKDwkaW4+KSB7IC4uLiB9CisJJHItPmNvbW1hbmRfY2xvc2VfYmlkaV9waXBlKCRwaWQsICRpbiwgdW5kZWYsICRjdHgpOworCitUaGlzIGlkaW9tIG1heSBwcmV2ZW50IHBvdGVudGlhbCBkZWFkIGxvY2tzIGNhdXNlZCBieSBkYXRhIHNlbnQgdG8gdGhlIG91dHB1dAorcGlwZSBub3QgYmVpbmcgZmx1c2hlZCBhbmQgdGh1cyBub3QgcmVhY2hpbmcgdGhlIGV4ZWN1dGVkIGNvbW1hbmQuCisKKz1jdXQKKworc3ViIGNvbW1hbmRfY2xvc2VfYmlkaV9waXBlIHsKKwlsb2NhbCAkPzsKKwlteSAoJHNlbGYsICRwaWQsICRpbiwgJG91dCwgJGN0eCkgPSBfbWF5YmVfc2VsZihAXyk7CisJX2NtZF9jbG9zZSgkY3R4LCAoZ3JlcCB7IGRlZmluZWQgfSAoJGluLCAkb3V0KSkpOworCXdhaXRwaWQgJHBpZCwgMDsKKwlpZiAoJD8gPj4gOCkgeworCQl0aHJvdyBHaXQ6OkVycm9yOjpDb21tYW5kKCRjdHgsICQ/ID4+OCk7CisJfQorfQorCisKKz1pdGVtIGNvbW1hbmRfbm9pc3kgKCBDT01NQU5EIFssIEFSR1VNRU5UUy4uLiBdICkKKworRXhlY3V0ZSB0aGUgZ2l2ZW4gQzxDT01NQU5EPiBpbiB0aGUgc2FtZSB3YXkgYXMgY29tbWFuZCgpIGRvZXMgYnV0IGRvIG5vdAorY2FwdHVyZSB0aGUgY29tbWFuZCBvdXRwdXQgLSB0aGUgc3RhbmRhcmQgb3V0cHV0IGlzIG5vdCByZWRpcmVjdGVkIGFuZCBnb2VzCit0byB0aGUgc3RhbmRhcmQgb3V0cHV0IG9mIHRoZSBjYWxsZXIgYXBwbGljYXRpb24uCisKK1doaWxlIHRoZSBtZXRob2QgaXMgY2FsbGVkIGNvbW1hbmRfbm9pc3koKSwgeW91IG1pZ2h0IHdhbnQgdG8gYXMgd2VsbCB1c2UKK2l0IGZvciB0aGUgbW9zdCBzaWxlbnQgR2l0IGNvbW1hbmRzIHdoaWNoIHlvdSBrbm93IHdpbGwgbmV2ZXIgcG9sbHV0ZSB5b3VyCitzdGRvdXQgYnV0IHlvdSB3YW50IHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiB0aGUgcGlwZSBzZXR1cCB3aGVuIGNhbGxpbmcgdGhlbS4KKworVGhlIGZ1bmN0aW9uIHJldHVybnMgb25seSBhZnRlciB0aGUgY29tbWFuZCBoYXMgZmluaXNoZWQgcnVubmluZy4KKworPWN1dAorCitzdWIgY29tbWFuZF9ub2lzeSB7CisJbXkgKCRzZWxmLCAkY21kLCBAYXJncykgPSBfbWF5YmVfc2VsZihAXyk7CisJX2NoZWNrX3ZhbGlkX2NtZCgkY21kKTsKKworCW15ICRwaWQgPSBmb3JrOworCWlmIChub3QgZGVmaW5lZCAkcGlkKSB7CisJCXRocm93IEVycm9yOjpTaW1wbGUoImZvcmsgZmFpbGVkOiAkISIpOworCX0gZWxzaWYgKCRwaWQgPT0gMCkgeworCQlfY21kX2V4ZWMoJHNlbGYsICRjbWQsIEBhcmdzKTsKKwl9CisJaWYgKHdhaXRwaWQoJHBpZCwgMCkgPiAwIGFuZCAkPz4+OCAhPSAwKSB7CisJCXRocm93IEdpdDo6RXJyb3I6OkNvbW1hbmQoam9pbignICcsICRjbWQsIEBhcmdzKSwgJD8gPj4gOCk7CisJfQorfQorCisKKz1pdGVtIHZlcnNpb24gKCkKKworUmV0dXJuIHRoZSBHaXQgdmVyc2lvbiBpbiB1c2UuCisKKz1jdXQKKworc3ViIHZlcnNpb24geworCW15ICR2ZXJzdHIgPSBjb21tYW5kX29uZWxpbmUoJy0tdmVyc2lvbicpOworCSR2ZXJzdHIgPX4gcy9eZ2l0IHZlcnNpb24gLy87CisJJHZlcnN0cjsKK30KKworCis9aXRlbSBleGVjX3BhdGggKCkKKworUmV0dXJuIHBhdGggdG8gdGhlIEdpdCBzdWItY29tbWFuZCBleGVjdXRhYmxlcyAodGhlIHNhbWUgYXMKK0M8Z2l0IC0tZXhlYy1wYXRoPikuIFVzZWZ1bCBtb3N0bHkgb25seSBpbnRlcm5hbGx5LgorCis9Y3V0CisKK3N1YiBleGVjX3BhdGggeyBjb21tYW5kX29uZWxpbmUoJy0tZXhlYy1wYXRoJykgfQorCisKKz1pdGVtIGh0bWxfcGF0aCAoKQorCitSZXR1cm4gcGF0aCB0byB0aGUgR2l0IGh0bWwgZG9jdW1lbnRhdGlvbiAodGhlIHNhbWUgYXMKK0M8Z2l0IC0taHRtbC1wYXRoPikuIFVzZWZ1bCBtb3N0bHkgb25seSBpbnRlcm5hbGx5LgorCis9Y3V0CisKK3N1YiBodG1sX3BhdGggeyBjb21tYW5kX29uZWxpbmUoJy0taHRtbC1wYXRoJykgfQorCisKKz1pdGVtIGdldF90el9vZmZzZXQgKCBUSU1FICkKKworUmV0dXJuIHRoZSB0aW1lIHpvbmUgb2Zmc2V0IGZyb20gR01UIGluIHRoZSBmb3JtICsvLUhITU0gd2hlcmUgSEggaXMKK3RoZSBudW1iZXIgb2YgaG91cnMgZnJvbSBHTVQgYW5kIE1NIGlzIHRoZSBudW1iZXIgb2YgbWludXRlcy4gIFRoaXMgaXMKK3RoZSBlcXVpdmFsZW50IG9mIHdoYXQgc3RyZnRpbWUoIiV6IiwgLi4uKSB3b3VsZCBwcm92aWRlIG9uIGEgR05VCitwbGF0Zm9ybS4KKworSWYgVElNRSBpcyBub3Qgc3VwcGxpZWQsIHRoZSBjdXJyZW50IGxvY2FsIHRpbWUgaXMgdXNlZC4KKworPWN1dAorCitzdWIgZ2V0X3R6X29mZnNldCB7CisJIyBzb21lIHN5c3RlbXMgZG9uJ3QgaGFuZGxlIG9yIG1pc2hhbmRsZSAleiwgc28gYmUgY3JlYXRpdmUuCisJbXkgJHQgPSBzaGlmdCB8fCB0aW1lOworCW15IEB0ID0gbG9jYWx0aW1lKCR0KTsKKwkkdFs1XSArPSAxOTAwOworCW15ICRnbSA9IHRpbWVnbShAdCk7CisJbXkgJHNpZ24gPSBxdyggKyArIC0gKVsgJGdtIDw9PiAkdCBdOworCXJldHVybiBzcHJpbnRmKCIlcyUwMmQlMDJkIiwgJHNpZ24sIChnbXRpbWUoYWJzKCR0IC0gJGdtKSkpWzIsMV0pOworfQorCis9aXRlbSBnZXRfcmVjb3JkICggRklMRUhBTkRMRSwgSU5QVVRfUkVDT1JEX1NFUEFSQVRPUiApCisKK1JlYWQgb25lIHJlY29yZCBmcm9tIEZJTEVIQU5ETEUgZGVsaW1pdGVkIGJ5IElOUFVUX1JFQ09SRF9TRVBBUkFUT1IsCityZW1vdmluZyBhbnkgdHJhaWxpbmcgSU5QVVRfUkVDT1JEX1NFUEFSQVRPUi4KKworPWN1dAorCitzdWIgZ2V0X3JlY29yZCB7CisJbXkgKCRmaCwgJHJzKSA9IEBfOworCWxvY2FsICQvID0gJHJzOworCW15ICRyZWMgPSA8JGZoPjsKKwljaG9tcCAkcmVjIGlmIGRlZmluZWQgJHJlYzsKKwkkcmVjOworfQorCis9aXRlbSBwcm9tcHQgKCBQUk9NUFQgLCBJU1BBU1NXT1JEICApCisKK1F1ZXJ5IHVzZXIgQzxQUk9NUFQ+IGFuZCByZXR1cm4gYW5zd2VyIGZyb20gdXNlci4KKworSG9ub3VycyBHSVRfQVNLUEFTUyBhbmQgU1NIX0FTS1BBU1MgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBxdWVyeWluZwordGhlIHVzZXIuIElmIG5vICpfQVNLUEFTUyB2YXJpYWJsZSBpcyBzZXQgb3IgYW4gZXJyb3Igb2NjdXJyZWQsCit0aGUgdGVybWluYWwgaXMgdHJpZWQgYXMgYSBmYWxsYmFjay4KK0lmIEM8SVNQQVNTV09SRD4gaXMgc2V0IGFuZCB0cnVlLCB0aGUgdGVybWluYWwgZGlzYWJsZXMgZWNoby4KKworPWN1dAorCitzdWIgcHJvbXB0IHsKKwlteSAoJHByb21wdCwgJGlzUGFzc3dvcmQpID0gQF87CisJbXkgJHJldDsKKwlpZiAoZXhpc3RzICRFTlZ7J0dJVF9BU0tQQVNTJ30pIHsKKwkJJHJldCA9IF9wcm9tcHQoJEVOVnsnR0lUX0FTS1BBU1MnfSwgJHByb21wdCk7CisJfQorCWlmICghZGVmaW5lZCAkcmV0ICYmIGV4aXN0cyAkRU5WeydTU0hfQVNLUEFTUyd9KSB7CisJCSRyZXQgPSBfcHJvbXB0KCRFTlZ7J1NTSF9BU0tQQVNTJ30sICRwcm9tcHQpOworCX0KKwlpZiAoIWRlZmluZWQgJHJldCkgeworCQlwcmludCBTVERFUlIgJHByb21wdDsKKwkJU1RERVJSLT5mbHVzaDsKKwkJaWYgKGRlZmluZWQgJGlzUGFzc3dvcmQgJiYgJGlzUGFzc3dvcmQpIHsKKwkJCXJlcXVpcmUgVGVybTo6UmVhZEtleTsKKwkJCVRlcm06OlJlYWRLZXk6OlJlYWRNb2RlKCdub2VjaG8nKTsKKwkJCSRyZXQgPSAnJzsKKwkJCXdoaWxlIChkZWZpbmVkKG15ICRrZXkgPSBUZXJtOjpSZWFkS2V5OjpSZWFkS2V5KDApKSkgeworCQkJCWxhc3QgaWYgJGtleSA9fiAvW1wwMTJcMDE1XS87ICMgXG5ccgorCQkJCSRyZXQgLj0gJGtleTsKKwkJCX0KKwkJCVRlcm06OlJlYWRLZXk6OlJlYWRNb2RlKCdyZXN0b3JlJyk7CisJCQlwcmludCBTVERFUlIgIlxuIjsKKwkJCVNUREVSUi0+Zmx1c2g7CisJCX0gZWxzZSB7CisJCQljaG9tcCgkcmV0ID0gPFNURElOPik7CisJCX0KKwl9CisJcmV0dXJuICRyZXQ7Cit9CisKK3N1YiBfcHJvbXB0IHsKKwlteSAoJGFza3Bhc3MsICRwcm9tcHQpID0gQF87CisJcmV0dXJuIHVubGVzcyBsZW5ndGggJGFza3Bhc3M7CisJJHByb21wdCA9fiBzL1xuLyAvZzsKKwlteSAkcmV0OworCW9wZW4gbXkgJGZoLCAiLXwiLCAkYXNrcGFzcywgJHByb21wdCBvciByZXR1cm47CisJJHJldCA9IDwkZmg+OworCSRyZXQgPX4gcy9bXDAxNVwwMTJdLy9nOyAjIHN0cmlwIFxyXG4sIGNob21wIGRvZXMgbm90IHdvcmsgb24gYWxsIHN5c3RlbXMgKGkuZS4gd2luZG93cykgYXMgZXhwZWN0ZWQKKwljbG9zZSAoJGZoKTsKKwlyZXR1cm4gJHJldDsKK30KKworPWl0ZW0gcmVwb19wYXRoICgpCisKK1JldHVybiBwYXRoIHRvIHRoZSBnaXQgcmVwb3NpdG9yeS4gTXVzdCBiZSBjYWxsZWQgb24gYSByZXBvc2l0b3J5IGluc3RhbmNlLgorCis9Y3V0CisKK3N1YiByZXBvX3BhdGggeyAkX1swXS0+e29wdHN9LT57UmVwb3NpdG9yeX0gfQorCisKKz1pdGVtIHdjX3BhdGggKCkKKworUmV0dXJuIHBhdGggdG8gdGhlIHdvcmtpbmcgY29weS4gTXVzdCBiZSBjYWxsZWQgb24gYSByZXBvc2l0b3J5IGluc3RhbmNlLgorCis9Y3V0CisKK3N1YiB3Y19wYXRoIHsgJF9bMF0tPntvcHRzfS0+e1dvcmtpbmdDb3B5fSB9CisKKworPWl0ZW0gd2Nfc3ViZGlyICgpCisKK1JldHVybiBwYXRoIHRvIHRoZSBzdWJkaXJlY3RvcnkgaW5zaWRlIG9mIGEgd29ya2luZyBjb3B5LiBNdXN0IGJlIGNhbGxlZAorb24gYSByZXBvc2l0b3J5IGluc3RhbmNlLgorCis9Y3V0CisKK3N1YiB3Y19zdWJkaXIgeyAkX1swXS0+e29wdHN9LT57V29ya2luZ1N1YmRpcn0gfHw9ICcnIH0KKworCis9aXRlbSB3Y19jaGRpciAoIFNVQkRJUiApCisKK0NoYW5nZSB0aGUgd29ya2luZyBjb3B5IHN1YmRpcmVjdG9yeSB0byB3b3JrIHdpdGhpbi4gVGhlIEM8U1VCRElSPiBpcworcmVsYXRpdmUgdG8gdGhlIHdvcmtpbmcgY29weSByb290IGRpcmVjdG9yeSAobm90IHRoZSBjdXJyZW50IHN1YmRpcmVjdG9yeSkuCitNdXN0IGJlIGNhbGxlZCBvbiBhIHJlcG9zaXRvcnkgaW5zdGFuY2UgYXR0YWNoZWQgdG8gYSB3b3JraW5nIGNvcHkKK2FuZCB0aGUgZGlyZWN0b3J5IG11c3QgZXhpc3QuCisKKz1jdXQKKworc3ViIHdjX2NoZGlyIHsKKwlteSAoJHNlbGYsICRzdWJkaXIpID0gQF87CisJJHNlbGYtPndjX3BhdGgoKQorCQlvciB0aHJvdyBFcnJvcjo6U2ltcGxlKCJiYXJlIHJlcG9zaXRvcnkiKTsKKworCS1kICRzZWxmLT53Y19wYXRoKCkuJy8nLiRzdWJkaXIKKwkJb3IgdGhyb3cgRXJyb3I6OlNpbXBsZSgic3ViZGlyIG5vdCBmb3VuZDogJHN1YmRpciAkISIpOworCSMgT2YgY291cnNlIHdlIHdpbGwgbm90ICJob2xkIiB0aGUgc3ViZGlyZWN0b3J5IHNvIGFueW9uZQorCSMgY2FuIGRlbGV0ZSBpdCBub3cgYW5kIHdlIHdpbGwgbmV2ZXIga25vdy4gQnV0IGF0IGxlYXN0IHdlIHRyaWVkLgorCisJJHNlbGYtPntvcHRzfS0+e1dvcmtpbmdTdWJkaXJ9ID0gJHN1YmRpcjsKK30KKworCis9aXRlbSBjb25maWcgKCBWQVJJQUJMRSApCisKK1JldHJpZXZlIHRoZSBjb25maWd1cmF0aW9uIEM8VkFSSUFCTEU+IGluIHRoZSBzYW1lIG1hbm5lciBhcyBDPGNvbmZpZz4KK2RvZXMuIEluIHNjYWxhciBjb250ZXh0IHJlcXVpcmVzIHRoZSB2YXJpYWJsZSB0byBiZSBzZXQgb25seSBvbmUgdGltZQorKGV4Y2VwdGlvbiBpcyB0aHJvd24gb3RoZXJ3aXNlKSwgaW4gYXJyYXkgY29udGV4dCByZXR1cm5zIGFsbG93cyB0aGUKK3ZhcmlhYmxlIHRvIGJlIHNldCBtdWx0aXBsZSB0aW1lcyBhbmQgcmV0dXJucyBhbGwgdGhlIHZhbHVlcy4KKworPWN1dAorCitzdWIgY29uZmlnIHsKKwlyZXR1cm4gX2NvbmZpZ19jb21tb24oe30sIEBfKTsKK30KKworCis9aXRlbSBjb25maWdfYm9vbCAoIFZBUklBQkxFICkKKworUmV0cmlldmUgdGhlIGJvb2wgY29uZmlndXJhdGlvbiBDPFZBUklBQkxFPi4gVGhlIHJldHVybiB2YWx1ZQoraXMgdXNhYmxlIGFzIGEgYm9vbGVhbiBpbiBwZXJsIChhbmQgQzx1bmRlZj4gaWYgaXQncyBub3QgZGVmaW5lZCwKK29mIGNvdXJzZSkuCisKKz1jdXQKKworc3ViIGNvbmZpZ19ib29sIHsKKwlteSAkdmFsID0gc2NhbGFyIF9jb25maWdfY29tbW9uKHsna2luZCcgPT4gJy0tYm9vbCd9LCBAXyk7CisKKwkjIERvIG5vdCByZXdyaXRlIHRoaXMgYXMgcmV0dXJuIChkZWZpbmVkICR2YWwgJiYgJHZhbCBlcSAndHJ1ZScpCisJIyBhcyBzb21lIGNhbGxlcnMgZG8gY2FyZSB3aGF0IGtpbmQgb2YgZmFsc2Vob29kIHRoZXkgcmVjZWl2ZS4KKwlpZiAoIWRlZmluZWQgJHZhbCkgeworCQlyZXR1cm4gdW5kZWY7CisJfSBlbHNlIHsKKwkJcmV0dXJuICR2YWwgZXEgJ3RydWUnOworCX0KK30KKworCis9aXRlbSBjb25maWdfcGF0aCAoIFZBUklBQkxFICkKKworUmV0cmlldmUgdGhlIHBhdGggY29uZmlndXJhdGlvbiBDPFZBUklBQkxFPi4gVGhlIHJldHVybiB2YWx1ZQoraXMgYW4gZXhwYW5kZWQgcGF0aCBvciBDPHVuZGVmPiBpZiBpdCdzIG5vdCBkZWZpbmVkLgorCis9Y3V0CisKK3N1YiBjb25maWdfcGF0aCB7CisJcmV0dXJuIF9jb25maWdfY29tbW9uKHsna2luZCcgPT4gJy0tcGF0aCd9LCBAXyk7Cit9CisKKworPWl0ZW0gY29uZmlnX2ludCAoIFZBUklBQkxFICkKKworUmV0cmlldmUgdGhlIGludGVnZXIgY29uZmlndXJhdGlvbiBDPFZBUklBQkxFPi4gVGhlIHJldHVybiB2YWx1ZQoraXMgc2ltcGxlIGRlY2ltYWwgbnVtYmVyLiAgQW4gb3B0aW9uYWwgdmFsdWUgc3VmZml4IG9mICdrJywgJ20nLAorb3IgJ2cnIGluIHRoZSBjb25maWcgZmlsZSB3aWxsIGNhdXNlIHRoZSB2YWx1ZSB0byBiZSBtdWx0aXBsaWVkCitieSAxMDI0LCAxMDQ4NTc2ICgxMDI0XjIpLCBvciAxMDczNzQxODI0ICgxMDI0XjMpIHByaW9yIHRvIG91dHB1dC4KK0l0IHdvdWxkIHJldHVybiBDPHVuZGVmPiBpZiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkLgorCis9Y3V0CisKK3N1YiBjb25maWdfaW50IHsKKwlyZXR1cm4gc2NhbGFyIF9jb25maWdfY29tbW9uKHsna2luZCcgPT4gJy0taW50J30sIEBfKTsKK30KKworIyBDb21tb24gc3Vicm91dGluZSB0byBpbXBsZW1lbnQgYnVsayBvZiB3aGF0IHRoZSBjb25maWcqIGZhbWlseSBvZiBtZXRob2RzCisjIGRvLiBUaGlzIGN1cnJlbnRseSB3cmFwcyBjb21tYW5kKCdjb25maWcnKSBzbyBpdCBpcyBub3Qgc28gZmFzdC4KK3N1YiBfY29uZmlnX2NvbW1vbiB7CisJbXkgKCRvcHRzKSA9IHNoaWZ0IEBfOworCW15ICgkc2VsZiwgJHZhcikgPSBfbWF5YmVfc2VsZihAXyk7CisKKwl0cnkgeworCQlteSBAY21kID0gKCdjb25maWcnLCAkb3B0cy0+eydraW5kJ30gPyAkb3B0cy0+eydraW5kJ30gOiAoKSk7CisJCXVuc2hpZnQgQGNtZCwgJHNlbGYgaWYgJHNlbGY7CisJCWlmICh3YW50YXJyYXkpIHsKKwkJCXJldHVybiBjb21tYW5kKEBjbWQsICctLWdldC1hbGwnLCAkdmFyKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBjb21tYW5kX29uZWxpbmUoQGNtZCwgJy0tZ2V0JywgJHZhcik7CisJCX0KKwl9IGNhdGNoIEdpdDo6RXJyb3I6OkNvbW1hbmQgd2l0aCB7CisJCW15ICRFID0gc2hpZnQ7CisJCWlmICgkRS0+dmFsdWUoKSA9PSAxKSB7CisJCQkjIEtleSBub3QgZm91bmQuCisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQl0aHJvdyAkRTsKKwkJfQorCX07Cit9CisKKz1pdGVtIGdldF9jb2xvcmJvb2wgKCBOQU1FICkKKworRmluZHMgaWYgY29sb3Igc2hvdWxkIGJlIHVzZWQgZm9yIE5BTUVkIG9wZXJhdGlvbiBmcm9tIHRoZSBjb25maWd1cmF0aW9uLAorYW5kIHJldHVybnMgYm9vbGVhbiAodHJ1ZSBmb3IgInVzZSBjb2xvciIsIGZhbHNlIGZvciAiZG8gbm90IHVzZSBjb2xvciIpLgorCis9Y3V0CisKK3N1YiBnZXRfY29sb3Jib29sIHsKKwlteSAoJHNlbGYsICR2YXIpID0gQF87CisJbXkgJHN0ZG91dF90b190dHkgPSAoLXQgU1RET1VUKSA/ICJ0cnVlIiA6ICJmYWxzZSI7CisJbXkgJHVzZV9jb2xvciA9ICRzZWxmLT5jb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldC1jb2xvcmJvb2wnLAorCQkJCQkgICAgICAgJHZhciwgJHN0ZG91dF90b190dHkpOworCXJldHVybiAoJHVzZV9jb2xvciBlcSAndHJ1ZScpOworfQorCis9aXRlbSBnZXRfY29sb3IgKCBTTE9ULCBDT0xPUiApCisKK0ZpbmRzIGNvbG9yIGZvciBTTE9UIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24sIHdoaWxlIGRlZmF1bHRpbmcgdG8gQ09MT1IsCithbmQgcmV0dXJucyB0aGUgQU5TSSBjb2xvciBlc2NhcGUgc2VxdWVuY2U6CisKKwlwcmludCAkcmVwby0+Z2V0X2NvbG9yKCJjb2xvci5pbnRlcmFjdGl2ZS5wcm9tcHQiLCAidW5kZXJsaW5lIGJsdWUgd2hpdGUiKTsKKwlwcmludCAic29tZSB0ZXh0IjsKKwlwcmludCAkcmVwby0+Z2V0X2NvbG9yKCIiLCAibm9ybWFsIik7CisKKz1jdXQKKworc3ViIGdldF9jb2xvciB7CisJbXkgKCRzZWxmLCAkc2xvdCwgJGRlZmF1bHQpID0gQF87CisJbXkgJGNvbG9yID0gJHNlbGYtPmNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0LWNvbG9yJywgJHNsb3QsICRkZWZhdWx0KTsKKwlpZiAoIWRlZmluZWQgJGNvbG9yKSB7CisJCSRjb2xvciA9ICIiOworCX0KKwlyZXR1cm4gJGNvbG9yOworfQorCis9aXRlbSByZW1vdGVfcmVmcyAoIFJFUE9TSVRPUlkgWywgR1JPVVBTIFssIFJFRkdMT0JTIF0gXSApCisKK1RoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGhhc2hyZWYgb2YgcmVmcyBzdG9yZWQgaW4gYSBnaXZlbiByZW1vdGUgcmVwb3NpdG9yeS4KK1RoZSBoYXNoIGlzIGluIHRoZSBmb3JtYXQgQzxyZWZuYW1lID1cPiBoYXNoPi4gRm9yIHRhZ3MsIHRoZSBDPHJlZm5hbWU+IGVudHJ5Citjb250YWlucyB0aGUgdGFnIG9iamVjdCB3aGlsZSBhIEM8cmVmbmFtZV57fT4gZW50cnkgZ2l2ZXMgdGhlIHRhZ2dlZCBvYmplY3RzLgorCitDPFJFUE9TSVRPUlk+IGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIHRoZSBhcHByb3ByaWF0ZSBDPGdpdC1scy1yZW1vdGU+Cithcmd1bWVudDsgZWl0aGVyIGEgVVJMIG9yIGEgcmVtb3RlIG5hbWUgKGlmIGNhbGxlZCBvbiBhIHJlcG9zaXRvcnkgaW5zdGFuY2UpLgorQzxHUk9VUFM+IGlzIGFuIG9wdGlvbmFsIGFycmF5cmVmIHRoYXQgY2FuIGNvbnRhaW4gJ3RhZ3MnIHRvIHJldHVybiBhbGwgdGhlCit0YWdzIGFuZC9vciAnaGVhZHMnIHRvIHJldHVybiBhbGwgdGhlIGhlYWRzLiBDPFJFRkdMT0I+IGlzIGFuIG9wdGlvbmFsIGFycmF5CitvZiBzdHJpbmdzIGNvbnRhaW5pbmcgYSBzaGVsbC1saWtlIGdsb2IgdG8gZnVydGhlciBsaW1pdCB0aGUgcmVmcyByZXR1cm5lZCBpbgordGhlIGhhc2g7IHRoZSBtZWFuaW5nIGlzIGFnYWluIHRoZSBzYW1lIGFzIHRoZSBhcHByb3ByaWF0ZSBDPGdpdC1scy1yZW1vdGU+Cithcmd1bWVudC4KKworVGhpcyBmdW5jdGlvbiBtYXkgb3IgbWF5IG5vdCBiZSBjYWxsZWQgb24gYSByZXBvc2l0b3J5IGluc3RhbmNlLiBJbiB0aGUgZm9ybWVyCitjYXNlLCByZW1vdGUgbmFtZXMgYXMgZGVmaW5lZCBpbiB0aGUgcmVwb3NpdG9yeSBhcmUgcmVjb2duaXplZCBhcyByZXBvc2l0b3J5CitzcGVjaWZpZXJzLgorCis9Y3V0CisKK3N1YiByZW1vdGVfcmVmcyB7CisJbXkgKCRzZWxmLCAkcmVwbywgJGdyb3VwcywgJHJlZmdsb2JzKSA9IF9tYXliZV9zZWxmKEBfKTsKKwlteSBAYXJnczsKKwlpZiAocmVmICRncm91cHMgZXEgJ0FSUkFZJykgeworCQlmb3JlYWNoIChAJGdyb3VwcykgeworCQkJaWYgKCRfIGVxICdoZWFkcycpIHsKKwkJCQlwdXNoIChAYXJncywgJy0taGVhZHMnKTsKKwkJCX0gZWxzaWYgKCRfIGVxICd0YWdzJykgeworCQkJCXB1c2ggKEBhcmdzLCAnLS10YWdzJyk7CisJCQl9IGVsc2UgeworCQkJCSMgSWdub3JlIHVua25vd24gZ3JvdXBzIGZvciBmdXR1cmUKKwkJCQkjIGNvbXBhdGliaWxpdHkKKwkJCX0KKwkJfQorCX0KKwlwdXNoIChAYXJncywgJHJlcG8pOworCWlmIChyZWYgJHJlZmdsb2JzIGVxICdBUlJBWScpIHsKKwkJcHVzaCAoQGFyZ3MsIEAkcmVmZ2xvYnMpOworCX0KKworCW15IEBzZWxmID0gJHNlbGYgPyAoJHNlbGYpIDogKCk7ICMgVWx0cmEgdHJpY2tlcnkKKwlteSAoJGZoLCAkY3R4KSA9IEdpdDo6Y29tbWFuZF9vdXRwdXRfcGlwZShAc2VsZiwgJ2xzLXJlbW90ZScsIEBhcmdzKTsKKwlteSAlcmVmczsKKwl3aGlsZSAoPCRmaD4pIHsKKwkJY2hvbXA7CisJCW15ICgkaGFzaCwgJHJlZikgPSBzcGxpdCgvXHQvLCAkXywgMik7CisJCSRyZWZzeyRyZWZ9ID0gJGhhc2g7CisJfQorCUdpdDo6Y29tbWFuZF9jbG9zZV9waXBlKEBzZWxmLCAkZmgsICRjdHgpOworCXJldHVybiBcJXJlZnM7Cit9CisKKworPWl0ZW0gaWRlbnQgKCBUWVBFIHwgSURFTlRTVFIgKQorCis9aXRlbSBpZGVudF9wZXJzb24gKCBUWVBFIHwgSURFTlRTVFIgfCBJREVOVEFSUkFZICkKKworVGhpcyBzdWl0ZSBvZiBmdW5jdGlvbnMgcmV0cmlldmVzIGFuZCBwYXJzZXMgaWRlbnQgaW5mb3JtYXRpb24sIGFzIHN0b3JlZAoraW4gdGhlIGNvbW1pdCBhbmQgdGFnIG9iamVjdHMgb3IgcHJvZHVjZWQgYnkgQzx2YXIgR0lUX3R5cGVfSURFTlQ+ICh0aHVzCitDPFRZUEU+IGNhbiBiZSBlaXRoZXIgSTxhdXRob3I+IG9yIEk8Y29tbWl0dGVyPjsgY2FzZSBpcyBpbnNpZ25pZmljYW50KS4KKworVGhlIEM8aWRlbnQ+IG1ldGhvZCByZXRyaWV2ZXMgdGhlIGlkZW50IGluZm9ybWF0aW9uIGZyb20gQzxnaXQgdmFyPgorYW5kIGVpdGhlciByZXR1cm5zIGl0IGFzIGEgc2NhbGFyIHN0cmluZyBvciBhcyBhbiBhcnJheSB3aXRoIHRoZSBmaWVsZHMgcGFyc2VkLgorQWx0ZXJuYXRpdmVseSwgaXQgY2FuIHRha2UgYSBwcmVwYXJlZCBpZGVudCBzdHJpbmcgKGUuZy4gZnJvbSB0aGUgY29tbWl0CitvYmplY3QpIGFuZCBqdXN0IHBhcnNlIGl0LgorCitDPGlkZW50X3BlcnNvbj4gcmV0dXJucyB0aGUgcGVyc29uIHBhcnQgb2YgdGhlIGlkZW50IC0gbmFtZSBhbmQgZW1haWw7CitpdCBjYW4gdGFrZSB0aGUgc2FtZSBhcmd1bWVudHMgYXMgQzxpZGVudD4gb3IgdGhlIGFycmF5IHJldHVybmVkIGJ5IEM8aWRlbnQ+LgorCitUaGUgc3lub3BzaXMgaXMgbGlrZToKKworCW15ICgkbmFtZSwgJGVtYWlsLCAkdGltZV90eikgPSBpZGVudCgnYXV0aG9yJyk7CisJIiRuYW1lIDwkZW1haWw+IiBlcSBpZGVudF9wZXJzb24oJ2F1dGhvcicpOworCSIkbmFtZSA8JGVtYWlsPiIgZXEgaWRlbnRfcGVyc29uKCRuYW1lKTsKKwkkdGltZV90eiA9fiAvXlxkKyBbKy1dXGR7NH0kLzsKKworPWN1dAorCitzdWIgaWRlbnQgeworCW15ICgkc2VsZiwgJHR5cGUpID0gX21heWJlX3NlbGYoQF8pOworCW15ICRpZGVudHN0cjsKKwlpZiAobGMgJHR5cGUgZXEgbGMgJ2NvbW1pdHRlcicgb3IgbGMgJHR5cGUgZXEgbGMgJ2F1dGhvcicpIHsKKwkJbXkgQGNtZCA9ICgndmFyJywgJ0dJVF8nLnVjKCR0eXBlKS4nX0lERU5UJyk7CisJCXVuc2hpZnQgQGNtZCwgJHNlbGYgaWYgJHNlbGY7CisJCSRpZGVudHN0ciA9IGNvbW1hbmRfb25lbGluZShAY21kKTsKKwl9IGVsc2UgeworCQkkaWRlbnRzdHIgPSAkdHlwZTsKKwl9CisJaWYgKHdhbnRhcnJheSkgeworCQlyZXR1cm4gJGlkZW50c3RyID1+IC9eKC4qKSA8KC4qKT4gKFxkKyBbKy1dXGR7NH0pJC87CisJfSBlbHNlIHsKKwkJcmV0dXJuICRpZGVudHN0cjsKKwl9Cit9CisKK3N1YiBpZGVudF9wZXJzb24geworCW15ICgkc2VsZiwgQGlkZW50KSA9IF9tYXliZV9zZWxmKEBfKTsKKwkkI2lkZW50ID09IDAgYW5kIEBpZGVudCA9ICRzZWxmID8gJHNlbGYtPmlkZW50KCRpZGVudFswXSkgOiBpZGVudCgkaWRlbnRbMF0pOworCXJldHVybiAiJGlkZW50WzBdIDwkaWRlbnRbMV0+IjsKK30KKworPWl0ZW0gaGFzaF9vYmplY3QgKCBUWVBFLCBGSUxFTkFNRSApCisKK0NvbXB1dGUgdGhlIFNIQTEgb2JqZWN0IGlkIG9mIHRoZSBnaXZlbiBDPEZJTEVOQU1FPiBjb25zaWRlcmluZyBpdCBpcworb2YgdGhlIEM8VFlQRT4gb2JqZWN0IHR5cGUgKEM8YmxvYj4sIEM8Y29tbWl0PiwgQzx0cmVlPikuCisKK1RoZSBtZXRob2QgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGFueSBpbnN0YW5jZSBvciBvbiBhIHNwZWNpZmllZCBHaXQgcmVwb3NpdG9yeSwKK2l0IG1ha2VzIHplcm8gZGlmZmVyZW5jZS4KKworVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIFNIQTEgaGFzaC4KKworPWN1dAorCisjIFRPRE86IFN1cHBvcnQgZm9yIHBhc3NpbmcgRklMRUhBTkRMRSBpbnN0ZWFkIG9mIEZJTEVOQU1FCitzdWIgaGFzaF9vYmplY3QgeworCW15ICgkc2VsZiwgJHR5cGUsICRmaWxlKSA9IF9tYXliZV9zZWxmKEBfKTsKKwljb21tYW5kX29uZWxpbmUoJ2hhc2gtb2JqZWN0JywgJy10JywgJHR5cGUsICRmaWxlKTsKK30KKworCis9aXRlbSBoYXNoX2FuZF9pbnNlcnRfb2JqZWN0ICggRklMRU5BTUUgKQorCitDb21wdXRlIHRoZSBTSEExIG9iamVjdCBpZCBvZiB0aGUgZ2l2ZW4gQzxGSUxFTkFNRT4gYW5kIGFkZCB0aGUgb2JqZWN0IHRvIHRoZQorb2JqZWN0IGRhdGFiYXNlLgorCitUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgU0hBMSBoYXNoLgorCis9Y3V0CisKKyMgVE9ETzogU3VwcG9ydCBmb3IgcGFzc2luZyBGSUxFSEFORExFIGluc3RlYWQgb2YgRklMRU5BTUUKK3N1YiBoYXNoX2FuZF9pbnNlcnRfb2JqZWN0IHsKKwlteSAoJHNlbGYsICRmaWxlbmFtZSkgPSBAXzsKKworCWNhcnAgIkJhZCBmaWxlbmFtZSBcIiRmaWxlbmFtZVwiIiBpZiAkZmlsZW5hbWUgPX4gL1tcclxuXS87CisKKwkkc2VsZi0+X29wZW5faGFzaF9hbmRfaW5zZXJ0X29iamVjdF9pZl9uZWVkZWQoKTsKKwlteSAoJGluLCAkb3V0KSA9ICgkc2VsZi0+e2hhc2hfb2JqZWN0X2lufSwgJHNlbGYtPntoYXNoX29iamVjdF9vdXR9KTsKKworCXVubGVzcyAocHJpbnQgJG91dCAkZmlsZW5hbWUsICJcbiIpIHsKKwkJJHNlbGYtPl9jbG9zZV9oYXNoX2FuZF9pbnNlcnRfb2JqZWN0KCk7CisJCXRocm93IEVycm9yOjpTaW1wbGUoIm91dCBwaXBlIHdlbnQgYmFkIik7CisJfQorCisJY2hvbXAobXkgJGhhc2ggPSA8JGluPik7CisJdW5sZXNzIChkZWZpbmVkKCRoYXNoKSkgeworCQkkc2VsZi0+X2Nsb3NlX2hhc2hfYW5kX2luc2VydF9vYmplY3QoKTsKKwkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiaW4gcGlwZSB3ZW50IGJhZCIpOworCX0KKworCXJldHVybiAkaGFzaDsKK30KKworc3ViIF9vcGVuX2hhc2hfYW5kX2luc2VydF9vYmplY3RfaWZfbmVlZGVkIHsKKwlteSAoJHNlbGYpID0gQF87CisKKwlyZXR1cm4gaWYgZGVmaW5lZCgkc2VsZi0+e2hhc2hfb2JqZWN0X3BpZH0pOworCisJKCRzZWxmLT57aGFzaF9vYmplY3RfcGlkfSwgJHNlbGYtPntoYXNoX29iamVjdF9pbn0sCisJICRzZWxmLT57aGFzaF9vYmplY3Rfb3V0fSwgJHNlbGYtPntoYXNoX29iamVjdF9jdHh9KSA9CisJCSRzZWxmLT5jb21tYW5kX2JpZGlfcGlwZShxdyhoYXNoLW9iamVjdCAtdyAtLXN0ZGluLXBhdGhzIC0tbm8tZmlsdGVycykpOworfQorCitzdWIgX2Nsb3NlX2hhc2hfYW5kX2luc2VydF9vYmplY3QgeworCW15ICgkc2VsZikgPSBAXzsKKworCXJldHVybiB1bmxlc3MgZGVmaW5lZCgkc2VsZi0+e2hhc2hfb2JqZWN0X3BpZH0pOworCisJbXkgQHZhcnMgPSBtYXAgeyAnaGFzaF9vYmplY3RfJyAuICRfIH0gcXcocGlkIGluIG91dCBjdHgpOworCisJY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUoQCRzZWxme0B2YXJzfSk7CisJZGVsZXRlIEAkc2VsZntAdmFyc307Cit9CisKKz1pdGVtIGNhdF9ibG9iICggU0hBMSwgRklMRUhBTkRMRSApCisKK1ByaW50cyB0aGUgY29udGVudHMgb2YgdGhlIGJsb2IgaWRlbnRpZmllZCBieSBDPFNIQTE+IHRvIEM8RklMRUhBTkRMRT4gYW5kCityZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcHJpbnRlZC4KKworPWN1dAorCitzdWIgY2F0X2Jsb2IgeworCW15ICgkc2VsZiwgJHNoYTEsICRmaCkgPSBAXzsKKworCSRzZWxmLT5fb3Blbl9jYXRfYmxvYl9pZl9uZWVkZWQoKTsKKwlteSAoJGluLCAkb3V0KSA9ICgkc2VsZi0+e2NhdF9ibG9iX2lufSwgJHNlbGYtPntjYXRfYmxvYl9vdXR9KTsKKworCXVubGVzcyAocHJpbnQgJG91dCAkc2hhMSwgIlxuIikgeworCQkkc2VsZi0+X2Nsb3NlX2NhdF9ibG9iKCk7CisJCXRocm93IEVycm9yOjpTaW1wbGUoIm91dCBwaXBlIHdlbnQgYmFkIik7CisJfQorCisJbXkgJGRlc2NyaXB0aW9uID0gPCRpbj47CisJaWYgKCRkZXNjcmlwdGlvbiA9fiAvIG1pc3NpbmckLykgeworCQljYXJwICIkc2hhMSBkb2Vzbid0IGV4aXN0IGluIHRoZSByZXBvc2l0b3J5IjsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICgkZGVzY3JpcHRpb24gIX4gL15bMC05YS1mQS1GXXs0MH0oPzpbMC05YS1mQS1GXXsyNH0pPyBcUysgKFxkKykkLykgeworCQljYXJwICJVbmV4cGVjdGVkIHJlc3VsdCByZXR1cm5lZCBmcm9tIGdpdCBjYXQtZmlsZSI7CisJCXJldHVybiAtMTsKKwl9CisKKwlteSAkc2l6ZSA9ICQxOworCisJbXkgJGJsb2I7CisJbXkgJGJ5dGVzTGVmdCA9ICRzaXplOworCisJd2hpbGUgKDEpIHsKKwkJbGFzdCB1bmxlc3MgJGJ5dGVzTGVmdDsKKworCQlteSAkYnl0ZXNUb1JlYWQgPSAkYnl0ZXNMZWZ0IDwgMTAyNCA/ICRieXRlc0xlZnQgOiAxMDI0OworCQlteSAkcmVhZCA9IHJlYWQoJGluLCAkYmxvYiwgJGJ5dGVzVG9SZWFkKTsKKwkJdW5sZXNzIChkZWZpbmVkKCRyZWFkKSkgeworCQkJJHNlbGYtPl9jbG9zZV9jYXRfYmxvYigpOworCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiaW4gcGlwZSB3ZW50IGJhZCIpOworCQl9CisJCXVubGVzcyAocHJpbnQgJGZoICRibG9iKSB7CisJCQkkc2VsZi0+X2Nsb3NlX2NhdF9ibG9iKCk7CisJCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJjb3VsZG4ndCB3cml0ZSB0byBwYXNzZWQgaW4gZmlsZWhhbmRsZSIpOworCQl9CisJCSRieXRlc0xlZnQgLT0gJHJlYWQ7CisJfQorCisJIyBTa2lwIHBhc3QgdGhlIHRyYWlsaW5nIG5ld2xpbmUuCisJbXkgJG5ld2xpbmU7CisJbXkgJHJlYWQgPSByZWFkKCRpbiwgJG5ld2xpbmUsIDEpOworCXVubGVzcyAoZGVmaW5lZCgkcmVhZCkpIHsKKwkJJHNlbGYtPl9jbG9zZV9jYXRfYmxvYigpOworCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJpbiBwaXBlIHdlbnQgYmFkIik7CisJfQorCXVubGVzcyAoJHJlYWQgPT0gMSAmJiAkbmV3bGluZSBlcSAiXG4iKSB7CisJCSRzZWxmLT5fY2xvc2VfY2F0X2Jsb2IoKTsKKwkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiZGlkbid0IGZpbmQgbmV3bGluZSBhZnRlciBibG9iIik7CisJfQorCisJcmV0dXJuICRzaXplOworfQorCitzdWIgX29wZW5fY2F0X2Jsb2JfaWZfbmVlZGVkIHsKKwlteSAoJHNlbGYpID0gQF87CisKKwlyZXR1cm4gaWYgZGVmaW5lZCgkc2VsZi0+e2NhdF9ibG9iX3BpZH0pOworCisJKCRzZWxmLT57Y2F0X2Jsb2JfcGlkfSwgJHNlbGYtPntjYXRfYmxvYl9pbn0sCisJICRzZWxmLT57Y2F0X2Jsb2Jfb3V0fSwgJHNlbGYtPntjYXRfYmxvYl9jdHh9KSA9CisJCSRzZWxmLT5jb21tYW5kX2JpZGlfcGlwZShxdyhjYXQtZmlsZSAtLWJhdGNoKSk7Cit9CisKK3N1YiBfY2xvc2VfY2F0X2Jsb2IgeworCW15ICgkc2VsZikgPSBAXzsKKworCXJldHVybiB1bmxlc3MgZGVmaW5lZCgkc2VsZi0+e2NhdF9ibG9iX3BpZH0pOworCisJbXkgQHZhcnMgPSBtYXAgeyAnY2F0X2Jsb2JfJyAuICRfIH0gcXcocGlkIGluIG91dCBjdHgpOworCisJY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUoQCRzZWxme0B2YXJzfSk7CisJZGVsZXRlIEAkc2VsZntAdmFyc307Cit9CisKKworPWl0ZW0gY3JlZGVudGlhbF9yZWFkKCBGSUxFSEFORExFICkKKworUmVhZHMgY3JlZGVudGlhbCBrZXktdmFsdWUgcGFpcnMgZnJvbSBDPEZJTEVIQU5ETEU+LiAgUmVhZGluZyBzdG9wcyBhdCBFT0Ygb3IKK3doZW4gYW4gZW1wdHkgbGluZSBpcyBlbmNvdW50ZXJlZC4gIEVhY2ggbGluZSBtdXN0IGJlIG9mIHRoZSBmb3JtIEM8a2V5PXZhbHVlPgord2l0aCBhIG5vbi1lbXB0eSBrZXkuICBGdW5jdGlvbiByZXR1cm5zIGhhc2ggd2l0aCBhbGwgcmVhZCB2YWx1ZXMuICBBbnkgd2hpdGUKK3NwYWNlIChvdGhlciB0aGFuIG5ldy1saW5lIGNoYXJhY3RlcikgaXMgcHJlc2VydmVkLgorCis9Y3V0CisKK3N1YiBjcmVkZW50aWFsX3JlYWQgeworCW15ICgkc2VsZiwgJHJlYWRlcikgPSBfbWF5YmVfc2VsZihAXyk7CisJbXkgJWNyZWRlbnRpYWw7CisJd2hpbGUgKDwkcmVhZGVyPikgeworCQljaG9tcDsKKwkJaWYgKCRfIGVxICcnKSB7CisJCQlsYXN0OworCQl9IGVsc2lmICghL14oW149XSspPSguKikkLykgeworCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgidW5hYmxlIHRvIHBhcnNlIGdpdCBjcmVkZW50aWFsIGRhdGE6XG4kXyIpOworCQl9CisJCSRjcmVkZW50aWFseyQxfSA9ICQyOworCX0KKwlyZXR1cm4gJWNyZWRlbnRpYWw7Cit9CisKKz1pdGVtIGNyZWRlbnRpYWxfd3JpdGUoIEZJTEVIQU5ETEUsIENSRURFTlRJQUxfSEFTSFJFRiApCisKK1dyaXRlcyBjcmVkZW50aWFsIGtleS12YWx1ZSBwYWlycyBmcm9tIGhhc2ggcmVmZXJlbmNlZCBieQorQzxDUkVERU5USUFMX0hBU0hSRUY+IHRvIEM8RklMRUhBTkRMRT4uICBLZXlzIGFuZCB2YWx1ZXMgY2Fubm90IGNvbnRhaW4KK25ldy1saW5lcyBvciBOVUwgYnl0ZXMgY2hhcmFjdGVycywgYW5kIGtleSBjYW5ub3QgY29udGFpbiBlcXVhbCBzaWducyBub3IgYmUKK2VtcHR5IChpZiB0aGV5IGRvIEVycm9yOjpTaW1wbGUgaXMgdGhyb3duKS4gIEFueSB3aGl0ZSBzcGFjZSBpcyBwcmVzZXJ2ZWQuICBJZgordmFsdWUgZm9yIGEga2V5IGlzIEM8dW5kZWY+LCBpdCB3aWxsIGJlIHNraXBwZWQuCisKK0lmIEM8J3VybCc+IGtleSBleGlzdHMgaXQgd2lsbCBiZSB3cml0dGVuIGZpcnN0LiAgKEFsbCB0aGUgb3RoZXIga2V5LXZhbHVlCitwYWlycyBhcmUgd3JpdHRlbiBpbiBzb3J0ZWQgb3JkZXIgYnV0IHlvdSBzaG91bGQgbm90IGRlcGVuZCBvbiB0aGF0KS4gIE9uY2UKK2FsbCBsaW5lcyBhcmUgd3JpdHRlbiwgYW4gZW1wdHkgbGluZSBpcyBwcmludGVkLgorCis9Y3V0CisKK3N1YiBjcmVkZW50aWFsX3dyaXRlIHsKKwlteSAoJHNlbGYsICR3cml0ZXIsICRjcmVkZW50aWFsKSA9IF9tYXliZV9zZWxmKEBfKTsKKwlteSAoJGtleSwgJHZhbHVlKTsKKworCSMgQ2hlY2sgaWYgJGNyZWRlbnRpYWwgaXMgdmFsaWQgcHJpb3IgdG8gd3JpdGluZyBhbnl0aGluZworCXdoaWxlICgoJGtleSwgJHZhbHVlKSA9IGVhY2ggJSRjcmVkZW50aWFsKSB7CisJCWlmICghZGVmaW5lZCAka2V5IHx8ICFsZW5ndGggJGtleSkgeworCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiY3JlZGVudGlhbCBrZXkgZW1wdHkgb3IgdW5kZWZpbmVkIik7CisJCX0gZWxzaWYgKCRrZXkgPX4gL1s9XG5cMF0vKSB7CisJCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJjcmVkZW50aWFsIGtleSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6ICRrZXkiKTsKKwkJfSBlbHNpZiAoZGVmaW5lZCAkdmFsdWUgJiYgJHZhbHVlID1+IC9bXG5cMF0vKSB7CisJCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJjcmVkZW50aWFsIHZhbHVlIGZvciBrZXk9JGtleSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6ICR2YWx1ZSIpOworCQl9CisJfQorCisJZm9yICRrZXkgKHNvcnQgeworCQkjIHVybCBvdmVyd3JpdGVzIG90aGVyIGZpZWxkcywgc28gaXQgbXVzdCBjb21lIGZpcnN0CisJCXJldHVybiAtMSBpZiAkYSBlcSAndXJsJzsKKwkJcmV0dXJuICAxIGlmICRiIGVxICd1cmwnOworCQlyZXR1cm4gJGEgY21wICRiOworCX0ga2V5cyAlJGNyZWRlbnRpYWwpIHsKKwkJaWYgKGRlZmluZWQgJGNyZWRlbnRpYWwtPnska2V5fSkgeworCQkJcHJpbnQgJHdyaXRlciAka2V5LCAnPScsICRjcmVkZW50aWFsLT57JGtleX0sICJcbiI7CisJCX0KKwl9CisJcHJpbnQgJHdyaXRlciAiXG4iOworfQorCitzdWIgX2NyZWRlbnRpYWxfcnVuIHsKKwlteSAoJHNlbGYsICRjcmVkZW50aWFsLCAkb3ApID0gX21heWJlX3NlbGYoQF8pOworCW15ICgkcGlkLCAkcmVhZGVyLCAkd3JpdGVyLCAkY3R4KSA9IGNvbW1hbmRfYmlkaV9waXBlKCdjcmVkZW50aWFsJywgJG9wKTsKKworCWNyZWRlbnRpYWxfd3JpdGUgJHdyaXRlciwgJGNyZWRlbnRpYWw7CisJY2xvc2UgJHdyaXRlcjsKKworCWlmICgkb3AgZXEgImZpbGwiKSB7CisJCSUkY3JlZGVudGlhbCA9IGNyZWRlbnRpYWxfcmVhZCAkcmVhZGVyOworCX0KKwlpZiAoPCRyZWFkZXI+KSB7CisJCXRocm93IEVycm9yOjpTaW1wbGUoInVuZXhwZWN0ZWQgb3V0cHV0IGZyb20gZ2l0IGNyZWRlbnRpYWwgJG9wIHJlc3BvbnNlOlxuJF9cbiIpOworCX0KKworCWNvbW1hbmRfY2xvc2VfYmlkaV9waXBlKCRwaWQsICRyZWFkZXIsIHVuZGVmLCAkY3R4KTsKK30KKworPWl0ZW0gY3JlZGVudGlhbCggQ1JFREVOVElBTF9IQVNIUkVGIFssIE9QRVJBVElPTiBdICkKKworPWl0ZW0gY3JlZGVudGlhbCggQ1JFREVOVElBTF9IQVNIUkVGLCBDT0RFICkKKworRXhlY3V0ZXMgQzxnaXQgY3JlZGVudGlhbD4gZm9yIGEgZ2l2ZW4gc2V0IG9mIGNyZWRlbnRpYWxzIGFuZCBzcGVjaWZpZWQKK29wZXJhdGlvbi4gIEluIGJvdGggZm9ybXMgQzxDUkVERU5USUFMX0hBU0hSRUY+IG5lZWRzIHRvIGJlIGEgcmVmZXJlbmNlIHRvCithIGhhc2ggd2hpY2ggc3RvcmVzIGNyZWRlbnRpYWxzLiAgVW5kZXIgY2VydGFpbiBjb25kaXRpb25zIHRoZSBoYXNoIGNhbgorY2hhbmdlLgorCitJbiB0aGUgZmlyc3QgZm9ybSwgQzxPUEVSQVRJT04+IGNhbiBiZSBDPCdmaWxsJz4sIEM8J2FwcHJvdmUnPiBvciBDPCdyZWplY3QnPiwKK2FuZCBmdW5jdGlvbiB3aWxsIGV4ZWN1dGUgY29ycmVzcG9uZGluZyBDPGdpdCBjcmVkZW50aWFsPiBzdWItY29tbWFuZC4gIElmCitpdCdzIG9taXR0ZWQgQzwnZmlsbCc+IGlzIGFzc3VtZWQuICBJbiBjYXNlIG9mIEM8J2ZpbGwnPiB0aGUgdmFsdWVzIHN0b3JlZCBpbgorQzxDUkVERU5USUFMX0hBU0hSRUY+IHdpbGwgYmUgY2hhbmdlZCB0byB0aGUgb25lcyByZXR1cm5lZCBieSB0aGUgQzxnaXQKK2NyZWRlbnRpYWwgZmlsbD4gY29tbWFuZC4gIFRoZSB1c3VhbCB1c2FnZSB3b3VsZCBsb29rIHNvbWV0aGluZyBsaWtlOgorCisJbXkgJWNyZWQgPSAoCisJCSdwcm90b2NvbCcgPT4gJ2h0dHBzJywKKwkJJ2hvc3QnID0+ICdleGFtcGxlLmNvbScsCisJCSd1c2VybmFtZScgPT4gJ2JvYicKKwkpOworCUdpdDo6Y3JlZGVudGlhbCBcJWNyZWQ7CisJaWYgKHRyeV90b19hdXRoZW50aWNhdGUoJGNyZWR7J3VzZXJuYW1lJ30sICRjcmVkeydwYXNzd29yZCd9KSkgeworCQlHaXQ6OmNyZWRlbnRpYWwgXCVjcmVkLCAnYXBwcm92ZSc7CisJCS4uLiBkbyBtb3JlIHN0dWZmIC4uLgorCX0gZWxzZSB7CisJCUdpdDo6Y3JlZGVudGlhbCBcJWNyZWQsICdyZWplY3QnOworCX0KKworSW4gdGhlIHNlY29uZCBmb3JtLCBDPENPREU+IG5lZWRzIHRvIGJlIGEgcmVmZXJlbmNlIHRvIGEgc3Vicm91dGluZS4gIFRoZQorZnVuY3Rpb24gd2lsbCBleGVjdXRlIEM8Z2l0IGNyZWRlbnRpYWwgZmlsbD4gdG8gZmlsbCB0aGUgcHJvdmlkZWQgY3JlZGVudGlhbAoraGFzaCwgdGhlbiBjYWxsIEM8Q09ERT4gd2l0aCBDPENSRURFTlRJQUxfSEFTSFJFRj4gYXMgdGhlIHNvbGUgYXJndW1lbnQuICBJZgorQzxDT0RFPidzIHJldHVybiB2YWx1ZSBpcyBkZWZpbmVkLCB0aGUgZnVuY3Rpb24gd2lsbCBleGVjdXRlIEM8Z2l0IGNyZWRlbnRpYWwKK2FwcHJvdmU+IChpZiByZXR1cm4gdmFsdWUgeWllbGRzIHRydWUpIG9yIEM8Z2l0IGNyZWRlbnRpYWwgcmVqZWN0PiAoaWYgcmV0dXJuCit2YWx1ZSBpcyBmYWxzZSkuICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmLCBub3RoaW5nIGF0IGFsbCBpcyBleGVjdXRlZDsKK3RoaXMgaXMgdXNlZnVsLCBmb3IgZXhhbXBsZSwgaWYgdGhlIGNyZWRlbnRpYWwgY291bGQgbmVpdGhlciBiZSB2ZXJpZmllZCBub3IKK3JlamVjdGVkIGR1ZSB0byBhbiB1bnJlbGF0ZWQgbmV0d29yayBlcnJvci4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHNhbWUgYXMKK3doYXQgQzxDT0RFPiByZXR1cm5zLiAgV2l0aCB0aGlzIGZvcm0sIHRoZSB1c2FnZSBtaWdodCBsb29rIGFzIGZvbGxvd3M6CisKKwlpZiAoR2l0OjpjcmVkZW50aWFsIHsKKwkJJ3Byb3RvY29sJyA9PiAnaHR0cHMnLAorCQknaG9zdCcgPT4gJ2V4YW1wbGUuY29tJywKKwkJJ3VzZXJuYW1lJyA9PiAnYm9iJworCX0sIHN1YiB7CisJCW15ICRjcmVkID0gc2hpZnQ7CisJCXJldHVybiAhIXRyeV90b19hdXRoZW50aWNhdGUoJGNyZWQtPnsndXNlcm5hbWUnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY3JlZC0+eydwYXNzd29yZCd9KTsKKwl9KSB7CisJCS4uLiBkbyBtb3JlIHN0dWZmIC4uLgorCX0KKworPWN1dAorCitzdWIgY3JlZGVudGlhbCB7CisJbXkgKCRzZWxmLCAkY3JlZGVudGlhbCwgJG9wX29yX2NvZGUpID0gKF9tYXliZV9zZWxmKEBfKSwgJ2ZpbGwnKTsKKworCWlmICgnQ09ERScgZXEgcmVmICRvcF9vcl9jb2RlKSB7CisJCV9jcmVkZW50aWFsX3J1biAkY3JlZGVudGlhbCwgJ2ZpbGwnOworCQlteSAkcmV0ID0gJG9wX29yX2NvZGUtPigkY3JlZGVudGlhbCk7CisJCWlmIChkZWZpbmVkICRyZXQpIHsKKwkJCV9jcmVkZW50aWFsX3J1biAkY3JlZGVudGlhbCwgJHJldCA/ICdhcHByb3ZlJyA6ICdyZWplY3QnOworCQl9CisJCXJldHVybiAkcmV0OworCX0gZWxzZSB7CisJCV9jcmVkZW50aWFsX3J1biAkY3JlZGVudGlhbCwgJG9wX29yX2NvZGU7CisJfQorfQorCit7ICMgJVRFTVBfKiBMZXhpY2FsIENvbnRleHQKKworbXkgKCVURU1QX0ZJTEVNQVAsICVURU1QX0ZJTEVTKTsKKworPWl0ZW0gdGVtcF9hY3F1aXJlICggTkFNRSApCisKK0F0dGVtcHRzIHRvIHJldHJpZXZlIHRoZSB0ZW1wb3JhcnkgZmlsZSBtYXBwZWQgdG8gdGhlIHN0cmluZyBDPE5BTUU+LiBJZiBhbgorYXNzb2NpYXRlZCB0ZW1wIGZpbGUgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgdGhpcyBzZXNzaW9uIG9yIHdhcyBjbG9zZWQsIGl0IGlzCitjcmVhdGVkLCBjYWNoZWQsIGFuZCBzZXQgZm9yIGF1dG9mbHVzaCBhbmQgYmlubW9kZS4KKworSW50ZXJuYWxseSBsb2NrcyB0aGUgZmlsZSBtYXBwZWQgdG8gQzxOQU1FPi4gVGhpcyBsb2NrIG11c3QgYmUgcmVsZWFzZWQgd2l0aAorQzx0ZW1wX3JlbGVhc2UoKT4gd2hlbiB0aGUgdGVtcCBmaWxlIGlzIG5vIGxvbmdlciBuZWVkZWQuIFN1YnNlcXVlbnQgYXR0ZW1wdHMKK3RvIHJldHJpZXZlIHRlbXBvcmFyeSBmaWxlcyBtYXBwZWQgdG8gdGhlIHNhbWUgQzxOQU1FPiB3aGlsZSBzdGlsbCBsb2NrZWQgd2lsbAorY2F1c2UgYW4gZXJyb3IuIFRoaXMgbG9ja2luZyBtZWNoYW5pc20gcHJvdmlkZXMgYSB3ZWFrIGd1YXJhbnRlZSBhbmQgaXMgbm90Cit0aHJlYWRzYWZlLiBJdCBkb2VzIHByb3ZpZGUgc29tZSBlcnJvciBjaGVja2luZyB0byBoZWxwIHByZXZlbnQgdGVtcCBmaWxlIHJlZnMKK3dyaXRpbmcgb3ZlciBvbmUgYW5vdGhlci4KKworSW4gZ2VuZXJhbCwgdGhlIEw8RmlsZTo6SGFuZGxlPiByZXR1cm5lZCBzaG91bGQgbm90IGJlIGNsb3NlZCBieSBjb25zdW1lcnMgYXMKK2l0IGRlZmVhdHMgdGhlIHB1cnBvc2Ugb2YgdGhpcyBjYWNoaW5nIG1lY2hhbmlzbS4gSWYgeW91IG5lZWQgdG8gY2xvc2UgdGhlIHRlbXAKK2ZpbGUgaGFuZGxlLCB0aGVuIHlvdSBzaG91bGQgdXNlIEw8RmlsZTo6VGVtcD4gb3IgYW5vdGhlciB0ZW1wIGZpbGUgZmFjdWx0eQorZGlyZWN0bHkuIElmIGEgaGFuZGxlIGlzIGNsb3NlZCBhbmQgdGhlbiByZXF1ZXN0ZWQgYWdhaW4sIHRoZW4gYSB3YXJuaW5nIHdpbGwKK2lzc3VlLgorCis9Y3V0CisKK3N1YiB0ZW1wX2FjcXVpcmUgeworCW15ICR0ZW1wX2ZkID0gX3RlbXBfY2FjaGUoQF8pOworCisJJFRFTVBfRklMRVN7JHRlbXBfZmR9e2xvY2tlZH0gPSAxOworCSR0ZW1wX2ZkOworfQorCis9aXRlbSB0ZW1wX2lzX2xvY2tlZCAoIE5BTUUgKQorCitSZXR1cm5zIHRydWUgaWYgdGhlIGludGVybmFsIGxvY2sgY3JlYXRlZCBieSBhIHByZXZpb3VzIEM8dGVtcF9hY3F1aXJlKCk+CitjYWxsIHdpdGggQzxOQU1FPiBpcyBzdGlsbCBpbiBlZmZlY3QuCisKK1doZW4gdGVtcF9hY3F1aXJlIGlzIGNhbGxlZCBvbiBhIEM8TkFNRT4sIGl0IGludGVybmFsbHkgbG9ja3MgdGhlIHRlbXBvcmFyeQorZmlsZSBtYXBwZWQgdG8gQzxOQU1FPi4gIFRoYXQgbG9jayB3aWxsIG5vdCBiZSByZWxlYXNlZCB1bnRpbCBDPHRlbXBfcmVsZWFzZSgpPgoraXMgY2FsbGVkIHdpdGggZWl0aGVyIHRoZSBvcmlnaW5hbCBDPE5BTUU+IG9yIHRoZSBMPEZpbGU6OkhhbmRsZT4gdGhhdCB3YXMKK3JldHVybmVkIGZyb20gdGhlIG9yaWdpbmFsIGNhbGwgdG8gdGVtcF9hY3F1aXJlLgorCitTdWJzZXF1ZW50IGF0dGVtcHRzIHRvIGNhbGwgQzx0ZW1wX2FjcXVpcmUoKT4gd2l0aCB0aGUgc2FtZSBDPE5BTUU+IHdpbGwgZmFpbAordW5sZXNzIHRoZXJlIGhhcyBiZWVuIGFuIGludGVydmVuaW5nIEM8dGVtcF9yZWxlYXNlKCk+IGNhbGwgZm9yIHRoYXQgQzxOQU1FPgorKG9yIGl0cyBjb3JyZXNwb25kaW5nIEw8RmlsZTo6SGFuZGxlPiB0aGF0IHdhcyByZXR1cm5lZCBieSB0aGUgb3JpZ2luYWwKK0M8dGVtcF9hY3F1aXJlKCk+IGNhbGwpLgorCitJZiB0cnVlIGlzIHJldHVybmVkIGJ5IEM8dGVtcF9pc19sb2NrZWQoKT4gZm9yIGEgQzxOQU1FPiwgYW4gYXR0ZW1wdCB0bworQzx0ZW1wX2FjcXVpcmUoKT4gdGhlIHNhbWUgQzxOQU1FPiB3aWxsIGNhdXNlIGFuIGVycm9yIHVubGVzcworQzx0ZW1wX3JlbGVhc2U+IGlzIGZpcnN0IGNhbGxlZCBvbiB0aGF0IEM8TkFNRT4gKG9yIGl0cyBjb3JyZXNwb25kaW5nCitMPEZpbGU6OkhhbmRsZT4gdGhhdCB3YXMgcmV0dXJuZWQgYnkgdGhlIG9yaWdpbmFsIEM8dGVtcF9hY3F1aXJlKCk+IGNhbGwpLgorCis9Y3V0CisKK3N1YiB0ZW1wX2lzX2xvY2tlZCB7CisJbXkgKCRzZWxmLCAkbmFtZSkgPSBfbWF5YmVfc2VsZihAXyk7CisJbXkgJHRlbXBfZmQgPSBcJFRFTVBfRklMRU1BUHskbmFtZX07CisKKwlkZWZpbmVkICQkdGVtcF9mZCAmJiAkJHRlbXBfZmQtPm9wZW5lZCAmJiAkVEVNUF9GSUxFU3skJHRlbXBfZmR9e2xvY2tlZH07Cit9CisKKz1pdGVtIHRlbXBfcmVsZWFzZSAoIE5BTUUgKQorCis9aXRlbSB0ZW1wX3JlbGVhc2UgKCBGSUxFSEFORExFICkKKworUmVsZWFzZXMgYSBsb2NrIGFjcXVpcmVkIHRocm91Z2ggQzx0ZW1wX2FjcXVpcmUoKT4uIENhbiBiZSBjYWxsZWQgZWl0aGVyIHdpdGgKK3RoZSBDPE5BTUU+IG1hcHBpbmcgdXNlZCB3aGVuIGFjcXVpcmluZyB0aGUgdGVtcCBmaWxlIG9yIHdpdGggdGhlIEM8RklMRUhBTkRMRT4KK3JlZmVyZW5jaW5nIGEgbG9ja2VkIHRlbXAgZmlsZS4KKworV2FybnMgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHJlbGVhc2UgYSBmaWxlIHRoYXQgaXMgbm90IGxvY2tlZC4KKworVGhlIHRlbXAgZmlsZSB3aWxsIGJlIHRydW5jYXRlZCBiZWZvcmUgYmVpbmcgcmVsZWFzZWQuIFRoaXMgY2FuIGhlbHAgdG8gcmVkdWNlCitkaXNrIEkvTyB3aGVyZSB0aGUgc3lzdGVtIGlzIHNtYXJ0IGVub3VnaCB0byBkZXRlY3QgdGhlIHRydW5jYXRpb24gd2hpbGUgZGF0YQoraXMgaW4gdGhlIG91dHB1dCBidWZmZXJzLiBCZXdhcmUgdGhhdCBhZnRlciB0aGUgdGVtcCBmaWxlIGlzIHJlbGVhc2VkIGFuZAordHJ1bmNhdGVkLCBhbnkgb3BlcmF0aW9ucyBvbiB0aGF0IGZpbGUgbWF5IGZhaWwgbWlzZXJhYmx5IHVudGlsIGl0IGlzCityZS1hY3F1aXJlZC4gQWxsIGNvbnRlbnRzIGFyZSBsb3N0IGJldHdlZW4gZWFjaCByZWxlYXNlIGFuZCBhY3F1aXJlIG1hcHBlZCB0bwordGhlIHNhbWUgc3RyaW5nLgorCis9Y3V0CisKK3N1YiB0ZW1wX3JlbGVhc2UgeworCW15ICgkc2VsZiwgJHRlbXBfZmQsICR0cnVuYykgPSBfbWF5YmVfc2VsZihAXyk7CisKKwlpZiAoZXhpc3RzICRURU1QX0ZJTEVNQVB7JHRlbXBfZmR9KSB7CisJCSR0ZW1wX2ZkID0gJFRFTVBfRklMRVN7JHRlbXBfZmR9OworCX0KKwl1bmxlc3MgKCRURU1QX0ZJTEVTeyR0ZW1wX2ZkfXtsb2NrZWR9KSB7CisJCWNhcnAgIkF0dGVtcHQgdG8gcmVsZWFzZSB0ZW1wIGZpbGUgJyIsCisJCQkkdGVtcF9mZCwgIicgdGhhdCBoYXMgbm90IGJlZW4gbG9ja2VkIjsKKwl9CisJdGVtcF9yZXNldCgkdGVtcF9mZCkgaWYgJHRydW5jIGFuZCAkdGVtcF9mZC0+b3BlbmVkOworCisJJFRFTVBfRklMRVN7JHRlbXBfZmR9e2xvY2tlZH0gPSAwOworCXVuZGVmOworfQorCitzdWIgX3RlbXBfY2FjaGUgeworCW15ICgkc2VsZiwgJG5hbWUpID0gX21heWJlX3NlbGYoQF8pOworCisJbXkgJHRlbXBfZmQgPSBcJFRFTVBfRklMRU1BUHskbmFtZX07CisJaWYgKGRlZmluZWQgJCR0ZW1wX2ZkIGFuZCAkJHRlbXBfZmQtPm9wZW5lZCkgeworCQlpZiAoJFRFTVBfRklMRVN7JCR0ZW1wX2ZkfXtsb2NrZWR9KSB7CisJCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJUZW1wIGZpbGUgd2l0aCBtb25pa2VyICciIC4KKwkJCQkkbmFtZSAuICInIGFscmVhZHkgaW4gdXNlIik7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoZGVmaW5lZCAkJHRlbXBfZmQpIHsKKwkJCSMgdGhlbiB3ZSdyZSBoZXJlIGJlY2F1c2Ugb2YgYSBjbG9zZWQgaGFuZGxlLgorCQkJY2FycCAiVGVtcCBmaWxlICciLCAkbmFtZSwKKwkJCQkiJyB3YXMgY2xvc2VkLiBPcGVuaW5nIHJlcGxhY2VtZW50LiI7CisJCX0KKwkJbXkgJGZuYW1lOworCisJCW15ICR0bXBkaXI7CisJCWlmIChkZWZpbmVkICRzZWxmKSB7CisJCQkkdG1wZGlyID0gJHNlbGYtPnJlcG9fcGF0aCgpOworCQl9CisKKwkJbXkgJG4gPSAkbmFtZTsKKwkJJG4gPX4gcy9cVy9fL2c7ICMgbm8gc3RyYW5nZSBjaGFycworCisJCSgkJHRlbXBfZmQsICRmbmFtZSkgPSBGaWxlOjpUZW1wOjp0ZW1wZmlsZSgKKwkJCSJHaXRfJHtufV9YWFhYWFgiLCBVTkxJTksgPT4gMSwgRElSID0+ICR0bXBkaXIsCisJCQkpIG9yIHRocm93IEVycm9yOjpTaW1wbGUoImNvdWxkbid0IG9wZW4gbmV3IHRlbXAgZmlsZSIpOworCisJCSQkdGVtcF9mZC0+YXV0b2ZsdXNoOworCQliaW5tb2RlICQkdGVtcF9mZDsKKwkJJFRFTVBfRklMRVN7JCR0ZW1wX2ZkfXtmbmFtZX0gPSAkZm5hbWU7CisJfQorCSQkdGVtcF9mZDsKK30KKworPWl0ZW0gdGVtcF9yZXNldCAoIEZJTEVIQU5ETEUgKQorCitUcnVuY2F0ZXMgYW5kIHJlc2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIEM8RklMRUhBTkRMRT4uCisKKz1jdXQKKworc3ViIHRlbXBfcmVzZXQgeworCW15ICgkc2VsZiwgJHRlbXBfZmQpID0gX21heWJlX3NlbGYoQF8pOworCisJdHJ1bmNhdGUgJHRlbXBfZmQsIDAKKwkJb3IgdGhyb3cgRXJyb3I6OlNpbXBsZSgiY291bGRuJ3QgdHJ1bmNhdGUgZmlsZSIpOworCXN5c3NlZWsoJHRlbXBfZmQsIDAsIFNFRUtfU0VUKSBhbmQgc2VlaygkdGVtcF9mZCwgMCwgU0VFS19TRVQpCisJCW9yIHRocm93IEVycm9yOjpTaW1wbGUoImNvdWxkbid0IHNlZWsgdG8gYmVnaW5uaW5nIG9mIGZpbGUiKTsKKwlzeXNzZWVrKCR0ZW1wX2ZkLCAwLCBTRUVLX0NVUikgPT0gMCBhbmQgdGVsbCgkdGVtcF9mZCkgPT0gMAorCQlvciB0aHJvdyBFcnJvcjo6U2ltcGxlKCJleHBlY3RlZCBmaWxlIHBvc2l0aW9uIHRvIGJlIHJlc2V0Iik7Cit9CisKKz1pdGVtIHRlbXBfcGF0aCAoIE5BTUUgKQorCis9aXRlbSB0ZW1wX3BhdGggKCBGSUxFSEFORExFICkKKworUmV0dXJucyB0aGUgZmlsZW5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiB0ZW1wZmlsZS4KKworPWN1dAorCitzdWIgdGVtcF9wYXRoIHsKKwlteSAoJHNlbGYsICR0ZW1wX2ZkKSA9IF9tYXliZV9zZWxmKEBfKTsKKworCWlmIChleGlzdHMgJFRFTVBfRklMRU1BUHskdGVtcF9mZH0pIHsKKwkJJHRlbXBfZmQgPSAkVEVNUF9GSUxFTUFQeyR0ZW1wX2ZkfTsKKwl9CisJJFRFTVBfRklMRVN7JHRlbXBfZmR9e2ZuYW1lfTsKK30KKworc3ViIEVORCB7CisJdW5saW5rIHZhbHVlcyAlVEVNUF9GSUxFTUFQIGlmICVURU1QX0ZJTEVNQVA7Cit9CisKK30gIyAlVEVNUF8qIExleGljYWwgQ29udGV4dAorCis9aXRlbSBwcmVmaXhfbGluZXMgKCBQUkVGSVgsIFNUUklORyBbLCBTVFJJTkcuLi4gXSkKKworUHJlZml4ZXMgbGluZXMgaW4gQzxTVFJJTkc+IHdpdGggQzxQUkVGSVg+LgorCis9Y3V0CisKK3N1YiBwcmVmaXhfbGluZXMgeworCW15ICRwcmVmaXggPSBzaGlmdDsKKwlteSAkc3RyaW5nID0gam9pbigiXG4iLCBAXyk7CisJJHN0cmluZyA9fiBzL14vJHByZWZpeC9tZzsKKwlyZXR1cm4gJHN0cmluZzsKK30KKworPWl0ZW0gdW5xdW90ZV9wYXRoICggUEFUSCApCisKK1VucXVvdGUgYSBxdW90ZWQgcGF0aCBjb250YWluaW5nIGMtZXNjYXBlcyBhcyByZXR1cm5lZCBieSBscy1maWxlcyBldGMuCit3aGVuIG5vdCB1c2luZyAteiBvciB3aGVuIHBhcnNpbmcgdGhlIG91dHB1dCBvZiBkaWZmIC11LgorCis9Y3V0CisKK3sKKwlteSAlY3F1b3RlX21hcCA9ICgKKwkJImEiID0+IGNocig3KSwKKwkJImIiID0+IGNocig4KSwKKwkJInQiID0+IGNocig5KSwKKwkJIm4iID0+IGNocigxMCksCisJCSJ2IiA9PiBjaHIoMTEpLAorCQkiZiIgPT4gY2hyKDEyKSwKKwkJInIiID0+IGNocigxMyksCisJCSJcXCIgPT4gIlxcIiwKKwkJIlwwNDIiID0+ICJcMDQyIiwKKwkpOworCisJc3ViIHVucXVvdGVfcGF0aCB7CisJCWxvY2FsICgkXykgPSBAXzsKKwkJbXkgKCRyZXR2YWwsICRyZW1haW5kZXIpOworCQlpZiAoIS9eXDA0MiguKilcMDQyJC8pIHsKKwkJCXJldHVybiAkXzsKKwkJfQorCQkoJF8sICRyZXR2YWwpID0gKCQxLCAiIik7CisJCXdoaWxlICgvXihbXlxcXSopXFwoLiopJC8pIHsKKwkJCSRyZW1haW5kZXIgPSAkMjsKKwkJCSRyZXR2YWwgLj0gJDE7CisJCQlmb3IgKCRyZW1haW5kZXIpIHsKKwkJCQlpZiAoL14oWzAtM11bMC03XVswLTddKSguKikkLykgeworCQkJCQkkcmV0dmFsIC49IGNocihvY3QoJDEpKTsKKwkJCQkJJF8gPSAkMjsKKwkJCQkJbGFzdDsKKwkJCQl9CisJCQkJaWYgKC9eKFtcXFwwNDJhYnRudmZyXSkoLiopJC8pIHsKKwkJCQkJJHJldHZhbCAuPSAkY3F1b3RlX21hcHskMX07CisJCQkJCSRfID0gJDI7CisJCQkJCWxhc3Q7CisJCQkJfQorCQkJCSMgVGhpcyBpcyBtYWxmb3JtZWQKKwkJCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJpbnZhbGlkIHF1b3RlZCBwYXRoICRfWzBdIik7CisJCQl9CisJCQkkXyA9ICRyZW1haW5kZXI7CisJCX0KKwkJJHJldHZhbCAuPSAkXzsKKwkJcmV0dXJuICRyZXR2YWw7CisJfQorfQorCis9aXRlbSBnZXRfY29tbWVudF9saW5lX2NoYXIgKCApCisKK0dldHMgdGhlIGNvcmUuY29tbWVudGNoYXIgY29uZmlndXJhdGlvbiB2YWx1ZS4KK1RoZSB2YWx1ZSBmYWxscy1iYWNrIHRvICcjJyBpZiBjb3JlLmNvbW1lbnRjaGFyIGlzIHNldCB0byAnYXV0bycuCisKKz1jdXQKKworc3ViIGdldF9jb21tZW50X2xpbmVfY2hhciB7CisJbXkgJGNvbW1lbnRfbGluZV9jaGFyID0gY29uZmlnKCJjb3JlLmNvbW1lbnRjaGFyIikgfHwgJyMnOworCSRjb21tZW50X2xpbmVfY2hhciA9ICcjJyBpZiAoJGNvbW1lbnRfbGluZV9jaGFyIGVxICdhdXRvJyk7CisJJGNvbW1lbnRfbGluZV9jaGFyID0gJyMnIGlmIChsZW5ndGgoJGNvbW1lbnRfbGluZV9jaGFyKSAhPSAxKTsKKwlyZXR1cm4gJGNvbW1lbnRfbGluZV9jaGFyOworfQorCis9aXRlbSBjb21tZW50X2xpbmVzICggU1RSSU5HIFssIFNUUklORy4uLiBdKQorCitDb21tZW50cyBsaW5lcyBmb2xsb3dpbmcgY29yZS5jb21tZW50Y2hhciBjb25maWd1cmF0aW9uLgorCis9Y3V0CisKK3N1YiBjb21tZW50X2xpbmVzIHsKKwlteSAkY29tbWVudF9saW5lX2NoYXIgPSBnZXRfY29tbWVudF9saW5lX2NoYXI7CisJcmV0dXJuIHByZWZpeF9saW5lcygiJGNvbW1lbnRfbGluZV9jaGFyICIsIEBfKTsKK30KKworPWJhY2sKKworPWhlYWQxIEVSUk9SIEhBTkRMSU5HCisKK0FsbCBmdW5jdGlvbnMgYXJlIHN1cHBvc2VkIHRvIHRocm93IFBlcmwgZXhjZXB0aW9ucyBpbiBjYXNlIG9mIGVycm9ycy4KK1NlZSB0aGUgTDxFcnJvcj4gbW9kdWxlIG9uIGhvdyB0byBjYXRjaCB0aG9zZS4gTW9zdCBleGNlcHRpb25zIGFyZSBtZXJlCitMPEVycm9yOjpTaW1wbGU+IGluc3RhbmNlcy4KKworSG93ZXZlciwgdGhlIEM8Y29tbWFuZCgpPiwgQzxjb21tYW5kX29uZWxpbmUoKT4gYW5kIEM8Y29tbWFuZF9ub2lzeSgpPgorZnVuY3Rpb25zIHN1aXRlIGNhbiB0aHJvdyBDPEdpdDo6RXJyb3I6OkNvbW1hbmQ+IGV4Y2VwdGlvbnMgYXMgd2VsbDogdGhvc2UgYXJlCit0aHJvd24gd2hlbiB0aGUgZXh0ZXJuYWwgY29tbWFuZCByZXR1cm5zIGFuIGVycm9yIGNvZGUgYW5kIGNvbnRhaW4gdGhlIGVycm9yCitjb2RlIGFzIHdlbGwgYXMgYWNjZXNzIHRvIHRoZSBjYXB0dXJlZCBjb21tYW5kJ3Mgb3V0cHV0LiBUaGUgZXhjZXB0aW9uIGNsYXNzCitwcm92aWRlcyB0aGUgdXN1YWwgQzxzdHJpbmdpZnk+IGFuZCBDPHZhbHVlPiAoY29tbWFuZCdzIGV4aXQgY29kZSkgbWV0aG9kcyBhbmQKK2luIGFkZGl0aW9uIGFsc28gYSBDPGNtZF9vdXRwdXQ+IG1ldGhvZCB0aGF0IHJldHVybnMgZWl0aGVyIGFuIGFycmF5IG9yIGEKK3N0cmluZyB3aXRoIHRoZSBjYXB0dXJlZCBjb21tYW5kIG91dHB1dCAoZGVwZW5kaW5nIG9uIHRoZSBvcmlnaW5hbCBmdW5jdGlvbgorY2FsbCBjb250ZXh0OyBDPGNvbW1hbmRfbm9pc3koKT4gcmV0dXJucyBDPHVuZGVmPikgYW5kICQ8Y21kbGluZT4gd2hpY2gKK3JldHVybnMgdGhlIGNvbW1hbmQgYW5kIGl0cyBhcmd1bWVudHMgKGJ1dCB3aXRob3V0IHByb3BlciBxdW90aW5nKS4KKworTm90ZSB0aGF0IHRoZSBDPGNvbW1hbmRfKl9waXBlKCk+IGZ1bmN0aW9ucyBjYW5ub3QgdGhyb3cgdGhpcyBleGNlcHRpb24gc2luY2UKK2l0IGhhcyBubyBpZGVhIHdoZXRoZXIgdGhlIGNvbW1hbmQgZmFpbGVkIG9yIG5vdC4gWW91IHdpbGwgb25seSBmaW5kIG91dAorYXQgdGhlIHRpbWUgeW91IEM8Y2xvc2U+IHRoZSBwaXBlOyBpZiB5b3Ugd2FudCB0byBoYXZlIHRoYXQgYXV0b21hdGVkLAordXNlIEM8Y29tbWFuZF9jbG9zZV9waXBlKCk+LCB3aGljaCBjYW4gdGhyb3cgdGhlIGV4Y2VwdGlvbi4KKworPWN1dAorCit7CisJcGFja2FnZSBHaXQ6OkVycm9yOjpDb21tYW5kOworCisJQEdpdDo6RXJyb3I6OkNvbW1hbmQ6OklTQSA9IHF3KEVycm9yKTsKKworCXN1YiBuZXcgeworCQlteSAkc2VsZiA9IHNoaWZ0OworCQlteSAkY21kbGluZSA9ICcnIC4gc2hpZnQ7CisJCW15ICR2YWx1ZSA9IDAgKyBzaGlmdDsKKwkJbXkgJG91dHB1dHJlZiA9IHNoaWZ0OworCQlteShAYXJncykgPSAoKTsKKworCQlsb2NhbCAkRXJyb3I6OkRlcHRoID0gJEVycm9yOjpEZXB0aCArIDE7CisKKwkJcHVzaChAYXJncywgJy1jbWRsaW5lJywgJGNtZGxpbmUpOworCQlwdXNoKEBhcmdzLCAnLXZhbHVlJywgJHZhbHVlKTsKKwkJcHVzaChAYXJncywgJy1vdXRwdXRyZWYnLCAkb3V0cHV0cmVmKTsKKworCQkkc2VsZi0+U1VQRVI6Om5ldygtdGV4dCA9PiAnY29tbWFuZCByZXR1cm5lZCBlcnJvcicsIEBhcmdzKTsKKwl9CisKKwlzdWIgc3RyaW5naWZ5IHsKKwkJbXkgJHNlbGYgPSBzaGlmdDsKKwkJbXkgJHRleHQgPSAkc2VsZi0+U1VQRVI6OnN0cmluZ2lmeTsKKwkJJHNlbGYtPmNtZGxpbmUoKSAuICc6ICcgLiAkdGV4dCAuICc6ICcgLiAkc2VsZi0+dmFsdWUoKSAuICJcbiI7CisJfQorCisJc3ViIGNtZGxpbmUgeworCQlteSAkc2VsZiA9IHNoaWZ0OworCQkkc2VsZi0+eyctY21kbGluZSd9OworCX0KKworCXN1YiBjbWRfb3V0cHV0IHsKKwkJbXkgJHNlbGYgPSBzaGlmdDsKKwkJbXkgJHJlZiA9ICRzZWxmLT57Jy1vdXRwdXRyZWYnfTsKKwkJZGVmaW5lZCAkcmVmIG9yIHVuZGVmOworCQlpZiAocmVmICRyZWYgZXEgJ0FSUkFZJykgeworCQkJcmV0dXJuIEAkcmVmOworCQl9IGVsc2UgeyAjIFNDQUxBUgorCQkJcmV0dXJuICQkcmVmOworCQl9CisJfQorfQorCis9b3ZlciA0CisKKz1pdGVtIGdpdF9jbWRfdHJ5IHsgQ09ERSB9IEVSUk1TRworCitUaGlzIG1hZ2ljYWwgc3RhdGVtZW50IHdpbGwgYXV0b21hdGljYWxseSBjYXRjaCBhbnkgQzxHaXQ6OkVycm9yOjpDb21tYW5kPgorZXhjZXB0aW9ucyB0aHJvd24gYnkgQzxDT0RFPiBhbmQgbWFrZSB5b3VyIHByb2dyYW0gZGllIHdpdGggQzxFUlJNU0c+CitvbiBpdHMgbGlwczsgdGhlIG1lc3NhZ2Ugd2lsbCBoYXZlICVzIHN1YnN0aXR1dGVkIGZvciB0aGUgY29tbWFuZCBsaW5lCithbmQgJWQgZm9yIHRoZSBleGl0IHN0YXR1cy4gVGhpcyBzdGF0ZW1lbnQgaXMgdXNlZnVsIG1vc3RseSBmb3IgcHJvZHVjaW5nCittb3JlIHVzZXItZnJpZW5kbHkgZXJyb3IgbWVzc2FnZXMuCisKK0luIGNhc2Ugb2Ygbm8gZXhjZXB0aW9uIGNhdWdodCB0aGUgc3RhdGVtZW50IHJldHVybnMgQzxDT0RFPidzIHJldHVybiB2YWx1ZS4KKworTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgYXV0by1leHBvcnRlZCBmdW5jdGlvbi4KKworPWN1dAorCitzdWIgZ2l0X2NtZF90cnkoJiQpIHsKKwlteSAoJGNvZGUsICRlcnJtc2cpID0gQF87CisJbXkgQHJlc3VsdDsKKwlteSAkZXJyOworCW15ICRhcnJheSA9IHdhbnRhcnJheTsKKwl0cnkgeworCQlpZiAoJGFycmF5KSB7CisJCQlAcmVzdWx0ID0gJiRjb2RlOworCQl9IGVsc2UgeworCQkJJHJlc3VsdFswXSA9ICYkY29kZTsKKwkJfQorCX0gY2F0Y2ggR2l0OjpFcnJvcjo6Q29tbWFuZCB3aXRoIHsKKwkJbXkgJEUgPSBzaGlmdDsKKwkJJGVyciA9ICRlcnJtc2c7CisJCSRlcnIgPX4gcy9cJXMvJEUtPmNtZGxpbmUoKS9nZTsKKwkJJGVyciA9fiBzL1wlZC8kRS0+dmFsdWUoKS9nZTsKKwkJIyBXZSBjYW4ndCBjcm9hayBoZXJlIHNpbmNlIEVycm9yLnBtIHdvdWxkIG1hbmdsZQorCQkjIHRoYXQgdG8gRXJyb3I6OlNpbXBsZS4KKwl9OworCSRlcnIgYW5kIGNyb2FrICRlcnI7CisJcmV0dXJuICRhcnJheSA/IEByZXN1bHQgOiAkcmVzdWx0WzBdOworfQorCisKKz1iYWNrCisKKz1oZWFkMSBDT1BZUklHSFQKKworQ29weXJpZ2h0IDIwMDYgYnkgUGV0ciBCYXVkaXMgRTxsdD5wYXNreUBzdXNlLmN6RTxndD4uCisKK1RoaXMgbW9kdWxlIGlzIGZyZWUgc29mdHdhcmU7IGl0IG1heSBiZSB1c2VkLCBjb3BpZWQsIG1vZGlmaWVkCithbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSwKK2VpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKz1jdXQKKworCisjIFRha2UgcmF3IG1ldGhvZCBhcmd1bWVudCBsaXN0IGFuZCByZXR1cm4gKCRvYmosIEBhcmdzKSBpbiBjYXNlCisjIHRoZSBtZXRob2Qgd2FzIGNhbGxlZCB1cG9uIGFuIGluc3RhbmNlIGFuZCAodW5kZWYsIEBhcmdzKSBpZgorIyBpdCB3YXMgY2FsbGVkIGRpcmVjdGx5Lgorc3ViIF9tYXliZV9zZWxmIHsKKwlVTklWRVJTQUw6OmlzYSgkX1swXSwgJ0dpdCcpID8gQF8gOiAodW5kZWYsIEBfKTsKK30KKworIyBDaGVjayBpZiB0aGUgY29tbWFuZCBpZCBpcyBzb21ldGhpbmcgcmVhc29uYWJsZS4KK3N1YiBfY2hlY2tfdmFsaWRfY21kIHsKKwlteSAoJGNtZCkgPSBAXzsKKwkkY21kID1+IC9eW2EtejAtOUEtWl8tXSskLyBvciB0aHJvdyBFcnJvcjo6U2ltcGxlKCJiYWQgY29tbWFuZDogJGNtZCIpOworfQorCisjIENvbW1vbiBiYWNrZW5kIGZvciB0aGUgcGlwZSBjcmVhdG9ycy4KK3N1YiBfY29tbWFuZF9jb21tb25fcGlwZSB7CisJbXkgJGRpcmVjdGlvbiA9IHNoaWZ0OworCW15ICgkc2VsZiwgQHApID0gX21heWJlX3NlbGYoQF8pOworCW15ICglb3B0cywgJGNtZCwgQGFyZ3MpOworCWlmIChyZWYgJHBbMF0pIHsKKwkJKCRjbWQsIEBhcmdzKSA9IEB7c2hpZnQgQHB9OworCQklb3B0cyA9IHJlZiAkcFswXSA/ICV7JHBbMF19IDogQHA7CisJfSBlbHNlIHsKKwkJKCRjbWQsIEBhcmdzKSA9IEBwOworCX0KKwlfY2hlY2tfdmFsaWRfY21kKCRjbWQpOworCisJbXkgJGZoOworCWlmICgkXk8gZXEgJ01TV2luMzInKSB7CisJCSMgQWN0aXZlU3RhdGUgUGVybAorCQkjZGVmaW5lZCAkb3B0c3tTVERFUlJ9IGFuZAorCQkjCXdhcm4gJ2lnbm9yaW5nIFNUREVSUiBvcHRpb24gLSBydW5uaW5nIHcvIEFjdGl2ZVN0YXRlJzsKKwkJJGRpcmVjdGlvbiBlcSAnLXwnIG9yCisJCQlkaWUgJ2lucHV0IHBpcGUgZm9yIEFjdGl2ZVN0YXRlIG5vdCBpbXBsZW1lbnRlZCc7CisJCSMgdGhlIHN0cmFuZ2UgY29uc3RydWN0aW9uIHdpdGggKkFDUElQRSBpcyBqdXN0IHRvCisJCSMgZXhwbGFpbiB0aGUgdGllIGJlbG93IHRoYXQgd2Ugd2FudCB0byBiaW5kIHRvCisJCSMgYSBoYW5kbGUgY2xhc3MsIG5vdCBzY2FsYXIuIEl0IGlzIG5vdCBrbm93biBpZgorCQkjIGl0IGlzIHNvbWV0aGluZyBzcGVjaWZpYyB0byBBY3RpdmVTdGF0ZSBQZXJsIG9yCisJCSMganVzdCBhIFBlcmwgcXVpcmsuCisJCXRpZSAoKkFDUElQRSwgJ0dpdDo6YWN0aXZlc3RhdGVfcGlwZScsICRjbWQsIEBhcmdzKTsKKwkJJGZoID0gKkFDUElQRTsKKworCX0gZWxzZSB7CisJCW15ICRwaWQgPSBvcGVuKCRmaCwgJGRpcmVjdGlvbik7CisJCWlmIChub3QgZGVmaW5lZCAkcGlkKSB7CisJCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJvcGVuIGZhaWxlZDogJCEiKTsKKwkJfSBlbHNpZiAoJHBpZCA9PSAwKSB7CisJCQlpZiAoJG9wdHN7U1RERVJSfSkgeworCQkJCW9wZW4gKFNUREVSUiwgJz4mJywgJG9wdHN7U1RERVJSfSkKKwkJCQkJb3IgZGllICJkdXAgZmFpbGVkOiAkISI7CisJCQl9IGVsc2lmIChkZWZpbmVkICRvcHRze1NUREVSUn0pIHsKKwkJCQlvcGVuIChTVERFUlIsICc+JywgJy9kZXYvbnVsbCcpCisJCQkJCW9yIGRpZSAib3BlbmluZyAvZGV2L251bGwgZmFpbGVkOiAkISI7CisJCQl9CisJCQlfY21kX2V4ZWMoJHNlbGYsICRjbWQsIEBhcmdzKTsKKwkJfQorCX0KKwlyZXR1cm4gd2FudGFycmF5ID8gKCRmaCwgam9pbignICcsICRjbWQsIEBhcmdzKSkgOiAkZmg7Cit9CisKKyMgV2hlbiBhbHJlYWR5IGluIHRoZSBzdWJwcm9jZXNzLCBzZXQgdXAgdGhlIGFwcHJvcHJpYXRlIHN0YXRlCisjIGZvciB0aGUgZ2l2ZW4gcmVwb3NpdG9yeSBhbmQgZXhlY3V0ZSB0aGUgZ2l0IGNvbW1hbmQuCitzdWIgX2NtZF9leGVjIHsKKwlteSAoJHNlbGYsIEBhcmdzKSA9IEBfOworCV9zZXR1cF9naXRfY21kX2Vudigkc2VsZik7CisJX2V4ZWN2X2dpdF9jbWQoQGFyZ3MpOworCWRpZSBxcVtleGVjICJAYXJncyIgZmFpbGVkOiAkIV07Cit9CisKKyMgc2V0IHVwIHRoZSBhcHByb3ByaWF0ZSBzdGF0ZSBmb3IgZ2l0IGNvbW1hbmQKK3N1YiBfc2V0dXBfZ2l0X2NtZF9lbnYgeworCW15ICRzZWxmID0gc2hpZnQ7CisJaWYgKCRzZWxmKSB7CisJCSRzZWxmLT5yZXBvX3BhdGgoKSBhbmQgJEVOVnsnR0lUX0RJUid9ID0gJHNlbGYtPnJlcG9fcGF0aCgpOworCQkkc2VsZi0+cmVwb19wYXRoKCkgYW5kICRzZWxmLT53Y19wYXRoKCkKKwkJCWFuZCAkRU5WeydHSVRfV09SS19UUkVFJ30gPSAkc2VsZi0+d2NfcGF0aCgpOworCQkkc2VsZi0+d2NfcGF0aCgpIGFuZCBjaGRpcigkc2VsZi0+d2NfcGF0aCgpKTsKKwkJJHNlbGYtPndjX3N1YmRpcigpIGFuZCBjaGRpcigkc2VsZi0+d2Nfc3ViZGlyKCkpOworCX0KK30KKworIyBFeGVjdXRlIHRoZSBnaXZlbiBHaXQgY29tbWFuZCAoJF9bMF0pIHdpdGggYXJndW1lbnRzICgkX1sxLi5dKQorIyBieSBzZWFyY2hpbmcgZm9yIGl0IGF0IHByb3BlciBwbGFjZXMuCitzdWIgX2V4ZWN2X2dpdF9jbWQgeyBleGVjKCdnaXQnLCBAXyk7IH0KKworIyBDbG9zZSBwaXBlIHRvIGEgc3VicHJvY2Vzcy4KK3N1YiBfY21kX2Nsb3NlIHsKKwlteSAkY3R4ID0gc2hpZnQgQF87CisJZm9yZWFjaCBteSAkZmggKEBfKSB7CisJCWlmIChjbG9zZSAkZmgpIHsKKwkJCSMgbm9wCisJCX0gZWxzaWYgKCQhKSB7CisJCQkjIEl0J3MganVzdCBjbG9zZSwgbm8gcG9pbnQgaW4gZmF0YWxpdGllcworCQkJY2FycCAiZXJyb3IgY2xvc2luZyBwaXBlOiAkISI7CisJCX0gZWxzaWYgKCQ/ID4+IDgpIHsKKwkJCSMgVGhlIGNhbGxlciBzaG91bGQgcGVwcGVyIHRoaXMuCisJCQl0aHJvdyBHaXQ6OkVycm9yOjpDb21tYW5kKCRjdHgsICQ/ID4+IDgpOworCQl9CisJCSMgZWxzZSB3ZSBtaWdodCBlLmcuIGNsb3NlZCBhIGxpdmUgc3RyZWFtOyB0aGUgY29tbWFuZAorCQkjIGR5aW5nIG9mIFNJR1BJUEUgd291bGQgZHJpdmUgdXMgaGVyZS4KKwl9Cit9CisKKworc3ViIERFU1RST1kgeworCW15ICgkc2VsZikgPSBAXzsKKwkkc2VsZi0+X2Nsb3NlX2hhc2hfYW5kX2luc2VydF9vYmplY3QoKTsKKwkkc2VsZi0+X2Nsb3NlX2NhdF9ibG9iKCk7Cit9CisKKworIyBQaXBlIGltcGxlbWVudGF0aW9uIGZvciBBY3RpdmVTdGF0ZSBQZXJsLgorCitwYWNrYWdlIEdpdDo6YWN0aXZlc3RhdGVfcGlwZTsKKworc3ViIFRJRUhBTkRMRSB7CisJbXkgKCRjbGFzcywgQHBhcmFtcykgPSBAXzsKKwkjIEZJWE1FOiBUaGlzIGlzIHByb2JhYmx5IGhvcnJpYmxlIGlkZWEgYW5kIHRoZSB0aGluZyB3aWxsIGV4cGxvZGUKKwkjIGF0IHRoZSBtb21lbnQgeW91IGdpdmUgaXQgYXJndW1lbnRzIHRoYXQgcmVxdWlyZSBzb21lIHF1b3RpbmcsCisJIyBidXQgSSBoYXZlIG5vIEFjdGl2ZVN0YXRlIGNsdWUuLi4gLS1wYXNreQorCSMgTGV0J3MganVzdCBob3BlIEFjdGl2ZVN0YXRlIFBlcmwgZG9lcyBhdCBsZWFzdCB0aGUgcXVvdGluZworCSMgY29ycmVjdGx5LgorCW15IEBkYXRhID0gcXh7Z2l0IEBwYXJhbXN9OworCWJsZXNzIHsgaSA9PiAwLCBkYXRhID0+IFxAZGF0YSB9LCAkY2xhc3M7Cit9CisKK3N1YiBSRUFETElORSB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlpZiAoJHNlbGYtPntpfSA+PSBzY2FsYXIgQHskc2VsZi0+e2RhdGF9fSkgeworCQlyZXR1cm4gdW5kZWY7CisJfQorCW15ICRpID0gJHNlbGYtPntpfTsKKwlpZiAod2FudGFycmF5KSB7CisJCSRzZWxmLT57aX0gPSAkI3skc2VsZi0+eydkYXRhJ319ICsgMTsKKwkJcmV0dXJuIHNwbGljZShAeyRzZWxmLT57J2RhdGEnfX0sICRpKTsKKwl9CisJJHNlbGYtPntpfSA9ICRpICsgMTsKKwlyZXR1cm4gJHNlbGYtPnsnZGF0YSd9LT5bICRpIF07Cit9CisKK3N1YiBDTE9TRSB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlkZWxldGUgJHNlbGYtPntkYXRhfTsKKwlkZWxldGUgJHNlbGYtPntpfTsKK30KKworc3ViIEVPRiB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlyZXR1cm4gKCRzZWxmLT57aX0gPj0gc2NhbGFyIEB7JHNlbGYtPntkYXRhfX0pOworfQorCisKKzE7ICMgRmFtb3VzIGxhc3Qgd29yZHMKZGlmZiAtLWdpdCBhL3BlcmwvR2l0L0kxOE4ucG0gYi9wZXJsL0dpdC9JMThOLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYjRmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9JMThOLnBtCkBAIC0wLDAgKzEsMTE1IEBACitwYWNrYWdlIEdpdDo6STE4TjsKK3VzZSA1LjAwODsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CitCRUdJTiB7CisJcmVxdWlyZSBFeHBvcnRlcjsKKwlpZiAoJF0gPCA1LjAwODAwMykgeworCQkqaW1wb3J0ID0gXCZFeHBvcnRlcjo6aW1wb3J0OworCX0gZWxzZSB7CisJCSMgRXhwb3J0ZXIgNS41NyB3aGljaCBzdXBwb3J0cyB0aGlzIGludm9jYXRpb24gd2FzCisJCSMgcmVsZWFzZWQgd2l0aCBwZXJsIDUuOC4zCisJCUV4cG9ydGVyLT5pbXBvcnQoJ2ltcG9ydCcpOworCX0KK30KKworb3VyIEBFWFBPUlQgPSBxdyhfXyBfX24gTl9fKTsKK291ciBARVhQT1JUX09LID0gQEVYUE9SVDsKKworc3ViIF9fYm9vdHN0cmFwX2xvY2FsZV9tZXNzYWdlcyB7CisJb3VyICRURVhURE9NQUlOID0gJ2dpdCc7CisJb3VyICRURVhURE9NQUlORElSIHx8PSAkRU5We0dJVF9URVhURE9NQUlORElSfSB8fCAnQEBMT0NBTEVESVJAQCc7CisKKwlyZXF1aXJlIFBPU0lYOworCVBPU0lYLT5pbXBvcnQocXcoc2V0bG9jYWxlKSk7CisJIyBOb24tY29yZSBwcmVyZXF1aXNpdGUgbW9kdWxlCisJcmVxdWlyZSBMb2NhbGU6Ok1lc3NhZ2VzOworCUxvY2FsZTo6TWVzc2FnZXMtPmltcG9ydChxdyg6bG9jYWxlX2ggOmxpYmludGxfaCkpOworCisJc2V0bG9jYWxlKExDX01FU1NBR0VTKCksICcnKTsKKwlzZXRsb2NhbGUoTENfQ1RZUEUoKSwgJycpOworCXRleHRkb21haW4oJFRFWFRET01BSU4pOworCWJpbmR0ZXh0ZG9tYWluKCRURVhURE9NQUlOID0+ICRURVhURE9NQUlORElSKTsKKworCXJldHVybjsKK30KKworQkVHSU4KK3sKKwkjIFVzZWQgYnkgb3VyIHRlc3Qgc2NyaXB0IHRvIHNlZSBpZiBpdCBzaG91bGQgdGVzdCBmYWxsYmFja3Mgb3IKKwkjIG5vdC4KKwlvdXIgJF9fSEFTX0xJQlJBUlkgPSAxOworCisJbG9jYWwgJEA7CisJZXZhbCB7CisJCV9fYm9vdHN0cmFwX2xvY2FsZV9tZXNzYWdlcygpOworCQkqX18gPSBcJkxvY2FsZTo6TWVzc2FnZXM6OmdldHRleHQ7CisJCSpfX24gPSBcJkxvY2FsZTo6TWVzc2FnZXM6Om5nZXR0ZXh0OworCQkxOworCX0gb3IgZG8geworCQkjIFRlbGwgdGVzdC5wbCB0aGF0IHdlIGNvdWxkbid0IGxvYWQgdGhlIGdldHRleHQgbGlicmFyeS4KKwkJJEdpdDo6STE4Tjo6X19IQVNfTElCUkFSWSA9IDA7CisKKwkJIyBKdXN0IGEgZmFsbC10aHJvdWdoIG5vLW9wCisJCSpfXyA9IHN1YiAoJCkgeyAkX1swXSB9OworCQkqX19uID0gc3ViICgkJCQpIHsgJF9bMl0gPT0gMSA/ICRfWzBdIDogJF9bMV0gfTsKKwl9OworCisJc3ViIE5fXygkKSB7IHJldHVybiBzaGlmdDsgfQorfQorCisxOworCitfX0VORF9fCisKKz1oZWFkMSBOQU1FCisKK0dpdDo6STE4TiAtIFBlcmwgaW50ZXJmYWNlIHRvIEdpdCdzIEdldHRleHQgbG9jYWxpemF0aW9ucworCis9aGVhZDEgU1lOT1BTSVMKKworCXVzZSBHaXQ6OkkxOE47CisKKwlwcmludCBfXygiV2VsY29tZSB0byBHaXQhXG4iKTsKKworCXByaW50ZiBfXygiVGhlIGZvbGxvd2luZyBlcnJvciBvY2N1cnJlZDogJXNcbiIpLCAkZXJyb3I7CisKKwlwcmludGYgX19uKCJjb21taXR0ZWQgJWQgZmlsZVxuIiwgImNvbW1pdHRlZCAlZCBmaWxlc1xuIiwgJGZpbGVzKSwgJGZpbGVzOworCisKKz1oZWFkMSBERVNDUklQVElPTgorCitHaXQncyBpbnRlcm5hbCBQZXJsIGludGVyZmFjZSB0byBnZXR0ZXh0IHZpYSBMPExvY2FsZTo6TWVzc2FnZXM+LiBJZgorTDxMb2NhbGU6Ok1lc3NhZ2VzPiBjYW4ndCBiZSBsb2FkZWQgKGl0J3Mgbm90IGEgY29yZSBtb2R1bGUpIHdlCitwcm92aWRlIHN0dWIgcGFzc3Rocm91Z2ggZmFsbGJhY2tzLgorCitUaGlzIGlzIGEgZGlzdGlsbGVkIGludGVyZmFjZSB0byBnZXR0ZXh0LCBzZWUgQzxpbmZvICcoZ2V0dGV4dClQZXJsJz4KK2ZvciB0aGUgZnVsbCBpbnRlcmZhY2UuIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgb25seSBhIHNtYWxsIHBhcnQgb2YKK2l0LgorCis9aGVhZDEgRlVOQ1RJT05TCisKKz1oZWFkMiBfXygkKQorCitMPExvY2FsZTo6TWVzc2FnZXM+J3MgZ2V0dGV4dCBmdW5jdGlvbiBpZiBhbGwgZ29lcyB3ZWxsLCBvdGhlcndpc2Ugb3VyCitwYXNzdGhyb3VnaCBmYWxsYmFjayBmdW5jdGlvbi4KKworPWhlYWQyIF9fbigkJCQpCisKK0w8TG9jYWxlOjpNZXNzYWdlcz4ncyBuZ2V0dGV4dCBmdW5jdGlvbiBvciBwYXNzdGhyb3VnaCBmYWxsYmFjayBmdW5jdGlvbi4KKworPWhlYWQyIE5fXygkKQorCitOby1vcGVyYXRpb24gdGhhdCBvbmx5IHJldHVybnMgaXRzIGFyZ3VtZW50LiBVc2UgdGhpcyBpZiB5b3Ugd2FudCB4Z2V0dGV4dCB0bworZXh0cmFjdCB0aGUgdGV4dCB0byB0aGUgcG90IHRlbXBsYXRlIGJ1dCBkbyBub3Qgd2FudCB0byB0cmlnZ2VyIHJldHJpdmFsIG9mIHRoZQordHJhbnNsYXRpb24gYXQgcnVuIHRpbWUuCisKKz1oZWFkMSBBVVRIT1IKKworRTxBRWxpZz52YXIgQXJuZmpFPG91bWw+ckU8ZXRoPiBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+CisKKz1oZWFkMSBDT1BZUklHSFQKKworQ29weXJpZ2h0IDIwMTAgRTxBRWxpZz52YXIgQXJuZmpFPG91bWw+ckU8ZXRoPiBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+CisKKz1jdXQKZGlmZiAtLWdpdCBhL3BlcmwvR2l0L0luZGV4SW5mby5wbSBiL3BlcmwvR2l0L0luZGV4SW5mby5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDMxMDhjCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9HaXQvSW5kZXhJbmZvLnBtCkBAIC0wLDAgKzEsMzMgQEAKK3BhY2thZ2UgR2l0OjpJbmRleEluZm87Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEdpdCBxdy9jb21tYW5kX2lucHV0X3BpcGUgY29tbWFuZF9jbG9zZV9waXBlLzsKKworc3ViIG5ldyB7CisJbXkgKCRjbGFzcykgPSBAXzsKKwlteSAoJGd1aSwgJGN0eCkgPSBjb21tYW5kX2lucHV0X3BpcGUocXcvdXBkYXRlLWluZGV4IC16IC0taW5kZXgtaW5mby8pOworCWJsZXNzIHsgZ3VpID0+ICRndWksIGN0eCA9PiAkY3R4LCBuciA9PiAwfSwgJGNsYXNzOworfQorCitzdWIgcmVtb3ZlIHsKKwlteSAoJHNlbGYsICRwYXRoKSA9IEBfOworCWlmIChwcmludCB7ICRzZWxmLT57Z3VpfSB9ICcwICcsIDAgeCA0MCwgIlx0IiwgJHBhdGgsICJcMCIpIHsKKwkJcmV0dXJuICsrJHNlbGYtPntucn07CisJfQorCXVuZGVmOworfQorCitzdWIgdXBkYXRlIHsKKwlteSAoJHNlbGYsICRtb2RlLCAkaGFzaCwgJHBhdGgpID0gQF87CisJaWYgKHByaW50IHsgJHNlbGYtPntndWl9IH0gJG1vZGUsICcgJywgJGhhc2gsICJcdCIsICRwYXRoLCAiXDAiKSB7CisJCXJldHVybiArKyRzZWxmLT57bnJ9OworCX0KKwl1bmRlZjsKK30KKworc3ViIERFU1RST1kgeworCW15ICgkc2VsZikgPSBAXzsKKwljb21tYW5kX2Nsb3NlX3BpcGUoJHNlbGYtPntndWl9LCAkc2VsZi0+e2N0eH0pOworfQorCisxOwpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvTG9hZENQQU4ucG0gYi9wZXJsL0dpdC9Mb2FkQ1BBTi5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTU4NWU3Ci0tLSAvZGV2L251bGwKKysrIGIvcGVybC9HaXQvTG9hZENQQU4ucG0KQEAgLTAsMCArMSwxMDQgQEAKK3BhY2thZ2UgR2l0OjpMb2FkQ1BBTjsKK3VzZSA1LjAwODsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKKz1oZWFkMSBOQU1FCisKK0dpdDo6TG9hZENQQU4gLSBXcmFwcGVyIGZvciBsb2FkaW5nIG1vZHVsZXMgZnJvbSB0aGUgQ1BBTiAoT1MpIG9yIEdpdCdzIG93biBjb3B5CisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGUgUGVybCBjb2RlIGluIEdpdCBkZXBlbmRzIG9uIHNvbWUgbW9kdWxlcyBmcm9tIHRoZSBDUEFOLCBidXQgd2UKK2Rvbid0IHdhbnQgdG8gbWFrZSB0aG9zZSBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGFueW9uZSBidWlsZGluZyBmcm9tCitzb3VyY2UuCisKK1RoZXJlZm9yZSB0aGUgTDxHaXQ6OkxvYWRDUEFOPiBuYW1lc3BhY2Ugc2hpcHBlZCB3aXRoIEdpdCBjb250YWlucword3JhcHBlciBtb2R1bGVzIGxpa2UgQzxHaXQ6OkxvYWRDUEFOOjpNb2R1bGU6Ok5hbWU+IHRoYXQgd2lsbCBmaXJzdAorYXR0ZW1wdCB0byBsb2FkIEM8TW9kdWxlOjpOYW1lPiBmcm9tIHRoZSBPUywgYW5kIGlmIHRoYXQgZG9lc24ndCB3b3JrCit3aWxsIGZhbGwgYmFjayBvbiBDPEZyb21DUEFOOjpNb2R1bGU6Ok5hbWU+IHNoaXBwZWQgd2l0aCBHaXQgaXRzZWxmLgorCitVc3VhbGx5IGRpc3RyaWJ1dG9ycyB3aWxsIG5vdCBzaGlwIHdpdGggR2l0J3MgR2l0OjpGcm9tQ1BBTiB0cmVlIGF0CithbGwgdmlhIHRoZSBDPE5PX1BFUkxfQ1BBTl9GQUxMQkFDS1M+IG9wdGlvbiwgcHJlZmVycmluZyB0byB1c2UgdGhlaXIKK293biBwYWNrYWdpbmcgb2YgQ1BBTiBtb2R1bGVzIGluc3RlYWQuCisKK1RoaXMgbW9kdWxlIGlzIG9ubHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgY29kZSBzaGlwcGluZyBpbiB0aGUKK0M8Z2l0LmdpdD4gcmVwb3NpdG9yeS4gVXNlIGl0IGZvciBhbnl0aGluZyBlbHNlIGF0IHlvdXIgcGVyaWwhCisKKz1jdXQKKworIyBOT19QRVJMX0NQQU5fRkFMTEJBQ0tTX1NUUiBldmFkZXMgdGhlIHNlZCBzZWFyY2gtcmVwbGFjZSBmcm9tIHRoZQorIyBNYWtlZmlsZSwgYW5kIGFsbG93cyBmb3IgZGV0ZWN0aW5nIHdoZXRoZXIgdGhlIG1vZHVsZSBpcyBsb2FkZWQgZnJvbQorIyBwZXJsL0dpdCBhcyBvcHBvc2VkIHRvIHBlcmwvYnVpbGQvR2l0LCB3aGljaCBpcyB1c2VmdWwgZm9yIG9uZS1vZmYKKyMgdGVzdGluZyB3aXRob3V0IGhhdmluZyBFcnJvci5wbSBldCBhbCBpbnN0YWxsZWQuCit1c2UgY29uc3RhbnQgTk9fUEVSTF9DUEFOX0ZBTExCQUNLU19TVFIgPT4gJ0BAJyAuICdOT19QRVJMX0NQQU5fRkFMTEJBQ0tTJyAuICdAQCc7Cit1c2UgY29uc3RhbnQgTk9fUEVSTF9DUEFOX0ZBTExCQUNLUyA9PiAoCisJcVtAQE5PX1BFUkxfQ1BBTl9GQUxMQkFDS1NAQF0gbmUgJycKKwlhbmQKKwlxW0BATk9fUEVSTF9DUEFOX0ZBTExCQUNLU0BAXSBuZSBOT19QRVJMX0NQQU5fRkFMTEJBQ0tTX1NUUgorKTsKKworc3ViIGltcG9ydCB7CisJc2hpZnQ7CisJbXkgJGNhbGxlciA9IGNhbGxlcjsKKwlteSAlYXJncyA9IEBfOworCW15ICRtb2R1bGUgPSBleGlzdHMgJGFyZ3N7bW9kdWxlfSA/IGRlbGV0ZSAkYXJnc3ttb2R1bGV9IDogZGllICJCVUc6IEV4cGVjdGVkICdtb2R1bGUnIHBhcmFtZXRlciEiOworCW15ICRpbXBvcnQgPSBleGlzdHMgJGFyZ3N7aW1wb3J0fSA/IGRlbGV0ZSAkYXJnc3tpbXBvcnR9IDogZGllICJCVUc6IEV4cGVjdGVkICdpbXBvcnQnIHBhcmFtZXRlciEiOworCWRpZSAiQlVHOiBUb28gbWFueSBhcmd1bWVudHMhIiBpZiBrZXlzICVhcmdzOworCisJIyBGb286OkJhciB0byBGb28vQmFyLnBtCisJbXkgJHBhY2thZ2VfcG0gPSAkbW9kdWxlOworCSRwYWNrYWdlX3BtID1+IHNbOjpdWy9dZzsKKwkkcGFja2FnZV9wbSAuPSAnLnBtJzsKKworCWV2YWwgeworCQlyZXF1aXJlICRwYWNrYWdlX3BtOworCQkxOworCX0gb3IgZG8geworCQlteSAkZXJyb3IgPSAkQCB8fCAiWm9tYmllIEVycm9yIjsKKworCQlpZiAoTk9fUEVSTF9DUEFOX0ZBTExCQUNLUykgeworCQkJY2hvbXAobXkgJGVycm9yID0gc3ByaW50ZiA8PCdUSEVZX1BST01JU0VEJywgJG1vZHVsZSk7CitCVUc6IFRoZSAnJXMnIG1vZHVsZSBpcyBub3QgaGVyZSwgYnV0IE5PX1BFUkxfQ1BBTl9GQUxMQkFDS1Mgd2FzIHNldCEKKworR2l0IG5lZWRzIHRoaXMgUGVybCBtb2R1bGUgZnJvbSB0aGUgQ1BBTiwgYW5kIHdpbGwgYnkgZGVmYXVsdCBzaGlwCit3aXRoIGEgY29weSBvZiBpdC4gVGhpcyBHaXQgd2FzIGJ1aWx0IHdpdGggTk9fUEVSTF9DUEFOX0ZBTExCQUNLUywKK21lYW5pbmcgdGhhdCB3aG9ldmVyIGJ1aWx0IGl0IHByb21pc2VkIHRvIHByb3ZpZGUgdGhpcyBtb2R1bGUuCisKK1lvdSdyZSBzZWVpbmcgdGhpcyBlcnJvciBiZWNhdXNlIHRoZXkgYnJva2UgdGhhdCBwcm9taXNlLCBhbmQgd2UgY2FuJ3QKK2xvYWQgb3VyIGZhbGxiYWNrIHZlcnNpb24sIHNpbmNlIHdlIHdlcmUgYXNrZWQgbm90IHRvIGluc3RhbGwgaXQuCisKK0lmIHlvdSdyZSBzZWVpbmcgdGhpcyBlcnJvciBhbmQgZGlkbid0IHBhY2thZ2UgR2l0IHlvdXJzZWxmIHRoZQorcGFja2FnZSB5b3UncmUgdXNpbmcgaXMgYnJva2VuLCBvciB5b3VyIHN5c3RlbSBpcyBicm9rZW4uIFRoaXMgZXJyb3IKK3dvbid0IGFwcGVhciBpZiBHaXQgaXMgYnVpbHQgd2l0aG91dCBOT19QRVJMX0NQQU5fRkFMTEJBQ0tTIChpbnN0ZWFkCit3ZSdsbCB1c2Ugb3VyIGZhbGxiYWNrIHZlcnNpb24gb2YgdGhlIG1vZHVsZSkuCitUSEVZX1BST01JU0VECisJCQlkaWUgJGVycm9yOworCQl9CisKKwkJbXkgJEdpdF9Mb2FkQ1BBTl9wbV9wYXRoID0gJElOQ3siR2l0L0xvYWRDUEFOLnBtIn0gfHwgZGllICJCVUc6IFNob3VsZCBoYXZlIG91ciBvd24gcGF0aCBmcm9tICVJTkMhIjsKKworCQlyZXF1aXJlIEZpbGU6OkJhc2VuYW1lOworCQlteSAkR2l0X0xvYWRDUEFOX3BtX3Jvb3QgPSBGaWxlOjpCYXNlbmFtZTo6ZGlybmFtZSgkR2l0X0xvYWRDUEFOX3BtX3BhdGgpIHx8IGRpZSAiQlVHOiBDYW4ndCBmaWd1cmUgb3V0IGxpYi9HaXQgZGlybmFtZSBmcm9tICckR2l0X0xvYWRDUEFOX3BtX3BhdGgnISI7CisKKwkJcmVxdWlyZSBGaWxlOjpTcGVjOworCQlteSAkR2l0X3BtX0Zyb21DUEFOX3Jvb3QgPSBGaWxlOjpTcGVjLT5jYXRkaXIoJEdpdF9Mb2FkQ1BBTl9wbV9yb290LCAnLi4nLCAnRnJvbUNQQU4nKTsKKwkJZGllICJCVUc6ICckR2l0X3BtX0Zyb21DUEFOX3Jvb3QnIHNob3VsZCBiZSBhIGRpcmVjdG9yeSEiIHVubGVzcyAtZCAkR2l0X3BtX0Zyb21DUEFOX3Jvb3Q7CisKKwkJbG9jYWwgQElOQyA9ICgkR2l0X3BtX0Zyb21DUEFOX3Jvb3QsIEBJTkMpOworCQlyZXF1aXJlICRwYWNrYWdlX3BtOworCX07CisKKwlpZiAoJGltcG9ydCkgeworCQlubyBzdHJpY3QgJ3JlZnMnOworCQkqeyIke2NhbGxlcn06OmltcG9ydCJ9ID0gc3ViIHsKKwkJCXNoaWZ0OworCQkJdXNlIHN0cmljdCAncmVmcyc7CisJCQl1bnNoaWZ0IEBfLCAkbW9kdWxlOworCQkJZ290byAmeyIke21vZHVsZX06OmltcG9ydCJ9OworCQl9OworCQl1c2Ugc3RyaWN0ICdyZWZzJzsKKwl9Cit9CisKKzE7CmRpZmYgLS1naXQgYS9wZXJsL0dpdC9Mb2FkQ1BBTi9FcnJvci5wbSBiL3BlcmwvR2l0L0xvYWRDUEFOL0Vycm9yLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZDJjNDUKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9Mb2FkQ1BBTi9FcnJvci5wbQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIEdpdDo6TG9hZENQQU46OkVycm9yOwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBHaXQ6OkxvYWRDUEFOICgKKwltb2R1bGUgPT4gJ0Vycm9yJywKKwlpbXBvcnQgPT4gMSwKKyk7CisKKzE7CmRpZmYgLS1naXQgYS9wZXJsL0dpdC9Mb2FkQ1BBTi9NYWlsL0FkZHJlc3MucG0gYi9wZXJsL0dpdC9Mb2FkQ1BBTi9NYWlsL0FkZHJlc3MucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwYTRmMAotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvR2l0L0xvYWRDUEFOL01haWwvQWRkcmVzcy5wbQpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIEdpdDo6TG9hZENQQU46Ok1haWw6OkFkZHJlc3M7Cit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEdpdDo6TG9hZENQQU4gKAorCW1vZHVsZSA9PiAnTWFpbDo6QWRkcmVzcycsCisJaW1wb3J0ID0+IDAsCispOworCisxOwpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvUGFja2V0LnBtIGIvcGVybC9HaXQvUGFja2V0LnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTczOGIKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9QYWNrZXQucG0KQEAgLTAsMCArMSwxNzMgQEAKK3BhY2thZ2UgR2l0OjpQYWNrZXQ7Cit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworQkVHSU4geworCXJlcXVpcmUgRXhwb3J0ZXI7CisJaWYgKCRdIDwgNS4wMDgwMDMpIHsKKwkJKmltcG9ydCA9IFwmRXhwb3J0ZXI6OmltcG9ydDsKKwl9IGVsc2UgeworCQkjIEV4cG9ydGVyIDUuNTcgd2hpY2ggc3VwcG9ydHMgdGhpcyBpbnZvY2F0aW9uIHdhcworCQkjIHJlbGVhc2VkIHdpdGggcGVybCA1LjguMworCQlFeHBvcnRlci0+aW1wb3J0KCdpbXBvcnQnKTsKKwl9Cit9CisKK291ciBARVhQT1JUID0gcXcoCisJCQlwYWNrZXRfY29tcGFyZV9saXN0cworCQkJcGFja2V0X2Jpbl9yZWFkCisJCQlwYWNrZXRfdHh0X3JlYWQKKwkJCXBhY2tldF9rZXlfdmFsX3JlYWQKKwkJCXBhY2tldF9iaW5fd3JpdGUKKwkJCXBhY2tldF90eHRfd3JpdGUKKwkJCXBhY2tldF9mbHVzaAorCQkJcGFja2V0X2luaXRpYWxpemUKKwkJCXBhY2tldF9yZWFkX2NhcGFiaWxpdGllcworCQkJcGFja2V0X3JlYWRfYW5kX2NoZWNrX2NhcGFiaWxpdGllcworCQkJcGFja2V0X2NoZWNrX2FuZF93cml0ZV9jYXBhYmlsaXRpZXMKKwkJKTsKK291ciBARVhQT1JUX09LID0gQEVYUE9SVDsKKworc3ViIHBhY2tldF9jb21wYXJlX2xpc3RzIHsKKwlteSAoJGV4cGVjdCwgQHJlc3VsdCkgPSBAXzsKKwlteSAkaXg7CisJaWYgKHNjYWxhciBAJGV4cGVjdCAhPSBzY2FsYXIgQHJlc3VsdCkgeworCQlyZXR1cm4gdW5kZWY7CisJfQorCWZvciAoJGl4ID0gMDsgJGl4IDwgJCNyZXN1bHQ7ICRpeCsrKSB7CisJCWlmICgkZXhwZWN0LT5bJGl4XSBuZSAkcmVzdWx0WyRpeF0pIHsKKwkJCXJldHVybiB1bmRlZjsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKworc3ViIHBhY2tldF9iaW5fcmVhZCB7CisJbXkgJGJ1ZmZlcjsKKwlteSAkYnl0ZXNfcmVhZCA9IHJlYWQgU1RESU4sICRidWZmZXIsIDQ7CisJaWYgKCAkYnl0ZXNfcmVhZCA9PSAwICkgeworCQkjIEVPRiAtIEdpdCBzdG9wcGVkIHRhbGtpbmcgdG8gdXMhCisJCXJldHVybiAoIC0xLCAiIiApOworCX0gZWxzaWYgKCAkYnl0ZXNfcmVhZCAhPSA0ICkgeworCQlkaWUgImludmFsaWQgcGFja2V0OiAnJGJ1ZmZlciciOworCX0KKwlteSAkcGt0X3NpemUgPSBoZXgoJGJ1ZmZlcik7CisJaWYgKCAkcGt0X3NpemUgPT0gMCApIHsKKwkJcmV0dXJuICggMSwgIiIgKTsKKwl9IGVsc2lmICggJHBrdF9zaXplID4gNCApIHsKKwkJbXkgJGNvbnRlbnRfc2l6ZSA9ICRwa3Rfc2l6ZSAtIDQ7CisJCSRieXRlc19yZWFkID0gcmVhZCBTVERJTiwgJGJ1ZmZlciwgJGNvbnRlbnRfc2l6ZTsKKwkJaWYgKCAkYnl0ZXNfcmVhZCAhPSAkY29udGVudF9zaXplICkgeworCQkJZGllICJpbnZhbGlkIHBhY2tldCAoJGNvbnRlbnRfc2l6ZSBieXRlcyBleHBlY3RlZDsgJGJ5dGVzX3JlYWQgYnl0ZXMgcmVhZCkiOworCQl9CisJCXJldHVybiAoIDAsICRidWZmZXIgKTsKKwl9IGVsc2UgeworCQlkaWUgImludmFsaWQgcGFja2V0IHNpemU6ICRwa3Rfc2l6ZSI7CisJfQorfQorCitzdWIgcmVtb3ZlX2ZpbmFsX2xmX29yX2RpZSB7CisJbXkgJGJ1ZiA9IHNoaWZ0OworCWlmICggJGJ1ZiA9fiBzL1xuJC8vICkgeworCQlyZXR1cm4gJGJ1ZjsKKwl9CisJZGllICJBIG5vbi1iaW5hcnkgbGluZSBNVVNUIGJlIHRlcm1pbmF0ZWQgYnkgYW4gTEYuXG4iCisJICAgIC4gIlJlY2VpdmVkOiAnJGJ1ZiciOworfQorCitzdWIgcGFja2V0X3R4dF9yZWFkIHsKKwlteSAoICRyZXMsICRidWYgKSA9IHBhY2tldF9iaW5fcmVhZCgpOworCWlmICggJHJlcyAhPSAtMSBhbmQgJGJ1ZiBuZSAnJyApIHsKKwkJJGJ1ZiA9IHJlbW92ZV9maW5hbF9sZl9vcl9kaWUoJGJ1Zik7CisJfQorCXJldHVybiAoICRyZXMsICRidWYgKTsKK30KKworIyBSZWFkIGEgdGV4dCBwYWNrZXQsIGV4cGVjdGluZyB0aGF0IGl0IGlzIGluIHRoZSBmb3JtICJrZXk9dmFsdWUiIGZvcgorIyB0aGUgZ2l2ZW4gJGtleS4gIEFuIEVPRiBkb2VzIG5vdCB0cmlnZ2VyIGFueSBlcnJvciBhbmQgaXMgcmVwb3J0ZWQKKyMgYmFjayB0byB0aGUgY2FsbGVyIChsaWtlIHBhY2tldF90eHRfcmVhZCgpIGRvZXMpLiAgRGllIGlmIHRoZSAia2V5IgorIyBwYXJ0IG9mICJrZXk9dmFsdWUiIGRvZXMgbm90IG1hdGNoIHRoZSBnaXZlbiAka2V5LCBvciB0aGUgdmFsdWUgcGFydAorIyBpcyBlbXB0eS4KK3N1YiBwYWNrZXRfa2V5X3ZhbF9yZWFkIHsKKwlteSAoICRrZXkgKSA9IEBfOworCW15ICggJHJlcywgJGJ1ZiApID0gcGFja2V0X3R4dF9yZWFkKCk7CisJaWYgKCAkcmVzID09IC0xIG9yICggJGJ1ZiA9fiBzL14ka2V5PS8vIGFuZCAkYnVmIG5lICcnICkgKSB7CisJCXJldHVybiAoICRyZXMsICRidWYgKTsKKwl9CisJZGllICJiYWQgJGtleTogJyRidWYnIjsKK30KKworc3ViIHBhY2tldF9iaW5fd3JpdGUgeworCW15ICRidWYgPSBzaGlmdDsKKwlwcmludCBTVERPVVQgc3ByaW50ZiggIiUwNHgiLCBsZW5ndGgoJGJ1ZikgKyA0ICk7CisJcHJpbnQgU1RET1VUICRidWY7CisJU1RET1VULT5mbHVzaCgpOworfQorCitzdWIgcGFja2V0X3R4dF93cml0ZSB7CisJcGFja2V0X2Jpbl93cml0ZSggJF9bMF0gLiAiXG4iICk7Cit9CisKK3N1YiBwYWNrZXRfZmx1c2ggeworCXByaW50IFNURE9VVCBzcHJpbnRmKCAiJTA0eCIsIDAgKTsKKwlTVERPVVQtPmZsdXNoKCk7Cit9CisKK3N1YiBwYWNrZXRfaW5pdGlhbGl6ZSB7CisJbXkgKCRuYW1lLCAkdmVyc2lvbikgPSBAXzsKKworCXBhY2tldF9jb21wYXJlX2xpc3RzKFswLCAkbmFtZSAuICItY2xpZW50Il0sIHBhY2tldF90eHRfcmVhZCgpKSB8fAorCQlkaWUgImJhZCBpbml0aWFsaXplIjsKKwlwYWNrZXRfY29tcGFyZV9saXN0cyhbMCwgInZlcnNpb249IiAuICR2ZXJzaW9uXSwgcGFja2V0X3R4dF9yZWFkKCkpIHx8CisJCWRpZSAiYmFkIHZlcnNpb24iOworCXBhY2tldF9jb21wYXJlX2xpc3RzKFsxLCAiIl0sIHBhY2tldF9iaW5fcmVhZCgpKSB8fAorCQlkaWUgImJhZCB2ZXJzaW9uIGVuZCI7CisKKwlwYWNrZXRfdHh0X3dyaXRlKCAkbmFtZSAuICItc2VydmVyIiApOworCXBhY2tldF90eHRfd3JpdGUoICJ2ZXJzaW9uPSIgLiAkdmVyc2lvbiApOworCXBhY2tldF9mbHVzaCgpOworfQorCitzdWIgcGFja2V0X3JlYWRfY2FwYWJpbGl0aWVzIHsKKwlteSBAY2FwOworCXdoaWxlICgxKSB7CisJCW15ICggJHJlcywgJGJ1ZiApID0gcGFja2V0X2Jpbl9yZWFkKCk7CisJCWlmICggJHJlcyA9PSAtMSApIHsKKwkJCWRpZSAidW5leHBlY3RlZCBFT0Ygd2hlbiByZWFkaW5nIGNhcGFiaWxpdGllcyI7CisJCX0KKwkJcmV0dXJuICggJHJlcywgQGNhcCApIGlmICggJHJlcyAhPSAwICk7CisJCSRidWYgPSByZW1vdmVfZmluYWxfbGZfb3JfZGllKCRidWYpOworCQl1bmxlc3MgKCAkYnVmID1+IHMvY2FwYWJpbGl0eT0vLyApIHsKKwkJCWRpZSAiYmFkIGNhcGFiaWxpdHkgYnVmOiAnJGJ1ZiciOworCQl9CisJCXB1c2ggQGNhcCwgJGJ1ZjsKKwl9Cit9CisKKyMgUmVhZCByZW1vdGUgY2FwYWJpbGl0aWVzIGFuZCBjaGVjayB0aGVtIGFnYWluc3QgY2FwYWJpbGl0aWVzIHdlIHJlcXVpcmUKK3N1YiBwYWNrZXRfcmVhZF9hbmRfY2hlY2tfY2FwYWJpbGl0aWVzIHsKKwlteSBAcmVxdWlyZWRfY2FwcyA9IEBfOworCW15ICgkcmVzLCBAcmVtb3RlX2NhcHMpID0gcGFja2V0X3JlYWRfY2FwYWJpbGl0aWVzKCk7CisJbXkgJXJlbW90ZV9jYXBzID0gbWFwIHsgJF8gPT4gMSB9IEByZW1vdGVfY2FwczsKKwlmb3JlYWNoIChAcmVxdWlyZWRfY2FwcykgeworCQl1bmxlc3MgKGV4aXN0cygkcmVtb3RlX2NhcHN7JF99KSkgeworCQkJZGllICJyZXF1aXJlZCAnJF8nIGNhcGFiaWxpdHkgbm90IGF2YWlsYWJsZSBmcm9tIHJlbW90ZSIgOworCQl9CisJfQorCXJldHVybiAlcmVtb3RlX2NhcHM7Cit9CisKKyMgQ2hlY2sgb3VyIGNhcGFiaWxpdGllcyB3ZSB3YW50IHRvIGFkdmVydGlzZSBhZ2FpbnN0IHRoZSByZW1vdGUgb25lcworIyBhbmQgdGhlbiBhZHZlcnRpc2Ugb3VyIGNhcGFiaWxpdGllcworc3ViIHBhY2tldF9jaGVja19hbmRfd3JpdGVfY2FwYWJpbGl0aWVzIHsKKwlteSAoJHJlbW90ZV9jYXBzLCBAb3VyX2NhcHMpID0gQF87CisJZm9yZWFjaCAoQG91cl9jYXBzKSB7CisJCXVubGVzcyAoZXhpc3RzKCRyZW1vdGVfY2Fwcy0+eyRffSkpIHsKKwkJCWRpZSAib3VyIGNhcGFiaWxpdHkgJyRfJyBpcyBub3QgYXZhaWxhYmxlIGZyb20gcmVtb3RlIgorCQl9CisJCXBhY2tldF90eHRfd3JpdGUoICJjYXBhYmlsaXR5PSIgLiAkXyApOworCX0KKwlwYWNrZXRfZmx1c2goKTsKK30KKworMTsKZGlmZiAtLWdpdCBhL3BlcmwvR2l0L1NWTi5wbSBiL3BlcmwvR2l0L1NWTi5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjI4Yjg3Ci0tLSAvZGV2L251bGwKKysrIGIvcGVybC9HaXQvU1ZOLnBtCkBAIC0wLDAgKzEsMjU1NyBAQAorcGFja2FnZSBHaXQ6OlNWTjsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgRmNudGwgcXcvOkRFRkFVTFQgOnNlZWsvOwordXNlIGNvbnN0YW50IHJldl9tYXBfZm10ID0+ICdOSDQwJzsKK3VzZSB2YXJzIHF3LyRfbm9fbWV0YWRhdGEKKyAgICAgICAgICAgICRfcmVwYWNrICRfcmVwYWNrX2ZsYWdzICRfdXNlX3N2bV9wcm9wcyAkX2hlYWQKKyAgICAgICAgICAgICRfdXNlX3N2bnN5bmNfcHJvcHMgJG5vX3JldXNlX2V4aXN0aW5nCisJICAgICRfdXNlX2xvZ19hdXRob3IgJF9hZGRfYXV0aG9yX2Zyb20gJF9sb2NhbHRpbWUvOwordXNlIENhcnAgcXcvY3JvYWsvOwordXNlIEZpbGU6OlBhdGggcXcvbWtwYXRoLzsKK3VzZSBJUEM6Ok9wZW4zOwordXNlIE1lbW9pemU7ICAjIGNvcmUgc2luY2UgNS44LjAsIEp1bCAyMDAyCit1c2UgUE9TSVggcXcoOnNpZ25hbF9oKTsKK3VzZSBUaW1lOjpMb2NhbDsKKwordXNlIEdpdCBxdygKKyAgICBjb21tYW5kCisgICAgY29tbWFuZF9vbmVsaW5lCisgICAgY29tbWFuZF9ub2lzeQorICAgIGNvbW1hbmRfb3V0cHV0X3BpcGUKKyAgICBjb21tYW5kX2Nsb3NlX3BpcGUKKyAgICBnZXRfdHpfb2Zmc2V0CispOwordXNlIEdpdDo6U1ZOOjpVdGlscyBxdygKKwlmYXRhbAorCWNhbl9jb21wcmVzcworCWpvaW5fcGF0aHMKKwljYW5vbmljYWxpemVfcGF0aAorCWNhbm9uaWNhbGl6ZV91cmwKKwlhZGRfcGF0aF90b191cmwKKyk7CisKK215ICRtZW1vX2JhY2tlbmQ7CitvdXIgJF9mb2xsb3dfcGFyZW50ICA9IDE7CitvdXIgJF9taW5pbWl6ZV91cmwgICA9ICd1bnNldCc7CitvdXIgJGRlZmF1bHRfcmVwb19pZCA9ICdzdm4nOworb3VyICRkZWZhdWx0X3JlZl9pZCAgPSAkRU5We0dJVF9TVk5fSUR9IHx8ICdnaXQtc3ZuJzsKKworbXkgKCRfZ2NfbnIsICRfZ2NfcGVyaW9kKTsKKworIyBwcm9wZXJ0aWVzIHRoYXQgd2UgZG8gbm90IGxvZzoKK215ICVTS0lQX1BST1A7CitCRUdJTiB7CisJJVNLSVBfUFJPUCA9IG1hcCB7ICRfID0+IDEgfSBxdy9zdm46d2M6cmFfZGF2OnZlcnNpb24tdXJsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm46c3BlY2lhbCBzdm46ZXhlY3V0YWJsZQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuOmVudHJ5OmNvbW1pdHRlZC1yZXYKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bjplbnRyeTpsYXN0LWF1dGhvcgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuOmVudHJ5OnV1aWQKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bjplbnRyeTpjb21taXR0ZWQtZGF0ZS87CisKKwkjIHNvbWUgb3B0aW9ucyBhcmUgcmVhZCBnbG9iYWxseSwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGxvY2FsbHkKKwkjIHBlciBbc3ZuLXJlbW90ZSAiLi4uIl0gc2VjdGlvbi4gIENvbW1hbmQtbGluZSBvcHRpb25zIHdpbGwgKk5PVCoKKwkjIG92ZXJyaWRlIG9wdGlvbnMgc2V0IGluIGFuIFtzdm4tcmVtb3RlICIuLi4iXSBzZWN0aW9uCisJbm8gc3RyaWN0ICdyZWZzJzsKKwlmb3IgbXkgJG9wdGlvbiAocXcvZm9sbG93X3BhcmVudCBub19tZXRhZGF0YSB1c2Vfc3ZtX3Byb3BzCisJCQkgICB1c2Vfc3Zuc3luY19wcm9wcy8pIHsKKwkJbXkgJGtleSA9ICRvcHRpb247CisJCSRrZXkgPX4gdHIvXy8vZDsKKwkJbXkgJHByb3AgPSAiLSRvcHRpb24iOworCQkqJG9wdGlvbiA9IHN1YiB7CisJCQlteSAoJHNlbGYpID0gQF87CisJCQlyZXR1cm4gJHNlbGYtPnskcHJvcH0gaWYgZXhpc3RzICRzZWxmLT57JHByb3B9OworCQkJbXkgJGsgPSAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9LiRrZXkiOworCQkJZXZhbCB7IGNvbW1hbmRfb25lbGluZShxdy9jb25maWcgLS1nZXQvLCAkaykgfTsKKwkJCWlmICgkQCkgeworCQkJCSRzZWxmLT57JHByb3B9ID0gJHsiR2l0OjpTVk46Ol8kb3B0aW9uIn07CisJCQl9IGVsc2UgeworCQkJCW15ICR2ID0gY29tbWFuZF9vbmVsaW5lKHF3L2NvbmZpZyAtLWJvb2wvLCRrKTsKKwkJCQkkc2VsZi0+eyRwcm9wfSA9ICR2IGVxICdmYWxzZScgPyAwIDogMTsKKwkJCX0KKwkJCXJldHVybiAkc2VsZi0+eyRwcm9wfTsKKwkJfQorCX0KK30KKworCitteSAoJUxPQ0tGSUxFUywgJUlOREVYX0ZJTEVTKTsKK0VORCB7CisJdW5saW5rIGtleXMgJUxPQ0tGSUxFUyBpZiAlTE9DS0ZJTEVTOworCXVubGluayBrZXlzICVJTkRFWF9GSUxFUyBpZiAlSU5ERVhfRklMRVM7Cit9CisKK3N1YiByZXNvbHZlX2xvY2FsX2dsb2JzIHsKKwlteSAoJHVybCwgJGZldGNoLCAkZ2xvYl9zcGVjKSA9IEBfOworCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkZ2xvYl9zcGVjOworCW15ICRyZWYgPSAkZ2xvYl9zcGVjLT57cmVmfTsKKwlteSAkcGF0aCA9ICRnbG9iX3NwZWMtPntwYXRofTsKKwlmb3JlYWNoIChjb21tYW5kKHF3I2Zvci1lYWNoLXJlZiAtLWZvcm1hdD0lKHJlZm5hbWUpIHJlZnMvIykpIHsKKwkJbmV4dCB1bmxlc3MgbSNeJHJlZi0+e3JlZ2V4fSQjOworCQlteSAkcCA9ICQxOworCQlteSAkcGF0aG5hbWUgPSBkZXNhbml0aXplX3JlZm5hbWUoJHBhdGgtPmZ1bGxfcGF0aCgkcCkpOworCQlteSAkcmVmbmFtZSA9IGRlc2FuaXRpemVfcmVmbmFtZSgkcmVmLT5mdWxsX3BhdGgoJHApKTsKKwkJaWYgKG15ICRleGlzdGluZyA9ICRmZXRjaC0+eyRwYXRobmFtZX0pIHsKKwkJCWlmICgkZXhpc3RpbmcgbmUgJHJlZm5hbWUpIHsKKwkJCQlkaWUgIlJlZnNwZWMgY29uZmxpY3Q6XG4iLAorCQkJCSAgICAiZXhpc3Rpbmc6ICRleGlzdGluZ1xuIiwKKwkJCQkgICAgIiBnbG9iYmVkOiAkcmVmbmFtZVxuIjsKKwkJCX0KKwkJCW15ICR1ID0gKDo6Y210X21ldGFkYXRhKCIkcmVmbmFtZSIpKVswXTsKKwkJCWlmICghZGVmaW5lZCgkdSkpIHsKKwkJCQl3YXJuCisiVzogJHJlZm5hbWU6IG5vIGFzc29jaWF0ZWQgY29tbWl0IG1ldGFkYXRhIGZyb20gU1ZOLCBza2lwcGluZ1xuIjsKKwkJCQluZXh0OworCQkJfQorCQkJJHUgPX4gcyFeXFEkdXJsXEUoL3wkKSEhIG9yIGRpZQorCQkJICAiJHJlZm5hbWU6ICckdXJsJyBub3QgZm91bmQgaW4gJyR1J1xuIjsKKwkJCWlmICgkcGF0aG5hbWUgbmUgJHUpIHsKKwkJCQl3YXJuICJXOiBSZWZzcGVjIGdsb2IgY29uZmxpY3QgIiwKKwkJCQkgICAgICIocmVmOiAkcmVmbmFtZSk6XG4iLAorCQkJCSAgICAgImV4cGVjdGVkIHBhdGg6ICRwYXRobmFtZVxuIiwKKwkJCQkgICAgICIgICAgcmVhbCBwYXRoOiAkdVxuIiwKKwkJCQkgICAgICJDb250aW51aW5nIGFoZWFkIHdpdGggJHVcbiI7CisJCQkJbmV4dDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCSRmZXRjaC0+eyRwYXRobmFtZX0gPSAkcmVmbmFtZTsKKwkJfQorCX0KK30KKworc3ViIHBhcnNlX3JldmlzaW9uX2FyZ3VtZW50IHsKKwlteSAoJGJhc2UsICRoZWFkKSA9IEBfOworCWlmICghZGVmaW5lZCAkOjpfcmV2aXNpb24gfHwgJDo6X3JldmlzaW9uIGVxICdCQVNFOkhFQUQnKSB7CisJCXJldHVybiAoJGJhc2UsICRoZWFkKTsKKwl9CisJcmV0dXJuICgkMSwgJDIpIGlmICgkOjpfcmV2aXNpb24gPX4gL14oXGQrKTooXGQrKSQvKTsKKwlyZXR1cm4gKCQ6Ol9yZXZpc2lvbiwgJDo6X3JldmlzaW9uKSBpZiAoJDo6X3JldmlzaW9uID1+IC9eXGQrJC8pOworCXJldHVybiAoJGhlYWQsICRoZWFkKSBpZiAoJDo6X3JldmlzaW9uIGVxICdIRUFEJyk7CisJcmV0dXJuICgkYmFzZSwgJDEpIGlmICgkOjpfcmV2aXNpb24gPX4gL15CQVNFOihcZCspJC8pOworCXJldHVybiAoJDEsICRoZWFkKSBpZiAoJDo6X3JldmlzaW9uID1+IC9eKFxkKyk6SEVBRCQvKTsKKwlkaWUgInJldmlzaW9uIGFyZ3VtZW50OiAkOjpfcmV2aXNpb24gbm90IHVuZGVyc3Rvb2QgYnkgZ2l0LXN2blxuIjsKK30KKworc3ViIGZldGNoX2FsbCB7CisJbXkgKCRyZXBvX2lkLCAkcmVtb3RlcykgPSBAXzsKKwlpZiAocmVmICRyZXBvX2lkKSB7CisJCW15ICRncyA9ICRyZXBvX2lkOworCQkkcmVwb19pZCA9IHVuZGVmOworCQkkcmVwb19pZCA9ICRncy0+e3JlcG9faWR9OworCX0KKwkkcmVtb3RlcyB8fD0gcmVhZF9hbGxfcmVtb3RlcygpOworCW15ICRyZW1vdGUgPSAkcmVtb3Rlcy0+eyRyZXBvX2lkfSBvcgorCSAgICAgICAgICAgICBkaWUgIltzdm4tcmVtb3RlIFwiJHJlcG9faWRcIl0gdW5rbm93blxuIjsKKwlteSAkZmV0Y2ggPSAkcmVtb3RlLT57ZmV0Y2h9OworCW15ICR1cmwgPSAkcmVtb3RlLT57dXJsfSBvciBkaWUgInN2bi1yZW1vdGUuJHJlcG9faWQudXJsIG5vdCBkZWZpbmVkXG4iOworCW15IChAZ3MsIEBnbG9icyk7CisJbXkgJHJhID0gR2l0OjpTVk46OlJhLT5uZXcoJHVybCk7CisJbXkgJHV1aWQgPSAkcmEtPmdldF91dWlkOworCW15ICRoZWFkID0gJHJhLT5nZXRfbGF0ZXN0X3Jldm51bTsKKworCSMgaWdub3JlIGVycm9ycywgJGhlYWQgcmV2aXNpb24gbWF5IG5vdCBldmVuIGV4aXN0IGFueW1vcmUKKwlldmFsIHsgJHJhLT5nZXRfbG9nKCIiLCAkaGVhZCwgMCwgMSwgMCwgMSwgc3ViIHsgJGhlYWQgPSAkX1sxXSB9KSB9OworCXdhcm4gIlc6ICRAXG4iIGlmICRAOworCisJbXkgJGJhc2UgPSBkZWZpbmVkICRmZXRjaCA/ICRoZWFkIDogMDsKKworCSMgcmVhZCB0aGUgbWF4IHJldnMgZm9yIHdpbGRjYXJkIGV4cGFuc2lvbiAoYnJhbmNoZXMvKiwgdGFncy8qKQorCWZvcmVhY2ggbXkgJHQgKHF3L2JyYW5jaGVzIHRhZ3MvKSB7CisJCWRlZmluZWQgJHJlbW90ZS0+eyR0fSBvciBuZXh0OworCQlwdXNoIEBnbG9icywgQHskcmVtb3RlLT57JHR9fTsKKworCQlteSAkbWF4X3JldiA9IGV2YWwgeyB0bXBfY29uZmlnKHF3Ly0taW50IC0tZ2V0LywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICJzdm4tcmVtb3RlLiRyZXBvX2lkLiR7dH0tbWF4UmV2IikgfTsKKwkJaWYgKGRlZmluZWQgJG1heF9yZXYgJiYgKCRtYXhfcmV2IDwgJGJhc2UpKSB7CisJCQkkYmFzZSA9ICRtYXhfcmV2OworCQl9IGVsc2lmICghZGVmaW5lZCAkbWF4X3JldikgeworCQkJJGJhc2UgPSAwOworCQl9CisJfQorCisJaWYgKCRmZXRjaCkgeworCQlmb3JlYWNoIG15ICRwIChzb3J0IGtleXMgJSRmZXRjaCkgeworCQkJbXkgJGdzID0gR2l0OjpTVk4tPm5ldygkZmV0Y2gtPnskcH0sICRyZXBvX2lkLCAkcCk7CisJCQlteSAkbHIgPSAkZ3MtPnJldl9tYXBfbWF4OworCQkJaWYgKGRlZmluZWQgJGxyKSB7CisJCQkJJGJhc2UgPSAkbHIgaWYgKCRsciA8ICRiYXNlKTsKKwkJCX0KKwkJCXB1c2ggQGdzLCAkZ3M7CisJCX0KKwl9CisKKwkoJGJhc2UsICRoZWFkKSA9IHBhcnNlX3JldmlzaW9uX2FyZ3VtZW50KCRiYXNlLCAkaGVhZCk7CisJJHJhLT5nc19mZXRjaF9sb29wX2NvbW1vbigkYmFzZSwgJGhlYWQsIFxAZ3MsIFxAZ2xvYnMpOworfQorCitzdWIgcmVhZF9hbGxfcmVtb3RlcyB7CisJbXkgJHIgPSB7fTsKKwlteSAkdXNlX3N2bV9wcm9wcyA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUocXcvY29uZmlnIC0tYm9vbAorCSAgICBzdm4udXNlU3ZtUHJvcHMvKSB9OworCSR1c2Vfc3ZtX3Byb3BzID0gJHVzZV9zdm1fcHJvcHMgZXEgJ3RydWUnIGlmICR1c2Vfc3ZtX3Byb3BzOworCW15ICRzdm5fcmVmc3BlYyA9IHFye1xzKiguKj8pXHMqOlxzKiguKz8pXHMqfTsKKwlmb3JlYWNoIChncmVwIHsgcy9ec3ZuLXJlbW90ZVwuLy8gfSBjb21tYW5kKHF3L2NvbmZpZyAtbC8pKSB7CisJCWlmIChtIV4oLispXC5mZXRjaD0kc3ZuX3JlZnNwZWMkISkgeworCQkJbXkgKCRyZW1vdGUsICRsb2NhbF9yZWYsICRyZW1vdGVfcmVmKSA9ICgkMSwgJDIsICQzKTsKKwkJCWRpZSgic3ZuLXJlbW90ZS4kcmVtb3RlOiByZW1vdGUgcmVmICckcmVtb3RlX3JlZicgIgorCQkJICAgIC4gIm11c3Qgc3RhcnQgd2l0aCAncmVmcy8nXG4iKQorCQkJCXVubGVzcyAkcmVtb3RlX3JlZiA9fiBte15yZWZzL307CisJCQkkbG9jYWxfcmVmID0gdXJpX2RlY29kZSgkbG9jYWxfcmVmKTsKKwkJCSRyLT57JHJlbW90ZX0tPntmZXRjaH0tPnskbG9jYWxfcmVmfSA9ICRyZW1vdGVfcmVmOworCQkJJHItPnskcmVtb3RlfS0+e3N2bX0gPSB7fSBpZiAkdXNlX3N2bV9wcm9wczsKKwkJfSBlbHNpZiAobSFeKC4rKVwudXNlc3ZtcHJvcHM9XHMqKC4qKVxzKiQhKSB7CisJCQkkci0+eyQxfS0+e3N2bX0gPSB7fTsKKwkJfSBlbHNpZiAobSFeKC4rKVwudXJsPVxzKiguKilccyokISkgeworCQkJJHItPnskMX0tPnt1cmx9ID0gY2Fub25pY2FsaXplX3VybCgkMik7CisJCX0gZWxzaWYgKG0hXiguKylcLnB1c2h1cmw9XHMqKC4qKVxzKiQhKSB7CisJCQkkci0+eyQxfS0+e3B1c2h1cmx9ID0gY2Fub25pY2FsaXplX3VybCgkMik7CisJCX0gZWxzaWYgKG0hXiguKylcLmlnbm9yZS1yZWZzPVxzKiguKilccyokISkgeworCQkJJHItPnskMX0tPntpZ25vcmVfcmVmc19yZWdleH0gPSAkMjsKKwkJfSBlbHNpZiAobSFeKC4rKVwuKGJyYW5jaGVzfHRhZ3MpPSRzdm5fcmVmc3BlYyQhKSB7CisJCQlteSAoJHJlbW90ZSwgJHQsICRsb2NhbF9yZWYsICRyZW1vdGVfcmVmKSA9CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCQxLCAkMiwgJDMsICQ0KTsKKwkJCWRpZSgic3ZuLXJlbW90ZS4kcmVtb3RlOiByZW1vdGUgcmVmICckcmVtb3RlX3JlZicgKCR0KSAiCisJCQkgICAgLiAibXVzdCBzdGFydCB3aXRoICdyZWZzLydcbiIpCisJCQkJdW5sZXNzICRyZW1vdGVfcmVmID1+IG17XnJlZnMvfTsKKwkJCSRsb2NhbF9yZWYgPSB1cmlfZGVjb2RlKCRsb2NhbF9yZWYpOworCisJCQlyZXF1aXJlIEdpdDo6U1ZOOjpHbG9iU3BlYzsKKwkJCW15ICRycyA9IHsKKwkJCSAgICB0ID0+ICR0LAorCQkJICAgIHJlbW90ZSA9PiAkcmVtb3RlLAorCQkJICAgIHBhdGggPT4gR2l0OjpTVk46Okdsb2JTcGVjLT5uZXcoJGxvY2FsX3JlZiwgMSksCisJCQkgICAgcmVmID0+IEdpdDo6U1ZOOjpHbG9iU3BlYy0+bmV3KCRyZW1vdGVfcmVmLCAwKSB9OworCQkJaWYgKGxlbmd0aCgkcnMtPntyZWZ9LT57cmlnaHR9KSAhPSAwKSB7CisJCQkJZGllICJUaGUgJyonIGdsb2IgY2hhcmFjdGVyIG11c3QgYmUgdGhlIGxhc3QgIiwKKwkJCQkgICAgImNoYXJhY3RlciBvZiAnJHJlbW90ZV9yZWYnXG4iOworCQkJfQorCQkJcHVzaCBAeyAkci0+eyRyZW1vdGV9LT57JHR9IH0sICRyczsKKwkJfQorCX0KKworCW1hcCB7CisJCWlmIChkZWZpbmVkICRyLT57JF99LT57c3ZtfSkgeworCQkJbXkgJHN2bTsKKwkJCWV2YWwgeworCQkJCW15ICRzZWN0aW9uID0gInN2bi1yZW1vdGUuJF8iOworCQkJCSRzdm0gPSB7CisJCQkJCXNvdXJjZSA9PiB0bXBfY29uZmlnKCctLWdldCcsCisJCQkJCSAgICAiJHNlY3Rpb24uc3ZtLXNvdXJjZSIpLAorCQkJCQlyZXBsYWNlID0+IHRtcF9jb25maWcoJy0tZ2V0JywKKwkJCQkJICAgICIkc2VjdGlvbi5zdm0tcmVwbGFjZSIpLAorCQkJCX0KKwkJCX07CisJCQkkci0+eyRffS0+e3N2bX0gPSAkc3ZtOworCQl9CisJfSBrZXlzICUkcjsKKworCWZvcmVhY2ggbXkgJHJlbW90ZSAoa2V5cyAlJHIpIHsKKwkJZm9yZWFjaCAoIGdyZXAgeyBkZWZpbmVkICRfIH0KKwkJCSAgbWFwIHsgJHItPnskcmVtb3RlfS0+eyRffSB9IHF3KGJyYW5jaGVzIHRhZ3MpICkgeworCQkJZm9yZWFjaCBteSAkcnMgKCBAJF8gKSB7CisJCQkJJHJzLT57aWdub3JlX3JlZnNfcmVnZXh9ID0KKwkJCQkgICAgJHItPnskcmVtb3RlfS0+e2lnbm9yZV9yZWZzX3JlZ2V4fTsKKwkJCX0KKwkJfQorCX0KKworCSRyOworfQorCitzdWIgaW5pdF92YXJzIHsKKwkkX2djX25yID0gJF9nY19wZXJpb2QgPSAxMDAwOworCWlmIChkZWZpbmVkICRfcmVwYWNrIHx8IGRlZmluZWQgJF9yZXBhY2tfZmxhZ3MpIHsKKwkgICAgICAgd2FybiAiUmVwYWNrIG9wdGlvbnMgYXJlIG9ic29sZXRlOyB0aGV5IGhhdmUgbm8gZWZmZWN0LlxuIjsKKwl9Cit9CisKK3N1YiB2ZXJpZnlfcmVtb3Rlc19zYW5pdHkgeworCXJldHVybiB1bmxlc3MgLWQgJEVOVntHSVRfRElSfTsKKwlteSAlc2VlbjsKKwlmb3JlYWNoIChjb21tYW5kKHF3L2NvbmZpZyAtbC8pKSB7CisJCWlmIChtIV5zdm4tcmVtb3RlXC4oPzouKylcLmZldGNoPS4qOnJlZnMvcmVtb3Rlcy8oXFMrKVxzKiQhKSB7CisJCQlpZiAoJHNlZW57JDF9KSB7CisJCQkJZGllICJSZW1vdGUgcmVmIHJlZnMvcmVtb3RlLyQxIGlzIHRyYWNrZWQgYnkiLAorCQkJCSAgICAiXG4gIFwiJF9cIlxuYW5kXG4gIFwiJHNlZW57JDF9XCJcbiIsCisJCQkJICAgICJQbGVhc2UgcmVzb2x2ZSB0aGlzIGFtYmlndWl0eSBpbiAiLAorCQkJCSAgICAieW91ciBnaXQgY29uZmlndXJhdGlvbiBmaWxlIGJlZm9yZSAiLAorCQkJCSAgICAiY29udGludWluZ1xuIjsKKwkJCX0KKwkJCSRzZWVueyQxfSA9ICRfOworCQl9CisJfQorfQorCitzdWIgZmluZF9leGlzdGluZ19yZW1vdGUgeworCW15ICgkdXJsLCAkcmVtb3RlcykgPSBAXzsKKwlyZXR1cm4gdW5kZWYgaWYgJG5vX3JldXNlX2V4aXN0aW5nOworCW15ICRleGlzdGluZzsKKwlmb3JlYWNoIG15ICRyZXBvX2lkIChrZXlzICUkcmVtb3RlcykgeworCQlteSAkdSA9ICRyZW1vdGVzLT57JHJlcG9faWR9LT57dXJsfSBvciBuZXh0OworCQluZXh0IGlmICR1IG5lICR1cmw7CisJCSRleGlzdGluZyA9ICRyZXBvX2lkOworCQlsYXN0OworCX0KKwkkZXhpc3Rpbmc7Cit9CisKK3N1YiBpbml0X3JlbW90ZV9jb25maWcgeworCW15ICgkc2VsZiwgJHVybCwgJG5vX3dyaXRlKSA9IEBfOworCSR1cmwgPSBjYW5vbmljYWxpemVfdXJsKCR1cmwpOworCW15ICRyID0gcmVhZF9hbGxfcmVtb3RlcygpOworCW15ICRleGlzdGluZyA9IGZpbmRfZXhpc3RpbmdfcmVtb3RlKCR1cmwsICRyKTsKKwlpZiAoJGV4aXN0aW5nKSB7CisJCXVubGVzcyAoJG5vX3dyaXRlKSB7CisJCQlwcmludCBTVERFUlIgIlVzaW5nIGV4aXN0aW5nICIsCisJCQkJICAgICAiW3N2bi1yZW1vdGUgXCIkZXhpc3RpbmdcIl1cbiI7CisJCX0KKwkJJHNlbGYtPntyZXBvX2lkfSA9ICRleGlzdGluZzsKKwl9IGVsc2lmICgkX21pbmltaXplX3VybCkgeworCQlteSAkbWluX3VybCA9IEdpdDo6U1ZOOjpSYS0+bmV3KCR1cmwpLT5taW5pbWl6ZV91cmw7CisJCSRleGlzdGluZyA9IGZpbmRfZXhpc3RpbmdfcmVtb3RlKCRtaW5fdXJsLCAkcik7CisJCWlmICgkZXhpc3RpbmcpIHsKKwkJCXVubGVzcyAoJG5vX3dyaXRlKSB7CisJCQkJcHJpbnQgU1RERVJSICJVc2luZyBleGlzdGluZyAiLAorCQkJCQkgICAgICJbc3ZuLXJlbW90ZSBcIiRleGlzdGluZ1wiXVxuIjsKKwkJCX0KKwkJCSRzZWxmLT57cmVwb19pZH0gPSAkZXhpc3Rpbmc7CisJCX0KKwkJaWYgKCRtaW5fdXJsIG5lICR1cmwpIHsKKwkJCXVubGVzcyAoJG5vX3dyaXRlKSB7CisJCQkJcHJpbnQgU1RERVJSICJVc2luZyBoaWdoZXIgbGV2ZWwgb2YgVVJMOiAiLAorCQkJCQkgICAgICIkdXJsID0+ICRtaW5fdXJsXG4iOworCQkJfQorCQkJbXkgJG9sZF9wYXRoID0gJHNlbGYtPnBhdGg7CisJCQkkdXJsID1+IHMhXlxRJG1pbl91cmxcRSgvfCQpISE7CisJCQkkdXJsID0gam9pbl9wYXRocygkdXJsLCAkb2xkX3BhdGgpOworCQkJJHNlbGYtPnBhdGgoJHVybCk7CisJCQkkdXJsID0gJG1pbl91cmw7CisJCX0KKwl9CisJbXkgJG9yaWdfdXJsOworCWlmICghJGV4aXN0aW5nKSB7CisJCSMgdmVyaWZ5IHRoYXQgd2UgYXJlbid0IG92ZXJ3cml0aW5nIGFueXRoaW5nOgorCQkkb3JpZ191cmwgPSBldmFsIHsKKwkJCWNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywKKwkJCQkJInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfS51cmwiKQorCQl9OworCQlpZiAoJG9yaWdfdXJsICYmICgkb3JpZ191cmwgbmUgJHVybCkpIHsKKwkJCWRpZSAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9LnVybCBhbHJlYWR5IHNldDogIiwKKwkJCSAgICAiJG9yaWdfdXJsXG53YW50ZWQgdG8gc2V0IHRvOiAkdXJsXG4iOworCQl9CisJfQorCW15ICgkeHJlcG9faWQsICR4cGF0aCkgPSBmaW5kX3JlZigkc2VsZi0+cmVmbmFtZSk7CisJaWYgKCEkbm9fd3JpdGUgJiYgZGVmaW5lZCAkeHBhdGgpIHsKKwkJZGllICJzdm4tcmVtb3RlLiR4cmVwb19pZC5mZXRjaCBhbHJlYWR5IHNldCB0byB0cmFjayAiLAorCQkgICAgIiR4cGF0aDoiLCAkc2VsZi0+cmVmbmFtZSwgIlxuIjsKKwl9CisJdW5sZXNzICgkbm9fd3JpdGUpIHsKKwkJY29tbWFuZF9ub2lzeSgnY29uZmlnJywKKwkJCSAgICAgICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0udXJsIiwgJHVybCk7CisJCW15ICRwYXRoID0gJHNlbGYtPnBhdGg7CisJCSRwYXRoID1+IHN7Xi99e307CisJCSRwYXRoID1+IHN7JShbMC05QS1GXXsyfSl9e2NociBoZXgoJDEpfWllZzsKKwkJJHNlbGYtPnBhdGgoJHBhdGgpOworCQljb21tYW5kX25vaXN5KCdjb25maWcnLCAnLS1hZGQnLAorCQkJICAgICAgInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfS5mZXRjaCIsCisJCQkgICAgICAkc2VsZi0+cGF0aC4iOiIuJHNlbGYtPnJlZm5hbWUpOworCX0KKwkkc2VsZi0+dXJsKCR1cmwpOworfQorCitzdWIgZmluZF9ieV91cmwgeyAjIHJlcG9zX3Jvb3QgYW5kLCBwYXRoIGFyZSBvcHRpb25hbAorCW15ICgkY2xhc3MsICRmdWxsX3VybCwgJHJlcG9zX3Jvb3QsICRwYXRoKSA9IEBfOworCisJJGZ1bGxfdXJsID0gY2Fub25pY2FsaXplX3VybCgkZnVsbF91cmwpOworCisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRmdWxsX3VybDsKKwlyZW1vdmVfdXNlcm5hbWUoJGZ1bGxfdXJsKTsKKwlyZW1vdmVfdXNlcm5hbWUoJHJlcG9zX3Jvb3QpIGlmIGRlZmluZWQgJHJlcG9zX3Jvb3Q7CisJbXkgJHJlbW90ZXMgPSByZWFkX2FsbF9yZW1vdGVzKCk7CisJaWYgKGRlZmluZWQgJGZ1bGxfdXJsICYmIGRlZmluZWQgJHJlcG9zX3Jvb3QgJiYgIWRlZmluZWQgJHBhdGgpIHsKKwkJJHBhdGggPSAkZnVsbF91cmw7CisJCSRwYXRoID1+IHMjXlxRJHJlcG9zX3Jvb3RcRSg/Oi98JCkjIzsKKwl9CisJZm9yZWFjaCBteSAkcmVwb19pZCAoa2V5cyAlJHJlbW90ZXMpIHsKKwkJbXkgJHUgPSAkcmVtb3Rlcy0+eyRyZXBvX2lkfS0+e3VybH0gb3IgbmV4dDsKKwkJcmVtb3ZlX3VzZXJuYW1lKCR1KTsKKwkJbmV4dCBpZiBkZWZpbmVkICRyZXBvc19yb290ICYmICRyZXBvc19yb290IG5lICR1OworCisJCW15ICRmZXRjaCA9ICRyZW1vdGVzLT57JHJlcG9faWR9LT57ZmV0Y2h9IHx8IHt9OworCQlmb3JlYWNoIG15ICR0IChxdy9icmFuY2hlcyB0YWdzLykgeworCQkJZm9yZWFjaCBteSAkZ2xvYnNwZWMgKEB7JHJlbW90ZXMtPnskcmVwb19pZH0tPnskdH19KSB7CisJCQkJcmVzb2x2ZV9sb2NhbF9nbG9icygkdSwgJGZldGNoLCAkZ2xvYnNwZWMpOworCQkJfQorCQl9CisJCW15ICRwID0gJHBhdGg7CisJCW15ICRyd3IgPSByZXdyaXRlX3Jvb3Qoe3JlcG9faWQgPT4gJHJlcG9faWR9KTsKKwkJbXkgJHN2bSA9ICRyZW1vdGVzLT57JHJlcG9faWR9LT57c3ZtfQorCQkJaWYgZGVmaW5lZCAkcmVtb3Rlcy0+eyRyZXBvX2lkfS0+e3N2bX07CisJCXVubGVzcyAoZGVmaW5lZCAkcCkgeworCQkJJHAgPSAkZnVsbF91cmw7CisJCQlteSAkeiA9ICR1OworCQkJbXkgJHByZWZpeCA9ICcnOworCQkJaWYgKCRyd3IpIHsKKwkJCQkkeiA9ICRyd3I7CisJCQkJcmVtb3ZlX3VzZXJuYW1lKCR6KTsKKwkJCX0gZWxzaWYgKGRlZmluZWQgJHN2bSkgeworCQkJCSR6ID0gJHN2bS0+e3NvdXJjZX07CisJCQkJJHByZWZpeCA9ICRzdm0tPntyZXBsYWNlfTsKKwkJCQkkcHJlZml4ID1+IHMjXlxRJHVcRSg/Oi98JCkjIzsKKwkJCQkkcHJlZml4ID1+IHMjLyQjIzsKKwkJCX0KKwkJCSRwID1+IHMjXlxRJHpcRSg/Oi98JCkjJHByZWZpeCMgb3IgbmV4dDsKKwkJfQorCisJCSMgcmVtb3RlIGZldGNoIHBhdGhzIGFyZSBub3QgVVJJIGVzY2FwZWQuICBEZWNvZGUgb3VycworCQkjIHNvIHRoZXkgbWF0Y2gKKwkJJHAgPSB1cmlfZGVjb2RlKCRwKTsKKworCQlmb3JlYWNoIG15ICRmIChrZXlzICUkZmV0Y2gpIHsKKwkJCW5leHQgaWYgJGYgbmUgJHA7CisJCQlyZXR1cm4gR2l0OjpTVk4tPm5ldygkZmV0Y2gtPnskZn0sICRyZXBvX2lkLCAkZik7CisJCX0KKwl9CisJdW5kZWY7Cit9CisKK3N1YiBpbml0IHsKKwlteSAoJGNsYXNzLCAkdXJsLCAkcGF0aCwgJHJlcG9faWQsICRyZWZfaWQsICRub193cml0ZSkgPSBAXzsKKwlteSAkc2VsZiA9IF9uZXcoJGNsYXNzLCAkcmVwb19pZCwgJHJlZl9pZCwgJHBhdGgpOworCWlmIChkZWZpbmVkICR1cmwpIHsKKwkJJHNlbGYtPmluaXRfcmVtb3RlX2NvbmZpZygkdXJsLCAkbm9fd3JpdGUpOworCX0KKwkkc2VsZjsKK30KKworc3ViIGZpbmRfcmVmIHsKKwlteSAoJHJlZl9pZCkgPSBAXzsKKwlmb3JlYWNoIChjb21tYW5kKHF3L2NvbmZpZyAtbC8pKSB7CisJCW5leHQgdW5sZXNzIG0hXnN2bi1yZW1vdGVcLiguKylcLmZldGNoPQorCQkgICAgICAgICAgICAgIFxzKiguKj8pXHMqOlxzKiguKz8pXHMqJCF4OworCQlteSAoJHJlcG9faWQsICRwYXRoLCAkcmVmKSA9ICgkMSwgJDIsICQzKTsKKwkJaWYgKCRyZWYgZXEgJHJlZl9pZCkgeworCQkJJHBhdGggPSAnJyBpZiAoJHBhdGggPX4gbSNeXC4vPyMpOworCQkJcmV0dXJuICgkcmVwb19pZCwgJHBhdGgpOworCQl9CisJfQorCSh1bmRlZiwgdW5kZWYsIHVuZGVmKTsKK30KKworc3ViIG5ldyB7CisJbXkgKCRjbGFzcywgJHJlZl9pZCwgJHJlcG9faWQsICRwYXRoKSA9IEBfOworCWlmIChkZWZpbmVkICRyZWZfaWQgJiYgIWRlZmluZWQgJHJlcG9faWQgJiYgIWRlZmluZWQgJHBhdGgpIHsKKwkJKCRyZXBvX2lkLCAkcGF0aCkgPSBmaW5kX3JlZigkcmVmX2lkKTsKKwkJaWYgKCFkZWZpbmVkICRyZXBvX2lkKSB7CisJCQlkaWUgIkNvdWxkIG5vdCBmaW5kIGEgXCJzdm4tcmVtb3RlLiouZmV0Y2hcIiBrZXkgIiwKKwkJCSAgICAiaW4gdGhlIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBtYXRjaGluZzogIiwKKwkJCSAgICAiJHJlZl9pZFxuIjsKKwkJfQorCX0KKwlteSAkc2VsZiA9IF9uZXcoJGNsYXNzLCAkcmVwb19pZCwgJHJlZl9pZCwgJHBhdGgpOworCWlmICghZGVmaW5lZCAkc2VsZi0+cGF0aCB8fCAhbGVuZ3RoICRzZWxmLT5wYXRoKSB7CisJCW15ICRmZXRjaCA9IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdm4tcmVtb3RlLiRyZXBvX2lkLmZldGNoIiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6JHJlZl9pZFwkIikgb3IKKwkJICAgICBkaWUgIkZhaWxlZCB0byByZWFkIFwic3ZuLXJlbW90ZS4kcmVwb19pZC5mZXRjaFwiICIsCisJCSAgICAgICAgICJcIjokcmVmX2lkXCRcIiBpbiBjb25maWdcbiI7CisJCW15KCRwYXRoKSA9IHNwbGl0KC9ccyo6XHMqLywgJGZldGNoKTsKKwkJJHNlbGYtPnBhdGgoJHBhdGgpOworCX0KKwl7CisJCW15ICRwYXRoID0gJHNlbGYtPnBhdGg7CisJCSRwYXRoID1+IHN7XEEvfXt9OworCQkkcGF0aCA9fiBzey9cen17fTsKKwkJJHNlbGYtPnBhdGgoJHBhdGgpOworCX0KKwlteSAkdXJsID0gY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQnLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgInN2bi1yZW1vdGUuJHJlcG9faWQudXJsIikgb3IKKyAgICAgICAgICAgICAgICAgIGRpZSAiRmFpbGVkIHRvIHJlYWQgXCJzdm4tcmVtb3RlLiRyZXBvX2lkLnVybFwiIGluIGNvbmZpZ1xuIjsKKwkkc2VsZi0+dXJsKCR1cmwpOworCSRzZWxmLT57cHVzaHVybH0gPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQnLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgInN2bi1yZW1vdGUuJHJlcG9faWQucHVzaHVybCIpIH07CisJJHNlbGYtPnJlYnVpbGQ7CisJJHNlbGY7Cit9CisKK3N1YiByZWZuYW1lIHsKKwlteSAoJHJlZm5hbWUpID0gJF9bMF0tPntyZWZfaWR9IDsKKworCSMgSXQgY2Fubm90IGVuZCB3aXRoIGEgc2xhc2ggLywgd2UnbGwgdGhyb3cgdXAgb24gdGhpcyBiZWNhdXNlCisJIyBTVk4gY2FuJ3QgaGF2ZSBkaXJlY3RvcmllcyB3aXRoIGEgc2xhc2ggaW4gdGhlaXIgbmFtZSwgZWl0aGVyOgorCWlmICgkcmVmbmFtZSA9fiBtey8kfSkgeworCQlkaWUgInJlZjogJyRyZWZuYW1lJyBlbmRzIHdpdGggYSB0cmFpbGluZyBzbGFzaDsgdGhpcyBpcyAiLAorCQkgICAgIm5vdCBwZXJtaXR0ZWQgYnkgZ2l0IG9yIFN1YnZlcnNpb25cbiI7CisJfQorCisJIyBJdCBjYW5ub3QgaGF2ZSBBU0NJSSBjb250cm9sIGNoYXJhY3RlciBzcGFjZSwgdGlsZGUgfiwgY2FyZXQgXiwKKwkjIGNvbG9uIDosIHF1ZXN0aW9uLW1hcmsgPywgYXN0ZXJpc2sgKiwgc3BhY2UsIG9yIG9wZW4gYnJhY2tldCBbCisJIyBhbnl3aGVyZS4KKwkjCisJIyBBZGRpdGlvbmFsbHksICUgbXVzdCBiZSBlc2NhcGVkIGJlY2F1c2UgaXQgaXMgdXNlZCBmb3IgZXNjYXBpbmcKKwkjIGFuZCB3ZSB3YW50IG91ciBlc2NhcGVkIHJlZm5hbWUgdG8gYmUgcmV2ZXJzaWJsZQorCSRyZWZuYW1lID1+IHN7KFsgXCV+XF46XD9cKlxbXHRcXF0pfXtzcHJpbnRmKCclJSUwMlgnLG9yZCgkMSkpfWVnOworCisJIyBubyBzbGFzaC1zZXBhcmF0ZWQgY29tcG9uZW50IGNhbiBiZWdpbiB3aXRoIGEgZG90IC4KKwkjIC8uKiBiZWNvbWVzIC8lMkUqCisJJHJlZm5hbWUgPX4gc3svXC59ey8lMkV9ZzsKKworCSMgSXQgY2Fubm90IGhhdmUgdHdvIGNvbnNlY3V0aXZlIGRvdHMgLi4gYW55d2hlcmUKKwkjIC4uIGJlY29tZXMgJTJFJTJFCisJJHJlZm5hbWUgPX4gc3tcLlwufXslMkUlMkV9ZzsKKworCSMgdHJhaWxpbmcgZG90cyBhbmQgLmxvY2sgYXJlIG5vdCBhbGxvd2VkCisJIyAuJCBiZWNvbWVzICUyRSBhbmQgLmxvY2sgYmVjb21lcyAlMkVsb2NrCisJJHJlZm5hbWUgPX4gc3tcLig/PSR8bG9jayQpfXslMkV9OworCisJIyB0aGUgc2VxdWVuY2UgQHsgaXMgdXNlZCB0byBhY2Nlc3MgdGhlIHJlZmxvZworCSMgQHsgYmVjb21lcyAlNDB7CisJJHJlZm5hbWUgPX4gc3tcQFx7fXslNDBce31nOworCisJcmV0dXJuICRyZWZuYW1lOworfQorCitzdWIgZGVzYW5pdGl6ZV9yZWZuYW1lIHsKKwlteSAoJHJlZm5hbWUpID0gQF87CisJJHJlZm5hbWUgPX4gc3slKD86KFswLTlBLUZdezJ9KSl9e2NociBoZXgoJDEpfWVnOworCXJldHVybiAkcmVmbmFtZTsKK30KKworc3ViIHN2bV91dWlkIHsKKwlteSAoJHNlbGYpID0gQF87CisJcmV0dXJuICRzZWxmLT57c3ZtfS0+e3V1aWR9IGlmICRzZWxmLT5zdm07CisJJHNlbGYtPnJhOworCXVubGVzcyAoJHNlbGYtPntzdm19KSB7CisJCWRpZSAiU1ZNIFVVSUQgbm90IGNhY2hlZCwgYW5kIHJlYWRpbmcgcmVtb3RlbHkgZmFpbGVkXG4iOworCX0KKwkkc2VsZi0+e3N2bX0tPnt1dWlkfTsKK30KKworc3ViIHN2bSB7CisJbXkgKCRzZWxmKSA9IEBfOworCXJldHVybiAkc2VsZi0+e3N2bX0gaWYgJHNlbGYtPntzdm19OworCW15ICRzdm07CisJIyBzZWUgaWYgd2UgaGF2ZSBpdCBpbiBvdXIgY29uZmlnLCBmaXJzdDoKKwlldmFsIHsKKwkJbXkgJHNlY3Rpb24gPSAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9IjsKKwkJJHN2bSA9IHsKKwkJICBzb3VyY2UgPT4gdG1wX2NvbmZpZygnLS1nZXQnLCAiJHNlY3Rpb24uc3ZtLXNvdXJjZSIpLAorCQkgIHV1aWQgPT4gdG1wX2NvbmZpZygnLS1nZXQnLCAiJHNlY3Rpb24uc3ZtLXV1aWQiKSwKKwkJICByZXBsYWNlID0+IHRtcF9jb25maWcoJy0tZ2V0JywgIiRzZWN0aW9uLnN2bS1yZXBsYWNlIiksCisJCX0KKwl9OworCWlmICgkc3ZtICYmICRzdm0tPntzb3VyY2V9ICYmICRzdm0tPnt1dWlkfSAmJiAkc3ZtLT57cmVwbGFjZX0pIHsKKwkJJHNlbGYtPntzdm19ID0gJHN2bTsKKwl9CisJJHNlbGYtPntzdm19OworfQorCitzdWIgX3NldF9zdm1fdmFycyB7CisJbXkgKCRzZWxmLCAkcmEpID0gQF87CisJcmV0dXJuICRyYSBpZiAkc2VsZi0+c3ZtOworCisJbXkgQGVyciA9ICggInVzZVN2bVByb3BzIHNldCwgYnV0IGZhaWxlZCB0byByZWFkIFNWTSBwcm9wZXJ0aWVzXG4iLAorCQkgICAgIihzdm06c291cmNlLCBzdm06dXVpZCkgIiwKKwkJICAgICJmcm9tIHRoZSBmb2xsb3dpbmcgVVJMczpcbiIgKTsKKwlzdWIgcmVhZF9zdm1fcHJvcHMgeworCQlteSAoJHNlbGYsICRyYSwgJHBhdGgsICRyKSA9IEBfOworCQlteSAkcHJvcHMgPSAoJHJhLT5nZXRfZGlyKCRwYXRoLCAkcikpWzJdOworCQlteSAkc3JjID0gJHByb3BzLT57J3N2bTpzb3VyY2UnfTsKKwkJbXkgJHV1aWQgPSAkcHJvcHMtPnsnc3ZtOnV1aWQnfTsKKwkJcmV0dXJuIHVuZGVmIGlmICghJHNyYyB8fCAhJHV1aWQpOworCisJCWNob21wKCRzcmMsICR1dWlkKTsKKworCQkkdXVpZCA9fiBte15bMC05YS1mXC1dezMwLH0kfWkKKwkJICAgIG9yIGRpZSAiZG9lc24ndCBsb29rIHJpZ2h0IC0gc3ZtOnV1aWQgaXMgJyR1dWlkJ1xuIjsKKworCQkjIHRoZSAnIScgaXMgdXNlZCB0byBtYXJrIHRoZSByZXBvc19yb290IS9yZWxhdGl2ZS9wYXRoCisJCSRzcmMgPX4gc3svPyEvP317L307CisJCSRzcmMgPX4gc3svKyR9e307ICMgbm8gdHJhaWxpbmcgc2xhc2hlcyBwbGVhc2UKKwkJIyB1c2VybmFtZSBpcyBvZiBubyBpbnRlcmVzdAorCQkkc3JjID1+IHN7KF5bYS16XCtdKjovLylbXi9AXSpAfXskMX07CisKKwkJbXkgJHJlcGxhY2UgPSBhZGRfcGF0aF90b191cmwoJHJhLT51cmwsICRwYXRoKTsKKworCQlteSAkc2VjdGlvbiA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0iOworCQl0bXBfY29uZmlnKCIkc2VjdGlvbi5zdm0tc291cmNlIiwgJHNyYyk7CisJCXRtcF9jb25maWcoIiRzZWN0aW9uLnN2bS1yZXBsYWNlIiwgJHJlcGxhY2UpOworCQl0bXBfY29uZmlnKCIkc2VjdGlvbi5zdm0tdXVpZCIsICR1dWlkKTsKKwkJJHNlbGYtPntzdm19ID0geworCQkJc291cmNlID0+ICRzcmMsCisJCQl1dWlkID0+ICR1dWlkLAorCQkJcmVwbGFjZSA9PiAkcmVwbGFjZQorCQl9OworCX0KKworCW15ICRyID0gJHJhLT5nZXRfbGF0ZXN0X3Jldm51bTsKKwlteSAkcGF0aCA9ICRzZWxmLT5wYXRoOworCW15ICV0cmllZDsKKwl3aGlsZSAobGVuZ3RoICRwYXRoKSB7CisJCW15ICR0cnkgPSBhZGRfcGF0aF90b191cmwoJHNlbGYtPnVybCwgJHBhdGgpOworCQl1bmxlc3MgKCR0cmllZHskdHJ5fSkgeworCQkJcmV0dXJuICRyYSBpZiAkc2VsZi0+cmVhZF9zdm1fcHJvcHMoJHJhLCAkcGF0aCwgJHIpOworCQkJJHRyaWVkeyR0cnl9ID0gMTsKKwkJfQorCQkkcGF0aCA9fiBzIy8/W14vXSskIyM7CisJfQorCWRpZSAiUGF0aDogJyRwYXRoJyBzaG91bGQgYmUgJydcbiIgaWYgJHBhdGggbmUgJyc7CisJcmV0dXJuICRyYSBpZiAkc2VsZi0+cmVhZF9zdm1fcHJvcHMoJHJhLCAkcGF0aCwgJHIpOworCSR0cmllZHsgYWRkX3BhdGhfdG9fdXJsKCRzZWxmLT51cmwsICRwYXRoKSB9ID0gMTsKKworCWlmICgkcmEtPntyZXBvc19yb290fSBlcSAkc2VsZi0+dXJsKSB7CisJCWRpZSBAZXJyLCAobWFwIHsgIiAgJF9cbiIgfSBrZXlzICV0cmllZCksICJcbiI7CisJfQorCisJIyBub3BlLCBtYWtlIHN1cmUgd2UncmUgY29ubmVjdGVkIHRvIHRoZSByZXBvc2l0b3J5IHJvb3Q6CisJbXkgJG9rOworCW15IEB0cmllZF9iOworCSRwYXRoID0gJHJhLT57c3ZuX3BhdGh9OworCSRyYSA9IEdpdDo6U1ZOOjpSYS0+bmV3KCRyYS0+e3JlcG9zX3Jvb3R9KTsKKwl3aGlsZSAobGVuZ3RoICRwYXRoKSB7CisJCW15ICR0cnkgPSBhZGRfcGF0aF90b191cmwoJHJhLT51cmwsICRwYXRoKTsKKwkJdW5sZXNzICgkdHJpZWR7JHRyeX0pIHsKKwkJCSRvayA9ICRzZWxmLT5yZWFkX3N2bV9wcm9wcygkcmEsICRwYXRoLCAkcik7CisJCQlsYXN0IGlmICRvazsKKwkJCSR0cmllZHskdHJ5fSA9IDE7CisJCX0KKwkJJHBhdGggPX4gcyMvP1teL10rJCMjOworCX0KKwlkaWUgIlBhdGg6ICckcGF0aCcgc2hvdWxkIGJlICcnXG4iIGlmICRwYXRoIG5lICcnOworCSRvayB8fD0gJHNlbGYtPnJlYWRfc3ZtX3Byb3BzKCRyYSwgJHBhdGgsICRyKTsKKwkkdHJpZWR7IGFkZF9wYXRoX3RvX3VybCgkcmEtPnVybCwgJHBhdGgpIH0gPSAxOworCWlmICghJG9rKSB7CisJCWRpZSBAZXJyLCAobWFwIHsgIiAgJF9cbiIgfSBrZXlzICV0cmllZCksICJcbiI7CisJfQorCUdpdDo6U1ZOOjpSYS0+bmV3KCRzZWxmLT51cmwpOworfQorCitzdWIgc3Zuc3luYyB7CisJbXkgKCRzZWxmKSA9IEBfOworCXJldHVybiAkc2VsZi0+e3N2bnN5bmN9IGlmICRzZWxmLT57c3Zuc3luY307CisKKwlpZiAoJHNlbGYtPm5vX21ldGFkYXRhKSB7CisJCWRpZSAiQ2FuJ3QgaGF2ZSBib3RoICdub01ldGFkYXRhJyBhbmQgIiwKKwkJICAgICIndXNlU3Zuc3luY1Byb3BzJyBvcHRpb25zIHNldCFcbiI7CisJfQorCWlmICgkc2VsZi0+cmV3cml0ZV9yb290KSB7CisJCWRpZSAiQ2FuJ3QgaGF2ZSBib3RoICd1c2VTdm5zeW5jUHJvcHMnIGFuZCAncmV3cml0ZVJvb3QnICIsCisJCSAgICAib3B0aW9ucyBzZXQhXG4iOworCX0KKwlpZiAoJHNlbGYtPnJld3JpdGVfdXVpZCkgeworCQlkaWUgIkNhbid0IGhhdmUgYm90aCAndXNlU3Zuc3luY1Byb3BzJyBhbmQgJ3Jld3JpdGVVVUlEJyAiLAorCQkgICAgIm9wdGlvbnMgc2V0IVxuIjsKKwl9CisKKwlteSAkc3Zuc3luYzsKKwkjIHNlZSBpZiB3ZSBoYXZlIGl0IGluIG91ciBjb25maWcsIGZpcnN0OgorCWV2YWwgeworCQlteSAkc2VjdGlvbiA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0iOworCisJCW15ICR1cmwgPSB0bXBfY29uZmlnKCctLWdldCcsICIkc2VjdGlvbi5zdm5zeW5jLXVybCIpOworCQkoJHVybCkgPSAoJHVybCA9fiBte14oW2EtelwrXSs6Ly9cUyspJH0pIG9yCisJCSAgIGRpZSAiZG9lc24ndCBsb29rIHJpZ2h0IC0gc3ZuOnN5bmMtZnJvbS11cmwgaXMgJyR1cmwnXG4iOworCisJCW15ICR1dWlkID0gdG1wX2NvbmZpZygnLS1nZXQnLCAiJHNlY3Rpb24uc3Zuc3luYy11dWlkIik7CisJCSgkdXVpZCkgPSAoJHV1aWQgPX4gbXteKFswLTlhLWZcLV17MzAsfSkkfWkpIG9yCisJCSAgIGRpZSAiZG9lc24ndCBsb29rIHJpZ2h0IC0gc3ZuOnN5bmMtZnJvbS11dWlkIGlzICckdXVpZCdcbiI7CisKKwkJJHN2bnN5bmMgPSB7IHVybCA9PiAkdXJsLCB1dWlkID0+ICR1dWlkIH0KKwl9OworCWlmICgkc3Zuc3luYyAmJiAkc3Zuc3luYy0+e3VybH0gJiYgJHN2bnN5bmMtPnt1dWlkfSkgeworCQlyZXR1cm4gJHNlbGYtPntzdm5zeW5jfSA9ICRzdm5zeW5jOworCX0KKworCW15ICRlcnIgPSAidXNlU3Zuc3luY1Byb3BzIHNldCwgYnV0IGZhaWxlZCB0byByZWFkICIgLgorCSAgICAgICAgICAic3Zuc3luYyBwcm9wZXJ0eTogc3ZuOnN5bmMtZnJvbS0iOworCW15ICRycCA9ICRzZWxmLT5yYS0+cmV2X3Byb3BsaXN0KDApOworCisJbXkgJHVybCA9ICRycC0+eydzdm46c3luYy1mcm9tLXVybCd9IG9yIGRpZSAkZXJyIC4gInVybFxuIjsKKwkoJHVybCkgPSAoJHVybCA9fiBte14oW2EtelwrXSs6Ly9cUyspJH0pIG9yCisJICAgICAgICAgICBkaWUgImRvZXNuJ3QgbG9vayByaWdodCAtIHN2bjpzeW5jLWZyb20tdXJsIGlzICckdXJsJ1xuIjsKKworCW15ICR1dWlkID0gJHJwLT57J3N2bjpzeW5jLWZyb20tdXVpZCd9IG9yIGRpZSAkZXJyIC4gInV1aWRcbiI7CisJKCR1dWlkKSA9ICgkdXVpZCA9fiBte14oWzAtOWEtZlwtXXszMCx9KSR9aSkgb3IKKwkgICAgICAgICAgIGRpZSAiZG9lc24ndCBsb29rIHJpZ2h0IC0gc3ZuOnN5bmMtZnJvbS11dWlkIGlzICckdXVpZCdcbiI7CisKKwlteSAkc2VjdGlvbiA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0iOworCXRtcF9jb25maWcoJy0tYWRkJywgIiRzZWN0aW9uLnN2bnN5bmMtdXVpZCIsICR1dWlkKTsKKwl0bXBfY29uZmlnKCctLWFkZCcsICIkc2VjdGlvbi5zdm5zeW5jLXVybCIsICR1cmwpOworCXJldHVybiAkc2VsZi0+e3N2bnN5bmN9ID0geyB1cmwgPT4gJHVybCwgdXVpZCA9PiAkdXVpZCB9OworfQorCisjIHRoaXMgYWxsb3dzIHVzIHRvIG1lbW9pemUgb3VyIFNWTjo6UmEgVVVJRCBsb2NhbGx5IGFuZCBhdm9pZCBhCisjIHJlbW90ZSBsb29rdXAgKHVzZWZ1bCBmb3IgJ2dpdCBzdm4gbG9nJykuCitzdWIgcmFfdXVpZCB7CisJbXkgKCRzZWxmKSA9IEBfOworCXVubGVzcyAoJHNlbGYtPntyYV91dWlkfSkgeworCQlteSAka2V5ID0gInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfS51dWlkIjsKKwkJbXkgJHV1aWQgPSBldmFsIHsgdG1wX2NvbmZpZygnLS1nZXQnLCAka2V5KSB9OworCQlpZiAoISRAICYmICR1dWlkICYmICR1dWlkID1+IC9eKFthLWZcZFwtXXszMCx9KSQvaSkgeworCQkJJHNlbGYtPntyYV91dWlkfSA9ICR1dWlkOworCQl9IGVsc2UgeworCQkJZGllICJyYV91dWlkIGNhbGxlZCB3aXRob3V0IFVSTFxuIiB1bmxlc3MgJHNlbGYtPnVybDsKKwkJCSRzZWxmLT57cmFfdXVpZH0gPSAkc2VsZi0+cmEtPmdldF91dWlkOworCQkJdG1wX2NvbmZpZygnLS1hZGQnLCAka2V5LCAkc2VsZi0+e3JhX3V1aWR9KTsKKwkJfQorCX0KKwkkc2VsZi0+e3JhX3V1aWR9OworfQorCitzdWIgX3NldF9yZXBvc19yb290IHsKKwlteSAoJHNlbGYsICRyZXBvc19yb290KSA9IEBfOworCW15ICRrID0gInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfS5yZXBvc1Jvb3QiOworCSRyZXBvc19yb290IHx8PSAkc2VsZi0+cmEtPntyZXBvc19yb290fTsKKwl0bXBfY29uZmlnKCRrLCAkcmVwb3Nfcm9vdCk7CisJJHJlcG9zX3Jvb3Q7Cit9CisKK3N1YiByZXBvc19yb290IHsKKwlteSAoJHNlbGYpID0gQF87CisJbXkgJGsgPSAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9LnJlcG9zUm9vdCI7CisJZXZhbCB7IHRtcF9jb25maWcoJy0tZ2V0JywgJGspIH0gfHwgJHNlbGYtPl9zZXRfcmVwb3Nfcm9vdDsKK30KKworc3ViIHJhIHsKKwlteSAoJHNlbGYpID0gc2hpZnQ7CisJbXkgJHJhID0gR2l0OjpTVk46OlJhLT5uZXcoJHNlbGYtPnVybCk7CisJJHNlbGYtPl9zZXRfcmVwb3Nfcm9vdCgkcmEtPntyZXBvc19yb290fSk7CisJaWYgKCRzZWxmLT51c2Vfc3ZtX3Byb3BzICYmICEkc2VsZi0+e3N2bX0pIHsKKwkJaWYgKCRzZWxmLT5ub19tZXRhZGF0YSkgeworCQkJZGllICJDYW4ndCBoYXZlIGJvdGggJ25vTWV0YWRhdGEnIGFuZCAiLAorCQkJICAgICIndXNlU3ZtUHJvcHMnIG9wdGlvbnMgc2V0IVxuIjsKKwkJfSBlbHNpZiAoJHNlbGYtPnVzZV9zdm5zeW5jX3Byb3BzKSB7CisJCQlkaWUgIkNhbid0IGhhdmUgYm90aCAndXNlU3Zuc3luY1Byb3BzJyBhbmQgIiwKKwkJCSAgICAiJ3VzZVN2bVByb3BzJyBvcHRpb25zIHNldCFcbiI7CisJCX0KKwkJJHJhID0gJHNlbGYtPl9zZXRfc3ZtX3ZhcnMoJHJhKTsKKwkJJHNlbGYtPnstd2FudF9yZXZwcm9wc30gPSAxOworCX0KKwkkcmE7Cit9CisKKyMgcHJvcF93YWxrKFBBVEgsIFJFViwgU1VCKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIFBBVEggYXQgcmV2aXNpb24gUkVWIGFuZCBpbnZva2UgU1VCIGZvciBlYWNoCisjIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGEgU1ZOIHByb3BlcnR5LiAgU1VCIHdpbGwgYmUgaW52b2tlZCBhcworIyBmb2xsb3dzOiAgJlNVQihncywgcGF0aCwgcHJvcHMpOyAgd2hlcmUgYGdzJyBpcyB0aGlzIGluc3RhbmNlIG9mCisjIEdpdDo6U1ZOLCBgcGF0aCcgdGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgcHJvcGVydGllcworIyBgcHJvcHMnIHdlcmUgZm91bmQuICBUaGUgYHBhdGgnIHdpbGwgYmUgcmVsYXRpdmUgdG8gcG9pbnQgb2YgY2hlY2tvdXQsCisjIHRoYXQgaXMsIGlmIHVybDovL3JlcG8vdHJ1bmsgaXMgdGhlIGN1cnJlbnQgR2l0IGJyYW5jaCwgYW5kIHRoYXQKKyMgZGlyZWN0b3J5IGNvbnRhaW5zIGEgc3ViLWRpcmVjdG9yeSBgZCcsIFNVQiB3aWxsIGJlIGludm9rZWQgd2l0aCBgL2QvJworIyBhcyBgcGF0aCcgKG5vdGUgdGhlIHRyYWlsaW5nIGAvJykuCitzdWIgcHJvcF93YWxrIHsKKwlteSAoJHNlbGYsICRwYXRoLCAkcmV2LCAkc3ViKSA9IEBfOworCisJJHBhdGggPX4gcyNeLyMjOworCW15ICgkZGlyZW50LCB1bmRlZiwgJHByb3BzKSA9ICRzZWxmLT5yYS0+Z2V0X2RpcigkcGF0aCwgJHJldik7CisJJHBhdGggPX4gcyNeLyojLyNnOworCW15ICRwID0gJHBhdGg7CisJIyBTdHJpcCB0aGUgaXJyZWxldmFudCBwYXJ0IG9mIHRoZSBwYXRoLgorCSRwID1+IHMjXi8rXFFAe1skc2VsZi0+cGF0aF19XEUoL3wkKSMvIzsKKwkjIEVuc3VyZSB0aGUgcGF0aCBpcyB0ZXJtaW5hdGVkIGJ5IGEgYC8nLgorCSRwID1+IHMjLyokIy8jOworCisJIyBUaGUgcHJvcGVydGllcyBjb250YWluIGFsbCB0aGUgaW50ZXJuYWwgU1ZOIHN0dWZmIG5vYm9keQorCSMgKHVzdWFsbHkpIGNhcmVzIGFib3V0LgorCW15ICRpbnRlcmVzdGluZ19wcm9wcyA9IDA7CisJZm9yZWFjaCAoa2V5cyAleyRwcm9wc30pIHsKKwkJIyBJZiBpdCBkb2Vzbid0IHN0YXJ0IHdpdGggYHN2bjonLCBpdCBtdXN0IGJlIGEKKwkJIyB1c2VyLWRlZmluZWQgcHJvcGVydHkuCisJCSsrJGludGVyZXN0aW5nX3Byb3BzIGFuZCBuZXh0IGlmICRfICF+IC9ec3ZuOi87CisJCSMgRklYTUU6IEZyYWdpbGUsIGlmIFNWTiBhZGRzIG5ldyBwdWJsaWMgcHJvcGVydGllcywKKwkJIyB0aGlzIG5lZWRzIHRvIGJlIHVwZGF0ZWQuCisJCSsrJGludGVyZXN0aW5nX3Byb3BzIGlmIC9ec3ZuOig/Omlnbm9yZXxrZXl3b3Jkc3xleGVjdXRhYmxlCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxlb2wtc3R5bGV8bWltZS10eXBlCisJCQkJCQkgfGV4dGVybmFsc3xuZWVkcy1sb2NrKSQveDsKKwl9CisJJiRzdWIoJHNlbGYsICRwLCAkcHJvcHMpIGlmICRpbnRlcmVzdGluZ19wcm9wczsKKworCWZvcmVhY2ggKHNvcnQga2V5cyAlJGRpcmVudCkgeworCQluZXh0IGlmICRkaXJlbnQtPnskX30tPntraW5kfSAhPSAkU1ZOOjpOb2RlOjpkaXI7CisJCSRzZWxmLT5wcm9wX3dhbGsoJHNlbGYtPnBhdGggLiAkcCAuICRfLCAkcmV2LCAkc3ViKTsKKwl9Cit9CisKK3N1YiBsYXN0X3JldiB7ICgkX1swXS0+bGFzdF9yZXZfY29tbWl0KVswXSB9CitzdWIgbGFzdF9jb21taXQgeyAoJF9bMF0tPmxhc3RfcmV2X2NvbW1pdClbMV0gfQorCisjIHJldHVybnMgdGhlIG5ld2VzdCBTVk4gcmV2aXNpb24gbnVtYmVyIGFuZCBuZXdlc3QgY29tbWl0IFNIQTEKK3N1YiBsYXN0X3Jldl9jb21taXQgeworCW15ICgkc2VsZikgPSBAXzsKKwlpZiAoZGVmaW5lZCAkc2VsZi0+e2xhc3RfcmV2fSAmJiBkZWZpbmVkICRzZWxmLT57bGFzdF9jb21taXR9KSB7CisJCXJldHVybiAoJHNlbGYtPntsYXN0X3Jldn0sICRzZWxmLT57bGFzdF9jb21taXR9KTsKKwl9CisJbXkgJGMgPSA6OnZlcmlmeV9yZWYoJHNlbGYtPnJlZm5hbWUuJ14wJyk7CisJaWYgKCRjICYmICEkc2VsZi0+dXNlX3N2bV9wcm9wcyAmJiAhJHNlbGYtPm5vX21ldGFkYXRhKSB7CisJCW15ICRyZXYgPSAoOjpjbXRfbWV0YWRhdGEoJGMpKVsxXTsKKwkJaWYgKGRlZmluZWQgJHJldikgeworCQkJKCRzZWxmLT57bGFzdF9yZXZ9LCAkc2VsZi0+e2xhc3RfY29tbWl0fSkgPSAoJHJldiwgJGMpOworCQkJcmV0dXJuICgkcmV2LCAkYyk7CisJCX0KKwl9CisJbXkgJG1hcF9wYXRoID0gJHNlbGYtPm1hcF9wYXRoOworCXVubGVzcyAoLWUgJG1hcF9wYXRoKSB7CisJCSgkc2VsZi0+e2xhc3RfcmV2fSwgJHNlbGYtPntsYXN0X2NvbW1pdH0pID0gKHVuZGVmLCB1bmRlZik7CisJCXJldHVybiAodW5kZWYsIHVuZGVmKTsKKwl9CisJbXkgKCRyZXYsICRjb21taXQpID0gJHNlbGYtPnJldl9tYXBfbWF4KDEpOworCSgkc2VsZi0+e2xhc3RfcmV2fSwgJHNlbGYtPntsYXN0X2NvbW1pdH0pID0gKCRyZXYsICRjb21taXQpOworCXJldHVybiAoJHJldiwgJGNvbW1pdCk7Cit9CisKK3N1YiBnZXRfZmV0Y2hfcmFuZ2UgeworCW15ICgkc2VsZiwgJG1pbiwgJG1heCkgPSBAXzsKKwkkbWF4IHx8PSAkc2VsZi0+cmEtPmdldF9sYXRlc3RfcmV2bnVtOworCSRtaW4gfHw9ICRzZWxmLT5yZXZfbWFwX21heDsKKwkoKyskbWluLCAkbWF4KTsKK30KKworc3ViIHN2bl9kaXIgeworCWNvbW1hbmRfb25lbGluZShxdyhyZXYtcGFyc2UgLS1naXQtcGF0aCBzdm4pKTsKK30KKworc3ViIHRtcF9jb25maWcgeworCW15IChAYXJncykgPSBAXzsKKwlteSAkc3ZuX2RpciA9IHN2bl9kaXIoKTsKKwlteSAkb2xkX2RlZl9jb25maWcgPSAiJHN2bl9kaXIvY29uZmlnIjsKKwlteSAkY29uZmlnID0gIiRzdm5fZGlyLy5tZXRhZGF0YSI7CisJaWYgKCEgLWYgJGNvbmZpZyAmJiAtZiAkb2xkX2RlZl9jb25maWcpIHsKKwkJcmVuYW1lICRvbGRfZGVmX2NvbmZpZywgJGNvbmZpZyBvcgorCQkgICAgICAgZGllICJGYWlsZWQgcmVuYW1lICRvbGRfZGVmX2NvbmZpZyA9PiAkY29uZmlnOiAkIVxuIjsKKwl9CisJbXkgJG9sZF9jb25maWcgPSAkRU5We0dJVF9DT05GSUd9OworCSRFTlZ7R0lUX0NPTkZJR30gPSAkY29uZmlnOworCSRAID0gdW5kZWY7CisJbXkgQHJldCA9IGV2YWwgeworCQl1bmxlc3MgKC1mICRjb25maWcpIHsKKwkJCW1rZmlsZSgkY29uZmlnKTsKKwkJCW9wZW4gbXkgJGZoLCAnPicsICRjb25maWcgb3IKKwkJCSAgICBkaWUgIkNhbid0IG9wZW4gJGNvbmZpZzogJCFcbiI7CisJCQlwcmludCAkZmggIjsgVGhpcyBmaWxlIGlzIHVzZWQgaW50ZXJuYWxseSBieSAiLAorCQkJICAgICAgICAgICJnaXQtc3ZuXG4iIG9yIGRpZQorCQkJCSAgIkNvdWxkbid0IHdyaXRlIHRvICRjb25maWc6ICQhXG4iOworCQkJcHJpbnQgJGZoICI7IFlvdSBzaG91bGQgbm90IGhhdmUgdG8gZWRpdCBpdFxuIiBvcgorCQkJICAgICAgZGllICJDb3VsZG4ndCB3cml0ZSB0byAkY29uZmlnOiAkIVxuIjsKKwkJCWNsb3NlICRmaCBvciBkaWUgIkNvdWxkbid0IGNsb3NlICRjb25maWc6ICQhXG4iOworCQl9CisJCWNvbW1hbmQoJ2NvbmZpZycsIEBhcmdzKTsKKwl9OworCW15ICRlcnIgPSAkQDsKKwlpZiAoZGVmaW5lZCAkb2xkX2NvbmZpZykgeworCQkkRU5We0dJVF9DT05GSUd9ID0gJG9sZF9jb25maWc7CisJfSBlbHNlIHsKKwkJZGVsZXRlICRFTlZ7R0lUX0NPTkZJR307CisJfQorCWRpZSAkZXJyIGlmICRlcnI7CisJd2FudGFycmF5ID8gQHJldCA6ICRyZXRbMF07Cit9CisKK3N1YiB0bXBfaW5kZXhfZG8geworCW15ICgkc2VsZiwgJHN1YikgPSBAXzsKKwlteSAkb2xkX2luZGV4ID0gJEVOVntHSVRfSU5ERVhfRklMRX07CisJJEVOVntHSVRfSU5ERVhfRklMRX0gPSAkc2VsZi0+e2luZGV4fTsKKwkkQCA9IHVuZGVmOworCW15IEByZXQgPSBldmFsIHsKKwkJbXkgKCRkaXIsICRiYXNlKSA9ICgkc2VsZi0+e2luZGV4fSA9fiBtI14oLio/KS8/KFteL10rKSQjKTsKKwkJbWtwYXRoKFskZGlyXSkgdW5sZXNzIC1kICRkaXI7CisJCSYkc3ViOworCX07CisJbXkgJGVyciA9ICRAOworCWlmIChkZWZpbmVkICRvbGRfaW5kZXgpIHsKKwkJJEVOVntHSVRfSU5ERVhfRklMRX0gPSAkb2xkX2luZGV4OworCX0gZWxzZSB7CisJCWRlbGV0ZSAkRU5We0dJVF9JTkRFWF9GSUxFfTsKKwl9CisJZGllICRlcnIgaWYgJGVycjsKKwl3YW50YXJyYXkgPyBAcmV0IDogJHJldFswXTsKK30KKworc3ViIGFzc2VydF9pbmRleF9jbGVhbiB7CisJbXkgKCRzZWxmLCAkdHJlZWlzaCkgPSBAXzsKKworCSRzZWxmLT50bXBfaW5kZXhfZG8oc3ViIHsKKwkJY29tbWFuZF9ub2lzeSgncmVhZC10cmVlJywgJHRyZWVpc2gpIHVubGVzcyAtZSAkc2VsZi0+e2luZGV4fTsKKwkJbXkgJHggPSBjb21tYW5kX29uZWxpbmUoJ3dyaXRlLXRyZWUnKTsKKwkJbXkgKCR5KSA9IChjb21tYW5kKHF3L2NhdC1maWxlIGNvbW1pdC8sICR0cmVlaXNoKSA9fgorCQkgICAgICAgICAgIC9edHJlZSAoJDo6c2hhMSkvbW8pOworCQlyZXR1cm4gaWYgJHkgZXEgJHg7CisKKwkJd2FybiAiSW5kZXggbWlzbWF0Y2g6ICR5ICE9ICR4XG5yZXJlYWRpbmcgJHRyZWVpc2hcbiI7CisJCXVubGluayAkc2VsZi0+e2luZGV4fSBvciBkaWUgInVubGluayAkc2VsZi0+e2luZGV4fTogJCFcbiI7CisJCWNvbW1hbmRfbm9pc3koJ3JlYWQtdHJlZScsICR0cmVlaXNoKTsKKwkJJHggPSBjb21tYW5kX29uZWxpbmUoJ3dyaXRlLXRyZWUnKTsKKwkJaWYgKCR5IG5lICR4KSB7CisJCQlmYXRhbCAidHJlZXMgKCR0cmVlaXNoKSAkeSAhPSAkeFxuIiwKKwkJCSAgICAgICJTb21ldGhpbmcgaXMgc2VyaW91c2x5IHdyb25nLi4uIjsKKwkJfQorCX0pOworfQorCitzdWIgZ2V0X2NvbW1pdF9wYXJlbnRzIHsKKwlteSAoJHNlbGYsICRsb2dfZW50cnkpID0gQF87CisJbXkgKCVzZWVuLCBAcmV0LCBAdG1wKTsKKwkjIGxlZ2FjeSBzdXBwb3J0IGZvciAnc2V0LXRyZWUnOyB0aGlzIGlzIG9ubHkgdXNlZCBieSBzZXRfdHJlZV9jYjoKKwlpZiAobXkgJGlwID0gJHNlbGYtPntpbmplY3RfcGFyZW50c30pIHsKKwkJaWYgKG15ICRjb21taXQgPSBkZWxldGUgJGlwLT57JGxvZ19lbnRyeS0+e3JldmlzaW9ufX0pIHsKKwkJCXB1c2ggQHRtcCwgJGNvbW1pdDsKKwkJfQorCX0KKwlpZiAobXkgJGN1ciA9IDo6dmVyaWZ5X3JlZigkc2VsZi0+cmVmbmFtZS4nXjAnKSkgeworCQlwdXNoIEB0bXAsICRjdXI7CisJfQorCWlmIChteSAkaXBkID0gJHNlbGYtPntpbmplY3RfcGFyZW50c19kY29tbWl0fSkgeworCQlpZiAobXkgJGNvbW1pdCA9IGRlbGV0ZSAkaXBkLT57JGxvZ19lbnRyeS0+e3JldmlzaW9ufX0pIHsKKwkJCXB1c2ggQHRtcCwgQCRjb21taXQ7CisJCX0KKwl9CisJcHVzaCBAdG1wLCAkXyBmb3JlYWNoIChAeyRsb2dfZW50cnktPntwYXJlbnRzfX0sIEB0bXApOworCXdoaWxlIChteSAkcCA9IHNoaWZ0IEB0bXApIHsKKwkJbmV4dCBpZiAkc2VlbnskcH07CisJCSRzZWVueyRwfSA9IDE7CisJCXB1c2ggQHJldCwgJHA7CisJfQorCUByZXQ7Cit9CisKK3N1YiByZXdyaXRlX3Jvb3QgeworCW15ICgkc2VsZikgPSBAXzsKKwlyZXR1cm4gJHNlbGYtPnstcmV3cml0ZV9yb290fSBpZiBleGlzdHMgJHNlbGYtPnstcmV3cml0ZV9yb290fTsKKwlteSAkayA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0ucmV3cml0ZVJvb3QiOworCW15ICRyd3IgPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKHF3L2NvbmZpZyAtLWdldC8sICRrKSB9OworCWlmICgkcndyKSB7CisJCSRyd3IgPX4gcyMvKyQjIzsKKwkJaWYgKCRyd3IgIX4gbSNeW2EtelwrXSs6Ly8jKSB7CisJCQlkaWUgIiRyd3IgaXMgbm90IGEgdmFsaWQgVVJMIChrZXk6ICRrKVxuIjsKKwkJfQorCX0KKwkkc2VsZi0+ey1yZXdyaXRlX3Jvb3R9ID0gJHJ3cjsKK30KKworc3ViIHJld3JpdGVfdXVpZCB7CisJbXkgKCRzZWxmKSA9IEBfOworCXJldHVybiAkc2VsZi0+ey1yZXdyaXRlX3V1aWR9IGlmIGV4aXN0cyAkc2VsZi0+ey1yZXdyaXRlX3V1aWR9OworCW15ICRrID0gInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfS5yZXdyaXRlVVVJRCI7CisJbXkgJHJ3aWQgPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKHF3L2NvbmZpZyAtLWdldC8sICRrKSB9OworCWlmICgkcndpZCkgeworCQkkcndpZCA9fiBzIy8rJCMjOworCQlpZiAoJHJ3aWQgIX4gbSNeW2EtZjAtOV17OH0tKD86W2EtZjAtOV17NH0tKXszfVthLWYwLTldezEyfSQjKSB7CisJCQlkaWUgIiRyd2lkIGlzIG5vdCBhIHZhbGlkIFVVSUQgKGtleTogJGspXG4iOworCQl9CisJfQorCSRzZWxmLT57LXJld3JpdGVfdXVpZH0gPSAkcndpZDsKK30KKworc3ViIG1ldGFkYXRhX3VybCB7CisJbXkgKCRzZWxmKSA9IEBfOworCW15ICR1cmwgPSAkc2VsZi0+cmV3cml0ZV9yb290IHx8ICRzZWxmLT51cmw7CisJcmV0dXJuIGNhbm9uaWNhbGl6ZV91cmwoIGFkZF9wYXRoX3RvX3VybCggJHVybCwgJHNlbGYtPnBhdGggKSApOworfQorCitzdWIgZnVsbF91cmwgeworCW15ICgkc2VsZikgPSBAXzsKKwlyZXR1cm4gY2Fub25pY2FsaXplX3VybCggYWRkX3BhdGhfdG9fdXJsKCAkc2VsZi0+dXJsLCAkc2VsZi0+cGF0aCApICk7Cit9CisKK3N1YiBmdWxsX3B1c2h1cmwgeworCW15ICgkc2VsZikgPSBAXzsKKwlpZiAoJHNlbGYtPntwdXNodXJsfSkgeworCQlyZXR1cm4gY2Fub25pY2FsaXplX3VybCggYWRkX3BhdGhfdG9fdXJsKCAkc2VsZi0+e3B1c2h1cmx9LCAkc2VsZi0+cGF0aCApICk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICRzZWxmLT5mdWxsX3VybDsKKwl9Cit9CisKK3N1YiBzZXRfY29tbWl0X2hlYWRlcl9lbnYgeworCW15ICgkbG9nX2VudHJ5KSA9IEBfOworCW15ICVlbnY7CisJZm9yZWFjaCBteSAkbmVkIChxdy9OQU1FIEVNQUlMIERBVEUvKSB7CisJCWZvcmVhY2ggbXkgJGFjIChxdy9BVVRIT1IgQ09NTUlUVEVSLykgeworCQkJJGVudnsiR0lUXyR7YWN9XyR7bmVkfSJ9ID0gJEVOVnsiR0lUXyR7YWN9XyR7bmVkfSJ9OworCQl9CisJfQorCisJJEVOVntHSVRfQVVUSE9SX05BTUV9ID0gJGxvZ19lbnRyeS0+e25hbWV9OworCSRFTlZ7R0lUX0FVVEhPUl9FTUFJTH0gPSAkbG9nX2VudHJ5LT57ZW1haWx9OworCSRFTlZ7R0lUX0FVVEhPUl9EQVRFfSA9ICRFTlZ7R0lUX0NPTU1JVFRFUl9EQVRFfSA9ICRsb2dfZW50cnktPntkYXRlfTsKKworCSRFTlZ7R0lUX0NPTU1JVFRFUl9OQU1FfSA9IChkZWZpbmVkICRsb2dfZW50cnktPntjb21taXRfbmFtZX0pCisJCQkJCQk/ICRsb2dfZW50cnktPntjb21taXRfbmFtZX0KKwkJCQkJCTogJGxvZ19lbnRyeS0+e25hbWV9OworCSRFTlZ7R0lUX0NPTU1JVFRFUl9FTUFJTH0gPSAoZGVmaW5lZCAkbG9nX2VudHJ5LT57Y29tbWl0X2VtYWlsfSkKKwkJCQkJCT8gJGxvZ19lbnRyeS0+e2NvbW1pdF9lbWFpbH0KKwkJCQkJCTogJGxvZ19lbnRyeS0+e2VtYWlsfTsKKwlcJWVudjsKK30KKworc3ViIHJlc3RvcmVfY29tbWl0X2hlYWRlcl9lbnYgeworCW15ICgkZW52KSA9IEBfOworCWZvcmVhY2ggbXkgJG5lZCAocXcvTkFNRSBFTUFJTCBEQVRFLykgeworCQlmb3JlYWNoIG15ICRhYyAocXcvQVVUSE9SIENPTU1JVFRFUi8pIHsKKwkJCW15ICRrID0gIkdJVF8ke2FjfV8ke25lZH0iOworCQkJaWYgKGRlZmluZWQgJGVudi0+eyRrfSkgeworCQkJCSRFTlZ7JGt9ID0gJGVudi0+eyRrfTsKKwkJCX0gZWxzZSB7CisJCQkJZGVsZXRlICRFTlZ7JGt9OworCQkJfQorCQl9CisJfQorfQorCitzdWIgZ2MgeworCWNvbW1hbmRfbm9pc3koJ2djJywgJy0tYXV0bycpOworfTsKKworc3ViIGRvX2dpdF9jb21taXQgeworCW15ICgkc2VsZiwgJGxvZ19lbnRyeSkgPSBAXzsKKwlteSAkbHIgPSAkc2VsZi0+bGFzdF9yZXY7CisJaWYgKGRlZmluZWQgJGxyICYmICRsciA+PSAkbG9nX2VudHJ5LT57cmV2aXNpb259KSB7CisJCWRpZSAiTGFzdCBmZXRjaGVkIHJldmlzaW9uIG9mICIsICRzZWxmLT5yZWZuYW1lLAorCQkgICAgIiB3YXMgciRsciwgYnV0IHdlIGFyZSBhYm91dCB0byBmZXRjaDogIiwKKwkJICAgICJyJGxvZ19lbnRyeS0+e3JldmlzaW9ufSFcbiI7CisJfQorCWlmIChteSAkYyA9ICRzZWxmLT5yZXZfbWFwX2dldCgkbG9nX2VudHJ5LT57cmV2aXNpb259KSkgeworCQljcm9hayAiJGxvZ19lbnRyeS0+e3JldmlzaW9ufSA9ICRjIGFscmVhZHkgZXhpc3RzISAiLAorCQkgICAgICAiV2h5IGFyZSB3ZSByZWZldGNoaW5nIGl0P1xuIjsKKwl9CisJbXkgJG9sZF9lbnYgPSBzZXRfY29tbWl0X2hlYWRlcl9lbnYoJGxvZ19lbnRyeSk7CisJbXkgJHRyZWUgPSAkbG9nX2VudHJ5LT57dHJlZX07CisJaWYgKCFkZWZpbmVkICR0cmVlKSB7CisJCSR0cmVlID0gJHNlbGYtPnRtcF9pbmRleF9kbyhzdWIgeworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9vbmVsaW5lKCd3cml0ZS10cmVlJykgfSk7CisJfQorCWRpZSAiVHJlZSBpcyBub3QgYSB2YWxpZCBzaGExOiAkdHJlZVxuIiBpZiAkdHJlZSAhfiAvXiQ6OnNoYTEkL287CisKKwlteSBAZXhlYyA9ICgnZ2l0JywgJ2NvbW1pdC10cmVlJywgJHRyZWUpOworCWZvcmVhY2ggKCRzZWxmLT5nZXRfY29tbWl0X3BhcmVudHMoJGxvZ19lbnRyeSkpIHsKKwkJcHVzaCBAZXhlYywgJy1wJywgJF87CisJfQorCWRlZmluZWQobXkgJHBpZCA9IG9wZW4zKG15ICRtc2dfZmgsIG15ICRvdXRfZmgsICc+JlNUREVSUicsIEBleGVjKSkKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGNyb2FrICQhOworCWJpbm1vZGUgJG1zZ19maDsKKworCSMgd2UgYWx3YXlzIGdldCBVVEYtOCBmcm9tIFNWTiwgYnV0IHdlIG1heSB3YW50IG91ciBjb21taXRzIGluCisJIyBhIGRpZmZlcmVudCBlbmNvZGluZy4KKwlpZiAobXkgJGVuYyA9IEdpdDo6Y29uZmlnKCdpMThuLmNvbW1pdGVuY29kaW5nJykpIHsKKwkJcmVxdWlyZSBFbmNvZGU7CisJCUVuY29kZTo6ZnJvbV90bygkbG9nX2VudHJ5LT57bG9nfSwgJ1VURi04JywgJGVuYyk7CisJfQorCXByaW50ICRtc2dfZmggJGxvZ19lbnRyeS0+e2xvZ30gb3IgY3JvYWsgJCE7CisJcmVzdG9yZV9jb21taXRfaGVhZGVyX2Vudigkb2xkX2Vudik7CisJdW5sZXNzICgkc2VsZi0+bm9fbWV0YWRhdGEpIHsKKwkJcHJpbnQgJG1zZ19maCAiXG5naXQtc3ZuLWlkOiAkbG9nX2VudHJ5LT57bWV0YWRhdGF9XG4iCisJCSAgICAgICAgICAgICAgb3IgY3JvYWsgJCE7CisJfQorCSRtc2dfZmgtPmZsdXNoID09IDAgb3IgY3JvYWsgJCE7CisJY2xvc2UgJG1zZ19maCBvciBjcm9hayAkITsKKwljaG9tcChteSAkY29tbWl0ID0gZG8geyBsb2NhbCAkLzsgPCRvdXRfZmg+IH0pOworCWNsb3NlICRvdXRfZmggb3IgY3JvYWsgJCE7CisJd2FpdHBpZCAkcGlkLCAwOworCWNyb2FrICQ/IGlmICQ/OworCWlmICgkY29tbWl0ICF+IC9eJDo6c2hhMSQvbykgeworCQlkaWUgIkZhaWxlZCB0byBjb21taXQsIGludmFsaWQgc2hhMTogJGNvbW1pdFxuIjsKKwl9CisKKwkkc2VsZi0+cmV2X21hcF9zZXQoJGxvZ19lbnRyeS0+e3JldmlzaW9ufSwgJGNvbW1pdCwgMSk7CisKKwkkc2VsZi0+e2xhc3RfcmV2fSA9ICRsb2dfZW50cnktPntyZXZpc2lvbn07CisJJHNlbGYtPntsYXN0X2NvbW1pdH0gPSAkY29tbWl0OworCXByaW50ICJyJGxvZ19lbnRyeS0+e3JldmlzaW9ufSIgdW5sZXNzICQ6Ol9xID4gMTsKKwlpZiAoZGVmaW5lZCAkbG9nX2VudHJ5LT57c3ZtX3JldmlzaW9ufSkgeworCQkgcHJpbnQgIiAoXEAkbG9nX2VudHJ5LT57c3ZtX3JldmlzaW9ufSkiIHVubGVzcyAkOjpfcSA+IDE7CisJCSAkc2VsZi0+cmV2X21hcF9zZXQoJGxvZ19lbnRyeS0+e3N2bV9yZXZpc2lvbn0sICRjb21taXQsCisJCSAgICAgICAgICAgICAgICAgICAwLCAkc2VsZi0+c3ZtX3V1aWQpOworCX0KKwlwcmludCAiID0gJGNvbW1pdCAoJHNlbGYtPntyZWZfaWR9KVxuIiB1bmxlc3MgJDo6X3EgPiAxOworCWlmICgtLSRfZ2NfbnIgPT0gMCkgeworCQkkX2djX25yID0gJF9nY19wZXJpb2Q7CisJCWdjKCk7CisJfQorCXJldHVybiAkY29tbWl0OworfQorCitzdWIgbWF0Y2hfcGF0aHMgeworCW15ICgkc2VsZiwgJHBhdGhzLCAkcikgPSBAXzsKKwlyZXR1cm4gMSBpZiAkc2VsZi0+cGF0aCBlcSAnJzsKKwlpZiAobXkgJHBhdGggPSAkcGF0aHMtPnsiLyIuJHNlbGYtPnBhdGh9KSB7CisJCXJldHVybiAoJHBhdGgtPnthY3Rpb259IGVxICdEJykgPyAwIDogMTsKKwl9CisJJHNlbGYtPntwYXRoX3JlZ2V4fSB8fD0gcXJ7Xi9cUUB7WyRzZWxmLT5wYXRoXX1cRS99OworCWlmIChncmVwIC8kc2VsZi0+e3BhdGhfcmVnZXh9Lywga2V5cyAlJHBhdGhzKSB7CisJCXJldHVybiAxOworCX0KKwlteSAkYyA9ICcnOworCWZvcmVhY2ggKHNwbGl0IG0jLyMsICRzZWxmLT5wYXRoKSB7CisJCSRjIC49ICIvJF8iOworCQluZXh0IHVubGVzcyAoJHBhdGhzLT57JGN9ICYmCisJCSAgICAgICAgICAgICAoJHBhdGhzLT57JGN9LT57YWN0aW9ufSA9fiAvXltBUl0kLykpOworCQlpZiAoJHNlbGYtPnJhLT5jaGVja19wYXRoKCRzZWxmLT5wYXRoLCAkcikgPT0KKwkJICAgICRTVk46Ok5vZGU6OmRpcikgeworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N1YiBmaW5kX3BhcmVudF9icmFuY2ggeworCW15ICgkc2VsZiwgJHBhdGhzLCAkcmV2KSA9IEBfOworCXJldHVybiB1bmRlZiB1bmxlc3MgJHNlbGYtPmZvbGxvd19wYXJlbnQ7CisJdW5sZXNzIChkZWZpbmVkICRwYXRocykgeworCQlteSAkZXJyX2hhbmRsZXIgPSAkU1ZOOjpFcnJvcjo6aGFuZGxlcjsKKwkJJFNWTjo6RXJyb3I6OmhhbmRsZXIgPSBcJkdpdDo6U1ZOOjpSYTo6c2tpcF91bmtub3duX3JldnM7CisJCSRzZWxmLT5yYS0+Z2V0X2xvZyhbJHNlbGYtPnBhdGhdLCAkcmV2LCAkcmV2LCAwLCAxLCAxLAorCQkJCSAgIHN1YiB7ICRwYXRocyA9ICRfWzBdIH0pOworCQkkU1ZOOjpFcnJvcjo6aGFuZGxlciA9ICRlcnJfaGFuZGxlcjsKKwl9CisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRwYXRoczsKKworCSMgbG9vayBmb3IgYSBwYXJlbnQgZnJvbSBhbm90aGVyIGJyYW5jaDoKKwlteSBAYl9wYXRoX2NvbXBvbmVudHMgPSBzcGxpdCBtIy8jLCAkc2VsZi0+cGF0aDsKKwlteSBAYV9wYXRoX2NvbXBvbmVudHM7CisJbXkgJGk7CisJd2hpbGUgKEBiX3BhdGhfY29tcG9uZW50cykgeworCQkkaSA9ICRwYXRocy0+eycvJy5qb2luKCcvJywgQGJfcGF0aF9jb21wb25lbnRzKX07CisJCWxhc3QgaWYgJGkgJiYgZGVmaW5lZCAkaS0+e2NvcHlmcm9tX3BhdGh9OworCQl1bnNoaWZ0KEBhX3BhdGhfY29tcG9uZW50cywgcG9wKEBiX3BhdGhfY29tcG9uZW50cykpOworCX0KKwlyZXR1cm4gdW5kZWYgdW5sZXNzIGRlZmluZWQgJGkgJiYgZGVmaW5lZCAkaS0+e2NvcHlmcm9tX3BhdGh9OworCW15ICRicmFuY2hfZnJvbSA9ICRpLT57Y29weWZyb21fcGF0aH07CisJaWYgKEBhX3BhdGhfY29tcG9uZW50cykgeworCQlwcmludCBTVERFUlIgImJyYW5jaF9mcm9tOiAkYnJhbmNoX2Zyb20gPT4gIjsKKwkJJGJyYW5jaF9mcm9tIC49ICcvJy5qb2luKCcvJywgQGFfcGF0aF9jb21wb25lbnRzKTsKKwkJcHJpbnQgU1RERVJSICRicmFuY2hfZnJvbSwgIlxuIjsKKwl9CisJbXkgJHIgPSAkaS0+e2NvcHlmcm9tX3Jldn07CisJbXkgJHJlcG9zX3Jvb3QgPSAkc2VsZi0+cmEtPntyZXBvc19yb290fTsKKwlteSAkdXJsID0gJHNlbGYtPnJhLT51cmw7CisJbXkgJG5ld191cmwgPSBjYW5vbmljYWxpemVfdXJsKCBhZGRfcGF0aF90b191cmwoICR1cmwsICRicmFuY2hfZnJvbSApICk7CisJcHJpbnQgU1RERVJSICAiRm91bmQgcG9zc2libGUgYnJhbmNoIHBvaW50OiAiLAorCSAgICAgICAgICAgICAgIiRuZXdfdXJsID0+ICIsICRzZWxmLT5mdWxsX3VybCwgIiwgJHJcbiIKKwkgICAgICAgICAgICAgIHVubGVzcyAkOjpfcSA+IDE7CisJJGJyYW5jaF9mcm9tID1+IHMjXi8jIzsKKwlteSAkZ3MgPSAkc2VsZi0+b3RoZXJfZ3MoJG5ld191cmwsICR1cmwsCisJCSAgICAgICAgICAgICAgICAgJGJyYW5jaF9mcm9tLCAkciwgJHNlbGYtPntyZWZfaWR9KTsKKwlteSAoJHIwLCAkcGFyZW50KSA9ICRncy0+ZmluZF9yZXZfYmVmb3JlKCRyLCAxKTsKKwl7CisJCW15ICgkYmFzZSwgJGhlYWQpOworCQlpZiAoIWRlZmluZWQgJHIwIHx8ICFkZWZpbmVkICRwYXJlbnQpIHsKKwkJCSgkYmFzZSwgJGhlYWQpID0gcGFyc2VfcmV2aXNpb25fYXJndW1lbnQoMCwgJHIpOworCQl9IGVsc2UgeworCQkJaWYgKCRyMCA8ICRyKSB7CisJCQkJJGdzLT5yYS0+Z2V0X2xvZyhbJGdzLT5wYXRoXSwgJHIwICsgMSwgJHIsIDEsCisJCQkJCTAsIDEsIHN1YiB7ICRiYXNlID0gJF9bMV0gLSAxIH0pOworCQkJfQorCQl9CisJCWlmIChkZWZpbmVkICRiYXNlICYmICRiYXNlIDw9ICRyKSB7CisJCQkkZ3MtPmZldGNoKCRiYXNlLCAkcik7CisJCX0KKwkJKCRyMCwgJHBhcmVudCkgPSAkZ3MtPmZpbmRfcmV2X2JlZm9yZSgkciwgMSk7CisJfQorCWlmIChkZWZpbmVkICRyMCAmJiBkZWZpbmVkICRwYXJlbnQpIHsKKwkJcHJpbnQgU1RERVJSICJGb3VuZCBicmFuY2ggcGFyZW50OiAoJHNlbGYtPntyZWZfaWR9KSAkcGFyZW50XG4iCisJCSAgICAgICAgICAgICB1bmxlc3MgJDo6X3EgPiAxOworCQlteSAkZWQ7CisJCWlmICgkc2VsZi0+cmEtPmNhbl9kb19zd2l0Y2gpIHsKKwkJCSRzZWxmLT5hc3NlcnRfaW5kZXhfY2xlYW4oJHBhcmVudCk7CisJCQlwcmludCBTVERFUlIgIkZvbGxvd2luZyBwYXJlbnQgd2l0aCBkb19zd2l0Y2hcbiIKKwkJCSAgICAgICAgICAgICB1bmxlc3MgJDo6X3EgPiAxOworCQkJIyBkb19zd2l0Y2ggd29ya3Mgd2l0aCBzdm4vdHJ1bmsgPj0gcjIyMzEyLCBidXQgdGhhdAorCQkJIyBpcyBub3QgaW5jbHVkZWQgd2l0aCBTVk4gMS40LjMgKHRoZSBsYXRlc3QgdmVyc2lvbgorCQkJIyBhdCB0aGUgbW9tZW50KSwgc28gd2UgY2FuJ3QgcmVseSBvbiBpdAorCQkJJHNlbGYtPntsYXN0X3Jldn0gPSAkcjA7CisJCQkkc2VsZi0+e2xhc3RfY29tbWl0fSA9ICRwYXJlbnQ7CisJCQkkZWQgPSBHaXQ6OlNWTjo6RmV0Y2hlci0+bmV3KCRzZWxmLCAkZ3MtPnBhdGgpOworCQkJJGdzLT5yYS0+Z3NfZG9fc3dpdGNoKCRyMCwgJHJldiwgJGdzLAorCQkJCQkgICAgICAkc2VsZi0+ZnVsbF91cmwsICRlZCkKKwkJCSAgb3IgZGllICJTVk4gY29ubmVjdGlvbiBmYWlsZWQgc29tZXdoZXJlLi4uXG4iOworCQl9IGVsc2lmICgkc2VsZi0+cmEtPnRyZWVzX21hdGNoKCRuZXdfdXJsLCAkcjAsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+ZnVsbF91cmwsICRyZXYpKSB7CisJCQlwcmludCBTVERFUlIgIlRyZWVzIG1hdGNoOlxuIiwKKwkJCSAgICAgICAgICAgICAiICAkbmV3X3VybFxAJHIwXG4iLAorCQkJICAgICAgICAgICAgICIgICR7XCRzZWxmLT5mdWxsX3VybH1cQCRyZXZcbiIsCisJCQkgICAgICAgICAgICAgIkZvbGxvd2luZyBwYXJlbnQgd2l0aCBubyBjaGFuZ2VzXG4iCisJCQkgICAgICAgICAgICAgdW5sZXNzICQ6Ol9xID4gMTsKKwkJCSRzZWxmLT50bXBfaW5kZXhfZG8oc3ViIHsKKwkJCSAgICBjb21tYW5kX25vaXN5KCdyZWFkLXRyZWUnLCAkcGFyZW50KTsKKwkJCX0pOworCQkJJHNlbGYtPntsYXN0X2NvbW1pdH0gPSAkcGFyZW50OworCQl9IGVsc2UgeworCQkJcHJpbnQgU1RERVJSICJGb2xsb3dpbmcgcGFyZW50IHdpdGggZG9fdXBkYXRlXG4iCisJCQkgICAgICAgICAgICAgdW5sZXNzICQ6Ol9xID4gMTsKKwkJCSRlZCA9IEdpdDo6U1ZOOjpGZXRjaGVyLT5uZXcoJHNlbGYpOworCQkJJHNlbGYtPnJhLT5nc19kb191cGRhdGUoJHJldiwgJHJldiwgJHNlbGYsICRlZCkKKwkJCSAgb3IgZGllICJTVk4gY29ubmVjdGlvbiBmYWlsZWQgc29tZXdoZXJlLi4uXG4iOworCQl9CisJCXByaW50IFNUREVSUiAiU3VjY2Vzc2Z1bGx5IGZvbGxvd2VkIHBhcmVudFxuIiB1bmxlc3MgJDo6X3EgPiAxOworCQlyZXR1cm4gJHNlbGYtPm1ha2VfbG9nX2VudHJ5KCRyZXYsIFskcGFyZW50XSwgJGVkLCAkcjAsICRicmFuY2hfZnJvbSk7CisJfQorCXJldHVybiB1bmRlZjsKK30KKworc3ViIGRvX2ZldGNoIHsKKwlteSAoJHNlbGYsICRwYXRocywgJHJldikgPSBAXzsKKwlteSAkZWQ7CisJbXkgKCRsYXN0X3JldiwgQHBhcmVudHMpOworCWlmIChteSAkbGMgPSAkc2VsZi0+bGFzdF9jb21taXQpIHsKKwkJIyB3ZSBjYW4gaGF2ZSBhIGJyYW5jaCB0aGF0IHdhcyBkZWxldGVkLCB0aGVuIHJlLWFkZGVkCisJCSMgdW5kZXIgdGhlIHNhbWUgbmFtZSBidXQgY29waWVkIGZyb20gYW5vdGhlciBwYXRoLCBpbgorCQkjIHdoaWNoIGNhc2Ugd2UnbGwgaGF2ZSBtdWx0aXBsZSBwYXJlbnRzICh3ZSBkb24ndAorCQkjIHdhbnQgdG8gYnJlYWsgdGhlIG9yaWdpbmFsIHJlZiBvciBsb3NlIGNvcHlwYXRoIGluZm8pOgorCQlpZiAobXkgJGxvZ19lbnRyeSA9ICRzZWxmLT5maW5kX3BhcmVudF9icmFuY2goJHBhdGhzLCAkcmV2KSkgeworCQkJcHVzaCBAeyRsb2dfZW50cnktPntwYXJlbnRzfX0sICRsYzsKKwkJCXJldHVybiAkbG9nX2VudHJ5OworCQl9CisJCSRlZCA9IEdpdDo6U1ZOOjpGZXRjaGVyLT5uZXcoJHNlbGYpOworCQkkbGFzdF9yZXYgPSAkc2VsZi0+e2xhc3RfcmV2fTsKKwkJJGVkLT57Y30gPSAkbGM7CisJCUBwYXJlbnRzID0gKCRsYyk7CisJfSBlbHNlIHsKKwkJJGxhc3RfcmV2ID0gJHJldjsKKwkJaWYgKG15ICRsb2dfZW50cnkgPSAkc2VsZi0+ZmluZF9wYXJlbnRfYnJhbmNoKCRwYXRocywgJHJldikpIHsKKwkJCXJldHVybiAkbG9nX2VudHJ5OworCQl9CisJCSRlZCA9IEdpdDo6U1ZOOjpGZXRjaGVyLT5uZXcoJHNlbGYpOworCX0KKwl1bmxlc3MgKCRzZWxmLT5yYS0+Z3NfZG9fdXBkYXRlKCRsYXN0X3JldiwgJHJldiwgJHNlbGYsICRlZCkpIHsKKwkJZGllICJTVk4gY29ubmVjdGlvbiBmYWlsZWQgc29tZXdoZXJlLi4uXG4iOworCX0KKwkkc2VsZi0+bWFrZV9sb2dfZW50cnkoJHJldiwgXEBwYXJlbnRzLCAkZWQsICRsYXN0X3JldiwgJHNlbGYtPnBhdGgpOworfQorCitzdWIgbWtlbXB0eWRpcnMgeworCW15ICgkc2VsZiwgJHIpID0gQF87CisKKwkjIGFkZC9yZW1vdmUvY29sbGVjdCBhIHBhdGhzIHRhYmxlCisJIworCSMgUGF0aHMgYXJlIHNwbGl0IGludG8gYSB0cmVlIG9mIG5vZGVzLCBzdG9yZWQgYXMgYSBoYXNoIG9mIGhhc2hlcy4KKwkjCisJIyBFYWNoIG5vZGUgY29udGFpbnMgYSAncGF0aCcgZW50cnkgZm9yIHRoZSBwYXRoIChpZiBhbnkpIGFzc29jaWF0ZWQKKwkjIHdpdGggdGhhdCBub2RlIGFuZCBhICdjaGlsZHJlbicgZW50cnkgZm9yIGFueSBub2RlcyB1bmRlciB0aGF0CisJIyBsb2NhdGlvbi4KKwkjCisJIyBSZW1vdmluZyBhIHBhdGggcmVxdWlyZXMgYSBoYXNoIGxvb2t1cCBmb3IgZWFjaCBjb21wb25lbnQgdGhlbgorCSMgZHJvcHBpbmcgdGhhdCBub2RlIChhbmQgYW55dGhpbmcgdW5kZXIgaXQpLCB3aGljaCBpcyBzdWJzdGFudGlhbGx5CisJIyBmYXN0ZXIgdGhhbiBhIGdyZXAgc2xpY2UgaW50byBhIHNpbmdsZSBoYXNoIG9mIHBhdGhzIGZvciBsYXJnZQorCSMgbnVtYmVycyBvZiBwYXRocy4KKwkjCisJIyBGb3IgYSBsYXJnZSAoMjAwSykgbnVtYmVyIG9mIGVtcHR5X2RpciBkaXJlY3RpdmVzIHRoaXMgcmVkdWNlcworCSMgc2Nhbm5pbmcgdGltZSB0byAzIHNlY29uZHMgdnMgMTAgbWludXRlcyBmb3IgZ3JlcCtkZWxldGUgb24gYSBzaW5nbGUKKwkjIGhhc2ggb2YgcGF0aHMuCisJc3ViIGFkZF9wYXRoIHsKKwkJbXkgKCRwYXRoc190YWJsZSwgJHBhdGgpID0gQF87CisJCW15ICRub2RlX3JlZjsKKworCQlmb3JlYWNoIG15ICR4IChzcGxpdCgnLycsICRwYXRoKSkgeworCQkJaWYgKCFleGlzdHMoJHBhdGhzX3RhYmxlLT57JHh9KSkgeworCQkJCSRwYXRoc190YWJsZS0+eyR4fSA9IHsgY2hpbGRyZW4gPT4ge30gfTsKKwkJCX0KKworCQkJJG5vZGVfcmVmID0gJHBhdGhzX3RhYmxlLT57JHh9OworCQkJJHBhdGhzX3RhYmxlID0gJHBhdGhzX3RhYmxlLT57JHh9LT57Y2hpbGRyZW59OworCQl9CisKKwkJJG5vZGVfcmVmLT57cGF0aH0gPSAkcGF0aDsKKwl9CisKKwlzdWIgcmVtb3ZlX3BhdGggeworCQlteSAoJHBhdGhzX3RhYmxlLCAkcGF0aCkgPSBAXzsKKwkJbXkgJG5vZGVzX3JlZjsKKwkJbXkgJG5vZGVfbmFtZTsKKworCQlmb3JlYWNoIG15ICR4IChzcGxpdCgnLycsICRwYXRoKSkgeworCQkJaWYgKCFleGlzdHMoJHBhdGhzX3RhYmxlLT57JHh9KSkgeworCQkJCXJldHVybjsKKwkJCX0KKworCQkJJG5vZGVzX3JlZiA9ICRwYXRoc190YWJsZTsKKwkJCSRub2RlX25hbWUgPSAkeDsKKworCQkJJHBhdGhzX3RhYmxlID0gJHBhdGhzX3RhYmxlLT57JHh9LT57Y2hpbGRyZW59OworCQl9CisKKwkJZGVsZXRlKCRub2Rlc19yZWYtPnskbm9kZV9uYW1lfSk7CisJfQorCisJc3ViIGNvbGxlY3RfcGF0aHMgeworCQlteSAoJHBhdGhzX3RhYmxlLCAkcGF0aHNfcmVmKSA9IEBfOworCisJCWZvcmVhY2ggbXkgJHYgKHZhbHVlcyAlJHBhdGhzX3RhYmxlKSB7CisJCQlteSAkcCA9ICR2LT57cGF0aH07CisJCQlteSAkYyA9ICR2LT57Y2hpbGRyZW59OworCisJCQljb2xsZWN0X3BhdGhzKCRjLCAkcGF0aHNfcmVmKTsKKworCQkJaWYgKGRlZmluZWQoJHApKSB7CisJCQkJcHVzaChAJHBhdGhzX3JlZiwgJHApOworCQkJfQorCQl9CisJfQorCisJc3ViIHNjYW4geworCQlteSAoJHIsICRwYXRoc190YWJsZSwgJGxpbmUpID0gQF87CisJCWlmIChkZWZpbmVkICRyICYmICRsaW5lID1+IC9ecihcZCspJC8pIHsKKwkJCXJldHVybiAwIGlmICQxID4gJHI7CisJCX0gZWxzaWYgKCRsaW5lID1+IC9eICBcK2VtcHR5X2RpcjogKC4rKSQvKSB7CisJCQlhZGRfcGF0aCgkcGF0aHNfdGFibGUsICQxKTsKKwkJfSBlbHNpZiAoJGxpbmUgPX4gL14gIFwtZW1wdHlfZGlyOiAoLispJC8pIHsKKwkJCXJlbW92ZV9wYXRoKCRwYXRoc190YWJsZSwgJDEpOworCQl9CisJCTE7ICMgY29udGludWUKKwl9OworCisJbXkgQGVtcHR5X2RpcnM7CisJbXkgJXBhdGhzX3RhYmxlOworCisJbXkgJGd6X2ZpbGUgPSAiJHNlbGYtPntkaXJ9L3VuaGFuZGxlZC5sb2cuZ3oiOworCWlmICgtZiAkZ3pfZmlsZSkgeworCQlpZiAoIWNhbl9jb21wcmVzcygpKSB7CisJCQl3YXJuICJDb21wcmVzczo6WmxpYiBjb3VsZCBub3QgYmUgZm91bmQ7ICIsCisJCQkgICAgICJlbXB0eSBkaXJlY3RvcmllcyBpbiAkZ3pfZmlsZSB3aWxsIG5vdCBiZSByZWFkXG4iOworCQl9IGVsc2UgeworCQkJbXkgJGd6ID0gQ29tcHJlc3M6OlpsaWI6Omd6b3BlbigkZ3pfZmlsZSwgInJiIikgb3IKKwkJCQlkaWUgIlVuYWJsZSB0byBvcGVuICRnel9maWxlOiAkIVxuIjsKKwkJCW15ICRsaW5lOworCQkJd2hpbGUgKCRnei0+Z3pyZWFkbGluZSgkbGluZSkgPiAwKSB7CisJCQkJc2NhbigkciwgXCVwYXRoc190YWJsZSwgJGxpbmUpIG9yIGxhc3Q7CisJCQl9CisJCQkkZ3otPmd6Y2xvc2U7CisJCX0KKwl9CisKKwlpZiAob3BlbiBteSAkZmgsICc8JywgIiRzZWxmLT57ZGlyfS91bmhhbmRsZWQubG9nIikgeworCQliaW5tb2RlICRmaCBvciBjcm9hayAiYmlubW9kZTogJCEiOworCQl3aGlsZSAoPCRmaD4pIHsKKwkJCXNjYW4oJHIsIFwlcGF0aHNfdGFibGUsICRfKSBvciBsYXN0OworCQl9CisJCWNsb3NlICRmaDsKKwl9CisKKwljb2xsZWN0X3BhdGhzKFwlcGF0aHNfdGFibGUsIFxAZW1wdHlfZGlycyk7CisJbXkgJHN0cmlwID0gcXIvXEFcUUB7WyRzZWxmLT5wYXRoXX1cRSg/OlwvfCQpLzsKKwlmb3JlYWNoIG15ICRkIChzb3J0IEBlbXB0eV9kaXJzKSB7CisJCSRkID0gdXJpX2RlY29kZSgkZCk7CisJCSRkID1+IHMvJHN0cmlwLy87CisJCW5leHQgdW5sZXNzIGxlbmd0aCgkZCk7CisJCW5leHQgaWYgLWQgJGQ7CisJCWlmICgtZSAkZCkgeworCQkJd2FybiAiJGQgZXhpc3RzIGJ1dCBpcyBub3QgYSBkaXJlY3RvcnlcbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiY3JlYXRpbmcgZW1wdHkgZGlyZWN0b3J5OiAkZFxuIjsKKwkJCW1rcGF0aChbJGRdKTsKKwkJfQorCX0KK30KKworc3ViIGdldF91bnRyYWNrZWQgeworCW15ICgkc2VsZiwgJGVkKSA9IEBfOworCW15IEBvdXQ7CisJbXkgJGggPSAkZWQtPntlbXB0eX07CisJZm9yZWFjaCAoc29ydCBrZXlzICUkaCkgeworCQlteSAkYWN0ID0gJGgtPnskX30gPyAnK2VtcHR5X2RpcicgOiAnLWVtcHR5X2Rpcic7CisJCXB1c2ggQG91dCwgIiAgJGFjdDogIiAuIHVyaV9lbmNvZGUoJF8pOworCQl3YXJuICJXOiAkYWN0OiAkX1xuIjsKKwl9CisJZm9yZWFjaCBteSAkdCAocXcvZGlyX3Byb3AgZmlsZV9wcm9wLykgeworCQkkaCA9ICRlZC0+eyR0fSBvciBuZXh0OworCQlmb3JlYWNoIG15ICRwYXRoIChzb3J0IGtleXMgJSRoKSB7CisJCQlteSAkcHBhdGggPSAkcGF0aCBlcSAnJyA/ICcuJyA6ICRwYXRoOworCQkJZm9yZWFjaCBteSAkcHJvcCAoc29ydCBrZXlzICV7JGgtPnskcGF0aH19KSB7CisJCQkJbmV4dCBpZiAkU0tJUF9QUk9QeyRwcm9wfTsKKwkJCQlteSAkdiA9ICRoLT57JHBhdGh9LT57JHByb3B9OworCQkJCW15ICR0X3BwYXRoX3Byb3AgPSAiJHQ6ICIgLgorCQkJCSAgICAgICAgICAgICAgICAgICAgdXJpX2VuY29kZSgkcHBhdGgpIC4gJyAnIC4KKwkJCQkgICAgICAgICAgICAgICAgICAgIHVyaV9lbmNvZGUoJHByb3ApOworCQkJCWlmIChkZWZpbmVkICR2KSB7CisJCQkJCXB1c2ggQG91dCwgIiAgKyR0X3BwYXRoX3Byb3AgIiAuCisJCQkJCSAgICAgICAgICAgdXJpX2VuY29kZSgkdik7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHVzaCBAb3V0LCAiICAtJHRfcHBhdGhfcHJvcCI7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWZvcmVhY2ggbXkgJHQgKHF3L2Fic2VudF9maWxlIGFic2VudF9kaXJlY3RvcnkvKSB7CisJCSRoID0gJGVkLT57JHR9IG9yIG5leHQ7CisJCWZvcmVhY2ggbXkgJHBhcmVudCAoc29ydCBrZXlzICUkaCkgeworCQkJZm9yZWFjaCBteSAkcGF0aCAoc29ydCBAeyRoLT57JHBhcmVudH19KSB7CisJCQkJcHVzaCBAb3V0LCAiICAkdDogIiAuCisJCQkJICAgICAgICAgICB1cmlfZW5jb2RlKCIkcGFyZW50LyRwYXRoIik7CisJCQkJd2FybiAiVzogJHQ6ICRwYXJlbnQvJHBhdGggIiwKKwkJCQkgICAgICJJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnM/XG4iOworCQkJfQorCQl9CisJfQorCVxAb3V0OworfQorCisjIHBhcnNlX3N2bl9kYXRlKERBVEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEdpdmVuIGEgZGF0ZSAoaW4gVVRDKSBmcm9tIFN1YnZlcnNpb24sIHJldHVybiBhIHN0cmluZyBpbiB0aGUgZm9ybWF0CisjICI8VFogT2Zmc2V0PiA8bG9jYWwgZGF0ZS90aW1lPiIgdGhhdCBHaXQgd2lsbCB1c2UuCisjCisjIEJ5IGRlZmF1bHQgdGhlIHBhcnNlZCBkYXRlIHdpbGwgYmUgaW4gVVRDOyBpZiAkR2l0OjpTVk46Ol9sb2NhbHRpbWUKKyMgaXMgdHJ1ZSB3ZSdsbCBjb252ZXJ0IGl0IHRvIHRoZSBsb2NhbCB0aW1lem9uZSBpbnN0ZWFkLgorc3ViIHBhcnNlX3N2bl9kYXRlIHsKKwlteSAkZGF0ZSA9IHNoaWZ0IHx8IHJldHVybiAnKzAwMDAgMTk3MC0wMS0wMSAwMDowMDowMCc7CisJbXkgKCRZLCRtLCRkLCRILCRNLCRTKSA9ICgkZGF0ZSA9fiAvXihcZHs0fSlcLShcZFxkKVwtKFxkXGQpVAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcZFxkPylcOihcZFxkKVw6KFxkXGQpXC5cZCpaJC94KSBvcgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyb2FrICJVbmFibGUgdG8gcGFyc2UgZGF0ZTogJGRhdGVcbiI7CisJbXkgJHBhcnNlZF9kYXRlOyAgICAjIFNldCBuZXh0LgorCisJaWYgKCRHaXQ6OlNWTjo6X2xvY2FsdGltZSkgeworCQkjIFRyYW5zbGF0ZSB0aGUgU3VidmVyc2lvbiBkYXRldGltZSB0byBhbiBlcG9jaCB0aW1lLgorCQkjIEJlZ2luIGJ5IHN3aXRjaGluZyBvdXJzZWx2ZXMgdG8gJGRhdGUncyB0aW1lem9uZSwgVVRDLgorCQlteSAkb2xkX2Vudl9UWiA9ICRFTlZ7VFp9OworCQkkRU5We1RafSA9ICdVVEMnOworCisJCW15ICRlcG9jaF9pbl9VVEMgPQorCQkgICAgVGltZTo6TG9jYWw6OnRpbWVsb2NhbCgkUywgJE0sICRILCAkZCwgJG0gLSAxLCAkWSk7CisKKwkJIyBEZXRlcm1pbmUgb3VyIGxvY2FsIHRpbWV6b25lIChpbmNsdWRpbmcgRFNUKSBhdCB0aGUKKwkJIyB0aW1lIG9mICRlcG9jaF9pbl9VVEMuICAkR2l0OjpTVk46OkxvZzo6VFogc3RvcmVkIHRoZQorCQkjIHZhbHVlIG9mIFRaLCBpZiBhbnksIGF0IHRoZSB0aW1lIHdlIHdlcmUgcnVuLgorCQlpZiAoZGVmaW5lZCAkR2l0OjpTVk46OkxvZzo6VFopIHsKKwkJCSRFTlZ7VFp9ID0gJEdpdDo6U1ZOOjpMb2c6OlRaOworCQl9IGVsc2UgeworCQkJZGVsZXRlICRFTlZ7VFp9OworCQl9CisKKwkJbXkgJG91cl9UWiA9IGdldF90el9vZmZzZXQoJGVwb2NoX2luX1VUQyk7CisKKwkJIyBUaGlzIGNvbnZlcnRzICRlcG9jaF9pbl9VVEMgaW50byBvdXIgbG9jYWwgdGltZXpvbmUuCisJCW15ICgkc2VjLCAkbWluLCAkaG91ciwgJG1kYXksICRtb24sICR5ZWFyLAorCQkgICAgJHdkYXksICR5ZGF5LCAkaXNkc3QpID0gbG9jYWx0aW1lKCRlcG9jaF9pbl9VVEMpOworCisJCSRwYXJzZWRfZGF0ZSA9IHNwcmludGYoJyVzICUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkJywKKwkJCQkgICAgICAgJG91cl9UWiwgJHllYXIgKyAxOTAwLCAkbW9uICsgMSwKKwkJCQkgICAgICAgJG1kYXksICRob3VyLCAkbWluLCAkc2VjKTsKKworCQkjIFJlc2V0IHVzIHRvIHRoZSB0aW1lem9uZSBpbiBlZmZlY3Qgd2hlbiB3ZSBlbnRlcmVkCisJCSMgdGhpcyByb3V0aW5lLgorCQlpZiAoZGVmaW5lZCAkb2xkX2Vudl9UWikgeworCQkJJEVOVntUWn0gPSAkb2xkX2Vudl9UWjsKKwkJfSBlbHNlIHsKKwkJCWRlbGV0ZSAkRU5We1RafTsKKwkJfQorCX0gZWxzZSB7CisJCSRwYXJzZWRfZGF0ZSA9ICIrMDAwMCAkWS0kbS0kZCAkSDokTTokUyI7CisJfQorCisJcmV0dXJuICRwYXJzZWRfZGF0ZTsKK30KKworc3ViIG90aGVyX2dzIHsKKwlteSAoJHNlbGYsICRuZXdfdXJsLCAkdXJsLAorCSAgICAkYnJhbmNoX2Zyb20sICRyLCAkb2xkX3JlZl9pZCkgPSBAXzsKKwlteSAkZ3MgPSBHaXQ6OlNWTi0+ZmluZF9ieV91cmwoJG5ld191cmwsICR1cmwsICRicmFuY2hfZnJvbSk7CisJdW5sZXNzICgkZ3MpIHsKKwkJbXkgJHJlZl9pZCA9ICRvbGRfcmVmX2lkOworCQkkcmVmX2lkID1+IHMvXEBcZCstKiQvLzsKKwkJJHJlZl9pZCAuPSAiXEAkciI7CisJCSMganVzdCBncm93IGEgdGFpbCBpZiB3ZSdyZSBub3QgdW5pcXVlIGVub3VnaCA6eAorCQkkcmVmX2lkIC49ICctJyB3aGlsZSBmaW5kX3JlZigkcmVmX2lkKTsKKwkJbXkgKCR1LCAkcCwgJHJlcG9faWQpID0gKCRuZXdfdXJsLCAnJywgJHJlZl9pZCk7CisJCWlmICgkdSA9fiBzI15cUSR1cmxcRSgvfCQpIyMpIHsKKwkJCSRwID0gJHU7CisJCQkkdSA9ICR1cmw7CisJCQkkcmVwb19pZCA9ICRzZWxmLT57cmVwb19pZH07CisJCX0KKwkJd2hpbGUgKDEpIHsKKwkJCSMgSXQgaXMgcG9zc2libGUgdG8gdGFnIHR3byBkaWZmZXJlbnQgc3ViZGlyZWN0b3JpZXMgYXQKKwkJCSMgdGhlIHNhbWUgcmV2aXNpb24uICBJZiB0aGUgdXJsIGZvciBhbiBleGlzdGluZyByZWYKKwkJCSMgZG9lcyBub3QgbWF0Y2gsIHdlIG11c3QgZWl0aGVyIGZpbmQgYSByZWYgd2l0aCBhCisJCQkjIG1hdGNoaW5nIHVybCBvciBjcmVhdGUgYSBuZXcgcmVmIGJ5IGdyb3dpbmcgYSB0YWlsLgorCQkJJGdzID0gR2l0OjpTVk4tPmluaXQoJHUsICRwLCAkcmVwb19pZCwgJHJlZl9pZCwgMSk7CisJCQlteSAodW5kZWYsICRtYXhfY29tbWl0KSA9ICRncy0+cmV2X21hcF9tYXgoMSk7CisJCQlsYXN0IGlmICghJG1heF9jb21taXQpOworCQkJbXkgKCR1cmwpID0gOjpjbXRfbWV0YWRhdGEoJG1heF9jb21taXQpOworCQkJbGFzdCBpZiAoJHVybCBlcSAkZ3MtPm1ldGFkYXRhX3VybCk7CisJCQkkcmVmX2lkIC49ICctJzsKKwkJfQorCQlwcmludCBTVERFUlIgIkluaXRpYWxpemluZyBwYXJlbnQ6ICRyZWZfaWRcbiIgdW5sZXNzICQ6Ol9xID4gMTsKKwl9CisJJGdzCit9CisKK3N1YiBjYWxsX2F1dGhvcnNfcHJvZyB7CisJbXkgKCRvcmlnX2F1dGhvcikgPSBAXzsKKwkkb3JpZ19hdXRob3IgPSBjb21tYW5kX29uZWxpbmUoJ3Jldi1wYXJzZScsICctLXNxLXF1b3RlJywgJG9yaWdfYXV0aG9yKTsKKwlteSAkYXV0aG9yID0gYCQ6Ol9hdXRob3JzX3Byb2cgJG9yaWdfYXV0aG9yYDsKKwlpZiAoJD8gIT0gMCkgeworCQlkaWUgIiQ6Ol9hdXRob3JzX3Byb2cgZmFpbGVkIHdpdGggZXhpdCBjb2RlICQ/XG4iCisJfQorCWlmICgkYXV0aG9yID1+IC9eXHMqKC4rPylccyo8KC4qKT5ccyokLykgeworCQlteSAoJG5hbWUsICRlbWFpbCkgPSAoJDEsICQyKTsKKwkJcmV0dXJuIFskbmFtZSwgJGVtYWlsXTsKKwl9IGVsc2UgeworCQlkaWUgIkF1dGhvcjogJG9yaWdfYXV0aG9yOiAkOjpfYXV0aG9yc19wcm9nIHJldHVybmVkICIKKwkJCS4gImludmFsaWQgYXV0aG9yIGZvcm1hdDogJGF1dGhvclxuIjsKKwl9Cit9CisKK3N1YiBjaGVja19hdXRob3IgeworCW15ICgkYXV0aG9yKSA9IEBfOworCWlmIChkZWZpbmVkICRhdXRob3IpIHsKKwkJJGF1dGhvciA9fiBzL15ccysvL2c7CisJCSRhdXRob3IgPX4gcy9ccyskLy9nOworCX0KKwlpZiAoIWRlZmluZWQgJGF1dGhvciB8fCBsZW5ndGggJGF1dGhvciA9PSAwKSB7CisJCSRhdXRob3IgPSAnKG5vIGF1dGhvciknOworCX0KKwlpZiAoIWRlZmluZWQgJDo6dXNlcnN7JGF1dGhvcn0pIHsKKwkJaWYgKGRlZmluZWQgJDo6X2F1dGhvcnNfcHJvZykgeworCQkJJDo6dXNlcnN7JGF1dGhvcn0gPSBjYWxsX2F1dGhvcnNfcHJvZygkYXV0aG9yKTsKKwkJfSBlbHNpZiAoZGVmaW5lZCAkOjpfYXV0aG9ycykgeworCQkJZGllICJBdXRob3I6ICRhdXRob3Igbm90IGRlZmluZWQgaW4gJDo6X2F1dGhvcnMgZmlsZVxuIjsKKwkJfQorCX0KKwkkYXV0aG9yOworfQorCitzdWIgZmluZF9leHRyYV9zdmtfcGFyZW50cyB7CisJbXkgKCRzZWxmLCAkdGlja2V0cywgJHBhcmVudHMpID0gQF87CisJIyBhaGEhICBzdms6bWVyZ2UgcHJvcGVydHkgY2hhbmdlZC4uLgorCW15IEB0aWNrZXRzID0gc3BsaXQgIlxuIiwgJHRpY2tldHM7CisJbXkgQGtub3duX3BhcmVudHM7CisJZm9yIG15ICR0aWNrZXQgKCBAdGlja2V0cyApIHsKKwkJbXkgKCR1dWlkLCAkcGF0aCwgJHJldikgPSBzcGxpdCAvOi8sICR0aWNrZXQ7CisJCWlmICggJHV1aWQgZXEgJHNlbGYtPnJhX3V1aWQgKSB7CisJCQlteSAkcmVwb3Nfcm9vdCA9ICRzZWxmLT51cmw7CisJCQlteSAkYnJhbmNoX2Zyb20gPSAkcGF0aDsKKwkJCSRicmFuY2hfZnJvbSA9fiBze14vfXt9OworCQkJbXkgJGdzID0gJHNlbGYtPm90aGVyX2dzKGFkZF9wYXRoX3RvX3VybCggJHJlcG9zX3Jvb3QsICRicmFuY2hfZnJvbSApLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICRyZXBvc19yb290LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICRicmFuY2hfZnJvbSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAkcmV2LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT57cmVmX2lkfSk7CisJCQlpZiAoIG15ICRjb21taXQgPSAkZ3MtPnJldl9tYXBfZ2V0KCRyZXYsICR1dWlkKSApIHsKKwkJCQkjIHdhaGV5ISAgd2UgZm91bmQgaXQsIGJ1dCBpdCBtaWdodCBiZQorCQkJCSMgYW4gb2xkIG9uZSAoISkKKwkJCQlwdXNoIEBrbm93bl9wYXJlbnRzLCBbICRyZXYsICRjb21taXQgXTsKKwkJCX0KKwkJfQorCX0KKwkjIE9yZGVyaW5nIG1hdHRlcnM7IGhpZ2hlc3QtbnVtYmVyZWQgY29tbWl0IG1lcmdlIHRpY2tldHMKKwkjIGZpcnN0LCBhcyB0aGV5IG1heSBhY2NvdW50IGZvciBsYXRlciBtZXJnZSB0aWNrZXQgYWRkaXRpb25zCisJIyBvciBjaGFuZ2VzLgorCUBrbm93bl9wYXJlbnRzID0gbWFwIHskXy0+WzFdfSBzb3J0IHskYi0+WzBdIDw9PiAkYS0+WzBdfSBAa25vd25fcGFyZW50czsKKwlmb3IgbXkgJHBhcmVudCAoIEBrbm93bl9wYXJlbnRzICkgeworCQlteSBAY21kID0gKCdyZXYtbGlzdCcsICRwYXJlbnQsIG1hcCB7ICJeJF8iIH0gQCRwYXJlbnRzICk7CisJCW15ICgkbXNnX2ZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoQGNtZCk7CisJCW15ICRuZXc7CisJCXdoaWxlICggPCRtc2dfZmg+ICkgeworCQkJJG5ldz0xO2xhc3Q7CisJCX0KKwkJY29tbWFuZF9jbG9zZV9waXBlKCRtc2dfZmgsICRjdHgpOworCQlpZiAoICRuZXcgKSB7CisJCQlwcmludCBTVERFUlIKKwkJCSAgICAiRm91bmQgbWVyZ2UgcGFyZW50IChzdms6bWVyZ2UgdGlja2V0KTogJHBhcmVudFxuIjsKKwkJCXB1c2ggQCRwYXJlbnRzLCAkcGFyZW50OworCQl9CisJfQorfQorCitzdWIgbG9va3VwX3N2bl9tZXJnZSB7CisJbXkgJHV1aWQgPSBzaGlmdDsKKwlteSAkdXJsID0gc2hpZnQ7CisJbXkgJHNvdXJjZSA9IHNoaWZ0OworCW15ICRyZXZzID0gc2hpZnQ7CisKKwlteSAkcGF0aCA9ICRzb3VyY2U7CisJJHBhdGggPX4gc3teL317fTsKKwlteSAkZ3MgPSBHaXQ6OlNWTi0+ZmluZF9ieV91cmwoJHVybC4kc291cmNlLCAkdXJsLCAkcGF0aCk7CisJaWYgKCAhJGdzICkgeworCQl3YXJuICJDb3VsZG4ndCBmaW5kIHJldm1hcCBmb3IgJHVybCRzb3VyY2VcbiI7CisJCXJldHVybjsKKwl9CisJbXkgQHJhbmdlcyA9IHNwbGl0ICIsIiwgJHJldnM7CisJbXkgKCR0aXAsICR0aXBfY29tbWl0KTsKKwlteSBAbWVyZ2VkX2NvbW1pdF9yYW5nZXM7CisJIyBmaW5kIHRoZSB0aXAKKwlmb3IgbXkgJHJhbmdlICggQHJhbmdlcyApIHsKKwkJaWYgKCRyYW5nZSA9fiAvWypdJC8pIHsKKwkJCXdhcm4gIlc6IElnbm9yaW5nIHBhcnRpYWwgbWVyZ2UgaW4gc3ZuOm1lcmdlaW5mbyAiCisJCQkJLiJkaXJwcm9wOiAkc291cmNlOiRyYW5nZVxuIjsKKwkJCW5leHQ7CisJCX0KKwkJbXkgKCRib3R0b20sICR0b3ApID0gc3BsaXQgIi0iLCAkcmFuZ2U7CisJCSR0b3AgfHw9ICRib3R0b207CisJCW15ICRib3R0b21fY29tbWl0ID0gJGdzLT5maW5kX3Jldl9hZnRlciggJGJvdHRvbSwgMSwgJHRvcCApOworCQlteSAkdG9wX2NvbW1pdCA9ICRncy0+ZmluZF9yZXZfYmVmb3JlKCAkdG9wLCAxLCAkYm90dG9tICk7CisKKwkJdW5sZXNzICgkdG9wX2NvbW1pdCBhbmQgJGJvdHRvbV9jb21taXQpIHsKKwkJCXdhcm4gIlc6IHVua25vd24gcGF0aC9yZXYgaW4gc3ZuOm1lcmdlaW5mbyAiCisJCQkJLiJkaXJwcm9wOiAkc291cmNlOiRyYW5nZVxuIjsKKwkJCW5leHQ7CisJCX0KKworCQlpZiAoc2NhbGFyKGNvbW1hbmQoJ3Jldi1wYXJzZScsICIkYm90dG9tX2NvbW1pdF5AIikpKSB7CisJCQlwdXNoIEBtZXJnZWRfY29tbWl0X3JhbmdlcywKKwkJCSAgICAgIiRib3R0b21fY29tbWl0Xi4uJHRvcF9jb21taXQiOworCQl9IGVsc2UgeworCQkJcHVzaCBAbWVyZ2VkX2NvbW1pdF9yYW5nZXMsICIkdG9wX2NvbW1pdCI7CisJCX0KKworCQlpZiAoICFkZWZpbmVkICR0aXAgb3IgJHRvcCA+ICR0aXAgKSB7CisJCQkkdGlwID0gJHRvcDsKKwkJCSR0aXBfY29tbWl0ID0gJHRvcF9jb21taXQ7CisJCX0KKwl9CisJcmV0dXJuICgkdGlwX2NvbW1pdCwgQG1lcmdlZF9jb21taXRfcmFuZ2VzKTsKK30KKworc3ViIF9yZXZfbGlzdCB7CisJbXkgKCRtc2dfZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZSgKKwkJInJldi1saXN0IiwgQF8sCisJICAgICAgICk7CisJbXkgQHJ2OworCXdoaWxlICggPCRtc2dfZmg+ICkgeworCQljaG9tcDsKKwkJcHVzaCBAcnYsICRfOworCX0KKwljb21tYW5kX2Nsb3NlX3BpcGUoJG1zZ19maCwgJGN0eCk7CisJQHJ2OworfQorCitzdWIgY2hlY2tfY2hlcnJ5X3BpY2syIHsKKwlteSAkYmFzZSA9IHNoaWZ0OworCW15ICR0aXAgPSBzaGlmdDsKKwlteSAkcGFyZW50cyA9IHNoaWZ0OworCW15IEByYW5nZXMgPSBAXzsKKwlteSAlY29tbWl0cyA9IG1hcCB7ICRfID0+IDEgfQorCQlfcmV2X2xpc3QoIi0tbm8tbWVyZ2VzIiwgJHRpcCwgIi0tbm90IiwgJGJhc2UsIEAkcGFyZW50cywgIi0tIik7CisJZm9yIG15ICRyYW5nZSAoIEByYW5nZXMgKSB7CisJCWRlbGV0ZSBAY29tbWl0c3tfcmV2X2xpc3QoJHJhbmdlLCAiLS0iKX07CisJfQorCWZvciBteSAkY29tbWl0IChrZXlzICVjb21taXRzKSB7CisJCWlmIChoYXNfbm9fY2hhbmdlcygkY29tbWl0KSkgeworCQkJZGVsZXRlICRjb21taXRzeyRjb21taXR9OworCQl9CisJfQorCW15IEBrID0gKGtleXMgJWNvbW1pdHMpOworCXJldHVybiAoc2NhbGFyIEBrLCAka1swXSk7Cit9CisKK3N1YiBoYXNfbm9fY2hhbmdlcyB7CisJbXkgJGNvbW1pdCA9IHNoaWZ0OworCisJbXkgQHJldnMgPSBzcGxpdCAvIC8sIGNvbW1hbmRfb25lbGluZSgKKwkJcXcocmV2LWxpc3QgLS1wYXJlbnRzIC0xIC1tKSwgJGNvbW1pdCk7CisKKwkjIENvbW1pdHMgd2l0aCBubyBwYXJlbnRzLCBlLmcuIHRoZSBzdGFydCBvZiBhIHBhcnRpYWwgYnJhbmNoLAorCSMgaGF2ZSBjaGFuZ2VzIGJ5IGRlZmluaXRpb24uCisJcmV0dXJuIDEgaWYgKEByZXZzIDwgMik7CisKKwkjIENvbW1pdHMgd2l0aCBtdWx0aXBsZSBwYXJlbnRzLCBlLmcgYSBtZXJnZSwgaGF2ZSBubyBjaGFuZ2VzCisJIyBieSBkZWZpbml0aW9uLgorCXJldHVybiAwIGlmIChAcmV2cyA+IDIpOworCisJcmV0dXJuIChjb21tYW5kX29uZWxpbmUoInJldi1wYXJzZSIsICIkY29tbWl0Xnt0cmVlfSIpIGVxCisJCWNvbW1hbmRfb25lbGluZSgicmV2LXBhcnNlIiwgIiRjb21taXR+MV57dHJlZX0iKSk7Cit9CisKK3N1YiB0aWVfZm9yX3BlcnNpc3RlbnRfbWVtb2l6YXRpb24geworCW15ICRoYXNoID0gc2hpZnQ7CisJbXkgJHBhdGggPSBzaGlmdDsKKworCXVubGVzcyAoJG1lbW9fYmFja2VuZCkgeworCQlpZiAoZXZhbCB7IHJlcXVpcmUgR2l0OjpTVk46Ok1lbW9pemU6OllBTUw7IDF9KSB7CisJCQkkbWVtb19iYWNrZW5kID0gMTsKKwkJfSBlbHNlIHsKKwkJCXJlcXVpcmUgTWVtb2l6ZTo6U3RvcmFibGU7CisJCQkkbWVtb19iYWNrZW5kID0gLTE7CisJCX0KKwl9CisKKwlpZiAoJG1lbW9fYmFja2VuZCA+IDApIHsKKwkJdGllICUkaGFzaCA9PiAnR2l0OjpTVk46Ok1lbW9pemU6OllBTUwnLCAiJHBhdGgueWFtbCI7CisJfSBlbHNlIHsKKwkJIyBmaXJzdCB2ZXJpZnkgdGhhdCBhbnkgZXhpc3RpbmcgZmlsZSBjYW4gYWN0dWFsbHkgYmUgbG9hZGVkCisJCSMgKGl0IG1heSBoYXZlIGJlZW4gc2F2ZWQgYnkgYW4gaW5jb21wYXRpYmxlIHZlcnNpb24pCisJCW15ICRkYiA9ICIkcGF0aC5kYiI7CisJCWlmICgtZSAkZGIpIHsKKwkJCXVzZSBTdG9yYWJsZSBxdyhyZXRyaWV2ZSk7CisKKwkJCWlmICghZXZhbCB7IHJldHJpZXZlKCRkYik7IDEgfSkgeworCQkJCXVubGluayAkZGIgb3IgZGllICJ1bmxpbmsgJGRiIGZhaWxlZDogJCEiOworCQkJfQorCQl9CisJCXRpZSAlJGhhc2ggPT4gJ01lbW9pemU6OlN0b3JhYmxlJywgJGRiLCAnbnN0b3JlJzsKKwl9Cit9CisKKyMgVGhlIEdJVF9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGFsd2F5cyBzZXQgdW50aWwgYWZ0ZXIgdGhlIGNvbW1hbmQKKyMgbGluZSBhcmd1bWVudHMgYXJlIHByb2Nlc3NlZCwgc28gd2UgY2FuJ3QgbWVtb2l6ZSBpbiBhIEJFR0lOIGJsb2NrLgoreworCW15ICRtZW1vaXplZCA9IDA7CisKKwlzdWIgbWVtb2l6ZV9zdm5fbWVyZ2VpbmZvX2Z1bmN0aW9ucyB7CisJCXJldHVybiBpZiAkbWVtb2l6ZWQ7CisJCSRtZW1vaXplZCA9IDE7CisKKwkJbXkgJGNhY2hlX3BhdGggPSBzdm5fZGlyKCkgLiAnLy5jYWNoZXMvJzsKKwkJbWtwYXRoKFskY2FjaGVfcGF0aF0pIHVubGVzcyAtZCAkY2FjaGVfcGF0aDsKKworCQlteSAlbG9va3VwX3N2bl9tZXJnZV9jYWNoZTsKKwkJbXkgJWNoZWNrX2NoZXJyeV9waWNrMl9jYWNoZTsKKwkJbXkgJWhhc19ub19jaGFuZ2VzX2NhY2hlOworCisJCXRpZV9mb3JfcGVyc2lzdGVudF9tZW1vaXphdGlvbihcJWxvb2t1cF9zdm5fbWVyZ2VfY2FjaGUsCisJCSAgICAiJGNhY2hlX3BhdGgvbG9va3VwX3N2bl9tZXJnZSIpOworCQltZW1vaXplICdsb29rdXBfc3ZuX21lcmdlJywKKwkJCVNDQUxBUl9DQUNIRSA9PiAnRkFVTFQnLAorCQkJTElTVF9DQUNIRSA9PiBbJ0hBU0gnID0+IFwlbG9va3VwX3N2bl9tZXJnZV9jYWNoZV0sCisJCTsKKworCQl0aWVfZm9yX3BlcnNpc3RlbnRfbWVtb2l6YXRpb24oXCVjaGVja19jaGVycnlfcGljazJfY2FjaGUsCisJCSAgICAiJGNhY2hlX3BhdGgvY2hlY2tfY2hlcnJ5X3BpY2syIik7CisJCW1lbW9pemUgJ2NoZWNrX2NoZXJyeV9waWNrMicsCisJCQlTQ0FMQVJfQ0FDSEUgPT4gJ0ZBVUxUJywKKwkJCUxJU1RfQ0FDSEUgPT4gWydIQVNIJyA9PiBcJWNoZWNrX2NoZXJyeV9waWNrMl9jYWNoZV0sCisJCTsKKworCQl0aWVfZm9yX3BlcnNpc3RlbnRfbWVtb2l6YXRpb24oXCVoYXNfbm9fY2hhbmdlc19jYWNoZSwKKwkJICAgICIkY2FjaGVfcGF0aC9oYXNfbm9fY2hhbmdlcyIpOworCQltZW1vaXplICdoYXNfbm9fY2hhbmdlcycsCisJCQlTQ0FMQVJfQ0FDSEUgPT4gWydIQVNIJyA9PiBcJWhhc19ub19jaGFuZ2VzX2NhY2hlXSwKKwkJCUxJU1RfQ0FDSEUgPT4gJ0ZBVUxUJywKKwkJOworCX0KKworCXN1YiB1bm1lbW9pemVfc3ZuX21lcmdlaW5mb19mdW5jdGlvbnMgeworCQlyZXR1cm4gaWYgbm90ICRtZW1vaXplZDsKKwkJJG1lbW9pemVkID0gMDsKKworCQlNZW1vaXplOjp1bm1lbW9pemUgJ2xvb2t1cF9zdm5fbWVyZ2UnOworCQlNZW1vaXplOjp1bm1lbW9pemUgJ2NoZWNrX2NoZXJyeV9waWNrMic7CisJCU1lbW9pemU6OnVubWVtb2l6ZSAnaGFzX25vX2NoYW5nZXMnOworCX0KKworCXN1YiBjbGVhcl9tZW1vaXplZF9tZXJnZWluZm9fY2FjaGVzIHsKKwkJZGllICJPbmx5IGNhbGwgdGhpcyBtZXRob2QgaW4gbm9uLW1lbW9pemVkIGNvbnRleHQiIGlmICgkbWVtb2l6ZWQpOworCisJCW15ICRjYWNoZV9wYXRoID0gc3ZuX2RpcigpIC4gJy8uY2FjaGVzLyc7CisJCXJldHVybiB1bmxlc3MgLWQgJGNhY2hlX3BhdGg7CisKKwkJZm9yIG15ICRjYWNoZV9maWxlICgoIiRjYWNoZV9wYXRoL2xvb2t1cF9zdm5fbWVyZ2UiLAorCQkJCSAgICAgIiRjYWNoZV9wYXRoL2NoZWNrX2NoZXJyeV9waWNrIiwgIyBvbGQKKwkJCQkgICAgICIkY2FjaGVfcGF0aC9jaGVja19jaGVycnlfcGljazIiLAorCQkJCSAgICAgIiRjYWNoZV9wYXRoL2hhc19ub19jaGFuZ2VzIikpIHsKKwkJCWZvciBteSAkc3VmZml4IChxdyh5YW1sIGRiKSkgeworCQkJCW15ICRmaWxlID0gIiRjYWNoZV9maWxlLiRzdWZmaXgiOworCQkJCW5leHQgdW5sZXNzIC1lICRmaWxlOworCQkJCXVubGluaygkZmlsZSkgb3IgZGllICJ1bmxpbmsoJGZpbGUpIGZhaWxlZDogJCFcbiI7CisJCQl9CisJCX0KKwl9CisKKworCU1lbW9pemU6Om1lbW9pemUgJ0dpdDo6U1ZOOjpyZXBvc19yb290JzsKK30KKworRU5EIHsKKwkjIEZvcmNlIGNhY2hlIHdyaXRlb3V0IGV4cGxpY2l0bHkgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcgorCSMgZ2xvYmFsIGRlc3RydWN0aW9uIHRvIGF2b2lkIHNlZ2ZhdWx0IGluIFN0b3JhYmxlOgorCSMgaHR0cDovL3J0LmNwYW4ub3JnL1B1YmxpYy9CdWcvRGlzcGxheS5odG1sP2lkPTM2MDg3CisJdW5tZW1vaXplX3N2bl9tZXJnZWluZm9fZnVuY3Rpb25zKCk7Cit9CisKK3N1YiBwYXJlbnRzX2V4Y2x1ZGUgeworCW15ICRwYXJlbnRzID0gc2hpZnQ7CisJbXkgQGNvbW1pdHMgPSBAXzsKKwlyZXR1cm4gdW5sZXNzIEBjb21taXRzOworCisJbXkgQGV4Y2x1ZGVkOworCW15ICRleGNsdWRlZDsKKwlkbyB7CisJCW15IEBjbWQgPSAoJ3Jldi1saXN0JywgIi0xIiwgQGNvbW1pdHMsICItLW5vdCIsIEAkcGFyZW50cyApOworCQkkZXhjbHVkZWQgPSBjb21tYW5kX29uZWxpbmUoQGNtZCk7CisJCWlmICggJGV4Y2x1ZGVkICkgeworCQkJbXkgQG5ldzsKKwkJCW15ICRmb3VuZDsKKwkJCWZvciBteSAkY29tbWl0ICggQGNvbW1pdHMgKSB7CisJCQkJaWYgKCAkY29tbWl0IGVxICRleGNsdWRlZCApIHsKKwkJCQkJcHVzaCBAZXhjbHVkZWQsICRjb21taXQ7CisJCQkJCSRmb3VuZCsrOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJcHVzaCBAbmV3LCAkY29tbWl0OworCQkJCX0KKwkJCX0KKwkJCWRpZSAic2F3IGNvbW1pdCAnJGV4Y2x1ZGVkJyBpbiByZXYtbGlzdCBvdXRwdXQsICIKKwkJCQkuImJ1dCB3ZSBkaWRuJ3QgYXNrIGZvciB0aGF0IGNvbW1pdCAod2FudGVkOiBAY29tbWl0cyAtLW5vdCBAJHBhcmVudHMpIgorCQkJCQl1bmxlc3MgJGZvdW5kOworCQkJQGNvbW1pdHMgPSBAbmV3OworCQl9CisJfQorCQl3aGlsZSAoJGV4Y2x1ZGVkIGFuZCBAY29tbWl0cyk7CisKKwlyZXR1cm4gQGV4Y2x1ZGVkOworfQorCisjIENvbXB1dGUgd2hhdCdzIG5ldyBpbiBzdm46bWVyZ2VpbmZvLgorc3ViIG1lcmdlaW5mb19jaGFuZ2VzIHsKKwlteSAoJHNlbGYsICRvbGRfcGF0aCwgJG9sZF9yZXYsICRwYXRoLCAkcmV2LCAkbWVyZ2VpbmZvX3Byb3ApID0gQF87CisJbXkgJW1pbmZvID0gbWFwIHtzcGxpdCAiOiIsICRfIH0gc3BsaXQgIlxuIiwgJG1lcmdlaW5mb19wcm9wOworCW15ICRvbGRfbWluZm8gPSB7fTsKKworCW15ICRyYSA9ICRzZWxmLT5yYTsKKwkjIEdpdmUgdXAgaWYgJG9sZF9wYXRoIGlzbid0IGluIHRoZSByZXBvLgorCSMgVGhpcyBpcyBwcm9iYWJseSBhIG1lcmdlIG9uIGEgc3VidHJlZS4KKwlpZiAoJHJhLT5jaGVja19wYXRoKCRvbGRfcGF0aCwgJG9sZF9yZXYpICE9ICRTVk46Ok5vZGU6OmRpcikgeworCQl3YXJuICJXOiBpZ25vcmluZyBzdm46bWVyZ2VpbmZvIG9uICRvbGRfcGF0aCwgIiwKKwkJCSJkaXJlY3RvcnkgZGlkbid0IGV4aXN0IGluIHIkb2xkX3JldlxuIjsKKwkJcmV0dXJuIHt9OworCX0KKwlteSAodW5kZWYsIHVuZGVmLCAkcHJvcHMpID0gJHJhLT5nZXRfZGlyKCRvbGRfcGF0aCwgJG9sZF9yZXYpOworCWlmIChkZWZpbmVkICRwcm9wcy0+eyJzdm46bWVyZ2VpbmZvIn0pIHsKKwkJbXkgJW9taSA9IG1hcCB7c3BsaXQgIjoiLCAkXyB9IHNwbGl0ICJcbiIsCisJCQkkcHJvcHMtPnsic3ZuOm1lcmdlaW5mbyJ9OworCQkkb2xkX21pbmZvID0gXCVvbWk7CisJfQorCisJbXkgJWNoYW5nZXMgPSAoKTsKKwlmb3JlYWNoIG15ICRwIChrZXlzICVtaW5mbykgeworCQlteSAkYSA9ICRvbGRfbWluZm8tPnskcH0gfHwgIiI7CisJCW15ICRiID0gJG1pbmZveyRwfTsKKwkJIyBPbWl0IG1lcmdlZCBicmFuY2hlcyB3aG9zZSByYW5nZXMgbGlzdHMgYXJlIHVuY2hhbmdlZC4KKwkJbmV4dCBpZiAkYSBlcSAkYjsKKwkJIyBSZW1vdmUgYW55IGNvbW1vbiByYW5nZSBsaXN0IHByZWZpeC4KKwkJKCRhIF4gJGIpID1+IC9eW1wwXSovOworCQlteSAkY29tbW9uX3ByZWZpeCA9IHJpbmRleCAkYiwgIiwiLCAkK1swXSAtIDE7CisJCSRjaGFuZ2VzeyRwfSA9IHN1YnN0ciAkYiwgJGNvbW1vbl9wcmVmaXggKyAxOworCX0KKwlwcmludCBTVERFUlIgIkNoZWNraW5nIHN2bjptZXJnZWluZm8gY2hhbmdlcyBzaW5jZSByJG9sZF9yZXY6ICIsCisJCXNjYWxhcihrZXlzICVtaW5mbyksICIgc291cmNlcywgIiwKKwkJc2NhbGFyKGtleXMgJWNoYW5nZXMpLCAiIGNoYW5nZWRcbiI7CisKKwlyZXR1cm4gXCVjaGFuZ2VzOworfQorCisjIG5vdGU6IHRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSB2YXJpb3VzIGRpcnByb3BzCisjIGhhdmUgYWN0dWFsbHkgY2hhbmdlZAorc3ViIGZpbmRfZXh0cmFfc3ZuX3BhcmVudHMgeworCW15ICgkc2VsZiwgJG1lcmdlaW5mbywgJHBhcmVudHMpID0gQF87CisJIyBhaGEhICBzdms6bWVyZ2UgcHJvcGVydHkgY2hhbmdlZC4uLgorCisJbWVtb2l6ZV9zdm5fbWVyZ2VpbmZvX2Z1bmN0aW9ucygpOworCisJIyBXZSBmaXJzdCBzZWFyY2ggZm9yIG1lcmdlZCB0aXBzIHdoaWNoIGFyZSBub3QgaW4gb3VyCisJIyBoaXN0b3J5LiAgVGhlbiwgd2UgZmlndXJlIG91dCB3aGljaCBnaXQgcmV2aXNpb25zIGFyZSBpbgorCSMgdGhhdCB0aXAsIGJ1dCBub3QgdGhpcyByZXZpc2lvbi4gIElmIGFsbCBvZiB0aG9zZSByZXZpc2lvbnMKKwkjIGFyZSBub3cgbWFya2VkIGFzIG1lcmdlLCB3ZSBjYW4gYWRkIHRoZSB0aXAgYXMgYSBwYXJlbnQuCisJbXkgQG1lcmdlcyA9IHNvcnQga2V5cyAlJG1lcmdlaW5mbzsKKwlteSBAbWVyZ2VfdGlwczsKKwlteSAkdXJsID0gJHNlbGYtPnVybDsKKwlteSAkdXVpZCA9ICRzZWxmLT5yYV91dWlkOworCW15IEBhbGxfcmFuZ2VzOworCWZvciBteSAkbWVyZ2UgKCBAbWVyZ2VzICkgeworCQlteSAoJHRpcF9jb21taXQsIEByYW5nZXMpID0KKwkJCWxvb2t1cF9zdm5fbWVyZ2UoICR1dWlkLCAkdXJsLAorCQkJCQkgICRtZXJnZSwgJG1lcmdlaW5mby0+eyRtZXJnZX0gKTsKKwkJdW5sZXNzICghJHRpcF9jb21taXQgb3IKKwkJCQlncmVwIHsgJF8gZXEgJHRpcF9jb21taXQgfSBAJHBhcmVudHMgKSB7CisJCQlwdXNoIEBtZXJnZV90aXBzLCAkdGlwX2NvbW1pdDsKKwkJCXB1c2ggQGFsbF9yYW5nZXMsIEByYW5nZXM7CisJCX0gZWxzZSB7CisJCQlwdXNoIEBtZXJnZV90aXBzLCB1bmRlZjsKKwkJfQorCX0KKworCW15ICVleGNsdWRlZCA9IG1hcCB7ICRfID0+IDEgfQorCQlwYXJlbnRzX2V4Y2x1ZGUoJHBhcmVudHMsIGdyZXAgeyBkZWZpbmVkIH0gQG1lcmdlX3RpcHMpOworCisJIyBjaGVjayBtZXJnZSB0aXBzIGZvciBuZXcgcGFyZW50cworCW15IEBuZXdfcGFyZW50czsKKwlmb3IgbXkgJG1lcmdlX3RpcCAoIEBtZXJnZV90aXBzICkgeworCQlteSAkbWVyZ2UgPSBzaGlmdCBAbWVyZ2VzOworCQluZXh0IHVubGVzcyAkbWVyZ2VfdGlwIGFuZCAkZXhjbHVkZWR7JG1lcmdlX3RpcH07CisJCW15ICRzcGVjID0gIiRtZXJnZTokbWVyZ2VpbmZvLT57JG1lcmdlfSI7CisKKwkJIyBjaGVjayBvdXQgJ25ldycgdGlwcworCQlteSAkbWVyZ2VfYmFzZTsKKwkJZXZhbCB7CisJCQkkbWVyZ2VfYmFzZSA9IGNvbW1hbmRfb25lbGluZSgKKwkJCQkibWVyZ2UtYmFzZSIsCisJCQkJQCRwYXJlbnRzLCAkbWVyZ2VfdGlwLAorCQkJKTsKKwkJfTsKKwkJaWYgKCRAKSB7CisJCQlkaWUgIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBtZXJnZS1iYXNlIgorCQkJCXVubGVzcyAkQC0+aXNhKCJHaXQ6OkVycm9yOjpDb21tYW5kIik7CisKKwkJCXdhcm4gIlc6IENhbm5vdCBmaW5kIGNvbW1vbiBhbmNlc3RvciBiZXR3ZWVuICIuCisJCQkgICAgICJAJHBhcmVudHMgYW5kICRtZXJnZV90aXAuIElnbm9yaW5nIG1lcmdlIGluZm8uXG4iOworCQkJbmV4dDsKKwkJfQorCisJCSMgZG91YmxlIGNoZWNrIHRoYXQgdGhlcmUgYXJlIG5vIG1pc3Npbmcgbm9uLW1lcmdlIGNvbW1pdHMKKwkJbXkgKCRuaW5jLCAkaWZpcnN0KSA9IGNoZWNrX2NoZXJyeV9waWNrMigKKwkJCSRtZXJnZV9iYXNlLCAkbWVyZ2VfdGlwLAorCQkJJHBhcmVudHMsCisJCQlAYWxsX3JhbmdlcywKKwkJICAgICAgICk7CisKKwkJaWYgKCRuaW5jKSB7CisJCQl3YXJuICJXOiBzdm4gY2hlcnJ5LXBpY2sgaWdub3JlZCAoJHNwZWMpIC0gbWlzc2luZyAiIC4KKwkJCQkiJG5pbmMgY29tbWl0KHMpIChlZyAkaWZpcnN0KVxuIjsKKwkJfSBlbHNlIHsKKwkJCXdhcm4gIkZvdW5kIG1lcmdlIHBhcmVudCAoJHNwZWMpOiAiLCAkbWVyZ2VfdGlwLCAiXG4iOworCQkJcHVzaCBAbmV3X3BhcmVudHMsICRtZXJnZV90aXA7CisJCX0KKwl9CisKKwkjIGNhdGVyIGZvciBtZXJnZXMgd2hpY2ggbWVyZ2UgY29tbWl0cyBmcm9tIG11bHRpcGxlIGJyYW5jaGVzCisJaWYgKCBAbmV3X3BhcmVudHMgPiAxICkgeworCQlmb3IgKCBteSAkaSA9IDA7ICRpIDw9ICQjbmV3X3BhcmVudHM7ICRpKysgKSB7CisJCQlmb3IgKCBteSAkaiA9IDA7ICRqIDw9ICQjbmV3X3BhcmVudHM7ICRqKysgKSB7CisJCQkJbmV4dCBpZiAkaSA9PSAkajsKKwkJCQluZXh0IHVubGVzcyAkbmV3X3BhcmVudHNbJGldOworCQkJCW5leHQgdW5sZXNzICRuZXdfcGFyZW50c1skal07CisJCQkJbXkgJHJldnMgPSBjb21tYW5kX29uZWxpbmUoCisJCQkJCSJyZXYtbGlzdCIsICItMSIsCisJCQkJCSIkbmV3X3BhcmVudHNbJGldLi4kbmV3X3BhcmVudHNbJGpdIiwKKwkJCQkgICAgICAgKTsKKwkJCQlpZiAoICEkcmV2cyApIHsKKwkJCQkJdW5kZWYoJG5ld19wYXJlbnRzWyRqXSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXB1c2ggQCRwYXJlbnRzLCBncmVwIHsgZGVmaW5lZCB9IEBuZXdfcGFyZW50czsKK30KKworc3ViIG1ha2VfbG9nX2VudHJ5IHsKKwlteSAoJHNlbGYsICRyZXYsICRwYXJlbnRzLCAkZWQsICRwYXJlbnRfcmV2LCAkcGFyZW50X3BhdGgpID0gQF87CisJbXkgJHVudHJhY2tlZCA9ICRzZWxmLT5nZXRfdW50cmFja2VkKCRlZCk7CisKKwlteSBAcGFyZW50cyA9IEAkcGFyZW50czsKKwlteSAkcHJvcHMgPSAkZWQtPntkaXJfcHJvcH17JHNlbGYtPnBhdGh9OworCWlmICgkc2VsZi0+Zm9sbG93X3BhcmVudCkgeworCQlteSAkdGlja2V0cyA9ICRwcm9wcy0+eyJzdms6bWVyZ2UifTsKKwkJaWYgKCR0aWNrZXRzKSB7CisJCQkkc2VsZi0+ZmluZF9leHRyYV9zdmtfcGFyZW50cygkdGlja2V0cywgXEBwYXJlbnRzKTsKKwkJfQorCisJCW15ICRtZXJnZWluZm9fcHJvcCA9ICRwcm9wcy0+eyJzdm46bWVyZ2VpbmZvIn07CisJCWlmICgkbWVyZ2VpbmZvX3Byb3ApIHsKKwkJCW15ICRtaV9jaGFuZ2VzID0gJHNlbGYtPm1lcmdlaW5mb19jaGFuZ2VzKAorCQkJCQkJJHBhcmVudF9wYXRoLAorCQkJCQkJJHBhcmVudF9yZXYsCisJCQkJCQkkc2VsZi0+cGF0aCwKKwkJCQkJCSRyZXYsCisJCQkJCQkkbWVyZ2VpbmZvX3Byb3ApOworCQkJJHNlbGYtPmZpbmRfZXh0cmFfc3ZuX3BhcmVudHMoJG1pX2NoYW5nZXMsIFxAcGFyZW50cyk7CisJCX0KKwl9CisKKwlvcGVuIG15ICR1biwgJz4+JywgIiRzZWxmLT57ZGlyfS91bmhhbmRsZWQubG9nIiBvciBjcm9hayAkITsKKwlwcmludCAkdW4gInIkcmV2XG4iIG9yIGNyb2FrICQhOworCXByaW50ICR1biAkXywgIlxuIiBmb3JlYWNoIEAkdW50cmFja2VkOworCW15ICVsb2dfZW50cnkgPSAoIHBhcmVudHMgPT4gXEBwYXJlbnRzLCByZXZpc2lvbiA9PiAkcmV2LAorCSAgICAgICAgICAgICAgICAgIGxvZyA9PiAnJyk7CisKKwlteSAkaGVhZHJldjsKKwlteSAkbG9nZ2VkID0gZGVsZXRlICRzZWxmLT57bG9nZ2VkX3Jldl9wcm9wc307CisJaWYgKCEkbG9nZ2VkIHx8ICRzZWxmLT57LXdhbnRfcmV2cHJvcHN9KSB7CisJCW15ICRycCA9ICRzZWxmLT5yYS0+cmV2X3Byb3BsaXN0KCRyZXYpOworCQlmb3JlYWNoIChzb3J0IGtleXMgJSRycCkgeworCQkJbXkgJHYgPSAkcnAtPnskX307CisJCQlpZiAoL15zdm46KGF1dGhvcnxkYXRlfGxvZykkLykgeworCQkJCSRsb2dfZW50cnl7JDF9ID0gJHY7CisJCQl9IGVsc2lmICgkXyBlcSAnc3ZtOmhlYWRyZXYnKSB7CisJCQkJJGhlYWRyZXYgPSAkdjsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnQgJHVuICIgIHJldl9wcm9wOiAiLCB1cmlfZW5jb2RlKCRfKSwgJyAnLAorCQkJCQkgIHVyaV9lbmNvZGUoJHYpLCAiXG4iOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJbWFwIHsgJGxvZ19lbnRyeXskX30gPSAkbG9nZ2VkLT57JF99IH0ga2V5cyAlJGxvZ2dlZDsKKwl9CisJY2xvc2UgJHVuIG9yIGNyb2FrICQhOworCisJJGxvZ19lbnRyeXtkYXRlfSA9IHBhcnNlX3N2bl9kYXRlKCRsb2dfZW50cnl7ZGF0ZX0pOworCSRsb2dfZW50cnl7bG9nfSAuPSAiXG4iOworCW15ICRhdXRob3IgPSAkbG9nX2VudHJ5e2F1dGhvcn0gPSBjaGVja19hdXRob3IoJGxvZ19lbnRyeXthdXRob3J9KTsKKwlteSAoJG5hbWUsICRlbWFpbCkgPSBkZWZpbmVkICQ6OnVzZXJzeyRhdXRob3J9ID8gQHskOjp1c2Vyc3skYXV0aG9yfX0KKwkJCQkJCSAgICAgICA6ICgkYXV0aG9yLCB1bmRlZik7CisKKwlteSAoJGNvbW1pdF9uYW1lLCAkY29tbWl0X2VtYWlsKSA9ICgkbmFtZSwgJGVtYWlsKTsKKwlpZiAoJF91c2VfbG9nX2F1dGhvcikgeworCQlteSAkbmFtZV9maWVsZDsKKwkJaWYgKCRsb2dfZW50cnl7bG9nfSA9fiAvRnJvbTpccysoLipcUylccypcbi9pKSB7CisJCQkkbmFtZV9maWVsZCA9ICQxOworCQl9IGVsc2lmICgkbG9nX2VudHJ5e2xvZ30gPX4gL1NpZ25lZC1vZmYtYnk6XHMrKC4qXFMpXHMqXG4vaSkgeworCQkJJG5hbWVfZmllbGQgPSAkMTsKKwkJfQorCQlpZiAoIWRlZmluZWQgJG5hbWVfZmllbGQpIHsKKwkJCWlmICghZGVmaW5lZCAkZW1haWwpIHsKKwkJCQkkZW1haWwgPSAkbmFtZTsKKwkJCX0KKwkJfSBlbHNpZiAoJG5hbWVfZmllbGQgPX4gLyguKj8pXHMrPCguKik+LykgeworCQkJKCRuYW1lLCAkZW1haWwpID0gKCQxLCAkMik7CisJCX0gZWxzaWYgKCRuYW1lX2ZpZWxkID1+IC8oLiopQC8pIHsKKwkJCSgkbmFtZSwgJGVtYWlsKSA9ICgkMSwgJG5hbWVfZmllbGQpOworCQl9IGVsc2UgeworCQkJKCRuYW1lLCAkZW1haWwpID0gKCRuYW1lX2ZpZWxkLCAkbmFtZV9maWVsZCk7CisJCX0KKwl9CisJaWYgKGRlZmluZWQgJGhlYWRyZXYgJiYgJHNlbGYtPnVzZV9zdm1fcHJvcHMpIHsKKwkJaWYgKCRzZWxmLT5yZXdyaXRlX3Jvb3QpIHsKKwkJCWRpZSAiQ2FuJ3QgaGF2ZSBib3RoICd1c2VTdm1Qcm9wcycgYW5kICdyZXdyaXRlUm9vdCcgIiwKKwkJCSAgICAib3B0aW9ucyBzZXQhXG4iOworCQl9CisJCWlmICgkc2VsZi0+cmV3cml0ZV91dWlkKSB7CisJCQlkaWUgIkNhbid0IGhhdmUgYm90aCAndXNlU3ZtUHJvcHMnIGFuZCAncmV3cml0ZVVVSUQnICIsCisJCQkgICAgIm9wdGlvbnMgc2V0IVxuIjsKKwkJfQorCQlteSAoJHV1aWQsICRyKSA9ICRoZWFkcmV2ID1+IG17XihbYS1mXGRcLV17MzAsfSk6KFxkKykkfWk7CisJCSMgd2UgZG9uJ3Qgd2FudCAiU1ZNOiBpbml0aWFsaXppbmcgbWlycm9yIGZvciBqdW5rIiAuLi4KKwkJcmV0dXJuIHVuZGVmIGlmICRyID09IDA7CisJCW15ICRzdm0gPSAkc2VsZi0+c3ZtOworCQlpZiAoJHV1aWQgbmUgJHN2bS0+e3V1aWR9KSB7CisJCQlkaWUgIlVVSUQgbWlzbWF0Y2ggb24gU1ZNIHBhdGg6XG4iLAorCQkJICAgICJleHBlY3RlZDogJHN2bS0+e3V1aWR9XG4iLAorCQkJICAgICIgICAgIGdvdDogJHV1aWRcbiI7CisJCX0KKwkJbXkgJGZ1bGxfdXJsID0gJHNlbGYtPmZ1bGxfdXJsOworCQkkZnVsbF91cmwgPX4gcyNeXFEkc3ZtLT57cmVwbGFjZX1cRSgvfCQpIyRzdm0tPntzb3VyY2V9JDEjIG9yCisJCSAgICAgICAgICAgICBkaWUgIkZhaWxlZCB0byByZXBsYWNlICckc3ZtLT57cmVwbGFjZX0nIHdpdGggIiwKKwkJICAgICAgICAgICAgICAgICAiJyRzdm0tPntzb3VyY2V9JyBpbiAkZnVsbF91cmxcbiI7CisJCSMgdGhyb3cgYXdheSB1c2VybmFtZSBmb3Igc3RvcmluZyBpbiByZWNvcmRzCisJCXJlbW92ZV91c2VybmFtZSgkZnVsbF91cmwpOworCQkkbG9nX2VudHJ5e21ldGFkYXRhfSA9ICIkZnVsbF91cmxcQCRyICR1dWlkIjsKKwkJJGxvZ19lbnRyeXtzdm1fcmV2aXNpb259ID0gJHI7CisJCSRlbWFpbCA9ICIkYXV0aG9yXEAkdXVpZCIgdW5sZXNzIGRlZmluZWQgJGVtYWlsOworCQkkY29tbWl0X2VtYWlsID0gIiRhdXRob3JcQCR1dWlkIiB1bmxlc3MgZGVmaW5lZCAkY29tbWl0X2VtYWlsOworCX0gZWxzaWYgKCRzZWxmLT51c2Vfc3Zuc3luY19wcm9wcykgeworCQlteSAkZnVsbF91cmwgPSBjYW5vbmljYWxpemVfdXJsKAorCQkJYWRkX3BhdGhfdG9fdXJsKCAkc2VsZi0+c3Zuc3luYy0+e3VybH0sICRzZWxmLT5wYXRoICkKKwkJKTsKKwkJcmVtb3ZlX3VzZXJuYW1lKCRmdWxsX3VybCk7CisJCW15ICR1dWlkID0gJHNlbGYtPnN2bnN5bmMtPnt1dWlkfTsKKwkJJGxvZ19lbnRyeXttZXRhZGF0YX0gPSAiJGZ1bGxfdXJsXEAkcmV2ICR1dWlkIjsKKwkJJGVtYWlsID0gIiRhdXRob3JcQCR1dWlkIiB1bmxlc3MgZGVmaW5lZCAkZW1haWw7CisJCSRjb21taXRfZW1haWwgPSAiJGF1dGhvclxAJHV1aWQiIHVubGVzcyBkZWZpbmVkICRjb21taXRfZW1haWw7CisJfSBlbHNlIHsKKwkJbXkgJHVybCA9ICRzZWxmLT5tZXRhZGF0YV91cmw7CisJCXJlbW92ZV91c2VybmFtZSgkdXJsKTsKKwkJbXkgJHV1aWQgPSAkc2VsZi0+cmV3cml0ZV91dWlkIHx8ICRzZWxmLT5yYS0+Z2V0X3V1aWQ7CisJCSRsb2dfZW50cnl7bWV0YWRhdGF9ID0gIiR1cmxcQCRyZXYgIiAuICR1dWlkOworCQkkZW1haWwgPSAiJGF1dGhvclxAJHV1aWQiIHVubGVzcyBkZWZpbmVkICRlbWFpbDsKKwkJJGNvbW1pdF9lbWFpbCA9ICIkYXV0aG9yXEAkdXVpZCIgdW5sZXNzIGRlZmluZWQgJGNvbW1pdF9lbWFpbDsKKwl9CisJJGxvZ19lbnRyeXtuYW1lfSA9ICRuYW1lOworCSRsb2dfZW50cnl7ZW1haWx9ID0gJGVtYWlsOworCSRsb2dfZW50cnl7Y29tbWl0X25hbWV9ID0gJGNvbW1pdF9uYW1lOworCSRsb2dfZW50cnl7Y29tbWl0X2VtYWlsfSA9ICRjb21taXRfZW1haWw7CisJXCVsb2dfZW50cnk7Cit9CisKK3N1YiBmZXRjaCB7CisJbXkgKCRzZWxmLCAkbWluX3JldiwgJG1heF9yZXYsIEBwYXJlbnRzKSA9IEBfOworCW15ICgkbGFzdF9yZXYsICRsYXN0X2NvbW1pdCkgPSAkc2VsZi0+bGFzdF9yZXZfY29tbWl0OworCW15ICgkYmFzZSwgJGhlYWQpID0gJHNlbGYtPmdldF9mZXRjaF9yYW5nZSgkbWluX3JldiwgJG1heF9yZXYpOworCSRzZWxmLT5yYS0+Z3NfZmV0Y2hfbG9vcF9jb21tb24oJGJhc2UsICRoZWFkLCBbJHNlbGZdKTsKK30KKworc3ViIHNldF90cmVlX2NiIHsKKwlteSAoJHNlbGYsICRsb2dfZW50cnksICR0cmVlLCAkcmV2LCAkZGF0ZSwgJGF1dGhvcikgPSBAXzsKKwkkc2VsZi0+e2luamVjdF9wYXJlbnRzfSA9IHsgJHJldiA9PiAkdHJlZSB9OworCSRzZWxmLT5mZXRjaCh1bmRlZiwgdW5kZWYpOworfQorCitzdWIgc2V0X3RyZWUgeworCW15ICgkc2VsZiwgJHRyZWUpID0gKHNoaWZ0LCBzaGlmdCk7CisJbXkgJGxvZ19lbnRyeSA9IDo6Z2V0X2NvbW1pdF9lbnRyeSgkdHJlZSk7CisJdW5sZXNzICgkc2VsZi0+e2xhc3RfcmV2fSkgeworCQlmYXRhbCgiTXVzdCBoYXZlIGFuIGV4aXN0aW5nIHJldmlzaW9uIHRvIGNvbW1pdCIpOworCX0KKwlteSAlZWRfb3B0cyA9ICggciA9PiAkc2VsZi0+e2xhc3RfcmV2fSwKKwkgICAgICAgICAgICAgICAgbG9nID0+ICRsb2dfZW50cnktPntsb2d9LAorCSAgICAgICAgICAgICAgICByYSA9PiAkc2VsZi0+cmEsCisJICAgICAgICAgICAgICAgIHRyZWVfYSA9PiAkc2VsZi0+e2xhc3RfY29tbWl0fSwKKwkgICAgICAgICAgICAgICAgdHJlZV9iID0+ICR0cmVlLAorCSAgICAgICAgICAgICAgICBlZGl0b3JfY2IgPT4gc3ViIHsKKwkJCSAgICAgICAkc2VsZi0+c2V0X3RyZWVfY2IoJGxvZ19lbnRyeSwgJHRyZWUsIEBfKSB9LAorCSAgICAgICAgICAgICAgICBzdm5fcGF0aCA9PiAkc2VsZi0+cGF0aCApOworCWlmICghR2l0OjpTVk46OkVkaXRvci0+bmV3KFwlZWRfb3B0cyktPmFwcGx5X2RpZmYpIHsKKwkJcHJpbnQgIk5vIGNoYW5nZXNcbnIkc2VsZi0+e2xhc3RfcmV2fSA9ICR0cmVlXG4iOworCX0KK30KKworc3ViIHJlYnVpbGRfZnJvbV9yZXZfZGIgeworCW15ICgkc2VsZiwgJHBhdGgpID0gQF87CisJbXkgJHIgPSAtMTsKKwlvcGVuIG15ICRmaCwgJzwnLCAkcGF0aCBvciBjcm9hayAib3BlbjogJCEiOworCWJpbm1vZGUgJGZoIG9yIGNyb2FrICJiaW5tb2RlOiAkISI7CisJd2hpbGUgKDwkZmg+KSB7CisJCWxlbmd0aCgkXykgPT0gNDEgb3IgY3JvYWsgImluY29uc2lzdGVudCBzaXplIGluICgkXykgIT0gNDEiOworCQljaG9tcCgkXyk7CisJCSsrJHI7CisJCW5leHQgaWYgJF8gZXEgKCcwJyB4IDQwKTsKKwkJJHNlbGYtPnJldl9tYXBfc2V0KCRyLCAkXyk7CisJCXByaW50ICJyJHIgPSAkX1xuIjsKKwl9CisJY2xvc2UgJGZoIG9yIGNyb2FrICJjbG9zZTogJCEiOworCXVubGluayAkcGF0aCBvciBjcm9hayAidW5saW5rOiAkISI7Cit9CisKKyNkZWZpbmUgYSBnbG9iYWwgYXNzb2NpYXRlIG1hcCB0byByZWNvcmQgcmVidWlsZCBzdGF0dXMKK215ICVyZWJ1aWxkX3N0YXR1czsKKyNkZWZpbmUgYSBnbG9iYWwgYXNzb2NpYXRlIG1hcCB0byByZWNvcmQgcmVidWlsZCB2ZXJpZnkgc3RhdHVzCitteSAlcmVidWlsZF92ZXJpZnlfc3RhdHVzOworCitzdWIgcmVidWlsZCB7CisJbXkgKCRzZWxmKSA9IEBfOworCW15ICRtYXBfcGF0aCA9ICRzZWxmLT5tYXBfcGF0aDsKKwlteSAkcGFydGlhbCA9ICgtZSAkbWFwX3BhdGggJiYgISAteiAkbWFwX3BhdGgpOworCW15ICR2ZXJpZnlfa2V5ID0gJHNlbGYtPnJlZm5hbWUuJ14wJzsKKwlpZiAoISRyZWJ1aWxkX3ZlcmlmeV9zdGF0dXN7JHZlcmlmeV9rZXl9KSB7CisJCW15ICR2ZXJpZnlfcmVzdWx0ID0gOjp2ZXJpZnlfcmVmKCR2ZXJpZnlfa2V5KTsKKwkJaWYgKCR2ZXJpZnlfcmVzdWx0KSB7CisJCQkkcmVidWlsZF92ZXJpZnlfc3RhdHVzeyR2ZXJpZnlfa2V5fSA9IDE7CisJCX0KKwl9CisJaWYgKCEkcmVidWlsZF92ZXJpZnlfc3RhdHVzeyR2ZXJpZnlfa2V5fSkgeworCQlyZXR1cm47CisJfQorCWlmICghJHBhcnRpYWwgJiYgKCRzZWxmLT51c2Vfc3ZtX3Byb3BzIHx8ICRzZWxmLT5ub19tZXRhZGF0YSkpIHsKKwkJbXkgJHJldl9kYiA9ICRzZWxmLT5yZXZfZGJfcGF0aDsKKwkJJHNlbGYtPnJlYnVpbGRfZnJvbV9yZXZfZGIoJHJldl9kYik7CisJCWlmICgkc2VsZi0+dXNlX3N2bV9wcm9wcykgeworCQkJbXkgJHN2bV9yZXZfZGIgPSAkc2VsZi0+cmV2X2RiX3BhdGgoJHNlbGYtPnN2bV91dWlkKTsKKwkJCSRzZWxmLT5yZWJ1aWxkX2Zyb21fcmV2X2RiKCRzdm1fcmV2X2RiKTsKKwkJfQorCQkkc2VsZi0+dW5saW5rX3Jldl9kYl9zeW1saW5rOworCQlyZXR1cm47CisJfQorCXByaW50ICJSZWJ1aWxkaW5nICRtYXBfcGF0aCAuLi5cbiIgaWYgKCEkcGFydGlhbCk7CisJbXkgKCRiYXNlX3JldiwgJGhlYWQpID0gKCRwYXJ0aWFsID8gJHNlbGYtPnJldl9tYXBfbWF4X25vcmVidWlsZCgxKSA6CisJCSh1bmRlZiwgdW5kZWYpKTsKKwlteSAka2V5X3ZhbHVlID0gKCRoZWFkID8gIiRoZWFkLi4iIDogIiIpIC4gJHNlbGYtPnJlZm5hbWU7CisJaWYgKGV4aXN0cyAkcmVidWlsZF9zdGF0dXN7JGtleV92YWx1ZX0pIHsKKwkJcHJpbnQgIkRvbmUgcmVidWlsZGluZyAkbWFwX3BhdGhcbiIgaWYgKCEkcGFydGlhbCB8fCAhJGhlYWQpOworCQlteSAkcmV2X2RiX3BhdGggPSAkc2VsZi0+cmV2X2RiX3BhdGg7CisJCWlmICgtZiAkc2VsZi0+cmV2X2RiX3BhdGgpIHsKKwkJCXVubGluayAkc2VsZi0+cmV2X2RiX3BhdGggb3IgY3JvYWsgInVubGluazogJCEiOworCQl9CisJCSRzZWxmLT51bmxpbmtfcmV2X2RiX3N5bWxpbms7CisJCXJldHVybjsKKwl9CisJbXkgKCRsb2csICRjdHgpID0KKwkJY29tbWFuZF9vdXRwdXRfcGlwZShxdy9yZXYtbGlzdCAtLXByZXR0eT1yYXcgLS1yZXZlcnNlLywKKwkJCQkka2V5X3ZhbHVlLAorCQkJCSctLScpOworCSRyZWJ1aWxkX3N0YXR1c3ska2V5X3ZhbHVlfSA9IDE7CisJbXkgJG1ldGFkYXRhX3VybCA9ICRzZWxmLT5tZXRhZGF0YV91cmw7CisJcmVtb3ZlX3VzZXJuYW1lKCRtZXRhZGF0YV91cmwpOworCW15ICRzdm5fdXVpZCA9ICRzZWxmLT5yZXdyaXRlX3V1aWQgfHwgJHNlbGYtPnJhX3V1aWQ7CisJbXkgJGM7CisJd2hpbGUgKDwkbG9nPikgeworCQlpZiAoIG17XmNvbW1pdCAoJDo6c2hhMSkkfSApIHsKKwkJCSRjID0gJDE7CisJCQluZXh0OworCQl9CisJCW5leHQgdW5sZXNzIHN7XlxzKihnaXQtc3ZuLWlkOil9eyQxfTsKKwkJbXkgKCR1cmwsICRyZXYsICR1dWlkKSA9IDo6ZXh0cmFjdF9tZXRhZGF0YSgkXyk7CisJCXJlbW92ZV91c2VybmFtZSgkdXJsKTsKKworCQkjIGlnbm9yZSBtZXJnZXMgKGZyb20gc2V0LXRyZWUpCisJCW5leHQgaWYgKCFkZWZpbmVkICRyZXYgfHwgISR1dWlkKTsKKworCQkjIGlmIHdlIG1lcmdlZCBvciBvdGhlcndpc2Ugc3RhcnRlZCBlbHNld2hlcmUsIHRoaXMgaXMKKwkJIyBob3cgd2UgYnJlYWsgb3V0IG9mIGl0CisJCWlmICgoJHV1aWQgbmUgJHN2bl91dWlkKSB8fAorCQkgICAgKCRtZXRhZGF0YV91cmwgJiYgJHVybCAmJiAoJHVybCBuZSAkbWV0YWRhdGFfdXJsKSkpIHsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRwYXJ0aWFsICYmICRoZWFkKSB7CisJCQlwcmludCAiUGFydGlhbC1yZWJ1aWxkaW5nICRtYXBfcGF0aCAuLi5cbiI7CisJCQlwcmludCAiQ3VycmVudGx5IGF0ICRiYXNlX3JldiA9ICRoZWFkXG4iOworCQkJJGhlYWQgPSB1bmRlZjsKKwkJfQorCisJCSRzZWxmLT5yZXZfbWFwX3NldCgkcmV2LCAkYyk7CisJCXByaW50ICJyJHJldiA9ICRjXG4iOworCX0KKwljb21tYW5kX2Nsb3NlX3BpcGUoJGxvZywgJGN0eCk7CisJcHJpbnQgIkRvbmUgcmVidWlsZGluZyAkbWFwX3BhdGhcbiIgaWYgKCEkcGFydGlhbCB8fCAhJGhlYWQpOworCW15ICRyZXZfZGJfcGF0aCA9ICRzZWxmLT5yZXZfZGJfcGF0aDsKKwlpZiAoLWYgJHNlbGYtPnJldl9kYl9wYXRoKSB7CisJCXVubGluayAkc2VsZi0+cmV2X2RiX3BhdGggb3IgY3JvYWsgInVubGluazogJCEiOworCX0KKwkkc2VsZi0+dW5saW5rX3Jldl9kYl9zeW1saW5rOworfQorCisjIHJldl9tYXA6CisjIFRpZTo6RmlsZSBzZWVtcyB0byBiZSBwcm9uZSB0byBvZmZzZXQgZXJyb3JzIGlmIHJldmlzaW9ucyBnZXQgc3BhcnNlLAorIyBpdCdzIG5vdCB0aGF0IGZhc3QsIGVpdGhlci4gIFRpZTo6RmlsZSBpcyBhbHNvIG5vdCBpbiBQZXJsIDUuNi4gIFNvCisjIG9uZSBvZiBteSBmYXZvcml0ZSBtb2R1bGVzIGlzIG91dCA6PCAgTmV4dCB1cCB3b3VsZCBiZSBvbmUgb2YgdGhlIERCTQorIyBtb2R1bGVzLCBidXQgSSdtIG5vdCBzdXJlIHdoaWNoIGlzIG1vc3QgcG9ydGFibGUuLi4KKyMKKyMgVGhpcyBpcyB0aGUgcmVwbGFjZW1lbnQgZm9yIHRoZSByZXZfZGIgZm9ybWF0LCB3aGljaCB3YXMgdG9vIGJpZworIyBhbmQgaW5lZmZpY2llbnQgZm9yIGxhcmdlIHJlcG9zaXRvcmllcyB3aXRoIGEgbG90IG9mIHNwYXJzZSBoaXN0b3J5CisjIChtYWlubHkgdGFncykKKyMKKyMgVGhlIGZvcm1hdCBpcyB0aGlzOgorIyAgIC0gMjQgYnl0ZXMgZm9yIGV2ZXJ5IHJlY29yZCwKKyMgICAgICogNCBieXRlcyBmb3IgdGhlIGludGVnZXIgcmVwcmVzZW50aW5nIGFuIFNWTiByZXZpc2lvbiBudW1iZXIKKyMgICAgICogMjAgYnl0ZXMgcmVwcmVzZW50aW5nIHRoZSBzaGExIG9mIGEgZ2l0IGNvbW1pdAorIyAgIC0gTm8gZW1wdHkgcGFkZGluZyByZWNvcmRzIGxpa2UgdGhlIG9sZCBmb3JtYXQKKyMgICAgIChleGNlcHQgdGhlIGxhc3QgcmVjb3JkLCB3aGljaCBjYW4gYmUgb3ZlcndyaXR0ZW4pCisjICAgLSBuZXcgcmVjb3JkcyBhcmUgd3JpdHRlbiBhcHBlbmQtb25seSBzaW5jZSBTVk4gcmV2aXNpb24gbnVtYmVycworIyAgICAgaW5jcmVhc2UgbW9ub3RvbmljYWxseQorIyAgIC0gbG9va3VwcyBvbiBTVk4gcmV2aXNpb24gbnVtYmVyIGFyZSBkb25lIHZpYSBhIGJpbmFyeSBzZWFyY2gKKyMgICAtIFBpcGluZyB0aGUgZmlsZSB0byB4eGQgLWMyNCBpcyBhIGdvb2Qgd2F5IG9mIGR1bXBpbmcgaXQgZm9yCisjICAgICB2aWV3aW5nIG9yIGVkaXRpbmcgKHBpcGVkIGJhY2sgdGhyb3VnaCB4eGQgLXIpLCBzaG91bGQgdGhlIG5lZWQKKyMgICAgIGV2ZXIgYXJpc2UuCisjICAgLSBUaGUgbGFzdCByZWNvcmQgY2FuIGJlIHBhZGRpbmcgcmV2aXNpb24gd2l0aCBhbiBhbGwtemVybyBzaGExCisjICAgICBUaGlzIGlzIHVzZWQgdG8gb3B0aW1pemUgZmV0Y2ggcGVyZm9ybWFuY2Ugd2hlbiB1c2luZyBtdWx0aXBsZQorIyAgICAgImZldGNoIiBkaXJlY3RpdmVzIGluIC5naXQvY29uZmlnCisjCisjIFRoZXNlIGZpbGVzIGFyZSBkaXNwb3NhYmxlIHVubGVzcyBub01ldGFkYXRhIG9yIHVzZVN2bVByb3BzIGlzIHNldAorCitzdWIgX3Jldl9tYXBfc2V0IHsKKwlteSAoJGZoLCAkcmV2LCAkY29tbWl0KSA9IEBfOworCisJYmlubW9kZSAkZmggb3IgY3JvYWsgImJpbm1vZGU6ICQhIjsKKwlteSAkc2l6ZSA9IChzdGF0KCRmaCkpWzddOworCSgkc2l6ZSAlIDI0KSA9PSAwIG9yIGNyb2FrICJpbmNvbnNpc3RlbnQgc2l6ZTogJHNpemUiOworCisJbXkgJHdyX29mZnNldCA9IDA7CisJaWYgKCRzaXplID4gMCkgeworCQlzeXNzZWVrKCRmaCwgLTI0LCBTRUVLX0VORCkgb3IgY3JvYWsgInNlZWs6ICQhIjsKKwkJbXkgJHJlYWQgPSBzeXNyZWFkKCRmaCwgbXkgJGJ1ZiwgMjQpIG9yIGNyb2FrICJyZWFkOiAkISI7CisJCSRyZWFkID09IDI0IG9yIGNyb2FrICJyZWFkIG9ubHkgJHJlYWQgYnl0ZXMgKCE9IDI0KSI7CisJCW15ICgkbGFzdF9yZXYsICRsYXN0X2NvbW1pdCkgPSB1bnBhY2socmV2X21hcF9mbXQsICRidWYpOworCQlpZiAoJGxhc3RfY29tbWl0IGVxICgnMCcgeDQwKSkgeworCQkJaWYgKCRzaXplID49IDQ4KSB7CisJCQkJc3lzc2VlaygkZmgsIC00OCwgU0VFS19FTkQpIG9yIGNyb2FrICJzZWVrOiAkISI7CisJCQkJJHJlYWQgPSBzeXNyZWFkKCRmaCwgJGJ1ZiwgMjQpIG9yCisJCQkJICAgIGNyb2FrICJyZWFkOiAkISI7CisJCQkJJHJlYWQgPT0gMjQgb3IKKwkJCQkgICAgY3JvYWsgInJlYWQgb25seSAkcmVhZCBieXRlcyAoIT0gMjQpIjsKKwkJCQkoJGxhc3RfcmV2LCAkbGFzdF9jb21taXQpID0KKwkJCQkgICAgdW5wYWNrKHJldl9tYXBfZm10LCAkYnVmKTsKKwkJCQlpZiAoJGxhc3RfY29tbWl0IGVxICgnMCcgeDQwKSkgeworCQkJCQljcm9hayAiaW5jb25zaXN0ZW50IC5yZXZfbWFwXG4iOworCQkJCX0KKwkJCX0KKwkJCWlmICgkbGFzdF9yZXYgPj0gJHJldikgeworCQkJCWNyb2FrICJsYXN0X3JldiBpcyBoaWdoZXIhOiAkbGFzdF9yZXYgPj0gJHJldiI7CisJCQl9CisJCQkkd3Jfb2Zmc2V0ID0gLTI0OworCQl9CisJfQorCXN5c3NlZWsoJGZoLCAkd3Jfb2Zmc2V0LCBTRUVLX0VORCkgb3IgY3JvYWsgInNlZWs6ICQhIjsKKwlzeXN3cml0ZSgkZmgsIHBhY2socmV2X21hcF9mbXQsICRyZXYsICRjb21taXQpLCAyNCkgPT0gMjQgb3IKKwkgIGNyb2FrICJ3cml0ZTogJCEiOworfQorCitzdWIgX3Jldl9tYXBfcmVzZXQgeworCW15ICgkZmgsICRyZXYsICRjb21taXQpID0gQF87CisJbXkgJGMgPSBfcmV2X21hcF9nZXQoJGZoLCAkcmV2KTsKKwkkYyBlcSAkY29tbWl0IG9yIGRpZSAiX3Jldl9tYXBfcmVzZXQoQF8pIGNvbW1pdCAkYyBkb2VzIG5vdCBtYXRjaCFcbiI7CisJbXkgJG9mZnNldCA9IHN5c3NlZWsoJGZoLCAwLCBTRUVLX0NVUikgb3IgY3JvYWsgInNlZWs6ICQhIjsKKwl0cnVuY2F0ZSAkZmgsICRvZmZzZXQgb3IgY3JvYWsgInRydW5jYXRlOiAkISI7Cit9CisKK3N1YiBta2ZpbGUgeworCW15ICgkcGF0aCkgPSBAXzsKKwl1bmxlc3MgKC1lICRwYXRoKSB7CisJCW15ICgkZGlyLCAkYmFzZSkgPSAoJHBhdGggPX4gbSNeKC4qPykvPyhbXi9dKykkIyk7CisJCW1rcGF0aChbJGRpcl0pIHVubGVzcyAtZCAkZGlyOworCQlvcGVuIG15ICRmaCwgJz4+JywgJHBhdGggb3IgZGllICJDb3VsZG4ndCBjcmVhdGUgJHBhdGg6ICQhXG4iOworCQljbG9zZSAkZmggb3IgZGllICJDb3VsZG4ndCBjbG9zZSAoY3JlYXRlKSAkcGF0aDogJCFcbiI7CisJfQorfQorCitzdWIgcmV2X21hcF9zZXQgeworCW15ICgkc2VsZiwgJHJldiwgJGNvbW1pdCwgJHVwZGF0ZV9yZWYsICR1dWlkKSA9IEBfOworCWRlZmluZWQgJGNvbW1pdCBvciBkaWUgIm1pc3NpbmcgYXJnM1xuIjsKKwlsZW5ndGggJGNvbW1pdCA9PSA0MCBvciBkaWUgImFyZzMgbXVzdCBiZSBhIGZ1bGwgU0hBMSBoZXhzdW1cbiI7CisJbXkgJGRiID0gJHNlbGYtPm1hcF9wYXRoKCR1dWlkKTsKKwlteSAkZGJfbG9jayA9ICIkZGIubG9jayI7CisJbXkgJHNpZ21hc2s7CisJJHVwZGF0ZV9yZWYgfHw9IDA7CisJaWYgKCR1cGRhdGVfcmVmKSB7CisJCSRzaWdtYXNrID0gUE9TSVg6OlNpZ1NldC0+bmV3KCk7CisJCW15ICRzaWduZXcgPSBQT1NJWDo6U2lnU2V0LT5uZXcoU0lHSU5ULCBTSUdIVVAsIFNJR1RFUk0sCisJCQlTSUdBTFJNLCBTSUdVU1IxLCBTSUdVU1IyKTsKKwkJc2lncHJvY21hc2soU0lHX0JMT0NLLCAkc2lnbmV3LCAkc2lnbWFzaykgb3IKKwkJCWNyb2FrICJDYW4ndCBibG9jayBzaWduYWxzOiAkISI7CisJfQorCW1rZmlsZSgkZGIpOworCisJJExPQ0tGSUxFU3skZGJfbG9ja30gPSAxOworCW15ICRzeW5jOworCSMgYm90aCBvZiB0aGVzZSBvcHRpb25zIG1ha2Ugb3VyIC5yZXZfZGIgZmlsZSB2ZXJ5LCB2ZXJ5IGltcG9ydGFudAorCSMgYW5kIHdlIGNhbid0IGFmZm9yZCB0byBsb3NlIGl0IGJlY2F1c2UgcmVidWlsZCgpIHdvbid0IHdvcmsKKwlpZiAoJHNlbGYtPnVzZV9zdm1fcHJvcHMgfHwgJHNlbGYtPm5vX21ldGFkYXRhKSB7CisJCXJlcXVpcmUgRmlsZTo6Q29weTsKKwkJJHN5bmMgPSAxOworCQlGaWxlOjpDb3B5Ojpjb3B5KCRkYiwgJGRiX2xvY2spIG9yIGRpZSAicmV2X21hcF9zZXQoQF8pOiAiLAorCQkJCQkgICAiRmFpbGVkIHRvIGNvcHk6ICIsCisJCQkJCSAgICIkZGIgPT4gJGRiX2xvY2sgKCQhKVxuIjsKKwl9IGVsc2UgeworCQlyZW5hbWUgJGRiLCAkZGJfbG9jayBvciBkaWUgInJldl9tYXBfc2V0KEBfKTogIiwKKwkJCQkJICAgICJGYWlsZWQgdG8gcmVuYW1lOiAiLAorCQkJCQkgICAgIiRkYiA9PiAkZGJfbG9jayAoJCEpXG4iOworCX0KKworCXN5c29wZW4obXkgJGZoLCAkZGJfbG9jaywgT19SRFdSIHwgT19DUkVBVCkKKwkgICAgIG9yIGNyb2FrICJDb3VsZG4ndCBvcGVuICRkYl9sb2NrOiAkIVxuIjsKKwlpZiAoJHVwZGF0ZV9yZWYgZXEgJ3Jlc2V0JykgeworCQljbGVhcl9tZW1vaXplZF9tZXJnZWluZm9fY2FjaGVzKCk7CisJCV9yZXZfbWFwX3Jlc2V0KCRmaCwgJHJldiwgJGNvbW1pdCk7CisJfSBlbHNlIHsKKwkJX3Jldl9tYXBfc2V0KCRmaCwgJHJldiwgJGNvbW1pdCk7CisJfQorCisJaWYgKCRzeW5jKSB7CisJCSRmaC0+Zmx1c2ggb3IgZGllICJDb3VsZG4ndCBmbHVzaCAkZGJfbG9jazogJCFcbiI7CisJCSRmaC0+c3luYyBvciBkaWUgIkNvdWxkbid0IHN5bmMgJGRiX2xvY2s6ICQhXG4iOworCX0KKwljbG9zZSAkZmggb3IgY3JvYWsgJCE7CisJaWYgKCR1cGRhdGVfcmVmKSB7CisJCSRfaGVhZCA9ICRzZWxmOworCQlteSAkbm90ZSA9ICIiOworCQkkbm90ZSA9ICIgKCR1cGRhdGVfcmVmKSIgaWYgKCR1cGRhdGVfcmVmICF+IC9eXGQqJC8pOworCQljb21tYW5kX25vaXN5KCd1cGRhdGUtcmVmJywgJy1tJywgInIkcmV2JG5vdGUiLAorCQkgICAgICAgICAgICAgICRzZWxmLT5yZWZuYW1lLCAkY29tbWl0KTsKKwl9CisJcmVuYW1lICRkYl9sb2NrLCAkZGIgb3IgZGllICJyZXZfbWFwX3NldChAXyk6ICIsICJGYWlsZWQgdG8gcmVuYW1lOiAiLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJGRiX2xvY2sgPT4gJGRiICgkISlcbiI7CisJZGVsZXRlICRMT0NLRklMRVN7JGRiX2xvY2t9OworCWlmICgkdXBkYXRlX3JlZikgeworCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJHNpZ21hc2spIG9yCisJCQljcm9hayAiQ2FuJ3QgcmVzdG9yZSBzaWduYWwgbWFzazogJCEiOworCX0KK30KKworIyBJZiB3YW50X2NvbW1pdCwgdGhpcyB3aWxsIHJldHVybiBhbiBhcnJheSBvZiAocmV2LCBjb21taXQpIHdoZXJlCisjIGNvbW1pdCBfbXVzdF8gYmUgYSB2YWxpZCBjb21taXQgaW4gdGhlIGFyY2hpdmUuCisjIE90aGVyd2lzZSwgaXQnbGwgcmV0dXJuIHRoZSBtYXggcmV2aXNpb24gKHdoZXRoZXIgb3Igbm90IHRoZQorIyBjb21taXQgaXMgdmFsaWQgb3IganVzdCBhIDB4NDAgcGxhY2Vob2xkZXIpLgorc3ViIHJldl9tYXBfbWF4IHsKKwlteSAoJHNlbGYsICR3YW50X2NvbW1pdCkgPSBAXzsKKwkkc2VsZi0+cmVidWlsZDsKKwlteSAoJHIsICRjKSA9ICRzZWxmLT5yZXZfbWFwX21heF9ub3JlYnVpbGQoJHdhbnRfY29tbWl0KTsKKwkkd2FudF9jb21taXQgPyAoJHIsICRjKSA6ICRyOworfQorCitzdWIgcmV2X21hcF9tYXhfbm9yZWJ1aWxkIHsKKwlteSAoJHNlbGYsICR3YW50X2NvbW1pdCkgPSBAXzsKKwlteSAkbWFwX3BhdGggPSAkc2VsZi0+bWFwX3BhdGg7CisJc3RhdCAkbWFwX3BhdGggb3IgcmV0dXJuICR3YW50X2NvbW1pdCA/ICgwLCB1bmRlZikgOiAwOworCXN5c29wZW4obXkgJGZoLCAkbWFwX3BhdGgsIE9fUkRPTkxZKSBvciBjcm9hayAib3BlbjogJCEiOworCWJpbm1vZGUgJGZoIG9yIGNyb2FrICJiaW5tb2RlOiAkISI7CisJbXkgJHNpemUgPSAoc3RhdCgkZmgpKVs3XTsKKwkoJHNpemUgJSAyNCkgPT0gMCBvciBjcm9hayAiaW5jb25zaXN0ZW50IHNpemU6ICRzaXplIjsKKworCWlmICgkc2l6ZSA9PSAwKSB7CisJCWNsb3NlICRmaCBvciBjcm9hayAiY2xvc2U6ICQhIjsKKwkJcmV0dXJuICR3YW50X2NvbW1pdCA/ICgwLCB1bmRlZikgOiAwOworCX0KKworCXN5c3NlZWsoJGZoLCAtMjQsIFNFRUtfRU5EKSBvciBjcm9hayAic2VlazogJCEiOworCXN5c3JlYWQoJGZoLCBteSAkYnVmLCAyNCkgPT0gMjQgb3IgY3JvYWsgInJlYWQ6ICQhIjsKKwlteSAoJHIsICRjKSA9IHVucGFjayhyZXZfbWFwX2ZtdCwgJGJ1Zik7CisJaWYgKCR3YW50X2NvbW1pdCAmJiAkYyBlcSAoJzAnIHg0MCkpIHsKKwkJaWYgKCRzaXplIDwgNDgpIHsKKwkJCXJldHVybiAkd2FudF9jb21taXQgPyAoMCwgdW5kZWYpIDogMDsKKwkJfQorCQlzeXNzZWVrKCRmaCwgLTQ4LCBTRUVLX0VORCkgb3IgY3JvYWsgInNlZWs6ICQhIjsKKwkJc3lzcmVhZCgkZmgsICRidWYsIDI0KSA9PSAyNCBvciBjcm9hayAicmVhZDogJCEiOworCQkoJHIsICRjKSA9IHVucGFjayhyZXZfbWFwX2ZtdCwgJGJ1Zik7CisJCWlmICgkYyBlcSAoJzAneDQwKSkgeworCQkJY3JvYWsgIlBlbnVsdGltYXRlIHJlY29yZCBpcyBhbGwtemVyb2VzIGluICRtYXBfcGF0aCI7CisJCX0KKwl9CisJY2xvc2UgJGZoIG9yIGNyb2FrICJjbG9zZTogJCEiOworCSR3YW50X2NvbW1pdCA/ICgkciwgJGMpIDogJHI7Cit9CisKK3N1YiByZXZfbWFwX2dldCB7CisJbXkgKCRzZWxmLCAkcmV2LCAkdXVpZCkgPSBAXzsKKwlteSAkbWFwX3BhdGggPSAkc2VsZi0+bWFwX3BhdGgoJHV1aWQpOworCXJldHVybiB1bmRlZiB1bmxlc3MgLWUgJG1hcF9wYXRoOworCisJc3lzb3BlbihteSAkZmgsICRtYXBfcGF0aCwgT19SRE9OTFkpIG9yIGNyb2FrICJvcGVuOiAkISI7CisJbXkgJGMgPSBfcmV2X21hcF9nZXQoJGZoLCAkcmV2KTsKKwljbG9zZSgkZmgpIG9yIGNyb2FrICJjbG9zZTogJCEiOworCSRjCit9CisKK3N1YiBfcmV2X21hcF9nZXQgeworCW15ICgkZmgsICRyZXYpID0gQF87CisKKwliaW5tb2RlICRmaCBvciBjcm9hayAiYmlubW9kZTogJCEiOworCW15ICRzaXplID0gKHN0YXQoJGZoKSlbN107CisJKCRzaXplICUgMjQpID09IDAgb3IgY3JvYWsgImluY29uc2lzdGVudCBzaXplOiAkc2l6ZSI7CisKKwlpZiAoJHNpemUgPT0gMCkgeworCQlyZXR1cm4gdW5kZWY7CisJfQorCisJbXkgKCRsLCAkdSkgPSAoMCwgJHNpemUgLSAyNCk7CisJbXkgKCRyLCAkYywgJGJ1Zik7CisKKwl3aGlsZSAoJGwgPD0gJHUpIHsKKwkJbXkgJGkgPSBpbnQoKCRsLzI0ICsgJHUvMjQpIC8gMikgKiAyNDsKKwkJc3lzc2VlaygkZmgsICRpLCBTRUVLX1NFVCkgb3IgY3JvYWsgInNlZWs6ICQhIjsKKwkJc3lzcmVhZCgkZmgsIG15ICRidWYsIDI0KSA9PSAyNCBvciBjcm9hayAicmVhZDogJCEiOworCQlteSAoJHIsICRjKSA9IHVucGFjayhyZXZfbWFwX2ZtdCwgJGJ1Zik7CisKKwkJaWYgKCRyIDwgJHJldikgeworCQkJJGwgPSAkaSArIDI0OworCQl9IGVsc2lmICgkciA+ICRyZXYpIHsKKwkJCSR1ID0gJGkgLSAyNDsKKwkJfSBlbHNlIHsgIyAkciA9PSAkcmV2CisJCQlyZXR1cm4gJGMgZXEgKCcwJyB4IDQwKSA/IHVuZGVmIDogJGM7CisJCX0KKwl9CisJdW5kZWY7Cit9CisKKyMgRmluZHMgdGhlIGZpcnN0IHN2biByZXZpc2lvbiB0aGF0IGV4aXN0cyBvbiAoaWYgJGVxX29rIGlzIHRydWUpIG9yCisjIGJlZm9yZSAkcmV2IGZvciB0aGUgY3VycmVudCBicmFuY2guICBJdCB3aWxsIG5vdCBzZWFyY2ggYW55IGxvd2VyCisjIHRoYW4gJG1pbl9yZXYuICBSZXR1cm5zIHRoZSBnaXQgY29tbWl0IGhhc2ggYW5kIHN2biByZXZpc2lvbiBudW1iZXIKKyMgaWYgZm91bmQsIGVsc2UgKHVuZGVmLCB1bmRlZikuCitzdWIgZmluZF9yZXZfYmVmb3JlIHsKKwlteSAoJHNlbGYsICRyZXYsICRlcV9vaywgJG1pbl9yZXYpID0gQF87CisJLS0kcmV2IHVubGVzcyAkZXFfb2s7CisJJG1pbl9yZXYgfHw9IDE7CisJbXkgJG1heF9yZXYgPSAkc2VsZi0+cmV2X21hcF9tYXg7CisJJHJldiA9ICRtYXhfcmV2IGlmICgkcmV2ID4gJG1heF9yZXYpOworCXdoaWxlICgkcmV2ID49ICRtaW5fcmV2KSB7CisJCWlmIChteSAkYyA9ICRzZWxmLT5yZXZfbWFwX2dldCgkcmV2KSkgeworCQkJcmV0dXJuICgkcmV2LCAkYyk7CisJCX0KKwkJLS0kcmV2OworCX0KKwlyZXR1cm4gKHVuZGVmLCB1bmRlZik7Cit9CisKKyMgRmluZHMgdGhlIGZpcnN0IHN2biByZXZpc2lvbiB0aGF0IGV4aXN0cyBvbiAoaWYgJGVxX29rIGlzIHRydWUpIG9yCisjIGFmdGVyICRyZXYgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4gIEl0IHdpbGwgbm90IHNlYXJjaCBhbnkgaGlnaGVyCisjIHRoYW4gJG1heF9yZXYuICBSZXR1cm5zIHRoZSBnaXQgY29tbWl0IGhhc2ggYW5kIHN2biByZXZpc2lvbiBudW1iZXIKKyMgaWYgZm91bmQsIGVsc2UgKHVuZGVmLCB1bmRlZikuCitzdWIgZmluZF9yZXZfYWZ0ZXIgeworCW15ICgkc2VsZiwgJHJldiwgJGVxX29rLCAkbWF4X3JldikgPSBAXzsKKwkrKyRyZXYgdW5sZXNzICRlcV9vazsKKwkkbWF4X3JldiB8fD0gJHNlbGYtPnJldl9tYXBfbWF4OworCXdoaWxlICgkcmV2IDw9ICRtYXhfcmV2KSB7CisJCWlmIChteSAkYyA9ICRzZWxmLT5yZXZfbWFwX2dldCgkcmV2KSkgeworCQkJcmV0dXJuICgkcmV2LCAkYyk7CisJCX0KKwkJKyskcmV2OworCX0KKwlyZXR1cm4gKHVuZGVmLCB1bmRlZik7Cit9CisKK3N1YiBfbmV3IHsKKwlteSAoJGNsYXNzLCAkcmVwb19pZCwgJHJlZl9pZCwgJHBhdGgpID0gQF87CisJdW5sZXNzIChkZWZpbmVkICRyZXBvX2lkICYmIGxlbmd0aCAkcmVwb19pZCkgeworCQkkcmVwb19pZCA9ICRkZWZhdWx0X3JlcG9faWQ7CisJfQorCXVubGVzcyAoZGVmaW5lZCAkcmVmX2lkICYmIGxlbmd0aCAkcmVmX2lkKSB7CisJCSMgQWNjZXNzIHRoZSBwcmVmaXggb3B0aW9uIGZyb20gdGhlIGdpdC1zdm4gbWFpbiBwcm9ncmFtIGlmIGl0J3MgbG9hZGVkLgorCQlteSAkcHJlZml4ID0gZGVmaW5lZCAmOjpvcHRfcHJlZml4ID8gOjpvcHRfcHJlZml4KCkgOiAiIjsKKwkJJF9bMl0gPSAkcmVmX2lkID0KKwkJICAgICAgICAgICAgICJyZWZzL3JlbW90ZXMvJHByZWZpeCRkZWZhdWx0X3JlZl9pZCI7CisJfQorCSRfWzFdID0gJHJlcG9faWQ7CisJbXkgJHN2bl9kaXIgPSBzdm5fZGlyKCk7CisJbXkgJGRpciA9ICIkc3ZuX2Rpci8kcmVmX2lkIjsKKworCSMgT2xkZXIgcmVwb3MgaW1wb3J0ZWQgYnkgdXMgdXNlZCAkc3ZuX2Rpci9mb28gaW5zdGVhZCBvZgorCSMgJHN2bl9kaXIvcmVmcy9yZW1vdGVzL2ZvbyB3aGVuIHRyYWNraW5nIHJlZnMvcmVtb3Rlcy9mb28KKwlpZiAoJHJlZl9pZCA9fiBte15yZWZzL3JlbW90ZXMvKC4rKX0pIHsKKwkJbXkgJG9sZF9kaXIgPSAiJHN2bl9kaXIvJDEiOworCQlpZiAoLWQgJG9sZF9kaXIgJiYgISAtZCAkZGlyKSB7CisJCQkkZGlyID0gJG9sZF9kaXI7CisJCX0KKwl9CisKKwkkX1szXSA9ICRwYXRoID0gJycgdW5sZXNzIChkZWZpbmVkICRwYXRoKTsKKwlta3BhdGgoWyRkaXJdKTsKKwlteSAkb2JqID0gYmxlc3MgeworCQlyZWZfaWQgPT4gJHJlZl9pZCwgZGlyID0+ICRkaXIsIGluZGV4ID0+ICIkZGlyL2luZGV4IiwKKwkgICAgICAgIGNvbmZpZyA9PiAiJHN2bl9kaXIvY29uZmlnIiwKKwkgICAgICAgIG1hcF9yb290ID0+ICIkZGlyLy5yZXZfbWFwIiwgcmVwb19pZCA9PiAkcmVwb19pZCB9LCAkY2xhc3M7CisKKwkjIEVuc3VyZSBpdCBnZXRzIGNhbm9uaWNhbGl6ZWQKKwkkb2JqLT5wYXRoKCRwYXRoKTsKKworCXJldHVybiAkb2JqOworfQorCitzdWIgcGF0aCB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKworCWlmIChAXykgeworCQlteSAkcGF0aCA9IHNoaWZ0OworCQkkc2VsZi0+e19wYXRofSA9IGNhbm9uaWNhbGl6ZV9wYXRoKCRwYXRoKTsKKwkJcmV0dXJuOworCX0KKworCXJldHVybiAkc2VsZi0+e19wYXRofTsKK30KKworc3ViIHVybCB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKworCWlmIChAXykgeworCQlteSAkdXJsID0gc2hpZnQ7CisJCSRzZWxmLT57dXJsfSA9IGNhbm9uaWNhbGl6ZV91cmwoJHVybCk7CisJCXJldHVybjsKKwl9CisKKwlyZXR1cm4gJHNlbGYtPnt1cmx9OworfQorCisjIGZvciByZWFkLW9ubHkgYWNjZXNzIG9mIG9sZCAucmV2X2RiIGZvcm1hdHMKK3N1YiB1bmxpbmtfcmV2X2RiX3N5bWxpbmsgeworCW15ICgkc2VsZikgPSBAXzsKKwlteSAkbGluayA9ICRzZWxmLT5yZXZfZGJfcGF0aDsKKwkkbGluayA9fiBzL1wuW1x3LV0rJC8vIG9yIGNyb2FrICJtaXNzaW5nIFVVSUQgYXQgdGhlIGVuZCBvZiAkbGluayI7CisJaWYgKC1sICRsaW5rKSB7CisJCXVubGluayAkbGluayBvciBjcm9hayAidW5saW5rOiAkbGluayBmYWlsZWQhIjsKKwl9Cit9CisKK3N1YiByZXZfZGJfcGF0aCB7CisJbXkgKCRzZWxmLCAkdXVpZCkgPSBAXzsKKwlteSAkZGJfcGF0aCA9ICRzZWxmLT5tYXBfcGF0aCgkdXVpZCk7CisJJGRiX3BhdGggPX4gc3svXC5yZXZfbWFwXC59ey9cLnJldl9kYlwufQorCSAgICBvciBjcm9hayAibWFwX3BhdGg6ICRkYl9wYXRoIGRvZXMgbm90IGNvbnRhaW4gJy8ucmV2X21hcC4nICEiOworCSRkYl9wYXRoOworfQorCisjIHRoZSBuZXcgcmVwbGFjZW1lbnQgZm9yIC5yZXZfZGIKK3N1YiBtYXBfcGF0aCB7CisJbXkgKCRzZWxmLCAkdXVpZCkgPSBAXzsKKwkkdXVpZCB8fD0gJHNlbGYtPnJhX3V1aWQ7CisJIiRzZWxmLT57bWFwX3Jvb3R9LiR1dWlkIjsKK30KKworc3ViIHVyaV9lbmNvZGUgeworCW15ICgkZikgPSBAXzsKKwkkZiA9fiBzIyhbXmEtekEtWjAtOVwqIVw6X1wuL1wtXSkjc3ByaW50ZigiJSUlMDJYIixvcmQoJDEpKSNlZzsKKwkkZgorfQorCitzdWIgdXJpX2RlY29kZSB7CisJbXkgKCRmKSA9IEBfOworCSRmID1+IHMjJShbMC05YS1mQS1GXXsyfSkjY2hyKGhleCgkMSkpI2VnOworCSRmCit9CisKK3N1YiByZW1vdmVfdXNlcm5hbWUgeworCSRfWzBdID1+IHN7XihbXjpdKjovLylbXkBdK0B9eyQxfTsKK30KKworMTsKZGlmZiAtLWdpdCBhL3BlcmwvR2l0L1NWTi9FZGl0b3IucG0gYi9wZXJsL0dpdC9TVk4vRWRpdG9yLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZjE2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4vRWRpdG9yLnBtCkBAIC0wLDAgKzEsNjA1IEBACitwYWNrYWdlIEdpdDo6U1ZOOjpFZGl0b3I7Cit1c2UgdmFycyBxdy9ASVNBICRfcm1kaXIgJF9jcF9zaW1pbGFyaXR5ICRfZmluZF9jb3BpZXNfaGFyZGVyICRfcmVuYW1lX2xpbWl0LzsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgU1ZOOjpDb3JlOwordXNlIFNWTjo6RGVsdGE7Cit1c2UgQ2FycCBxdy9jcm9hay87Cit1c2UgR2l0IHF3L2NvbW1hbmQgY29tbWFuZF9vbmVsaW5lIGNvbW1hbmRfbm9pc3kgY29tbWFuZF9vdXRwdXRfcGlwZQorICAgICAgICAgICBjb21tYW5kX2lucHV0X3BpcGUgY29tbWFuZF9jbG9zZV9waXBlCisgICAgICAgICAgIGNvbW1hbmRfYmlkaV9waXBlIGNvbW1hbmRfY2xvc2VfYmlkaV9waXBlCisgICAgICAgICAgIGdldF9yZWNvcmQvOworCitCRUdJTiB7CisJQElTQSA9IHF3KFNWTjo6RGVsdGE6OkVkaXRvcik7Cit9CisKK3N1YiBuZXcgeworCW15ICgkY2xhc3MsICRvcHRzKSA9IEBfOworCWZvcmVhY2ggKHF3L3N2bl9wYXRoIHIgcmEgdHJlZV9hIHRyZWVfYiBsb2cgZWRpdG9yX2NiLykgeworCQlkaWUgIiRfIHJlcXVpcmVkIVxuIiB1bmxlc3MgKGRlZmluZWQgJG9wdHMtPnskX30pOworCX0KKworCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXc7CisJbXkgJG1vZHMgPSBnZW5lcmF0ZV9kaWZmKCRvcHRzLT57dHJlZV9hfSwgJG9wdHMtPnt0cmVlX2J9KTsKKwlteSAkdHlwZXMgPSBjaGVja19kaWZmX3BhdGhzKCRvcHRzLT57cmF9LCAkb3B0cy0+e3N2bl9wYXRofSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvcHRzLT57cn0sICRtb2RzKTsKKworCSMgJG9wdHMtPntyYX0gZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgdXNlZCBhZnRlciB0aGlzOgorCW15IEBjZSAgPSAkb3B0cy0+e3JhfS0+Z2V0X2NvbW1pdF9lZGl0b3IoJG9wdHMtPntsb2d9LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3B0cy0+e2VkaXRvcl9jYn0sICRwb29sKTsKKwlteSAkc2VsZiA9IFNWTjo6RGVsdGE6OkVkaXRvci0+bmV3KEBjZSwgJHBvb2wpOworCWJsZXNzICRzZWxmLCAkY2xhc3M7CisJZm9yZWFjaCAocXcvc3ZuX3BhdGggciB0cmVlX2EgdHJlZV9iLykgeworCQkkc2VsZi0+eyRffSA9ICRvcHRzLT57JF99OworCX0KKwkkc2VsZi0+e3VybH0gPSAkb3B0cy0+e3JhfS0+e3VybH07CisJJHNlbGYtPnttb2RzfSA9ICRtb2RzOworCSRzZWxmLT57dHlwZXN9ID0gJHR5cGVzOworCSRzZWxmLT57cG9vbH0gPSAkcG9vbDsKKwkkc2VsZi0+e2JhdH0gPSB7ICcnID0+ICRzZWxmLT5vcGVuX3Jvb3QoJHNlbGYtPntyfSwgJHNlbGYtPntwb29sfSkgfTsKKwkkc2VsZi0+e3JtfSA9IHsgfTsKKwkkc2VsZi0+e3BhdGhfcHJlZml4fSA9IGxlbmd0aCAkc2VsZi0+e3N2bl9wYXRofSA/CisJICAgICAgICAgICAgICAgICAgICAgICAiJHNlbGYtPntzdm5fcGF0aH0vIiA6ICcnOworCSRzZWxmLT57Y29uZmlnfSA9ICRvcHRzLT57Y29uZmlnfTsKKwkkc2VsZi0+e21lcmdlaW5mb30gPSAkb3B0cy0+e21lcmdlaW5mb307CisJJHNlbGYtPntwYXRobmFtZWVuY29kaW5nfSA9IEdpdDo6Y29uZmlnKCdzdm4ucGF0aG5hbWVlbmNvZGluZycpOworCXJldHVybiAkc2VsZjsKK30KKworc3ViIGdlbmVyYXRlX2RpZmYgeworCW15ICgkdHJlZV9hLCAkdHJlZV9iKSA9IEBfOworCW15IEBkaWZmX3RyZWUgPSBxdyhkaWZmLXRyZWUgLXogLXIpOworCWlmICgkX2NwX3NpbWlsYXJpdHkpIHsKKwkJcHVzaCBAZGlmZl90cmVlLCAiLUMkX2NwX3NpbWlsYXJpdHkiOworCX0gZWxzZSB7CisJCXB1c2ggQGRpZmZfdHJlZSwgJy1DJzsKKwl9CisJcHVzaCBAZGlmZl90cmVlLCAnLS1maW5kLWNvcGllcy1oYXJkZXInIGlmICRfZmluZF9jb3BpZXNfaGFyZGVyOworCXB1c2ggQGRpZmZfdHJlZSwgIi1sJF9yZW5hbWVfbGltaXQiIGlmIGRlZmluZWQgJF9yZW5hbWVfbGltaXQ7CisJcHVzaCBAZGlmZl90cmVlLCAkdHJlZV9hLCAkdHJlZV9iOworCW15ICgkZGlmZl9maCwgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKEBkaWZmX3RyZWUpOworCW15ICRzdGF0ZSA9ICdtZXRhJzsKKwlteSBAbW9kczsKKwl3aGlsZSAoZGVmaW5lZCgkXyA9IGdldF9yZWNvcmQoJGRpZmZfZmgsICJcMCIpKSkgeworCQlpZiAoJHN0YXRlIGVxICdtZXRhJyAmJiAvXjooXGR7Nn0pXHMoXGR7Nn0pXHMKKwkJCQkJKCQ6OnNoYTEpXHMoJDo6c2hhMSlccworCQkJCQkoW01UQ1JBRF0pXGQqJC94bykgeworCQkJcHVzaCBAbW9kcywgewltb2RlX2EgPT4gJDEsIG1vZGVfYiA9PiAkMiwKKwkJCQkJc2hhMV9hID0+ICQzLCBzaGExX2IgPT4gJDQsCisJCQkJCWNoZyA9PiAkNSB9OworCQkJaWYgKCQ1ID1+IC9eKD86Q3xSKSQvKSB7CisJCQkJJHN0YXRlID0gJ2ZpbGVfYSc7CisJCQl9IGVsc2UgeworCQkJCSRzdGF0ZSA9ICdmaWxlX2InOworCQkJfQorCQl9IGVsc2lmICgkc3RhdGUgZXEgJ2ZpbGVfYScpIHsKKwkJCW15ICR4ID0gJG1vZHNbJCNtb2RzXSBvciBjcm9hayAiRW1wdHkgYXJyYXlcbiI7CisJCQlpZiAoJHgtPntjaGd9ICF+IC9eKD86Q3xSKSQvKSB7CisJCQkJY3JvYWsgIkVycm9yIHBhcnNpbmcgJF8sICR4LT57Y2hnfVxuIjsKKwkJCX0KKwkJCSR4LT57ZmlsZV9hfSA9ICRfOworCQkJJHN0YXRlID0gJ2ZpbGVfYic7CisJCX0gZWxzaWYgKCRzdGF0ZSBlcSAnZmlsZV9iJykgeworCQkJbXkgJHggPSAkbW9kc1skI21vZHNdIG9yIGNyb2FrICJFbXB0eSBhcnJheVxuIjsKKwkJCWlmIChleGlzdHMgJHgtPntmaWxlX2F9ICYmICR4LT57Y2hnfSAhfiAvXig/OkN8UikkLykgeworCQkJCWNyb2FrICJFcnJvciBwYXJzaW5nICRfLCAkeC0+e2NoZ31cbiI7CisJCQl9CisJCQlpZiAoIWV4aXN0cyAkeC0+e2ZpbGVfYX0gJiYgJHgtPntjaGd9ID1+IC9eKD86Q3xSKSQvKSB7CisJCQkJY3JvYWsgIkVycm9yIHBhcnNpbmcgJF8sICR4LT57Y2hnfVxuIjsKKwkJCX0KKwkJCSR4LT57ZmlsZV9ifSA9ICRfOworCQkJJHN0YXRlID0gJ21ldGEnOworCQl9IGVsc2UgeworCQkJY3JvYWsgIkVycm9yIHBhcnNpbmcgJF9cbiI7CisJCX0KKwl9CisJY29tbWFuZF9jbG9zZV9waXBlKCRkaWZmX2ZoLCAkY3R4KTsKKwlcQG1vZHM7Cit9CisKK3N1YiBjaGVja19kaWZmX3BhdGhzIHsKKwlteSAoJHJhLCAkcGZ4LCAkcmV2LCAkbW9kcykgPSBAXzsKKwlteSAldHlwZXM7CisJJHBmeCAuPSAnLycgaWYgbGVuZ3RoICRwZng7CisKKwlzdWIgdHlwZV9kaWZmX3BhdGhzIHsKKwkJbXkgKCRyYSwgJHR5cGVzLCAkcGF0aCwgJHJldikgPSBAXzsKKwkJbXkgQHAgPSBzcGxpdCBtIy8rIywgJHBhdGg7CisJCW15ICRjID0gc2hpZnQgQHA7CisJCXVubGVzcyAoZGVmaW5lZCAkdHlwZXMtPnskY30pIHsKKwkJCSR0eXBlcy0+eyRjfSA9ICRyYS0+Y2hlY2tfcGF0aCgkYywgJHJldik7CisJCX0KKwkJd2hpbGUgKEBwKSB7CisJCQkkYyAuPSAnLycgLiBzaGlmdCBAcDsKKwkJCW5leHQgaWYgZGVmaW5lZCAkdHlwZXMtPnskY307CisJCQkkdHlwZXMtPnskY30gPSAkcmEtPmNoZWNrX3BhdGgoJGMsICRyZXYpOworCQl9CisJfQorCisJZm9yZWFjaCBteSAkbSAoQCRtb2RzKSB7CisJCWZvcmVhY2ggbXkgJGYgKHF3L2ZpbGVfYSBmaWxlX2IvKSB7CisJCQluZXh0IHVubGVzcyBkZWZpbmVkICRtLT57JGZ9OworCQkJbXkgKCRkaXIpID0gKCRtLT57JGZ9ID1+IG0jXiguKj8pLz8oPzpbXi9dKykkIyk7CisJCQlpZiAobGVuZ3RoICRwZnguJGRpciAmJiAhIGRlZmluZWQgJHR5cGVzeyRkaXJ9KSB7CisJCQkJdHlwZV9kaWZmX3BhdGhzKCRyYSwgXCV0eXBlcywgJHBmeC4kZGlyLCAkcmV2KTsKKwkJCX0KKwkJfQorCX0KKwlcJXR5cGVzOworfQorCitzdWIgc3BsaXRfcGF0aCB7CisJcmV0dXJuICgkX1swXSA9fiBtI14oLio/KS8/KFteL10rKSQjKTsKK30KKworc3ViIHJlcG9fcGF0aCB7CisJbXkgKCRzZWxmLCAkcGF0aCkgPSBAXzsKKwlpZiAobXkgJGVuYyA9ICRzZWxmLT57cGF0aG5hbWVlbmNvZGluZ30pIHsKKwkJcmVxdWlyZSBFbmNvZGU7CisJCUVuY29kZTo6ZnJvbV90bygkcGF0aCwgJGVuYywgJ1VURi04Jyk7CisJfQorCSRzZWxmLT57cGF0aF9wcmVmaXh9LihkZWZpbmVkICRwYXRoID8gJHBhdGggOiAnJyk7Cit9CisKK3N1YiB1cmxfcGF0aCB7CisJbXkgKCRzZWxmLCAkcGF0aCkgPSBAXzsKKwkkcGF0aCA9ICRzZWxmLT5yZXBvX3BhdGgoJHBhdGgpOworCWlmICgkc2VsZi0+e3VybH0gPX4gbSNeaHR0cHM/Oi8vIykgeworCQkjIGNoYXJhY3RlcnMgYXJlIHRha2VuIGZyb20gc3VidmVyc2lvbi9saWJzdm5fc3Vici9wYXRoLmMKKwkJJHBhdGggPX4gcyMoW15+YS16QS1aMC05Xy4vISQmJygpKissLV0pI3NwcmludGYoIiUlJTAyWCIsb3JkKCQxKSkjZWc7CisJfQorCSRzZWxmLT57dXJsfSAuICcvJyAuICRwYXRoOworfQorCitzdWIgcm1kaXJzIHsKKwlteSAoJHNlbGYpID0gQF87CisJbXkgJHJtID0gJHNlbGYtPntybX07CisJZGVsZXRlICRybS0+eycnfTsgIyB3ZSBuZXZlciBkZWxldGUgdGhlIHVybCB3ZSdyZSB0cmFja2luZworCXJldHVybiB1bmxlc3MgJSRybTsKKworCWZvcmVhY2ggKGtleXMgJSRybSkgeworCQlteSBAZCA9IHNwbGl0IG0jLyMsICRfOworCQlteSAkYyA9IHNoaWZ0IEBkOworCQkkcm0tPnskY30gPSAxOworCQl3aGlsZSAoQGQpIHsKKwkJCSRjIC49ICcvJyAuIHNoaWZ0IEBkOworCQkJJHJtLT57JGN9ID0gMTsKKwkJfQorCX0KKwlkZWxldGUgJHJtLT57JHNlbGYtPntzdm5fcGF0aH19OworCWRlbGV0ZSAkcm0tPnsnJ307ICMgd2UgbmV2ZXIgZGVsZXRlIHRoZSB1cmwgd2UncmUgdHJhY2tpbmcKKwlyZXR1cm4gdW5sZXNzICUkcm07CisKKwlteSAoJGZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUocXcvbHMtdHJlZSAtLW5hbWUtb25seSAtciAtei8sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT57dHJlZV9ifSk7CisJd2hpbGUgKGRlZmluZWQoJF8gPSBnZXRfcmVjb3JkKCRmaCwgIlwwIikpKSB7CisJCW15IEBkbiA9IHNwbGl0IG0jLyMsICRfOworCQl3aGlsZSAocG9wIEBkbikgeworCQkJZGVsZXRlICRybS0+e2pvaW4gJy8nLCBAZG59OworCQl9CisJCXVubGVzcyAoJSRybSkgeworCQkJY2xvc2UgJGZoOworCQkJcmV0dXJuOworCQl9CisJfQorCWNvbW1hbmRfY2xvc2VfcGlwZSgkZmgsICRjdHgpOworCisJbXkgKCRyLCAkcCwgJGJhdCkgPSAoJHNlbGYtPntyfSwgJHNlbGYtPntwb29sfSwgJHNlbGYtPntiYXR9KTsKKwlmb3JlYWNoIG15ICRkIChzb3J0IHsgJGIgPX4gdHIjLyMvIyA8PT4gJGEgPX4gdHIjLyMvIyB9IGtleXMgJSRybSkgeworCQkkc2VsZi0+Y2xvc2VfZGlyZWN0b3J5KCRiYXQtPnskZH0sICRwKTsKKwkJbXkgKCRkbikgPSAoJGQgPX4gbSNeKC4qPykvPyg/OlteL10rKSQjKTsKKwkJcHJpbnQgIlx0RCtcdCRkL1xuIiB1bmxlc3MgJDo6X3E7CisJCSRzZWxmLT5TVVBFUjo6ZGVsZXRlX2VudHJ5KCRkLCAkciwgJGJhdC0+eyRkbn0sICRwKTsKKwkJZGVsZXRlICRiYXQtPnskZH07CisJfQorfQorCitzdWIgb3Blbl9vcl9hZGRfZGlyIHsKKwlteSAoJHNlbGYsICRmdWxsX3BhdGgsICRiYXRvbiwgJGRlbGV0aW9ucykgPSBAXzsKKwlteSAkdCA9ICRzZWxmLT57dHlwZXN9LT57JGZ1bGxfcGF0aH07CisJaWYgKCFkZWZpbmVkICR0KSB7CisJCWRpZSAiJGZ1bGxfcGF0aCBub3Qga25vd24gaW4gciRzZWxmLT57cn0gb3Igd2UgaGF2ZSBhIGJ1ZyFcbiI7CisJfQorCXsKKwkJbm8gd2FybmluZ3MgJ29uY2UnOworCQkjIFNWTjo6Tm9kZTo6bm9uZSBhbmQgU1ZOOjpOb2RlOjpmaWxlIGFyZSB1c2VkIG9ubHkgb25jZSwKKwkJIyBzbyB3ZSdyZSBzaHV0dGluZyB1cCBQZXJsJ3Mgd2FybmluZ3MgYWJvdXQgdGhlbS4KKwkJaWYgKCR0ID09ICRTVk46Ok5vZGU6Om5vbmUgfHwgZGVmaW5lZCgkZGVsZXRpb25zLT57JGZ1bGxfcGF0aH0pKSB7CisJCQlyZXR1cm4gJHNlbGYtPmFkZF9kaXJlY3RvcnkoJGZ1bGxfcGF0aCwgJGJhdG9uLAorCQkJICAgIHVuZGVmLCAtMSwgJHNlbGYtPntwb29sfSk7CisJCX0gZWxzaWYgKCR0ID09ICRTVk46Ok5vZGU6OmRpcikgeworCQkJcmV0dXJuICRzZWxmLT5vcGVuX2RpcmVjdG9yeSgkZnVsbF9wYXRoLCAkYmF0b24sCisJCQkgICAgJHNlbGYtPntyfSwgJHNlbGYtPntwb29sfSk7CisJCX0gIyBubyB3YXJuaW5ncyAnb25jZScKKwkJcHJpbnQgU1RERVJSICIkZnVsbF9wYXRoIGFscmVhZHkgZXhpc3RzIGluIHJlcG9zaXRvcnkgYXQgIiwKKwkJICAgICJyJHNlbGYtPntyfSBhbmQgaXQgaXMgbm90IGEgZGlyZWN0b3J5ICgiLAorCQkgICAgKCR0ID09ICRTVk46Ok5vZGU6OmZpbGUgPyAnZmlsZScgOiAndW5rbm93bicpLCIvJHQpXG4iOworCX0gIyBubyB3YXJuaW5ncyAnb25jZScKKwlleGl0IDE7Cit9CisKK3N1YiBlbnN1cmVfcGF0aCB7CisJbXkgKCRzZWxmLCAkcGF0aCwgJGRlbGV0aW9ucykgPSBAXzsKKwlteSAkYmF0ID0gJHNlbGYtPntiYXR9OworCW15ICRyZXBvX3BhdGggPSAkc2VsZi0+cmVwb19wYXRoKCRwYXRoKTsKKwlyZXR1cm4gJGJhdC0+eycnfSB1bmxlc3MgKGxlbmd0aCAkcmVwb19wYXRoKTsKKworCW15IEBwID0gc3BsaXQgbSMvKyMsICRyZXBvX3BhdGg7CisJbXkgJGMgPSBzaGlmdCBAcDsKKwkkYmF0LT57JGN9IHx8PSAkc2VsZi0+b3Blbl9vcl9hZGRfZGlyKCRjLCAkYmF0LT57Jyd9LCAkZGVsZXRpb25zKTsKKwl3aGlsZSAoQHApIHsKKwkJbXkgJGMwID0gJGM7CisJCSRjIC49ICcvJyAuIHNoaWZ0IEBwOworCQkkYmF0LT57JGN9IHx8PSAkc2VsZi0+b3Blbl9vcl9hZGRfZGlyKCRjLCAkYmF0LT57JGMwfSwgJGRlbGV0aW9ucyk7CisJfQorCXJldHVybiAkYmF0LT57JGN9OworfQorCisjIFN1YnJvdXRpbmUgdG8gY29udmVydCBhIGdsb2JiaW5nIHBhdHRlcm4gdG8gYSByZWd1bGFyIGV4cHJlc3Npb24uCisjIEZyb20gcGVybCBjb29rYm9vay4KK3N1YiBnbG9iMnBhdCB7CisJbXkgJGdsb2JzdHIgPSBzaGlmdDsKKwlteSAlcGF0bWFwID0gKCcqJyA9PiAnLionLCAnPycgPT4gJy4nLCAnWycgPT4gJ1snLCAnXScgPT4gJ10nKTsKKwkkZ2xvYnN0ciA9fiBzeyguKX0geyAkcGF0bWFweyQxfSB8fCAiXFEkMSIgfWdlOworCXJldHVybiAnXicgLiAkZ2xvYnN0ciAuICckJzsKK30KKworc3ViIGNoZWNrX2F1dG9wcm9wIHsKKwlteSAoJHNlbGYsICRwYXR0ZXJuLCAkcHJvcGVydGllcywgJGZpbGUsICRmYmF0KSA9IEBfOworCSMgQ29udmVydCB0aGUgZ2xvYmJpbmcgcGF0dGVybiB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKwlteSAkcmVnZXggPSBnbG9iMnBhdCgkcGF0dGVybik7CisJIyBDaGVjayBpZiB0aGUgcGF0dGVybiBtYXRjaGVzIHRoZSBmaWxlIG5hbWUuCisJaWYoJGZpbGUgPX4gbS8oJHJlZ2V4KS8pIHsKKwkJIyBQYXJzZSB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIHRvIHNldC4KKwkJbXkgQHByb3BzID0gc3BsaXQoLzsvLCAkcHJvcGVydGllcyk7CisJCWZvcmVhY2ggbXkgJHByb3AgKEBwcm9wcykgeworCQkJIyBQYXJzZSAnbmFtZT12YWx1ZScgc3ludGF4IGFuZCBzZXQgdGhlIHByb3BlcnR5LgorCQkJaWYgKCRwcm9wID1+IC8oW149XSspPSguKikvKSB7CisJCQkJbXkgKCRuLCR2KSA9ICgkMSwkMik7CisJCQkJZm9yICgkbiwgJHYpIHsKKwkJCQkJcy9eXHMrLy87IHMvXHMrJC8vOworCQkJCX0KKwkJCQkkc2VsZi0+Y2hhbmdlX2ZpbGVfcHJvcCgkZmJhdCwgJG4sICR2KTsKKwkJCX0KKwkJfQorCX0KK30KKworc3ViIGFwcGx5X2F1dG9wcm9wcyB7CisJbXkgKCRzZWxmLCAkZmlsZSwgJGZiYXQpID0gQF87CisJbXkgJGNvbmZfdCA9ICR7JHNlbGYtPntjb25maWd9fXsnY29uZmlnJ307CisJbm8gd2FybmluZ3MgJ29uY2UnOworCSMgQ2hlY2sgW21pc2NlbGxhbnldL2VuYWJsZS1hdXRvLXByb3BzIGluIHN2biBjb25maWd1cmF0aW9uLgorCWlmIChTVk46Ol9Db3JlOjpzdm5fY29uZmlnX2dldF9ib29sKAorCQkkY29uZl90LAorCQkkU1ZOOjpfQ29yZTo6U1ZOX0NPTkZJR19TRUNUSU9OX01JU0NFTExBTlksCisJCSRTVk46Ol9Db3JlOjpTVk5fQ09ORklHX09QVElPTl9FTkFCTEVfQVVUT19QUk9QUywKKwkJMCkpIHsKKwkJIyBBdXRvLXByb3BzIGFyZSBlbmFibGVkLiAgRW51bWVyYXRlIHRoZW0gdG8gbG9vayBmb3IgbWF0Y2hlcy4KKwkJbXkgJGNhbGxiYWNrID0gc3ViIHsKKwkJCSRzZWxmLT5jaGVja19hdXRvcHJvcCgkX1swXSwgJF9bMV0sICRmaWxlLCAkZmJhdCk7CisJCX07CisJCVNWTjo6X0NvcmU6OnN2bl9jb25maWdfZW51bWVyYXRlKAorCQkJJGNvbmZfdCwKKwkJCSRTVk46Ol9Db3JlOjpTVk5fQ09ORklHX1NFQ1RJT05fQVVUT19QUk9QUywKKwkJCSRjYWxsYmFjayk7CisJfQorfQorCitzdWIgY2hlY2tfYXR0ciB7CisJbXkgKCRhdHRyLCRwYXRoKSA9IEBfOworCW15ICR2YWwgPSBjb21tYW5kX29uZWxpbmUoImNoZWNrLWF0dHIiLCAkYXR0ciwgIi0tIiwgJHBhdGgpOworCWlmICgkdmFsKSB7ICR2YWwgPX4gcy9eW146XSo6XHMqW146XSo6XHMqKC4qKVxzKiQvJDEvOyB9CisJcmV0dXJuICR2YWw7Cit9CisKK3N1YiBhcHBseV9tYW51YWxwcm9wcyB7CisJbXkgKCRzZWxmLCAkZmlsZSwgJGZiYXQpID0gQF87CisJbXkgJHBlbmRpbmdfcHJvcGVydGllcyA9IGNoZWNrX2F0dHIoICJzdm4tcHJvcGVydGllcyIsICRmaWxlICk7CisJaWYgKCRwZW5kaW5nX3Byb3BlcnRpZXMgZXEgIiIpIHsgcmV0dXJuOyB9CisJIyBQYXJzZSB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIHRvIHNldC4KKwlteSBAcHJvcHMgPSBzcGxpdCgvOy8sICRwZW5kaW5nX3Byb3BlcnRpZXMpOworCSMgVE9ETzogZ2V0IGV4aXN0aW5nIHByb3BlcnRpZXMgdG8gY29tcGFyZSB0bworCSMgLSB0aGlzIGZhaWxzIGZvciBhZGQgc28gY3VycmVudGx5IG5vdCBkb25lCisJIyBteSAkZXhpc3RpbmdfcHJvcHMgPSA6OmdldF9zdm5wcm9wcygkZmlsZSk7CisJbXkgJGV4aXN0aW5nX3Byb3BzID0ge307CisJIyBUT0RPOiBjYWNoaW5nIHN2biBwcm9wZXJ0aWVzIG9yIHN0b3JpbmcgdGhlbSBpbiAuZ2l0YXR0cmlidXRlcworCSMgd291bGQgbWFrZSB0aGF0IGZhc3RlcgorCWZvcmVhY2ggbXkgJHByb3AgKEBwcm9wcykgeworCQkjIFBhcnNlICduYW1lPXZhbHVlJyBzeW50YXggYW5kIHNldCB0aGUgcHJvcGVydHkuCisJCWlmICgkcHJvcCA9fiAvKFtePV0rKT0oLiopLykgeworCQkJbXkgKCRuLCR2KSA9ICgkMSwkMik7CisJCQlmb3IgKCRuLCAkdikgeworCQkJCXMvXlxzKy8vOyBzL1xzKyQvLzsKKwkJCX0KKwkJCW15ICRleGlzdGluZyA9ICRleGlzdGluZ19wcm9wcy0+eyRufTsKKwkJCWlmICghZGVmaW5lZCgkZXhpc3RpbmcpIHx8ICRleGlzdGluZyBuZSAkdikgeworCQkJICAgICRzZWxmLT5jaGFuZ2VfZmlsZV9wcm9wKCRmYmF0LCAkbiwgJHYpOworCQkJfQorCQl9CisJfQorfQorCitzdWIgQSB7CisJbXkgKCRzZWxmLCAkbSwgJGRlbGV0aW9ucykgPSBAXzsKKwlteSAoJGRpciwgJGZpbGUpID0gc3BsaXRfcGF0aCgkbS0+e2ZpbGVfYn0pOworCW15ICRwYmF0ID0gJHNlbGYtPmVuc3VyZV9wYXRoKCRkaXIsICRkZWxldGlvbnMpOworCW15ICRmYmF0ID0gJHNlbGYtPmFkZF9maWxlKCRzZWxmLT5yZXBvX3BhdGgoJG0tPntmaWxlX2J9KSwgJHBiYXQsCisJCQkJCXVuZGVmLCAtMSk7CisJcHJpbnQgIlx0QVx0JG0tPntmaWxlX2J9XG4iIHVubGVzcyAkOjpfcTsKKwkkc2VsZi0+YXBwbHlfYXV0b3Byb3BzKCRmaWxlLCAkZmJhdCk7CisJJHNlbGYtPmFwcGx5X21hbnVhbHByb3BzKCRtLT57ZmlsZV9ifSwgJGZiYXQpOworCSRzZWxmLT5jaGdfZmlsZSgkZmJhdCwgJG0pOworCSRzZWxmLT5jbG9zZV9maWxlKCRmYmF0LHVuZGVmLCRzZWxmLT57cG9vbH0pOworfQorCitzdWIgQyB7CisJbXkgKCRzZWxmLCAkbSwgJGRlbGV0aW9ucykgPSBAXzsKKwlteSAoJGRpciwgJGZpbGUpID0gc3BsaXRfcGF0aCgkbS0+e2ZpbGVfYn0pOworCW15ICRwYmF0ID0gJHNlbGYtPmVuc3VyZV9wYXRoKCRkaXIsICRkZWxldGlvbnMpOworCSMgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gc3ZuIHNlcmYgYmFja2VuZCAodjEuOC41IGFuZCBiZWxvdyk6CisJIyBzdG9yZSB0aGlyZCBhcmd1bWVudCB0byAtPmFkZF9maWxlKCkgaW4gYSBsb2NhbCB2YXJpYWJsZSwgdG8gbWFrZSBpdAorCSMgaGF2ZSB0aGUgc2FtZSBsaWZldGltZSBhcyAkZmJhdAorCW15ICR1cGEgPSAkc2VsZi0+dXJsX3BhdGgoJG0tPntmaWxlX2F9KTsKKwlteSAkZmJhdCA9ICRzZWxmLT5hZGRfZmlsZSgkc2VsZi0+cmVwb19wYXRoKCRtLT57ZmlsZV9ifSksICRwYmF0LAorCQkJCSR1cGEsICRzZWxmLT57cn0pOworCXByaW50ICJcdENcdCRtLT57ZmlsZV9hfSA9PiAkbS0+e2ZpbGVfYn1cbiIgdW5sZXNzICQ6Ol9xOworCSRzZWxmLT5hcHBseV9tYW51YWxwcm9wcygkbS0+e2ZpbGVfYn0sICRmYmF0KTsKKwkkc2VsZi0+Y2hnX2ZpbGUoJGZiYXQsICRtKTsKKwkkc2VsZi0+Y2xvc2VfZmlsZSgkZmJhdCx1bmRlZiwkc2VsZi0+e3Bvb2x9KTsKK30KKworc3ViIGRlbGV0ZV9lbnRyeSB7CisJbXkgKCRzZWxmLCAkcGF0aCwgJHBiYXQpID0gQF87CisJbXkgJHJwYXRoID0gJHNlbGYtPnJlcG9fcGF0aCgkcGF0aCk7CisJbXkgKCRkaXIsICRmaWxlKSA9IHNwbGl0X3BhdGgoJHJwYXRoKTsKKwkkc2VsZi0+e3JtfS0+eyRkaXJ9ID0gMTsKKwkkc2VsZi0+U1VQRVI6OmRlbGV0ZV9lbnRyeSgkcnBhdGgsICRzZWxmLT57cn0sICRwYmF0LCAkc2VsZi0+e3Bvb2x9KTsKK30KKworc3ViIFIgeworCW15ICgkc2VsZiwgJG0sICRkZWxldGlvbnMpID0gQF87CisJbXkgKCRkaXIsICRmaWxlKSA9IHNwbGl0X3BhdGgoJG0tPntmaWxlX2J9KTsKKwlteSAkcGJhdCA9ICRzZWxmLT5lbnN1cmVfcGF0aCgkZGlyLCAkZGVsZXRpb25zKTsKKwkjIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIHN2biBzZXJmIGJhY2tlbmQsIHNlZSBjb21tZW50IGluIEMoKSBhYm92ZQorCW15ICR1cGEgPSAkc2VsZi0+dXJsX3BhdGgoJG0tPntmaWxlX2F9KTsKKwlteSAkZmJhdCA9ICRzZWxmLT5hZGRfZmlsZSgkc2VsZi0+cmVwb19wYXRoKCRtLT57ZmlsZV9ifSksICRwYmF0LAorCQkJCSR1cGEsICRzZWxmLT57cn0pOworCXByaW50ICJcdFJcdCRtLT57ZmlsZV9hfSA9PiAkbS0+e2ZpbGVfYn1cbiIgdW5sZXNzICQ6Ol9xOworCSRzZWxmLT5hcHBseV9hdXRvcHJvcHMoJGZpbGUsICRmYmF0KTsKKwkkc2VsZi0+YXBwbHlfbWFudWFscHJvcHMoJG0tPntmaWxlX2J9LCAkZmJhdCk7CisJJHNlbGYtPmNoZ19maWxlKCRmYmF0LCAkbSk7CisJJHNlbGYtPmNsb3NlX2ZpbGUoJGZiYXQsdW5kZWYsJHNlbGYtPntwb29sfSk7CisKKwkoJGRpciwgJGZpbGUpID0gc3BsaXRfcGF0aCgkbS0+e2ZpbGVfYX0pOworCSRwYmF0ID0gJHNlbGYtPmVuc3VyZV9wYXRoKCRkaXIsICRkZWxldGlvbnMpOworCSRzZWxmLT5kZWxldGVfZW50cnkoJG0tPntmaWxlX2F9LCAkcGJhdCk7Cit9CisKK3N1YiBNIHsKKwlteSAoJHNlbGYsICRtLCAkZGVsZXRpb25zKSA9IEBfOworCW15ICgkZGlyLCAkZmlsZSkgPSBzcGxpdF9wYXRoKCRtLT57ZmlsZV9ifSk7CisJbXkgJHBiYXQgPSAkc2VsZi0+ZW5zdXJlX3BhdGgoJGRpciwgJGRlbGV0aW9ucyk7CisJbXkgJGZiYXQgPSAkc2VsZi0+b3Blbl9maWxlKCRzZWxmLT5yZXBvX3BhdGgoJG0tPntmaWxlX2J9KSwKKwkJCQkkcGJhdCwkc2VsZi0+e3J9LCRzZWxmLT57cG9vbH0pOworCXByaW50ICJcdCRtLT57Y2hnfVx0JG0tPntmaWxlX2J9XG4iIHVubGVzcyAkOjpfcTsKKwkkc2VsZi0+YXBwbHlfbWFudWFscHJvcHMoJG0tPntmaWxlX2J9LCAkZmJhdCk7CisJJHNlbGYtPmNoZ19maWxlKCRmYmF0LCAkbSk7CisJJHNlbGYtPmNsb3NlX2ZpbGUoJGZiYXQsdW5kZWYsJHNlbGYtPntwb29sfSk7Cit9CisKK3N1YiBUIHsKKwlteSAoJHNlbGYsICRtLCAkZGVsZXRpb25zKSA9IEBfOworCisJIyBXb3JrIGFyb3VuZCBzdWJ2ZXJzaW9uIGlzc3VlIDQwOTE6IHRvZ2dsaW5nIHRoZSAiaXMgYQorCSMgc3ltbGluayIgcHJvcGVydHkgcmVxdWlyZXMgcmVtb3ZpbmcgYW5kIHJlLWFkZGluZyBhCisJIyBmaWxlIG9yIGVsc2UgInN2biB1cCIgb24gYWZmZWN0ZWQgY2xpZW50cyB0cmlwcyBhbgorCSMgYXNzZXJ0aW9uIGFuZCBhYm9ydHMuCisJaWYgKCgkbS0+e21vZGVfYn0gPX4gL14xMjAvICYmICRtLT57bW9kZV9hfSAhfiAvXjEyMC8pIHx8CisJICAgICgkbS0+e21vZGVfYn0gIX4gL14xMjAvICYmICRtLT57bW9kZV9hfSA9fiAvXjEyMC8pKSB7CisJCSRzZWxmLT5EKHsKKwkJCW1vZGVfYSA9PiAkbS0+e21vZGVfYX0sIG1vZGVfYiA9PiAnMDAwMDAwJywKKwkJCXNoYTFfYSA9PiAkbS0+e3NoYTFfYX0sIHNoYTFfYiA9PiAnMCcgeCA0MCwKKwkJCWNoZyA9PiAnRCcsIGZpbGVfYiA9PiAkbS0+e2ZpbGVfYn0KKwkJfSwgJGRlbGV0aW9ucyk7CisJCSRzZWxmLT5BKHsKKwkJCW1vZGVfYSA9PiAnMDAwMDAwJywgbW9kZV9iID0+ICRtLT57bW9kZV9ifSwKKwkJCXNoYTFfYSA9PiAnMCcgeCA0MCwgc2hhMV9iID0+ICRtLT57c2hhMV9ifSwKKwkJCWNoZyA9PiAnQScsIGZpbGVfYiA9PiAkbS0+e2ZpbGVfYn0KKwkJfSwgJGRlbGV0aW9ucyk7CisJCXJldHVybjsKKwl9CisKKwkkc2VsZi0+TSgkbSwgJGRlbGV0aW9ucyk7Cit9CisKK3N1YiBjaGFuZ2VfZmlsZV9wcm9wIHsKKwlteSAoJHNlbGYsICRmYmF0LCAkcG5hbWUsICRwdmFsKSA9IEBfOworCSRzZWxmLT5TVVBFUjo6Y2hhbmdlX2ZpbGVfcHJvcCgkZmJhdCwgJHBuYW1lLCAkcHZhbCwgJHNlbGYtPntwb29sfSk7Cit9CisKK3N1YiBjaGFuZ2VfZGlyX3Byb3AgeworCW15ICgkc2VsZiwgJHBiYXQsICRwbmFtZSwgJHB2YWwpID0gQF87CisJJHNlbGYtPlNVUEVSOjpjaGFuZ2VfZGlyX3Byb3AoJHBiYXQsICRwbmFtZSwgJHB2YWwsICRzZWxmLT57cG9vbH0pOworfQorCitzdWIgX2NoZ19maWxlX2dldF9ibG9iICgkJCQkKSB7CisJbXkgKCRzZWxmLCAkZmJhdCwgJG0sICR3aGljaCkgPSBAXzsKKwlteSAkZmggPSAkOjpfcmVwb3NpdG9yeS0+dGVtcF9hY3F1aXJlKCJnaXRfYmxvYl8kd2hpY2giKTsKKwlpZiAoJG0tPnsibW9kZV8kd2hpY2gifSA9fiAvXjEyMC8pIHsKKwkJcHJpbnQgJGZoICdsaW5rICcgb3IgY3JvYWsgJCE7CisJCSRzZWxmLT5jaGFuZ2VfZmlsZV9wcm9wKCRmYmF0LCdzdm46c3BlY2lhbCcsJyonKTsKKwl9IGVsc2lmICgkbS0+e21vZGVfYX0gPX4gL14xMjAvICYmICRtLT57Im1vZGVfJHdoaWNoIn0gIX4gL14xMjAvKSB7CisJCSRzZWxmLT5jaGFuZ2VfZmlsZV9wcm9wKCRmYmF0LCdzdm46c3BlY2lhbCcsdW5kZWYpOworCX0KKwlteSAkYmxvYiA9ICRtLT57InNoYTFfJHdoaWNoIn07CisJcmV0dXJuICgkZmgsKSBpZiAoJGJsb2IgPX4gL14wezQwfSQvKTsKKwlteSAkc2l6ZSA9ICQ6Ol9yZXBvc2l0b3J5LT5jYXRfYmxvYigkYmxvYiwgJGZoKTsKKwljcm9hayAiRmFpbGVkIHRvIHJlYWQgb2JqZWN0ICRibG9iIiBpZiAoJHNpemUgPCAwKTsKKwkkZmgtPmZsdXNoID09IDAgb3IgY3JvYWsgJCE7CisJc2VlayAkZmgsIDAsIDAgb3IgY3JvYWsgJCE7CisKKwlteSAkZXhwID0gOjptZDVzdW0oJGZoKTsKKwlzZWVrICRmaCwgMCwgMCBvciBjcm9hayAkITsKKwlyZXR1cm4gKCRmaCwgJGV4cCk7Cit9CisKK3N1YiBjaGdfZmlsZSB7CisJbXkgKCRzZWxmLCAkZmJhdCwgJG0pID0gQF87CisJaWYgKCRtLT57bW9kZV9ifSA9fiAvNzU1JC8gJiYgJG0tPnttb2RlX2F9ICF+IC83NTUkLykgeworCQkkc2VsZi0+Y2hhbmdlX2ZpbGVfcHJvcCgkZmJhdCwnc3ZuOmV4ZWN1dGFibGUnLCcqJyk7CisJfSBlbHNpZiAoJG0tPnttb2RlX2J9ICF+IC83NTUkLyAmJiAkbS0+e21vZGVfYX0gPX4gLzc1NSQvKSB7CisJCSRzZWxmLT5jaGFuZ2VfZmlsZV9wcm9wKCRmYmF0LCdzdm46ZXhlY3V0YWJsZScsdW5kZWYpOworCX0KKwlteSAoJGZoX2EsICRleHBfYSkgPSBfY2hnX2ZpbGVfZ2V0X2Jsb2IgJHNlbGYsICRmYmF0LCAkbSwgJ2EnOworCW15ICgkZmhfYiwgJGV4cF9iKSA9IF9jaGdfZmlsZV9nZXRfYmxvYiAkc2VsZiwgJGZiYXQsICRtLCAnYic7CisJbXkgJHBvb2wgPSBTVk46OlBvb2wtPm5ldzsKKwlteSAkYXRkID0gJHNlbGYtPmFwcGx5X3RleHRkZWx0YSgkZmJhdCwgJGV4cF9hLCAkcG9vbCk7CisJaWYgKC1zICRmaF9hKSB7CisJCW15ICR0eHN0cmVhbSA9IFNWTjo6VHhEZWx0YTo6bmV3ICgkZmhfYSwgJGZoX2IsICRwb29sKTsKKwkJbXkgJHJlcyA9IFNWTjo6VHhEZWx0YTo6c2VuZF90eHN0cmVhbSgkdHhzdHJlYW0sIEAkYXRkLCAkcG9vbCk7CisJCWlmIChkZWZpbmVkICRyZXMpIHsKKwkJCWRpZSAiVW5leHBlY3RlZCByZXN1bHQgZnJvbSBzZW5kX3R4c3RyZWFtOiAkcmVzXG4iLAorCQkJICAgICIoU1ZOOjpDb3JlOjpWRVJTSU9OOiAkU1ZOOjpDb3JlOjpWRVJTSU9OKVxuIjsKKwkJfQorCX0gZWxzZSB7CisJCW15ICRnb3QgPSBTVk46OlR4RGVsdGE6OnNlbmRfc3RyZWFtKCRmaF9iLCBAJGF0ZCwgJHBvb2wpOworCQlkaWUgIkNoZWNrc3VtIG1pc21hdGNoXG5leHBlY3RlZDogJGV4cF9iXG5nb3Q6ICRnb3RcbiIKKwkJICAgIGlmICgkZ290IG5lICRleHBfYik7CisJfQorCUdpdDo6dGVtcF9yZWxlYXNlKCRmaF9iLCAxKTsKKwlHaXQ6OnRlbXBfcmVsZWFzZSgkZmhfYSwgMSk7CisJJHBvb2wtPmNsZWFyOworfQorCitzdWIgRCB7CisJbXkgKCRzZWxmLCAkbSwgJGRlbGV0aW9ucykgPSBAXzsKKwlteSAoJGRpciwgJGZpbGUpID0gc3BsaXRfcGF0aCgkbS0+e2ZpbGVfYn0pOworCW15ICRwYmF0ID0gJHNlbGYtPmVuc3VyZV9wYXRoKCRkaXIsICRkZWxldGlvbnMpOworCXByaW50ICJcdERcdCRtLT57ZmlsZV9ifVxuIiB1bmxlc3MgJDo6X3E7CisJJHNlbGYtPmRlbGV0ZV9lbnRyeSgkbS0+e2ZpbGVfYn0sICRwYmF0KTsKK30KKworc3ViIGNsb3NlX2VkaXQgeworCW15ICgkc2VsZikgPSBAXzsKKwlteSAoJHAsJGJhdCkgPSAoJHNlbGYtPntwb29sfSwgJHNlbGYtPntiYXR9KTsKKwlmb3JlYWNoIChzb3J0IHsgJGIgPX4gdHIjLyMvIyA8PT4gJGEgPX4gdHIjLyMvIyB9IGtleXMgJSRiYXQpIHsKKwkJbmV4dCBpZiAkXyBlcSAnJzsKKwkJJHNlbGYtPmNsb3NlX2RpcmVjdG9yeSgkYmF0LT57JF99LCAkcCk7CisJfQorCSRzZWxmLT5jbG9zZV9kaXJlY3RvcnkoJGJhdC0+eycnfSwgJHApOworCSRzZWxmLT5TVVBFUjo6Y2xvc2VfZWRpdCgkcCk7CisJJHAtPmNsZWFyOworfQorCitzdWIgYWJvcnRfZWRpdCB7CisJbXkgKCRzZWxmKSA9IEBfOworCSRzZWxmLT5TVVBFUjo6YWJvcnRfZWRpdCgkc2VsZi0+e3Bvb2x9KTsKK30KKworc3ViIERFU1RST1kgeworCW15ICRzZWxmID0gc2hpZnQ7CisJJHNlbGYtPlNVUEVSOjpERVNUUk9ZKEBfKTsKKwkkc2VsZi0+e3Bvb2x9LT5jbGVhcjsKK30KKworIyB0aGlzIGRyaXZlcyB0aGUgZWRpdG9yCitzdWIgYXBwbHlfZGlmZiB7CisJbXkgKCRzZWxmKSA9IEBfOworCW15ICRtb2RzID0gJHNlbGYtPnttb2RzfTsKKwlteSAlbyA9ICggRCA9PiAwLCBDID0+IDEsIFIgPT4gMiwgQSA9PiAzLCBNID0+IDQsIFQgPT4gNSApOworCW15ICVkZWxldGlvbnM7CisKKwlmb3JlYWNoIG15ICRtIChAJG1vZHMpIHsKKwkJaWYgKCRtLT57Y2hnfSBlcSAiRCIpIHsKKwkJCSRkZWxldGlvbnN7JG0tPntmaWxlX2J9fSA9IDE7CisJCX0KKwl9CisKKwlmb3JlYWNoIG15ICRtIChzb3J0IHsgJG97JGEtPntjaGd9fSA8PT4gJG97JGItPntjaGd9fSB9IEAkbW9kcykgeworCQlteSAkZiA9ICRtLT57Y2hnfTsKKwkJaWYgKGRlZmluZWQgJG97JGZ9KSB7CisJCQkkc2VsZi0+JGYoJG0sIFwlZGVsZXRpb25zKTsKKwkJfSBlbHNlIHsKKwkJCWZhdGFsKCJJbnZhbGlkIGNoYW5nZSB0eXBlOiAkZiIpOworCQl9CisJfQorCisJaWYgKGRlZmluZWQoJHNlbGYtPnttZXJnZWluZm99KSkgeworCQkkc2VsZi0+Y2hhbmdlX2Rpcl9wcm9wKCRzZWxmLT57YmF0fXsnJ30sICJzdm46bWVyZ2VpbmZvIiwKKwkJCSAgICAgICAgICAgICAgICRzZWxmLT57bWVyZ2VpbmZvfSk7CisJfQorCSRzZWxmLT5ybWRpcnMgaWYgJF9ybWRpcjsKKwlpZiAoQCRtb2RzID09IDAgJiYgIWRlZmluZWQoJHNlbGYtPnttZXJnZWluZm99KSkgeworCQkkc2VsZi0+YWJvcnRfZWRpdDsKKwl9IGVsc2UgeworCQkkc2VsZi0+Y2xvc2VfZWRpdDsKKwl9CisJcmV0dXJuIHNjYWxhciBAJG1vZHM7Cit9CisKKzE7CitfX0VORF9fCisKKz1oZWFkMSBOQU1FCisKK0dpdDo6U1ZOOjpFZGl0b3IgLSBjb21taXQgZHJpdmVyIGZvciAiZ2l0IHN2biBzZXQtdHJlZSIgYW5kIGRjb21taXQKKworPWhlYWQxIFNZTk9QU0lTCisKKwl1c2UgR2l0OjpTVk46OkVkaXRvcjsKKwl1c2UgR2l0OjpTVk46OlJhOworCisJbXkgJHJhID0gR2l0OjpTVk46OlJhLT5uZXcoJHVybCk7CisJbXkgJW9wdHMgPSAoCisJCXIgPT4gMTksCisJCWxvZyA9PiAibG9nIG1lc3NhZ2UiLAorCQlyYSA9PiAkcmEsCisJCWNvbmZpZyA9PiBTVk46OkNvcmU6OmNvbmZpZ19nZXRfY29uZmlnKCRzdm5fY29uZmlnX2RpciksCisJCXRyZWVfYSA9PiAiJGNvbW1pdF4iLAorCQl0cmVlX2IgPT4gIiRjb21taXQiLAorCQllZGl0b3JfY2IgPT4gc3ViIHsgcHJpbnQgIkNvbW1pdHRlZCByJF9bMF1cbiI7IH0sCisJCW1lcmdlaW5mbyA9PiAiL2JyYW5jaGVzL2ZvbzoxLTEwIiwKKwkJc3ZuX3BhdGggPT4gInRydW5rIgorCSk7CisJR2l0OjpTVk46OkVkaXRvci0+bmV3KFwlb3B0cyktPmFwcGx5X2RpZmYgb3IgcHJpbnQgIk5vIGNoYW5nZXNcbiI7CisKKwlteSAkcmUgPSBHaXQ6OlNWTjo6RWRpdG9yOjpnbG9iMnBhdCgidHJ1bmsvKiIpOworCWlmICgkYnJhbmNobmFtZSA9fiAvJHJlLykgeworCQlwcmludCAibWF0Y2hlZCFcbiI7CisJfQorCis9aGVhZDEgREVTQ1JJUFRJT04KKworVGhpcyBtb2R1bGUgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIHRoZSAiZ2l0IHN2biIgY29tbWFuZC4KK0RvIG5vdCB1c2UgaXQgdW5sZXNzIHlvdSBhcmUgZGV2ZWxvcGluZyBnaXQtc3ZuLgorCitUaGlzIG1vZHVsZSBhZGFwdHMgdGhlIEM8U1ZOOjpEZWx0YTo6RWRpdG9yPiBvYmplY3QgcmV0dXJuZWQgYnkKK0M8U1ZOOjpEZWx0YTo6Z2V0X2NvbW1pdF9lZGl0b3I+IGFuZCBkcml2ZXMgaXQgdG8gY29udmV5IHRoZQorZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBnaXQgdHJlZSBvYmplY3RzIHRvIGEgcmVtb3RlIFN1YnZlcnNpb24KK3JlcG9zaXRvcnkuCisKK1RoZSBpbnRlcmZhY2Ugd2lsbCBjaGFuZ2UgYXMgZ2l0LXN2biBldm9sdmVzLgorCis9aGVhZDEgREVQRU5ERU5DSUVTCisKK1N1YnZlcnNpb24gcGVybCBiaW5kaW5ncywKK3RoZSBjb3JlIEw8Q2FycD4gbW9kdWxlLAorYW5kIGdpdCdzIEw8R2l0PiBoZWxwZXIgbW9kdWxlLgorCitDPEdpdDo6U1ZOOjpFZGl0b3I+IGhhcyBub3QgYmVlbiB0ZXN0ZWQgdXNpbmcgY2FsbGVycyBvdGhlciB0aGFuCitCPGdpdC1zdm4+IGl0c2VsZi4KKworPWhlYWQxIFNFRSBBTFNPCisKK0w8U1ZOOjpEZWx0YT4sCitMPEdpdDo6U1ZOOjpGZXRjaGVyPi4KKworPWhlYWQxIElOQ09NUEFUSUJJTElUSUVTCisKK05vbmUgcmVwb3J0ZWQuCisKKz1oZWFkMSBCVUdTCisKK05vbmUuCmRpZmYgLS1naXQgYS9wZXJsL0dpdC9TVk4vRmV0Y2hlci5wbSBiL3BlcmwvR2l0L1NWTi9GZXRjaGVyLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZTkwMGEKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4vRmV0Y2hlci5wbQpAQCAtMCwwICsxLDYyMiBAQAorcGFja2FnZSBHaXQ6OlNWTjo6RmV0Y2hlcjsKK3VzZSB2YXJzIHF3L0BJU0EgJF9pZ25vcmVfcmVnZXggJF9pbmNsdWRlX3JlZ2V4ICRfcHJlc2VydmVfZW1wdHlfZGlycworICAgICAgICAgICAgJF9wbGFjZWhvbGRlcl9maWxlbmFtZSBAZGVsZXRlZF9ncGF0aCAlYWRkZWRfcGxhY2Vob2xkZXIKKyAgICAgICAgICAgICRyZXBvX2lkLzsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgU1ZOOjpEZWx0YTsKK3VzZSBDYXJwIHF3L2Nyb2FrLzsKK3VzZSBGaWxlOjpCYXNlbmFtZSBxdy9kaXJuYW1lLzsKK3VzZSBHaXQgcXcvY29tbWFuZCBjb21tYW5kX29uZWxpbmUgY29tbWFuZF9ub2lzeSBjb21tYW5kX291dHB1dF9waXBlCisgICAgICAgICAgIGNvbW1hbmRfaW5wdXRfcGlwZSBjb21tYW5kX2Nsb3NlX3BpcGUKKyAgICAgICAgICAgY29tbWFuZF9iaWRpX3BpcGUgY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUKKyAgICAgICAgICAgZ2V0X3JlY29yZC87CitCRUdJTiB7CisJQElTQSA9IHF3KFNWTjo6RGVsdGE6OkVkaXRvcik7Cit9CisKKyMgZmlsZSBiYXRvbiBtZW1iZXJzOiBwYXRoLCBtb2RlX2EsIG1vZGVfYiwgcG9vbCwgZmgsIGJsb2IsIGJhc2UKK3N1YiBuZXcgeworCW15ICgkY2xhc3MsICRnaXRfc3ZuLCAkc3dpdGNoX3BhdGgpID0gQF87CisJbXkgJHNlbGYgPSBTVk46OkRlbHRhOjpFZGl0b3ItPm5ldzsKKwlibGVzcyAkc2VsZiwgJGNsYXNzOworCWlmIChleGlzdHMgJGdpdF9zdm4tPntsYXN0X2NvbW1pdH0pIHsKKwkJJHNlbGYtPntjfSA9ICRnaXRfc3ZuLT57bGFzdF9jb21taXR9OworCQkkc2VsZi0+e2VtcHR5X3N5bWxpbmtzfSA9CisJCSAgICAgICAgICAgICAgICAgIF9tYXJrX2VtcHR5X3N5bWxpbmtzKCRnaXRfc3ZuLCAkc3dpdGNoX3BhdGgpOworCX0KKworCSMgc29tZSBvcHRpb25zIGFyZSByZWFkIGdsb2JhbGx5LCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gbG9jYWxseQorCSMgcGVyIFtzdm4tcmVtb3RlICIuLi4iXSBzZWN0aW9uLiAgQ29tbWFuZC1saW5lIG9wdGlvbnMgd2lsbCAqTk9UKgorCSMgb3ZlcnJpZGUgb3B0aW9ucyBzZXQgaW4gYW4gW3N2bi1yZW1vdGUgIi4uLiJdIHNlY3Rpb24KKwkkcmVwb19pZCA9ICRnaXRfc3ZuLT57cmVwb19pZH07CisJbXkgJGsgPSAic3ZuLXJlbW90ZS4kcmVwb19pZC5pZ25vcmUtcGF0aHMiOworCW15ICR2ID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywgJGspIH07CisJJHNlbGYtPntpZ25vcmVfcmVnZXh9ID0gJHY7CisKKwkkayA9ICJzdm4tcmVtb3RlLiRyZXBvX2lkLmluY2x1ZGUtcGF0aHMiOworCSR2ID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywgJGspIH07CisJJHNlbGYtPntpbmNsdWRlX3JlZ2V4fSA9ICR2OworCisJJGsgPSAic3ZuLXJlbW90ZS4kcmVwb19pZC5wcmVzZXJ2ZS1lbXB0eS1kaXJzIjsKKwkkdiA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldCcsICctLWJvb2wnLCAkaykgfTsKKwlpZiAoJHYgJiYgJHYgZXEgJ3RydWUnKSB7CisJCSRfcHJlc2VydmVfZW1wdHlfZGlycyA9IDE7CisJCSRrID0gInN2bi1yZW1vdGUuJHJlcG9faWQucGxhY2Vob2xkZXItZmlsZW5hbWUiOworCQkkdiA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldCcsICRrKSB9OworCQkkX3BsYWNlaG9sZGVyX2ZpbGVuYW1lID0gJHY7CisJfQorCisJIyBMb2FkIHRoZSBsaXN0IG9mIHBsYWNlaG9sZGVyIGZpbGVzIGFkZGVkIGR1cmluZyBwcmV2aW91cyBpbnZvY2F0aW9ucy4KKwkkayA9ICJzdm4tcmVtb3RlLiRyZXBvX2lkLmFkZGVkLXBsYWNlaG9sZGVyIjsKKwkkdiA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldC1hbGwnLCAkaykgfTsKKwlpZiAoJF9wcmVzZXJ2ZV9lbXB0eV9kaXJzICYmICR2KSB7CisJCSMgY29tbWFuZCgpIHByaW50cyBlcnJvcnMgdG8gc3RkZXJyLCBzbyB3ZSBvbmx5IGNhbGwgaXQgaWYKKwkJIyBjb21tYW5kX29uZWxpbmUoKSBzdWNjZWVkZWQuCisJCW15IEB2ID0gY29tbWFuZCgnY29uZmlnJywgJy0tZ2V0LWFsbCcsICRrKTsKKwkJJGFkZGVkX3BsYWNlaG9sZGVyeyBkaXJuYW1lKCRfKSB9ID0gJF8gZm9yZWFjaCBAdjsKKwl9CisKKwkkc2VsZi0+e2VtcHR5fSA9IHt9OworCSRzZWxmLT57ZGlyX3Byb3B9ID0ge307CisJJHNlbGYtPntmaWxlX3Byb3B9ID0ge307CisJJHNlbGYtPnthYnNlbnRfZGlyfSA9IHt9OworCSRzZWxmLT57YWJzZW50X2ZpbGV9ID0ge307CisJcmVxdWlyZSBHaXQ6OkluZGV4SW5mbzsKKwkkc2VsZi0+e2dpaX0gPSAkZ2l0X3N2bi0+dG1wX2luZGV4X2RvKHN1YiB7IEdpdDo6SW5kZXhJbmZvLT5uZXcgfSk7CisJJHNlbGYtPntwYXRobmFtZWVuY29kaW5nfSA9IEdpdDo6Y29uZmlnKCdzdm4ucGF0aG5hbWVlbmNvZGluZycpOworCSRzZWxmOworfQorCisjIHRoaXMgdXNlcyB0aGUgUmEgb2JqZWN0LCBzbyBpdCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgZG9fe3N3aXRjaCx1cGRhdGV9LAorIyBub3QgaW5zaWRlIHRoZW0gKHdoZW4gdGhlIEdpdDo6U1ZOOjpGZXRjaGVyIG9iamVjdCBpcyBwYXNzZWQpIHRvCisjIGRvX3tzd2l0Y2gsdXBkYXRlfQorc3ViIF9tYXJrX2VtcHR5X3N5bWxpbmtzIHsKKwlteSAoJGdpdF9zdm4sICRzd2l0Y2hfcGF0aCkgPSBAXzsKKwlteSAkYm9vbCA9IEdpdDo6Y29uZmlnX2Jvb2woJ3N2bi5icm9rZW5TeW1saW5rV29ya2Fyb3VuZCcpOworCXJldHVybiB7fSBpZiAoIWRlZmluZWQoJGJvb2wpKSB8fCAoZGVmaW5lZCgkYm9vbCkgJiYgISAkYm9vbCk7CisKKwlteSAlcmV0OworCW15ICgkcmV2LCAkY210KSA9ICRnaXRfc3ZuLT5sYXN0X3Jldl9jb21taXQ7CisJcmV0dXJuIHt9IHVubGVzcyAoJHJldiAmJiAkY210KTsKKworCSMgYWxsb3cgdGhlIHdhcm5pbmcgdG8gYmUgcHJpbnRlZCBmb3IgZWFjaCByZXZpc2lvbiB3ZSBmZXRjaCB0bworCSMgZW5zdXJlIHRoZSB1c2VyIHNlZXMgaXQuICBUaGUgdXNlciBjYW4gYWxzbyBkaXNhYmxlIHRoZSB3b3JrYXJvdW5kCisJIyBvbiB0aGUgcmVwb3NpdG9yeSBldmVuIHdoaWxlIGdpdCBzdm4gaXMgcnVubmluZyBhbmQgdGhlIG5leHQKKwkjIHJldmlzaW9uIGZldGNoZWQgd2lsbCBza2lwIHRoaXMgZXhwZW5zaXZlIGZ1bmN0aW9uLgorCW15ICRwcmludGVkX3dhcm5pbmc7CisJY2hvbXAobXkgJGVtcHR5X2Jsb2IgPSBgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS1zdGRpbiA8IC9kZXYvbnVsbGApOworCW15ICgkbHMsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShxdy9scy10cmVlIC1yIC16LywgJGNtdCk7CisJbXkgJHBmeCA9IGRlZmluZWQoJHN3aXRjaF9wYXRoKSA/ICRzd2l0Y2hfcGF0aCA6ICRnaXRfc3ZuLT5wYXRoOworCSRwZnggLj0gJy8nIGlmIGxlbmd0aCgkcGZ4KTsKKwl3aGlsZSAoZGVmaW5lZCgkXyA9IGdldF9yZWNvcmQoJGxzLCAiXDAiKSkpIHsKKwkJcy9cQTEwMDY0NCBibG9iICRlbXB0eV9ibG9iXHQvL28gb3IgbmV4dDsKKwkJdW5sZXNzICgkcHJpbnRlZF93YXJuaW5nKSB7CisJCQlwcmludCBTVERFUlIgIlNjYW5uaW5nIGZvciBlbXB0eSBzeW1saW5rcywgIiwKKwkJCSAgICAgICAgICAgICAidGhpcyBtYXkgdGFrZSBhIHdoaWxlIGlmIHlvdSBoYXZlICIsCisJCQkJICAgICAibWFueSBlbXB0eSBmaWxlc1xuIiwKKwkJCQkgICAgICJZb3UgbWF5IGRpc2FibGUgdGhpcyB3aXRoIGAiLAorCQkJCSAgICAgImdpdCBjb25maWcgc3ZuLmJyb2tlblN5bWxpbmtXb3JrYXJvdW5kICIsCisJCQkJICAgICAiZmFsc2UnLlxuIiwKKwkJCQkgICAgICJUaGlzIG1heSBiZSBkb25lIGluIGEgZGlmZmVyZW50ICIsCisJCQkJICAgICAidGVybWluYWwgd2l0aG91dCByZXN0YXJ0aW5nICIsCisJCQkJICAgICAiZ2l0IHN2blxuIjsKKwkJCSRwcmludGVkX3dhcm5pbmcgPSAxOworCQl9CisJCW15ICRwYXRoID0gJF87CisJCW15ICh1bmRlZiwgJHByb3BzKSA9CisJCSAgICAgICAgICAgICAgICRnaXRfc3ZuLT5yYS0+Z2V0X2ZpbGUoJHBmeC4kcGF0aCwgJHJldiwgdW5kZWYpOworCQlpZiAoJHByb3BzLT57J3N2bjpzcGVjaWFsJ30pIHsKKwkJCSRyZXR7JHBhdGh9ID0gMTsKKwkJfQorCX0KKwljb21tYW5kX2Nsb3NlX3BpcGUoJGxzLCAkY3R4KTsKKwlcJXJldDsKK30KKworIyByZXR1cm5zIHRydWUgaWYgYSBnaXZlbiBwYXRoIGlzIGluc2lkZSBhICIuZ2l0IiBkaXJlY3RvcnkKK3N1YiBpbl9kb3RfZ2l0IHsKKwkkX1swXSA9fiBteyg/Ol58LylcLmdpdCg/Oi98JCl9OworfQorCisjIHJldHVybiB2YWx1ZTogMCAtLSBkb24ndCBpZ25vcmUsIDEgLS0gaWdub3JlCisjIFRoaXMgd2lsbCBhbHNvIGNoZWNrIHdoZXRoZXIgdGhlIHBhdGggaXMgZXhwbGljaXRseSBpbmNsdWRlZAorc3ViIGlzX3BhdGhfaWdub3JlZCB7CisJbXkgKCRzZWxmLCAkcGF0aCkgPSBAXzsKKwlyZXR1cm4gMSBpZiBpbl9kb3RfZ2l0KCRwYXRoKTsKKwlyZXR1cm4gMSBpZiBkZWZpbmVkKCRzZWxmLT57aWdub3JlX3JlZ2V4fSkgJiYKKwkgICAgICAgICAgICAkcGF0aCA9fiBtISRzZWxmLT57aWdub3JlX3JlZ2V4fSE7CisJcmV0dXJuIDAgaWYgZGVmaW5lZCgkc2VsZi0+e2luY2x1ZGVfcmVnZXh9KSAmJgorCSAgICAgICAgICAgICRwYXRoID1+IG0hJHNlbGYtPntpbmNsdWRlX3JlZ2V4fSE7CisJcmV0dXJuIDAgaWYgZGVmaW5lZCgkX2luY2x1ZGVfcmVnZXgpICYmCisJICAgICAgICAgICAgJHBhdGggPX4gbSEkX2luY2x1ZGVfcmVnZXghOworCXJldHVybiAxIGlmIGRlZmluZWQoJHNlbGYtPntpbmNsdWRlX3JlZ2V4fSk7CisJcmV0dXJuIDEgaWYgZGVmaW5lZCgkX2luY2x1ZGVfcmVnZXgpOworCXJldHVybiAwIHVubGVzcyBkZWZpbmVkKCRfaWdub3JlX3JlZ2V4KTsKKwlyZXR1cm4gMSBpZiAkcGF0aCA9fiBtISRfaWdub3JlX3JlZ2V4IW87CisJcmV0dXJuIDA7Cit9CisKK3N1YiBzZXRfcGF0aF9zdHJpcCB7CisJbXkgKCRzZWxmLCAkcGF0aCkgPSBAXzsKKwkkc2VsZi0+e3BhdGhfc3RyaXB9ID0gcXIvXlxRJHBhdGhcRShcL3wkKS8gaWYgbGVuZ3RoICRwYXRoOworfQorCitzdWIgb3Blbl9yb290IHsKKwl7IHBhdGggPT4gJycgfTsKK30KKworc3ViIG9wZW5fZGlyZWN0b3J5IHsKKwlteSAoJHNlbGYsICRwYXRoLCAkcGIsICRyZXYpID0gQF87CisJeyBwYXRoID0+ICRwYXRoIH07Cit9CisKK3N1YiBnaXRfcGF0aCB7CisJbXkgKCRzZWxmLCAkcGF0aCkgPSBAXzsKKwlpZiAobXkgJGVuYyA9ICRzZWxmLT57cGF0aG5hbWVlbmNvZGluZ30pIHsKKwkJcmVxdWlyZSBFbmNvZGU7CisJCUVuY29kZTo6ZnJvbV90bygkcGF0aCwgJ1VURi04JywgJGVuYyk7CisJfQorCWlmICgkc2VsZi0+e3BhdGhfc3RyaXB9KSB7CisJCSRwYXRoID1+IHMhJHNlbGYtPntwYXRoX3N0cmlwfSEhIG9yCisJCSAgZGllICJGYWlsZWQgdG8gc3RyaXAgcGF0aCAnJHBhdGgnICgkc2VsZi0+e3BhdGhfc3RyaXB9KVxuIjsKKwl9CisJJHBhdGg7Cit9CisKK3N1YiBkZWxldGVfZW50cnkgeworCW15ICgkc2VsZiwgJHBhdGgsICRyZXYsICRwYikgPSBAXzsKKwlyZXR1cm4gdW5kZWYgaWYgJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkcGF0aCk7CisKKwlteSAkZ3BhdGggPSAkc2VsZi0+Z2l0X3BhdGgoJHBhdGgpOworCXJldHVybiB1bmRlZiBpZiAoJGdwYXRoIGVxICcnKTsKKworCSMgcmVtb3ZlIGVudGlyZSBkaXJlY3Rvcmllcy4KKwlteSAoJHRyZWUpID0gKGNvbW1hbmQoJ2xzLXRyZWUnLCAnLXonLCAkc2VsZi0+e2N9LCAiLi8kZ3BhdGgiKQorCSAgICAgICAgICAgICAgICAgPX4gL1xBMDQwMDAwIHRyZWUgKFthLWZcZF17NDB9KVx0XFEkZ3BhdGhcRVwwLyk7CisJaWYgKCR0cmVlKSB7CisJCW15ICgkbHMsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShxdy9scy10cmVlCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtciAtLW5hbWUtb25seSAtei8sCisJCQkJICAgICAgICAgICAgICAgICAgICAgJHRyZWUpOworCQl3aGlsZSAoZGVmaW5lZCgkXyA9IGdldF9yZWNvcmQoJGxzLCAiXDAiKSkpIHsKKwkJCW15ICRybXBhdGggPSAiJGdwYXRoLyRfIjsKKwkJCSRzZWxmLT57Z2lpfS0+cmVtb3ZlKCRybXBhdGgpOworCQkJcHJpbnQgIlx0RFx0JHJtcGF0aFxuIiB1bmxlc3MgJDo6X3E7CisJCX0KKwkJcHJpbnQgIlx0RFx0JGdwYXRoL1xuIiB1bmxlc3MgJDo6X3E7CisJCWNvbW1hbmRfY2xvc2VfcGlwZSgkbHMsICRjdHgpOworCX0gZWxzZSB7CisJCSRzZWxmLT57Z2lpfS0+cmVtb3ZlKCRncGF0aCk7CisJCXByaW50ICJcdERcdCRncGF0aFxuIiB1bmxlc3MgJDo6X3E7CisJfQorCSMgRG9uJ3QgYWRkIHRvIEBkZWxldGVkX2dwYXRoIGlmIHdlJ3JlIGRlbGV0aW5nIGEgcGxhY2Vob2xkZXIgZmlsZS4KKwlwdXNoIEBkZWxldGVkX2dwYXRoLCAkZ3BhdGggdW5sZXNzICRhZGRlZF9wbGFjZWhvbGRlcntkaXJuYW1lKCRwYXRoKX07CisJJHNlbGYtPntlbXB0eX0tPnskcGF0aH0gPSAwOworCXVuZGVmOworfQorCitzdWIgb3Blbl9maWxlIHsKKwlteSAoJHNlbGYsICRwYXRoLCAkcGIsICRyZXYpID0gQF87CisJbXkgKCRtb2RlLCAkYmxvYik7CisKKwlnb3RvIG91dCBpZiAkc2VsZi0+aXNfcGF0aF9pZ25vcmVkKCRwYXRoKTsKKworCW15ICRncGF0aCA9ICRzZWxmLT5naXRfcGF0aCgkcGF0aCk7CisJKCRtb2RlLCAkYmxvYikgPSAoY29tbWFuZCgnbHMtdHJlZScsICcteicsICRzZWxmLT57Y30sICIuLyRncGF0aCIpCisJICAgICAgICAgICAgICAgICAgICAgPX4gL1xBKFxkezZ9KSBibG9iIChbYS1mXGRdezQwfSlcdFxRJGdwYXRoXEVcMC8pOworCXVubGVzcyAoZGVmaW5lZCAkbW9kZSAmJiBkZWZpbmVkICRibG9iKSB7CisJCWRpZSAiJHBhdGggd2FzIG5vdCBmb3VuZCBpbiBjb21taXQgJHNlbGYtPntjfSAociRyZXYpXG4iOworCX0KKwlpZiAoJG1vZGUgZXEgJzEwMDY0NCcgJiYgJHNlbGYtPntlbXB0eV9zeW1saW5rc30tPnskcGF0aH0pIHsKKwkJJG1vZGUgPSAnMTIwMDAwJzsKKwl9CitvdXQ6CisJeyBwYXRoID0+ICRwYXRoLCBtb2RlX2EgPT4gJG1vZGUsIG1vZGVfYiA9PiAkbW9kZSwgYmxvYiA9PiAkYmxvYiwKKwkgIHBvb2wgPT4gU1ZOOjpQb29sLT5uZXcsIGFjdGlvbiA9PiAnTScgfTsKK30KKworc3ViIGFkZF9maWxlIHsKKwlteSAoJHNlbGYsICRwYXRoLCAkcGIsICRjcF9wYXRoLCAkY3BfcmV2KSA9IEBfOworCW15ICRtb2RlOworCisJaWYgKCEkc2VsZi0+aXNfcGF0aF9pZ25vcmVkKCRwYXRoKSkgeworCQlteSAoJGRpciwgJGZpbGUpID0gKCRwYXRoID1+IG0jXiguKj8pLz8oW14vXSspJCMpOworCQlkZWxldGUgJHNlbGYtPntlbXB0eX0tPnskZGlyfTsKKwkJJG1vZGUgPSAnMTAwNjQ0JzsKKworCQlpZiAoJGFkZGVkX3BsYWNlaG9sZGVyeyRkaXJ9KSB7CisJCQkjIFJlbW92ZSBvdXIgcGxhY2Vob2xkZXIgZmlsZSwgaWYgd2UgY3JlYXRlZCBvbmUuCisJCQlkZWxldGVfZW50cnkoJHNlbGYsICRhZGRlZF9wbGFjZWhvbGRlcnskZGlyfSkKKwkJCQl1bmxlc3MgJHBhdGggZXEgJGFkZGVkX3BsYWNlaG9sZGVyeyRkaXJ9OworCQkJZGVsZXRlICRhZGRlZF9wbGFjZWhvbGRlcnskZGlyfQorCQl9CisJfQorCisJeyBwYXRoID0+ICRwYXRoLCBtb2RlX2EgPT4gJG1vZGUsIG1vZGVfYiA9PiAkbW9kZSwKKwkgIHBvb2wgPT4gU1ZOOjpQb29sLT5uZXcsIGFjdGlvbiA9PiAnQScgfTsKK30KKworc3ViIGFkZF9kaXJlY3RvcnkgeworCW15ICgkc2VsZiwgJHBhdGgsICRjcF9wYXRoLCAkY3BfcmV2KSA9IEBfOworCWdvdG8gb3V0IGlmICRzZWxmLT5pc19wYXRoX2lnbm9yZWQoJHBhdGgpOworCW15ICRncGF0aCA9ICRzZWxmLT5naXRfcGF0aCgkcGF0aCk7CisJaWYgKCRncGF0aCBlcSAnJykgeworCQlteSAoJGxzLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUocXcvbHMtdHJlZQorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXIgLS1uYW1lLW9ubHkgLXovLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICRzZWxmLT57Y30pOworCQl3aGlsZSAoZGVmaW5lZCgkXyA9IGdldF9yZWNvcmQoJGxzLCAiXDAiKSkpIHsKKwkJCSRzZWxmLT57Z2lpfS0+cmVtb3ZlKCRfKTsKKwkJCXByaW50ICJcdERcdCRfXG4iIHVubGVzcyAkOjpfcTsKKwkJCXB1c2ggQGRlbGV0ZWRfZ3BhdGgsICRncGF0aDsKKwkJfQorCQljb21tYW5kX2Nsb3NlX3BpcGUoJGxzLCAkY3R4KTsKKwkJJHNlbGYtPntlbXB0eX0tPnskcGF0aH0gPSAwOworCX0KKwlteSAoJGRpciwgJGZpbGUpID0gKCRwYXRoID1+IG0jXiguKj8pLz8oW14vXSspJCMpOworCWRlbGV0ZSAkc2VsZi0+e2VtcHR5fS0+eyRkaXJ9OworCSRzZWxmLT57ZW1wdHl9LT57JHBhdGh9ID0gMTsKKworCWlmICgkYWRkZWRfcGxhY2Vob2xkZXJ7JGRpcn0pIHsKKwkJIyBSZW1vdmUgb3VyIHBsYWNlaG9sZGVyIGZpbGUsIGlmIHdlIGNyZWF0ZWQgb25lLgorCQlkZWxldGVfZW50cnkoJHNlbGYsICRhZGRlZF9wbGFjZWhvbGRlcnskZGlyfSk7CisJCWRlbGV0ZSAkYWRkZWRfcGxhY2Vob2xkZXJ7JGRpcn0KKwl9CisKK291dDoKKwl7IHBhdGggPT4gJHBhdGggfTsKK30KKworc3ViIGNoYW5nZV9kaXJfcHJvcCB7CisJbXkgKCRzZWxmLCAkZGIsICRwcm9wLCAkdmFsdWUpID0gQF87CisJcmV0dXJuIHVuZGVmIGlmICRzZWxmLT5pc19wYXRoX2lnbm9yZWQoJGRiLT57cGF0aH0pOworCSRzZWxmLT57ZGlyX3Byb3B9LT57JGRiLT57cGF0aH19IHx8PSB7fTsKKwkkc2VsZi0+e2Rpcl9wcm9wfS0+eyRkYi0+e3BhdGh9fS0+eyRwcm9wfSA9ICR2YWx1ZTsKKwl1bmRlZjsKK30KKworc3ViIGFic2VudF9kaXJlY3RvcnkgeworCW15ICgkc2VsZiwgJHBhdGgsICRwYikgPSBAXzsKKwlyZXR1cm4gdW5kZWYgaWYgJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkcGF0aCk7CisJJHNlbGYtPnthYnNlbnRfZGlyfS0+eyRwYi0+e3BhdGh9fSB8fD0gW107CisJcHVzaCBAeyRzZWxmLT57YWJzZW50X2Rpcn0tPnskcGItPntwYXRofX19LCAkcGF0aDsKKwl1bmRlZjsKK30KKworc3ViIGFic2VudF9maWxlIHsKKwlteSAoJHNlbGYsICRwYXRoLCAkcGIpID0gQF87CisJcmV0dXJuIHVuZGVmIGlmICRzZWxmLT5pc19wYXRoX2lnbm9yZWQoJHBhdGgpOworCSRzZWxmLT57YWJzZW50X2ZpbGV9LT57JHBiLT57cGF0aH19IHx8PSBbXTsKKwlwdXNoIEB7JHNlbGYtPnthYnNlbnRfZmlsZX0tPnskcGItPntwYXRofX19LCAkcGF0aDsKKwl1bmRlZjsKK30KKworc3ViIGNoYW5nZV9maWxlX3Byb3AgeworCW15ICgkc2VsZiwgJGZiLCAkcHJvcCwgJHZhbHVlKSA9IEBfOworCXJldHVybiB1bmRlZiBpZiAkc2VsZi0+aXNfcGF0aF9pZ25vcmVkKCRmYi0+e3BhdGh9KTsKKwlpZiAoJHByb3AgZXEgJ3N2bjpleGVjdXRhYmxlJykgeworCQlpZiAoJGZiLT57bW9kZV9ifSAhPSAxMjAwMDApIHsKKwkJCSRmYi0+e21vZGVfYn0gPSBkZWZpbmVkICR2YWx1ZSA/IDEwMDc1NSA6IDEwMDY0NDsKKwkJfQorCX0gZWxzaWYgKCRwcm9wIGVxICdzdm46c3BlY2lhbCcpIHsKKwkJJGZiLT57bW9kZV9ifSA9IGRlZmluZWQgJHZhbHVlID8gMTIwMDAwIDogMTAwNjQ0OworCX0gZWxzZSB7CisJCSRzZWxmLT57ZmlsZV9wcm9wfS0+eyRmYi0+e3BhdGh9fSB8fD0ge307CisJCSRzZWxmLT57ZmlsZV9wcm9wfS0+eyRmYi0+e3BhdGh9fS0+eyRwcm9wfSA9ICR2YWx1ZTsKKwl9CisJdW5kZWY7Cit9CisKK3N1YiBhcHBseV90ZXh0ZGVsdGEgeworCW15ICgkc2VsZiwgJGZiLCAkZXhwKSA9IEBfOworCXJldHVybiB1bmRlZiBpZiAkc2VsZi0+aXNfcGF0aF9pZ25vcmVkKCRmYi0+e3BhdGh9KTsKKwlteSAkc3VmZml4ID0gMDsKKwkrKyRzdWZmaXggd2hpbGUgJDo6X3JlcG9zaXRvcnktPnRlbXBfaXNfbG9ja2VkKCJzdm5fZGVsdGFfJHskfV8kc3VmZml4Iik7CisJbXkgJGZoID0gJDo6X3JlcG9zaXRvcnktPnRlbXBfYWNxdWlyZSgic3ZuX2RlbHRhXyR7JH1fJHN1ZmZpeCIpOworCSMgJGZoIGdldHMgYXV0by1jbG9zZWQoKSBieSBTVk46OlR4RGVsdGE6OmFwcGx5KCksCisJIyAoYnV0ICRiYXNlIGRvZXMgbm90LCkgc28gZHVwKCkgaXQgZm9yIHJlYWRpbmcgaW4gY2xvc2VfZmlsZQorCW9wZW4gbXkgJGR1cCwgJzwmJywgJGZoIG9yIGNyb2FrICQhOworCW15ICRiYXNlID0gJDo6X3JlcG9zaXRvcnktPnRlbXBfYWNxdWlyZSgiZ2l0X2Jsb2JfJHskfV8kc3VmZml4Iik7CisJIyBjbG9zZV9maWxlIG1heSBjYWxsIHRlbXBfYWNxdWlyZSBvbiAnc3ZuX2hhc2gnLCBidXQgYmVjYXVzZSBvZiB0aGUKKwkjIGNhbGwgY2hhaW4sIGlmIHRoZSB0ZW1wX2FjcXVpcmUgY2FsbCBmcm9tIGNsb3NlX2ZpbGUgZW5kcyB1cCBiZWluZyB0aGUKKwkjIGNhbGwgdGhhdCBmaXJzdCBjcmVhdGVzIHRoZSAnc3ZuX2hhc2gnIHRlbXAgZmlsZSwgdGhlbiB0aGUgRmlsZUhhbmRsZQorCSMgdGhhdCdzIGNyZWF0ZWQgYXMgYSByZXN1bHQgd2lsbCBlbmQgdXAgaW4gYW4gU1ZOOjpQb29sIHRoYXQgd2UgY2xlYXIKKwkjIGluIFNWTjo6UmE6OmdzX2ZldGNoX2xvb3BfY29tbW9uLiAgQXZvaWQgdGhhdCBieSBtYWtpbmcgc3VyZSB0aGUKKwkjICdzdm5faGFzaCcgRmlsZUhhbmRsZSBpcyBhbHJlYWR5IGNyZWF0ZWQgYmVmb3JlIGNsb3NlX2ZpbGUgaXMgY2FsbGVkLgorCW15ICR0bXBfZmggPSAkOjpfcmVwb3NpdG9yeS0+dGVtcF9hY3F1aXJlKCdzdm5faGFzaCcpOworCSQ6Ol9yZXBvc2l0b3J5LT50ZW1wX3JlbGVhc2UoJHRtcF9maCwgMSk7CisKKwlpZiAoJGZiLT57YmxvYn0pIHsKKwkJbXkgKCRiYXNlX2lzX2xpbmssICRzaXplKTsKKworCQlpZiAoJGZiLT57bW9kZV9hfSBlcSAnMTIwMDAwJyAmJgorCQkgICAgISAkc2VsZi0+e2VtcHR5X3N5bWxpbmtzfS0+eyRmYi0+e3BhdGh9fSkgeworCQkJcHJpbnQgJGJhc2UgJ2xpbmsgJyBvciBkaWUgInByaW50ICQhXG4iOworCQkJJGJhc2VfaXNfbGluayA9IDE7CisJCX0KKwlyZXRyeToKKwkJJHNpemUgPSAkOjpfcmVwb3NpdG9yeS0+Y2F0X2Jsb2IoJGZiLT57YmxvYn0sICRiYXNlKTsKKwkJZGllICJGYWlsZWQgdG8gcmVhZCBvYmplY3QgJGZiLT57YmxvYn0iIGlmICgkc2l6ZSA8IDApOworCisJCWlmIChkZWZpbmVkICRleHApIHsKKwkJCXNlZWsgJGJhc2UsIDAsIDAgb3IgY3JvYWsgJCE7CisJCQlteSAkZ290ID0gOjptZDVzdW0oJGJhc2UpOworCQkJaWYgKCRnb3QgbmUgJGV4cCkgeworCQkJCW15ICRlcnIgPSAiQ2hlY2tzdW0gbWlzbWF0Y2g6ICIuCisJCQkJICAgICAgICIkZmItPntwYXRofSAkZmItPntibG9ifVxuIiAuCisJCQkJICAgICAgICJleHBlY3RlZDogJGV4cFxuIiAuCisJCQkJICAgICAgICIgICAgIGdvdDogJGdvdFxuIjsKKwkJCQlpZiAoJGJhc2VfaXNfbGluaykgeworCQkJCQl3YXJuICRlcnIsCisJCQkJCSAgICAgIlJldHJ5aW5nLi4uIChwb3NzaWJseSAiLAorCQkJCQkgICAgICJhIGJhZCBzeW1saW5rIGZyb20gU1ZOKVxuIjsKKwkJCQkJJDo6X3JlcG9zaXRvcnktPnRlbXBfcmVzZXQoJGJhc2UpOworCQkJCQkkYmFzZV9pc19saW5rID0gMDsKKwkJCQkJZ290byByZXRyeTsKKwkJCQl9CisJCQkJZGllICRlcnI7CisJCQl9CisJCX0KKwl9CisJc2VlayAkYmFzZSwgMCwgMCBvciBjcm9hayAkITsKKwkkZmItPntmaH0gPSAkZmg7CisJJGZiLT57YmFzZX0gPSAkYmFzZTsKKwlbIFNWTjo6VHhEZWx0YTo6YXBwbHkoJGJhc2UsICRkdXAsIHVuZGVmLCAkZmItPntwYXRofSwgJGZiLT57cG9vbH0pIF07Cit9CisKK3N1YiBjbG9zZV9maWxlIHsKKwlteSAoJHNlbGYsICRmYiwgJGV4cCkgPSBAXzsKKwlyZXR1cm4gdW5kZWYgaWYgJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkZmItPntwYXRofSk7CisKKwlteSAkaGFzaDsKKwlteSAkcGF0aCA9ICRzZWxmLT5naXRfcGF0aCgkZmItPntwYXRofSk7CisJaWYgKG15ICRmaCA9ICRmYi0+e2ZofSkgeworCQlpZiAoZGVmaW5lZCAkZXhwKSB7CisJCQlzZWVrKCRmaCwgMCwgMCkgb3IgY3JvYWsgJCE7CisJCQlteSAkZ290ID0gOjptZDVzdW0oJGZoKTsKKwkJCWlmICgkZ290IG5lICRleHApIHsKKwkJCQlkaWUgIkNoZWNrc3VtIG1pc21hdGNoOiAkcGF0aFxuIiwKKwkJCQkgICAgImV4cGVjdGVkOiAkZXhwXG4gICAgZ290OiAkZ290XG4iOworCQkJfQorCQl9CisJCWlmICgkZmItPnttb2RlX2J9ID09IDEyMDAwMCkgeworCQkJc3lzc2VlaygkZmgsIDAsIDApIG9yIGNyb2FrICQhOworCQkJbXkgJHJkID0gc3lzcmVhZCgkZmgsIG15ICRidWYsIDUpOworCisJCQlpZiAoIWRlZmluZWQgJHJkKSB7CisJCQkJY3JvYWsgInN5c3JlYWQ6ICQhXG4iOworCQkJfSBlbHNpZiAoJHJkID09IDApIHsKKwkJCQl3YXJuICIkcGF0aCBoYXMgbW9kZSAxMjAwMDAiLAorCQkJCSAgICAgIiBidXQgaXQgcG9pbnRzIHRvIG5vdGhpbmdcbiIsCisJCQkJICAgICAiY29udmVydGluZyB0byBhbiBlbXB0eSBmaWxlIHdpdGggbW9kZSIsCisJCQkJICAgICAiIDEwMDY0NFxuIjsKKwkJCQkkZmItPnttb2RlX2J9ID0gJzEwMDY0NCc7CisJCQl9IGVsc2lmICgkYnVmIG5lICdsaW5rICcpIHsKKwkJCQl3YXJuICIkcGF0aCBoYXMgbW9kZSAxMjAwMDAiLAorCQkJCSAgICAgIiBidXQgaXMgbm90IGEgbGlua1xuIjsKKwkJCX0gZWxzZSB7CisJCQkJbXkgJHRtcF9maCA9ICQ6Ol9yZXBvc2l0b3J5LT50ZW1wX2FjcXVpcmUoCisJCQkJCSdzdm5faGFzaCcpOworCQkJCW15ICRyZXM7CisJCQkJd2hpbGUgKCRyZXMgPSBzeXNyZWFkKCRmaCwgbXkgJHN0ciwgMTAyNCkpIHsKKwkJCQkJbXkgJG91dCA9IHN5c3dyaXRlKCR0bXBfZmgsICRzdHIsICRyZXMpOworCQkJCQlkZWZpbmVkKCRvdXQpICYmICRvdXQgPT0gJHJlcworCQkJCQkJb3IgY3JvYWsoIndyaXRlICIsCisJCQkJCQkJR2l0Ojp0ZW1wX3BhdGgoJHRtcF9maCksCisJCQkJCQkJIjogJCFcbiIpOworCQkJCX0KKwkJCQlkZWZpbmVkICRyZXMgb3IgY3JvYWsgJCE7CisKKwkJCQkoJGZoLCAkdG1wX2ZoKSA9ICgkdG1wX2ZoLCAkZmgpOworCQkJCUdpdDo6dGVtcF9yZWxlYXNlKCR0bXBfZmgsIDEpOworCQkJfQorCQl9CisKKwkJJGhhc2ggPSAkOjpfcmVwb3NpdG9yeS0+aGFzaF9hbmRfaW5zZXJ0X29iamVjdCgKKwkJCQlHaXQ6OnRlbXBfcGF0aCgkZmgpKTsKKwkJJGhhc2ggPX4gL15bYS1mXGRdezQwfSQvIG9yIGRpZSAibm90IGEgc2hhMTogJGhhc2hcbiI7CisKKwkJR2l0Ojp0ZW1wX3JlbGVhc2UoJGZiLT57YmFzZX0sIDEpOworCQlHaXQ6OnRlbXBfcmVsZWFzZSgkZmgsIDEpOworCX0gZWxzZSB7CisJCSRoYXNoID0gJGZiLT57YmxvYn0gb3IgZGllICJubyBibG9iIGluZm9ybWF0aW9uXG4iOworCX0KKwkkZmItPntwb29sfS0+Y2xlYXI7CisJJHNlbGYtPntnaWl9LT51cGRhdGUoJGZiLT57bW9kZV9ifSwgJGhhc2gsICRwYXRoKSBvciBjcm9hayAkITsKKwlwcmludCAiXHQkZmItPnthY3Rpb259XHQkcGF0aFxuIiBpZiAkZmItPnthY3Rpb259ICYmICEgJDo6X3E7CisJdW5kZWY7Cit9CisKK3N1YiBhYm9ydF9lZGl0IHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCSRzZWxmLT57bnJ9ID0gJHNlbGYtPntnaWl9LT57bnJ9OworCWRlbGV0ZSAkc2VsZi0+e2dpaX07CisJJHNlbGYtPlNVUEVSOjphYm9ydF9lZGl0KEBfKTsKK30KKworc3ViIGNsb3NlX2VkaXQgeworCW15ICRzZWxmID0gc2hpZnQ7CisKKwlpZiAoJF9wcmVzZXJ2ZV9lbXB0eV9kaXJzKSB7CisJCW15IEBlbXB0eV9kaXJzOworCisJCSMgQW55IGVudHJ5IGZsYWdnZWQgYXMgZW1wdHkgdGhhdCBhbHNvIGhhcyBhbiBhc3NvY2lhdGVkCisJCSMgZGlyX3Byb3AgcmVwcmVzZW50cyBhIG5ld2x5IGNyZWF0ZWQgZW1wdHkgZGlyZWN0b3J5LgorCQlmb3JlYWNoIG15ICRpIChrZXlzICV7JHNlbGYtPntlbXB0eX19KSB7CisJCQlwdXNoIEBlbXB0eV9kaXJzLCAkaSBpZiBleGlzdHMgJHNlbGYtPntkaXJfcHJvcH0tPnskaX07CisJCX0KKworCQkjIFNlYXJjaCBmb3IgZGlyZWN0b3JpZXMgdGhhdCBoYXZlIGJlY29tZSBlbXB0eSBkdWUgc3Vic2VxdWVudAorCQkjIGZpbGUgZGVsZXRlcy4KKwkJcHVzaCBAZW1wdHlfZGlycywgJHNlbGYtPmZpbmRfZW1wdHlfZGlyZWN0b3JpZXMoKTsKKworCQkjIEZpbmFsbHksIGFkZCBhIHBsYWNlaG9sZGVyIGZpbGUgdG8gZWFjaCBlbXB0eSBkaXJlY3RvcnkuCisJCSRzZWxmLT5hZGRfcGxhY2Vob2xkZXJfZmlsZSgkXykgZm9yZWFjaCAoQGVtcHR5X2RpcnMpOworCisJCSRzZWxmLT5zdGFzaF9wbGFjZWhvbGRlcl9saXN0KCk7CisJfQorCisJJHNlbGYtPntnaXRfY29tbWl0X29rfSA9IDE7CisJJHNlbGYtPntucn0gPSAkc2VsZi0+e2dpaX0tPntucn07CisJZGVsZXRlICRzZWxmLT57Z2lpfTsKKwkkc2VsZi0+U1VQRVI6OmNsb3NlX2VkaXQoQF8pOworfQorCitzdWIgZmluZF9lbXB0eV9kaXJlY3RvcmllcyB7CisJbXkgKCRzZWxmKSA9IEBfOworCW15IEBlbXB0eV9kaXJzOworCW15ICVkaXJzID0gbWFwIHsgZGlybmFtZSgkXykgPT4gMSB9IEBkZWxldGVkX2dwYXRoOworCisJZm9yZWFjaCBteSAkZGlyIChzb3J0IGtleXMgJWRpcnMpIHsKKwkJbmV4dCBpZiAkZGlyIGVxICIuIjsKKworCQkjIElmIHRoZXJlIGhhdmUgYmVlbiBhbnkgYWRkaXRpb25zIHRvIHRoaXMgZGlyZWN0b3J5LCB0aGVyZSBpcworCQkjIG5vIHJlYXNvbiB0byBjaGVjayBpZiBpdCBpcyBlbXB0eS4KKwkJbXkgJHNraXBfYWRkZWQgPSAwOworCQlmb3JlYWNoIG15ICR0IChxdy9kaXJfcHJvcCBmaWxlX3Byb3AvKSB7CisJCQlmb3JlYWNoIG15ICRwYXRoIChrZXlzICV7ICRzZWxmLT57JHR9IH0pIHsKKwkJCQlpZiAoZXhpc3RzICRzZWxmLT57JHR9LT57ZGlybmFtZSgkcGF0aCl9KSB7CisJCQkJCSRza2lwX2FkZGVkID0gMTsKKwkJCQkJbGFzdDsKKwkJCQl9CisJCQl9CisJCQlsYXN0IGlmICRza2lwX2FkZGVkOworCQl9CisJCW5leHQgaWYgJHNraXBfYWRkZWQ7CisKKwkJIyBVc2UgYGdpdCBscy10cmVlYCB0byBnZXQgdGhlIGZpbGVuYW1lcyBvZiB0aGlzIGRpcmVjdG9yeQorCQkjIHRoYXQgZXhpc3RlZCBwcmlvciB0byB0aGlzIHBhcnRpY3VsYXIgY29tbWl0LgorCQlteSAkbHMgPSBjb21tYW5kKCdscy10cmVlJywgJy16JywgJy0tbmFtZS1vbmx5JywKKwkJCQkgJHNlbGYtPntjfSwgIiRkaXIvIik7CisJCW15ICVmaWxlcyA9IG1hcCB7ICRfID0+IDEgfSBzcGxpdCgvXDAvLCAkbHMpOworCisJCSMgUmVtb3ZlIHRoZSBmaWxlbmFtZXMgdGhhdCB3ZXJlIGRlbGV0ZWQgZHVyaW5nIHRoaXMgY29tbWl0LgorCQlkZWxldGUgJGZpbGVzeyRffSBmb3JlYWNoIChAZGVsZXRlZF9ncGF0aCk7CisKKwkJIyBSZXBvcnQgdGhlIGRpcmVjdG9yeSBpZiB0aGVyZSBhcmUgbm8gZmlsZW5hbWVzIGxlZnQuCisJCXB1c2ggQGVtcHR5X2RpcnMsICRkaXIgdW5sZXNzIChzY2FsYXIgJWZpbGVzKTsKKwl9CisJQGVtcHR5X2RpcnM7Cit9CisKK3N1YiBhZGRfcGxhY2Vob2xkZXJfZmlsZSB7CisJbXkgKCRzZWxmLCAkZGlyKSA9IEBfOworCW15ICRwYXRoID0gIiRkaXIvJF9wbGFjZWhvbGRlcl9maWxlbmFtZSI7CisJbXkgJGdwYXRoID0gJHNlbGYtPmdpdF9wYXRoKCRwYXRoKTsKKworCW15ICRmaCA9ICQ6Ol9yZXBvc2l0b3J5LT50ZW1wX2FjcXVpcmUoJGdwYXRoKTsKKwlteSAkaGFzaCA9ICQ6Ol9yZXBvc2l0b3J5LT5oYXNoX2FuZF9pbnNlcnRfb2JqZWN0KEdpdDo6dGVtcF9wYXRoKCRmaCkpOworCUdpdDo6dGVtcF9yZWxlYXNlKCRmaCwgMSk7CisJJHNlbGYtPntnaWl9LT51cGRhdGUoJzEwMDY0NCcsICRoYXNoLCAkZ3BhdGgpIG9yIGNyb2FrICQhOworCisJIyBUaGUgZGlyZWN0b3J5IHNob3VsZCBubyBsb25nZXIgYmUgY29uc2lkZXJlZCBlbXB0eS4KKwlkZWxldGUgJHNlbGYtPntlbXB0eX0tPnskZGlyfSBpZiBleGlzdHMgJHNlbGYtPntlbXB0eX0tPnskZGlyfTsKKworCSMgS2VlcCB0cmFjayBvZiBhbnkgcGxhY2Vob2xkZXIgZmlsZXMgd2UgY3JlYXRlLgorCSRhZGRlZF9wbGFjZWhvbGRlcnskZGlyfSA9ICRwYXRoOworfQorCitzdWIgc3Rhc2hfcGxhY2Vob2xkZXJfbGlzdCB7CisJbXkgKCRzZWxmKSA9IEBfOworCW15ICRrID0gInN2bi1yZW1vdGUuJHJlcG9faWQuYWRkZWQtcGxhY2Vob2xkZXIiOworCW15ICR2ID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0LWFsbCcsICRrKSB9OworCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICctLXVuc2V0LWFsbCcsICRrKSBpZiAkdjsKKwlmb3JlYWNoICh2YWx1ZXMgJWFkZGVkX3BsYWNlaG9sZGVyKSB7CisJCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICctLWFkZCcsICRrLCAkXyk7CisJfQorfQorCisxOworX19FTkRfXworCis9aGVhZDEgTkFNRQorCitHaXQ6OlNWTjo6RmV0Y2hlciAtIHRyZWUgZGVsdGEgY29uc3VtZXIgZm9yICJnaXQgc3ZuIGZldGNoIgorCis9aGVhZDEgU1lOT1BTSVMKKworICAgIHVzZSBTVk46OkNvcmU7CisgICAgdXNlIFNWTjo6UmE7CisgICAgdXNlIEdpdDo6U1ZOOworICAgIHVzZSBHaXQ6OlNWTjo6RmV0Y2hlcjsKKyAgICB1c2UgR2l0OworCisgICAgbXkgJGdzID0gR2l0OjpTVk4tPmZpbmRfYnlfdXJsKCR1cmwpOworICAgIG15ICRyYSA9IFNWTjo6UmEtPm5ldyh1cmwgPT4gJHVybCk7CisgICAgbXkgJGVkaXRvciA9IEdpdDo6U1ZOOjpGZXRjaGVyLT5uZXcoJGdzKTsKKyAgICBteSAkcmVwb3J0ZXIgPSAkcmEtPmRvX3VwZGF0ZSgkU1ZOOjpDb3JlOjpJTlZBTElEX1JFVk5VTSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJGVkaXRvcik7CisgICAgJHJlcG9ydGVyLT5zZXRfcGF0aCgnJywgJG9sZF9yZXYsIDApOworICAgICRyZXBvcnRlci0+ZmluaXNoX3JlcG9ydDsKKyAgICBteSAkdHJlZSA9ICRncy0+dG1wX2luZGV4X2RvKHN1YiB7IGNvbW1hbmRfb25lbGluZSgnd3JpdGUtdHJlZScpIH0pOworCisgICAgZm9yZWFjaCBteSAkcGF0aCAoa2V5cyAleyRlZGl0b3ItPntkaXJfcHJvcH0pIHsKKyAgICAgICAgbXkgJHByb3BzID0gJGVkaXRvci0+e2Rpcl9wcm9wfXskcGF0aH07CisgICAgICAgIGZvcmVhY2ggbXkgJHByb3AgKGtleXMgJSRwcm9wcykgeworICAgICAgICAgICAgcHJpbnQgInByb3BlcnR5ICRwcm9wIGF0ICRwYXRoIGNoYW5nZWQgdG8gJHByb3BzLT57JHByb3B9XG4iOworICAgICAgICB9CisgICAgfQorICAgIGZvcmVhY2ggbXkgJHBhdGggKGtleXMgJXskZWRpdG9yLT57ZW1wdHl9KSB7CisgICAgICAgIG15ICRhY3Rpb24gPSAkZWRpdG9yLT57ZW1wdHl9eyRwYXRofSA/ICdhZGRlZCcgOiAncmVtb3ZlZCc7CisgICAgICAgIHByaW50ICJlbXB0eSBkaXJlY3RvcnkgJHBhdGggJGFjdGlvblxuIjsKKyAgICB9CisgICAgZm9yZWFjaCBteSAkcGF0aCAoa2V5cyAleyRlZGl0b3ItPntmaWxlX3Byb3B9KSB7IC4uLiB9CisgICAgZm9yZWFjaCBteSAkcGFyZW50IChrZXlzICV7JGVkaXRvci0+e2Fic2VudF9kaXJ9fSkgeworICAgICAgICBteSBAY2hpbGRyZW4gPSBAeyRlZGl0b3ItPnthYnN0ZW50X2Rpcn17JHBhcmVudH19OworICAgICAgICBwcmludCAiY2Fubm90IGZldGNoIGRpcmVjdG9yeSAkcGFyZW50LyRfOiBub3QgYXV0aG9yaXplZD9cbiIKKyAgICAgICAgICAgIGZvcmVhY2ggQGNoaWxkcmVuOworICAgIH0KKyAgICBmb3JlYWNoIG15ICRwYXJlbnQgKGtleXMgJXskZWRpdG9yLT57YWJzZW50X2ZpbGV9KSB7IC4uLiB9CisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIGlzIGEgc3ViY2xhc3Mgb2YgQzxTVk46OkRlbHRhOjpFZGl0b3I+LCB3aGljaCBtZWFucyBpdCBpbXBsZW1lbnRzCitjYWxsYmFja3MgdG8gYWN0IGFzIGEgY29uc3VtZXIgb2YgU3VidmVyc2lvbiB0cmVlIGRlbHRhcy4gIFRoaXMKK3BhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgY2FsbGJhY2tzIGlzIG1lYW50IHRvIHN0b3JlCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVzdWx0aW5nIGNvbnRlbnQgd2hpY2ggQjxnaXQgc3ZuIGZldGNoPiBjb3VsZAordXNlIHRvIHBvcHVsYXRlIG5ldyBjb21taXRzIGFuZCBuZXcgZW50cmllcyBmb3IgRjx1bmhhbmRsZWQubG9nPi4KK01vcmUgc3BlY2lmaWNhbGx5OgorCis9b3ZlcgorCis9aXRlbSAqIEFkZGl0aW9ucywgcmVtb3ZhbHMsIGFuZCBtb2RpZmljYXRpb25zIG9mIGZpbGVzIGFyZSBwcm9wYWdhdGVkCit0byBnaXQtc3ZuJ3MgaW5kZXggZmlsZSBGPCRHSVRfRElSL3N2bi8kcmVmbmFtZS9pbmRleD4gdXNpbmcKK0I8Z2l0IHVwZGF0ZS1pbmRleD4uCisKKz1pdGVtICogQ2hhbmdlcyBpbiBTdWJ2ZXJzaW9uIHBhdGggcHJvcGVydGllcyBhcmUgcmVjb3JkZWQgaW4gdGhlCitDPGRpcl9wcm9wPiBhbmQgQzxmaWxlX3Byb3A+IGZpZWxkcyAod2hpY2ggYXJlIGhhc2hlcykuCisKKz1pdGVtICogQWRkaXRpb24gYW5kIHJlbW92YWwgb2YgZW1wdHkgZGlyZWN0b3JpZXMgYXJlIGluZGljYXRlZCBieQorZW50cmllcyB3aXRoIHZhbHVlIDEgYW5kIDAgcmVzcGVjdGl2ZWx5IGluIHRoZSBDPGVtcHR5PiBoYXNoLgorCis9aXRlbSAqIFBhdGhzIHRoYXQgYXJlIHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb252ZXllZCAocHJlc3VtYWJseSBkdWUKK3RvIHBlcm1pc3Npb25zKSBhcmUgcmVjb3JkZWQgaW4gdGhlIEM8YWJzZW50X2ZpbGU+IGFuZAorQzxhYnNlbnRfZGlycz4gaGFzaGVzLiAgRm9yIGVhY2gga2V5LCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpcworYSBsaXN0IG9mIHBhdGhzIHVuZGVyIHRoYXQgZGlyZWN0b3J5IHRoYXQgd2VyZSBwcmVzZW50IGJ1dAorY291bGQgbm90IGJlIGNvbnZleWVkLgorCis9YmFjaworCitUaGUgaW50ZXJmYWNlIGlzIHVuc3RhYmxlLiAgRG8gbm90IHVzZSB0aGlzIG1vZHVsZSB1bmxlc3MgeW91IGFyZQorZGV2ZWxvcGluZyBnaXQtc3ZuLgorCis9aGVhZDEgREVQRU5ERU5DSUVTCisKK0w8U1ZOOjpEZWx0YT4gZnJvbSB0aGUgU3VidmVyc2lvbiBwZXJsIGJpbmRpbmdzLAordGhlIGNvcmUgTDxDYXJwPiBhbmQgTDxGaWxlOjpCYXNlbmFtZT4gbW9kdWxlcywKK2FuZCBnaXQncyBMPEdpdD4gaGVscGVyIG1vZHVsZS4KKworQzxHaXQ6OlNWTjo6RmV0Y2hlcj4gaGFzIG5vdCBiZWVuIHRlc3RlZCB1c2luZyBjYWxsZXJzIG90aGVyIHRoYW4KK0I8Z2l0LXN2bj4gaXRzZWxmLgorCis9aGVhZDEgU0VFIEFMU08KKworTDxTVk46OkRlbHRhPiwKK0w8R2l0OjpTVk46OkVkaXRvcj4uCisKKz1oZWFkMSBJTkNPTVBBVElCSUxJVElFUworCitOb25lIHJlcG9ydGVkLgorCis9aGVhZDEgQlVHUworCitOb25lLgpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvU1ZOL0dsb2JTcGVjLnBtIGIvcGVybC9HaXQvU1ZOL0dsb2JTcGVjLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYThkMTcKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4vR2xvYlNwZWMucG0KQEAgLTAsMCArMSw2NSBAQAorcGFja2FnZSBHaXQ6OlNWTjo6R2xvYlNwZWM7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCitzdWIgbmV3IHsKKwlteSAoJGNsYXNzLCAkZ2xvYiwgJHBhdHRlcm5fb2spID0gQF87CisJbXkgJHJlID0gJGdsb2I7CisJJHJlID1+IHMhLyskISFnOyAjIG5vIG5lZWQgZm9yIHRyYWlsaW5nIHNsYXNoZXMKKwlteSAoQGxlZnQsIEByaWdodCwgQHBhdHRlcm5zKTsKKwlteSAkc3RhdGUgPSAibGVmdCI7CisJbXkgJGRpZV9tc2cgPSAiT25seSBvbmUgc2V0IG9mIHdpbGRjYXJkcyAiIC4KKwkJCQkiKGUuZy4gJyonIG9yICcqLyovKicpIGlzIHN1cHBvcnRlZDogJGdsb2JcbiI7CisJZm9yIG15ICRwYXJ0IChzcGxpdChtfC98LCAkZ2xvYikpIHsKKwkJaWYgKCRwYXR0ZXJuX29rICYmICRwYXJ0ID1+IC9be31dLyAmJgorCQkJICRwYXJ0ICF+IC9eXHtbXnt9XStcfS8pIHsKKwkJCWRpZSAiSW52YWxpZCBwYXR0ZXJuIGluICckZ2xvYic6ICRwYXJ0XG4iOworCQl9CisJCW15ICRuc3RhcnMgPSAkcGFydCA9fiB0ci8qLy87CisJCWlmICgkbnN0YXJzID4gMSkgeworCQkJZGllICJPbmx5IG9uZSAnKicgaXMgYWxsb3dlZCBpbiBhIHBhdHRlcm46ICckcGFydCdcbiI7CisJCX0KKwkJaWYgKCRwYXJ0ID1+IC8oLiopXCooLiopLykgeworCQkJZGllICRkaWVfbXNnIGlmICRzdGF0ZSBlcSAicmlnaHQiOworCQkJbXkgKCRsLCAkcikgPSAoJDEsICQyKTsKKwkJCSRzdGF0ZSA9ICJwYXR0ZXJuIjsKKwkJCW15ICRwYXQgPSBxdW90ZW1ldGEoJGwpIC4gJ1teL10qJyAuIHF1b3RlbWV0YSgkcik7CisJCQlwdXNoKEBwYXR0ZXJucywgJHBhdCk7CisJCX0gZWxzaWYgKCRwYXR0ZXJuX29rICYmICRwYXJ0ID1+IC9eXHsoLiopXH0kLykgeworCQkJZGllICRkaWVfbXNnIGlmICRzdGF0ZSBlcSAicmlnaHQiOworCQkJJHN0YXRlID0gInBhdHRlcm4iOworCQkJbXkgJHAgPSBxdW90ZW1ldGEoJDEpOworCQkJJHAgPX4gcy9cXCwvfC9nOworCQkJcHVzaChAcGF0dGVybnMsICIoPzokcCkiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgkc3RhdGUgZXEgImxlZnQiKSB7CisJCQkJcHVzaChAbGVmdCwgJHBhcnQpOworCQkJfSBlbHNlIHsKKwkJCQlwdXNoKEByaWdodCwgJHBhcnQpOworCQkJCSRzdGF0ZSA9ICJyaWdodCI7CisJCQl9CisJCX0KKwl9CisJbXkgJGRlcHRoID0gQHBhdHRlcm5zOworCWlmICgkZGVwdGggPT0gMCkgeworCQlkaWUgIk9uZSAnKicgaXMgbmVlZGVkIGluIGdsb2I6ICckZ2xvYidcbiI7CisJfQorCW15ICRsZWZ0ID0gam9pbignLycsIEBsZWZ0KTsKKwlteSAkcmlnaHQgPSBqb2luKCcvJywgQHJpZ2h0KTsKKwkkcmUgPSBqb2luKCcvJywgQHBhdHRlcm5zKTsKKwkkcmUgPSBqb2luKCdcLycsCisJCSAgIGdyZXAobGVuZ3RoLCBxdW90ZW1ldGEoJGxlZnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCRyZSkoPz0vfFwkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlbWV0YSgkcmlnaHQpKSk7CisJbXkgJGxlZnRfcmUgPSBxci9eXC9cUSRsZWZ0XEUoXC98JCkvOworCWJsZXNzIHsgbGVmdCA9PiAkbGVmdCwgcmlnaHQgPT4gJHJpZ2h0LCBsZWZ0X3JlZ2V4ID0+ICRsZWZ0X3JlLAorCSAgICAgICAgcmVnZXggPT4gcXIvJHJlLywgZ2xvYiA9PiAkZ2xvYiwgZGVwdGggPT4gJGRlcHRoIH0sICRjbGFzczsKK30KKworc3ViIGZ1bGxfcGF0aCB7CisJbXkgKCRzZWxmLCAkcGF0aCkgPSBAXzsKKwlyZXR1cm4gKGxlbmd0aCAkc2VsZi0+e2xlZnR9ID8gIiRzZWxmLT57bGVmdH0vIiA6ICcnKSAuCisJICAgICAgICRwYXRoIC4gKGxlbmd0aCAkc2VsZi0+e3JpZ2h0fSA/ICIvJHNlbGYtPntyaWdodH0iIDogJycpOworfQorCisxOwpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvU1ZOL0xvZy5wbSBiL3BlcmwvR2l0L1NWTi9Mb2cucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY0MTA1MwotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvR2l0L1NWTi9Mb2cucG0KQEAgLTAsMCArMSw0MDAgQEAKK3BhY2thZ2UgR2l0OjpTVk46OkxvZzsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgR2l0OjpTVk46OlV0aWxzIHF3KGZhdGFsKTsKK3VzZSBHaXQgcXcoY29tbWFuZAorICAgICAgICAgICBjb21tYW5kX29uZWxpbmUKKyAgICAgICAgICAgY29tbWFuZF9vdXRwdXRfcGlwZQorICAgICAgICAgICBjb21tYW5kX2Nsb3NlX3BpcGUKKyAgICAgICAgICAgZ2V0X3R6X29mZnNldCk7Cit1c2UgUE9TSVggcXcvc3RyZnRpbWUvOwordXNlIGNvbnN0YW50IGNvbW1pdF9sb2dfc2VwYXJhdG9yID0+ICgnLScgeCA3MikgLiAiXG4iOwordXNlIHZhcnMgcXcvJFRaICRsaW1pdCAkY29sb3IgJHBhZ2VyICRub25fcmVjdXJzaXZlICR2ZXJib3NlICRvbmVsaW5lCisgICAgICAgICAgICAlcnVzZXJzICRzaG93X2NvbW1pdCAkaW5jcmVtZW50YWwvOworCisjIE9wdGlvbiBzZXQgaW4gZ2l0LXN2bgorb3VyICRfZ2l0X2Zvcm1hdDsKKworc3ViIGNtdF9zaG93YWJsZSB7CisJbXkgKCRjKSA9IEBfOworCXJldHVybiAxIGlmIGRlZmluZWQgJGMtPntyfTsKKworCSMgYmlnIGNvbW1pdCBtZXNzYWdlIGdvdCB0cnVuY2F0ZWQgYnkgdGhlIDE2ayBwcmV0dHkgYnVmZmVyIGluIHJldi1saXN0CisJaWYgKCRjLT57bH0gJiYgJGMtPntsfS0+Wy0xXSBlcSAiLi4uXG4iICYmCisJCQkJJGMtPnthX3Jhd30gPX4gL1xAKFthLWZcZFwtXSspPiQvKSB7CisJCUB7JGMtPntsfX0gPSAoKTsKKwkJbXkgQGxvZyA9IGNvbW1hbmQocXcvY2F0LWZpbGUgY29tbWl0LywgJGMtPntjfSk7CisKKwkJIyBzaGlmdCBvZmYgdGhlIGhlYWRlcnMKKwkJc2hpZnQgQGxvZyB3aGlsZSAoJGxvZ1swXSBuZSAnJyk7CisJCXNoaWZ0IEBsb2c7CisKKwkJIyBUT0RPOiBtYWtlICRjLT57bH0gbm90IGhhdmUgYSB0cmFpbGluZyBuZXdsaW5lIGluIHRoZSBmdXR1cmUKKwkJQHskYy0+e2x9fSA9IG1hcCB7ICIkX1xuIiB9IGdyZXAgIS9eZ2l0LXN2bi1pZDogLywgQGxvZzsKKworCQkodW5kZWYsICRjLT57cn0sIHVuZGVmKSA9IDo6ZXh0cmFjdF9tZXRhZGF0YSgKKwkJCQkoZ3JlcCgvXmdpdC1zdm4taWQ6IC8sIEBsb2cpKVstMV0pOworCX0KKwlyZXR1cm4gZGVmaW5lZCAkYy0+e3J9OworfQorCitzdWIgbG9nX3VzZV9jb2xvciB7CisJcmV0dXJuICRjb2xvciB8fCBHaXQtPnJlcG9zaXRvcnktPmdldF9jb2xvcmJvb2woJ2NvbG9yLmRpZmYnKTsKK30KKworc3ViIGdpdF9zdm5fbG9nX2NtZCB7CisJbXkgKCRyX21pbiwgJHJfbWF4LCBAYXJncykgPSBAXzsKKwlteSAkaGVhZCA9ICdIRUFEJzsKKwlteSAoQGZpbGVzLCBAbG9nX29wdHMpOworCWZvcmVhY2ggbXkgJHggKEBhcmdzKSB7CisJCWlmICgkeCBlcSAnLS0nIHx8IEBmaWxlcykgeworCQkJcHVzaCBAZmlsZXMsICR4OworCQl9IGVsc2UgeworCQkJaWYgKDo6dmVyaWZ5X3JlZigiJHheMCIpKSB7CisJCQkJJGhlYWQgPSAkeDsKKwkJCX0gZWxzZSB7CisJCQkJcHVzaCBAbG9nX29wdHMsICR4OworCQkJfQorCQl9CisJfQorCisJbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gOjp3b3JraW5nX2hlYWRfaW5mbygkaGVhZCk7CisKKwlyZXF1aXJlIEdpdDo6U1ZOOworCSRncyB8fD0gR2l0OjpTVk4tPl9uZXc7CisJbXkgQGNtZCA9IChxdy9sb2cgLS1hYmJyZXYtY29tbWl0IC0tcHJldHR5PXJhdyAtLWRlZmF1bHQvLAorCSAgICAgICAgICAgJGdzLT5yZWZuYW1lKTsKKwlwdXNoIEBjbWQsICctcicgdW5sZXNzICRub25fcmVjdXJzaXZlOworCXB1c2ggQGNtZCwgcXcvLS1yYXcgLS1uYW1lLXN0YXR1cy8gaWYgJHZlcmJvc2U7CisJcHVzaCBAY21kLCAnLS1jb2xvcicgaWYgbG9nX3VzZV9jb2xvcigpOworCXB1c2ggQGNtZCwgQGxvZ19vcHRzOworCWlmIChkZWZpbmVkICRyX21heCAmJiAkcl9tYXggPT0gJHJfbWluKSB7CisJCXB1c2ggQGNtZCwgJy0tbWF4LWNvdW50PTEnOworCQlpZiAobXkgJGMgPSAkZ3MtPnJldl9tYXBfZ2V0KCRyX21heCkpIHsKKwkJCXB1c2ggQGNtZCwgJGM7CisJCX0KKwl9IGVsc2lmIChkZWZpbmVkICRyX21heCkgeworCQlpZiAoJHJfbWF4IDwgJHJfbWluKSB7CisJCQkoJHJfbWluLCAkcl9tYXgpID0gKCRyX21heCwgJHJfbWluKTsKKwkJfQorCQlteSAodW5kZWYsICRjX21heCkgPSAkZ3MtPmZpbmRfcmV2X2JlZm9yZSgkcl9tYXgsIDEsICRyX21pbik7CisJCW15ICh1bmRlZiwgJGNfbWluKSA9ICRncy0+ZmluZF9yZXZfYWZ0ZXIoJHJfbWluLCAxLCAkcl9tYXgpOworCQkjIElmIHRoZXJlIGFyZSBubyBjb21taXRzIGluIHRoZSByYW5nZSwgYm90aCAkY19tYXggYW5kICRjX21pbgorCQkjIHdpbGwgYmUgdW5kZWZpbmVkLiAgSWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBjb21taXQgaW4gdGhlCisJCSMgcmFuZ2UsIGJvdGggd2lsbCBiZSBkZWZpbmVkLgorCQlyZXR1cm4gKCkgaWYgIWRlZmluZWQgJGNfbWluIHx8ICFkZWZpbmVkICRjX21heDsKKwkJaWYgKCRjX21pbiBlcSAkY19tYXgpIHsKKwkJCXB1c2ggQGNtZCwgJy0tbWF4LWNvdW50PTEnLCAkY19taW47CisJCX0gZWxzZSB7CisJCQlwdXNoIEBjbWQsICctLWJvdW5kYXJ5JywgIiRjX21pbi4uJGNfbWF4IjsKKwkJfQorCX0KKwlyZXR1cm4gKEBjbWQsIEBmaWxlcyk7Cit9CisKKyMgYWRhcHRlZCBmcm9tIHBhZ2VyLmMKK3N1YiBjb25maWdfcGFnZXIgeworCWlmICghIC10ICpTVERPVVQpIHsKKwkJJEVOVntHSVRfUEFHRVJfSU5fVVNFfSA9ICdmYWxzZSc7CisJCSRwYWdlciA9IHVuZGVmOworCQlyZXR1cm47CisJfQorCWNob21wKCRwYWdlciA9IGNvbW1hbmRfb25lbGluZShxdyh2YXIgR0lUX1BBR0VSKSkpOworCWlmICgkcGFnZXIgZXEgJ2NhdCcpIHsKKwkJJHBhZ2VyID0gdW5kZWY7CisJfQorCSRFTlZ7R0lUX1BBR0VSX0lOX1VTRX0gPSBkZWZpbmVkKCRwYWdlcik7Cit9CisKK3N1YiBydW5fcGFnZXIgeworCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkcGFnZXI7CisJcGlwZSBteSAoJHJmZCwgJHdmZCkgb3IgcmV0dXJuOworCWRlZmluZWQobXkgJHBpZCA9IGZvcmspIG9yIGZhdGFsICJDYW4ndCBmb3JrOiAkISI7CisJaWYgKCEkcGlkKSB7CisJCW9wZW4gU1RET1VULCAnPiYnLCAkd2ZkIG9yCisJCSAgICAgICAgICAgICAgICAgICAgIGZhdGFsICJDYW4ndCByZWRpcmVjdCB0byBzdGRvdXQ6ICQhIjsKKwkJcmV0dXJuOworCX0KKwlvcGVuIFNURElOLCAnPCYnLCAkcmZkIG9yIGZhdGFsICJDYW4ndCByZWRpcmVjdCBzdGRpbjogJCEiOworCSRFTlZ7TEVTU30gfHw9ICdGUlgnOworCSRFTlZ7TFZ9IHx8PSAnLWMnOworCWV4ZWMgJHBhZ2VyIG9yIGZhdGFsICJDYW4ndCBydW4gcGFnZXI6ICQhICgkcGFnZXIpIjsKK30KKworc3ViIGZvcm1hdF9zdm5fZGF0ZSB7CisJbXkgJHQgPSBzaGlmdCB8fCB0aW1lOworCXJlcXVpcmUgR2l0OjpTVk47CisJbXkgJGdtb2ZmID0gZ2V0X3R6X29mZnNldCgkdCk7CisJcmV0dXJuIHN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyAkZ21vZmYgKCVhLCAlZCAlYiAlWSkiLCBsb2NhbHRpbWUoJHQpKTsKK30KKworc3ViIHBhcnNlX2dpdF9kYXRlIHsKKwlteSAoJHQsICR0eikgPSBAXzsKKwkjIERhdGU6OlBhcnNlIGlzbid0IGluIHRoZSBzdGFuZGFyZCBQZXJsIGRpc3RybyA6KAorCWlmICgkdHogPX4gcy9eXCsvLykgeworCQkkdCArPSB0el90b19zX29mZnNldCgkdHopOworCX0gZWxzaWYgKCR0eiA9fiBzL15cLS8vKSB7CisJCSR0IC09IHR6X3RvX3Nfb2Zmc2V0KCR0eik7CisJfQorCXJldHVybiAkdDsKK30KKworc3ViIHNldF9sb2NhbF90aW1lem9uZSB7CisJaWYgKGRlZmluZWQgJFRaKSB7CisJCSRFTlZ7VFp9ID0gJFRaOworCX0gZWxzZSB7CisJCWRlbGV0ZSAkRU5We1RafTsKKwl9Cit9CisKK3N1YiB0el90b19zX29mZnNldCB7CisJbXkgKCR0eikgPSBAXzsKKwkkdHogPX4gcy8oXGRcZCkkLy87CisJcmV0dXJuICgkMSAqIDYwKSArICgkdHogKiAzNjAwKTsKK30KKworc3ViIGdldF9hdXRob3JfaW5mbyB7CisJbXkgKCRkZXN0LCAkYXV0aG9yLCAkdCwgJHR6KSA9IEBfOworCSRhdXRob3IgPX4gcy8oPzpeXHMqfFxzKiQpLy9nOworCSRkZXN0LT57YV9yYXd9ID0gJGF1dGhvcjsKKwlteSAkYXU7CisJaWYgKCQ6Ol9hdXRob3JzKSB7CisJCSRhdSA9ICRydXNlcnN7JGF1dGhvcn0gfHwgdW5kZWY7CisJfQorCWlmICghJGF1KSB7CisJCSgkYXUpID0gKCRhdXRob3IgPX4gLzwoW14+XSspXEBbXj5dKz4kLyk7CisJfQorCSRkZXN0LT57dH0gPSAkdDsKKwkkZGVzdC0+e3R6fSA9ICR0ejsKKwkkZGVzdC0+e2F9ID0gJGF1OworCSRkZXN0LT57dF91dGN9ID0gcGFyc2VfZ2l0X2RhdGUoJHQsICR0eik7Cit9CisKK3N1YiBwcm9jZXNzX2NvbW1pdCB7CisJbXkgKCRjLCAkcl9taW4sICRyX21heCwgJGRlZmVyKSA9IEBfOworCWlmIChkZWZpbmVkICRyX21pbiAmJiBkZWZpbmVkICRyX21heCkgeworCQlpZiAoJHJfbWluID09ICRjLT57cn0gJiYgJHJfbWluID09ICRyX21heCkgeworCQkJc2hvd19jb21taXQoJGMpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIDEgaWYgJHJfbWluID09ICRyX21heDsKKwkJaWYgKCRyX21pbiA8ICRyX21heCkgeworCQkJIyB3ZSBuZWVkIHRvIHJldmVyc2UgdGhlIHByaW50IG9yZGVyCisJCQlyZXR1cm4gMCBpZiAoZGVmaW5lZCAkbGltaXQgJiYgLS0kbGltaXQgPCAwKTsKKwkJCXB1c2ggQCRkZWZlciwgJGM7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoJHJfbWluICE9ICRyX21heCkgeworCQkJcmV0dXJuIDEgaWYgKCRyX21pbiA8ICRjLT57cn0pOworCQkJcmV0dXJuIDEgaWYgKCRyX21heCA+ICRjLT57cn0pOworCQl9CisJfQorCXJldHVybiAwIGlmIChkZWZpbmVkICRsaW1pdCAmJiAtLSRsaW1pdCA8IDApOworCXNob3dfY29tbWl0KCRjKTsKKwlyZXR1cm4gMTsKK30KKworbXkgJGxfZm10Oworc3ViIHNob3dfY29tbWl0IHsKKwlteSAkYyA9IHNoaWZ0OworCWlmICgkb25lbGluZSkgeworCQlteSAkeCA9ICJcbiI7CisJCWlmIChteSAkbCA9ICRjLT57bH0pIHsKKwkJCXdoaWxlICgkbC0+WzBdID1+IC9eXHMqJC8pIHsgc2hpZnQgQCRsIH0KKwkJCSR4ID0gJGwtPlswXTsKKwkJfQorCQkkbF9mbXQgfHw9ICdBJyAuIGxlbmd0aCgkYy0+e3J9KTsKKwkJcHJpbnQgJ3InLHBhY2soJGxfZm10LCAkYy0+e3J9KSwnIHwgJzsKKwkJcHJpbnQgIiRjLT57Y30gfCAiIGlmICRzaG93X2NvbW1pdDsKKwkJcHJpbnQgJHg7CisJfSBlbHNlIHsKKwkJc2hvd19jb21taXRfbm9ybWFsKCRjKTsKKwl9Cit9CisKK3N1YiBzaG93X2NvbW1pdF9jaGFuZ2VkX3BhdGhzIHsKKwlteSAoJGMpID0gQF87CisJcmV0dXJuIHVubGVzcyAkYy0+e2NoYW5nZWR9OworCXByaW50ICJDaGFuZ2VkIHBhdGhzOlxuIiwgQHskYy0+e2NoYW5nZWR9fTsKK30KKworc3ViIHNob3dfY29tbWl0X25vcm1hbCB7CisJbXkgKCRjKSA9IEBfOworCXByaW50IGNvbW1pdF9sb2dfc2VwYXJhdG9yLCAiciRjLT57cn0gfCAiOworCXByaW50ICIkYy0+e2N9IHwgIiBpZiAkc2hvd19jb21taXQ7CisJcHJpbnQgIiRjLT57YX0gfCAiLCBmb3JtYXRfc3ZuX2RhdGUoJGMtPnt0X3V0Y30pLCAnIHwgJzsKKwlteSAkbnJfbGluZSA9IDA7CisKKwlpZiAobXkgJGwgPSAkYy0+e2x9KSB7CisJCXdoaWxlICgkbC0+WyQjJGxdIGVxICJcbiIgJiYgJCMkbCA+IDAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkbC0+WygkIyRsIC0gMSldIGVxICJcbiIpIHsKKwkJCXBvcCBAJGw7CisJCX0KKwkJJG5yX2xpbmUgPSBzY2FsYXIgQCRsOworCQlpZiAoISRucl9saW5lKSB7CisJCQlwcmludCAiMSBsaW5lXG5cblxuIjsKKwkJfSBlbHNlIHsKKwkJCWlmICgkbnJfbGluZSA9PSAxKSB7CisJCQkJJG5yX2xpbmUgPSAnMSBsaW5lJzsKKwkJCX0gZWxzZSB7CisJCQkJJG5yX2xpbmUgLj0gJyBsaW5lcyc7CisJCQl9CisJCQlwcmludCAkbnJfbGluZSwgIlxuIjsKKwkJCXNob3dfY29tbWl0X2NoYW5nZWRfcGF0aHMoJGMpOworCQkJcHJpbnQgIlxuIjsKKwkJCXByaW50ICRfIGZvcmVhY2ggQCRsOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnQgIjEgbGluZVxuIjsKKwkJc2hvd19jb21taXRfY2hhbmdlZF9wYXRocygkYyk7CisJCXByaW50ICJcbiI7CisKKwl9CisJZm9yZWFjaCBteSAkeCAocXcvcmF3IHN0YXQgZGlmZi8pIHsKKwkJaWYgKCRjLT57JHh9KSB7CisJCQlwcmludCAiXG4iOworCQkJcHJpbnQgJF8gZm9yZWFjaCBAeyRjLT57JHh9fQorCQl9CisJfQorfQorCitzdWIgY21kX3Nob3dfbG9nIHsKKwlteSAoQGFyZ3MpID0gQF87CisJbXkgKCRyX21pbiwgJHJfbWF4KTsKKwlteSAkcl9sYXN0ID0gLTE7ICMgcHJldmVudCBkdXBlcworCXNldF9sb2NhbF90aW1lem9uZSgpOworCWlmIChkZWZpbmVkICQ6Ol9yZXZpc2lvbikgeworCQlpZiAoJDo6X3JldmlzaW9uID1+IC9eKFxkKyk6KFxkKykkLykgeworCQkJKCRyX21pbiwgJHJfbWF4KSA9ICgkMSwgJDIpOworCQl9IGVsc2lmICgkOjpfcmV2aXNpb24gPX4gL15cZCskLykgeworCQkJJHJfbWluID0gJHJfbWF4ID0gJDo6X3JldmlzaW9uOworCQl9IGVsc2UgeworCQkJZmF0YWwgIi1yJDo6X3JldmlzaW9uIGlzIG5vdCBzdXBwb3J0ZWQsIHVzZSAiLAorCQkJCSJzdGFuZGFyZCAnZ2l0IGxvZycgYXJndW1lbnRzIGluc3RlYWQiOworCQl9CisJfQorCisJY29uZmlnX3BhZ2VyKCk7CisJQGFyZ3MgPSBnaXRfc3ZuX2xvZ19jbWQoJHJfbWluLCAkcl9tYXgsIEBhcmdzKTsKKwlpZiAoIUBhcmdzKSB7CisJCXByaW50IGNvbW1pdF9sb2dfc2VwYXJhdG9yIHVubGVzcyAkaW5jcmVtZW50YWwgfHwgJG9uZWxpbmU7CisJCXJldHVybjsKKwl9CisJbXkgJGxvZyA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoQGFyZ3MpOworCXJ1bl9wYWdlcigpOworCW15IChAaywgJGMsICRkLCAkc3RhdCk7CisJbXkgJGVzY19jb2xvciA9IHFyLyg/OlwwMzNcWyg/Oig/OlxkKzspKlxkKik/bSkqLzsKKwl3aGlsZSAoPCRsb2c+KSB7CisJCWlmICgvXiR7ZXNjX2NvbG9yfWNvbW1pdCAoPzotICk/KCQ6OnNoYTFfc2hvcnQpL28pIHsKKwkJCW15ICRjbXQgPSAkMTsKKwkJCWlmICgkYyAmJiBjbXRfc2hvd2FibGUoJGMpICYmICRjLT57cn0gIT0gJHJfbGFzdCkgeworCQkJCSRyX2xhc3QgPSAkYy0+e3J9OworCQkJCXByb2Nlc3NfY29tbWl0KCRjLCAkcl9taW4sICRyX21heCwgXEBrKSBvcgorCQkJCQkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCSRkID0gdW5kZWY7CisJCQkkYyA9IHsgYyA9PiAkY210IH07CisJCX0gZWxzaWYgKC9eJHtlc2NfY29sb3J9YXV0aG9yICguKykgKFxkKykgKFtcLVwrXT9cZCspJC9vKSB7CisJCQlnZXRfYXV0aG9yX2luZm8oJGMsICQxLCAkMiwgJDMpOworCQl9IGVsc2lmICgvXiR7ZXNjX2NvbG9yfSg/OnRyZWV8cGFyZW50fGNvbW1pdHRlcikgL28pIHsKKwkJCSMgaWdub3JlCisJCX0gZWxzaWYgKC9eJHtlc2NfY29sb3J9OlxkezZ9IFxkezZ9ICQ6OnNoYTFfc2hvcnQvbykgeworCQkJcHVzaCBAeyRjLT57cmF3fX0sICRfOworCQl9IGVsc2lmICgvXiR7ZXNjX2NvbG9yfVtBQ1JNRFRdXHQvKSB7CisJCQkjIHdlIGNvdWxkIGFkZCAkU1ZOLT57c3ZuX3BhdGh9IGhlcmUsIGJ1dCB0aGF0IHJlcXVpcmVzCisJCQkjIHJlbW90ZSBhY2Nlc3MgYXQgdGhlIG1vbWVudCAocmVwb19wYXRoX3NwbGl0KS4uLgorCQkJcyNeKCR7ZXNjX2NvbG9yfSkoW0FDUk1EVF0pXHQjJDEgICAkMiAjbzsKKwkJCXB1c2ggQHskYy0+e2NoYW5nZWR9fSwgJF87CisJCX0gZWxzaWYgKC9eJHtlc2NfY29sb3J9ZGlmZiAvbykgeworCQkJJGQgPSAxOworCQkJcHVzaCBAeyRjLT57ZGlmZn19LCAkXzsKKwkJfSBlbHNpZiAoJGQpIHsKKwkJCXB1c2ggQHskYy0+e2RpZmZ9fSwgJF87CisJCX0gZWxzaWYgKC9eXCAuK1wgXHxccypcZCtcICRlc2NfY29sb3JbXCtcLV0qCisJCSAgICAgICAgICAkZXNjX2NvbG9yKltcK1wtXSokZXNjX2NvbG9yJC94KSB7CisJCQkkc3RhdCA9IDE7CisJCQlwdXNoIEB7JGMtPntzdGF0fX0sICRfOworCQl9IGVsc2lmICgkc3RhdCAmJiAvXiBcZCsgZmlsZXMgY2hhbmdlZCwgXGQrIGluc2VydGlvbnMvKSB7CisJCQlwdXNoIEB7JGMtPntzdGF0fX0sICRfOworCQkJJHN0YXQgPSB1bmRlZjsKKwkJfSBlbHNpZiAoL14ke2VzY19jb2xvcn0gICAgKGdpdC1zdm4taWQ6LispJC9vKSB7CisJCQkoJGMtPnt1cmx9LCAkYy0+e3J9LCB1bmRlZikgPSA6OmV4dHJhY3RfbWV0YWRhdGEoJDEpOworCQl9IGVsc2lmIChzL14ke2VzY19jb2xvcn0gICAgLy9vKSB7CisJCQlwdXNoIEB7JGMtPntsfX0sICRfOworCQl9CisJfQorCWlmICgkYyAmJiBkZWZpbmVkICRjLT57cn0gJiYgJGMtPntyfSAhPSAkcl9sYXN0KSB7CisJCSRyX2xhc3QgPSAkYy0+e3J9OworCQlwcm9jZXNzX2NvbW1pdCgkYywgJHJfbWluLCAkcl9tYXgsIFxAayk7CisJfQorCWlmIChAaykgeworCQkoJHJfbWluLCAkcl9tYXgpID0gKCRyX21heCwgJHJfbWluKTsKKwkJcHJvY2Vzc19jb21taXQoJF8sICRyX21pbiwgJHJfbWF4KSBmb3JlYWNoIHJldmVyc2UgQGs7CisJfQorb3V0OgorCWNsb3NlICRsb2c7CisJcHJpbnQgY29tbWl0X2xvZ19zZXBhcmF0b3IgdW5sZXNzICRpbmNyZW1lbnRhbCB8fCAkb25lbGluZTsKK30KKworc3ViIGNtZF9ibGFtZSB7CisJbXkgJHBhdGggPSBwb3A7CisKKwljb25maWdfcGFnZXIoKTsKKwlydW5fcGFnZXIoKTsKKworCW15ICgkZmgsICRjdHgsICRyZXYpOworCisJaWYgKCRfZ2l0X2Zvcm1hdCkgeworCQkoJGZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoJ2JsYW1lJywgQF8sICRwYXRoKTsKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKwkJCWlmICgkbGluZSA9fiAvXlxePyhbWzp4ZGlnaXQ6XV0rKVxzLykgeworCQkJCSMgVW5jb21taXR0ZWQgZWRpdHMgc2hvdyB1cCBhcyBhIHJldiBJRCBvZgorCQkJCSMgYWxsIHplcm9zLCB3aGljaCB3ZSBjYW4ndCBsb29rIHVwIHdpdGgKKwkJCQkjIGNtdF9tZXRhZGF0YQorCQkJCWlmICgkMSAhfiAvXjArJC8pIHsKKwkJCQkJKHVuZGVmLCAkcmV2LCB1bmRlZikgPQorCQkJCQkJOjpjbXRfbWV0YWRhdGEoJDEpOworCQkJCQkkcmV2ID0gJzAnIGlmICghJHJldik7CisJCQkJfSBlbHNlIHsKKwkJCQkJJHJldiA9ICcwJzsKKwkJCQl9CisJCQkJJHJldiA9IHNwcmludGYoJyUtMTBzJywgJHJldik7CisJCQkJJGxpbmUgPX4gcy9eXF4/W1s6eGRpZ2l0Ol1dKyhccykvJHJldiQxLzsKKwkJCX0KKwkJCXByaW50ICRsaW5lOworCQl9CisJfSBlbHNlIHsKKwkJKCRmaCwgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKCdibGFtZScsICctcCcsIEBfLCAnSEVBRCcsCisJCQkJCQkgICctLScsICRwYXRoKTsKKwkJbXkgKCRzaGExKTsKKwkJbXkgJWF1dGhvcnM7CisJCW15IEBidWZmZXI7CisJCW15ICVkc2hhOyAjZGlzdGluY3Qgc2hhIGtleXMKKworCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZoPikgeworCQkJcHVzaCBAYnVmZmVyLCAkbGluZTsKKwkJCWlmICgkbGluZSA9fiAvXihbWzp4ZGlnaXQ6XV17NDB9KVxzXGQrXHNcZCsvKSB7CisJCQkJJGRzaGF7JDF9ID0gMTsKKwkJCX0KKwkJfQorCisJCW15ICRzMnIgPSA6OmNtdF9zaGEycmV2X2JhdGNoKFtrZXlzICVkc2hhXSk7CisKKwkJZm9yZWFjaCBteSAkbGluZSAoQGJ1ZmZlcikgeworCQkJaWYgKCRsaW5lID1+IC9eKFtbOnhkaWdpdDpdXXs0MH0pXHNcZCtcc1xkKy8pIHsKKwkJCQkkcmV2ID0gJHMyci0+eyQxfTsKKwkJCQkkcmV2ID0gJzAnIGlmICghJHJldikKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXmF1dGhvciAoLiopLykgeworCQkJCSRhdXRob3JzeyRyZXZ9ID0gJDE7CisJCQkJJGF1dGhvcnN7JHJldn0gPX4gcy9ccy9fL2c7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15cdCguKikkLykgeworCQkJCXByaW50ZigiJTZzICUxMHMgJXNcbiIsICRyZXYsICRhdXRob3JzeyRyZXZ9LCAkMSk7CisJCQl9CisJCX0KKwl9CisJY29tbWFuZF9jbG9zZV9waXBlKCRmaCwgJGN0eCk7Cit9CisKKzE7CmRpZmYgLS1naXQgYS9wZXJsL0dpdC9TVk4vTWVtb2l6ZS9ZQU1MLnBtIGIvcGVybC9HaXQvU1ZOL01lbW9pemUvWUFNTC5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Njc2YjhmCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9HaXQvU1ZOL01lbW9pemUvWUFNTC5wbQpAQCAtMCwwICsxLDkzIEBACitwYWNrYWdlIEdpdDo6U1ZOOjpNZW1vaXplOjpZQU1MOwordXNlIHdhcm5pbmdzOwordXNlIHN0cmljdDsKK3VzZSBZQU1MOjpBbnkgKCk7CisKKyMgYmFzZWQgb24gTWVtb2l6ZTo6U3RvcmFibGUuCisKK3N1YiBUSUVIQVNIIHsKKwlteSAkcGFja2FnZSA9IHNoaWZ0OworCW15ICRmaWxlbmFtZSA9IHNoaWZ0OworCW15ICR0cnVlaGFzaCA9ICgtZSAkZmlsZW5hbWUpID8gWUFNTDo6QW55OjpMb2FkRmlsZSgkZmlsZW5hbWUpIDoge307CisJbXkgJHNlbGYgPSB7RklMRU5BTUUgPT4gJGZpbGVuYW1lLCBIID0+ICR0cnVlaGFzaH07CisJYmxlc3MgJHNlbGYgPT4gJHBhY2thZ2U7Cit9CisKK3N1YiBTVE9SRSB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwkkc2VsZi0+e0h9eyRfWzBdfSA9ICRfWzFdOworfQorCitzdWIgRkVUQ0ggeworCW15ICRzZWxmID0gc2hpZnQ7CisJJHNlbGYtPntIfXskX1swXX07Cit9CisKK3N1YiBFWElTVFMgeworCW15ICRzZWxmID0gc2hpZnQ7CisJZXhpc3RzICRzZWxmLT57SH17JF9bMF19OworfQorCitzdWIgREVTVFJPWSB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlZQU1MOjpBbnk6OkR1bXBGaWxlKCRzZWxmLT57RklMRU5BTUV9LCAkc2VsZi0+e0h9KTsKK30KKworc3ViIFNDQUxBUiB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlzY2FsYXIoJXskc2VsZi0+e0h9fSk7Cit9CisKK3N1YiBGSVJTVEtFWSB7CisJJ0Zha2UgaGFzaCBmcm9tIEdpdDo6U1ZOOjpNZW1vaXplOjpZQU1MJzsKK30KKworc3ViIE5FWFRLRVkgeworCXVuZGVmOworfQorCisxOworX19FTkRfXworCis9aGVhZDEgTkFNRQorCitHaXQ6OlNWTjo6TWVtb2l6ZTo6WUFNTCAtIHN0b3JlIE1lbW9pemVkIGRhdGEgaW4gWUFNTCBmb3JtYXQKKworPWhlYWQxIFNZTk9QU0lTCisKKyAgICB1c2UgTWVtb2l6ZTsKKyAgICB1c2UgR2l0OjpTVk46Ok1lbW9pemU6OllBTUw7CisKKyAgICB0aWUgbXkgJWNhY2hlID0+ICdHaXQ6OlNWTjo6TWVtb2l6ZTo6WUFNTCcsICRmaWxlbmFtZTsKKyAgICBtZW1vaXplKCdzbG93X2Z1bmN0aW9uJywgU0NBTEFSX0NBQ0hFID0+IFtIQVNIID0+IFwlY2FjaGVdKTsKKyAgICBzbG93X2Z1bmN0aW9uKGFyZ3VtZW50cyk7CisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGNsYXNzIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGllIGEgaGFzaCB0byBhCitZQU1MIGZpbGUuICBUaGUgZmlsZSBpcyByZWFkIHdoZW4gdGhlIGhhc2ggaXMgaW5pdGlhbGl6ZWQgYW5kCityZXdyaXR0ZW4gd2hlbiB0aGUgaGFzaCBpcyBkZXN0cm95ZWQuCisKK1RoZSBpbnRlbnQgaXMgdG8gYWxsb3cgTDxNZW1vaXplPiB0byBiYWNrIGl0cyBjYWNoZSB3aXRoIGEgZmlsZSBpbgorWUFNTCBmb3JtYXQsIGp1c3QgbGlrZSBMPE1lbW9pemU6OlN0b3JhYmxlPiBhbGxvd3MgTDxNZW1vaXplPiB0bworYmFjayBpdHMgY2FjaGUgd2l0aCBhIGZpbGUgaW4gU3RvcmFibGUgZm9ybWF0LiAgVW5saWtlIHRoZSBTdG9yYWJsZQorZm9ybWF0LCB0aGUgWUFNTCBmb3JtYXQgaXMgcGxhdGZvcm0taW5kZXBlbmRlbnQgYW5kIGZhaXJseSBzdGFibGUuCisKK0NhcnBzIG9uIGVycm9yLgorCis9aGVhZDEgRElBR05PU1RJQ1MKKworU2VlIEw8WUFNTDo6QW55Pi4KKworPWhlYWQxIERFUEVOREVOQ0lFUworCitMPFlBTUw6OkFueT4gZnJvbSBDUEFOLgorCis9aGVhZDEgSU5DT01QQVRJQklMSVRJRVMKKworTm9uZSByZXBvcnRlZC4KKworPWhlYWQxIEJVR1MKKworVGhlIGVudGlyZSBjYWNoZSBpcyByZWFkIGludG8gYSBQZXJsIGhhc2ggd2hlbiBsb2FkaW5nIHRoZSBmaWxlLAorc28gdGhpcyBpcyBub3QgdmVyeSBzY2FsYWJsZS4KZGlmZiAtLWdpdCBhL3BlcmwvR2l0L1NWTi9NaWdyYXRpb24ucG0gYi9wZXJsL0dpdC9TVk4vTWlncmF0aW9uLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOTBmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4vTWlncmF0aW9uLnBtCkBAIC0wLDAgKzEsMjY1IEBACitwYWNrYWdlIEdpdDo6U1ZOOjpNaWdyYXRpb247CisjIHRoZXNlIHZlcnNpb24gbnVtYmVycyBkbyBOT1QgY29ycmVzcG9uZCB0byBhY3R1YWwgdmVyc2lvbiBudW1iZXJzCisjIG9mIGdpdCBvciBnaXQtc3ZuLiAgVGhleSBhcmUganVzdCByZWxhdGl2ZS4KKyMKKyMgdjAgbGF5b3V0OiAuZ2l0LyRpZC9pbmZvL3VybCwgcmVmcy9oZWFkcy8kaWQtSEVBRAorIworIyB2MSBsYXlvdXQ6IC5naXQvJGlkL2luZm8vdXJsLCByZWZzL3JlbW90ZXMvJGlkCisjCisjIHYyIGxheW91dDogLmdpdC9zdm4vJGlkL2luZm8vdXJsLCByZWZzL3JlbW90ZXMvJGlkCisjCisjIHYzIGxheW91dDogLmdpdC9zdm4vJGlkLCByZWZzL3JlbW90ZXMvJGlkCisjICAgICAgICAgICAgLSBpbmZvL3VybCBtYXkgcmVtYWluIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorIyAgICAgICAgICAgIC0gdGhpcyBpcyB3aGF0IHdlIG1pZ3JhdGUgdXAgdG8gdGhpcyBsYXlvdXQgYXV0b21hdGljYWxseSwKKyMgICAgICAgICAgICAtIHRoaXMgd2lsbCBiZSB1c2VkIGJ5IGdpdCBzdm4gaW5pdCBvbiBzaW5nbGUgYnJhbmNoZXMKKyMgdjMuMSBsYXlvdXQgKGF1dG8gbWlncmF0ZWQpOgorIyAgICAgICAgICAgIC0gLnJldl9kYiA9PiAucmV2X2RiLiRVVUlELCAucmV2X2RiIHdpbGwgcmVtYWluIGFzIGEgc3ltbGluaworIyAgICAgICAgICAgICAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisjCisjIHY0IGxheW91dDogLmdpdC9zdm4vJHJlcG9faWQvJGlkLCByZWZzL3JlbW90ZXMvJHJlcG9faWQvJGlkCisjICAgICAgICAgICAgLSB0aGlzIGlzIG9ubHkgY3JlYXRlZCBmb3IgbmV3bHkgbXVsdGktaW5pdC1lZAorIyAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLiAgU2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlCisjICAgICAgICAgICAgICAtLXVzZS1zZXBhcmF0ZS1yZW1vdGVzIG9wdGlvbiBpbiBnaXQtY2xvbmUgKG5vdyBkZWZhdWx0KQorIyAgICAgICAgICAgIC0gd2UgZG8gbm90IGF1dG9tYXRpY2FsbHkgbWlncmF0ZSB0byB0aGlzIChmb2xsb3dpbmcKKyMgICAgICAgICAgICAgIHRoZSBleGFtcGxlIHNldCBieSBjb3JlIGdpdCkKKyMKKyMgdjUgbGF5b3V0OiAucmV2X2RiLiRVVUlEID0+IC5yZXZfbWFwLiRVVUlECisjICAgICAgICAgICAgLSBuZXdlciwgbW9yZS1lZmZpY2llbnQgZm9ybWF0IHRoYXQgdXNlcyAyNC1ieXRlcyBwZXIgcmVjb3JkCisjICAgICAgICAgICAgICB3aXRoIG5vIGZpbGxlciBzcGFjZS4KKyMgICAgICAgICAgICAtIHVzZSB4eGQgLWMyNCA8IC5yZXZfbWFwLiRVVUlEIHRvIHZpZXcgYW5kIGRlYnVnCisjICAgICAgICAgICAgLSBUaGlzIGlzIGEgb25lLXdheSBtaWdyYXRpb24sIHJlcG9zaXRvcmllcyB1cGRhdGVkIHRvIHRoZQorIyAgICAgICAgICAgICAgbmV3IGZvcm1hdCB3aWxsIG5vdCBiZSBhYmxlIHRvIHVzZSBvbGQgZ2l0LXN2biB3aXRob3V0CisjICAgICAgICAgICAgICByZWJ1aWxkaW5nIHRoZSAucmV2X2RiLiAgUmVidWlsZGluZyB0aGUgcmV2X2RiIGlzIG5vdAorIyAgICAgICAgICAgICAgcG9zc2libGUgaWYgbm9NZXRhZGF0YSBvciB1c2VTdm1Qcm9wcyBhcmUgc2V0OyBidXQgc2hvdWxkCisjICAgICAgICAgICAgICBiZSBubyBwcm9ibGVtIGZvciB1c2VycyB0aGF0IHVzZSB0aGUgKHNlbnNpYmxlKSBkZWZhdWx0cy4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgQ2FycCBxdy9jcm9hay87Cit1c2UgRmlsZTo6UGF0aCBxdy9ta3BhdGgvOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3L2Rpcm5hbWUgYmFzZW5hbWUvOworCitvdXIgJF9taW5pbWl6ZTsKK3VzZSBHaXQgcXcoCisJY29tbWFuZAorCWNvbW1hbmRfbm9pc3kKKwljb21tYW5kX291dHB1dF9waXBlCisJY29tbWFuZF9jbG9zZV9waXBlCisJY29tbWFuZF9vbmVsaW5lCispOwordXNlIEdpdDo6U1ZOOworCitzdWIgbWlncmF0ZV9mcm9tX3YwIHsKKwlteSAkZ2l0X2RpciA9ICRFTlZ7R0lUX0RJUn07CisJcmV0dXJuIHVuZGVmIHVubGVzcyAtZCAkZ2l0X2RpcjsKKwlteSAoJGZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUocXcvcmV2LXBhcnNlIC0tc3ltYm9saWMgLS1hbGwvKTsKKwlteSAkbWlncmF0ZWQgPSAwOworCXdoaWxlICg8JGZoPikgeworCQljaG9tcDsKKwkJbXkgKCRpZCwgJG9yaWdfcmVmKSA9ICgkXywgJF8pOworCQluZXh0IHVubGVzcyAkaWQgPX4gcyNecmVmcy9oZWFkcy8oLispLUhFQUQkIyQxIzsKKwkJbXkgJGluZm9fdXJsID0gY29tbWFuZF9vbmVsaW5lKHF3KHJldi1wYXJzZSAtLWdpdC1wYXRoKSwKKwkJCQkJCSIkaWQvaW5mby91cmwiKTsKKwkJbmV4dCB1bmxlc3MgLWYgJGluZm9fdXJsOworCQlteSAkbmV3X3JlZiA9ICJyZWZzL3JlbW90ZXMvJGlkIjsKKwkJaWYgKDo6dmVyaWZ5X3JlZigiJG5ld19yZWZeMCIpKSB7CisJCQlwcmludCBTVERFUlIgIlc6ICRvcmlnX3JlZiBpcyBwcm9iYWJseSBhbiBvbGQgIiwKKwkJCSAgICAgICAgICAgICAiYnJhbmNoIHVzZWQgYnkgYW4gYW5jaWVudCB2ZXJzaW9uIG9mICIsCisJCQkJICAgICAiZ2l0LXN2bi5cbiIsCisJCQkJICAgICAiSG93ZXZlciwgJG5ld19yZWYgYWxzbyBleGlzdHMuXG4iLAorCQkJCSAgICAgIldlIHdpbGwgbm90IGJlIGFibGUgIiwKKwkJCQkgICAgICJ0byB1c2UgdGhpcyBicmFuY2ggdW50aWwgdGhpcyAiLAorCQkJCSAgICAgImFtYmlndWl0eSBpcyByZXNvbHZlZC5cbiI7CisJCQluZXh0OworCQl9CisJCXByaW50IFNUREVSUiAiTWlncmF0aW5nIGZyb20gdjAgbGF5b3V0Li4uXG4iIGlmICEkbWlncmF0ZWQ7CisJCXByaW50IFNUREVSUiAiUmVuYW1pbmcgcmVmOiAkb3JpZ19yZWYgPT4gJG5ld19yZWZcbiI7CisJCWNvbW1hbmRfbm9pc3koJ3VwZGF0ZS1yZWYnLCAkbmV3X3JlZiwgJG9yaWdfcmVmKTsKKwkJY29tbWFuZF9ub2lzeSgndXBkYXRlLXJlZicsICctZCcsICRvcmlnX3JlZiwgJG9yaWdfcmVmKTsKKwkJJG1pZ3JhdGVkKys7CisJfQorCWNvbW1hbmRfY2xvc2VfcGlwZSgkZmgsICRjdHgpOworCXByaW50IFNUREVSUiAiRG9uZSBtaWdyYXRpbmcgZnJvbSB2MCBsYXlvdXQuLi5cbiIgaWYgJG1pZ3JhdGVkOworCSRtaWdyYXRlZDsKK30KKworc3ViIG1pZ3JhdGVfZnJvbV92MSB7CisJbXkgJGdpdF9kaXIgPSAkRU5We0dJVF9ESVJ9OworCW15ICRtaWdyYXRlZCA9IDA7CisJcmV0dXJuICRtaWdyYXRlZCB1bmxlc3MgLWQgJGdpdF9kaXI7CisJbXkgJHN2bl9kaXIgPSBHaXQ6OlNWTjo6c3ZuX2RpcigpOworCisJIyBqdXN0IGluIGNhc2Ugc29tZWJvZHkgdXNlZCAnc3ZuJyBhcyB0aGVpciAkaWQgYXQgc29tZSBwb2ludC4uLgorCXJldHVybiAkbWlncmF0ZWQgaWYgLWQgJHN2bl9kaXIgJiYgISAtZiAiJHN2bl9kaXIvaW5mby91cmwiOworCisJcHJpbnQgU1RERVJSICJNaWdyYXRpbmcgZnJvbSBhIGdpdC1zdm4gdjEgbGF5b3V0Li4uXG4iOworCW1rcGF0aChbJHN2bl9kaXJdKTsKKwlwcmludCBTVERFUlIgIkRhdGEgZnJvbSBhIHByZXZpb3VzIHZlcnNpb24gb2YgZ2l0LXN2biBleGlzdHMsIGJ1dFxuXHQiLAorCSAgICAgICAgICAgICAiJHN2bl9kaXJcblx0KHJlcXVpcmVkIGZvciB0aGlzIHZlcnNpb24gIiwKKwkgICAgICAgICAgICAgIigkOjpWRVJTSU9OKSBvZiBnaXQtc3ZuKSBkb2VzIG5vdCBleGlzdC5cbiI7CisJbXkgKCRmaCwgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKHF3L3Jldi1wYXJzZSAtLXN5bWJvbGljIC0tYWxsLyk7CisJd2hpbGUgKDwkZmg+KSB7CisJCW15ICR4ID0gJF87CisJCW5leHQgdW5sZXNzICR4ID1+IHMjXnJlZnMvcmVtb3Rlcy8jIzsKKwkJY2hvbXAgJHg7CisJCW15ICRpbmZvX3VybCA9IGNvbW1hbmRfb25lbGluZShxdyhyZXYtcGFyc2UgLS1naXQtcGF0aCksCisJCQkJCQkiJHgvaW5mby91cmwiKTsKKwkJbmV4dCB1bmxlc3MgLWYgJGluZm9fdXJsOworCQlteSAkdSA9IGV2YWwgeyA6OmZpbGVfdG9fcygkaW5mb191cmwpIH07CisJCW5leHQgdW5sZXNzICR1OworCQlteSAkZG4gPSBkaXJuYW1lKCIkc3ZuX2Rpci8keCIpOworCQlta3BhdGgoWyRkbl0pIHVubGVzcyAtZCAkZG47CisJCWlmICgkeCBlcSAnc3ZuJykgeyAjIHRoZXkgdXNlZCAnc3ZuJyBhcyBHSVRfU1ZOX0lEOgorCQkJbWtwYXRoKFsiJHN2bl9kaXIvc3ZuIl0pOworCQkJcHJpbnQgU1RERVJSICIgLSAkZ2l0X2Rpci8keC9pbmZvID0+ICIsCisJCQkgICAgICAgICAgICAgICAgIiRzdm5fZGlyLyR4L2luZm9cbiI7CisJCQlyZW5hbWUgIiRnaXRfZGlyLyR4L2luZm8iLCAiJHN2bl9kaXIvJHgvaW5mbyIgb3IKKwkJCSAgICAgICBjcm9hayAiJCE6ICR4IjsKKwkJCSMgZG9uJ3Qgd29ycnkgdG9vIG11Y2ggYWJvdXQgdGhlc2UsIHRoZXkgcHJvYmFibHkKKwkJCSMgZG9uJ3QgZXhpc3Qgd2l0aCByZXBvcyB0aGlzIG9sZCAoc2F2ZSBmb3IgaW5kZXgsCisJCQkjIGFuZCB3ZSBjYW4gZWFzaWx5IHJlZ2VuZXJhdGUgdGhhdCkKKwkJCWZvcmVhY2ggbXkgJGYgKHF3L3VuaGFuZGxlZC5sb2cgaW5kZXggLnJldl9kYi8pIHsKKwkJCQlyZW5hbWUgIiRnaXRfZGlyLyR4LyRmIiwgIiRzdm5fZGlyLyR4LyRmIjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByaW50IFNUREVSUiAiIC0gJGdpdF9kaXIvJHggPT4gJHN2bl9kaXIvJHhcbiI7CisJCQlyZW5hbWUgIiRnaXRfZGlyLyR4IiwgIiRzdm5fZGlyLyR4IiBvciBjcm9hayAiJCE6ICR4IjsKKwkJfQorCQkkbWlncmF0ZWQrKzsKKwl9CisJY29tbWFuZF9jbG9zZV9waXBlKCRmaCwgJGN0eCk7CisJcHJpbnQgU1RERVJSICJEb25lIG1pZ3JhdGluZyBmcm9tIGEgZ2l0LXN2biB2MSBsYXlvdXRcbiI7CisJJG1pZ3JhdGVkOworfQorCitzdWIgcmVhZF9vbGRfdXJscyB7CisJbXkgKCRsX21hcCwgJHBmeCwgJHBhdGgpID0gQF87CisJbXkgQGRpcjsKKwlmb3JlYWNoICg8JHBhdGgvKj4pIHsKKwkJaWYgKC1yICIkXy9pbmZvL3VybCIpIHsKKwkJCSRwZnggLj0gJy8nIGlmICRwZnggJiYgJHBmeCAhfiBtIS8kITsKKwkJCW15ICRyZWZfaWQgPSAkcGZ4IC4gYmFzZW5hbWUgJF87CisJCQlteSAkdXJsID0gOjpmaWxlX3RvX3MoIiRfL2luZm8vdXJsIik7CisJCQkkbF9tYXAtPnskcmVmX2lkfSA9ICR1cmw7CisJCX0gZWxzaWYgKC1kICRfKSB7CisJCQlwdXNoIEBkaXIsICRfOworCQl9CisJfQorCW15ICRzdm5fZGlyID0gR2l0OjpTVk46OnN2bl9kaXIoKTsKKwlmb3JlYWNoIChAZGlyKSB7CisJCW15ICR4ID0gJF87CisJCSR4ID1+IHMhXlxRJHN2bl9kaXJcRS8hIW87CisJCXJlYWRfb2xkX3VybHMoJGxfbWFwLCAkeCwgJF8pOworCX0KK30KKworc3ViIG1pZ3JhdGVfZnJvbV92MiB7CisJbXkgQGNmZyA9IGNvbW1hbmQocXcvY29uZmlnIC1sLyk7CisJcmV0dXJuIGlmIGdyZXAgL15zdm4tcmVtb3RlXC4uK1wudXJsPS8sIEBjZmc7CisJbXkgJWxfbWFwOworCXJlYWRfb2xkX3VybHMoXCVsX21hcCwgJycsIEdpdDo6U1ZOOjpzdm5fZGlyKCkpOworCW15ICRtaWdyYXRlZCA9IDA7CisKKwlyZXF1aXJlIEdpdDo6U1ZOOworCWZvcmVhY2ggbXkgJHJlZl9pZCAoc29ydCBrZXlzICVsX21hcCkgeworCQlldmFsIHsgR2l0OjpTVk4tPmluaXQoJGxfbWFweyRyZWZfaWR9LCAnJywgdW5kZWYsICRyZWZfaWQpIH07CisJCWlmICgkQCkgeworCQkJR2l0OjpTVk4tPmluaXQoJGxfbWFweyRyZWZfaWR9LCAnJywgJHJlZl9pZCwgJHJlZl9pZCk7CisJCX0KKwkJJG1pZ3JhdGVkKys7CisJfQorCSRtaWdyYXRlZDsKK30KKworc3ViIG1pbmltaXplX2Nvbm5lY3Rpb25zIHsKKwlyZXF1aXJlIEdpdDo6U1ZOOworCXJlcXVpcmUgR2l0OjpTVk46OlJhOworCisJbXkgJHIgPSBHaXQ6OlNWTjo6cmVhZF9hbGxfcmVtb3RlcygpOworCW15ICRuZXdfdXJscyA9IHt9OworCW15ICRyb290X3JlcG9zID0ge307CisJZm9yZWFjaCBteSAkcmVwb19pZCAoa2V5cyAlJHIpIHsKKwkJbXkgJHVybCA9ICRyLT57JHJlcG9faWR9LT57dXJsfSBvciBuZXh0OworCQlteSAkZmV0Y2ggPSAkci0+eyRyZXBvX2lkfS0+e2ZldGNofSBvciBuZXh0OworCQlteSAkcmEgPSBHaXQ6OlNWTjo6UmEtPm5ldygkdXJsKTsKKworCQkjIHNraXAgZXhpc3RpbmcgY2FzZXMgd2hlcmUgd2UgYWxyZWFkeSBjb25uZWN0IHRvIHRoZSByb290CisJCWlmICgoJHJhLT51cmwgZXEgJHJhLT57cmVwb3Nfcm9vdH0pIHx8CisJCSAgICAoJHJhLT57cmVwb3Nfcm9vdH0gZXEgJHJlcG9faWQpKSB7CisJCQkkcm9vdF9yZXBvcy0+eyRyYS0+dXJsfSA9ICRyZXBvX2lkOworCQkJbmV4dDsKKwkJfQorCisJCW15ICRyb290X3JhID0gR2l0OjpTVk46OlJhLT5uZXcoJHJhLT57cmVwb3Nfcm9vdH0pOworCQlteSAkcm9vdF9wYXRoID0gJHJhLT51cmw7CisJCSRyb290X3BhdGggPX4gcyNeXFEkcmEtPntyZXBvc19yb290fVxFKC98JCkjIzsKKwkJZm9yZWFjaCBteSAkcGF0aCAoa2V5cyAlJGZldGNoKSB7CisJCQlteSAkcmVmX2lkID0gJGZldGNoLT57JHBhdGh9OworCQkJbXkgJGdzID0gR2l0OjpTVk4tPm5ldygkcmVmX2lkLCAkcmVwb19pZCwgJHBhdGgpOworCisJCQkjIG1ha2Ugc3VyZSB3ZSBjYW4gcmVhZCB3aGVuIGNvbm5lY3RpbmcgdG8KKwkJCSMgYSBoaWdoZXIgbGV2ZWwgb2YgYSByZXBvc2l0b3J5CisJCQlteSAoJGxhc3RfcmV2LCB1bmRlZikgPSAkZ3MtPmxhc3RfcmV2X2NvbW1pdDsKKwkJCWlmICghZGVmaW5lZCAkbGFzdF9yZXYpIHsKKwkJCQkkbGFzdF9yZXYgPSBldmFsIHsKKwkJCQkJJHJvb3RfcmEtPmdldF9sYXRlc3RfcmV2bnVtOworCQkJCX07CisJCQkJbmV4dCBpZiAkQDsKKwkJCX0KKwkJCW15ICRuZXcgPSAkcm9vdF9wYXRoOworCQkJJG5ldyAuPSBsZW5ndGggJHBhdGggPyAiLyRwYXRoIiA6ICcnOworCQkJZXZhbCB7CisJCQkJJHJvb3RfcmEtPmdldF9sb2coWyRuZXddLCAkbGFzdF9yZXYsICRsYXN0X3JldiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgc3ViIHsgfSk7CisJCQl9OworCQkJbmV4dCBpZiAkQDsKKwkJCSRuZXdfdXJscy0+eyRyYS0+e3JlcG9zX3Jvb3R9fS0+eyRuZXd9ID0KKwkJCSAgICAgICAgeyByZWZfaWQgPT4gJHJlZl9pZCwKKwkJCQkgIG9sZF9yZXBvX2lkID0+ICRyZXBvX2lkLAorCQkJCSAgb2xkX3BhdGggPT4gJHBhdGggfTsKKwkJfQorCX0KKworCW15IEBlbXB0aWVkOworCWZvcmVhY2ggbXkgJHVybCAoa2V5cyAlJG5ld191cmxzKSB7CisJCSMgc2VlIGlmIHdlIGNhbiByZS11c2UgYW4gZXhpc3RpbmcgW3N2bi1yZW1vdGUgInJlcG9faWQiXQorCQkjIGluc3RlYWQgb2YgY3JlYXRpbmcgYShuIHVnbHkpIG5ldyBzZWN0aW9uOgorCQlteSAkcmVwb19pZCA9ICRyb290X3JlcG9zLT57JHVybH0gfHwgJHVybDsKKworCQlteSAkZmV0Y2ggPSAkbmV3X3VybHMtPnskdXJsfTsKKwkJZm9yZWFjaCBteSAkcGF0aCAoa2V5cyAlJGZldGNoKSB7CisJCQlteSAkeCA9ICRmZXRjaC0+eyRwYXRofTsKKwkJCUdpdDo6U1ZOLT5pbml0KCR1cmwsICRwYXRoLCAkcmVwb19pZCwgJHgtPntyZWZfaWR9KTsKKwkJCW15ICRwZnggPSAic3ZuLXJlbW90ZS4keC0+e29sZF9yZXBvX2lkfSI7CisKKwkJCW15ICRvbGRfZmV0Y2ggPSBxdW90ZW1ldGEoIiR4LT57b2xkX3BhdGh9OiIuCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICIkeC0+e3JlZl9pZH0iKTsKKwkJCWNvbW1hbmRfbm9pc3kocXcvY29uZmlnIC0tdW5zZXQvLAorCQkJICAgICAgICAgICAgICAiJHBmeC5mZXRjaCIsICdeJy4gJG9sZF9mZXRjaCAuICckJyk7CisJCQlkZWxldGUgJHItPnskeC0+e29sZF9yZXBvX2lkfX0tPgorCQkJICAgICAgIHtmZXRjaH0tPnskeC0+e29sZF9wYXRofX07CisJCQlpZiAoIWtleXMgJXskci0+eyR4LT57b2xkX3JlcG9faWR9fS0+e2ZldGNofX0pIHsKKwkJCQljb21tYW5kX25vaXN5KHF3L2NvbmZpZyAtLXVuc2V0LywKKwkJCQkgICAgICAgICAgICAgICIkcGZ4LnVybCIpOworCQkJCXB1c2ggQGVtcHRpZWQsICR4LT57b2xkX3JlcG9faWR9CisJCQl9CisJCX0KKwl9CisJaWYgKEBlbXB0aWVkKSB7CisJCW15ICRmaWxlID0gJEVOVntHSVRfQ09ORklHfSB8fAorCQkJY29tbWFuZF9vbmVsaW5lKHF3KHJldi1wYXJzZSAtLWdpdC1wYXRoIGNvbmZpZykpOworCQlwcmludCBTVERFUlIgPDxFT0Y7CitUaGUgZm9sbG93aW5nIFtzdm4tcmVtb3RlXSBzZWN0aW9ucyBpbiB5b3VyIGNvbmZpZyBmaWxlICgkZmlsZSkgYXJlIGVtcHR5CithbmQgY2FuIGJlIHNhZmVseSByZW1vdmVkOgorRU9GCisJCXByaW50IFNUREVSUiAiW3N2bi1yZW1vdGUgXCIkX1wiXVxuIiBmb3JlYWNoIEBlbXB0aWVkOworCX0KK30KKworc3ViIG1pZ3JhdGlvbl9jaGVjayB7CisJbWlncmF0ZV9mcm9tX3YwKCk7CisJbWlncmF0ZV9mcm9tX3YxKCk7CisJbWlncmF0ZV9mcm9tX3YyKCk7CisJbWluaW1pemVfY29ubmVjdGlvbnMoKSBpZiAkX21pbmltaXplOworfQorCisxOwpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvU1ZOL1Byb21wdC5wbSBiL3BlcmwvR2l0L1NWTi9Qcm9tcHQucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0MGIwOAotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvR2l0L1NWTi9Qcm9tcHQucG0KQEAgLTAsMCArMSwxODQgQEAKK3BhY2thZ2UgR2l0OjpTVk46OlByb21wdDsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CityZXF1aXJlIFNWTjo6Q29yZTsKK3VzZSB2YXJzIHF3LyRfbm9fYXV0aF9jYWNoZSAkX3VzZXJuYW1lLzsKKworc3ViIHNpbXBsZSB7CisJbXkgKCRjcmVkLCAkcmVhbG0sICRkZWZhdWx0X3VzZXJuYW1lLCAkbWF5X3NhdmUsICRwb29sKSA9IEBfOworCSRtYXlfc2F2ZSA9IHVuZGVmIGlmICRfbm9fYXV0aF9jYWNoZTsKKwkkZGVmYXVsdF91c2VybmFtZSA9ICRfdXNlcm5hbWUgaWYgZGVmaW5lZCAkX3VzZXJuYW1lOworCWlmIChkZWZpbmVkICRkZWZhdWx0X3VzZXJuYW1lICYmIGxlbmd0aCAkZGVmYXVsdF91c2VybmFtZSkgeworCQlpZiAoZGVmaW5lZCAkcmVhbG0gJiYgbGVuZ3RoICRyZWFsbSkgeworCQkJcHJpbnQgU1RERVJSICJBdXRoZW50aWNhdGlvbiByZWFsbTogJHJlYWxtXG4iOworCQkJU1RERVJSLT5mbHVzaDsKKwkJfQorCQkkY3JlZC0+dXNlcm5hbWUoJGRlZmF1bHRfdXNlcm5hbWUpOworCX0gZWxzZSB7CisJCXVzZXJuYW1lKCRjcmVkLCAkcmVhbG0sICRtYXlfc2F2ZSwgJHBvb2wpOworCX0KKwkkY3JlZC0+cGFzc3dvcmQoX3JlYWRfcGFzc3dvcmQoIlBhc3N3b3JkIGZvciAnIiAuCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjcmVkLT51c2VybmFtZSAuICInOiAiLCAkcmVhbG0pKTsKKwkkY3JlZC0+bWF5X3NhdmUoJG1heV9zYXZlKTsKKwkkU1ZOOjpfQ29yZTo6U1ZOX05PX0VSUk9SOworfQorCitzdWIgc3NsX3NlcnZlcl90cnVzdCB7CisJbXkgKCRjcmVkLCAkcmVhbG0sICRmYWlsdXJlcywgJGNlcnRfaW5mbywgJG1heV9zYXZlLCAkcG9vbCkgPSBAXzsKKwkkbWF5X3NhdmUgPSB1bmRlZiBpZiAkX25vX2F1dGhfY2FjaGU7CisJcHJpbnQgU1RERVJSICJFcnJvciB2YWxpZGF0aW5nIHNlcnZlciBjZXJ0aWZpY2F0ZSBmb3IgJyRyZWFsbSc6XG4iOworCXsKKwkJbm8gd2FybmluZ3MgJ29uY2UnOworCQkjIEFsbCB2YXJpYWJsZXMgU1ZOOjpBdXRoOjpTU0w6OiogYXJlIHVzZWQgb25seSBvbmNlLAorCQkjIHNvIHdlJ3JlIHNodXR0aW5nIHVwIFBlcmwgd2FybmluZ3MgYWJvdXQgdGhpcy4KKwkJaWYgKCRmYWlsdXJlcyAmICRTVk46OkF1dGg6OlNTTDo6VU5LTk9XTkNBKSB7CisJCQlwcmludCBTVERFUlIgIiAtIFRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgaXNzdWVkICIsCisJCQkgICAgImJ5IGEgdHJ1c3RlZCBhdXRob3JpdHkuIFVzZSB0aGVcbiIsCisJCQkgICAgIiAgIGZpbmdlcnByaW50IHRvIHZhbGlkYXRlICIsCisJCQkgICAgInRoZSBjZXJ0aWZpY2F0ZSBtYW51YWxseSFcbiI7CisJCX0KKwkJaWYgKCRmYWlsdXJlcyAmICRTVk46OkF1dGg6OlNTTDo6Q05NSVNNQVRDSCkgeworCQkJcHJpbnQgU1RERVJSICIgLSBUaGUgY2VydGlmaWNhdGUgaG9zdG5hbWUgIiwKKwkJCSAgICAiZG9lcyBub3QgbWF0Y2guXG4iOworCQl9CisJCWlmICgkZmFpbHVyZXMgJiAkU1ZOOjpBdXRoOjpTU0w6Ok5PVFlFVFZBTElEKSB7CisJCQlwcmludCBTVERFUlIgIiAtIFRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgeWV0IHZhbGlkLlxuIjsKKwkJfQorCQlpZiAoJGZhaWx1cmVzICYgJFNWTjo6QXV0aDo6U1NMOjpFWFBJUkVEKSB7CisJCQlwcmludCBTVERFUlIgIiAtIFRoZSBjZXJ0aWZpY2F0ZSBoYXMgZXhwaXJlZC5cbiI7CisJCX0KKwkJaWYgKCRmYWlsdXJlcyAmICRTVk46OkF1dGg6OlNTTDo6T1RIRVIpIHsKKwkJCXByaW50IFNUREVSUiAiIC0gVGhlIGNlcnRpZmljYXRlIGhhcyAiLAorCQkJICAgICJhbiB1bmtub3duIGVycm9yLlxuIjsKKwkJfQorCX0gIyBubyB3YXJuaW5ncyAnb25jZScKKwlwcmludGYgU1RERVJSCisJICAgICAgICAiQ2VydGlmaWNhdGUgaW5mb3JtYXRpb246XG4iLgorCSAgICAgICAgIiAtIEhvc3RuYW1lOiAlc1xuIi4KKwkgICAgICAgICIgLSBWYWxpZDogZnJvbSAlcyB1bnRpbCAlc1xuIi4KKwkgICAgICAgICIgLSBJc3N1ZXI6ICVzXG4iLgorCSAgICAgICAgIiAtIEZpbmdlcnByaW50OiAlc1xuIiwKKwkgICAgICAgIG1hcCAkY2VydF9pbmZvLT4kXywgcXcoaG9zdG5hbWUgdmFsaWRfZnJvbSB2YWxpZF91bnRpbAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXJfZG5hbWUgZmluZ2VycHJpbnQpOworCW15ICRjaG9pY2U7Citwcm9tcHQ6CisJbXkgJG9wdGlvbnMgPSAkbWF5X3NhdmUgPworCSAgICAgICIoUillamVjdCwgYWNjZXB0ICh0KWVtcG9yYXJpbHkgb3IgYWNjZXB0IChwKWVybWFuZW50bHk/ICIgOgorCSAgICAgICIoUillamVjdCBvciBhY2NlcHQgKHQpZW1wb3JhcmlseT8gIjsKKwlTVERFUlItPmZsdXNoOworCSRjaG9pY2UgPSBsYyhzdWJzdHIoR2l0Ojpwcm9tcHQoIkNlcnRpZmljYXRlIHByb2JsZW0uXG4iIC4gJG9wdGlvbnMpIHx8ICdSJywgMCwgMSkpOworCWlmICgkY2hvaWNlIGVxICd0JykgeworCQkkY3JlZC0+bWF5X3NhdmUodW5kZWYpOworCX0gZWxzaWYgKCRjaG9pY2UgZXEgJ3InKSB7CisJCXJldHVybiAtMTsKKwl9IGVsc2lmICgkbWF5X3NhdmUgJiYgJGNob2ljZSBlcSAncCcpIHsKKwkJJGNyZWQtPm1heV9zYXZlKCRtYXlfc2F2ZSk7CisJfSBlbHNlIHsKKwkJZ290byBwcm9tcHQ7CisJfQorCSRjcmVkLT5hY2NlcHRlZF9mYWlsdXJlcygkZmFpbHVyZXMpOworCSRTVk46Ol9Db3JlOjpTVk5fTk9fRVJST1I7Cit9CisKK3N1YiBzc2xfY2xpZW50X2NlcnQgeworCW15ICgkY3JlZCwgJHJlYWxtLCAkbWF5X3NhdmUsICRwb29sKSA9IEBfOworCSRtYXlfc2F2ZSA9IHVuZGVmIGlmICRfbm9fYXV0aF9jYWNoZTsKKwlwcmludCBTVERFUlIgIkNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlbmFtZTogIjsKKwlTVERFUlItPmZsdXNoOworCWNob21wKG15ICRmaWxlbmFtZSA9IDxTVERJTj4pOworCSRjcmVkLT5jZXJ0X2ZpbGUoJGZpbGVuYW1lKTsKKwkkY3JlZC0+bWF5X3NhdmUoJG1heV9zYXZlKTsKKwkkU1ZOOjpfQ29yZTo6U1ZOX05PX0VSUk9SOworfQorCitzdWIgc3NsX2NsaWVudF9jZXJ0X3B3IHsKKwlteSAoJGNyZWQsICRyZWFsbSwgJG1heV9zYXZlLCAkcG9vbCkgPSBAXzsKKwkkbWF5X3NhdmUgPSB1bmRlZiBpZiAkX25vX2F1dGhfY2FjaGU7CisJJGNyZWQtPnBhc3N3b3JkKF9yZWFkX3Bhc3N3b3JkKCJQYXNzd29yZDogIiwgJHJlYWxtKSk7CisJJGNyZWQtPm1heV9zYXZlKCRtYXlfc2F2ZSk7CisJJFNWTjo6X0NvcmU6OlNWTl9OT19FUlJPUjsKK30KKworc3ViIHVzZXJuYW1lIHsKKwlteSAoJGNyZWQsICRyZWFsbSwgJG1heV9zYXZlLCAkcG9vbCkgPSBAXzsKKwkkbWF5X3NhdmUgPSB1bmRlZiBpZiAkX25vX2F1dGhfY2FjaGU7CisJaWYgKGRlZmluZWQgJHJlYWxtICYmIGxlbmd0aCAkcmVhbG0pIHsKKwkJcHJpbnQgU1RERVJSICJBdXRoZW50aWNhdGlvbiByZWFsbTogJHJlYWxtXG4iOworCX0KKwlteSAkdXNlcm5hbWU7CisJaWYgKGRlZmluZWQgJF91c2VybmFtZSkgeworCQkkdXNlcm5hbWUgPSAkX3VzZXJuYW1lOworCX0gZWxzZSB7CisJCSR1c2VybmFtZSA9IEdpdDo6cHJvbXB0KCJVc2VybmFtZTogIik7CisJfQorCSRjcmVkLT51c2VybmFtZSgkdXNlcm5hbWUpOworCSRjcmVkLT5tYXlfc2F2ZSgkbWF5X3NhdmUpOworCSRTVk46Ol9Db3JlOjpTVk5fTk9fRVJST1I7Cit9CisKK3N1YiBfcmVhZF9wYXNzd29yZCB7CisJbXkgKCRwcm9tcHQsICRyZWFsbSkgPSBAXzsKKwlteSAkcGFzc3dvcmQgPSBHaXQ6OnByb21wdCgkcHJvbXB0LCAxKTsKKwkkcGFzc3dvcmQ7Cit9CisKKzE7CitfX0VORF9fCisKKz1oZWFkMSBOQU1FCisKK0dpdDo6U1ZOOjpQcm9tcHQgLSBhdXRoZW50aWNhdGlvbiBjYWxsYmFja3MgZm9yIGdpdC1zdm4KKworPWhlYWQxIFNZTk9QU0lTCisKKyAgICB1c2UgR2l0OjpTVk46OlByb21wdCBxdyhzaW1wbGUgc3NsX2NsaWVudF9jZXJ0IHNzbF9jbGllbnRfY2VydF9wdworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9zZXJ2ZXJfdHJ1c3QgdXNlcm5hbWUpOworICAgIHVzZSBTVk46OkNsaWVudCAoKTsKKworICAgIG15ICRjYWNoZWRfc2ltcGxlID0gU1ZOOjpDbGllbnQ6OmdldF9zaW1wbGVfcHJvdmlkZXIoKTsKKyAgICBteSAkZ2l0X3NpbXBsZSA9IFNWTjo6Q2xpZW50OjpnZXRfc2ltcGxlX3Byb21wdF9wcm92aWRlcihcJnNpbXBsZSwgMik7CisgICAgbXkgJGNhY2hlZF9zc2wgPSBTVk46OkNsaWVudDo6Z2V0X3NzbF9zZXJ2ZXJfdHJ1c3RfZmlsZV9wcm92aWRlcigpOworICAgIG15ICRnaXRfc3NsID0gU1ZOOjpDbGllbnQ6OmdldF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9wcm92aWRlcigKKyAgICAgICAgXCZzc2xfc2VydmVyX3RydXN0KTsKKyAgICBteSAkY2FjaGVkX2NlcnQgPSBTVk46OkNsaWVudDo6Z2V0X3NzbF9jbGllbnRfY2VydF9maWxlX3Byb3ZpZGVyKCk7CisgICAgbXkgJGdpdF9jZXJ0ID0gU1ZOOjpDbGllbnQ6OmdldF9zc2xfY2xpZW50X2NlcnRfcHJvbXB0X3Byb3ZpZGVyKAorICAgICAgICBcJnNzbF9jbGllbnRfY2VydCwgMik7CisgICAgbXkgJGNhY2hlZF9jZXJ0X3B3ID0gU1ZOOjpDbGllbnQ6OmdldF9zc2xfY2xpZW50X2NlcnRfcHdfZmlsZV9wcm92aWRlcigpOworICAgIG15ICRnaXRfY2VydF9wdyA9IFNWTjo6Q2xpZW50OjpnZXRfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21wdF9wcm92aWRlcigKKyAgICAgICAgXCZzc2xfY2xpZW50X2NlcnRfcHcsIDIpOworICAgIG15ICRjYWNoZWRfdXNlcm5hbWUgPSBTVk46OkNsaWVudDo6Z2V0X3VzZXJuYW1lX3Byb3ZpZGVyKCk7CisgICAgbXkgJGdpdF91c2VybmFtZSA9IFNWTjo6Q2xpZW50OjpnZXRfdXNlcm5hbWVfcHJvbXB0X3Byb3ZpZGVyKAorICAgICAgICBcJnVzZXJuYW1lLCAyKTsKKworICAgIG15ICRjdHggPSBuZXcgU1ZOOjpDbGllbnQoCisgICAgICAgIGF1dGggPT4gWworICAgICAgICAgICAgJGNhY2hlZF9zaW1wbGUsICRnaXRfc2ltcGxlLAorICAgICAgICAgICAgJGNhY2hlZF9zc2wsICRnaXRfc3NsLAorICAgICAgICAgICAgJGNhY2hlZF9jZXJ0LCAkZ2l0X2NlcnQsCisgICAgICAgICAgICAkY2FjaGVkX2NlcnRfcHcsICRnaXRfY2VydF9wdywKKyAgICAgICAgICAgICRjYWNoZWRfdXNlcm5hbWUsICRnaXRfdXNlcm5hbWUKKyAgICAgICAgXSk7CisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIG1vZHVsZSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlICJnaXQgc3ZuIiBjb21tYW5kLgorSXQgaW1wbGVtZW50cyBnaXQtc3ZuJ3MgYXV0aGVudGljYXRpb24gcG9saWN5LiAgRG8gbm90IHVzZSBpdCB1bmxlc3MKK3lvdSBhcmUgZGV2ZWxvcGluZyBnaXQtc3ZuLgorCitUaGUgaW50ZXJmYWNlIHdpbGwgY2hhbmdlIGFzIGdpdC1zdm4gZXZvbHZlcy4KKworPWhlYWQxIERFUEVOREVOQ0lFUworCitMPFNWTjo6Q29yZT4uCisKKz1oZWFkMSBTRUUgQUxTTworCitMPFNWTjo6Q2xpZW50Pi4KKworPWhlYWQxIElOQ09NUEFUSUJJTElUSUVTCisKK05vbmUgcmVwb3J0ZWQuCisKKz1oZWFkMSBCVUdTCisKK05vbmUuCmRpZmYgLS1naXQgYS9wZXJsL0dpdC9TVk4vUmEucG0gYi9wZXJsL0dpdC9TVk4vUmEucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhZDk4NwotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvR2l0L1NWTi9SYS5wbQpAQCAtMCwwICsxLDcwOCBAQAorcGFja2FnZSBHaXQ6OlNWTjo6UmE7Cit1c2UgdmFycyBxdy9ASVNBICRjb25maWdfZGlyICRfaWdub3JlX3JlZnNfcmVnZXggJF9sb2dfd2luZG93X3NpemUvOwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBNZW1vaXplOwordXNlIEdpdDo6U1ZOOjpVdGlscyBxdygKKwljYW5vbmljYWxpemVfdXJsCisJY2Fub25pY2FsaXplX3BhdGgKKwlhZGRfcGF0aF90b191cmwKKyk7CisKK3VzZSBTVk46OlJhOworQkVHSU4geworCUBJU0EgPSBxdyhTVk46OlJhKTsKK30KKworbXkgKCRyYV9pbnZhbGlkLCAkY2FuX2RvX3N3aXRjaCwgJWlnbm9yZWRfZXJyLCAkUkEpOworCitCRUdJTiB7CisJIyBlbmZvcmNlIHRlbXBvcmFyeSBwb29sIHVzYWdlIGZvciBzb21lIHNpbXBsZSBmdW5jdGlvbnMKKwlubyBzdHJpY3QgJ3JlZnMnOworCWZvciBteSAkZiAocXcvcmV2X3Byb3BsaXN0IGdldF9sYXRlc3RfcmV2bnVtIGdldF91dWlkIGdldF9yZXBvc19yb290CisJICAgICAgICAgICAgICBnZXRfZmlsZS8pIHsKKwkJbXkgJFNVUEVSID0gIlNVUEVSOjokZiI7CisJCSokZiA9IHN1YiB7CisJCQlteSAkc2VsZiA9IHNoaWZ0OworCQkJbXkgJHBvb2wgPSBTVk46OlBvb2wtPm5ldzsKKwkJCW15IEByZXQgPSAkc2VsZi0+JFNVUEVSKEBfLCRwb29sKTsKKwkJCSRwb29sLT5jbGVhcjsKKwkJCXdhbnRhcnJheSA/IEByZXQgOiAkcmV0WzBdOworCQl9OworCX0KK30KKworIyBzZXJmIGhhcyBhIGJ1ZyB0aGF0IGxlYWRzIHRvIGEgY29yZWR1bXAgdXBvbiB0ZXJtaW5hdGlvbiBpZiB0aGUKKyMgcmVtb3RlIGFjY2VzcyBvYmplY3QgaXMgbGVmdCBhcm91bmQgKG5vdCBmaXhlZCB5ZXQgaW4gc2VyZiAxLjMuMSkuCisjIEV4cGxpY2l0bHkgZnJlZSBpdCB0byB3b3JrIGFyb3VuZCB0aGUgaXNzdWUuCitFTkQgeworCSRSQSA9IHVuZGVmOworCSRyYV9pbnZhbGlkID0gMTsKK30KKworc3ViIF9hdXRoX3Byb3ZpZGVycyAoKSB7CisJcmVxdWlyZSBTVk46OkNsaWVudDsKKwlteSBAcnYgPSAoCisJICBTVk46OkNsaWVudDo6Z2V0X3NpbXBsZV9wcm92aWRlcigpLAorCSAgU1ZOOjpDbGllbnQ6OmdldF9zc2xfc2VydmVyX3RydXN0X2ZpbGVfcHJvdmlkZXIoKSwKKwkgIFNWTjo6Q2xpZW50OjpnZXRfc2ltcGxlX3Byb21wdF9wcm92aWRlcigKKwkgICAgXCZHaXQ6OlNWTjo6UHJvbXB0OjpzaW1wbGUsIDIpLAorCSAgU1ZOOjpDbGllbnQ6OmdldF9zc2xfY2xpZW50X2NlcnRfZmlsZV9wcm92aWRlcigpLAorCSAgU1ZOOjpDbGllbnQ6OmdldF9zc2xfY2xpZW50X2NlcnRfcHJvbXB0X3Byb3ZpZGVyKAorCSAgICBcJkdpdDo6U1ZOOjpQcm9tcHQ6OnNzbF9jbGllbnRfY2VydCwgMiksCisJICBTVk46OkNsaWVudDo6Z2V0X3NzbF9jbGllbnRfY2VydF9wd19maWxlX3Byb3ZpZGVyKCksCisJICBTVk46OkNsaWVudDo6Z2V0X3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHRfcHJvdmlkZXIoCisJICAgIFwmR2l0OjpTVk46OlByb21wdDo6c3NsX2NsaWVudF9jZXJ0X3B3LCAyKSwKKwkgIFNWTjo6Q2xpZW50OjpnZXRfdXNlcm5hbWVfcHJvdmlkZXIoKSwKKwkgIFNWTjo6Q2xpZW50OjpnZXRfc3NsX3NlcnZlcl90cnVzdF9wcm9tcHRfcHJvdmlkZXIoCisJICAgIFwmR2l0OjpTVk46OlByb21wdDo6c3NsX3NlcnZlcl90cnVzdCksCisJICBTVk46OkNsaWVudDo6Z2V0X3VzZXJuYW1lX3Byb21wdF9wcm92aWRlcigKKwkgICAgXCZHaXQ6OlNWTjo6UHJvbXB0Ojp1c2VybmFtZSwgMikKKwkpOworCisJIyBlYXJsaWVyIDEuNi54IHZlcnNpb25zIHdvdWxkIHNlZ2ZhdWx0LCBhbmQgPD0gMS41LnggZGlkbid0IGhhdmUKKwkjIHRoaXMgZnVuY3Rpb24KKwlpZiAoOjpjb21wYXJlX3N2bl92ZXJzaW9uKCcxLjYuMTUnKSA+PSAwKSB7CisJCW15ICRjb25maWcgPSBTVk46OkNvcmU6OmNvbmZpZ19nZXRfY29uZmlnKCRjb25maWdfZGlyKTsKKwkJbXkgKCRwLCBAYSk7CisJCSMgY29uZmlnX2dldF9jb25maWcgcmV0dXJucyBhbGwgY29uZmlnIGZpbGVzIGZyb20KKwkJIyB+Ly5zdWJ2ZXJzaW9uLCBhdXRoX2dldF9wbGF0Zm9ybV9zcGVjaWZpY19jbGllbnRfcHJvdmlkZXJzCisJCSMganVzdCB3YW50cyB0aGUgY29uZmlnICJmaWxlIi4KKwkJQGEgPSAoJGNvbmZpZy0+eydjb25maWcnfSwgdW5kZWYpOworCQkkcCA9IFNWTjo6Q29yZTo6YXV0aF9nZXRfcGxhdGZvcm1fc3BlY2lmaWNfY2xpZW50X3Byb3ZpZGVycyhAYSk7CisJCSMgSW5zZXJ0IHRoZSByZXR1cm4gdmFsdWUgZnJvbQorCQkjIGF1dGhfZ2V0X3BsYXRmb3JtX3NwZWNpZmljX3Byb3ZpZGVycworCQl1bnNoaWZ0IEBydiwgQCRwOworCX0KKwlcQHJ2OworfQorCitzdWIgcHJlcGFyZV9jb25maWdfb25jZSB7CisJU1ZOOjpfQ29yZTo6c3ZuX2NvbmZpZ19lbnN1cmUoJGNvbmZpZ19kaXIsIHVuZGVmKTsKKwlteSAoJGJhdG9uLCAkY2FsbGJhY2tzKSA9IFNWTjo6Q29yZTo6YXV0aF9vcGVuX2hlbHBlcihfYXV0aF9wcm92aWRlcnMpOworCW15ICRjb25maWcgPSBTVk46OkNvcmU6OmNvbmZpZ19nZXRfY29uZmlnKCRjb25maWdfZGlyKTsKKwlteSAkY29uZl90ID0gJGNvbmZpZy0+eydjb25maWcnfTsKKworCW5vIHdhcm5pbmdzICdvbmNlJzsKKwkjIFRoZSB1c2FnZSBvZiAkU1ZOOjpfQ29yZTo6U1ZOX0NPTkZJR18qIHZhcmlhYmxlcworCSMgcHJvZHVjZXMgd2FybmluZ3MgdGhhdCB2YXJpYWJsZXMgYXJlIHVzZWQgb25seSBvbmNlLgorCSMgSSBoYWQgbm90IGZvdW5kIHRoZSBiZXR0ZXIgd2F5IHRvIHNodXQgdGhlbSB1cCwgc28KKwkjIHRoZSB3YXJuaW5ncyBvZiB0eXBlICdvbmNlJyBhcmUgZGlzYWJsZWQgaW4gdGhpcyBibG9jay4KKwlpZiAoU1ZOOjpfQ29yZTo6c3ZuX2NvbmZpZ19nZXRfYm9vbCgkY29uZl90LAorCSAgICAkU1ZOOjpfQ29yZTo6U1ZOX0NPTkZJR19TRUNUSU9OX0FVVEgsCisJICAgICRTVk46Ol9Db3JlOjpTVk5fQ09ORklHX09QVElPTl9TVE9SRV9QQVNTV09SRFMsCisJICAgIDEpID09IDApIHsKKwkJbXkgJHZhbCA9ICcxJzsKKwkJaWYgKDo6Y29tcGFyZV9zdm5fdmVyc2lvbignMS45LjAnKSA8IDApIHsgIyBwcmUtU1ZOIHIxNTUzODIzCisJCQlteSAkZG9udF9zdG9yZV9wYXNzd29yZHMgPSAxOworCQkJJHZhbCA9IGJsZXNzIFwkZG9udF9zdG9yZV9wYXNzd29yZHMsICJfcF92b2lkIjsKKwkJfQorCQlTVk46Ol9Db3JlOjpzdm5fYXV0aF9zZXRfcGFyYW1ldGVyKCRiYXRvbiwKKwkJICAgICRTVk46Ol9Db3JlOjpTVk5fQVVUSF9QQVJBTV9ET05UX1NUT1JFX1BBU1NXT1JEUywKKwkJICAgICR2YWwpOworCX0KKwlpZiAoU1ZOOjpfQ29yZTo6c3ZuX2NvbmZpZ19nZXRfYm9vbCgkY29uZl90LAorCSAgICAkU1ZOOjpfQ29yZTo6U1ZOX0NPTkZJR19TRUNUSU9OX0FVVEgsCisJICAgICRTVk46Ol9Db3JlOjpTVk5fQ09ORklHX09QVElPTl9TVE9SRV9BVVRIX0NSRURTLAorCSAgICAxKSA9PSAwKSB7CisJCSRHaXQ6OlNWTjo6UHJvbXB0Ojpfbm9fYXV0aF9jYWNoZSA9IDE7CisJfQorCisJcmV0dXJuICgkY29uZmlnLCAkYmF0b24sICRjYWxsYmFja3MpOworfSAjIG5vIHdhcm5pbmdzICdvbmNlJworCitJTklUIHsKKwlNZW1vaXplOjptZW1vaXplICdfYXV0aF9wcm92aWRlcnMnOworCU1lbW9pemU6Om1lbW9pemUgJ3ByZXBhcmVfY29uZmlnX29uY2UnOworfQorCitzdWIgbmV3IHsKKwlteSAoJGNsYXNzLCAkdXJsKSA9IEBfOworCSR1cmwgPSBjYW5vbmljYWxpemVfdXJsKCR1cmwpOworCXJldHVybiAkUkEgaWYgKCRSQSAmJiAkUkEtPnVybCBlcSAkdXJsKTsKKworCTo6X3JlcV9zdm4oKTsKKworCSRSQSA9IHVuZGVmOworCW15ICgkY29uZmlnLCAkYmF0b24sICRjYWxsYmFja3MpID0gcHJlcGFyZV9jb25maWdfb25jZSgpOworCW15ICRzZWxmID0gU1ZOOjpSYS0+bmV3KHVybCA9PiAkdXJsLCBhdXRoID0+ICRiYXRvbiwKKwkgICAgICAgICAgICAgICAgICAgICAgY29uZmlnID0+ICRjb25maWcsCisJCQkgICAgICBwb29sID0+IFNWTjo6UG9vbC0+bmV3LAorCSAgICAgICAgICAgICAgICAgICAgICBhdXRoX3Byb3ZpZGVyX2NhbGxiYWNrcyA9PiAkY2FsbGJhY2tzKTsKKwkkUkEgPSBibGVzcyAkc2VsZiwgJGNsYXNzOworCisJIyBNYWtlIHN1cmUgaXRzIGNhbm9uaWNhbGl6ZWQKKwkkc2VsZi0+dXJsKCR1cmwpOworCSRzZWxmLT57c3ZuX3BhdGh9ID0gJHVybDsKKwkkc2VsZi0+e3JlcG9zX3Jvb3R9ID0gJHNlbGYtPmdldF9yZXBvc19yb290OworCSRzZWxmLT57c3ZuX3BhdGh9ID1+IHMjXlxRJHNlbGYtPntyZXBvc19yb290fVxFKC98JCkjIzsKKwkkc2VsZi0+e2NhY2hlfSA9IHsgY2hlY2tfcGF0aCA9PiB7IHIgPT4gMCwgZGF0YSA9PiB7fSB9LAorCSAgICAgICAgICAgICAgICAgICBnZXRfZGlyID0+IHsgciA9PiAwLCBkYXRhID0+IHt9IH0gfTsKKworCXJldHVybiAkUkE7Cit9CisKK3N1YiB1cmwgeworCW15ICRzZWxmID0gc2hpZnQ7CisKKwlpZiAoQF8pIHsKKwkJbXkgJHVybCA9IHNoaWZ0OworCQkkc2VsZi0+e3VybH0gPSBjYW5vbmljYWxpemVfdXJsKCR1cmwpOworCQlyZXR1cm47CisJfQorCisJcmV0dXJuICRzZWxmLT57dXJsfTsKK30KKworc3ViIGNoZWNrX3BhdGggeworCW15ICgkc2VsZiwgJHBhdGgsICRyKSA9IEBfOworCW15ICRjYWNoZSA9ICRzZWxmLT57Y2FjaGV9LT57Y2hlY2tfcGF0aH07CisJaWYgKCRyID09ICRjYWNoZS0+e3J9ICYmIGV4aXN0cyAkY2FjaGUtPntkYXRhfS0+eyRwYXRofSkgeworCQlyZXR1cm4gJGNhY2hlLT57ZGF0YX0tPnskcGF0aH07CisJfQorCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXc7CisJbXkgJHQgPSAkc2VsZi0+U1VQRVI6OmNoZWNrX3BhdGgoJHBhdGgsICRyLCAkcG9vbCk7CisJJHBvb2wtPmNsZWFyOworCWlmICgkciAhPSAkY2FjaGUtPntyfSkgeworCQkleyRjYWNoZS0+e2RhdGF9fSA9ICgpOworCQkkY2FjaGUtPntyfSA9ICRyOworCX0KKwkkY2FjaGUtPntkYXRhfS0+eyRwYXRofSA9ICR0OworfQorCitzdWIgZ2V0X2RpciB7CisJbXkgKCRzZWxmLCAkZGlyLCAkcikgPSBAXzsKKwlteSAkY2FjaGUgPSAkc2VsZi0+e2NhY2hlfS0+e2dldF9kaXJ9OworCWlmICgkciA9PSAkY2FjaGUtPntyfSkgeworCQlpZiAobXkgJHggPSAkY2FjaGUtPntkYXRhfS0+eyRkaXJ9KSB7CisJCQlyZXR1cm4gd2FudGFycmF5ID8gQCR4IDogJHgtPlswXTsKKwkJfQorCX0KKwlteSAkcG9vbCA9IFNWTjo6UG9vbC0+bmV3OworCW15ICgkZCwgdW5kZWYsICRwcm9wcyk7CisKKwlpZiAoOjpjb21wYXJlX3N2bl92ZXJzaW9uKCcxLjQuMCcpID49IDApIHsKKwkJIyBuLmIuIGluIGFkZGl0aW9uIHRvIGJlaW5nIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50LAorCQkjIHRoaXMgd29ya3MgYXJvdW5kIHdoYXQgYXBwZWFycyB0byBiZSBhIGJ1ZyBpbiBzb21lCisJCSMgU1ZOIDEuOCB2ZXJzaW9ucworCQlteSAka2luZCA9IDE7ICMgU1ZOX0RJUkVOVF9LSU5ECisJCSgkZCwgdW5kZWYsICRwcm9wcykgPSAkc2VsZi0+Z2V0X2RpcjIoJGRpciwgJHIsICRraW5kLCAkcG9vbCk7CisJfSBlbHNlIHsKKwkJKCRkLCB1bmRlZiwgJHByb3BzKSA9ICRzZWxmLT5TVVBFUjo6Z2V0X2RpcigkZGlyLCAkciwgJHBvb2wpOworCX0KKwlteSAlZGlyZW50cyA9IG1hcCB7ICRfID0+IHsga2luZCA9PiAkZC0+eyRffS0+a2luZCB9IH0ga2V5cyAlJGQ7CisJJHBvb2wtPmNsZWFyOworCWlmICgkciAhPSAkY2FjaGUtPntyfSkgeworCQkleyRjYWNoZS0+e2RhdGF9fSA9ICgpOworCQkkY2FjaGUtPntyfSA9ICRyOworCX0KKwkkY2FjaGUtPntkYXRhfS0+eyRkaXJ9ID0gWyBcJWRpcmVudHMsICRyLCAkcHJvcHMgXTsKKwl3YW50YXJyYXkgPyAoXCVkaXJlbnRzLCAkciwgJHByb3BzKSA6IFwlZGlyZW50czsKK30KKworIyBnZXRfbG9nKHBhdGhzLCBzdGFydCwgZW5kLCBsaW1pdCwKKyMgICAgICAgICBkaXNjb3Zlcl9jaGFuZ2VkX3BhdGhzLCBzdHJpY3Rfbm9kZV9oaXN0b3J5LCByZWNlaXZlcikKK3N1YiBnZXRfbG9nIHsKKwlteSAoJHNlbGYsIEBhcmdzKSA9IEBfOworCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXc7CisKKwkjIHN2bl9sb2dfY2hhbmdlZF9wYXRoX3Qgb2JqZWN0cyBwYXNzZWQgdG8gZ2V0X2xvZyBhcmUgbGlrZWx5IHRvIGJlCisJIyBvdmVyd3JpdHRlbiBldmVuIGlmIG9ubHkgdGhlIHJlZnMgYXJlIGNvcGllZCB0byBhbiBleHRlcm5hbCB2YXJpYWJsZSwKKwkjIHNvIHdlIHNob3VsZCBkdXAgdGhlIHN0cnVjdHVyZXMgaW4gdGhlaXIgZW50aXJldHkuICBVc2luZyBhbgorCSMgZXh0ZXJuYWxseSBwYXNzZWQgcG9vbCAoaW5zdGVhZCBvZiBvdXIgdGVtcG9yYXJ5IGFuZCBxdWlja2x5IGNsZWFyZWQKKwkjIHBvb2wgaW4gR2l0OjpTVk46OlJhKSBkb2VzIG5vdCBoZWxwIG1hdHRlcnMgYXQgYWxsLi4uCisJbXkgJHJlY2VpdmVyID0gcG9wIEBhcmdzOworCW15ICRwcmVmaXggPSAiLyIuJHNlbGYtPntzdm5fcGF0aH07CisJJHByZWZpeCA9fiBzIy8rKCQpIyM7CisJbXkgJHByZWZpeF9yZWdleCA9IHFyI15cUSRwcmVmaXhcRSM7CisJcHVzaChAYXJncywgc3ViIHsKKwkJbXkgKCRwYXRocykgPSAkX1swXTsKKwkJcmV0dXJuICYkcmVjZWl2ZXIoQF8pIHVubGVzcyAkcGF0aHM7CisJCSRfWzBdID0gKCk7CisJCWZvcmVhY2ggbXkgJHAgKGtleXMgJSRwYXRocykgeworCQkJbXkgJGkgPSAkcGF0aHMtPnskcH07CisJCQkjIE1ha2UgcGF0aCByZWxhdGl2ZSB0byBvdXIgdXJsLCBub3QgcmVwb3Nfcm9vdAorCQkJJHAgPX4gcy8kcHJlZml4X3JlZ2V4Ly87CisJCQlteSAlcyA9IG1hcCB7ICRfID0+ICRpLT4kXzsgfQorCQkJCXF3L2NvcHlmcm9tX3BhdGggY29weWZyb21fcmV2IGFjdGlvbi87CisJCQlpZiAoJHN7J2NvcHlmcm9tX3BhdGgnfSkgeworCQkJCSRzeydjb3B5ZnJvbV9wYXRoJ30gPX4gcy8kcHJlZml4X3JlZ2V4Ly87CisJCQkJJHN7J2NvcHlmcm9tX3BhdGgnfSA9IGNhbm9uaWNhbGl6ZV9wYXRoKCRzeydjb3B5ZnJvbV9wYXRoJ30pOworCQkJfQorCQkJJF9bMF17JHB9ID0gXCVzOworCQl9CisJCSYkcmVjZWl2ZXIoQF8pOworCX0pOworCisKKwkjIHRoZSBsaW1pdCBwYXJhbWV0ZXIgd2FzIG5vdCBzdXBwb3J0ZWQgaW4gU1ZOIDEuMS54LCBzbyB3ZQorCSMgZHJvcCBpdC4gIFRoZXJlZm9yZSwgdGhlIHJlY2VpdmVyIGNhbGxiYWNrIHBhc3NlZCB0byBpdAorCSMgaXMgbWFkZSBhd2FyZSBvZiB0aGlzIGxpbWl0YXRpb24gYnkgYmVpbmcgd3JhcHBlZCBpZgorCSMgdGhlIGxpbWl0IHBhc3NlZCB0byBpcyBiZWluZyB3cmFwcGVkLgorCWlmICg6OmNvbXBhcmVfc3ZuX3ZlcnNpb24oJzEuMi4wJykgPD0gMCkgeworCQlteSAkbGltaXQgPSBzcGxpY2UoQGFyZ3MsIDMsIDEpOworCQlpZiAoJGxpbWl0ID4gMCkgeworCQkJbXkgJHJlY2VpdmVyID0gcG9wIEBhcmdzOworCQkJcHVzaChAYXJncywgc3ViIHsgJiRyZWNlaXZlcihAXykgaWYgKC0tJGxpbWl0ID49IDApIH0pOworCQl9CisJfQorCW15ICRyZXQgPSAkc2VsZi0+U1VQRVI6OmdldF9sb2coQGFyZ3MsICRwb29sKTsKKwkkcG9vbC0+Y2xlYXI7CisJJHJldDsKK30KKworIyB1bmNvbW1vbiwgb25seSBmb3IgYW5jaWVudCBTVk4gKDw9IDEuNC4yKQorc3ViIHRyZWVzX21hdGNoIHsKKwlyZXF1aXJlIElPOjpGaWxlOworCXJlcXVpcmUgU1ZOOjpDbGllbnQ7CisJbXkgKCRzZWxmLCAkdXJsMSwgJHJldjEsICR1cmwyLCAkcmV2MikgPSBAXzsKKwlteSAkY3R4ID0gU1ZOOjpDbGllbnQtPm5ldyhhdXRoID0+IF9hdXRoX3Byb3ZpZGVycyk7CisJbXkgJG91dCA9IElPOjpGaWxlLT5uZXdfdG1wZmlsZTsKKworCSMgb2xkZXIgU1ZOICgxLjEueCkgZG9lc24ndCB0YWtlICRwb29sIGFzIHRoZSBsYXN0IHBhcmFtZXRlciBmb3IKKwkjICRjdHgtPmRpZmYoKSwgc28gd2UnbGwgY3JlYXRlIGEgZGVmYXVsdCBvbmUKKwlteSAkcG9vbCA9IFNWTjo6UG9vbC0+bmV3X2RlZmF1bHRfc3ViOworCisJJHJhX2ludmFsaWQgPSAxOyAjIHRoaXMgd2lsbCBvcGVuIGEgbmV3IFNWTjo6UmEgY29ubmVjdGlvbiB0byAkdXJsMQorCSRjdHgtPmRpZmYoW10sICR1cmwxLCAkcmV2MSwgJHVybDIsICRyZXYyLCAxLCAxLCAwLCAkb3V0LCAkb3V0KTsKKwkkb3V0LT5mbHVzaDsKKwlteSAkcmV0ID0gKCgkb3V0LT5zdGF0KVs3XSA9PSAwKTsKKwljbG9zZSAkb3V0IG9yIGNyb2FrICQhOworCisJJHJldDsKK30KKworc3ViIGdldF9jb21taXRfZWRpdG9yIHsKKwlteSAoJHNlbGYsICRsb2csICRjYiwgJHBvb2wpID0gQF87CisKKwlteSBAbG9jayA9ICg6OmNvbXBhcmVfc3ZuX3ZlcnNpb24oJzEuMi4wJykgPj0gMCkgPyAodW5kZWYsIDApIDogKCk7CisJJHNlbGYtPlNVUEVSOjpnZXRfY29tbWl0X2VkaXRvcigkbG9nLCAkY2IsIEBsb2NrLCAkcG9vbCk7Cit9CisKK3N1YiBnc19kb191cGRhdGUgeworCW15ICgkc2VsZiwgJHJldl9hLCAkcmV2X2IsICRncywgJGVkaXRvcikgPSBAXzsKKwlteSAkbmV3ID0gKCRyZXZfYSA9PSAkcmV2X2IpOworCW15ICRwYXRoID0gJGdzLT5wYXRoOworCisJaWYgKCRuZXcgJiYgLWUgJGdzLT57aW5kZXh9KSB7CisJCXVubGluayAkZ3MtPntpbmRleH0gb3IgZGllCisJCSAgIkNvdWxkbid0IHVubGluayBpbmRleDogJGdzLT57aW5kZXh9OiAkIVxuIjsKKwl9CisJbXkgJHBvb2wgPSBTVk46OlBvb2wtPm5ldzsKKwkkZWRpdG9yLT5zZXRfcGF0aF9zdHJpcCgkcGF0aCk7CisJbXkgKEBwYykgPSBzcGxpdCBtIy8jLCAkcGF0aDsKKwlteSAkcmVwb3J0ZXIgPSAkc2VsZi0+ZG9fdXBkYXRlKCRyZXZfYiwgKEBwYyA/IHNoaWZ0IEBwYyA6ICcnKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICRlZGl0b3IsICRwb29sKTsKKwlteSBAbG9jayA9ICg6OmNvbXBhcmVfc3ZuX3ZlcnNpb24oJzEuMi4wJykgPj0gMCkgPyAodW5kZWYpIDogKCk7CisKKwkjIFNpbmNlIHdlIGNhbid0IHJlbHkgb24gc3ZuX3JhX3JlcGFyZW50IGJlaW5nIGF2YWlsYWJsZSwgd2UnbGwKKwkjIGp1c3QgaGF2ZSB0byBkbyBzb21lIG1hZ2ljIHdpdGggc2V0X3BhdGggdG8gbWFrZSBpdCBzbworCSMgd2Ugb25seSB3YW50IGEgcGFydGlhbCBwYXRoLgorCW15ICRzcCA9ICcnOworCW15ICRmaW5hbCA9IGpvaW4oJy8nLCBAcGMpOworCXdoaWxlIChAcGMpIHsKKwkJJHJlcG9ydGVyLT5zZXRfcGF0aCgkc3AsICRyZXZfYiwgMCwgQGxvY2ssICRwb29sKTsKKwkJJHNwIC49ICcvJyBpZiBsZW5ndGggJHNwOworCQkkc3AgLj0gc2hpZnQgQHBjOworCX0KKwlkaWUgIkJVRzogJyRzcCcgIT0gJyRmaW5hbCdcbiIgaWYgKCRzcCBuZSAkZmluYWwpOworCisJJHJlcG9ydGVyLT5zZXRfcGF0aCgkc3AsICRyZXZfYSwgJG5ldywgQGxvY2ssICRwb29sKTsKKworCSRyZXBvcnRlci0+ZmluaXNoX3JlcG9ydCgkcG9vbCk7CisJJHBvb2wtPmNsZWFyOworCSRlZGl0b3ItPntnaXRfY29tbWl0X29rfTsKK30KKworIyB0aGlzIHJlcXVpcmVzIFNWTiAxLjQuMyBvciBsYXRlciAoZG9fc3dpdGNoIGRpZG4ndCB3b3JrIGJlZm9yZSAxLjQuMywgYW5kCisjIHN2bl9yYV9yZXBhcmVudCBkaWRuJ3Qgd29yayBiZWZvcmUgMS40KQorc3ViIGdzX2RvX3N3aXRjaCB7CisJbXkgKCRzZWxmLCAkcmV2X2EsICRyZXZfYiwgJGdzLCAkdXJsX2IsICRlZGl0b3IpID0gQF87CisJbXkgJHBhdGggPSAkZ3MtPnBhdGg7CisJbXkgJHBvb2wgPSBTVk46OlBvb2wtPm5ldzsKKworCW15ICRvbGRfdXJsID0gJHNlbGYtPnVybDsKKwlteSAkZnVsbF91cmwgPSBhZGRfcGF0aF90b191cmwoICRzZWxmLT51cmwsICRwYXRoICk7CisJbXkgKCRyYSwgJHJlcGFyZW50ZWQpOworCisJaWYgKCRvbGRfdXJsID1+IG0jXnN2bihcK1x3Kyk/Oi8vIyB8fAorCSAgICAoJGZ1bGxfdXJsID1+IG0jXmh0dHBzPzovLyMgJiYKKwkgICAgIGNhbm9uaWNhbGl6ZV91cmwoJGZ1bGxfdXJsKSBuZSAkZnVsbF91cmwpKSB7CisJCSRfWzBdID0gdW5kZWY7CisJCSRzZWxmID0gdW5kZWY7CisJCSRSQSA9IHVuZGVmOworCQkkcmEgPSBHaXQ6OlNWTjo6UmEtPm5ldygkZnVsbF91cmwpOworCQkkcmFfaW52YWxpZCA9IDE7CisJfSBlbHNpZiAoJG9sZF91cmwgbmUgJGZ1bGxfdXJsKSB7CisJCVNWTjo6X1JhOjpzdm5fcmFfcmVwYXJlbnQoCisJCQkkc2VsZi0+e3Nlc3Npb259LAorCQkJY2Fub25pY2FsaXplX3VybCgkZnVsbF91cmwpLAorCQkJJHBvb2wKKwkJKTsKKwkJJHNlbGYtPnVybCgkZnVsbF91cmwpOworCQkkcmVwYXJlbnRlZCA9IDE7CisJfQorCisJJHJhIHx8PSAkc2VsZjsKKwkkdXJsX2IgPSBjYW5vbmljYWxpemVfdXJsKCR1cmxfYik7CisJbXkgJHJlcG9ydGVyID0gJHJhLT5kb19zd2l0Y2goJHJldl9iLCAnJywgMSwgJHVybF9iLCAkZWRpdG9yLCAkcG9vbCk7CisJbXkgQGxvY2sgPSAoOjpjb21wYXJlX3N2bl92ZXJzaW9uKCcxLjIuMCcpID49IDApID8gKHVuZGVmKSA6ICgpOworCSRyZXBvcnRlci0+c2V0X3BhdGgoJycsICRyZXZfYSwgMCwgQGxvY2ssICRwb29sKTsKKwkkcmVwb3J0ZXItPmZpbmlzaF9yZXBvcnQoJHBvb2wpOworCisJaWYgKCRyZXBhcmVudGVkKSB7CisJCVNWTjo6X1JhOjpzdm5fcmFfcmVwYXJlbnQoJHNlbGYtPntzZXNzaW9ufSwgJG9sZF91cmwsICRwb29sKTsKKwkJJHNlbGYtPnVybCgkb2xkX3VybCk7CisJfQorCisJJHBvb2wtPmNsZWFyOworCSRlZGl0b3ItPntnaXRfY29tbWl0X29rfTsKK30KKworc3ViIGxvbmdlc3RfY29tbW9uX3BhdGggeworCW15ICgkZ3N2LCAkZ2xvYnMpID0gQF87CisJbXkgJWNvbW1vbjsKKwlteSAkY29tbW9uX21heCA9IHNjYWxhciBAJGdzdjsKKworCWZvcmVhY2ggbXkgJGdzIChAJGdzdikgeworCQlteSBAdG1wID0gc3BsaXQgbSMvIywgJGdzLT5wYXRoOworCQlteSAkcCA9ICcnOworCQlmb3JlYWNoIChAdG1wKSB7CisJCQkkcCAuPSBsZW5ndGgoJHApID8gIi8kXyIgOiAkXzsKKwkJCSRjb21tb257JHB9IHx8PSAwOworCQkJJGNvbW1vbnskcH0rKzsKKwkJfQorCX0KKwkkZ2xvYnMgfHw9IFtdOworCSRjb21tb25fbWF4ICs9IHNjYWxhciBAJGdsb2JzOworCWZvcmVhY2ggbXkgJGdsb2IgKEAkZ2xvYnMpIHsKKwkJbXkgQHRtcCA9IHNwbGl0IG0jLyMsICRnbG9iLT57cGF0aH0tPntsZWZ0fTsKKwkJbXkgJHAgPSAnJzsKKwkJZm9yZWFjaCAoQHRtcCkgeworCQkJJHAgLj0gbGVuZ3RoKCRwKSA/ICIvJF8iIDogJF87CisJCQkkY29tbW9ueyRwfSB8fD0gMDsKKwkJCSRjb21tb257JHB9Kys7CisJCX0KKwl9CisKKwlteSAkbG9uZ2VzdF9wYXRoID0gJyc7CisJZm9yZWFjaCAoc29ydCB7bGVuZ3RoICRiIDw9PiBsZW5ndGggJGF9IGtleXMgJWNvbW1vbikgeworCQlpZiAoJGNvbW1vbnskX30gPT0gJGNvbW1vbl9tYXgpIHsKKwkJCSRsb25nZXN0X3BhdGggPSAkXzsKKwkJCWxhc3Q7CisJCX0KKwl9CisJJGxvbmdlc3RfcGF0aDsKK30KKworc3ViIGdzX2ZldGNoX2xvb3BfY29tbW9uIHsKKwlteSAoJHNlbGYsICRiYXNlLCAkaGVhZCwgJGdzdiwgJGdsb2JzKSA9IEBfOworCXJldHVybiBpZiAoJGJhc2UgPiAkaGVhZCk7CisJIyBNYWtlIHN1cmUgdGhlIGNhdF9ibG9iIG9wZW4yIEZpbGVIYW5kbGUgaXMgY3JlYXRlZCBiZWZvcmUgY2FsbGluZworCSMgU1ZOOjpQb29sOjpuZXdfZGVmYXVsdCBzbyB0aGF0IGl0IGRvZXMgbm90IGluY29ycmVjdGx5IGVuZCB1cCBpbiB0aGUgcG9vbC4KKwkkOjpfcmVwb3NpdG9yeS0+X29wZW5fY2F0X2Jsb2JfaWZfbmVlZGVkOworCW15ICRncG9vbCA9IFNWTjo6UG9vbC0+bmV3X2RlZmF1bHQ7CisJbXkgJHJhX3VybCA9ICRzZWxmLT51cmw7CisJbXkgJHJlbG9hZF9yYSA9IHN1YiB7CisJCSRfWzBdID0gdW5kZWY7CisJCSRzZWxmID0gdW5kZWY7CisJCSRSQSA9IHVuZGVmOworCQkkZ3Bvb2wtPmNsZWFyOworCQkkc2VsZiA9IEdpdDo6U1ZOOjpSYS0+bmV3KCRyYV91cmwpOworCQkkcmFfaW52YWxpZCA9IHVuZGVmOworCX07CisJbXkgJGluYyA9ICRfbG9nX3dpbmRvd19zaXplOworCW15ICgkbWluLCAkbWF4KSA9ICgkYmFzZSwgJGhlYWQgPCAkYmFzZSArICRpbmMgPyAkaGVhZCA6ICRiYXNlICsgJGluYyk7CisJbXkgJGxvbmdlc3RfcGF0aCA9IGxvbmdlc3RfY29tbW9uX3BhdGgoJGdzdiwgJGdsb2JzKTsKKwlteSAkZmluZF90cmFpbGluZ19lZGdlOworCXdoaWxlICgxKSB7CisJCW15ICVyZXZzOworCQlteSAkZXJyOworCQlteSAkZXJyX2hhbmRsZXIgPSAkU1ZOOjpFcnJvcjo6aGFuZGxlcjsKKwkJJFNWTjo6RXJyb3I6OmhhbmRsZXIgPSBzdWIgeworCQkJKCRlcnIpID0gQF87CisJCQlza2lwX3Vua25vd25fcmV2cygkZXJyKTsKKwkJfTsKKwkJc3ViIF9jYiB7CisJCQlteSAoJHBhdGhzLCAkciwgJGF1dGhvciwgJGRhdGUsICRsb2cpID0gQF87CisJCQlbICRwYXRocywKKwkJCSAgeyBhdXRob3IgPT4gJGF1dGhvciwgZGF0ZSA9PiAkZGF0ZSwgbG9nID0+ICRsb2cgfSBdOworCQl9CisJCSRzZWxmLT5nZXRfbG9nKFskbG9uZ2VzdF9wYXRoXSwgJG1pbiwgJG1heCwgMCwgMSwgMSwKKwkJICAgICAgICAgICAgICAgc3ViIHsgJHJldnN7JF9bMV19ID0gX2NiKEBfKSB9KTsKKwkJaWYgKCRlcnIpIHsKKwkJCXByaW50ICJDaGVja2VkIHRocm91Z2ggciRtYXhcciI7CisJCX0gZWxzZSB7CisJCQkkZmluZF90cmFpbGluZ19lZGdlID0gMTsKKwkJfQorCQlpZiAoJGVyciBhbmQgJGZpbmRfdHJhaWxpbmdfZWRnZSkgeworCQkJcHJpbnQgU1RERVJSICJQYXRoICckbG9uZ2VzdF9wYXRoJyAiLAorCQkJCSAgICAgIndhcyBwcm9iYWJseSBkZWxldGVkOlxuIiwKKwkJCQkgICAgICRlcnItPmV4cGFuZGVkX21lc3NhZ2UsCisJCQkJICAgICAiXG5XaWxsIGF0dGVtcHQgdG8gZm9sbG93ICIsCisJCQkJICAgICAicmV2aXNpb25zIHIkbWluIC4uIHIkbWF4ICIsCisJCQkJICAgICAiY29tbWl0dGVkIGJlZm9yZSB0aGUgZGVsZXRpb25cbiI7CisJCQlteSAkaGkgPSAkbWF4OworCQkJd2hpbGUgKC0tJGhpID49ICRtaW4pIHsKKwkJCQlteSAkb2s7CisJCQkJJHNlbGYtPmdldF9sb2coWyRsb25nZXN0X3BhdGhdLCAkbWluLCAkaGksCisJCQkJICAgICAgICAgICAgICAgMCwgMSwgMSwgc3ViIHsKKwkJCQkgICAgICAgICAgICAgICAkb2sgPSAkX1sxXTsKKwkJCQkgICAgICAgICAgICAgICAkcmV2c3skX1sxXX0gPSBfY2IoQF8pIH0pOworCQkJCWlmICgkb2spIHsKKwkJCQkJcHJpbnQgU1RERVJSICJyJG1pbiAuLiByJG9rIE9LXG4iOworCQkJCQlsYXN0OworCQkJCX0KKwkJCX0KKwkJCSRmaW5kX3RyYWlsaW5nX2VkZ2UgPSAwOworCQl9CisJCSRTVk46OkVycm9yOjpoYW5kbGVyID0gJGVycl9oYW5kbGVyOworCisJCW15ICVleGlzdHMgPSBtYXAgeyAkXy0+cGF0aCA9PiAkXyB9IEAkZ3N2OworCQlmb3JlYWNoIG15ICRyIChzb3J0IHskYSA8PT4gJGJ9IGtleXMgJXJldnMpIHsKKwkJCW15ICgkcGF0aHMsICRsb2dnZWQpID0gQHtkZWxldGUgJHJldnN7JHJ9fTsKKworCQkJZm9yZWFjaCBteSAkZ3MgKCRzZWxmLT5tYXRjaF9nbG9icyhcJWV4aXN0cywgJHBhdGhzLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ2xvYnMsICRyKSkgeworCQkJCWlmICgkZ3MtPnJldl9tYXBfbWF4ID49ICRyKSB7CisJCQkJCW5leHQ7CisJCQkJfQorCQkJCW5leHQgdW5sZXNzICRncy0+bWF0Y2hfcGF0aHMoJHBhdGhzLCAkcik7CisJCQkJJGdzLT57bG9nZ2VkX3Jldl9wcm9wc30gPSAkbG9nZ2VkOworCQkJCWlmIChteSAkbGFzdF9jb21taXQgPSAkZ3MtPmxhc3RfY29tbWl0KSB7CisJCQkJCSRncy0+YXNzZXJ0X2luZGV4X2NsZWFuKCRsYXN0X2NvbW1pdCk7CisJCQkJfQorCQkJCW15ICRsb2dfZW50cnkgPSAkZ3MtPmRvX2ZldGNoKCRwYXRocywgJHIpOworCQkJCWlmICgkbG9nX2VudHJ5KSB7CisJCQkJCSRncy0+ZG9fZ2l0X2NvbW1pdCgkbG9nX2VudHJ5KTsKKwkJCQl9CisJCQkJJEdpdDo6U1ZOOjpJTkRFWF9GSUxFU3skZ3MtPntpbmRleH19ID0gMTsKKwkJCX0KKwkJCWZvcmVhY2ggbXkgJGcgKEAkZ2xvYnMpIHsKKwkJCQlteSAkayA9ICJzdm4tcmVtb3RlLiRnLT57cmVtb3RlfS4iIC4KKwkJCQkgICAgICAgICIkZy0+e3R9LW1heFJldiI7CisJCQkJR2l0OjpTVk46OnRtcF9jb25maWcoJGssICRyKTsKKwkJCX0KKwkJCSRyZWxvYWRfcmEtPigpIGlmICRyYV9pbnZhbGlkOworCQl9CisJCSMgcHJlLWZpbGwgdGhlIC5yZXZfZGIgc2luY2UgaXQnbGwgZXZlbnR1YWxseSBnZXQgZmlsbGVkIGluCisJCSMgd2l0aCAnMCcgeDQwIGlmIHNvbWV0aGluZyBuZXcgZ2V0cyBjb21taXR0ZWQKKwkJZm9yZWFjaCBteSAkZ3MgKEAkZ3N2KSB7CisJCQluZXh0IGlmICRncy0+cmV2X21hcF9tYXggPj0gJG1heDsKKwkJCW5leHQgaWYgZGVmaW5lZCAkZ3MtPnJldl9tYXBfZ2V0KCRtYXgpOworCQkJJGdzLT5yZXZfbWFwX3NldCgkbWF4LCAwIHg0MCk7CisJCX0KKwkJZm9yZWFjaCBteSAkZyAoQCRnbG9icykgeworCQkJbXkgJGsgPSAic3ZuLXJlbW90ZS4kZy0+e3JlbW90ZX0uJGctPnt0fS1tYXhSZXYiOworCQkJR2l0OjpTVk46OnRtcF9jb25maWcoJGssICRtYXgpOworCQl9CisJCWxhc3QgaWYgJG1heCA+PSAkaGVhZDsKKwkJJG1pbiA9ICRtYXggKyAxOworCQkkbWF4ICs9ICRpbmM7CisJCSRtYXggPSAkaGVhZCBpZiAoJG1heCA+ICRoZWFkKTsKKworCQkkcmVsb2FkX3JhLT4oKTsKKwl9CisJR2l0OjpTVk46OmdjKCk7Cit9CisKK3N1YiBnZXRfZGlyX2dsb2JiZWQgeworCW15ICgkc2VsZiwgJGxlZnQsICRkZXB0aCwgJHIpID0gQF87CisKKwlteSBAeCA9IGV2YWwgeyAkc2VsZi0+Z2V0X2RpcigkbGVmdCwgJHIpIH07CisJcmV0dXJuIHVubGVzcyBzY2FsYXIgQHggPT0gMzsKKwlteSAkZGlyZW50cyA9ICR4WzBdOworCW15IEBmaW5hbGVudHM7CisJZm9yZWFjaCBteSAkZGUgKGtleXMgJSRkaXJlbnRzKSB7CisJCW5leHQgaWYgJGRpcmVudHMtPnskZGV9LT57a2luZH0gIT0gJFNWTjo6Tm9kZTo6ZGlyOworCQlpZiAoJGRlcHRoID4gMSkgeworCQkJbXkgQGFyZ3MgPSAoIiRsZWZ0LyRkZSIsICRkZXB0aCAtIDEsICRyKTsKKwkJCWZvcmVhY2ggbXkgJGRpciAoJHNlbGYtPmdldF9kaXJfZ2xvYmJlZChAYXJncykpIHsKKwkJCQlwdXNoIEBmaW5hbGVudHMsICIkZGUvJGRpciI7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwdXNoIEBmaW5hbGVudHMsICRkZTsKKwkJfQorCX0KKwlAZmluYWxlbnRzOworfQorCisjIHJldHVybiB2YWx1ZTogMCAtLSBkb24ndCBpZ25vcmUsIDEgLS0gaWdub3JlCitzdWIgaXNfcmVmX2lnbm9yZWQgeworCW15ICgkZywgJHApID0gQF87CisJbXkgJHJlZm5hbWUgPSAkZy0+e3JlZn0tPmZ1bGxfcGF0aCgkcCk7CisJcmV0dXJuIDEgaWYgZGVmaW5lZCgkZy0+e2lnbm9yZV9yZWZzX3JlZ2V4fSkgJiYKKwkgICAgICAgICAgICAkcmVmbmFtZSA9fiBtISRnLT57aWdub3JlX3JlZnNfcmVnZXh9ITsKKwlyZXR1cm4gMCB1bmxlc3MgZGVmaW5lZCgkX2lnbm9yZV9yZWZzX3JlZ2V4KTsKKwlyZXR1cm4gMSBpZiAkcmVmbmFtZSA9fiBtISRfaWdub3JlX3JlZnNfcmVnZXghbzsKKwlyZXR1cm4gMDsKK30KKworc3ViIG1hdGNoX2dsb2JzIHsKKwlteSAoJHNlbGYsICRleGlzdHMsICRwYXRocywgJGdsb2JzLCAkcikgPSBAXzsKKworCXN1YiBnZXRfZGlyX2NoZWNrIHsKKwkJbXkgKCRzZWxmLCAkZXhpc3RzLCAkZywgJHIpID0gQF87CisKKwkJbXkgQGRpcnMgPSAkc2VsZi0+Z2V0X2Rpcl9nbG9iYmVkKCRnLT57cGF0aH0tPntsZWZ0fSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRnLT57cGF0aH0tPntkZXB0aH0sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcik7CisKKwkJZm9yZWFjaCBteSAkZGUgKEBkaXJzKSB7CisJCQlteSAkcCA9ICRnLT57cGF0aH0tPmZ1bGxfcGF0aCgkZGUpOworCQkJbmV4dCBpZiAkZXhpc3RzLT57JHB9OworCQkJbmV4dCBpZiAobGVuZ3RoICRnLT57cGF0aH0tPntyaWdodH0gJiYKKwkJCQkgKCRzZWxmLT5jaGVja19wYXRoKCRwLCAkcikgIT0KKwkJCQkgICRTVk46Ok5vZGU6OmRpcikpOworCQkJbmV4dCB1bmxlc3MgJHAgPX4gLyRnLT57cGF0aH0tPntyZWdleH0vOworCQkJJGV4aXN0cy0+eyRwfSA9IEdpdDo6U1ZOLT5pbml0KCRzZWxmLT51cmwsICRwLCB1bmRlZiwKKwkJCQkJICRnLT57cmVmfS0+ZnVsbF9wYXRoKCRkZSksIDEpOworCQl9CisJfQorCWZvcmVhY2ggbXkgJGcgKEAkZ2xvYnMpIHsKKwkJaWYgKG15ICRwYXRoID0gJHBhdGhzLT57Ii8kZy0+e3BhdGh9LT57bGVmdH0ifSkgeworCQkJaWYgKCRwYXRoLT57YWN0aW9ufSA9fiAvXltBUl0kLykgeworCQkJCWdldF9kaXJfY2hlY2soJHNlbGYsICRleGlzdHMsICRnLCAkcik7CisJCQl9CisJCX0KKwkJZm9yZWFjaCAoa2V5cyAlJHBhdGhzKSB7CisJCQlpZiAoLyRnLT57cGF0aH0tPntsZWZ0X3JlZ2V4fS8gJiYKKwkJCSAgICAhLyRnLT57cGF0aH0tPntyZWdleH0vKSB7CisJCQkJbmV4dCBpZiAkcGF0aHMtPnskX30tPnthY3Rpb259ICF+IC9eW0FSXSQvOworCQkJCWdldF9kaXJfY2hlY2soJHNlbGYsICRleGlzdHMsICRnLCAkcik7CisJCQl9CisJCQluZXh0IHVubGVzcyAvJGctPntwYXRofS0+e3JlZ2V4fS87CisJCQlteSAkcCA9ICQxOworCQkJbXkgJHBhdGhuYW1lID0gJGctPntwYXRofS0+ZnVsbF9wYXRoKCRwKTsKKwkJCW5leHQgaWYgaXNfcmVmX2lnbm9yZWQoJGcsICRwKTsKKwkJCW5leHQgaWYgJGV4aXN0cy0+eyRwYXRobmFtZX07CisJCQluZXh0IGlmICgkc2VsZi0+Y2hlY2tfcGF0aCgkcGF0aG5hbWUsICRyKSAhPQorCQkJICAgICAgICAgJFNWTjo6Tm9kZTo6ZGlyKTsKKwkJCSRleGlzdHMtPnskcGF0aG5hbWV9ID0gR2l0OjpTVk4tPmluaXQoCisJCQkgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnVybCwgJHBhdGhuYW1lLCB1bmRlZiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAkZy0+e3JlZn0tPmZ1bGxfcGF0aCgkcCksIDEpOworCQl9CisJCW15ICRjID0gJyc7CisJCWZvcmVhY2ggKHNwbGl0IG0jLyMsICRnLT57cGF0aH0tPntsZWZ0fSkgeworCQkJJGMgLj0gIi8kXyI7CisJCQluZXh0IHVubGVzcyAoJHBhdGhzLT57JGN9ICYmCisJCQkgICAgICAgICAgICAgKCRwYXRocy0+eyRjfS0+e2FjdGlvbn0gPX4gL15bQVJdJC8pKTsKKwkJCWdldF9kaXJfY2hlY2soJHNlbGYsICRleGlzdHMsICRnLCAkcik7CisJCX0KKwl9CisJdmFsdWVzICUkZXhpc3RzOworfQorCitzdWIgbWluaW1pemVfdXJsIHsKKwlteSAoJHNlbGYpID0gQF87CisJcmV0dXJuICRzZWxmLT51cmwgaWYgKCRzZWxmLT51cmwgZXEgJHNlbGYtPntyZXBvc19yb290fSk7CisJbXkgJHVybCA9ICRzZWxmLT57cmVwb3Nfcm9vdH07CisJbXkgQGNvbXBvbmVudHMgPSBzcGxpdChtIS8hLCAkc2VsZi0+e3N2bl9wYXRofSk7CisJbXkgJGMgPSAnJzsKKwlkbyB7CisJCSR1cmwgPSBhZGRfcGF0aF90b191cmwoJHVybCwgJGMpOworCQlldmFsIHsKKwkJCW15ICRyYSA9IChyZWYgJHNlbGYpLT5uZXcoJHVybCk7CisJCQlteSAkbGF0ZXN0ID0gJHJhLT5nZXRfbGF0ZXN0X3Jldm51bTsKKwkJCSRyYS0+Z2V0X2xvZygiIiwgJGxhdGVzdCwgMCwgMSwgMCwgMSwgc3ViIHt9KTsKKwkJfTsKKwl9IHdoaWxlICgkQCAmJiBkZWZpbmVkKCRjID0gc2hpZnQgQGNvbXBvbmVudHMpKTsKKworCXJldHVybiBjYW5vbmljYWxpemVfdXJsKCR1cmwpOworfQorCitzdWIgY2FuX2RvX3N3aXRjaCB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwl1bmxlc3MgKGRlZmluZWQgJGNhbl9kb19zd2l0Y2gpIHsKKwkJbXkgJHBvb2wgPSBTVk46OlBvb2wtPm5ldzsKKwkJbXkgJHJlcCA9IGV2YWwgeworCQkJJHNlbGYtPmRvX3N3aXRjaCgxLCAnJywgMCwgJHNlbGYtPnVybCwKKwkJCSAgICAgICAgICAgICAgICAgU1ZOOjpEZWx0YTo6RWRpdG9yLT5uZXcsICRwb29sKTsKKwkJfTsKKwkJaWYgKCRAKSB7CisJCQkkY2FuX2RvX3N3aXRjaCA9IDA7CisJCX0gZWxzZSB7CisJCQkkcmVwLT5hYm9ydF9yZXBvcnQoJHBvb2wpOworCQkJJGNhbl9kb19zd2l0Y2ggPSAxOworCQl9CisJCSRwb29sLT5jbGVhcjsKKwl9CisJJGNhbl9kb19zd2l0Y2g7Cit9CisKK3N1YiBza2lwX3Vua25vd25fcmV2cyB7CisJbXkgKCRlcnIpID0gQF87CisJbXkgJGVycm5vID0gJGVyci0+YXByX2VycigpOworCSMgTWF5YmUgdGhlIGJyYW5jaCB3ZSdyZSB0cmFja2luZyBkaWRuJ3QKKwkjIGV4aXN0IHdoZW4gdGhlIHJlcG8gc3RhcnRlZCwgc28gaXQncworCSMgbm90IGFuIGVycm9yIGlmIGl0IGRvZXNuJ3QsIGp1c3QgY29udGludWUKKwkjCisJIyBXb25kZXJmdWxseSBjb25zaXN0ZW50IGxpYnJhcnksIGVoPworCSMgMTYwMDEzIC0gc3ZuOi8vIGFuZCBmaWxlOi8vCisJIyAxNzUwMDIgLSBodHRwKHMpOi8vCisJIyAxNzUwMDcgLSBodHRwKHMpOi8vICh0aGlzIHJlcG8gcmVxdWlyZWQgYXV0aG9yaXphdGlvbiwgdG9vLi4uKQorCSMgICBNb3JlIGNvZGVzIG1heSBiZSBkaXNjb3ZlcmVkIGxhdGVyLi4uCisJaWYgKCRlcnJubyA9PSAxNzUwMDcgfHwgJGVycm5vID09IDE3NTAwMiB8fCAkZXJybm8gPT0gMTYwMDEzKSB7CisJCW15ICRlcnJfa2V5ID0gJGVyci0+ZXhwYW5kZWRfbWVzc2FnZTsKKwkJIyByZXZpc2lvbiBudW1iZXJzIGNoYW5nZSBldmVyeSB0aW1lLCBmaWx0ZXIgdGhlbSBvdXQKKwkJJGVycl9rZXkgPX4gcy9cZCsvXDAvZzsKKwkJJGVycl9rZXkgPSAiJGVycm5vXDAkZXJyX2tleSI7CisJCXVubGVzcyAoJGlnbm9yZWRfZXJyeyRlcnJfa2V5fSkgeworCQkJd2FybiAiVzogSWdub3JpbmcgZXJyb3IgZnJvbSBTVk4sIHBhdGggcHJvYmFibHkgIiwKKwkJCSAgICAgImRvZXMgbm90IGV4aXN0OiAoJGVycm5vKTogIiwKKwkJCSAgICAgJGVyci0+ZXhwYW5kZWRfbWVzc2FnZSwiXG4iOworCQkJd2FybiAiVzogRG8gbm90IGJlIGFsYXJtZWQgYXQgdGhlIGFib3ZlIG1lc3NhZ2UgIiwKKwkJCSAgICAgImdpdC1zdm4gaXMganVzdCBzZWFyY2hpbmcgYWdncmVzc2l2ZWx5IGZvciAiLAorCQkJICAgICAib2xkIGhpc3RvcnkuXG4iLAorCQkJICAgICAiVGhpcyBtYXkgdGFrZSBhIHdoaWxlIG9uIGxhcmdlIHJlcG9zaXRvcmllc1xuIjsKKwkJCSRpZ25vcmVkX2VycnskZXJyX2tleX0gPSAxOworCQl9CisJCXJldHVybjsKKwl9CisJZGllICJFcnJvciBmcm9tIFNWTiwgKCRlcnJubyk6ICIsICRlcnItPmV4cGFuZGVkX21lc3NhZ2UsIlxuIjsKK30KKworMTsKK19fRU5EX18KKworPWhlYWQxIE5BTUUKKworR2l0OjpTVk46OlJhIC0gU3VidmVyc2lvbiByZW1vdGUgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgZ2l0LXN2bgorCis9aGVhZDEgU1lOT1BTSVMKKworICAgIHVzZSBHaXQ6OlNWTjo6UmE7CisKKyAgICBteSAkcmEgPSBHaXQ6OlNWTjo6UmEtPm5ldygkYnJhbmNodXJsKTsKKyAgICBteSAoJGRpcmVudHMsICRmZXRjaGVkX3Jldm51bSwgJHByb3BzKSA9CisgICAgICAgICRyYS0+Z2V0X2RpcignLicsICRTVk46OkNvcmU6OklOVkFMSURfUkVWTlVNKTsKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgTDxTVk46OlJhPiBtb2R1bGUgZm9yIHVzZSBieSBCPGdpdC1zdm4+LgorSXQgZmlsbHMgaW4gc29tZSBkZWZhdWx0IHBhcmFtZXRlcnMgKHN1Y2ggYXMgdGhlIGF1dGhlbnRpY2F0aW9uCitzY2hlbWUpLCBzbW9vdGhzIG92ZXIgaW5jb21wYXRpYmlsaXRpZXMgYmV0d2VlbiBsaWJzdm4gdmVyc2lvbnMsIGFkZHMKK2NhY2hpbmcsIGFuZCBpbXBsZW1lbnRzIHNvbWUgZnVuY3Rpb25zIHNwZWNpZmljIHRvIEI8Z2l0LXN2bj4uCisKK0RvIG5vdCB1c2UgaXQgdW5sZXNzIHlvdSBhcmUgZGV2ZWxvcGluZyBnaXQtc3ZuLiAgVGhlIGludGVyZmFjZSB3aWxsCitjaGFuZ2UgYXMgZ2l0LXN2biBldm9sdmVzLgorCis9aGVhZDEgREVQRU5ERU5DSUVTCisKK1N1YnZlcnNpb24gcGVybCBiaW5kaW5ncywKK0w8R2l0OjpTVk4+LgorCitDPEdpdDo6U1ZOOjpSYT4gaGFzIG5vdCBiZWVuIHRlc3RlZCB1c2luZyBjYWxsZXJzIG90aGVyIHRoYW4KK0I8Z2l0LXN2bj4gaXRzZWxmLgorCis9aGVhZDEgU0VFIEFMU08KKworTDxTVk46OlJhPi4KKworPWhlYWQxIElOQ09NUEFUSUJJTElUSUVTCisKK05vbmUgcmVwb3J0ZWQuCisKKz1oZWFkMSBCVUdTCisKK05vbmUuCmRpZmYgLS1naXQgYS9wZXJsL0dpdC9TVk4vVXRpbHMucG0gYi9wZXJsL0dpdC9TVk4vVXRpbHMucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QxYTA5MwotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvR2l0L1NWTi9VdGlscy5wbQpAQCAtMCwwICsxLDIzMiBAQAorcGFja2FnZSBHaXQ6OlNWTjo6VXRpbHM7CisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBTVk46OkNvcmU7CisKK3VzZSBiYXNlIHF3KEV4cG9ydGVyKTsKKworb3VyIEBFWFBPUlRfT0sgPSBxdygKKwlmYXRhbAorCWNhbl9jb21wcmVzcworCWNhbm9uaWNhbGl6ZV9wYXRoCisJY2Fub25pY2FsaXplX3VybAorCWpvaW5fcGF0aHMKKwlhZGRfcGF0aF90b191cmwKKyk7CisKKworPWhlYWQxIE5BTUUKKworR2l0OjpTVk46OlV0aWxzIC0gdXRpbGl0eSBmdW5jdGlvbnMgdXNlZCBhY3Jvc3MgR2l0OjpTVk4KKworPWhlYWQxIFNZTk9QU0lTCisKKyAgICB1c2UgR2l0OjpTVk46OlV0aWxzIHF3KGZ1bmN0aW9ucyB0byBpbXBvcnQpOworCis9aGVhZDEgREVTQ1JJUFRJT04KKworVGhpcyBtb2R1bGUgY29udGFpbnMgZnVuY3Rpb25zIHdoaWNoIGFyZSB1c2VmdWwgYWNyb3NzIG1hbnkgZGlmZmVyZW50CitwYXJ0cyBvZiBHaXQ6OlNWTi4gIE1vc3RseSBpdCdzIGEgcGxhY2UgdG8gcHV0IHV0aWxpdHkgZnVuY3Rpb25zCityYXRoZXIgdGhhbiBkdXBsaWNhdGUgdGhlIGNvZGUgb3IgaGF2ZSBjbGFzc2VzIGdyYWJiaW5nIGF0IG90aGVyCitjbGFzc2VzLgorCis9aGVhZDEgRlVOQ1RJT05TCisKK0FsbCBmdW5jdGlvbnMgY2FuIGJlIGltcG9ydGVkIG9ubHkgb24gcmVxdWVzdC4KKworPWhlYWQzIGZhdGFsCisKKyAgICBmYXRhbChAbWVzc2FnZSk7CisKK0Rpc3BsYXkgYSBtZXNzYWdlIGFuZCBleGl0IHdpdGggYSBmYXRhbCBlcnJvciBjb2RlLgorCis9Y3V0CisKKyMgTm90ZTogbm90IGNlcnRhaW4gd2h5IHRoaXMgaXMgaW4gdXNlIGluc3RlYWQgb2YgZGllLiAgUHJvYmFibHkgYmVjYXVzZQorIyB0aGUgZXhpdCBjb2RlIG9mIGRpZSBpcyAyNTU/ICBEb2Vzbid0IGFwcGVhciB0byBiZSB1c2VkIGNvbnNpc3RlbnRseS4KK3N1YiBmYXRhbCAoQCkgeyBwcmludCBTVERFUlIgIkBfXG4iOyBleGl0IDEgfQorCisKKz1oZWFkMyBjYW5fY29tcHJlc3MKKworICAgIG15ICRjYW5fY29tcHJlc3MgPSBjYW5fY29tcHJlc3M7CisKK1JldHVybnMgdHJ1ZSBpZiBDb21wcmVzczo6WmxpYiBpcyBhdmFpbGFibGUsIGZhbHNlIG90aGVyd2lzZS4KKworPWN1dAorCitteSAkY2FuX2NvbXByZXNzOworc3ViIGNhbl9jb21wcmVzcyB7CisJcmV0dXJuICRjYW5fY29tcHJlc3MgaWYgZGVmaW5lZCAkY2FuX2NvbXByZXNzOworCisJcmV0dXJuICRjYW5fY29tcHJlc3MgPSBldmFsIHsgcmVxdWlyZSBDb21wcmVzczo6WmxpYjsgfTsKK30KKworCis9aGVhZDMgY2Fub25pY2FsaXplX3BhdGgKKworICAgIG15ICRjYW5vbmNhbGl6ZWRfcGF0aCA9IGNhbm9uaWNhbGl6ZV9wYXRoKCRwYXRoKTsKKworQ29udmVydHMgJHBhdGggaW50byBhIGNhbm9uaWNhbCBmb3JtIHdoaWNoIGlzIHNhZmUgdG8gcGFzcyB0byB0aGUgU1ZOCitBUEkgYXMgYSBmaWxlIHBhdGguCisKKz1jdXQKKworIyBUdXJuIGZvby8uLi9iYXIgaW50byBiYXIKK3N1YiBfY29sbGFwc2VfZG90ZG90IHsKKwlteSAkcGF0aCA9IHNoaWZ0OworCisJMSB3aGlsZSAkcGF0aCA9fiBzey9bXi9dKy8rXC5cLn17fTsKKwkxIHdoaWxlICRwYXRoID1+IHN7W14vXSsvK1wuXC4vfXt9OworCTEgd2hpbGUgJHBhdGggPX4gc3tbXi9dKy8rXC5cLn17fTsKKworCXJldHVybiAkcGF0aDsKK30KKworCitzdWIgY2Fub25pY2FsaXplX3BhdGggeworCW15ICRwYXRoID0gc2hpZnQ7CisJbXkgJHJ2OworCisJIyBUaGUgMS43IHdheSB0byBkbyBpdAorCWlmICggZGVmaW5lZCAmU1ZOOjpfQ29yZTo6c3ZuX2RpcmVudF9jYW5vbmljYWxpemUgKSB7CisJCSRwYXRoID0gX2NvbGxhcHNlX2RvdGRvdCgkcGF0aCk7CisJCSRydiA9IFNWTjo6X0NvcmU6OnN2bl9kaXJlbnRfY2Fub25pY2FsaXplKCRwYXRoKTsKKwl9CisJIyBUaGUgMS42IHdheSB0byBkbyBpdAorCSMgVGhpcyBjYW4gcmV0dXJuIHVuZGVmIG9uIHN1YnZlcnNpb24tcGVybC0xLjQuMi0yLmVsNSAoQ2VudE9TIDUuMikKKwllbHNpZiAoIGRlZmluZWQgJlNWTjo6X0NvcmU6OnN2bl9wYXRoX2Nhbm9uaWNhbGl6ZSApIHsKKwkJJHBhdGggPSBfY29sbGFwc2VfZG90ZG90KCRwYXRoKTsKKwkJJHJ2ID0gU1ZOOjpfQ29yZTo6c3ZuX3BhdGhfY2Fub25pY2FsaXplKCRwYXRoKTsKKwl9CisKKwlyZXR1cm4gJHJ2IGlmIGRlZmluZWQgJHJ2OworCisJIyBObyBTVk4gQVBJIGNhbm9uaWNhbGl6YXRpb24gaXMgYXZhaWxhYmxlLCBvciB0aGUgU1ZOIEFQSQorCSMgZGlkbid0IHJldHVybiBhIHN1Y2Nlc3NmdWwgcmVzdWx0LCBkbyBpdCBvdXJzZWx2ZXMKKwlyZXR1cm4gX2Nhbm9uaWNhbGl6ZV9wYXRoX291cnNlbHZlcygkcGF0aCk7Cit9CisKKworc3ViIF9jYW5vbmljYWxpemVfcGF0aF9vdXJzZWx2ZXMgeworCW15ICgkcGF0aCkgPSBAXzsKKwlteSAkZG90X3NsYXNoX2FkZGVkID0gMDsKKwlpZiAoc3Vic3RyKCRwYXRoLCAwLCAxKSBuZSAiLyIpIHsKKwkJJHBhdGggPSAiLi8iIC4gJHBhdGg7CisJCSRkb3Rfc2xhc2hfYWRkZWQgPSAxOworCX0KKwkkcGF0aCA9fiBzIy8rIy8jZzsKKwkkcGF0aCA9fiBzIy9cLig/Oi98JCkjLyNnOworCSRwYXRoID0gX2NvbGxhcHNlX2RvdGRvdCgkcGF0aCk7CisJJHBhdGggPX4gcyMvJCMjZzsKKwkkcGF0aCA9fiBzI15cLi8jIyBpZiAkZG90X3NsYXNoX2FkZGVkOworCSRwYXRoID1+IHMjXlwuJCMjOworCXJldHVybiAkcGF0aDsKK30KKworCis9aGVhZDMgY2Fub25pY2FsaXplX3VybAorCisgICAgbXkgJGNhbm9uaWNhbGl6ZWRfdXJsID0gY2Fub25pY2FsaXplX3VybCgkdXJsKTsKKworQ29udmVydHMgJHVybCBpbnRvIGEgY2Fub25pY2FsIGZvcm0gd2hpY2ggaXMgc2FmZSB0byBwYXNzIHRvIHRoZSBTVk4KK0FQSSBhcyBhIFVSTC4KKworPWN1dAorCitzdWIgY2Fub25pY2FsaXplX3VybCB7CisJbXkgJHVybCA9IHNoaWZ0OworCisJIyBUaGUgMS43IHdheSB0byBkbyBpdAorCWlmICggZGVmaW5lZCAmU1ZOOjpfQ29yZTo6c3ZuX3VyaV9jYW5vbmljYWxpemUgKSB7CisJCXJldHVybiBTVk46Ol9Db3JlOjpzdm5fdXJpX2Nhbm9uaWNhbGl6ZSgkdXJsKTsKKwl9CisJIyBUaGVyZSB3YXNuJ3QgYSAxLjYgd2F5IHRvIGRvIGl0LCBzbyB3ZSBkbyBpdCBvdXJzZWxmLgorCWVsc2UgeworCQlyZXR1cm4gX2Nhbm9uaWNhbGl6ZV91cmxfb3Vyc2VsdmVzKCR1cmwpOworCX0KK30KKworCitzdWIgX2Nhbm9uaWNhbGl6ZV91cmxfcGF0aCB7CisJbXkgKCR1cmlfcGF0aCkgPSBAXzsKKworCW15IEBwYXJ0czsKKwlmb3JlYWNoIG15ICRwYXJ0IChzcGxpdCBtey8rfSwgJHVyaV9wYXRoKSB7CisJCSRwYXJ0ID1+IHMvKFteIVwkJSYnKCkqKywuXC9cdzo9XEBfYH4tXXwlKD8hW2EtZkEtRjAtOV17Mn0pKS9zcHJpbnRmKCIlJSUwMlgiLG9yZCgkMSkpL2VnOworCQlwdXNoIEBwYXJ0cywgJHBhcnQ7CisJfQorCisJcmV0dXJuIGpvaW4oJy8nLCBAcGFydHMpOworfQorCitzdWIgX2Nhbm9uaWNhbGl6ZV91cmxfb3Vyc2VsdmVzIHsKKwlteSAoJHVybCkgPSBAXzsKKwlpZiAoJHVybCA9fiBtI14oW146XSspOi8vKFteL10qKSguKikkIykgeworCQlteSAoJHNjaGVtZSwgJGRvbWFpbiwgJHVyaSkgPSAoJDEsICQyLCBfY2Fub25pY2FsaXplX3VybF9wYXRoKGNhbm9uaWNhbGl6ZV9wYXRoKCQzKSkpOworCQkkdXJsID0gIiRzY2hlbWU6Ly8kZG9tYWluJHVyaSI7CisJfQorCSR1cmw7Cit9CisKKworPWhlYWQzIGpvaW5fcGF0aHMKKworICAgIG15ICRuZXdfcGF0aCA9IGpvaW5fcGF0aHMoQHBhdGhzKTsKKworQXBwZW5kcyBAcGF0aHMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSBwYXRoLiAgQW55IGVtcHR5IHBhdGhzIGFyZSBpZ25vcmVkLgorCis9Y3V0CisKK3N1YiBqb2luX3BhdGhzIHsKKwlteSBAcGF0aHMgPSBAXzsKKworCUBwYXRocyA9IGdyZXAgeyBkZWZpbmVkICRfICYmIGxlbmd0aCAkXyB9IEBwYXRoczsKKworCXJldHVybiAnJyB1bmxlc3MgQHBhdGhzOworCXJldHVybiAkcGF0aHNbMF0gaWYgQHBhdGhzID09IDE7CisKKwlteSAkbmV3X3BhdGggPSBzaGlmdCBAcGF0aHM7CisJJG5ld19wYXRoID1+IHN7LyskfXt9OworCisJbXkgJGxhc3RfcGF0aCA9IHBvcCBAcGF0aHM7CisJJGxhc3RfcGF0aCA9fiBze14vK317fTsKKworCWZvciBteSAkcGF0aCAoQHBhdGhzKSB7CisJCSRwYXRoID1+IHN7Xi8rfXt9OworCQkkcGF0aCA9fiBzey8rJH17fTsKKwkJJG5ld19wYXRoIC49ICIvJHBhdGgiOworCX0KKworCXJldHVybiAkbmV3X3BhdGggLj0gIi8kbGFzdF9wYXRoIjsKK30KKworCis9aGVhZDMgYWRkX3BhdGhfdG9fdXJsCisKKyAgICBteSAkbmV3X3VybCA9IGFkZF9wYXRoX3RvX3VybCgkdXJsLCAkcGF0aCk7CisKK0FwcGVuZHMgJHBhdGggb250byB0aGUgJHVybC4gIElmICRwYXRoIGlzIGVtcHR5LCAkdXJsIGlzIHJldHVybmVkIHVuY2hhbmdlZC4KKworPWN1dAorCitzdWIgYWRkX3BhdGhfdG9fdXJsIHsKKwlteSgkdXJsLCAkcGF0aCkgPSBAXzsKKworCXJldHVybiAkdXJsIGlmICFkZWZpbmVkICRwYXRoIG9yICFsZW5ndGggJHBhdGg7CisKKwkjIFN0cmlwIHRyYWlsaW5nIGFuZCBsZWFkaW5nIHNsYXNoZXMgc28gd2UgZG9uJ3QKKwkjIHdpbmQgdXAgd2l0aCBodHRwOi8veC5jb20vLy9wYXRoCisJJHVybCAgPX4gc3svKyR9e307CisJJHBhdGggPX4gc3teLyt9e307CisKKwkjIElmIGEgcGF0aCBoYXMgYSAlIGluIGl0LCBVUkkgZXNjYXBlIGl0IHNvIGl0J3Mgbm90CisJIyBtaXN0YWtlbiBmb3IgYSBVUkkgZXNjYXBlIGxhdGVyLgorCSRwYXRoID1+IHN7JX17JTI1fWc7CisKKwlyZXR1cm4gam9pbiAnLycsICR1cmwsICRwYXRoOworfQorCisxOwpkaWZmIC0tZ2l0IGEvcGVybC9oZWFkZXJfdGVtcGxhdGVzL2ZpeGVkX3ByZWZpeC50ZW1wbGF0ZS5wbCBiL3BlcmwvaGVhZGVyX3RlbXBsYXRlcy9maXhlZF9wcmVmaXgudGVtcGxhdGUucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU3YjQzOQotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvaGVhZGVyX3RlbXBsYXRlcy9maXhlZF9wcmVmaXgudGVtcGxhdGUucGwKQEAgLTAsMCArMSBAQAordXNlIGxpYiAoc3BsaXQoL0BAUEFUSFNFUEBALywgJEVOVntHSVRQRVJMTElCfSB8fCAnQEBJTlNUTElCRElSQEAnKSk7CmRpZmYgLS1naXQgYS9wZXJsL2hlYWRlcl90ZW1wbGF0ZXMvcnVudGltZV9wcmVmaXgudGVtcGxhdGUucGwgYi9wZXJsL2hlYWRlcl90ZW1wbGF0ZXMvcnVudGltZV9wcmVmaXgudGVtcGxhdGUucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyOGIzZAotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvaGVhZGVyX3RlbXBsYXRlcy9ydW50aW1lX3ByZWZpeC50ZW1wbGF0ZS5wbApAQCAtMCwwICsxLDQyIEBACisjIEJFR0lOIFJVTlRJTUVfUFJFRklYIGdlbmVyYXRlZCBjb2RlLgorIworIyBUaGlzIGZpbmRzIG91ciBHaXQ6OiogbGlicmFyaWVzIHJlbGF0aXZlIHRvIHRoZSBzY3JpcHQncyBydW50aW1lIHBhdGguCitzdWIgX19naXRfc3lzdGVtX3BhdGggeworCW15ICgkcmVscGF0aCkgPSBAXzsKKwlteSAkZ2l0ZXhlY2Rpcl9yZWxhdGl2ZSA9ICdAQEdJVEVYRUNESVJfUkVMQEAnOworCisJIyBHSVRfRVhFQ19QQVRIIGlzIHN1cHBsaWVkIGJ5IGBnaXRgIG9yIHRoZSB0ZXN0IHN1aXRlLgorCW15ICRleGVjX3BhdGg7CisJaWYgKGV4aXN0cyAkRU5We0dJVF9FWEVDX1BBVEh9KSB7CisJCSRleGVjX3BhdGggPSAkRU5We0dJVF9FWEVDX1BBVEh9OworCX0gZWxzZSB7CisJCSMgVGhpcyBjYW4gaGFwcGVuIGlmIHRoaXMgc2NyaXB0IGlzIGJlaW5nIGRpcmVjdGx5IGludm9rZWQgaW5zdGVhZCBvZiBydW4KKwkJIyBieSAiZ2l0Ii4KKwkJcmVxdWlyZSBGaW5kQmluOworCQkkZXhlY19wYXRoID0gJEZpbmRCaW46OkJpbjsKKwl9CisKKwkjIFRyaW0gb2ZmIHRoZSByZWxhdGl2ZSBnaXRleGVjZGlyIHBhdGggdG8gZ2V0IHRoZSBzeXN0ZW0gcGF0aC4KKwkobXkgJHByZWZpeCA9ICRleGVjX3BhdGgpID1+IHMvXFEkZ2l0ZXhlY2Rpcl9yZWxhdGl2ZVxFJC8vOworCisJcmVxdWlyZSBGaWxlOjpTcGVjOworCXJldHVybiBGaWxlOjpTcGVjLT5jYXRkaXIoJHByZWZpeCwgJHJlbHBhdGgpOworfQorCitCRUdJTiB7CisJdXNlIGxpYiBzcGxpdCAvQEBQQVRIU0VQQEAvLAorCSgKKwkJJEVOVntHSVRQRVJMTElCfSB8fAorCQlkbyB7CisJCQlteSAkcGVybGxpYmRpciA9IF9fZ2l0X3N5c3RlbV9wYXRoKCdAQFBFUkxMSUJESVJfUkVMQEAnKTsKKwkJCSgtZSAkcGVybGxpYmRpcikgfHwgZGllKCJJbnZhbGlkIHN5c3RlbSBwYXRoICgkcmVscGF0aCk6ICRwYXRoIik7CisJCQkkcGVybGxpYmRpcjsKKwkJfQorCSk7CisKKwkjIEV4cG9ydCB0aGUgc3lzdGVtIGxvY2FsZSBkaXJlY3RvcnkgdG8gdGhlIEkxOE4gbW9kdWxlLiBUaGUgbG9jYWxlIGRpcmVjdG9yeQorCSMgaXMgb25seSBpbnN0YWxsZWQgaWYgTk9fR0VUVEVYVCBpcyBzZXQuCisJJEdpdDo6STE4Tjo6VEVYVERPTUFJTkRJUiA9IF9fZ2l0X3N5c3RlbV9wYXRoKCdAQExPQ0FMRURJUl9SRUxAQCcpOworfQorCisjIEVORCBSVU5USU1FX1BSRUZJWCBnZW5lcmF0ZWQgY29kZS4KZGlmZiAtLWdpdCBhL3BrdC1saW5lLmMgYi9wa3QtbGluZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZTg3YjEKLS0tIC9kZXYvbnVsbAorKysgYi9wa3QtbGluZS5jCkBAIC0wLDAgKzEsNTcwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisKK2NoYXIgcGFja2V0X2J1ZmZlcltMQVJHRV9QQUNLRVRfTUFYXTsKK3N0YXRpYyBjb25zdCBjaGFyICpwYWNrZXRfdHJhY2VfcHJlZml4ID0gImdpdCI7CitzdGF0aWMgc3RydWN0IHRyYWNlX2tleSB0cmFjZV9wYWNrZXQgPSBUUkFDRV9LRVlfSU5JVChQQUNLRVQpOworc3RhdGljIHN0cnVjdCB0cmFjZV9rZXkgdHJhY2VfcGFjayA9IFRSQUNFX0tFWV9JTklUKFBBQ0tGSUxFKTsKKwordm9pZCBwYWNrZXRfdHJhY2VfaWRlbnRpdHkoY29uc3QgY2hhciAqcHJvZykKK3sKKwlwYWNrZXRfdHJhY2VfcHJlZml4ID0geHN0cmR1cChwcm9nKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF90cmFjZV9wcmVmaXgodm9pZCkKK3sKKwlyZXR1cm4gaW5fYXN5bmMoKSA/ICJzaWRlYmFuZCIgOiBwYWNrZXRfdHJhY2VfcHJlZml4OworfQorCitzdGF0aWMgaW50IHBhY2tldF90cmFjZV9wYWNrKGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbiwgaW50IHNpZGViYW5kKQoreworCWlmICghc2lkZWJhbmQpIHsKKwkJdHJhY2VfdmVyYmF0aW0oJnRyYWNlX3BhY2ssIGJ1ZiwgbGVuKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChsZW4gJiYgKmJ1ZiA9PSAnXDEnKSB7CisJCXRyYWNlX3ZlcmJhdGltKCZ0cmFjZV9wYWNrLCBidWYgKyAxLCBsZW4gLSAxKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJLyogaXQncyBhbm90aGVyIG5vbi1wYWNrIHNpZGViYW5kICovCisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQgcGFja2V0X3RyYWNlKGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbiwgaW50IHdyaXRlKQoreworCWludCBpOworCXN0cnVjdCBzdHJidWYgb3V0OworCXN0YXRpYyBpbnQgaW5fcGFjaywgc2lkZWJhbmQ7CisKKwlpZiAoIXRyYWNlX3dhbnQoJnRyYWNlX3BhY2tldCkgJiYgIXRyYWNlX3dhbnQoJnRyYWNlX3BhY2spKQorCQlyZXR1cm47CisKKwlpZiAoaW5fcGFjaykgeworCQlpZiAocGFja2V0X3RyYWNlX3BhY2soYnVmLCBsZW4sIHNpZGViYW5kKSkKKwkJCXJldHVybjsKKwl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGJ1ZiwgIlBBQ0siKSB8fCBzdGFydHNfd2l0aChidWYsICJcMVBBQ0siKSkgeworCQlpbl9wYWNrID0gMTsKKwkJc2lkZWJhbmQgPSAqYnVmID09ICdcMSc7CisJCXBhY2tldF90cmFjZV9wYWNrKGJ1ZiwgbGVuLCBzaWRlYmFuZCk7CisKKwkJLyoKKwkJICogTWFrZSBhIG5vdGUgaW4gdGhlIGh1bWFuLXJlYWRhYmxlIHRyYWNlIHRoYXQgdGhlIHBhY2sgZGF0YQorCQkgKiBzdGFydGVkLgorCQkgKi8KKwkJYnVmID0gIlBBQ0sgLi4uIjsKKwkJbGVuID0gc3RybGVuKGJ1Zik7CisJfQorCisJaWYgKCF0cmFjZV93YW50KCZ0cmFjZV9wYWNrZXQpKQorCQlyZXR1cm47CisKKwkvKiArMzIgaXMganVzdCBhIGd1ZXNzIGZvciBoZWFkZXIgKyBxdW90aW5nICovCisJc3RyYnVmX2luaXQoJm91dCwgbGVuKzMyKTsKKworCXN0cmJ1Zl9hZGRmKCZvdXQsICJwYWNrZXQ6ICUxMnMlYyAiLAorCQkgICAgZ2V0X3RyYWNlX3ByZWZpeCgpLCB3cml0ZSA/ICc+JyA6ICc8Jyk7CisKKwkvKiBYWFggd2Ugc2hvdWxkIHJlYWxseSBoYW5kbGUgcHJpbnRhYmxlIHV0ZjggKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJLyogc3VwcHJlc3MgbmV3bGluZXMgKi8KKwkJaWYgKGJ1ZltpXSA9PSAnXG4nKQorCQkJY29udGludWU7CisJCWlmIChidWZbaV0gPj0gMHgyMCAmJiBidWZbaV0gPD0gMHg3ZSkKKwkJCXN0cmJ1Zl9hZGRjaCgmb3V0LCBidWZbaV0pOworCQllbHNlCisJCQlzdHJidWZfYWRkZigmb3V0LCAiXFwlbyIsIGJ1ZltpXSk7CisJfQorCisJc3RyYnVmX2FkZGNoKCZvdXQsICdcbicpOworCXRyYWNlX3N0cmJ1ZigmdHJhY2VfcGFja2V0LCAmb3V0KTsKKwlzdHJidWZfcmVsZWFzZSgmb3V0KTsKK30KKworLyoKKyAqIElmIHdlIGJ1ZmZlcmVkIHRoaW5ncyB1cCBhYm92ZSAod2UgZG9uJ3QsIGJ1dCB3ZSBzaG91bGQpLAorICogd2UnZCBmbHVzaCBpdCBoZXJlCisgKi8KK3ZvaWQgcGFja2V0X2ZsdXNoKGludCBmZCkKK3sKKwlwYWNrZXRfdHJhY2UoIjAwMDAiLCA0LCAxKTsKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgIjAwMDAiLCA0KSA8IDApCisJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gd3JpdGUgZmx1c2ggcGFja2V0IikpOworfQorCit2b2lkIHBhY2tldF9kZWxpbShpbnQgZmQpCit7CisJcGFja2V0X3RyYWNlKCIwMDAxIiwgNCwgMSk7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsICIwMDAxIiwgNCkgPCAwKQorCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIHdyaXRlIGRlbGltIHBhY2tldCIpKTsKK30KKworaW50IHBhY2tldF9mbHVzaF9nZW50bHkoaW50IGZkKQoreworCXBhY2tldF90cmFjZSgiMDAwMCIsIDQsIDEpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCAiMDAwMCIsIDQpIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImZsdXNoIHBhY2tldCB3cml0ZSBmYWlsZWQiKSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcGFja2V0X2J1Zl9mbHVzaChzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJcGFja2V0X3RyYWNlKCIwMDAwIiwgNCwgMSk7CisJc3RyYnVmX2FkZChidWYsICIwMDAwIiwgNCk7Cit9CisKK3ZvaWQgcGFja2V0X2J1Zl9kZWxpbShzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJcGFja2V0X3RyYWNlKCIwMDAxIiwgNCwgMSk7CisJc3RyYnVmX2FkZChidWYsICIwMDAxIiwgNCk7Cit9CisKK3ZvaWQgc2V0X3BhY2tldF9oZWFkZXIoY2hhciAqYnVmLCBpbnQgc2l6ZSkKK3sKKwlzdGF0aWMgY2hhciBoZXhjaGFyW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisKKwkjZGVmaW5lIGhleChhKSAoaGV4Y2hhclsoYSkgJiAxNV0pCisJYnVmWzBdID0gaGV4KHNpemUgPj4gMTIpOworCWJ1ZlsxXSA9IGhleChzaXplID4+IDgpOworCWJ1ZlsyXSA9IGhleChzaXplID4+IDQpOworCWJ1ZlszXSA9IGhleChzaXplKTsKKwkjdW5kZWYgaGV4Cit9CisKK3N0YXRpYyB2b2lkIGZvcm1hdF9wYWNrZXQoc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQoreworCXNpemVfdCBvcmlnX2xlbiwgbjsKKworCW9yaWdfbGVuID0gb3V0LT5sZW47CisJc3RyYnVmX2FkZHN0cihvdXQsICIwMDAwIik7CisJc3RyYnVmX2FkZHN0cihvdXQsIHByZWZpeCk7CisJc3RyYnVmX3ZhZGRmKG91dCwgZm10LCBhcmdzKTsKKwluID0gb3V0LT5sZW4gLSBvcmlnX2xlbjsKKworCWlmIChuID4gTEFSR0VfUEFDS0VUX01BWCkKKwkJZGllKF8oInByb3RvY29sIGVycm9yOiBpbXBvc3NpYmx5IGxvbmcgbGluZSIpKTsKKworCXNldF9wYWNrZXRfaGVhZGVyKCZvdXQtPmJ1ZltvcmlnX2xlbl0sIG4pOworCXBhY2tldF90cmFjZShvdXQtPmJ1ZiArIG9yaWdfbGVuICsgNCwgbiAtIDQsIDEpOworfQorCitzdGF0aWMgaW50IHBhY2tldF93cml0ZV9mbXRfMShpbnQgZmQsIGludCBnZW50bHksIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCWZvcm1hdF9wYWNrZXQoJmJ1ZiwgcHJlZml4LCBmbXQsIGFyZ3MpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYuYnVmLCBidWYubGVuKSA8IDApIHsKKwkJaWYgKCFnZW50bHkpIHsKKwkJCWNoZWNrX3BpcGUoZXJybm8pOworCQkJZGllX2Vycm5vKF8oInBhY2tldCB3cml0ZSB3aXRoIGZvcm1hdCBmYWlsZWQiKSk7CisJCX0KKwkJcmV0dXJuIGVycm9yKF8oInBhY2tldCB3cml0ZSB3aXRoIGZvcm1hdCBmYWlsZWQiKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcGFja2V0X3dyaXRlX2ZtdChpbnQgZmQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJcGFja2V0X3dyaXRlX2ZtdF8xKGZkLCAwLCAiIiwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7Cit9CisKK2ludCBwYWNrZXRfd3JpdGVfZm10X2dlbnRseShpbnQgZmQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCBzdGF0dXM7CisJdmFfbGlzdCBhcmdzOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlzdGF0dXMgPSBwYWNrZXRfd3JpdGVfZm10XzEoZmQsIDEsICIiLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHBhY2tldF93cml0ZV9nZW50bHkoY29uc3QgaW50IGZkX291dCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdGF0aWMgY2hhciBwYWNrZXRfd3JpdGVfYnVmZmVyW0xBUkdFX1BBQ0tFVF9NQVhdOworCXNpemVfdCBwYWNrZXRfc2l6ZTsKKworCWlmIChzaXplID4gc2l6ZW9mKHBhY2tldF93cml0ZV9idWZmZXIpIC0gNCkKKwkJcmV0dXJuIGVycm9yKF8oInBhY2tldCB3cml0ZSBmYWlsZWQgLSBkYXRhIGV4Y2VlZHMgbWF4IHBhY2tldCBzaXplIikpOworCisJcGFja2V0X3RyYWNlKGJ1Ziwgc2l6ZSwgMSk7CisJcGFja2V0X3NpemUgPSBzaXplICsgNDsKKwlzZXRfcGFja2V0X2hlYWRlcihwYWNrZXRfd3JpdGVfYnVmZmVyLCBwYWNrZXRfc2l6ZSk7CisJbWVtY3B5KHBhY2tldF93cml0ZV9idWZmZXIgKyA0LCBidWYsIHNpemUpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkX291dCwgcGFja2V0X3dyaXRlX2J1ZmZlciwgcGFja2V0X3NpemUpIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oInBhY2tldCB3cml0ZSBmYWlsZWQiKSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcGFja2V0X3dyaXRlKGludCBmZF9vdXQsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJaWYgKHBhY2tldF93cml0ZV9nZW50bHkoZmRfb3V0LCBidWYsIHNpemUpKQorCQlkaWVfZXJybm8oXygicGFja2V0IHdyaXRlIGZhaWxlZCIpKTsKK30KKwordm9pZCBwYWNrZXRfYnVmX3dyaXRlKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlmb3JtYXRfcGFja2V0KGJ1ZiwgIiIsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworfQorCit2b2lkIHBhY2tldF9idWZfd3JpdGVfbGVuKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzaXplX3Qgb3JpZ19sZW4sIG47CisKKwlvcmlnX2xlbiA9IGJ1Zi0+bGVuOworCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiMDAwMCIpOworCXN0cmJ1Zl9hZGQoYnVmLCBkYXRhLCBsZW4pOworCW4gPSBidWYtPmxlbiAtIG9yaWdfbGVuOworCisJaWYgKG4gPiBMQVJHRV9QQUNLRVRfTUFYKQorCQlkaWUoXygicHJvdG9jb2wgZXJyb3I6IGltcG9zc2libHkgbG9uZyBsaW5lIikpOworCisJc2V0X3BhY2tldF9oZWFkZXIoJmJ1Zi0+YnVmW29yaWdfbGVuXSwgbik7CisJcGFja2V0X3RyYWNlKGRhdGEsIGxlbiwgMSk7Cit9CisKK2ludCB3cml0ZV9wYWNrZXRpemVkX2Zyb21fZmQoaW50IGZkX2luLCBpbnQgZmRfb3V0KQoreworCXN0YXRpYyBjaGFyIGJ1ZltMQVJHRV9QQUNLRVRfREFUQV9NQVhdOworCWludCBlcnIgPSAwOworCXNzaXplX3QgYnl0ZXNfdG9fd3JpdGU7CisKKwl3aGlsZSAoIWVycikgeworCQlieXRlc190b193cml0ZSA9IHhyZWFkKGZkX2luLCBidWYsIHNpemVvZihidWYpKTsKKwkJaWYgKGJ5dGVzX3RvX3dyaXRlIDwgMCkKKwkJCXJldHVybiBDT1BZX1JFQURfRVJST1I7CisJCWlmIChieXRlc190b193cml0ZSA9PSAwKQorCQkJYnJlYWs7CisJCWVyciA9IHBhY2tldF93cml0ZV9nZW50bHkoZmRfb3V0LCBidWYsIGJ5dGVzX3RvX3dyaXRlKTsKKwl9CisJaWYgKCFlcnIpCisJCWVyciA9IHBhY2tldF9mbHVzaF9nZW50bHkoZmRfb3V0KTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgd3JpdGVfcGFja2V0aXplZF9mcm9tX2J1Zihjb25zdCBjaGFyICpzcmNfaW4sIHNpemVfdCBsZW4sIGludCBmZF9vdXQpCit7CisJaW50IGVyciA9IDA7CisJc2l6ZV90IGJ5dGVzX3dyaXR0ZW4gPSAwOworCXNpemVfdCBieXRlc190b193cml0ZTsKKworCXdoaWxlICghZXJyKSB7CisJCWlmICgobGVuIC0gYnl0ZXNfd3JpdHRlbikgPiBMQVJHRV9QQUNLRVRfREFUQV9NQVgpCisJCQlieXRlc190b193cml0ZSA9IExBUkdFX1BBQ0tFVF9EQVRBX01BWDsKKwkJZWxzZQorCQkJYnl0ZXNfdG9fd3JpdGUgPSBsZW4gLSBieXRlc193cml0dGVuOworCQlpZiAoYnl0ZXNfdG9fd3JpdGUgPT0gMCkKKwkJCWJyZWFrOworCQllcnIgPSBwYWNrZXRfd3JpdGVfZ2VudGx5KGZkX291dCwgc3JjX2luICsgYnl0ZXNfd3JpdHRlbiwgYnl0ZXNfdG9fd3JpdGUpOworCQlieXRlc193cml0dGVuICs9IGJ5dGVzX3RvX3dyaXRlOworCX0KKwlpZiAoIWVycikKKwkJZXJyID0gcGFja2V0X2ZsdXNoX2dlbnRseShmZF9vdXQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3BhY2tldF9kYXRhKGludCBmZCwgY2hhciAqKnNyY19idWYsIHNpemVfdCAqc3JjX3NpemUsCisJCQkgICB2b2lkICpkc3QsIHVuc2lnbmVkIHNpemUsIGludCBvcHRpb25zKQoreworCXNzaXplX3QgcmV0OworCisJaWYgKGZkID49IDAgJiYgc3JjX2J1ZiAmJiAqc3JjX2J1ZikKKwkJQlVHKCJtdWx0aXBsZSBzb3VyY2VzIGdpdmVuIHRvIHBhY2tldF9yZWFkIik7CisKKwkvKiBSZWFkIHVwIHRvICJzaXplIiBieXRlcyBmcm9tIG91ciBzb3VyY2UsIHdoYXRldmVyIGl0IGlzLiAqLworCWlmIChzcmNfYnVmICYmICpzcmNfYnVmKSB7CisJCXJldCA9IHNpemUgPCAqc3JjX3NpemUgPyBzaXplIDogKnNyY19zaXplOworCQltZW1jcHkoZHN0LCAqc3JjX2J1ZiwgcmV0KTsKKwkJKnNyY19idWYgKz0gcmV0OworCQkqc3JjX3NpemUgLT0gcmV0OworCX0gZWxzZSB7CisJCXJldCA9IHJlYWRfaW5fZnVsbChmZCwgZHN0LCBzaXplKTsKKwkJaWYgKHJldCA8IDApCisJCQlkaWVfZXJybm8oXygicmVhZCBlcnJvciIpKTsKKwl9CisKKwkvKiBBbmQgY29tcGxhaW4gaWYgd2UgZGlkbid0IGdldCBlbm91Z2ggYnl0ZXMgdG8gc2F0aXNmeSB0aGUgcmVhZC4gKi8KKwlpZiAocmV0ICE9IHNpemUpIHsKKwkJaWYgKG9wdGlvbnMgJiBQQUNLRVRfUkVBRF9HRU5UTEVfT05fRU9GKQorCQkJcmV0dXJuIC0xOworCisJCWRpZShfKCJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVuZXhwZWN0ZWRseSIpKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBhY2tldF9sZW5ndGgoY29uc3QgY2hhciAqbGluZWxlbikKK3sKKwlpbnQgdmFsID0gaGV4MmNocihsaW5lbGVuKTsKKwlyZXR1cm4gKHZhbCA8IDApID8gdmFsIDogKHZhbCA8PCA4KSB8IGhleDJjaHIobGluZWxlbiArIDIpOworfQorCitlbnVtIHBhY2tldF9yZWFkX3N0YXR1cyBwYWNrZXRfcmVhZF93aXRoX3N0YXR1cyhpbnQgZmQsIGNoYXIgKipzcmNfYnVmZmVyLAorCQkJCQkJc2l6ZV90ICpzcmNfbGVuLCBjaGFyICpidWZmZXIsCisJCQkJCQl1bnNpZ25lZCBzaXplLCBpbnQgKnBrdGxlbiwKKwkJCQkJCWludCBvcHRpb25zKQoreworCWludCBsZW47CisJY2hhciBsaW5lbGVuWzRdOworCisJaWYgKGdldF9wYWNrZXRfZGF0YShmZCwgc3JjX2J1ZmZlciwgc3JjX2xlbiwgbGluZWxlbiwgNCwgb3B0aW9ucykgPCAwKSB7CisJCSpwa3RsZW4gPSAtMTsKKwkJcmV0dXJuIFBBQ0tFVF9SRUFEX0VPRjsKKwl9CisKKwlsZW4gPSBwYWNrZXRfbGVuZ3RoKGxpbmVsZW4pOworCisJaWYgKGxlbiA8IDApIHsKKwkJZGllKF8oInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggY2hhcmFjdGVyOiAlLjRzIiksIGxpbmVsZW4pOworCX0gZWxzZSBpZiAoIWxlbikgeworCQlwYWNrZXRfdHJhY2UoIjAwMDAiLCA0LCAwKTsKKwkJKnBrdGxlbiA9IDA7CisJCXJldHVybiBQQUNLRVRfUkVBRF9GTFVTSDsKKwl9IGVsc2UgaWYgKGxlbiA9PSAxKSB7CisJCXBhY2tldF90cmFjZSgiMDAwMSIsIDQsIDApOworCQkqcGt0bGVuID0gMDsKKwkJcmV0dXJuIFBBQ0tFVF9SRUFEX0RFTElNOworCX0gZWxzZSBpZiAobGVuIDwgNCkgeworCQlkaWUoXygicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCAlZCIpLCBsZW4pOworCX0KKworCWxlbiAtPSA0OworCWlmICgodW5zaWduZWQpbGVuID49IHNpemUpCisJCWRpZShfKCJwcm90b2NvbCBlcnJvcjogYmFkIGxpbmUgbGVuZ3RoICVkIiksIGxlbik7CisKKwlpZiAoZ2V0X3BhY2tldF9kYXRhKGZkLCBzcmNfYnVmZmVyLCBzcmNfbGVuLCBidWZmZXIsIGxlbiwgb3B0aW9ucykgPCAwKSB7CisJCSpwa3RsZW4gPSAtMTsKKwkJcmV0dXJuIFBBQ0tFVF9SRUFEX0VPRjsKKwl9CisKKwlpZiAoKG9wdGlvbnMgJiBQQUNLRVRfUkVBRF9DSE9NUF9ORVdMSU5FKSAmJgorCSAgICBsZW4gJiYgYnVmZmVyW2xlbi0xXSA9PSAnXG4nKQorCQlsZW4tLTsKKworCWJ1ZmZlcltsZW5dID0gMDsKKwlwYWNrZXRfdHJhY2UoYnVmZmVyLCBsZW4sIDApOworCisJaWYgKChvcHRpb25zICYgUEFDS0VUX1JFQURfRElFX09OX0VSUl9QQUNLRVQpICYmCisJICAgIHN0YXJ0c193aXRoKGJ1ZmZlciwgIkVSUiAiKSkKKwkJZGllKF8oInJlbW90ZSBlcnJvcjogJXMiKSwgYnVmZmVyICsgNCk7CisKKwkqcGt0bGVuID0gbGVuOworCXJldHVybiBQQUNLRVRfUkVBRF9OT1JNQUw7Cit9CisKK2ludCBwYWNrZXRfcmVhZChpbnQgZmQsIGNoYXIgKipzcmNfYnVmZmVyLCBzaXplX3QgKnNyY19sZW4sCisJCWNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgc2l6ZSwgaW50IG9wdGlvbnMpCit7CisJaW50IHBrdGxlbiA9IC0xOworCisJcGFja2V0X3JlYWRfd2l0aF9zdGF0dXMoZmQsIHNyY19idWZmZXIsIHNyY19sZW4sIGJ1ZmZlciwgc2l6ZSwKKwkJCQkmcGt0bGVuLCBvcHRpb25zKTsKKworCXJldHVybiBwa3RsZW47Cit9CisKK3N0YXRpYyBjaGFyICpwYWNrZXRfcmVhZF9saW5lX2dlbmVyaWMoaW50IGZkLAorCQkJCSAgICAgIGNoYXIgKipzcmMsIHNpemVfdCAqc3JjX2xlbiwKKwkJCQkgICAgICBpbnQgKmRzdF9sZW4pCit7CisJaW50IGxlbiA9IHBhY2tldF9yZWFkKGZkLCBzcmMsIHNyY19sZW4sCisJCQkgICAgICBwYWNrZXRfYnVmZmVyLCBzaXplb2YocGFja2V0X2J1ZmZlciksCisJCQkgICAgICBQQUNLRVRfUkVBRF9DSE9NUF9ORVdMSU5FKTsKKwlpZiAoZHN0X2xlbikKKwkJKmRzdF9sZW4gPSBsZW47CisJcmV0dXJuIChsZW4gPiAwKSA/IHBhY2tldF9idWZmZXIgOiBOVUxMOworfQorCitjaGFyICpwYWNrZXRfcmVhZF9saW5lKGludCBmZCwgaW50ICpsZW5fcCkKK3sKKwlyZXR1cm4gcGFja2V0X3JlYWRfbGluZV9nZW5lcmljKGZkLCBOVUxMLCBOVUxMLCBsZW5fcCk7Cit9CisKK2ludCBwYWNrZXRfcmVhZF9saW5lX2dlbnRseShpbnQgZmQsIGludCAqZHN0X2xlbiwgY2hhciAqKmRzdF9saW5lKQoreworCWludCBsZW4gPSBwYWNrZXRfcmVhZChmZCwgTlVMTCwgTlVMTCwKKwkJCSAgICAgIHBhY2tldF9idWZmZXIsIHNpemVvZihwYWNrZXRfYnVmZmVyKSwKKwkJCSAgICAgIFBBQ0tFVF9SRUFEX0NIT01QX05FV0xJTkV8UEFDS0VUX1JFQURfR0VOVExFX09OX0VPRik7CisJaWYgKGRzdF9sZW4pCisJCSpkc3RfbGVuID0gbGVuOworCWlmIChkc3RfbGluZSkKKwkJKmRzdF9saW5lID0gKGxlbiA+IDApID8gcGFja2V0X2J1ZmZlciA6IE5VTEw7CisJcmV0dXJuIGxlbjsKK30KKworY2hhciAqcGFja2V0X3JlYWRfbGluZV9idWYoY2hhciAqKnNyYywgc2l6ZV90ICpzcmNfbGVuLCBpbnQgKmRzdF9sZW4pCit7CisJcmV0dXJuIHBhY2tldF9yZWFkX2xpbmVfZ2VuZXJpYygtMSwgc3JjLCBzcmNfbGVuLCBkc3RfbGVuKTsKK30KKworc3NpemVfdCByZWFkX3BhY2tldGl6ZWRfdG9fc3RyYnVmKGludCBmZF9pbiwgc3RydWN0IHN0cmJ1ZiAqc2Jfb3V0KQoreworCWludCBwYWNrZXRfbGVuOworCisJc2l6ZV90IG9yaWdfbGVuID0gc2Jfb3V0LT5sZW47CisJc2l6ZV90IG9yaWdfYWxsb2MgPSBzYl9vdXQtPmFsbG9jOworCisJZm9yICg7OykgeworCQlzdHJidWZfZ3JvdyhzYl9vdXQsIExBUkdFX1BBQ0tFVF9EQVRBX01BWCk7CisJCXBhY2tldF9sZW4gPSBwYWNrZXRfcmVhZChmZF9pbiwgTlVMTCwgTlVMTCwKKwkJCS8qIHN0cmJ1Zl9ncm93KCkgYWJvdmUgYWx3YXlzIGFsbG9jYXRlcyBvbmUgZXh0cmEgYnl0ZSB0bworCQkJICogc3RvcmUgYSAnXDAnIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gcGFja2V0X3JlYWQoKQorCQkJICogd3JpdGVzIGEgJ1wwJyBleHRyYSBieXRlIGF0IHRoZSBlbmQsIHRvby4gTGV0IGl0IGtub3cKKwkJCSAqIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSByb29tIGZvciB0aGUgZXh0cmEgYnl0ZS4KKwkJCSAqLworCQkJc2Jfb3V0LT5idWYgKyBzYl9vdXQtPmxlbiwgTEFSR0VfUEFDS0VUX0RBVEFfTUFYKzEsCisJCQlQQUNLRVRfUkVBRF9HRU5UTEVfT05fRU9GKTsKKwkJaWYgKHBhY2tldF9sZW4gPD0gMCkKKwkJCWJyZWFrOworCQlzYl9vdXQtPmxlbiArPSBwYWNrZXRfbGVuOworCX0KKworCWlmIChwYWNrZXRfbGVuIDwgMCkgeworCQlpZiAob3JpZ19hbGxvYyA9PSAwKQorCQkJc3RyYnVmX3JlbGVhc2Uoc2Jfb3V0KTsKKwkJZWxzZQorCQkJc3RyYnVmX3NldGxlbihzYl9vdXQsIG9yaWdfbGVuKTsKKwkJcmV0dXJuIHBhY2tldF9sZW47CisJfQorCXJldHVybiBzYl9vdXQtPmxlbiAtIG9yaWdfbGVuOworfQorCitpbnQgcmVjdl9zaWRlYmFuZChjb25zdCBjaGFyICptZSwgaW50IGluX3N0cmVhbSwgaW50IG91dCkKK3sKKwljaGFyIGJ1ZltMQVJHRV9QQUNLRVRfTUFYICsgMV07CisJaW50IGxlbjsKKwlzdHJ1Y3Qgc3RyYnVmIHNjcmF0Y2ggPSBTVFJCVUZfSU5JVDsKKwllbnVtIHNpZGViYW5kX3R5cGUgc2lkZWJhbmRfdHlwZTsKKworCXdoaWxlICgxKSB7CisJCWxlbiA9IHBhY2tldF9yZWFkKGluX3N0cmVhbSwgTlVMTCwgTlVMTCwgYnVmLCBMQVJHRV9QQUNLRVRfTUFYLAorCQkJCSAgMCk7CisJCWlmICghZGVtdWx0aXBsZXhfc2lkZWJhbmQobWUsIGJ1ZiwgbGVuLCAwLCAmc2NyYXRjaCwKKwkJCQkJICAmc2lkZWJhbmRfdHlwZSkpCisJCQljb250aW51ZTsKKwkJc3dpdGNoIChzaWRlYmFuZF90eXBlKSB7CisJCWNhc2UgU0lERUJBTkRfUFJJTUFSWToKKwkJCXdyaXRlX29yX2RpZShvdXQsIGJ1ZiArIDEsIGxlbiAtIDEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6IC8qIGVycm9yczogbWVzc2FnZSBhbHJlYWR5IHdyaXR0ZW4gKi8KKwkJCXJldHVybiBzaWRlYmFuZF90eXBlOworCQl9CisJfQorfQorCisvKiBQYWNrZXQgUmVhZGVyIEZ1bmN0aW9ucyAqLwordm9pZCBwYWNrZXRfcmVhZGVyX2luaXQoc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlciwgaW50IGZkLAorCQkJY2hhciAqc3JjX2J1ZmZlciwgc2l6ZV90IHNyY19sZW4sCisJCQlpbnQgb3B0aW9ucykKK3sKKwltZW1zZXQocmVhZGVyLCAwLCBzaXplb2YoKnJlYWRlcikpOworCisJcmVhZGVyLT5mZCA9IGZkOworCXJlYWRlci0+c3JjX2J1ZmZlciA9IHNyY19idWZmZXI7CisJcmVhZGVyLT5zcmNfbGVuID0gc3JjX2xlbjsKKwlyZWFkZXItPmJ1ZmZlciA9IHBhY2tldF9idWZmZXI7CisJcmVhZGVyLT5idWZmZXJfc2l6ZSA9IHNpemVvZihwYWNrZXRfYnVmZmVyKTsKKwlyZWFkZXItPm9wdGlvbnMgPSBvcHRpb25zOworCXJlYWRlci0+bWUgPSAiZ2l0IjsKK30KKworZW51bSBwYWNrZXRfcmVhZF9zdGF0dXMgcGFja2V0X3JlYWRlcl9yZWFkKHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZWFkZXIpCit7CisJc3RydWN0IHN0cmJ1ZiBzY3JhdGNoID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAocmVhZGVyLT5saW5lX3BlZWtlZCkgeworCQlyZWFkZXItPmxpbmVfcGVla2VkID0gMDsKKwkJcmV0dXJuIHJlYWRlci0+c3RhdHVzOworCX0KKworCS8qCisJICogQ29uc3VtZSBhbGwgcHJvZ3Jlc3MgcGFja2V0cyB1bnRpbCBhIHByaW1hcnkgcGF5bG9hZCBwYWNrZXQgaXMKKwkgKiByZWNlaXZlZAorCSAqLworCXdoaWxlICgxKSB7CisJCWVudW0gc2lkZWJhbmRfdHlwZSBzaWRlYmFuZF90eXBlOworCQlyZWFkZXItPnN0YXR1cyA9IHBhY2tldF9yZWFkX3dpdGhfc3RhdHVzKHJlYWRlci0+ZmQsCisJCQkJCQkJICZyZWFkZXItPnNyY19idWZmZXIsCisJCQkJCQkJICZyZWFkZXItPnNyY19sZW4sCisJCQkJCQkJIHJlYWRlci0+YnVmZmVyLAorCQkJCQkJCSByZWFkZXItPmJ1ZmZlcl9zaXplLAorCQkJCQkJCSAmcmVhZGVyLT5wa3RsZW4sCisJCQkJCQkJIHJlYWRlci0+b3B0aW9ucyk7CisJCWlmICghcmVhZGVyLT51c2Vfc2lkZWJhbmQpCisJCQlicmVhazsKKwkJaWYgKGRlbXVsdGlwbGV4X3NpZGViYW5kKHJlYWRlci0+bWUsIHJlYWRlci0+YnVmZmVyLAorCQkJCQkgcmVhZGVyLT5wa3RsZW4sIDEsICZzY3JhdGNoLAorCQkJCQkgJnNpZGViYW5kX3R5cGUpKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHJlYWRlci0+c3RhdHVzID09IFBBQ0tFVF9SRUFEX05PUk1BTCkKKwkJLyogU2tpcCB0aGUgc2lkZWJhbmQgZGVzaWduYXRvciBpZiBzaWRlYmFuZCBpcyB1c2VkICovCisJCXJlYWRlci0+bGluZSA9IHJlYWRlci0+dXNlX3NpZGViYW5kID8KKwkJCXJlYWRlci0+YnVmZmVyICsgMSA6IHJlYWRlci0+YnVmZmVyOworCWVsc2UKKwkJcmVhZGVyLT5saW5lID0gTlVMTDsKKworCXJldHVybiByZWFkZXItPnN0YXR1czsKK30KKworZW51bSBwYWNrZXRfcmVhZF9zdGF0dXMgcGFja2V0X3JlYWRlcl9wZWVrKHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZWFkZXIpCit7CisJLyogT25seSBhbGxvdyBwZWVraW5nIGEgc2luZ2xlIGxpbmUgKi8KKwlpZiAocmVhZGVyLT5saW5lX3BlZWtlZCkKKwkJcmV0dXJuIHJlYWRlci0+c3RhdHVzOworCisJLyogUGVlayBhIGxpbmUgYnkgcmVhZGluZyBpdCBhbmQgc2V0dGluZyBwZWVrZWQgZmxhZyAqLworCXBhY2tldF9yZWFkZXJfcmVhZChyZWFkZXIpOworCXJlYWRlci0+bGluZV9wZWVrZWQgPSAxOworCXJldHVybiByZWFkZXItPnN0YXR1czsKK30KKwordm9pZCBwYWNrZXRfd3JpdGVyX2luaXQoc3RydWN0IHBhY2tldF93cml0ZXIgKndyaXRlciwgaW50IGRlc3RfZmQpCit7CisJd3JpdGVyLT5kZXN0X2ZkID0gZGVzdF9mZDsKKwl3cml0ZXItPnVzZV9zaWRlYmFuZCA9IDA7Cit9CisKK3ZvaWQgcGFja2V0X3dyaXRlcl93cml0ZShzdHJ1Y3QgcGFja2V0X3dyaXRlciAqd3JpdGVyLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXBhY2tldF93cml0ZV9mbXRfMSh3cml0ZXItPmRlc3RfZmQsIDAsCisJCQkgICB3cml0ZXItPnVzZV9zaWRlYmFuZCA/ICJcMDAxIiA6ICIiLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKK30KKwordm9pZCBwYWNrZXRfd3JpdGVyX2Vycm9yKHN0cnVjdCBwYWNrZXRfd3JpdGVyICp3cml0ZXIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJcGFja2V0X3dyaXRlX2ZtdF8xKHdyaXRlci0+ZGVzdF9mZCwgMCwKKwkJCSAgIHdyaXRlci0+dXNlX3NpZGViYW5kID8gIlwwMDMiIDogIkVSUiAiLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKK30KKwordm9pZCBwYWNrZXRfd3JpdGVyX2RlbGltKHN0cnVjdCBwYWNrZXRfd3JpdGVyICp3cml0ZXIpCit7CisJcGFja2V0X2RlbGltKHdyaXRlci0+ZGVzdF9mZCk7Cit9CisKK3ZvaWQgcGFja2V0X3dyaXRlcl9mbHVzaChzdHJ1Y3QgcGFja2V0X3dyaXRlciAqd3JpdGVyKQoreworCXBhY2tldF9mbHVzaCh3cml0ZXItPmRlc3RfZmQpOworfQpkaWZmIC0tZ2l0IGEvcGt0LWxpbmUuaCBiL3BrdC1saW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmM2EwZAotLS0gL2Rldi9udWxsCisrKyBiL3BrdC1saW5lLmgKQEAgLTAsMCArMSwyMjEgQEAKKyNpZm5kZWYgUEtUTElORV9ICisjZGVmaW5lIFBLVExJTkVfSAorCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAic2lkZWJhbmQuaCIKKworLyoKKyAqIFdyaXRlIGEgcGFja2V0aXplZCBzdHJlYW0sIHdoZXJlIGVhY2ggbGluZSBpcyBwcmVjZWRlZCBieQorICogaXRzIGxlbmd0aCAoaW5jbHVkaW5nIHRoZSBoZWFkZXIpIGFzIGEgNC1ieXRlIGhleCBudW1iZXIuCisgKiBBIGxlbmd0aCBvZiAnemVybycgbWVhbnMgZW5kIG9mIHN0cmVhbSAoYW5kIGEgbGVuZ3RoIG9mIDEtMworICogd291bGQgYmUgYW4gZXJyb3IpLgorICoKKyAqIFRoaXMgaXMgYWxsIHByZXR0eSBzdHVwaWQsIGJ1dCB3ZSB1c2UgdGhpcyBwYWNrZXRpemVkIGxpbmUKKyAqIGZvcm1hdCB0byBtYWtlIGEgc3RyZWFtaW5nIGZvcm1hdCBwb3NzaWJsZSB3aXRob3V0IGV2ZXIKKyAqIG92ZXItcnVubmluZyB0aGUgcmVhZCBidWZmZXJzLiBUaGF0IHdheSB3ZSdsbCBuZXZlciByZWFkCisgKiBpbnRvIHdoYXQgbWlnaHQgYmUgdGhlIHBhY2sgZGF0YSAod2hpY2ggc2hvdWxkIGdvIHRvIGFub3RoZXIKKyAqIHByb2Nlc3MgZW50aXJlbHkpLgorICoKKyAqIFRoZSB3cml0aW5nIHNpZGUgY291bGQgdXNlIHN0ZGlvLCBidXQgc2luY2UgdGhlIHJlYWRpbmcKKyAqIHNpZGUgY2FuJ3QsIHdlIHN0YXkgd2l0aCBwdXJlIHJlYWQvd3JpdGUgaW50ZXJmYWNlcy4KKyAqLwordm9pZCBwYWNrZXRfZmx1c2goaW50IGZkKTsKK3ZvaWQgcGFja2V0X2RlbGltKGludCBmZCk7Cit2b2lkIHBhY2tldF93cml0ZV9mbXQoaW50IGZkLCBjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7Cit2b2lkIHBhY2tldF9idWZfZmx1c2goc3RydWN0IHN0cmJ1ZiAqYnVmKTsKK3ZvaWQgcGFja2V0X2J1Zl9kZWxpbShzdHJ1Y3Qgc3RyYnVmICpidWYpOwordm9pZCBzZXRfcGFja2V0X2hlYWRlcihjaGFyICpidWYsIGludCBzaXplKTsKK3ZvaWQgcGFja2V0X3dyaXRlKGludCBmZF9vdXQsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpOwordm9pZCBwYWNrZXRfYnVmX3dyaXRlKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwordm9pZCBwYWNrZXRfYnVmX3dyaXRlX2xlbihzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IHBhY2tldF9mbHVzaF9nZW50bHkoaW50IGZkKTsKK2ludCBwYWNrZXRfd3JpdGVfZm10X2dlbnRseShpbnQgZmQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK2ludCB3cml0ZV9wYWNrZXRpemVkX2Zyb21fZmQoaW50IGZkX2luLCBpbnQgZmRfb3V0KTsKK2ludCB3cml0ZV9wYWNrZXRpemVkX2Zyb21fYnVmKGNvbnN0IGNoYXIgKnNyY19pbiwgc2l6ZV90IGxlbiwgaW50IGZkX291dCk7CisKKy8qCisgKiBSZWFkIGEgcGFja2V0aXplZCBsaW5lIGludG8gdGhlIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCBzaXplIGJ5dGVzCisgKiBsb25nLiBUaGUgcmV0dXJuIHZhbHVlIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaW50byB0aGUgYnVmZmVyLgorICoKKyAqIElmIHNyY19idWZmZXIgYW5kICpzcmNfYnVmZmVyIGFyZSBub3QgTlVMTCwgaXQgc2hvdWxkIHBvaW50IHRvIGEgYnVmZmVyCisgKiBjb250YWluaW5nIHRoZSBwYWNrZXQgZGF0YSB0byBwYXJzZSwgb2YgYXQgbGVhc3QgKnNyY19sZW4gYnl0ZXMuICBBZnRlciB0aGUKKyAqIGZ1bmN0aW9uIHJldHVybnMsIHNyY19idWYgd2lsbCBiZSBpbmNyZW1lbnRlZCBhbmQgc3JjX2xlbiBkZWNyZW1lbnRlZCBieSB0aGUKKyAqIG51bWJlciBvZiBieXRlcyBjb25zdW1lZC4KKyAqCisgKiBJZiBzcmNfYnVmZmVyIChvciAqc3JjX2J1ZmZlcikgaXMgTlVMTCwgdGhlbiBkYXRhIGlzIHJlYWQgZnJvbSB0aGUKKyAqIGRlc2NyaXB0b3IgImZkIi4KKyAqCisgKiBJZiBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gUEFDS0VUX1JFQURfR0VOVExFX09OX0VPRiwgd2Ugd2lsbCBkaWUgdW5kZXIgYW55CisgKiBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogICAxLiBSZWFkIGVycm9yIGZyb20gZGVzY3JpcHRvci4KKyAqCisgKiAgIDIuIFByb3RvY29sIGVycm9yIGZyb20gdGhlIHJlbW90ZSAoZS5nLiwgYm9ndXMgbGVuZ3RoIGNoYXJhY3RlcnMpLgorICoKKyAqICAgMy4gUmVjZWl2aW5nIGEgcGFja2V0IGxhcmdlciB0aGFuICJzaXplIiBieXRlcy4KKyAqCisgKiAgIDQuIFRydW5jYXRlZCBvdXRwdXQgZnJvbSB0aGUgcmVtb3RlIChlLmcuLCB3ZSBleHBlY3RlZCBhIHBhY2tldCBidXQgZ290CisgKiAgICAgIEVPRiwgb3Igd2UgZ290IGEgcGFydGlhbCBwYWNrZXQgZm9sbG93ZWQgYnkgRU9GKS4KKyAqCisgKiBJZiBvcHRpb25zIGRvZXMgY29udGFpbiBQQUNLRVRfUkVBRF9HRU5UTEVfT05fRU9GLCB3ZSB3aWxsIG5vdCBkaWUgb24KKyAqIGNvbmRpdGlvbiA0ICh0cnVuY2F0ZWQgaW5wdXQpLCBidXQgaW5zdGVhZCByZXR1cm4gLTEuIEhvd2V2ZXIsIHdlIHdpbGwgc3RpbGwKKyAqIGRpZSBmb3IgdGhlIG90aGVyIDMgY29uZGl0aW9ucy4KKyAqCisgKiBJZiBvcHRpb25zIGNvbnRhaW5zIFBBQ0tFVF9SRUFEX0NIT01QX05FV0xJTkUsIGEgdHJhaWxpbmcgbmV3bGluZSAoaWYKKyAqIHByZXNlbnQpIGlzIHJlbW92ZWQgZnJvbSB0aGUgYnVmZmVyIGJlZm9yZSByZXR1cm5pbmcuCisgKgorICogSWYgb3B0aW9ucyBjb250YWlucyBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCwgaXQgZGllcyB3aGVuIGl0IHNlZXMgYW4KKyAqIEVSUiBwYWNrZXQuCisgKi8KKyNkZWZpbmUgUEFDS0VUX1JFQURfR0VOVExFX09OX0VPRiAgICAgKDF1PDwwKQorI2RlZmluZSBQQUNLRVRfUkVBRF9DSE9NUF9ORVdMSU5FICAgICAoMXU8PDEpCisjZGVmaW5lIFBBQ0tFVF9SRUFEX0RJRV9PTl9FUlJfUEFDS0VUICgxdTw8MikKK2ludCBwYWNrZXRfcmVhZChpbnQgZmQsIGNoYXIgKipzcmNfYnVmZmVyLCBzaXplX3QgKnNyY19sZW4sIGNoYXIKKwkJKmJ1ZmZlciwgdW5zaWduZWQgc2l6ZSwgaW50IG9wdGlvbnMpOworCisvKgorICogUmVhZCBhIHBhY2tldGl6ZWQgbGluZSBpbnRvIGEgYnVmZmVyIGxpa2UgdGhlICdwYWNrZXRfcmVhZCgpJyBmdW5jdGlvbiBidXQKKyAqIHJldHVybnMgYW4gJ2VudW0gcGFja2V0X3JlYWRfc3RhdHVzJyB3aGljaCBpbmRpY2F0ZXMgdGhlIHN0YXR1cyBvZiB0aGUgcmVhZC4KKyAqIFRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCB3aWxsIGJlIGFzc2lnbmVkIHRvICpwa3RsZW4gaWYgdGhlIHN0YXR1cyBvZiB0aGUKKyAqIHJlYWQgd2FzICdQQUNLRVRfUkVBRF9OT1JNQUwnLgorICovCitlbnVtIHBhY2tldF9yZWFkX3N0YXR1cyB7CisJUEFDS0VUX1JFQURfRU9GLAorCVBBQ0tFVF9SRUFEX05PUk1BTCwKKwlQQUNLRVRfUkVBRF9GTFVTSCwKKwlQQUNLRVRfUkVBRF9ERUxJTSwKK307CitlbnVtIHBhY2tldF9yZWFkX3N0YXR1cyBwYWNrZXRfcmVhZF93aXRoX3N0YXR1cyhpbnQgZmQsIGNoYXIgKipzcmNfYnVmZmVyLAorCQkJCQkJc2l6ZV90ICpzcmNfbGVuLCBjaGFyICpidWZmZXIsCisJCQkJCQl1bnNpZ25lZCBzaXplLCBpbnQgKnBrdGxlbiwKKwkJCQkJCWludCBvcHRpb25zKTsKKworLyoKKyAqIENvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHBhY2tldF9yZWFkIHRoYXQgaXMgbm90IGdlbnRsZSwgYW5kIHNldHMgdGhlCisgKiBDSE9NUF9ORVdMSU5FIG9wdGlvbi4gVGhlIHJldHVybiB2YWx1ZSBpcyBOVUxMIGZvciBhIGZsdXNoIHBhY2tldCwKKyAqIGFuZCBvdGhlcndpc2UgcG9pbnRzIHRvIGEgc3RhdGljIGJ1ZmZlciAodGhhdCBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkKKyAqIHN1YnNlcXVlbnQgY2FsbHMpLiBJZiB0aGUgc2l6ZSBwYXJhbWV0ZXIgaXMgbm90IE5VTEwsIHRoZSBsZW5ndGggb2YgdGhlCisgKiBwYWNrZXQgaXMgd3JpdHRlbiB0byBpdC4KKyAqLworY2hhciAqcGFja2V0X3JlYWRfbGluZShpbnQgZmQsIGludCAqc2l6ZSk7CisKKy8qCisgKiBDb252ZW5pZW5jZSB3cmFwcGVyIGZvciBwYWNrZXRfcmVhZCB0aGF0IHNldHMgdGhlIFBBQ0tFVF9SRUFEX0dFTlRMRV9PTl9FT0YKKyAqIGFuZCBDSE9NUF9ORVdMSU5FIG9wdGlvbnMuIFRoZSByZXR1cm4gdmFsdWUgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAqIHJlYWQgaW50byB0aGUgYnVmZmVyIG9yIC0xIG9uIHRydW5jYXRlZCBpbnB1dC4gSWYgdGhlICpkc3RfbGluZSBwYXJhbWV0ZXIKKyAqIGlzIG5vdCBOVUxMIGl0IHdpbGwgcmV0dXJuIE5VTEwgZm9yIGEgZmx1c2ggcGFja2V0IG9yIHdoZW4gdGhlIG51bWJlciBvZgorICogYnl0ZXMgY29waWVkIGlzIHplcm8gYW5kIG90aGVyd2lzZSBwb2ludHMgdG8gYSBzdGF0aWMgYnVmZmVyICh0aGF0IG1heSBiZQorICogb3ZlcndyaXR0ZW4gYnkgc3Vic2VxdWVudCBjYWxscykuIElmIHRoZSBzaXplIHBhcmFtZXRlciBpcyBub3QgTlVMTCwgdGhlCisgKiBsZW5ndGggb2YgdGhlIHBhY2tldCBpcyB3cml0dGVuIHRvIGl0LgorICovCitpbnQgcGFja2V0X3JlYWRfbGluZV9nZW50bHkoaW50IGZkLCBpbnQgKnNpemUsIGNoYXIgKipkc3RfbGluZSk7CisKKy8qCisgKiBTYW1lIGFzIHBhY2tldF9yZWFkX2xpbmUsIGJ1dCByZWFkIGZyb20gYSBidWYgcmF0aGVyIHRoYW4gYSBkZXNjcmlwdG9yOworICogc2VlIHBhY2tldF9yZWFkIGZvciBkZXRhaWxzIG9uIGhvdyBzcmNfKiBpcyB1c2VkLgorICovCitjaGFyICpwYWNrZXRfcmVhZF9saW5lX2J1ZihjaGFyICoqc3JjX2J1Ziwgc2l6ZV90ICpzcmNfbGVuLCBpbnQgKnNpemUpOworCisvKgorICogUmVhZHMgYSBzdHJlYW0gb2YgdmFyaWFibGUgc2l6ZWQgcGFja2V0cyB1bnRpbCBhIGZsdXNoIHBhY2tldCBpcyBkZXRlY3RlZC4KKyAqLworc3NpemVfdCByZWFkX3BhY2tldGl6ZWRfdG9fc3RyYnVmKGludCBmZF9pbiwgc3RydWN0IHN0cmJ1ZiAqc2Jfb3V0KTsKKworLyoKKyAqIFJlY2VpdmUgbXVsdGlwbGV4ZWQgb3V0cHV0IHN0cmVhbSBvdmVyIGdpdCBuYXRpdmUgcHJvdG9jb2wuCisgKiBpbl9zdHJlYW0gaXMgdGhlIGlucHV0IHN0cmVhbSBmcm9tIHRoZSByZW1vdGUsIHdoaWNoIGNhcnJpZXMgZGF0YQorICogaW4gcGt0X2xpbmUgZm9ybWF0IHdpdGggYmFuZCBkZXNpZ25hdG9yLiAgRGVtdWx0aXBsZXggaXQgaW50byBvdXQKKyAqIGFuZCBlcnIgYW5kIHJldHVybiBlcnJvciBhcHByb3ByaWF0ZWx5LiAgQmFuZCAjMSBjYXJyaWVzIHRoZQorICogcHJpbWFyeSBwYXlsb2FkLiAgVGhpbmdzIGNvbWluZyBvdmVyIGJhbmQgIzIgaXMgbm90IG5lY2Vzc2FyaWx5CisgKiBlcnJvcjsgdGhleSBhcmUgdXN1YWxseSBpbmZvcm1hdGl2ZSBtZXNzYWdlIG9uIHRoZSBzdGFuZGFyZCBlcnJvcgorICogc3RyZWFtLCBha2EgInZlcmJvc2UiKS4gIEEgbWVzc2FnZSBvdmVyIGJhbmQgIzMgaXMgYSBzaWduYWwgdGhhdAorICogdGhlIHJlbW90ZSBkaWVkIHVuZXhwZWN0ZWRseS4gIEEgZmx1c2goKSBjb25jbHVkZXMgdGhlIHN0cmVhbS4KKyAqCisgKiBSZXR1cm5zIFNJREVCQU5EX0ZMVVNIIHVwb24gYSBub3JtYWwgY29uY2x1c2lvbiwgYW5kIFNJREVCQU5EX1BST1RPQ09MX0VSUk9SCisgKiBvciBTSURFQkFORF9SRU1PVEVfRVJST1IgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KK2ludCByZWN2X3NpZGViYW5kKGNvbnN0IGNoYXIgKm1lLCBpbnQgaW5fc3RyZWFtLCBpbnQgb3V0KTsKKworc3RydWN0IHBhY2tldF9yZWFkZXIgeworCS8qIHNvdXJjZSBmaWxlIGRlc2NyaXB0b3IgKi8KKwlpbnQgZmQ7CisKKwkvKiBzb3VyY2UgYnVmZmVyIGFuZCBpdHMgc2l6ZSAqLworCWNoYXIgKnNyY19idWZmZXI7CisJc2l6ZV90IHNyY19sZW47CisKKwkvKiBidWZmZXIgdGhhdCBwa3QtbGluZXMgYXJlIHJlYWQgaW50byBhbmQgaXRzIHNpemUgKi8KKwljaGFyICpidWZmZXI7CisJdW5zaWduZWQgYnVmZmVyX3NpemU7CisKKwkvKiBvcHRpb25zIHRvIGJlIHVzZWQgZHVyaW5nIHJlYWRzICovCisJaW50IG9wdGlvbnM7CisKKwkvKiBzdGF0dXMgb2YgdGhlIGxhc3QgcmVhZCAqLworCWVudW0gcGFja2V0X3JlYWRfc3RhdHVzIHN0YXR1czsKKworCS8qIGxlbmd0aCBvZiBkYXRhIHJlYWQgZHVyaW5nIHRoZSBsYXN0IHJlYWQgKi8KKwlpbnQgcGt0bGVuOworCisJLyogdGhlIGxhc3QgbGluZSByZWFkICovCisJY29uc3QgY2hhciAqbGluZTsKKworCS8qIGluZGljYXRlcyBpZiBhIGxpbmUgaGFzIGJlZW4gcGVla2VkICovCisJaW50IGxpbmVfcGVla2VkOworCisJdW5zaWduZWQgdXNlX3NpZGViYW5kIDogMTsKKwljb25zdCBjaGFyICptZTsKK307CisKKy8qCisgKiBJbml0aWFsaXplIGEgJ3N0cnVjdCBwYWNrZXRfcmVhZGVyJyBvYmplY3Qgd2hpY2ggaXMgYW4KKyAqIGFic3RyYWN0aW9uIGFyb3VuZCB0aGUgJ3BhY2tldF9yZWFkX3dpdGhfc3RhdHVzKCknIGZ1bmN0aW9uLgorICovCit2b2lkIHBhY2tldF9yZWFkZXJfaW5pdChzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVhZGVyLCBpbnQgZmQsCisJCQljaGFyICpzcmNfYnVmZmVyLCBzaXplX3Qgc3JjX2xlbiwKKwkJCWludCBvcHRpb25zKTsKKworLyoKKyAqIFBlcmZvcm0gYSBwYWNrZXQgcmVhZCBhbmQgcmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIHJlYWQuCisgKiBUaGUgdmFsdWVzIG9mICdwa3RsZW4nIGFuZCAnbGluZScgYXJlIHVwZGF0ZWQgYmFzZWQgb24gdGhlIHN0YXR1cyBvZiB0aGUKKyAqIHJlYWQgYXMgZm9sbG93czoKKyAqCisgKiBQQUNLRVRfUkVBRF9FUlJPUjogJ3BrdGxlbicgaXMgc2V0IHRvICctMScgYW5kICdsaW5lJyBpcyBzZXQgdG8gTlVMTAorICogUEFDS0VUX1JFQURfTk9STUFMOiAncGt0bGVuJyBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiBieXRlcyByZWFkCisgKgkJICAgICAgICdsaW5lJyBpcyBzZXQgdG8gcG9pbnQgYXQgdGhlIHJlYWQgbGluZQorICogUEFDS0VUX1JFQURfRkxVU0g6ICdwa3RsZW4nIGlzIHNldCB0byAnMCcgYW5kICdsaW5lJyBpcyBzZXQgdG8gTlVMTAorICovCitlbnVtIHBhY2tldF9yZWFkX3N0YXR1cyBwYWNrZXRfcmVhZGVyX3JlYWQoc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlcik7CisKKy8qCisgKiBQZWVrIHRoZSBuZXh0IHBhY2tldCBsaW5lIHdpdGhvdXQgY29uc3VtaW5nIGl0IGFuZCByZXR1cm4gdGhlIHN0YXR1cy4KKyAqIFRoZSBuZXh0IGNhbGwgdG8gJ3BhY2tldF9yZWFkZXJfcmVhZCgpJyB3aWxsIHBlcmZvcm0gYSByZWFkIG9mIHRoZSBzYW1lIGxpbmUKKyAqIHRoYXQgd2FzIHBlZWtlZCwgY29uc3VtaW5nIHRoZSBsaW5lLgorICoKKyAqIFBlZWtpbmcgbXVsdGlwbGUgdGltZXMgd2l0aG91dCBjYWxsaW5nICdwYWNrZXRfcmVhZGVyX3JlYWQoKScgd2lsbCByZXR1cm4KKyAqIHRoZSBzYW1lIHJlc3VsdC4KKyAqLworZW51bSBwYWNrZXRfcmVhZF9zdGF0dXMgcGFja2V0X3JlYWRlcl9wZWVrKHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZWFkZXIpOworCisjZGVmaW5lIERFRkFVTFRfUEFDS0VUX01BWCAxMDAwCisjZGVmaW5lIExBUkdFX1BBQ0tFVF9NQVggNjU1MjAKKyNkZWZpbmUgTEFSR0VfUEFDS0VUX0RBVEFfTUFYIChMQVJHRV9QQUNLRVRfTUFYIC0gNCkKK2V4dGVybiBjaGFyIHBhY2tldF9idWZmZXJbTEFSR0VfUEFDS0VUX01BWF07CisKK3N0cnVjdCBwYWNrZXRfd3JpdGVyIHsKKwlpbnQgZGVzdF9mZDsKKwl1bnNpZ25lZCB1c2Vfc2lkZWJhbmQgOiAxOworfTsKKwordm9pZCBwYWNrZXRfd3JpdGVyX2luaXQoc3RydWN0IHBhY2tldF93cml0ZXIgKndyaXRlciwgaW50IGRlc3RfZmQpOworCisvKiBUaGVzZSBmdW5jdGlvbnMgZGllIHVwb24gZmFpbHVyZS4gKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCit2b2lkIHBhY2tldF93cml0ZXJfd3JpdGUoc3RydWN0IHBhY2tldF93cml0ZXIgKndyaXRlciwgY29uc3QgY2hhciAqZm10LCAuLi4pOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKK3ZvaWQgcGFja2V0X3dyaXRlcl9lcnJvcihzdHJ1Y3QgcGFja2V0X3dyaXRlciAqd3JpdGVyLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkIHBhY2tldF93cml0ZXJfZGVsaW0oc3RydWN0IHBhY2tldF93cml0ZXIgKndyaXRlcik7Cit2b2lkIHBhY2tldF93cml0ZXJfZmx1c2goc3RydWN0IHBhY2tldF93cml0ZXIgKndyaXRlcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcG8vLmdpdGlnbm9yZSBiL3BvLy5naXRpZ25vcmUKaW5kZXggYTg5Y2Y0NC4uNzk2Yjk2ZCAxMDA2NDQKLS0tIGEvcG8vLmdpdGlnbm9yZQorKysgYi9wby8uZ2l0aWdub3JlCkBAIC0xLDIgKzEgQEAKLSoubXNnCi0qfgorL2J1aWxkCmRpZmYgLS1naXQgYS9wby9SRUFETUUgYi9wby9SRUFETUUKaW5kZXggMjUxNGJjMi4uMDc1OTVkMyAxMDA2NDQKLS0tIGEvcG8vUkVBRE1FCisrKyBiL3BvL1JFQURNRQpAQCAtMSwyNTEgKzEsMzA2IEBACi1Mb2NhbGl6aW5nIGdpdC1ndWkgZm9yIHlvdXIgbGFuZ3VhZ2UKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29yZSBHSVQgVHJhbnNsYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT0KIAotVGhpcyBzaG9ydCBub3RlIGlzIHRvIGhlbHAgeW91LCB3aG8gcmVhZHMgYW5kIHdyaXRlcyBFbmdsaXNoIGFuZCB5b3VyCi1vd24gbGFuZ3VhZ2UsIGhlbHAgdXMgZ2V0dGluZyBnaXQtZ3VpIGxvY2FsaXplZCBmb3IgbW9yZSBsYW5ndWFnZXMuICBJdAotZG9lcyBub3QgdHJ5IHRvIGJlIGEgY29tcHJlaGVuc2l2ZSBtYW51YWwgb2YgR05VIGdldHRleHQsIHdoaWNoIGlzIHRoZQotaTE4biBmcmFtZXdvcmsgd2UgdXNlLCBidXQgdHJpZXMgdG8gaGVscCB5b3UgZ2V0IHN0YXJ0ZWQgYnkgY292ZXJpbmcgdGhlCi1iYXNpY3MgYW5kIGhvdyBpdCBpcyB1c2VkIGluIHRoaXMgcHJvamVjdC4KK1RoaXMgZGlyZWN0b3J5IGhvbGRzIHRoZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBjb3JlIG9mIEdpdC4gVGhpcyBkb2N1bWVudAorZGVzY3JpYmVzIGhvdyB5b3UgY2FuIGNvbnRyaWJ1dGUgdG8gdGhlIGVmZm9ydCBvZiBlbmhhbmNpbmcgdGhlIGxhbmd1YWdlCitjb3ZlcmFnZSBhbmQgbWFpbnRhaW5pbmcgdGhlIHRyYW5zbGF0aW9uLgogCi0xLiBHZXR0aW5nIHN0YXJ0ZWQuCitUaGUgbG9jYWxpemF0aW9uIChsMTBuKSBjb29yZGluYXRvciwgSmlhbmcgWGluIDx3b3JsZGhlbGxvLm5ldEBnbWFpbC5jb20+LAorY29vcmRpbmF0ZXMgb3VyIGxvY2FsaXphdGlvbiBlZmZvcnQgaW4gdGhlIGwxMCBjb29yZGluYXRvciByZXBvc2l0b3J5OgogCi1Zb3Ugd291bGQgZmlyc3QgbmVlZCB0byBoYXZlIGEgd29ya2luZyAiZ2l0Ii4gIFlvdXIgZGlzdHJpYnV0aW9uIG1heQotaGF2ZSBpdCBhcyAiZ2l0LWNvcmUiIHBhY2thZ2UgKGRvIG5vdCBnZXQgIkdOVSBJbnRlcmFjdGl2ZSBUb29scyIgLS0KLXRoYXQgaXMgYSBkaWZmZXJlbnQgImdpdCIpLiAgWW91IHdvdWxkIGFsc28gbmVlZCBHTlUgZ2V0dGV4dCB0b29sY2hhaW4KLXRvIHRlc3QgdGhlIHJlc3VsdGluZyB0cmFuc2xhdGlvbiBvdXQuICBBbHRob3VnaCB5b3UgY2FuIHdvcmsgb24gbWVzc2FnZQotdHJhbnNsYXRpb24gZmlsZXMgd2l0aCBhIHJlZ3VsYXIgdGV4dCBlZGl0b3IsIGl0IGlzIGEgZ29vZCBpZGVhIHRvIGhhdmUKLXNwZWNpYWxpemVkIHNvLWNhbGxlZCAicG8gZmlsZSBlZGl0b3JzIiAoZS5nLiBlbWFjcyBwby1tb2RlLCBLQmFiZWwsCi1wb2VkaXQsIEdUcmFuc2xhdG9yIC0tLSBhbnkgb2YgdGhlbSB3b3VsZCB3b3JrIHdlbGwpLiAgUGxlYXNlIGluc3RhbGwKLXRoZW0uCisgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQtbDEwbi9naXQtcG8vCiAKLVlvdSB3b3VsZCB0aGVuIG5lZWQgdG8gY2xvbmUgdGhlIGdpdC1ndWkgcHJvamVjdCByZXBvc2l0b3J5IGFuZCBjcmVhdGUKLWEgZmVhdHVyZSBicmFuY2ggdG8gYmVnaW4gd29ya2luZzoKLQotCSQgZ2l0IGNsb25lIGdpdDovL3JlcG8ub3IuY3ovZ2l0LWd1aS5naXQKLQkkIGNkIGdpdC1ndWkuZ2l0Ci0JJCBnaXQgY2hlY2tvdXQgLWIgbXktdHJhbnNsYXRpb24KLQotVGhlICJnaXQgY2hlY2tvdXQiIGNvbW1hbmQgY3JlYXRlcyBhIG5ldyBicmFuY2ggdG8ga2VlcCB5b3VyIHdvcmsKLWlzb2xhdGVkIGFuZCB0byBtYWtlIGl0IHNpbXBsZSB0byBwb3N0IHlvdXIgcGF0Y2ggc2VyaWVzIHdoZW4KLWNvbXBsZXRlZC4gIFlvdSB3aWxsIGJlIHdvcmtpbmcgb24gdGhpcyBicmFuY2guCitUaGUgdHdvIGNoYXJhY3RlciBsYW5ndWFnZSB0cmFuc2xhdGlvbiBjb2RlcyBhcmUgZGVmaW5lZCBieSBJU09fNjM5LTEsIGFzCitzdGF0ZWQgaW4gdGhlIGdldHRleHQoMSkgZnVsbCBtYW51YWwsIGFwcGVuZGl4IEEuMSwgVXN1YWwgTGFuZ3VhZ2UgQ29kZXMuCiAKIAotMi4gU3RhcnRpbmcgYSBuZXcgbGFuZ3VhZ2UuCitDb250cmlidXRpbmcgdG8gYW4gZXhpc3RpbmcgdHJhbnNsYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQXMgYSBjb250cmlidXRvciBmb3IgYSBsYW5ndWFnZSBYWCwgeW91IHNob3VsZCBmaXJzdCBjaGVjayBURUFNUyBmaWxlIGluCit0aGlzIGRpcmVjdG9yeSB0byBzZWUgd2hldGhlciBhIGRlZGljYXRlZCByZXBvc2l0b3J5IGZvciB5b3VyIGxhbmd1YWdlIFhYCitleGlzdHMuIEZvcmsgdGhlIGRlZGljYXRlZCByZXBvc2l0b3J5IGFuZCBzdGFydCB0byB3b3JrIGlmIGl0IGV4aXN0cy4KIAotSW4gdGhlIGdpdC1ndWkgZGlyZWN0b3J5IGlzIGEgcG8vIHN1YmRpcmVjdG9yeS4gIEl0IGhhcyBhIGhhbmRmdWwgb2YKLWZpbGVzIHdob3NlIG5hbWVzIGVuZCB3aXRoICIucG8iLiAgSXMgdGhlcmUgYSBmaWxlIHRoYXQgaGFzIG1lc3NhZ2VzCi1pbiB5b3VyIGxhbmd1YWdlPwotCi1JZiB5b3UgZG8gbm90IGtub3cgd2hhdCB5b3VyIGxhbmd1YWdlIHNob3VsZCBiZSBuYW1lZCwgeW91IG5lZWQgdG8gZmluZAotaXQuICBUaGlzIGN1cnJlbnRseSBmb2xsb3dzIElTTyA2MzktMSB0d28gbGV0dGVyIGNvZGVzOgotCi0JaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi9waHAvY29kZV9saXN0LnBocAotCi1Gb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBwcmVwYXJpbmcgYSB0cmFuc2xhdGlvbiBmb3IgQWZyaWthYW5zLCB0aGUKLWxhbmd1YWdlIGNvZGUgaXMgImFmIi4gIElmIHRoZXJlIGFscmVhZHkgaXMgYSB0cmFuc2xhdGlvbiBmb3IgeW91cgotbGFuZ3VhZ2UsIHlvdSBkbyBub3QgaGF2ZSB0byBwZXJmb3JtIGFueSBzdGVwIGluIHRoaXMgc2VjdGlvbiwgYnV0IGtlZXAKLXJlYWRpbmcsIGJlY2F1c2Ugd2UgYXJlIGNvdmVyaW5nIHRoZSBiYXNpY3MuCi0KLUlmIHlvdSBkaWQgbm90IGZpbmQgeW91ciBsYW5ndWFnZSwgeW91IHdvdWxkIG5lZWQgdG8gc3RhcnQgb25lIHlvdXJzZWxmLgotQ29weSBwby9naXQtZ3VpLnBvdCBmaWxlIHRvIHBvL2FmLnBvIChyZXBsYWNlICJhZiIgd2l0aCB0aGUgY29kZSBmb3IKLXlvdXIgbGFuZ3VhZ2UpLiAgRWRpdCB0aGUgZmlyc3Qgc2V2ZXJhbCBsaW5lcyB0byBtYXRjaCBleGlzdGluZyAqLnBvCi1maWxlcyB0byBtYWtlIGl0IGNsZWFyIHRoaXMgaXMgYSB0cmFuc2xhdGlvbiB0YWJsZSBmb3IgZ2l0LWd1aSBwcm9qZWN0LAotYW5kIHlvdSBhcmUgdGhlIHByaW1hcnkgdHJhbnNsYXRvci4gIFRoZSByZXN1bHQgb2YgeW91ciBlZGl0aW5nIHdvdWxkCi1sb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6Ci0KLSAgICAjIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgdG8gQWZyaWthYW5zCi0gICAgIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2hhd24gUGVhcmNlCi0gICAgIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWd1aSBwYWNrYWdlLgotICAgICMgWU9VUiBOQU1FIDxZT1VSQEUtTUFJTC5BRERSRVNTPiwgMjAwNy4KLSAgICAjCi0gICAgIywgZnV6enkKLSAgICBtc2dpZCAiIgotICAgIG1zZ3N0ciAiIgotICAgICJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWlcbiIKLSAgICAiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotICAgICJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwNy0wNy0yNCAyMjoxOSswMzAwXG4iCi0gICAgIlBPLVJldmlzaW9uLURhdGU6IDIwMDctMDctMjUgMTg6MDArMDkwMFxuIgotICAgICJMYXN0LVRyYW5zbGF0b3I6IFlPVVIgTkFNRSA8WU9VUkBFLU1BSUwuQUREUkVTUz5cbiIKLSAgICAiTGFuZ3VhZ2UtVGVhbTogQWZyaWthYW5zXG4iCi0gICAgIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0gICAgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotICAgICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0KLVlvdSB3aWxsIGZpbmQgbWFueSBwYWlycyBvZiBhICJtc2dpZCIgbGluZSBmb2xsb3dlZCBieSBhICJtc2dzdHIiIGxpbmUuCi1UaGVzZSBwYWlycyBkZWZpbmUgaG93IG1lc3NhZ2VzIGluIGdpdC1ndWkgYXBwbGljYXRpb24gYXJlIHRyYW5zbGF0ZWQgdG8KLXlvdXIgbGFuZ3VhZ2UuICBZb3VyIHByaW1hcmlseSBqb2IgaXMgdG8gZmlsbCBpbiB0aGUgZW1wdHkgZG91YmxlIHF1b3RlCi1wYWlycyBvbiBtc2dzdHIgbGluZXMgd2l0aCB0aGUgdHJhbnNsYXRpb24gb2YgdGhlIHN0cmluZ3Mgb24gdGhlaXIKLW1hdGNoaW5nIG1zZ2lkIGxpbmVzLiAgQSBmZXcgdGlwczoKLQotIC0gQ29udHJvbCBjaGFyYWN0ZXJzLCBzdWNoIGFzIG5ld2xpbmVzLCBhcmUgd3JpdHRlbiBpbiBiYWNrc2xhc2gKLSAgIHNlcXVlbmNlIHNpbWlsYXIgdG8gc3RyaW5nIGxpdGVyYWxzIGluIHRoZSBDIHByb2dyYW1taW5nIGxhbmd1YWdlLgotICAgV2hlbiB0aGUgc3RyaW5nIGdpdmVuIG9uIGEgbXNnaWQgbGluZSBoYXMgc3VjaCBhIGJhY2tzbGFzaCBzZXF1ZW5jZSwKLSAgIHlvdSB3b3VsZCB0eXBpY2FsbHkgd2FudCB0byBoYXZlIGNvcnJlc3BvbmRpbmcgb25lcyBpbiB0aGUgc3RyaW5nIG9uCi0gICB5b3VyIG1zZ3N0ciBsaW5lLgotCi0gLSBTb21lIG1lc3NhZ2VzIGNvbnRhaW4gYW4gb3B0aW9uYWwgY29udGV4dCBpbmRpY2F0b3IgYXQgdGhlIGVuZCwKLSAgIGZvciBleGFtcGxlICJAQG5vdW4iIG9yICJAQHZlcmIiLiAgVGhpcyBpbmRpY2F0b3IgYWxsb3dzIHRoZQotICAgc29mdHdhcmUgdG8gc2VsZWN0IHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9uIGRlcGVuZGluZyB1cG9uIHRoZSB1c2UuCi0gICBUaGUgaW5kaWNhdG9yIGlzIG5vdCBhY3R1YWxseSBwYXJ0IG9mIHRoZSBtZXNzYWdlIGFuZCB3aWxsIG5vdAotICAgYmUgc2hvd24gdG8gdGhlIGVuZC11c2VyLgotCi0gICBJZiB5b3VyIGxhbmd1YWdlIGRvZXMgbm90IHJlcXVpcmUgYSBkaWZmZXJlbnQgdHJhbnNsYXRpb24geW91Ci0gICB3aWxsIHN0aWxsIG5lZWQgdG8gdHJhbnNsYXRlIGJvdGggbWVzc2FnZXMuCi0KLSAtIE9mdGVuIHRoZSBtZXNzYWdlcyBiZWluZyB0cmFuc2xhdGVkIGFyZSBmb3JtYXQgc3RyaW5ncyBnaXZlbiB0bwotICAgInByaW50ZigpIi1saWtlIGZ1bmN0aW9ucy4gIE1ha2Ugc3VyZSAiJXMiLCAiJWQiLCBhbmQgIiUlIiBpbiB5b3VyCi0gICB0cmFuc2xhdGVkIG1lc3NhZ2VzIG1hdGNoIHRoZSBvcmlnaW5hbC4KLQotICAgV2hlbiB5b3UgaGF2ZSB0byBjaGFuZ2UgdGhlIG9yZGVyIG9mIHdvcmRzLCB5b3UgY2FuIGFkZCAiPG51bWJlcj4kIgotICAgYmV0d2VlbiAnJScgYW5kIHRoZSBjb252ZXJzaW9uICgncycsICdkJywgZXRjLikgdG8gc2F5ICI8bnVtYmVyPi10aAotICAgcGFyYW1ldGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nIGlzIHVzZWQgYXQgdGhpcyBwb2ludCIuICBGb3IgZXhhbXBsZSwKLSAgIGlmIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGlzIGxpa2UgdGhpczoKLQotCSJMZW5ndGggaXMgJWQsIFdlaWdodCBpcyAlZCIKLQotICAgYW5kIGlmIGZvciB3aGF0ZXZlciByZWFzb24geW91ciB0cmFuc2xhdGlvbiBuZWVkcyB0byBzYXkgd2VpZ2h0IGZpcnN0Ci0gICBhbmQgdGhlbiBsZW5ndGgsIHlvdSBjYW4gc2F5IHNvbWV0aGluZyBsaWtlOgotCi0JIldFSUdIVCBJUyAlMiRkLCBMRU5HVEggSVMgJTEkZCIKLQotICAgQSBmb3JtYXQgc3BlY2lmaWNhdGlvbiB3aXRoIGEgJyonIChhc3RlcmlzaykgcmVmZXJzIHRvICp0d28qIGFyZ3VtZW50cwotICAgaW5zdGVhZCBvZiBvbmUsIGhlbmNlIHRoZSBzdWNjZWVkaW5nIGFyZ3VtZW50IG51bWJlciBpcyB0d28gaGlnaGVyCi0gICBpbnN0ZWFkIG9mIG9uZS4gU28sIGEgbWVzc2FnZSBsaWtlIHRoaXMKLQotCSIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgotCi0gICBpcyBlcXVpdmFsZW50IHRvCi0KLQkiJTEkcyAuLi4gJTIkKmkgb2YgJTQkKmkgJTYkcyAoJTckM2klJSkiCi0KLSAtIEEgbG9uZyBtZXNzYWdlIGNhbiBiZSBzcGxpdCBhY3Jvc3MgbXVsdGlwbGUgbGluZXMgYnkgZW5kaW5nIHRoZQotICAgc3RyaW5nIHdpdGggYSBkb3VibGUgcXVvdGUsIGFuZCBzdGFydGluZyBhbm90aGVyIHN0cmluZyBvbiB0aGUgbmV4dAotICAgbGluZSB3aXRoIGFub3RoZXIgZG91YmxlIHF1b3RlLiAgVGhleSB3aWxsIGJlIGNvbmNhdGVuYXRlZCBpbiB0aGUKLSAgIHJlc3VsdC4gIEZvciBleGFtcGxlOgotCi0gICAjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4OQotICAgIywgdGNsLWZvcm1hdAotICAgbXNnaWQgIiIKLSAgICJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKLSAgICJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKLSAgIG1zZ3N0ciAiIgotICAgIkhFUkUgWU9VIFdJTEwgV1JJVEUgWU9VUiBUUkFOU0xBVElPTiBPRiBUSEUgQUJPVkUgTE9ORyAiCi0gICAiTUVTU0FHRSBJTiBZT1VSIExBTkdVQUdFLiIKLQotWW91IGNhbiB0ZXN0IHlvdXIgdHJhbnNsYXRpb24gYnkgcnVubmluZyAibWFrZSBpbnN0YWxsIiwgd2hpY2ggd291bGQKLWNyZWF0ZSBwby9hZi5tc2cgZmlsZSBhbmQgaW5zdGFsbHMgdGhlIHJlc3VsdCwgYW5kIHRoZW4gcnVubmluZyB0aGUKLXJlc3VsdGluZyBnaXQtZ3VpIHVuZGVyIHlvdXIgbG9jYWxlOgotCi0JJCBtYWtlIGluc3RhbGwKLQkkIExBTkc9YWYgZ2l0LWd1aQotCi1UaGVyZSBpcyBhIHRyaWNrIHRvIHRlc3QgeW91ciB0cmFuc2xhdGlvbiB3aXRob3V0IGZpcnN0IGluc3RhbGxpbmc6Ci0KLQkkIG1ha2UKLQkkIExBTkc9YWYgLi9naXQtZ3VpLnNoCi0KLVdoZW4geW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIHRyYW5zbGF0aW9uLCBjb21taXQgeW91ciBjaGFuZ2VzIHRoZW4gc3VibWl0Ci15b3VyIHBhdGNoIHNlcmllcyB0byB0aGUgbWFpbnRhaW5lciBhbmQgdGhlIEdpdCBtYWlsaW5nIGxpc3Q6Ci0KLQkkIGVkaXQgcG8vYWYucG8KLQkuLi4gYmUgc3VyZSB0byB1cGRhdGUgTGFzdC1UcmFuc2xhdG9yOiBhbmQKLQkuLi4gUE8tUmV2aXNpb24tRGF0ZTogbGluZXMuCi0JJCBnaXQgYWRkIHBvL2FmLnBvCi0JJCBnaXQgY29tbWl0IC1zIC1tICdnaXQtZ3VpOiBhZGRlZCBBZnJpa2FhbnMgdHJhbnNsYXRpb24uJwotCSQgZ2l0IHNlbmQtZW1haWwgLS10byAnZ2l0QHZnZXIua2VybmVsLm9yZycgXAotCSAgIC0tY2MgJ1BhdCBUaG95dHMgPHBhdHRob3l0c0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+JyBcCi0JICAgLS1zdWJqZWN0ICdnaXQtZ3VpOiBBZnJpa2FhbnMgdHJhbnNsYXRpb24nIFwKLQkgICBtYXN0ZXIuLgorU29tZXRpbWUsIGNvbnRyaWJ1dG9ycyBtYXkgZmluZCB0aGF0IHRoZSB0cmFuc2xhdGlvbnMgb2YgdGhlaXIgR2l0CitkaXN0cmlidXRpb25zIGFyZSBxdWl0ZSBkaWZmZXJlbnQgd2l0aCB0aGUgdHJhbnNsYXRpb25zIG9mIHRoZQorY29ycmVzcG9uZGluZyB2ZXJzaW9uIGZyb20gR2l0IG9mZmljaWFsLiBUaGlzIGlzIGJlY2F1c2Ugc29tZSBHaXQKK2Rpc3RyaWJ1dGlvbnMgKHN1Y2ggYXMgZnJvbSBVYnVudHUsIGV0Yy4pIGhhdmUgdGhlaXIgb3duIGwxMG4gd29ya2Zsb3cuCitGb3IgdGhpcyBjYXNlLCB3cm9uZyB0cmFuc2xhdGlvbnMgc2hvdWxkIGJlIHJlcG9ydGVkIGFuZCBmaXhlZCB0aHJvdWdoCit0aGVpciB3b3JrZmxvd3MuCiAKIAotMy4gVXBkYXRpbmcgeW91ciB0cmFuc2xhdGlvbi4KK0NyZWF0aW5nIGEgbmV3IGxhbmd1YWdlIHRyYW5zbGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgeW91IGFyZSB0aGUgZmlyc3QgY29udHJpYnV0b3IgZm9yIHRoZSBsYW5ndWFnZSBYWCwgcGxlYXNlIGZvcmsgdGhpcworcmVwb3NpdG9yeSwgcHJlcGFyZSBhbmQvb3IgdXBkYXRlIHRoZSB0cmFuc2xhdGVkIG1lc3NhZ2UgZmlsZSBwby9YWC5wbworKGRlc2NyaWJlZCBsYXRlciksIGFuZCBhc2sgdGhlIGwxMG4gY29vcmRpbmF0b3IgdG8gcHVsbCB5b3VyIHdvcmsuCiAKLVRoZXJlIG1heSBhbHJlYWR5IGJlIGEgdHJhbnNsYXRpb24gZm9yIHlvdXIgbGFuZ3VhZ2UsIGFuZCB5b3UgbWF5IHdhbnQKLXRvIGNvbnRyaWJ1dGUgYW4gdXBkYXRlLiAgVGhpcyBtYXkgYmUgYmVjYXVzZSB5b3Ugd291bGQgd2FudCB0byBpbXByb3ZlCi10aGUgdHJhbnNsYXRpb24gb2YgZXhpc3RpbmcgbWVzc2FnZXMsIG9yIGJlY2F1c2UgdGhlIGdpdC1ndWkgc29mdHdhcmUKLWl0c2VsZiB3YXMgdXBkYXRlZCBhbmQgdGhlcmUgYXJlIG5ldyBtZXNzYWdlcyB0aGF0IG5lZWQgdHJhbnNsYXRpb24uCitJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29udHJpYnV0b3JzIGZvciB0aGUgc2FtZSBsYW5ndWFnZSwgcGxlYXNlIGZpcnN0Citjb29yZGluYXRlIGFtb25nIHlvdXJzZWx2ZXMgYW5kIG5vbWluYXRlIHRoZSB0ZWFtIGxlYWRlciBmb3IgeW91cgorbGFuZ3VhZ2UsIHNvIHRoYXQgdGhlIGwxMG4gY29vcmRpbmF0b3Igb25seSBuZWVkcyB0byBpbnRlcmFjdCB3aXRoIG9uZQorcGVyc29uIHBlciBsYW5ndWFnZS4KIAotSW4gYW55IGNhc2UsIG1ha2Ugc3VyZSB5b3UgYXJlIHVwIHRvIGRhdGUgYmVmb3JlIHN0YXJ0aW5nIHlvdXIgd29yazoKIAotCSQgZ2l0IGNoZWNrb3V0IG1hc3RlcgotCSQgZ2l0IHB1bGwKK1RyYW5zbGF0aW9uIFByb2Nlc3MgRmxvdworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgb3ZlcmFsbCBkYXRhLWZsb3cgbG9va3MgbGlrZSB0aGlzOgogCi1JbiB0aGUgZm9ybWVyIGNhc2UsIHlvdSB3aWxsIGVkaXQgcG8vYWYucG8gKGFnYWluLCByZXBsYWNlICJhZiIgd2l0aAoteW91ciBsYW5ndWFnZSBjb2RlKSwgYW5kIGFmdGVyIHRlc3RpbmcgYW5kIHVwZGF0aW5nIHRoZSBMYXN0LVRyYW5zbGF0b3I6Ci1hbmQgUE8tUmV2aXNpb24tRGF0ZTogbGluZXMsICJhZGQvY29tbWl0L3B1c2giIGFzIGluIHRoZSBwcmV2aW91cwotc2VjdGlvbi4KKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgR2l0IHNvdXJjZSBjb2RlICAgfCAtLS0oMSktLS0+IHwgTDEwbiBjb29yZGluYXRvciB8CisgICAgfCByZXBvc2l0b3J5ICAgICAgICB8IDwtLS0oNCktLS0gfCByZXBvc2l0b3J5ICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIF4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIpICAgICgzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgViAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTGFuZ3VhZ2UgVGVhbSBYWCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLSsKIAotQnkgY29tcGFyaW5nICJQT1QtQ3JlYXRpb24tRGF0ZToiIGxpbmUgaW4gcG8vZ2l0LWd1aS5wb3QgZmlsZSBhbmQKLXBvL2FmLnBvIGZpbGUsIHlvdSBjYW4gdGVsbCBpZiB0aGVyZSBhcmUgbmV3IG1lc3NhZ2VzIHRoYXQgbmVlZCB0byBiZQotdHJhbnNsYXRlZC4gIFlvdSB3b3VsZCBuZWVkIHRoZSBHTlUgZ2V0dGV4dCBwYWNrYWdlIHRvIHBlcmZvcm0gdGhpcwotc3RlcC4KKyAqIFRyYW5zbGF0YWJsZSBzdHJpbmdzIGFyZSBtYXJrZWQgaW4gdGhlIHNvdXJjZSBmaWxlLgorICogTDEwbiBjb29yZGluYXRvciBwdWxscyBmcm9tIHRoZSBzb3VyY2UgKDEpCisgKiBMMTBuIGNvb3JkaW5hdG9yIHVwZGF0ZXMgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgcG8vZ2l0LnBvdAorICogTGFuZ3VhZ2UgdGVhbSBwdWxscyBmcm9tIEwxMG4gY29vcmRpbmF0b3IgKDIpCisgKiBMYW5ndWFnZSB0ZWFtIHVwZGF0ZXMgdGhlIG1lc3NhZ2UgZmlsZSBwby9YWC5wbworICogTDEwbiBjb29yZGluYXRvciBwdWxscyBmcm9tIExhbmd1YWdlIHRlYW0gKDMpCisgKiBMMTBuIGNvb3JkaW5hdG9yIGFza3MgdGhlIHJlc3VsdCB0byBiZSBwdWxsZWQgKDQpLgogCi0JJCBtc2dtZXJnZSAtVSBwby9hZi5wbyBwby9naXQtZ3VpLnBvdAogCi1UaGlzIHVwZGF0ZXMgcG8vYWYucG8gKGFnYWluLCByZXBsYWNlICJhZiIgd2l0aCB5b3VyIGxhbmd1YWdlCi1jb2RlKSBzbyB0aGF0IGl0IGNvbnRhaW5zIG1zZ2lkIGxpbmVzIChpLmUuIHRoZSBvcmlnaW5hbCkgdGhhdAoteW91ciB0cmFuc2xhdGlvbiBkaWQgbm90IGhhdmUgYmVmb3JlLiAgVGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB0bwotd2F0Y2ggb3V0IGZvcjoKK01haW50YWluaW5nIHRoZSBwby9naXQucG90IGZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIC0gVGhlIG9yaWdpbmFsIHRleHQgaW4gRW5nbGlzaCBvZiBhbiBvbGRlciBtZXNzYWdlIHlvdSBhbHJlYWR5Ci0gICB0cmFuc2xhdGVkIG1pZ2h0IGhhdmUgYmVlbiBjaGFuZ2VkLiAgWW91IHdpbGwgbm90aWNlIGEgY29tbWVudCBsaW5lCi0gICB0aGF0IGJlZ2lucyB3aXRoICIjLCBmdXp6eSIgaW4gZnJvbnQgb2Ygc3VjaCBhIG1lc3NhZ2UuICBtc2dtZXJnZQotICAgdG9vbCBtYWRlIGl0cyBiZXN0IGVmZm9ydCB0byBtYXRjaCB5b3VyIG9sZCB0cmFuc2xhdGlvbiB3aXRoIHRoZQotICAgbWVzc2FnZSBmcm9tIHRoZSB1cGRhdGVkIHNvZnR3YXJlLCBidXQgeW91IG1heSBmaW5kIGNhc2VzIHRoYXQgaXQKLSAgIG1hdGNoZWQgeW91ciBvbGQgdHJhbnNsYXRlZCBtZXNzYWdlIHRvIGEgbmV3IG1zZ2lkIGFuZCB0aGUgcGFpcmluZwotICAgZG9lcyBub3QgbWFrZSBhbnkgc2Vuc2UgLS0geW91IHdvdWxkIG5lZWQgdG8gZml4IHRoZW0sIGFuZCB0aGVuCi0gICByZW1vdmUgdGhlICIjLCBmdXp6eSIgbGluZSBmcm9tIHRoZSBtZXNzYWdlICh5b3VyIGZpeGVkIHRyYW5zbGF0aW9uCi0gICBvZiB0aGUgbWVzc2FnZSB3aWxsIG5vdCBiZSB1c2VkIGJlZm9yZSB5b3UgcmVtb3ZlIHRoZSBtYXJrZXIpLgorKFRoaXMgaXMgZG9uZSBieSB0aGUgbDEwbiBjb29yZGluYXRvcikuCiAKLSAtIE5ldyBtZXNzYWdlcyBhZGRlZCB0byB0aGUgc29mdHdhcmUgd2lsbCBoYXZlIG1zZ3N0ciBsaW5lcyB3aXRoIGVtcHR5Ci0gICBzdHJpbmdzLiAgWW91IHdvdWxkIG5lZWQgdG8gdHJhbnNsYXRlIHRoZW0uCitUaGUgcG8vZ2l0LnBvdCBmaWxlIGNvbnRhaW5zIGEgbWVzc2FnZSBjYXRhbG9nIGV4dHJhY3RlZCBmcm9tIEdpdCdzCitzb3VyY2VzLiBUaGUgbDEwbiBjb29yZGluYXRvciBtYWludGFpbnMgaXQgYnkgYWRkaW5nIG5ldyB0cmFuc2xhdGlvbnMgd2l0aAorbXNnaW5pdCgxKSwgb3IgdXBkYXRlIGV4aXN0aW5nIG9uZXMgd2l0aCBtc2dtZXJnZSgxKS4gIEluIG9yZGVyIHRvIHVwZGF0ZQordGhlIEdpdCBzb3VyY2VzIHRvIGV4dHJhY3QgdGhlIG1lc3NhZ2VzIGZyb20sIHRoZSBsMTBuIGNvb3JkaW5hdG9yIGlzCitleHBlY3RlZCB0byBwdWxsIGZyb20gdGhlIG1haW4gZ2l0IHJlcG9zaXRvcnkgYXQgc3RyYXRlZ2ljIHBvaW50IGluCitoaXN0b3J5IChlLmcuIHdoZW4gYSBtYWpvciByZWxlYXNlIGFuZCByZWxlYXNlIGNhbmRpZGF0ZXMgYXJlIHRhZ2dlZCksCithbmQgdGhlbiBydW4gIm1ha2UgcG90IiBhdCB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4KIAotVGhlIHBvL2dpdC1ndWkucG90IGZpbGUgaXMgdXBkYXRlZCBieSB0aGUgaW50ZXJuYXRpb25hbGl6YXRpb24KLWNvb3JkaW5hdG9yIGZyb20gdGltZSB0byB0aW1lLiAgWW91IF9jb3VsZF8gdXBkYXRlIGl0IHlvdXJzZWxmLCBidXQKLXRyYW5zbGF0b3JzIGFyZSBkaXNjb3VyYWdlZCBmcm9tIGRvaW5nIHNvIGJlY2F1c2Ugd2Ugd291bGQgd2FudCBhbGwKLWxhbmd1YWdlIHRlYW1zIHRvIGJlIHdvcmtpbmcgb2ZmIG9mIHRoZSBzYW1lIHZlcnNpb24gb2YgZ2l0LWd1aS5wb3QuCitMYW5ndWFnZSBjb250cmlidXRvcnMgdXNlIHRoaXMgZmlsZSB0byBwcmVwYXJlIHRyYW5zbGF0aW9ucyBmb3IgdGhlaXIKK2xhbmd1YWdlLCBidXQgdGhleSBhcmUgbm90IGV4cGVjdGVkIHRvIG1vZGlmeSBpdC4KIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi1UaGlzIHNlY3Rpb24gaXMgYSBub3RlIHRvIHRoZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBjb29yZGluYXRvciwgYW5kCi10cmFuc2xhdG9ycyBkbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBpdCB0b28gbXVjaC4KK0luaXRpYWxpemluZyBhIFhYLnBvIGZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhlIG1lc3NhZ2UgdGVtcGxhdGUgZmlsZSBwby9naXQtZ3VpLnBvdCBuZWVkcyB0byBiZSBrZXB0IHVwIHRvIGRhdGUKLXJlbGF0aXZlIHRvIHRoZSBzb2Z0d2FyZSB0aGUgdHJhbnNsYXRpb25zIGFwcGx5IHRvLCBhbmQgaXQgaXMgdGhlCi1yZXNwb25zaWJpbGl0eSBvZiB0aGUgaW50ZXJuYXRpb25hbGl6YXRpb24gY29vcmRpbmF0b3IuCisoVGhpcyBpcyBkb25lIGJ5IHRoZSBsYW5ndWFnZSB0ZWFtcykuCiAKLVdoZW4gdXBkYXRpbmcgcG8vZ2l0LWd1aS5wb3QgZmlsZSwgaG93ZXZlciwgX25ldmVyXyBydW4gIm1zZ21lcmdlIC1VCi1wby94eC5wbyIgZm9yIGluZGl2aWR1YWwgbGFuZ3VhZ2UgdHJhbnNsYXRpb25zLCB1bmxlc3MgeW91IGFyZSBhYnNvbHV0ZWx5Ci1zdXJlIHRoYXQgdGhlcmUgaXMgbm8gb3V0c3RhbmRpbmcgd29yayBvbiB0cmFuc2xhdGlvbiBmb3IgbGFuZ3VhZ2UgeHguCi1Eb2luZyBzbyB3aWxsIGNyZWF0ZSB1bm5lY2Vzc2FyeSBtZXJnZSBjb25mbGljdHMgYW5kIGZvcmNlIG5lZWRsZXNzCi1yZS10cmFuc2xhdGlvbiBvbiB0cmFuc2xhdG9ycy4gIFRoZSB0cmFuc2xhdG9yIGhvd2V2ZXIgbWF5IG5vdCBoYXZlIGFjY2VzcwotdG8gdGhlIG1zZ21lcmdlIHRvb2wsIGluIHdoaWNoIGNhc2UgdGhlIGNvb3JkaW5hdG9yIG1heSBydW4gaXQgZm9yIHRoZQotdHJhbnNsYXRvciBhcyBhIHNlcnZpY2UuCitJZiB5b3VyIGxhbmd1YWdlIFhYIGRvZXMgbm90IGhhdmUgdHJhbnNsYXRlZCBtZXNzYWdlIGZpbGUgcG8vWFgucG8geWV0LAoreW91IGFkZCBhIHRyYW5zbGF0aW9uIGZvciB0aGUgZmlyc3QgdGltZSBieSBydW5uaW5nOgogCi1CdXQgbWlzdGFrZXMgZG8gaGFwcGVuLiAgU3VwcG9zZSBhIHRyYW5zbGF0aW9uIHdhcyBiYXNlZCBvbiBhbiBvbGRlcgotdmVyc2lvbiBYLCB0aGUgUE9UIGZpbGUgd2FzIHVwZGF0ZWQgYXQgdmVyc2lvbiBZIGFuZCB0aGVuIG1zZ21lcmdlIHdhcyBydW4KLWF0IHZlcnNpb24gWiBmb3IgdGhlIGxhbmd1YWdlLCBhbmQgdGhlIHRyYW5zbGF0b3Igc2VudCBpbiBhIHBhdGNoIGJhc2VkIG9uCi12ZXJzaW9uIFg6CisgICAgbXNnaW5pdCAtLWxvY2FsZT1YWAogCi0gICAgICAgICA/IHRyYW5zbGF0ZWQKLSAgICAgICAgLwotICAgIC0tLVgtLS1ZLS0tWiAobWFzdGVyKQoraW4gdGhlIHBvLyBkaXJlY3RvcnksIHdoZXJlIFhYIGlzIHRoZSBsb2NhbGUsIGUuZy4gImRlIiwgImlzIiwgInB0X0JSIiwKKyJ6aF9DTiIsIGV0Yy4KIAotVGhlIGNvb3JkaW5hdG9yIGNvdWxkIHJlY292ZXIgZnJvbSBzdWNoIGEgbWlzdGFrZSBieSBmaXJzdCBhcHBseWluZyB0aGUKLXBhdGNoIHRvIFgsIHJlcGxhY2UgdGhlIHRyYW5zbGF0ZWQgZmlsZSBpbiBaLCBhbmQgdGhlbiBydW5uaW5nIG1zZ21lcmdlCi1hZ2FpbiBiYXNlZCBvbiB0aGUgdXBkYXRlZCBQT1QgZmlsZSBhbmQgY29tbWl0IHRoZSByZXN1bHQuICBUaGUgc2VxdWVuY2UKLXdvdWxkIGxvb2sgbGlrZSB0aGlzOgorVGhlbiBlZGl0IHRoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBjb3B5cmlnaHQgaW5mbyBpbiB5b3VyIG5ldyBYWC5wbwordG8gYmUgY29ycmVjdCwgZS5nLiBmb3IgSWNlbGFuZGljOgogCi0gICAgJCBnaXQgY2hlY2tvdXQgWAotICAgICQgZ2l0IGFtIC1zIHh4LnBhdGNoCi0gICAgJCBnaXQgY2hlY2tvdXQgbWFzdGVyCi0gICAgJCBnaXQgY2hlY2tvdXQgSEVBREB7MX0gcG8veHgucG8KLSAgICAkIG1zZ21lcmdlIC1VIHBvL3h4LnBvIHBvL2dpdC1ndWkucG90Ci0gICAgJCBnaXQgY29tbWl0IC1jIEhFQURAezF9IHBvL3h4LnBvCisgICAgQEAgLTEsNiArMSw2IEBACisgICAgLSMgSWNlbGFuZGljIHRyYW5zbGF0aW9ucyBmb3IgUEFDS0FHRSBwYWNrYWdlLgorICAgIC0jIENvcHlyaWdodCAoQykgMjAxMCBUSEUgUEFDS0FHRSdTIENPUFlSSUdIVCBIT0xERVIKKyAgICAtIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgUEFDS0FHRSBwYWNrYWdlLgorICAgICsjIEljZWxhbmRpYyB0cmFuc2xhdGlvbnMgZm9yIEdpdC4KKyAgICArIyBDb3B5cmlnaHQgKEMpIDIwMTAgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+CisgICAgKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEdpdCBwYWNrYWdlLgorICAgICAjIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uIDxhdmFyYWJAZ21haWwuY29tPiwgMjAxMC4KIAotU3RhdGUgaW4gdGhlIG1lc3NhZ2UgdGhhdCB0aGUgdHJhbnNsYXRlZCBtZXNzYWdlcyBhcmUgYmFzZWQgb24gYSBzbGlnaHRseQotb2xkZXIgdmVyc2lvbiwgYW5kIG1zZ21lcmdlIHdhcyBydW4gdG8gaW5jb3Jwb3JhdGUgY2hhbmdlcyB0byBtZXNzYWdlCi10ZW1wbGF0ZXMgZnJvbSB0aGUgdXBkYXRlZCBQT1QgZmlsZS4gIFRoZSByZXN1bHQgbmVlZHMgdG8gYmUgZnVydGhlcgotdHJhbnNsYXRlZCwgYnV0IGF0IGxlYXN0IHRoZSBtZXNzYWdlcyB0aGF0IHdlcmUgdXBkYXRlZCBieSB0aGUgcGF0Y2ggdGhhdAotd2VyZSBub3QgY2hhbmdlZCBieSB0aGUgUE9UIHVwZGF0ZSB3aWxsIHN1cnZpdmUgdGhlIHByb2Nlc3MgYW5kIGRvIG5vdAotbmVlZCB0byBiZSByZS10cmFuc2xhdGVkLgorQW5kIGNoYW5nZSByZWZlcmVuY2VzIHRvIFBBQ0tBR0UgVkVSU0lPTiBpbiB0aGUgUE8gSGVhZGVyIEVudHJ5IHRvCitqdXN0ICJHaXQiOgorCisgICAgcGVybCAtcGkgLWUgJ3MvKD88PSJQcm9qZWN0LUlkLVZlcnNpb246IClQQUNLQUdFIFZFUlNJT04vR2l0LycgWFgucG8KKworT25jZSB5b3UgYXJlIGRvbmUgdGVzdGluZyB0aGUgdHJhbnNsYXRpb24gKHNlZSBiZWxvdyksIGNvbW1pdCB0aGUgcmVzdWx0CithbmQgYXNrIHRoZSBsMTBuIGNvb3JkaW5hdG9yIHRvIHB1bGwgZnJvbSB5b3UuCisKKworVXBkYXRpbmcgYSBYWC5wbyBmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKFRoaXMgaXMgZG9uZSBieSB0aGUgbGFuZ3VhZ2UgdGVhbXMpLgorCitJZiB5b3UgYXJlIHJlcGxhY2luZyB0cmFuc2xhdGlvbiBzdHJpbmdzIGluIGFuIGV4aXN0aW5nIFhYLnBvIGZpbGUgdG8KK2ltcHJvdmUgdGhlIHRyYW5zbGF0aW9uLCBqdXN0IGVkaXQgdGhlIGZpbGUuCisKK0lmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgWFgucG8gZmlsZSBmb3IgeW91ciBsYW5ndWFnZSwgYnV0IHRoZSByZXBvc2l0b3J5CitvZiB0aGUgbDEwbiBjb29yZGluYXRvciBoYXMgbmV3ZXIgcG8vZ2l0LnBvdCBmaWxlLCB5b3Ugd291bGQgbmVlZCB0byBmaXJzdAorcHVsbCBmcm9tIHRoZSBsMTBuIGNvb3JkaW5hdG9yIChzZWUgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGRvY3VtZW50IGZvciBpdHMKK1VSTCksIGFuZCB0aGVuIHVwZGF0ZSB0aGUgZXhpc3RpbmcgdHJhbnNsYXRpb24gYnkgcnVubmluZzoKKworICAgIG1zZ21lcmdlIC0tYWRkLWxvY2F0aW9uIC0tYmFja3VwPW9mZiAtVSBYWC5wbyBnaXQucG90CisKK2luIHRoZSBwby8gZGlyZWN0b3J5LCB3aGVyZSBYWC5wbyBpcyB0aGUgZmlsZSB5b3Ugd2FudCB0byB1cGRhdGUuCisKK09uY2UgeW91IGFyZSBkb25lIHRlc3RpbmcgdGhlIHRyYW5zbGF0aW9uIChzZWUgYmVsb3cpLCBjb21taXQgdGhlIHJlc3VsdAorYW5kIGFzayB0aGUgbDEwbiBjb29yZGluYXRvciB0byBwdWxsIGZyb20geW91LgorCisKK1Rlc3RpbmcgeW91ciBjaGFuZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoVGhpcyBpcyBkb25lIGJ5IHRoZSBsYW5ndWFnZSB0ZWFtcywgYWZ0ZXIgY3JlYXRpbmcgb3IgdXBkYXRpbmcgWFgucG8gZmlsZSkuCisKK0JlZm9yZSB5b3Ugc3VibWl0IHlvdXIgY2hhbmdlcyBnbyBiYWNrIHRvIHRoZSB0b3AtbGV2ZWwgYW5kIGRvOgorCisgICAgbWFrZQorCitPbiBzeXN0ZW1zIHdpdGggR05VIGdldHRleHQgKGkuZS4gbm90IFNvbGFyaXMpIHRoaXMgd2lsbCBjb21waWxlIHlvdXIKK2NoYW5nZWQgUE8gZmlsZSB3aXRoIGBtc2dmbXQgLS1jaGVja2AsIHRoZSAtLWNoZWNrIG9wdGlvbiBmbGFncyBtYW55Citjb21tb24gZXJyb3JzLCBlLmcuIG1pc3NpbmcgcHJpbnRmIGZvcm1hdCBzdHJpbmdzLCBvciB0cmFuc2xhdGVkCittZXNzYWdlcyB0aGF0IGRldmlhdGUgZnJvbSB0aGUgb3JpZ2luYWxzIGluIHdoZXRoZXIgdGhleSBiZWdpbi9lbmQKK3dpdGggYSBuZXdsaW5lIG9yIG5vdC4KKworCitNYXJraW5nIHN0cmluZ3MgZm9yIHRyYW5zbGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhUaGlzIGlzIGRvbmUgYnkgdGhlIGNvcmUgZGV2ZWxvcGVycykuCisKK0JlZm9yZSBzdHJpbmdzIGNhbiBiZSB0cmFuc2xhdGVkIHRoZXkgZmlyc3QgaGF2ZSB0byBiZSBtYXJrZWQgZm9yCit0cmFuc2xhdGlvbi4KKworR2l0IHVzZXMgYW4gaW50ZXJuYXRpb25hbGl6YXRpb24gaW50ZXJmYWNlIHRoYXQgd3JhcHMgdGhlIHN5c3RlbSdzCitnZXR0ZXh0IGxpYnJhcnksIHNvIG1vc3Qgb2YgdGhlIGFkdmljZSBpbiB5b3VyIGdldHRleHQgZG9jdW1lbnRhdGlvbgorKG9uIEdOVSBzeXN0ZW1zIGBpbmZvIGdldHRleHRgIGluIGEgdGVybWluYWwpIGFwcGxpZXMuCisKK0dlbmVyYWwgYWR2aWNlOgorCisgLSBEb24ndCBtYXJrIGV2ZXJ5dGhpbmcgZm9yIHRyYW5zbGF0aW9uLCBvbmx5IHN0cmluZ3Mgd2hpY2ggd2lsbCBiZQorICAgcmVhZCBieSBodW1hbnMgKHRoZSBwb3JjZWxhaW4gaW50ZXJmYWNlKSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KKworICAgVGhlIG91dHB1dCBmcm9tIEdpdCdzIHBsdW1iaW5nIHV0aWxpdGllcyB3aWxsIHByaW1hcmlseSBiZSByZWFkIGJ5CisgICBwcm9ncmFtcyBhbmQgd291bGQgYnJlYWsgc2NyaXB0cyB1bmRlciBub24tQyBsb2NhbGVzIGlmIGl0IHdhcworICAgdHJhbnNsYXRlZC4gUGx1bWJpbmcgc3RyaW5ncyBzaG91bGQgbm90IGJlIHRyYW5zbGF0ZWQsIHNpbmNlCisgICB0aGV5J3JlIHBhcnQgb2YgR2l0J3MgQVBJLgorCisgLSBBZGp1c3QgdGhlIHN0cmluZ3Mgc28gdGhhdCB0aGV5J3JlIGVhc3kgdG8gdHJhbnNsYXRlLiBNb3N0IG9mIHRoZQorICAgYWR2aWNlIGluIGBpbmZvICcoZ2V0dGV4dClQcmVwYXJpbmcgU3RyaW5ncydgIGFwcGxpZXMgaGVyZS4KKworIC0gSWYgc29tZXRoaW5nIGlzIHVuY2xlYXIgb3IgYW1iaWd1b3VzIHlvdSBjYW4gdXNlIGEgIlRSQU5TTEFUT1JTIgorICAgY29tbWVudCB0byB0ZWxsIHRoZSB0cmFuc2xhdG9ycyB3aGF0IHRvIG1ha2Ugb2YgaXQuIFRoZXNlIHdpbGwgYmUKKyAgIGV4dHJhY3RlZCBieSB4Z2V0dGV4dCgxKSBhbmQgcHV0IGluIHRoZSBwby8qLnBvIGZpbGVzLCBlLmcuIGZyb20KKyAgIGdpdC1hbS5zaDoKKworICAgICAgICMgVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisgICAgICAgIyBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyAgICAgICAjIGlucHV0IGF0IHRoaXMgcG9pbnQuCisgICAgICAgZ2V0dGV4dCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGwgIgorCisgICBPciBpbiBDLCBmcm9tIGJ1aWx0aW4vcmV2ZXJ0LmM6CisKKyAgICAgICAvKiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiBvciAiY2hlcnJ5LXBpY2siICovCisgICAgICAgZGllKF8oIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSwgYWN0aW9uX25hbWUob3B0cykpOworCitXZSBwcm92aWRlIHdyYXBwZXJzIGZvciBDLCBTaGVsbCBhbmQgUGVybCBwcm9ncmFtcy4gSGVyZSdzIGhvdyB0aGV5J3JlCit1c2VkOgorCitDOgorCisgLSBJbmNsdWRlIGJ1aWx0aW4uaCBhdCB0aGUgdG9wLCBpdCdsbCBwdWxsIGluIGdldHRleHQuaCwgd2hpY2gKKyAgIGRlZmluZXMgdGhlIGdldHRleHQgaW50ZXJmYWNlLiBDb25zdWx0IHdpdGggdGhlIGxpc3QgaWYgeW91IG5lZWQgdG8KKyAgIHVzZSBnZXR0ZXh0LmggZGlyZWN0bHkuCisKKyAtIFRoZSBDIGludGVyZmFjZSBpcyBhIHN1YnNldCBvZiB0aGUgbm9ybWFsIEdOVSBnZXR0ZXh0CisgICBpbnRlcmZhY2UuIFdlIGN1cnJlbnRseSBleHBvcnQgdGhlc2UgZnVuY3Rpb25zOgorCisgICAtIF8oKQorCisgICAgTWFyayBhbmQgdHJhbnNsYXRlIGEgc3RyaW5nLiBFLmcuOgorCisgICAgICAgIHByaW50ZihfKCJIRUFEIGlzIG5vdyBhdCAlcyIpLCBoZXgpOworCisgICAtIFFfKCkKKworICAgIE1hcmsgYW5kIHRyYW5zbGF0ZSBhIHBsdXJhbCBzdHJpbmcuIEUuZy46CisKKyAgICAgICAgcHJpbnRmKFFfKCIlZCBjb21taXQiLCAiJWQgY29tbWl0cyIsIG51bWJlcl9vZl9jb21taXRzKSk7CisKKyAgICBUaGlzIGlzIGp1c3QgYSB3cmFwcGVyIGZvciB0aGUgbmdldHRleHQoKSBmdW5jdGlvbi4KKworICAgLSBOXygpCisKKyAgICBBIG5vLW9wIHBhc3MtdGhyb3VnaCBtYWNybyBmb3IgbWFya2luZyBzdHJpbmdzIGluc2lkZSBzdGF0aWMKKyAgICBpbml0aWFsaXphdGlvbnMsIGUuZy46CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKnJlc2V0X3R5cGVfbmFtZXNbXSA9IHsKKyAgICAgICAgICAgIE5fKCJtaXhlZCIpLCBOXygic29mdCIpLCBOXygiaGFyZCIpLCBOXygibWVyZ2UiKSwgTl8oImtlZXAiKSwgTlVMTAorICAgICAgICB9OworCisgICAgQW5kIHRoZW4sIGxhdGVyOgorCisgICAgICAgIGRpZShfKCIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIpLAorICAgICAgICAgICAgICAgXyhyZXNldF90eXBlX25hbWVzW3Jlc2V0X3R5cGVdKSk7CisKKyAgICBIZXJlIF8oKSBjb3VsZG4ndCBoYXZlIHN0YXRpY2FsbHkgZGV0ZXJtaW5lZCB3aGF0IHRoZSB0cmFuc2xhdGlvbgorICAgIHN0cmluZyB3aWxsIGJlLCBidXQgc2luY2UgaXQgd2FzIGFscmVhZHkgbWFya2VkIGZvciB0cmFuc2xhdGlvbgorICAgIHdpdGggTl8oKSB0aGUgbG9vay11cCBpbiB0aGUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgc3VjY2VlZC4KKworU2hlbGw6CisKKyAtIFRoZSBHaXQgZ2V0dGV4dCBzaGVsbCBpbnRlcmZhY2UgaXMganVzdCBhIHdyYXBwZXIgZm9yCisgICBnZXR0ZXh0LnNoLiBJbXBvcnQgaXQgcmlnaHQgYWZ0ZXIgZ2l0LXNoLXNldHVwIGxpa2UgdGhpczoKKworICAgICAgIC4gZ2l0LXNoLXNldHVwCisgICAgICAgLiBnaXQtc2gtaTE4bgorCisgICBBbmQgdGhlbiB1c2UgdGhlIGdldHRleHQgb3IgZXZhbF9nZXR0ZXh0IGZ1bmN0aW9uczoKKworICAgICAgICMgRm9yIGNvbnN0YW50IGludGVyZmFjZSBtZXNzYWdlczoKKyAgICAgICBnZXR0ZXh0ICJBIG1lc3NhZ2UgZm9yIHRoZSB1c2VyIjsgZWNobworCisgICAgICAgIyBUbyBpbnRlcnBvbGF0ZSB2YXJpYWJsZXM6CisgICAgICAgZGV0YWlscz0ib2ggbm9lcyIKKyAgICAgICBldmFsX2dldHRleHQgIkFuIGVycm9yIG9jY3VycmVkOiBcJGRldGFpbHMiOyBlY2hvCisKKyAgIEluIGFkZGl0aW9uIHdlIGhhdmUgd3JhcHBlcnMgZm9yIG1lc3NhZ2VzIHRoYXQgZW5kIHdpdGggYSB0cmFpbGluZworICAgbmV3bGluZS4gSS5lLiB5b3UgY291bGQgd3JpdGUgdGhlIGFib3ZlIGFzOgorCisgICAgICAgIyBGb3IgY29uc3RhbnQgaW50ZXJmYWNlIG1lc3NhZ2VzOgorICAgICAgIGdldHRleHRsbiAiQSBtZXNzYWdlIGZvciB0aGUgdXNlciIKKworICAgICAgICMgVG8gaW50ZXJwb2xhdGUgdmFyaWFibGVzOgorICAgICAgIGRldGFpbHM9Im9oIG5vZXMiCisgICAgICAgZXZhbF9nZXR0ZXh0bG4gIkFuIGVycm9yIG9jY3VycmVkOiBcJGRldGFpbHMiCisKKyAgIE1vcmUgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgaW50ZXJmYWNlIGlzIGF2YWlsYWJsZSBpbiB0aGUgR05VIGluZm8KKyAgIHBhZ2U6IGBpbmZvICcoZ2V0dGV4dClzaCdgLiBMb29raW5nIGF0IGdpdC1hbS5zaCAodGhlIGZpcnN0IHNoZWxsCisgICBjb21tYW5kIHRvIGJlIHRyYW5zbGF0ZWQpIGZvciBleGFtcGxlcyBpcyBhbHNvIHVzZWZ1bDoKKworICAgICAgIGdpdCBsb2cgLS1yZXZlcnNlIC1wIC0tZ3JlcD1pMThuIGdpdC1hbS5zaAorCitQZXJsOgorCisgLSBUaGUgR2l0OjpJMThOIG1vZHVsZSBwcm92aWRlcyBhIGxpbWl0ZWQgc3Vic2V0IG9mIHRoZQorICAgTG9jYWxlOjpNZXNzYWdlcyBmdW5jdGlvbmFsaXR5LCBlLmcuOgorCisgICAgICAgdXNlIEdpdDo6STE4TjsKKyAgICAgICBwcmludCBfXygiV2VsY29tZSB0byBHaXQhXG4iKTsKKyAgICAgICBwcmludGYgX18oIlRoZSBmb2xsb3dpbmcgZXJyb3Igb2NjdXJyZWQ6ICVzXG4iKSwgJGVycm9yOworCisgICBSdW4gYHBlcmxkb2MgcGVybC9HaXQvSTE4Ti5wbWAgZm9yIG1vcmUgaW5mby4KKworCitUZXN0aW5nIG1hcmtlZCBzdHJpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V2ZW4gaWYgeW91J3ZlIGNvcnJlY3RseSBtYXJrZWQgcG9yY2VsYWluIHN0cmluZ3MgZm9yIHRyYW5zbGF0aW9uCitzb21ldGhpbmcgaW4gdGhlIHRlc3Qgc3VpdGUgbWlnaHQgc3RpbGwgZGVwZW5kIG9uIHRoZSBVUyBFbmdsaXNoCit2ZXJzaW9uIG9mIHRoZSBzdHJpbmdzLCBlLmcuIHRvIGdyZXAgc29tZSBlcnJvciBtZXNzYWdlIG9yIG90aGVyCitvdXRwdXQuCisKK1RvIHNtb2tlIG91dCBpc3N1ZXMgbGlrZSB0aGVzZSwgR2l0IHRlc3RlZCB3aXRoIGEgdHJhbnNsYXRpb24gbW9kZSB0aGF0CitlbWl0cyBnaWJiZXJpc2ggb24gZXZlcnkgY2FsbCB0byBnZXR0ZXh0LiBUbyB1c2UgaXQgcnVuIHRoZSB0ZXN0IHN1aXRlCit3aXRoIGl0LCBlLmcuOgorCisgICAgY2QgdCAmJiBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTj10cnVlIHByb3ZlIC1qIDkgLi90WzAtOV0qLnNoCisKK0lmIHRlc3RzIGJyZWFrIHdpdGggaXQgeW91IHNob3VsZCBpbnNwZWN0IHRoZW0gbWFudWFsbHkgYW5kIHNlZSBpZgord2hhdCB5b3UncmUgdHJhbnNsYXRpbmcgaXMgc2FuZSwgaS5lLiB0aGF0IHlvdSdyZSBub3QgdHJhbnNsYXRpbmcKK3BsdW1iaW5nIG91dHB1dC4KKworSWYgbm90IHlvdSBzaG91bGQgcmVwbGFjZSBjYWxscyB0byBncmVwIHdpdGggdGVzdF9pMThuZ3JlcCwgb3IKK3Rlc3RfY21wIGNhbGxzIHdpdGggdGVzdF9pMThuY21wLiBJZiB0aGF0J3Mgbm90IGVub3VnaCB5b3UgY2FuIHNraXAKK3RoZSB3aG9sZSB0ZXN0IGJ5IG1ha2luZyBpdCBkZXBlbmQgb24gdGhlIENfTE9DQUxFX09VVFBVVAorcHJlcmVxdWlzaXRlLiBTZWUgZXhpc3RpbmcgdGVzdCBmaWxlcyB3aXRoIHRoaXMgcHJlcmVxdWlzaXRlIGZvcgorZXhhbXBsZXMuCmRpZmYgLS1naXQgYS9wby9URUFNUyBiL3BvL1RFQU1TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiY2NlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9wby9URUFNUwpAQCAtMCwwICsxLDc4IEBACitDb3JlIEdpdCB0cmFuc2xhdGlvbiBsYW5ndWFnZSB0ZWFtcworKHBsZWFzZSBrZWVwIHRoZSBsaXN0IHNvcnRlZCBhbHBoYWJldGljYWxseSBvbiBsYW5ndWFnZSBmaWVsZCkKKworTGFuZ3VhZ2U6CWJnIChCdWxnYXJpYW4pCitSZXBvc2l0b3J5OglodHRwczovL2dpdGh1Yi5jb20vZ2l0LWwxMG4vZ2l0LXBvCitMZWFkZXI6CQlBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+CisKK0xhbmd1YWdlOgljYSAoQ2F0YWxhbikKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9Tb2Z0Y2F0YWxhL2dpdC1wbworTGVhZGVyOgkJSm9yZGkgTWFzIDxqbWFzQHNvZnRjYXRhbGEub3JnPgorTWVtYmVyczoJQWxleCBIZW5yaWUgPGFsZXhoZW5yaWUyNEBnbWFpbC5jb20+CisKK0xhbmd1YWdlOglkZSAoR2VybWFuKQorUmVwb3NpdG9yeToJaHR0cHM6Ly9naXRodWIuY29tL3J1ZXN0ZXIvZ2l0LXBvLWRlCitMZWFkZXI6CQlNYXR0aGlhcyBSw7xzdGVyIDxtYXR0aGlhcy5ydWVzdGVyQGdtYWlsLmNvbT4KK01lbWJlcnM6CVJhbGYgVGhpZWxvdyA8cmFsZi50aGllbG93QGdtYWlsLmNvbT4KKwkJUGhpbGxpcCBTemVsYXQgPHBoaWxsaXAuc3plbGF0QGdtYWlsLmNvbT4KKworTGFuZ3VhZ2U6CWVsIChHcmVlaykKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS92eXJ1c3MvZ2l0LXBvLWVsCitMZWFkZXI6CQlKaW1teSBBbmdlbGFrb3MgPHZ5cnVzc0BoZWxsdWcuZ3I+CisKK0xhbmd1YWdlOgllcyAoU3BhbmlzaCkKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9DaHJpc0FEUi9naXQtcG8KK0xlYWRlcjoJCUNocmlzdG9waGVyIETDrWF6IDxjaHJpc3RvcGhlci5kaWF6LnJpdkBnbWFpbC5jb20+CisKK0xhbmd1YWdlOglmciAoRnJlbmNoKQorUmVwb3NpdG9yeToJaHR0cHM6Ly9naXRodWIuY29tL2puYXZpbGEvZ2l0CitMZWFkZXI6CQlKZWFuLU5vw6tsIEF2aWxhIDxqbi5hdmlsYUBmcmVlLmZyPgorTWVtYmVyczoJU8OpYmFzdGllbiBIZWxsZXUgPGZsYXNoY29kZUBmbGFzaHR1eC5vcmc+CisKK0xhbmd1YWdlOglpcyAoSWNlbGFuZGljKQorTGVhZGVyOgkJw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+CisKK0xhbmd1YWdlOglpdCAoSXRhbGlhbikKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9BbGVzc2FuZHJvTWVudGkvZ2l0LXBvCitMZWFkZXI6CQlBbGVzc2FuZHJvIE1lbnRpIDxhbGVzc2FuZHJvLm1lbnRpQGFsZXNzYW5kcm9tZW50aS5pdD4KKworTGFuZ3VhZ2U6CWtvIChLb3JlYW4pCitSZXBvc2l0b3J5OglodHRwczovL2dpdGh1Yi5jb20vZ2l0LWwxMG4ta28vZ2l0LWwxMG4ta28vCitMZWFkZXI6CQlHd2FuLWd5ZW9uZyBNdW4gPGVsb25nYnVnQGdtYWlsLmNvbT4KK01lbWJlcnM6CUNoYW5nd29vIFJ5dSA8Y3dyeXVAZGViaWFuLm9yZz4KKwkJU2loeWVvbiBKYW5nIDx1bmVlZHNpaHllb25AZ21haWwuY29tPgorCitMYW5ndWFnZToJcHRfUFQgKFBvcnR1Z3Vlc2UgLSBQb3J0dWdhbCkKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS92YXNjb29sL2dpdC1wby1wdC8KK0xlYWRlcjoJCVZhc2NvIEFsbWVpZGEgPHZhc2NvbWFsbWVpZGFAc2Fwby5wdD4KK01lbWJlcnM6CU1hcmNvIFNvdXNhIDxtYXJjb21zb3VzYSBBVCBnbWFpbC5jb20+CisKK0xhbmd1YWdlOglydSAoUnVzc2lhbikKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9ESm0wMG4vZ2l0LXBvLXJ1LworTGVhZGVyOgkJRGltaXRyaXkgUnlhemFudGNldiA8REptMDBuIEFUIG1haWwucnU+CitNZW1iZXJzOglpbnNvbG9yIDxpbnNvbG9yIEFUIGdtYWlsLmNvbT4KKworTGFuZ3VhZ2U6CXN2IChTd2VkaXNoKQorUmVwb3NpdG9yeToJaHR0cHM6Ly9naXRodWIuY29tL25hZm1vL2dpdC1sMTBuLXN2LworTGVhZGVyOgkJUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+CisKK0xhbmd1YWdlOgl0ciAoVHVya2lzaCkKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9iaXRpZ2NoaS9naXQtcG8vCitMZWFkZXI6CQlFbWlyIFNBUkkgPGJpdGlnY2hpQG1lLmNvbT4KKworTGFuZ3VhZ2U6CXZpIChWaWV0bmFtZXNlKQorUmVwb3NpdG9yeToJaHR0cHM6Ly9naXRodWIuY29tL3Zud2lsZG1hbi9naXQvCitMZWFkZXI6CQlUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW4gQVQgZ21haWwuY29tPgorTWVtYmVyczoJTmd1eeG7hW4gVGjDoWkgTmfhu41jIER1eSA8cGNsb3VkcyBBVCBnbWFpbC5jb20+CisKK0xhbmd1YWdlOgl6aF9DTiAoU2ltcGxpZmllZCBDaGluZXNlKQorUmVwb3NpdG9yeToJaHR0cHM6Ly9naXRodWIuY29tL2ppYW5neGluL2dpdC8KK0xlYWRlcjoJCUppYW5nIFhpbiA8d29ybGRoZWxsby5uZXQgQVQgZ21haWwuY29tPgorTWVtYmVyczoJUmF5IENoZW4gPG9sZHNoYXJwIEFUIGdtYWlsLmNvbT4KKwkJ5L6d5LqRIDxsaWx5ZGp3ZyBBVCBnbWFpbC5jb20+CisJCUZhbmd5aSBaaG91IDxtZSBBVCBmYW5neWkuaW8+CisKK0xhbmd1YWdlOgl6aF9UVyAoVHJhZGl0aW9uYWwgQ2hpbmVzZSkKK1Jlc3Bvc2l0b3J5OglodHRwczovL2dpdGh1Yi5jb20vbDEwbi10dy9naXQtcG8KK0xlYWRlcjogCVlpLUp5dW4gUGFuIDxwYW45MzQxMiBBVCBnbWFpbC5jb20+CitNZW1iZXJzOglGcmFua2xpbiBXZW5nIDxmcmFua2xpbiBBVCBnb29kaG9yc2UuaWR2LnR3PgpkaWZmIC0tZ2l0IGEvcG8vYmcucG8gYi9wby9iZy5wbwppbmRleCA1YWY3OGYxLi43OTkwMzEzIDEwMDY0NAotLS0gYS9wby9iZy5wbworKysgYi9wby9iZy5wbwpAQCAtMSwxNSArMSwxNjggQEAKLSMgQnVsZ2FyaWFuIHRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgcG8tZmlsZS4KLSMgQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0LCAyMDE1LCAyMDE2IEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz4uCisjIEJ1bGdhcmlhbiB0cmFuc2xhdGlvbiBvZiBnaXQgcG8tZmlsZS4KKyMgQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1LCAyMDE2LCAyMDE3LCAyMDE4LCAyMDE5LCAyMDIwIEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz4uCiAjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQgcGFja2FnZS4KLSMgQWxleGFuZGVyIFNob3BvdiA8YXNoQGthbWJhbmFyaWEub3JnPiwgMjAxMiwgMjAxMywgMjAxNCwgMjAxNSwgMjAxNi4KKyMgQWxleGFuZGVyIFNob3BvdiA8YXNoQGthbWJhbmFyaWEub3JnPiwgMjAxNCwgMjAxNSwgMjAxNiwgMjAxNywgMjAxOCwgMjAxOSwgMjAyMC4KICMKLSMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09CisjIERJQ1RJT05BUlkgVE8gTUVSR0UgSU4gR0lUIEdVSQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcmFuZ2Ug0LTQuNCw0L/QsNC30L7QvQorIyBiYXNlINCx0LDQt9CwCisjIHRpcCDQstGA0YrRhQorIyB1bnJlYWNoYWJsZSBvYmplY3Qg0L3QtdC00L7RgdGC0LjQttC40Lwg0L7QsdC10LrRggorIyBkYW5nbGluZyBvYmplY3RzINC+0LHQtdC60YIg0LjQt9Cy0YrQvSDQutC70L7QvQorIyBmYXN0LWZvcndhcmQg0L/RgNC10LLRitGA0YLQsNC90LUKKyMgdHJlZS1sZXZlbCBtZXJnZSDRgtGA0LjQstC40LDQu9C90L4g0YHQu9C40LLQsNC90LUgKNGA0LDQt9C70LjRh9C90Lgg0YTQsNC50LvQvtCy0LUg0YHQsCDQv9GA0L7QvNC10L3Rj9C90LgsINGB0LvQuNCy0LAg0YHQtSDQutCw0YLQviDQtNGK0YDQstC+KQorIyBhdXRvbWF0aWMgbWVyZ2Ug0LDQstGC0L7QvNCw0YLQuNGH0L3QviDRgdC70LjQstCw0L3QtSAo0LXQtNC90LDQutCy0Lgg0YTQsNC50LvQvtCy0LUg0YHQsCDQv9GA0L7QvNC10L3Rj9C90LgsINC90L4g0LIg0L3QtdC/0YDQuNC/0L7QutGA0LjQstCw0YnQuCDRgdC1INGH0LDRgdGC0LgpCisjIHJlYWwgbWVyZ2Ug0YHRitGJ0LjQvdGB0LrQviDRgdC70LjQstCw0L3QtSAo0LAg0L3QtSDQv9GA0LXQstGK0YDRgtCw0L3QtSkKKyMgdGhyZWUtd2F5IG1lcmdlINGC0YDQvtC50L3QviDRgdC70LjQstCw0L3QtQorIyBvY3RvcHVzIG1lcmdlINC80L3QvtC20LXRgdGC0LLQtdC90L4g0YHQu9C40LLQsNC90LUKKyMgc3RhbGUgcmVtb3RlINGB0YLQsNGA0L4g0YXRgNCw0L3QuNC70LjRidC1CisjIHJlYmFzZSDQv9GA0LXQsdCw0LfQuNGA0LDQvAorIyBtZXJnZSBiYXNlINCx0LDQt9CwINC30LAg0YHQu9C40LLQsNC90LUKKyMgZm9yY2UgKHB1c2gpINC/0YDQuNC90YPQtNC40YLQtdC70L3QviDQuNC30YLQu9Cw0YHQutCy0LDQvAorIyBzdGFzaC9pbmRleCDQuNC90LTQtdC60YEKKyMgc3F1YXNoIGNvbW1pdCDQstC60LDRgNCy0LDQvCDQv9C+0LTQsNCy0LDQvdC1INCyINC/0YDQtdC00YXQvtC00L3QvtGC0L4KKyMgZml4dXAgY29tbWl0INCy0LrQsNGA0LLQsNC8INC/0L7QtNCw0LLQsNC90LUg0LIg0L/RgNC10LTRhdC+0LTQvdC+0YLQviDQsdC10Lcg0YHQu9C10LTQsAorIyByb290IGNvbW1pdCDQvdCw0YfQsNC70L3QviDQv9C+0LTQsNCy0LDQvdC1CisjIHJlbW90ZS10cmFja2luZyBicmFuY2gg0YHQu9C10LTRj9GJINC60LvQvtC9CisjIGdpdCBidW5kbGUg0L/RgNCw0YLQutCwINC90LAgZ2l0CisjIGJpc2VjdCDQtNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtQorIyBhbSDQv9GA0LjQu9Cw0LPQsNC8INC/0L7RgNC10LTQuNGG0LAg0L7RgiDQutGA0YrQv9C60LgKKyMgd29ya2luZyBkaXJlY3RvcnkvdHJlZSDigJQg0LLQuNC90LDQs9C4INGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4sIGdpdCDRgdC70LXQtNC4INGG0Y/Qu9C+0YLQviDQtNGK0YDQstC+LCDQsCDQvdC1INC00LjRgNC10LrRgtC+0YDQuNC4LCDRgNCw0LHQvtGC0L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQt9CwIGN3ZAorIyBzd2l0Y2ggdG8gYnJhbmNoINC/0YDQtdC80LjQvdCw0LLQsNC8INC60YrQvCDQutC70L7QvQorIyBzcGFyc2UgZW50cnkvYmxvYiDRh9Cw0YHRgtC40YfQvdC+INC40LfRgtC10LPQu9C10L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjy/Qv9GK0YIv0L7QsdC10LrRgi1CTE9CCisjIHJldmlzaW9uIHJhbmdlINC00LjQsNC/0LDQt9C+0L0g0L3QsCDQstC10YDRgdC40LjRgtC1CisjIGNvdmVyIGxldHRlciDQv9GA0LjQtNGA0YPQttCw0LLQsNGJ0L4g0L/QuNGB0LzQvgorIyByZWZlcmVuY2UgcmVwb3NpdG9yeSDQtdGC0LDQu9C+0L3QvdC+INGF0YDQsNC90LjQu9C40YnQtQorIyBncmFmdCDQv9GA0LjRgdCw0LTQutCwCisjIGdyYWZ0ZWQgcmVwb3NpdG9yeSDRhdGA0LDQvdC40LvQuNGJ0LUg0YEg0L/RgNC40YHQsNC20LTQsNC90LUKKyMgcmVwbGFjZSByZWZzINC30LDQvNC10YHRgtCy0LDRidC4INGD0LrQsNC30LDRgtC10LvQuAorIyBlbWJlZGRlZCByZXBvc2l0b3J5INCy0LPRgNCw0LTQtdC90L4v0LLRitGC0YDQtdGI0L3QviDRhdGA0LDQvdC40LvQuNGJ0LUgKNC00L7QsdCw0LLRj9C90LXRgtC+INC80YMg0LUg0LPRgNC10YjQutCwKQorIyB0aGluIHBhY2sg0YHRitC60YDQsNGC0LXQvSDQv9Cw0LrQtdGCCisjIHBhY2sgZmlsZSDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuworIyBzdGF0IChhIGZpbGUpINC/0L7Qu9GD0YfQsNCy0LDQvCDQuNC90YTQvtGA0LzQsNGG0LjRjyDRh9GA0LXQtyDigJ5zdGF04oCcICjQt9CwINGE0LDQudC7KQorIyBtaXhlZCByZXNldCDRgdC80LXRgdC10L3QviDQt9Cw0L3Rg9C70Y/QstCw0L3QtSAo0LjQvdC00LXQutGB0LAg0Lgg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINCx0LXQtyDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvikKKyMgc29mdCByZXNldCDQvNC10LrQviDQt9Cw0L3Rg9C70Y/QstCw0L3QtSAo0YHQsNC80L4g0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINCx0LXQtyDQuNC90LTQtdC60YHQsCDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvikKKyMgaGFyZCByZXNldCDQv9GK0LvQvdC+INC30LDQvdGD0LvRj9Cy0LDQvdC1ICjRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCwg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4pCisjIG1lcmdlIHJlc2V0INGB0LvRj9GC0L4g0LfQsNC90YPQu9GP0LLQsNC90LUgKNGG0LXQu9C40Y8g0LjQvdC00LXQutGBINC4INC+0YLRh9Cw0YHRgtC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IOKAlCDQsdC10Lcg0YTQsNC50LvQvtCy0LXRgtC1INGBINC/0YDQvtC80LXQvdC4INC80LXQttC00YMg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0Lgg0LjQvdC00LXQutGB0LApCisjIGtlZXAgcmVzZXQg0LfQsNC/0LDQt9Cy0LDRidC+INC30LDQvdGD0LvRj9Cy0LDQvdC1ICjQvtGC0YfQsNGB0YLQuCDQuNC90LTQtdC60YHQsCDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDigJQg0YTQsNC50LvQvtCy0LXRgtC1INGBINC/0YDQvtC80LXQvdC4INC+0YIg0L/QvtC00LDQstCw0L3QtdGC0L4g0Lgg4oCeSEVBROKAnCkKKyMgY29tbWl0LWlzaCDRg9C60LDQt9Cw0YLQtdC7INC60YrQvCDQv9C+0LTQsNCy0LDQvdC1CisjIHNlcXVlbmNlINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9C90L7RgdGCL9C/0L7RgNC10LTQuNGG0LAKKyMgd2hpdGVzcGFjZSBzeW1ib2wg0LfQvdCw0YbQuCDQt9CwINC40L3RgtC10YDQstCw0LvQuAorIyBzaG9ydGxvZyDRgdGK0LrRgNCw0YLQtdC90LjRjyDQttGD0YDQvdCw0LsKKyMgYmFja2luZyBzdG9yZSDQvNGP0YHRgtC+0YLQviDQt9CwINGB0YrRhdGA0LDQvdC10L3QuNC1CisjIHJlamVjdCDQvtGC0YXQstGK0YDQu9C10L3QviDQv9Cw0YDRh9C1CisjIHRvcGljIGJyYW5jaCDRgtC10LzQsNGC0LjRh9C10L0g0LrQu9C+0L0KKyMgZW1wdHkgaGVhZCDQstGA0YrRhSDQsdC10Lcg0LjRgdGC0L7RgNC40Y8KKyMgdHJlZS1pc2gg0YPQutCw0LfQsNGC0LXQuyDQutGK0Lwg0LTRitGA0LLQvgorIyBkaXJ0eSDQvdC10YfQuNGB0YIsINC80YDRitGB0LXQvSAo0YTQsNC50LssINC40L3QtNC10LrRgSkKKyMgZmFsbGJhY2sg0YDQtdC30LXRgNCy0LXQvSDQstCw0YDQuNCw0L3RggorIyBwYXRoc3BlYyBtYWdpYyDQvtC/0YbQuNGPINC30LAg0LzQsNCz0LjRh9C10YHQutC4INC/0YrRgtC40YnQsAorIyBiaXRtYXAgaW5kZXgg0LjQvdC00LXQutGBINC90LAg0LHQsNC30LAg0LHQuNGC0L7QstC4INC80LDRgdC60LgKKyMgbWFyayDQvNCw0YDQutC10YAKKyMgcGx1bWJpbmcg0LrQvtC80LDQvdC00Lgg0L7RgiDRgdC40YHRgtC10LzQvdC+INC90LjQstC+CisjIHBvcmNlbGFpbiDQutC+0LzQsNC90LTQuCDQvtGCINC/0L7RgtGA0LXQsdC40YLQtdC70YHQutC+INC90LjQstC+CisjIHBhY2sgW25vdW5dINC/0LDQutC10YLQtdC9INGE0LDQudC7IC0gZml4bWUgaW4gZ2xvc3NhcnkKKyMgcmVwYWNrINC/0YDQtdC/0LDQutC10YLQuNGA0LDQvAorIyBtYWlubGluZSDQsdCw0LfQvtCy0L4g0L/QvtC00LDQstCw0L3QtSAtINC/0YDQuCBjaGVycnktcGljayDQvdCwIG1lcmdlIC0g0LrRitC8INC60L7RjyDQstC10YDRgdC40Y8g0LTQsCDRgdC1INC40LfRh9C40YHQu9GP0LLQsCDRgNCw0LfQu9C40LrQsNGC0LAKKyMgdG9rZW4g0LvQtdC60YHQtdC80LAKKyMgdHJhaWxlciDQtdC/0LjQu9C+0LMv0LfQsNCy0YrRgNGI0LXQuiDQvdCwINGB0YrQvtCx0YnQtdC90LjQtQorIyBjd2Qg0YLQtdC60YPRidCwINGA0LDQsdC+0YLQvdCwINC00LjRgNC10LrRgtC+0YDQuNGPCisjIHVudHJhY2tlZCBjYWNoZSDQutC10Ygg0LfQsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1CisjIGJyb2tlbi9jb3JydXB0INC/0L7QstGA0LXQtNC10L0KKyMgcmVzdG9yZSDQstGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvAorIyBwcmVjaW91cyBvYmplY3RzIHJlcG8g0YXRgNCw0L3QuNC70LjRidC1INGBINCy0LDQttC90Lgg0L7QsdC10LrRgtC4CisjIGxpbmtlZCBjaGVja291dCDRgdCy0YrRgNC30LDQvdC+INC40LfRgtC10LPQu9GP0L3QtQorIyB0ZXJtINGD0L/RgNCw0LLQu9GP0LLQsNGJ0LAg0LTRg9C80LAgKNC30LAgZ2l0LWJpc2VjdCkKKyMgbWVyZ2V0YWcg0LXRgtC40LrQtdGCINC/0YDQuCDRgdC70LjQstCw0L3QtQorIyBwYWNrZmlsZSDQv9Cw0LrQtdGCCisjIHByb21pc29yeSDQs9Cw0YDQsNC90YLQuNGA0LDRiSwg0LPQsNGA0LDQvdGCIHByb21pc29yeSBwYWNrZmlsZSDQs9Cw0YDQsNC90YLQuNGA0LDRiSDQv9Cw0LrQtdGCLCBwcm9taXNvcnkgcmVtb3RlINGF0YDQsNC90LjQu9C40YnQtS3Qs9Cw0YDQsNC90YIKKyMgZGVsdGEgLSDRgNCw0LfQu9C40LrQsCwg0LTQtdC70YLQsCwg0L7QsdC10LrRgi3RgNCw0LfQu9C40LrQsAorIyA/PworIyBwZWVsZWQgdGFnIC0g0L/RgNC+0YHQu9C10LTRj9Cy0LDQvdC1INC90LAg0LXRgtC40LrQtdGCIC0g0LrQvtCz0LDRgtC+INC10YLQuNC60LXRgiDRgdC+0YfQuCDQutGK0Lwg0LTRgNGD0LMg0LXRgtC40LrQtdGCLCDQsCDQvdC1INC/0L7QtNCw0LLQsNC90LUg0Lgg0L/RgNC+0YHQu9C10LTRj9Cy0LDQvNC1INC/0L7QtNC+0LHQvdC+INC90LAg0YHQuNC80LLQvtC70L3QsCDQstGA0YrQt9C60LAKKyMgbmVzdGVkIHRhZyAtINC90LXQv9GA0Y/QuiDQtdGC0LjQutC10YIKKyMgc3RyaXAgLSDQv9GA0LXQvNCw0YXQstCw0LwgKNC30LAg0LrQvtC80L/QvtC90LXQvdGCINC/0YDQuCDRhNC40LvRgtGA0LjRgNCw0L3QtSkKKyMgdW5yZWxhdGVkIGhpc3RvcmllcyAtINC90LXQt9Cw0LLQuNGB0LjQvNC4INC40YHRgtC+0YDQuNC4CisjIGluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiDRgtGK0YDRgdC10L3QtSDQvdCwINC/0YDQtdC40LzQtdC90YPQstCw0L3QuNGPINC90LAg0L7QsdC10LrRgtC4INGB0YrRh9C10YLQsNC90Lgg0YEg0L/RgNC+0LzQtdC90LgKKyMgaHVuayDQv9Cw0YDRh9C1CisjIGJpbmFyeSBwYXRjaCDQtNCy0L7QuNGH0L3QsCDQutGA0YrQv9C60LAKKyMgcmV2ZXJzZS1hcHBseSDQv9GA0LjQu9Cw0LPQsNC8INCyINC+0LHRgNCw0YLQvdCwINC/0L7RgdC+0LrQsAorIyB0b2RvIGZpbGUg0YTQsNC50Lsg0YEg0LrQvtC80LDQvdC00LgKKyMgdG9kbyBjb21tYW5kINC30LDQv9C70LDQvdGD0LLQsNC90LAg0LrQvtC80LDQvdC00LAKKyMgYWx0ZXJuYXRlINCw0LvRgtC10YDQvdCw0YLQuNCy0LXQvSDQuNC30YLQvtGH0L3QuNC6CisjIHN1cGVycHJvamVjdCDQvtCx0YXQstCw0YnQsNGJINC/0YDQvtC10LrRggorIyBzcGxpdCBpbmRleCDRgNCw0LfQtNC10LvRj9C90LUg0L3QsCDQuNC90LTQtdC60YHQsAorIyB0cnVuY2F0ZSDQvtGC0YDRj9C30LLQsNC8CisjIGZvcm1hdCBzdHJpbmcg0YTQvtGA0LzQsNGC0LjRgNCw0Ykg0L3QuNC3CisjIGhvb2sg0LrRg9C60LAKKyMgaWdub3JlZCAoZmlsZSkg0LjQs9C90L7RgNC40YDQsNC9LCDQv9C+0L3Rj9C60L7Qs9CwIC0g0L/RgNC+0L/Rg9GB0L3QsNGCCisjIG1hbnVhbCwgbWFuIHBhZ2Ug0YDRitC60L7QstC+0LTRgdGC0LLQvgorIyBndWlkZSDQstGK0LLQtdC00LXQvdC40LUKKyMgcGFydGlhbCBjbG9uZSDQvdC10L/RitC70L3QviDRhdGA0LDQvdC40LvQuNGJ0LUKKyMgY291c2lucyDRgdC10YHRgtGA0LjQvdGB0LrQuCDQutC70L7QvdC4CisjIGV4cGlyYXRpb24gZGF0ZSDQtNCw0YLQsCDQvdCwINGB0YDQvtC6CisjIGlzIHdlbGwgZm9ybWVkINC1INC/0L4g0L/RgNCw0LLQuNC70LDRgtCwCisjIG5hbWVzcGFjZSDQv9GA0L7RgdGC0YDQsNC90YHRgtCy0L4g0L7RgiDQuNC80LXQvdCwCisjIHJlcG9zaXRvcnkgbGF5b3V0INGD0YHRgtGA0L7QudGB0YLQstC+INC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQvgorIyBjb2xsZWN0aW9uL3NlcmllcyBvZiBwYXRjaGVzINC/0L7RgNC10LTQuNGG0LAg0L7RgiDQutGA0YrQv9C60LgKKyMgcmVjaWV2ZSDQv9C+0LvRg9GH0LDQstCw0LwKKyMgQk9NINC80LDRgNC60LXRgCDQt9CwINC/0L7RgNC10LTQvdC+0YHRgtGC0LAg0L3QsCDQsdCw0LnRgtC+0LLQtdGC0LUKKyMgYWNrbm93bGVkZ21lbnQgbGluZSDRgNC10LQg0LfQsCDQv9C+0YLQstGK0YDQttC00LXQvdC40LUKKyMgd2FudGVkLXJlZiDQuNGB0LrQsNC9INGD0LrQsNC30LDRgtC10LsKKyMgY2h1bmsg0L7RgtC60YrRgQorIyBjbGVhbiBmaWx0ZXIg0LTQtdC60L7QtNC40YDQsNGJINGE0LjQu9GC0YrRgAorIyBzbXVkZ2UgZmlsdGVyINC60L7QtNC40YDQsNGJINGE0LjQu9GC0YrRgAorIyBsb29zZSBvYmplY3Qg0L3QtdC/0LDQutC10YLQuNGA0LDQvSDQvtCx0LXQutGCCisjIGZsdXNoINC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LHRg9GE0LXRgNC40YLQtQorIyBmbHVzaCBwYWNrZXQg0LjQt9GH0LjRgdGC0LLQsNGJINC/0LDQutC10YIKKyMgZm9yayDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQv9GA0L7RhtC10YEKKyMgY2FwYWJpbGl0aWVzINCy0YrQt9C80L7QttC90L7RgdGC0LgKKyMgcmVtb3RlLWhlbHBlciDQvdCw0YHRgNC10YnQvdCwINC/0L7QvNC+0YnQvdCwINC/0YDQvtCz0YDQsNC80LAKKyMgY29tbWFuZCBhbGlhcyDQv9GB0LXQstC00L7QvdC40Lwg0L3QsCDQutC+0LzQsNC90LTQsAorIyByZXJlcmUg0L/RgNC10LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQt9Cw0L/QsNC30LXQvdCwINC60L7RgNC10LrRhtC40Y8g0L3QsCDRgdC70LjQstCw0L3QtSDRgSDQutC+0L3RhNC70LjQutGCCisjIHByZWltYWdlINC/0YDQtdC00LLQsNGA0LjRgtC10LvQtdC9INCy0LDRgNC40LDQvdGCCisjIG9mZnNldCDQvtGC0LzQtdGB0YLQstCw0L3QtQorIyBtdWx0aS1wYWNrLWluZGV4INC40L3QtNC10LrRgSDQt9CwINC80L3QvtC20LXRgdGC0LLQviDQv9Cw0LrQtdGC0LgKKyMgcmFuZ2UgZGlmZiDQtNC40LDQv9Cw0LfQvtC90L3QsCDRgNCw0LfQu9C40LrQsAorIyBpbnRlciBkaWZmINGA0LDQt9C70LjQutCwINCyINGA0LDQt9C70LjQutC40YLQtQorIyBzc2wgYmFja2VuZCDRgNC10LDQu9C40LfQsNGG0LjRjyDQvdCwIFNTTAorIyBkZWx0YSBpc2xhbmQg0LPRgNGD0L/QsCDRgNCw0LfQu9C40LrQuAorIyBpc2xhbmQgbWFya3Mg0LPRgNCw0L3QuNGG0Lgg0L3QsCDQs9GA0YPQv9C40YLQtQorIyByZWZsb2cg0LbRg9GA0L3QsNC7INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtQorIyBoYXNoINC60L7QvdGC0YDQvtC70L3QsCDRgdGD0LzQsCwg0LjQt9GH0LjRgdC70Y/QstCw0L3QtSDQvdCwINC60L7QvdGC0YDQvtC70L3QsCDRgdGD0LzQsAorIyBmYW5vdXQg0L7RgtC60YrRgSAo0YDQsNC30L/QtdGA0LLQsNC90LU/Pz8pCisjIGlkeCAtIGluZGV4IG9mIHBhY2sgZmlsZSwgMSBpbmRleCBwZXIgMSBwYWNrZmlsZQorIyBtaWR4IC0gbXVsdGktcGFjayBpbmRleCwgZm9yIG9iamVjdHMgYWNyb3NzIG11bHRpcGxlIHBhY2tmaWxlcworIyBvdmVybGF5IG1vZGUgLSDQv9GA0LjQv9C+0LrRgNC40LLQsNGJINGA0LXQttC40LwgKNC/0YDQuCDQuNC30YLQtdCz0LvRj9C9ZSkKKyMgaW5jcmVtZW50YWwgZmlsZSDQvdCw0YDQsNGB0YLQstCw0Ykg0YTQsNC50LsKKyMgc3BsaXQgKGNvbW1pdC1ncmFwaHIpINGA0LDQt9C00YDQvtCx0LXQvSAo0LPRgNCw0YQg0YEg0L/QvtC00LDQstCw0L3QuNGPKQorIyBjbG9iYmVyIChhIHRhZykg0L/RgNC10LfQsNC/0LjRgdCy0LDQvCAo0LXRgtC40LrQtdGCKQorIyBibGFtZSDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQsNCy0YLQvtGA0YHRgtCy0L4KKyMgcmVmbmFtZSDQuNC80LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC7CisjIGNvbmUgcGF0dGVybiBtYXRjaGluZyDQv9GK0YLQtdCy0L7QtNC90L4g0L3QsNC/0LDRgdCy0LDQvdC1CisjIG5lZ2F0aXZlIHBhdHRlcm4g0L7RgtGA0LjRhtCw0YLQtdC70LXQvSDRiNCw0LHQu9C+0L0KKyMgY29sb3JlZCBodW5rL2RpZmYg0L7RhtCy0LXRgtC10L3QviDQv9Cw0YDRh9C1L9GA0LDQt9C70LjQutCwCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyDigJ4kdmFy4oCcIC0g0LzQvtC20LUg0LTQsCDQvdC1INGB0YDQsNCx0L7RgtCy0LAg0LfQsCBzaGVsbCDQuNC80LAgZ2V0dGV4dCDQuCBldmFsX2dldHRleHQgLSDQv9GA0L7QstC10YDQutCwIC0g0L3QsNC80LjRgNCw0YIg0YHQtSDQu9C10YHQvdC+INC/0L4g4oCeJAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRklYTUUKKyMgSEVBRCBhcyBhIHJlZmVyZW5jZSB2cyBoZWFkIG9mIGEgYnJhbmNoCisjIGdpdCB1cGRhdGUtaW5kZXggLWgg0LjQt9Cy0LXQttC00LAg0YHQsNC80L4g0LXQtNC40L0g0YDQtdC0LCDQsCDQvdC1INGG0Y/Qu9Cw0YLQsCDQv9C+0LzQvtGJINC30LAg0L7Qv9GG0LjQuNGC0LUKKyMgZ2l0IGZldGNoIC0tYWwg0YDQsNCx0L7RgtC4INC/0L7QtNC+0LHQvdC+INC90LAgLS1hbGwKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGV4cG9ydCBQT19GSUxFPWJnLnBvCisjIG1zZ2F0dHJpYiAtLW9ubHktZnV6enkgICRQT19GSUxFID4gdG9kbzEucG8KKyMgbXNnYXR0cmliIC0tdW50cmFuc2xhdGVkICAkUE9fRklMRSA+IHRvZG8yLnBvCisjIG1zZ2NhdCB0b2RvMS5wbyB0b2RvMi5wbyA+IHRvZG8ucG8KKyMgZ3JlcCAnXiM6ICcgdG9kby5wbyB8IHNlZCAncy9eIzogLy8nIHwgdHIgJyAnICdcbicgfCBzZWQgJ3MvOlswLTldKiQvLycgPiBGSUxFUworIyBmb3IgaSBpbiBgc29ydCAtdSBGSUxFU2A7IGRvIGNudD1gZ3JlcCAkaSBGSUxFUyB8IHdjIC1sYDsgZWNobyAkY250ICRpIDtkb25lIHwgc29ydCAtbgogbXNnaWQgIiIKIG1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aSBtYXN0ZXJcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTYtMTAtMTMgMTU6MTYrMDMwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMTAtMTMgMTU6MTYrMDMwMFxuIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0IDIuMjVcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAyMC0wMy0xMSAxNToyNiswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAyMC0wMy0xMiAwMDowMyswMTAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+XG4iCiAiTGFuZ3VhZ2UtVGVhbTogQnVsZ2FyaWFuIDxkaWN0QGZzYS1iZy5vcmc+XG4iCiAiTGFuZ3VhZ2U6IGJnXG4iCkBAIC0xOCwyNzkwICsxNzEsMjUxMjQgQEAKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiAiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCiAKLSM6IGdpdC1ndWkuc2g6ODY1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCi1tc2dzdHIgItCj0LrQsNC30LDQvSDQtSDQvdC10L/RgNCw0LLQuNC70LXQvSDRiNGA0LjRhNGCINCyIOKAniVz4oCcOiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT8iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0LXQvSDQsNC90LDQu9C40Lcg4oCUIOKAniVz4oCcLiIKIAotIzogZ2l0LWd1aS5zaDo5MTkKLW1zZ2lkICJNYWluIEZvbnQiCi1tc2dzdHIgItCe0YHQvdC+0LLQtdC9INGI0YDQuNGE0YIiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1MjEgYWRkLWludGVyYWN0aXZlLmM6ODIyIHNlcXVlbmNlci5jOjMxMjQKKyM6IHNlcXVlbmNlci5jOjM1NjIgYnVpbHRpbi9yZWJhc2UuYzo4NzUgYnVpbHRpbi9yZWJhc2UuYzoxNjg3CisjOiBidWlsdGluL3JlYmFzZS5jOjIwODYgYnVpbHRpbi9yZWJhc2UuYzoyMTMwCittc2dpZCAiY291bGQgbm90IHJlYWQgaW5kZXgiCittc2dzdHIgItC40L3QtNC10LrRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCiAKLSM6IGdpdC1ndWkuc2g6OTIwCi1tc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCi1tc2dzdHIgItCo0YDQuNGE0YIg0LfQsCDRgNCw0LfQu9C40LrQuNGC0LUv0LrQvtC90LfQvtC70LDRgtCwIgorIzogYWRkLWludGVyYWN0aXZlLmM6NTc2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjY5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI5NAorbXNnaWQgImJpbmFyeSIKK21zZ3N0ciAi0LTQstC+0LjRh9C90L4iCiAKLSM6IGdpdC1ndWkuc2g6OTM1IGdpdC1ndWkuc2g6OTQ5IGdpdC1ndWkuc2g6OTYyIGdpdC1ndWkuc2g6MTA1MiBnaXQtZ3VpLnNoOjEwNzEKLSM6IGdpdC1ndWkuc2g6MzE0NwotbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgotbXNnc3RyICJnaXQtZ3VpOiDRhNCw0YLQsNC70L3QsCDQs9GA0LXRiNC60LAiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2MzQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNzgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzMyCittc2dpZCAibm90aGluZyIKK21zZ3N0ciAi0L3QuNGJ0L4iCiAKLSM6IGdpdC1ndWkuc2g6OTM2Ci1tc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgotbXNnc3RyICLQmtC+0LzQsNC90LTQsNGC0LAgZ2l0INC70LjQv9GB0LLQsCDQsiDQv9GK0YLRjyAoUEFUSCkuIgorIzogYWRkLWludGVyYWN0aXZlLmM6NjM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzE0CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMyOQorbXNnaWQgInVuY2hhbmdlZCIKK21zZ3N0ciAi0L3Rj9C80LAg0L/RgNC+0LzQtdC90LgiCiAKLSM6IGdpdC1ndWkuc2g6OTYzCi1tc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCi1tc2dzdHIgItCd0LjQt9GK0YIg0YEg0LLQtdGA0YHQuNGP0YLQsCDQvdCwIEdpdCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQvdGC0LXRgNC/0YDQtdGC0LjRgNCw0L06IgorIzogYWRkLWludGVyYWN0aXZlLmM6NjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjQzCittc2dpZCAiVXBkYXRlIgorbXNnc3RyICLQntCx0L3QvtCy0Y/QstCw0L3QtSIKIAotIzogZ2l0LWd1aS5zaDo5ODgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iR2l0IHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWQuXG4iCi0iXG4iCi0iJXMgY2xhaW1zIGl0IGlzIHZlcnNpb24gJyVzJy5cbiIKLSJcbiIKLSIlcyByZXF1aXJlcyBhdCBsZWFzdCBHaXQgMS41LjAgb3IgbGF0ZXIuXG4iCi0iXG4iCi0iQXNzdW1lICclcycgaXMgdmVyc2lvbiAxLjUuMD9cbiIKLW1zZ3N0ciAiIgotItCS0LXRgNGB0LjRj9GC0LAg0L3QsCBHaXQg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0L/RgNC10LTQtdC70LXQvdCwLlxuIgotIlxuIgotItCS0LXRgNGB0LjRj9GC0LAg0L3QsCDigJ4lc+KAnCDQuNC30LPQu9C10LbQtNCwLCDRh9C1INC1IOKAniVz4oCcLlxuIgotIlxuIgotIuKAniVz4oCcINC40LfQuNGB0LrQstCwIEdpdCwg0LLQtdGA0YHQuNGPINC/0L7QvdC1IDEuNS4wLlxuIgotIlxuIgotItCU0LAg0YHQtSDQv9GA0LjQtdC80LUg0LvQuCwg0YfQtSDigJ4lc+KAnCDQtSDQstC10YDRgdC40Y8g4oCeMS41LjDigJw/XG4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2ODkgYWRkLWludGVyYWN0aXZlLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGFnZSAnJXMnIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LTQvtCx0LDQstGP0L3QtSDQsiDQuNC90LTQtdC60YHQsCDQvdCwIOKAniVz4oCcIgogCi0jOiBnaXQtZ3VpLnNoOjEyODUKLW1zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCi1tc2dzdHIgItCU0LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdCwIEdpdCDQvdC1INC1INC+0YLQutGA0LjRgtCwOiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY5NSBhZGQtaW50ZXJhY3RpdmUuYzo4ODQgc2VxdWVuY2VyLmM6MzMxNworIzogYnVpbHRpbi9yZWJhc2UuYzo4OTkKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgaW5kZXgiCittc2dzdHIgItC40L3QtNC10LrRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9C40YHQsNC9IgogCi0jOiBnaXQtZ3VpLnNoOjEzMTkKLW1zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgotbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQvNC40L3QtSDQutGK0Lwg0YDQvtC00LjRgtC10LvRgdC60LDRgtCwICDQtNC40YDQtdC60YLQvtGA0LjRjy4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInVwZGF0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ1cGRhdGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkINGE0LDQudC7INC+0LHQvdC+0LLQtdC9XG4iCittc2dzdHJbMV0gIiVkINGE0LDQudC70LAg0L7QsdC90L7QstC10L3QuFxuIgogCi0jOiBnaXQtZ3VpLnNoOjEzMjcKLW1zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCi1tc2dzdHIgItCT0L7Qu9C+INGF0YDQsNC90LjQu9C40YnQtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/QvtC70LfQstCwOiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcxNiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY3OAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAibm90ZTogJXMgaXMgdW50cmFja2VkIG5vdy5cbiIKK21zZ3N0ciAi0JHQldCb0JXQltCa0JA6IOKAniVz4oCcINCy0LXRh9C1INC90LUg0YHQtSDRgdC70LXQtNC4LlxuIgogCi0jOiBnaXQtZ3VpLnNoOjEzMzUKLW1zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAi0KDQsNCx0L7RgtC90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC70LjQv9GB0LLQsCIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcyMSBhcHBseS5jOjQxMTAgYnVpbHRpbi9jaGVja291dC5jOjI4MQorIzogYnVpbHRpbi9yZXNldC5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LfQsNC/0LjRgSDQsiDQutC10YjQsCDRh9GA0LXQtyDigJ5tYWtlX2NhY2hlX2VudHJ54oCcINC30LAg4oCeJXPigJwiCiAKLSM6IGdpdC1ndWkuc2g6MTUwNyBsaWIvY2hlY2tvdXRfb3AudGNsOjMwNgotbXNnaWQgIlJlZnJlc2hpbmcgZmlsZSBzdGF0dXMuLi4iCi1tc2dzdHIgItCe0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINGE0LDQudC70LDigKYiCi0KLSM6IGdpdC1ndWkuc2g6MTU2NwotbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCi1tc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0LfQsCDQv9GA0L7QvNC10L3QtdC90Lgg0YTQsNC50LvQvtCy0LXigKYiCi0KLSM6IGdpdC1ndWkuc2g6MTY0NQotbXNnaWQgIkNhbGxpbmcgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suLi4iCi1tc2dzdHIgItCa0YPQutCw0YLQsCDigJ5wcmVwYXJlLWNvbW1pdC1tc2figJwg0YHQtSDQuNC30L/RitC70L3Rj9Cy0LAg0LIg0LzQvtC80LXQvdGC0LDigKYiCi0KLSM6IGdpdC1ndWkuc2g6MTY2MgotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCi1tc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+INC1INC+0YLRhdCy0YrRgNC70LXQvdC+INC+0YIg0LrRg9C60LDRgtCwIOKAnnByZXBhcmUtY29tbWl0LW1zZ+KAnC4iCi0KLSM6IGdpdC1ndWkuc2g6MTgyMCBsaWIvYnJvd3Nlci50Y2w6MjUyCi1tc2dpZCAiUmVhZHkuIgotbXNnc3RyICLQk9C+0YLQvtCy0L4uIgotCi0jOiBnaXQtZ3VpLnNoOjE5ODQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iRGlzcGxheSBsaW1pdCAoZ3VpLm1heGZpbGVzZGlzcGxheWVkID0gJXMpIHJlYWNoZWQsIG5vdCBzaG93aW5nIGFsbCAlcyBmaWxlcy4iCi1tc2dzdHIgIiIKLSLQlNC+0YHRgtC40LPQvdCw0YIg0LUg0LzQsNC60YHQuNC80LDQu9C90LjRj9GCINGA0LDQt9C80LXRgCDQvdCwINGB0L/QuNGB0YrQutCwINC30LAg0LjQt9Cy0LXQttC00LDQvdC1KGd1aS4iCi0ibWF4ZmlsZXNkaXNwbGF5ZWQgPSAlcyksINGB0YrQvtGC0LLQtdGC0L3QviDQvdC1INGB0LAg0L/QvtC60LDQt9Cw0L3QuCDQstGB0LjRh9C60LggJXMg0YTQsNC50LvQsC4iCi0KLSM6IGdpdC1ndWkuc2g6MjEwNwotbXNnaWQgIlVubW9kaWZpZWQiCi1tc2dzdHIgItCd0LXQv9GA0L7QvNC10L3QtdC9IgotCi0jOiBnaXQtZ3VpLnNoOjIxMDkKLW1zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAi0J/RgNC+0LzQtdC90LXQvSwg0L3QviDQvdC1INC1INCyINC40L3QtNC10LrRgdCwIgotCi0jOiBnaXQtZ3VpLnNoOjIxMTAgZ2l0LWd1aS5zaDoyMTIyCi1tc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgItCSINC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSIKLQotIzogZ2l0LWd1aS5zaDoyMTExIGdpdC1ndWkuc2g6MjEyMwotbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICLQp9Cw0YHRgtC4INGB0LAg0LIg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgotCi0jOiBnaXQtZ3VpLnNoOjIxMTIgZ2l0LWd1aS5zaDoyMTI0Ci1tc2dpZCAiU3RhZ2VkIGZvciBjb21taXQsIG1pc3NpbmciCi1tc2dzdHIgItCSINC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSwg0L3QviDQu9C40L/RgdCy0LAiCi0KLSM6IGdpdC1ndWkuc2g6MjExNAotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICLQktC40LTRitGCINC90LAg0YTQsNC50LvQsCDQtSDRgdC80LXQvdC10L0sINC90L4g0L3QtSDQtSDQsiDQuNC90LTQtdC60YHQsCIKLQotIzogZ2l0LWd1aS5zaDoyMTE1IGdpdC1ndWkuc2g6MjExNgotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBvbGQgdHlwZSBzdGFnZWQgZm9yIGNvbW1pdCIKLW1zZ3N0ciAi0JLQuNC00YrRgiDQvdCwINGE0LDQudC70LAg0LUg0YHQvNC10L3QtdC9LCDQvdC+INC90L7QstC40Y/RgiDQstC40LQg0L3QtSDQtSDQsiDQuNC90LTQtdC60YHQsCIKLQotIzogZ2l0LWd1aS5zaDoyMTE3Ci1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIHN0YWdlZCIKLW1zZ3N0ciAi0JLQuNC00YrRgiDQvdCwINGE0LDQudC70LAg0LUg0YHQvNC10L3QtdC9INC4INC1INCyINC40L3QtNC10LrRgdCwIgotCi0jOiBnaXQtZ3VpLnNoOjIxMTgKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlIHN0YWdlZCwgbW9kaWZpY2F0aW9uIG5vdCBzdGFnZWQiCi1tc2dzdHIgItCS0LjQtNGK0YIg0L3QsCDRhNCw0LnQu9CwINC1INGB0LzQtdC90LXQvSDQsiDQuNC90LTQtdC60YHQsCwg0L3QviDQvdC1INC4INGB0YrQtNGK0YDQttCw0L3QuNC10YLQviIKLQotIzogZ2l0LWd1aS5zaDoyMTE5Ci1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZSBzdGFnZWQsIGZpbGUgbWlzc2luZyIKLW1zZ3N0ciAi0JLQuNC00YrRgiDQvdCwINGE0LDQudC70LAg0LUg0YHQvNC10L3QtdC9INCyINC40L3QtNC10LrRgdCwLCDQvdC+INGE0LDQudC70YrRgiDQu9C40L/RgdCy0LAiCi0KLSM6IGdpdC1ndWkuc2g6MjEyMQotbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAi0J3QtdGB0LvQtdC00LXQvSIKLQotIzogZ2l0LWd1aS5zaDoyMTI2Ci1tc2dpZCAiTWlzc2luZyIKLW1zZ3N0ciAi0JvQuNC/0YHQstCw0YkiCi0KLSM6IGdpdC1ndWkuc2g6MjEyNwotbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKLW1zZ3N0ciAi0JIg0LjQvdC00LXQutGB0LAg0LfQsCDQuNC30YLRgNC40LLQsNC90LUiCi0KLSM6IGdpdC1ndWkuc2g6MjEyOAotbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKLW1zZ3N0ciAi0JIg0LjQvdC00LXQutGB0LAg0LfQsCDQuNC30YLRgNC40LLQsNC90LUsINC90L4g0L7RidC1INCz0L4g0LjQvNCwIgotCi0jOiBnaXQtZ3VpLnNoOjIxMzAgZ2l0LWd1aS5zaDoyMTMxIGdpdC1ndWkuc2g6MjEzMiBnaXQtZ3VpLnNoOjIxMzMKLSM6IGdpdC1ndWkuc2g6MjEzNCBnaXQtZ3VpLnNoOjIxMzUKLW1zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgotbXNnc3RyICLQmNC30LjRgdC60LLQsCDQutC+0YDQuNCz0LjRgNCw0L3QtSDQv9GA0Lgg0YHQu9C40LLQsNC90LUiCi0KLSM6IGdpdC1ndWkuc2g6MjE3MAotbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCi1tc2dzdHIgItCh0YLQsNGA0YLQuNGA0LDQvdC1INC90LAg4oCeZ2l0a+KAnOKApiwg0LjQt9GH0LDQutCw0LnRgtC14oCmIgotCi0jOiBnaXQtZ3VpLnNoOjIxODIKLW1zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdGsgaW4gUEFUSCIKLW1zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIOKAnmdpdGvigJwg0LvQuNC/0YHQstCwINCyINC/0YrRgtC40YnQsNGC0LAsINC+0L/RgNC10LTQtdC70LXQvdC4INC+0YIg0L/RgNC+0LzQtdC90LvQuNCy0LDRgtCwIFBBVEguIgotCi0jOiBnaXQtZ3VpLnNoOjIyNDEKLW1zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKLW1zZ3N0ciAiIgotItCa0L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgZ3Vp4oCcINC70LjQv9GB0LLQsCDQsiDQv9GK0YLQuNGJ0LDRgtCwLCDQvtC/0YDQtdC00LXQu9C10L3QuCDQvtGCINC/0YDQvtC80LXQvdC70LjQstCw0YLQsCBQQVRILiIKLQotIzogZ2l0LWd1aS5zaDoyNjc2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDEKLW1zZ2lkICJSZXBvc2l0b3J5IgotbXNnc3RyICLQpdGA0LDQvdC40LvQuNGJ0LUiCi0KLSM6IGdpdC1ndWkuc2g6MjY3NwotbXNnaWQgIkVkaXQiCi1tc2dzdHIgItCg0LXQtNCw0LrRgtC40YDQsNC90LUiCi0KLSM6IGdpdC1ndWkuc2g6MjY3OSBsaWIvY2hvb3NlX3Jldi50Y2w6NTY3Ci1tc2dpZCAiQnJhbmNoIgotbXNnc3RyICLQmtC70L7QvSIKLQotIzogZ2l0LWd1aS5zaDoyNjgyIGxpYi9jaG9vc2VfcmV2LnRjbDo1NTQKLW1zZ2lkICJDb21taXRAQG5vdW4iCi1tc2dzdHIgItCf0L7QtNCw0LLQsNC90LUiCi0KLSM6IGdpdC1ndWkuc2g6MjY4NSBsaWIvbWVyZ2UudGNsOjEyNyBsaWIvbWVyZ2UudGNsOjE3NAotbXNnaWQgIk1lcmdlIgotbXNnc3RyICLQodC70LjQstCw0L3QtSIKLQotIzogZ2l0LWd1aS5zaDoyNjg2IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjMKLW1zZ2lkICJSZW1vdGUiCi1tc2dzdHIgItCe0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKLQotIzogZ2l0LWd1aS5zaDoyNjg5Ci1tc2dpZCAiVG9vbHMiCi1tc2dzdHIgItCa0L7QvNCw0L3QtNC4IgotCi0jOiBnaXQtZ3VpLnNoOjI2OTgKLW1zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKLW1zZ3N0ciAi0KDQsNC30LPQu9C10LbQtNCw0L3QtSDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQutC+0L/QuNC1IgotCi0jOiBnaXQtZ3VpLnNoOjI3MDQKLW1zZ2lkICJHaXQgQmFzaCIKLW1zZ3N0ciAiQmFzaCDQt9CwIEdpdCIKLQotIzogZ2l0LWd1aS5zaDoyNzE0Ci1tc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCi1tc2dzdHIgItCg0LDQt9Cz0LvQtdC20LTQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0LIg0YLQtdC60YPRidC40Y8g0LrQu9C+0L0iCi0KLSM6IGdpdC1ndWkuc2g6MjcxOAotbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCi1tc2dzdHIgItCg0LDQt9Cz0LvQtdC20LTQsNC90LUg0L3QsCDRgtC10LrRg9GJ0LjRjyDQutC70L7QveKApiIKLQotIzogZ2l0LWd1aS5zaDoyNzIzCi1tc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKLW1zZ3N0ciAi0JLQuNC30YPQsNC70LjQt9Cw0YbQuNGPINC90LAg0LjRgdGC0L7RgNC40Y/RgtCwINC90LAg0YLQtdC60YPRidC40Y8g0LrQu9C+0L0iCi0KLSM6IGdpdC1ndWkuc2g6MjcyNwotbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCi1tc2dzdHIgItCS0LjQt9GD0LDQu9C40LfQsNGG0LjRjyDQvdCwINC40YHRgtC+0YDQuNGP0YLQsCDQvdCwINCy0YHQuNGH0LrQuCDQutC70L7QvdC+0LLQtSIKLQotIzogZ2l0LWd1aS5zaDoyNzM0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCi1tc2dzdHIgItCg0LDQt9Cz0LvQtdC20LTQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0LIg4oCeJXPigJwiCi0KLSM6IGdpdC1ndWkuc2g6MjczNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCi1tc2dzdHIgItCS0LjQt9GD0LDQu9C40LfQsNGG0LjRjyDQvdCwINC40YHRgtC+0YDQuNGP0YLQsCDQvdCwIOKAniVz4oCcIgotCi0jOiBnaXQtZ3VpLnNoOjI3NDEgbGliL2RhdGFiYXNlLnRjbDo0MAotbXNnaWQgIkRhdGFiYXNlIFN0YXRpc3RpY3MiCi1tc2dzdHIgItCh0YLQsNGC0LjRgdGC0LjQutCwINC90LAg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCIKLQotIzogZ2l0LWd1aS5zaDoyNzQ0IGxpYi9kYXRhYmFzZS50Y2w6MzMKLW1zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKLW1zZ3N0ciAi0JrQvtC80L/RgNC10YHQuNGA0LDQvdC1INC90LAg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCIKLQotIzogZ2l0LWd1aS5zaDoyNzQ3Ci1tc2dpZCAiVmVyaWZ5IERhdGFiYXNlIgotbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC90LAg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCIKLQotIzogZ2l0LWd1aS5zaDoyNzU0IGdpdC1ndWkuc2g6Mjc1OCBnaXQtZ3VpLnNoOjI3NjIKLW1zZ2lkICJDcmVhdGUgRGVza3RvcCBJY29uIgotbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LjQutC+0L3QsCDQvdCwINGA0LDQsdC+0YLQvdC40Y8g0L/Qu9C+0YIiCi0KLSM6IGdpdC1ndWkuc2g6Mjc3MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjIwMQotbXNnaWQgIlF1aXQiCi1tc2dzdHIgItCh0L/QuNGA0LDQvdC1INC90LAg0L/RgNC+0LPRgNCw0LzQsNGC0LAiCi0KLSM6IGdpdC1ndWkuc2g6Mjc3OAotbXNnaWQgIlVuZG8iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NTUKK21zZ2lkICJSZXZlcnQiCiBtc2dzdHIgItCe0YLQvNGP0L3QsCIKIAotIzogZ2l0LWd1aS5zaDoyNzgxCi1tc2dpZCAiUmVkbyIKLW1zZ3N0ciAi0J/QvtCy0YLQvtGA0LXQvdC40LUiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NjcKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgSEVBRF57dHJlZX0iCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQURee3RyZWV94oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvSIKIAotIzogZ2l0LWd1aS5zaDoyNzg1IGdpdC1ndWkuc2g6MzM5OQotbXNnaWQgIkN1dCIKLW1zZ3N0ciAi0J7RgtGA0Y/Qt9Cy0LDQvdC1IgorIzogYWRkLWludGVyYWN0aXZlLmM6ODA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjMxCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJyZXZlcnRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInJldmVydGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkINGE0LDQudC7INGBINC+0YLQvNC10L3QtdC90Lgg0L/RgNC+0LzQtdC90LhcbiIKK21zZ3N0clsxXSAiJWQg0YTQsNC50LvQsCDRgSDQvtGC0LzQtdC90LXQvdC4INC/0YDQvtC80LXQvdC4XG4iCiAKLSM6IGdpdC1ndWkuc2g6Mjc4OCBnaXQtZ3VpLnNoOjM0MDIgZ2l0LWd1aS5zaDozNDc2IGdpdC1ndWkuc2g6MzU2MgotIzogbGliL2NvbnNvbGUudGNsOjY5Ci1tc2dpZCAiQ29weSIKLW1zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg1NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyB1bnRyYWNrZWQgZmlsZXMuXG4iCittc2dzdHIgItCd0Y/QvNCwINC90LXRgdC70LXQtNC10L3QuCDRhNCw0LnQu9C+0LLQtS5cbiIKIAotIzogZ2l0LWd1aS5zaDoyNzkxIGdpdC1ndWkuc2g6MzQwNQotbXNnaWQgIlBhc3RlIgotbXNnc3RyICLQn9C+0YHRgtCw0LLRj9C90LUiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4NjAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2ODkKK21zZ2lkICJBZGQgdW50cmFja2VkIgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0L3QtdGB0LvQtdC00LXQvdC4IgogCi0jOiBnaXQtZ3VpLnNoOjI3OTQgZ2l0LWd1aS5zaDozNDA4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyOAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOQotbXNnaWQgIkRlbGV0ZSIKLW1zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1IgorIzogYWRkLWludGVyYWN0aXZlLmM6ODg3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJhZGRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgImFkZGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkINGE0LDQudC7INC00L7QsdCw0LLQtdC9XG4iCittc2dzdHJbMV0gIiVkINGE0LDQudC70LAg0LTQvtCx0LDQstC10L3QuFxuIgogCi0jOiBnaXQtZ3VpLnNoOjI3OTggZ2l0LWd1aS5zaDozNDEyIGdpdC1ndWkuc2g6MzU2NiBsaWIvY29uc29sZS50Y2w6NzEKLW1zZ2lkICJTZWxlY3QgQWxsIgotbXNnc3RyICLQmNC30LHQuNGA0LDQvdC1INC90LAg0LLRgdC40YfQutC+IgorIzogYWRkLWludGVyYWN0aXZlLmM6OTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlcyIKK21zZ3N0ciAi0L/RgNC10L3QtdCx0YDQtdCz0LLQsNC90LUg0L3QsCDQvdC10YHQu9GP0YLQvtGC0L46IOKAniVz4oCcIgogCi0jOiBnaXQtZ3VpLnNoOjI4MDcKLW1zZ2lkICJDcmVhdGUuLi4iCi1tc2dzdHIgItCh0YrQt9C00LDQstCw0L3QteKApiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkyOSBhZGQtcGF0Y2guYzoxNjc1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkLlxuIgorbXNnc3RyICLQodCw0LzQviDQtNCy0L7QuNGH0L3QuCDRhNCw0LnQu9C+0LLQtSDRgdCwINC/0YDQvtC80LXQvdC10L3QuC5cbiIKIAotIzogZ2l0LWd1aS5zaDoyODEzCi1tc2dpZCAiQ2hlY2tvdXQuLi4iCi1tc2dzdHIgItCY0LfRgtC10LPQu9GP0L3QteKApiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkzMSBhZGQtcGF0Y2guYzoxNjczIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjaGFuZ2VzLlxuIgorbXNnc3RyICLQndGP0LzQsCDQv9GA0L7QvNC10L3QuC5cbiIKIAotIzogZ2l0LWd1aS5zaDoyODE5Ci1tc2dpZCAiUmVuYW1lLi4uIgotbXNnc3RyICLQn9GA0LXQuNC80LXQvdGD0LLQsNC90LXigKYiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzc2Cittc2dpZCAiUGF0Y2ggdXBkYXRlIgorbXNnc3RyICLQntCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC60YDRitC/0LrQsCIKIAotIzogZ2l0LWd1aS5zaDoyODI0Ci1tc2dpZCAiRGVsZXRlLi4uIgotbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LXigKYiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5NzQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzU0Cittc2dpZCAiUmV2aWV3IGRpZmYiCittc2dzdHIgItCf0YDQtdCz0LvQtdC0INC90LAg0YDQsNC30LvQuNC60LDRgtCwIgogCi0jOiBnaXQtZ3VpLnNoOjI4MjkKLW1zZ2lkICJSZXNldC4uLiIKLW1zZ3N0ciAi0J7RgtC80Y/QvdCwINC90LAg0L/RgNC+0LzQtdC90LjRgtC14oCmIgorIzogYWRkLWludGVyYWN0aXZlLmM6MTAwMgorbXNnaWQgInNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9GK0YLQuNGJ0LDRgtCwINGBINC/0YDQvtC80LXQvdC4IgogCi0jOiBnaXQtZ3VpLnNoOjI4MzkKLW1zZ2lkICJEb25lIgotbXNnc3RyICLQk9C+0YLQvtCy0L4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA0Cittc2dpZCAiYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC60YrQvCDQv9GA0L7QvNC10L3QuNGC0LUg0LIg0LjQvdC00LXQutGB0LAiCiAKLSM6IGdpdC1ndWkuc2g6Mjg0MQotbXNnaWQgIkNvbW1pdEBAdmVyYiIKLW1zZ3N0ciAi0J/QvtC00LDQstCw0L3QtSIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDYKK21zZ2lkICJyZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvbiIKK21zZ3N0ciAi0LLRgNGK0YnQsNC90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0LjQvdC00LXQutGB0LAg0LrRitC8INGB0L7Rh9C10L3QvtGC0L4g0L7RgiDigJ5IRUFE4oCcIgogCi0jOiBnaXQtZ3VpLnNoOjI4NTAgZ2l0LWd1aS5zaDozMzM1Ci1tc2dpZCAiTmV3IENvbW1pdCIKLW1zZ3N0ciAi0J3QvtCy0L4g0L/QvtC00LDQstCw0L3QtSIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDgKK21zZ2lkICJwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHkiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QuCDQuNC30LHQvtGAINC4INC/0YDQvtC80Y/QvdCwINC90LAg0L/QsNGA0YfQtdGC0LAg0LrQvtC0IgogCi0jOiBnaXQtZ3VpLnNoOjI4NTggZ2l0LWd1aS5zaDozMzQyCi1tc2dpZCAiQW1lbmQgTGFzdCBDb21taXQiCi1tc2dzdHIgItCf0L7Qv9GA0LDQstGP0L3QtSDQvdCwINC/0L7RgdC70LXQtNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEwCittc2dpZCAidmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgItGA0LDQt9C70LjQutCwINC80LXQttC00YMg0YHQvtGH0LXQvdC+0YLQviDQvtGCIOKAnkhFQUTigJwg0Lgg0LjQvdC00LXQutGB0LAiCiAKLSM6IGdpdC1ndWkuc2g6Mjg2OCBnaXQtZ3VpLnNoOjMyOTYgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDEKLW1zZ2lkICJSZXNjYW4iCi1tc2dzdHIgItCe0LHQvdC+0LLRj9Cy0LDQvdC1IgorIzogYWRkLWludGVyYWN0aXZlLmM6MTAxMgorbXNnaWQgImFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0LrRitC8INC40L3QtNC10LrRgdCwIgogCi0jOiBnaXQtZ3VpLnNoOjI4NzQKLW1zZ2lkICJTdGFnZSBUbyBDb21taXQiCi1tc2dzdHIgItCa0YrQvCDQuNC90LTQtdC60YHQsCDQt9CwINC/0L7QtNCw0LLQsNC90LUiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDIwIGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjkKK21zZ2lkICJQcm9tcHQgaGVscDoiCittc2dzdHIgItCf0L7QvNC+0Yk6IgogCi0jOiBnaXQtZ3VpLnNoOjI4ODAKLW1zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKLW1zZ3N0ciAi0JLRgdC40YfQutC4INC/0YDQvtC80LXQvdC10L3QuCDRhNCw0LnQu9C+0LLQtSDQutGK0Lwg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorIzogYWRkLWludGVyYWN0aXZlLmM6MTAyMgorbXNnaWQgInNlbGVjdCBhIHNpbmdsZSBpdGVtIgorbXNnc3RyICLQuNC30LHQvtGAINC90LAgZdC00LjQvSDQtdC70LXQvNC10L3RgiIKIAotIzogZ2l0LWd1aS5zaDoyODg2Ci1tc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKLW1zZ3N0ciAi0JjQt9Cy0LDQttC00LDQvdC1INC+0YIg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorIzogYWRkLWludGVyYWN0aXZlLmM6MTAyNAorbXNnaWQgInNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zIgorbXNnc3RyICLQuNC30LHQvtGAINC90LAg0L/QvtGA0LXQtNC40YbQsCDQvtGCINC10LvQtdC80LXQvdGC0LgiCiAKLSM6IGdpdC1ndWkuc2g6Mjg5MiBsaWIvaW5kZXgudGNsOjQ0MgotbXNnaWQgIlJldmVydCBDaGFuZ2VzIgotbXNnc3RyICLQktGA0YrRidCw0L3QtSDQvdCwINC+0YDQuNCz0LjQvdCw0LvQsCIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMjYKK21zZ2lkICJzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzIgorbXNnc3RyICLQuNC30LHQvtGAINC90LAg0L3Rj9C60L7Qu9C60L4g0L/QvtGA0LXQtNC40YbQuCDQvtGCINC10LvQtdC80LXQvdGC0LgiCiAKLSM6IGdpdC1ndWkuc2g6MjkwMCBnaXQtZ3VpLnNoOjM2MTMgZ2l0LWd1aS5zaDozNjQ0Ci1tc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCi1tc2dzdHIgItCf0L4t0LzQsNC70LrQviDQutC+0L3RgtC10LrRgdGCIgorIzogYWRkLWludGVyYWN0aXZlLmM6MTAyOCBhZGQtaW50ZXJhY3RpdmUuYzoxMDczCittc2dpZCAic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIKK21zZ3N0ciAi0LjQt9Cx0L7RgCDQvdCwINCx0LDQt9Cw0YLQsCDQvdCwINGD0L3QuNC60LDQu9C10L0g0L/RgNC10YTQuNC60YEiCiAKLSM6IGdpdC1ndWkuc2g6MjkwNCBnaXQtZ3VpLnNoOjM2MTcgZ2l0LWd1aS5zaDozNjQ4Ci1tc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCi1tc2dzdHIgItCf0L7QstC10YfQtSDQutC+0L3RgtC10LrRgdGCIgorIzogYWRkLWludGVyYWN0aXZlLmM6MTAzMAorbXNnaWQgInVuc2VsZWN0IHNwZWNpZmllZCBpdGVtcyIKK21zZ3N0ciAi0LjQt9Cy0LDQttC00LDQvdC1INC90LAg0YPQutCw0LfQsNC90L7RgtC+INC+0YIg0LjQt9Cx0L7RgNCwIgogCi0jOiBnaXQtZ3VpLnNoOjI5MTEgZ2l0LWd1aS5zaDozMzA5IGdpdC1ndWkuc2g6MzQyMwotbXNnaWQgIlNpZ24gT2ZmIgotbXNnc3RyICLQn9C+0LTQv9C40YHQstCw0L3QtSIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMzIKK21zZ2lkICJjaG9vc2UgYWxsIGl0ZW1zIgorbXNnc3RyICLQuNC30LHQvtGAINC90LAg0LLRgdC40YfQutC4INC10LvQtdC80LXQvdGC0LgiCiAKLSM6IGdpdC1ndWkuc2g6MjkyNwotbXNnaWQgIkxvY2FsIE1lcmdlLi4uIgotbXNnc3RyICLQm9C+0LrQsNC70L3QviDRgdC70LjQstCw0L3QteKApiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMzQKK21zZ2lkICIoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIijQv9GA0LDQt9C90L4pINC/0YDQuNC60LvRjtGH0LLQsNC90LUg0L3QsCDQuNC30LHQuNGA0LDQvdC10YLQviIKIAotIzogZ2l0LWd1aS5zaDoyOTMyCi1tc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCi1tc2dzdHIgItCf0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGB0LvQuNCy0LDQvdC14oCmIgorIzogYWRkLWludGVyYWN0aXZlLmM6MTA3MQorbXNnaWQgInNlbGVjdCBhIG51bWJlcmVkIGl0ZW0iCittc2dzdHIgItC40LfQsdC+0YAg0L3QsCDQvdC+0LzQtdGA0LjRgNCw0L0g0LXQu9C10LzQtdC90YIiCiAKLSM6IGdpdC1ndWkuc2g6Mjk0NCBnaXQtZ3VpLnNoOjI5NzIKLW1zZ2lkICJBZGQuLi4iCi1tc2dzdHIgItCU0L7QsdCw0LLRj9C90LXigKYiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDc1Cittc2dpZCAiKGVtcHR5KSBzZWxlY3Qgbm90aGluZyIKK21zZ3N0ciAiKNC/0YDQsNC30L3Qvikg0LHQtdC3INC40LfQsdC+0YAg0L3QsCDQvdC40YnQviIKIAotIzogZ2l0LWd1aS5zaDoyOTQ4Ci1tc2dpZCAiUHVzaC4uLiIKLW1zZ3N0ciAi0JjQt9GC0LvQsNGB0LrQstCw0L3QteKApiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwODMgYnVpbHRpbi9jbGVhbi5jOjgyMiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NTEKK21zZ2lkICIqKiogQ29tbWFuZHMgKioqIgorbXNnc3RyICLil4/il4/il48g0JrQvtC80LDQvdC00Lgg4peP4peP4pePIgogCi0jOiBnaXQtZ3VpLnNoOjI5NTIKLW1zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgotbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDQutC70L7QveKApiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwODQgYnVpbHRpbi9jbGVhbi5jOjgyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NDgKK21zZ2lkICJXaGF0IG5vdyIKK21zZ3N0ciAi0JjQt9Cx0L7RgCDQvdCwINGB0LvQtdC00LLQsNGJ0L4g0LTQtdC50YHRgtCy0LjQtSIKIAotIzogZ2l0LWd1aS5zaDoyOTYyIGdpdC1ndWkuc2g6MzU5NQotbXNnaWQgIk9wdGlvbnMuLi4iCi1tc2dzdHIgItCe0L/RhtC40LjigKYiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAic3RhZ2VkIgorbXNnc3RyICLQsiDQuNC90LTQtdC60YHQsCIKIAotIzogZ2l0LWd1aS5zaDoyOTczCi1tc2dpZCAiUmVtb3ZlLi4uIgotbXNnc3RyICLQn9GA0LXQvNCw0YXQstCw0L3QteKApiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMzYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJ1bnN0YWdlZCIKK21zZ3N0ciAi0LjQt9Cy0YrQvSDQuNC90LTQtdC60YHQsCIKIAotIzogZ2l0LWd1aS5zaDoyOTgyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUKLW1zZ2lkICJIZWxwIgotbXNnc3RyICLQn9C+0LzQvtGJIgotCi0jOiBnaXQtZ3VpLnNoOjI5ODYgZ2l0LWd1aS5zaDoyOTkwIGxpYi9hYm91dC50Y2w6MTQKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFib3V0ICVzIgotbXNnc3RyICLQntGC0L3QvtGB0L3QviAlcyIKLQotIzogZ2l0LWd1aS5zaDozMDE0Ci1tc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCi1tc2dzdHIgItCU0L7QutGD0LzQtdC90YLQsNGG0LjRjyDQsiDQmNC90YLQtdGA0L3QtdGCIgotCi0jOiBnaXQtZ3VpLnNoOjMwMTcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxCi1tc2dpZCAiU2hvdyBTU0ggS2V5IgotbXNnc3RyICLQn9C+0LrQsNC30LLQsNC90LUg0L3QsCDQutC70Y7Rh9CwINC30LAgU1NIIgotCi0jOiBnaXQtZ3VpLnNoOjMwMzIgZ2l0LWd1aS5zaDozMTY0Ci1tc2dpZCAidXNhZ2U6IgotbXNnc3RyICLRg9C/0L7RgtGA0LXQsdCwOiIKLQotIzogZ2l0LWd1aS5zaDozMDM2IGdpdC1ndWkuc2g6MzE2OAotbXNnaWQgIlVzYWdlIgotbXNnc3RyICLQo9C/0L7RgtGA0LXQsdCwIgotCi0jOiBnaXQtZ3VpLnNoOjMxMTcgbGliL2JsYW1lLnRjbDo1NzMKLW1zZ2lkICJFcnJvciIKLW1zZ3N0ciAi0JPRgNC10YjQutCwIgotCi0jOiBnaXQtZ3VpLnNoOjMxNDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKLW1zZ3N0ciAiIgotItCk0JDQotCQ0JvQndCQINCT0KDQldCo0JrQkDog0L/RitGC0Y/RgiAlcyDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGCOiDRgtCw0LrRitCyINGE0LDQudC7INC40LvQuCDQtNC40YDQtdC60YLQvtGA0LjRjyAiCi0i0L3Rj9C80LAiCi0KLSM6IGdpdC1ndWkuc2g6MzE4MQotbXNnaWQgIkN1cnJlbnQgQnJhbmNoOiIKLW1zZ3N0ciAi0KLQtdC60YPRiSDQutC70L7QvToiCi0KLSM6IGdpdC1ndWkuc2g6MzIwNgotbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCi1tc2dzdHIgItCf0YDQvtC80LXQvdC4INC40LfQstGK0L0g0LjQvdC00LXQutGB0LAiCi0KLSM6IGdpdC1ndWkuc2g6MzIyOAotbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCi1tc2dzdHIgItCf0YDQvtC80LXQvdC4INCyINC40L3QtNC10LrRgdCwICjQt9CwINC/0L7QtNCw0LLQsNC90LUpIgotCi0jOiBnaXQtZ3VpLnNoOjMzMDIKLW1zZ2lkICJTdGFnZSBDaGFuZ2VkIgotbXNnc3RyICLQmNC90LTQtdC60YHRitGCINC1INC/0YDQvtC80LXQvdC10L0iCi0KLSM6IGdpdC1ndWkuc2g6MzMyMSBsaWIvdHJhbnNwb3J0LnRjbDoxMzcKLW1zZ2lkICJQdXNoIgotbXNnc3RyICLQmNC30YLQu9Cw0YHQutCy0LDQvdC1IgotCi0jOiBnaXQtZ3VpLnNoOjMzNTYKLW1zZ2lkICJJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAi0J/RitGA0LLQvtC90LDRh9Cw0LvQvdC+INGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtToiCi0KLSM6IGdpdC1ndWkuc2g6MzM1NwotbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICLQn9C+0L/RgNCw0LLQtdC90L4g0YHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1OiIKLQotIzogZ2l0LWd1aS5zaDozMzU4Ci1tc2dpZCAiQW1lbmRlZCBJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAi0J/QvtC/0YDQsNCy0LXQvdC+INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QviDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LU6IgotCi0jOiBnaXQtZ3VpLnNoOjMzNTkKLW1zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAi0J/QvtC/0YDQsNCy0LXQvdC+INGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSDRgdGK0YEg0YHQu9C40LLQsNC90LU6IgotCi0jOiBnaXQtZ3VpLnNoOjMzNjAKLW1zZ2lkICJNZXJnZSBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgItCh0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSDRgdGK0YEg0YHQu9C40LLQsNC90LU6IgotCi0jOiBnaXQtZ3VpLnNoOjMzNjEKLW1zZ2lkICJDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgItCh0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtToiCi0KLSM6IGdpdC1ndWkuc2g6MzQxNSBnaXQtZ3VpLnNoOjM1NzAgbGliL2NvbnNvbGUudGNsOjczCi1tc2dpZCAiQ29weSBBbGwiCi1tc2dzdHIgItCa0L7Qv9C40YDQsNC90LUg0L3QsCDQstGB0LjRh9C60L4iCi0KLSM6IGdpdC1ndWkuc2g6MzQzOSBsaWIvYmxhbWUudGNsOjEwNQotbXNnaWQgIkZpbGU6IgotbXNnc3RyICLQpNCw0LnQuzoiCi0KLSM6IGdpdC1ndWkuc2g6MzU1OAotbXNnaWQgIlJlZnJlc2giCi1tc2dzdHIgItCe0LHQvdC+0LLRj9Cy0LDQvdC1IgotCi0jOiBnaXQtZ3VpLnNoOjM1NzkKLW1zZ2lkICJEZWNyZWFzZSBGb250IFNpemUiCi1tc2dzdHIgItCf0L4t0LXQtNGK0YAg0YjRgNC40YTRgiIKLQotIzogZ2l0LWd1aS5zaDozNTgzCi1tc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICLQn9C+LdC00YDQtdCx0LXQvSDRiNGA0LjRhNGCIgotCi0jOiBnaXQtZ3VpLnNoOjM1OTEgbGliL2JsYW1lLnRjbDoyOTQKLW1zZ2lkICJFbmNvZGluZyIKLW1zZ3N0ciAi0JrQvtC00LjRgNCw0L3QtSIKLQotIzogZ2l0LWd1aS5zaDozNjAyCi1tc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgotbXNnc3RyICLQn9GA0LjQu9Cw0LPQsNC90LUv0LLRgNGK0YnQsNC90LUg0L3QsCDQv9Cw0YDRh9C1IgotCi0jOiBnaXQtZ3VpLnNoOjM2MDcKLW1zZ2lkICJBcHBseS9SZXZlcnNlIExpbmUiCi1tc2dzdHIgItCf0YDQuNC70LDQs9Cw0L3QtS/QstGA0YrRidCw0L3QtSDQvdCwINGA0LXQtCIKLQotIzogZ2l0LWd1aS5zaDozNjI2Ci1tc2dpZCAiUnVuIE1lcmdlIFRvb2wiCi1tc2dzdHIgItCY0LfQv9GK0LvQvdC10L3QuNC1INC90LAg0L/RgNC+0LPRgNCw0LzQsNGC0LAg0LfQsCDRgdC70LjQstCw0L3QtSIKLQotIzogZ2l0LWd1aS5zaDozNjMxCi1tc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgotbXNnc3RyICLQktC10YDRgdC40Y8g0L7RgiDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IgotCi0jOiBnaXQtZ3VpLnNoOjM2MzUKLW1zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKLW1zZ3N0ciAi0JvQvtC60LDQu9C90LAg0LLQtdGA0YHQuNGPIgotCi0jOiBnaXQtZ3VpLnNoOjM2MzkKLW1zZ2lkICJSZXZlcnQgVG8gQmFzZSIKLW1zZ3N0ciAi0JLRgNGK0YnQsNC90LUg0LrRitC8INGA0L7QtNC40YLQtdC70YHQutCw0YLQsCDQstC10YDRgdC40Y8iCi0KLSM6IGdpdC1ndWkuc2g6MzY1NwotbXNnaWQgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgItCS0LjQt9GD0LDQu9C40LfQuNGA0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INCyINC/0L7QtNC80L7QtNGD0LvQsCIKLQotIzogZ2l0LWd1aS5zaDozNjYxCi1tc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAi0JLQuNC30YPQsNC70LjQt9Cw0YbQuNGPINC90LAg0LjRgdGC0L7RgNC40Y/RgtCwINC90LAg0YLQtdC60YPRidC40Y8g0LrQu9C+0L0g0LIg0LjRgdGC0L7RgNC40Y/RgtCwINC30LAg0L/QvtC00LzQvtC00YPQu9CwIgotCi0jOiBnaXQtZ3VpLnNoOjM2NjUKLW1zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgItCS0LjQt9GD0LDQu9C40LfQsNGG0LjRjyDQvdCwINC40YHRgtC+0YDQuNGP0YLQsCDQvdCwINCy0YHQuNGH0LrQuCDQutC70L7QvdC4INCyINC40YHRgtC+0YDQuNGP0YLQsCDQt9CwINC/0L7QtNC80L7QtNGD0LvQsCIKLQotIzogZ2l0LWd1aS5zaDozNjcwCi1tc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICLQodGC0LDRgNGC0LjRgNCw0L3QtSDQvdCwIOKAnmdpdCBndWnigJwg0LfQsCDQv9C+0LTQvNC+0LTRg9C70LAiCi0KLSM6IGdpdC1ndWkuc2g6MzcwNQotbXNnaWQgIlVuc3RhZ2UgSHVuayBGcm9tIENvbW1pdCIKLW1zZ3N0ciAi0JjQt9Cy0LDQttC00LDQvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0L7RgiDQv9C+0LTQsNCy0LDQvdC10YLQviIKLQotIzogZ2l0LWd1aS5zaDozNzA3Ci1tc2dpZCAiVW5zdGFnZSBMaW5lcyBGcm9tIENvbW1pdCIKLW1zZ3N0ciAi0JjQt9Cy0LDQttC00LDQvdC1INC90LAg0YDQtdC00L7QstC10YLQtSDQvtGCINC/0L7QtNCw0LLQsNC90LXRgtC+IgorIzogYWRkLWludGVyYWN0aXZlLmM6MTEzNiBhcHBseS5jOjQ5NjcgYXBwbHkuYzo0OTcwIGJ1aWx0aW4vYW0uYzoyMjUxCisjOiBidWlsdGluL2FtLmM6MjI1NCBidWlsdGluL2Nsb25lLmM6MTIzIGJ1aWx0aW4vZmV0Y2guYzoxNDQKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzQgYnVpbHRpbi9wdWxsLmM6MTg5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MDkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk3CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwMiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwNQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJwYXRoIgorbXNnc3RyICLQv9GK0YIiCiAKLSM6IGdpdC1ndWkuc2g6MzcwOQotbXNnaWQgIlVuc3RhZ2UgTGluZSBGcm9tIENvbW1pdCIKLW1zZ3N0ciAi0JjQt9Cy0LDQttC00LDQvdC1INC90LAg0YDQtdC00LAg0L7RgiDQv9C+0LTQsNCy0LDQvdC10YLQviIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExNDMKK21zZ2lkICJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAi0LjQvdC00LXQutGB0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7QsdC90L7QstC10L0iCiAKLSM6IGdpdC1ndWkuc2g6MzcxMgotbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKLW1zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC/0LDRgNGH0LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSIKKyMKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExNTcgYnVpbHRpbi9jbGVhbi5jOjc4NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnllLlxuIgorbXNnc3RyICLQmNC30YXQvtC0LlxuIgogCi0jOiBnaXQtZ3VpLnNoOjM3MTQKLW1zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgotbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0YDQtdC00L7QstC10YLQtSDQt9CwINC/0L7QtNCw0LLQsNC90LUiCisjOiBhZGQtcGF0Y2guYzozMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0L/RgNC+0LzRj9C90LDRgtCwINC90LAg0L/RgNCw0LLQsNGC0LAg0LfQsCDQtNC+0YHRgtGK0L8gW3ksbixxLGEsZCVzLD9dPyAiCiAKLSM6IGdpdC1ndWkuc2g6MzcxNgotbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKLW1zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGA0LXQtNCwINC30LAg0L/QvtC00LDQstCw0L3QtSIKKyM6IGFkZC1wYXRjaC5jOjM0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDQuNC30YLRgNC40LLQsNC90LXRgtC+IFt5LG4scSxhLGQlcyw/XT8gIgogCi0jOiBnaXQtZ3VpLnNoOjM3NDEKLW1zZ2lkICJJbml0aWFsaXppbmcuLi4iCi1tc2dzdHIgItCY0L3QuNGG0LjQsNC70LjQt9C40YDQsNC90LXigKYiCisjOiBhZGQtcGF0Y2guYzozNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzAKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGC0L7QstCwINC/0LDRgNGH0LUgW3ksbixxLGEsZCVzLD9dPyAiCiAKLSM6IGdpdC1ndWkuc2g6Mzg4NgotIywgdGNsLWZvcm1hdAorIzogYWRkLXBhdGNoLmM6MzcKIG1zZ2lkICIiCi0iUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorInN0YWdpbmcuIgorbXNnc3RyICIiCisi0JDQutC+INC60YDRitC/0LrQsNGC0LAg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQuNC70L7QttC4INGH0LjRgdGC0L4sINGA0LXQtNCw0LrRgtC40YDQsNC90L7RgtC+INC/0LDRgNGH0LUg0YnQtSDQsdGK0LTQtSDQvdC10LfQsNCx0LDQstC90L4gIgorItC00L7QsdCw0LLQtdC90L4g0LrRitC8INC40L3QtNC10LrRgdCwLiIKKworIzogYWRkLXBhdGNoLmM6NDAKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkg4oCUINC00L7QsdCw0LLRj9C90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQsiDQuNC90LTQtdC60YHQsFxuIgorIm4g4oCUINCx0LXQtyDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0LIg0LjQvdC00LXQutGB0LBcbiIKKyJxIOKAlCDQuNC30YXQvtC0LCDQsdC10Lcg0LTQvtCx0LDQstGP0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDQvtGB0YLQsNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YTQsNC50LvQsFxuIgorImEg4oCUINC00L7QsdCw0LLRj9C90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0YHQu9C10LTQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQvtGCINGE0LDQudC70LAg0LIg0LjQvdC00LXQutGB0LBcbiIKKyJkIOKAlCDQsdC10Lcg0LTQvtCx0LDQstGP0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDRgdC70LXQtNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YTQsNC50LvQsCDQsiDQuNC90LTQtdC60YHQsFxuIgorCisjOiBhZGQtcGF0Y2guYzo1NCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQodC60LDRgtCw0LLQsNC90LUg0L3QsCDQv9GA0L7QvNGP0L3QsNGC0LAg0L3QsCDQv9GA0LDQstCw0YLQsCDQt9CwINC00L7RgdGC0YrQvyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0KHQutCw0YLQsNCy0LDQvdC1INC90LAg0LjQt9GC0YDQuNCy0LDQvdC10YLQviBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NTYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCh0LrQsNGC0LDQstCw0L3QtSDQvdCwINGC0L7QstCwINC/0LDRgNGH0LUgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjU4Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorInN0YXNoaW5nLiIKK21zZ3N0ciAiIgorItCQ0LrQviDQutGA0YrQv9C60LDRgtCwINC80L7QttC1INC00LAg0YHQtSDQv9GA0LjQu9C+0LbQuCDRh9C40YHRgtC+LCDRgNC10LTQsNC60YLQuNGA0LDQvdC+0YLQviDQv9Cw0YDRh9C1INGJ0LUg0LHRitC00LUg0L3QtdC30LDQsdCw0LLQvdC+ICIKKyLRgdC60YrRgtCw0L3Qvi4iCisKKyM6IGFkZC1wYXRjaC5jOjYxCittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IOKAlCDRgdC60LDRgtCw0LLQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQvlxuIgorIm4g4oCUINCx0LXQtyDRgdC60LDRgtCw0LLQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQvlxuIgorInEg4oCUINC40LfRhdC+0LQsINCx0LXQtyDRgdC60LDRgtCw0LLQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0L7RgdGC0LDQstCw0YnQuCDQv9Cw0YDRh9C10YLQsFxuIgorImEg4oCUINGB0LrQsNGC0LDQstCw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDRgdC70LXQtNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YTQsNC50LvQsFxuIgorImQg4oCUINCx0LXQtyDRgdC60LDRgtCw0LLQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0YHQu9C10LTQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQvtGCINGE0LDQudC70LBcbiIKKworIzogYWRkLXBhdGNoLmM6NzcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQmNC30LLQsNC20LTQsNC90LUg0L3QsCDQv9GA0L7QvNGP0L3QsNGC0LAg0L3QsCDQv9GA0LDQstCw0YLQsCDQt9CwINC00L7RgdGC0YrQvyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NzggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM5CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQmNC30LLQsNC20LTQsNC90LUg0L3QsCDQuNC30YLRgNC40LLQsNC90LXRgtC+IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzo3OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDAKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQmNC30LLQsNC20LTQsNC90LUg0L3QsCDRgtC+0LLQsCDQv9Cw0YDRh9C1IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzo4MQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJ1bnN0YWdpbmcuIgorbXNnc3RyICIiCisi0JDQutC+INC60YDRitC/0LrQsNGC0LAg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQuNC70L7QttC4INGH0LjRgdGC0L4sINGA0LXQtNCw0LrRgtC40YDQsNC90L7RgtC+INC/0LDRgNGH0LUg0YnQtSDQsdGK0LTQtSDQvdC10LfQsNCx0LDQstC90L4gIgorItC40LfQstCw0LTQtdC90L4g0L7RgiDQuNC90LTQtdC60YHQsC4iCisKKyM6IGFkZC1wYXRjaC5jOjg0Cittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSDigJQg0LjQt9Cy0LDQttC00LDQvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0L7RgiDQuNC90LTQtdC60YHQsFxuIgorIm4g4oCUINCx0LXQtyDQuNC30LLQsNC20LTQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQvtGCINC40L3QtNC10LrRgdCwXG4iCisicSDigJQg0LjQt9GF0L7QtCwg0LHQtdC3INC40LfQstCw0LbQtNCw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDQvtGB0YLQsNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0LjQvdC00LXQutGB0LBcbiIKKyJhIOKAlCDQuNC30LLQsNC20LTQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0YHQu9C10LTQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQvtGCINGE0LDQudC70LAg0L7RgiDQuNC90LTQtdC60YHQsFxuIgorImQg4oCUINCx0LXQtyDQuNC30LLQsNC20LTQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0YHQu9C10LTQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQvtGCINGE0LDQudC70LAg0L7RgiDQuNC90LTQtdC60YHQsFxuIgorCisjOiBhZGQtcGF0Y2guYzo5OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisi0J/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/RgNC+0LzRj9C90LDRgtCwINC90LAg0L/RgNCw0LLQsNGC0LAg0LfQsCDQtNC+0YHRgtGK0L8g0LrRitC8INC40L3QtNC10LrRgdCwIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMDAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J/RgNC40LvQsNCz0LDQvdC1INC90LAg0LjQt9GC0YDQuNCy0LDQvdC10YLQviDQutGK0Lwg0LjQvdC00LXQutGB0LAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J/RgNC40LvQsNCz0LDQvdC1INC90LAg0YLQvtCy0LAg0L/QsNGA0YfQtSDQutGK0Lwg0LjQvdC00LXQutGB0LAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEwMyBhZGQtcGF0Y2guYzoxNjggYWRkLXBhdGNoLmM6MjExCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorImFwcGx5aW5nLiIKK21zZ3N0ciAiIgorItCQ0LrQviDQutGA0YrQv9C60LDRgtCwINC80L7QttC1INC00LAg0YHQtSDQv9GA0LjQu9C+0LbQuCDRh9C40YHRgtC+LCDRgNC10LTQsNC60YLQuNGA0LDQvdC+0YLQviDQv9Cw0YDRh9C1INGJ0LUg0LHRitC00LUg0L3QtdC30LDQsdCw0LLQvdC+ICIKKyLQvdCw0LHQtdC70Y/Qt9Cw0L3QviDQt9CwINC/0YDQuNC70LDQs9Cw0L3QtS4iCisKKyM6IGFkZC1wYXRjaC5jOjEwNgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSDigJQg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0LrRitC8INC40L3QtNC10LrRgdCwXG4iCisibiDigJQg0LHQtdC3INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC/0LDRgNGH0LXRgtC+INC60YrQvCDQuNC90LTQtdC60YHQsFxuIgorInEg4oCUINC40LfRhdC+0LQsINCx0LXQtyDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0L7RgdGC0LDQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQutGK0Lwg0LjQvdC00LXQutGB0LBcbiIKKyJhIOKAlCDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0YHQu9C10LTQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQvtGCINGE0LDQudC70LAg0LrRitC8INC40L3QtNC10LrRgdCwXG4iCisiZCDigJQg0LHQtdC3INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDRgdC70LXQtNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YTQsNC50LvQsCDQutGK0Lwg0LjQvdC00LXQutGB0LBcbiIKKworIzogYWRkLXBhdGNoLmM6MTIxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYzCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyLQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINC/0YDQvtC80Y/QvdCw0YLQsCDQsiDQv9GA0LDQstCw0YLQsCDQt9CwINC00L7RgdGC0YrQvyDQvtGCINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IFt5LG4scSxhLGQiCisiJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTIyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0OQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCf0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0LjQt9GC0YDQuNCy0LDQvdC10YLQviDQvtGCINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUwCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCf0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0L7RgiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTI1IGFkZC1wYXRjaC5jOjE0NyBhZGQtcGF0Y2guYzoxOTAKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisiZGlzY2FyZGluZy4iCittc2dzdHIgIiIKKyLQkNC60L4g0LrRgNGK0L/QutCw0YLQsCDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC40LvQvtC20Lgg0YfQuNGB0YLQviwg0YDQtdC00LDQutGC0LjRgNCw0L3QvtGC0L4g0L/QsNGA0YfQtSDRidC1INCx0YrQtNC1INC90LXQt9Cw0LHQsNCy0L3QviAiCisi0L3QsNCx0LXQu9GP0LfQsNC90L4g0LfQsCDQt9Cw0L3Rg9C70Y/QstCw0L3QtS4iCisKKyM6IGFkZC1wYXRjaC5jOjEyOCBhZGQtcGF0Y2guYzoxOTMKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSDigJQg0L/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQvtGCINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+XG4iCisibiDigJQg0LHQtdC3INC/0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0L7RgiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvlxuIgorInEg4oCUINC40LfRhdC+0LQsINCx0LXQtyDQv9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDQvtGB0YLQsNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YDQsNCx0L7RgtC90L7RgtC+ICIKKyLQtNGK0YDQstC+XG4iCisiYSDigJQg0L/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0YHQu9C10LTQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQvtGCINGE0LDQudC70LAg0L7RgiDRgNCw0LHQvtGC0L3QvtGC0L4gIgorItC00YrRgNCy0L5cbiIKKyJkIOKAlCDQsdC10Lcg0L/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0YHQu9C10LTQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQvtGCINGE0LDQudC70LAg0L7RgiDRgNCw0LHQvtGC0L3QvtGC0L4gIgorItC00YrRgNCy0L5cbiIKKworIzogYWRkLXBhdGNoLmM6MTQzIGFkZC1wYXRjaC5jOjE4NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyLQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINC/0YDQvtC80Y/QvdCw0YLQsCDQsiDQv9GA0LDQstCw0YLQsCDQt9CwINC00L7RgdGC0YrQvyDQvtGCINC40L3QtNC10LrRgdCwINC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IFt5LCIKKyJuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTQ0IGFkZC1wYXRjaC5jOjE4NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTQKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyLQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINC40LfRgtGA0LjQstCw0L3QtdGC0L4g0L7RgiDQuNC90LTQtdC60YHQsCDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTQ1IGFkZC1wYXRjaC5jOjE4OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINC/0LDRgNGH0LXRgtC+INC+0YIg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE1MAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkg4oCUINC/0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0L7RgiDQuNC90LTQtdC60YHQsCDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvlxuIgorIm4g4oCUINCx0LXQtyDQv9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINC/0LDRgNGH0LXRgtC+INC+0YIg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L5cbiIKKyJxIOKAlCDQuNC30YXQvtC0LCDQsdC10Lcg0L/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0L7RgdGC0LDQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQvtGCINC40L3QtNC10LrRgdCwINC4ICIKKyLRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvlxuIgorImEg4oCUINC/0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0YLQvtCy0LAg0Lgg0LLRgdC40YfQutC4INGB0LvQtdC00LLQsNGJ0Lgg0L/QsNGA0YfQtdGC0LAg0L7RgiDRhNCw0LnQu9CwINC+0YIg0LjQvdC00LXQutGB0LAg0LggIgorItGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+XG4iCisiZCDigJQg0LHQtdC3INC/0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0YLQvtCy0LAg0Lgg0LLRgdC40YfQutC4INGB0LvQtdC00LLQsNGJ0Lgg0L/QsNGA0YfQtdGC0LAg0L7RgiDRhNCw0LnQu9CwINC+0YIg0LjQvdC00LXQutGB0LAg0LggIgorItGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+XG4iCisKKyM6IGFkZC1wYXRjaC5jOjE2NCBhZGQtcGF0Y2guYzoyMDcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyLQn9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9GA0L7QvNGP0L3QsNGC0LAg0LIg0L/RgNCw0LLQsNGC0LAg0LfQsCDQtNC+0YHRgtGK0L8g0L7RgiDQuNC90LTQtdC60YHQsCDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviBbeSxuLCIKKyJxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE2NSBhZGQtcGF0Y2guYzoyMDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU5CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyLQn9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQuNC30YLRgNC40LLQsNC90LXRgtC+INC+0YIg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE2NiBhZGQtcGF0Y2guYzoyMDkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYwCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQn9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQvtGCINC40L3QtNC10LrRgdCwINC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNzEKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSDigJQg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0L7RgiDQuNC90LTQtdC60YHQsCDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvlxuIgorIm4g4oCUINCx0LXQtyDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQvtGCINC40L3QtNC10LrRgdCwINC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+XG4iCisicSDigJQg0LjQt9GF0L7QtCwg0LHQtdC3INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDQvtGB0YLQsNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0LjQvdC00LXQutGB0LAg0LggIgorItGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+XG4iCisiYSDigJQg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0YLQvtCy0LAg0Lgg0LLRgdC40YfQutC4INGB0LvQtdC00LLQsNGJ0Lgg0L/QsNGA0YfQtdGC0LAg0L7RgiDRhNCw0LnQu9CwINC+0YIg0LjQvdC00LXQutGB0LAg0LggIgorItGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+XG4iCisiZCDigJQg0LHQtdC3INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDRgdC70LXQtNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YTQsNC50LvQsCDQvtGCINC40L3QtNC10LrRgdCwINC4ICIKKyLRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvlxuIgorCisjOiBhZGQtcGF0Y2guYzoyMTQKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkg4oCUINC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC/0LDRgNGH0LXRgtC+INC60YrQvCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvlxuIgorIm4g4oCUINCx0LXQtyDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQutGK0Lwg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L5cbiIKKyJxIOKAlCDQuNC30YXQvtC0LCDQsdC10Lcg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0YLQvtCy0LAg0Lgg0LLRgdC40YfQutC4INC+0YHRgtCw0LLQsNGJ0Lgg0L/QsNGA0YfQtdGC0LBcbiIKKyJhIOKAlCDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0YHQu9C10LTQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQvtGCINGE0LDQudC70LBcbiIKKyJkIOKAlCDQsdC10Lcg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0YLQvtCy0LAg0Lgg0LLRgdC40YfQutC4INGB0LvQtdC00LLQsNGJ0Lgg0L/QsNGA0YfQtdGC0LAg0L7RgiDRhNCw0LnQu9CwXG4iCisKKyM6IGFkZC1wYXRjaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICLQt9Cw0LPQu9Cw0LLQvdCw0YLQsCDRh9Cw0YHRgiDQvdCwINC/0LDRgNGH0LXRgtC+IOKAniUuKnPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwIgorCisjOiBhZGQtcGF0Y2guYzozMzcgYWRkLXBhdGNoLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAi0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg0L3QsCDQvtGG0LLQtdGC0LXQvdC+0YLQviDQv9Cw0YDRh9C1IOKAniUuKnPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwIgorCisjOiBhZGQtcGF0Y2guYzozOTUKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZGlmZiIKK21zZ3N0ciAi0YDQsNC30LvQuNC60LDRgtCwINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCIKKworIzogYWRkLXBhdGNoLmM6NDE0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAi0L7RhtCy0LXRgtC10L3QsNGC0LAg0YDQsNC30LvQuNC60LAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwIgorCisjOiBhZGQtcGF0Y2guYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnJXMnIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ4lc+KAnCIKKworIzogYWRkLXBhdGNoLmM6NTg3Cittc2dpZCAibWlzbWF0Y2hlZCBvdXRwdXQgZnJvbSBpbnRlcmFjdGl2ZS5kaWZmRmlsdGVyIgorbXNnc3RyICLQuNC30YXQvtC00YrRgiDQvtGCIOKAnmludGVyYWN0aXZlLmRpZmZGaWx0ZXLigJwg0L3QtSDQvdCw0L/QsNGB0LLQsCIKKworIzogYWRkLXBhdGNoLmM6NTg4Cittc2dpZCAiIgorIllvdXIgZmlsdGVyIG11c3QgbWFpbnRhaW4gYSBvbmUtdG8tb25lIGNvcnJlc3BvbmRlbmNlXG4iCisiYmV0d2VlbiBpdHMgaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4iCittc2dzdHIgIiIKKyLQntCx0YDQsNCx0L7RgtC10L3QuNGC0LUg0YDQtdC00L7QstC1INC90LAg0LjQt9GF0L7QtNCwINC90LAg0L/QvtC70LfQstCw0L3QuNGPINGE0LjQu9GC0YrRgCwg0YLRgNGP0LHQstCwXG4iCisi0LTQsCDRgdC1INC+0YLQvdCw0YHRj9GCINC10LTQvdC+INC60YrQvCDQtdC00L3QviDRgdC/0YDRj9C80L4g0YDQtdC00L7QstC10YLQtSDQvdCwINCy0YXQvtC00LAuIgorCisjOiBhZGQtcGF0Y2guYzo3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIGNvbnRleHQgbGluZSAjJWQgaW5cbiIKKyIlLipzIgorbXNnc3RyICIiCisi0L7Rh9Cw0LrQstCwINGB0LUg0YDQtdC0IOKEliVkINC+0YIg0LrQvtC90YLQtdC60YHRgtCwINCyXG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJodW5rcyBkbyBub3Qgb3ZlcmxhcDpcbiIKKyIlLipzXG4iCisiXHRkb2VzIG5vdCBlbmQgd2l0aDpcbiIKKyIlLipzIgorbXNnc3RyICIiCisi0L/QsNGA0YfQtdGC0LDRgtCwINC60L7QtCDQvdC1INGB0LUg0L/RgNC40L/QvtC60YDQuNCy0LDRgjpcbiIKKyIlLipzXG4iCisiICAgINC90LUg0LfQsNCy0YrRgNGI0LLQsCDRgTpcbiIKKyIlLipzIgorCisjOiBhZGQtcGF0Y2guYzoxMDUyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMgorbXNnaWQgIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlLlxuIgorbXNnc3RyICLQoNGK0YfQvdC+INGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQsCDQutC+0LQg4oCUINC+0YLQtNC+0LvRgyDQuNC80LAg0L/QvtC00YHQutCw0LfQutCwLlxuIgorCisjOiBhZGQtcGF0Y2guYzoxMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclYycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJWMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisi4oCU4oCU4oCUXG4iCisi0JfQsCDQtNCwINC/0YDQvtC/0YPRgdC90LXRgtC1INGA0LXQtNC+0LLQtdGC0LUsINC30LDQv9C+0YfQstCw0YnQuCDRgSDigJ4lY+KAnDog0LfQsNC80LXQvdC10YLQtSDQt9C90LDQutCwINGBIOKAniDigJwgKNGB0YLQsNCy0LDRgiAiCisi0LrQvtC90YLQtdC60YHRgilcbiIKKyLQl9CwINC00LAg0L/RgNC+0L/Rg9GB0L3QtdGC0LUg0YDQtdC00L7QstC10YLQtSwg0LfQsNC/0L7Rh9Cy0LDRidC4INGBIOKAniVj4oCcOiDQuNC30YLRgNC40LnRgtC1INCz0LguXG4iCisi0KDQtdC00L7QstC10YLQtSwg0LrQvtC40YLQviDQt9Cw0L/QvtGH0LLQsNGCINGBIOKAniVj4oCcINGJ0LUg0LHRitC00LDRgiDQv9GA0L7Qv9GD0YHQvdCw0YLQuC5cbiIKKworIy4gVFJBTlNMQVRPUlM6ICdpdCcgcmVmZXJzIHRvIHRoZSBwYXRjaCBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIG1lc3NhZ2VzLgorIzogYWRkLXBhdGNoLmM6MTA3MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMjYKK21zZ2lkICIiCisiSWYgaXQgZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgeW91IHdpbGwgYmUgZ2l2ZW4gYW4gb3Bwb3J0dW5pdHkgdG9cbiIKKyJlZGl0IGFnYWluLiAgSWYgYWxsIGxpbmVzIG9mIHRoZSBodW5rIGFyZSByZW1vdmVkLCB0aGVuIHRoZSBlZGl0IGlzXG4iCisiYWJvcnRlZCBhbmQgdGhlIGh1bmsgaXMgbGVmdCB1bmNoYW5nZWQuXG4iCittc2dzdHIgIiIKKyLQkNC60L4g0LUg0L3QtdCy0YrQt9C80L7QttC90L4g0YfQuNGB0YLQviDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQutC+0LTQsCwg0YnQtSDQvNC+0LbQtSDQv9Cw0Log0LTQsCDRgNC10LTQsNC60YLQuNGA0LDRgtC1LiAg0JDQutC+XG4iCisi0LjQt9GC0YDQuNC10YLQtSDQstGB0LjRh9C60Lgg0YDQtdC00L7QstC1INC+0YIg0L/QsNGA0YfQtdGC0L4g0LrQvtC0LCDRgtC+INGJ0LUg0LHRitC00LUg0L7RgdGC0LDQstC10L3QviDQvdC10L/RgNC+0LzQtdC90LXQvdC+LCDQsFxuIgorItGA0LXQtNCw0LrRgtC40YDQsNC90LXRgtC+IOKAlCDQvtGC0LrQsNC30LDQvdC+LlxuIgorCisjOiBhZGQtcGF0Y2guYzoxMTAzCittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyIgorbXNnc3RyICLQt9Cw0LPQu9Cw0LLQvdCw0YLQsCDRh9Cw0YHRgiDQv9Cw0YDRh9C10YLQviDQvdC1INC80L7QttC1INC00LAg0YHQtSDQsNC90LDQu9C40LfQuNGA0LAiCisKKyM6IGFkZC1wYXRjaC5jOjExNDgKK21zZ2lkICInZ2l0IGFwcGx5IC0tY2FjaGVkJyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAnmdpdCBhcHBseSAtLWNhY2hlZOKAnCIKKworIy4gVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKyMuIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgdGhhdCBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4gQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKyMuIChzYXlpbmcgIm4iIGZvciAibm8iIGRpc2NhcmRzISkgaWYgdGhlIHRyYW5zbGF0aW9uCisjLiBvZiB0aGUgd29yZCAibm8iIGRvZXMgbm90IHN0YXJ0IHdpdGggbi4KKyMuCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIy4gQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKyMuIChzYXlpbmcgIm4iIGZvciAibm8iIGRpc2NhcmRzISkgaWYgdGhlIHRyYW5zbGF0aW9uCisjLiBvZiB0aGUgd29yZCAibm8iIGRvZXMgbm90IHN0YXJ0IHdpdGggbi4KKyM6IGFkZC1wYXRjaC5jOjEyMTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjM5Cittc2dpZCAiIgorIllvdXIgZWRpdGVkIGh1bmsgZG9lcyBub3QgYXBwbHkuIEVkaXQgYWdhaW4gKHNheWluZyBcIm5vXCIgZGlzY2FyZHMhKSBbeS9uXT8gIgorbXNnc3RyICIiCisi0KDQtdC00LDQutGC0LjRgNCw0L3QvtGC0L4g0L/QsNGA0YfQtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LjQu9C+0LbQuC4gINCU0LAg0YHQtSDQv9GA0L7QtNGK0LvQttC4INC70Lgg0YEgIgorItGA0LXQtNCw0LrRgtC40YDQsNC90LXRgtC+PyAo0YLQtdC60YPRidC40YLQtSDRgNC10LTQsNC60YbQuNC4INGJ0LUg0YHQtSDQvtGC0LzQtdC90Y/RgiDQv9GA0Lgg0L7RgtC60LDQtyEpOiDigJ554oCcICjQtNCwKS8gIgorIuKAnm7igJwgKNC90LUpPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyNjEKK21zZ2lkICJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCEiCittc2dzdHIgItCY0LfQsdGA0LDQvdC40YLQtSDQv9Cw0YDRh9C10YLQsCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDRgdC1INC00L7QsdCw0LLRj9GCINCyINC40L3QtNC10LrRgdCwISIKKworIzogYWRkLXBhdGNoLmM6MTI2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDMKK21zZ2lkICJBcHBseSB0aGVtIHRvIHRoZSB3b3JrdHJlZSBhbnl3YXk/ICIKK21zZ3N0ciAi0JTQsCDRgdC1INC/0YDQuNC70L7QttCw0YIg0LvQuCDQutGK0Lwg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4/ICIKKworIzogYWRkLXBhdGNoLmM6MTI2OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDYKK21zZ2lkICJOb3RoaW5nIHdhcyBhcHBsaWVkLlxuIgorbXNnc3RyICLQndC40YnQviDQvdC1INC1INC/0YDQuNC70L7QttC10L3Qvi5cbiIKKworIzogYWRkLXBhdGNoLmM6MTMyNgorbXNnaWQgIiIKKyJqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmtcbiIKKyJKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVua1xuIgorImsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmtcbiIKKyJLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmtcbiIKKyJnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0b1xuIgorIi8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXhcbiIKKyJzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3NcbiIKKyJlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rXG4iCisiPyAtIHByaW50IGhlbHBcbiIKK21zZ3N0ciAiIgorImog4oCUINCx0LXQtyDRgNC10YjQtdC90LjQtSDQt9CwINC/0LDRgNGH0LXRgtC+LCDQutGK0Lwg0YHQu9C10LTQstCw0YnQvtGC0L4g0L/QsNGA0YfQtSDQsdC10Lcg0YDQtdGI0LXQvdC40LVcbiIKKyJKIOKAlCDQsdC10Lcg0YDQtdGI0LXQvdC40LUg0LfQsCDQv9Cw0YDRh9C10YLQviwg0LrRitC8INGB0LvQtdC00LLQsNGJ0L7RgtC+INC/0LDRgNGH0LVcbiIKKyJrIOKAlCDQsdC10Lcg0YDQtdGI0LXQvdC40LUg0LfQsCDQv9Cw0YDRh9C10YLQviwg0LrRitC8INC/0YDQtdC00LjRiNC90L7RgtC+INC/0LDRgNGH0LUg0LHQtdC3INGA0LXRiNC10L3QuNC1XG4iCisiSyDigJQg0LHQtdC3INGA0LXRiNC10L3QuNC1INC30LAg0L/QsNGA0YfQtdGC0L4sINC60YrQvCDQv9GA0LXQtNC40YjQvdC+0YLQviDQv9Cw0YDRh9C1XG4iCisiZyDigJQg0LjQt9Cx0L7RgCDQutGK0Lwg0LrQvtC1INC/0LDRgNGH0LUg0LTQsCDRgdC1INC/0YDQtdC80LjQvdC1XG4iCisiLyDigJQg0YLRitGA0YHQtdC90LUg0L3QsCDQv9Cw0YDRh9C1LCDQvdCw0L/QsNGB0LLQsNGJ0L4g0LrRitC8INC00LDQtNC10L0g0YDQtdCz0YPQu9GP0YDQtdC9INC40LfRgNCw0LdcbiIKKyJzIOKAlCDRgNCw0LfQtNC10LvRj9C90LUg0L3QsCDRgtC10LrRg9GJ0L7RgtC+INC/0LDRgNGH0LUg0L3QsCDQv9C+LdC80LDQu9C60LhcbiIKKyJlIOKAlCDRgNGK0YfQvdC+INGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDRgtC10LrRg9GJ0L7RgtC+INC/0LDRgNGH0LVcbiIKKyI/IOKAlCDQuNC30LLQtdC20LTQsNC90LUg0L3QtSDQv9C+0LzQvtGJ0YLQsFxuIgorCisjOiBhZGQtcGF0Y2guYzoxNDQ3IGFkZC1wYXRjaC5jOjE0NTcKK21zZ2lkICJObyBwcmV2aW91cyBodW5rIgorbXNnc3RyICLQndGP0LzQsCDQtNGA0YPQs9C+INC/0LDRgNGH0LUg0L/RgNC10LTQuCDRgtC+0LLQsCIKKworIzogYWRkLXBhdGNoLmM6MTQ1MiBhZGQtcGF0Y2guYzoxNDYyCittc2dpZCAiTm8gbmV4dCBodW5rIgorbXNnc3RyICLQndGP0LzQsCDQtNGA0YPQs9C+INC/0LDRgNGH0LUg0YHQu9C10LQg0YLQvtCy0LAiCisKKyM6IGFkZC1wYXRjaC5jOjE0NjgKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvIgorbXNnc3RyICLQndGP0LzQsCDQtNGA0YPQs9C4INC/0LDRgNGH0LXRgtCwIgorCisjOiBhZGQtcGF0Y2guYzoxNDc5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3NworbXNnaWQgImdvIHRvIHdoaWNoIGh1bmsgKDxyZXQ+IHRvIHNlZSBtb3JlKT8gIgorbXNnc3RyICLQutGK0Lwg0LrQvtC1INC/0LDRgNGH0LUg0LTQsCDRgdC1INC/0YDQuNC00LLQuNC20LggKNC30LAg0L/QvtCy0LXRh9C1INCy0LDRgNC40LDQvdGC0Lgg0L3QsNGC0LjRgdC90LXRgtC1IOKAnmVudGVy4oCcKT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNDgwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3OQorbXNnaWQgImdvIHRvIHdoaWNoIGh1bms/ICIKK21zZ3N0ciAi0LrRitC8INC60L7QtSDQv9Cw0YDRh9C1INC00LAg0YHQtSDQv9GA0LjQtNCy0LjQttC4PyAiCisKKyM6IGFkZC1wYXRjaC5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXI6ICclcyciCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9INC90L7QvNC10YA6IOKAniVz4oCcIgorCisjOiBhZGQtcGF0Y2guYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLiIKK21zZ3N0clswXSAi0JjQvNCwINGB0LDQvNC+ICVkINC/0LDRgNGH0LUuIgorbXNnc3RyWzFdICLQmNC80LAg0YHQsNC80L4gJWQg0L/QsNGA0YfQtdGC0LAuIgorCisjOiBhZGQtcGF0Y2guYzoxNTA1Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoIgorbXNnc3RyICLQndGP0LzQsCDQtNGA0YPQs9C4INC/0LDRgNGH0LXRgtCwINC30LAg0YLRitGA0YHQtdC90LUiCisKKyM6IGFkZC1wYXRjaC5jOjE1MTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjIzCittc2dpZCAic2VhcmNoIGZvciByZWdleD8gIgorbXNnc3RyICLQtNCwINGB0LUg0YLRitGA0YHQuCDRgSDRgNC10LPRg9C70Y/RgNC10L0g0LjQt9GA0LDQtz8gIgorCisjOiBhZGQtcGF0Y2guYzoxNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlcyIKK21zZ3N0ciAi0KHQs9GA0LXRiNC10L0g0YDQtdCz0YPQu9GP0YDQtdC9INC40LfRgNCw0Lcg4oCeJXPigJw6ICVzIgorCisjOiBhZGQtcGF0Y2guYzoxNTQzCittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuIgorbXNnc3RyICLQndC40LrQvtC1INC/0LDRgNGH0LUg0L3QtSDQvdCw0L/QsNGB0LLQsCDQvdCwINGA0LXQs9GD0LvRj9GA0L3QuNGPINC40LfRgNCw0LciCisKKyM6IGFkZC1wYXRjaC5jOjE1NTAKK21zZ2lkICJTb3JyeSwgY2Fubm90IHNwbGl0IHRoaXMgaHVuayIKK21zZ3N0ciAi0KLQvtCy0LAg0L/QsNGA0YfQtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YDQsNC30LTQtdC70LXQvdC+IgorCisjOiBhZGQtcGF0Y2guYzoxNTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVua3MuIgorbXNnc3RyICLQoNCw0LfQtNC10LvRj9C90LUg0L3QsCAlZCDQv9Cw0YDRh9C10YLQsC4iCisKKyM6IGFkZC1wYXRjaC5jOjE1NTgKK21zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rIgorbXNnc3RyICLQotC+0LLQsCDQv9Cw0YDRh9C1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgNC10LTQsNC60YLQuNGA0LDQvdC+IgorCisjOiBhZGQtcGF0Y2guYzoxNjA5Cittc2dpZCAiJ2dpdCBhcHBseScgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ5naXQgYXBwbHnigJwiCisKKyM6IGFkdmljZS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIlc2hpbnQ6ICUuKnMlc1xuIgorbXNnc3RyICIlc9C/0L7QtNGB0LrQsNC30LrQsDogJS4qcyVzXG4iCisKKyM6IGFkdmljZS5jOjE2OAorbXNnaWQgIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi0J7RgtCx0LjRgNCw0L3QtdGC0L4g0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y8g0LUg0LHQu9C+0LrQuNGA0LDQvdC+INC+0YIg0L3QtdGB0LvQtdGC0Lgg0YTQsNC50LvQvtCy0LUuIgorCisjOiBhZHZpY2UuYzoxNzAKK21zZ2lkICJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtdGC0L4g0LUg0LHQu9C+0LrQuNGA0LDQvdC+INC+0YIg0L3QtdGB0LvQtdGC0Lgg0YTQsNC50LvQvtCy0LUuIgorCisjOiBhZHZpY2UuYzoxNzIKK21zZ2lkICJNZXJnaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi0KHQu9C40LLQsNC90LXRgtC+INC1INCx0LvQvtC60LjRgNCw0L3QviDQvtGCINC90LXRgdC70LXRgtC4INGE0LDQudC70L7QstC1LiIKKworIzogYWR2aWNlLmM6MTc0Cittc2dpZCAiUHVsbGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgItCY0LfQtNGK0YDQv9Cy0LDQvdC10YLQviDQtSDQsdC70L7QutC40YDQsNC90L4g0L7RgiDQvdC10YHQu9C10YLQuCDRhNCw0LnQu9C+0LLQtS4iCisKKyM6IGFkdmljZS5jOjE3NgorbXNnaWQgIlJldmVydGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgItCe0YLQvNGP0L3QsNGC0LAg0LUg0LHQu9C+0LrQuNGA0LDQvdCwINC+0YIg0L3QtdGB0LvQtdGC0Lgg0YTQsNC50LvQvtCy0LUuIgorCisjOiBhZHZpY2UuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSXQgaXMgbm90IHBvc3NpYmxlIHRvICVzIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLQlNC10LnRgdGC0LLQuNC10YLQviDigJ4lc+KAnCDQtSDQsdC70L7QutC40YDQsNC90L4g0L7RgiDQvdC10YHQu9C10YLQuCDRhNCw0LnQu9C+0LLQtS4iCisKKyM6IGFkdmljZS5jOjE4NgorbXNnaWQgIiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCittc2dzdHIgIiIKKyLQoNC10LTQsNC60YLQuNGA0LDQudGC0LUg0LPQuCDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviwg0Lgg0YLQvtCz0LDQstCwINC/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgYWRkL3JtINCk0JDQmdCb4oCcLFxuIgorItC30LAg0LTQsCDQvtGC0LHQtdC70LXQttC40YLQtSDQutC+0YDQuNCz0LjRgNCw0L3QtdGC0L4g0LjQvC4gINCh0LvQtdC0INGC0L7QstCwINC40LfQstGK0YDRiNC10YLQtSDQv9C+0LTQsNCy0LDQvdC10YLQvi4iCisKKyM6IGFkdmljZS5jOjE5NAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiBhbiB1bnJlc29sdmVkIGNvbmZsaWN0LiIKK21zZ3N0ciAi0JjQt9GF0L7QtCDQvtGCINC/0YDQvtCz0YDQsNC80LDRgtCwINC30LDRgNCw0LTQuCDQvdC10LrQvtGA0LjQs9C40YDQsNC9INC60L7QvdGE0LvQuNC60YIuIgorCisjOiBhZHZpY2UuYzoxOTkgYnVpbHRpbi9tZXJnZS5jOjEzMzUKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgItCd0LUg0YHRgtC1INC30LDQstGK0YDRiNC40LvQuCDRgdC70LjQstCw0L3QtS4gICjQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5NRVJHRV9IRUFE4oCcINGB0YrRidC10YHRgtCy0YPQstCwKS4iCisKKyM6IGFkdmljZS5jOjIwMQorbXNnaWQgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgbWVyZ2luZy4iCittc2dzdHIgItCf0YDQvtC80LXQvdC40YLQtSDRgtGA0Y/QsdCy0LAg0LTQsCDRgdC1INC/0L7QtNCw0LTQsNGCINC/0YDQtdC00Lgg0YHQu9C40LLQsNC90LUuIgorCisjOiBhZHZpY2UuYzoyMDIKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iCittc2dzdHIgItCY0LfRhdC+0LQg0L7RgiDQv9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9Cw0YDQsNC00Lgg0L3QtdC30LDQstGK0YDRiNC10L3QviDRgdC70LjQstCw0L3QtS4iCisKKyM6IGFkdmljZS5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogc3dpdGNoaW5nIHRvICclcycuXG4iCiAiXG4iCi0iVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHByb2JhYmx5XG4iCi0iZ29pbmcgdG8gYmUgaWdub3JlZCBieSBhbnkgR2l0IHN1YnByb2Nlc3MgcnVuXG4iCi0iYnkgJXM6XG4iCisiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisiY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpc1xuIgorInN0YXRlIHdpdGhvdXQgaW1wYWN0aW5nIGFueSBicmFuY2hlcyBieSBzd2l0Y2hpbmcgYmFjayB0byBhIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKyJkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYyB3aXRoIHRoZSBzd2l0Y2ggY29tbWFuZC4gRXhhbXBsZTpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPG5ldy1icmFuY2gtbmFtZT5cbiIKKyJcbiIKKyJPciB1bmRvIHRoaXMgb3BlcmF0aW9uIHdpdGg6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyJUdXJuIG9mZiB0aGlzIGFkdmljZSBieSBzZXR0aW5nIGNvbmZpZyB2YXJpYWJsZSBhZHZpY2UuZGV0YWNoZWRIZWFkIHRvICIKKyJmYWxzZVxuIgogIlxuIgogbXNnc3RyICIiCi0i0JLRitC30LzQvtC20L3QviDQtSDQtNCwINC40LzQsCDQv9GA0L7QsdC70LXQvCDRgdGK0YEg0YHRgNC10LTQsNGC0LAuXG4iCisi0JHQtdC70LXQttC60LA6INC/0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8IOKAniVz4oCcLlxuIgogIlxuIgotItCd0LDQuS3QstC10YDQvtGP0YLQvdC+INGB0LvQtdC00L3QuNGC0LUg0L/RgNC+0LzQtdC90LvQuNCy0Lgg0L3Rj9C80LAg0LTQsCDQsdGK0LTQsNGCXG4iCi0i0LLQt9C10YLQuCDQv9C+0LQg0LLQvdC40LzQsNC90LjQtSDQvtGCINC/0L7QtNC/0YDQvtGG0LXRgdC40YLQtSDQvdCwIEdpdFxuIgotItC+0YIgJXM6XG4iCisi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdC1INC1INGB0LLRitGA0LfQsNC9LiAg0JzQvtC20LUg0LTQsCDRgNCw0LfQs9C70LXQttC00LDRgtC1LCDQtNCwINC/0YDQsNCy0LjRgtC1INC/0YDQvtC40LfQstC+0LvQvdC4XG4iCisi0L/RgNC+0LzQtdC90Lgg0Lgg0LTQsCDQs9C4INC/0L7QtNCw0LLQsNGC0LUuICDQkNC60L4g0LjQt9GC0LXQs9C70LjRgtC1INC90LXRidC+INC00YDRg9Cz0L4sINCy0YHQuNGH0LrQuCDQv9GA0L7QvNC10L3QuCDRidC1ICIKKyLQsdGK0LTQsNGCXG4iCisi0LfQsNCx0YDQsNCy0LXQvdC4INC4INC90LjQutC+0Lkg0LrQu9C+0L0g0L3Rj9C80LAg0LTQsCDRgdC1INC/0YDQvtC80LXQvdC4LlxuIgogIlxuIgorItCQ0LrQviDQuNGB0LrQsNGC0LUg0LTQsCDRgdGK0LfQtNCw0LTQtdGC0LUg0L3QvtCyINC60LvQvtC9LCDQt9CwINC00LAg0LfQsNC/0LDQt9C40YLQtSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINGB0LgsINC80L7QttC10YLQtSDQtNCwXG4iCisi0L3QsNC/0YDQsNCy0LjRgtC1INGC0L7QstCwINC60LDRgtC+INC30LDQtNCw0LTQtdGC0LUg0LjQvNC1INC90LAg0LrQu9C+0L0g0LrRitC8INC+0L/RhtC40Y/RgtCwIOKAni1j4oCcINC90LAg0LrQvtC80LDQvdC00LDRgtCwXG4iCisi4oCec3dpdGNo4oCcLiAg0J3QsNC/0YDQuNC80LXRgDpcbiIKKyJcbiIKKyIgICAgZ2l0IHN3aXRjaCAtYyDQmNCc0JVf0J3QkF/QndCe0JJf0JrQm9Ce0J1cbiIKKyJcbiIKKyLQnNC+0LbQtSDQtNCwINC+0YLQvNC10L3QuNGC0LUg0YLQvtCy0LAg0LTQtdC50YHRgtCy0LjQtSDRgSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCBzd2l0Y2ggLVxuIgorIlxuIgorItCc0L7QttC1INC00LAg0YHQv9GA0LXRgtC1INGC0L7QstCwINGB0YrQvtCx0YnQtdC90LjQtSDRgdGK0YEg0LfQsNC00LDQstCw0L3QtSDQvdCwINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeYWR2aWNlLiIKKyJkZXRhY2hlZEhlYWTigJxcbiIKKyLQtNCwINC1IOKAnmZhbHNl4oCcLlxuIgogCi0jOiBnaXQtZ3VpLnNoOjM5MTUKKyM6IGFsaWFzLmM6NTAKK21zZ2lkICJjbWRsaW5lIGVuZHMgd2l0aCBcXCIKK21zZ3N0ciAi0LrQvtC80LDQvdC00L3QuNGP0YIg0YDQtdC0INC30LDQstGK0YDRiNCy0LAg0YEg4oCeL+KAnCIKKworIzogYWxpYXMuYzo1MQorbXNnaWQgInVuY2xvc2VkIHF1b3RlIgorbXNnc3RyICLQutCw0LLQuNGH0LrQsCDQsdC10Lcg0LXRiCIKKworIzogYXBwbHkuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINC+0L/RhtC40Y8g0LfQsCDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuCDigJ4lc+KAnCIKKworIzogYXBwbHkuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDQvtC/0YbQuNGPINC30LAg0LjQs9C90L7RgNC40YDQsNC90LUg0L3QsCDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuCDigJ4lc+KAnCIKKworIzogYXBwbHkuYzoxMzUKK21zZ2lkICItLXJlamVjdCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1yZWplY3TigJwg0Lgg4oCeLS0zd2F54oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBhcHBseS5jOjEzNworbXNnaWQgIi0tY2FjaGVkIGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLWNhY2hlZOKAnCDQuCDigJ4tLTN3YXnigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGFwcGx5LmM6MTQwCittc2dpZCAiLS0zd2F5IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICLQutCw0YLQviDigJ4tLTN3YXnigJwsINC90L4g0LjQt9Cy0YrQvSDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGFwcGx5LmM6MTUxCittc2dpZCAiLS1pbmRleCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0LrQsNGC0L4g4oCeLS1pbmRleOKAnCwg0L3QviDQuNC30LLRitC9INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYXBwbHkuYzoxNTQKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0LrQsNGC0L4g4oCeLS1jYWNoZWTigJwsINC90L4g0LjQt9Cy0YrQvSDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGFwcGx5LmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiCittc2dzdHIgItCg0LXQs9GD0LvRj9GA0L3QuNGP0YIg0LjQt9GA0LDQtyDQt9CwINCy0YDQtdC80LXRgtC+IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LfQsCDQsdGK0LTQtSDQutC+0LzQv9C40LvQuNGA0LDQvSIKKworIzogYXBwbHkuYzo4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICLQoNC10LPRg9C70Y/RgNC90LjRj9GCINC40LfRgNCw0Lcg0LLRitGA0L3QsCAlZCDQv9GA0Lgg0L/QvtC00LDQtNC10L3QsCDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvQvdC+0YHRgiDigJ4lc+KAnCDQvdCwINCy0YXQvtC00LAiCisKKyM6IGFwcGx5LmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgItCb0LjQv9GB0LLQsCDQuNC80LUg0L3QsCDRhNCw0LnQuyDQvdCwINGA0LXQtCAlZCDQvtGCINC60YDRitC/0LrQsNGC0LAiCisKKyM6IGFwcGx5LmM6OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTog0LvQvtGIINC40LfRhdC+0LQg0L7RgiDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LWRpZmbigJwg4oCUINC90LAg0YDQtdC0ICUyJGQg0YHQtSDQvtGH0LDQutCy0LDRiNC1IOKAni9kZXYvIgorIm51bGzigJwsINCwINCx0LUg0L/QvtC70YPRh9C10L0g4oCeJTEkc+KAnCIKKworIzogYXBwbHkuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6INC70L7RiCDQuNC30YXQvtC0INC+0YIg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC1kaWZm4oCcIOKAlCDQvdCwINGA0LXQtCAlZCDQsdC1INC/0L7Qu9GD0YfQtdC90L4gIgorItC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINC90L7QsiDRhNCw0LnQuyIKKworIzogYXBwbHkuYzo5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6INC70L7RiCDQuNC30YXQvtC0INC+0YIg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC1kaWZm4oCcIOKAlCDQvdCwINGA0LXQtCAlZCDQsdC1INC/0L7Qu9GD0YfQtdC90L4gIgorItC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINGB0YLQsNGAINGE0LDQudC7IgorCisjOiBhcHBseS5jOjkzNAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5OiDQu9C+0Ygg0LjQt9GF0L7QtCDQvtGCINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQtZGlmZuKAnCDigJQg0L3QsCDRgNC10LQgJWQg0YHQtSDQvtGH0LDQutCy0LDRiNC1IOKAni9kZXYvIgorIm51bGzigJwiCisKKyM6IGFwcGx5LmM6OTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBvbiBsaW5lICVkOiAlcyIKK21zZ3N0ciAi0LPRgNC10YjQtdC9INGA0LXQttC40Lwg0L3QsCDRgNC10LQg4oSWJWQ6ICVzIgorCisjOiBhcHBseS5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb25zaXN0ZW50IGhlYWRlciBsaW5lcyAlZCBhbmQgJWQiCittc2dzdHIgItC90LXRgdGK0LLQvNC10YHRgtC40LzQuCDQt9Cw0LPQu9Cw0LLQvdC4INGH0LDRgdGC0Lgg0L3QsCDRgNC10LTQvtCy0LUg4oSWJWQg0Lgg4oSWJWQiCisKKyM6IGFwcGx5LmM6MTM3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCisi0KHQu9C10LQg0YHRitC60YDQsNGJ0LDQstCw0L3QtdGC0L4g0L3QsCAlZC3RgtCwINGH0LDRgdGCINC+0YIg0LrQvtC80L/QvtC90LXQvdGC0LjRgtC1INC90LAg0L/RitGC0Y8sINCyINC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCICIKKyLQvdCwIOKAnmdpdCBkaWZm4oCcINC70LjQv9GB0LLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC40LzQtSDQvdCwINGE0LDQudC7ICjRgNC10LQ6ICVkKSIKK21zZ3N0clsxXSAiIgorItCh0LvQtdC0INGB0YrQutGA0LDRidCw0LLQsNC90LXRgtC+INC90LAg0L/RitGA0LLQuNGC0LUgJWQg0YfQsNGB0YLQuCDQvtGCINC60L7QvNC/0L7QvdC10L3RgtC40YLQtSDQvdCwINC/0YrRgtGPLCDQsiDQt9Cw0LPQu9Cw0LLQvdCw0YLQsCAiCisi0YfQsNGB0YIg0L3QsCDigJ5naXQgZGlmZuKAnCDQu9C40L/RgdCy0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQuNC80LUg0L3QsCDRhNCw0LnQuyAo0YDQtdC0OiAlZCkiCisKKyM6IGFwcGx5LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gKGxpbmUgJWQpIgorbXNnc3RyICIiCisi0LIg0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg0L3QsCDigJ5naXQgZGlmZuKAnCDQu9C40L/RgdCy0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQuNC80LUg0L3QsCDRhNCw0LnQuyAo0YDQtdC0OiAlZCkiCisKKyM6IGFwcGx5LmM6MTQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWNvdW50OiB1bmV4cGVjdGVkIGxpbmU6ICUuKnMiCittc2dzdHIgItC/0YDQuCDQv9C+0LLRgtC+0YDQvdC+0YLQviDQv9GA0LXQsdGA0L7Rj9Cy0LDQvdC1INCx0LUg0L/QvtC70YPRh9C10L0g0L3QtdC+0YfQsNC60LLQsNC9INGA0LXQtDog4oCeJS4qc+KAnCIKKworIzogYXBwbHkuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgItGH0LDRgdGCINC+0YIg0LrRgNGK0L/QutCwINCx0LXQtyDQt9Cw0LPQu9Cw0LLQvdCwINGH0LDRgdGCINC90LAg0YDQtdC0ICVkOiAlLipzIgorCisjOiBhcHBseS5jOjE3NTMKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAi0L3QvtCy0LjRj9GCINGE0LDQudC7INC30LDQstC40YHQuCDQvtGCINGB0YLQsNGA0L7RgtC+INGB0YrQtNGK0YDQttCw0L3QuNC1INC90LAg0YTQsNC50LvQsCIKKworIzogYXBwbHkuYzoxNzU1Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAi0LjQt9GC0YDQuNGC0LjRj9GCINGE0LDQudC7INC90LUg0LUg0L/RgNCw0LfQtdC9IgorCisjOiBhcHBseS5jOjE3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0LIg0LrRgNGK0L/QutCw0YLQsCDQvdCwINGA0LXQtCAlZCIKKworIzogYXBwbHkuYzoxODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICLQvdC+0LLQuNGP0YIg0YTQsNC50Lsg4oCeJXPigJwg0LfQsNCy0LjRgdC4INC+0YIg0YHRgtCw0YDQvtGC0L4g0YHRitC00YrRgNC20LDQvdC40LUg0L3QsCDRhNCw0LnQu9CwIgorCisjOiBhcHBseS5jOjE4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAi0LjQt9GC0YDQuNGC0LjRj9GCINGE0LDQudC7IOKAniVz4oCcINC90LUg0LUg0L/RgNCw0LfQtdC9IgorCisjOiBhcHBseS5jOjE4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAi4pePINC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6INGE0LDQudC70YrRgiDigJ4lc+KAnCDQstC10YfQtSDQtSDQv9GA0LDQt9C10L0sINC90L4g0L3QtSDQtSDQuNC30YLRgNC40YIiCisKKyM6IGFwcGx5LmM6MTk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0LIg0LTQstC+0LjRh9C90LDRgtCwINC60YDRitC/0LrQsCDQvdCwINGA0LXQtCAlZDogJS4qcyIKKworIzogYXBwbHkuYzoyMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAi0L3QtdGA0LDQt9C/0L7Qt9C90LDRgtCwINC00LLQvtC40YfQvdCw0YLQsCDQutGA0YrQv9C60LAg0L3QsCDRgNC10LQgJWQiCisKKyM6IGFwcGx5LmM6MjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICLQutGA0YrQv9C60LDRgtCwINC1INGBINC40LfRhtGP0LvQviDQv9C+0LLRgNC10LTQtdC90Lgg0LTQsNC90L3QuCDQvdCwINGA0LXQtCAlZCIKKworIzogYXBwbHkuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgItGB0LjQvNCy0L7Qu9C90LDRgtCwINCy0YDRitC30LrQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvdCwIgorCisjOiBhcHBseS5jOjIyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSDQuNC70Lgg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYXBwbHkuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0L3QsNGH0LDQu9C+INC90LAg0YDQtdC0OiDigJ4lY+KAnCIKKworIzogYXBwbHkuYzozMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAiIgorIiVkLdGC0L4g0L/QsNGA0YfQtSDQutC+0LQg0LHQtSDRg9GB0L/QtdGI0L3QviDQv9GA0LjQu9C+0LbQtdC90L4g0L3QsCDRgNC10LQgJWQgKNC+0YLQvNC10YHRgtCy0LDQvdC1INC+0YIgJWQg0YDQtdC0KS4iCittc2dzdHJbMV0gIiIKKyIlZC3RgtC+INC/0LDRgNGH0LUg0LrQvtC0INCx0LUg0YPRgdC/0LXRiNC90L4g0L/RgNC40LvQvtC20LXQvdC+INC90LAg0YDQtdC0ICVkICjQvtGC0LzQtdGB0YLQstCw0L3QtSDQvtGCICVkINGA0LXQtNCwKS4iCisKKyM6IGFwcGx5LmM6MzA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICIiCisi0JrQvtC90YLQtdC60YHRgtGK0YIg0LUg0L3QsNC80LDQu9C10L0g0L3QsCAoJWxkLyVsZCkg0LfQsCDQv9GA0LjQu9Cw0LPQsNC90LXRgtC+INC90LAg0L/QsNGA0YfQtdGC0L4g0LrQvtC0INC90LAg0YDQtdC0ICVkIgorCisjOiBhcHBseS5jOjMwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndoaWxlIHNlYXJjaGluZyBmb3I6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorItC/0YDQuCDRgtGK0YDRgdC10L3QtSDQt9CwOlxuIgorIiUuKnMiCisKKyM6IGFwcGx5LmM6MzA5NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIgorbXNnc3RyICLQu9C40L/RgdCy0LDRgiDQtNCw0L3QvdC40YLQtSDQt9CwINC00LLQvtC40YfQvdCw0YLQsCDQutGA0YrQv9C60LAg0LfQsCDigJ4lc+KAnCIKKworIzogYXBwbHkuYzozMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXZlcnNlLWFwcGx5IGEgYmluYXJ5IHBhdGNoIHdpdGhvdXQgdGhlIHJldmVyc2UgaHVuayB0byAnJXMnIgorbXNnc3RyICIiCisi0LTQstC+0LjRh9C90LDRgtCwINC60YDRitC/0LrQsCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LjQu9C+0LbQuCDQsiDQvtCx0YDQsNGC0L3QsCDQv9C+0YHQvtC60LAsINC60L7Qs9Cw0YLQviDQvtCx0YDQsNGC0L3QvtGC0L4gIgorItC/0LDRgNGH0LUg0LfQsCDigJ4lc+KAnCDQu9C40L/RgdCy0LAiCisKKyM6IGFwcGx5LmM6MzE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYXBwbHkgYmluYXJ5IHBhdGNoIHRvICclcycgd2l0aG91dCBmdWxsIGluZGV4IGxpbmUiCittc2dzdHIgItC60YrQvCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LjQu9C+0LbQuCDQtNCy0L7QuNGH0L3QsCDQutGA0YrQv9C60LAg0LHQtdC3INC/0YrQu9C10L0g0LjQvdC00LXQutGBIgorCisjOiBhcHBseS5jOjMxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBwYXRjaCBhcHBsaWVzIHRvICclcycgKCVzKSwgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGVudHMuIgorbXNnc3RyICLQutGA0YrQv9C60LDRgtCwINGB0YrQvtGC0LLQtdGC0YHRgtCy0LAg0L3QsCDigJ4lc+KAnCAoJXMpLCDQutC+0LnRgtC+INC90LUg0YHRitCy0L/QsNC00LAg0L/QviDRgdGK0LTRitGA0LbQsNC90LjQtS4iCisKKyM6IGFwcGx5LmM6MzE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcGF0Y2ggYXBwbGllcyB0byBhbiBlbXB0eSAnJXMnIGJ1dCBpdCBpcyBub3QgZW1wdHkiCittc2dzdHIgItC60YDRitC/0LrQsNGC0LAg0YHRitC+0YLQstC10YLRgdGC0LLQsCDQvdCwIOKAniVz4oCcLCDQutC+0LnRgtC+INGC0YDRj9Cx0LLQsCDQtNCwINC1INC/0YDQsNC30LXQvSwg0L3QviDQvdC1INC1IgorCisjOiBhcHBseS5jOjMxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG5lY2Vzc2FyeSBwb3N0aW1hZ2UgJXMgZm9yICclcycgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgIiIKKyLQvdC10L7QsdGF0L7QtNC40LzQuNGP0YIg0YDQtdC30YPQu9GC0LDRgiDRgdC70LXQtCDQvtC/0LXRgNCw0YbQuNGP0YLQsCAg4oCUIOKAniVz4oCcINC30LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1ICIKKyLQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBhcHBseS5jOjMyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgItC00LLQvtC40YfQvdCw0YLQsCDQutGA0YrQv9C60LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQuNC70L7QttC10L3QsCDQstGK0YDRhdGDIOKAniVz4oCcIgorCisjOiBhcHBseS5jOjMyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKyLQtNCy0L7QuNGH0L3QsNGC0LAg0LrRgNGK0L/QutCwINC30LAg4oCeJXPigJwg0LLQvtC00Lgg0LTQviDQvdC10L/RgNCw0LLQuNC70L3QuCDRgNC10LfRg9C70YLQsNGC0LggKNC+0YfQsNC60LLQsNGI0LUg0YHQtTog4oCeJXPigJwsINCwICIKKyLQsdC1INC/0L7Qu9GD0YfQtdC90L46IOKAniVz4oCcKSIKKworIzogYXBwbHkuYzozMjMwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LrRgNGK0L/QutCwOiDigJ4lczolbGTigJwiCisKKyM6IGFwcGx5LmM6MzM1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfRgtC10LPQu9C4IgorCisjOiBhcHBseS5jOjM0MDUgYXBwbHkuYzozNDE2IGFwcGx5LmM6MzQ2MiBtaWR4LmM6NjEgc2V0dXAuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXMiCittc2dzdHIgItGE0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYXBwbHkuYzozNDEzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDigJ4lc+KAnCDRgdC70LXQtCDQv9GA0L7RgdC70LXQtNGP0LLQsNC90LUg0L3QsCDRgdC40LzQstC+0LvQvdCwINCy0YDRitC30LrQsCIKKworIzogYXBwbHkuYzozNDQyIGFwcGx5LmM6MzY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg0YEg0L/RitGCIOKAniVz4oCcINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0g0LjQu9C4INC40LfRgtGA0LjRgiIKKworIzogYXBwbHkuYzozNTI4IGFwcGx5LmM6MzcwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIuKAniVz4oCcINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGFwcGx5LmM6MzUzNyBhcHBseS5jOjM3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INGB0YrQvtGC0LLQtdGC0YHRgtCy0LAg0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogYXBwbHkuYzozNTcyCittc2dpZCAicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorItCyINGF0YDQsNC90LjQu9C40YnQtdGC0L4g0LvQuNC/0YHQstCw0YIg0L3QtdC+0LHRhdC+0LTQuNC80LjRgtC1INC+0LHQtdC60YLQuC1CTE9CLCDQt9CwINC00LAg0YHQtSDQv9GA0LXQvNC40L3QtSDQutGK0Lwg0YLRgNC+0LnQvdC+ICIKKyLRgdC70LjQstCw0L3QtS4iCisKKyM6IGFwcGx5LmM6MzU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgItCf0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INGC0YDQvtC50L3QviDRgdC70LjQstCw0L3QteKAplxuIgorCisjOiBhcHBseS5jOjM1OTEgYXBwbHkuYzozNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgItGC0LXQutGD0YnQvtGC0L4g0YHRitC00YrRgNC20LDQvdC40LUg0L3QsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvdC+IgorCisjOiBhcHBseS5jOjM2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZhbGwgYmFjayBvbiB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INGC0YDQvtC50L3QviDRgdC70LjQstCw0L3QteKAplxuIgorCisjOiBhcHBseS5jOjM2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIHdpdGggY29uZmxpY3RzLlxuIgorbXNnc3RyICLQmtC+0L3RhNC70LjQutGC0Lgg0L/RgNC4INC/0YDQuNC70LDQs9Cw0L3QtdGC0L4g0L3QsCDQutGA0YrQv9C60LDRgtCwINC60YrQvCDigJ4lc+KAnC5cbiIKKworIzogYXBwbHkuYzozNjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICLQmtGA0YrQv9C60LDRgtCwINCx0LUg0L/RgNC40LvQvtC20LXQvdCwINGH0LjRgdGC0L4g0LrRitC8IOKAniVz4oCcLlxuIgorCisjOiBhcHBseS5jOjM2NTIKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNGJ0LDRgtCwINC60YDRitC/0LrQsCDQvtGB0YLQsNCy0Y8g0YTQsNC50LvQsCDQvdC10L/RgNCw0LfQtdC9IgorCisjOiBhcHBseS5jOjM3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIuKAniVz4oCcOiDQvdC10L/RgNCw0LLQuNC70LXQvSDQstC40LQiCisKKyM6IGFwcGx5LmM6MzcyNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iCittc2dzdHIgIuKAniVz4oCcINC1INC+0YIg0LLQuNC0IOKAniVv4oCcLCDQsCDRgdC1INC+0YfQsNC60LLQsNGI0LUg4oCeJW/igJwiCisKKyM6IGFwcGx5LmM6Mzg3OCBhcHBseS5jOjM4ODAgcmVhZC1jYWNoZS5jOjgzMCByZWFkLWNhY2hlLmM6ODU2CisjOiByZWFkLWNhY2hlLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdGggJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L/RitGCOiDigJ4lc+KAnCIKKworIzogYXBwbHkuYzozOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAi4oCeJXPigJw6INCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINCyINC40L3QtNC10LrRgdCwIgorCisjOiBhcHBseS5jOjM5MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLigJ4lc+KAnDog0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGFwcGx5LmM6Mzk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgItC90L7QstC40YLQtSDQv9GA0LDQstCwINC30LAg0LTQvtGB0YLRitC/ICglbykg0L3QsCDigJ4lc+KAnCDQvdC1INGB0YrQstC/0LDQtNCw0YIg0YHRitGBINGB0YLQsNGA0LjRgtC1ICglbykiCisKKyM6IGFwcGx5LmM6Mzk2NAorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykgb2YgJXMiCittc2dzdHIgIiIKKyLQvdC+0LLQuNGC0LUg0L/RgNCw0LLQsCDQt9CwINC00L7RgdGC0YrQvyAoJW8pINC90LAg4oCeJXPigJwg0L3QtSDRgdGK0LLQv9Cw0LTQsNGCINGB0YrRgSDRgdGC0LDRgNC40YLQtSAoJW8pINC90LAg4oCeJXPigJwiCisKKyM6IGFwcGx5LmM6Mzk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAi0LfQsNGB0LXQs9C90LDRgtC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQtSDRgdC70LXQtCDRgdC40LzQstC+0LvQvdCwINCy0YDRitC30LrQsCIKKworIzogYXBwbHkuYzozOTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAi0JrRgNGK0L/QutCw0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC40LvQvtC20LXQvdCwIgorCisjOiBhcHBseS5jOjQwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgItCf0YDQvtCy0LXRgNGP0LLQsNC90LUg0L3QsCDQutGA0YrQv9C60LDRgtCwIOKAniVz4oCc4oCmIgorCisjOiBhcHBseS5jOjQwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorItC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQt9CwINGB0YPQvNCw0YLQsCDQv9C+IFNIQTEg0LfQsCDQv9C+0LTQvNC+0LTRg9C70LAg0LvQuNC/0YHQstCwINC40LvQuCDQvdC1INC1INC00L7RgdGC0LDRgtGK0YfQvdCwICglcykuIgorCisjOiBhcHBseS5jOjQxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9kZSBjaGFuZ2UgZm9yICVzLCB3aGljaCBpcyBub3QgaW4gY3VycmVudCBIRUFEIgorbXNnc3RyICLRgdC80Y/QvdCwINC90LAg0YDQtdC20LjQvNCwINC90LAg0LTQvtGB0YLRitC/0LAg0L3QsCDigJ4lc+KAnCwg0LrQvtC50YLQviDQvdC1INC1INCyINGC0LXQutGD0YnQuNGPINCy0YDRitGFIOKAnkhFQUTigJwiCisKKyM6IGFwcGx5LmM6NDEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAoJXMpLiIKK21zZ3N0ciAi0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC30LAg0YHRg9C80LDRgtCwINC/0L4gU0hBMSDQu9C40L/RgdCy0LAg0LjQu9C4INC90LUg0LUg0LTQvtGB0YLQsNGC0YrRh9C90LAgKCVzKS4iCisKKyM6IGFwcGx5LmM6NDExNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTQvtCx0LDQstC4INC60YrQvCDQstGA0LXQvNC10L3QvdC40Y8g0LjQvdC00LXQutGBIgorCisjOiBhcHBseS5jOjQxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRlbXBvcmFyeSBpbmRleCB0byAlcyIKK21zZ3N0ciAi0LLRgNC10LzQtdC90L3QuNGP0YIg0LjQvdC00LXQutGBINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQv9Cw0LfQuCDQsiDigJ4lc+KAnCIKKworIzogYXBwbHkuYzo0MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9Cy0LDQtNC4INC+0YIg0LjQvdC00LXQutGB0LAiCisKKyM6IGFwcGx5LmM6NDI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgItC/0L7QstGA0LXQtNC10L3QsCDQutGA0YrQv9C60LAg0LfQsCDQvNC+0LTRg9C70LAg4oCeJXPigJwiCisKKyM6IGFwcGx5LmM6NDMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9GD0YfQuCDQuNC90YTQvtGA0LzQsNGG0LjRjyDRh9GA0LXQtyDigJ5zdGF04oCcINC30LAg0L3QvtCy0L7RgdGK0LfQtNCw0LTQtdC90LjRjyDRhNCw0LnQuyDigJ4lc+KAnCIKKworIzogYXBwbHkuYzo0MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICIiCisi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsCDRgdGK0LfQtNCw0LTQtSDQvNGP0YHRgtC+0YLQviDQt9CwINGB0YrRhdGA0LDQvdC10L3QuNC1INC90LAg0L3QvtCy0L7RgdGK0LfQtNCw0LTQtdC90LjRjyDRhNCw0LnQuyDigJ4lc+KAnCIKKworIzogYXBwbHkuYzo0MzE2IGFwcGx5LmM6NDQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTQvtCx0LDQstC4INC30LDQv9C40YEg0LIg0LrQtdGI0LAg0LfQsCDigJ4lc+KAnCIKKworIzogYXBwbHkuYzo0MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSB0byAnJXMnIgorbXNnc3RyICLQsiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9C40YjQtSIKKworIzogYXBwbHkuYzo0MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICLQt9Cw0YLQstCw0YDRj9C90LUg0L3QsCDRhNCw0LnQu9CwIOKAniVz4oCcIgorCisjOiBhcHBseS5jOjQ0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC/0LjRiNC1INGBINGA0LXQttC40Lwg0L3QsCDQtNC+0YHRgtGK0L8g4oCeJW/igJwiCisKKyM6IGFwcGx5LmM6NDUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICLQmtGA0YrQv9C60LDRgtCwIOKAniVz4oCcINCx0LUg0L/RgNC40LvQvtC20LXQvdCwINGH0LjRgdGC0L4uIgorCisjOiBhcHBseS5jOjQ1MzkKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAi0LLRitGC0YDQtdGI0L3QsCDQs9GA0LXRiNC60LAiCisKKyM6IGFwcGx5LmM6NDU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gItCf0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAg4oCeJSVz4oCcINGBICVkINC+0YLRhdCy0YrRgNC70LXQvdC+INC/0LDRgNGH0LXigKYiCittc2dzdHJbMV0gItCf0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAg4oCeJSVz4oCcINGBICVkINC+0YLRhdCy0YrRgNC70LXQvdC4INC/0LDRgNGH0LXRgtCw4oCmIgorCisjOiBhcHBseS5jOjQ1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICLRgdGK0LrRgNCw0YnQsNCy0LDQvdC1INC90LAg0LjQvNC10YLQviDQvdCwINGE0LDQudC70LAg0YEg0L7RgtGF0LLRitGA0LvQtdC90LjRgtC1INC/0LDRgNGH0LXRgtCwINC90LAg4oCeICUuKnMucmVq4oCcIgorCisjOiBhcHBseS5jOjQ1NjEgYnVpbHRpbi9mZXRjaC5jOjkwMSBidWlsdGluL2ZldGNoLmM6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9IgorCisjOiBhcHBseS5jOjQ1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAiJWQt0YLQviDQv9Cw0YDRh9C1INCx0LUg0YPRgdC/0LXRiNC90L4g0L/RgNC40LvQvtC20LXQvdC+LiIKKworIzogYXBwbHkuYzo0NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAiJWQt0YLQviDQv9Cw0YDRh9C1INCx0LUg0L7RgtGF0LLRitGA0LvQtdC90L4uIgorCisjOiBhcHBseS5jOjQ2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCBwYXRjaCAnJXMnLiIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GB0L3QsNGC0LAg0LrRgNGK0L/QutCwOiDigJ4lc+KAnCIKKworIzogYXBwbHkuYzo0NzA2Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINCy0YXQvtC0IgorCisjOiBhcHBseS5jOjQ3MjYKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICLQuNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvSIKKworIzogYXBwbHkuYzo0ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgItC60YDRitC/0LrQsNGC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC90LA6ICVzIgorCisjOiBhcHBseS5jOjQ5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAi0L/RgNC10L3QtdCx0YDQtdCz0L3QsNGC0LAg0LUgJWQg0LPRgNC10YjQutCwINCyINC30L3QsNGG0LjRgtC1INC30LAg0LjQvdGC0LXRgNCy0LDQu9C4IgorbXNnc3RyWzFdICLQv9GA0LXQvdC10LHRgNC10LPQvdCw0YLQuCDRgdCwICVkINCz0YDQtdGI0LrQuCDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuCIKKworIzogYXBwbHkuYzo0OTE2IGFwcGx5LmM6NDkzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCDRgNC10LQg0LTQvtCx0LDQstGPINCz0YDQtdGI0LrQuCDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuC4iCittc2dzdHJbMV0gIiVkINGA0LXQtNCwINC00L7QsdCw0LLRj9GCINCz0YDQtdGI0LrQuCDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuC4iCisKKyM6IGFwcGx5LmM6NDkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIiCisi0JTQvtCx0LDQstC10L0g0LUgJWQg0YDQtdC0INGB0LvQtdC0INC60L7RgNC10LrRhtC40Y/RgtCwINC90LAg0LPRgNC10YjQutC40YLQtSDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuC4iCittc2dzdHJbMV0gIiIKKyLQlNC+0LHQsNCy0LXQvdC4INGB0LAgJWQg0YDQtdC00LAg0YHQu9C10LQg0LrQvtGA0LXQutGG0LjRj9GC0LAg0L3QsCDQs9GA0LXRiNC60LjRgtC1INCyINC30L3QsNGG0LjRgtC1INC30LAg0LjQvdGC0LXRgNCy0LDQu9C4LiIKKworIzogYXBwbHkuYzo0OTQwIGJ1aWx0aW4vYWRkLmM6NjEyIGJ1aWx0aW4vbXYuYzozMDEgYnVpbHRpbi9ybS5jOjQwNgorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAi0J3QvtCy0LjRj9GCINC40L3QtNC10LrRgSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IGFwcGx5LmM6NDk2OAorbXNnaWQgImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgItCx0LXQtyDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0L3QsNC/0LDRgdCy0LDRidC4INC90LAg0LTQsNC00LXQvdC40Y8g0L/RitGCIgorCisjOiBhcHBseS5jOjQ5NzEKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICLQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0L3QsNC/0LDRgdCy0LDRidC4INC90LAg0LTQsNC00LXQvdC40Y8g0L/RitGCIgorCisjOiBhcHBseS5jOjQ5NzMgYnVpbHRpbi9hbS5jOjIyNjAKK21zZ2lkICJudW0iCittc2dzdHIgItCR0KDQntCZIgorCisjOiBhcHBseS5jOjQ5NzQKK21zZ2lkICJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIKK21zZ3N0ciAi0L/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRgtC+0LfQuCDQkdCg0J7QmSDQstC+0LTQtdGJ0Lgg0LXQu9C10LzQtdC90YLQuCDQvtGCINC/0YrRgtC40YnQsNGC0LAg0LIg0YDQsNC30LvQuNC60LDRgtCwIgorCisjOiBhcHBseS5jOjQ5NzcKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINGA0LXQtNC+0LLQtdGC0LUg0LTQvtCx0LDQstC10L3QuCDQvtGCINGC0LDQt9C4INC60YDRitC/0LrQsCIKKworIzogYXBwbHkuYzo0OTc5Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0LDRgtC40YHRgtC40LrQsCDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQsdC10Lcg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LrRgNGK0L/QutCw0YLQsCIKKworIzogYXBwbHkuYzo0OTgzCittc2dpZCAic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LHRgNC+0Y8g0L3QsCDQtNC+0LHQsNCy0LXQvdC40YLQtSDQuCDQuNC30YLRgNC40YLQuNGC0LUg0YDQtdC00L7QstC1IgorCisjOiBhcHBseS5jOjQ5ODUKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0LDRgtC40YHRgtC40LrQsCDQvdCwINCy0YXQvtC00L3QuNGC0LUg0LTQsNC90L3QuCDQsdC10Lcg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LrRgNGK0L/QutCw0YLQsCIKKworIzogYXBwbHkuYzo0OTg3Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LrQsCDQtNCw0LvQuCDQutGA0YrQv9C60LDRgtCwINC80L7QttC1INC00LAg0YHQtSDQv9GA0LjQu9C+0LbQuCwg0LHQtdC3INC00LXQudGB0YLQstC40YLQtdC70L3QviDQv9GA0LjQu9Cw0LPQsNC90LUiCisKKyM6IGFwcGx5LmM6NDk4OQorbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LrQsCDQtNCw0LvQuCDQutGA0YrQv9C60LDRgtCwINC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC40LvQvtC20LXQvdCwINC60YrQvCDRgtC10LrRg9GJ0LjRjyDQuNC90LTQtdC60YEiCisKKyM6IGFwcGx5LmM6NDk5MQorbXNnaWQgIm1hcmsgbmV3IGZpbGVzIHdpdGggYGdpdCBhZGQgLS1pbnRlbnQtdG8tYWRkYCIKK21zZ3N0ciAi0L7RgtCx0LXQu9GP0LfQstCw0L3QtSDQvdCwINC90L7QstC40YLQtSDRhNCw0LnQu9C+0LLQtSDRgSDigJ5naXQgYWRkIC0taW50ZW50LXRvLWFkZOKAnCIKKworIzogYXBwbHkuYzo0OTkzCittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgItC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAg0LHQtdC3INC/0YDQvtC80Y/QvdCwINC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGFwcGx5LmM6NDk5NQorbXNnaWQgImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiCittc2dzdHIgItC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsCwg0LrQvtGP0YLQviDQv9GA0L7QvNC10L3RjyDQuCDRhNCw0LnQu9C+0LLQtSDQuNC30LLRitC9INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBhcHBseS5jOjQ5OTgKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAiIgorItC60YDRitC/0LrQsNGC0LAg0LTQsCDQsdGK0LTQtSDQv9GA0LjQu9C+0LbQtdC90LAuICDQntC/0YbQuNGP0YLQsCDRgdC1INC60L7QvNCx0LjQvdC40YDQsCDRgSDigJ4tLWNoZWNr4oCcL+KAni0tc3RhdOKAnC/igJ4tLSIKKyJzdW1tYXJ54oCcIgorCisjOiBhcHBseS5jOjUwMDAKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICLQv9GA0L7QsdCy0LDQvdC1INGBINGC0YDQvtC50L3QviDRgdC70LjQstCw0L3QtSwg0LDQutC+INC60YDRitC/0LrQsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC40LvQvtC20Lgg0LTQuNGA0LXQutGC0L3QviIKKworIzogYXBwbHkuYzo1MDAyCittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKyLRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQstGA0LXQvNC10L3QtdC9INC40L3QtNC10LrRgSDQvdCwINCx0LDQt9CwINC90LAg0LLQutC70Y7Rh9C10L3QsNGC0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQuNC90LTQtdC60YHQsCIKKworIzogYXBwbHkuYzo1MDA1IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzMgYnVpbHRpbi9scy1maWxlcy5jOjUyNAorbXNnaWQgInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICLRgNCw0LfQtNC10LvRj9C90LUg0L3QsCDQv9GK0YLQuNGJ0LDRgtCwINGBINC90YPQu9C10LLQuNGPINC30L3QsNC6IOKAnk5VTOKAnCIKKworIzogYXBwbHkuYzo1MDA3Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICLQtNCwINGB0LUg0L7RgdC40LPRg9GA0Lgg0LrQvtC90YLQtdC60YHRgiDQvtGCINC/0L7QvdC1INGC0LDQutGK0LIg0JHQoNCe0Jkg0YHRitCy0L/QsNC00LDRidC4INGA0LXQtNC+0LLQtSIKKworIzogYXBwbHkuYzo1MDA4IGJ1aWx0aW4vYW0uYzoyMjM5IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTgKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAwIGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAyCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NTcgYnVpbHRpbi9yZWJhc2UuYzoxNTA4Cittc2dpZCAiYWN0aW9uIgorbXNnc3RyICLQtNC10LnRgdGC0LLQuNC1IgorCisjOiBhcHBseS5jOjUwMDkKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAi0LfQsNGB0LjRh9Cw0L3QtSDQvdCwINC90L7QstC4INC40LvQuCDQv9GA0L7QvNC10L3QtdC90Lgg0YDQtdC00L7QstC1INGBINCz0YDQtdGI0LrQuCDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuCIKKworIzogYXBwbHkuYzo1MDEyIGFwcGx5LmM6NTAxNQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgIiIKKyLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuCDQv9GA0Lgg0L7RgtC60YDQuNCy0LDQvdC1INC90LAg0LrQvtC90YLQtdC60YHRgtCwIgorCisjOiBhcHBseS5jOjUwMTgKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAi0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LrRgNGK0L/QutCw0YLQsCDQsiDQvtCx0YDQsNGC0L3QsCDQv9C+0YHQvtC60LAiCisKKyM6IGFwcGx5LmM6NTAyMAorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICLQsdC10Lcg0LjQt9C40YHQutCy0LDQvdC1INC90LAg0LTQvtGA0Lgg0Lgg0LXQtNC40L0g0YDQtdC0INC60L7QvdGC0LXQutGB0YIiCisKKyM6IGFwcGx5LmM6NTAyMgorbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICLQvtGB0YLQsNCy0Y/QvdC1INC90LAg0L7RgtGF0LLRitGA0LvQtdC90LjRgtC1INC/0LDRgNGH0LXRgtCwINCy0YrQsiDRhNCw0LnQu9C+0LLQtSDRgSDRgNCw0LfRiNC40YDQtdC90LjQtSDigJ4ucmVq4oCcIgorCisjOiBhcHBseS5jOjUwMjQKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINC30LDRgdGC0YrQv9Cy0LDRidC4INGB0LUg0L/QsNGA0YfQtdGC0LAiCisKKyM6IGFwcGx5LmM6NTAyNSBidWlsdGluL2FkZC5jOjMyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIyCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjAgYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTggYnVpbHRpbi9mc2NrLmM6Nzc0CisjOiBidWlsdGluL2xvZy5jOjIxNjYgYnVpbHRpbi9tdi5jOjEyMyBidWlsdGluL3JlYWQtdHJlZS5jOjEyOAorbXNnaWQgImJlIHZlcmJvc2UiCittc2dzdHIgItC/0L7QstC10YfQtSDQv9C+0LTRgNC+0LHQvdC+0YHRgtC4IgorCisjOiBhcHBseS5jOjUwMjcKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAi0L/RgNC10L3QtdCx0YDQtdCz0LLQsNC90LUg0L3QsCDQvdC10L/RgNCw0LLQuNC70L3QviDQu9C40L/RgdCy0LDRiSDQt9C90LDQuiDQt9CwINC90L7QsiDRgNC10LQg0LIg0LrRgNCw0Y8g0L3QsCDRhNCw0LnQuyIKKworIzogYXBwbHkuYzo1MDMwCittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICLQsdC10Lcg0LTQvtCy0LXRgNGP0LLQsNC90LUg0L3QsCDQvdC+0LzQtdGA0LDRgtCwINC90LAg0YDQtdC00L7QstC10YLQtSDQsiDQt9Cw0LPQu9Cw0LLQvdC40YLQtSDRh9Cw0YHRgtC4INC90LAg0L/QsNGA0YfQtdGC0LDRgtCwIgorCisjOiBhcHBseS5jOjUwMzIgYnVpbHRpbi9hbS5jOjIyNDgKK21zZ2lkICJyb290IgorbXNnc3RyICLQndCQ0KfQkNCb0J3QkF/QlNCY0KDQldCa0KLQntCg0JjQryIKKworIzogYXBwbHkuYzo1MDMzCittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGC0LDQt9C4INCd0JDQp9CQ0JvQndCQX9CU0JjQoNCV0JrQotCe0KDQmNCvINC60YrQvCDQuNC80LXQvdCw0YLQsCDQvdCwINCy0YHQuNGH0LrQuCDRhNCw0LnQu9C+0LLQtSIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgW9Ce0J/QptCY0K/igKZdINCj0JrQkNCX0JDQotCV0Jtf0JrQqtCcX9CU0KrQoNCS0J4gW9Cf0KrQouKApl0iCisKKyM6IGFyY2hpdmUuYzoxNQorbXNnaWQgImdpdCBhcmNoaXZlIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MTYKK21zZ2lkICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSDQpdCg0JDQndCY0JvQmNCp0JUgWy0tZXhlYyDQmtCe0JzQkNCd0JTQkF0gW9Ce0J/QptCY0K/igKZdINCj0JrQkNCX0JDQotCV0Jtf0JrQqtCcX9CU0KrQoNCS0J4gIgorIlvQn9Cq0KLigKZdIgorCisjOiBhcmNoaXZlLmM6MTcKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSDQpdCg0JDQndCY0JvQmNCp0JUgWy0tZXhlYyDQmtCe0JzQkNCd0JTQkF0gLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MzcyIGJ1aWx0aW4vYWRkLmM6MTgxIGJ1aWx0aW4vYWRkLmM6NTg4IGJ1aWx0aW4vcm0uYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAi0L/RitGC0Y/RgiDigJ4lc+KAnCDQvdC1INGB0YrQstC/0LDQtNCwINGBINC90LjQutC+0Lkg0YTQsNC50LsiCisKKyM6IGFyY2hpdmUuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWY6ICUuKnMiCittc2dzdHIgItGC0LDQutGK0LIg0YPQutCw0LfQsNGC0LXQuyDQvdGP0LzQsDogJS4qcyIKKworIzogYXJjaGl2ZS5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINC+0LHQtdC60YI6IOKAniVz4oCcIgorCisjOiBhcmNoaXZlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHRyZWUgb2JqZWN0OiAlcyIKK21zZ3N0ciAi0L3QtSDQtSDQvtCx0LXQutGCLdC00YrRgNCy0L46ICVzIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgItGC0LXQutGD0YnQsNGC0LAg0YDQsNCx0L7RgtC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0L3QtSDQtSDRgdC70LXQtNC10L3QsCIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImZtdCIKK21zZ3N0ciAi0KTQntCg0JzQkNCiIgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgItCk0J7QoNCc0JDQoiDQvdCwINCw0YDRhdC40LLQsCIKKworIzogYXJjaGl2ZS5jOjQ1OCBidWlsdGluL2xvZy5jOjE2NTMKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgItCf0KDQldCk0JjQmtChIgorCisjOiBhcmNoaXZlLmM6NDU5Cittc2dpZCAicHJlcGVuZCBwcmVmaXggdG8gZWFjaCBwYXRobmFtZSBpbiB0aGUgYXJjaGl2ZSIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGC0L7Qt9C4INCf0KDQldCk0JjQmtChINC60YrQvCDQstGB0LXQutC4INC/0YrRgiDQsiDQsNGA0YXQuNCy0LAiCisKKyM6IGFyY2hpdmUuYzo0NjAgYnVpbHRpbi9ibGFtZS5jOjg2MSBidWlsdGluL2JsYW1lLmM6ODY1IGJ1aWx0aW4vYmxhbWUuYzo4NjYKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTcgYnVpbHRpbi9jb25maWcuYzoxMzAgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY0IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY4IGJ1aWx0aW4vZ3JlcC5jOjg4NworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNSBidWlsdGluL2xzLWZpbGVzLmM6NTYwIGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjMKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTIgYnVpbHRpbi9ub3Rlcy5jOjU3OCBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworIzogcGFyc2Utb3B0aW9ucy5oOjE5MAorbXNnaWQgImZpbGUiCittc2dzdHIgItCk0JDQmdCbIgorCisjOiBhcmNoaXZlLmM6NDYxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICLQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQsNGA0YXQuNCy0LAg0LIg0YLQvtC30Lgg0KTQkNCZ0JsiCisKKyM6IGFyY2hpdmUuYzo0NjMKK21zZ2lkICJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLQuNC30YfQuNGC0LDQvdC1INC90LAg4oCeLmdpdGF0dHJpYnV0ZXPigJwg0LIg0YDQsNCx0L7RgtC90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPIgorCisjOiBhcmNoaXZlLmM6NDY0Cittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LDRgNGF0LjQstC40YDQsNC90LjRgtC1INGE0LDQudC70L7QstC1INC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LDRgtCwINCz0YDQtdGI0LrQsCIKKworIzogYXJjaGl2ZS5jOjQ2NQorbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgItGB0YrRhdGA0LDQvdC10L3QuNC1INCx0LXQtyDQutC+0LzQv9GA0LXRgdC40YDQsNC90LUiCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgItCx0YrRgNC30L4g0LrQvtC80L/RgNC10YHQuNGA0LDQvdC1IgorCisjOiBhcmNoaXZlLmM6NDc0Cittc2dpZCAiY29tcHJlc3MgYmV0dGVyIgorbXNnc3RyICLQtNC+0LHRgNC+INC60L7QvNC/0YDQtdGB0LjRgNCw0L3QtSIKKworIzogYXJjaGl2ZS5jOjQ3NworbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LTRitGA0LbQsNC90LjRgtC1INGE0L7RgNC80LDRgtC4IgorCisjOiBhcmNoaXZlLmM6NDc5IGJ1aWx0aW4vYXJjaGl2ZS5jOjkxIGJ1aWx0aW4vY2xvbmUuYzoxMTMgYnVpbHRpbi9jbG9uZS5jOjExNgorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTEKK21zZ2lkICJyZXBvIgorbXNnc3RyICLRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGFyY2hpdmUuYzo0ODAgYnVpbHRpbi9hcmNoaXZlLmM6OTIKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAi0LjQt9GC0LXQs9C70Y/QvdC1INC90LAg0LDRgNGF0LjQstCwINC+0YIg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INCl0KDQkNCd0JjQm9CY0KnQlSIKKworIzogYXJjaGl2ZS5jOjQ4MSBidWlsdGluL2FyY2hpdmUuYzo5MyBidWlsdGluL2RpZmZ0b29sLmM6NzE1CisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAi0LrQvtC80LDQvdC00LAiCisKKyM6IGFyY2hpdmUuYzo0ODIgYnVpbHRpbi9hcmNoaXZlLmM6OTQKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgItC/0YrRgiDQutGK0Lwg0L7RgtC00LDQu9C10YfQtdC90LDRgtCwINC60L7QvNCw0L3QtNCwIOKAnmdpdC11cGxvYWQtYXJjaGl2ZeKAnCIKKworIzogYXJjaGl2ZS5jOjQ4OQorbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICLQndC10L7Rh9Cw0LrQstCw0L3QsCDQvtC/0YbQuNGPIOKAni0tcmVtb3Rl4oCcIgorCisjOiBhcmNoaXZlLmM6NDkxCittc2dpZCAiT3B0aW9uIC0tZXhlYyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1yZW1vdGUiCittc2dzdHIgItCe0L/RhtC40Y/RgtCwIOKAni0tZXhlY+KAnCDQuNC30LjRgdC60LLQsCDigJ4tLXJlbW90ZeKAnCIKKworIzogYXJjaGl2ZS5jOjQ5MworbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tb3V0cHV0IgorbXNnc3RyICLQndC10L7Rh9Cw0LrQstCw0L3QsCDQvtC/0YbQuNGPIOKAni0tb3V0cHV04oCcIgorCisjOiBhcmNoaXZlLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIKK21zZ3N0ciAi0J3QtdC/0L7Qt9C90LDRgiDRhNC+0YDQvNCw0YIg0L3QsCDQsNGA0YXQuNCyOiDigJ4lc+KAnCIKKworIzogYXJjaGl2ZS5jOjUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJBcmd1bWVudCBub3Qgc3VwcG9ydGVkIGZvciBmb3JtYXQgJyVzJzogLSVkIgorbXNnc3RyICLQkNGA0LPRg9C80LXQvdGC0YrRgiDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsCDQt9CwINGE0L7RgNC80LDMgNGC0LAg4oCeJXPigJw6IC0lZCIKKworIzogYXJjaGl2ZS10YXIuYzoxMjUgYXJjaGl2ZS16aXAuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmVhbSBibG9iICVzIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgi1CTE9CIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtCx0YDQsNCx0L7RgtC10L0iCisKKyM6IGFyY2hpdmUtdGFyLmM6MjY2IGFyY2hpdmUtemlwLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiCittc2dzdHIgItC90LXQv9C+0LTQtNGK0YDQttCw0L3QuCDQv9GA0LDQstCwINC30LAg0LTQvtGB0YLRitC/INC00L4g0YTQsNC50Ls6IDAlbyAoU0hBMTogJXMpIgorCisjOiBhcmNoaXZlLXRhci5jOjI5MyBhcmNoaXZlLXppcC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlcyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnJXMnIGZpbHRlciIKK21zZ3N0ciAi0YTQuNC70YLRitGA0YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRgtCw0YDRgtC40YDQsNC9IgorCisjOiBhcmNoaXZlLXRhci5jOjQ2OAorbXNnaWQgInVuYWJsZSB0byByZWRpcmVjdCBkZXNjcmlwdG9yIgorbXNnc3RyICLQtNC10YHQutGA0LjQv9GC0L7RgNGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQtdC90LDRgdC+0YfQtdC9IgorCisjOiBhcmNoaXZlLXRhci5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbHRlciByZXBvcnRlZCBlcnJvciIKK21zZ3N0ciAi0YTQuNC70YLRitGA0YrRgiDigJ4lc+KAnCDQstGK0YDQvdCwINCz0YDQtdGI0LrQsCIKKworIzogYXJjaGl2ZS16aXAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCBpcyBub3QgdmFsaWQgVVRGLTg6ICVzIgorbXNnc3RyICLQv9GK0YLRj9GCINC90LUg0LUg0L/RgNCw0LLQuNC70L3QviDQutC+0LTQuNGA0LDQvSDQsiBVVEYtODogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICLRgtCy0YrRgNC00LUg0LTRitC70YrQsyDQv9GK0YIgKCVkINC30L3QsNC60LAsIFNIQTE6ICVzKTogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6NDgwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMxIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGUgZXJyb3IgKCVkKSIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQtNC10LrQvtC80L/RgNC10YHQuNGA0LDQvdC1INGBIOKAnmRlZmxhdGXigJwgKCVkKSIKKworIzogYXJjaGl2ZS16aXAuYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZXN0YW1wIHRvbyBsYXJnZSBmb3IgdGhpcyBzeXN0ZW06ICU8UFJJdU1BWD4iCittc2dzdHIgItCy0YDQtdC80LXQstCw0YLQsCDRgdGC0L7QudC90L7RgdGCINC1INGC0LLRitGA0LTQtSDQs9C+0LvRj9C80LAg0LfQsCDRgtCw0LfQuCDRgdC40YHRgtC10LzQsDogJTxQUkl1TUFYPiIKKworIzogYXR0ci5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lIgorbXNnc3RyICLigJ4lLipz4oCcINC1INC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQt9CwINCw0YLRgNC40LHRg9GCIgorCisjOiBhdHRyLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG5vdCBhbGxvd2VkOiAlczolZCIKK21zZ3N0ciAiJXM6INC60L7QvNCw0L3QtNCw0YLQsCDQvdC1INC1INC/0L7Qt9Cy0L7Qu9C10L3QsDog4oCeJXM6JWTigJwiCisKKyM6IGF0dHIuYzo0MDkKK21zZ2lkICIiCisiTmVnYXRpdmUgcGF0dGVybnMgYXJlIGlnbm9yZWQgaW4gZ2l0IGF0dHJpYnV0ZXNcbiIKKyJVc2UgJ1xcIScgZm9yIGxpdGVyYWwgbGVhZGluZyBleGNsYW1hdGlvbi4iCittc2dzdHIgIiIKKyLQntGC0YDQuNGG0LDRgtC10LvQvdC40YLQtSDRiNCw0LHQu9C+0L3QuCDRgdC1INC40LPQvdC+0YDQuNGA0LDRgiDQsiDQsNGC0YDQuNCx0YPRgtC40YLQtSDQvdCwIGdpdC5cbiIKKyLQkNC60L4g0LLQuCDRgtGA0Y/QsdCy0LAg0L3QsNGH0LDQu9C90LAg0YPQtNC40LLQuNGC0LXQu9C90LAsINC/0L7Qu9C30LLQsNC50YLQtSDigJ5cXCHigJwuIgorCisjOiBiaXNlY3QuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkbHkgcXVvdGVkIGNvbnRlbnQgaW4gZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90L4g0YbQuNGC0LjRgNCw0L3QviDRgdGK0LTRitGA0LbQsNC90LjQtSDQstGK0LIg0YTQsNC50LvQsCDigJ4lc+KAnDogJXMiCisKKyM6IGJpc2VjdC5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhXG4iCittc2dzdHIgItCf0L7QstC10YfQtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDRgtGK0YDRgdC4INC00LLQvtC40YfQvdC+IVxuIgorCisjOiBiaXNlY3QuYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgY29tbWl0IG5hbWUgJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINC/0L7QtNCw0LLQsNC90LUg4oCeJXPigJwiCisKKyM6IGJpc2VjdC5jOjc3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisi0J3QtdC/0YDQsNCy0LjQu9C90LAg0LHQsNC30LAg0LfQsCDRgdC70LjQstCw0L3QtTogJXMuXG4iCisi0KHQu9C10LTQvtCy0LDRgtC10LvQvdC+INCz0YDQtdGI0LrQsNGC0LAg0LUg0LrQvtGA0LjQs9C40YDQsNC90LAg0LzQtdC20LTRgyDigJ4lc+KAnCDQuCBbJXNdLlxuIgorCisjOiBiaXNlY3QuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIG5ldy5cbiIKKyJUaGUgcHJvcGVydHkgaGFzIGNoYW5nZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorItCd0L7QstCwINCx0LDQt9CwINC30LAg0YHQu9C40LLQsNC90LU6ICVzLlxuIgorItCh0LLQvtC50YHRgtCy0L7RgtC+INC1INC/0YDQvtC80LXQvdC10L3QviDQvNC10LbQtNGDIOKAniVz4oCcINC4IFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorItCR0LDQt9Cw0YLQsCDQt9CwINGB0LvQuNCy0LDQvdC1IOKAniVz4oCcINC1ICVzLlxuIgorItCh0LvQtdC00L7QstCw0YLQtdC70L3QviDQv9GK0YDQstC+0YLQviAlcyDQv9C+0LTQsNCy0LDQvdC1INC1INC80LXQttC00YMg4oCeJXPigJwg0LggWyVzXS5cbiIKKworIzogYmlzZWN0LmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTb21lICVzIHJldnMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlICVzIHJldi5cbiIKKyJnaXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS5cbiIKKyJNYXliZSB5b3UgbWlzdG9vayAlcyBhbmQgJXMgcmV2cz9cbiIKK21zZ3N0ciAiIgorItCd0Y/QutC+0Lgg0L7RgiDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC+0YIg4oCeJXPigJwg0L3QtSDRgdCwINC/0YDQtdC00YjQtdGB0YLQstC10L3QuNGG0Lgg0L3QsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeJXPigJwuXG4iCisi0JTQstC+0LjRh9C90L7RgtC+INGC0YrRgNGB0LXQvdC1INGBIGdpdCBiaXNlY3Qg0L3Rj9C80LAg0LTQsCDRgNCw0LHQvtGC0Lgg0L/RgNCw0LLQuNC70L3Qvi5cbiIKKyLQlNCw0LvQuCDQvdC1INGB0YLQtSDQvtCx0YrRgNC60LDQu9C4INGD0LrQsNC30LDRgtC10LvQuNGC0LUg4oCeJXPigJwg0Lgg4oCeJXPigJw/XG4iCisKKyM6IGJpc2VjdC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAlcyBhbmQgWyVzXSBtdXN0IGJlIHNraXBwZWQuXG4iCisiU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0ICVzIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCAlcy5cbiIKKyJXZSBjb250aW51ZSBhbnl3YXkuIgorbXNnc3RyICIiCisi0LHQsNC30LDRgtCwINC30LAg0YHQu9C40LLQsNC90LUg0LzQtdC20LTRgyDigJ4lc+KAnCDQuCBbJXNdINGC0YDRj9Cx0LLQsCDQtNCwINCx0YrQtNC1INC/0YDQtdGB0LrQvtGH0LXQvdCwLlxuIgorItCd0LUg0LzQvtC20LUg0LTQsCDRgdC80LUg0YHQuNCz0YPRgNC90LgsINGH0LUg0L/RitGA0LLQvtGC0L4gJXMg0L/QvtC00LDQstCw0L3QtSDQtSDQvNC10LbQtNGDIOKAniVz4oCcINC4IOKAniVz4oCcLlxuIgorItCU0LLQvtC40YfQvdC+0YLQviDRgtGK0YDRgdC10L3QtSDQv9GA0L7QtNGK0LvQttCw0LLQsC4iCisKKyM6IGJpc2VjdC5jOjg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6IGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZFxuIgorbXNnc3RyICLQlNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtTog0YLRgNGP0LHQstCwINC00LAg0YHQtSDQv9GA0L7QstC10YDQuCDQsdCw0LfQsCDQt9CwINGB0LvQuNCy0LDQvdC1XG4iCisKKyM6IGJpc2VjdC5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJhICVzIHJldmlzaW9uIGlzIG5lZWRlZCIKK21zZ3N0ciAi0L3QtdC+0LHRhdC+0LTQuNC80LAg0LUg0LLQtdGA0YHQuNGPIOKAniVz4oCcIgorCisjOiBiaXNlY3QuYzo5MjAgYnVpbHRpbi9ub3Rlcy5jOjE3NyBidWlsdGluL3RhZy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC9IgorCisjOiBiaXNlY3QuYzo5NjYgYnVpbHRpbi9tZXJnZS5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciCittc2dzdHIgItGE0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYmlzZWN0LmM6OTk3Cittc2dpZCAicmVhZGluZyBiaXNlY3QgcmVmcyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQv9GA0L7Rh9C40YLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC30LAg0LTQstC+0LjRh9C90L4g0YLRitGA0YHQtdC90LUiCisKKyM6IGJpc2VjdC5jOjEwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgd2FzIGJvdGggJXMgYW5kICVzXG4iCittc2dzdHIgIuKAniVz4oCcIGUg0LrQsNC60YLQviDigJ4lc+KAnCwg0YLQsNC60LAg0Lgg4oCeJXPigJxcbiIKKworIzogYmlzZWN0LmM6MTAyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGVzdGFibGUgY29tbWl0IGZvdW5kLlxuIgorIk1heWJlIHlvdSBzdGFydGVkIHdpdGggYmFkIHBhdGggcGFyYW1ldGVycz9cbiIKK21zZ3N0ciAiIgorItCb0LjQv9GB0LLQsCDQv9C+0LTRhdC+0LTRj9GJ0L4g0LfQsCDRgtC10YHRgtCy0LDQvdC1INC/0L7QtNCw0LLQsNC90LUuXG4iCisi0J/RgNC+0LLQtdGA0LXRgtC1INC/0LDRgNCw0LzQtdGC0YDQuNGC0LUg0LfQsCDQv9GK0YLQuNGJ0LDRgtCwLlxuIgorCisjOiBiaXNlY3QuYzoxMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIihyb3VnaGx5ICVkIHN0ZXApIgorbXNnaWRfcGx1cmFsICIocm91Z2hseSAlZCBzdGVwcykiCittc2dzdHJbMF0gIijQv9GA0LjQsdC70LjQt9C40YLQtdC70L3QviAlZCDRgdGC0YrQv9C60LApIgorbXNnc3RyWzFdICIo0L/RgNC40LHQu9C40LfQuNGC0LXQu9C90L4gJWQg0YHRgtGK0L/QutC4KSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBsYXN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCAiKHJvdWdobHkgJWQKKyMuIHN0ZXBzKSIgdHJhbnNsYXRpb24uCisjLgorIzogYmlzZWN0LmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9uIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dpZF9wbHVyYWwgIkJpc2VjdGluZzogJWQgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dzdHJbMF0gItCU0LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1OiDQvtGB0YLQsNCy0LAgJWQg0LLQtdGA0YHQuNGPINGB0LvQtdC0INGC0LDQt9C4ICVzXG4iCittc2dzdHJbMV0gItCU0LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1OiDQvtGB0YLQsNCy0LDRgiAlZCDQstC10YDRgdC40Lgg0YHQu9C10LQg0YLQsNC30LggJXNcbiIKKworIzogYmxhbWUuYzoyNzAwCittc2dpZCAiLS1jb250ZW50cyBhbmQgLS1yZXZlcnNlIGRvIG5vdCBibGVuZCB3ZWxsLiIKK21zZ3N0ciAi0J7Qv9GG0LjQuNGC0LUg4oCeLS1jb250ZW50c+KAnCDQuCDigJ4tLXJldmVyc2XigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJsYW1lLmM6MjcxNAorbXNnaWQgImNhbm5vdCB1c2UgLS1jb250ZW50cyB3aXRoIGZpbmFsIGNvbW1pdCBvYmplY3QgbmFtZSIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLS1jb250ZW50c+KAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0LjQvNC1INC90LAg0L7QsdC10LrRgiDQvtGCINC60YDQsNC50L3QviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBibGFtZS5jOjI3MzUKK21zZ2lkICItLXJldmVyc2UgYW5kIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgc3BlY2lmaWVkIGxhdGVzdCBjb21taXQiCittc2dzdHIgIiIKKyLQldC00L3QvtCy0YDQtdC80LXQvdC90L7RgtC+INC30LDQtNCw0LLQsNC90LUg0L3QsCDQvtC/0YbQuNC40YLQtSDigJ4tLXJldmVyc2XigJwg0Lgg4oCeLS1maXJzdC1wYXJlbnTigJwg0LjQt9C40YHQutCy0LAgIgorItGD0LrQsNC30LLQsNC90LXRgtC+INC90LAg0LrRgNCw0LnQvdC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJsYW1lLmM6Mjc0NCBidW5kbGUuYzoxNjcgcmVmLWZpbHRlci5jOjIyMDMgcmVtb3RlLmM6MTk0MiBzZXF1ZW5jZXIuYzoyMDA2CisjOiBzZXF1ZW5jZXIuYzo0MzU4IHN1Ym1vZHVsZS5jOjg0NyBidWlsdGluL2NvbW1pdC5jOjEwNDUgYnVpbHRpbi9sb2cuYzozODgKKyM6IGJ1aWx0aW4vbG9nLmM6OTkxIGJ1aWx0aW4vbG9nLmM6MTUyMCBidWlsdGluL2xvZy5jOjE5MjUgYnVpbHRpbi9sb2cuYzoyMjE1CisjOiBidWlsdGluL21lcmdlLmM6NDEyIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTAKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxOTIKK21zZ2lkICJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC90LDRgdGC0YDQvtC50LLQsNC90LUg0L3QsCDQvtCx0YXQvtC20LTQsNC90LXRgtC+INC90LAg0LLQtdGA0YHQuNC40YLQtSIKKworIzogYmxhbWUuYzoyNzYyCittc2dpZCAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHJhbmdlIGFsb25nIGZpcnN0LXBhcmVudCBjaGFpbiIKK21zZ3N0ciAiIgorItCV0LTQvdC+0LLRgNC10LzQtdC90L3QvtGC0L4g0LfQsNC00LDQstCw0L3QtSDQvdCwINC+0L/RhtC40LjRgtC1IOKAni0tcmV2ZXJzZeKAnCDQuCDigJ4tLWZpcnN0LXBhcmVudOKAnCDQuNC30LjRgdC60LLQsCAiCisi0YPQutCw0LfQstCw0L3QtdGC0L4g0L3QsCDQtNC40LDQv9Cw0LfQvtC9INC/0L4g0LLQtdGA0LjQs9Cw0YLQsCDQvdCwINC/0YrRgNCy0LjRgtC1INC90LDRgdC70LXQtNC90LjRhtC4IgorCisjOiBibGFtZS5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBwYXRoICVzIGluICVzIgorbXNnc3RyICLQvdGP0LzQsCDQv9GK0YIg0L3QsCDQuNC80LUg4oCeJXPigJwg0LIg4oCeJXPigJwiCisKKyM6IGJsYW1lLmM6Mjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgi1CTE9CIOKAniVz4oCcINCyINC/0YrRgtGPICVzINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBicmFuY2guYzo1MworIywgYy1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCi0iVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZVxuIgotIlRjbCBiaW5hcnkgZGlzdHJpYnV0ZWQgYnkgQ3lnd2luLiIKKyJBZnRlciBmaXhpbmcgdGhlIGVycm9yIGNhdXNlIHlvdSBtYXkgdHJ5IHRvIGZpeCB1cFxuIgorInRoZSByZW1vdGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYnkgaW52b2tpbmdcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgogbXNnc3RyICIiCiAiXG4iCi0i0KLQvtCy0LAg0LUg0L/QvtC30L3QsNGCINC/0YDQvtCx0LvQtdC8INC4INGB0LUg0LTRitC70LbQuCDQvdCwXG4iCi0i0LLQtdGA0YHQuNGP0YLQsCDQvdCwIFRjbCDQstC60LvRjtGH0LXQvdCwINCyIEN5Z3dpbi4iCisi0KHQu9C10LQg0LrQvtGA0LXQutGG0LjRjyDQvdCwINCz0YDQtdGI0LrQsNGC0LAsINC80L7QttC10YLQtSDQtNCwINC+0LHQvdC+0LLQuNGC0LVcbiIKKyLQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0LfQsCDRgdC70LXQtNC10L3QuNGPINC60LvQvtC9INGH0YDQtdC3OlxuIgorImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzIgogCi0jOiBnaXQtZ3VpLnNoOjM5MjAKLSMsIHRjbC1mb3JtYXQKKyM6IGJyYW5jaC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAiIgorItCa0LvQvtC90YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQu9GD0LbQuCDQutCw0YLQviDQuNC30YLQvtGH0L3QuNC6INC30LAg0YHQvtCx0YHRgtCy0LXQvdCw0YLQsCDRgdC4INGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNGPLiIKKworIzogYnJhbmNoLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisi0JrQu9C+0L3RitGCIOKAniVz4oCcINGJ0LUg0YHQu9C10LTQuCDQvtGC0LTQsNC70LXRh9C10L3QuNGPINC60LvQvtC9IOKAniVz4oCcINC+0YIg0YXRgNCw0L3QuNC70LjRidC10YLQviDigJ4lc+KAnCDRh9GA0LXQtyAiCisi0L/RgNC10LHQsNC30LjRgNCw0L3QtS4iCisKKyM6IGJyYW5jaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnLiIKK21zZ3N0ciAi0JrQu9C+0L3RitGCIOKAniVz4oCcINGJ0LUg0YHQu9C10LTQuCDQvtGC0LTQsNC70LXRh9C10L3QuNGPINC60LvQvtC9IOKAniVz4oCcINC+0YIg0YXRgNCw0L3QuNC70LjRidC10YLQviDigJ4lc+KAnC4iCisKKyM6IGJyYW5jaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgItCa0LvQvtC90YrRgiDigJ4lc+KAnCDRidC1INGB0LvQtdC00Lgg0LvQvtC60LDQu9C90LjRjyDQutC70L7QvSDigJ4lc+KAnCDRh9GA0LXQtyDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1LiIKKworIzogYnJhbmNoLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAi0JrQu9C+0L3RitGCIOKAniVz4oCcINGJ0LUg0YHQu9C10LTQuCDQu9C+0LrQsNC70L3QuNGPINC60LvQvtC9IOKAniVz4oCcLiIKKworIzogYnJhbmNoLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICLQmtC70L7QvdGK0YIg4oCeJXPigJwg0YnQtSDRgdC70LXQtNC4INC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0YPQutCw0LfQsNGC0LXQuyDigJ4lc+KAnCDRh9GA0LXQtyDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1LiIKKworIzogYnJhbmNoLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycuIgorbXNnc3RyICLQmtC70L7QvdGK0YIg4oCeJXPigJwg0YnQtSDRgdC70LXQtNC4INC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0YPQutCw0LfQsNGC0LXQuyDigJ4lc+KAnC4iCisKKyM6IGJyYW5jaC5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICLQmtC70L7QvdGK0YIg4oCeJXPigJwg0YnQtSDRgdC70LXQtNC4INC70L7QutCw0LvQvdC40Y8g0YPQutCw0LfQsNGC0LXQuyDigJ4lc+KAnCDRh9GA0LXQtyDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1LiIKKworIzogYnJhbmNoLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJy4iCittc2dzdHIgItCa0LvQvtC90YrRgiDigJ4lc+KAnCDRidC1INGB0LvQtdC00Lgg0LvQvtC60LDQu9C90LjRjyDRg9C60LDQt9Cw0YLQtdC7IOKAniVz4oCcLiIKKworIzogYnJhbmNoLmM6MTE5Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIHVwc3RyZWFtIGJyYW5jaCBjb25maWd1cmF0aW9uIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60LjRgtC1INC30LAg0YHQu9C10LTQtdC90LjRjyDQutC70L7QvSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC30LDQv9C40YHQsNC90LgiCisKKyM6IGJyYW5jaC5jOjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgdHJhY2tpbmc6IGFtYmlndW91cyBpbmZvcm1hdGlvbiBmb3IgcmVmICVzIgorbXNnc3RyICLQndGP0LzQsCDRgdC70LXQtNC10L3QtTog0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC30LAg0YPQutCw0LfQsNGC0LXQu9GPIOKAniVz4oCcINC90LUg0LUg0LXQtNC90L7Qt9C90LDRh9C90LAiCisKKyM6IGJyYW5jaC5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQtSDQv9C+0LfQstC+0LvQtdC90L4g0LjQvNC1INC30LAg0LrQu9C+0L0uIgorCisjOiBicmFuY2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCS0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINC60LvQvtC9INGBINC40LzQtSDigJ4lc+KAnC4iCisKKyM6IGJyYW5jaC5jOjIxMworbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi0KLQtdC60YPRidC40Y/RgiDQutC70L7QvSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC+0LHQvdC+0LLQtdC9LiIKKworIzogYnJhbmNoLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzZXR1cCB0cmFja2luZyBpbmZvcm1hdGlvbjsgc3RhcnRpbmcgcG9pbnQgJyVzJyBpcyBub3QgYSBicmFuY2guIgorbXNnc3RyICLQl9Cw0LTQsNC00LXQvdC40YLQtSDQvdCw0YHRgtGA0L7QudC60Lgg0LfQsCDRgdC70LXQtNC10L3QtdGC0L4g0YHQsCDQs9GA0LXRiNC90Lgg4oCUINC90LDRh9Cw0LvQvtGC0L4g4oCeJXPigJwg0L3QtSDQtSDQutC70L7QvS4iCisKKyM6IGJyYW5jaC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQt9Cw0Y/QstC10L3QuNGP0YIg0L7RgtC00LDQu9C10YfQtdC9INC60LvQvtC9IOKAniVz4oCcINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IGJyYW5jaC5jOjIzNwogbXNnaWQgIiIKICJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGJhc2luZyB5b3VyIHdvcmsgb24gYW4gdXBzdHJlYW1cbiIKKyJicmFuY2ggdGhhdCBhbHJlYWR5IGV4aXN0cyBhdCB0aGUgcmVtb3RlLCB5b3UgbWF5IG5lZWQgdG9cbiIKKyJydW4gXCJnaXQgZmV0Y2hcIiB0byByZXRyaWV2ZSBpdC5cbiIKICJcbiIKLSJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCi0iaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCi0idXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKLSJ+Ly5naXRjb25maWcgZmlsZS5cbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIHRvIHB1c2ggb3V0IGEgbmV3IGxvY2FsIGJyYW5jaCB0aGF0XG4iCisid2lsbCB0cmFjayBpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LCB5b3UgbWF5IHdhbnQgdG8gdXNlXG4iCisiXCJnaXQgcHVzaCAtdVwiIHRvIHNldCB0aGUgdXBzdHJlYW0gY29uZmlnIGFzIHlvdSBwdXNoLiIKIG1zZ3N0ciAiIgogIlxuIgorItCQ0LrQviDQuNGB0LrQsNGC0LUg0LTQsCDQsdCw0LfQuNGA0LDRgtC1INGA0LDQsdC+0YLQsNGC0LAg0YHQuCDQvdCwINC60LvQvtC9INC+0YIg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1LCDQvNC+0LbQtSBcbiIKKyLQtNCwINGB0LUg0L3QsNC70L7QttC4INC00LAg0LjQt9C/0YrQu9C90LjRgtC1IOKAnmdpdCBmZXRjaOKAnCwg0LfQsCDQtNCwINC/0L7Qu9GD0YfQuNGC0LUg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC30LAg0L3QtdCz0L4uXG4iCiAiXG4iCi0i0JTQvtCx0YrRgCDQt9Cw0LzQtdGB0YLQuNGC0LXQuyDQvdCwIOKAniVz4oCcXG4iCi0i0LUg0LTQsCDQv9C+0YHRgtCw0LLQuNGC0LUg0L3QsNGB0YLRgNC+0LnQutC40YLQtSDigJ51c2VyLm5hbWXigJwg0LhcbiIKLSLigJ51c2VyLmVtYWls4oCcINCyINC70LjRh9C90LjRjyDRgdC4INGE0LDQudC7IOKAnn4vLmdpdGNvbmZpZ+KAnC5cbiIKKyLQkNC60L4g0LjRgdC60LDRgtC1INC00LAg0LjQt9GC0LvQsNGB0LrQsNGC0LUg0L3QvtCyLCDQu9C+0LrQsNC70LXQvSDQutC70L7QvSwg0LrQvtC50YLQviDQtNCwINGB0LvQtdC00Lgg0L7RgtC00LDQu9C10YfQtdC9INC60LvQvtC9LFxuIgorItC80L7QttC1INC00LAg0LjQt9C/0L7Qu9C30LLQsNGC0LUg4oCeZ2l0IHB1c2ggLXXigJwsINC30LAg0LTQsCDQvdCw0YHRgtGA0L7QuNGC0LUg0LrRitC8INC60L7QuSDQutC70L7QvSDQtNCwINGB0LUgIgorItC40LfRgtC70LDRgdC60LLQsC4iCiAKLSM6IGxpYi9hYm91dC50Y2w6MjYKLW1zZ2lkICJnaXQtZ3VpIC0gYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIEdpdC4iCi1tc2dzdHIgImdpdC1ndWkg4oCUINCz0YDQsNGE0LjRh9C10L0g0LjQvdGC0LXRgNGE0LXQudGBINC30LAgR2l0LiIKKyM6IGJyYW5jaC5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINC+0LHQtdC60YI6IOKAniVz4oCcIgogCi0jOiBsaWIvYmxhbWUudGNsOjczCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogRmlsZSBWaWV3ZXIiCi1tc2dzdHIgIiVzICglcyk6INCf0YDQtdCz0LvQtdC0INC90LAg0YTQsNC50LvQvtCy0LUiCisjOiBicmFuY2guYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAi0JjQvNC10YLQviDQvdCwINC+0LHQtdC60YIg0L3QtSDQtSDQtdC00L3QvtC30L3QsNGH0L3Qvjog4oCeJXPigJwiCiAKLSM6IGxpYi9ibGFtZS50Y2w6NzkKLW1zZ2lkICJDb21taXQ6IgotbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC1OiIKKyM6IGJyYW5jaC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBicmFuY2ggcG9pbnQ6ICclcycuIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QviDQvNGP0YHRgtC+INC30LAg0L3QsNGH0LDQu9C+INC90LAg0LrQu9C+0L06IOKAniVz4oCcIgogCi0jOiBsaWIvYmxhbWUudGNsOjI4MAotbXNnaWQgIkNvcHkgQ29tbWl0IgotbXNnc3RyICLQmtC+0L/QuNGA0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtSIKKyM6IGJyYW5jaC5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0LLQtdGH0LUg0LUg0LjQt9GC0LXQs9C70LXQvSDQsiDigJ4lc+KAnCIKIAotIzogbGliL2JsYW1lLnRjbDoyODQKLW1zZ2lkICJGaW5kIFRleHQuLi4iCi1tc2dzdHIgItCi0YrRgNGB0LXQvdC1INC90LAg0YLQtdC60YHRguKApiIKKyM6IGJyYW5jaC5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIG9mIHdvcmtpbmcgdHJlZSAlcyBpcyBub3QgdXBkYXRlZCIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IOKAniVz4oCcINC90LUg0LUg0L7QsdC90L7QstC10L0iCiAKLSM6IGxpYi9ibGFtZS50Y2w6Mjg4Ci1tc2dpZCAiR290byBMaW5lLi4uIgotbXNnc3RyICLQmtGK0Lwg0YDQtdC04oCmIgorIzogYnVuZGxlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAi0KTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LjQt9Cz0LvQtdC20LTQsCDQtNCwINC1INC/0YDQsNGC0LrQsCDQvdCwIGdpdCDQstC10YDRgdC40Y8gMiIKIAotIzogbGliL2JsYW1lLnRjbDoyOTcKLW1zZ2lkICJEbyBGdWxsIENvcHkgRGV0ZWN0aW9uIgotbXNnc3RyICLQn9GK0LvQvdC+INGC0YrRgNGB0LXQvdC1INC90LAg0LrQvtC/0LjRgNCw0L3QtSIKKyM6IGJ1bmRsZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINC30LDQs9C70LDQstC90LAg0YfQsNGB0YI6ICVzJXMgKCVkKSIKIAotIzogbGliL2JsYW1lLnRjbDozMDEKLW1zZ2lkICJTaG93IEhpc3RvcnkgQ29udGV4dCIKLW1zZ3N0ciAi0J/QvtC60LDQt9Cy0LDQvdC1INC90LAg0LrQvtC90YLQtdC60YHRgtCwINC+0YIg0LjRgdGC0L7RgNC40Y/RgtCwIgorIzogYnVuZGxlLmM6OTAgcmVyZXJlLmM6NDgwIHJlcmVyZS5jOjY5MCBzZXF1ZW5jZXIuYzoyMjU4IHNlcXVlbmNlci5jOjMwMTYKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQstC+0YDQuCIKIAotIzogbGliL2JsYW1lLnRjbDozMDQKLW1zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgotbXNnc3RyICLQkNC90L7RgtC40YDQsNC90LUg0L3QsCDRgNC+0LTQuNGC0LXQu9GB0LrQvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKKyM6IGJ1bmRsZS5jOjE0MworbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICLQkiDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+INC70LjQv9GB0LLQsNGCINGB0LvQtdC00L3QuNGC0LUg0L3QtdC+0LHRhdC+0LTQuNC80Lgg0L/QvtC00LDQstCw0L3QuNGPOiIKIAotIzogbGliL2JsYW1lLnRjbDo0NjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZWFkaW5nICVzLi4uIgotbXNnc3RyICLQp9C10YLQtSDRgdC1IOKAniVz4oCc4oCmIgorIzogYnVuZGxlLmM6MTQ2Cittc2dpZCAibmVlZCBhIHJlcG9zaXRvcnkgdG8gdmVyaWZ5IGEgYnVuZGxlIgorbXNnc3RyICLQt9CwINC/0YDQvtCy0LXRgNC60LDRgtCwINC90LAg0L/RgNCw0YLQutCwINC1INC90LXQvtCx0YXQvtC00LjQvNC+INGF0YDQsNC90LjQu9C40YnQtSIKIAotIzogbGliL2JsYW1lLnRjbDo1OTQKLW1zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKLW1zZ3N0ciAi0JfQsNGA0LXQttC00LDQvdC1INC90LAg0LDQvdC+0YLQsNGG0LjQuNGC0LUg0LfQsCDQv9GA0L7RgdC70LXQtNGP0LLQsNC90LUg0L3QsCDQutC+0L/QuNGA0LDQvdC10YLQvi/Qv9GA0LXQvNC10YHRgtCy0LDQvdC10YLQvuKApiIKKyM6IGJ1bmRsZS5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAi0J/RgNCw0YLQutCw0YLQsCDRgdGK0LTRitGA0LbQsCDRgdC70LXQtNC90LjRjyDRg9C60LDQt9Cw0YLQtdC7OiIKK21zZ3N0clsxXSAi0J/RgNCw0YLQutCw0YLQsCDRgdGK0LTRitGA0LbQsCDRgdC70LXQtNC90LjRgtC1ICVkINGD0LrQsNC30LDRgtC10LvQuDoiCiAKLSM6IGxpYi9ibGFtZS50Y2w6NjE0Ci1tc2dpZCAibGluZXMgYW5ub3RhdGVkIgotbXNnc3RyICLRgNC10LTQsCDQsNC90L7RgtC40YDQsNC90LgiCisjOiBidW5kbGUuYzoyMDQKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAi0J/RgNCw0YLQutCw0YLQsCDRgdGK0LTRitGA0LbQsCDQv9GK0LvQvdCwINC40YHRgtC+0YDQuNGPLiIKIAotIzogbGliL2JsYW1lLnRjbDo4MDYKLW1zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgotbXNnc3RyICLQl9Cw0YDQtdC20LTQsNC90LUg0L3QsCDQsNC90L7RgtCw0YbQuNC40YLQtSDQt9CwINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQteKApiIKKyM6IGJ1bmRsZS5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAi0J/RgNCw0YLQutCw0YLQsCDQuNC30LjRgdC60LLQsCDRgdC70LXQtNC90LjRjyDRg9C60LDQt9Cw0YLQtdC7OiIKK21zZ3N0clsxXSAi0J/RgNCw0YLQutCw0YLQsCDQuNC30LjRgdC60LLQsCDRgdC70LXQtNC90LjRgtC1ICVkINGD0LrQsNC30LDRgtC10LvQuDoiCiAKLSM6IGxpYi9ibGFtZS50Y2w6ODA5Ci1tc2dpZCAiQW5ub3RhdGlvbiBjb21wbGV0ZS4iCi1tc2dzdHIgItCQ0L3QvtGC0LjRgNCw0L3QtdGC0L4g0LfQsNCy0YrRgNGI0LguIgorIzogYnVuZGxlLmM6MjczCittc2dpZCAidW5hYmxlIHRvIGR1cCBidW5kbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC00YPQsdC70LjRgNCw0L3QtSDQvdCwINC00LXRgdC60YDQuNC/0YLQvtGA0LAg0L3QsCDQv9GA0LDRgtC60LDRgtCwINGBIOKAnmR1cOKAnCIKIAotIzogbGliL2JsYW1lLnRjbDo4MzkKLW1zZ2lkICJCdXN5IgotbXNnc3RyICLQntC/0LXRgNCw0YbQuNGP0YLQsCDQvdC1INC1INC30LDQstGK0YDRiNC40LvQsCIKKyM6IGJ1bmRsZS5jOjI4MAorbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgcGFjay1vYmplY3Rz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGC0LDRgNGC0LjRgNCw0L3QsCIKIAotIzogbGliL2JsYW1lLnRjbDo4NDAKLW1zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKLW1zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0YLQtdGH0LUg0L/RgNC+0YbQtdGBINC90LAg0LDQvdC+0YLQuNGA0LDQvdC1LiIKKyM6IGJ1bmRsZS5jOjI5MQorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICLQmtC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IHBhY2stb2JqZWN0c+KAnCDQvdC1INC30LDQstGK0YDRiNC4INGD0YHQv9C10YjQvdC+IgogCi0jOiBsaWIvYmxhbWUudGNsOjg3OQotbXNnaWQgIlJ1bm5pbmcgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uLi4iCi1tc2dzdHIgItCY0LfQv9GK0LvQvdGP0LLQsCDRgdC1INGG0Y/Qu9C+0YHRgtC10L0g0L/RgNC+0YbQtdGBINC90LAg0L7RgtC60YDQuNCy0LDQvdC1INC90LAg0LrQvtC/0LjRgNCw0L3QteKApiIKKyM6IGJ1bmRsZS5jOjMzMworbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgcmV2LWxpc3TigJwg0L3QtSDQt9Cw0LLRitGA0YjQuCDRg9GB0L/QtdGI0L3QviIKIAotIzogbGliL2JsYW1lLnRjbDo5NDcKLW1zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCi1tc2dzdHIgItCX0LDRgNC10LbQtNCw0L3QtSDQvdCwINCw0L3QvtGC0LDRhtC40LjigKYiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTAwMAotbXNnaWQgIkF1dGhvcjoiCi1tc2dzdHIgItCQ0LLRgtC+0YA6IgotCi0jOiBsaWIvYmxhbWUudGNsOjEwMDQKLW1zZ2lkICJDb21taXR0ZXI6IgotbXNnc3RyICLQn9C+0LTQsNC7OiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDA5Ci1tc2dpZCAiT3JpZ2luYWwgRmlsZToiCi1tc2dzdHIgItCf0YrRgNCy0L7QvdCw0YfQsNC70LXQvSDRhNCw0LnQuzoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTA1NwotbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKLW1zZ3N0ciAi0J/QvtC00LDQstCw0L3QtdGC0L4g0LfQsCDQstGA0YrRhSDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQutGA0LjQtToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTExMgotbXNnaWQgIkNhbm5vdCBmaW5kIHBhcmVudCBjb21taXQ6IgotbXNnc3RyICLQoNC+0LTQuNGC0LXQu9GB0LrQvtGC0L4g0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGC0L4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTEyNwotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKLW1zZ3N0ciAi0KDQvtC00LjRgtC10LvRj9GCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LrQsNC30LDQvSIKLQotIzogbGliL2JsYW1lLnRjbDoxMTI4IGxpYi9kaWZmLnRjbDozNTgKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgotbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC30LDRgNC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9C70LjQutCwOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjY5Ci1tc2dpZCAiT3JpZ2luYWxseSBCeToiCi1tc2dzdHIgItCf0YrRgNCy0L7QvdCw0YfQsNC70L3QviDQvtGCOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjc1Ci1tc2dpZCAiSW4gRmlsZToiCi1tc2dzdHIgItCS0YrQsiDRhNCw0LnQuzoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTI4MAotbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKLW1zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QviDQuNC70Lgg0L/RgNC10LzQtdGB0YLQtdC90L4g0YLRg9C6INC+0YI6IgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoxNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IENoZWNrb3V0IEJyYW5jaCIKLW1zZ3N0ciAiJXMgKCVzKTog0JrQu9C+0L0g0LfQsCDQuNC30YLQtdCz0LvRj9C90LUiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjIxCi1tc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgotbXNnc3RyICLQmtC70L7QvSDQt9CwINC40LfRgtC10LPQu9GP0L3QtSIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjYKLW1zZ2lkICJDaGVja291dCIKLW1zZ3N0ciAi0JjQt9GC0LXQs9C70Y/QvdC1IgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMCBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzcgbGliL2JyYW5jaF9kZWxldGUudGNsOjM0Ci0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzIgbGliL2Jyb3dzZXIudGNsOjI5MiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OQotIzogbGliL2Nob29zZV9mb250LnRjbDo0NSBsaWIvbWVyZ2UudGNsOjE3OCBsaWIvb3B0aW9uLnRjbDoxMjcKLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDozNCBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQzIGxpYi90b29sc19kbGcudGNsOjQxCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMDIgbGliL3Rvb2xzX2RsZy50Y2w6MzQ1IGxpYi90cmFuc3BvcnQudGNsOjE0MQotbXNnaWQgIkNhbmNlbCIKLW1zZ3N0ciAi0J7RgtC60LDQt9Cy0LDQvdC1IgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNSBsaWIvYnJvd3Nlci50Y2w6Mjk3IGxpYi90b29sc19kbGcudGNsOjMyMQotbXNnaWQgIlJldmlzaW9uIgotbXNnc3RyICLQktC10YDRgdC40Y8iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2OSBsaWIvb3B0aW9uLnRjbDozMTAKLW1zZ2lkICJPcHRpb25zIgotbXNnc3RyICLQntC/0YbQuNC4IgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0MiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTIKLW1zZ2lkICJGZXRjaCBUcmFja2luZyBCcmFuY2giCi1tc2dzdHIgItCY0LfRgtC10LPQu9GP0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQvtGCINGB0LvQtdC00LXQvdC40Y8g0LrQu9C+0L0iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ3Ci1tc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgotbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L7RgiDQu9C+0LrQsNC70L3QuNGPINC60LvQvtC9IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBDcmVhdGUgQnJhbmNoIgotbXNnc3RyICIlcyAoJXMpOiDQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQutC70L7QvSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI4Ci1tc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCi1tc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC90L7QsiDQutC70L7QvSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDA3Ci1tc2dpZCAiQ3JlYXRlIgotbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MgotbXNnaWQgIkJyYW5jaCBOYW1lIgotbXNnc3RyICLQmNC80LUg0L3QsCDQutC70L7QvdCwIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDQgbGliL3JlbW90ZV9hZGQudGNsOjQxIGxpYi90b29sc19kbGcudGNsOjUxCi1tc2dpZCAiTmFtZToiCi1tc2dzdHIgItCY0LzQtToiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo1NwotbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaCBOYW1lIgotbXNnc3RyICLQodGK0LLQv9Cw0LTQsNC90LUg0L/QviDQuNC80LXRgtC+INC90LAg0YHQu9C10LTQtdC90LjRjyDQutC70L7QvSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Ci1tc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCi1tc2dzdHIgItCd0LDRh9Cw0LvQvdCwINCy0LXRgNGB0LjRjyIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjcyCi1tc2dpZCAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiCi1tc2dzdHIgItCe0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRiSDQutC70L7QvToiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQotbXNnaWQgIk5vIgotbXNnc3RyICLQndC1IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODAKLW1zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKLW1zZ3N0ciAi0KHQsNC80L4g0YLRgNC40LLQuNCw0LvQvdC+INC/0YDQtdCy0YrRgNGC0LDRidC+INGB0LvQuNCy0LDQvdC1IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1NzEKLW1zZ2lkICJSZXNldCIKLW1zZ3N0ciAi0J7RgtC90LDRh9Cw0LvQviIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Ci1tc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCi1tc2dzdHIgItCf0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INC60LvQvtC90LAg0YHQu9C10LQg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvNGDIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTMyCi1tc2dpZCAiUGxlYXNlIHNlbGVjdCBhIHRyYWNraW5nIGJyYW5jaC4iCi1tc2dzdHIgItCY0LfQsdC10YDQtdGC0LUg0LrQu9C+0L0g0LfQsCDRgdC70LXQtNC10L3QuC4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCi1tc2dzdHIgItCh0LvQtdC00Y/RidC40Y/RgiDQutC70L7QvSDigJQg4oCeJXPigJwsINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0LIg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtS4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjkyCi1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKLW1zZ3N0ciAi0JTQsNC50YLQtSDQuNC80LUg0L3QsCDQutC70L7QvdCwLiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NSBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTEyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCi1tc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LfQsCDQuNC80LUg0L3QsCDQutC70L7QvS4iCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IERlbGV0ZSBCcmFuY2giCi1tc2dzdHIgIiVzICglcyk6INCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC60LvQvtC9IgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjEKLW1zZ2lkICJEZWxldGUgTG9jYWwgQnJhbmNoIgotbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDQu9C+0LrQsNC70LXQvSDQutC70L7QvSIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM5Ci1tc2dpZCAiTG9jYWwgQnJhbmNoZXMiCi1tc2dzdHIgItCb0L7QutCw0LvQvdC4INC60LvQvtC90LgiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MQotbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgotbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUsINGB0LDQvNC+INCw0LrQviDQv9GA0L7QvNC10L3QuNGC0LUg0YHQsCDRgdC70LXRgtC4INC4INC00YDRg9Cz0LDQtNC1IgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTMgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMjAKLW1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCi1tc2dzdHIgItCS0LjQvdCw0LPQuCAo0LHQtdC3INC/0YDQvtCy0LXRgNC60LAg0LfQsCDRgdC70LjQstCw0L3QtSkiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCi1tc2dzdHIgItCd0LUg0LLRgdC40YfQutC4INC/0YDQvtC80LXQvdC4INCyINC60LvQvtC90LjRgtC1INGB0LAg0YHQu9C10YLQuCDQsiDigJ4lc+KAnDoiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTgKLW1zZ2lkICIiCi0iUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKLSJcbiIKLSJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKKyM6IGJ1bmRsZS5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIKIG1zZ3N0ciAiIgotItCS0YrQt9GB0YLQsNC90L7QstGP0LLQsNC90LXRgtC+INC90LAg0LjQt9GC0YDQuNGC0Lgg0LrQu9C+0L3QuCDQvNC+0LbQtSDQtNCwINC1INGC0YDRg9C00L3Qvi5cbiIKLSJcbiIKLSLQodC40LPRg9GA0L3QuCDQu9C4INGB0YLQtSwg0YfQtSDQuNGB0LrQsNGC0LUg0LTQsCDRgtGA0LjQtdGC0LU/IgorItGD0LrQsNC30LDRgtC10LvRj9GCIOKAniVz4oCcINC90LUg0LUg0LHQuNC7INCy0LrQu9GO0YfQtdC9INC/0L7RgNCw0LTQuCDQvtC/0YbQuNC40YLQtSDQt9Cw0LTQsNC00LXQvdC4INC90LAg4oCeZ2l0IHJldi1saXN04oCcIgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTMxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIC0gJXM6IgotbXNnc3RyICIg4oCUIOKAniVzOuKAnCIKKyM6IGJ1bmRsZS5jOjQ2MSBidWlsdGluL2xvZy5jOjIwMyBidWlsdGluL2xvZy5jOjE4MTQgYnVpbHRpbi9zaG9ydGxvZy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINCw0YDQs9GD0LzQtdC90YI6ICVzIgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCi0jLCB0Y2wtZm9ybWF0CisjOiBidW5kbGUuYzo0NjkKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC/0YDQsNC30L3QsCDQv9GA0LDRgtC60LAg0LUg0L3QtdCy0YrQt9C80L7QttC90L4uIgorCisjOiBidW5kbGUuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICLQpNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L0iCisKKyM6IGJ1bmRsZS5jOjUwNAorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBpbmRleC1wYWNr4oCcINC90LUg0LfQsNCy0YrRgNGI0Lgg0YPRgdC/0LXRiNC90L4iCisKKyM6IGNvbG9yLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDRhtCy0Y/RgjogJS4qcyIKKworIzogY29tbWl0LmM6NTEgc2VxdWVuY2VyLmM6MjcxOSBidWlsdGluL2FtLmM6MzU5IGJ1aWx0aW4vYW0uYzo0MDMKKyM6IGJ1aWx0aW4vYW0uYzoxMzcxIGJ1aWx0aW4vYW0uYzoyMDE0IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCIKKworIzogY29tbWl0LmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiJXMgJXMg0L3QtSDQtSDQv9C+0LTQsNCy0LDQvdC1ISIKKworIzogY29tbWl0LmM6MTkzCiBtc2dpZCAiIgotIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiU3VwcG9ydCBmb3IgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIGlzIGRlcHJlY2F0ZWRcbiIKKyJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIEdpdCB2ZXJzaW9uLlxuIgorIlxuIgorIlBsZWFzZSB1c2UgXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiXG4iCisidG8gY29udmVydCB0aGUgZ3JhZnRzIGludG8gcmVwbGFjZSByZWZzLlxuIgorIlxuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCittc2dzdHIgIiIKKyLQn9C+0LTQtNGA0YrQttC60LDRgtCwINC90LAg4oCePEdJVF9ESVI+L2luZm8vZ3JhZnRz4oCcINC1INC+0YHRgtCw0YDRj9C70LAuXG4iCisi0JIg0LHRitC00LXRidCwINCy0LXRgNGB0LjRjyDQvdCwIEdpdCDRidC1INCx0YrQtNC1INC/0YDQtdC80LDRhdC90LDRgtCwLlxuIgorIlxuIgorItCc0L7QttC1INC00LAg0L/RgNC10L7QsdGA0LDQt9GD0LLQsNGC0LUg0L/RgNC40YHQsNC00LrQuNGC0LUg0LIg0LfQsNC80LXRgdGC0LLQsNGJ0LhcbiIKKyLRg9C60LDQt9Cw0YLQtdC70Lgg0YEg0LrQvtC80LDQvdC00LDRgtCwOlxuIgorIlxuIgorIiAgICBnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVxuIgorIlxuIgorItCX0LAg0LTQsCDQuNC30LrQu9GO0YfQuNGC0LUg0YLQvtCy0LAg0YHRitC+0LHRidC10L3QuNC1LCDQuNC30L/RitC70L3QtdGC0LU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2UiCisKKyM6IGNvbW1pdC5jOjExNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSwgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiIgorItCf0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC1INGBINC90LXQtNC+0LLQtdGA0LXQvSDQv9C+0LTQv9C40YEg0L7RgiBHUEcsINC60L7QudGC0L4g0YLQstGK0YDQtNC4LCDRh9C1INC1INC90LAg4oCeJXPigJwuIgorCisjOiBjb21taXQuYzoxMTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBiYWQgR1BHIHNpZ25hdHVyZSBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICIiCisi0J/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJwg0LUg0YEg0L3QtdC/0YDQsNCy0LjQu9C10L0g0L/QvtC00L/QuNGBINC+0YIgR1BHLCDQutC+0LnRgtC+INGC0LLRitGA0LTQuCwg0YfQtSDQtSDQvdCwIOKAniVz4oCcLiIKKworIzogY29tbWl0LmM6MTE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQtSDQsdC10Lcg0L/QvtC00L/QuNGBINC+0YIgR1BHLiIKKworIzogY29tbWl0LmM6MTE2MworIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIGJ5ICVzXG4iCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC1INGBINC60L7RgNC10LrRgtC10L0g0L/QvtC00L/QuNGBINC+0YIgR1BHINC90LAg4oCeJXPigJwuXG4iCisKKyM6IGNvbW1pdC5jOjE0MTcKK21zZ2lkICIiCisiV2FybmluZzogY29tbWl0IG1lc3NhZ2UgZGlkIG5vdCBjb25mb3JtIHRvIFVURi04LlxuIgorIllvdSBtYXkgd2FudCB0byBhbWVuZCBpdCBhZnRlciBmaXhpbmcgdGhlIG1lc3NhZ2UsIG9yIHNldCB0aGUgY29uZmlnXG4iCisidmFyaWFibGUgaTE4bi5jb21taXRlbmNvZGluZyB0byB0aGUgZW5jb2RpbmcgeW91ciBwcm9qZWN0IHVzZXMuXG4iCittc2dzdHIgIiIKKyLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1INC90LUg0LUg0LrQvtC00LjRgNCw0L3QviDRgSBVVEYtOC5cbiIKKyLQnNC+0LbQtSDQtNCwINC/0L7Qv9GA0LDQstC40YLQtSDQv9C+0LTQsNCy0LDQvdC10YLQviDQt9Cw0LXQtNC90L4g0YHRitGBINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LjQu9C4INC80L7QttC1INC00LBcbiIKKyLQt9Cw0LTQsNC00LXRgtC1INC/0L7Qu9C30LLQsNC90L7RgtC+INC60L7QtNC40YDQsNC90LUg0LIg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5pMThuLmNvbW1pdGVuY29kaW5n4oCcLlxuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjIKK21zZ2lkICJjb21taXQtZ3JhcGggZmlsZSBpcyB0b28gc21hbGwiCittc2dzdHIgItGE0LDQudC70YrRgiDRgSDQs9GA0LDMgNGE0LAg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC1INGC0LLRitGA0LTQtSDQvNCw0LvRitC6IgorCisjOiBjb21taXQtZ3JhcGguYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHNpZ25hdHVyZSAlWCBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUgJVgiCittc2dzdHIgItC+0YLQv9C10YfQsNGC0YrQutGK0YIg0L3QsCDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCAlWCDQvdC1INGB0YrQstC/0LDQtNCwINGBICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAi0LLQtdGA0YHQuNGP0YLQsCDQvdCwINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwICVYINC90LUg0YHRitCy0L/QsNC00LAg0YEgJVgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgItCy0LXRgNGB0LjRj9GC0LAg0L3QsCDQutC+0L3RgtGA0L7Qu9C90LDRgtCwINGB0YPQvNCwINC90LAg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAgJVgg0L3QtSDRgdGK0LLQv9Cw0LTQsCDRgSAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MjI2Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGxvb2t1cCB0YWJsZSBlbnRyeSBtaXNzaW5nOyBmaWxlIG1heSBiZSBpbmNvbXBsZXRlIgorbXNnc3RyICIiCisi0LfQsNC/0LjRgdGK0YIg0LIg0YLQsNCx0LvQuNGG0LDRgtCwINC30LAg0L7RgtC60YrRgdC4INC70LjQv9GB0LLQsCwg0YTQsNC50LvRitGCINC30LAg0LPRgNCwzIDRhNCwINC80L7QttC1INC00LAg0LUg0L3QtdC/0YrQu9C10L0iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaW1wcm9wZXIgY2h1bmsgb2Zmc2V0ICUwOHglMDh4IgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDQvtGC0LzQtdGB0YLQstCw0L3QtSDQvdCwINC+0YLQutGK0YE6ICUwOHglMDh4IgorCisjOiBjb21taXQtZ3JhcGguYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGlkICUwOHggYXBwZWFycyBtdWx0aXBsZSB0aW1lcyIKK21zZ3N0ciAi0L7RgtC60YrRgdGK0YIgJTA4eCDRgdC1INGP0LLRj9Cy0LAg0LzQvdC+0LPQvtC60YDQsNGC0L3QviIKKworIzogY29tbWl0LWdyYXBoLmM6MzQzCittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBubyBiYXNlIGdyYXBocyBjaHVuayIKK21zZ3N0ciAi0LHQsNC30L7QstC40Y/RgiDQvtGC0LrRitGBINC70LjQv9GB0LLQsCDQsiDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKKworIzogY29tbWl0LWdyYXBoLmM6MzUzCittc2dpZCAiY29tbWl0LWdyYXBoIGNoYWluIGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICLQstC10YDQuNCz0LDRgtCwINC90LAg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0L3QtSDRgdGK0LLQv9Cw0LTQsCIKKworIzogY29tbWl0LWdyYXBoLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0LWdyYXBoIGNoYWluOiBsaW5lICclcycgbm90IGEgaGFzaCIKK21zZ3N0ciAiIgorItCz0YDQtdGI0LrQsCDQstGK0LIg0LLQtdGA0LjQs9Cw0YLQsCDQvdCwINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwOiDRgNC10LQg4oCeJXPigJwg0L3QtSDQtSDQutC+0L3RgtGA0L7Qu9C90LAg0YHRg9C80LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjQyNQorbXNnaWQgInVuYWJsZSB0byBmaW5kIGFsbCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgItC90Y/QutC+0Lgg0YTQsNC50LvQvtCy0LUg0L3QsCDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC+0YLQutGA0LjRgtC4IgorCisjOiBjb21taXQtZ3JhcGguYzo1NTggY29tbWl0LWdyYXBoLmM6NjE4Cittc2dpZCAiaW52YWxpZCBjb21taXQgcG9zaXRpb24uIGNvbW1pdC1ncmFwaCBpcyBsaWtlbHkgY29ycnVwdCIKK21zZ3N0ciAiIgorItC90LXQv9GA0LDQstC40LvQvdCwINC/0L7Qt9C40YbQuNGPINC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4uICDQktC10YDQvtGP0YLQvdC+INCz0YDQsNGE0YrRgiDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC1INC/0L7QstGA0LXQtNC10L0iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQviIKKworIzogY29tbWl0LWdyYXBoLmM6ODUyIGJ1aWx0aW4vYW0uYzoxMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LXRgtC+INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvdC+OiAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTAxMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCB0eXBlIG9mIG9iamVjdCAlcyIKK21zZ3N0ciAi0LLQuNC00YrRgiDQvdCwINC+0LHQtdC60YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7Qv9GA0LXQtNC10LvQtdC9IgorCisjOiBjb21taXQtZ3JhcGguYzoxMDQzCittc2dpZCAiTG9hZGluZyBrbm93biBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAi0JfQsNGA0LXQttC00LDQvdC1INC90LAg0L/QvtC30L3QsNGC0LjRgtC1INC/0L7QtNCw0LLQsNC90LjRjyDQsiDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKKworIzogY29tbWl0LWdyYXBoLmM6MTA2MAorbXNnaWQgIkV4cGFuZGluZyByZWFjaGFibGUgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgItCg0LDQt9GI0LjRgNGP0LLQsNC90LUg0L3QsCDQtNC+0YHRgtC40LbQuNC80LjRgtC1INC/0L7QtNCw0LLQsNC90LjRjyDQsiDQs9GA0LDMgNGE0LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNzkKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLQmNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINC+0YLQsdC10LvRj9C30LLQsNC90LjRj9GC0LAg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINCyINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDk4Cittc2dpZCAiQ29tcHV0aW5nIGNvbW1pdCBncmFwaCBnZW5lcmF0aW9uIG51bWJlcnMiCittc2dzdHIgItCY0LfRh9C40YHQu9GP0LLQsNC90LUg0L3QsCDQvdC+0LzQtdGA0LDRgtCwINC90LAg0L/QvtC60L7Qu9C10L3QuNGP0YLQsCDQsiDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKKworIzogY29tbWl0LWdyYXBoLmM6MTE3MworIywgYy1mb3JtYXQKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrcyIKK21zZ3N0clswXSAi0J7RgtC60YDQuNCy0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQsiDQs9GA0LDMgNGE0LAg0LIgJWQg0L/QsNC60LXRgtC10L0g0YTQsNC50LsiCittc2dzdHJbMV0gItCe0YLQutGA0LjQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LIg0LPRgNCwzIDRhNCwINCyICVkINC/0LDQutC10YLQvdC4INGE0LDQudC70LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgYWRkaW5nIHBhY2sgJXMiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0LTQvtCx0LDQstGP0L3QtSDQvdCwINC/0LDQutC10YLQtdC9INGE0LDQudC7IOKAniVz4oCcIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgaW5kZXggZm9yICVzIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC+0YLQstCw0YDRj9C90LUg0L3QsCDQuNC90LTQtdC60YHQsCDQvdCwIOKAniVz4oCcIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBmcm9tICVkIHJlZnMiCittc2dzdHJbMF0gItCe0YLQutGA0LjQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LIg0LPRgNCwzIDRhNCwINC40LfQvNC10LbQtNGDICVkINGD0LrQsNC30LDRgtC10LsiCittc2dzdHJbMV0gItCe0YLQutGA0LjQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LIg0LPRgNCwzIDRhNCwINC40LfQvNC10LbQtNGDICVkINGD0LrQsNC30LDRgtC10LvQuCIKKworIzogY29tbWl0LWdyYXBoLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBvYmplY3QgaWQ6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQvdCwINC+0LHQtdC60YIt0L/QvtC00LDQstCw0L3QtTog4oCeJXPigJwiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNDkKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBhbW9uZyBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAi0J7RgtC60YDQuNCy0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQsiDQs9GA0LDMgNGE0LAg0LjQt9C80LXQttC00YMg0L/QsNC60LXRgtC40YDQsNC90LjRgtC1INC+0LHQtdC60YLQuCIKKworIzogY29tbWl0LWdyYXBoLmM6MTI2NAorbXNnaWQgIkNvdW50aW5nIGRpc3RpbmN0IGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLQn9GA0LXQsdGA0L7Rj9Cy0LDQvdC1INC90LAg0YDQsNC30LvQuNGH0L3QuNGC0LUg0L/QvtC00LDQstCw0L3QuNGPINCyINCz0YDQsMyA0YTQsCIKKworIzogY29tbWl0LWdyYXBoLmM6MTI5NAorbXNnaWQgIkZpbmRpbmcgZXh0cmEgZWRnZXMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLQntGC0LrRgNC40LLQsNC90LUg0L3QsCDQvtGJ0LUg0LLRitGA0YXQvtCy0LUg0LIg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNDAKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29ycmVjdCBudW1iZXIgb2YgYmFzZSBncmFwaCBpZHMiCittc2dzdHIgItC/0YDQsNCy0LjQu9C90LjRj9GCINCx0YDQvtC5INC90LAg0LHQsNC30L7QstC40YLQtSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNC4INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQv9C40YjQtSIKKworIzogY29tbWl0LWdyYXBoLmM6MTM3MyBtaWR4LmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAlcyIKK21zZ3N0ciAi0YDQvtC00LjRgtC10LvRgdC60LjRgtC1INC00LjRgNC10LrRgtC+0YDQuNC4INC90LAg4oCeJXPigJwg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDRgdGK0LfQtNCw0LTQtdC90LgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzODUgYnVpbHRpbi9pbmRleC1wYWNrLmM6MzA2IGJ1aWx0aW4vcmVwYWNrLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAi0L/QsNC60LXRgtC90LjRj9GCINGE0LDQudC7IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC9IgorCisjOiBjb21taXQtZ3JhcGguYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzIgorbXNnaWRfcGx1cmFsICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzc2VzIgorbXNnc3RyWzBdICLQl9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQsiAlZCDQv9Cw0YEiCittc2dzdHJbMV0gItCX0LDQv9Cw0LfQstCw0L3QtSDQvdCwINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINCyICVkINC/0LDRgdCwIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDg2Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gY29tbWl0LWdyYXBoIGNoYWluIGZpbGUiCittc2dzdHIgItGE0LDQudC70YrRgiDRgSDQstC10YDQuNCz0LDRgtCwINC90LAg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCy0L7RgNC4IgorCisjOiBjb21taXQtZ3JhcGguYzoxNDk4Cittc2dpZCAiZmFpbGVkIHRvIHJlbmFtZSBiYXNlIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICLQvtGB0L3QvtCy0L3QuNGP0YIg0YTQsNC50Lsg0L3QsCDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvSIKKworIzogY29tbWl0LWdyYXBoLmM6MTUxOAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgdGVtcG9yYXJ5IGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICLQstGA0LXQvNC10L3QvdC40Y/RgiDRhNCw0LnQuyDQvdCwINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9IgorCisjOiBjb21taXQtZ3JhcGguYzoxNjMxCittc2dpZCAiU2Nhbm5pbmcgbWVyZ2VkIGNvbW1pdHMiCittc2dzdHIgItCi0YrRgNGB0LXQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDRgdGK0YEg0YHQu9C40LLQsNC90LjRjyIKKworIzogY29tbWl0LWdyYXBoLmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGR1cGxpY2F0ZSBjb21taXQgaWQgJXMiCittc2dzdHIgItC90LXQvtGH0LDQutCy0LDQvSwg0L/QvtCy0YLQsNGA0Y/RiSDRgdC1INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC90LAg0L/QvtC00LDQstCw0L3QtTogJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NjUKK21zZ2lkICJNZXJnaW5nIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAi0KHQu9C40LLQsNC90LUg0L3QsCDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKKworIzogY29tbWl0LWdyYXBoLmM6MTg0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgY29tbWl0IGdyYXBoIGZvcm1hdCBjYW5ub3Qgd3JpdGUgJWQgY29tbWl0cyIKK21zZ3N0ciAi0YTQvtGA0LzQsNGC0YrRgiDQvdCwINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC90LUg0LzQvtC20LUg0LTQsCDQt9Cw0L/QuNGI0LUgJWQg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBjb21taXQtZ3JhcGguYzoxODU1Cittc2dpZCAidG9vIG1hbnkgY29tbWl0cyB0byB3cml0ZSBncmFwaCIKK21zZ3N0ciAi0L/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0L/QvtC00LDQstCw0L3QuNGPINC30LAg0LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0LPRgNCwzIDRhNCwIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTQ0Cittc2dpZCAidGhlIGNvbW1pdC1ncmFwaCBmaWxlIGhhcyBpbmNvcnJlY3QgY2hlY2tzdW0gYW5kIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICLQs9GA0LDRhNGK0YIg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQtSDRgSDQs9GA0LXRiNC90LAg0YHRg9C80LAg0LfQsCDQv9GA0L7QstC10YDQutCwIOKAlCDQstC10YDQvtGP0YLQvdC+INC1INC/0L7QstGA0LXQtNC10L0iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgT0lEIG9yZGVyOiAlcyB0aGVuICVzIgorbXNnc3RyICIiCisi0L3QtdC/0YDQsNCy0LjQu9C90LAg0L/QvtC00YDQtdC00LHQsCDQvdCwINC+0LHQtdC60YLQuNGC0LUg0L/QviDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQsiDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsDog4oCeJXPigJwgIgorItC1INC/0YDQtdC00Lgg4oCeJXPigJwsINCwINC90LUg0YLRgNGP0LHQstCwIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTY0IGNvbW1pdC1ncmFwaC5jOjE5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgZmFub3V0IHZhbHVlOiBmYW5vdXRbJWRdID0gJXUgIT0gJXUiCittc2dzdHIgIiIKKyLQvdC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg0L7RgtC60YrRgSDQsiDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsDogZmFub3V0WyVkXSA9ICV1LCDQsCAiCisi0YLRgNGP0LHQstCwINC00LAg0LUgJXUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnCDQsiDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQsNC90LDQu9C40LfQuNGA0LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5ODkKK21zZ2lkICJWZXJpZnlpbmcgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINCyINCz0YDQsMyA0YTQsCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAwMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gb2JqZWN0IGRhdGFiYXNlIGZvciBjb21taXQtZ3JhcGgiCittc2dzdHIgIiIKKyLQv9C+0LTQsNCy0LDQvdC1IOKAniVz4oCcINCyINCx0LDQt9Cw0YLQsCDQvtGCINC00LDQvdC90Lgg0LrRitC8INCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC90LUg0LzQvtC20LUg0LTQsCDRgdC1ICIKKyLQsNC90LDQu9C40LfQuNGA0LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiIgorItC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0YrRgiDQvdCwINC+0LHQtdC60YIg0LfQsCDQutC+0YDQtdC90L7QstC+0YLQviDQtNGK0YDQstC+INC30LAg0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnCDQsiDQs9GA0LDMgNGE0LAg0YEgIgorItC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LUg4oCeJXPigJwsINCwINGC0YDRj9Cx0LLQsCDQtNCwINC1IOKAniVz4oCcIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIGlzIHRvbyBsb25nIgorbXNnc3RyICLRgdC/0LjRgdGK0LrRitGCINGBINGA0L7QtNC40YLQtdC70Lgg0L3QsCDigJ4lc+KAnCDQsiDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQtSDQv9GA0LXQutCw0LvQtdC90L4g0LTRitC70YrQsyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGZvciAlcyBpcyAlcyAhPSAlcyIKK21zZ3N0ciAi0YDQvtC00LjRgtC10LvRj9GCINC90LAg4oCeJXPigJwg0LIg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LUg4oCeJXPigJwsINCwINGC0YDRj9Cx0LLQsCDQtNCwINC1IOKAniVz4oCcIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIHRlcm1pbmF0ZXMgZWFybHkiCittc2dzdHIgItGB0L/QuNGB0YrQutGK0YIg0YEg0YDQvtC00LjRgtC10LvQuCDQvdCwIOKAniVz4oCcINCyINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC1INC/0YDQtdC60LDQu9C10L3QviDQutGK0YEiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgZ2VuZXJhdGlvbiBudW1iZXIgemVybyBmb3IgY29tbWl0ICVzLCBidXQgbm9uLXplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisi0L3QvtC80LXRgNGK0YIg0L3QsCDQv9C+0LrQvtC70LXQvdC40LXRgtC+INC90LAg0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnCDQsiDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQtSAwLCDQsCDQtNGA0YPQs9Cw0LTQtSAiCisi0L3QtSDQtSIKKworIzogY29tbWl0LWdyYXBoLmM6MjA1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY29tbWl0LWdyYXBoIGhhcyBub24temVybyBnZW5lcmF0aW9uIG51bWJlciBmb3IgY29tbWl0ICVzLCBidXQgemVybyBlbHNld2hlcmUiCittc2dzdHIgIiIKKyLQvdC+0LzQtdGA0YrRgiDQvdCwINC/0L7QutC+0LvQtdC90LjQtdGC0L4g0L3QsCDQv9C+0LTQsNCy0LDQvdC1IOKAniVz4oCcINCyINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC90LUg0LUgMCwg0LAgIgorItC00YDRg9Cz0LDQtNC1INC1IgorCisjOiBjb21taXQtZ3JhcGguYzoyMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBnZW5lcmF0aW9uIGZvciBjb21taXQgJXMgaXMgJXUgIT0gJXUiCittc2dzdHIgIiIKKyLQvdC+0LzQtdGA0YrRgiDQvdCwINC/0L7QutC+0LvQtdC90LjQtdGC0L4g0L3QsCDQv9C+0LTQsNCy0LDQvdC1IOKAniVz4oCcINCyINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC1ICV1LCDQsCAiCisi0LTRgNGD0LPQsNC00LUg0LUgJXUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0IGRhdGUgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJTxQUkl1TUFYPiAhPSAlPFBSSXVNQVg+IgorbXNnc3RyICIiCisi0LTQsNGC0LDRgtCwINC90LAg0L/QvtC00LDQstCw0L3QtSDQvdCwIOKAniVz4oCcINCyINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC1ICU8UFJJdU1BWD4sINCwINGC0YDRj9Cx0LLQsCDQtNCwINC1ICIKKyIlPFBSSXVNQVg+IgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgItC/0LDQvNC10YLRgtCwINGB0LLRitGA0YjQuCIKKworIzogY29uZmlnLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGNlZWRlZCBtYXhpbXVtIGluY2x1ZGUgZGVwdGggKCVkKSB3aGlsZSBpbmNsdWRpbmdcbiIKKyJcdCVzXG4iCisiZnJvbVxuIgorIlx0JXNcbiIKKyJUaGlzIG1pZ2h0IGJlIGR1ZSB0byBjaXJjdWxhciBpbmNsdWRlcy4iCittc2dzdHIgIiIKKyLQvNCw0LrRgdC40LzQsNC70L3QsNGC0LAg0LTRitC70LHQvtGH0LjQvdCwINC90LAg0LLQu9Cw0LPQsNC90LUgKCVkKSDQtSDQvdCw0LTQstC40YjQtdC90LAg0L/RgNC4INCy0LzRitC60LLQsNC90LXRgtC+INC90LA6XG4iCisiICAgICVzXG4iCisi0L7RglxuIgorIiAgICAlc1xuIgorItCi0L7QstCwINC80L7QttC1INC00LAg0YHQtSDQtNGK0LvQttC4INC90LAg0LfQsNGG0LjQutC70Y/QvdC1INC/0YDQuCDQstC80YrQutCy0LDQvdC10YLQvi4iCisKKyM6IGNvbmZpZy5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhwYW5kIGluY2x1ZGUgcGF0aCAnJXMnIgorbXNnc3RyICLQv9GK0YLRj9GCINC30LAg0LLQvNGK0LrQstCw0L3QtSDigJ4lc+KAnNC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgNCw0LfRiNC40YDQtdC9IgorCisjOiBjb25maWcuYzoxNTEKK21zZ2lkICJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZXMgbXVzdCBjb21lIGZyb20gZmlsZXMiCittc2dzdHIgItC+0YLQvdC+0YHQuNGC0LXQu9C90LjRgtC1INCy0LzRitC60LLQsNC90LjRjyDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDRgtGA0Y/QsdCy0LAg0LTQsCDQuNC00LLQsNGCINC+0YIg0YTQsNC50LvQvtCy0LUiCisKKyM6IGNvbmZpZy5jOjE5NworbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAi0L7RgtC90L7RgdC40YLQtdC70L3QuNGC0LUg0YPRgdC70L7QstC90Lgg0LjQt9GA0LDQt9C4INC30LAg0LLQvNGK0LrQstCw0L3QtSDRgtGA0Y/QsdCy0LAg0LTQsCDQuNC00LLQsNGCINC+0YIg0YTQsNC50LvQvtCy0LUiCisKKyM6IGNvbmZpZy5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiBhIHNlY3Rpb246ICVzIgorbXNnc3RyICLQutC70Y7Rh9GK0YIg0L3QtSDRgdGK0LTRitGA0LbQsCDRgNCw0LfQtNC10Ls6IOKAniVz4oCcIgorCisjOiBjb25maWcuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gdmFyaWFibGUgbmFtZTogJXMiCittc2dzdHIgItC60LvRjtGH0YrRgiDQvdC1INGB0YrQtNGK0YDQttCwINC40LzQtSDQvdCwINC/0YDQvtC80LXQvdC70LjQstCwOiDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6NDA2IHNlcXVlbmNlci5jOjI0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQutC70Y7Rhzog4oCeJXPigJwiCisKKyM6IGNvbmZpZy5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQutC70Y7RhyAo0L3QvtCyINGA0LXQtCk6IOKAniVz4oCcIgorCisjOiBjb25maWcuYzo0NDggY29uZmlnLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGNvbmZpZyBwYXJhbWV0ZXI6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC10L0g0L/QsNGA0LDQvNC10YLRitGAOiDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGZvcm1hdCBpbiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YTQvtGA0LzQsNGCINCyIOKAniVz4oCcIgorCisjOiBjb25maWcuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGJsb2IgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGA0LXQtCDQt9CwINC90LDRgdGC0YDQvtC50LrQuCAlZCDQsiBCTE9CIOKAniVz4oCcIgorCisjOiBjb25maWcuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGZpbGUgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGA0LXQtCDQt9CwINC90LDRgdGC0YDQvtC50LrQuCAlZCDQstGK0LIg0YTQsNC50LvQsCDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6ODI5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YDQtdC0INC30LAg0L3QsNGB0YLRgNC+0LnQutC4ICVkINC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogY29uZmlnLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdWJtb2R1bGUtYmxvYiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YDQtdC0INC30LAg0L3QsNGB0YLRgNC+0LnQutC4ICVkINCyIEJMT0Ig0LfQsCDQv9C+0LTQvNC+0LTRg9C7IOKAniVz4oCcIgorCisjOiBjb25maWcuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YDQtdC0INC30LAg0L3QsNGB0YLRgNC+0LnQutC4ICVkINC90LAg0LrQvtC80LDQvdC00L3QuNGPINGA0LXQtCDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YDQtdC0INC30LAg0L3QsNGB0YLRgNC+0LnQutC4ICVkINCyIOKAniVz4oCcIgorCisjOiBjb25maWcuYzo5NzgKK21zZ2lkICJvdXQgb2YgcmFuZ2UiCittc2dzdHIgItC40LfQstGK0L0g0LTQuNCw0L/QsNC30L7QvdCwIgorCisjOiBjb25maWcuYzo5NzgKK21zZ2lkICJpbnZhbGlkIHVuaXQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINC80LXRgNC90LAg0LXQtNC40L3QuNGG0LAiCisKKyM6IGNvbmZpZy5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINGH0LjRgdC70L7QstCwINGB0YLQvtC50L3QvtGB0YIg4oCeJXPigJwg0LfQsCDigJ4lc+KAnDogJXMiCisKKyM6IGNvbmZpZy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBibG9iICVzOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YfQuNGB0LvQvtCy0LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCDQt9CwIOKAniVz4oCcINCyIEJMT0Ig4oCeJXPigJw6ICVzIgorCisjOiBjb25maWcuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRh9C40YHQu9C+0LLQsCDRgdGC0L7QudC90L7RgdGCIOKAniVz4oCcINC30LAg4oCeJXPigJwg0LLRitCyINGE0LDQudC70LAg4oCeJXPigJw6ICVzIgorCisjOiBjb25maWcuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN0YW5kYXJkIGlucHV0OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YfQuNGB0LvQvtCy0LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCDQt9CwIOKAniVz4oCcINC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtDogJXMiCisKKyM6IGNvbmZpZy5jOjEwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRh9C40YHQu9C+0LLQsCDRgdGC0L7QudC90L7RgdGCIOKAniVz4oCcINC30LAg4oCeJXPigJwg0LIgQkxPQiDQvtGCINC/0L7QtNC80L7QtNGD0Lsg4oCeJXPigJw6ICVzIgorCisjOiBjb25maWcuYzoxMDEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINGH0LjRgdC70L7QstCwINGB0YLQvtC50L3QvtGB0YIg4oCeJXPigJwg0LfQsCDigJ4lc+KAnCDQvdCwINC60L7QvNCw0L3QtNC90LjRjyDRgNC10LQg4oCeJXPigJw6ICVzIgorCisjOiBjb25maWcuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YfQuNGB0LvQvtCy0LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCDQt9CwIOKAniVz4oCcINCyICVzOiAlcyIKKworIzogY29uZmlnLmM6MTEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhwYW5kIHVzZXIgZGlyIGluOiAnJXMnIgorbXNnc3RyICLQtNC+0LzQsNGI0L3QsNGC0LAg0L/QsNC/0LrQsCDQvdCwINC/0L7RgtGA0LXQsdC40YLQtdC70Y8g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgtCwOiDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6MTExNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZvciAnJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQtSDQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDQstGA0LXQvNC1INC30LAg4oCeJXPigJwiCisKKyM6IGNvbmZpZy5jOjEyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJicmV2IGxlbmd0aCBvdXQgb2YgcmFuZ2U6ICVkIgorbXNnc3RyICLQtNGK0LvQttC40L3QsNGC0LAg0L3QsCDRgdGK0LrRgNCw0YnQsNCy0LDQvdC1INC1INC40LfQstGK0L0g0LjQvdGC0LXRgNCy0LDQu9CwIChbNDsgNDBdKTogJWQiCisKKyM6IGNvbmZpZy5jOjEyMjIgY29uZmlnLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0L3QuNCy0L4g0L3QsCDQutC+0LzQv9GA0LXRgdC40YDQsNC90LU6ICVkIgorCisjOiBjb25maWcuYzoxMzI1Cittc2dpZCAiY29yZS5jb21tZW50Q2hhciBzaG91bGQgb25seSBiZSBvbmUgY2hhcmFjdGVyIgorbXNnc3RyICLQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmNvcmUuY29tbWVudENoYXLigJwg0YLRgNGP0LHQstCwINC00LAg0LUg0YHQsNC80L4g0LXQtNC40L0g0LfQvdCw0LoiCisKKyM6IGNvbmZpZy5jOjEzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIGZvciBvYmplY3QgY3JlYXRpb246ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRgNC10LbQuNC8INC30LAg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC+0LHQtdC60YLQuDogJXMiCisKKyM6IGNvbmZpZy5jOjE0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwIOKAniVz4oCcIgorCisjOiBjb25maWcuYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCeJXPigJw6IOKAniVz4oCcIgorCisjOiBjb25maWcuYzoxNDU3Cittc2dpZCAibXVzdCBiZSBvbmUgb2Ygbm90aGluZywgbWF0Y2hpbmcsIHNpbXBsZSwgdXBzdHJlYW0gb3IgY3VycmVudCIKK21zZ3N0ciAiIgorItGC0YDRj9Cx0LLQsCDQtNCwINC1INC10LTQvdCwINC+0YIg0YHQu9C10LTQvdC40YLQtSDRgdGC0L7QudC90L7RgdGC0Lg6IOKAnm5vdGhpbmfigJwgKNCx0LXQtyDQuNC30YLQu9Cw0YHQutCy0LDQvdC1INC/0YDQuCDQu9C40L/RgdCwICIKKyLQvdCwINGD0LrQsNC30LDRgtC10LspLCDigJ5tYXRjaGluZ+KAnCAo0LLRgdC40YfQutC4INC60LvQvtC90Lgg0YHRitGBINGB0YrQstC/0LDQtNCw0YnQuCDQuNC80LXQvdCwKSwgIgorIuKAnnNpbXBsZeKAnCAo0LrQu9C+0L3RitGCINGB0YrRgSDRgdGK0YnQvtGC0L4g0LjQvNC1LCDQvtGCINC60L7QudGC0L4g0YHQtSDQuNC30LTRitGA0L/QstCwKSwg4oCedXBzdHJlYW3igJwgKNC60LvQvtC90YrRgiwgIgorItC+0YIg0LrQvtC50YLQviDRgdC1INC40LfQtNGK0YDQv9Cy0LApINC40LvQuCDigJ5jdXJyZW504oCcICjQutC70L7QvdGK0YIg0YHRitGBINGB0YrRidC+0YLQviDQuNC80LUpIgorCisjOiBjb25maWcuYzoxNTE4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjayBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0L3QuNCy0L4g0L3QsCDQutC+0LzQv9GA0LXRgdC40YDQsNC90LUg0L/RgNC4INC/0LDQutC10YLQuNGA0LDQvdC1OiAlZCIKKworIzogY29uZmlnLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBjb25maWcgYmxvYiBvYmplY3QgJyVzJyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YItQkxPQiDigJ4lc+KAnCDRgSDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lgg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNGA0LXQtNC4IgorCisjOiBjb25maWcuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgYmxvYiIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeJXPigJwg0L3QtSDRgdC+0YfQuCDQutGK0Lwg0L7QsdC10LrRgi1CTE9CIgorCisjOiBjb25maWcuYzoxNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIGNvbmZpZyBibG9iICclcyciCittc2dzdHIgItC+0LHQtdC60YLRitGCLUJMT0Ig4oCeJXPigJwg0YEg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YIiCisKKyM6IGNvbmZpZy5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L0iCisKKyM6IGNvbmZpZy5jOjE3NDMKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90Lgg0L3QsNGB0YLRgNC+0LnQutC4INC+0YIg0LrQvtC80LDQvdC00L3QuNGPINGA0LXQtCIKKworIzogY29uZmlnLmM6MjA5NworbXNnaWQgInVua25vd24gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyIKK21zZ3N0ciAi0L3QtdC+0YfQsNC60LLQsNC90LAg0LPRgNC10YjQutCwINC/0YDQuCDQuNC30YfQuNGC0LDQvdC10YLQviDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGNvbmZpZy5jOjIyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0gJXM6IOKAniVz4oCcIgorCisjOiBjb25maWcuYzoyMzEyCisjLCBjLWZvcm1hdAorbXNnaWQgInNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSB2YWx1ZSAnJWQnIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCIKK21zZ3N0ciAiIgorItGB0YLQvtC50L3QvtGB0YLRgtCwINC90LAg4oCec3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdl4oCcINGC0YDRj9Cx0LLQsCDQtNCwINC1INC80LXQttC00YMgMSDQuCAxMDAsINCwINC90LUgIgorIiVkIgorCisjOiBjb25maWcuYzoyMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJXMnIGZyb20gY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAi0L3QtdGA0LDQt9C/0L7Qt9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIg4oCeJXPigJwg0L7RgiDQutC+0LzQsNC90LTQvdC40Y8g0YDQtdC0IgorCisjOiBjb25maWcuYzoyMzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgdmFyaWFibGUgJyVzJyBpbiBmaWxlICclcycgYXQgbGluZSAlZCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0L3QsNGB0YLRgNC+0LnQutCwIOKAniVz4oCcINCy0YrQsiDRhNCw0LnQu9CwIOKAniVz4oCcINC90LAg0YDQtdC0IOKEliVkIgorCisjOiBjb25maWcuYzoyNDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINGA0LDQt9C00LXQuzog4oCeJXPigJwiCisKKyM6IGNvbmZpZy5jOjI0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAi0LfQsNC00LDQtNC10L3QuCDRgdCwINC90Y/QutC+0LvQutC+INGB0YLQvtC50L3QvtGB0YLQuCDQt9CwIOKAniVz4oCcIgorCisjOiBjb25maWcuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICLQvdC+0LLQuNGP0YIg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtdC9INGE0LDQudC7IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QsNC30LXQvSIKKworIzogY29uZmlnLmM6Mjc1NCBjb25maWcuYzozMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb2NrIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICLQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90LjRj9GCINGE0LDQudC7IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0LrQu9GO0YfQtdC9IgorCisjOiBjb25maWcuYzoyNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgJXMiCittc2dzdHIgItC+0YLQstCw0YDRj9C90LUg0L3QsCDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6MjgwMCBidWlsdGluL2NvbmZpZy5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdHRlcm46ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRiNCw0LHQu9C+0L06ICVzIgorCisjOiBjb25maWcuYzoyODI1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LXQvSDRhNCw0LnQuzog4oCeJXPigJwiCisKKyM6IGNvbmZpZy5jOjI4MzggY29uZmlnLmM6MzA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJmc3RhdCBvbiAlcyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAnmZzdGF04oCcINCy0YrRgNGF0YMg4oCeJXPigJwiCisKKyM6IGNvbmZpZy5jOjI4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1tYXAgJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCebW1hcOKAnCDQstGK0YDRhdGDIOKAniVz4oCcIgorCisjOiBjb25maWcuYzoyODU4IGNvbmZpZy5jOjMwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2htb2Qgb24gJXMgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90LAg0YHQvNGP0L3QsCDQvdCwINC/0YDQsNCy0LAg0YEg4oCeY2htb2TigJwg0LLRitGA0YXRgyDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6Mjk0MyBjb25maWcuYzozMTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAi0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IGNvbmZpZy5jOjI5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIHRvICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQtNCw0LTQtSDQtNCwINC1IOKAniVz4oCcIgorCisjOiBjb25maWcuYzoyOTc5IGJ1aWx0aW4vcmVtb3RlLmM6NjU1IGJ1aWx0aW4vcmVtb3RlLmM6ODQ5IGJ1aWx0aW4vcmVtb3RlLmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1bnNldCAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQvNCw0YXQvdC1IgorCisjOiBjb25maWcuYzozMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0LjQvNC1INC90LAg0YDQsNC30LTQtdC7OiAlcyIKKworIzogY29uZmlnLmM6MzIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIHZhbHVlIGZvciAnJXMnIgorbXNnc3RyICLQu9C40L/RgdCy0LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwIOKAniVz4oCcIgorCisjOiBjb25uZWN0LmM6NjEKK21zZ2lkICJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVwb24gaW5pdGlhbCBjb250YWN0IgorbXNnc3RyICLQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INC/0YDQtdC60YrRgdC90LAg0LLRgNGK0LfQutCw0YLQsCDQstC10LTQvdCw0LPQsCDRgdC70LXQtCDQvtGC0LLQsNGA0Y/QvdC10YLQviDRnSIKKworIzogY29ubmVjdC5jOjYzCittc2dpZCAiIgorIkNvdWxkIG5vdCByZWFkIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkuXG4iCisiXG4iCisiUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBhY2Nlc3MgcmlnaHRzXG4iCisiYW5kIHRoZSByZXBvc2l0b3J5IGV4aXN0cy4iCittc2dzdHIgIiIKKyLQndC1INC80L7QttC1INC00LAg0YHQtSDRh9C10YLQtSDQvtGCINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUuXG4iCisiXG4iCisi0J/RgNC+0LLQtdGA0LXRgtC1INC00LDQu9C4INGC0L4g0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0Lgg0LTQsNC70Lgg0LjQvNCw0YLQtSDQv9GA0LDQstCwXG4iCisi0LfQsCDQtNC+0YHRgtGK0L8uIgorCisjOiBjb25uZWN0LmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCAnJXMnIgorbXNnc3RyICLRgdGK0YDQstGK0YDRitGCINC90LUg0L/QvtC00LTRitGA0LbQsCDigJ4lc+KAnCIKKworIzogY29ubmVjdC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IGZlYXR1cmUgJyVzJyIKK21zZ3N0ciAi0YHRitGA0LLRitGA0YrRgiDQvdC1INC/0L7QtNC00YrRgNC20LAg4oCeJXPigJwiCisKKyM6IGNvbm5lY3QuYzoxMTQKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciBjYXBhYmlsaXRpZXMiCittc2dzdHIgIiIKKyLRgdC70LXQtCDQv9GK0YDQstC+0L3QsNGH0LDQu9C90LDRgtCwINC+0LHRj9Cy0LAg0L3QsCDQstGK0LfQvNC+0LbQvdC+0YHRgtC40YLQtSDRgdC1INC+0YfQsNC60LLQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCx0YPRhNC10YDQuNGC0LUiCisKKyM6IGNvbm5lY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgY2FwYWJpbGl0aWVzIGFmdGVyIGZpcnN0IGxpbmUgJyVzJyIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GB0LrQsNC90LUg0L3QsCDQstGK0LfQvNC+0LbQvdC+0YHRgtC40YLQtSDRgdC70LXQtCDQv9GK0YDQstC40Y8g0YDQtdC0IOKAniVz4oCcIgorCisjOiBjb25uZWN0LmM6MjUyCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgY2FwYWJpbGl0aWVzXnt9IgorbXNnc3RyICLQv9GA0L7RgtC+0LrQvtC70L3QsCDQs9GA0LXRiNC60LA6INC90LXQvtGH0LDQutCy0LDQvdC4INCy0YrQt9C80L7QttC90L7RgdGC0Lhee30iCisKKyM6IGNvbm5lY3QuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYWxsb3cgc2hhLTEsIGdvdCAnJXMnIgorbXNnc3RyICLQv9GA0L7RgtC+0LrQvtC70L3QsCDQs9GA0LXRiNC60LA6INC+0YfQsNC60LLQsCDRgdC1IFNIQTEg0L3QsCDQv9C70LjRgtGK0Log0L7QsdC10LrRgiwg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvdC+OiDigJ4lc+KAnCIKKworIzogY29ubmVjdC5jOjI3NQorbXNnaWQgInJlcG9zaXRvcnkgb24gdGhlIG90aGVyIGVuZCBjYW5ub3QgYmUgc2hhbGxvdyIKK21zZ3N0ciAi0L7RgtGB0YDQtdGJ0L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INC90LUg0LzQvtC20LUg0LTQsCDQtSDQv9C70LjRgtC60L4iCisKKyM6IGNvbm5lY3QuYzozMTMKK21zZ2lkICJpbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L/QsNC60LXRgiIKKworIzogY29ubmVjdC5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCAnJXMnIgorbXNnc3RyICLQv9GA0L7RgtC+0LrQvtC70L3QsCDQs9GA0LXRiNC60LA6INC90LXQvtGH0LDQutCy0LDQvdC+IOKAniVz4oCcIgorCisjOiBjb25uZWN0LmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbHMtcmVmcyByZXNwb25zZTogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC+0YLQs9C+0LLQvtGAINC90LAg4oCebHMtcmVmc+KAnDog4oCeJXPigJwiCisKKyM6IGNvbm5lY3QuYzo0NDUKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciByZWYgbGlzdGluZyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCw0YjQtSDRgdC1INC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LHRg9GE0LXRgNC40YLQtSDRgdC70LXQtCDQuNC30LHRgNC+0Y/QstCw0L3QtdGC0L4g0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1IgorCisjOiBjb25uZWN0LmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sICclcycgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi0L/RgNC+0YLQvtC60L7QuyDigJ4lc+KAnCDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsCIKKworIzogY29ubmVjdC5jOjU5NQorbXNnaWQgInVuYWJsZSB0byBzZXQgU09fS0VFUEFMSVZFIG9uIHNvY2tldCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC30LDQtNCw0LLQsNC90LUg0L3QsCDigJ5TT19LRUVQQUxJVkXigJwg0L3QsCDQs9C90LXQt9C00L4iCisKKyM6IGNvbm5lY3QuYzo2MzUgY29ubmVjdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29raW5nIHVwICVzIC4uLiAiCittc2dzdHIgItCi0YrRgNGB0LXQvdC1INC90LAg4oCeJXPigJzigKYgIgorCisjOiBjb25uZWN0LmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIgorbXNnc3RyICLigJ4lc+KAnCAo0L/QvtGA0YIgJXMpINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQutGA0LjQtSAo4oCeJXPigJwpIgorCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJMb29raW5nIHVwICVzIC4uLiAiCisjOiBjb25uZWN0LmM6NjQzIGNvbm5lY3QuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmUuXG4iCisiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKK21zZ3N0ciAiIgorItCz0L7RgtC+0LLQvi5cbiIKKyLQodCy0YrRgNC30LLQsNC90LUg0LrRitC8IOKAniVz4oCcICjQv9C+0YDRgiAlcynigKYiCisKKyM6IGNvbm5lY3QuYzo2NjUgY29ubmVjdC5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIGNvbm5lY3QgdG8gJXM6XG4iCiAiJXMiCiBtc2dzdHIgIiIKLSLQndC10YPRgdC/0LXRiNC90L4g0YLRgNC40LXQvdC1INC90LAg0LrQu9C+0L3QuDpcbiIKKyLQvdC10YPRgdC/0LXRiNC90L4g0YHQstGK0YDQt9Cy0LDQvdC1INC60YrQvCDigJ4lc+KAnDpcbiIKICIlcyIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogUmVuYW1lIEJyYW5jaCIKLW1zZ3N0ciAiJXMgKCVzKTog0J/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0LrQu9C+0L0iCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgorIzogY29ubmVjdC5jOjY3MSBjb25uZWN0LmM6NzQ4Cittc2dpZCAiZG9uZS4iCittc2dzdHIgItC00LXQudGB0YLQstC40LXRgtC+INC30LDQstGK0YDRiNC4LiIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjIzCi1tc2dpZCAiUmVuYW1lIEJyYW5jaCIKLW1zZ3N0ciAi0J/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0LrQu9C+0L0iCisjOiBjb25uZWN0LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzICglcykiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQutGA0LjQtSAoJXMpIgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjgKLW1zZ2lkICJSZW5hbWUiCi1tc2dzdHIgItCf0YDQtdC40LzQtdC90YPQstCw0L3QtSIKKyM6IGNvbm5lY3QuYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwb3J0ICVzIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINC/0L7RgNGCIOKAniVz4oCcIgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzgKLW1zZ2lkICJCcmFuY2g6IgotbXNnc3RyICLQmtC70L7QvToiCisjOiBjb25uZWN0LmM6ODQ1IGNvbm5lY3QuYzoxMTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgaG9zdG5hbWUgJyVzJyBibG9ja2VkIgorbXNnc3RyICLQvdC10L7QsdC40YfQsNC50L3QvtGC0L4g0LjQvNC1INC90LAg0YXQvtGB0YIg4oCeJXPigJwg0LUg0LHQu9C+0LrQuNGA0LDQvdC+IgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NDYKLW1zZ2lkICJOZXcgTmFtZToiCi1tc2dzdHIgItCd0L7QstC+INC40LzQtToiCisjOiBjb25uZWN0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcG9ydCAnJXMnIGJsb2NrZWQiCittc2dzdHIgItC90LXQvtCx0LjRh9Cw0LnQvdC40Y/RgiDQv9C+0YDRgiDigJ4lc+KAnCDQtSDQsdC70L7QutC40YDQsNC9IgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6ODEKLW1zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCi1tc2dzdHIgItCY0LfQsdC10YDQtdGC0LUg0LrQu9C+0L0g0LfQsCDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUuIgorIzogY29ubmVjdC5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhcnQgcHJveHkgJXMiCittc2dzdHIgItC/0L7RgdGA0LXQtNC90LjQutGK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRgtCw0YDRgtC40YDQsCIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwMiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAi0JrQu9C+0L3RitGCIOKAniVz4oCcINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwLiIKKyM6IGNvbm5lY3QuYzo5MjgKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZDsgc2VlICdnaXQgaGVscCBwdWxsJyBmb3IgdmFsaWQgdXJsIHN5bnRheCIKK21zZ3N0ciAiIgorItC90LUg0LUg0YPQutCw0LfQsNC9INC/0YrRgi4g0J/RgNC+0LLQtdGA0LXRgtC1INGB0LjQvdGC0LDQutGB0LjRgdCwINGBINC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IGhlbHAgcHVsbCIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjEyMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDigJ4lc+KAnC4iCisjOiBjb25uZWN0LmM6MTEyMworbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTQiCittc2dzdHIgItCy0LDRgNC40LDQvdGC0YrRgiDQt9CwIOKAnnNzaOKAnCDigJQg4oCec2ltcGxl4oCcICjQvtC/0YDQvtGB0YLQtdC9KSwg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC+0L/RhtC40Y/RgtCwIOKAni004oCcIgogCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTcKLW1zZ2lkICJTdGFydGluZy4uLiIKLW1zZ3N0ciAi0KHRgtCw0YDRgtC40YDQsNC90LXigKYiCisjOiBjb25uZWN0LmM6MTEzNQorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiCittc2dzdHIgItCy0LDRgNC40LDQvdGC0YrRgiDQt9CwIOKAnnNzaOKAnCDigJQg4oCec2ltcGxl4oCcICjQvtC/0YDQvtGB0YLQtdC9KSwg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC+0L/RhtC40Y/RgtCwIOKAni024oCcIgogCi0jOiBsaWIvYnJvd3Nlci50Y2w6MjcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBGaWxlIEJyb3dzZXIiCi1tc2dzdHIgIiVzICglcyk6INCk0LDQudC70L7QsiDQsdGA0LDRg9C30YrRgCIKKyM6IGNvbm5lY3QuYzoxMTUyCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIHBvcnQiCittc2dzdHIgIiIKKyLQstCw0YDQuNCw0L3RgtGK0YIg0LfQsCDigJ5zc2jigJwg4oCUIOKAnnNpbXBsZeKAnCAo0L7Qv9GA0L7RgdGC0LXQvSksINC90LUg0L/QvtC00LTRitGA0LbQsCDQt9Cw0LTQsNCy0LDQvdC10YLQviDQvdCwINC/0L7RgNGCIgogCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTMyIGxpYi9icm93c2VyLnRjbDoxNDkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2FkaW5nICVzLi4uIgotbXNnc3RyICLQl9Cw0YDQtdC20LTQsNC90LUg0L3QsCDigJ4lc+KAnOKApiIKKyM6IGNvbm5lY3QuYzoxMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcGF0aG5hbWUgJyVzJyBibG9ja2VkIgorbXNnc3RyICLQvdC10L7QsdC40YfQsNC50L3QuNGP0YIg0L/RitGCIOKAniVz4oCcINC1INCx0LvQvtC60LjRgNCw0L0iCiAKLSM6IGxpYi9icm93c2VyLnRjbDoxOTMKLW1zZ2lkICJbVXAgVG8gUGFyZW50XSIKLW1zZ3N0ciAiW9Ca0YrQvCDRgNC+0LTQuNGC0LXQu9GPXSIKKyM6IGNvbm5lY3QuYzoxMzExCittc2dpZCAidW5hYmxlIHRvIGZvcmsiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQv9GA0L7RhtC10YEiCiAKLSM6IGxpYi9icm93c2VyLnRjbDoyNzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBCcm93c2UgQnJhbmNoIEZpbGVzIgotbXNnc3RyICIlcyAoJXMpOiDQoNCw0LfQs9C70LXQttC00LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1INCyINC60LvQvtC90LAiCisjOiBjb25uZWN0ZWQuYzo5OCBidWlsdGluL2ZzY2suYzoyMDggYnVpbHRpbi9wcnVuZS5jOjQzCittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC90LAg0YHQstGK0YDQt9Cw0L3QvtGB0YLRgtCwIgogCi0jOiBsaWIvYnJvd3Nlci50Y2w6MjgyCi1tc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKLW1zZ3N0ciAi0KDQsNC30LPQu9C10LbQtNCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSDQsiDQutC70L7QvdCwIgorIzogY29ubmVjdGVkLmM6MTEwCittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCByZXYtbGlzdOKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9C/0YrQu9C90LXQvdCwLiIKIAotIzogbGliL2Jyb3dzZXIudGNsOjI4OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQyMgotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTgKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3NAotbXNnaWQgIkJyb3dzZSIKLW1zZ3N0ciAi0KDQsNC30LPQu9C10LbQtNCw0L3QtSIKKyM6IGNvbm5lY3RlZC5jOjEzMAorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQtdC9INC30LDQv9C40YEg0L3QsCDRgdC/0LjRgdGK0LrQsCDRgSDQstC10YDRgdC40LjRgtC1IgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKLW1zZ3N0ciAi0JTQvtGB0YLQsNCy0Y/QvdC1INC90LAg4oCeJXPigJwg0L7RgiDigJ4lc+KAnCIKKyM6IGNvbm5lY3RlZC5jOjEzNworbXNnaWQgImZhaWxlZCB0byBjbG9zZSByZXYtbGlzdCdzIHN0ZGluIgorbXNnc3RyICLRgdGC0LDQvdC00LDRgNGC0L3QuNGP0YIg0LLRhdC+0LQg0L3QsCDRgdC/0LjRgdGK0LrQsCDRgSDQstC10YDRgdC40LjRgtC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0YLQstC+0YDQtdC9IgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgImZhdGFsOiBDYW5ub3QgcmVzb2x2ZSAlcyIKLW1zZ3N0ciAi0YTQsNGC0LDQu9C90LAg0LPRgNC10YjQutCwOiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LrRgNC40LUiCisjOiBjb252ZXJ0LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgY3JsZl9hY3Rpb24gJWQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC00LXQudGB0YLQstC40LUg0LfQsCDQutGA0LDQuSDQvdCwINGA0LXQtDogJWQiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQ2IGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvZGF0YWJhc2UudGNsOjMwCi0jOiBsaWIvc3Noa2V5LnRjbDo1NQotbXNnaWQgIkNsb3NlIgotbXNnc3RyICLQl9Cw0YLQstCw0YDRj9C90LUiCisjOiBjb252ZXJ0LmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNSTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMiCittc2dzdHIgItCS0YHRj9C60LAg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70L3QvtGB0YIg0L7RgiDQt9C90LDRhtC4IOKAnkNSTEbigJwg0YnQtSDQsdGK0LRlINC30LDQvNC10L3QtdC90LAg0YEg4oCeTEbigJwg0LIg4oCeJXPigJwuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKLW1zZ3N0ciAi0JrQu9C+0L3RitGCIOKAniVz4oCcINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQvdCw0YHRgtGA0L7QudCy0LDQvdC1INC90LAg0L7Qv9GA0L7RgdGC0LXQvSBnaXQtcHVsbCDQt9CwIOKAniVz4oCcLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjkKLSMsIHRjbC1mb3JtYXQKKyM6IGNvbnZlcnQuYzoyMDkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgotIlxuIgotIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCi0iQSBtZXJnZSBpcyByZXF1aXJlZC4iCisiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCiBtc2dzdHIgIiIKLSLQmtC70L7QvdGK0YIg4oCeJXPigJwg0YHRitGJ0LXRgdGC0LLRg9Cy0LAuXG4iCi0iXG4iCi0i0KLQvtC5INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgtGA0LjQstC40LDQu9C90L4g0YHQu9GP0YIg0LTQviDigJ4lc+KAnC5cbiIKLSLQndC10L7QsdGF0L7QtNC40LzQviDQtSDRgdC70LjQstCw0L3QtS4iCisi0JLRgdGP0LrQsCDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvQvdC+0YHRgiDQvtGCINC30L3QsNGG0Lgg4oCeQ1JMRuKAnCDRidC1INCx0YrQtGUg0LfQsNC80LXQvdC10L3QsCDRgSDigJ5MRuKAnCDQsiDigJ4lc+KAnC5cbiIKKyLQpNCw0LnQu9GK0YIg0YnQtSDQvtGB0YLQsNC90LUg0YEg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC40YLQtSDQt9C90LDRhtC4INC30LAg0LrRgNCw0Lkg0L3QsCDRgNC10LQg0LIg0YDQsNCx0L7RgtC90LDRgtCwINCy0LggIgorItC00LjRgNC10LrRgtC+0YDQuNGPLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICLQodGC0YDQsNGC0LXQs9C40Y8g0LfQsCDRgdC70LjQstCw0L3QtSAg4oCeJXPigJwg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAuIgorIzogY29udmVydC5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIgorbXNnc3RyICIiCisi0JLRgdC10LrQuCDQt9C90LDQuiDigJ5MRuKAnCDRidC1INCx0YrQtGUg0LfQsNC80LXQvdC10L0g0YEg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70L3QvtGB0YLRgtCwINC+0YIg0LfQvdCw0YbQuCDigJ5DUkxG4oCcINCyIOKAniVz4oCcLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDigJ4lc+KAnC4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjc0Ci1tc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgotbXNnc3RyICLQmNC90LTQtdC60YHRitGCINCy0LXRh9C1INC1INC30LDQutC70Y7Rh9C10L0uIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI4OQorIzogY29udmVydC5jOjIxOQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyJMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMuXG4iCisiVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIKIG1zZ3N0ciAiIgotItCh0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L/RgNC4INC/0L7RgdC70LXQtNC90LDRgtCwINC/0YDQvtCy0LXRgNC60LAg0L3QtSDQvtGC0LPQvtCy0LDRgNGPINC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwICIKLSLRhdGA0LDQvdC40LvQuNGJ0LXRgtC+LlxuIgotIlxuIgotItCd0Y/QutC+0Lkg0LTRgNGD0LMg0L/RgNC+0YbQtdGBINC30LAgR2l0INC1INC/0YDQvtC80LXQvdC40Lsg0YXRgNCw0L3QuNC70LjRidC10YLQviDQvNC10LbQtNGD0LLRgNC10LzQtdC90L3Qvi4g0KHRitGB0YLQvtGP0L3QuNC10YLQviAiCi0i0YLRgNGP0LHQstCwINC00LAg0LHRitC00LUg0L/RgNC+0LLQtdGA0LXQvdC+LCDQv9GA0LXQtNC4INC00LAg0YHQtSDQv9GA0LXQvNC40L3QtSDQutGK0Lwg0L3QvtCyINC60LvQvtC9LlxuIgotIlxuIgotItCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0YnQtSDQt9Cw0L/QvtGH0L3QtSDQvdC+0LLQsCDQv9GA0L7QstC10YDQutCwLlxuIgorItCS0YHQtdC60Lgg0LfQvdCw0Log4oCeTEbigJwg0YnQtSDQsdGK0LRlINC30LDQvNC10L3QtdC9INGBINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9C90L7RgdGC0YLQsCDQvtGCINC30L3QsNGG0Lgg4oCeQ1JMRuKAnCDQsiAiCisi4oCeJXPigJwuXG4iCisi0KTQsNC50LvRitGCINGJ0LUg0L7RgdGC0LDQvdC1INGBINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QuNGC0LUg0LfQvdCw0YbQuCDQt9CwINC60YDQsNC5INC90LAg0YDQtdC0INCyINGA0LDQsdC+0YLQvdCw0YLQsCDQstC4ICIKKyLQtNC40YDQtdC60YLQvtGA0LjRjy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKLW1zZ3N0ciAi0KDQsNCx0L7RgtC90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINGB0LUg0L/RgNC40LLQtdC20LTQsCDQutGK0Lwg4oCeJXPigJzigKYiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Ci1tc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCi1tc2dzdHIgItGE0LDQudC70LAg0YHQsCDQuNC30YLQtdCz0LvQtdC90LgiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKKyM6IGNvbnZlcnQuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHByb2hpYml0ZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgogbXNnc3RyICIiCi0i0J/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LjQt9GC0LXQs9C70Y/QvdC10YLQviDQvdCwIOKAniVz4oCcICjQvdC10L7QsdGF0L7QtNC40LzQviDQtSDQv9C+0YTQsNC50LvQvtCy0L4g0YHQu9C40LLQsNC90LUpLiIKKyLigJ4lc+KAnCDQvdC1INGC0YDRj9Cx0LLQsCDQtNCwINGB0YrQtNGK0YDQttCwINC80LDRgNC60LXRgCDQt9CwINC/0L7RgNC10LTQvdC+0YHRgtGC0LAg0L3QsCDQsdCw0LnRgtC+0LLQtdGC0LUgKEJPTSkg0L/RgNC4ICIKKyLQutC+0LTQuNGA0LDQvdC1IOKAniVz4oCcIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NwotbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgotbXNnc3RyICLQndC10L7QsdGF0L7QtNC40LzQviDQtSDQv9C+0YTQsNC50LvQvtCy0L4g0YHQu9C40LLQsNC90LUuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgotbXNnc3RyICLQntGB0YLQsNCy0LDQvdC1INCy0YrRgNGF0YMg0LrQu9C+0L3QsCDigJ4lc+KAnC4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDUyCisjOiBjb252ZXJ0LmM6MjkxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKLSJcbiIKLSJJZiB5b3Ugd2FudGVkIHRvIGJlIG9uIGEgYnJhbmNoLCBjcmVhdGUgb25lIG5vdyBzdGFydGluZyBmcm9tICdUaGlzIERldGFjaGVkICIKLSJDaGVja291dCcuIgorIlRoZSBmaWxlICclcycgY29udGFpbnMgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSUuKnMgYXMgIgorIndvcmtpbmctdHJlZS1lbmNvZGluZy4iCiBtc2dzdHIgIiIKLSLQktC10YfQtSDQvdC1INGB0YLQtSDQvdCwINC70L7QutCw0LvQtdC9INC60LvQvtC9LlxuIgotIlxuIgotItCQ0LrQviDQuNGB0LrQsNGC0LUg0LTQsCDRgdGC0LUg0L3QsCDQutC70L7QvSwg0YHRitC30LTQsNC50YLQtSDQsdCw0LfQuNGA0LDQvSDQvdCwIOKAntCi0L7QstCwINC90LXRgdCy0YrRgNC30LDQvdC+INC40LfRgtC10LPQu9GP0L3QteKAnC4iCisi0KTQsNC50LvRitGCIOKAniVz4oCcINGB0YrQtNGK0YDQttCwINC80LDRgNC60LXRgCDQt9CwINC/0L7RgNC10LTQvdC+0YHRgtGC0LAg0L3QsCDQsdCw0LnRgtC+0LLQtdGC0LUgKEJPTSkuICDQmNC30L/QvtC70LfQstCw0LnRgtC1ICIKKyLigJ5VVEYtJS4qc+KAnCDQutCw0YLQviDQutC+0LTQuNGA0LDQvdC1INC30LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4uIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMyBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgotbXNnc3RyICLigJ4lc+KAnCDQtSDQuNC30YLQtdCz0LvQtdC9LiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgorIzogY29udmVydC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcmVxdWlyZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgogbXNnc3RyICIiCi0i0JfQsNC90YPQu9GP0LLQsNC90LXRgtC+INC90LAg4oCeJXPigJwg0LrRitC8IOKAniVz4oCcINGJ0LUg0LTQvtCy0LXQtNC1INC00L4g0LfQsNCz0YPQsdCy0LDQvdC10YLQviDQvdCwINGB0LvQtdC00L3QuNGC0LUg0L/QvtC00LDQstCw0L3QuNGPOiIKKyLigJ4lc+KAnCDRgtGA0Y/QsdCy0LAg0LTQsCDRgdGK0LTRitGA0LbQsCDQvNCw0YDQutC10YAg0LfQsCDQv9C+0YDQtdC00L3QvtGB0YLRgtCwINC90LAg0LHQsNC50YLQvtCy0LXRgtC1IChCT00pINC/0YDQuCDQutC+0LTQuNGA0LDQvdC1ICIKKyLigJ4lc+KAnCIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NTcKLW1zZ2lkICJSZWNvdmVyaW5nIGxvc3QgY29tbWl0cyBtYXkgbm90IGJlIGVhc3kuIgotbXNnc3RyICLQktGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC10YLQviDQvdCwINC30LDQs9GD0LHQtdC90LjRgtC1INC/0L7QtNCw0LLQsNC90LjRjyDQvNC+0LbQtSDQtNCwINC1INGC0YDRg9C00L3Qvi4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXQgJyVzJz8iCi1tc2dzdHIgItCX0LDQvdGD0LvRj9Cy0LDQvdC1INC90LAg4oCeJXPigJw/IgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE3MCBsaWIvdG9vbHNfZGxnLnRjbDozMzYKLW1zZ2lkICJWaXN1YWxpemUiCi1tc2dzdHIgItCS0LjQt9GD0LDQu9C40LfQsNGG0LjRjyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo2MzUKLSMsIHRjbC1mb3JtYXQKKyM6IGNvbnZlcnQuYzozMDYKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCi0iXG4iCi0iVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKLSJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKLSJcbiIKLSJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKKyJUaGUgZmlsZSAnJXMnIGlzIG1pc3NpbmcgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSVzQkUgb3IgVVRGLSIKKyIlc0xFIChkZXBlbmRpbmcgb24gdGhlIGJ5dGUgb3JkZXIpIGFzIHdvcmtpbmctdHJlZS1lbmNvZGluZy4iCiBtc2dzdHIgIiIKLSLQndC10YPRgdC/0LXRiNC90L4g0LfQsNC00LDQstCw0L3QtSDQvdCwINGC0LXQutGD0YnQuNGPINC60LvQvtC9LlxuIgotIlxuIgotItCg0LDQsdC+0YLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQtSDRgdCw0LzQviDRh9Cw0YHRgtC40YfQvdC+INC+0LHQvdC+0LLQtdC90LA6INGE0LDQudC70L7QstC10YLQtSDRgdCwINC+0LHQvdC+0LLQtdC90LggIgotItGD0YHQv9C10YjQvdC+LCDQvdC+INC90Y/QutC+0Lkg0L7RgiDQstGK0YLRgNC10YjQvdC40YLQtSwg0YHQu9GD0LbQtdCx0L3QuCDRhNCw0LnQu9C+0LLQtSDQvdCwIEdpdCDQvdC1INC1INCx0LjQuy5cbiIKLSJcbiIKLSLQotC+0LLQsCDRgdGK0YHRgtC+0Y/QvdC40LUg0LUg0LDQstCw0YDQuNC50L3QviDQuCDQvdC1INGC0YDRj9Cx0LLQsCDQtNCwINGB0LUg0YHQu9GD0YfQstCwLiDQn9GA0L7Qs9GA0LDQvNCw0YLQsCDigJ4lc+KAnCDRidC1ICIKLSLQv9GA0LXRg9GB0YLQsNC90L7QstC4INGA0LDQsdC+0YLQsC4iCisi0JLRitCyINGE0LDQudC70LAg4oCeJXPigJwg0LvQuNC/0YHQstCwINC80LDRgNC60LXRgCDQt9CwINC/0L7RgNC10LTQvdC+0YHRgtGC0LAg0L3QsCDQsdCw0LnRgtC+0LLQtdGC0LUgKEJPTSkuICDQl9CwINC60L7QtNC40YDQsNC90LUgIgorItC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0LjQt9C/0L7Qu9C30LLQsNC50YLQtSBVVEYtJXNCRSDQuNC70LggVVRGLSVzTEUgKNCyINC30LDQstC40YHQuNC80L7RgdGCINC+0YIgIgorItC/0L7RgNC10LTQvdC+0YHRgtGC0LAg0L3QsCDQsdCw0LnRgtC+0LLQtdGC0LUpLiIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo0MQotbXNnaWQgIlNlbGVjdCIKLW1zZ3N0ciAi0JjQt9Cx0L7RgCIKKyM6IGNvbnZlcnQuYzo0MTkgY29udmVydC5jOjQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZW5jb2RlICclcycgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC/0YDQtdC60L7QtNC40YDQsNC90LUg0L3QsCDigJ4lc+KAnCDQvtGCIOKAniVz4oCcINC60YrQvCDigJ4lc+KAnCIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo1NQotbXNnaWQgIkZvbnQgRmFtaWx5IgotbXNnc3RyICLQqNGA0LjRhNGCIgorIzogY29udmVydC5jOjQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICJlbmNvZGluZyAnJXMnIGZyb20gJXMgdG8gJXMgYW5kIGJhY2sgaXMgbm90IHRoZSBzYW1lIgorbXNnc3RyICLQn9GA0LXQutC+0LTQuNGA0LDQvdC10YLQviDQvdCwIOKAniVz4oCcINC+0YIg4oCeJXPigJwg0LrRitC8IOKAniVz4oCcINC4INC+0LHRgNCw0YLQvdC+INC/0YDQvtC80LXQvdGPINGE0LDQudC70LAiCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzYKLW1zZ2lkICJGb250IFNpemUiCi1tc2dzdHIgItCg0LDQt9C80LXRgCIKKyM6IGNvbnZlcnQuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgdG8gcnVuIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YHRitC30LTQsNCy0LDQvdC1INC90LAg0L/RgNC+0YbQtdGBINC30LAg0LLRitC90YjQtdC9INGE0LjQu9GC0YrRgCDigJ4lc+KAnCIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo5MwotbXNnaWQgIkZvbnQgRXhhbXBsZSIKLW1zZ3N0ciAi0JzQvtGB0YLRgNCwIgorIzogY29udmVydC5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmVlZCB0aGUgaW5wdXQgdG8gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgItCy0YXQvtC00YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/QvtC00LDQtNC10L0g0L3QsCDQstGK0L3RiNC90LjRjyDRhNC40LvRgtGK0YAg4oCeJXPigJwiCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTA1CisjOiBjb252ZXJ0LmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCAlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LLRitC90YjQvdC40Y8g0YTQuNC70YLRitGAIOKAniVz4oCcOiAlZCIKKworIzogY29udmVydC5jOjczMCBjb252ZXJ0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZnJvbSBleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRh9C10YLQtdC90LUg0L7RgiDQstGK0L3RiNC90LjRjyDRhNC40LvRgtGK0YAg4oCeJXPigJwiCisKKyM6IGNvbnZlcnQuYzo3MzYgY29udmVydC5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINCy0YrQvdGI0L3QuNGPINGE0LjQu9GC0YrRgCDigJ4lc+KAnCIKKworIzogY29udmVydC5jOjgzOQorbXNnaWQgInVuZXhwZWN0ZWQgZmlsdGVyIHR5cGUiCittc2dzdHIgItC90LXQvtGH0LDQutCy0LDQvSDQstC40LQg0YTQuNC70YLRitGAIgorCisjOiBjb252ZXJ0LmM6ODUwCittc2dpZCAicGF0aCBuYW1lIHRvbyBsb25nIGZvciBleHRlcm5hbCBmaWx0ZXIiCittc2dzdHIgItC/0YrRgtGP0YIg0LUg0L/RgNC10LrQsNC70LXQvdC+INC00YrQu9GK0LMg0LfQsCDQstGK0L3RiNC10L0g0YTQuNC70YLRitGAIgorCisjOiBjb252ZXJ0LmM6OTI0CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKLSJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorImV4dGVybmFsIGZpbHRlciAnJXMnIGlzIG5vdCBhdmFpbGFibGUgYW55bW9yZSBhbHRob3VnaCBub3QgYWxsIHBhdGhzIGhhdmUgIgorImJlZW4gZmlsdGVyZWQiCiBtc2dzdHIgIiIKLSLQotC+0LLQsCDQtSDQv9GA0LjQvNC10YDQtdC9INGC0LXQutGB0YIuXG4iCi0i0JDQutC+INCy0Lgg0YXQsNGA0LXRgdCy0LAg0LrQsNC6INC40LfQs9C70LXQttC00LAsINC40LfQsdC10YDQtdGC0LUg0YjRgNC40YTRgtCwLiIKKyLQstGK0L3RiNC90LjRj9GCINGE0LjQu9GC0YrRgCDigJ4lc+KAnCDQstC10YfQtSDQvdC1INC1INC90LDQu9C40YfQtdC9LCDQstGK0L/RgNC10LrQuCDRh9C1INC90LUg0LLRgdC40YfQutC4INC/0YrRgtC40YnQsCDRgdCwICIKKyLRhNC40LvRgtGA0LjRgNCw0L3QuCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMwotbXNnaWQgIkdpdCBHdWkiCi1tc2dzdHIgItCT0J/QmCDQvdCwIEdpdCIKKyM6IGNvbnZlcnQuYzoxMjIzCittc2dpZCAidHJ1ZS9mYWxzZSBhcmUgbm8gdmFsaWQgd29ya2luZy10cmVlLWVuY29kaW5ncyIKK21zZ3N0ciAi4oCedHJ1ZeKAnC/igJ5mYWxzZeKAnCDQvdC1INC80L7QttC1INC00LAg0YHQsCDQutC+0LTQuNGA0LDQvdC40Y8g0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQxMgotbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0L3QvtCy0L4g0YXRgNCw0L3QuNC70LjRidC1IgorIzogY29udmVydC5jOjE0MTEgY29udmVydC5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiJXM6INC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC00LXQutC+0LTQuNGA0LDRiSDRhNC40LvRgtGK0YAg4oCeJXPigJwiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgKLW1zZ2lkICJOZXcuLi4iCi1tc2dzdHIgItCd0L7QstC+4oCmIgorIzogY29udmVydC5jOjE0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHNtdWRnZSBmaWx0ZXIgJXMgZmFpbGVkIgorbXNnc3RyICIlczog0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrQvtC00LjRgNCw0Ykg0YTQuNC70YLRitGAIOKAniVz4oCcIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NgotbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgItCa0LvQvtC90LjRgNCw0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisjOiBkYXRlLmM6MTM4Cittc2dpZCAiaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAi0LIg0LHRitC00LXRidC10YLQviIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTYKLW1zZ2lkICJDbG9uZS4uLiIKLW1zZ3N0ciAi0JrQu9C+0L3QuNGA0LDQvdC14oCmIgorIzogZGF0ZS5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gItC/0YDQtdC00LggJTxQUkl1TUFYPiDRgdC10LrRg9C90LTQsCIKK21zZ3N0clsxXSAi0L/RgNC10LTQuCAlPFBSSXVNQVg+INGB0LXQutGD0L3QtNC4IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjQKLW1zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgItCe0YLQstCw0YDRj9C90LUg0L3QsCDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0L4g0YXRgNCw0L3QuNC70LjRidC1IgorIzogZGF0ZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbWludXRlcyBhZ28iCittc2dzdHJbMF0gItC/0YDQtdC00LggJTxQUkl1TUFYPiDQvNC40L3Rg9GC0LAiCittc2dzdHJbMV0gItC/0YDQtdC00LggJTxQUkl1TUFYPiDQvNC40L3Rg9GC0LgiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTI5Ci1tc2dpZCAiT3Blbi4uLiIKLW1zZ3N0ciAi0J7RgtCy0LDRgNGP0L3QteKApiIKKyM6IGRhdGUuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBob3VycyBhZ28iCittc2dzdHJbMF0gItC/0YDQtdC00LggJTxQUkl1TUFYPiDRh9Cw0YEiCittc2dzdHJbMV0gItC/0YDQtdC00LggJTxQUkl1TUFYPiDRh9Cw0YHQsCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxNDIKLW1zZ2lkICJSZWNlbnQgUmVwb3NpdG9yaWVzIgotbXNnc3RyICLQodC60L7RgNC+INC/0L7Qu9C30LLQsNC90LgiCisjOiBkYXRlLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBkYXlzIGFnbyIKK21zZ3N0clswXSAi0L/RgNC10LTQuCAlPFBSSXVNQVg+INC00LXQvSIKK21zZ3N0clsxXSAi0L/RgNC10LTQuCAlPFBSSXVNQVg+INC00LXQvdCwIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE0OAotbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgotbXNnc3RyICLQntGC0LLQsNGA0Y/QvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC1INC/0L7Qu9C30LLQsNC90L4g0L3QsNGB0LrQvtGA0L46IgorIzogZGF0ZS5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHdlZWsgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHdlZWtzIGFnbyIKK21zZ3N0clswXSAi0L/RgNC10LTQuCAlPFBSSXVNQVg+INGB0LXQtNC80LjRhtCwIgorbXNnc3RyWzFdICLQv9GA0LXQtNC4ICU8UFJJdU1BWD4g0YHQtdC00LzQuNGG0LgiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzE2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIzCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMzMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IOKAniVz4oCcOiIKKyM6IGRhdGUuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAi0L/RgNC10LTQuCAlPFBSSXVNQVg+INC80LXRgdC10YYiCittc2dzdHJbMV0gItC/0YDQtdC00LggJTxQUkl1TUFYPiDQvNC10YHQtdGG0LAiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDE3Ci1tc2dpZCAiRGlyZWN0b3J5OiIKLW1zZ3N0ciAi0JTQuNGA0LXQutGC0L7RgNC40Y86IgorIzogZGF0ZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIiCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMiCittc2dzdHJbMF0gIiU8UFJJdU1BWD4g0LPQvtC00LjQvdCwIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+INCz0L7QtNC40L3QuCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NzMKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA5OAotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgotbXNnc3RyICLQpdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBHaXQiCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gItC/0YDQtdC00LggJXMg0LggJTxQUkl1TUFYPiDQvNC10YHQtdGGIgorbXNnc3RyWzFdICLQv9GA0LXQtNC4ICVzINC4ICU8UFJJdU1BWD4g0LzQtdGB0LXRhtCwIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgItCS0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINC00LjRgNC10LrRgtC+0YDQuNGPIOKAniVz4oCcLiIKKyM6IGRhdGUuYzoxOTcgZGF0ZS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIGFnbyIKK21zZ3N0clswXSAi0L/RgNC10LTQuCAlPFBSSXVNQVg+INCz0L7QtNC40L3QsCIKK21zZ3N0clsxXSAi0L/RgNC10LTQuCAlPFBSSXVNQVg+INCz0L7QtNC40L3QuCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAi0JLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0YTQsNC50Lsg4oCeJXPigJwuIgorIzogZGVsdGEtaXNsYW5kcy5jOjI3MgorbXNnaWQgIlByb3BhZ2F0aW5nIGlzbGFuZCBtYXJrcyIKK21zZ3N0ciAi0KDQsNC30L/RgNC+0YHRgtGA0LDQvdGP0LLQsNC90LUg0L3QsCDQs9GA0LDQvdC40YbQuNGC0LUg0L3QsCDQs9GA0YPQv9C40YLQtSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTEKLW1zZ2lkICJDbG9uZSIKLW1zZ3N0ciAi0JrQu9C+0L3QuNGA0LDQvdC1IgorIzogZGVsdGEtaXNsYW5kcy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdHJlZSBvYmplY3QgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC+0LHQtdC60YIt0LTRitGA0LLQvjogJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA0Ci1tc2dpZCAiU291cmNlIExvY2F0aW9uOiIKLW1zZ3N0ciAi0JDQtNGA0LXRgSDQvdCwINC40LfRgtC+0YfQvdC40LrQsDoiCisjOiBkZWx0YS1pc2xhbmRzLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIGlzbGFuZCByZWdleCBmb3IgJyVzJzogJXMiCittc2dzdHIgItGA0LXQs9GD0LvRj9GA0L3QuNGP0YIg0LjQt9GA0LDQtyDQvdCwINCz0YDRg9C/0LDRgtCwINC30LAg4oCeJXPigJwsINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0YDQtdC00LXQvTog4oCeJXPigJwiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTEzCi1tc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCi1tc2dzdHIgItCm0LXQu9C10LLQsCDQtNC40YDQtdC60YLQvtGA0LjRjzoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTIzCi1tc2dpZCAiQ2xvbmUgVHlwZToiCi1tc2dzdHIgItCS0LjQtCDQutC70L7QvdC40YDQsNC90LU6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyOAotbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKLW1zZ3N0ciAi0KHRgtCw0L3QtNCw0YDRgtC90L4gKNCx0YrRgNC30L4sINGH0LDRgdGC0LjRh9C90L4g0YHQv9C+0LTQtdC70Y/QvdC1INC90LAg0YTQsNC50LvQvtCy0LUsINGC0LLRitGA0LTQuCDQstGA0YrQt9C60LgpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzMwotbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKLW1zZ3N0ciAi0J/RitC70L3QviAo0LHQsNCy0L3Qviwg0L/RitC70L3QvtGG0LXQvdC90L4g0YDQtdC30LXRgNCy0L3QviDQutC+0L/QuNC1KSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MzgKLW1zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKLW1zZ3N0ciAi0KHQv9C+0LTQtdC70LXQvdC+ICjQvdCw0Lkt0LHRitGA0LfQviwg0L3QtSDRgdC1INC/0YDQtdC/0L7RgNGK0YfQstCwLCDQvdC1INC/0YDQsNCy0Lgg0YDQtdC30LXRgNCy0L3QviDQutC+0L/QuNC1KSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NDUKLW1zZ2lkICJSZWN1cnNpdmVseSBjbG9uZSBzdWJtb2R1bGVzIHRvbyIKLW1zZ3N0ciAi0KDQtdC60YPRgNGB0LjQstC90L4g0LrQu9C+0L3QuNGA0LDQvdC1INC4INC90LAg0L/QvtC00LzQvtC00YPQu9C40YLQtSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NzkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjYKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzcyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODQyCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTEyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgotbXNnc3RyICLQotC+0LLQsCDQvdC1INC1INGF0YDQsNC90LjQu9C40YnQtSDQvdCwIEdpdDogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE1Ci1tc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgotbXNnc3RyICLQodCw0LzQviDQu9C+0LrQsNC70L3QuCDRhdGA0LDQvdC40LvQuNGJ0LAg0LzQvtCz0LDRgiDQtNCwINGB0LUg0LrQu9C+0L3QuNGA0LDRgiDRgdGC0LDQvdC00LDRgNGC0L3QviIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTkKLW1zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgotbXNnc3RyICLQodCw0LzQviDQu9C+0LrQsNC70L3QuCDRhdGA0LDQvdC40LvQuNGJ0LAg0LzQvtCz0LDRgiDQtNCwINGB0LUg0LrQu9C+0L3QuNGA0LDRgiDRgdC/0L7QtNC10LvQtdC90L4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICLQnNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC10YLQviDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjUxCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQvdCw0YHRgtGA0L7QudCy0LDQvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQvi3QuNC30YLQvtGH0L3QuNC6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2MwotbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCi1tc2dzdHIgItCf0YDQtdCx0YDQvtGP0LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0LgiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY0Ci1tc2dpZCAiYnVja2V0cyIKLW1zZ3N0ciAi0LrQu9C10YLQutC4IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY4OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKLW1zZ3N0ciAi0J7QsdC10LrRgtC40YLQtS/QuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAv0YHQuNC90L7QvdC40LzQuNGC0LUg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQutC+0L/QuNGA0LDQvdC4OiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgotbXNnc3RyICLQndGP0LzQsCDQutCw0LrQstC+INC00LAg0YHQtSDQutC70L7QvdC40YDQsCDQvtGCIOKAniVz4oCcLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MjYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NDAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTUyCi1tc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgotbXNnc3RyICLQntGB0L3QvtCy0L3QuNGP0YIg0LrQu9C+0L0g4oCUIOKAnm1hc3RlcuKAnCDQvdC1INC1INC40L3QuNGG0LjQsNC70LjQt9C40YDQsNC9LiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MzkKLW1zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgotbXNnc3RyICLQndC1INGB0LUg0L/QvtC00LTRitGA0LbQsNGCINGC0LLRitGA0LTQuCDQstGA0YrQt9C60LguINCf0YDQtdC80LjQvdCw0LLQsCDRgdC1INC60YrQvCDQutC+0L/QuNGA0LDQvdC1LiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDbG9uaW5nIGZyb20gJXMiCi1tc2dzdHIgItCa0LvQvtC90LjRgNCw0L3QtSDQvdCwIOKAniVz4oCcIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4MgotbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKLW1zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSDQvdCwINC+0LHQtdC60YLQuCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODMKLW1zZ2lkICJLaUIiCi1tc2dzdHIgIktpQiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LrQvtC/0LjRgNCw0L3QtSDQvdCwINC+0LHQtdC60YI6ICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxNwotbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKLW1zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0LLRgNGK0LfQutC4INC60YrQvCDQvtCx0LXQutGC0LjRgtC1IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxOAotbXNnaWQgIm9iamVjdHMiCi1tc2dzdHIgItC+0LHQtdC60YLQuCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKLW1zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINGC0LLRitGA0LTQsCDQstGA0YrQt9C60LAg0LrRitC8INC+0LHQtdC60YI6ICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg4MQotbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCisjOiBkZWx0YS1pc2xhbmRzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlzbGFuZCByZWdleCBmcm9tIGNvbmZpZyBoYXMgdG9vIG1hbnkgY2FwdHVyZSBncm91cHMgKG1heD0lZCkiCiBtc2dzdHIgIiIKLSLQmtC70L7QvdC40YLQtSDQuCDQvtCx0LXQutGC0LjRgtC1INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LjQt9GC0LXQs9C70LXQvdC4LiDQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyAiCi0i0L/QvtCz0LvQtdC00L3QtdGC0LUg0LjQt9GF0L7QtNCwINC90LAg0LrQvtC90LfQvtC70LDRgtCwLiIKKyLRgNC10LPRg9C70Y/RgNC90LjRj9GCINC40LfRgNCw0Lcg0L3QsCDQs9GA0YPQv9Cw0YLQsCDQsiDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90LjRjyDRhNCw0LnQuyDRgdGK0LTRitGA0LbQsCDQv9C+0LLQtdGH0LUg0L7RgiAiCisi0LzQsNC60YHQuNC80LDQu9C90L4g0L/QvtC00LTRitGA0LbQsNC90LjRgtC1ICglZCkg0L/RgNC40YXQstCw0YnQsNGJ0Lgg0LPRgNGD0L/QuCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTIKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIiIKLSLQldGC0LjQutC10YLQuNGC0LUg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQuNC30YLQtdCz0LvQtdC90LguINCX0LAg0L/QvtCy0LXRh9C1INC40L3RhNC+0YDQvNCw0YbQuNGPINC/0L7Qs9C70LXQtNC90LXRgtC1ICIKLSLQuNC30YXQvtC00LAg0L3QsCDQutC+0L3Qt9C+0LvQsNGC0LAuIgorIzogZGVsdGEtaXNsYW5kcy5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJrZWQgJWQgaXNsYW5kcywgZG9uZS5cbiIKK21zZ3N0ciAi0J7RgtCx0LXQu9GP0LfQsNC90Lgg0YHQsCAlZCDQs9GA0YPQv9C4LCDRgNCw0LHQvtGC0LDRgtCwINC/0YDQuNC60LvRjtGH0LguXG4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE2Ci1tc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiIgotItCS0YrRgNGF0YrRgiDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtC/0YDQtdC00LXQu9C10L0uINCX0LAg0L/QvtCy0LXRh9C1INC40L3RhNC+0YDQvNCw0YbQuNGPINC/0L7Qs9C70LXQtNC90LXRgtC1ICIKLSLQuNC30YXQvtC00LAg0L3QsCDQutC+0L3Qt9C+0LvQsNGC0LAuIgorIzogZGlmZmNvcmUtb3JkZXIuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvcmRlcmZpbGUgJyVzJyIKK21zZ3N0ciAi0YTQsNC50LvRitGCINGBINC/0L7QtNGA0LXQtNCx0LDRgtCwINC90LAg0YHRitC+0YLQstC10YLRgdGC0LLQuNGP0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY2xlYW51cCAlcyIKLW1zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNGH0LjRgdGC0LgiCisjOiBkaWZmY29yZS1yZW5hbWUuYzo1NDMKK21zZ2lkICJQZXJmb3JtaW5nIGluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAi0KLRitGA0YHQtdC90LUg0L3QsCDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LjRjyDQvdCwINC+0LHQtdC60YLQuCDRgdGK0YfQtdGC0LDQvdC4INGBINC/0YDQvtC80LXQvdC4IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzMQotbXNnaWQgIkNsb25lIGZhaWxlZC4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQutC70L7QvdC40YDQsNC90LUuIgorIzogZGlmZi1uby1pbmRleC5jOjIzOAorbXNnaWQgImdpdCBkaWZmIC0tbm8taW5kZXggWzxvcHRpb25zPl0gPHBhdGg+IDxwYXRoPiIKK21zZ3N0ciAiZ2l0IGRpZmYgLS1uby1pbmRleCBb0J7Qn9Cm0JjQr+KApl0g0J/QqtCiINCf0KrQoiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzgKLW1zZ2lkICJObyBkZWZhdWx0IGJyYW5jaCBvYnRhaW5lZC4iCi1tc2dzdHIgItCd0LUg0LUg0L/QvtC70YPRh9C10L0g0LrQu9C+0L0g0L/QviDQv9C+0LTRgNCw0LfQsdC40YDQsNC90LUuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk0OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKLW1zZ3N0ciAi0J3Rj9C80LAg0L/QvtC00LDQstCw0L3QtSDQvtGC0LPQvtCy0LDRgNGP0YnQviDQvdCwIOKAniVz4oCcLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjEKLW1zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0YDQsNCx0L7RgtC90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2MiBsaWIvaW5kZXgudGNsOjcwIGxpYi9pbmRleC50Y2w6MTM2Ci0jOiBsaWIvaW5kZXgudGNsOjIwNwotbXNnaWQgImZpbGVzIgotbXNnc3RyICLRhNCw0LnQu9C+0LLQtSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5ODEKLW1zZ2lkICJDYW5ub3QgY2xvbmUgc3VibW9kdWxlcy4iCi1tc2dzdHIgItCf0L7QtNC80L7QtNGD0LvQuNGC0LUg0L3QtSDQvNC+0LPQsNGCINC00LAg0YHQtSDQutC70L7QvdC40YDQsNGCLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5OTAKLW1zZ2lkICJDbG9uaW5nIHN1Ym1vZHVsZXMiCi1tc2dzdHIgItCa0LvQvtC90LjRgNCw0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQuCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE1Ci1tc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQv9GK0YDQstC+0L3QsNGH0LDQu9C90L4g0LjQt9GC0LXQs9C70Y/QvdC1LiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDU5Ci1tc2dpZCAiT3BlbiIKLW1zZ3N0ciAi0J7RgtCy0LDRgNGP0L3QtSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY5Ci1tc2dpZCAiUmVwb3NpdG9yeToiCi1tc2dzdHIgItCl0YDQsNC90LjQu9C40YnQtToiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTExOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L7RgtCy0LDRgNGP0L3QtSDQvdCwINGF0YDQsNC90LjQu9C40YnQtdGC0L4g4oCeJXPigJw6IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTIKLW1zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgotbXNnc3RyICLQotC+0LLQsCDQvdC10YHQstGK0YDQt9Cw0L3QviDQuNC30YLQtdCz0LvRj9C90LUiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo2MAotbXNnaWQgIlJldmlzaW9uIEV4cHJlc3Npb246IgotbXNnc3RyICLQmNC30YDQsNC3INC30LAg0LLQtdGA0YHQuNGPOiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjcyCi1tc2dpZCAiTG9jYWwgQnJhbmNoIgotbXNnc3RyICLQm9C+0LrQsNC70LXQvSDQutC70L7QvSIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjc3Ci1tc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgotbXNnc3RyICLQodC70LXQtNGP0Ykg0LrQu9C+0L0iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo4MiBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ0Ci1tc2dpZCAiVGFnIgotbXNnc3RyICLQldGC0LjQutC10YIiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMjEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKLW1zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90LAg0LLQtdGA0YHQuNGPOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjM0MgotbXNnaWQgIk5vIHJldmlzaW9uIHNlbGVjdGVkLiIKLW1zZ3N0ciAi0J3QtSDQtSDQuNC30LHRgNCw0L3QsCDQstC10YDRgdC40Y8uIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzUwCi1tc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCi1tc2dzdHIgItCY0LfRgNCw0LfRitGCINC30LAg0LLQtdGA0YHQuNGPINC1INC/0YDQsNC30LXQvS4iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzcKLW1zZ2lkICJVcGRhdGVkIgotbXNnc3RyICLQntCx0L3QvtCy0LXQvSIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjU2NQotbXNnaWQgIlVSTCIKLW1zZ3N0ciAi0JDQtNGA0LXRgSIKLQotIzogbGliL2NvbW1pdC50Y2w6OQorIzogZGlmZi1uby1pbmRleC5jOjI2MwogbXNnaWQgIiIKLSJUaGVyZSBpcyBub3RoaW5nIHRvIGFtZW5kLlxuIgotIlxuIgotIllvdSBhcmUgYWJvdXQgdG8gY3JlYXRlIHRoZSBpbml0aWFsIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGNvbW1pdCBiZWZvcmUgdGhpcyAiCi0idG8gYW1lbmQuXG4iCisiTm90IGEgZ2l0IHJlcG9zaXRvcnkuIFVzZSAtLW5vLWluZGV4IHRvIGNvbXBhcmUgdHdvIHBhdGhzIG91dHNpZGUgYSB3b3JraW5nICIKKyJ0cmVlIgogbXNnc3RyICIiCi0i0J3Rj9C80LAg0LrQsNC60LLQviDQtNCwINGB0LUg0L/QvtC/0YDQsNCy0LguXG4iCi0iXG4iCi0i0KnQtSDRgdGK0LfQtNCw0LTQtdGC0LUg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1LiDQn9GA0LXQtNC4INC90LXQs9C+INC90Y/QvNCwINC00YDRg9Cz0Lgg0L/QvtC00LDQstCw0L3QuNGPLCDQutC+0LjRgtC+ICIKLSLQtNCwINC/0L7Qv9GA0LDQstC40YLQtS5cbiIKKyLQndC1INC1INGF0YDQsNC90LjQu9C40YnQtSDQvdCwIGdpdC4gINCf0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsCDigJ4tLW5vLWluZGV44oCcLCDQt9CwINC00LAg0YHRgNCw0LLQvdC40YLQtSAiCisi0L/RitGC0LjRidCwINC40LfQstGK0L0g0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviIKIAotIzogbGliL2NvbW1pdC50Y2w6MTgKKyM6IGRpZmYuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIgorbXNnc3RyICIiCisiICDQndC10YPRgdC/0LXRiNC90L4g0YDQsNC30L/QvtC30L3QsNCy0LDQvdC1INC90LAg4oCeJXPigJwg0LrQsNGC0L4g0L/RgNC+0YbQtdC90YIt0L/RgNCw0LMg0LfQsCDRgdGC0LDRgtC40YHRgtC40LrQsNGC0LAg0L/QviAiCisi0LTQuNGA0LXQutGC0L7RgNC40LhcbiIKKworIzogZGlmZi5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgINCd0LXQv9C+0LfQvdCw0YIg0L/QsNGA0LDQvNC10YLRitGAIOKAniVz4oCcINC30LAg0YHRgtCw0YLQuNGB0YLQuNC60LDRgtCwINC/0L4g0LTQuNGA0LXQutGC0L7RgNC40LgnXG4iCisKKyM6IGRpZmYuYzoyOTYKIG1zZ2lkICIiCi0iQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCi0iXG4iCi0iWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKLSJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgotImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCisiY29sb3IgbW92ZWQgc2V0dGluZyBtdXN0IGJlIG9uZSBvZiAnbm8nLCAnZGVmYXVsdCcsICdibG9ja3MnLCAnemVicmEnLCAiCisiJ2RpbW1lZC16ZWJyYScsICdwbGFpbiciCiBtc2dzdHIgIiIKLSLQn9C+INCy0YDQtdC80LUg0L3QsCDRgdC70LjQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0L/QvtC/0YDQsNCy0Y/RgtC1LlxuIgotIlxuIgotItCSINC80L7QvNC10L3RgtCwINCy0YHQtSDQvtGJ0LUg0L3QtSDRgdGC0LUg0LfQsNCy0YrRgNGI0LjQu9C4INC+0L/QtdGA0LDRhtC40Y8g0L/QviDRgdC70LjQstCw0L3QtS4g0J3QtSDQvNC+0LbQtSDQtNCwINC/0L7Qv9GA0LDQstC40YLQtSAiCi0i0L/RgNC10LTQuNGI0L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSwg0L7RgdCy0LXQvSDQsNC60L4g0L/RitGA0LLQviDQvdC1INC/0YDQtdGD0YHRgtCw0L3QvtCy0LjRgtC1INGC0LXQutGD0YnQvtGC0L4g0YHQu9C40LLQsNC90LUuXG4iCisi0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDQt9CwINGG0LLRj9GCINC30LAg0L/RgNC10LzQtdGB0YLQstCw0L3QtSDRgtGA0Y/QsdCy0LAg0LTQsCDQtSDQtdC00L3QsCDQvtGCOiDigJ5ub+KAnCAo0LHQtdC3KSwgIgorIuKAnmRlZmF1bHTigJwgKNGB0YLQsNC90LTQsNGA0YLQvdC+KSwg4oCeYmxvY2tz4oCcICjQv9Cw0YDRh9C10YLQsCksIOKAnnplYnJh4oCcICjRgNCw0LnQtSksICIKKyLigJ5kaW1tZWRfemVicmHigJwgKNGC0YrQvNC90L4g0YDQsNC50LUpLCDigJ5wbGFpbuKAnCAo0L7QsdC40LrQvdC+0LLQtdC90L4pIgogCi0jOiBsaWIvY29tbWl0LnRjbDo0OAotbXNnaWQgIkVycm9yIGxvYWRpbmcgY29tbWl0IGRhdGEgZm9yIGFtZW5kOiIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0YDQtdC20LTQsNC90LUg0L3QsCDQtNCw0L3QvdC40YLQtSDQvtGCINC/0L7QtNCw0LLQsNC90LUsINC60L7QuNGC0L4g0LTQsCDRgdC1INC/0L7Qv9GA0LDQstGP0YI6IgotCi0jOiBsaWIvY29tbWl0LnRjbDo3NQotbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCi1tc2dzdHIgItCY0LTQtdC90YLQuNGE0LjQutCw0YbQuNGP0YLQsCDQstC4INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtC/0YDQtdC00LXQu9C10L3QsDoiCi0KLSM6IGxpYi9jb21taXQudGNsOjgwCi1tc2dpZCAiSW52YWxpZCBHSVRfQ09NTUlUVEVSX0lERU5UOiIKLW1zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90L4g0L/QvtC70LUg4oCeR0lUX0NPTU1JVFRFUl9JREVOVOKAnDoiCi0KLSM6IGxpYi9jb21taXQudGNsOjEyOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgotbXNnc3RyICLQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiBUY2wg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC60L7QtNC40YDQsNC90LXRgtC+IOKAniVz4oCcLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MTQ5CisjOiBkaWZmLmM6MzI0CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisidW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcycsIHBvc3NpYmxlIHZhbHVlcyBhcmUgJ2lnbm9yZS1zcGFjZS1jaGFuZ2UnLCAiCisiJ2lnbm9yZS1zcGFjZS1hdC1lb2wnLCAnaWdub3JlLWFsbC1zcGFjZScsICdhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UnIgogbXNnc3RyICIiCi0i0KHRitGB0YLQvtGP0L3QuNC10YLQviDQv9GA0Lgg0L/QvtGB0LvQtdC00L3QsNGC0LAg0L/RgNC+0LLQtdGA0LrQsCDQvdC1INC+0YLQs9C+0LLQsNGA0Y8g0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAgIgotItGF0YDQsNC90LjQu9C40YnQtdGC0L4uXG4iCi0iXG4iCi0i0J3Rj9C60L7QuSDQtNGA0YPQsyDQv9GA0L7RhtC10YEg0LfQsCBHaXQg0LUg0L/RgNC+0LzQtdC90LjQuyDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+INC80LXQttC00YPQstGA0LXQvNC10L3QvdC+LiDQodGK0YHRgtC+0Y/QvdC40LXRgtC+ICIKLSLRgtGA0Y/QsdCy0LAg0LTQsCDQsdGK0LTQtSDQv9GA0L7QstC10YDQtdC90L4g0L/RgNC10LTQuCDQvdC+0LLQviDQv9C+0LTQsNCy0LDQvdC1LlxuIgotIlxuIgotItCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0YnQtSDQt9Cw0L/QvtGH0L3QtSDQvdC+0LLQsCDQv9GA0L7QstC10YDQutCwLlxuIgorItC90LXQv9C+0LTQtNGK0YDQttCw0L0g0YDQtdC20LjQvCDQt9CwINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeY29sb3ItbW92ZWQtd3MgbW9kZeKAnCDigJTCoOKAniVz4oCcLCDQstGK0LfQvNC+0LbQvdC40YLQtSAiCisi0YHRgtC+0LnQvdC+0YHRgtC4INGB0LAg4oCeaWdub3JlLXNwYWNlLWNoYW5nZeKAnCAo0L/RgNC10L3QtdCx0YDQtdCz0LLQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0L3QsCDQv9GA0LDQt9C90LjRgtC1ICIKKyLQt9C90LDRhtC4KSwg4oCeaWdub3JlLXNwYWNlLWF0LWVvbOKAnCAo0L/RgNC10L3QtdCx0YDQtdCz0LLQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0L3QsCDQv9GA0LDQt9C90LjRgtC1INC30L3QsNGG0LggIgorItCyINC60YDQsNGPINC90LAg0YDQtdC00LApLCDigJ5pZ25vcmUtYWxsLXNwYWNl4oCcICjQv9GA0LXQvdC10LHRgNC10LPQstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQv9GA0LDQt9C90Lgg0LfQvdCw0YbQuCksICIKKyLigJ5hbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2XigJwgKNC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0LIg0L/RgNCw0LfQvdC40YLQtSDQt9C90LDRhtC4INC30LAgIgorItGE0L7RgNC80LDRgtC40YDQsNC90LUpIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxNzMKLSMsIHRjbC1mb3JtYXQKKyM6IGRpZmYuYzozMzIKIG1zZ2lkICIiCi0iVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKLSJcbiIKLSJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIHN0YWdlIHRoZSBmaWxlICIKLSJiZWZvcmUgY29tbWl0dGluZy5cbiIKKyJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyICIKKyJ3aGl0ZXNwYWNlIG1vZGVzIgogbXNnc3RyICIiCi0i0J3QtdGB0LvQtdGC0LjRgtC1INGE0LDQudC70L7QstC1INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0L/QvtC00LDQstCw0L3QuC5cbiIKLSJcbiIKLSLQktGK0LIg0YTQsNC50LvQsCDigJ4lc+KAnCDQuNC80LAg0LrQvtC90YTQu9C40LrRgtC4INC/0YDQuCDRgdC70LjQstCw0L3QtS4g0JfQsCDQtNCwINCz0L4g0L/QvtC00LDQtNC10YLQtSwg0YLRgNGP0LHQstCwINC/0YrRgNCy0L4g0LTQsCAiCi0i0LrQvtGA0LjQs9C40YDQsNGC0LUg0LrQvtC90YTQu9C40LrRgtC40YLQtSDQuCDQtNCwINC00L7QsdCw0LLQuNGC0LUg0YTQsNC50LvQsCDQutGK0Lwg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1LlxuIgorIuKAnmNvbG9yLW1vdmVkLXdz4oCcOiDigJ5hbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2XigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINC00YDRg9Cz0LjRgtC1INGA0LXQttC40LzQuCAiCisi0LfQsCDQv9GA0LDQt9C90Lgg0LfQvdCw0YbQuCIKIAotIzogbGliL2NvbW1pdC50Y2w6MTgxCi0jLCB0Y2wtZm9ybWF0CisjOiBkaWZmLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdmFsdWUgZm9yICdkaWZmLnN1Ym1vZHVsZScgY29uZmlnIHZhcmlhYmxlOiAnJXMnIgorbXNnc3RyICLQndC10L/QvtC30L3QsNGC0LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCDQt9CwINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeZGlmZi5zdWJtb2R1bGXigJwiCisKKyM6IGRpZmYuYzo0NjUKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKLSJcbiIKLSJGaWxlICVzIGNhbm5vdCBiZSBjb21taXR0ZWQgYnkgdGhpcyBwcm9ncmFtLlxuIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCiBtc2dzdHIgIiIKLSLQndC10L/QvtC30L3QsNGC0L4g0YHRitGB0YLQvtGP0L3QuNC1INC90LAg0YTQsNC50Lsg4oCeJXPigJwuXG4iCi0iXG4iCi0i0KTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LTQsNC00LXQvSDRh9GA0LXQtyDRgtC10LrRg9GJ0LDRgtCwINC/0YDQvtCz0YDQsNC80LAuXG4iCisi0JPRgNC10YjQutC4INCyINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeZGlmZi5kaXJzdGF04oCcOlxuIgorIiVzIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODkKKyM6IGRpZmYuYzo0MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGRpZmYgZGllZCwgc3RvcHBpbmcgYXQgJXMiCittc2dzdHIgIiIKKyLQstGK0L3RiNC90LDRgtCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDRgNCw0LfQu9C40LrQuCDQt9Cw0LLRitGA0YjQuCDQvdC10YPRgdC/0LXRiNC90L4uICDQodC/0LjRgNCw0L3QtSDQvdCwINGA0LDQsdC+0YLQsNGC0LAg0L/RgNC4IOKAniVz4oCcIgorCisjOiBkaWZmLmM6NDU0NworbXNnaWQgIi0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtLWNoZWNrIGFuZCAtcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICIiCisi0J7Qv9GG0LjQuNGC0LUg4oCeLS1uYW1lLW9ubHnigJwsIOKAni0tbmFtZS1zdGF0dXPigJwsIOKAni0tY2hlY2vigJwg0Lgg4oCeLXPigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LggIgorItC10LTQvdCwINGBINC00YDRg9Cz0LAiCisKKyM6IGRpZmYuYzo0NTUwCittc2dpZCAiLUcsIC1TIGFuZCAtLWZpbmQtb2JqZWN0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni1H4oCcLCDigJ4tU+KAnCDQuCDigJ4tLWZpbmQtb2JqZWN04oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4INC10LTQvdCwINGBINC00YDRg9Cz0LAiCisKKyM6IGRpZmYuYzo0NjI4Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgItCe0L/RhtC40Y/RgtCwIOKAni0tZm9sbG934oCcINC40LfQuNGB0LrQstCwINGC0L7Rh9C90L4g0LXQtNC40L0g0L/RitGCIgorCisjOiBkaWZmLmM6NDY3NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tc3RhdCB2YWx1ZTogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDigJ4tLXN0YXTigJw6ICVzIgorCisjOiBkaWZmLmM6NDY4MSBkaWZmLmM6NDY4NiBkaWZmLmM6NDY5MSBkaWZmLmM6NDY5NiBkaWZmLmM6NTIwOQorIzogcGFyc2Utb3B0aW9ucy5jOjE5NyBwYXJzZS1vcHRpb25zLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAniVz4oCcINC+0YfQsNC60LLQsCDRh9C40YHQu9C+INC30LAg0LDRgNCz0YPQvNC10L3RgiIKKworIzogZGlmZi5jOjQ3MTMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgotIlxuIgotIllvdSBtdXN0IHN0YWdlIGF0IGxlYXN0IDEgZmlsZSBiZWZvcmUgeW91IGNhbiBjb21taXQuXG4iCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgogbXNnc3RyICIiCi0i0J3Rj9C80LAg0L/RgNC+0LzQtdC90Lgg0LfQsCDQv9C+0LTQsNCy0LDQvdC1LlxuIgotIlxuIgotItCi0YDRj9Cx0LLQsCDQtNCwINC00L7QsdCw0LLQuNGC0LUg0L/QvtC90LUg0LXQtNC40L0g0YTQsNC50Lsg0LrRitC8INC40L3QtNC10LrRgdCwLCDQt9CwINC00LAg0L/QvtC00LDQtNC10YLQtS5cbiIKKyLQndC10YDQsNC30L/QvtC30L3QsNGCINC/0LDRgNCw0LzQtdGC0YrRgCDQutGK0Lwg0L7Qv9GG0LjRj9GC0LAg4oCeLS1kaXJzdGF0Ly1Y4oCcOlxuIgorIiVzIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMDQKKyM6IGRpZmYuYzo0Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY2hhbmdlIGNsYXNzICclYycgaW4gLS1kaWZmLWZpbHRlcj0lcyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgiDQstC40LQg0L/RgNC+0LzRj9C90LA6IOKAniVj4oCcINCyIOKAni0tZGlmZi1maWx0ZXI9JXPigJwiCisKKyM6IGRpZmYuYzo0ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgYWZ0ZXIgd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDRgdGC0L7QudC90L7RgdGCINGB0LvQtdC0IOKAnndzLWVycm9yLWhpZ2hsaWdodD0lLipz4oCcIgorCisjOiBkaWZmLmM6NDgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LrRgNC40LUiCisKKyM6IGRpZmYuYzo0ODg2IGRpZmYuYzo0ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgPG4+LzxtPiBmb3JtIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0LjQt9C40YHQutCy0LAg0YHRgtC+0LnQvdC+0YHRgtC4INC30LAg0JzQmNCd0JjQnNCQ0JvQldCdXyUlX9Cf0KDQntCc0K/QndCQX9CX0JBf0JjQl9Ci0J7Qp9Cd0JjQml8vIgorItCc0JDQmtCh0JjQnNCQ0JvQldCdXyUlX9Cf0KDQntCc0K/QndCQX9CX0JBf0JfQkNCc0K/QndCQINC+0YIiCisKKyM6IGRpZmYuYzo0OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBjaGFyYWN0ZXIsIGdvdCAnJXMnIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQuNC30LjRgdC60LLQsCDQt9C90LDQuiwg0LAg0L3QtTog4oCeJXPigJwiCisKKyM6IGRpZmYuYzo0OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLWNvbG9yLW1vdmVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0LDRgNCz0YPQvNC10L3RgiDQt9CwIOKAni0tY29sb3ItbW92ZWTigJw6IOKAniVz4oCcIgorCisjOiBkaWZmLmM6NDk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgJyVzJyBpbiAtLWNvbG9yLW1vdmVkLXdzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRgNC10LbQuNC8IOKAniVz4oCcINC30LAg4oCeIC0tY29sb3ItbW92ZWQtd3PigJwiCisKKyM6IGRpZmYuYzo0OTg0CiBtc2dpZCAiIgotIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKLSJcbiIKLSJBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuIgotIlxuIgotIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKLSItIFNlY29uZCBsaW5lOiBCbGFua1xuIgotIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKKyJvcHRpb24gZGlmZi1hbGdvcml0aG0gYWNjZXB0cyBcIm15ZXJzXCIsIFwibWluaW1hbFwiLCBcInBhdGllbmNlXCIgYW5kICIKKyJcImhpc3RvZ3JhbVwiIgogbXNnc3RyICIiCi0i0JfQsNC00LDQudGC0LUg0LTQvtCx0YDQviDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUuXG4iCi0iXG4iCi0i0JjQt9C/0L7Qu9C30LLQsNC50YLQtSDRgdC70LXQtNC90LjRjyDRhNC+0YDQvNCw0YI6XG4iCi0iXG4iCi0i4pePINCf0YrRgNCy0Lgg0YDQtdC0OiDQvtC/0LjRgdCw0L3QuNC1INCyINC10LTQvdC+INC40LfRgNC10YfQtdC90LjQtSDQvdCwINC/0YDQvtC80Y/QvdCw0YLQsC5cbiIKLSLil48g0JLRgtC+0YDQuCDRgNC10LQ6INC/0YDQsNC30LXQvS5cbiIKLSLil48g0J7RgdGC0LDQvdCw0LvQuNGC0LUg0YDQtdC00L7QstC1OiDQvtC/0LjRiNC10YLQtSDQt9Cw0YnQviDRgdC1INC90LDQu9Cw0LPQsCDRgtCw0LfQuCDQv9GA0L7QvNGP0L3QsC5cbiIKKyLQvtC/0YbQuNGP0YLQsCDQv9GA0LjQtdC80LAg0YHQu9C10LTQvdC40YLQtSDQstCw0YDQuNCw0L3RgtC4INC30LAg0LDQu9Cz0L7RgNC40YLRitC8INC30LAg0YDQsNC30LvQuNC60Lg6IOKAnm15ZXJz4oCcICjQv9C+ICIKKyLQnNCw0LnQtdGA0YEpLCDigJ5taW5pbWFs4oCcICjQvNC40L3QuNC80LjQt9C40YDQsNC90LUg0L3QsCDRgNCw0LfQu9C40LrQuNGC0LUpLCDigJ5wYXRpZW5jZeKAnCAo0L/QsNGB0LjQsNC90YEpINC4ICIKKyLigJ5oaXN0b2dyYW3igJwgKNGF0LjRgdGC0L7Qs9GA0LDQvNC10L0pIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMzUKLW1zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKLW1zZ3N0ciAi0JjQt9C/0YrQu9C90Y/QstCw0L3QtSDQvdCwINC60YPQutCw0YLQsCDQv9GA0LXQtNC4INC/0L7QtNCw0LLQsNC90LXigKYiCisjOiBkaWZmLmM6NTAyMCBkaWZmLmM6NTA0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50IHRvICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQsNGA0LPRg9C80LXQvdGCINC60YrQvCDigJ4lc+KAnCIKIAotIzogbGliL2NvbW1pdC50Y2w6MjUwCi1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZS1jb21taXQgaG9vay4iCi1tc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+INC1INC+0YLRhdCy0YrRgNC70LXQvdC+INC+0YIg0LrRg9C60LDRgtCwINC/0YDQtdC00Lgg0L/QvtC00LDQstCw0L3QtS4iCisjOiBkaWZmLmM6NTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIKK21zZ3N0ciAi0L3QtdGA0LDQt9C/0L7Qt9C90LDRgiDQv9Cw0YDQsNC80LXRgtGK0YAg0LrRitC8INC+0L/RhtC40Y/RgtCwIOKAni0tc3VibW9kdWxl4oCcOiDigJ4lc+KAnCIKIAotIzogbGliL2NvbW1pdC50Y2w6MjY5CisjOiBkaWZmLmM6NTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS13b3JkLWRpZmYgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQsNGA0LPRg9C80LXQvdGCINC60YrQvCDigJ4tLXdvcmQtZGlmZuKAnDog4oCeJXPigJwiCisKKyM6IGRpZmYuYzo1MjU3Cittc2dpZCAiRGlmZiBvdXRwdXQgZm9ybWF0IG9wdGlvbnMiCittc2dzdHIgItCk0L7RgNC80LDRgiDQvdCwINC40LfRhdC+0LTQsCDQt9CwINGA0LDQt9C70LjQutC40YLQtSIKKworIzogZGlmZi5jOjUyNTkgZGlmZi5jOjUyNjUKK21zZ2lkICJnZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LrRgNGK0L/QutC4IgorCisjOiBkaWZmLmM6NTI2MiBidWlsdGluL2xvZy5jOjE3MworbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQsNC30LvQuNC60LjRgtC1IgorCisjOiBkaWZmLmM6NTI2NyBkaWZmLmM6NTM4MSBkaWZmLmM6NTM4OAorbXNnaWQgIjxuPiIKK21zZ3N0ciAi0JHQoNCe0JkiCisKKyM6IGRpZmYuYzo1MjY4IGRpZmYuYzo1MjcxCittc2dpZCAiZ2VuZXJhdGUgZGlmZnMgd2l0aCA8bj4gbGluZXMgY29udGV4dCIKK21zZ3N0ciAi0YTQsNC50LvQvtCy0LXRgtC1INGBINGA0LDQt9C70LjQutC4INC00LAg0YHQsCDRgSDQutC+0L3RgtC10LrRgdGCINGBINGC0LDQutGK0LIg0JHQoNCe0Jkg0YDQtdC00L7QstC1IgorCisjOiBkaWZmLmM6NTI3MworbXNnaWQgImdlbmVyYXRlIHRoZSBkaWZmIGluIHJhdyBmb3JtYXQiCittc2dzdHIgItGE0LDQudC70L7QstC10YLQtSDRgSDRgNCw0LfQu9C40LrQuCDQtNCwINGB0LAg0LIg0YHRg9GA0L7QsiDRhNC+0YDQvNCw0YIiCisKKyM6IGRpZmYuYzo1Mjc2Cittc2dpZCAic3lub255bSBmb3IgJy1wIC0tcmF3JyIKK21zZ3N0ciAi0L/RgdC10LLQtNC+0L3QuNC8INC90LAg4oCeLXAgLS1zdGF04oCcIgorCisjOiBkaWZmLmM6NTI4MAorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXN0YXQnIgorbXNnc3RyICLQv9GB0LXQstC00L7QvdC40Lwg0L3QsCDigJ4tcCAtLXN0YXTigJwiCisKKyM6IGRpZmYuYzo1Mjg0Cittc2dpZCAibWFjaGluZSBmcmllbmRseSAtLXN0YXQiCittc2dzdHIgIuKAni0tc3RhdOKAnCDQstGK0LIg0YTQvtGA0LzQsNGCINC30LAg0YfQtdGC0LXQvdC1INC+0YIg0L/RgNC+0LPRgNCw0LzQsCIKKworIzogZGlmZi5jOjUyODcKK21zZ2lkICJvdXRwdXQgb25seSB0aGUgbGFzdCBsaW5lIG9mIC0tc3RhdCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0L/QvtGB0LvQtdC00L3QuNGPINGA0LXQtCDQvdCwIOKAni0tc3RhdOKAnCIKKworIzogZGlmZi5jOjUyODkgZGlmZi5jOjUyOTcKK21zZ2lkICI8cGFyYW0xLHBhcmFtMj4uLi4iCittc2dzdHIgItCf0JDQoNCQ0JzQldCi0KrQoF8xLCDQn9CQ0KDQkNCc0JXQotCq0KBfMiwg4oCmIgorCisjOiBkaWZmLmM6NTI5MAogbXNnaWQgIiIKLSJZb3UgYXJlIGFib3V0IHRvIGNvbW1pdCBvbiBhIGRldGFjaGVkIGhlYWQuIFRoaXMgaXMgYSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgIgotInRoaW5nIHRvIGRvIGJlY2F1c2UgaWYgeW91IHN3aXRjaCB0byBhbm90aGVyIGJyYW5jaCB5b3Ugd2lsbCBsb3NlIHlvdXIgIgotImNoYW5nZXMgYW5kIGl0IGNhbiBiZSBkaWZmaWN1bHQgdG8gcmV0cmlldmUgdGhlbSBsYXRlciBmcm9tIHRoZSByZWZsb2cuIFlvdSAiCi0ic2hvdWxkIHByb2JhYmx5IGNhbmNlbCB0aGlzIGNvbW1pdCBhbmQgY3JlYXRlIGEgbmV3IGJyYW5jaCB0byBjb250aW51ZS5cbiIKLSIgXG4iCi0iIERvIHlvdSByZWFsbHkgd2FudCB0byBwcm9jZWVkIHdpdGggeW91ciBDb21taXQ/IgorIm91dHB1dCB0aGUgZGlzdHJpYnV0aW9uIG9mIHJlbGF0aXZlIGFtb3VudCBvZiBjaGFuZ2VzIGZvciBlYWNoIHN1Yi1kaXJlY3RvcnkiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9C/0YDQtdC00LXQu9C10L3QuNC10YLQviDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQt9CwINCy0YHRj9C60LAg0L/QvtC00LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGRpZmYuYzo1Mjk0Cittc2dpZCAic3lub255bSBmb3IgLS1kaXJzdGF0PWN1bXVsYXRpdmUiCittc2dzdHIgItC/0YHQtdCy0LTQvtC90LjQvCDQvdCwIOKAni0tZGlyc3RhdD1jdW11bGF0aXZl4oCcIgorCisjOiBkaWZmLmM6NTI5OAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1maWxlcyxwYXJhbTEscGFyYW0yLi4uIgorbXNnc3RyICLQv9GB0LXQstC00L7QvdC40Lwg0L3QsCDigJ4tLWRpcnN0YXQ90KTQkNCZ0JvQntCS0JUs0J/QkNCg0JDQnNCV0KLQqtCgXzEs0J/QkNCg0JDQnNCV0KLQqtCgXzIs4oCm4oCcIgorCisjOiBkaWZmLmM6NTMwMgorbXNnaWQgIndhcm4gaWYgY2hhbmdlcyBpbnRyb2R1Y2UgY29uZmxpY3QgbWFya2VycyBvciB3aGl0ZXNwYWNlIGVycm9ycyIKIG1zZ3N0ciAiIgotItCp0LUg0L/QvtC00LDQtNC10YLQtSDQutGK0Lwg0L3QtdGB0LLRitGA0LfQsNC9LCDQvtGC0LTQtdC70ZDQvSDRg9C60LDQt9Cw0YLQtdC7IOKAnkhFQUTigJwuINCi0L7QstCwINC1INC+0L/QsNGB0L3Qviwg0LfQsNGJ0L7RgtC+ICIKLSLQv9GA0Lgg0L/RgNC10LzQuNC90LDQstCw0L3QtdGC0L4g0LrRitC8INC60LvQvtC9INGJ0LUg0LfQsNCz0YPQsdC40YLQtSDQv9GA0L7QvNC10L3QuNGC0LUg0YHQuCwg0LrQsNGC0L4g0LXQtNC40L3RgdGC0LLQtdC90LjRj9GCINC90LDRh9C40L0gIgotItC00LAg0LPQuCDQstGK0YDQvdC10YLQtSDRidC1INC1INGH0YDQtdC3INC20YPRgNC90LDQu9CwINC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSAocmVmbG9nKS4g0J3QsNC5LdCy0LXRgNC+0Y/RgtC90L4g0YLRgNGP0LHQstCwICIKLSLQtNCwINC90LUg0L/RgNCw0LLQuNGC0LUg0YLQvtCy0LAg0L/QvtC00LDQstCw0L3QtSwg0LAg0LTQsCDRgdGK0LfQtNCw0LTQtdGC0LUg0L3QvtCyINC60LvQvtC9LCDQv9GA0LXQtNC4INC00LAg0L/RgNC+0LTRitC70LbQuNGC0LUuXG4iCi0iIFxuIgotItCh0LjQs9GD0YDQvdC4INC70Lgg0YHRgtC1LCDRh9C1INC40YHQutCw0YLQtSDQtNCwINC40LfQstGK0YDRiNC40YLQtSDRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LU/IgorItC/0YDQtdC00YPQv9GA0LXQttC00LDQstCw0L3QtSwg0LDQutC+INC/0YDQvtC80LXQvdC40YLQtSDQstC+0LTRj9GCINC00L4g0LzQsNGA0LrQtdGA0Lgg0LfQsCDQutC+0L3RhNC70LjQutGCINC40LvQuCDQs9GA0LXRiNC60Lgg0LIgIgorItC/0YDQsNC30L3QuNGC0LUg0LfQvdCw0YbQuCIKIAotIzogbGliL2NvbW1pdC50Y2w6MjkwCi1tc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCi1tc2dzdHIgItCY0LfQv9GK0LvQvdGP0LLQsNC90LUg0L3QsCDQutGD0LrQsNGC0LAg0LfQsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC14oCmIgorIzogZGlmZi5jOjUzMDUKK21zZ2lkICJjb25kZW5zZWQgc3VtbWFyeSBzdWNoIGFzIGNyZWF0aW9ucywgcmVuYW1lcyBhbmQgbW9kZSBjaGFuZ2VzIgorbXNnc3RyICIiCisi0YHRitC60YDQsNGC0LXQvdC+INGA0LXQt9GO0LzQtSDQvdCwINGB0YrQt9C00LDQtNC10L3QuNGC0LUsINC/0YDQtdC40LzQtdC90YPQstCw0L3QuNGC0LUg0Lgg0YTQsNC50LvQvtCy0LXRgtC1INGBINC/0YDQvtC80Y/QvdCwINC90LAgIgorItGA0LXQttC40LzQsCDQvdCwINC00L7RgdGC0YrQvyIKIAotIzogbGliL2NvbW1pdC50Y2w6MzA1Ci1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCi1tc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+INC1INC+0YLRhdCy0YrRgNC70LXQvdC+INC+0YIg0LrRg9C60LDRgtCwINC30LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtS4iCisjOiBkaWZmLmM6NTMwOAorbXNnaWQgInNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDQuNC80LXQvdCw0YLQsCDQvdCwINC/0YDQvtC80LXQvdC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCiAKLSM6IGxpYi9jb21taXQudGNsOjMxOAotbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKLW1zZ3N0ciAi0J/QvtC00LDQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQteKApiIKKyM6IGRpZmYuYzo1MzExCittc2dpZCAic2hvdyBvbmx5IG5hbWVzIGFuZCBzdGF0dXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0LjQvNC10L3QsNGC0LAg0Lgg0YHRgtCw0YLQuNGB0YLQuNC60LDRgtCwINC30LAg0L/RgNC+0LzQtdC90LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKIAotIzogbGliL2NvbW1pdC50Y2w6MzM0Ci1tc2dpZCAid3JpdGUtdHJlZSBmYWlsZWQ6IgotbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LTRitGA0LLQvtGC0L4gKHdyaXRlLXRyZWUpOiIKKyM6IGRpZmYuYzo1MzEzCittc2dpZCAiPHdpZHRoPlssPG5hbWUtd2lkdGg+Wyw8Y291bnQ+XV0iCittc2dzdHIgItCo0JjQoNCe0KfQmNCd0JBbLNCY0JzQlS3QqNCY0KDQntCn0JjQndCQWyzQkdCg0J7QmV1dIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMzUgbGliL2NvbW1pdC50Y2w6MzgyIGxpYi9jb21taXQudGNsOjQwMwotbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/QvtC00LDQstCw0L3QtS4iCisjOiBkaWZmLmM6NTMxNAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0LDRgtC40YHRgtC40LrQsCDQt9CwINC/0YDQvtC80LXQvdC40YLQtSIKIAotIzogbGliL2NvbW1pdC50Y2w6MzUyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ29tbWl0ICVzIGFwcGVhcnMgdG8gYmUgY29ycnVwdCIKLW1zZ3N0ciAi0J/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJwg0LjQt9Cz0LvQtdC20LTQsCDQv9C+0LLRgNC10LTQtdC90L4iCisjOiBkaWZmLmM6NTMxNiBkaWZmLmM6NTMxOSBkaWZmLmM6NTMyMgorbXNnaWQgIjx3aWR0aD4iCittc2dzdHIgItCo0JjQoNCe0KfQmNCd0JAiCiAKLSM6IGxpYi9jb21taXQudGNsOjM1NworIzogZGlmZi5jOjUzMTcKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gd2lkdGgiCittc2dzdHIgItGB0YLQsNGC0LjRgdGC0LjQutCwINGBINGC0LDQutCw0LLQsCDQqNCY0KDQntCn0JjQndCQINC30LAg0L/RgNC+0LzQtdC90LjRgtC1IgorCisjOiBkaWZmLmM6NTMyMAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiBuYW1lIHdpZHRoIgorbXNnc3RyICLRgdGC0LDRgtC40YHRgtC40LrQsCDQt9CwINC/0YDQvtC80LXQvdC40YLQtSDRgSDRgtCw0LrQsNCy0LAg0KjQmNCg0J7Qp9CY0J3QkCDQvdCwINC40LzQtdC90LDRgtCwIgorCisjOiBkaWZmLmM6NTMyMworbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiBncmFwaCB3aWR0aCIKK21zZ3N0ciAi0YHRgtCw0YLQuNGB0YLQuNC60LAg0LfQsCDQv9GA0L7QvNC10L3QuNGC0LUg0YEg0YLQsNC60LDQstCwINCo0JjQoNCe0KfQmNCd0JAg0L3QsCDQs9GA0LDMgNGE0LAiCisKKyM6IGRpZmYuYzo1MzI1Cittc2dpZCAiPGNvdW50PiIKK21zZ3N0ciAi0JHQoNCe0JkiCisKKyM6IGRpZmYuYzo1MzI2Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBsaW1pdGVkIGxpbmVzIgorbXNnc3RyICLQvtCz0YDQsNC90LjRh9Cw0LLQsNC90LUg0L3QsCDQkdCg0J7RjyDQvdCwINGA0LXQtNC+0LLQtdGC0LUg0LIg0YHRgtCw0YLQuNGB0YLQuNC60LDRgtCwINC30LAg0L/RgNC+0LzQtdC90LjRgtC1IgorCisjOiBkaWZmLmM6NTMyOQorbXNnaWQgImdlbmVyYXRlIGNvbXBhY3Qgc3VtbWFyeSBpbiBkaWZmc3RhdCIKK21zZ3N0ciAi0LrRgNCw0YLQutC+INGA0LXQt9GO0LzQtSDQsiDRgdGC0LDRgtC40YHRgtC40LrQsNGC0LAg0LfQsCDQv9GA0L7QvNC10L3QuNGC0LUiCisKKyM6IGRpZmYuYzo1MzMyCittc2dpZCAib3V0cHV0IGEgYmluYXJ5IGRpZmYgdGhhdCBjYW4gYmUgYXBwbGllZCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LTQstC+0LjRh9C90LAg0YDQsNC30LvQuNC60LAg0LLRitCyINCy0LjQtCDQt9CwINC/0YDQuNC70LDQs9Cw0L3QtSIKKworIzogZGlmZi5jOjUzMzUKK21zZ2lkICJzaG93IGZ1bGwgcHJlLSBhbmQgcG9zdC1pbWFnZSBvYmplY3QgbmFtZXMgb24gdGhlIFwiaW5kZXhcIiBsaW5lcyIKK21zZ3N0ciAiIgorItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC/0YrQu9C90LjRgtC1INC40LzQtdC90LAg0L3QsCDQvtCx0LXQutGC0Lgg0LIg0YDQtdC00L7QstC10YLQtSDQt9CwINC40L3QtNC10LrRgdCwINC/0YDQuCDQstCw0YDQuNCw0L3RgtC40YLQtSAiCisi0L/RgNC10LTQuCDQuCDRgdC70LXQtCDQv9GA0L7QvNGP0L3QsNGC0LAiCisKKyM6IGRpZmYuYzo1MzM3Cittc2dpZCAic2hvdyBjb2xvcmVkIGRpZmYiCittc2dzdHIgItGA0LDQt9C70LjQutC4INCyINGG0LLRj9GCIgorCisjOiBkaWZmLmM6NTMzOAorbXNnaWQgIjxraW5kPiIKK21zZ3N0ciAi0JLQmNCUIgorCisjOiBkaWZmLmM6NTMzOQogbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJObyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGJ5IHRoaXMgY29tbWl0IGFuZCBpdCB3YXMgbm90IGEgbWVyZ2UgY29tbWl0LlxuIgotIlxuIgotIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyJoaWdobGlnaHQgd2hpdGVzcGFjZSBlcnJvcnMgaW4gdGhlICdjb250ZXh0JywgJ29sZCcgb3IgJ25ldycgbGluZXMgaW4gdGhlICIKKyJkaWZmIgogbXNnc3RyICIiCi0i0J3Rj9C80LAg0L/RgNC+0LzQtdC90Lgg0LfQsCDQv9C+0LTQsNCy0LDQvdC1LlxuIgotIlxuIgotItCSINGC0L7QstCwINC/0L7QtNCw0LLQsNC90LUg0L3QtSDRgdCwINC/0YDQvtC80LXQvdGP0L3QuCDQvdC40LrQsNC60LLQuCDRhNCw0LnQu9C+0LLQtSwg0LAg0Lgg0L3QtSDQtSDQv9C+0LTQsNCy0LDQvdC1INGB0YrRgSAiCi0i0YHQu9C40LLQsNC90LUuXG4iCi0iXG4iCi0i0JDQstGC0L7QvNCw0YLQuNGH0L3QviDRidC1INC30LDQv9C+0YfQvdC1INC90L7QstCwINC/0YDQvtCy0LXRgNC60LAuXG4iCisi0LPRgNC10YjQutC40YLQtSDQsiDQv9GA0LDQt9C90LjRgtC1INC30L3QsNGG0Lgg0LTQsCDRgdC1INGD0LrQsNC30LLQsNGCINCyINGA0LXQtNC+0LLQtdGC0LUg0LfQsCDQutC+0L3RgtC10LrRgdGC0LAsINCy0LDRgNC40LDQvdGC0LjRgtC1ICIKKyLQv9GA0LXQtNC4INC4INGB0LvQtdC0INGA0LDQt9C70LjQutCw0YLQsCwiCiAKLSM6IGxpYi9jb21taXQudGNsOjM2NAotbXNnaWQgIk5vIGNoYW5nZXMgdG8gY29tbWl0LiIKLW1zZ3N0ciAi0J3Rj9C80LAg0L/RgNC+0LzQtdC90Lgg0LfQsCDQv9C+0LTQsNCy0LDQvdC1LiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzgxCi1tc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC/0L7QtNCw0LLQsNC90LUg0L3QsCDQtNGK0YDQstC+0YLQviAoY29tbWl0LXRyZWUpOiIKLQotIzogbGliL2NvbW1pdC50Y2w6NDAyCi1tc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgotbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1ICh1cGRhdGUtcmVmKToiCi0KLSM6IGxpYi9jb21taXQudGNsOjQ5NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKLW1zZ3N0ciAi0KPRgdC/0LXRiNC90L4g0L/QvtC00LDQstCw0L3QtSAlczogJXMiCi0KLSM6IGxpYi9jb25zb2xlLnRjbDo1OQotbXNnaWQgIldvcmtpbmcuLi4gcGxlYXNlIHdhaXQuLi4iCi1tc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQtNC10LnRgdGC0LLQuNC1LCDQuNC30YfQsNC60LDQudGC0LXigKYiCi0KLSM6IGxpYi9jb25zb2xlLnRjbDoxODYKLW1zZ2lkICJTdWNjZXNzIgotbXNnc3RyICLQo9GB0L/QtdGFIgotCi0jOiBsaWIvY29uc29sZS50Y2w6MjAwCi1tc2dpZCAiRXJyb3I6IENvbW1hbmQgRmFpbGVkIgotbXNnc3RyICLQk9GA0LXRiNC60LA6INC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QvNCw0L3QtNCwIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQyCi1tc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCi1tc2dzdHIgItCR0YDQvtC5INC90LXQv9Cw0LrQtdGC0LjRgNCw0L3QuCDQvtCx0LXQutGC0LgiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDMKLW1zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKLW1zZ3N0ciAi0JTQuNGB0LrQvtCy0L4g0L/RgNC+0YHRgtGA0LDQvdGB0YLQstC+INC30LDQtdGC0L4g0L7RgiDQvdC10L/QsNC60LXRgtC40YDQsNC90Lgg0L7QsdC10LrRgtC4IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ0Ci1tc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICLQkdGA0L7QuSDQv9Cw0LrQtdGC0LjRgNCw0L3QuCDQvtCx0LXQutGC0LgiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKLW1zZ2lkICJOdW1iZXIgb2YgcGFja3MiCi1tc2dzdHIgItCR0YDQvtC5INC/0LDQutC10YLQuCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NgotbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBwYWNrZWQgb2JqZWN0cyIKLW1zZ3N0ciAi0JTQuNGB0LrQvtCy0L4g0L/RgNC+0YHRgtGA0LDQvdGB0YLQstC+INC30LDQtdGC0L4g0L7RgiDQv9Cw0LrQtdGC0LjRgNCw0L3QuCDQvtCx0LXQutGC0LgiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKLW1zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgotbXNnc3RyICLQn9Cw0LrQtdGC0LjRgNCw0L3QuCDQvtCx0LXQutGC0Lgg0LfQsCDQvtC60LDRgdGC0YDRj9C90LUiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKLW1zZ2lkICJHYXJiYWdlIGZpbGVzIgotbXNnc3RyICLQpNCw0LnQu9C+0LLQtSDQt9CwINCx0L7QutC70YPQutCwIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjU3IGxpYi9vcHRpb24udGNsOjE4MiBsaWIvb3B0aW9uLnRjbDoxOTcgbGliL29wdGlvbi50Y2w6MjIwCi0jOiBsaWIvb3B0aW9uLnRjbDoyODIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlczoiCi1tc2dzdHIgIiVzOiIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo2NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IERhdGFiYXNlIFN0YXRpc3RpY3MiCi1tc2dzdHIgIiVzICglcyk6INCh0YLQsNGC0LjRgdGC0LjQutCwINC90LAg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo3MgotbXNnaWQgIkNvbXByZXNzaW5nIHRoZSBvYmplY3QgZGF0YWJhc2UiCi1tc2dzdHIgItCa0L7QvNC/0YDQtdGB0LjRgNCw0L3QtSDQvdCwINCx0LDQt9Cw0YLQsCDRgSDQtNCw0L3QvdC4INC30LAg0L7QsdC10LrRgtC40YLQtSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo4MwotbXNnaWQgIlZlcmlmeWluZyB0aGUgb2JqZWN0IGRhdGFiYXNlIHdpdGggZnNjay1vYmplY3RzIgotbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC90LAg0LHQsNC30LDRgtCwINGBINC00LDQvdC90Lgg0LfQsCDQvtCx0LXQutGC0LjRgtC1INGBINC/0YDQvtCz0YDQsNC80LDRgtCwIOKAnmZzY2stb2JqZWN0c+KAnCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKLSMsIHRjbC1mb3JtYXQKKyM6IGRpZmYuYzo1MzQyCiBtc2dpZCAiIgotIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKLSJcbiIKLSJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKLSJ0aGUgZGF0YWJhc2UuXG4iCi0iXG4iCi0iQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCisiZG8gbm90IG11bmdlIHBhdGhuYW1lcyBhbmQgdXNlIE5VTHMgYXMgb3V0cHV0IGZpZWxkIHRlcm1pbmF0b3JzIGluIC0tcmF3IG9yICIKKyItLW51bXN0YXQiCiBtc2dzdHIgIiIKLSLQkiDRgtC+0LLQsCDRhdGA0LDQvdC40LvQuNGJ0LUg0LIg0LzQvtC80LXQvdGC0LAg0LjQvNCwINC60YrQvCAlaSDQvdC10L/QsNC60LXRgtC40YDQsNC90Lgg0L7QsdC10LrRgtC4LlxuIgotIlxuIgotItCX0LAg0LTQvtCx0YDQsCDQv9GA0L7QuNC30LLQvtC00LjRgtC10LvQvdC+0YHRgiDRgdC1INC/0YDQtdC/0L7RgNGK0YfQstCwINC00LAg0LrQvtC80L/RgNC10YHQuNGA0LDRgtC1INCx0LDQt9Cw0YLQsCDRgSDQtNCw0L3QvdC4INC30LAgIgotItC+0LHQtdC60YLQuNGC0LUuXG4iCi0iXG4iCi0i0JTQsCDRgdC1INC30LDQv9C+0YfQvdC1INC70Lgg0LrQvtC80L/RgNC10YHQuNGA0LDQvdC10YLQvj8iCisi0LHQtdC3INC/0YDQtdC40LzQtdC90YPQstCw0L3QtSDQvdCwINC/0YrRgtC40YnQsNGC0LAuICDQlNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsNGCINC90YPQu9C10LLQuCDQsdCw0LnRgtC+0LLQtSDQt9CwINGA0LDQt9C00LXQu9C40YLQtdC70LggIgorItC90LAg0L/QvtC70LXRgtCwINCyINC40LfRhdC+0LTQsCDQv9GA0Lgg0L/QvtC70LfQstCw0L3QtSDQvdCwINC+0L/RhtC40Y/RgtCwIOKAni0tcmF34oCcINC40LvQuCDigJ4tLW51bXN0YXTigJwiCiAKLSM6IGxpYi9kYXRlLnRjbDoyNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgZGF0ZSBmcm9tIEdpdDogJXMiCi1tc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdC4INC00LDQvdC90Lgg0L7RgiBHaXQ6ICVzIgorIzogZGlmZi5jOjUzNDUgZGlmZi5jOjUzNDggZGlmZi5jOjUzNTEgZGlmZi5jOjU0NTcKK21zZ2lkICI8cHJlZml4PiIKK21zZ3N0ciAi0J/QoNCV0KTQmNCa0KEiCiAKLSM6IGxpYi9kaWZmLnRjbDo3NwotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjUzNDYKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBzb3VyY2UgcHJlZml4IGluc3RlYWQgb2YgXCJhL1wiIgorbXNnc3RyICLQv9GA0LXRhNC40LrRgSDQstC80LXRgdGC0L4g4oCeYS/igJwg0LfQsCDQuNC30YLQvtGH0L3QuNC6IgorCisjOiBkaWZmLmM6NTM0OQorbXNnaWQgInNob3cgdGhlIGdpdmVuIGRlc3RpbmF0aW9uIHByZWZpeCBpbnN0ZWFkIG9mIFwiYi9cIiIKK21zZ3N0ciAi0L/RgNC10YTQuNC60YEg0LLQvNC10YHRgtC+IOKAnmIv4oCcINC30LAg0YbQtdC7IgorCisjOiBkaWZmLmM6NTM1MgorbXNnaWQgInByZXBlbmQgYW4gYWRkaXRpb25hbCBwcmVmaXggdG8gZXZlcnkgbGluZSBvZiBvdXRwdXQiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDQtNC+0L/RitC70L3QuNGC0LXQu9C10L0g0L/RgNC10YTQuNC60YEg0LfQsCDQstGB0LXQutC4INGA0LXQtCDQvdCwINC40LfRhdC+0LTQsCIKKworIzogZGlmZi5jOjUzNTUKK21zZ2lkICJkbyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeCIKK21zZ3N0ciAi0LHQtdC3INC/0YDQtdGE0LjQutGBINC30LAg0LjQt9GC0L7Rh9C90LjQutCwINC4INGG0LXQu9GC0LAiCisKKyM6IGRpZmYuYzo1MzU4Cittc2dpZCAic2hvdyBjb250ZXh0IGJldHdlZW4gZGlmZiBodW5rcyB1cCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBsaW5lcyIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC60L7QvdGC0LXQutGB0YIg0LzQtdC20LTRgyDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvQvdC40YLQtSDQv9Cw0YDRh9C10YLQsCDRgSDRgNCw0LfQu9C40LrQuCDQvtGCINGD0LrQsNC30LDQvdC40Y8gIgorItCR0KDQntCZINGA0LXQtNC+0LLQtSIKKworIzogZGlmZi5jOjUzNjIgZGlmZi5jOjUzNjcgZGlmZi5jOjUzNzIKK21zZ2lkICI8Y2hhcj4iCittc2dzdHIgItCX0J3QkNCaIgorCisjOiBkaWZmLmM6NTM2MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIG5ldyBsaW5lIGluc3RlYWQgb2YgJysnIgorbXNnc3RyICLQt9C90LDQuiDQstC80LXRgdGC0L4g4oCeK+KAnCDQt9CwINC90L7QsiDQstCw0YDQuNCw0L3RgiDQvdCwINGA0LXQtCIKKworIzogZGlmZi5jOjUzNjgKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYW4gb2xkIGxpbmUgaW5zdGVhZCBvZiAnLSciCittc2dzdHIgItC30L3QsNC6INCy0LzQtdGB0YLQviDigJ4t4oCcINC30LAg0YHRgtCw0YAg0LLQsNGA0LjQsNC90YIg0L3QsCDRgNC10LQiCisKKyM6IGRpZmYuYzo1MzczCittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGEgY29udGV4dCBpbnN0ZWFkIG9mICcgJyIKK21zZ3N0ciAi0LfQvdCw0Log0LLQvNC10YHRgtC+IOKAniDigJwg0LfQsCDQutC+0L3RgtC10LrRgdGCIgorCisjOiBkaWZmLmM6NTM3NgorbXNnaWQgIkRpZmYgcmVuYW1lIG9wdGlvbnMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCDQt9CwINGA0LDQt9C70LjQutC4INGBINC/0YDQtdC40LzQtdC90YPQstCw0L3QtSIKKworIzogZGlmZi5jOjUzNzcKK21zZ2lkICI8bj5bLzxtPl0iCittc2dzdHIgItCc0JjQndCY0JzQkNCb0JXQnV8lX9Cf0KDQntCc0K/QndCQX9CX0JBf0JjQl9Ci0J7Qp9Cd0JjQmlsv0JzQkNCa0KHQmNCc0JDQm0XQnV8lX9Cf0KDQntCc0K/QndCQX9CX0JBf0JfQkNCc0K/QndCQXSIKKworIzogZGlmZi5jOjUzNzgKK21zZ2lkICJicmVhayBjb21wbGV0ZSByZXdyaXRlIGNoYW5nZXMgaW50byBwYWlycyBvZiBkZWxldGUgYW5kIGNyZWF0ZSIKK21zZ3N0ciAiIgorItC30LDQvNC10YHRgtCy0LDQvdC1INC90LAg0L/RitC70L3QuNGC0LUg0L/RgNC+0LzQtdC90Lgg0YEg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70L3QvtGB0YIg0L7RgiDQuNC30YLRgNC40LLQsNC90LUg0Lgg0YHRitC30LTQsNCy0LDQvdC1IgorCisjOiBkaWZmLmM6NTM4MgorbXNnaWQgImRldGVjdCByZW5hbWVzIgorbXNnc3RyICLQt9Cw0YHQuNGH0LDQvdC1INC90LAg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC40Y/RgtCwIgorCisjOiBkaWZmLmM6NTM4NgorbXNnaWQgIm9taXQgdGhlIHByZWltYWdlIGZvciBkZWxldGVzIgorbXNnc3RyICLQsdC10Lcg0L/RgNC10LTQstCw0YDQuNGC0LXQu9C10L0g0LLQsNGA0LjQsNC90YIg0L/RgNC4INC40LfRgtGA0LjQstCw0L3QtSIKKworIzogZGlmZi5jOjUzODkKK21zZ2lkICJkZXRlY3QgY29waWVzIgorbXNnc3RyICLQt9Cw0YHQuNGH0LDQvdC1INC90LAg0LrQvtC/0LjRgNCw0L3QuNGP0YLQsCIKKworIzogZGlmZi5jOjUzOTMKK21zZ2lkICJ1c2UgdW5tb2RpZmllZCBmaWxlcyBhcyBzb3VyY2UgdG8gZmluZCBjb3BpZXMiCittc2dzdHIgItGC0YrRgNGB0LXQvdC1INC90LAg0LrQvtC/0LjRgNCw0L3QviDQuCDQvtGCINC90LXQv9GA0L7QvNC10L3QtdC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBkaWZmLmM6NTM5NQorbXNnaWQgImRpc2FibGUgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAi0LHQtdC3INGC0YrRgNGB0LXQvdC1INC90LAg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC40Y8iCisKKyM6IGRpZmYuYzo1Mzk4Cittc2dpZCAidXNlIGVtcHR5IGJsb2JzIGFzIHJlbmFtZSBzb3VyY2UiCittc2dzdHIgItC/0YDQsNC30L3QuCDQvtCx0LXQutGC0Lgg0LrQsNGC0L4g0LjQt9GC0L7Rh9C90LjQuiDQv9GA0Lgg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC40Y8iCisKKyM6IGRpZmYuYzo1NDAwCittc2dpZCAiY29udGludWUgbGlzdGluZyB0aGUgaGlzdG9yeSBvZiBhIGZpbGUgYmV5b25kIHJlbmFtZXMiCittc2dzdHIgIiIKKyLQv9GA0L7QtNGK0LvQttCw0LLQsNC90LUg0L3QsCDQuNC30LLQtdC20LTQsNC90LXRgtC+INC90LAg0LjRgdGC0L7RgNC40Y/RgtCwIOKAlCDQsdC10Lcg0L7RgtGA0Y/Qt9Cy0LDQvdC10YLQviDQv9GA0Lgg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC40Y8gIgorItC90LAg0YTQsNC50LsiCisKKyM6IGRpZmYuYzo1NDAzCiBtc2dpZCAiIgotIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgotIlxuIgotIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgotIlxuIgotIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKLSJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgotIlxuIgotIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgotInRoZSBzYW1lIHN0YXRlLiIKKyJwcmV2ZW50IHJlbmFtZS9jb3B5IGRldGVjdGlvbiBpZiB0aGUgbnVtYmVyIG9mIHJlbmFtZS9jb3B5IHRhcmdldHMgZXhjZWVkcyAiCisiZ2l2ZW4gbGltaXQiCiBtc2dzdHIgIiIKLSLQndC1INGB0LAg0L7RgtC60YDQuNGC0Lgg0YDQsNC30LvQuNC60LguXG4iCi0iXG4iCi0i0J3Rj9C80LAg0L/RgNC+0LzQtdC90Lgg0LIg4oCeJXPigJwuXG4iCi0iXG4iCi0i0JLRgNC10LzQtdGC0L4g0L3QsCDQv9GA0L7QvNGP0L3QsCDQvdCwINGE0LDQudC70LAg0LUg0LHQuNC7INC30LDQtNCw0LTQtdC9INC+0YIg0LTRgNGD0LPQsCDQv9GA0L7Qs9GA0LDQvNCwLCDQvdC+INGB0YrQtNGK0YDQttCw0L3QuNC10YLQviAiCi0i0LzRgyDQvdC1INC1INC/0YDQvtC80LXQvdC10L3Qvi5cbiIKLSJcbiIKLSLQkNCy0YLQvtC80LDRgtC40YfQvdC+INGJ0LUg0LfQsNC/0L7Rh9C90LUg0L3QvtCy0LAg0L/RgNC+0LLQtdGA0LrQsCDQtNCw0LvQuCDQvdGP0LzQsCDQtNGA0YPQs9C4INGE0LDQudC70L7QstC1INCyINGC0L7QstCwICIKLSLRgdGK0YHRgtC+0Y/QvdC40LUuIgorItCx0LXQtyDQt9Cw0YHQuNGH0LDQvdC1INC90LAg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC40Y8v0LrQvtC/0LjRgNCw0L3QuNGPLCDQsNC60L4g0LHRgNC+0Y/RgiDQuNC8INC90LDQtNCy0LjRiNCw0LLQsCDRgtCw0LfQuCDRgdGC0L7QudC90L7RgdGCIgogCi0jOiBsaWIvZGlmZi50Y2w6MTE3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgotbXNnc3RyICLQl9Cw0YDQtdC20LTQsNC90LUg0L3QsCDRgNCw0LfQu9C40LrQuNGC0LUg0LIg4oCeJXPigJzigKYiCisjOiBkaWZmLmM6NTQwNQorbXNnaWQgIkRpZmYgYWxnb3JpdGhtIG9wdGlvbnMiCittc2dzdHIgItCe0L/RhtC40Lgg0LrRitC8INCw0LvQs9C+0YDQuNGC0YrQvNCwINC30LAg0YDQsNC30LvQuNC60LgiCiAKLSM6IGxpYi9kaWZmLnRjbDoxNDMKKyM6IGRpZmYuYzo1NDA3Cittc2dpZCAicHJvZHVjZSB0aGUgc21hbGxlc3QgcG9zc2libGUgZGlmZiIKK21zZ3N0ciAi0YLRitGA0YHQtdC90LUg0L3QsCDQstGK0LfQvNC+0LbQvdC+INC90LDQuS3QvNCw0LvQutCwINGA0LDQt9C70LjQutCwIgorCisjOiBkaWZmLmM6NTQxMAorbXNnaWQgImlnbm9yZSB3aGl0ZXNwYWNlIHdoZW4gY29tcGFyaW5nIGxpbmVzIgorbXNnc3RyICLQsdC10Lcg0L/RgNC+0LzQtdC90Lgg0LIg0L/RgNCw0LfQvdC40YLQtSDQt9C90LDRhtC4INC/0YDQuCDRgdGA0LDQstC90Y/QstCw0L3QtSDQvdCwINGA0LXQtNC+0LLQtSIKKworIzogZGlmZi5jOjU0MTMKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiBhbW91bnQgb2Ygd2hpdGVzcGFjZSIKK21zZ3N0ciAi0LHQtdC3INC/0YDQvtC80LXQvdC4INCyINC/0YDQsNC30L3QuNGC0LUg0LfQvdCw0YbQuCIKKworIzogZGlmZi5jOjU0MTYKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIGF0IEVPTCIKK21zZ3N0ciAi0LHQtdC3INC/0YDQvtC80LXQvdC4INCyINC/0YDQsNC30L3QuNGC0LUg0LfQvdCw0YbQuCDQsiDQutGA0LDRjyDQvdCwINGA0LXQtNC+0LLQtdGC0LUiCisKKyM6IGRpZmYuYzo1NDE5Cittc2dpZCAiaWdub3JlIGNhcnJpZXItcmV0dXJuIGF0IHRoZSBlbmQgb2YgbGluZSIKK21zZ3N0ciAi0LHQtdC3INC/0YDQvtC80LXQvdC4INCyINC30L3QsNGG0LjRgtC1INC30LAg0LrRgNCw0Lkg0L3QsCDRgNC10LQiCisKKyM6IGRpZmYuYzo1NDIyCittc2dpZCAiaWdub3JlIGNoYW5nZXMgd2hvc2UgbGluZXMgYXJlIGFsbCBibGFuayIKK21zZ3N0ciAi0LHQtdC3INC/0YDQvtC80LXQvdC4INCyINGA0LXQtNC+0LLQtdGC0LUsINC60L7QuNGC0L4g0YHQsCDQuNC30YbRj9C70L4g0L7RgiDQv9GA0LDQt9C90Lgg0LfQvdCw0YbQuCIKKworIzogZGlmZi5jOjU0MjUKK21zZ2lkICJoZXVyaXN0aWMgdG8gc2hpZnQgZGlmZiBodW5rIGJvdW5kYXJpZXMgZm9yIGVhc3kgcmVhZGluZyIKK21zZ3N0ciAiIgorItC10LLRgNC40YHRgtC40LrQsCDQt9CwINC/0YDQtdC80LXRgdGC0LLQsNC90LUg0L3QsCDQs9GA0LDQvdC40YbQuNGC0LUg0L3QsCDQv9Cw0YDRh9C10YLQsNGC0LAg0LfQsCDRg9C70LXRgdC90Y/QstCw0L3QtSDQvdCwINGH0LXRgtC10L3QtdGC0L4iCisKKyM6IGRpZmYuYzo1NDI4Cittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJwYXRpZW5jZSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICLRgNCw0LfQu9C40LrQsCDRh9GA0LXQtyDQsNC70LPQvtGA0LjRgtGK0Lwg0LfQsCDQv9C+0LTRgNC10LTQsdCwINC60LDRgtC+INC/0LDRgdC40LDQvdGBIgorCisjOiBkaWZmLmM6NTQzMgorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwiaGlzdG9ncmFtIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgItGA0LDQt9C70LjQutCwINC/0L4g0YXQuNGB0YLQvtCz0YDQsNC80L3QuNGPINCw0LvQs9C+0YDQuNGC0YrQvCIKKworIzogZGlmZi5jOjU0MzQKK21zZ2lkICI8YWxnb3JpdGhtPiIKK21zZ3N0ciAi0JDQm9CT0J7QoNCY0KLQqtCcIgorCisjOiBkaWZmLmM6NTQzNQorbXNnaWQgImNob29zZSBhIGRpZmYgYWxnb3JpdGhtIgorbXNnc3RyICLQuNC30LHQvtGAINC90LAg0JDQm9CT0J7QoNCY0KLQqtCc0LAg0LfQsCDRgNCw0LfQu9C40LrQuCIKKworIzogZGlmZi5jOjU0MzcKK21zZ2lkICI8dGV4dD4iCittc2dzdHIgItCi0JXQmtCh0KIiCisKKyM6IGRpZmYuYzo1NDM4Cittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJhbmNob3JlZCBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICLRgNCw0LfQu9C40LrQsCDRh9GA0LXQtyDQsNC70LPQvtGA0LjRgtGK0LzQsCDRgdGK0YEg0LfQsNC60L7RgtCy0Y/QvdC1IgorCisjOiBkaWZmLmM6NTQ0MCBkaWZmLmM6NTQ0OSBkaWZmLmM6NTQ1MgorbXNnaWQgIjxtb2RlPiIKK21zZ3N0ciAi0KDQldCW0JjQnCIKKworIzogZGlmZi5jOjU0NDEKK21zZ2lkICJzaG93IHdvcmQgZGlmZiwgdXNpbmcgPG1vZGU+IHRvIGRlbGltaXQgY2hhbmdlZCB3b3JkcyIKK21zZ3N0ciAiIgorItGA0LDQt9C70LjQutCwINC/0L4g0LTRg9C80LgsINC60LDRgtC+INGB0LUg0L/QvtC70LfQstCwINGC0L7Qt9C4INCg0JXQltCY0Jwg0LfQsCDQvtGC0LTQtdC70Y/QvdC10YLQviDQvdCwINC/0YDQvtC80LXQvdC10L3QuNGC0LUg0LTRg9C80LgiCisKKyM6IGRpZmYuYzo1NDQzIGRpZmYuYzo1NDQ2IGRpZmYuYzo1NDkxCittc2dpZCAiPHJlZ2V4PiIKK21zZ3N0ciAi0KDQldCT0KPQm9Cv0KDQldCdX9CY0JfQoNCQ0JciCisKKyM6IGRpZmYuYzo1NDQ0Cittc2dpZCAidXNlIDxyZWdleD4gdG8gZGVjaWRlIHdoYXQgYSB3b3JkIGlzIgorbXNnc3RyICLQoNCV0JPQo9Cb0K/QoNCV0J1f0JjQl9Cg0JDQlyDQt9CwINGA0LDQt9C00LXQu9GP0L3QtSDQv9C+INC00YPQvNC4IgorCisjOiBkaWZmLmM6NTQ0NworbXNnaWQgImVxdWl2YWxlbnQgdG8gLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9PHJlZ2V4PiIKK21zZ3N0ciAi0L/RgdC10LLQtNC+0L3QuNC8INC90LAg4oCeLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg90KDQldCT0KPQm9Cv0KDQldCdX9CY0JfQoNCQ0JfigJwiCisKKyM6IGRpZmYuYzo1NDUwCittc2dpZCAibW92ZWQgbGluZXMgb2YgY29kZSBhcmUgY29sb3JlZCBkaWZmZXJlbnRseSIKK21zZ3N0ciAi0YDQsNC30LvQuNGH0LXQvSDRhtCy0Y/RgiDQt9CwINC40LfQstC10LbQtNCw0L3QtSDQvdCwINC/0YDQtdC80LXRgdGC0LXQvdC40YLQtSDRgNC10LTQvtCy0LUiCisKKyM6IGRpZmYuYzo1NDUzCittc2dpZCAiaG93IHdoaXRlIHNwYWNlcyBhcmUgaWdub3JlZCBpbiAtLWNvbG9yLW1vdmVkIgorbXNnc3RyICIiCisi0YDQtdC20LjQvCDQt9CwINC/0YDQtdGB0LrQsNGH0LDQvdC10YLQviDQvdCwINC/0YDQsNC30L3QuNGC0LUg0LfQvdCw0YbQuCDQv9GA0Lgg0LfQsNC00LDQstCw0L3QtdGC0L4g0L3QsCDigJ4tLWNvbG9yLW1vdmVk4oCcIgorCisjOiBkaWZmLmM6NTQ1NgorbXNnaWQgIk90aGVyIGRpZmYgb3B0aW9ucyIKK21zZ3N0ciAi0JTRgNGD0LPQuCDQvtC/0YbQuNC4INC30LAg0YDQsNC30LvQuNC60LgiCisKKyM6IGRpZmYuYzo1NDU4Cittc2dpZCAid2hlbiBydW4gZnJvbSBzdWJkaXIsIGV4Y2x1ZGUgY2hhbmdlcyBvdXRzaWRlIGFuZCBzaG93IHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICIiCisi0L/RgNC4INC40LfQv9GK0LvQvdC10L3QuNC1INC+0YIg0L/QvtC00LTQuNGA0LXQutGC0L7RgNC40Y8g0LTQsCDRgdC1INC/0YDQtdC90LXQsdGA0LXQs9Cy0LDRgiDRgNCw0LfQu9C40LrQuNGC0LUg0LjQt9Cy0YrQvSDQvdC10Y8g0Lgg0LTQsCAiCisi0YHQtSDQv9C+0LvQt9Cy0LDRgiDQvtGC0L3QvtGB0LjRgtC10LvQvdC4INC/0YrRgtC40YnQsCIKKworIzogZGlmZi5jOjU0NjIKK21zZ2lkICJ0cmVhdCBhbGwgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAi0L7QsdGA0LDQsdC+0YLQutCwINC90LAg0LLRgdC40YfQutC4INGE0LDQudC70L7QstC1INC60LDRgtC+INGC0LXQutGB0YLQvtCy0LgiCisKKyM6IGRpZmYuYzo1NDY0Cittc2dpZCAic3dhcCB0d28gaW5wdXRzLCByZXZlcnNlIHRoZSBkaWZmIgorbXNnc3RyICLRgNCw0LfQvNGP0L3QsCDQvdCwINC00LLQsNGC0LAg0LLRhdC+0LTQsCDigJQg0L7QsdGA0YrRidCw0L3QtSDQvdCwINGA0LDQt9C70LjQutCw0YLQsCIKKworIzogZGlmZi5jOjU0NjYKK21zZ2lkICJleGl0IHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzLCAwIG90aGVyd2lzZSIKK21zZ3N0ciAiIgorItC30LDQstGK0YDRiNCy0LDQvdC1INGBINC60L7QtCDQt9CwINGB0YrRgdGC0L7Rj9C90LjQtSAxINC/0YDQuCDQvdCw0LvQuNGH0LjQtdGC0L4g0L3QsCDRgNCw0LfQu9C40LrQuCwg0LAg0LIg0L/RgNC+0YLQuNCy0LXQvSAiCisi0YHQu9GD0YfQsNC5IOKAlCDRgSAwIgorCisjOiBkaWZmLmM6NTQ2OAorbXNnaWQgImRpc2FibGUgYWxsIG91dHB1dCBvZiB0aGUgcHJvZ3JhbSIKK21zZ3N0ciAi0LHQtdC3INCy0YHRj9C60LDQutGK0LIg0LjQt9GF0L7QtCDQvtGCINC/0YDQvtCz0YDQsNC80LDRgtCwIgorCisjOiBkaWZmLmM6NTQ3MAorbXNnaWQgImFsbG93IGFuIGV4dGVybmFsIGRpZmYgaGVscGVyIHRvIGJlIGV4ZWN1dGVkIgorbXNnc3RyICLQv9C+0LfQstC+0LvRj9Cy0LDQvdC1INC90LAg0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQstGK0L3RiNC90LAg0L/QvtC80L7RidC90LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINGA0LDQt9C70LjQutC4IgorCisjOiBkaWZmLmM6NTQ3MgorbXNnaWQgInJ1biBleHRlcm5hbCB0ZXh0IGNvbnZlcnNpb24gZmlsdGVycyB3aGVuIGNvbXBhcmluZyBiaW5hcnkgZmlsZXMiCittc2dzdHIgIiIKKyLQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINCy0YrQvdGI0L3QuCDQv9GA0L7Qs9GA0LDQvNC4LdGE0LjQu9GC0YDQuCDQv9GA0Lgg0YHRgNCw0LLQvdC10L3QuNC10YLQviDQvdCwINC00LLQvtC40YfQvdC4INGE0LDQudC70L7QstC1IgorCisjOiBkaWZmLmM6NTQ3NAorbXNnaWQgIjx3aGVuPiIKK21zZ3N0ciAi0JrQntCT0JAiCisKKyM6IGRpZmYuYzo1NDc1Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcyBpbiB0aGUgZGlmZiBnZW5lcmF0aW9uIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQsiDQv9C+0LTQvNC+0LTRg9C70LjRgtC1INC/0YDQuCDQuNC30LLQtdC20LTQsNC90LXRgtC+INC90LAg0YDQsNC30LvQuNC60LjRgtC1IgorCisjOiBkaWZmLmM6NTQ3OAorbXNnaWQgIjxmb3JtYXQ+IgorbXNnc3RyICLQpNCe0KDQnNCQ0KIiCisKKyM6IGRpZmYuYzo1NDc5Cittc2dpZCAic3BlY2lmeSBob3cgZGlmZmVyZW5jZXMgaW4gc3VibW9kdWxlcyBhcmUgc2hvd24iCittc2dzdHIgItC90LDRh9C40L0g0LfQsCDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0LIg0L/QvtC00LzQvtC00YPQu9C40YLQtSIKKworIzogZGlmZi5jOjU0ODMKK21zZ2lkICJoaWRlICdnaXQgYWRkIC1OJyBlbnRyaWVzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLQsdC10Lcg0LLQutC70Y7Rh9Cy0LDQvdC1INCyINC40L3QtNC10LrRgdCwINC90LAg0LfQsNC/0LjRgdC40YLQtSwg0LTQvtCx0LDQstC10L3QuCDRgSDigJ5naXQgYWRkIC1O4oCcIgorCisjOiBkaWZmLmM6NTQ4NgorbXNnaWQgInRyZWF0ICdnaXQgYWRkIC1OJyBlbnRyaWVzIGFzIHJlYWwgaW4gdGhlIGluZGV4IgorbXNnc3RyICLQstC60LvRjtGH0LLQsNC90LUg0LIg0LjQvdC00LXQutGB0LAg0L3QsCDQt9Cw0L/QuNGB0LjRgtC1LCDQtNC+0LHQsNCy0LXQvdC4INGBIOKAnmdpdCBhZGQgLU7igJwiCisKKyM6IGRpZmYuYzo1NDg4Cittc2dpZCAiPHN0cmluZz4iCittc2dzdHIgItCd0JjQlyIKKworIzogZGlmZi5jOjU0ODkKIG1zZ2lkICIiCi0iTE9DQUw6IGRlbGV0ZWRcbiIKLSJSRU1PVEU6XG4iCi1tc2dzdHIgIiIKLSLQm9Ce0JrQkNCb0J3Qnjog0LjQt9GC0YDQuNGCXG4iCi0i0J7QotCU0JDQm9CV0KfQldCd0J46XG4iCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJzdHJpbmciCittc2dzdHIgItGC0YrRgNGB0LXQvdC1INC90LAg0YDQsNC30LvQuNC60LgsINC60L7QuNGC0L4g0L/RgNC+0LzQtdC90Y/RgiDQsdGA0L7RjyDQvdCwINC/0L7Rj9Cy0LAg0L3QsCDRg9C60LDQt9Cw0L3QuNGC0LUg0L3QuNC30L7QstC1IgogCi0jOiBsaWIvZGlmZi50Y2w6MTQ4CisjOiBkaWZmLmM6NTQ5MgogbXNnaWQgIiIKLSJSRU1PVEU6IGRlbGV0ZWRcbiIKLSJMT0NBTDpcbiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInJlZ2V4IgogbXNnc3RyICIiCi0i0J7QotCU0JDQm9CV0KfQldCd0J46INC40LfRgtGA0LjRglxuIgotItCb0J7QmtCQ0JvQndCeOlxuIgorItGC0YrRgNGB0LXQvdC1INC90LAg0YDQsNC30LvQuNC60LgsINC60L7QuNGC0L4g0L/RgNC+0LzQtdC90Y/RgiDQsdGA0L7RjyDQvdCwINC/0L7Rj9Cy0LAg0L3QsCDQvdC40LfQvtCy0LXRgtC1LCDQutC+0LjRgtC+INC90LDQv9Cw0YHQstCw0YIgIgorItC90LAg0YDQtdCz0YPQu9GP0YDQvdC40Y8g0LjQt9GA0LDQtyIKIAotIzogbGliL2RpZmYudGNsOjE1NQotbXNnaWQgIkxPQ0FMOlxuIgotbXNnc3RyICLQm9Ce0JrQkNCb0J3QnjpcbiIKKyM6IGRpZmYuYzo1NDk1Cittc2dpZCAic2hvdyBhbGwgY2hhbmdlcyBpbiB0aGUgY2hhbmdlc2V0IHdpdGggLVMgb3IgLUciCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQv9GA0L7QvNC10L3QuCDRgSDigJ4tR+KAnC/igJ4tU+KAnCIKIAotIzogbGliL2RpZmYudGNsOjE1OAotbXNnaWQgIlJFTU9URTpcbiIKLW1zZ3N0ciAi0J7QotCU0JDQm9CV0KfQldCd0J46XG4iCisjOiBkaWZmLmM6NTQ5OAorbXNnaWQgInRyZWF0IDxzdHJpbmc+IGluIC1TIGFzIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAi0J3QmNCX0YrRgiDQutGK0Lwg4oCeLVPigJwg0LTQsCDRgdC1INGC0YrQu9C60YPQstCwINC60LDRgtC+INGA0LDQt9GI0LjRgNC10L0g0YDQtdCz0YPQu9GP0YDQtdC9INC40LfRgNCw0Lcg0L/QviBQT1NJWCIKIAotIzogbGliL2RpZmYudGNsOjIyMCBsaWIvZGlmZi50Y2w6MzU3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCi1tc2dzdHIgItCk0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/QvtC60LDQt9Cw0L0iCisjOiBkaWZmLmM6NTUwMQorbXNnaWQgImNvbnRyb2wgdGhlIG9yZGVyIGluIHdoaWNoIGZpbGVzIGFwcGVhciBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLRg9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINC/0L7QtNGA0LXQtNCx0LDRgtCwINC90LAg0YTQsNC50LvQvtCy0LXRgtC1INCyINC40LfRhdC+0LTQsCIKIAotIzogbGliL2RpZmYudGNsOjIyMQotbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCi1tc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNGA0LXQttC00LDQvdC1INC90LAg0YTQsNC50Ls6IgorIzogZGlmZi5jOjU1MDIKK21zZ2lkICI8b2JqZWN0LWlkPiIKK21zZ3N0ciAi0JjQlNCV0J3QotCY0KTQmNCa0JDQotCe0KBf0J3QkF/QntCR0JXQmtCiIgogCi0jOiBsaWIvZGlmZi50Y2w6MjI3Ci1tc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgotbXNnc3RyICLQpdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBHaXQgKNC/0L7QtNC80L7QtNGD0LspIgotCi0jOiBsaWIvZGlmZi50Y2w6MjM5Ci1tc2dpZCAiKiBCaW5hcnkgZmlsZSAobm90IHNob3dpbmcgY29udGVudCkuIgotbXNnc3RyICLil48g0JTQstC+0LjRh9C10L0g0YTQsNC50LsgKNGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdC1INGB0LUg0L/QvtC60LDQt9Cy0LApLiIKLQotIzogbGliL2RpZmYudGNsOjI0NAotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjU1MDMKIG1zZ2lkICIiCi0iKiBVbnRyYWNrZWQgZmlsZSBpcyAlZCBieXRlcy5cbiIKLSIqIFNob3dpbmcgb25seSBmaXJzdCAlZCBieXRlcy5cbiIKLW1zZ3N0ciAiIgotIuKXjyDQndC10YHQu9C10LTQtdC90LjRj9GCINGE0LDQudC7INC1ICVkINCx0LDQudGC0LAuXG4iCi0i4pePINCf0L7QutCw0LfQstCw0YIg0YHQtSDRgdCw0LzQviDQv9GK0YDQstC40YLQtSAlZCDQsdCw0LnRgtCwLlxuIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisib2JqZWN0IgorbXNnc3RyICLRgtGK0YDRgdC10L3QtSDQvdCwINGA0LDQt9C70LjQutC4LCDQutC+0LjRgtC+INC/0YDQvtC80LXQvdGP0YIg0LHRgNC+0Y8g0L3QsCDQv9C+0Y/QstCwINC90LAg0YPQutCw0LfQsNC90LjRjyDQvtCx0LXQutGCIgogCi0jOiBsaWIvZGlmZi50Y2w6MjUwCi0jLCB0Y2wtZm9ybWF0CisjOiBkaWZmLmM6NTUwNQorbXNnaWQgIlsoQXxDfER8TXxSfFR8VXxYfEIpLi4uWypdXSIKK21zZ3N0ciAiWyhBfEN8RHxNfFJ8VHxVfFh8QinigKZbKl1dIgorCisjOiBkaWZmLmM6NTUwNgorbXNnaWQgInNlbGVjdCBmaWxlcyBieSBkaWZmIHR5cGUiCittc2dzdHIgItC40LfQsdC+0YAg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0L/QviDQstC40LQg0YDQsNC30LvQuNC60LAiCisKKyM6IGRpZmYuYzo1NTA4Cittc2dpZCAiPGZpbGU+IgorbXNnc3RyICLQpNCQ0JnQmyIKKworIzogZGlmZi5jOjU1MDkKK21zZ2lkICJPdXRwdXQgdG8gYSBzcGVjaWZpYyBmaWxlIgorbXNnc3RyICLQmNC30YXQvtC0INC60YrQvCDRg9C60LDQt9Cw0L3QuNGPINGE0LDQudC7IgorCisjOiBkaWZmLmM6NjE2NAorbXNnaWQgImluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiB3YXMgc2tpcHBlZCBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICIiCisi0YLRitGA0YHQtdC90LXRgtC+INC90LAg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC40Y8g0L3QsCDQvtCx0LXQutGC0Lgg0YHRitGH0LXRgtCw0L3QuCDRgSDQv9GA0L7QvNC10L3QuCDRgdC1INC/0YDQtdGB0LrQsNGH0LAg0L/QvtGA0LDQtNC4ICIKKyLQvNC90L7Qs9C+0YLQviDRhNCw0LnQu9C+0LLQtS4iCisKKyM6IGRpZmYuYzo2MTY3Cittc2dpZCAib25seSBmb3VuZCBjb3BpZXMgZnJvbSBtb2RpZmllZCBwYXRocyBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICIiCisi0YPRgdGC0LDQvdC+0LLQtdC90Lgg0YHQsCDRgdCw0LzQviDRgtC+0YfQvdC40YLQtSDQutC+0L/QuNGPINC90LAg0L/RgNC+0LzQtdC90LXQvdC40YLQtSDQv9GK0YLQuNGJ0LAg0L/QvtGA0LDQtNC4INC80L3QvtCz0L7RgtC+ICIKKyLRhNCw0LnQu9C+0LLQtS4iCisKKyM6IGRpZmYuYzo2MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgbWF5IHdhbnQgdG8gc2V0IHlvdXIgJXMgdmFyaWFibGUgdG8gYXQgbGVhc3QgJWQgYW5kIHJldHJ5IHRoZSBjb21tYW5kLiIKK21zZ3N0ciAi0LfQsNC00LDQudGC0LUg0L/RgNC+0LzQtdC90LvQuNCy0LDRgtCwIOKAniVz4oCcINC00LAg0LUg0L/QvtC90LUgJWQg0Lgg0L7RgtC90L7QstC+INC40LfQv9GK0LvQvdC10YLQtSDQutC+0LzQsNC90LTQsNGC0LAuIgorCisjOiBkaXIuYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdCIKK21zZ3N0ciAi0L/RitGC0Y/RgiDigJ4lc+KAnCDQvdC1INGB0YrQstC/0LDQtNCwINGBINC90LjQutC+0Lkg0YTQsNC50Lsg0LIgZ2l0IgorCisjOiBkaXIuYzo2OTUgZGlyLmM6NzI0IGRpci5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcGF0dGVybjogJyVzJyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgiDRiNCw0LHQu9C+0L06IOKAniVz4oCcIgorCisjOiBkaXIuYzo3NTQgZGlyLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINC+0YLRgNC40YbQsNGC0LXQu9C10L0g0YjQsNCx0LvQvtC9OiDigJ4lc+KAnCIKKworIzogZGlyLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IGhhdmUgaXNzdWVzOiBwYXR0ZXJuICclcycgaXMgcmVwZWF0ZWQiCittc2dzdHIgIiIKKyLRhNCw0LnQu9GK0YIg0L7Qv9GA0LXQtNC10LvRj9GJINGH0LDRgdGC0LjRh9C90L7RgdGC0YLQsCDQvdCwINC40LfRgtC10LPQu9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INC80L7QttC1INC00LAg0LjQvNCwINC/0YDQvtCx0LvQtdC8OiAiCisi0YjQsNCx0LvQvtC90YrRgiDigJ4lc+KAnCDRgdC1INC/0L7QstGC0LDRgNGPIgorCisjOiBkaXIuYzo3OTYKK21zZ2lkICJkaXNhYmxpbmcgY29uZSBwYXR0ZXJuIG1hdGNoaW5nIgorbXNnc3RyICLQuNC30LrQu9GO0YfQstCw0L3QtSDQvdCwINC/0YrRgtC10LLQvtC00L3QvtGC0L4g0L3QsNC/0LDRgdCy0LDQvdC1IgorCisjOiBkaXIuYzoxMTczCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1c2UgJXMgYXMgYW4gZXhjbHVkZSBmaWxlIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9C+0LvQt9Cy0LAg0LfQsCDQuNCz0L3QvtGA0LjRgNCw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUgKNC60LDRgtC+IGdpdGlnbm9yZSkiCisKKyM6IGRpci5jOjIxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gZGlyZWN0b3J5ICclcyciCittc2dzdHIgItC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L3QsCIKKworIzogZGlyLmM6MjQ3OQorbXNnaWQgImZhaWxlZCB0byBnZXQga2VybmVsIG5hbWUgYW5kIGluZm9ybWF0aW9uIgorbXNnc3RyICLQuNC80LXRgtC+INC4INCy0LXRgNGB0LjRj9GC0LAg0L3QsCDRj9C00YDQvtGC0L4g0L3QtSDQsdGP0YXQsCDQv9C+0LvRg9GH0LXQvdC4IgorCisjOiBkaXIuYzoyNjAzCittc2dpZCAidW50cmFja2VkIGNhY2hlIGlzIGRpc2FibGVkIG9uIHRoaXMgc3lzdGVtIG9yIGxvY2F0aW9uIgorbXNnc3RyICIiCisi0LrQtdGI0YrRgiDQt9CwINC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0LUg0LjQt9C60LvRjtGH0LXQvSDQvdCwINGC0LDQt9C4INGB0LjRgdGC0LXQvNCwINC40LvQuCDQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1IgorCisjOiBkaXIuYzozNDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCBpbiByZXBvICVzIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg0YEg0LjQvdC00LXQutGB0LAg0LUg0L/QvtCy0YDQtdC00LXQvSDQsiDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IOKAniVz4oCcIgorCisjOiBkaXIuYzozNDUyIGRpci5jOjM0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgJXMiCittc2dzdHIgItC00LjRgNC10LrRgtC+0YDQuNC40YLQtSDQt9CwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQsNGCINGB0YrQt9C00LDQtNC10L3QuCIKKworIzogZGlyLmM6MzQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbWlncmF0ZSBnaXQgZGlyZWN0b3J5IGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0L3QsCBnaXQg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LzQuNCz0YDQuNGA0LAg0L7RgiDigJ4lc+KAnCDQtNC+IOKAniVz4oCcIgorCisjOiBlZGl0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiBXYWl0aW5nIGZvciB5b3VyIGVkaXRvciB0byBjbG9zZSB0aGUgZmlsZS4uLiVjIgorbXNnc3RyICLQn9C+0LTRgdC60LDQt9C60LA6INGH0LDQutCwINGB0LUg0YDQtdC00LDQutGC0L7RgNGK0YIg0LLQuCDQtNCwINC30LDRgtCy0L7RgNC4INGE0LDQudC70LAg4oCmJWMiCisKKyM6IGVudHJ5LmM6MTc4Cittc2dpZCAiRmlsdGVyaW5nIGNvbnRlbnQiCittc2dzdHIgItCk0LjQu9GC0YDQuNGA0LDQvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+IgorCisjOiBlbnRyeS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCBmaWxlICclcyciCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAnnN0YXTigJwg0LLRitGA0YXRgyDRhNCw0LnQu9CwIOKAniVz4oCcIgorCisjOiBlbnZpcm9ubWVudC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2l0IG5hbWVzcGFjZSBwYXRoIFwiJXNcIiIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L/RitGCINC60YrQvCDQv9GA0L7RgdGC0YDQsNC90YHRgtCy0LAg0L7RgiDQuNC80LXQvdCwIOKAniVz4oCcIgorCisjOiBlbnZpcm9ubWVudC5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0IEdJVF9ESVIgdG8gJyVzJyIKK21zZ3N0ciAiR0lUX0RJUiDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0LTQsNC00LUg0LTQsCDQtSDigJ4lc+KAnCIKKworIzogZXhlYy1jbWQuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJncyB0byBydW4gJXMiCittc2dzdHIgItC/0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INCw0YDQs9GD0LzQtdC90YLQuCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC1IOKAniVz4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6MTUwCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6INC+0YfQsNC60LLQsCDRgdC1INC/0LvQuNGC0YrQuiDRgdC/0LjRgdGK0LoiCisKKyM6IGZldGNoLXBhY2suYzoxNTMKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgYSBmbHVzaCBwYWNrZXQgYWZ0ZXIgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazog0YHQu9C10LQg0L/Qu9C40YLRitC6INGB0L/QuNGB0YrQuiDRgdC1INC+0YfQsNC60LLQsCDQuNC30YfQuNGB0YLQstCw0Ykg0L/QsNC60LXRgiDigJ5mbHVzaOKAnCIKKworIzogZmV0Y2gtcGFjay5jOjE2NAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgIiIKKyJnaXQgZmV0Y2gtcGFjazog0L7Rh9Cw0LrQstCwINGB0LUg4oCeQUNL4oCcL+KAnk5BS+KAnCwg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvSDQuNC30YfQuNGB0YLQstCw0Ykg0L/QsNC60LXRgiDigJ5mbHVzaOKAnCIKKworIzogZmV0Y2gtcGFjay5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290ICclcyciCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiDQvtGH0LDQutCy0LAg0YHQtSDigJ5BQ0vigJwv4oCeTkFL4oCcLCDQsCDQsdC1INC/0L7Qu9GD0YfQtdC90L4g4oCeJXPigJwiCisKKyM6IGZldGNoLXBhY2suYzoxOTUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdG8gcmVtb3RlIgorbXNnc3RyICLQvdC10LLRitC30LzQvtC20L3QviDQv9C40YHQsNC90LUg0LrRitC8INC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogZmV0Y2gtcGFjay5jOjI1NworbXNnaWQgIi0tc3RhdGVsZXNzLXJwYyByZXF1aXJlcyBtdWx0aV9hY2tfZGV0YWlsZWQiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tc3RhdGVsZXNzLXJwY+KAnCDQuNC30LjRgdC60LLQsCAg4oCebXVsdGlfYWNrX2RldGFpbGVk4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6MzU2IGZldGNoLXBhY2suYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L/Qu9C40YLRitC6INGA0LXQtDog4oCeJXPigJwiCisKKyM6IGZldGNoLXBhY2suYzozNjIgZmV0Y2gtcGFjay5jOjEzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1bnNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC90LXQv9C70LjRgtGK0Log0YDQtdC0OiDigJ4lc+KAnCIKKworIzogZmV0Y2gtcGFjay5jOjM2NCBmZXRjaC1wYWNrLmM6MTM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3Qgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0LvQuNC/0YHQstCwIgorCisjOiBmZXRjaC1wYWNrLmM6MzY3IGZldGNoLXBhY2suYzoxMzUxCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGluIG9iamVjdDogJXMiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQsiDQvtCx0LXQutGC0LA6IOKAniVz4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6MzY5IGZldGNoLXBhY2suYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNoYWxsb3cgZm91bmQ6ICVzIgorbXNnc3RyICLQvdC1INC1INC+0YLQutGA0LjRgiDQv9C70LjRgtGK0Log0L7QsdC10LrRgjogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNzIgZmV0Y2gtcGFjay5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgc2hhbGxvdy91bnNoYWxsb3csIGdvdCAlcyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCwINGB0LUg0L/Qu9C40YLRitC6INC40LvQuCDQvdC1INC+0LHQtdC60YIsINCwINCx0LUg0L/QvtC70YPRh9C10L3Qvjog4oCeJXPigJwiCisKKyM6IGZldGNoLXBhY2suYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICVkICVzIgorbXNnc3RyICLQv9C+0LvRg9GH0LXQvdC+INCx0LUgJXMgJWQgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC/0L7QtNCw0LLQsNC90LU6IOKAniVz4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6NDYyCittc2dpZCAiZ2l2aW5nIHVwIgorbXNnc3RyICLQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUiCisKKyM6IGZldGNoLXBhY2suYzo0NzUgcHJvZ3Jlc3MuYzozMjMKK21zZ2lkICJkb25lIgorbXNnc3RyICLQtNC10LnRgdGC0LLQuNC10YLQviDQt9Cw0LLRitGA0YjQuCIKKworIzogZmV0Y2gtcGFjay5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgKCVkKSAlcyIKK21zZ3N0ciAi0L/QvtC70YPRh9C10L3QviDQsdC1ICVzICglZCkgJXMiCisKKyM6IGZldGNoLXBhY2suYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyAlcyBhcyBjb21wbGV0ZSIKK21zZ3N0ciAi0J7RgtCx0LXQu9GP0LfQstCw0L3QtSDQvdCwIOKAniVz4oCcINC60LDRgtC+INC/0YrQu9C90L4iCisKKyM6IGZldGNoLXBhY2suYzo3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxyZWFkeSBoYXZlICVzICglcykiCittc2dzdHIgItCy0LXRh9C1INC40LzQsCDigJ4lc+KAnCAoJXMpIgorCisjOiBmZXRjaC1wYWNrLmM6ODE4Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgImZldGNoLXBhY2s6INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0YrQt9C00LDQtNC1INC/0YDQvtGG0LXRgSDQt9CwINC00LXQvNGD0LvRgtC40L/Qu9C10LrRgdC+0YDQsCIKKworIzogZmV0Y2gtcGFjay5jOjgyNgorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgItC/0YDQvtGC0L7QutC+0LvQvdCwINCz0YDQtdGI0LrQsDog0L3QtdC/0YDQsNCy0LjQu9C90LAg0LfQsNCz0LvQsNCy0L3QsCDRh9Cw0YHRgiDQvdCwINC/0LDQutC10YIiCisKKyM6IGZldGNoLXBhY2suYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIgorbXNnc3RyICJmZXRjaC1wYWNrOiDQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGK0LfQtNCw0LTQtSDQv9GA0L7RhtC10YEg0LfQsCDigJ4lc+KAnCIKKworIzogZmV0Y2gtcGFjay5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAniVz4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6OTE4Cittc2dpZCAiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAi0LPRgNC10YjQutCwINCyINC00LXQvNGD0LvRgtC40L/Qu9C10LrRgdC+0YDQsCIKKworIzogZmV0Y2gtcGFjay5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbiBpcyAlLipzIgorbXNnc3RyICLQktC10YDRgdC40Y/RgtCwINC90LAg0YHRitGA0LLRitGA0LAg0LU6ICUuKnMiCisKKyM6IGZldGNoLXBhY2suYzo5NzAgZmV0Y2gtcGFjay5jOjk3NiBmZXRjaC1wYWNrLmM6OTc5IGZldGNoLXBhY2suYzo5ODUKKyM6IGZldGNoLXBhY2suYzo5ODkgZmV0Y2gtcGFjay5jOjk5MyBmZXRjaC1wYWNrLmM6OTk3IGZldGNoLXBhY2suYzoxMDAxCisjOiBmZXRjaC1wYWNrLmM6MTAwNSBmZXRjaC1wYWNrLmM6MTAwOSBmZXRjaC1wYWNrLmM6MTAxMyBmZXRjaC1wYWNrLmM6MTAxNworIzogZmV0Y2gtcGFjay5jOjEwMjMgZmV0Y2gtcGFjay5jOjEwMjkgZmV0Y2gtcGFjay5jOjEwMzQgZmV0Y2gtcGFjay5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzICVzIgorbXNnc3RyICLQodGK0YDQstGK0YDRitGCINC/0L7QtNC00YrRgNC20LAg4oCeJXPigJwiCisKKyM6IGZldGNoLXBhY2suYzo5NzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiCittc2dzdHIgItCh0YrRgNCy0YrRgNGK0YIg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC/0LvQuNGC0LrQuCDQutC70LjQtdC90YLQuCIKKworIzogZmV0Y2gtcGFjay5jOjEwMzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctc2luY2UiCittc2dzdHIgItCh0YrRgNCy0YrRgNGK0YIg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC+0L/RhtC40Y/RgtCwIOKAni0tc2hhbGxvdy1zaW5jZeKAnCIKKworIzogZmV0Y2gtcGFjay5jOjEwMzcKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIKK21zZ3N0ciAi0KHRitGA0LLRitGA0YrRgiDQvdC1INC/0L7QtNC00YrRgNC20LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1zaGFsbG93LWV4Y2x1ZGXigJwiCisKKyM6IGZldGNoLXBhY2suYzoxMDQxCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1kZWVwZW4iCittc2dzdHIgItCh0YrRgNCy0YrRgNGK0YIg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC+0L/RhtC40Y/RgtCwIOKAni0tZGVlcGVu4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6MTA1OAorbXNnaWQgIm5vIGNvbW1vbiBjb21taXRzIgorbXNnc3RyICLQvdGP0LzQsCDQvtCx0YnQuCDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGZldGNoLXBhY2suYzoxMDcwIGZldGNoLXBhY2suYzoxNTM2Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGZldGNoIGZhaWxlZC4iCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiDQvdC10YPRgdC/0LXRiNC90L4g0LTQvtGB0YLQsNCy0Y/QvdC1LiIKKworIzogZmV0Y2gtcGFjay5jOjEyMDkKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IHJlcXVlc3RzIgorbXNnc3RyICLQodGK0YDQstGK0YDRitGCINC90LUg0L/QvtC00LTRitGA0LbQsCDQv9C70LjRgtC60Lgg0LfQsNGP0LLQutC4IgorCisjOiBmZXRjaC1wYWNrLmM6MTIxNgorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBmaWx0ZXIiCittc2dzdHIgItCh0YrRgNCy0YrRgNGK0YIg0L/QvtC00LTRitGA0LbQsCDRhNC40LvRgtGA0LgiCisKKyM6IGZldGNoLXBhY2suYzoxMjM5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcXVlc3QgdG8gcmVtb3RlIgorbXNnc3RyICLQvdC10LLRitC30LzQvtC20L3QviDQv9C40YHQsNC90LUg0LrRitC8INC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogZmV0Y2gtcGFjay5jOjEyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBzZWN0aW9uIGhlYWRlciAnJXMnIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC/0YDQvtGH0LjRgtCw0L3QtSDQvdCwINC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCINC90LAg0YDQsNC30LTQtdC7IOKAniVz4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAnJXMnLCByZWNlaXZlZCAnJXMnIgorbXNnc3RyICLQvtGH0LDQutCy0LAg0YHQtSDigJ4lc+KAnCwg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvdC+IOKAniVz4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGFja25vd2xlZGdtZW50IGxpbmU6ICclcyciCittc2dzdHIgItC90LXQvtGH0LDQutCy0LDQvSDRgNC10LQg0LfQsCDQv9C+0YLQstGK0YDQttC00LXQvdC40LU6IOKAniVz4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGFja3M6ICVkIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC+0LHRgNCw0LHQvtGC0LrQsCDQvdCwINC/0L7RgtCy0YrRgNC20LTQtdC90LjRj9GC0LA6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTMxOAorbXNnaWQgImV4cGVjdGVkIHBhY2tmaWxlIHRvIGJlIHNlbnQgYWZ0ZXIgJ3JlYWR5JyIKK21zZ3N0ciAiIgorItC+0YfQsNC60LLQsNGI0LUg0YHQtSDQv9Cw0LrQtdGC0L3QuNGP0YIg0YTQsNC50Lsg0LTQsCDQsdGK0LTQtSDQuNC30L/RgNCw0YLQtdC9INGB0LvQtdC0INC+0YLQs9C+0LLQvtGAINC30LAg0LPQvtGC0L7QstC90L7RgdGCIChyZWFkeSkiCisKKyM6IGZldGNoLXBhY2suYzoxMzIwCittc2dpZCAiZXhwZWN0ZWQgbm8gb3RoZXIgc2VjdGlvbnMgdG8gYmUgc2VudCBhZnRlciBubyAncmVhZHknIgorbXNnc3RyICIiCisi0L7Rh9Cw0LrQstCw0YjQtSDRgdC1INGB0LvQtdC0INC70LjQv9GB0LAg0L3QsCDQvtGC0LPQvtCy0L7RgCDQt9CwINCz0L7RgtC+0LLQvdC+0YHRgiAocmVhZHkpINC00LAg0L3QtSDRgdC1INGB0LUg0L/RgNCw0YnQsNGCICIKKyLQtNGA0YPQs9C4INGA0LDQt9C00LXQu9C4IgorCisjOiBmZXRjaC1wYWNrLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHNoYWxsb3cgaW5mbzogJWQiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0L7QsdGA0LDQsdC+0YLQutCwINC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQtNGK0LvQsdC+0YfQuNC90LDRgtCwL9C/0LvQuNGC0LrQvtGB0YLRgtCwOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgd2FudGVkLXJlZiwgZ290ICclcyciCittc2dzdHIgItC+0YfQsNC60LLQsCDRgdC1INC40YHQutCw0L0g0YPQutCw0LfQsNGC0LXQuywg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvdC+OiDigJ4lc+KAnCIKKworIzogZmV0Y2gtcGFjay5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCB3YW50ZWQtcmVmOiAnJXMnIgorbXNnc3RyICLQvdC10L7Rh9Cw0LrQstCw0L0g0LjRgdC60LDQvSDRg9C60LDQt9Cw0YLQtdC7OiDigJ4lc+KAnCIKKworIzogZmV0Y2gtcGFjay5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyB3YW50ZWQgcmVmczogJWQiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0L7QsdGA0LDQsdC+0YLQutCw0YLQsCDQvdCwINC40YHQutCw0L3QuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4OiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE3NjIKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgiDQv9C+0LTRhdC+0LTRj9GJINCy0YDRitGFINC+0YIg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogZmV0Y2gtcGFjay5jOjE3ODUgYnVpbHRpbi9jbG9uZS5jOjY4OQorbXNnaWQgInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIgorbXNnc3RyICLQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INC90LUg0LjQt9C/0YDQsNGC0Lgg0LLRgdC40YfQutC4INC90LXQvtCx0YXQvtC00LjQvNC4INC+0LHQtdC60YLQuC4iCisKKyM6IGZldGNoLXBhY2suYzoxODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVtb3RlIHJlZiAlcyIKK21zZ3N0ciAi0YLQsNC60YrQsiDQvtGC0LTQsNC70LXRh9C10L0g0YPQutCw0LfQsNGC0LXQuyDQvdGP0LzQsDogJXMiCisKKyM6IGZldGNoLXBhY2suYzoxODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICLQodGK0YDQstGK0YDRitGCINC90LUg0L/QvtC30LLQvtC70Y/QstCwINC30LDRj9Cy0LrQsCDQt9CwINC90LXQvtCx0Y/QstC10L0g0L7QsdC10LrRgiDigJ4lc+KAnCIKKworIzogZ3BnLWludGVyZmFjZS5jOjQwOAorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQsNGC0LAg4oCeZ3Bn4oCcINC90LUg0L/QvtC00L/QuNGB0LAg0LTQsNC90L3QuNGC0LUuIgorCisjOiBncGctaW50ZXJmYWNlLmM6NDM0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0LLRgNC10LzQtdC90LXQvSDRhNCw0LnQuyIKKworIzogZ3BnLWludGVyZmFjZS5jOjQzNworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJyIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQsNGC0LAg0L3QtSDRg9GB0L/RjyDQtNCwINC30LDQv9C40YjQtSDRgdCw0LzQvtGB0YLQvtGP0YLQtdC70L3QuNGPINC/0L7QtNC/0LjRgSDQsiDigJ4lc+KAnCIKKworIzogZ3JhcGguYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmUgaW52YWxpZCBjb2xvciAnJS4qcycgaW4gbG9nLmdyYXBoQ29sb3JzIgorbXNnc3RyICLQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINC90LXQv9GA0LDQstC40LvQvdC40Y8g0YbQstGP0YIg4oCeJS4qc+KAnCDQsiDigJ5sb2cuZ3JhcGhDb2xvcnPigJwiCisKKyM6IGdyZXAuYzo2NjgKK21zZ2lkICIiCisiZ2l2ZW4gcGF0dGVybiBjb250YWlucyBOVUxMIGJ5dGUgKHZpYSAtZiA8ZmlsZT4pLiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkICIKKyJ3aXRoIC1QIHVuZGVyIFBDUkUgdjIiCittc2dzdHIgIiIKKyLQt9Cw0LTQsNC00LXQvdC40Y/RgiDRiNCw0LHQu9C+0L0g0YHRitC00YrRgNC20LAg0L3Rg9C70LXQsiDQt9C90LDQuiAo0LjQtNCy0LAg0L7RgiAtZiDigJ7QpNCQ0JnQm+KAnCkuICDQotC+0LLQsCDRgdC1INC/0L7QtNC00YrRgNC20LAgIgorItCyINC60L7QvNCx0LjQvdCw0YbQuNGPINGBIOKAni1Q4oCcINGB0LDQvNC+INC/0YDQuCDQv9C+0LvQt9Cy0LDQvdC10YLQviDQvdCwIOKAnlBDUkUgdjLigJwiCisKKyM6IGdyZXAuYzoyMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICLigJ4lc+KAnDog0YTQsNC50LvRitGCINGB0L7Rh9C10L0g0L7RgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogZ3JlcC5jOjIxNDUgc2V0dXAuYzoxNjYgYnVpbHRpbi9jbG9uZS5jOjQxMSBidWlsdGluL2RpZmYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/QvtC70YPRh9C10L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDRh9GA0LXQtyDigJ5zdGF04oCcINC30LAg4oCeJXPigJwiCisKKyM6IGdyZXAuYzoyMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQiCittc2dzdHIgIuKAniVz4oCcOiDQuNC30YfQuNGC0LDQvdC10YLQviDQstGK0YDQvdCwINC/0L4t0LzQsNC70LrQviDQsdCw0LnRgtC+0LLQtSDQvtGCINC+0YfQsNC60LLQsNC90L7RgtC+IgorCisjOiBoZWxwLmM6MjMKK21zZ2lkICJzdGFydCBhIHdvcmtpbmcgYXJlYSAoc2VlIGFsc286IGdpdCBoZWxwIHR1dG9yaWFsKSIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC90LAg0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviAo0L/QvtCz0LvQtdC00L3QtdGC0LU6IOKAnmdpdCBoZWxwIHR1dG9yaWFs4oCcKSIKKworIzogaGVscC5jOjI0Cittc2dpZCAid29yayBvbiB0aGUgY3VycmVudCBjaGFuZ2UgKHNlZSBhbHNvOiBnaXQgaGVscCBldmVyeWRheSkiCittc2dzdHIgItGA0LDQsdC+0YLQsCDQv9C+INGC0LXQutGD0YnQsNGC0LAg0L/RgNC+0LzRj9C90LAgKNC/0L7Qs9C70LXQtNC90LXRgtC1OiDigJ5naXQgaGVscCBldmVyeWRheeKAnCkiCisKKyM6IGhlbHAuYzoyNQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAi0L/RgNC10LPQu9C10LQg0L3QsCDQuNGB0YLQvtGA0LjRj9GC0LAg0Lgg0YHRitGB0YLQvtGP0L3QuNC10YLQviAo0L/QvtCz0LvQtdC00L3QtdGC0LU6IOKAnmdpdCBoZWxwIHJldmlzaW9uc+KAnCkiCisKKyM6IGhlbHAuYzoyNgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgItGD0LLQtdC70LjRh9Cw0LLQsNC90LUsINC+0YLQsdC10LvRj9C30LLQsNC90LUg0Lgg0L/RgNC+0LzRj9C90LAg0L3QsCDQvtCx0YnQsNGC0LAg0LjRgdGC0L7RgNC40Y8iCisKKyM6IGhlbHAuYzoyNworbXNnaWQgImNvbGxhYm9yYXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKK21zZ3N0ciAi0YHRitCy0LzQtdGB0YLQvdCwINGA0LDQsdC+0YLQsCAo0L/QvtCz0LvQtdC00L3QtdGC0LU6IOKAnmdpdCBoZWxwIHdvcmtmbG93c+KAnCkiCisKKyM6IGhlbHAuYzozMQorbXNnaWQgIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIgorbXNnc3RyICLQntGB0L3QvtCy0L3QuCDQutC+0LzQsNC90LTQuCDQvtGCINC/0L7RgtGA0LXQsdC40YLQtdC70YHQutC+INC90LjQstC+IgorCisjOiBoZWxwLmM6MzIKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgItCf0L7QvNC+0YnQvdC4INC60L7QvNCw0L3QtNC4IC8g0J/RgNC+0LzQtdC90Y/RidC4IgorCisjOiBoZWxwLmM6MzMKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIgorbXNnc3RyICLQn9C+0LzQvtGJ0L3QuCDQutC+0LzQsNC90LTQuCAvINCX0LDQv9C40YLQstCw0YnQuCIKKworIzogaGVscC5jOjM0Cittc2dpZCAiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiCittc2dzdHIgItCh0YrQstC80LXRgdGC0L3QsCDRgNCw0LHQvtGC0LAg0YEg0LTRgNGD0LPQuCDRhdC+0YDQsCIKKworIzogaGVscC5jOjM1Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICLQmtC+0LzQsNC90LTQuCDQvtGCINC90LjRgdC60L4g0L3QuNCy0L4gLyDQn9GA0L7QvNC10L3Rj9GJ0LgiCisKKyM6IGhlbHAuYzozNgorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgItCa0L7QvNCw0L3QtNC4INC+0YIg0L3QuNGB0LrQviDQvdC40LLQviAvINCX0LDQv9C40YLQstCw0YnQuCIKKworIzogaGVscC5jOjM3Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gU3luY2luZyBSZXBvc2l0b3JpZXMiCittc2dzdHIgItCa0L7QvNCw0L3QtNC4INC+0YIg0L3QuNGB0LrQviDQvdC40LLQviAvINCh0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNGPINC90LAg0YXRgNCw0L3QuNC70LjRidCwIgorCisjOiBoZWxwLmM6MzgKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcm5hbCBIZWxwZXJzIgorbXNnc3RyICLQmtC+0LzQsNC90LTQuCDQvtGCINC90LjRgdC60L4g0L3QuNCy0L4gLyDQlNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0LjQvdGB0YLRgNGD0LzQtdC90YLQuCIKKworIzogaGVscC5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciCittc2dzdHIgItC90LDQu9C40YfQvdC4INC60L7QvNCw0L3QtNC4INC90LAgZ2l0INC+0YIg4oCeJXPigJwiCisKKyM6IGhlbHAuYzozMDUKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgItC60L7QvNCw0L3QtNC4INC90LAgZ2l0INC+0YIg0LTRgNGD0LPQuCDQtNC40YDQtdC60YLQvtGA0LjQuCDQvtGCIOKAniRQQVRI4oCcIgorCisjOiBoZWxwLmM6MzE0Cittc2dpZCAiVGhlc2UgYXJlIGNvbW1vbiBHaXQgY29tbWFuZHMgdXNlZCBpbiB2YXJpb3VzIHNpdHVhdGlvbnM6IgorbXNnc3RyICLQotC+0LLQsCDRgdCwINC90LDQuS3Rh9C10YHRgtC+INC40LfQv9C+0LvQt9Cy0LDQvdC40YLQtSDQutC+0LzQsNC90LTQuCDQvdCwIEdpdDoiCisKKyM6IGhlbHAuYzozNjMgZ2l0LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgY29tbWFuZCBsaXN0aW5nIHR5cGUgJyVzJyIKK21zZ3N0ciAi0L3QtdC/0L7QtNC00YrRgNC20LDQvSDRgdC/0LjRgdGK0Log0L7RgiDQutC+0LzQsNC90LTQuCDigJ4lc+KAnCIKKworIzogaGVscC5jOjQwMworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6IgorbXNnc3RyICLQn9C+0L/Rg9C70Y/RgNC90LjRgtC1INCy0YrQstC10LTQtdC90LjRjyDQsiBHaXQg0YHQsDoiCisKKyM6IGhlbHAuYzo1MTIKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgdG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQiCittc2dzdHIgItCX0LAg0L/QvtCy0LXRh9C1INC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0JrQntCc0JDQndCU0JAg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCBoZWxwINCa0J7QnNCQ0J3QlNCQ4oCcIgorCisjOiBoZWxwLmM6NTE3Cittc2dpZCAiRXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgItCS0YrQvdGI0L3QuCDQutC+0LzQsNC90LTQuCIKKworIzogaGVscC5jOjUzMgorbXNnaWQgIkNvbW1hbmQgYWxpYXNlcyIKK21zZ3N0ciAi0J/RgdC10LLQtNC+0L3QuNC80Lgg0L3QsCDQutC+0LzQsNC90LTQuNGC0LUiCisKKyM6IGhlbHAuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgorbXNnc3RyICIiCisi0JjQt9Cz0LvQtdC20LTQsCwg0YfQtSDigJ4lc+KAnCDQtSDQutC+0LzQsNC90LTQsCDQvdCwIGdpdCwg0L3QviDRgtGPINC90LUg0LzQvtC20LUg0LTQsFxuIgorItCx0YrQtNC1INC40LfQv9GK0LvQvdC10L3QsC4gINCS0LXRgNC+0Y/RgtC90L4g0L/QsNC60LXRgtGK0YIg4oCeZ2l0LSVz4oCcINC1INC/0L7QstGA0LXQtNC10L0uIgorCisjOiBoZWxwLmM6NjU1Cittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgItCh0YLRgNCw0L3QvdC+LCDQuNC30LPQu9C10LbQtNCwLCDRh9C1INC90LAg0YHQuNGB0YLQtdC80LDRgtCwINCy0Lgg0L3Rj9C80LAg0L3QuNGC0L4g0LXQtNC90LAg0LrQvtC80LDQvdC00LAg0L3QsCBnaXQuIgorCisjOiBoZWxwLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgY29tbWFuZCBuYW1lZCAnJXMnLCB3aGljaCBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIiIKKyLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQn9GA0L7QsdCy0LDRhdGC0LUg0LTQsCDQuNC30L/RitC70L3QuNGC0LUg0LrQvtC80LDQvdC00LAg0L3QsCBHaXQg0L3QsCDQuNC80LUg4oCeJXPigJwsINCwINGC0LDQutCw0LLQsCAiCisi0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4iCisKKyM6IGhlbHAuYzo2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAiIgorItCY0LfQv9GK0LvQvdC10L3QuNC10YLQviDQsNCy0YLQvtC80LDRgtC40YfQvdC+INC/0YDQvtC00YrQu9C20LDQstCwLCDQutCw0YLQviDRgdC1INGB0YfQuNGC0LAsINGH0LUg0LjQvNCw0YLQtSDQv9GA0LXQtNCy0LjQtCDigJ4lc+KAnC4iCisKKyM6IGhlbHAuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyBpbiAlMC4xZiBzZWNvbmRzLCBhc3N1bWluZyB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAiIgorItCY0LfQv9GK0LvQvdC10L3QuNC10YLQviDQsNCy0YLQvtC80LDRgtC40YfQvdC+INGJ0LUg0L/RgNC+0LTRitC70LbQuCDRgdC70LXQtCAlMC4xZiDRgdC10LouLCDQutCw0YLQviDRgdC1INGB0YfQuNGC0LAsINGH0LUgIgorItC40LzQsNGC0LUg0L/RgNC10LTQstC40LQg4oCeJXPigJwuIgorCisjOiBoZWxwLmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdDogJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZC4gU2VlICdnaXQgLS1oZWxwJy4iCittc2dzdHIgImdpdDog4oCeJXPigJwg0L3QtSDQtSDQutC+0LzQsNC90LTQsCDQvdCwIGdpdC4gINCf0L7Qs9C70LXQtNC90LXRgtC1INC40LfRhdC+0LTQsCDQvtGCIOKAnmdpdCAtLWhlbHDigJwuIgorCisjOiBoZWxwLmM6Njk5CiBtc2dpZCAiIgogIlxuIgotIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgotIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmRzIGFyZSIKK21zZ3N0clswXSAiIgorIlxuIgorItCd0LDQuS3QsdC70LjQt9C60LDRgtCwINC60L7QvNCw0L3QtNCwINC1IgorbXNnc3RyWzFdICIiCisiXG4iCisi0J3QsNC5LdCx0LvQuNC30LrQuNGC0LUg0LrQvtC80LDQvdC00Lgg0YHQsCIKKworIzogaGVscC5jOjcxNAorbXNnaWQgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgdmVyc2lvbiBb0J7Qn9Cm0JjQr+KApl0iCisKKyM6IGhlbHAuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIC0gJXMiCittc2dzdHIgIiVzOiAlcyDigJQgJXMiCisKKyM6IGhlbHAuYzo3ODcKK21zZ2lkICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKKyJcbiIKKyLQmtC+0LzQsNC90LTQsCDRgSDQv9C+0LTQvtCx0L3QviDQuNC80LUg0LU6IgorbXNnc3RyWzFdICIiCisiXG4iCisi0JrQvtC80LDQvdC00Lgg0YEg0L/QvtC00L7QsdC90L4g0LjQvNC1INGB0LA6IgorCisjOiBpZGVudC5jOjM0OQorbXNnaWQgIiIKKyJcbiIKKyIqKiogUGxlYXNlIHRlbGwgbWUgd2hvIHlvdSBhcmUuXG4iCisiXG4iCisiUnVuXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIlxuIgorInRvIHNldCB5b3VyIGFjY291bnQncyBkZWZhdWx0IGlkZW50aXR5LlxuIgorIk9taXQgLS1nbG9iYWwgdG8gc2V0IHRoZSBpZGVudGl0eSBvbmx5IGluIHRoaXMgcmVwb3NpdG9yeS5cbiIKKyJcbiIKIG1zZ3N0ciAiIgogIlxuIgotIuKXjyDQndC10YHQu9C10LTQtdC90LjRj9GCINGE0LDQudC7INC1INC+0YLRgNGP0LfQsNC9INC00L7RgtGD0Log0L7RgiDQv9GA0L7Qs9GA0LDQvNCw0YLQsCDigJ4lc+KAnC5cbiIKLSLil48g0JjQt9C/0L7Qu9C30LLQsNC50YLQtSDQstGK0L3RiNC10L0g0YDQtdC00LDQutGC0L7RgCwg0LfQsCDQtNCwINCy0LjQtNC40YLQtSDRhtC10LvQuNGPINGE0LDQudC7LlxuIgorIuKXj+KXj+KXjyDQktGK0LLQtdC00LXRgtC1INGB0LDQvNC+0LvQuNGH0L3QvtGB0YIuXG4iCisiXG4iCisi0JjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCLQmNCc0JVAZXhhbXBsZS5jb21cIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcItCS0JDQqNCV0KLQniDQmNCc0JVcIlxuIgorIlxuIgorItC4INCy0YrQstC10LTQtdGC0LUg0LTQsNC90L3QuCDQt9CwINGB0LXQsdC1INGB0LguXG4iCisi0JDQutC+INC/0YDQvtC/0YPRgdC90LXRgtC1INC+0L/RhtC40Y/RgtCwIOKAni0tZ2xvYmFs4oCcLCDRgdCw0LzQvtC70LjRh9C90L7RgdGC0YLQsCDQtSDRgdCw0LzQviDQt9CwINGC0LXQutGD0YnQvtGC0L4gIgorItGF0YDQsNC90LjQu9C40YnQtS5cbiIKKyJcbiIKIAotIzogbGliL2RpZmYudGNsOjU4MAotbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICLQmNC30LHRgNCw0L3QvtGC0L4g0L/QsNGA0YfQtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9Cy0LDQtNC10L3QviDQvtGCINC40L3QtNC10LrRgdCwLiIKKyM6IGlkZW50LmM6Mzc5Cittc2dpZCAibm8gZW1haWwgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAi0LvQuNC/0YHQstCwINCw0LTRgNC10YEg0LfQsCDQtS3Qv9C+0YnQsCwg0LAg0LDQstGC0L7QvNCw0YLQuNGH0L3QvtGC0L4g0L7RgtCz0LDRgtCy0LDQvdC1INC1INC40LfQutC70Y7Rh9C10L3QviIKIAotIzogbGliL2RpZmYudGNsOjU4NwotbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiIKLW1zZ3N0ciAi0JjQt9Cx0YDQsNC90L7RgtC+INC/0LDRgNGH0LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC00L7QsdCw0LLQtdC90L4g0LrRitC8INC40L3QtNC10LrRgdCwLiIKLQotIzogbGliL2RpZmYudGNsOjY2NgotbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGxpbmUuIgotbXNnc3RyICLQmNC30LHRgNCw0L3QuNGP0YIg0YDQtdC0INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30LLQsNC00LXQvSDQvtGCINC40L3QtNC10LrRgdCwLiIKLQotIzogbGliL2RpZmYudGNsOjY3NAotbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKLW1zZ3N0ciAi0JjQt9Cx0YDQsNC90LjRj9GCINGA0LXQtCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LTQvtCx0LDQstC10L0g0LrRitC8INC40L3QtNC10LrRgdCwLiIKLQotIzogbGliL2VuY29kaW5nLnRjbDo0NDMKLW1zZ2lkICJEZWZhdWx0IgotbXNnc3RyICLQodGC0LDQvdC00LDRgNGC0L3QvtGC0L4iCi0KLSM6IGxpYi9lbmNvZGluZy50Y2w6NDQ4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU3lzdGVtICglcykiCi1tc2dzdHIgItCh0LjRgdGC0LXQvNC90L7RgtC+ICglcykiCi0KLSM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Ci1tc2dpZCAiT3RoZXIiCi1tc2dzdHIgItCU0YDRg9Cz0L4iCi0KLSM6IGxpYi9lcnJvci50Y2w6MjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlczogZXJyb3IiCi1tc2dzdHIgIiVzOiDQs9GA0LXRiNC60LAiCi0KLSM6IGxpYi9lcnJvci50Y2w6MzYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlczogd2FybmluZyIKLW1zZ3N0ciAiJXM6INC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LUiCi0KLSM6IGxpYi9lcnJvci50Y2w6ODAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyBob29rIGZhaWxlZDoiCi1tc2dzdHIgIiVzOiDQs9GA0LXRiNC60LAg0L7RgiDQutGD0LrQsNGC0LAiCi0KLSM6IGxpYi9lcnJvci50Y2w6OTYKLW1zZ2lkICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIgotbXNnc3RyICLQn9GA0LXQtNC4INC00LAg0LzQvtC20LXRgtC1INC00LAg0L/QvtC00LDQtNC10YLQtSwg0LrQvtGA0LjQs9C40YDQsNC50YLQtSDQs9C+0YDQvdC40YLQtSDQs9GA0LXRiNC60LguIgotCi0jOiBsaWIvZXJyb3IudGNsOjExNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IGVycm9yIgotbXNnc3RyICIlcyAoJXMpOiDQs9GA0LXRiNC60LAiCi0KLSM6IGxpYi9pbmRleC50Y2w6NgotbXNnaWQgIlVuYWJsZSB0byB1bmxvY2sgdGhlIGluZGV4LiIKLW1zZ3N0ciAi0JjQvdC00LXQutGB0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60LvRjtGH0LXQvS4iCi0KLSM6IGxpYi9pbmRleC50Y2w6MTcKLW1zZ2lkICJJbmRleCBFcnJvciIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINCyINC40L3QtNC10LrRgdCwIgotCi0jOiBsaWIvaW5kZXgudGNsOjE5Ci1tc2dpZCAiIgotIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgotInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCisjOiBpZGVudC5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgZW1haWwgYWRkcmVzcyAoZ290ICclcycpIgogbXNnc3RyICIiCi0i0J3QtdGD0YHQv9C10YjQvdC+INC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAg0L3QsCBHaXQuINCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0YnQtSDQt9Cw0L/QvtGH0L3QtSDQvdC+0LLQsCDQv9GA0L7QstC10YDQutCwICIKLSLQt9CwINGB0LjQvdGF0YDQvtC90LjQt9C40YDQsNC90LXRgtC+INC90LAgZ2l0LWd1aS4iCisi0LDQtNGA0LXRgdGK0YIg0LfQsCDQtS3Qv9C+0YnQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCz0LDRgtC90LDRgiAo0L3QsNC5LdC00L7QsdGA0L7RgtC+INC/0YDQtdC00L/QvtC70L7QttC10L3QuNC1INCx0LUgIgorIuKAniVz4oCcKSIKIAotIzogbGliL2luZGV4LnRjbDozMAotbXNnaWQgIkNvbnRpbnVlIgotbXNnc3RyICLQn9GA0L7QtNGK0LvQttCw0LLQsNC90LUiCisjOiBpZGVudC5jOjQwMQorbXNnaWQgIm5vIG5hbWUgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAi0LvQuNC/0YHQstCwINC40LzQtSwg0LAg0LDQstGC0L7QvNCw0YLQuNGH0L3QvtGC0L4g0L7RgtCz0LDRgtCy0LDQvdC1INC1INC40LfQutC70Y7Rh9C10L3QviIKIAotIzogbGliL2luZGV4LnRjbDozMwotbXNnaWQgIlVubG9jayBJbmRleCIKLW1zZ3N0ciAi0J7RgtC60LvRjtGH0LLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCIKKyM6IGlkZW50LmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBuYW1lIChnb3QgJyVzJykiCittc2dzdHIgItC40LzQtdGC0L4g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQs9Cw0YLQvdCw0YLQviAo0L3QsNC5LdC00L7QsdGA0L7RgtC+INC/0YDQtdC00L/QvtC70L7QttC10L3QuNC1INCx0LUg4oCeJXPigJwpIgogCi0jOiBsaWIvaW5kZXgudGNsOjI5NAotbXNnaWQgIlVuc3RhZ2luZyBzZWxlY3RlZCBmaWxlcyBmcm9tIGNvbW1pdCIKLW1zZ3N0ciAi0JjQt9Cy0LDQttC00LDQvdC1INC90LAg0LjQt9Cx0YDQsNC90LjRgtC1INGE0LDQudC70L7QstC1INC+0YIg0L/QvtC00LDQstCw0L3QtdGC0L4iCisjOiBpZGVudC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBpZGVudCBuYW1lIChmb3IgPCVzPikgbm90IGFsbG93ZWQiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9C30LLQsCDQv9GA0LDQt9C90L4g0LjQvNC1INC60LDRgtC+INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAICjQt9CwIDwlcz4pIgogCi0jOiBsaWIvaW5kZXgudGNsOjI5OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKLW1zZ3N0ciAi0JjQt9Cy0LDQttC00LDQvdC1INC90LAg4oCeJXPigJwg0L7RgiDQv9C+0LTQsNCy0LDQvdC10YLQviIKKyM6IGlkZW50LmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIgorbXNnc3RyICLQuNC80LXRgtC+INGB0YrQtNGK0YDQttCwINGB0LDQvNC+INC90LXQv9C+0LfQstC+0LvQtdC90Lgg0LfQvdCw0YbQuDog4oCeJXPigJwiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzM3Ci1tc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKLW1zZ3N0ciAi0JPQvtGC0L7QstC90L7RgdGCINC30LAg0L/QvtC00LDQstCw0L3QtS4iCisjOiBpZGVudC5jOjQzNiBidWlsdGluL2NvbW1pdC5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YTQvtGA0LzQsNGCINC90LAg0LTQsNGC0LA6ICVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjM0NgotbXNnaWQgIkFkZGluZyBzZWxlY3RlZCBmaWxlcyIKLW1zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC40LfQsdGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKyM6IGxpc3Qtb2JqZWN0cy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJlbnRyeSAnJXMnIGluIHRyZWUgJXMgaGFzIHRyZWUgbW9kZSwgYnV0IGlzIG5vdCBhIHRyZWUiCittc2dzdHIgItC+0LHQtdC60YIg4oCeJXPigJwg0LIg0LTRitGA0LLQvtGC0L4g4oCeJXPigJwg0LUg0L7RgtCx0LXQu9GP0LfQsNC9INC60LDRgtC+INC00YrRgNCy0L4sINC90L4g0L3QtSDQtSIKIAotIzogbGliL2luZGV4LnRjbDozNTAKLSMsIHRjbC1mb3JtYXQKKyM6IGxpc3Qtb2JqZWN0cy5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJlbnRyeSAnJXMnIGluIHRyZWUgJXMgaGFzIGJsb2IgbW9kZSwgYnV0IGlzIG5vdCBhIGJsb2IiCittc2dzdHIgItC+0LHQtdC60YIg4oCeJXPigJwg0LIg0LTRitGA0LLQvtGC0L4g4oCeJXPigJwg0LUg0L7RgtCx0LXQu9GP0LfQsNC9INC60LDRgtC+IEJMT0IsINC90L4g0L3QtSDQtSIKKworIzogbGlzdC1vYmplY3RzLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIHJvb3QgdHJlZSBmb3IgY29tbWl0ICVzIgorbXNnc3RyICLQutC+0YDQtdC90L7QstC+0YLQviDQtNGK0YDQstC+INC30LAg0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0YDQtdC00LgiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBzcGFyc2UgYmxvYiBpbiAnJXMnIgorbXNnc3RyICLQvdGP0LzQsCDQtNC+0YHRgtGK0L8g0LTQviDRh9Cw0YHRgtC40YfQvdC+INC40LfRgtC10LPQu9C10L3QuNGPINC+0LHQtdC60YItQkxPQiDQsiDigJ4lc+KAnCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugc3BhcnNlIGZpbHRlciBkYXRhIGluICVzIgorbXNnc3RyICIiCisi0LTQsNC90L3QuNGC0LUg0L7RgiDRhNC40LvRgtGK0YDQsCDQt9CwINGH0LDRgdGC0LjRh9C90Lgg0LjQt9GC0LXQs9C70Y/QvdC40Y8g0LIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNCw0YIg0LDQvdCw0LvQuNC30LjRgNCw0L3QuCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NTgKK21zZ2lkICJleHBlY3RlZCAndHJlZTo8ZGVwdGg+JyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCwINGB0LUg4oCedHJlZTrQlNCq0JvQkdCe0KfQmNCd0JDigJwiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjczCittc2dpZCAic3BhcnNlOnBhdGggZmlsdGVycyBzdXBwb3J0IGhhcyBiZWVuIGRyb3BwZWQiCittc2dzdHIgItC/0L7QtNC00YDRitC20LrQsNGC0LAg0L3QsCDRhNC40LvRgtGA0Lgg0YHRitGBIOKAnnNwYXJzZTpwYXRo4oCcINC1INC/0YDQtdC80LDRhdC90LDRgtCwIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbHRlci1zcGVjICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGE0LjQu9GC0YrRgDog4oCeJXPigJwiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtdXN0IGVzY2FwZSBjaGFyIGluIHN1Yi1maWx0ZXItc3BlYzogJyVjJyIKK21zZ3N0ciAi0LfQvdCw0Log0LfQsCDQtdC60YDQsNC90LjRgNCw0L3QtSDQsiDQv9C+0LTRhNC40LvRgtGK0YA6IOKAniVj4oCcIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxNDQKK21zZ2lkICJleHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgY29tYmluZToiCittc2dzdHIgItC00L7QsdCw0LLQtdGC0LUg0L3QtdGJ0L4g0YHQu9C10LQg0LrQvtC80LHQuNC90LjRgNCw0L3QtdGC0L46IgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoyMjYKK21zZ2lkICJtdWx0aXBsZSBmaWx0ZXItc3BlY3MgY2Fubm90IGJlIGNvbWJpbmVkIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0LrQvtC80LHQuNC90LjRgNCw0YLQtSDQvNC90L7QttC10YHRgtCy0L4g0YTQuNC70YLRgNC4IgorCisjOiBsb2NrZmlsZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuIgorIlxuIgorIkFub3RoZXIgZ2l0IHByb2Nlc3Mgc2VlbXMgdG8gYmUgcnVubmluZyBpbiB0aGlzIHJlcG9zaXRvcnksIGUuZy5cbiIKKyJhbiBlZGl0b3Igb3BlbmVkIGJ5ICdnaXQgY29tbWl0Jy4gUGxlYXNlIG1ha2Ugc3VyZSBhbGwgcHJvY2Vzc2VzXG4iCisiYXJlIHRlcm1pbmF0ZWQgdGhlbiB0cnkgYWdhaW4uIElmIGl0IHN0aWxsIGZhaWxzLCBhIGdpdCBwcm9jZXNzXG4iCisibWF5IGhhdmUgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllcjpcbiIKKyJyZW1vdmUgdGhlIGZpbGUgbWFudWFsbHkgdG8gY29udGludWUuIgorbXNnc3RyICIiCisi0KTQsNC50LvRitGCLdC60LvRjtGH0LDQu9C60LAg4oCeJXMubG9ja+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvTogJXNcbiIKKyJcbiIKKyLQmNC30LPQu9C10LbQtNCwLCDRh9C1INC4INC00YDRg9CzINC/0YDQvtGG0LXRgSDQvdCwIGdpdCDQtSDQv9GD0YHQvdCw0YIg0LIg0YLQvtCy0LAg0YXRgNCw0L3QuNC70LjRidC1LCDQvdCw0L/RgC5cbiIKKyLRgNC10LTQsNC60YLQvtGALCDRgdGC0LDRgNGC0LjRgNCw0L0g0YEg4oCeZ2l0IGNvbW1pdOKAnC4gINCj0LLQtdGA0LXRgtC1INGB0LUsINGH0LUg0LLRgdC40YfQutC4INC/0L7QtNC+0LHQvdC4XG4iCisi0L/RgNC+0YbQtdGB0Lgg0YHQsCDRgdC/0YDQtdC90Lgg0Lgg0L7Qv9C40YLQsNC50YLQtSDQvtGC0L3QvtCy0L4uICDQkNC60L4g0YLQvtCy0LAg0L3QtSDQv9C+0LzQvtCz0L3QtSwg0LLQtdGA0L7Rj9GC0L3QsNGC0LBcbiIKKyLQv9GA0LjRh9C40L3QsCDQtSwg0YfQtSDQvdGP0LrQvtC5INC/0YDQvtGG0LXRgSDQvdCwIGdpdCDQsiDRgtC+0LLQsCDRhdGA0LDQvdC40LvQuNGJ0LUg0LUg0LfQsNCx0LjQuy4gINCX0LAg0LTQsFxuIgorItC/0YDQvtC00YrQu9C20LjRgtC1INGA0LDQsdC+0YLQsCwg0YnQtSDRgtGA0Y/QsdCy0LAg0YDRitGH0L3QviDQtNCwINC40LfRgtGA0LjQtdGC0LUg0YTQsNC50LvQsDoiCisKKyM6IGxvY2tmaWxlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIKK21zZ3N0ciAi0KTQsNC50LvRitGCLdC60LvRjtGH0LDQu9C60LAg4oCeJXMubG9ja+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvTogJXMiCisKKyM6IG1lcmdlLmM6NDEKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgY2FjaGUiCittc2dzdHIgItC60LXRiNGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IG1lcmdlLmM6MTA3IHJlcmVyZS5jOjcyMCBidWlsdGluL2FtLmM6MTg3OSBidWlsdGluL2FtLmM6MTkxMworIzogYnVpbHRpbi9jaGVja291dC5jOjU0MSBidWlsdGluL2NoZWNrb3V0LmM6ODAwIGJ1aWx0aW4vY2xvbmUuYzo4MTAKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNjUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQt9Cw0L/QuNGB0LLQsNC90LUg0L3QsCDQvdC+0LLQuNGPINC40L3QtNC10LrRgSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzU2Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIijQu9C+0YjQviDQv9C+0LTQsNCy0LDQvdC1KVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICIiCisi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeYWRkX2NhY2hlaW5mb+KAnCDQt9CwINC/0YrRgtGPIOKAniVz4oCcLiAg0KHQu9C40LLQsNC90LXRgtC+INC1ICIKKyLQv9GA0LXRg9GB0YLQsNC90L7QstC10L3Qvi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRfY2FjaGVpbmZvIGZhaWxlZCB0byByZWZyZXNoIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiIgorItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAnmFkZF9jYWNoZWluZm/igJwg0LfQsCDQvtCx0L3QvtCy0Y/QstCw0L3QtdGC0L4g0L3QsCDQv9GK0YLRjyDigJ4lc+KAnC4gICIKKyLQodC70LjQstCw0L3QtdGC0L4g0LUg0L/RgNC10YPRgdGC0LDQvdC+0LLQtdC90L4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDRgdGK0LfQtNCw0LLQsNC90LXRgtC+INC90LAg0L/RitGC0Y8g4oCeJXPigJwlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIHRvIG1ha2Ugcm9vbSBmb3Igc3ViZGlyZWN0b3J5XG4iCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAniVz4oCcLCDQt9CwINC00LAg0YHQtSDQvtGB0LLQvtCx0L7QtNC4INC80Y/RgdGC0L4g0LfQsCDQv9C+0LTQtNC40YDQtdC60YLQvtGA0LjRj1xuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4OTkgbWVyZ2UtcmVjdXJzaXZlLmM6OTE4Cittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAiOiDQstGK0LfQvNC+0LbQvdC+INC1INC00LAg0LjQvNCwINC60L7QvdGE0LvQuNC60YIg0LTQuNGA0LXQutGC0L7RgNC40Y8v0YTQsNC50LsuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICIiCisi0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LTQtdC50YHRgtCy0LjQtdGC0L4sINC30LAg0LTQsCDQvdC1INGB0LUg0LjQt9GC0YDQuNC1INC90LXRgdC70LXQtNC10L3QuNGP0YIg0YTQsNC50Lsg4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk0OSBidWlsdGluL2NhdC1maWxlLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcICglcykg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk1NAorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgiDigJ4lc+KAnCAoJXMpINGB0LUg0L7Rh9Cw0LrQstCw0YjQtSDQtNCwINC1IEJMT0IsINCwINC90LUg0LUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCy0L7RgNC4OiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyc6ICVzIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YHRitC30LTQsNCy0LDQvdC1INC90LAg0YHQuNC80LLQvtC70L3QsNGC0LAg0LLRgNGK0LfQutCwIOKAniVz4oCcOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgIiIKKyLQvdC1INC1INGP0YHQvdC+INC60LDQutCy0L4g0LTQsCDRgdC1INC/0YDQsNCy0Lgg0YEg0L7QsdC10LrRgtCwIOKAniUyJHPigJwgKCUzJHMpINGBINC/0YDQsNCy0LAg0LfQsCDQtNC+0YHRgtGK0L8g4oCeJTEkMDZv4oCcIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBjaGVja2VkIG91dCkiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgdC70LjQstCw0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCAo0L3QtSDQtSDQuNC30YLQtdCz0LvQtdC9KSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIG5vdCBwcmVzZW50KSIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcICjQvdGP0LzQsCDQv9C+0LTQsNCy0LDQvdC40Y8pIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgZG9uJ3QgZm9sbG93IG1lcmdlLWJhc2UpIgorbXNnc3RyICIiCisi0J/QvtC00LzQvtC00YPQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0LvRj9GCICjQsdCw0LfQsNGC0LAg0LfQsCDRgdC70LjQstCw0L3QtSDQvdC1INC/0YDQtdC00YjQtdGB0YLQstCwICIKKyLQv9C+0LTQsNCy0LDQvdC40Y/RgtCwKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxMyBtZXJnZS1yZWN1cnNpdmUuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMgdG8gdGhlIGZvbGxvd2luZyBjb21taXQ6IgorbXNnc3RyICLQn9GA0LXQstGK0YDRgtCw0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCDQtNC+INGB0LvQtdC00L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtToiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMTYgbWVyZ2UtcmVjdXJzaXZlLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIgorbXNnc3RyICLQn9GA0LXQstGK0YDRgtCw0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtZXJnZSBmb2xsb3dpbmcgY29tbWl0cyBub3QgZm91bmQpIgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcICjQu9C40L/RgdCy0LAg0YHQu9C40LLQsNC90LXRgtC+LCDQutC+0LXRgtC+INGB0LUg0L/RgNC10LTRiNC10YHRgtCy0LAgIgorItC+0YIg0L/QvtC00LDQstCw0L3QuNGP0YLQsCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGZhc3QtZm9yd2FyZCkiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgdC70LjQstCw0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCAo0L3QtSDQtSDQv9GA0LXQstGK0YDRgtCw0L3QtSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTYKK21zZ2lkICJGb3VuZCBhIHBvc3NpYmxlIG1lcmdlIHJlc29sdXRpb24gZm9yIHRoZSBzdWJtb2R1bGU6XG4iCittc2dzdHIgIiIKKyLQntGC0LrRgNC40YLQviDQtSDRgdC70LjQstCw0L3QtSwg0LrQvtC10YLQviDQvNC+0LbQtSDQtNCwINGA0LXRiNCw0LLQsCDQv9GA0L7QsdC70LXQvNCwINGB0YrRgSDRgdC70LjQstCw0L3QtdGC0L4g0L3QsCAiCisi0L/QvtC00LzQvtC00YPQu9CwOlxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB0aGlzIGlzIGNvcnJlY3Qgc2ltcGx5IGFkZCBpdCB0byB0aGUgaW5kZXggZm9yIGV4YW1wbGVcbiIKKyJieSB1c2luZzpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorIndoaWNoIHdpbGwgYWNjZXB0IHRoaXMgc3VnZ2VzdGlvbi5cbiIKK21zZ3N0ciAiIgorItCQ0LrQviDRgtC+0LLQsCDQtSDRgtCw0LrQsCwg0LTQvtCx0LDQstC10YLQtSDQs9C+INC60YrQvCDQuNC90LTQtdC60YHQsCDRgSDQutC+0LzQsNC90LTQsCDQutCw0YLQviDRgdC70LXQtNC90LDRgtCwOlxuIgorIlxuIgorIiAgICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcbiIKKyJcbiIKKyLQotC+0LLQsCDQv9GA0LjQtdC80LAg0L/RgNC10LTQu9C+0LbQtdC90L7RgtC+LlxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG11bHRpcGxlIG1lcmdlcyBmb3VuZCkiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgdC70LjQstCw0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCAo0L7RgtC60YDQuNGC0Lgg0YHQsCDQvNC90L7QttC10YHRgtCy0L4g0YHQu9C40LLQsNC90LjRjykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNDEKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INCy0YrRgtGA0LXRiNC90L4g0YHQu9C40LLQsNC90LUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTQvtCx0LDQstC4INCyINCx0LDQt9Cw0YLQsCDRgSDQtNCw0L3QvdC4IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAi0JDQstGC0L7QvNCw0YLQuNGH0L3QviDRgdC70LjQstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyB3cml0aW5nIHRvICVzIGluc3RlYWQuIgorbXNnc3RyICLQk9GA0LXRiNC60LA6INC30LAg0LTQsCDQvdC1INGB0LUg0LjQt9GC0YDQuNC1INC90LXRgdC70LXQtNC10L3QuNGP0YIg0YTQsNC50Lsg4oCeJXPigJwsINGB0LUg0LfQsNC/0LjRgdCy0LAg0LIg4oCeJXPigJwuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZS4iCittc2dzdHIgIiIKKyLQmtCe0J3QpNCb0JjQmtCiICglcy/QuNC30YLRgNC40LLQsNC90LUpOiDigJ4lc+KAnCDQtSDQuNC30YLRgNC40YIg0LIgJXMsINCwIOKAniVz4oCcINCyICVzLiAg0JLQtdGA0YHQuNGPICVzINC90LAg4oCeJXPigJwgIgorItC1INC+0YHRgtCw0LLQtdC90LAg0LIg0LTRitGA0LLQvtGC0L4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZS4iCittc2dzdHIgIiIKKyLQmtCe0J3QpNCb0JjQmtCiICglcy/QuNC30YLRgNC40LLQsNC90LUpOiDigJ4lc+KAnCDQtSDQuNC30YLRgNC40YIg0LIgJXMsINCwIOKAniVz4oCcINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0g0L3QsCDigJ4lc+KAnCDQsiAiCisiJXMuICDQktC10YDRgdC40Y8gJXMg0L3QsCDigJ4lc+KAnCDQtSDQvtGB0YLQsNCy0LXQvdCwINCyINC00YrRgNCy0L7RgtC+LiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisi0JrQntCd0KTQm9CY0JrQoiAoJXMv0LjQt9GC0YDQuNCy0LDQvdC1KTog4oCeJXPigJwg0LUg0LjQt9GC0YDQuNGCINCyICVzLCDQsCDigJ4lc+KAnCDQsiAlcy4gINCS0LXRgNGB0LjRjyAlcyDQvdCwIOKAniVz4oCcICIKKyLQtSDQvtGB0YLQsNCy0LXQvdCwINCyINC00YrRgNCy0L7RgtC+OiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorItCa0J7QndCk0JvQmNCa0KIgKCVzL9C40LfRgtGA0LjQstCw0L3QtSk6IOKAniVz4oCcINC1INC40LfRgtGA0LjRgiDQsiAlcywg0LAg4oCeJXPigJwg0LUg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvSDQvdCwIOKAniVz4oCcINCyICIKKyIlcy4gINCS0LXRgNGB0LjRjyAlcyDQvdCwIOKAniVz4oCcINC1INC+0YHRgtCw0LLQtdC90LAg0LIg0LTRitGA0LLQvtGC0L46ICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUyNgorbXNnaWQgInJlbmFtZSIKK21zZ3N0ciAi0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI2Cittc2dpZCAicmVuYW1lZCIKK21zZ3N0ciAi0L/RgNC10LjQvNC10L3Rg9Cy0LDQvSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU3NyBtZXJnZS1yZWN1cnNpdmUuYzoyNDcyIG1lcmdlLXJlY3Vyc2l2ZS5jOjMxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0ICVzIgorbXNnc3RyICLQn9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUg0L3QsCDQtNC10LnRgdGC0LLQuNC10YLQviwg0LfQsCDQtNCwINC90LUg0YHQtSDQuNC30LPRg9Cx0Lgg0L/RgNC+0LzQtdC90LXQvdC40Y/RgiDigJ4lc+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU4NworIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzLCBldmVuIHRob3VnaCBpdCdzIGluIHRoZSB3YXkuIgorbXNnc3RyICIiCisi0J7RgtC60LDQtyDQtNCwINGB0LUg0LfQsNCz0YPQsdC4INC90LXRgdC70LXQtNC10L3QuNGP0YIg0YTQsNC50Lsg4oCeJXPigJwsINC30LDRidC+0YLQviDQtSDQvdCwINC80Y/RgdGC0L4sINC60YrQtNC10YLQviDQv9GA0LXRh9C4LiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL2FkZCk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuICBBZGRlZCAlcyBpbiAlcyIKK21zZ3N0ciAiIgorItCa0J7QndCk0JvQmNCa0KIgKNC/0YDQtdC40LzQtdC90YPQstCw0L3QtS/QtNC+0LHQsNCy0Y/QvdC1KTog4oCeJXPigJwg0LUg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvSDQvdCwIOKAniVz4oCcINCyINC60LvQvtC9IOKAniVz4oCcLCDQsCAiCisi4oCeJXPigJwg0LUg0LTQvtCx0LDQstC10L0g0LIg4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIuKAniVz4oCcINC1INC00LjRgNC10LrRgtC+0YDQuNGPINCyIOKAniVz4oCcLCDQt9Cw0YLQvtCy0LAg0YHQtSDQtNC+0LHQsNCy0Y8g0LrQsNGC0L4g4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiIKKyLQn9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUg0L3QsCDQtNC10LnRgdGC0LLQuNC10YLQviwg0LfQsCDQtNCwINC90LUg0YHQtSDQuNC30LPRg9Cx0Lgg0L3QtdGB0LvQtdC00LXQvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnC4gICIKKyLQktC80LXRgdGC0L4g0L3QtdCz0L4g0YHQtSDQtNC+0LHQsNCy0Y8g4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lIFwiJXMiCisiXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAiIgorItCa0J7QndCk0JvQmNCa0KIgKNC/0YDQtdC40LzQtdC90YPQstCw0L3QtS/Qv9GA0LXQuNC80LXQvdGD0LLQsNC90LUpOiDigJ4lc+KAnCDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9INC90LAg4oCeJXPigJwg0LIg0LrQu9C+0L0gIgorIuKAniVz4oCcLCDQsCDigJ4lc+KAnCDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9INC90LAg4oCeJXPigJwg0LIg4oCeJXPigJwvJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzEzCittc2dpZCAiIChsZWZ0IHVucmVzb2x2ZWQpIgorbXNnc3RyICIgKNC90LXQutC+0YDQuNCz0LjRgNCw0L0g0LrQvtC90YTQu9C40LrRgikiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgJXMtPiVzIGluICVzLiBSZW5hbWUgJXMtPiVzIGluICVzIgorbXNnc3RyICIiCisi0JrQntCd0KTQm9CY0JrQoiAo0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1L9C/0YDQtdC40LzQtdC90YPQstCw0L3QtSk6IOKAniVz4oCcINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0g0L3QsCDigJ4lc+KAnCDQsiDQutC70L7QvSAiCisi4oCeJXPigJwsINCwIOKAniVz4oCcINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0g0L3QsCDigJ4lc+KAnCDQsiDigJ4lc+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGRpcmVjdG9yeSByZW5hbWUgc3BsaXQpOiBVbmNsZWFyIHdoZXJlIHRvIHBsYWNlICVzIGJlY2F1c2UgIgorImRpcmVjdG9yeSAlcyB3YXMgcmVuYW1lZCB0byBtdWx0aXBsZSBvdGhlciBkaXJlY3Rvcmllcywgd2l0aCBubyBkZXN0aW5hdGlvbiAiCisiZ2V0dGluZyBhIG1ham9yaXR5IG9mIHRoZSBmaWxlcy4iCittc2dzdHIgIiIKKyLQmtCe0J3QpNCb0JjQmtCiICjRgNCw0LfQtNCy0L7Rj9Cy0LDQvdC1INC/0YDQuCDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjyk6INCd0LUg0LUg0Y/RgdC90L4g0LrRitC00LUg0LTQsCDRgdC1ICIKKyLQv9C+0YHRgtCw0LLQuCDigJ4lc+KAnCwg0LfQsNGJ0L7RgtC+INC90Y/QutC+0LvQutC+INC90L7QstC4INC00LjRgNC10LrRgtC+0YDQuNC4INC/0L7QtNC10LvRj9GCINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwICIKKyLQtNC40YDQtdC60YLQvtGA0LjRjyDigJ4lc+KAnCwg0LrQsNGC0L4g0L3QuNC60L7RjyDQvdC1INGB0YrQtNGK0YDQttCwINC80L3QvtC30LjQvdGB0YLQstC+INC+0YIg0YTQsNC50LvQvtCy0LXRgtC1INGdLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBFeGlzdGluZyBmaWxlL2RpciBhdCAlcyBpbiB0aGUgd2F5IG9mICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lKHMpIHB1dHRpbmcgdGhlIGZvbGxvd2luZyBwYXRoKHMpIHRoZXJlOiAlcy4iCittc2dzdHIgIiIKKyLQmtCe0J3QpNCb0JjQmtCiICjQutC+0YHQstC10L3QviDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjyk6INGB0LvQtdC00L3QuNGP0YIg0YTQsNC50Lsg0LjQu9C4INC00LjRgNC10LrRgtC+0YDQuNGPICIKKyLigJ4lc+KAnCDQvdC1INC/0L7Qt9Cy0L7Qu9GP0LLQsNGCINC60L7RgdCy0LXQvdC+0YLQviDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDRgdC70LXQtNC90LjRjyDQv9GK0YIv0LjRidCwOiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogQ2Fubm90IG1hcCBtb3JlIHRoYW4gb25lIHBhdGggdG8gJXM7ICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lcyB0cmllZCB0byBwdXQgdGhlc2UgcGF0aHMgdGhlcmU6ICVzIgorbXNnc3RyICIiCisi0JrQntCd0KTQm9CY0JrQoiAo0LrQvtGB0LLQtdC90L4g0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8pOiDQv9C+0LLQtdGH0LUg0L7RgiDQtdC00LjQvSDQv9GK0YIgIgorItGB0YrQvtGC0LLQtdGC0YHRgtCy0LAg0L3QsCDigJ4lc+KAnC4gINCa0L7RgdCy0LXQvdC+INC/0YDQtdC40LzQtdC90YPQstCw0L3QtSDQvdCwINC00LjRgNC10LrRgtC+0YDQuNGPINCy0L7QtNC4INC00L4g0L/QvtGB0YLQsNCy0Y/QvdC10YLQviAiCisi0L3QsCDRgtC10LfQuCDQv9GK0YLQuNGJ0LAg0YLQsNC8OiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIGRpcmVjdG9yeSAlcy0+JXMgaW4gJXMuIFJlbmFtZSBkaXJlY3RvcnkgJXMtIgorIj4lcyBpbiAlcyIKK21zZ3N0ciAiIgorItCa0J7QndCk0JvQmNCa0KIgKNC/0YDQtdC40LzQtdC90YPQstCw0L3QtS/Qv9GA0LXQuNC80LXQvdGD0LLQsNC90LUpOiDigJ4lc+KAnCDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9INC90LAg4oCeJXPigJwg0LIg0LrQu9C+0L0gIgorIuKAniVz4oCcLCDQsCDigJ4lc+KAnCDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9INC90LAg4oCeJXPigJwg0LIg4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nICVzIC0+ICVzIHJlbmFtZSB0byAlcywgYmVjYXVzZSAlcyBpdHNlbGYgd2FzICIKKyJyZW5hbWVkLiIKK21zZ3N0ciAiIgorItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC10YLQviDQvdCwIOKAniVz4oCcINC90LAg4oCeJXPigJwg0LIg4oCeJXPigJwsINC30LDRidC+0YLQviAiCisi4oCeJXPigJwg0YHRitGJ0L4g0LUg0YEg0L/RgNC+0LzQtdC90LXQvdC+INC40LzQtS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0L7Rh9C10YLQtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mjk2NAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0L3QtSDQtSBCTE9CIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDI4Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICLQv9GA0L7QvNGP0L3QsCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyOAorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICLQv9GA0L7QvNC10L3QtdC9IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDQwCittc2dpZCAiY29udGVudCIKK21zZ3N0ciAi0YHRitC00YrRgNC20LDQvdC40LUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwNDQKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1L9C00L7QsdCw0LLRj9C90LUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIgorbXNnc3RyICLQn9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwIOKAniVz4oCcICjRgdC70LXRgtC40Y/RgiDRgNC10LfRg9C70YLQsNGCINC1INC40LTQtdC90YLQuNGH0LXQvSDRgdGK0YEg0YHQtdCz0LDRiNC90LjRjykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODkgZ2l0LXN1Ym1vZHVsZS5zaDoxMDAzCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICLQn9Ce0JTQnNCe0JTQo9CbIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICLQmtCe0J3QpNCb0JjQmtCiICglcyk6INCa0L7QvdGE0LvQuNC60YIg0L/RgNC4INGB0LvQuNCy0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0LrQsNGC0L4g4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhdGggdXBkYXRlZDogJXMgYWRkZWQgaW4gJXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gJXM7ICIKKyJtb3ZpbmcgaXQgdG8gJXMuIgorbXNnc3RyICIiCisi0J7QsdC90L7QstC10L0g0L/RitGCOiDigJ4lc+KAnCDQtSDQtNC+0LHQsNCy0LXQvSDQsiDigJ4lc+KAnCDQsiDQtNC40YDQtdC60YLQvtGA0LjRjywg0LrQvtGP0YLQviDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LAg0LIgIgorIuKAniVz4oCcLiAg0J7QsdC10LrRgtGK0YIg0YHQtSDQvNC10YHRgtC4INCyIOKAniVz4oCcLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCAiCisiaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisi0JrQntCd0KTQm9CY0JrQoiAo0LzQtdGB0YLQsCDQvdCwINGE0LDQudC70L7QstC1KTog4oCeJXPigJwg0LUg0LTQvtCx0LDQstC10L0g0LIg4oCeJXPigJwg0LIg0LTQuNGA0LXQutGC0L7RgNC40Y8sINC60L7Rj9GC0L4g0LUgIgorItC/0YDQtdC40LzQtdC90YPQstCw0L3QsCDQsiDigJ4lc+KAnC4gINCf0YDQtdC00LvQvtC20LXQvdC40LXRgtC+INC1INC00LAg0L/RgNC10LzQtdGB0YLQuNGC0LUg0L7QsdC10LrRgtCwINCyIOKAniVz4oCcLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIxMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAiCisiJXM7IG1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKyLQntCx0L3QvtCy0LXQvSDQv9GK0YI6IOKAniVz4oCcINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0g0L3QsCDigJ4lc+KAnCDQsiDigJ4lc+KAnCDQsiDQtNC40YDQtdC60YLQvtGA0LjRjywg0LrQvtGP0YLQviDQtSAiCisi0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdCwINCyIOKAniVz4oCcLiAg0J7QsdC10LrRgtGK0YIg0YHQtSDQvNC10YHRgtC4INCyIOKAniVz4oCcLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCAiCisid2FzIHJlbmFtZWQgaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisi0JrQntCd0KTQm9CY0JrQoiAo0LzQtdGB0YLQsCDQvdCwINGE0LDQudC70L7QstC1KTog4oCeJXPigJwg0LUg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvSDQvdCwIOKAniVz4oCcINCyIOKAniVz4oCcINCyINC00LjRgNC10LrRgtC+0YDQuNGPLCAiCisi0LrQvtGP0YLQviDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LAg0LIg4oCeJXPigJwuICDQn9GA0LXQtNC70L7QttC10L3QuNC10YLQviDQtSDQtNCwINC/0YDQtdC80LXRgdGC0LjRgtC1INC+0LHQtdC60YLQsCDQsiDigJ4lc+KAnC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzUwCittc2dpZCAiZmlsZS9kaXJlY3RvcnkiCittc2dzdHIgItGE0LDQudC7L9C00LjRgNC10LrRgtC+0YDQuNGPIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzU1Cittc2dpZCAiZGlyZWN0b3J5L2ZpbGUiCittc2dzdHIgItC00LjRgNC10LrRgtC+0YDQuNGPL9GE0LDQudC7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IFRoZXJlIGlzIGEgZGlyZWN0b3J5IHdpdGggbmFtZSAlcyBpbiAlcy4gQWRkaW5nICVzIGFzICVzIgorbXNnc3RyICIiCisi0JrQntCd0KTQm9CY0JrQoiAoJXMpOiDQodGK0YnQtdGB0YLQstGD0LLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwINC40LzQtSDigJ4lc+KAnCDQsiDigJ4lc+KAnC4gINCU0L7QsdCw0LLRj9C90LUg0L3QsCDigJ4lc+KAnCAiCisi0LrQsNGC0L4g4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNzEKKyMsIGMtZm9ybWF0CiBtc2dpZCAiQWRkaW5nICVzIgogbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg4oCeJXPigJwiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzgwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU3RhZ2UgJWQgdW50cmFja2VkIGZpbGVzPyIKLW1zZ3N0ciAi0JTQsCDRgdC1INC00L7QsdCw0LLRj9GCINC70LggJWQg0L3QtdGB0LvQtdC00LXQvdC4INGE0LDQudC70LAg0LrRitC8INC40L3QtNC10LrRgdCwPyIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKGFkZC9hZGQpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAi0JrQntCd0KTQm9CY0JrQoiAo0LTQvtCx0LDQstGP0L3QtS/QtNC+0LHQsNCy0Y/QvdC1KTog0JrQvtC90YTQu9C40LrRgiDQv9GA0Lgg0YHQu9C40LLQsNC90LUg0L3QsCDigJ4lc+KAnCIKIAotIzogbGliL2luZGV4LnRjbDozODgKLW1zZ2lkICJBZGRpbmcgYWxsIGNoYW5nZWQgZmlsZXMiCi1tc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDQstGB0LjRh9C60Lgg0L/RgNC+0LzQtdC90LXQvdC4INGE0LDQudC70L7QstC1IgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQyNAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSEiCittc2dzdHIgItCS0LXRh9C1INC1INC+0LHQvdC+0LLQtdC90L4hIgogCi0jOiBsaWIvaW5kZXgudGNsOjQyOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIGZpbGUgJXM/IgotbXNnc3RyICLQlNCwINGB0LUg0LzQsNGF0L3QsNGCINC70Lgg0L/RgNC+0LzQtdC90LjRgtC1INCy0YrQsiDRhNCw0LnQu9CwIOKAniVz4oCcPyIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YHQu9C40LLQsNC90LUg0L3QsCDQtNGK0YDQstC10YLQsNGC0LAg4oCeJXPigJwg0Lgg4oCeJXPigJwiCiAKLSM6IGxpYi9pbmRleC50Y2w6NDMwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgotbXNnc3RyICLQlNCwINGB0LUg0LzQsNGF0L3QsNGCINC70Lgg0L/RgNC+0LzQtdC90LjRgtC1INCyINGC0LXQt9C4ICVpINGE0LDQudC70LA/IgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzUzNworbXNnaWQgIk1lcmdpbmc6IgorbXNnc3RyICLQodC70LjQstCw0L3QtToiCiAKLSM6IGxpYi9pbmRleC50Y2w6NDM4Ci1tc2dpZCAiQW55IHVuc3RhZ2VkIGNoYW5nZXMgd2lsbCBiZSBwZXJtYW5lbnRseSBsb3N0IGJ5IHRoZSByZXZlcnQuIgotbXNnc3RyICIiCi0i0JLRgdC40YfQutC4INC/0YDQvtC80LXQvdC4LCDQutC+0LjRgtC+INC90LUg0YHQsCDQsdC40LvQuCDQstC60LDRgNCw0L3QuCDQsiDQuNC90LTQtdC60YHQsCwg0YnQtSDQsdGK0LTQsNGCINCx0LXQt9Cy0YrQt9Cy0YDQsNGC0L3QviAiCi0i0LfQsNCz0YPQsdC10L3QuC4iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICLQvtGC0LrRgNC40YIg0LUgJXUg0L7QsdGJINC/0YDQtdC00YjQtdGB0YLQstC10L3QuNC6OiIKK21zZ3N0clsxXSAi0L7RgtC60YDQuNGC0Lgg0YHQsCAldSDQvtCx0YnQuCDQv9GA0LXQtNGI0LXRgdGC0LLQtdC90LjRhtC4OiIKIAotIzogbGliL2luZGV4LnRjbDo0NDEKLW1zZ2lkICJEbyBOb3RoaW5nIgotbXNnc3RyICLQndC40YnQviDQtNCwINC90LUg0YHQtSDQv9GA0LDQstC4IgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzYwMAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAi0YHQu9C40LLQsNC90LXRgtC+INC90LUg0LLRitGA0L3QsCDQv9C+0LTQsNCy0LDQvdC1IgogCi0jOiBsaWIvaW5kZXgudGNsOjQ1OQotbXNnaWQgIlJldmVydGluZyBzZWxlY3RlZCBmaWxlcyIKLW1zZ3N0ciAi0JzQsNGF0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INCyINC40LfQsdGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKLQotIzogbGliL2luZGV4LnRjbDo0NjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnRpbmcgJXMiCi1tc2dzdHIgItCc0LDRhdCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQsiDigJ4lc+KAnCIKLQotIzogbGliL2xpbmUudGNsOjE3Ci1tc2dpZCAiR290byBMaW5lOiIKLW1zZ3N0ciAi0JrRitC8INGA0LXQtDoiCi0KLSM6IGxpYi9saW5lLnRjbDoyMwotbXNnaWQgIkdvIgotbXNnc3RyICLQn9GA0LjQtNCy0LjQttCy0LDQvdC1IgotCi0jOiBsaWIvbWVyZ2UudGNsOjEzCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjU5CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDYW5ub3QgbWVyZ2Ugd2hpbGUgYW1lbmRpbmcuXG4iCi0iXG4iCi0iWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhbnkgdHlwZSBvZiBtZXJnZS5cbiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIgICVzIgogbXNnc3RyICIiCi0i0J/QviDQstGA0LXQvNC1INC90LAg0L/QvtC/0YDQsNCy0Y/QvdC1INC90LUg0LzQvtC20LUg0LTQsCDRgdC70LjQstCw0L3QtS5cbiIKLSJcbiIKLSLQotGA0Y/QsdCy0LAg0LTQsCDQt9Cw0LLRitGA0YjQuNGC0LUg0L/QvtC/0YDQsNCy0Y/QvdC10YLQviDQvdCwINGC0LXQutGD0YnQvtGC0L4g0L/QvtC00LDQstCw0L3QtSwg0L/RgNC10LTQuCDQtNCwINC30LDQv9C+0YfQvdC10YLQtSAiCi0i0YHQu9C40LLQsNC90LUuXG4iCisi0KHQu9C40LLQsNC90LXRgtC+INGJ0LUg0L/RgNC10LfQsNC/0LjRiNC1INC70L7QutCw0LvQvdC40YLQtSDQv9GA0L7QvNC10L3QuCDQvdCwINGC0LXQt9C4INGE0LDQudC70L7QstC1OlxuIgorIiAgICAlcyIKIAotIzogbGliL21lcmdlLnRjbDoyNworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0LXQvSDQsNC90LDQu9C40Lcg0L3QsCDQvtCx0LXQutGC0LAg4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM3NzQgYnVpbHRpbi9tZXJnZS5jOjY5NyBidWlsdGluL21lcmdlLmM6ODc3Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAi0JjQvdC00LXQutGB0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogbWlkeC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggZmlsZSAlcyBpcyB0b28gc21hbGwiCittc2dzdHIgItGE0LDQudC70YrRgiDRgSDQuNC90LTQtdC60YHQsCDQt9CwINC80L3QvtC20LXRgdGC0LLQviDQv9Cw0LrQtdGC0Lgg4oCeJXPigJwg0LUg0YLQstGK0YDQtNC1INC80LDQu9GK0LoiCisKKyM6IG1pZHguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSAweCUwOHggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAi0L7RgtC/0LXRh9Cw0YLRitC60YrRgiDQvdCwINC40L3QtNC10LrRgdCwINC30LAg0LzQvdC+0LbQtdGB0YLQstC+INC/0LDQutC10YLQuCAweCUwOHgg0L3QtSDRgdGK0LLQv9Cw0LTQsCDRgSAweCUwOHgiCisKKyM6IG1pZHguYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHZlcnNpb24gJWQgbm90IHJlY29nbml6ZWQiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDQstC10YDRgdC40Y8g0L3QsCDQuNC90LTQtdC60YEg0LfQsCDQvNC90L7QttC10YHRgtCy0L4g0L/QsNC60LXRgtC4IOKAlCAlZCIKKworIzogbWlkeC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggdmVyc2lvbiAldSBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAi0LLQtdGA0YHQuNGP0YLQsCDQvdCwINC+0YLQv9C10YfQsNGC0YrQutCwICV1INC90LUg0YHRitCy0L/QsNC00LAiCisKKyM6IG1pZHguYzoxMDgKK21zZ2lkICJpbnZhbGlkIGNodW5rIG9mZnNldCAodG9vIGxhcmdlKSIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4gKNC/0YDQtdC60LDQu9C10L3QviDQs9C+0LvRj9C80L4pINC+0YLQvNC10YHRgtCy0LDQvdC1INC90LAg0L7RgtC60YrRgSIKKworIzogbWlkeC5jOjEzMgorbXNnaWQgInRlcm1pbmF0aW5nIG11bHRpLXBhY2staW5kZXggY2h1bmsgaWQgYXBwZWFycyBlYXJsaWVyIHRoYW4gZXhwZWN0ZWQiCittc2dzdHIgIiIKKyLQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGK0YIg0LfQsCDQutGA0LDQtdC9INC+0YLQutGK0YEg0L3QsCDQuNC90LTQtdC60YEg0LfQsCDQvNC90L7QttC10YHRgtCy0L4g0L/QsNC60LXRgtC4INGB0LUg0Y/QstGP0LLQsCDQv9C+LSIKKyLRgNCw0L3QviDQvtGCINC+0YfQsNC60LLQsNC90L7RgtC+IgorCisjOiBtaWR4LmM6MTQ1Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIHBhY2stbmFtZSBjaHVuayIKK21zZ3N0ciAi0LvQuNC/0YHQstCwINC+0YLQutGK0YEgKHBhY2stbmFtZSkg0L7RgiDQuNC90LTQtdC60YEg0LfQsCDQvNC90L7QttC10YHRgtCy0L4g0L/QsNC60LXRgtC4IgorCisjOiBtaWR4LmM6MTQ3Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBmYW5vdXQgY2h1bmsiCittc2dzdHIgItC70LjQv9GB0LLQsCDQvtGC0LrRitGBIChPSUQgZmFub3V0KSDQvtGCINC40L3QtNC10LrRgSDQt9CwINC80L3QvtC20LXRgdGC0LLQviDQv9Cw0LrQtdGC0LgiCisKKyM6IG1pZHguYzoxNDkKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGxvb2t1cCBjaHVuayIKK21zZ3N0ciAi0LvQuNC/0YHQstCwINC+0YLQutGK0YEgKE9JRCBsb29rdXApINC+0YIg0LjQvdC00LXQutGBINC30LAg0LzQvdC+0LbQtdGB0YLQstC+INC/0LDQutC10YLQuCIKKworIzogbWlkeC5jOjE1MQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBvYmplY3Qgb2Zmc2V0cyBjaHVuayIKK21zZ3N0ciAi0LvQuNC/0YHQstCwINC+0YLQutGK0YEg0LfQsCDQvtGC0LzQtdGB0YLQstCw0L3QuNGP0YLQsCDQvdCwINC+0LHQtdC60YLQuCDQvtGCINC40L3QtNC10LrRgSDQt9CwINC80L3QvtC20LXRgdGC0LLQviDQv9Cw0LrQtdGC0LgiCisKKyM6IG1pZHguYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBwYWNrIG5hbWVzIG91dCBvZiBvcmRlcjogJyVzJyBiZWZvcmUgJyVzJyIKK21zZ3N0ciAiIgorItC90LXQv9GA0LDQstC40LvQvdCwINC/0L7QtNGA0LXQtNCx0LAg0L3QsCDQuNC80LXQvdCw0YLQsCDQsiDQuNC90LTQtdC60YEg0LfQsCDQvNC90L7QttC10YHRgtCy0L4g0L/QsNC60LXRgtC4OiDigJ4lc+KAnCDRgdC1INC/0L7Rj9Cy0LggIgorItC/0YDQtdC00Lgg4oCeJXPigJwiCisKKyM6IG1pZHguYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2staW50LWlkOiAldSAoJXUgdG90YWwgcGFja3MpIgorbXNnc3RyICIiCisi0L3QtdC/0YDQsNCy0LjQu9C10L0g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L3QsCDQv9Cw0LrQtdGCIChwYWNrLWludC1pZCk6ICV1ICjQvtGCINC+0LHRidC+ICV1INC/0LDQutC10YLQuCkiCisKKyM6IG1pZHguYzoyNjAKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHN0b3JlcyBhIDY0LWJpdCBvZmZzZXQsIGJ1dCBvZmZfdCBpcyB0b28gc21hbGwiCittc2dzdHIgIiIKKyLQuNC90LTQtdC60YHRitGCINC30LAg0LzQvdC+0LbQtdGB0YLQstC+INC/0LDQutC10YLQuCDRgdGK0LTRitGA0LbQsCA2NC3QsdC40YLQvtCy0Lgg0L7RgtC80LXRgdGC0LLQsNC90LjRjywg0L3QviDRgNCw0LfQvNC10YDRitGCINC90LAgIgorIuKAnm9mZl904oCcINC1INC90LXQtNC+0YHRgtCw0YLRitGH0LXQvSIKKworIzogbWlkeC5jOjI4OAorbXNnaWQgImVycm9yIHByZXBhcmluZyBwYWNrZmlsZSBmcm9tIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIiIKKyLQs9GA0LXRiNC60LAg0L/RgNC4INGB0YrQt9C00LDQstCw0L3QtdGC0L4g0L3QsCDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuyDQvdCwINCx0LDQt9Cw0YLQsCDQvdCwINC40L3QtNC10LrRgSDQt9CwINC80L3QvtC20LXRgdGC0LLQviAiCisi0L/QsNC60LXRgtC4IgorCisjOiBtaWR4LmM6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhZGQgcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAi0L/QsNC60LXRgtC90LjRj9GCINGE0LDQudC7IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQtNC+0LHQsNCy0LXQvSIKKworIzogbWlkeC5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwYWNrLWluZGV4ICclcyciCittc2dzdHIgItC40L3QtNC10LrRgdGK0YIg0LfQsCDQv9Cw0LrQtdGC0Lgg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9IgorCisjOiBtaWR4LmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2NhdGUgb2JqZWN0ICVkIGluIHBhY2tmaWxlIgorbXNnc3RyICLQvtCx0LXQutGCICVkINCyINC/0LDQutC10YLQvdC40Y8g0YTQsNC50Lsg0LvQuNC/0YHQstCwIgorCisjOiBtaWR4LmM6ODQyCittc2dpZCAiQWRkaW5nIHBhY2tmaWxlcyB0byBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0L/QsNC60LXRgtC90Lgg0YTQsNC50LvQvtCy0LUg0LrRitC8INC40L3QtNC10LrRgSDQt9CwINC80L3QvtC20LXRgdGC0LLQviDQv9Cw0LrQtdGC0LgiCisKKyM6IG1pZHguYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCBzZWUgcGFjay1maWxlICVzIHRvIGRyb3AiCittc2dzdHIgItC/0LDQutC10YLQvdC40Y/RgiDRhNCw0LnQuyDQt9CwINGC0YDQuNC10L3QtSDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LrRgNC40LUiCisKKyM6IG1pZHguYzo5NzMKK21zZ2lkICJXcml0aW5nIGNodW5rcyB0byBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICLQl9Cw0L/QuNGBINC90LAg0L7RgtC60YrRgdC4INC60YrQvCDQuNC90LTQtdC60YEg0LfQsCDQvNC90L7QttC10YHRgtCy0L4g0L/QsNC60LXRgtC4IgorCisjOiBtaWR4LmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2xlYXIgbXVsdGktcGFjay1pbmRleCBhdCAlcyIKK21zZ3N0ciAi0LjQvdC00LXQutGB0YrRgiDQt9CwINC80L3QvtC20LXRgdGC0LLQviDQv9Cw0LrQtdGC0Lgg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRh9C40YHRgtC10L0g0L/RgNC4IOKAniVz4oCcIgorCisjOiBtaWR4LmM6MTEwOAorbXNnaWQgIkxvb2tpbmcgZm9yIHJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICLQotGK0YDRgdC10L3QtSDQvdCwINGD0LrQsNC30LDQvdC40YLQtSDQv9Cw0LrQtdGC0L3QuCDRhNCw0LnQu9C+0LLQtSIKKworIzogbWlkeC5jOjExMjMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisib2lkIGZhbm91dCBvdXQgb2Ygb3JkZXI6IGZhbm91dFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSBmYW5vdXRbJWRdIgogbXNnc3RyICIiCi0i0J/QvtGB0LvQtdC00L3QviDRg9GB0YLQsNC90L7QstC10L3QvtGC0L4g0YHRitGB0YLQvtGP0L3QuNC1INC90LUg0L7RgtCz0L7QstCw0YDRjyDQvdCwINGC0L7QstCwINCyINGF0YDQsNC90LjQu9C40YnQtdGC0L4uXG4iCi0iXG4iCi0i0J3Rj9C60L7QuSDQtNGA0YPQsyDQv9GA0L7RhtC10YEg0LfQsCBHaXQg0LUg0L/RgNC+0LzQtdC90LjQuyDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+INC80LXQttC00YPQstGA0LXQvNC10L3QvdC+LiDQodGK0YHRgtC+0Y/QvdC40LXRgtC+ICIKLSLRgtGA0Y/QsdCy0LAg0LTQsCDQsdGK0LTQtSDQv9GA0L7QstC10YDQtdC90L4sINC/0YDQtdC00Lgg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4INGB0LvQuNCy0LDQvdC1LlxuIgotIlxuIgotItCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0YnQtSDQt9Cw0L/QvtGH0L3QtSDQvdC+0LLQsCDQv9GA0L7QstC10YDQutCwLlxuIgotIlxuIgorItC90LXQv9GA0LDQstC40LvQvdCwINC/0L7QtNGA0LXQtNCx0LAg0L3QsCDQvtGC0LrRitGB0LggKE9JRCBmYW5vdXQpOiBmYW5vdXRbJWRdID0gJTxQUkl4MzI+ID4gIgorIiU8UFJJeDMyPiA9IGZhbm91dFslZF0iCiAKLSM6IGxpYi9tZXJnZS50Y2w6NDUKLSMsIHRjbC1mb3JtYXQKKyM6IG1pZHguYzoxMTI4Cittc2dpZCAiVmVyaWZ5aW5nIE9JRCBvcmRlciBpbiBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICIiCisi0J/RgNC+0LLQtdGA0LrQsCDQvdCwINC/0L7QtNGA0LXQtNCx0LDRgtCwINC90LAg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQuCDQvdCwINC+0LHQtdC60YLQuCDQstGK0LIg0YTQsNC50Lsg0YEg0LjQvdC00LXQutGBINC60YrQvCAiCisi0LzQvdC+0LbQtdGB0YLQstC+INC/0LDQutC10YLQvdC4INGE0LDQudC70L7QstC1IgorCisjOiBtaWR4LmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICJvaWQgbG9va3VwIG91dCBvZiBvcmRlcjogb2lkWyVkXSA9ICVzID49ICVzID0gb2lkWyVkXSIKK21zZ3N0ciAiIgorItC90LXQv9GA0LDQstC40LvQvdCwINC/0L7QtNGA0LXQtNCx0LAg0L3QsCDQvtGC0LrRitGB0LggKE9JRCBsb29rdXApOiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorCisjOiBtaWR4LmM6MTE1NworbXNnaWQgIlNvcnRpbmcgb2JqZWN0cyBieSBwYWNrZmlsZSIKK21zZ3N0ciAi0J/QvtC00YDQtdC00LHQsCDQvdCwINC+0LHQtdC60YLQuNGC0LUg0L/QviDQv9Cw0LrQtdGC0L3QuCDRhNCw0LnQu9C+0LLQtSIKKworIzogbWlkeC5jOjExNjQKK21zZ2lkICJWZXJpZnlpbmcgb2JqZWN0IG9mZnNldHMiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L3QsCDQvtGC0LzQtdGB0YLQstCw0L3QtdGC0L4g0L3QsCDQvtCx0LXQutGC0LgiCisKKyM6IG1pZHguYzoxMTgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2sgZW50cnkgZm9yIG9pZFslZF0gPSAlcyIKK21zZ3N0ciAi0LfQsNC/0LjRgdGK0YIg0LIg0L/QsNC60LXRgtCwINC30LAg0L7QsdC10LrRgtCwIG9pZFslZF0gPSAlcyDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNGA0LXQtNC10L0iCisKKyM6IG1pZHguYzoxMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2staW5kZXggZm9yIHBhY2tmaWxlICVzIgorbXNnc3RyICLQuNC90LTQtdC60YHRitGCINC90LAg0L/QsNC60LXRgtCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0YDQtdC00LXQvSIKKworIzogbWlkeC5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb3JyZWN0IG9iamVjdCBvZmZzZXQgZm9yIG9pZFslZF0gPSAlczogJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0L7RgtC80LXRgdGC0LLQsNC90LUg0L3QsCDQvtCx0LXQutGCINC30LAgb2lkWyVkXSA9ICVzOiAlPFBSSXg2ND4gIT0gJTxQUkl4NjQ+IgorCisjOiBtaWR4LmM6MTIyMAorbXNnaWQgIkNvdW50aW5nIHJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAi0J/RgNC10LHRgNC+0Y/QstCw0L3QtSDQvdCwINGB0LLRitGA0LfQsNC90LjRgtC1INC+0LHQtdC60YLQuCIKKworIzogbWlkeC5jOjEyMzAKK21zZ2lkICJGaW5kaW5nIGFuZCBkZWxldGluZyB1bnJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICLQotGK0YDRgdC10L3QtSDQuCDQuNC30YLRgNC40LLQsNC90LUg0L3QsCDQvdC10YHQstGK0YDQt9Cw0L3QuNGC0LUg0L/QsNC60LXRgtC90Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IG1pZHguYzoxMzg4Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyIKK21zZ3N0ciAi0LrQvtC80LDQvdC00LDRgtCwIOKAnnBhY2stb2JqZWN0c+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRgtCw0YDRgtC40YDQsNC90LAiCisKKyM6IG1pZHguYzoxNDA3Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMiCittc2dzdHIgItC60L7QvNCw0L3QtNCw0YLQsCDigJ5wYWNrLW9iamVjdHPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQstGK0YDRiNC10L3QsCIKKworIzogbmFtZS1oYXNoLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9kaXIgdGhyZWFkOiAlcyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0L3QuNGI0LrQsCDQt9CwINC00LjRgNC10LrRgtC+0YDQuNC4OiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0YrQt9C00LDQtNC1INC90LjRiNC60LAg0LfQsCDQuNC80LXQvdCwOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30YfQsNC60LAg0L3QuNGI0LrQsCDQt9CwINC40LzQtdC90LA6ICVzIgorCisjOiBub3Rlcy1tZXJnZS5jOjI3NworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKLSJcbiIKLSJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCi0iXG4iCi0iWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCi0ibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBwcmV2aW91cyBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIHVzZSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHRvICIKKyJjb21taXQvYWJvcnQgdGhlIHByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgbm90ZXMgbWVyZ2UuIgogbXNnc3RyICIiCi0i0JIg0LzQvtC80LXQvdGC0LAg0YLQtdGH0LUg0YHQu9C40LLQsNC90LUsINC90L4g0LjQvNCwINC60L7QvdGE0LvQuNC60YLQuC5cbiIKKyLQndC1INGB0YLQtSDQt9Cw0LLRitGA0YjQuNC70Lgg0L/RgNC10LTQuNGI0L3QvtGC0L4g0YHQu9C40LLQsNC90LUg0L3QsCDQsdC10LvQtdC20LrQuC4gICjQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ4lc+KAnCAiCisi0YHRitGJ0LXRgdGC0LLRg9Cy0LApLlxuIgorItCX0LAg0LTQsCDQt9Cw0LLRitGA0YjQuNGC0LUg0L/RgNC10LTQuNGI0L3QvtGC0L4g0YHQu9C40LLQsNC90LUsINC40LfQv9GK0LvQvdC10YLQtTpcbiIKICJcbiIKLSLQn9C+0LPQu9C10LTQvdC10YLQtSDRhNCw0LnQu9CwIOKAniVz4oCcLlxuIgorIiAgICBnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXRcbiIKICJcbiIKLSLQotGA0Y/QsdCy0LAg0LTQsCDQutC+0YDQuNCz0LjRgNCw0YLQtSDQutC+0L3RhNC70LjQutGC0LjRgtC1INCyINC90LXQs9C+LCDQtNCwINCz0L4g0LTQvtCx0LDQstC40YLQtSDQutGK0Lwg0LjQvdC00LXQutGB0LAg0Lgg0LTQsCAiCi0i0LfQsNCy0YrRgNGI0LjRgtC1INGC0LXQutGD0YnQvtGC0L4g0YHQu9C40LLQsNC90LUg0YfRgNC10Lcg0L/QvtC00LDQstCw0L3QtS4g0KfQsNC6INGC0L7Qs9Cw0LLQsCDQvNC+0LbQtSDQtNCwINC30LDQv9C+0YfQvdC10YLQtSDQvdC+0LLQviAiCi0i0YHQu9C40LLQsNC90LUuXG4iCisi0JfQsCDQtNCwINC+0YLQvNC10L3QuNGC0LUg0L/RgNC10LTQuNGI0L3QvtGC0L4g0YHQu9C40LLQsNC90LUsINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQiCiAKLSM6IGxpYi9tZXJnZS50Y2w6NTUKLSMsIHRjbC1mb3JtYXQKKyM6IG5vdGVzLW1lcmdlLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS4iCittc2dzdHIgIiIKKyLQndC1INGB0YLQtSDQt9Cw0LLRitGA0YjQuNC70Lgg0YHQu9C40LLQsNC90LXRgtC+INC90LAg0LHQtdC70LXQttC60LjRgtC1LiAgKNCj0LrQsNC30LDRgtC10LvRj9GCIOKAniVz4oCcINGB0YrRidC10YHRgtCy0YPQstCwKS4iCisKKyM6IG5vdGVzLXV0aWxzLmM6NDYKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIiIKKyLQndC10LjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L3QviDQuNC70Lgg0L3QtdGA0LXRhNC10YDQuNGA0LDQvdC+INC00YrRgNCy0L4g0LfQsCDQsdC10LvQtdC20LrQuCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/QvtC00LDQtNC10L3QviIKKworIzogbm90ZXMtdXRpbHMuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCebm90ZXMucmV3cml0ZU1vZGXigJw6IOKAniVz4oCcIgorCisjOiBub3Rlcy11dGlscy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiIgorItCR0LXQu9C10LbQutC40YLQtSDQsiDigJ4lc+KAnCDQvdGP0LzQsCDQtNCwINCx0YrQtNCw0YIg0L/RgNC10LfQsNC/0LjRgdCw0L3QuCwg0LfQsNGJ0L7RgtC+INGB0LAg0LjQt9Cy0YrQvSDigJ5yZWZzL25vdGVzL+KAnC4iCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YKKyMuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcworIy4gaXRzIHZhbHVlLgorIy4KKyM6IG5vdGVzLXV0aWxzLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAi0JfQsNC00LDQtNC10L3QsCDQtSDQu9C+0YjQsCDRgdGC0L7QudC90L7RgdGCINC90LAg0L/RgNC+0LzQtdC90LvQuNCy0LDRgtCwIOKAniVz4oCcOiDigJ4lc+KAnCIKKworIzogb2JqZWN0LmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSBcIiVzXCIiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INCy0LjQtCDQvtCx0LXQutGCOiDigJ4lc+KAnCIKKworIzogb2JqZWN0LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBhICVzLCBub3QgYSAlcyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0LUgJXMsINCwINC90LUgJXMiCisKKyM6IG9iamVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaGFzIHVua25vd24gdHlwZSBpZCAlZCIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0LUg0L3QtdC/0L7Qt9C90LDRgiDQstC40LQ6ICVkIgorCisjOiBvYmplY3QuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdDogJXMiCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvSIKKworIzogb2JqZWN0LmM6MjY2IG9iamVjdC5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIG1pc21hdGNoICVzIgorbXNnc3RyICLRgNCw0LfQu9C40LrQsCDQsiDQutC+0L3RgtGA0L7Qu9C90LDRgtCwINGB0YPQvNCwOiDigJ4lc+KAnCIKKworIzogcGFja2ZpbGUuYzo2MjkKK21zZ2lkICJvZmZzZXQgYmVmb3JlIGVuZCBvZiBwYWNrZmlsZSAoYnJva2VuIC5pZHg/KSIKK21zZ3N0ciAiIgorItC+0YLQvNC10YHRgtCy0LDQvdC1INC/0YDQtdC00Lgg0LrRgNCw0Y8g0L3QsCDQv9Cw0LrQtdGC0L3QuNGPINGE0LDQudC7ICjQstGK0LfQvNC+0LbQvdC+INC1INC40L3QtNC10LrRgdGK0YIg0LTQsCDQtSDQv9C+0LLRgNC10LTQtdC9KSIKKworIzogcGFja2ZpbGUuYzoxODk5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZWZvcmUgc3RhcnQgb2YgcGFjayBpbmRleCBmb3IgJXMgKGNvcnJ1cHQgaW5kZXg/KSIKK21zZ3N0ciAiIgorItC+0YLQvNC10YHRgtCy0LDQvdC1INC/0YDQtdC00Lgg0L3QsNGH0LDQu9C+0YLQviDQvdCwINC40L3QtNC10LrRgdCwINC90LAg0L/QsNC60LXRgtC90LjRjyDRhNCw0LnQuyDigJ4lc+KAnCAo0LLRitC30LzQvtC20L3QviDQtSAiCisi0LjQvdC00LXQutGB0YrRgiDQtNCwINC1INC/0L7QstGA0LXQtNC10L0pIgorCisjOiBwYWNrZmlsZS5jOjE5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFjayBpbmRleCBmb3IgJXMgKHRydW5jYXRlZCBpbmRleD8pIgorbXNnc3RyICIiCisi0L7RgtC80LXRgdGC0LLQsNC90LUg0L/RgNC10LTQuCDQutGA0LDRjyDQvdCwINC40L3QtNC10LrRgdCwINC90LAg0L/QsNC60LXRgtC90LjRjyDRhNCw0LnQuyDigJ4lc+KAnCAo0LLRitC30LzQvtC20L3QviDQtSDQuNC90LTQtdC60YHRitGCICIKKyLQtNCwINC1INC+0YLRgNGP0LfQsNC9KSIKKworIzogcGFjay1iaXRtYXAuYzo4MDAgcGFjay1iaXRtYXAuYzo4MDYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgc2l6ZSBvZiAlcyIKK21zZ3N0ciAi0YDQsNC30LzQtdGA0YrRgiDQvdCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LvRg9GH0LXQvSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAniVz4oCcINC40LfQuNGB0LrQstCwINCw0YDQs9GD0LzQtdC90YIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAlcyIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeJXPigJwg0Lgg4oCeJXPigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IGluY29tcGF0aWJsZSB3aXRoIHNvbWV0aGluZyBlbHNlIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0L3QtdGJ0L4iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MiBwYXJzZS1vcHRpb25zLmM6OTYgcGFyc2Utb3B0aW9ucy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0YWtlcyBubyB2YWx1ZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQv9GA0LjQtdC80LAg0LDRgNCz0YPQvNC10L3RgtC4IgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXNuJ3QgYXZhaWxhYmxlIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQvdC1INC1INC90LDQu9C40YfQvdCwIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB3aXRoIGFuIG9wdGlvbmFsIGsvbS9nIHN1ZmZpeCIKK21zZ3N0ciAiIgorIuKAniVz4oCcINC+0YfQsNC60LLQsCDQvdC10L7RgtGA0LjRhtCw0YLQtdC70L3QviDRhtGP0LvQviDRh9C40YHQu9C+LCDQtdCy0LXQvdGC0YPQsNC70L3QviDRgdGK0YEg0YHRg9GE0LjQutGBIOKAnmvigJwv4oCebeKAnC/igJ5n4oCcIgorCisjOiBwYXJzZS1vcHRpb25zLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyBvcHRpb246ICVzIChjb3VsZCBiZSAtLSVzJXMgb3IgLS0lcyVzKSIKK21zZ3N0ciAi0L3QtdC10LTQvdC+0LfQvdCw0YfQvdCwINC+0L/RhtC40Y86IOKAniVz4oCcICjQvNC+0LbQtSDQtNCwINC1IOKAni0tJXMlc+KAnCDQuNC70Lgg4oCeLS0lcyVz4oCcKSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjQyMCBwYXJzZS1vcHRpb25zLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyk/IgorbXNnc3RyICLigJ4tLSVz4oCcICjRgSAyINGC0LjRgNC10YLQsCkg0LvQuCDQuNC80LDRhdGC0LUg0L/RgNC10LTQstC40LQ/IgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uIGAlcyciCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDQvtC/0YbQuNGPOiDigJ4lc+KAnCIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN3aXRjaCBgJWMnIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINGE0LvQsNCzIOKAniVj4oCcIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm9uLWFzY2lpIG9wdGlvbiBpbiBzdHJpbmc6IGAlcyciCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDRgdGC0L7QudC90L7RgdGCINC40LfQstGK0L0g4oCeYXNjaWnigJwg0LIg0L3QuNC30LA6IOKAniVz4oCcIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODg1Cittc2dpZCAiLi4uIgorbXNnc3RyICLigKYiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzIgorbXNnc3RyICLRg9C/0L7RgtGA0LXQsdCwOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uLgorIy4KKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgb3I6ICVzIgorbXNnc3RyICIgICAgINC40LvQuDogJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICVzIgorbXNnc3RyICIgICAgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NTIKK21zZ2lkICItTlVNIgorbXNnc3RyICIt0KfQmNCh0JvQniIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBvZiAtLSVzIgorbXNnc3RyICLQv9GB0LXQstC00L7QvdC40Lwg0L3QsCDigJ4tLSVz4oCcIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MjAgcGFyc2Utb3B0aW9ucy1jYi5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAniVz4oCcINC+0YfQsNC60LLQsCDRh9C40YHQu9C+INC30LAg0LDRgNCz0YPQvNC10L3RgiIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBleHBpcmF0aW9uIGRhdGUgJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0LTQsNGC0LAg0L3QsCDRgdGA0L7Qujog4oCeJXPigJwiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIFwiYWx3YXlzXCIsIFwiYXV0b1wiLCBvciBcIm5ldmVyXCIiCittc2dzdHIgIiIKKyLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQuNC30LjRgdC60LLQsCDQvdGP0LrQvtGPINC+0YIg0YHRgtC+0LnQvdC+0YHRgtC40YLQtTog4oCeYWx3YXlz4oCcICjQstC40L3QsNCz0LgpLCAiCisi4oCeYXV0b+KAnCAo0LDQstGC0L7QvNCw0YLQuNGH0L3Qvikg0LjQu9C4IOKAnm5ldmVy4oCcICjQvdC40LrQvtCz0LApIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MTMwIHBhcnNlLW9wdGlvbnMtY2IuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINC+0LHQtdC60YIg4oCeJXPigJwiCisKKyM6IHBhdGguYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgItCd0LUg0LzQvtCz0LDRgiDQtNCwINGB0LUg0LTQsNC00LDRgiDQv9GA0LDQstCwINC30LAg0LfQsNC/0LjRgSDQsiDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QsCDQs9GA0YPQv9Cw0YLQsCIKKworIzogcGF0aHNwZWMuYzoxMzAKK21zZ2lkICJFc2NhcGUgY2hhcmFjdGVyICdcXCcgbm90IGFsbG93ZWQgYXMgbGFzdCBjaGFyYWN0ZXIgaW4gYXR0ciB2YWx1ZSIKK21zZ3N0ciAiIgorItCV0LrRgNCw0L3QuNGA0LDRidC40Y/RgiDQt9C90LDQuiDigJ5cXOKAnNC90LUg0LzQvtC20LUg0LTQsCDQtSDQv9C+0YHQu9C10LTQtdC9INC30L3QsNC6INCyINGB0YLQvtC50L3QvtGB0YLRgtCwINC90LAg0LDRgtGA0LjQsdGD0YIiCisKKyM6IHBhdGhzcGVjLmM6MTQ4Cittc2dpZCAiT25seSBvbmUgJ2F0dHI6JyBzcGVjaWZpY2F0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICLQn9C+0LfQstC+0LvQtdC90L4g0LUg0YHQsNC80L4g0LXQtNC90L4g0YPQutCw0LfQstCw0L3QtSDQvdCwIOKAnmF0dHI64oCcLiIKKworIzogcGF0aHNwZWMuYzoxNTEKK21zZ2lkICJhdHRyIHNwZWMgbXVzdCBub3QgYmUgZW1wdHkiCittc2dzdHIgIuKAnmF0dHI64oCcINGC0YDRj9Cx0LLQsCDQtNCwINGD0LrQsNC30LLQsCDRgdGC0L7QudC90L7RgdGCIgorCisjOiBwYXRoc3BlYy5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSBuYW1lICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDQsNGC0YDQuNCx0YPRgjog4oCeJXPigJwiCisKKyM6IHBhdGhzcGVjLmM6MjU5Cittc2dpZCAiZ2xvYmFsICdnbG9iJyBhbmQgJ25vZ2xvYicgcGF0aHNwZWMgc2V0dGluZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAi0LPQu9C+0LHQsNC70L3QuNGC0LUg0L3QsNGB0YLRgNC+0LnQutC4INC30LAg0L/RitGC0LjRidCwIOKAnmdsb2LigJwg0Lgg4oCebm9nbG9i4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBwYXRoc3BlYy5jOjI2NgogbXNnaWQgIiIKLSJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCi0iXG4iCi0iRmlsZSAlcyBpcyBtb2RpZmllZC5cbiIKLSJcbiIKLSJZb3Ugc2hvdWxkIGNvbXBsZXRlIHRoZSBjdXJyZW50IGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYSBtZXJnZS4gIERvaW5nIHNvICIKLSJ3aWxsIGhlbHAgeW91IGFib3J0IGEgZmFpbGVkIG1lcmdlLCBzaG91bGQgdGhlIG5lZWQgYXJpc2UuXG4iCisiZ2xvYmFsICdsaXRlcmFsJyBwYXRoc3BlYyBzZXR0aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBnbG9iYWwgIgorInBhdGhzcGVjIHNldHRpbmdzIgogbXNnc3RyICIiCi0i0JIg0LzQvtC80LXQvdGC0LAg0YLQtdGH0LUg0L/QvtC00LDQstCw0L3QtS5cbiIKLSJcbiIKLSLQpNCw0LnQu9GK0YIg4oCeJXPigJwg0LUg0L/RgNC+0LzQtdC90LXQvS5cbiIKLSJcbiIKLSLQotGA0Y/QsdCy0LAg0LTQsCDQt9Cw0LLRitGA0YjQuNGC0LUg0YLQtdC60YPRidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1LCDQv9GA0LXQtNC4INC00LAg0LfQsNC/0L7Rh9C90LXRgtC1INGB0LvQuNCy0LDQvdC1LiDQotCw0LrQsCDRidC1ICIKLSLQvNC+0LbQtdGC0LUg0LvQtdGB0L3QviDQtNCwINC/0YDQtdGD0YHRgtCw0L3QvtCy0LjRgtC1INGB0LvQuNCy0LDQvdC10YLQviwg0LDQutC+INCy0YrQt9C90LjQutC90LUg0L3Rg9C20LTQsC5cbiIKKyLQs9C70L7QsdCw0LvQvdCw0YLQsCDQvdCw0YHRgtGA0L7QudC60LAg0LfQsCDQtNC+0YHQu9C+0LLQvdC4INC/0YrRgtC40YnQsCDigJ5saXRlcmFs4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQstGB0LjRh9C60LggIgorItC00YDRg9Cz0Lgg0LPQu9C+0LHQsNC70L3QuCDQvdCw0YHRgtGA0L7QudC60Lgg0LfQsCDQv9GK0YLQuNGJ0LAiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTA4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgb2YgJXMiCi1tc2dzdHIgIiVzINC+0YIg0L7QsdGJ0L4gJXMiCisjOiBwYXRoc3BlYy5jOjMwNgorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyIGZvciBwYXRoc3BlYyBtYWdpYyAncHJlZml4JyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L/QsNGA0LDQvNC10YLRitGAINC30LAg0L7Qv9GG0LjRj9GC0LAg0LfQsCDQvNCw0LPQuNGH0LXRgdC60Lgg0L/RitGC0LjRidCwIOKAnnByZWZpeOKAnCIKIAotIzogbGliL21lcmdlLnRjbDoxMjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKLW1zZ3N0ciAi0KHQu9C40LLQsNC90LUg0L3QsCDigJ4lc+KAnCDQuCDigJ4lc+KAnOKApiIKKyM6IHBhdGhzcGVjLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDQvtC/0YbQuNGP0YLQsCDQt9CwINC80LDQs9C40YfQtdGB0LrQuCDQv9GK0YLQuNGJ0LAg4oCeJS4qc+KAnCDQsiDigJ4lc+KAnCIKIAotIzogbGliL21lcmdlLnRjbDoxMzcKLW1zZ2lkICJNZXJnZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiIKLW1zZ3N0ciAi0KHQu9C40LLQsNC90LXRgtC+INC30LDQstGK0YDRiNC4INGD0YHQv9C10YjQvdC+LiIKKyM6IHBhdGhzcGVjLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAi0JfQvdCw0LrRitGCIOKAninigJwg0LvQuNC/0YHQstCwINCyINC+0L/RhtC40Y/RgtCwINC30LAg0LzQsNCz0LjRh9C10YHQutC4INC/0YrRgtC40YnQsCDQsiDigJ4lc+KAnCIKIAotIzogbGliL21lcmdlLnRjbDoxMzkKLW1zZ2lkICJNZXJnZSBmYWlsZWQuICBDb25mbGljdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkLiIKLW1zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1IOKAlCDQuNC80LAg0LrQvtC90YTQu9C40LrRgtC4INC30LAg0LrQvtGA0LjQs9C40YDQsNC90LUuIgorIzogcGF0aHNwZWMuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgItCc0LDQs9C40YfQtdGB0LrQuNGC0LUg0L/RitGC0LjRidCwIOKAniVj4oCcINGB0LAg0LHQtdC3INGA0LXQsNC70LjQt9Cw0YbQuNGPINC30LAg4oCeJXPigJwiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTU2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogTWVyZ2UiCi1tc2dzdHIgIiVzICglcyk6INCh0LvQuNCy0LDQvdC1IgorIzogcGF0aHNwZWMuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICdsaXRlcmFsJyBhbmQgJ2dsb2InIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiVzOiDQvtC/0YbQuNC40YLQtSDigJ5saXRlcmFs4oCcINC4IOKAnmdsb2LigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTY0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2UgSW50byAlcyIKLW1zZ3N0ciAi0KHQu9C40LLQsNC90LUg0LIg4oCeJXPigJwiCisjOiBwYXRoc3BlYy5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkgYXQgJyVzJyIKK21zZ3N0ciAiJXM6IOKAniVz4oCcINC1INC40LfQstGK0L0g0YXRgNCw0L3QuNC70LjRidC10YLQviDQv9GA0Lgg4oCeJXPigJwiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTgzCi1tc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCi1tc2dzdHIgItCS0LXRgNGB0LjRjyDQt9CwINGB0LvQuNCy0LDQvdC1IgorIzogcGF0aHNwZWMuYzo1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyAobW5lbW9uaWM6ICclYycpIgorbXNnc3RyICLigJ4lc+KAnCAo0LrQu9Cw0LLQuNGIOiDigJ4lY+KAnCkiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjE4CisjOiBwYXRoc3BlYy5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIlczog0LzQsNCz0LjRh9C10YHQutC40YLQtSDQv9GK0YLQuNGJ0LAg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LDRgiDQvtGCINC60L7QvNCw0L3QtNCw0YLQsCDigJ4lc+KAnCIKKworIzogcGF0aHNwZWMuYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLQv9GK0YLRj9GCIOKAniVz4oCcINC1INGB0LvQtdC0INGB0LjQvNCy0L7Qu9C90LAg0LLRgNGK0LfQutCwIgorCisjOiBwYXRoc3BlYy5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lIGlzIGJhZGx5IHF1b3RlZDogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INGG0LjRgtC40YDQsNC9INGA0LXQtDogJXMiCisKKyM6IHBrdC1saW5lLmM6OTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmx1c2ggcGFja2V0IgorbXNnc3RyICLQv9Cw0LrQtdGC0YrRgiDQt9CwINC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LHRg9GE0LXRgNC40YLQtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0L/QuNGI0LUiCisKKyM6IHBrdC1saW5lLmM6OTkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZGVsaW0gcGFja2V0IgorbXNnc3RyICLRgNCw0LfQtNC10LvRj9GJ0LjRj9GCINC/0LDQutC10YIg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC/0LjRiNC1IgorCisjOiBwa3QtbGluZS5jOjEwNgorbXNnaWQgImZsdXNoIHBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCx0YPRhNC10YDQuNGC0LUg0L/RgNC4INC30LDQv9C40YEg0L3QsCDQv9Cw0LrQtdGCIgorCisjOiBwa3QtbGluZS5jOjE0NiBwa3QtbGluZS5jOjIzMgorbXNnaWQgInByb3RvY29sIGVycm9yOiBpbXBvc3NpYmx5IGxvbmcgbGluZSIKK21zZ3N0ciAi0L/RgNC+0YLQvtC60L7Qu9C90LAg0LPRgNC10YjQutCwOiDQv9GA0LXQutCw0LvQtdC90L4g0LTRitC70YrQsyDRgNC10LQiCisKKyM6IHBrdC1saW5lLmM6MTYyIHBrdC1saW5lLmM6MTY0Cittc2dpZCAicGFja2V0IHdyaXRlIHdpdGggZm9ybWF0IGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQtdC9INC30LDQv9C40YEg0L3QsCDQv9Cw0LrQtdGCINGBINGE0L7RgNC80LDRgiIKKworIzogcGt0LWxpbmUuYzoxOTYKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIC0gZGF0YSBleGNlZWRzIG1heCBwYWNrZXQgc2l6ZSIKK21zZ3N0ciAiIgorItC90LXRg9GB0L/QtdGI0LXQvSDQt9Cw0L/QuNGBINC90LAg0L/QsNC60LXRgtC10L0g0YTQsNC50Lsg4oCUINC00LDQvdC90LjRgtC1INC90LDQtNCy0LjRiNCw0LLQsNGCINC80LDQutGB0LjQvNCw0LvQvdC40Y/RgiDRgNCw0LfQvNC10YAg0L3QsCAiCisi0L/QsNC60LXRgiIKKworIzogcGt0LWxpbmUuYzoyMDMgcGt0LWxpbmUuYzoyMTAKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC10L0g0LfQsNC/0LjRgSDQvdCwINC/0LDQutC10YIiCisKKyM6IHBrdC1saW5lLmM6Mjk1Cittc2dpZCAicmVhZCBlcnJvciIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDRh9C10YLQtdC90LUiCisKKyM6IHBrdC1saW5lLmM6MzAzCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiCittc2dzdHIgItC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QtdC+0YfQsNC60LLQsNC90L4g0L/RgNC10LrRitGB0L3QsCDQstGA0YrQt9C60LDRgtCwIgorCisjOiBwa3QtbGluZS5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIGxpbmUgbGVuZ3RoIGNoYXJhY3RlcjogJS40cyIKK21zZ3N0ciAi0L/RgNC+0YLQvtC60L7Qu9C90LAg0LPRgNC10YjQutCwOiDQvdC10L/RgNCw0LLQuNC7ZdC9INC30L3QsNC6INC30LAg0LTRitC70LbQuNC90LAg0L3QsCDRgNC10LQ6ICUuNHMiCisKKyM6IHBrdC1saW5lLmM6MzQxIHBrdC1saW5lLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggJWQiCittc2dzdHIgItC/0YDQvtGC0L7QutC+0LvQvdCwINCz0YDQtdGI0LrQsDog0L3QtdC/0YDQsNCy0LjQu9C90LAg0LTRitC70LbQuNC90LAg0L3QsCDRgNC10LQ6ICVkIgorCisjOiBwa3QtbGluZS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICLQvtGC0LTQsNC70LXRh9C10L3QsCDQs9GA0LXRiNC60LA6ICVzIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTE5Cittc2dpZCAiUmVmcmVzaGluZyBpbmRleCIKK21zZ3N0ciAi0J7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogcHJlbG9hZC1pbmRleC5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZGVkIGxzdGF0OiAlcyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0L3QuNGI0LrQsCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC10YLQviDQvdCwIOKAnmxzdGF04oCcOiAlcyIKKworIzogcHJldHR5LmM6OTgxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIC0tcHJldHR5IGZvcm1hdCIKK21zZ3N0ciAi0LDRgNCz0YPQvNC10L3RgtGK0YIg0LrRitC8INC+0L/RhtC40Y/RgtCwIOKAni0tcHJldHR54oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6MjMKK21zZ2lkICJSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgItCb0LjQv9GB0LLQsCDQsNC00YDQtdGBINC30LAg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbWlzb3IgcmVtb3RlIG5hbWUgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIKK21zZ3N0ciAiIgorItC40LzQtdGC0L4g0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtS3Qs9Cw0YDQsNC90YIg0L3QtSDQvNC+0LbQtSDQt9CwINC30LDQv9C+0YfQstCwINGB0YrRgSDQt9C90LDQutCwIOKAni/igJw6ICVzIgorCisjOiByYW5nZS1kaWZmLmM6NzUKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgYGxvZ2AiCittc2dzdHIgItC60L7QvNCw0L3QtNCw0YLQsCDQt9CwINC20YPRgNC90LDQu9CwINGBINC/0L7QtNCw0LLQsNC90LjRjyDigJ5sb2figJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRgtCw0YDRgtC40YDQsCIKKworIzogcmFuZ2UtZGlmZi5jOjc3Cittc2dpZCAiY291bGQgbm90IHJlYWQgYGxvZ2Agb3V0cHV0IgorbXNnc3RyICIiCisi0LjQt9GF0L7QtNGK0YIg0L7RgiDQutC+0LzQsNC90LTQsNGC0LAg0LfQsCDQttGD0YDQvdCw0LvQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y8g4oCebG9n4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtGH0LXRgtC1IgorCisjOiByYW5nZS1kaWZmLmM6OTYgc2VxdWVuY2VyLmM6NTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICclcyciCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvdC+IgorCisjOiByYW5nZS1kaWZmLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBnaXQgaGVhZGVyICclLipzJyIKK21zZ3N0ciAi0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg0L3QsCBnaXQg4oCeJS4qc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQsNC90LDQu9C40LfQuNGA0LAiCisKKyM6IHJhbmdlLWRpZmYuYzoyODUKK21zZ2lkICJmYWlsZWQgdG8gZ2VuZXJhdGUgZGlmZiIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGC0YrRgNGB0LXQvdC1INC90LAg0YDQsNC30LvQuNC60LAiCisKKyM6IHJhbmdlLWRpZmYuYzo1MTggcmFuZ2UtZGlmZi5jOjUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbG9nIGZvciAnJXMnIgorbXNnc3RyICLQttGD0YDQvdCw0LvRitGCINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0L3QsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L0iCisKKyM6IHJlYWQtY2FjaGUuYzo2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgYWRkIGZpbGUgYWxpYXMgJyVzJyAoJyVzJyBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCkiCittc2dzdHIgIiIKKyLQvdGP0LzQsCDQtNCwINCx0YrQtNC1INC00L7QsdCw0LLQtdC9INC/0YHQtdCy0LTQvtC90LjQvCDQt9CwINGE0LDQudC7IOKAniVz4oCcICjigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQsiDQuNC90LTQtdC60YHQsCkiCisKKyM6IHJlYWQtY2FjaGUuYzo2OTYKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFuIGVtcHR5IGJsb2IgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAi0LIg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCDQt9CwINC+0LHQtdC60YLQuNGC0LUg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0L/RgNCw0LfQtdC9INC+0LHQtdC60YItQkxPQiIKKworIzogcmVhZC1jYWNoZS5jOjcxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuIG9ubHkgYWRkIHJlZ3VsYXIgZmlsZXMsIHN5bWJvbGljIGxpbmtzIG9yIGdpdC1kaXJlY3RvcmllcyIKK21zZ3N0ciAiIgorIiVzOiDQvNC+0LbQtSDQtNCwINC00L7QsdCw0LLRj9GC0LUg0YHQsNC80L4g0L7QsdC40LrQvdC+0LLQtdC90Lgg0YTQsNC50LvQvtCy0LUsINGB0LjQvNCy0L7Qu9C90Lgg0LLRgNGK0LfQutC4INC4INC00LjRgNC10LrRgtC+0YDQuNC4ICIKKyLQvdCwIGdpdCIKKworIzogcmVhZC1jYWNoZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgItC90LUg0LUg0LjQt9GC0LXQs9C70LXQvdC+INC/0L7QtNCw0LLQsNC90LUg0LIg4oCeJXPigJwiCisKKyM6IHJlYWQtY2FjaGUuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGluZGV4IGZpbGUgJyVzJyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC90LTQtdC60YHQuNGA0LDQvSIKKworIzogcmVhZC1jYWNoZS5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkICclcycgdG8gaW5kZXgiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC00L7QsdCw0LLQuCDQsiDQuNC90LTQtdC60YHQsCIKKworIzogcmVhZC1jYWNoZS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCAnJXMnIgorbXNnc3RyICLigJ5zdGF04oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9GK0LvQvdC4INCy0YrRgNGF0YMg4oCeJXPigJwiCisKKyM6IHJlYWQtY2FjaGUuYzoxMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXBwZWFycyBhcyBib3RoIGEgZmlsZSBhbmQgYXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIuKAniVz4oCcINGB0YrRidC10YHRgtCy0YPQstCwINC4INC60LDRgtC+INGE0LDQudC7LCDQuCDQutCw0YLQviDQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogcmVhZC1jYWNoZS5jOjE1MzYKK21zZ2lkICJSZWZyZXNoIGluZGV4IgorbXNnc3RyICLQntCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiByZWFkLWNhY2hlLmM6MTY1MQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgotIlxuIgotIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKKyJpbmRleC52ZXJzaW9uIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCiBtc2dzdHIgIiIKLSLQn9C+0L/RgNCw0LLRj9C90LXRgtC+INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LXRg9GB0YLQsNC90L7QstC10L3Qvi5cbiIKLSJcbiIKLSLQotGA0Y/QsdCy0LAg0LTQsCDQt9Cw0LLRitGA0YjQuNGC0LUg0L/QvtC/0YDQsNCy0LrQsNGC0LAg0L3QsCDRgtC+0LLQsCDQv9C+0LTQsNCy0LDQvdC1LlxuIgorItCX0LDQtNCw0LTQtdC90LAg0LUg0L3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDQvdCwINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeaW5kZXgudmVyc2lvbuKAnC5cbiIKKyLQqdC1INGB0LUg0L/QvtC70LfQstCwINCy0LXRgNGB0LjRjyAlaSIKIAotIzogbGliL21lcmdlLnRjbDoyMjgKKyM6IHJlYWQtY2FjaGUuYzoxNjYxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJBYm9ydCBtZXJnZT9cbiIKLSJcbiIKLSJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKLSJcbiIKLSJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKKyJHSVRfSU5ERVhfVkVSU0lPTiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgogbXNnc3RyICIiCi0i0JTQsCDRgdC1INC/0YDQtdGD0YHRgtCw0L3QvtCy0Lgg0LvQuCDRgdC70LjQstCw0L3QtdGC0L4/XG4iCi0iXG4iCi0i0JIg0YLQsNC60YrQsiDRgdC70YPRh9Cw0Lkg4peP0JLQodCY0KfQmtCY4pePINC90LXQv9C+0LTQsNC00LXQvdC4INC/0YDQvtC80LXQvdC4INGJ0LUg0LHRitC00LDRgiDQsdC10LfQstGK0LfQstGA0LDRgtC90L4g0LfQsNCz0YPQsdC10L3QuC5cbiIKLSJcbiIKLSLQndCw0LjRgdGC0LjQvdCwINC70Lgg0LTQsCDRgdC1INC/0YDQtdGD0YHRgtCw0L3QvtCy0Lgg0YHQu9C40LLQsNC90LXRgtC+PyIKKyLQl9Cw0LTQsNC00LXQvdCwINC1INC90LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0L3QsCDQv9GA0L7QvNC10L3Qu9C40LLQsNGC0LAg0L3QsCDRgdGA0LXQtNCw0YLQsCAiCisi4oCeR0lUX0lOREVYX1ZFUlNJT07igJwuXG4iCisi0KnQtSDRgdC1INC/0L7Qu9C30LLQsCDQstC10YDRgdC40Y8gJWkiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjM0CisjOiByZWFkLWNhY2hlLmM6MTcxNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L/QvtC00L/QuNGBOiDigJ4weCUwOHjigJwiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICVkIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDQstC10YDRgdC40Y8g0L3QsCDQuNC90LTQtdC60YHQsCAlZCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjkKK21zZ2lkICJiYWQgaW5kZXggZmlsZSBzaGExIHNpZ25hdHVyZSIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L/QvtC00L/QuNGBINC30LAg0LrQvtC90YLRgNC+0LvQvdCwINGB0YPQvNCwINC/0L4gU0hBMSDQvdCwINGE0LDQudC70LAg0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogcmVhZC1jYWNoZS5jOjE3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggdXNlcyAlLjRzIGV4dGVuc2lvbiwgd2hpY2ggd2UgZG8gbm90IHVuZGVyc3RhbmQiCittc2dzdHIgIiIKKyLQuNC90LTQtdC60YHRitGCINC/0L7Qu9C30LLQsCDRgNCw0LfRiNC40YDQtdC90LjQtSDigJ4lLjRz4oCcLCDQutC+0LXRgtC+INC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwINC+0YIg0YLQsNC30Lgg0LLQtdGA0YHQuNGPINC90LAgZ2l0IgorCisjOiByZWFkLWNhY2hlLmM6MTc2MQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlLjRzIGV4dGVuc2lvbiIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQsNC90LUg0L3QsCDRgNCw0LfRiNC40YDQtdC90LjQtdGC0L4g4oCeJS40c+KAnCIKKworIzogcmVhZC1jYWNoZS5jOjE3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbmRleCBlbnRyeSBmb3JtYXQgMHglMDh4IgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINGE0L7RgNC80LDRgiDQvdCwINC30LDQv9C40YEg0LIg0LjQvdC00LXQutGB0LA6IOKAnjB4JTA4eOKAnCIKKworIzogcmVhZC1jYWNoZS5jOjE4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG5hbWUgZmllbGQgaW4gdGhlIGluZGV4LCBuZWFyIHBhdGggJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0LjQvNC1INC90LAg0L/QvtC70LUg0LIg0LjQvdC00LXQutGB0LAg0LHQu9C40LfQviDQtNC+INC/0YrRgtGPIOKAniVz4oCcIgorCisjOiByZWFkLWNhY2hlLmM6MTg3MQorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGluIGluZGV4IgorbXNnc3RyICLQvdC10L/QvtC00YDQtdC00LXQvdC4INC30LDQv9C40YHQuCDQsiDQuNC90LTQtdC60YHQsCIKKworIzogcmVhZC1jYWNoZS5jOjE4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgc3RhZ2UgZW50cmllcyBmb3IgbWVyZ2VkIGZpbGUgJyVzJyIKK21zZ3N0ciAi0LzQvdC+0LbQtdGB0YLQstC+INC30LDQv9C40YHQuCDQt9CwINGB0LvQtdGC0LjRjyDRhNCw0LnQuyDigJ4lc+KAnCIKKworIzogcmVhZC1jYWNoZS5jOjE4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgZm9yICclcyciCittc2dzdHIgItC90LXQv9C+0LTRgNC10LTQtdC90Lgg0LfQsNC/0LjRgdC4INC30LAg4oCeJXPigJwiCisKKyM6IHJlYWQtY2FjaGUuYzoxOTgzIHJlYWQtY2FjaGUuYzoyMjcxIHJlcmVyZS5jOjU2NSByZXJlcmUuYzo1OTkgcmVyZXJlLmM6MTExMQorIzogc3VibW9kdWxlLmM6MTYxOSBidWlsdGluL2FkZC5jOjUzMiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE4MQorIzogYnVpbHRpbi9jaGVja291dC5jOjQ3MCBidWlsdGluL2NoZWNrb3V0LmM6NjU2IGJ1aWx0aW4vY2xlYW4uYzo5NjcKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY3IGJ1aWx0aW4vZGlmZi10cmVlLmM6MTIwIGJ1aWx0aW4vZ3JlcC5jOjQ4NQorIzogYnVpbHRpbi9tdi5jOjE0NSBidWlsdGluL3Jlc2V0LmM6MjQ2IGJ1aWx0aW4vcm0uYzoyOTAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozMzIKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQiCittc2dzdHIgItGE0LDQudC70YrRgiDRgSDQuNC90LTQtdC60YHQsCDQtSDQv9C+0LLRgNC10LTQtdC9IgorCisjOiByZWFkLWNhY2hlLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGK0LfQtNCw0LTQtSDQvdC40YjQutCwINC30LAg0LfQsNGA0LXQttC00LDQvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSDQvtGCINC60LXRiNCwOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfRh9Cw0LrQsCDQvdC40YjQutCwINC30LAg0LfQsNGA0LXQttC00LDQvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSDQvtGCINC60LXRiNCwOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgb3BlbiBmYWlsZWQiCittc2dzdHIgIiVzOiDQvdC10YPRgdC/0LXRiNC90L4g0L7RgtCy0LDRgNGP0L3QtSDQvdCwINGE0LDQudC70LAg0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogcmVhZC1jYWNoZS5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4IgorbXNnc3RyICIlczog0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtC70YPRh9C4INC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L7RgtCy0L7RgNC10L3QuNGPINC40L3QtNC10LrRgSDRgdGK0YEg4oCec3RhdOKAnCIKKworIzogcmVhZC1jYWNoZS5jOjIxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgc21hbGxlciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIlczog0YTQsNC50LvRitGCINC90LAg0LjQvdC00LXQutGB0LAg0LUg0L/Qvi3QvNCw0LvRitC6INC+0YIg0L7Rh9Cw0LrQstCw0L3QvtGC0L4iCisKKyM6IHJlYWQtY2FjaGUuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmFibGUgdG8gbWFwIGluZGV4IGZpbGUiCittc2dzdHIgIiVzOiDQvdC10YPRgdC/0LXRiNC90L4g0LfQsNC00LXQu9GP0L3QtSDQvdCwINGB0YrQvtGC0LLQtdGC0YHRgtCy0LDRidCwINC/0LDQvNC10YIg0YfRgNC10Lcg4oCebW1hcOKAnCDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiByZWFkLWNhY2hlLmM6MjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0L3QuNGI0LrQsCDQt9CwINC30LDRgNC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9GI0LjRgNC10L3QuNGP0YLQsCDQvdCwINC40L3QtNC10LrRgdCwOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgIiIKKyLQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGK0LfQtNCw0LTQtSDQvdC40YjQutCwINC30LAg0LfQsNGA0LXQttC00LDQvdC1INC90LAg0YDQsNC30YjQuNGA0LXQvdC40Y/RgtCwINC90LAg0LjQvdC00LXQutGB0LA6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI4MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZnJlc2hlbiBzaGFyZWQgaW5kZXggJyVzJyIKK21zZ3N0ciAi0YHQv9C+0LTQtdC70LXQvdC40Y/RgiDQuNC90LTQtdC60YEg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7QsdC90L7QstC4IgorCisjOiByZWFkLWNhY2hlLmM6MjMzMAorIywgYy1mb3JtYXQKK21zZ2lkICJicm9rZW4gaW5kZXgsIGV4cGVjdCAlcyBpbiAlcywgZ290ICVzIgorbXNnc3RyICLQs9GA0LXRiNC60Lgg0LIg0LjQvdC00LXQutGB0LAg4oCUINCyIOKAniUyJHPigJwg0YHQtSDQvtGH0LDQutCy0LAg4oCeJTEkc+KAnCwg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvdC+IOKAniUzJHPigJwiCisKKyM6IHJlYWQtY2FjaGUuYzozMDI2IHN0cmJ1Zi5jOjExNjAgd3JhcHBlci5jOjYyMiBidWlsdGluL21lcmdlLmM6MTEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNGC0LLQvtGA0LgiCisKKyM6IHJlYWQtY2FjaGUuYzozMTI5IHNlcXVlbmNlci5jOjIzNDMgc2VxdWVuY2VyLmM6Mzk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ5zdGF04oCcINCy0YrRgNGF0YMg4oCeJXPigJwiCisKKyM6IHJlYWQtY2FjaGUuYzozMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIGdpdCBkaXI6ICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lgg0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC90LAgZ2l0OiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVubGluazogJXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30YLRgNC40LLQsNC90LUg0L3QsCDigJ4lc+KAnCIKKworIzogcmVhZC1jYWNoZS5jOjMxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpeCBwZXJtaXNzaW9uIGJpdHMgb24gJyVzJyIKK21zZ3N0ciAi0L/RgNCw0LLQsNGC0LAg0LfQsCDQtNC+0YHRgtGK0L8g0LTQviDigJ4lc+KAnCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC/0L7Qv9GA0LDQstC10L3QuCIKKworIzogcmVhZC1jYWNoZS5jOjMzMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBkcm9wIHRvIHN0YWdlICMwIgorbXNnc3RyICIlczog0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC10LzQuNC90LUg0LrRitC8INC10YLQsNC/IOKEljAiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjExCiBtc2dpZCAiIgotIlJlc2V0IGNoYW5nZXM/XG4iCi0iXG4iCi0iUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgotIlxuIgotIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgorIllvdSBjYW4gZml4IHRoaXMgd2l0aCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlJy5cbiIKKyJPciB5b3UgY2FuIGFib3J0IHRoZSByZWJhc2Ugd2l0aCAnZ2l0IHJlYmFzZSAtLWFib3J0Jy5cbiIKIG1zZ3N0ciAiIgotItCU0LAg0YHQtSDQt9Cw0L3Rg9C70Y/RgiDQu9C4INC/0YDQvtC80LXQvdC40YLQtT9cbiIKLSJcbiIKLSLQkiDRgtCw0LrRitCyINGB0LvRg9GH0LDQuSDil4/QktCh0JjQp9Ca0Jjil48g0L3QtdC/0L7QtNCw0LTQtdC90Lgg0L/RgNC+0LzQtdC90Lgg0YnQtSDQsdGK0LTQsNGCINCx0LXQt9Cy0YrQt9Cy0YDQsNGC0L3QviDQt9Cw0LPRg9Cx0LXQvdC4LlxuIgotIlxuIgotItCd0LDQuNGB0YLQuNC90LAg0LvQuCDQtNCwINGB0LUg0LfQsNC90YPQu9GP0YIg0L/RgNC+0LzQtdC90LjRgtC1PyIKKyLQnNC+0LbQtSDQtNCwINC/0YDQvtC80LXQvdC40YLQtSDRgtC+0LLQsCDRgSDQutC+0LzQsNC90LTQuNGC0LUg4oCeZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb+KAnCDQuCDigJ5naXQgcmViYXNlIC0tIgorImNvbnRpbnVl4oCcINGB0LvQtdC0INGC0L7QstCwLlxuIgorItCc0L7QttC1INC4INC00LAg0L/RgNC10YPRgdGC0LDQvdC+0LLQuNGC0LUg0L/RgNC10LHQsNC30LjRgNCw0L3QtdGC0L4g0YEg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCByZWJhc2UgLS1hYm9ydOKAnC5cbiIKIAotIzogbGliL21lcmdlLnRjbDoyNDUKLW1zZ2lkICJBYm9ydGluZyIKLW1zZ3N0ciAi0J/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1IgotCi0jOiBsaWIvbWVyZ2UudGNsOjI0NQotbXNnaWQgImZpbGVzIHJlc2V0IgotbXNnc3RyICLRhNCw0LnQu9CwINGB0YrRgSDQt9Cw0L3Rg9C70LXQvdC4INC/0YDQvtC80LXQvdC4IgotCi0jOiBsaWIvbWVyZ2UudGNsOjI3MwotbXNnaWQgIkFib3J0IGZhaWxlZC4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjI3NQotbXNnaWQgIkFib3J0IGNvbXBsZXRlZC4gIFJlYWR5LiIKLW1zZ3N0ciAi0KPRgdC/0LXRiNC90L4g0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1LiDQk9C+0YLQvtCy0L3QvtGB0YIg0LfQsCDRgdC70LXQtNCy0LDRidC+INC00LXQudGB0YLQstC40LUuIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo4Ci1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKLW1zZ3N0ciAi0JTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LHQsNC30L7QstCw0YLQsCDQstC10YDRgdC40Y8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjkKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoaXMgYnJhbmNoPyIKLW1zZ3N0ciAi0JTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LLQtdGA0YHQuNGP0YLQsCDQvtGCINGC0L7Qt9C4INC60LvQvtC9IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxMAotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIG90aGVyIGJyYW5jaD8iCi1tc2dzdHIgItCU0LAg0YHQtSDQuNC30L/QvtC70LfQstCwINCy0LXRgNGB0LjRj9GC0LAg0L7RgiDQtNGA0YPQs9C40Y8g0LrQu9C+0L0iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0Ci0jLCB0Y2wtZm9ybWF0CisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzozMworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKLSJcbiIKLSIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgotIlxuIgotIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCisidW5yZWNvZ25pemVkIHNldHRpbmcgJXMgZm9yIG9wdGlvbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JpbmcuIgogbXNnc3RyICIiCi0i0KDQsNC30LvQuNC60LDRgtCwINC/0L7QutCw0LfQstCwINGB0LDQvNC+INGA0LDQt9C70LjQutC40YLQtSDRgSDQutC+0L3RhNC70LjQutGCLlxuIgotIlxuIgotItCk0LDQudC70YrRgiDigJ4lc+KAnCDRidC1INCx0YrQtNC1INC/0YDQtdC30LDQv9C40YHQsNC9LlxuIgotIlxuIgotItCi0LDQt9C4INC+0L/QtdGA0LDRhtC40Y8g0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LzQtdC90LXQvdCwINGB0LDQvNC+INGH0YDQtdC3INC30LDQv9C+0YfQstCw0L3QtSDQvdCwINGB0LvQuNCy0LDQvdC10YLQviDQvdCw0L3QvtCy0L4uIgorItCd0LXQv9C+0LfQvdCw0YLQsCDRgdGC0L7QudC90L7RgdGCIOKAniVz4oCcINC30LDCoNC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCecmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2vigJwuICAiCisi0J3QsNGB0YLRgNC+0LnQutCw0YLQsCDRgdC1INC/0YDQtdGB0LrQsNGH0LAuIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgotbXNnc3RyICIiCi0i0JjQt9Cz0LvQtdC20LTQsCwg0YfQtSDQstGB0LUg0L7RidC1INC40LzQsCDQvdC10LrQvtGA0LjQs9C40YDQsNC90Lgg0LrQvtC90YTQu9C40LrRgtC4INCy0YrQsiDRhNCw0LnQu9CwIOKAniVz4oCcLiDQlNCwINGB0LUg0LTQvtCx0LDQstC4ICIKLSLQu9C4INGE0LDQudC70YrRgiDQutGK0Lwg0LjQvdC00LXQutGB0LA/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKLW1zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC60L7RgNC10LrRhtC40Y8g0L3QsCDQutC+0L3RhNC70LjQutGC0LjRgtC1INCyIOKAniVz4oCcIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDEKLW1zZ2lkICJDYW5ub3QgcmVzb2x2ZSBkZWxldGlvbiBvciBsaW5rIGNvbmZsaWN0cyB1c2luZyBhIHRvb2wiCi1tc2dzdHIgIiIKLSLQmtC+0L3RhNC70LjQutGC0LjRgtC1INC/0YDQuCDRgdC40LzQstC+0LvQvdC4INCy0YDRitC30LrQuCDQuNC70Lgg0LjQt9GC0YDQuNCy0LDQvdC1INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LrQvtGA0LjQs9C40YDQsNC90Lgg0YEgIgotItCy0YrQvdGI0L3QsCDQv9GA0L7Qs9GA0LDQvNCwLiIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MTQ2Ci1tc2dpZCAiQ29uZmxpY3QgZmlsZSBkb2VzIG5vdCBleGlzdCIKLW1zZ3N0ciAi0KTQsNC50LvRitGCLCDQsiDQutC+0LnRgtC+INC1INC60L7QvdGE0LvQuNC60YLRitGCLCDQvdC1INGB0YrRidC10YHRgtCy0YPQstCwIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoyNDYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKLW1zZ3N0ciAi0KLQvtCy0LAg0L3QtSDQtSDQs9GA0LDRhNC40YfQvdCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDRgdC70LjQstCw0L3QtTog4oCeJXPigJwiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjI3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuc3VwcG9ydGVkIG1lcmdlIHRvb2wgJyVzJyIKLW1zZ3N0ciAi0J3QtdC/0L7QtNC00YrRgNC20LDQvdCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDRgdC70LjQstCw0L3QtTog4oCeJXPigJwiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjMxMAotbXNnaWQgIk1lcmdlIHRvb2wgaXMgYWxyZWFkeSBydW5uaW5nLCB0ZXJtaW5hdGUgaXQ/IgotbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9CwINGB0LvQuNCy0LDQvdC1INCy0LXRh9C1INC1INGB0YLQsNGA0YLQuNGA0LDQvdCwLiDQlNCwINCx0YrQtNC1INC70Lgg0LjQt9C60LvRjtGH0LXQvdCwPyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MzMwCi0jLCB0Y2wtZm9ybWF0CisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo0MgogbXNnaWQgIiIKLSJFcnJvciByZXRyaWV2aW5nIHZlcnNpb25zOlxuIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21tYW5kPiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJiLCBicmVhayA9IHN0b3AgaGVyZSAoY29udGludWUgcmViYXNlIGxhdGVyIHdpdGggJ2dpdCByZWJhc2UgLS1jb250aW51ZScpXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLlxuIgorbXNnc3RyICIiCisiXG4iCisi0JrQvtC80LDQvdC00Lg6XG4iCisiIHAsIHBpY2sg0J/QntCU0JDQktCQ0J3QlSAgIOKAlCDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQvlxuIgorIiByLCByZXdvcmQg0J/QntCU0JDQktCQ0J3QlSDigJQg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4sINC90L4g0YHQvNGP0L3QsCDQvdCwINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LzRg1xuIgorIiBlLCBlZGl0INCf0J7QlNCQ0JLQkNCd0JUgICDigJQg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4g0Lgg0YHQv9C40YDQsNC90LUg0L/RgNC4INC90LXQs9C+INC30LAg0L7RidC1ICIKKyLQv9GA0L7QvNC10L3QuFxuIgorIiBzLCBzcXVhc2gg0J/QntCU0JDQktCQ0J3QlSDigJQg0LLQutCw0YDQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+INCyINC/0YDQtdC00YXQvtC00L3QvtGC0L4g0LzRg1xuIgorIiBmLCBmaXh1cCDQn9Ce0JTQkNCS0JDQndCVICDigJQg0LLQutCw0YDQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+INCyINC/0YDQtdC00YXQvtC00L3QvtGC0L4g0LzRgywg0LHQtdC3INGB0LzRj9C90LAg0L3QsFxuIgorIiAgICAgICAgICAgICAgICAgICAgICDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+XG4iCisiIHgsIGV4ZWMg0J/QntCU0JDQktCQ0J3QlSAgIOKAlCDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QvNCw0L3QtNCwINC60YrQvCDQvtCx0LLQuNCy0LrQsNGC0LA6INC+0YHRgtCw0L3QsNC70LDRgtCwINGH0LDRgdGCICIKKyLQvdCwXG4iCisiICAgICAgICAgICAgICAgICAgICAgINGA0LXQtNCwXG4iCisiIGIsIGJyZWFrICAgICAgICAgICDigJQg0YHQv9C40YDQsNC90LUgKNC80L7QttC1INC00LAg0L/RgNC+0LTRitC70LbQuNGC0LUg0L/RgNC10LHQsNC30LjRgNCw0L3QtdGC0L4g0YEg0LrQvtC80LDQvdC00LDRgtCwXG4iCisiICAgICAgICAgICAgICAgICAgICAgIOKAnmdpdCByZWJhc2UgLS1jb250aW51ZeKAnClcbiIKKyIgZCwgZHJvcCDQn9Ce0JTQkNCS0JDQndCVICAg4oCUINC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L5cbiIKKyIgbCwgbGFiZWwg0JXQotCY0JrQldCiICAgIOKAlCDQt9Cw0LTQsNCy0LDQvdC1INC90LAg0LXRgtC40LrQtdGCINC90LAg0YPQutCw0LfQsNC90L7RgtC+INC+0YIgSEVBRFxuIgorIiB0LCByZXNldCDQldCi0JjQmtCV0KIgICAg4oCUINC30LDQvdGD0LvRj9Cy0LDQvdC1INC90LAgSEVBRCDQutGK0Lwg0JXQotCY0JrQldCi0LBcbiIKKyIgbSwgbWVyZ2UgWy1DINCf0J7QlNCQ0JLQkNCd0JUgfCAtYyDQn9Ce0JTQkNCS0JDQndCVXSDQldCi0JjQmtCV0KIgWyMg0JXQlNCY0J1f0KDQldCUXVxuIgorIiAgICAgICAgICAgICAgICAgICAg4oCUINGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUg0YHRitGBINGB0LvQuNCy0LDQvdC1INGB0YrRgSDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC+0YJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1ICjQuNC70Lgg0YHRitC+0LHRidC10L3QuNC10YLQviDQvtGCINCV0JTQmNCdX9Cg0JXQlCxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAg0LDQutC+INC90LUg0LUg0LfQsNC00LDQtNC10L3QviDQv9C+0LTQsNCy0LDQvdC1INGB0YrRgSDRgdC70LjQstCw0L3QtS4gINChINC+0L/RhtC40Y/RgtCwXG4iCisiICAgICAgICAgICAgICAgICAgICAgIOKAni1jINCf0J7QlNCQ0JLQkNCd0JXigJwsINC80L7QttC1INC00LAg0YHQvNC10L3QuNGC0LUg0YHRitC+0LHRidC10L3QuNC10YLQvi5cbiIKKyJcbiIKKyLQnNC+0LbQtSDQtNCwINC/0YDQvtC80LXQvdGP0YLQtSDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvQvdC+0YHRgtGC0LAg0L3QsCDRgNC10LTQvtCy0LXRgtC1IOKAlCDRgtC1INGB0LUg0LjQt9C/0YrQu9C90Y/QstCw0YJcbiIKKyLQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvQvdC+INC+0YLQs9C+0YDQtS3QvdCw0LTQvtC70YMuXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmRzKSIKK21zZ3N0clswXSAi0J/RgNC10LHQsNC30LjRgNCw0L3QtSDQvdCwIOKAniVz4oCcINCy0YrRgNGF0YMg4oCeJXPigJwgKCVkINC60L7QvNCw0L3QtNC4KSIKK21zZ3N0clsxXSAi0J/RgNC10LHQsNC30LjRgNCw0L3QtSDQvdCwIOKAniVz4oCcINCy0YrRgNGF0YMg4oCeJXPigJwgKCVkINC60L7QvNCw0L3QtNCwKSIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzIgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIyOAorbXNnaWQgIiIKKyJcbiIKKyJEbyBub3QgcmVtb3ZlIGFueSBsaW5lLiBVc2UgJ2Ryb3AnIGV4cGxpY2l0bHkgdG8gcmVtb3ZlIGEgY29tbWl0LlxuIgorbXNnc3RyICIiCisiXG4iCisi0J3QtSDQuNC30YLRgNC40LLQsNC50YLQtSDRgNC10LTQvtCy0LUuICDQn9C+0LTQsNCy0LDQvdC40Y/RgtCwINC80L7Qs9Cw0YIg0LTQsCDRgdC1INC/0YDQtdGB0LrQsNGH0LDRgiDRgSDQutC+0LzQsNC90LTQsNGC0LAgIgorIuKAnmRyb3DigJwuXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc1IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMzIKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQkNC60L4g0LjQt9GC0YDQuNC10YLQtSDRgNC10LQsINGB0YrQvtGC0LLQtdGC0YHRgtCy0LDRidC+0YLQviDQvNGDINC/0L7QtNCw0LLQsNC90LUg0YnQtSDQsdGK0LTQtSDQmNCX0KLQoNCY0KLQni5cbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6ODEgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg3MQorbXNnaWQgIiIKKyJcbiIKKyJZb3UgYXJlIGVkaXRpbmcgdGhlIHRvZG8gZmlsZSBvZiBhbiBvbmdvaW5nIGludGVyYWN0aXZlIHJlYmFzZS5cbiIKKyJUbyBjb250aW51ZSByZWJhc2UgYWZ0ZXIgZWRpdGluZywgcnVuOlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorItCSINC80L7QvNC10L3RgtCwINGA0LXQtNCw0LrRgtC40YDQsNGC0LUg0YTQsNC50LvQsCDRgSDQutC+0LzQsNC90LTQuNGC0LUg0L3QsCDRgtC10LrRg9GJ0L7RgtC+INC40L3RgtC10YDQsNC60YLQuNCy0L3QviAiCisi0L/RgNC10LHQsNC30LjRgNCw0L3QtS5cbiIKKyLQl9CwINC00LAg0L/RgNC+0LTRitC70LbQuNGC0LUg0L/RgNC10LHQsNC30LjRgNCw0L3QtdGC0L4g0YHQu9C10LQg0YLQvtCy0LAsINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjg2IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDgKK21zZ2lkICIiCisiXG4iCisiSG93ZXZlciwgaWYgeW91IHJlbW92ZSBldmVyeXRoaW5nLCB0aGUgcmViYXNlIHdpbGwgYmUgYWJvcnRlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorItCQ0LrQviDQuNC30YLRgNC40LXRgtC1INCy0YHQuNGH0LrQviwg0L/RgNC10LHQsNC30LjRgNCw0L3QtdGC0L4g0YnQtSDQsdGK0LTQtSDQv9GA0LXRg9GB0YLQsNC90L7QstC10L3Qvi5cbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTEwIHJlcmVyZS5jOjQ4NSByZXJlcmUuYzo2OTIgc2VxdWVuY2VyLmM6MzQ0NAorIzogc2VxdWVuY2VyLmM6MzQ3MCBzZXF1ZW5jZXIuYzo1MTI1IGJ1aWx0aW4vZnNjay5jOjM0NiBidWlsdGluL3JlYmFzZS5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC/0LjRiNC1IgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMTYgYnVpbHRpbi9yZWJhc2UuYzoxODQgYnVpbHRpbi9yZWJhc2UuYzoyMTAKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnLiIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC/0LjRiNC1LiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS5cbiIKKyJEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKTpcbiIKK21zZ3N0ciAiIgorItCf0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6INC90Y/QutC+0Lgg0L/QvtC00LDQstCw0L3QuNGPINC80L7QttC1INC00LAg0YHQsCDQv9GA0L7Qv9GD0YHQvdCw0YLQuC5cbiIKKyLQn9GA0L7Qv9GD0YHQvdCw0YLQuCDQv9C+0LTQsNCy0LDQvdC40Y8gKNC90L7QstC40YLQtSDRgdCwINC90LDQuS3QvtGC0LPQvtGA0LUpOlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIGF2b2lkIHRoaXMgbWVzc2FnZSwgdXNlIFwiZHJvcFwiIHRvIGV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LlxuIgorIlxuIgorIlVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiAiCisid2FybmluZ3MuXG4iCisiVGhlIHBvc3NpYmxlIGJlaGF2aW91cnMgYXJlOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuIgorIlxuIgorbXNnc3RyICIiCisi0JfQsCDQtNCwINC90LUg0L/QvtC70YPRh9Cw0LLQsNGC0LUg0YLQvtCy0LAg0YHRitC+0LHRidC10L3QuNC1LCDQuNC30YDQuNGH0L3QviDQv9C+0LvQt9Cy0LDQudGC0LUg0LrQvtC80LDQvdC00LDRgtCwIOKAnmRyb3DigJwuXG4iCisiXG4iCisi0J3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5yZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVja+KAnCDRg9C/0YDQsNCy0LvRj9Cy0LAg0L3QuNCy0L7RgtC+INC90LAg0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtVxuIgorItCS0YrQt9C80L7QttC90LjRgtC1INGB0YLQvtC50L3QvtGB0YLQuCDRgdCwIOKAnmlnbm9yZeKAnCAo0L/RgNC10L3QtdCx0YDQtdCz0LLQsNC90LUpLCDigJ53YXJu4oCcICjRgdCw0LzQviAiCisi0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSlcbiIKKyLQuNC70Lgg4oCeZXJyb3LigJwgKNGB0YfQuNGC0LDQvdC1INC30LAg0LPRgNC10YjQutCwKS5cbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MjMzIHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjIzOCBzZXF1ZW5jZXIuYzoyMjYyCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MCBidWlsdGluL3JlYmFzZS5jOjE5NSBidWlsdGluL3JlYmFzZS5jOjIyMQorIzogYnVpbHRpbi9yZWJhc2UuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJy4iCittc2dzdHIgItC+0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YfQtdGC0LUuIgorCisjOiByZWZzLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgb2JqZWN0ISIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDRgdC+0YfQuCDQutGK0Lwg0L/QvtC30LLQvtC70LXQvSDQvtCx0LXQutGCISIKKworIzogcmVmcy5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQuyDQvdCwINC+0LHQtdC60YIg0LjQt9Cy0YrQvSDQutC70L7QvSDigJ4lc+KAnCIKKworIzogcmVmcy5jOjY2OSByZWYtZmlsdGVyLmM6MjA5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBicm9rZW4gcmVmICVzIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINC/0L7QstGA0LXQtNC10L3QuNGPINGD0LrQsNC30LDRgtC10Lsg4oCeJXPigJwiCisKKyM6IHJlZnMuYzo4MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSDQt9CwINC30LDQv9C40YE6ICVzIgorCisjOiByZWZzLmM6ODE0IHJlZnMuYzo4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICclcyciCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtGH0LXRgtC1IgorCisjOiByZWZzLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogcmVmcy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG9iamVjdCBJRCB3aGVuIHdyaXRpbmcgJyVzJyIKK21zZ3N0ciAi0L3QtdC+0YfQsNC60LLQsNC9INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC90LAg0L7QsdC10LrRgiDQv9GA0Lgg0LfQsNC/0LjRgdCy0LDQvdC10YLQviDQvdCwIOKAniVz4oCcIgorCisjOiByZWZzLmM6ODMzIHNlcXVlbmNlci5jOjQwNyBzZXF1ZW5jZXIuYzoyNzAxIHNlcXVlbmNlci5jOjI5MDUKKyM6IHNlcXVlbmNlci5jOjI5MTkgc2VxdWVuY2VyLmM6MzE3NyBzZXF1ZW5jZXIuYzo1MDM2IHN0cmJ1Zi5jOjExNTcKKyM6IHdyYXBwZXIuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgItCyIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0LjRiNC1IgorCisjOiByZWZzLmM6ODYwIHN0cmJ1Zi5jOjExNTUgd3JhcHBlci5jOjE4OCB3cmFwcGVyLmM6MzU4IGJ1aWx0aW4vYW0uYzo3MTkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTAyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0g0LfQsCDQt9Cw0L/QuNGBIgorCisjOiByZWZzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gZGVsZXRpbmcgJyVzJyIKK21zZ3N0ciAi0L3QtdC+0YfQsNC60LLQsNC9INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC90LAg0L7QsdC10LrRgiDQv9GA0Lgg0LjQt9GC0YDQuNCy0LDQvdC10YLQviDQvdCwIOKAniVz4oCcIgorCisjOiByZWZzLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIGhhcyBnYXAgYWZ0ZXIgJXMiCittc2dzdHIgItC40LzQsCDQv9GA0L7Qv9GD0YHQutC4INCyINC20YPRgNC90LDQu9CwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LfQsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeJXPigJwg0YHQu9C10LQg4oCeJXPigJwiCisKKyM6IHJlZnMuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIHVuZXhwZWN0ZWRseSBlbmRlZCBvbiAlcyIKK21zZ3N0ciAi0LbRg9GA0L3QsNC70YrRgiDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC30LAg0YPQutCw0LfQsNGC0LXQu9GPIOKAniVz4oCcINGB0LLRitGA0YjQstCwINC90LXQvtGH0LDQutCy0LDQvdC+INGB0LvQtdC0IOKAniVz4oCcIgorCisjOiByZWZzLmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICVzIGlzIGVtcHR5IgorbXNnc3RyICLQttGD0YDQvdCw0LvRitGCINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LfQsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeJXPigJwg0LUg0L/RgNCw0LfQtdC9IgorCisjOiByZWZzLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byB1cGRhdGUgcmVmIHdpdGggYmFkIG5hbWUgJyVzJyIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQuyDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtCx0L3QvtCy0Lgg0YEg0LPRgNC10YjQvdC+INC40LzQtSDigJ4lc+KAnCIKKworIzogcmVmcy5jOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBkYXRlX3JlZiBmYWlsZWQgZm9yIHJlZiAnJXMnOiAlcyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9GPIOKAniVz4oCcOiAlcyIKKworIzogcmVmcy5jOjIwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgdXBkYXRlcyBmb3IgcmVmICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgItC90LUg0YHQsCDQv9C+0LfQstC+0LvQtdC90Lgg0L/QvtCy0LXRh9C1INC+0YIg0LXQtNC90LAg0L/RgNC+0LzQtdC90Lgg0L3QsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeJXPigJwiCisKKyM6IHJlZnMuYzoyMDU1Cittc2dpZCAicmVmIHVwZGF0ZXMgZm9yYmlkZGVuIGluc2lkZSBxdWFyYW50aW5lIGVudmlyb25tZW50IgorbXNnc3RyICLQvtCx0L3QvtCy0Y/QstCw0L3QuNGP0YLQsCDQvdCwINGD0LrQsNC30LDRgtC10LvQuCDRgdCwINC30LDQsdGA0LDQvdC10L3QuCDQsiDRgdGA0LXQtNC4INC/0L7QtCDQutCw0YDQsNC90YLQuNC90LAiCisKKyM6IHJlZnMuYzoyMTUxIHJlZnMuYzoyMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIuKAniVz4oCcINGB0YrRidC10YHRgtCy0YPQstCwLCDQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGK0LfQtNCw0LTQtSDigJ4lc+KAnCIKKworIzogcmVmcy5jOjIxNTcgcmVmcy5jOjIxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHByb2Nlc3MgJyVzJyBhbmQgJyVzJyBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICLQvdC10LLRitC30LzQvtC20L3QviDQtSDQtdC00L3QvtCy0YDQtdC80LXQvdC90L4g0LTQsCDRgdC1INC+0LHRgNCw0LHQvtGC0LLQsNGCIOKAniVz4oCcINC4IOKAniVz4oCcIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgcmVmZXJlbmNlICVzIgorbXNnc3RyICLQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjQ3IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTQxCisjOiByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZSAlczogJXMiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YI6ICVzIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjUwIHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvQuNGC0LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNCw0YIg0LjQt9GC0YDQuNGC0Lg6ICVzIgorCisjOiByZWZzcGVjLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmc3BlYyAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRg9C60LDQt9Cw0YLQtdC7OiDigJ4lc+KAnCIKKworIzogcmVmLWZpbHRlci5jOjQyIHd0LXN0YXR1cy5jOjE5MzgKK21zZ2lkICJnb25lIgorbXNnc3RyICLQuNC30YLRgNC40YIiCisKKyM6IHJlZi1maWx0ZXIuYzo0MworIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCIKK21zZ3N0ciAi0L3QsNC/0YDQtdC0INGBICVkIgorCisjOiByZWYtZmlsdGVyLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmVoaW5kICVkIgorbXNnc3RyICLQvdCw0LfQsNC0INGBICVkIgorCisjOiByZWYtZmlsdGVyLmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQsIGJlaGluZCAlZCIKK21zZ3N0ciAi0L3QsNC/0YDQtdC0INGBICVkLCDQvdCw0LfQsNC0INGBICVkIgorCisjOiByZWYtZmlsdGVyLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoY29sb3I6PGNvbG9yPikiCittc2dzdHIgItC+0YfQsNC60LLQsNC9INGE0L7RgNC80LDRgjogJSUoY29sb3I60KbQktCv0KIpIgorCisjOiByZWYtZmlsdGVyLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBjb2xvcjogJSUoY29sb3I6JXMpIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINGG0LLRj9GCOiAlJShjb2xvcjolcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOmxzdHJpcD0lcyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCwINGB0LUg0YbRj9C70L4g0YfQuNGB0LvQviDQt9CwIOKAnnJlZm5hbWU6bHN0cmlwPSVz4oCcIgorCisjOiByZWYtZmlsdGVyLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpyc3RyaXA9JXMiCittc2dzdHIgItC+0YfQsNC60LLQsCDRgdC1INGG0Y/Qu9C+INGH0LjRgdC70L4g0LfQsCDigJ5yZWZuYW1lOnJzdHJpcD0lc+KAnCIKKworIzogcmVmLWZpbHRlci5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoJXMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgiDQsNGA0LPRg9C80LXQvdGCINC30LAg4oCeJSUoJXMp4oCcOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShvYmplY3R0eXBlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUob2JqZWN0dHlwZSkg0L3QtSDQv9GA0LjQtdC80LAg0LDRgNCz0YPQvNC10L3RgtC4IgorCisjOiByZWYtZmlsdGVyLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RzaXplKSBhcmd1bWVudDogJXMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIg0LDRgNCz0YPQvNC10L3RgiDQt9CwICUlKG9iamVjdHNpemUpOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShkZWx0YWJhc2UpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShkZWx0YWJhc2UpINC90LUg0L/RgNC40LXQvNCwINCw0YDQs9GD0LzQtdC90YLQuCIKKworIzogcmVmLWZpbHRlci5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJShib2R5KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoYm9keSkg0L3QtSDQv9GA0LjQtdC80LAg0LDRgNCz0YPQvNC10L3RgtC4IgorCisjOiByZWYtZmlsdGVyLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKHN1YmplY3QpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShzdWJqZWN0KSDQvdC1INC/0YDQuNC10LzQsCDQsNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IHJlZi1maWx0ZXIuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAlJSh0cmFpbGVycykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINCw0YDQs9GD0LzQtdC90YIg4oCeJSUodHJhaWxlcnMp4oCcOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCwINGB0LUg0L/QvtC70L7QttC40YLQtdC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCeY29udGVudHM6bGluZXM9JXPigJwiCisKKyM6IHJlZi1maWx0ZXIuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGNvbnRlbnRzKSBhcmd1bWVudDogJXMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIg0LDRgNCz0YPQvNC10L3RgiDQt9CwICUlKGNvbnRlbnRzKTogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgb2JqZWN0bmFtZTpzaG9ydD0lcyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCwINGB0LUg0L/QvtC70L7QttC40YLQtdC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCeb2JqZWN0bmFtZTpzaG9ydD0lc+KAnCIKKworIzogcmVmLWZpbHRlci5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0bmFtZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINCw0YDQs9GD0LzQtdC90YIg0LfQsCAlJShvYmplY3RuYW1lKTogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShhbGlnbjo8d2lkdGg+LDxwb3NpdGlvbj4pIgorbXNnc3RyICLQvtGH0LDQutCy0LDQvSDRhNC+0YDQvNCw0YI6ICUlKGFsaWduOtCo0JjQoNCe0KfQmNCd0JAs0J/QntCX0JjQptCY0K8pIgorCisjOiByZWYtZmlsdGVyLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwb3NpdGlvbjolcyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINC/0L7Qt9C40YbQuNGPOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2lkdGg6JXMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDRiNC40YDQvtGH0LjQvdCwOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoYWxpZ24pIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgiDQsNGA0LPRg9C80LXQvdGCINC30LAgJSUoYWxpZ24pOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB3aWR0aCBleHBlY3RlZCB3aXRoIHRoZSAlJShhbGlnbikgYXRvbSIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCwINGB0LUg0L/QvtC70L7QttC40YLQtdC70L3QsCDRiNC40YDQvtGH0LjQvdCwINGBINC70LXQutGB0LXQvNCw0YLQsCDigJ4lJShhbGlnbinigJwiCisKKyM6IHJlZi1maWx0ZXIuYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGlmKSBhcmd1bWVudDogJXMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIg0LDRgNCz0YPQvNC10L3RgiDQt9CwIOKAniUlKGlmKeKAnDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINC+0LHQtdC60YI6IOKAniUuKnPigJwiCisKKyM6IHJlZi1maWx0ZXIuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0L4g0LjQvNC1INC90LAg0L7QsdC10LrRgjog4oCeJS4qc+KAnCIKKworIzogcmVmLWZpbHRlci5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnksIGJ1dCB0aGUgZmllbGQgJyUuKnMnIHJlcXVpcmVzIGFjY2VzcyB0byBvYmplY3QgZGF0YSIKK21zZ3N0ciAi0L3QtSDQtSDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBnaXQsINCwINC/0L7Qu9C10YLQviDigJ4lLipz4oCcINC40LfQuNGB0LrQstCwINC00L7RgdGC0YrQvyDQtNCw0L3QvdC4INC90LAg0L7QsdC10LrRgtC90LgiCisKKyM6IHJlZi1maWx0ZXIuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShpZikgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICLRhNC+0YDQvNCw0YI6INC70LXQutGB0LXQvNCw0YLQsCAlJShpZikg0LUg0LjQt9C/0L7Qu9C30LLQsNC90LAg0LHQtdC3INGB0YrQvtGC0LLQtdGC0L3QsNGC0LAg0Z0gJSUodGhlbikiCisKKyM6IHJlZi1maWx0ZXIuYzo3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCOiDQu9C10LrRgdC10LzQsNGC0LAgJSUodGhlbikg0LUg0LjQt9C/0L7Qu9C30LLQsNC90LAg0LHQtdC3INGB0YrQvtGC0LLQtdGC0L3QsNGC0LAg0Z0gJSUoaWYpIgorCisjOiByZWYtZmlsdGVyLmM6Nzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICLRhNC+0YDQvNCw0YI6INC70LXQutGB0LXQvNCw0YLQsCAlJSh0aGVuKSDQtSDQuNC30L/QvtC70LfQstCw0L3QsCDQv9C+0LLQtdGH0LUg0L7RgiDQtdC00LjQvSDQv9GK0YIiCisKKyM6IHJlZi1maWx0ZXIuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgYWZ0ZXIgJSUoZWxzZSkiCittc2dzdHIgItGE0L7RgNC80LDRgjog0LvQtdC60YHQtdC80LDRgtCwICUlKHRoZW4pINC1INC40LfQv9C+0LvQt9Cy0LDQvdCwINGB0LvQtdC0ICUlKGVsc2UpIgorCisjOiByZWYtZmlsdGVyLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgItGE0L7RgNC80LDRgjog0LvQtdC60YHQtdC80LDRgtCwICUlKGVsc2UpINC1INC40LfQv9C+0LvQt9Cy0LDQvdCwINCx0LXQtyDRgdGK0L7RgtCy0LXRgtC90LDRgtCwINGdICUlKGlmKSIKKworIzogcmVmLWZpbHRlci5jOjgxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCOiDQu9C10LrRgdC10LzQsNGC0LAgJSUoZWxzZSkg0LUg0LjQt9C/0L7Qu9C30LLQsNC90LAg0LHQtdC3INGB0YrQvtGC0LLQtdGC0L3QsNGC0LAg0Z0gJSUodGhlbikiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgItGE0L7RgNC80LDRgjog0LvQtdC60YHQtdC80LDRgtCwICUlKGVsc2UpINC1INC40LfQv9C+0LvQt9Cy0LDQvdCwINC/0L7QstC10YfQtSDQvtGCINC10LTQuNC9INC/0YrRgiIKKworIzogcmVmLWZpbHRlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSB1c2VkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBhdG9tIgorbXNnc3RyICLRhNC+0YDQvNCw0YI6INC70LXQutGB0LXQvNCw0YLQsCAlJShlbmQpINC1INC40LfQv9C+0LvQt9Cy0LDQvdCwINCx0LXQtyDRgdGK0L7RgtCy0LXRgtC90LDRgtCwINGdIgorCisjOiByZWYtZmlsdGVyLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmb3JtYXQgc3RyaW5nICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRhNC+0YDQvNCw0YLQuNGA0LDRiSDQvdC40Lcg4oCeJXPigJwiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgcmViYXNpbmcgJXMiCittc2dzdHIgItC40LfQstGK0L0g0LrQu9C+0L0sINC/0YDQtdCx0LDQt9C40YDQsNC90LUg0L3QsCDigJ4lc+KAnCIKKworIzogcmVmLWZpbHRlci5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyBkZXRhY2hlZCBIRUFEICVzIgorbXNnc3RyICLQuNC30LLRitC9INC60LvQvtC9LCDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INC90LAg0L3QtdGB0LLRitGA0LfQsNC9INGD0LrQsNC30LDRgtC10Lsg4oCeSEVBROKAnCDQv9GA0Lgg4oCeJXPigJwiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gJXMiCittc2dzdHIgItC40LfQstGK0L0g0LrQu9C+0L0sINC00LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1INC+0YIg4oCeJXPigJwiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTA0Cittc2dpZCAibm8gYnJhbmNoIgorbXNnc3RyICLQuNC30LLRitC9INC60LvQvtC9IgorCisjOiByZWYtZmlsdGVyLmM6MTU0MCByZWYtZmlsdGVyLmM6MTc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcINC70LjQv9GB0LLQsCDQt9CwIOKAniVz4oCcIgorCisjOiByZWYtZmlsdGVyLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXJzZV9vYmplY3RfYnVmZmVyIGZhaWxlZCBvbiAlcyBmb3IgJXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQsNC90LDQu9C40LfQuNGA0LDQvdC1INGH0YDQtdC3IOKAnnBhcnNlX29iamVjdF9idWZmZXLigJwg0L3QsCDigJ4lc+KAnCDQt9CwIOKAniVz4oCcIgorCisjOiByZWYtZmlsdGVyLmM6MjAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IGF0ICclcyciCittc2dzdHIgItC+0LHQtdC60YIg0YHRitGBINGB0LPRgNC10YjQtdC9INGE0L7RgNC80LDRgiDQv9GA0Lgg4oCeJXPigJwiCisKKyM6IHJlZi1maWx0ZXIuYzoyMDkzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHJlZiB3aXRoIGJyb2tlbiBuYW1lICVzIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINGD0LrQsNC30LDRgtC10LvRjyDRgSDQs9GA0LXRiNC90L4g0LjQvNC1IOKAniVz4oCcIgorCisjOiByZWYtZmlsdGVyLmM6MjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSBtaXNzaW5nIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0LLRitCyINGE0L7RgNC80LDMgNGC0LA6INC70LjQv9GB0LLQsCDQu9C10LrRgdC10LzQsNGC0LAgJSUoZW5kKSIKKworIzogcmVmLWZpbHRlci5jOjI0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1tZXJnZWQiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAniVz4oCcINC4IOKAni0tbWVyZ2Vk4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiByZWYtZmlsdGVyLmM6MjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLW1lcmdlZCIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeJXPigJwg0Lgg4oCeLS1uby1tZXJnZWTigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0LjQvNC1INC90LAg0L7QsdC10LrRgiDigJ4lc+KAnCIKKworIzogcmVmLWZpbHRlci5jOjI1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgbXVzdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDRgdC+0YfQuCDQutGK0Lwg0L/QvtC00LDQstCw0L3QtSIKKworIzogcmVtb3RlLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZpZyByZW1vdGUgc2hvcnRoYW5kIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgIiIKKyLRgdGK0LrRgNCw0YnQtdC90LjQtdGC0L4g0LfQsCDQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QtSDQvNC+0LbQtSDQt9CwINC30LDQv9C+0YfQstCwINGB0YrRgSDQt9C90LDQutCwIOKAni/igJw6ICVzIgorCisjOiByZW1vdGUuYzo0MTQKK21zZ2lkICJtb3JlIHRoYW4gb25lIHJlY2VpdmVwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgItC30LDQtNCw0LTQtdC9INC1INC/0L7QstC10YfQtSDQvtGCINC10LTQuNC9INC/0LDQutC10YIg0LfQsCDQv9C+0LvRg9GH0LDQstCw0L3QtSwg0YnQtSDRgdC1INC/0L7Qu9C30LLQsCDQv9GK0YDQstC40Y/RgiIKKworIzogcmVtb3RlLmM6NDIyCittc2dpZCAibW9yZSB0aGFuIG9uZSB1cGxvYWRwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgItC30LDQtNCw0LTQtdC9INC1INC/0L7QstC10YfQtSDQvtGCINC10LTQuNC9INC/0LDQutC10YIg0LfQsCDQuNC30L/RgNCw0YnQsNC90LUsINGJ0LUg0YHQtSDQv9C+0LvQt9Cy0LAg0L/RitGA0LLQuNGP0YIiCisKKyM6IHJlbW90ZS5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYm90aCAlcyBhbmQgJXMgdG8gJXMiCittc2dzdHIgItCd0LXQstGK0LfQvNC+0LbQvdC+INC1INC00LAg0YHQtSDQtNC+0YHRgtCw0LLRj9GCINC10LTQvdC+0LLRgNC10LzQtdC90L3QviDQuCDigJ4lc+KAnCwg0Lgg4oCeJXPigJwg0LrRitC8IOKAniVz4oCcIgorCisjOiByZW1vdGUuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L7QsdC40LrQvdC+0LLQtdC90L4g0YHQu9C10LTQuCDigJ4lc+KAnCwg0LAg0L3QtSDigJ4lc+KAnCIKKworIzogcmVtb3RlLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyYWNrcyBib3RoICVzIGFuZCAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0YHQu9C10LTQuCDQutCw0LrRgtC+IOKAniVz4oCcLCDRgtCw0LrQsCDQuCDigJ4lc+KAnCIKKworIzogcmVtb3RlLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImtleSAnJXMnIG9mIHBhdHRlcm4gaGFkIG5vICcqJyIKK21zZ3N0ciAi0LrQu9GO0Ycg4oCeJXPigJwg0L3QsCDRiNCw0LHQu9C+0L3QsCDQvdC1INGB0YrQtNGK0YDQttCwIOKAnirigJwiCisKKyM6IHJlbW90ZS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIKK21zZ3N0ciAi0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCDQvdCwINGI0LDQsdC70L7QvdCwINC90LUg0YHRitC00YrRgNC20LAg4oCeKuKAnCIKKworIzogcmVtb3RlLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCINC90LAg0LLQtdGA0YHQuNGPLdC40LfRgtC+0YfQvdC40Log4oCeJXPigJwg0L3QtSDRgdGK0LLQv9Cw0LTQsCDRgSDQvdC40LrQvtC5INC+0LHQtdC60YIiCisKKyM6IHJlbW90ZS5jOjEwMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDQvdCwINCy0LXRgNGB0LjRjy3QuNC30YLQvtGH0L3QuNC6IOKAniVz4oCcINGB0YrQstC/0LDQtNCwINGBINC/0L7QstC10YfQtSDQvtGCINC10LTQuNC9INC+0LHQtdC60YIiCisKKyMuIFRSQU5TTEFUT1JTOiAibWF0Y2hlcyAnJXMnJSIgaXMgdGhlIDxkc3Q+IHBhcnQgb2YgImdpdCBwdXNoCisjLiA8cmVtb3RlPiA8c3JjPjo8ZHN0PiIgcHVzaCwgYW5kICJiZWluZyBwdXNoZWQgKCclcycpIiBpcworIy4gdGhlIDxzcmM+LgorIy4KKyM6IHJlbW90ZS5jOjEwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXN0aW5hdGlvbiB5b3UgcHJvdmlkZWQgaXMgbm90IGEgZnVsbCByZWZuYW1lIChpLmUuLFxuIgorInN0YXJ0aW5nIHdpdGggXCJyZWZzL1wiKS4gV2UgdHJpZWQgdG8gZ3Vlc3Mgd2hhdCB5b3UgbWVhbnQgYnk6XG4iCisiXG4iCisiLSBMb29raW5nIGZvciBhIHJlZiB0aGF0IG1hdGNoZXMgJyVzJyBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiLSBDaGVja2luZyBpZiB0aGUgPHNyYz4gYmVpbmcgcHVzaGVkICgnJXMnKVxuIgorIiAgaXMgYSByZWYgaW4gXCJyZWZzL3toZWFkcyx0YWdzfS9cIi4gSWYgc28gd2UgYWRkIGEgY29ycmVzcG9uZGluZ1xuIgorIiAgcmVmcy97aGVhZHMsdGFnc30vIHByZWZpeCBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiXG4iCisiTmVpdGhlciB3b3JrZWQsIHNvIHdlIGdhdmUgdXAuIFlvdSBtdXN0IGZ1bGx5IHF1YWxpZnkgdGhlIHJlZi4iCittc2dzdHIgIiIKKyLQl9Cw0LTQsNC00LXQvdCw0YLQsCDRhtC10Lsg0L3QtSDQtSDQv9GK0LvQvdC+INC40LzQtSDQvdCwINGD0LrQsNC30LDRgtC10LsgKNC90LUg0LfQsNC/0L7Rh9Cy0LAg0YEg4oCecmVmcy/igJwpLlxuIgorItCR0Y/RhdCwINC/0YDQvtCx0LLQsNC90Lgg0YHQu9C10LTQvdC40YLQtSDQstCw0YDQuNCw0L3RgtC4OlxuIgorIlxuIgorIiAg4oGDINGD0LrQsNC30LDRgtC10Lsg0L7RgiDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1LCDQutC+0LnRgtC+INC00LAg0YHRitC+0YLQstC10YLRgdGC0LLQsCDQvdCwIOKAniVz4oCcO1xuIgorIiAg4oGDINC00LDQu9C4INC40LfRgtC70LDRgdC60LLQsNC90LjRj9GCINCY0JfQotCe0KfQndCY0JogKOKAniVz4oCcKSDQtSDRg9C60LDQt9Cw0YLQtdC7INCyIOKAnnJlZnMve2hlYWRzLHRhZ3N9L+KAnC5cbiIKKyIgICAg0J/RgNC4INGB0YrQstC/0LDQtNC10L3QuNC1INGB0LUg0LTQvtCx0LDQstGPINGB0YrQvtGC0LLQtdGC0LXQvSDQv9GA0LXRhNC40LrRgSDigJ5yZWZzL3toZWFkcyx0YWdzfS/igJwg0LfQsFxuIgorIiAgICDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1LlxuIgorIlxuIgorItCd0LjQutC+0Lkg0L7RgiDQstCw0YDQuNCw0L3RgtC40YLQtSDQvdC1INGB0YDQsNCx0L7RgtC4LiAg0KLRgNGP0LHQstCwINGB0LDQvNC4INC00LAg0YPQutCw0LbQtdGC0LUg0L/RitC70L3QvtGC0L4g0LjQvNC1INC90LBcbiIKKyLRg9C60LDQt9Cw0YLQtdC70Y8uIgorCisjOiByZW1vdGUuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGNvbW1pdCBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL2hlYWRzLyVzJz8iCittc2dzdHIgIiIKKyLQmNCX0KLQntCn0J3QmNCa0YrRgiDQtSDQvtCx0LXQutGCLdC/0L7QtNCw0LLQsNC90LUuICDQndC1INGG0LXQu9C40YLQtSDQu9C4INCy0YHRitGJ0L3QvtGB0YIg0LTQsCDRgdGK0LfQtNCw0LTQtdGC0LUg0L3QvtCyINC60LvQvtC9ICIKKyLQutCw0YLQvlxuIgorItC40LfRgtC70LDRgdC60LDRgtC1INC60YrQvCDigJ4lczpyZWZzL2hlYWRzLyVz4oCcPyIKKworIzogcmVtb3RlLmM6MTA0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0YWcgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgdGFnIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyLQmNCX0KLQntCn0J3QmNCa0YrRgiDQtSDQvtCx0LXQutGCLdC10YLQuNC60LXRgi4gINCd0LUg0YbQtdC70LjRgtC1INC70Lgg0LLRgdGK0YnQvdC+0YHRgiDQtNCwINGB0YrQt9C00LDQtNC10YLQtSDQvdC+0LIg0LrQu9C+0L0gIgorItC60LDRgtC+XG4iCisi0LjQt9GC0LvQsNGB0LrQsNGC0LUg0LrRitC8IOKAniVzOnJlZnMvdGFncy8lc+KAnD8iCisKKyM6IHJlbW90ZS5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgdHJlZSBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyB0cmVlIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyLQmNCX0KLQntCn0J3QmNCa0YrRgiDQtSDQvtCx0LXQutGCLdC00YrRgNCy0L4uICDQndC1INGG0LXQu9C40YLQtSDQu9C4INCy0YHRitGJ0L3QvtGB0YIg0LTQsCDRgdGK0LfQtNCw0LTQtdGC0LUg0L3QvtCyINC60LvQvtC9INC60LDRgtC+XG4iCisi0LjQt9GC0LvQsNGB0LrQsNGC0LUg0LrRitC8IOKAniVzOnJlZnMvdGFncy8lc+KAnD8iCisKKyM6IHJlbW90ZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgYmxvYiBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyBibG9iIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyLQmNCX0KLQntCn0J3QmNCa0YrRgiDQtSDQvtCx0LXQutGCLUJMT0IuICDQndC1INGG0LXQu9C40YLQtSDQu9C4INCy0YHRitGJ0L3QvtGB0YIg0LTQsCDRgdGK0LfQtNCw0LTQtdGC0LUg0L3QvtCyINC60LvQvtC9INC60LDRgtC+XG4iCisi0LjQt9GC0LvQsNGB0LrQsNGC0LUg0LrRitC8IOKAniVzOnJlZnMvdGFncy8lc+KAnD8iCisKKyM6IHJlbW90ZS5jOjEwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGJyYW5jaCIKK21zZ3N0ciAi0L3QtSDQtSDQvtGC0LrRgNC40YIg0LrQu9C+0L0g0YHRitC+0YLQstC10YLRgdGC0LLQsNGJINC90LAg4oCeJXPigJwiCisKKyM6IHJlbW90ZS5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlbGV0ZSAnJXMnOiByZW1vdGUgcmVmIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30YLRgNC40LU6INC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0YPQutCw0LfQsNGC0LXQuyDQvdC1INGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiByZW1vdGUuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg0L3QsCDQstC10YDRgdC40Y8t0YbQtdC7IOKAniVz4oCcINGB0YrQstC/0LDQtNCwINGBINC/0L7QstC10YfQtSDQvtGCINC10LTQuNC9INC+0LHQtdC60YIiCisKKyM6IHJlbW90ZS5jOjExMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHN0IHJlZiAlcyByZWNlaXZlcyBmcm9tIG1vcmUgdGhhbiBvbmUgc3JjIgorbXNnc3RyICIiCisi0YPQutCw0LfQsNGC0LXQu9GP0YIg0L3QsCDQstC10YDRgdC40Y8t0YbQtdC7IOKAniVz4oCcINGB0YrQvtGC0LLQtdGC0YHRgtCy0LAg0Lgg0YnQtSDQv9C+0LvRg9GH0LDQstCwINC+0YIg0L/QvtCy0LXRh9C1INC+0YIg0LXQtNC40L0gIgorItC40LfRgtC+0YfQvdC40LoiCisKKyM6IHJlbW90ZS5jOjE2MjggcmVtb3RlLmM6MTcyOQorbXNnaWQgIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDRgdC+0YfQuCDQutGK0Lwg0LrQu9C+0L0iCisKKyM6IHJlbW90ZS5jOjE2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgItC90Y/QvNCwINC60LvQvtC9INC90LAg0LjQvNC1IOKAniVz4oCcIgorCisjOiByZW1vdGUuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICLQvdC1INC1INC30LDQtNCw0LTQtdC9INC60LvQvtC9LdC40LfRgtC+0YfQvdC40Log0LfQsCDQutC70L7QvdCwIOKAniVz4oCcIgorCisjOiByZW1vdGUuYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLQutC70L7QvdGK0YIt0LjQt9GC0L7Rh9C90LjQuiDigJ4lc+KAnCDQvdC1INC1INGB0YrRhdGA0LDQvdC10L0g0LrQsNGC0L4g0YHQu9C10LTRj9GJINC60LvQvtC9IgorCisjOiByZW1vdGUuYzoxNjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggZGVzdGluYXRpb24gJyVzJyBvbiByZW1vdGUgJyVzJyBoYXMgbm8gbG9jYWwgdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisi0LvQuNC/0YHQstCwINC70L7QutCw0LvQtdC9INGB0LvQtdC00Y/RiSDQutC70L7QvSDQt9CwINC80LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LXRgtC+INC30LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDigJ4lc+KAnCDQsiAiCisi0YXRgNCw0L3QuNC70LjRidC10YLQviDigJ4lc+KAnCIKKworIzogcmVtb3RlLmM6MTY3MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICLQvdGP0LzQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQutC70L7QvdGK0YIg4oCeJXPigJwg0LTQsCDRgdC70LXQtNC4INC90Y/QutC+0Lkg0LTRgNGD0LMiCisKKyM6IHJlbW90ZS5jOjE2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDQt9CwINC40LfRgtC70LDRgdC60LLQsNC90LUg0L3QsCDigJ4lc+KAnCDQvdC1INCy0LrQu9GO0YfQstCwIOKAniVz4oCcIgorCisjOiByZW1vdGUuYzoxNjk2Cittc2dpZCAicHVzaCBoYXMgbm8gZGVzdGluYXRpb24gKHB1c2guZGVmYXVsdCBpcyAnbm90aGluZycpIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDQt9CwINC40LfRgtC70LDRgdC60LLQsNC90LUg0L3QtSDQstC60LvRjtGH0LLQsCDRhtC10LsgKOKAnnB1c2guZGVmYXVsdOKAnCDQtSDigJ5ub3RoaW5n4oCcKSIKKworIzogcmVtb3RlLmM6MTcxOAorbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgItC/0YDQvtGB0YLQvtGC0L4gKHNpbXBsZSkg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDQvdC1INGB0YrQvtGC0LLQtdGC0YHRgtCy0LAg0L3QsCDQtdC00L3QsCDRhtC10LsiCisKKyM6IHJlbW90ZS5jOjE4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZmluZCByZW1vdGUgcmVmICVzIgorbXNnc3RyICLQvtGC0LTQsNC70LXRh9C10L3QuNGP0YIg0YPQutCw0LfQsNGC0LXQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGCIgorCisjOiByZW1vdGUuYzoxODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiogSWdub3JpbmcgZnVubnkgcmVmICclcycgbG9jYWxseSIKK21zZ3N0ciAi4oCiINC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0L3QtdC+0YfQsNC60LLQsNC90LjRjyDQu9C+0LrQsNC70LXQvSDRg9C60LDQt9Cw0YLQtdC7IOKAniVz4oCcIgorCisjOiByZW1vdGUuYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJhc2VkIG9uICclcycsIGJ1dCB0aGUgdXBzdHJlYW0gaXMgZ29uZS5cbiIKK21zZ3N0ciAi0KLQvtC30Lgg0LrQu9C+0L0g0YHQu9C10LTQuCDigJ4lc+KAnCwg0L3QviDRgdC70LXQtNC10L3QuNGP0YIg0LrQu9C+0L0g0LUg0LjQt9GC0YDQuNGCLlxuIgorCisjOiByZW1vdGUuYzoyMDI0Cittc2dpZCAiICAodXNlIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgdG8gZml4dXApXG4iCittc2dzdHIgIiAgKNC30LAg0LTQsCDQutC+0YDQuNCz0LjRgNCw0YLQtSDRgtC+0LLQsCwg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW3igJwpXG4iCisKKyM6IHJlbW90ZS5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAgdG8gZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgItCa0LvQvtC90YrRgiDQtSDQsNC60YLRg9Cw0LvQuNC30LjRgNCw0L0g0LrRitC8IOKAniVz4oCcLlxuIgorCisjOiByZW1vdGUuYzoyMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGFuZCAnJXMnIHJlZmVyIHRvIGRpZmZlcmVudCBjb21taXRzLlxuIgorbXNnc3RyICLQmtC70L7QvdGK0YIg0LLQuCDQuCDigJ4lc+KAnCDRgdC+0YfQsNGCINC60YrQvCDRgNCw0LfQu9C40YfQvdC4INC/0L7QtNCw0LLQsNC90LjRjy5cbiIKKworIzogcmVtb3RlLmM6MjAzNAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCIlc1wiIGZvciBkZXRhaWxzKVxuIgorbXNnc3RyICIgICjQt9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQv9C+0LvQt9Cy0LDQudGC0LUg4oCeJXPigJwpXG4iCisKKyM6IHJlbW90ZS5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAi0JrQu9C+0L3RitGCINCy0Lgg0LUg0YEgJTIkZCDQv9C+0LTQsNCy0LDQvdC1INC/0YDQtdC0IOKAniUxJHPigJwuXG4iCittc2dzdHJbMV0gItCa0LvQvtC90YrRgiDQstC4INC1INGBICUyJGQg0L/QvtC00LDQstCw0L3QuNGPINC/0YDQtdC0IOKAniUxJHPigJwuXG4iCisKKyM6IHJlbW90ZS5jOjIwNDQKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIgorbXNnc3RyICIgICjQv9GD0LHQu9C40LrRg9Cy0LDQudGC0LUg0LvQvtC60LDQu9C90LjRgtC1INGB0Lgg0L/RgNC+0LzQtdC90Lgg0YfRgNC10Lcg4oCeZ2l0IHB1c2jigJwpXG4iCisKKyM6IHJlbW90ZS5jOjIwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAi0JrQu9C+0L3RitGCINCy0Lgg0LUg0YEgJTIkZCDQv9C+0LTQsNCy0LDQvdC1INC30LDQtCDigJ4lMSRz4oCcINC4INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC10LLRitGA0YLRj9C9LlxuIgorbXNnc3RyWzFdICLQmtC70L7QvdGK0YIg0LLQuCDQtSDRgSAlMiRkINC/0L7QtNCw0LLQsNC90LjRjyDQt9Cw0LQg4oCeJTEkc+KAnCDQuCDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQtdCy0YrRgNGC0Y/QvS5cbiIKKworIzogcmVtb3RlLmM6MjA1NQorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gdXBkYXRlIHlvdXIgbG9jYWwgYnJhbmNoKVxuIgorbXNnc3RyICIgICjQvtCx0L3QvtCy0LXRgtC1INC70L7QutCw0LvQvdC40Y8g0YHQuCDQutC70L7QvSDRh9GA0LXQtyDigJ5naXQgcHVsbOKAnClcbiIKKworIzogcmVtb3RlLmM6MjA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKKyLQotC10LrRg9GJ0LjRj9GCINC60LvQvtC9INGB0LUg0LUg0L7RgtC00LXQu9C40Lsg0L7RgiDigJ4lc+KAnCxcbiIKKyLQtNCy0LDRgtCwINC40LzQsNGCINGB0YrQvtGC0LLQtdGC0L3QviDQv9C+ICVkINC4ICVkINC90LXRgdGK0LLQv9Cw0LTQsNGJ0Lgg0L/QvtC00LDQstCw0L3QuNGPLlxuIgorbXNnc3RyWzFdICIiCisi0KLQtdC60YPRidC40Y/RgiDQutC70L7QvSDRgdC1INC1INC+0YLQtNC10LvQuNC7INC+0YIg4oCeJXPigJwsXG4iCisi0LTQstCw0YLQsCDQuNC80LDRgiDRgdGK0L7RgtCy0LXRgtC90L4g0L/QviAlZCDQuCAlZCDQvdC10YHRitCy0L/QsNC00LDRidC4INC/0L7QtNCw0LLQsNC90LjRjy5cbiIKKworIzogcmVtb3RlLmM6MjA2OAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycylcbiIKK21zZ3N0ciAiICAo0YHQu9C10LnRgtC1INC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0LrQu9C+0L0g0LIg0LvQvtC60LDQu9C90LjRjyDRh9GA0LXQtyDigJ5naXQgcHVsbOKAnClcbiIKKworIzogcmVtb3RlLmM6MjI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcGFyc2UgZXhwZWN0ZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCw0L3QvtGC0L4g0LjQvNC1INC90LAg0L7QsdC10LrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L3QviIKKworIzogcmVwbGFjZS1vYmplY3QuYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINGD0LrQsNC30LDRgtC10Lsg0LfQsCDQt9Cw0LzRj9C90LA6IOKAniVz4oCcIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSByZXBsYWNlIHJlZjogJXMiCittc2dzdHIgItC/0L7QstGC0LDRgNGP0Ykg0YHQtSDRg9C60LDQt9Cw0YLQtdC7INC30LAg0LfQsNC80Y/QvdCwOiDigJ4lc+KAnCIKKworIzogcmVwbGFjZS1vYmplY3QuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIGRlcHRoIHRvbyBoaWdoIGZvciBvYmplY3QgJXMiCittc2dzdHIgItC00YrQu9Cx0L7Rh9C40L3QsNGC0LAg0L3QsCDQt9Cw0LzRj9C90LAg0LUg0L/RgNC10LrQsNC70LXQvdC+INCz0L7Qu9GP0LzQsCDQt9CwINC+0LHQtdC60YLQsDog4oCeJXPigJwiCisKKyM6IHJlcmVyZS5jOjIxNyByZXJlcmUuYzoyMjYgcmVyZXJlLmM6MjI5Cittc2dpZCAiY29ycnVwdCBNRVJHRV9SUiIKK21zZ3N0ciAi0L/QvtCy0YDQtdC00LXQvSDigJ5NRVJHRV9SUuKAnCAo0LfQsNC/0LjRgSDQt9CwINC60L7RgNC40LPQuNGA0LDQvdC1INC90LAg0LrQvtC90YTQu9C40LrRgikiCisKKyM6IHJlcmVyZS5jOjI2NCByZXJlcmUuYzoyNjkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVyZXJlIHJlY29yZCIKK21zZ3N0ciAi0L/RgNC40LvQvtC20LXQvdC+0YLQviDQutC+0YDQuNCz0LjRgNCw0L3QtSDQvdCwINC60L7QvdGE0LvQuNC60YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9C40YHQsNC90L4iCisKKyM6IHJlcmVyZS5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICclcycgKCVzKSIKK21zZ3N0ciAi0LPRgNC10YjQutC4INC/0YDQuCDQt9Cw0L/QuNGB0LLQsNC90LXRgtC+INC90LAg4oCeJXPigJwgKCVzKSIKKworIzogcmVyZXJlLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmbHVzaCAnJXMnIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC40LfRh9C40YHRgtCy0LDQvdC10YLQviDQvdCwINCx0YPRhNC10YDQuNGC0LUg0L/RgNC4INC30LDQv9C40YHQstCw0L3QtdGC0L4g0L3QsCDigJ4lc+KAnCIKKworIzogcmVyZXJlLmM6NTAzIHJlcmVyZS5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbmZsaWN0IGh1bmtzIGluICclcyciCittc2dzdHIgItC/0LDRgNGH0LXRgtCw0YLQsCDRgSDQutC+0L3RhNC70LjQutGC0Lgg0LIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCw0YIiCisKKyM6IHJlcmVyZS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdXRpbWUoKSBvbiAnJXMnIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LfQsNC00LDQstCw0L3QtSDQvdCwINCy0YDQtdC80LUg0L3QsCDQtNC+0YHRgtGK0L8v0YHRitC30LTQsNCy0LDQvdC1INGH0YDQtdC3IOKAnnV0aW1l4oCcINC90LAg4oCeJXPigJwiCisKKyM6IHJlcmVyZS5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cml0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC10L0g0LfQsNC/0LjRgSDQvdCwIOKAniVz4oCcIgorCisjOiByZXJlcmUuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2VkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIiIKKyLigJ4lc+KAnCDQtSDQtNC+0LHQsNCy0LXQvSDQutGK0Lwg0LjQvdC00LXQutGB0LAg0YEg0L/RgNC10LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQt9Cw0L/QsNC30LXQvdCwINC60L7RgNC10LrRhtC40Y8g0L/RgNC4INGB0LvQuNCy0LDQvdC1IgorCisjOiByZXJlcmUuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcmVzb2x1dGlvbiBmb3IgJyVzJy4iCittc2dzdHIgItCa0L7RgNC10LrRhtC40Y/RgtCwINC90LAg0LrQvtC90YTQu9C40LrRgtCwINC/0YDQuCDRgdC70LjQstCw0L3QtSDQvdCwIOKAniVz4oCcINC1INC30LDQv9Cw0LfQtdC90LAuIgorCisjOiByZXJlcmUuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzb2x2ZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAiIgorItCa0L7QvdGE0LvQuNC60YLRitGCINC/0YDQuCDRgdC70LjQstCw0L3QtSDQvdCwIOKAniVz4oCcINC1INC60L7RgNC40LPQuNGA0LDQvSDRgSDQv9GA0LXQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINC/0YDQtdC00LjRiNC90LAgIgorItC60L7RgNC10LrRhtC40Y8uIgorCisjOiByZXJlcmUuYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayBzdHJheSAnJXMnIgorbXNnc3RyICLQuNC30LvQuNGI0L3QuNGP0YIg0L7QsdC10LrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30YLRgNC40LUiCisKKyM6IHJlcmVyZS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNvcmRlZCBwcmVpbWFnZSBmb3IgJyVzJyIKK21zZ3N0ciAi0J/RgNC10LTQstCw0YDQuNGC0LXQu9C90LjRj9GCINCy0LDRgNC40LDQvdGCINC90LAg4oCeJXPigJwg0LUg0LfQsNC/0LDQt9C10L0iCisKKyM6IHJlcmVyZS5jOjg4MSBzdWJtb2R1bGUuYzoyMDc4IGJ1aWx0aW4vbG9nLmM6MTg3MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAi0JTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC90LAiCisKKyM6IHJlcmVyZS5jOjEwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBjb25mbGljdGVkIHN0YXRlIGluICclcyciCittc2dzdHIgItC60L7QvdGE0LvQuNC60YLRitGCINCyIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0LHQvdC+0LLQuCIKKworIzogcmVyZXJlLmM6MTA2OCByZXJlcmUuYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlbWVtYmVyZWQgcmVzb2x1dGlvbiBmb3IgJyVzJyIKK21zZ3N0ciAi0LvQuNC/0YHQstCwINC30LDQv9Cw0LfQtdC90LAg0LrQvtGA0LXQutGG0LjRjyDQvdCwINC60L7QvdGE0LvQuNC60YIg0L/RgNC4IOKAniVz4oCcIgorCisjOiByZXJlcmUuYzoxMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9GC0YDQuNC1IgorCisjOiByZXJlcmUuYzoxMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgItCf0YDQtdC00LLQsNGA0LjRgtC10LvQvdC40Y/RgiDQstCw0YDQuNCw0L3RgiDQvdCwIOKAniVz4oCcINC1INC+0LHQvdC+0LLQtdC9IgorCisjOiByZXJlcmUuYzoxMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvcmdvdCByZXNvbHV0aW9uIGZvciAnJXMnXG4iCittc2dzdHIgItCX0LDQv9Cw0LfQtdC90LDRgtCwINC60L7RgNC10LrRhtC40Y8g0L3QsCDQutC+0L3RhNC70LjQutGCINC/0YDQuCDigJ4lc+KAnCDQtSDQv9GA0LXQvNCw0YXQvdCw0YLQsFxuIgorCisjOiByZXJlcmUuYzoxMTk5Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcnItY2FjaGUgZGlyZWN0b3J5IgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCecnItY2FjaGXigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCy0L7RgNC4IgorCisjOiByZXZpc2lvbi5jOjI0OTcKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoIGFwcGVhcnMgdG8gYmUgYnJva2VuIgorbXNnc3RyICLQotC10LrRg9GJ0LjRj9GCINC60LvQvtC9INC1INC/0L7QstGA0LXQtNC10L0iCisKKyM6IHJldmlzaW9uLmM6MjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycgZG9lcyBub3QgaGF2ZSBhbnkgY29tbWl0cyB5ZXQiCittc2dzdHIgItCi0LXQutGD0YnQuNGP0YIg0LrQu9C+0L0g4oCeJXPigJwg0LUg0LHQtdC3INC/0L7QtNCw0LLQsNC90LjRjyAiCisKKyM6IHJldmlzaW9uLmM6MjcwOAorbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLWZpcnN0LXBhcmVudOKAnCDQuCDigJ4tLWJpc2VjdOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogcmV2aXNpb24uYzoyNzEyCittc2dpZCAiLUwgZG9lcyBub3QgeWV0IHN1cHBvcnQgZGlmZiBmb3JtYXRzIGJlc2lkZXMgLXAgYW5kIC1zIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLUzigJwg0L/QvtC00LTRitGA0LbQsCDQtdC00LjQvdGB0YLQstC10L3QviDRhNC+0YDQvNCw0YLQuNGA0LDQvdC10YLQviDQvdCwINGA0LDQt9C70LjQutC40YLQtSDRgdC/0L7RgNC10LQg0L7Qv9GG0LjQuNGC0LUg4oCeLSIKKyJw4oCcINC4IOKAni1z4oCcIgorCisjOiBydW4tY29tbWFuZC5jOjc2MworbXNnaWQgIm9wZW4gL2Rldi9udWxsIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC+0YLQstCw0YDRj9C90LUg0L3QsCDigJ4vZGV2L251bGzigJwiCisKKyM6IHJ1bi1jb21tYW5kLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFzeW5jIHRocmVhZDogJXMiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0YrQt9C00LDQtNC1INCw0YHQuNC90YXRgNC+0L3QvdCwINC90LjRiNC60LA6ICVzIgorCisjOiBydW4tY29tbWFuZC5jOjEzMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAnJXMnIGhvb2sgd2FzIGlnbm9yZWQgYmVjYXVzZSBpdCdzIG5vdCBzZXQgYXMgZXhlY3V0YWJsZS5cbiIKKyJZb3UgY2FuIGRpc2FibGUgdGhpcyB3YXJuaW5nIHdpdGggYGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlYC4iCittc2dzdHIgIiIKKyLQmtGD0LrQsNGC0LAg4oCeJXPigJwg0YHQtSDQv9GA0LXRgdC60LDRh9CwLCDQt9Cw0YnQvtGC0L4g0LvQuNC/0YHQstCw0YIg0L/RgNCw0LLQsCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC1LlxuIgorItCX0LAg0LTQsCDQuNC30LrQu9GO0YfQuNGC0LUg0YLQvtCy0LAg0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSwg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIiAgICBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZSIKKworIzogc2VuZC1wYWNrLmM6MTQ0Cittc2dpZCAidW5leHBlY3RlZCBmbHVzaCBwYWNrZXQgd2hpbGUgcmVhZGluZyByZW1vdGUgdW5wYWNrIHN0YXR1cyIKK21zZ3N0ciAiIgorItC90LXQvtGH0LDQutCy0LDQvSDQuNC30YfQuNGB0YLQstCw0Ykg0L/QsNC60LXRgiDigJ5mbHVzaOKAnCDQv9GA0Lgg0LjQt9GH0LjRgtCw0L3QtSDQvdCwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L7RgiAiCisi0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGA0LDQt9C/0LDQutC10YLQuNGA0LDQvdC1IgorCisjOiBzZW5kLXBhY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHJlbW90ZSB1bnBhY2sgc3RhdHVzOiAlcyIKK21zZ3N0ciAiIgorItGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L7RgiDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YDQsNC30L/QsNC60LXRgtC40YDQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INCw0L3QsNC70LjQt9C40YDQsNC90L46ICVzIgorCisjOiBzZW5kLXBhY2suYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIHVucGFjayBmYWlsZWQ6ICVzIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L7RgtC00LDQu9C10YfQtdC90L4g0YDQsNC30L/QsNC60LXRgtC40YDQsNC90LU6ICVzIgorCisjOiBzZW5kLXBhY2suYzozMDkKK21zZ2lkICJmYWlsZWQgdG8gc2lnbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSIKK21zZ3N0ciAi0YHQtdGA0YLQuNGE0LjQutCw0YLRitGCINC30LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/QvtC00L/QuNGB0LDQvSIKKworIzogc2VuZC1wYWNrLmM6NDIzCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCBwdXNoIgorbXNnc3RyICLQvtGC0YHRgNC10YnQvdCw0YLQsCDRgdGC0YDQsNC90LAg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC40LfRgtC70LDRgdC60LLQsNC90LUg0YEg0L7Qv9GG0LjRj9GC0LAg4oCeLS1zaWduZWTigJwiCisKKyM6IHNlbmQtcGFjay5jOjQyNQorbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLSIKKyJzaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorItC+0YLRgdGA0LXRidC90LDRgtCwINGB0YLRgNCw0L3QsCDQvdC1INC/0L7QtNC00YrRgNC20LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDRgSDQvtC/0YbQuNGP0YLQsCDigJ4tLXNpZ25lZOKAnCwg0LfQsNGC0L7QstCwINC90LUg0YHQtSAiCisi0LjQt9C/0L7Qu9C30LLQsCDRgdC10YDRgtC40YTQuNC60LDRgiIKKworIzogc2VuZC1wYWNrLmM6NDM3Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyBwdXNoIgorbXNnc3RyICLQv9C+0LvRg9GH0LDQstCw0YnQsNGC0LAg0YHRgtGA0LDQvdCwINC90LUg0L/QvtC00LTRitGA0LbQsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1INGBINC+0L/RhtC40Y/RgtCwIOKAni0tYXRvbWlj4oCcIgorCisjOiBzZW5kLXBhY2suYzo0NDIKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IHB1c2ggb3B0aW9ucyIKK21zZ3N0ciAi0L7RgtGB0YDQtdGJ0L3QsNGC0LAg0YHRgtGA0LDQvdCwINC90LUg0L/QvtC00LTRitGA0LbQsCDQvtC/0YbQuNC4INC/0YDQuCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1IgorCisjOiBzZXF1ZW5jZXIuYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgbWVzc2FnZSBjbGVhbnVwIG1vZGUgJyVzJyIKK21zZ3N0ciAi0L3QtdGB0YrRidC10YHRgtCy0YPQstCw0Ykg0YDQtdC20LjQvCDQvdCwINC40LfRh9C40YHRgtCy0LDQvdC1IOKAniVz4oCcINC90LAg0YHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBzZXF1ZW5jZXIuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBzZXF1ZW5jZXIuYzozMTUgYnVpbHRpbi9yZWJhc2UuYzo3ODUgYnVpbHRpbi9yZWJhc2UuYzoxNzUwIGJ1aWx0aW4vcm0uYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBzZXF1ZW5jZXIuYzozMjUKK21zZ2lkICJyZXZlcnQiCittc2dzdHIgItC+0YLQvNGP0L3QsCIKKworIzogc2VxdWVuY2VyLmM6MzI3Cittc2dpZCAiY2hlcnJ5LXBpY2siCittc2dzdHIgItC+0YLQsdC40YDQsNC90LUiCisKKyM6IHNlcXVlbmNlci5jOjMyOQorbXNnaWQgInJlYmFzZSIKK21zZ3N0ciAi0L/RgNC10LHQsNC30LjRgNCw0L3QtSIKKworIzogc2VxdWVuY2VyLmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gYWN0aW9uOiAlZCIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90L4g0LTQtdC50YHRgtCy0LjQtTogJWQiCisKKyM6IHNlcXVlbmNlci5jOjM4OQorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisi0YHQu9C10LQg0LrQvtGA0LjQs9C40YDQsNC90LXRgtC+INC90LAg0LrQvtC90YTQu9C40LrRgtC40YLQtSwg0L7RgtCx0LXQu9C10LbQtdGC0LUg0YHRitC+0YLQstC10YLQvdC40YLQtVxuIgorItC/0YrRgtC40YnQsCDRgSDigJ5naXQgYWRkINCf0KrQouKApuKAnCDQuNC70Lgg4oCeZ2l0IHJtINCf0KrQouKApuKAnC4iCisKKyM6IHNlcXVlbmNlci5jOjM5MgorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisi0YHQu9C10LQg0LrQvtGA0LjQs9C40YDQsNC90LXRgtC+INC90LAg0LrQvtC90YTQu9C40LrRgtC40YLQtSwg0L7RgtCx0LXQu9C10LbQtdGC0LUg0YHRitC+0YLQstC10YLQvdC40YLQtVxuIgorItC/0YrRgtC40YnQsCDRgSDigJ5naXQgYWRkINCf0KrQouKApuKAnCDQuNC70Lgg4oCeZ2l0IHJtINCf0KrQouKApuKAnCwg0YHQu9C10LQg0LrQvtC10YLQvlxuIgorItC/0L7QtNCw0LnRgtC1INGA0LXQt9GD0LvRgtCw0YLQsCDRgSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGNvbW1pdCfigJwuIgorCisjOiBzZXF1ZW5jZXIuYzo0MDUgc2VxdWVuY2VyLmM6MjkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0LrQu9GO0YfQuCIKKworIzogc2VxdWVuY2VyLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBlb2wgdG8gJyVzJyIKK21zZ3N0ciAi0LrRgNCw0Y/RgiDQvdCwINGA0LXQtCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0L/QuNGI0LUg0LIg4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjQxNyBzZXF1ZW5jZXIuYzoyNzA2IHNlcXVlbmNlci5jOjI5MDcgc2VxdWVuY2VyLmM6MjkyMQorIzogc2VxdWVuY2VyLmM6MzE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNCy0YrRgNGI0LgiCisKKyM6IHNlcXVlbmNlci5jOjQ0MCBzZXF1ZW5jZXIuYzoxNjEzIHNlcXVlbmNlci5jOjI3MjYgc2VxdWVuY2VyLmM6MzE2NworIzogc2VxdWVuY2VyLmM6MzI3NiBidWlsdGluL2FtLmM6MjQ5IGJ1aWx0aW4vY29tbWl0LmM6Nzg3IGJ1aWx0aW4vbWVyZ2UuYzoxMTIwCisjOiBidWlsdGluL3JlYmFzZS5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IHNlcXVlbmNlci5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXMuIgorbXNnc3RyICLQu9C+0LrQsNC70L3QuNGC0LUg0LLQuCDQv9GA0L7QvNC10L3QuCDRidC1INCx0YrQtNCw0YIg0L/RgNC10LfQsNC/0LjRgdCw0L3QuCDQv9GA0LggJXMuIgorCisjOiBzZXF1ZW5jZXIuYzo0NzAKK21zZ2lkICJjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iCittc2dzdHIgItC/0L7QtNCw0LnRgtC1INC40LvQuCDRgdC60LDRgtCw0LnRgtC1INC/0YDQvtC80LXQvdC40YLQtSwg0LfQsCDQtNCwINC/0YDQvtC00YrQu9C20LjRgtC1IgorCisjOiBzZXF1ZW5jZXIuYzo1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiJXM6INC/0YDQtdCy0YrRgNGC0LDQvdC1IgorCisjOiBzZXF1ZW5jZXIuYzo1NDEgYnVpbHRpbi90YWcuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgItCd0LXRgdGK0YnQtdGB0YLQstGD0LLQsNGJINGA0LXQttC40Lwg0L3QsCDQuNC30YfQuNGB0YLQstCw0L3QtSDigJ4lc+KAnCIKKworIy4gVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIsICJjaGVycnktcGljayIgb3IKKyMuICJyZWJhc2UiLgorIy4KKyM6IHNlcXVlbmNlci5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlczog0L3QvtCy0LjRj9GCINC40L3QtNC10LrRgSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L0iCisKKyM6IHNlcXVlbmNlci5jOjY1MgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZSIKK21zZ3N0ciAi0LTRitGA0LLQvtGC0L4g0L3QsCDQutC10YjQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7QsdC90L7QstC10L3QviIKKworIzogc2VxdWVuY2VyLmM6NjY2Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXQiCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LXRgtC+LCDRgdC+0YfQtdC90L4g0L7RgiDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgtC+IgorCisjOiBzZXF1ZW5jZXIuYzo3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8ga2V5IHByZXNlbnQgaW4gJyUuKnMnIgorbXNnc3RyICLQsiDigJ4lLipz4oCcINC90Y/QvNCwINC60LvRjtGH0L7QstC1IgorCisjOiBzZXF1ZW5jZXIuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlcXVvdGUgdmFsdWUgb2YgJyVzJyIKK21zZ3N0ciAi0YbQuNGC0LjRgNCw0L3QtdGC0L4g0L3QsCDRgdGC0L7QudC90L7RgdGC0YLQsCDQvdCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YfQuNGB0YLQtdC90L4iCisKKyM6IHNlcXVlbmNlci5jOjc5NCB3cmFwcGVyLmM6MTkwIHdyYXBwZXIuYzozNjAgYnVpbHRpbi9hbS5jOjcxMAorIzogYnVpbHRpbi9hbS5jOjgwMiBidWlsdGluL21lcmdlLmM6MTExNyBidWlsdGluL3JlYmFzZS5jOjEwNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIKK21zZ3N0ciAi0YTQsNC50LvRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9OiDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6ODA0Cittc2dpZCAiJ0dJVF9BVVRIT1JfTkFNRScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAi0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDQt9CwINCw0LLRgtC+0YAg4oCeR0lUX0FVVEhPUl9OQU1F4oCcINCy0LXRh9C1INC1INC30LDQtNCw0LTQtdC90LAiCisKKyM6IHNlcXVlbmNlci5jOjgwOQorbXNnaWQgIidHSVRfQVVUSE9SX0VNQUlMJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICLQvdCw0YHRgtGA0L7QudC60LDRgtCwINC30LAg0LUt0L/QvtGJ0LAg4oCeR0lUX0FVVEhPUl9FTUFJTOKAnCDQstC10YfQtSDQtSDQt9Cw0LTQsNC00LXQvdCwIgorCisjOiBzZXF1ZW5jZXIuYzo4MTQKK21zZ2lkICInR0lUX0FVVEhPUl9EQVRFJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICLQvdCw0YHRgtGA0L7QudC60LDRgtCwINC30LAg0LTQsNGC0LAg4oCeR0lUX0FVVEhPUl9EQVRF4oCcINCy0LXRh9C1INC1INC30LDQtNCw0LTQtdC90LAiCisKKyM6IHNlcXVlbmNlci5jOjgxOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhcmlhYmxlICclcyciCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDQv9GA0L7QvNC10L3Qu9C40LLQsCDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6ODIzCittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9OQU1FJyIKK21zZ3N0ciAi0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDQt9CwINCw0LLRgtC+0YAg4oCeR0lUX0FVVEhPUl9OQU1F4oCcINC70LjQv9GB0LLQsCIKKworIzogc2VxdWVuY2VyLmM6ODI1Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9FTUFJTCciCittc2dzdHIgItC90LDRgdGC0YDQvtC50LrQsNGC0LAg0LfQsCDQtS3Qv9C+0YnQsCDigJ5HSVRfQVVUSE9SX0VNQUlM4oCcINC70LjQv9GB0LLQsCIKKworIzogc2VxdWVuY2VyLmM6ODI3Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9EQVRFJyIKK21zZ3N0ciAi0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDQt9CwINC00LDRgtCwIOKAnkdJVF9BVVRIT1JfREFUReKAnCDQu9C40L/RgdCy0LAiCisKKyM6IHNlcXVlbmNlci5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWVcbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZSBzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisi0LIg0YLQvtCy0LAg0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviDQuNC80LAg0YHQutCw0YLQsNC90Lgg0L/RgNC+0LzQtdC90LguXG4iCisi0JDQutC+INC40YHQutCw0YLQtSDQtNCwINCz0Lgg0LLQutCw0YDQsNGC0LUg0LIg0L/RgNC10LTQuNGI0L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSwg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyLQkNC60L4g0LjRgdC60LDRgtC1INC00LAg0YHRitC30LTQsNC00LXRgtC1INC90L7QstC+INC/0L7QtNCw0LLQsNC90LUsINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorItCYINCyINC00LLQsNGC0LAg0YHQu9GD0YfQsNGPINC/0YDQvtC00YrQu9C20LDQstCw0YLQtSDRgdC70LXQtCDRgtC+0LLQsCDRgSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMTQ4Cittc2dpZCAiJ3ByZXBhcmUtY29tbWl0LW1zZycgaG9vayBmYWlsZWQiCittc2dzdHIgIiIKKyLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutGD0LrQsNGC0LAg0L/RgNC4INC/0YDQvtC80Y/QvdCwINC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSAiCisiKHByZXBhcmUtY29tbWl0LW1zZykiCisKKyM6IHNlcXVlbmNlci5jOjExNTQKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5LiBSdW4gdGhlXG4iCisiZm9sbG93aW5nIGNvbW1hbmQgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHlvdXIgZWRpdG9yIHRvIGVkaXRcbiIKKyJ5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyLQmNC80LXRgtC+INC4INCw0LTRgNC10YHRitGCINC30LAg0LUt0L/QvtGJ0LAg0YHQsCDQvdCw0YHRgtGA0L7QtdC90Lgg0LDQstGC0L7QvNCw0YLQuNGH0L3QviDQvdCwINCx0LDQt9Cw0YLQsCDQvdCwINC40LzQtdGC0L4g0L3QsFxuIgorItC/0L7RgtGA0LXQsdC40YLQtdC70Y8g0Lgg0LjQvNC10YLQviDQvdCwINC80LDRiNC40L3QsNGC0LAuICDQn9GA0L7QstC10YDQtdGC0LUg0LTQsNC70Lgg0YHQsCDQstC10YDQvdC4LiAg0JzQvtC20LXRgtC1INC00LAgIgorItGB0L/RgNC10YLQtVxuIgorItGC0L7QstCwINGB0YrQvtCx0YnQtdC90LjQtSDQutCw0YLQviDQuNC30YDQuNGH0L3QviDQt9Cw0LTQsNC00LXRgtC1INGB0YLQvtC50L3QvtGB0YLQuNGC0LUuICDQmNC30L/RitC70L3QtdGC0LUg0YHQu9C10LTQvdCw0YLQsCAiCisi0LrQvtC80LDQvdC00LBcbiIKKyLQuCDRgdC70LXQtNCy0LDQudGC0LUg0LjQvdGB0YLRgNGD0LrRhtC40LjRgtC1INCyINGC0LXQutGB0YLQvtCy0LjRjyDQstC4INGA0LXQtNCw0LrRgtC+0YAsINC30LAg0LTQsCDRgNC10LTQsNC60YLQuNGA0LDRgtC1XG4iCisi0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y8g0YTQsNC50Ls6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisi0KHQu9C10LQg0LrQsNGC0L4g0L3QsNC/0YDQsNCy0LjRgtC1INGC0L7QstCwLCDQvNC+0LbQtdGC0LUg0LTQsCDQutC+0YDQuNCz0LjRgNCw0YLQtSDQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0LfQsCDQsNCy0YLQvtGA0LAg0L3QsFxuIgorItGC0LXQutGD0YnQvtGC0L4g0L/QvtC00LDQstCw0L3QtSDRh9GA0LXQtzpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjExNjcKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyLQmNC80LXRgtC+INC4INCw0LTRgNC10YHRitGCINC30LAg0LUt0L/QvtGJ0LAg0YHQsCDQvdCw0YHRgtGA0L7QtdC90Lgg0LDQstGC0L7QvNCw0YLQuNGH0L3QviDQvdCwINCx0LDQt9Cw0YLQsCDQvdCwINC40LzQtdGC0L4g0L3QsFxuIgorItC/0L7RgtGA0LXQsdC40YLQtdC70Y8g0Lgg0LjQvNC10YLQviDQvdCwINC80LDRiNC40L3QsNGC0LAuICDQn9GA0L7QstC10YDQtdGC0LUg0LTQsNC70Lgg0YHQsCDQstC10YDQvdC4LiAg0JzQvtC20LXRgtC1INC00LAgIgorItGB0L/RgNC10YLQtVxuIgorItGC0L7QstCwINGB0YrQvtCx0YnQtdC90LjQtSDQutCw0YLQviDQuNC30YDQuNGH0L3QviDQt9Cw0LTQsNC00LXRgtC1INGB0YLQvtC50L3QvtGB0YLQuNGC0LU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwi0JLQsNGI0LXRgtC+INCY0LzQtVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCDQv9C10L3Rh9C+QGV4YW1wbGUuY29tXG4iCisiXG4iCisi0KHQu9C10LQg0LrQsNGC0L4g0L3QsNC/0YDQsNCy0LjRgtC1INGC0L7QstCwLCDQvNC+0LbQtdGC0LUg0LTQsCDQutC+0YDQuNCz0LjRgNCw0YLQtSDQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0LfQsCDQsNCy0YLQvtGA0LAg0L3QsFxuIgorItGC0LXQutGD0YnQvtGC0L4g0L/QvtC00LDQstCw0L3QtSDRh9GA0LXQtzpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyMDkKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICLRgtC+0LrRgyDRidC+INGB0YrQt9C00LDQtNC10L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGC0L4iCisKKyM6IHNlcXVlbmNlci5jOjEyMTEKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgItGC0L7QutGDINGJ0L4g0YHRitC30LTQsNC00LXQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvdC+IgorCisjOiBzZXF1ZW5jZXIuYzoxMjU3Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgSEVBRCBhZnRlciBjcmVhdGluZyBjb21taXQiCittc2dzdHIgIiIKKyLRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INGB0L7Rh9C10L3QviDQvtGCINGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQviDRgdC70LXQtCAiCisi0L/QvtC00LDQstCw0L3QtdGC0L4iCisKKyM6IHNlcXVlbmNlci5jOjEyNTkKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICLQvdC10YHQstGK0YDQt9Cw0L0g0LLRgNGK0YUg4oCeSEVBROKAnCIKKworIzogc2VxdWVuY2VyLmM6MTI2MworbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIgKNC90LDRh9Cw0LvQvdC+INC/0L7QtNCw0LLQsNC90LUpIgorCisjOiBzZXF1ZW5jZXIuYzoxMjg0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INCw0L3QsNC70LjQt9C40YDQsNC9IgorCisjOiBzZXF1ZW5jZXIuYzoxMjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDigJ4lc+KAnCDRgdC+0YfQuCDQutGK0Lwg0L3QtdGJ0L4sINC60L7QtdGC0L4g0L3QtSDQtSDQv9C+0LTQsNCy0LDQvdC1ISIKKworIzogc2VxdWVuY2VyLmM6MTI5MCBzZXF1ZW5jZXIuYzoxMzY0IGJ1aWx0aW4vY29tbWl0LmM6MTU3NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAi0LLRitGA0YXQvtCy0L7RgtC+INC/0L7QtNCw0LLQsNC90LUg4oCeSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvdC+IgorCisjOiBzZXF1ZW5jZXIuYzoxMzQyIHNlcXVlbmNlci5jOjE5NjgKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0IGF1dGhvciIKK21zZ3N0ciAi0LDQstGC0L7RgNGK0YIg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L0iCisKKyM6IHNlcXVlbmNlci5jOjEzNTMgYnVpbHRpbi9hbS5jOjE1NjYgYnVpbHRpbi9tZXJnZS5jOjY4NworbXNnaWQgImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiCittc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgd3JpdGUtdHJlZeKAnCDQvdC1INGD0YHQv9GPINC00LAg0LfQsNC/0LjRiNC1INC+0LHQtdC60YIt0LTRitGA0LLQviIKKworIzogc2VxdWVuY2VyLmM6MTM4NiBzZXF1ZW5jZXIuYzoxNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbW1pdCBtZXNzYWdlIGZyb20gJyVzJyIKK21zZ3N0ciAi0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L3QviDQvtGCIOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzoxNDEzIGJ1aWx0aW4vYW0uYzoxNTg4IGJ1aWx0aW4vY29tbWl0LmM6MTY3MyBidWlsdGluL21lcmdlLmM6ODg2CisjOiBidWlsdGluL21lcmdlLmM6OTExCittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgItC+0LHQtdC60YLRitGCINC30LAg0L/QvtC00LDQstCw0L3QtdGC0L4g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9C40YHQsNC9IgorCisjOiBzZXF1ZW5jZXIuYzoxNDc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvdC+IgorCisjOiBzZXF1ZW5jZXIuYzoxNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICLRgNC+0LTQuNGC0LXQu9GB0LrQvtGC0L4g0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L3QviIKKworIzogc2VxdWVuY2VyLmM6MTU2MiBzZXF1ZW5jZXIuYzoxNjczCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZDogJWQiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDQutC+0LzQsNC90LTQsDogJWQiCisKKyM6IHNlcXVlbmNlci5jOjE2MjAgc2VxdWVuY2VyLmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJWQgY29tbWl0cy4iCittc2dzdHIgItCi0L7QstCwINC1INC+0LHQtdC00LjQvdC10L3QuNC1INC+0YIgJWQg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBzZXF1ZW5jZXIuYzoxNjMwCittc2dpZCAibmVlZCBhIEhFQUQgdG8gZml4dXAiCittc2dzdHIgItCX0LAg0LLQutCw0YDQstCw0L3QtSDQsiDQv9GA0LXQtNGF0L7QtNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0LLQuCDRgtGA0Y/QsdCy0LAg0YPQutCw0LfQsNGC0LXQuyDigJ5IRUFE4oCcIgorCisjOiBzZXF1ZW5jZXIuYzoxNjMyIHNlcXVlbmNlci5jOjMyMTIKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtGH0LXRgtC1IgorCisjOiBzZXF1ZW5jZXIuYzoxNjM0Cittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCdzIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisi0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUg0LrRitC8INGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC90L46ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0L/QsNC30LgiCisKKyM6IHNlcXVlbmNlci5jOjE2NDcgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5NgorbXNnaWQgIlRoaXMgaXMgdGhlIDFzdCBjb21taXQgbWVzc2FnZToiCittc2dzdHIgItCi0L7QstCwINC1IDEt0YLQviDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LU6IgorCisjOiBzZXF1ZW5jZXIuYzoxNjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIgorbXNnc3RyICLRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSDQutGK0Lwg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L3QviIKKworIzogc2VxdWVuY2VyLmM6MTY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJWQ6IgorbXNnc3RyICLQotC+0LLQsCDQtSDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUg4oSWJWQ6IgorCisjOiBzZXF1ZW5jZXIuYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJWQgd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAi0KHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1IOKEliVkINGJ0LUg0LHRitC00LUg0L/RgNC10YHQutC+0YfQtdC90L46IgorCisjOiBzZXF1ZW5jZXIuYzoxNzU2Cittc2dpZCAieW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAi0LjQvdC00LXQutGB0YrRgiDQvdC1INC1INGB0LvRj9GCLiIKKworIzogc2VxdWVuY2VyLmM6MTc2MworbXNnaWQgImNhbm5vdCBmaXh1cCByb290IGNvbW1pdCIKK21zZ3N0ciAi0L3QsNGH0LDQu9C90L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LLQutCw0YDQsCDQsiDQv9GA0LXQtNGF0L7QtNC90L7RgtC+INC80YMiCisKKyM6IHNlcXVlbmNlci5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQtSDRgdC70LjQstCw0L3QtSwg0L3QviDQvdC1INC1INC00LDQtNC10L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tbeKAnCIKKworIzogc2VxdWVuY2VyLmM6MTc5MCBzZXF1ZW5jZXIuYzoxNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJwg0L3Rj9C80LAg0YDQvtC00LjRgtC10LsgJWQiCisKKyM6IHNlcXVlbmNlci5jOjE4MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30LLQu9C40YfQsNC90LUg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgYSAidG9kbyIgY29tbWFuZCBsaWtlCisjLiAicmV2ZXJ0IiBvciAicGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExLgorIzogc2VxdWVuY2VyLmM6MTgyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVzOiDQvdC10YDQsNC30L/QvtC30L3QsNGC0LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwINGA0L7QtNC40YLQtdC70YHQutC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzoxODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgJyVzJyB0byAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQuNC80LXQvdGD0LLQsCDQvdCwIOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzoxOTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXZlcnQgJXMuLi4gJXMiCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCc4oCmINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LzQtdC90LXQvdC+OiDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6MTk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCc4oCmINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LjQu9C+0LbQtdC90L46IOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzoxOTYxCisjLCBjLWZvcm1hdAorbXNnaWQgImRyb3BwaW5nICVzICVzIC0tIHBhdGNoIGNvbnRlbnRzIGFscmVhZHkgdXBzdHJlYW1cbiIKK21zZ3N0ciAi0L/RgNC10YHQutCw0YfQsNC90LUg0L3QsCAlcyAlcyDigJQg0LrRgNGK0L/QutCw0YLQsCDQstC10YfQtSDQtSDQv9GA0LjQu9C+0LbQtdC90LBcbiIKKworIzogc2VxdWVuY2VyLmM6MjAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiDQvdC10YPRgdC/0LXRiNC90L4g0LjQt9GH0LjRgtCw0L3QtSDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiBzZXF1ZW5jZXIuYzoyMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6INC90LXRg9GB0L/QtdGI0L3QviDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiBzZXF1ZW5jZXIuYzoyMTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IGFjY2VwdCBhcmd1bWVudHM6ICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0L/RgNC40LXQvNCwINCw0YDQs9GD0LzQtdC90YLQuDog4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjIxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhcmd1bWVudHMgZm9yICVzIgorbXNnc3RyICLigJ4lc+KAnCDQuNC30LjRgdC60LLQsCDQsNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IHNlcXVlbmNlci5jOjIxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCIKKworIzogc2VxdWVuY2VyLmM6MjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGA0LXQtCAlZDogJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJyVzJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICLQkdC10Lcg0L/RgNC10LTQuNGI0L3QviDQv9C+0LTQsNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9GK0LvQvdC4IOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzoyMjk4Cittc2dpZCAiY2FuY2VsbGluZyBhIGNoZXJyeSBwaWNraW5nIGluIHByb2dyZXNzIgorbXNnc3RyICLQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUg0L3QsCDQuNC30LLRitGA0YjQstCw0L3QvtGC0L4g0LIg0LzQvtC80LXQvdGC0LAg0L7RgtCx0LjRgNCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogc2VxdWVuY2VyLmM6MjMwNQorbXNnaWQgImNhbmNlbGxpbmcgYSByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgItC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC40LfQstGK0YDRiNCy0LDQvdC+0YLQviDQsiDQvNC+0LzQtdC90YLQsCDQvtGC0LzRj9C90LAg0L3QsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBzZXF1ZW5jZXIuYzoyMzQ5Cittc2dpZCAicGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgItC60L7RgNC40LPQuNGA0LDQudGC0LUg0YLQvtCy0LAg0YfRgNC10Lcg4oCeZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb+KAnC4iCisKKyM6IHNlcXVlbmNlci5jOjIzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICclcyciCittc2dzdHIgItC90LXQuNC30L/QvtC70LfQstCw0LXQvCDRhNCw0LnQuyDRgSDQvtC/0LjRgdCw0L3QuNC1INC90LAg0L/RgNC10LTRgdGC0L7Rj9GJ0LjRgtC1INC00LXQudGB0YLQstC40Y86IOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzoyMzU2Cittc2dpZCAibm8gY29tbWl0cyBwYXJzZWQuIgorbXNnc3RyICLQvdC40LrQvtC1INC+0YIg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQvdC1INC80L7QttC1INC00LAg0YHQtSDRgNCw0LfQv9C+0LfQvdCw0LUuIgorCisjOiBzZXF1ZW5jZXIuYzoyMzY3Cittc2dpZCAiY2Fubm90IGNoZXJyeS1waWNrIGR1cmluZyBhIHJldmVydC4iCittc2dzdHIgIiIKKyLQv9C+INCy0YDQtdC80LUg0L3QsCDQvtGC0LzRj9C90LAg0L3QsCDQv9C+0LTQsNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4INC+0YLQsdC40YDQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC1LiIKKworIzogc2VxdWVuY2VyLmM6MjM2OQorbXNnaWQgImNhbm5vdCByZXZlcnQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICLQv9C+INCy0YDQtdC80LUg0L3QsCDQvtGC0LHQuNGA0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4INC+0YLQvNGP0L3QsCDQvdCwINC/0L7QtNCw0LLQsNC90LUuIgorCisjOiBzZXF1ZW5jZXIuYzoyNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwIOKAniVz4oCcOiDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6MjU0MAorbXNnaWQgInVudXNhYmxlIHNxdWFzaC1vbnRvIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC10YLQviwg0LIg0LrQvtC10YLQviDQtNGA0YPQs9C40YLQtSDQtNCwINGB0LUg0LLQutCw0YDQsNGCLCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/QvtC70LfQstCwIgorCisjOiBzZXF1ZW5jZXIuYzoyNTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRhNCw0LnQuyDRgSDQvtC/0YbQuNC4OiDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6MjY0NCBzZXF1ZW5jZXIuYzo0MzYxCittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgItC30LDQtNCw0LTQtdC90L4g0LUg0L/RgNCw0LfQvdC+INC80L3QvtC20LXRgdGC0LLQviDQvtGCINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogc2VxdWVuY2VyLmM6MjY2MAorbXNnaWQgInJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICLQsiDQvNC+0LzQtdC90YLQsCDQstC10YfQtSDRgdC1INC40LfQstGK0YDRiNCy0LAg0L7RgtC80Y/QvdCwINC90LAg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBzZXF1ZW5jZXIuYzoyNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KeKAnCIKKworIzogc2VxdWVuY2VyLmM6MjY2NQorbXNnaWQgImNoZXJyeS1waWNrIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgItCyINC80L7QvNC10L3RgtCwINCy0LXRh9C1INGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQvtGC0LHQuNGA0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBzZXF1ZW5jZXIuYzoyNjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQp4oCcIgorCisjOiBzZXF1ZW5jZXIuYzoyNjgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgc2VxdWVuY2VyIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICIiCisi0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC30LAg0L7Qv9GA0LXQtNC10LvRj9C90LXRgtC+INC90LAg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70L3QvtGB0YLRgtCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSAiCisi0YHRitC30LTQsNC00LXQvdCwIgorCisjOiBzZXF1ZW5jZXIuYzoyNjk2Cittc2dpZCAiY291bGQgbm90IGxvY2sgSEVBRCIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0LrQu9GO0YfQuCIKKworIzogc2VxdWVuY2VyLmM6Mjc1NiBzZXF1ZW5jZXIuYzo0MDk5Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICIiCisi0LIg0LzQvtC80LXQvdGC0LAg0L3QtSDRgdC1INC40LfQstGK0YDRiNCy0LAg0L7RgtCx0LjRgNCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRjyDQuNC70Lgg0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQvdCwINC60LvQvtC90LAiCisKKyM6IHNlcXVlbmNlci5jOjI3NTggc2VxdWVuY2VyLmM6Mjc2OQorbXNnaWQgImNhbm5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+INGB0L7Rh9C10L3QviDQvtGCINGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQviIKKworIzogc2VxdWVuY2VyLmM6Mjc2MCBzZXF1ZW5jZXIuYzoyODA0Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIiIKKyLQtNC10LnRgdGC0LLQuNC10YLQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC10YPRgdGC0LDQvdC+0LLQtdC90L4sINC60L7Qs9Cw0YLQviDRgdGC0LUg0L3QsCDQutC70L7QvSwg0LrQvtC50YLQviDRgtC10L/RitGA0LLQsCAiCisi0L/RgNC10LTRgdGC0L7QuCDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L0iCisKKyM6IHNlcXVlbmNlci5jOjI3OTAgYnVpbHRpbi9ncmVwLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSIKKworIzogc2VxdWVuY2VyLmM6Mjc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnOiAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L06ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyNzkzCittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAi0L3QtdC+0YfQsNC60LLQsNC9INC60YDQsNC5INC90LAg0YTQsNC50LsiCisKKyM6IHNlcXVlbmNlci5jOjI3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICIiCisi0LfQsNC/0LDQt9C10L3QuNGP0YIg0L/RgNC10LTQuCDQt9Cw0L/QvtGH0LLQsNC90LXRgtC+INC90LAg0L7RgtCx0LjRgNCw0L3QtdGC0L4g0YTQsNC50Lsg0LfQsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCDigJQg4oCeJXPigJwg0LUgIgorItC/0L7QstGA0LXQtNC10L0iCisKKyM6IHNlcXVlbmNlci5jOjI4MTAKK21zZ2lkICJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQuIE5vdCByZXdpbmRpbmcsIGNoZWNrIHlvdXIgSEVBRCEiCittc2dzdHIgIiIKKyLQmNC30LPQu9C10LbQtNCwINGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0LUg0L/RgNC+0LzQtdC90LXQvS4gINCf0YDQvtCy0LXRgNC10YLQtSDQutGK0Lwg0LrQsNC60LLQviDRgdC+0YfQuC5cbiIKKyLQndC1INGB0LUg0L/RgNCw0LLRj9GCINC/0YDQvtC80LXQvdC4LiIKKworIzogc2VxdWVuY2VyLmM6Mjg1MQorbXNnaWQgIm5vIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi0LIg0LzQvtC80LXQvdGC0LAg0L3QtSDRgtC10YfQtSDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1IgorCisjOiBzZXF1ZW5jZXIuYzoyODU5Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgaW4gcHJvZ3Jlc3MiCittc2dzdHIgItCyINC80L7QvNC10L3RgtCwINC90LUg0YHQtSDQuNC30LLRitGA0YjQstCwINC+0YLQsdC40YDQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IHNlcXVlbmNlci5jOjI4NjkKK21zZ2lkICJmYWlsZWQgdG8gc2tpcCB0aGUgY29tbWl0IgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L/RgNC10YHQutCw0YfQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviIKKworIzogc2VxdWVuY2VyLmM6Mjg3NgorbXNnaWQgInRoZXJlIGlzIG5vdGhpbmcgdG8gc2tpcCIKK21zZ3N0ciAi0L3Rj9C80LAg0LrQsNC60LLQviDQtNCwINGB0LUg0L/RgNC10YHQutC+0YfQuCIKKworIzogc2VxdWVuY2VyLmM6Mjg3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaGF2ZSB5b3UgY29tbWl0dGVkIGFscmVhZHk/XG4iCisidHJ5IFwiZ2l0ICVzIC0tY29udGludWVcIiIKK21zZ3N0ciAiIgorItC/0L7QtNCw0LvQuCDQu9C4INGB0YLQtSDQstC10YfQtT8gINCf0YDQvtCx0LLQsNC50YLQtSDRgTpcbiIKKyJcbiIKKyIgICAgZ2l0ICVzIC0tY29udGludWUiCisKKyM6IHNlcXVlbmNlci5jOjMwMDMgc2VxdWVuY2VyLmM6NDAxMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtCx0L3QvtCy0LgiCisKKyM6IHNlcXVlbmNlci5jOjMwNDIgc2VxdWVuY2VyLmM6Mzk5MQorbXNnaWQgImNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IHNlcXVlbmNlci5jOjMwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQutC+0L/QuNGA0LAg0LrQsNGC0L4g4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjMwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLQnNC+0LbQtSDQtNCwINC/0YDQvtC80LXQvdC40YLQtSDQv9C+0LTQsNCy0LDQvdC10YLQviDRgSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorItCh0LvQtdC0INC60LDRgtC+INC/0YDQuNCy0YrRgNGI0LjRgtC1LCDQv9GA0L7QtNGK0LvQttC10YLQtSDRgSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzozMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAlcy4uLiAlLipzIgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnOKApiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC40LvQvtC20LXQvdC+OiDigJ4lLipz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzozMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtZXJnZSAlLipzIgorbXNnc3RyICLQndC10LLRitC30LzQvtC20L3QviDRgdC70LjQstCw0L3QtSDQvdCwIOKAniUuKnPigJwiCisKKyM6IHNlcXVlbmNlci5jOjMwOTggc2VxdWVuY2VyLmM6MzEwMiBidWlsdGluL2RpZmZ0b29sLmM6NjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LrQvtC/0LjRgNCwINC60LDRgtC+IOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzozMTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gZmFpbGVkOiAlc1xuIgorIiVzWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LU6ICVzXG4iCisiJXPQnNC+0LbQtSDQtNCwINC60L7RgNC40LPQuNGA0LDRgtC1INC/0YDQvtCx0LvQtdC80LAsINGB0LvQtdC0INC60L7QtdGC0L4g0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogc2VxdWVuY2VyLmM6MzEzNQorbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCittc2dzdHIgItC4INC/0YDQvtC80LXQvdGdINC40L3QtNC10LrRgdCwINC4L9C40LvQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gc3VjY2VlZGVkOiAlc1xuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorItCj0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1OiAlc1xuIgorItCe0YHRgtCw0LLQsNGCINC+0YnQtSDQv9GA0L7QvNC10L3QuCDQsiDQuNC90LTQtdC60YHQsCDQuNC70Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4uXG4iCisi0KLRgNGP0LHQstCwINC00LAg0LPQuCDQv9C+0LTQsNC00LXRgtC1INC40LvQuCDRgdC60LDRgtCw0LXRgtC1INC4INGB0LvQtdC0INGC0L7QstCwINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBsYWJlbCBuYW1lOiAnJS4qcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINC10YLQuNC60LXRgjog4oCeJS4qc+KAnCIKKworIzogc2VxdWVuY2VyLmM6MzI1NgorbXNnaWQgIndyaXRpbmcgZmFrZSByb290IGNvbW1pdCIKK21zZ3N0ciAi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0YTQsNC70YjQuNCy0L4g0L3QsNGH0LDQu9C90L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogc2VxdWVuY2VyLmM6MzI2MQorbXNnaWQgIndyaXRpbmcgc3F1YXNoLW9udG8iCittc2dzdHIgItC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+LCDQsiDQutC+0LXRgtC+INC00YDRg9Cz0LjRgtC1INC00LAg0YHQtSDQstC60LDRgNCw0YIiCisKKyM6IHNlcXVlbmNlci5jOjMyOTkgYnVpbHRpbi9yZWJhc2UuYzo4ODAgYnVpbHRpbi9yZWJhc2UuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcyIKK21zZ3N0ciAi0LTRitGA0LLQvtGC0L4sINGB0L7Rh9C10L3QviDQvtGCIOKAniVz4oCcLCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGC0L4iCisKKyM6IHNlcXVlbmNlci5jOjMzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgiIKKworIzogc2VxdWVuY2VyLmM6MzM3NQorbXNnaWQgImNhbm5vdCBtZXJnZSB3aXRob3V0IGEgY3VycmVudCByZXZpc2lvbiIKK21zZ3N0ciAi0LHQtdC3INGC0LXQutGD0YnQviDQv9C+0LTQsNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0LvQuNCy0LAiCisKKyM6IHNlcXVlbmNlci5jOjMzOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclLipzJyIKK21zZ3N0ciAi4oCeJS4qc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQsNC90LDQu9C40LfQuNGA0LAiCisKKyM6IHNlcXVlbmNlci5jOjM0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBtZXJnZTogJyUuKnMnIgorbXNnc3RyICLQvdGP0LzQsCDQvdC40YnQviDQt9CwINGB0LvQuNCy0LDQvdC1OiDigJ4lLipz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzozNDE4Cittc2dpZCAib2N0b3B1cyBtZXJnZSBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gdG9wIG9mIGEgW25ldyByb290XSIKK21zZ3N0ciAi0LLRitGA0YXRgyDQvdCw0YfQsNC70L3QviDQv9C+0LTQsNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4INC80L3QvtC20LXRgdGC0LLQtdC90L4g0YHQu9C40LLQsNC90LUiCisKKyM6IHNlcXVlbmNlci5jOjM0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBjb21taXQgbWVzc2FnZSBvZiAnJXMnIgorbXNnc3RyICLRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSDQutGK0Lwg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7Qu9GD0YfQtdC90L4iCisKKyM6IHNlcXVlbmNlci5jOjM1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV2ZW4gYXR0ZW1wdCB0byBtZXJnZSAnJS4qcyciCittc2dzdHIgItGB0LvQuNCy0LDQvdC10YLQviDQvdCwIOKAniUuKnPigJwg0L3QtSDQvNC+0LbQtSDQtNCw0LbQtSDQtNCwINC30LDQv9C+0YfQvdC1IgorCisjOiBzZXF1ZW5jZXIuYzozNjEwCittc2dpZCAibWVyZ2U6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAi0YHQu9C40LLQsNC90LU6INC90L7QstC40Y/RgiDQuNC90LTQtdC60YEg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC9IgorCisjOiBzZXF1ZW5jZXIuYzozNjc5IGJ1aWx0aW4vcmViYXNlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLlxuIgorbXNnc3RyICLQkNCy0YLQvtC80LDRgtC40YfQvdC+INGB0LrQsNGC0LDQvdC+0YLQviDQtSDQv9GA0LjQu9C+0LbQtdC90L4uXG4iCisKKyM6IHNlcXVlbmNlci5jOjM2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0b3JlICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L0iCisKKyM6IHNlcXVlbmNlci5jOjM2OTQgYnVpbHRpbi9yZWJhc2UuYzo3NTMgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKyJZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLlxuIgorIllvdSBjYW4gcnVuIFwiZ2l0IHN0YXNoIHBvcFwiIG9yIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdCBhbnkgdGltZS5cbiIKK21zZ3N0ciAiIgorItCf0YDQuNC70LDQs9Cw0L3QtdGC0L4g0L3QsCDQsNCy0YLQvtC80LDRgtC40YfQvdC+INGB0LrQsNGC0LDQvdC+0YLQviDQtNC+0LLQtdC00LUg0LTQviDQutC+0L3RhNC70LjQutGC0LguICDQn9GA0L7QvNC10L3QuNGC0LUg0LLQuCDRgdCwXG4iCisi0L3QsNC00LXQttC00L3QviDRgdC60LDRgtCw0L3QuC4gINCc0L7QttC10YLQtSDQtNCwINC/0YDQvtCx0LLQsNGC0LUg0LTQsCDQs9C4INC/0YDQuNC70L7QttC40YLQtSDRh9GA0LXQtyDigJ5naXQgc3Rhc2ggcG9w4oCcXG4iCisi0LjQu9C4INC00LAg0LPQuCDQuNC30YXQstGK0YDQu9C40YLQtSDRh9GA0LXQtyDigJ5naXQgc3Rhc2ggZHJvcOKAnCwg0LrQvtCz0LDRgtC+INC/0L7QuNGB0LrQsNGC0LUuXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIHZhbGlkIE9JRCIKK21zZ3N0ciAi4oCeJXPigJwg0LUg0L3QtdC/0YDQsNCy0LjQu9C10L0g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L3QsCDQvtCx0LXQutGCIgorCisjOiBzZXF1ZW5jZXIuYzozNzYwIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NzkKK21zZ2lkICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC00LXQu9C4IgorCisjOiBzZXF1ZW5jZXIuYzozNzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgSEVBRFxuIgorbXNnc3RyICLQkdC1INGB0L/RgNGP0L3QviDQv9GA0Lgg4oCeSEVBROKAnFxuIgorCisjOiBzZXF1ZW5jZXIuYzozNzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXNcbiIKK21zZ3N0ciAi0JHQtSDRgdC/0YDRj9C90L4g0L/RgNC4IOKAniVz4oCcXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBleGVjdXRlIHRoZSB0b2RvIGNvbW1hbmRcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLQodC70LXQtNC90LDRgtCwINC30LDQv9C70LDQvdGD0LLQsNC90LAg0LrQvtC80LDQvdC00LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfQv9GK0LvQvdC10L3QsDpcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIlxuIgorItCi0Y8g0LUg0LfQsNC/0LvQsNC90YPQstCw0L3QsCDQt9CwINC/0L4t0LrRitGB0L3Qvi4gINCX0LAg0LTQsCDRgNC10LTQsNC60YLQuNGA0LDRgtC1INC60L7QvNCw0L3QtNCw0YLQsCDQv9GA0LXQtNC4ICIKKyLQuNC30L/RitC70L3QtdC90LjQtSxcbiIKKyLRgNC10LTQsNC60YLQuNGA0LDQudGC0LUg0YHQv9C40YHRitC60LAg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6Mzg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzLi4uICAlLipzXG4iCittc2dzdHIgItCh0L/QuNGA0LDQvdC1INC/0YDQuCDigJ4lc+KAnOKApiAgJS4qc1xuIgorCisjOiBzZXF1ZW5jZXIuYzozOTQwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZCAlZCIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINC60L7QvNCw0L3QtNCwICVkIgorCisjOiBzZXF1ZW5jZXIuYzozOTk5Cittc2dpZCAiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDQt9CwIOKAnm9yaWctaGVhZOKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0L7Rh9C10YLQtSIKKworIzogc2VxdWVuY2VyLmM6NDAwNAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdvbnRvJyIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg0LfQsCDigJ5vbnRv4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtGH0LXRgtC1IgorCisjOiBzZXF1ZW5jZXIuYzo0MDE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgSEVBRCB0byAlcyIKK21zZ3N0ciAi4oCeSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7QsdC90L7QstC10L0g0LTQviDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6NDExMQorbXNnaWQgImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0L/RgNC10LHQsNC30LjRgNCw0YLQtSwg0LfQsNGJ0L7RgtC+INC40LzQsCDQv9GA0L7QvNC10L3QuCwg0LrQvtC40YLQviDQvdC1INGB0LAg0LIg0LjQvdC00LXQutGB0LAuIgorCisjOiBzZXF1ZW5jZXIuYzo0MTIwCittc2dpZCAiY2Fubm90IGFtZW5kIG5vbi1leGlzdGluZyBjb21taXQiCittc2dzdHIgItC90LXRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0L4g0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9C+0L/RgNCw0LLQuCIKKworIzogc2VxdWVuY2VyLmM6NDEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbGU6ICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGE0LDQudC7OiDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6NDEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbnRlbnRzOiAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDRgdGK0LTRitGA0LbQsNC90LjQtTog4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjQxMjcKK21zZ2lkICIiCisiXG4iCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlLCBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJcbiIKKyLQkiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQuNC80LAg0L3QtdC/0L7QtNCw0LTQtdC90Lgg0L/RgNC+0LzQtdC90LguICDQn9GK0YDQstC+INCz0Lgg0L/QvtC00LDQudGC0LUsINCwINGB0LvQtdC0INGC0L7QstCwXG4iCisi0L7RgtC90L7QstC+INC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgcmViYXNlIC0tY29udGludWXigJwuIgorCisjOiBzZXF1ZW5jZXIuYzo0MTYzIHNlcXVlbmNlci5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGZpbGU6ICclcyciCittc2dzdHIgItGE0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IHNlcXVlbmNlci5jOjQyMTcKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkNIRVJSWV9QSUNLX0hFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgiIKKworIzogc2VxdWVuY2VyLmM6NDIyNAorbXNnaWQgImNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLQv9GA0L7QvNC10L3QuNGC0LUg0LIg0LjQvdC00LXQutGB0LAg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQv9C+0LTQsNC00LXQvdC4LiIKKworIzogc2VxdWVuY2VyLmM6NDMzOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiJXM6INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQsdC10YDQtSDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6NDM0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlczog0L3QtdC/0YDQsNCy0LjQu9C90LAg0LLQtdGA0YHQuNGPIgorCisjOiBzZXF1ZW5jZXIuYzo0Mzc3Cittc2dpZCAiY2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICLQv9GK0YDQstC+0L3QsNGH0LDQu9C90L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQvNC10L3QtdC90L4iCisKKyM6IHNlcXVlbmNlci5jOjQ4NDYKK21zZ2lkICJtYWtlX3NjcmlwdDogdW5oYW5kbGVkIG9wdGlvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB0OiDQvdC10L/QvtC00LTRitGA0LbQsNC90Lgg0L7Qv9GG0LjQuCIKKworIzogc2VxdWVuY2VyLmM6NDg0OQorbXNnaWQgIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJpbmcgcmV2aXNpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDog0LPRgNC10YjQutCwINC/0YDQuCDQv9C+0LTQs9C+0YLQvtCy0LrQsNGC0LAg0L3QsCDQstC10YDRgdC40LgiCisKKyM6IHNlcXVlbmNlci5jOjUwODMgc2VxdWVuY2VyLmM6NTEwMAorbXNnaWQgIm5vdGhpbmcgdG8gZG8iCittc2dzdHIgItC90Y/QvNCwINC60LDQutCy0L4g0LTQsCDRgdC1INC/0YDQsNCy0LgiCisKKyM6IHNlcXVlbmNlci5jOjUxMTkKK21zZ2lkICJjb3VsZCBub3Qgc2tpcCB1bm5lY2Vzc2FyeSBwaWNrIGNvbW1hbmRzIgorbXNnc3RyICLQuNC30LvQuNGI0L3QuNGC0LUg0LrQvtC80LDQvdC00Lgg0LfQsCDQvtGC0LHQuNGA0LDQvdC1INC90LUg0LHRj9GF0LAg0L/RgNC10YHQutC+0YfQtdC90LgiCisKKyM6IHNlcXVlbmNlci5jOjUyMTMKK21zZ2lkICJ0aGUgc2NyaXB0IHdhcyBhbHJlYWR5IHJlYXJyYW5nZWQuIgorbXNnc3RyICLRgdC60YDQuNC/0YLRitGCINCy0LXRh9C1INC1INC/0YDQtdC/0L7QtNGA0LXQtNC10L0uIgorCisjOiBzZXR1cC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSBhdCAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQtSDQuNC30LLRitC9INGF0YDQsNC90LjQu9C40YnQtdGC0L4g0L/RgNC4IOKAniVz4oCcIgorCisjOiBzZXR1cC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IG5vIHN1Y2ggcGF0aCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnZ2l0IDxjb21tYW5kPiAtLSA8cGF0aD4uLi4nIHRvIHNwZWNpZnkgcGF0aHMgdGhhdCBkbyBub3QgZXhpc3QgbG9jYWxseS4iCittc2dzdHIgIiIKKyIlczog0LIg0YLQvtCy0LAg0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviDQvdGP0LzQsCDRgtCw0LrRitCyINC/0YrRgi5cbiIKKyLQl9CwINC00LAg0YPQutCw0LfQstCw0YLQtSDQv9GK0YLQuNGJ0LAsINC60L7QuNGC0L4g0LvQvtC60LDQu9C90L4g0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsNGCLCDQuNC30L/QvtC70LfQstCw0LnRgtC1OlxuIgorIlxuIgorIiAgICBnaXQg0JrQntCc0JDQndCU0JAgLS0g0J/QqtCi4oCmIgorCisjOiBzZXR1cC5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyLQvdC10LXQtNC90L7Qt9C90LDRh9C10L0g0LDRgNCz0YPQvNC10L3RgiDigJ4lczog0L3QtdC/0L7Qt9C90LDRgtCwINCy0LXRgNGB0LjRjyDQuNC70Lgg0L/RitGC0Y/RgiDQvdC1INC1INGH0LDRgdGCINC+0YIg0YDQsNCx0L7RgtC90L7RgtC+ICIKKyLQtNGK0YDQstC+LlxuIgorItCg0LDQt9C00LXQu9GP0LnRgtC1INC/0YrRgtC40YnQsNGC0LAg0L7RgiDQstC10YDRgdC40LjRgtC1INGBIOKAni0t4oCcLCDQtdGC0L4g0YLQsNC60LA6XG4iCisiXG4iCisiICAgIGdpdCDQmtCe0JzQkNCd0JTQkCBb0JLQldCg0KHQmNCv4oCmXSAtLSBb0KTQkNCZ0JvigKZdIgorCisjOiBzZXR1cC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gJyVzJyBtdXN0IGNvbWUgYmVmb3JlIG5vbi1vcHRpb24gYXJndW1lbnRzIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDRgtGA0Y/QsdCy0LAg0LTQsCDQtSDQv9GA0LXQtNC4INC/0YrRgNCy0LjRjyDQsNGA0LPRg9C80LXQvdGCLCDQutC+0LnRgtC+INC90LUg0LUg0L7Qv9GG0LjRjyIKKworIzogc2V0dXAuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorItC90LXQtdC00L3QvtC30L3QsNGH0LXQvSDQsNGA0LPRg9C80LXQvdGCIOKAniVz4oCcOiDQutCw0LrRgtC+INCy0LXRgNGB0LjRjywg0YLQsNC60LAg0Lgg0L/RitGCLlxuIgorItCg0LDQt9C00LXQu9GP0LnRgtC1INC/0YrRgtC40YnQsNGC0LAg0L7RgiDQstC10YDRgdC40LjRgtC1INGBIOKAni0t4oCcLCDQtdGC0L4g0YLQsNC60LA6XG4iCisiXG4iCisiICAgIGdpdCDQmtCe0JzQkNCd0JTQkCBb0JLQldCg0KHQmNCv4oCmXSAtLSBb0KTQkNCZ0JvigKZdIgorCisjOiBzZXR1cC5jOjQwOQorbXNnaWQgInVuYWJsZSB0byBzZXQgdXAgd29yayB0cmVlIHVzaW5nIGludmFsaWQgY29uZmlnIgorbXNnc3RyICIiCisi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC00LDQtNC1INGC0LXQutGD0YnQsCDRgNCw0LHQvtGC0L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQv9GA0Lgg0L3QtdC/0YDQsNCy0LjQu9C90Lgg0L3QsNGB0YLRgNC+0LnQutC4IgorCisjOiBzZXR1cC5jOjQxMworbXNnaWQgInRoaXMgb3BlcmF0aW9uIG11c3QgYmUgcnVuIGluIGEgd29yayB0cmVlIgorbXNnc3RyICLRgtCw0LfQuCDQutC+0LzQsNC90LTQsCDRgtGA0Y/QsdCy0LAg0LTQsCDRgdC1INC40LfQv9GK0LvQvdC4INCyINGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4iCisKKyM6IHNldHVwLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIgorbXNnc3RyICLQntGH0LDQutCy0LAg0YHQtSDQstC10YDRgdC40Y8g0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+INC90LAgZ2l0IDw9ICVkLCDQsCDQvdC1ICVkIgorCisjOiBzZXR1cC5jOjU2NworbXNnaWQgInVua25vd24gcmVwb3NpdG9yeSBleHRlbnNpb25zIGZvdW5kOiIKK21zZ3N0ciAi0L7RgtC60YDQuNGC0Lgg0YHQsCDQvdC10L/QvtC30L3QsNGC0Lgg0YDQsNC30YjQuNGA0LXQvdC40Y8g0LIg0YXRgNCw0L3QuNC70LjRidC10YLQvjoiCisKKyM6IHNldHVwLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCy0L7RgNC4IgorCisjOiBzZXR1cC5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbGFyZ2UgdG8gYmUgYSAuZ2l0IGZpbGU6ICclcyciCittc2dzdHIgItC/0YDQtdC60LDQu9C10L3QviDQs9C+0LvRj9C8INGE0LDQudC7IOKAni5naXTigJw6IOKAniVz4oCcIgorCisjOiBzZXR1cC5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nICVzIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC/0YDQvtGH0LjRgtCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBzZXR1cC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGdpdGZpbGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YTQvtGA0LzQsNGCINC90LAgZ2l0ZmlsZTogJXMiCisKKyM6IHNldHVwLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHBhdGggaW4gZ2l0ZmlsZTogJXMiCittc2dzdHIgItC70LjQv9GB0LLQsCDQv9GK0YIg0LIgZ2l0ZmlsZTog4oCeJXPigJwiCisKKyM6IHNldHVwLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAi0L3QtSDQtSDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBHaXQ6ICVzIgorCisjOiBzZXR1cC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICInJCVzJyB0b28gYmlnIgorbXNnc3RyICLigJ4lc+KAnCDQtSDQv9GA0LXQutCw0LvQtdC90L4g0LPQvtC70Y/QvCIKKworIzogc2V0dXAuYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciCittc2dzdHIgItC90LUg0LUg0YXRgNCw0L3QuNC70LjRidC1INC90LAgZ2l0OiDigJ4lc+KAnCIKKworIzogc2V0dXAuYzo3Mzggc2V0dXAuYzo3NDAgc2V0dXAuYzo3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICclcyciCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCy0LvQtdC30LUg0LIg0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAniVz4oCcIgorCisjOiBzZXR1cC5jOjc0MyBzZXR1cC5jOjc5OSBzZXR1cC5jOjgwOSBzZXR1cC5jOjg0OCBzZXR1cC5jOjg1NgorbXNnaWQgImNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICLQv9GA0L7RhtC10YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCy0YrRgNC90LUg0LrRitC8INC/0YDQtdC00LjRiNC90LDRgtCwINGA0LDQsdC+0YLQvdCwINC00LjRgNC10LrRgtC+0YDQuNGPIgorCisjOiBzZXR1cC5jOjg3MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJSpzJXMlcyciCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LvRg9GH0LXQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDigJ4lKnMlcyVz4oCcIgorCisjOiBzZXR1cC5jOjExMDgKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLQotC10LrRg9GJ0LDRgtCwINGA0LDQsdC+0YLQvdCwINC00LjRgNC10LrRgtC+0YDQuNGPINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC90LAiCisKKyM6IHNldHVwLmM6MTExNyBzZXR1cC5jOjExMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoYW5nZSB0byAnJXMnIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQstC70LXQt9C1INCyINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCIKKworIzogc2V0dXAuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIgorbXNnc3RyICIiCisi0L3QuNGC0L4g0YLQsNC30LgsINC90LjRgtC+INC60L7Rj9GC0L4g0Lgg0LTQsCDQtSDQvtGCINC/0L4t0LPQvtGA0L3QuNGC0LUg0LTQuNGA0LXQutGC0L7RgNC40LgsINC90LUg0LUg0YXRgNCw0L3QuNC70LjRidC1INC90LAgIgorImdpdDogJXMiCisKKyM6IHNldHVwLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisiU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS4iCittc2dzdHIgIiIKKyLQvdC40YLQviDRgtCw0LfQuCwg0L3QuNGC0L4g0LrQvtGP0YLQviDQuCDQtNCwINC1INC+0YIg0L/Qvi3Qs9C+0YDQvdC40YLQtSDQtNC40YDQtdC60YLQvtGA0LjQuCAo0LTQviDRgtC+0YfQutCw0YLQsCDQvdCwICIKKyLQvNC+0L3RgtC40YDQsNC90LUg4oCeJXPigJwpLCDQvdC1INC1INGF0YDQsNC90LjQu9C40YnQtSDQvdCwIGdpdC5cbiIKKyJHaXQg0YDQsNCx0L7RgtC4INCyINGA0LDQvNC60LjRgtC1INC90LAg0LXQtNC90LAg0YTQsNC50LvQvtCy0LAg0YHQuNGB0YLQtdC80LAsINC30LDRidC+0YLQviDQv9GA0L7QvNC10L3Qu9C40LLQsNGC0LAg0L3QsCDRgdGA0LXQtNCw0YLQsCAiCisi4oCeR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTeKAnCDQvdC1INC1INC30LDQtNCw0LTQtdC90LAuIgorCisjOiBzZXR1cC5jOjEyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgKDAlLjNvKS5cbiIKKyJUaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKyLQt9Cw0LTQsNC00LXQvdC40Y/RgiDQsiDigJ5jb3JlLnNoYXJlZFJlcG9zaXRvcnnigJwg0YDQtdC20LjQvCDQt9CwINC00L7RgdGC0YrQvyDQtNC+INGE0LDQudC70L7QstC1INC1INC90LXQv9GA0LDQstC40LvQtdC9ICIKKyIoMCUuM28pLlxuIgorItCh0L7QsdGB0YLQstC10L3QuNC60YrRgiDQvdCwINGE0LDQudC70LAg0YLRgNGP0LHQstCwINC00LAg0LjQvNCwINC/0YDQsNCy0LAg0LfQsCDQv9C40YHQsNC90LUg0Lgg0YfQtdGC0LXQvdC1LiIKKworIzogc2V0dXAuYzoxMjg5Cittc2dpZCAib3BlbiAvZGV2L251bGwgb3IgZHVwIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeb3BlbuKAnCDQuNC70Lgg4oCeZHVw4oCcINCy0YrRgNGF0YMg4oCeL2Rldi9udWxs4oCcIgorCisjOiBzZXR1cC5jOjEzMDQKK21zZ2lkICJmb3JrIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0YDQvtGG0LXRgSDRh9GA0LXQtyDigJ5mb3Jr4oCcIgorCisjOiBzZXR1cC5jOjEzMDkKK21zZ2lkICJzZXRzaWQgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ5zZXRzaWTigJwiCisKKyM6IHNoYTEtZmlsZS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0OyBjaGVjayAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorbXNnc3RyICIiCisi0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC30LAg0L7QsdC10LrRgtC4IOKAniVz4oCcINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAsINC/0YDQvtCy0LXRgNC10YLQtSDigJ4uZ2l0L29iamVjdHMvaW5mby8iCisiYWx0ZXJuYXRlc+KAnCIKKworIzogc2hhMS1maWxlLmM6NTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgYWx0ZXJuYXRlIG9iamVjdCBwYXRoOiAlcyIKK21zZ3N0ciAi0LDQu9GC0LXRgNC90LDRgtC40LLQvdC40Y/RgiDQv9GK0YIg0LrRitC8INC+0LHQtdC60YLQuCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L3QvtGA0LzQsNC70LjQt9C40YDQsNC9OiDigJ4lc+KAnCIKKworIzogc2hhMS1maWxlLmM6NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpZ25vcmluZyBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlcywgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiIgorIiVzOiDQsNC70YLQtdGA0L3QsNGC0LjQstC90LjRgtC1INGF0YDQsNC90LjQu9C40YnQsCDQt9CwINC+0LHQtdC60YLQuCDRgdC1INC/0YDQtdC90LXQsdGA0LXQs9Cy0LDRgiDQv9C+0YDQsNC00Lgg0L/RgNC10LrQsNC70LXQvdC+ICIKKyLQtNGK0LvQsdC+0LrQviDQstC70LDQs9Cw0L3QtSIKKworIzogc2hhMS1maWxlLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgb2JqZWN0IGRpcmVjdG9yeTogJXMiCittc2dzdHIgItC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQt9CwINC+0LHQtdC60YLQuCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L3QvtGA0LzQsNC70LjQt9C40YDQsNC90LAiCisKKyM6IHNoYTEtZmlsZS5jOjYyNQorbXNnaWQgInVuYWJsZSB0byBmZG9wZW4gYWx0ZXJuYXRlcyBsb2NrZmlsZSIKK21zZ3N0ciAi0LfQsNC60LvRjtGH0LLQsNGJ0LjRj9GCINGE0LDQudC7INC30LAg0LDQu9GC0LXRgNC90LDRgtC40LLQuNGC0LUg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCy0L7RgNC4INGBIOKAnmZkb3BlbuKAnCIKKworIzogc2hhMS1maWxlLmM6NjQzCittc2dpZCAidW5hYmxlIHRvIHJlYWQgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg0YEg0LDQu9GC0LXRgNC90LDRgtC40LLQuNGC0LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IHNoYTEtZmlsZS5jOjY1MAorbXNnaWQgInVuYWJsZSB0byBtb3ZlIG5ldyBhbHRlcm5hdGVzIGZpbGUgaW50byBwbGFjZSIKK21zZ3N0ciAi0L3QvtCy0LjRj9GCINGE0LDQudC7INGBINCw0LvRgtC10YDQvdCw0YLQuNCy0LjRgtC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LXQvNC10YHRgtC10L0g0L3QsCDQvNGP0YHRgtC+0YLQviDQvNGDIgorCisjOiBzaGExLWZpbGUuYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQv9GK0YLRj9GCIOKAniVz4oCcINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAuIgorCisjOiBzaGExLWZpbGUuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBhcyBhIGxpbmtlZCBjaGVja291dCBpcyBub3Qgc3VwcG9ydGVkIHlldC4iCittc2dzdHIgItCy0YHQtSDQvtGJ0LUg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAg0LXRgtCw0LvQvtC90L3QviDRhdGA0LDQvdC40LvQuNGJ0LUg4oCeJXPigJwg0LrQsNGC0L4g0YHQstGK0YDQt9Cw0L3Qvi4iCisKKyM6IHNoYTEtZmlsZS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICLQtdGC0LDQu9C+0L3QvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg4oCeJXPigJwg0L3QtSDQtSDQu9C+0LrQsNC70L3QviIKKworIzogc2hhMS1maWxlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgc2hhbGxvdyIKK21zZ3N0ciAi0LXRgtCw0LvQvtC90L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IOKAniVz4oCcINC1INC/0LvQuNGC0LrQviIKKworIzogc2hhMS1maWxlLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgZ3JhZnRlZCIKK21zZ3N0ciAi0LXRgtCw0LvQvtC90L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IOKAniVz4oCcINC1INGBINC/0YDQuNGB0LDQttC00LDQvdC1IgorCisjOiBzaGExLWZpbGUuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBsaW5lIHdoaWxlIHBhcnNpbmcgYWx0ZXJuYXRlIHJlZnM6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRgNC10LQg0L/RgNC4INCw0L3QsNC70LjQt9CwINC90LAg0LDQu9GC0LXRgNC90LDRgtC40LLQvdC40YLQtSDRg9C60LDQt9Cw0YLQtdC70Lg6IOKAniVz4oCcIgorCisjOiBzaGExLWZpbGUuYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXR0ZW1wdGluZyB0byBtbWFwICU8UFJJdU1BWD4gb3ZlciBsaW1pdCAlPFBSSXVNQVg+IgorbXNnc3RyICIiCisi0L3QtdGD0YHQv9C10YjQtdC9INC+0L/QuNGCINC30LAg4oCebW1hcOKAnCAlPFBSSXVNQVg+LCDQutC+0LXRgtC+INC1INC90LDQtCDQv9C+0LfQstC+0LvQtdC90L7RgtC+ICU8UFJJdU1BWD4iCisKKyM6IHNoYTEtZmlsZS5jOjk2NAorbXNnaWQgIm1tYXAgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ5tbWFw4oCcIgorCisjOiBzaGExLWZpbGUuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBmaWxlICVzIGlzIGVtcHR5IgorbXNnc3RyICLRhNCw0LnQu9GK0YIg0YEg0L7QsdC10LrRgtC40YLQtSDigJ4lc+KAnCDQtSDQv9GA0LDQt9C10L0iCisKKyM6IHNoYTEtZmlsZS5jOjEyNjMgc2hhMS1maWxlLmM6MjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICLQvdC10L/QsNC60LXRgtC40YDQsNC90LjRj9GCINC+0LHQtdC60YIg4oCeJXPigJwg0LUg0L/QvtCy0YDQtdC00LXQvSIKKworIzogc2hhMS1maWxlLmM6MTI2NSBzaGExLWZpbGUuYzoyNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICLQs9GA0LXRiNC90Lgg0LTQsNC90L3QuCDQsiDQutGA0LDRjyDQvdCwINC90LXQv9Cw0LrQtdGC0LjRgNCw0L3QuNGPINC+0LHQtdC60YIg4oCeJXPigJwiCisKKyM6IHNoYTEtZmlsZS5jOjEzMDcKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQstC40LQg0L7QsdC10LrRgiIKKworIzogc2hhMS1maWxlLmM6MTM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIgorbXNnc3RyICIiCisi0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YDQsNC30L/QsNC60LXRgtC40YDQsCDRgSDQvtC/0YbQuNGP0YLQsCDigJ4tLWFsbG93LXVua25vd24tIgorInR5cGXigJwiCisKKyM6IHNoYTEtZmlsZS5jOjEzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIiCittc2dzdHIgItC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCINC90LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGA0LDQt9C/0LDQutC10YLQuNGA0LDQvdCwIgorCisjOiBzaGExLWZpbGUuYzoxNDAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAiIgorItC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCDRgSDQvtC/0YbQuNGP0YLQsCDigJ4tLWFsbG93LXVua25vd24tdHlwZeKAnCIKKworIzogc2hhMS1maWxlLmM6MTQwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIgorbXNnc3RyICLQt9Cw0LPQu9Cw0LLQvdCw0YLQsCDRh9Cw0YHRgiDQvdCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvdCwIgorCisjOiBzaGExLWZpbGUuYzoxNjI5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IHNoYTEtZmlsZS5jOjE2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZW1lbnQgJXMgbm90IGZvdW5kIGZvciAlcyIKK21zZ3N0ciAi0LfQsNC80LXRgdGC0LjRgtC10LvRj9GCIOKAniVz4oCcINC90LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgiIKKworIzogc2hhMS1maWxlLmM6MTYzNworIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAi0L3QtdC/0LDQutC10YLQuNGA0LDQvdC40Y/RgiDQvtCx0LXQutGCIOKAniVz4oCcICjQsiDigJ4lc+KAnCkg0LUg0L/QvtCy0YDQtdC00LXQvSIKKworIzogc2hhMS1maWxlLmM6MTY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZWQgb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgItC/0LDQutC10YLQuNGA0LDQvdC40Y/RgiDQvtCx0LXQutGCIOKAniVz4oCcICjQsiDigJ4lc+KAnCkg0LUg0L/QvtCy0YDQtdC00LXQvSIKKworIzogc2hhMS1maWxlLmM6MTc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvSIKKworIzogc2hhMS1maWxlLmM6MTc1MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHBlcm1pc3Npb24gdG8gJyVzJyIKK21zZ3N0ciAi0L/RgNCw0LLQsNGC0LAg0LfQsCDQtNC+0YHRgtGK0L8g0LTQviDigJ4lc+KAnCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC30LDQtNCw0LTQtdC90LgiCisKKyM6IHNoYTEtZmlsZS5jOjE3NjAKK21zZ2lkICJmaWxlIHdyaXRlIGVycm9yIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC30LDQv9C40YEg0L3QsCDRhNCw0LnQuyIKKworIzogc2hhMS1maWxlLmM6MTc4MAorbXNnaWQgImVycm9yIHdoZW4gY2xvc2luZyBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQt9Cw0YLQstCw0YDRj9C90LXRgtC+INC90LAg0YTQsNC50LvQsCDRgSDQvdC10L/QsNC60LXRgtC40YDQsNC9INC+0LHQtdC60YIiCisKKyM6IHNoYTEtZmlsZS5jOjE4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zdWZmaWNpZW50IHBlcm1pc3Npb24gZm9yIGFkZGluZyBhbiBvYmplY3QgdG8gcmVwb3NpdG9yeSBkYXRhYmFzZSAlcyIKK21zZ3N0ciAiIgorItC90Y/QvNCwINC/0YDQsNCy0LAg0LfQsCDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L7QsdC10LrRgiDQutGK0Lwg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCDQvdCwINGF0YDQsNC90LjQu9C40YnQtdGC0L4g4oCeJXPigJwiCisKKyM6IHNoYTEtZmlsZS5jOjE4NDcKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvSDQstGA0LXQvNC10L3QtdC9INGE0LDQudC7IgorCisjOiBzaGExLWZpbGUuYzoxODcxCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGxvb3NlIG9iamVjdCBmaWxlIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC30LDQv9C40YHQsCDQvdCwINGE0LDQudC70LAg0YEg0L3QtdC/0LDQutC10YLQuNGA0LDQvSDQvtCx0LXQutGCIgorCisjOiBzaGExLWZpbGUuYzoxODc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIG5ldyBvYmplY3QgJXMgKCVkKSIKK21zZ3N0ciAi0L3QvtCy0LjRj9GCINC+0LHQtdC60YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LrQvtC80L/RgNC10YHQuNGA0LAg0YEg4oCeZGVmbGF0ZeKAnDogJWQiCisKKyM6IHNoYTEtZmlsZS5jOjE4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZUVuZCBvbiBvYmplY3QgJXMgZmFpbGVkICglZCkiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQv9GA0LjQutC70Y7Rh9Cy0LDQvdC1INC90LAg4oCeZGVmbGF0ZeKAnCDQstGK0YDRhdGDIOKAniVz4oCcOiAlZCIKKworIzogc2hhMS1maWxlLmM6MTg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mdXNlZCBieSB1bnN0YWJsZSBvYmplY3Qgc291cmNlIGRhdGEgZm9yICVzIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/QvtGA0LDQtNC4INC90LXRgdGC0LDQsdC40LvQvdC40Y8g0LjQt9GC0L7Rh9C90LjQuiDQtNCw0L3QvdC4INC30LAg0L7QsdC10LrRgtC40YLQtSDigJ4lc+KAnCIKKworIzogc2hhMS1maWxlLmM6MTg5NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQt9Cw0LTQsNCy0LDQvdC1INC90LAg0LLRgNC10LzQtSDQvdCwINC00L7RgdGC0YrQvy/RgdGK0LfQtNCw0LLQsNC90LUg0YfRgNC10Lcg4oCedXRpbWXigJwg0L3QsCDigJ4lc+KAnCIKKworIzogc2hhMS1maWxlLmM6MTk3MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgiDQt9CwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtGH0LXRgtC1IgorCisjOiBzaGExLWZpbGUuYzoyMDExCittc2dpZCAiY29ycnVwdCBjb21taXQiCittc2dzdHIgItC/0L7QstGA0LXQtNC10L3QviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBzaGExLWZpbGUuYzoyMDE5Cittc2dpZCAiY29ycnVwdCB0YWciCittc2dzdHIgItC/0L7QstGA0LXQtNC10L0g0LXRgtC40LrQtdGCIgorCisjOiBzaGExLWZpbGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZXJyb3Igd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0YfQtdGC0LXQvdC1INC/0L4g0LLRgNC10LzQtSDQvdCwINC40L3QtNC10LrRgdC40YDQsNC90LUg0L3QsCDigJ4lc+KAnCIKKworIzogc2hhMS1maWxlLmM6MjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCByZWFkIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICLQvdC10L/RitC70L3QviDQv9GA0L7Rh9C40YLQsNC90LUg0L/QviDQstGA0LXQvNC1INC90LAg0LjQvdC00LXQutGB0LjRgNCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBzaGExLWZpbGUuYzoyMTk1IHNoYTEtZmlsZS5jOjIyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LLQvNGK0LrQvdC1INCyINCx0LDQt9Cw0YLQsCDQvtGCINC00LDQvdC90LgiCisKKyM6IHNoYTEtZmlsZS5jOjIyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIKK21zZ3N0ciAi0L3QtdC/0L7QtNC00YrRgNC20LDQvSDQstC40LQg0YTQsNC50Ls6IOKAniVz4oCcIgorCisjOiBzaGExLWZpbGUuYzoyMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIG9iamVjdCIKK21zZ3N0ciAi4oCeJXPigJwg0LUg0L3QtdC/0YDQsNCy0LjQu9C10L0g0L7QsdC10LrRgiIKKworIzogc2hhMS1maWxlLmM6MjIzNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAi4oCeJXPigJwg0LUg0L3QtdC/0YDQsNCy0LjQu9C10L0g0L7QsdC10LrRgiDQvtGCINCy0LjQtCDigJ4lc+KAnCIKKworIzogc2hhMS1maWxlLmM6MjI2NCBidWlsdGluL2luZGV4LXBhY2suYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSIKKworIzogc2hhMS1maWxlLmM6MjQ1NCBzaGExLWZpbGUuYzoyNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggZm9yICVzIChleHBlY3RlZCAlcykiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINC60L7QvdGC0YDQvtC70L3QsCDRgdGD0LzQsCDQt9CwIOKAniVz4oCcICjRgtGA0Y/QsdCy0LAg0LTQsCDQtSAlcykiCisKKyM6IHNoYTEtZmlsZS5jOjI0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1tYXAgJXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAnm1tYXDigJwg0LLRitGA0YXRgyDigJ4lc+KAnCIKKworIzogc2hhMS1maWxlLmM6MjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAi0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg0L3QsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YDQsNC30L/QsNC60LXRgtC40YDQsNC90LAiCisKKyM6IHNoYTEtZmlsZS5jOjI0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAi0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg0L3QsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L3QsCIKKworIzogc2hhMS1maWxlLmM6MjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGNvbnRlbnRzIG9mICVzIgorbXNnc3RyICLRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YDQsNC30L/QsNC60LXRgtC40YDQsNC90L4iCisKKyM6IHNoYTEtbmFtZS5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCBTSEExICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAi0LrRitGB0LjRj9GCIFNIQTEg4oCeJXPigJwg0L3QtSDQtSDQtdC00L3QvtC30L3QsNGH0LXQvSIKKworIzogc2hhMS1uYW1lLmM6NDk3Cittc2dpZCAiVGhlIGNhbmRpZGF0ZXMgYXJlOiIKK21zZ3N0ciAi0JLRitC30LzQvtC20L3QvtGB0YLQuNGC0LUg0YHQsDoiCisKKyM6IHNoYTEtbmFtZS5jOjc5NgorbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisid2hlcmUgXCIkYnJcIiBpcyBzb21laG93IGVtcHR5IGFuZCBhIDQwLWhleCByZWYgaXMgY3JlYXRlZC4gUGxlYXNlXG4iCisiZXhhbWluZSB0aGVzZSByZWZzIGFuZCBtYXliZSBkZWxldGUgdGhlbS4gVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5XG4iCisicnVubmluZyBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiCittc2dzdHIgIiIKKyLQn9GA0Lgg0L3QvtGA0LzQsNC70L3QsCDRgNCw0LHQvtGC0LAgR2l0INC90LjQutC+0LPQsCDQvdC1INGB0YrQt9C00LDQstCwINGD0LrQsNC30LDRgtC10LvQuCwg0LrQvtC40YLQviDQt9Cw0LLRitGA0YjQstCw0YJcbiIKKyLRgSA0MCDRiNC10YHRgtC90LDQtNC10YHQtdGC0LjRh9C90Lgg0LfQvdCw0LrQsCwg0LfQsNGJ0L7RgtC+INGB0YLQsNC90LTQsNGA0YLQvdC+INGC0LUg0YnQtSDQsdGK0LTQsNGCINC/0YDQtdGB0LrQsNGH0LDQvdC4LlxuIgorItCS0YrQt9C80L7QttC90L4g0LUg0YLQsNC60LjQstCwINGD0LrQsNC30LDRgtC10LvQuCDQtNCwINGB0LAg0YHRitC30LTQsNC00LXQvdC4INGB0LvRg9GH0LDQudC90L4uICDQndCw0L/RgNC40LzQtdGAOlxuIgorIlxuIgorIiAgICBnaXQgc3dpdGNoIC1jICRCUkFOQ0ggJChnaXQgcmV2LXBhcnNlIOKApilcbiIKKyJcbiIKKyLQutGK0LTQtdGC0L4g0YHRgtC+0LnQvdC+0YHRgtGC0LAg0L3QsCDQv9GA0L7QvNC10L3Qu9C40LLQsNGC0LAg0L3QsCDRgdGA0LXQtNCw0YLQsCBCUkFOQ0gg0LUg0L/RgNCw0LfQvdCwLCDQv9GA0Lgg0LrQvtC10YLQvlxuIgorItGB0LUg0YHRitC30LTQsNCy0LAg0L/QvtC00L7QsdC10L0g0YPQutCw0LfQsNGC0LXQuy4gINCf0YDQtdCz0LvQtdC00LDQudGC0LUg0YLQtdC30Lgg0YPQutCw0LfQsNGC0LXQu9C4INC4INCz0Lgg0LjQt9GC0YDQuNC50YLQtS5cbiIKKyLQl9CwINC00LAg0LjQt9C60LvRjtGH0LjRgtC1INGC0L7QstCwINGB0YrQvtCx0YnQtdC90LjQtSwg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZSIKKworIzogc2hhMS1uYW1lLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgJyUuKnMnIG9ubHkgZ29lcyBiYWNrIHRvICVzIgorbXNnc3RyICLQttGD0YDQvdCw0LvRitGCINC30LAg4oCeJS4qc+KAnCDRgdGC0LjQs9CwINGB0LDQvNC+INC00L4g4oCeJXPigJwiCisKKyM6IHNoYTEtbmFtZS5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICclLipzJyBvbmx5IGhhcyAlZCBlbnRyaWVzIgorbXNnc3RyICLQttGD0YDQvdCw0LvRitGCINC30LAg4oCeJS4qc+KAnCDRgdGK0LTRitGA0LbQsCDRgdCw0LzQviAlZCDQt9Cw0L/QuNGB0LAiCisKKyM6IHNoYTEtbmFtZS5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGV4aXN0cyBvbiBkaXNrLCBidXQgbm90IGluICclLipzJyIKK21zZ3N0ciAi0L/RitGC0Y/RgiDigJ4lc+KAnCDRgdGK0YnQtdGB0YLQstGD0LLQsCDQvdCwINC00LjRgdC60LAsINC90L4g0L3QtSDQuCDQsiDigJ4lLipz4oCcIgorCisjOiBzaGExLW5hbWUuYzoxNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXRoICclcycgZXhpc3RzLCBidXQgbm90ICclcydcbiIKKyJoaW50OiBEaWQgeW91IG1lYW4gJyUuKnM6JXMnIGFrYSAnJS4qczouLyVzJz8iCittc2dzdHIgIiIKKyLQv9GK0YLRj9GCIOKAniVz4oCcINGB0YrRidC10YHRgtCy0YPQstCwINC90LAg0LTQuNGB0LrQsCwg0L3QviDQvdC1INC1INCyIOKAniVz4oCcXG4iCisi0J/RgNC+0LHQstCw0LnRgtC1INGBIOKAniUuKnM6JXPigJwsINC60L7QtdGC0L4g0LUg0YHRitGJ0L7RgtC+INC60LDRgtC+IOKAniUuKnM6Li8lc+KAnC4iCisKKyM6IHNoYTEtbmFtZS5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IGluICclLipzJyIKK21zZ3N0ciAi0L/RitGC0Y/RgiDigJ4lc+KAnCDQvdC1INGB0YrRidC10YHRgtCy0YPQstCwINCyIOKAniUuKnPigJwiCisKKyM6IHNoYTEtbmFtZS5jOjE3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInBhdGggJyVzJyBpcyBpbiB0aGUgaW5kZXgsIGJ1dCBub3QgYXQgc3RhZ2UgJWRcbiIKKyJoaW50OiBEaWQgeW91IG1lYW4gJzolZDolcyc/IgorbXNnc3RyICIiCisi0L/RitGC0Y/RgiDigJ4lc+KAnCDQtSDQsiDQuNC90LTQtdC60YHQsCwg0L3QviDQvdC1INCy0LXRgNGB0LjRjyAlZFxuIgorItCf0YDQvtCx0LLQsNC50YLQtSDRgSDigJ4lZDolc+KAnC4iCisKKyM6IHNoYTEtbmFtZS5jOjE3NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInBhdGggJyVzJyBpcyBpbiB0aGUgaW5kZXgsIGJ1dCBub3QgJyVzJ1xuIgorImhpbnQ6IERpZCB5b3UgbWVhbiAnOiVkOiVzJyBha2EgJzolZDouLyVzJz8iCittc2dzdHIgIiIKKyLQv9GK0YLRj9GCIOKAniVz4oCcINC1INCyINC40L3QtNC10LrRgdCwLCDQvdC+INC90LUg0LIg4oCeJXPigJxcbiIKKyLQn9GA0L7QsdCy0LDQudGC0LUg0YEg4oCeJWQ6JXPigJwsINC60L7QtdGC0L4g0LUg0YHRitGJ0L7RgtC+INC60LDRgtC+IOKAniVkOi4vJXPigJwuIgorCisjOiBzaGExLW5hbWUuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBleGlzdHMgb24gZGlzaywgYnV0IG5vdCBpbiB0aGUgaW5kZXgiCittc2dzdHIgItC/0YrRgtGP0YIg4oCeJXPigJwg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0L3QsCDQtNC40YHQutCwLCDQvdC+INC90LUg0LUg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IHNoYTEtbmFtZS5jOjE3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IChuZWl0aGVyIG9uIGRpc2sgbm9yIGluIHRoZSBpbmRleCkiCittc2dzdHIgItC/0YrRgtGP0YIg4oCeJXPigJwg0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQvdC40YLQviDQvdCwINC00LjRgdC60LAsINC90LjRgtC+INCyINC40L3QtNC10LrRgdCwIgorCisjOiBzaGExLW5hbWUuYzoxNzcxCittc2dpZCAicmVsYXRpdmUgcGF0aCBzeW50YXggY2FuJ3QgYmUgdXNlZCBvdXRzaWRlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0L7RgtC90L7RgdC40YLQtdC70LXQvSDQv9GK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtC70LfQstCwINC40LfQstGK0L0g0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IHNoYTEtbmFtZS5jOjE5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgbmFtZSAnJS4qcycuIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDQvtCx0LXQutGCOiDigJ4lLipz4oCcIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIiCittc2dzdHIgIiV1LiUyLjJ1IEdpQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEdpQi9zIgorbXNnc3RyICIldS4lMi4ydSBHaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlCisjOiBzdHJidWYuYzo4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCIgorbXNnc3RyICIldS4lMi4ydSBNaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgTWlCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZQorIzogc3RyYnVmLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQiIKK21zZ3N0ciAiJXUuJTIuMnUgS2lCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCL3MiCittc2dzdHIgIiV1LiUyLjJ1IEtpQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZQorIzogc3RyYnVmLmM6ODY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzIgorbXNnc3RyWzBdICIldSDQsdCw0LnRgiIKK21zZ3N0clsxXSAiJXUg0LHQsNC50YLQsCIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnl0ZS9zIgorbXNnaWRfcGx1cmFsICIldSBieXRlcy9zIgorbXNnc3RyWzBdICIldSDQsdCw0LnRgi/RgdC10LouIgorbXNnc3RyWzFdICIldSDQsdCw0LnRgtCwL9GB0LXQui4iCisKKyM6IHN0cmJ1Zi5jOjExNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGVkaXQgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YDQtdC00LDQutGC0LjRgNCwIgorCisjOiBzdWJtb2R1bGUuYzoxMTQgc3VibW9kdWxlLmM6MTQzCittc2dpZCAiQ2Fubm90IGNoYW5nZSB1bm1lcmdlZCAuZ2l0bW9kdWxlcywgcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMgZmlyc3QiCittc2dzdHIgIiIKKyLQndC10YHQu9C10YLQuNGC0LUg0YTQsNC50LvQvtCy0LUg4oCeLmdpdG1vZHVsZXPigJwg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQv9GA0L7QvNC10L3Rj9C90LguICDQn9GK0YDQstC+ICIKKyLQutC+0YDQuNCz0LjRgNCw0LnRgtC1INC60L7QvdGE0LvQuNC60YLQuNGC0LUiCisKKyM6IHN1Ym1vZHVsZS5jOjExOCBzdWJtb2R1bGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIgorbXNnc3RyICLQktGK0LIg0YTQsNC50LvQsCDigJ4uZ2l0bW9kdWxlc+KAnCDQu9C40L/RgdCy0LAg0YDQsNC30LTQtdC7INC30LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g4oCecGF0aD0lc+KAnCIKKworIzogc3VibW9kdWxlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICLQl9Cw0L/QuNGB0YrRgiDigJ4lc+KAnCDQstGK0LIg0YTQsNC50LvQsCDigJ4uZ2l0bW9kdWxlc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBzdWJtb2R1bGUuYzoxNjUKK21zZ2lkICJzdGFnaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LTQvtCx0LDQstGP0L3QtSDQvdCwINC/0YDQvtC80LXQvdC10L3QuNGPINGE0LDQudC7IOKAni5naXRtb2R1bGVz4oCcINCyINC40L3QtNC10LrRgdCwIgorCisjOiBzdWJtb2R1bGUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW4gdW5wb3B1bGF0ZWQgc3VibW9kdWxlICclcyciCittc2dzdHIgItCyINC90LXQv9C+0LTQs9C+0YLQstC10L3QuNGPINC/0L7QtNC80L7QtNGD0Lsg4oCeJXPigJwiCisKKyM6IHN1Ym1vZHVsZS5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRoc3BlYyAnJXMnIGlzIGluIHN1Ym1vZHVsZSAnJS4qcyciCittc2dzdHIgItCf0YrRgtGP0YIg4oCeJXPigJwg0LUg0LIg0L/QvtC00LzQvtC00YPQu9CwIOKAniUuKnPigJwiCisKKyM6IHN1Ym1vZHVsZS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS1pZ25vcmUtc3VibW9kdWxlcyBhcmd1bWVudDogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INCw0YDQs9GD0LzQtdC90YIg0LfQsCDigJ4tLWlnbm9yZS1zdWJtb2R1bGVz4oCcOiDigJ4lc+KAnCIKKworIzogc3VibW9kdWxlLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgaW4gY29tbWl0ICVzIGF0IHBhdGg6ICclcycgY29sbGlkZXMgd2l0aCBhIHN1Ym1vZHVsZSBuYW1lZCB0aGUgIgorInNhbWUuIFNraXBwaW5nIGl0LiIKK21zZ3N0ciAiIgorItCf0L7QtNC80L7QtNGD0LvRitGCINC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1ICVzINC90LAg0L/RitGC0Y8g4oCeJXPigJwg0LUg0YDQsNC30LvQuNGH0LXQvSDQvtGCINC00YDRg9Cz0LjRjyDQvNC+0LTRg9C7INGB0YrRgSAiCisi0YHRitGJ0L7RgtC+INC40LzQtSwg0LfQsNGC0L7QstCwINC/0YrRgNCy0LjRj9GCINGB0LUg0L/RgNC10YHQutCw0YfQsC4iCisKKyM6IHN1Ym1vZHVsZS5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZW50cnkgJyVzJyAoJXMpIGlzIGEgJXMsIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAi0LfQsNC/0LjRgdGK0YIg0LfQsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwgKCVzKSDQtSAlcywg0LAg0L3QtSDQv9C+0LTQsNCy0LDQvdC1ISIKKworIzogc3VibW9kdWxlLmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QgPGNvbW1pdHM+IC0tbm90IC0tcmVtb3RlcyAtbiAxJyBjb21tYW5kIGluICIKKyJzdWJtb2R1bGUgJXMiCittc2dzdHIgIiIKKyLQmtC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IHJldi1saXN0INCf0J7QlNCQ0JLQkNCd0JjQryAtLW5vdCAtLXJlbW90ZXMgLW4gMeKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSAiCisi0LjQt9C/0YrQu9C90Lgg0LIg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcIgorCisjOiBzdWJtb2R1bGUuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInByb2Nlc3MgZm9yIHN1Ym1vZHVsZSAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi0L/RgNC+0YbQtdGB0YrRgiDQt9CwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCDQt9Cw0LLRitGA0YjQuCDQvdC10YPRgdC/0LXRiNC90L4iCisKKyM6IHN1Ym1vZHVsZS5jOjExNDcgYnVpbHRpbi9icmFuY2guYzo2ODAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIwNDUKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC60YDQuNC1INC60YrQvCDQutCw0LrQstC+INGB0L7Rh9C4INGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwiCisKKyM6IHN1Ym1vZHVsZS5jOjExNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICLQmNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjExNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHB1c2ggc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAi0J/QvtC00LzQvtC00YPQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtC70LDRgdC60LDQvVxuIgorCisjOiBzdWJtb2R1bGUuYzoxNDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIHN1Ym1vZHVsZSAlcyVzXG4iCittc2dzdHIgItCU0L7RgdGC0LDQstGP0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lcyVz4oCcXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjE0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFjY2VzcyBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICLQn9C+0LTQvNC+0LTRg9C70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LTQvtGB0YLRitC/0LXQvVxuIgorCisjOiBzdWJtb2R1bGUuYzoxNjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvcnMgZHVyaW5nIHN1Ym1vZHVsZSBmZXRjaDpcbiIKICIlcyIKIG1zZ3N0ciAiIgotItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9GC0LXQs9C70Y/QvdC10YLQviDQvdCwINCy0LXRgNGB0LjQuDpcbiIKKyLQk9GA0LXRiNC60Lgg0L/RgNC4INC00L7RgdGC0LDQstGP0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0Ls6XG4iCiAiJXMiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM1MAotIywgdGNsLWZvcm1hdAorIzogc3VibW9kdWxlLmM6MTY2MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG5vdCByZWNvZ25pemVkIGFzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0YXRgNCw0L3QuNC70LjRidC1INC90LAgZ2l0IgorCisjOiBzdWJtb2R1bGUuYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49MicgaW4gc3VibW9kdWxlICVzIgorbXNnc3RyICIiCisi0JrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBzdGF0dXMgLS1wb3JjZWxhaW49MuKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/RitC70L3QuCDQsiDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwiCisKKyM6IHN1Ym1vZHVsZS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49MicgZmFpbGVkIGluIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorItC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgc3RhdHVzIC0tcG9yY2VsYWluPTLigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0YrQu9C90Lgg0LIg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcIgorCisjOiBzdWJtb2R1bGUuYzoxODAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgItC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgc3RhdHVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9GK0LvQvdC4INCyINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCIKKworIzogc3VibW9kdWxlLmM6MTgxMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcnVuICdnaXQgc3RhdHVzJyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBzdGF0dXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0YrQu9C90Lgg0LIg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcIgorCisjOiBzdWJtb2R1bGUuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeY29yZS53b3JrdHJlZeKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30YLRgNC40LUg0LIg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcIgorCisjOiBzdWJtb2R1bGUuYzoxODU1IHN1Ym1vZHVsZS5jOjIxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdCwINC+0LHRgNCw0LHQvtGC0LrQsCDQvdCwINC/0L7QtNC00LjRgNC10LrRgtC+0YDQuNC40YLQtSDQsiDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwiCisKKyM6IHN1Ym1vZHVsZS5jOjE4NzYKK21zZ2lkICJjb3VsZCBub3QgcmVzZXQgc3VibW9kdWxlIGluZGV4IgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LfQsNC90YPQu9GP0LLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCIKKworIzogc3VibW9kdWxlLmM6MTkxOAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBoYXMgZGlydHkgaW5kZXgiCittc2dzdHIgItC40L3QtNC10LrRgdGK0YIg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwg0L3QtSDQtSDRh9C40YHRgiIKKworIzogc3VibW9kdWxlLmM6MTk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyBjb3VsZCBub3QgYmUgdXBkYXRlZC4iCittc2dzdHIgItCf0L7QtNC80L7QtNGD0LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0LHQvdC+0LLQuC4iCisKKyM6IHN1Ym1vZHVsZS5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGdpdCBkaXIgJyVzJyBpcyBpbnNpZGUgZ2l0IGRpciAnJS4qcyciCittc2dzdHIgIuKAniVz4oCcICjQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwINC/0L7QtNC80L7QtNGD0LspINC1INCyINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdCwIGdpdDog4oCeJS4qc+KAnCIKKworIzogc3VibW9kdWxlLmM6MjA1OQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQ291bGQgbm90IHN0YXJ0IHRoZSBtZXJnZSB0b29sOlxuIgorInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKyLQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsCDigJ5yZWxvY2F0ZV9naXRkaXLigJwg0LfQsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwsINC60L7QudGC0L4g0LjQvNCwINC/0L7QstC10YfQtSDQvtGCINC10LTQvdC+ICIKKyLRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+IgorCisjOiBzdWJtb2R1bGUuYzoyMDcxIHN1Ym1vZHVsZS5jOjIxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBuYW1lIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi0LjQvNC10YLQviDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L3QsNC80LXRgNC10L3QviIKKworIzogc3VibW9kdWxlLmM6MjA3NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBtb3ZlICclcycgaW50byBhbiBleGlzdGluZyBnaXQgZGlyIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQvNC10YHRgtC4INCyINGB0YrRidC10YHRgtCy0YPQstCw0YnQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwIGdpdCIKKworIzogc3VibW9kdWxlLmM6MjA4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTWlncmF0aW5nIGdpdCBkaXJlY3Rvcnkgb2YgJyVzJXMnIGZyb21cbiIKKyInJXMnIHRvXG4iCisiJyVzJ1xuIgorbXNnc3RyICIiCisi0JzQuNCz0YDQuNGA0LDQvdC1INC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC90LAgZ2l0IOKAlCDigJ4lcyVz4oCcINC+0YI6XG4iCisi4oCeJXPigJwg0LrRitC8XG4iCisi4oCeJXPigJxcbiIKKworIzogc3VibW9kdWxlLmM6MjIwOQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBscy1maWxlcyBpbiAuLiIKK21zZ3N0ciAi4oCebHMtc3RhdOKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGC0LDRgNGC0LjRgNCwINCyIOKAni4u4oCcIgorCisjOiBzdWJtb2R1bGUuYzoyMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImxzLXRyZWUgcmV0dXJuZWQgdW5leHBlY3RlZCByZXR1cm4gY29kZSAlZCIKK21zZ3N0ciAi4oCebHMtdHJlZeKAnCDQt9Cw0LLRitGA0YjQuCDRgSDQvdC10L7Rh9Cw0LrQstCw0L0g0LjQt9GF0L7QtNC10L0g0LrQvtC0OiAlZCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBzdXNwaWNpb3VzIHN1Ym1vZHVsZSBuYW1lOiAlcyIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQsNC90LUg0L3QsCDQv9C+0LTQvtC30YDQuNGC0LXQu9C90L4g0LjQvNC1INC90LAg0L/QvtC00LzQvtC00YPQuzog4oCeJXPigJwiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzozMDMKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZXMgbm90IGFsbG93ZWQgZm9yIHN1Ym1vZHVsZS5mZXRjaGpvYnMiCittc2dzdHIgItC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCec3VibW9kdWxlLmZldGNoam9ic+KAnCDQvdC1INC/0YDQuNC10LzQsCDQvtGC0YDQuNGG0LDRgtC10LvQvdC4INGB0YLQvtC50L3QvtGB0YLQuCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAnJXMnIHdoaWNoIG1heSBiZSBpbnRlcnByZXRlZCBhcyBhIGNvbW1hbmQtbGluZSBvcHRpb246ICVzIgorbXNnc3RyICIiCisi4oCeJXPigJwg0YHQtSDQv9GA0LXRgdC60LDRh9CwLCDQt9Cw0YnQvtGC0L4g0LUg0LLRitC30LzQvtC20L3QviDQtNCwINGB0LUg0YLRitC70LrRg9Cy0LAg0LrQsNGC0L4g0L7Qv9GG0LjRjyDQt9CwINC60L7QvNCw0L3QtNC90LjRjyAiCisi0YDQtdC0OiAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwIOKAniVz4oCcIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiCittc2dzdHIgItCX0LDQv9C40YHRitGCIOKAniVz4oCcINCy0YrQsiDRhNCw0LnQu9CwIOKAni5naXRtb2R1bGVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7QvNC10L3QtdC9IgorCisjOiB0cmFpbGVyLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgdHJhaWxlciBjb21tYW5kICclcycgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQt9Cw0LLRitGA0YjQstCw0YnQsNGC0LAg0LrQvtC80LDQvdC00LAg4oCeJXPigJwiCisKKyM6IHRyYWlsZXIuYzo0ODUgdHJhaWxlci5jOjQ5MCB0cmFpbGVyLmM6NDk1IHRyYWlsZXIuYzo1NDkgdHJhaWxlci5jOjU1MworIzogdHJhaWxlci5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCDQt9CwINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeJXPigJwiCisKKyM6IHRyYWlsZXIuYzo1MzkgdHJhaWxlci5jOjU0NCBidWlsdGluL3JlbW90ZS5jOjI5OCBidWlsdGluL3JlbW90ZS5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICLRgdGC0L7QudC90L7RgdGC0YLQsCDigJ4lc+KAnCDRgdC1INC/0L7QstGC0LDRgNGPINCyINC90LDRgdGC0YDQvtC50LrQuNGC0LUiCisKKyM6IHRyYWlsZXIuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgdHJhaWxlciB0b2tlbiBpbiB0cmFpbGVyICclLipzJyIKK21zZ3N0ciAi0L/RgNCw0LfQvdCwINC30LDQstGK0YDRiNCy0LDRidCwINC70LXQutGB0LXQvNCwINCyINC10L/QuNC70L7Qs9CwIOKAniUuKnPigJwiCisKKyM6IHRyYWlsZXIuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAnJXMnIgorbXNnc3RyICLQstGF0L7QtNC90LjRj9GCINGE0LDQudC7IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiB0cmFpbGVyLmM6NzUzCittc2dpZCAiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGH0LXRgtC1IgorCisjOiB0cmFpbGVyLmM6MTAxMSB3cmFwcGVyLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQtSDQv9C+0LvRg9GH0Lgg0LjQvdGE0L7RgNC80LDRhtC40Y8g0YfRgNC10Lcg4oCec3RhdOKAnCDQt9CwIOKAniVz4oCcIgorCisjOiB0cmFpbGVyLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQtSDQvtCx0LjQutC90L7QstC10L0g0YTQsNC50LsiCisKKyM6IHRyYWlsZXIuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IHdyaXRhYmxlIGJ5IHVzZXIiCittc2dzdHIgIuKAniVz4oCcOiDQvdGP0LzQsCDQv9GA0LDQstCwINC30LAg0LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0YTQsNC50LvQsCIKKworIzogdHJhaWxlci5jOjEwMjcKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAi0LLRgNC10LzQtdC90L3QuNGP0YIg0YTQsNC50Lsg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCy0L7RgNC4IgorCisjOiB0cmFpbGVyLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIgorbXNnc3RyICLQstGA0LXQvNC10L3QvdC40Y/RgiDRhNCw0LnQuyDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQuNC80LXQvdGD0LLQsCDQvdCwIOKAniVz4oCcIgorCisjOiB0cmFuc3BvcnQuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2V0IHVwc3RyZWFtIG9mICclcycgdG8gJyVzJyBvZiAnJXMnXG4iCittc2dzdHIgItCa0LvQvtC90YrRgiDigJ4lc+KAnCDRidC1INGB0LvQtdC00Lgg4oCeJXPigJwg0L7RgiDigJ4lc+KAnFxuIgorCisjOiB0cmFuc3BvcnQuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgYnVuZGxlICclcyciCittc2dzdHIgItC/0YDQsNGC0LrQsNGC0LAg0L3QsCBnaXQg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L3QsCIKKworIzogdHJhbnNwb3J0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIKK21zZ3N0ciAidHJhbnNwb3J0OiDQvdC10L/RgNCw0LLQuNC70L3QsCDQvtC/0YbQuNGPINC30LAg0LTRitC70LHQvtGH0LjQvdCwOiAlcyIKKworIzogdHJhbnNwb3J0LmM6MjY2Cittc2dpZCAic2VlIHByb3RvY29sLnZlcnNpb24gaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgZGV0YWlscyIKK21zZ3N0ciAiIgorItCX0LAg0L/QvtCy0LXRh9C1INC40L3RhNC+0YDQvNCw0YbQuNGPINCy0LjQttGC0LUg0YDQsNC30LTQtdC70LAg4oCecHJvdG9jb2wudmVyc2lvbuKAnCDQsiDigJ5naXQgaGVscCBjb25maWfigJwiCisKKyM6IHRyYW5zcG9ydC5jOjI2NworbXNnaWQgInNlcnZlciBvcHRpb25zIHJlcXVpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGxhdGVyIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDQvdCwINGB0YrRgNCy0YrRgNCwINC40LfQuNGB0LrQstCw0YIg0L/QvtC90LUg0LLQtdGA0YHQuNGPIDIg0L3QsCDQv9GA0L7RgtC+0LrQvtC70LAiCisKKyM6IHRyYW5zcG9ydC5jOjYzMgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSB0cmFuc3BvcnQuY29sb3IuKiBjb25maWciCittc2dzdHIgItGB0YLQvtC50L3QvtGB0YLRgtCwINC90LAg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ50cmFuc3BvcnQuY29sb3IuKuKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDRgNCw0LfQv9C+0LfQvdCw0LUiCisKKyM6IHRyYW5zcG9ydC5jOjcwNQorbXNnaWQgInN1cHBvcnQgZm9yIHByb3RvY29sIHYyIG5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgItC/0YDQvtGC0L7QutC+0Lsg0LLQtdGA0YHQuNGPIDIg0LLRgdC1INC+0YnQtSDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsCIKKworIzogdHJhbnNwb3J0LmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgZm9yIGNvbmZpZyAnJXMnOiAlcyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAniVz4oCcOiDigJ4lc+KAnCIKKworIzogdHJhbnNwb3J0LmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydCAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICLQv9GA0LXQvdC+0YHRitGCINC/0L4g4oCeJXPigJwg0L3QtSDQtSDQv9C+0LfQstC+0LvQtdC9IgorCisjOiB0cmFuc3BvcnQuYzo5NDkKK21zZ2lkICJnaXQtb3Zlci1yc3luYyBpcyBubyBsb25nZXIgc3VwcG9ydGVkIgorbXNnc3RyICLQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LW92ZXItcnN5bmPigJwg0LLQtdGH0LUg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAiCisKKyM6IHRyYW5zcG9ydC5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgc3VibW9kdWxlIHBhdGhzIGNvbnRhaW4gY2hhbmdlcyB0aGF0IGNhblxuIgorIm5vdCBiZSBmb3VuZCBvbiBhbnkgcmVtb3RlOlxuIgorbXNnc3RyICIiCisi0KHQu9C10LTQvdC40YLQtSDQv9GK0YLQuNGJ0LAg0LfQsCDQv9C+0LTQvNC+0LTRg9C70Lgg0YHRitC00YrRgNC20LDRgiDQv9GA0L7QvNC10L3QuCxcbiIKKyLQutC+0LjRgtC+INC70LjQv9GB0LLQsNGCINC+0YIg0LLRgdC40YfQutC4INC+0YLQtNCw0LvQtdGH0LXQvdC4INGF0YDQsNC90LjQu9C40YnQsDpcbiIKKworIzogdHJhbnNwb3J0LmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGxlYXNlIHRyeVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisib3IgY2QgdG8gdGhlIHBhdGggYW5kIHVzZVxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyJ0byBwdXNoIHRoZW0gdG8gYSByZW1vdGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQn9GA0L7QsdCy0LDQudGC0LUg0LTQsCDQs9C4INC40LfRgtC70LDRgdC60LDRgtC1INGH0YDQtdC3INC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisi0LjQu9C4INC+0YLQuNC00LXRgtC1INCyINGB0YrQvtGC0LLQtdGC0L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0Lgg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgcHVzaFxuIgorIlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDU2Cittc2dpZCAiQWJvcnRpbmcuIgorbXNnc3RyICLQn9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUg0L3QsCDQtNC10LnRgdGC0LLQuNC10YLQvi4iCisKKyM6IHRyYW5zcG9ydC5jOjEyMDEKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBhbGwgbmVlZGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LAg0LLRgdC40YfQutC4INC90LXQvtCx0YXQvtC00LjQvNC4INC/0L7QtNC80L7QtNGD0LvQuCIKKworIzogdHJhbnNwb3J0LmM6MTM0NSB0cmFuc3BvcnQtaGVscGVyLmM6NjU3Cittc2dpZCAib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwINC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwINC+0YIg0L/RgNC+0YLQvtC60L7Qu9CwIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEgdHJhbnNwb3J0LWhlbHBlci5jOjkwCittc2dpZCAiZnVsbCB3cml0ZSB0byByZW1vdGUgaGVscGVyIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQtdC9INC/0YrQu9C10L0g0LfQsNC/0LjRgSDQutGK0Lwg0L3QsNGB0YDQtdGJ0L3QsNGC0LAg0L/QvtC80L7RidC90LAg0L/RgNC+0LPRgNCw0LzQsCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCByZW1vdGUgaGVscGVyIGZvciAnJXMnIgorbXNnc3RyICLQvdCw0YHRgNC10YnQvdCw0YLQsCDQv9C+0LzQvtGJ0L3QsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgtCwIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTYwIHRyYW5zcG9ydC1oZWxwZXIuYzo1NzEKK21zZ2lkICJjYW4ndCBkdXAgaGVscGVyIG91dHB1dCBmZCIKK21zZ3N0ciAiIgorItGE0LDQudC70L7QstC40Y/RgiDQtNC10YHQutGA0LjQv9GC0L7RgCDQvtGCINC90LDRgdGA0LXRidC90LDRgtCwINC/0L7QvNC+0YnQvdCwINC/0YDQvtCz0YDQsNC80LAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTRg9Cx0LvQuNGA0LAg0YEgIgorIuKAnmR1cOKAnCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBtYW5kYXRvcnkgY2FwYWJpbGl0eSAlczsgdGhpcyByZW1vdGUgaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyICIKKyJ2ZXJzaW9uIG9mIEdpdCIKK21zZ3N0ciAiIgorItC90LXQv9C+0LfQvdCw0YLQsCDQt9Cw0LTRitC70LbQuNGC0LXQu9C90LAg0YHQv9C+0YHQvtCx0L3QvtGB0YIg4oCeJXPigJwuICDQndCw0YHRgNC10YnQvdCw0YLQsCDQv9C+0LzQvtGJ0L3QsCDQv9GA0L7Qs9GA0LDQvNCwICIKKyLQstC10YDQvtGP0YLQvdC+INC40LfQuNGB0LrQstCwINC90L7QstCwINCy0LXRgNGB0LjRjyDQvdCwIEdpdCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxNworbXNnaWQgInRoaXMgcmVtb3RlIGhlbHBlciBzaG91bGQgaW1wbGVtZW50IHJlZnNwZWMgY2FwYWJpbGl0eSIKK21zZ3N0ciAiIgorItC90LDRgdGA0LXRidC90LDRgtCwINC/0L7QvNC+0YnQvdCwINC/0YDQvtCz0YDQsNC80LAg0YLRgNGP0LHQstCwINC00LAg0L/QvtC00LTRitGA0LbQsCDRgdC/0L7RgdC+0LHQvdC+0YHRgiDQt9CwINC40LfQsdGA0L7Rj9Cy0LDQvdC1INC90LAgIgorItGD0LrQsNC30LDRgtC10LvQuCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjI4NCB0cmFuc3BvcnQtaGVscGVyLmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHVuZXhwZWN0ZWRseSBzYWlkOiAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC10L7Rh9Cw0LrQstCw0L3QviDQstGK0YDQvdCwOiDigJ4lc+KAnCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHNvIGxvY2tlZCAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0LfQsNC60LvRjtGH0Lgg0Lgg4oCeJXPigJwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0OTMKK21zZ2lkICJjb3VsZG4ndCBydW4gZmFzdC1pbXBvcnQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINCx0YrRgNC30L4g0LLQvdCw0YHRj9C90LUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1MTYKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtaW1wb3J0IgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC40LfQv9GK0LvQvdC10L3QuNC10YLQviDQvdCwINCx0YrRgNC30L4g0LLQvdCw0YHRj9C90LUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1NDUgdHJhbnNwb3J0LWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0L7Rh9C10YLQtSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIgorbXNnc3RyICLQvdC10L7Rh9Cw0LrQstCw0L0g0L7RgtCz0L7QstC+0YAg0L/RgNC4INGB0LLRitGA0LfQstCw0L3QtTog4oCeJXPigJwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTIKK21zZ2lkICJzZXR0aW5nIHJlbW90ZSBzZXJ2aWNlIHBhdGggbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAi0L/RgNC+0YLQvtC60L7Qu9GK0YIg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC30LDQtNCw0LLQsNC90LXRgtC+INC90LAg0L/RitGCINC90LAg0L7RgtC00LDQu9C10YfQtdC90LDRgtCwINGD0YHQu9GD0LPQsCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxNAorbXNnaWQgImludmFsaWQgcmVtb3RlIHNlcnZpY2UgcGF0aCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L/RitGCINC90LAg0L7RgtC00LDQu9C10YfQtdC90LDRgtCwINGD0YHQu9GD0LPQsCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBjb25uZWN0IHRvIHN1YnNlcnZpY2UgJXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRgdCy0YrRgNC30LLQsNC90LUg0LrRitC8INC/0L7QtNGD0YHQu9GD0LPQsNGC0LAg4oCeJXPigJwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciCittc2dzdHIgIiIKKyLQvtGH0LDQutCy0LAg0YHQtSDQuNC70Lgg0YPRgdC/0LXRhSwg0LjQu9C4INCz0YDQtdGI0LrQsCwg0L3QviDQvdCw0YHRgNC10YnQvdCw0YLQsCDQv9C+0LzQvtGJ0L3QsCDQv9GA0L7Qs9GA0LDQvNCwINCy0YrRgNC90LAg4oCeJXPigJwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyIHJlcG9ydGVkIHVuZXhwZWN0ZWQgc3RhdHVzIG9mICVzIgorbXNnc3RyICLQvdCw0YHRgNC10YnQvdCw0YLQsCDQv9C+0LzQvtGJ0L3QsCDQv9GA0L7Qs9GA0LDQvNCwINC30LDQstGK0YDRiNC4INGBINC90LXQvtGH0LDQutCy0LDQvSDQuNC30YXQvtC00LXQvSDQutC+0LQ6IOKAniVz4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODUwCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IGRyeS1ydW4iCittc2dzdHIgItC90LDRgdGA0LXRidC90LDRgtCwINC/0L7QvNC+0YnQvdCwINC/0YDQvtCz0YDQsNC80LAg4oCeJXPigJwg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC/0YDQvtCx0Lgg4oCeZHJ5LXJ1buKAnCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCIKK21zZ3N0ciAi0L3QsNGB0YDQtdGJ0L3QsNGC0LAg0L/QvtC80L7RidC90LAg0L/RgNC+0LPRgNCw0LzQsCDigJ4lc+KAnCDQvdC1INC/0L7QtNC00YrRgNC20LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1zaWduZWTigJwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQ9aWYtYXNrZWQiCittc2dzdHIgIiIKKyLQvdCw0YHRgNC10YnQvdCw0YLQsCDQv9C+0LzQvtGJ0L3QsCDQv9GA0L7Qs9GA0LDQvNCwIOKAniVz4oCcINC90LUg0L/QvtC00LTRitGA0LbQsCDQvtC/0YbQuNGP0YLQsCDigJ4tLXNpZ25lZD1pZi1hc2tlZOKAnCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyIKK21zZ3N0ciAi0L3QsNGB0YDQtdGJ0L3QsNGC0LAg0L/QvtC80L7RidC90LAg0L/RgNC+0LPRgNCw0LzQsCDigJ4lc+KAnCDQvdC1INC/0L7QtNC00YrRgNC20LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1hdG9taWPigJwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ3B1c2gtb3B0aW9uJyIKK21zZ3N0ciAi0L3QsNGB0YDQtdGJ0L3QsNGC0LAg0L/QvtC80L7RidC90LAg0L/RgNC+0LPRgNCw0LzQsCDigJ4lc+KAnCDQvdC1INC/0L7QtNC00YrRgNC20LAg0L7Qv9GG0LjQuCDQt9CwINC40LfRgtC70LDRgdC60LLQsNC90LUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5NjUKK21zZ2lkICJyZW1vdGUtaGVscGVyIGRvZXNuJ3Qgc3VwcG9ydCBwdXNoOyByZWZzcGVjIG5lZWRlZCIKK21zZ3N0ciAiIgorItC90LDRgdGA0LXRidC90LDRgtCwINC/0L7QvNC+0YnQvdCwINC/0YDQvtCz0YDQsNC80LAg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC40LfRgtC70LDRgdC60LLQsNC90LUuICDQndC10L7QsdGF0L7QtNC40LzQviDQtSAiCisi0LjQt9Cx0YDQvtGP0LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTcwCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdmb3JjZSciCittc2dzdHIgIiIKKyLQvdCw0YHRgNC10YnQvdCw0YLQsCDQv9C+0LzQvtGJ0L3QsCDQv9GA0L7Qs9GA0LDQvNCwINC90LUg0L/QvtC00LTRitGA0LbQsCDigJ4lc+KAnCDQv9C+0LTQtNGK0YDQttCwINC+0L/RhtC40Y/RgtCwIOKAni0tZm9yY2XigJwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDE3Cittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtZXhwb3J0IgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30LLRitGA0YjQuCDQsdGK0YDQt9C+INC40LfQvdCw0YHRj9C90LUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDIyCittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWV4cG9ydCIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQuNC30L/RitC70L3QtdC90LjQtdGC0L4g0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg0LfQsCDQsdGK0YDQt9C+INC40LfQvdCw0YHRj9C90LUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyByZWZzIGluIGNvbW1vbiBhbmQgbm9uZSBzcGVjaWZpZWQ7IGRvaW5nIG5vdGhpbmcuXG4iCisiUGVyaGFwcyB5b3Ugc2hvdWxkIHNwZWNpZnkgYSBicmFuY2ggc3VjaCBhcyAnbWFzdGVyJy5cbiIKK21zZ3N0ciAiIgorItCd0Y/QvNCwINC+0LHRidC4INGD0LrQsNC30LDRgtC10LvQuCwg0L3QtSDRgdCwINGD0LrQsNC30LDQvdC4INC90LjQutCw0LrQstC4INGD0LrQsNC30LDRgtC10LvQuCDigJQg0L3QuNGJ0L4g0L3Rj9C80LAg0LTQsCDQsdGK0LTQtVxuIgorItC90LDQv9GA0LDQstC10L3Qvi4gINCf0YDQvtCx0LLQsNC50YLQtSDQtNCwINGD0LrQsNC20LXRgtC1INC60LvQvtC9LCDQvdCw0L/RgC4g4oCcbWFzdGVy4oCcLlxuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgcmVzcG9uc2UgaW4gcmVmIGxpc3Q6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQvtGC0LPQvtCy0L7RgCDQsiDRgdC/0LjRgdGK0LrQsCDRgSDRg9C60LDQt9Cw0YLQtdC70Lg6IOKAniVz4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkKCVzKSBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRh9C10YLQtdC90LUg0L3QsCDigJ4lc+KAnCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGUoJXMpIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQtdC9INC30LDQv9C40YEg0LIg4oCeJXPigJwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC90LjRiNC60LDRgtCwIOKAniVz4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIHRvIGpvaW46ICVzIgorbXNnc3RyICLQt9Cw0LLRitGA0YjQstCw0L3QtdGC0L4g0L3QsCDQvdC40YjQutCw0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30YfQsNC60LA6IOKAniVz4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM3MSB0cmFuc3BvcnQtaGVscGVyLmM6MTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YTogJXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRgdGC0LDRgNGC0LjRgNCw0L3QtSDQvdCwINC90LjRiNC60LAg0LfQsCDQutC+0L/QuNGA0LDQvdC1INC90LAg0LTQsNC90L3QuNGC0LU6IOKAniVz4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCB0byB3YWl0IgorbXNnc3RyICLQv9GA0L7RhtC10YHRitGCINC90LAg4oCeJXPigJwg0L3QtSDRg9GB0L/RjyDQtNCwINC40LfRh9Cw0LrQsCDRh9GA0LXQtyDigJ53YWl0cGlk4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeJXPigJwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDM0IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDQzCittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGEiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRgdGC0LDRgNGC0LjRgNCw0L3QtSDQvdCwINC90LjRiNC60LAg0LfQsCDQutC+0L/QuNGA0LDQvdC1INC90LAg0LTQsNC90L3QuNGC0LUiCisKKyM6IHRyZWUtd2Fsay5jOjMyCittc2dpZCAidG9vLXNob3J0IHRyZWUgb2JqZWN0IgorbXNnc3RyICLQv9GA0LXQutCw0LvQtdC90L4g0LrRgNCw0YLRitC6INC+0LHQtdC60YIt0LTRitGA0LLQviIKKworIzogdHJlZS13YWxrLmM6MzgKK21zZ2lkICJtYWxmb3JtZWQgbW9kZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QuCDQv9GA0LDQstCwINC30LAg0LTQvtGB0YLRitC/INCyINC30LDQv9C40YEg0LIg0LTRitGA0LLQviIKKworIzogdHJlZS13YWxrLmM6NDIKK21zZ2lkICJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICLQv9GA0LDQt9C90L4g0LjQvNC1INC90LAg0YTQsNC50Lsg0LIg0LfQsNC/0LjRgSDQsiDQtNGK0YDQstC+IgorCisjOiB0cmVlLXdhbGsuYzoxMTcKK21zZ2lkICJ0b28tc2hvcnQgdHJlZSBmaWxlIgorbXNnc3RyICLQv9GA0LXQutCw0LvQtdC90L4g0LrRgNCw0YLRitC6INGE0LDQudC7LdC00YrRgNCy0L4iCisKKyM6IHVucGFjay10cmVlcy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyLQmNC30YLQtdCz0LvRj9C90LXRgtC+INGJ0LUg0L/RgNC10LfQsNC/0LjRiNC1INC70L7QutCw0LvQvdC40YLQtSDQv9GA0L7QvNC10L3QuCDQvdCwINGC0LXQt9C4INGE0LDQudC70L7QstC1OlxuIgorIiUlc9Cf0L7QtNCw0LnRgtC1INC40LvQuCDRgdC60LDRgtCw0LnRgtC1INC/0YDQvtC80LXQvdC40YLQtSwg0LfQsCDQtNCwINC/0YDQtdC80LjQvdC10YLQtSDQutGK0Lwg0L3QvtCyINC60LvQvtC9LiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLQmNC30YLQtdCz0LvRj9C90LXRgtC+INGJ0LUg0L/RgNC10LfQsNC/0LjRiNC1INC70L7QutCw0LvQvdC40YLQtSDQv9GA0L7QvNC10L3QuCDQvdCwINGC0LXQt9C4INGE0LDQudC70L7QstC1OlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi0KHQu9C40LLQsNC90LXRgtC+INGJ0LUg0L/RgNC10LfQsNC/0LjRiNC1INC70L7QutCw0LvQvdC40YLQtSDQv9GA0L7QvNC10L3QuCDQvdCwINGC0LXQt9C4INGE0LDQudC70L7QstC1OlxuIgorIiUlc9Cf0L7QtNCw0LnRgtC1INC40LvQuCDRgdC60LDRgtCw0LnRgtC1INC/0YDQvtC80LXQvdC40YLQtSwg0LfQsCDQtNCwINGB0LvQtdC10YLQtS4iCisKKyM6IHVucGFjay10cmVlcy5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisi0KHQu9C40LLQsNC90LXRgtC+INGJ0LUg0L/RgNC10LfQsNC/0LjRiNC1INC70L7QutCw0LvQvdC40YLQtSDQv9GA0L7QvNC10L3QuCDQvdCwINGC0LXQt9C4INGE0LDQudC70L7QstC1OlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisi4oCeJXPigJwg0YnQtSDQv9GA0LXQt9Cw0L/QuNGI0LUg0LvQvtC60LDQu9C90LjRgtC1INC/0YDQvtC80LXQvdC4INC90LAg0YLQtdC30Lgg0YTQsNC50LvQvtCy0LU6XG4iCisiJSVz0J/QvtC00LDQudGC0LUg0LjQu9C4INGB0LrQsNGC0LDQudGC0LUg0L/RgNC+0LzQtdC90LjRgtC1LCDQt9CwINC00LAg0LjQt9Cy0YrRgNGI0LjRgtC1IOKAniVz4oCcLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLigJ4lc+KAnCDRidC1INC/0YDQtdC30LDQv9C40YjQtSDQu9C+0LrQsNC70L3QuNGC0LUg0L/RgNC+0LzQtdC90Lgg0L3QsCDRgtC10LfQuCDRhNCw0LnQu9C+0LLQtTpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVtOlxuIgorIiVzIgorbXNnc3RyICIiCisi0J7QsdC90L7QstGP0LLQsNC90LXRgtC+INC90LAg0YHQu9C10LTQvdC40YLQtSDQtNC40YDQtdC60YLQvtGA0LjQuCDRidC1INC40LfRgtGA0LjQtSDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1INCyINGC0Y/RhTpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyLQmNC30YLQtdCz0LvRj9C90LXRgtC+INGJ0LUg0LjQt9GC0YDQuNC1INGC0LXQt9C4INC90LXRgdC70LXQtNC10L3QuCDRhNCw0LnQu9C+0LLQtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvjpcbiIKKyIlJXPQn9GA0LXQvNC10YHRgtC10YLQtSDQs9C4INC40LvQuCDQs9C4INC40LfRgtGA0LjQudGC0LUsINC30LAg0LTQsCDQv9GA0LXQvNC40L3QtdGC0LUg0L3QsCDQtNGA0YPQsyDQutC70L7QvS4iCisKKyM6IHVucGFjay10cmVlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisi0JjQt9GC0LXQs9C70Y/QvdC10YLQviDRidC1INC40LfRgtGA0LjQtSDRgtC10LfQuCDQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi0KHQu9C40LLQsNC90LXRgtC+INGJ0LUg0LjQt9GC0YDQuNC1INGC0LXQt9C4INC90LXRgdC70LXQtNC10L3QuCDRhNCw0LnQu9C+0LLQtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvjpcbiIKKyIlJXPQn9GA0LXQvNC10YHRgtC10YLQtSDQs9C4INC40LvQuCDQs9C4INC40LfRgtGA0LjQudGC0LUsINC30LAg0LTQsCDRgdC70LXQtdGC0LUuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorItCh0LvQuNCy0LDQvdC10YLQviDRidC1INC40LfRgtGA0LjQtSDRgtC10LfQuCDQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisi4oCeJXPigJwg0YnQtSDQuNC30YLRgNC40LUg0YLQtdC30Lgg0L3QtdGB0LvQtdC00LXQvdC4INGE0LDQudC70L7QstC1INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+OlxuIgorIiUlc9Cf0YDQtdC80LXRgdGC0LXRgtC1INCz0Lgg0LjQu9C4INCz0Lgg0LjQt9GC0YDQuNC50YLQtSwg0LfQsCDQtNCwINC40LfQstGK0YDRiNC40YLQtSDigJ4lc+KAnC4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisi4oCeJXPigJwg0YnQtSDQuNC30YLRgNC40LUg0YLQtdC30Lgg0L3QtdGB0LvQtdC00LXQvdC4INGE0LDQudC70L7QstC1INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+OlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorItCY0LfRgtC10LPQu9GP0L3QtdGC0L4g0YnQtSDQv9GA0LXQt9Cw0L/QuNGI0LUg0YLQtdC30Lgg0L3QtdGB0LvQtdC00LXQvdC4INGE0LDQudC70L7QstC1INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+OlxuIgorIiUlc9Cf0YDQtdC80LXRgdGC0LXRgtC1INCz0Lgg0LjQu9C4INCz0Lgg0LjQt9GC0YDQuNC50YLQtSwg0LfQsCDQtNCwINGB0LzQtdC90LjRgtC1INC60LvQvtC9LiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorItCY0LfRgtC10LPQu9GP0L3QtdGC0L4g0YnQtSDQv9GA0LXQt9Cw0L/QuNGI0LUg0YLQtdC30Lgg0L3QtdGB0LvQtdC00LXQvdC4INGE0LDQudC70L7QstC1INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+OlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLQodC70LjQstCw0L3QtdGC0L4g0YnQtSDQv9GA0LXQt9Cw0L/QuNGI0LUg0YLQtdC30Lgg0L3QtdGB0LvQtdC00LXQvdC4INGE0LDQudC70L7QstC1INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+OlxuIgorIiUlc9Cf0YDQtdC80LXRgdGC0LXRgtC1INCz0Lgg0LjQu9C4INCz0Lgg0LjQt9GC0YDQuNC50YLQtSwg0LfQsCDQtNCwINGB0LvQtdC10YLQtS4iCisKKyM6IHVucGFjay10cmVlcy5jOjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorItCh0LvQuNCy0LDQvdC10YLQviDRidC1INC/0YDQtdC30LDQv9C40YjQtSDRgtC10LfQuCDQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIuKAniVz4oCcINGJ0LUg0L/RgNC10LfQsNC/0LjRiNC1INGC0LXQt9C4INC90LXRgdC70LXQtNC10L3QuCDRhNCw0LnQu9C+0LLQtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvjpcbiIKKyIlJXPQn9GA0LXQvNC10YHRgtC10YLQtSDQs9C4INC40LvQuCDQs9C4INC40LfRgtGA0LjQudGC0LUsINC30LAg0LTQsCDQuNC30LLRitGA0YjQuNGC0LUg4oCeJXPigJwuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLigJ4lc+KAnCDRidC1INC/0YDQtdC30LDQv9C40YjQtSDRgtC10LfQuCDQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50cnkgJyVzJyBvdmVybGFwcyB3aXRoICclcycuICBDYW5ub3QgYmluZC4iCittc2dzdHIgItCX0LDQv9C40YHRitGCINC30LAg4oCeJXPigJwg0YHRitCy0L/QsNC00LAg0YEg0YLQvtC30Lgg0LfQsCDigJ4lc+KAnC4gINCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQuNGB0LLQvtC4LiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHNwYXJzZSBjaGVja291dDogdGhlIGZvbGxvd2luZyBlbnRyaWVzIGFyZSBub3QgdXAgdG8gZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorItCn0LDRgdGC0LjRh9C90L7RgtC+INC40LfRgtC10LPQu9GP0L3QtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7QsdC90L7QstC10L3Qvjog0YHQu9C10LTQvdC40YLQtSDQt9Cw0L/QuNGB0Lgg0L3QtSDRgdCwICIKKyLQsNC60YLRg9Cw0LvQvdC4OlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisi0J7QsdC90L7QstGP0LLQsNC90LXRgtC+INC90LAg0YfQsNGB0YLQuNGH0L3QvtGC0L4g0LjQt9GC0LXQs9C70Y/QvdC1INGJ0LUg0L/RgNC10LfQsNC/0LjRiNC1INGC0LXQt9C4INGE0LDQudC70L7QstC1INCyINGA0LDQsdC+0YLQvdC+0YLQviAiCisi0LTRitGA0LLQvjpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisi0J7QsdC90L7QstGP0LLQsNC90LXRgtC+INC90LAg0YfQsNGB0YLQuNGH0L3QvtGC0L4g0LjQt9GC0LXQs9C70Y/QvdC1INGJ0LUg0LjQt9GC0YDQuNC1INGC0LXQt9C4INGE0LDQudC70L7QstC1INCyINGA0LDQsdC+0YLQvdC+0YLQviAiCisi0LTRitGA0LLQvjpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHN1Ym1vZHVsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorItCf0L7QtNC80L7QtNGD0LvRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvTpcbiIKKyLigJ4lc+KAnCIKKworIzogdW5wYWNrLXRyZWVzLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nXG4iCittc2dzdHIgItCf0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC00LXQudGB0YLQstC40LXRgtC+XG4iCisKKyM6IHVucGFjay10cmVlcy5jOjMxNworbXNnaWQgIlVwZGF0aW5nIGZpbGVzIgorbXNnc3RyICLQntCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGE0LDQudC70L7QstC1IgorCisjOiB1bnBhY2stdHJlZXMuYzozNDkKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBwYXRocyBoYXZlIGNvbGxpZGVkIChlLmcuIGNhc2Utc2Vuc2l0aXZlIHBhdGhzXG4iCisib24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pIGFuZCBvbmx5IG9uZSBmcm9tIHRoZSBzYW1lXG4iCisiY29sbGlkaW5nIGdyb3VwIGlzIGluIHRoZSB3b3JraW5nIHRyZWU6XG4iCittc2dzdHIgIiIKKyLRgdC70LXQtNC90LjRgtC1INC/0YrRgtC40YnQsCDRgdCwINCyINC60L7QvdGE0LvQuNC60YIgKNC90LDQv9GALiDQv9GA0Lgg0YDQsNC30LvQuNC60LAg0LIg0YDQtdCz0LjRgdGC0YrRgNCwXG4iCisi0LLRitCyINGE0LDQudC70L7QstC4INGB0LjRgdGC0LXQvNC4LCDQutC+0LjRgtC+INC90LUg0YDQsNC30LvQuNGH0LDQstCw0YIg0LPQu9Cw0LLQvdC4INC+0YIg0LzQsNC70LrQuCDQsdGD0LrQstC4KVxuIgorItC4INGB0LDQvNC+INC10LTQuNC9INC+0YIg0YPRh9Cw0YHRgtC90LjRhtC40YLQtSDQsiDQutC+0L3RhNC70LjQutGC0LAg0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L46XG4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0NDUKK21zZ2lkICJVcGRhdGluZyBpbmRleCBmbGFncyIKK21zZ3N0ciAi0J7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDRhNC70LDQs9C+0LLQtdGC0LUg0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogdXJsbWF0Y2guYzoxNjMKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YHRhdC10LzQsCDQt9CwINCw0LTRgNC10YEg0LjQu9C4INGB0YPRhNC40LrRgdGK0YIg4oCeOi8v4oCcINC70LjQv9GB0LLQsCIKKworIzogdXJsbWF0Y2guYzoxODcgdXJsbWF0Y2guYzozNDYgdXJsbWF0Y2guYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlWFggZXNjYXBlIHNlcXVlbmNlIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDQtdC60YDQsNC90LjRgNCw0YnQsCDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvQvdC+0YHRgiDigJ4lWFjigJwiCisKKyM6IHVybG1hdGNoLmM6MjE1Cittc2dpZCAibWlzc2luZyBob3N0IGFuZCBzY2hlbWUgaXMgbm90ICdmaWxlOiciCittc2dzdHIgItC90LUg0LUg0YPQutCw0LfQsNC90LAg0LzQsNGI0LjQvdCwLCDQsCDRgdGF0LXQvNCw0YLQsCDQvdC1INC1IOKAnmZpbGU64oCcIgorCisjOiB1cmxtYXRjaC5jOjIzMgorbXNnaWQgImEgJ2ZpbGU6JyBVUkwgbWF5IG5vdCBoYXZlIGEgcG9ydCBudW1iZXIiCittc2dzdHIgItC/0YDQuCDRgdGF0LXQvNCwIOKAnmZpbGU64oCcINC90LUg0LzQvtC20LXRgtC1INC00LAg0YPQutCw0LfQstCw0YLQtSDQvdC+0LzQtdGAINC90LAg0L/QvtGA0YIiCisKKyM6IHVybG1hdGNoLmM6MjQ3Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGhvc3QgbmFtZSIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90Lgg0LfQvdCw0YbQuCDQsiDQuNC80LXRgtC+INC90LAg0LzQsNGI0LjQvdCwIgorCisjOiB1cmxtYXRjaC5jOjI5MiB1cmxtYXRjaC5jOjMwMworbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC90L7QvNC10YAg0L3QsCDQv9C+0YDRgiIKKworIzogdXJsbWF0Y2guYzozNzEKK21zZ2lkICJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50IgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRh9Cw0YHRgiDQvtGCINC/0YrRgtGPIOKAni4u4oCcIgorCisjOiB3YWxrZXIuYzoxNzAKK21zZ2lkICJGZXRjaGluZyBvYmplY3RzIgorbXNnc3RyICLQlNC+0YHRgtCw0LLRj9C90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiB3b3JrdHJlZS5jOjI1OSBidWlsdGluL2FtLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogd29ya3RyZWUuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhdCBtYWluIHdvcmtpbmcgdHJlZSBpcyBub3QgdGhlIHJlcG9zaXRvcnkgZGlyZWN0b3J5IgorbXNnc3RyICLigJ4lc+KAnCDQsiDQvtGB0L3QvtCy0L3QvtGC0L4g0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviDQvdC1INC1INC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdCwINGF0YDQsNC90LjQu9C40YnQtdGC0L4iCisKKyM6IHdvcmt0cmVlLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsZSBkb2VzIG5vdCBjb250YWluIGFic29sdXRlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZSBsb2NhdGlvbiIKK21zZ3N0ciAiIgorItGE0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INGB0YrQtNGK0YDQttCwINCw0LHRgdC+0LvRjtGC0L3QuNGPINC/0YrRgiDQutGK0Lwg0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtdGC0L4g0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogd29ya3RyZWUuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4iCisKKyM6IHdvcmt0cmVlLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgLmdpdCBmaWxlLCBlcnJvciBjb2RlICVkIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC1INGE0LDQudC7INC90LAgLmdpdCwg0LrQvtC0INC30LAg0LPRgNC10YjQutCwOiAlZCIKKworIzogd29ya3RyZWUuYzozNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCBiYWNrIHRvICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0YHQvtGH0Lgg0LrRitC8INC+0LHRgNCw0YLQvdC+INC60YrQvCDigJ4lc+KAnCIKKworIzogd3JhcHBlci5jOjE4NiB3cmFwcGVyLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSDQuCDQt9CwINGH0LXRgtC10L3QtSwg0Lgg0LfQsCDQt9Cw0L/QuNGBIgorCisjOiB3cmFwcGVyLmM6Mzg3IHdyYXBwZXIuYzo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnIgorbXNnc3RyICLQvdGP0LzQsCDQtNC+0YHRgtGK0L8g0LTQviDigJ4lc+KAnCIKKworIzogd3JhcHBlci5jOjU5NgorbXNnaWQgInVuYWJsZSB0byBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi0YLQtdC60YPRidCw0YLQsCDRgNCw0LHQvtGC0L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQtSDQvdC10LTQvtGB0YLRitC/0L3QsCIKKworIzogd3Qtc3RhdHVzLmM6MTU4Cittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICLQndC10YHQu9C10YLQuCDQv9GK0YLQuNGJ0LA6IgorCisjOiB3dC1zdGF0dXMuYzoxODcgd3Qtc3RhdHVzLmM6MjE5Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCByZXN0b3JlIC0tc3RhZ2VkINCk0JDQmdCb4oCm4oCcLCDQt9CwINC00LAg0LjQt9Cy0LDQtNC40YLQtSDQpNCQ0JnQm9CwINC+0YIg0LjQvdC00LXQutGB0LApIgorCisjOiB3dC1zdGF0dXMuYzoxOTAgd3Qtc3RhdHVzLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgcmVzdG9yZSAtLXNvdXJjZT0lcyAtLXN0YWdlZCDQpNCQ0JnQm+KApuKAnCwg0LfQsCDQtNCwINC40LfQstCw0LTQuNGC0LUgIgorItCk0JDQmdCb0LAg0L7RgiDQuNC90LTQtdC60YHQsCkiCisKKyM6IHd0LXN0YXR1cy5jOjE5MyB3dC1zdGF0dXMuYzoyMjUKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBybSAtLWNhY2hlZCAlcyDQpNCQ0JnQm+KApuKAnCwg0LfQsCDQtNCwINC40LfQstCw0LTQuNGC0LUg0KTQkNCZ0JvQsCDQvtGCINC40L3QtNC10LrRgdCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTk3Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgYWRkINCk0JDQmdCb4oCm4oCcLCDQt9CwINC00LAg0YPQutCw0LbQtdGC0LUg0YDQsNC30YDQtdGI0LDQstCw0L3QtdGC0L4g0L3QsCDQutC+0L3RhNC70LjQutGC0LApIgorCisjOiB3dC1zdGF0dXMuYzoxOTkgd3Qtc3RhdHVzLmM6MjAzCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgYWRkL3JtINCk0JDQmdCb4oCm4oCcLCDRgdC/0L7RgNC10LQg0YDQtdGI0LXQvdC40LXRgtC+LCDQutC+0LXRgtC+INC40LfQsdC40YDQsNGC0LUg0LfQsCAiCisi0LrQvtC90YTQu9C40LrRgtCwKSIKKworIzogd3Qtc3RhdHVzLmM6MjAxCittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBybSDQpNCQ0JnQm+KApuKAnCwg0LfQsCDQtNCwINGD0LrQsNC20LXRgtC1INGA0LDQt9GA0LXRiNCw0LLQsNC90LXRgtC+INC90LAg0LrQvtC90YTQu9C40LrRgtCwKSIKKworIzogd3Qtc3RhdHVzLmM6MjExIHd0LXN0YXR1cy5jOjEwNzQKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgItCf0YDQvtC80LXQvdC4LCDQutC+0LjRgtC+INGJ0LUg0LHRitC00LDRgiDQv9C+0LTQsNC00LXQvdC4OiIKKworIzogd3Qtc3RhdHVzLmM6MjM0IHd0LXN0YXR1cy5jOjEwODMKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgItCf0YDQvtC80LXQvdC4LCDQutC+0LjRgtC+INC90LUg0YHQsCDQsiDQuNC90LTQtdC60YHQsCDQt9CwINC/0L7QtNCw0LLQsNC90LU6IgorCisjOiB3dC1zdGF0dXMuYzoyMzgKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGFkZCDQpNCQ0JnQm+KApuKAnCwg0LfQsCDQtNCwINC+0LHQvdC+0LLQuNGC0LUg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSkiCisKKyM6IHd0LXN0YXR1cy5jOjI0MAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgYWRkL3JtINCk0JDQmdCb4oCm4oCcLCDQt9CwINC00LAg0L7QsdC90L7QstC40YLQtSDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1KSIKKworIzogd3Qtc3RhdHVzLmM6MjQxCittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZXN0b3JlIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCByZXN0b3JlINCk0JDQmdCb4oCm4oCcLCDQt9CwINC00LAg0L7RgtGF0LLRitGA0LvQuNGC0LUg0L/RgNC+0LzQtdC90LjRgtC1INCyINGA0LDQsdC+0YLQvdCw0YLQsCAiCisi0LTQuNGA0LXQutGC0L7RgNC40Y8pIgorCisjOiB3dC1zdGF0dXMuYzoyNDMKK21zZ2lkICIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiCittc2dzdHIgIiIKKyIgICjQv9C+0LTQsNC50YLQtSDQuNC70Lgg0L7RgtGF0LLRitGA0LvQtdGC0LUg0L3QtdGB0LvQtdC00LXQvdC+0YLQviDQuNC70Lgg0L/RgNC+0LzQtdC90LXQvdC+0YLQviDRgdGK0LTRitGA0LbQsNC90LjQtSDQsiAiCisi0L/QvtC00LzQvtC00YPQu9C40YLQtSkiCisKKyM6IHd0LXN0YXR1cy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0ICVzINCk0JDQmdCb4oCm4oCcLCDQt9CwINC00LAg0L7Qv9GA0LXQtNC10LvQuNGC0LUg0LrQsNC60LLQviDQstC60LvRjtGH0LLQsNGC0LUg0LIg0L/QvtC00LDQstCw0L3QtdGC0L4pIgorCisjOiB3dC1zdGF0dXMuYzoyNjgKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICLQuNC30YLRgNC40YLQuCDQsiDQtNCy0LDRgtCwINGB0LvRg9GH0LDRjzoiCisKKyM6IHd0LXN0YXR1cy5jOjI3MAorbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAi0LTQvtCx0LDQstC10L3QuCDQvtGCINCy0LDRgToiCisKKyM6IHd0LXN0YXR1cy5jOjI3MgorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgItC40LfRgtGA0LjRgtC4INC+0YIg0YLRj9GFOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc0Cittc2dpZCAiYWRkZWQgYnkgdGhlbToiCittc2dzdHIgItC00L7QsdCw0LLQtdC90Lgg0L7RgiDRgtGP0YU6IgorCisjOiB3dC1zdGF0dXMuYzoyNzYKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAi0LjQt9GC0YDQuNGC0Lgg0L7RgiDQstCw0YE6IgorCisjOiB3dC1zdGF0dXMuYzoyNzgKK21zZ2lkICJib3RoIGFkZGVkOiIKK21zZ3N0ciAi0LTQvtCx0LDQstC10L3QuCDQuCDQsiDQtNCy0LDRgtCwINGB0LvRg9GH0LDRjzoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MAorbXNnaWQgImJvdGggbW9kaWZpZWQ6IgorbXNnc3RyICLQv9GA0L7QvNC10L3QtdC90Lgg0Lgg0LIg0LTQstCw0YLQsCDRgdC70YPRh9Cw0Y86IgorCisjOiB3dC1zdGF0dXMuYzoyOTAKK21zZ2lkICJuZXcgZmlsZToiCittc2dzdHIgItC90L7QsiDRhNCw0LnQuzoiCisKKyM6IHd0LXN0YXR1cy5jOjI5MgorbXNnaWQgImNvcGllZDoiCittc2dzdHIgItC60L7Qv9C40YDQsNC9OiIKKworIzogd3Qtc3RhdHVzLmM6Mjk0Cittc2dpZCAiZGVsZXRlZDoiCittc2dzdHIgItC40LfRgtGA0LjRgjoiCisKKyM6IHd0LXN0YXR1cy5jOjI5NgorbXNnaWQgIm1vZGlmaWVkOiIKK21zZ3N0ciAi0L/RgNC+0LzQtdC90LXQvToiCisKKyM6IHd0LXN0YXR1cy5jOjI5OAorbXNnaWQgInJlbmFtZWQ6IgorbXNnc3RyICLQv9GA0LXQuNC80LXQvdGD0LLQsNC9OiIKKworIzogd3Qtc3RhdHVzLmM6MzAwCittc2dpZCAidHlwZWNoYW5nZToiCittc2dzdHIgItGB0LzRj9C90LAg0L3QsCDQstC40LTQsDoiCisKKyM6IHd0LXN0YXR1cy5jOjMwMgorbXNnaWQgInVua25vd246IgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0L/RgNC+0LzRj9C90LA6IgorCisjOiB3dC1zdGF0dXMuYzozMDQKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgItC90LXRgdC70Y/RgjoiCisKKyM6IHd0LXN0YXR1cy5jOjM4NAorbXNnaWQgIm5ldyBjb21taXRzLCAiCittc2dzdHIgItC90L7QstC4INC/0L7QtNCw0LLQsNC90LjRjywgIgorCisjOiB3dC1zdGF0dXMuYzozODYKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgItC/0YDQvtC80LXQvdC10L3QviDRgdGK0LTRitGA0LbQsNC90LjQtSwgIgorCisjOiB3dC1zdGF0dXMuYzozODgKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICLQvdC10YHQu9C10LTQtdC90L4g0YHRitC00YrRgNC20LDQvdC40LUsICIKKworIzogd3Qtc3RhdHVzLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJpZXMiCittc2dzdHJbMF0gItCY0LzQsCAlZCDRgdC60LDRgtCw0LLQsNC90LUuIgorbXNnc3RyWzFdICLQmNC80LAgJWQg0YHQutCw0YLQsNCy0LDQvdC40Y8uIgorCisjOiB3dC1zdGF0dXMuYzo5MzgKK21zZ2lkICJTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKK21zZ3N0ciAi0J/QvtC00LzQvtC00YPQu9C40YLQtSDRgdCwINC/0YDQvtC80LXQvdC10L3QuCwg0L3QviDQvdC1INGB0LAg0L7QsdC90L7QstC10L3QuDoiCisKKyM6IHd0LXN0YXR1cy5jOjk0MAorbXNnaWQgIlN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgItCf0YDQvtC80LXQvdC4INCyINC/0L7QtNC80L7QtNGD0LvQuNGC0LUg0LfQsCDQv9C+0LTQsNCy0LDQvdC1OiIKKworIzogd3Qtc3RhdHVzLmM6MTAyMgorbXNnaWQgIiIKKyJEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS5cbiIKKyJFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4iCittc2dzdHIgIiIKKyLQndC1INC/0YDQvtC80LXQvdGP0LnRgtC1INC4INC90LUg0LjQt9GC0YDQuNCy0LDQudGC0LUg0LPQvtGA0L3QuNGPINGA0LXQtC5cbiIKKyLQktGB0LjRh9C60L4g0L7RgtC00L7Qu9GDINGJ0LUg0LHRitC00LUg0LjQt9GC0YDQuNGC0L4uIgorCisjOiB3dC1zdGF0dXMuYzoxMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjb21wdXRlIHRoZSBicmFuY2ggYWhlYWQvYmVoaW5kIHZhbHVlcy5cbiIKKyJZb3UgY2FuIHVzZSAnLS1uby1haGVhZC1iZWhpbmQnIHRvIGF2b2lkIHRoaXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQmNC30YfQuNGB0LvRj9Cy0LDQvdC10YLQviDQvdCwINCx0YDQvtGPINGA0LDQt9C70LjRh9Cw0LLQsNGJ0Lgg0YHQtSDQv9C+0LTQsNCy0LDQvdC40Y8g0L7RgtC90LUgJS4yZiDRgdC10LouXG4iCisi0JfQsCDQtNCwINC40LfQsdC10LPQvdC10YLQtSDRgtC+0LLQsCwg0L/QvtC70LfQstCw0LnRgtC1IOKAni0tbm8tYWhlYWQtYmVoaW5k4oCcLlxuIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ0Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICLQndGP0LrQvtC4INC/0YrRgtC40YnQsCDQvdC1INGB0LAg0YHQu9C10YLQuC4iCisKKyM6IHd0LXN0YXR1cy5jOjExNDcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIgICjQutC+0YDQuNCz0LjRgNCw0LnRgtC1INC60L7QvdGE0LvQuNC60YLQuNGC0LUg0Lgg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCBjb21taXTigJwpIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ5Cittc2dpZCAiICAodXNlIFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiB0byBhYm9ydCB0aGUgbWVyZ2UpIgorbXNnc3RyICIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBtZXJnZSAtLWFib3J04oCcLCDQt9CwINC00LAg0L/RgNC10YPRgdGC0LDQvdC+0LLQuNGC0LUg0YHQu9C40LLQsNC90LXRgtC+KSIKKworIzogd3Qtc3RhdHVzLmM6MTE1MworbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgItCS0YHQuNGH0LrQuCDQutC+0L3RhNC70LjQutGC0Lgg0YHQsCDRgNC10YjQtdC90LgsINC90L4g0L/RgNC+0LTRitC70LbQsNCy0LDRgtC1INGB0LvQuNCy0LDQvdC10YLQvi4iCisKKyM6IHd0LXN0YXR1cy5jOjExNTYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0XCIgdG8gY29uY2x1ZGUgbWVyZ2UpIgorbXNnc3RyICIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBjb21taXTigJwsINC30LAg0LTQsCDQt9Cw0LLRitGA0YjQuNGC0LUg0YHQu9C40LLQsNC90LXRgtC+KSIKKworIzogd3Qtc3RhdHVzLmM6MTE2NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0L/RgNC40LvQsNCz0LDRgtC1INC/0L7RgNC10LTQuNGG0LAg0L7RgiDQutGA0YrQv9C60Lgg0YfRgNC10Lcg4oCeZ2l0IGFt4oCcLiIKKworIzogd3Qtc3RhdHVzLmM6MTE2OAorbXNnaWQgIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAi0KLQtdC60YPRidCw0YLQsCDQutGA0YrQv9C60LAg0LUg0L/RgNCw0LfQvdCwLiIKKworIzogd3Qtc3RhdHVzLmM6MTE3MgorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKNC60L7RgNC40LPQuNGA0LDQudGC0LUg0LrQvtC90YTQu9C40LrRgtC40YLQtSDQuCDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IGFtIC0tY29udGludWXigJwpIgorCisjOiB3dC1zdGF0dXMuYzoxMTc0Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGFtIC0tc2tpcOKAnCwg0LfQsCDQtNCwINC/0YDQvtC/0YPRgdC90LXRgtC1INGC0LDQt9C4INC60YDRitC/0LrQsCkiCisKKyM6IHd0LXN0YXR1cy5jOjExNzYKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBhbSAtLWFib3J04oCcLCDQt9CwINC00LAg0LLRitC30YHRgtCw0L3QvtCy0LjRgtC1INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QuNGPINC60LvQvtC9KSIKKworIzogd3Qtc3RhdHVzLmM6MTMwOQorbXNnaWQgImdpdC1yZWJhc2UtdG9kbyBpcyBtaXNzaW5nLiIKK21zZ3N0ciAi4oCeZ2l0LXJlYmFzZS10b2Rv4oCcINC70LjQv9GB0LLQsC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMTEKK21zZ2lkICJObyBjb21tYW5kcyBkb25lLiIKK21zZ3N0ciAi0J3QtSDRgdCwINC40LfQv9GK0LvQvdC10L3QuCDQutC+0LzQsNC90LTQuC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGFzdCBjb21tYW5kIGRvbmUgKCVkIGNvbW1hbmQgZG9uZSk6IgorbXNnaWRfcGx1cmFsICJMYXN0IGNvbW1hbmRzIGRvbmUgKCVkIGNvbW1hbmRzIGRvbmUpOiIKK21zZ3N0clswXSAi0J/QvtGB0LvQtdC00L3QviDQuNC30L/RitC70L3QtdC90LAg0LrQvtC80LDQvdC00LAgKNC40LfQv9GK0LvQvdC10L3QsCDQtSDQvtCx0YnQviAlZCDQutC+0LzQsNC90LTQsCk6IgorbXNnc3RyWzFdICLQn9C+0YHQu9C10LTQvdC+INC40LfQv9GK0LvQvdC10L3QuCDQutC+0LzQsNC90LTQuCAo0LjQt9C/0YrQu9C90LXQvdC4INGB0LAg0L7QsdGJ0L4gJWQg0LrQvtC80LDQvdC00LgpOiIKKworIzogd3Qtc3RhdHVzLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiICAo0L/QvtCy0LXRh9C1INC40L3RhNC+0YDQvNCw0YbQuNGPINC40LzQsCDQstGK0LIg0YTQsNC50LvQsCDigJ4lc+KAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjEzMzAKK21zZ2lkICJObyBjb21tYW5kcyByZW1haW5pbmcuIgorbXNnc3RyICLQndC1INC+0YHRgtCw0LLQsNGCINC/0L7QstC10YfQtSDQutC+0LzQsNC90LTQuC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV4dCBjb21tYW5kIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZCk6IgorbXNnaWRfcGx1cmFsICJOZXh0IGNvbW1hbmRzIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZHMpOiIKK21zZ3N0clswXSAi0KHQu9C10LTQstCw0YnQsCDQutC+0LzQsNC90LTQsCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC1ICjQvtGB0YLQsNCy0LAg0L7RidC1ICVkINC60L7QvNCw0L3QtNCwKToiCittc2dzdHJbMV0gItCh0LvQtdC00LLQsNGJ0Lgg0LrQvtC80LDQvdC00Lgg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtSAo0L7RgdGC0LDQstCw0YIg0L7RidC1ICVkINC60L7QvNCw0L3QtNC4KToiCisKKyM6IHd0LXN0YXR1cy5jOjEzNDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgdG8gdmlldyBhbmQgZWRpdCkiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCByZWJhc2UgLS1lZGl0LXRvZG/igJwsINC30LAg0LTQsCDRgNCw0LfQs9C70LXQtNCw0YLQtSDQuCDRgNC10LTQsNC60YLQuNGA0LDRgtC1KSIKKworIzogd3Qtc3RhdHVzLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0L/RgNC10LHQsNC30LjRgNCw0YLQtSDQutC70L7QvdCwIOKAniVz4oCcINCy0YrRgNGF0YMg4oCeJXPigJwuIgorCisjOiB3dC1zdGF0dXMuYzoxMzU4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDQv9GA0LXQsdCw0LfQuNGA0LDRgtC1LiIKKworIzogd3Qtc3RhdHVzLmM6MTM3MQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjQutC+0YDQuNCz0LjRgNCw0LnRgtC1INC60L7QvdGE0LvQuNC60YLQuNGC0LUg0Lgg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgcmViYXNlIC0tY29udGludWXigJwpIgorCisjOiB3dC1zdGF0dXMuYzoxMzczCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCByZWJhc2UgLS1za2lw4oCcLCDQt9CwINC00LAg0L/RgNC+0L/Rg9GB0L3QtdGC0LUg0YLQsNC30Lgg0LrRgNGK0L/QutCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTM3NQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IHJlYmFzZSAtLWFib3J04oCcLCDQt9CwINC00LAg0LLRitC30YHRgtCw0L3QvtCy0LjRgtC1INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QuNGPINC60LvQvtC9KSIKKworIzogd3Qtc3RhdHVzLmM6MTM4MgorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo0LLRgdC40YfQutC4INC60L7QvdGE0LvQuNC60YLQuCDRgdCwINC60L7RgNC40LPQuNGA0LDQvdC4OiDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJlYmFzZSAtLWNvbnRpbnVl4oCcKSIKKworIzogd3Qtc3RhdHVzLmM6MTM4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDRgNCw0LfQtNC10LvRj9GC0LUg0L/QvtC00LDQstCw0L3QtSDQtNC+0LrQsNGC0L4g0L/RgNC10LHQsNC30LjRgNCw0YLQtSDQutC70L7QvdCwIOKAniVz4oCcINCy0YrRgNGF0YMg4oCeJXPigJwuIgorCisjOiB3dC1zdGF0dXMuYzoxMzkxCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGA0LDQt9C00LXQu9GP0YLQtSDQv9C+0LTQsNCy0LDQvdC1INC00L7QutCw0YLQviDQv9GA0LXQsdCw0LfQuNGA0LDRgtC1LiIKKworIzogd3Qtc3RhdHVzLmM6MTM5NAorbXNnaWQgIiAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAo0KHQu9C10LQg0LrQsNGC0L4g0YDQsNCx0L7RgtC90L7RgtC+INCy0Lgg0LTRitGA0LLQviDRgdGC0LDQvdC1INGH0LjRgdGC0L4sINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZeKAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorItCSINC80L7QvNC10L3RgtCwINGA0LXQtNCw0LrRgtC40YDQsNGC0LUg0L/QvtC00LDQstCw0L3QtSDQtNC+0LrQsNGC0L4g0L/RgNC10LHQsNC30LjRgNCw0YLQtSDQutC70L7QvdCwIOKAniVz4oCcINCy0YrRgNGF0YMg4oCeJXPigJwuIgorCisjOiB3dC1zdGF0dXMuYzoxNDAzCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDRgNC10LTQsNC60YLQuNGA0LDRgtC1INC/0L7QtNCw0LLQsNC90LUg0LTQvtC60LDRgtC+INC/0YDQtdCx0LDQt9C40YDQsNGC0LUuIgorCisjOiB3dC1zdGF0dXMuYzoxNDA2Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGNvbW1pdCAtLWFtZW5k4oCcLCDQt9CwINC00LAg0YDQtdC00LDQutGC0LjRgNCw0YLQtSDRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUpIgorCisjOiB3dC1zdGF0dXMuYzoxNDA4Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgcmViYXNlIC0tY29udGludWXigJwsINGB0LvQtdC0INC60LDRgtC+INC30LDQstGK0YDRiNC40YLQtSDQv9GA0L7QvNC10L3QuNGC0LUg0YHQuCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0MTkKK21zZ2lkICJDaGVycnktcGljayBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDRgdC1INC40LfQstGK0YDRiNCy0LAg0L7RgtCx0LjRgNCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRjy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0L7RgtCx0LjRgNCw0YLQtSDQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnC4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MjkKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo0LrQvtGA0LjQs9C40YDQsNC50YLQtSDQutC+0L3RhNC70LjQutGC0LjRgtC1INC4INC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZeKAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzIKK21zZ2lkICIgIChydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHRvIGNvbnRpbnVlKSIKK21zZ3N0ciAiICAo0LfQsCDQtNCwINC/0YDQvtC00YrQu9C20LjRgtC1LCDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWXigJwpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM1Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgICjQstGB0LjRh9C60Lgg0LrQvtC90YTQu9C40LrRgtC4INGB0LAg0LrQvtGA0LjQs9C40YDQsNC90LgsINC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZeKAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzcKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgY2hlcnJ5LXBpY2sgLS1za2lw4oCcLCDQt9CwINC00LAg0L/RgNC+0L/Rg9GB0L3QtdGC0LUg0YLQsNC30Lgg0LrRgNGK0L/QutCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzOQorbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgY2hlcnJ5LXBpY2sgLS1hYm9ydOKAnCwg0LfQsCDQtNCwINC+0YLQvNC10L3QuNGC0LUg0LLRgdC40YfQutC4INC00LXQudGB0YLQstC40Y8g0YEgIgorItC+0YLQsdC40YDQsNC90LUpIgorCisjOiB3dC1zdGF0dXMuYzoxNDQ5Cittc2dpZCAiUmV2ZXJ0IGN1cnJlbnRseSBpbiBwcm9ncmVzcy4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGC0LXRh9C1INC+0YLQvNGP0L3QsCDQvdCwINC/0L7QtNCw0LLQsNC90LUuIgorCisjOiB3dC1zdGF0dXMuYzoxNDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJldmVydGluZyBjb21taXQgJXMuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDQvtGC0LzQtdC90Y/RgtC1INC/0L7QtNCw0LLQsNC90LUg4oCeJXPigJwuIgorCisjOiB3dC1zdGF0dXMuYzoxNDU4Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjQutC+0YDQuNCz0LjRgNCw0LnRgtC1INC60L7QvdGE0LvQuNC60YLQuNGC0LUg0Lgg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCByZXZlcnQgLS1jb250aW51ZeKAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjEKK21zZ2lkICIgIChydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIiB0byBjb250aW51ZSkiCittc2dzdHIgIiAgKNC30LAg0LTQsCDQv9GA0L7QtNGK0LvQttC40YLQtSwg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCByZXZlcnQgLS1jb250aW51ZeKAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjQKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKNCy0YHQuNGH0LrQuCDQutC+0L3RhNC70LjQutGC0Lgg0YHQsCDQutC+0YDQuNCz0LjRgNCw0L3QuCwg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCByZXZlcnQgLS1jb250aW51ZeKAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjYKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IHJldmVydCAtLXNraXDigJwsINC30LAg0LTQsCDQv9GA0L7Qv9GD0YHQvdC10YLQtSDRgtCw0LfQuCDQutGA0YrQv9C60LApIgorCisjOiB3dC1zdGF0dXMuYzoxNDY4Cittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IHJldmVydCAtLWFib3J04oCcLCDQt9CwINC00LAg0L/RgNC10YPRgdGC0LDQvdC+0LLQuNGC0LUg0L7RgtC80Y/QvdCw0YLQsCDQvdCwICIKKyLQv9C+0LTQsNCy0LDQvdC1KSIKKworIzogd3Qtc3RhdHVzLmM6MTQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJyVzJy4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGC0YrRgNGB0LjRgtC1INC00LLQvtC40YfQvdC+LCDQutCw0YLQviDRgdGC0LUg0YHRgtCw0YDRgtC40YDQsNC70Lgg0L7RgiDQutC70L7QvSDigJ4lc+KAnC4iCisKKyM6IHd0LXN0YXR1cy5jOjE0ODIKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDRgtGK0YDRgdC40YLQtSDQtNCy0L7QuNGH0L3Qvi4iCisKKyM6IHd0LXN0YXR1cy5jOjE0ODUKK21zZ2lkICIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBiaXNlY3QgcmVzZXTigJwsINC30LAg0LTQsCDRgdC1INCy0YrRgNC90LXRgtC1INC60YrQvCDQv9GK0YDQstC+0L3QsNGH0LDQu9C90L7RgtC+ICIKKyLRgdGK0YHRgtC+0Y/QvdC40LUg0Lgg0LrQu9C+0L0pIgorCisjOiB3dC1zdGF0dXMuYzoxNjk0Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAi0J3QsCDQutC70L7QvSAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDEKK21zZ2lkICJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICLQuNC30LLRitGA0YjQstCw0YLQtSDQuNC90YLQtdGA0LDQutGC0LjQstC90L4g0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQstGK0YDRhdGDICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMworbXNnaWQgInJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgItC40LfQstGK0YDRiNCy0LDRgtC1INC/0YDQtdCx0LDQt9C40YDQsNC90LUg0LLRitGA0YXRgyAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MTMKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICLQmNC30LLRitC9INCy0YHQuNGH0LrQuCDQutC70L7QvdC4LiIKKworIzogd3Qtc3RhdHVzLmM6MTczMAorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICLQn9GK0YDQstC+0L3QsNGH0LDQu9C90L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogd3Qtc3RhdHVzLmM6MTczMQorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IgorbXNnc3RyICLQktGB0LUg0L7RidC1INC70LjQv9GB0LLQsNGCINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogd3Qtc3RhdHVzLmM6MTc0NQorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi0J3QtdGB0LvQtdC00LXQvdC4INGE0LDQudC70L7QstC1IgorCisjOiB3dC1zdGF0dXMuYzoxNzQ3Cittc2dpZCAiSWdub3JlZCBmaWxlcyIKK21zZ3N0ciAi0JjQs9C90L7RgNC40YDQsNC90Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICdzdGF0dXMgLXVubydcbiIKKyJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkXG4iCisibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKK21zZ3N0ciAiIgorItCR0Y/RhdCwINC90LXQvtCx0YXQvtC00LjQvNC4ICUuMmYg0YHQtdC60YPQvdC00Lgg0LfQsCDQuNC30LHRgNC+0Y/QstCw0L3QtdGC0L4g0L3QsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1LlxuIgorItCU0L7QsdCw0LLRj9C90LXRgtC+INC90LAg0L7Qv9GG0LjRj9GC0LAg4oCeLXVub+KAnCDQutGK0Lwg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBzdGF0dXPigJwsINGJ0LUg0YPRgdC60L7RgNC4XG4iCisi0LjQt9C/0YrQu9C90LXQvdC40LXRgtC+LCDQvdC+INGJ0LUg0YLRgNGP0LHQstCwINC00LAg0LTQvtCx0LDQstGP0YLQtSDQvdC+0LLQuNGC0LUg0YTQsNC50LvQvtCy0LUg0YDRitGH0L3Qvi5cbiIKKyLQl9CwINC/0L7QstC10YfQtSDQv9C+0LTRgNC+0LHQvdC+0YHRgtC4INC/0L7Qs9C70LXQtNC90LXRgtC1IOKAnmdpdCBzdGF0dXMgaGVscOKAnC4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAi0J3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQvdC1INGB0LAg0LjQt9Cy0LXQtNC10L3QuCVzIgorCisjOiB3dC1zdGF0dXMuYzoxNzU5Cittc2dpZCAiICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAiICjQuNC30L/QvtC70LfQstCw0LnRgtC1INC+0L/RhtC40Y/RgtCwIOKAni114oCcLCDQt9CwINC00LAg0LjQt9Cy0LXQtNC10YLQtSDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1KSIKKworIzogd3Qtc3RhdHVzLmM6MTc2NQorbXNnaWQgIk5vIGNoYW5nZXMiCittc2dzdHIgItCd0Y/QvNCwINC/0YDQvtC80LXQvdC4IgorCisjOiB3dC1zdGF0dXMuYzoxNzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICIiCisi0LrRitC8INC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSDQvdC1INGB0LAg0LTQvtCx0LDQstC10L3QuCDQv9GA0L7QvNC10L3QuCAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgYWRk4oCcINC4L9C40LvQuCAiCisi4oCeZ2l0IGNvbW1pdCAtYeKAnClcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdFxuIgorbXNnc3RyICLQutGK0Lwg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1INC90LUg0YHQsCDQtNC+0LHQsNCy0LXQvdC4INC/0YDQvtC80LXQvdC4XG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvICIKKyJ0cmFjaylcbiIKK21zZ3N0ciAiIgorItC60YrQvCDQuNC90LTQtdC60YHQsCDQt9CwINC/0L7QtNCw0LLQsNC90LUg0L3QtSDRgdCwINC00L7QsdCw0LLQtdC90Lgg0L/RgNC+0LzQtdC90LgsINC90L4g0LjQvNCwINC90L7QstC4INGE0LDQudC70L7QstC1ICIKKyIo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgYWRk4oCcLCDQt9CwINC00LAg0LfQsNC/0L7Rh9C90LUg0YLRj9GF0L3QvtGC0L4g0YHQu9C10LTQtdC90LUpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50XG4iCittc2dzdHIgItC60YrQvCDQuNC90LTQtdC60YHQsCDQt9CwINC/0L7QtNCw0LLQsNC90LUg0L3QtSDRgdCwINC00L7QsdCw0LLQtdC90Lgg0L/RgNC+0LzQtdC90LgsINC90L4g0LjQvNCwINC90L7QstC4INGE0LDQudC70L7QstC1XG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iCittc2dzdHIgIiIKKyLQu9C40L/RgdCy0LDRgiDQutCw0LrQstC40YLQviDQuCDQtNCwINC1INC/0YDQvtC80LXQvdC4ICjRgdGK0LfQtNCw0LnRgtC1INC40LvQuCDQutC+0L/QuNGA0LDQudGC0LUg0YTQsNC50LvQvtCy0LUg0Lgg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSAiCisi4oCeZ2l0IGFkZOKAnCwg0LfQsCDQtNCwINC30LDQv9C+0YfQvdC1INGC0Y/RhdC90L7RgtC+INGB0LvQtdC00LXQvdC1KVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzg1IHd0LXN0YXR1cy5jOjE3OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXRcbiIKK21zZ3N0ciAi0LvQuNC/0YHQstCw0YIg0LrQsNC60LLQuNGC0L4g0Lgg0LTQsCDQtSDQv9GA0L7QvNC10L3QuFxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpXG4iCittc2dzdHIgIiIKKyLQu9C40L/RgdCy0LDRgiDQutCw0LrQstC40YLQviDQuCDQtNCwINC1INC/0YDQvtC80LXQvdC4ICjQuNC30L/QvtC70LfQstCw0LnRgtC1INC+0L/RhtC40Y/RgtCwIOKAni114oCcLCDQt9CwINC00LAg0YHQtSDQuNC30LLQtdC00LDRgiDQuCAiCisi0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuXG4iCittc2dzdHIgItC70LjQv9GB0LLQsNGCINC60LDQutCy0LjRgtC+INC4INC00LAg0LUg0L/RgNC+0LzQtdC90LgsINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC1INGH0LjRgdGC0L5cbiIKKworIzogd3Qtc3RhdHVzLmM6MTkwNQorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IG9uICIKK21zZ3N0ciAi0JLRgdC1INC+0YnQtSDQu9C40L/RgdCy0LDRgiDQv9C+0LTQsNCy0LDQvdC40Y8g0LIgIgorCisjOiB3dC1zdGF0dXMuYzoxOTA5Cittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRCAo0LjQt9Cy0YrQvSDQutC70L7QvSkiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDAKK21zZ2lkICJkaWZmZXJlbnQiCittc2dzdHIgItGA0LDQt9C70LjRh9C10L0iCisKKyM6IHd0LXN0YXR1cy5jOjE5NDIgd3Qtc3RhdHVzLmM6MTk1MAorbXNnaWQgImJlaGluZCAiCittc2dzdHIgItC90LDQt9Cw0LQg0YEgIgorCisjOiB3dC1zdGF0dXMuYzoxOTQ1IHd0LXN0YXR1cy5jOjE5NDgKK21zZ2lkICJhaGVhZCAiCittc2dzdHIgItC90LDQv9GA0LXQtCDRgSAiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgYWN0aW9uIGlzIGUuZy4gInB1bGwgd2l0aCByZWJhc2UiCisjOiB3dC1zdGF0dXMuYzoyNDcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDQuNC30LLRitGA0YjQuNGC0LUg4oCeJXPigJwsINC30LDRidC+0YLQviDQuNC80LAg0L/RgNC+0LzQtdC90LgsINC60L7QuNGC0L4g0L3QtSDRgdCwINCyINC40L3QtNC10LrRgdCwLiIKKworIzogd3Qtc3RhdHVzLmM6MjQ3NgorbXNnaWQgImFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0L7RgdCy0LXQvSDRgtC+0LLQsCDQsiDQuNC90LTQtdC60YHQsCDQuNC80LAg0L3QtdC/0L7QtNCw0LTQtdC90Lgg0L/RgNC+0LzQtdC90LguIgorCisjOiB3dC1zdGF0dXMuYzoyNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINC40LfQstGK0YDRiNC40YLQtSDigJ4lc+KAnCwg0LfQsNGJ0L7RgtC+INCyINC40L3QtNC10LrRgdCwINC40LzQsCDQvdC10L/QvtC00LDQtNC10L3QuCDQv9GA0L7QvNC10L3QuC4iCisKKyM6IGNvbXBhdC9wcmVjb21wb3NlX3V0ZjguYzo1OCBidWlsdGluL2Nsb25lLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2FkZC5jOjI2Cittc2dpZCAiZ2l0IGFkZCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBhZGQgW9Ce0J/QptCY0K/igKZdIFstLV0g0J/QqtCi4oCmIgorCisjOiBidWlsdGluL2FkZC5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgItC90LXQvtGH0LDQutCy0LDQvSDQuNC30YXQvtC00LXQvSDQutC+0LQg0L/RgNC4INCz0LXQvdC10YDQuNGA0LDQvdC1INC90LAg0YDQsNC30LvQuNC60LA6ICVjIgorCisjOiBidWlsdGluL2FkZC5jOjkzIGJ1aWx0aW4vY29tbWl0LmM6Mjg4Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc4Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgItCf0YDQvtC80LXQvdC4LCDQutC+0LjRgtC+INC4INGB0LvQtdC0INC+0LHQvdC+0LLRj9Cy0LDQvdC10YLQviDQvdCwINC40L3QtNC10LrRgdCwINC90LUg0YHQsCDQtNC+0LHQsNCy0LXQvdC4INC60YrQvCDQvdC10LPQvjoiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY2IGJ1aWx0aW4vcmV2LXBhcnNlLmM6ODk5Cittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICLQmNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL2FkZC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAi0KTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSDQt9CwINC30LDQv9C40YEuIgorCisjOiBidWlsdGluL2FkZC5jOjI4MQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAi0JrRgNGK0L/QutCw0YLQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L3QsCIKKworIzogYnVpbHRpbi9hZGQuYzoyODQKK21zZ2lkICJlZGl0aW5nIHBhdGNoIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDQutGA0YrQv9C60LAiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9GD0YfQuCDQuNC90YTQvtGA0LzQsNGG0LjRjyDRh9GA0LXQtyDigJ5zdGF04oCcINC30LAg0YTQsNC50LvQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9hZGQuYzoyODkKK21zZ2lkICJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iCittc2dzdHIgItCf0YDQsNC30L3QsCDQutGA0YrQv9C60LAsINC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC00LXQudGB0YLQstC40LXRgtC+LiIKKworIzogYnVpbHRpbi9hZGQuYzoyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICclcyciCittc2dzdHIgItCa0YDRitC/0LrQsNGC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQuNC70L7QttC10L3QsCIKKworIzogYnVpbHRpbi9hZGQuYzozMDIKK21zZ2lkICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCittc2dzdHIgIiIKKyLQodC70LXQtNC90LjRgtC1INC/0YrRgtC40YnQsCDRidC1INCx0YrQtNCw0YIg0LjQs9C90L7RgNC40YDQsNC90Lgg0YHQv9C+0YDQtdC0INC90Y/QutC+0Lkg0L7RgiDRhNCw0LnQu9C+0LLQtdGC0LUg4oCeLmdpdGlnbm9yZeKAnDpcbiIKKworIzogYnVpbHRpbi9hZGQuYzozMjIgYnVpbHRpbi9jbGVhbi5jOjkxMCBidWlsdGluL2ZldGNoLmM6MTYzIGJ1aWx0aW4vbXYuYzoxMjQKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTYgYnVpbHRpbi9wdWxsLmM6MjAzIGJ1aWx0aW4vcHVzaC5jOjU0OAorIzogYnVpbHRpbi9yZW1vdGUuYzoxNDIxIGJ1aWx0aW4vcm0uYzoyNDIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjUKK21zZ2lkICJkcnkgcnVuIgorbXNnc3RyICLQv9GA0L7QsdC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI1Cittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAi0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+INC+0YLQsdC40YDQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuCIKKworIzogYnVpbHRpbi9hZGQuYzozMjYgYnVpbHRpbi9jaGVja291dC5jOjE1MTEgYnVpbHRpbi9yZXNldC5jOjMwNworbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICLQuNC90YLQtdGA0LDQutGC0LjQstC10L0g0LjQt9Cx0L7RgCDQvdCwINC/0LDRgNGH0LXRgtCwINC60L7QtCIKKworIzogYnVpbHRpbi9hZGQuYzozMjcKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgItGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDRgtC10LrRg9GJ0LDRgtCwINGA0LDQt9C70LjQutCwINC4INC/0YDQuNC70LDQs9Cw0L3QtSIKKworIzogYnVpbHRpbi9hZGQuYzozMjgKK21zZ2lkICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0Lgg0L3QsCDQuNC90LDRh9C1INC40LPQvdC+0YDQuNGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9hZGQuYzozMjkKK21zZ2lkICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMwCittc2dpZCAicmVub3JtYWxpemUgRU9MIG9mIHRyYWNrZWQgZmlsZXMgKGltcGxpZXMgLXUpIgorbXNnc3RyICLRg9C10LTQvdCw0LrQstGP0LLQsNC90LUg0L3QsCDQt9C90LDRhtC40YLQtSDQt9CwINC60YDQsNC5INC90LAg0YTQsNC50LsgKNCy0LrQu9GO0YfQstCwINC+0L/RhtC40Y/RgtCwIOKAni114oCcKSIKKworIzogYnVpbHRpbi9hZGQuYzozMzEKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgItC+0YLQsdC10LvRj9C30LLQsNC90LUg0YHQsNC80L4g0L3QsCDRhNCw0LrRgtCwLCDRh9C1INC/0YrRgtGP0YIg0YnQtSDQsdGK0LTQtSDQtNC+0LHQsNCy0LXQvSDQv9C+LdC60YrRgdC90L4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMyCittc2dpZCAiYWRkIGNoYW5nZXMgZnJvbSBhbGwgdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0LLRgdC40YfQutC4INC/0YDQvtC80LXQvdC4INCyINGB0LvQtdC00LXQvdC40YLQtSDQuCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2FkZC5jOjMzNQorbXNnaWQgImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIgorbXNnc3RyICIiCisi0LjQs9C90L7RgNC40YDQsNC90LUg0L3QsCDQv9GK0YLQuNGJ0LDRgtCwLCDQutC+0LjRgtC+INGB0LAg0LjQt9GC0YDQuNGC0Lgg0L7RgiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviAo0YHRitGJ0L7RgtC+INC60LDRgtC+IOKAni0tIgorIm5vLWFsbOKAnCkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM3Cittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICLQsdC10Lcg0LTQvtCx0LDQstGP0L3QtSDQvdCwINC90L7QstC4INGE0LDQudC70L7QstC1LCDRgdCw0LzQviDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2FkZC5jOjMzOAorbXNnaWQgImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiCittc2dzdHIgIiIKKyLQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSwg0LrQvtC40YLQviDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC00L7QsdCw0LLQtdC90Lgg0L/QvtGA0LDQtNC4INCz0YDQtdGI0LrQuCIKKworIzogYnVpbHRpbi9hZGQuYzozMzkKK21zZ2lkICJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iCittc2dzdHIgIiIKKyLQv9GA0L7QstC10YDQutCwLCDRh9C1INC/0YDQuCDQv9GA0L7QsdC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0LLRgdC40YfQutC4INGE0LDQudC70L7QstC1LCDQtNC+0YDQuCDQuCDQuNC30YLRgNC40YLQuNGC0LUsINGB0LUgIgorItC40LPQvdC+0YDQuNGA0LDRgiIKKworIzogYnVpbHRpbi9hZGQuYzozNDEgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA0Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgItC40LfRgNC40YfQvdC+INC30LDQtNCw0LLQsNC90LUg0L3QsCDRgdGC0L7QudC90L7RgdGC0YLQsCDQvdCwINGE0LvQsNCz0LAg0LTQsNC70Lgg0YTQsNC50LvRitGCINC1INC40LfQv9GK0LvQvdC40LwiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQzCittc2dpZCAid2FybiB3aGVuIGFkZGluZyBhbiBlbWJlZGRlZCByZXBvc2l0b3J5IgorbXNnc3RyICLQv9GA0LXQtNGD0L/RgNC10LbQtNCw0LLQsNC90LUg0L/RgNC4INC00L7QsdCw0LLRj9C90LUg0L3QsCDQstCz0YDQsNC00LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9hZGQuYzozNDUKK21zZ2lkICJiYWNrZW5kIGZvciBgZ2l0IHN0YXNoIC1wYCIKK21zZ3N0ciAi0YDQtdCw0LvQuNC30LDRhtC40Y8g0L3QsCDigJ5naXQgc3Rhc2ggLXDigJwiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIklmIHlvdSBhZGRlZCB0aGlzIHBhdGggYnkgbWlzdGFrZSwgeW91IGNhbiByZW1vdmUgaXQgZnJvbSB0aGVcbiIKKyJpbmRleCB3aXRoOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2VlIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisi0JjQt9GC0LXQs9C70LjQu9C4INGB0YLQtSDQtNC+0L/RitC70L3QuNGC0LXQu9C90L4g0YXRgNCw0L3QuNC70LjRidC1INCyINGC0LXQutGD0YnQvtGC0L4uICDQmtC+0LPQsNGC0L4g0LrQu9C+0L3QuNGA0LDRgtC1ICIKKyLQvtCx0YXQstCw0YnQsNGJ0L7RgtC+XG4iCisi0YXRgNCw0L3QuNC70LjRidC1INC90Y/QvNCwINC00LAg0L/QvtC70YPRh9C40YLQtSDQstCz0YDQsNC00LXQvdC+0YLQviwg0LfQsNGJ0L7RgtC+INCy0YrQvdGI0L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INC90Y/QvNCwICIKKyLQv9GA0LXQtNGB0YLQsNCy0LBcbiIKKyLQt9CwINCy0YrRgtGA0LXRiNC90L7RgtC+LiAg0JfQsCDQtNCwINC00L7QsdCw0LLQuNGC0LUg0L/QvtC00LzQvtC00YPQuywg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgc3VibW9kdWxlIGFkZCDQkNCU0KDQldChICVzXG4iCisiXG4iCisi0JDQutC+INC00L7QsdCw0LLRj9C90LXRgtC+INC1INCz0YDQtdGI0LrQsCwg0LzQvtC20LUg0LTQsCDQs9C+INC40LfQstCw0LTQuNGC0LUg0L7RgiDQuNC90LTQtdC60YHQsCDRgSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorItCX0LAg0L/QvtCy0LXRh9C1INC40L3RhNC+0YDQvNCw0YbQuNGPINC/0L7Qs9C70LXQtNC90LXRgtC1IOKAnmdpdCBoZWxwIHN1Ym1vZHVsZeKAnC4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZyBlbWJlZGRlZCBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDQstCz0YDQsNC00LXQvdC+INGF0YDQsNC90LjQu9C40YnQtTogJXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDEwCittc2dpZCAiIgorIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZElnbm9yZWRGaWxlIGZhbHNlXCIiCittc2dzdHIgIiIKKyLQn9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLWbigJwsINCw0LrQviDQvdCw0LjRgdGC0LjQvdCwINC40YHQutCw0YLQtSDQtNCwINCz0Lgg0LTQvtCx0LDQstC40YLQtS5cbiIKKyLQl9CwINC00LAg0LjQt9C60LvRjtGH0LjRgtC1INGC0L7QstCwINGB0YrQvtCx0YnQtdC90LjQtSwg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIGFkdmljZS5hZGRJZ25vcmVkRmlsZSBmYWxzZSIKKworIzogYnVpbHRpbi9hZGQuYzo0MTkKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LTQvtCx0LDQstGP0L3QtSDQvdCwINGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2FkZC5jOjQ0NyBidWlsdGluL2NvbW1pdC5jOjM0OAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0taW50ZXJhY3RpdmUvLS1wYXRjaCIKK21zZ3N0ciAiIgorItC+0L/RhtC40Y/RgtCwIOKAni0tcGF0aHNwZWMtZnJvbS1maWxl4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQstGB0Y/QutCwINC+0YIg0L7Qv9GG0LjQuNGC0LUg4oCeLS0iCisiaW50ZXJhY3RpdmXigJwv4oCeLS1wYXRjaOKAnCIKKworIzogYnVpbHRpbi9hZGQuYzo0NjQKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWVkaXQiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tcGF0aHNwZWMtZnJvbS1maWxl4oCcINC4IOKAni0tZWRpdOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9hZGQuYzo0NzYKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLUHigJwg0Lgg4oCeLXXigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDc5Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLS1pZ25vcmUtbWlzc2luZ+KAnCDQuNC30LjRgdC60LLQsCDigJ4tLWRyeS1ydW7igJwiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tY2htb2QgcGFyYW0gJyVzJyBtdXN0IGJlIGVpdGhlciAteCBvciAreCIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRitGA0YrRgiDQutGK0Lwg4oCeLS1jaG1vZOKAnCDigJQg4oCeJXPigJwg0LzQvtC20LUg0LTQsCDQtSDQuNC70Lgg4oCeLXjigJwsINC40LvQuCDigJ4reOKAnCIKKworIzogYnVpbHRpbi9hZGQuYzo1MDEgYnVpbHRpbi9jaGVja291dC5jOjE2NzUgYnVpbHRpbi9jb21taXQuYzozNTQKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjcgYnVpbHRpbi9ybS5jOjI3MiBidWlsdGluL3N0YXNoLmM6MTUwOQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorItC+0L/RhtC40Y/RgtCwIOKAni0tcGF0aHNwZWMtZnJvbS1maWxl4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQsNGA0LPRg9C80LXQvdGC0LgsINGD0LrQsNC30LLQsNGJ0Lgg0L/RitGC0LjRidCwIgorCisjOiBidWlsdGluL2FkZC5jOjUwOCBidWlsdGluL2NoZWNrb3V0LmM6MTY4NyBidWlsdGluL2NvbW1pdC5jOjM2MAorIzogYnVpbHRpbi9yZXNldC5jOjMzMyBidWlsdGluL3JtLmM6Mjc4IGJ1aWx0aW4vc3Rhc2guYzoxNTE1Cittc2dpZCAiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1wYXRoc3BlYy1maWxlLW51bOKAnCDQuNC30LjRgdC60LLQsCDQvtC/0YbQuNGPIOKAni0tcGF0aHNwZWMtZnJvbS1maWxl4oCcIgorCisjOiBidWlsdGluL2FkZC5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAi0J3QuNGJ0L4g0L3QtSDQtSDQt9Cw0LTQsNC00LXQvdC+INC4INC90LjRidC+INC90LUg0LUg0LTQvtCx0LDQstC10L3Qvi5cbiIKKworIzogYnVpbHRpbi9hZGQuYzo1MTQKK21zZ2lkICIiCisiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZEVtcHR5UGF0aHNwZWMgZmFsc2VcIiIKK21zZ3N0ciAiIgorIuKAnmdpdCBhZGQgLuKAnCDQu9C4INC40YHQutCw0YXRgtC1INC00LAg0LjQt9C/0YrQu9C90LjRgtC1P1xuIgorItCX0LAg0LTQsCDQuNC30LrQu9GO0YfQuNGC0LUg0YLQvtCy0LAg0YHRitC+0LHRidC10L3QuNC1LCDQuNC30L/RitC70L3QtdGC0LU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgYWR2aWNlLmFkZEVtcHR5UGF0aHNwZWMgZmFsc2UiCisKKyM6IGJ1aWx0aW4vYW0uYzozNTIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAi0YHQutGA0LjQv9GC0YrRgiDQt9CwINCw0LLRgtC+0YAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwIgorCisjOiBidWlsdGluL2FtLmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgIuKAniVz4oCcINCx0LUg0LjQt9GC0YDQuNGCINC+0YIg0LrRg9C60LDRgtCwIOKAnmFwcGx5cGF0Y2gtbXNn4oCcIgorCisjOiBidWlsdGluL2FtLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAi0JTQsNC00LXQvdC40Y/RgiDQstGF0L7QtNC10L0g0YDQtdC0INC1INGBINC90LXQv9GA0LDQstC40LvQtdC9INGE0L7RgNC80LDRgjog4oCeJXPigJwuIgorCisjOiBidWlsdGluL2FtLmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICLQkdC10LvQtdC20LrQsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LrQvtC/0LjRgNCwINC+0YIg4oCeJXPigJwg0LrRitC8IOKAniVz4oCcIgorCisjOiBidWlsdGluL2FtLmM6NTQyCittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ5mc2Vla+KAnCIKKworIzogYnVpbHRpbi9hbS5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIKK21zZ3N0ciAi0LrRgNGK0L/QutCw0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQsNC90LDQu9C40LfQuNGA0LAiCisKKyM6IGJ1aWx0aW4vYW0uYzo3OTUKK21zZ2lkICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKK21zZ3N0ciAiIgorItCh0LDQvNC+INC10LTQvdCwINC/0L7RgNC10LTQuNGG0LAg0L7RgiDQutGA0YrQv9C60Lgg0L7RgiDigJ5TdEdJVOKAnCDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQuNC70LDQs9Cw0L3QsCDQsiDQtNCw0LTQtdC9INC80L7QvNC10L3RgiIKKworIzogYnVpbHRpbi9hbS5jOjg0MworbXNnaWQgImludmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg0LLRgNC10LzQtSIKKworIzogYnVpbHRpbi9hbS5jOjg0OCBidWlsdGluL2FtLmM6ODYwCittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGA0LXQtCDQt9CwINC00LDRgtCwIOKAnkRhdGXigJwiCisKKyM6IGJ1aWx0aW4vYW0uYzo4NTUKK21zZ2lkICJpbnZhbGlkIHRpbWV6b25lIG9mZnNldCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0L7RgtC80LXRgdGC0LLQsNC90LUg0L3QsCDRh9Cw0YHQvtCy0LjRjyDQv9C+0Y/RgSIKKworIzogYnVpbHRpbi9hbS5jOjk0OAorbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAi0KTQvtGA0LzQsNGC0YrRgiDQvdCwINC60YDRitC/0LrQsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0L/RgNC10LTQtdC70LXQvS4iCisKKyM6IGJ1aWx0aW4vYW0uYzo5NTMgYnVpbHRpbi9jbG9uZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L3QsCIKKworIzogYnVpbHRpbi9hbS5jOjk1OAorbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAi0JrRgNGK0L/QutC40YLQtSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINGA0LDQt9C00LXQu9C10L3QuC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIlcyAtLWNvbnRpbnVlXCIuIgorbXNnc3RyICLQodC70LXQtCDQutC+0YDQuNCz0LjRgNCw0L3QtdGC0L4g0L3QsCDRgtC+0LfQuCDQv9GA0L7QsdC70LXQvCDQuNC30L/RitC70L3QtdGC0LUg4oCeJXMgLS1jb250aW51ZeKAnC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIlcyAtLXNraXBcIiBpbnN0ZWFkLiIKK21zZ3N0ciAi0JDQutC+INC/0YDQtdC00L/QvtGH0LjRgtCw0YLQtSDQtNCwINC/0YDQtdGB0LrQvtGH0LjRgtC1INGC0LDQt9C4INC60YDRitC/0LrQsCwg0LjQt9C/0YrQu9C90LXRgtC1IOKAniVzIC0tc2tpcOKAnC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJXMgLS1hYm9ydFwiLiIKK21zZ3N0ciAi0JfQsCDQtNCwINGB0LUg0LLRitGA0L3QtdGC0LUg0LrRitC8INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0YHRitGB0YLQvtGP0L3QuNC1LCDQuNC30L/RitC70L3QtdGC0LUg4oCeJXMgLS1hYm9ydOKAnC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTc0Cittc2dpZCAiUGF0Y2ggc2VudCB3aXRoIGZvcm1hdD1mbG93ZWQ7IHNwYWNlIGF0IHRoZSBlbmQgb2YgbGluZXMgbWlnaHQgYmUgbG9zdC4iCittc2dzdHIgIiIKKyLQmtGA0YrQv9C60LDRgtCwINC1INC/0YDQsNGC0LXQvdCwINGBINGE0L7RgNC80LDRgtC40YDQsNC90LUg4oCeZm9ybWF0PWZsb3dlZOKAnC4gINCf0YDQsNC30L3QuNGC0LUg0LfQvdCw0YbQuCDQsiDQutGA0LDRjyDQvdCwICIKKyLRgNC10LTQvtCy0LXRgtC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0LPRg9Cx0Y/Rgi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjAyCittc2dpZCAiUGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICLQmtGA0YrQv9C60LDRgtCwINC1INC/0YDQsNC30L3QsC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYXV0aG9yIGxpbmUgaW4gY29tbWl0ICVzIgorbXNnc3RyICLQu9C40L/RgdCy0LAg0YDQtdC0INC30LAg0LDQstGC0L7RgNGB0YLQstC+INCyINC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcIgorCisjOiBidWlsdGluL2FtLmM6MTI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICUuKnMiCittc2dzdHIgItCz0YDQtdGI0LXQvSDRgNC10LQg0YEg0LjQtNC10L3RgtC40YfQvdC+0YHRgjogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE0ODkKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisi0JIg0YXRgNCw0L3QuNC70LjRidC10YLQviDQu9C40L/RgdCy0LDRgiDQvdC10L7QsdGF0L7QtNC40LzQuNGC0LUg0L7QsdC10LrRgtC4LUJMT0IsINC30LAg0LTQsCDRgdC1INC/0YDQtdC80LjQvdC1INC60YrQvCDRgtGA0L7QudC90L4gIgorItGB0LvQuNCy0LDQvdC1LiIKKworIzogYnVpbHRpbi9hbS5jOjE0OTEKK21zZ2lkICJVc2luZyBpbmRleCBpbmZvIHRvIHJlY29uc3RydWN0IGEgYmFzZSB0cmVlLi4uIgorbXNnc3RyICLQkdCw0LfQvtCy0L7RgtC+INC00YrRgNCy0L4g0YHQtSDRgNC10LrQvtC90YHRgtGA0YPQuNGA0LAg0L7RgiDQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0LIg0LjQvdC00LXQutGB0LDigKYiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTEwCittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorItCa0YDRitC/0LrQsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC40LvQvtC20Lgg0LrRitC8INC+0LHQtdC60YLQuNGC0LUtQkxPQiDQsiDQuNC90LTQtdC60YHQsC5cbiIKKyLQlNCwINC90LUg0LHQuCDQtNCwINGB0YLQtSDRjyDRgNC10LTQsNC60YLQuNGA0LDQu9C4INC90LAg0YDRitC60LA/IgorCisjOiBidWlsdGluL2FtLmM6MTUxNgorbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAi0J/RgNC10LzQuNC90LDQstCw0L3QtSDQutGK0Lwg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LrRgNGK0L/QutCwINC60YrQvCDQsdCw0LfQsNGC0LAg0Lgg0YLRgNC+0LnQvdC+INGB0LvQuNCy0LDQvdC14oCmIgorCisjOiBidWlsdGluL2FtLmM6MTU0MgorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgdC70LjQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTc0Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAi0L/RgNC40LvQsNCz0LDQvdC1INCy0YrRgNGF0YMg0L/RgNCw0LfQvdCwINC40YHRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL2FtLmM6MTYyMSBidWlsdGluL2FtLmM6MTYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtC00YrQu9C20Lgg4oCUIOKAniVz4oCcINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAuIgorCisjOiBidWlsdGluL2FtLmM6MTY0MworbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAi0KLRj9C70L7RgtC+INC90LAg0LrRgNGK0L/QutCw0YLQsCDQt9CwINC/0YDQuNC70LDQs9Cw0L3QtSDQtToiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgIiIKKyLQn9GA0LjQu9Cw0LPQsNC90LU/IOKAnnnigJwg4oCUINC00LAv4oCebuKAnCDigJQg0L3QtS/igJ5l4oCcIOKAlCDRgNC10LTQsNC60YLQuNGA0LDQvdC1L+KAnnbigJwg4oCUINC/0YDQtdCz0LvQtdC0L+KAnmHigJwg4oCUINC/0YDQuNC10LzQsNC90LUgIgorItC90LAg0LLRgdC40YfQutC+OiIKKworIzogYnVpbHRpbi9hbS5jOjE3MDAgYnVpbHRpbi9jb21taXQuYzozOTgKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAi0LjQvdC00LXQutGB0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAiIgorItCY0L3QtNC10LrRgdGK0YIg0L3QtSDQtSDRh9C40YHRgjog0LrRgNGK0L/QutC40YLQtSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC/0YDQuNC70L7QttC10L3QuCAo0LfQsNC80YrRgNGB0LXQvdC4INGB0LA6ICVzKSIKKworIzogYnVpbHRpbi9hbS5jOjE3NDQgYnVpbHRpbi9hbS5jOjE4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICUuKnMiCittc2dzdHIgItCf0YDQuNC70LDQs9Cw0L3QtTogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE3NjEKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgItCR0LXQtyDQv9GA0L7QvNC10L3QuCDigJQg0LrRgNGK0L/QutCw0YLQsCDQstC10YfQtSDQtSDQv9GA0LjQu9C+0LbQtdC90LAuIgorCisjOiBidWlsdGluL2FtLmM6MTc2NworIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsCDQv9GA0LggJXMgJS4qc+KAnCIKKworIzogYnVpbHRpbi9hbS5jOjE3NzEKK21zZ2lkICJVc2UgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaD1kaWZmJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAiIgorItCX0LAg0LTQsCDQstC40LTQuNGC0LUg0L3QtdGD0YHQv9C10YjQvdC+INC/0YDQuNC70L7QttC10L3QuCDQutGA0YrQv9C60LgsINC40LfQv9C+0LvQt9Cy0LDQudGC0LU6XG4iCisiXG4iCisiICAgIGdpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaD1kaWZmIgorCisjOiBidWlsdGluL2FtLmM6MTgxNQorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKK21zZ3N0ciAiIgorItCR0LXQtyDQv9GA0L7QvNC10L3QuCDigJQg0LLRitC30LzQvtC20L3QviDQtSDQtNCwINC90LUg0YHRgtC1INC40LfQv9GK0LvQvdC40LvQuCDigJ5naXQgYWRk4oCcLlxuIgorItCQ0LrQviDQvdGP0LzQsCDQtNGA0YPQs9CwINC/0YDQvtC80Y/QvdCwINC30LAg0LLQutC70Y7Rh9Cy0LDQvdC1INCyINC40L3QtNC10LrRgdCwLCDQvdCw0Lkt0LLQtdGA0L7Rj9GC0L3QviDQvdGP0LrQvtGPINC00YDRg9Cz0LBcbiIKKyLQutGA0YrQv9C60LAg0LUg0LTQvtCy0LXQu9CwINC00L4g0YHRitGJ0LjRgtC1INC/0YDQvtC80LXQvdC4INC4INCyINGC0LDQutGK0LIg0YHQu9GD0YfQsNC5INC/0YDQvtGB0YLQviDQv9GA0L7Qv9GD0YHQvdC10YLQtSDRgtCw0LfQuC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODIyCittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisiWW91IHNob3VsZCAnZ2l0IGFkZCcgZWFjaCBmaWxlIHdpdGggcmVzb2x2ZWQgY29uZmxpY3RzIHRvIG1hcmsgdGhlbSBhcyAiCisic3VjaC5cbiIKKyJZb3UgbWlnaHQgcnVuIGBnaXQgcm1gIG9uIGEgZmlsZSB0byBhY2NlcHQgXCJkZWxldGVkIGJ5IHRoZW1cIiBmb3IgaXQuIgorbXNnc3RyICIiCisi0JjQvdC00LXQutGB0YrRgiDQstGB0LUg0L7RidC1INGB0YrQtNGK0YDQttCwINC90LXRgdC70LXRgtC4INC/0YDQvtC80LXQvdC4LlxuIgorItCh0LvQtdC0INC60L7RgNC10LrRhtC40Y8g0L3QsCDQutC+0L3RhNC70LjQutGC0LjRgtC1INC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgYWRk4oCcINCy0YrRgNGF0YMg0L/QvtC/0YDQsNCy0LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtS5cbiIKKyLQl9CwINC00LAg0L/RgNC40LXQvNC10YLQtSDigJ7QuNC30YLRgNC40YLQuCDQvtGCINGC0Y/RheKAnCwg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCBybeKAnCDQstGK0YDRhdGDINC40LfRgtGA0LjRgtC40YLQtSDRhNCw0LnQu9C+0LLQtS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTI5IGJ1aWx0aW4vYW0uYzoxOTMzIGJ1aWx0aW4vYW0uYzoxOTQ1IGJ1aWx0aW4vcmVzZXQuYzozNDYKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQtSDRgNCw0LfQv9C+0LfQvdCw0YIg0LrQsNGC0L4g0L7QsdC10LrRgi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTgxCittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICLQuNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YfQuNGB0YLQtdC9IgorCisjOiBidWlsdGluL2FtLmM6MjAyNQorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICIiCisi0JjQt9Cz0LvQtdC20LTQsCDRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcINC1INC/0YDQvtC80LXQvdC10L0g0Lgg0L3QtSDRgdC+0YfQuCDQutGK0Lwg0YHRitGJ0LjRjyDQvtCx0LXQutGCINC60LDQutGC0L4g0L/QviAiCisi0LLRgNC10LzQtdGC0L5cbiIKKyLQvdCwINC/0L7RgdC70LXQtNC90L7RgtC+INC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAnmdpdCBhbeKAnC4gINCj0LrQsNC30LDRgtC10LvRj9GCINGB0LUg0LfQsNC00LDQstCwINC00LAgIgorItGB0L7Rh9C4INC60YrQvFxuIgorIuKAnk9SSUdfSEVBROKAnCIKKworIzogYnVpbHRpbi9hbS5jOjIxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCeLS1wYXRjaC1mb3JtYXTigJw6IOKAniVz4oCcIgorCisjOiBidWlsdGluL2FtLmM6MjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXNob3ctY3VycmVudC1wYXRjaDogJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDigJ4tLXNob3ctY3VycmVudC1wYXRjaOKAnDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2hvdy1jdXJyZW50LXBhdGNoPSVzIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tc2hvdy1jdXJyZW50LXBhdGNoPSVzIgorbXNnc3RyICIiCisi0L7Qv9GG0LjQuNGC0LUg4oCeLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXPigJwg0Lgg4oCeLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXPigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA3Cittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCittc2dzdHIgImdpdCBhbSBb0J7Qn9Cm0JjQr+KApl0gWyjQpNCQ0JnQm1/QoV/Qn9Ce0KnQkHzQlNCY0KDQldCa0KLQntCg0JjQr1/QoV/Qn9Ce0KnQkCnigKZdIgorCisjOiBidWlsdGluL2FtLmM6MjIwOAorbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorbXNnc3RyICJnaXQgYW0gW9Ce0J/QptCY0K/igKZdICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE0Cittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QsCDRgNCw0LHQvtGC0LAiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE2Cittc2dpZCAiaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3AiCittc2dzdHIgItC40LfQvtGB0YLQsNCy0LXQvdCwINC+0L/RhtC40Y8sINGB0YrRidC10YHRgtCy0YPQstCwINC/0L4g0LjRgdGC0L7RgNC40YfQtdGB0LrQuCDQv9GA0LjRh9C40L3QuCwg0L3QuNGJ0L4g0L3QtSDQv9GA0LDQstC4IgorCisjOiBidWlsdGluL2FtLmM6MjIxOAorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICLQtNCwINGB0LUg0L/RgNC10LzQuNC90LDQstCwINC60YrQvCDRgtGA0L7QudC90L4g0YHQu9C40LLQsNC90LUg0L/RgNC4INC90YPQttC00LAuIgorCisjOiBidWlsdGluL2FtLmM6MjIxOSBidWlsdGluL2luaXQtZGIuYzo0OTQgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1OAorIzogYnVpbHRpbi9yZXBhY2suYzozMDQgYnVpbHRpbi9zdGFzaC5jOjgxMgorbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIxCittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGA0LXQtCDQt9CwINC/0L7QtNC/0LjRgSDigJ5TaWduZWQtb2ZmLWJ54oCcINCyINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2FtLmM6MjIyNAorbXNnaWQgInJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpIgorbXNnc3RyICLQv9GA0LXQutC+0LTQuNGA0LDQvdC1INCyIFVURi04ICjRgdGC0LDQvdC00LDRgNGC0L3QvikiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI2Cittc2dpZCAicGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtSDQvdCwINC+0L/RhtC40Y/RgtCwIOKAni1r4oCcINC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC1tYWlsaW5mb+KAnCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjgKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC1INC90LAg0L7Qv9GG0LjRj9GC0LAg4oCeLWLigJwg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LW1haWxpbmZv4oCcIgorCisjOiBidWlsdGluL2FtLmM6MjIzMAorbXNnaWQgInBhc3MgLW0gZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LUg0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tbeKAnCDQvdCwINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQtbWFpbGluZm/igJwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMyCittc2dpZCAicGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGZvciBtYm94IGZvcm1hdCIKK21zZ3N0ciAiIgorItC/0L7QtNCw0LLQsNC90LUg0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tLWtlZXAtY3LigJwg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LW1haWxzcGxpdOKAnCDQt9CwINGE0L7RgNC80LDRgiDigJ5tYm944oCcIgorCisjOiBidWlsdGluL2FtLmM6MjIzNQorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICIiCisi0LHQtdC3INC/0L7QtNCw0LLQsNC90LUg0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tLWtlZXAtY3LigJwg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LW1haWxzcGxpdOKAnCDQvdC10LfQsNCy0LjRgdC40LzQviAiCisi0L7RgiDigJ5hbS5rZWVwY3LigJwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM4Cittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICLQv9GA0L7Qv9GD0YHQutCw0L3QtSDQvdCwINCy0YHQuNGH0LrQviDQv9GA0LXQtNC4INGA0LXQtNCwINC30LAg0L7RgtGA0Y/Qt9Cy0LDQvdC1IgorCisjOiBidWlsdGluL2FtLmM6MjI0MCBidWlsdGluL2FtLmM6MjI0MyBidWlsdGluL2FtLmM6MjI0NiBidWlsdGluL2FtLmM6MjI0OQorIzogYnVpbHRpbi9hbS5jOjIyNTIgYnVpbHRpbi9hbS5jOjIyNTUgYnVpbHRpbi9hbS5jOjIyNTggYnVpbHRpbi9hbS5jOjIyNjEKKyM6IGJ1aWx0aW4vYW0uYzoyMjY3Cittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAi0L/RgNC10LrQsNGA0LLQsNC90LUg0L/RgNC10Lcg4oCeZ2l0LWFwcGx54oCcIgorCisjOiBidWlsdGluL2FtLmM6MjI1NyBidWlsdGluL2NvbW1pdC5jOjEzOTEgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcwCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzMgYnVpbHRpbi9ncmVwLmM6ODcxIGJ1aWx0aW4vbWVyZ2UuYzoyNTAKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0MCBidWlsdGluL3B1bGwuYzoxOTkgYnVpbHRpbi9yZWJhc2UuYzoxNTA1CisjOiBidWlsdGluL3JlcGFjay5jOjMxNSBidWlsdGluL3JlcGFjay5jOjMxOSBidWlsdGluL3JlcGFjay5jOjMyMQorIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MCBidWlsdGluL3Nob3ctcmVmLmM6MTcyIGJ1aWx0aW4vdGFnLmM6NDAzCisjOiBwYXJzZS1vcHRpb25zLmg6MTU0IHBhcnNlLW9wdGlvbnMuaDoxNzUgcGFyc2Utb3B0aW9ucy5oOjMxNgorbXNnaWQgIm4iCittc2dzdHIgItCR0KDQntCZIgorCisjOiBidWlsdGluL2FtLmM6MjI2MyBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTYgYnVpbHRpbi90YWcuYzo0MzcgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgItCk0J7QoNCc0JDQoiIKKworIzogYnVpbHRpbi9hbS5jOjIyNjQKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgItGE0L7RgNC80LDRgiDQvdCwINC60YDRitC/0LrQuNGC0LUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjcwCittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICLQuNC30LHRgNCw0L3QviDQvtGCINCy0LDRgSDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQs9GA0LXRiNC60LAg0L/RgNC4INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQuCIKKworIzogYnVpbHRpbi9hbS5jOjIyNzIKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICLQv9GA0L7QtNGK0LvQttCw0LLQsNC90LUg0L3QsCDQv9GA0LjQu9Cw0LPQsNC90LXRgtC+INC90LAg0LrRgNGK0L/QutC4INGB0LvQtdC0INC60L7RgNC40LPQuNGA0LDQvdC10YLQviDQvdCwINC60L7QvdGE0LvQuNC60YIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc1Cittc2dpZCAic3lub255bXMgZm9yIC0tY29udGludWUiCittc2dzdHIgItC/0YHQtdCy0LTQvtC90LjQvNC4INC90LAg4oCeLS1jb250aW51ZeKAnCIKKworIzogYnVpbHRpbi9hbS5jOjIyNzgKK21zZ2lkICJza2lwIHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICLQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINGC0LXQutGD0YnQsNGC0LAg0LrRgNGK0L/QutCwIgorCisjOiBidWlsdGluL2FtLmM6MjI4MQorbXNnaWQgInJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbi4iCittc2dzdHIgIiIKKyLQstGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+0YLQviDRgdGK0YHRgtC+0Y/QvdC40LUg0L3QsCDQutC70L7QvdCwINC4INC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwICIKKyLQv9GA0LjQu9Cw0LPQsNC90LXRgtC+INC90LAg0LrRgNGK0L/QutCw0YLQsC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg0Cittc2dpZCAiYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbiBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzLiIKK21zZ3N0ciAiIgorItC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC/0YDQuNC70LDQs9Cw0L3QtdGC0L4g0L3QsCDQutGA0YrQv9C60LDRgtCwINCx0LXQtyDQv9GA0L7QvNGP0L3QsCDQutGK0Lwg0LrQvtC1INGB0L7Rh9C4IOKAnkhFQUTigJwuIgorCisjOiBidWlsdGluL2FtLmM6MjI4OAorbXNnaWQgInNob3cgdGhlIHBhdGNoIGJlaW5nIGFwcGxpZWQiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC/0YDQuNC70LDQs9Cw0L3QsNGC0LAg0LrRgNGK0L/QutCwIgorCisjOiBidWlsdGluL2FtLmM6MjI5MworbXNnaWQgImxpZSBhYm91dCBjb21taXR0ZXIgZGF0ZSIKK21zZ3N0ciAi0LTQsNGC0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1INGA0LDQt9C70LjRh9C90LAg0L7RgiDQv9GK0YDQstC+0L3QsNGH0LDQu9C90LDRgtCwIgorCisjOiBidWlsdGluL2FtLmM6MjI5NQorbXNnaWQgInVzZSBjdXJyZW50IHRpbWVzdGFtcCBmb3IgYXV0aG9yIGRhdGUiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YLQtdC60YPRidC+0YLQviDQstGA0LXQvNC1INC60LDRgtC+INGC0L7QstCwINC30LAg0LDQstGC0L7RgCIKKworIzogYnVpbHRpbi9hbS5jOjIyOTcgYnVpbHRpbi9jb21taXQtdHJlZS5jOjEyMCBidWlsdGluL2NvbW1pdC5jOjE1MTIKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODcgYnVpbHRpbi9wdWxsLmM6MTc0IGJ1aWx0aW4vcmViYXNlLmM6NTE3CisjOiBidWlsdGluL3JlYmFzZS5jOjE1NTYgYnVpbHRpbi9yZXZlcnQuYzoxMTcgYnVpbHRpbi90YWcuYzo0MTgKK21zZ2lkICJrZXktaWQiCittc2dzdHIgItCY0JTQldCd0KLQmNCk0JjQmtCQ0KLQntCgX9Cd0JBf0JrQm9Cu0KciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk4IGJ1aWx0aW4vcmViYXNlLmM6NTE4IGJ1aWx0aW4vcmViYXNlLmM6MTU1NworbXNnaWQgIkdQRy1zaWduIGNvbW1pdHMiCittc2dzdHIgItC/0L7QtNC/0LjRgdCy0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDRgSBHUEciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzAxCittc2dpZCAiKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCittc2dzdHIgIijQv9C+0LvQt9Cy0LAg0YHQtSDQstGK0YLRgNC10YjQvdC+INC30LAg4oCeZ2l0LXJlYmFzZeKAnCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzE5Cittc2dpZCAiIgorIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmRcbiIKKyJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIgorbXNnc3RyICIiCisi0J7Qv9GG0LjQuNGC0LUg4oCeLWLigJwv4oCeLS1iaW5hcnnigJwg0L7RgtC00LDQstC90LAg0L3QtSDQv9GA0LDQstGP0YIg0L3QuNGJ0L4g0LhcbiIKKyLRidC1INCx0YrQtNCw0YIg0L/RgNC10LzQsNGF0L3QsNGC0Lgg0LIg0LHRitC00LXRidC1LiAg0J3QtSDQs9C4INC/0L7Qu9C30LLQsNC50YLQtS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzI2Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9GH0LjRgtCw0L3QtSDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2FtLmM6MjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICVzIHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgIiIKKyLQv9GA0LXQtNC40YjQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQt9CwINC/0YDQtdCx0LDQt9C40YDQsNC90LUg4oCeJXPigJwg0LLRgdC1INC+0YnQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCwg0LAg0LUg0LfQsNC00LDQtNC10L0gIgorItGE0LDQudC7IOKAnm1ib3jigJwuIgorCisjOiBidWlsdGluL2FtLmM6MjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3RyYXkgJXMgZGlyZWN0b3J5IGZvdW5kLlxuIgorIlVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIKK21zZ3N0ciAiIgorItCe0YLQutGA0LjRgtCwINC1INC40LfQu9C40YjQvdCwINC00LjRgNC10LrRgtC+0YDQuNGPIOKAniVz4oCcLlxuIgorItCc0L7QttC10YLQtSDQtNCwINGPINC40LfRgtGA0LjQtdGC0LUg0YEg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBhbSAtLWFib3J04oCcLiIKKworIzogYnVpbHRpbi9hbS5jOjIzNzEKK21zZ2lkICJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDQvdC1INGC0LXRh9C1INC+0L/QtdGA0LDRhtC40Y8g0L/QviDQutC+0YDQuNCz0LjRgNCw0L3QtSDQuCDQvdGP0LzQsCDQutCw0Log0LTQsCDRgdC1INC/0YDQvtC00YrQu9C20LguIgorCisjOiBidWlsdGluL2FtLmM6MjM4MQorbXNnaWQgImludGVyYWN0aXZlIG1vZGUgcmVxdWlyZXMgcGF0Y2hlcyBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICLQuNC90YLQtdGA0LDQutGC0LjQstC90LjRj9GCINGA0LXQttC40Lwg0LjQt9C40YHQutCy0LAg0LrRgNGK0L/QutC4INC90LAg0LrQvtC80LDQvdC00L3QuNGPINGA0LXQtCIKKworIzogYnVpbHRpbi9hcHBseS5jOjgKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgW9Ce0J/QptCY0K/igKZdIFvQmtCg0KrQn9Ca0JDigKZdIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICLQsNGA0YXQuNCy0L3QuNGP0YIg0YTQsNC50Lsg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAi0LjQt9GF0L7QtNGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQtdC90LDRgdC+0YfQtdC9IgorCisjOiBidWlsdGluL2FyY2hpdmUuYzozNworbXNnaWQgImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgImdpdCBhcmNoaXZlOiDQm9C40L/RgdCy0LAg0LDQtNGA0LXRgSDQt9CwINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiIgorImdpdCBhcmNoaXZlOiDQvtGH0LDQutCy0LDRiNC1INGB0LUg4oCeQUNL4oCcL+KAnk5BS+KAnCwg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvSDQuNC30YfQuNGB0YLQstCw0Ykg0L/QsNC60LXRgiDigJ5mbHVzaOKAnCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZlOiDQv9C+0LvRg9GH0LXQvSDQtSDigJ5OQUNL4oCcIOKAlCAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjUKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlOiDQv9GA0L7RgtC+0LrQvtC70L3QsCDQs9GA0LXRiNC60LAiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY5Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlOiDQvtGH0LDQutCy0LDRiNC1INGB0LUg0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDQsdGD0YTQtdGA0LjRgtC1INGH0YDQtdC3IOKAnmZsdXNo4oCcIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPGJhZF90ZXJtPiA8Z29vZF90ZXJtPiIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMg0JvQntCo0J4g0JTQntCR0KDQniIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI0Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNQorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgW9Cf0J7QlNCQ0JLQkNCd0JVdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjYKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPHN0YXRlPiA8cmV2aXNpb24+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10g0KHQqtCh0KLQntCv0J3QmNCVINCS0JXQoNCh0JjQryDQlNCe0JHQoNCeINCb0J7QqNCeIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjcKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPGNvbW1hbmQ+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2hlY2stYW5kLXNldC10ZXJtcyDQmtCe0JzQkNCd0JTQkCDQlNCe0JHQoNCeIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjgKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA8Z29vZF90ZXJtPiA8YmFkX3Rlcm0+IFs8dGVybT5dIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayDQm9Ce0KjQniDQlNCe0JHQoNCeINCj0J/QoNCQ0JLQm9Cv0JLQkNCp0JBf0JTQo9Cc0JAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOQorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMAorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtPiAtLXRlcm0te25ldyxiYWR9IgorIj08dGVybT5dWy0tbm8tY2hlY2tvdXRdIFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtPiAtLXRlcm0te25ldyxiYWR9IgorIj08dGVybT5dWy0tbm8tY2hlY2tvdXRdIFvQm9Ce0KjQniBb0JTQntCR0KDQnuKApl1dIFstLV0gW9Cf0KrQouKApl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRlcm0iCittc2dzdHIgIuKAniVz4oCcINC1INC90LXQv9GA0LDQstC40LvQvdCwINGD0L/RgNCw0LLQu9GP0LLQsNGJ0LAg0LTRg9C80LAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnJXMnIGFzIGEgdGVybSIKK21zZ3N0ciAi4oCeJXPigJwg0LUg0LLQs9GA0LDQtNC10L3QsCDQutC+0LzQsNC90LTQsCDQuCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/QvtC70LfQstCwINC60LDRgtC+INGD0L/RgNCw0LLQu9GP0LLQsNGJ0LAg0LTRg9C80LAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSB0ZXJtICclcyciCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC80LXQvdC40YLQtSDQt9C90LDRh9C10L3QuNC10YLQviDQvdCwINGD0L/RgNCw0LLQu9GP0LLQsNGJ0LDRgtCwINC00YPQvNCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTExCittc2dpZCAicGxlYXNlIHVzZSB0d28gZGlmZmVyZW50IHRlcm1zIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0LnRgtC1INC00LLQtSDRgNCw0LfQu9C40YfQvdC4INGD0L/RgNCw0LLQu9GP0LLQsNGJ0Lgg0LTRg9C80LgiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTgKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0aGUgZmlsZSBCSVNFQ1RfVEVSTVMiCittc2dzdHIgItGE0LDQudC70YrRgiDigJ5CSVNFQ1RfVEVSTVPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCy0L7RgNC4IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLlxuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDQvdC1INGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQtNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtS5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQtSDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyVzJy4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIiIKKyLQv9GK0YDQstC+0L3QsNGH0LDQu9C90L4g0YPQutCw0LfQsNC90L7RgtC+IOKAniVz4oCcINCyINGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtVxuIgorItC40LfRgtC10LPQu9C10L3Qvi4gINCf0YDQvtCx0LLQsNC50YLQtSDQtNCwINC40LfQv9GK0LvQvdC40YLQtSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGJpc2VjdCByZXNldCDQn9Ce0JTQkNCS0JDQndCV4oCcLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0LDRgNCz0YPQvNC10L3RgiDQvdCwINGE0YPQvdC60YbQuNGP0YLQsCDigJ5iaXNlY3Rfd3JpdGXigJw6IOKAniVz4oCcIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGdldCB0aGUgb2lkIG9mIHRoZSByZXYgJyVzJyIKK21zZ3N0ciAi0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRitGCINC90LAg0L7QsdC10LrRgiDQvdCwINCy0LXRgNGB0LjRjyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/QvtC70YPRh9C10L0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3Qgb3BlbiB0aGUgZmlsZSAnJXMnIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWFuZDogeW91J3JlIGN1cnJlbnRseSBpbiBhICVzLyVzIGJpc2VjdCIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90LAg0LrQvtC80LDQvdC00LA6INCyINC80L7QvNC10L3RgtCwINGB0LUg0LjQt9C/0YrQu9C90Y/QstCwINC00LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1INC/0L4gJXMvJXMuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorItCi0YDRj9Cx0LLQsCDQtNCwINC30LDQtNCw0LTQtdGC0LUg0L/QvtC90LUg0LXQtNC90LAg4oCeJXPigJwg0Lgg0LXQtNC90LAg4oCeJXPigJwg0LLQtdGA0YHQuNGPLiAgKNCi0L7QstCwINC80L7QttC1INC00LAg0YHQtVxuIgorItC90LDQv9GA0LDQstC4INGB0YrQvtGC0LLQtdGC0L3QviDQuCDRh9GA0LXQtyDQutC+0LzQsNC90LTQuNGC0LUg4oCeZ2l0IGJpc2VjdCAlc+KAnCDQuCDigJ5naXQgYmlzZWN0ICVz4oCcLikiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyLQotGA0Y/QsdCy0LAg0LTQsCDQt9Cw0L/QvtGH0L3QtdGC0LUg0LTQstC+0LjRh9C90L7RgtC+INGC0YrRgNGB0LXQvdC1INGH0YDQtdC3INC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgYmlzZWN0IHN0YXJ04oCcLlxuIgorItCi0YDRj9Cx0LLQsCDQtNCwINC30LDQtNCw0LTQtdGC0LUg0L/QvtC90LUg0LXQtNC90LAg4oCeJXPigJwg0Lgg0LXQtNC90LAg4oCeJXPigJwg0LLQtdGA0YHQuNGPLiAgKNCi0L7QstCwINC80L7QttC1INC00LAg0YHQtVxuIgorItC90LDQv9GA0LDQstC4INGB0YrQvtGC0LLQtdGC0L3QviDQuCDRh9GA0LXQtyDQutC+0LzQsNC90LTQuNGC0LUg4oCeZ2l0IGJpc2VjdCAlc+KAnCDQuCDigJ5naXQgYmlzZWN0ICVz4oCcLikiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzZWN0aW5nIG9ubHkgd2l0aCBhICVzIGNvbW1pdCIKK21zZ3N0ciAi0LTQstC+0LjRh9C90L4g0YLRitGA0YHQtdC90LUg0YHQsNC80L4g0L/QviDigJ4lc+KAnCDQv9C+0LTQsNCy0LDQvdC1LiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMxOAorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICLQlNCwINGB0LUg0L/RgNC+0LTRitC70LbQuCDQu9C4PyDigJ5Z4oCcIOKAlCAg0JTQkCwg4oCebuKAnCDigJQg0L3QtSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM3OQorbXNnaWQgIm5vIHRlcm1zIGRlZmluZWQiCittc2dzdHIgItC90LUg0YHQsCDRg9C60LDQt9Cw0L3QuCDRg9C/0YDQsNCy0LvRj9Cy0LDRidC4INC00YPQvNC4IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGN1cnJlbnQgdGVybXMgYXJlICVzIGZvciB0aGUgb2xkIHN0YXRlXG4iCisiYW5kICVzIGZvciB0aGUgbmV3IHN0YXRlLlxuIgorbXNnc3RyICIiCisi0KLQtdC60YPRidC40YLQtSDRg9C/0YDQsNCy0LvRj9Cy0LDRidC4INC00YPQvNC4INGB0LA6ICVzINC30LAg0YHRgtCw0YDQvtGC0L4g0YHRitGB0YLQvtGP0L3QuNC1XG4iCisi0LggJXMg0LfQsCDQvdC+0LLQvtGC0L4g0YHRitGB0YLQvtGP0L3QuNC1LlxuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAnZ2l0IGJpc2VjdCB0ZXJtcycuXG4iCisiU3VwcG9ydGVkIG9wdGlvbnMgYXJlOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIGFuZCAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIgorbXNnc3RyICIiCisi0L3QsCDigJ5naXQgYmlzZWN0IHRlcm1z4oCcINC1INC/0L7QtNCw0LTQtdC9INC90LXQv9GA0LDQstC40LvQtdC9INCw0YDQs9GD0LzQtdC90YIg4oCeJXPigJxcbiIKKyLQn9C+0LTQtNGK0YDQttCw0YIg0YHQtSDQvtC/0YbQuNC40YLQtSDigJ4tLXRlcm0tZ29vZOKAnC/igJ4tLXRlcm0tb2xk4oCcINC4IOKAni0tdGVybS1iYWTigJ4v4oCeLS10ZXJtLW5ld+KAnC4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIG9wdGlvbjogJyVzJyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINC+0L/RhtC40Y86ICVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgcmV2aXNpb24iCittc2dzdHIgIuKAniVz4oCcINC90LUg0LjQt9Cz0LvQtdC20LTQsCDQutCw0YLQviDRg9C60LDQt9Cw0YLQtdC7INC60YrQvCDQstC10YDRgdC40Y8iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MTQKK21zZ2lkICJiYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9INGD0LrQsNC30LDRgtC10Lsg4oCeSEVBROKAnCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjaGVja2luZyBvdXQgJyVzJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCBzdGFydCA8dmFsaWQtYnJhbmNoPicuIgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdC+INC/0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8IOKAniVz4oCcLiAg0JjQt9C/0YrQu9C90LXRgtC1INC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgYmlzZWN0IHN0YXJ0ICIKKyLQodCq0KnQldCh0KLQktCj0JLQkNCpX9Ca0JvQntCd4oCcLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MAorbXNnaWQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiCittc2dzdHIgIiIKKyLQvdC1INC80L7QttC1INC00LAg0YHQtSDRgtGK0YDRgdC4INC00LLQvtC40YfQvdC+LCDQutC+0LPQsNGC0L4g0LUg0LjQt9C/0YrQu9C90LXQvdCwINC60L7QvNCw0L3QtNCw0YLQsCDigJ5jZy1zZWVr4oCcINC+0YIgIgorIuKAnmNvZ2l0b+KAnCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MworbXNnaWQgImJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9INGD0LrQsNC30LDRgtC10Lsg4oCeSEVBROKAnCDigJQg0L3QtdC+0LHQuNGH0LDQtdC9INGB0LjQvNCy0L7Qu9C10L0g0YPQutCw0LfQsNGC0LXQuyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU3NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZjogJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YPQutCw0LfQsNGC0LXQuzog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzMKK21zZ2lkICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIgorbXNnc3RyICLQuNC30LLRitGA0YjQstCw0L3QtSDQvdCwIOKAnmdpdCBiaXNlY3QgbmV4dOKAnCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNQorbXNnaWQgIndyaXRlIHRoZSB0ZXJtcyB0byAuZ2l0L0JJU0VDVF9URVJNUyIKK21zZ3N0ciAi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0YPQv9GA0LDQstC70Y/QstCw0YnQuNGC0LUg0LTRg9C80Lgg0LIg4oCe4oCcLmdpdC9CSVNFQ1RfVEVSTVPigJ7igJwiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzcKK21zZ2lkICJjbGVhbnVwIHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgItC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINC00LLQvtC40YfQvdC+0YLQviDRgtGK0YDRgdC10L3QtSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzOQorbXNnaWQgImNoZWNrIGZvciBleHBlY3RlZCByZXZzIgorbXNnc3RyICLQv9GA0L7QstC10YDQutCwINC30LAg0L7Rh9Cw0LrQstCw0L3QuNGC0LUg0LLQtdGA0YHQuNC4IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQxCittc2dpZCAicmVzZXQgdGhlIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAi0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0LTQstC+0LjRh9C90L7RgtC+INGC0YrRgNGB0LXQvdC1IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQzCittc2dpZCAid3JpdGUgb3V0IHRoZSBiaXNlY3Rpb24gc3RhdGUgaW4gQklTRUNUX0xPRyIKK21zZ3N0ciAi0LfQsNC/0LjRgSDQvdCwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDQtNCy0L7QuNGH0L3QvtGC0L4g0YLRitGA0YHQtdC90LUg0LIg4oCeQklTRUNUX0xPR+KAnCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NQorbXNnaWQgImNoZWNrIGFuZCBzZXQgdGVybXMgaW4gYSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIiIKKyLQv9GA0L7QstC10YDQutCwINC4INC30LDQtNCw0LLQsNC90LUg0L3QsCDRg9C/0YDQsNCy0LvRj9Cy0LDRidC4INC00YPQvNC4INC60YrQvCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0LTQstC+0LjRh9C90L7RgtC+INGC0YrRgNGB0LXQvdC1IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ3Cittc2dpZCAiY2hlY2sgd2hldGhlciBiYWQgb3IgZ29vZCB0ZXJtcyBleGlzdCIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LrQsCDQtNCw0LvQuCDRgdGK0YnQtdGB0YLQstGD0LLQsNGCINC+0LTQvtCx0YDRj9Cy0LDRidC4L9C+0YLRhdCy0YrRgNC70Y/RidC4INGD0L/RgNCw0LLQu9GP0LLQsNGJ0Lgg0LTRg9C80LgiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDkKK21zZ2lkICJwcmludCBvdXQgdGhlIGJpc2VjdCB0ZXJtcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YPQv9GA0LDQstC70Y/QstCw0YnQuNGC0LUg0LTRg9C80LgiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTEKK21zZ2lkICJzdGFydCB0aGUgYmlzZWN0IHNlc3Npb24iCittc2dzdHIgItC90LDRh9Cw0LvQviDQvdCwINC00LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjUzCittc2dpZCAidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIKK21zZ3N0ciAiIgorItC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkJJU0VDVF9IRUFE4oCcINCy0LzQtdGB0YLQviDQtNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTUKK21zZ2lkICJubyBsb2cgZm9yIEJJU0VDVF9XUklURSIKK21zZ3N0ciAi0LvQuNC/0YHQstCwINC30LDQv9C40YEg0LfQsCDigJ5CSVNFQ1RfV1JJVEXigJwiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzMKK21zZ2lkICItLXdyaXRlLXRlcm1zIHJlcXVpcmVzIHR3byBhcmd1bWVudHMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0td3JpdGUtdGVybXPigJwg0LjQt9C40YHQutCy0LAg0YLQvtGH0L3QviAyINCw0YDQs9GD0LzQtdC90YLQsCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3NworbXNnaWQgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIHJlcXVpcmVzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1iaXNlY3QtY2xlYW4tc3RhdGXigJwg0L3QtSDQv9GA0LjQtdC80LAg0LDRgNCz0YPQvNC10L3RgtC4IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg0Cittc2dpZCAiLS1iaXNlY3QtcmVzZXQgcmVxdWlyZXMgZWl0aGVyIG5vIGFyZ3VtZW50IG9yIGEgY29tbWl0IgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWJpc2VjdC1yZXNldOKAnCDQuNC30LjRgdC60LLQsCDQuNC70LggMCDQsNGA0LPRg9C80LXQvdGC0LgsINC40LvQuCAxIOKAlCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg4Cittc2dpZCAiLS1iaXNlY3Qtd3JpdGUgcmVxdWlyZXMgZWl0aGVyIDQgb3IgNSBhcmd1bWVudHMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tYmlzZWN0LXdyaXRl4oCcINC40LfQuNGB0LrQstCwIDQg0LjQu9C4IDUg0LDRgNCz0YPQvNC10L3RgtCwIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njk0Cittc2dpZCAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIHJlcXVpcmVzIDMgYXJndW1lbnRzIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWNoZWNrLWFuZC1zZXQtdGVybXPigJwg0LjQt9C40YHQutCy0LAgMyDQsNGA0LPRg9C80LXQvdGC0LAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3MDAKK21zZ2lkICItLWJpc2VjdC1uZXh0LWNoZWNrIHJlcXVpcmVzIDIgb3IgMyBhcmd1bWVudHMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tYmlzZWN0LW5leHQtY2hlY2vigJwg0LjQt9C40YHQutCy0LAgMiDQuNC70LggMyDQsNGA0LPRg9C80LXQvdGC0LAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3MDYKK21zZ2lkICItLWJpc2VjdC10ZXJtcyByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnQiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tYmlzZWN0LXRlcm1z4oCcINC40LfQuNGB0LrQstCwIDAg0LjQu9C4IDEg0LDRgNCz0YPQvNC10L3RgtCwIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzEKK21zZ2lkICJnaXQgYmxhbWUgWzxvcHRpb25zPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8ZmlsZT4iCittc2dzdHIgImdpdCBibGFtZSBb0J7Qn9Cm0JjQr+KApl0gW9Ce0J/QptCY0K9f0JfQkF/QktCV0KDQodCY0K/QotCQ4oCmXSBb0JLQldCg0KHQmNCvXSBbLS1dINCk0JDQmdCbIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzYKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAi0J7Qn9Cm0JjQmNGC0LVf0JfQkF/QktCV0KDQodCY0K/QotCQINGB0LAg0LTQvtC60YPQvNC10L3RgtC40YDQsNC90Lgg0LIg0YDRitC60L7QstC+0LTRgdGC0LLQvtGC0L4gZ2l0LXJldi1saXN0KDEpIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGluZyBhIGNvbG9yOiAlcyIKK21zZ3N0ciAi0YLRgNGP0LHQstCwINC00LAg0LUg0YbQstGP0YI6ICVzIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDE2Cittc2dpZCAibXVzdCBlbmQgd2l0aCBhIGNvbG9yIgorbXNnc3RyICLRgtGA0Y/QsdCy0LAg0LTQsCDQt9Cw0LLRitGA0YjQstCwINGBINGG0LLRj9GCIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgJyVzJyBpbiBjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRhtCy0Y/RgiDigJ4lc+KAnCDQsiDigJ5jb2xvci5ibGFtZS5yZXBlYXRlZExpbmVz4oCcIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzQ3Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgYmxhbWUuY29sb3JpbmciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDigJ5ibGFtZS5jb2xvcmluZ+KAnCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmluZCByZXZpc2lvbiAlcyB0byBpZ25vcmUiCittc2dzdHIgItCy0LXRgNGB0LjRj9GC0LAg0LfQsCDQv9GA0LXRgdC60LDRh9Cw0L3QtSDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGC0LAiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDQKK21zZ2lkICJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQsNCy0YLQvtGA0YHRgtCy0L7RgtC+INGBINC90LDQvNC40YDQsNC90LXRgtC+INC80YMsINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9C90L4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDUKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/RgNCw0LfQvdC4INGB0YPQvNC4INC/0L4gU0hBMSDQt9CwINCz0YDQsNC90LjRh9C90LjRgtC1INC/0L7QtNCw0LLQsNC90LjRjyAo0YHRgtCw0L3QtNCw0YDRgtC90L4g0L7Qv9GG0LjRj9GC0LAgIgorItC1INC40LfQutC70Y7Rh9C10L3QsCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDYKK21zZ2lkICJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyLQndCw0YfQsNC70L3QuNGC0LUg0L/QvtC00LDQstCw0L3QuNGPINC00LAg0L3QtSDRgdC1INGB0YfQuNGC0LDRgiDQt9CwINCz0YDQsNC90LjRh9C90LggKNGB0YLQsNC90LTQsNGA0YLQvdC+INC+0L/RhtC40Y/RgtCwINC1ICIKKyLQuNC30LrQu9GO0YfQtdC90LApIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ3Cittc2dpZCAiU2hvdyB3b3JrIGNvc3Qgc3RhdGlzdGljcyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRgtCw0YLQuNGB0YLQuNC60LAg0LfQsCDQuNC30LLRitGA0YjQtdC90LjRgtC1INC00LXQudGB0YLQstC40Y8iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDgKK21zZ2lkICJGb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgItCf0YDQuNC90YPQtNC40YLQtdC70L3QviDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdCw0L/RgNC10LTRitC60LAiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDkKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0LTQvtC/0YrQu9C90LjRgtC10LvQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L7Qv9GA0LXQtNC10LvRj9C90LXRgtC+INC90LAg0LDQstGC0L7RgNGB0YLQstC+0YLQviIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MAorbXNnaWQgIlNob3cgb3JpZ2luYWwgZmlsZW5hbWUgKERlZmF1bHQ6IGF1dG8pIgorbXNnc3RyICIiCisi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+0YLQviDQuNC80LUg0L3QsCDRhNCw0LnQuyAo0YHRgtCw0L3QtNCw0YDRgtC90L4g0YLQvtCy0LAg0LUg0LDQstGC0L7QvNCw0YLQuNGH0L3QvikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTEKK21zZ2lkICJTaG93IG9yaWdpbmFsIGxpbmVudW1iZXIgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9GK0YDQstC+0L3QsNGH0LDQu9C90LjRj9GCINC90L7QvNC10YAg0L3QsCDRgNC10LQgKNGB0YLQsNC90LTQsNGA0YLQvdC+INC+0L/RhtC40Y/RgtCwINC1INC40LfQutC70Y7Rh9C10L3QsCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTIKK21zZ2lkICJTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0LLRitCyINGE0L7RgNC80LDRgiDQt9CwINC/0L4t0L3QsNGC0LDRgtGK0YjQvdCwINC+0LHRgNCw0LHQvtGC0LrQsCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MworbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorItCY0LfQstC10LbQtNCw0L3QtSDQstGK0LIg0YTQvtGA0LzQsNGCINC30LAg0LrQvtC80LDQvdC00Lgg0L7RgiDQv9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQviDQvdC40LLQviDRgSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQvdCwINCy0YHQtdC60LggIgorItGA0LXQtCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NAorbXNnaWQgIlVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBnaXQtYW5ub3RhdGUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyLQmNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGB0YrRidC40Y8g0YTQvtGA0LzQsNGCINC60LDRgtC+IOKAnmdpdC1hbm5vdGF0ZeKAnCAo0YHRgtCw0L3QtNCw0YDRgtC90L4g0L7Qv9GG0LjRj9GC0LAg0LUgIgorItC40LfQutC70Y7Rh9C10L3QsCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTUKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC90LXRhNC+0YDQvNCw0YLQuNGA0LDQvdC4INCy0YDQtdC80LXQvdCwICjRgdGC0LDQvdC00LDRgNGC0L3QviDQvtC/0YbQuNGP0YLQsCDQtSDQuNC30LrQu9GO0YfQtdC90LApIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU2Cittc2dpZCAiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9GK0LvQvdC40YLQtSDRgdGD0LzQuCDQv9C+IFNIQTEgKNGB0YLQsNC90LTQsNGA0YLQvdC+INC+0L/RhtC40Y/RgtCwINC1INC40LfQutC70Y7Rh9C10L3QsCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTcKK21zZ2lkICJTdXBwcmVzcyBhdXRob3IgbmFtZSBhbmQgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLQkdC10Lcg0LjQvNC1INC90LAg0LDQstGC0L7RgCDQuCDQstGA0LXQvNC1INC90LAg0L/RgNC+0LzRj9C90LAgKNGB0YLQsNC90LTQsNGA0YLQvdC+INC+0L/RhtC40Y/RgtCwINC1INC40LfQutC70Y7Rh9C10L3QsCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTgKK21zZ2lkICJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQtS3Qv9C+0YnQsNGC0LAg0L3QsCDQsNCy0YLQvtGA0LAsINCwINC90LUg0LjQvNC10YLQviDQvNGDICjRgdGC0LDQvdC00LDRgNGC0L3QviDQvtC/0YbQuNGP0YLQsCDQtSAiCisi0LjQt9C60LvRjtGH0LXQvdCwKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1OQorbXNnaWQgIklnbm9yZSB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIgorbXNnc3RyICLQkdC10Lcg0YDQsNC30LvQuNC60Lgg0LIg0LfQvdCw0YbQuNGC0LUg0LfQsCDQuNC90YLQtdGA0LLQsNC70LgiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjAgYnVpbHRpbi9sb2cuYzoxNzAyCittc2dpZCAicmV2IgorbXNnc3RyICLQktCV0KDQoSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MAorbXNnaWQgIklnbm9yZSA8cmV2PiB3aGVuIGJsYW1pbmciCittc2dzdHIgItCf0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0JLQldCg0KHQuNGP0YLQsCDQv9GA0Lgg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LDQstGC0L7RgNGB0YLQstC+0YLQviIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MQorbXNnaWQgIklnbm9yZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4iCittc2dzdHIgItCf0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0LLQtdGA0YHQuNC40YLQtSDRg9C60LDQt9Cw0L3QuCDQstGK0LIg0KTQkNCZ0JvQsCDQv9GA0Lgg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LDQstGC0L7RgNGB0YLQstC+0YLQviIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MgorbXNnaWQgImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiCittc2dzdHIgIiIKKyLQvtGG0LLQtdGC0Y/QstCw0L3QtSDQvdCwINC/0L7QstGC0LDRgNGP0YnQuNGC0LUg0YHQtSDQvNC10YLQsNC00LDQvdC90Lgg0L7RgiDQv9GA0LXQtNC40YjQvdC40Y8g0YDQtdC0INCyINGA0LDQt9C70LjRh9C10L0g0YbQstGP0YIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjMKK21zZ2lkICJjb2xvciBsaW5lcyBieSBhZ2UiCittc2dzdHIgItC+0YbQstC10YLRj9Cy0LDQvdC1INC90LAg0YDQtdC00L7QstC10YLQtSDQv9C+INCy0YrQt9GA0LDRgdGCIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY0Cittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICLQlNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0LjQt9GH0LjRgdC70LXQvdC40Y8g0LfQsCDQv9C+LdC00L7QsdGA0Lgg0YDQtdC30YPQu9GC0LDRgtC4IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY1Cittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICLQmNC30YfQuNGC0LDQvdC1INC90LAg0LLQtdGA0YHQuNC40YLQtSDQvtGCINCk0JDQmdCbLCDQsCDQvdC1INGH0YDQtdC3INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeZ2l0LXJldi1saXN04oCcIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY2Cittc2dpZCAiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIKK21zZ3N0ciAi0JjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQpNCQ0JnQm9CwINC60LDRgtC+INC60YDQsNC50L3QviDQv9C+0LvQvtC20LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjcgYnVpbHRpbi9ibGFtZS5jOjg2OAorbXNnaWQgInNjb3JlIgorbXNnc3RyICLQvdCw0L/QsNGB0LLQsNC90LUg0L3QsCDRgNC10LTQvtCy0LXRgtC1IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY3Cittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiIgorItCi0YrRgNGB0LXQvdC1INC90LAg0LrQvtC/0LjRgNCw0L3QuCDRgNC10LTQvtCy0LUg0LrQsNC60YLQviDQsiDRgNCw0LzQutC40YLQtSDQvdCwINC10LTQuNC9INGE0LDQudC7LCDRgtCw0LrQsCDQuCDQvtGCINC10LTQuNC9INGE0LDQudC7ICIKKyLQutGK0Lwg0LTRgNGD0LMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjgKK21zZ2lkICJGaW5kIGxpbmUgbW92ZW1lbnRzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICIiCisi0KLRitGA0YHQtdC90LUg0L3QsCDQv9GA0LXQvNC10YHRgtC10L3QuCDRgNC10LTQvtCy0LUg0LrQsNC60YLQviDQsiDRgNCw0LzQutC40YLQtSDQvdCwINC10LTQuNC9INGE0LDQudC7LCDRgtCw0LrQsCDQuCDQvtGCINC10LTQuNC9ICIKKyLRhNCw0LnQuyDQutGK0Lwg0LTRgNGD0LMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjkKK21zZ2lkICJuLG0iCittc2dzdHIgIm4sbSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICIiCisi0JjQvdGE0L7RgNC80LDRhtC40Y8g0YHQsNC80L4g0LfQsCDRgNC10LTQvtCy0LXRgtC1INCyINC00LjQsNC/0LDQt9C+0L3QsCDQvtGCIG4g0LTQviBtINCy0LrQu9GO0YfQuNGC0LXQu9C90L4uICDQkdGA0L7QtdC90LXRgtC+ICIKKyLQt9Cw0L/QvtGH0LLQsCDQvtGCIDEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo5MjEKK21zZ2lkICItLXByb2dyZXNzIGNhbid0IGJlIHVzZWQgd2l0aCAtLWluY3JlbWVudGFsIG9yIHBvcmNlbGFpbiBmb3JtYXRzIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1wcm9ncmVzc+KAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg4oCeLS1pbmNyZW1lbnRhbOKAnCDQuCDRhNC+0YDQvNCwzIDRgtCwINC90LAg0LrQvtC80LDQvdC00LjRgtC1ICIKKyLQvtGCINC/0L7RgtGA0LXQsdC40YLQtdC70YHQutC+INC90LjQstC+IgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBzdHJpbmcgaXMgdXNlZCB0byB0ZWxsIHVzIHRoZQorIy4gbWF4aW11bSBkaXNwbGF5IHdpZHRoIGZvciBhIHJlbGF0aXZlIHRpbWVzdGFtcCBpbgorIy4gImdpdCBibGFtZSIgb3V0cHV0LiAgRm9yIEMgbG9jYWxlLCAiNCB5ZWFycywgMTEKKyMuIG1vbnRocyBhZ28iLCB3aGljaCB0YWtlcyAyMiBwbGFjZXMsIGlzIHRoZSBsb25nZXN0CisjLiBhbW9uZyB2YXJpb3VzIGZvcm1zIG9mIHJlbGF0aXZlIHRpbWVzdGFtcHMsIGJ1dAorIy4geW91ciBsYW5ndWFnZSBtYXkgbmVlZCBtb3JlIG9yIGZld2VyIGRpc3BsYXkKKyMuIGNvbHVtbnMuCisjLgorIzogYnVpbHRpbi9ibGFtZS5jOjk3MgorbXNnaWQgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iCittc2dzdHIgItC/0YDQtdC00LggNCDQs9C+0LTQuNC90Lgg0LggMTEg0LzQtdGB0LXRhtCwIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lIgorbXNnaWRfcGx1cmFsICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIKK21zZ3N0clswXSAi0LjQvNCwINGB0LDQvNC+ICUyJGx1INGA0LXQtCDQstGK0LIg0YTQsNC50LvQsCDigJ4lMSRz4oCcIgorbXNnc3RyWzFdICLQuNC80LAg0YHQsNC80L4gJTIkbHUg0YDQtdC00LAg0LLRitCyINGE0LDQudC70LAg4oCeJTEkc+KAnCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjExMjUKK21zZ2lkICJCbGFtaW5nIGxpbmVzIgorbXNnc3RyICLQoNC10LTQvtCy0LUg0YEg0LDQstGC0L7RgNGB0YLQstC+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI5Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFvQntCf0KbQmNCv4oCmXSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMwCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLWxdIFstZl0gPGJyYW5jaC1uYW1lPiBbPHN0YXJ0LXBvaW50Pl0iCittc2dzdHIgImdpdCBicmFuY2ggW9Ce0J/QptCY0K/igKZdIFstbF0gWy1mXSDQmNCc0JVf0J3QkF/QmtCb0J7QnSBb0J3QkNCn0JDQm9CeXSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaC1uYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBb0J7Qn9Cm0JjQr+KApl0gWy1yXSAoLWQgfCAtRCkg0JjQnNCVX9Cd0JBf0JrQm9Ce0J3igKYiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzIKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggW9Ce0J/QptCY0K/igKZdICgtbSB8IC1NKSBb0KHQotCQ0KBf0JrQm9Ce0J1dINCd0J7Qkl/QmtCb0J7QnSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMworbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1jIHwgLUMpIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBb0J7Qn9Cm0JjQr+KApl0gKC1jIHwgLUMpIFvQodCi0JDQoF/QmtCb0J7QnV0g0J3QntCSX9Ca0JvQntCdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM0Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBb0J7Qn9Cm0JjQr+KApl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzUKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1mb3JtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFvQntCf0KbQmNCv4oCmXSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LrQu9C+0L3QsCDigJ4lc+KAnCwg0LrQvtC50YLQviDQtSDRgdC70Y/RgiDQutGK0Lwg4oCeJXPigJwsXG4iCisiICAgINC90L4g0L7RidC1INC90LUg0LUg0YHQu9GP0YIg0LrRitC8INCy0YrRgNGF0LAg4oCeSEVBROKAnC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorItC+0YLQutCw0LfQstCw0L3QtSDQvdCwINC40LfRgtGA0LjQstCw0L3QtSDQvdCwINC60LvQvtC90LAg4oCeJXPigJwsINC60L7QudGC0L4g0L3QtSDQtSDRgdC70Y/RgiDQutGK0LxcbiIKKyIgICAg4oCeJXPigJwsINC90L4g0LUg0YHQu9GP0YIg0LrRitC8INCy0YrRgNGF0LAg4oCeSEVBROKAnC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIKK21zZ3N0ciAi0J7QsdC10LrRgtGK0YIt0L/QvtC00LDQstCw0L3QtSDQt9CwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorItCa0LvQvtC90YrRgiDigJ4lc+KAnCDQvdC1INC1INGB0LvRj9GCINC90LDQv9GK0LvQvdC+LiAg0JDQutC+INGB0YLQtSDRgdC40LPRg9GA0L3QuCwg0YfQtSDQuNGB0LrQsNGC0LVcbiIKKyLQtNCwINCz0L4g0LjQt9GC0YDQuNC10YLQtSwg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCBicmFuY2ggLUQgJXPigJwuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4OQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QuNGPINGE0LDQudC7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyMAorbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLWHigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINC+0L/RhtC40Y/RgtCwIOKAni1k4oCcIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNgorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAi0J7QsdC10LrRgtGK0YIt0L/QvtC00LDQstCw0L3QtSwg0YHQvtGH0LXQvSDQvtGCINGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcLCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnIGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgItCd0LUg0LzQvtC20LXRgtC1INC00LAg0LjQt9GC0YDQuNC10YLQtSDQutC70L7QvdCwIOKAniVz4oCcLCDQutC+0LnRgtC+INC1INC40LfRgtC10LPQu9C10L0g0LIg0L/RitGC0Y8g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICLRgdC70LXQtNGP0YnQuNGP0YIg0LrQu9C+0L0g4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgItC60LvQvtC90YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGCLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC40LfRgtGA0LjQstCw0L3QtdGC0L4g0L3QsCDRgdC70LXQtNGP0YnQuNGPINC60LvQvtC9IOKAniVz4oCcIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQuNC30YLRgNC40LLQsNC90LXRgtC+INC90LAg0LrQu9C+0L3QsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICLQmNC30YLRgNC40YIg0YHQu9C10LTRj9GJINC60LvQvtC9IOKAniVz4oCcICjRgtC+0Lkg0YHQvtGH0LXRiNC1INC60YrQvCDigJ4lc+KAnCkuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICLQmNC30YLRgNC40YIg0LrQu9C+0L0g4oCeJXPigJwgKNGC0L7QuSDRgdC+0YfQtdGI0LUg0LrRitC8IOKAniVz4oCcKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjkgYnVpbHRpbi90YWcuYzo2MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICLRhNC+0YDQvNCw0YLQuNGA0LDRidC40Y/RgiDQvdC40Lcg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INCw0L3QsNC70LjQt9C40YDQsNC9OiAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjAKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC10YLQviwg0YHQvtGH0LXQvdC+INC+0YIg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGD0YHRgtCw0L3QvtCy0LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgKCVzKSBwb2ludHMgb3V0c2lkZSBvZiByZWZzL2hlYWRzLyIKK21zZ3N0ciAi4oCeSEVBROKAnCAoJXMpINGB0L7Rh9C4INC40LfQstGK0L0g0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAnnJlZnMvaGVhZHPigJwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyByZWJhc2VkIGF0ICVzIgorbXNnc3RyICLQmtC70L7QvdGK0YIg4oCeJXPigJwg0YHQtSDQv9GA0LXQsdCw0LfQuNGA0LAg0LLRitGA0YXRgyDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIGJpc2VjdGVkIGF0ICVzIgorbXNnc3RyICLQotGK0YDRgdC4INGB0LUg0LTQstC+0LjRh9C90L4g0LIg0LrQu9C+0L3QsCDigJ4lc+KAnCDQv9GA0Lgg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTAyCittc2dpZCAiY2Fubm90IGNvcHkgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICLQvdC1INC80L7QttC10YLQtSDQtNCwINC60L7Qv9C40YDQsNGC0LUg0YLQtdC60YPRidC40Y8g0LrQu9C+0L0sINC30LDRidC+0YLQviDRgdGC0LUg0LjQt9Cy0YrQvSDQutC+0LnRgtC+INC4INC00LAg0LUg0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTA0Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIiIKKyLQvdC1INC80L7QttC10YLQtSDQtNCwINC/0YDQtdC40LzQtdC90YPQstCw0YLQtSDRgtC10LrRg9GJ0LjRjyDQutC70L7QvSwg0LfQsNGJ0L7RgtC+INGB0YLQtSDQuNC30LLRitC9INC60L7QudGC0L4g0Lgg0LTQsCDQtSDQutC70L7QvSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90L4g0LjQvNC1INC90LAg0LrQu9C+0L06IOKAniVz4oCcIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0MgorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ0Cittc2dpZCAiQnJhbmNoIGNvcHkgZmFpbGVkIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LrQvtC/0LjRgNCw0L3QtSDQvdCwINC60LvQvtC9IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGEgY29weSBvZiBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIgorbXNnc3RyICLQmtC70L7QvdGK0YIg0YEg0L3QtdC/0YDQsNCy0LjQu9C90L4g0LjQvNC1IOKAniVz4oCcINC1INC60L7Qv9C40YDQsNC9IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAi0JrQu9C+0L3RitGCINGBINC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDigJ4lc+KAnCDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICLQmtC70L7QvdGK0YIg0LUg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvSDQvdCwIOKAniVz4oCcLCDQvdC+INGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDQtSDQvtCx0L3QvtCy0LXQvSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjYKK21zZ2lkICJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgItCa0LvQvtC90YrRgiDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9LCDQvdC+INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QuNGP0YIg0YTQsNC50Lsg0L3QtSDQtSDQvtCx0L3QvtCy0LXQvSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjgKK21zZ2lkICJCcmFuY2ggaXMgY29waWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAi0JrQu9C+0L3RitGCINC1INC60L7Qv9C40YDQsNC9LCDQvdC+INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QuNGP0YIg0YTQsNC50Lsg0L3QtSDQtSDQvtCx0L3QvtCy0LXQvSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaFxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBzdHJpcHBlZC5cbiIKK21zZ3N0ciAiIgorItCS0YrQstC10LTQtdGC0LUg0L7Qv9C40YHQsNC90LjQtSDQvdCwINC60LvQvtC90LAuXG4iCisiICAgICVzXG4iCisi0KDQtdC00L7QstC10YLQtSwg0LrQvtC40YLQviDQt9Cw0L/QvtGH0LLQsNGCINGBIOKAniVj4oCcLCDRidC1INCx0YrQtNCw0YIg0L/RgNC+0L/Rg9GB0L3QsNGC0LguXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjE4Cittc2dpZCAiR2VuZXJpYyBvcHRpb25zIgorbXNnc3RyICLQntCx0YnQuCDQvdCw0YHRgtGA0L7QudC60LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIwCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQutC+0L3RgtGA0L7Qu9C90LDRgtCwINGB0YPQvNCwINC4INGC0LXQvNCw0YLQsC4gINCf0L7QstGC0LDRgNGP0L3QtdGC0L4g0L3QsCDQvtC/0YbQuNGP0YLQsCDQv9GA0LjQsdCw0LLRjyAiCisi0L7RgtC00LDQu9C10YfQtdC90LjRgtC1INC60LvQvtC90LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIxCittc2dpZCAic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIKK21zZ3N0ciAi0LHQtdC3INC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC4INGB0YrQvtCx0YnQtdC90LjRjyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjIKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIKK21zZ3N0ciAi0LfQsNC00LDQstCw0L3QtSDQvdCwINGA0LXQttC40LzQsCDQvdCwINGB0LvQtdC00LXQvdC1ICjQstC40LYgZ2l0LXB1bGwoMSkpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNAorbXNnaWQgImRvIG5vdCB1c2UiCittc2dzdHIgItC00LAg0L3QtSDRgdC1INC/0L7Qu9C30LLQsCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYgYnVpbHRpbi9yZWJhc2UuYzo1MTMKK21zZ2lkICJ1cHN0cmVhbSIKK21zZ3N0ciAi0LrQu9C+0L0t0LjQt9GC0L7Rh9C90LjQuiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYKK21zZ2lkICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgItGB0LzRj9C90LAg0L3QsCDQutC70L7QvdCwLdC40LfRgtC+0YfQvdC40LoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI3Cittc2dpZCAidW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgItC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC30LAg0LrQu9C+0L0t0LjQt9GC0L7Rh9C90LjQuiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjgKK21zZ2lkICJ1c2UgY29sb3JlZCBvdXRwdXQiCittc2dzdHIgItGG0LLQtdGC0LXQvSDQuNC30YXQvtC0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOQorbXNnaWQgImFjdCBvbiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgItC00LXQudGB0YLQstC40LUg0LLRitGA0YXRgyDRgdC70LXQtNGP0YnQuNGC0LUg0LrQu9C+0L3QuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzEgYnVpbHRpbi9icmFuY2guYzo2MzMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDQutC70L7QvdC40YLQtSwg0LrQvtC40YLQviDRgdGK0LTRitGA0LbQsNGCINGC0L7QstCwINCf0J7QlNCQ0JLQkNCd0JUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMyIGJ1aWx0aW4vYnJhbmNoLmM6NjM0Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0LrQu9C+0L3QuNGC0LUsINC60L7QuNGC0L4g0L3QtSDRgdGK0LTRitGA0LbQsNGCINGC0L7QstCwINCf0J7QlNCQ0JLQkNCd0JUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM3Cittc2dpZCAiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIKK21zZ3N0ciAi0KHQv9C10YbQuNCw0LvQvdC4INC00LXQudGB0YLQstC40Y8g0L3QsCDigJ5naXQtYnJhbmNo4oCcOiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzgKK21zZ2lkICJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC60LDQutGC0L4g0L3QsCDRgdC70LXQtNGP0YnQuNGC0LUsINGC0LDQutCwINC4INC90LAg0LvQvtC60LDQu9C90LjRgtC1INC60LvQvtC90LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQwCittc2dpZCAiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQvdCwINC60LvQvtC90LgsINC60L7QuNGC0L4g0YHQsCDQvdCw0L/RitC70L3QviDRgdC70LXRgtC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MQorbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQuCDQvdCwINC60LvQvtC90LgsINC60L7QuNGC0L4g0L3QtSDRgdCwINC90LDQv9GK0LvQvdC+INGB0LvQtdGC0LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQyCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgIiIKKyLQv9GA0LXQvNC10YHRgtCy0LDQvdC1L9C/0YDQtdC40LzQtdC90YPQstCw0L3QtSDQvdCwINC60LvQvtC9INC4INC/0YDQuNC90LDQtNC70LXQttCw0YnQuNGP0YIg0LzRgyDQttGD0YDQvdCw0Lsg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MworbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgItC/0YDQtdC80LXRgdGC0LLQsNC90LUv0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0LrQu9C+0L0sINC00L7RgNC4INCw0LrQviDQuNC80LAg0LLQtdGH0LUg0LrQu9C+0L0g0YEg0YLQsNC60L7QstCwINC40LzQtSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDQKK21zZ2lkICJjb3B5IGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICLQutC+0L/QuNGA0LDQvdC1INC90LAg0LrQu9C+0L0g0Lgg0L/RgNC40L3QsNC00LvQtdC20LDRidC40Y8g0LzRgyDQttGD0YDQvdCw0Lsg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NQorbXNnaWQgImNvcHkgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi0LrQvtC/0LjRgNCw0L3QtSDQvdCwINC60LvQvtC9LCDQtNC+0YDQuCDQsNC60L4g0LjQvNCwINCy0LXRh9C1INC60LvQvtC9INGBINGC0LDQutC+0LLQsCDQuNC80LUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ2Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40LzQtdC90LDRgtCwINC90LAg0LrQu9C+0L3QuNGC0LUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ3Cittc2dpZCAic2hvdyBjdXJyZW50IGJyYW5jaCBuYW1lIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC80LXRgtC+INC90LAg0YLQtdC60YPRidC40Y8g0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ4Cittc2dpZCAiY3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2ciCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC20YPRgNC90LDQu9CwINC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSDQvdCwINC60LvQvtC90LAiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUwCittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgItGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDQvtC/0LjRgdCw0L3QuNC10YLQviDQvdCwINC60LvQvtC90LAiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUxCittc2dpZCAiZm9yY2UgY3JlYXRpb24sIG1vdmUvcmVuYW1lLCBkZWxldGlvbiIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INGB0YrQt9C00LDQstCw0L3QtSwg0L/RgNC10LzQtdGB0YLQstCw0L3QtSwg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1LCDQuNC30YLRgNC40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUyCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINGB0LvQtdGC0LjRgtC1INC60LvQvtC90LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDQvdC10YHQu9C10YLQuNGC0LUg0LrQu9C+0L3QuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTQKK21zZ2lkICJsaXN0IGJyYW5jaGVzIGluIGNvbHVtbnMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQv9C+INC60L7Qu9C+0L3QuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTcgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MiBidWlsdGluL25vdGVzLmM6NDE1CisjOiBidWlsdGluL25vdGVzLmM6NDE4IGJ1aWx0aW4vbm90ZXMuYzo1ODEgYnVpbHRpbi9ub3Rlcy5jOjU4NAorIzogYnVpbHRpbi90YWcuYzo0MzMKK21zZ2lkICJvYmplY3QiCittc2dzdHIgItCe0JHQldCa0KIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU4Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDQutC70L7QvdC40YLQtSDQvdCwINCe0JHQldCa0KLQkCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NjAgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0OCBidWlsdGluL3RhZy5jOjQ0MAorbXNnaWQgInNvcnRpbmcgYW5kIGZpbHRlcmluZyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSIKK21zZ3N0ciAi0L/QvtC00YDQtdC00LHQsNGC0LAg0Lgg0YTQuNC70YLRgNC40YDQsNC90LXRgtC+INGC0YDQtdGC0LjRgNCw0YIg0LXQtNC90LDQutCy0L4g0LzQsNC70LrQuNGC0LUg0Lgg0LPQu9Cw0LLQvdC40YLQtSDQsdGD0LrQstC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4IGJ1aWx0aW4vdGFnLmM6NDM4CisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozOAorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgItCk0J7QoNCc0JDQoiDQt9CwINC40LfRhdC+0LTQsCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2ODQgYnVpbHRpbi9jbG9uZS5jOjc4NQorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICLQkiDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCecmVmcy9oZWFkc+KAnCDQu9C40L/RgdCy0LAg0YTQsNC50Lsg4oCeSEVBROKAnCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MDgKK21zZ2lkICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni0tY29sdW1u4oCcINC4IOKAni0tdmVyYm9zZeKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MjMgYnVpbHRpbi9icmFuY2guYzo3NzcgYnVpbHRpbi9icmFuY2guYzo3ODYKK21zZ2lkICJicmFuY2ggbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAi0J3QtdC+0LHRhdC+0LTQuNC80L4g0LUg0LjQvNC1INC90LAg0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzUzCittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINC30LDQtNCw0LTQtdGC0LUg0L7Qv9C40YHQsNC90LjQtSDQvdCwINC90LXRgdCy0YrRgNC30LDQvSDigJ5IRUFE4oCcIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OAorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YDQtdC00LDQutGC0LjRgNCw0YLQtSDQvtC/0LjRgdCw0L3QuNC10YLQviDQvdCwINC/0L7QstC10YfQtSDQvtGCINC10LTQuNC9INC60LvQvtC9INC10LTQvdC+0LLRgNC10LzQtdC90L3QviIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWl0IG9uIGJyYW5jaCAnJXMnIHlldC4iCittc2dzdHIgItCSINC60LvQvtC90LAg4oCeJXPigJwg0LLRgdC1INC+0YnQtSDQvdGP0LzQsCDQv9C+0LTQsNCy0LDQvdC40Y8uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBicmFuY2ggbmFtZWQgJyVzJy4iCittc2dzdHIgItCb0LjQv9GB0LLQsCDQutC70L7QvSDQvdCwINC40LzQtSDigJ4lc+KAnC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzgzCittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgZm9yIGEgY29weSBvcGVyYXRpb24iCittc2dzdHIgItC/0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INC60LvQvtC90Lgg0LfQsCDQutC+0L/QuNGA0LDQvdC1IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5MgorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgYSByZW5hbWUgb3BlcmF0aW9uIgorbXNnc3RyICLQv9GA0LXQutCw0LvQtdC90L4g0LzQvdC+0LPQviDQsNGA0LPRg9C80LXQvdGC0Lgg0LrRitC8INC60L7QvNCw0L3QtNCw0YLQsCDQt9CwINC/0YDQtdC40LzQtdC90YPQstCw0L3QtSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAi0L/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0LDRgNCz0YPQvNC10L3RgtC4INC60YrQvCDQutC+0LzQsNC90LTQsNGC0LAg0LfQsCDRgdC70LXQtNC10L3QtSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisi0KHQu9C10LTQtdC90L7RgtC+INC+0YIg4oCeSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0LTQsNC00LUg0LTQsCDQtSDigJ4lc+KAnCwg0LfQsNGJ0L7RgtC+INGC0L4g0L3QtSDRgdC+0YfQuCDQutGK0LwgIgorItC90LjQutC+0Lkg0LrQu9C+0L0uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwNCBidWlsdGluL2JyYW5jaC5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaCAnJXMnIgorbXNnc3RyICLQndGP0LzQsCDQutC70L7QvSDQvdCwINC40LzQtSDigJ4lc+KAnC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODA4CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQndC1INGB0YrRidC10YHRgtCy0YPQstCwINC60LvQvtC9INC90LAg0LjQvNC1IOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjEKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gdW5zZXQgdXBzdHJlYW0iCittc2dzdHIgItC/0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INCw0YDQs9GD0LzQtdC90YLQuCDQutGK0Lwg0LrQvtC80LDQvdC00LDRgtCwINC30LAg0YHQv9C40YDQsNC90LUg0L3QsCDRgdC70LXQtNC10L3QtSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjUKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisi0KHQu9C10LTQtdC90L7RgtC+INC+0YIg4oCeSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0LzQsNGF0L3QtSwg0LfQsNGJ0L7RgtC+INGC0L4g0L3QtSDRgdC+0YfQuCDQutGK0Lwg0L3QuNC60L7QuSDQutC70L7QvS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0J3Rj9C80LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LrQu9C+0L3RitGCIOKAniVz4oCcINC00LAg0YHQu9C10LTQuCDQvdGP0LrQvtC5INC00YDRg9CzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MQorbXNnaWQgIiIKKyJUaGUgLWEsIGFuZCAtciwgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IHRha2UgYSBicmFuY2ggbmFtZS5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdXNlOiAtYXwtciAtLWxpc3QgPHBhdHRlcm4+PyIKK21zZ3N0ciAiIgorItCe0L/RhtC40LjRgtC1IOKAni1h4oCcINC4IOKAni1y4oCcINC90LAg4oCeZ2l0IGJyYW5jaOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCDRgSDQuNC80LUg0L3QsCDQutC70L7QvS5cbiIKKyLQn9GA0L7QsdCy0LDQudGC0LUg0YE6IOKAni1hfC1yIC0tbGlzdCDQqNCQ0JHQm9Ce0J3igJwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ1Cittc2dpZCAiIgorInRoZSAnLS1zZXQtdXBzdHJlYW0nIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBQbGVhc2UgdXNlICctLXRyYWNrJyBvciAiCisiJy0tc2V0LXVwc3RyZWFtLXRvJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorItCe0L/RhtC40Y/RgtCwIOKAni0tc2V0LXVwc3RyZWFt4oCcINCy0LXRh9C1INC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwLiAg0JjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ4tLXRyYWNr4oCcINC40LvQuCDigJ4tLSIKKyJzZXQtdXBzdHJlYW0tdG/igJwiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTUgYnVpbHRpbi9idW5kbGUuYzoyMworbXNnaWQgImdpdCBidW5kbGUgY3JlYXRlIFs8b3B0aW9ucz5dIDxmaWxlPiA8Z2l0LXJldi1saXN0IGFyZ3M+IgorbXNnc3RyICJnaXQgYnVuZGxlIGNyZWF0ZSBb0J7Qn9Cm0JjQr+KApl0g0KTQkNCZ0Jsg0JDQoNCT0KPQnNCV0J3Qol/Ql9CQX2dpdF9yZXYtbGlzdOKApiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNiBidWlsdGluL2J1bmRsZS5jOjI4Cittc2dpZCAiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzxvcHRpb25zPl0gPGZpbGU+IgorbXNnc3RyICJnaXQgYnVuZGxlIHZlcmlmeSBb0J7Qn9Cm0JjQr+KApl0g0KTQkNCZ0JvigKYiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTcgYnVpbHRpbi9idW5kbGUuYzozMworbXNnaWQgImdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iCittc2dzdHIgImdpdCBidW5kbGUgbGlzdC1oZWFkcyDQpNCQ0JnQmyBb0JjQnNCVX9Cd0JBf0KPQmtCQ0JfQkNCi0JXQm+KApl0iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTggYnVpbHRpbi9idW5kbGUuYzozOAorbXNnaWQgImdpdCBidW5kbGUgdW5idW5kbGUgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICJnaXQgYnVuZGxlIHVuYnVuZGxlINCk0JDQmdCbIFvQmNCc0JVf0J3QkF/Qo9Ca0JDQl9CQ0KLQldCb4oCmXSIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2NiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNzUKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90LDQv9GA0LXQtNGK0LrQsCIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2OCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNzcKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdCw0L/RgNC10LTRitC60LAiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzc5Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb2JqZWN0IHdyaXRpbmcgcGhhc2UiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90LDQv9GA0LXQtNGK0LrQsCDQstGK0LIg0YTQsNC30LDRgtCwINC90LAg0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSIKKworIzogYnVpbHRpbi9idW5kbGUuYzo3MyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODIKK21zZ2lkICJzaW1pbGFyIHRvIC0tYWxsLXByb2dyZXNzIHdoZW4gcHJvZ3Jlc3MgbWV0ZXIgaXMgc2hvd24iCittc2dzdHIgIiIKKyLRgdGK0YnQvtGC0L4g0LTQtdC50YHRgtCy0LjQtSDQutCw0YLQviDQvtC/0YbQuNGP0YLQsCDigJ4tLWFsbC1wcm9ncmVzc+KAnCDQv9GA0Lgg0LjQt9Cy0LXQttC00LDQvdC10YLQviDQvdCwINC90LDQv9GA0LXQtNGK0LrQsCIKKworIzogYnVpbHRpbi9idW5kbGUuYzo5MworbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgItCX0LAg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC/0YDQsNGC0LrQsCDQtSDQvdC10L7QsdGF0L7QtNC40LzQviDRhdGA0LDQvdC40LvQuNGJ0LUuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjEwNAorbXNnaWQgImRvIG5vdCBzaG93IGJ1bmRsZSBkZXRhaWxzIgorbXNnc3RyICLQsdC10Lcg0L/QvtC00YDQvtCx0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC/0YDQsNGC0LrQuNGC0LUiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAi0J/RgNCw0YLQutCw0YLQsCDigJ4lc+KAnCDQtSDQvdCw0YDQtdC0XG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICLQl9CwINC/0YDQuNC10LzQsNC90LXRgtC+INC90LAg0L/RgNCw0YLQutCwINC1INC90LXQvtCx0YXQvtC00LjQvNC+INGF0YDQsNC90LjQu9C40YnQtS4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTY4NgorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgItC/0L7QstC10YfQtSDQv9C+0LTRgNC+0LHQvdC+0YHRgtC4LiAg0J/QvtGB0YLQsNCy0Y8g0YHQtSDQv9GA0LXQtCDQv9C+0LTQutC+0LzQsNC90LTQsCIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzoxNzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgItCd0LXQv9C+0LfQvdCw0YLQsCDQv9C+0LTQutC+0LzQsNC90LTQsDogJXMiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTUKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgLSIKKyJwIHwgPHR5cGU+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD08cGF0aD5dIDxvYmplY3Q+IgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgLSIKKyJwIHwg0JLQmNCUIHwgLS10ZXh0Y29udiAtLWZpbHRlcnMpIFstLXBhdGg90J/QqtCiXSDQntCR0JXQmtCiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTk2Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gWy0tdGV4dGNvbnYgfCAtLSIKKyJmaWx0ZXJzXSIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gWy0tdGV4dGNvbnYgfCAtLSIKKyJmaWx0ZXJzXSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYxNworbXNnaWQgIm9ubHkgb25lIGJhdGNoIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIgorbXNnc3RyICLQvNC+0LbQtSDQtNCwINGD0LrQsNC20LXRgtC1INGB0LDQvNC+INC10LTQvdCwINC/0LDQutC10YLQvdCwINC+0L/RhtC40Y8iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzUKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIiIKKyLQktCY0JTRitGCINC80L7QttC1INC00LAg0LU6IOKAnmJsb2LigJwgKEJMT0IpLCDigJ50cmVl4oCcICjQtNGK0YDQstC+KSwg4oCeY29tbWl04oCcICjQv9C+0LTQsNCy0LDQvdC1KSwgIgorIuKAnnRhZ+KAnCAo0LXRgtC40LrQtdGCKSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNgorbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINCy0LjQtNCwINC90LAg0L7QsdC10LrRgiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNworbXNnaWQgInNob3cgb2JqZWN0IHNpemUiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9C80LXRgNCwINC90LAg0L7QsdC10LrRgiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzOQorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAi0LjQt9GF0L7QtCDRgSAwLCDQutC+0LPQsNGC0L4g0L3Rj9C80LAg0LPRgNC10YjQutCwIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQwCittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgItGE0L7RgNC80LDRgtC40YDQsNC90L4g0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC90LAg0L7QsdC10LrRgtCwIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQyCittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgIiIKKyLQtNCwINGB0LUg0YHRgtCw0YDRgtC40YDQsCDQv9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9Cw0LTQsNC00LXQvdCwINCyINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCedGV4dGNvbnbigJwg0LfQsCDQv9GA0LXQvtCx0YDQsNC30YPQstCw0L3QtSAiCisi0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQvtCx0LXQutGC0LAtQkxPQiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NAorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biBmaWx0ZXJzIG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgIiIKKyLQtNCwINGB0LUg0YHRgtCw0YDRgtC40YDQsNGCINC/0YDQvtCz0YDQsNC80LjRgtC1INC30LAg0L/RgNC10L7QsdGA0LDQt9GD0LLQsNC90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQvtCx0LXQutGC0LjRgtC1LUJMT0IiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDUgZ2l0LXN1Ym1vZHVsZS5zaDoxMDAyCittc2dpZCAiYmxvYiIKK21zZ3N0ciAi0L7QsdC10LrRgi1CTE9CIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ2Cittc2dpZCAidXNlIGEgc3BlY2lmaWMgcGF0aCBmb3IgLS10ZXh0Y29udi8tLWZpbHRlcnMiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tdGV4dGNvbnbigJwv4oCeLS1maWx0ZXJz4oCcINC40LfQuNGB0LrQstCw0YIg0L/RitGCIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ4Cittc2dpZCAiYWxsb3cgLXMgYW5kIC10IHRvIHdvcmsgd2l0aCBicm9rZW4vY29ycnVwdCBvYmplY3RzIgorbXNnc3RyICLQv9C+0LfQstC+0LvRj9Cy0LDQvdC1INC90LAg0L7Qv9GG0LjQuNGC0LUg4oCeLXPigJwg0Lgg4oCeLXTigJwg0LTQsCDRgNCw0LHQvtGC0Y/RgiDRgSDQv9C+0LLRgNC10LTQtdC90Lgg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ5Cittc2dpZCAiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IgorbXNnc3RyICLQsdGD0YTQtdGA0LjRgNCw0L3QtSDQvdCwINC40LfRhdC+0LTQsCDQvtGCIOKAni0tYmF0Y2jigJwiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTEKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQuCDRgdGK0LTRitGA0LbQsNC90LjQtSDQvdCwINC+0LHQtdC60YLQuNGC0LUg0L/QvtC00LDQtNC10L3QuCDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTUKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L7QsdC10LrRgtC40YLQtSDQv9C+0LTQsNC00LXQvdC4INC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1OQorbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAiIgorItGB0LvQtdC00LLQsNC90LUg0L3QsCDRgdC40LzQstC+0LvQvdC40YLQtSDQstGA0YrQt9C60Lgg0YHQvtGH0LXRidC4INCyINC00YrRgNCy0L7RgtC+ICjQv9C+0LvQt9Cy0LAg0YHQtSDRgSDigJ4tLWJhdGNo4oCcINC40LvQuCDigJ4tLSIKKyJiYXRjaC1jaGVja+KAnCkiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjEKK21zZ2lkICJzaG93IGFsbCBvYmplY3RzIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0L7QsdC10LrRgtC4INGBIOKAni0tYmF0Y2jigJwg0LjQu9C4IOKAni0tYmF0Y2gtY2hlY2vigJwiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjMKK21zZ2lkICJkbyBub3Qgb3JkZXIgLS1iYXRjaC1hbGwtb2JqZWN0cyBvdXRwdXQiCittc2dzdHIgItCx0LXQtyDQv9C+0LTRgNC10LbQtNCw0L3QtSDQvdCwINC40LfRhdC+0LTQsCDQvtGCIOKAni0tYmF0Y2gtYWxsLW9iamVjdHPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjEzCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCDQkNCi0KDQmNCR0KPQouKApl0gWy0tXSDQn9Cq0KLigKYiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjE0Cittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwg0JDQotCg0JjQkdCj0KLigKZdIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LLRgdC40YfQutC4INCw0YLRgNC40LHRg9GC0LgsINC30LDQtNCw0LTQtdC90Lgg0LLRitGA0YXRgyDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjIKK21zZ2lkICJ1c2UgLmdpdGF0dHJpYnV0ZXMgb25seSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRhNCw0LnQu9CwIOKAni5naXRhdHRyaWJ1dGVz4oCcINGB0LDQvNC+INC+0YIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjUgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMgorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICLQuNC30YfQuNGC0LDQvdC1INC90LAg0LjQvNC10L3QsNGC0LAg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyNSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI3Cittc2dpZCAidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgItGA0LDQt9C00LXQu9GP0L3QtSDQvdCwINCy0YXQvtC00L3QuNGC0LUg0Lgg0LjQt9GF0L7QtNC90LjRgtC1INC30LDQv9C40YHQuCDRgSDQvdGD0LvQtdCy0LjRjyDQt9C90LDQuiDigJ5OVUzigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjEgYnVpbHRpbi9jaGVja291dC5jOjE0NjQgYnVpbHRpbi9nYy5jOjUzNworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5OQorbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi0LHQtdC3INC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC90LDQv9GA0LXQtNGK0LrQsCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOQorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdC10YHRitCy0L/QsNC00LDRidC40YLQtSDQv9GK0YLQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MzEKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAi0L/RgNC10YHQutCw0YfQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCDQv9GA0Lgg0L/RgNC+0LLQtdGA0LrQsNGC0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYzCittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1zdGRpbuKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0LjQvNC10L3QsCDQvdCwINC/0YrRgtC40YnQsCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjYKK21zZ2lkICIteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLXrigJwg0LjQt9C40YHQutCy0LAg4oCeLS1zdGRpbuKAnCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjgKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZCIKK21zZ3N0ciAi0L3QtSDQtSDQt9Cw0LTQsNC00LXQvSDQv9GK0YIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTcyCittc2dpZCAiLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tcXVpZXTigJwg0LjQt9C40YHQutCy0LAg0LTQsCDQtSDQv9C+0LTQsNC00LXQvSDRgtC+0YfQvdC+INC10LTQuNC9INC/0YrRgiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzQKK21zZ2lkICJjYW5ub3QgaGF2ZSBib3RoIC0tcXVpZXQgYW5kIC0tdmVyYm9zZSIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1xdWlldOKAnCDQuCDigJ4tLXZlcmJvc2XigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc3Cittc2dpZCAiLS1ub24tbWF0Y2hpbmcgaXMgb25seSB2YWxpZCB3aXRoIC0tdmVyYm9zZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1ub24tbWF0Y2hpbmfigJwg0LjQt9C40YHQutCy0LAg4oCeLS12ZXJib3Nl4oCcIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo5Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stbWFpbG1hcCBb0J7Qn9Cm0JjQr+KApl0g0JrQntCd0KLQkNCa0KLigKYiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjE0Cittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgItGH0LXRgtC10L3QtSDQvdCwINC60L7QvdGC0LDQutGC0Lgg0Lgg0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29udGFjdDogJXMiCittc2dzdHIgItC60L7QvdGC0LDQutGC0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L06ICVzIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0OAorbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAi0L3QtSDRgdCwINGD0LrQsNC30LDQvdC4INC60L7QvdGC0LDQutGC0LgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMzEKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFvQntCf0KbQmNCv4oCmXSBbLS1dIFvQpNCQ0JnQm+KApl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNDgKK21zZ2lkICJzdGFnZSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzIG9yIGFsbCIKK21zZ3N0ciAi0LXRgtCw0L/RitGCINGC0YDRj9Cx0LLQsCDQtNCwINC1IOKAnjHigJwsIOKAnjLigJwsIOKAnjPigJwg0LjQu9C4IOKAnmFsbOKAnCAo0LLRgdC40YfQutC4KSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICLQuNC30YLQtdCz0LvRj9C90LUg0L3QsCDQstGB0LjRh9C60Lgg0YTQsNC50LvQvtCy0LUg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjUKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMiCittc2dzdHIgItC/0YDQtdC30LDQv9C40YHQstCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSwg0LTQvtGA0Lgg0Lgg0LTQsCDRgdGK0YnQtdGB0YLQstGD0LLQsNGCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY3Cittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAi0LHQtdC3INC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y8g0L/RgNC4INC70LjQv9GB0LLQsNGJ0Lgg0YTQsNC50LvQvtCy0LUg0Lgg0YTQsNC50LvQvtCy0LUg0L3QtSDQsiDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2OQorbXNnaWQgImRvbid0IGNoZWNrb3V0IG5ldyBmaWxlcyIKK21zZ3N0ciAi0LHQtdC3INC40LfRgtC10LPQu9GP0L3QtSDQvdCwINC90L7QstC4INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTcxCittc2dpZCAidXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGZpbGUiCittc2dzdHIgItC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC/0L7Qu9GD0YfQtdC90LAg0YfRgNC10Lcg4oCec3RhdOKAnCDQt9CwINGE0LDQudC70L7QstC10YLQtSDQsiDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINC/0YrRgtC40YnQsNGC0LAg0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc3Cittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICLQt9Cw0L/QuNGB0LLQsNC90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0LLRitCyINCy0YDQtdC80LXQvdC90Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzggYnVpbHRpbi9jb2x1bW4uYzozMQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDMKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDExIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjcyCittc2dpZCAic3RyaW5nIgorbXNnc3RyICLQndCY0JciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzkKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICLQv9GA0Lgg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC90L7QstC4INGE0LDQudC70L7QstC1INC00LAg0YHQtSDQtNC+0LHQsNCy0Y8g0L/RgNC10YTQuNC60YHQsCDQndCY0JciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODEKK21zZ2lkICJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIKK21zZ3N0ciAi0LrQvtC/0LjRgNCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSDQvtGCINGC0L7QstCwINGB0YrRgdGC0L7Rj9C90LjQtSDQvdCwINGB0LvQuNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzEKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBb0J7Qn9Cm0JjQr+KApl0g0JrQm9Ce0J0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMgorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFvQntCf0KbQmNCv4oCmXSBb0JrQm9Ce0J1dIC0tINCk0JDQmdCb4oCmIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzcKK21zZ2lkICJnaXQgc3dpdGNoIFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0iCittc2dzdHIgImdpdCBzd2l0Y2ggW9Ce0J/QptCY0K/igKZdINCa0JvQntCdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIKK21zZ2lkICJnaXQgcmVzdG9yZSBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PGJyYW5jaD5dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc3RvcmUgW9Ce0J/QptCY0K/igKZdIFstLXNvdXJjZT3QmtCb0J7QnV0g0KTQkNCZ0JvigKYiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzUgYnVpbHRpbi9jaGVja291dC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAi0LLQsNGI0LDRgtCwINCy0LXRgNGB0LjRjyDQu9C40L/RgdCy0LAg0LIg0L/RitGC0Y8g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcgYnVpbHRpbi9jaGVja291dC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICLRh9GD0LbQtNCw0YLQsCDQstC10YDRgdC40Y8g0LvQuNC/0YHQstCwINCyINC/0YrRgtGPIOKAniVz4oCcIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgItC90Y/QutC+0Y8g0L7RgiDQvdC10L7QsdGF0L7QtNC40LzQuNGC0LUg0LLQtdGA0YHQuNC4INC70LjQv9GB0LLQsCDQsiDQv9GK0YLRjyDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgItC90Y/QutC+0Y8g0L7RgiDQvdC10L7QsdGF0L7QtNC40LzQuNGC0LUg0LLQtdGA0YHQuNC4INC70LjQv9GB0LLQsCDQsiDQv9GK0YLRjyDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAi0L/RitGC0Y/RgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHQu9GP0L0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgItCg0LXQt9GD0LvRgtCw0YLRitGCINC30LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0LvRj9C9IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAi0J/RgNC10YHRitC30LTQsNC00LXQvSDQtSAlZCDQutC+0L3RhNC70LjQutGCINC/0YDQuCDRgdC70LjQstCw0L3QtSIKK21zZ3N0clsxXSAi0J/RgNC10YHRitC30LTQsNC00LXQvdC4INGB0LAgJWQg0LrQvtC90YTQu9C40LrRgtCwINC/0YDQuCDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkICVkIHBhdGggZnJvbSAlcyIKK21zZ2lkX3BsdXJhbCAiVXBkYXRlZCAlZCBwYXRocyBmcm9tICVzIgorbXNnc3RyWzBdICLQntCx0L3QvtCy0LXQvSDQtSAlZCDQv9GK0YIg0L7RgiDigJ4lc+KAnCIKK21zZ3N0clsxXSAi0J7QsdC90L7QstC10L3QuCDRgdCwICVkINC/0YrRgtGPINC+0YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyWzBdICLQntCx0L3QvtCy0LXQvSDQtSAlZCDQv9GK0YIg0L7RgiDQuNC90LTQtdC60YHQsCIKK21zZ3N0clsxXSAi0J7QsdC90L7QstC10L3QuCDRgdCwICVkINC/0YrRgtGPINC+0YIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTIgYnVpbHRpbi9jaGVja291dC5jOjQxNSBidWlsdGluL2NoZWNrb3V0LmM6NDE4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINC+0LHQvdC+0LLRj9Cy0LDQvdC10YLQviDQvdCwINC/0YrRgtC40YnQsCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyNSBidWlsdGluL2NoZWNrb3V0LmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBIOKAniVz4oCcIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAiIgorItCd0LXQstGK0LfQvNC+0LbQvdC+INC1INC10LTQvdC+0LLRgNC10LzQtdC90L3QviDQtNCwINC+0LHQvdC+0LLRj9Cy0LDRgtC1INC/0YrRgtC40YnQsCDQuCDQtNCwINC/0YDQtdC80LjQvdC10YLQtSDQutGK0Lwg0LrQu9C+0L3QsCDigJ4lc+KAnC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibmVpdGhlciAnJXMnIG9yICclcycgaXMgc3BlY2lmaWVkIgorbXNnc3RyICLQvdC1INC1INGD0LrQsNC30LDQvdC+INC90LjRgtC+IOKAniVz4oCcLCDQvdC40YLQviDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgdXNlZCB3aGVuICclcycgaXMgbm90IHNwZWNpZmllZCIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0LUg0LfQsNC00YrQu9C20LjRgtC10LvQvdCwLCDQutC+0LPQsNGC0L4g4oCeJXPigJwg0L3QtSDQtSDQt9Cw0LTQsNC00LXQvdCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQ1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBvciAnJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAniUzJHPigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINC60LDQutGC0L4g0YEg4oCeJTEkc+KAnCwg0YLQsNC60LAg0Lgg0YEg4oCeJTIkc+KAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjUwOSBidWlsdGluL2NoZWNrb3V0LmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAi0L/RitGC0Y/RgiDigJ4lc+KAnCDQvdC1INC1INGB0LvRj9GCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njg0IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MTA2Cittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgItC/0YrRgNCy0L4g0YLRgNGP0LHQstCwINC00LAg0LrQvtGA0LjQs9C40YDQsNGC0LUg0LjQvdC00LXQutGB0LAg0YHQuCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IGNvbnRpbnVlIHdpdGggc3RhZ2VkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyBmaWxlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtC00YrQu9C20Lgg0YEg0L/RgNC+0LzQtdC90Lgg0LIg0YHQu9C10LTQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSwg0LrQvtC40YLQviDRgdCwINC00L7QsdCw0LLQtdC90Lgg0LIgIgorItC40L3QtNC10LrRgdCwOlxuIgorIiVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICLQltGD0YDQvdCw0LvRitGCINC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSDQt9CwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtGB0LvQtdC00Lg6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NzkKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQsiDQvNC+0LzQtdC90YLQsCDRgdC+0YfQuCDQutGK0LwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODMgYnVpbHRpbi9jbG9uZS5jOjcxNworbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgSEVBRCIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7QsdC90L7QstC10L0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi0JfQsNC90YPQu9GP0LLQsNC90LUg0L3QsCDQutC70L7QvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSBvbiAnJXMnXG4iCittc2dzdHIgItCS0LXRh9C1INGB0YLQtSDQvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgItCf0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INC60LvQvtC90LAg4oCeJXPigJwg0Lgg0LfQsNC90YPQu9GP0LLQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LVcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NiBidWlsdGluL2NoZWNrb3V0LmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLQn9GA0LXQvNC40L3QsNGF0YLQtSDQutGK0Lwg0L3QvtCy0LjRjyDQutC70L7QvSDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgItCf0YDQtdC80LjQvdCw0YXRgtC1INC60YrQvCDQutC70L7QvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIC4uLiBhbmQgJWQgbW9yZS5cbiIKK21zZ3N0ciAi4oCmINC4INC+0YnQtSAlZC5cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INC40LfQvtGB0YLQsNCy0Y/RgtC1ICVkINC/0L7QtNCw0LLQsNC90LUsINC60L7QtdGC0L4g0L3QtSDQtSDRgdCy0YrRgNC30LDQvdC+INC60YrQvCDQvdC40LrQvtC5INC60LvQvtC9OlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMV0gIiIKKyLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQuNC30L7RgdGC0LDQstGP0YLQtSAlZCDQv9C+0LTQsNCy0LDQvdC40Y8sINC60L7QuNGC0L4g0L3QtSDRgdCwINGB0LLRitGA0LfQsNC90Lgg0LrRitC8INC90LjQutC+0LkgIgorItC60LvQvtC9OlxuIgorIlxuIgorIiVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgaXQgYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ2lkX3BsdXJhbCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzBdICIiCisi0JDQutC+INCy0YHQtSDQv9Cw0Log0LjRgdC60LDRgtC1INC00LAg0LfQsNC/0LDQt9C40YLQtSDRgtCw0LfQuCDQv9GA0L7QvNGP0L3QsCDRh9GA0LXQtyDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQutC70L7QvSxcbiIKKyLRgdC10LPQsCDQtSDQvdCw0Lkt0L/QvtC00YXQvtC00Y/RidC40Y/RgiDQt9CwINGC0L7QstCwINGH0YDQtdC3INC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCDQmNCc0JVf0J3QkF/QndCe0JLQmNCvX9Ca0JvQntCdICVzXG4iCisiXG4iCittc2dzdHJbMV0gIiIKKyLQkNC60L4g0LLRgdC1INC/0LDQuiDQuNGB0LrQsNGC0LUg0LTQsCDQt9Cw0L/QsNC30LjRgtC1INGC0LXQt9C4INC/0YDQvtC80LXQvdC4INGH0YDQtdC3INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC60LvQvtC9LFxuIgorItGB0LXQs9CwINC1INC90LDQuS3Qv9C+0LTRhdC+0LTRj9GJ0LjRj9GCINC30LAg0YLQvtCy0LAg0YfRgNC10Lcg0LrQvtC80LDQvdC00LDRgtCwOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoINCY0JzQlV/QndCQX9Cd0J7QktCY0K9f0JrQm9Ce0J0gJXNcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDkKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICLQstGK0YLRgNC10YjQvdCwINCz0YDQtdGI0LrQsCDQv9GA0Lgg0L7QsdGF0L7QttC00LDQvdC10YLQviDQvdCwINCy0LXRgNGB0LjQuNGC0LUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDEzCittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgItCf0YDQtdC00Lgg0YLQvtCy0LAg4oCeSEVBROKAnCDRgdC+0YfQtdGI0LUg0LrRitC8IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA1MyBidWlsdGluL2NoZWNrb3V0LmM6MTMxNQorbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGB0YLQtSDQvdCwINC60LvQvtC9LCDQutC+0LnRgtC+INCy0YHQtSDQvtGJ0LUg0L3QtSDQtSDRgdGK0LfQtNCw0LTQtdC9IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBjb3VsZCBiZSBib3RoIGEgbG9jYWwgZmlsZSBhbmQgYSB0cmFja2luZyBicmFuY2guXG4iCisiUGxlYXNlIHVzZSAtLSAoYW5kIG9wdGlvbmFsbHkgLS1uby1ndWVzcykgdG8gZGlzYW1iaWd1YXRlIgorbXNnc3RyICIiCisi4oCeJXPigJwg0LzQvtC20LUg0LTQsCDQtSDQutCw0LrRgtC+INC70L7QutCw0LvQtdC9INGE0LDQudC7LCDRgtCw0LrQsCDQuCDRgdC70LXQtNGP0Ykg0LrQu9C+0L0uICDQl9CwINGD0YLQvtGH0L3Rj9Cy0LDQvdC1XG4iCisi0L/QvtC70LfQstCw0LnRgtC1INGA0LDQt9C00LXQu9C40YLQtdC70Y8g4oCeLS3igJwgKNC4INC10LLQtdC90YLRg9Cw0LvQvdC+INC+0L/RhtC40Y/RgtCwIOKAni0tbm8tZ3Vlc3PigJwpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzNQorbXNnaWQgIiIKKyJJZiB5b3UgbWVhbnQgdG8gY2hlY2sgb3V0IGEgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBvbiwgZS5nLiAnb3JpZ2luJyxcbiIKKyJ5b3UgY2FuIGRvIHNvIGJ5IGZ1bGx5IHF1YWxpZnlpbmcgdGhlIG5hbWUgd2l0aCB0aGUgLS10cmFjayBvcHRpb246XG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtZT5cbiIKKyJcbiIKKyJJZiB5b3UnZCBsaWtlIHRvIGFsd2F5cyBoYXZlIGNoZWNrb3V0cyBvZiBhbiBhbWJpZ3VvdXMgPG5hbWU+IHByZWZlclxuIgorIm9uZSByZW1vdGUsIGUuZy4gdGhlICdvcmlnaW4nIHJlbW90ZSwgY29uc2lkZXIgc2V0dGluZ1xuIgorImNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIGluIHlvdXIgY29uZmlnLiIKK21zZ3N0ciAiIgorItCQ0LrQviDQuNGB0LrQsNGC0LUg0LTQsCDQuNC30YLQtdCz0LvQuNGC0LUg0LrQu9C+0L3QsCDQvtGCINC60L7QvdC60YDQtdGC0L3QviDRhdGA0LDQvdC40LvQuNGJ0LUsINC90LDQv9GALiDigJ5vcmlnaW7igJwsXG4iCisi0LjQt9GA0LjRh9C90L4g0LPQviDRg9C60LDQttC10YLQtSDQutGK0Lwg0L7Qv9GG0LjRj9GC0LAg4oCeLS10cmFja+KAnDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luL9CY0JzQlV/QndCQX9Ca0JvQntCdXG4iCisiXG4iCisi0JDQutC+INC40YHQutCw0YLQtSDQstC40L3QsNCz0Lgg0LTQsCDRgdC1INC/0YDQtdC00L/QvtGH0LjRgtCwINC60L7QvdC60YDQtdGC0L3QviDRhdGA0LDQvdC40LvQuNGJ0LUg0L/RgNC4INC90LXQtdC00L3QvtC30L3QsNGH0L3QvlxuIgorItCY0JzQlV/QndCQX9Ca0JvQntCdLCDQvdCw0L/RgC4g4oCeb3JpZ2lu4oCcLCDQt9Cw0LTQsNC50YLQtSDRgdC70LXQtNC90LDRgtCwINC90LDRgdGC0YDQvtC50LrQsCDQsiDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90LjRj1xuIgorItGE0LDQudC7OlxuIgorIlxuIgorIiAgICBjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtYXRjaGVkIG11bHRpcGxlICglZCkgcmVtb3RlIHRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdCw0L/QsNGB0LLQsCDRgSDQvNC90L7QttC10YHRgtCy0L4gKCVkKSDQvtGC0LTQsNC70LXRh9C10L3QuCDQutC70L7QvdC4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIxMQorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCwINGB0LUg0YHQsNC80L4g0LXQtNC40L0g0YPQutCw0LfQsNGC0LXQuyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iCittc2dzdHIgItC+0YfQsNC60LLQsCDRgdC1INC10LTQuNC9INGD0LrQsNC30LDRgtC10LssINCwINGB0YLQtSDQv9C+0LTQsNC70LggJWQuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI3NCBidWlsdGluL3dvcmt0cmVlLmM6MjgzIGJ1aWx0aW4vd29ya3RyZWUuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRg9C60LDQt9Cw0YLQtdC7OiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyODcgYnVpbHRpbi9jaGVja291dC5jOjE2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDQvdC1INGB0L7Rh9C4INC60YrQvCDQvtCx0LXQutGCLdC00YrRgNCy0L46ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IHRhZyAnJXMnIgorbXNnc3RyICLQvtGH0LDQutCy0LAg0YHQtSDQutC70L7QvSwg0LAg0L3QtSDQtdGC0LjQutC10YIg4oCUIOKAniVz4oCcIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IHJlbW90ZSBicmFuY2ggJyVzJyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCwINGB0LUg0LvQvtC60LDQu9C10L0sINCwINC90LUg0L7RgtC00LDQu9C10YfQtdC9INC60LvQvtC9IOKAlCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzcgYnVpbHRpbi9jaGVja291dC5jOjEzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCAnJXMnIgorbXNnc3RyICLQvtGH0LDQutCy0LAg0YHQtSDQutC70L7QvSwg0LAg0L3QtSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCBjb21taXQgJyVzJyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCwINGB0LUg0LrQu9C+0L0sINCwINC90LUg0L/QvtC00LDQstCw0L3QtSDigJQg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzU2Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIG1lcmdpbmdcbiIKKyJDb25zaWRlciBcImdpdCBtZXJnZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyLQv9C+INCy0YDQtdC80LUg0L3QsCDRgdC70LjQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0L/RgNC10LzQuNC90LXRgtC1INC60YrQvCDQtNGA0YPQsyDQutC70L7QvS5cbiIKKyLQn9GA0L7QsdCy0LDQudGC0LUg0YEg4oCeZ2l0IG1lcmdlIC0tcXVpdOKAnCDQuNC70Lgg4oCeZ2l0IHdvcmt0cmVlIGFkZOKAnC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzYwCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvblxuIgorIkNvbnNpZGVyIFwiZ2l0IGFtIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorItC/0L4g0LLRgNC10LzQtSDQvdCwINC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC/0L7RgNC10LTQuNGG0LAg0L7RgiDQutGA0YrQv9C60Lgg0L3QtSDQvNC+0LbQtSDQtNCwINC/0YDQtdC80LjQvdC10YLQtSDQutGK0Lwg0LTRgNGD0LMgIgorItC60LvQvtC9LlxuIgorItCf0YDQvtCx0LLQsNC50YLQtSDRgSDigJ5naXQgYW0gLS1xdWl04oCcINC40LvQuCDigJ5naXQgd29ya3RyZWUgYWRk4oCcLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjQKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZWJhc2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisi0L/QviDQstGA0LXQvNC1INC90LAg0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0L/RgNC10LzQuNC90LXRgtC1INC60YrQvCDQtNGA0YPQsyDQutC70L7QvS5cbiIKKyLQn9GA0L7QsdCy0LDQudGC0LUg0YEg4oCeZ2l0IHJlYmFzZSAtLXF1aXTigJwg0LjQu9C4IOKAnmdpdCB3b3JrdHJlZSBhZGTigJwuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2OAorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSBjaGVycnktcGlja2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorItC/0L4g0LLRgNC10LzQtSDQvdCwINC+0YLQsdC40YDQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y8g0L3QtSDQvNC+0LbQtSDQtNCwINC/0YDQtdC80LjQvdC10YLQtSDQutGK0Lwg0LTRgNGD0LMg0LrQu9C+0L0uXG4iCisi0J/RgNC+0LHQstCw0LnRgtC1INGBIOKAnmdpdCBjaGVycnktcGljayAtLXF1aXTigJwg0LjQu9C4IOKAnmdpdCB3b3JrdHJlZSBhZGTigJwuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM3MgorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSByZXZlcnRpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZXZlcnQgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisi0L/QviDQstGA0LXQvNC1INC90LAg0L7RgtC80Y/QvdCwINC90LAg0L/QvtC00LDQstCw0L3QuNGPINC90LUg0LzQvtC20LUg0LTQsCDQv9GA0LXQvNC40L3QtdGC0LUg0LrRitC8INC00YDRg9CzINC60LvQvtC9LlxuIgorItCf0YDQvtCx0LLQsNC50YLQtSDRgSDigJ5naXQgcmV2ZXJ0IC0tcXVpdOKAnCDQuNC70Lgg4oCeZ2l0IHdvcmt0cmVlIGFkZOKAnC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzc2Cittc2dpZCAieW91IGFyZSBzd2l0Y2hpbmcgYnJhbmNoIHdoaWxlIGJpc2VjdGluZyIKK21zZ3N0ciAi0L/RgNC10LzQuNC90LDQstCw0L3QtSDQutGK0Lwg0LTRgNGD0LMg0LrQu9C+0L0g0L/QviDQstGA0LXQvNC1INC90LAg0LTQstC+0LjRh9C90L4g0YLRitGA0YHQtdC90LUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgzCittc2dpZCAicGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgItC30LDQtNCw0LLQsNC90LXRgtC+INC90LAg0L/RitGCINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQviDRgSDQv9GA0LXQvNC40L3QsNCy0LDQvdC10YLQviDQvtGCINC10LTQuNC9INC60LvQvtC9INC60YrQvCDQtNGA0YPQsyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODYgYnVpbHRpbi9jaGVja291dC5jOjEzOTAgYnVpbHRpbi9jaGVja291dC5jOjEzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINC/0YDQtdC80LjQvdCw0LLQsNC90LXRgtC+INC+0YIg0LXQtNC40L0g0LrQu9C+0L0g0LrRitC8INC00YDRg9CzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5OCBidWlsdGluL2NoZWNrb3V0LmM6MTQwMSBidWlsdGluL2NoZWNrb3V0LmM6MTQwNAorIzogYnVpbHRpbi9jaGVja291dC5jOjE0MDkgYnVpbHRpbi9jaGVja291dC5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAniVz4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgdGFrZSA8c3RhcnQtcG9pbnQ+IgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YHRitGBINC30LDQtNCw0LLQsNC90LXRgtC+INC90LAg0J3QkNCn0JDQm9CeIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIKK21zZ3N0ciAiIgorItCX0LAg0LTQsCDQv9GA0LXQvNC40L3QtdGC0LUg0LrRitC8INC60LvQvtC9LCDQv9C+0LTQsNC50YLQtSDRg9C60LDQt9Cw0YLQtdC7LCDQutC+0LnRgtC+INGB0L7Rh9C4INC60YrQvCDQv9C+0LTQsNCy0LDQvdC1LiAg4oCeJXPigJwgIgorItC90LUg0LUg0YLQsNC60YrQsiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MjYKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBvciBjb21taXQgYXJndW1lbnQiCittc2dzdHIgItC70LjQv9GB0LLQsCDQsNGA0LPRg9C80LXQvdGCIOKAlCDQutC70L7QvSDQuNC70Lgg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjggYnVpbHRpbi9jbG9uZS5jOjkxIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NzIKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM1IGJ1aWx0aW4vZmV0Y2guYzoxNjcgYnVpbHRpbi9tZXJnZS5jOjI4NgorIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjcgYnVpbHRpbi9wdWxsLmM6MTE4IGJ1aWx0aW4vcHVzaC5jOjU2MworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzQKK21zZ2lkICJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90LDQv9GA0LXQtNGK0LrQsCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjkKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAi0LjQt9Cy0YrRgNGI0LLQsNC90LUg0L3QsCDRgtGA0L7QudC90L4g0YHQu9C40LLQsNC90LUg0YEg0L3QvtCy0LjRjyDQutC70L7QvSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NzAgYnVpbHRpbi9sb2cuYzoxNjkwIHBhcnNlLW9wdGlvbnMuaDozMjIKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAi0KHQotCY0JsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDcxCittc2dpZCAiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIKK21zZ3N0ciAi0LTQtdC50YHRgtCy0LjQtSDQv9GA0Lgg0LrQvtC90YTQu9C40LrRgiAo0YHQu9C40LLQsNC90LUg0LjQu9C4INGC0YDQvtC50L3QsCDRgNCw0LfQu9C40LrQsCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDgzIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTYKK21zZ2lkICJkZXRhY2ggSEVBRCBhdCBuYW1lZCBjb21taXQiCittc2dzdHIgItC+0YLQtNC10LvRj9C90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCDQutGK0Lwg0YPQutCw0LfQsNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg0Cittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgItC30LDQtNCw0LLQsNC90LUg0L3QsCDQutC+0Lkg0LrQu9C+0L0g0LHQuNCy0LAg0YHQu9C10LTQtdC9INC/0YDQuCDRgdGK0LfQtNCw0LLQsNC90LXRgtC+INC90LAg0L3QvtCy0LjRjyDQutC70L7QvSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODYKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC40LfRgtC10LPQu9GP0L3QtSAo0LLQsNGI0LjRgtC1INC/0YDQvtC80LXQvdC4INGJ0LUg0LHRitC00LDRgiDQt9Cw0L3Rg9C70LXQvdC4KSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODgKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICLQndCe0JJf0JrQm9Ce0J0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg4Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICLQvdC+0LIg0LrQu9C+0L0g0LHQtdC3INGA0L7QtNC40YLQtdC7IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ5MCBidWlsdGluL21lcmdlLmM6Mjg5Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICLQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC40LPQvdC+0YDQuNGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSAo0YHRgtCw0L3QtNCw0YDRgtC90L4pIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ5MworbXNnaWQgImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIKK21zZ3N0ciAi0LHQtdC3INC/0YDQvtCy0LXRgNC60LAg0LTQsNC70Lgg0LTRgNGD0LPQviDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+INC00YrRgNC20Lgg0YPQutCw0LfQsNGC0LXQu9GPIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUwNgorbXNnaWQgImNoZWNrb3V0IG91ciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAi0LjQt9GC0LXQs9C70Y/QvdC1INC90LAg0LLQsNGI0LDRgtCwINCy0LXRgNGB0LjRjyDQvdCwINC90LXRgdC70LXRgtC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MDkKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAi0LjQt9GC0LXQs9C70Y/QvdC1INC90LAg0YfRg9C20LTQsNGC0LAg0LLQtdGA0YHQuNGPINC90LAg0L3QtdGB0LvQtdGC0LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUxMworbXNnaWQgImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIKK21zZ3N0ciAi0LHQtdC3INC+0LPRgNCw0L3QuNGH0LDQstCw0L3QtSDQvdCwINC40LfQsdGA0L7QtdC90LjRgtC1INC/0YrRgtC40YnQsCDRgdCw0LzQviDQtNC+INGH0LDRgdGC0LjRh9C90L4g0LjQt9GC0LXQs9C70LXQvdC40YLQtSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NjUKK21zZ2lkICItYiwgLUIgYW5kIC0tb3JwaGFuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni1i4oCcLCDigJ4tQuKAnCDQuCDigJ4tLW9ycGhhbuKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCDQtdC00L3QsCDRgSDQtNGA0YPQs9CwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU2OAorbXNnaWQgIi1wIGFuZCAtLW92ZXJsYXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLXDigJwg0Lgg4oCeLS1vdmVybGF54oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYwNQorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS10cmFja+KAnCDQuNC30LjRgdC60LLQsCDQuNC80LUg0L3QsCDQutC70L7QvSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2MTAKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgItC70LjQv9GB0LLQsCDQuNC80LUg0L3QsCDQutC70L7QvSwg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsCDigJ4tYuKAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjU4Cittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgItGD0LrQsNC30LDQvSDQtSDQvdC10L/RgNCw0LLQuNC70LXQvSDQv9GK0YIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0L/QvtC00LDQstCw0L3QtSwg0LfQsNGC0L7QstCwINC+0YIg0L3QtdCz0L4g0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0LrQu9C+0L0g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiDQvtC/0YbQuNGP0YLQsCDigJ4tLWRldGFjaOKAnCDQvdC1INC/0YDQuNC10LzQsCDQsNGA0LPRg9C80LXQvdGCLdC/0YrRgiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NzgKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWRldGFjaCIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1wYXRoc3BlYy1mcm9tLWZpbGXigJwg0Lgg4oCeLS1kZXRhY2jigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjgxIGJ1aWx0aW4vcmVzZXQuYzozMjQgYnVpbHRpbi9zdGFzaC5jOjE1MDYKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXBhdGNoIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLXBhdGhzcGVjLWZyb20tZmlsZeKAnCDQuCDigJ4tLXBhdGNo4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY5MgorbXNnaWQgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorImdpdCBjaGVja291dDog0L7Qv9GG0LjQuNGC0LUg4oCeLS1vdXJz4oCcL+KAni0tdGhlaXJz4oCcLCDigJ4tLWZvcmNl4oCcINC4IOKAni0tbWVyZ2XigJxcbiIKKyLRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCDRgSDQuNC30YLQtdCz0LvRj9C90LUg0L7RgiDQuNC90LTQtdC60YHQsC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjk3Cittc2dpZCAieW91IG11c3Qgc3BlY2lmeSBwYXRoKHMpIHRvIHJlc3RvcmUiCittc2dzdHIgItGC0YDRj9Cx0LLQsCDQtNCwINGD0LrQsNC20LXRgtC1INC/0L7QvdC1INC10LTQuNC9INC/0YrRgiDQt9CwINCy0YrQt9GB0YLQsNC90L7QstGP0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI1IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3NiBidWlsdGluL2Nsb25lLmM6MTIxIGJ1aWx0aW4vcmVtb3RlLmM6MTcwCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MiBidWlsdGluL3dvcmt0cmVlLmM6NDkyIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTQKK21zZ2lkICJicmFuY2giCittc2dzdHIgItC60LvQvtC9IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyNAorbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICLRgdGK0LfQtNCw0LLQsNC90LUg0Lgg0L/RgNC10LzQuNC90LDQstCw0L3QtSDQutGK0Lwg0L3QvtCyINC60LvQvtC9IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyNgorbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgY2hlY2tvdXQgYSBicmFuY2giCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtS/Qt9Cw0L3Rg9C70Y/QstCw0L3QtSDQvdCwINC60LvQvtC9INC4INC/0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INC90LXQs9C+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyNworbXNnaWQgImNyZWF0ZSByZWZsb2cgZm9yIG5ldyBicmFuY2giCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC20YPRgNC90LDQuyDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUg0LfQsCDQvdC+0LIg0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI5Cittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPicgKGRlZmF1bHQpIgorbXNnc3RyICIiCisi0L7Qv9C40YIg0LfQsCDQvtGC0LPQsNGC0LLQsNC90LUg0L3QsCDQuNC80LUg0L3QsCDQutC70L7QvSDRgdC70LXQtCDQvdC10YPRgdC/0LXRiNC10L0g0L7Qv9C40YIg0YEg4oCeZ2l0IGNoZWNrb3V0ICIKKyLQndCV0KHQqtCp0JXQodCi0JLQo9CS0JDQqV/QmtCb0J7QneKAnCAo0YHRgtCw0L3QtNCw0YDRgtC90L4pIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTczMAorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUgKGRlZmF1bHQpIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINC/0YDQuNC/0L7QutGA0LjQstCw0Ykg0YDQtdC20LjQvCAo0YHRgtCw0L3QtNCw0YDRgtC90L4pIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3NQorbXNnaWQgImNyZWF0ZSBhbmQgc3dpdGNoIHRvIGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC4INC/0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INC90L7QsiDQutC70L7QvSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzcKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIHN3aXRjaCB0byBhIGJyYW5jaCIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1L9C30LDQvdGD0LvRj9Cy0LDQvdC1INC90LAg0LrQu9C+0L0g0Lgg0L/RgNC10LzQuNC90LDQstCw0L3QtSDQutGK0Lwg0L3QtdCz0L4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc5Cittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgc3dpdGNoIDxuby1zdWNoLWJyYW5jaD4nIgorbXNnc3RyICIiCisi0L7Qv9C40YIg0LfQsCDQvtGC0LPQsNGC0LLQsNC90LUg0L3QsCDQuNC80LUg0L3QsCDQutC70L7QvSDRgdC70LXQtCDQvdC10YPRgdC/0LXRiNC10L0g0L7Qv9C40YIg0YEg4oCeZ2l0IHN3aXRjaCAiCisi0J3QldCh0KrQqdCV0KHQotCS0KPQktCQ0Klf0JrQm9Ce0J3igJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzgxCittc2dpZCAidGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zIgorbXNnc3RyICLQt9Cw0L3Rg9C70Y/QstCw0L3QtSDQvdCwINC70L7QutCw0LvQvdC40YLQtSDQv9GA0L7QvNC10L3QuCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTMKK21zZ2lkICJ3aGljaCB0cmVlLWlzaCB0byBjaGVja291dCBmcm9tIgorbXNnc3RyICLQutGK0Lwg0LrQvtC5INGD0LrQsNC30LDRgtC10Lsg0LrRitC8INC00YrRgNCy0L4g0LTQsCDRgdC1INC/0YDQtdC80LjQvdC1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxNQorbXNnaWQgInJlc3RvcmUgdGhlIGluZGV4IgorbXNnc3RyICLQstGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODE3Cittc2dpZCAicmVzdG9yZSB0aGUgd29ya2luZyB0cmVlIChkZWZhdWx0KSIKK21zZ3N0ciAi0LLRitC30YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+ICjRgdGC0LDQvdC00LDRgNGC0L3QvikiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODE5Cittc2dpZCAiaWdub3JlIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgItC/0YDQtdC90LXQsdGA0LXQs9Cy0LDQvdC1INC90LAg0L3QtdGB0LvQtdGC0LjRgtC1INC10LvQtdC80LXQvdGC0LgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODIwCittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQv9GA0LjQv9C+0LrRgNC40LLQsNGJINGA0LXQttC40LwiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOAorbXNnaWQgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lINCo0JDQkdCb0J7QnV0gWy14IHwgLVhdIFstLV0g0J/QqtCi4oCmIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICLQpNCw0LnQu9GK0YIg4oCeJXPigJwg0YnQtSDQsdGK0LTQtSDQuNC30YLRgNC40YJcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAi0J/RgNC10YHQutCw0YfQsNC90LUg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBza2lwIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAi0KXRgNCw0L3QuNC70LjRidC10YLQviDigJ4lc+KAnCDRidC1INCx0YrQtNC1INC/0YDQtdGB0LrQvtGH0LXQvdC+XG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsc3RhdCAlc1xuIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9C+0LvRg9GH0Lgg0LjQvdGE0L7RgNC80LDRhtC40Y8g0YfRgNC10Lcg4oCebHN0YXTigJwg0LfQsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbVxuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmdcbiIKK21zZ3N0ciAiIgorItCf0L7QtNGB0LrQsNC30LrQsDpcbiIKKyIxICAgICAgICAgIOKAlCDQuNC30LHQvtGAINC90LAg0L7QsdC10LrRgiDRgdC/0L7RgNC10LQg0YDQtdC00LBcbiIKKyLQn9Cg0JXQpNCY0JrQoSAgICDigJQg0LjQt9Cx0L7RgCDQvdCwINC10LTQuNC90YHRgtCy0LXQvSDQvtCx0LXQutGCINC/0L4g0YLQvtC30Lgg0YPQvdC40LrQsNC70LXQvSDQv9GA0LXRhNC40LrRgVxuIgorIiAgICAgICAgICAg4oCUICjQv9GA0LDQt9C90L4pINC90LjRidC+INC00LAg0L3QtSDRgdC1INC40LfQsdC40YDQsFxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZ1xuIgorbXNnc3RyICIiCisi0J/QvtC00YHQutCw0LfQutCwOlxuIgorIjEgICAgICAgICAg4oCUINC40LfQsdC+0YAg0L3QsCDQtdC00LjQvSDQvtCx0LXQutGCXG4iCisiMy01ICAgICAgICDigJQg0LTQuNCw0L/QsNC30L7QvSDQt9CwINC40LfQsdC+0YAg0L3QsCDQvtCx0LXQutGC0LhcbiIKKyIyLTMsNi05ICAgIOKAlCDQvNC90L7QttC10YHRgtCy0L4g0LTQuNCw0L/QsNC30L7QvdC4INC30LAg0LjQt9Cx0L7RgCDQvdCwINC+0LHQtdC60YLQuFxuIgorItCf0KDQldCk0JjQmtChICAgIOKAlCDQuNC30LHQvtGAINC90LAg0LXQtNC40L3RgdGC0LLQtdC9INC+0LHQtdC60YIg0L/QviDRgtC+0LfQuCDRg9C90LjQutCw0LvQtdC9INC/0YDQtdGE0LjQutGBXG4iCisiLeKApiAgICAgICAgIOKAlCDQvtGC0LzRj9C90LAg0L3QsCDQuNC30LHQvtGA0LAg0L3QsCDQvtCx0LXQutGC0LhcbiIKKyIqICAgICAgICAgIOKAlCDQuNC30LHQuNGA0LDQvdC1INC90LAg0LLRgdC40YfQutC4INC+0LHQtdC60YLQuFxuIgorIiAgICAgICAgICAg4oCUICjQv9GA0LDQt9C90L4pINC30LDQstGK0YDRiNCy0LDQvdC1INC90LAg0LjQt9Cx0LjRgNCw0L3QtdGC0L5cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjUyMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU3MAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpP1xuIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSDQuNC30LHQvtGAICglcykuXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIgorbXNnc3RyICLQqNCw0LHQu9C+0L3QuCDQt9CwINC40LPQvdC+0YDQuNGA0LDQvdC4INC10LvQtdC80LXQvdGC0LjiiasgIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQndC40LrQvtC5INC+0LHQtdC60YIg0L3QtSDQvdCw0L/QsNGB0LLQsCDQvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzIxCittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAi0JjQt9Cx0LjRgNCw0L3QtSDQvdCwINC+0LHQtdC60YLQuCDQt9CwINC40LfRgtGA0LjQstCw0L3QtSIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBrZWVwIFt5L05dIGFzIGlzCisjOiBidWlsdGluL2NsZWFuLmM6NzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92ZSAlcyBbeS9OXT8gIgorbXNnc3RyICLQlNCwINGB0LUg0LjQt9GC0YDQuNC1INC70Lgg4oCeJXPigJw/IOKAnnnigJwg4oCUICDQtNCwLCDigJ5O4oCcIOKAlCDQndCVIgorCisjOiBidWlsdGluL2NsZWFuLmM6Nzk1Cittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIOKAlCDQvdCw0YfQsNC70L4g0L3QsCDQuNC30YfQuNGB0YLQstCw0L3QtdGC0L5cbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIOKAlCDRiNCw0LHQu9C+0L0g0LfQsCDQvtCx0LXQutGC0LgsINC60L7QuNGC0L4g0LTQsCDQvdC1INGB0LUg0YLRgNC40Y/RglxuIgorInNlbGVjdCBieSBudW1iZXJzICAg4oCUINC90L7QvNC10YDQsCDQvdCwINC+0LHQtdC60YLQuCwg0LrQvtC40YLQviDQtNCwINGB0LUg0YLRgNC40Y/RglxuIgorImFzayBlYWNoICAgICAgICAgICAg4oCUINC/0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRgdGP0LrQviDQuNC30YLRgNC40LLQsNC90LUgKNC/0L7QtNC+0LHQvdC+INC90LAg4oCecm0gLWnigJwpXG4iCisicXVpdCAgICAgICAgICAgICAgICDigJQg0LrRgNCw0Lkg0L3QsCDQuNC30YfQuNGB0YLQstCw0L3QtdGC0L5cbiIKKyJoZWxwICAgICAgICAgICAgICAgIOKAlCDRgtC+0LfQuCDQutGA0LDQuVxuIgorIj8gICAgICAgICAgICAgICAgICAg4oCUINC/0L7QtNGB0LrQsNC30LrQsCDQt9CwINGI0LDQsdC70L7QvdC40YLQtSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzMQorbXNnaWQgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IgorbXNnaWRfcGx1cmFsICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiCittc2dzdHJbMF0gItCh0LvQtdC00L3QuNGP0YIg0L7QsdC10LrRgiDRidC1INCx0YrQtNC1INC40LfRgtGA0LjRgjoiCittc2dzdHJbMV0gItCh0LvQtdC00L3QuNGC0LUg0L7QsdC10LrRgtC4INGJ0LUg0LHRitC00LDRgiDQuNC30YLRgNC40YLQuDoiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDcKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAi0KTQsNC50LvQvtCy0LXRgtC1INC30LAg0LjQt9GH0LjRgdGC0LLQsNC90LUg0YHQstGK0YDRiNC40YXQsC4gINCY0LfRhdC+0LQg0L7RgiDQv9GA0L7Qs9GA0LDQvNCw0YLQsC4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDkKK21zZ2lkICJkbyBub3QgcHJpbnQgbmFtZXMgb2YgZmlsZXMgcmVtb3ZlZCIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40LzQtdC90LDRgtCwINC90LAg0YTQsNC50LvQvtCy0LXRgtC1LCDQutC+0LjRgtC+INGJ0LUg0LHRitC00LDRgiDQuNC30YLRgNC40YLQuCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMQorbXNnaWQgImZvcmNlIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0LjQt9GC0YDQuNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTEyCittc2dpZCAiaW50ZXJhY3RpdmUgY2xlYW5pbmciCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QviDQuNC30YLRgNC40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTQKK21zZ2lkICJyZW1vdmUgd2hvbGUgZGlyZWN0b3JpZXMiCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQvdCwINGG0LXQu9C4INC00LjRgNC10LrRgtC+0YDQuNC4IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjIgYnVpbHRpbi9kZXNjcmliZS5jOjU2NAorIzogYnVpbHRpbi9ncmVwLmM6ODg5IGJ1aWx0aW4vbG9nLmM6MTc3IGJ1aWx0aW4vbG9nLmM6MTc5CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjYgYnVpbHRpbi9uYW1lLXJldi5jOjUyOAorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgItCo0JDQkdCb0J7QnSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNgorbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0KjQkNCR0JvQntCdINC+0YIg0YTQsNC50LvQvtCy0LUsINC60L7QuNGC0L4g0LTQsCDQvdC1INGB0LUg0YLRgNC40Y/RgiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNworbXNnaWQgInJlbW92ZSBpZ25vcmVkIGZpbGVzLCB0b28iCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQuCDQvdCwINC40LPQvdC+0YDQuNGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxOQorbXNnaWQgInJlbW92ZSBvbmx5IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDRgdCw0LzQviDQvdCwINC40LPQvdC+0YDQuNGA0LDQvdC4INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTM3Cittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4teOKAnCDQuCDigJ4tWOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0MQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorItCd0LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeY2xlYW4ucmVxdWlyZUZvcmNl4oCcINC1INC30LDQtNCw0LTQtdC90LAg0LrQsNGC0L4g0LjRgdGC0LjQvdCwLCDQutC+0LXRgtC+INC40LfQuNGB0LrQstCwINC90Y/QutC+0Y8gIgorItC+0YIg0L7Qv9GG0LjQuNGC0LUg4oCeLWnigJwsIOKAni1u4oCcINC40LvQuCDigJ4tZuKAnC4gINCd0Y/QvNCwINC00LAg0YHQtSDQuNC30LLRitGA0YjQuCDQuNC30YfQuNGB0YLQstCw0L3QtSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0NAorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisi0J3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5jbGVhbi5yZXF1aXJlRm9yY2XigJwg0L3QtSDQtSDQt9Cw0LTQsNC00LXQvdCwLCDQvdC+INGB0YLQsNC90LTQsNGA0YLQvdC+INC1INC40YHRgtC40L3QsCwgIgorItC60L7QtdGC0L4g0LjQt9C40YHQutCy0LAg0L3Rj9C60L7RjyDQvtGCINC+0L/RhtC40LjRgtC1IOKAni1p4oCcLCDigJ4tbuKAnCDQuNC70Lgg4oCeLWbigJwuICDQndGP0LzQsCDQtNCwINGB0LUg0LjQt9Cy0YrRgNGI0LggIgorItC40LfRh9C40YHRgtCy0LDQvdC1IgorCisjOiBidWlsdGluL2Nsb25lLmM6NDUKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFvQntCf0KbQmNCv4oCmXSBbLS1dINCl0KDQkNCd0JjQm9CY0KnQlSBb0JTQmNCg0JXQmtCi0J7QoNCY0K9dIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAi0LHQtdC3INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NCBidWlsdGluL2Nsb25lLmM6OTYgYnVpbHRpbi9pbml0LWRiLmM6NDg5Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICLRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQs9C+0LvQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OAorbXNnaWQgImNyZWF0ZSBhIG1pcnJvciByZXBvc2l0b3J5IChpbXBsaWVzIGJhcmUpIgorbXNnc3RyICIiCisi0YHRitC30LTQsNCy0LDQvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC1LdC+0LPQu9C10LTQsNC70L4gKNCy0LrQu9GO0YfQstCwINC+0L/RhtC40Y/RgtCwIOKAni0tYmFyZeKAnCDQt9CwINCz0L7Qu9C+INGF0YDQsNC90LjQu9C40YnQtSkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDAKK21zZ2lkICJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0LrQu9C+0L3QuNGA0LDQvdC1INC+0YIg0LvQvtC60LDQu9C90L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyCittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgItCx0LXQtyDRgtCy0YrRgNC00Lgg0LLRgNGK0LfQutC4LCDRhNCw0LnQu9C+0LLQtdGC0LUg0LLQuNC90LDQs9C4INC00LAg0YHQtSDQutC+0L/QuNGA0LDRgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNAorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICLQvdCw0YHRgtGA0L7QudCy0LDQvdC1INC30LAg0YHQv9C+0LTQtdC70LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgInBhdGhzcGVjIgorbXNnc3RyICLQv9GK0YIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICLQuNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9C40YLQtSDQv9GA0Lgg0YLQvtCy0LAg0LrQu9C+0L3QuNGA0LDQvdC1IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEwCittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgY2xvbmVkIGluIHBhcmFsbGVsIgorbXNnc3RyICLQsdGA0L7QuSDQv9C+0LTQvNC+0LTRg9C70LgsINC60LvQvtC90LjRgNCw0L3QuCDQv9Cw0YDQsNC70LXQu9C90L4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTEgYnVpbHRpbi9pbml0LWRiLmM6NDg2Cittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRjyDRgSDRiNCw0LHQu9C+0L3QuCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMiBidWlsdGluL2luaXQtZGIuYzo0ODcKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRjywg0LrQvtGP0YLQviDRgdGK0LTRitGA0LbQsCDRiNCw0LHQu9C+0L3QuNGC0LUsINC60L7QuNGC0L4g0LTQsCDRgdC1INC/0L7Qu9C30LLQsNGCIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE0IGJ1aWx0aW4vY2xvbmUuYzoxMTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDcKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTEyCittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgItC10YLQsNC70L7QvdC90L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxNAorbXNnaWQgInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tcmVmZXJlbmNl4oCcINC80L7QttC1INC00LAg0YHQtSDQuNC30L/QvtC70LfQstCwINGB0LDQvNC+INC/0YDQuCDQutC70L7QvdC40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTkgYnVpbHRpbi9jb2x1bW4uYzoyNyBidWlsdGluL21lcmdlLWZpbGUuYzo0NgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQxIGJ1aWx0aW4vcmVwYWNrLmM6MzI3Cittc2dpZCAibmFtZSIKK21zZ3N0ciAi0JjQnNCVIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIwCittc2dpZCAidXNlIDxuYW1lPiBpbnN0ZWFkIG9mICdvcmlnaW4nIHRvIHRyYWNrIHVwc3RyZWFtIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGC0L7QstCwINCY0JzQlSDQstC80LXRgdGC0L4g4oCeb3JpZ2lu4oCcINC/0YDQuCDQv9GA0L7RgdC70LXQtNGP0LLQsNC90LUg0L3QsCDQutC70L7QvdC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIyCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAi0LjQt9GC0LXQs9C70Y/QvdC1INC90LAg0YLQvtC30Lgg0JrQm9Ce0J0sINCwINC90LUg0YHQvtGH0LXQvdC40Y/RgiDQvtGCINC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0YPQutCw0LfQsNGC0LXQuyDigJ5IRUFE4oCcIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0Cittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAi0L/RitGCINC60YrQvCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LXVwbG9hZC1wYWNr4oCcINC90LAg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNSBidWlsdGluL2ZldGNoLmM6MTY4IGJ1aWx0aW4vZ3JlcC5jOjgyOAorIzogYnVpbHRpbi9wdWxsLmM6MjA3Cittc2dpZCAiZGVwdGgiCittc2dzdHIgItCU0KrQm9CR0J7Qp9CY0J3QkCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNgorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAi0L/Qu9C40YLQutC+INC60LvQvtC90LjRgNCw0L3QtSDQtNC+INGC0LDQt9C4INCU0KrQm9CR0J7Qp9CY0J3QkCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNyBidWlsdGluL2ZldGNoLmM6MTcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzMAorbXNnaWQgInRpbWUiCittc2dzdHIgItCS0KDQldCc0JUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjgKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIHNpbmNlIGEgc3BlY2lmaWMgdGltZSIKK21zZ3N0ciAi0L/Qu9C40YLQutC+INC60LvQvtC90LjRgNCw0L3QtSDQtNC+INC80L7QvNC10L3RgiDQstGK0LIg0LLRgNC10LzQtdGC0L4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjkgYnVpbHRpbi9mZXRjaC5jOjE3MiBidWlsdGluL2ZldGNoLmM6MTk1CisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODAKK21zZ2lkICJyZXZpc2lvbiIKK21zZ3N0ciAi0JLQldCg0KHQmNCvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMwIGJ1aWx0aW4vZmV0Y2guYzoxNzMKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lLCBleGNsdWRpbmcgcmV2IgorbXNnc3RyICLQt9Cw0LTRitC70LHQvtGH0LDQstCw0L3QtSDQvdCwINC40YHRgtC+0YDQuNGP0YLQsCDQvdCwINC/0LvQuNGC0LrQviDRhdGA0LDQvdC40LvQuNGJ0LUg0LTQviDQuNC30LrQu9GO0YfQstCw0Ykg0YPQutCw0LfQsNGC0LXQuyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MjgKK21zZ2lkICJjbG9uZSBvbmx5IG9uZSBicmFuY2gsIEhFQUQgb3IgLS1icmFuY2giCittc2dzdHIgIiIKKyLQutC70L7QvdC40YDQsNC90LUg0YHQsNC80L4g0L3QsCDQtdC00LjQvSDQutC70L7QvSDigJQg0LjQu9C4INGB0L7Rh9C10L3QuNGPINC+0YIg0L7RgtC00LDQu9C10YfQtdC90LjRjyDigJ5IRUFE4oCcLCDQuNC70Lgg0LjQt9GA0LjRh9C90L4gIgorItC30LDQtNCw0LTQtdC90LjRjyDRgSDigJ4tLWJyYW5jaOKAnCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNAorbXNnaWQgImRvbid0IGNsb25lIGFueSB0YWdzLCBhbmQgbWFrZSBsYXRlciBmZXRjaGVzIG5vdCB0byBmb2xsb3cgdGhlbSIKK21zZ3N0ciAiIgorItCx0LXQtyDQutC70L7QvdC40YDQsNC90LUg0L3QsCDQtdGC0LjQutC10YLQuCwg0LrQsNGC0L4g0L/QvtGB0LvQtdC00LLQsNGJ0LjRgtC1INC00L7RgdGC0LDQstGP0L3QuNGPINC90Y/QvNCwINC00LAg0LPQuCDRgdC70LXQtNGP0YIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzYKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCBiZSBzaGFsbG93IgorbXNnc3RyICLQstGB0LjRh9C60Lgg0LrQu9C+0L3QuNGA0LDQvdC4INC/0L7QtNC80L7QtNGD0LvQuCDRidC1INGB0LAg0L/Qu9C40YLQutC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAi0KHQm9Cj0JbQldCR0J3QkF/QlNCY0KDQldCa0KLQntCg0JjQryIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOCBidWlsdGluL2luaXQtZGIuYzo0OTYKK21zZ2lkICJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIgorbXNnc3RyICLQvtGC0LTQtdC70L3QsCDQodCb0KPQltCV0JHQndCQX9CU0JjQoNCV0JrQotCe0KDQmNCvINC30LAgZ2l0INC40LfQstGK0L0g0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzkKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgItCa0JvQrtCnPdCh0KLQntCZ0J3QntCh0KIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDAKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgItC30LDQtNCw0LLQsNC90LUg0L3QsCDQvdCw0YHRgtGA0L7QudC60LjRgtC1INC90LAg0L3QvtCy0L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MgorbXNnaWQgInNlcnZlci1zcGVjaWZpYyIKK21zZ3N0ciAi0YHQv9C10YbQuNGE0LjRh9C90Lgg0LfQsCDRgdGK0YDQstGK0YDQsCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgIm9wdGlvbiB0byB0cmFuc21pdCIKK21zZ3N0ciAi0L7Qv9GG0LjRjyDQt9CwINC/0YDQtdC90L7RgSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MyBidWlsdGluL2ZldGNoLmM6MTkxIGJ1aWx0aW4vcHVsbC5jOjIyMAorIzogYnVpbHRpbi9wdXNoLmM6NTc0Cittc2dpZCAidXNlIElQdjQgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgItGB0LDQvNC+INCw0LTRgNC10YHQuCBJUHY0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ1IGJ1aWx0aW4vZmV0Y2guYzoxOTMgYnVpbHRpbi9wdWxsLmM6MjIzCisjOiBidWlsdGluL3B1c2guYzo1NzYKK21zZ2lkICJ1c2UgSVB2NiBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAi0YHQsNC80L4g0LDQtNGA0LXRgdC4IElQdjYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDkKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCB1c2UgdGhlaXIgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi0LLRgdC40YfQutC4INC60LvQvtC90LjRgNCw0L3QuCDQv9C+0LTQvNC+0LTRg9C70Lgg0YnQtSDQv9C+0LvQt9Cy0LDRgiDRgdC70LXQtNGP0YnQuNGC0LUg0YHQuCDQutC70L7QvdC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTUxCittc2dpZCAiaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQgZmlsZSB0byBpbmNsdWRlIG9ubHkgZmlsZXMgYXQgcm9vdCIKK21zZ3N0ciAiIgorItC40L3QuNGG0LjQsNC70LjQt9C40YDQsNC90LUg0L3QsCDRhNCw0LnQu9CwINC30LAg0YfQsNGB0YLQuNGH0L3QviDQuNC30YLQtdCz0LvRj9C90LUgKOKAni5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXTigJwpICIKKyLQtNCwINGB0YrQtNGK0YDQttCwINGB0LDQvNC+INGE0LDQudC70L7QstC10YLQtSDQsiDQvtGB0L3QvtCy0L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoyODcKK21zZ2lkICIiCisiTm8gZGlyZWN0b3J5IG5hbWUgY291bGQgYmUgZ3Vlc3NlZC5cbiIKKyJQbGVhc2Ugc3BlY2lmeSBhIGRpcmVjdG9yeSBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICIiCisi0JjQvNC10YLQviDQvdCwINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCz0LDRgtC90LDRgtC+LlxuIgorItCX0LDQtNCw0LnRgtC1INC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQuNC30YDQuNGH0L3QviDQvdCwINC60L7QvNCw0L3QtNC90LjRjyDRgNC10LQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbzogQ291bGQgbm90IGFkZCBhbHRlcm5hdGUgZm9yICclcyc6ICVzXG4iCittc2dzdHIgIiIKKyLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQvdC1INC80L7QttC1INC00LAg0YHQtSDQtNC+0LHQsNCy0Lgg0LDQu9GC0LXRgNC90LDRgtC40LLQtdC9INC40LfRgtC+0YfQvdC40Log0L3QsCDigJ4lc+KAnDogJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAi4oCeJXPigJwg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0Lgg0L3QtSDQtSDQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhcnQgaXRlcmF0b3Igb3ZlciAnJXMnIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjRgtC10YDQuNGA0LDQvdC1INC/0L4g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgItCy0YDRitC30LrQsNGC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L3QsCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgItGE0LDQudC70YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LrQvtC/0LjRgNCw0L0g0LrQsNGC0L4g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGl0ZXJhdGUgb3ZlciAnJXMnIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjRgtC10YDQuNGA0LDQvdC1INC/0L4g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAi0LTQtdC50YHRgtCy0LjQtdGC0L4g0LfQsNCy0YrRgNGI0LguXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1MDgKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB3aXRoICdnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEIDovJ1xuIgorbXNnc3RyICIiCisi0JrQu9C+0L3QuNGA0LDQvdC10YLQviDQsdC1INGD0YHQv9C10YjQvdC+INC30LAg0YDQsNC30LvQuNC60LAg0L7RgiDQv9C+0LTQs9C+0YLQvtCy0LrQsNGC0LAg0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvlxuIgorItC30LAg0L7Qv9GA0LXQtNC10LvQtdC9INC60LvQvtC9LiAg0JLRgdC1INC/0LDQuiDQvNC+0LbQtdGC0LUg0LTQsCDQv9GA0L7QstC10YDQuNGC0LUg0LrQvtC4INGE0LDQudC70L7QstC1INC4INC+0YIg0LrQvtC5XG4iCisi0LrQu9C+0L0g0LIg0LzQvtC80LXQvdGC0LAg0YHQsCDQuNC30YLQtdCz0LvQtdC90Lgg0YEg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBzdGF0dXPigJwuICDQnNC+0LbQtdGC0LUg0LTQsFxuIgorItC30LDQstGK0YDRiNC40YLQtSDQuNC30YLQtdCz0LvRj9C90LXRgtC+INC90LAg0LrQu9C+0L3QsCDRgSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCByZXN0b3JlIC0tc291cmNlPUhFQUQgOi9cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAiIgorItCa0LvQvtC90YrRgiDigJ4lc+KAnCDQvtGCINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUsINC60L7QtdGC0L4g0LrQu9C+0L3QuNGA0LDRgtC1LFxuIgorItC4INC60L7QudGC0L4g0YHQu9C10LTQstCwINC00LAg0LHRitC00LUg0LjQt9GC0LXQs9C70LXQvSwg0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSAlcyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0LHQvdC+0LLQtdC9IgorCisjOiBidWlsdGluL2Nsb25lLmM6NzUzCittc2dpZCAiZmFpbGVkIHRvIGluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICLRh9Cw0YHRgtC40YfQvdC+0YLQviDQuNC30YLQtdCz0LvRj9C90LUg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQvdC40YbQuNCw0LvQuNC30LjRgNCwIgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzc2Cittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICIiCisi0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvtGCINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0YHQvtGH0Lgg0LrRitC8INC90LXRidC+LFxuIgorItC60L7QtdGC0L4g0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4gINCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfRgtC10LPQu9C4INC+0L/RgNC10LTQtdC70LXQvSDQutC70L7QvS5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwNworbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgItGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LTQs9C+0YLQstC10L3QviIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICLQvdCw0YHRgtGA0L7QudC60LjRgtC1INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LfQsNC/0LjRgdCw0L3QuCDQsiDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90LjRjyDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4INC/0LDQutC10YLQuNGA0LDQvdC1INC30LAg0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjcKK21zZ2lkICJjYW5ub3QgdW5saW5rIHRlbXBvcmFyeSBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgItCy0YDQtdC80LXQvdC90LjRj9GCINGE0LDQudC7INC30LAg0LDQu9GC0LXRgNC90LDRgtC40LLQvdC4INC+0LHQtdC60YLQuCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTY1IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgItCf0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INCw0YDQs9GD0LzQtdC90YLQuC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjkKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgItCi0YDRj9Cx0LLQsCDQtNCwINGD0LrQsNC20LXRgtC1INC60L7QtSDRhdGA0LDQvdC40LvQuNGJ0LUg0LjRgdC60LDRgtC1INC00LAg0LrQu9C+0L3QuNGA0LDRgtC1LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4MgorIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tYmFyZeKAnCDQuCDigJ4tLW9yaWdpbiAlc+KAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5ODUKK21zZ2lkICItLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpciBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1iYXJl4oCcINC4IOKAni0tc2VwYXJhdGUtZ2l0LWRpcuKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQvdC1INGB0YrRidC10YHRgtCy0YPQstCwINGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMDQgYnVpbHRpbi9mZXRjaC5jOjE3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVwdGggJXMgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICLQtNGK0LvQsdC+0YfQuNC90LDRgtCwINGC0YDRj9Cx0LLQsCDQtNCwINC1INC/0L7Qu9C+0LbQuNGC0LXQu9C90L4g0YbRj9C70L4g0YfQuNGB0LvQviwg0LAg0L3QtSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAi0YbQtdC70LXQstC40Y/RgiDQv9GK0YIg4oCeJXPigJwg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0Lgg0L3QtSDQtSDQv9GA0LDQt9C90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3b3JraW5nIHRyZWUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCyIOKAniVz4oCcINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAzOSBidWlsdGluL2Nsb25lLmM6MTA2MCBidWlsdGluL2RpZmZ0b29sLmM6MjcxCisjOiBidWlsdGluL2xvZy5jOjE4NjYgYnVpbHRpbi93b3JrdHJlZS5jOjI5NSBidWlsdGluL3dvcmt0cmVlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICLRgNC+0LTQuNGC0LXQu9GB0LrQuNGC0LUg0LTQuNGA0LXQutGC0L7RgNC40Lgg0L3QsCDigJ4lc+KAnCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINGB0YrQt9C00LDQtNC10L3QuCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgItGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INCyIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC90L4uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAi0JrQu9C+0L3QuNGA0LDQvdC1INC4INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINCz0L7Qu9C+INGF0YDQsNC90LjQu9C40YnQtSDQsiDigJ4lc+KAnOKAplxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICLQmtC70L7QvdC40YDQsNC90LUg0Lgg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC1INCyIOKAniVz4oCc4oCmXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDkwCittc2dpZCAiIgorImNsb25lIC0tcmVjdXJzaXZlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggYm90aCAtLXJlZmVyZW5jZSBhbmQgLS1yZWZlcmVuY2UtaWYtIgorImFibGUiCittc2dzdHIgIiIKKyLQntC/0YbQuNGP0YLQsCDigJ4tLXJlY3Vyc2l2ZeKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0L7Qv9GG0LjQuNGC0LUg4oCeLS1yZWZlcmVuY2XigJwg0Lgg4oCeLS1yZWZlcmVuY2UtIgorImlmLWFibGXigJwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU0Cittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyLQn9GA0Lgg0LvQvtC60LDQu9C90L4g0LrQu9C+0L3QuNGA0LDQvdC1INC+0L/RhtC40Y/RgtCwIOKAni0tZGVwdGjigJwg0YHQtSDQv9GA0LXRgdC60LDRh9CwLiAg0J/QvtC70LfQstCw0LnRgtC1INGB0YXQtdC80LDRgtCwICIKKyLigJ5maWxlOi8v4oCcLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTYKK21zZ2lkICItLXNoYWxsb3ctc2luY2UgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisi0J/RgNC4INC70L7QutCw0LvQvdC+INC60LvQvtC90LjRgNCw0L3QtSDQvtC/0YbQuNGP0YLQsCDigJ4tLXNoYWxsb3ctc2luY2XigJwg0YHQtSDQv9GA0LXRgdC60LDRh9CwLiAg0J/QvtC70LfQstCw0LnRgtC1ICIKKyLRgdGF0LXQvNCw0YLQsCDigJ5maWxlOi8v4oCcLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTgKK21zZ2lkICItLXNoYWxsb3ctZXhjbHVkZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyLQn9GA0Lgg0LvQvtC60LDQu9C90L4g0LrQu9C+0L3QuNGA0LDQvdC1INC+0L/RhtC40Y/RgtCwIOKAni0tc2hhbGxvdy1leGNsdWRl4oCcINGB0LUg0L/RgNC10YHQutCw0YfQsC4gINCf0L7Qu9C30LLQsNC50YLQtSAiCisi0YHRhdC10LzQsNGC0LAg4oCeZmlsZTovL+KAnC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTYwCittc2dpZCAiLS1maWx0ZXIgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisi0J/RgNC4INC70L7QutCw0LvQvdC+INC60LvQvtC90LjRgNCw0L3QtSDQvtC/0YbQuNGP0YLQsCDigJ4tLWZpbHRlcuKAnCDRgdC1INC/0YDQtdGB0LrQsNGH0LAuICDQn9C+0LvQt9Cy0LDQudGC0LUg0YHRhdC10LzQsNGC0LAgIgorIuKAnmZpbGU6Ly/igJwuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2MworbXNnaWQgInNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGlnbm9yaW5nIC0tbG9jYWwiCittc2dzdHIgItC60LvQvtC90LjRgNCw0L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INC1INC/0LvQuNGC0LrQviwg0LfQsNGC0L7QstCwINC+0L/RhtC40Y/RgtCwIOKAni0tbG9jYWzigJwg0YHQtSDQv9GA0LXRgdC60LDRh9CwIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2OAorbXNnaWQgIi0tbG9jYWwgaXMgaWdub3JlZCIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1sb2NhbOKAnCDRgdC1INC/0YDQtdGB0LrQsNGH0LAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQzIGJ1aWx0aW4vY2xvbmUuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW90ZSBicmFuY2ggJXMgbm90IGZvdW5kIGluIHVwc3RyZWFtICVzIgorbXNnc3RyICLQntGC0LTQsNC70LXRh9C10L3QuNGP0YIg0LrQu9C+0L0g4oCeJXPigJwg0LvQuNC/0YHQstCwINCyINC60LvQvtC90LjRgNCw0L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IOKAniVz4oCcIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI1NAorbXNnaWQgIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iCittc2dzdHIgItCY0LfQs9C70LXQttC00LAg0LrQu9C+0L3QuNGA0LDRhdGC0LUg0L/RgNCw0LfQvdC+INGF0YDQsNC90LjQu9C40YnQtS4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MTAKK21zZ2lkICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29sdW1uIFvQntCf0KbQmNCv4oCmXSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNworbXNnaWQgImxvb2t1cCBjb25maWcgdmFycyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QsNGB0YLRgNC+0LnQutC40YLQtSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyOCBidWlsdGluL2NvbHVtbi5jOjI5Cittc2dpZCAibGF5b3V0IHRvIHVzZSIKK21zZ3N0ciAi0LrQsNC6INC00LAg0YHQtSDQv9C+0LTRgNC10LTQuCDRgNC10LfRg9C70YLQsNGC0LAiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJNYXhpbXVtIHdpZHRoIgorbXNnc3RyICLQnNCw0LrRgdC40LzQsNC70L3QsCDRiNC40YDQvtGH0LjQvdCwIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMxCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIKK21zZ3N0ciAi0J/QvtC70LUg0LIg0LfQvdCw0YbQuCDQvtGC0LvRj9Cy0L4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIHJpZ2h0IGJvcmRlciIKK21zZ3N0ciAi0J/QvtC70LUg0LIg0LfQvdCw0YbQuCDQvtGC0LTRj9GB0L3QviIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMworbXNnaWQgIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIgorbXNnc3RyICLQn9C+0LvQtSDQsiDQt9C90LDRhtC4INC80LXQttC00YMg0LrQvtC70L7QvdC40YLQtSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo1MQorbXNnaWQgIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1jb21tYW5k4oCcINGC0YDRj9Cx0LLQsCDQtNCwINC1INC/0YrRgNCy0LjRj9GCINCw0YDQs9GD0LzQtdC90YIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxOAorbXNnaWQgIiIKKyJnaXQgY29tbWl0LXRyZWUgWygtcCA8cGFyZW50PikuLi5dIFstU1s8a2V5aWQ+XV0gWygtbSA8bWVzc2FnZT4pLi4uXSBbKC1GICIKKyI8ZmlsZT4pLi4uXSA8dHJlZT4iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LXRyZWUgWygtcCDQoNCe0JTQmNCi0JXQmynigKZdIFstU1vQmNCU0JXQndCi0JjQpNCY0JrQkNCi0J7QoF1dIFsoLW0g0KHQqtCe0JHQqdCV0J3QmNCVKeKApl0gWygtRiAiCisi0KTQkNCZ0Jsp4oCmXSDQlNCq0KDQktCeIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHBhcmVudCAlcyBpZ25vcmVkIgorbXNnc3RyICLQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINC/0L7QstGC0LDRgNGP0Ykg0YHQtSDRgNC+0LTQuNGC0LXQuzog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo1NiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTM2IGJ1aWx0aW4vbG9nLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDQvtCx0LXQutGCOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjkzCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0LgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZTog4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC+0YfQtdGC0LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBjbG9zZSAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDRgtCy0L7RgNC4IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICLRgNC+0LTQuNGC0LXQuyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExMgorbXNnaWQgImlkIG9mIGEgcGFyZW50IGNvbW1pdCBvYmplY3QiCittc2dzdHIgItCY0JTQldCd0KLQmNCk0JjQmtCQ0KLQntCgINC90LAg0L7QsdC10LrRgtCwINC30LAg0L/QvtC00LDQstCw0L3QtdGC0L4t0YDQvtC00LjRgtC10LsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTQgYnVpbHRpbi9jb21taXQuYzoxNTAxIGJ1aWx0aW4vbWVyZ2UuYzoyNzEKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDkgYnVpbHRpbi9ub3Rlcy5jOjU3NSBidWlsdGluL3N0YXNoLmM6MTQ3NworIzogYnVpbHRpbi90YWcuYzo0MTIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICLQodCq0J7QkdCp0JXQndCY0JUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTUgYnVpbHRpbi9jb21taXQuYzoxNTAxCittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgItCh0KrQntCR0KnQldCd0JjQlSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExOAorbXNnaWQgInJlYWQgY29tbWl0IGxvZyBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1INC+0YIg0KTQkNCZ0JsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMjEgYnVpbHRpbi9jb21taXQuYzoxNTEzIGJ1aWx0aW4vbWVyZ2UuYzoyODgKKyM6IGJ1aWx0aW4vcHVsbC5jOjE3NSBidWlsdGluL3JldmVydC5jOjExOAorbXNnaWQgIkdQRyBzaWduIGNvbW1pdCIKK21zZ3N0ciAi0L/QvtC00L/QuNGB0LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviDRgSBHUEciCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMzMKK21zZ2lkICJtdXN0IGdpdmUgZXhhY3RseSBvbmUgdHJlZSIKK21zZ3N0ciAi0YLRgNGP0LHQstCwINC00LAg0LUg0YLQvtGH0L3QviDQtdC00L3QviDQtNGK0YDQstC+IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTQwCittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0L7Rh9C10YLQtSIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MQorbXNnaWQgImdpdCBjb21taXQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgY29tbWl0IFvQntCf0KbQmNCv4oCmXSBbLS1dINCf0KrQouKApiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NgorbXNnaWQgImdpdCBzdGF0dXMgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgc3RhdHVzIFvQntCf0KbQmNCv4oCmXSBbLS1dINCf0KrQouKApiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MQorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gYW1lbmQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2VcbiIKKyJpdCBlbXB0eS4gWW91IGNhbiByZXBlYXQgeW91ciBjb21tYW5kIHdpdGggLS1hbGxvdy1lbXB0eSwgb3IgeW91IGNhblxuIgorInJlbW92ZSB0aGUgY29tbWl0IGVudGlyZWx5IHdpdGggXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKK21zZ3N0ciAiIgorItCf0L7QuNGB0LrQsNGF0YLQtSDQtNCwINC/0L7Qv9GA0LDQstC40YLQtSDQv9C+0YHQu9C10LTQvdC+0YLQviDRgdC4INC/0L7QtNCw0LLQsNC90LUuICDQotC+0LLQsCDQtNC10LnRgdGC0LLQuNC1INGJ0LUg0L/RgNC10LLRitGA0L3QtVxuIgorItC/0L7QtNCw0LLQsNC90LXRgtC+INCyINC/0YDQsNC30L3Qvi4gINCc0L7QttC10YLQtSDQuNC70Lgg0LTQsCDQs9C+INC/0L7QstGC0L7RgNC40YLQtSDQutCw0YLQviDRgNCw0LfRgNC10YjQuNGC0LUg0YLQsNC60LjQstCwICIKKyLQv9C+0LTQsNCy0LDQvdC40Y9cbiIKKyLRgSDQvtC/0YbQuNGP0YLQsCDigJ4tLWFsbG93LWVtcHR54oCcLCDQuNC70Lgg0LTQsCDQs9C+INC40LfRgtGA0LjQtdGC0LUg0L7RgiDQuNGB0YLQvtGA0LjRj9GC0LAg0YEg0LrQvtC80LDQvdC00LDRgtCwOlxuIgorIuKAnmdpdCByZXNldCBIRUFEXuKAnC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisi0J/RgNC10LTQuNGI0L3QvtGC0L4g0L7RgtCx0YDQsNC90L4g0L/QvtC00LDQstCw0L3QtSDQstC10YfQtSDQtSDQv9GA0LDQt9C90L4sINC60LDRgtC+INC90LDQuS3QstC10YDQvtGP0YLQvdCw0YLQsCDQv9GA0LjRh9C40L3QsCDQtVxuIgorItC60L7RgNC10LrRhtC40Y8g0L3QsCDQutC+0L3RhNC70LjQutGCLiAg0JDQutC+INCy0YHQtSDQv9Cw0Log0LjRgdC60LDRgtC1INC00LAg0LPQviDQv9C+0LvQt9Cy0LDRgtC1LCDQuNC30L/QvtC70LfQstCw0LnRgtC1ICIKKyLQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzCittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgY2hlcnJ5LXBpY2sgLS1za2lwJ1xuIgorbXNnc3RyICIiCisi0JIg0L/RgNC+0YLQuNCy0LXQvSDRgdC70YPRh9Cw0Lkg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLXNraXBcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NgorbXNnaWQgIiIKKyJhbmQgdGhlbiB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCisiXG4iCisidG8gcmVzdW1lIGNoZXJyeS1waWNraW5nIHRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLXNraXBcbiIKKyJcbiIKK21zZ3N0ciAiIgorItGB0LvQtdC0INGC0L7QstCwINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcbiIKKyJcbiIKKyLQuCDRidC1INC/0YDQvtC00YrQu9C20LjRgtC1INC00LAg0L7RgtCx0LjRgNCw0YLQtSDQvtGB0YLQsNC90LDQu9C40YLQtSDQv9C+0LTQsNCy0LDQvdC40Y8uXG4iCisi0JfQsCDQtNCwINC/0YDQtdGB0LrQvtGH0LjRgtC1INGC0L7QstCwINC/0L7QtNCw0LLQsNC90LUsINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMxNQorbXNnaWQgImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIKK21zZ3N0ciAi0LLRitGA0YXQvtCy0L7RgtC+INC00YrRgNCy0L4gKEhFQUQgdHJlZSBvYmplY3QpINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30LLQsNC00LXQvdC+INC+0YIg0L/QsNC60LXRgiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNTEKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni1h4oCcINC4IOKAni0tcGF0aHNwZWMtZnJvbS1maWxl4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2NAorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAi0J7Qv9GG0LjQuNGC0LUg4oCeLS1pbmNsdWRl4oCcINC4IOKAni0tb25seeKAnCDQuNC30LjRgdC60LLQsNGCINCw0YDQs9GD0LzQtdC90YLQuC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzc2Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgItCy0YDQtdC80LXQvdC90LjRj9GCINC40L3QtNC10LrRgSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvSIKKworIzogYnVpbHRpbi9jb21taXQuYzozODUKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+INC00L7QsdCw0LLRj9C90LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDAwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgItCy0YDQtdC80LXQvdC90LjRj9GCINC40L3QtNC10LrRgSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7QsdC90L7QstC10L0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDAyCittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSBtYWluIGNhY2hlIHRyZWUiCittc2dzdHIgItCU0YrRgNCy0L7RgtC+INC90LAg0L7RgdC90L7QstC90LjRjyDQutC10Ygg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0LHQvdC+0LLQtdC90L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDI3IGJ1aWx0aW4vY29tbWl0LmM6NDUwIGJ1aWx0aW4vY29tbWl0LmM6NDk2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICLQvdC+0LLQuNGP0YIg0LjQvdC00LXQutGBINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvSIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzkKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgItC/0L4g0LLRgNC10LzQtSDQvdCwINGB0LvQuNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4INGH0LDRgdGC0LjRh9C90L4g0L/QvtC00LDQstCw0L3QtS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDgxCittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICLQv9C+INCy0YDQtdC80LUg0L3QsCDQvtGC0LHQuNGA0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4INGH0LDRgdGC0LjRh9C90L4g0L/QvtC00LDQstCw0L3QtS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDg5Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICLQuNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUwOAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAi0LLRgNC10LzQtdC90L3QuNGP0YIg0LjQvdC00LXQutGBINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgbGFja3MgYXV0aG9yIGhlYWRlciIKK21zZ3N0ciAi0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg0LfQsCDQsNCy0YLQvtGAINCyINC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC70LjQv9GB0LLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAi0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg0LfQsCDQsNCy0YLQvtGAINCyINC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC1INC90LXQv9GA0LDQstC40LvQvdCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYyNworbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC/0LDRgNCw0LzQtdGC0YrRgCDQutGK0Lwg0L7Qv9GG0LjRj9GC0LAg4oCeLS1hdXRob3LigJwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjgwCittc2dpZCAiIgorInVuYWJsZSB0byBzZWxlY3QgYSBjb21tZW50IGNoYXJhY3RlciB0aGF0IGlzIG5vdCB1c2VkXG4iCisiaW4gdGhlIGN1cnJlbnQgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyLQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30LHQtdGA0LUg0LfQvdCw0Log0LfQsCDQutC+0LzQtdC90YLQsNGAIOKAlCDQsiDRgtC10LrRg9GJ0L7RgtC+INGB0YrQvtCx0YnQtdC90LjQtSDQt9CwINC/0L7QtNCw0LLQsNC90LUg0YHQsCAiCisi0LjQt9C/0L7Qu9C30LLQsNC90Lgg0LLRgdC40YfQutC4INC/0L7QtNC+0LHQvdC4INC30L3QsNGG0LgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzE4IGJ1aWx0aW4vY29tbWl0LmM6NzUxIGJ1aWx0aW4vY29tbWl0LmM6MTA5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAi0YHQu9C10LTQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQvjogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMwIGJ1aWx0aW4vc2hvcnRsb2cuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIKK21zZ3N0ciAiKNC40LfRh9C40YLQsNC90LUg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSDQvtGCINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQpXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMyCittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1INC90LUg0LHQtSDQv9GA0L7Rh9C10YLQtdC90L4g0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAi0YTQsNC50LvRitGCINGB0YrRgSDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NjcgYnVpbHRpbi9jb21taXQuYzo3ODMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIgorbXNnc3RyICLRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0LLQutCw0YDQstCw0L3QtSBTUVVBU0hfTVNHINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC90L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzc0Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICLRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0YHQu9C40LLQsNC90LUgTUVSR0VfTVNHINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC90L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODM0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAi0YjQsNCx0LvQvtC90YrRgiDQt9CwINC/0L7QtNCw0LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC9IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQmNC30LPQu9C10LbQtNCwLCDRh9C1INC/0L7QtNCw0LLQsNGC0LUg0YHQu9C40LLQsNC90LUuICDQkNC60L4g0YLQvtCy0LAg0L3QtSDQtSDRgtCw0LrQsCwg0LjQt9GC0YDQuNC50YLQtSDRhNCw0LnQu9CwOlxuIgorIlxuIgorIiAgICAlc1xuIgorItC4INC+0L/QuNGC0LDQudGC0LUg0L7RgtC90L7QstC+LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQmNC30LPQu9C10LbQtNCwLCDRh9C1INC40LfQstGK0YDRiNCy0LDRgtC1INC+0YLQsdGA0LDQvdC+INC/0L7QtNCw0LLQsNC90LUuICDQkNC60L4g0YLQvtCy0LAg0L3QtSDQtSDRgtCw0LrQsCwg0LjQt9GC0YDQuNC50YLQtSAiCisi0YTQsNC50LvQsDpcbiIKKyJcbiIKKyIgICAgJXNcbiIKKyLQuCDQvtC/0LjRgtCw0LnRgtC1INC+0YLQvdC+0LLQvi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorItCS0YrQstC10LTQtdGC0LUg0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUuICDQoNC10LTQvtCy0LXRgtC1LCDQutC+0LjRgtC+INC30LDQv9C+0YfQstCw0YJcbiIKKyLRgSDigJ4lY+KAnCwg0YnQtSDQsdGK0LTQsNGCINC/0YDQvtC/0YPRgdC90LDRgtC4LCDQsCDQv9GA0LDQt9C90L4g0YHRitC+0LHRidC10L3QuNC1INC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCwINC/0L7QtNCw0LLQsNC90LXRgtC+LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorItCS0YrQstC10LTQtdGC0LUg0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUuICDQoNC10LTQvtCy0LXRgtC1LCDQutC+0LjRgtC+INC30LDQv9C+0YfQstCw0YJcbiIKKyLRgSDigJ4lY+KAnCwg0YHRitGJ0L4g0YnQtSDQsdGK0LTQsNGCINCy0LrQu9GO0YfQtdC90Lgg4oCUINC80L7QttC1INC00LAg0LPQuCDQuNC30YLRgNC40LXRgtC1INCy0LjQtS4gINCf0YDQsNC30L3QviBcbiIKKyLRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LAg0L/QvtC00LDQstCw0L3QtdGC0L4uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPQkNCy0YLQvtGAOiAgICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlc0RhdGU6ICAgICAgJXMiCittc2dzdHIgIiVz0JTQsNGC0LA6ICAgICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCittc2dzdHIgIiVz0J/QvtC00LDQstCw0Yk6ICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkyOQorbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICLQmNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5NworbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC40LfQs9GA0LDQttC00LDQvdC1INC90LAg0LTRitGA0LLQtdGC0LDRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMTEgYnVpbHRpbi90YWcuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICLQn9C+0LTQsNC50YLQtSDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INGBINC90Y/QutC+0Y8g0L7RgiDQvtC/0YbQuNC40YLQtSDigJ4tbeKAnCDQuNC70Lgg4oCeLUbigJwuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIiIKKyLQntC/0YbQuNGP0YLQsCDigJ4tLWF1dGhvciAnJXMn4oCcINC90LUg0L7RgtCz0L7QstCw0YDRjyDQvdCwINGE0L7RgNC80LDMgNGC0LAg4oCe0JjQvNC1IDzQtS3Qv9C+0YnQsD7igJwg0Lgg0L3QtSDRgdGK0LLQv9Cw0LTQsCDRgSAiCisi0L3QuNC60L7QuSDQsNCy0YLQvtGAIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpZ25vcmVkIG1vZGUgJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0YDQtdC20LjQvCDQt9CwINC40LPQvdC+0YDQuNGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtTog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA4NyBidWlsdGluL2NvbW1pdC5jOjEzMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSDRgNC10LbQuNC8INC30LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtTog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEyNworbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAi0J7Qv9GG0LjQuNGC0LUg4oCeLS1sb25n4oCcINC4IOKAni164oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4LiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTcxCittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi0J7Qv9GG0LjQuNGC0LUg4oCeLS1yZXNldC1hdXRob3LigJwg0Lgg4oCeLS1hdXRob3LigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LguIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODAKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAi0J3Rj9C80LAg0LrQsNC60LLQviDQtNCwINCx0YrQtNC1INC/0L7Qv9GA0LDQstC10L3Qvi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MworbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDRgdC70LjQstCw0L3QtSwg0L3QtSDQvNC+0LbQtdGC0LUg0LTQsCDQv9C+0L/RgNCw0LLRj9GC0LUuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODUKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDRgdC1INC40LfQstGK0YDRiNCy0LAg0L7RgtCx0LjRgNCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUsINC90LUg0LzQvtC20LXRgtC1INC00LAg0L/QvtC/0YDQsNCy0Y/RgtC1LiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTg4Cittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAi0J7Qv9GG0LjQuNGC0LUg4oCeLS1zcXVhc2jigJwg0Lgg4oCeLS1maXh1cOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5OAorbXNnaWQgIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tY+KAnCwg4oCeLUPigJwsIOKAni1G4oCcINC4IOKAni0tZml4dXDigJzigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LguIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDAKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYuIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4tbeKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg4oCeLWPigJwsIOKAni1D4oCcINC4IOKAni1G4oCcLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjA4Cittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiIgorItCe0L/RhtC40Y/RgtCwIOKAni0tcmVzZXQtYXV0aG9y4oCcINC80L7QttC1INC00LAg0YHQtSDQuNC30L/QvtC70LfQstCwINGB0LDQvNC+INC30LDQtdC00L3QviDRgSDigJ4tQ+KAnCwg4oCeLWPigJwg0LjQu9C4XG4iCisi4oCeLS1hbWVuZOKAnC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyNQorbXNnaWQgIk9ubHkgb25lIG9mIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiIgorItCe0L/RhtC40LjRgtC1IOKAni0taW5jbHVkZeKAnCwg4oCeLS1vbmx54oCcLCDigJ4tLWFsbOKAnCwg4oCeLS1pbnRlcmFjdGl2ZeKAnCDQuCDigJ4tLXBhdGNo4oCcINGB0LBcbiIKKyLQvdC10YHRitCy0LzQtdGB0YLQuNC80LguIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHMgJyVzIC4uLicgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tYeKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YHRitGBINC30LDQtNCw0LLQsNC90LXRgtC+INC90LAg0L/RitGC0LjRidCwOiDigJ4lc+KApuKAnCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYyIGJ1aWx0aW4vY29tbWl0LmM6MTUyNAorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAi0LrRgNCw0YLQutCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY0IGJ1aWx0aW4vY29tbWl0LmM6MTUyNgorbXNnaWQgInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIgorbXNnc3RyICLQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC60LvQvtC90LjRgtC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjYKK21zZ2lkICJzaG93IHN0YXNoIGluZm9ybWF0aW9uIgorbXNnc3RyICLQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINGB0LrQsNGC0LDQvdC+0YLQviIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY4IGJ1aWx0aW4vY29tbWl0LmM6MTUyOAorbXNnaWQgImNvbXB1dGUgZnVsbCBhaGVhZC9iZWhpbmQgdmFsdWVzIgorbXNnc3RyICLQuNC30YfQuNGB0LvRj9Cy0LDQvdC1INC90LAg0YLQvtGH0L3QuNGC0LUg0YHRgtC+0LnQvdC+0YHRgtC4INC90LDQv9GA0LXQtC/QvdCw0LfQsNC0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzAKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICLQstC10YDRgdC40Y8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MCBidWlsdGluL2NvbW1pdC5jOjE1MzAgYnVpbHRpbi9wdXNoLmM6NTQ5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjQzCittc2dpZCAibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiCittc2dzdHIgItGE0L7RgNC80LDRgiDQvdCwINC40LfRhdC+0LTQsCDQt9CwINGH0LXRgtC10L3QtSDQvtGCINC/0YDQvtCz0YDQsNC80LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MyBidWlsdGluL2NvbW1pdC5jOjE1MzIKK21zZ2lkICJzaG93IHN0YXR1cyBpbiBsb25nIGZvcm1hdCAoZGVmYXVsdCkiCittc2dzdHIgItC/0L7QtNGA0L7QsdC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+ICjRgdGC0LDQvdC00LDRgNGC0L3QvikiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3NiBidWlsdGluL2NvbW1pdC5jOjE1MzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAi0YDQsNC30LTQtdC70Y/QvdC1INC90LAg0LXQu9C10LzQtdC90YLQuNGC0LUg0YEg0L3Rg9C70LXQstC40Y8g0LfQvdCw0Log4oCeTlVM4oCcIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzggYnVpbHRpbi9jb21taXQuYzoxMzgyIGJ1aWx0aW4vY29tbWl0LmM6MTUzOAorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTMgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTYKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU5IGJ1aWx0aW4vcmViYXNlLmM6MTU2OSBwYXJzZS1vcHRpb25zLmg6MzM2Cittc2dpZCAibW9kZSIKK21zZ3N0ciAi0KDQldCW0JjQnCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc5IGJ1aWx0aW4vY29tbWl0LmM6MTUzOAorbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUuICDQktGK0LfQvNC+0LbQvdC40YLQtSDQoNCV0JbQmNCc0Lgg0YHQsCDigJ5hbGzigJwgKNC/0L7QtNGA0L7QsdC90LAgIgorItC40L3RhNC+0YDQvNCw0YbQuNGPKSwg4oCebm9ybWFs4oCcICjQutGA0LDRgtC60LAg0LjQvdGE0L7RgNC80LDRhtC40Y8pLCDigJ5ub+KAnCAo0LHQtdC3INC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUpLiAgIgorItCh0YLQsNC90LTQsNGA0YLQvdC40Y/RgiDQoNCV0JbQmNCcINC1OiDigJ5hbGzigJwuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODMKK21zZ2lkICIiCisic2hvdyBpZ25vcmVkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogdHJhZGl0aW9uYWwsIG1hdGNoaW5nLCBuby4gKERlZmF1bHQ6ICIKKyJ0cmFkaXRpb25hbCkiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNCz0L3QvtGA0LjRgNCw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUuICDQktGK0LfQvNC+0LbQvdC40YLQtSDQoNCV0JbQmNCc0Lgg0YHQsCAiCisi4oCedHJhZGl0aW9uYWzigJwgKNGC0YDQsNC00LjRhtC40L7QvdC10L0pLCDigJ5tYXRjaGluZ+KAnCAo0L3QsNC/0LDRgdCy0LDRidC4KSwg4oCebm/igJwgKNCx0LXQtyDQuNCz0L3QvtGA0LjRgNCw0L3QuNGC0LUgIgorItGE0LDQudC70L7QstC1KS4gINCh0YLQsNC90LTQsNGA0YLQvdC40Y/RgiDQoNCV0JbQmNCcINC1OiDigJ50cmFkaXRpb25hbOKAnC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4NSBwYXJzZS1vcHRpb25zLmg6MTkyCittc2dpZCAid2hlbiIKK21zZ3N0ciAi0JrQntCT0JAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4NgorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorItC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INCyINC/0L7QtNC80L7QtNGD0LvQuNGC0LUuICDQntC/0YbQuNGPINGBINC90LXQt9Cw0LTRitC70LbQuNGC0LXQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDigJQgIgorItC10LTQvdCwINC+0YIg4oCeYWxs4oCcICjQstGB0LjRh9C60LgpLCDigJ5kaXJ0eeKAnCAo0YLQtdC30Lgg0YEg0L3QtdC/0L7QtNCw0LTQtdC90Lgg0L/RgNC+0LzQtdC90LgpLCAiCisi4oCedW50cmFja2Vk4oCcICjQvdC10YHQu9C10LTQtdC90LgpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODgKK21zZ2lkICJsaXN0IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1INCyINC60L7Qu9C+0L3QuCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg5Cittc2dpZCAiZG8gbm90IGRldGVjdCByZW5hbWVzIgorbXNnc3RyICLQsdC10Lcg0LfQsNGB0LjRh9Cw0L3QtSDQvdCwINC/0YDQtdC40LzQtdC90YPQstCw0L3QuNGP0YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzkxCittc2dpZCAiZGV0ZWN0IHJlbmFtZXMsIG9wdGlvbmFsbHkgc2V0IHNpbWlsYXJpdHkgaW5kZXgiCittc2dzdHIgItC30LDRgdC40YfQsNC90LUg0L3QsCDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LjRj9GC0LAsINC80L7QttC1INC00LAg0YHQtSDQt9Cw0LTQsNC00LUg0LrQvtC10YTQuNGG0LjQtdC90YIg0L3QsCDQv9GA0LjQu9C40LrQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDExCittc2dpZCAiVW5zdXBwb3J0ZWQgY29tYmluYXRpb24gb2YgaWdub3JlZCBhbmQgdW50cmFja2VkLWZpbGVzIGFyZ3VtZW50cyIKK21zZ3N0ciAi0J3QtdC/0L7QtNC00YrRgNC20LDQvdCwINC60L7QvNCx0LjQvdCw0YbQuNGPINC+0YIg0LDRgNCz0YPQvNC10L3RgtC4INC30LAg0LjQs9C90L7RgNC40YDQsNC90Lgg0Lgg0L3QtdGB0LvQtdC00LXQvdC4INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTQKK21zZ2lkICJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IgorbXNnc3RyICLQsdC10Lcg0LjQvdGE0L7RgNC80LDRhtC40Y8g0YHQu9C10LQg0YPRgdC/0LXRiNC90L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1Cittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0YDQsNC30LvQuNC60LDRgtCwINC60YrQvCDRiNCw0LHQu9C+0L3QsCDQt9CwINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0L/RgNC4INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NworbXNnaWQgIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiCittc2dzdHIgItCe0L/RhtC40Lgg0LfQsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTggYnVpbHRpbi9tZXJnZS5jOjI3NSBidWlsdGluL3RhZy5jOjQxNAorbXNnaWQgInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgItCy0LfQuNC80LDQvdC1INC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQvtGCINCk0JDQmdCbIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTkKK21zZ2lkICJhdXRob3IiCittc2dzdHIgItCQ0JLQotCe0KAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvdC1INC90LAg0JDQktCi0J7QoCDQt9CwINC/0L7QtNCw0LLQsNC90LXRgtC+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAgYnVpbHRpbi9nYy5jOjUzOAorbXNnaWQgImRhdGUiCittc2dzdHIgItCU0JDQotCQIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgItC30LDQtNCw0LLQsNC90LUg0L3QsCDQlNCQ0KLQkCDQt9CwINC/0L7QtNCw0LLQsNC90LXRgtC+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDIgYnVpbHRpbi9jb21taXQuYzoxNTAzIGJ1aWx0aW4vY29tbWl0LmM6MTUwNAorIzogYnVpbHRpbi9jb21taXQuYzoxNTA1IHBhcnNlLW9wdGlvbnMuaDozMjggcmVmLWZpbHRlci5oOjkyCittc2dpZCAiY29tbWl0IgorbXNnc3RyICLQn9Ce0JTQkNCS0JDQndCVIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi0L/RgNC10LjQt9C/0L7Qu9C30LLQsNC90LUg0Lgg0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0L7RgiDRg9C60LDQt9Cw0L3QvtGC0L4g0J/QntCU0JDQktCQ0J3QlSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAzCittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgItC/0YDQtdC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQvtGCINGD0LrQsNC30LDQvdC+0YLQviDQn9Ce0JTQkNCS0JDQndCVIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDQKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQsNCy0YLQvtC80LDRgtC40YfQvdC+0YLQviDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQstC60LDRgNCy0LDQvdC1INC90LAg0YPQutCw0LfQsNC90L7RgtC+INCf0J7QlNCQ0JLQkNCd0JUg0LIgIgorItC/0YDQtdC00YXQvtC00L3QvtGC0L4g0LHQtdC3INGB0LvQtdC00LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNQorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQsNCy0YLQvtC80LDRgtC40YfQvdC+0YLQviDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQstC60LDRgNCy0LDQvdC1INC90LAg0YPQutCw0LfQsNC90L7RgtC+INCf0J7QlNCQ0JLQkNCd0JUg0LIgIgorItC/0YDQtdC00L3QvtGC0L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNgorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgIiIKKyLRgdC80Y/QvdCwINC90LAg0LDQstGC0L7RgNCwINC00LAg0YHRitCy0L/QsNC00LAg0YEg0L/QvtC00LDQstCw0YnQuNGPICjQuNC30L/QvtC70LfQstCwINGB0LUg0YEg4oCeLUPigJwv4oCeLWPigJwv4oCeLS1hbWVuZOKAnCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNyBidWlsdGluL2xvZy5jOjE2MzQgYnVpbHRpbi9tZXJnZS5jOjI5MAorIzogYnVpbHRpbi9wdWxsLmM6MTQ0IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEwCittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L/QvtC70LUg0LfQsCDQv9C+0LTQv9C40YEg4oCUIOKAnlNpZ25lZC1vZmYtYnk64oCcIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDgKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YPQutCw0LfQsNC90LjRjyDRiNCw0LHQu9C+0L3QtdC9INCk0JDQmdCbIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDkKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAi0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMQorbXNnaWQgImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICLQstC80YrQutCy0LDQvdC1INC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQsiDRiNCw0LHQu9C+0L3QsCDQt9CwINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0L/RgNC4INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNgorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICLQntC/0YbQuNC4INC30LAg0LjQt9Cx0L7RgCDQvdCwINGE0LDQudC70L7QstC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTcKK21zZ2lkICJjb21taXQgYWxsIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0L/RgNC+0LzQtdC90LXQvdC4INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTgKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDRg9C60LDQt9Cw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0LrRitC8INC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE5Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgZmlsZXMiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QviDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMAorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QviDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L/RgNC+0LzQtdC90LgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMQorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtSDRgdCw0LzQviDQvdCwINGD0LrQsNC30LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIyCittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgIiIKKyLQsdC10Lcg0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutGD0LrQuNGC0LUg0L/RgNC10LTQuCDQv9C+0LTQsNCy0LDQvdC1INC4INC/0YDQuCDQv9GA0L7QvNGP0L3QsCDQvdCwINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCAiCisi0L/QvtC00LDQstCw0L3QtSAocHJlLWNvbW1pdCDQuCBjb21taXQtbXNnKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIzCittc2dpZCAic2hvdyB3aGF0IHdvdWxkIGJlIGNvbW1pdHRlZCIKK21zZ3N0ciAi0L7RgtC/0LXRh9Cw0YLQstCw0L3QtSDQvdCwINGC0L7QstCwLCDQutC+0LXRgtC+INCx0Lgg0LHQuNC70L4g0L/QvtC00LDQtNC10L3QviIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM2Cittc2dpZCAiYW1lbmQgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICLQv9C+0L/RgNCw0LLRj9C90LUg0L3QsCDQv9GA0LXQtNC40YjQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzcKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgItCx0LXQtyDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60YPQutCw0YLQsCDRgdC70LXQtCDQv9GA0LXQt9Cw0L/QuNGB0LLQsNC90LUgKHBvc3QtcmV3cml0ZSkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU0NAorbXNnaWQgIm9rIHRvIHJlY29yZCBhbiBlbXB0eSBjaGFuZ2UiCittc2dzdHIgItC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDQv9GA0LDQt9C90Lgg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NDYKK21zZ2lkICJvayB0byByZWNvcmQgYSBjaGFuZ2Ugd2l0aCBhbiBlbXB0eSBtZXNzYWdlIgorbXNnc3RyICLQv9C+0LfQstC+0LvRj9Cy0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGPINGBINC/0YDQsNC30L3QuCDRgdGK0L7QsdGJ0LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICLQn9C+0LLRgNC10LTQtdC9INGE0LDQudC7INC30LAg0LLRitGA0YXQsCDQt9CwINGB0LvQuNCy0LDQvdC10YLQviDigJ5NRVJHRV9IRUFE4oCcICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYyNgorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgItGA0LXQttC40LzRitGCINC90LAg0YHQu9C40LLQsNC90LUg4oCeTUVSR0VfTU9EReKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAi0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L3QvjogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICLQndC10LjQt9Cy0YrRgNGI0LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC1INC/0L7RgNCw0LTQuCDQv9GA0LDQt9C90L4g0YHRitC+0LHRidC10L3QuNC1LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICLQndC10LjQt9Cy0YrRgNGI0LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC1INC/0L7RgNCw0LTQuCDQvdC10YDQtdC00LDQutGC0LjRgNCw0L3QviDRgdGK0L7QsdGJ0LXQvdC40LUuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY5MQorbXNnaWQgIiIKKyJyZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisi0YXRgNCw0L3QuNC70LjRidC10YLQviDQtSDQvtCx0L3QvtCy0LXQvdC+LCDQvdC+INC90L7QstC40Y/RgiDRhNCw0LnQuyDQt9CwINC40L3QtNC10LrRgSDigJ5uZXdfaW5kZXjigJxcbiIKKyLQvdC1INC1INC30LDQv9C40YHQsNC9LiAg0J/RgNC+0LLQtdGA0LXRgtC1INC00LDQu9C4INC00LjRgdC60YrRgiDQvdC1INC1INC/0YDQtdC/0YrQu9C90LXQvSDQuNC70Lgg0L3QtSDRgdGC0LVcbiIKKyLQv9GA0LXQstC40YjQuNC70Lgg0LTQuNGB0LrQvtCy0LDRgtCwINGB0Lgg0LrQstC+0YLQsC4gINCX0LAg0LLRitC30YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQuNC30L/RitC70L3QtdGC0LU6XG4iCisiXG4iCisiICAgIGdpdCByZXN0b3JlIC0tc3RhZ2VkIDovIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTcKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyINCU0JjQoF/QntCR0JXQmtCi0JhdIFstLXNoYWxsb3ddIFstLSIKKyJbbm8tXXByb2dyZXNzXSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIyCittc2dpZCAiIgorImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tYXBwZW5kfC0tc3BsaXRdIFstLSIKKyJyZWFjaGFibGV8LS1zdGRpbi1wYWNrc3wtLXN0ZGluLWNvbW1pdHNdIFstLVtuby1dcHJvZ3Jlc3NdIDxzcGxpdCBvcHRpb25zPiIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciDQlNCY0KBf0J7QkdCV0JrQotCYXSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10g0J7Qn9Cm0JjQmF/Ql9CQX9Cg0JDQl9CU0JXQm9Cv0J3QlSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBvYmplY3QgZGlyZWN0b3J5IG1hdGNoaW5nICVzIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0YEg0L7QsdC10LrRgtC4LCDQutC+0Y/RgtC+INC+0YLQs9C+0LLQsNGA0Y8g0L3QsCDigJ4lc+KAnCwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjY4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTI1CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIxMCBidWlsdGluL2ZldGNoLmM6MTc5IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgImRpciIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NjkgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMjYKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjExCittc2dpZCAiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIgorbXNnc3RyICLQlNCY0KDQtdC60YLQvtGA0LjRj9GC0LBf0YFf0J7QkdCV0JrQotCYINC30LAg0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LPRgNCwzIDRhNCwIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjcxCittc2dpZCAiaWYgdGhlIGNvbW1pdC1ncmFwaCBpcyBzcGxpdCwgb25seSB2ZXJpZnkgdGhlIHRpcCBmaWxlIgorbXNnc3RyICIiCisi0LDQutC+INCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC1INGA0LDQt9C00YDQvtCx0LXQvSwg0LTQsCDRgdC1INC/0YDQvtCy0LXRgNGP0LLQsCDRgdCw0LzQviDRhNCw0LnQu9GK0YIg0L3QsCDQstGK0YDRhdCwIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjk0IHQvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGNvbW1pdC1ncmFwaCAnJXMnIgorbXNnc3RyICLQk9GA0LDRhNGK0YIg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lg6IOKAniVz4oCcIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyOAorbXNnaWQgInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiCittc2dzdHIgItC+0LHRhdC+0LbQtNCw0L3QtdGC0L4g0LTQsCDQt9Cw0L/QvtGH0L3QtSDQvtGCINCy0YHQuNGH0LrQuCDRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTMwCittc2dpZCAic2NhbiBwYWNrLWluZGV4ZXMgbGlzdGVkIGJ5IHN0ZGluIGZvciBjb21taXRzIgorbXNnc3RyICIiCisi0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LfQsCDQuNC90LTQtdC60YHQuNGC0LUg0L3QsCDQv9Cw0LrQtdGC0LjRgtC1INC40LfQsdGA0L7QtdC90Lgg0L3QsCDQutC+0LzQsNC90LTQvdC40Y8g0YDQtdC0IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzMgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgItC30LDQv9C+0YfQstCw0L3QtSDQvdCwINC+0LHRhdC+0LbQtNCw0L3QtdGC0L4g0L/RgNC4INC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0L/QvtC00LDQtNC10L3QuCDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM0Cittc2dpZCAiaW5jbHVkZSBhbGwgY29tbWl0cyBhbHJlYWR5IGluIHRoZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiIgorItCy0LrQu9GO0YfQstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQv9C+0LTQsNCy0LDQvdC40Y8sINC60L7QuNGC0L4g0LLQtdGH0LUg0YHQsCDQstGK0LIg0YTQsNC50LvQsCDRgSDQs9GA0LDMgNGE0LAg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNworbXNnaWQgImFsbG93IHdyaXRpbmcgYW4gaW5jcmVtZW50YWwgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgItC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDQt9Cw0L/QuNGBINC90LAg0L3QsNGA0LDRgdGC0LLQsNGJINGE0LDQudC7INGBINCz0YDQsMyA0YTQsCDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTQzCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9C10L0g0LHRgNC+0Lkg0L/QvtC00LDQstCw0L3QuNGPINCyINC90LXQsdCw0LfQvtCy0L4g0L3QuNCy0L4g0L3QsCDRgNCw0LfQtNGA0L7QsdC10L0g0LPRgNCw0YQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTQxCittc2dpZCAibWF4aW11bSByYXRpbyBiZXR3ZWVuIHR3byBsZXZlbHMgb2YgYSBzcGxpdCBjb21taXQtZ3JhcGgiCittc2dzdHIgIiIKKyLQvNCw0LrRgdC40LzQsNC70L3QviDQvtGC0L3QvtGI0LXQvdC40LUg0L3QsCDQsdGA0L7RjyDQv9C+0LTQsNCy0LDQvdC40Y8g0LIg0LTQstC1INC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9C90Lgg0L3QuNCy0LAg0LIg0YDQsNC30LTRgNC+0LHQtdC9ICIKKyLQs9GA0LDRhCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNTkKK21zZ2lkICJ1c2UgYXQgbW9zdCBvbmUgb2YgLS1yZWFjaGFibGUsIC0tc3RkaW4tY29tbWl0cywgb3IgLS1zdGRpbi1wYWNrcyIKK21zZ3N0ciAiIgorItC+0L/RhtC40LjRgtC1IOKAni0tcmVhY2hhYmxl4oCcLCDigJ4tLXN0ZGluLWNvbW1pdHPigJwg0Lgg4oCeLS1zdGRpbi1wYWNrc+KAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMQorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb25maWcgW9Ce0J/QptCY0K/igKZdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEwNCBidWlsdGluL2Vudi0taGVscGVyLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIC0tdHlwZSBhcmd1bWVudCwgJXMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIg0LDRgNCz0YPQvNC10L3RgiDigJ4tLXR5cGXigJw6ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExNgorbXNnaWQgIm9ubHkgb25lIHR5cGUgYXQgYSB0aW1lIgorbXNnc3RyICLRgdCw0LzQviDQv9C+INC10LTQuNC9INCy0LjQtCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjUKK21zZ2lkICJDb25maWcgZmlsZSBsb2NhdGlvbiIKK21zZ3N0ciAi0JzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtSDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QuNGPINGE0LDQudC7IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNgorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LPQu9C+0LHQsNC70L3QuNGPINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjcKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGB0LjRgdGC0LXQvNC90LjRjyDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC10L0g0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI4Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y8g0YTQsNC50Lsg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOQorbXNnaWQgInVzZSBwZXItd29ya3RyZWUgY29uZmlnIGZpbGUiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y8g0YTQsNC50Lsg0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LrQvtC/0LjQtSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LfQsNC00LDQtNC10L3QuNGPINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LXQvSDQpNCQ0JnQmyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzEKK21zZ2lkICJibG9iLWlkIgorbXNnc3RyICLQmNCU0JXQndCi0JjQpNCY0JrQkNCi0J7QoCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzEKK21zZ2lkICJyZWFkIGNvbmZpZyBmcm9tIGdpdmVuIGJsb2Igb2JqZWN0IgorbXNnc3RyICIiCisi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRj9GC0LAg0L7RgiBCTE9CINGBINGC0L7Qt9C4INCY0JTQldCd0KLQmNCk0JjQmtCQ0KLQntCgINC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMgorbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAi0JTQtdC50YHRgtCy0LjQtSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzMKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRgtC+0LnQvdC+0YHRgjog0JjQnNCVIFvQoNCV0JPQo9Cb0K/QoNCV0J1f0JjQl9Cg0JDQl1/Ql9CQX9Ch0KLQntCZ0J3QntCh0KLQotCQXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzQKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDRgdGC0L7QudC90L7RgdGC0Lg6INC60LvRjtGHIFvQoNCV0JPQo9Cb0K/QoNCV0J1f0JjQl9Cg0JDQl1/Ql9CQX9Ch0KLQntCZ0J3QntCh0KLQotCQXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzUKK21zZ2lkICJnZXQgdmFsdWVzIGZvciByZWdleHA6IG5hbWUtcmVnZXggW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YLQvtC50L3QvtGB0YLQuNGC0LUg0LfQsCDQoNCV0JPQo9Cb0K/QoNCd0LjRj1/QmNCX0KDQkNCXOiDQoNCV0JPQo9Cb0K/QoNCV0J1f0JjQl9Cg0JDQl1/Ql9CQX9CY0JzQldCi0J4gIgorIlvQoNCV0JPQo9Cb0K/QoNCV0J1f0JjQl9Cg0JDQl1/Ql9CQX9Ch0KLQntCZ0J3QntCh0KLQotCQXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzYKK21zZ2lkICJnZXQgdmFsdWUgc3BlY2lmaWMgZm9yIHRoZSBVUkw6IHNlY3Rpb25bLnZhcl0gVVJMIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0L7QudC90L7RgdGC0YLQsCDQt9CwINGD0LrQsNC30LDQvdC40Y8g0LDQtNGA0LXRgTog0KDQkNCX0JTQldCbWy7Qn9Cg0J7QnNCV0J3Qm9CY0JLQkF0g0JDQlNCg0JXQoSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzcKK21zZ2lkICJyZXBsYWNlIGFsbCBtYXRjaGluZyB2YXJpYWJsZXM6IG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XSIKK21zZ3N0ciAiIgorItC30LDQvNGP0L3QsCDQvdCwINCy0YHQuNGH0LrQuCDRgdGK0LLQv9Cw0LTQsNGJ0Lgg0L/RgNC+0LzQtdC90LvQuNCy0Lg6INCY0JzQlSDQodCi0J7QmdCd0J7QodCiICIKKyJb0KDQldCT0KPQm9Cv0KDQldCdX9CY0JfQoNCQ0Jdf0JfQkF/QodCi0J7QmdCd0J7QodCi0KLQkF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM4Cittc2dpZCAiYWRkIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L3QvtCy0LAg0L/RgNC+0LzQtdC90LvQuNCy0LA6INCY0JzQlSDQodCi0J7QmdCd0J7QodCiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOQorbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC70LjQstCwOiDQmNCc0JUgW9Cg0JXQk9Cj0JvQr9Cg0JXQnV/QmNCX0KDQkNCXX9CX0JBf0KHQotCe0JnQndCe0KHQotCi0JBdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MAorbXNnaWQgInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0YHRitCy0L/QsNC00LDRidC4OiDQmNCc0JUgW9Cg0JXQk9Cj0JvQr9Cg0JXQnV/QmNCX0KDQkNCXX9CX0JBf0KHQotCe0JnQndCe0KHQotCi0JBdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MQorbXNnaWQgInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIKK21zZ3N0ciAi0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0YDQsNC30LTQtdC7OiDQodCi0JDQoNCeX9CY0JzQlSDQndCe0JLQnl/QmNCc0JUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQyCittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0YDQsNC30LTQtdC7OiDQmNCc0JUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQzCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgItC40LfQsdGA0L7Rj9Cy0LDQvdC1INC90LAg0LLRgdC40YfQutC4IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NAorbXNnaWQgIm9wZW4gYW4gZWRpdG9yIgorbXNnc3RyICLQvtGC0LLQsNGA0Y/QvdC1INC90LAg0YDQtdC00LDQutGC0L7RgCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDUKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LfQsNC00LDQtNC10L3QuNGPINGG0LLRj9GCOiDQvdC+0LzQtdGAIFvRgdGC0LDQvdC00LDRgNGC0L3Qvl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ2Cittc2dpZCAiZmluZCB0aGUgY29sb3Igc2V0dGluZzogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC30LDQtNCw0LTQtdC90LjRjyDRhtCy0Y/Rgjog0L3QvtC80LXRgCAo0YHRgtCw0L3QtNCw0YDRgtC90LjRj9GCINC40LfRhdC+0LQg0LUg0YLQtdGA0LzQuNC90LDQuykiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ3Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAi0JLQuNC0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OCBidWlsdGluL2Vudi0taGVscGVyLmM6MzgKK21zZ2lkICJ2YWx1ZSBpcyBnaXZlbiB0aGlzIHR5cGUiCittc2dzdHIgItGB0YLQvtC50L3QvtGB0YLRgtCwINC1INC+0YIg0YLQvtC30Lgg0LLQuNC0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OQorbXNnaWQgInZhbHVlIGlzIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIKK21zZ3N0ciAi0KHQotCe0JnQndCe0KHQotCi0JAg0LUg4oCedHJ1ZeKAnCAo0LjRgdGC0LjQvdCwKSDQuNC70Lgg4oCeZmFsc2XigJwgKNC70YrQttCwKSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTAKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAi0KHQotCe0JnQndCe0KHQotCi0JAg0LUg0YbRj9C70L4sINC00LXRgdC10YLQuNGH0L3QviDRh9C40YHQu9C+IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MQorbXNnaWQgInZhbHVlIGlzIC0tYm9vbCBvciAtLWludCIKK21zZ3N0ciAi0KHQotCe0JnQndCe0KHQotCi0JAg0LUg4oCeLS1ib29s4oCcICjQsdGD0LvQtdCy0LApINC40LvQuCDigJ4tLWludOKAnCAo0LTQtdGB0LXRgtC40YfQvdC+INGG0Y/Qu9C+INGH0LjRgdC70L4pIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MgorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgItCh0KLQntCZ0J3QntCh0KLQotCQINC1INC/0YrRgiAo0LTQviDRhNCw0LnQuyDQuNC70Lgg0LTQuNGA0LXQutGC0L7RgNC40Y8pIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MworbXNnaWQgInZhbHVlIGlzIGFuIGV4cGlyeSBkYXRlIgorbXNnc3RyICLRgdGC0L7QudC90L7RgdGC0YLQsCDQtSDQv9C10YDQuNC+0LQg0L3QsCDQstCw0LvQuNC00L3QvtGB0YIv0LfQsNC/0LDQt9Cy0LDQvdC1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NAorbXNnaWQgIk90aGVyIgorbXNnc3RyICLQlNGA0YPQs9C4IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NQorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAi0YDQsNC30LTQtdC70Y/QvdC1INC90LAg0YHRgtC+0LnQvdC+0YHRgtC40YLQtSDRgSDQvdGD0LvQtdCy0LjRjyDQt9C90LDQuiDigJ5OVUzigJwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU2Cittc2dpZCAic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC80LXQvdCw0YLQsCDQvdCwINC/0YDQvtC80LXQvdC70LjQstC40YLQtSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTcKK21zZ2lkICJyZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcyBvbiBsb29rdXAiCittc2dzdHIgItC/0YDQuCDRgtGK0YDRgdC10L3QtSDQtNCwINGB0LUg0YPQstCw0LbQsNGCINC4INC00LjRgNC10LrRgtC40LLQuNGC0LUg0LfQsCDQstC60LvRjtGH0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU4Cittc2dpZCAic2hvdyBvcmlnaW4gb2YgY29uZmlnIChmaWxlLCBzdGFuZGFyZCBpbnB1dCwgYmxvYiwgY29tbWFuZCBsaW5lKSIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC80Y/RgdGC0L7RgtC+INC90LAg0LfQsNC00LDQstCw0L3QtSDQvdCwINC90LDRgdGC0YDQvtC50LrQsNGC0LAgKNGE0LDQudC7LCDRgdGC0LDQvdC00LDRgNGC0LXQvSDQstGF0L7QtCwgIgorItC+0LHQtdC60YItQkxPQiwg0LrQvtC80LDQvdC00LXQvSDRgNC10LQpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OQorbXNnaWQgInNob3cgc2NvcGUgb2YgY29uZmlnICh3b3JrdHJlZSwgbG9jYWwsIGdsb2JhbCwgc3lzdGVtLCBjb21tYW5kKSIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC+0LHRhdCy0LDRgtCwINC90LAg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ53b3JrdHJlZeKAnCAo0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviksICIKKyLigJ5sb2NhbOKAnCAo0YXRgNCw0L3QuNC70LjRidC1KSwg4oCeZ2xvYmFs4oCcICjQv9C+0YLRgNC10LHQuNGC0LXQuyksIOKAnnN5c3RlbeKAnCAo0YHQuNGB0YLQtdC80LApLCAiCisi4oCeY29tbWFuZOKAnCAo0LrQvtC80LDQvdC00LApIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE2MCBidWlsdGluL2Vudi0taGVscGVyLmM6NDAKK21zZ2lkICJ2YWx1ZSIKK21zZ3N0ciAi0KHQotCe0JnQndCe0KHQoiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNjAKK21zZ2lkICJ3aXRoIC0tZ2V0LCB1c2UgZGVmYXVsdCB2YWx1ZSB3aGVuIG1pc3NpbmcgZW50cnkiCittc2dzdHIgItGBIOKAni0tZ2V04oCcINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDRgdGC0LDQvdC00LDRgNGC0L3QsCDQodCi0J7QmdCd0J7QodCiINC/0YDQuCDQu9C40L/RgdCy0LDRidCwIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgJWQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INCx0YDQvtC5INCw0YDQs9GD0LzQtdC90YLQuCwg0YLRgNGP0LHQstCwINC00LAg0LUg0YLQvtGH0L3QviAlZCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlIGZyb20gJWQgdG8gJWQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INCx0YDQvtC5INCw0YDQs9GD0LzQtdC90YLQuCwg0YLRgNGP0LHQstCwINC00LAg0LUg0L7RgiAlZCDQtNC+ICVkINCy0LrQu9GO0YfQuNGC0LXQu9C90L4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IHBhdHRlcm46ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRiNCw0LHQu9C+0L0g0LfQsCDQutC70Y7Rhzog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmb3JtYXQgZGVmYXVsdCBjb25maWcgdmFsdWU6ICVzIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YTQvtGA0LzQsNGC0LjRgNCw0L3QtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdCw0YLQsCDRgdGC0L7QudC90L7RgdGCINC90LAg0L3QsNGB0YLRgNC+0LnQutCwOiAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGNvbG9yICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCDQutCw0YLQviDRhtCy0Y/RgiIKKworIzogYnVpbHRpbi9jb25maWcuYzo0NTkKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAi0L3QtdGA0LDQt9C/0L7Qt9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINGG0LLRj9GCIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUxMiBidWlsdGluL2NvbmZpZy5jOjc2OAorbXNnaWQgIm5vdCBpbiBhIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgItC90LUg0LUg0LIg0LTQuNGA0LXQutGC0L7RgNC40Y8g0L/QvtC0IEdpdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MTUKK21zZ2lkICJ3cml0aW5nIHRvIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgItC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwINC30LDQv9C40YHQstCw0L3QtSDQsiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUxOAorbXNnaWQgIndyaXRpbmcgY29uZmlnIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgItC+0LHQtdC60YLQuC1CTE9CINCyINC90LDRgdGC0YDQvtC50LrQuNGC0LUg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LDRgiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiMgVGhpcyBpcyBHaXQncyBwZXItdXNlciBjb25maWd1cmF0aW9uIGZpbGUuXG4iCisiW3VzZXJdXG4iCisiIyBQbGVhc2UgYWRhcHQgYW5kIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKK21zZ3N0ciAiIgorIiMg0KLQvtCy0LAg0LUg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60LjRj9GCINCy0Lgg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtdC9INGE0LDQudC7INC30LAgR2l0LlxuIgorIlt1c2VyXVxuIgorIiMg0J/RgNC+0LLQtdGA0LXRgtC1INC4INGA0LDQt9C60L7QvNC10L3RgtC40YDQsNC50YLQtSDRgdC70LXQtNC90LjRgtC1INC00LLQsCDRgNC10LTQsDpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjI3Cittc2dpZCAib25seSBvbmUgY29uZmlnIGZpbGUgYXQgYSB0aW1lIgorbXNnc3RyICLRgdCw0LzQviDQv9C+INC10LTQuNC9INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MzIKK21zZ2lkICItLWxvY2FsIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIuKAni0tbG9jYWzigJwg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0YHQsNC80L4g0LIg0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYzNQorbXNnaWQgIi0tYmxvYiBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICLigJ4tLWJsb2LigJwg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0YHQsNC80L4g0LIg0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1NQorbXNnaWQgIiRIT01FIG5vdCBzZXQiCittc2dzdHIgItC/0YDQvtC80LXQvdC70LjQstCw0YLQsCDigJ5IT01F4oCcINC90LUg0LUg0LfQsNC00LDQtNC10L3QsCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NzkKK21zZ2lkICIiCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS13b3JrdHJl4oCcINC90LUg0L/RgNC40LXQvNCwINC80L3QvtC20LXRgdGC0LLQviDRgNCw0LHQvtGC0L3QuCDQtNGK0YDQstC10YLQsCwg0L/RgNC10LTQuFxuIgorItCy0LrQu9GO0YfQstCw0L3QtdGC0L4g0L3QsCDRgNCw0LfRiNC40YDQtdC90LjQtdGC0L4g0LIg0L3QsNGB0YLRgNC+0LnQutC40YLQtSDigJ53b3JrdHJlZUNvbmZpZ+KAnC4gINCX0LBcbiIKKyLQv9C+0LLQtdGH0LUg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LLQuNC20YLQtSDRgNCw0LfQtNC10LvQsCDigJ5DT05GSUdVUkFUSU9OIEZJTEXigJwg0LJcbiIKKyLigJ5naXQgaGVscCB3b3JrdHJlZeKAnCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTQKK21zZ2lkICItLWdldC1jb2xvciBhbmQgdmFyaWFibGUgdHlwZSBhcmUgaW5jb2hlcmVudCIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1nZXQtY29sb3LigJwg0L3QtSDRgdGK0L7RgtCy0LXRgtGB0YLQstCwINC90LAg0LLQuNC00LAg0L3QsCDQv9GA0L7QvNC10L3Qu9C40LLQsNGC0LAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzE5Cittc2dpZCAib25seSBvbmUgYWN0aW9uIGF0IGEgdGltZSIKK21zZ3N0ciAi0YHQsNC80L4g0L/QviDQtdC00L3QviDQtNC10LnRgdGC0LLQuNC1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczMgorbXNnaWQgIi0tbmFtZS1vbmx5IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWxpc3Qgb3IgLS1nZXQtcmVnZXhwIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1uYW1lLW9ubHnigJwg0LUg0L/RgNC40LvQvtC20LjQvNCwINGB0LDQvNC+INC60YrQvCDQvtC/0YbQuNC40YLQtSDigJ4tLWxpc3TigJwg0Lgg4oCeLS1nZXQtcmVnZXhw4oCcIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczOAorbXNnaWQgIiIKKyItLXNob3ctb3JpZ2luIGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCwgLS1nZXQtYWxsLCAtLWdldC1yZWdleHAsIGFuZCAtLSIKKyJsaXN0IgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1zaG93LW9yaWdpbuKAnCDQtSDQv9GA0LjQu9C+0LbQuNC80LAg0YHQsNC80L4g0LrRitC8INC+0L/RhtC40LjRgtC1IOKAni0tZ2V04oCcLCDigJ4tLWdldC1hbGzigJwsICIKKyLigJ4tLWdldC1yZWdleHDigJwg0Lgg4oCeLS1saXN04oCcIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0NAorbXNnaWQgIi0tZGVmYXVsdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tZGVmYXVsdOKAnCDQtSDQv9GA0LjQu9C+0LbQuNC80LAg0YHQsNC80L4g0LrRitC8INC+0L/RhtC40Y/RgtCwIOKAni0tZ2V04oCcIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIgorbXNnc3RyICLQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90LjRj9GCINGE0LDQudC7IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2MAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0L7QsdGA0LDQsdC+0YLQutCw0YLQsCDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzAKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgItC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwINGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3MgorbXNnaWQgImVkaXRpbmcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAg0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINC+0LHQtdC60YLQuC1CTE9CIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAi0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBvdmVyd3JpdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGggYSBzaW5nbGUgdmFsdWVcbiIKKyIgICAgICAgVXNlIGEgcmVnZXhwLCAtLWFkZCBvciAtLXJlcGxhY2UtYWxsIHRvIGNoYW5nZSAlcy4iCittc2dzdHIgIiIKKyLQvNC90L7QttC10YHRgtCy0L4g0YHRgtC+0LnQvdC+0YHRgtC4INC90LUg0LzQvtCz0LDRgiDQtNCwINGB0LUg0LfQsNC80LXQvdGP0YIg0YEg0LXQtNC90LAuXG4iCisi0JfQsCDQtNCwINC/0YDQvtC80LXQvdC40YLQtSDigJ4lc+KAnCwg0L/QvtC70LfQstCw0LnRgtC1INGA0LXQs9GD0LvRj9GA0LXQvSDQuNC30YDQsNC3INC40LvQuCDQvtC/0YbQuNC40YLQtSDigJ4tLWFkZOKAnCDQuCDigJ4tLSIKKyJyZXBsYWNlLWFsbOKAnC4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODczIGJ1aWx0aW4vY29uZmlnLmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggc2VjdGlvbjogJXMiCittc2dzdHIgItGC0LDQutGK0LIg0YDQsNC30LfQtdC7INC90Y/QvNCwOiAlcyIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTAKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorbXNnc3RyICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzoxMDAKK21zZ2lkICJwcmludCBzaXplcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtYXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9C80LXRgNC40YLQtSDQvdCwINC+0LHQtdC60YLQuNGC0LUg0LLRitCyINGE0L7RgNC80LDRgiDQu9C10YHQvdC+INGH0LXRgtC40Lwg0L7RgiDRhdC+0YDQsCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI2Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIFs8Y29tbWl0LWlzaD4uLi5dIgorbXNnc3RyICJnaXQgZGVzY3JpYmUgW9Ce0J/QptCY0K/igKZdIFvQo9Ca0JDQl9CQ0KLQldCbX9Ca0KrQnF/Qn9Ce0JTQkNCS0JDQndCV4oCmXSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIC0tZGlydHkiCittc2dzdHIgImdpdCBkZXNjcmliZSBb0J7Qn9Cm0JjQr+KApl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiaGVhZCIKK21zZ3N0ciAi0L7RgdC90L7QstC90L4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICLQutGA0LDRgtC60L4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImFubm90YXRlZCIKK21zZ3N0ciAi0LDQvdC+0YLQuNGA0LDQvdC+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAi0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQsNC90L7RgtC40YDQsNC9INC10YLQuNC60LXRgiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIgorbXNnc3RyICLQsiDQsNC90L7RgtC40YDQsNC90LjRjyDQtdGC0LjQutC10YIg4oCeJXPigJwg0LvQuNC/0YHQstCwINCy0LPRgNCw0LTQtdC90L4g0LjQvNC1IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgItC10YLQuNC60LXRgtGK0YIg4oCeJXPigJwg0YLRg9C6INC1INCy0YHRitGJ0L3QvtGB0YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICLQvdC40LrQvtC5INC10YLQuNC60LXRgiDQvdC1INC90LDQv9Cw0YHQstCwINGC0L7Rh9C90L4g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAi0J3QuNC60L7RjyDQstC10YDRgdC40Y8g0Lgg0LXRgtC40LrQtdGCINC90LUg0L3QsNC/0LDRgdCy0LDRgiDRgtC+0YfQvdC+LiAg0KLRitGA0YHQuCDRgdC1INC/0L4g0L7Qv9C40YHQsNC90LjQtVxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICLRgtGK0YDRgdC10L3QtdGC0L4g0L/RgNC40LrQu9GO0YfQuCDQv9GA0Lgg4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorItCd0LjQutC+0Lkg0LDQvdC+0YLQuNGA0LDQvSDQtdGC0LjQutC10YIg0L3QtSDQvtC/0LjRgdCy0LAg4oCeJXPigJwuXG4iCisi0KHRitGJ0LXRgdGC0LLRg9Cy0LDRgiDQuCDQvdC10LDQvdC+0YLQuNGA0LDQvdC4INC10YLQuNC60LXRgtC4LiAg0J/RgNC+0LHQstCw0LnRgtC1INGBINC+0L/RhtC40Y/RgtCwIOKAni0tdGFnc+KAnC4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorItCd0LjQutC+0Lkg0LXRgtC40LrQtdGCINC90LUg0L7Qv9C40YHQstCwIOKAniVz4oCcLlxuIgorItCf0YDQvtCx0LLQsNC50YLQtSDRgSDQvtC/0YbQuNGP0YLQsCDigJ4tLWFsd2F5c+KAnCDQuNC70Lgg0YHRitC30LTQsNC50YLQtSDQtdGC0LjQutC10YLQuC4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgItC/0YDQtdGC0YrRgNGB0LXQvdC4INGB0LAgJWx1INC/0L7QtNCw0LLQsNC90LjRj1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorItC+0YLQutGA0LjRgtC4INGB0LAg0L3QsNC0ICVpINC10YLQuNC60LXRgtCwLCDQuNC30LLQtdC00LXQvdC4INGB0LAg0L/QvtGB0LvQtdC00L3QuNGC0LUgJWksXG4iCisi0YLRitGA0YHQtdC90LXRgtC+INCx0LUg0L/RgNC10LrRgNCw0YLQtdC90L4g0L/RgNC4IOKAniVz4oCcLlxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc2NyaWJlICVzXG4iCittc2dzdHIgItC+0L/QuNGB0LDQvdC40LUg0L3QsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDQvtCx0LXQutGCIOKAniVz4oCcIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5laXRoZXIgYSBjb21taXQgbm9yIGJsb2IiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0L3QuNGC0L4g0L/QvtC00LDQstCw0L3QtSwg0L3QuNGC0L4g0L7QsdC10LrRgi1CTE9CIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUxCittc2dpZCAiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIKK21zZ3N0ciAi0L7RgtC60YDQuNCy0LDQvdC1INC90LAg0LXRgtC40LrQtdGC0LAsINC60L7QudGC0L4g0YHQu9C10LTQstCwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTIKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICIiCisi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDRgtGA0LDRgdC40YDQsNC90LUg0L3QsCDRgdGC0YDQsNGC0LXQs9C40Y/RgtCwINC30LAg0YLRitGA0YHQtdC90LUg0L3QsCAiCisi0YHRgtCw0L3QtNCw0YDRgtC90LDRgtCwINCz0YDQtdGI0LrQsCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MworbXNnaWQgInVzZSBhbnkgcmVmIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINC/0YDQvtC40LfQstC+0LvQtdC9INGD0LrQsNC30LDRgtC10LsiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTQKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQstGB0LXQutC4INC10YLQuNC60LXRgiDigJQg0LLQutC70Y7Rh9C40YLQtdC70L3QviDQuCDQvdC10LDQvdC+0YLQuNGA0LDQvdC40YLQtSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NQorbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgItCy0LjQvdCw0LPQuCDQtNCwINGB0LUg0L/QvtC70LfQstCwINC00YrQu9Cz0LjRj9GCINGE0L7RgNC80LDRgiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NgorbXNnaWQgIm9ubHkgZm9sbG93IGZpcnN0IHBhcmVudCIKK21zZ3N0ciAi0L/RgNC+0YHQu9C10LTRj9Cy0LDQvdC1INGB0LDQvNC+INC90LAg0L/RitGA0LLQuNGPINGA0L7QtNC40YLQtdC7IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU5Cittc2dpZCAib25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0YLQvtGH0L3QuNGC0LUg0YHRitCy0L/QsNC00LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjEKK21zZ2lkICJjb25zaWRlciA8bj4gbW9zdCByZWNlbnQgdGFncyAoZGVmYXVsdDogMTApIgorbXNnc3RyICLQtNCwINGB0LUg0YLRitGA0YHQuCDRgdCw0LzQviDQsiDRgtC+0LfQuCDQkdCg0J7QmSDQv9C+0YHQu9C10LTQvdC4INC10YLQuNC60LXRgtC4ICjRgdGC0LDQvdC00LDRgNGC0L3QvjogMTApIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTYzCittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAi0LTQsCDRgdC1INGC0YrRgNGB0Lgg0YHQsNC80L4g0LjQt9C80LXQttC00YMg0LXRgtC40LrQtdGC0LjRgtC1INC90LDQv9Cw0YHQstCw0YnQuCDRgtC+0LfQuCDQqNCQ0JHQm9Ce0J0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjUKK21zZ2lkICJkbyBub3QgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgItC00LAg0L3QtSDRgdC1INGC0YrRgNGB0Lgg0LjQt9C80LXQttC00YMg0LXRgtC40LrQtdGC0LjRgtC1INC90LDQv9Cw0YHQstCw0YnQuCDRgtC+0LfQuCDQqNCQ0JHQm9Ce0J0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjcgYnVpbHRpbi9uYW1lLXJldi5jOjUzNQorbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRitC60YDQsNGC0LXQvdC+INC40LzQtSDQvdCwINC+0LHQtdC60YIg0LrQsNGC0L4g0YDQtdC30LXRgNCy0LXQvSDQstCw0YDQuNCw0L3RgiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2OCBidWlsdGluL2Rlc2NyaWJlLmM6NTcxCittc2dpZCAibWFyayIKK21zZ3N0ciAi0JzQkNCg0JrQldCgIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY5Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0YLQsNC60YrQsiDQnNCQ0KDQmtCV0KAg0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviAo0YHRgtCw0L3QtNCw0YDRgtC90L4g0LUg4oCeLWRpcnR54oCcKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU3MgorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gYnJva2VuIHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItYnJva2VuXCIpIgorbXNnc3RyICIiCisi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGC0LDQutGK0LIg0JzQkNCg0JrQldCgINC90LAg0YHRh9GD0L/QtdC90L7RgtC+INGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4gKNGB0YLQsNC90LTQsNGA0YLQvdC+INC1IOKAni1icm9rZW7igJwpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTkwCittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni0tbG9uZ+KAnCDQuCDigJ4tLWFiYnJldj0w4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjE5Cittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgItCd0LUg0YHQsCDQvtGC0LrRgNC40YLQuCDQuNC80LXQvdCwIOKAlCDQvdC40YnQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7Qv9C40YHQsNC90L4uIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjcwCittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tZGlydHnigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINGD0LrQsNC30LDRgtC10Lsg0LrRitC8INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NzIKK21zZ2lkICItLWJyb2tlbiBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tYnJva2Vu4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDRg9C60LDQt9Cw0YLQtdC7INC60YrQvCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2RpZmYuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBub3QgYSByZWd1bGFyIGZpbGUgb3Igc3ltbGluayIKK21zZ3N0ciAi4oCeJXPigJw6INC90LUg0LUg0L3QuNGC0L4g0L7QsdC40LrQvdC+0LLQtdC9INGE0LDQudC7LCDQvdC40YLQviDRgdC40LzQstC+0LvQvdCwINCy0YDRitC30LrQsCIKKworIzogYnVpbHRpbi9kaWZmLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0L7Qv9GG0LjRjzogJXMiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM1MAorbXNnaWQgIk5vdCBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICLQndC1INC1INGF0YDQsNC90LjQu9C40YnQtSDQvdCwIEdpdCIKKworIzogYnVpbHRpbi9kaWZmLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICLQt9Cw0LTQsNC00LXQvSDQtSDQvdC10L/RgNCw0LLQuNC70LXQvSDQvtCx0LXQutGCIOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgItC30LDQtNCw0LTQtdC90Lgg0YHQsCDQv9C+0LLQtdGH0LUg0L7RgiAyINC+0LHQtdC60YLQsC1CTE9COiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9kaWZmLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgItC30LDQtNCw0LTQtdC9INC1INC90LXQv9C+0LTQtNGK0YDQttCw0L0g0L7QsdC10LrRgiDigJ4lc+KAnC4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMAorbXNnaWQgImdpdCBkaWZmdG9vbCBbPG9wdGlvbnM+XSBbPGNvbW1pdD4gWzxjb21taXQ+XV0gWy0tXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGRpZmZ0b29sIFvQntCf0KbQmNCv4oCmXSBb0J/QntCU0JDQktCQ0J3QlSBb0J/QntCU0JDQktCQ0J3QlV1dIFtbLS1dINCf0KrQouKApl0iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkOiAlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC00LXQudGB0YLQstC40LUg0YEg0LjQt9GF0L7QtNC10L0g0LrQvtC0OiAlZCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICLRgdC40LzQstC+0LvQvdCw0YLQsCDQstGA0YrQt9C60LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L3QsCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rIGZpbGUgJXMiCittc2dzdHIgItGE0LDQudC70YrRgiwg0YHQvtGH0LXQvSDQvtGCINGB0LjQvNCy0L7Qu9C90LDRgtCwINCy0YDRitC30LrQsCDigJ4lc+KAnCwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIGZvciBzeW1saW5rICVzIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgiDigJ4lc+KAnCDQt9CwINGB0LjQvNCy0L7Qu9C90LDRgtCwINCy0YDRitC30LrQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjQxMworbXNnaWQgIiIKKyJjb21iaW5lZCBkaWZmIGZvcm1hdHMoJy1jJyBhbmQgJy0tY2MnKSBhcmUgbm90IHN1cHBvcnRlZCBpblxuIgorImRpcmVjdG9yeSBkaWZmIG1vZGUoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4iCittc2dzdHIgIiIKKyLQutC+0LzQsdC40L3QuNGA0LDQvdC40YLQtSDRhNC+0YDQvNCw0YLQuCDQvdCwINGA0LDQt9C70LjQutC40YLQtSAo4oCeLWPigJwg0Lgg4oCeLS1jY+KAnCkg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LDRglxuIgorItCyINGA0LXQttC40LzQsCDQt9CwINGA0LDQt9C70LjQutC4INCy0YrRgNGF0YMg0LTQuNGA0LXQutGC0L7RgNC40LggKOKAni1k4oCcINC4IOKAni0tZGlyLWRpZmbigJwpLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJib3RoIGZpbGVzIG1vZGlmaWVkOiAnJXMnIGFuZCAnJXMnLiIKK21zZ3N0ciAi0Lgg0LTQstCw0YLQsCDRhNCw0LnQu9CwINGB0LAg0L/RgNC+0LzQtdC90LXQvdC4OiDigJ4lc+KAnCDQuCDigJ4lc+KAnC4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzYKK21zZ2lkICJ3b3JraW5nIHRyZWUgZmlsZSBoYXMgYmVlbiBsZWZ0LiIKK21zZ3N0ciAi0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0LUg0LjQt9C+0YHRgtCw0LLQtdC90L4uIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBvcmFyeSBmaWxlcyBleGlzdCBpbiAnJXMnLiIKK21zZ3N0ciAi0LIg4oCeJXPigJwg0LjQvNCwINCy0YDQtdC80LXQvdC90Lgg0YTQsNC50LvQvtCy0LUuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjQ4Cittc2dpZCAieW91IG1heSB3YW50IHRvIGNsZWFudXAgb3IgcmVjb3ZlciB0aGVzZS4iCittc2dzdHIgItCy0YrQt9C80L7QttC90L4g0LUg0LTQsCDQs9C4INC40LfRh9C40YHRgtC40YLQtSDQuNC70Lgg0LLRitC30YHRgtCw0L3QvtCy0LjRgtC1IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njk3Cittc2dpZCAidXNlIGBkaWZmLmd1aXRvb2xgIGluc3RlYWQgb2YgYGRpZmYudG9vbGAiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZGlmZi5ndWl0b29s4oCcINCy0LzQtdGB0YLQviDigJ5kaWZmLnRvb2zigJwiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTkKK21zZ2lkICJwZXJmb3JtIGEgZnVsbC1kaXJlY3RvcnkgZGlmZiIKK21zZ3N0ciAi0YDQsNC30LvQuNC60LAg0L/QviDQtNC40YDQtdC60YLQvtGA0LjQuCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwMQorbXNnaWQgImRvIG5vdCBwcm9tcHQgYmVmb3JlIGxhdW5jaGluZyBhIGRpZmYgdG9vbCIKK21zZ3N0ciAi0YHRgtCw0YDRgtC40YDQsNC90LUg0L3QsCDQn9Cg0J7Qk9Cg0JDQnNCQ0YLQsCDQt9CwINGA0LDQt9C70LjQutC4INCx0LXQtyDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA2Cittc2dpZCAidXNlIHN5bWxpbmtzIGluIGRpci1kaWZmIG1vZGUiCittc2dzdHIgItGB0LvQtdC00LLQsNC90LUg0L3QsCDRgdC40LzQstC+0LvQvdC40YLQtSDQstGA0YrQt9C60Lgg0L/RgNC4INGA0LDQt9C70LjQutCwINC/0L4g0LTQuNGA0LXQutGC0L7RgNC40LgiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDcKK21zZ2lkICJ0b29sIgorbXNnc3RyICLQn9Cg0J7Qk9Cg0JDQnNCQIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA4Cittc2dpZCAidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGD0LrQsNC30LDQvdCw0YLQsCDQn9Cg0J7Qk9Cg0JDQnNCQIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEwCittc2dpZCAicHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgIgorbXNnc3RyICIiCisi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHQv9C40YHRitC6INGBINCy0YHQuNGH0LrQuCDQn9Cg0J7Qk9Cg0JDQnNC4LCDQutC+0LjRgtC+INC80L7QttC1INC00LAg0YHQtSDQv9C+0LvQt9Cy0LDRgiDRgSDQvtC/0YbQuNGP0YLQsCDigJ4tLSIKKyJ0b29s4oCcIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEzCittc2dpZCAiIgorIm1ha2UgJ2dpdC1kaWZmdG9vbCcgZXhpdCB3aGVuIGFuIGludm9rZWQgZGlmZiB0b29sIHJldHVybnMgYSBub24gLSB6ZXJvIGV4aXQgIgorImNvZGUiCittc2dzdHIgIiIKKyLigJ5naXQtZGlmZnRvb2zigJwg0LTQsCDRgdC/0YDQtSDRgNCw0LHQvtGC0LAsINC60L7Qs9Cw0YLQviDRgdGC0LDRgNGC0LjRgNCw0L3QsNGC0LAg0J/QoNCe0JPQoNCQ0JzQkCDQt9Cw0LLRitGA0YjQuCDRgSAiCisi0L3QtdC90YPQu9C10LIg0LrQvtC0IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE2Cittc2dpZCAic3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzIgorbXNnc3RyICLQutC+0LzQsNC90LTQsCDQt9CwINGA0LDQt9Cz0LvQtdC20LTQsNC90LUg0L3QsCDRgNCw0LfQu9C40LrQuCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxNworbXNnaWQgInBhc3NlZCB0byBgZGlmZmAiCittc2dzdHIgItC/0L7QtNCw0LLQsCDRgdC1INC60YrQvCDigJ5kaWZm4oCcIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzMyCittc2dpZCAiZGlmZnRvb2wgcmVxdWlyZXMgd29ya3RyZWUgb3IgLS1uby1pbmRleCIKK21zZ3N0ciAi4oCeZ2l0LWRpZmZ0b29s4oCcINC40LfQuNGB0LrQstCwINGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4g0LjQu9C4INC+0L/RhtC40Y/RgtCwIOKAni0tbm8taW5kZXjigJwiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzkKK21zZ2lkICItLWRpci1kaWZmIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tZGlyLWRpZmbigJwg0Lgg4oCeLS1uby1pbmRleOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc0MgorbXNnaWQgIi0tZ3VpLCAtLXRvb2wgYW5kIC0tZXh0Y21kIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tZ3Vp4oCcLCDigJ4tLXRvb2zigJwg0Lgg4oCeLS1leHRjbWTigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80Lgg0LXQtNC90LAg0YEg0LTRgNGD0LPQsCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1MAorbXNnaWQgIm5vIDx0b29sPiBnaXZlbiBmb3IgLS10b29sPTx0b29sPiIKK21zZ3N0ciAi0L3QtSDQtSDQt9Cw0LTQsNC00LXQvdCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDigJ4tLXRvb2w90J/QoNCe0JPQoNCQ0JzQkOKAnCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1NworbXNnaWQgIm5vIDxjbWQ+IGdpdmVuIGZvciAtLWV4dGNtZD08Y21kPiIKK21zZ3N0ciAi0L3QtSDQtSDQt9Cw0LTQsNC00LXQvdCwINC60L7QvNCw0L3QtNCwINC30LAg4oCeLS1leHRjbWQ90JrQntCc0JDQndCU0JDigJwiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2Cittc2dpZCAiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPG9wdGlvbnM+IDxlbnYtdmFyPiIKK21zZ3N0ciAiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10g0J7Qn9Cm0JjQmCDQn9Cg0J7QnNCV0J3Qm9CY0JLQmCIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjM3IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgInR5cGUiCittc2dzdHIgItCS0JjQlCIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQxCittc2dpZCAiZGVmYXVsdCBmb3IgZ2l0X2Vudl8qKC4uLikgdG8gZmFsbCBiYWNrIG9uIgorbXNnc3RyICLRgdGC0LDQvdC00LDRgNGC0L3QsCwg0YDQtdC30LXRgNCy0L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCeZ2l0X2Vudl8qKOKApinigJwiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MworbXNnaWQgImJlIHF1aWV0IG9ubHkgdXNlIGdpdF9lbnZfKigpIHZhbHVlIGFzIGV4aXQgY29kZSIKK21zZ3N0ciAiIgorItCx0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDigJQg0YHRgtC+0LnQvdC+0YHRgtGC0LAg0L3QsCDigJ5naXRfZW52XyooKeKAnCDQtNCwINC1INC40LfRhdC+0LTQtdC9INC60L7QtCIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGEgYm9vbGVhbiB2YWx1ZSB3aXRoIGAtLXR5cGU9Ym9vbGAsIG5vdCBgJXNgIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1kZWZhdWx04oCcINC40LfQuNGB0LrQstCwINCx0YPQu9C10LLQsCDRgdGC0L7QudC90L7RgdGCINC/0YDQuCDigJ4tLXR5cGU9Ym9vbOKAnCwg0LAg0L3QtSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcHRpb24gYC0tZGVmYXVsdCcgZXhwZWN0cyBhbiB1bnNpZ25lZCBsb25nIHZhbHVlIHdpdGggYC0tdHlwZT11bG9uZ2AsIG5vdCBgIgorIiVzYCIKK21zZ3N0ciAiIgorItC+0L/RhtC40Y/RgtCwIOKAni0tZGVmYXVsdOKAnCDQuNC30LjRgdC60LLQsCDRhtC10LvQvtGH0LjRgdC70LXQvdCwINGB0YLQvtC50L3QvtGB0YIg0LHQtdC3INC30L3QsNC6INC/0YDQuCDigJ4tLSIKKyJ0eXBlPXVsb25n4oCcLCDQsCDQvdC1IOKAniVz4oCcIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjkKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICJnaXQgZmFzdC1leHBvcnQgW9Ce0J/QptCY0Jhf0JfQkF/QodCf0JjQodCq0JrQkF/QoV/QktCV0KDQodCY0JhdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6ODUzCittc2dpZCAiRXJyb3I6IENhbm5vdCBleHBvcnQgbmVzdGVkIHRhZ3MgdW5sZXNzIC0tbWFyay10YWdzIGlzIHNwZWNpZmllZC4iCittc2dzdHIgIiIKKyLQk9GA0LXRiNC60LA6INC90LXQv9GA0LXQutC40YLQtSDQtdGC0LjQutC10YLQuCDQvdC1INGB0LUg0LjQt9C90LDRgdGP0YIsINC+0YHQstC10L0g0LDQutC+INC90LUg0LfQsNC00LDQtNC10YLQtSDigJ4tLW1hcmstdGFnc+KAnC4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTUyCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAi0KHRitC+0LHRidC10L3QuNC1INC30LAg0L3QsNC/0YDQtdC00YrQutCwINC90LAg0LLRgdC10LrQuCDRgtCw0LrRitCyINCR0KDQntCZINC+0LHQtdC60YLQsCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTQKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgItCa0LDQuiDQtNCwINGB0LUg0L7QsdGA0LDQsdC+0YLQstCw0YIg0L/QvtC00L/QuNGB0LDQvdC40YLQtSDQtdGC0LjQutC10YLQuCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTcKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgdGFncyB0aGF0IHRhZyBmaWx0ZXJlZCBvYmplY3RzIgorbXNnc3RyICLQmtCw0Log0LTQsCDRgdC1INC+0LHRgNCw0LHQvtGC0LLQsNGCINC10YLQuNC60LXRgtC40YLQtSDQvdCwINGE0LjQu9GC0YDQuNGA0LDQvdC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYwCittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIGNvbW1pdCBtZXNzYWdlcyBpbiBhbiBhbHRlcm5hdGUgZW5jb2RpbmciCittc2dzdHIgIiIKKyLQutCw0Log0LTQsCDRgdC1INC+0LHRgNCw0LHQvtGC0LLQsNGCINGB0YrQvtCx0YnQtdC90LjRj9GC0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1LCDQutC+0LjRgtC+INGB0LAg0LIg0LTRgNGD0LPQviDQutC+0LTQuNGA0LDQvdC1IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MworbXNnaWQgIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIgorbXNnc3RyICLQl9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQvNCw0YDQutC10YDQuNGC0LUg0LIg0YLQvtC30Lgg0KTQkNCZ0JsiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY1Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICLQktC90LDRgdGP0L3QtSDQvdCwINC80LDRgNC60LXRgNC40YLQtSDQvtGCINGC0L7Qt9C4INCk0JDQmdCbIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSBpZiBpdCBleGlzdHMiCittc2dzdHIgItCS0L3QsNGB0Y/QvdC1INC90LAg0LzQsNGA0LrQtdGA0LjRgtC1INC+0YIg0YLQvtC30Lgg0KTQkNCZ0JssINCw0LrQviDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzEKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAi0JTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LjQt9C60YPRgdGC0LLQtdC90L4g0LjQvNC1INC90LAg0YfQvtCy0LXQuiDQv9GA0Lgg0LvQuNC/0YHQsCDQvdCwINC30LDQtNCw0LLQsNGJINC10YLQuNC60LXRgtCwIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3MworbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDRhtGP0LvQvtGC0L4g0LTRitGA0LLQviDQt9CwINCy0YHRj9C60L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzUKK21zZ2lkICJVc2UgdGhlIGRvbmUgZmVhdHVyZSB0byB0ZXJtaW5hdGUgdGhlIHN0cmVhbSIKK21zZ3N0ciAi0JjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQvNCw0YDQutC10YAg0LfQsCDQt9Cw0LLRitGA0YjQstCw0L3QtSDQvdCwINC/0L7RgtC+0LrQsCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzYKK21zZ2lkICJTa2lwIG91dHB1dCBvZiBibG9iIGRhdGEiCittc2dzdHIgItCR0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQvtCx0LXQutGC0LjRgtC1LUJMT0IiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc3IGJ1aWx0aW4vbG9nLmM6MTcwNQorbXNnaWQgInJlZnNwZWMiCittc2dzdHIgItCj0JrQkNCX0JDQotCV0Jtf0J3QkF/QktCV0KDQodCY0K8iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc4Cittc2dpZCAiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIgorbXNnc3RyICLQn9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQo9Ca0JDQl9CQ0KLQldCb0Y9f0J3QkF/QktCV0KDQodCY0K8g0LrRitC8INC40LfQvdC10YHQtdC90LjRgtC1INGD0LrQsNC30LDRgtC10LvQuCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzkKK21zZ2lkICJhbm9ueW1pemUgb3V0cHV0IgorbXNnc3RyICLQsNC90L7QvdC40LzQuNC30LjRgNCw0L3QtSDQvdCwINC40LfQstC10LbQtNCw0L3QsNGC0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTgxCittc2dpZCAiUmVmZXJlbmNlIHBhcmVudHMgd2hpY2ggYXJlIG5vdCBpbiBmYXN0LWV4cG9ydCBzdHJlYW0gYnkgb2JqZWN0IGlkIgorbXNnc3RyICIiCisi0KPQutCw0LfQstCw0L3QtSDQvdCwINGA0L7QtNC40YLQtdC70LjRgtC1LCDQutC+0LjRgtC+INC90LUg0YHQsCDQsiDQv9C+0YLQvtC60LAg0L3QsCDQsdGK0YDQt9C+INC40LfQvdCw0YHRj9C90LUsINGBICIKKyLQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQvdCwINC+0LHQtdC60YIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTgzCittc2dpZCAiU2hvdyBvcmlnaW5hbCBvYmplY3QgaWRzIG9mIGJsb2JzL2NvbW1pdHMiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QuNGC0LUg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQuCDQvdCwINC+0LHQtdC60YLQuNGC0LUgQkxPQi/Qv9C+0LTQsNCy0Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTg1Cittc2dpZCAiTGFiZWwgdGFncyB3aXRoIG1hcmsgaWRzIgorbXNnc3RyICLQl9Cw0LTQsNCy0LDQvdC1INC90LAg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQuCDQvdCwINC80LDRgNC60LXRgNC4INC90LAg0LXRgtC40LrQtdGC0LjRgtC1IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTIyMAorbXNnaWQgIkNhbm5vdCBwYXNzIGJvdGggLS1pbXBvcnQtbWFya3MgYW5kIC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cyIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1pbXBvcnQtbWFya3PigJwg0Lgg4oCeLS1pbXBvcnQtbWFya3MtaWYtZXhpc3Rz4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MzQKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBmZXRjaCBb0J7Qn9Cm0JjQr+KApl0gW9Cl0KDQkNCd0JjQm9CY0KnQlSBb0KPQmtCQ0JfQkNCi0JXQm+KApl1dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzUKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiZ2l0IGZldGNoIFvQntCf0KbQmNCv4oCmXSDQk9Cg0KPQn9CQIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzYKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgW9Ce0J/QptCY0K/igKZdIFso0KXQoNCQ0J3QmNCb0JjQqdCVIHwg0JPQoNCj0J/QkCnigKZdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzcKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBmZXRjaCAtLWFsbCBb0J7Qn9Cm0JjQr+KApl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTYKK21zZ2lkICJmZXRjaC5wYXJhbGxlbCBjYW5ub3QgYmUgbmVnYXRpdmUiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAnmZldGNoLnBhcmFsbGVs4oCcINGC0YDRj9Cx0LLQsCDQtNCwINC1INC90LXQvtGC0YDQuNGG0LDRgtC10LvQvdCwIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM5IGJ1aWx0aW4vcHVsbC5jOjE4NAorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgItC00L7RgdGC0LDQstGP0L3QtSDQvtGCINCy0YHQuNGH0LrQuCDQvtGC0LTQsNC70LXRh9C10L3QuCDRhdGA0LDQvdC40LvQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDEgYnVpbHRpbi9wdWxsLmM6MjI4Cittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9mZXRjaCIKK21zZ3N0ciAi0LfQsNC00LDQstCw0L3QtSDQvdCwINC60LvQvtC9INC30LAg0YHQu9C10LTQtdC90LUg0LfQsCDQuNC30LTRitGA0L/QstCw0L3QtS/QtNC+0YHRgtCw0LLRj9C90LUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMgYnVpbHRpbi9wdWxsLmM6MTg3Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC60YrQvCDigJ4uZ2l0L0ZFVENIX0hFQUTigJwg0LLQvNC10YHRgtC+INC30LDQvNGP0L3QsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NSBidWlsdGluL3B1bGwuYzoxOTAKK21zZ2lkICJwYXRoIHRvIHVwbG9hZCBwYWNrIG9uIHJlbW90ZSBlbmQiCittc2dzdHIgItC+0YLQtNCw0LvQtdGH0LXQvSDQv9GK0YIsINC60YrQtNC10YLQviDQtNCwINGB0LUg0LrQsNGH0Lgg0L/QsNC60LXRgtGK0YIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDYKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgcmVmZXJlbmNlIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L/RgNC10LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0LvQvtC60LDQu9C10L0g0YPQutCw0LfQsNGC0LXQuyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0OAorbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAi0LTQvtGB0YLQsNCy0Y/QvdC1INC+0YIg0LzQvdC+0LbQtdGB0YLQstC+INC+0YLQtNCw0LvQtdGH0LXQvdC4INGF0YDQsNC90LjQu9C40YnQsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MCBidWlsdGluL3B1bGwuYzoxOTQKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICLQtNC+0YHRgtCw0LLRj9C90LUg0L3QsCDQstGB0LjRh9C60Lgg0LXRgtC40LrQtdGC0Lgg0Lgg0L/RgNC40L3QsNC00LvQtdC20LDRidC4INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MgorbXNnaWQgImRvIG5vdCBmZXRjaCBhbGwgdGFncyAoLS1uby10YWdzKSIKK21zZ3N0ciAi0LHQtdC3INC00L7RgdGC0LDQstGP0L3QtdGC0L4g0L3QsCDQstGB0LjRh9C60Lgg0LXRgtC40LrQtdGC0Lgg4oCeLS1uby10YWdz4oCcIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU0Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgZmV0Y2hlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAi0LHRgNC+0Lkg0L/QvtC00LzQvtC00YPQu9C4INC00L7RgdGC0LDQstC10L3QuCDQv9Cw0YDQsNC70LXQu9C90L4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTYgYnVpbHRpbi9wdWxsLmM6MTk3Cittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgItC+0LrQsNGB0YLRgNGP0L3QtSDQvdCwINC60LvQvtC90LjRgtC1INGB0LvQtdC00Y/RidC4INCy0LXRh9C1INC90LXRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0Lgg0L7RgtC00LDQu9C10YfQtdC90Lgg0LrQu9C+0L3QuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OAorbXNnaWQgInBydW5lIGxvY2FsIHRhZ3Mgbm8gbG9uZ2VyIG9uIHJlbW90ZSBhbmQgY2xvYmJlciBjaGFuZ2VkIHRhZ3MiCittc2dzdHIgIiIKKyLQvtC60LDRgdGC0YDRj9C90LUg0L3QsCDQu9C+0LrQsNC70L3QuNGC0LUg0LXRgtC40LrQtdGC0LgsINC60L7QuNGC0L4g0LLQtdGH0LUg0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsNGCINCyINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviAiCisi0YXRgNCw0L3QuNC70LjRidC1INC4INC/0YDQtdC30LDQv9C40YHQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC10L3QuNGC0LUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTkgYnVpbHRpbi9mZXRjaC5jOjE4MiBidWlsdGluL3B1bGwuYzoxMjEKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgItCf0KDQmCDQndCj0JbQlNCQIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYwCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAi0YPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDRgNC10LrRg9GA0YHQuNCy0L3QvtGC0L4g0LTQvtGB0YLQsNCy0Y/QvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9C40YLQtSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2NCBidWlsdGluL3B1bGwuYzoyMDUKK21zZ2lkICJrZWVwIGRvd25sb2FkZWQgcGFjayIKK21zZ3N0ciAi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LjQt9GC0LXQs9C70LXQvdC40YLQtSDQv9Cw0LrQtdGC0Lgg0YEg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY2Cittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgItC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDQvtCx0L3QvtCy0Y/QstCw0L3QtdGC0L4g0L3QsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2OSBidWlsdGluL2ZldGNoLmM6MTc1IGJ1aWx0aW4vcHVsbC5jOjIwOAorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiCittc2dzdHIgItC30LDQtNGK0LvQsdC+0YfQsNCy0LDQvdC1INC90LAg0LjRgdGC0L7RgNC40Y/RgtCwINC90LAg0L/Qu9C40YLQutC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MQorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aW1lIgorbXNnc3RyICLQt9Cw0LTRitC70LHQvtGH0LDQstCw0L3QtSDQvdCwINC40YHRgtC+0YDQuNGP0YLQsCDQvdCwINC/0LvQuNGC0LrQviDRhdGA0LDQvdC40LvQuNGJ0LUg0LTQviDQvtC/0YDQtdC00LXQu9C10L3QviDQstGA0LXQvNC1IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3IGJ1aWx0aW4vcHVsbC5jOjIxMQorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICLQv9GA0LXQstGA0YrRidCw0L3QtSDQsiDQv9GK0LvQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MAorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDRgtC+0LLQsCDQv9GA0LXQtCDQv9GK0YLRjyDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MworbXNnaWQgIiIKKyJkZWZhdWx0IGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyAobG93ZXIgcHJpb3JpdHkgdGhhbiBjb25maWcgIgorImZpbGVzKSIKK21zZ3N0ciAiIgorItGB0YLQsNC90LTQsNGA0YLQvdC+INGA0LXQutGD0YDRgdC40LLQvdC+INC40LfRgtC10LPQu9GP0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQuNGC0LUgKNGE0LDQudC70L7QstC10YLQtSDRgSDQvdCw0YHRgtGA0L7QudC60Lgg0YHQsCDRgSAiCisi0L/RgNC40L7RgNC40YLQtdGCKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NyBidWlsdGluL3B1bGwuYzoyMTQKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgItC/0YDQuNC10LzQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LgsINC60L7QuNGC0L4g0L7QsdC90L7QstGP0LLQsNGCIOKAni5naXQvc2hhbGxvd+KAnCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OCBidWlsdGluL3B1bGwuYzoyMTYKK21zZ2lkICJyZWZtYXAiCittc2dzdHIgItCa0JDQoNCi0JBf0KFf0KPQmtCQ0JfQkNCi0JXQm9CYIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg5IGJ1aWx0aW4vcHVsbC5jOjIxNworbXNnaWQgInNwZWNpZnkgZmV0Y2ggcmVmbWFwIgorbXNnc3RyICLRg9C60LDQt9Cy0LDQvdC1INC90LAg0JrQkNCg0KLQkNGC0LBf0KFf0KPQmtCQ0JfQkNCi0JXQm9CYINC30LAg0LTQvtGB0YLQsNCy0Y/QvdC1IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk2Cittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgItC00L7QutC70LDQtNCy0LDQvdC1LCDRh9C1INCy0YHQuNGH0LrQuCDQvtCx0LXQutGC0Lgg0LzQvtCz0LDRgiDRgdCwINC00L7RgdGC0LjQttC40LzQuCDQv9GA0Lgg0LfQsNC/0L7Rh9Cy0LDQvdC1INC+0YIg0YLQvtC30LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxOTkKK21zZ2lkICJydW4gJ2djIC0tYXV0bycgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgItC40LfQv9GK0LvQvdGP0LLQsNC90LUg0L3QsCDigJ5nYyAtLWF1dG/igJwg0YHQu9C10LQg0LTQvtGB0YLQsNCy0Y/QvdC1IgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAxIGJ1aWx0aW4vcHVsbC5jOjIyNgorbXNnaWQgImNoZWNrIGZvciBmb3JjZWQtdXBkYXRlcyBvbiBhbGwgdXBkYXRlZCBicmFuY2hlcyIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LrQsCDQt9CwINC/0YDQuNC90YPQtNC40YLQtdC70L3QuCDQvtCx0L3QvtCy0Y/QstCw0L3QuNGPINC90LAg0LLRgdC40YfQutC4INC60LvQvtC90LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDMKK21zZ2lkICJ3cml0ZSB0aGUgY29tbWl0LWdyYXBoIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICLQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDRgdC70LXQtCDQtNC+0YHRgtCw0LLRj9C90LUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MTMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQsiDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlndXJhdGlvbiBmZXRjaC5vdXRwdXQgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAlcyIKK21zZ3N0ciAi0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5mZXRjaC5vdXRwdXTigJwg0LUg0YEg0L3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1MQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgiDigJ4lc+KAnCDQu9C40L/RgdCy0LAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTUKK21zZ2lkICJbdXAgdG8gZGF0ZV0iCittc2dzdHIgIlvQsNC60YLRg9Cw0LvQuNC30LjRgNCw0L1dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY4IGJ1aWx0aW4vZmV0Y2guYzo3ODQgYnVpbHRpbi9mZXRjaC5jOjg1NgorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIlvQvtGC0YXQstGK0YDQu9C10L1dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY5Cittc2dpZCAiY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2giCittc2dzdHIgItCyINGC0LXQutGD0YnQuNGPINC60LvQvtC9INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC00L7RgdGC0LDQstGPIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzc5Cittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICJb0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQtdGC0LjQutC10YLQuNGC0LVdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzgwIGJ1aWx0aW4vZmV0Y2guYzo4MTcgYnVpbHRpbi9mZXRjaC5jOjgzOQorIzogYnVpbHRpbi9mZXRjaC5jOjg1MQorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICLQu9C+0LrQsNC70LXQvSDRg9C60LDQt9Cw0YLQtdC7INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4NAorbXNnaWQgIndvdWxkIGNsb2JiZXIgZXhpc3RpbmcgdGFnIgorbXNnc3RyICLRgdGK0YnQtdGB0YLQstGD0LLQsNGJINC10YLQuNC60LXRgiDRidC1INCx0YrQtNC1INC/0YDQtdC30LDQv9C40YHQsNC9IgorCisjOiBidWlsdGluL2ZldGNoLmM6ODA2Cittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICJb0L3QvtCyINC10YLQuNC60LXRgl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDkKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIlvQvdC+0LIg0LrQu9C+0L1dIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODEyCittc2dpZCAiW25ldyByZWZdIgorbXNnc3RyICJb0L3QvtCyINGD0LrQsNC30LDRgtC10LtdIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC+0LHQvdC+0LLRj9Cy0LDQvdC1IgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAi0YHRitGJ0LjQvdGB0LrQviDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg3NworbXNnaWQgIiIKKyJGZXRjaCBub3JtYWxseSBpbmRpY2F0ZXMgd2hpY2ggYnJhbmNoZXMgaGFkIGEgZm9yY2VkIHVwZGF0ZSxcbiIKKyJidXQgdGhhdCBjaGVjayBoYXMgYmVlbiBkaXNhYmxlZC4gVG8gcmUtZW5hYmxlLCB1c2UgJy0tc2hvdy1mb3JjZWQtdXBkYXRlcydcbiIKKyJmbGFnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJy4iCittc2dzdHIgIiIKKyLQl9CwINC00LAg0Y8g0LLQutC70Y7Rh9C40YLQtSDQtdC00L3QvtC60YDQsNGC0L3QviDQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1zaG93LWZvcmNlZC11cGRhdGVz4oCcLCDQsCDQt9CwICIKKyLQtNCwINGPINCy0LrQu9GO0YfQuNGC0LUg0LfQsCDQv9C+0YHRgtC+0Y/QvdC90L4sINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjaGVjayBmb3JjZWQgdXBkYXRlcy4gWW91IGNhbiB1c2VcbiIKKyInLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgIgorImZhbHNlJ1xuIgorIiB0byBhdm9pZCB0aGlzIGNoZWNrLlxuIgorbXNnc3RyICIiCisi0J/RgNC+0LLQtdGA0LrQsNGC0LAg0LfQsCDQv9GA0LjQvdGD0LTQuNGC0LXQu9C90Lgg0LjQt9GC0LvQsNGB0LrQstCw0L3QuNGPINC+0YLQvdC1ICUuMmYg0YHQtdC6LiAg0JzQvtC20LUg0LTQsCDRjyDQv9GA0LXRgdC60L7Rh9C40YLQtSAiCisi0LXQtNC90L7QutGA0LDRgtC90L4g0YEg0L7Qv9GG0LjRj9GC0LAg4oCeLS1uby1zaG93LWZvcmNlZC11cGRhdGVz4oCcLCDQsCDQt9CwINC00LAg0Y8g0LjQt9C60LvRjtGH0LjRgtC1INC30LAgIgorItC/0L7RgdGC0L7Rj9C90L3Qviwg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIGZhbHNlXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICLRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IOKAniVz4oCcINC90LUg0LjQt9C/0YDQsNGC0Lgg0LLRgdC40YfQutC4INC90LXQvtCx0YXQvtC00LjQvNC4INC+0LHQtdC60YLQuFxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTQxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgIiIKKyLQvtGC0YXQstGK0YDQu9GP0L3QtSDQvdCwINCy0YrRgNGF0LAg4oCeJXPigJwsINC30LDRidC+0YLQviDQv9C70LjRgtC60LjRgtC1INGF0YDQsNC90LjQu9C40YnQsCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCICIKKyLQvtCx0L3QvtCy0Y/QstCw0L3QuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMjYgYnVpbHRpbi9mZXRjaC5jOjExNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgItCe0YIgJS4qc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisi0L3Rj9C60L7QuCDQu9C+0LrQsNC70L3QuCDRg9C60LDQt9Cw0YLQtdC70Lgg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQvtCx0L3QvtCy0LXQvdC4LiAg0JjQt9C/0YrQu9C90LXRgtC1INC60L7QvNCw0L3QtNCw0YLQsFxuIgorIuKAnmdpdCByZW1vdGUgcHJ1bmUgJXPigJwsINC30LAg0LTQsCDQv9GA0LXQvNCw0YXQvdC10YLQtSDQvtGB0YLQsNGA0LXQu9C40YLQtSDQutC70L7QvdC4LCDQutC+0LjRgtC+XG4iCisi0L/RgNC10LTQuNC30LLQuNC60LLQsNGCINC60L7QvdGE0LvQuNC60YLQsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKNC+0LHQtdC60YLRitGCIOKAniVz4oCcINGJ0LUg0YHQtSDQvtC60LDQttC1INC40LfQstGK0L0g0LrQu9C+0L0pIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICjQvtCx0LXQutGC0YrRgiDigJ4lc+KAnCDQstC10YfQtSDQtSDQuNC30LLRitC9INC60LvQvtC9KSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNjcKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIlvQuNC30YLRgNC40YJdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2OCBidWlsdGluL3JlbW90ZS5jOjExMTIKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIijQvdC40YnQvikiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINC00L7RgdGC0LDQstC40YLQtSDQsiDRgtC10LrRg9GJ0LjRjyDQutC70L7QvSDigJ4lc+KAnCDQvdCwINGF0YDQsNC90LjQu9C40YnQtSwg0LrQvtC10YLQviDQvdC1INC1INCz0L7Qu9C+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIHZhbHVlIFwiJXNcIiBpcyBub3QgdmFsaWQgZm9yICVzIgorbXNnc3RyICLQodGC0L7QudC90L7RgdGC0YLQsCDigJ4lMiRz4oCcINC30LAg0L7Qv9GG0LjRj9GC0LAg4oCeJTEkc+KAnCDQvdC1INC1INGB0YrQstC80LXRgdGC0LjQvNCwINGBIOKAniUzJHPigJwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0YHQtSDQv9GA0LXRgdC60LDRh9CwINC/0YDQuCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQyMQorbXNnaWQgIm11bHRpcGxlIGJyYW5jaGVzIGRldGVjdGVkLCBpbmNvbXBhdGlibGUgd2l0aCAtLXNldC11cHN0cmVhbSIKK21zZ3N0ciAiIgorItC30LDRgdC10YfQtdC90Lgg0YHQsCDQvNC90L7QttC10YHRgtCy0L4g0LrQu9C+0L3QuCwg0YLQvtCy0LAg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC+INGBINC+0L/RhtC40Y/RgtCwIOKAni0tc2V0LXVwc3RyZWFt4oCcIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzNgorbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YPQutCw0LfQstCw0YLQtSDQutC70L7QvSDQt9CwINGB0LvQtdC00LXQvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC9INC10YLQuNC60LXRgiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzgKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgdGFnIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YPQutCw0LfQstCw0YLQtSDQutC70L7QvSDQt9CwINGB0LvQtdC00LXQvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC9INC10YLQuNC60LXRgiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NDAKK21zZ2lkICJ1bmtub3duIGJyYW5jaCB0eXBlIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINCy0LjQtCDQutC70L7QvSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NDIKK21zZ2lkICIiCisibm8gc291cmNlIGJyYW5jaCBmb3VuZC5cbiIKKyJ5b3UgbmVlZCB0byBzcGVjaWZ5IGV4YWN0bHkgb25lIGJyYW5jaCB3aXRoIHRoZSAtLXNldC11cHN0cmVhbSBvcHRpb24uIgorbXNnc3RyICIiCisi0L3QtSDQtSDQvtGC0LrRgNC40YIg0LrQu9C+0L0g0LfQsCDRgdC70LXQtNC10L3QtS5cbiIKKyLQotGA0Y/QsdCy0LAg0LjQt9GA0LjRh9C90L4g0LTQsCDQt9Cw0LTQsNC00LXRgtC1INC10LTQuNC9INC60LvQvtC9INGBINC+0L/RhtC40Y/RgtCwIOKAni0tc2V0LXVwc3RyZWFtIG9wdGlvbuKAnC4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTY4IGJ1aWx0aW4vZmV0Y2guYzoxNjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgItCU0L7RgdGC0LDQstGP0L3QtSDQvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTc4IGJ1aWx0aW4vZmV0Y2guYzoxNjMzIGJ1aWx0aW4vcmVtb3RlLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTQvtGB0YLQsNCy0LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmZXRjaCAnJXMnIChleGl0IGNvZGU6ICVkKVxuIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQtNC+0YHRgtCw0LLQuCAo0LjQt9GF0L7QtNC90LjRj9GCINC60L7QtCDQtTogJWQpXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjkzCittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyLQndC1INGB0YLQtSDRg9C60LDQt9Cw0LvQuCDQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUuICDQl9Cw0LTQsNC50YLQtSDQuNC70Lgg0LDQtNGA0LXRgSwg0LjQu9C4INC40LzQtVxuIgorItC90LAg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1LCDQvtGC0LrRitC00LXRgtC+INC00LAg0YHQtSDQtNC+0YHRgtCw0LLRj9GCINC90L7QstC40YLQtSDQstC10YDRgdC40LguIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTczMAorbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgItCi0YDRj9Cx0LLQsCDQtNCwINGD0LrQsNC20LXRgtC1INC40LzQtSDQvdCwINC10YLQuNC60LXRgi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzgwCittc2dpZCAiTmVnYXRpdmUgZGVwdGggaW4gLS1kZWVwZW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi0J7RgtGA0LjRhtCw0YLQtdC70L3QsCDQtNGK0LvQsdC+0YfQuNC90LAg0LrQsNGC0L4g0LDRgNCz0YPQvNC10L3RgiDQvdCwIOKAni0tZGVlcGVu4oCcINC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc4MgorbXNnaWQgIi0tZGVlcGVuIGFuZCAtLWRlcHRoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tZGVlcGVu4oCcINC4IOKAni0tZGVwdGjigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzg3Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tZGVwdGjigJwg0Lgg4oCeLS11bnNoYWxsb3figJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzg5Cittc2dpZCAiLS11bnNoYWxsb3cgb24gYSBjb21wbGV0ZSByZXBvc2l0b3J5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgItC90LUg0LzQvtC20LXRgtC1INC00LAg0LjQt9C/0L7Qu9C30LLQsNGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS11bnNoYWxsb3figJwg0LLRitGA0YXRgyDQv9GK0LvQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MDUKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAi0LrRitC8IOKAnmdpdCBmZXRjaCAtLWFsbOKAnCDQvdC1INC80L7QttC10YLQtSDQtNCwINC00L7QsdCw0LLQuNGC0LUg0LDRgNCz0YPQvNC10L3RgiDigJQg0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwNworbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiIgorItC60YrQvCDigJ5naXQgZmV0Y2ggLS1hbGzigJwg0L3QtSDQvNC+0LbQtdGC0LUg0LTQsCDQtNC+0LHQsNCy0LjRgtC1INCw0YDQs9GD0LzQtdC90YIg4oCUINGD0LrQsNC30LDRgtC10Lsg0L3QsCDQstC10YDRgdC40Y8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODE2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgItCd0Y/QvNCwINC90LjRgtC+INC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSwg0L3QuNGC0L4g0LPRgNGD0L/QsCDQvtGCINGF0YDQsNC90LjQu9C40YnQsCDQvdCwINC40LzQtSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MjMKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgItCj0LrQsNC30LLQsNC90LXRgtC+INC90LAg0LPRgNGD0L/QsCDQuCDRg9C60LDQt9Cy0LDQvdC10YLQviDQvdCwINCy0LXRgNGB0LjRjyDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NDEKK21zZ2lkICIiCisiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyJwYXJ0aWFsY2xvbmUiCittc2dzdHIgIiIKKyLQvtC/0YbQuNGP0YLQsCDigJ4tLWZpbHRlcuKAnCDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtC70LfQstCwINGB0LDQvNC+INGBINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0YPQutCw0LfQsNC90L4g0LIgIgorItC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeZXh0ZW5zaW9ucy5wYXJ0aWFsQ2xvbmXigJwiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjE4Cittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0g0KHQqtCe0JHQqdCV0J3QmNCVXSBbLS1sb2dbPdCR0KDQntCZXSB8IC0tbm8tbG9nXSBbLS1maWxlINCk0JDQmdCbXSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcxCittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICIiCisi0LLQvNGK0LrQstCw0L3QtSDQvdCwINC20YPRgNC90LDQuyDRgdGK0YHRgtC+0Y/RiSDRgdC1INC+0YIg0L3QtSDQv9C+0LLQtdGH0LUg0L7RgiDQkdCg0J7QmSDQt9Cw0L/QuNGB0LAg0L7RgiDRgdGK0LrRgNCw0YLQtdC90LjRjyAiCisi0LbRg9GA0L3QsNC7IgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzQKK21zZ2lkICJhbGlhcyBmb3IgLS1sb2cgKGRlcHJlY2F0ZWQpIgorbXNnc3RyICLQv9GB0LXQstC00L7QvdC40Lwg0L3QsCDigJ4tLWxvZ+KAnCAo0J7QodCi0JDQoNCv0JvQnikiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NworbXNnaWQgInRleHQiCittc2dzdHIgItCi0JXQmtCh0KIiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3OAorbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAi0LfQsCDQvdCw0YfQsNC70L4g0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC00LAg0YHQtSDQv9C+0LvQt9Cy0LAg0KLQldCa0KHQoiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc5Cittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgItGE0LDQudC7LCDQvtGCINC60L7QudGC0L4g0LTQsCDRgdC1INGH0LXRgtC1IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBb0J7Qn9Cm0JjQr+KApl0gW9Co0JDQkdCb0J7QnV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTEKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzINCe0JHQldCa0KJdIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEyCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8Y29tbWl0Pl1dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBb0J/QntCU0JDQktCQ0J3QlV1dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEzCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPGNvbW1pdD5dXSBbLS1uby1jb250YWlucyBbPGNvbW1pdD5dXSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBb0J/QntCU0JDQktCQ0J3QlV1dIFstLW5vLWNvbnRhaW5zIFvQn9Ce0JTQkNCS0JDQndCVXV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjgKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAi0YbQuNGC0LjRgNCw0L3QtSDQv9C+0LTRhdC+0LTRj9GJ0L4g0LfQsCDQutC+0LzQsNC90LTQvdC4INC40L3RgtC10YDQv9GA0LXRgtCw0YLQvtGA0Lgg0L3QsCDQvtCx0LLQuNCy0LrQsNGC0LAiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgItGG0LjRgtC40YDQsNC90LUg0L/QvtC00YXQvtC00Y/RidC+INC30LAgcGVybCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICLRhtC40YLQuNGA0LDQvdC1INC/0L7QtNGF0L7QtNGP0YnQviDQt9CwIHB5dGhvbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgVGNsIgorbXNnc3RyICLRhtC40YLQuNGA0LDQvdC1INC/0L7QtNGF0L7QtNGP0YnQviDQt9CwIHRjbCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNworbXNnaWQgInNob3cgb25seSA8bj4gbWF0Y2hlZCByZWZzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDRgtC+0LfQuCDQkdCg0J7QmSDQvdCw0L/QsNGB0L3QsNGC0Lgg0YPQutCw0LfQsNGC0LXQu9C4IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM5IGJ1aWx0aW4vdGFnLmM6NDM5Cittc2dpZCAicmVzcGVjdCBmb3JtYXQgY29sb3JzIgorbXNnc3RyICLRgdC/0LDQt9Cy0LDQvdC1INC90LAg0YbQstC10YLQvtCy0LXRgtC1INC90LAg0YTQvtGA0LzQsMyA0YLQsCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBwb2ludHMgYXQgdGhlIGdpdmVuIG9iamVjdCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSwg0YHQvtGH0LXRidC4INC60YrQvCDQntCR0JXQmtCi0JAiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDQKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDRgdC70LXRgtC40YLQtSDRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDUKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0L3QtdGB0LvQtdGC0LjRgtC1INGD0LrQsNC30LDRgtC10LvQuCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUsINC60L7QuNGC0L4g0YHRitC00YrRgNC20LDRgiDRgtC+0LLQsCDQn9Ce0JTQkNCS0JDQndCVIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ3Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSwg0LrQvtC40YLQviDQvdC1INGB0YrQtNGK0YDQttCw0YIg0YLQvtCy0LAg0J/QntCU0JDQktCQ0J3QlSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjggYnVpbHRpbi9mc2NrLmM6MTQ3IGJ1aWx0aW4vZnNjay5jOjE0OAorbXNnaWQgInVua25vd24iCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIGVycm9yIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjEwMCBidWlsdGluL2ZzY2suYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gJXMgJXM6ICVzIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0LIgJXMg4oCeJXPigJw6ICVzIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiB3YXJuaW5nIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nIGluICVzICVzOiAlcyIKK21zZ3N0ciAi0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSDQt9CwICVzIOKAniVz4oCcOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MTQzIGJ1aWx0aW4vZnNjay5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJicm9rZW4gbGluayBmcm9tICU3cyAlcyIKK21zZ3N0ciAi0YHQutGK0YHQsNC90LAg0LLRgNGK0LfQutCwINC+0YIgJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoxNTUKK21zZ2lkICJ3cm9uZyBvYmplY3QgdHlwZSBpbiBsaW5rIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQstC40LQg0L7QsdC10LrRgiDQstGK0LIg0LLRgNGK0LfQutCw0YLQsCIKKworIzogYnVpbHRpbi9mc2NrLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJicm9rZW4gbGluayBmcm9tICU3cyAlc1xuIgorIiAgICAgICAgICAgICAgdG8gJTdzICVzIgorbXNnc3RyICIiCisi0YHQutGK0YHQsNC90LAg0LLRgNGK0LfQutCwINC+0YIgJTdzICVzXG4iCisiICAgICAgICAgICAgICDQutGK0LwgJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyAlcyIKK21zZ3N0ciAi0LvQuNC/0YHQstCw0Ykg0L7QsdC10LrRgjogJXMg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlYWNoYWJsZSAlcyAlcyIKK21zZ3N0ciAi0L3QtdC00L7RgdGC0LjQttC40Lwg0L7QsdC10LrRgjogJXMg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJkYW5nbGluZyAlcyAlcyIKK21zZ3N0ciAi0LjQt9Cy0YrQvSDQutC70L7QvTogJXMg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMzOQorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbG9zdC1mb3VuZCIKK21zZ3N0ciAi4oCebG9zdC1mb3VuZOKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGK0LfQtNCw0LTQtSIKKworIzogYnVpbHRpbi9mc2NrLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNCy0YrRgNGI0LgiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2ZzY2suYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5ICglZCBvYmplY3RzKSIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQvdCwINGB0LLRitGA0LfQsNC90L7RgdGC0YLQsCAoJWQg0L7QsdC10LrRgtCwKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzICVzIgorbXNnc3RyICLQn9GA0L7QstC10YDRj9Cy0LDQvdC1INC90LAgJXMg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyOQorbXNnaWQgImJyb2tlbiBsaW5rcyIKK21zZ3N0ciAi0YHQutGK0YHQsNC90Lgg0LLRgNGK0LfQutC4IgorCisjOiBidWlsdGluL2ZzY2suYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCAlcyIKK21zZ3N0ciAi0L3QsNGH0LDQu9C90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWdnZWQgJXMgJXMgKCVzKSBpbiAlcyIKK21zZ3N0ciAi0L/RgNC40LvQvtC20LXQvSDQtdGC0LjQutC10YIg4oCeJXPigJwg0LLRitGA0YXRgyDigJ4lc+KAnCAoJXMpINCyIOKAniVz4oCcIgorCisjOiBidWlsdGluL2ZzY2suYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3NpbmciCittc2dzdHIgIiVzOiDQu9C40L/RgdCy0LDRiSDQuNC70Lgg0L/QvtCy0YDQtdC00LXQvSDQvtCx0LXQutGCIgorCisjOiBidWlsdGluL2ZzY2suYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgcmVmbG9nIGVudHJ5ICVzIgorbXNnc3RyICIlczog0L3QtdC/0YDQsNCy0LjQu9C10L0g0LfQsNC/0LjRgSDQsiDQttGD0YDQvdCw0LvQsCDQt9CwINGD0LrQsNC30LDRgtC10LvQuCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9mc2NrLmM6NTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlZmxvZyAlcy0+JXMiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L3QsCDQttGD0YDQvdCw0LvQsCDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LU6IOKAniVz4oCcINC00L4g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgJXMiCittc2dzdHIgIuKAniVz4oCcOiDQvdC10L/RgNCw0LLQuNC70LXQvSDRg9C60LDQt9Cw0YLQtdC7INC30LAgU0hBMTog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm90IGEgY29tbWl0IgorbXNnc3RyICIlczog0L3QtSDQtSDQv9C+0LTQsNCy0LDQvdC1ISIKKworIzogYnVpbHRpbi9mc2NrLmM6NjA5Cittc2dpZCAibm90aWNlOiBObyBkZWZhdWx0IHJlZmVyZW5jZXMiCittc2dzdHIgItCy0L3QuNC80LDQvdC40LU6INC90Y/QvNCwINGD0LrQsNC30LDRgtC10LvQuCDQv9C+INC/0L7QtNGA0LDQt9Cx0LjRgNCw0L3QtSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nOiAlcyIKK21zZ3N0ciAi4oCeJXPigJw6INC70LjQv9GB0LLQsNGJINC+0LHQtdC60YI6IOKAniVz4oCcIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3VsZCBub3QgYmUgcGFyc2VkOiAlcyIKK21zZ3N0ciAi4oCeJXPigJw6INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY1NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc2hhMSBmaWxlOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YDQtdC0INGBINC60L7QvdGC0YDQvtC70L3QsCDRgdGD0LzQsCDQv9C+IFNIQTE6IOKAniVz4oCcIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzIKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3J5IgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0YEg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL2ZzY2suYzo2NzUKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L3QsCDQtNC40YDQtdC60YLQvtGA0LjQuNGC0LUg0YEg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL2ZzY2suYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMgbGluayIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQvdCwINCy0YDRitC30LrQuNGC0LUg0L3QsCDigJ4lc+KAnCIKKworIworIzogYnVpbHRpbi9mc2NrLmM6Njk1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRg9C60LDQt9Cw0YLQtdC7IOKAniVz4oCcIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIHRvIHNvbWV0aGluZyBzdHJhbmdlICglcykiCittc2dzdHIgIuKAniVz4oCcINGB0L7Rh9C4INC60YrQvCDQvdC10YnQviDQvdC10L7QsdC40YfQsNC50L3QviAoJXMpIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRldGFjaGVkIEhFQUQgcG9pbnRzIGF0IG5vdGhpbmciCittc2dzdHIgIiVzOiDQvdC10YHQstGK0YDQt9Cw0L3QuNGP0YIg0LLRgNGK0YUg4oCeSEVBROKAnCDQvdC1INGB0L7Rh9C4INC60YrQvCDQvdC40YnQviIKKworIzogYnVpbHRpbi9mc2NrLmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGljZTogJXMgcG9pbnRzIHRvIGFuIHVuYm9ybiBicmFuY2ggKCVzKSIKK21zZ3N0ciAi0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtTog4oCeJXPigJwg0YHQvtGH0Lgg0LrRitC8INCy0YHQtSDQvtGJ0LUg0L3QtdGB0YrRidC10YHRgtCy0YPQstCw0Ykg0LrQu9C+0L0gKCVzKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI0Cittc2dpZCAiQ2hlY2tpbmcgY2FjaGUgdHJlZSIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQvdCwINC00YrRgNCy0L7RgtC+INC90LAg0LrQtdGI0LAiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAi4oCeJXPigJw6INC90LXQv9GA0LDQstC40LvQtdC9INGD0LrQsNC30LDRgtC10Lsg0LfQsCBTSEExINCyINC00YrRgNCy0L7RgtC+INC90LAg0LrQtdGI0LAiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjczOAorbXNnaWQgIm5vbi10cmVlIGluIGNhY2hlLXRyZWUiCittc2dzdHIgItCyINC00YrRgNCy0L7RgtC+INC90LAg0LrQtdGI0LAg0LjQvNCwINC90LXRidC+LCDQutC+0LXRgtC+INC90LUg0LUg0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9mc2NrLmM6NzY5Cittc2dpZCAiZ2l0IGZzY2sgWzxvcHRpb25zPl0gWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IGZzY2sgW9Ce0J/QptCY0K/igKZdIFvQntCR0JXQmtCi4oCmXSIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc1Cittc2dpZCAic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDQvdC10LTQvtGB0YLQuNC20LjQvNC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NgorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSDQuNC30LLRitC9INC60LvQvtC90LjRgtC1IgorCisjOiBidWlsdGluL2ZzY2suYzo3NzcKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0LXRgtC40LrQtdGC0LjRgtC1IgorCisjOiBidWlsdGluL2ZzY2suYzo3NzgKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0LrQvtGA0LXQvdC+0LLQuNGC0LUg0LLRitC30LvQuCIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc5Cittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgItC30LDQtNCw0LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0Lgg0L7RgiDQuNC90LTQtdC60YHQsCDQtNCwINGB0LAg0LrQvtGA0LXQvdC+0LLQuCIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgwCittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICLQv9GA0L7RgdC70LXQtNGP0LLQsNC90LUg0Lgg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC+0YIg0LbRg9GA0L3QsNC70LAg0YEg0YPQutCw0LfQsNGC0LXQu9C40YLQtSAo0YHRgtCw0L3QtNCw0YDRgtC90L4pIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODEKK21zZ2lkICJhbHNvIGNvbnNpZGVyIHBhY2tzIGFuZCBhbHRlcm5hdGUgb2JqZWN0cyIKK21zZ3N0ciAi0LTQvtC/0YrQu9C90LjRgtC10LvQvdC+INC00LAg0YHQtSDQv9GA0L7QstC10YDRj9Cy0LDRgiDQv9Cw0LrQtdGC0LjRgtC1INC4INCw0LvRgtC10YDQvdCw0YLQuNCy0L3QuNGC0LUg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL2ZzY2suYzo3ODIKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LrQsCDRgdCw0LzQviDQvdCwINCy0YDRitC30LrQsNGC0LAiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MworbXNnaWQgImVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZyIKK21zZ3N0ciAi0L/Qvi3RgdGC0YDQvtCz0Lgg0L/RgNC+0LLQtdGA0LrQuCIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg1Cittc2dpZCAid3JpdGUgZGFuZ2xpbmcgb2JqZWN0cyBpbiAuZ2l0L2xvc3QtZm91bmQiCittc2dzdHIgItC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC+0LHQtdC60YLQuNGC0LUg0LjQt9Cy0YrQvSDQutC70L7QvdC40YLQtSDQsiDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeLmdpdC9sb3N0LWZvdW5k4oCcIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODYgYnVpbHRpbi9wcnVuZS5jOjEzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC90LDQv9GA0LXQtNGK0LrQsCIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg3Cittc2dpZCAic2hvdyB2ZXJib3NlIG5hbWVzIGZvciByZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0L/QvtC00YDQvtCx0L3QuCDQuNC80LXQvdCwINC90LAg0LTQvtGB0YLQuNC20LjQvNC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg0NiBidWlsdGluL2luZGV4LXBhY2suYzoyMjUKK21zZ2lkICJDaGVja2luZyBvYmplY3RzIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC90LAg0L7QsdC10LrRgtC40YLQtSIKKworIzogYnVpbHRpbi9mc2NrLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgbWlzc2luZyIKK21zZ3N0ciAi4oCeJXPigJw6INC70LjQv9GB0LLQsNGJINC+0LHQtdC60YIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlcjogZXhwZWN0ZWQgc2hhMSwgZ290ICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC/0LDRgNCw0LzQtdGC0YrRgDog0L7Rh9Cw0LrQstCwINGB0LUgU0hBMSwg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvdC+OiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9nYy5jOjM1Cittc2dpZCAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZ2MgW9Ce0J/QptCY0K/igKZdIgorCisjOiBidWlsdGluL2djLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZzdGF0ICVzOiAlcyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeZnN0YXTigJwg0LLRitGA0YXRgyDigJ4lc+KAnDogJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlICclcycgdmFsdWUgJyVzJyIKK21zZ3N0ciAi0YHRgtC+0LnQvdC+0YHRgtGC0LAg0L3QsCDigJ4lc+KAnCDigJQg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwIgorCisjOiBidWlsdGluL2djLmM6NDc1IGJ1aWx0aW4vaW5pdC1kYi5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9GD0YfQuCDQuNC90YTQvtGA0LzQsNGG0LjRjyDRh9GA0LXQtyDigJ5zdGF04oCcINC30LAg0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2djLmM6NDg0IGJ1aWx0aW4vbm90ZXMuYzoyNDAgYnVpbHRpbi90YWcuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL2djLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbGFzdCBnYyBydW4gcmVwb3J0ZWQgdGhlIGZvbGxvd2luZy4gUGxlYXNlIGNvcnJlY3QgdGhlIHJvb3QgY2F1c2VcbiIKKyJhbmQgcmVtb3ZlICVzLlxuIgorIkF1dG9tYXRpYyBjbGVhbnVwIHdpbGwgbm90IGJlIHBlcmZvcm1lZCB1bnRpbCB0aGUgZmlsZSBpcyByZW1vdmVkLlxuIgogIlxuIgogIiVzIgogbXNnc3RyICIiCi0i0J/RgNC+0LPRgNCw0LzQsNGC0LAg0LfQsCDRgdC70LjQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRgtCw0YDRgtC40YDQsNC90LA6XG4iCisi0J/RgNC4INC/0L7RgdC70LXQtNC90L7RgtC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeZ2l0IGdj4oCcINCx0LUg0LTQvtC60LvQsNC00LLQsNC90LAg0LPRgNC10YjQutCwLiAg0JrQvtGA0LjQs9C40YDQsNC50YLQtSAiCisi0L/RgNC40YfQuNC90LDRgtCwINC30LBcbiIKKyLQvdC10Y8g0Lgg0LjQt9GC0YDQuNC50YLQtSDigJ4lc+KAnC5cbiIKKyLQkNCy0YLQvtC80LDRgtC40YfQvdC+0YLQviDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCx0L7QutC70YPQutCwINC90Y/QvNCwINC00LAg0YDQsNCx0L7RgtC4LCDQv9GA0LXQtNC4INC00LAg0LjQt9GC0YDQuNC10YLQtSAiCisi0YTQsNC50LvQsC5cbiIKICJcbiIKICIlcyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzU0Ci1tc2dpZCAiUnVubmluZyBtZXJnZSB0b29sLi4uIgotbXNnc3RyICLQodGC0LDRgNGC0LjRgNCw0L3QtSDQvdCwINC/0YDQvtCz0YDQsNC80LDRgtCwINC30LAg0YHQu9C40LLQsNC90LXigKYiCisjOiBidWlsdGluL2djLmM6NTM5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgItC+0LrQsNGB0YLRgNGP0L3QtSDQvdCwINC+0LHQtdC60YLQuNGC0LUsINC60YrQvCDQutC+0LjRgtC+INC90LjRidC+INC90LUg0YHQvtGH0LgiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM4MiBsaWIvbWVyZ2V0b29sLnRjbDozOTAKLW1zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCi1tc2dzdHIgItCT0YDQtdGI0LrQsCDQsiDQv9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9CwINGB0LvQuNCy0LDQvdC1LiIKKyM6IGJ1aWx0aW4vZ2MuYzo1NDEKK21zZ2lkICJiZSBtb3JlIHRob3JvdWdoIChpbmNyZWFzZWQgcnVudGltZSkiCittc2dzdHIgItC40LfRh9C10YDQv9Cw0YLQtdC70L3QviDRgtGK0YDRgdC10L3QtSDQvdCwINCx0L7QutC70YPQutCwICjQt9CwINGB0LzQtdGC0LrQsCDQvdCwINC/0L7QstC10YfQtSDQstGA0LXQvNC1INGA0LDQsdC+0YLQsCkiCiAKLSM6IGxpYi9vcHRpb24udGNsOjExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKLW1zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90L4g0LPQu9C+0LHQsNC70L3QviDQutC+0LTQuNGA0LDQvdC1IOKAniVz4oCcIgorIzogYnVpbHRpbi9nYy5jOjU0MgorbXNnaWQgImVuYWJsZSBhdXRvLWdjIG1vZGUiCittc2dzdHIgItCy0LrQu9GO0YfQstCw0L3QtSDQvdCwINCw0LLRgtC+0LzQsNGC0LjRh9C90L7RgtC+INGB0YrQsdC40YDQsNC90LUg0L3QsCDQsdC+0LrQu9GD0LrQsCAoYXV0by1nYykiCiAKLSM6IGxpYi9vcHRpb24udGNsOjE5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCByZXBvIGVuY29kaW5nICclcyciCi1tc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdC+INC60L7QtNC40YDQsNC90LUg4oCeJXPigJwg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IgorIzogYnVpbHRpbi9nYy5jOjU0NQorbXNnaWQgImZvcmNlIHJ1bm5pbmcgZ2MgZXZlbiBpZiB0aGVyZSBtYXkgYmUgYW5vdGhlciBnYyBydW5uaW5nIgorbXNnc3RyICIiCisi0LjQt9GA0LjRh9C90L4g0YHRgtCw0YDRgtC40YDQsNC90LUg0L3QsCDRgdGK0LHQuNGA0LDQvdC10YLQviDQvdCwINCx0L7QutC70YPQutCwLCDQtNC+0YDQuCDQuCDQsNC60L4g0LLQtdGH0LUg0YDQsNCx0L7RgtC4INC00YDRg9Cz0L4gIgorItGB0YrQsdC40YDQsNC90LUiCiAKLSM6IGxpYi9vcHRpb24udGNsOjExOQotbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCi1tc2dzdHIgItCh0YLQsNC90LTQsNGA0YLQvdC4INC90LDRgdGC0YDQvtC50LrQuCIKKyM6IGJ1aWx0aW4vZ2MuYzo1NDgKK21zZ2lkICJyZXBhY2sgYWxsIG90aGVyIHBhY2tzIGV4Y2VwdCB0aGUgbGFyZ2VzdCBwYWNrIgorbXNnc3RyICLQv9GA0LXQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQviDQsdC10Lcg0L3QsNC5LdCz0L7Qu9C10LzQuNGPINC/0LDQutC10YIiCiAKLSM6IGxpYi9vcHRpb24udGNsOjEyMwotbXNnaWQgIlNhdmUiCi1tc2dzdHIgItCX0LDQv9Cw0LfQstCw0L3QtSIKKyM6IGJ1aWx0aW4vZ2MuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGdjLmxvZ2V4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAi0L3QtdGA0LDQt9C/0L7Qt9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIg0L3QsCDigJ5nYy5sb2dleHBpcnnigJwgJXMiCiAKLSM6IGxpYi9vcHRpb24udGNsOjEzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIFJlcG9zaXRvcnkiCi1tc2dzdHIgItCl0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCIKKyM6IGJ1aWx0aW4vZ2MuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIHBydW5lIGV4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAi0L3QtdGA0LDQt9C/0L7Qt9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIg0L3QsCDQv9C10YDQuNC+0LTQsCDQt9CwINC+0LrQsNGB0YLRgNGP0L3QtTogJXMiCiAKLSM6IGxpYi9vcHRpb24udGNsOjEzNAotbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCi1tc2dzdHIgItCT0LvQvtCx0LDQu9C90L4gKNC30LAg0LLRgdC40YfQutC4INGF0YDQsNC90LjQu9C40YnQsCkiCisjOiBidWlsdGluL2djLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICIiCisi0JDQstGC0L7QvNCw0YLQuNGH0L3QviDQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdCwINC30LDQtNC10L0g0YTQvtC9INC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQviDQt9CwINC/0L4t0LTQvtCx0YDQsCAiCisi0L/RgNC+0LjQt9Cy0L7QtNC40YLQtdC70L3QvtGB0YIuXG4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjE0MAotbXNnaWQgIlVzZXIgTmFtZSIKLW1zZ3N0ciAi0J/QvtGC0YDQtdCx0LjRgtC10LvRgdC60L4g0LjQvNC1IgorIzogYnVpbHRpbi9nYy5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgItCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+INC30LAg0L/Qvi3QtNC+0LHRgNCwINC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9C90L7RgdGCLlxuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDEKLW1zZ2lkICJFbWFpbCBBZGRyZXNzIgotbXNnc3RyICLQkNC00YDQtdGBINC90LAg0LUt0L/QvtGJ0LAiCisjOiBidWlsdGluL2djLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1hbnVhbCBob3VzZWtlZXBpbmcuXG4iCittc2dzdHIgIiIKKyLQn9C+0LPQu9C10LTQvdC10YLQtSDRgNGK0LrQvtCy0L7QtNGB0YLQstC+0YLQviDQt9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQutCw0Log0LTQsCDQuNC30L/RitC70L3QuNGC0LUg4oCeZ2l0IGhlbHAgIgorImdj4oCcLlxuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDMKLW1zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKLW1zZ3N0ciAi0J7QsdC+0LHRidCw0LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC/0YDQuCDRgdC70LjQstCw0L3QtSIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ0Ci1tc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgotbXNnc3RyICLQn9C+0LTRgNC+0LHQvdC+0YHRgtC4INC/0YDQuCDRgdC70LjQstCw0L3QuNGP0YLQsCIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ1Ci1tc2dpZCAiU2hvdyBEaWZmc3RhdCBBZnRlciBNZXJnZSIKLW1zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRgtCw0YLQuNGB0YLQuNC60LAg0YHQu9C10LQg0YHQu9C40LLQsNC90LjRj9GC0LAiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0NgotbXNnaWQgIlVzZSBNZXJnZSBUb29sIgotbXNnc3RyICLQmNC30L/QvtC70LfQstCw0L3QtSDQvdCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDRgdC70LjQstCw0L3QtSIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ4Ci1tc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKLW1zZ3N0ciAi0JTQvtCy0LXRgNC40LUg0LLRitCyINCy0YDQtdC80LXRgtC+INC90LAg0L/RgNC+0LzRj9C90LAg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0OQotbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKLW1zZ3N0ciAi0J7QutCw0YHRgtGA0Y/QvdC1INC90LAg0YHQu9C10LTRj9GJ0LjRgtC1INC60LvQvtC90L7QstC1INC/0YDQuCDQtNC+0YHRgtCw0LLRj9C90LUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MAotbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgotbXNnc3RyICLQndCw0L/QsNGB0LLQsNC90LUg0L3QsCDRgdC70LXQtNGP0YnQuNGC0LUg0LrQu9C+0L3QvtCy0LUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MQotbXNnaWQgIlVzZSBUZXh0Y29udiBGb3IgRGlmZnMgYW5kIEJsYW1lcyIKLW1zZ3N0ciAi0JjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDigJ50ZXh0Y29uduKAnCDQt9CwINGA0LDQt9C70LjQutC40YLQtSDQuCDQsNC90L7RgtC40YDQsNC90LXRgtC+IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTIKLW1zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKLW1zZ3N0ciAi0JDQvdC+0YLQuNGA0LDQvdC1INC90LAg0LrQvtC/0LjQtdGC0L4g0YHQsNC80L4g0L/QviDQv9GA0L7QvNC10L3QtdC90LjRgtC1INGE0LDQudC70L7QstC1IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTMKLW1zZ2lkICJNYXhpbXVtIExlbmd0aCBvZiBSZWNlbnQgUmVwb3NpdG9yaWVzIExpc3QiCi1tc2dzdHIgItCc0LDQutGB0LjQvNCw0LvQtdC9INCx0YDQvtC5INC90LAg0YHQv9C40YHRitC60LAg4oCe0KHQutC+0YDQviDQv9C+0LvQt9Cy0LDQvdC44oCcINGF0YDQsNC90LjQu9C40YnQsCIKLQotIzogbGliL29wdGlvbi50Y2w6MTU0Ci1tc2dpZCAiTWluaW11bSBMZXR0ZXJzIFRvIEJsYW1lIENvcHkgT24iCi1tc2dzdHIgItCc0LjQvdC40LzQsNC70LXQvSDQsdGA0L7QuSDQt9C90LDRhtC4INC30LAg0LDQvdC+0YLQuNGA0LDQvdC1INC90LAg0LrQvtC/0LjQtdGC0L4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1NQotbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgotbXNnc3RyICLQmNGB0YLQvtGA0LjRh9C10YHQutC4INC+0LHRhdCy0LDRgiDQt9CwINCw0L3QvtGC0LjRgNCw0L3QtSDQsiDQtNC90LgiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1NgotbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCi1tc2dzdHIgItCR0YDQvtC5INGA0LXQtNC+0LLQtSDQt9CwINC60L7QvdGC0LXQutGB0YLQsCDQvdCwINGA0LDQt9C70LjQutC40YLQtSIKLQotIzogbGliL29wdGlvbi50Y2w6MTU3Ci1tc2dpZCAiQWRkaXRpb25hbCBEaWZmIFBhcmFtZXRlcnMiCi1tc2dzdHIgItCQ0YDQs9GD0LzQtdC90YLQuCDQutGK0Lwg0LrQvtC80LDQvdC00LDRgtCwINC30LAg0YDQsNC30LvQuNC60LjRgtC1IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTgKLW1zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgotbXNnc3RyICLQqNC40YDQvtGH0LjQvdCwINC90LAg0YLQtdC60YHRgtCwINC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSIKLQotIzogbGliL29wdGlvbi50Y2w6MTU5Ci1tc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgotbXNnc3RyICLQqNCw0LHQu9C+0L0g0LfQsCDQuNC80LXRgtC+INC90LAg0L3QvtCy0LjRgtC1INC60LvQvtC90LgiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE2MAotbXNnaWQgIkRlZmF1bHQgRmlsZSBDb250ZW50cyBFbmNvZGluZyIKLW1zZ3N0ciAi0JrQvtC00LjRgNCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSIKLQotIzogbGliL29wdGlvbi50Y2w6MTYxCi1tc2dpZCAiV2FybiBiZWZvcmUgY29tbWl0dGluZyB0byBhIGRldGFjaGVkIGhlYWQiCi1tc2dzdHIgItCf0YDQtdC00YPQv9GA0LXQttC00LDQstCw0L3QtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSDQutGK0Lwg0L3QtdGB0LLRitGA0LfQsNC9INGD0LrQsNC30LDRgtC10LsiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE2MgotbXNnaWQgIlN0YWdpbmcgb2YgdW50cmFja2VkIGZpbGVzIgotbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQutGK0Lwg0LjQvdC00LXQutGB0LAiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE2MwotbXNnaWQgIlNob3cgdW50cmFja2VkIGZpbGVzIgotbXNnc3RyICLQn9C+0LrQsNC30LLQsNC90LUg0L3QsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNjQKLW1zZ2lkICJUYWIgc3BhY2luZyIKLW1zZ3N0ciAi0KjQuNGA0LjQvdCwINC90LAg0YLQsNCx0YPQu9Cw0YbQuNGP0YLQsCIKLQotIzogbGliL29wdGlvbi50Y2w6MjEwCi1tc2dpZCAiQ2hhbmdlIgotbXNnc3RyICLQodC80Y/QvdCwIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyNTQKLW1zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKLW1zZ3N0ciAi0J/RgNCw0LLQvtC/0LjRgdC10L0g0YDQtdGH0L3QuNC6OiIKLQotIzogbGliL29wdGlvbi50Y2w6Mjg0Ci1tc2dpZCAiQ2hhbmdlIEZvbnQiCi1tc2dzdHIgItCh0LzRj9C90LAg0L3QsCDRiNGA0LjRhNGC0LAiCi0KLSM6IGxpYi9vcHRpb24udGNsOjI4OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNob29zZSAlcyIKLW1zZ3N0ciAi0JjQt9Cx0L7RgCDQvdCwIOKAniVz4oCcIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyOTQKLW1zZ2lkICJwdC4iCi1tc2dzdHIgItGC0YfQui4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjMwOAotbXNnaWQgIlByZWZlcmVuY2VzIgotbXNnc3RyICLQndCw0YHRgtGA0L7QudC60LgiCi0KLSM6IGxpYi9vcHRpb24udGNsOjM0NQotbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQvdCw0YHRgtGA0L7QudC60LjRgtC1OiIKLQotIzogbGliL3JlbW90ZS50Y2w6MjAwCi1tc2dpZCAiUHVzaCB0byIKLW1zZ3N0ciAi0JjQt9GC0LvQsNGB0LrQstCw0L3QtSDQutGK0LwiCi0KLSM6IGxpYi9yZW1vdGUudGNsOjIxOAotbXNnaWQgIlJlbW92ZSBSZW1vdGUiCi1tc2dzdHIgItCf0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1IgotCi0jOiBsaWIvcmVtb3RlLnRjbDoyMjMKLW1zZ2lkICJQcnVuZSBmcm9tIgotbXNnc3RyICLQntC60LDRgdGC0YDRj9C90LUg0L7RgiIKLQotIzogbGliL3JlbW90ZS50Y2w6MjI4Ci1tc2dpZCAiRmV0Y2ggZnJvbSIKLW1zZ3N0ciAi0JTQvtGB0YLQsNCy0Y/QvdC1INC+0YIiCi0KLSM6IGxpYi9yZW1vdGUudGNsOjI1MyBsaWIvcmVtb3RlLnRjbDoyNTgKLW1zZ2lkICJBbGwiCi1tc2dzdHIgItCS0YHQuNGH0LrQuCIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjIwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogQWRkIFJlbW90ZSIKLW1zZ3N0ciAiJXMgKCVzKTog0JTQvtCx0LDQstGP0L3QtSDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjI1Ci1tc2dpZCAiQWRkIE5ldyBSZW1vdGUiCi1tc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDozMCBsaWIvdG9vbHNfZGxnLnRjbDozNwotbXNnaWQgIkFkZCIKLW1zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjM5Ci1tc2dpZCAiUmVtb3RlIERldGFpbHMiCi1tc2dzdHIgItCU0LDQvdC90Lgg0LfQsCDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKLW1zZ2lkICJMb2NhdGlvbjoiCi1tc2dzdHIgItCc0LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LU6IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjAKLW1zZ2lkICJGdXJ0aGVyIEFjdGlvbiIKLW1zZ3N0ciAi0KHQu9C10LTQstCw0YnQviDQtNC10LnRgdGC0LLQuNC1IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjMKLW1zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKLW1zZ3N0ciAi0J3QtdC30LDQsdCw0LLQvdC+INC00L7RgdGC0LDQstGP0L3QtSIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjY5Ci1tc2dpZCAiSW5pdGlhbGl6ZSBSZW1vdGUgUmVwb3NpdG9yeSBhbmQgUHVzaCIKLW1zZ3N0ciAi0JjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L3QtSDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0Lgg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjc1Ci1tc2dpZCAiRG8gTm90aGluZyBFbHNlIE5vdyIKLW1zZ3N0ciAi0JTQsCDQvdC1INGB0LUg0L/RgNCw0LLQuCDQvdC40YnQviIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMAotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCi1tc2dzdHIgItCX0LDQtNCw0LnRgtC1INC40LzQtSDQt9CwINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTEzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCi1tc2dzdHIgItCe0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQutCw0LfQstCwIOKAniVz4oCcLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEyNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBhZGQgcmVtb3RlICclcycgb2YgbG9jYXRpb24gJyVzJy4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCDQvtGCINCw0LTRgNC10YEg4oCeJXPigJwuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMyIGxpYi90cmFuc3BvcnQudGNsOjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmZXRjaCAlcyIKLW1zZ3N0ciAi0LTQvtGB0YLQsNCy0Y/QvdC1INC90LAg4oCeJXPigJwiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyB0aGUgJXMiCi1tc2dzdHIgItCU0L7RgdGC0LDQstGP0L3QtSDQvdCwIOKAniVz4oCcIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKLW1zZ3N0ciAi0KXRgNCw0L3QuNC70LjRidC10YLQviDRgSDQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC+LiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MiBsaWIvdHJhbnNwb3J0LnRjbDo1NCBsaWIvdHJhbnNwb3J0LnRjbDo5MgotIzogbGliL3RyYW5zcG9ydC50Y2w6MTEwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAicHVzaCAlcyIKLW1zZ3N0ciAi0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDQvdCwIOKAniVz4oCcIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2V0dGluZyB1cCB0aGUgJXMgKGF0ICVzKSIKLW1zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCAo0YEg0LDQtNGA0LXRgSDigJ4lc+KAnCkiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgotbXNnc3RyICIlcyAoJXMpOiDQmNC30YLRgNC40LLQsNC90LUg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QuNGPINC60LvQvtC9IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM0Ci1tc2dpZCAiRGVsZXRlIEJyYW5jaCBSZW1vdGVseSIKLW1zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC90LjRjyDQutC70L7QvSIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0OAotbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKLW1zZ3N0ciAi0J7RgiDRhdGA0LDQvdC40LvQuNGJ0LUiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTEgbGliL3RyYW5zcG9ydC50Y2w6MTY1Ci1tc2dpZCAiUmVtb3RlOiIKLW1zZ3N0ciAi0J7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1OiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo3MiBsaWIvdHJhbnNwb3J0LnRjbDoxODcKLW1zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgotbXNnc3RyICLQn9GA0L7QuNC30LLQvtC70L3QviDQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1OiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4OAotbXNnaWQgIkJyYW5jaGVzIgotbXNnc3RyICLQmtC70L7QvdC4IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMAotbXNnaWQgIkRlbGV0ZSBPbmx5IElmIgotbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUsINGB0LDQvNC+INCw0LrQviIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTIKLW1zZ2lkICJNZXJnZWQgSW50bzoiCi1tc2dzdHIgItCh0LvRj9GCINCyOiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTMKLW1zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCi1tc2dzdHIgItCX0LAg0LTQsNC90L3QuNGC0LUg4oCe0KHQu9GP0YIg0LLigJwg0LUg0L3QtdC+0LHRhdC+0LTQuNC80L4g0LTQsCDQt9Cw0LTQsNC00LXRgtC1INC60LvQvtC9LiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODUKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vZ2MuYzo2MzkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOlxuIgotIlxuIgotIiAtICVzIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCiBtc2dzdHIgIiIKLSLQodC70LXQtNC90LjRgtC1INC60LvQvtC90Lgg0L3QtSDRgdCwINGB0LvQtdGC0Lgg0L3QsNC/0YrQu9C90L4g0LIg4oCeJXPigJw6XG4iCi0iXG4iCi0iIOKXjyAlcyIKKyLRgdGK0LHQuNGA0LDQvdC10YLQviDQvdCwINCx0L7QutC70YPQutCwINCy0LXRh9C1INC1INGB0YLQsNGA0YLQuNGA0LDQvdC+INC90LAg0LzQsNGI0LjQvdCw0YLQsCDigJ4lc+KAnCDRgSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQvdCwXG4iCisi0L/RgNC+0YbQtdGB0LA6ICU8UFJJdU1BWD4gKNCw0LrQviDRgdGC0LUg0YHQuNCz0YPRgNC90LgsINGH0LUg0YLQvtCy0LAg0L3QtSDQtSDQstGP0YDQvdC+LCDRgtC+0LLQsCDQuNC30L/QvtC70LfQstCw0LnRgtC1XG4iCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1mb3JjZeKAnCkiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTkwCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2djLmM6Njk0CiBtc2dpZCAiIgotIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgotIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgogbXNnc3RyICIiCi0i0J/QvtC90LUg0LXQtNC90LAg0L7RgiDQv9GA0L7QsdC40YLQtSDQt9CwINGB0LvQuNCy0LDQvdC1INC1INC90LXRg9GB0L/QtdGI0L3QsCwg0LfQsNGJ0L7RgtC+INC90LUg0YHRgtC1INC00L7RgdGC0LDQstC40LvQuCDQstGB0LjRh9C60LggIgotItC90LXQvtCx0YXQvtC00LjQvNC4INC/0L7QtNCw0LLQsNC90LjRjy4g0J/RgNC+0LHQstCw0LnRgtC1INC/0YrRgNCy0L4g0LTQsCDQtNC+0YHRgtCw0LLQuNGC0LUg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQvtGCIOKAniVz4oCcLiIKKyLQmNC80LAg0L/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0L3QtdC00L7RgdGC0LjQttC40LzQuCwg0L3QtdC/0LDQutC10YLQuNGA0LDQvdC4INC+0LHQtdC60YLQuC5cbiIKKyLQmNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBwcnVuZeKAnCwg0LfQsCDQtNCwINCz0Lgg0L7QutCw0YHRgtGA0LjRgtC1LiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDgKLW1zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCi1tc2dzdHIgItCY0LfQsdC10YDQtdGC0LUg0L/QvtC90LUg0LXQtNC40L0g0LrQu9C+0L0g0LfQsCDQuNC30YLRgNC40LLQsNC90LUuIgorIzogYnVpbHRpbi9ncmVwLmM6MzAKK21zZ2lkICJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBncmVwIFvQntCf0KbQmNCv4oCmXSBbLWVdINCo0JDQkdCb0J7QnSBb0JLQldCg0KHQmNCv4oCmXSBbWy0tXSDQn9Cq0KLigKZdIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCi1tc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC60LvQvtC90Lgg0L7RgiDigJ4lc+KAnCIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXA6INC90LXRg9GB0L/QtdGI0L3QviDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQvdC40YjQutCwOiAlcyIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozMDAKLW1zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKLW1zZ3N0ciAi0J3QtSDQtSDQuNC30LHRgNCw0L3QviDRhdGA0LDQvdC40LvQuNGJ0LUuIgorIzogYnVpbHRpbi9ncmVwLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkgZm9yICVzIgorbXNnc3RyICLQt9Cw0LTQsNC00LXQvSDQtSDQvdC10L/RgNCw0LLQuNC70LXQvSDQsdGA0L7QuSDQvdC40YjQutC4ICglZCkg0LfQsCAlcyIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozMDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTY2FubmluZyAlcy4uLiIKLW1zZ3N0ciAi0J/RgNC10YLRitGA0YHQstCw0L3QtSDQvdCwIOKAniVz4oCc4oCmIgorIy4gVFJBTlNMQVRPUlM6ICVzIGlzIHRoZSBjb25maWd1cmF0aW9uCisjLiB2YXJpYWJsZSBmb3IgdHdlYWtpbmcgdGhyZWFkcywgY3VycmVudGx5CisjLiBncmVwLnRocmVhZHMKKyMuCisjOiBidWlsdGluL2dyZXAuYzoyODcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzOCBidWlsdGluL2luZGV4LXBhY2suYzoxNzMxCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAi0LvQuNC/0YHQstCwINC/0L7QtNC00YDRitC20LrQsCDQt9CwINC90LjRiNC60LguICDigJ4lc+KAnCDRidC1INGB0LUg0L/RgNC10L3QtdCx0YDQtdCz0L3QtSIKIAotIzogbGliL3NlYXJjaC50Y2w6NDgKLW1zZ2lkICJGaW5kOiIKLW1zZ3N0ciAi0KLRitGA0YHQtdC90LU6IgorIzogYnVpbHRpbi9ncmVwLmM6NDUzIGJ1aWx0aW4vZ3JlcC5jOjU3OCBidWlsdGluL2dyZXAuYzo2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICLQtNGK0YDQstC+0YLQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvdC+ICglcykiCiAKLSM6IGxpYi9zZWFyY2gudGNsOjUwCi1tc2dpZCAiTmV4dCIKLW1zZ3N0ciAi0KHQu9C10LTQstCw0YnQsCDQv9C+0Y/QstCwIgorIzogYnVpbHRpbi9ncmVwLmM6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9GK0LvQvdC4IOKAnmdyZXDigJwg0L7RgiDQvtCx0LXQutGCINC+0YIg0LLQuNC00LAgJXMiCiAKLSM6IGxpYi9zZWFyY2gudGNsOjUxCi1tc2dpZCAiUHJldiIKLW1zZ3N0ciAi0J/RgNC10LTQuNGI0L3QsCDQv9C+0Y/QstCwIgorIzogYnVpbHRpbi9ncmVwLmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAniVj4oCcINC+0YfQsNC60LLQsCDRh9C40YHQu9C+INC30LAg0LDRgNCz0YPQvNC10L3RgiIKIAotIzogbGliL3NlYXJjaC50Y2w6NTIKLW1zZ2lkICJSZWdFeHAiCi1tc2dzdHIgItCg0LXQs9CY0LfRgCIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwMworbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgItGC0YrRgNGB0LXQvdC1INCyINC40L3QtNC10LrRgdCwLCDQsCDQvdC1INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgogCi0jOiBsaWIvc2VhcmNoLnRjbDo1NAotbXNnaWQgIkNhc2UiCi1tc2dzdHIgItCT0LvQsNCy0L3QuC/QvNCw0LvQutC4IgorIzogYnVpbHRpbi9ncmVwLmM6ODA1Cittc2dpZCAiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiCittc2dzdHIgItGC0YrRgNGB0LXQvdC1INC4INCy0YrQsiDRhNCw0LnQu9C+0LLQtdGC0LUsINC60L7QuNGC0L4g0L3QtSDRgdCwINC/0L7QtCDRg9C/0YDQsNCy0LvQtdC90LjQtdGC0L4g0L3QsCBnaXQiCiAKLSM6IGxpYi9zaG9ydGN1dC50Y2w6OCBsaWIvc2hvcnRjdXQudGNsOjQzIGxpYi9zaG9ydGN1dC50Y2w6NzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBDcmVhdGUgRGVza3RvcCBJY29uIgotbXNnc3RyICIlcyAoJXMpOiDQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LjQutC+0L3QsCDQvdCwINGA0LDQsdC+0YLQvdC40Y8g0L/Qu9C+0YIiCisjOiBidWlsdGluL2dyZXAuYzo4MDcKK21zZ2lkICJzZWFyY2ggaW4gYm90aCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgItGC0YrRgNGB0LXQvdC1INC4INCyINGB0LvQtdC00LXQvdC40YLQtSwg0Lgg0LIg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKIAotIzogbGliL3Nob3J0Y3V0LnRjbDoyNCBsaWIvc2hvcnRjdXQudGNsOjY1Ci1tc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKLW1zZ3N0ciAi0JrQu9Cw0LLQuNGI0L3QsNGC0LAg0LrQvtC80LHQuNC90LDRhtC40Y8g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC90LA6IgorIzogYnVpbHRpbi9ncmVwLmM6ODA5Cittc2dpZCAiaWdub3JlIGZpbGVzIHNwZWNpZmllZCB2aWEgJy5naXRpZ25vcmUnIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSDRg9C60LDQt9Cw0L3QuCDQsiDigJ4uZ2l0aWdub3Jl4oCcIgogCi0jOiBsaWIvc2hvcnRjdXQudGNsOjE0MAotbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKLW1zZ3N0ciAi0JjQutC+0L3QsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC90LA6IgorIzogYnVpbHRpbi9ncmVwLmM6ODExCittc2dpZCAicmVjdXJzaXZlbHkgc2VhcmNoIGluIGVhY2ggc3VibW9kdWxlIgorbXNnc3RyICLRgNC10LrRg9GA0YHQuNCy0L3QviDRgtGK0YDRgdC10L3QtSDQstGK0LIg0LLRgdC40YfQutC4INC/0L7QtNC80L7QtNGD0LvQuCIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAi0KLQsNC30Lgg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDQv9GA0LDQstC+0L/QuNGB0LAg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAiCisjOiBidWlsdGluL2dyZXAuYzo4MTQKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQtdC00L7QstC10YLQtSwg0LrQvtC40YLQviDQvdC1INGB0YrQstC/0LDQtNCw0YIiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQotbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgotbXNnc3RyICLQm9C40L/RgdCy0LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDQv9GA0LDQstC+0L/QuNGB0LAiCisjOiBidWlsdGluL2dyZXAuYzo4MTYKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICLQsdC10Lcg0LfQvdCw0YfQtdC90LjQtSDQvdCwINGA0LXQs9C40YHRgtGK0YDQsCDQvdCwINCx0YPQutCy0LjRgtC1ICjQs9C70LDQstC90Lgv0LzQsNC70LrQuCkiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAotbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKLW1zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90Lgg0L3QsNGB0YLRgNC+0LnQutC4INC90LAg0L/RgNC+0LLQtdGA0LrQsNGC0LAg0L3QsCDQv9GA0LDQstC+0L/QuNGB0LAiCisjOiBidWlsdGluL2dyZXAuYzo4MTgKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAi0L3QsNC/0LDRgdCy0LDQvdC1INC90LAg0YjQsNCx0LvQvtC90LjRgtC1INGB0LDQvNC+INC/0L4g0LPRgNCw0L3QuNGG0LjRgtC1INC90LAg0LTRg9C80LjRgtC1IgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCi1tc2dzdHIgItCf0L7Qu9C30LLQsNC90LUg0L3QsCDRgNC10YfQvdC40Log0LfQsCDQtdC30LjQuiDigJ4lc+KAnC4iCisjOiBidWlsdGluL2dyZXAuYzo4MjAKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICLQvtCx0YDQsNCx0L7RgtCy0LDQvdC1INC90LAg0LTQstC+0LjRh9C90LjRgtC1INGE0LDQudC70L7QstC1INC60LDRgtC+INGC0LXQutGB0YLQvtCy0LgiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MwotbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCi1tc2dzdHIgItCf0YDQvtCz0YDQsNC80LDRgtCwINC30LAg0L/RgNCw0LLQvtC/0LjRgSDQtNCw0LbQtSDQvdC1INGB0YLQsNGA0YLQuNGA0LAg0YPRgdC/0LXRiNC90L4uIgorIzogYnVpbHRpbi9ncmVwLmM6ODIyCittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICLQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINC00LLQvtC40YfQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCi1tc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgItCd0LXQv9C+0LfQvdCw0YLQsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC/0YDQsNCy0L7Qv9C40YHQsCIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNQorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAiIgorItC+0LHRgNCw0LHQvtGC0LLQsNC90LUg0L3QsCDQtNCy0L7QuNGH0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0YfRgNC10Lcg0YTQuNC70YLRgNC4INC30LAg0L/RgNC10L7QsdGA0LDQt9GD0LLQsNC90LUg0LrRitC8INGC0LXQutGB0YIiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDoxODYKLW1zZ2lkICJObyBTdWdnZXN0aW9ucyIKLW1zZ3N0ciAi0J3Rj9C80LAg0L/RgNC10LTQu9C+0LbQtdC90LjRjyIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNworbXNnaWQgInNlYXJjaCBpbiBzdWJkaXJlY3RvcmllcyAoZGVmYXVsdCkiCittc2dzdHIgItGC0YrRgNGB0LXQvdC1INCyINC/0L7QtNC00LjRgNC10LrRgtC+0YDQuNC40YLQtSAo0YHRgtCw0L3QtNCw0YDRgtC90L4pIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg4Ci1tc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgotbXNnc3RyICLQndC10L7Rh9Cw0LrQstCw0L0g0LrRgNCw0Lkg0L3QsCDRhNCw0LnQuyDQvtGCINC/0YDQvtCz0YDQsNC80LDRgtCwINC30LAg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC/0YDQsNCy0L7Qv9C40YHQsCIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyOQorbXNnaWQgImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIKK21zZ3N0ciAi0L3QsNCy0LvQuNC30LDQvdC1INC80LDQutGB0LjQvNCw0LvQvdC+INC90LAg0YLQsNC30Lgg0JTQqtCb0JHQntCn0JjQndCQINCyINC00YrRgNCy0L7RgtC+IgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6MzkyCi1tc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCi1tc2dzdHIgItCT0YDQtdGI0LrQsCDQsiDQv9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDQv9GA0LDQstC+0L/QuNGB0LAiCisjOiBidWlsdGluL2dyZXAuYzo4MzMKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAi0YDQsNC30YjQuNGA0LXQvdC4INGA0LXQs9GD0LvRj9GA0L3QuCDQuNC30YDQsNC30Lgg0L/QviBQT1NJWCIKIAotIzogbGliL3NzaGtleS50Y2w6MzEKLW1zZ2lkICJObyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAi0J3QtSDRgdCwINC+0YLQutGA0LjRgtC4INC60LvRjtGH0L7QstC1LiIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNgorbXNnaWQgInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIKK21zZ3N0ciAi0L7RgdC90L7QstC90Lgg0YDQtdCz0YPQu9GP0YDQvdC4INC40LfRgNCw0LfQuCDQv9C+IFBPU0lYICjRgdGC0LDQvdC00LDRgNGC0L3QvikiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjM0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRm91bmQgYSBwdWJsaWMga2V5IGluOiAlcyIKLW1zZ3N0ciAi0J7RgtC60YDQuNGCINC1INC/0YPQsdC70LjRh9C10L0g0LrQu9GO0Ycg0LIg4oCeJXPigJwiCisjOiBidWlsdGluL2dyZXAuYzo4MzkKK21zZ2lkICJpbnRlcnByZXQgcGF0dGVybnMgYXMgZml4ZWQgc3RyaW5ncyIKK21zZ3N0ciAi0YjQsNCx0LvQvtC90LjRgtC1INGB0LAg0LTQvtGB0LvQvtCy0L3QuCDQvdC40LfQvtCy0LUiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjQwCi1tc2dpZCAiR2VuZXJhdGUgS2V5IgotbXNnc3RyICLQk9C10L3QtdGA0LjRgNCw0L3QtSDQvdCwINC60LvRjtGHIgorIzogYnVpbHRpbi9ncmVwLmM6ODQyCittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICLRgNC10LPRg9C70Y/RgNC90Lgg0LjQt9GA0LDQt9C4INC90LAgUGVybCIKIAotIzogbGliL3NzaGtleS50Y2w6NTgKLW1zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKLW1zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSDQutGK0Lwg0YHQuNGB0YLQtdC80L3QuNGPINCx0YPRhNC10YAiCisjOiBidWlsdGluL2dyZXAuYzo4NDUKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QvtC80LXRgNCw0YLQsCDQvdCwINGA0LXQtNC+0LLQtdGC0LUiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjcyCi1tc2dpZCAiWW91ciBPcGVuU1NIIFB1YmxpYyBLZXkiCi1tc2dzdHIgItCf0YPQsdC70LjRh9C90LjRj9GCINCy0Lgg0LrQu9GO0Ycg0LfQsCBPcGVuU1NIIgorIzogYnVpbHRpbi9ncmVwLmM6ODQ2Cittc2dpZCAic2hvdyBjb2x1bW4gbnVtYmVyIG9mIGZpcnN0IG1hdGNoIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdC+0LzQtdGA0LAg0L3QsCDQutC+0LvQvtC90LDRgtCwINC90LAg0L/RitGA0LLQvtGC0L4g0L3QsNC/0LDRgdCy0LDQvdC1IgogCi0jOiBsaWIvc3Noa2V5LnRjbDo4MAotbXNnaWQgIkdlbmVyYXRpbmcuLi4iCi1tc2dzdHIgItCT0LXQvdC10YDQuNGA0LDQvdC14oCmIgorIzogYnVpbHRpbi9ncmVwLmM6ODQ3Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgItCx0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC80LXQvdCw0YLQsCDQvdCwINGE0LDQudC70L7QstC10YLQtSIKIAotIzogbGliL3NzaGtleS50Y2w6ODYKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0OAorbXNnaWQgInNob3cgZmlsZW5hbWVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC80LXQvdCw0YLQsCDQvdCwINGE0LDQudC70L7QstC10YLQtSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODUwCittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC+0YLQvdC+0YHQuNGC0LXQu9C90LjRgtC1INC40LzQtdC90LAg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0YHQv9GA0Y/QvNC+INC+0YHQvdC+0LLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwICIKKyLRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IgorCisjOiBidWlsdGluL2dyZXAuYzo4NTIKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC40LzQtdC90LDRgtCwINC90LAg0YTQsNC50LvQvtCy0LXRgtC1INCx0LXQtyDQvdCw0L/QsNGB0LLQsNGJ0LjRgtC1INGA0LXQtNC+0LLQtSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU0Cittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgItC/0YHQtdCy0LTQvtC90LjQvCDQvdCwIOKAni0tZmlsZXMtd2l0aC1tYXRjaGVz4oCcIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTcKK21zZ2lkICJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDQuNC80LXQvdCw0YLQsCDQvdCwINGE0LDQudC70L7QstC10YLQtSwg0LrQvtC40YLQviDQvdC1INGB0YrQtNGK0YDQttCw0YIg0YDQtdC0LCDQvdCw0L/QsNGB0LLQsNGJINC90LAgIgorItGI0LDQsdC70L7QvdCwIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTkKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdGD0LvQtdCy0LjRjyDQt9C90LDQuiDigJ5OVUzigJwg0YHQu9C10LQg0LLRgdGP0LrQviDQuNC80LUg0L3QsCDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYyCittc2dpZCAic2hvdyBvbmx5IG1hdGNoaW5nIHBhcnRzIG9mIGEgbGluZSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0YfQsNGB0YLQuNGC0LUg0L3QsCDRgNC10LTQvtCy0LXRgtC1LCDQutC+0LjRgtC+INGB0YrQstC/0LDQtNCw0YIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NAorbXNnaWQgInNob3cgdGhlIG51bWJlciBvZiBtYXRjaGVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINCx0YDQvtGPINC90LAg0YHRitCy0L/QsNC00LXQvdC40Y/RgtCwINCy0LzQtdGB0YLQviDQvdCw0L/QsNGB0LLQsNGJ0LjRgtC1INGA0LXQtNC+0LLQtSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY1Cittc2dpZCAiaGlnaGxpZ2h0IG1hdGNoZXMiCittc2dzdHIgItC+0YbQstC10YLRj9Cy0LDQvdC1INC90LAg0L3QsNC/0LDRgdCy0LDQvdC40Y/RgtCwIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjcKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/RgNCw0LfQtdC9INGA0LXQtCDQvNC10LbQtNGDINC90LDQv9Cw0YHQstCw0L3QuNGP0YLQsCDQvtGCINGA0LDQt9C70LjRh9C90Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2OQorbXNnaWQgInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC80LXRgtC+INC90LAg0YTQsNC50LvQsCDRgdCw0LzQviDQstC10LTQvdGK0LYg0LfQsCDQstGB0LjRh9C60Lgg0L3QsNC/0LDRgdCy0LDQvdC40Y8g0L7RgiDRgtC+0LfQuCDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODcyCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGC0LDQutGK0LIg0JHQoNCe0Jkg0YDQtdC00L7QstC1INC/0YDQtdC00Lgg0Lgg0YHQu9C10LQg0L3QsNC/0LDRgdCy0LDQvdC40Y/RgtCwIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzUKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgtCw0LrRitCyINCR0KDQntCZINGA0LXQtNC+0LLQtSDQv9GA0LXQtNC4INC90LDQv9Cw0YHQstCw0L3QuNGP0YLQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc3Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgtCw0LrRitCyINCR0KDQntCZINGA0LXQtNC+0LLQtSDRgdC70LXQtCDQvdCw0L/QsNGB0LLQsNC90LjRj9GC0LAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3OQorbXNnaWQgInVzZSA8bj4gd29ya2VyIHRocmVhZHMiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YLQsNC60YrQsiDQkdCg0J7QmSDRgNCw0LHQvtGC0LXRidC4INC90LjRiNC60LgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4MAorbXNnaWQgInNob3J0Y3V0IGZvciAtQyBOVU0iCittc2dzdHIgItC/0YHQtdCy0LTQvtC90LjQvCDQvdCwIOKAni1DINCR0KDQntCZ4oCcIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODMKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNC10LQg0YEg0LjQvNC10YLQviDQvdCwINGE0YPQvdC60YbQuNGP0YLQsCwg0LIg0LrQvtGP0YLQviDQtSDQvdCw0L/QsNGB0L3QsNGCINGI0LDQsdC70L7QvdCwIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODUKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L7QsdGF0LLQsNGJ0LDRidCw0YLQsCDRhNGD0L3QutGG0LjRjyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg4Cittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDRiNCw0LHQu9C+0L3QuNGC0LUg0L7RgiDQpNCQ0JnQmyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkwCittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICLQvdCw0L/QsNGB0LLQsNC90LUg0L3QsCDQqNCQ0JHQm9Ce0J0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MgorbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgItC60L7QvNCx0LjQvdC40YDQsNC90LUg0L3QsCDRiNCw0LHQu9C+0L3QuNGC0LUg0YPQutCw0LfQsNC90Lgg0YEg0L7Qv9GG0LjRj9GC0LAg4oCeLWXigJwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwNAorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICIiCisi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LjQt9GF0L7QtC4gINCY0LfRhdC+0LTQvdC40Y/RgiDQutC+0LQg0YPQutCw0LfQstCwINC90LDQu9C40YfQuNC10YLQviDQvdCwICIKKyLQvdCw0L/QsNGB0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwNgorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNC10LTQvtCy0LUg0YHQsNC80L4g0L7RgiDRhNCw0LnQu9C+0LLQtdGC0LUsINC60L7QuNGC0L4g0L3QsNC/0LDRgdCy0LDRgiDQvdCwINCy0YHQuNGH0LrQuCDRiNCw0LHQu9C+0L3QuCIKKworIzogYnVpbHRpbi9ncmVwLmM6OTA4Cittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC00YrRgNCy0L7RgtC+INC30LAg0LDQvdCw0LvQuNC3INC90LAg0YDQtdCz0YPQu9GP0YDQvdC40Y8g0LjQt9GA0LDQtyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTEyCittc2dpZCAicGFnZXIiCittc2dzdHIgItC/0YDQvtCz0YDQsNC80LAg0LfQsCDQv9GA0LXQs9C70LXQtCDQv9C+INGB0YLRgNCw0L3QuNGG0LgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxMgorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGK0LLQv9Cw0LTQsNGJ0LjRgtC1INGE0LDQudC70L7QstC1INCyINC/0YDQvtCz0YDQsNC80LAg0LfQsCDQv9GA0LXQs9C70LXQtCDQv9C+INGB0YLRgNCw0L3QuNGG0LgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxNgorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAiIgorItC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDRgdGC0LDRgNGC0LjRgNCw0L3QtdGC0L4g0L3QsCBncmVwKDEpICjRgtC10LrRg9GJ0LjRj9GCINC60L7QvNC/0LjQu9Cw0YIg0L/RgNC10L3QtdCx0YDQtdCz0LLQsCDRgtCw0LfQuCAiCisi0L7Qv9GG0LjRjykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk4MworbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4iCittc2dzdHIgItC90LUg0YHRgtC1INC30LDQtNCw0LvQuCDRiNCw0LHQu9C+0L0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMTkKK21zZ2lkICItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cyIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1jYWNoZWTigJwg0Lgg4oCeLS11bnRyYWNrZWTigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80Lgg0YEg0LLQtdGA0YHQuNC4LiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiCittc2dzdHIgItCy0LXRgNGB0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQsdGK0LTQtSDQvtGC0LrRgNC40YLQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA1NworbXNnaWQgIi0tdW50cmFja2VkIG5vdCBzdXBwb3J0ZWQgd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS11bnRyYWNrZWTigJwg0Lgg4oCeLS1yZWN1cnNlLXN1Ym1vZHVsZXPigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjEKK21zZ2lkICJpbnZhbGlkIG9wdGlvbiBjb21iaW5hdGlvbiwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDQutC+0LzQsdC40L3QsNGG0LjRjyDQvtGCINC+0L/RhtC40LgsIOKAni0tdGhyZWFkc+KAnCDRidC1INGB0LUg0L/RgNC10L3QtdCx0YDQtdCz0L3QtSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2NCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NDcKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAi0LvQuNC/0YHQstCwINC/0L7QtNC00YDRitC20LrQsCDQt9CwINC90LjRiNC60LguICDigJ4tLXRocmVhZHPigJwg0YnQtSDRgdC1INC/0YDQtdC90LXQsdGA0LXQs9C90LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSIKK21zZ3N0ciAi0LfQsNC00LDQtNC10L0g0LUg0L3QtdC/0YDQsNCy0LjQu9C10L0g0LHRgNC+0Lkg0L3QuNGI0LrQuDogJWQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMDEKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tb3Blbi1maWxlcy1pbi1wYWdlcuKAnCDQuNC30LjRgdC60LLQsCDRgtGK0YDRgdC10L3QtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEyNworbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1jYWNoZWTigJwg0Lgg4oCeLS11bnRyYWNrZWTigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80Lgg0YEg4oCeLS1uby1pbmRleOKAnCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEzMworbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzIgorbXNnc3RyICIiCisi0L7Qv9GG0LjQuNGC0LUg4oCeLS0obm8tKWV4Y2x1ZGUtc3RhbmRhcmTigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80Lgg0YEg0YLRitGA0YHQtdC90LUg0L/QviDRgdC70LXQtNC10L3QuCAiCisi0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExNDEKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4iCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tY2FjaGVk4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgdGK0YEg0LfQsNC00LDQstCw0L3QtSDQvdCwINC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4NQogbXNnaWQgIiIKLSJDb3VsZCBub3Qgc3RhcnQgc3NoLWtleWdlbjpcbiIKLSJcbiIKLSIlcyIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0eXBlPl0gWy13XSBbLS1wYXRoPTxmaWxlPiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dICIKKyJbLS1dIDxmaWxlPi4uLiIKIG1zZ3N0ciAiIgotItCf0YDQvtCz0YDQsNC80LDRgtCwIOKAnnNzaC1rZXlnZW7igJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YLQsNGA0YLQuNGA0LDQvdCwOlxuIgotIlxuIgotIiVzIgorImdpdCBoYXNoLW9iamVjdCBbLXQg0JLQmNCUXSBbLXddIFstLXBhdGg90KTQkNCZ0JsgfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSBbLS1dICIKKyLQpNCQ0JnQm+KApiIKIAotIzogbGliL3NzaGtleS50Y2w6MTEzCi1tc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LPQtdC90LXRgNC40YDQsNC90LUuIgorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg2Cittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocyIKIAotIzogbGliL3NzaGtleS50Y2w6MTIwCi1tc2dpZCAiR2VuZXJhdGlvbiBzdWNjZWVkZWQsIGJ1dCBubyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAi0JPQtdC90LXRgNC40YDQsNC90LXRgtC+INC30LDQstGK0YDRiNC4INGD0YHQv9C10YjQvdC+LCDQsCDQvdC1INGB0LAg0L3QsNC80LXRgNC10L3QuCDQutC70Y7Rh9C+0LLQtS4iCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTgKK21zZ2lkICJvYmplY3QgdHlwZSIKK21zZ3N0ciAi0JLQmNCUINC90LAg0L7QsdC10LrRgtCwIgogCi0jOiBsaWIvc3Noa2V5LnRjbDoxMjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJZb3VyIGtleSBpcyBpbjogJXMiCi1tc2dzdHIgItCa0LvRjtGH0YrRgiDQstC4INC1INCyIOKAniVz4oCcIgorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk5Cittc2dpZCAid3JpdGUgdGhlIG9iamVjdCBpbnRvIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgItC30LDQv9C40YHQstCw0L3QtSDQvdCwINC+0LHQtdC60YLQsCDQsiDQsdCw0LfQsNGC0LAg0L7RgiDQtNCw0L3QvdC4INC30LAg0L7QsdC10LrRgtC40YLQtSIKIAotIzogbGliL3N0YXR1c19iYXIudGNsOjg3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKLW1zZ3N0ciAiJXPigKYgJSppINC+0YIg0L7QsdGJ0L4gJSppICVzICglM2klJSkiCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAxCittc2dpZCAicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDQvtCx0LXQutGC0LAg0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgogCi0jOiBsaWIvdG9vbHMudGNsOjc2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVubmluZyAlcyByZXF1aXJlcyBhIHNlbGVjdGVkIGZpbGUuIgotbXNnc3RyICLQl9CwINC40LfQv9GK0LvQvdC10L3QuNC10YLQviDQvdCwIOKAniVz4oCcINGC0YDRj9Cx0LLQsCDQtNCwINC40LfQsdC10YDQtdGC0LUg0YTQsNC50LsuIgorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMworbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICLQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDRhNCw0LnQu9CwINC60LDQutGC0L4g0LUg4oCUINCx0LXQtyDRhNC40LvRgtGA0LgiCiAKLSM6IGxpYi90b29scy50Y2w6OTIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICUxJHMgb24gZmlsZSBcIiUyJHNcIj8iCi1tc2dzdHIgItCh0LjQs9GD0YDQvdC4INC70Lgg0YHRgtC1LCDRh9C1INC40YHQutCw0YLQtSDQtNCwINC40LfQv9GK0LvQvdC40YLQtSDigJ4lMSRz4oCcINCy0YrRgNGF0YMg0YTQsNC50LvQsCDigJ4lMiRz4oCcPyIKLQotIzogbGliL3Rvb2xzLnRjbDo5NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJXM/IgotbXNnc3RyICLQodC40LPRg9GA0L3QuCDQu9C4INGB0YLQtSwg0YfQtSDQuNGB0LrQsNGC0LUg0LTQsCDQuNC30L/RitC70L3QuNGC0LUg4oCeJXPigJw/IgotCi0jOiBsaWIvdG9vbHMudGNsOjExOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2w6ICVzIgotbXNnc3RyICLQmtC+0LzQsNC90LTQsDogJXMiCi0KLSM6IGxpYi90b29scy50Y2w6MTE5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVubmluZzogJXMiCi1tc2dzdHIgItCY0LfQv9GK0LvQvdC10L3QuNC1OiAlcyIKLQotIzogbGliL3Rvb2xzLnRjbDoxNTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIgotbXNnc3RyICLQmtC+0LzQsNC90LTQsNGC0LAg0LfQsNCy0YrRgNGI0Lgg0YPRgdC/0LXRiNC90L46ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjE2MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgZmFpbGVkOiAlcyIKLW1zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwINCy0YrRgNC90LAg0LPRgNC10YjQutCwOiAlcyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBBZGQgVG9vbCIKLW1zZ3N0ciAiJXMgKCVzKTog0JTQvtCx0LDQstGP0L3QtSDQvdCwINC60L7QvNCw0L3QtNCwIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyOAotbXNnaWQgIkFkZCBOZXcgVG9vbCBDb21tYW5kIgotbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LrQvtC80LDQvdC00LAiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjM0Ci1tc2dpZCAiQWRkIGdsb2JhbGx5IgotbXNnc3RyICLQk9C70L7QsdCw0LvQvdC+INC00L7QsdCw0LLRj9C90LUiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjQ2Ci1tc2dpZCAiVG9vbCBEZXRhaWxzIgotbXNnc3RyICLQn9C+0LTRgNC+0LHQvdC+0YHRgtC4INC30LAg0LrQvtC80LDQvdC00LDRgtCwIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo0OQotbXNnaWQgIlVzZSAnLycgc2VwYXJhdG9ycyB0byBjcmVhdGUgYSBzdWJtZW51IHRyZWU6IgotbXNnc3RyICLQl9CwINGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0L7QtNC80LXQvdGO0YLQsCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC30L3QsNC60LAg4oCeL+KAnCDQt9CwINGA0LDQt9C00LXQu9C40YLQtdC7OiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NjAKLW1zZ2lkICJDb21tYW5kOiIKLW1zZ3N0ciAi0JrQvtC80LDQvdC00LA6IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo3MQotbXNnaWQgIlNob3cgYSBkaWFsb2cgYmVmb3JlIHJ1bm5pbmciCi1tc2dzdHIgItCf0YDQtdC00Lgg0LjQt9C/0YrQu9C90LXQvdC40LUg0LTQsCDRgdC1INC40LfQstC10LbQtNCwINC00LjQsNC70L7Qs9C+0LIg0L/RgNC+0LfQvtGA0LXRhiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NzcKLW1zZ2lkICJBc2sgdGhlIHVzZXIgdG8gc2VsZWN0IGEgcmV2aXNpb24gKHNldHMgJFJFVklTSU9OKSIKLW1zZ3N0ciAi0J/QvtGC0YDQtdCx0LjRgtC10LvRj9GCINC00LAg0YPQutCw0LbQtSDQstC10YDRgdC40Y8gKNC30LDQtNCw0LLQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3Qu9C40LLQsNGC0LAgJFJFVklTSU9OKSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6ODIKLW1zZ2lkICJBc2sgdGhlIHVzZXIgZm9yIGFkZGl0aW9uYWwgYXJndW1lbnRzIChzZXRzICRBUkdTKSIKLW1zZ3N0ciAiIgotItCf0L7RgtGA0LXQsdC40YLQtdC70Y/RgiDQtNCwINGD0LrQsNC20LUg0LTQvtC/0YrQu9C90LjRgtC10LvQvdC4INCw0YDQs9GD0LzQtdC90YLQuCAo0LfQsNC00LDQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC70LjQstCw0YLQsCAkQVJHUykiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjg5Ci1tc2dpZCAiRG9uJ3Qgc2hvdyB0aGUgY29tbWFuZCBvdXRwdXQgd2luZG93IgotbXNnc3RyICLQkdC10Lcg0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0L/RgNC+0LfQvtGA0LXRhiDRgSDQuNC30YXQvtC00LAg0L7RgiDQutC+0LzQsNC90LTQsNGC0LAiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjk0Ci1tc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKLW1zZ3N0ciAiIgotItCh0YLQsNGA0YLQuNGA0LDQvdC1INGB0LDQvNC+INGB0LvQtdC0INC40LfQsdC+0YAg0L3QsCDRgNCw0LfQu9C40LrQsCAo0L/RgNC+0LzQtdC90LvQuNCy0LDRgtCwICRGSUxFTkFNRSDQvdC1INC1INC/0YDQsNC30L3QsCkiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjExOAotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCi1tc2dzdHIgItCX0LDQtNCw0LnRgtC1INC40LzQtSDQt9CwINC60L7QvNCw0L3QtNCw0YLQsC4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjEyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjE0OAotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNAogbXNnaWQgIiIKLSJDb3VsZCBub3QgYWRkIHRvb2w6XG4iCisianVzdCBoYXNoIGFueSByYW5kb20gZ2FyYmFnZSB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgR2l0IgorbXNnc3RyICIiCisi0YHRitC30LTQsNCy0LDQvdC1INC4INC40LfRh9C40YHQu9GP0LLQsNC90LUg0L3QsCDQutC+0L3RgtGA0L7Qu9C90Lgg0YHRg9C80Lgg0L3QsCDQv9GA0L7QuNC30LLQvtC70L3QuCDQtNCw0L3QvdC4INC30LAg0L/QvtCy0YDQtdC00LXQvdC4ICIKKyLQvtCx0LXQutGC0Lgg0LfQsCDRgtGA0LDRgdC40YDQsNC90LUg0L3QsCBHaXQiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAi0L7QsdGA0LDQsdC+0YLQstCw0L3QtSDQvdCwINCk0JDQmdCb0LAg0LLRgdC1INC10LTQvdC+INC1INGBINGC0L7Qt9C4INC/0YrRgiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDYKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICLQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0L3QsNC70LjRh9C90Lgg0LrQvtC80LDQvdC00LgiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3Cittc2dpZCAiZXhjbHVkZSBndWlkZXMiCittc2dzdHIgItCx0LXQtyDQstGK0LLQtdC00LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ4Cittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICLQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDRgdC/0LjRgdGK0Log0YEg0LLRitCy0LXQtNC10L3QuNGPIgorCisjOiBidWlsdGluL2hlbHAuYzo0OQorbXNnaWQgInByaW50IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIgorbXNnc3RyICLQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDQuNC80LXQvdCw0YLQsCDQvdCwINCy0YHQuNGH0LrQuCDQutC+0L3RhNC40LPRg9GA0LjRgNCw0YnQuCDQv9GA0L7QvNC10L3Qu9C40LLQuCIKKworIzogYnVpbHRpbi9oZWxwLmM6NTEKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICLQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDRgdGC0YDQsNC90LjRhtCwINC+0YIg0YDRitC60L7QstC+0LTRgdGC0LLQvtGC0L4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUyCittc2dpZCAic2hvdyBtYW51YWwgaW4gd2ViIGJyb3dzZXIiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINGB0YLRgNCw0L3QuNGG0LAg0L7RgiDRgNGK0LrQvtCy0L7QtNGB0YLQstC+0YLQviDQsiDRg9C10LEg0LHRgNCw0YPQt9GK0YAiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU0Cittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdCwINGB0YLRgNCw0L3QuNGG0LAiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU2Cittc2dpZCAicHJpbnQgY29tbWFuZCBkZXNjcmlwdGlvbiIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L7Qv9C40YHQsNC90LjQtdGC0L4g0L3QsCDQutC+0LzQsNC90LTQsCIKKworIzogYnVpbHRpbi9oZWxwLmM6NjEKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFvQmtCe0JzQkNCd0JTQkF0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINGE0L7RgNC80LDRgiDQvdCwINC/0L7QvNC+0YnRgtCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDQKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YHRgtCw0YDRgtC40YDQsNC90LUg0L3QsCDigJ5lbWFjc2NsaWVudOKAnC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExNworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAi0JLQtdGA0YHQuNGP0YLQsCDQvdCwIOKAnmVtYWNzY2xpZW504oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICLQn9GA0LXQutCw0LvQtdC90L4g0YHRgtCw0YDQsCDQstC10YDRgdC40Y8g0L3QsCDigJ5lbWFjc2NsaWVudOKAnCDigJQgJWQgKDwgMjIpLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTQzIGJ1aWx0aW4vaGVscC5jOjE2NSBidWlsdGluL2hlbHAuYzoxNzUgYnVpbHRpbi9oZWxwLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyciCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2hlbHAuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyLigJ4lc+KAnDog0L/RitGCINC60YrQvCDQvdC10L/QvtC00LTRitGA0LbQsNC90LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQtdCz0LvQtdC0INC90LBcbiIKKyIg0YDRitC60L7QstC+0LTRgdGC0LLQvtGC0L4uICDQktC80LXRgdGC0L4g0L3QtdGPINC/0YDQvtCx0LLQsNC50YLQtSDigJ5tYW4uPHRvb2w+LmNtZOKAnC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogY21kIGZvciBzdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyLigJ4lc+KAnDog0LrQvtC80LDQvdC00LAg0LfQsCDQv9C+0LTQtNGK0YDQttCw0L3QsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0L/RgNC10LPQu9C10LQg0L3QsFxuIgorIiDRgNGK0LrQvtCy0L7QtNGB0YLQstC+0YLQvi4gINCS0LzQtdGB0YLQviDQvdC10Y8g0L/RgNC+0LHQstCw0LnRgtC1IOKAnm1hbi48dG9vbD4ucGF0aOKAnC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICLigJ4lc+KAnDog0L3QtdC/0L7Qt9C90LDRgtCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDQv9GA0LXQs9C70LXQtCDQvdCwINGA0YrQutC+0LLQvtC00YHRgtCy0L7RgtC+LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzY3Cittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICLQvdC40LrQvtGPINC/0YDQvtCz0YDQsNC80LAg0LfQsCDQv9GA0LXQs9C70LXQtCDQvdCwINGA0YrQutC+0LLQvtC00YHRgtCy0L4g0L3QtSDRg9GB0L/RjyDQtNCwINC+0LHRgNCw0LHQvtGC0Lgg0LfQsNGP0LLQutCw0YLQsCIKKworIzogYnVpbHRpbi9oZWxwLmM6Mzc1Cittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAiIgorItC90LjQutC+0Y8g0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQtdCz0LvQtdC0INC90LAg0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90LjRgtC1INGB0YLRgNCw0L3QuNGG0Lgg0L3QtSDRg9GB0L/RjyDQtNCwINC+0LHRgNCw0LHQvtGC0LggIgorItC30LDRj9Cy0LrQsNGC0LAiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNCBidWlsdGluL2hlbHAuYzo0NDUgZ2l0LmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxpYXNlZCB0byAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQtSDQv9GB0LXQstC00L7QvdC40Lwg0L3QsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ4IGdpdC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L3QuNC3INC30LAg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5hbGlhcy4lc+KAnDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3NyBidWlsdGluL2hlbHAuYzo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgItGD0L/QvtGC0YDQtdCx0LA6ICVzJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ5MQorbXNnaWQgIidnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorbXNnc3RyICLQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IGhlbHAgY29uZmln4oCcIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INCy0LjQtCDQvdCwINC+0LHQtdC60YLQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgItC+0YfQsNC60LLQsNC90LjRj9GCINC+0LHQtdC60YIg4oCeJXPigJwg0L3QtSDQsdC1INC/0L7Qu9GD0YfQtdC9IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzOiBleHBlY3RlZCB0eXBlICVzLCBmb3VuZCAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0LLQuNC0INC90LAg0L7QsdC10LrRgtCwIOKAniVz4oCcOiDQvtGH0LDQutCy0LDRiNC1INGB0LUg4oCeJXPigJwsINCwINCx0LUg0L/QvtC70YPRh9C10L0g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC/0YrQu9C90LggJWQg0LHQsNC50YIiCittc2dzdHJbMV0gItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQv9GK0LvQvdGP0YIgJWQg0LHQsNC50YLQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY4Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICLQvdC10L7Rh9Cw0LrQstCw0L0g0LrRgNCw0Lkg0L3QsCDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY5Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDRh9C10YLQtdC90LUg0L3QsCDQstGF0L7QtNC90LjRgtC1INC00LDQvdC90LgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4MQorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QuCDRgdCwINC/0L7QstC10YfQtSDQvtGCINC90LDQu9C40YfQvdC40YLQtSDQsdCw0LnRgtC+0LLQtSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjg4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NjA2Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAi0L/QsNC60LXRgtC90LjRj9GCINGE0LDQudC7INC1INC/0YDQtdC60LDQu9C10L3QviDQs9C+0LvRj9C8INC30LAg0YLQtdC60YPRidCw0YLQsCDRgdGC0L7QudC90L7RgdGCINC90LAg0YLQuNC/0LAg4oCeb2ZmX3TigJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5MSBidWlsdGluL3VucGFjay1vYmplY3RzLmM6OTUKK21zZ2lkICJwYWNrIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUiCittc2dzdHIgItC/0LDQutC10YLQvdC40Y/RgiDRhNCw0LnQuyDQvdCw0LTQstC40YjQsNCy0LAg0LzQsNC60YHQuNC80LDQu9C90LjRjyDQstGK0LfQvNC+0LbQtdC9INGA0LDQt9C80LXRgCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhY2tmaWxlICclcyciCittc2dzdHIgItC/0LDQutC10YLQvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyNgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICLQvdC10YHRitC+0YLQstC10YLRgdGC0LLQuNC1INCyINC/0L7QtNC/0LjRgdCwINC60YrQvCDQv9Cw0LrQtdGC0L3QuNGPINGE0LDQudC7IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayB2ZXJzaW9uICU8UFJJdTMyPiB1bnN1cHBvcnRlZCIKK21zZ3N0ciAi0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAg0L/QsNC60LXRgtC40YDQsNC90LUg0LJl0YDRgdC40Y8g4oCeJTxQUkl1MzI+4oCcIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJTxQUkl1TUFYPjogJXMiCittc2dzdHIgItC/0L7QstGA0LXQtNC10L0g0L7QsdC10LrRgiDQsiDQv9Cw0LrQtdGC0L3QuNGPINGE0LDQudC7INC/0YDQuCDQvtGC0LzQtdGB0YLQstCw0L3QtSAlPFBSSXVNQVg+OiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmxhdGUgcmV0dXJuZWQgJWQiCittc2dzdHIgItC00LXQutC+0LzQv9GA0LXRgdC40YDQsNC90LXRgtC+INGBIOKAnmluZmxhdGXigJwg0LLRitGA0L3QsCAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTE1Cittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAi0YHRgtC+0LnQvdC+0YHRgtGC0LAg0L3QsCDQvtGC0LzQtdGB0YLQstCw0L3QtdGC0L4g0LfQsCDQvtCx0LXQutGC0LAt0YDQsNC30LvQuNC60LAg0LLQvtC00Lgg0LTQviDQv9GA0LXQv9GK0LvQstCw0L3QtSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIzCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICLRgdGC0L7QudC90L7RgdGC0YLQsCDQvdCwINC+0YLQvNC10YHRgtCy0LDQvdC10YLQviDQt9CwINC+0LHQtdC60YLQsC3RgNCw0LfQu9C40LrQsCDQtSDQuNC30LLRitC9INC00LjQsNC/0LDQt9C+0L3QsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb2JqZWN0IHR5cGUgJWQiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIg0LLQuNC0INC+0LHQtdC60YIgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2MgorbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgItC/0LDQutC10YLQvdC40Y/RgiDRhNCw0LnQuyDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAi0L3QtdC+0YfQsNC60LLQsNC9INC60YDQsNC5INC90LAg0YTQsNC50LssINC70LjQv9GB0LLQsCAlPFBSSXVNQVg+INCx0LDQudGCIgorbXNnc3RyWzFdICLQvdC10L7Rh9Cw0LrQstCw0L0g0LrRgNCw0Lkg0L3QsCDRhNCw0LnQuywg0LvQuNC/0YHQstCw0YIgJTxQUkl1TUFYPiDQsdCw0LnRgtCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1OTAKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAi0YHQtdGA0LjQvtC30L3QsCDQs9GA0LXRiNC60LAg0L/RgNC4INC00LXQutC+0LzQv9GA0LXRgdC40YDQsNC90LUg0YEg4oCeaW5mbGF0ZeKAnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0MSBidWlsdGluL2luZGV4LXBhY2suYzo3NjUKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwNCBidWlsdGluL2luZGV4LXBhY2suYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICIiCisi0KHQqtCS0J/QkNCU0JXQndCY0JUg0J3QkCDQodCi0J7QmdCd0J7QodCi0JjQotCVINCX0JAg0KHQo9Cc0JjQotCVINCX0JAgU0hBMTog4oCeJXPigJwg0J3QkCDQlNCS0JAg0KDQkNCX0JvQmNCn0J3QmCDQntCR0JXQmtCi0JAhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNTgKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjE4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCBpbmZvICVzIgorbXNnc3RyICLRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0LjRj9GCINC+0LHQtdC60YIg0LIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgItGB0YrRidC10YHRgtCy0YPQstCw0YnQuNGP0YIg0L7QsdC10LrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvYiBvYmplY3QgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC+0LHQtdC60YItQkxPQiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NgorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFja2VkIG9iamVjdCIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQv9GA0L7QstC10YDQutCw0YLQsCDQvdCwINC/0LDQutC10YLQuNGA0LDQvdC4INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhbGwgY2hpbGQgb2JqZWN0cyBvZiAlcyBhcmUgcmVhY2hhYmxlIgorbXNnc3RyICLQndGP0LrQvtC4INC+0LHQtdC60YLQuCwg0L3QsNGB0LvQtdC00L3QuNGG0Lgg0L3QsCDigJ4lc+KAnCwg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQtNC+0YHRgtC40LPQvdCw0YLQuCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTIwIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk1MQorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAi0YDQsNC30LvQuNC60LDRgtCwINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LjQu9C+0LbQtdC90LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjEKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0J/QvtC70YPRh9Cw0LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjEKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICLQmNC90LTQtdC60YHQuNGA0LDQvdC1INC90LAg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTU1Cittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICLQv9Cw0LrQtdGC0L3QuNGP0YIg0YTQsNC50Lsg0LUg0L/QvtCy0YDQtdC00LXQvSAo0L3QtdC10LTQvdCw0LrQstC4INGB0YPQvNC4INC/0L4gU0hBMSkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjAKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9GD0YfQuCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC/0LDQutC10YLQvdC40Y8g0YTQsNC50Lsg0YEg4oCeZnN0YXTigJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjMKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgItCyINC60YDQsNGPINC90LAg0L/QsNC60LXRgtC90LjRjyDRhNCw0LnQuyDQuNC80LAg0L/QvtCy0YDQtdC00LXQvdC4INC00LDQvdC90LgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNzUKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICIiCisi0YTQsNGC0LDQu9C90LAg0LPRgNC10YjQutCwINCy0YrQsiDRhNGD0L3QutGG0LjRj9GC0LAg4oCecGFyc2VfcGFja19vYmplY3Rz4oCcLiAg0KLQvtCy0LAg0LUg0LPRgNC10YjQutCwINCyIEdpdCwgIgorItC00L7QutC70LDQtNCy0LDQudGC0LUg0Y8g0L3QsCDRgNCw0LfRgNCw0LHQvtGC0YfQuNGG0LjRgtC1LCDQutCw0YLQviDQv9GA0LDRgtC40YLQtSDQtS3Qv9C40YHQvNC+INC90LAg0LDQtNGA0LXRgTog4oCeZ2l0QHZnZXIuIgorImtlcm5lbC5vcmfigJwuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTk4Cittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAi0J7RgtC60YDQuNCy0LDQvdC1INC90LAg0YHRitC+0YLQstC10YLQvdC40YLQtSDRgNCw0LfQu9C40LrQuCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTIwOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGK0LfQtNCw0LTQtSDQvdC40YjQutCwOiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI0OQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiCittc2dzdHIgIiIKKyLRhNCw0YLQsNC70L3QsCDQs9GA0LXRiNC60LAg0LLRitCyINGE0YPQvdC60YbQuNGP0YLQsCDigJ5jb25jbHVkZV9wYWNr4oCcLiAg0KLQvtCy0LAg0LUg0LPRgNC10YjQutCwINCyIEdpdCwgIgorItC00L7QutC70LDQtNCy0LDQudGC0LUg0Y8g0L3QsCDRgNCw0LfRgNCw0LHQvtGC0YfQuNGG0LjRgtC1LCDQutCw0YLQviDQv9GA0LDRgtC40YLQtSDQtS3Qv9C40YHQvNC+INC90LAg0LDQtNGA0LXRgTog4oCeZ2l0QHZnZXIuIgorImtlcm5lbC5vcmfigJwuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0clswXSAi0LTQtdC50YHRgtCy0LjQtdGC0L4g0LfQsNCy0YrRgNGI0Lgg0YEgJWQg0LvQvtC60LDQu9C10L0g0L7QsdC10LrRgiIKK21zZ3N0clsxXSAi0LTQtdC50YHRgtCy0LjQtdGC0L4g0LfQsNCy0YrRgNGI0Lgg0YEgJWQg0LvQvtC60LDQu9C90Lgg0L7QsdC10LrRgtCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICIiCisi0J3QtdC+0YfQsNC60LLQsNC90LAg0L/QvtGB0LvQtdC00LLQsNGJ0LAg0YHRg9C80LAg0LfQsCDQs9GA0LXRiNC60Lgg0LfQsCDigJ4lc+KAnCAo0L/RgNC40YfQuNC90LDRgtCwINC80L7QttC1INC00LAg0LUg0LPRgNC10YjQutCwINCyICIKKyLQtNC40YHQutCwKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAi0LIg0L/QsNC60LXRgtCwINC40LzQsCAlZCDQvdC10L3QsNC/0LDRgdCy0LDRidCwINGA0LDQt9C70LjQutCwIgorbXNnc3RyWzFdICLQsiDQv9Cw0LrQtdGC0LAg0LjQvNCwICVkINC90LXQvdCw0L/QsNGB0LLQsNGJ0Lgg0YDQsNC30LvQuNC60LgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgItC00L7QsdCw0LLQtdC90LjRj9GCINC+0LHQtdC60YIg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LrQvtC80L/RgNC10YHQuNGA0LAg0YEg4oCeZGVmbGF0ZeKAnDogJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgItC70L7QutCw0LvQvdC40Y/RgiDQvtCx0LXQutGCIOKAniVz4oCcINC1INC/0L7QstGA0LXQtNC10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgItC40LzQtdGC0L4g0L3QsCDQv9Cw0LrQtdGC0L3QuNGPINGE0LDQudC7IOKAniVz4oCcINC90LUg0LfQsNCy0YrRgNGI0LLQsCDQvdCwIOKAni5wYWNr4oCcIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAlcyBmaWxlICclcyciCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNC/0LjRgSDQvdCwINGE0LDQudC70LAg4oCeJXPigJwg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIHdyaXR0ZW4gJXMgZmlsZSAnJXMnIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC30LDRgtCy0LDRgNGP0L3QtdGC0L4g0L3QsCDQt9Cw0L/QuNGB0LDQvdC40Y8g0YTQsNC50Lsg4oCeJXPigJwg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NjMKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQt9Cw0YLQstCw0YDRj9C90LXRgtC+INC90LAg0L/QsNC60LXRgtC90LjRjyDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ3NworbXNnaWQgImNhbm5vdCBzdG9yZSBwYWNrIGZpbGUiCittc2dzdHIgItC/0LDQutC10YLQvdC40Y/RgiDRhNCw0LnQuyDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0ODUKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAi0YTQsNC50LvRitGCINC30LAg0LjQvdC00LXQutGB0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrRhdGA0LDQvdC10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MjkgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODYyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCittc2dzdHIgItC30LDQtNCw0LTQtdC90LAg0LUg0L3QtdC/0YDQsNCy0LjQu9C90LAg0LLQtdGA0YHQuNGPINC/0LDQutC10YLQuNGA0LDQvdC1OiDigJ5wYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj7igJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgItCh0YrRidC10YHRgtCy0YPQstCw0YnQuNGP0YIg0L/QsNC60LXRgtC10L0g0YTQsNC50Lsg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgItCh0YrRidC10YHRgtCy0YPQstCw0YnQuNGP0YIg0LjQvdC00LXQutGBINC30LAg0L/QsNC60LXRgtC90LjRjyDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAiJWQg0L7QsdC10LrRgiDQvdC1INC1INGA0LDQt9C70LjQutCwIgorbXNnc3RyWzFdICIlZCDQvtCx0LXQutGC0LAg0L3QtSDRgdCwINGA0LDQt9C70LjQutCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gItC00YrQu9C20LjQvdCw0YLQsCDQvdCwINCy0LXRgNC40LPQsNGC0LAg0LUgJWQ6ICVsdSDQvtCx0LXQutGCIgorbXNnc3RyWzFdICLQtNGK0LvQttC40L3QsNGC0LAg0L3QsCDQstC10YDQuNCz0LDRgtCwINC1ICVkOiAlbHUg0L7QsdC10LrRgtCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjkzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgItCf0YDQvtGG0LXRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LLRitGA0L3QtSDQutGK0Lwg0L/RgNC10LTQuNGI0L3QsNGC0LAg0YDQsNCx0L7RgtC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NDIgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc0NQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc2MSBidWlsdGluL2luZGV4LXBhY2suYzoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4MQorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWZpeC10aGlu4oCcINC40LfQuNGB0LrQstCwIOKAni0tc3RkaW7igJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3ODMKK21zZ2lkICItLXN0ZGluIHJlcXVpcmVzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIuKAni0tc3RkaW7igJwg0LjQt9C40YHQutCy0LAg0YXRgNCw0L3QuNC70LjRidC1INC90LAgZ2l0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzg5Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLXZlcmlmeeKAnCDQuNC30LjRgdC60LLQsCDQuNC80LUg0L3QsCDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTgzNyBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTgyCittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrIG9iamVjdHMiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0L/RgNC+0LLQtdGA0LrQsCDRgSDigJ5mc2Nr4oCcINC90LAg0L/QsNC60LXRgtC90LjRgtC1INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgdGVtcGxhdGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtC70YPRh9C4INC40L3RhNC+0YDQvNCw0YbQuNGPINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDRiNCw0LHQu9C+0L3QsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvdCwIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAi0LLRgNGK0LfQutCw0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvdCwIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0YrQt9C00LDQtNC1INGB0LjQvNCy0L7Qu9C90LAg0LLRgNGK0LfQutCwIOKAniVz4oCcINCyIOKAniVz4oCcIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC60L7Qv9C40YDQsCDQsiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdGVtcGxhdGUgJXMiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0YjQsNCx0LvQvtC90LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kIGluICVzIgorbXNnc3RyICLQvdGP0LzQsCDRiNCw0LHQu9C+0L3QuCDQsiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBmcm9tICclcyc6ICVzIgorbXNnc3RyICLRiNCw0LHQu9C+0L3QuNGC0LUg0L3Rj9C80LAg0LTQsCDQsdGK0LTQsNGCINC60L7Qv9C40YDQsNC90Lgg0L7RgiDigJ4lc+KAnDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaGFuZGxlIGZpbGUgdHlwZSAlZCIKK21zZ3N0ciAi0YTQsNC50LvQvtCy0LUg0L7RgiDQstC40LQgJWQg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LDRgiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQvNC10YHRgtC4INCyIOKAniVz4oCcIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNTQgYnVpbHRpbi9pbml0LWRiLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLQlNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIiIKKyLQmNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC1INC90LDQvdC+0LLQviDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQviwg0YHQv9C+0LTQtdC70LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSDQvdCwIEdpdCDQsiDigJ4lcyVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAi0JjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L3QtSDQvdCw0L3QvtCy0L4g0L3QsCDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0L4g0YXRgNCw0L3QuNC70LjRidC1INC90LAgR2l0INCyIOKAniVzJXPigJxcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgItCY0L3QuNGG0LjQsNC70LjQt9C40YDQsNC90LUg0L3QsCDQv9GA0LDQt9C90L4sINGB0L/QvtC00LXQu9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBHaXQg0LIg4oCeJXMlc+KAnFxuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC1INC90LAg0L/RgNCw0LfQvdC+INGF0YDQsNC90LjQu9C40YnQtSDQvdCwIEdpdCDQsiDigJ4lcyVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ2OAorbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT3QlNCY0KDQldCa0KLQntCg0JjQr1/QoV/QqNCQ0JHQm9Ce0J3QmF0gWy0tIgorInNoYXJlZFs90J/QoNCQ0JLQkF1dIFvQlNCY0KDQldCa0KLQntCg0JjQr10iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MQorbXNnaWQgInBlcm1pc3Npb25zIgorbXNnc3RyICLQv9GA0LDQstCwIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTIKK21zZ2lkICJzcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMiCittc2dzdHIgIiIKKyLRg9C60LDQt9Cy0LDQvdC1LCDRh9C1INGF0YDQsNC90LjQu9C40YnQtdGC0L4g0L3QsCBHaXQg0YnQtSDQsdGK0LTQtSDRgdC/0L7QtNC10LvQtdC90L4g0L7RgiDQv9C+0LLQtdGH0LUg0L7RgiDQtdC00LjQvSAiCisi0L/QvtGC0YDQtdCx0LjRgtC10LsiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyOSBidWlsdGluL2luaXQtZGIuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L3QsCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LLQu9C10LfQtSDQsiDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIiCisiJXMgKNC40LvQuCAtLXdvcmstdHJlZT3QlNCY0KDQldCa0KLQntCg0JjQrykg0LjQt9C40YHQutCy0LAg0YPQutCw0LfQstCw0L3QtdGC0L4g0L3QsCAlcyAo0LjQu9C4IC0tZ2l0LSIKKyJkaXI90JTQmNCg0JXQmtCi0J7QoNCY0K8pIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAi0KDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0LIg4oCeJXPigJwg0LUg0L3QtdC00L7RgdGC0YrQv9C90L4iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTYKK21zZ2lkICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgIgorIjx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgIgorItCb0JXQmtCh0JXQnNCQWyg9fDop0KHQotCe0JnQndCe0KHQol0p4oCmXSBb0KTQkNCZ0JvigKZdIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk1Cittc2dpZCAiZWRpdCBmaWxlcyBpbiBwbGFjZSIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L3QviDRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk2Cittc2dpZCAidHJpbSBlbXB0eSB0cmFpbGVycyIKK21zZ3N0ciAi0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDQv9GA0LDQt9C90LjRgtC1INC10L/QuNC70L7Qt9C4IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk5Cittc2dpZCAid2hlcmUgdG8gcGxhY2UgdGhlIG5ldyB0cmFpbGVyIgorbXNnc3RyICLQutGK0LTQtSDQtNCwINGB0LUg0L/QvtGB0YLQsNCy0Lgg0L3QvtCy0LjRj9GCINC10L/QuNC70L7QsyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDEKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi0LTQtdC50YHRgtCy0LjQtSwg0LDQutC+INC10L/QuNC70L7QsyDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDMKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBpcyBtaXNzaW5nIgorbXNnc3RyICLQtNC10LnRgdGC0LLQuNC1INC/0YDQuCDQu9C40L/RgdCy0LDRiSDQtdC/0LjQu9C+0LMiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA1Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIHRyYWlsZXJzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDQtdC/0LjQu9C+0LfQuNGC0LUiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA2Cittc2dpZCAiZG8gbm90IGFwcGx5IGNvbmZpZyBydWxlcyIKK21zZ3N0ciAi0LHQtdC3INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC/0YDQsNCy0LjQu9Cw0YLQsCDQt9CwINC90LDRgdGC0YDQvtC50LrQuNGC0LUiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA3Cittc2dpZCAiam9pbiB3aGl0ZXNwYWNlLWNvbnRpbnVlZCB2YWx1ZXMiCittc2dzdHIgItGB0LvQuNCy0LDQvdC1INC90LAg0YHRgtC+0LnQvdC+0YHRgtC40YLQtSDQv9C+0YHQu9C10LTQstCw0L3QtSDQvtGCINC30L3QsNGG0Lgg0LfQsCDQuNC90YLQtdGA0LLQsNC70LgiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA4Cittc2dpZCAic2V0IHBhcnNpbmcgb3B0aW9ucyIKK21zZ3N0ciAi0L7Qv9GG0LjQuCDQv9GA0Lgg0LDQvdCw0LvQuNC3IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMAorbXNnaWQgImRvIG5vdCB0cmVhdCAtLS0gc3BlY2lhbGx5IgorbXNnc3RyICLigJ4tLS3igJwg0L3Rj9C80LAg0YHQv9C10YbQuNCw0LvQvdC+INC30L3QsNGH0LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTExCittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAi0LXQv9C40LvQvtCzIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMgorbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICLQtdC/0LjQu9C+0LfQuCDQt9CwINC00L7QsdCw0LLRj9C90LUiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTIzCittc2dpZCAiLS10cmFpbGVyIHdpdGggLS1vbmx5LWlucHV0IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tdHJhaWxlcuKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg4oCeLS1uYW1lLW9ubHnigJwiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTMzCittc2dpZCAibm8gaW5wdXQgZmlsZSBnaXZlbiBmb3IgaW4tcGxhY2UgZWRpdGluZyIKK21zZ3N0ciAi0L3QtSDQtSDQt9Cw0LTQsNC00LXQvSDQstGF0L7QtNC10L0g0YTQsNC50Lsg0LfQsCDRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0LzRj9GB0YLQviIKKworIzogYnVpbHRpbi9sb2cuYzo1NgorbXNnaWQgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBsb2cgW9Ce0J/QptCY0K/igKZdIFvQlNCY0JDQn9CQ0JfQntCdX9Cd0JBf0JLQldCg0KHQmNCY0KLQlV0gW1stLV0g0J/QqtCi4oCmXSIKKworIzogYnVpbHRpbi9sb2cuYzo1NworbXNnaWQgImdpdCBzaG93IFs8b3B0aW9ucz5dIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgc2hvdyBb0J7Qn9Cm0JjQr+KApl0g0J7QkdCV0JrQouKApiIKKworIzogYnVpbHRpbi9sb2cuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLWRlY29yYXRlIG9wdGlvbjogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINC+0L/RhtC40Y8g4oCeLS1kZWNvcmF0ZeKAnDogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc0Cittc2dpZCAic2hvdyBzb3VyY2UiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40LfRhdC+0LTQvdC40Y8g0LrQvtC0IgorCisjOiBidWlsdGluL2xvZy5jOjE3NQorbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICIiCisi0JjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRhNCw0LnQuyDQt9CwINGB0YrQvtGC0LLQtdGC0YHRgtCy0LjRj9GC0LAg0L3QsCDQuNC80LXQvdCw0YLQsCDQuCDQsNC00YDQtdGB0LjRgtC1INC90LAg0LUt0L/QvtGJ0LAgKOKAni4iCisibWFpbG1hcOKAnCkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc3Cittc2dpZCAib25seSBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICLRgdC/0LXRhtC40LDQu9C10L0g0YTQvtGA0LzQsNGCINGB0LDQvNC+INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSDQvdCw0L/QsNGB0LLQsNGJ0Lgg0L3QsCDQqNCQ0JHQm9Ce0J3QsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzkKK21zZ2lkICJkbyBub3QgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAi0LHQtdC3INGB0L/QtdGG0LjQsNC70LXQvSDRhNC+0YDQvNCw0YIg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC90LDQv9Cw0YHQstCw0YnQuCDQvdCwINCo0JDQkdCb0J7QndCwIgorCisjOiBidWlsdGluL2xvZy5jOjE4MAorbXNnaWQgImRlY29yYXRlIG9wdGlvbnMiCittc2dzdHIgItC90LDRgdGC0YDQvtC50LrQuCDQvdCwINGE0L7RgNC80LDMgNGC0LAg0L3QsCDQuNC30LLQtdC20LTQsNC90LDRgtCwINC40L3RhNC+0YDQvNCw0YbQuNGPIgorCisjOiBidWlsdGluL2xvZy5jOjE4MworbXNnaWQgIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICIiCisi0J7QsdGA0LDQsdC+0YLQstCw0L3QtSDRgdCw0LzQviDQvdCwINGA0LXQtNC+0LLQtdGC0LUg0LLRitCyINGE0LDQudC70LAg0LIg0LTQuNCw0L/QsNC30L7QvdCwINC+0YIgbiDQtNC+IG0g0LLQutC70Y7Rh9C40YLQtdC70L3Qvi4gICIKKyLQkdGA0L7QtdC90LXRgtC+INC30LDQv9C+0YfQstCwINC+0YIgMSIKKworIzogYnVpbHRpbi9sb2cuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICLQoNC10LfRg9C70YLQsNGCOiAlZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgImdpdCBzaG93ICVzOiDQv9C+0LLRgNC10LTQtdC9INGE0LDQudC7IgorCisjOiBidWlsdGluL2xvZy5jOjU1MCBidWlsdGluL2xvZy5jOjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgItC+0LHQtdC60YLRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9OiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB0eXBlOiAlZCIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC10L0g0LLQuNC0OiAlZCIKKworIzogYnVpbHRpbi9sb2cuYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgY292ZXIgZnJvbSBkZXNjcmlwdGlvbiBtb2RlIgorbXNnc3RyICIlczog0L3QtdC/0YDQsNCy0LjQu9C90L4g0L/RgNC40LTRgNGD0LbQsNCy0LDRidC+INC/0LjRgdC80L4g0L7RgiDRgNC10LbQuNC80LAg0L3QsCDQvtC/0LjRgdCw0L3QuNC1IgorCisjOiBidWlsdGluL2xvZy5jOjgyMQorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgItC90LUg0LUg0LfQsNC00LDQtNC10L3QsCDRgdGC0L7QudC90L7RgdGCINC90LAg4oCeZm9ybWF0LmhlYWRlcnPigJwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTM2Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICLQv9GA0LXQutCw0LvQtdC90L4g0LTRitC70LPQviDQuNC80LUg0L3QsCDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0LfQsCDQuNC30YXQvtC00L3QsNGC0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgItGE0LDQudC70YrRgi3QutGA0YrQv9C60LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9IgorCisjOiBidWlsdGluL2xvZy5jOjk2OQorbXNnaWQgIm5lZWQgZXhhY3RseSBvbmUgcmFuZ2UiCittc2dzdHIgItGC0YDRj9Cx0LLQsCDQtNCwINC30LDQtNCw0LTQtdGC0LUg0YLQvtGH0L3QviDQtdC00LjQvSDQtNC40LDQv9Cw0LfQvtC9IgorCisjOiBidWlsdGluL2xvZy5jOjk3OQorbXNnaWQgIm5vdCBhIHJhbmdlIgorbXNnc3RyICLQvdC1INC1INC00LjQsNC/0LDQt9C+0L0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0MworbXNnaWQgImNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgItC/0YDQuNC00YDRg9C20LDQstCw0YnQvtGC0L4g0L/QuNGB0LzQviDRgtGA0Y/QsdCy0LAg0LTQsCDQtSDRhNC+0YDQvNCw0YLQuNGA0LDQvdC+INC60LDRgtC+INC1LdC/0LjRgdC80L4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0OQorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgY292ZXItbGV0dGVyIGZpbGUiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQv9GA0LjQtNGA0YPQttCw0LLQsNGJ0L4g0L/QuNGB0LzQviIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGE0L7RgNC80LDRgiDQvdCwINC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCINC30LAg0L7RgtCz0L7QstC+0YAg4oCeaW4tcmVwbHktdG/igJw6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTUKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggW9Ce0J/QptCY0K/igKZdIFvQntCiIHwg0JTQmNCQ0J/QkNCX0J7QnV/QndCQX9CS0JXQoNCh0JjQmNCi0JVdIgorCisjOiBidWlsdGluL2xvZy5jOjEzMTMKK21zZ2lkICJ0d28gb3V0cHV0IGRpcmVjdG9yaWVzPyIKK21zZ3N0ciAi0LzQvtC20LUg0LTQsCDRg9C60LDQttC10YLQtSDQvNCw0LrRgdC40LzRg9C8INC10LTQvdCwINC00LjRgNC10LrRgtC+0YDQuNGPINC30LAg0LjQt9GF0L7QtCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDI0IGJ1aWx0aW4vbG9nLmM6MjE5NyBidWlsdGluL2xvZy5jOjIxOTkgYnVpbHRpbi9sb2cuYzoyMjExCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWl0ICVzIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0L4g0L/QvtC00LDQstCw0L3QtTog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzNCBidWlsdGluL3JlcGxhY2UuYzo1OCBidWlsdGluL3JlcGxhY2UuYzoyMDcKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC1INGD0LrQsNC30LDRgtC10Lsg0LjQu9C4INC90LUg0YHQvtGH0Lgg0LrRitC8INC90LjRidC+IgorCisjOiBidWlsdGluL2xvZy5jOjE0MzkKK21zZ2lkICJjb3VsZCBub3QgZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICLRgtC+0YfQvdCw0YLQsCDQsdCw0LfQsCDQt9CwINGB0LvQuNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDQzCittc2dpZCAiIgorImZhaWxlZCB0byBnZXQgdXBzdHJlYW0sIGlmIHlvdSB3YW50IHRvIHJlY29yZCBiYXNlIGNvbW1pdCBhdXRvbWF0aWNhbGx5LFxuIgorInBsZWFzZSB1c2UgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byB0byB0cmFjayBhIHJlbW90ZSBicmFuY2guXG4iCisiT3IgeW91IGNvdWxkIHNwZWNpZnkgYmFzZSBjb21taXQgYnkgLS1iYXNlPTxiYXNlLWNvbW1pdC1pZD4gbWFudWFsbHkiCittc2dzdHIgIiIKKyLRgdC70LXQtNC10L3QuNGP0YIg0LrQu9C+0L0g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGD0YHRgtCw0L3QvtCy0LXQvS4gINCQ0LrQviDQuNGB0LrQsNGC0LUg0YDRitGH0L3QviDQtNCwINCz0L5cbiIKKyLQt9Cw0LTQsNC00LXRgtC1LCDQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG/igJwuXG4iCisi0JzQvtC20LXRgtC1INGA0YrRh9C90L4g0LTQsCDQt9Cw0LTQsNC00LXRgtC1INCx0LDQt9C+0LLQviDQv9C+0LTQsNCy0LDQvdC1INGH0YDQtdC3IOKAni0tYmFzZT08YmFzZS1jb21taXQtaWQ+4oCcLiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDYzCittc2dpZCAiZmFpbGVkIHRvIGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIKK21zZ3N0ciAi0YLQvtGH0L3QsNGC0LAg0LHQsNC30LAg0L/RgNC4INGB0LvQuNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc0Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkIGJlIHRoZSBhbmNlc3RvciBvZiByZXZpc2lvbiBsaXN0IgorbXNnc3RyICLQsdCw0LfQvtCy0L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0YLRgNGP0LHQstCwINC00LAg0LUg0L/RgNC10LTRiNC10YHRgtCy0LXQvdC40LrRitGCINC90LAg0YHQv9C40YHRitC60LAg0YEg0LLQtdGA0YHQuNC40YLQtSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc4Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkbid0IGJlIGluIHJldmlzaW9uIGxpc3QiCittc2dzdHIgItCx0LDQt9C+0LLQvtGC0L4g0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LUg0LIg0YHQv9C40YHRitC60LAg0YEg0LLQtdGA0YHQuNC40YLQtSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTMxCittc2dpZCAiY2Fubm90IGdldCBwYXRjaCBpZCIKK21zZ3N0ciAi0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRitGCINC90LAg0LrRgNGK0L/QutCw0YLQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/QvtC70YPRh9C10L0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU4MworbXNnaWQgImZhaWxlZCB0byBpbmZlciByYW5nZS1kaWZmIHJhbmdlcyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC+0L/RgNC10LTQtdC70Y/QvdC1INC90LAg0LTQuNCw0L/QsNC30L7QvdC40YLQtSDQt9CwINGA0LDQt9C70LjQutCwIgorCisjOiBidWlsdGluL2xvZy5jOjE2MjkKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICLQvdC+0LzQtdGA0LDRhtC40Y8g4oCeW1BBVENIIG4vbV3igJwg0LTQvtGA0Lgg0Lgg0L/RgNC4INC10LTQuNC90YHRgtCy0LXQvdCwINC60YDRitC/0LrQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjMyCittc2dpZCAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiCittc2dzdHIgItC90L7QvNC10YDQsNGG0LjRjyDigJ5bUEFUQ0hd4oCcINC00L7RgNC4INC4INC/0YDQuCDQvNC90L7QttC10YHRgtCy0L4g0LrRgNGK0L/QutC4IgorCisjOiBidWlsdGluL2xvZy5jOjE2MzYKK21zZ2lkICJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LrRgNGK0L/QutC40YLQtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LjQt9GF0L7QtCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjM4Cittc2dpZCAiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0YDQuNC00YDRg9C20LDQstCw0YnQviDQv9C40YHQvNC+IgorCisjOiBidWlsdGluL2xvZy5jOjE2NDAKK21zZ2lkICJ1c2Ugc2ltcGxlIG51bWJlciBzZXF1ZW5jZSBmb3Igb3V0cHV0IGZpbGUgbmFtZXMiCittc2dzdHIgItC/0YDQvtGB0YLQsCDRh9C40YHQu9C+0LLQsCDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvQvdC+0YHRgiDQt9CwINC40LzQtdC90LDRgtCwINC90LAg0YTQsNC50LvQvtCy0LXRgtC1LdC60YDRitC/0LrQuCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQxCittc2dpZCAic2Z4IgorbXNnc3RyICLQl9Cd0JDQptCYIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDIKK21zZ2lkICJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRgtC10LfQuCDQl9Cd0JDQptCYINC30LAg0YHRg9GE0LjQutGBINCy0LzQtdGB0YLQviDigJ4ucGF0Y2jigJwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NAorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgItC90L7QvNC10YDQuNGA0LDQvdC10YLQviDQvdCwINC60YDRitC/0LrQuNGC0LUg0LTQsCDQt9Cw0L/QvtGH0LLQsCDQvtGCINGC0L7Qt9C4INCR0KDQntCZLCDQsCDQvdC1INGBIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NgorbXNnaWQgIm1hcmsgdGhlIHNlcmllcyBhcyBOdGggcmUtcm9sbCIKK21zZ3N0ciAi0L7RgtCx0LXQu9GP0LfQstCw0L3QtSwg0YfQtSDRgtC+0LLQsCDQtSBOLdGC0LDRgtCwINC/0L7RgNC10LTQvdCwINGA0LXQtNCw0LrRhtC40Y8g0L3QsCDQv9C+0YDQtdC00LjRhtCw0YLQsCDQvtGCINC60YDRitC/0LrQuCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ4Cittc2dpZCAiVXNlIFtSRkMgUEFUQ0hdIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAi0JjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDigJ5bUkZDIFBBVENIXeKAnCDQstC80LXRgdGC0L4g4oCeW1BBVENIXeKAnCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUxCittc2dpZCAiY292ZXItZnJvbS1kZXNjcmlwdGlvbi1tb2RlIgorbXNnc3RyICLRgNC10LbQuNC8LdC/0YDQuNC00YDRg9C20LDQstCw0YnQvi3Qv9C40YHQvNC+LdC/0L4t0L7Qv9C40YHQsNC90LjQtSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUyCittc2dpZCAiZ2VuZXJhdGUgcGFydHMgb2YgYSBjb3ZlciBsZXR0ZXIgYmFzZWQgb24gYSBicmFuY2gncyBkZXNjcmlwdGlvbiIKK21zZ3N0ciAiIgorItCz0LXQvdC10YDQuNGA0LDQvdC1INC90LAg0YfQsNGB0YLQuNGC0LUg0L3QsCDQv9GA0LjQtNGA0YPQttCw0LLQsNGJ0L7RgtC+INC/0LjRgdC80L4g0L3QsCDQsdCw0LfQsNGC0LAg0L3QsCDQvtC/0LjRgdCw0L3QuNC10YLQviDQvdCwICIKKyLQutC70L7QvdCwIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTQKK21zZ2lkICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgItCY0LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YLQvtC30Lgg4oCeW9Cf0KDQldCk0JjQmtChXeKAnCDQstC80LXRgdGC0L4g4oCeW1BBVENIXeKAnCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAic3RvcmUgcmVzdWx0aW5nIGZpbGVzIGluIDxkaXI+IgorbXNnc3RyICLQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQuNC30YXQvtC00L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0LIg0YLQsNC30Lgg0JTQmNCg0JXQmtCi0J7QoNCY0K8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MAorbXNnaWQgImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIgorbXNnc3RyICLQsdC10Lcg0LTQvtCx0LDQstGP0L3QtS/QvNCw0YXQsNC90LUg0L3QsCDQv9GA0LXRhNC40LrRgdCwIOKAnltQQVRDSF3igJwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MworbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgItCx0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNCw0LfQu9C40LrQuCDQvNC10LbQtNGDINC00LLQvtC40YfQvdC4INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2xvZy5jOjE2NjUKK21zZ2lkICJvdXRwdXQgYWxsLXplcm8gaGFzaCBpbiBGcm9tIGhlYWRlciIKK21zZ3N0ciAi0LIg0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg4oCeRnJvbTrigJwgKNC+0YIpINC60L7QvdGC0YDQvtC70L3QsNGC0LAg0YHRg9C80LAg0LTQsCDQtSDRgdCw0LzQviDQvtGCINC90YPQu9C4IgorCisjOiBidWlsdGluL2xvZy5jOjE2NjcKK21zZ2lkICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iCittc2dzdHIgItCx0LXQtyDQutGA0YrQv9C60LgsINC60L7QuNGC0L4g0L/RgNC40YHRitGB0YLQstCw0YIg0LIg0YHQu9C10LTQtdC90LjRjyDQutC70L7QvSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY5Cittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICIiCisi0LjQt9Cy0LXQttC00LDQvdC1INCy0YrQsiDRhNC+0YDQvNCw0YIg0LfQsCDQutGA0YrQv9C60LgsINCwINC90LAg0LIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyAo0LrRgNGK0L/QutCwINC4INGB0YLQsNGC0LjRgdGC0LjQutCwKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjcxCittc2dpZCAiTWVzc2FnaW5nIgorbXNnc3RyICLQntC/0YbQuNC4INC/0YDQuCDQuNC30L/RgNCw0YnQsNC90LUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MgorbXNnaWQgImhlYWRlciIKK21zZ3N0ciAi0JfQkNCT0JvQkNCS0J3QkF/Qp9CQ0KHQoiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjczCittc2dpZCAiYWRkIGVtYWlsIGhlYWRlciIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGC0LDQt9C4INCX0JDQk9Cb0JDQktCd0JBf0KfQkNCh0KIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NCBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJlbWFpbCIKK21zZ3N0ciAi0JUt0J/QntCp0JAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NAorbXNnaWQgImFkZCBUbzogaGVhZGVyIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0LfQsNCz0LvQsNCy0L3QsCDRh9Cw0YHRgiDigJ5UbzrigJwgKNC00L4pIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINC30LDQs9C70LDQstC90LAg0YfQsNGB0YIg4oCeQ2M64oCcICjQuCDQtNC+KSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc4Cittc2dpZCAiaWRlbnQiCittc2dzdHIgItCY0JTQldCd0KLQmNCn0J3QntCh0KIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3OQorbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgIiIKKyLQt9Cw0LTQsNCy0LDQvdC1INC90LAg0LDQtNGA0LXRgdCwINCyINC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCIOKAnkZyb23igJwgKNC+0YIpINC00LAg0LUg0YLQsNC30Lgg0JjQlNCV0J3QotCY0KfQndCe0KHQoi4gINCQ0LrQviAiCisi0L3QtSDQtSDQt9Cw0LTQsNC00LXQvdCwINGC0LDQutCw0LLQsCwg0YHQtSDQstC30LjQvNCwINCw0LTRgNC10YHQsCDQvdCwINC/0L7QtNCw0LLQsNGJ0LjRjyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgxCittc2dpZCAibWVzc2FnZS1pZCIKK21zZ3N0ciAi0JjQlNCV0J3QotCY0KTQmNCa0JDQotCe0KBf0J3QkF/QodCq0J7QkdCp0JXQndCY0JUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MgorbXNnaWQgIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIKK21zZ3N0ciAiIgorItC/0YrRgNCy0L7RgtC+INGB0YrQvtCx0YnQtdC90LjQtSDQtNCwINC1INCyINC+0YLQs9C+0LLQvtGAINC90LAg0LUt0L/QuNGB0LzQvtGC0L4g0YEg0YLQvtC30LggIgorItCY0JTQldCd0KLQmNCk0JjQmtCQ0KLQntCgX9Cd0JBf0KHQqtCe0JHQqdCV0J3QmNCVIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODMgYnVpbHRpbi9sb2cuYzoxNjg2Cittc2dpZCAiYm91bmRhcnkiCittc2dzdHIgItCz0YDQsNC90LjRhtCwIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODQKK21zZ2lkICJhdHRhY2ggdGhlIHBhdGNoIgorbXNnc3RyICLQv9GA0LjQutGA0LXQv9GP0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NworbXNnaWQgImlubGluZSB0aGUgcGF0Y2giCittc2dzdHIgItCy0LrQu9GO0YfQstCw0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAg0LIg0YLQtdC60YHRgtCwINC90LAg0L/QuNGB0LzQsNGC0LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5MQorbXNnaWQgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIgorbXNnc3RyICIiCisi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQvdC40YjQutC4INC30LAg0YHRitC+0LHRidC10L3QuNGP0YLQsC4gINCh0KLQmNCb0YrRgiDQtSDigJ5zaGFsbG934oCcICjQv9C70LjRgtGK0LopINC40LvQuCAiCisi4oCeZGVlcOKAnCAo0LTRitC70LHQvtC6KSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkzCittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICLQv9C+0LTQv9C40YEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINC/0L7Qu9C1INC30LAg0L/QvtC00L/QuNGBIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTUKK21zZ2lkICJiYXNlLWNvbW1pdCIKK21zZ3N0ciAi0JHQkNCX0J7QktCeX9Cf0J7QlNCQ0JLQkNCd0JUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NgorbXNnaWQgImFkZCBwcmVyZXF1aXNpdGUgdHJlZSBpbmZvIHRvIHRoZSBwYXRjaCBzZXJpZXMiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDQvdC10L7QsdGF0L7QtNC40LzQvtGC0L4g0JHQkNCX0L7QstC+INC00YrRgNCy0L4g0LrRitC8INC/0L7RgNC10LTQuNGG0LDRgtCwINC+0YIg0LrRgNGK0L/QutC4IgorCisjOiBidWlsdGluL2xvZy5jOjE2OTgKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUgZnJvbSBhIGZpbGUiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDQv9C+0LTQv9C40YEg0L7RgiDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk5Cittc2dpZCAiZG9uJ3QgcHJpbnQgdGhlIHBhdGNoIGZpbGVuYW1lcyIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40LzQtdC90LDRgtCwINC90LAg0LrRgNGK0L/QutC40YLQtSIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAxCittc2dpZCAic2hvdyBwcm9ncmVzcyB3aGlsZSBnZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90LDQv9GA0LXQtNGK0LrQsCDQstGK0LIg0YTQsNC30LDRgtCwINC90LAg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LrRgNGK0L/QutC40YLQtSIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAzCittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJldj4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDRgdC/0YDRj9C80L4g0JLQldCg0KHQuNGP0YLQsCDQsiDQv9GA0LjQtNGA0YPQttCw0LLQsNGJ0L7RgtC+INC/0LjRgdC80L4g0LjQu9C4INC10LTQuNC90YHRgtCy0LXQvdCwICIKKyLQutGA0YrQv9C60LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwNgorbXNnaWQgInNob3cgY2hhbmdlcyBhZ2FpbnN0IDxyZWZzcGVjPiBpbiBjb3ZlciBsZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisi0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INGB0L/RgNGP0LzQviDRg9C60LDQt9Cw0YLQtdC70Y8g0L3QsCDQktCV0KDQodC40Y/RgtCwINCyINC/0YDQuNC00YDRg9C20LDQstCw0YnQvtGC0L4g0L/QuNGB0LzQviAiCisi0LjQu9C4INC10LTQuNC90YHRgtCy0LXQvdCwINC60YDRitC/0LrQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA4Cittc2dpZCAicGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAi0L/RgNC+0YbQtdC90YIg0LfQsCDQv9GA0LXRgtC10LPQu9GP0L3QtSDQv9GA0Lgg0L7RhtC10L3QutCwINC90LAg0YHRitC30LTQsNCy0LDQvdC10YLQviIKKworIzogYnVpbHRpbi9sb2cuYzoxNzkyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJXMiCittc2dzdHIgItCz0YDQtdGI0L3QsCDQuNC00LXQvdGC0LjRh9C90L7RgdGCOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxODA3Cittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni1u4oCcINC4IOKAni1r4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL2xvZy5jOjE4MDkKK21zZ2lkICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLXN1YmplY3QtcHJlZml44oCcL+KAni1yZmPigJwg0Lgg4oCeLWvigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxNworbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tbmFtZS1vbmx54oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQs9C10L3QtdGA0LjRgNCw0L3QtdGC0L4g0L3QsCDQutGA0YrQv9C60LgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxOQorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1uYW1lLXN0YXR1c+KAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0LPQtdC90LXRgNC40YDQsNC90LXRgtC+INC90LAg0LrRgNGK0L/QutC4IgorCisjOiBidWlsdGluL2xvZy5jOjE4MjEKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tY2hlY2vigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINCz0LXQvdC10YDQuNGA0LDQvdC10YLQviDQvdCwINC60YDRitC/0LrQuCIKKworIzogYnVpbHRpbi9sb2cuYzoxODU0Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgIiIKKyLQuNC30YXQvtC00YrRgiDQvNC+0LbQtSDQtNCwINC40LvQuCDRgdGC0LDQvdC00LDRgNGC0L3QuNGP0YIsINC40LvQuCDQtNCwINC1INCyINC00LjRgNC10LrRgtC+0YDQuNGPLCDQvdC+INC90LUg0Lgg0LTQstC10YLQtS4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk1OAorbXNnaWQgIi0taW50ZXJkaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorItC+0L/RhtC40Y/RgtCwIOKAni0taW50ZXJkaWZm4oCcINC40LfQuNGB0LrQstCwINC+0L/RhtC40Y8g4oCeLS1jb3Zlci1sZXR0ZXLigJwg0LjQu9C4INC10LTQuNC90YHRgtCy0LXQvdCwINC60YDRitC/0LrQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYyCittc2dpZCAiSW50ZXJkaWZmOiIKK21zZ3N0ciAi0KDQsNC30LvQuNC60LAg0LIg0YDQsNC30LvQuNC60LjRgtC1OiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVyZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgItCg0LDQt9C70LjQutCwINCyINGA0LDQt9C70LjQutC40YLQtSDRgdC/0YDRj9C80L4gdiVkOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTY5Cittc2dpZCAiLS1jcmVhdGlvbi1mYWN0b3IgcmVxdWlyZXMgLS1yYW5nZS1kaWZmIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWNyZWF0aW9uLWZhY3RvcuKAnCDQuNC30LjRgdC60LLQsCDQvtC/0YbQuNGPIOKAni0tcmFuZ2UtZGlmZuKAnCIKKworIzogYnVpbHRpbi9sb2cuYzoxOTczCittc2dpZCAiLS1yYW5nZS1kaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorItC+0L/RhtC40Y/RgtCwIOKAni0tcmFuZ2UtZGlmZuKAnCDQuNC30LjRgdC60LLQsCDQvtC/0YbQuNGPIOKAni0tY292ZXItbGV0dGVy4oCcINC40LvQuCDQtdC00LjQvdGB0YLQstC10L3QsCDQutGA0YrQv9C60LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk4MQorbXNnaWQgIlJhbmdlLWRpZmY6IgorbXNnc3RyICLQlNC40LDQv9Cw0LfQvtC90L3QsCDRgNCw0LfQu9C40LrQsDoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSYW5nZS1kaWZmIGFnYWluc3QgdiVkOiIKK21zZ3N0ciAi0JTQuNCw0L/QsNC30L7QvdC90LAg0YDQsNC30LvQuNC60LAg0YHQv9GA0Y/QvNC+IHYlZDoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk5MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzaWduYXR1cmUgZmlsZSAnJXMnIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0YEg0L/QvtC00L/QuNGBINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL2xvZy5jOjIwMjkKK21zZ2lkICJHZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC60YDRitC/0LrQuCIKKworIzogYnVpbHRpbi9sb2cuYzoyMDczCittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQuNC30YXQvtC00L3QuCDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9sb2cuYzoyMTMyCittc2dpZCAiZ2l0IGNoZXJyeSBbLXZdIFs8dXBzdHJlYW0+IFs8aGVhZD4gWzxsaW1pdD5dXV0iCittc2dzdHIgImdpdCBjaGVycnkgWy12XSBb0J7QotCU0JDQm9CV0KfQldCdX9Ca0JvQntCdIFvQktCg0KrQpSBb0J/QoNCV0JTQldCbXV1dIgorCisjOiBidWlsdGluL2xvZy5jOjIxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIgorbXNnc3RyICIiCisi0KHQu9C10LTQtdC90LjRj9GCINC+0YLQtNCw0LvQtdGH0LXQvSDQutC70L7QvSDQvdC1INCx0LUg0L7RgtC60YDQuNGCLCDQt9Cw0YLQvtCy0LAg0LjQt9GA0LjRh9C90L4g0LfQsNC00LDQudGC0LUgIgorItCe0KLQlNCQ0JvQldCn0JXQnV/QmtCb0J7QnS5cbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ3MAorbXNnaWQgImdpdCBscy1maWxlcyBbPG9wdGlvbnM+XSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLWZpbGVzIFvQntCf0KbQmNCv4oCmXSBb0KTQkNCZ0JvigKZdIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI2Cittc2dpZCAiaWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGFncyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINGE0LDQudC70L7QstC10YLQtSDRgSDQtdC00L3QvtCx0YPQutCy0LXQvdC4INGE0LvQsNCz0L7QstC1IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI4Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgItC80LDQu9C60Lgg0LHRg9C60LLQuCDQt9CwINGE0LDQudC70L7QstC10YLQtSwg0LrQvtC40YLQviDQtNCwINGB0LUg0YHRh9C10YLQsNGCINC30LAg0L3QtdC/0YDQvtC80LXQvdC10L3QuCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzMAorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2ZzbW9uaXRvciBjbGVhbicgZmlsZXMiCittc2dzdHIgItC80LDQu9C60Lgg0LHRg9C60LLQuCDQt9CwINGE0LDQudC70L7QstC10YLQtSDQt9CwINC60L7QvNCw0L3QtNCw0YLQsCDigJ5mc21vbml0b3IgY2xlYW7igJwiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzIKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LrQtdGI0LjRgNCw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUgKNGB0YLQsNC90LTQsNGA0YLQvdC+KSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNAorbXNnaWQgInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC30YLRgNC40YLQuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzYKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzgKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC00YDRg9Cz0LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQwCittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40LPQvdC+0YDQuNGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MworbXNnaWQgInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC80LXRgtC+INC90LAg0L7QsdC10LrRgtCwINC30LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC90LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDUKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUsINC60L7QuNGC0L4g0YLRgNGP0LHQstCwINC00LAg0LHRitC00LDRgiDQuNC30YLRgNC40YLQuCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NworbXNnaWQgInNob3cgJ290aGVyJyBkaXJlY3RvcmllcycgbmFtZXMgb25seSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0LjQvNC10YLQviDQvdCwINC00YDRg9Cz0LjRgtC1ICjQvdC10YHQu9C10LTQtdC90LjRgtC1KSDQtNC40YDQtdC60YLQvtGA0LjQuCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0OQorbXNnaWQgInNob3cgbGluZSBlbmRpbmdzIG9mIGZpbGVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQt9C90LDRhtC40YLQtSDQt9CwINC60YDQsNC5INC90LAg0YDQtdC0INCy0YrQsiDRhNCw0LnQu9C+0LLQtdGC0LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTEKK21zZ2lkICJkb24ndCBzaG93IGVtcHR5IGRpcmVjdG9yaWVzIgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/RgNCw0LfQvdC40YLQtSDQtNC40YDQtdC60YLQvtGA0LjQuCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QtdGB0LvQtdGC0LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU2Cittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQt9CwINC+0YLQvNGP0L3QsCDQvdCwINGA0LDQt9GA0LXRiNC10L3QuNGC0LUg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU4Cittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICLQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSDQvdCw0L/QsNGB0LLQsNGJ0Lgg0KjQkNCR0JvQntCd0LAiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjEKK21zZ2lkICJleGNsdWRlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gPGZpbGU+IgorbXNnc3RyICLRiNCw0LHQu9C+0L3QuNGC0LUg0LfQsCDQuNCz0L3QvtGA0LjRgNCw0L3QtSDQtNCwINGB0LUg0L/RgNC+0YfQtdGC0LDRgiDQvtGCINGC0L7Qt9C4INCk0JDQmdCbIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY0Cittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgIiIKKyLQuNC30YfQuNGC0LDQvdC1INC90LAg0LTQvtC/0YrQu9C90LjRgtC10LvQvdC40YLQtSDRiNCw0LHQu9C+0L3QuCDQt9CwINC40LPQvdC+0YDQuNGA0LDQvdC1INC/0L4g0LTQuNGA0LXQutGC0L7RgNC40Y8g0L7RgiDRgtC+0LfQuCDQpNCQ0JnQmyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NgorbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QviDQuNCz0L3QvtGA0LjRgNCw0L3QuNGC0LUg0L7RgiBHaXQg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzAKK21zZ2lkICJtYWtlIHRoZSBvdXRwdXQgcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAi0L/RitGC0LjRidCw0YLQsCDQtNCwINGB0LAg0L7RgtC90L7RgdC40YLQtdC70L3QuCDRgdC/0YDRj9C80L4g0L7RgdC90L7QstC90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC90LAg0L/RgNC+0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzMKK21zZ2lkICJyZWN1cnNlIHRocm91Z2ggc3VibW9kdWxlcyIKK21zZ3N0ciAi0YDQtdC60YPRgNGB0LjQstC90L4g0L7QsdGF0L7QttC00LDQvdC1INC/0L7QtNC80L7QtNGD0LvQuNGC0LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzUKK21zZ2lkICJpZiBhbnkgPGZpbGU+IGlzIG5vdCBpbiB0aGUgaW5kZXgsIHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IiCittc2dzdHIgItCz0YDQtdGI0LrQsCwg0LDQutC+INC90Y/QutC+0Lkg0L7RgiDRgtC10LfQuCDQpNCQ0JnQm9C+0LLQtSDQvdC1INC1INCyINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc2Cittc2dpZCAidHJlZS1pc2giCittc2dzdHIgItCj0JrQkNCX0JDQotCV0Jtf0JrQqtCcX9CU0KrQoNCS0J4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzcKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICIiCisi0YHRh9C40YLQsNC90LUsINGH0LUg0L/RitGC0LjRidCw0YLQsCDQuNC30YLRgNC40YLQuCDRgdC70LXQtCDQo9Ca0JDQl9CQ0KLQldCb0Y9f0JrQqtCcX9CU0KrQoNCS0J4g0LLRgdC1INC+0YnQtSDRgdGK0YnQtdGB0YLQstGD0LLQsNGCIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc5Cittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC30LAg0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDQs9GA0LXRiNC60LgiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6OQorbXNnaWQgIiIKKyJnaXQgbHMtcmVtb3RlIFstLWhlYWRzXSBbLS10YWdzXSBbLS1yZWZzXSBbLS11cGxvYWQtcGFjaz08ZXhlYz5dXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy1xIHwgLS1xdWlldF0gWy0tZXhpdC1jb2RlXSBbLS1nZXQtdXJsXVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstLXN5bXJlZl0gWzxyZXBvc2l0b3J5PiBbPHJlZnM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgbHMtcmVtb3RlIFstLWhlYWRzXSBbLS10YWdzXSBbLS1yZWZzXSBbLS11cGxvYWQtcGFjaz3QmtCe0JzQkNCd0JTQkF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBb0KXQoNCQ0J3QmNCb0JjQqdCVIFvQo9Ca0JDQl9CQ0KLQldCb4oCmXV0iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINCw0LTRgNC10YHQuNGC0LUg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QuNGC0LUg0YXRgNCw0L3QuNC70LjRidCwIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjIgYnVpbHRpbi9yZWJhc2UuYzoxNTYxCittc2dpZCAiZXhlYyIKK21zZ3N0ciAi0JrQntCc0JDQndCU0JAiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjEgYnVpbHRpbi9scy1yZW1vdGUuYzo2MworbXNnaWQgInBhdGggb2YgZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUgaG9zdCIKK21zZ3N0ciAi0L/RitGCINC60YrQvCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LXVwbG9hZC1wYWNr4oCcINC90LAg0L7RgtC00LDQu9C10YfQtdC90LDRgtCwINC80LDRiNC40L3QsCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NQorbXNnaWQgImxpbWl0IHRvIHRhZ3MiCittc2dzdHIgItGB0LDQvNC+INC10YLQuNC60LXRgtC40YLQtSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NgorbXNnaWQgImxpbWl0IHRvIGhlYWRzIgorbXNnc3RyICLRgdCw0LzQviDQstGK0YDRhdC+0LLQtdGC0LUiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjcKK21zZ2lkICJkbyBub3Qgc2hvdyBwZWVsZWQgdGFncyIKK21zZ3N0ciAi0LHQtdC3INC/0YDQvtGB0LvQtdC00Y/QstCw0L3QtSDQvdCwINC90LXQv9GA0LXQutC40YLQtSDQtdGC0LjQutC10YLQuCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2OQorbXNnaWQgInRha2UgdXJsLjxiYXNlPi5pbnN0ZWFkT2YgaW50byBhY2NvdW50IgorbXNnc3RyICLQstC30LjQvNCw0L3QtSDQv9GA0LXQtNCy0LjQtCDQvdCwIOKAnnVybC7QkdCQ0JfQkC5pbnN0ZWFkT2bigJwiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzIKK21zZ2lkICJleGl0IHdpdGggZXhpdCBjb2RlIDIgaWYgbm8gbWF0Y2hpbmcgcmVmcyBhcmUgZm91bmQiCittc2dzdHIgItC40LfRhdC+0LQg0YEg0LrQvtC0IDIsINCw0LrQviDQvdC1INGB0LUg0L7RgtC60YDQuNGP0YIg0YHRitCy0L/QsNC00LDRidC4INGD0LrQsNC30LDRgtC10LvQuCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3NQorbXNnaWQgInNob3cgdW5kZXJseWluZyByZWYgaW4gYWRkaXRpb24gdG8gdGhlIG9iamVjdCBwb2ludGVkIGJ5IGl0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70Y8g0LfQsNC10LTQvdC+INGBINC+0LHQtdC60YLQsCDRgdC+0YfQtdC9INC+0YIg0L3QtdCz0L4iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjMwCittc2dpZCAiZ2l0IGxzLXRyZWUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLXRyZWUgW9Ce0J/QptCY0K/igKZdINCj0JrQkNCX0JDQotCV0Jtf0JrQqtCcX9CU0KrQoNCS0J4gW9Cf0KrQouKApl0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOAorbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0LTRitGA0LLQtdGC0LAiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMAorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIKK21zZ3N0ciAi0YDQtdC60YPRgNGB0LjQstC90L4g0L7QsdGF0L7QttC00LDQvdC1INC/0L7QtNC00YrRgNCy0LXRgtCw0YLQsCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMyCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LTRitGA0LLQtdGC0LDRgtCwINC/0YDQuCDRgNC10LrRg9GA0YHQuNCy0L3QvtGC0L4g0L7QsdGF0L7QttC00LDQvdC1IgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICLRgNCw0LfQtNC10LvRj9C90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1INGBINC90YPQu9C10LLQuNGPINC30L3QsNC6IOKAnk5VTOKAnCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM2Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQsNC30LzQtdGA0LAg0L3QsCDQvtCx0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzOCBidWlsdGluL2xzLXRyZWUuYzoxNDAKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0LjQvNC10L3QsNGC0LAg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MworbXNnaWQgInVzZSBmdWxsIHBhdGggbmFtZXMiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0L/RitC70L3QuNGC0LUg0LjQvNC10L3QsCDQvdCwINC/0YrRgtC40YnQsNGC0LAiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0NQorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGG0Y/Qu9C+0YLQviDQtNGK0YDQstC+LCDQvdC1INGB0LDQvNC+INC90LAg0YLQtdC60YPRidCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyAo0LLQutC70Y7Rh9Cy0LAg0L7Qv9GG0LjRj9GC0LAgIgorIuKAni0tZnVsbC1uYW1l4oCcKSIKKworIzogYnVpbHRpbi9tYWlsc3BsaXQuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgbWJveDogJyVzJyIKK21zZ3N0ciAi0L/RgNCw0LfQvdCwINC/0L7RidC10L3RgdC60LAg0LrRg9GC0LjRjyBtYm94OiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU1Cittc2dpZCAiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIFs8Y29tbWl0Pi4uLl0iCittc2dzdHIgImdpdCBtZXJnZSBb0J7Qn9Cm0JjQr+KApl0gW9Cf0J7QlNCQ0JLQkNCd0JXigKZdIgorCisjOiBidWlsdGluL21lcmdlLmM6NTYKK21zZ2lkICJnaXQgbWVyZ2UgLS1hYm9ydCIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tYWJvcnQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NworbXNnaWQgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorbXNnc3RyICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExOQorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLW3igJwg0LjQt9C40YHQutCy0LAg0YHRgtC+0LnQvdC+0YHRgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQuNC30LjRgdC60LLQsCDRgdGC0L7QudC90L7RgdGCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgItCd0Y/QvNCwINGC0LDQutCw0LLQsCDRgdGC0YDQsNGC0LXQs9C40Y8g0LfQsCDRgdC70LjQstCw0L3QtTog4oCeJXPigJwuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAi0J3QsNC70LjRh9C90LjRgtC1INGB0YLRgNCw0YLQtdCz0LjQuCDRgdCwOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAi0JTQvtC/0YrQu9C90LjRgtC10LvQvdC40YLQtSDRgdGC0YDQsNGC0LXQs9C40Lgg0YHQsDoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDUgYnVpbHRpbi9wdWxsLmM6MTMyCittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YLQsNGC0LjRgdGC0LjQutCw0YLQsCDRgdC70LXQtCDQt9Cw0LLRitGA0YjQstCw0L3QtSDQvdCwINGB0LvQuNCy0LDQvdC1IgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ4IGJ1aWx0aW4vcHVsbC5jOjEzNQorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRgtCw0YLQuNGB0YLQuNC60LDRgtCwINGB0LvQtdC0INC30LDQstGK0YDRiNCy0LDQvdC1INC90LAg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDkgYnVpbHRpbi9wdWxsLmM6MTM4Cittc2dpZCAiKHN5bm9ueW0gdG8gLS1zdGF0KSIKK21zZ3N0ciAiKNC/0YHQtdCy0LTQvtC90LjQvCDQvdCwIOKAni0tc3RhdOKAnCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTEgYnVpbHRpbi9wdWxsLmM6MTQxCittc2dpZCAiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisi0LTQvtCx0LDQstGP0L3QtSAo0L3QsCDQvNCw0LrRgdC40LzRg9C8INGC0LDQutGK0LIg0JHQoNCe0JkpINC30LDQv9C40YHQuCDQvtGCINGB0YrQutGA0LDRgtC10L3QuNGPINC20YPRgNC90LDQuyDQsiDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+ICIKKyLQt9CwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTQgYnVpbHRpbi9wdWxsLmM6MTQ3Cittc2dpZCAiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC10LTQvdC+INC/0L7QtNCw0LLQsNC90LUg0LLQvNC10YHRgtC+INC40LfQstGK0YDRiNCy0LDQvdC1INC90LAg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTYgYnVpbHRpbi9wdWxsLmM6MTUwCittc2dpZCAicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIgorbXNnc3RyICLQuNC30LLRitGA0YjQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUg0L/RgNC4INGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1ICjRgdGC0LDQvdC00LDRgNGC0L3QviDQtNC10LnRgdGC0LLQuNC1KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1OCBidWlsdGluL3B1bGwuYzoxNTMKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgItGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQtdC00Lgg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MAorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgItC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDQv9GA0LXQstGK0YDRgtCw0L3QtSAo0YHRgtCw0L3QtNCw0YDRgtC90L4g0LTQtdC50YHRgtCy0LjQtSkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjIgYnVpbHRpbi9wdWxsLmM6MTYwCittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAi0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1LCDQsNC60L4g0L/RgNC10LLRitGA0YLQsNC90LXRgtC+INC1INC90LXQstGK0LfQvNC+0LbQvdC+IgorCisjOiBidWlsdGluL21lcmdlLmM6MjY2IGJ1aWx0aW4vcHVsbC5jOjE2MworbXNnaWQgInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LrQsCwg0YfQtSDRg9C60LDQt9Cw0L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSDQtSDRgSDQv9GA0LDQstC40LvQtdC9INC/0L7QtNC/0LjRgSDQvdCwIEdQRyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NyBidWlsdGluL25vdGVzLmM6Nzg3IGJ1aWx0aW4vcHVsbC5jOjE2NworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjAgYnVpbHRpbi9yZWJhc2UuYzoxNTc1IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgItCh0KLQoNCQ0KLQldCT0JjQryIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OCBidWlsdGluL3B1bGwuYzoxNjgKK21zZ2lkICJtZXJnZSBzdHJhdGVneSB0byB1c2UiCittc2dzdHIgItCh0KLQoNCQ0KLQldCT0JjQryDQt9CwINGB0LvQuNCy0LDQvdC1LCDQutC+0Y/RgtC+INC00LAg0YHQtSDQv9C+0LvQt9Cy0LAiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjkgYnVpbHRpbi9wdWxsLmM6MTcxCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICLQntCf0KbQmNCvPdCh0KLQntCZ0J3QntCh0KIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzAgYnVpbHRpbi9wdWxsLmM6MTcyCittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi0J7Qn9Cm0JjQryDQt9CwINC40LfQsdGA0LDQvdCw0YLQsCDRgdGC0YDQsNGC0LXQs9C40Y8g0LfQsCDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3MgorbXNnaWQgIm1lcmdlIGNvbW1pdCBtZXNzYWdlIChmb3IgYSBub24tZmFzdC1mb3J3YXJkIG1lcmdlKSIKK21zZ3N0ciAi0KHQqtCe0JHQqdCV0J3QmNCVINC/0YDQuCDQv9C+0LTQsNCy0LDQvdC10YLQviDRgdGK0YEg0YHQu9C40LLQsNC90LUgKNC/0YDQuCDRgdGK0YnQuNC90YHQutC4INGB0LvQuNCy0LDQvdC40Y8pIgorCisjOiBidWlsdGluL21lcmdlLmM6Mjc5Cittc2dpZCAiYWJvcnQgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgItC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGC0LXQutGD0YnQvtGC0L4g0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODEKK21zZ2lkICItLWFib3J0IGJ1dCBsZWF2ZSBpbmRleCBhbmQgd29ya2luZyB0cmVlIGFsb25lIgorbXNnc3RyICLQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUg0LHQtdC3INC/0YDQvtC80Y/QvdCwINC90LAg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODMKK21zZ2lkICJjb250aW51ZSB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAi0L/RgNC+0LTRitC70LbQsNCy0LDQvdC1INC90LAg0YLQtdC60YPRidC+0YLQviDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4NSBidWlsdGluL3B1bGwuYzoxNzkKK21zZ2lkICJhbGxvdyBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgItC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDRgdC70LjQstCw0L3QtSDQvdCwINC90LXQt9Cw0LLQuNGB0LjQvNC4INC40YHRgtC+0YDQuNC4IgorCisjOiBidWlsdGluL21lcmdlLmM6MjkxCittc2dpZCAiYnlwYXNzIHByZS1tZXJnZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgIiIKKyLQsdC10Lcg0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutGD0LrQuNGC0LUg0L/RgNC10LTQuCDQv9C+0LTQsNCy0LDQvdC1INC4INGB0LvQuNCy0LDQvdC1INC4INC/0YDQuCDQv9GA0L7QvNGP0L3QsCDQvdCwICIKKyLRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSAocHJlLW1lcmdlLWNvbW1pdCDQuCBjb21taXQtbXNnKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMwOAorbXNnaWQgImNvdWxkIG5vdCBydW4gc3Rhc2guIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30LLRitGA0YjQuCDRgdC60LDRgtCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTMKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRgdC60LDRgtCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L7QsdC10LrRgjog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNDAgYnVpbHRpbi9tZXJnZS5jOjM1NworbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQv9GA0L7Rh9C40YLQsNC90LUg0L3QsCDQvtCx0LXQutGCLdC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozODcKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiICjQvdGP0LzQsCDQutCw0LrQstC+INC00LAg0YHQtSDQstC60LDRgNCwKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgItCS0LrQsNGA0LDQvdC+INC/0L7QtNCw0LLQsNC90LUg4oCUINGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3Rj9C80LAg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvVxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiIgorItCb0LjQv9GB0LLQsCDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUg4oCUINGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3Rj9C80LAg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvVxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIuKAniVz4oCcINC90LUg0YHQvtGH0Lgg0LrRitC8INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0L3QuNC3INC30LAg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5icmFuY2guJXMubWVyZ2VvcHRpb25z4oCcOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcwOAorbXNnaWQgIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgItCf0L7QtNC00YrRgNC20LAg0YHQtSDRgdCw0LzQviDRgdC70LjQstCw0L3QtSDQvdCwINGC0L7Rh9C90L4g0LTQstC1INC40YHRgtC+0YDQuNC4LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICLQndC10L/QvtC30L3QsNGC0LAg0L7Qv9GG0LjRjyDQt9CwINGA0LXQutGD0YDRgdC40LLQvdC+0YLQviDRgdC70LjQstCw0L3QtSDigJ5tZXJnZS1yZWN1cnNpdmXigJw6IOKAni1YJXPigJwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSAnJXMnIgorbXNnc3RyICLQntGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGH0LXRgtC1IgorCisjOiBidWlsdGluL21lcmdlLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorItCh0LvQuNCy0LDQvdC10YLQviDQvdGP0LzQsCDQtNCwINCx0YrQtNC1INC/0L7QtNCw0LTQtdC90L4uICDQl9CwINC30LDQstGK0YDRiNCy0LDQvdC10YLQviDQvNGDINC4INC/0L7QtNCw0LLQsNC90LXRgtC+INC80YMgIgorItC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBjb21taXTigJwuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIGEgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB3aHkgdGhpcyBtZXJnZSBpcyBuZWNlc3NhcnksXG4iCisiZXNwZWNpYWxseSBpZiBpdCBtZXJnZXMgYW4gdXBkYXRlZCB1cHN0cmVhbSBpbnRvIGEgdG9waWMgYnJhbmNoLlxuIgorIlxuIgorbXNnc3RyICIiCisi0JIg0YHRitC+0LHRidC10L3QuNC10YLQviDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSDQtNC+0LHQsNCy0LXRgtC1INC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L/RgNC40YfQuNC90LDRgtCwINC30LBcbiIKKyLRgdC70LjQstCw0L3QtdGC0L4sINC+0YHQvtCx0LXQvdC+INCw0LrQviDRgdC70LjQstCw0YLQtSDQvtCx0L3QvtCy0LXQvSDQvtGC0LTQsNC70LXRh9C10L0g0LrQu9C+0L0g0LIg0YLQtdC80LDRgtC40YfQtdC9INC60LvQvtC9LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA5Cittc2dpZCAiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAi0J/RgNCw0LfQvdC+INGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0LXQtNC+0YLQstGA0LDRgtGP0LLQsCDQv9C+0LTQsNCy0LDQvdC10YLQvi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorItCg0LXQtNC+0LLQtdGC0LUsINC60L7QuNGC0L4g0LfQsNC/0L7Rh9Cy0LDRgiDRgSDigJ4lY+KAnCwg0YnQtSDQsdGK0LTQsNGCINC/0YDQvtC/0YPRgdC90LDRgtC4LCDQsCDQv9GA0LDQt9C90L5cbiIKKyLRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LAg0L/QvtC00LDQstCw0L3QtdGC0L4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NjUKK21zZ2lkICJFbXB0eSBjb21taXQgbWVzc2FnZS4iCittc2dzdHIgItCf0YDQsNC30L3QviDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAi0J/RitGA0LLQuNGP0YIg0LXRgtCw0L8g0L3QsCDRgdC70LjQstCw0L3QtdGC0L4g0LfQsNCy0YrRgNGI0LguXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QviDQsNCy0YLQvtC80LDRgtC40YfQvdC+INGB0LvQuNCy0LDQvdC1IOKAlCDQutC+0YDQuNCz0LjRgNCw0LnRgtC1INC60L7QvdGE0LvQuNC60YLQuNGC0LUg0Lgg0L/QvtC00LDQudGC0LUgIgorItGA0LXQt9GD0LvRgtCw0YLQsC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4MAorbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi0J3Rj9C80LAg0YLQtdC60YPRiSDQutC70L7QvS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODIKK21zZ2lkICJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgItCi0LXQutGD0YnQuNGP0YIg0LrQu9C+0L0g0L3QtSDRgdC70LXQtNC4INC90LjQutC+0LkuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg0Cittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLQotC10LrRg9GJ0LjRj9GCINC60LvQvtC9INC90LUg0YHQu9C10LTQuCDQvdC40LrQvtC5INC60LvQvtC9LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICLQndC40LrQvtC5INC60LvQvtC9INC90LUg0YHQu9C10LTQuCDQutC70L7QvdCwIOKAniVz4oCcINC+0YIg0YXRgNCw0L3QuNC70LjRidC10YLQviDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIHZhbHVlICclcycgaW4gZW52aXJvbm1lbnQgJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCDQsiDRgdGA0LXQtNCw0YLQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UgaW4gJXM6ICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdC70LXQtSDQsiDigJ4lc+KAnDogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTgzCittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0LvQtdC1IgorCisjOiBidWlsdGluL21lcmdlLmM6MTI4NgorbXNnaWQgIi0tYWJvcnQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tYWJvcnTigJwg0L3QtSDQv9GA0LjQtdC80LAg0LDRgNCz0YPQvNC10L3RgtC4IgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5MAorbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIHRvIGFib3J0IChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiIgorItCd0LUg0LzQvtC20LUg0LTQsCDQv9GA0LXRg9GB0YLQsNC90L7QstC40YLQtSDRgdC70LjQstCw0L3QtSwg0LfQsNGJ0L7RgtC+INCyINC80L7QvNC10L3RgtCwINC90LUg0YHQtSDQuNC30LLRitGA0YjQstCwINGC0LDQutC+0LLQsCAiCisiKNC70LjQv9GB0LLQsCDRg9C60LDQt9Cw0YLQtdC7IOKAnk1FUkdFX0hFQUTigJwpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTkKK21zZ2lkICItLXF1aXQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tcXVpdOKAnCDQvdC1INC/0YDQuNC10LzQsCDQsNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzEyCittc2dpZCAiLS1jb250aW51ZSBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1jb250aW51ZeKAnCDQvdC1INC/0YDQuNC10LzQsCDQsNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzE2Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgaW4gcHJvZ3Jlc3MgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDQvdC1INGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDRgdC70LjQstCw0L3QtSAo0LvQuNC/0YHQstCwINGD0LrQsNC30LDRgtC10Lsg4oCeTUVSR0VfSEVBROKAnCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzMgorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLQndC1INGB0YLQtSDQt9Cw0LLRitGA0YjQuNC70Lgg0YHQu9C40LLQsNC90LUuICAo0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeTUVSR0VfSEVBROKAnCDRgdGK0YnQtdGB0YLQstGD0LLQsCkuXG4iCisi0J/QvtC00LDQudGC0LUg0L/RgNC+0LzQtdC90LjRgtC1INGB0LgsINC/0YDQtdC00Lgg0LTQsCDQt9Cw0L/QvtGH0L3QtdGC0LUg0L3QvtCy0L4g0YHQu9C40LLQsNC90LUuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzOQorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLQndC1INGB0YLQtSDQt9Cw0LLRitGA0YjQuNC70Lgg0L7RgtCx0LjRgNCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUgKNGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkNIRVJSWV9QSUNLX0hFQUTigJxcbiIKKyLRgdGK0YnQtdGB0YLQstGD0LLQsCkuICDQn9C+0LTQsNC50YLQtSDQv9GA0L7QvNC10L3QuNGC0LUg0YHQuCwg0L/RgNC10LTQuCDQtNCwINC30LDQv9C+0YfQvdC10YLQtSDQvdC+0LLQviDRgdC70LjQstCw0L3QtS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzQyCittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICIiCisi0J3QtSDRgdGC0LUg0LfQsNCy0YrRgNGI0LjQu9C4INC+0YLQsdC40YDQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC1ICjRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5DSEVSUllfUElDS19IRUFE4oCcXG4iCisi0YHRitGJ0LXRgdGC0LLRg9Cy0LApLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTYKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLS1zcXVhc2jigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBIOKAni0tbm8tZmbigJwuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1OAorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tY29tbWl0LiIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLS1zcXVhc2jigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBIOKAni0tY29tbWl04oCcLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNzQKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiIgorItCd0LUg0LUg0YPQutCw0LfQsNC90L4g0L/QvtC00LDQstCw0L3QtSDQuCDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnm1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFt4oCcINC90LUg0LUg0LfQsNC00LDQtNC10L3QsC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkxCittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgItCS0LrQsNGA0LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC1INCy0YrQsiDQstGA0YrRhSDQsdC10Lcg0LjRgdGC0L7RgNC40Y8g0LLRgdC1INC+0YnQtSDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTMKK21zZ2lkICJOb24tZmFzdC1mb3J3YXJkIGNvbW1pdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGludG8gYW4gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorItCf0L7QvdC10LbQtSDQstGK0YDRhdGK0YIg0LUg0LHQtdC3INC40YHRgtC+0YDQuNGPLCDQstGB0LjRh9C60Lgg0YHQu9C40LLQsNC90LjRjyDRgdCwINC/0YDQtdCy0YrRgNGC0LDQvdC40Y8sINC90LUg0LzQvtC20LUg0LTQsCDRgdC1ICIKKyLQuNC30LLRitGA0YjQuCDRgdGK0YnQuNC90YHQutC+INGB0LvQuNCy0LDQvdC1INC40LfQuNGB0LrQstCw0L3QviDQvtGCINC+0L/RhtC40Y/RgtCwIOKAni0tbm8tZmbigJwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIuKAniVz4oCcIOKAlCDQvdC1INC1INC90LXRidC+LCDQutC+0LXRgtC+INC80L7QttC1INC00LAg0YHQtSDRgdC70LXQtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MDAKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICLQnNC+0LbQtdGC0LUg0LTQsCDRgdC70LXQtdGC0LUg0YLQvtGH0L3QviDQtdC00L3QviDQv9C+0LTQsNCy0LDQvdC1INCy0YrQsiDQstGA0YrRhSDQsdC10Lcg0LjRgdGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDgxCittc2dpZCAicmVmdXNpbmcgdG8gbWVyZ2UgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAi0L3QtdC30LDQstC40YHQuNC80Lgg0LjRgdGC0L7RgNC40Lgg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHQu9C10Y/RgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0OTAKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIgorbXNnc3RyICLQktC10YfQtSDQtSDQvtCx0L3QvtCy0LXQvdC+LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgItCe0LHQvdC+0LLRj9Cy0LDQvdC1IOKAniVzLi4lc+KAnFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAi0J/RgNC+0LHQsCDRgdGK0YEg0YHQu9C40LLQsNC90LUg0LIg0YDQsNC80LrQuNGC0LUg0L3QsCDQuNC90LTQtdC60YHQsOKAplxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YHQu9C40LLQsNC90LUuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTc0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiBZZWVhaCEiCittc2dzdHIgItCS0LXRh9C1INC1INC+0LHQvdC+0LLQtdC90L4hIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU4MAorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9Cy0YrRgNGI0Lgg0L/RgNC10LLRitGA0YLQsNC90LUsINC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC00LXQudGB0YLQstC40LXRgtC+LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDMgYnVpbHRpbi9tZXJnZS5jOjE2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgItCf0YDQuNCy0LXQttC00LDQvdC1INC90LAg0LTRitGA0LLQvtGC0L4g0LrRitC8INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L7igKZcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iCittc2dzdHIgItCf0YDQvtCx0LLQsNC90LUg0YHRitGBINGB0YLRgNCw0YLQtdCz0LjRj9GC0LAg0LfQsCDRgdC70LjQstCw0L3QtSDigJ4lc+KAnOKAplxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAi0J3QuNC60L7RjyDRgdGC0YDQsNGC0LXQs9C40Y8g0LfQsCDRgdC70LjQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LjQt9Cy0YrRgNGI0Lgg0YHQu9C40LLQsNC90LXRgtC+LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1INGB0YrRgSDRgdGC0YDQsNGC0LXQs9C40Y8g4oCeJXPigJwuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICIiCisi0J/QvtC70LfQstCwINGB0LUg0YHRgtGA0LDRgtC10LPQuNGP0YLQsCDigJ4lc+KAnCwg0LrQvtGP0YLQviDRidC1INC/0L7QtNCz0L7RgtCy0Lgg0LTRitGA0LLQvtGC0L4g0LfQsCDQutC+0YDQuNCz0LjRgNCw0L3QtSDQvdCwICIKKyLRgNGK0LrQsC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAiIgorItCQ0LLRgtC+0LzQsNGC0LjRh9C90L7RgtC+INGB0LvQuNCy0LDQvdC1INC30LDQstGK0YDRiNC4INGD0YHQv9C10YjQvdC+LiAg0KHQsNC80L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0L3QtSDQtSDQuNC30LLRitGA0YjQtdC90L4sICIKKyLQt9Cw0YnQvtGC0L4g0LHQtSDQt9Cw0LTQsNC00LXQvdCwINC+0L/RhtC40Y/RgtCwIOKAni0tbm8tY29tbWl04oCcLlxuIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdINCf0J7QlNCQ0JLQkNCd0JUg0J/QntCU0JDQktCQ0J3QleKApiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzINCf0J7QlNCQ0JLQkNCd0JXigKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM0Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCDQn9Ce0JTQkNCS0JDQndCV4oCmIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3Ig0J/QntCU0JDQktCQ0J3QlV8xINCf0J7QlNCQ0JLQkNCd0JVfMiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzYKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50INCj0JrQkNCX0JDQotCV0JsgW9Cf0J7QlNCQ0JLQkNCd0JVdIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTMKK21zZ2lkICJvdXRwdXQgYWxsIGNvbW1vbiBhbmNlc3RvcnMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQvtCx0YnQuCDQv9GA0LXQtNGI0LXRgdGC0LLQtdC90LjRhtC4IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTUKK21zZ2lkICJmaW5kIGFuY2VzdG9ycyBmb3IgYSBzaW5nbGUgbi13YXkgbWVyZ2UiCittc2dzdHIgIiIKKyLQvtGC0LrRgNC40LLQsNC90LUg0L3QsCDQv9GA0LXQtNGI0LXRgdGC0LLQtdC90LjRhtC40YLQtSDQt9CwINC10LTQvdC+0LrRgNCw0YLQvdC+INGB0LvQuNCy0LDQvdC1INC90LAg0LzQvdC+0LbQtdGB0YLQstC+INC40YHRgtC+0YDQuNC4IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTcKK21zZ2lkICJsaXN0IHJldnMgbm90IHJlYWNoYWJsZSBmcm9tIG90aGVycyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QtdC00L7RgdGC0LjQttC40LzQuNGC0LUg0L7RgiDQtNGA0YPQs9C40YLQtSDRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1OQorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAi0J/QntCU0JDQktCQ0J3QlV8xINC/0YDQtdC00YjQtdGB0YLQstC10L3QuNC6INC70Lgg0LUg0L3QsCDQn9Ce0JTQkNCS0JDQndCVXzI/IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNjEKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAi0L7RgtC60YDQuNCy0LDQvdC1INC60YrQtNC1INCf0J7QlNCQ0JLQkNCd0JXRgtC+INGB0LUg0LUg0L7RgtC60LvQvtC90LjQu9C+INC+0YIg0LjRgdGC0L7RgNC40Y/RgtCwINC90LAg0KPQmtCQ0JfQkNCi0JXQm9GPIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo5Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiAiCisiPG9yaWctZmlsZT4gPGZpbGUyPiIKK21zZ3N0ciAiIgorImdpdCBtZXJnZS1maWxlIFvQntCf0KbQmNCv4oCmXSBbLUwg0JjQnNCVXzEgWy1MINCe0KDQmNCT0JjQndCQ0JsgWy1MINCY0JzQlV8yXV1dINCk0JDQmdCbXzEg0J7QoNCY0JNf0KTQkNCZ0JsgIgorItCk0JDQmdCbXzIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM1Cittc2dpZCAic2VuZCByZXN1bHRzIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQtdC30YPQu9GC0LDRgtC40YLQtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LjQt9GF0L7QtCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzYKK21zZ2lkICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIKK21zZ3N0ciAi0YHQu9C40LLQsNC90LUg0L3QsCDQsdCw0LfQsNGC0LAg0L3QsCDigJ5kaWZmM+KAnCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgItC/0YDQuCDQutC+0L3RhNC70LjQutGC0Lgg0LTQsCDRgdC1INC/0L7Qu9C30LLQsCDQu9C+0LrQsNC70L3QsNGC0LAg0LLQtdGA0YHQuNGPIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozOQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICLQv9GA0Lgg0LrQvtC90YTQu9C40LrRgtC4INC00LAg0YHQtSDQv9C+0LvQt9Cy0LAg0YfRg9C20LTQsNGC0LAg0LLQtdGA0YHQuNGPIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgItC/0YDQuCDQutC+0L3RhNC70LjQutGC0Lgg0LTQsCDRgdC1INC/0L7Qu9C30LLQsCDQvtCx0LXQtNC40L3QtdC90LAg0LLQtdGA0YHQuNGPIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NAorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGlzIG1hcmtlciBzaXplIgorbXNnc3RyICLQv9GA0Lgg0LrQvtC90YTQu9C40LrRgtC4INC00LAg0YHQtSDQv9C+0LvQt9Cy0LAg0LzQsNGA0LrQtdGAINGBINGC0LDQutGK0LIg0JHQoNCe0Jkg0LfQvdCw0YbQuCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDUKK21zZ2lkICJkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMiCittc2dzdHIgItCx0LXQtyDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGPINC/0YDQuCDQutC+0L3RhNC70LjQutGC0LgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ3Cittc2dpZCAic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZy1maWxlL2ZpbGUyIgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvdC1INC90LAg0LXRgtC40LrQtdGC0Lgg0LfQsCDQpNCQ0JnQm18xL9Ce0KDQmNCT0JjQndCQ0Jsv0KTQkNCZ0JtfMiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiAlcyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINC+0L/RhtC40Y86IOKAniVz4oCcIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQtdC9INCw0L3QsNC70LjQtyDQvdCwINC+0LHQtdC60YLQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiBJZ25vcmluZyAlcy4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiBJZ25vcmluZyAlcy4iCittc2dzdHJbMF0gItC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwINC/0L7QstC10YfQtSDQvtGCICVkINCx0LDQt9CwLiAg4oCeJXPigJwg0YHQtSDQv9GA0LXRgdC60LDRh9CwLiIKK21zZ3N0clsxXSAi0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LDRgiDQv9C+0LLQtdGH0LUg0L7RgiAlZCDQsdCw0LfQuC4gIOKAniVz4oCcINGB0LUg0L/RgNC10YHQutCw0YfQsC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NjUKK21zZ2lkICJub3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICLQv9C+0LTQtNGK0YDQttCwINGB0LUg0YHQsNC80L4g0YHQu9C40LLQsNC90LUg0L3QsCDRgtC+0YfQvdC+INC00LLQtSDQuNGB0YLQvtGA0LjQuC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzQgYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSByZWYgJyVzJyIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXNcbiIKK21zZ3N0ciAi0KHQu9C40LLQsNC90LUg0L3QsCDigJ4lc+KAnCDRgSDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL21rdHJlZS5jOjY2Cittc2dpZCAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKK21zZ3N0ciAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTQKK21zZ2lkICJpbnB1dCBpcyBOVUwgdGVybWluYXRlZCIKK21zZ3N0ciAi0LLRhdC+0LTQvdC40YLQtSDQt9Cw0L/QuNGB0Lgg0YHQsCDRgNCw0LfQtNC10LvQtdC90Lgg0YEg0L3Rg9C70LXQstC40Y8g0LfQvdCw0Log4oCeTlVM4oCcIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NSBidWlsdGluL3dyaXRlLXRyZWUuYzoyNgorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LDQstCw0L3QtSDQvdCwINC70LjQv9GB0LLQsNGJ0Lgg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NgorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LDQstCw0L3QtSDQvdCwINGB0YrQt9C00LDQstCw0L3QtdGC0L4g0L3QsCDQv9C+0LLQtdGH0LUg0L7RgiDQtdC00L3QviDQtNGK0YDQstC+IgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo5Cittc2dpZCAiIgorImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8b3B0aW9ucz5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTxzaXplPikiCittc2dzdHIgIiIKKyJnaXQgbXVsdGktcGFjay1pbmRleCBb0J7Qn9Cm0JjQr+KApl0gKHdyaXRlfHZlcmlmeXxleHBpcmV8cmVwYWNrIC0tYmF0Y2gtIgorInNpemU90KDQkNCX0JzQldCgKSIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjYKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2V0IG9mIHBhY2tmaWxlIGFuZCBwYWNrLWluZGV4IHBhaXJzIgorbXNnc3RyICIiCisi0JTQmNCg0LXQutGC0L7RgNC40Y/RgtCwX9GBX9Ce0JHQldCa0KLQuCDRgdGK0LTRitGA0LbQsCDQvNC90L7QttC10YHRgtCy0L4g0LTQstC+0LnQutC4INC/0LDQutC10YLQvdC4INGE0LDQudC70L7QstC1INGB0YrRgSAiCisi0YHRitC+0YLQstC10YLQvdC40Y8g0LjQvCDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI5Cittc2dpZCAiIgorImR1cmluZyByZXBhY2ssIGNvbGxlY3QgcGFjay1maWxlcyBvZiBzbWFsbGVyIHNpemUgaW50byBhIGJhdGNoIHRoYXQgaXMgIgorImxhcmdlciB0aGFuIHRoaXMgc2l6ZSIKK21zZ3N0ciAiIgorItC/0YDQuCDQv9GA0LXQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQv9Cw0LrQtdGC0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUsINC60L7QuNGC0L4g0YHQsCDRgSDQv9C+LdC80LDQu9GK0Log0L7RgiDRgtC+0LfQuCDRgNCw0LfQvNC10YAsINC00LAgIgorItGB0LUg0L7QsdC10LTQuNC90Y/QstCw0YIg0LIg0L/QsNC60LXRgtC4INGBINC/0L4t0LPQvtC70Y/QvCDQvtGCINGC0L7Qt9C4INGA0LDQt9C80LXRgCIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NTAgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo2NworbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyIKK21zZ3N0ciAi0L/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0LDRgNCz0YPQvNC10L3RgtC4IgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo2MAorbXNnaWQgIi0tYmF0Y2gtc2l6ZSBvcHRpb24gaXMgb25seSBmb3IgJ3JlcGFjaycgc3ViY29tbWFuZCIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1iYXRjaC1zaXpl4oCcINC40LfQuNGB0LrQstCwINC/0L7QtNC60L7QvNCw0L3QtNCw0YLQsCDigJ5yZXBhY2vigJwiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINC/0L7QtNC60L7QvNCw0L3QtNCwOiAlcyIKKworIzogYnVpbHRpbi9tdi5jOjE4Cittc2dpZCAiZ2l0IG12IFs8b3B0aW9ucz5dIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCittc2dzdHIgImdpdCBtdiBb0J7Qn9Cm0JjQr+KApl0g0J7QkdCV0JrQouKApiDQptCV0JsiCisKKyM6IGJ1aWx0aW4vbXYuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgItCU0LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCDQtSDQsiDQuNC90LTQtdC60YHQsCwg0L3QviDQvdC1INC1INC/0L7QtNC80L7QtNGD0LsiCisKKyM6IGJ1aWx0aW4vbXYuYzo4NQorbXNnaWQgIlBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisi0JfQsCDQtNCwINC/0YDQvtC00YrQu9C20LjRgtC1LCDQuNC70Lgg0LLQutCw0YDQsNC50YLQtSDQv9GA0L7QvNC10L3QuNGC0LUg0L/QviDRhNCw0LnQu9CwIOKAni5naXRtb2R1bGVz4oCcINCyINC40L3QtNC10LrRgdCwLFxuIgorItC40LvQuCDQs9C4INGB0LrQsNGC0LDQudGC0LUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAi4oCeJS4qc+KAnCDQstC10YfQtSDQtSDQsiDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9tdi5jOjEyNQorbXNnaWQgImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC/0YDQtdC80LXRgdGC0LLQsNC90LUv0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC00L7RgNC4INGG0LXQu9GC0LAg0LTQsCDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogYnVpbHRpbi9tdi5jOjEyNworbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICLQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINCz0YDQtdGI0LrQuNGC0LUg0L/RgNC4INC/0YDQtdC80LXRgdGC0LLQsNC90LUv0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1IgorCisjOiBidWlsdGluL212LmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICLRhtC10LvRgtCwIOKAniVz4oCcINGB0YrRidC10YHRgtCy0YPQstCwINC4INC90LUg0LUg0LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC90LAg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC10YLQviDQvdCwINC+0LHQtdC60YIg0L7RgiDigJ4lc+KAnCDQvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxODQKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQvtCx0LXQutGCIgorCisjOiBidWlsdGluL212LmM6MTg3Cittc2dpZCAiY2FuIG5vdCBtb3ZlIGRpcmVjdG9yeSBpbnRvIGl0c2VsZiIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y8g0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC10LzQtdGB0YLQuCDQsiDRgdC10LHQtSDRgdC4IgorCisjOiBidWlsdGluL212LmM6MTkwCittc2dpZCAiY2Fubm90IG1vdmUgZGlyZWN0b3J5IG92ZXIgZmlsZSIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y8g0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC10LzQtdGB0YLQuCDQstGK0YDRhdGDINGE0LDQudC7IgorCisjOiBidWlsdGluL212LmM6MTk5Cittc2dpZCAic291cmNlIGRpcmVjdG9yeSBpcyBlbXB0eSIKK21zZ3N0ciAi0L/RitGA0LLQvtC90LDRh9Cw0LvQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQtSDQv9GA0LDQt9C90LAiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjQKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICLQvdC1INC1INC/0L7QtCDQutC+0L3RgtGA0L7Qu9CwINC90LAgR2l0IgorCisjOiBidWlsdGluL212LmM6MjI3Cittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICLRhtC10LvRgtCwINGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiBidWlsdGluL212LmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgItC/0YDQtdC30LDQv9C40YHQstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL212LmM6MjM4Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAi0J/RgNC10LfQsNC/0LjRgdCy0LDQvdC10YLQviDQtSDQvdC10LLRitC30LzQvtC20L3QviIKKworIzogYnVpbHRpbi9tdi5jOjI0MQorbXNnaWQgIm11bHRpcGxlIHNvdXJjZXMgZm9yIHRoZSBzYW1lIHRhcmdldCIKK21zZ3N0ciAi0LzQvdC+0LbQtdGB0YLQstC+INC40LfRgtC+0YfQvdC40YbQuCDQt9CwINC10LTQvdCwINGG0LXQuyIKKworIzogYnVpbHRpbi9tdi5jOjI0MworbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi0YbQtdC70LXQstCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdC1INGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiBidWlsdGluL212LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIlcywg0L7QsdC10LrRgjog4oCeJXPigJwsINGG0LXQuzog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAi0J/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg4oCeJXPigJwg0L3QsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL212LmM6Mjc3IGJ1aWx0aW4vcmVtb3RlLmM6NzgxIGJ1aWx0aW4vcmVwYWNrLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBb0J7Qn9Cm0JjQr+KApl0g0J/QntCU0JDQktCQ0J3QleKApiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NgorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFvQntCf0KbQmNCv4oCmXSAtLWFsbCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NworbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLXN0ZGluIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgW9Ce0J/QptCY0K/igKZdIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjQKK21zZ2lkICJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC40LzQtdC90LDRgtCwICjQsdC10Lcg0YHRg9C80LjRgtC1INC/0L4gU0hBMSkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjUKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INGB0LDQvNC+INC90LAg0LXRgtC40LrQtdGC0LjRgtC1INC30LAg0LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUyNworbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDRgdCw0LzQviDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUg0L3QsNC/0LDRgdCy0LDRidC4INC90LAg0KjQkNCR0JvQntCd0LAiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjkKK21zZ2lkICJpZ25vcmUgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgItC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSDQvdCw0L/QsNGB0LLQsNGJ0Lgg0L3QsCDQqNCQ0JHQm9Ce0J3QsCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUzMQorbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0L/QvtC00LDQstCw0L3QuNGPLCDQutC+0LjRgtC+INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC00L7RgdGC0LjQs9C90LDRgtC4INC+0YIg0LLRgdC40YfQutC4ICIKKyLRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzIKK21zZ2lkICJyZWFkIGZyb20gc3RkaW4iCittc2dzdHIgItGH0LXRgtC10L3QtSDQvtGCINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzMKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgItC00LAg0YHQtSDQuNC30LLQtdC20LTQsNGCINC4INC90LXQtNC10YTQuNC90LjRgNCw0L3QuNGC0LUg0LjQvNC10L3QsCAo0YHRgtCw0L3QtNCw0YDRgtC90LAg0YHRgtC+0LnQvdC+0YHRgiDQvdCwINC+0L/RhtC40Y/RgtCwKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUzOQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW4gdGhlIGlucHV0IChpbnRlcm5hbCB1c2UpIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNC40YLQtSDQvdCwINC+0LHQtdC60YLQuC3QtdGC0LjQutC10YLQuCAo0LfQsCDQstGK0YLRgNC10YjQvdC4INC90YPQttC00LgpIgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiDQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JBdIFtsaXN0IFvQntCR0JXQmtCiXV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+ICIKKyJ8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYg0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQXSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tINCh0KrQntCR0KnQldCd0JjQlSAiCisifCAtRiDQpNCQ0JnQmyB8ICgtYyB8IC1DKSDQntCR0JXQmtCiXSBb0J7QkdCV0JrQol0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiDQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JBdIGNvcHkgWy1mXSDQntCR0JXQmtCiX9CY0JfQotCe0KfQndCY0Jog0J7QkdCV0JrQol/QptCV0JsiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICIKKyIoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmINCj0JrQkNCX0JDQotCV0Jtf0JfQkF/QkdCV0JvQldCW0JrQkF0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0g0KHQqtCe0JHQqdCV0J3QmNCVIHwgIgorIi1GINCk0JDQmdCbIHwgKC1jIHwgLUMpINCe0JHQldCa0KJdIFvQntCR0JXQmtCiXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiDQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JBdIGVkaXQgWy0tYWxsb3ctZW1wdHldIFvQntCR0JXQmtCiXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmINCj0JrQkNCX0JDQotCV0Jtf0JfQkF/QkdCV0JvQldCW0JrQkF0gc2hvdyBb0J7QkdCV0JrQol0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiDQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JBdIG1lcmdlIFstdiB8IC1xXSBbLXMg0KHQotCg0JDQotCV0JPQmNCvXSAiCisi0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQIgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYg0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQXSByZW1vdmUgW9Ce0JHQldCa0KLigKZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW5dIFstdl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYg0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQXSBwcnVuZSBbLW5dIFstdl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYg0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQXSBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQKK21zZ2lkICJnaXQgbm90ZXMgW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbbGlzdCBb0J7QkdCV0JrQol1dIgorCisjOiBidWlsdGluL25vdGVzLmM6NDkKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhZGQgW9Ce0J/QptCY0K/igKZdIFvQntCR0JXQmtCiXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgW9Ce0J/QptCY0K/igKZdINCe0JHQldCa0KJf0JjQl9Ci0J7Qp9Cd0JjQmiDQntCR0JXQmtCiX9Cm0JXQmyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gW9Ce0JHQldCa0KJf0JjQl9Ci0J7Qp9Cd0JjQmiDQntCR0JXQmtCiX9Cm0JXQm+KApl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MAorbXNnaWQgImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFwcGVuZCBb0J7Qn9Cm0JjQr+KApl0gW9Ce0JHQldCa0KJdIgorCisjOiBidWlsdGluL25vdGVzLmM6NjUKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgZWRpdCBb0J7QkdCV0JrQol0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MAorbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBzaG93IFvQntCR0JXQmtCiXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgW9Ce0J/QptCY0K/igKZdINCj0JrQkNCX0JDQotCV0Jtf0JfQkF/QkdCV0JvQldCW0JrQkCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgW9Ce0J/QptCY0K/igKZdIgorCisjOiBidWlsdGluL25vdGVzLmM6NzcKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgW9Ce0J/QptCY0K/igKZdIgorCisjOiBidWlsdGluL25vdGVzLmM6ODIKK21zZ2lkICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyByZW1vdmUgW9Ce0JHQldCa0KJdIgorCisjOiBidWlsdGluL25vdGVzLmM6ODcKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBwcnVuZSBb0J7Qn9Cm0JjQr+KApl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MgorbXNnaWQgImdpdCBub3RlcyBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3Cittc2dpZCAiV3JpdGUvZWRpdCB0aGUgbm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgb2JqZWN0OiIKK21zZ3N0ciAi0JfQsNC/0LjRgdCy0LDQvdC1L9GA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDQsdC10LvQtdC20LrQuNGC0LUg0LfQsCDRgdC70LXQtNC90LjRjyDQvtCx0LXQutGCOiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAi0LTQtdC50YHRgtCy0LjQtdGC0L4g4oCec2hvd+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/RitC70L3QuCDQt9CwINC+0LHQtdC60YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnc2hvdycgb3V0cHV0IgorbXNnc3RyICLQuNC30LLQtdC00LXQvdCw0YLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQvtGCINC00LXQudGB0YLQstC40LXRgtC+IOKAnnNob3figJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC+0YfQtdGC0LUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICLQtNC10LnRgdGC0LLQuNC10YLQviDigJ5zaG934oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQstGK0YDRiNC4INC30LAg0L7QsdC10LrRgiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE5NworbXNnaWQgInBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAi0LfQsNC00LDQudGC0LUg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC90LAg0LHQtdC70LXQttC60LDRgtCwINGBINC90Y/QutC+0Y8g0L7RgiDQvtC/0YbQuNC40YLQtSDigJ4tbeKAnCDQuNC70Lgg4oCeLUbigJwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbm90ZSBvYmplY3QiCittc2dzdHIgItC+0LHQtdC60YLRitGCLdCx0LXQu9C10LbQutCwINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAi0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC90LAg0LHQtdC70LXQttC60LDRgtCwINC1INCy0YrQsiDRhNCw0LnQu9CwIOKAniVz4oCcIgorCisjOiBidWlsdGluL25vdGVzLmM6MjQyIGJ1aWx0aW4vdGFnLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSDQuNC70Lgg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2MyBidWlsdGluL25vdGVzLmM6MzEzIGJ1aWx0aW4vbm90ZXMuYzozMTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODMgYnVpbHRpbi9ub3Rlcy5jOjQzOCBidWlsdGluL25vdGVzLmM6NTI2CisjOiBidWlsdGluL25vdGVzLmM6NTMxIGJ1aWx0aW4vbm90ZXMuYzo2MTAgYnVpbHRpbi9ub3Rlcy5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC60YDQuNC1INC60YrQvCDQutCw0LrQstC+INGB0L7Rh9C4IOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9LiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iCittc2dzdHIgIiIKKyLRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQsdC10LvQtdC20LrQsCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQstC30LXQvNC1INC+0YIg0L7QsdC10LrRgiwg0LrQvtC50YLQviDQvdC1INC1IEJMT0I6IOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgItCy0YXQvtC00LXQvSDRgNC10LQg0YEg0L3QtdC/0YDQsNCy0LjQu9C10L0g0YTQvtGA0LzQsNGCOiDigJ4lc+KAnC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgItCx0LXQu9C10LbQutCw0YLQsCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQutC+0L/QuNGA0LAg0L7RgiDigJ4lc+KAnCDQutGK0Lwg4oCeJXPigJwiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgZmlyc3QgJXMgd2lsbCBiZSByZXBsYWNlZCBieSBhIGdpdAorIy4gbm90ZXMgY29tbWFuZDogJ2FkZCcsICdtZXJnZScsICdyZW1vdmUnLCBldGMuCisjLgorIzogYnVpbHRpbi9ub3Rlcy5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byAlcyBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIiIKKyLQvdGP0LzQsCDQtNCwINGB0LUg0LjQt9Cy0YrRgNGI0Lgg4oCeJXPigJwg0LLRitGA0YXRgyDQsdC10LvQtdC20LrQuNGC0LUg0LIg4oCeJXPigJwsINC30LDRidC+0YLQviDRgdCwINC40LfQstGK0L0g4oCecmVmcy8iCisibm90ZXMv4oCcLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3NiBidWlsdGluL25vdGVzLmM6NDMxIGJ1aWx0aW4vbm90ZXMuYzo1MDkKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MjEgYnVpbHRpbi9ub3Rlcy5jOjU5OCBidWlsdGluL25vdGVzLmM6NjY1CisjOiBidWlsdGluL25vdGVzLmM6ODE1IGJ1aWx0aW4vbm90ZXMuYzo5NjMgYnVpbHRpbi9ub3Rlcy5jOjk4NQorbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgItC/0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INC/0LDRgNCw0LzQtdGC0YDQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4OSBidWlsdGluL25vdGVzLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgItC90Y/QvNCwINCx0LXQu9C10LbQutC4INC30LAg0L7QsdC10LrRgtCwIOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMCBidWlsdGluL25vdGVzLmM6NTc2Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAi0L3QuNC3LCDQutC+0LnRgtC+INC1INGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINCx0LXQu9C10LbQutCw0YLQsCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMyBidWlsdGluL25vdGVzLmM6NTc5Cittc2dpZCAibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiCittc2dzdHIgItCk0JDQmdCbINGB0YrRgSDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQsdC10LvQtdC20LrQsNGC0LAiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTYgYnVpbHRpbi9ub3Rlcy5jOjU4MgorbXNnaWQgInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAi0L/RgNC10LjQt9C/0L7Qu9C30LLQsNC90LUg0Lgg0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINGD0LrQsNC30LDQvdC40Y8g0J7QkdCV0JrQoi3QsdC10LvQtdC20LrQsCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxOSBidWlsdGluL25vdGVzLmM6NTg1Cittc2dpZCAicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICLQv9GA0LXQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGD0LrQsNC30LDQvdC40Y8g0J7QkdCV0JrQoi3QsdC10LvQtdC20LrQsCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyMiBidWlsdGluL25vdGVzLmM6NTg4Cittc2dpZCAiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIgorbXNnc3RyICLQv9GA0LjQtdC80LDQvdC1INC4INC90LAg0L/RgNCw0LfQvdC4INCx0LXQu9C10LbQutC4IgorCisjOiBidWlsdGluL25vdGVzLmM6NDIzIGJ1aWx0aW4vbm90ZXMuYzo0OTYKK21zZ2lkICJyZXBsYWNlIGV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICLQt9Cw0LzRj9C90LAg0L3QsCDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0LjRgtC1INCx0LXQu9C10LbQutC4IgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTQvtCx0LDQstC4INCx0LXQu9C10LbQutCwLCDQt9Cw0YnQvtGC0L4g0YLQsNC60LDQstCwINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINC30LAg0L7QsdC10LrRgtCwIOKAniVz4oCcLiAgIgorItCY0LfQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLWbigJwsINC30LAg0LTQsCDQv9GA0LXQt9Cw0L/QuNGI0LXRgtC1INGB0YrRidC10YHRgtCy0YPQstCw0YnQuCDQsdC10LvQtdC20LrQuC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjMgYnVpbHRpbi9ub3Rlcy5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgItCf0YDQtdC30LDQv9C40YHQstCw0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQuNGC0LUg0LHQtdC70LXQttC60Lgg0LfQsCDQvtCx0LXQutGC0LAg4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3NSBidWlsdGluL25vdGVzLmM6NjM3IGJ1aWx0aW4vbm90ZXMuYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINCx0LXQu9C10LbQutCw0YLQsCDQt9CwINC+0LHQtdC60YLQsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDk3Cittc2dpZCAicmVhZCBvYmplY3RzIGZyb20gc3RkaW4iCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1INC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5OQorbXNnaWQgImxvYWQgcmV3cml0aW5nIGNvbmZpZyBmb3IgPGNvbW1hbmQ+IChpbXBsaWVzIC0tc3RkaW4pIgorbXNnc3RyICIiCisi0LfQsNGA0LXQttC00LDQvdC1INC90LAg0L3QsNGB0YLRgNC+0LnQutC40YLQtSDQt9CwINCa0J7QnNCQ0J3QlNCQ0YLQsCwg0LrQvtGP0YLQviDQv9GA0LXQt9Cw0L/QuNGB0LLQsCDQv9C+0LTQsNCy0LDQvdC40Y8gKNCy0LrQu9GO0YfQstCwICIKKyLQvtC/0YbQuNGP0YLQsCDigJ4tLXN0ZGlu4oCcKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxNworbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAi0L/RgNC10LrQsNC70LXQvdC+INC80LDQu9C60L4g0L/QsNGA0LDQvNC10YLRgNC4IgorCisjOiBidWlsdGluL25vdGVzLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC60L7Qv9C40YDQsCDQsdC10LvQtdC20LrQsCwg0LfQsNGJ0L7RgtC+INGC0LDQutCw0LLQsCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQt9CwINC+0LHQtdC60YLQsCDigJ4lc+KAnC4gICIKKyLQmNC30L/QvtC70LfQstCw0LnRgtC1INC+0L/RhtC40Y/RgtCwIOKAni1m4oCcLCDQt9CwINC00LAg0L/RgNC10LfQsNC/0LjRiNC10YLQtSDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0Lgg0LHQtdC70LXQttC60LguIgorCisjOiBidWlsdGluL25vdGVzLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICLQvdGP0LzQsCDQsdC10LvQtdC20LrQuCDQt9CwINC+0LHQtdC60YLQsC3QuNC30YLQvtGH0L3QuNC6IOKAniVz4oCcLiAg0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LrQvtC/0LjRgNCwLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKyJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIgorbXNnc3RyICIiCisi0JfQsNC00LDQstCw0L3QtdGC0L4g0L3QsCDQvtC/0YbQuNC40YLQtSDigJ4tbeKAnC/igJ4tRuKAnC/igJ4tY+KAnC/igJ4tQ+KAnCDRgSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZWRpdOKAnCDQstC10YfQtSDQtSAiCisi0L7RgdGC0LDRgNGP0LvQvi5cbiIKKyLQktC80LXRgdGC0L4g0YLQvtCy0LAg0LPQuCDQuNC30L/QvtC70LfQstCw0LnRgtC1INGBINC/0L7QtNC60L7QvNCw0L3QtNCw0YLQsCDigJ5hZGTigJw6IOKAnmdpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLSIKKyJD4oCcLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6Njk4Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeTk9URVNfTUVSR0VfUEFSVElBTOKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAwCittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5OT1RFU19NRVJHRV9SRUbigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwMgorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJ2dpdCBub3RlcyBtZXJnZScgd29ya3RyZWUiCittc2dzdHIgItGA0LDQsdC+0YLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwIOKAnmdpdCBub3RlcyBtZXJnZeKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGC0LAiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjIKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeTk9URVNfTUVSR0VfUEFSVElBTOKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyNAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC10YLQviDQvtGCIOKAnk5PVEVTX01FUkdFX1BBUlRJQUzigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC60YDQuNC1LiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyNgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtdGC0L4g0L7RgiDigJ5OT1RFU19NRVJHRV9QQVJUSUFM4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MzkKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQutGA0LjQtSDQutGK0Lwg0LrQsNC60LLQviDRgdC+0YfQuCDigJ5OT1RFU19NRVJHRV9SRUbigJwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NDIKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgbm90ZXMgbWVyZ2UiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRgdC70LjQstCw0L3QtSDQvdCwINCx0LXQu9C10LbQutC40YLQtSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vdGVzIG1lcmdlIHN0cmF0ZWd5ICVzIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0YHRgtGA0LDRgtC10LPQuNGPINC30LAg0YHQu9C40LLQsNC90LUg0L3QsCDQsdC10LvQtdC20LrQuCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NAorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAi0J7QsdGJ0Lgg0L7Qv9GG0LjQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NgorbXNnaWQgIk1lcmdlIG9wdGlvbnMiCittc2dzdHIgItCe0L/RhtC40Lgg0L/RgNC4INGB0LvQuNCy0LDQvdC1IgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg4Cittc2dpZCAiIgorInJlc29sdmUgbm90ZXMgY29uZmxpY3RzIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKK21zZ3N0ciAiIgorItC60L7RgNC40LPQuNGA0LDQvdC1INC90LAg0LrQvtC90YTQu9C40LrRgtC40YLQtSDQv9GA0Lgg0YHQu9C40LLQsNC90LUg0L3QsCDQsdC10LvQtdC20LrQuNGC0LUg0YfRgNC10Lcg0YLQsNC30Lgg0KHQotCg0JDQotCV0JPQmNCvIOKAlCAiCisi4oCebWFudWFs4oCcICjRgNGK0YfQvdC+KSwg4oCeb3Vyc+KAnCAo0LLQsNGI0LDRgtCwINCy0LXRgNGB0LjRjyksIOKAnnRoZWlyc+KAnCAo0YfRg9C20LTQsNGC0LAg0LLQtdGA0YHQuNGPKSwgIgorIuKAnnVuaW9u4oCcICjQvtCx0LXQtNC40L3Rj9Cy0LDQvdC1KSwg4oCeY2F0X3NvcnRfdW5pceKAnCAo0L7QsdC10LTQuNC90Y/QstCw0L3QtSwg0L/QvtC00YDQtdC20LTQsNC90LUsINGD0L3QuNC60LDQu9C90LggIgorItGA0LXQt9GD0LvRgtCw0YLQuCkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTAKK21zZ2lkICJDb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC1INC90LAg0L3QtdGB0LvQtdGC0Lgg0LHQtdC70LXQttC60LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTIKK21zZ2lkICJmaW5hbGl6ZSBub3RlcyBtZXJnZSBieSBjb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICLQt9Cw0LLRitGA0YjQstCw0L3QtSDQvdCwINGB0LvQuNCy0LDQvdC10YLQviDRh9GA0LXQtyDQv9C+0LTQsNCy0LDQvdC1INC90LAg0L3QtdGB0LvQtdGC0Lgg0LHQtdC70LXQttC60LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTQKK21zZ2lkICJBYm9ydGluZyBub3RlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICLQn9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUg0L3QsCDQutC+0YDQtdC60YbQuNGP0YLQsCDQv9GA0Lgg0YHQu9C40LLQsNC90LXRgtC+INC90LAg0LHQtdC70LXQttC60LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTYKK21zZ2lkICJhYm9ydCBub3RlcyBtZXJnZSIKK21zZ3N0ciAi0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YHQu9C40LLQsNC90LXRgtC+INC90LAg0LHQtdC70LXQttC60LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MDcKK21zZ2lkICJjYW5ub3QgbWl4IC0tY29tbWl0LCAtLWFib3J0IG9yIC1zLy0tc3RyYXRlZ3kiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tY29tbWl04oCcLCDigJ4tLWFib3J04oCcINC4IOKAni1z4oCcL+KAni0tc3RyYXRlZ3nigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTIKK21zZ2lkICJtdXN0IHNwZWNpZnkgYSBub3RlcyByZWYgdG8gbWVyZ2UiCittc2dzdHIgItGC0YDRj9Cx0LLQsCDQtNCwINGD0LrQsNC20LXRgtC1INGD0LrQsNC30LDRgtC10Lsg0LrRitC8INCx0LXQu9C10LbQutCwINC30LAg0YHQu9C40LLQsNC90LUuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gLXMvLS1zdHJhdGVneTogJXMiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdCwINGB0YLRgNCw0YLQtdCz0LjRjyDQutGK0Lwg0L7Qv9GG0LjRj9GC0LAg4oCeLXPigJwv4oCeLS1zdHJhdGVneeKAnDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBub3RlcyBtZXJnZSBpbnRvICVzIGlzIGFscmVhZHkgaW4tcHJvZ3Jlc3MgYXQgJXMiCittc2dzdHIgItCyINC80L7QvNC10L3RgtCwINGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDRgdC70LjQstCw0L3QtSDQvdCwINCx0LXQu9C10LbQutC40YLQtSDQsiDigJ4lc+KAnCDQv9GA0Lgg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0b3JlIGxpbmsgdG8gY3VycmVudCBub3RlcyByZWYgKCVzKSIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC/0LDQt9C4INCy0YDRitC30LrQsCDQutGK0Lwg0YPQutCw0LfQsNGC0LXQu9GPINC90LAg0YLQtdC60YPRidCw0YLQsCDQsdC10LvQtdC20LrQsCAo4oCeJXPigJwpLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0b21hdGljIG5vdGVzIG1lcmdlIGZhaWxlZC4gRml4IGNvbmZsaWN0cyBpbiAlcyBhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAiCisiJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG9yIGFib3J0IHRoZSBtZXJnZSB3aXRoICdnaXQgbm90ZXMgbWVyZ2UgLS0iCisiYWJvcnQnLlxuIgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1INC90LAg0LHQtdC70LXQttC60LjRgtC1LiAg0KDQsNC30YDQtdGI0LXRgtC1INC60L7QvdGE0LvQuNC60YLQuNGC0LUg0LIg4oCeJXPigJwg0Lgg0L/QvtC00LDQudGC0LUgIgorItGA0LXQt9GD0LvRgtCw0YLQsCDRgSDigJ5naXQgbm90ZXMgbWVyZ2UgLS1jb21taXTigJwg0LjQu9C4INC/0YDQtdGD0YHRgtCw0L3QvtCy0LXRgtC1INGB0LvQuNCy0LDQvdC10YLQviDRgSAiCisi0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBub3RlcyBtZXJnZSAtLWFib3J04oCcLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODk3IGJ1aWx0aW4vdGFnLmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LrRgNC40LUg0LrRitC8INC60LDQutCy0L4g0YHQvtGH0Lgg4oCeJXPigJwuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICLQndGP0LzQsCDQsdC10LvQtdC20LrQuCDQt9CwINC+0LHQtdC60YLQsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTEyCittc2dpZCAiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIgorbXNnc3RyICLQvtC/0LjRgtGK0YIg0LfQsCDQuNC30YLRgNC40LLQsNC90LXRgtC+INC90LAg0L3QtdGB0YrRidC10YHRgtCy0YPQstCw0YnQsCDQsdC10LvQtdC20LrQsCDQvdC1INGB0LUg0YHRh9C40YLQsCDQt9CwINCz0YDQtdGI0LrQsCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxNQorbXNnaWQgInJlYWQgb2JqZWN0IG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLQuNC30YfQuNGC0LDQvdC1INC90LAg0LjQvNC10L3QsNGC0LAg0L3QsCDQvtCx0LXQutGC0LjRgtC1INC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NCBidWlsdGluL3BydW5lLmM6MTMwIGJ1aWx0aW4vd29ya3RyZWUuYzoxNjQKK21zZ2lkICJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiCittc2dzdHIgItGB0LDQvNC+INC40LfQstC10LbQtNCw0L3QtSDQsdC10Lcg0LTQtdC50YHRgtCy0LjRgtC10LvQvdC+INC+0LrQsNGB0YLRgNGP0L3QtSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgbm90ZXMiCittc2dzdHIgItC00L7QutC70LDQtNCy0LDQvdC1INC90LAg0L7QutCw0YHRgtGA0LXQvdC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTgKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgItCj0JrQkNCX0JDQotCV0Jtf0JfQkF/QkdCV0JvQldCW0JrQkCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OQorbXNnaWQgInVzZSBub3RlcyBmcm9tIDxub3Rlcy1yZWY+IgorbXNnc3RyICLQtNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDQsdC10LvQtdC20LrQsNGC0LAg0YHQvtGH0LXQvdCwINC+0YIg0YLQvtC30Lgg0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQIgorCisjOiBidWlsdGluL25vdGVzLmM6MTAzNCBidWlsdGluL3N0YXNoLmM6MTY0MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0L/QvtC00LrQvtC80LDQvdC00LA6ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUyCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFvQntCf0KbQmNCv4oCmXSBbPCDQodCf0JjQodCq0Jpf0KFf0KPQmtCQ0JfQkNCi0JXQm9CYIHwgPCDQodCf0JjQodCq0Jpf0KFf0J7QkdCV0JrQotCYXSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1MworbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs8b3B0aW9ucz4uLi5dIDxiYXNlLW5hbWU+IFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyBb0J7Qn9Cm0JjQr+KApl0g0J/QoNCV0KTQmNCa0KFf0J3QkF/QmNCc0JXQotCeIFs8INCh0J/QmNCh0KrQml/QoV/Qo9Ca0JDQl9CQ0KLQldCb0JggfCA8ICIKKyLQodCf0JjQodCq0Jpf0KFf0J7QkdCV0JrQotCYXSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2tlZCBvYmplY3QgQ1JDIGZvciAlcyIKK21zZ3N0ciAi0LvQvtGI0LAg0LrQvtC90YLRgNC+0LvQvdCwINGB0YPQvNCwINC30LAg0L/QsNC60LXRgtC40YDQsNC90LjRjyDQvtCx0LXQutGCIOKAniVz4oCcIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhY2tlZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICLQv9Cw0LrQtdGC0LjRgNCw0L0g0L7QsdC10LrRgiDRgSDQs9GA0LXRiNC60Lgg0LfQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGRlbHRhIGRldGVjdGVkIGZvciBvYmplY3QgJXMiCittc2dzdHIgItGA0LXQutGD0YDRgdC40LLQvdCwINGA0LDQt9C70LjQutCwINC30LAg0L7QsdC10LrRgiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAib3JkZXJlZCAldSBvYmplY3RzLCBleHBlY3RlZCAlPFBSSXUzMj4iCittc2dzdHIgItC/0L7QtNGA0LXQtNC10L3QuCDQsdGP0YXQsCAldSDQvtCx0LXQutGC0LAsINCwINGB0LUg0L7Rh9Cw0LrQstCw0YXQsCAlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTcyCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBwYWNrcyBhcmUgc3BsaXQgZHVlIHRvIHBhY2sucGFja1NpemVMaW1pdCIKK21zZ3N0ciAiIgorItC40LfQutC70Y7Rh9Cy0LDQvdC1INC90LAg0LfQsNC/0LjRgdCy0LDQvdC10YLQviDQvdCwINCx0LjRgtC+0LLQsNGC0LAg0LzQsNGB0LrQsCwg0L/QsNC60LXRgtC40YLQtSDRgdCwINGA0LDQt9C00LXQu9C10L3QuCDQv9C+0YDQsNC00LggIgorItGB0YLQvtC50L3QvtGB0YLRgtCwINC90LAg4oCecGFjay5wYWNrU2l6ZUxpbWl04oCcIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk4NQorbXNnaWQgIldyaXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0JfQsNC/0LjRgdCy0LDQvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDQ2IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXMiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LvRg9GH0LXQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb3RlICU8UFJJdTMyPiBvYmplY3RzIHdoaWxlIGV4cGVjdGluZyAlPFBSSXUzMj4iCittc2dzdHIgItCx0Y/RhdCwINC30LDQv9C40YHQsNC90LggJTxQUkl1MzI+INC+0LHQtdC60YLQuCwg0LAg0YHQtSDQvtGH0LDQutCy0LDRhdCwICU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMjk3Cittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgIiIKKyLQuNC30LrQu9GO0YfQstCw0L3QtSDQvdCwINC30LDQv9C40YHQstCw0L3QtdGC0L4g0L3QsCDQsdC40YLQvtCy0LDRgtCwINC80LDRgdC60LAsINC30LDRidC+0YLQviDQvdGP0LrQvtC4INC+0LHQtdC60YLQuCDQvdGP0LzQsCDQtNCwINGB0LUgIgorItC/0LDQutC10YLQuNGA0LDRgiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG92ZXJmbG93IGluIHBhY2sgZm9yICVzIgorbXNnc3RyICLQv9GA0LXQutCw0LvQtdC90L4g0LTQsNC70LXRh9C90L4g0L3QsNGH0LDQu9C+INC90LAg0L7RgtC80LXRgdGC0LLQsNC90LXRgtC+INC30LAg0L7QsdC10LrRgtC40YLQtS3RgNCw0LfQu9C40LrQsCDQt9CwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3V0IG9mIGJvdW5kIGZvciAlcyIKK21zZ3N0ciAi0L3QtdC00L7RgdGC0LjQttC40LzQviDQvdCw0YfQsNC70L4g0L3QsCDQvtGC0LzQtdGB0YLQstCw0L3QtdGC0L4g0LfQsCDQvtCx0LXQutGC0LjRgtC1LdGA0LDQt9C70LjQutCwINC30LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAwNAorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgItCf0YDQtdCx0YDQvtGP0LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdCBoZWFkZXIgb2YgJXMiCittc2dzdHIgItC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCINC90LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INCw0L3QsNC70LjQt9C40YDQsNC90LAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjIxOSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyMzUKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtGH0LXRgtC1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyMjIgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpbmNvbnNpc3RlbnQgb2JqZWN0IGxlbmd0aCAoJTxQUkl1TUFYPiB2cyAlPFBSSXVNQVg+KSIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0LUg0YEg0L3QtdC/0YDQsNCy0LjQu9C90LAg0LTRitC70LbQuNC90LAgKCU8UFJJdU1BWD4sINCwINC90LUgJTxQUkl1TUFYPikiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI1OQorbXNnaWQgInN1Ym9wdGltYWwgcGFjayAtIG91dCBvZiBtZW1vcnkiCittc2dzdHIgItC90LXQvtC/0YLQuNC80LjQt9C40YDQsNC9INC/0LDQutC10YIg4oCUINC/0LDQvNC10YLRgtCwINGB0LLRitGA0YjQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbHRhIGNvbXByZXNzaW9uIHVzaW5nIHVwIHRvICVkIHRocmVhZHMiCittc2dzdHIgItCU0LXQu9GC0LAg0LrQvtC80L/RgNC10YHQuNGP0YLQsCDRidC1INC40LfQv9C+0LvQt9Cy0LAg0LTQviAlZCDQvdC40YjQutC4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhY2sgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0YWcgJXMiCittc2dzdHIgIiIKKyLQvtCx0LXQutGC0LjRgtC1LCDQutC+0LjRgtC+INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC00L7RgdGC0LjQs9C90LDRgtC4INC+0YIg0LXRgtC40LrQtdGC0LAg4oCeJXPigJwsINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQsNGCICIKKyLQv9Cw0LrQtdGC0LjRgNCw0L3QuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODAxCittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi0JrQvtC80L/RgNC10YHQuNGA0LDQvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODA3Cittc2dpZCAiaW5jb25zaXN0ZW5jeSB3aXRoIGRlbHRhIGNvdW50IgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQsdGA0L7QuSDRgNCw0LfQu9C40LrQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBlZGdlIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisi0L7Rh9Cw0LrQstCwINGB0LUg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L3QsCDQutGA0LDQtdC9INC+0LHQtdC60YIsINCwINC90LU6XG4iCisiICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisi0L7Rh9Cw0LrQstCwINGB0LUg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L3QsCDQvtCx0LXQutGCLCDQsCDQvdC1OlxuIgorIiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTkyCittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCeLS1taXNzaW5n4oCcIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwNTEgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTU5Cittc2dpZCAiY2Fubm90IG9wZW4gcGFjayBpbmRleCIKK21zZ3N0ciAi0LjQvdC00LXQutGB0YrRgiDQvdCwINC/0LDQutC10YLQvdC40Y8g0YTQsNC50Lsg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0IGF0ICVzIGNvdWxkIG5vdCBiZSBleGFtaW5lZCIKK21zZ3N0ciAi0L3QtdC/0LDQutC10YLQuNGA0LDQvdC40Y/RgiDQvtCx0LXQutGCINCyIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTY3Cittc2dpZCAidW5hYmxlIHRvIGZvcmNlIGxvb3NlIG9iamVjdCIKK21zZ3N0ciAi0L7RgdGC0LDQstCw0L3QtdGC0L4g0L3QsCDQvtCx0LXQutGC0LAg0L3QtdC/0LDQutC10YLQuNGA0LDQvSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L3QsNC70L7QttC10L3QviIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJldiAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC1INCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXZpc2lvbiAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDQstC10YDRgdC40Y8g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4OAorbXNnaWQgInVuYWJsZSB0byBhZGQgcmVjZW50IG9iamVjdHMiCittc2dzdHIgItGB0LrQvtGA0L7RiNC90LjRgtC1INC+0LHQtdC60YLQuCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC00L7QsdCw0LLQtdC90LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIgorbXNnc3RyICLQvdC10L/QvtC00LTRitGA0LbQsNC90LAg0LLQtdGA0YHQuNGPINC90LAg0LjQvdC00LXQutGB0LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDQstC10YDRgdC40Y8g0L3QsCDQuNC90LTQtdC60YHQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzgzCittc2dpZCAiPHZlcnNpb24+Wyw8b2Zmc2V0Pl0iCittc2dzdHIgItCS0JXQoNCh0JjQr1ss0J7QotCc0JXQodCi0JLQkNCd0JVdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODQKK21zZ2lkICJ3cml0ZSB0aGUgcGFjayBpbmRleCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgaWR4IGZvcm1hdCB2ZXJzaW9uIgorbXNnc3RyICIiCisi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAg0L3QsCDQv9Cw0LrQtdGC0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0LLRitCyINGE0L7RgNC80LDMgNGC0LAg0YEg0YPQutCw0LfQsNC90LDRgtCwINCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg3Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9C10L0g0YDQsNC30LzQtdGAINC90LAg0LLRgdC10LrQuCDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg5Cittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINC+0LHQtdC60YLQuNGC0LUg0LfQsNC10YLQuCDQvtGCINC00YDRg9Cz0Lgg0YXRgNCw0L3QuNC70LjRidCwINC90LAg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTEKK21zZ2lkICJpZ25vcmUgcGFja2VkIG9iamVjdHMiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0L/QsNC60LXRgtC40YDQsNC90LjRgtC1INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzkzCittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgb2JqZWN0cyIKK21zZ3N0ciAi0L7Qs9GA0LDQvdC40YfQsNCy0LDQvdC1INC90LAg0L/RgNC+0LfQvtGA0LXRhtCwINC30LAg0L/QsNC60LXRgtC40YDQsNC90LUg0L/QviDQsdGA0L7QuSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5NQorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgIiIKKyLQvtCz0YDQsNC90LjRh9Cw0LLQsNC90LUg0L3QsCDQv9GA0L7Qt9C+0YDQtdGG0LAg0LfQsCDQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQuCDQv9C+INC/0LDQvNC10YIg0L7RgdCy0LXQvSDQv9C+INCx0YDQvtC5INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk3Cittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgIiIKKyLQvNCw0LrRgdC40LzQsNC70L3QsCDQtNGK0LvQttC40L3QsCDQvdCwINCy0LXRgNC40LPQsNGC0LAg0L7RgiDRgNCw0LfQu9C40LrQuCwg0LrQvtGP0YLQviDQtSDQv9C+0LfQstC+0LvQtdC90LAg0LIg0L/QsNC60LXRgtC90LjRjyDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk5Cittc2dpZCAicmV1c2UgZXhpc3RpbmcgZGVsdGFzIgorbXNnc3RyICLQv9GA0LXQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQuNGC0LUg0YDQsNC30LvQuNC60LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwMQorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgItC/0YDQtdC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwMworbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0Lgg4oCeT0ZTX0RFTFRB4oCcIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDUKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICIiCisi0YHRgtCw0YDRgtC40YDQsNC90LUg0L3QsCDQvdC40YjQutC4INC30LAg0L/RgNC10YLRitGA0YHQstCw0L3QtSDQvdCwINC90LDQuS3QtNC+0LHRgNC40YLQtSDRgdGK0LLQv9Cw0LTQtdC90LjRjyDQvdCwINGA0LDQt9C70LjQutC40YLQtSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA3Cittc2dpZCAiZG8gbm90IGNyZWF0ZSBhbiBlbXB0eSBwYWNrIG91dHB1dCIKK21zZ3N0ciAi0LHQtdC3INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0YDQsNC30LXQvSDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA5Cittc2dpZCAicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINCy0LXRgNGB0LjQuNGC0LUg0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTEKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAi0L7Qs9GA0LDQvdC40YfQsNCy0LDQvdC1INC00L4g0LLRgdC1INC+0YnQtSDQvdC10L/QsNC60LXRgtC40YDQsNC90LjRgtC1INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDE0Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgIiIKKyLQstC60LvRjtGH0LLQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0L7QsdC10LrRgtC4LCDQutC+0LjRgtC+INC80L7Qs9Cw0YIg0LTQsCDRgdC1INC00L7RgdGC0LjQs9C90LDRgiDQvtGCINC/0YDQvtC40LfQstC+0LvQtdC9ICIKKyLRg9C60LDQt9Cw0YLQtdC7IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiCittc2dzdHIgItCy0LrQu9GO0YfQstCw0L3QtSDQuCDQvdCwINC+0LHQtdC60YLQuNGC0LUg0YHQvtGH0LXQvdC4INC+0YIg0LfQsNC/0LjRgdC40YLQtSDQsiDQttGD0YDQvdCw0LvQsCDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgItCy0LrQu9GO0YfQstCw0L3QtSDQuCDQvdCwINC+0LHQtdC60YLQuNGC0LUg0YHQvtGH0LXQvdC4INC+0YIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMworbXNnaWQgIm91dHB1dCBwYWNrIHRvIHN0ZG91dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/QsNC60LXRgtCwINC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQuNC30YXQvtC0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjUKK21zZ2lkICJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiCittc2dzdHIgIiIKKyLQstC60LvRjtGH0LLQsNC90LUg0Lgg0L3QsCDQvtCx0LXQutGC0LjRgtC1LdC10YLQuNC60LXRgtC4LCDQutC+0LjRgtC+INGB0L7Rh9Cw0YIg0LrRitC8INC+0LHQtdC60YLQuNGC0LUsINC60L7QuNGC0L4g0YnQtSDQsdGK0LTQsNGCICIKKyLQv9Cw0LrQtdGC0LjRgNCw0L3QuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI3Cittc2dpZCAia2VlcCB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQvdC10LTQvtGB0YLQuNC20LjQvNC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyOQorbXNnaWQgInBhY2sgbG9vc2UgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi0L/QsNC60LXRgtC40YDQsNC90LUg0Lgg0L3QsCDQvdC10LTQvtGB0YLQuNC20LjQvNC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzMQorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICLRgNCw0LfQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdCwINC90LXQtNC+0YHRgtC40LbQuNC80LjRgtC1INC+0LHQtdC60YLQuCwg0LrQvtC40YLQviDRgdCwINC/0L4t0L3QvtCy0Lgg0L7RgiDRgtC+0LLQsCDQktCg0JXQnNCVIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzQKK21zZ2lkICJ1c2UgdGhlIHNwYXJzZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINCw0LvQs9C+0YDQuNGC0YrQvCDQt9CwINGH0LDRgdGC0LjRh9C90LAg0LTQvtGB0YLQuNC20LjQvNC+0YHRgiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDM2Cittc2dpZCAiY3JlYXRlIHRoaW4gcGFja3MiCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtSDQvdCwINGB0YrQutGA0LDRgtC10L3QuCDQv9Cw0LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzOAorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICLQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQv9C+0LTRhdC+0LTRj9GJ0L4g0LfQsCDQv9C70LjRgtC60L4g0LTQvtGB0YLQsNCy0Y/QvdC1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDAKK21zZ2lkICJpZ25vcmUgcGFja3MgdGhhdCBoYXZlIGNvbXBhbmlvbiAua2VlcCBmaWxlIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINC/0LDQutC10YLQuNGC0LUsINC60L7QuNGC0L4g0YHQsCDQv9GA0LjQtNGA0YPQttC10L3QuCDQvtGCINGE0LDQudC7IOKAni5rZWVw4oCcIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDIKK21zZ2lkICJpZ25vcmUgdGhpcyBwYWNrIgorbXNnc3RyICLQv9GA0L7Qv9GD0YHQutCw0L3QtSDQvdCwINGC0L7Qt9C4INC/0LDQutC10YIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0NAorbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgItC90LjQstC+INC90LAg0LrQvtC80L/RgNC10YHQuNGA0LDQvdC1INC/0YDQuCDQv9Cw0LrQtdGC0LjRgNCw0L3QtSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQ2Cittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0YDQvtC00LjRgtC10LvQuCDigJQg0LTQvtGA0Lgg0Lgg0YLQtdC30LgsINC60L7QuNGC0L4g0L3QvtGA0LzQsNC70L3QviDRgdCwINGB0LrRgNC40YLQuCDQv9GA0LggIgorItC/0YDQuNGB0LDQttC00LDQvdC40Y/RgtCwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDgKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKyLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQuCDQuNC90LTQtdC60YHQuCDQvdCwINCx0LDQt9CwINCx0LjRgtC+0LLQuCDQvNCw0YHQutC4INC30LAg0YPRgdC60L7RgNGP0LLQsNC90LUg0L3QsCAiCisi0L/RgNC10LHRgNC+0Y/QstCw0L3QtdGC0L4g0L3QsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NTAKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IgorbXNnc3RyICIiCisi0LfQsNC/0LDQt9Cy0LDQvdC1INC4INC90LAg0LjQvdC00LXQutGBINC90LAg0LHQsNC30LAg0L/QvtCx0LjRgtC+0LLQsCDQvNCw0YHQutCwLCDQt9Cw0LXQtNC90L4g0YEg0LjQvdC00LXQutGB0LAg0LfQsCDQv9Cw0LrQtdGC0LAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1NAorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IGlmIHBvc3NpYmxlIgorbXNnc3RyICLQt9Cw0L/QuNGB0LLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQuCDQvdCwINCx0LDQt9CwINCx0LjRgtC+0LLQuCDQvNCw0YHQutC4INC/0YDQuCDQstGK0LfQvNC+0LbQvdC+0YHRgiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDU4Cittc2dpZCAiaGFuZGxpbmcgZm9yIG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi0LrQsNC6INC00LAg0YHQtSDQvtCx0YDQsNCx0L7RgtCy0LDRgiDQu9C40L/RgdCy0LDRidC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ2MQorbXNnaWQgImRvIG5vdCBwYWNrIG9iamVjdHMgaW4gcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICLQsdC10Lcg0L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDQvtCx0LXQutGC0Lgg0LIg0LPQsNGA0LDQvdGC0LjRgNCw0YnQuCDQv9Cw0LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ2MworbXNnaWQgInJlc3BlY3QgaXNsYW5kcyBkdXJpbmcgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgItCx0LXQtyDQv9GA0L7QvNGP0L3QsCDQvdCwINCz0YDRg9C/0LjRgtC1INC/0YDQuCDQtNC10LvRgtCwINC60L7QvNC/0YDQtdGB0LjRjyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGNoYWluIGRlcHRoICVkIGlzIHRvbyBkZWVwLCBmb3JjaW5nICVkIgorbXNnc3RyICLQstC10YDQuNCz0LDRgtCwINGBINGA0LDQt9C70LjQutC4INC1INC/0YDQtdC60LDQu9C10L3QviDQtNGK0LvQsdC+0LrQsCDigJQgJWQsINGJ0LUg0YHQtSDQv9C+0LvQt9Cy0LAgJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrLmRlbHRhQ2FjaGVMaW1pdCBpcyB0b28gaGlnaCwgZm9yY2luZyAlZCIKK21zZ3N0ciAiIgorItCh0YLQvtC50L3QvtGB0YLRgtCwINC90LAg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5wYWNrLmRlbHRhQ2FjaGVMaW1pdOKAnCDQtSDQv9GA0LXQutCw0LvQtdC90L4g0LPQvtC70Y/QvNCwLiAg0KnQtSDRgdC1ICIKKyLQv9C+0LvQt9Cy0LAgJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU1MQorbXNnaWQgIi0tbWF4LXBhY2stc2l6ZSBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhIHBhY2sgZm9yIHRyYW5zZmVyIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1tYXgtcGFjay1zaXpl4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LfQsCDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQv9Cw0LrQtdGC0L3QuCAiCisi0YTQsNC50LvQvtCy0LUg0LfQsCDQv9GA0LXQvdC+0YEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU1MworbXNnaWQgIm1pbmltdW0gcGFjayBzaXplIGxpbWl0IGlzIDEgTWlCIgorbXNnc3RyICLQvNC40L3QuNC80LDQu9C90LjRj9GCINGA0LDQt9C80LXRgCDQvdCwINC/0LDQutC10YLQuNGC0LUg0LUgMeKAik1pQiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTU4Cittc2dpZCAiLS10aGluIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGFuIGluZGV4YWJsZSBwYWNrIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS10aGlu4oCc0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDQt9CwINGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0LDQutC10YLQvdC4INGE0LDQudC70L7QstC1INGBICIKKyLQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU2MQorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLS11bnBhY2stdW5yZWFjaGFibGUgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1rZWVwLXVucmVhY2hhYmxl4oCcINC4IOKAni0tdW5wYWNrLXVucmVhY2hhYmxl4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NjcKK21zZ2lkICJjYW5ub3QgdXNlIC0tZmlsdGVyIHdpdGhvdXQgLS1zdGRvdXQiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni1maWx0ZXLigJwg0LjQt9C40YHQutCy0LAg4oCeLXN0ZG91dOKAnCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNjI3Cittc2dpZCAiRW51bWVyYXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0JjQt9Cx0YDQvtGP0LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvdGFsICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgcmV1c2VkICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgcGFjay0iCisicmV1c2VkICU8UFJJdTMyPiIKK21zZ3N0ciAiIgorItCe0LHRidC+OiAlPFBSSXUzMj4gKNGA0LDQt9C70LjQutC4OiAlPFBSSXUzMj4pLCDQv9GA0LXQuNC30L/QvtC70LfQstCw0L3QuDogJTxQUkl1MzI+ICjRgNCw0LfQu9C40LrQuDogIgorIiU8UFJJdTMyPiksINC/0YDQtdC40LfQv9C+0LvQt9Cy0LDQvdC4INC/0YDQuCDQv9Cw0LrQtdGC0LjRgNCw0L3QtTogJTxQUkl1MzI+IgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjgKK21zZ2lkICJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcGFjay1yZWZzIFvQntCf0KbQmNCv4oCmXSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAi0L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDQstGB0LjRh9C60L4iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTcKK21zZ2lkICJwcnVuZSBsb29zZSByZWZzIChkZWZhdWx0KSIKK21zZ3N0ciAi0L7QutCw0YHRgtGA0Y/QvdC1INC90LAg0L3QtdC00L7RgdGC0LjQttC40LzQuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4ICjRgdGC0LDQvdC00LDRgNGC0L3QvikiCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6OQorbXNnaWQgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKK21zZ3N0ciAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjQyCittc2dpZCAiUmVtb3ZpbmcgZHVwbGljYXRlIG9iamVjdHMiCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC/0L7QstGC0LDRgNGP0YnQuNGC0LUg0YHQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMgorbXNnaWQgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSA8dGltZT5dIFstLV0gWzxoZWFkPi4uLl0iCittc2dzdHIgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSDQktCg0JXQnNCVXSBbLS1dIFvQktCg0KrQpeKApl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzEKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgItC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L7QutCw0YHRgtGA0LXQvdC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAi0L7QutCw0YHRgtGA0Y/QvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSDQv9C+LdGB0YLQsNGA0Lgg0L7RgiDRgtC+0LLQsCDQktCg0JXQnNCVIgorCisjOiBidWlsdGluL3BydW5lLmM6MTM2Cittc2dpZCAibGltaXQgdHJhdmVyc2FsIHRvIG9iamVjdHMgb3V0c2lkZSBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LDQstCw0L3QtSDQvdCwINC+0LHRhdC+0LbQtNCw0L3QtdGC0L4g0LTQviDQvtCx0LXQutGC0Lgg0LjQt9Cy0YrQvSDQs9Cw0YDQsNC90YLQuNGA0LDRidC4INC/0LDQutC10YLQuCIKKworIzogYnVpbHRpbi9wcnVuZS5jOjE1MAorbXNnaWQgImNhbm5vdCBwcnVuZSBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAi0YXRgNCw0L3QuNC70LjRidC1INGBINCy0LDQttC90Lgg0L7QsdC10LrRgtC4INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0LrQsNGB0YLRgNGPIgorCisjOiBidWlsdGluL3B1bGwuYzo0NSBidWlsdGluL3B1bGwuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDigJ4lc+KAnDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjY3Cittc2dpZCAiZ2l0IHB1bGwgWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBwdXNoIFvQntCf0KbQmNCv4oCmXSBb0KXQoNCQ0J3QmNCb0JjQqdCVIFvQo9Ca0JDQl9CQ0KLQldCbX9Cd0JBf0JLQldCg0KHQmNCv4oCmXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjEyMgorbXNnaWQgImNvbnRyb2wgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLRg9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINGA0LXQutGD0YDRgdC40LLQvdC+0YLQviDQtNC+0YHRgtCw0LLRj9C90LUg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LjRgtC1IgorCisjOiBidWlsdGluL3B1bGwuYzoxMjYKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gbWVyZ2luZyIKK21zZ3N0ciAi0J7Qv9GG0LjQuCDQv9GA0Lgg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjEyOQorbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAi0LLQvdCw0YHRj9C90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0YfRgNC10Lcg0L/RgNC10LHQsNC30LjRgNCw0L3QtSwg0LAg0L3QtSDRh9GA0LXQtyDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTU3IGJ1aWx0aW4vcmViYXNlLmM6NDcxIGJ1aWx0aW4vcmV2ZXJ0LmM6MTI2Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIgorbXNnc3RyICLQv9C+0LfQstC+0LvRj9Cy0LDQvdC1INC90LAg0L/RgNC10LLRitGA0YLQsNC90LjRjyIKKworIzogYnVpbHRpbi9wdWxsLmM6MTY2Cittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciByZWJhc2UiCittc2dzdHIgItCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0YHQutCw0YLQsNCy0LDQvdC1L9C/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINGB0LrQsNGC0LDQvdC+0YLQviDQv9GA0LXQtNC4INC4INGB0LvQtdC0INC/0YDQtdCx0LDQt9C40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE4MgorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyIKK21zZ3N0ciAi0J7Qv9GG0LjQuCDQv9GA0Lgg0LTQvtGB0YLQsNCy0Y/QvdC1IgorCisjOiBidWlsdGluL3B1bGwuYzoxOTIKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgYnJhbmNoIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L/RgNC10LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0LvQvtC60LDQu9C90LjRjyDQutC70L7QvSIKKworIzogYnVpbHRpbi9wdWxsLmM6MjAwCittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgcHVsbGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICLQsdGA0L7QuSDQv9C+0LTQvNC+0LTRg9C70Lgg0LjQt9C00YrRgNC/0LDQvdC4INC/0LDRgNCw0LvQtdC70L3QviIKKworIzogYnVpbHRpbi9wdWxsLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCecHVsbC5mZuKAnDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyNgorbXNnaWQgIiIKKyJUaGVyZSBpcyBubyBjYW5kaWRhdGUgZm9yIHJlYmFzaW5nIGFnYWluc3QgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCAiCisiZmV0Y2hlZC4iCittc2dzdHIgIiIKKyLQnNC10LbQtNGDINGD0LrQsNC30LDRgtC10LvQuNGC0LUsINC60L7QuNGC0L4g0YLQvtC60YMg0YnQviDQtNC+0YHRgtCw0LLQuNGF0YLQtSwg0L3Rj9C80LAg0L/QvtC00YXQvtC00Y/RiSDQutCw0L3QtNC40LTQsNGCLCDQstGK0YDRhdGDICIKKyLQutC+0LnRgtC+INC00LAg0L/RgNC10LHQsNC30LjRgNCw0YLQtS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyOAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorbXNnc3RyICIiCisi0JzQtdC20LTRgyDRg9C60LDQt9Cw0YLQtdC70LjRgtC1LCDQutC+0LjRgtC+INGC0L7QutGDINGJ0L4g0LTQvtGB0YLQsNCy0LjRhdGC0LUsINC90Y/QvNCwINC/0L7QtNGF0L7QtNGP0Ykg0LrQsNC90LTQuNC00LDRgiwg0LrQvtC50YLQviAiCisi0LTQsCDRgdC70LXQtdGC0LUuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MjkKK21zZ2lkICIiCisiR2VuZXJhbGx5IHRoaXMgbWVhbnMgdGhhdCB5b3UgcHJvdmlkZWQgYSB3aWxkY2FyZCByZWZzcGVjIHdoaWNoIGhhZCBub1xuIgorIm1hdGNoZXMgb24gdGhlIHJlbW90ZSBlbmQuIgorbXNnc3RyICIiCisi0J3QsNC5INCy0LXRgNC+0Y/RgtC90L4g0YHRgtC1INC/0L7QtNCw0LvQuCDRiNCw0LHQu9C+0L0g0LfQsCDRg9C60LDQt9Cw0YLQtdC70LgsINC60L7QudGC0L4g0L3QtSDQtSDQvdCw0L/QsNGB0L3QsNC7INGBINC90LjRidC+INCyICIKKyLQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIiIKKyLQl9Cw0Y/QstC40YXRgtC1INC40LfQtNGK0YDQv9Cy0LDQvdC1INC+0YIg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCwg0L3QviDQvdC1INGD0LrQsNC30LDRhdGC0LUg0LrQu9C+0L0uXG4iCisi0J/QvtC90LXQttC1INGC0L7QstCwINC90LUg0LUg0YXRgNCw0L3QuNC70LjRidC10YLQviDQv9C+INC/0L7QtNGA0LDQt9Cx0LjRgNCw0L3QtSDQvdCwINGC0LXQutGD0YnQuNGPINC60LvQvtC9LCDRgtGA0Y/QsdCy0LBcbiIKKyLQtNCwINGD0LrQsNC20LXRgtC1INC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0LrQu9C+0L0g0L3QsCDQutC+0LzQsNC90LTQvdC40Y8g0YDQtdC0LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM3IGJ1aWx0aW4vcmViYXNlLmM6MTQwOSBnaXQtcGFyc2UtcmVtb3RlLnNoOjczCittc2dpZCAiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLiIKK21zZ3N0ciAi0JjQt9Cy0YrQvSDQstGB0LjRh9C60Lgg0LrQu9C+0L3QuC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOSBidWlsdGluL3B1bGwuYzo0NTQgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgItCj0LrQsNC20LXRgtC1INCy0YrRgNGF0YMg0LrQvtC5INC60LvQvtC9INC40YHQutCw0YLQtSDQtNCwINC/0YDQtdCx0LDQt9C40YDQsNGC0LUuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDEgYnVpbHRpbi9wdWxsLmM6NDU2IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODIKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iCittc2dzdHIgItCj0LrQsNC20LXRgtC1INC60L7QuSDQutC70L7QvSDQuNGB0LrQsNGC0LUg0LTQsCDRgdC70LXQtdGC0LUuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDIgYnVpbHRpbi9wdWxsLmM6NDU3Cittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAi0JfQsCDQv9C+0LLQtdGH0LUg0LjQvdGE0L7RgNC80LDRhtC40Y8g0L/QvtCz0LvQtdC00L3QtdGC0LUg0YDRitC60L7QstC+0LTRgdGC0LLQvtGC0L4g4oCeZ2l0LXB1bGwoMSnigJwiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NCBidWlsdGluL3B1bGwuYzo0NTAgYnVpbHRpbi9wdWxsLmM6NDU5CisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NAorbXNnaWQgIjxyZW1vdGU+IgorbXNnc3RyICLQntCi0JTQkNCb0JXQp9CV0J3Qnl/QpdCg0JDQndCY0JvQmNCp0JUiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NCBidWlsdGluL3B1bGwuYzo0NTkgYnVpbHRpbi9wdWxsLmM6NDY0CisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjY1Cittc2dpZCAiPGJyYW5jaD4iCittc2dzdHIgItCa0JvQntCdIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTIgYnVpbHRpbi9yZWJhc2UuYzoxNDA3IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzUKK21zZ2lkICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi0KLQtdC60YPRidC40Y/RgiDQutC70L7QvSDQvdC1INGB0LvQtdC00Lgg0L3QuNC60L7QuS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2MSBnaXQtcGFyc2UtcmVtb3RlLnNoOjk1Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOiIKK21zZ3N0ciAiIgorItCQ0LrQviDQuNGB0LrQsNGC0LUg0LTQsCDQt9Cw0LTQsNC00LXRgtC1INC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0YHQu9C10LTQtdC9INC60LvQvtC9LCDQvNC+0LbQtdGC0LUg0LTQsCDQvdCw0L/RgNCw0LLQuNGC0LUg0YLQvtCy0LAg0YEgIgorItC60L7QvNCw0L3QtNCw0YLQsDoiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorItCX0LAg0YHQu9C40LLQsNC90LUg0LUg0YPQutCw0LfQsNC9INC+0YLQtNCw0LvQtdGH0LXQvdC40Y/RgiDRg9C60LDQt9Cw0YLQtdC7IOKAniVz4oCcLFxuIgorItC90L4g0YLQsNC60YrQsiDQvdC1INC1INC00L7RgdGC0LDQstC10L0uIgorCisjOiBidWlsdGluL3B1bGwuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBjb21taXQgJXMiCittc2dzdHIgItC90LXQtNC+0YHRgtGK0L/QvdC+INC/0L7QtNCw0LLQsNC90LU6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo4NTcKK21zZ2lkICJpZ25vcmluZyAtLXZlcmlmeS1zaWduYXR1cmVzIGZvciByZWJhc2UiCittc2dzdHIgItCx0LXQtyDigJ4tLXZlcmlmeS1zaWduYXR1cmVz4oCcINC/0YDQuCDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1IgorCisjOiBidWlsdGluL3B1bGwuYzo5MTIKK21zZ2lkICItLVtuby1dYXV0b3N0YXNoIG9wdGlvbiBpcyBvbmx5IHZhbGlkIHdpdGggLS1yZWJhc2UuIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLVtuby1dYXV0b3N0YXNo4oCcINC40LfQuNGB0LrQstCwIOKAni0tcmViYXNl4oCcIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICLQntCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINCy0YHQtSDQvtGJ0LUg0L3QtdGB0YrQt9C00LDQtNC10L0g0LrQu9C+0L0g0YEg0L/RgNC+0LzQtdC90LjRgtC1INC+0YIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyNAorbXNnaWQgInB1bGwgd2l0aCByZWJhc2UiCittc2dzdHIgItC40LfQtNGK0YDQv9Cy0LDQvdC1INGBINC/0YDQtdCx0LDQt9C40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyNQorbXNnaWQgInBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgItGC0YDRj9Cx0LLQsCDQtNCwINC/0L7QtNCw0LTQtdGC0LUg0LjQu9C4INGB0LrQsNGC0LDQtdGC0LUg0L/RgNC+0LzQtdC90LjRgtC1LiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorItC00L7RgdGC0LDQstGP0L3QtdGC0L4g0L7QsdC90L7QstC4INCy0YrRgNGF0LAg0L3QsCDRgtC10LrRg9GJ0LjRjyDQutC70L7QvS4gINCg0LDQsdC+0YLQvdC+0YLQvlxuIgorItCy0Lgg0LrQvtC/0LjQtSDQsdC1INC/0YDQtdCy0YrRgNGC0Y/QvdC+INC+0YIg0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIm91dHB1dCwgcnVuXG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisidG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyLQoNCw0LHQvtGC0L3QvtGC0L4g0LLQuCDQutC+0L/QuNC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LXQstGK0YDRgtGP0L3Qvi5cbiIKKyLQodC70LXQtCDQutCw0YLQviDQt9Cw0L/QsNC30LjRgtC1INCy0YHQuNGH0LrQviDQvdC10L7QsdGF0L7QtNC40LzQviDQv9C+0YHQvtGH0LXQvdC+INC+0YIg0LrQvtC80LDQvdC00LDRgtCwOlxuIgorIiAgICBnaXQgZGlmZiAlc1xuIgorItC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyIgICAgZ2l0IHJlc2V0IC0taGFyZFxuIgorItC30LAg0LLRgNGK0YnQsNC90LUg0LrRitC8INC90L7RgNC80LDQu9C90L4g0YHRitGB0YLQvtGP0L3QuNC1LiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTcxCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC70LjQstCw0YLQtSDQvNC90L7QttC10YHRgtCy0L4g0LrQu9C+0L3QuCDQsiDQv9GA0LDQt9C10L0g0LLRitGA0YXQvtCyINGD0LrQsNC30LDRgtC10LsuIgorCisjOiBidWlsdGluL3B1bGwuYzo5NzUKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0L/RgNC10LHQsNC30LjRgNCw0YLQtSDQstGK0YDRhdGDINC/0L7QstC10YfQtSDQvtGCINC10LTQuNC9INC60LvQvtC9LiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTgyCittc2dpZCAiY2Fubm90IHJlYmFzZSB3aXRoIGxvY2FsbHkgcmVjb3JkZWQgc3VibW9kdWxlIG1vZGlmaWNhdGlvbnMiCittc2dzdHIgIiIKKyLQv9GA0LXQsdCw0LfQuNGA0LDQvdC10YLQviDQtSDQvdC10LLRitC30LzQvtC20L3QviDQt9Cw0YDQsNC00Lgg0LvQvtC60LDQu9C90L4g0LfQsNC/0LjRgdCw0L3QuNGC0LUg0L/RgNC+0LzQtdC90Lgg0L/QviDQv9C+0LTQvNC+0LTRg9C70LjRgtC1IgorCisjOiBidWlsdGluL3B1c2guYzoxOQorbXNnaWQgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVzaCBb0J7Qn9Cm0JjQr+KApl0gW9Cl0KDQkNCd0JjQm9CY0KnQlSBb0KPQmtCQ0JfQkNCi0JXQm1/QndCQX9CS0JXQoNCh0JjQr+KApl1dIgorCisjOiBidWlsdGluL3B1c2guYzoxMTIKK21zZ2lkICJ0YWcgc2hvcnRoYW5kIHdpdGhvdXQgPHRhZz4iCittc2dzdHIgItGB0YrQutGA0LDRidC10L3QuNC1INC30LAg0LXRgtC40LrQtdGCINCx0LXQtyDQldCi0JjQmtCV0KIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyMgorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWRlbGV0ZeKAnCDQv9GA0LjQtdC80LAg0LfQsCDRhtC10Lsg0YHQsNC80L4g0L/RgNC+0YHRgtC4INC40LzQtdC90LAg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE2OAorbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKyJcbiIKKyLQl9CwINC00LAg0LLQutC70Y7Rh9C40YLQtSDRgtCw0LfQuCDQvtC/0YbQuNGPINC30LAg0L/QvtGB0YLQvtGP0L3QvdC+LCDQv9C+0LPQu9C10LTQvdC10YLQtSDQtNC+0LrRg9C80LXQvdGC0LDRhtC40Y/RgtCwINC30LAgIgorItC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCecHVzaC5kZWZhdWx04oCcINCyIOKAnmdpdCBoZWxwIGNvbmZpZ+KAnC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGRvZXMgbm90IG1hdGNoXG4iCisidGhlIG5hbWUgb2YgeW91ciBjdXJyZW50IGJyYW5jaC4gIFRvIHB1c2ggdG8gdGhlIHVwc3RyZWFtIGJyYW5jaFxuIgorIm9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiVG8gcHVzaCB0byB0aGUgYnJhbmNoIG9mIHRoZSBzYW1lIG5hbWUgb24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKICIlcyIKIG1zZ3N0ciAiIgotItCa0L7QvNCw0L3QtNCw0YLQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LTQvtCx0LDQstC10L3QsDpcbiIKKyLQmNC80LXRgtC+INC90LAg0YLQtdC60YPRidC40Y8g0LrQu9C+0L0g0YHQtSDRgNCw0LfQu9C40YfQsNCy0LAg0L7RgiDQuNC80LXRgtC+INC90LAg0LrQu9C+0L3QsCwg0LrQvtC50YLQviDRgtC+0Lkg0YHQu9C10LTQuC5cbiIKKyLQl9CwINC00LAg0LjQt9GC0LvQsNGB0LrQsNGC0LUg0LrRitC8INGB0LvQtdC00LXQvdC40Y8g0LrQu9C+0L0g0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyLQl9CwINC00LAg0LjQt9GC0LvQsNGB0LrQsNGC0LUg0LrRitC8INC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0LrQu9C+0L0g0YEg0LjQvNC1INC60LDRgtC+INC70L7QutCw0LvQvdC40Y8sINC40LfQv9C+0LvQt9Cy0LDQudGC0LUgIgorItC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRFxuIgogIiVzIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxODcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBSZW1vdmUgVG9vbCIKLW1zZ3N0ciAiJXMgKCVzKTog0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQutC+0LzQsNC90LTQsCIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTkzCi1tc2dpZCAiUmVtb3ZlIFRvb2wgQ29tbWFuZHMiCi1tc2dzdHIgItCf0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0LrQvtC80LDQvdC00LgiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjE5OAotbXNnaWQgIlJlbW92ZSIKLW1zZ3N0ciAi0J/RgNC10LzQsNGF0LLQsNC90LUiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjIzMQotbXNnaWQgIihCbHVlIGRlbm90ZXMgcmVwb3NpdG9yeS1sb2NhbCB0b29scykiCi1tc2dzdHIgIijQutC+0LzQsNC90LTQuNGC0LUg0LrRitC8INC70L7QutCw0LvQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0YHQsCDQvtCx0L7Qt9C90LDRh9C10L3QuCDQsiDRgdC40L3RjNC+KSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjgzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKToiCi1tc2dzdHIgIiVzICglcyk6IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyOTIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSdW4gQ29tbWFuZDogJXMiCi1tc2dzdHIgItCY0LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAniVz4oCcIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDozMDYKLW1zZ2lkICJBcmd1bWVudHMiCi1tc2dzdHIgItCQ0YDQs9GD0LzQtdC90YLQuCIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQxCi1tc2dpZCAiT0siCi1tc2dzdHIgItCU0L7QsdGA0LUiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgotbXNnc3RyICLQlNC+0YHRgtCw0LLRj9C90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0L7RgiDigJ4lc+KAnCIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCi1tc2dzdHIgItC+0LrQsNGB0YLRgNGP0L3QtSDQvdCwINGB0LvQtdC00Y/RidC40YLQtSDQutC70L7QvdC4INC60YrQvCDigJ4lc+KAnCIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKLW1zZ3N0ciAi0J7QutCw0YHRgtGA0Y/QvdC1INC90LAg0YHQu9C10LTRj9GJ0LjRgtC1INC60LvQvtC90Lgg0L3QsCDQuNC30YLRgNC40YLQuNGC0LUg0LrQu9C+0L3QuCDQvtGCIOKAniVz4oCcIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyNQotbXNnaWQgImZldGNoIGFsbCByZW1vdGVzIgotbXNnc3RyICLQtNC+0YHRgtCw0LLRj9C90LUg0L7RgiDQstGB0LjRh9C60Lgg0L7RgtC00LDQu9C10YfQtdC90LgiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjI2Ci1tc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSBhbGwgcmVtb3RlcyIKLW1zZ3N0ciAi0JTQvtGB0YLQsNCy0Y/QvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INC+0YIg0LLRgdC40YfQutC4INC+0YLQtNCw0LvQtdGH0LXQvdC4INGF0YDQsNC90LjQu9C40YnQsCIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6NDAKLW1zZ2lkICJyZW1vdGUgcHJ1bmUgYWxsIHJlbW90ZXMiCi1tc2dzdHIgItC+0LrQsNGB0YLRgNGP0L3QtSDQvdCwINGB0LvQtdC00Y/RidC40YLQtSDQuNC30YLRgNC40YLQuCIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6NDEKLW1zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSBhbGwgcmVtb3RlcyIKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCiBtc2dzdHIgIiIKLSLQntC60LDRgdGC0YDRj9C90LUg0L3QsCDRgdC70LXQtNGP0YnQuNGC0LUg0LrQu9C+0L3QuCDQvdCwINC40LfRgtGA0LjRgtC40YLQtSDQutC70L7QvdC4INC+0YIg0LLRgdC40YfQutC4INC+0YLQtNCw0LvQtdGH0LXQvdC4ICIKLSLRhdGA0LDQvdC40LvQuNGJ0LAiCisi0JIg0LzQvtC80LXQvdGC0LAg0L3QtSDRgdGC0LUg0L3QsCDQvdC40LrQvtC5INC60LvQvtC9LiAg0JfQsCDQtNCwINC40LfRgtC70LDRgdC60LDRgtC1INC40YHRgtC+0YDQuNGP0YLQsCDQtNC+INGB0YrRgdGC0L7Rj9C90LjQtdGC0L4sXG4iCisi0YHQvtGH0LXQvdC+INCyINC80L7QvNC10L3RgtCwINC+0YIg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0LrQvtC80LDQvdC00LDRgtCwOlxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOtCY0JzQlV/QndCQX9Ce0KLQlNCQ0JvQldCn0JXQndCY0K9f0JrQm9Ce0J1cbiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6NTUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQdXNoaW5nIGNoYW5nZXMgdG8gJXMiCi1tc2dzdHIgItCY0LfRgtC70LDRgdC60LLQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0LrRitC8IOKAniVz4oCcIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo5MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1pcnJvcmluZyB0byAlcyIKLW1zZ3N0ciAi0JjQt9GC0LvQsNGB0LrQstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQviDQutGK0Lwg4oCeJXPigJwiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjExMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlB1c2hpbmcgJXMgJXMgdG8gJXMiCi1tc2dzdHIgItCY0LfRgtC70LDRgdC60LLQsNC90LUg0L3QsCAlcyDigJ4lc+KAnCDQutGK0Lwg4oCeJXPigJwiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjEzMgotbXNnaWQgIlB1c2ggQnJhbmNoZXMiCi1tc2dzdHIgItCa0LvQvtC90Lgg0LfQsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1IgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNDcKLW1zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCi1tc2dzdHIgItCa0LvQvtC90Lgt0LjQt9GC0L7Rh9C90LjRhtC4IgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjIKLW1zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgotbXNnc3RyICLQptC10LvQtdCy0L4g0YXRgNCw0L3QuNC70LjRidC1IgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyMDUKLW1zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgotbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0L/RgNC4INC/0YDQtdC90LDRgdGP0L3QtdGC0L4iCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjIwNwotbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgorIzogYnVpbHRpbi9wdXNoLmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG5vIHVwc3RyZWFtIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgc2V0IHRoZSByZW1vdGUgYXMgdXBzdHJlYW0sIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgogbXNnc3RyICIiCi0i0JjQt9GA0LjRh9C90L4g0L/RgNC10LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRiSDQutC70L7QvSAo0L3Rj9C60L7QuCDQv9GA0L7QvNC10L3QuCDQvNC+0LbQtSDQtNCwINCx0YrQtNCw0YIgIgotItC30LDQs9GD0LHQtdC90LgpIgorItCd0LUg0LUg0LfQsNC00LDQtNC10L0g0L7RgtC00LDQu9C10YfQtdC9INC60LvQvtC9LCDQutC+0LnRgtC+INGC0LXQutGD0YnQuNGP0YIg0LrQu9C+0L0g4oCeJXPigJwg0LTQsCDRgdC70LXQtNC4LlxuIgorItCX0LAg0LTQsCDQuNC30YLQu9Cw0YHQutCw0YLQtSDQu9C+0LrQsNC70L3QuNGPINC60LvQvtC9INC60YrQvCDQvtGC0LTQsNC70LXRh9C10L0g0Lgg0YHRitGJ0LXQstGA0LXQvNC10L3QvdC+INC00LAg0LfQsNC00LDQtNC10YLQtVxuIgorItCy0YLQvtGA0LjRjyDQutCw0YLQviDRgtC+0LfQuCwg0LrQvtC50YLQviDQv9GK0YDQstC40Y/RgiDRgdC70LXQtNC4LCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MjExCi1tc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCi1tc2dzdHIgItCc0LDQutGB0LjQvNCw0LvQvdCwINC60L7QvNC/0YDQtdGB0LjRjyAo0LfQsCDQsdCw0LLQvdC4INC80YDQtdC20L7QstC4INCy0YDRitC30LrQuCkiCisjOiBidWlsdGluL3B1c2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBtdWx0aXBsZSB1cHN0cmVhbSBicmFuY2hlcywgcmVmdXNpbmcgdG8gcHVzaC4iCittc2dzdHIgIiIKKyLQotC10LrRg9GJ0LjRj9GCINC60LvQvtC9IOKAniVz4oCcINGB0LvQtdC00Lgg0L3Rj9C60L7Qu9C60L4g0L7RgtC00LDQu9C10YfQtdC90Lgg0LrQu9C+0L3QsCwg0L3QtSDQvNC+0LbQtdGC0LUg0L/RgNC+0YHRgtC+INC00LAgIgorItC40LfRgtC70LDRgdC60LDRgtC1LiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MjE1Ci1tc2dpZCAiSW5jbHVkZSB0YWdzIgotbXNnc3RyICLQktC60LvRjtGH0LLQsNC90LUg0L3QsCDQtdGC0LjQutC10YLQuNGC0LUiCisjOiBidWlsdGluL3B1c2guYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKK21zZ3N0ciAiIgorItCY0LfRgtC70LDRgdC60LLQsNGC0LUg0LrRitC8INC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0LrQu9C+0L0g4oCeJXPigJwsINC60L7QudGC0L4g0L3QtSDQtSDRgdC70LXQtNC10L0g0L7RgiDRgtC10LrRg9GJ0LjRjyDQutC70L7QvSAiCisi4oCeJXPigJwuXG4iCisi0KLRgNGP0LHQstCwINC00LAg0YPQutCw0LbQtdGC0LUg0LrQvtGPINCy0LXRgNGB0LjRjyDQtNCwINGB0LUg0LjQt9GC0LvQsNGB0LrQsCwg0LfQsCDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC40Y8gIgorItC60LvQvtC9LiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MjI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogUHVzaCIKLW1zZ3N0ciAiJXMgKCVzKTog0JjQt9GC0LvQsNGB0LrQstCw0L3QtSIKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3MAorbXNnaWQgIiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisi0J3QtSDRgdGC0LUg0YPQutCw0LfQsNC70Lgg0LLQtdGA0YHQuNGPINC30LAg0L/QvtC00LDQstCw0L3QtSwg0LAg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5wdXNoLmRlZmF1bHTigJwg0LUgIgorIuKAnm5vdGhpbmfigJwgKNC90LjRidC+INCx0LXQtyDQuNC30YDQuNGH0L3QviDRg9C60LDQt9Cw0L3QsCDQstC10YDRgdC40Y8g0LTQsCDQvdC1INGB0LUg0LjQt9GC0LvQsNGB0LrQstCwKSIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjc3Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKyJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBJbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuXG4iCisiJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisi0J7QsdC90L7QstGP0LLQsNC90LXRgtC+INC1INC+0YLRhdCy0YrRgNC70LXQvdC+LCDQt9Cw0YnQvtGC0L4g0LLRitGA0YXRitGCINC90LAg0YLQtdC60YPRidC40Y8g0LLQuCDQutC70L7QvSDQtSDQv9GA0LXQtNC4INCy0YrRgNGF0LAgIgorItC90LBcbiIKKyLQvtGC0LTQsNC70LXRh9C10L3QuNGPINC60LvQvtC9LiAg0JLQvdC10YHQtdGC0LUg0L7RgtC00LDQu9C10YfQtdC90LjRgtC1INC/0YDQvtC80LXQvdC4ICjQvdCw0L/RgC4g0YEg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCAiCisicHVsbOKApuKAnCksXG4iCisi0L/RgNC10LTQuCDQvtGC0L3QvtCy0L4g0LTQsCDQuNC30YLQu9Cw0YHQutCw0YLQtSDQv9GA0L7QvNC10L3QuNGC0LUuICDQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQstC40LbRgtC1INGA0LDQt9C00LXQu9CwXG4iCisi4oCeTm90ZSBhYm91dCBmYXN0LWZvcndhcmRz4oCcINCyINGB0YLRgNCw0L3QuNGG0LDRgtCwINC+0YIg0YDRitC60L7QstC+0LTRgdGC0LLQvtGC0L4g4oCeZ2l0IHB1c2ggLS1oZWxw4oCcLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjgzCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisi0J7QsdC90L7QstGP0LLQsNC90LXRgtC+INC1INC+0YLRhdCy0YrRgNC70LXQvdC+LCDQt9Cw0YnQvtGC0L4g0LLRitGA0YXRitGCINC90LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QuNGPINC60LvQvtC9INC1INC/0YDQtdC00Lgg0LLRitGA0YXQsFxuIgorItC90LAg0L7RgtC00LDQu9C10YfQtdC90LjRjyDQutC70L7QvS4gINCf0YDQtdC80LjQvdC10YLQtSDQutGK0Lwg0LrQu9C+0L3QsCDQuCDQstC90LXRgdC10YLQtSDQvtGC0LTQsNC70LXRh9C10L3QuNGC0LUg0L/RgNC+0LzQtdC90LggIgorIijQvdCw0L/RgC5cbiIKKyLRgSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IHB1bGzigKbigJwpLCDQv9GA0LXQtNC4INC+0YLQvdC+0LLQviDQtNCwINC40LfRgtC70LDRgdC60LDRgtC1INC/0YDQvtC80LXQvdC40YLQtS4gINCX0LAg0L/QvtCy0LXRh9C1XG4iCisi0LjQvdGE0L7RgNC80LDRhtC40Y8g0L/QvtCz0LvQtdC00L3QtdGC0LUg0YDQsNC30LTQtdC70LAg4oCeTm90ZSBhYm91dCBmYXN0LWZvcndhcmRz4oCcINCyINGB0YLRgNCw0L3QuNGG0LDRgtCwINC+0YJcbiIKKyLRgNGK0LrQvtCy0L7QtNGB0YLQstC+0YLQviDigJ5naXQgcHVzaCAtLWhlbHDigJwuIgorCisjOiBidWlsdGluL3B1c2guYzoyODkKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHJlbW90ZSBjb250YWlucyB3b3JrIHRoYXQgeW91IGRvXG4iCisibm90IGhhdmUgbG9jYWxseS4gVGhpcyBpcyB1c3VhbGx5IGNhdXNlZCBieSBhbm90aGVyIHJlcG9zaXRvcnkgcHVzaGluZ1xuIgorInRvIHRoZSBzYW1lIHJlZi4gWW91IG1heSB3YW50IHRvIGZpcnN0IGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiwgJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisi0J7QsdC90L7QstGP0LLQsNC90LXRgtC+INC1INC+0YLRhdCy0YrRgNC70LXQvdC+LCDQt9Cw0YnQvtGC0L4g0YXRgNCw0L3QuNC70LjRidC10YLQviwg0LrRitC8INC60L7QtdGC0L4g0LjQt9GC0LvQsNGB0LrQstCw0YLQtSwgIgorItGB0YrQtNGK0YDQttCwXG4iCisi0L/RgNC+0LzQtdC90LgsINC60L7QuNGC0L4g0LvQuNC/0YHQstCw0YIg0LIg0LvQvtC60LDQu9C90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtS4gINCd0LDQuS3Rh9C10YHRgtCw0YLQsCDQv9GA0LjRh9C40L3QsCDQt9CwINGC0L7QstCwICIKKyLQtSxcbiIKKyLRh9C1INC90Y/QutC+0Lkg0LTRgNGD0LMg0LUg0LjQt9GC0LvQsNGB0LrQstCw0Lsg0LrRitC8INGB0YrRidC40Y8g0LrQu9C+0L0uICDQn9GK0YDQstC+INCy0L3QtdGB0LXRgtC1INC+0YLQtNCw0LvQtdGH0LXQvdC40YLQtSAiCisi0L/RgNC+0LzQtdC90LhcbiIKKyIo0L3QsNC/0YAuINGBINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgcHVsbOKApuKAnCksINC/0YDQtdC00Lgg0L7RgtC90L7QstC+INC00LAg0LjQt9GC0LvQsNGB0LrQsNGC0LUg0L/RgNC+0LzQtdC90LjRgtC1LlxuIgorItCX0LAg0L/QvtCy0LXRh9C1INC40L3RhNC+0YDQvNCw0YbQuNGPINC/0L7Qs9C70LXQtNC90LXRgtC1INGA0LDQt9C00LXQu9CwIOKAnk5vdGUgYWJvdXQgZmFzdC1mb3J3YXJkc+KAnCDQsiAiCisi0YHRgtGA0LDQvdC40YbQsNGC0LBcbiIKKyLQvtGCINGA0YrQutC+0LLQvtC00YHRgtCy0L7RgtC+IOKAnmdpdCBwdXNoIC0taGVscOKAnC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5NgorbXNnaWQgIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0YWcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlbW90ZS4iCittc2dzdHIgIiIKKyLQmNC30YLQu9Cw0YHQutCy0LDQvdC10YLQviDQtSDQvtGC0YXQstGK0YDQu9C10L3Qviwg0LfQsNGJ0L7RgtC+INCyINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAgIgorItC10YLQuNC60LXRgixcbiIKKyLQutC+0LnRgtC+INGJ0LUg0L/RgNC40L/QvtC60YDQuNC10YLQtSDRgSDQtdGC0LjQutC10YIg0L7RgiDQstCw0YjQtdGC0L4g0YXRgNCw0L3QuNC70LjRidC1LiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk5Cittc2dpZCAiIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgIiIKKyLQkdC10Lcg0LTQsCDRg9C60LDQttC10YLQtSDQvtC/0YbQuNGP0YLQsCDigJ4tLWZvcmNl4oCcLCDQvdC1INC80L7QttC1INC00LAg0L7QsdC90L7QstC40YLQtSDQvtGC0LTQsNC70LXRh9C10L1cbiIKKyLRg9C60LDQt9Cw0YLQtdC7LCDQutC+0LnRgtC+INCy0LXRh9C1INGB0L7Rh9C4INC60YrQvCDQvtCx0LXQutGCLCDQutC+0LnRgtC+INC90LUg0LUg0L/QvtC00LDQstCw0L3QtSwg0LrQsNC60YLQviDQuCDRgtC10L/RitGA0LLQsFxuIgorItC00LAg0LPQviDQv9GA0L7QvNC10L3QuNGC0LUg0LTQsCDRgdC+0YfQuCDQutGK0Lwg0L/QvtC00L7QsdC10L0g0L7QsdC10LrRgi5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgdG8gJXNcbiIKK21zZ3N0ciAi0JjQt9GC0LvQsNGB0LrQstCw0L3QtSDQutGK0Lwg4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICLRh9Cw0YHRgiDQvtGCINGD0LrQsNC30LDRgtC10LvQuNGC0LUg0L3QtSDQsdGP0YXQsCDQuNC30YLQu9Cw0YHQutCw0L3QuCDQutGK0Lwg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MgorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgItGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQzIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY0Cittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAi0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NCBidWlsdGluL3NlbmQtcGFjay5jOjE2NgorbXNnaWQgIm1pcnJvciBhbGwgcmVmcyIKK21zZ3N0ciAi0L7Qs9C70LXQtNCw0LvQvdC+INC60L7Qv9C40LUg0L3QsCDQstGB0LjRh9C60Lgg0YPQutCw0LfQsNGC0LXQu9C4IgorCisjOiBidWlsdGluL3B1c2guYzo1NDYKK21zZ2lkICJkZWxldGUgcmVmcyIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ3Cittc2dpZCAicHVzaCB0YWdzIChjYW4ndCBiZSB1c2VkIHdpdGggLS1hbGwgb3IgLS1taXJyb3IpIgorbXNnc3RyICLQuNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LAg0LXRgtC40LrQtdGC0LjRgtC1ICjQvdC10YHRitCy0LzQtdGB0YLQuNC80L4g0YEg0L7Qv9GG0LjQuNGC0LUg4oCeLS1hbGzigJwg0Lgg4oCeLS1taXJyb3LigJwpIgorCisjOiBidWlsdGluL3B1c2guYzo1NTAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjcKK21zZ2lkICJmb3JjZSB1cGRhdGVzIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L7QsdC90L7QstGP0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MiBidWlsdGluL3NlbmQtcGFjay5jOjE4MQorbXNnaWQgIjxyZWZuYW1lPjo8ZXhwZWN0PiIKK21zZ3N0ciAi0JjQnNCVX9Cd0JBf0KPQmtCQ0JfQkNCi0JXQmzrQntCn0JDQmtCS0JDQndCQX9Ch0KLQntCZ0J3QntCh0KIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MyBidWlsdGluL3NlbmQtcGFjay5jOjE4MgorbXNnaWQgInJlcXVpcmUgb2xkIHZhbHVlIG9mIHJlZiB0byBiZSBhdCB0aGlzIHZhbHVlIgorbXNnc3RyICLQo9Ca0JDQl9CQ0KLQldCb0Y/RgiDRgtGA0Y/QsdCy0LAg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+INC00LAg0LUg0YEg0YLQsNC30Lgg0J7Qp9CQ0JrQktCQ0J3QkF/QodCi0J7QmdCd0J7QodCiIgorCisjOiBidWlsdGluL3B1c2guYzo1NTYKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgItGD0L/RgNCw0LLQu9C10L3QuNC1INC90LAg0YDQtdC60YPRgNGB0LjQstC90L7RgtC+INC40LfRgtC70LDRgdC60LLQsNC90LUg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LjRgtC1IgorCisjOiBidWlsdGluL3B1c2guYzo1NTggYnVpbHRpbi9zZW5kLXBhY2suYzoxNzUKK21zZ2lkICJ1c2UgdGhpbiBwYWNrIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGB0YrQutGA0LDRgtC10L3QuCDQv9Cw0LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OSBidWlsdGluL3B1c2guYzo1NjAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjEKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYyCittc2dpZCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iCittc2dzdHIgItC/0YDQvtCz0YDQsNC80LAg0LfQsCDQv9C+0LvRg9GH0LDQstCw0L3QtdGC0L4g0L3QsCDQv9Cw0LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2MQorbXNnaWQgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvc3RhdHVzIgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDQt9CwINC60L7QvNCw0L3QtNC40YLQtSDigJ5naXQgcHVsbC9zdGF0dXPigJwiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NAorbXNnaWQgInBydW5lIGxvY2FsbHkgcmVtb3ZlZCByZWZzIgorbXNnc3RyICLQvtC60LDRgdGC0YDRj9C90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1LCDQutC+0LjRgtC+INGB0LAg0L/RgNC10LzQsNGF0L3QsNGC0Lgg0L7RgiDQu9C+0LrQsNC70L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL3B1c2guYzo1NjYKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAi0LHQtdC3INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrRg9C60LDRgtCwINC/0YDQtdC00Lgg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSAocHJlLXB1c2gpIgorCisjOiBidWlsdGluL3B1c2guYzo1NjcKK21zZ2lkICJwdXNoIG1pc3NpbmcgYnV0IHJlbGV2YW50IHRhZ3MiCittc2dzdHIgIiIKKyLQuNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LAg0LvQuNC/0YHQstCw0YnQuNGC0LUg0LIg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSwg0L3QviDRgdCy0YrRgNC30LDQvdC4INGBINGC0LXQutGD0YnQvtGC0L4gIgorItC40LfRgtC70LDRgdC60LLQsNC90LUsINC10YLQuNC60LXRgtC4IgorCisjOiBidWlsdGluL3B1c2guYzo1NzAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjkKK21zZ2lkICJHUEcgc2lnbiB0aGUgcHVzaCIKK21zZ3N0ciAi0L/QvtC00L/QuNGB0LLQsNC90LUg0L3QsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC10YLQviDRgSBHUEciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MiBidWlsdGluL3NlbmQtcGFjay5jOjE3NgorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICLQuNC30LjRgdC60LLQsNC90LUg0L3QsCDQsNGC0L7QvNCw0YDQvdC4INC+0L/QtdGA0LDRhtC40Lgg0L7RgiDQvtGC0YHRgNC10YnQvdCw0YLQsCDRgdGC0YDQsNC90LAiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU5MAorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1kZWxldGXigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINC+0L/RhtC40LjRgtC1ICDigJ4tLWFsbOKAnCwg4oCeLS1taXJyb3LigJwg0Lgg4oCeLS10YWdz4oCcIgorCisjOiBidWlsdGluL3B1c2guYzo1OTIKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1kZWxldGXigJwg0LjQt9C40YHQutCy0LAg0L/QvtC90LUg0LXQtNC40L0g0YPQutCw0LfQsNGC0LXQuyDQvdCwINCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9wdXNoLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBvc2l0b3J5ICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INGD0LrQsNC30LDQvdC+INGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9wdXNoLmM6NjEzCittc2dpZCAiIgorIk5vIGNvbmZpZ3VyZWQgcHVzaCBkZXN0aW5hdGlvbi5cbiIKKyJFaXRoZXIgc3BlY2lmeSB0aGUgVVJMIGZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBjb25maWd1cmUgYSByZW1vdGUgIgorInJlcG9zaXRvcnkgdXNpbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisiXG4iCisiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iCittc2dzdHIgIiIKKyLQndC1INC1INGD0LrQsNC30LDQvdC+INGF0YDQsNC90LjQu9C40YnQtSwg0LrRitC8INC60L7QtdGC0L4g0LTQsCDRgdC1INC40LfRgtC70LDRgdC60LLQsC5cbiIKKyLQmNC70Lgg0YPQutCw0LbQtdGC0LUg0LDQtNGA0LXRgdCwINC90LAg0LrQvtC80LDQvdC00L3QuNGPINGA0LXQtCwg0LjQu9C4INC90LDRgdGC0YDQvtC50YLQtSDQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUg0YEgIgorItC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQg0JjQnNCVINCQ0JTQoNCV0KFcbiIKKyJcbiIKKyLQuCDRgdC70LXQtCDRgtC+0LLQsCDQuNC30YLQu9Cw0YHQutCw0LnRgtC1LCDQutCw0YLQviDRg9C60LDQttC10YLQtSDQuNC80LXRgtC+INC90LAg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2gg0JjQnNCVXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYyOAorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1hbGzigJwg0Lgg4oCeLS10YWdz4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL3B1c2guYzo2MzAKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWFsbOKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0YPQutCw0LfQstCw0L3QtdGC0L4g0L3QsCDQstC10YDRgdC40Y8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzNAorbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1taXJyb3LigJwg0Lgg4oCeLS10YWdz4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL3B1c2guYzo2MzYKK21zZ2lkICItLW1pcnJvciBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLW1pcnJvcuKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0YPQutCw0LfQstCw0L3QtdGC0L4g0L3QsCDQstC10YDRgdC40Y8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzOQorbXNnaWQgIi0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLWFsbOKAnCDQuCDigJ4tLW1pcnJvcuKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9wdXNoLmM6NjQzCittc2dpZCAicHVzaCBvcHRpb25zIG11c3Qgbm90IGhhdmUgbmV3IGxpbmUgY2hhcmFjdGVycyIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg0LfQsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LUg0YLRgNGP0LHQstCwINC00LAg0YHRitC00YrRgNC20LDRgiDQt9C90LDQuiDQt9CwINC90L7QsiDRgNC10LQiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjgKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLWJhc2U+Li48b2xkLXRpcD4gPG5ldy1iYXNlPi4uPG5ldy10aXA+IgorbXNnc3RyICJnaXQgcmFuZ2UtZGlmZiBb0J7Qn9Cm0JjQr+KApl0g0KHQotCQ0KDQkF/QkdCQ0JfQkC4u0KHQotCQ0KBf0JLQoNCq0KUg0J3QntCS0JBf0JHQkNCX0JAuLtCd0J7Qkl/QktCg0KrQpSIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OQorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtdGlwPi4uLjxuZXctdGlwPiIKK21zZ3N0ciAiZ2l0IHJhbmdlLWRpZmYgW9Ce0J/QptCY0K/igKZdINCh0KLQkNCgX9CS0KDQqtClLi4u0J3QntCSX9CS0KDQqtClIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoxMAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxiYXNlPiA8b2xkLXRpcD4gPG5ldy10aXA+IgorbXNnc3RyICJnaXQgcmFuZ2UtZGlmZiBb0J7Qn9Cm0JjQr+KApl0g0JHQkNCX0JAg0KHQotCQ0KBf0JLQoNCq0KUg0J3QntCSX9CS0KDQqtClIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyMgorbXNnaWQgIlBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiCittc2dzdHIgItCf0YDQvtGG0LXQvdGCINC30LAg0L7RhtC10L3QutCwINC90LAg0YHRitC30LTQsNCy0LDQvdC10YLQviIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjQKK21zZ2lkICJ1c2Ugc2ltcGxlIGRpZmYgY29sb3JzIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINC/0YDQvtGB0YLQuCDRhtCy0LXRgtC+0LLQtSDQt9CwINGA0LDQt9C70LjQutC40YLQtSIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjYKK21zZ2lkICJub3RlcyIKK21zZ3N0ciAi0LHQtdC70LXQttC60LgiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAicGFzc2VkIHRvICdnaXQgbG9nJyIKK21zZ3N0ciAi0L/QvtC00LDQstCwINGB0LUg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGxvZ+KAnCIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NTAgYnVpbHRpbi9yYW5nZS1kaWZmLmM6NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gLi4gaW4gcmFuZ2U6ICclcyciCittc2dzdHIgIuKAni4u4oCcINC70LjQv9GB0LLQsCDQsiDQtNC40LDQv9Cw0LfQvtC90LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjY0Cittc2dpZCAic2luZ2xlIGFyZyBmb3JtYXQgbXVzdCBiZSBzeW1tZXRyaWMgcmFuZ2UiCittc2dzdHIgItCy0LDRgNC40LDQvdGC0YrRgiDRgSDQtdC00LjQvdGB0YLQstC10L0g0LDRgNCz0YPQvNC10L3RgiDQuNC30LjRgdC60LLQsCDRgdC40LzQtdGC0YDQuNGH0LXQvSDQtNC40LDQv9Cw0LfQvtC9IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo3OQorbXNnaWQgIm5lZWQgdHdvIGNvbW1pdCByYW5nZXMiCittc2dzdHIgItC90LXQvtCx0YXQvtC00LjQvNC4INGB0LAg0LTQstCwINC00LjQsNC/0LDQt9C+0L3QsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6NDEKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD3Qn9Cg0JXQpNCY0JrQoSkgIgorIlstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk90KTQkNCZ0Jtf0KFf0JjQl9Ca0JvQrtCn0JXQndCY0K9dIHwgLWldXSBbLS1uby1zcGFyc2UtIgorImNoZWNrb3V0XSBbLS1pbmRleC1vdXRwdXQ90KTQkNCZ0JtdICgtLWVtcHR5IHwg0KPQmtCQ0JfQkNCi0JXQm1/QmtCq0Jxf0JTQqtCg0JLQnl8xICIKKyJb0KPQmtCQ0JfQkNCi0JXQm1/QmtCq0Jxf0JTQqtCg0JLQnl8yIFvQo9Ca0JDQl9CQ0KLQldCbX9Ca0KrQnF/QlNCq0KDQktCeXzNdXSkiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAg0LIg0YLQvtC30Lgg0KTQkNCZ0JsiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI3Cittc2dpZCAib25seSBlbXB0eSB0aGUgaW5kZXgiCittc2dzdHIgItGB0LDQvNC+INC30LDQvdGD0LvRj9Cy0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI5Cittc2dpZCAiTWVyZ2luZyIKK21zZ3N0ciAi0KHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMxCittc2dpZCAicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIKK21zZ3N0ciAi0LTQsCDRgdC1INC40LfQstGK0YDRiNC4INC4INGB0LvQuNCy0LDQvdC1INGB0LvQtdC0INC+0YHQstC10L0g0LjQt9GH0LjRgtCw0L3QtdGC0L4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMzCittc2dpZCAiMy13YXkgbWVyZ2UgaWYgbm8gZmlsZSBsZXZlbCBtZXJnaW5nIHJlcXVpcmVkIgorbXNnc3RyICLRgtGA0L7QudC90L4g0YHQu9C40LLQsNC90LUsINCw0LrQviDQvdC1INGB0LUg0L3QsNC70LDQs9CwINC/0L7RhNCw0LnQu9C+0LLQviDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzUKK21zZ2lkICIzLXdheSBtZXJnZSBpbiBwcmVzZW5jZSBvZiBhZGRzIGFuZCByZW1vdmVzIgorbXNnc3RyICLRgtGA0L7QudC90L4g0YHQu9C40LLQsNC90LUg0L/RgNC4INC00L7QsdCw0LLRj9C90LUg0L3QsCDQtNC+0LHQsNCy0Y/QvdC1INC4INC40LfRgtGA0LjQstCw0L3QtSDQvdCwINGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgItGB0YrRidC+0YLQviDQutCw0YLQviDQvtC/0YbQuNGP0YLQsCDigJ4tbeKAnCwg0L3QviDQvdC10YHQu9C10YLQuNGC0LUg0L7QsdC10LrRgtC4INGB0LUg0L/RgNC10L3QtdCx0YDQtdCz0LLQsNGCIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOAorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAi0J/QntCU0JTQmNCg0JXQmtCi0J7QoNCY0K8vIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOQorbXNnaWQgInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICLQuNC30YfQuNGC0LDQvdC1INC90LAg0LTRitGA0LLQvtGC0L4g0LrRitC8INC40L3QtNC10LrRgdCwINC60LDRgtC+INC00LAg0LUg0LIg0YLQsNC30Lgg0J/QntCU0JTQmNCg0JXQmtCi0J7QoNCY0K8vIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0MgorbXNnaWQgInVwZGF0ZSB3b3JraW5nIHRyZWUgd2l0aCBtZXJnZSByZXN1bHQiCittc2dzdHIgItC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0YEg0YDQtdC30YPQu9GC0LDRgtCwINC+0YIg0YHQu9C40LLQsNC90LXRgtC+IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAi0KTQkNCZ0Jtf0KFf0JjQl9Ca0JvQrtCn0JXQndCY0K8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ1Cittc2dpZCAiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIgorbXNnc3RyICLQv9C+0LfQstC+0LvRj9Cy0LDQvdC1INC90LAg0L/RgNC10LfQsNC/0LjRgdCy0LDQvdC10YLQviDQvdCwINC40LfRgNC40YfQvdC+INC/0YDQtdC90LXQsdGA0LXQs9Cy0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDgKK21zZ2lkICJkb24ndCBjaGVjayB0aGUgd29ya2luZyB0cmVlIGFmdGVyIG1lcmdpbmciCittc2dzdHIgItCx0LXQtyDQv9GA0L7QstC10YDQutCwINC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0YHQu9C10LQg0YHQu9C40LLQsNC90LXRgtC+IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OQorbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAi0LHQtdC3INC+0LHQvdC+0LLRj9Cy0LDQvdC1INC4INC90LAg0LjQvdC00LXQutGB0LAsINC4INC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTUxCittc2dpZCAic2tpcCBhcHBseWluZyBzcGFyc2UgY2hlY2tvdXQgZmlsdGVyIgorbXNnc3RyICLQsdC10Lcg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0YTQuNC70YLRitGA0LAg0LfQsCDRh9Cw0YHRgtC40YfQvdC+INC40LfRgtC10LPQu9GP0L3QtSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTMKK21zZ2lkICJkZWJ1ZyB1bnBhY2stdHJlZXMiCittc2dzdHIgItC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LPRgNC10YjQutC4INCyINC60L7QvNCw0L3QtNCw0YLQsCDigJ51bnBhY2stdHJlZXPigJwiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTU3Cittc2dpZCAic3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMiCittc2dzdHIgItCx0LXQtyDQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QuCDRgdGK0L7QsdGJ0LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTg4Cittc2dpZCAiWW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgItCf0YrRgNCy0L4g0YLRgNGP0LHQstCwINC00LAg0LrQvtGA0LjQs9C40YDQsNGC0LUg0LjQvdC00LXQutGB0LAg0YHQuCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozMgorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+IHwgLS1rZWVwLWJhc2VdICIKKyJbPHVwc3RyZWFtPiBbPGJyYW5jaD5dXSIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgWy1pXSBb0J7Qn9Cm0JjQr+KApl0gWy0tZXhlYyDQmtCe0JzQkNCd0JTQkF0gWy0tb250byDQndCe0JLQkF/QkdCQ0JfQkCB8IC0ta2VlcC1iYXNlXSAiCisiW9Ca0JvQntCdX9CY0JfQotCe0KfQndCY0JogW9Ca0JvQntCdXV0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPl0gLS1yb290IFs8YnJhbmNoPl0iCittc2dzdHIgIiIKKyJnaXQgcmViYXNlIFstaV0gW9Ce0J/QptCY0K/igKZdIFstLWV4ZWMg0JrQntCc0JDQndCU0JBdIFstLW9udG8g0J3QntCS0JBf0JHQkNCX0JBdIC0tcm9vdCBb0JrQm9Ce0J1dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2Cittc2dpZCAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorbXNnc3RyICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc1IGJ1aWx0aW4vcmViYXNlLmM6MTk5IGJ1aWx0aW4vcmViYXNlLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfRgtGA0LjQstCw0L3QtSDQvdCwINGB0L/QuNGB0YrQutCwINC30LAg0LjQt9C/0YrQu9C90LXQvdC40LU6IOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAlcyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0LLRgNC10LzQtdC90L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjyDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyOTgKK21zZ2lkICJjb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAi0L3QtdCy0YrQt9C80L7QttC90L4g0LfQsNC00LDQstCw0L3QtSDQvdCwINC40L3RgtC10YDQsNC60YLQuNCy0L3QsCDRgNCw0LHQvtGC0LAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzUyCittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIHRvZG8gbGlzdCIKK21zZ3N0ciAi0YTQsNC50LvRitGCINGBINC60L7QvNCw0L3QtNC40YLQtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQs9C10L3QtdGA0LjRgNCwIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM5MQorbXNnaWQgImEgYmFzZSBjb21taXQgbXVzdCBiZSBwcm92aWRlZCB3aXRoIC0tdXBzdHJlYW0gb3IgLS1vbnRvIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLXVwc3RyZWFt4oCcINC4IOKAni0tb250b+KAnCDQuNC30LjRgdC60LLQsNGCINCx0LDQt9C+0LLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ2MQorbXNnaWQgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSBb0J7Qn9Cm0JjQr+KApl0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc0IGJ1aWx0aW4vcmViYXNlLmM6MTU1MAorbXNnaWQgIihERVBSRUNBVEVEKSBrZWVwIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIijQntCh0KLQkNCg0K/Qm9CeKSDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQv9GA0LDQt9C90LjRgtC1INC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzggYnVpbHRpbi9yZXZlcnQuYzoxMjgKK21zZ2lkICJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgItC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDQv9GA0LDQt9C90Lgg0YHRitC+0LHRidC10L3QuNGPINC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4MAorbXNnaWQgInJlYmFzZSBtZXJnZSBjb21taXRzIgorbXNnc3RyICLQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDRgdGK0YEg0YHQu9C40LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODIKK21zZ2lkICJrZWVwIG9yaWdpbmFsIGJyYW5jaCBwb2ludHMgb2YgY291c2lucyIKK21zZ3N0ciAiIgorItC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QuNGC0LUg0YLQvtGH0LrQuCDQvdCwINGA0LDQt9C60LvQvtC90Y/QstCw0L3QtSDQvdCwINGB0LXRgdGC0YDQuNC90YHQutC40YLQtSDQutC70L7QvdC4IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NAorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgItC/0YDQtdC80LXRgdGC0LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwLCDQutC+0LjRgtC+INC30LDQv9C+0YfQstCw0YIg0YHRitGBIOKAnnNxdWFzaCHigJwv4oCcZml4dXAh4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NQorbXNnaWQgInNpZ24gY29tbWl0cyIKK21zZ3N0ciAi0L/QvtC00L/QuNGB0LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NyBidWlsdGluL3JlYmFzZS5jOjE0OTAKK21zZ2lkICJkaXNwbGF5IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0LDRgtC40YHRgtC40LrQsCDRgSDQv9GA0L7QvNC10L3QuNGC0LUg0LIg0YHQu9C10LTQtdC90LjRjyDQutC70L7QvSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODkKK21zZ2lkICJjb250aW51ZSByZWJhc2UiCittc2dzdHIgItC/0YDQvtC00YrQu9C20LDQstCw0L3QtSDQvdCwINC/0YDQtdCx0LDQt9C40YDQsNC90LXRgtC+IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MQorbXNnaWQgInNraXAgY29tbWl0IgorbXNnc3RyICLQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkyCittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICLRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0YHQv9C40YHRitC60LAg0YEg0LrQvtC80LDQvdC00Lgg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTQKK21zZ2lkICJzaG93IHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgtC10LrRg9GJ0LDRgtCwINC60YDRitC/0LrQsCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTcKK21zZ2lkICJzaG9ydGVuIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAi0YHRitC60YDQsNGC0LXQvdC4INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0Lgg0LIg0YHQv9C40YHRitC60LAg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTkKK21zZ2lkICJleHBhbmQgY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICLQv9GK0LvQvdC4INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0Lgg0LIg0YHQv9C40YHRitC60LAg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDEKK21zZ2lkICJjaGVjayB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICLQv9GA0L7QstC10YDQutCwINC90LAg0YHQv9C40YHRitC60LAg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDMKK21zZ2lkICJyZWFycmFuZ2UgZml4dXAvc3F1YXNoIGxpbmVzIgorbXNnc3RyICIiCisi0L/RgNC10L/QvtC00YDQtdC20LTQsNC90LUg0L3QsCDRgNC10LTQvtCy0LXRgtC1INC30LAg0LLQutCw0YDQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQsiAiCisi0L/RgNC10LTRhdC+0LTQvdC40YLQtSDQuNC8INGB0YrRgSDQuCDQsdC10Lcg0YHQvNC10L3QuCDQvdCwINGB0YrQvtCx0YnQtdC90LjQtdGC0L4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA1Cittc2dpZCAiaW5zZXJ0IGV4ZWMgY29tbWFuZHMgaW4gdG9kbyBsaXN0IgorbXNnc3RyICLQstC80YrQutCy0LDQvdC1INC90LAg0LrQvtC80LDQvdC00LjRgtC1INC30LAg0LjQt9C/0YrQu9C90LXQvdC40LUg0LIg0YHQv9C40YHRitC60LAg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDYKK21zZ2lkICJvbnRvIgorbXNnc3RyICLQstGK0YDRhdGDIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwOQorbXNnaWQgInJlc3RyaWN0LXJldmlzaW9uIgorbXNnc3RyICLQvtCz0YDQsNC90LjRh9C10L3QsCDQstC10YDRgdC40Y8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA5Cittc2dpZCAicmVzdHJpY3QgcmV2aXNpb24iCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LXQvdCwINCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTEKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtSwg0LIg0LrQvtC10YLQviDQtNGA0YPQs9C40YLQtSDQtNCwINGB0LUg0LLQutCw0YDQsNGCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxMgorbXNnaWQgInNxdWFzaCBvbnRvIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC1LCDQsiDQutC+0LXRgtC+INC00YDRg9Cz0LjRgtC1INC00LAg0YHQtSDQstC60LDRgNCw0YIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE0Cittc2dpZCAidGhlIHVwc3RyZWFtIGNvbW1pdCIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtSDQvdCwINC40LfRgtC+0YfQvdC40LrQsCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJoZWFkLW5hbWUiCittc2dzdHIgItC40LzQtSDQvdCwINCy0YrRgNGF0LAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE2Cittc2dpZCAiaGVhZCBuYW1lIgorbXNnc3RyICLQuNC80LUg0L3QsCDQstGK0YDRhdCwIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMQorbXNnaWQgInJlYmFzZSBzdHJhdGVneSIKK21zZ3N0ciAi0YHRgtGA0LDRgtC10LPQuNGPINC90LAg0L/RgNC10LHQsNC30LjRgNCw0L3QtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjIKK21zZ2lkICJzdHJhdGVneS1vcHRzIgorbXNnc3RyICLQvtC/0YbQuNC4INC90LAg0YHRgtGA0LDRgtC10LPQuNGP0YLQsCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjMKK21zZ2lkICJzdHJhdGVneSBvcHRpb25zIgorbXNnc3RyICLQvtC/0YbQuNC4INC90LAg0YHRgtGA0LDRgtC10LPQuNGP0YLQsCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjQKK21zZ2lkICJzd2l0Y2gtdG8iCittc2dzdHIgItC/0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNQorbXNnaWQgInRoZSBicmFuY2ggb3IgY29tbWl0IHRvIGNoZWNrb3V0IgorbXNnc3RyICLQutC70L7QvdGK0YIsINC60YrQvCDQutC+0LnRgtC+INC00LAg0YHQtSDQv9GA0LXQvNC40L3QtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjYKK21zZ2lkICJvbnRvLW5hbWUiCittc2dzdHIgItC40LzQtSDQvdCwINCx0LDQt9CwIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNgorbXNnaWQgIm9udG8gbmFtZSIKK21zZ3N0ciAi0LjQvNC1INC90LAg0LHQsNC30LAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI3Cittc2dpZCAiY21kIgorbXNnc3RyICLQutC+0LzQsNC90LTQsCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjcKK21zZ2lkICJ0aGUgY29tbWFuZCB0byBydW4iCittc2dzdHIgItC60L7QvNCw0L3QtNCwINC30LAg0LjQt9C/0YrQu9C90LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTMwIGJ1aWx0aW4vcmViYXNlLmM6MTU4NAorbXNnaWQgImF1dG9tYXRpY2FsbHkgcmUtc2NoZWR1bGUgYW55IGBleGVjYCB0aGF0IGZhaWxzIgorbXNnc3RyICIiCisi0LDQstGC0L7QvNCw0YLQuNGH0L3QviDQv9C+0LTQsNCy0LDQvdC1INC30LAg0L/QvtCy0YLQvtGA0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QvNCw0L3QtNC40YLQtSDQt9Cw0LLRitGA0YjQuNC70Lgg0YEg0L3QtdGD0YHQv9C10YUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTQ2Cittc2dpZCAiLS1bbm8tXXJlYmFzZS1jb3VzaW5zIGhhcyBubyBlZmZlY3Qgd2l0aG91dCAtLXJlYmFzZS1tZXJnZXMiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tW25vLV1yZWJhc2UtY291c2luc+KAnCDQuNC30LjRgdC60LLQsNGCINC+0L/RhtC40Y/RgtCwIOKAni0tcmViYXNlLW1lcmdlc+KAnCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICLigJ4lc+KAnCDQuNC30LjRgdC60LLQsCDQuNC90YLQtdGA0LDQutGC0LjQstC90L4g0L/RgNC10LHQsNC30LjRgNCw0L3QtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCAnb250byc6ICclcyciCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQtdC80LjQvdC1INC60YrQvCDQvdC+0LLQsNGC0LAg0LHQsNC30LAsINC30LDQtNCw0LTQtdC90LAg0YEg4oCeb250b+KAnDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjI3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3JpZy1oZWFkOiAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRg9C60LDQt9Cw0YLQtdC7INC60YrQvCDQv9GK0YDQstC+0L3QsNGH0LDQu9C10L0g0LLRgNGK0YUg4oCeb3JpZy1oZWFk4oCcOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgaW52YWxpZCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIg0L3QsCDigJ5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZeKAnCDRgdC1INC/0YDQtdGB0LrQsNGH0LA6IOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjcyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICLQn9GK0YLRj9GCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QsNC30LXQvSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo4NTMKK21zZ2lkICJjb3VsZCBub3QgZGV0ZXJtaW5lIEhFQUQgcmV2aXNpb24iCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0L/RgNC10LTQtdC70Lgg0LrRitC8INC60LDQutCy0L4g0LTQsCDRgdC+0YfQuCDRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjk3NiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEKK21zZ2lkICIiCisiUmVzb2x2ZSBhbGwgY29uZmxpY3RzIG1hbnVhbGx5LCBtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgd2l0aFxuIgorIlwiZ2l0IGFkZC9ybSA8Y29uZmxpY3RlZF9maWxlcz5cIiwgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJZb3UgY2FuIGluc3RlYWQgc2tpcCB0aGlzIGNvbW1pdDogcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIi5cbiIKKyJUbyBhYm9ydCBhbmQgZ2V0IGJhY2sgdG8gdGhlIHN0YXRlIGJlZm9yZSBcImdpdCByZWJhc2VcIiwgcnVuIFwiZ2l0IHJlYmFzZSAtLSIKKyJhYm9ydFwiLiIKK21zZ3N0ciAiIgorItCh0LvQtdC0INC60L7RgNC40LPQuNGA0LDQvdC10YLQviDQvdCwINC60L7QvdGE0LvQuNC60YLQuNGC0LUg0L7RgtCx0LXQu9C10LbQtdGC0LUg0YDQtdGI0LDQstCw0L3QtdGC0L4g0LjQvCDRh9GA0LXQtzpcbiIKKyLigJ5naXQgYWRkL3JtINCk0JDQmdCbX9ChX9Ca0J7QndCk0JvQmNCa0KLigKbigJwg0Lgg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCByZWJhc2UgLS1jb250aW51ZeKAnC5cbiIKKyLQkNC60L4g0L/RgNC10LTQv9C+0YfQuNGC0LDRgtC1INC00LAg0L/RgNC10YHQutC+0YfQuNGC0LUg0YLQsNC30Lgg0LrRgNGK0L/QutCwLCDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJlYmFzZSAtLXNraXDigJwuXG4iCisi0JfQsCDQtNCwINC+0YLQutCw0LbQtdGC0LUg0L/RgNC10LHQsNC30LjRgNCw0L3QtdGC0L4g0Lgg0LTQsCDRgdC1INCy0YrRgNC90LXRgtC1INC60YrQvCDQv9GK0YDQstC+0L3QsNGH0LDQu9C90L7RgtC+INGB0YrRgdGC0L7Rj9C90LjQtSxcbiIKKyLQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJlYmFzZSAtLWFib3J04oCcLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJnaXQgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgcHJlcGFyaW5nIHRoZSBwYXRjaGVzIHRvIHJlcGxheVxuIgorInRoZXNlIHJldmlzaW9uczpcbiIKKyJcbiIKKyIgICAgJXNcbiIKKyJcbiIKKyJBcyBhIHJlc3VsdCwgZ2l0IGNhbm5vdCByZWJhc2UgdGhlbS4iCittc2dzdHIgIiIKKyJcbiIKKyLQk9GA0LXRiNC60LAg0L/RgNC4INC/0YDQuNCz0L7RgtCy0Y/QvdC10YLQviDQvdCwINC60YDRitC/0LrQuNGC0LUg0LfQsCDQv9GA0LjQu9Cw0LPQsNC90LXRgtC+INC90LAg0YHQu9C10LTQvdC40YLQtSDQstC10YDRgdC40Lg6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisi0JIg0YDQtdC30YPQu9GC0LDRgiDRgtC1INC90LUg0LzQvtCz0LDRgiDQtNCwINGB0LUg0L/RgNC10LHQsNC30LjRgNCw0YIuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVucmVjb2duaXplZCBlbXB0eSB0eXBlICclcyc7IHZhbGlkIHZhbHVlcyBhcmUgXCJkcm9wXCIsIFwia2VlcFwiLCBhbmQgXCJhc2siCisiXCIuIgorbXNnc3RyICIiCisi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnDog0LLQsNGA0LjQsNC90YLQuNGC0LUg0YHQsCDigJ5kcm9w4oCcICjQv9GA0LXRgdC60LDRh9Cw0L3QtSksICIKKyLigJ5rZWVw4oCcICjQt9Cw0L/QsNC30LLQsNC90LUpINC4IOKAnmFza+KAnCAo0L/QuNGC0LDQvdC1KSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlc1xuIgorIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC5cbiIKKyJTZWUgZ2l0LXJlYmFzZSgxKSBmb3IgZGV0YWlscy5cbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAnPGJyYW5jaD4nXG4iCisiXG4iCittc2dzdHIgIiIKKyIlc1xuIgorItCj0LrQsNC20LXRgtC1INCy0YrRgNGF0YMg0LrQvtC5INC60LvQvtC9INC40YHQutCw0YLQtSDQtNCwINC/0YDQtdCx0LDQt9C40YDQsNGC0LUuXG4iCisi0J/QvtCz0LvQtdC00L3QtdGC0LUg4oCeZ2l0LXJlYmFzZSgxKeKAnFxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlINCa0JvQntCdXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMvPGJyYW5jaD4gJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorItCQ0LrQviDQuNGB0LrQsNGC0LUg0LTQsCDQt9Cw0LTQsNC00LXRgtC1INC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0YHQu9C10LTQtdC9INC60LvQvtC9LCDQvNC+0LbQtdGC0LUg0LTQsCDQvdCw0L/RgNCw0LLQuNGC0LUg0YLQvtCy0LAg0YEgIgorItC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy/QmtCb0J7QnSAlc1xuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDcKK21zZ2lkICJleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICLQutC+0LzQsNC90LTQuNGC0LUg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtSDQvdC1INC80L7QttC1INC00LAg0YHRitC00YrRgNC20LDRgiDQvdC+0LLQuCDRgNC10LTQvtCy0LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MQorbXNnaWQgImVtcHR5IGV4ZWMgY29tbWFuZCIKK21zZ3N0ciAi0L/RgNCw0LfQvdCwINC60L7QvNCw0L3QtNCwINC30LAg0LjQt9C/0YrQu9C90LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MQorbXNnaWQgInJlYmFzZSBvbnRvIGdpdmVuIGJyYW5jaCBpbnN0ZWFkIG9mIHVwc3RyZWFtIgorbXNnc3RyICLQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INCy0YrRgNGF0YMg0LfQsNC00LDQtNC10L3QuNGPLCDQsCDQvdC1INGB0LvQtdC00LXQvdC40Y8g0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MworbXNnaWQgInVzZSB0aGUgbWVyZ2UtYmFzZSBvZiB1cHN0cmVhbSBhbmQgYnJhbmNoIGFzIHRoZSBjdXJyZW50IGJhc2UiCittc2dzdHIgItC30LAg0YLQtdC60YPRidCwINCx0LDQt9CwINC00LAg0YHQtSDQv9C+0LvQt9Cy0LAg0LHQsNC30LDRgtCwINC30LAg0YHQu9C40LLQsNC90LUg0L3QsCDQutC70L7QvdCwINC4INGB0LvQtdC00LXQvdC+0YLQviIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg1Cittc2dpZCAiYWxsb3cgcHJlLXJlYmFzZSBob29rIHRvIHJ1biIKK21zZ3N0ciAi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINC60YPQutCw0YLQsCDQv9GA0LXQtNC4INC/0YDQtdCx0LDQt9C40YDQsNC90LUg0LTQsCDRgdC1INC40LfQv9GK0LvQvdC4IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODcKK21zZ2lkICJiZSBxdWlldC4gaW1wbGllcyAtLW5vLXN0YXQiCittc2dzdHIgItCx0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjy4gINCS0LrQu9GO0YfQstCwINC+0L/RhtC40Y/RgtCwIOKAni0tbm8tc3RhdOKAnCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDkzCittc2dpZCAiZG8gbm90IHNob3cgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRgtCw0YLQuNGB0YLQuNC60LAg0YEg0L/RgNC+0LzQtdC90LjRgtC1INCyINGB0LvQtdC00LXQvdC40Y8g0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5NgorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnk6IGxpbmUgdG8gZWFjaCBjb21taXQiCittc2dzdHIgIiIKKyLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0YDQtdC0INC30LAg0L/QvtC00L/QuNGBIOKAnlNpZ25lZC1vZmYtYnnigJwg0LIg0YHRitC+0LHRidC10L3QuNC10YLQviDQvdCwINCy0YHRj9C60L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDk4IGJ1aWx0aW4vcmViYXNlLmM6MTUwMiBidWlsdGluL3JlYmFzZS5jOjE1MDQKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBhbSciCittc2dzdHIgItC/0L7QtNCw0LLQsCDRgdC1INC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBhbeKAnCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTA2IGJ1aWx0aW4vcmViYXNlLmM6MTUwOAorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFwcGx5JyIKK21zZ3N0ciAi0L/QvtC00LDQstCwINGB0LUg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGFwcGx54oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTAgYnVpbHRpbi9yZWJhc2UuYzoxNTEzCittc2dpZCAiY2hlcnJ5LXBpY2sgYWxsIGNvbW1pdHMsIGV2ZW4gaWYgdW5jaGFuZ2VkIgorbXNnc3RyICLQvtGC0LHQuNGA0LDQvdC1INC90LAg0LLRgdC40YfQutC4INC/0L7QtNCw0LLQsNC90LjRjyDQtNC+0YDQuCDQtNCwINC90Y/QvNCwINC/0YDQvtC80LXQvdC4IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTUKK21zZ2lkICJjb250aW51ZSIKK21zZ3N0ciAi0L/RgNC+0LTRitC70LbQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTgKK21zZ2lkICJza2lwIGN1cnJlbnQgcGF0Y2ggYW5kIGNvbnRpbnVlIgorbXNnc3RyICLQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINGC0LXQutGD0YnQsNGC0LAg0LrRgNGK0L/QutCwINC4INC/0YDQvtC00YrQu9C20LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTIwCittc2dpZCAiYWJvcnQgYW5kIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIgorbXNnc3RyICLQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUg0Lgg0LLRitC30YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QuNGPINC60LvQvtC9IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjMKK21zZ2lkICJhYm9ydCBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzIgorbXNnc3RyICLQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUg0LHQtdC3INC/0YDQvtC80Y/QvdCwINC60YrQvCDQutCw0LrQstC+INGB0L7Rh9C4IOKAnkhFQUTigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCBkdXJpbmcgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICLRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0YTQsNC50LvQsCDRgSDQutC+0LzQsNC90LTQuCDQv9GA0Lgg0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+INC/0YDQtdCx0LDQt9C40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNworbXNnaWQgInNob3cgdGhlIHBhdGNoIGZpbGUgYmVpbmcgYXBwbGllZCBvciBtZXJnZWQiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAsINC60L7Rj9GC0L4g0YHQtSDQv9GA0LjQu9Cw0LPQsCDQuNC70Lgg0YHQu9C40LLQsCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTMwCittc2dpZCAidXNlIGFwcGx5IHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICLQv9GA0Lgg0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQtNCwINGB0LUg0L/QvtC70LfQstCwINGB0YLRgNCw0YLQtdCz0LjRjyDRgSDQv9GA0LjQu9Cw0LPQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzNAorbXNnaWQgInVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICLQv9GA0Lgg0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQtNCwINGB0LUg0L/QvtC70LfQstCwINGB0YLRgNCw0YLQtdCz0LjRjyDRgdGK0YEg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzOAorbXNnaWQgImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIgorbXNnc3RyICIiCisi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINC/0L7RgtGA0LXQsdC40YLQtdC70Y8g0LTQsCDRgNC10LTQsNC60YLQuNGA0LAg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGPINC30LAg0L/RgNC10LHQsNC30LjRgNCw0L3QtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTQyCittc2dpZCAiKERFUFJFQ0FURUQpIHRyeSB0byByZWNyZWF0ZSBtZXJnZXMgaW5zdGVhZCBvZiBpZ25vcmluZyB0aGVtIgorbXNnc3RyICIo0J7QodCi0JDQoNCv0JvQnikg0L/RgNC10YHRitC30LTQsNCy0LDQvdC1INC90LAg0YHQu9C40LLQsNC90LjRj9GC0LAg0LLQvNC10YHRgtC+INC00LAg0YHQtSDQv9GA0LXRgdC60LDRh9Cw0YIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU0NworbXNnaWQgImhvdyB0byBoYW5kbGUgY29tbWl0cyB0aGF0IGJlY29tZSBlbXB0eSIKK21zZ3N0ciAi0LrQsNC6INC00LAg0YHQtSDQvtCx0YDQsNCx0L7RgtCy0LDRgiDQvtC60LDQt9Cw0LvQuNGC0LUg0YHQtSDQv9GA0LDQt9C90Lgg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NTQKK21zZ2lkICJtb3ZlIGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHNxdWFzaCEvZml4dXAhIHVuZGVyIC1pIgorbXNnc3RyICIiCisi0L/RgNC10LzQtdGB0YLQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAsINC60L7QuNGC0L4g0LfQsNC/0L7Rh9Cy0LDRgiDRgdGK0YEg4oCec3F1YXNoIeKAnC/igJxmaXh1cCHigJwg0L/RgNC4IOKAni1p4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NjAKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIgorbXNnc3RyICLQsNCy0YLQvtC80LDRgtC40YfQvdC+INGB0LrQsNGC0LDQstCw0L3QtS/Qv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDRgdC60LDRgtCw0L3QvtGC0L4g0L/RgNC10LTQuCDQuCDRgdC70LXQtCDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NjIKK21zZ2lkICJhZGQgZXhlYyBsaW5lcyBhZnRlciBlYWNoIGNvbW1pdCBvZiB0aGUgZWRpdGFibGUgbGlzdCIKK21zZ3N0ciAiIgorItC00L7QsdCw0LLRj9C90LUg0L3QsCDRgNC10LTQvtCy0LUg0YEg0LrQvtC80LDQvdC00Lgg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtSDRgdC70LXQtCDQstGB0Y/QutC+INC/0L7QtNCw0LLQsNC90LUg0LIgIgorItGA0LXQtNCw0LrRgtC40YDQsNC90LjRjyDRgdC/0LjRgdGK0LoiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2NgorbXNnaWQgImFsbG93IHJlYmFzaW5nIGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINC/0YDQtdCx0LDQt9C40YDQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y8g0YEg0L/RgNCw0LfQvdC4INGB0YrQvtCx0YnQtdC90LjRjyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTcwCittc2dpZCAidHJ5IHRvIHJlYmFzZSBtZXJnZXMgaW5zdGVhZCBvZiBza2lwcGluZyB0aGVtIgorbXNnc3RyICLQvtC/0LjRgiDQt9CwINC/0YDQtdCx0LDQt9C40YDQsNC90LUg0L3QsCDRgdC70LjQstCw0L3QuNGP0YLQsCDQstC80LXRgdGC0L4g0YLQtSDQtNCwINGB0LUg0L/RgNC10YHQutCw0YfQsNGCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzMKK21zZ2lkICJ1c2UgJ21lcmdlLWJhc2UgLS1mb3JrLXBvaW50JyB0byByZWZpbmUgdXBzdHJlYW0iCittc2dzdHIgIiIKKyLQt9CwINC00L7Rg9GC0L7Rh9C90Y/QstCw0L3QtdGC0L4g0L3QsCDRgdC70LXQtNC10L3QuNGPINC60LvQvtC9LCDQuNC30L/QvtC70LfQstCw0LnRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3NQorbXNnaWQgInVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LfQsNC00LDQtNC10L3QsNGC0LAg0YHRgtGA0LDRgtC10LPQuNGP0YLQsCDQvdCwINGB0LvQuNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzcgYnVpbHRpbi9yZXZlcnQuYzoxMTUKK21zZ2lkICJvcHRpb24iCittc2dzdHIgItC+0L/RhtC40Y8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3OAorbXNnaWQgInBhc3MgdGhlIGFyZ3VtZW50IHRocm91Z2ggdG8gdGhlIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLQsNGA0LPRg9C80LXQvdGC0YrRgiDQtNCwINGB0LUg0L/QvtC00LDQtNC1INC90LAg0YHRgtGA0LDRgtC10LPQuNGP0YLQsCDQt9CwINGB0LvQuNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1ODEKK21zZ2lkICJyZWJhc2UgYWxsIHJlYWNoYWJsZSBjb21taXRzIHVwIHRvIHRoZSByb290KHMpIgorbXNnc3RyICLQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INC90LAg0LLRgdC40YfQutC4INC00L7RgdGC0LjQttC40LzQuCDQv9C+0LTQsNCy0LDQvdC40Y8g0LTQviDQvdCw0YfQsNC70L3QvtGC0L4g0LjQvCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1OTgKK21zZ2lkICIiCisidGhlIHJlYmFzZS51c2VCdWlsdGluIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCFcbiIKKyJTZWUgaXRzIGVudHJ5IGluICdnaXQgaGVscCBjb25maWcnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorItC/0L7QtNC00YDRitC20LrQsNGC0LAg0L3QsCDigJ5yZWJhc2UudXNlQnVpbHRpbuKAnCDQtSDQv9GA0LXQvNCw0YXQvdCw0YLQsC5cbiIKKyLQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQstC40LbRgtC1IOKAnmdpdCBoZWxwIGNvbmZpZ+KAnC4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwNAorbXNnaWQgIkl0IGxvb2tzIGxpa2UgJ2dpdCBhbScgaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIgorbXNnc3RyICIiCisi0JjQt9Cz0LvQtdC20LTQsCwg0YfQtSDRgdC10LPQsCDRgdC1INC/0YDQuNC70LDQs9Cw0YIg0LrRgNGK0L/QutC4INGH0YDQtdC3INC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQtYW3igJwuICDQndC1INC80L7QttC1INC00LAgIgorItC/0YDQtdCx0LDQt9C40YDQsNGC0LUg0LIg0LzQvtC80LXQvdGC0LAuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NDUKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyBpcyBkZXByZWNhdGVkLiBVc2UgLS1yZWJhc2UtbWVyZ2VzIGluc3RlYWQuIgorbXNnc3RyICIiCisi0J7Qv9GG0LjRj9GC0LAg4oCeLS1wcmVzZXJ2ZS1tZXJnZXPigJwg0LUg0L7RgdGC0LDRgNGP0LvQsC4gINCf0L7Qu9C30LLQsNC50YLQtSDigJ4tLXJlYmFzZS1tZXJnZXPigJwg0LLQvNC10YHRgtC+ICIKKyLQvdC10Y8uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTAKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tb250byciCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0ta2VlcC1iYXNl4oCcINC4IOKAni0tb250b+KAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjUyCittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0ta2VlcC1iYXNlJyB3aXRoICctLXJvb3QnIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLWtlZXAtYmFzZeKAnCDQuCDigJ4tLXJvb3TigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1NgorbXNnaWQgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCittc2dzdHIgItCY0LfQs9C70LXQttC00LAg0LIg0LzQvtC80LXQvdGC0LAg0L3QtSDRgtC10YfQtSDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NjAKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIiIKKyLQntC/0YbQuNGP0YLQsCDigJ4tLWVkaXQtdG9kb+KAnCDQtSDQtNC+0YHRgtGK0L/QvdCwINGB0LDQvNC+INC/0L4g0LLRgNC10LzQtSDQvdCwINC40L3RgtC10YDQsNC60YLQuNCy0L3QviDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjgzCittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjk1Cittc2dpZCAiIgorIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlblxuIgorIm1hcmsgdGhlbSBhcyByZXNvbHZlZCB1c2luZyBnaXQgYWRkIgorbXNnc3RyICIiCisi0KLRgNGP0LHQstCwINC00LAg0YDQtdC00LDQutGC0LjRgNCw0YLQtSDQstGB0LjRh9C60Lgg0LrQvtC90YTQu9C40LrRgtC4INC/0YDQuCDRgdC70LjQstCw0L3QtdGC0L4uICDQodC70LXQtCDRgtC+0LLQsFxuIgorItC+0YLQsdC10LvQtdC20LXRgtC1INC60L7RgNC40LPQuNGA0LDQvdC10YLQviDQuNC8INGH0YDQtdC3INC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgYWRk4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MTQKK21zZ2lkICJjb3VsZCBub3QgZGlzY2FyZCB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICLQv9GA0L7QvNC10L3QuNGC0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQt9Cw0L3Rg9C70LXQvdC4IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1vdmUgYmFjayB0byAlcyIKK21zZ3N0ciAi0LLRgNGK0YnQsNC90LXRgtC+INC60YrQvCDigJ4lc+KAnCDQtSDQvdC10LLRitC30LzQvtC20L3QviIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAlcyBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JXNcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQlc1xuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuXG4iCittc2dzdHIgIiIKKyLQlNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAuICDQktGK0LfQvNC+0LbQvdC+INC70Lgg0LUg0LTQsCDRgdGC0LVcbiIKKyLQsiDQv9GA0L7RhtC10YEg0L3QsCDQtNGA0YPQs9C+INC/0YDQtdCx0LDQt9C40YDQsNC90LU/INCQ0LrQviDRgtC+0LLQsCDQtSDRgtCw0LrQsCwg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIiAgICAlc1xuIgorItCQ0LrQviDQvdC1INGB0YLQtSDQsiDQv9GA0L7RhtC10YEg0L3QsCDQtNGA0YPQs9C+INC/0YDQtdCx0LDQt9C40YDQsNC90LUsINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyIgICAgJXNcbiIKKyLQuCDQvtGC0L3QvtCy0L4g0LfQsNC/0L7Rh9C90LXRgtC1INC/0YDQtdCx0LDQt9C40YDQsNC90LXRgtC+LiAg0KLQtdC60YPRidC+0YLQviDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INGB0LUg0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LAsICIKKyLQt9CwXG4iCisi0LTQsCDQvdC1INC30LDQs9GD0LHQuNGC0LUg0YHQu9GD0YfQsNC50L3QviDQv9GA0L7QvNC10L3QuC5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODA2Cittc2dpZCAic3dpdGNoIGBDJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ5D4oCcINC+0YfQsNC60LLQsCDRh9C40YHQu9C+INC30LAg0LDRgNCz0YPQvNC10L3RgiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gbW9kZTogJXMiCittc2dzdHIgItCd0LXQuNC30LLQtdGB0YLQvdCwINGB0YLRgNCw0YLQtdCz0LjRjzog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg2OQorbXNnaWQgIi0tc3RyYXRlZ3kgcmVxdWlyZXMgLS1tZXJnZSBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1zdHJhdGVneeKAnCDQuNC30LjRgdC60LLQsCDQvdGP0LrQvtGPINC+0YIg0L7Qv9GG0LjQuNGC0LUg4oCeLS1tZXJnZeKAnCDQuNC70Lgg4oCeLS1pbnRlcmFjdGl2ZeKAnCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODk5Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgYXBwbHkgb3B0aW9ucyB3aXRoIG1lcmdlIG9wdGlvbnMiCittc2dzdHIgItC+0L/RhtC40LjRgtC1INC30LAg4oCeYXBwbHnigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80Lgg0YEg0L7Qv9GG0LjQuNGC0LUg0LfQsCDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcmViYXNlIGJhY2tlbmQ6ICVzIgorbXNnc3RyICLQndC10L/QvtC30L3QsNGC0LAg0YDQtdCw0LvQuNC30LDRhtC40Y8g0L3QsCDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1OiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTM3Cittc2dpZCAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIHJlcXVpcmVzIC0tZXhlYyBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVj4oCcINC40LfQuNGB0LrQstCwINC90Y/QutC+0Y8g0L7RgiDQvtC/0YbQuNC40YLQtSDigJ4tLWV4ZWPigJwg0LjQu9C4IOKAni0tIgorImludGVyYWN0aXZl4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5NTcKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmViYXNlLW1lcmdlcyciCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tcHJlc2VydmUtbWVyZ2Vz4oCcINC4IOKAni0tcmViYXNlLW1lcmdlc+KAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTYxCittc2dpZCAiIgorImVycm9yOiBjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyciCittc2dzdHIgIiIKKyLQk9Cg0JXQqNCa0JA6INC+0L/RhtC40LjRgtC1IOKAni0tcHJlc2VydmUtbWVyZ2Vz4oCcINC4IOKAni0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlY+KAnCDRgdCwICIKKyLQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk4NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGB0LvQtdC00LXQvSDQutC70L7QvTog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk5MQorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgbmV3IHJvb3QgY29tbWl0IgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQtSDRgdGK0LfQtNCw0LTQtSDQvdC+0LLQviDQvdCw0YfQsNC70L3QviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIHdpdGggYnJhbmNoIgorbXNnc3RyICLigJ4lc+KAnDog0LjQt9C40YHQutCy0LAg0YHQtSDRgtC+0YfQvdC+INC10LTQvdCwINCx0LDQt9CwINC30LAg0YHQu9C40LLQsNC90LUg0YEg0LrQu9C+0L3QsCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSIKK21zZ3N0ciAi4oCeJXPigJw6INC40LfQuNGB0LrQstCwINGB0LUg0YLQvtGH0L3QviDQtdC00L3QsCDQsdCw0LfQsCDQt9CwINC/0YDQtdCx0LDQt9C40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjAyOAorIywgYy1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdCAnJXMnIgorbXNnc3RyICLQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ4lc+KAnCDQvdC1INGB0L7Rh9C4INC60YrQvCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoL2NvbW1pdCAnJXMnIgorbXNnc3RyICLQpNCQ0KLQkNCb0J3QkCDQk9Cg0JXQqNCa0JA6INC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0LrQu9C+0L0g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA2MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVmOiAlcyIKK21zZ3N0ciAi0KLQsNC60YrQsiDRg9C60LDQt9Cw0YLQtdC7INC90Y/QvNCwOiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDczCittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCB0byBhIHJldmlzaW9uIgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC10YLQviwg0YHQvtGH0LXQvdC+INC+0YIg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQviIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTExCittc2dpZCAiQ2Fubm90IGF1dG9zdGFzaCIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHQutCw0YLQsNC1INCw0LLRgtC+0LzQsNGC0LjRh9C90L4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHN0YXNoIHJlc3BvbnNlOiAnJXMnIgorbXNnc3RyICLQndC10L7Rh9Cw0LrQstCw0L0g0YDQtdC30YPQu9GC0LDRgiDQv9GA0Lgg0YHQutCw0YLQsNCy0LDQvdC1OiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciAnJXMnIgorbXNnc3RyICLQlNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0LfQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvdCwIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICVzXG4iCittc2dzdHIgItCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0YHQutCw0YLQsNC90L46IOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyNgorbXNnaWQgImNvdWxkIG5vdCByZXNldCAtLWhhcmQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAnmdpdCByZXNldCAtLWhhcmTigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEzNQorbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgItCf0YDQvtC80LXQvdC40YLQtSDRgtGA0Y/QsdCy0LAg0LjQu9C4INC00LAg0YHQtSDQv9C+0LTQsNC00LDRgiwg0LjQu9C4INC00LAg0YHQtSDRgdC60LDRgtCw0Y/Rgi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3dpdGNoIHRvICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQvNC40L3QtSDQutGK0Lwg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE4MAorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0LUg0L3QsNC/0YrQu9C90L4g0LDQutGC0YPQsNC70LXQvS4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAlcyBpcyB1cCB0byBkYXRlLlxuIgorbXNnc3RyICLQotC10LrRg9GJ0LjRj9GCINC60LvQvtC9IOKAniVz4oCcINC1INC90LDQv9GK0LvQvdC+INCw0LrRgtGD0LDQu9C10L0uXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE5MAorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0LUg0L3QsNC/0YrQu9C90L4g0LDQutGC0YPQsNC70LXQvSDigJQg0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC/0YDQtdCx0LDQt9C40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAlcyBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLlxuIgorbXNnc3RyICLQotC10LrRg9GJ0LjRj9GCINC60LvQvtC9IOKAniVz4oCcINC1INC90LDQv9GK0LvQvdC+INCw0LrRgtGD0LDQu9C10L0g4oCUINC/0YDQuNC90YPQtNC40YLQtdC70L3QviDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1XG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjIwMAorbXNnaWQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIgorbXNnc3RyICLQmtGD0LrQsNGC0LAg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtSDQv9GA0LXQtNC4INC/0YDQtdCx0LDQt9C40YDQsNC90LUg0L7RgtGF0LLRitGA0LvQuCDQv9GA0LXQsdCw0LfQuNGA0LDQvdC10YLQvi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIHRvICVzOlxuIgorbXNnc3RyICLQn9GA0L7QvNC10L3QuNGC0LUg0LIg4oCeJXPigJw6XG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIGZyb20gJXMgdG8gJXM6XG4iCittc2dzdHIgItCf0YDQvtC80LXQvdC40YLQtSDQvtGCIOKAniVz4oCcINC60YrQvCDigJ4lc+KAnDpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLlxuIgorbXNnc3RyICIiCisi0J/RitGA0LLQviwg0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQt9Cw0L/QvtGH0LLQsCDQtNCwINGB0L7Rh9C4INC60YrQvCDQsdCw0LfQsNGC0LAsINCy0YrRgNGF0YMg0LrQvtGP0YLQviAiCisi0L/RgNC10LHQsNC30LjRgNCw0YLQteKAplxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyNDQKK21zZ2lkICJDb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC00LXQu9GdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkZWQgJXMgdG8gJXMuXG4iCittc2dzdHIgItCf0YDQtdCy0YrRgNGC0LDQvdC1INC90LAg4oCeJXPigJwg0LrRitC8IOKAniVz4oCcLlxuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjMzCittc2dpZCAiZ2l0IHJlY2VpdmUtcGFjayA8Z2l0LWRpcj4iCittc2dzdHIgImdpdCByZWNlaXZlLXBhY2sg0JTQmNCg0JXQmtCi0J7QoNCY0K9f0J3QkF9HSVQiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODIxCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnlcbiIKKyJpcyBkZW5pZWQsIGJlY2F1c2UgaXQgd2lsbCBtYWtlIHRoZSBpbmRleCBhbmQgd29yayB0cmVlIGluY29uc2lzdGVudFxuIgorIndpdGggd2hhdCB5b3UgcHVzaGVkLCBhbmQgd2lsbCByZXF1aXJlICdnaXQgcmVzZXQgLS1oYXJkJyB0byBtYXRjaFxuIgorInRoZSB3b3JrIHRyZWUgdG8gSEVBRC5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCB0aGUgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVcbiIKKyJ0byAnaWdub3JlJyBvciAnd2FybicgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IHB1c2hpbmcgaW50b1xuIgorIml0cyBjdXJyZW50IGJyYW5jaDsgaG93ZXZlciwgdGhpcyBpcyBub3QgcmVjb21tZW5kZWQgdW5sZXNzIHlvdVxuIgorImFycmFuZ2VkIHRvIHVwZGF0ZSBpdHMgd29yayB0cmVlIHRvIG1hdGNoIHdoYXQgeW91IHB1c2hlZCBpbiBzb21lXG4iCisib3RoZXIgd2F5LlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2aW91ciwgc2V0XG4iCisiJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisi0KHRgtCw0L3QtNCw0YDRgtC90L4g0L3QtSDQvNC+0LbQtSDQtNCwINC+0LHQvdC+0LLQuNGC0LUg0YLQtdC60YPRidC40Y8g0LrQu9C+0L0g0LIg0YXRgNCw0L3QuNC70LjRidC1LCDQutC+0LXRgtC+INC90LUg0LUg0LPQvtC70L4sXG4iCisi0LfQsNGJ0L7RgtC+INGC0L7QstCwINGJ0LUg0LTQvtCy0LXQtNC1INC00L4g0L3QtdGB0YrQvtGC0LLQtdGC0YHRgtCy0LjRjyDQvdCwINC40L3QtNC10LrRgdCwINC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INGBXG4iCisi0YLQvtCy0LAsINC60L7QtdGC0L4g0YHRgtC1INC40LfRgtC70LDRgdC60LDQu9C4INC4INC30LAg0LTQsCDQv9GA0LjQstC10LTQtdGC0LUg0LTRitGA0LLQvtGC0L4g0LrRitC8IOKAnkhFQUTigJwg0YnQtSDRgtGA0Y/QsdCy0LBcbiIKKyLQtNCwINC40LfQv9GK0LvQvdC40YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlc2V0IC0taGFyZFxuIgorIlxuIgorIlxuIgorItCX0LAg0LTQsCDQv9C+0LfQstC+0LvQuNGC0LUg0L/QvtC00L7QsdC90L4g0LjQt9GC0LvQsNGB0LrQstCw0L3QtSwg0LIg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDRgdC70LXQtNCy0LAg0LTQsFxuIgorItC30LDQtNCw0LTQtdGC0LUg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5yZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNo4oCcINC00LAg0LUg4oCeaWdub3Jl4oCcXG4iCisiKNC/0YDQtdC90LXQsdGA0LXQs9Cy0LDQvdC1KSDQuNC70LggIOKAnndhcm7igJwgKNGB0LDQvNC+INC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LUpLiAg0J3QtSDRgdC1INC/0YDQtdC/0L7RgNGK0YfQstCwINC00LBcbiIKKyLQv9GA0LDQstC40YLQtSDRgtC+0LLQsCwg0L7RgdCy0LXQvSDQsNC60L4g0L/QviDQtNGA0YPQsyDQvdCw0YfQuNC9INC90LUg0YHQuNC90YXRgNC+0L3QuNC30LjRgNCw0YLQtSDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDRgVxuIgorItGC0L7QstCwLCDQutC+0LXRgtC+INC40LfRgtC70LDRgdC60LLQsNGC0LUuXG4iCisiXG4iCisi0JfQsCDQtNCwINC30LDQs9C70YPRiNC40YLQtSDRgtC+0LLQsCDRgdGK0L7QsdGJ0LXQvdC40LUsINC60LDRgtC+INC30LDQv9Cw0LfQuNGC0LUg0YHRgtCw0L3QtNCw0YDRgtC90L7RgtC+INC/0L7QstC10LTQtdC90LjQtSxcbiIKKyLQt9Cw0LTQsNC50YLQtSDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnnJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2jigJwg0LTQsCDQtSDigJ5yZWZ1c2XigJwgKNC+0YLQutCw0LcpLiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4NDEKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGRlbmllZCwgYmVjYXVzZSB0aGUgbmV4dFxuIgorIidnaXQgY2xvbmUnIHdvbid0IHJlc3VsdCBpbiBhbnkgZmlsZSBjaGVja2VkIG91dCwgY2F1c2luZyBjb25mdXNpb24uXG4iCisiXG4iCisiWW91IGNhbiBzZXQgJ3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG9cbiIKKyInd2Fybicgb3IgJ2lnbm9yZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IGRlbGV0aW5nIHRoZVxuIgorImN1cnJlbnQgYnJhbmNoLCB3aXRoIG9yIHdpdGhvdXQgYSB3YXJuaW5nIG1lc3NhZ2UuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorItCh0YLQsNC90LTQsNGA0YLQvdC+INC90LUg0LzQvtC20LUg0LTQsCDQuNC30YLRgNC40LXRgtC1INGC0LXQutGD0YnQuNGPINC60LvQvtC9LCDQt9Cw0YnQvtGC0L4g0YHQu9C10LTQstCw0YnQvtGC0L4g0LrQu9C+0L3QuNGA0LDQvdC1XG4iCisi0L3QsCDRgtC10LrRg9GJ0L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDRidC1INC1INCx0LXQtyDQvdC40LrQsNC60LLQuCDRhNCw0LnQu9C+0LLQtSwg0LAg0YLQvtCy0LAg0LUg0L7QsdGK0YDQutCy0LDRidC+LlxuIgorIlxuIgorItCX0LAg0LTQsCDQvNC+0LbQtSDQtNCwINC40LfRgtGA0LjQstCw0YLQtSDRgtC10LrRg9GJ0LjRjyDQutC70L7QvSwg0LIg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDRgdC70LXQtNCy0LAg0LTQsFxuIgorItC30LDQtNCw0LTQtdGC0LUg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5yZWNlaXZlLmRlbnlEZWxldGVDdXJyZW504oCcINC00LAg0LUg4oCeaWdub3Jl4oCcXG4iCisiKNC/0YDQtdC90LXQsdGA0LXQs9Cy0LDQvdC1KSDQuNC70LggIOKAnndhcm7igJwgKNGB0LDQvNC+INC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LUpLlxuIgorIlxuIgorItCX0LAg0LTQsCDQt9Cw0LPQu9GD0YjQuNGC0LUg0YLQvtCy0LAg0YHRitC+0LHRidC10L3QuNC1LCDQt9Cw0LTQsNC50YLQtSDQvdCw0YHRgtGA0L7QudC60LDRgtCwXG4iCisi4oCecmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudOKAnCDQtNCwINC1IOKAnnJlZnVzZeKAnCAo0L7RgtC60LDQtykuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5MzgKK21zZ2lkICJxdWlldCIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NTIKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAi0KLRgNGP0LHQstCwINC00LAg0YPQutCw0LbQtdGC0LUg0LTQuNGA0LXQutGC0L7RgNC40Y8uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjE3Cittc2dpZCAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT08dGltZT5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT5dIFstLSIKKyJyZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGxdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU90JLQoNCV0JzQlV0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPdCS0KDQldCc0JVdIFstLXJld3JpdGVdICIKKyJbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGxdINCj0JrQkNCX0JDQotCV0JvigKYiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjIKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gIgorItCj0JrQkNCX0JDQotCV0JvigKYiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjUKK21zZ2lkICJnaXQgcmVmbG9nIGV4aXN0cyA8cmVmPiIKK21zZ3N0ciAiZ2l0IHJlZmxvZyBleGlzdHMg0KPQmtCQ0JfQkNCi0JXQmyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo1NjggYnVpbHRpbi9yZWZsb2cuYzo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg0LLRgNC10LzQtSIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyByZWFjaGFibGUgb2JqZWN0cy4uLiIKK21zZ3N0ciAi0J7RgtCx0LXQu9GP0LfQstCw0L3QtSDQvdCwINC00L7RgdGC0LjQttC40LzQuNGC0LUg0L7QsdC10LrRgtC44oCmIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgbm93aGVyZSEiCittc2dzdHIgIuKAniVz4oCcINC90LUg0YHQvtGH0Lgg0L3QsNC90LjQutGK0LTQtSEiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6Njk2Cittc2dpZCAibm8gcmVmbG9nIHNwZWNpZmllZCB0byBkZWxldGUiCittc2dzdHIgItC90LUg0LUg0YPQutCw0LfQsNC9INC20YPRgNC90LDQuyDRgSDQv9C+0LTQsNCy0LDQvdC40Y8g0LfQsCDQuNC30YLRgNC40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJlZmxvZzogJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0LbRg9GA0L3QsNC7INGBINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVmbG9nIGZvciAnJXMnIgorbXNnc3RyICLQu9C40L/RgdCy0LAg0LbRg9GA0L3QsNC7INGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LfQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWYgZm9ybWF0OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YTQvtGA0LzQsNGCINC90LAg0YPQutCw0LfQsNGC0LXQuzogJXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzY1Cittc2dpZCAiZ2l0IHJlZmxvZyBbIHNob3cgfCBleHBpcmUgfCBkZWxldGUgfCBleGlzdHMgXSIKK21zZ3N0ciAiZ2l0IHJlZmxvZyBbIHNob3cgfCBleHBpcmUgfCBkZWxldGUgfCBleGlzdHMgXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNworbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4Cittc2dpZCAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQg0JrQm9Ce0J1dIFstbSDQntCh0J3QntCS0JXQnV/QmtCb0J7QnV0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0g0JjQnNCVINCQ0JTQoNCV0KEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkgYnVpbHRpbi9yZW1vdGUuYzozOQorbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSDQodCi0JDQoNCeX9CY0JzQlSDQndCe0JLQnl/QmNCc0JUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjAgYnVpbHRpbi9yZW1vdGUuYzo0NAorbXNnaWQgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW1vdmUg0JjQnNCVIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIxIGJ1aWx0aW4vcmVtb3RlLmM6NDkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkINCY0JzQlSAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwg0JrQm9Ce0J0pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIyCittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0g0JjQnNCVIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzCittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dINCY0JzQlSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNAorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFso0JPQoNCj0J/QkCB8ICIKKyLQntCi0JTQkNCb0JXQp9CV0J3Qnl/QpdCg0JDQndCY0JvQmNCp0JUp4oCmXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNQorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdINCY0JzQlSDQmtCb0J7QneKApiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNiBidWlsdGluL3JlbW90ZS5jOjc1Cittc2dpZCAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSDQmNCc0JUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjcgYnVpbHRpbi9yZW1vdGUuYzo4MAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdINCY0JzQlSDQndCe0JJf0JDQlNCg0JXQoSBb0KHQotCQ0KBf0JDQlNCg0JXQoV0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjggYnVpbHRpbi9yZW1vdGUuYzo4MQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtZT4gPG5ld3VybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCDQmNCc0JUg0J3QntCSX9CQ0JTQoNCV0KEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjkgYnVpbHRpbi9yZW1vdGUuYzo4MgorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSDQmNCc0JUg0JDQlNCg0JXQoSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozNAorbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBhZGQgW9Ce0J/QptCY0K/igKZdINCY0JzQlSDQkNCU0KDQldChIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyDQmNCc0JUg0JrQm9Ce0J3igKYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTUKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkINCY0JzQlSDQmtCb0J7QneKApiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MAorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2hvdyBb0J7Qn9Cm0JjQr+KApl0g0JjQnNCVIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY1Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgW9Ce0J/QptCY0K/igKZdINCY0JzQlSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MAorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBb0J7Qn9Cm0JjQr+KApl0gW9CT0KDQo9Cf0JAgfCDQntCi0JTQkNCb0JXQp9CV0J3Qnl/QpdCg0JDQndCY0JvQmNCp0JXigKZdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICLQntCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMQorbXNnaWQgIiIKKyItLW1pcnJvciBpcyBkYW5nZXJvdXMgYW5kIGRlcHJlY2F0ZWQ7IHBsZWFzZVxuIgorIlx0IHVzZSAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoIGluc3RlYWQiCittc2dzdHIgIiIKKyLQmNC30L/QvtC70LfQstCw0L3QtdGC0L4g0YHQsNC80L4g0L3QsCDigJ4tLW1pcnJvcuKAnCDQtSDQvtC/0LDRgdC90L4uICDQktC80LXRgdGC0L4g0YLQvtCy0LBcbiIKKyLQv9C+0LvQt9Cy0LDQudGC0LUg4oCeLS1taXJyb3I9ZmV0Y2jigJwg0LjQu9C4IOKAni0tbWlycm9yPXB1c2jigJwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwIOKAni0tbWlycm9y4oCcOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjQKK21zZ2lkICJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIgorbXNnc3RyICLQvtGC0LTQsNC70LXRh9C10L3QuNGC0LUg0LrQu9C+0L3QuCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC00L7RgdGC0LDQstC10L3QuCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjYKK21zZ2lkICJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIgorbXNnc3RyICLQstC90LDRgdGP0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQtdGC0LjQutC10YLQuCDQuCDQv9GA0LjQvdCw0LTQu9C10LbQsNGJ0LjRgtC1INC40Lwg0L7QsdC10LrRgtC4INC/0YDQuCDQtNC+0YHRgtCw0LLRj9C90LUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY5Cittc2dpZCAib3IgZG8gbm90IGZldGNoIGFueSB0YWcgYXQgYWxsICgtLW5vLXRhZ3MpIgorbXNnc3RyICLQvNC+0LbQtSDQuCDQtNCwINC90LUg0YHQtSDQtNC+0YHRgtCw0LLRj9GCINC90LjQutCw0LrQstC4INC10YLQuNC60LXRgtC4ICjRh9GA0LXQtyDQvtC/0YbQuNGP0YLQsCDigJ4tLW5vLXRhZ3PigJwpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MQorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgItC60LvQvtC9L9C4INC30LAg0YHQu9C10LTQtdC90LUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcyCittc2dpZCAibWFzdGVyIGJyYW5jaCIKK21zZ3N0ciAi0L7RgdC90L7QstC10L0g0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTc0Cittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgIiIKKyLQvdCw0YHRgtGA0L7QudCy0LDQvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1LCDQvtGCINC60L7QtdGC0L4g0LTQsCDRgdC1INC40LfQtNGK0YDQv9Cy0LAg0LjQu9C4INC00L7RgdGC0LDQstGPIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NgorbXNnaWQgInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiCittc2dzdHIgIiIKKyLQvdGP0LzQsCDRgdC80LjRgdGK0Lsg0LTQsCDRgdC1INGD0LrQsNC30LLQsCDQvtGB0L3QvtCy0LXQvSDQutC70L7QvSDQv9GA0Lgg0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tLW1pcnJvcuKAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODgKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICIiCisi0YPQutCw0LfQstCw0L3QtdGC0L4g0L3QsCDRgdC70LXQtNC10L3QuCDQutC70L7QvdC4INC1INGB0LzQuNGB0LvQtdC90L4g0YHQsNC80L4g0LfQsCDQvtGC0LTQsNC70LXRh9C10L3QuCDRhdGA0LDQvdC40LvQuNGJ0LAsINC+0YIgIgorItC60L7QuNGC0L4g0YHQtSDQtNC+0YHRgtCw0LLRjyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTUgYnVpbHRpbi9yZW1vdGUuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1INGBINC40LzQtSDigJ4lc+KAnC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk5IGJ1aWx0aW4vcmVtb3RlLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIuKAniVz4oCcINC1INC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQt9CwINC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICLQntGB0L3QvtCy0L3QuNGP0YIg0LrQu9C+0L0g4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC90LDRgdGC0YDQvtC10L0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICLQntCx0LXQutGC0LjRgtC1INC30LAg0LTQvtGB0YLQsNCy0Y/QvdC1INC30LAg0YPQutCw0LfQsNGC0LXQu9GPIOKAniVz4oCcINC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0L/QvtC70YPRh9C10L3QuCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NTMgYnVpbHRpbi9yZW1vdGUuYzo0NjEKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICIo0YHRitCy0L/QsNC00LDRidC4KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NjUKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAiKNC30LAg0LjQt9GC0YDQuNCy0LDQvdC1KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0LTQsNC00LUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJXMgY29uZmlndXJhdGlvbiByZW1vdGUucHVzaERlZmF1bHQgaW46XG4iCisiXHQlczolZFxuIgorIm5vdyBuYW1lcyB0aGUgbm9uLWV4aXN0ZW50IHJlbW90ZSAnJXMnIgorbXNnc3RyICIiCisi0J3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5yZW1vdGUucHVzaERlZmF1bHTigJwg0YEg0L7QsdGF0LLQsNGCIOKAniVz4oCcINCyOlxuIgorIiAgICAlczolZFxuIgorItC40LfQv9C+0LvQt9Cy0LAg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1LCDQutC+0LXRgtC+INCy0LXRh9C1INC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LA6IOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY4OSBidWlsdGluL3JlbW90ZS5jOjgzMiBidWlsdGluL3JlbW90ZS5jOjk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZTogJyVzJyIKK21zZ3N0ciAi0J3Rj9C80LAg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1INC90LAg0LjQvNC1IOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVuYW1lIGNvbmZpZyBzZWN0aW9uICclcycgdG8gJyVzJyIKK21zZ3N0ciAi0KDQsNC30LTQtdC70YrRgiDigJ4lc+KAnCDQsiDQvdCw0YHRgtGA0L7QudC60LjRgtC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9INC90LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorItCd0LXRgdGC0LDQvdC00LDRgNGC0L3QuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4INC30LAg0LTQvtGB0YLQsNCy0Y/QvdC1INC90Y/QvNCwINC00LAg0LHRitC00LDRgiDQvtCx0L3QvtCy0LXQvdC4XG4iCisiICAgICVzXG4iCisiICDQn9GA0L7QvNC10L3QtdGC0LUg0L3QsNGB0YLRgNC+0LnQutC40YLQtSDRgNGK0YfQvdC+LCDQsNC60L4g0LUg0L3QtdC+0LHRhdC+0LTQuNC80L4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjc2NgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjg3NgorbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICIiCisi0JHQtdC70LXQttC60LA6INCa0LvQvtC9INC40LfQstGK0L0g0LnQtdGA0LDRgNGF0LjRj9GC0LAg4oCecmVmcy9yZW1vdGVzL+KAnCDQvdC1INCx0LUg0LjQt9GC0YDQuNGCLlxuIgorItCY0LfRgtGA0LjQudGC0LUg0LPQviDRh9GA0LXQtyDQutC+0LzQsNC90LTQsNGC0LA6IgorbXNnc3RyWzFdICIiCisi0JHQtdC70LXQttC60LA6INCd0Y/QutC+0LvQutC+INC60LvQvtC90LAg0LjQt9Cy0YrQvSDQudC10YDQsNGA0YXQuNGP0YLQsCDigJ5yZWZzL3JlbW90ZXMv4oCcINC90LUg0LHRj9GF0LAg0LjQt9GC0YDQuNGC0LguXG4iCisi0JjQt9GC0YDQuNC50YLQtSDQs9C4INGH0YDQtdC3INC60L7QvNCw0L3QtNCw0YLQsDoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAi0KDQsNC30LTQtdC70YrRgiDigJ4lc+KAnCDQsiDQvdCw0YHRgtGA0L7QudC60LjRgtC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIKK21zZ3N0ciAiINC90L7QsiAo0YHQu9C10LTQstCw0YnQvtGC0L4g0LTQvtGB0YLQsNCy0Y/QvdC1INGJ0LUg0LPQviDRgNCw0LfQv9C+0LvQvtC20Lgg0LIg4oCecmVtb3Rlcy8lc+KAnCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTk2Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiDRgdC70LXQtNC10L0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTk4Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiDRgdGC0LDRgCAo0LjQt9GC0YDQuNC50YLQtSDRh9GA0LXQtyDigJ5naXQgcmVtb3RlIHBydW5l4oCcKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDAwCittc2dpZCAiID8/PyIKK21zZ3N0ciAiINC90LXRj9GB0L3QviDRgdGK0YHRgtC+0Y/QvdC40LUiCisKKyMgQ0hFQ0sKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgIiIKKyLQvdC10L/RgNCw0LLQuNC70LXQvSDQutC70L7QvSDQt9CwINGB0LvQuNCy0LDQvdC1IOKAniVz4oCcLiAg0J3QtdCy0YrQt9C80L7QttC90L4g0LUg0LTQsCDQv9GA0LXQsdCw0LfQuNGA0LDRgtC1INCy0YrRgNGF0YMg0L/QvtCy0LXRh9C1ICIKKyLQvtGCIDEg0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgb250byByZW1vdGUgJXMiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QviDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INCy0YrRgNGF0YMg0L7RgtC00LDQu9C10YfQtdC90LjRjyDQutC70L7QvSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSAod2l0aCBtZXJnZXMpIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICLQuNC90YLQtdGA0LDQutGC0LjQstC90L4g0L/RgNC10LHQsNC30LjRgNCw0L3QtSAo0YHRitGBINGB0LvQuNCy0LDQvdC40Y8pINCy0YrRgNGF0YMg0L7RgtC00LDQu9C10YfQtdC90LjRjyDQutC70L7QvSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgItC/0YDQtdCx0LDQt9C40YDQsNC90LUg0LLRitGA0YXRgyDQvtGC0LTQsNC70LXRh9C10L3QuNGPINC60LvQvtC9IOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiINGB0LvQuNCy0LDQvdC1INGBINC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0LrQu9C+0L0g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgItGB0LvQuNCy0LDQvdC1INGBINC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0LrQu9C+0L0g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlLSpzICAgIGFuZCB3aXRoIHJlbW90ZSAlc1xuIgorbXNnc3RyICIlLSpzICAgINC4INGBINC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0LrQu9C+0L0g4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTA4Cittc2dpZCAiY3JlYXRlIgorbXNnc3RyICLRgdGK0LfQtNCw0LTQtdC9IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTEKK21zZ2lkICJkZWxldGUiCittc2dzdHIgItC40LfRgtGA0LjRgiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE1Cittc2dpZCAidXAgdG8gZGF0ZSIKK21zZ3N0ciAi0LDQutGC0YPQsNC70LXQvSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE4Cittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAi0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQtdCy0YrRgNGC0LgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyMQorbXNnaWQgImxvY2FsIG91dCBvZiBkYXRlIgorbXNnc3RyICLQu9C+0LrQsNC70L3QuNGP0YIg0LUg0LjQt9C+0YHRgtCw0L3QsNC7IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMg0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC40LfRgtC70LDRgdC60LLQsCDQutGK0LwgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMg0LjQt9GC0LvQsNGB0LrQstCwINC60YrQvCAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzINC/0YDQuNC90YPQtNC40YLQtdC70L3QviDQuNC30YLQu9Cw0YHQutCy0LAg0LrRitC8ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyDQuNC30YLQu9Cw0YHQutCy0LAg0LrRitC8ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDYKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAi0LHQtdC3INC30LDRj9Cy0LrQuCDQutGK0Lwg0L7RgtC00LDQu9C10YfQtdC90LjRgtC1INGF0YDQsNC90LjQu9C40YnQsCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICLil48g0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1IOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgINCQ0LTRgNC10YEg0LfQsCDQtNC+0YHRgtCw0LLRj9C90LU6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzUgYnVpbHRpbi9yZW1vdGUuYzoxMjUxIGJ1aWx0aW4vcmVtb3RlLmM6MTM5MAorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIo0LHQtdC3INCw0LTRgNC10YEpIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uICc6JyBzaG91bGQgYWxpZ24KKyMuIHdpdGggdGhlIG9uZSBpbiAiIEZldGNoIFVSTDogJXMiCisjLiB0cmFuc2xhdGlvbi4KKyMuCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDkgYnVpbHRpbi9yZW1vdGUuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUHVzaCAgVVJMOiAlcyIKK21zZ3N0ciAiICDQkNC00YDQtdGBINC30LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MyBidWlsdGluL3JlbW90ZS5jOjEyNTUgYnVpbHRpbi9yZW1vdGUuYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIgINC60LvQvtC9INGB0L7Rh9C10L0g0L7RgiBIRUFEOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjUzCittc2dpZCAiKG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiKNCx0LXQtyDQv9GA0L7QstC10YDQutCwKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU1Cittc2dpZCAiKHVua25vd24pIgorbXNnc3RyICIo0L3QtdC/0L7Qt9C90LDRgikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIiCisiICDQutC70L7QvdGK0YIg0YHQvtGH0LXQvSDQvtGCIEhFQUQgKNC60LvQvtC90YrRgiDRg9C60LDQt9Cw0L0g0LLRitCyINGE0LDQudC70LAgSEVBRCDQvtGCINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviAiCisi0YXRgNCw0L3QuNC70LjRidC1XG4iCisiICDQvdC1INC1INC10LTQvdC+0LfQvdCw0YfQtdC9INC4INC1INC90Y/QutC+0Lkg0L7RgiDRgdC70LXQtNC90LjRgtC1KTpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAg0J7RgtC00LDQu9C10YfQtdC9INC60LvQvtC9OiVzIgorbXNnc3RyWzFdICIgINCe0YLQtNCw0LvQtdGH0LXQvdC4INC60LvQvtC90Lg6JXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NCBidWlsdGluL3JlbW90ZS5jOjEzMDAKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIiAo0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdC1INCx0LUg0L/RgNC+0LLQtdGA0LXQvdC+KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgzCittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAg0JvQvtC60LDQu9C10L0g0LrQu9C+0L0g0L3QsNGB0YLRgNC+0LXQvSDQt9CwINC40LfQtNGK0YDQv9Cy0LDQvdC1INGH0YDQtdC3IOKAnmdpdCBwdWxs4oCcOiIKK21zZ3N0clsxXSAiICDQm9C+0LrQsNC70L3QuCDQutC70L7QvdC4INC90LDRgdGC0YDQvtC10L3QuCDQt9CwINC40LfQtNGK0YDQv9Cy0LDQvdC1INGH0YDQtdC3IOKAnmdpdCBwdWxs4oCcOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjkxCittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiICDQm9C+0LrQsNC70L3QuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4INGJ0LUg0LHRitC00LDRgiDQv9GA0LXQvdC10YHQtdC90Lgg0YfRgNC10Lcg4oCeIHB1c2jigJwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5NworIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICDQm9C+0LrQsNC70L3QuNGP0YIg0YPQutCw0LfQsNGC0LXQuywg0L3QsNGB0YLRgNC+0LXQvSDQt9CwIOKAnmdpdCBwdXNo4oCcJXM6IgorbXNnc3RyWzFdICIgINCb0L7QutCw0LvQvdC40YLQtSDRg9C60LDQt9Cw0YLQtdC70LgsINC90LDRgdGC0YDQvtC10L3QuCDQt9CwIOKAnmdpdCBwdXNo4oCcJXM6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMTgKK21zZ2lkICJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiCittc2dzdHIgItC30LDQtNCw0LLQsNC90LUg0L3QsCByZWZzL3JlbW90ZXMv0JjQnNCVL0hFQUQg0YHQv9C+0YDQtdC0INC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyMAorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQvdCwIHJlZnMvcmVtb3Rlcy/QmNCc0JUvSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzM1Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YPRgdGC0LDQvdC+0LLQuCDQvtGC0LTQsNC70LXRh9C10L3QuNGP0YIg0LLRgNGK0YUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMzNworbXNnaWQgIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6IgorbXNnc3RyICIiCisi0JzQvdC+0LbQtdGB0YLQstC+INC60LvQvtC90Lgg0YEg0LLRitGA0YXQvtCy0LUuICDQmNC30LHQtdGA0LXRgtC1INC40LfRgNC40YfQvdC+INC90Y/QutC+0Lkg0L7RgiDRgtGP0YUg0YfRgNC10Lcg0LrQvtC80LDQvdC00LDRgtCwOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSDRg9C60LDQt9Cw0YLQtdC7OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L3QsNGB0YLRgNC+0LgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICLigJ4lc+KAnCDRidC1INGB0LUg0L/RgNC10LLRitGA0L3QtSDQsiDQvtCx0LXQutGCINC40LfQstGK0L0g0LrQu9C+0L3QuNGC0LUhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICLigJ4lc+KAnCDRgdC1INC/0YDQtdCy0YrRgNC90LAg0LIg0L7QsdC10LrRgiDQuNC30LLRitC9INC60LvQvtC90LjRgtC1ISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgItCe0LrQsNGB0YLRgNGP0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAi0LDQtNGA0LXRgTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQwMworIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIg4pePIFvRidC1INCx0YrQtNC1INC+0LrQsNGB0YLRgNC10L3Qvl0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQwNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiIOKXjyBb0L7QutCw0YHRgtGA0LXQvdC+XSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDUxCittc2dpZCAicHJ1bmUgcmVtb3RlcyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAi0L7QutCw0YHRgtGA0Y/QvdC1INC90LAg0L7Qs9C70LXQtNCw0LvQsNGC0LAg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QuNGC0LUg0YXRgNCw0L3QuNC70LjRidCwINGB0LvQtdC0INC00L7RgdGC0LDQstGP0L3QtSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTE0IGJ1aWx0aW4vcmVtb3RlLmM6MTU2OCBidWlsdGluL3JlbW90ZS5jOjE2MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAi0J3Rj9C80LAg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1INC90LAg0LjQvNC1IOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzAKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNworbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgItC90LUg0LUg0YPQutCw0LfQsNC90L4g0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NTQKK21zZ2lkICJxdWVyeSBwdXNoIFVSTHMgcmF0aGVyIHRoYW4gZmV0Y2ggVVJMcyIKK21zZ3N0ciAi0LfQsNC/0LjRgtCy0LDQvdC1INC60YrQvCDQsNC00YDQtdGB0LjRgtC1INC30LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSwg0LAg0L3QtSDQt9CwINC00L7RgdGC0LDQstGP0L3QtSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTU2Cittc2dpZCAicmV0dXJuIGFsbCBVUkxzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0LDQtNGA0LXRgdC4IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gVVJMcyBjb25maWd1cmVkIGZvciByZW1vdGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDQtSDQt9Cw0LTQsNC00LXQvSDQsNC00YDQtdGBINC30LAg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjEwCittc2dpZCAibWFuaXB1bGF0ZSBwdXNoIFVSTHMiCittc2dzdHIgItC/0YDQvtC80Y/QvdCwINC90LAg0LDQtNGA0LXRgdC40YLQtSDQt9CwINC40LfRgtC70LDRgdC60LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxMgorbXNnaWQgImFkZCBVUkwiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDQsNC00YDQtdGB0LgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxNAorbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0L3QsCDQsNC00YDQtdGB0LgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYyMQorbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1hZGTigJwg0Lgg4oCeLS1kZWxldGXigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9ICjRgdGC0LDRgCkg0YTQvtGA0LzQsNGCINC30LAg0LDQtNGA0LXRgTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgItCi0LDQutGK0LIg0LDQtNGA0LXRgSDQvdC1INC1INC+0YLQutGA0LjRgjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY3MAorbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAi0J3QuNC60L7QuSDQvtGCINCw0LTRgNC10YHQuNGC0LUsINC60L7QuNGC0L4g0L3QtSDRgdCwINC30LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSwg0L3Rj9C80LAg0LTQsCDRgdC1INC40LfRgtGA0LjQtSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZXBhY2sgW9Ce0J/QptCY0K/igKZdIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI4Cittc2dpZCAiIgorIkluY3JlbWVudGFsIHJlcGFja3MgYXJlIGluY29tcGF0aWJsZSB3aXRoIGJpdG1hcCBpbmRleGVzLiAgVXNlXG4iCisiLS1uby13cml0ZS1iaXRtYXAtaW5kZXggb3IgZGlzYWJsZSB0aGUgcGFjay53cml0ZWJpdG1hcHMgY29uZmlndXJhdGlvbi4iCittc2dzdHIgIiIKKyLQn9C+0YHRgtC10L/QtdC90L3QvtGC0L4g0L/RgNC10L/QsNC60LXRgtC40YDQsNC90LUg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC+INGBINC40L3QtNC10LrRgdC4INC90LAg0LHQsNC30LAg0LHQuNGC0L7QstC4INC80LDRgdC60LguXG4iCisi0J/QvtC70LfQstCw0LnRgtC1INC+0L/RhtC40Y/RgtCwIC0tbm8td3JpdGUtYml0bWFwLWluZGV4INC40LvQuCDQuNC30LrQu9GO0YfQtdGC0LUg0L3QsNGB0YLRgNC+0LnQutCw0YLQsFxuIgorIuKAnnBhY2sud3JpdGViaXRtYXBz4oCcLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTEKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICIiCisi0LrQvtC80LDQvdC00LDRgtCwIOKAnnBhY2stb2JqZWN0c+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGC0LDRgNGC0LjRgNCwINC30LAg0L/RgNC10L/QsNC60LXRgtC40YDQsNC90LXRgtC+INC90LAgIgorItCz0LDRgNCw0L3RgtC40YDQsNGJ0LjRgtC1INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMzAgYnVpbHRpbi9yZXBhY2suYzo0MTYKK21zZ2lkICJyZXBhY2s6IEV4cGVjdGluZyBmdWxsIGhleCBvYmplY3QgSUQgbGluZXMgb25seSBmcm9tIHBhY2stb2JqZWN0cy4iCittc2dzdHIgIiIKKyJyZXBhY2s6INC+0YIg4oCecGFjay1vYmplY3Rz4oCcINGB0LUg0LjQt9C40YHQutCy0LDRgiDRgNC10LTQvtCy0LUg0YHQsNC80L4g0YEg0L/RitC70L3QuCDRiNC10YHRgtC90LDQudGB0LXRgtC40YfQvdC4ICIKKyLRg9C60LDQt9Cw0YLQtdC70LguIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI1NAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICIiCisi0LrQvtC80LDQvdC00LDRgtCwIOKAnnBhY2stb2JqZWN0c+KAnCDQvdC1INC80L7QttC1INC00LAg0LfQsNCy0YrRgNGI0Lgg0LfQsCDQv9GA0LXQv9Cw0LrQtdGC0LjRgNCw0L3QtdGC0L4g0L3QsCAiCisi0LPQsNGA0LDQvdGC0LjRgNCw0YnQuNGC0LUg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5MgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICLQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQviDQsiDQv9Cw0LrQtdGCIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NAorbXNnaWQgInNhbWUgYXMgLWEsIGFuZCB0dXJuIHVucmVhY2hhYmxlIG9iamVjdHMgbG9vc2UiCittc2dzdHIgIiIKKyLRgdGK0YnQvtGC0L4g0LrQsNGC0L4g0L7Qv9GG0LjRj9GC0LAg4oCeLWHigJwuICDQlNC+0L/RitC70L3QuNGC0LXQu9C90L4g4oCUINC90LXQtNC+0YHRgtC40LbQuNC80LjRgtC1INC+0LHQtdC60YLQuCDQtNCwINGB0YLQsNC90LDRgiAiCisi0L3QtdC/0LDQutC10YLQuNGA0LDQvdC4IgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NworbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAiIgorItC/0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0L3QtdC90YPQttC90LjRgtC1INC/0LDQutC10YLQuNGA0LDQvdC4INGE0LDQudC70L7QstC1INC4INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC0iCisicHJ1bmUtcGFja2Vk4oCcIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5OQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC1INC90LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1uby1yZXVzZS1kZWx0YeKAnCDQvdCwINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQtcGFjay1vYmplY3Rz4oCcIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwMQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1vYmplY3QgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiIgorItC/0L7QtNCw0LLQsNC90LUg0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tLW5vLXJldXNlLW9iamVjdOKAnCDQvdCwINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQtcGFjay1vYmplY3Rz4oCcIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwMworbXNnaWQgImRvIG5vdCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKK21zZ3N0ciAi0LHQtdC3INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC11cGRhdGUtc2VydmVyLWluZm/igJwiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA2Cittc2dpZCAicGFzcyAtLWxvY2FsIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LUg0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tLWxvY2Fs4oCcINC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC1wYWNrLW9iamVjdHPigJwiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA4Cittc2dpZCAid3JpdGUgYml0bWFwIGluZGV4IgorbXNnc3RyICLRgdGK0LfQtNCw0LLQsNC90LUg0Lgg0LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0LjQvdC00LXQutGB0Lgg0L3QsCDQsdCw0LfQsCDQsdC40YLQvtCy0Lgg0LzQsNGB0LrQuCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTAKK21zZ2lkICJwYXNzIC0tZGVsdGEtaXNsYW5kcyB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC1INC90LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1kZWx0YS1pc2xhbmRz4oCcINC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC1wYWNrLW9iamVjdHPigJwiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzExCittc2dpZCAiYXBwcm94aWRhdGUiCittc2dzdHIgItC10LLRgNC40YHRgtC40YfQvdCwINC00LDRgtCwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMgorbXNnaWQgIndpdGggLUEsIGRvIG5vdCBsb29zZW4gb2JqZWN0cyBvbGRlciB0aGFuIHRoaXMiCittc2dzdHIgIiIKKyLQv9GA0Lgg0LrQvtC80LHQuNC90LjRgNCw0L3QtdGC0L4g0YEg0L7Qv9GG0LjRj9GC0LAg4oCeLUHigJwg4oCUINCx0LXQtyDRgNCw0LfQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdCwINC+0LHQtdC60YLQuNGC0LUg0L/QviDRgdGC0LDRgNC4INC+0YIgIgorItGC0L7QstCwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNAorbXNnaWQgIndpdGggLWEsIHJlcGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLRgSDigJ4tYeKAnCDigJQg0L/RgNC10L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDQvdC10LTQvtGB0YLQuNC20LjQvNC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE2Cittc2dpZCAic2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICLRgNCw0LfQvNC10YAg0L3QsCDQv9GA0L7Qt9C+0YDQtdGG0LAg0LfQsCDQtNC10LvRgtCwINC60L7QvNC/0YDQtdGB0LjRj9GC0LAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE3IGJ1aWx0aW4vcmVwYWNrLmM6MzIzCittc2dpZCAiYnl0ZXMiCittc2dzdHIgItCx0LDQudGC0L7QstC1IgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxOAorbXNnaWQgInNhbWUgYXMgdGhlIGFib3ZlLCBidXQgbGltaXQgbWVtb3J5IHNpemUgaW5zdGVhZCBvZiBlbnRyaWVzIGNvdW50IgorbXNnc3RyICIiCisi0YHRitGJ0L7RgtC+INC60LDRgtC+INCz0L7RgNC90LDRgtCwINC+0L/RhtC40Y8sINC90L4g0L7Qs9GA0LDQvdC40YfQtdC90LjQtdGC0L4g0LTQsCDQtSDQv9C+INGA0LDQt9C80LXRgCDQvdCwINC/0LDQvNC10YLRgtCwLCDQsCDQvdC1ICIKKyLQv9C+INCx0YDQvtGPINC90LAg0L7QsdC10LrRgtC40YLQtSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjAKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgiCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LDQstCw0L3QtSDQvdCwINC80LDQutGB0LjQvNCw0LvQvdCw0YLQsCDQtNGK0LvQsdC+0YfQuNC90LAg0L3QsCDQtNC10LvRgtCw0YLQsCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjIKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMiCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LDQstCw0L3QtSDQvdCwINC80LDQutGB0LjQvNCw0LvQvdC40Y8g0LHRgNC+0Lkg0L3QuNGI0LrQuCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjQKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIKK21zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9C10L0g0YDQsNC30LzQtdGAINC90LAg0LLRgdC10LrQuCDQv9Cw0LrQtdGCIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNgorbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICLQv9GA0LXQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdCwINC+0LHQtdC60YLQuNGC0LUg0LIg0L/QsNC60LXRgtC4INCx0LXQu9GP0LfQsNC90Lgg0YEg4oCeLmtlZXDigJwiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI4Cittc2dpZCAiZG8gbm90IHJlcGFjayB0aGlzIHBhY2siCittc2dzdHIgItCx0LXQtyDQv9GA0LXQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdCwINGC0L7Qt9C4INC/0LDQutC10YIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzM4Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBwYWNrcyBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAi0L/QsNC60LXRgtC40YLQtSDQsiDRhdGA0LDQvdC40LvQuNGJ0LUg0YEg0LLQsNC20L3QuCDQvtCx0LXQutGC0Lgg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YLRgNC40Y/RgiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozNDIKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC1BIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni0ta2VlcC11bnJlYWNoYWJsZeKAnCDQuCDigJ4tQeKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0MjUKK21zZ2lkICJOb3RoaW5nIG5ldyB0byBwYWNrLiIKK21zZ3N0ciAi0J3QuNGJ0L4g0L3QvtCy0L4g0LfQsCDQv9Cw0LrQtdGC0LjRgNCw0L3QtSIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFNvbWUgcGFja3MgaW4gdXNlIGhhdmUgYmVlbiByZW5hbWVkIGJ5XG4iCisiV0FSTklORzogcHJlZml4aW5nIG9sZC0gdG8gdGhlaXIgbmFtZSwgaW4gb3JkZXIgdG9cbiIKKyJXQVJOSU5HOiByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlXG4iCisiV0FSTklORzogZmlsZS4gIEJ1dCB0aGUgb3BlcmF0aW9uIGZhaWxlZCwgYW5kIHRoZVxuIgorIldBUk5JTkc6IGF0dGVtcHQgdG8gcmVuYW1lIHRoZW0gYmFjayB0byB0aGVpclxuIgorIldBUk5JTkc6IG9yaWdpbmFsIG5hbWVzIGFsc28gZmFpbGVkLlxuIgorIldBUk5JTkc6IFBsZWFzZSByZW5hbWUgdGhlbSBpbiAlcyBtYW51YWxseTpcbiIKK21zZ3N0ciAiIgorItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INCX0LAg0LTQsCDQsdGK0LTQsNGCINC30LDQvNC10L3QtdC90Lgg0YEg0L3QvtCy0Lgg0LLQtdGA0YHQuNC4LCDQvdGP0LrQvtC4XG4iCisi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0L/QsNC60LXRgtC90Lgg0YTQsNC50LvQvtCy0LUg0LHRj9GF0LAg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC4LCDQutCw0YLQviDQutGK0LxcbiIKKyLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQuNC80LXQvdCw0YLQsCDQuNC8INCx0LUg0LTQvtCx0LDQstC10L0g0L/RgNC10YTQuNC60YHRitGCIOKAnm9sZC3igJwuXG4iCisi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0KLQsNC30Lgg0L7Qv9C10YDQsNGG0LjRjyDQsdC1INC90LXRg9GB0L/QtdGI0L3QsCwg0LrQsNC60YLQviDQuCDQvtCx0YDQsNGC0L3QsNGC0LBcbiIKKyLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQuMyAIOKAlCDQt9CwINCy0YDRitGJ0LDQvdC10YLQviDQvdCwINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QuNGC0LUg0LjQvNC10L3QsC5cbiIKKyLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQn9GA0LXQuNC80LXQvdGD0LLQsNC50YLQtSDRhNCw0LnQu9C+0LLQtdGC0LUg0LIg4oCeJXPigJwg0YDRitGH0L3QvjpcbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnJXMnIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgtCwIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMgorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gPG9iamVjdD4gPHJlcGxhY2VtZW50PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSDQntCR0JXQmtCiINCX0JDQnNCv0J3QkCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjMKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQg0J7QkdCV0JrQoiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0INCf0J7QlNCQ0JLQkNCd0JUgW9Cg0J7QlNCY0KLQldCb4oCmXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjUKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tY29udmVydC1ncmFmdC1maWxlIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tY29udmVydC1ncmFmdC1maWxlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNgorbXNnaWQgImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgcmVwbGFjZSAtZCDQntCR0JXQmtCi4oCmIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNworbXNnaWQgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PdCk0J7QoNCc0JDQol0gWy1sIFvQqNCQ0JHQm9Ce0J1dXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgcmVwbGFjZSBmb3JtYXQgJyVzJ1xuIgorInZhbGlkIGZvcm1hdHMgYXJlICdzaG9ydCcsICdtZWRpdW0nIGFuZCAnbG9uZyciCittc2dzdHIgIiIKKyLQvdC10L/RgNCw0LLQuNC70LXQvSDRhNC+0YDQvNCw0YIg0YHQsCDQt9Cw0LzQtdGB0YLQstCw0L3QtTog4oCeJXPigJxcbiIKKyLQstGK0LfQvNC+0LbQvdC40YLQtSDRhNC+0YDQvNCw0YLQuCDRgdCwIOKAnnNob3J04oCcICjQutGA0LDRgtGK0LopLCDigJ5tZWRpdW3igJwgKNGB0YDQtdC00LXQvSkg0Lgg4oCebG9uZ+KAnCAo0LTRitC70YrQsykiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg0LfQsCDQt9Cw0LzRj9C90LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVwbGFjZSByZWYgJyVzJyIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg0LfQsCDQt9Cw0LzRj9C90LAg0LUg0LjQt9GC0YDQuNGCOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVmIG5hbWUiCittc2dzdHIgIuKAniVz4oCcINC1INC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQt9CwINGD0LrQsNC30LDRgtC10Lsg0LfQsCDQt9Cw0LzRj9C90LAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDQt9CwINC30LDQvNGP0L3QsCDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJPYmplY3RzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZS5cbiIKKyInJXMnIHBvaW50cyB0byBhIHJlcGxhY2VkIG9iamVjdCBvZiB0eXBlICclcydcbiIKKyJ3aGlsZSAnJXMnIHBvaW50cyB0byBhIHJlcGxhY2VtZW50IG9iamVjdCBvZiB0eXBlICclcycuIgorbXNnc3RyICIiCisi0J7QsdC10LrRgtC40YLQtSDRgtGA0Y/QsdCy0LAg0LTQsCDRgdCwINC10LTQvdCw0LrRitCyINCy0LjQtC5cbiIKKyLigJ4lc+KAnCDRgdC+0YfQuCDQutGK0Lwg0LfQsNC80LXQvdC10L0g0L7QsdC10LrRgiDigJ4lc+KAnCxcbiIKKyLQsCDigJ4lc+KAnCDRgdC+0YfQuCDQutGK0Lwg0LfQsNC80LXRgdGC0LLQsNGJINC+0LHQtdC60YIg0L7RgiDQstC40LQg4oCeJXPigJwuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSDQt9CwINC30LDQv9C40YEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0MgorbXNnaWQgImNhdC1maWxlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgItC40LfQv9GK0LvQvdC10L3QuNC10YLQviDQvdCwIOKAnmNhdC1maWxl4oCcINC30LDQstGK0YDRiNC4INGBINCz0YDQtdGI0LrQsCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0g0LfQsCDRh9C10YLQtdC90LUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3MgorbXNnaWQgInVuYWJsZSB0byBzcGF3biBta3RyZWUiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0YrQt9C00LDQtNC1INC/0YDQvtGG0LXRgSDQt9CwIOKAnm1rdHJlZeKAnCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjc2Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgZnJvbSBta3RyZWUiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtGH0LXRgtC1INC+0YIg4oCebWt0cmVl4oCcIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODUKK21zZ2lkICJta3RyZWUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAi4oCebWt0cmVl4oCcINC30LDQstGK0YDRiNC4INGBINCz0YDQtdGI0LrQsCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjg5Cittc2dpZCAibWt0cmVlIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdCBuYW1lIgorbXNnc3RyICLigJ5ta3RyZWXigJwg0L3QtSDQstGK0YDQvdCwINC40LzQtSDQvdCwINC+0LHQtdC60YIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZnN0YXQgJXMiCittc2dzdHIgIuKAnmZzdGF04oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9GK0LvQvdC4INCy0YrRgNGF0YMg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMwMworbXNnaWQgInVuYWJsZSB0byB3cml0ZSBvYmplY3QgdG8gZGF0YWJhc2UiCittc2dzdHIgItC+0LHQtdC60YLRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvSDQsiDQsdCw0LfQsNGC0LAg0L7RgiDQtNCw0L3QvdC4IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjIgYnVpbHRpbi9yZXBsYWNlLmM6Mzc4IGJ1aWx0aW4vcmVwbGFjZS5jOjQyNAorIzogYnVpbHRpbi9yZXBsYWNlLmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDQvtCx0LXQutGCOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgb2JqZWN0IHR5cGUgZm9yICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtC/0YDQtdC00LXQu9C4INCy0LjQtNGK0YIg0L3QsCDQvtCx0LXQutGC0LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM0MgorbXNnaWQgImVkaXRpbmcgb2JqZWN0IGZpbGUgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINGE0LDQudC70LAg0YEg0L7QsdC10LrRgtC40YLQtSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmU6ICclcyciCittc2dzdHIgItC90L7QstC40Y/RgiDQuCDRgdGC0LDRgNC40Y/RgiDQvtCx0LXQutGCINGB0LAg0LXQtNC40L0g0Lgg0YHRitGJOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyBhcyBhIGNvbW1pdCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwINC60LDRgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgItC10YLQuNC60LXRgtGK0YIg0L/RgNC4INGB0LvQuNCy0LDQvdC1INCyINC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcIGUg0L3QtdC/0YDQsNCy0LjQu9C10L0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgItC10YLQuNC60LXRgtGK0YIg0L/RgNC4INGB0LvQuNCy0LDQvdC1INCyINC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcIGUg0L3QtdC/0YDQsNCy0LjQu9C10L0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICIiCisi0J/RitGA0LLQvtC90LDRh9Cw0LvQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IOKAniVz4oCcINGB0YrQtNGK0YDQttCwINC10YLQuNC60LXRgtCwINC/0YDQuCDRgdC70LjQstCw0L3QtSDigJ4lc+KAnCwg0LrQvtC50YLQviDQtSAiCisi0LjQt9GF0LLRitGA0LvQtdC9LCDQt9Cw0YLQvtCy0LAg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsCDigJ4tLWVkaXTigJwsINCwINC90LUg4oCeLS1ncmFmdOKAnC4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgb3JpZ2luYWwgY29tbWl0ICclcycgaGFzIGEgZ3BnIHNpZ25hdHVyZSIKK21zZ3N0ciAi0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IOKAniVz4oCcINC1INGBINC/0L7QtNC/0LjRgSDQvdCwIEdQRyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDcwCittc2dpZCAidGhlIHNpZ25hdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHJlcGxhY2VtZW50IGNvbW1pdCEiCittc2dzdHIgItCf0L7QtNC/0LjRgdGK0YIg0YnQtSDQsdGK0LTQtSDQv9GA0LXQvNCw0YXQvdCw0YIg0LIg0LfQsNC80LXQvdGP0YnQvtGC0L4g0L/QvtC00LDQstCw0L3QtSEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIKK21zZ3N0ciAi0LfQsNC80LXQvdGP0YnQvtGC0L4g0L/QvtC00LDQstCw0L3QtSDQt9CwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvdC+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JhZnQgZm9yICclcycgdW5uZWNlc3NhcnkiCittc2dzdHIgItC/0YDQuNGB0LDQtNC60LDRgtCwINC30LAg4oCeJXPigJwg0LUg0LjQt9C70LjRiNC90LAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgY29tbWl0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICLQvdC+0LLQvtGC0L4g0Lgg0YHRgtCw0YDQvtGC0L4g0L/QvtC00LDQstCw0L3QtSDRgdCwINC10LTQvdC+INC4INGB0YrRidC+OiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY29udmVydCB0aGUgZm9sbG93aW5nIGdyYWZ0KHMpOlxuIgorIiVzIgorbXNnc3RyICIiCisi0YHQu9C10LTQvdC40YLQtSDQv9GA0LjRgdCw0LTQutC4INC90LUg0LzQvtCz0LDRgiDQtNCwINGB0LUg0L/RgNC10L7QsdGA0LDQt9GD0LLQsNGCOlxuIgorIiVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDgKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHQv9C40YHRitC60LAg0YEg0YPQutCw0LfQsNGC0LXQu9C40YLQtSDQt9CwINC30LDQvNGP0L3QsCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ5Cittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSDQt9CwINC30LDQvNGP0L3QsCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUwCittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgItGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDRgdGK0YnQtdGB0YLQstGD0LLQsNGJINC+0LHQtdC60YIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MQorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgItGB0LzRj9C90LAg0L3QsCDRgNC+0LTQuNGC0LXQu9C40YLQtSDQvdCwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MgorbXNnaWQgImNvbnZlcnQgZXhpc3RpbmcgZ3JhZnQgZmlsZSIKK21zZ3N0ciAi0L/RgNC10L7QsdGA0LDQt9GD0LLQsNC90LUg0L3QsCDRhNCw0LnQu9CwINC30LAg0L/RgNC40YHQsNC00LrQuNGC0LUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MworbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgItC30LDQvNGP0L3QsCDQvdCwINGD0LrQsNC30LDRgtC10LvRjywg0LDQutC+INGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTUKK21zZ2lkICJkbyBub3QgcHJldHR5LXByaW50IGNvbnRlbnRzIGZvciAtLWVkaXQiCittc2dzdHIgItCx0LXQtyDRhNC+0YDQvNCw0YLQuNGA0LDQvdC+INC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDigJQg0LfQsCDQvtC/0YbQuNGP0YLQsCDigJ4tLWVkaXTigJwiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NgorbXNnaWQgInVzZSB0aGlzIGZvcm1hdCIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRgtC+0LfQuCDQpNCe0KDQnNCQ0KIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU2OQorbXNnaWQgIi0tZm9ybWF0IGNhbm5vdCBiZSB1c2VkIHdoZW4gbm90IGxpc3RpbmciCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tZm9ybWF04oCcINC40LfQuNGB0LrQstCwINC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0L/QuNGB0YrQuiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTc3Cittc2dpZCAiLWYgb25seSBtYWtlcyBzZW5zZSB3aGVuIHdyaXRpbmcgYSByZXBsYWNlbWVudCIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLWbigJwg0LjQt9C40YHQutCy0LAg0LfQsNC/0LDQt9Cy0LDQvdC10YLQviDQvdCwINC30LDQvNC10YHRgtC40YLQtdC7IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODEKK21zZ2lkICItLXJhdyBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1lZGl0IgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLXJhd+KAnCDQuNC30LjRgdC60LLQsCDigJ4tLWVkaXTigJwiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU4NworbXNnaWQgIi1kIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLWTigJwg0LjQt9C40YHQutCy0LAg0L/QvtC90LUg0LXQtNC40L0g0LDRgNCz0YPQvNC10L3RgiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTkzCittc2dpZCAiYmFkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INCx0YDQvtC5INCw0YDQs9GD0LzQtdC90YLQuCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk5Cittc2dpZCAiLWUgbmVlZHMgZXhhY3RseSBvbmUgYXJndW1lbnQiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni1l4oCcINC40LfQuNGB0LrQstCwINC/0L7QvdC1INC10LTQuNC9INCw0YDQs9GD0LzQtdC90YIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYwNQorbXNnaWQgIi1nIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLWfigJwg0LjQt9C40YHQutCy0LAg0L/QvtC90LUg0LXQtNC40L0g0LDRgNCz0YPQvNC10L3RgiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjExCittc2dpZCAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgdGFrZXMgbm8gYXJndW1lbnQiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tY29udmVydC1ncmFmdC1maWxl4oCcINC90LUg0L/RgNC40LXQvNCwINCw0YDQs9GD0LzQtdC90YLQuCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjE3Cittc2dpZCAib25seSBvbmUgcGF0dGVybiBjYW4gYmUgZ2l2ZW4gd2l0aCAtbCIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLWzigJwg0L/RgNC40LXQvNCwINGC0L7Rh9C90L4g0LXQtNC40L0g0YjQsNCx0LvQvtC9IgorCisjOiBidWlsdGluL3JlcmVyZS5jOjEzCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBhdGg+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKK21zZ3N0ciAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQg0J/QqtCi4oCmIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo2MAorbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICLRgNC10LPQuNGB0YLRgNC40YDQsNC90LUg0L3QsCDRh9C40YHRgtC4INC60L7RgNC10LrRhtC40Lgg0L3QsCDQutC+0L3RhNC70LjQutGC0Lgg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NzkKK21zZ2lkICInZ2l0IHJlcmVyZSBmb3JnZXQnIHdpdGhvdXQgcGF0aHMgaXMgZGVwcmVjYXRlZCIKK21zZ3N0ciAi0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCByZXJlcmUgZm9yZ2V04oCcINC40LfQuNGB0LrQstCwINGD0LrQsNC30LLQsNC90LXRgtC+INC90LAg0L/RitGCIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjExMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZiBmb3IgJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INCz0LXQvdC10YDQuNGA0LDQvdC1INC90LAg0YDQsNC30LvQuNC60LAg0LfQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZXNldC5jOjMyCittc2dpZCAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKK21zZ3N0ciAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gW9Cf0J7QlNCQ0JLQkNCd0JVdIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSBb0KPQmtCQ0JfQkNCi0JXQm1/QmtCq0Jxf0JTQqtCg0JLQnl0gWy0tXSDQn9Cq0KLQmNCp0JDigKYiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyZWUtaXNoPl0iCittc2dzdHIgIiIKKyJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSAiCisiW9Cj0JrQkNCX0JDQotCV0Jtf0JrQqtCcX9CU0KrQoNCS0J5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0iCittc2dzdHIgImdpdCByZXNldCAtLXBhdGNoIFvQo9Ca0JDQl9CQ0KLQldCbX9Ca0KrQnF/QlNCq0KDQktCeXSBbLS1dIFvQn9Cq0KLQmNCp0JDigKZdIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAi0YHQvNC10YHQtdC90L4gKG1peGVkKSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAic29mdCIKK21zZ3N0ciAi0LzQtdC60L4gKHNvZnQpIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJoYXJkIgorbXNnc3RyICLQv9GK0LvQvdC+IChoYXJkKSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWVyZ2UiCittc2dzdHIgItGB0LvRj9GC0L4gKG1lcmdlKSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAia2VlcCIKK21zZ3N0ciAi0LfQsNC/0LDQt9Cy0LDRidC+IChrZWVwKSIKKworIzogYnVpbHRpbi9yZXNldC5jOjgyCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0LUg0L/QvtCy0YDQtdC00LXQvS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4NAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgSEVBRC4iCittc2dzdHIgItCU0YrRgNCy0L7RgtC+LCDRgdC+0YfQtdC90L4g0L7RgiDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgtC+LiIKKworIzogYnVpbHRpbi9yZXNldC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICLQlNGK0YDQstC+0YLQviwg0YHQvtGH0LXQvdC+INC+0YIg4oCeJXPigJwsINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQvi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQgJXMiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0YHQvtGH0Lgg0LrRitC8IOKAniVz4oCcIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4ICVzINC30LDQvdGD0LvRj9Cy0LDQvdC1INC/0L4g0LLRgNC10LzQtSDQvdCwINGB0LvQuNCy0LDQvdC1LiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NCBidWlsdGluL3N0YXNoLmM6NTIwIGJ1aWx0aW4vc3Rhc2guYzo1OTUKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MTkKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICLQv9C+LdC80LDQu9C60L4g0L/QvtC00YDQvtCx0L3QvtGB0YLQuCwg0LTQsCDRgdC1INC40LfQstC10LbQtNCw0YIg0YHQsNC80L4g0LPRgNC10YjQutC40YLQtSIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NgorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICLQuNC90LTQtdC60YHQsCDQuCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCwg0LHQtdC3INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk3Cittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICLRgdCw0LzQviDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCwg0LHQtdC3INC40L3QtNC10LrRgdCwINC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk5IGJ1aWx0aW4vcmVzZXQuYzozMDEKK21zZ2lkICJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCwg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDMKK21zZ2lkICJyZXNldCBIRUFEIGJ1dCBrZWVwIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgItC30LDQvdGD0LvRj9Cy0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINC90L4g0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LvQvtC60LDQu9C90LjRgtC1INC/0YDQvtC80LXQvdC4IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA5Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCByZW1vdmVkIHBhdGhzIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIiIKKyLQvtGC0LHQtdC70Y/Qt9Cy0LDQvdC1INGB0LDQvNC+INC90LAg0YTQsNC60YLQsCwg0YfQtSDQuNC30YLRgNC40YLQuNGC0LUg0L/RitGC0LjRidCwINGJ0LUg0LHRitC00LDRgiDQtNC+0LHQsNCy0LXQvdC4INC/0L4t0LrRitGB0L3QviIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmV2aXNpb24uIgorbXNnc3RyICLQodGC0L7QudC90L7RgdGC0YLQsCDigJ4lc+KAnCDQvdC1INC1INGA0LDQt9C/0L7Qt9C90LDRgtCwINC60LDRgtC+INGB0YrRidC10YHRgtCy0YPQstCw0YnQsCDQstC10YDRgdC40Y8uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCB0cmVlLiIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQtSDRgNCw0LfQv9C+0LfQvdCw0YIg0LrQsNGC0L4g0LTRitGA0LLQvi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjAKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIiIKKyLQvtC/0YbQuNGP0YLQsCDigJ4tLXBhdGNo4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQstGB0Y/QutCwINC+0YIg0L7Qv9GG0LjQuNGC0LUg4oCeLS1oYXJk4oCcL+KAni0tbWl4ZWTigJwv4oCeLS0iCisic29mdOKAnCIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorItC+0L/RhtC40Y/RgtCwIOKAni0tbWl4ZWTigJwg0L3QtSDQsdC40LLQsCDQtNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDQt9Cw0LXQtNC90L4g0YEg0L/RitGC0LjRidCwLiAg0JLQvNC10YHRgtC+INGC0L7QstCwICIKKyLQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJlc2V0IC0tINCf0KrQouKApuKAnC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0LjQt9Cy0YrRgNGI0LjRgtC1ICVzINC30LDQvdGD0LvRj9Cy0LDQvdC1LCDQutC+0LPQsNGC0L4g0YHRgtC1INC30LDQtNCw0LvQuCDQn9Cq0KIuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICLQkiDQs9C+0LvQviDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QtSDQvNC+0LbQtSDQtNCwINC40LfQstGK0YDRiNC40YLQtSAlcyDQt9Cw0L3Rg9C70Y/QstCw0L3QtSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM5MQorbXNnaWQgIi1OIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLW1peGVkIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4tTuKAnCDQuNC30LjRgdC60LLQsCDQvtC/0YbQuNGP0YLQsCDigJ4tLW1peGVk4oCcIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgItCf0YDQvtC80LXQvdC4INC40LfQstGK0L0g0LjQvdC00LXQutGB0LAg0YHQu9C10LQg0LfQsNC90YPQu9GP0LLQsNC90LXRgtC+OiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQuICBZb3UgY2FuXG4iCisidXNlICctLXF1aWV0JyB0byBhdm9pZCB0aGlzLiAgU2V0IHRoZSBjb25maWcgc2V0dGluZyByZXNldC5xdWlldCB0byB0cnVlXG4iCisidG8gbWFrZSB0aGlzIHRoZSBkZWZhdWx0LlxuIgorbXNnc3RyICIiCisiXG4iCisi0JjQt9Cx0YDQvtGP0LLQsNC90LXRgtC+INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INC40LfQstGK0L0g0LjQvdC00LXQutGB0LAg0YHQu9C10LQg0LfQsNC90YPQu9GP0LLQsNC90LUg0L7RgtC90LUgJS4yZiDRgdC10LouXG4iCisi0J7Qv9GG0LjRj9GC0LAg4oCeLS1xdWlldOKAnCDQt9Cw0LPQu9GD0YjQsNCy0LAg0YLQvtCy0LAg0YHRitC+0LHRidC10L3QuNC1INC10LTQvdC+0LrRgNCw0YLQvdC+LiAg0JfQsCDQv9C+0YHRgtC+0Y/QvdC90L5cbiIKKyLQt9Cw0LPQu9GD0YjQsNCy0LDQvdC1INC30LDQtNCw0LnRgtC1INC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCecmVzZXQucXVpZXTigJwg0LTQsCDQtSDigJ50cnVl4oCcICjQuNGB0YLQuNC90LApLlxuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICLQmNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L3Rg9C70LXQvSDQutGK0Lwg0LLQtdGA0YHQuNGPIOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyOQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgItCd0L7QstC40Y/RgiDQuNC90LTQtdC60YEg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9C40YHQsNC9LiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ5OQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGFuZCAtLW1pc3NpbmciCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tZXhjbHVkZS1wcm9taXNvci1vYmplY3Rz4oCcINC4IOKAni0tbWlzc2luZ+KAnCDQuCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjU2MAorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmcgcmVxdWlyZXMgLS1vYmplY3RzIgorbXNnc3RyICLRhNC40LvRgtGA0LjRgNCw0L3QtdGC0L4g0L3QsCDQvtCx0LXQutGC0Lgg0LjQt9C40YHQutCy0LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1vYmplY3Rz4oCcIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NjEwCittc2dpZCAicmV2LWxpc3QgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5IG9mIG5vdGVzIgorbXNnc3RyICLQutC+0LzQsNC90LTQsNGC0LAg4oCecmV2LWxpc3TigJwg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC40LfQstC10LbQtNCw0L3QtdGC0L4g0L3QsCDQsdC10LvQtdC20LrQuCIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjYxNQorbXNnaWQgIm1hcmtlZCBjb3VudGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW9iamVjdHMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tb2JqZWN0c+KAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0LjQt9Cx0YDQvtGP0LLQsNC90LXRgtC+IgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQwOAorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFvQntCf0KbQmNCv4oCmXSAtLSBb0JDQoNCT0KPQnNCV0J3QouKApl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDEzCittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICLQt9Cw0LTQsNC00LXQvdC40Y/RgiDQvdC40Lcg4oCeLS3igJwg0LTQsCDRgdC1INGC0YrQu9C60YPQstCwINC60LDRgtC+INCw0YDQs9GD0LzQtdC90YIiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDE1Cittc2dpZCAic3RvcCBwYXJzaW5nIGFmdGVyIHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IgorbXNnc3RyICLRgdC/0LjRgNCw0L3QtSDQvdCwINCw0L3QsNC70LjQt9CwINGB0LvQtdC0INC/0YrRgNCy0LjRjyDQsNGA0LPRg9C80LXQvdGCLCDQutC+0LnRgtC+INC90LUg0LUg0L7Qv9GG0LjRjyIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTgKK21zZ2lkICJvdXRwdXQgaW4gc3R1Y2sgbG9uZyBmb3JtIgorbXNnc3RyICLQuNC30YXQvtC0INCyINC00YrQu9Cz0LjRjyDRhNC+0YDQvNCw0YIiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NTUxCittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmc+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3B0aW9ucz5dIFs8YXJnPi4uLl1cbiIKKyJcbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIgorbXNnc3RyICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFvQntCf0KbQmNCv4oCmXSAtLSBb0JDQoNCT0KPQnNCV0J3QouKApl1cbiIKKyIgICDQuNC70Lg6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBb0JDQoNCT0KPQnNCV0J3QouKApl1cbiIKKyIgICDQuNC70Lg6IGdpdCByZXYtcGFyc2UgW9Ce0J/QptCY0K/igKZdIFvQkNCg0JPQo9Cc0JXQndCi4oCmXVxuIgorIlxuIgorItCX0LAg0L/QvtCy0LXRh9C1INC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L/RitGA0LLQuNGPINCy0LDRgNC40LDQvdGCINC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLSIKKyJo4oCcIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0Cittc2dpZCAiZ2l0IHJldmVydCBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCByZXZlcnQgW9Ce0J/QptCY0K/igKZdINCj0JrQkNCX0JDQotCV0Jtf0JrQqtCcX9Cf0J7QlNCQ0JLQkNCd0JXigKYiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjUKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHJldmVydCDQn9Ce0JTQmtCe0JzQkNCd0JTQkCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMAorbXNnaWQgImdpdCBjaGVycnktcGljayBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCBjaGVycnktcGljayBb0J7Qn9Cm0JjQr+KApl0g0KPQmtCQ0JfQkNCi0JXQm1/QmtCq0Jxf0J/QntCU0JDQktCQ0J3QleKApiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMQorbXNnaWQgImdpdCBjaGVycnktcGljayA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCBjaGVycnktcGljayDQn9Ce0JTQmtCe0JzQkNCd0JTQkCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQvtGH0LDQutCy0LAg0L/QvtC70L7QttC40YLQtdC70L3QviDRh9C40YHQu9C+INC30LAg0LDRgNCz0YPQvNC10L3RgiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJXM6INC+0L/RhtC40Y/RgtCwIOKAniVz4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDIKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICLQt9Cw0LLRitGA0YjQstCw0L3QtSDQvdCwINC/0L7RgNC10LTQuNGG0LAg0L7RgiDQvtGC0LHQuNGA0LDQvdC40Y8g0LjQu9C4INC+0YLQvNC10L3QuCDQvdCwINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDMKK21zZ2lkICJyZXN1bWUgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICLQv9GA0L7QtNGK0LvQttCw0LLQsNC90LUg0L3QsCDQv9C+0YDQtdC00LjRhtCwINC+0YIg0L7RgtCx0LjRgNCw0L3QuNGPINC40LvQuCDQvtGC0LzQtdC90Lgg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA0Cittc2dpZCAiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi0L7RgtC80Y/QvdCwINC90LAg0L/QvtGA0LXQtNC40YbQsCDQvtGCINC+0YLQsdC40YDQsNC90LjRjyDQuNC70Lgg0L7RgtC80LXQvdC4INC90LAg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNQorbXNnaWQgInNraXAgY3VycmVudCBjb21taXQgYW5kIGNvbnRpbnVlIgorbXNnc3RyICLQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINGC0LXQutGD0YnQvtGC0L4g0L/QvtC00LDQstCw0L3QtSDQuCDQv9GA0L7QtNGK0LvQttCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA3Cittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgItCx0LXQtyDQsNCy0YLQvtC80LDRgtC40YfQvdC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA4Cittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgItGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JldmVydC5jOjExMQorbXNnaWQgInBhcmVudC1udW1iZXIiCittc2dzdHIgItC90L7QvNC10YAg0L3QsCDRgNC+0LTQuNGC0LXQu9GPIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMgorbXNnaWQgInNlbGVjdCBtYWlubGluZSBwYXJlbnQiCittc2dzdHIgItC40LfQsdC+0YAg0L3QsCDQvtGB0L3QvtCy0L3QuNGPINGA0L7QtNC40YLQtdC7IgorCisjOiBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLRgdGC0YDQsNGC0LXQs9C40Y8g0L3QsCDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTYKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLQvtC/0YbQuNGPINC30LAg0YHRgtGA0LDRgtC10LPQuNGP0YLQsCDQvdCwINGB0LvQuNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNQorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINC40LzQtdGC0L4g0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjcKK21zZ2lkICJwcmVzZXJ2ZSBpbml0aWFsbHkgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+INC/0YDQsNC30L3QuNGC0LUg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyOQorbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICLQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQuNC30LvQuNGI0L3QuNGC0LUsINC/0YDQsNC30L3QuCDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjMyCittc2dpZCAicmV2ZXJ0IGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdCwINC+0YLQvNGP0L3QsCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNDUKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQvtGC0LHQuNGA0LDQvdC1IgorCisjOiBidWlsdGluL3JtLmM6MTkKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBb0J7Qn9Cm0JjQr+KApl0gWy0tXSDQpNCQ0JnQm+KApiIKKworIzogYnVpbHRpbi9ybS5jOjIwNworbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnaWRfcGx1cmFsICIiCisidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnc3RyWzBdICIiCisi0YHQu9C10LTQvdC40Y/RgiDRhNCw0LnQuyDQtSDRgdGK0YEg0YHRitC00YrRgNC20LDQvdC40LUg0LIg0LjQvdC00LXQutGB0LAg0YDQsNC30LvQuNGH0L3QviDQvtGCINGC0LXQutGD0YnQvtGC0L4g0LzRgyDRgdGK0LTRitGA0LbQsNC90LjQtSAiCisi0LhcbiIKKyLRgNCw0LfQu9C40YfQvdC+INC+0YIg0YHRitC+0YLQstC10YLRgdGC0LLQsNGJ0L7RgtC+INC90LAgSEVBRDoiCittc2dzdHJbMV0gIiIKKyLRgdC70LXQtNC90LjRgtC1INGE0LDQudC70L7QstC1INGB0LAg0YHRitGBINGB0YrQtNGK0YDQttCw0L3QuNC1INCyINC40L3QtNC10LrRgdCwINGA0LDQt9C70LjRh9C90L4g0L7RgiDRgtC10LrRg9GJ0L7RgtC+INC40LwgIgorItGB0YrQtNGK0YDQttCw0L3QuNC1INC4XG4iCisi0YDQsNC30LvQuNGH0L3QviDQvtGCINGB0YrQvtGC0LLQtdGC0YHRgtCy0LDRidC+0YLQviDQvdCwIEhFQUQ6IgorCisjOiBidWlsdGluL3JtLmM6MjEyCittc2dpZCAiIgorIlxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIo0LfQsCDQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0LjQt9GC0YDQuNCy0LDQvdC1INC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLWbigJwpIgorCisjOiBidWlsdGluL3JtLmM6MjE2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ3N0clswXSAi0YHQu9C10LTQvdC40Y/RgiDRhNCw0LnQuyDQtSDRgSDQv9GA0L7QvNC10L3QtdC90L4g0YHRitC00YrRgNC20LDQvdC40LUg0LIg0LjQvdC00LXQutGB0LA6IgorbXNnc3RyWzFdICLRgdC70LXQtNC90LjRgtC1INGE0LDQudC70L7QstC1INGB0LAg0YEg0L/RgNC+0LzQtdC90LXQvdC+INGB0YrQtNGK0YDQttCw0L3QuNC1INCyINC40L3QtNC10LrRgdCwOiIKKworIzogYnVpbHRpbi9ybS5jOjIyMCBidWlsdGluL3JtLmM6MjI5Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIo0LfQsCDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDRhNCw0LnQu9CwINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1jYWNoZWTigJwsINCwINC30LAg0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+XG4iCisi0LjQt9GC0YDQuNCy0LDQvdC1IOKAlCDigJ4tZuKAnCkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjYKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dzdHJbMF0gItGB0LvQtdC00L3QuNGP0YIg0YTQsNC50Lsg0LUg0YEg0L/RgNC+0LzQtdC90LXQvdC+INGB0YrQtNGK0YDQttCw0L3QuNC1IgorbXNnc3RyWzFdICLRgdC70LXQtNC90LjRgtC1INGE0LDQudC70L7QstC1INGB0LAg0YEg0L/RgNC+0LzQtdC90LXQvdC+INGB0YrQtNGK0YDQttCw0L3QuNC1IgorCisjOiBidWlsdGluL3JtLmM6MjQzCittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAi0LTQsCDQvdC1INGB0LUg0LjQt9Cy0LXQttC00LDRgiDQuNC30YLRgNC40YLQuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDQKK21zZ2lkICJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INGB0LDQvNC+INC+0YIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDUKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAi0LLRitC/0YDQtdC60Lgg0L/RgNC+0LLQtdGA0LrQsNGC0LAg0LfQsCDQsNC60YLRg9Cw0LvQvdC+0YHRgtGC0LAg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDYKK21zZ2lkICJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIKK21zZ3N0ciAi0YDQtdC60YPRgNGB0LjQstC90L4g0LjQt9GC0YDQuNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JtLmM6MjQ4Cittc2dpZCAiZXhpdCB3aXRoIGEgemVybyBzdGF0dXMgZXZlbiBpZiBub3RoaW5nIG1hdGNoZWQiCittc2dzdHIgIiIKKyLQuNC30YXQvtC00L3QuNGP0YIg0LrQvtC0INC00LAg0LUgMCwg0LTQvtGA0Lgg0LDQutC+INC90LjQutC+0Lkg0YTQsNC50Lsg0L1lIGUg0L3QsNC/0LDRgdC90LDQuyDRgSDRiNCw0LHQu9C+0L3QsCDQt9CwICIKKyLQuNC30YLRgNC40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcm0uYzoyODIKK21zZ2lkICJObyBwYXRoc3BlYyB3YXMgZ2l2ZW4uIFdoaWNoIGZpbGVzIHNob3VsZCBJIHJlbW92ZT8iCittc2dzdHIgItCd0LUg0YHQsCDQt9Cw0LTQsNC00LXQvdC4INC/0YrRgtC40YnQsC4gINCa0L7QuCDRhNCw0LnQu9C+0LLQtSDQtNCwINGB0LUg0LjQt9GC0YDQuNGP0YI/IgorCisjOiBidWlsdGluL3JtLmM6MzA1Cittc2dpZCAicGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyLQt9CwINC00LAg0L/RgNC+0LTRitC70LbQuNGC0LUsINC40LvQuCDQstC60LDRgNCw0LnRgtC1INC/0YDQvtC80LXQvdC40YLQtSDQv9C+INGE0LDQudC70LAg4oCeLmdpdG1vZHVsZXPigJwg0LIg0LjQvdC00LXQutGB0LAsXG4iCisi0LjQu9C4INCz0Lgg0YHQutCw0YLQsNC50YLQtSIKKworIzogYnVpbHRpbi9ybS5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICLQsdC10Lcg0LjQt9C/0L7Qu9C30LLQsNC90LXRgtC+INC90LAg0L7Qv9GG0LjRj9GC0LAg4oCeLXLigJwg4oCeJXPigJwg0L3Rj9C80LAg0LTQsCDRgdC1INC40LfRgtGA0LjQtSDRgNC10LrRg9GA0YHQuNCy0L3QviIKKworIzogYnVpbHRpbi9ybS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgcm06IHVuYWJsZSB0byByZW1vdmUgJXMiCittc2dzdHIgImdpdCBybTog4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9GC0YDQuNC1IgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjIwCittc2dpZCAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiAiCisiWzxyZWY+Li4uXVxuIgorIiAgLS1hbGwgYW5kIGV4cGxpY2l0IDxyZWY+IHNwZWNpZmljYXRpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS0iCisicGFjaz3Qn9CQ0JrQldCiXSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFvQpdCe0KHQojpd0JTQmNCg0JXQmtCi0J7QoNCY0K8gW9Cj0JrQkNCX0JDQotCV0JvigKZdXG4iCisiICDQvtC/0YbQuNGP0YLQsCDigJ4tLWFsbOKAnCDQuCDQuNC30YDQuNGH0L3QvtGC0L4g0L/QvtGB0L7Rh9Cy0LDQvdC1INC90LAg0KPQmtCQ0JfQkNCi0JXQmyDRgdCwINCy0LfQsNC40LzQvdC+INC90LXRgdGK0LLQvNC10YHRgtC40LzQuC4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYzCittc2dpZCAicmVtb3RlIG5hbWUiCittc2dzdHIgItC40LzQtSDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzcKK21zZ2lkICJ1c2Ugc3RhdGVsZXNzIFJQQyBwcm90b2NvbCIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQv9GA0L7RgtC+0LrQvtC7INCx0LXQtyDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC30LAgUlBDIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OAorbXNnaWQgInJlYWQgcmVmcyBmcm9tIHN0ZGluIgorbXNnc3RyICLRh9C10YLQtdC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzkKK21zZ2lkICJwcmludCBzdGF0dXMgZnJvbSByZW1vdGUgaGVscGVyIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC+0YIg0L7RgtC00LDQu9C10YfQtdC90LDRgtCwINC/0L7QvNC+0YnQvdCwINGE0YPQvdC60YbQuNGPIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTQKK21zZ2lkICJnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzaG9ydGxvZyBb0J7Qn9Cm0JjQr+KApl0gW9CU0JjQkNCf0JDQl9Ce0J1f0J3QkF/QktCV0KDQodCY0JjQotCVXSBbWy0tXSBb0J/QqtCi4oCmXV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNQorbXNnaWQgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgW9Ce0J/QptCY0K/igKZdIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY0Cittc2dpZCAiR3JvdXAgYnkgY29tbWl0dGVyIHJhdGhlciB0aGFuIGF1dGhvciIKK21zZ3N0ciAi0JPRgNGD0L/QuNGA0LDQvdC1INC/0L4g0L/QvtC00LDQstCw0YksINCwINC90LUg0L/QviDQsNCy0YLQvtGAIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY2Cittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICLQv9C+0LTRgNC10LTQsdCwINC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQv9C+INCx0YDQvtGPINC/0L7QtNCw0LLQsNC90LjRjyDQvtGCINCw0LLRgtC+0YAiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjgKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAi0JHQtdC3INC+0L/QuNGB0LDQvdC40Y8g0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwIOKAlCDQtNCwINGB0LUg0L/QvtC60LDQt9Cy0LAg0YHQsNC80L4g0LHRgNC+0Y8g0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcwCittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0LDQtNGA0LXRgdCwINC90LAg0LUt0L/QvtGJ0LAg0LfQsCDQstGB0LXQutC4INCw0LLRgtC+0YAiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzEKK21zZ2lkICI8dz5bLDxpMT5bLDxpMj5dXSIKK21zZ3N0ciAiPNCo0JjQoNCe0KfQmNCd0JA+Wyw80J7QotCh0KLQqtCfXzE+Wyw80J7QotCh0KLQqtCfXzI+XV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzIKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgIiIKKyLQn9GA0LXQvdCw0YHRj9C90LUg0L3QsCDRgNC10LTQvtCy0LXRgtC1INC00L4g0YLQsNC30Lgg0L7QsdGJ0LAg0KjQmNCg0J7Qp9CY0J3QkCAoNzYpLCDRgSDQntCi0KHQotCq0J9fMSAoNikg0LfQsCDQv9GK0YDQstC40Y8gIgorItGA0LXQtCDQuCDQntCi0KHQotCq0J9fMiAoOSkg0LfQsCDQvtGB0YLQsNC90LDQu9C40YLQtSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjMwMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBnaXZlbiBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgItC/0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INCw0YDQs9GD0LzQtdC90YLQuCDQuNC30LLRitC9INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjEzCittc2dpZCAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiICAgIFstLWN1cnJlbnRdIFstLWNvbG9yWz3QmtCe0JPQkF0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiICAgIFstLW1vcmU90JHQoNCe0JkgfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIiAgICBbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyjQoNCV0JLQmNCX0JjQryB8INCj0JrQkNCX0JDQotCV0Jsp4oCmXSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjE3Cittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz3QkdCg0J7QmVss0JHQkNCX0JBdXSBbLS1saXN0XSBb0KPQmtCQ0JfQkNCi0JXQm10iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZnMiCittc2dzdHJbMF0gIuKAniVz4oCcINGB0LUg0L/RgNC10YHQutCw0YfQsCDigJQg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7QsdGA0LDQsdC+0YLRj9GCINC/0L7QstC10YfQtSDQvtGCICVkINGD0LrQsNC30LDRgtC10LsiCittc2dzdHJbMV0gIuKAniVz4oCcINGB0LUg0L/RgNC10YHQutCw0YfQsCDigJQg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7QsdGA0LDQsdC+0YLRj9GCINC/0L7QstC10YfQtSDQvtGCICVkINGD0LrQsNC30LDRgtC10LvQuCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBtYXRjaGluZyByZWZzIHdpdGggJXMiCittc2dzdHIgItC90LjQutC+0Lkg0YPQutCw0LfQsNGC0LXQuyDQvdC1INGB0YrQstC/0LDQtNCwINGBIOKAniVz4oCcIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ1Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdC70LXQtNGP0YnQuNGC0LUg0Lgg0LvQvtC60LDQu9C90LjRgtC1INC60LvQvtC90LgiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHQu9C10LTRj9GJ0LjRgtC1INC60LvQvtC90LgiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDkKK21zZ2lkICJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIgorbXNnc3RyICLQvtGG0LLQtdGC0Y/QstCw0L3QtSDQvdCwIOKAniohKy3igJwg0YHQv9C+0YDQtdC0INC60LvQvtC90LjRgtC1IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUxCittc2dpZCAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGC0LDQutGK0LIg0JHQoNCe0Jkg0L/QvtC00LDQstCw0L3QuNGPINC+0YIg0L7QsdGJ0LjRjyDQv9GA0LXQtNGI0LXRgdGC0LLQtdC90LjQuiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MworbXNnaWQgInN5bm9ueW0gdG8gbW9yZT0tMSIKK21zZ3N0ciAi0L/RgdC10LLQtNC+0L3QuNC8INC90LAg4oCebW9yZT0tMeKAnCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NAorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICLQsdC10Lcg0L3QuNC30L7QstC1INC30LAg0LjQvNC10L3QsNGC0LAg0L3QsCDQutC70L7QvdC40YLQtSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NgorbXNnaWQgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICLQstC60LvRjtGH0LLQsNC90LUg0Lgg0L3QsCDRgtC10LrRg9GJ0LjRjyDQutC70L7QvSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1OAorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAi0LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDRgSDQuNC80LXQvdCw0YLQsCDQuNC8INC90LAg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYwCittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LLRitC30LzQvtC20L3QuNGC0LUg0LHQsNC30Lgg0LfQsCDRgdC70LjQstCw0L3QuNGPIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYyCittc2dpZCAic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QtdC00L7RgdGC0LjQttC40LzQuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY0Cittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINCyINGC0L7Qv9C+0LvQvtCz0LjRh9C10YHQutCwINC/0L7QtNGA0LXQtNCx0LAiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjcKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCwg0LrQvtC40YLQviDQvdC1INGB0LAg0L7RgiDQv9GK0YDQstC40Y8g0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjkKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0LvQuNCy0LDQvdC40Y/RgtCwLCDQutC+0LjRgtC+INC80L7Qs9Cw0YIg0LTQsCDRgdC1INC00L7RgdGC0LjQs9C90LDRgiDRgdCw0LzQviDQvtGCINC10LTQuNC9INCy0YDRitGFIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcxCittc2dpZCAidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyIHdoZXJlIHBvc3NpYmxlIgorbXNnc3RyICIiCisi0YLQvtC/0L7Qu9C+0LPQuNGH0LXRgdC60LAg0L/QvtC00YDQtdC00LHQsCwg0L/RgNC4INC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC/0L7QtNGA0LXQtNCx0LDRgtCwINC/0L4g0LTQsNGC0LAsINC00L7QutC+0LvQutC+0YLQviDQtVxuIgorItCy0YrQt9C80L7QttC90L4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzQKK21zZ2lkICI8bj5bLDxiYXNlPl0iCittc2dzdHIgItCR0KDQntCZWyzQkdCQ0JfQkF0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzUKK21zZ2lkICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgYmFzZSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0L3QsNC5LdC80L3QvtCz0L4g0JHQoNCe0Jkg0LbRg9GA0L3QsNC70L3QuCDQt9Cw0L/QuNGB0LAg0YEg0L3QsNGH0LDQu9C+INGB0YrQvtGC0LLQtdGC0L3QsNGC0LAg0JHQkNCX0JAiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MTEKK21zZ2lkICIiCisiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvciAtLW1lcmdlLWJhc2UiCittc2dzdHIgIiIKKyLQvtC/0YbQuNGP0YLQsCDigJ4tLXJlZmxvZ+KAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0L7Qv9GG0LjQuNGC0LUgIOKAni0tYWxs4oCcLCDigJ4tLXJlbW90ZXPigJwsIOKAni0tIgorImluZGVwZW5kZW504oCcINC4IOKAni0tbWVyZ2UtYmFzZeKAnCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczNQorbXNnaWQgIm5vIGJyYW5jaGVzIGdpdmVuLCBhbmQgSEVBRCBpcyBub3QgdmFsaWQiCittc2dzdHIgItC90LUg0LUg0LfQsNC00LDQtNC10L0g0LrQu9C+0L0sINCwINGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0LUg0L3QtdC/0YDQsNCy0LjQu9C10L0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MzgKK21zZ2lkICItLXJlZmxvZyBvcHRpb24gbmVlZHMgb25lIGJyYW5jaCBuYW1lIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLXRyYWNr4oCcINC40LfQuNGB0LrQstCwINGC0L7Rh9C90L4g0LXQtNC90L4g0LjQvNC1INC90LAg0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSAlZCBlbnRyeSBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnaWRfcGx1cmFsICJvbmx5ICVkIGVudHJpZXMgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ3N0clswXSAi0YHQsNC80L4gJWQg0LfQsNC/0LjRgSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7QutCw0LfQsNC9INC90LDQstC10LTQvdGK0LYuIgorbXNnc3RyWzFdICLRgdCw0LzQviAlZCDQt9Cw0L/QuNGB0LAg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LrQsNC30LDQvdC4INC90LDQstC10LTQvdGK0LYuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmICVzIgorbXNnc3RyICLRgtCw0LrRitCyINGD0LrQsNC30LDRgtC10Lsg0L3Rj9C80LA6ICVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldi4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldnMuIgorbXNnc3RyWzBdICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtCx0YDQsNCx0L7RgtC4INC/0L7QstC10YfQtSDQvtGCICVkINGD0LrQsNC30LDRgtC10LsuIgorbXNnc3RyWzFdICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtCx0YDQsNCx0L7RgtGP0YIg0L/QvtCy0LXRh9C1INC+0YIgJWQg0YPQutCw0LfQsNGC0LXQu9C4LiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIuKAniVz4oCcINC1INC90LXQv9GA0LDQstC40LvQtdC9INGD0LrQsNC30LDRgtC10LsuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIGNvbW1pdCAlcyAoJXMpIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCAoJXMpINC70LjQv9GB0LLQsCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjEyCittc2dpZCAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz3Qp9CY0KHQm9CeXV0gWy0tYWJicmV2Wz3Qp9CY0KHQm9CeXV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gW9Co0JDQkdCb0J7QneKApl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMworbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPdCo0JDQkdCb0J7QnV0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjIKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQtdGC0LjQutC10YLQuNGC0LUgKNC80L7QttC1INC00LAg0YHQtSDQutC+0LzQsdC40L3QuNGA0LAg0YEg0LLRitGA0YXQvtCy0LXRgtC1KSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MworbXNnaWQgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINCy0YrRgNGF0L7QstC10YLQtSAo0LzQvtC20LUg0LTQsCDRgdC1INC60L7QvNCx0LjQvdC40YDQsCDRgSDQtdGC0LjQutC10YLQuNGC0LUpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY0Cittc2dpZCAic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCByZXF1aXJlcyBleGFjdCByZWYgcGF0aCIKK21zZ3N0ciAi0YHRgtGA0L7Qs9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1LCDQuNC30LjRgdC60LLQsCDRgdC1INGD0LrQsNC30LDRgtC10Lsg0YEg0L/RitC70LXQvSDQv9GK0YIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjcgYnVpbHRpbi9zaG93LXJlZi5jOjE2OQorbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIKK21zZ3N0ciAi0LfQsNC00YrQu9C20LjRgtC10LvQvdC+INC40LfQstC10LbQtNCw0L3QtSDQuCDQvdCwINGD0LrQsNC30LDRgtC10LvRjyBIRUFEIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcxCittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMiCittc2dzdHIgItC00LAg0YHQtSDQuNC30LLQtdC20LTQsNGCINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LjRgtC1INC90LAg0L7QsdC10LrRgtC40YLQtS3QtdGC0LjQutC10YLQuCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MworbXNnaWQgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0YLQvtC30Lgg0JHQoNCe0Jkg0YbQuNGE0YDQuCDQvtGCINCy0YHRj9C60LAg0YHRg9C80LAg0L/QviBTSEExIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc3Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgIiIKKyLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQtdC30YPQu9GC0LDRgtC40YLQtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LjQt9GF0L7QtCAo0L/QvtC70LXQt9C90L4g0YEg0L7Qv9GG0LjRj9GC0LAg4oCeLS0iCisidmVyaWZ54oCcKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInNob3cgcmVmcyBmcm9tIHN0ZGluIHRoYXQgYXJlbid0IGluIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC/0YDQuNC10YLQuCDQvtGCINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQsINC60L7QuNGC0L4g0LvQuNC/0YHQstCw0YIg0LIgIgorItC70L7QutCw0LvQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjEKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGFkZHxkaXNhYmxlKSA8b3B0aW9ucz4iCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgKGluaXR8bGlzdHxzZXR8YWRkfGRpc2FibGUpINCe0J/QptCY0K/igKYiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NjQKK21zZ2lkICJ0aGlzIHdvcmt0cmVlIGlzIG5vdCBzcGFyc2UgKHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBub3QgZXhpc3QpIgorbXNnc3RyICIiCisi0YLQvtCy0LAg0L3QtSDQtSDRh9Cw0YHRgtC40YfQvdC+INGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4gKNCy0LXRgNC+0Y/RgtC90L4g0LvQuNC/0YHQstCwINGE0LDQudC7IOKAnnNwYXJzZS1jaGVja291dOKAnCkiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjI1Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yIHNwYXJzZS1jaGVja291dCBmaWxlIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0LfQsCDRh9Cw0YHRgtC40YfQvdC+INC40LfRgtC10LPQu9GP0L3QtSDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvdCwIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI2NgorbXNnaWQgImZhaWxlZCB0byBzZXQgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyBzZXR0aW5nIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LfQsNC00LDQstCw0L3QtSDQvdCwINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZ+KAnCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyODMKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCBbLS1jb25lXSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozMDIKK21zZ2lkICJpbml0aWFsaXplIHRoZSBzcGFyc2UtY2hlY2tvdXQgaW4gY29uZSBtb2RlIgorbXNnc3RyICLQuNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC1INC90LAg0YfQsNGB0YLQuNGH0L3QvtGC0L4g0LjQt9GC0LXQs9C70Y/QvdC1INCyINC/0YrRgtC10LLQvtC00LXQvSDRgNC10LbQuNC8IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjMwOAorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICLQuNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC1INC90LAg0YfQsNGB0YLQuNGH0L3QvtGC0L4g0LjQt9GC0LXQs9C70Y/QvdC1IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0LgiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBub3JtYWxpemUgcGF0aCAlcyIKK21zZ3N0ciAi0L/RitGC0Y/RgiDigJ4lc+KAnCAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L3QvtGA0LzQsNC70LjQt9C40YDQsCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0MTAKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChzZXR8YWRkKSAoLS1zdGRpbiB8IDxwYXR0ZXJucz4pIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IChzZXR8YWRkKSAoLS1zdGRpbiB8INCo0JDQkdCb0J7QneKApikiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDM1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnF1b3RlIEMtc3R5bGUgc3RyaW5nICclcyciCittc2dzdHIgItGG0LjRgtC40YDQsNC90LXRgtC+INC90LAg0L3QuNC3LCDRhNC+0YDQvNCw0YLQuNGA0LDQvSDQt9CwIEMg4oCUIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YfQuNGB0YLQtdC90L4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDg5IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTEzCittc2dpZCAidW5hYmxlIHRvIGxvYWQgZXhpc3Rpbmcgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICLRiNCw0LHQu9C+0L3QuNGC0LUg0LfQsCDRh9Cw0YHRgtC40YfQvdC+INC40LfRgtC10LPQu9GP0L3QtSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDRgdC1INC30LDRgNC10LTRj9GCIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjU1OAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBzdGFuZGFyZCBpbiIKK21zZ3N0ciAi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINGI0LDQsdC70L7QvdC40YLQtSDQvtGCINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTY0Cittc2dpZCAic2V0IHNwYXJzZS1jaGVja291dCBwYXR0ZXJucyIKK21zZ3N0ciAi0LfQsNC00LDQstCw0L3QtSDQvdCwINGI0LDQsdC70L7QvdC40YLQtSDQt9CwINGH0LDRgdGC0LjRh9C90L7RgtC+INC40LfRgtC10LPQu9GP0L3QtSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1ODEKK21zZ2lkICJkaXNhYmxlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAi0LHQtdC3INC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YfQsNGB0YLQuNGH0L3QviDQuNC30YLQtdCz0LvRj9C90LUiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTkzCittc2dpZCAiZXJyb3Igd2hpbGUgcmVmcmVzaGluZyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGA0LDQsdC+0YLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyIGJ1aWx0aW4vc3Rhc2guYzozOAorbXNnaWQgImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgc3Rhc2ggbGlzdCBb0J7Qn9Cm0JjQr+KApl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMyBidWlsdGluL3N0YXNoLmM6NDMKK21zZ2lkICJnaXQgc3Rhc2ggc2hvdyBbPG9wdGlvbnM+XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBzaG93IFvQntCf0KbQmNCv4oCmXSBb0KHQmtCQ0KLQkNCd0J5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjQgYnVpbHRpbi9zdGFzaC5jOjQ4Cittc2dpZCAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFvQodCa0JDQotCQ0J3Qnl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNQorbXNnaWQgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBb0KHQmtCQ0KLQkNCd0J5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjYgYnVpbHRpbi9zdGFzaC5jOjYzCittc2dpZCAiZ2l0IHN0YXNoIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggYnJhbmNoINCa0JvQntCdIFvQodCa0JDQotCQ0J3Qnl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNyBidWlsdGluL3N0YXNoLmM6NjgKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI4Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdXVxuIgorIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2Ug0KHQqtCe0JHQqdCV0J3QmNCVXVxuIgorIiAgICAgICAgICBbLS1wYXRoc3BlYy1mcm9tLWZpbGU90KTQkNCZ0JsgWy0tcGF0aHNwZWMtZmlsZS1udWxdXVxuIgorIiAgICAgICAgICBbLS1dIFvQn9Cq0KLigKZdXSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjMyIGJ1aWx0aW4vc3Rhc2guYzo4NQorbXNnaWQgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZXNzYWdlPl0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gW9Ch0KrQntCR0KnQldCd0JjQlV0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MworbXNnaWQgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBb0KHQmtCQ0KLQkNCd0J5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTgKK21zZ2lkICJnaXQgc3Rhc2ggYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFvQodCa0JDQotCQ0J3Qnl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3MworbXNnaWQgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IgorbXNnc3RyICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSDQodCq0J7QkdCp0JXQndCY0JVdIFstcXwtLXF1aWV0XSDQn9Ce0JTQkNCS0JDQndCVIgorCisjOiBidWlsdGluL3N0YXNoLmM6NzgKK21zZ2lkICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl1cbiIKKyIgICAgICAgICAgWy0tXSBbPHBhdGhzcGVjPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlINCh0KrQntCR0KnQldCd0JjQlV1cbiIKKyIgICAgICAgICAgWy0tXSBb0J/QqtCi4oCmXV0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQtSDQv9C+0LTQsNCy0LDQvdC1LCDQv9GA0LjQu9C40YfQsNGJ0L4g0L3QsCDQvdC10YnQviDRgdC60LDRgtCw0L3QviIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiVzIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QuCDRgdCwINC/0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INCy0LXRgNGB0LjQuDolcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU0OQorbXNnaWQgIk5vIHN0YXNoIGVudHJpZXMgZm91bmQuIgorbXNnc3RyICLQndC1INC1INC+0YLQutGA0LjRgtC+INC90LjRidC+INGB0LrQsNGC0LDQvdC+LiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIuKAniVz4oCcINC1INC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQt9CwINGD0LrQsNC30LDRgtC10LsiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMjUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3NQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAi0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBzdGFzaCBjbGVhcuKAnCDQvdC1INC/0L7QtNC00YrRgNC20LAg0LDRgNCz0YPQvNC10L3RgtC4IgorCisjOiBidWlsdGluL3N0YXNoLmM6NDA0Cittc2dpZCAiY2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICLQv9C+INCy0YDQtdC80LUg0L3QsCDRgdC70LjQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0L/RgNC40LvQvtC20LjRgtC1INC90LXRidC+INGB0LrQsNGC0LDQvdC+IgorCisjOiBidWlsdGluL3N0YXNoLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSBkaWZmICVzXiEuIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg0YEg0YDQsNC30LvQuNC60LjRgtC1IOKAniVzXiHigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LPQtdC90LXRgNC40YDQsCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyMgorbXNnaWQgImNvbmZsaWN0cyBpbiBpbmRleC5Ucnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiIgorItCyINC40L3QtNC10LrRgdCwINC40LzQsCDQutC+0L3RhNC70LjQutGC0LguICDQn9GA0L7QsdCy0LDQudGC0LUg0LTQsCDQuNC30L/RitC70L3QuNGC0LUg0LrQvtC80LDQvdC00LDRgtCwINCx0LXQtyDQvtC/0YbQuNGP0YLQsCDigJ4tLSIKKyJpbmRleOKAnC4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjgKK21zZ2lkICJjb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICLQtNGK0YDQstC+0YLQviDRgdC+0YfQtdC90L4g0L7RgiDQuNC90LTQtdC60YHQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L3QviIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQzNworbXNnaWQgImNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIgorbXNnc3RyICLQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUg0L3QtSDQvNC+0LPQsNGCINC00LAg0YHQtSDQstGK0LfRgdGC0LDQvdC+0LLRj9GCINC+0YIg0YHQutCw0YLQsNC90L7RgtC+IgorCisjOiBidWlsdGluL3N0YXNoLmM6NDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgd2l0aCAlcyIKK21zZ3N0ciAi0KHQu9C40LLQsNC90LUg0L3QsCDigJ4lc+KAnCDRgSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ2MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjY4MQorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAi0JjQvdC00LXQutGB0YrRgiDQvdC1INC1INC40LfQstCw0LTQtdC9INC+0YIg0YHQutCw0YLQsNC90L7RgtC+LiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUyMiBidWlsdGluL3N0YXNoLmM6NjIxCittc2dpZCAiYXR0ZW1wdCB0byByZWNyZWF0ZSB0aGUgaW5kZXgiCittc2dzdHIgItC+0L/QuNGCINC30LAg0L/QvtCy0YLQvtGA0L3QviDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICVzICglcykiCittc2dzdHIgItCY0LfRgtGA0LjRgtC+OiDigJ4lc+KAnCAoJXMpIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAi0KHQutCw0YLQsNC90L7RgtC+IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YLQviIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU4MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQtSDRg9C60LDQt9Cw0YLQtdC7INC60YrQvCDQvdC10YnQviDRgdC60LDRgtCw0L3QviIKKworIzogYnVpbHRpbi9zdGFzaC5jOjYzMyBnaXQtbGVnYWN5LXN0YXNoLnNoOjY5NQorbXNnaWQgIlRoZSBzdGFzaCBlbnRyeSBpcyBrZXB0IGluIGNhc2UgeW91IG5lZWQgaXQgYWdhaW4uIgorbXNnc3RyICLQodC60LDRgtCw0L3QvtGC0L4g0LUg0LfQsNC/0LDQt9C10L3QviDQsiDRgdC70YPRh9Cw0LksINGH0LUg0LLQuCDQv9C+0YLRgNGP0LHQstCwINC+0YLQvdC+0LLQvi4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2NTYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MTMKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgItCd0LUg0LUg0YPQutCw0LfQsNC90L4g0LjQvNC1INC90LAg0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3OTYgYnVpbHRpbi9zdGFzaC5jOjgzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICVzIHdpdGggJXMiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvSDQtNCwINGB0L7Rh9C4INC60YrQvCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgxNCBidWlsdGluL3N0YXNoLmM6MTQ3OCBidWlsdGluL3N0YXNoLmM6MTU0MworbXNnaWQgInN0YXNoIG1lc3NhZ2UiCittc2dzdHIgItGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0YHQutCw0YLQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL3N0YXNoLmM6ODI0Cittc2dpZCAiXCJnaXQgc3Rhc2ggc3RvcmVcIiByZXF1aXJlcyBvbmUgPGNvbW1pdD4gYXJndW1lbnQiCittc2dzdHIgItC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgc3Rhc2ggc3RvcmXigJwg0LjQt9C40YHQutCy0LAg0YLQvtGH0L3QviDQtdC00LjQvSDQsNGA0LPRg9C80LXQvdGCLdCf0J7QlNCQ0JLQkNCd0JUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMDQ5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjE4Cittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAi0J3QtSDRgdCwINC40LfQsdGA0LDQvdC4INC90LjQutCw0LrQstC4INC/0YDQvtC80LXQvdC4IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE0OSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE1MAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICLQktGB0LUg0L7RidC1INC70LjQv9GB0LLQsCDQv9GK0YDQstC+0L3QsNGH0LDQu9C90L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNzYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNjUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAi0KHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINGC0LXQutGD0YnQuNGPINC40L3QtNC10LrRgSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L3QviIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExODUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxODAKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLQndC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1INC90LUg0LzQvtCz0LDRgiDQtNCwINGB0LUg0LfQsNC/0LDQt9GP0YIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTk2IGJ1aWx0aW4vc3Rhc2guYzoxMjA1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjAxCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxNAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICLQodGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC90L4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjMzIGdpdC1sZWdhY3ktc3Rhc2guc2g6MjM0Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgItCh0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L3QviIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyODIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMzgKK21zZ2lkICJDYW4ndCB1c2UgLS1wYXRjaCBhbmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4tLXBhdGNo4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDigJ4tLWluY2x1ZGUtdW50cmFja2Vk4oCcINC4IOKAni0tYWxs4oCcIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI5OAorbXNnaWQgIkRpZCB5b3UgZm9yZ2V0IHRvICdnaXQgYWRkJz8iCittc2dzdHIgItCf0YDQvtCx0LLQsNC50YLQtSDQtNCwINC40LfQv9C+0LvQt9Cy0LDRgtC1IOKAnmdpdCBhZGTigJwiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzEzIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzQ2Cittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICLQndGP0LzQsCDQvdC40LrQsNC60LLQuCDQu9C+0LrQsNC70L3QuCDQv9GA0L7QvNC10L3QuCDQt9CwINGB0LrQsNGC0LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMjAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTEKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAi0KHQutCw0YLQsNCy0LDQvdC10YLQviDQvdC1INC80L7QttC1INC00LAg0YHRgtCw0YDRgtC40YDQsCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMzUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgItCi0LXQutGD0YnQvtGC0L4g0YHRitGB0YLQvtGP0L3QuNC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QsNC30LXQvdC+IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJXMiCittc2dzdHIgItCh0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDRgNCw0LHQvtGC0L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0Lgg0LjQvdC00LXQutGB0LAgZSDQt9Cw0L/QsNC30LXQvdC+OiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0MzAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozODUKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgItCf0YDQvtC80LXQvdC40YLQtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC30LDQvdGD0LvQtdC90LgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDY5IGJ1aWx0aW4vc3Rhc2guYzoxNTM0Cittc2dpZCAia2VlcCBpbmRleCIKK21zZ3N0ciAi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDcxIGJ1aWx0aW4vc3Rhc2guYzoxNTM2Cittc2dpZCAic3Rhc2ggaW4gcGF0Y2ggbW9kZSIKK21zZ3N0ciAi0YHQutCw0YLQsNCy0LDQvdC1INCyINGA0LXQttC40Lwg0LfQsCDQutGA0YrQv9C60LgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDcyIGJ1aWx0aW4vc3Rhc2guYzoxNTM3Cittc2dpZCAicXVpZXQgbW9kZSIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3NCBidWlsdGluL3N0YXNoLmM6MTUzOQorbXNnaWQgImluY2x1ZGUgdW50cmFja2VkIGZpbGVzIGluIHN0YXNoIgorbXNnc3RyICLRgdC60LDRgtCw0LLQsNC90LUg0Lgg0L3QsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3NiBidWlsdGluL3N0YXNoLmM6MTU0MQorbXNnaWQgImluY2x1ZGUgaWdub3JlIGZpbGVzIgorbXNnc3RyICLRgdC60LDRgtCw0LLQsNC90LUg0Lgg0L3QsCDQuNCz0L3QvtGA0LjRgNCw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNjAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBleGVjICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/RitC70L3QuCIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTgKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE5Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MzcKK21zZ2lkICJza2lwIGFuZCByZW1vdmUgYWxsIGxpbmVzIHN0YXJ0aW5nIHdpdGggY29tbWVudCBjaGFyYWN0ZXIiCittc2dzdHIgItC/0YDQvtC/0YPRgdC60LDQvdC1INC90LAg0LLRgdC40YfQutC4INGA0LXQtNC+0LLQtSwg0LrQvtC40YLQviDQt9Cw0L/QvtGH0LLQsNGCINGBIOKAniPigJwiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjQwCittc2dpZCAicHJlcGVuZCBjb21tZW50IGNoYXJhY3RlciBhbmQgc3BhY2UgdG8gZWFjaCBsaW5lIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg4oCeIyDigJwg0LIg0L3QsNGH0LDQu9C+0YLQviDQvdCwINCy0YHQtdC60Lgg0YDQtdC0IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0aW5nIGEgZnVsbCByZWYgbmFtZSwgZ290ICVzIgorbXNnc3RyICLQntGH0LDQutCy0LAg0YHQtSDQv9GK0LvQvdC+INC40LzQtSDQvdCwINGD0LrQsNC30LDRgtC10LssINCwINC90LUg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NAorbXNnaWQgInN1Ym1vZHVsZS0taGVscGVyIHByaW50LWRlZmF1bHQtcmVtb3RlIHRha2VzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorItC60L7QvNCw0L3QtNCw0YLQsCDigJ5wcmludC1kZWZhdWx0LXJlbW90ZeKAnCDQvdCwIOKAnnN1Ym1vZHVsZS0taGVscGVy4oCcINC90LUg0L/RgNC40LXQvNCwINCw0YDQs9GD0LzQtdC90YLQuCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICclcyciCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC80LDRhdC90LUg0LrQvtC80L/QvtC90LXQvdGCINC+0YIg0LDQtNGA0LXRgdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDEwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk1Cittc2dpZCAiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y8g0LfQsCDQvtC/0YDQtdC00LXQu9GP0L3QtdGC0L4g0L3QsCDQvtGC0L3QvtGB0LjRgtC10LvQvdC40YLQtSDQv9GK0YLQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MTUKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PdCf0KrQol0gW9Cf0KrQouKApl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NzIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYzMAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcycgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgItCS0YrQsiDRhNCw0LnQu9CwIOKAni5naXRtb2R1bGVz4oCcINC90LUg0LUg0L7RgtC60YDQuNGCINCw0LTRgNC10YEg0LfQsCDQv9GK0YLRjyDQutGK0Lwg0L/QvtC00LzQvtC00YPQuyDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRlcmluZyAnJXMnXG4iCittc2dzdHIgItCS0LvQuNC30LDQvdC1INCyIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyBmb3IgJXNcbiIKKyIuIgorbXNnc3RyICIiCisi0LjQt9C/0YrQu9C90LXQvdCw0YLQsCDQutC+0LzQsNC90LTQsCDQt9Cw0LLRitGA0YjQuCDRgSDQvdC10L3Rg9C70LXQsiDQuNC30YXQvtC0INC30LAg4oCeJXPigJxcbiIKKyIuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgd2hpbGUgcmVjdXJzaW5nIGluIHRoZSBuZXN0ZWQgIgorInN1Ym1vZHVsZXMgb2YgJXNcbiIKKyIuIgorbXNnc3RyICIiCisi0LjQt9C/0YrQu9C90LXQvdCw0YLQsCDQutC+0LzQsNC90LTQsCDQt9Cw0LLRitGA0YjQuCDRgSDQvdC10L3Rg9C70LXQsiDQuNC30YXQvtC0INC/0YDQuCDQvtCx0YXQvtC20LTQsNC90LUg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LjRgtC1LCAiCisi0LLQu9C+0LbQtdC90Lgg0LIg4oCeJXPigJxcbiIKKyIuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY1Cittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IG9mIGVudGVyaW5nIGVhY2ggc3VibW9kdWxlIGNvbW1hbmQiCittc2dzdHIgItCR0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC30YXQvtC0INC/0YDQuCDQstGK0LLQtdC20LTQsNC90LXRgtC+INC90LAg0LLRgdGP0LrQsCDQutC+0LzQsNC90LTQsCDQt9CwINC/0L7QtNC80L7QtNGD0LvQuCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA2MworbXNnaWQgIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAi0KDQtdC60YPRgNGB0LjQstC90L4g0L7QsdGF0L7QttC00LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9C40YLQtSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU3MgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBmb3JlYWNoIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gPGNvbW1hbmQ+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dINCa0J7QnNCQ0J3QlNCQIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgbG9vayB1cCBjb25maWd1cmF0aW9uICclcycuIEFzc3VtaW5nIHRoaXMgcmVwb3NpdG9yeSBpcyBpdHMgb3duICIKKyJhdXRob3JpdGF0aXZlIHVwc3RyZWFtLiIKK21zZ3N0ciAiIgorItC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeJXPigJwg0LvQuNC/0YHQstCwLiAg0J/RgNC40LXQvNCwINGB0LUsINGH0LUg0YLQvtCy0LAg0YXRgNCw0L3QuNC70LjRidC1INC1INC/0YDQsNCy0LjQu9C90LjRj9GCINC40LfRgtC+0YfQvdC40LogIgorItC30LAg0YHQtdCx0LUg0YHQuC4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGA0LXQs9C40YHRgtGA0LjRgNCw0L3QtSDQvdCwINCw0LTRgNC10YEg0LfQsCDQv9GK0YLRjyDQutGK0Lwg0L/QvtC00LzQvtC00YPQuyDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIgorbXNnc3RyICLQoNC10LPQuNGB0YLRgNC40YDQsNC9INC1INC/0L7QtNC80L7QtNGD0Lsg4oCeJXPigJwgKCVzKSDQt9CwINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogY29tbWFuZCB1cGRhdGUgbW9kZSBzdWdnZXN0ZWQgZm9yIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INC/0YDQtdC/0L7RgNGK0YfQstCwINGB0LUg0YDQtdC20LjQvCDQvdCwINC+0LHQvdC+0LLRj9Cy0LDQvdC1INC30LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdC+INGA0LXQs9C40YHRgtGA0LjRgNCw0L3QtSDQvdCwINGA0LXQttC40LzQsCDQvdCwINC+0LHQvdC+0LLRj9Cy0LDQvdC1INC30LAg0L/RitGC0Y8g0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTAKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAi0JHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC/0YDQuCDQuNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC10YLQviDQvdCwINC/0L7QtNC80L7QtNGD0LsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTUKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPG9wdGlvbnM+XSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgW9Ce0J/QptCY0K/igKZdIFvQn9Cq0KJdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Nzg5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAi0JLRitCyINGE0LDQudC70LAg4oCeLmdpdG1vZHVsZXPigJwg0LvQuNC/0YHQstCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L/RitGC0Y8g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCByZWYgaW5zaWRlIHRoZSBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg0YHQvtGH0LXQvSDQvtGCIOKAnkhFQUTigJwg0LIg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NjQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGA0LXQutGD0YDRgdC40LLQvdC+INC+0LHRhdC+0LbQtNCw0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4OCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5OQorbXNnaWQgIlN1cHByZXNzIHN1Ym1vZHVsZSBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICLQl9Cw0LPQu9GD0YjQsNCy0LDQvdC1INC90LAg0LjQt9GF0L7QtNCwINC30LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4OQorbXNnaWQgIiIKKyJVc2UgY29tbWl0IHN0b3JlZCBpbiB0aGUgaW5kZXggaW5zdGVhZCBvZiB0aGUgb25lIHN0b3JlZCBpbiB0aGUgc3VibW9kdWxlICIKKyJIRUFEIgorbXNnc3RyICIiCisi0JjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviDRg9C60LDQt9Cw0L3QviDQsiDQuNC90LTQtdC60YHQsCwg0LAg0L3QtSDRgtC+0LLQsCDQvtGCINGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcINC90LAgIgorItC/0L7QtNC80L7QtNGD0LvQsCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg5MAorbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAi0YDQtdC60YPRgNGB0LjQstC90L4g0L7QsdGF0L7QttC00LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9C40YLQtSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg5NQorbXNnaWQgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gW9Cf0KrQouKApl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MTkKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8cGF0aD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lINCf0KrQoiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk4MworIywgYy1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICclcydcbiIKK21zZ3N0ciAi0KHQuNC90YXRgNC+0L3QuNC30LjRgNCw0L3QtSDQvdCwINCw0LTRgNC10YHQsCDQvdCwINC/0L7QtNC80L7QtNGD0Lsg0LfQsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRgNC10LPQuNGB0YLRgNC40YDQsNC90LUg0L3QsCDQsNC00YDQtdGBINC30LAg0L/RitGC0Y8g0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi0L7RgtC00LDQu9C10YfQtdC90LjRj9GCINCw0LTRgNC10YEg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7Qu9GD0YfQtdC9IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgItC+0YLQtNCw0LvQtdGH0LXQvdC40Y/RgiDQsNC00YDQtdGBINC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7QvNC10L3QtdC9IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA2MQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBzeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwiCittc2dzdHIgItCR0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQv9GA0Lgg0YHQuNC90YXRgNC+0L3QuNC30LjRgNCw0L3QtdGC0L4g0L3QsCDQv9C+0LTQvNC+0LTRg9C7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA2OAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBb0J/QqtCiXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91ICIKKyJyZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyLQoNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQvdCwINC/0L7QtNC80L7QtNGD0Lsg4oCeJXPigJwg0YHRitC00YrRgNC20LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g4oCeLmdpdOKAnC5cbiIKKyIo0LDQutC+INC40YHQutCw0YLQtSDQtNCwINCz0Lgg0LjQt9GC0YDQuNC10YLQtSDQt9Cw0LXQtNC90L4g0YEg0YbRj9C70LDRgtCwINC40Lwg0LjRgdGC0L7RgNC40Y8sINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCecm0gLXJm4oCcKSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkICIKKyJ0aGVtIgorbXNnc3RyICIiCisi0KDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0L3QsCDQv9C+0LTQvNC+0LTRg9C7IOKAniVz4oCcINGB0YrQtNGK0YDQttCwINC70L7QutCw0LvQvdC4INC/0YDQvtC80LXQvdC4LiAg0JzQvtC20LXRgtC1INC00LAg0LPQuCAiCisi0L7RgtGF0LLRitGA0LvQuNGC0LUg0YEg0L7Qv9GG0LjRj9GC0LAg4oCeLWbigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIKK21zZ3N0ciAi0JTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAniVz4oCcINC1INC40LfRh9C40YHRgtC10L3QsFxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIgorbXNnc3RyICIiCisi0JTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC60YrQvCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGC0LBcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLQv9GA0LDQt9C90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC30LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC90LAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAi0KDQtdCz0LjRgdGC0YDQsNGG0LjRj9GC0LAg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwgKCVzKSDQt9CwINC/0YrRgtGPIOKAniVz4oCcINC1INC/0YDQtdC80LDRhdC90LDRgtCwXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjAwCittc2dpZCAiUmVtb3ZlIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWVzIGV2ZW4gaWYgdGhleSBjb250YWluIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIiIKKyLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDRgNCw0LHQvtGC0L3QuNGC0LUg0LTRitGA0LLQtdGC0LAg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LjRgtC1LCDQtNC+0YDQuCDQutC+0LPQsNGC0L4g0YLQtSDRgdGK0LTRitGA0LbQsNGCICIKKyLQu9C+0LrQsNC70L3QuCDQv9GA0L7QvNC10L3QuCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMDEKK21zZ2lkICJVbnJlZ2lzdGVyIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICLQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINGA0LXQs9C40YHRgtGA0LDRhtC40LjRgtC1INC90LAg0LLRgdC40YfQutC4INC/0L7QtNC80L7QtNGD0LvQuCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMDYKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzxwYXRoPi4uLl1dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBb0J/QqtCi4oCmXV0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjIwCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAi0JjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ4tLWFsbOKAnCwg0LfQsCDQtNCwINC/0YDQtdC80LDRhdC90LXRgtC1INCy0YHQuNGH0LrQuCDQv9C+0LTQvNC+0LTRg9C70LgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjg5Cittc2dpZCAiIgorIkFuIGFsdGVybmF0ZSBjb21wdXRlZCBmcm9tIGEgc3VwZXJwcm9qZWN0J3MgYWx0ZXJuYXRlIGlzIGludmFsaWQuXG4iCisiVG8gYWxsb3cgR2l0IHRvIGNsb25lIHdpdGhvdXQgYW4gYWx0ZXJuYXRlIGluIHN1Y2ggYSBjYXNlLCBzZXRcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSB0byAnaW5mbycgb3IsIGVxdWl2YWxlbnRseSwgY2xvbmUgd2l0aFxuIgorIictLXJlZmVyZW5jZS1pZi1hYmxlJyBpbnN0ZWFkIG9mICctLXJlZmVyZW5jZScuIgorbXNnc3RyICIiCisi0JDQu9GC0LXRgNC90LDRgtC40LLQvdC40Y/RgiDQuNC30YLQvtGH0L3QuNC6LCDQvtC/0YDQtdC00LXQu9C10L0g0L7RgiDQvtCx0YXQstCw0YnQsNGJ0LjRjyDQv9GA0L7QtdC60YIg0LUg0L3QtdC/0YDQsNCy0LjQu9C10L0uXG4iCisi0JfQsCDQtNCwINC/0L7Qt9Cy0L7Qu9C40YLQtSDQvdCwIGdpdCDQtNCwINC60LvQvtC90LjRgNCwINCx0LXQtyDQsNC70YLQtdGA0L3QsNGC0LjQstC10L0g0LjQt9GC0L7Rh9C90LjQuiDQsiDRgtC+0LfQuCDRgdC70YPRh9Cw0LksXG4iCisi0LfQsNC00LDQudGC0LUg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5zdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneeKAnCDQtNCwINC1IOKAnmluZm/igJwg0LjQu9C4XG4iCisi0L/RgNC4INC60LvQvtC90LjRgNCw0L3QtSDQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1yZWZlcmVuY2UtaWYtYWJsZeKAnCDQstC80LXRgdGC0L4g4oCeLS1yZWZlcmVuY2XigJwuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMyOCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBjYW5ub3QgYWRkIGFsdGVybmF0ZTogJXMiCittc2dzdHIgItC60YrQvCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTQvtCx0LDQstC4INCw0LvRgtC10YDQvdCw0YLQuNCy0LXQvSDQuNC30YLQvtGH0L3QuNC6OiAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgaXMgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIiIKKyLQndC10L/QvtC30L3QsNGC0LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCDQt9CwINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCec3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3nigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAi0J3QtdC/0L7Qt9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIg4oCeJXPigJwg0LfQsCDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnnN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbuKAnCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTgKK21zZ2lkICJ3aGVyZSB0aGUgbmV3IHN1Ym1vZHVsZSB3aWxsIGJlIGNsb25lZCB0byIKK21zZ3N0ciAi0LrRitC00LUg0LTQsCDRgdC1INC60LvQvtC90LjRgNCwINC90L7QstC40Y/RgiDQv9C+0LTQvNC+0LTRg9C7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwMQorbXNnaWQgIm5hbWUgb2YgdGhlIG5ldyBzdWJtb2R1bGUiCittc2dzdHIgItC40LzQtSDQvdCwINC90L7QstC40Y8g0L/QvtC00LzQvtC00YPQuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDQKK21zZ2lkICJ1cmwgd2hlcmUgdG8gY2xvbmUgdGhlIHN1Ym1vZHVsZSBmcm9tIgorbXNnc3RyICLQsNC00YDQtdGBLCDQvtGCINC60L7QudGC0L4g0LTQsCDRgdC1INC60LvQvtC90LjRgNCwINC90L7QstC40Y/RgiDQv9C+0LTQvNC+0LTRg9C7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxMgorbXNnaWQgImRlcHRoIGZvciBzaGFsbG93IGNsb25lcyIKK21zZ3N0ciAi0LTRitC70LHQvtGH0LjQvdCwINC90LAg0L/Qu9C40YLQutC40YLQtSDRhdGA0LDQvdC40LvQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDE1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTI0Cittc2dpZCAiZm9yY2UgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QsNC/0YDQtdC00YrQutCwINC90LAg0LrQu9C+0L3QuNGA0LDQvdC10YLQviIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MjYKK21zZ2lkICJkaXNhbGxvdyBjbG9uaW5nIGludG8gbm9uLWVtcHR5IGRpcmVjdG9yeSIKK21zZ3N0ciAi0L/RgNC10LTQvtGC0LLRgNCw0YLRj9Cy0LDQvdC1INC90LAg0LrQu9C+0L3QuNGA0LDQvdC1INCyINC90LXQv9GA0LDQt9C90LAg0LjRgdGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDI0Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8cmVwb3NpdG9yeT5dIFstLW5hbWUgPG5hbWU+XSBbLS1kZXB0aCA8ZGVwdGg+XSBbLS1zaW5nbGUtYnJhbmNoXSAtLXVybCAiCisiPHVybD4gLS1wYXRoIDxwYXRoPiIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg90J/QqtCiXSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlINCl0KDQkNCd0JjQm9CY0KnQlV0gIgorIlstLW5hbWUg0JjQnNCVXSBbLS1kZXB0aCDQlNCq0JvQkdCe0KfQmNCd0JBdIFstLXNpbmdsZS1icmFuY2hdIC0tdXJsINCQ0JTQoNCV0KEgLS1wYXRoINCf0KrQoiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gY3JlYXRlL3VzZSAnJXMnIGluIGFub3RoZXIgc3VibW9kdWxlJ3MgZ2l0IGRpciIKK21zZ3N0ciAiIgorIuKAniVz4oCcINC90LUg0LzQvtC20LUg0L3QuNGC0L4g0LTQsCDRgdC1INGB0YrQt9C00LDQtNC1LCDQvdC40YLQviDQtNCwINGB0LUg0L/QvtC70LfQstCwINCyINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdCwIGdpdCDQvdCwICIKKyLQtNGA0YPQsyDQv9C+0LTQvNC+0LTRg9C7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9uZSBvZiAnJXMnIGludG8gc3VibW9kdWxlIHBhdGggJyVzJyBmYWlsZWQiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQutC70L7QvdC40YDQsNC90LUg0L3QsCDQsNC00YDQtdGB0LAg4oCeJXPigJwg0LIg0L/RitGC0Y8g4oCeJXPigJwg0LrQsNGC0L4g0L/QvtC00LzQvtC00YPQuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlyZWN0b3J5IG5vdCBlbXB0eTogJyVzJyIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC90LUg0LUg0L/RgNCw0LfQvdCwOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBzdWJtb2R1bGUgZGlyZWN0b3J5IGZvciAnJXMnIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7Qu9GD0YfQtdC90LAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0YDQtdC20LjQvCDQvdCwINC+0LHQvdC+0LLRj9Cy0LDQvdC1IOKAniVz4oCcINC30LAg0L/RitGC0Y8g0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisi0J3QsNGB0YLRgNC+0LXQvSDQtSDQvdC10L/RgNCw0LLQuNC70LXQvSDRgNC10LbQuNC8INC90LAg0L7QsdC90L7QstGP0LLQsNC90LUg4oCeJXPigJwg0LfQsCDQv9GK0YLRjyDQutGK0Lwg0L/QvtC00LzQvtC00YPQuyDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyVzJyBub3QgaW5pdGlhbGl6ZWQiCittc2dzdHIgItCf0YrRgtGP0YIg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwg0L3QtSDQtSDQuNC90LjRhtC40LDQu9C40LfQuNGA0LDQvSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MjEKK21zZ2lkICJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAi0JLQtdGA0L7Rj9GC0L3QviDQuNGB0LrQsNGF0YLQtSDQtNCwINC40LfQv9C+0LvQt9Cy0LDRgtC1IOKAnnVwZGF0ZSAtLWluaXTigJw/IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyB1bm1lcmdlZCBzdWJtb2R1bGUgJXMiCittc2dzdHIgItCf0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0L3QtdGB0LvQtdGC0LjRjyDQv9C+0LTQvNC+0LTRg9C7IOKAniVz4oCcIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi0J/RgNC10YHQutCw0YfQsNC90LUg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnLiBSZXRyeSBzY2hlZHVsZWQiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0LXQvSDQvtC/0LjRgiDQt9CwINC60LvQvtC90LjRgNCw0L3QtSDQvdCwIOKAniVz4oCcLiAg0J3QsNGB0YDQvtGH0LXQvSDQtSDQstGC0L7RgNC4INC+0L/QuNGCIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJyBhIHNlY29uZCB0aW1lLCBhYm9ydGluZyIKK21zZ3N0ciAiIgorItCS0YLQvtGA0Lgg0L3QtdGD0YHQv9C10YjQtdC9INC+0L/QuNGCINC30LAg0LrQu9C+0L3QuNGA0LDQvdC1INC90LAg4oCeJXPigJwuICDQlNC10LnRgdGC0LLQuNC10YLQviDRgdC1INC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCwIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwMyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE0OQorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLQv9GK0YIg0LrRitC8INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwNgorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlLCBhY3Jvc3MgbmVzdGVkIHN1Ym1vZHVsZSBib3VuZGFyaWVzIgorbXNnc3RyICLQv9GK0YIg0LrRitC8INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+LCDQv9GA0LXQtyDQs9GA0LDQvdC40YbQuNGC0LUg0L3QsCDQstC70L7QttC10L3QuNGC0LUg0L/QvtC00LzQvtC00YPQu9C4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMAorbXNnaWQgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiCittc2dzdHIgIiIKKyLigJ5yZWJhc2XigJwgKNC/0YDQtdCx0LDQt9C40YDQsNC90LUpLCDigJ5tZXJnZeKAnCAo0YHQu9C40LLQsNC90LUpLCDigJ5jaGVja291dOKAnCAo0LjQt9GC0LXQs9C70Y/QvdC1KSDQuNC70LggIgorIuKAnm5vbmXigJwgKNC90LjRidC+INC00LAg0L3QtSDRgdC1INC/0YDQsNCy0LgpIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxNgorbXNnaWQgIkNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgdHJ1bmNhdGVkIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldmlzaW9ucyIKK21zZ3N0ciAi0J/Qu9C40YLQutC+INC60LvQvtC90LjRgNCw0L3QtSwg0L7RgtGA0Y/Qt9Cw0L3QviDQtNC+INGD0LrQsNC30LDQvdC40Y8g0LHRgNC+0Lkg0LLQtdGA0YHQuNC4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxOQorbXNnaWQgInBhcmFsbGVsIGpvYnMiCittc2dzdHIgItCx0YDQvtC5INC/0LDRgNCw0LvQtdC70L3QuCDQv9GA0L7RhtC10YHQuCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MjEKK21zZ2lkICJ3aGV0aGVyIHRoZSBpbml0aWFsIGNsb25lIHNob3VsZCBmb2xsb3cgdGhlIHNoYWxsb3cgcmVjb21tZW5kYXRpb24iCittc2dzdHIgItC00LDQu9C4INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0LrQu9C+0L3QuNGA0LDQvdC1INC00LAg0LUg0L/Qu9C40YLQutC+LCDQutCw0LrRgtC+INGB0LUg0L/RgNC10L/QvtGA0YrRh9Cy0LAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTIyCittc2dpZCAiZG9uJ3QgcHJpbnQgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90LDQv9GA0LXQtNGK0LrQsCDQvdCwINC60LvQvtC90LjRgNCw0L3QtdGC0L4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTMzCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZS1jbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZS1jbG9uZSBbLS1wcmVmaXg90J/QqtCiXSBb0J/QqtCi4oCmXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5NDYKK21zZ2lkICJiYWQgdmFsdWUgZm9yIHVwZGF0ZSBwYXJhbWV0ZXIiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC/0LDRgNCw0LzQtdGC0YrRgCDQutGK0Lwg0L7Qv9GG0LjRj9GC0LAg4oCeLS11cGRhdGXigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0IGJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0ICIKKyJ0aGUgc3VwZXJwcm9qZWN0IGlzIG5vdCBvbiBhbnkgYnJhbmNoIgorbXNnc3RyICIiCisi0JrQu9C+0L3RitGCINC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcINC1INC90LDRgdGC0YDQvtC10L0g0LTQsCDQvdCw0YHQu9C10LTRj9Cy0LAg0LrQu9C+0L3QsCDQvtGCINC+0LHRhdCy0LDRidCw0YnQuNGPINC/0YDQvtC10LrRgiwgIgorItC90L4g0YLQvtC5INC90LUg0LUg0L3QsCDQvdC40LrQvtC5INC60LvQvtC9IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjExNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGEgcmVwb3NpdG9yeSBoYW5kbGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9C+0LvRg9GH0Lgg0LLRgNGK0LfQutCwINC60YrQvCDRhdGA0LDQvdC40LvQuNGJ0LUg0LfQsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTUwCittc2dpZCAicmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMiCittc2dzdHIgItGA0LXQutGD0YDRgdC40LLQvdC+INC+0LHRhdC+0LbQtNCw0L3QtSDQv9C+0LTQvNC+0LTRg9C70LjRgtC1IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE1NgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBhYnNvcmItZ2l0LWRpcnMgWzxvcHRpb25zPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBhYnNvcmItZ2l0LWRpcnMgW9Ce0J/QptCY0K/igKZdIFvQn9Cq0KLigKZdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIxMgorbXNnaWQgImNoZWNrIGlmIGl0IGlzIHNhZmUgdG8gd3JpdGUgdG8gdGhlIC5naXRtb2R1bGVzIGZpbGUiCittc2dzdHIgItC/0YDQvtCy0LXRgNC60LAg0LTQsNC70Lgg0L/QuNGB0LDQvdC10YLQviDQstGK0LIg0YTQsNC50LvQsCDigJ4uZ2l0bW9kdWxlc+KAnCDQtSDQsdC10LfQvtC/0LDRgdC90L4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjE1Cittc2dpZCAidW5zZXQgdGhlIGNvbmZpZyBpbiB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0L3QsNGB0YLRgNC+0LnQutCwINCy0YrQsiDRhNCw0LnQu9CwIOKAni5naXRtb2R1bGVz4oCcIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIyMAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgPG5hbWU+IFs8dmFsdWU+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyDQmNCc0JUgW9Ch0KLQntCZ0J3QntCh0KJdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIyMQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS11bnNldCA8bmFtZT4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS11bnNldCDQmNCc0JUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjIyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyNDEgZ2l0LXN1Ym1vZHVsZS5zaDoxNzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpcyBpbiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeLmdpdG1vZHVsZXPigJwg0YLRgNGP0LHQstCwINC00LAg0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjkxIGdpdC5jOjQzMyBnaXQuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lc24ndCBzdXBwb3J0IC0tc3VwZXItcHJlZml4IgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC/0L7QtNC00YrRgNC20LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1zdXBlci1wcmVmaXjigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgc3VibW9kdWxlLS1oZWxwZXIgc3ViY29tbWFuZCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQtSDQv9C+0LTQutC+0LzQsNC90LTQsCDQvdCwIOKAnnN1Ym1vZHVsZS0taGVscGVy4oCcIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjgKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIDxuYW1lPiBbPHJlZj5dIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIFvQntCf0KbQmNCv4oCmXSDQmNCc0JUgW9Cj0JrQkNCX0JDQotCV0JtdIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjkKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0gPG5hbWU+IgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0g0JjQnNCVIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwCittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINCz0YDQtdGI0LrQsCDQt9CwINC90LXRgdCy0YrRgNC30LDQvdC4ICjQvdC10YHQuNC80LLQvtC70L3QuCkg0YPQutCw0LfQsNGC0LXQu9C4IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0YHQuNC80LLQvtC70LXQvSDRg9C60LDQt9Cw0YLQtdC7IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICLQutGA0LDRgtC60LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDRg9C60LDQt9Cw0YLQtdC70Y8iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIgorbXNnc3RyICLQv9GA0LjRh9C40L3QsCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAi0L/RgNC40YfQuNC90LAg0LfQsCDQvtCx0L3QvtCy0Y/QstCw0L3QtdGC0L4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjUKK21zZ2lkICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl1cbiIKKyJcdFx0PHRhZ25hbWU+IFs8aGVhZD5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11INCY0JTQldCd0KLQmNCk0JjQmtCQ0KLQntCgX9Cd0JBf0JrQm9Cu0KddIFstZl0gWy1tINCh0KrQntCR0KnQldCd0JjQlSB8IC1GINCk0JDQmdCbXVxuIgorIiAgICAgICAg0JXQotCY0JrQldCiIFvQktCg0KrQpV0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjcKK21zZ2lkICJnaXQgdGFnIC1kIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtZCDQldCi0JjQmtCV0KLigKYiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjgKK21zZ2lkICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPGNvbW1pdD5dIFstLSIKKyJwb2ludHMtYXQgPG9iamVjdD5dXG4iCisiXHRcdFstLWZvcm1hdD08Zm9ybWF0Pl0gWy0tW25vLV1tZXJnZWQgWzxjb21taXQ+XV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIC1sIFstblvQkdCg0J7QmV1dIFstLWNvbnRhaW5zINCf0J7QlNCQ0JLQkNCd0JVdIFstLXBvaW50cy1hdCDQntCR0JXQmtCiXVxuIgorIiAgICAgICAgICAgWy0tZm9ybWF0PdCk0J7QoNCc0JDQol0gWy0tW25vLV1tZXJnZWQgW9Cf0J7QlNCQ0JLQkNCd0JVdXSBb0KjQkNCR0JvQntCd4oCmXSIKKworIzogYnVpbHRpbi90YWcuYzozMAorbXNnaWQgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgWy0tZm9ybWF0PdCk0J7QoNCc0JDQol0g0JXQotCY0JrQldCi4oCmIgorCisjOiBidWlsdGluL3RhZy5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgItC10YLQuNC60LXRgtGK0YIg4oCeJXPigJwg0L3QtSDQtSDQvtGC0LrRgNC40YIuIgorCisjOiBidWlsdGluL3RhZy5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgItCY0LfRgtGA0LjRgiDQtSDQtdGC0LjQutC10YLRitGCIOKAniVz4oCcICjQsdC1IOKAniVz4oCcKVxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQktGK0LLQtdC00LXRgtC1INGB0YrQvtCx0YnQtdC90LjQtSDQt9CwINC10YLQuNC60LXRgtCwLlxuIgorIiAgICAlc1xuIgorItCg0LXQtNC+0LLQtdGC0LUsINC60L7QuNGC0L4g0LfQsNC/0L7Rh9Cy0LDRgiDRgSDigJ4lY+KAnCwg0YnQtSDQsdGK0LTQsNGCINC/0YDQvtC/0YPRgdC90LDRgtC4LlxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91ICIKKyJ3YW50IHRvLlxuIgorbXNnc3RyICIiCisiXG4iCisi0JLRitCy0LXQtNC10YLQtSDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQtdGC0LjQutC10YIuXG4iCisiICAgICVzXG4iCisi0KDQtdC00L7QstC10YLQtSwg0LrQvtC40YLQviDQt9Cw0L/QvtGH0LLQsNGCINGBIOKAniVj4oCcLCDRgdGK0YnQviDRidC1INCx0YrQtNCw0YIg0LLQutC70Y7Rh9C10L3QuCDigJQg0LzQvtC20LUg0LTQsCDQs9C4ICIKKyLQuNC30YLRgNC40LXRgtC1INCy0LjQtS5cbiIKKworIzogYnVpbHRpbi90YWcuYzoxOTgKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICLQtdGC0LjQutC10YLRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LTQv9C40YHQsNC9IgorCisjOiBidWlsdGluL3RhZy5jOjIwMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAi0YTQsNC50LvRitGCINC30LAg0LXRgtC40LrQtdGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC9IgorCisjOiBidWlsdGluL3RhZy5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgY3JlYXRlZCBhIG5lc3RlZCB0YWcuIFRoZSBvYmplY3QgcmVmZXJyZWQgdG8gYnkgeW91ciBuZXcgdGFnIGlzXG4iCisiYWxyZWFkeSBhIHRhZy4gSWYgeW91IG1lYW50IHRvIHRhZyB0aGUgb2JqZWN0IHRoYXQgaXQgcG9pbnRzIHRvLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgdGFnIC1mICVzICVzXnt9IgorbXNnc3RyICIiCisi0KHRitC30LTQsNC70Lgg0YHRgtC1INC90LXQv9GA0Y/QuiDQtdGC0LjQutC10YIg4oCUINC+0LHQtdC60YLRitGCLCDRgdC+0YfQtdC9INC+0YIg0L3QvtCy0L7RgdGK0LfQtNCw0LTQtdC90LjRjyDQtdGC0LjQutC10YIsXG4iCisi0LUg0YHRitGJ0L4g0LXRgtC40LrQtdGCLiAg0JDQutC+INCy0LzQtdGB0YLQviDRgtC+0LLQsCDQuNGB0LrQsNGC0LUg0L3QvtCy0LjRj9GCINC10YLQuNC60LXRgiDQtNCwINGB0L7Rh9C4INC60YrQvCDRgtC+0LLQsCxcbiIKKyLQutC+0LXRgtC+INGB0LUg0YHQvtGH0Lgg0L7RgiDRgdGC0LDRgNC40Y8sINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IHRhZyAtZiAlcyAlc157fSIKKworIzogYnVpbHRpbi90YWcuYzoyMzIKK21zZ2lkICJiYWQgb2JqZWN0IHR5cGUuIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQstC40LQg0L7QsdC10LrRgi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mjg0Cittc2dpZCAibm8gdGFnIG1lc3NhZ2U/IgorbXNnc3RyICLQu9C40L/RgdCy0LAg0YHRitC+0LHRidC10L3QuNC1INC30LAg0LXRgtC40LrQtdGC0LAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgItCh0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQtdGC0LjQutC10YLQsCDQtSDQt9Cw0L/QsNC30LXQvdC+INCy0YrQsiDRhNCw0LnQu9CwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAyCittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40LzQtdC90LDRgtCwINC90LAg0LXRgtC40LrQtdGC0LjRgtC1IgorCisjOiBidWlsdGluL3RhZy5jOjQwNAorbXNnaWQgInByaW50IDxuPiBsaW5lcyBvZiBlYWNoIHRhZyBtZXNzYWdlIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgtC+0LfQuCDQkdCg0J7QmSDRgNC10LTQvtCy0LUg0L7RgiDQstGB0Y/QutC+INGB0YrQvtCx0YnQtdC90LjQtSDQt9CwINC10YLQuNC60LXRgiIKKworIzogYnVpbHRpbi90YWcuYzo0MDYKK21zZ2lkICJkZWxldGUgdGFncyIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LXRgtC40LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA3Cittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgItC/0YDQvtCy0LXRgNC60LAg0L3QsCDQtdGC0LjQutC10YLQuCIKKworIzogYnVpbHRpbi90YWcuYzo0MDkKK21zZ2lkICJUYWcgY3JlYXRpb24gb3B0aW9ucyIKK21zZ3N0ciAi0J7Qv9GG0LjQuCDQv9GA0Lgg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC10YLQuNC60LXRgtC4IgorCisjOiBidWlsdGluL3RhZy5jOjQxMQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAi0LDQvdC+0YLQuNGA0LDQvdC10YLQviDQvdCwINC10YLQuNC60LXRgtC4INC40LfQuNGB0LrQstCwINGB0YrQvtCx0YnQtdC90LjQtSIKKworIzogYnVpbHRpbi90YWcuYzo0MTMKK21zZ2lkICJ0YWcgbWVzc2FnZSIKK21zZ3N0ciAi0KHQqtCe0JHQqdCV0J3QmNCVINC30LAg0LXRgtC40LrQtdGCIgorCisjOiBidWlsdGluL3RhZy5jOjQxNQorbXNnaWQgImZvcmNlIGVkaXQgb2YgdGFnIG1lc3NhZ2UiCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70L3QviDRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0YHRitC+0LHRidC10L3QuNC1INC30LAg0LXRgtC40LrQtdGCIgorCisjOiBidWlsdGluL3RhZy5jOjQxNgorbXNnaWQgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciCittc2dzdHIgItCw0L3QvtGC0LjRgNCw0L0g0LXRgtC40LrQtdGCINGBINC/0L7QtNC/0LjRgSDQv9C+IEdQRyIKKworIzogYnVpbHRpbi90YWcuYzo0MTkKK21zZ2lkICJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINC00YDRg9CzINC60LvRjtGHINC30LAg0L/QvtC00L/QuNGB0LLQsNC90LXRgtC+INC90LAg0LXRgtC40LrQtdGCIgorCisjOiBidWlsdGluL3RhZy5jOjQyMAorbXNnaWQgInJlcGxhY2UgdGhlIHRhZyBpZiBleGlzdHMiCittc2dzdHIgItC30LDQvNGP0L3QsCDQvdCwINC10YLQuNC60LXRgtCwLCDQsNC60L4g0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIxIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OQorbXNnaWQgImNyZWF0ZSBhIHJlZmxvZyIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LbRg9GA0L3QsNC7INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSIKKworIzogYnVpbHRpbi90YWcuYzo0MjMKK21zZ2lkICJUYWcgbGlzdGluZyBvcHRpb25zIgorbXNnc3RyICLQntC/0YbQuNC4INC30LAg0LjQt9Cy0LXQttC00LDQvdC10YLQviDQvdCwINC10YLQuNC60LXRgtC4IgorCisjOiBidWlsdGluL3RhZy5jOjQyNAorbXNnaWQgInNob3cgdGFnIGxpc3QgaW4gY29sdW1ucyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHQv9C40YHRitC60LAg0L3QsCDQtdGC0LjQutC10YLQuNGC0LUg0L/QviDQutC+0LvQvtC90LgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI1IGJ1aWx0aW4vdGFnLmM6NDI3Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDQtdGC0LjQutC10YLQuNGC0LUsINC60L7QuNGC0L4g0YHRitC00YrRgNC20LDRgiDQv9C+0LTQsNCy0LDQvdC10YLQviIKKworIzogYnVpbHRpbi90YWcuYzo0MjYgYnVpbHRpbi90YWcuYzo0MjgKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC10YLQuNC60LXRgtC40YLQtSwg0LrQvtC40YLQviDQvdC1INGB0YrQtNGK0YDQttCw0YIg0L/QvtC00LDQstCw0L3QtdGC0L4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI5Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0YHQu9C10YLQuNGC0LUg0LXRgtC40LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDMwCittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC90LXRgdC70LXRgtC40YLQtSDQtdGC0LjQutC10YLQuCIKKworIzogYnVpbHRpbi90YWcuYzo0MzQKK21zZ2lkICJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0LXRgtC40LrQtdGC0LjRgtC1INC90LAg0J7QkdCV0JrQotCQIgorCisjOiBidWlsdGluL3RhZy5jOjQ4MgorbXNnaWQgIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tLWNvbHVtbuKAnCDQuCDigJ4tbuKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi90YWcuYzo1MDQKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLW7igJwg0LjQt9C40YHQutCy0LAg0YDQtdC20LjQvCDQvdCwINGB0L/QuNGB0YrQui4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA2Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLWNvbnRhaW5z4oCcINC40LfQuNGB0LrQstCwINGA0LXQttC40Lwg0L3QsCDRgdC/0LjRgdGK0LouIgorCisjOiBidWlsdGluL3RhZy5jOjUwOAorbXNnaWQgIi0tbm8tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgItCe0L/RhtC40Y/RgtCwIOKAni1jb250YWluc+KAnCDQuNC30LjRgdC60LLQsCAg0YDQtdC20LjQvCDQvdCwINGB0L/QuNGB0YrQui4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEwCittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgItCe0L/RhtC40Y/RgtCwIOKAni1wb2ludHMtYXTigJwg0LjQt9C40YHQutCy0LAg0YDQtdC20LjQvCDQvdCwINGB0L/QuNGB0YrQui4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEyCittc2dpZCAiLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni0tbWVyZ2Vk4oCcINC4IOKAni0tbm8tbWVyZ2Vk4oCcINC40LfQuNGB0LrQstCw0YIg0YDQtdC20LjQvCDQvdCwINGB0L/QuNGB0YrQui4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTIzCittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tRuKAnCDQuCDigJ4tbeKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQyCittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICLQn9GA0LXQutCw0LvQtdC90L4g0LzQvdC+0LPQviDQsNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICLigJ4lc+KAnCDQtSDQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0LfQsCDQtdGC0LjQutC10YIuIgorCisjOiBidWlsdGluL3RhZy5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi0LXRgtC40LrQtdGC0YrRgiDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogYnVpbHRpbi90YWcuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICLQntCx0L3QvtCy0LXQvSDQtdGC0LjQutC10YIg4oCeJXPigJwgKNCx0LUg4oCeJXPigJwpXG4iCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1MDIKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0KDQsNC30L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L3QsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE1IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgtCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJUZXN0aW5nIG10aW1lIGluICclcycgIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC90LAg0LLRgNC10LzQtdGC0L4g0L3QsCDQv9GA0L7QvNGP0L3QsCAobXRpbWUpINC90LAg0YTQsNC50LvQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNTQKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZmlsZSIKK21zZ3N0ciAiIgorItC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQv9C+0LvRg9GH0LXQvdCwINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0L3QtSDRgdC1INC/0YDQvtC80LXQvdGPINGB0LvQtdC0ICIKKyLQtNC+0LHQsNCy0Y/QvdC10YLQviDQvdCwINC90L7QsiDRhNCw0LnQuyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNjcKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisi0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC/0L7Qu9GD0YfQtdC90LAg0YfRgNC10Lcg4oCec3RhdOKAnCDQt9CwINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdC1INGB0LUg0L/RgNC+0LzQtdC90Y8g0YHQu9C10LQgIgorItC00L7QsdCw0LLRj9C90LXRgtC+INC90LAg0L3QvtCy0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTgwCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIHVwZGF0aW5nIGEgZmlsZSIKK21zZ3N0ciAiIgorItC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQv9C+0LvRg9GH0LXQvdCwINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0YHQtSDQv9GA0L7QvNC10L3RjyDRgdC70LXQtCAiCisi0L7QsdC90L7QstGP0LLQsNC90LXRgtC+INC90LAg0L3QvtCyINGE0LDQudC7IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5MQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciBhZGRpbmcgYSBmaWxlIGluc2lkZSBzdWJkaXJlY3RvcnkiCittc2dzdHIgIiIKKyLQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0L/QvtC70YPRh9C10L3QsCDRh9GA0LXQtyDigJ5zdGF04oCcINC30LAg0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINGB0LUg0L/RgNC+0LzQtdC90Y8g0YHQu9C10LQg0LTQvtCx0LDQstGP0L3QtdGC0L4gIgorItC90LAg0YTQsNC50Lsg0LIg0L/QvtC00LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjAyCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBmaWxlIgorbXNnc3RyICIiCisi0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC/0L7Qu9GD0YfQtdC90LAg0YfRgNC10Lcg4oCec3RhdOKAnCDQt9CwINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdC1INGB0LUg0L/RgNC+0LzQtdC90Y8g0YHQu9C10LQgIgorItC40LfRgtGA0LjQstCw0L3QtdGC0L4g0L3QsCDRhNCw0LnQuyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTUKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorItC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQv9C+0LvRg9GH0LXQvdCwINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0L3QtSDRgdC1INC/0YDQvtC80LXQvdGPINGB0LvQtdC0ICIKKyLQuNC30YLRgNC40LLQsNC90LXRgtC+INC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIyCittc2dpZCAiIE9LIgorbXNnc3RyICIg0JTQvtCx0YDQtSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo1OTEKK21zZ2lkICJnaXQgdXBkYXRlLWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCB1cGRhdGUtaW5kZXggW9Ce0J/QptCY0K/igKZdIFstLV0gW9Ck0JDQmdCb4oCmXSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzQKK21zZ2lkICJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiCittc2dzdHIgIiIKKyLQv9GA0L7QtNGK0LvQttCw0LLQsNC90LUg0YEg0L7QsdC90L7QstGP0LLQsNC90LXRgtC+LCDQtNC+0YDQuCDQutC+0LPQsNGC0L4g0LjQvdC00LXQutGB0YrRgiDRgtGA0Y/QsdCy0LAg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzcKK21zZ2lkICJyZWZyZXNoOiBpZ25vcmUgc3VibW9kdWxlcyIKK21zZ3N0ciAi0L/QvtC00LzQvtC00YPQu9C40YLQtSDQtNCwINGB0LUg0LjQs9C90L7RgNC40YDQsNGCINC/0YDQuCDQvtCx0L3QvtCy0Y/QstCw0L3QtdGC0L4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgwCittc2dpZCAiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiCittc2dzdHIgItC90L7QstC40YLQtSDRhNCw0LnQu9C+0LLQtSDQtNCwINC90LUg0YHQtSDQuNCz0L3QvtGA0LjRgNCw0YIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgyCittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgItGE0LDQudC70L7QstC1INC00LAg0LzQvtCz0LDRgiDQtNCwINC30LDQvNC10L3Rj9GCINC00LjRgNC10LrRgtC+0YDQuNC4INC4INC+0LHRgNCw0YLQvdC+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NAorbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgItC/0YDQtdC00YPQv9GA0LXQttC00LDQstCw0L3QtSDQv9GA0Lgg0LvQuNC/0YHQstCw0YnQuCDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODYKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAi0L7QsdC90L7QstGP0LLQsNC90LUg0LTQvtGA0Lgg0Lgg0LjQvdC00LXQutGB0YrRgiDQtNCwINGB0YrQtNGK0YDQttCwINC90LXRgdC70LXRgtC4INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODkKK21zZ2lkICJyZWZyZXNoIHN0YXQgaW5mb3JtYXRpb24iCittc2dzdHIgItC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC+0YIg0YTRg9C90LrRhtC40Y/RgtCwIOKAnnN0YXTigJwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkzCittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICIiCisi0LrQsNGC0L4g0L7Qv9GG0LjRj9GC0LAg4oCeLS1yZWZyZXNo4oCcLCDQvdC+INC00LAg0YHQtSDQv9GA0L7QstC10YDRj9GCINC4INC+0LHQtdC60YLQuNGC0LUsINC60L7QuNGC0L4g0YHQsCDQsdC40LvQuCDQv9GA0LjQtdGC0LggIgorItC30LAg0L3QtdC/0YDQvtC80LXQvdC10L3QuCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTcKK21zZ2lkICI8bW9kZT4sPG9iamVjdD4sPHBhdGg+IgorbXNnc3RyICLQoNCV0JbQmNCcLNCe0JHQldCa0KIs0J/QqtCiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINC40LfQsdGA0L7QtdC90LjRgtC1INC+0LHQtdC60YLQuCDQutGK0Lwg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwOAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAi0LfQsNC00LDQstCw0L3QtSDQvdCwINGE0LvQsNCzLCDRh9C1INGE0LDQudC70YrRgiDQvdC1INGB0LUg0L/RgNC+0LzQtdC90Y8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxMQorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAi0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDRhNC70LDQs9CwLCDRh9C1INGE0LDQudC70YrRgiDQvdC1INGB0LUg0L/RgNC+0LzQtdC90Y8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgItC30LDQtNCw0LLQsNC90LUg0L3QsCDRhNC70LDQsywg0YfQtSDRhNCw0LnQu9C+0LLQtdGC0LUg0YHQsCDRgdCw0LzQviDQt9CwINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTcKK21zZ2lkICJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIKK21zZ3N0ciAi0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDRhNC70LDQs9CwLCDRh9C1INGE0LDQudC70L7QstC10YLQtSDRgdCwINGB0LDQvNC+INC30LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMAorbXNnaWQgImRvIG5vdCB0b3VjaCBpbmRleC1vbmx5IGVudHJpZXMiCittc2dzdHIgItCx0LXQtyDQv9GA0L7QvNGP0L3QsCDQvdCwINGE0LDQudC70L7QstC10YLQtSDRgdCw0LzQviDQt9CwINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjIKK21zZ2lkICJhZGQgdG8gaW5kZXggb25seTsgZG8gbm90IGFkZCBjb250ZW50IHRvIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDRgdCw0LzQviDQutGK0Lwg0LjQvdC00LXQutGB0LAg0LHQtdC3INC00L7QsdCw0LLRj9C90LUg0LrRitC8INCx0LDQt9Cw0YLQsCDQvtGCINC00LDQvdC90Lgg0LfQsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjQKK21zZ2lkICJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0L3QuNGC0LUg0L/RitGC0LjRidCwLCDQtNC+0YDQuCDQuCDQtNCwINGB0YrRidC10YHRgtCy0YPQstCw0YIg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyNgorbXNnaWQgIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIKK21zZ3N0ciAiIgorItC/0YDQuCDQutC+0LzQsdC40L3QuNGA0LDQvdC1INGBINC+0L/RhtC40Y/RgtCwIOKAni0tc3RkaW7igJwg4oCUINCy0YXQvtC00L3QuNGC0LUg0YDQtdC00L7QstC1INGB0LAg0YDQsNC30LTQtdC70LXQvdC4INGBINC90YPQu9C10LLQuNGPICIKKyLQsdCw0LnRgiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI4Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIHRvIGJlIHVwZGF0ZWQgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINGB0L/QuNGB0YrQutCwINGBINC/0YrRgtC40YnQsCDQt9CwINC+0LHQvdC+0LLRj9Cy0LDQvdC1INC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDMyCittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDQtdC70LXQvNC10L3RgtC40YLQtSDQvtGCINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQg0LrRitC8INC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzYKK21zZ2lkICJyZXBvcHVsYXRlIHN0YWdlcyAjMiBhbmQgIzMgZm9yIHRoZSBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIiIKKyLQstGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQv9GA0LXQtNC4INGB0LvQuNCy0LDQvdC1INC40LvQuCDQvdGD0LbQtNCwINC+0YIg0L7QsdC90L7QstGP0LLQsNC90LUg0LfQsCAiCisi0LjQt9Cx0YDQvtC10L3QuNGC0LUg0L/RitGC0LjRidCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDAKK21zZ2lkICJvbmx5IHVwZGF0ZSBlbnRyaWVzIHRoYXQgZGlmZmVyIGZyb20gSEVBRCIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDRgdCw0LzQviDQvdCwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviwg0LrQvtC10YLQviDRgdC1INGA0LDQt9C70LjRh9Cw0LLQsCDQvtGCINGC0L7QstCwINCyIOKAnkhFQUTigJwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NAorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1LCDQutC+0LjRgtC+INC70LjQv9GB0LLQsNGCINCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDcKK21zZ2lkICJyZXBvcnQgYWN0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC00LXQudGB0YLQstC40Y/RgtCwINC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQuNC30YXQvtC0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDkKK21zZ2lkICIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIKK21zZ3N0ciAiIgorItC30LDQsdGA0LDQstGP0L3QtSDQvdCwINC30LDQv9C40YHQsNC90LDRgtCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L3QtdGA0LDQt9GA0LXRiNC10L3QuCDQutC+0L3RhNC70LjQutGC0Lgg4oCUINC30LAg0LrQvtC80LDQvdC00LjRgtC1ICIKKyLQvtGCINC/0L7RgtGA0LXQsdC40YLQtdC70YHQutC+INC90LjQstC+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTMKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAi0LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAg0LIg0YLQvtC30Lgg0YTQvtGA0LzQsNGCIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTUKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAi0LLQutC70Y7Rh9Cy0LDQvdC1INC40LvQuCDQuNC30LrQu9GO0YfQstCw0L3QtSDQvdCwINGA0LDQt9C00LXQu9GP0L3QtdGC0L4g0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU3Cittc2dpZCAiZW5hYmxlL2Rpc2FibGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICLQstC60LvRjtGH0LLQsNC90LUv0LjQt9C60LvRjtGH0LLQsNC90LUg0L3QsCDQutC10YjQsCDQt9CwINC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1OQorbXNnaWQgInRlc3QgaWYgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICLQv9GA0L7QstC10YDQutCwINC00LDQu9C4INGE0LDQudC70L7QstCw0YLQsCDRgdC40YHRgtC10LzQsCDQv9C+0LTQtNGK0YDQttCwINC60LXRiCDQt9CwINC90LXRgdC70LXQtNC10L3QuCDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDYxCittc2dpZCAiZW5hYmxlIHVudHJhY2tlZCBjYWNoZSB3aXRob3V0IHRlc3RpbmcgdGhlIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKyLQstC60LvRjtGH0LLQsNC90LUg0L3QsCDQutC10YjQsCDQt9CwINC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0LHQtdC3INC/0YDQvtCy0LXRgNC60LAg0L3QsCDRhNCw0LnQu9C+0LLQsNGC0LAg0YHQuNGB0YLQtdC80LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2MworbXNnaWQgIndyaXRlIG91dCB0aGUgaW5kZXggZXZlbiBpZiBpcyBub3QgZmxhZ2dlZCBhcyBjaGFuZ2VkIgorbXNnc3RyICLQt9Cw0L/QuNGBINC90LAg0LjQvdC00LXQutGB0LAsINC00L7RgNC4INC00LAg0L3QtSDQtSDQvtGC0LHQtdC70Y/Qt9Cw0L0g0LrQsNGC0L4g0L/RgNC+0LzQtdC90LXQvSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY1Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgZmlsZSBzeXN0ZW0gbW9uaXRvciIKK21zZ3N0ciAi0LLQutC70Y7Rh9Cy0LDQvdC1INC40LvQuCDQuNC30LrQu9GO0YfQstCw0L3QtSDQvdCwINC90LDQsdC70Y7QtNC10L3QuNC10YLQviDQvdCwINGE0LDQudC70L7QstCw0YLQsCDRgdC40YHRgtC10LzQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY3Cittc2dpZCAibWFyayBmaWxlcyBhcyBmc21vbml0b3IgdmFsaWQiCittc2dzdHIgItC+0YLQsdC10LvRj9C30LLQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUsINGH0LUg0LzQvtCz0LDRgiDQtNCwINGB0LUg0YHQu9C10LTRj9GCINGH0YDQtdC3INGE0LDQudC70L7QstCw0YLQsCDRgdC40YHRgtC10LzQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDcwCittc2dpZCAiY2xlYXIgZnNtb25pdG9yIHZhbGlkIGJpdCIKK21zZ3N0ciAi0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDRhNC70LDQs9CwINC30LAg0YHQu9C10LTQtdC90LXRgtC+INGH0YDQtdC3INGE0LDQudC70L7QstCw0YLQsCDRgdC40YHRgtC10LzQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTczCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZW5hYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisi0J3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5jb3JlLnNwbGl0SW5kZXjigJwg0LUg0LfQsNC00LDQtNC10L3QsCDQvdCwIOKAnmZhbHNl4oCcICjQu9GK0LbQsCkuICDQodC80LXQvdC10YLQtSDRjyDQuNC70Lgg0Y8gIgorItC40LfRgtGA0LjQudGC0LUsINC30LAg0LTQsCDQstC60LvRjtGH0LjRgtC1INGA0LDQt9C00LXQu9GP0L3QtdGC0L4g0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTgyCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisi0J3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5jb3JlLnNwbGl0SW5kZXjigJwg0LUg0LfQsNC00LDQtNC10L3QsCDQvdCwIOKAnnRydWXigJwgKNC40YHRgtC40L3QsCkuICDQodC80LXQvdC10YLQtSDRjyDQuNC70LggIgorItGPINC40LfRgtGA0LjQudGC0LUsINC30LAg0LTQsCDQuNC30LrQu9GO0YfQuNGC0LUg0YDQsNC30LTQtdC70Y/QvdC10YLQviDQvdCwINC40L3QtNC10LrRgdCwLiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk0Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZGlzYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisi0J3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5jb3JlLnVudHJhY2tlZENhY2hl4oCcINC1INC30LDQtNCw0LTQtdC90LAg0L3QsCDigJ50cnVl4oCcICjQuNGB0YLQuNC90LApLiAg0KHQvNC10L3QtdGC0LUg0Y8gIgorItC40LvQuCDRjyDQuNC30YLRgNC40LnRgtC1LCDQt9CwINC00LAg0LjQt9C60LvRjtGH0LjRgtC1INC60LXRiNCwINC30LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk4Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICLQmtC10YjRitGCINC30LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQtSDQuNC30LrQu9GO0YfQtdC9IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMDYKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZW5hYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKyLQndCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmNvcmUudW50cmFja2VkQ2FjaGXigJwg0LUg0LfQsNC00LDQtNC10L3QsCDQvdCwIOKAnmZhbHNl4oCcICjQu9GK0LbQsCkuICDQodC80LXQvdC10YLQtSDRjyAiCisi0LjQu9C4INGPINC40LfRgtGA0LjQudGC0LUsINC30LAg0LTQsCDQstC60LvRjtGH0LjRgtC1INC60LXRiNCwINC30LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICLQmtC10YjRitGCINC30LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQtSDQstC60LvRjtGH0LXQvSDQt9CwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMTgKK21zZ2lkICJjb3JlLmZzbW9uaXRvciBpcyB1bnNldDsgc2V0IGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBlbmFibGUgZnNtb25pdG9yIgorbXNnc3RyICIiCisi0J3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5jb3JlLmZzbW9uaXRvcuKAnCDQvdC1INC1INC30LDQtNCw0LTQtdC90LAuICDQl9Cw0LTQsNC50YLQtSDRjywg0LfQsCDQtNCwINCy0LrQu9GO0YfQuNGC0LUgIgorItGB0LvQtdC00LXQvdC10YLQviDRh9GA0LXQtyDRhNCw0LnQu9C+0LLQsNGC0LAg0YHQuNGB0YLQtdC80LAuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjIKK21zZ2lkICJmc21vbml0b3IgZW5hYmxlZCIKK21zZ3N0ciAi0YHQu9C10LTQtdC90LXRgtC+INGH0YDQtdC3INGE0LDQudC70L7QstCw0YLQsCDRgdC40YHRgtC10LzQsCDQtSDQstC60LvRjtGH0LXQvdC+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjUKK21zZ2lkICIiCisiY29yZS5mc21vbml0b3IgaXMgc2V0OyByZW1vdmUgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGRpc2FibGUgZnNtb25pdG9yIgorbXNnc3RyICIiCisi0J3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5jb3JlLmZzbW9uaXRvcuKAnCDQtSDQt9Cw0LTQsNC00LXQvdCwLiAg0JjQt9GC0YDQuNC50YLQtSDRjywg0LfQsCDQtNCwINC40LfQutC70Y7Rh9C40YLQtSAiCisi0YHQu9C10LTQtdC90LXRgtC+INGH0YDQtdC3INGE0LDQudC70L7QstCw0YLQsCDRgdC40YHRgtC10LzQsC4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyOQorbXNnaWQgImZzbW9uaXRvciBkaXNhYmxlZCIKK21zZ3N0ciAi0YHQu9C10LTQtdC90LXRgtC+INGH0YDQtdC3INGE0LDQudC70L7QstCw0YLQsCDRgdC40YHRgtC10LzQsCDQtSDQuNC30LrQu9GO0YfQtdC90L4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEwCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBb0J7Qn9Cm0JjQr+KApl0gLWQg0JjQnNCVX9Cd0JBf0KPQmtCQ0JfQkNCi0JXQmyBb0KHQotCQ0KDQkF/QodCi0J7QmdCd0J7QodCiXSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBb0J7Qn9Cm0JjQr+KApl0g0JjQnNCVX9Cd0JBf0KPQmtCQ0JfQkNCi0JXQmyDQndCe0JLQkF/QodCi0J7QmdCd0J7QodCiIFvQodCi0JDQoNCQX9Ch0KLQntCZ0J3QntCh0KJdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMgorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgW9Ce0J/QptCY0K/igKZdIC0tc3RkaW4gWy16XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY0Cittc2dpZCAiZGVsZXRlIHRoZSByZWZlcmVuY2UiCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQvdCwINGD0LrQsNC30LDRgtC10LvRjyIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY2Cittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgItC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0JjQnNCV0YLQvl/QndCQX9Cj0JrQkNCX0JDQotCV0JvRjywg0LAg0L3QtSDRgtC+0LLQsCwg0LrRitC8INC60L7QtdGC0L4g0YHQvtGH0LgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NworbXNnaWQgInN0ZGluIGhhcyBOVUwtdGVybWluYXRlZCBhcmd1bWVudHMiCittc2dzdHIgIiIKKyLQvdGP0LrQvtC4INC+0YIg0LXQu9C10LzQtdC90YLQuNGC0LUg0L/QvtC00LDQtNC10L3QuCDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQg0LfQsNCy0YrRgNGI0LLQsNGCINGBINC90YPQu9C10LLQuNGPINC30L3QsNC6ICIKKyLigJ5OVUzigJwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OAorbXNnaWQgInJlYWQgdXBkYXRlcyBmcm9tIHN0ZGluIgorbXNnc3RyICLQuNC30YfQuNGC0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSDQvtGCINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6NworbXNnaWQgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorbXNnc3RyICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNQorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgItC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90LjRgtC1INGE0LDQudC70L7QstC1INC+0YIg0L3Rg9C70LDRgtCwIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MTEKK21zZ2lkICJnaXQgdXBsb2FkLXBhY2sgWzxvcHRpb25zPl0gPGRpcj4iCittc2dzdHIgImdpdCB1cGxvYWQtcmVwYWNrIFvQntCf0KbQmNCv4oCmXSDQlNCY0KDQldCa0KLQntCg0JjQryIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjIzIHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzoxNworbXNnaWQgInF1aXQgYWZ0ZXIgYSBzaW5nbGUgcmVxdWVzdC9yZXNwb25zZSBleGNoYW5nZSIKK21zZ3N0ciAi0LjQt9GF0L7QtCDRgdC70LXQtCDQv9GK0YDQstC+0L3QsNGH0LDQu9C90LDRgtCwINGA0LDQt9C80Y/QvdCwINC90LAg0LfQsNGP0LLQutCwINC4INC+0YLQs9C+0LLQvtGAIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjUKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGluaXRpYWwgcmVmIGFkdmVydGlzZW1lbnQiCittc2dzdHIgItC40LfRhdC+0LQg0YHQu9C10LQg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdCw0YLQsCDQvtCx0Y/QstCwINC90LAg0YPQutCw0LfQsNGC0LXQu9C4IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjcKK21zZ2lkICJkbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyLQtNCwINC90LUg0YHQtSDRgtGK0YDRgdC4IOKAntCU0JjQoNCV0JrQotCe0KDQmNCvLy5naXQv4oCcLCDQsNC60L4g0JTQmNCg0JXQmtCi0J7QoNCY0K/RgtCwINC90LUg0LUg0L/QvtC0INC60L7QvdGC0YDQvtC70LAg0L3QsCBHaXQiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyOQorbXNnaWQgImludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5IgorbXNnc3RyICLRgtGA0LDQvdGB0YTQtdGA0YrRgiDQtNCwINGB0LUg0L/RgNC10YPRgdGC0LDQvdC+0LLQuCDRgdC70LXQtCDRgtC+0LfQuCDQkdCg0J7QmSDRgdC10LrRg9C90LTQuCIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6MTkKK21zZ2lkICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdINCf0J7QlNCQ0JLQkNCd0JXigKYiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY4Cittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjkgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzcKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90LXQvtCx0YDQsNCx0L7RgtC10L3QuNGPINC40LfRhdC+0LQg0L7RgiDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg4oCeZ3Bn4oCcIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NTUKK21zZ2lkICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0g0J/QkNCa0JXQouKApiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY1Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/QvtC00YDQvtCx0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY3Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINGB0YLQsNGC0LjRgdGC0LjQutCw0YLQsCIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MTgKK21zZ2lkICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PdCk0J7QoNCc0JDQol0g0JXQotCY0JrQldCi4oCmIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozNgorbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC90LAg0JXQotCY0JrQldCi0LgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNworbXNnaWQgImdpdCB3b3JrdHJlZSBhZGQgWzxvcHRpb25zPl0gPHBhdGg+IFs8Y29tbWl0LWlzaD5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgYWRkIFvQntCf0KbQmNCv4oCmXSDQn9Cq0KIgW9Cj0JrQkNCX0JDQotCV0Jtf0JrQqtCcX9Cf0J7QlNCQ0JLQkNCd0JVdIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTgKK21zZ2lkICJnaXQgd29ya3RyZWUgbGlzdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxpc3QgW9Ce0J/QptCY0K/igKZdIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTkKK21zZ2lkICJnaXQgd29ya3RyZWUgbG9jayBbPG9wdGlvbnM+XSA8cGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsb2NrIFvQntCf0KbQmNCv4oCmXSBb0J/QqtCiXSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIwCittc2dpZCAiZ2l0IHdvcmt0cmVlIG1vdmUgPHdvcmt0cmVlPiA8bmV3LXBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbW92ZSBb0JTQqtCg0JLQnl0gW9Cd0J7Qkl/Qn9Cq0KJdIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjEKK21zZ2lkICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBwcnVuZSBb0J7Qn9Cm0JjQr+KApl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMgorbXNnaWQgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHRpb25zPl0gPHdvcmt0cmVlPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBb0J7Qn9Cm0JjQr+KApl0gW9CU0KrQoNCS0J5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjMKK21zZ2lkICJnaXQgd29ya3RyZWUgdW5sb2NrIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHVubG9jayBb0J/QqtCiXSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjYwIGJ1aWx0aW4vd29ya3RyZWUuYzo4OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSAnJXMnIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIKK21zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg4oCed29ya3RyZWVzLyVz4oCcOiDQvdC1INC1INC/0YDQsNCy0LjQu9C90LAg0L/QvtC00LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDigJ53b3JrdHJlZXMvJXPigJw6INGE0LDQudC70YrRgiDigJ5naXRkaXLigJwg0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkwIGJ1aWx0aW4vd29ya3RyZWUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHVuYWJsZSB0byByZWFkIGdpdGRpciBmaWxlICglcykiCittc2dzdHIgIiIKKyLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDigJ53b3JrdHJlZXMvJXPigJw6INGE0LDQudC70YrRgiDigJ5naXRkaXLigJwgKCVzKSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBzaG9ydCByZWFkIChleHBlY3RlZCAlPFBSSXVNQVg+IGJ5dGVzLCByZWFkICIKKyIlPFBSSXVNQVg+KSIKK21zZ3N0ciAiIgorItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAnndvcmt0cmVlcy8lc+KAnDog0LjQt9GH0LjRgtCw0L3QtdGC0L4g0LLRitGA0L3QsCDQv9C+LdC80LDQu9C60L4g0LHQsNC50YLQvtCy0LUg0L7RgiDQvtGH0LDQutCy0LDQvdC+0YLQviAiCisiKNC+0YfQsNC60LLQsNC90Lg6ICU8UFJJdU1BWD4g0LHQsNC50YLQsCwg0L/QvtC70YPRh9C10L3QuDogJTxQUkl1TUFYPikiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDigJ53b3JrdHJlZXMvJXPigJw6INC90LXQv9GA0LDQstC40LvQtdC9INGE0LDQudC7IOKAnmdpdGRpcuKAnCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIHBvaW50cyB0byBub24tZXhpc3RlbnQgbG9jYXRpb24iCittc2dzdHIgIiIKKyLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDigJ53b3JrdHJlZXMvJXPigJw6INGE0LDQudC70YrRgiDigJ5naXRkaXLigJwg0YHQvtGH0Lgg0L3QtdGB0YrRidC10YHRgtCy0YPQstCw0YnQviAiCisi0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAi0LTQvtC60LvQsNC00LLQsNC90LUg0L3QsCDQvtC60LDRgdGC0YDQtdC90LjRgtC1INGA0LDQsdC+0YLQvdC4INC00YrRgNCy0LXRgtCwIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY3Cittc2dpZCAiZXhwaXJlIHdvcmtpbmcgdHJlZXMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgItC+0LHRj9Cy0Y/QstCw0L3QtSDQvdCwINGA0LDQsdC+0YLQvdC40YLQtSDQutC+0L/QuNGPINC/0L4t0YHRgtCw0YDQuCDQvtGCINGC0L7QstCwINCS0KDQldCc0JUg0LfQsCDQvtGB0YLQsNGA0LXQu9C4IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIuKAniVz4oCcINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZS1hZGQgd29ya3RyZWUgJyVzJyIKK21zZ3N0ciAi0LTRitGA0LLQvtGC0L4g4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC00L7QsdCw0LLQtdC90L4g0L3QsNC90L7QstC+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgbG9ja2VkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mIC1mJyB0byBvdmVycmlkZSwgb3IgJ3VubG9jaycgYW5kICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKyLigJ4lc+KAnCDQu9C40L/RgdCy0LAsINC90L4g0LUg0LfQsNC60LvRjtGH0LXQvdC+INGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4uXG4iCisi0JfQsCDQuNC30YDQuNGH0L3QviDQt9Cw0LTQsNCy0LDQvdC1INC/0L7Qu9C30LLQsNC50YLQtSDigJ5hZGQgLWbigJwsINCwINC30LAg0LjQt9GH0LjRgdGC0LLQsNC90LUg4oCUIOKAnnBydW5l4oCcINC40LvQuCAiCisi4oCecmVtb3Zl4oCcIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgYWxyZWFkeSByZWdpc3RlcmVkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mJyB0byBvdmVycmlkZSwgb3IgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIuKAniVz4oCcINC70LjQv9GB0LLQsCwg0L3QviDQtSDRgNC10LPQuNGB0YLRgNC40YDQsNC90L4g0LrQsNGC0L4g0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQvi5cbiIKKyLQl9CwINC40LfRgNC40YfQvdC+INC30LDQtNCw0LLQsNC90LUg0L/QvtC70LfQstCw0LnRgtC1IOKAnmFkZCAtZuKAnCwg0LAg0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDigJQg4oCecHJ1bmXigJwg0LjQu9C4ICIKKyLigJ5yZW1vdmXigJwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkgb2YgJyVzJyIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC90LAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzIgYnVpbHRpbi93b3JrdHJlZS5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKG5ldyBicmFuY2ggJyVzJykiCittc2dzdHIgItCf0YDQuNCz0L7RgtCy0Y/QvdC1INC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4gKNC90L7QsiDQutC70L7QvSDigJ4lc+KAnCkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChyZXNldHRpbmcgYnJhbmNoICclcyc7IHdhcyBhdCAlcykiCittc2dzdHIgIiIKKyLQn9GA0LjQs9C+0YLQstGP0L3QtSDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+ICjQt9Cw0L3Rg9C70Y/QstCw0L3QtSDQvdCwINC60LvQvtC90LAg4oCeJXPigJwsINC60L7QudGC0L4g0YHQvtGH0LXRiNC1INC60YrQvCAiCisi4oCeJXPigJwpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoY2hlY2tpbmcgb3V0ICclcycpIgorbXNnc3RyICLQn9GA0LjQs9C+0YLQstGP0L3QtSDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+ICjQuNC30YLQtdCz0LvRj9C90LUg0L3QsCDigJ4lc+KAnCkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChkZXRhY2hlZCBIRUFEICVzKSIKK21zZ3N0ciAi0J/QvtC00LPQvtGC0LLRj9C90LUg0L3QsCDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+ICjRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcINC90LUg0YHQstGK0YDQt9Cw0L06ICVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5MAorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGV2ZW4gaWYgYWxyZWFkeSBjaGVja2VkIG91dCBpbiBvdGhlciB3b3JrdHJlZSIKK21zZ3N0ciAi0JjQt9GC0LXQs9C70Y/QvdC1INCa0JvQntCd0LAsINC00L7RgNC4INC4INC00LAg0LUg0LjQt9GC0LXQs9C70LXQvSDQsiDQtNGA0YPQs9C+INGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTMKK21zZ2lkICJjcmVhdGUgYSBuZXcgYnJhbmNoIgorbXNnc3RyICLRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQvdC+0LIg0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTUKK21zZ2lkICJjcmVhdGUgb3IgcmVzZXQgYSBicmFuY2giCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtSDQuNC70Lgg0LfQsNC90YPQu9GP0LLQsNC90LUg0L3QsCDQutC70L7QvdC4IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk3Cittc2dpZCAicG9wdWxhdGUgdGhlIG5ldyB3b3JraW5nIHRyZWUiCittc2dzdHIgItC/0L7QtNCz0L7RgtCy0Y/QvdC1INC90LAg0L3QvtCy0L7RgtC+INGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTgKK21zZ2lkICJrZWVwIHRoZSBuZXcgd29ya2luZyB0cmVlIGxvY2tlZCIKK21zZ3N0ciAi0L3QvtCy0L7RgtC+INGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4g0LTQsCDQvtGB0YLQsNC90LUg0LfQsNC60LvRjtGH0LXQvdC+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAxCittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtYnJhbmNoKDEpKSIKK21zZ3N0ciAi0LfQsNC00LDQstCw0L3QtSDQvdCwINGA0LXQttC40LzQsCDQvdCwINGB0LvQtdC00LXQvdC1ICjQstC40LYgZ2l0LWJyYW5jaCgxKSkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDQKK21zZ2lkICJ0cnkgdG8gbWF0Y2ggdGhlIG5ldyBicmFuY2ggbmFtZSB3aXRoIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi0L7Qv9C40YIg0LfQsCDQvdCw0L/QsNGB0LLQsNC90LUg0L3QsCDQuNC80LXRgtC+INC90LAg0L3QvtCy0LjRjyDQutC70L7QvSDRgSDRgtC+0LLQsCDQvdCwINGB0LvQtdC00Y/RiSDQutC70L7QvSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUxMgorbXNnaWQgIi1iLCAtQiwgYW5kIC0tZGV0YWNoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni1i4oCcLCDigJ4tQuKAnCDQuCDigJ4tLWRldGFjaOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCDQtdC00L3QsCDRgSDQtNGA0YPQs9CwIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTczCittc2dpZCAiLS1bbm8tXXRyYWNrIGNhbiBvbmx5IGJlIHVzZWQgaWYgYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQiCittc2dzdHIgIuKAni0tW25vLV10cmFja+KAnCDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDRgdCw0LzQviDQv9GA0Lgg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC90L7QsiDQutC70L7QvSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY3MworbXNnaWQgInJlYXNvbiBmb3IgbG9ja2luZyIKK21zZ3N0ciAi0L/RgNC40YfQuNC90LAg0LfQsCDQt9Cw0LrQu9GO0YfQstCw0L3QtSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4NSBidWlsdGluL3dvcmt0cmVlLmM6NzE4IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTIKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4NyBidWlsdGluL3dvcmt0cmVlLmM6NzIwCittc2dpZCAiVGhlIG1haW4gd29ya2luZyB0cmVlIGNhbm5vdCBiZSBsb2NrZWQgb3IgdW5sb2NrZWQiCittc2dzdHIgItCe0YHQvdC+0LLQvdC+0YLQviDQtNGK0YDQstC+INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQutC70Y7Rh9C4INC40LvQuCDQt9Cw0LrQu9GO0YfQuCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkLCByZWFzb246ICVzIgorbXNnc3RyICLigJ4lc+KAnCDQstC10YfQtSDQtSDQt9Cw0LrQu9GO0YfQtdC90L4sINC30LDRidC+0YLQviDigJ4lc+KAnCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkIgorbXNnc3RyICLigJ4lc+KAnCDQstC10YfQtSDQtSDQt9Cw0LrQu9GO0YfQtdC90L4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgbG9ja2VkIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC1INC30LDQutC70Y7Rh9C10L3QviIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc2MworbXNnaWQgIndvcmtpbmcgdHJlZXMgY29udGFpbmluZyBzdWJtb2R1bGVzIGNhbm5vdCBiZSBtb3ZlZCBvciByZW1vdmVkIgorbXNnc3RyICIiCisi0L3QtSDQvNC+0LbQtSDQtNCwINC80LXRgdGC0LjRgtC1INC40LvQuCDQuNC30YLRgNC40LLQsNGC0LUg0YDQsNCx0L7RgtC90Lgg0LTRitGA0LLQtdGC0LAsINCyINC60L7QuNGC0L4g0LjQvNCwINC/0L7QtNC80L7QtNGD0LvQuCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc3MQorbXNnaWQgImZvcmNlIG1vdmUgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgIiIKKyLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L/RgNC10LzQtdGB0YLQstCw0L3QtSwg0LTQvtGA0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0LTQsCDQvdC1INC1INGH0LjRgdGC0L4g0LjQu9C4INC00LAg0LUgIgorItC30LDQutC70Y7Rh9C10L3QviIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5NCBidWlsdGluL3dvcmt0cmVlLmM6OTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYSBtYWluIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi4oCeJXPigJwg0LUg0L7RgdC90L7QstC90L4g0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmlndXJlIG91dCBkZXN0aW5hdGlvbiBuYW1lIGZyb20gJyVzJyIKK21zZ3N0ciAi0LjQvNC10YLQviDQvdCwINGG0LXQu9GC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7Qv9GA0LXQtNC10LvQuCDQvtGCIOKAniVz4oCcIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInRhcmdldCAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLRhtC10LvRgtCwIOKAniVz4oCcINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisi0L3QtSDQvNC+0LbQtSDQtNCwINC/0YDQtdC80LXRgdGC0LjRgtC1INC30LDQutC70Y7Rh9C10L3QviDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+LCDQv9GA0LjRh9C40L3QsCDQt9CwINC30LDQutC70Y7Rh9Cy0LDQvdC10YLQvjogJXNcbiIKKyLQuNC70Lgg0LPQviDQvtGC0LrQu9GO0YfQtdGC0LUsINC40LvQuCDQs9C+INC/0YDQtdC80LXRgdGC0LXRgtC1INC/0YDQuNC90YPQtNC40YLQtdC70L3QviDRgSDigJ5tb3ZlIC1mIC1m4oCcIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODE1Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorItC90LUg0LzQvtC20LUg0LTQsCDQv9GA0LXQvNC10YHRgtC40YLQtSDQt9Cw0LrQu9GO0YfQtdC90L4g0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQvjpcbiIKKyLQuNC70Lgg0LPQviDQvtGC0LrQu9GO0YfQtdGC0LUsINC40LvQuCDQs9C+INC/0YDQtdC80LXRgdGC0LXRgtC1INC/0YDQuNC90YPQtNC40YLQtdC70L3QviDRgSDigJ5tb3ZlIC1mIC1m4oCcIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODE4CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICIiCisi0L/RgNC+0LLQtdGA0LrQuNGC0LUg0YHQsCDQvdC10YPRgdC/0LXRiNC90LgsINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LXQvNC10YHRgtC10L3QvjogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG1vdmUgJyVzJyB0byAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQvNC10YHRgtC4INCyIOKAniVz4oCcIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJ2dpdCBzdGF0dXMnIG9uICclcyciCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDQuNC30L/RitC70L3QuCDigJ5naXQgc3RhdHVz4oCcINCy0YrRgNGF0YMg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjb250YWlucyBtb2RpZmllZCBvciB1bnRyYWNrZWQgZmlsZXMsIHVzZSAtLWZvcmNlIHRvIGRlbGV0ZSBpdCIKK21zZ3N0ciAiIgorIuKAniVz4oCcINGB0YrQtNGK0YDQttCwINC/0YDQvtC80LXQvdC10L3QuCDQuNC70Lgg0L3QvtCy0Lgg0YTQsNC50LvQvtCy0LUsINC30LAg0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC40LfRgtGA0LjQstCw0L3QtSDQtSAiCisi0L3QtdC+0LHRhdC+0LTQuNC80LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1mb3JjZeKAnCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICIiCisi0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBzdGF0dXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0YrQu9C90Lgg0LfQsCDigJ4lc+KAnCwg0LrQvtC0INC30LAg0LPRgNC10YjQutCwOiAlZCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkwMworbXNnaWQgImZvcmNlIHJlbW92YWwgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgIiIKKyLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0LjQt9GC0YDQuNCy0LDQvdC1LCDQtNC+0YDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQtNCwINC90LUg0LUg0YfQuNGB0YLQviDQuNC70Lgg0LTQsCDQtSDQt9Cw0LrQu9GO0YfQtdC90L4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXNcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisi0L3QtSDQvNC+0LbQtSDQtNCwINC40LfRgtGA0LjQtdGC0LUg0LfQsNC60LvRjtGH0LXQvdC+INGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4sINC/0YDQuNGH0LjQvdCwINC30LAg0LfQsNC60LvRjtGH0LLQsNC90LXRgtC+OiAlc1xuIgorItC40LvQuCDQs9C+INC+0YLQutC70Y7Rh9C10YLQtSwg0LjQu9C4INCz0L4g0LjQt9GC0YDQuNC50YLQtSDQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0YEg4oCecmVtb3ZlIC1mIC1m4oCcIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI4Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyLQvdC1INC80L7QttC1INC00LAg0LjQt9GC0YDQuNC10YLQtSDQt9Cw0LrQu9GO0YfQtdC90L4g0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQvjpcbiIKKyLQuNC70Lgg0LPQviDQvtGC0LrQu9GO0YfQtdGC0LUsINC40LvQuCDQs9C+INC40LfRgtGA0LjQudGC0LUg0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INGBIOKAnnJlbW92ZSAtZiAtZuKAnCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IHJlbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICLQv9GA0L7QstC10YDQutC40YLQtSDRgdCwINC90LXRg9GB0L/QtdGI0L3QuCwg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgtC+OiAlcyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MTUKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PdCf0KDQldCk0JjQmtChL10iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI4Cittc2dpZCAiPHByZWZpeD4vIgorbXNnc3RyICLQn9Cg0JXQpNCY0JrQoS8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI5Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICLQt9Cw0L/QuNGBINC90LAg0L7QsdC10LrRgi3QtNGK0YDQstC+INC30LAg0L/QvtC00LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC30LDQv9C+0YfQstCw0YnQsCDRgSDRgtCw0LfQuCDQn9Cg0JXQpNCY0JrQoSIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MzEKK21zZ2lkICJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIgorbXNnc3RyICLRgdCw0LzQviDQt9CwINC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LPRgNC10YjQutC4IgorCisjOiBmYXN0LWltcG9ydC5jOjMxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgJ21hcmsnIGNvbW1hbmQsIGdvdCAlcyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCwINGB0LUg0LrQvtC80LDQvdC00LAg4oCebWFya+KAnCwg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvdCwOiDigJ4lc+KAnCIKKworIzogZmFzdC1pbXBvcnQuYzozMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICd0bycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICLQvtGH0LDQutCy0LAg0YHQtSDQutC+0LzQsNC90LTQsCDigJ50b+KAnCwg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvdCwOiDigJ4lc+KAnCIKKworIzogZmFzdC1pbXBvcnQuYzozMjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZlYXR1cmUgJyVzJyBmb3JiaWRkZW4gaW4gaW5wdXQgd2l0aG91dCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIKK21zZ3N0ciAi4oCeJXPigJwg0LjQt9C40YHQutCy0LAg0LjQt9GA0LjRh9C90L7RgtC+INC30LDQtNCw0LLQsNC90LUg0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tLWFsbG93LXVuc2FmZS1mZWF0dXJlc+KAnCIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGVybWlzc2lvbnMgb24geW91ciBzb2NrZXQgZGlyZWN0b3J5IGFyZSB0b28gbG9vc2U7IG90aGVyXG4iCisidXNlcnMgbWF5IGJlIGFibGUgdG8gcmVhZCB5b3VyIGNhY2hlZCBjcmVkZW50aWFscy4gQ29uc2lkZXIgcnVubmluZzpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCittc2dzdHIgIiIKKyLQn9GA0LDQstCw0YLQsCDQt9CwINC00L7RgdGC0YrQvyDQtNC+INC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQt9CwINC/0YDQvtCz0YDQsNC80L3QuNGC0LUg0LPQvdC10LfQtNCwINGB0LAg0L/RgNC10LrQsNC70LXQvdC+ICIKKyLRgdCy0L7QsdC+0LTQvdC4IOKAlFxuIgorItC00YDRg9Cz0LjRgtC1INC/0L7RgtGA0LXQsdC40YLQtdC70Lgg0LzQvtCz0LDRgiDQtNCwINC/0L7Qu9GD0YfQsNGCINC00L7RgdGC0YrQvyDQtNC+INC60LXRiNC40YDQsNC90LjRgtC1INCy0Lgg0L/QsNGA0L7Qu9C4LiAg0JfQsCDQtNCwXG4iCisi0LrQvtGA0LjQs9C40YDQsNGC0LUg0YLQvtCy0LAsINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgY2htb2QgMDcwMCAlcyIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjcyCittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRitC+0LHRidC10L3QuNGP0YLQsCDQt9CwINGC0YDQsNGB0LjRgNCw0L3QtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdCw0YLQsCDQs9GA0LXRiNC60LAiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIG5vdCBtYXJrZWQgcmVhY2hhYmxlIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQvdC1INC1INC+0YLQsdC10LvRj9C30LDQvdC+INC60LDRgtC+INC00L7RgdGC0LjQttC40LzQviIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE2MgorbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgbWFya2VkIHJlYWNoYWJsZSIKK21zZ3N0ciAi0L/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0L/QvtC00LDQstCw0L3QuNGPINGB0LAg0L7RgtCx0LXQu9GP0LfQsNC90Lgg0LrQsNGC0L4g0LTQvtGB0YLQuNC20LjQvNC4IgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6NworbXNnaWQgInRlc3QtdG9vbCBzZXJ2ZS12MiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAidGVzdC10b29sIHNlcnZlLXYyIFvQntCf0KbQmNCv4oCmXSIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE5Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBhZHZlcnRpc2luZyBjYXBhYmlsaXRpZXMiCittc2dzdHIgItC40LfRhdC+0LQg0YHQu9C10LQg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdCw0YLQsCDQvtCx0Y/QstCwINC90LAg0LLRitC30LzQvtC20L3QvtGB0YLQuNGC0LUiCisKKyM6IGdpdC5jOjI3Cittc2dpZCAiIgorImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPHBhdGg+XSBbLWMgPG5hbWU+PTx2YWx1ZT5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTxwYXRoPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tcGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tIgorImJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPTxwYXRoPl0gWy0td29yay10cmVlPTxwYXRoPl0gWy0tbmFtZXNwYWNlPTxuYW1lPl1cbiIKKyIgICAgICAgICAgIDxjb21tYW5kPiBbPGFyZ3M+XSIKK21zZ3N0ciAiIgorImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMg0J/QqtCiXSBbLWMg0JjQnNCVPdCh0KLQntCZ0J3QntCh0KJdXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPdCf0KrQol1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tcGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtLW5vLXBhZ2VyXSBbLS1uby1yZXBsYWNlLW9iamVjdHNdIFstLWJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPdCf0KrQol0gWy0td29yay10cmVlPdCf0KrQol0gWy0tbmFtZXNwYWNlPdCY0JzQlV1cbiIKKyIgICAgICAgICAgINCa0J7QnNCQ0J3QlNCQIFvQkNCg0JPigKZdIgorCisjOiBnaXQuYzozNAorbXNnaWQgIiIKKyInZ2l0IGhlbHAgLWEnIGFuZCAnZ2l0IGhlbHAgLWcnIGxpc3QgYXZhaWxhYmxlIHN1YmNvbW1hbmRzIGFuZCBzb21lXG4iCisiY29uY2VwdCBndWlkZXMuIFNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyBvciAnZ2l0IGhlbHAgPGNvbmNlcHQ+J1xuIgorInRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIG9yIGNvbmNlcHQuXG4iCisiU2VlICdnaXQgaGVscCBnaXQnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIuKAnmdpdCBoZWxwIC1h4oCcINC40LfQstC10LbQtNCwINC90LDQu9C40YfQvdC40YLQtSDQv9C+0LTQutC+0LzQsNC90LTQuCwg0LAg4oCeZ2l0IGhlbHAgLWfigJwg0LjQt9Cy0LXQttC00LAgIgorItC90LDQu9C40YfQvdC40YLQtVxuIgorItCy0YrQstC10LTQtdC90LjRjy4gINCX0LAg0L/QvtC80L7RiSDQt9CwINGB0L/QtdGG0LjRhNC40YfQvdCwINCa0J7QnNCQ0J3QlNCQINC/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgaGVscCDQmtCe0JzQkNCd0JTQkOKAnCwg0LAgIgorItC30LBcbiIKKyLQvdGP0LrQvtC1INC+0L/RgNC10LTQtdC70LXQvdC+INCf0J7QndCv0KLQmNCVINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGhlbHAg0J/QntCd0K/QotCY0JXigJwuICDQl9CwINC/0YDQtdCz0LvQtdC0INC90LBcbiIKKyLRgdC40YHRgtC10LzQsNGC0LAg0LfQsCDQv9C+0LzQvtGJINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGhlbHAgZ2l04oCcLiIKKworIzogZ2l0LmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS1naXQtZGlyXG4iCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tZ2l0LWRpcuKAnCDQuNC30LjRgdC60LLQsCDQtNC40YDQtdC60YLQvtGA0LjRj1xuIgorCisjOiBnaXQuYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbmFtZXNwYWNlIGdpdmVuIGZvciAtLW5hbWVzcGFjZVxuIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLW5hbWVzcGFjZeKAnCDQuNC30LjRgdC60LLQsCDQuNC80LVcbiIKKworIzogZ2l0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS13b3JrLXRyZWVcbiIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS13b3JrLXRyZWXigJwg0LjQt9C40YHQutCy0LAg0LTQuNGA0LXQutGC0L7RgNC40Y9cbiIKKworIzogZ2l0LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByZWZpeCBnaXZlbiBmb3IgLS1zdXBlci1wcmVmaXhcbiIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1zdXBlci1wcmVmaXjigJwg0LjQt9C40YHQutCy0LAg0L/RgNC10YTQuNC60YFcbiIKKworIzogZ2l0LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi1jIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIHN0cmluZ1xuIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tY+KAnCDQuNC30LjRgdC60LLQsCDQvdC40Lcg0LfQsCDQvdCw0YHRgtGA0L7QudC60LBcbiIKKworIzogZ2l0LmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLUNcbiIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLUPigJwg0LjQt9C40YHQutCy0LAg0LTQuNGA0LXQutGC0L7RgNC40Y9cbiIKKworIzogZ2l0LmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAlc1xuIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0L7Qv9GG0LjRjzog4oCeJXPigJxcbiIKKworIzogZ2l0LmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIgorbXNnc3RyICLQv9GA0Lgg0LfQsNC80LXRgdGC0LLQsNC90LXRgtC+INC90LAg0L/RgdC10LLQtNC+0L3QuNC8IOKAniVz4oCcOiDigJ4lc+KAnCIKKworIzogZ2l0LmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbGlhcyAnJXMnIGNoYW5nZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuIgorIllvdSBjYW4gdXNlICchZ2l0JyBpbiB0aGUgYWxpYXMgdG8gZG8gdGhpcyIKK21zZ3N0ciAiIgorItC/0YHQtdCy0LTQvtC90LjQvNGK0YIg4oCeJXPigJwg0L/RgNC+0LzQtdC90Y8g0L/RgNC+0LzQtdC90LvQuNCy0Lgg0L3QsCDRgdGA0LXQtNCw0YLQsC5cbiIKKyLQl9CwINGC0L7QstCwINC80L7QttC1INC00LAg0L/QvtC70LfQstCw0YLQtSDigJ4hZ2l04oCcINCyINC/0YHQtdCy0LTQvtC90LjQvNCwIgorCisjOiBnaXQuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgYWxpYXMgZm9yICVzIgorbXNnc3RyICLQv9GA0LDQt9C10L0g0L/RgdC10LLQtNC+0L3QuNC8INC30LAg4oCeJXPigJwiCisKKyM6IGdpdC5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgYWxpYXM6ICVzIgorbXNnc3RyICLQt9Cw0YbQuNC60LvQtdC9INC/0YHQtdCy0LTQvtC90LjQvDog4oCeJXPigJwiCisKKyM6IGdpdC5jOjQ1OQorbXNnaWQgIndyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC30LDQv9C40YEg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINC40LfRhdC+0LQiCisKKyM6IGdpdC5jOjQ2MQorbXNnaWQgInVua25vd24gd3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdCwINCz0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNC/0LjRgSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LjQt9GF0L7QtCIKKworIzogZ2l0LmM6NDYzCittc2dpZCAiY2xvc2UgZmFpbGVkIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQt9Cw0YLQstCw0YDRj9C90LUg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINC40LfRhdC+0LQiCisKKyM6IGdpdC5jOjc5MworIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBsb29wIGRldGVjdGVkOiBleHBhbnNpb24gb2YgJyVzJyBkb2VzIG5vdCB0ZXJtaW5hdGU6JXMiCittc2dzdHIgItC30LDRhtC40LrQu9GP0L3QtSDQsiDQv9GB0LXQstC00L7QvdC40LzQuNGC0LU6INC30LDQvNC10YHRgtCy0LDQvdC40Y/RgtCwINC90LAg4oCeJXPigJwg0L3QtSDQv9GA0LjQutC70Y7Rh9Cy0LDRgjolcyIKKworIzogZ2l0LmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgJXMgYXMgYSBidWlsdGluIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtCx0YDQsNCx0L7RgtC4INC60LDRgtC+INCy0LPRgNCw0LTQtdC90LAg0LrQvtC80LDQvdC00LAiCisKKyM6IGdpdC5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidXNhZ2U6ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyLRg9C/0L7RgtGA0LXQsdCwOiAlc1xuIgorIlxuIgorCisjOiBnaXQuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwYW5zaW9uIG9mIGFsaWFzICclcycgZmFpbGVkOyAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kXG4iCittc2dzdHIgIiIKKyLQvdC10YPRgdC/0LXRiNC90L4g0LfQsNC80LXRgdGC0LLQsNC90LUg0L3QsCDQv9GB0LXQstC00L7QvdC40LzQsCDigJ4lc+KAnCDigJQg0YDQtdC30YPQu9GC0LDRgtGK0YIg4oCeJXPigJwg0L3QtSDQtSDQutC+0LzQsNC90LTQsCDQvdCwICIKKyJnaXRcbiIKKworIzogZ2l0LmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gY29tbWFuZCAnJXMnOiAlc1xuIgorbXNnc3RyICLQutC+0LzQsNC90LTQsNGC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0YrQu9C90Lg6ICVzXG4iCisKKyM6IGh0dHAuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibmVnYXRpdmUgdmFsdWUgZm9yIGh0dHAucG9zdGJ1ZmZlcjsgZGVmYXVsdGluZyB0byAlZCIKK21zZ3N0ciAiIgorItC+0YLRgNC40YbQsNGC0LXQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwIOKAnmh0dHAucG9zdGJ1ZmZlcuKAnC4gINCp0LUg0YHQtSDQv9C+0LvQt9Cy0LAg0YHRgtCw0L3QtNCw0YDRgtC90LDRgtCwOiAlZCIKKworIzogaHR0cC5jOjM5OQorbXNnaWQgIkRlbGVnYXRpb24gY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMjIuMCIKK21zZ3N0ciAi0KPQv9GA0LDQstC70LXQvdC40LXRgtC+INC90LAg0LTQtdC70LXQs9C40YDQsNC90LXRgtC+INC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwINC+0YIgY1VSTCA8IDcuMjIuMCIKKworIzogaHR0cC5jOjQwOAorbXNnaWQgIlB1YmxpYyBrZXkgcGlubmluZyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAi0JfQsNC00LDQstCw0L3QtdGC0L4g0L3QsCDQv9C+0YHRgtC+0Y/QvdC10L0g0L/Rg9Cx0LvQuNGH0LXQvSDQutC70Y7RhyDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsCDQvtGCIGNVUkwgPCA3LjQ0LjAiCisKKyM6IGh0dHAuYzo4NzYKK21zZ2lkICJDVVJMU1NMT1BUX05PX1JFVk9LRSBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAi4oCeQ1VSTFNTTE9QVF9OT19SRVZPS0XigJwg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAg0L7RgiBjVVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6OTQ5Cittc2dpZCAiUHJvdG9jb2wgcmVzdHJpY3Rpb25zIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4xOS40IgorbXNnc3RyICLQntCz0YDQsNC90LjRh9Cw0LLQsNC90LXRgtC+INC90LAg0L/RgNC+0YLQvtC60L7Qu9C40YLQtSDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsCDQvtGCIGNVUkwgPCA3LjQ0LjAiCisKKyM6IGh0dHAuYzoxMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuc3VwcG9ydGVkIFNTTCBiYWNrZW5kICclcycuIFN1cHBvcnRlZCBTU0wgYmFja2VuZHM6IgorbXNnc3RyICLQndC10L/QvtC00LTRitGA0LbQsNC90LAg0YDQtdCw0LvQuNC30LDRhtC40Y8g0L3QsCBTU0wg4oCeJXPigJwuINCf0L7QtNC00YrRgNC20LDRgiDRgdC1OiIKKworIzogaHR0cC5jOjEwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBjVVJMIHdhcyBidWlsdCB3aXRob3V0IFNTTCBiYWNrZW5kcyIKK21zZ3N0ciAiIgorItCg0LXQsNC70LjQt9Cw0YbQuNGP0YLQsCDQvdCwIFNTTCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0LTQsNC00LUg0LTQsCDQtSDigJ4lc+KAnDogY1VSTCDQtSDQutC+0LzQv9C40LvQuNGA0LDQvSDQsdC10LcgIgorItC/0L7QtNC00YDRitC20LrQsCDQvdCwIFNTTCIKKworIzogaHR0cC5jOjEwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBhbHJlYWR5IHNldCIKK21zZ3N0ciAiIgorItCg0LXQsNC70LjQt9Cw0YbQuNGP0YLQsCDQvdCwIFNTTCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0LTQsNC00LUg0LTQsCDQtSDigJ4lc+KAnCwg0LfQsNGJ0L7RgtC+INCy0LXRh9C1INC1INC30LDQtNCw0LTQtdC90LAgIgorItC00YDRg9Cz0LAiCisKKyM6IGh0dHAuYzoxOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gdXBkYXRlIHVybCBiYXNlIGZyb20gcmVkaXJlY3Rpb246XG4iCisiICBhc2tlZCBmb3I6ICVzXG4iCisiICAgcmVkaXJlY3Q6ICVzIgorbXNnc3RyICIiCisi0LHQsNC30L7QstC40Y/RgiDQsNC00YDQtdGBINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0LHQvdC+0LLQuCDRgdC70LXQtCDQv9GA0LXQvdCw0YHQvtGH0LLQsNC90LU6XG4iCisiICAgIOKXjyDQt9Cw0Y/QstC10L0g0LDQtNGA0LXRgTogJXNcbiIKKyIgICAg4pePINC/0YDQtdC90LDRgdC+0YfQstCw0L3QtTogJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcXVvdGluZyBpbiBwdXNoLW9wdGlvbiB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiIgorItC90LXQv9GA0LDQstC40LvQvdC+INC10LrRgNCw0L3QuNGA0LDQvdC1INC40LvQuCDRhtC40YLQuNGA0LDQvdC1INCyINGB0YLQvtC50L3QvtGB0YLRgtCwINC60YrQvCDQvtC/0YbQuNGPINC30LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtTogIgorIuKAniVz4oCcIgorCisjOiByZW1vdGUtY3VybC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlc2luZm8vcmVmcyBub3QgdmFsaWQ6IGlzIHRoaXMgYSBnaXQgcmVwb3NpdG9yeT8iCittc2dzdHIgIuKAniVzaW5mby9yZWZz4oCcINC1INC90LXQuNC30L/QvtC70LfQstCw0LXQvNC+LCDQv9GA0L7QstC10YDQtdGC0LUg0LTQsNC70Lgg0LUg0YXRgNCw0L3QuNC70LjRidC1INC90LAgZ2l0IgorCisjOiByZW1vdGUtY3VybC5jOjM2NAorbXNnaWQgImludmFsaWQgc2VydmVyIHJlc3BvbnNlOyBleHBlY3RlZCBzZXJ2aWNlLCBnb3QgZmx1c2ggcGFja2V0IgorbXNnc3RyICIiCisi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L7RgtCz0L7QstC+0YAg0L7RgiDRgdGK0YDQstGK0YDQsDog0L7Rh9Cw0LrQstCw0YjQtSDRgdC1INGD0YHQu9GD0LPQsCwg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvSDQuNC30YfQuNGB0YLQstCw0YkgIgorItC/0LDQutC10YIg4oCeZmx1c2jigJwiCisKKyM6IHJlbW90ZS1jdXJsLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VydmVyIHJlc3BvbnNlOyBnb3QgJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L7RgtCz0L7QstC+0YAg0L7RgiDRgdGK0YDQstGK0YDQsCwg0LHQtSDQv9C+0LvRg9GH0LXQvdC+OiDigJ4lc+KAnCIKKworIzogcmVtb3RlLWN1cmwuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAi0YXRgNCw0L3QuNC70LjRidC10YLQviDigJ4lc+KAnCDQu9C40L/RgdCy0LAiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgJyVzJyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdCwINC40LTQtdC90YLQuNGE0LjQutCw0YbQuNGPINC60YrQvCDigJ4lc+KAnCIKKworIzogcmVtb3RlLWN1cmwuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnOiAlcyIKK21zZ3N0ciAi0L3Rj9C80LAg0LTQvtGB0YLRitC/INC00L4g4oCeJXPigJw6ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyB0byAlcyIKK21zZ3N0ciAi0L/RgNC10L3QsNGB0L7Rh9Cy0LDQvdC1INC60YrQvCDigJ4lc+KAnCIKKworIzogcmVtb3RlLWN1cmwuYzo1OTMKK21zZ2lkICJzaG91bGRuJ3QgaGF2ZSBFT0Ygd2hlbiBub3QgZ2VudGxlIG9uIEVPRiIKK21zZ3N0ciAi0L/QvtC70YPRh9C10L0g0LUgRU9GLCDQsiDRgNC10LbQuNC8INCx0LXQtyDQv9C+0LTQtNGA0YrQttC60LAg0LfQsCDRgtC+0LLQsCIKKworIzogcmVtb3RlLWN1cmwuYzo2NzMKK21zZ2lkICJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiCittc2dzdHIgIiIKKyLQtNCw0L3QvdC40YLQtSDQt9CwIFBPU1Qg0L3QtSDQvNC+0LPQsNGCINC00LAg0YHQtSDQv9GA0L7Rh9C10YLQsNGCINC90LDQvdC+0LLQviwg0L/RgNC+0LHQstCw0LnRgtC1INC00LAg0YPQstC10LvQuNGH0LjRgtC1ICIKKyLQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmh0dHAucG9zdEJ1ZmZlcuKAnCIKKworIzogcmVtb3RlLWN1cmwuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUlBDIGZhaWxlZDsgJXMiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQvtGC0LTQsNC70LXRh9C10L3QviDQuNC30LLQuNC60LLQsNC90LUuICAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo3NzMKK21zZ2lkICJjYW5ub3QgaGFuZGxlIHB1c2hlcyB0aGlzIGJpZyIKK21zZ3N0ciAi0YLQvtC70LrQvtCy0LAg0LPQvtC70LXQvNC4INC40LfRgtC70LDRgdC60LLQsNC90LjRjyDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/RitC70L3Rj9GCIgorCisjOiByZW1vdGUtY3VybC5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGRlZmxhdGUgZXJyb3IgJWQiCittc2dzdHIgIiIKKyLQt9Cw0Y/QstC60LDRgtCwINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQtNC10LrQvtC80L/RgNC10YHQuNGA0LDQvdCwLCDQs9GA0LXRiNC60LAg0L7RgiDigJ56bGli4oCcINC/0YDQuCAiCisi0LTQtdC60L7QvNC/0YDQtdGB0LjRgNCw0L3QtTogJWQiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZW5kIGVycm9yICVkIgorbXNnc3RyICIiCisi0LfQsNGP0LLQutCw0YLQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LTQtdC60L7QvNC/0YDQtdGB0LjRgNCw0L3QsDsg0LPRgNC10YjQutCwINC+0YIg4oCeemxpYuKAnCDQv9GA0Lgg0LfQsNCy0YrRgNGI0LLQsNC90LU6ICVkPCIKKworIzogcmVtb3RlLWN1cmwuYzoxMDIzCittc2dpZCAiZHVtYiBodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2FwYWJpbGl0aWVzIgorbXNnc3RyICLQvtC/0YDQvtGB0YLQtdC90LjRj9GCINGC0YDQsNC90YHQv9C+0YDRgiDQv9C+IGh0dHAg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC/0LvQuNGC0LrQuCDQutC70LjQtdC90YLQuCIKKworIzogcmVtb3RlLWN1cmwuYzoxMDM4Cittc2dpZCAiZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC00L7RgdGC0LDQstGP0L3QtS4iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTA4NgorbXNnaWQgImNhbm5vdCBmZXRjaCBieSBzaGExIG92ZXIgc21hcnQgaHR0cCIKK21zZ3N0ciAi0YPQvNC90LjRj9GCINCy0LDRgNC40LDQvdGCINC90LAgaHR0cCDQvdC1INC80L7QttC1INC00LAg0LTQvtGB0YLQsNCy0Y8g0L/QviBTSEExIgorCisjOiByZW1vdGUtY3VybC5jOjExMzAgcmVtb3RlLWN1cmwuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAi0L/RgNC+0YLQvtC60L7Qu9C90LAg0LPRgNC10YjQutCwOiDQvtGH0LDQutCy0LAg0YHQtSBTSEExINC40LvQuCDRg9C60LDQt9Cw0YLQtdC7LCDQsCDQsdC1INC/0L7Qu9GD0YfQtdC90L46IOKAniVz4oCcIgorCisjOiByZW1vdGUtY3VybC5jOjExNDggcmVtb3RlLWN1cmwuYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiCittc2dzdHIgItGC0YDQsNC90YHQv9C+0YDRgtGK0YIg0L/QviBodHRwINC90LUg0L/QvtC00LTRitGA0LbQsCDigJ4lc+KAnCIKKworIzogcmVtb3RlLWN1cmwuYzoxMTg0Cittc2dpZCAiZ2l0LWh0dHAtcHVzaCBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAnmdpdC1odHRwLXB1c2jigJwiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM2OQorbXNnaWQgInJlbW90ZS1jdXJsOiB1c2FnZTogZ2l0IHJlbW90ZS1jdXJsIDxyZW1vdGU+IFs8dXJsPl0iCittc2dzdHIgInJlbW90ZS1jdXJsOiDRg9C/0L7RgtGA0LXQsdCwOiBnaXQgcmVtb3RlLWN1cmwg0KXQoNCQ0J3QmNCb0JjQqdCVIFvQkNCU0KDQldChXSIKKworIzogcmVtb3RlLWN1cmwuYzoxNDAxCittc2dpZCAicmVtb3RlLWN1cmw6IGVycm9yIHJlYWRpbmcgY29tbWFuZCBzdHJlYW0gZnJvbSBnaXQiCittc2dzdHIgInJlbW90ZS1jdXJsOiDQs9GA0LXRiNC60LAg0L/RgNC4INC40LfRh9C40YLQsNC90LXRgtC+INC90LAg0L/QvtGC0L7QutCwINC60L7QvNCw0L3QtNC4INC+0YIgZ2l0IgorCisjOiByZW1vdGUtY3VybC5jOjE0MDgKK21zZ2lkICJyZW1vdGUtY3VybDogZmV0Y2ggYXR0ZW1wdGVkIHdpdGhvdXQgYSBsb2NhbCByZXBvIgorbXNnc3RyICJyZW1vdGUtY3VybDog0L7Qv9C40YIg0LfQsCDQtNC+0YHRgtCw0LLRj9C90LUg0LHQtdC3INC70L7QutCw0LvQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogcmVtb3RlLWN1cmwuYzoxNDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS1jdXJsOiB1bmtub3duIGNvbW1hbmQgJyVzJyBmcm9tIGdpdCIKK21zZ3N0ciAicmVtb3RlLWN1cmw6INC90LXQv9C+0LfQvdCw0YLQsCDQutC+0LzQsNC90LTQsCDigJ4lc+KAnCDQvtGCIGdpdCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODUKK21zZ2lkICJhcmdzIgorbXNnc3RyICLQkNCg0JPQo9Cc0JXQndCi0JgiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oOjg2Cittc2dpZCAib2JqZWN0IGZpbHRlcmluZyIKK21zZ3N0ciAi0YTQuNC70YLRgNC40YDQsNC90LUg0L/QviDQstC40LQg0L3QsCDQvtCx0LXQutGC0LAiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxODMKK21zZ2lkICJleHBpcnktZGF0ZSIKK21zZ3N0ciAi0L/QtdGA0LjQvtC0INC90LAg0LLQsNC70LjQtNC90L7RgdGCL9C30LDQv9Cw0LfQstCw0L3QtSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE5NworbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAi0L3Rg9C70LXQstCwINC+0L/QtdGA0LDRhtC40Y8gKNC30LAg0YHRitCy0LzQtdGB0YLQuNC80L7RgdGCINGBINC/0YDQtdC00LjRiNC90Lgg0LLQtdGA0YHQuNC4KSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMwOQorbXNnaWQgImJlIG1vcmUgdmVyYm9zZSIKK21zZ3N0ciAi0L/QvtCy0LXRh9C1INC/0L7QtNGA0L7QsdC90L7RgdGC0LgiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTEKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICLQv9C+LdC80LDQu9C60L4g0L/QvtC00YDQvtCx0L3QvtGB0YLQuCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxNworbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICLQtNCwINGB0LUg0L/QvtC60LDQt9Cy0LDRgiDRgtCw0LrRitCyINCR0KDQntCZINGG0LjRhNGA0Lgg0L7RgiDRgdGD0LzQuNGC0LUg0L/QviBTSEExIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM2Cittc2dpZCAiaG93IHRvIHN0cmlwIHNwYWNlcyBhbmQgI2NvbW1lbnRzIGZyb20gbWVzc2FnZSIKK21zZ3N0ciAi0LrQvtC4INC/0YDQsNC30L3QuCDQt9C90LDRhtC4INC4ICPQutC+0LzQtdC90YLQsNGA0Lgg0LTQsCDRgdC1INC80LDRhdCw0YIg0L7RgiDRgdGK0L7QsdGJ0LXQvdC40Y/RgtCwIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM3Cittc2dpZCAicmVhZCBwYXRoc3BlYyBmcm9tIGZpbGUiCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDQv9GK0YLQuNGJ0LDRgtCwINC+0YIg0KTQkNCZ0JsiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzgKK21zZ2lkICIiCisid2l0aCAtLXBhdGhzcGVjLWZyb20tZmlsZSwgcGF0aHNwZWMgZWxlbWVudHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKyLQv9GA0Lgg0L/QvtC70LfQstCw0L3QtdGC0L4g0L3QsCDigJ4tLXBhdGhzcGVjLWZyb20tZmlsZeKAnCwg0L/RitGC0LjRidCw0YLQsCDRgdCwINGA0LDQt9C00LXQu9C10L3QuCDRgSDQvdGD0LvQtdCy0LjRjyAiCisi0LfQvdCw0Log4oCeTlVM4oCcIgorCisjOiByZWYtZmlsdGVyLmg6MTAxCittc2dpZCAia2V5IgorbXNnc3RyICLQmtCb0K7QpyIKKworIzogcmVmLWZpbHRlci5oOjEwMQorbXNnaWQgImZpZWxkIG5hbWUgdG8gc29ydCBvbiIKK21zZ3N0ciAi0LjQvNC1INC90LAg0L/QvtC70LXRgtC+LCDQv9C+INC60L7QtdGC0L4g0LTQsCDQtSDQv9C+0LTRgNC10LTQsdCw0YLQsCIKKworIzogcmVyZXJlLmg6NDQKK21zZ2lkICJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiCittc2dzdHIgIiIKKyLQv9GA0Lgg0LLRitC30LzQvtC20L3QvtGB0YIg0L/RgNC10LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRgNC10YjQtdC90LjQtdGC0L4g0L3QsCDQutC+0L3RhNC70LjQutGC0LAg0LfQsCDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwICIKKyLQuNC90LTQtdC60YHQsCIKKworIzogd3Qtc3RhdHVzLmg6NjcKK21zZ2lkICJIRUFEIGRldGFjaGVkIGF0ICIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdC1INC1INGB0LLRitGA0LfQsNC9INC4INC1INC/0YDQuCAiCisKKyM6IHd0LXN0YXR1cy5oOjY4Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBmcm9tICIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdC1INC1INGB0LLRitGA0LfQsNC9INC4INC1INC+0YLQtNC10LvQtcyA0L0g0L7RgiAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUwCittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIGluZGV4IgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC90LAg0YTQsNC50LvQsCDQutGK0Lwg0LjQvdC00LXQutGB0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUxCittc2dpZCAiQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBmcm9tIGEgbWFpbGJveCIKK21zZ3N0ciAi0J/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/QvtGA0LXQtNC40YbQsCDQvtGCINC60YDRitC/0LrQuCDQvtGCINC/0L7RidC10L3RgdC60LAg0LrRg9GC0LjRjyIKKworIzogY29tbWFuZC1saXN0Lmg6NTIKK21zZ2lkICJBbm5vdGF0ZSBmaWxlIGxpbmVzIHdpdGggY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC60YrQvCDRgNC10LTQvtCy0LXRgtC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1IgorCisjOiBjb21tYW5kLWxpc3QuaDo1MworbXNnaWQgIkFwcGx5IGEgcGF0Y2ggdG8gZmlsZXMgYW5kL29yIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi0J/RgNC40LvQsNCz0LDQvdC1INC90LAg0LrRgNGK0L/QutCwINC60YrQvCDRhNCw0LnQu9C+0LLQtdGC0LUg0Lgv0LjQu9C4INC40L3QtNC10LrRgdCwIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NAorbXNnaWQgIkltcG9ydCBhIEdOVSBBcmNoIHJlcG9zaXRvcnkgaW50byBHaXQiCittc2dzdHIgItCS0L3QsNGB0Y/QvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC1INC90LAgR05VIEFyY2gg0LIgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo1NQorbXNnaWQgIkNyZWF0ZSBhbiBhcmNoaXZlIG9mIGZpbGVzIGZyb20gYSBuYW1lZCB0cmVlIgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQsNGA0YXQuNCyINGBINGE0LDQudC70L7QstC10YLQtSDQvtGCINC40LzQtdC90L7QstCw0L3QviDQtNGK0YDQstC+IgorCisjOiBjb21tYW5kLWxpc3QuaDo1NgorbXNnaWQgIlVzZSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgYSBidWciCittc2dzdHIgItCU0LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1INC90LAg0L/RgNC+0LzRj9C90LDRgtCwLCDQutC+0Y/RgtC+INC1INC/0YDQuNGH0LjQvdC40LvQsCDQs9GA0LXRiNC60LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU3Cittc2dpZCAiU2hvdyB3aGF0IHJldmlzaW9uIGFuZCBhdXRob3IgbGFzdCBtb2RpZmllZCBlYWNoIGxpbmUgb2YgYSBmaWxlIgorbXNnc3RyICIiCisi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0LLQtdGA0YHQuNGP0YLQsCDQuCDQsNCy0YLQvtGA0LAg0L3QsCDQv9C+0YHQu9C10LTQvdCw0YLQsCDQv9GA0L7QvNGP0L3QsCDQvdCwINCy0YHQtdC60Lgg0L7RgiDRgNC10LTQvtCy0LXRgtC1INC90LAgIgorItGE0LDQudC7IgorCisjOiBjb21tYW5kLWxpc3QuaDo1OAorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUsINGB0YrQt9C00LDQstCw0L3QtSwg0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LrQu9C+0L3QuCIKKworIzogY29tbWFuZC1saXN0Lmg6NTkKK21zZ2lkICJNb3ZlIG9iamVjdHMgYW5kIHJlZnMgYnkgYXJjaGl2ZSIKK21zZ3N0ciAi0JzQtdGB0YLQtdC90LUg0L3QsCDQvtCx0LXQutGC0Lgg0Lgg0YPQutCw0LfQsNGC0LXQu9C4INC/0L4g0LDRgNGF0LjQstC4IgorCisjOiBjb21tYW5kLWxpc3QuaDo2MAorbXNnaWQgIlByb3ZpZGUgY29udGVudCBvciB0eXBlIGFuZCBzaXplIGluZm9ybWF0aW9uIGZvciByZXBvc2l0b3J5IG9iamVjdHMiCittc2dzdHIgIiIKKyLQn9GA0LXQtNC+0YHRgtCw0LLRj9C90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0LjQu9C4INCy0LjQtNCwINC4INGA0LDQt9C80LXRgNC40YLQtSDQvdCwINC+0LHQtdC60YLQuCDQvtGCINGF0YDQsNC90LjQu9C40YnQtSIKKworIzogY29tbWFuZC1saXN0Lmg6NjEKK21zZ2lkICJEaXNwbGF5IGdpdGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24iCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQt9CwINCw0YLRgNC40LHRg9GC0LjRgtC1INC90LAgZ2l0IChnaXRhdHRyaWJ1dGVzKSIKKworIzogY29tbWFuZC1saXN0Lmg6NjIKK21zZ2lkICJEZWJ1ZyBnaXRpZ25vcmUgLyBleGNsdWRlIGZpbGVzIgorbXNnc3RyICLQmNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCz0YDQtdGI0LrQuCDQsiDQuNCz0L3QvtGA0LjRgNCw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUgKGdpdGlnbm9yZSkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYzCittc2dpZCAiU2hvdyBjYW5vbmljYWwgbmFtZXMgYW5kIGVtYWlsIGFkZHJlc3NlcyBvZiBjb250YWN0cyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0LrQsNC90L7QvdC40YfQvdC40YLQtSDQuNC80LUg0Lgg0LDQtNGA0LXRgSDQvdCwINC1LdC/0L7RidCwINC90LAg0LrQvtC90YLQsNC60YLQuNGC0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY0Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIG9yIHJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICIiCisi0J/RgNC10LzQuNC90LDQstCw0L3QtSDQutGK0Lwg0LTRgNGD0LMg0LrQu9C+0L0g0LjQu9C4INCy0YrQt9GB0YLQsNC90L7QstGP0LLQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY1Cittc2dpZCAiQ29weSBmaWxlcyBmcm9tIHRoZSBpbmRleCB0byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLQmtC+0L/QuNGA0LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LUg0L7RgiDQuNC90LTQtdC60YHQsCDQutGK0Lwg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY2Cittc2dpZCAiRW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIG5hbWUgaXMgd2VsbCBmb3JtZWQiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0LTQsNC70Lgg0LjQvNC10YLQviDQvdCwINGD0LrQsNC30LDRgtC10LvRjyDQtSDQv9C+INC/0YDQsNCy0LjQu9Cw0YLQsCIKKworIzogY29tbWFuZC1saXN0Lmg6NjcKK21zZ2lkICJGaW5kIGNvbW1pdHMgeWV0IHRvIGJlIGFwcGxpZWQgdG8gdXBzdHJlYW0iCittc2dzdHIgIiIKKyLQntGC0LrRgNC40LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y8sINC60L7QuNGC0L4g0L7RidC1INC90LUg0YHQsCDQv9C+0LTQsNC00LXQvdC4INC60YrQvCDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBjb21tYW5kLWxpc3QuaDo2OAorbXNnaWQgIkFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICLQn9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0L7RgiDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0Lgg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBjb21tYW5kLWxpc3QuaDo2OQorbXNnaWQgIkdyYXBoaWNhbCBhbHRlcm5hdGl2ZSB0byBnaXQtY29tbWl0IgorbXNnc3RyICLQk9GA0LDRhNC40YfQvdCwINCw0LvRgtC10YDQvdCw0YLQuNCy0LAg0L3QsCDigJ5naXQtY29tbWl04oCcIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MAorbXNnaWQgIlJlbW92ZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1INC+0YIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcxCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICLQmtC70L7QvdC40YDQsNC90LUg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LUg0LIg0L3QvtCy0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcyCittc2dpZCAiRGlzcGxheSBkYXRhIGluIGNvbHVtbnMiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQv9C+INC60L7Qu9C+0L3QuCIKKworIzogY29tbWFuZC1saXN0Lmg6NzMKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC4INCyINGF0YDQsNC90LjQu9C40YnQtdGC0L4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc0Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBHaXQgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICLQl9Cw0L/QuNGBINC4INC/0YDQvtCy0LXRgNC60LAg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0YEg0LPRgNCwzIDRhNCwINC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQvdCwIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6NzUKK21zZ2lkICJDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0L3QvtCyINC+0LHQtdC60YIt0L/QvtC00LDQstCw0L3QtSIKKworIzogY29tbWFuZC1saXN0Lmg6NzYKK21zZ2lkICJHZXQgYW5kIHNldCByZXBvc2l0b3J5IG9yIGdsb2JhbCBvcHRpb25zIgorbXNnc3RyICIiCisi0JjQt9Cy0LXQttC00LDQvdC1INC4INC30LDQtNCw0LLQsNC90LUg0L3QsCDQs9C70L7QsdCw0LvQvdC4INC90LDRgdGC0YDQvtC50LrQuCDQuNC70Lgg0L3QsNGB0YLRgNC+0LnQutC4INC90LAg0L7Qv9GA0LXQtNC10LvQtdC90L4gIgorItGF0YDQsNC90LjQu9C40YnQtSIKKworIzogY29tbWFuZC1saXN0Lmg6NzcKK21zZ2lkICJDb3VudCB1bnBhY2tlZCBudW1iZXIgb2Ygb2JqZWN0cyBhbmQgdGhlaXIgZGlzayBjb25zdW1wdGlvbiIKK21zZ3N0ciAiIgorItCf0YDQtdCx0YDQvtGP0LLQsNC90LUg0L3QsCDQvdC10L/QsNC60LXRgtC40YDQsNC90LjRgtC1INC+0LHQtdC60YLQuCDQuCDQutC+0LvQutC+INC00LjRgdC60L7QstC+INC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQviDQt9Cw0LXQvNCw0YIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc4Cittc2dpZCAiUmV0cmlldmUgYW5kIHN0b3JlIHVzZXIgY3JlZGVudGlhbHMiCittc2dzdHIgItCf0L7Qu9GD0YfQsNCy0LDQvdC1INC4INC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC40LTQtdC90YLQuNGE0LjQutCw0YbQuNGP0YLQsCDQvdCwINC/0L7RgtGA0LXQsdC40YLQtdC7IgorCisjOiBjb21tYW5kLWxpc3QuaDo3OQorbXNnaWQgIkhlbHBlciB0byB0ZW1wb3JhcmlseSBzdG9yZSBwYXNzd29yZHMgaW4gbWVtb3J5IgorbXNnc3RyICLQn9C+0LzQvtGJ0L3QsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0LLRgNC10LzQtdC90L3QviDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQv9Cw0YDQvtC70Lgg0LIg0L/QsNC80LXRgtGC0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgwCittc2dpZCAiSGVscGVyIHRvIHN0b3JlIGNyZWRlbnRpYWxzIG9uIGRpc2siCittc2dzdHIgIiIKKyLQn9C+0LzQvtGJ0L3QsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LjQtNC10L3RgtC40YTQuNC60LDRhtC40Y/RgtCwINC90LAg0L/QvtGC0YDQtdCx0LjRgtC10Lsg0L3QsCDQtNC40YHQutCwIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MQorbXNnaWQgIkV4cG9ydCBhIHNpbmdsZSBjb21taXQgdG8gYSBDVlMgY2hlY2tvdXQiCittc2dzdHIgItCY0LfQvdCw0YHRj9C90LUg0L3QsCDQtdC00L3QviDQv9C+0LTQsNCy0LDQvdC1INC60LDRgtC+INC40LfRgtC10LPQu9GP0L3QtSDQsiBDVlMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgyCittc2dpZCAiU2FsdmFnZSB5b3VyIGRhdGEgb3V0IG9mIGFub3RoZXIgU0NNIHBlb3BsZSBsb3ZlIHRvIGhhdGUiCittc2dzdHIgItCY0LfQvdCw0YHRj9C90LUg0L3QsCDQtNCw0L3QvdC40YLQtSDQstC4INC+0YIg0LTRgNGD0LPQsCDRgdC40YHRgtC10LzQsCDQt9CwINC60L7QvdGC0YDQvtC7INC90LAg0LLQtdGA0YHQuNC40YLQtSIKKworIzogY29tbWFuZC1saXN0Lmg6ODMKK21zZ2lkICJBIENWUyBzZXJ2ZXIgZW11bGF0b3IgZm9yIEdpdCIKK21zZ3N0ciAi0JXQvNGD0LvQsNGG0LjRjyDQvdCwINGB0YrRgNCy0YrRgCDQt9CwIENWUyDQt9CwIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODQKK21zZ2lkICJBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHaXQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICLQodC40LvQvdC+INC+0L/RgNC+0YHRgtC10L0g0YHRitGA0LLRitGAINC30LAg0YXRgNCw0L3QuNC70LjRidCwINC90LAgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo4NQorbXNnaWQgIkdpdmUgYW4gb2JqZWN0IGEgaHVtYW4gcmVhZGFibGUgbmFtZSBiYXNlZCBvbiBhbiBhdmFpbGFibGUgcmVmIgorbXNnc3RyICIiCisi0JfQsNC00LDQstCw0L3QtSDQvdCwINC40LzQtSDRg9C00L7QsdC90L4g0LfQsCDQv9C+0YLRgNC10LHQuNGC0LXQu9C40YLQtSDQvdCwINC+0LHQtdC60YIg0LLRitC3INC+0YHQvdC+0LLQsCDQvdCwINC90LDQu9C40YfQtdC9ICIKKyLRg9C60LDQt9Cw0YLQtdC7IgorCisjOiBjb21tYW5kLWxpc3QuaDo4NgorbXNnaWQgIlNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9C70LjQutC40YLQtSDQvNC10LbQtNGDINC/0L7QtNCw0LLQsNC90LjRj9GC0LAsINCy0LXRgNGB0LjQuNGC0LUsINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBjb21tYW5kLWxpc3QuaDo4NworbXNnaWQgIkNvbXBhcmVzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCIKK21zZ3N0ciAi0KHRgNCw0LLQvdGP0LLQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtSDQvtGCINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC4INC40L3QtNC10LrRgdCwIgorCisjOiBjb21tYW5kLWxpc3QuaDo4OAorbXNnaWQgIkNvbXBhcmUgYSB0cmVlIHRvIHRoZSB3b3JraW5nIHRyZWUgb3IgaW5kZXgiCittc2dzdHIgItCh0YDQsNCy0L3Rj9Cy0LDQvdC1INC90LAg0L7QsdC10LrRgtC4LdC00YrRgNCy0L4g0YEg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0Lgg0LjQvdC00LXQutGB0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg5Cittc2dpZCAiQ29tcGFyZXMgdGhlIGNvbnRlbnQgYW5kIG1vZGUgb2YgYmxvYnMgZm91bmQgdmlhIHR3byB0cmVlIG9iamVjdHMiCittc2dzdHIgIiIKKyLQodGA0LDQstC90Y/QstCw0L3QtSDQvdCwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQuCDQv9GA0LDQstCw0YLQsCDQt9CwINC00L7RgdGC0YrQvyDQvdCwINC+0LHQtdC60YLQuNGC0LUtQkxPQiDRh9GA0LXQtyDQtNCy0LAgIgorItC+0LHQtdC60YLQsC3QtNGK0YDQstC+IgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INGH0YDQtdC3INGB0YLQsNC90LTQsNGA0YLQvdC40YLQtSDQuNC90YHRgtGA0YPQvNC10L3RgtC4INC30LAg0YLQvtCy0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkxCittc2dpZCAiR2l0IGRhdGEgZXhwb3J0ZXIiCittc2dzdHIgItCg0LDQt9Cz0LvQtdC20LTQsNC90LUg0L3QsCDQtNCw0L3QvdC40YLQtSDQvtGCIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6OTIKK21zZ2lkICJCYWNrZW5kIGZvciBmYXN0IEdpdCBkYXRhIGltcG9ydGVycyIKK21zZ3N0ciAi0K/QtNGA0L4g0LfQsCDQsdGK0YDQt9C+INCy0L3QsNGB0Y/QvdC1INC90LAg0LTQsNC90L3QuCDQsiBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkzCittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0JjQt9GC0LXQs9C70Y/QvdC1INC90LAg0L7QsdC10LrRgtC4INC4INGD0LrQsNC30LDRgtC10LvQuCDQvtGCINC00YDRg9Cz0L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICLQn9C+0LvRg9GH0LDQstCw0L3QtSDQvdCwINC70LjQv9GB0LLQsNGJ0Lgg0L7QsdC10LrRgtC4INC+0YIg0LTRgNGD0LPQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk1Cittc2dpZCAiUmV3cml0ZSBicmFuY2hlcyIKK21zZ3N0ciAi0J/RgNC10LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0LrQu9C+0L3QuCIKKworIzogY29tbWFuZC1saXN0Lmg6OTYKK21zZ2lkICJQcm9kdWNlIGEgbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSDRgdGK0YEg0YHQu9C40LLQsNC90LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk3Cittc2dpZCAiT3V0cHV0IGluZm9ybWF0aW9uIG9uIGVhY2ggcmVmIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0LfQsCDQstGB0LXQutC4INGD0LrQsNC30LDRgtC10LsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk4Cittc2dpZCAiUHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwgc3VibWlzc2lvbiIKK21zZ3N0ciAi0J/QvtC00LPQvtGC0LLRj9C90LUg0L3QsCDQutGA0YrQv9C60Lgg0LfQsCDQuNC30L/RgNCw0YnQsNC90LUg0L/QviDQtS3Qv9C+0YnQsCIKKworIzogY29tbWFuZC1saXN0Lmg6OTkKK21zZ2lkICJWZXJpZmllcyB0aGUgY29ubmVjdGl2aXR5IGFuZCB2YWxpZGl0eSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgZGF0YWJhc2UiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L3QsCDQvtCx0LXQutGC0LjRgtC1INC4INCy0YDRitC30LrQuNGC0LUg0YLRj9GFINCyINCx0LDQt9Cw0YLQsCDQvtGCINC00LDQvdC90Lgg0LfQsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDAKK21zZ2lkICJDbGVhbnVwIHVubmVjZXNzYXJ5IGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0JjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDQvdC10L3Rg9C20L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0Lgg0L7Qv9GC0LjQvNC40LfQuNGA0LDQvdC1INC90LAg0LvQvtC60LDQu9C90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTAxCittc2dpZCAiRXh0cmFjdCBjb21taXQgSUQgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgdXNpbmcgZ2l0LWFyY2hpdmUiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LAg0L3QsCDQv9C+0LTQsNCy0LDQvdC1INC+0YIg0LDRgNGF0LjQsiDQvdCwIOKAnmdpdC1hcmNoaXZl4oCcIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDIKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINGA0LXQtNC+0LLQtdGC0LUg0L3QsNC/0LDRgdCy0LDRidC4INC90LAg0YjQsNCx0LvQvtC9IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDMKK21zZ2lkICJBIHBvcnRhYmxlIGdyYXBoaWNhbCBpbnRlcmZhY2UgdG8gR2l0IgorbXNnc3RyICLQk9GA0LDRhNC40YfQtdC9INC40L3RgtC10YDRhNC10LnRgSDQutGK0LwgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDQKK21zZ2lkICJDb21wdXRlIG9iamVjdCBJRCBhbmQgb3B0aW9uYWxseSBjcmVhdGVzIGEgYmxvYiBmcm9tIGEgZmlsZSIKK21zZ3N0ciAiIgorItCY0LfRh9C40YHQu9GP0LLQsNC90LUg0L3QsCDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQvdCwINC+0LHQtdC60YIg0Lgg0LXQstC10L3RgtGD0LDQu9C90L4g0YHRitC30LTQsNCy0LDQvdC1INC90LAg0L7QsdC10LrRgi1CTE9CICIKKyLQvtGCINGE0LDQudC7IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDUKK21zZ2lkICJEaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gYWJvdXQgR2l0IgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9C+0LzQvtGJ0YLQsCDQt9CwIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA2Cittc2dpZCAiU2VydmVyIHNpZGUgaW1wbGVtZW50YXRpb24gb2YgR2l0IG92ZXIgSFRUUCIKK21zZ3N0ciAi0KHRitGA0LLRitGA0L3QsCDRgNC10LDQu9C40LfQsNGG0LjRjyDQvdCwIEdpdCDQv9C+IEhUVFAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNworbXNnaWQgIkRvd25sb2FkIGZyb20gYSByZW1vdGUgR2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAiCittc2dzdHIgItCY0LfRgtC10LPQu9GP0L3QtSDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSDQv9C+IEhUVFAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOAorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEhUVFAvREFWIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0JjQt9GC0LvQsNGB0LrQstCw0L3QtSDQvdCwINC+0LHQtdC60YLQuCDQv9C+IEhUVFAvREFWINC60YrQvCDQtNGA0YPQs9C+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTA5Cittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBmcm9tIHN0ZGluIHRvIGFuIElNQVAgZm9sZGVyIgorbXNnc3RyICLQmNC30L/RgNCw0YnQsNC90LUg0L3QsCDQv9C+0YDQtdC00LjRhtCwINC+0YIg0LrRgNGK0L/QutC4INC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCDQutGK0Lwg0L/QsNC/0LrQsCDQv9C+IElNQVAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0LDQutC10YLQtdC9INC40L3QtNC10LrRgSDQt9CwINGB0YrRidC10YHRgtCy0YPQstCw0Ykg0L/QsNC60LXRgtC40YDQsNC9INCw0YDRhdC40LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMQorbXNnaWQgIkNyZWF0ZSBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeSBvciByZWluaXRpYWxpemUgYW4gZXhpc3Rpbmcgb25lIgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQv9GA0LDQt9C90L4g0YXRgNCw0L3QuNC70LjRidC1INC90LAgR2l0INC40LvQuCDQt9Cw0L3Rg9C70Y/QstCw0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQviIKKworIzogY29tbWFuZC1saXN0Lmg6MTEyCittc2dpZCAiSW5zdGFudGx5IGJyb3dzZSB5b3VyIHdvcmtpbmcgcmVwb3NpdG9yeSBpbiBnaXR3ZWIiCittc2dzdHIgItCd0LXQt9Cw0LHQsNCy0L3QviDRgNCw0LfQs9C70LXQttC00LDQvdC1INC90LAg0YDQsNCx0L7RgtC90L7RgtC+INCy0Lgg0YXRgNCw0L3QuNC70LjRidC1INGH0YDQtdC3IOKAnmdpdHdlYuKAnCIKKworIzogY29tbWFuZC1saXN0Lmg6MTEzCittc2dpZCAiQWRkIG9yIHBhcnNlIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gaW4gY29tbWl0IG1lc3NhZ2VzIgorbXNnc3RyICIiCisi0JTQvtCx0LDQstGP0L3QtSDQuNC70Lgg0L7QsdGA0LDQsdC+0YLQutCwINC90LAg0YHRgtGA0YPQutGC0YPRgNC40YDQsNC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LIg0YHRitC+0LHRidC10L3QuNGP0YLQsCDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTE0Cittc2dpZCAiVGhlIEdpdCByZXBvc2l0b3J5IGJyb3dzZXIiCittc2dzdHIgItCg0LDQt9Cz0LvQtdC20LTQsNC90LUg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNQorbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC20YPRgNC90LDQu9CwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNgorbXNnaWQgIlNob3cgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINGE0LDQudC70L7QstC10YLQtSDQsiDQuNC90LTQtdC60YHQsCDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogY29tbWFuZC1saXN0Lmg6MTE3Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUg0LIg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTgKK21zZ2lkICJMaXN0IHRoZSBjb250ZW50cyBvZiBhIHRyZWUgb2JqZWN0IgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQvtCx0LXQutGCLdC00YrRgNCy0L4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOQorbXNnaWQgIkV4dHJhY3RzIHBhdGNoIGFuZCBhdXRob3JzaGlwIGZyb20gYSBzaW5nbGUgZS1tYWlsIG1lc3NhZ2UiCittc2dzdHIgItCY0LfQstCw0LbQtNCw0L3QtSDQvdCwINC60YDRitC/0LrQsCDQuCDQsNCy0YLQvtGA0YHRgtCy0L7RgtC+INC+0YIg0LUt0L/QuNGB0LzQviIKKworIzogY29tbWFuZC1saXN0Lmg6MTIwCittc2dpZCAiU2ltcGxlIFVOSVggbWJveCBzcGxpdHRlciBwcm9ncmFtIgorbXNnc3RyICLQn9GA0L7RgdGC0LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINGA0LDQt9C00LXQu9GP0L3QtSDQvdCwINGE0LDQudC70L7QstC1INCy0YrQsiDRhNC+0YDQvNCw0YIgVU5JWCBtYm94IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjEKK21zZ2lkICJKb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlciIKK21zZ3N0ciAi0KHQu9C40LLQsNC90LUg0L3QsCDQtNCy0LUg0LjQu9C4INC/0L7QstC10YfQtSDQv9C+0YDQtdC00LjRhtC4L9C40YHRgtC+0YDQuNC4INC+0YIg0L/RgNC+0LzQtdC90LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMgorbXNnaWQgIkZpbmQgYXMgZ29vZCBjb21tb24gYW5jZXN0b3JzIGFzIHBvc3NpYmxlIGZvciBhIG1lcmdlIgorbXNnc3RyICLQntGC0LrRgNC40LLQsNC90LUg0L3QsCDQvdCw0Lkt0L/QvtC00YXQvtC00Y/RidC40YLQtSDQvtCx0YnQuCDQv9GA0LXQtNGI0LXRgdGC0LLQtdC90LjRhtC4INC30LAg0YHQu9C40LLQsNC90LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMworbXNnaWQgIlJ1biBhIHRocmVlLXdheSBmaWxlIG1lcmdlIgorbXNnc3RyICLQmNC30L/RitC70L3QtdC90LjQtSDQvdCwINGC0YDQvtC50L3QviDRgdC70LjQstCw0L3QtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTI0Cittc2dpZCAiUnVuIGEgbWVyZ2UgZm9yIGZpbGVzIG5lZWRpbmcgbWVyZ2luZyIKK21zZ3N0ciAi0KHQu9C40LLQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUsINC60L7QuNGC0L4g0YHQtSDQvdGD0LbQtNCw0Y/RgiDQvtGCINGC0L7QstCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjUKK21zZ2lkICJUaGUgc3RhbmRhcmQgaGVscGVyIHByb2dyYW0gdG8gdXNlIHdpdGggZ2l0LW1lcmdlLWluZGV4IgorbXNnc3RyICLQodGC0LDQvdC00LDRgNGC0L3QsNGC0LAg0L/QvtC80L7RidC90LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwIOKAnmdpdC1tZXJnZS1pbmRleOKAnCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI2Cittc2dpZCAiUnVuIG1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb24gdG9vbHMgdG8gcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMiCittc2dzdHIgItCY0LfQv9GK0LvQvdC10L3QuNC1INC90LAg0L/RgNC+0LPRgNCw0LzQuNGC0LUg0LfQsCDQutC+0YDQuNCz0LjRgNCw0L3QtSDQvdCwINC60L7QvdGE0LvQuNC60YLQuNGC0LUg0L/RgNC4INGB0LvQuNCy0LDQvdC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjcKK21zZ2lkICJTaG93IHRocmVlLXdheSBtZXJnZSB3aXRob3V0IHRvdWNoaW5nIGluZGV4IgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDRgtGA0L7QudC90L4g0YHQu9C40LLQsNC90LUg0LHQtdC3INC/0YDQvtC80Y/QvdCwINC90LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgbXVsdGktcGFjay1pbmRleGVzIgorbXNnc3RyICLQl9Cw0L/QuNGBINC4INC/0YDQvtCy0LXRgNC60LAg0L3QsCDQuNC90LTQtdC60YHQuNGC0LUg0LfQsCDQvNC90L7QttC10YHRgtCy0L4g0L/QsNC60LXRgtC4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjkKK21zZ2lkICJDcmVhdGVzIGEgdGFnIG9iamVjdCIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0L7QsdC10LrRgi3QtdGC0LjQutC10YIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMAorbXNnaWQgIkJ1aWxkIGEgdHJlZS1vYmplY3QgZnJvbSBscy10cmVlIGZvcm1hdHRlZCB0ZXh0IgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQvtCx0LXQutGCLdC00YrRgNCy0L4g0L7RgiDRgtC10LrRgdGCINCy0YrQsiDRhNC+0YDQvNCw0YIg4oCebHMtdHJlZeKAnCIKKworIzogY29tbWFuZC1saXN0Lmg6MTMxCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICLQn9GA0LXQvNC10YHRgtCy0LDQvdC1INC40LvQuCDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDRhNCw0LnQuywg0LTQuNGA0LXQutGC0L7RgNC40Y8g0LjQu9C4INGB0LjQvNCy0L7Qu9C90LAg0LLRgNGK0LfQutCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzIKK21zZ2lkICJGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzIgorbXNnc3RyICLQntGC0LrRgNC40LLQsNC90LUg0L3QsCDQuNC80LXQvdCw0YLQsCDQtNCw0LTQtdC90Lgg0L3QsCDQstC10YDRgdC40Y8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMworbXNnaWQgIkFkZCBvciBpbnNwZWN0IG9iamVjdCBub3RlcyIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQuNC70Lgg0L/RgNC10LPQu9C10LQg0L3QsCDQsdC10LvQtdC20LrQuCDQutGK0Lwg0L7QsdC10LrRgiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM0Cittc2dpZCAiSW1wb3J0IGZyb20gYW5kIHN1Ym1pdCB0byBQZXJmb3JjZSByZXBvc2l0b3JpZXMiCittc2dzdHIgItCS0L3QsNGB0Y/QvdC1INC4INC/0L7QtNCw0LLQsNC90LUg0LrRitC8INGF0YDQsNC90LjQu9C40YnQsCDQvdCwIFBlcmZvcmNlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzUKK21zZ2lkICJDcmVhdGUgYSBwYWNrZWQgYXJjaGl2ZSBvZiBvYmplY3RzIgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQv9Cw0LrQtdGC0LjRgNCw0L0g0LDRgNGF0LjQsiDQvtGCINC+0LHQtdC60YLQuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTM2Cittc2dpZCAiRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcyIKK21zZ3N0ciAi0J3QsNC80LjRgNCw0L3QtSDQvdCwINC/0L7QstGC0LDRgNGP0YnQuCDRgdC1INC/0LDQutC10YLQvdC4INGE0LDQudC70L7QstC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzcKK21zZ2lkICJQYWNrIGhlYWRzIGFuZCB0YWdzIGZvciBlZmZpY2llbnQgcmVwb3NpdG9yeSBhY2Nlc3MiCittc2dzdHIgItCf0LDQutC10YLQuNGA0LDQvdC1INC90LAg0LLRitGA0YXQvtCy0LXRgtC1INC4INC10YLQuNC60LXRgtC40YLQtSDQt9CwINCx0YrRgNC3INC00L7RgdGC0YrQvyDQtNC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM4Cittc2dpZCAiUm91dGluZXMgdG8gaGVscCBwYXJzaW5nIHJlbW90ZSByZXBvc2l0b3J5IGFjY2VzcyBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisi0J/QvtC80L7RidC90Lgg0L/RgNC+0LPRgNCw0LzQuCDQt9CwINCw0L3QsNC70LjQt9CwINC90LAg0L/QsNGA0LDQvNC10YLRgNC40YLQtSDQt9CwINC00L7RgdGC0YrQvyDQtNC+INC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM5Cittc2dpZCAiQ29tcHV0ZSB1bmlxdWUgSUQgZm9yIGEgcGF0Y2giCittc2dzdHIgItCT0LXQvdC10YDQuNGA0LDQvdC1INC90LAg0YPQvdC40LrQsNC70LXQvSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQvdCwINC60YDRitC/0LrQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQwCittc2dpZCAiUHJ1bmUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLQntC60LDRgdGC0YDRj9C90LUg0L3QsCDQstGB0LjRh9C60Lgg0L3QtdC00L7RgdGC0LjQttC40LzQuCDQvtCx0LXQutGC0Lgg0LIg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCDQt9CwINC+0LHQtdC60YLQuNGC0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MQorbXNnaWQgIlJlbW92ZSBleHRyYSBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgaW4gcGFjayBmaWxlcyIKK21zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LTQvtC/0YrQu9C90LjRgtC10LvQvdC40YLQtSDQvtCx0LXQutGC0LgsINC60L7QuNGC0L4g0LLQtdGH0LUg0YHQsCDQsiDQv9Cw0LrQtdGC0L3QuCDRhNCw0LnQu9C+0LLQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQyCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgaW50ZWdyYXRlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoIgorbXNnc3RyICLQlNC+0YHRgtCw0LLRj9C90LUg0Lgg0LLQvdCw0YHRj9C90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0L7RgiDQtNGA0YPQs9C+INGF0YDQsNC90LjQu9C40YnQtSDQuNC70Lgg0LrQu9C+0L0iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MworbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAi0J7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4INC4INGB0LLRitGA0LfQsNC90LjRgtC1INGBINGC0Y/RhSDQvtCx0LXQutGC0LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NAorbXNnaWQgIkFwcGxpZXMgYSBxdWlsdCBwYXRjaHNldCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAi0J/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/QvtGA0LXQtNC40YbQsCDQvtGCINC60YDRitC/0LrQuCDQvtGCIHF1aWx0INC60YrQvCDRgtC10LrRg9GJ0LjRjyDQutC70L7QvSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ1Cittc2dpZCAiQ29tcGFyZSB0d28gY29tbWl0IHJhbmdlcyAoZS5nLiB0d28gdmVyc2lvbnMgb2YgYSBicmFuY2gpIgorbXNnc3RyICLQodGA0LDQstC90Y/QstCw0L3QtSDQvdCwINC00LLQsCDQtNC40LDQv9Cw0LfQvtC90LAg0L7RgiDQv9C+0LTQsNCy0LDQvdC40Y8gKNC90LDQv9GALiDQtNCy0LUg0LLQtdGA0YHQuNC4INC90LAg0LrQu9C+0L0pIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDYKK21zZ2lkICJSZWFkcyB0cmVlIGluZm9ybWF0aW9uIGludG8gdGhlIGluZGV4IgorbXNnc3RyICLQmNC30YfQuNGC0LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQvtCx0LXQutGCLdC00YrRgNCy0L4g0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NworbXNnaWQgIlJlYXBwbHkgY29tbWl0cyBvbiB0b3Agb2YgYW5vdGhlciBiYXNlIHRpcCIKK21zZ3N0ciAi0J/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQstGK0YDRhdGDINC00YDRg9CzINCy0YDRitGFIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDgKK21zZ2lkICJSZWNlaXZlIHdoYXQgaXMgcHVzaGVkIGludG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgItCf0L7Qu9GD0YfQsNCy0LDQvdC1INC90LAg0LjQt9GC0LvQsNGB0LrQsNC90L7RgtC+INCyINGF0YDQsNC90LjQu9C40YnQtdGC0L4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OQorbXNnaWQgIk1hbmFnZSByZWZsb2cgaW5mb3JtYXRpb24iCittc2dzdHIgItCj0L/RgNCw0LLQu9C10L3QuNC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINCyINC20YPRgNC90LDQu9CwINC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTUwCittc2dpZCAiTWFuYWdlIHNldCBvZiB0cmFja2VkIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAi0KPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDQvdCw0LHQvtGAINC+0YIg0YHQu9C10LTQtdC90Lgg0YXRgNCw0L3QuNC70LjRidCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTEKK21zZ2lkICJQYWNrIHVucGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5IgorbXNnc3RyICLQn9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdCwINC90LXQv9Cw0LrQtdGC0LjRgNCw0L3QuNGC0LUg0L7QsdC10LrRgtC4INCyINGF0YDQsNC90LjQu9C40YnQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTUyCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgcmVmcyB0byByZXBsYWNlIG9iamVjdHMiCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSwg0LjQt9Cy0LXQttC00LDQvdC1LCDQuNC30YLRgNC40LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70Lgg0LfQsCDQt9Cw0LzRj9C90LAg0L3QsCDQvtCx0LXQutGC0LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MworbXNnaWQgIkdlbmVyYXRlcyBhIHN1bW1hcnkgb2YgcGVuZGluZyBjaGFuZ2VzIgorbXNnc3RyICLQntCx0L7QsdGJ0LXQvdC40LUg0L3QsCDQv9GA0LXQtNGB0YLQvtGP0YnQuNGC0LUg0L/RgNC+0LzQtdC90LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NAorbXNnaWQgIlJldXNlIHJlY29yZGVkIHJlc29sdXRpb24gb2YgY29uZmxpY3RlZCBtZXJnZXMiCittc2dzdHIgItCf0YDQtdC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LLQtdGH0LUg0LfQsNC/0LDQt9C10L3QviDQutC+0YDQuNCz0LjRgNCw0L3QtSDQvdCwINC60L7QvdGE0LvQuNC60YIg0L/RgNC4INGB0LvQuNCy0LDQvdC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTUKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAi0J/RgNC40LLQtdC20LTQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCDQutGK0Lwg0LfQsNC00LDQtNC10L3QvtGC0L4g0YHRitGB0YLQvtGP0L3QuNC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTYKK21zZ2lkICJSZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAi0JLRitC30YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogY29tbWFuZC1saXN0Lmg6MTU3Cittc2dpZCAiUmV2ZXJ0IHNvbWUgZXhpc3RpbmcgY29tbWl0cyIKK21zZ3N0ciAi0J7RgtC80LXQvdGP0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQuCDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OAorbXNnaWQgIkxpc3RzIGNvbW1pdCBvYmplY3RzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQsiDQvtCx0YDQsNGC0L3QsCDRhdGA0L7QvdC+0LvQvtCz0LjRh9C10YHQutCwINC/0L7QtNGA0LXQtNCx0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OQorbXNnaWQgIlBpY2sgb3V0IGFuZCBtYXNzYWdlIHBhcmFtZXRlcnMiCittc2dzdHIgItCY0LfQsdC+0YAg0Lgg0L/RgNC+0LzRj9C90LAg0L3QsCDQv9Cw0YDQsNC80LXRgtGA0LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MAorbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtSDQvtGCINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC4INC40L3QtNC10LrRgdCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjEKK21zZ2lkICJTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGFzIGVtYWlscyIKK21zZ3N0ciAi0JjQt9C/0YDQsNGJ0LDQvdC1INC90LAg0L/QvtGA0LXQtNC40YbQsCDQvtGCINC60YDRitC/0LrQuCDQv9C+INC1LdC/0L7RidCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjIKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBHaXQgcHJvdG9jb2wgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICLQmNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LAg0L7QsdC10LrRgtC4INC/0L4g0L/RgNC+0YLQvtC60L7Qu9CwINC90LAgR2l0INC60YrQvCDQtNGA0YPQs9C+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTYzCittc2dpZCAiUmVzdHJpY3RlZCBsb2dpbiBzaGVsbCBmb3IgR2l0LW9ubHkgU1NIIGFjY2VzcyIKK21zZ3N0ciAi0J7Qs9GA0LDQvdC40YfQtdC90LAg0LLRhdC+0LTQvdCwINC+0LHQstC40LLQutCwINC30LAg0LTQvtGB0YLRitC/INC/0YDQtdC3IFNTSCDRgdCw0LzQviDQtNC+IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY0Cittc2dpZCAiU3VtbWFyaXplICdnaXQgbG9nJyBvdXRwdXQiCittc2dzdHIgItCe0LHQvtCx0YnQtdC9INC40LfRhdC+0LQg0L7RgiDigJ5naXQgbG9n4oCcIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjUKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQsNC30LvQuNGH0L3QuNGC0LUg0LLQuNC00L7QstC1INC+0LHQtdC60YLQuCDQsiBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NgorbXNnaWQgIlNob3cgYnJhbmNoZXMgYW5kIHRoZWlyIGNvbW1pdHMiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC60LvQvtC90LjRgtC1INC4INC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LIg0YLRj9GFIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjcKK21zZ2lkICJTaG93IHBhY2tlZCBhcmNoaXZlIGluZGV4IgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCDQvdCwINC/0LDQutC10YLQuNGA0LDQvdC40Y8g0LDRgNGF0LjQsiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY4Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSDQsiDQu9C+0LrQsNC70L3QviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OQorbXNnaWQgIkdpdCdzIGkxOG4gc2V0dXAgY29kZSBmb3Igc2hlbGwgc2NyaXB0cyIKK21zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4INC90LAgR2l0INC30LAg0LjQvdGC0LXRgNC90LDRhtC40L7QvdCw0LvQuNC30LDRhtC40Y8g0L3QsCDRgdC60YDQuNC/0YLQvtCy0LXRgtC1INC90LAg0L7QsdCy0LjQstC60LDRgtCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzAKK21zZ2lkICJDb21tb24gR2l0IHNoZWxsIHNjcmlwdCBzZXR1cCBjb2RlIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0L3QsCBHaXQg0LfQsCDRgdC60YDQuNC/0YLQvtCy0LXRgtC1INC90LAg0L7QsdCy0LjQstC60LDRgtCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzEKK21zZ2lkICJJbml0aWFsaXplIGFuZCBtb2RpZnkgdGhlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAi0JjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L3QtSDQuCDQv9GA0L7QvNGP0L3QsCDQvdCwINGH0LDRgdGC0LjRh9C90L7RgtC+INC40LfRgtC10LPQu9GP0L3QtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTcyCittc2dpZCAiU3Rhc2ggdGhlIGNoYW5nZXMgaW4gYSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeSBhd2F5IgorbXNnc3RyICLQodC60LDRgtCw0LLQsNC90LUg0L3QsCDQvdC10L/QvtC00LDQtNC10L3QuNGC0LUg0L/RgNC+0LzQtdC90Lgg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MworbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBzdGFnaW5nIGFyZWEiCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDRhNCw0LnQu9CwINC60YrQvCDQuNC90LTQtdC60YHQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc0Cittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzUKK21zZ2lkICJSZW1vdmUgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSIKK21zZ3N0ciAi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQuNC30LvQuNGI0L3QuNGC0LUg0LfQvdCw0YbQuCDQt9CwINC40L3RgtC10YDQstCw0LvQuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc2Cittc2dpZCAiSW5pdGlhbGl6ZSwgdXBkYXRlIG9yIGluc3BlY3Qgc3VibW9kdWxlcyIKK21zZ3N0ciAi0JjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L3QtSwg0L7QsdC90L7QstGP0LLQsNC90LUg0LjQu9C4INGA0LDQt9Cz0LvQtdC20LTQsNC90LUg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NworbXNnaWQgIkJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYW5kIEdpdCIKK21zZ3N0ciAi0JTQstGD0L/QvtGB0L7Rh9C90LAg0YDQsNCx0L7RgtCwINC80LXQttC00YMg0YXRgNCw0L3QuNC70LjRidCwINC/0L7QtCBTdWJ2ZXJzaW9uINC4IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc4Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIgorbXNnc3RyICLQn9GA0LXQvNC40L3QsNCy0LDQvdC1INC60YrQvCDQtNGA0YPQsyDQutC70L7QvSIKKworIzogY29tbWFuZC1saXN0Lmg6MTc5Cittc2dpZCAiUmVhZCwgbW9kaWZ5IGFuZCBkZWxldGUgc3ltYm9saWMgcmVmcyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1LCDQv9GA0L7QvNGP0L3QsCDQuCDQuNC30YLRgNC40LLQsNC90LUg0L3QsCDRgdC40LzQstC+0LvQvdC4INGD0LrQsNC30LDRgtC10LvQuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTgwCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSwg0YHRitC30LTQsNCy0LDQvdC1LCDQuNC30YLRgNC40LLQsNC90LUsINC/0YDQvtCy0LXRgNC60LAg0L3QsCDQtdGC0LjQutC10YLQuCDQv9C+0LTQv9C40YHQsNC90Lgg0YEgR1BHIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODEKK21zZ2lkICJDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBhIGJsb2IncyBjb250ZW50cyIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0LLRgNC10LzQtdC90LXQvSDRhNCw0LnQuyDRgdGK0YEg0YHRitGJ0L7RgtC+INGB0YrQtNGK0YDQttCw0L3QuNC1INC60LDRgtC+INC+0LHQtdC60YLRitGCLUJMT0IiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MgorbXNnaWQgIlVucGFjayBvYmplY3RzIGZyb20gYSBwYWNrZWQgYXJjaGl2ZSIKK21zZ3N0ciAi0KDQsNC30L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDQvtCx0LXQutGC0Lgg0L7RgiDQv9Cw0LrQtdGC0LjRgNCw0L0g0LDRgNGF0LjQsiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgzCittc2dpZCAiUmVnaXN0ZXIgZmlsZSBjb250ZW50cyBpbiB0aGUgd29ya2luZyB0cmVlIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi0KDQtdCz0LjRgdGC0YDQuNGA0LDQvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC90LAg0YTQsNC50LvQvtCy0LXRgtC1INC+0YIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NAorbXNnaWQgIlVwZGF0ZSB0aGUgb2JqZWN0IG5hbWUgc3RvcmVkIGluIGEgcmVmIHNhZmVseSIKK21zZ3N0ciAi0JHQtdC30L7Qv9Cw0YHQvdC+INC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LjQvNC10YLQviDQvdCwINC+0LHQtdC60YIg0LIg0YPQutCw0LfQsNGC0LXQuyIKKworIzogY29tbWFuZC1saXN0Lmg6MTg1Cittc2dpZCAiVXBkYXRlIGF1eGlsaWFyeSBpbmZvIGZpbGUgdG8gaGVscCBkdW1iIHNlcnZlcnMiCittc2dzdHIgIiIKKyLQntCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGE0LDQudC70LAg0YEg0LTQvtC/0YrQu9C90LjRgtC10LvQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINCyINC/0L7QvNC+0Ykg0L3QsCDQvtC/0YDQvtGB0YLQtdC90LjRgtC1INGB0YrRgNCy0YrRgNC4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxODYKK21zZ2lkICJTZW5kIGFyY2hpdmUgYmFjayB0byBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAi0JjQt9C/0YDQsNGJ0LDQvdC1INC90LAg0LDRgNGF0LjQstCwINC+0LHRgNCw0YLQvdC+INC60YrQvCDigJ5naXQtYXJjaGl2ZeKAnCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg3Cittc2dpZCAiU2VuZCBvYmplY3RzIHBhY2tlZCBiYWNrIHRvIGdpdC1mZXRjaC1wYWNrIgorbXNnc3RyICLQmNC30L/RgNCw0YnQsNC90LUg0L3QsCDQv9Cw0LrQtdGC0LjRgNCw0L3QuNGC0LUg0L7QsdC10LrRgtC4INC+0LHRgNCw0YLQvdC+INC60YrQvCDigJ5naXQtZmV0Y2gtcGFja+KAnCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiU2hvdyBhIEdpdCBsb2dpY2FsIHZhcmlhYmxlIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQu9C+0LPQuNGH0LXRgdC60LAg0L/RgNC+0LzQtdC90LvQuNCy0LAg0L3QsCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OQorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIGNvbW1pdHMiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L3QsCDQv9C+0LTQv9C40YHQuNGC0LUgR1BHINCy0YrRgNGF0YMg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTkwCittc2dpZCAiVmFsaWRhdGUgcGFja2VkIEdpdCBhcmNoaXZlIGZpbGVzIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC90LAg0L/QsNC60LXRgtC40YDQsNC90LjRgtC1INCw0YDRhdC40LLQvdC4INGE0LDQudC70L7QstC1INC90LAgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTEKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiB0YWdzIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC90LAg0L/QvtC00L/QuNGB0LjRgtC1IEdQRyDQstGK0YDRhdGDINC10YLQuNC60LXRgtC40YLQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTkyCittc2dpZCAiR2l0IHdlYiBpbnRlcmZhY2UgKHdlYiBmcm9udGVuZCB0byBHaXQgcmVwb3NpdG9yaWVzKSIKK21zZ3N0ciAi0KPQtdCxINC40L3RgtC10YDRhNC10LnRgSDQvdCwIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTkzCittc2dpZCAiU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQttGD0YDQvdCw0Lsg0YEg0YDQsNC30LvQuNC60LjRgtC1LCDQstGK0LLQtdC00LXQvdC4INGBINCy0YHRj9C60L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTk0Cittc2dpZCAiTWFuYWdlIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMiCittc2dzdHIgItCj0L/RgNCw0LLQu9C10L3QuNC1INC90LAg0LzQvdC+0LbQtdGB0YLQstC+INGA0LDQsdC+0YLQvdC4INC00YrRgNCy0LXRgtCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTUKK21zZ2lkICJDcmVhdGUgYSB0cmVlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQvtCx0LXQutGCLdC00YrRgNCy0L4g0L7RgiDRgtC10LrRg9GJ0LjRjyDQuNC90LTQtdC60YEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NgorbXNnaWQgIkRlZmluaW5nIGF0dHJpYnV0ZXMgcGVyIHBhdGgiCittc2dzdHIgItCj0LrQsNC30LLQsNC90LUg0L3QsCDQsNGC0YDQuNCx0YPRgtC4INC60YrQvCDQv9GK0YIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NworbXNnaWQgIkdpdCBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGFuZCBjb252ZW50aW9ucyIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LXQvSDRgNC10LQg0Lgg0LrQvtC90LLQtdC90YbQuNC4INC90LAgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTgKK21zZ2lkICJBIEdpdCBjb3JlIHR1dG9yaWFsIGZvciBkZXZlbG9wZXJzIgorbXNnc3RyICLQktGK0LLQtdC20LTQsNGJINGD0YDQvtC6INCyIEdpdCDQt9CwINGA0LDQt9GA0LDQsdC+0YLRh9C40YbQuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTk5Cittc2dpZCAiR2l0IGZvciBDVlMgdXNlcnMiCittc2dzdHIgIkdpdCDQt9CwINC/0L7RgtGA0LXQsdC40YLQtdC70Lgg0L3QsCBDVlMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMAorbXNnaWQgIlR3ZWFraW5nIGRpZmYgb3V0cHV0IgorbXNnc3RyICLQndCw0YHRgtGA0L7QudCy0LDQvdC1INC90LAg0LjQt9Cz0LvQtdC00LAg0L3QsCDRgNCw0LfQu9C40LrQuNGC0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMQorbXNnaWQgIkEgdXNlZnVsIG1pbmltdW0gc2V0IG9mIGNvbW1hbmRzIGZvciBFdmVyeWRheSBHaXQiCittc2dzdHIgItCf0L7Qu9C10LfQtdC9INC80LjQvdC40LzQsNC70LXQvSDQvdCw0LHQvtGAINC+0YIg0LrQvtC80LDQvdC00Lgg0LfQsCDQtdC20LXQtNC90LXQstC90LDRgtCwINGA0LDQsdC+0YLQsCDRgSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMgorbXNnaWQgIkEgR2l0IEdsb3NzYXJ5IgorbXNnc3RyICLQoNC10YfQvdC40Log0YEg0YLQtdGA0LzQuNC90LjRgtC1INC90LAgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDMKK21zZ2lkICJIb29rcyB1c2VkIGJ5IEdpdCIKK21zZ3N0ciAi0JrRg9C60Lgg0L3QsCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNAorbXNnaWQgIlNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUiCittc2dzdHIgItCj0LrQsNC30LLQsNC90LUg0L3QsCDQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUsINC60L7QuNGC0L4g0LTQsCDQsdGK0LTQsNGCINC90LDRgNC+0YfQvdC+INC/0YDQtdC90LXQsdGA0LXQs9Cy0LDQvdC4IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDUKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAi0JTQtdGE0LjQvdC40YDQsNC90LUg0L3QsCDRgdCy0L7QudGB0YLQstCw0YLQsCDQvdCwINC/0L7QtNC80L7QtNGD0LvQuNGC0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNgorbXNnaWQgIkdpdCBuYW1lc3BhY2VzIgorbXNnc3RyICLQn9GA0L7RgdGC0YDQsNC90YHRgtCy0LAg0L7RgiDQuNC80LXQvdCwINC90LAgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDcKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSBMYXlvdXQiCittc2dzdHIgItCj0YHRgtGA0L7QudGB0YLQstC+INC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQviDQvdCwIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA4Cittc2dpZCAiU3BlY2lmeWluZyByZXZpc2lvbnMgYW5kIHJhbmdlcyBmb3IgR2l0IgorbXNnc3RyICLQo9C60LDQt9Cy0LDQvdC1INC90LAg0LLQtdGA0YHQuNC4INC4INC00LjQsNC/0LDQt9C+0L3QuCDQsiBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOQorbXNnaWQgIk1vdW50aW5nIG9uZSByZXBvc2l0b3J5IGluc2lkZSBhbm90aGVyIgorbXNnc3RyICLQnNC+0L3RgtC40YDQsNC90LUg0L3QsCDQtdC00L3QviDRhdGA0LDQvdC40LvQuNGJ0LUg0LIg0LTRgNGD0LPQviIKKworIzogY29tbWFuZC1saXN0Lmg6MjEwCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0OiBwYXJ0IHR3byIKK21zZ3N0ciAi0JLRitCy0LXQttC00LDRiSDRg9GA0L7QuiDQt9CwIEdpdDog0LLRgtC+0YDQsCDRh9Cw0YHRgiIKKworIzogY29tbWFuZC1saXN0Lmg6MjExCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0IgorbXNnc3RyICLQktGK0LLQtdC20LTQsNGJINGD0YDQvtC6INC30LAgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTIKK21zZ2lkICJBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQiCittc2dzdHIgItCe0LHRiSDQv9GA0LXQs9C70LXQtCDQvdCwINC/0YDQtdC/0L7RgNGK0YfQstCw0L3QuNGC0LUg0L3QsNGH0LjQvdC4INC30LAg0YDQsNCx0L7RgtCwINGBIEdpdCIKKworIzogZ2l0LWJpc2VjdC5zaDo1NAorbXNnaWQgIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorbXNnc3RyICLQl9Cw0L/QvtGH0L3QtdGC0LUg0LrQsNGC0L4g0LjQt9C/0YrQu9C90LjRgtC1INC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgYmlzZWN0IHN0YXJ04oCcIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6NjAKK21zZ2lkICJEbyB5b3Ugd2FudCBtZSB0byBkbyBpdCBmb3IgeW91IFtZL25dPyAiCittc2dzdHIgItCU0LAg0YHQtSDQuNC30LLRitGA0YjQuCDQu9C4INCw0LLRgtC+0LzQsNGC0LjRh9C90L4/IOKAnlnigJwg4oCUICDQlNCQLCDigJ5u4oCcIOKAlCDQvdC1IgorCisjOiBnaXQtYmlzZWN0LnNoOjEwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGFyZyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90LAg0LLQtdGA0YHQuNGPOiDigJ4ke2FyZ33igJwiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTIxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYmlzZWN0ZWRfaGVhZCIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90LAg0LLQtdGA0YHQuNGPOiDigJ4kYmlzZWN0ZWRfaGVhZOKAnCIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdCwINCy0LXRgNGB0LjRjzog4oCeJHtyZXZ94oCcIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzOQorIywgc2gtZm9ybWF0Cittc2dpZCAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgYmlzZWN0ICR7VEVSTV9CQUR94oCcINC/0YDQuNC10LzQsCDRgdCw0LzQviDQtdC00LjQvSDQsNGA0LPRg9C80LXQvdGCLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMDkKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICLQndC1INC1INC30LDQtNCw0LTQtdC9INC20YPRgNC90LDQu9C10L0g0YTQsNC50LsiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICIiCisi0JbRg9GA0L3QsNC70L3QuNGP0YIg0YTQsNC50Lsg4oCeJHtmaWxlfeKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSwg0LfQsCDQtNCwINGB0LUg0LjQt9C/0YrQu9C90Y/RgiAiCisi0LrQvtC80LDQvdC00LjRgtC1INC+0YIg0L3QtdCz0L4g0L3QsNC90L7QstC+IgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMgorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiIgorItCd0LXQv9C+0LfQvdCw0YLQsCDQutC+0LzQsNC90LTQsC4gINCS0YrQt9C80L7QttC90LjRgtC1INCy0LDRgNC40LDQvdGC0Lgg0YHQsDog4oCec3RhcnTigJwsIOKAnmdvb2TigJwsIOKAnmJhZOKAnCwg4oCec2tpcOKAnCIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDEKK21zZ2lkICJiaXNlY3QgcnVuIGZhaWxlZDogbm8gY29tbWFuZCBwcm92aWRlZC4iCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQtNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtSwg0L3QtSDQtSDQt9Cw0LTQsNC00LXQvdCwINC60L7QvNCw0L3QtNCwLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgItC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAniR7Y29tbWFuZH3igJwiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgIiIKKyLQvdC10YPRgdC/0LXRiNC90L4g0LTQstC+0LjRh9C90L4g0YLRitGA0YHQtdC90LU6XG4iCisi0LjQt9GF0L7QtNC90LjRj9GCINC60L7QtCDQvtGCINC60L7QvNCw0L3QtNCw0YLQsCDigJ4ke2NvbW1hbmR94oCcINC1ICR7cmVzfSDigJQg0YLQvtCy0LAg0LUg0LjQt9Cy0YrQvSDQuNC90YLQtdGA0LLQsNC70LAgIgorIlswLCAxMjgpIgorCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICLQtNCy0L7QuNGH0L3QvtGC0L4g0YLRitGA0YHQtdC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINC/0YDQvtC00YrQu9C20LgiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjg1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHJlcyIKK21zZ3N0ciAiIgorItC90LXRg9GB0L/QtdGI0L3QviDQtNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtTpcbiIKKyLRhNGD0L3QutGG0LjRj9GC0LAg4oCeYmlzZWN0X3N0YXRlICR7c3RhdGV94oCcINC30LDQstGK0YDRiNC4INGBINC60L7QtCDQt9CwINCz0YDQtdGI0LrQsCAke3Jlc30iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjkyCittc2dpZCAiYmlzZWN0IHJ1biBzdWNjZXNzIgorbXNnc3RyICLRg9GB0L/QtdGI0L3QviDQtNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtSIKKworIzogZ2l0LWJpc2VjdC5zaDozMDAKK21zZ2lkICJXZSBhcmUgbm90IGJpc2VjdGluZy4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINC90LUg0YHQtSDQuNC30LLRitGA0YjQstCwINC00LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1LiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NDYKK21zZ2lkICIiCisiRXJyb3I6IFlvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJtZXJnZSIKK21zZ3N0ciAi0JPRgNC10YjQutCwOiDQodC70LjQstCw0L3QtdGC0L4g0YnQtSDQv9GA0LXQt9Cw0L/QuNGI0LUg0LvQvtC60LDQu9C90LjRgtC1INC/0YDQvtC80LXQvdC4INC90LAg0YLQtdC30Lgg0YTQsNC50LvQvtCy0LU6IgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MQorbXNnaWQgIkF1dG9tYXRlZCBtZXJnZSBkaWQgbm90IHdvcmsuIgorbXNnc3RyICLQkNCy0YLQvtC80LDRgtC40YfQvdC+0YLQviDRgdC70LjQstCw0L3QtSDQvdC1INGB0YDQsNCx0L7RgtC4LiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjIKK21zZ2lkICJTaG91bGQgbm90IGJlIGRvaW5nIGFuIG9jdG9wdXMuIgorbXNnc3RyICLQndC1INGC0YDRj9Cx0LLQsCDQtNCwINGB0LUg0L/RgNCw0LLQuCDQvNC90L7QttC10YHRgtCy0LXQvdC+INGB0LvQuNCy0LDQvdC1LiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGNvbW1vbiBjb21taXQgd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQutGA0LjQtSDQvtCx0YnQviDQv9C+0LTQsNCy0LDQvdC1INGBIOKAniRwcmV0dHlfbmFtZeKAnCIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAi0JLQtdGH0LUg0LUg0L7QsdC90L7QstC10L3QviDQtNC+IOKAniRwcmV0dHlfbmFtZeKAnCIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyB0bzogJHByZXR0eV9uYW1lIgorbXNnc3RyICLQn9GA0LXQstGK0YDRgtCw0L3QtSDQtNC+IOKAniRwcmV0dHlfbmFtZeKAnCIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6OTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgItCe0L/QuNGCINC30LAg0L/RgNC+0YHRgtC+INGB0LvQuNCy0LDQvdC1INGBIOKAniRwcmV0dHlfbmFtZeKAnCIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6MTAyCittc2dpZCAiU2ltcGxlIG1lcmdlIGRpZCBub3Qgd29yaywgdHJ5aW5nIGF1dG9tYXRpYyBtZXJnZS4iCittc2dzdHIgItCf0YDQvtGB0YLQvtGC0L4g0YHQu9C40LLQsNC90LUg0L3QtSDRgdGA0LDQsdC+0YLQuCwg0L/RgNC+0LHQstCwINGB0LUg0LDQstGC0L7QvNCw0YLQuNGH0L3QviDRgdC70LjQstCw0L3QtS4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjIxCittc2dpZCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiCittc2dzdHIgItCS0YDQtdC80LXQvdC90LjRj9GCINC40L3QtNC10LrRgSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjI3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAkcmVmX3N0YXNoIHdpdGggJHdfY29tbWl0IgorbXNnc3RyICIiCisi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeJHtyZWZfc3Rhc2h94oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvSDQtNCwINGB0L7Rh9C4INC60YrQvCDigJ4ke3dfY29tbWl0feKAnCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHB1c2gnOiAkb3B0aW9uIgorbXNnc3RyICLQk9Cg0JXQqNCa0JA6INC60L7QvNCw0L3QtNCw0YLQsCDigJ5zdGFzaCBwdXNo4oCcINC90LUg0L/RgNC40LXQvNCwINC+0L/RhtC40Y/RgtCwIOKAniRvcHRpb27igJwiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJHN0YXNoX21zZyIKK21zZ3N0ciAiIgorItCh0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDRgNCw0LHQvtGC0L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0Lgg0LjQvdC00LXQutGB0LAg0YHQsCDQt9Cw0L/QsNC30LXQvdC4OiDigJ4kc3Rhc2hfbXNn4oCcIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjUzNgorIywgc2gtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICRvcHQiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDQvtC/0YbQuNGPOiAke29wdH0iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QuCDRgdCwINC/0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INCy0LXRgNGB0LjQuDog4oCeJHtSRVZ94oCcIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAniR7cmVmZXJlbmNlfeKAnCDQtSDQs9GA0LXRiNC10L0iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICLigJ4ke2FyZ3N94oCcINC90LUg0LUg0L/QvtC00LDQstCw0L3QtSwg0L/RgNC40LvQuNGH0LDRidC+INC90LAg0L3QtdGJ0L4g0YHQutCw0YLQsNC90L4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAi4oCeJHthcmdzfeKAnCDQvdC1INC1INGD0LrQsNC30LDRgtC10Lsg0LrRitC8INC90LXRidC+INGB0LrQsNGC0LDQvdC+IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYxOAorbXNnaWQgInVuYWJsZSB0byByZWZyZXNoIGluZGV4IgorbXNnc3RyICLQuNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MjIKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgItCf0L4g0LLRgNC10LzQtSDQvdCwINGB0LvQuNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQv9GA0LjQu9C+0LbQuNGC0LUg0L3QtdGJ0L4g0YHQutCw0YLQsNC90L4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMwCittc2dpZCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiIgorItCSINC40L3QtNC10LrRgdCwINC40LzQsCDQutC+0L3RhNC70LjQutGC0LguICDQn9GA0L7QsdCy0LDQudGC0LUg0LTQsCDQuNC30L/RitC70L3QuNGC0LUg0LrQvtC80LDQvdC00LDRgtCwINCx0LXQtyDQvtC/0YbQuNGP0YLQsCDigJ4tLSIKKyJpbmRleOKAnC4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMyCittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAi0JTRitGA0LLQvtGC0L4g0YHQvtGH0LXQvdC+INC+0YIg0LjQvdC00LXQutGB0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC90L4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjQxCittc2dpZCAiQ291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2ggZW50cnkiCittc2dzdHIgItCd0LXRgdC70LXQtNC10L3QuCDRhNCw0LnQu9C+0LLQtSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDRgdC1INCy0YrQt9GB0YLQsNC90L7QstGP0YIg0L7RgiDRgdC60LDRgtCw0L3QvtGC0L4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjY2Cittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgItCf0YDQvtC80LXQvdC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQuNC30LLQsNC00LXQvdC4INC+0YIg0LjQvdC00LXQutGB0LAiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICLQmNC30YLRgNC40YLQviDQtSDRgdC60LDRgtCw0L3QvtGC0L4g4oCeJHtSRVZ94oCcICgkcykiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICLQodC60LDRgtCw0L3QvtGC0L4g4oCeJHtSRVZ94oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YLQviIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3OTIKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIijQl9CwINC00LAg0LPQuCDQstGK0LfRgdGC0LDQvdC+0LLQuNGC0LUsINC40LfQv9GK0LvQvdC10YLQtSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IHN0YXNoIGFwcGx54oCcKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMDMKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorItCe0YLQvdC+0YHQuNGC0LXQu9C10L0g0L/RitGCINC80L7QttC1INC00LAg0YHQtSDQv9C+0LvQt9Cy0LAg0YHQsNC80L4g0L7RgiDQvtGB0L3QvtCy0L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4gIgorItC00YrRgNCy0L4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjEzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJyZXBvIFVSTDogJyRyZXBvJyBtdXN0IGJlIGFic29sdXRlIG9yIGJlZ2luIHdpdGggLi98Li4vIgorbXNnc3RyICIiCisi0LDQtNGA0LXRgSDQvdCwINGF0YDQsNC90LjQu9C40YnQtTog4oCeJHtyZXBvfeKAnCDRgtGA0Y/QsdCy0LAg0LjQu9C4INC00LAg0LUg0LDQsdGB0L7Qu9GO0YLQtdC9LCDQuNC70Lgg0LTQsCDQt9Cw0L/QvtGH0LLQsCDRgSAiCisi4oCeLi/igJwg0LjQu9C4IOKAni4uL+KAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IgorbXNnc3RyICLigJ4ke3NtX3BhdGh94oCcINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINCyINC40L3QtNC10LrRgdCwIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAi4oCeJHtzbV9wYXRofeKAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQsiDQuNC90LTQtdC60YHQsCDQuCDQvdC1INC1INC/0L7QtNC80L7QtNGD0LsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgItCyIOKAniR7c21fcGF0aH3igJwg0L3QtSDQtSDQuNC30YLQtdCz0LvQtdC90L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICckc21fcGF0aCcgdG8gdGhlIGluZGV4IgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0LIg4oCeJHtzbV9wYXRofeKAnCDQutGK0Lwg0LjQvdC00LXQutGB0LAiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYSB2YWxpZCBnaXQgcmVwbyIKK21zZ3N0ciAi4oCeJHtzbV9wYXRofeKAnCDRgdGK0YnQtdGB0YLQstGD0LLQsCwg0LAg0L3QtSDQtSDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBHaXQiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBIGdpdCBkaXJlY3RvcnkgZm9yICckc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCittc2dzdHIgIiIKKyLQntGC0LrRgNC40YLQsCDQtSDQu9C+0LrQsNC70L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwIEdpdCDigJQg4oCeJHtzbV9uYW1lfeKAnCwg0LrQvtGP0YLQviDRgdC+0YfQuCDQutGK0LwgIgorItC+0YLQtNCw0LvQtdGH0LXQvdC40YLQtSDRhdGA0LDQvdC40LvQuNGJ0LA6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbVxuIgorIiAgJHJlYWxyZXBvXG4iCisidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgIgorInJlcG9cbiIKKyJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyAiCisib3B0aW9uLiIKK21zZ3N0ciAiIgorItCQ0LrQviDQuNGB0LrQsNGC0LUg0LTQsCDQv9GA0LXQuNC30L/QvtC70LfQstCw0YLQtSDRgtCw0LfQuCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwIGdpdCwg0LLQvNC10YHRgtC+INC00LAg0LrQu9C+0L3QuNGA0LDRgtC1ICIKKyLQvtGC0L3QvtCy0L5cbiIKKyIgICAgJHJlYWxyZXBvXG4iCisi0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsCDigJ4tLWZvcmNl4oCcLiAg0JDQutC+INC70L7QutCw0LvQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwIGdpdCDQvdC1INC1INC30LBcbiIKKyLQv9GA0LDQstC40LvQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0LjQu9C4INCw0LrQviDQvdC1INC30L3QsNC10YLQtSDQutCw0LrQstC+INC+0LfQvdCw0YfQsNCy0LAg0YLQvtCy0LAsINC40LfQv9C+0LvQt9Cy0LDQudGC0LVcbiIKKyLQtNGA0YPQs9C+INC40LzQtSDQutCw0YLQviDQsNGA0LPRg9C80LXQvdGCINC60YrQvCDQvtC/0YbQuNGP0YLQsCDigJ4tLW5hbWXigJwuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnJHNtX25hbWUnLiIKK21zZ3N0ciAi0JDQutGC0LjQstC40YDQsNC90LUg0L3QsCDQu9C+0LrQsNC70L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INC30LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniR7c21fbmFtZX3igJwg0L3QsNC90L7QstC+LiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAi0J/QvtC00LzQvtC00YPQu9GK0YIg4oCeJHtzbV9wYXRofeKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0LXQs9C70LXQvSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniR7c21fcGF0aH3igJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgNC10LPQuNGB0YLRgNC40YDQsNC90LUg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJHtzbV9wYXRofeKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgItCi0LXQutGD0YnQsNGC0LAg0LLQtdGA0YHQuNGPINC30LAg0L/QvtC00LzQvtC00YPQu9CwINCyIOKAniR7ZGlzcGxheXBhdGh94oCcINC70LjQv9GB0LLQsCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LTQvtGB0YLQsNCy0Y/QvdC1INCyINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniR7c21fcGF0aH3igJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZpbmQgY3VycmVudCAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0gcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggIgorIickc21fcGF0aCciCittc2dzdHIgIiIKKyLQotC10LrRg9GJ0LDRgtCwINCy0LXRgNGB0LjRjyDigJ4ke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH3igJwg0LIg0L/RitGC0Y8g0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJHtzbV9wYXRofeKAnCAiCisi0LvQuNC/0YHQstCwIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyMworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzsgdHJ5aW5nIHRvIGRpcmVjdGx5IGZldGNoICIKKyIkc2hhMToiCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90L4g0LTQvtGB0YLQsNCy0Y/QvdC1INCyINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniR7ZGlzcGxheXBhdGh94oCcLCDQvtC/0LjRgiDQt9CwINC00LjRgNC10LrRgtC90L4gIgorItC00L7RgdGC0LDQstGP0L3QtSDQvdCwIOKAniR7c2hhMX3igJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjI5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRmV0Y2hlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJywgYnV0IGl0IGRpZCBub3QgY29udGFpbiAkc2hhMS4gIgorIkRpcmVjdCBmZXRjaGluZyBvZiB0aGF0IGNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICIiCisi0J/QvtC00LzQvtC00YPQu9GK0YIg0LIg0L/RitGC0Y8g4oCeJGRpc3BsYXlwYXRo4oCcINC1INC00L7RgdGC0LDQstC10L0sINC90L4g0L3QtSDRgdGK0LTRitGA0LbQsCDQvtCx0LXQutGC0LAg0YHRitGBINGB0YPQvNCwXG4iCisi4oCeJHtzaGExfeKAnC4gINCU0LjRgNC10LrRgtC90L7RgtC+INC00L7RgdGC0LDQstGP0L3QtSDQvdCwINGC0L7QstCwINC/0L7QtNCw0LLQsNC90LUg0LUg0L3QtdGD0YHQv9C10YjQvdC+LiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdC+INC40LfRgtC10LPQu9GP0L3QtSDQvdCwINCy0LXRgNGB0LjRjyDigJ4ke3NoYTF94oCcINCyINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniR7ZGlzcGxheXBhdGh94oCcJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICLQn9GK0YIg0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJHtkaXNwbGF5cGF0aH3igJw6INC40LfRgtC10LPQu9C10L3QsCDQtSDQstC10YDRgdC40Y8g4oCeJHtzaGExfeKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QviDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INC90LAg0LLQtdGA0YHQuNGPIOKAniR7c2hhMX3igJwg0LIg0L/RitGC0Y8g0LrRitC8INC/0L7QtNC80L7QtNGD0LsgIgorIuKAniR7ZGlzcGxheXBhdGh94oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICLQn9GK0YIg0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJHtkaXNwbGF5cGF0aH3igJw6INC/0YDQtdCx0LDQt9C40YDQsNC90LUg0LLRitGA0YXRgyDQstC10YDRgdC40Y8g4oCeJHtzaGExfeKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1INC90LAg0LLQtdGA0YHQuNGPIOKAniR7c2hhMX3igJwg0LIg0L/RitGC0Y8g0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJHtkaXNwbGF5cGF0aH3igJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQ4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgItCf0YrRgiDQutGK0Lwg0L/QvtC00LzQvtC00YPQuyDigJ4ke2Rpc3BsYXlwYXRofeKAnDog0YHQu9C40LLQsNC90LUg0YEg0LLQtdGA0YHQuNGPIOKAniR7c2hhMX3igJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gb2YgJyRjb21tYW5kICRzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeJHtjb21tYW5kfSAke3NoYTF94oCcINCyINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7ICIKKyLigJ4ke2Rpc3BsYXlwYXRofeKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICLQn9GK0YIg0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJHtkaXNwbGF5cGF0aH3igJw6IOKAniR7Y29tbWFuZH0gJHtzaGExfeKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2ODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90LAg0L7QsdGA0LDQsdC+0YLQutCwINC90LAg0L/QvtC00LTQuNGA0LXQutGC0L7RgNC40LjRgtC1INCyINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniR7ZGlzcGxheXBhdGh94oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni0tY2FjaGVk4oCcINC4IOKAni0tZmlsZXPigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTQ4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG1vZGUgJG1vZF9kc3QiCittc2dzdHIgItC90LXQvtGH0LDQutCy0LDQvSDRgNC10LbQuNC8IOKAniR7bW9kX2RzdH3igJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTY4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiIKKyIgINCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6IOKAniR7ZGlzcGxheV9uYW1lfeKAnCDQvdC1INGB0YrQtNGK0YDQttCwINC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniR7c2hhMV9zcmN94oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisiICDQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDigJ4ke2Rpc3BsYXlfbmFtZX3igJwg0L3QtSDRgdGK0LTRitGA0LbQsCDQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4ke3NoYTFfZHN0feKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiIgorIiAg0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog4oCeJHtkaXNwbGF5X25hbWV94oCcINC90LUg0YHRitC00YrRgNC20LAg0L3QuNC60L7QtSDQvtGCINC/0L7QtNCw0LLQsNC90LjRj9GC0LAgIgorIuKAniR7c2hhMV9zcmN94oCcINC4IOKAniR7c2hhMV9kc3R94oCcIgorCisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTZWUgZ2l0LSR7Y21kfSgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgItCX0LAg0L/QvtCy0LXRh9C1INC40L3RhNC+0YDQvNCw0YbQuNGPINC/0L7Qs9C70LXQtNC90LXRgtC1INGA0YrQutC+0LLQvtC00YHRgtCy0L7RgtC+INC90LAg4oCeZ2l0LSR7Y21kfSgxKeKAnCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEwOQorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAi0JDQstGC0L7QvNCw0YLQuNGH0L3QviDRgdC60LDRgtCw0L3QvtGC0L4g0LUg0L/RgNC40LvQvtC20LXQvdC+LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICRzdGFzaF9zaGExIgorbXNnc3RyICLigJ4kc3Rhc2hfc2hhMeKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L0iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzaW5nICgkbmV3X2NvdW50LyR0b3RhbCkiCittc2dzdHIgItCf0YDQtdCx0LDQt9C40YDQsNC90LUgKCRuZXdfY291bnQvJHRvdGFsKSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIwNworbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNlIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdFxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisieCwgZXhlYyA8Y29tbWl0PiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQmtC+0LzQsNC90LTQuDpcbiIKKyIgcCwgcGljayDQn9Ce0JTQkNCS0JDQndCVICAg4oCUINC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+XG4iCisiIHIsIHJld29yZCDQn9Ce0JTQkNCS0JDQndCVIOKAlCDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviwg0L3QviDRgdC80Y/QvdCwINC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQvNGDXG4iCisiIGUsIGVkaXQg0J/QntCU0JDQktCQ0J3QlSAgIOKAlCDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviDQuCDRgdC/0LjRgNCw0L3QtSDQv9GA0Lgg0L3QtdCz0L4g0LfQsCDQvtGJ0LUgIgorItC/0YDQvtC80LXQvdC4XG4iCisiIHMsIHNxdWFzaCDQn9Ce0JTQkNCS0JDQndCVIOKAlCDQstC60LDRgNCy0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4g0LIg0L/RgNC10LTRhdC+0LTQvdC+0YLQviDQvNGDXG4iCisiIGYsIGZpeHVwINCf0J7QlNCQ0JLQkNCd0JUgIOKAlCDQstC60LDRgNCy0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4g0LIg0L/RgNC10LTRhdC+0LTQvdC+0YLQviDQvNGDLCDQsdC10Lcg0YHQvNGP0L3QsCDQvdCwXG4iCisiICAgICAgICAgICAgICAgICAgICAgINGB0YrQvtCx0YnQtdC90LjQtdGC0L5cbiIKKyIgeCwgZXhlYyDQn9Ce0JTQkNCS0JDQndCVICAg4oCUINC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrQvtC80LDQvdC00LAg0LrRitC8INC+0LHQstC40LLQutCw0YLQsDog0L7RgdGC0LDQvdCw0LvQsNGC0LAg0YfQsNGB0YIgIgorItC90LBcbiIKKyIgICAgICAgICAgICAgICAgICAgICAg0YDQtdC00LBcbiIKKyIgZCwgZHJvcCDQn9Ce0JTQkNCS0JDQndCVICAg4oCUINC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L5cbiIKKyIgbCwgbGFiZWwg0JXQotCY0JrQldCiICAgIOKAlCDQt9Cw0LTQsNCy0LDQvdC1INC90LAg0LXRgtC40LrQtdGCINC90LAg0YPQutCw0LfQsNC90L7RgtC+INC+0YIgSEVBRFxuIgorIiB0LCByZXNldCDQldCi0JjQmtCV0KIgICAg4oCUINC30LDQvdGD0LvRj9Cy0LDQvdC1INC90LAgSEVBRCDQutGK0Lwg0JXQotCY0JrQldCi0LBcbiIKKyIgbSwgbWVyZ2UgWy1DINCf0J7QlNCQ0JLQkNCd0JUgfCAtYyDQn9Ce0JTQkNCS0JDQndCVXSDQldCi0JjQmtCV0KIgWyMg0JXQlNCY0J1f0KDQldCUXVxuIgorIiAgICAgICAgICAgICAgICAgICAg4oCUINGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUg0YHRitGBINGB0LvQuNCy0LDQvdC1INGB0YrRgSDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC+0YJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1ICjQuNC70Lgg0YHRitC+0LHRidC10L3QuNC10YLQviDQvtGCINCV0JTQmNCdX9Cg0JXQlCxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAg0LDQutC+INC90LUg0LUg0LfQsNC00LDQtNC10L3QviDQv9C+0LTQsNCy0LDQvdC1INGB0YrRgSDRgdC70LjQstCw0L3QtS4gINChINC+0L/RhtC40Y/RgtCwXG4iCisiICAgICAgICAgICAgICAgICAgICAgIOKAni1jINCf0J7QlNCQ0JLQkNCd0JXigJwsINC80L7QttC1INC00LAg0YHQvNC10L3QuNGC0LUg0YHRitC+0LHRidC10L3QuNC10YLQvi5cbiIKKyJcbiIKKyLQnNC+0LbQtSDQtNCwINC/0YDQvtC80LXQvdGP0YLQtSDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvQvdC+0YHRgtGC0LAg0L3QsCDRgNC10LTQvtCy0LXRgtC1IOKAlCDRgtC1INGB0LUg0LjQt9C/0YrQu9C90Y/QstCw0YJcbiIKKyLQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvQvdC+INC+0YLQs9C+0YDQtS3QvdCw0LTQvtC70YMuXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyNzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorItCc0L7QttC1INC00LAg0L/RgNC+0LzQtdC90LjRgtC1INC/0L7QtNCw0LLQsNC90LXRgtC+INGBINC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisi0KHQu9C10LQg0LrQsNGC0L4g0L/RgNC40LLRitGA0YjQuNGC0LUsINC/0YDQvtC00YrQu9C20LXRgtC1INGBINC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Mjk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkc2hhMTogbm90IGEgY29tbWl0IHRoYXQgY2FuIGJlIHBpY2tlZCIKK21zZ3N0ciAiJHNoYTE6INGC0L7QstCwINC90LUg0LUg0L/QvtC00LDQstCw0L3QtSwg0LrQvtC10YLQviDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQsdGA0LDQvdC+IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzM0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90L4g0LjQvNC1INC90LAg0L/QvtC00LDQstCw0L3QtTog4oCeJHNoYTHigJwiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozNjQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIgorbXNnc3RyICIiCisi0JfQsNC80LXRgdGC0LLQsNGJ0LDRgtCwINGB0YPQvNCwINC/0L4gU0hBMSDQt9CwINGC0LXQutGD0YnQvtGC0L4g0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L3QsCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICLQn9GA0LXQstGK0YDRgtCw0L3QtSDQtNC+IOKAniRzaGEx4oCcIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQstGK0YDRgtC4INC00L4g4oCeJHNoYTHigJwiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBtb3ZlIEhFQUQgdG8gJGZpcnN0X3BhcmVudCIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvdCw0YHQvtGH0Lgg0LrRitC8IOKAniRmaXJzdF9wYXJlbnTigJwiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiAkc2hhMSIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtdGC0L4g0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHQvNCw0YfQutCwOiDigJ4kc2hhMeKAnCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVkb2luZyBtZXJnZSAkc2hhMSIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQv9C+0LLRgtCw0YDRj9C90LXRgtC+INC90LAg0YHQu9C40LLQsNC90LXRgtC+INC90LAg4oCeJHNoYTHigJwiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwaWNrICRzaGExIgorbXNnc3RyICLigJ4kc2hhMeKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LHQtdGA0LUuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJHtufToiCittc2dzdHIgItCi0L7QstCwINC1INGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSDihJYke259OiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMke259IHdpbGwgYmUgc2tpcHBlZDoiCittc2dzdHIgItCh0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSDihJYke259INGJ0LUg0LHRitC00LUg0L/RgNC10YHQutC+0YfQtdC90L4uIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdC4iCittc2dpZF9wbHVyYWwgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0cy4iCittc2dzdHJbMF0gItCi0L7QstCwINC1INC+0LHQtdC00LjQvdC10L3QuNC1INC+0YIgJGNvdW50INC/0L7QtNCw0LLQsNC90LUuIgorbXNnc3RyWzFdICLQotC+0LLQsCDQtSDQvtCx0LXQtNC40L3QtdC90LjQtSDQvtGCICRjb3VudCDQv9C+0LTQsNCy0LDQvdC40Y8uIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgJGZpeHVwX21zZyIKK21zZ3N0ciAi0J3QvtCy0L7RgtC+INGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSDigJ4kZml4dXBfbXNn4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QsNC30LXQvdC+IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk1Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cy4iCittc2dzdHIgItCi0L7QstCwINC1INC+0LHQtdC00LjQvdC10L3QuNC1INC+0YIgMiDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1MzYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU3OQorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICRzaGExLi4uICRyZXN0IgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQtSDQv9C+0LTQsNC00LUgJHNoYTHigKYgJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgYW1lbmQgY29tbWl0IGFmdGVyIHN1Y2Nlc3NmdWxseSBwaWNraW5nICRzaGExLi4uICRyZXN0XG4iCisiVGhpcyBpcyBtb3N0IGxpa2VseSBkdWUgdG8gYW4gZW1wdHkgY29tbWl0IG1lc3NhZ2UsIG9yIHRoZSBwcmUtY29tbWl0IGhvb2tcbiIKKyJmYWlsZWQuIElmIHRoZSBwcmUtY29tbWl0IGhvb2sgZmFpbGVkLCB5b3UgbWF5IG5lZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUgIgorImJlZm9yZVxuIgorInlvdSBhcmUgYWJsZSB0byByZXdvcmQgdGhlIGNvbW1pdC4iCittc2dzdHIgIiIKKyLQn9C+0LTQsNCy0LDQvdC10YLQviDQvdC1INC80L7QttC1INC30LAg0LTQtSDQv9GA0L7QvNC10L3QuCDRgdC70LXQtCDRg9GB0L/QtdGI0L3QvtGC0L4g0L7RgtCx0LjRgNCw0L3QtSDQvdCwIOKAniRzaGEx4oCm4oCcICRyZXN0LlxuIgorItCd0LDQuS3QstC10YDQvtGP0YLQvdC40YLQtSDQv9GA0LjRh9C40L3QuCDRgdCwINC/0YDQsNC30L3QviDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUg0LjQu9C4INC90LXRg9GB0L/QtdGI0L3QviAiCisi0LjQt9C/0YrQu9C90LXQvdC40LVcbiIKKyLQvdCwINC60YPQutCw0YLQsCDQv9GA0LXQtNC4INC/0L7QtNCw0LLQsNC90LUuICDQkNC60L4g0LjQvNCw0YLQtSDQv9GA0L7QsdC70LXQvCDRgSDQutGD0LrQsNGC0LAsINGJ0LUg0YLRgNGP0LHQstCwINC00LAg0LPQviAiCisi0LrQvtGA0LjQs9C40YDQsNGC0LUsXG4iCisi0L/RgNC10LTQuCDQtNCwINC80L7QttC10YLQtSDQtNCwINC/0YDQvtC80LXQvdC40YLQtSDQv9C+0LTQsNCy0LDQvdC10YLQvi4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJHNoYTFfYWJicmV2Li4uICRyZXN0IgorbXNnc3RyICLQodC/0LjRgNCw0L3QtSDQv9GA0Lgg4oCeJHNoYTFfYWJicmV24oCm4oCcICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJyRzcXVhc2hfc3R5bGUnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgItCR0LXQtyDQv9GA0LXQtNGF0L7QtNC90L4g0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/RitC70L3QuCDigJ4kc3F1YXNoX3N0eWxl4oCcIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmc6ICRyZXN0IgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDRgdC1INC40LfQv9GK0LvQvdGP0LLQsDogJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBmYWlsZWQ6ICRyZXN0IgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LU6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkzCittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgItC4INC/0YDQvtC80LXQvdC4INC40L3QtNC10LrRgdCwINC4L9C40LvQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5NQorbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyLQnNC+0LbQtSDQtNCwINC60L7RgNC40LPQuNGA0LDRgtC1INC/0YDQvtCx0LvQtdC80LAsINGB0LvQtdC0INC60L7QtdGC0L4g0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWUiCisKKyMuIFRSQU5TTEFUT1JTOiBhZnRlciB0aGVzZSBsaW5lcyBpcyBhIGNvbW1hbmQgdG8gYmUgaXNzdWVkIGJ5IHRoZSB1c2VyCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRXhlY3V0aW9uIHN1Y2NlZWRlZDogJHJlc3RcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisi0KPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LU6ICRyZXN0XG4iCisi0J7RgdGC0LDQstCw0YIg0L7RidC1INC/0YDQvtC80LXQvdC4INCyINC40L3QtNC10LrRgdCwINC40LvQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvi5cbiIKKyLQotGA0Y/QsdCy0LAg0LTQsCDQs9C4INC/0L7QtNCw0LTQtdGC0LUg0LjQu9C4INGB0LrQsNGC0LDQtdGC0LUg0Lgg0YHQu9C10LQg0YLQvtCy0LAg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWFuZDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCittc2dzdHIgItCd0LXQv9C+0LfQvdCw0YLQsCDQutC+0LzQsNC90LTQsDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MjAKK21zZ2lkICJQbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAi0JrQvtGA0LjQs9C40YDQsNC50YLQtSDRgtC+0LLQsCDRh9GA0LXQtyDigJ5naXQgcmViYXNlIC0tZWRpdC10b2Rv4oCcLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc1NQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCittc2dzdHIgItCj0YHQv9C10YjQvdC+INC/0YDQtdCx0LDQt9C40YDQsNC90LUg0Lgg0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDigJ4kaGVhZF9uYW1l4oCcLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxMgorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeQ0hFUlJZX1BJQ0tfSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmVcbiIKKyJzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisi0JIg0LjQvdC00LXQutGB0LAg0LjQvNCwINC/0YDQvtC80LXQvdC4LiAg0JDQutC+INC40YHQutCw0YLQtSDQtNCwINCz0Lgg0LLQutCw0YDQsNGC0LUg0LJcbiIKKyLQv9GA0LXQtNC40YjQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1LCDQuNC30L/RitC70L3QtdGC0LU6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorItCQ0LrQviDQuNGB0LrQsNGC0LUg0LTQsCDRgdGK0LfQtNCw0LTQtdGC0LUg0L3QvtCy0L4g0L/QvtC00LDQstCw0L3QtSwg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisi0Jgg0LIg0LTQstCw0YLQsCDRgdC70YPRh9Cw0Y8g0YHQu9C10LQg0LrQsNGC0L4g0L/RgNC40LLRitGA0YjQuNGC0LUsINC/0YDQvtC00YrQu9C20LXRgtC1INGBINC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzQKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgiDQsNCy0YLQvtGAINC30LAg0L/QvtC/0YDQsNCy0Y/QvdC10YLQviDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM5Cittc2dpZCAiIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyLQkiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQuNC80LAg0L3QtdC/0L7QtNCw0LTQtdC90Lgg0L/RgNC+0LzQtdC90LguICDQn9GK0YDQstC+INCz0Lgg0L/QvtC00LDQudGC0LUsINCwINGB0LvQtdC0INGC0L7QstCwXG4iCisi0L7RgtC90L7QstC+INC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgcmViYXNlIC0tY29udGludWXigJwuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ0IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDgKK21zZ2lkICJDb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90LjRgtC1INCyINC40L3QtNC10LrRgdCwINC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0L/QvtC00LDQtNC10L3QuC4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk2NQorbXNnaWQgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKK21zZ3N0ciAi0KLQtdC60YHRgtC+0LLQuNGP0YIg0YDQtdC00LDQutGC0L7RgCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRgtCw0YDRgtC40YDQsNC9IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKK21zZ3N0ciAi4oCeJHN3aXRjaF90b+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30YLQtdCz0LvQuCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwNworbXNnaWQgIk5vIEhFQUQ/IgorbXNnc3RyICLQm9C40L/RgdCy0LAg0YPQutCw0LfQsNGC0LXQuyDigJ5IRUFE4oCcIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAkc3RhdGVfZGlyIgorbXNnc3RyICLQktGA0LXQvNC10L3QvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDigJ4kc3RhdGVfZGly4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC90LAiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MTEKK21zZ2lkICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAi0J/RgNC10LHQsNC30LjRgNCw0L3QtdGC0L4g0L3QtSDQtSDQuNC90YLQtdGA0LDQutGC0LjQstC90L4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmQpIgorbXNnaWRfcGx1cmFsICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kcykiCittc2dzdHJbMF0gIiIKKyLQn9GA0LXQsdCw0LfQuNGA0LDQvdC1INC90LAgJHNob3J0cmV2aXNpb25zINCy0YrRgNGF0YMgJHNob3J0b250byAoJHRvZG9jb3VudCDQutC+0LzQsNC90LTQsCkiCittc2dzdHJbMV0gIiIKKyLQn9GA0LXQsdCw0LfQuNGA0LDQvdC1INC90LAgJHNob3J0cmV2aXNpb25zINCy0YrRgNGF0YMgJHNob3J0b250byAoJHRvZG9jb3VudCDQutC+0LzQsNC90LTQuCkiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NTUKK21zZ2lkICJOb3RlIHRoYXQgZW1wdHkgY29tbWl0cyBhcmUgY29tbWVudGVkIG91dCIKK21zZ3N0ciAi0J/RgNCw0LfQvdC40YLQtSDQv9C+0LTQsNCy0LDQvdC40Y8g0YHQsCDQutC+0LzQtdC90YLQuNGA0LDQvdC4IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTk3IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDAyCittc2dpZCAiQ291bGQgbm90IGluaXQgcmV3cml0dGVuIGNvbW1pdHMiCittc2dzdHIgItCh0L/QuNGB0YrQutGK0YIg0YEg0L/RgNC10LfQsNC/0LjRgdCw0L3QuNGC0LUg0L/QvtC00LDQstCw0L3QuNGPINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC9IgorCisjOiBnaXQtc2gtc2V0dXAuc2g6ODkgZ2l0LXNoLXNldHVwLnNoOjk0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJGRhc2hsZXNzICRVU0FHRSIKK21zZ3N0ciAi0KPQv9C+0YLRgNC10LHQsDogJGRhc2hsZXNzICRVU0FHRSIKKworIzogZ2l0LXNoLXNldHVwLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGNoZGlyIHRvICRjZHVwLCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQtdC80LjQvdC1INC60YrQvCDigJ4kY2R1cOKAnCDigJQg0L7RgdC90L7QstC90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjAwIGdpdC1zaC1zZXR1cC5zaDoyMDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiAkcHJvZ3JhbV9uYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICIiCisi0KTQkNCi0JDQm9Cd0JAg0JPQoNCV0KjQmtCQOiDigJ4kcHJvZ3JhbV9uYW1l4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9C30LLQsCDQsdC10Lcg0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQvi4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINC/0YDQtdCx0LDQt9C40YDQsNGC0LUsINC30LDRidC+0YLQviDQuNC80LAg0L/RgNC+0LzQtdC90LgsINC60L7QuNGC0L4g0L3QtSDRgdCwINCyINC40L3QtNC10LrRgdCwLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNAorbXNnaWQgIkNhbm5vdCByZXdyaXRlIGJyYW5jaGVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorItCd0LUg0LzQvtC20LUg0LTQsCDQv9GA0LXQt9Cw0L/QuNGI0LXRgtC1INC60LvQvtC90LjRgtC1LCDQt9Cw0YnQvtGC0L4g0LjQvNCwINC/0YDQvtC80LXQvdC4LCDQutC+0LjRgtC+INC90LUg0YHQsCDQsiDQuNC90LTQtdC60YHQsC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjcKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyLQndC1INC80L7QttC10YLQtSDQtNCwINC40LfQtNGK0YDQv9Cy0LDRgtC1INC/0YDQuCDRgtC+0LLQsCDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1LCDQt9Cw0YnQvtGC0L4g0LjQvNCwINC/0YDQvtC80LXQvdC4LCDQutC+0LjRgtC+INC90LUgIgorItGB0LAg0LIg0LjQvdC00LXQutGB0LAuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyLQndC1INC80L7QttC10YLQtSDQtNCwINC40LfQv9GK0LvQvdC40YLQtSDigJ4kYWN0aW9u4oCcLCDQt9Cw0YnQvtGC0L4g0LjQvNCwINC/0YDQvtC80LXQvdC4LCDQutC+0LjRgtC+INC90LUg0YHQsCDQsiDQuNC90LTQtdC60YHQsC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDMKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0L/RgNC10LHQsNC30LjRgNCw0YLQtSwg0LfQsNGJ0L7RgtC+INCyINC40L3QtNC10LrRgdCwINC40LzQsCDQvdC10L/QvtC00LDQtNC10L3QuCDQv9GA0L7QvNC10L3QuC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDYKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorItCd0LUg0LzQvtC20LXRgtC1INC00LAg0LjQt9C00YrRgNC/0LLQsNGC0LUg0L/RgNC4INGC0L7QstCwINC/0YDQtdCx0LDQt9C40YDQsNC90LUsINC30LDRidC+0YLQviDQsiDQuNC90LTQtdC60YHQsCDQuNC80LAgIgorItC90LXQv9C+0LTQsNC00LXQvdC4INC/0YDQvtC80LXQvdC4LiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICRhY3Rpb246IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyLQndC1INC80L7QttC10YLQtSDQtNCwINC40LfQv9GK0LvQvdC40YLQtSDigJ4kYWN0aW9u4oCcLCDQt9Cw0YnQvtGC0L4g0LIg0LjQvdC00LXQutGB0LAg0LjQvNCwINC90LXQv9C+0LTQsNC00LXQvdC4INC/0YDQvtC80LXQvdC4LiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI1MworbXNnaWQgIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0J7RgdCy0LXQvSDRgtC+0LLQsCDQsiDQuNC90LTQtdC60YHQsCDQuNC80LAg0L3QtdC/0L7QtNCw0LTQtdC90Lgg0L/RgNC+0LzQtdC90LguIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MzczCittc2dpZCAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiIgorItCi0LDQt9C4INC60L7QvNCw0L3QtNCwINGC0YDRj9Cx0LLQsCDQtNCwINGB0LUg0LjQt9C/0YrQu9C90Lgg0L7RgiDQvtGB0L3QvtCy0L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3OAorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgYWJzb2x1dGUgcGF0aCBvZiBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICLQkNCx0YHQvtC70Y7RgtC90LjRj9GCINC/0YrRgiDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0L/RgNC10LTQtdC70LgiCisKKyMuIFRSQU5TTEFUT1JTOiB5b3UgY2FuIGFkanVzdCB0aGlzIHRvIGFsaWduICJnaXQgYWRkIC1pIiBzdGF0dXMgbWVudQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJTEycyAlMTJzICVzIgorbXNnc3RyICIlMTRzICUxNHMgJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInRvdWNoZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ0b3VjaGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkINGE0LDQudC7INC30LDRgdC10LPQvdCw0YJcbiIKK21zZ3N0clsxXSAiJWQg0YTQsNC50LvQsCDQt9Cw0YHQtdCz0L3QsNGC0LhcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDUzCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFnaW5nLiIKK21zZ3N0ciAiIgorItCQ0LrQviDQutGA0YrQv9C60LDRgtCwINC80L7QttC1INC00LAg0YHQtSDQv9GA0LjQu9C+0LbQuCDRh9C40YHRgtC+LCDRgNC10LTQsNC60YLQuNGA0LDQvdC+0YLQviDQv9Cw0YDRh9C1INGJ0LUg0LHRitC00LUgIgorItC90LXQt9Cw0LHQsNCy0L3QvlxuIgorItC00L7QsdCw0LLQtdC90L4g0LrRitC8INC40L3QtNC10LrRgdCwIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTYKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YXNoaW5nLiIKK21zZ3N0ciAiIgorItCQ0LrQviDQutGA0YrQv9C60LDRgtCwINC80L7QttC1INC00LAg0YHQtSDQv9GA0LjQu9C+0LbQuCDRh9C40YHRgtC+LCDRgNC10LTQsNC60YLQuNGA0LDQvdC+0YLQviDQv9Cw0YDRh9C1INGJ0LUg0LHRitC00LUgIgorItC90LXQt9Cw0LHQsNCy0L3QvlxuIgorItGB0LrRitGC0LDQvdC+IgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTkKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHVuc3RhZ2luZy4iCittc2dzdHIgIiIKKyLQkNC60L4g0LrRgNGK0L/QutCw0YLQsCDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC40LvQvtC20Lgg0YfQuNGB0YLQviwg0YDQtdC00LDQutGC0LjRgNCw0L3QvtGC0L4g0L/QsNGA0YfQtSDRidC1INCx0YrQtNC1ICIKKyLQvdC10LfQsNCx0LDQstC90L5cbiIKKyLQuNC30LLQsNC00LXQvdC+INC+0YIg0LjQvdC00LXQutGB0LAuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDcxCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzcKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGFwcGx5aW5nLiIKK21zZ3N0ciAiIgorItCQ0LrQviDQutGA0YrQv9C60LDRgtCwINC80L7QttC1INC00LAg0YHQtSDQv9GA0LjQu9C+0LbQuCDRh9C40YHRgtC+LCDRgNC10LTQsNC60YLQuNGA0LDQvdC+0YLQviDQv9Cw0YDRh9C1INGJ0LUg0LHRitC00LUgIgorItC90LXQt9Cw0LHQsNCy0L3QvlxuIgorItC90LDQsdC10LvRj9C30LDQvdC+INC30LAg0L/RgNC40LvQsNCz0LDQvdC1LiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc0Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBkaXNjYXJkaW5nLiIKK21zZ3N0ciAiIgorItCQ0LrQviDQutGA0YrQv9C60LDRgtCwINC80L7QttC1INC00LAg0YHQtSDQv9GA0LjQu9C+0LbQuCDRh9C40YHRgtC+LCDRgNC10LTQsNC60YLQuNGA0LDQvdC+0YLQviDQv9Cw0YDRh9C1INGJ0LUg0LHRitC00LUgIgorItC90LXQt9Cw0LHQsNCy0L3QvlxuIgorItC90LDQsdC10LvRj9C30LDQvdC+INC30LAg0LfQsNC90YPQu9GP0LLQsNC90LUuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg0LfQsCDRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0LrQvtC0INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvTog4oCeJXPigJwiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVzIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorIuKAlOKAlOKAlFxuIgorItCX0LAg0LTQsCDQv9GA0L7Qv9GD0YHQvdC10YLQtSDRgNC10LTQvtCy0LXRgtC1INC30LDQv9C+0YfQstCw0YnQuCDRgSDigJ4lc+KAnCDigJQg0LfQsNC80LXQvdC10YLQtSDQt9C90LDQutCwINGB0YrRgSDigJ4g4oCcICjRgdGC0LDQstCw0YIgIgorItC60L7QvdGC0LXQutGB0YIpXG4iCisi0JfQsCDQtNCwINC/0YDQvtC/0YPRgdC90LXRgtC1INGA0LXQtNC+0LLQtdGC0LUg0LfQsNC/0L7Rh9Cy0LDRidC4INGBIOKAniVz4oCcIOKAlCDQuNC30YLRgNC40LnRgtC1INCz0LguXG4iCisi0KDQtdC00L7QstC10YLQtSwg0LrQvtC40YLQviDQt9Cw0L/QvtGH0LLQsNGCINGBIOKAniVz4oCcINGJ0LUg0LHRitC00LDRgiDQv9GA0L7Qv9GD0YHQvdCw0YLQuC5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTQwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciByZWFkaW5nOiAlcyIKK21zZ3N0ciAiIgorItGE0LDQudC70YrRgiDQt9CwINGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQutC+0LQg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9INC30LAg0YfQtdGC0LXQvdC1OiDigJ4lc+KAnCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjQ4Cittc2dpZCAiIgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSDigJQg0LTQvtCx0LDQstGP0L3QtSDQvdCwINC/0LDRgNGH0LXRgtC+INCyINC40L3QtNC10LrRgdCwXG4iCisibiDigJQg0LHQtdC3INC00L7QsdCw0LLRj9C90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQsiDQuNC90LTQtdC60YHQsFxuIgorInEg4oCUINC40LfRhdC+0LQsINCx0LXQtyDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0YLQvtCy0LAg0Lgg0LLRgdC40YfQutC4INC+0YHRgtCw0LLQsNGJ0Lgg0L/QsNGA0YfQtdGC0LAg0L7RgiDRhNCw0LnQu9CwXG4iCisiYSDigJQg0LTQvtCx0LDQstGP0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDRgdC70LXQtNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YTQsNC50LvQsCDQsiDQuNC90LTQtdC60YHQsFxuIgorImQg4oCUINCx0LXQtyDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0YLQvtCy0LAg0Lgg0LLRgdC40YfQutC4INGB0LvQtdC00LLQsNGJ0Lgg0L/QsNGA0YfQtdGC0LAg0L7RgiDRhNCw0LnQu9CwINCyINC40L3QtNC10LrRgdCwIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNTQKK21zZ2lkICIiCisieSAtIHN0YXNoIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFzaCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IOKAlCDRgdC60LDRgtCw0LLQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQvlxuIgorIm4g4oCUINCx0LXQtyDRgdC60LDRgtCw0LLQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQvlxuIgorInEg4oCUINC40LfRhdC+0LQsINCx0LXQtyDRgdC60LDRgtCw0LLQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0L7RgdGC0LDQstCw0YnQuCDQv9Cw0YDRh9C10YLQsFxuIgorImEg4oCUINGB0LrQsNGC0LDQstCw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDRgdC70LXQtNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YTQsNC50LvQsFxuIgorImQg4oCUINCx0LXQtyDRgdC60LDRgtCw0LLQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0YHQu9C10LTQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQvtGCINGE0LDQudC70LAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2MAorbXNnaWQgIiIKKyJ5IC0gdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHVuc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IOKAlCDQuNC30LLQsNC20LTQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQvtGCINC40L3QtNC10LrRgdCwXG4iCisibiDigJQg0LHQtdC3INC40LfQstCw0LbQtNCw0L3QtSDQvdCwINC/0LDRgNGH0LXRgtC+INC+0YIg0LjQvdC00LXQutGB0LBcbiIKKyJxIOKAlCDQuNC30YXQvtC0LCDQsdC10Lcg0LjQt9Cy0LDQttC00LDQvdC1INC90LAg0YLQvtCy0LAg0Lgg0LLRgdC40YfQutC4INC+0YHRgtCw0LLQsNGJ0Lgg0L/QsNGA0YfQtdGC0LAg0L7RgiDQuNC90LTQtdC60YHQsFxuIgorImEg4oCUINC40LfQstCw0LbQtNCw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDRgdC70LXQtNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YTQsNC50LvQsCDQvtGCINC40L3QtNC10LrRgdCwXG4iCisiZCDigJQg0LHQtdC3INC40LfQstCw0LbQtNCw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDRgdC70LXQtNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YTQsNC50LvQsCDQvtGCINC40L3QtNC10LrRgdCwIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNjYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IOKAlCDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQutGK0Lwg0LjQvdC00LXQutGB0LBcbiIKKyJuIOKAlCDQsdC10Lcg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0LrRitC8INC40L3QtNC10LrRgdCwXG4iCisicSDigJQg0LjQt9GF0L7QtCwg0LHQtdC3INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDQvtGB0YLQsNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC60YrQvCDQuNC90LTQtdC60YHQsFxuIgorImEg4oCUINC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDRgdC70LXQtNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YTQsNC50LvQsCDQutGK0Lwg0LjQvdC00LXQutGB0LBcbiIKKyJkIOKAlCDQsdC10Lcg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0YLQvtCy0LAg0Lgg0LLRgdC40YfQutC4INGB0LvQtdC00LLQsNGJ0Lgg0L/QsNGA0YfQtdGC0LAg0L7RgiDRhNCw0LnQu9CwINC60YrQvCDQuNC90LTQtdC60YHQsCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5MAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSDigJQg0L/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQvtGCINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+XG4iCisibiDigJQg0LHQtdC3INC/0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0L7RgiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvlxuIgorInEg4oCUINC40LfRhdC+0LQsINCx0LXQtyDQv9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDQvtGB0YLQsNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YDQsNCx0L7RgtC90L7RgtC+ICIKKyLQtNGK0YDQstC+XG4iCisiYSDigJQg0L/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0YHQu9C10LTQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQvtGCINGE0LDQudC70LAg0L7RgiDRgNCw0LHQvtGC0L3QvtGC0L4gIgorItC00YrRgNCy0L5cbiIKKyJkIOKAlCDQsdC10Lcg0L/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0YHQu9C10LTQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQvtGCINGE0LDQudC70LAg0L7RgiDRgNCw0LHQvtGC0L3QvtGC0L4gIgorItC00YrRgNCy0L4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3OAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IOKAlCDQv9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINC/0LDRgNGH0LXRgtC+INC+0YIg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L5cbiIKKyJuIOKAlCDQsdC10Lcg0L/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQvtGCINC40L3QtNC10LrRgdCwINC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+XG4iCisicSDigJQg0LjQt9GF0L7QtCwg0LHQtdC3INC/0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0YLQvtCy0LAg0Lgg0LLRgdC40YfQutC4INC+0YHRgtCw0LLQsNGJ0Lgg0L/QsNGA0YfQtdGC0LAg0L7RgiDQuNC90LTQtdC60YHQsCDQuCAiCisi0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L5cbiIKKyJhIOKAlCDQv9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDRgdC70LXQtNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YTQsNC50LvQsCDQvtGCINC40L3QtNC10LrRgdCwINC4ICIKKyLRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvlxuIgorImQg4oCUINCx0LXQtyDQv9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDRgdC70LXQtNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YTQsNC50LvQsCDQvtGCINC40L3QtNC10LrRgdCwINC4ICIKKyLRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjg0Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IOKAlCDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQvtGCINC40L3QtNC10LrRgdCwINC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+XG4iCisibiDigJQg0LHQtdC3INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC/0LDRgNGH0LXRgtC+INC+0YIg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L5cbiIKKyJxIOKAlCDQuNC30YXQvtC0LCDQsdC10Lcg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0YLQvtCy0LAg0Lgg0LLRgdC40YfQutC4INC+0YHRgtCw0LLQsNGJ0Lgg0L/QsNGA0YfQtdGC0LAg0L7RgiDQuNC90LTQtdC60YHQsCDQuCAiCisi0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L5cbiIKKyJhIOKAlCDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0YHQu9C10LTQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQvtGCINGE0LDQudC70LAg0L7RgiDQuNC90LTQtdC60YHQsCDQuCAiCisi0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L5cbiIKKyJkIOKAlCDQsdC10Lcg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0YLQvtCy0LAg0Lgg0LLRgdC40YfQutC4INGB0LvQtdC00LLQsNGJ0Lgg0L/QsNGA0YfQtdGC0LAg0L7RgiDRhNCw0LnQu9CwINC+0YIg0LjQvdC00LXQutGB0LAg0LggIgorItGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyOTYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IOKAlCDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQutGK0Lwg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L5cbiIKKyJuIOKAlCDQsdC10Lcg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0LrRitC8INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+XG4iCisicSDigJQg0LjQt9GF0L7QtCwg0LHQtdC3INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDQvtGB0YLQsNCy0LDRidC4INC/0LDRgNGH0LXRgtCwXG4iCisiYSDigJQg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0YLQvtCy0LAg0Lgg0LLRgdC40YfQutC4INGB0LvQtdC00LLQsNGJ0Lgg0L/QsNGA0YfQtdGC0LAg0L7RgiDRhNCw0LnQu9CwXG4iCisiZCDigJQg0LHQtdC3INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDRgdC70LXQtNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINC+0YIg0YTQsNC50LvQsCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzExCittc2dpZCAiIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiZyDigJQg0LjQt9Cx0L7RgCDQutGK0Lwg0LrQvtC1INC/0LDRgNGH0LUg0LTQsCDRgdC1INC/0YDQtdC80LjQvdC1XG4iCisiLyDigJQg0YLRitGA0YHQtdC90LUg0L3QsCDQv9Cw0YDRh9C1LCDQvdCw0L/QsNGB0LLQsNGJ0L4g0LrRitC8INC00LDQtNC10L0g0YDQtdCz0YPQu9GP0YDQtdC9INC40LfRgNCw0LdcbiIKKyJqIOKAlCDQsdC10Lcg0YDQtdGI0LXQvdC40LUg0LfQsCDQv9Cw0YDRh9C10YLQviwg0LrRitC8INGB0LvQtdC00LLQsNGJ0L7RgtC+INC/0LDRgNGH0LUg0LHQtdC3INGA0LXRiNC10L3QuNC1XG4iCisiSiDigJQg0LHQtdC3INGA0LXRiNC10L3QuNC1INC30LAg0L/QsNGA0YfQtdGC0L4sINC60YrQvCDRgdC70LXQtNCy0LDRidC+0YLQviDQv9Cw0YDRh9C1XG4iCisiayDigJQg0LHQtdC3INGA0LXRiNC10L3QuNC1INC30LAg0L/QsNGA0YfQtdGC0L4sINC60YrQvCDQv9GA0LXQtNC40YjQvdC+0YLQviDQv9Cw0YDRh9C1INCx0LXQtyDRgNC10YjQtdC90LjQtVxuIgorIksg4oCUINCx0LXQtyDRgNC10YjQtdC90LjQtSDQt9CwINC/0LDRgNGH0LXRgtC+LCDQutGK0Lwg0L/RgNC10LTQuNGI0L3QvtGC0L4g0L/QsNGA0YfQtVxuIgorInMg4oCUINGA0LDQt9C00LXQu9GP0L3QtSDQvdCwINGC0LXQutGD0YnQvtGC0L4g0L/QsNGA0YfQtSDQvdCwINC/0L4t0LzQsNC70LrQuFxuIgorImUg4oCUINGA0YrRh9C90L4g0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINGC0LXQutGD0YnQvtGC0L4g0L/QsNGA0YfQtVxuIgorIj8g4oCUINC40LfQstC10LbQtNCw0L3QtSDQvdC1INC/0L7QvNC+0YnRgtCwXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MgorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIgorbXNnc3RyICLQmNC30LHRgNCw0L3QuNGC0LUg0L/QsNGA0YfQtdGC0LAg0L3QtSDQvNC+0LPQsNGCINC00LAg0YHQtSDQtNC+0LHQsNCy0Y/RgiDQsiDQuNC90LTQtdC60YHQsCFcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzU3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlc1xuIgorbXNnc3RyICLQv9GA0LXQvdC10LHRgNC10LPQstCw0L3QtSDQvdCwINC90LXRgdC70Y/RgtC+0YLQvjog4oCeJXPigJxcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisi0J/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/RgNC+0LzRj9C90LDRgtCwINCyINC/0YDQsNCy0LDRgtCwINC30LAg0LTQvtGB0YLRitC/INC60YrQvCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviBbeSxuLHEsYSxkIgorIiVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J/RgNC40LvQsNCz0LDQvdC1INC90LAg0LjQt9GC0YDQuNCy0LDQvdC10YLQviDQutGK0Lwg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCf0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC/0LDRgNGH0LXRgtC+INC60YrQvCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTcwCittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290b1xuIgorbXNnc3RyICLQndGP0LzQsCDQtNGA0YPQs9C4INC/0LDRgNGH0LXRgtCwXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU4OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJ1xuIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSDQvdC+0LzQtdGAOiDigJ4lc+KAnFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1OTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU29ycnksIG9ubHkgJWQgaHVuayBhdmFpbGFibGUuXG4iCittc2dpZF9wbHVyYWwgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS5cbiIKK21zZ3N0clswXSAi0JjQvNCwINGB0LDQvNC+ICVkINC/0LDRgNGH0LUuXG4iCittc2dzdHJbMV0gItCY0LzQsCDRgdCw0LzQviAlZCDQv9Cw0YDRh9C10YLQsC5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjE5Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoXG4iCittc2dzdHIgItCd0Y/QvNCwINC00YDRg9Cz0Lgg0L/QsNGA0YfQtdGC0LAg0LfQsCDRgtGK0YDRgdC10L3QtVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MzYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzXG4iCittc2dzdHIgItCh0LPRgNC10YjQtdC9INGA0LXQs9GD0LvRj9GA0LXQvSDQuNC30YDQsNC3IOKAniVz4oCcOiAlc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NDYKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm5cbiIKK21zZ3N0ciAi0J3QuNC60L7QtSDQv9Cw0YDRh9C1INC90LUg0L3QsNC/0LDRgdCy0LAg0L3QsCDRgNC10LPRg9C70Y/RgNC90LjRjyDQuNC30YDQsNC3XG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY1OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODAKK21zZ2lkICJObyBwcmV2aW91cyBodW5rXG4iCittc2dzdHIgItCd0Y/QvNCwINC00YDRg9Cz0L4g0L/QsNGA0YfQtSDQv9GA0LXQtNC4INGC0L7QstCwXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY2NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODYKK21zZ2lkICJObyBuZXh0IGh1bmtcbiIKK21zZ3N0ciAi0J3Rj9C80LAg0LTRgNGD0LPQviDQv9Cw0YDRh9C1INGB0LvQtdC0INGC0L7QstCwXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5MgorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rXG4iCittc2dzdHIgItCi0L7QstCwINC/0LDRgNGH0LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGA0LDQt9C00LXQu9C10L3QvlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2OTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rLlxuIgorbXNnaWRfcGx1cmFsICJTcGxpdCBpbnRvICVkIGh1bmtzLlxuIgorbXNnc3RyWzBdICLQoNCw0LfQtNC10LvRj9C90LUg0L3QsCAlZCDQv9Cw0YDRh9C1LlxuIgorbXNnc3RyWzFdICLQoNCw0LfQtNC10LvRj9C90LUg0L3QsCAlZCDQv9Cw0YDRh9C10YLQsC5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzA4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICLQotC+0LLQsCDQv9Cw0YDRh9C1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgNC10LTQsNC60YLQuNGA0LDQvdC+XG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2UgZG8gbm90IHRyYW5zbGF0ZSB0aGUgY29tbWFuZCBuYW1lcworIy4gJ3N0YXR1cycsICd1cGRhdGUnLCAncmV2ZXJ0JywgZXRjLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzczCittc2dpZCAiIgorInN0YXR1cyAgICAgICAgLSBzaG93IHBhdGhzIHdpdGggY2hhbmdlc1xuIgorInVwZGF0ZSAgICAgICAgLSBhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXNcbiIKKyJyZXZlcnQgICAgICAgIC0gcmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb25cbiIKKyJwYXRjaCAgICAgICAgIC0gcGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5XG4iCisiZGlmZiAgICAgICAgICAtIHZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4XG4iCisiYWRkIHVudHJhY2tlZCAtIGFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgIgorImNoYW5nZXNcbiIKK21zZ3N0ciAiIgorInN0YXR1cyAgICAgICAg4oCUINC40LfQstC10LbQtNCw0L3QtSDQvdCwINC/0YrRgtC40YnQsNGC0LAg0YEg0L/RgNC+0LzQtdC90LjRgtC1XG4iCisidXBkYXRlICAgICAgICDigJQg0LTQvtCx0LDQstGP0L3QtSDQvdCwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQutGK0Lwg0L/RgNC+0LzQtdC90LjRgtC1INCyXG4iCisiICAgICAgICAgICAgICAgINC40L3QtNC10LrRgdCwXG4iCisicmV2ZXJ0ICAgICAgICDigJQg0L7RgtC80Y/QvdCwINC90LAg0L/RgNC+0LzQtdC90LjRgtC1INCyINC40L3QtNC10LrRgdCwINC60YrQvCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INGB0L7Rh9C10L3QviDQvtGCICIKKyLigJ5IRUFE4oCcXG4iCisicGF0Y2ggICAgICAgICDigJQg0LjQt9Cx0LjRgNCw0L3QtSDQvdCwINC/0LDRgNGH0LXRgtCwINC60L7QtCDQuCDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQv9C+0LXQtNC40L3QuNGH0L3QvlxuIgorImRpZmYgICAgICAgICAg4oCUINC40LfQstC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9C70LjQutCw0YLQsCDQvNC10LbQtNGDINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDRgdC+0YfQtdC90L7RgtC+INC+0YIgIgorIuKAnkhFQUTigJxcbiIKKyIgICAgICAgICAgICAgICAg0Lgg0LjQvdC00LXQutGB0LBcbiIKKyJhZGQgdW50cmFja2VkIOKAlCDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQutGK0Lwg0L/RgNC+0LzQtdC90LjRgtC1INCyINC40L3QtNC10LrRgdCwXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MDUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgwOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MTUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgxOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjUKK21zZ2lkICJtaXNzaW5nIC0tIgorbXNnc3RyICLigJ4tLeKAnCDQu9C40L/RgdCy0LAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC0tcGF0Y2ggbW9kZTogJXMiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdCwINGB0YLRgNCw0YLQtdCz0LjRjyDQt9CwINC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsDog4oCeJXPigJwiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcywgZXhwZWN0aW5nIC0tIgorbXNnc3RyICLRg9C60LDQt9Cw0L0g0LUg0L3QtdC/0YDQsNCy0LjQu9C10L0g0LDRgNCz0YPQvNC10L3RgiDigJ4lc+KAnCwg0LAg0YHQtSDQvtGH0LDQutCy0LAg4oCeLS3igJwuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzOAorbXNnaWQgImxvY2FsIHpvbmUgZGlmZmVycyBmcm9tIEdNVCBieSBhIG5vbi1taW51dGUgaW50ZXJ2YWxcbiIKK21zZ3N0ciAiIgorItGA0LDQt9C70LjQutCw0YLQsCDQvNC10LbQtNGDINC80LXRgdGC0L3QuNGPINGH0LDRgdC+0LLQuCDQv9C+0Y/RgSDQuCBHTVQg0YHRitC00YrRgNC20LAg0LTRgNC+0LHQvdCwINGH0LDRgdGCINC+0YIg0LzQuNC90YPRgtCwXG4iCisiXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ1IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUxCittc2dpZCAibG9jYWwgdGltZSBvZmZzZXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDI0IGhvdXJzXG4iCittc2dzdHIgItGA0LDQt9C70LjQutCw0YLQsCDQvNC10LbQtNGDINC80LXRgdGC0L3QuNGPINGH0LDRgdC+0LLQuNGPINC/0L7Rj9GBINC4IEdNVCDQtSAyNCDRh9Cw0YHQsCDQuNC70Lgg0L/QvtCy0LXRh9C1XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjIzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MjI5Cittc2dpZCAidGhlIGVkaXRvciBleGl0ZWQgdW5jbGVhbmx5LCBhYm9ydGluZyBldmVyeXRoaW5nIgorbXNnc3RyICIiCisi0YLQtdC60YHRgtC+0LLQuNGP0YIg0YDQtdC00LDQutGC0L7RgCDQv9GA0LjQutC70Y7Rh9C4INGA0LDQsdC+0YLQsNGC0LAg0YEg0LPRgNC10YjQutCwLCDQstGB0LjRh9C60L4g0YHQtSDQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMTAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIiclcycgY29udGFpbnMgYW4gaW50ZXJtZWRpYXRlIHZlcnNpb24gb2YgdGhlIGVtYWlsIHlvdSB3ZXJlIGNvbXBvc2luZy5cbiIKK21zZ3N0ciAi4oCeJXPigJwg0YHRitC00YrRgNC20LAg0LLRgNC10LzQtdC90L3QsCDQstC10YDRgdC40Y8g0L3QsCDQv9C+0LTQs9C+0YLQstGP0L3QvtGC0L4g0LUt0L/QuNGB0LzQvi5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJyVzLmZpbmFsJyBjb250YWlucyB0aGUgY29tcG9zZWQgZW1haWwuXG4iCittc2dzdHIgIuKAniVzLmZpbmFs4oCcINGB0YrQtNGK0YDQttCwINC/0L7QtNCz0L7RgtCy0LXQvdC+0YLQviDQtS3Qv9C40YHQvNC+LlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQwOAorbXNnaWQgIi0tZHVtcC1hbGlhc2VzIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIG9wdGlvbnNcbiIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1kdW1wLWFsaWFzZXPigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINC00YDRg9Cz0LjRgtC1INC+0L/RhtC40LhcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0ODEgZ2l0LXNlbmQtZW1haWwucGVybDo2ODMKK21zZ2lkICJDYW5ub3QgcnVuIGdpdCBmb3JtYXQtcGF0Y2ggZnJvbSBvdXRzaWRlIGEgcmVwb3NpdG9yeVxuIgorbXNnc3RyICLQmtC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGZvcm1hdC1wYXRjaOKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/RitC70L3QuCDQuNC30LLRitC9INGF0YDQsNC90LjQu9C40YnQtVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4NAorbXNnaWQgIiIKKyJgYmF0Y2gtc2l6ZWAgYW5kIGByZWxvZ2luYCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciAodmlhIGNvbW1hbmQtbGluZSBvciAiCisiY29uZmlndXJhdGlvbiBvcHRpb24pXG4iCittc2dzdHIgIiIKKyLigJ5iYXRjaC1zaXpl4oCcINC4IOKAnnJlbG9naW7igJwg0YLRgNGP0LHQstCwINC00LAg0YHQtSDRg9C60LDQt9Cy0LDRgiDQt9Cw0LXQtNC90L4gKNC40LvQuCDRh9GA0LXQtyDQutC+0LzQsNC90LTQvdC40Y8gIgorItGA0LXQtCwg0LjQu9C4INGH0YDQtdC3INC90LDRgdGC0YDQvtC50LrQuNGC0LUpXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1zdXBwcmVzcy1jYyBmaWVsZDogJyVzJ1xuIgorbXNnc3RyICLQndC10L/QvtC30L3QsNGC0L4g0L/QvtC70LUg0LfQsCDQvtC/0YbQuNGP0YLQsCDigJ4tLXN1cHByZXNzLWNj4oCcOiDigJ4lc+KAnFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tY29uZmlybSBzZXR0aW5nOiAnJXMnXG4iCittc2dzdHIgItCd0LXQv9C+0LfQvdCw0YLQsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCeLS1jb25maXJt4oCcOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU1NgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBhbGlhcyB3aXRoIHF1b3RlcyBpcyBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0L/RgdC10LLQtNC+0L3QuNC80Lgg0LfQsCBzZW5kbWFpbCDRgdGK0LTRitGA0LbQsNGJ0Lgg0LrQsNCy0LjRh9C60LggKOKAnlwi4oCcKSDQvdC1INGB0LUgIgorItC/0L7QtNC00YrRgNC20LDRgjogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYDppbmNsdWRlOmAgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog4oCeOmluY2x1ZGU64oCcINC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgL2ZpbGVgIG9yIGB8cGlwZWAgcmVkaXJlY3Rpb24gbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiIgorItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INC/0YDQtdC90LDRgdC+0YfQstCw0L3QuNGPIOKAni9maWxl4oCcINC40LvQuCDigJ58cGlwZeKAnCDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsNGCOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBsaW5lIGlzIG5vdCByZWNvZ25pemVkOiAlc1xuIgorbXNnc3RyICLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDRgNC10LTRitGCINC30LAg4oCec2VuZG1haWzigJwg0L3QtSDQtSDRgNCw0LfQv9C+0LfQvdCw0YI6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjQ5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlICclcycgZXhpc3RzIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIHRoZSByYW5nZSBvZiBjb21taXRzXG4iCisidG8gcHJvZHVjZSBwYXRjaGVzIGZvci4gIFBsZWFzZSBkaXNhbWJpZ3VhdGUgYnkuLi5cbiIKKyJcbiIKKyIgICAgKiBTYXlpbmcgXCIuLyVzXCIgaWYgeW91IG1lYW4gYSBmaWxlOyBvclxuIgorIiAgICAqIEdpdmluZyAtLWZvcm1hdC1wYXRjaCBvcHRpb24gaWYgeW91IG1lYW4gYSByYW5nZS5cbiIKK21zZ3N0ciAiIgorItCk0LDQudC70YrRgiDigJ4lc+KAnCDRgdGK0YnQtdGB0YLQstGD0LLQsCwg0L3QviDQuNC80LXRgtC+INC80L7QttC1INC00LAg0L7Qt9C90LDRh9Cw0LLQsCDQuCDQtNC40LDQv9Cw0LfQvtC9INC+0YIg0L/QvtC00LDQstCw0L3QuNGPLFxuIgorItC30LAg0LrQvtC50YLQviDQtNCwINGB0LUg0YHRitC30LTQsNC00LDRgiDQutGA0YrQv9C60LguICDQnNC+0LbQtSDQuNC30YDQuNGH0L3QviDQtNCwINGD0LrQsNC20LXRgtC1INC30L3QsNGH0LXQvdC40LXRgtC+INC60LDRgtC+OlxuIgorIlxuIgorIiAgICDil48g0YPQutCw0LbQtdGC0LUg4oCeLi8lc+KAnCDQt9CwINGE0LDQudC7O1xuIgorIiAgICDil48g0LjQt9C/0L7Qu9C30LLQsNGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1mb3JtYXQtcGF0Y2jigJwg0LfQsCDQtNC40LDQv9Cw0LfQvtC9LlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbmRpciAlczogJXMiCittc2dzdHIgItCU0LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lg6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY5NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiZmF0YWw6ICVzOiAlc1xuIgorIndhcm5pbmc6IG5vIHBhdGNoZXMgd2VyZSBzZW50XG4iCittc2dzdHIgIiIKKyLQpNCQ0KLQkNCb0J3QkCDQk9Cg0JXQqNCa0JA6ICVzOiAlc1xuIgorItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INC90LUg0YHQsCDQv9GA0LDRgtC10L3QuCDQvdC40LrQsNC60LLQuCDQutGA0YrQv9C60LhcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MDUKK21zZ2lkICIiCisiXG4iCisiTm8gcGF0Y2ggZmlsZXMgc3BlY2lmaWVkIVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisi0J3QtSDRgdCwINGD0LrQsNC30LDQvdC4INC60YDRitC/0LrQuCFcbiIKKyJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTm8gc3ViamVjdCBsaW5lIGluICVzPyIKK21zZ3N0ciAi0JIg4oCeJXPigJwg0LvQuNC/0YHQstCwINGC0LXQvNCwIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAlczogJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQstC+0YDQuCDQt9CwINC30LDQv9C40YE6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjczOQorbXNnaWQgIiIKKyJMaW5lcyBiZWdpbm5pbmcgaW4gXCJHSVQ6XCIgd2lsbCBiZSByZW1vdmVkLlxuIgorIkNvbnNpZGVyIGluY2x1ZGluZyBhbiBvdmVyYWxsIGRpZmZzdGF0IG9yIHRhYmxlIG9mIGNvbnRlbnRzXG4iCisiZm9yIHRoZSBwYXRjaCB5b3UgYXJlIHdyaXRpbmcuXG4iCisiXG4iCisiQ2xlYXIgdGhlIGJvZHkgY29udGVudCBpZiB5b3UgZG9uJ3Qgd2lzaCB0byBzZW5kIGEgc3VtbWFyeS5cbiIKK21zZ3N0ciAiIgorItCg0LXQtNC+0LLQtdGC0LUg0LfQsNC/0L7Rh9Cy0LDRidC4INGBIOKAnkdJVDrigJwg0YnQtSDQsdGK0LTQsNGCINC/0YDQtdGB0LrQsNGH0LDQvdC4LlxuIgorItCU0L7QsdGA0LUg0LUg0LTQsCDQstC60LvRjtGH0LjRgtC1INGB0YLQsNGC0LjRgdGC0LjQutCwINC90LAg0YDQsNC30LvQuNC60LjRgtC1INC40LvQuCDQvdGP0LrQsNC60LLQsCDRgtCw0LHQu9C40YbQsCDQvdCwICIKKyLRgdGK0LTRitGA0LbQsNC90LjQtdGC0L5cbiIKKyLQvdCwINC/0L7QtNCz0L7RgtCy0Y/QvdCw0YLQsCDQutGA0YrQv9C60LAuXG4iCisiXG4iCisi0JjQt9GC0YDQuNC50YLQtSDQstGB0LjRh9C60L4sINCw0LrQviDQvdC1INC40YHQutCw0YLQtSDQtNCwINC40LfQv9GA0LDRgtC40YLQtSDQvtCx0L7QsdGJ0LDQstCw0YnQviDQv9C40YHQvNC+LlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlczogJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQstC+0YDQuDogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzgwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzLmZpbmFsOiAlcyIKK21zZ3N0ciAi4oCeJXMuZmluYWzigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCy0L7RgNC4OiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4MjMKK21zZ2lkICJTdW1tYXJ5IGVtYWlsIGlzIGVtcHR5LCBza2lwcGluZyBpdFxuIgorbXNnc3RyICLQntCx0L7QsdGJ0LDQstCw0YnQvtGC0L4g0L/QuNGB0LzQviDQtSDQv9GA0LDQt9C90L4g0Lgg0YHQtSDQv9GA0LXRgdC60LDRh9CwXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCBbeS9OXSBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1c2UgPCVzPiBbeS9OXT8gIgorbXNnc3RyICLQodC40LPRg9GA0L3QuCDQu9C4INGB0YLQtSwg0YfQtSDQuNGB0LrQsNGC0LUg0LTQsCDQv9C+0LvQt9Cy0LDRgtC1IOKAniVz4oCcIFt5L05dPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTEzCittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIDhiaXQsIGJ1dCBkbyBub3QgZGVjbGFyZSBhIENvbnRlbnQtVHJhbnNmZXItIgorIkVuY29kaW5nLlxuIgorbXNnc3RyICIiCisi0KHQu9C10LTQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDRgdCwIDgg0LHQuNGC0L7QstC4LCDQvdC+INC90LUg0YHQsCDRgSDQvtCx0Y/QstC10L3QsCDQt9Cw0LPQu9Cw0LLQvdCwINGH0LDRgdGCIOKAnkNvbnRlbnQtIgorIlRyYW5zZmVyLUVuY29kaW5n4oCcLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxOAorbXNnaWQgIldoaWNoIDhiaXQgZW5jb2Rpbmcgc2hvdWxkIEkgZGVjbGFyZSBbVVRGLThdPyAiCittc2dzdHIgItCa0L7QtSA4INCx0LjRgtC+0LLQviDQutC+0LTQuNGA0LDQvdC1INGB0LUg0L/QvtC70LfQstCwIFvRgdGC0LDQvdC00LDRgNGC0L3QvjogVVRGLThdPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTI2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJSZWZ1c2luZyB0byBzZW5kIGJlY2F1c2UgdGhlIHBhdGNoXG4iCisiXHQlc1xuIgorImhhcyB0aGUgdGVtcGxhdGUgc3ViamVjdCAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiBQYXNzIC0tZm9yY2UgaWYgeW91IHJlYWxseSAiCisid2FudCB0byBzZW5kLlxuIgorbXNnc3RyICIiCisi0J3QuNGJ0L4g0L3Rj9C80LAg0LTQsCDRgdC1INC/0YDQsNGC0LgsINC30LDRidC+0YLQviDQutGA0YrQv9C60LDRgtCwXG4iCisiICAgICVzXG4iCisi0LLRgdC1INC+0YnQtSDQtSDRgSDRiNCw0LHQu9C+0L3QvdC+0YLQviDQt9Cw0LPQu9Cw0LLQuNC1IOKAnioqKiBTVUJKRUNUIEhFUkUgKioq4oCcLiAg0J/QvtC70LfQstCw0LnRgtC1INC+0L/RhtC40Y/RgtCwXG4iCisi4oCeLS1mb3JjZeKAnCwg0LDQutC+INGB0YLQtSDRgdC40LPRg9GA0L3QuCwg0YfQtSDRgtC+0YfQvdC+INGC0L7QstCwINC40YHQutCw0YLQtSDQtNCwINC40LfQv9GA0LDRgtC40YLQtS5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NDUKK21zZ2lkICJUbyB3aG9tIHNob3VsZCB0aGUgZW1haWxzIGJlIHNlbnQgKGlmIGFueW9uZSk/IgorbXNnc3RyICLQndCwINC60L7QuSDQtNCwINGB0LUg0L/RgNCw0YLRj9GCINC1LdC/0LjRgdC80LDRgtCwICjQvdC10LfQsNC00YrQu9C20LjRgtC10LvQvdC+INC/0L7Qu9C1KSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmF0YWw6IGFsaWFzICclcycgZXhwYW5kcyB0byBpdHNlbGZcbiIKK21zZ3N0ciAi0KTQkNCi0JDQm9Cd0JAg0JPQoNCV0KjQmtCQOiDigJ4lc+KAnCDQtSDQv9GB0LXQstC00L7QvdC40Lwg0L3QsCDRgdC10LHQtSDRgdC4XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTc1Cittc2dpZCAiTWVzc2FnZS1JRCB0byBiZSB1c2VkIGFzIEluLVJlcGx5LVRvIGZvciB0aGUgZmlyc3QgZW1haWwgKGlmIGFueSk/ICIKK21zZ3N0ciAiIgorItCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC90LAg0YHRitC+0LHRidC10L3QuNC1IOKAnk1lc3NhZ2UtSUTigJwsINC60L7QtdGC0L4g0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LfQsCDQvtCx0Y/QstGP0LLQsNC90LXRgtC+ICIKKyLQvdCwINC+0YLQs9C+0LLQvtGAIOKAnkluLVJlcGx5LVRv4oCcICjQvdC10LfQsNC00YrQu9C20LjRgtC10LvQvdC+INC/0L7Qu9C1KSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDMzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJlcnJvcjogdW5hYmxlIHRvIGV4dHJhY3QgYSB2YWxpZCBhZGRyZXNzIGZyb206ICVzXG4iCittc2dzdHIgItCT0KDQldCo0JrQkDog0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9Cy0LvQtdGH0LUg0LDQtNGA0LXRgSDQvtGCIOKAniVz4oCcXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbcV0gW2RdIFtlXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDQ1Cittc2dpZCAiV2hhdCB0byBkbyB3aXRoIHRoaXMgYWRkcmVzcz8gKFtxXXVpdHxbZF1yb3B8W2VdZGl0KTogIgorbXNnc3RyICIiCisi0JrQsNC60LLQviDQtNCwINGB0LUg0L3QsNC/0YDQsNCy0Lgg0YEg0YLQvtC30Lgg0LDQtNGA0LXRgT8g4oCeceKAnCAo0YHQv9C40YDQsNC90LUpLCDigJ5k4oCcICjQuNC30YLRgNC40LLQsNC90LUpLCAiCisi4oCeZeKAnCAo0YDQtdC00LDQutGC0LjRgNCw0L3QtSk6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzYyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkNBIHBhdGggXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQn9GK0YLRj9GCINC60YrQvCDRgdC10YDRgtC40YTQuNC60LDRgiDigJ4lc+KAnCDQvdC1INGB0YrRidC10YHRgtCy0YPQstCwLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDQ1Cittc2dpZCAiIgorIiAgICBUaGUgQ2MgbGlzdCBhYm92ZSBoYXMgYmVlbiBleHBhbmRlZCBieSBhZGRpdGlvbmFsXG4iCisiICAgIGFkZHJlc3NlcyBmb3VuZCBpbiB0aGUgcGF0Y2ggY29tbWl0IG1lc3NhZ2UuIEJ5IGRlZmF1bHRcbiIKKyIgICAgc2VuZC1lbWFpbCBwcm9tcHRzIGJlZm9yZSBzZW5kaW5nIHdoZW5ldmVyIHRoaXMgb2NjdXJzLlxuIgorIiAgICBUaGlzIGJlaGF2aW9yIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHNlbmRlbWFpbC5jb25maXJtXG4iCisiICAgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy5cbiIKKyJcbiIKKyIgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHJ1biAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJy5cbiIKKyIgICAgVG8gcmV0YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yLCBidXQgc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsXG4iCisiICAgIHJ1biAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiAgICDQmtGK0Lwg0YHQv9C40YHRitC60LAg0YEg0L/QvtC70YPRh9Cw0YLQtdC70LjRgtC1ICjigJ5DY+KAnCkg0YHQsCDQtNC+0LHQsNCy0LXQvdC4INC4INC00YDRg9Cz0LjRgtC1XG4iCisiICAgINCw0LTRgNC10YHQuCDQvdCwINC1LdC/0L7RidCwLCDQutC+0LjRgtC+INGB0LAg0YPQv9C+0LzQtdC90LDRgtC4INCyINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsFxuIgorIiAgICDQv9C+0LTQsNCy0LDQvdC1INC90LAg0LrRgNGK0L/QutCw0YLQsC4gINCh0YLQsNC90LTQsNGA0YLQvdC+INC60L7QvNCw0L3QtNCw0YLQsCDigJ5zZW5kLWVtYWls4oCcXG4iCisiICAgINC/0LjRgtCwINC30LAg0YLQvtCy0LAg0L/RgNC10LTQuCDQuNC30L/RgNCw0YnQsNC90LUuICDQnNC+0LbQtdGC0LUg0LTQsCDQv9GA0LXQvNC10L3QuNGC0LUg0YLQvtCy0LBcbiIKKyIgICAg0L/QvtCy0LXQtNC10L3QuNC1INGH0YDQtdC3INC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCec2VuZGVtYWlsLmNvbmZpcm3igJwuXG4iCisiXG4iCisiICAgINCa0L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgc2VuZC1lbWFpbCAtLWhlbHDigJwg0L/RgNC10LTQvtGB0YLQsNCy0Y8g0L7RidC1XG4iCisiICAgINC40L3RhNC+0YDQvNCw0YbQuNGPLiAg0JfQsCDQtNCwINC30LDQv9Cw0LfQuNGC0LUg0YLQtdC60YPRidC+0YLQviDQv9C+0LLQtdC00LXQvdC40LUg0Lgg0LTQsCDQvdC1XG4iCisiICAgINC/0L7Qu9GD0YfQsNCy0LDRgtC1INC/0L7QstC10YfQtSDRgtC+0LLQsCDRgdGK0L7QsdGJ0LXQvdC40LUsINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyIgICAg4oCeZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRv4oCcLlxuIgorIlxuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldIFtuXSBbZV0gW3FdIFthXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDYwCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsPyAoW3ldZXN8W25db3xbZV1kaXR8W3FddWl0fFthXWxsKTogIgorbXNnc3RyICIiCisi0JjQt9C/0YDQsNGJ0LDQvdC1INC90LAg0LUt0L/QuNGB0LzQvtGC0L4/IOKAnnnigJwgKNC00LApLCDigJ5u4oCcICjQvdC1KSwg4oCeZeKAnCAo0YDQtdC00LDQutGC0LjRgNCw0L3QtSksIOKAnnHigJwgKNC40LfRhdC+0LQpLCAiCisi4oCeYeKAnCAo0LLRgdC40YfQutC+KTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjMKK21zZ2lkICJTZW5kIHRoaXMgZW1haWwgcmVwbHkgcmVxdWlyZWQiCittc2dzdHIgItCY0LfQuNGB0LrQstCw0L3QtSDQvdCwINC+0YLQs9C+0LLQvtGAINC60YrQvCDRgtC+0LLQsCDQtS3Qv9C40YHQvNC+IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0OTEKK21zZ2lkICJUaGUgcmVxdWlyZWQgU01UUCBzZXJ2ZXIgaXMgbm90IHByb3Blcmx5IGRlZmluZWQuIgorbXNnc3RyICLQodGK0YDQstGK0YDRitGCINC30LAgU01UUCDQvdC1INC1INC90LDRgdGC0YDQvtC10L0g0L/RgNCw0LLQuNC70L3Qvi4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUzOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBTVEFSVFRMUyEgJXMiCittc2dzdHIgItCh0YrRgNCy0YrRgNGK0YIg0L3QtSDQv9C+0LTQtNGK0YDQttCwIOKAnlNUQVJUVExT4oCcISAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTQzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTVEFSVFRMUyBmYWlsZWQhICVzIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCBTVEFSVFRMUyEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU1NgorbXNnaWQgIlVuYWJsZSB0byBpbml0aWFsaXplIFNNVFAgcHJvcGVybHkuIENoZWNrIGNvbmZpZyBhbmQgdXNlIC0tc210cC1kZWJ1Zy4iCittc2dzdHIgIiIKKyLQn9C+0LTRgdC40YHRgtC10LzQsNGC0LAg0LfQsCBTTVRQINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40L3QuNGG0LjQsNC70LjQt9C40YDQsC4gINCf0YDQvtCy0LXRgNC10YLQtSDQvdCw0YHRgtGA0L7QudC60LjRgtC1INC4ICIKKyLQuNC30L/QvtC70LfQstCw0LnRgtC1INC+0L/RhtC40Y/RgtCwOiDigJ4tLXNtdHAtZGVidWfigJwuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHNlbmQgJXNcbiIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfQv9GA0LDRgtC10L1cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRyeS1TZW50ICVzXG4iCittc2dzdHIgItCf0YDQvtCx0LAg0LfQsCDQuNC30L/RgNCw0YnQsNC90LUg0L3QsCDigJ4lc+KAnFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VudCAlc1xuIgorbXNnc3RyICLQmNC30L/RgNCw0YnQsNC90LUg0L3QsCDigJ4lc+KAnFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJEcnktT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICLQo9GB0L/QtdGFINC/0YDQuCDQv9GA0L7QsdCw0YLQsC4gINCe0YIg0LbRg9GA0L3QsNC70LA6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIk9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAi0KPRgdC/0LXRhS4gINCe0YIg0LbRg9GA0L3QsNC70LA6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU5MQorbXNnaWQgIlJlc3VsdDogIgorbXNnc3RyICLQoNC10LfRg9C70YLQsNGCOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU5NAorbXNnaWQgIlJlc3VsdDogT0tcbiIKK21zZ3N0ciAi0KDQtdC30YPQu9GC0LDRgjog0YPRgdC/0LXRhVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2MTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NTkgZ2l0LXNlbmQtZW1haWwucGVybDoxNjc5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihtYm94KSDQlNC+0LHQsNCy0Y/QvdC1INC90LAg4oCe0Y/QujogJXPigJwg0L7RgiDRgNC10LQg4oCeJXPigJxcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihtYm94KSBBZGRpbmcgdG86ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihtYm94KSDQlNC+0LHQsNCy0Y/QvdC1INC90LAg4oCe0LTQvjogJXPigJwg0L7RgiDRgNC10LQg4oCeJXPigJxcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIo0L3QtS1tYm94KSDQlNC+0LHQsNCy0Y/QvdC1INC90LAg4oCe0Y/QujogJXPigJwg0L7RgiDRgNC10LQg4oCeJXPigJxcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihib2R5KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIijRgtGP0LvQvikg0JTQvtCx0LDQstGP0L3QtSDQvdCwIOKAntGP0Lo6ICVz4oCcINC+0YIg0YDQtdC0IOKAniVz4oCcXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg2NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIENvdWxkIG5vdCBleGVjdXRlICclcyciCittc2dzdHIgIiglcykg0J3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0LUg0LjQt9C/0YrQu9C90Lgg4oCeJXPigJwiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg3MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIEFkZGluZyAlczogJXMgZnJvbTogJyVzJ1xuIgorbXNnc3RyICIoJXMpINCU0L7QsdCw0LLRj9C90LUg0L3QsCDigJ4lczogJXPigJwg0L7Rgjog4oCeJXPigJxcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODc1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJyVzJyIKK21zZ3N0ciAiKCVzKSDQv9GA0L7Qs9GA0LDQvNC90LjRj9GCINC60LDQvdCw0Lsg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNGC0LLQvtGA0Lgg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtdGC0L4g0L3QsCDigJ4lc+KAnCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTA1Cittc2dpZCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IgorbXNnc3RyICLRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9GA0LDRgtC4INGH0YDQtdC3IDcg0LHQuNGC0L7QstC4INC30L3QsNGG0LgiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkxMworbXNnaWQgImludmFsaWQgdHJhbnNmZXIgZW5jb2RpbmciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC60L7QtNC40YDQsNC90LUg0LfQsCDQv9GA0LXQvdC+0YEiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NCBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwMDYgZ2l0LXNlbmQtZW1haWwucGVybDoyMDE2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzOiAlc1xuIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lg6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIgorbXNnc3RyICLigJ4lc+KAnDog0LrRgNGK0L/QutCw0YLQsCDRgdGK0LTRitGA0LbQsCDRgNC10LQg0YEg0L3QsNC0IDk4OCDQt9C90LDQutCwIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgJXMgd2l0aCBiYWNrdXAgc3VmZml4ICclcycuXG4iCittc2dzdHIgIuKAniVz4oCcINGB0LUg0L/RgNC+0L/Rg9GB0LrQsCwg0LfQsNGJ0L7RgtC+INC1INGBINGA0LDQt9GI0LjRgNC10L3QuNC1INC30LAg0LDRgNGF0LjQstC10L0g0YTQsNC50Ls6IOKAniVz4oCcLlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk3OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAlcz8gW3l8Tl06ICIKK21zZ3N0ciAi0J3QsNC40YHRgtC40L3QsCDQu9C4INC40YHQutCw0YLQtSDQtNCwINC40LfQv9GA0LDRgtC40YLQtSDigJ4lc+KAnD8gW3l8Tl06ICIKZGlmZiAtLWdpdCBhL3BvL2NhLnBvIGIvcG8vY2EucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyNGM4MAotLS0gL2Rldi9udWxsCisrKyBiL3BvL2NhLnBvCkBAIC0wLDAgKzEsMjQzMjEgQEAKKyMgQ2F0YWxhbiB0cmFuc2xhdGlvbnMgZm9yIEdpdC4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEdpdCBwYWNrYWdlLgorIyBBbGV4IEhlbnJpZSA8YWxleGhlbnJpZTI0QGdtYWlsLmNvbT4sIDIwMTQtMjAxNi4KKyMgSm9yZGkgTWFzIGkgSGVybsOgbmRleiA8am1hc0Bzb2Z0Y2F0YWxhLm9yZz4sIDIwMTYtMjAyMAorIworIyBUZXJtaW5vbG9naWEgaSBjcml0ZXJpcyB1dGlsaXR6YXRzCisjCisjICAgQW5nbMOocyAgICAgICAgICAgfCAgQ2F0YWzDoAorIyAgIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgIGFoZWFkICAgICAgICAgICAgfCAgZGF2YW50IHBlcgorIyAgIGFtZW5kICAgICAgICAgICAgfCAgZXNtZW5hcgorIyAgIGJ1bmRsZSAgICAgICAgICAgfCAgZmFyY2VsbAorIyAgIGJyb2tlbiAgICAgICAgICAgfCAgbWFsbcOocworIyAgIGRlbHRhICAgICAgICAgICAgfCAgZGlmZXLDqG5jaWEKKyMgICBkZXByZWNhdGVkICAgICAgIHwgIGVuIGRlc8O6cworIyAgIGRyeSAgICAgICAgICAgICAgfCAgc2ltdWxhY2nDsworIyAgIGZhdGFsICAgICAgICAgICAgfCAgZmF0YWwKKyMgICBob29rICAgICAgICAgICAgIHwgIGxsaWdhbQorIyAgIGh1bmsgICAgICAgICAgICAgfCAgdHJvcworIyAgIG5vdCBzdXBwb3J0ZWQgICAgfCAgbm8gZXN0w6AgYWRtw6hzCisjICAgcmVwb3NpdG9yeSAgICAgICB8ICBkaXDDsnNpdAorIyAgIHNldHRpbmcgICAgICAgICAgfCAgcGFyw6BtZXRyZQorIyAgIHNraXAgICAgICAgICAgICAgfCAgb21ldHJlCisjICAgc3F1ZWxjaCAgICAgICAgICB8ICBzaWxlbmNpYXIKKyMgICB0b2tlbiAgICAgICAgICAgIHwgIHRlc3RpbW9uaQorIyAgIHVuc2V0ICAgICAgICAgICAgfCAgZGVzYXNzaWduYXIKKyMgICB1cHN0cmVhbSAgICAgICAgIHwgIGZvbnQKKyMKKyMgQWxndW5zIHRlcm1lcyBxdWUgc8OzbiBvcmRyZXMgZXNwZWPDrWZpcXVlcyBkZWwgZ2l0IGkgZCfDoG1iaXQgbW9sdCB0w6hjbmljCisjIGhlbSBkZWNpZGl0IG5vIHRyYWR1aXItbG9zIHBlciBmYWNpbGl0YXItbmUgbGEgY29tcHJlc3Npw7MgYSBsJ3VzdWFyaSBpIHBlcnF1w6gKKyMgbm8gdGVuZW4gdW5hIHRyYW5zY2VuZMOobmNpYSBhbCBncmFuIHDDumJsaWMuIEVzIHRyYWN0YSBkZSBjYXNvcyBzaW1pbGFycworIyBhIMKrcGluZ8K7IGVuIGwnw6BtYml0IGRlIHhhcnhlcy4KKyMKKyMgVGVybWVzIHF1ZSBtYW50ZW5pbSBlbiBhbmdsw6hzOgorIworIworIyAgIEFuZ2zDqHMgICAgICAgICAgIHwgIENhdGFsw6AKKyMgICAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICBibGFtZSAgICAgICAgICAgIHwgIMKrYmxhbWXCuworIyAgIEhFQUQgICAgICAgICAgICAgfCAgSEVBRCAoZiwgbGEgYnJhbmNhKQorIyAgIGNoZXJyeSBwaWNrICAgICAgfCAgwqtjaGVycnkgcGlja8K7CisjICAgcmViYXNlICAgICAgICAgICB8ICDCq3JlYmFzZcK7CisjICAgc3RhZ2UgICAgICAgICAgICB8ICDCq3N0YWdlwrsKKyMgICBzdGFzaCAgICAgICAgICAgIHwgIMKrc3Rhc2jCuworIyAgIHNxdWFzaCAgICAgICAgICAgfCAgwqtzcXVhc2jCuworIyAgIHRyYWlsZXIgICAgICAgICAgfCAgwqt0cmFpbGVywrsKKyMgICB1bnN0YWdlICAgICAgICAgIHwgIMKrdW5zdGFnZcK7Cittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHaXRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxOS0xMi0zMCAwODo0OCswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAyMC0wMS0wOSAxMDoxMCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBKb3JkaSBNYXMgPGptYXNAc29mdGNhdGFsYS5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQ2F0YWxhblxuIgorIkxhbmd1YWdlOiBjYVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorIlgtR2VuZXJhdG9yOiBQb2VkaXQgMi4yLjRcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpPyIKK21zZ3N0ciAiUGVyZMOzICglcyk/IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1MDAgYWRkLWludGVyYWN0aXZlLmM6ODAxIHNlcXVlbmNlci5jOjMyMTYKKyM6IHNlcXVlbmNlci5jOjM2NTYgYnVpbHRpbi9yZWJhc2UuYzo4NzEgYnVpbHRpbi9yZWJhc2UuYzoxNjQzCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMTkgYnVpbHRpbi9yZWJhc2UuYzoyMDYzCittc2dpZCAiY291bGQgbm90IHJlYWQgaW5kZXgiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGwnw61uZGV4IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1NTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNjkKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjk0Cittc2dpZCAiYmluYXJ5IgorbXNnc3RyICJiaW5hcmkiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYxMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI3OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMzIKK21zZ2lkICJub3RoaW5nIgorbXNnc3RyICJyZXMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYxNCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMxNAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMjkKK21zZ2lkICJ1bmNoYW5nZWQiCittc2dzdHIgInNlbnNlIGNhbnZpcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjUxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjQzCittc2dpZCAiVXBkYXRlIgorbXNnc3RyICJBY3R1YWxpdHphIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NjggYWRkLWludGVyYWN0aXZlLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGFnZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGZlciDCq3N0YWdlwrsgwqslc8K7IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NzQgYWRkLWludGVyYWN0aXZlLmM6ODYzIHNlcXVlbmNlci5jOjM0MDkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODk1Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGluZGV4IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGwnw61uZGV4IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NzcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInVwZGF0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ1cGRhdGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gImFjdHVhbGl0emF0ICVkIGNhbcOtXG4iCittc2dzdHJbMV0gImFjdHVhbGl0emF0cyAlZCBjYW1pbnNcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6Njk1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njc4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJub3RlOiAlcyBpcyB1bnRyYWNrZWQgbm93LlxuIgorbXNnc3RyICJub3RhOiAlcyBlc3TDoCBhcmEgc2Vuc2Ugc2VndWltZW50LlxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3MDAgYXBwbHkuYzo0MTA4IGJ1aWx0aW4vY2hlY2tvdXQuYzoyODEKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAibWFrZV9jYWNoZV9lbnRyeSBoYSBmYWxsYXQgcGVyIGFsIGNhbcOtIMKrJXPCuyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzMwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjU1Cittc2dpZCAiUmV2ZXJ0IgorbXNnc3RyICJSZXZlcnRlaXgiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjc0NgorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBIRUFEXnt0cmVlfSIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgSEVBRF57dHJlZX0iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjc4NCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzMQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAicmV2ZXJ0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJyZXZlcnRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICJyZXZlcnRpdCAlZCBjYW3DrVxuIgorbXNnc3RyWzFdICJyZXZlcnRpdHMgJWQgY2FtaW5zXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjgzNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyB1bnRyYWNrZWQgZmlsZXMuXG4iCittc2dzdHIgIlNlbnNlIGZpdHhlcnMgbm8gc2VndWl0cy5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODM5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njg5Cittc2dpZCAiQWRkIHVudHJhY2tlZCIKK21zZ3N0ciAiQWZlZ2VpeCBzZW5zZSBzZWd1aW1lbnQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg2NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyNQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiYWRkZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJhZGRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICJhZmVnaXQgJWQgY2Ftw61cbiIKK21zZ3N0clsxXSAiYWZlZ2l0cyAlZCBjYW1pbnNcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODk2CisjLCAgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXMiCittc2dzdHIgInMnZXN0w6AgaWdub3JhbnQgYWxsw7Igbm8gZnVzaW9uYXQ6ICVzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MDggYWRkLXBhdGNoLmM6MTMzMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAiTm9tw6lzIHMnaGFuIGNhbnZpYXQgZWxzIGZpdHhlcnMgYmluYXJpcy5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTEwIGFkZC1wYXRjaC5jOjEzMjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNoYW5nZXMuXG4iCittc2dzdHIgIlNlbnNlIGNhbnZpcy5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTE0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3NgorbXNnaWQgIlBhdGNoIHVwZGF0ZSIKK21zZ3N0ciAiQWN0dWFsaXR6YWNpw7MgZGVsIHBlZGHDpyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTUzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc1NAorbXNnaWQgIlJldmlldyBkaWZmIgorbXNnc3RyICJSZXZpc2V1IGxlcyBkaWZlcsOobmNpZXMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4MQorbXNnaWQgInNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzIgorbXNnc3RyICJtb3N0cmEgZWxzIGNhbWlucyBhbWIgY2FudmlzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODMKK21zZ2lkICJhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg1Cittc2dpZCAicmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg3Cittc2dpZCAicGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5IgorbXNnc3RyICJzZWxlY2Npb25hIGVscyB0cm9zc29zIGkgYWN0dWFsaXR6YSBzZWxlY3RpdmFtZW50IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODkKK21zZ2lkICJ2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAidmlzdWFsaXR6YSBsZXMgZGlmZXLDqG5jaWVzIGVudHJlIEhFQUQgaSBsJ8OtbmRleCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTkxCittc2dpZCAiYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk5OSBhZGQtaW50ZXJhY3RpdmUuYzoxMDQ4Cittc2dpZCAiUHJvbXB0IGhlbHA6IgorbXNnc3RyICJNb3N0cmEgYWp1ZGE6IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDAxCittc2dpZCAic2VsZWN0IGEgc2luZ2xlIGl0ZW0iCittc2dzdHIgInNlbGVjY2lvbmV1IHVuIMO6bmljIMOtdGVtIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDAzCittc2dpZCAic2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXMiCittc2dzdHIgInNlbGVjY2lvbmV1IHVuIHJhbmcgZCfDrXRlbXMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDUKK21zZ2lkICJzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzIgorbXNnc3RyICJzZWxlY2Npb25ldSByYW5ncyBtw7psdGlwbGVzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA3IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNTIKK21zZ2lkICJzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4IgorbXNnc3RyICJzZWxlY2Npb25ldSB1biDDrXRlbSBiYXNhbnQtc2UgZW4gdW4gcHJlZml4IMO6bmljIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA5Cittc2dpZCAidW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zIgorbXNnc3RyICJkZXNzZWxlY2Npb25hIGVscyDDrXRlbXMgZXNwZWNpZmljYXRzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDExCittc2dpZCAiY2hvb3NlIGFsbCBpdGVtcyIKK21zZ3N0ciAiZXNjb2xsaXUgdG90cyBlbHMgw610ZW1zIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEzCittc2dpZCAiKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nIgorbXNnc3RyICIoYnVpdCkgZmluYWxpdHphIGxhIHNlbGVjY2nDsyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA1MAorbXNnaWQgInNlbGVjdCBhIG51bWJlcmVkIGl0ZW0iCittc2dzdHIgInNlbGVjY2lvbmV1IHVuIMOtdGVtIG51bWVyYXQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNTQKK21zZ2lkICIoZW1wdHkpIHNlbGVjdCBub3RoaW5nIgorbXNnc3RyICIoYnVpdCkgbm8gc2VsZWNjaW9uaXMgcmVzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDYyIGJ1aWx0aW4vY2xlYW4uYzo4MjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODUxCittc2dpZCAiKioqIENvbW1hbmRzICoqKiIKK21zZ3N0ciAiKioqIE9yZHJlcyAqKioiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjMgYnVpbHRpbi9jbGVhbi5jOjgyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NDgKK21zZ2lkICJXaGF0IG5vdyIKK21zZ3N0ciAiSSBhcmEgcXXDqCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInN0YWdlZCIKK21zZ3N0ciAic3RhZ2VkIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAidW5zdGFnZWQiCittc2dzdHIgInVuc3RhZ2VkIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGFwcGx5LmM6NDk2NSBhcHBseS5jOjQ5NjggYnVpbHRpbi9hbS5jOjIxOTcKKyM6IGJ1aWx0aW4vYW0uYzoyMjAwIGJ1aWx0aW4vY2xvbmUuYzoxMjMgYnVpbHRpbi9mZXRjaC5jOjE0NAorIzogYnVpbHRpbi9tZXJnZS5jOjI3MyBidWlsdGluL3B1bGwuYzoyMDkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODIKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc4CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjExOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInBhdGgiCittc2dzdHIgImNhbcOtIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTIyCittc2dpZCAiY291bGQgbm90IHJlZnJlc2ggaW5kZXgiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYWN0dWFsaXR6YXIgbCfDrW5kZXgiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMzYgYnVpbHRpbi9jbGVhbi5jOjc4NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnllLlxuIgorbXNnc3RyICJBZMOpdS5cbiIKKworIzogYWRkLXBhdGNoLmM6MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixhLHEsZCVzLD9dPyAiCittc2dzdHIgIkNhbnZpYSBlbCBtb2RlIGRlIMKrc3RhZ2XCuyBbeSxuLGEscSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixhLHEsZCVzLD9dPyAiCittc2dzdHIgIlN1cHJpbWVpeCDCq3N0YWdlwrsgW3ksbixhLHEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLGEscSxkJXMsP10/ICIKK21zZ3N0ciAiRmVyIHVuIMKrc3RhZ2XCuyBkJ2FxdWVzdCB0cm9zIFt5LG4sYSxxLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbGEgY2Fww6dhbGVyYSBkZWwgdHJvcyDCqyUuKnPCuyIKKworIzogYWRkLXBhdGNoLmM6MTMwIGFkZC1wYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBodW5rIGhlYWRlciAnJS4qcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGxhIGNhcMOnYWxlcmEgZGVsIHRyb3MgYWNvbG9yaWRhIMKrJS4qc8K7IgorCisjOiBhZGQtcGF0Y2guYzoxNzYKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZGlmZiIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgZWwgZGlmZiIKKworIzogYWRkLXBhdGNoLmM6MTk0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgZWwgZGlmZiBhY29sb3JpdCIKKworIzogYWRkLXBhdGNoLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBjb250ZXh0IGxpbmUgIyVkIGluXG4iCisiJS4qcyIKK21zZ3N0ciAiIgorInMnZXNwZXJhdmEgbGEgbMOtbmlhIGFtYiBjb250aW5ndXQgIyVkIGFcbiIKKyIlLipzIgorCisKKyM6IGFkZC1wYXRjaC5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaHVua3MgZG8gbm90IG92ZXJsYXA6XG4iCisiJS4qc1xuIgorIlx0ZG9lcyBub3QgZW5kIHdpdGg6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzo3OTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTEyCittc2dpZCAiTWFudWFsIGh1bmsgZWRpdCBtb2RlIC0tIHNlZSBib3R0b20gZm9yIGEgcXVpY2sgZ3VpZGUuXG4iCittc2dzdHIgIiIKKyJNb2RlIGQnZWRpY2nDsyBkZSB0cm9zc29zIG1hbnVhbCAtIHZlZ2V1IG3DqXMgYXZhbGwgcGVyIHVuYSBndWlhIHLDoHBpZGEuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclYycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVjIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorIi0tLVxuIgorIlBlciBzdXByaW1pciDCqyVjwrsgbMOtbmllcywgY29udmVydGl1LWxlcyBhICcgJyAoY29udGV4dCkuXG4iCisiUGVyIHN1cHJpbWlyIMKrJWPCuyBsw61uaWVzLCBzdXByaW1pdS1sZXMuXG4iCisiTGVzIGzDrW5pZXMgcXVlIGNvbWVuY2luIHBlciAlYyBzZXJhbiBzdXByaW1pZGVzLlxuIgorCisjOiBhZGQtcGF0Y2guYzo4MTAKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YWdpbmcuXG4iCittc2dzdHIgIiIKKyJTaSBlbCBwZWRhw6cgcydhcGxpY2EgY29ycmVjdGFtZW50LCBlbCB0cm9zIGVkaXRhdCBlcyBtYXJjYXLDoCBpbW1lZGlhdGFtZW50XG4iCisicGVyIMKrc3RhZ2luZ8K7LlxuIgorCisjLiBUUkFOU0xBVE9SUzogJ2l0JyByZWZlcnMgdG8gdGhlIHBhdGNoIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgbWVzc2FnZXMuCisjOiBhZGQtcGF0Y2guYzo4MTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTI2Cittc2dpZCAiIgorIklmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlIGdpdmVuIGFuIG9wcG9ydHVuaXR5IHRvXG4iCisiZWRpdCBhZ2Fpbi4gIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgcmVtb3ZlZCwgdGhlbiB0aGUgZWRpdCBpc1xuIgorImFib3J0ZWQgYW5kIHRoZSBodW5rIGlzIGxlZnQgdW5jaGFuZ2VkLlxuIgorbXNnc3RyICIiCisiU2kgbm8gcydhcGxpY2EgY29ycmVjdGFtZW50LCB0aW5kcmV1IHVuYSBvcG9ydHVuaXRhdCBwZXIgZWRpdGFyLWxvXG4iCisiZGUgbm91LiBTaSB0b3RlcyBsZXMgbMOtbmllcyBkZWwgdHJvcyBzZSBzdXByaW1laXhlbiwgbGxhdm9ycyBsJ2VkaWNpw7MgIgorInMnYXZvcnRhXG4iCisiaSBlbCB0cm9zIGVzIGRlaXhhIHNlbnNlIGNhcCBjYW52aS5cbiIKKworIzogYWRkLXBhdGNoLmM6ODUxCittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjYXDDp2FsZXJhIGRlbCB0cm9zIgorCisjOiBhZGQtcGF0Y2guYzo4OTUgYWRkLXBhdGNoLmM6MTI5NAorbXNnaWQgIidnaXQgYXBwbHkgLS1jYWNoZWQnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIy4KKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIzogYWRkLXBhdGNoLmM6OTUyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIzOQorbXNnaWQgIiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/ICIKK21zZ3N0ciAiIgorIkVsIHRyb3MgZWRpdGF0IG5vIHMnYXBsaWNhLiBFZGl0ZXUtbG8gZGUgbm91IChzaSByZXNwb25ldSBcIm5vXCIgZXMgIgorImRlc2NhcnRhcsOgKSBbeS9uXT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMDA5Cittc2dpZCAiIgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBhbmQgYWxsIHRoZSByZW1haW5pbmcgaHVua3NcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBub3IgYW55IG9mIHRoZSByZW1haW5pbmcgaHVua3NcbiIKK21zZ3N0ciAiIgorInkgLSBmZXMgwqtzdGFnZcK7IGQnYXF1ZXN0IHRyb3NcbiIKKyJuIC0gbm8gZmFjaXMgwqtzdGFnZcK7IGQnYXF1ZXN0IHRyb3NcbiIKKyJxIC0gc3VydDsgbm8gZmFjaXMgwqtzdGFnZcK7IGQnYXF1ZXN0IHRyb3MgbyBkZSBjYXAgYWx0cmUgcmVzdGFudFxuIgorImEgLSBmZXMgwqtzdGFnZcK7IGQnYXF1ZXN0IHRyb3MgaSBkZSB0b3RhIGxhIHJlc3RhIGRlIHRyb3Nzb3MgZGVsIGZpdHhlclxuIgorImQgLSBubyBmYWNpcyDCq3N0YWdlwrsgZCdhcXVlc3QgdHJvcyBvIGRlIGNhcCBhbHRyZSByZXN0YW50IGRlbCBmaXR4ZXJcbiIKKworIzogYWRkLXBhdGNoLmM6MTAxNgorbXNnaWQgIiIKKyJqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmtcbiIKKyJKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVua1xuIgorImsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmtcbiIKKyJLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmtcbiIKKyJnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0b1xuIgorIi8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXhcbiIKKyJzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3NcbiIKKyJlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rXG4iCisiPyAtIHByaW50IGhlbHBcbiIKK21zZ3N0ciAiIgorImogLSBkZWl4YSBhcXVlc3QgdHJvcyBzZW5zZSBkZWNpZGlyLCB2ZXVyZSBlbCB0cm9zIHNlbnNlIGRlY2lkaXIgc2Vnw7xlbnRcbiIKKyJKIC0gZGVpeGEgYXF1ZXN0IHRyb3Mgc2Vuc2UgZGVjaWRpciwgdmV1cmUgZWwgdHJvcyBzZWfDvGVudFxuIgorImsgLSBkZWl4YSBhcXVlc3QgdHJvcyBzZW5zZSBkZWNpZGlyLCB2ZXVyZSBlbCB0cm9zIHNlbnNlIGRlY2lkaXIgYW50ZXJpb3JcbiIKKyJLIC0gZGVpeGEgYXF1ZXN0IHRyb3Mgc2Vuc2UgZGVjaWRpciwgdmV1cmUgZWwgdHJvcyBhbnRlcmlvclxuIgorImcgLSBzZWxlY2Npb25hIGVsIHRyb3Mgb24gdm9sZXUgYW5hclxuIgorIi8gLSBjZXJjYSB1biB0cm9zIHF1ZSBjb2luY2lkZWl4aSBhbWIgbCdleHByZXNzacOzIHJlZ3VsYXIgZG9uYWRhXG4iCisicyAtIGRpdmlkZWl4IGVsIHRyb3MgYWN0dWFsIGVuIHRyb3Nzb3MgbcOpcyBwZXRpdHNcbiIKKyJlIC0gZWRpdGEgbWFudWFsbWVudCBlbCB0cm9zIGFjdHVhbFxuIgorIj8gLSBtb3N0cmEgbCdhanVkYVxuIgorCisjOiBhZGQtcGF0Y2guYzoxMTM3IGFkZC1wYXRjaC5jOjExNDcKK21zZ2lkICJObyBwcmV2aW91cyBodW5rIgorbXNnc3RyICJTZW5zZSB0cm9zIHByZXZpIgorCisjOiBhZGQtcGF0Y2guYzoxMTQyIGFkZC1wYXRjaC5jOjExNTIKK21zZ2lkICJObyBuZXh0IGh1bmsiCittc2dzdHIgIk5vIGhpIGhhIHRyb3Mgc2Vnw7xlbnQiCisKKyM6IGFkZC1wYXRjaC5jOjExNTgKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvIgorbXNnc3RyICJObyBoaSBoYSBhbHRyZXMgdHJvc3NvcyBvbiBhbmFyLWhpIgorCisjOiBhZGQtcGF0Y2guYzoxMTY5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3NworbXNnaWQgImdvIHRvIHdoaWNoIGh1bmsgKDxyZXQ+IHRvIHNlZSBtb3JlKT8gIgorbXNnc3RyICJ2w6lzIGEgcXVpbiB0cm9zICg8cmV0PiBwZXIgdmV1cmUnbiBtw6lzKT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMTcwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3OQorbXNnaWQgImdvIHRvIHdoaWNoIGh1bms/ICIKK21zZ3N0ciAidsOpcyBhIHF1aW4gdHJvcz8gIgorCisjOiBhZGQtcGF0Y2guYzoxMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnIgorbXNnc3RyICJOw7ptZXJvIG5vIHbDoGxpZDogwqslc8K7IgorCisjOiBhZGQtcGF0Y2guYzoxMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLiIKK21zZ3N0clswXSAiTm9tw6lzICVkIHRyb3MgZGlzcG9uaWJsZS4iCittc2dzdHJbMV0gIk5vbcOpcyAlZCB0cm9zc29zIGRpc3BvbmlibGVzLiIKKworIzogYWRkLXBhdGNoLmM6MTE5NQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaCIKK21zZ3N0ciAiTm8gaGkgaGEgY2FwIGFsdHJlIHRyb3MgYSBjZXJjYXIiCisKKyM6IGFkZC1wYXRjaC5jOjEyMDEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjIzCittc2dpZCAic2VhcmNoIGZvciByZWdleD8gIgorbXNnc3RyICJjZXJjYSBwZXIgZXhwcmVzc2nDsyByZWd1bGFyPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzIgorbXNnc3RyICJFeHByZXNzacOzIHJlZ3VsYXIgZGUgY2VyY2EgbWFsIGZvcm1hZGEgJXM6ICVzIgorCisjOiBhZGQtcGF0Y2guYzoxMjMzCittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuIgorbXNnc3RyICJObyBoaSBoYSB0cm9zc29zIHF1ZSBjb2luY2lkZWl4aW4gYW1iIGVsIHBhdHLDsyBkb25hdCIKKworIzogYWRkLXBhdGNoLmM6MTI0MAorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rIgorbXNnc3RyICJObyBlcyBwb3QgZGl2aWRpciBhcXVlc3QgdHJvcyIKKworIzogYWRkLXBhdGNoLmM6MTI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmtzLiIKK21zZ3N0ciAiRGl2aWRlaXggZW4gJWQgdHJvc3Nvcy4iCisKKyM6IGFkZC1wYXRjaC5jOjEyNDgKK21zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rIgorbXNnc3RyICJObyBlcyBwb3QgZWRpdGFyIGFxdWVzdCB0cm9zIgorCisjOiBhZHZpY2UuYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNoaW50OiAlLipzJXNcbiIKK21zZ3N0ciAiJXNwaXN0YTogJS4qcyVzXG4iCisKKyM6IGFkdmljZS5jOjE2NAorbXNnaWQgIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiRmVyIMKrY2hlcnJ5IHBpY2vCuyBubyDDqXMgcG9zc2libGUgcGVycXXDqCB0ZW5pdSBmaXR4ZXJzIHNlbnNlIGZ1c2lvbmFyLiIKKworIzogYWR2aWNlLmM6MTY2Cittc2dpZCAiQ29tbWl0dGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIkNvbWV0cmUgbm8gw6lzIHBvc3NpYmxlIHBlcnF1w6ggdGVuaXUgZml0eGVycyBzZW5zZSBmdXNpb25hci4iCisKKyM6IGFkdmljZS5jOjE2OAorbXNnaWQgIk1lcmdpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICJGdXNpb25hciBubyDDqXMgcG9zc2libGUgcGVycXXDqCB0ZW5pdSBmaXR4ZXJzIHNlbnNlIGZ1c2lvbmFyLiIKKworIzogYWR2aWNlLmM6MTcwCittc2dpZCAiUHVsbGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIkJhaXhhciBubyDDqXMgcG9zc2libGUgcGVycXXDqCB0ZW5pdSBmaXR4ZXJzIHNlbnNlIGZ1c2lvbmFyLiIKKworIzogYWR2aWNlLmM6MTcyCittc2dpZCAiUmV2ZXJ0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiUmV2ZXJ0aXIgbm8gw6lzIHBvc3NpYmxlIHBlcnF1w6ggdGVuaXUgZml0eGVycyBzZW5zZSBmdXNpb25hci4iCisKKyM6IGFkdmljZS5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJJdCBpcyBub3QgcG9zc2libGUgdG8gJXMgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIk5vIMOpcyBwb3NzaWJsZSAlcyBwZXJxdcOoIHRlbml1IGZpdHhlcnMgc2Vuc2UgZnVzaW9uYXIuIgorCisjOiBhZHZpY2UuYzoxODIKK21zZ2lkICIiCisiRml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIgorbXNnc3RyICIiCisiQXJyZWdsZXUtbG9zIGVuIGwnYXJicmUgZGUgdHJlYmFsbCwgaSBkZXNwcsOpcyB1c2V1XG4iCisiJ2dpdCBhZGQvcm0gPGZpdHhlcj4nIHNlZ29ucyBzaWd1aSBhcHJvcGlhdCBwZXIgYSBtYXJjYXIgbGFcbiIKKyJyZXNvbHVjacOzIGkgZmV1IHVuYSBjb21pc3Npw7MuIgorCisjOiBhZHZpY2UuYzoxOTAKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgYW4gdW5yZXNvbHZlZCBjb25mbGljdC4iCittc2dzdHIgIlMnZXN0w6Agc29ydGludCBhIGNhdXNhIGQndW4gY29uZmxpY3RlIG5vIHJlc29sdC4iCisKKyM6IGFkdmljZS5jOjE5NSBidWlsdGluL21lcmdlLmM6MTMzMgorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiTm8gaGV1IGNvbmNsw7JzIGxhIHZvc3RyYSBmdXNpw7MgKE1FUkdFX0hFQUQgZXhpc3RlaXgpLiIKKworIzogYWR2aWNlLmM6MTk3Cittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSBtZXJnaW5nLiIKK21zZ3N0ciAiQ29tZXRldSBlbHMgdm9zdHJlcyBjYW52aXMgYWJhbnMgZGUgZnVzaW9uYXIuIgorCisjOiBhZHZpY2UuYzoxOTgKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iCittc2dzdHIgIlMnZXN0w6Agc29ydGludCBhIGNhdXNhIGQndW5hIGZ1c2nDsyBubyB0ZXJtaW5hZGEuIgorCisjOiBhZHZpY2UuYzoyMDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBzd2l0Y2hpbmcgdG8gJyVzJy5cbiIKKyJcbiIKKyJZb3UgYXJlIGluICdkZXRhY2hlZCBIRUFEJyBzdGF0ZS4gWW91IGNhbiBsb29rIGFyb3VuZCwgbWFrZSBleHBlcmltZW50YWxcbiIKKyJjaGFuZ2VzIGFuZCBjb21taXQgdGhlbSwgYW5kIHlvdSBjYW4gZGlzY2FyZCBhbnkgY29tbWl0cyB5b3UgbWFrZSBpbiB0aGlzXG4iCisic3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHN3aXRjaGluZyBiYWNrIHRvIGEgYnJhbmNoLlxuIgorIlxuIgorIklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gcmV0YWluIGNvbW1pdHMgeW91IGNyZWF0ZSwgeW91IG1heVxuIgorImRvIHNvIChub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1jIHdpdGggdGhlIHN3aXRjaCBjb21tYW5kLiBFeGFtcGxlOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyA8bmV3LWJyYW5jaC1uYW1lPlxuIgorIlxuIgorIk9yIHVuZG8gdGhpcyBvcGVyYXRpb24gd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLVxuIgorIlxuIgorIlR1cm4gb2ZmIHRoaXMgYWR2aWNlIGJ5IHNldHRpbmcgY29uZmlnIHZhcmlhYmxlIGFkdmljZS5kZXRhY2hlZEhlYWQgdG8gIgorImZhbHNlXG4iCisiXG4iCittc2dzdHIgIiIKKyJBdsOtczogcydlc3TDoCBjYW52aWFudCBhIMKrJXPCuy5cbiIKKyJcbiIKKyJFc3RldSBlbiB1biBlc3RhdCBkZSDCq0hFQUQgc2VwYXJhdMK7LiBQb2RldSBtaXJhciBhbCB2b2x0YW50LCBmZXIgY2FudmlzXG4iCisiZXhwZXJpbWVudGFscyBpIGNvbWV0cmUnbHMsIGkgcG9kZXUgZGVzY2FydGFyIHF1YWxzZXZvbCBjb21pc3Npw7MgcXVlIGZldVxuIgorImVuIGFxdWVzdCBlc3RhdCBzZW5zZSBjYXAgYnJhbmNhIHJlYWxpdHphbnQgdW4gYWx0cmUgYWdhZmFtZW50LlxuIgorIlxuIgorIlNpIHZvbGV1IGNyZWFyIHVuYSBicmFuY2Egbm92YSBwZXIgYSBjb25zZXJ2YXIgbGVzIGNvbWlzc2lvbnMgcXVlIGNyZWV1LFxuIgorInBvZGVyIGZlci1obyAoYXJhIG8gbcOpcyB0YXJkKSB1c2FudCAtYiBkZSBub3UgYW1iIGwnb3JkcmUgY2hlY2tvdXQuXG4iCisiRXhlbXBsZTpcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiA8bm9tLWRlLWJyYW5jYS1ub3ZhPlxuIgorCisjOiBhbGlhcy5jOjUwCittc2dpZCAiY21kbGluZSBlbmRzIHdpdGggXFwiCittc2dzdHIgImxhIGzDrW5pYSBkJ29yZHJlcyBhY2FiYSBhbWIgXFwiCisKKyM6IGFsaWFzLmM6NTEKK21zZ2lkICJ1bmNsb3NlZCBxdW90ZSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJvcGNpw7MgZCdlc3BhaSBlbiBibGFuYyDCqyVzwrsgbm8gcmVjb25lZ3VkYSIKKworIzogYXBwbHkuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIm9wY2nDsyBpZ25vcmEgbCdlc3BhaSBlbiBibGFuYyDCqyVzwrsgbm8gcmVjb25lZ3VkYSIKKworIzogYXBwbHkuYzoxMzUKK21zZ2lkICItLXJlamVjdCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1yZWplY3QgaSAtLTN3YXkgbm8gZXMgcG9kZW4gdXNhciBqdW50cy4iCisKKyM6IGFwcGx5LmM6MTM3Cittc2dpZCAiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tY2FjaGVkIGkgLS0zd2F5IG5vIGVzIHBvZGVuIHVzYXIganVudHMuIgorCisjOiBhcHBseS5jOjE0MAorbXNnaWQgIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS0zd2F5IGZvcmEgZCd1biBkaXDDsnNpdCIKKworIzogYXBwbHkuYzoxNTEKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWluZGV4IGZvcmEgZCd1biBkaXDDsnNpdCIKKworIzogYXBwbHkuYzoxNTQKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1jYWNoZWQgZm9yYSBkJ3VuIGRpcMOyc2l0IgorCisjOiBhcHBseS5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICJObyBlcyBwb3QgcHJlcGFyYXIgbCdleHByZXNzacOzIHJlZ3VsYXIgZGUgbWFyY2EgZGUgdGVtcHMgJXMiCisKKyM6IGFwcGx5LmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIKK21zZ3N0ciAicmVnZXhlYyBoYSByZXRvcm5hdCAlZCBwZXIgbCdlbnRyYWRhOiAlcyIKKworIzogYXBwbHkuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCB0cm9iYXIgZWwgbm9tIGRlIGZpdHhlciBlbiBlbCBwZWRhw6cgYSBsYSBsw61uaWEgJWQiCisKKyM6IGFwcGx5LmM6OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTogZ2l0LWRpZmYgaW5jb3JyZWN0ZSAtIHMnZXNwZXJhdmEgL2Rldi9udWxsLCBzJ2hhIHJlYnV0ICVzIGVuIGxhICIKKyJsw61uaWEgJWQiCisKKyM6IGFwcGx5LmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5OiBnaXQtZGlmZiBpbmNvcnJlY3RlIC0gbm9tIGRlIGZpdHhlciBub3UgaW5jb25zaXN0ZW50IGVuIGxhIGzDrW5pYSAiCisiJWQiCisKKyM6IGFwcGx5LmM6OTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5OiBnaXQtZGlmZiBpbmNvcnJlY3RlIC0gbm9tIGRlIGZpdHhlciBhbnRpYyBpbmNvbnNpc3RlbnQgZW4gbGEgIgorImzDrW5pYSAlZCIKKworIzogYXBwbHkuYzo5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBnaXQtZGlmZiBpbmNvcnJlY3RlIC0gcydlc3BlcmF2YSAvZGV2L251bGwgZW4gbGEgbMOtbmlhICVkIgorCisjOiBhcHBseS5jOjk2MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgb24gbGluZSAlZDogJXMiCittc2dzdHIgIm1vZGUgbm8gdsOgbGlkIGVuIGxhIGzDrW5pYSAlZDogJXMiCisKKyM6IGFwcGx5LmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvbnNpc3RlbnQgaGVhZGVyIGxpbmVzICVkIGFuZCAlZCIKK21zZ3N0ciAibMOtbmllcyBkZSBjYXDDp2FsZXJhICVkIGkgJWQgaW5jb25zaXN0ZW50cyIKKworIzogYXBwbHkuYzoxMzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnQgKGxpbmUgJWQpIgorbXNnaWRfcGx1cmFsICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50cyAobGluZSAlZCkiCittc2dzdHJbMF0gIiIKKyJhIGxhIGNhcMOnYWxlcmEgZGUgZ2l0IGRpZmYgbGkgbWFuY2EgaW5mb3JtYWNpw7MgZGUgbm9tIGRlIGZpdHhlciBlbiBlbGltaW5hciAiCisiJWQgY29tcG9uZW50IGRlIG5vbSBkZSBjYW3DrSBpbmljaWFsIChsw61uaWEgJWQpIgorbXNnc3RyWzFdICIiCisiYSBsYSBjYXDDp2FsZXJhIGRlIGdpdCBkaWZmIGxpIG1hbmNhIGluZm9ybWFjacOzIGRlIG5vbSBkZSBmaXR4ZXIgZW4gZWxpbWluYXIgIgorIiVkIGNvbXBvbmVudHMgZGUgbm9tIGRlIGNhbcOtIGluaWNpYWwgKGzDrW5pYSAlZCkiCisKKyM6IGFwcGx5LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gKGxpbmUgJWQpIgorbXNnc3RyICIiCisiYSBsYSBjYXDDp2FsZXJhIGRlIGdpdCBkaWZmIGxpIG1hbmNhIGluZm9ybWFjacOzIGRlIG5vbSBkZSBmaXR4ZXIgKGzDrW5pYSAlZCkiCisKKyM6IGFwcGx5LmM6MTQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWNvdW50OiB1bmV4cGVjdGVkIGxpbmU6ICUuKnMiCittc2dzdHIgInJlY29tcHRlOiBsw61uaWEgaW5lc3BlcmFkYTogJS4qcyIKKworIzogYXBwbHkuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgImZyYWdtZW50IGRlIHBlZGHDpyBzZW5zZSBjYXDDp2FsZXJhIGEgbGEgbMOtbmlhICVkOiAlLipzIgorCisjOiBhcHBseS5jOjE3NTMKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAiZWwgZml0eGVyIG5vdSBkZXDDqG4gZGVscyBjb250aW5ndXRzIGFudGljcyIKKworIzogYXBwbHkuYzoxNzU1Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiZWwgZml0eGVyIHN1cHJpbWl0IGVuY2FyYSB0w6kgY29udGluZ3V0cyIKKworIzogYXBwbHkuYzoxNzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAicGVkYcOnIG1hbG3DqHMgYSBsYSBsw61uaWEgJWQiCisKKyM6IGFwcGx5LmM6MTgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAiZWwgZml0eGVyIG5vdSAlcyBkZXDDqG4gZGVscyBjb250aW5ndXRzIGFudGljcyIKKworIzogYXBwbHkuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgImVsIGZpdHhlciBzdXByaW1pdCAlcyBlbmNhcmEgdMOpIGNvbnRpbmd1dHMiCisKKyM6IGFwcGx5LmM6MTgzMQorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIqKiBhZHZlcnTDqG5jaWE6IGVsIGZpdHhlciAlcyBxdWVkYSBidWl0IHBlcsOyIG5vIHNlIHN1cHJpbWVpeCIKKworIzogYXBwbHkuYzoxOTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgInBlZGHDpyBiaW5hcmkgbWFsbcOocyBhIGxhIGzDrW5pYSAlZDogJS4qcyIKKworIzogYXBwbHkuYzoyMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAicGVkYcOnIGJpbmFyaSBubyByZWNvbmVndXQgYSBsYSBsw61uaWEgJWQiCisKKyM6IGFwcGx5LmM6MjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICJwZWRhw6cgYW1iIG5vbcOpcyBlc2NvbWJyYXJpZXMgYSBsYSBsw61uaWEgJWQiCisKKyM6IGFwcGx5LmM6MjI2MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBsJ2VubGxhw6cgc2ltYsOybGljICVzIgorCisjOiBhcHBseS5jOjIyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciBvIGxsZWdpciAlcyIKKworIzogYXBwbHkuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAiaW5pY2kgZGUgbMOtbmlhIG5vIHbDoGxpZDogwqslY8K7IgorCisjOiBhcHBseS5jOjMwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICJFbCB0cm9zICMlZCBoYSB0aW5ndXQgw6h4aXQgYSAlZCAoZGVzcGxhw6dhbWVudCBkJyVkIGzDrW5pYSkuIgorbXNnc3RyWzFdICJFbCB0cm9zICMlZCBoYSB0aW5ndXQgw6h4aXQgYSAlZCAoZGVzcGxhw6dhbWVudCBkZSAlZCBsw61uaWVzKS4iCisKKyM6IGFwcGx5LmM6MzA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICJFbCBjb250ZXh0IHMnaGEgcmVkdcOvdCBhICglbGQvJWxkKSBwZXIgYSBhcGxpY2FyIGVsIGZyYWdtZW50IGEgJWQiCisKKyM6IGFwcGx5LmM6MzA3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2hpbGUgc2VhcmNoaW5nIGZvcjpcbiIKKyIlLipzIgorbXNnc3RyICIiCisidG90IGNlcmNhbnQ6XG4iCisiJS4qcyIKKworIzogYXBwbHkuYzozMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgIm1hbnF1ZW4gbGVzIGRhZGVzIGRlIHBlZGHDpyBiaW5hcmkgZGUgwqslc8K7IgorCisjOiBhcHBseS5jOjMxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJldmVyc2UtYXBwbHkgYSBiaW5hcnkgcGF0Y2ggd2l0aG91dCB0aGUgcmV2ZXJzZSBodW5rIHRvICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBhcGxpY2FyIGFsIHJldsOpcyB1biBwZWRhw6cgYmluYXJpIHNlbnNlIGVsIHRyb3MgcmV2w6lzIGEgwqslc8K7IgorCisjOiBhcHBseS5jOjMxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFwcGx5IGJpbmFyeSBwYXRjaCB0byAnJXMnIHdpdGhvdXQgZnVsbCBpbmRleCBsaW5lIgorbXNnc3RyICIiCisibm8gZXMgcG90IGFwbGljYXIgdW4gcGVkYcOnIGJpbmFyaSBhIMKrJXPCuyBzZW5zZSBsYSBsw61uaWEgZCfDrW5kZXggY29tcGxldGEiCisKKyM6IGFwcGx5LmM6MzE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIHBhdGNoIGFwcGxpZXMgdG8gJyVzJyAoJXMpLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBjb250ZW50cy4iCittc2dzdHIgIiIKKyJlbCBwZWRhw6cgcydhcGxpY2EgYSDCqyVzwrsgKCVzKSwgZWwgcXVhbCBubyBjb2luY2lkZWl4IGFtYiBlbHMgY29udGluZ3V0cyAiCisiYWN0dWFscy4iCisKKyM6IGFwcGx5LmM6MzE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcGF0Y2ggYXBwbGllcyB0byBhbiBlbXB0eSAnJXMnIGJ1dCBpdCBpcyBub3QgZW1wdHkiCittc2dzdHIgImVsIHBlZGHDpyBzJ2FwbGljYSBhIHVuIMKrJXPCuyBidWl0IHBlcsOyIG5vIMOpcyBidWl0IgorCisjOiBhcHBseS5jOjMxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG5lY2Vzc2FyeSBwb3N0aW1hZ2UgJXMgZm9yICclcycgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgbGEgcG9zdGltYXRnZSAlcyBuZWNlc3PDoHJpYSBwZXIgYSDCqyVzwrsiCisKKyM6IGFwcGx5LmM6MzIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggZG9lcyBub3QgYXBwbHkgdG8gJyVzJyIKK21zZ3N0ciAiZWwgcGVkYcOnIGJpbmFyaSBubyBzJ2FwbGljYSBhIMKrJXPCuyIKKworIzogYXBwbHkuYzozMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCB0byAnJXMnIGNyZWF0ZXMgaW5jb3JyZWN0IHJlc3VsdCAoZXhwZWN0aW5nICVzLCBnb3QgJXMpIgorbXNnc3RyICIiCisiZWwgcGVkYcOnIGJpbmFyaSBhIMKrJXPCuyBjcmVhIHVuIHJlc3VsdGF0IGluY29ycmVjdGUgKHMnZXNwZXJhdmEgJXMsIHMnaGEgIgorInJlYnV0ICVzKSIKKworIzogYXBwbHkuYzozMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICJlbCBwZWRhw6cgaGEgZmFsbGF0OiAlczolbGQiCisKKyM6IGFwcGx5LmM6MzM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgIm5vIGVzIHBvdCBhZ2FmYXIgJXMiCisKKyM6IGFwcGx5LmM6MzQwMyBhcHBseS5jOjM0MTQgYXBwbHkuYzozNDYwIG1pZHguYzo2MSBzZXR1cC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlcyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgJXMiCisKKyM6IGFwcGx5LmM6MzQxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGZyb20gJyVzJyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJzJ2VzdMOgIGxsZWdpbnQgZGUgwqslc8K7IG3DqXMgZW5sbMOgIGQndW4gZW5sbGHDpyBzaW1iw7JsaWMiCisKKyM6IGFwcGx5LmM6MzQ0MCBhcHBseS5jOjM2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgImVsIGNhbcOtICVzIHMnaGEgY2FudmlhdCBkZSBub20gLyBzJ2hhIHN1cHJpbWl0IgorCisjOiBhcHBseS5jOjM1MjYgYXBwbHkuYzozNjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IG5vIGV4aXN0ZWl4IGVuIGwnw61uZGV4IgorCisjOiBhcHBseS5jOjM1MzUgYXBwbHkuYzozNzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXM6IG5vIGNvaW5jaWRlaXggYW1iIGwnw61uZGV4IgorCisjOiBhcHBseS5jOjM1NzAKK21zZ2lkICJyZXBvc2l0b3J5IGxhY2tzIHRoZSBuZWNlc3NhcnkgYmxvYiB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisiYWwgZGlww7JzaXQgbGkgbWFuY2EgZWwgYmxvYiBuZWNlc3NhcmkgcGVyIGEgcmV0cm9jZWRpciBhIHVuYSBmdXNpw7MgZGUgMyB2aWVzLiIKKworIzogYXBwbHkuYzozNTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhbGxpbmcgYmFjayB0byB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiUydlc3TDoCByZXRyb2NlZGludCBhIHVuYSBmdXNpw7MgZGUgMyB2aWVzLi4uXG4iCisKKyM6IGFwcGx5LmM6MzU4OSBhcHBseS5jOjM1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG9kZW4gbGxlZ2lyIGVscyBjb250aW5ndXRzIGFjdHVhbHMgZGUgwqslc8K7IgorCisjOiBhcHBseS5jOjM2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZhbGwgYmFjayBvbiB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiByZXRyb2NlZGlyIGEgdW5hIGZ1c2nDsyBkZSAzIHZpZXMuLi5cbiIKKworIzogYXBwbHkuYzozNjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyB3aXRoIGNvbmZsaWN0cy5cbiIKK21zZ3N0ciAiUydoYSBhcGxpY2F0IGVsIHBlZGHDpyBhIMKrJXPCuyBhbWIgY29uZmxpY3Rlcy5cbiIKKworIzogYXBwbHkuYzozNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICJTJ2hhIGFwbGljYXQgZWwgcGVkYcOnIGEgwqslc8K7IG5ldGFtZW50LlxuIgorCisjOiBhcHBseS5jOjM2NTAKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICJlbCBwZWRhw6cgZCdlbGltaW5hY2nDsyBkZWl4YSBlbHMgY29udGluZ3V0cyBkZWxzIGZpdHhlcnMiCisKKyM6IGFwcGx5LmM6MzcyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogd3JvbmcgdHlwZSIKK21zZ3N0ciAiJXM6IHRpcHVzIGVycm9uaSIKKworIzogYXBwbHkuYzozNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMgw6lzIGRlbCB0aXB1cyAlbywgcydlc3BlcmF2YSAlbyIKKworIzogYXBwbHkuYzozODc2IGFwcGx5LmM6Mzg3OCByZWFkLWNhY2hlLmM6ODMwIHJlYWQtY2FjaGUuYzo4NTYKKyM6IHJlYWQtY2FjaGUuYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0aCAnJXMnIgorbXNnc3RyICJjYW3DrSBubyB2w6BsaWQ6IMKrJXPCuyIKKworIzogYXBwbHkuYzozOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IGphIGV4aXN0ZWl4IGVuIGwnw61uZGV4IgorCisjOiBhcHBseS5jOjM5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlczogamEgZXhpc3RlaXggZW4gZWwgZGlyZWN0b3JpIGRlIHRyZWJhbGwiCisKKyM6IGFwcGx5LmM6Mzk1NworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgImVsIG1vZGUgbm91ICglbykgZGUgJXMgbm8gY29pbmNpZGVpeCBhbWIgZWwgbW9kZSBhbnRpYyAoJW8pIgorCisjOiBhcHBseS5jOjM5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICJlbCBtb2RlIG5vdSAoJW8pIGRlICVzIG5vIGNvaW5jaWRlaXggYW1iIGVsIG1vZGUgYW50aWMgKCVvKSBkZSAlcyIKKworIzogYXBwbHkuYzozOTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImFmZmVjdGVkIGZpbGUgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJlbCBmaXR4ZXIgYWZlY3RhdCDCqyVzwrsgw6lzIG3DqXMgZW5sbMOgIGQndW4gZW5sbGHDpyBzaW1iw7JsaWMiCisKKyM6IGFwcGx5LmM6Mzk4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiVzOiBlbCBwZWRhw6cgbm8gcydhcGxpY2EiCisKKyM6IGFwcGx5LmM6NDAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBwYXRjaCAlcy4uLiIKK21zZ3N0ciAiUydlc3TDoCBjb21wcm92YW50IGVsIHBlZGHDpyAlcy4uLiIKKworIzogYXBwbHkuYzo0MDkzCisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgImZhbHRhIGxhIGluZm9ybWFjacOzIHNoYTEgbyDDqXMgaW7DunRpbCBwZXIgYWwgc3VibcOyZHVsICVzIgorCisjOiBhcHBseS5jOjQxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9kZSBjaGFuZ2UgZm9yICVzLCB3aGljaCBpcyBub3QgaW4gY3VycmVudCBIRUFEIgorbXNnc3RyICJjYW52aSBkZSBtb2RlIHBlciBhICVzLCBlbCBxdWFsIG5vIGVzdMOgIGVuIGxhIEhFQUQgYWN0dWFsIgorCisjOiBhcHBseS5jOjQxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgKCVzKS4iCittc2dzdHIgImZhbHRhIGluZm9ybWFjacOzIHNoYTEgbyDDqXMgaW7DunRpbCAoJXMpLiIKKworIzogYXBwbHkuYzo0MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhZGQgJXMgdG8gdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFmZWdpciAlcyBhIGwnw61uZGV4IHRlbXBvcmFsIgorCisjOiBhcHBseS5jOjQxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRlbXBvcmFyeSBpbmRleCB0byAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBsJ8OtbmRleCB0ZW1wb3JhbCBhICVzIgorCisjOiBhcHBseS5jOjQyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVsaW1pbmFyICVzIGRlIGwnw61uZGV4IgorCisjOiBhcHBseS5jOjQyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICJwZWRhw6cgbWFsbcOocyBwZXIgYWwgc3VibcOyZHVsICVzIgorCisjOiBhcHBseS5jOjQzMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZmVyIHN0YXQgYWwgZml0eGVyIG5vdmFtZW50IGNyZWF0IMKrJXPCuyIKKworIzogYXBwbHkuYzo0MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICIiCisibm8gcydoYSBwb2d1dCBjcmVhciB1biBtYWdhdHplbSBkZSByZWNvbHphbWVudCBwZXIgYWwgZml0eGVyIG5vdmFtZW50IGNyZWF0ICIKKyIlcyIKKworIzogYXBwbHkuYzo0MzE0IGFwcGx5LmM6NDQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhZmVnaXIgdW5hIGVudHJhZGEgZGUgY2F1IHBlciBhICVzIgorCisjOiBhcHBseS5jOjQzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIHRvICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgYSDCqyVzwrsiCisKKyM6IGFwcGx5LmM6NDM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAicydlc3TDoCB0YW5jYW50IGVsIGZpdHhlciDCqyVzwrsiCisKKyM6IGFwcGx5LmM6NDQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgZWwgZml0eGVyIMKrJXPCuyBtb2RlICVvIgorCisjOiBhcHBseS5jOjQ1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIKK21zZ3N0ciAiRWwgcGVkYcOnICVzIHMnaGEgYXBsaWNhdCBuZXRhbWVudC4iCisKKyM6IGFwcGx5LmM6NDUzNworbXNnaWQgImludGVybmFsIGVycm9yIgorbXNnc3RyICJlcnJvciBpbnRlcm4iCisKKyM6IGFwcGx5LmM6NDU0MAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gIlMnZXN0w6AgYXBsaWNhbnQgZWwgcGVkYcOnICUlcyBhbWIgJWQgcmVidWlnLi4uIgorbXNnc3RyWzFdICJTJ2VzdMOgIGFwbGljYW50IGVsIHBlZGHDpyAlJXMgYW1iICVkIHJlYnV0am9zLi4uIgorCisjOiBhcHBseS5jOjQ1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICJzJ2VzdMOgIHRydW5jYW50IGVsIG5vbSBkZWwgZml0eGVyIC5yZWogYSAlLipzLnJlaiIKKworIzogYXBwbHkuYzo0NTU5IGJ1aWx0aW4vZmV0Y2guYzo5MDEgYnVpbHRpbi9mZXRjaC5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXMiCittc2dzdHIgIm5vIGVzIHBvdCBvYnJpciAlcyIKKworIzogYXBwbHkuYzo0NTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIkVsIHRyb3MgIyVkIHMnaGEgYXBsaWNhdCBuZXRhbWVudC4iCisKKyM6IGFwcGx5LmM6NDU3NworIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIlMnaGEgcmVidXRqYXQgZWwgdHJvcyAjJWQuIgorCisjOiBhcHBseS5jOjQ2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCBwYXRjaCAnJXMnLiIKK21zZ3N0ciAiUydoYSBvbcOocyBlbCBwZWRhw6cgwqslc8K7LiIKKworIzogYXBwbHkuYzo0NzA0Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICJlbnRyYWRhIG5vIHJlY29uZWd1ZGEiCisKKyM6IGFwcGx5LmM6NDcyNAorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgZWwgZml0eGVyIGQnw61uZGV4IgorCisjOiBhcHBseS5jOjQ4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnOiAlcyIKK21zZ3N0ciAibm8gZXMgcG90IG9icmlyIGVsIHBlZGHDpyDCqyVzwrs6ICVzIgorCisjOiBhcHBseS5jOjQ5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAicydoYSBzaWxlbmNpYXQgJWQgZXJyb3IgZCdlc3BhaSBlbiBibGFuYyIKK21zZ3N0clsxXSAicydoYW4gc2lsZW5jaWF0ICVkIGVycm9ycyBkJ2VzcGFpIGVuIGJsYW5jIgorCisjOiBhcHBseS5jOjQ5MTQgYXBwbHkuYzo0OTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIGzDrW5pYSBhZmVnZWl4IGVycm9ycyBkJ2VzcGFpIGVuIGJsYW5jLiIKK21zZ3N0clsxXSAiJWQgbMOtbmllcyBhZmVnZWl4ZW4gZXJyb3JzIGQnZXNwYWkgZW4gYmxhbmMuIgorCisjOiBhcHBseS5jOjQ5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiIgorIlMnaGEgYXBsaWNhdCAlZCBsw61uaWEgZGVzcHLDqXMgZCdhcnJlZ2xhciBlbHMgZXJyb3JzIGQnZXNwYWkgZW4gYmxhbmMuIgorbXNnc3RyWzFdICIiCisiUydoYW4gYXBsaWNhdCAlZCBsw61uaWVzIGRlc3Byw6lzIGQnYXJyZWdsYXIgZWxzIGVycm9ycyBkJ2VzcGFpIGVuIGJsYW5jLiIKKworIzogYXBwbHkuYzo0OTM4IGJ1aWx0aW4vYWRkLmM6NTc5IGJ1aWx0aW4vbXYuYzozMDEgYnVpbHRpbi9ybS5jOjM5MAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBlc2NyaXVyZSB1biBmaXR4ZXIgZCfDrW5kZXggbm91IgorCisjOiBhcHBseS5jOjQ5NjYKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJubyBhcGxpcXVpcyBlbHMgY2FudmlzIHF1ZSBjb2luY2lkZWl4aW4gYW1iIGVsIGNhbcOtIGRvbmF0IgorCisjOiBhcHBseS5jOjQ5NjkKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJhcGxpY2EgZWxzIGNhbnZpcyBxdWUgY29pbmNpZGVpeGluIGFtYiBlbCBjYW3DrSBkb25hdCIKKworIzogYXBwbHkuYzo0OTcxIGJ1aWx0aW4vYW0uYzoyMjA2Cittc2dpZCAibnVtIgorbXNnc3RyICJuw7ptZXJvIgorCisjOiBhcHBseS5jOjQ5NzIKK21zZ2lkICJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIKK21zZ3N0ciAiIgorImVsaW1pbmEgPG5vbWJyZT4gYmFycmVzIG9ibGlxw7xlcyBpbmljaWFscyBkZWxzIGNhbWlucyBkZSBkaWZlcsOobmNpYSAiCisidHJhZGljaW9uYWxzIgorCisjOiBhcHBseS5jOjQ5NzUKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICJpZ25vcmEgYWZlZ2ltZW50cyBmZXRzIHBlbCBwZWRhw6ciCisKKyM6IGFwcGx5LmM6NDk3NworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiIgorImVuIGxsb2MgZCdhcGxpY2FyIGVsIHBlZGHDpywgZW1ldCBsZXMgZXN0YWTDrXN0aXF1ZXMgZGUgZGlmZXLDqG5jaWEgZGUgbCdlbnRyYWRhIgorCisjOiBhcHBseS5jOjQ5ODEKK21zZ2lkICJzaG93IG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIgorbXNnc3RyICJtb3N0cmEgZWwgbm9tYnJlIGRlIGzDrW5pZXMgYWZlZ2lkZXMgaSBzdXByaW1pZGVzIGVuIG5vdGFjacOzIGRlY2ltYWwiCisKKyM6IGFwcGx5LmM6NDk4MworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgImVuIGxsb2MgZCdhcGxpY2FyIGVsIHBlZGHDpywgZW1ldCB1biByZXN1bSBkZSBsJ2VudHJhZGEiCisKKyM6IGFwcGx5LmM6NDk4NQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUiCittc2dzdHIgImVuIGxsb2MgZCdhcGxpY2FyIGVsIHBlZGHDpywgdmVnZXMgc2kgZWwgcGVkYcOnIMOpcyBhcGxpY2FibGUiCisKKyM6IGFwcGx5LmM6NDk4NworbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAiYXNzZWd1cmEgcXVlIGVsIHBlZGHDpyBzaWd1aSBhcGxpY2FibGUgYSBsJ8OtbmRleCBhY3R1YWwiCisKKyM6IGFwcGx5LmM6NDk4OQorbXNnaWQgIm1hcmsgbmV3IGZpbGVzIHdpdGggYGdpdCBhZGQgLS1pbnRlbnQtdG8tYWRkYCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5OTEKK21zZ2lkICJhcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiYXBsaWNhIHVuIHBlZGHDpyBzZW5zZSB0b2NhciBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGFwcGx5LmM6NDk5MworbXNnaWQgImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiCittc2dzdHIgImFjY2VwdGEgdW4gcGVkYcOnIHF1ZSB0b3F1aSBmb3JhIGRlIGwnw6ByZWEgZGUgdHJlYmFsbCIKKworIzogYXBwbHkuYzo0OTk2Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgImFwbGljYSBlbCBwZWRhw6cgdGFtYsOpICh1c2V1IGFtYiAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorCisjOiBhcHBseS5jOjQ5OTgKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICJpbnRlbnRhIHVuYSBmdXNpw7MgZGUgdHJlcyB2aWVzIHNpIGVsIHBlZGHDpyBubyBzJ2FwbGljYSIKKworIzogYXBwbHkuYzo1MDAwCittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgImNvbnN0cnVlaXggdW4gw61uZGV4IHRlbXBvcmFsIGJhc2F0IGVuIGxhIGluZm9ybWFjacOzIGQnw61uZGV4IGluY3J1c3RhZGEiCisKKyM6IGFwcGx5LmM6NTAwMyBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTczIGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjQKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiZWxzIGNhbWlucyBzZSBzZXBhcmVuIGFtYiBlbCBjYXLDoGN0ZXIgTlVMIgorCisjOiBhcHBseS5jOjUwMDUKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgImFzc2VndXJhJ3QgcXVlIGFsbWVueXMgPG4+IGzDrW5pZXMgZGUgY29udGV4dCBjb2luY2lkZWl4aW4iCisKKyM6IGFwcGx5LmM6NTAwNiBidWlsdGluL2FtLmM6MjE4NSBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk4CisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMCBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzEwIGJ1aWx0aW4vcmViYXNlLmM6MTQ3NAorbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAiYWNjacOzIgorCisjOiBhcHBseS5jOjUwMDcKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAiIgorImRldGVjdGEgbGVzIGzDrW5pZXMgbm92ZXMgbyBtb2RpZmljYWRlcyBxdWUgdGluZ3VpbiBlcnJvcnMgZCdlc3BhaSBlbiBibGFuYyIKKworIzogYXBwbHkuYzo1MDEwIGFwcGx5LmM6NTAxMworbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgImlnbm9yYSBlbHMgY2FudmlzIGQnZXNwYWkgZW4gYmxhbmMgZW4gY2VyY2FyIGNvbnRleHQiCisKKyM6IGFwcGx5LmM6NTAxNgorbXNnaWQgImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIgorbXNnc3RyICJhcGxpY2EgZWwgcGVkYcOnIGFsIHJldsOpcyIKKworIzogYXBwbHkuYzo1MDE4Cittc2dpZCAiZG9uJ3QgZXhwZWN0IGF0IGxlYXN0IG9uZSBsaW5lIG9mIGNvbnRleHQiCittc2dzdHIgIm5vIGVzcGVyaXMgYWxtZW55cyB1bmEgbMOtbmlhIGRlIGNvbnRleHQiCisKKyM6IGFwcGx5LmM6NTAyMAorbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICJkZWl4YSBlbHMgdHJvc3NvcyByZWJ1dGphdHMgZW4gZml0eGVycyAqLnJlaiBjb3JyZXNwb25lbnRzIgorCisjOiBhcHBseS5jOjUwMjIKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAicGVybWV0IHRyb3Nzb3MgZW5jYXZhbGNhbnRzIgorCisjOiBhcHBseS5jOjUwMjMgYnVpbHRpbi9hZGQuYzozMDkgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMgorIzogYnVpbHRpbi9jb21taXQuYzoxMzU1IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk4IGJ1aWx0aW4vZnNjay5jOjc3NAorIzogYnVpbHRpbi9sb2cuYzoyMTY2IGJ1aWx0aW4vbXYuYzoxMjMgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICJzaWd1ZXMgZGV0YWxsYXQiCisKKyM6IGFwcGx5LmM6NTAyNQorbXNnaWQgInRvbGVyYXRlIGluY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgbmV3LWxpbmUgYXQgdGhlIGVuZCBvZiBmaWxlIgorbXNnc3RyICJ0b2xlcmEgdW5hIGzDrW5pYSBub3ZhIGluY29ycmVjdGFtZW50IGRldGVjdGFkYSBhbCBmaW5hbCBkZWwgZml0eGVyIgorCisjOiBhcHBseS5jOjUwMjgKK21zZ2lkICJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiCittc2dzdHIgIm5vIGNvbmZpw69zIGVuIGVscyByZWNvbXB0ZXMgZGUgbMOtbmlhIGVuIGxlcyBjYXDDp2FsZXJlcyBkZWxzIHRyb3Nzb3MiCisKKyM6IGFwcGx5LmM6NTAzMCBidWlsdGluL2FtLmM6MjE5NAorbXNnaWQgInJvb3QiCittc2dzdHIgImFycmVsIgorCisjOiBhcHBseS5jOjUwMzEKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICJhbnRlcG9zYSA8YXJyZWw+IGEgdG90cyBlbHMgbm9tcyBkZSBmaXR4ZXIiCisKKyM6IGFyY2hpdmUuYzoxNAorbXNnaWQgImdpdCBhcmNoaXZlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBhcmNoaXZlIFs8b3BjaW9ucz5dIDxhcmJyZT4gWzxjYW3DrT4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTUKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjE2Cittc2dpZCAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPGRpcMOyc2l0PiBbLS1leGVjIDxvcmRyZT5dIFs8b3BjaW9ucz5dIDxhcmJyZT4gIgorIls8Y2Ftw60+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE3Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPGRpcMOyc2l0PiBbLS1leGVjIDxvcmRyZT5dIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjM3MiBidWlsdGluL2FkZC5jOjE4MCBidWlsdGluL2FkZC5jOjU1NSBidWlsdGluL3JtLmM6Mjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiCittc2dzdHIgImwnZXNwZWNpZmljYWNpw7MgZGUgY2Ftw60gwqslc8K7IG5vIGhhIGNvaW5jaWRpdCBhbWIgY2FwIGZpdHhlciIKKworIzogYXJjaGl2ZS5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZjogJS4qcyIKK21zZ3N0ciAibm8gZXhpc3RlaXggbGEgcmVmZXLDqG5jaWE6ICUuKnMiCisKKyM6IGFyY2hpdmUuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICVzIgorbXNnc3RyICJubyDDqXMgdW4gbm9tIGQnb2JqZWN0ZSB2w6BsaWQ6ICVzIgorCisjOiBhcmNoaXZlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHRyZWUgb2JqZWN0OiAlcyIKK21zZ3N0ciAibm8gw6lzIHVuIG9iamVjdGUgZCdhcmJyZTogJXMiCisKKyM6IGFyY2hpdmUuYzo0MjYKK21zZ2lkICJjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVudHJhY2tlZCIKK21zZ3N0ciAibm8gZXMgc2VndWVpeCBlbCBkaXJlY3RvcmkgZGUgdHJlYmFsbCBhY3R1YWwiCisKKyM6IGFyY2hpdmUuYzo0NTcKK21zZ2lkICJmbXQiCittc2dzdHIgImZvcm1hdCIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICJmb3JtYXQgZCdhcnhpdSIKKworIzogYXJjaGl2ZS5jOjQ1OCBidWlsdGluL2xvZy5jOjE2NTMKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgInByZWZpeCIKKworIzogYXJjaGl2ZS5jOjQ1OQorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgImFudGVwb3NhIGVsIHByZWZpeCBhIGNhZGEgbm9tIGRlIGNhbcOtIGVuIGwnYXJ4aXUiCisKKyM6IGFyY2hpdmUuYzo0NjAgYnVpbHRpbi9ibGFtZS5jOjg2MSBidWlsdGluL2JsYW1lLmM6ODY1IGJ1aWx0aW4vYmxhbWUuYzo4NjYKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTcgYnVpbHRpbi9jb25maWcuYzoxMjkgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY0IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY4IGJ1aWx0aW4vZ3JlcC5jOjg5OQorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNSBidWlsdGluL2xzLWZpbGVzLmM6NTYwIGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjMKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTIgYnVpbHRpbi9ub3Rlcy5jOjU3OCBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworIzogcGFyc2Utb3B0aW9ucy5oOjE5MAorbXNnaWQgImZpbGUiCittc2dzdHIgImZpdHhlciIKKworIzogYXJjaGl2ZS5jOjQ2MSBidWlsdGluL2FyY2hpdmUuYzo5MAorbXNnaWQgIndyaXRlIHRoZSBhcmNoaXZlIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAiZXNjcml1IGwnYXJ4aXUgYSBhcXVlc3QgZml0eGVyIgorCisjOiBhcmNoaXZlLmM6NDYzCittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAibGxlZ2VpeCAuZ2l0YXR0cmlidXRlcyBlbiBlbCBkaXJlY3RvcmkgZGUgdHJlYmFsbCIKKworIzogYXJjaGl2ZS5jOjQ2NAorbXNnaWQgInJlcG9ydCBhcmNoaXZlZCBmaWxlcyBvbiBzdGRlcnIiCittc2dzdHIgImluZm9ybWEgZGUgZml0eGVycyBhcnhpdmF0cyBlbiBzdGRlcnIiCisKKyM6IGFyY2hpdmUuYzo0NjUKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICJub23DqXMgZW1tYWdhdHplbWEiCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgImNvbXByaW1laXggbcOpcyByw6BwaWRhbWVudCIKKworIzogYXJjaGl2ZS5jOjQ3NAorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAiY29tcHJpbWVpeCBtaWxsb3IiCisKKyM6IGFyY2hpdmUuYzo0NzcKK21zZ2lkICJsaXN0IHN1cHBvcnRlZCBhcmNoaXZlIGZvcm1hdHMiCittc2dzdHIgImxsaXN0YSBlbHMgZm9ybWF0cyBkJ2FyeGl1IGFkbWVzb3MiCisKKyM6IGFyY2hpdmUuYzo0NzkgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9jbG9uZS5jOjExMyBidWlsdGluL2Nsb25lLmM6MTE2CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5MSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4NAorbXNnaWQgInJlcG8iCittc2dzdHIgImRpcMOyc2l0IgorCisjOiBhcmNoaXZlLmM6NDgwIGJ1aWx0aW4vYXJjaGl2ZS5jOjkyCittc2dpZCAicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iCittc2dzdHIgInJlY3VwZXJhIGwnYXJ4aXUgZGVsIGRpcMOyc2l0IHJlbW90IDxkaXDDsnNpdD4iCisKKyM6IGFyY2hpdmUuYzo0ODEgYnVpbHRpbi9hcmNoaXZlLmM6OTMgYnVpbHRpbi9kaWZmdG9vbC5jOjcxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQ5OAorbXNnaWQgImNvbW1hbmQiCittc2dzdHIgIm9yZHJlIgorCisjOiBhcmNoaXZlLmM6NDgyIGJ1aWx0aW4vYXJjaGl2ZS5jOjk0Cittc2dpZCAicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIgorbXNnc3RyICJjYW3DrSBhIGwnb3JkcmUgZ2l0LXVwbG9hZC1hcmNoaXZlIHJlbW90YSIKKworIzogYXJjaGl2ZS5jOjQ4OQorbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICJPcGNpw7MgaW5lc3BlcmFkYSAtLXJlbW90ZSIKKworIzogYXJjaGl2ZS5jOjQ5MQorbXNnaWQgIk9wdGlvbiAtLWV4ZWMgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tcmVtb3RlIgorbXNnc3RyICJMJ29wY2nDsyAtLWV4ZWMgbm9tw6lzIGVzIHBvdCB1c2FyIGp1bnRhbWVudCBhbWIgLS1yZW1vdGUiCisKKyM6IGFyY2hpdmUuYzo0OTMKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLW91dHB1dCIKK21zZ3N0ciAiT3BjacOzIGluZXNwZXJhZGEgLS1vdXRwdXQiCisKKyM6IGFyY2hpdmUuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBhcmNoaXZlIGZvcm1hdCAnJXMnIgorbXNnc3RyICJGb3JtYXQgZCdhcnhpdSBkZXNjb25lZ3V0IMKrJXPCuyIKKworIzogYXJjaGl2ZS5jOjUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJBcmd1bWVudCBub3Qgc3VwcG9ydGVkIGZvciBmb3JtYXQgJyVzJzogLSVkIgorbXNnc3RyICJQYXLDoG1ldHJlIG5vIGFkbcOocyBwZXIgYWwgZm9ybWF0IMKrJXPCuzogLSVkIgorCisjOiBhcmNoaXZlLXRhci5jOjEyNSBhcmNoaXZlLXppcC5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyZWFtIGJsb2IgJXMiCittc2dzdHIgIm5vIGVzIHBvdCB0cmFuc21ldHJlIGVsIGJsb2IgJXMiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjY2IGFyY2hpdmUtemlwLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiCittc2dzdHIgIm1vZGUgZGUgZml0eGVyIG5vIGNvbXBhdGlibGU6IDAlbyAoU0hBMTogJXMpIgorCisjOiBhcmNoaXZlLXRhci5jOjI5MyBhcmNoaXZlLXppcC5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlcyIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciDCqyVzwrsiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnJXMnIGZpbHRlciIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBpbmljaWFyIGVsIGZpbHRyZSDCqyVzwrsiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY4Cittc2dpZCAidW5hYmxlIHRvIHJlZGlyZWN0IGRlc2NyaXB0b3IiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgcmVkaXJpZ2lyIGVsIGRlc2NyaXB0b3IiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsdGVyIHJlcG9ydGVkIGVycm9yIgorbXNnc3RyICLCqyVzwrsgZXJyb3IgcmVwb3J0YXQgcGVsIGZpbHRyZSIKKworIzogYXJjaGl2ZS16aXAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCBpcyBub3QgdmFsaWQgVVRGLTg6ICVzIgorbXNnc3RyICJlbCBjYW3DrSBubyDDqXMgdsOgbGlkIGVuIFVURi04OiAlcyIKKworIzogYXJjaGl2ZS16aXAuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCB0b28gbG9uZyAoJWQgY2hhcnMsIFNIQTE6ICVzKTogJXMiCittc2dzdHIgImVsIGNhbcOtIMOpcyBtYXNzYSBsbGFyZyAoJWQgY2Fyw6BjdGVycywgU0hBMTogJXMpOiAlcyIKKworIzogYXJjaGl2ZS16aXAuYzo0NzkgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICJlcnJvciBkZSBkZWZsYWNpw7MgKCVkKSIKKworIzogYXJjaGl2ZS16aXAuYzo2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZXN0YW1wIHRvbyBsYXJnZSBmb3IgdGhpcyBzeXN0ZW06ICU8UFJJdU1BWD4iCittc2dzdHIgIm1hcmNhIGRlIHRlbXBzIG1hc3NhIGdyYW4gcGVyIGEgYXF1ZXN0IHNpc3RlbWE6ICU8UFJJdU1BWD4iCisKKyM6IGF0dHIuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZSIKK21zZ3N0ciAiJS4qcyBubyDDqXMgdW4gbm9tIGQnYXRyaWJ1dCB2w6BsaWQiCisKKyM6IGF0dHIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbm90IGFsbG93ZWQ6ICVzOiVkIgorbXNnc3RyICIlcyBubyBlc3TDoCBwZXJtw6hzOiAlczolZCIKKworIzogYXR0ci5jOjQwOQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorIkVscyBwYXRyb25zIG5lZ2F0aXVzIHMnaWdub3JlbiBlbiBlbHMgYXRyaWJ1dHMgZGUgZ2l0XG4iCisiVXNldSAnXFwhJyBwZXIgZXhjbGFtYWNpw7MgY2FwZGF2YW50ZXJhIGxpdGVyYWwuIgorCisjOiBiaXNlY3QuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkbHkgcXVvdGVkIGNvbnRlbnQgaW4gZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAiQ29tZW50YXJpIGFtYiBjb21ldGVzIGVycsOybmllcyBlbiBlbCBmaXR4ZXIgwqslc8K7OiAlcyIKKworIzogYmlzZWN0LmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGNhbm5vdCBiaXNlY3QgbW9yZSFcbiIKK21zZ3N0ciAiTm8gcG9kZW0gYmlzZWNhciBtw6lzIVxuIgorCisjOiBiaXNlY3QuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgY29tbWl0IG5hbWUgJXMiCittc2dzdHIgIk5vIMOpcyB1biBub20gZGUgY29taXNzacOzIHbDoGxpZCAlcyIKKworIzogYmlzZWN0LmM6NzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBiYWQuXG4iCisiVGhpcyBtZWFucyB0aGUgYnVnIGhhcyBiZWVuIGZpeGVkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyJMYSBiYXNlIGRlIGZ1c2nDsyAlcyDDqXMgZXJyw7JuaWEuXG4iCisiQWl4w7Igdm9sIGRpciBxdWUgZWwgZGVmZWN0ZSBzJ2hhIGFycmVnbGF0IGVudHJlICVzIGkgWyVzXS5cbiIKKworIzogYmlzZWN0LmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBuZXcuXG4iCisiVGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyJMYSBiYXNlIGRlIGZ1c2nDsyAlcyDDqXMgbm92YS5cbiIKKyJMYSBwcm9waWV0YXQgcydoYSBjYW52aWF0IGVudHJlICVzIGkgWyVzXS5cbiIKKworIzogYmlzZWN0LmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyAlcy5cbiIKKyJUaGlzIG1lYW5zIHRoZSBmaXJzdCAnJXMnIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiTGEgYmFzZSBkZSBmdXNpw7MgJXMgw6lzICVzLlxuIgorIkFpeMOyIHZvbCBkaXIgcXVlIGxhIHByaW1lcmEgY29taXNzacOzIMKrJXPCuyDDqXMgZW50cmUgJXMgaSBbJXNdLlxuIgorCisjOiBiaXNlY3QuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNvbWUgJXMgcmV2cyBhcmUgbm90IGFuY2VzdG9ycyBvZiB0aGUgJXMgcmV2LlxuIgorImdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLlxuIgorIk1heWJlIHlvdSBtaXN0b29rICVzIGFuZCAlcyByZXZzP1xuIgorbXNnc3RyICIiCisiQWxndW5lcyByZXZpc2lvbnMgJXMgbm8gc8OzbiBlbHMgYXZhbnRwYXNzYXRzIGRlIGxhIHJldmlzacOzICVzLlxuIgorImdpdCBiaXNlY3Qgbm8gcG90IGZ1bmNpb25hciBjb3JyZWN0YW1lbnQgZW4gYXF1ZXN0IGNhcy5cbiIKKyJQb3RzZXIgaGV1IGNvbmbDs3MgbGVzIHJldmlzaW9ucyAlcyBpICVzP1xuIgorCisjOiBiaXNlY3QuYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBtZXJnZSBiYXNlIGJldHdlZW4gJXMgYW5kIFslc10gbXVzdCBiZSBza2lwcGVkLlxuIgorIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCAlcyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgJXMuXG4iCisiV2UgY29udGludWUgYW55d2F5LiIKK21zZ3N0ciAiIgorInMnaGEgZCdvbWV0cmUgbGEgYmFzZSBkZSBmdXNpw7MgZW50cmUgJXMgaSBbJXNdLlxuIgorIkxsYXZvcnMsIG5vIHBvZGVtIGVzdGFyIHNlZ3VycyBxdWUgbGEgcHJpbWVyYSBjb21pc3Npw7MgJXMgc2lndWkgZW50cmUgJXMgaSAiCisiJXMuXG4iCisiQ29udGludWVtIGRlIHRvdGVzIG1hbmVyZXMuIgorCisjOiBiaXNlY3QuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIKK21zZ3N0ciAiQmlzZWNhbnQ6IHMnaGEgZGUgcHJvdmFyIHVuYSBiYXNlIGRlIGZ1c2nDs1xuIgorCisjOiBiaXNlY3QuYzo4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSAlcyByZXZpc2lvbiBpcyBuZWVkZWQiCittc2dzdHIgImVzIG5lY2Vzc2l0YSB1bmEgcmV2aXNpw7MgJXMiCisKKyM6IGJpc2VjdC5jOjg4NCBidWlsdGluL25vdGVzLmM6MTc3IGJ1aWx0aW4vdGFnLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIGVsIGZpdHhlciDCqyVzwrsiCisKKyM6IGJpc2VjdC5jOjkyOCBidWlsdGluL21lcmdlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgZml0eGVyIMKrJXPCuyIKKworIzogYmlzZWN0LmM6OTU4Cittc2dpZCAicmVhZGluZyBiaXNlY3QgcmVmcyBmYWlsZWQiCittc2dzdHIgImxhIGxlY3R1cmEgZGUgbGVzIHJlZmVyw6huY2llcyBkZSBiaXNlY2Npw7MgaGEgZmFsbGF0IgorCisjOiBiaXNlY3QuYzo5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgd2FzIGJvdGggJXMgYW5kICVzXG4iCittc2dzdHIgIiVzIGVyYSBhbWJkw7NzICVzIGkgJXNcbiIKKworIzogYmlzZWN0LmM6OTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0ZXN0YWJsZSBjb21taXQgZm91bmQuXG4iCisiTWF5YmUgeW91IHN0YXJ0ZWQgd2l0aCBiYWQgcGF0aCBwYXJhbWV0ZXJzP1xuIgorbXNnc3RyICIiCisiTm8gcydoYSB0cm9iYXQgY2FwIGNvbWlzc2nDsyBjb21wcm92YWJsZS5cbiIKKyJQb3RzZXIgaGV1IGNvbWVuw6dhdCBhbWIgcGFyw6BtZXRyZXMgZGUgY2Ftw60gaW5jb3JyZWN0ZXM/XG4iCisKKyM6IGJpc2VjdC5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJvdWdobHkgJWQgc3RlcCkiCittc2dpZF9wbHVyYWwgIihyb3VnaGx5ICVkIHN0ZXBzKSIKK21zZ3N0clswXSAiKGFwcm94aW1hZGFtZW50ICVkIHBhcykiCittc2dzdHJbMV0gIihhcHJveGltYWRhbWVudCAlZCBwYXNzb3MpIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGxhc3QgJXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoICIocm91Z2hseSAlZAorIy4gc3RlcHMpIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBiaXNlY3QuYzoxMDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogJWQgcmV2aXNpb24gbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIKK21zZ2lkX3BsdXJhbCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIKK21zZ3N0clswXSAiQmlzZWNhbnQ6IG1hbmNhICVkIHJldmlzacOzIGEgcHJvdmFyIGRlc3Byw6lzIGQnYXF1ZXN0YSAlc1xuIgorbXNnc3RyWzFdICJCaXNlY2FudDogbWFucXVlbiAlZCByZXZpc2lvbnMgYSBwcm92YXIgZGVzcHLDqXMgZCdhcXVlc3RhICVzXG4iCisKKyM6IGJsYW1lLmM6MjcwMAorbXNnaWQgIi0tY29udGVudHMgYW5kIC0tcmV2ZXJzZSBkbyBub3QgYmxlbmQgd2VsbC4iCittc2dzdHIgIi0tY29udGVudHMgaSAtLXJldmVyc2Ugbm8gZnVuY2lvbmVuIGLDqSBqdW50ZXMuIgorCisjOiBibGFtZS5jOjI3MTQKK21zZ2lkICJjYW5ub3QgdXNlIC0tY29udGVudHMgd2l0aCBmaW5hbCBjb21taXQgb2JqZWN0IG5hbWUiCittc2dzdHIgIm5vIGVzIHBvdCB1c2FyIC0tY29udGVudHMgYW1iIGVsIG5vbSBkJ29iamVjdGUgZGUgbGEgY29taXNzacOzIGZpbmFsIgorCisjOiBibGFtZS5jOjI3MzUKK21zZ2lkICItLXJldmVyc2UgYW5kIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgc3BlY2lmaWVkIGxhdGVzdCBjb21taXQiCittc2dzdHIgIiIKKyItLXJldmVyc2UgaSAtLWZpcnN0LXBhcmVudC10b2dldGhlciByZXF1ZXJlaXhlbiB1bmEgw7psdGltYSBjb21pc3Npw7MgIgorImVzcGVjaWZpY2FkYSIKKworIzogYmxhbWUuYzoyNzQ0IGJ1bmRsZS5jOjE2NyByZWYtZmlsdGVyLmM6MjIwMyByZW1vdGUuYzoxOTQxIHNlcXVlbmNlci5jOjIwOTMKKyM6IHNlcXVlbmNlci5jOjQ0NjAgYnVpbHRpbi9jb21taXQuYzoxMDQwIGJ1aWx0aW4vbG9nLmM6Mzg4IGJ1aWx0aW4vbG9nLmM6OTkxCisjOiBidWlsdGluL2xvZy5jOjE1MjAgYnVpbHRpbi9sb2cuYzoxOTI1IGJ1aWx0aW4vbG9nLmM6MjIxNSBidWlsdGluL21lcmdlLmM6NDExCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMjggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTQzCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTkyCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgImxhIGNvbmZpZ3VyYWNpw7MgZGVsIHBhc3NlaWcgcGVyIHJldmlzaW9ucyBoYSBmYWxsYXQiCisKKyM6IGJsYW1lLmM6Mjc2MgorbXNnaWQgIiIKKyItLXJldmVyc2UgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSByYW5nZSBhbG9uZyBmaXJzdC1wYXJlbnQgY2hhaW4iCittc2dzdHIgIiIKKyItLXJldmVyc2UgLS1maXJzdC1wYXJlbnQganVudHMgcmVxdWVyZWl4ZW4gdW4gcmFuZyBkZSBsYSBjYWRlbmEgZGUgbWFyZXMgIgorInByaW1lcmVzIgorCisjOiBibGFtZS5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBwYXRoICVzIGluICVzIgorbXNnc3RyICJubyBoaSBoYSB0YWwgY2Ftw60gJXMgZW4gJXMiCisKKyM6IGJsYW1lLmM6Mjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIGVsIGJsb2IgJXMgcGVyIGFsIGNhbcOtICVzIgorCisjOiBicmFuY2guYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQWZ0ZXIgZml4aW5nIHRoZSBlcnJvciBjYXVzZSB5b3UgbWF5IHRyeSB0byBmaXggdXBcbiIKKyJ0aGUgcmVtb3RlIHRyYWNraW5nIGluZm9ybWF0aW9uIGJ5IGludm9raW5nXG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiLiIKK21zZ3N0ciAiIgorIlxuIgorIkRlc3Byw6lzIGRlIGNvcnJlZ2lyIGxhIGNhdXNhIGRlIGwnZXJyb3IsIHBvZGV1XG4iCisiaW50ZW50YXIgY29ycmVnaXIgbGEgaW5mb3JtYWNpw7MgZGUgc2VndWltZW50IHJlbW90XG4iCisiaW52b2NhbnQgXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiLiIKKworIzogYnJhbmNoLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIgorbXNnc3RyICJObyBzJ2VzdMOgIGVzdGFibGludCBsYSBicmFuY2EgJXMgY29tIGEgbGEgc2V2YSBwcsOycGlhIGZvbnQuIgorCisjOiBicmFuY2guYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJMYSBicmFuY2Egwqslc8K7IGVzdMOgIGNvbmZpZ3VyYWRhIHBlciBhIHNlZ3VpciBsYSBicmFuY2EgcmVtb3RhIMKrJXPCuyBkZSDCqyVzwrsgIgorImZlbnQgwqtyZWJhc2XCuy4iCisKKyM6IGJyYW5jaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jYSDCqyVzwrsgZXN0w6AgY29uZmlndXJhZGEgcGVyIGEgc2VndWlyIGxhIGJyYW5jYSByZW1vdGEgwqslc8K7IGRlIMKrJXPCuy4iCisKKyM6IGJyYW5jaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJMYSBicmFuY2Egwqslc8K7IGVzdMOgIGNvbmZpZ3VyYWRhIHBlciBhIHNlZ3VpciBsYSBicmFuY2EgbG9jYWwgwqslc8K7IGZlbnQgIgorIsKrcmViYXNlwrsuIgorCisjOiBicmFuY2guYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycuIgorbXNnc3RyICJMYSBicmFuY2Egwqslc8K7IGVzdMOgIGNvbmZpZ3VyYWRhIHBlciBhIHNlZ3VpciBsYSBicmFuY2EgbG9jYWwgwqslc8K7LiIKKworIzogYnJhbmNoLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiTGEgYnJhbmNhIMKrJXPCuyBlc3TDoCBjb25maWd1cmFkYSBwZXIgYSBzZWd1aXIgbGEgcmVmZXLDqG5jaWEgcmVtb3RhIMKrJXPCuyBmZW50ICIKKyLCq3JlYmFzZcK7LiIKKworIzogYnJhbmNoLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycuIgorbXNnc3RyICIiCisiTGEgYnJhbmNhIMKrJXPCuyBlc3TDoCBjb25maWd1cmFkYSBwZXIgYSBzZWd1aXIgbGEgcmVmZXLDqG5jaWEgcmVtb3RhIMKrJXPCuy4iCisKKyM6IGJyYW5jaC5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiTGEgYnJhbmNhIMKrJXPCuyBlc3TDoCBjb25maWd1cmFkYSBwZXIgYSBzZWd1aXIgbGEgcmVmZXLDqG5jaWEgbG9jYWwgwqslc8K7IGZlbnQgIgorIsKrcmViYXNlwrsuIgorCisjOiBicmFuY2guYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAnJXMnLiIKK21zZ3N0ciAiTGEgYnJhbmNhIMKrJXPCuyBlc3TDoCBjb25maWd1cmFkYSBwZXIgYSBzZWd1aXIgbGEgcmVmZXLDqG5jaWEgbG9jYWwgwqslc8K7LiIKKworIzogYnJhbmNoLmM6MTE5Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIHVwc3RyZWFtIGJyYW5jaCBjb25maWd1cmF0aW9uIgorbXNnc3RyICJObyBlcyBwb3QgZXNjcml1cmUgbGEgY29uZmlndXJhY2nDsyBkZSBsYSBicmFuY2EgZm9udCIKKworIzogYnJhbmNoLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCB0cmFja2luZzogYW1iaWd1b3VzIGluZm9ybWF0aW9uIGZvciByZWYgJXMiCittc2dzdHIgIk5vIHNlZ3VpbnQ6IGluZm9ybWFjacOzIGFtYmlndWEgcGVyIGEgbGEgcmVmZXLDqG5jaWEgJXMiCisKKyM6IGJyYW5jaC5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiwqslc8K7IG5vIMOpcyB1biBub20gZGUgYnJhbmNhIHbDoGxpZC4iCisKKyM6IGJyYW5jaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiVW5hIGJyYW5jYSBhbWIgbm9tIMKrJXPCuyBqYSBleGlzdGVpeC4iCisKKyM6IGJyYW5jaC5jOjIxMworbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTm8gZXMgcG90IGFjdHVhbGl0emFyIGxhIGJyYW5jYSBhY3R1YWwgYSBsYSBmb3LDp2EuIgorCisjOiBicmFuY2guYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iCittc2dzdHIgIiIKKyJObyBlcyBwb3QgY29uZmlndXJhciBsYSBpbmZvcm1hY2nDsyBkZSBzZWd1aW1lbnQ7IGVsIHB1bnQgaW5pY2lhbCDCqyVzwrsgbm8gw6lzICIKKyJ1bmEgYnJhbmNhLiIKKworIzogYnJhbmNoLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSByZXF1ZXN0ZWQgdXBzdHJlYW0gYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImxhIGJyYW5jYSBmb250IGRlbWFuYWRhIMKrJXPCuyBubyBleGlzdGVpeCIKKworIzogYnJhbmNoLmM6MjM3Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgb24gYmFzaW5nIHlvdXIgd29yayBvbiBhbiB1cHN0cmVhbVxuIgorImJyYW5jaCB0aGF0IGFscmVhZHkgZXhpc3RzIGF0IHRoZSByZW1vdGUsIHlvdSBtYXkgbmVlZCB0b1xuIgorInJ1biBcImdpdCBmZXRjaFwiIHRvIHJldHJpZXZlIGl0LlxuIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVzaCBvdXQgYSBuZXcgbG9jYWwgYnJhbmNoIHRoYXRcbiIKKyJ3aWxsIHRyYWNrIGl0cyByZW1vdGUgY291bnRlcnBhcnQsIHlvdSBtYXkgd2FudCB0byB1c2VcbiIKKyJcImdpdCBwdXNoIC11XCIgdG8gc2V0IHRoZSB1cHN0cmVhbSBjb25maWcgYXMgeW91IHB1c2guIgorbXNnc3RyICIiCisiXG4iCisiU2kgdGVuaXUgcGVuc2F0IGJhc2FyIGVsIHZvc3RyZSB0cmViYWxsIGVuIHVuYSBicmFuY2FcbiIKKyJmb250IHF1ZSBqYSBleGlzdGVpeCBhbCByZW1vdCwgcG90IHNlciBxdWUgbmVjZXNzaXRldVxuIgorImV4ZWN1dGFyIMKrZ2l0IGZldGNowrsgcGVyIGEgb2J0ZW5pci1sYS5cbiIKKyJcbiIKKyJTaSB0ZW5pdSBwZW5zYXQgcHVqYXIgdW5hIGJyYW5jYSBsb2NhbCBub3ZhIHF1ZSBzZWd1aXLDoFxuIgorImxhIHNldmEgY29udHJhcGFydCByZW1vdGEsIHBvdCBzZXIgcXVlIHZ1bGd1ZXUgdXNhclxuIgorIsKrZ2l0IHB1c2ggLXXCuyBwZXIgYSBlc3RhYmxpciBsYSBjb25maWd1cmFjacOzIGZvbnRcbiIKKyJtZW50cmUgcHVnZXUuIgorCisjOiBicmFuY2guYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJObyDDqXMgdW4gbm9tIGQnb2JqZWN0ZSB2w6BsaWQ6IMKrJXPCuy4iCisKKyM6IGJyYW5jaC5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJOb20gZCdvYmplY3RlIGFtYmlndTogwqslc8K7LiIKKworIzogYnJhbmNoLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIk5vIMOpcyB1biBwdW50IGRlIHJhbWlmaWNhY2nDsyB2w6BsaWQ6IMKrJXPCuy4iCisKKyM6IGJyYW5jaC5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiwqslc8K7IGphIHMnaGEgYWdhZmF0IGEgwqslc8K7IgorCisjOiBicmFuY2guYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBvZiB3b3JraW5nIHRyZWUgJXMgaXMgbm90IHVwZGF0ZWQiCittc2dzdHIgIkhFQUQgZGUgbCdhcmJyZSBkZSB0cmViYWxsICVzIG5vIGVzdMOgIGFjdHVhbGl0emF0IgorCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICLCqyVzwrsgbm8gc2VtYmxhIHVuIGZpdHhlciBkZSBmYXJjZWxsIHYyIgorCisjOiBidW5kbGUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgImNhcMOnYWxlcmEgbm8gcmVjb25lZ3VkYTogJXMlcyAoJWQpIgorCisjOiBidW5kbGUuYzo5MCByZXJlcmUuYzo0ODAgcmVyZXJlLmM6NjkwIHNlcXVlbmNlci5jOjIzNDQgc2VxdWVuY2VyLmM6MzEwOAorIzogYnVpbHRpbi9jb21taXQuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciDCqyVzwrsiCisKKyM6IGJ1bmRsZS5jOjE0MworbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICJBbCBkaXDDsnNpdCBsaSBtYW5xdWVuIGFxdWVzdGVzIGNvbWlzc2lvbnMgcHJlcmVxdWVyaWRlczoiCisKKyM6IGJ1bmRsZS5jOjE0NgorbXNnaWQgIm5lZWQgYSByZXBvc2l0b3J5IHRvIHZlcmlmeSBhIGJ1bmRsZSIKK21zZ3N0ciAiY2FsIHVuIGRpcMOyc2l0IHBlciB2ZXJpZmljYXIgdW4gZmFyY2VsbCIKKworIzogYnVuZGxlLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJFbCBmYXJjZWxsIGNvbnTDqSBhcXVlc3RhIHJlZmVyw6huY2lhOiIKK21zZ3N0clsxXSAiRWwgZmFyY2VsbCBjb250w6kgYXF1ZXN0ZXMgJWQgcmVmZXLDqG5jaWVzOiIKKworIzogYnVuZGxlLmM6MjA0Cittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIkVsIGZhcmNlbGwgcmVnaXN0cmEgdW5hIGhpc3TDsnJpYSBjb21wbGV0YS4iCisKKyM6IGJ1bmRsZS5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiRWwgZmFyY2VsbCByZXF1ZXJlaXggYXF1ZXN0YSByZWZlcsOobmNpYToiCittc2dzdHJbMV0gIkVsIGZhcmNlbGwgcmVxdWVyZWl4IGFxdWVzdGVzICVkIHJlZmVyw6huY2llczoiCisKKyM6IGJ1bmRsZS5jOjI3MworbXNnaWQgInVuYWJsZSB0byBkdXAgYnVuZGxlIGRlc2NyaXB0b3IiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZHVwbGljYXIgZWwgZGVzY3JpcHRvciBkZWwgZmFyY2VsbCIKKworIzogYnVuZGxlLmM6MjgwCittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBleGVjdXRhciBlbCBwYWNrLW9iamVjdHMiCisKKyM6IGJ1bmRsZS5jOjI5MQorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICJFbCBwYWNrLW9iamVjdHMgcydoYSBtb3J0IgorCisjOiBidW5kbGUuYzozMzMKK21zZ2lkICJyZXYtbGlzdCBkaWVkIgorbXNnc3RyICJFbCByZXYtbGlzdCBzJ2hhIG1vcnQiCisKKyM6IGJ1bmRsZS5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIKK21zZ3N0ciAibGVzIG9wY2lvbnMgZGUgbGEgbGxpc3RhIGRlIHJldmlzaW9ucyBleGNsb3VlbiBsYSByZWZlcsOobmNpYSDCqyVzwrsiCisKKyM6IGJ1bmRsZS5jOjQ2MSBidWlsdGluL2xvZy5jOjIwMyBidWlsdGluL2xvZy5jOjE4MTQgYnVpbHRpbi9zaG9ydGxvZy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJwYXLDoG1ldHJlIG5vIHJlY29uZWd1dDogJXMiCisKKyM6IGJ1bmRsZS5jOjQ2OQorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICJTJ2VzdMOgIHJlZnVzYW50IGNyZWFyIHVuIGZhcmNlbGwgYnVpdC4iCisKKyM6IGJ1bmRsZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBjcmVhciDCqyVzwrsiCisKKyM6IGJ1bmRsZS5jOjUwNAorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAiTCdpbmRleC1wYWNrIHMnaGEgbW9ydCIKKworIzogY29sb3IuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciB2YWx1ZTogJS4qcyIKK21zZ3N0ciAidmFsb3IgZGUgY29sb3Igbm8gdsOgbGlkOiAlLipzIgorCisjOiBjb21taXQuYzo1MSBzZXF1ZW5jZXIuYzoyODExIGJ1aWx0aW4vYW0uYzozNTQgYnVpbHRpbi9hbS5jOjM5OAorIzogYnVpbHRpbi9hbS5jOjEzNjYgYnVpbHRpbi9hbS5jOjIwMDkgYnVpbHRpbi9yZXBsYWNlLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgJXMiCisKKyM6IGNvbW1pdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzIG5vIMOpcyB1bmEgY29taXNzacOzISIKKworIzogY29tbWl0LmM6MTkzCittc2dpZCAiIgorIlN1cHBvcnQgZm9yIDxHSVRfRElSPi9pbmZvL2dyYWZ0cyBpcyBkZXByZWNhdGVkXG4iCisiYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBHaXQgdmVyc2lvbi5cbiIKKyJcbiIKKyJQbGVhc2UgdXNlIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIlxuIgorInRvIGNvbnZlcnQgdGhlIGdyYWZ0cyBpbnRvIHJlcGxhY2UgcmVmcy5cbiIKKyJcbiIKKyJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC5jOjExNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSwgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiTGEgY29taXNzacOzICVzIHTDqSB1bmEgc2lnbmF0dXJhIEdQRyBubyBmaWFibGUsIHN1cG9zYWRhbWVudCBkZSAlcy4iCisKKyM6IGNvbW1pdC5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIkxhIGNvbWlzc2nDsyAlcyB0w6kgdW5hIHNpZ25hdHVyYSBHUEcgaW5jb3JyZWN0YSBzdXBvc2FkYW1lbnQgZGUgJXMuIgorCisjOiBjb21taXQuYzoxMTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZS4iCittc2dzdHIgIkxhIGNvbWlzc2nDsyAlcyBubyB0w6kgc2lnbmF0dXJhIEdQRy4iCisKKyM6IGNvbW1pdC5jOjExNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSBieSAlc1xuIgorbXNnc3RyICJMYSBjb21pc3Npw7MgJXMgdMOpIHVuYSBzaWduYXR1cmEgR1BHIGJvbmEgZGUgJXNcbiIKKworIzogY29tbWl0LmM6MTQxNQorbXNnaWQgIiIKKyJXYXJuaW5nOiBjb21taXQgbWVzc2FnZSBkaWQgbm90IGNvbmZvcm0gdG8gVVRGLTguXG4iCisiWW91IG1heSB3YW50IHRvIGFtZW5kIGl0IGFmdGVyIGZpeGluZyB0aGUgbWVzc2FnZSwgb3Igc2V0IHRoZSBjb25maWdcbiIKKyJ2YXJpYWJsZSBpMThuLmNvbW1pdGVuY29kaW5nIHRvIHRoZSBlbmNvZGluZyB5b3VyIHByb2plY3QgdXNlcy5cbiIKK21zZ3N0ciAiIgorIkFkdmVydMOobmNpYTogZWwgbWlzc2F0Z2UgZGUgY29taXNzacOzIG5vIMOpcyBjb21wYXRpYmxlIGFtYiBVVEYtOC5cbiIKKyJQb3RzZXIgdm9sZXUgZXNtZW5hci1sbyBkZXNwcsOpcyBkZSBjb3JyZWdpciBlbCBtaXNzYXRnZSwgbyBlc3RhYmxpclxuIgorImxhIHZhcmlhYmxlIGRlIGNvbmZpZ3VyYWNpw7MgaTE4bi5jb21taXRlbmNvZGluZyBhIGxhIGNvZGlmaWNhY2nDsyBxdWVcbiIKKyJ1c2kgZWwgdm9zdHJlIHByb2plY3RlLlxuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzAKK21zZ2lkICJjb21taXQtZ3JhcGggZmlsZSBpcyB0b28gc21hbGwiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBzaWduYXR1cmUgJVggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlICVYIgorbXNnc3RyICIiCisibGEgc2lnbmF0dXJhIGRlbCBncmFmIGRlIGNvbWlzc2lvbnMgJVggbm8gY29pbmNpZGVpeCBhbWIgbGEgc2lnbmF0dXJhICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAibGEgdmVyc2nDsyBkZWwgZ3JhZiBkZSBjb21pc3Npb25zICVYIG5vIGNvaW5jaWRlaXggYW1iIGxhIHZlcnNpw7MgJVgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgIiIKKyJsYSB2ZXJzacOzIGRlbCBoYXNoIGRlbCBncmFmIGRlIGNvbWlzc2lvbnMgJVggbm8gY29pbmNpZGVpeCBhbWIgbGEgdmVyc2nDsyAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MjMyCittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGxvb2t1cCB0YWJsZSBlbnRyeSBtaXNzaW5nOyBmaWxlIG1heSBiZSBpbmNvbXBsZXRlIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaW1wcm9wZXIgY2h1bmsgb2Zmc2V0ICUwOHglMDh4IgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggY2h1bmsgaWQgJTA4eCBhcHBlYXJzIG11bHRpcGxlIHRpbWVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM1MAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgbm8gYmFzZSBncmFwaHMgY2h1bmsiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MzYwCittc2dpZCAiY29tbWl0LWdyYXBoIGNoYWluIGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJsYSBjYWRlbmEgZGVsIGdyYWYgZGUgY29taXNzaW9ucyBubyBjb2luY2lkZWl4IgorCisjOiBjb21taXQtZ3JhcGguYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQtZ3JhcGggY2hhaW46IGxpbmUgJyVzJyBub3QgYSBoYXNoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjQzMworbXNnaWQgInVuYWJsZSB0byBmaW5kIGFsbCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIm5vIGVzIHBvZGVuIHRyb2JhciB0b3RzIGVscyBmaXR4ZXJzIGRlbCBncmFmIGRlIGNvbWlzc2lvbnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU2NCBjb21taXQtZ3JhcGguYzo2MjQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBwb3NpdGlvbi4gY29tbWl0LWdyYXBoIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICIiCisicG9zaWNpw7MgZGUgbGEgY29taXNzacOzIG5vIHbDoGxpZGEuIFByb2JhYmxlbWVudCBlbCBncmFmIGRlIGNvbWlzc2lvbnMgZXN0w6AgIgorIm1hbG3DqHMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgdHJvYmFyIGxhIGNvbWlzc2nDsyAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6ODU4IGJ1aWx0aW4vYW0uYzoxMjg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGxhIGNvbWlzc2nDsyAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTAxNyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCB0eXBlIG9mIG9iamVjdCAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnRlbmlyIGVsIHRpcHVzIGRlIGwnb2JqZWN0ZTogJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNDkKK21zZ2lkICJMb2FkaW5nIGtub3duIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJTJ2VzdGFuIGNhcnJlZ2FudCBjb21pc3Npb25zIGNvbmVndWRlcyBhbCBncmFmIGRlIGNvbWlzc2lvbnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNjYKK21zZ2lkICJFeHBhbmRpbmcgcmVhY2hhYmxlIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJTJ2VzdGFuIGV4cGFuZGludCBsZXMgY29taXNzaW9ucyBhYmFzdGFibGVzIGFsIGdyYWYgZGUgY29taXNzaW9ucyIKKworIzogY29tbWl0LWdyYXBoLmM6MTA4NQorbXNnaWQgIkNsZWFyaW5nIGNvbW1pdCBtYXJrcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIlMnZXN0YW4gbmV0ZWphbnQgbGVzIG1hcnF1ZXMgZGUgY29taXNzaW9ucyBhbCBncmFmIGRlIGNvbWlzc2lvbnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExMDQKK21zZ2lkICJDb21wdXRpbmcgY29tbWl0IGdyYXBoIGdlbmVyYXRpb24gbnVtYmVycyIKK21zZ3N0ciAiUydlc3RhbiBjYWxjdWxhbnQgZWxzIG5vbWJyZXMgZGUgZ2VuZXJhY2nDsyBkZWwgZ3JhZiBkZSBjb21pc3Npb25zIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2siCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2tzIgorbXNnc3RyWzBdICJTJ2VzdGFuIGNlcmNhbnQgbGVzIGNvbWlzc2lvbnMgcGVsIGdyYWYgZGUgY29taXNzaW9ucyBlbiAlZCBwYXF1ZXQiCittc2dzdHJbMV0gIlMnZXN0YW4gY2VyY2FudCBsZXMgY29taXNzaW9ucyBwZWwgZ3JhZiBkZSBjb21pc3Npb25zIGVuICVkIHBhcXVldHMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgYWRkaW5nIHBhY2sgJXMiCittc2dzdHIgImVycm9yIGVuIGFmZWdpciBwYXF1ZXQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyBpbmRleCBmb3IgJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2JyaXIgbCfDrW5kZXggcGVyIMKrJXPCuyIKKworIzogY29tbWl0LWdyYXBoLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBmcm9tICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWZzIgorbXNnc3RyWzBdICIiCisiUydlc3RhbiBjZXJjYW50IGxlcyBjb21pc3Npb25zIHBlbCBncmFmIGRlIGNvbWlzc2lvbnMgZGVzIGRlICVkIHJlZmVyw6huY2lhIgorbXNnc3RyWzFdICIiCisiUydlc3RhbiBjZXJjYW50IGxlcyBjb21pc3Npb25zIHBlbCBncmFmIGRlIGNvbWlzc2lvbnMgZGVzIGRlICVkIHJlZmVyw6huY2llcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBvYmplY3QgaWQ6ICVzIgorbXNnc3RyICJpZGVudGlmaWNhZG9yIGQnb2JqZWN0ZSBkZSBjb21pc3Npw7Mgbm8gdsOgbGlkOiAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTI1NQorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGFtb25nIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICIiCisiUydlc3RhbiBjZXJjYW50IGxlcyBjb21pc3Npb25zIHBlbCBncmFmIGRlIGNvbWlzc2lvbnMgZW50cmUgZWxzIG9iamVjdGVzICIKKyJlbXBhcXVldGF0cyIKKworIzogY29tbWl0LWdyYXBoLmM6MTI3MAorbXNnaWQgIkNvdW50aW5nIGRpc3RpbmN0IGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJTJ2VzdGFuIGNvbXB0YW50IGxlcyBjb21pc3Npb25zIGRpZmVyZW50cyBhbCBncmFmIGRlIGNvbWlzc2lvbnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzMDAKK21zZ2lkICJGaW5kaW5nIGV4dHJhIGVkZ2VzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiUydlc3RhbiBjZXJjYW50IGxlcyB2b3JlcyBhZGRpY2lvbmFscyBhbCBncmFmIGRlIGNvbWlzc2lvbnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNDYKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29ycmVjdCBudW1iZXIgb2YgYmFzZSBncmFwaCBpZHMiCittc2dzdHIgIiIKKyJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVzY3JpdXJlIGVsIG5vbWJyZSBjb3JyZWN0ZSBkJ2lkcyBiYXNlIGRlbCBncmFmIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzc5IG1pZHguYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIgorbXNnc3RyICJubyBzJ2hhbiBwb2d1dCBjcmVhciBlbHMgZGlyZWN0b3JpcyBpbmljaWFscyBkZSDCqyVzwrsiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzOTEgYnVpbHRpbi9pbmRleC1wYWNrLmM6MzA2IGJ1aWx0aW4vcmVwYWNrLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciDCqyVzwrsiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3MiCittc2dpZF9wbHVyYWwgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzZXMiCittc2dzdHJbMF0gIlMnZXN0w6AgZXNjcml2aW50IGVsIGdyYWYgZGUgY29taXNzaW9ucyBlbiAlZCBwYXMiCittc2dzdHJbMV0gIlMnZXN0w6AgZXNjcml2aW50IGVsIGdyYWYgZGUgY29taXNzaW9ucyBlbiAlZCBwYXNzb3MiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0OTIKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBjb21taXQtZ3JhcGggY2hhaW4gZmlsZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciBlbCBmaXR4ZXIgZCdlbmNhZGVuYW1lbnQgZGVsIGdyYWYgZGUgY29taXNzaW9ucyIKKworIzogY29tbWl0LWdyYXBoLmM6MTUwNAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgYmFzZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjYW52aWFyIGVsIG5vbSBkZWwgZml0eGVyIGJhc2UgZGVsIGdyYWYgZGUgY29taXNzaW9ucyIKKworIzogY29tbWl0LWdyYXBoLmM6MTUyNAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgdGVtcG9yYXJ5IGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICIiCisibm8gcydoYSBwb2d1dCBjYW52aWFyIGVsIG5vbSBkZWwgZml0eGVyIHRlbXBvcmFsIGRlbCBncmFmIGRlIGNvbWlzc2lvbnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2MzUKK21zZ2lkICJTY2FubmluZyBtZXJnZWQgY29tbWl0cyIKK21zZ3N0ciAiUydlc3RhbiBlc2NhbmVqYW50IGxlcyBjb21pc3Npb25zIGZ1c2lvbmFkZXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkdXBsaWNhdGUgY29tbWl0IGlkICVzIgorbXNnc3RyICJpZCBkZSBjb21pc3Npw7MgZHVwbGljYXQgJXMgbm8gZXNwZXJhdCIKKworIzogY29tbWl0LWdyYXBoLmM6MTY3MAorbXNnaWQgIk1lcmdpbmcgY29tbWl0LWdyYXBoIgorbXNnc3RyICJTJ2VzdMOgIGZ1c2lvbmFudCBlbCBncmFmIGRlIGNvbWlzc2lvbnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIGNvbW1pdCBncmFwaCBmb3JtYXQgY2Fubm90IHdyaXRlICVkIGNvbW1pdHMiCittc2dzdHIgImVsIGZvcm1hdCBkZWwgZ3JhZiBkZSBjb21pc3Npb25zIG5vIHBvdCBlc2NyaXVyZSAlZCBjb21pc3Npb25zIgorCisjOiBjb21taXQtZ3JhcGguYzoxODcxCittc2dpZCAidG9vIG1hbnkgY29tbWl0cyB0byB3cml0ZSBncmFwaCIKK21zZ3N0ciAibWFzc2EgY29taXNzaW9ucyBwZXIgZXNjcml1cmUgdW4gZ3JhZiIKKworIzogY29tbWl0LWdyYXBoLmM6MTk2MQorbXNnaWQgInRoZSBjb21taXQtZ3JhcGggZmlsZSBoYXMgaW5jb3JyZWN0IGNoZWNrc3VtIGFuZCBpcyBsaWtlbHkgY29ycnVwdCIKK21zZ3N0ciAiIgorImVsIGZpdHhlciBjb21taXQtZ3JhcGggKGdyYWYgZGUgY29taXNzaW9ucykgdMOpIHVuYSBzdW1hIGRlIHZlcmlmaWNhY2nDsyAiCisiaW5jb3JyZWN0YSBpIHByb2JhYmxlbWVudCDDqXMgY29ycnVwdGUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgT0lEIG9yZGVyOiAlcyB0aGVuICVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5ODEgY29tbWl0LWdyYXBoLmM6MTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBmYW5vdXQgdmFsdWU6IGZhbm91dFslZF0gPSAldSAhPSAldSIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBjb21taXQgJXMgZnJvbSBjb21taXQtZ3JhcGgiCittc2dzdHIgIiIKKyJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGFuYWxpdHphciBsYSBjb21pc3Npw7MgJXMgZGVsIGdyYWYgZGUgY29taXNzaW9ucyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAwNgorbXNnaWQgIlZlcmlmeWluZyBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiUydlc3RhbiB2ZXJpZmljYW50IGxlcyBjb21pc3Npb25zIGFsIGdyYWYgZGUgY29taXNzaW9ucyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gb2JqZWN0IGRhdGFiYXNlIGZvciBjb21taXQtZ3JhcGgiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyNworIywgYy1mb3JtYXQKK21zZ2lkICJyb290IHRyZWUgT0lEIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICVzICE9ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBsaXN0IGZvciBjb21taXQgJXMgaXMgdG9vIGxvbmciCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MjA0NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGZvciAlcyBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIHRlcm1pbmF0ZXMgZWFybHkiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MjA2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY29tbWl0LWdyYXBoIGhhcyBnZW5lcmF0aW9uIG51bWJlciB6ZXJvIGZvciBjb21taXQgJXMsIGJ1dCBub24temVybyBlbHNld2hlcmUiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MjA2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY29tbWl0LWdyYXBoIGhhcyBub24temVybyBnZW5lcmF0aW9uIG51bWJlciBmb3IgY29tbWl0ICVzLCBidXQgemVybyBlbHNld2hlcmUiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MjA4MworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggZ2VuZXJhdGlvbiBmb3IgY29tbWl0ICVzIGlzICV1ICE9ICV1IgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0IGRhdGUgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJTxQUkl1TUFYPiAhPSAlPFBSSXVNQVg+IgorbXNnc3RyICIiCisKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA2IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAibWVtw7JyaWEgZXNnb3RhZGEiCisKKyM6IGNvbmZpZy5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhjZWVkZWQgbWF4aW11bSBpbmNsdWRlIGRlcHRoICglZCkgd2hpbGUgaW5jbHVkaW5nXG4iCisiXHQlc1xuIgorImZyb21cbiIKKyJcdCVzXG4iCisiVGhpcyBtaWdodCBiZSBkdWUgdG8gY2lyY3VsYXIgaW5jbHVkZXMuIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhwYW5kIGluY2x1ZGUgcGF0aCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGV4cGFuZGlyIGVsIGNhbcOtIGQnaW5jbHVzacOzIMKrJXPCuyIKKworIzogY29uZmlnLmM6MTUxCittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICJsZXMgaW5jbHVzaW9ucyBkZSBjb25maWd1cmFjacOzIHJlbGF0aXZlcyBoYW4gZGUgdmVuaXIgZGUgZml0eGVycyIKKworIzogY29uZmlnLmM6MTk3Cittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGUgY29uZGl0aW9uYWxzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICIiCisiZWxzIGNvbmRpY2lvbmFscyBkJ2luY2x1c2nDsyBkZSBjb25maWd1cmFjacOzIHJlbGF0aXVzIGhhbiBkZSB2ZW5pciBkZSBmaXR4ZXJzIgorCisjOiBjb25maWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlcyIKK21zZ3N0ciAibGEgY2xhdSBubyBjb250w6kgdW5hIHNlY2Npw7M6IMKrJXPCuyIKKworIzogY29uZmlnLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImtleSBkb2VzIG5vdCBjb250YWluIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJsYSBjbGF1IG5vIGNvbnTDqSB1biBub20gZGUgdmFyaWFibGU6IMKrJXPCuyIKKworIzogY29uZmlnLmM6NDA2IHNlcXVlbmNlci5jOjI1MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICJjbGF1IG5vIHbDoGxpZGE6ICVzIgorCisjOiBjb25maWcuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgKG5ld2xpbmUpOiAlcyIKK21zZ3N0ciAiY2xhdSBubyB2w6BsaWRhIChsw61uZWEgbm92YSk6ICVzIgorCisjOiBjb25maWcuYzo0NDggY29uZmlnLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGNvbmZpZyBwYXJhbWV0ZXI6ICVzIgorbXNnc3RyICJwYXLDoG1ldHJlIGRlIGNvbmZpZ3VyYWNpw7MgZXJyb25pOiAlcyIKKworIzogY29uZmlnLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGZvcm1hdCBpbiAlcyIKK21zZ3N0ciAiZm9ybWF0IGVycm9uaSBhICVzIgorCisjOiBjb25maWcuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGJsb2IgJXMiCittc2dzdHIgImzDrW5pYSBkZSBjb25maWd1cmFjacOzICVkIGVycsOybmlhIGVuIGVsIGJsb2IgJXMiCisKKyM6IGNvbmZpZy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gZmlsZSAlcyIKK21zZ3N0ciAibMOtbmlhIGRlIGNvbmZpZ3VyYWNpw7MgJWQgZXJyw7JuaWEgZW4gZWwgZml0eGVyICVzIgorCisjOiBjb25maWcuYzo4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsw61uaWEgZGUgY29uZmlndXJhY2nDsyAlZCBlcnLDsm5pYSBlbiBsJ2VudHJhZGEgZXN0w6BuZGFyZCIKKworIzogY29uZmlnLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdWJtb2R1bGUtYmxvYiAlcyIKK21zZ3N0ciAibMOtbmlhIGRlIGNvbmZpZ3VyYWNpw7MgJWQgZXJyw7JuaWEgZW4gZWwgYmxvYiBkZSBzdWJtw7JkdWwgJXMiCisKKyM6IGNvbmZpZy5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gY29tbWFuZCBsaW5lICVzIgorbXNnc3RyICJsw61uaWEgZGUgY29uZmlndXJhY2nDsyAlZCBlcnLDsm5pYSBlbiBsYSBsw61uaWEgZCdvcmRyZXMgJXMiCisKKyM6IGNvbmZpZy5jOjg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gJXMiCittc2dzdHIgImzDrW5pYSBkZSBjb25maWd1cmFjacOzICVkIGVycsOybmlhIGVuICVzIgorCisjOiBjb25maWcuYzo5NzgKK21zZ2lkICJvdXQgb2YgcmFuZ2UiCittc2dzdHIgImZvcmEgZGUgcmFuZyIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAiaW52YWxpZCB1bml0IgorbXNnc3RyICJ1bml0YXQgbm8gdsOgbGlkYSIKKworIzogY29uZmlnLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAidmFsb3IgZGUgY29uZmlndXJhY2nDsyBudW3DqHJpYyBlcnJvbmkgwqslc8K7IHBlciDCqyVzwrs6ICVzIgorCisjOiBjb25maWcuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gYmxvYiAlczogJXMiCittc2dzdHIgInZhbG9yIGRlIGNvbmZpZ3VyYWNpw7MgbnVtw6hyaWMgZXJyb25pIMKrJXPCuyBwZXIgwqslc8K7IGVuIGVsIGJsb2IgJXM6ICVzIgorCisjOiBjb25maWcuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIgorbXNnc3RyICJ2YWxvciBkZSBjb25maWd1cmFjacOzIG51bcOocmljIMKrJXPCuyBlcnJvbmkgcGVyIMKrJXPCuyBlbiBlbCBmaXR4ZXIgJXM6ICVzIgorCisjOiBjb25maWcuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN0YW5kYXJkIGlucHV0OiAlcyIKK21zZ3N0ciAiIgorInZhbG9yIGRlIGNvbmZpZ3VyYWNpw7MgbnVtw6hyaWMgwqslc8K7IGVycm9uaSBwZXIgwqslc8K7IGVuIGwnZW50cmFkYSBlc3TDoG5kYXJkOiAlcyIKKworIzogY29uZmlnLmM6MTAwNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdWJtb2R1bGUtYmxvYiAlczogJXMiCittc2dzdHIgIiIKKyJ2YWxvciBkZSBjb25maWd1cmFjacOzIG51bcOocmljIMKrJXPCuyBlcnJvbmknIHBlciDCqyVzwrsgZW4gZWwgYmxvYiBkZSBzdWJtw7JkdWwgIgorIiVzOiAlcyIKKworIzogY29uZmlnLmM6MTAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBjb21tYW5kIGxpbmUgJXM6ICVzIgorbXNnc3RyICIiCisidmFsb3IgZGUgY29uZmlndXJhY2nDsyBudW3DqHJpYyDCqyVzwrsgZXJyb25pIHBlciDCqyVzwrsgZW4gbGEgbMOtbmlhIGQnb3JkcmVzICVzOiAiCisiJXMiCisKKyM6IGNvbmZpZy5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXM6ICVzIgorbXNnc3RyICJ2YWxvciBkZSBjb25maWd1cmFjacOzIG51bcOocmljIGluY29ycmVjdGUgwqslc8K7IHBlciDCqyVzwrsgZW4gJXM6ICVzIgorCisjOiBjb25maWcuYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleHBhbmQgdXNlciBkaXIgaW46ICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXhwYW5kaXIgZWwgZGlyZWN0b3JpIGQndXN1YXJpIGVuOiDCqyVzwrsiCisKKyM6IGNvbmZpZy5jOjExMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmb3IgJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIsKrJXPCuyBwZXIgYSDCqyVzwrsgbm8gw6lzIHVuYSBtYXJjYSBkZSB0ZW1wcyB2w6BsaWRhIgorCisjOiBjb25maWcuYzoxMjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYnJldiBsZW5ndGggb3V0IG9mIHJhbmdlOiAlZCIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxMjIyIGNvbmZpZy5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIm5pdmVsbCBkZSBjb21wcmVzc2nDsyBkZSB6bGliIGluY29ycmVjdGUgJWQiCisKKyM6IGNvbmZpZy5jOjEzMjUKK21zZ2lkICJjb3JlLmNvbW1lbnRDaGFyIHNob3VsZCBvbmx5IGJlIG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiCittc2dzdHIgIm1vZGUgZGUgY3JlYWNpw7MgZCdvYmplY3RlIG5vIHbDoGxpZDogJXMiCisKKyM6IGNvbmZpZy5jOjE0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAidmFsb3Igbm8gdsOgbGlkIHBlciBhICVzIgorCisjOiBjb25maWcuYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJ2YWxvciBubyB2w6BsaWQgcGVyIGEgJXM6ICVzIgorCisjOiBjb25maWcuYzoxNDU3Cittc2dpZCAibXVzdCBiZSBvbmUgb2Ygbm90aGluZywgbWF0Y2hpbmcsIHNpbXBsZSwgdXBzdHJlYW0gb3IgY3VycmVudCIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNTE4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjayBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAibml2ZWxsIGRlIGNvbXByZXNzacOzIGRlIHBhcXVldCAlZCBFcnJvbmkiCisKKyM6IGNvbmZpZy5jOjE2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvYWQgY29uZmlnIGJsb2Igb2JqZWN0ICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY2FycmVnYXIgbCdvYmplY3RlIGJsb2IgZGUgY29uZmlndXJhY2nDsyDCqyVzwrsiCisKKyM6IGNvbmZpZy5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBibG9iIgorbXNnc3RyICJsYSByZWZlcsOobmNpYSDCqyVzwrsgbm8gYXNzZW55YWxhIGEgdW4gYmxvYiIKKworIzogY29uZmlnLmM6MTY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBjb25maWcgYmxvYiAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIGVsIGJsb2IgZGUgY29uZmlndXJhY2nDszogwqslc8K7IgorCisjOiBjb25maWcuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAlcyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhbmFsaXR6YXIgJXMiCisKKyM6IGNvbmZpZy5jOjE3NDUKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbGEgY29uZmlndXJhY2nDsyBkZSBsYSBsw61uaWEgZCdvcmRyZXMiCisKKyM6IGNvbmZpZy5jOjIwOTYKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgInVuIGVycm9yIGRlc2NvbmVndXQgaGEgb2NvcnJlZ3V0IGVuIGxsZWdpciBlbHMgZml0eGVycyBkZSBjb25maWd1cmFjacOzIgorCisjOiBjb25maWcuYzoyMjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgJXM6ICclcyciCittc2dzdHIgIiVzIG5vIHbDoGxpZDogwqslc8K7IgorCisjOiBjb25maWcuYzoyMzExCisjLCBjLWZvcm1hdAorbXNnaWQgInNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSB2YWx1ZSAnJWQnIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCIKK21zZ3N0ciAidmFsb3IgwqslZMK7IGEgc3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIGhhIGQnZXN0YXIgZW50cmUgMCBpIDEwMCIKKworIzogY29uZmlnLmM6MjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyVzJyBmcm9tIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIMKrJXPCuyBkZSBsYSBjb25maWd1cmFjacOzIGRlIGxhIGzDrW5pYSBkJ29yZHJlcyIKKworIzogY29uZmlnLmM6MjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIHZhcmlhYmxlICclcycgaW4gZmlsZSAnJXMnIGF0IGxpbmUgJWQiCittc2dzdHIgInZhcmlhYmxlIGRlIGNvbmZpZ3VyYWNpw7Mgwqslc8K7IGVycsOybmlhIGVuIGVsIGZpdHhlciDCqyVzwrsgYSBsYSBsw61uaWEgJWQiCisKKyM6IGNvbmZpZy5jOjI0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWUgJyVzJyIKK21zZ3N0ciAibm9tIGRlIHNlY2Npw7Mgbm8gdsOgbGlkIMKrJXPCuyIKKworIzogY29uZmlnLmM6MjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbXVsdGlwbGUgdmFsdWVzIgorbXNnc3RyICIlcyB0w6kgbcO6bHRpcGxlcyB2YWxvcnMiCisKKyM6IGNvbmZpZy5jOjI1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIG5ldyBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgIm5vIGVzIHBvdCBlc2NyaXVyZSB1biBub3UgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MgJXMiCisKKyM6IGNvbmZpZy5jOjI3NTMgY29uZmlnLmM6MzA3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBibG9jYXIgZWwgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MgJXMiCisKKyM6IGNvbmZpZy5jOjI3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyAlcyIKK21zZ3N0ciAicydlc3TDoCBvYnJpbnQgJXMiCisKKyM6IGNvbmZpZy5jOjI3OTkgYnVpbHRpbi9jb25maWcuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAicGF0csOzIG5vIHbDoGxpZDogJXMiCisKKyM6IGNvbmZpZy5jOjI4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAiZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7Mgbm8gdsOgbGlkICVzIgorCisjOiBjb25maWcuYzoyODM3IGNvbmZpZy5jOjMwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnN0YXQgb24gJXMgZmFpbGVkIgorbXNnc3RyICJoYSBmYWxsYXQgwqtmc3RhdMK7IGEgJXMiCisKKyM6IGNvbmZpZy5jOjI4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1tYXAgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBmZXIgwqttbWFwwrsgwqslc8K7IgorCisjOiBjb25maWcuYzoyODU3IGNvbmZpZy5jOjMwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2htb2Qgb24gJXMgZmFpbGVkIgorbXNnc3RyICJoYSBmYWxsYXQgY2htb2QgYSAlcyIKKworIzogY29uZmlnLmM6Mjk0MiBjb25maWcuYzozMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBlbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyDCqyVzwrsiCisKKyM6IGNvbmZpZy5jOjI5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIHRvICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXN0YWJsaXIgwqslc8K7IGEgwqslc8K7IgorCisjOiBjb25maWcuYzoyOTc4IGJ1aWx0aW4vcmVtb3RlLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1bnNldCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGRlc2Fzc2lnbmFyIMKrJXPCuyIKKworIzogY29uZmlnLmM6MzA2OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZTogJXMiCittc2dzdHIgIm5vbSBkZSBzZWNjacOzIG5vIHbDoGxpZGE6ICVzIgorCisjOiBjb25maWcuYzozMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgdmFsdWUgZm9yICclcyciCittc2dzdHIgImZhbHRhIGVsIHZhbG9yIHBlciDCqyVzwrsiCisKKyM6IGNvbm5lY3QuYzo2MQorbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdXBvbiBpbml0aWFsIGNvbnRhY3QiCittc2dzdHIgImVsIGNvc3RhdCByZW1vdCBoYSBwZW5qYXQgZW4gZWwgbW9tZW50IGRlIGNvbnRhY3RlIGluaWNpYWwiCisKKyM6IGNvbm5lY3QuYzo2MworbXNnaWQgIiIKKyJDb3VsZCBub3QgcmVhZCBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LlxuIgorIlxuIgorIlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzIHJpZ2h0c1xuIgorImFuZCB0aGUgcmVwb3NpdG9yeSBleGlzdHMuIgorbXNnc3RyICIiCisiTm8gcydoYSBwb2d1dCBsbGVnaXIgZGVsIGRpcMOyc2l0IHJlbW90LlxuIgorIlxuIgorIkFzc2VndXJldS12b3MgcXVlIHRpbmd1ZXUgZWxzIHBlcm1pc29zXG4iCisiZCdhY2PDqXMgY29ycmVjdGVzIGkgcXVlIGVsIGRpcMOyc2l0IGV4aXN0ZWl4aS4iCisKKyM6IGNvbm5lY3QuYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0ICclcyciCittc2dzdHIgImVsIHNlcnZpZG9yIG5vIMOpcyBjb21wYXRpYmxlIGFtYiDCqyVzwrsiCisKKyM6IGNvbm5lY3QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBmZWF0dXJlICclcyciCittc2dzdHIgImVsIHNlcnZpZG9yIG5vIMOpcyBjb21wYXRpYmxlIGFtYiBsYSBjYXJhY3RlcsOtc3RpY2Egwqslc8K7IgorCisjOiBjb25uZWN0LmM6MTE0Cittc2dpZCAiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgY2FwYWJpbGl0aWVzIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgY2FwYWJpbGl0aWVzIGFmdGVyIGZpcnN0IGxpbmUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MjUyCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgY2FwYWJpbGl0aWVzXnt9IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYWxsb3cgc2hhLTEsIGdvdCAnJXMnIgorbXNnc3RyICIiCisicydoYSBwcm9kdcOvdCB1biBlcnJvciBkZSBwcm90b2NvbDogcydlc3BlcmF2YSBzaGFsbG93IHNoYS0xLCBzJ2hhIHJlYnV0IMKrJXPCuyIKKworIzogY29ubmVjdC5jOjI3NQorbXNnaWQgInJlcG9zaXRvcnkgb24gdGhlIG90aGVyIGVuZCBjYW5ub3QgYmUgc2hhbGxvdyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MzEzCittc2dpZCAiaW52YWxpZCBwYWNrZXQiCittc2dzdHIgInBhcXVldCBubyB2w6BsaWQiCisKKyM6IGNvbm5lY3QuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBkZSBwcm90b2NvbDogbm8gcydlc3BlcmF2YSDCqyVzwrsiCisKKyM6IGNvbm5lY3QuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBscy1yZWZzIHJlc3BvbnNlOiAlcyIKK21zZ3N0ciAicmVzcG9zdGEgZGUgbHMtcmVmcyBubyB2w6BsaWRhOiAlcyIKKworIzogY29ubmVjdC5jOjQ0NQorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIHJlZiBsaXN0aW5nIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgJyVzJyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJlbCBwcm90b2NvbCDCqyVzwrsgbm8gw6lzIGNvbXBhdGlibGUiCisKKyM6IGNvbm5lY3QuYzo1OTUKK21zZ2lkICJ1bmFibGUgdG8gc2V0IFNPX0tFRVBBTElWRSBvbiBzb2NrZXQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXN0YWJsaXIgU09fS0VFUEFMSVZFIGFsIHPDsmNvbCIKKworIzogY29ubmVjdC5jOjYzNSBjb25uZWN0LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkxvb2tpbmcgdXAgJXMgLi4uICIKK21zZ3N0ciAiUydlc3TDoCBjZXJjYW50ICVzLi4uIgorCisjOiBjb25uZWN0LmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHRyb2JhciAlcyAocG9ydCAlcykgKCVzKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiTG9va2luZyB1cCAlcyAuLi4gIgorIzogY29ubmVjdC5jOjY0MyBjb25uZWN0LmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkb25lLlxuIgorIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCittc2dzdHIgIiIKKyJmZXQuXG4iCisiUydlc3TDoCBjb25uZWN0YW50IGEgJXMgKHBvcnQgJXMpIC4uLiAiCisKKyM6IGNvbm5lY3QuYzo2NjUgY29ubmVjdC5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIGNvbm5lY3QgdG8gJXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJubyBzJ2hhIHBvZ3V0IGNvbm5lY3RhciBhICVzOlxuIgorIiVzIgorCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgorIzogY29ubmVjdC5jOjY3MSBjb25uZWN0LmM6NzQ4Cittc2dpZCAiZG9uZS4iCittc2dzdHIgImZldC4iCisKKyM6IGNvbm5lY3QuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCB0cm9iYXIgJXMgKCVzKSIKKworIzogY29ubmVjdC5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHBvcnQgJXMiCittc2dzdHIgInBvcnQgZGVzY29uZWd1dCAlcyIKKworIzogY29ubmVjdC5jOjg0NSBjb25uZWN0LmM6MTE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIGhvc3RuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAicydoYSBibG9xdWVqYXQgZWwgbm9tIGVzdHJhbnkgZCdhbWZpdHJpw7Mgwqslc8K7IgorCisjOiBjb25uZWN0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcG9ydCAnJXMnIGJsb2NrZWQiCittc2dzdHIgInMnaGEgYmxvcXVlamF0IGVsIHBvcnQgZXN0cmFueSDCqyVzwrsiCisKKyM6IGNvbm5lY3QuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXJ0IHByb3h5ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGluaWNpYXIgc2Vydmlkb3IgaW50ZXJtZWRpYXJpIMKrJXPCuyIKKworIzogY29ubmVjdC5jOjkyOAorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkOyBzZWUgJ2dpdCBoZWxwIHB1bGwnIGZvciB2YWxpZCB1cmwgc3ludGF4IgorbXNnc3RyICIiCisibm8gcydoYSBlc3BlY2lmaWNhdCB1biBjYW3DrTsgdmVnZXUgwqtnaXQgaGVscCBwdWxswrsgcGVyIGxhIHNpbnRheGkgdsOgbGlkYSBwZXIgIgorIlVSTCIKKworIzogY29ubmVjdC5jOjExMjMKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IC00IgorbXNnc3RyICJsYSB2YXJpYW50IMKrc2ltcGxlwrsgZCdzc2ggbm8gw6lzIGNvbXBhdGlibGUgYW1iIC00IgorCisjOiBjb25uZWN0LmM6MTEzNQorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiCittc2dzdHIgImxhIHZhcmlhbnQgwqtzaW1wbGXCuyBkJ3NzaCBubyDDqXMgY29tcGF0aWJsZSBhbWIgLTYiCisKKyM6IGNvbm5lY3QuYzoxMTUyCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIHBvcnQiCittc2dzdHIgImxhIHZhcmlhbnQgwqtzaW1wbGXCuyBkJ3NzaCBubyBwZXJtZXQgZGVmaW5pciBlbCBwb3J0IgorCisjOiBjb25uZWN0LmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBhdGhuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAicydoYSBibG9xdWVqYXQgZWwgbm9tIGRlIGZpdHhlciBlc3RyYW55IMKrJXPCuyIKKworIzogY29ubmVjdC5jOjEzMTEKK21zZ2lkICJ1bmFibGUgdG8gZm9yayIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBiaWZ1cmNhciIKKworIzogY29ubmVjdGVkLmM6ODkgYnVpbHRpbi9mc2NrLmM6MjA4IGJ1aWx0aW4vcHJ1bmUuYzo0MworbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAiUydlc3TDoCBjb21wcm92YW50IGxhIGNvbm5lY3Rpdml0YXQiCisKKyM6IGNvbm5lY3RlZC5jOjEwMQorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZXhlY3V0YXIgJ2dpdCByZXYtbGlzdCciCisKKyM6IGNvbm5lY3RlZC5jOjEyMQorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdCIKK21zZ3N0ciAiZXNjcmlwdHVyYSBmYWxsYWRhIGFsIHJldi1saXN0IgorCisjOiBjb25uZWN0ZWQuYzoxMjgKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbiIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiB0YW5jYXIgbCdzdGRpbiBkZWwgcmV2LWxpc3QiCisKKyM6IGNvbnZlcnQuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBjcmxmX2FjdGlvbiAlZCIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNSTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMiCittc2dzdHIgIkNSTEYgZXMgcmVlbXBsYcOnw6AgcGVyIExGIGVuICVzIgorCisjOiBjb252ZXJ0LmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDUkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMuXG4iCisiVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIkNSTEYgc2Vyw6AgcmVlbXBsYcOnYXQgcGVyIExGIGVuICVzLlxuIgorIkVsIGZpdHhlciB0aW5kcsOgIGVscyBzZXVzIHRlcm1pbmFkb3JzIGRlIGzDrW5pYSBvcmlnaW5hbHMgZW4gZWwgdm9zdHJlICIKKyJkaXJlY3RvcmkgZGUgdHJlYmFsbCIKKworIzogY29udmVydC5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIgorbXNnc3RyICJMRiBlcyByZWVtcGxhw6fDoCBwZXIgTEYgZW4gJXMiCisKKyM6IGNvbnZlcnQuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiTEYgc2Vyw6AgcmVlbXBsYcOnYXQgcGVyIENSTEYgZW4gJXMuXG4iCisiRWwgZml0eGVyIHRpbmRyw6AgZWxzIHNldXMgdGVybWluYWRvcnMgZGUgbMOtbmlhIG9yaWdpbmFscyBlbiBlbCB2b3N0cmUgIgorImRpcmVjdG9yaSBkZSB0cmViYWxsIgorCisjOiBjb252ZXJ0LmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyBwcm9oaWJpdGVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lLipzIGFzICIKKyJ3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHJlcXVpcmVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGlzIG1pc3NpbmcgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSVzQkUgb3IgVVRGLSIKKyIlc0xFIChkZXBlbmRpbmcgb24gdGhlIGJ5dGUgb3JkZXIpIGFzIHdvcmtpbmctdHJlZS1lbmNvZGluZy4iCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjQxOSBjb252ZXJ0LmM6NDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBlbmNvZGUgJyVzJyBmcm9tICVzIHRvICVzIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNvZGlmaWNhciDCqyVzwrsgZGVzIGRlICVzIGEgJXMiCisKKyM6IGNvbnZlcnQuYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW5jb2RpbmcgJyVzJyBmcm9tICVzIHRvICVzIGFuZCBiYWNrIGlzIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiY29kaWZpY2FyIMKrJXPCuyBkZXMgZGUgJXMgYSAlcyBpIGNhcCBlbnJlcmUgbm8gw6lzIGVsIG1hdGVpeCIKKworIzogY29udmVydC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayB0byBydW4gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBiaWZ1cmNhciBwZXIgYSBleGVjdXRhciBlbCBmaWx0cmUgZXh0ZXJuIMKrJXPCuyIKKworIzogY29udmVydC5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmVlZCB0aGUgaW5wdXQgdG8gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBhbGltZW50YXIgbCdlbnRyYWRhIGFsIGZpbHRyZSBleHRlcm4gwqslc8K7IgorCisjOiBjb252ZXJ0LmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCAlZCIKK21zZ3N0ciAiZWwgZmlsdHJlIGV4dGVybiDCqyVzwrsgaGEgZmFsbGF0ICVkIgorCisjOiBjb252ZXJ0LmM6NzMwIGNvbnZlcnQuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBmcm9tIGV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibGEgbGVjdHVyYSBkZWwgZmlsdHJlIGV4dGVybiDCqyVzwrsgaGEgZmFsbGF0IgorCisjOiBjb252ZXJ0LmM6NzM2IGNvbnZlcnQuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICJlbCBmaWx0cmUgZXh0ZXJuIMKrJXPCuyBoYSBmYWxsYXQiCisKKyM6IGNvbnZlcnQuYzo4MzkKK21zZ2lkICJ1bmV4cGVjdGVkIGZpbHRlciB0eXBlIgorbXNnc3RyICJ0aXB1cyBkZSBmaWx0cmUgaW5lc3BlcmF0IgorCisjOiBjb252ZXJ0LmM6ODUwCittc2dpZCAicGF0aCBuYW1lIHRvbyBsb25nIGZvciBleHRlcm5hbCBmaWx0ZXIiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXh0ZXJuYWwgZmlsdGVyICclcycgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGFsdGhvdWdoIG5vdCBhbGwgcGF0aHMgaGF2ZSAiCisiYmVlbiBmaWx0ZXJlZCIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MTIyMworbXNnaWQgInRydWUvZmFsc2UgYXJlIG5vIHZhbGlkIHdvcmtpbmctdHJlZS1lbmNvZGluZ3MiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjE0MTEgY29udmVydC5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiJXM6IGVsIGZpbHRyZSBkZSBuZXRlamF0IMKrJXPCuyBoYSBmYWxsYXQiCisKKyM6IGNvbnZlcnQuYzoxNDg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogc211ZGdlIGZpbHRlciAlcyBmYWlsZWQiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gYWN0dWFsaXR6YXIgZWxzIGZpdHhlcnMiCisKKyM6IGRhdGUuYzoxMzgKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICJlbiBlbCBmdXR1ciIKKworIzogZGF0ZS5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gImZhICU8UFJJdU1BWD4gc2Vnb24iCittc2dzdHJbMV0gImZhICU8UFJJdU1BWD4gc2Vnb25zIgorCisjOiBkYXRlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbWludXRlIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiZmEgJTxQUkl1TUFYPiBtaW51dCIKK21zZ3N0clsxXSAiZmEgJTxQUkl1TUFYPiBtaW51dHMiCisKKyM6IGRhdGUuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBob3VycyBhZ28iCittc2dzdHJbMF0gImZhICU8UFJJdU1BWD4gaG9yYSIKK21zZ3N0clsxXSAiZmEgJTxQUkl1TUFYPiBob3JlcyIKKworIzogZGF0ZS5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gZGF5cyBhZ28iCittc2dzdHJbMF0gImZhICU8UFJJdU1BWD4gZGlhIgorbXNnc3RyWzFdICJmYSAlPFBSSXVNQVg+IGRpZXMiCisKKyM6IGRhdGUuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB3ZWVrcyBhZ28iCittc2dzdHJbMF0gImZhICU8UFJJdU1BWD4gc2V0bWFuYSIKK21zZ3N0clsxXSAiZmEgJTxQUkl1TUFYPiBzZXRtYW5lcyIKKworIzogZGF0ZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICJmYSAlPFBSSXVNQVg+IG1lcyIKK21zZ3N0clsxXSAiZmEgJTxQUkl1TUFYPiBtZXNvcyIKKworIzogZGF0ZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIiCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMiCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gYW55IgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IGFueXMiCisKKyMuIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiCisjOiBkYXRlLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiZmEgJXMgaSAlPFBSSXVNQVg+IG1lcyIKK21zZ3N0clsxXSAiZmEgJXMgaSAlPFBSSXVNQVg+IG1lc29zIgorCisjOiBkYXRlLmM6MTk3IGRhdGUuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyBhZ28iCittc2dzdHJbMF0gImZhICU8UFJJdU1BWD4gYW55IgorbXNnc3RyWzFdICJmYSAlPFBSSXVNQVg+IGFueXMiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyNzIKK21zZ2lkICJQcm9wYWdhdGluZyBpc2xhbmQgbWFya3MiCittc2dzdHIgIlMnZXN0YW4gcHJvcGFnYW50IGxlcyBtYXJxdWVzIGQnaWxsYSIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdHJlZSBvYmplY3QgJXMiCittc2dzdHIgIm9iamVjdGUgZCdhcmJyZSBtYWxtw6hzICVzIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIGlzbGFuZCByZWdleCBmb3IgJyVzJzogJXMiCittc2dzdHIgIiIKKyJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNhcnJlZ2FyIGwnZXhwcmVzc2nDsyByZWd1bGFyIGRlIGwnaWxsYSBwZXIgwqslc8K7OiAlcyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpc2xhbmQgcmVnZXggZnJvbSBjb25maWcgaGFzIHRvbyBtYW55IGNhcHR1cmUgZ3JvdXBzIChtYXg9JWQpIgorbXNnc3RyICIiCisibCdleHByZXNzacOzIHJlZ3VsYXIgZGUgbCdpbGxhIGRlcyBkZSBsYSBjb25maWd1cmFjacOzIHTDqSBtYXNzYSBncnVwcyBkZSAiCisiY2FwdHVyYSAobcOgeD0lZCkiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2VkICVkIGlzbGFuZHMsIGRvbmUuXG4iCittc2dzdHIgIk1hcmNhZGVzICVkIGlsbGVzLCBmZXQuXG4iCisKKyM6IGRpZmZjb3JlLW9yZGVyLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbGxlZ2lyIGVsIGZpdHhlciBkJ29yZHJlcyDCqyVzwrsiCisKKyM6IGRpZmZjb3JlLXJlbmFtZS5jOjU0MworbXNnaWQgIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICJTJ2VzdMOgIHJlYWxpdHphbnQgdW5hIGRldGVjY2nDsyBpbmV4YWN0YSBkZSBjYW52aXMgZGUgbm9tIgorCisjOiBkaWZmLW5vLWluZGV4LmM6MjM4Cittc2dpZCAiZ2l0IGRpZmYgLS1uby1pbmRleCBbPG9wdGlvbnM+XSA8cGF0aD4gPHBhdGg+IgorbXNnc3RyICJnaXQgZGlmZiAtLW5vLWluZGV4IFs8b3BjaW9ucz5dIDxjYW3DrT4gPGNhbcOtPiIKKworIzogZGlmZi1uby1pbmRleC5jOjI2MworbXNnaWQgIiIKKyJOb3QgYSBnaXQgcmVwb3NpdG9yeS4gVXNlIC0tbm8taW5kZXggdG8gY29tcGFyZSB0d28gcGF0aHMgb3V0c2lkZSBhIHdvcmtpbmcgIgorInRyZWUiCittc2dzdHIgIiIKKyJObyDDqXMgdW4gZGlww7JzaXQgR2l0LiBVc2V1IC0tbm8taW5kZXggcGVyIGEgY29tcGFyYXIgZG9zIGNhbWlucyBmb3JhIGRlbCAiCisiZGlyZWN0b3JpIGRlIHRyZWJhbGwiCisKKyM6IGRpZmYuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIgorbXNnc3RyICIiCisiICBTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGFuYWxpdHphciBlbCBwZXJjZW50YXRnZSBsaW1pdGFudCBkZSBkaXJzdGF0ICIKKyLCqyVzwrtcbiIKKworIzogZGlmZi5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIFBhcsOgbWV0cmUgZGUgZGlyc3RhdCBkZXNjb25lZ3V0IMKrJXPCu1xuIgorCisjOiBkaWZmLmM6Mjk2Cittc2dpZCAiIgorImNvbG9yIG1vdmVkIHNldHRpbmcgbXVzdCBiZSBvbmUgb2YgJ25vJywgJ2RlZmF1bHQnLCAnYmxvY2tzJywgJ3plYnJhJywgIgorIidkaW1tZWQtemVicmEnLCAncGxhaW4nIgorbXNnc3RyICIiCisiZWwgcGFyw6BtZXRyZSBkZSBjb2xvciBlbiBtb3ZpbWVudCBoYSBkZSBzZXIgwqtub8K7LCDCq2RlZmF1bHTCuywgwqtibG9ja3PCuywgIgorIsKremVicmHCuywgwqtkaW1tZWQtemVicmHCuyBvIMKrcGxhaW7CuyIKKworIzogZGlmZi5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcycsIHBvc3NpYmxlIHZhbHVlcyBhcmUgJ2lnbm9yZS1zcGFjZS1jaGFuZ2UnLCAiCisiJ2lnbm9yZS1zcGFjZS1hdC1lb2wnLCAnaWdub3JlLWFsbC1zcGFjZScsICdhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UnIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzozMzIKK21zZ2lkICIiCisiY29sb3ItbW92ZWQtd3M6IGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciAiCisid2hpdGVzcGFjZSBtb2RlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdmFsdWUgZm9yICdkaWZmLnN1Ym1vZHVsZScgY29uZmlnIHZhcmlhYmxlOiAnJXMnIgorbXNnc3RyICIiCisiVmFsb3IgZGVzY29uZWd1dCBkZSBsYSB2YXJpYWJsZSBkZSBjb25maWd1cmFjacOzIGRlICdkaWZmLnN1Ym1vZHVsZSc6IMKrJXPCuyIKKworIzogZGlmZi5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIlMnaGFuIHRyb2JhdCBlcnJvcnMgZW4gbGEgdmFyaWFibGUgZGUgY29uZmlndXJhY2nDsyAnZGlmZi5kaXJzdGF0JzpcbiIKKyIlcyIKKworIzogZGlmZi5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZGlmZiBkaWVkLCBzdG9wcGluZyBhdCAlcyIKK21zZ3N0ciAiZWwgZGlmZiBleHRlcm5hbCBzJ2hhIG1vcnQsIHMnZXN0w6AgYXR1cmFudCBhICVzIgorCisjOiBkaWZmLmM6NDU0NworbXNnaWQgIi0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtLWNoZWNrIGFuZCAtcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayBpIC1zIHPDs24gbcO6dHVhbWVudCBleGNsb2VudHMiCisKKyM6IGRpZmYuYzo0NTUwCittc2dpZCAiLUcsIC1TIGFuZCAtLWZpbmQtb2JqZWN0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1HLCAtUyBhbmQgLS1maW5kLW9iamVjdCBzw7NuIG3DunR1YW1lbnQgZXhjbG9lbnRzIgorCisjOiBkaWZmLmM6NDYyOAorbXNnaWQgIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIgorbXNnc3RyICItLWZvbGxvdyByZXF1ZXJlaXggZXhhY3RhbWVudCB1bmEgZXNwZWNpZmljYWNpw7MgZGUgY2Ftw60iCisKKyM6IGRpZmYuYzo0Njc2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1zdGF0IHZhbHVlOiAlcyIKK21zZ3N0ciAidmFsb3IgLS1zdGF0IG5vIHbDoGxpZDogJXMiCisKKyM6IGRpZmYuYzo0NjgxIGRpZmYuYzo0Njg2IGRpZmYuYzo0NjkxIGRpZmYuYzo0Njk2IGRpZmYuYzo1MjA5CisjOiBwYXJzZS1vcHRpb25zLmM6MTk5IHBhcnNlLW9wdGlvbnMuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiJXMgZXNwZXJhIHVuIHZhbG9yIG51bcOocmljIgorCisjOiBkaWZmLmM6NDcxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgorbXNnc3RyICIiCisiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhbmFsaXR6YXIgZWwgcGFyw6BtZXRyZSBkJ29wY2nDsyBkZSAtLWRpcnN0YXQvLVg6XG4iCisiJXMiCisKKyM6IGRpZmYuYzo0Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY2hhbmdlIGNsYXNzICclYycgaW4gLS1kaWZmLWZpbHRlcj0lcyIKK21zZ3N0ciAiY2xhc3NlIGRlIGNhbnZpIMKrJWPCuyBkZXNjb25lZ3VkYSBhIC0tZGlmZi1maWx0ZXI9JXMiCisKKyM6IGRpZmYuYzo0ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgYWZ0ZXIgd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCittc2dzdHIgInZhbG9yIGRlc2NvbmVndXQgZGVzcHLDqXMgZGUgd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCisKKyM6IGRpZmYuYzo0ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgcmVzb2xkcmUgwqslc8K7IgorCisjOiBkaWZmLmM6NDg4NiBkaWZmLmM6NDg5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIDxuPi88bT4gZm9ybSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDkwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgY2hhcmFjdGVyLCBnb3QgJyVzJyIKK21zZ3N0ciAiJXMgZXNwZXJhdmEgdW4gY2Fyw6BjdGVyLCBzJ2hhIHJlYnV0IMKrJXPCuyIKKworIzogZGlmZi5jOjQ5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0tY29sb3ItbW92ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJwYXLDoG1ldHJlIC0tY29sb3ItbW92ZWQgaW5jb3JyZWN0ZTogJXMiCisKKyM6IGRpZmYuYzo0OTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSAnJXMnIGluIC0tY29sb3ItbW92ZWQtd3MiCittc2dzdHIgIm1vZGUgwqslc8K7IG5vIHbDoGxpZCBlbiAtY29sb3ItbW92ZWQtd3MiCisKKyM6IGRpZmYuYzo0OTg0Cittc2dpZCAiIgorIm9wdGlvbiBkaWZmLWFsZ29yaXRobSBhY2NlcHRzIFwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2VcIiBhbmQgIgorIlwiaGlzdG9ncmFtXCIiCittc2dzdHIgIiIKKyJsJ29wY2nDsyBkaWZmLWFsZ29yaXRobSBhY2NlcHRhIMKrbXllcnPCuywgwqttaW5pbWFswrssIMKrcGF0aWVuY2XCuyBpIMKraGlzdG9ncmFtwrsiCisKKyM6IGRpZmYuYzo1MDIwIGRpZmYuYzo1MDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgdG8gJXMiCittc2dzdHIgImFyZ3VtZW50IG5vIHbDoGxpZCBhICVzIgorCisjOiBkaWZmLmM6NTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIKK21zZ3N0ciAiIgorInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gYW5hbGl0emFyIGVsIHBhcsOgbWV0cmUgZCdvcGNpw7MgZGUgLS1zdWJtb2R1bGU6IMKrJXPCuyIKKworIzogZGlmZi5jOjUyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0td29yZC1kaWZmIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAicGFyw6BtZXRyZSAtLXdvcmQtZGlmZiBpbmNvcnJlY3RlOiAlcyIKKworIzogZGlmZi5jOjUyNTcKK21zZ2lkICJEaWZmIG91dHB1dCBmb3JtYXQgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9ucyBkZWwgZm9ybWF0IGRlIHNvcnRpZGEgZGVsIGRpZmYiCisKKyM6IGRpZmYuYzo1MjU5IGRpZmYuYzo1MjY1Cittc2dpZCAiZ2VuZXJhdGUgcGF0Y2giCittc2dzdHIgImdlbmVyYW50IHBlZGHDpyIKKworIzogZGlmZi5jOjUyNjIgYnVpbHRpbi9sb2cuYzoxNzMKK21zZ2lkICJzdXBwcmVzcyBkaWZmIG91dHB1dCIKK21zZ3N0ciAib21ldCBsYSBzb3J0aWRhIGRlIGRpZmVyw6huY2llcyIKKworIzogZGlmZi5jOjUyNjcgZGlmZi5jOjUzODEgZGlmZi5jOjUzODgKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZGlmZi5jOjUyNjggZGlmZi5jOjUyNzEKK21zZ2lkICJnZW5lcmF0ZSBkaWZmcyB3aXRoIDxuPiBsaW5lcyBjb250ZXh0IgorbXNnc3RyICJnZW5lcmEgZGlmZnMgYW1iIDxuPiBsw61uaWVzIGRlIGNvbnRleHQiCisKKyM6IGRpZmYuYzo1MjczCittc2dpZCAiZ2VuZXJhdGUgdGhlIGRpZmYgaW4gcmF3IGZvcm1hdCIKK21zZ3N0ciAiZ2VuZXJhIGVsIGRpZmYgZW4gZm9ybWF0IGNydSIKKworIzogZGlmZi5jOjUyNzYKK21zZ2lkICJzeW5vbnltIGZvciAnLXAgLS1yYXcnIgorbXNnc3RyICJzaW7Dsm5pbSBkZSBwZXIgYSDCqy1wIC0tcmF3wrsiCisKKyM6IGRpZmYuYzo1MjgwCittc2dpZCAic3lub255bSBmb3IgJy1wIC0tc3RhdCciCittc2dzdHIgInNpbsOybmltIGRlIHBlciBhIMKrLXAgLS1zdGF0wrsiCisKKyM6IGRpZmYuYzo1Mjg0Cittc2dpZCAibWFjaGluZSBmcmllbmRseSAtLXN0YXQiCittc2dzdHIgImxsZWdpYmxlIHBlciBtw6BxdWluYSAtLXN0YXQiCisKKyM6IGRpZmYuYzo1Mjg3Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIGxhc3QgbGluZSBvZiAtLXN0YXQiCittc2dzdHIgIm1vc3RyYSBub23DqXMgbCfDumx0aW1hIGzDrW5pYSBkZSAtLXN0YXQiCisKKyM6IGRpZmYuYzo1Mjg5IGRpZmYuYzo1Mjk3Cittc2dpZCAiPHBhcmFtMSxwYXJhbTI+Li4uIgorbXNnc3RyICI8cGFyYW0xLHBhcmFtMj4uLi4iCisKKyM6IGRpZmYuYzo1MjkwCittc2dpZCAiIgorIm91dHB1dCB0aGUgZGlzdHJpYnV0aW9uIG9mIHJlbGF0aXZlIGFtb3VudCBvZiBjaGFuZ2VzIGZvciBlYWNoIHN1Yi1kaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyOTQKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSIKK21zZ3N0ciAic2luw7JuaW0gcGVyIC1kaXJzdGF0PWN1bXVsYXRpdmUiCisKKyM6IGRpZmYuYzo1Mjk4Cittc2dpZCAic3lub255bSBmb3IgLS1kaXJzdGF0PWZpbGVzLHBhcmFtMSxwYXJhbTIuLi4iCittc2dzdHIgInNpbsOybmltIHBlciAtLWRpcnN0YXQ9ZmlsZXMscGFyYW0xLHBhcmFtMi4uLiIKKworIzogZGlmZi5jOjUzMDIKK21zZ2lkICJ3YXJuIGlmIGNoYW5nZXMgaW50cm9kdWNlIGNvbmZsaWN0IG1hcmtlcnMgb3Igd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMDUKK21zZ2lkICJjb25kZW5zZWQgc3VtbWFyeSBzdWNoIGFzIGNyZWF0aW9ucywgcmVuYW1lcyBhbmQgbW9kZSBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzA4Cittc2dpZCAic2hvdyBvbmx5IG5hbWVzIG9mIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgIm1vc3RyYSBub23DqXMgZWxzIG5vbXMgZGUgZml0eGVycyBjYW52aWF0cyIKKworIzogZGlmZi5jOjUzMTEKK21zZ2lkICJzaG93IG9ubHkgbmFtZXMgYW5kIHN0YXR1cyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJtb3N0cmEgbm9tw6lzIGVscyBub21zIGkgbCdlc3RhdCBkZWxzIGZpdHhlcnMgY2FudmlhdHMiCisKKyM6IGRpZmYuYzo1MzEzCittc2dpZCAiPHdpZHRoPlssPG5hbWUtd2lkdGg+Wyw8Y291bnQ+XV0iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMTQKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCIKK21zZ3N0ciAiZ2VuZXJhIGRpZmZzdGF0IgorCisjOiBkaWZmLmM6NTMxNiBkaWZmLmM6NTMxOSBkaWZmLmM6NTMyMgorbXNnaWQgIjx3aWR0aD4iCittc2dzdHIgIjxhbXBsYWRhPiIKKworIzogZGlmZi5jOjUzMTcKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gd2lkdGgiCittc2dzdHIgImdlbmVyYSBkaWZmc3RhdCBhbWIgdW5hIGFtcGxhZGEgZG9uYWRhIgorCisjOiBkaWZmLmM6NTMyMAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiBuYW1lIHdpZHRoIgorbXNnc3RyICJnZW5lcmEgZGlmZnN0YXQgYW1iIHVuIG5vbSBkJ2FtcGxhZGEgZG9uYXQiCisKKyM6IGRpZmYuYzo1MzIzCittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIGdyYXBoIHdpZHRoIgorbXNnc3RyICJnZW5lcmEgZGlmZnN0YXQgYW1iIHVuYSBhbXBsYWRhIGRlIGdyYWYgZG9uYWRhIgorCisjOiBkaWZmLmM6NTMyNQorbXNnaWQgIjxjb3VudD4iCittc2dzdHIgIjxjb21wdGFkb3I+IgorCisjOiBkaWZmLmM6NTMyNgorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggbGltaXRlZCBsaW5lcyIKK21zZ3N0ciAiZ2VuZXJhIGRpZmZzdGF0IGFtYiBsw61uaWVzIGxpbWl0YWRlcyIKKworIzogZGlmZi5jOjUzMjkKK21zZ2lkICJnZW5lcmF0ZSBjb21wYWN0IHN1bW1hcnkgaW4gZGlmZnN0YXQiCittc2dzdHIgImdlbmVyYSB1biByZXN1bSBjb21wYWN0ZSBhIGRpZmZzdGF0IgorCisjOiBkaWZmLmM6NTMzMgorbXNnaWQgIm91dHB1dCBhIGJpbmFyeSBkaWZmIHRoYXQgY2FuIGJlIGFwcGxpZWQiCittc2dzdHIgImRpZmYgYW1iIHNvcnRpZGEgYmluYXJpYSBxdWUgcG90IHNlciBhcGxpY2FkYSIKKworIzogZGlmZi5jOjUzMzUKK21zZ2lkICJzaG93IGZ1bGwgcHJlLSBhbmQgcG9zdC1pbWFnZSBvYmplY3QgbmFtZXMgb24gdGhlIFwiaW5kZXhcIiBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMzNworbXNnaWQgInNob3cgY29sb3JlZCBkaWZmIgorbXNnc3RyICJtb3N0cmEgdW4gZGlmZiBhbWIgY29sb3JzIgorCisjOiBkaWZmLmM6NTMzOAorbXNnaWQgIjxraW5kPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMzOQorbXNnaWQgIiIKKyJoaWdobGlnaHQgd2hpdGVzcGFjZSBlcnJvcnMgaW4gdGhlICdjb250ZXh0JywgJ29sZCcgb3IgJ25ldycgbGluZXMgaW4gdGhlICIKKyJkaWZmIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzQyCittc2dpZCAiIgorImRvIG5vdCBtdW5nZSBwYXRobmFtZXMgYW5kIHVzZSBOVUxzIGFzIG91dHB1dCBmaWVsZCB0ZXJtaW5hdG9ycyBpbiAtLXJhdyBvciAiCisiLS1udW1zdGF0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzQ1IGRpZmYuYzo1MzQ4IGRpZmYuYzo1MzUxIGRpZmYuYzo1NDU3Cittc2dpZCAiPHByZWZpeD4iCittc2dzdHIgIjxwcmVmaXg+IgorCisjOiBkaWZmLmM6NTM0NgorbXNnaWQgInNob3cgdGhlIGdpdmVuIHNvdXJjZSBwcmVmaXggaW5zdGVhZCBvZiBcImEvXCIiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNDkKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBwcmVmaXggaW5zdGVhZCBvZiBcImIvXCIiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNTIKK21zZ2lkICJwcmVwZW5kIGFuIGFkZGl0aW9uYWwgcHJlZml4IHRvIGV2ZXJ5IGxpbmUgb2Ygb3V0cHV0IgorbXNnc3RyICJhZmVnaXIgdW4gcHJlZml4IGFkZGljaW9uYWwgcGVyIGEgY2FkYSBsw61uaWEgZGUgc29ydGlkYSIKKworIzogZGlmZi5jOjUzNTUKK21zZ2lkICJkbyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeCIKK21zZ3N0ciAibm8gbW9zdHJpcyBjYXAgcHJlZml4IGQnb3JpZ2VuIG8gZGVzdMOtIgorCisjOiBkaWZmLmM6NTM1OAorIywgZnV6enkKK21zZ2lkICJzaG93IGNvbnRleHQgYmV0d2VlbiBkaWZmIGh1bmtzIHVwIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGxpbmVzIgorbXNnc3RyICJDcmVhIHVuIGNsb24gc3VwZXJmaWNpYWwgdHJ1bmNhdCBhbCBub21icmUgZGUgcmV2aXNpb25zIGVzcGVjaWZpY2F0IgorCisjOiBkaWZmLmM6NTM2MiBkaWZmLmM6NTM2NyBkaWZmLmM6NTM3MgorbXNnaWQgIjxjaGFyPiIKK21zZ3N0ciAiPGNoYXI+IgorCisjOiBkaWZmLmM6NTM2MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIG5ldyBsaW5lIGluc3RlYWQgb2YgJysnIgorbXNnc3RyICIiCisiZXNwZWNpZmlxdWV1IGVsIGNhcsOgY3RlciBwZXIgYSBpbmRpY2FyIHVuYSBsw61uaWEgbm92YSBlbiBjb21wdGVzIGRlIMKrK8K7IgorCisjOiBkaWZmLmM6NTM2OAorbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhbiBvbGQgbGluZSBpbnN0ZWFkIG9mICctJyIKK21zZ3N0ciAiIgorImVzcGVjaWZpcXVldSBlbCBjYXLDoGN0ZXIgcGVyIGEgaW5kaWNhciB1bmEgbMOtbmlhIGFudGlnYSBlbiBjb21wdGVzIGRlIMKrLcK7IgorCisjOiBkaWZmLmM6NTM3MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIGNvbnRleHQgaW5zdGVhZCBvZiAnICciCittc2dzdHIgImVzcGVjaWZpcXVldSBlbCBjYXLDoGN0ZXIgcGVyIGEgaW5kaWNhciBjb250ZXh0IGVuIGNvbXB0ZXMgZGUgwqsgwrsiCisKKyM6IGRpZmYuYzo1Mzc2Cittc2dpZCAiRGlmZiByZW5hbWUgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9ucyBkZSBjYW52aSBkZSBub20gZGVsIGRpZmYiCisKKyM6IGRpZmYuYzo1Mzc3Cittc2dpZCAiPG4+Wy88bT5dIgorbXNnc3RyICI8bj5bLzxtPl0iCisKKyM6IGRpZmYuYzo1Mzc4Cittc2dpZCAiYnJlYWsgY29tcGxldGUgcmV3cml0ZSBjaGFuZ2VzIGludG8gcGFpcnMgb2YgZGVsZXRlIGFuZCBjcmVhdGUiCittc2dzdHIgIiIKKyJkaXZpZGVpeCBlbHMgY2FudmlzIGRlIHJlZXNjcmlwdHVyYSBjb21wbGV0YSBlbiBwYXJlbGxzIGRlIHN1cHJpbWlyIGkgY3JlYXIiCisKKyM6IGRpZmYuYzo1MzgyCittc2dpZCAiZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgImRldGVjdGEgZWxzIGNhbnZpcyBkZSBub21zIgorCisjOiBkaWZmLmM6NTM4NgorbXNnaWQgIm9taXQgdGhlIHByZWltYWdlIGZvciBkZWxldGVzIgorbXNnc3RyICJvbWV0IGxlcyBwcmVpbWF0Z2VzIHBlciBsZXMgc3VwcmVzc2lvbnMiCisKKyM6IGRpZmYuYzo1Mzg5Cittc2dpZCAiZGV0ZWN0IGNvcGllcyIKK21zZ3N0ciAiZGV0ZWN0YSBjw7JwaWVzIgorCisjOiBkaWZmLmM6NTM5MworbXNnaWQgInVzZSB1bm1vZGlmaWVkIGZpbGVzIGFzIHNvdXJjZSB0byBmaW5kIGNvcGllcyIKK21zZ3N0ciAidXNhIGVscyBmaXR4ZXJzIG5vIG1vZGlmaWNhdHMgY29tIGEgZm9udCBwZXIgdHJvYmFyIGPDsnBpZXMiCisKKyM6IGRpZmYuYzo1Mzk1Cittc2dpZCAiZGlzYWJsZSByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICJpbmhhYmlsaXRhIGxhIGRldGVjY2nDsyBkZSBjYW52aXMgZGUgbm9tIgorCisjOiBkaWZmLmM6NTM5OAorbXNnaWQgInVzZSBlbXB0eSBibG9icyBhcyByZW5hbWUgc291cmNlIgorbXNnc3RyICJ1c2EgZWxzIGJsb2JzIGJ1aXRzIGNvbSBhIGZvbnQgZGUgY2FudmkgZGUgbm9tIgorCisjOiBkaWZmLmM6NTQwMAorbXNnaWQgImNvbnRpbnVlIGxpc3RpbmcgdGhlIGhpc3Rvcnkgb2YgYSBmaWxlIGJleW9uZCByZW5hbWVzIgorbXNnc3RyICIiCisiY29udGludWEgbGxpc3RhbnQgbCdoaXN0w7JyaWMgZCd1biB1biBmaXR4ZXIgbcOpcyBlbmxsw6AgZGVscyBjYW52aXMgZGUgbm9tIgorCisjOiBkaWZmLmM6NTQwMworbXNnaWQgIiIKKyJwcmV2ZW50IHJlbmFtZS9jb3B5IGRldGVjdGlvbiBpZiB0aGUgbnVtYmVyIG9mIHJlbmFtZS9jb3B5IHRhcmdldHMgZXhjZWVkcyAiCisiZ2l2ZW4gbGltaXQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MDUKK21zZ2lkICJEaWZmIGFsZ29yaXRobSBvcHRpb25zIgorbXNnc3RyICJPcGNpb25zIGQnYWxnb3Jpc21lIERpZmYiCisKKyM6IGRpZmYuYzo1NDA3Cittc2dpZCAicHJvZHVjZSB0aGUgc21hbGxlc3QgcG9zc2libGUgZGlmZiIKK21zZ3N0ciAicHJvZHVlaXggZWwgZGlmZiBtw6lzIHBldGl0IHBvc3NpYmxlIgorCisjOiBkaWZmLmM6NTQxMAorbXNnaWQgImlnbm9yZSB3aGl0ZXNwYWNlIHdoZW4gY29tcGFyaW5nIGxpbmVzIgorbXNnc3RyICJpZ25vcmEgZWxzIGVzcGFpIGVuIGJsYW5jIGVuIGNvbXBhcmFyIGzDrW5pZXMiCisKKyM6IGRpZmYuYzo1NDEzCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gYW1vdW50IG9mIHdoaXRlc3BhY2UiCittc2dzdHIgImlnbm9yYSBlbHMgY2FudmlzIGVuIGxhIHF1YW50aXRhdCBkJ2VzcGFpIGVuIGJsYW5jIgorCisjOiBkaWZmLmM6NTQxNgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgYXQgRU9MIgorbXNnc3RyICJpZ25vcmEgZWxzIGNhbnZpcyBkJ2VzcGFpIGVuIGJsYW5jIGFsIGZpbmFsIGRlIGxhIGzDrW5pYSIKKworIzogZGlmZi5jOjU0MTkKK21zZ2lkICJpZ25vcmUgY2Fycmllci1yZXR1cm4gYXQgdGhlIGVuZCBvZiBsaW5lIgorbXNnc3RyICJpZ25vcmEgZWxzIHJldG9ybnMgZGUgbMOtbmlhIGFsIGZpbmFsIGRlIGxhIGzDrW5pYSIKKworIzogZGlmZi5jOjU0MjIKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyB3aG9zZSBsaW5lcyBhcmUgYWxsIGJsYW5rIgorbXNnc3RyICJpZ25vcmEgZWxzIGNhbnZpcyBlbiBsw61uaWVzIHF1ZSBlc3RhbiBlbiBibGFuYyIKKworIzogZGlmZi5jOjU0MjUKK21zZ2lkICJoZXVyaXN0aWMgdG8gc2hpZnQgZGlmZiBodW5rIGJvdW5kYXJpZXMgZm9yIGVhc3kgcmVhZGluZyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQyOAorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwicGF0aWVuY2UgZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiZ2VuZXJhIGRpZmYgdXNhbnQgbCdhbGdvcmlzbWUgwqtwYXRpZW5jZSBkaWZmwrsiCisKKyM6IGRpZmYuYzo1NDMyCittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJoaXN0b2dyYW0gZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiZ2VuZXJhIGRpZmYgdXNhbnQgbCdhbGdvcmlzbWUgwqtoaXN0b2dyYW0gZGlmZsK7IgorCisjOiBkaWZmLmM6NTQzNAorbXNnaWQgIjxhbGdvcml0aG0+IgorbXNnc3RyICI8YWxnb3Jpc21lPiIKKworIzogZGlmZi5jOjU0MzUKK21zZ2lkICJjaG9vc2UgYSBkaWZmIGFsZ29yaXRobSIKK21zZ3N0ciAiZXNjb2xsaXUgdW4gYWxnb3Jpc21lIHBlbCBkaWZmIgorCisjOiBkaWZmLmM6NTQzNworbXNnaWQgIjx0ZXh0PiIKK21zZ3N0ciAiPHRleHQ+IgorCisjOiBkaWZmLmM6NTQzOAorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwiYW5jaG9yZWQgZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiZ2VuZXJhIGRpZmYgdXNhbnQgbCdhbGdvcmlzbWUgwqthbmNob3JlZCBkaWZmwrsiCisKKyM6IGRpZmYuYzo1NDQwIGRpZmYuYzo1NDQ5IGRpZmYuYzo1NDUyCittc2dpZCAiPG1vZGU+IgorbXNnc3RyICI8bW9kZT4iCisKKyM6IGRpZmYuYzo1NDQxCittc2dpZCAic2hvdyB3b3JkIGRpZmYsIHVzaW5nIDxtb2RlPiB0byBkZWxpbWl0IGNoYW5nZWQgd29yZHMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDMgZGlmZi5jOjU0NDYgZGlmZi5jOjU0OTEKK21zZ2lkICI8cmVnZXg+IgorbXNnc3RyICI8cmVnZXg+IgorCisjOiBkaWZmLmM6NTQ0NAorbXNnaWQgInVzZSA8cmVnZXg+IHRvIGRlY2lkZSB3aGF0IGEgd29yZCBpcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ0NworbXNnaWQgImVxdWl2YWxlbnQgdG8gLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9PHJlZ2V4PiIKK21zZ3N0ciAiZXF1aXZhbGVudCBhIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxyZWdleD4iCisKKyM6IGRpZmYuYzo1NDUwCittc2dpZCAibW92ZWQgbGluZXMgb2YgY29kZSBhcmUgY29sb3JlZCBkaWZmZXJlbnRseSIKK21zZ3N0ciAibGVzIGzDrW5pZXMgZGUgY29kaSBxdWUgcydoYSBtb2d1dCBzJ2Fjb2xvcmVpeGVuIGRpZmVyZW50IgorCisjOiBkaWZmLmM6NTQ1MworbXNnaWQgImhvdyB3aGl0ZSBzcGFjZXMgYXJlIGlnbm9yZWQgaW4gLS1jb2xvci1tb3ZlZCIKK21zZ3N0ciAiY29tIHMnaWdub3JlbiBlbHMgZXNwYWlzIGVuIGJsYW5jIGEgLS1jb2xvci1tb3ZlZCIKKworIzogZGlmZi5jOjU0NTYKK21zZ2lkICJPdGhlciBkaWZmIG9wdGlvbnMiCittc2dzdHIgIkFsdHJlcyBvcGNpb25zIGRpZmYiCisKKyM6IGRpZmYuYzo1NDU4Cittc2dpZCAid2hlbiBydW4gZnJvbSBzdWJkaXIsIGV4Y2x1ZGUgY2hhbmdlcyBvdXRzaWRlIGFuZCBzaG93IHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICJxdWFuIHMnZXhlY3V0YSBkZXMgZCd1biBzdWJkaXJlY3RvcmksIGV4Y2xvdSBlbHMgY2FudmlzIGRlIGZvcmEgaSBtb3N0cmEgZWxzIGNhbWlucyByZWxhdGl1cyIKKworIzogZGlmZi5jOjU0NjIKK21zZ2lkICJ0cmVhdCBhbGwgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAidHJhY3RhIHRvdHMgZWxzIGZpdHhlcnMgY29tIGEgdGV4dCIKKworIzogZGlmZi5jOjU0NjQKK21zZ2lkICJzd2FwIHR3byBpbnB1dHMsIHJldmVyc2UgdGhlIGRpZmYiCittc2dzdHIgImludGVyY2FudmlhIGxlcyBkdWVzIGVudHJhZGVzLCBpbnZlcnRlaXggZWwgZGlmZiIKKworIzogZGlmZi5jOjU0NjYKK21zZ2lkICJleGl0IHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzLCAwIG90aGVyd2lzZSIKK21zZ3N0ciAic3VydCBhbWIgMSBzaSBoaSBoYSBkaWZlcsOobmNpZXMsIDAgZW4gY2FzIGNvbnRyYXJpIgorCisjOiBkaWZmLmM6NTQ2OAorbXNnaWQgImRpc2FibGUgYWxsIG91dHB1dCBvZiB0aGUgcHJvZ3JhbSIKK21zZ3N0ciAiaW5oYWJpbGl0YSB0b3RlcyBsZXMgc29ydGlkZXMgZGVsIHByb2dyYW1hIgorCisjOiBkaWZmLmM6NTQ3MAorbXNnaWQgImFsbG93IGFuIGV4dGVybmFsIGRpZmYgaGVscGVyIHRvIGJlIGV4ZWN1dGVkIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDcyCittc2dpZCAicnVuIGV4dGVybmFsIHRleHQgY29udmVyc2lvbiBmaWx0ZXJzIHdoZW4gY29tcGFyaW5nIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ3NAorbXNnaWQgIjx3aGVuPiIKK21zZ3N0ciAiPHF1YW4+IgorCisjOiBkaWZmLmM6NTQ3NQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgaW4gdGhlIGRpZmYgZ2VuZXJhdGlvbiIKK21zZ3N0ciAiaWdub3JhIGVscyBjYW52aXMgYWxzIHN1Ym3DsmR1bHMgZW4gbGEgZ2VuZXJhY2nDsyBkZWwgZGlmZiIKKworIzogZGlmZi5jOjU0NzgKK21zZ2lkICI8Zm9ybWF0PiIKK21zZ3N0ciAiPGZvcm1hdD4iCisKKyM6IGRpZmYuYzo1NDc5Cittc2dpZCAic3BlY2lmeSBob3cgZGlmZmVyZW5jZXMgaW4gc3VibW9kdWxlcyBhcmUgc2hvd24iCittc2dzdHIgImVzcGVjaWZpcXVldSBjb20gZXMgbW9zdHJlbiBlbHMgY2FudmlzIGFscyBzdWJtw7JkdWxzIgorCisjOiBkaWZmLmM6NTQ4MworIywgZnV6enkKK21zZ2lkICJoaWRlICdnaXQgYWRkIC1OJyBlbnRyaWVzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJ1c2EgLmdpdGF0dHJpYnV0ZXMgbm9tw6lzIGRlcyBkZSBsJ8OtbmRleCIKKworIzogZGlmZi5jOjU0ODYKK21zZ2lkICJ0cmVhdCAnZ2l0IGFkZCAtTicgZW50cmllcyBhcyByZWFsIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ4OAorbXNnaWQgIjxzdHJpbmc+IgorbXNnc3RyICI8Y2FkZW5hPiIKKworIzogZGlmZi5jOjU0ODkKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJzdHJpbmciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0OTIKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJyZWdleCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ5NQorbXNnaWQgInNob3cgYWxsIGNoYW5nZXMgaW4gdGhlIGNoYW5nZXNldCB3aXRoIC1TIG9yIC1HIgorbXNnc3RyICJtb3N0cmEgdG90cyBlbHMgY2FudmlzIGFtYiBlbCBjb25qdW50IGRlIGNhbnZpcyBhbWIgLVMgbyAtRyIKKworIzogZGlmZi5jOjU0OTgKK21zZ2lkICJ0cmVhdCA8c3RyaW5nPiBpbiAtUyBhcyBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgInRyYWN0YSA8Y2FkZW5hPiBhIC1TIGNvbSBhIGV4cHJlc3Npw7MgcmVndWxhciBQT1NJWCBhbXBsaWFkYSIKKworIzogZGlmZi5jOjU1MDEKK21zZ2lkICJjb250cm9sIHRoZSBvcmRlciBpbiB3aGljaCBmaWxlcyBhcHBlYXIgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiY29udHJvbGEgbCdvcmRyZSBhbWIgZWwgcXVhbCBlbHMgZml0eGVycyBhcGFyZWl4ZW4gZW4gbGEgc29ydGlkYSIKKworIzogZGlmZi5jOjU1MDIKK21zZ2lkICI8b2JqZWN0LWlkPiIKK21zZ3N0ciAiPGlkIGRlIGwnb2JqZWN0ZT4iCisKKyM6IGRpZmYuYzo1NTAzCittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisib2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTA1Cittc2dpZCAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorbXNnc3RyICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCisKKyM6IGRpZmYuYzo1NTA2Cittc2dpZCAic2VsZWN0IGZpbGVzIGJ5IGRpZmYgdHlwZSIKK21zZ3N0ciAic2VsZWNjaW9uZXUgZWxzIGZpdHhlcnMgcGVyIHRpcHVzIGRlIGRpZmYiCisKKyM6IGRpZmYuYzo1NTA4Cittc2dpZCAiPGZpbGU+IgorbXNnc3RyICI8Zml0eGVyPiIKKworIzogZGlmZi5jOjU1MDkKK21zZ2lkICJPdXRwdXQgdG8gYSBzcGVjaWZpYyBmaWxlIgorbXNnc3RyICJTb3J0aWRhIGEgdW4gZml0eGVyIGVzcGVjw61maWMiCisKKyM6IGRpZmYuYzo2MTY0Cittc2dpZCAiaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIHdhcyBza2lwcGVkIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgIiIKKyJzJ2hhIG9tw6hzIGxhIGRldGVjY2nDsyBkZSBjYW52aSBkZSBub20gaW5leGFjdGEgYSBjYXVzYSBkZSBtYXNzYSBmaXR4ZXJzLiIKKworIzogZGlmZi5jOjYxNjcKK21zZ2lkICJvbmx5IGZvdW5kIGNvcGllcyBmcm9tIG1vZGlmaWVkIHBhdGhzIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgIiIKKyJub23DqXMgcydoYW4gdHJvYmF0IGPDsnBpZXMgZGVzIGRlIGNhbWlucyBtb2RpZmljYXRzIGEgY2F1c2EgZGUgbWFzc2EgZml0eGVycy4iCisKKyM6IGRpZmYuYzo2MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgbWF5IHdhbnQgdG8gc2V0IHlvdXIgJXMgdmFyaWFibGUgdG8gYXQgbGVhc3QgJWQgYW5kIHJldHJ5IHRoZSBjb21tYW5kLiIKK21zZ3N0ciAiIgorInBvdHNlciB2b2xldSBlc3RhYmxpciBsYSB2b3N0cmEgdmFyaWFibGUgJXMgYSBhbG1lbnlzICVkIGkgdG9ybmFyIGEgaW50ZW50YXIgIgorImwnb3JkcmUuIgorCisjOiBkaXIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdCIKK21zZ3N0ciAiIgorImwnZXNwZWNpZmljYWNpw7MgZGUgY2Ftw60gwqslc8K7IG5vIGhhIGNvaW5jaWRpdCBhbWIgY2FwIGZpdHhlciBxdWUgZ2l0IGNvbmVndWkiCisKKyM6IGRpci5jOjY2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcGF0dGVybjogJyVzJyIKK21zZ3N0ciAicGF0csOzIG5vIHJlY29uZWd1dDogwqslc8K7IgorCisjOiBkaXIuYzo2ODIgZGlyLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICJwYXRyw7MgbmVnYXRpdSBubyByZWNvbmVndXQ6IMKrJXPCuyIKKworIzogZGlyLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IGhhdmUgaXNzdWVzOiBwYXR0ZXJuICclcycgaXMgcmVwZWF0ZWQiCittc2dzdHIgIiIKKworIzogZGlyLmM6NzI0Cittc2dpZCAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIKK21zZ3N0ciAiaW5oYWJpbGl0YSBsYSBjb2luY2lkw6huY2lhIGRlIHBhdHJvbnMgwqtjb25lwrsiCisKKyM6IGRpci5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiCittc2dzdHIgIm5vIGVzIHBvdCB1c2FyICVzIGNvbSBhIGZpdHhlciBkJ2V4Y2x1c2nDsyIKKworIzogZGlyLmM6MjA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciBlbCBkaXJlY3Rvcmkgwqslc8K7IgorCisjOiBkaXIuYzoyNDE1Cittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2J0ZW5pciBlbCBub21icmUgaSBsYSBpbmZvcm1hY2nDsyBkZWwgbnVjbGkiCisKKyM6IGRpci5jOjI1MzkKK21zZ2lkICJ1bnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24iCittc2dzdHIgIiIKKyJsYSBtZW3DsnJpYSBjYXUgbm8gc2VndWlkYSBlc3TDoCBpbmhhYmlsaXRhZGEgZW4gYXF1ZXN0IHNpc3RlbWEgbyB1YmljYWNpw7MiCisKKyM6IGRpci5jOjMzNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IGluIHJlcG8gJXMiCittc2dzdHIgImVsIGZpdHhlciBkJ8OtbmRleCBhbCBkaXDDsnNpdCAlcyDDqXMgbWFsbcOocyIKKworIzogZGlyLmM6MzM4OCBkaXIuYzozMzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIgorbXNnc3RyICJubyBzJ2hhbiBwb2d1dCBjcmVhciBkaXJlY3RvcmlzIHBlciAlcyIKKworIzogZGlyLmM6MzQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbWlncmF0ZSBnaXQgZGlyZWN0b3J5IGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG1pZ3JhciBlbCBkaXJlY3RvcmkgZGUgwqslc8K7IGEgwqslc8K7IgorCisjOiBlZGl0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiBXYWl0aW5nIGZvciB5b3VyIGVkaXRvciB0byBjbG9zZSB0aGUgZmlsZS4uLiVjIgorbXNnc3RyICIiCisKKyM6IGVudHJ5LmM6MTc4Cittc2dpZCAiRmlsdGVyaW5nIGNvbnRlbnQiCittc2dzdHIgIlMnZXN0w6AgZmlsdHJhbnQgZWwgY29udGluZ3V0IgorCisjOiBlbnRyeS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCBmaWxlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZmVyIMKrc3RhdMK7IHNvYnJlIGVsIGZpdHhlciDCqyVzwrsiCisKKyM6IGVudmlyb25tZW50LmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaXQgbmFtZXNwYWNlIHBhdGggXCIlc1wiIgorbXNnc3RyICIiCisKKyM6IGVudmlyb25tZW50LmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgR0lUX0RJUiB0byAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzdGFibGlyIEdJVF9ESVIgYSDCqyVzwrsiCisKKyM6IGV4ZWMtY21kLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3MgdG8gcnVuICVzIgorbXNnc3RyICJoaSBoYSBtYXNzYSBhcmd1bWVudHMgcGVyIGEgZXhlY3V0YXIgJXMiCisKKyM6IGZldGNoLXBhY2suYzoxNTAKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogbGxpc3RhIHN1cGVyZmljaWFsIGVzcGVyYWRhIgorCisjOiBmZXRjaC1wYWNrLmM6MTUzCisjLCBmdXp6eQorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBhIGZsdXNoIHBhY2tldCBhZnRlciBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBsbGlzdGEgc3VwZXJmaWNpYWwgZXNwZXJhZGEiCisKKyM6IGZldGNoLXBhY2suYzoxNjQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogcydlc3BlcmF2YSBBQ0svTkFLLCBzJ2hhIHJlYnV0IHVuIHBhcXVldCBkZSBuZXRlamEiCisKKyM6IGZldGNoLXBhY2suYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCAnJXMnIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogcydlc3BlcmF2YSBBQ0svTkFLLCBzJ2hhIHJlYnV0IMKrJXPCuyIKKworIzogZmV0Y2gtcGFjay5jOjE5NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0byByZW1vdGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgYWwgcmVtb3QiCisKKyM6IGZldGNoLXBhY2suYzoyNTcKK21zZ2lkICItLXN0YXRlbGVzcy1ycGMgcmVxdWlyZXMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICItLXN0YXRlbGVzcy1ycGMgcmVxdWVyZWl4IG11bHRpX2Fja19kZXRhaWxlZCIKKworIzogZmV0Y2gtcGFjay5jOjM1NiBmZXRjaC1wYWNrLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgImzDrW5pYSBkZSBzaGFsbG93IG5vIHbDoGxpZGE6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzYyIGZldGNoLXBhY2suYzoxMzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdW5zaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICJsw61uaWEgZCd1bnNoYWxsb3cgbm8gdsOgbGlkYTogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjQgZmV0Y2gtcGFjay5jOjEzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIm9iamVjdGUgbm8gdHJvYmF0OiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NyBmZXRjaC1wYWNrLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICJlcnJvciBlbiBvYmplY3RlOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2OSBmZXRjaC1wYWNrLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaGFsbG93IGZvdW5kOiAlcyIKK21zZ3N0ciAibm8gcydoYSB0cm9iYXQgY2FwIHNoYWxsb3c6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzcyIGZldGNoLXBhY2suYzoxMzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHNoYWxsb3cvdW5zaGFsbG93LCBnb3QgJXMiCittc2dzdHIgInMnZXNwZXJhdmEgc2hhbGxvdy91bnNoYWxsb3csIHMnaGEgcmVidXQgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICVkICVzIgorbXNnc3RyICJzJ2hhIHJlYnV0ICVzICVkICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0ICVzIgorbXNnc3RyICJjb21pc3Npw7Mgbm8gdsOgbGlkYSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQ2MgorbXNnaWQgImdpdmluZyB1cCIKK21zZ3N0ciAicydhYmFuZG9uYSIKKworIzogZmV0Y2gtcGFjay5jOjQ3NSBwcm9ncmVzcy5jOjMyMworbXNnaWQgImRvbmUiCittc2dzdHIgImZldCIKKworIzogZmV0Y2gtcGFjay5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgKCVkKSAlcyIKK21zZ3N0ciAicydoYSByZWJ1dCAlcyAoJWQpICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgJXMgYXMgY29tcGxldGUiCittc2dzdHIgIlMnZXN0w6AgbWFyY2FudCAlcyBjb20gYSBjb21wbGV0IgorCisjOiBmZXRjaC1wYWNrLmM6NzU0CisjLCBjLWZvcm1hdAorbXNnaWQgImFscmVhZHkgaGF2ZSAlcyAoJXMpIgorbXNnc3RyICJqYSBlcyB0w6kgJXMgKCVzKSIKKworIzogZmV0Y2gtcGFjay5jOjgxOAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJmZXRjaC1wYWNrOiBubyBzJ2hhIHBvZ3V0IGJpZnVyY2FyIGRlbCBkZXNtdWx0aXBsZXhvciBkZSBiYW5kYSBsYXRlcmFsIgorCisjOiBmZXRjaC1wYWNrLmM6ODI2Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBwYWNrIGhlYWRlciIKK21zZ3N0ciAiZXJyb3IgZGUgcHJvdG9jb2w6IGNhcMOnYWxlcmEgZGUgcGFxdWV0IGVycsOybmlhIgorCisjOiBmZXRjaC1wYWNrLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiAlcyIKK21zZ3N0ciAiZmV0Y2gtcGFjazogbm8gZXMgcG90IGJpZnVyY2FyIGRlICVzIgorCisjOiBmZXRjaC1wYWNrLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGZhaWxlZCIKK21zZ3N0ciAiJXMgaGEgZmFsbGF0IgorCisjOiBmZXRjaC1wYWNrLmM6OTE4Cittc2dpZCAiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiZXJyb3IgZW4gZGVzbXVsdGlwbGV4b3IgZGUgYmFuZGEgbGF0ZXJhbCIKKworIzogZmV0Y2gtcGFjay5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbiBpcyAlLipzIgorbXNnc3RyICJMYSB2ZXJzacOzIGRlbCBzZXJ2aWRvciDDqXMgJS4qcyIKKworIzogZmV0Y2gtcGFjay5jOjk3MCBmZXRjaC1wYWNrLmM6OTc2IGZldGNoLXBhY2suYzo5NzkgZmV0Y2gtcGFjay5jOjk4NQorIzogZmV0Y2gtcGFjay5jOjk4OSBmZXRjaC1wYWNrLmM6OTkzIGZldGNoLXBhY2suYzo5OTcgZmV0Y2gtcGFjay5jOjEwMDEKKyM6IGZldGNoLXBhY2suYzoxMDA1IGZldGNoLXBhY2suYzoxMDA5IGZldGNoLXBhY2suYzoxMDEzIGZldGNoLXBhY2suYzoxMDE3CisjOiBmZXRjaC1wYWNrLmM6MTAyMyBmZXRjaC1wYWNrLmM6MTAyOSBmZXRjaC1wYWNrLmM6MTAzNCBmZXRjaC1wYWNrLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgJXMiCittc2dzdHIgIkVsIHNlcnZpZG9yIGFjY2VwdGEgJXMiCisKKyM6IGZldGNoLXBhY2suYzo5NzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIHBlcm1ldCBjbGllbnRzIHN1cGVyZmljaWFscyIKKworIzogZmV0Y2gtcGFjay5jOjEwMzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctc2luY2UiCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIGFkbWV0IC0tc2hhbGxvdy1zaW5jZSIKKworIzogZmV0Y2gtcGFjay5jOjEwMzcKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIKK21zZ3N0ciAiRWwgc2Vydmlkb3Igbm8gYWRtZXQgLS1zaGFsbG93LWV4Y2x1ZGUiCisKKyM6IGZldGNoLXBhY2suYzoxMDQxCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1kZWVwZW4iCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIGFkbWV0IC0tZGVlcGVuIgorCisjOiBmZXRjaC1wYWNrLmM6MTA1OAorbXNnaWQgIm5vIGNvbW1vbiBjb21taXRzIgorbXNnc3RyICJjYXAgY29taXNzacOzIGVuIGNvbcO6IgorCisjOiBmZXRjaC1wYWNrLmM6MTA3MCBmZXRjaC1wYWNrLmM6MTUzNgorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogbCdvYnRlbmNpw7MgaGEgZmFsbGF0LiIKKworIzogZmV0Y2gtcGFjay5jOjEyMDkKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IHJlcXVlc3RzIgorbXNnc3RyICJFbCBzZXJ2aWRvciBubyBwZXJtZXQgcGV0aWNpb25zIHN1cGVyZmljaWFscyIKKworIzogZmV0Y2gtcGFjay5jOjEyMTYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgZmlsdGVyIgorbXNnc3RyICJFbCBzZXJ2aWRvciBhY2NlcHRhIGZpbHRyYXRnZSIKKworIzogZmV0Y2gtcGFjay5jOjEyMzkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVxdWVzdCB0byByZW1vdGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgbGEgcGV0aWNpw7MgYWwgcmVtb3QiCisKKyM6IGZldGNoLXBhY2suYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgc2VjdGlvbiBoZWFkZXIgJyVzJyIKK21zZ3N0ciAiZXJyb3IgZW4gbGxlZ2lyIGxhIGNhcMOnYWxlcmEgZGUgbGEgc2VjY2nDsyDCqyVzwrsiCisKKyM6IGZldGNoLXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciCittc2dzdHIgInMnZXNwZXJhdmEgwqslc8K7LCBzJ2hhIHJlYnV0IMKrJXPCuyIKKworIzogZmV0Y2gtcGFjay5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBhY2tub3dsZWRnbWVudCBsaW5lOiAnJXMnIgorbXNnc3RyICJsw61uaWEgZGUgY29uZmlybWFjacOzIGluZXNwZXJhZGE6IMKrJXPCuyIKKworIzogZmV0Y2gtcGFjay5jOjEzMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBhY2tzOiAlZCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBwcm9jZXNzYXIgZWxzIGFja3M6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTMxOAorbXNnaWQgImV4cGVjdGVkIHBhY2tmaWxlIHRvIGJlIHNlbnQgYWZ0ZXIgJ3JlYWR5JyIKK21zZ3N0ciAicydlc3BlcmEgbCdlbnZpYW1lbnQgZGVsIGZpdHhlciBkZSBwYXF1ZXQgZGVzcHLDqXMgZGUgwqtyZWFkecK7IgorCisjOiBmZXRjaC1wYWNrLmM6MTMyMAorbXNnaWQgImV4cGVjdGVkIG5vIG90aGVyIHNlY3Rpb25zIHRvIGJlIHNlbnQgYWZ0ZXIgbm8gJ3JlYWR5JyIKK21zZ3N0ciAicydlc3BlcmEgcXVlIGNhcCBhbHRyYSBzZWNjaW9ucyBzJ2VudmnDryBkZXNwcsOpcyBkZSBubyDCq3JlYWR5wrsiCisKKyM6IGZldGNoLXBhY2suYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBwcm9jZXNzYXIgbGEgaW5mb3JtYWNpw7Mgc3VwZXJmaWNpYWw6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCB3YW50ZWQtcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAicydlc3BlcmF2YSB3YW50ZWQtcmVmLCBzJ2hhIHJlYnV0IMKrJXPCuyIKKworIzogZmV0Y2gtcGFjay5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCB3YW50ZWQtcmVmOiAnJXMnIgorbXNnc3RyICJ3YW50ZWQtcmVmIGluZXNwZXJhdDogwqslc8K7IgorCisjOiBmZXRjaC1wYWNrLmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHdhbnRlZCByZWZzOiAlZCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBwcm9jZXNzYXIgbGVzIHJlZmVyw6huY2llcyBkZXNpdGphZGVzOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE3NjIKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAibm8gaGkgaGEgY2FwIEhFQUQgcmVtb3QgY29pbmNpZGVudCIKKworIzogZmV0Y2gtcGFjay5jOjE3ODUgYnVpbHRpbi9jbG9uZS5jOjY4OAorbXNnaWQgInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIgorbXNnc3RyICJlbCByZW1vdCBubyBoYSBlbnZpYXQgdG90cyBlbHMgb2JqZWN0ZXMgbmVjZXNzYXJpcyIKKworIzogZmV0Y2gtcGFjay5jOjE4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZW1vdGUgcmVmICVzIgorbXNnc3RyICJubyBleGlzdGVpeCBsYSByZWZlcsOobmNpYSByZW1vdGEgJXMiCisKKyM6IGZldGNoLXBhY2suYzoxODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICJFbCBzZXJ2aWRvciBubyBwZXJtZXQgc29swrdsaWNpdGFyIG9iamVjdGVzIG5vIGFudW5jaWF0cyAlcyIKKworIzogZ3BnLWludGVyZmFjZS5jOjIyMworbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZWwgZml0eGVyIHRlbXBvcmFsIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVzY3JpdXJlIGxhIHNpZ25hdHVyYSBzZXBhcmFkYSBhIMKrJXPCuyIKKworIzogZ3BnLWludGVyZmFjZS5jOjM5MAorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAiZ3BnIGhhIGZhbGxhdCBlbiBzaWduYXIgbGVzIGRhZGVzIgorCisjOiBncmFwaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yZSBpbnZhbGlkIGNvbG9yICclLipzJyBpbiBsb2cuZ3JhcGhDb2xvcnMiCittc2dzdHIgImlnbm9yYSBlbCBjb2xvciBubyB2w6BsaWQgwqslLipzwrsgZW4gbG9nLmdyYXBoQ29sb3JzIgorCisjOiBncmVwLmM6NjY4Cittc2dpZCAiIgorImdpdmVuIHBhdHRlcm4gY29udGFpbnMgTlVMTCBieXRlICh2aWEgLWYgPGZpbGU+KS4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCAiCisid2l0aCAtUCB1bmRlciBQQ1JFIHYyIgorbXNnc3RyICIiCisKKyM6IGdyZXAuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICLCqyVzwrs6IG5vIHMnaGEgcG9ndXQgbGxlZ2lyICVzIgorCisjOiBncmVwLmM6MjE0MSBzZXR1cC5jOjE2NSBidWlsdGluL2Nsb25lLmM6NDExIGJ1aWx0aW4vZGlmZi5jOjgyCisjOiBidWlsdGluL3JtLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZmVyIHN0YXQgYSDCqyVzwrsiCisKKyM6IGdyZXAuYzoyMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQiCittc2dzdHIgIsKrJXPCuzogbGVjdHVyYSBjdXJ0YSIKKworIzogaGVscC5jOjIzCittc2dpZCAic3RhcnQgYSB3b3JraW5nIGFyZWEgKHNlZSBhbHNvOiBnaXQgaGVscCB0dXRvcmlhbCkiCittc2dzdHIgImNvbWVuw6dhciB1bmEgw6ByZWEgZGUgdHJlYmFsbCAodmVnZXUgdGFtYsOpOiBnaXQgaGVscCB0dXRvcmlhbCkiCisKKyM6IGhlbHAuYzoyNAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICJ0cmViYWxsYXIgZW4gZWwgY2FudmkgYWN0dWFsICh2ZWdldSB0YW1iw6k6IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKKworIzogaGVscC5jOjI1Cittc2dpZCAiZXhhbWluZSB0aGUgaGlzdG9yeSBhbmQgc3RhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCByZXZpc2lvbnMpIgorbXNnc3RyICJleGFtaW5hciBsYSBoaXN0w7JyaWEgaSBsJ2VzdGF0ICh2ZWdldSB0YW1iw6k6IGdpdCBoZWxwIHJldmlzaW9ucykiCisKKyM6IGhlbHAuYzoyNgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgImZlciBjcsOpaXhlciwgbWFyY2FyIGkgYWp1c3RhciBsYSB2b3N0cmEgaGlzdMOycmlhIGNvbXVuYSIKKworIzogaGVscC5jOjI3Cittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICJjb2zCt2xhYm9yYXIgKHZlZ2V1IHRhbWLDqTogZ2l0IGhlbHAgd29ya2Zsb3cpIgorCisjOiBoZWxwLmM6MzEKK21zZ2lkICJNYWluIFBvcmNlbGFpbiBDb21tYW5kcyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzIKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjMzCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzQKK21zZ2lkICJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIKK21zZ3N0ciAiSW50ZXJhY2Npb25hciBhbWIgYWx0cmVzIgorCisjOiBoZWxwLmM6MzUKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIk9yZHJlcyBkZSBiYWl4IG5pdmVsbCAvIE1hbmlwdWxhZG9ycyIKKworIzogaGVscC5jOjM2Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAiT3JkcmVzIGRlIGJhaXggbml2ZWxsIC8gSW50ZXJyb2dhZG9ycyIKKworIzogaGVscC5jOjM3Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gU3luY2luZyBSZXBvc2l0b3JpZXMiCittc2dzdHIgIk9yZHJlcyBkZSBiYWl4IG5pdmVsbCAvIFNpbmNyb25pdHphY2nDsyBkZSBkaXDDsnNpdHMiCisKKyM6IGhlbHAuYzozOAorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVybmFsIEhlbHBlcnMiCittc2dzdHIgIk9yZHJlcyBkZSBiYWl4IG5pdmVsbCAvIEFqdWRhbnRzIGludGVybnMiCisKKyM6IGhlbHAuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaWxhYmxlIGdpdCBjb21tYW5kcyBpbiAnJXMnIgorbXNnc3RyICJvcmRyZXMgZGUgZ2l0IGRpc3BvbmlibGVzIGVuIMKrJXPCuyIKKworIzogaGVscC5jOjMwNQorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAib3JkcmVzIGRlIGdpdCBkaXNwb25pYmxlcyBkJ2FsdHJlcyBsbG9jcyBlbiBlbCB2b3N0cmUgJFBBVEgiCisKKyM6IGhlbHAuYzozMTQKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIiIKKyJBcXVlc3RlcyBzw7NuIG9yZHJlcyBkZWwgR2l0IGhhYml0dWFsbWVudCB1c2FkZXMgZW4gZGl2ZXJzZXMgc2l0dWFjaW9uczoiCisKKyM6IGhlbHAuYzozNjMgZ2l0LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgY29tbWFuZCBsaXN0aW5nIHR5cGUgJyVzJyIKK21zZ3N0ciAidGlwdXMgZGUgbGxpc3RhdCBkZSBsJ29yZHJlIG5vIGNvbXBhdGlibGUgwqslc8K7IgorCisjOiBoZWxwLmM6NDAzCittc2dpZCAiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZToiCittc2dzdHIgIkxlcyBndWllcyBkZSBHaXQgY29tdW5lcyBzw7NuOiIKKworIzogaGVscC5jOjUxMgorbXNnaWQgIlNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyB0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCIKK21zZ3N0ciAiVmVnZXUgwqtnaXQgaGVscCA8b3JkcmU+wrsgcGVyIGxsZWdpciBzb2JyZSB1biBzdWJvcmRyZSBlc3BlY8OtZmljIgorCisjOiBoZWxwLmM6NTE3Cittc2dpZCAiRXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIk9yZHJlcyBleHRlcm5lcyIKKworIzogaGVscC5jOjUzMgorbXNnaWQgIkNvbW1hbmQgYWxpYXNlcyIKK21zZ3N0ciAiw4BsaWVzIGQnb3JkcmVzIgorCisjOiBoZWxwLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGFwcGVhcnMgdG8gYmUgYSBnaXQgY29tbWFuZCwgYnV0IHdlIHdlcmUgbm90XG4iCisiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIKK21zZ3N0ciAiIgorIsKrJXPCuyBzZW1ibGEgdW4gb3JkcmUgZGUgZ2l0LCBwZXLDsiBubyBoZW0gcG9ndXRcbiIKKyJleGVjdXRhci1sYS4gUG90IHNlciBxdWUgZ2l0LSVzIGVzdGlndWkgbWFsbcOocz8iCisKKyM6IGhlbHAuYzo2NTUKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAiQWkuIEVsIHZvc3RyZSBzaXN0ZW1hIG5vIGluZm9ybWEgZGUgY2FwIG9yZHJlIGRlIEdpdC4iCisKKyM6IGhlbHAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiIgorIkFEVkVSVMOITkNJQTogSGV1IGludm9jYXQgdW4gb3JkcmUgZGUgR2l0IGFtYiBub20gwqslc8K7LCBsYSBxdWFsIG5vIGV4aXN0ZWl4LiIKKworIzogaGVscC5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICJFbCBwcm9jw6lzIGNvbnRpbnVhcsOgLCBwcmVzc3Vwb3NhbnQgcXVlIHZvbMOtZXUgZGlyIMKrJXPCuy4iCisKKyM6IGhlbHAuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyBpbiAlMC4xZiBzZWNvbmRzLCBhc3N1bWluZyB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAiIgorIkVsIHByb2PDqXMgY29udGludWFyw6AgZW4gJTAuMWYgc2Vnb25zLCBwcmVzc3Vwb3NhbnQgcXVlIHZvbMOtZXUgZGlyIMKrJXPCuy4iCisKKyM6IGhlbHAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiZ2l0OiDCqyVzwrsgbm8gw6lzIHVuIG9yZHJlIGRlIGdpdC4gVmVnZXUgwqtnaXQgLS1oZWxwwrsuIgorCisjOiBoZWxwLmM6Njk5Cittc2dpZCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZCBpcyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZHMgYXJlIgorbXNnc3RyWzBdICIiCisiXG4iCisiTCdvcmRyZSBtw6lzIHNpbWlsYXIgw6lzIgorbXNnc3RyWzFdICIiCisiXG4iCisiTGVzIG9yZHJlcyBtw6lzIHNpbWlsYXJzIHPDs24iCisKKyM6IGhlbHAuYzo3MTQKK21zZ2lkICJnaXQgdmVyc2lvbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHZlcnNpb24gWzxvcGNpb25zPl0iCisKKyM6IGhlbHAuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIC0gJXMiCittc2dzdHIgIiVzOiAlcyAtICVzIgorCisjOiBoZWxwLmM6Nzg3Cittc2dpZCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiB0aGlzPyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IgorbXNnc3RyWzBdICIiCisiXG4iCisiVm9sw61ldSBkaXIgYWl4w7I/IgorbXNnc3RyWzFdICIiCisiXG4iCisiVm9sw61ldSBkaXIgdW4gZCdhcXVlc3RzPyIKKworIzogaWRlbnQuYzozNDkKK21zZ2lkICIiCisiXG4iCisiKioqIFBsZWFzZSB0ZWxsIG1lIHdobyB5b3UgYXJlLlxuIgorIlxuIgorIlJ1blxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyJcbiIKKyJ0byBzZXQgeW91ciBhY2NvdW50J3MgZGVmYXVsdCBpZGVudGl0eS5cbiIKKyJPbWl0IC0tZ2xvYmFsIHRvIHNldCB0aGUgaWRlbnRpdHkgb25seSBpbiB0aGlzIHJlcG9zaXRvcnkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKiogRGlndWV1LW1lIHF1aSBzb3UuXG4iCisiXG4iCisiRXhlY3V0ZXVcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInVzdWFyaUBkb21pbmkuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiRWwgdm9zdHJlIG5vbVwiXG4iCisiXG4iCisicGVyIGEgZXN0YWJsaXIgbGEgaWRlbnRpdGF0IHByZWRldGVybWluYWRhIGRlbCB2b3N0cmUgY29tcHRlLlxuIgorIk9tZXRldSAtLWdsb2JhbCBwZXIgYSBlc3RhYmxpciBsYSBpZGVudGl0YXQgbm9tw6lzIGVuIGFxdWVzdCBkaXDDsnNpdC5cbiIKKworIzogaWRlbnQuYzozNzkKK21zZ2lkICJubyBlbWFpbCB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICIiCisibm8gcydoYSBwcm9wb3JjaW9uYXQgY2FwIGFkcmXDp2EgZWxlY3Ryw7JuaWNhIGkgbGEgZGV0ZWNjacOzIGF1dG9tw6B0aWNhIGVzdMOgICIKKyJpbmhhYmlsaXRhZGEiCisKKyM6IGlkZW50LmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBlbWFpbCBhZGRyZXNzIChnb3QgJyVzJykiCittc2dzdHIgIiIKKyJubyBzJ2hhIHBvZ3V0IGRldGVjdGFyIGF1dG9tw6B0aWNhbWVudCB1bmEgYWRyZcOnYSBlbGVjdHLDsm5pY2EgdsOgbGlkYSAocydoYSAiCisicmVidXQgwqslc8K7KSIKKworIzogaWRlbnQuYzo0MDEKK21zZ2lkICJubyBuYW1lIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiCittc2dzdHIgIiIKKyJubyBzJ2hhIHByb3BvcmNpb25hdCBjYXAgbm9tIGkgbGEgZGV0ZWNjacOzIGF1dG9tw6B0aWNhIGVzdMOgIGluaGFiaWxpdGFkYSIKKworIzogaWRlbnQuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IG5hbWUgKGdvdCAnJXMnKSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBkZXRlY3RhciBhdXRvbcOgdGljYW1lbnQgZWwgbm9tIChzJ2hhIHJlYnV0IMKrJXPCuykiCisKKyM6IGlkZW50LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGlkZW50IG5hbWUgKGZvciA8JXM+KSBub3QgYWxsb3dlZCIKK21zZ3N0ciAibm9tIGQnaWRlbnRpdGF0IGJ1aXQgKHBlciA8JXM+KSBubyDDqXMgcGVybcOocyIKKworIzogaWRlbnQuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZSBjb25zaXN0cyBvbmx5IG9mIGRpc2FsbG93ZWQgY2hhcmFjdGVyczogJXMiCittc2dzdHIgImVsIG5vbSBjb250w6kgbm9tw6lzIGNhcsOgY3RlcnMgbm8gcGVybWVzb3M6ICVzIgorCisjOiBpZGVudC5jOjQzNiBidWlsdGluL2NvbW1pdC5jOjYzMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAiZm9ybWF0IGRlIGRhdGEgbm8gdsOgbGlkOiAlcyIKKworIzogbGlzdC1vYmplY3RzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgdHJlZSBtb2RlLCBidXQgaXMgbm90IGEgdHJlZSIKK21zZ3N0ciAibCdlbnRyYWRhIMKrJXPCuyBhIGwnYXJicmUgJXMgdMOpIG1vZGUgZCdhcmJyZSwgcGVyw7Igbm8gw6lzIHVuIGFyYnJlIgorCisjOiBsaXN0LW9iamVjdHMuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyBibG9iIG1vZGUsIGJ1dCBpcyBub3QgYSBibG9iIgorbXNnc3RyICJsJ2VudHJhZGEgwqslc8K7IGEgbCdhcmJyZSAlcyB0w6kgbW9kZSBibG9iLCBwZXLDsiBubyDDqXMgdW4gYmxvYiIKKworIzogbGlzdC1vYmplY3RzLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIHJvb3QgdHJlZSBmb3IgY29tbWl0ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNhcnJlZ2FyIGwnYXJyZWwgZGUgbCdhcmJyZSBwZXIgbGEgY29taXNzacOzICVzIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLmM6NDkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIHNwYXJzZSBibG9iIGluICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYWNjZWRpciBhIMKrJXPCuyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHNwYXJzZSBmaWx0ZXIgZGF0YSBpbiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgJXMiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjU4Cittc2dpZCAiZXhwZWN0ZWQgJ3RyZWU6PGRlcHRoPiciCittc2dzdHIgInMnZXNwZXJhdmEgwqt0cmVlOjxwcm9mdW5kaXRhdD7CuyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NzMKK21zZ2lkICJzcGFyc2U6cGF0aCBmaWx0ZXJzIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbHRlci1zcGVjICclcyciCittc2dzdHIgImZpbHRyZSBkJ2VzcGVjaWZpY2FjacOzIG5vIHbDoGxpZDogwqslc8K7IgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVzdCBlc2NhcGUgY2hhciBpbiBzdWItZmlsdGVyLXNwZWM6ICclYyciCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MTQ0Cittc2dpZCAiZXhwZWN0ZWQgc29tZXRoaW5nIGFmdGVyIGNvbWJpbmU6IgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjIyNgorbXNnaWQgIm11bHRpcGxlIGZpbHRlci1zcGVjcyBjYW5ub3QgYmUgY29tYmluZWQiCittc2dzdHIgIm5vIGVzIHBvZGVuIGNvbWJpbmFyIG3Dumx0aXBsZXMgZXNwZWNpZmljYWNpb25zIGRlIGZpbHRyYXRnZSIKKworIzogbG9ja2ZpbGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcy5cbiIKKyJcbiIKKyJBbm90aGVyIGdpdCBwcm9jZXNzIHNlZW1zIHRvIGJlIHJ1bm5pbmcgaW4gdGhpcyByZXBvc2l0b3J5LCBlLmcuXG4iCisiYW4gZWRpdG9yIG9wZW5lZCBieSAnZ2l0IGNvbW1pdCcuIFBsZWFzZSBtYWtlIHN1cmUgYWxsIHByb2Nlc3Nlc1xuIgorImFyZSB0ZXJtaW5hdGVkIHRoZW4gdHJ5IGFnYWluLiBJZiBpdCBzdGlsbCBmYWlscywgYSBnaXQgcHJvY2Vzc1xuIgorIm1heSBoYXZlIGNyYXNoZWQgaW4gdGhpcyByZXBvc2l0b3J5IGVhcmxpZXI6XG4iCisicmVtb3ZlIHRoZSBmaWxlIG1hbnVhbGx5IHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgY3JlYXIgJyVzLmxvY2snOiAlcy5cbiIKKyJcbiIKKyJTZW1ibGEgcXVlIHVuIGFsdHJlIHByb2PDqXMgZGUgZ2l0IHMnZXN0w6AgZXhlY3V0YW50IGVuIGFxdWVzdFxuIgorImRpcMOyc2l0LCBwZXIgZXhlbXBsZSwgdW4gZWRpdG9yIG9iZXJ0IHBlciDCq2dpdCBjb21taXTCuy4gXG4iCisiQXNzZWd1cmV1LXZvcyBxdWUgdG90cyBlbHMgcHJvY2Vzc29zIHMnaGFnaW4gYWNhYmF0IGlcbiIKKyJsbGF2b3JzIHByb3ZldSBkZSBub3UuIFNpIGVuY2FyYSBmYWxsYSwgcG90IHNlciBxdWUgdW4gcHJvY8OpcyBkZVxuIgorImdpdCBoYSB0aW5ndXQgdW4gZXJyb3I6XG4iCisiZWxpbWluZXUgZWwgZml0eGVyIG1hbnVhbG1lbnQgcGVyIGEgY29udGludWFyLiIKKworIzogbG9ja2ZpbGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNyZWFyIMKrJXMubG9ja8K7OiAlcyIKKworIzogbWVyZ2UuYzo0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgbGEgbWVtw7JyaWEgY2F1IgorCisjOiBtZXJnZS5jOjEwNyByZXJlcmUuYzo3MjAgYnVpbHRpbi9hbS5jOjE4NzQgYnVpbHRpbi9hbS5jOjE5MDgKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MzkgYnVpbHRpbi9jaGVja291dC5jOjc5OCBidWlsdGluL2Nsb25lLmM6ODA5CisjOiBidWlsdGluL3N0YXNoLmM6MjY0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIHVuIGZpdHhlciBkJ8OtbmRleCBub3UiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2NworbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIoY29taXNzacOzIGVycsOybmlhKVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICJhZGRpbmZvX2NhY2hlIGhhIGZhbGxhdCBwZXIgYWwgY2Ftw60gwqslc8K7OyBpbnRlcnJvbXBlbnQgbGEgZnVzacOzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIHRvIHJlZnJlc2ggZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICIiCisiYWRkaW5mb19jYWNoZSBoYSBmYWxsYXQgYWwgcmVmcmVzY2FyIGVsIGNhbcOtIMKrJXPCuzsgaW50ZXJyb21wZW50IGxhIGZ1c2nDsy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIHBhdGggJyVzJyVzIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNyZWFyIGVsIGNhbcOtIMKrJXPCuyVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAiUydlc3TDoCBlbGltaW5hbnQgJXMgcGVyIGEgZmVyIGVzcGFpIHBlciBhbCBzdWJkaXJlY3RvcmlcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTEwIG1lcmdlLXJlY3Vyc2l2ZS5jOjkyOQorbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIjogcG90c2VyIHVuIGNvbmZsaWN0ZSBEL0Y/IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICJzJ2VzdMOgIHJlZnVzYW50IHBlcmRyZSBlbCBmaXR4ZXIgbm8gc2VndWl0IGEgwqslc8K7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NjAgYnVpbHRpbi9jYXQtZmlsZS5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIGwnb2JqZWN0ZSAlcyDCqyVzwrsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICJibG9iIGVzcGVyYXQgcGVyIGEgJXMgwqslc8K7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJzogJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2JyaXIgwqslc8K7OiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnOiAlcyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmZXIgbCdlbmxsYcOnIHNpbWLDsmxpYyDCqyVzwrs6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDA2CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgIm5vIHNlIHNhcCBxdcOoIGZlciBhbWIgJTA2byAlcyDCqyVzwrsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGNoZWNrZWQgb3V0KSIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmdXNpb25hciBlbCBzdWJtw7JkdWwgJXMgKG5vIGVzdMOgIGFnYWZhdCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBub3QgcHJlc2VudCkiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZnVzaW9uYXIgZWwgc3VibcOyZHVsICVzIChubyBoaSBoYSBjb21pc3Npb25zKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIGRvbid0IGZvbGxvdyBtZXJnZS1iYXNlKSIKK21zZ3N0ciAiIgorIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZnVzaW9uYXIgZWwgc3VibcOyZHVsICVzIChsZXMgY29taXNzaW9ucyBubyAiCisic2VndWVpeGVuIG1lcmdlLWJhc2UpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjIxIG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyB0byB0aGUgZm9sbG93aW5nIGNvbW1pdDoiCittc2dzdHIgIkF2YW7Dp2FtZW50IHLDoHBpZCBkZWwgc3VibcOyZHVsICVzIGEgbGEgc2Vnw7xlbnQgY29taXNzacOzOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIyNCBtZXJnZS1yZWN1cnNpdmUuYzoxMjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMiCittc2dzdHIgIkF2YW7Dp2FtZW50IHLDoHBpZCBhbCBzdWJtw7JkdWwgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobWVyZ2UgZm9sbG93aW5nIGNvbW1pdHMgbm90IGZvdW5kKSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBmYXN0LWZvcndhcmQpIgorbXNnc3RyICIiCisiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmdXNpb25hciBlbCBzdWJtw7JkdWwgJXMgKHNlbnNlIGF2YW7Dp2FtZW50IHLDoHBpZCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjQKK21zZ2lkICJGb3VuZCBhIHBvc3NpYmxlIG1lcmdlIHJlc29sdXRpb24gZm9yIHRoZSBzdWJtb2R1bGU6XG4iCittc2dzdHIgIlMnaGEgdHJvYmF0IHVuYSBwb3NzaWJsZSByZXNvbHVjacOzIGRlIGZ1c2nDsyBwZWwgc3VibcOyZHVsOlxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB0aGlzIGlzIGNvcnJlY3Qgc2ltcGx5IGFkZCBpdCB0byB0aGUgaW5kZXggZm9yIGV4YW1wbGVcbiIKKyJieSB1c2luZzpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorIndoaWNoIHdpbGwgYWNjZXB0IHRoaXMgc3VnZ2VzdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG11bHRpcGxlIG1lcmdlcyBmb3VuZCkiCittc2dzdHIgIiIKKyJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGZ1c2lvbmFyIGVsIHN1Ym3DsmR1bCAlcyAocydoYW4gdHJvYmF0IG3Dumx0aXBsZXMgIgorImZ1c2lvbnMpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzQ5Cittc2dpZCAiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXhlY3V0YXIgbGEgZnVzacOzIGludGVybmEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhZmVnaXIgJXMgYSBsYSBiYXNlIGRlIGRhZGVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAiUydlc3TDoCBhdXRvZnVzaW9uYW50ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyB3cml0aW5nIHRvICVzIGluc3RlYWQuIgorbXNnc3RyICIiCisiRXJyb3I6IHMnZXN0w6AgcmVmdXNhbnQgcGVyZHJlIGVsIGZpdHhlciBubyBzZWd1aXQgYSAlczsgZW4gY29tcHRlcyBzJ2hhICIKKyJlc2NyaXQgYSAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKK21zZ3N0ciAiIgorIkNPTkZMSUNURTogKCVzL3N1cHJlc3Npw7MpOiAlcyBzdXByaW1pdCBlbiAlcyBpICVzIGVuICVzLiBMYSB2ZXJzacOzICVzIGRlICVzICIKKyJzJ2hhIGRlaXhhdCBlbiBsJ2FyYnJlLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUuIgorbXNnc3RyICIiCisiQ09ORkxJQ1RFOiAoJXMvc3VwcmVzc2nDsyk6ICVzIHN1cHJpbWl0IGVuICVzIGkgJXMgYSAlcyBlbiAlcy4gTGEgdmVyc2nDsyAlcyAiCisiZGUgJXMgcydoYSBkZWl4YXQgZW4gbCdhcmJyZS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIkNPTkZMSUNURTogKCVzL3N1cHJlc3Npw7MpOiAlcyBzdXByaW1pdCBlbiAlcyBpICVzIGVuICVzLiBMYSB2ZXJzacOzICVzIGRlICVzICIKKyJzJ2hhIGRlaXhhdCBlbiBsJ2FyYnJlIGEgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJDT05GTElDVEU6ICglcy9zdXByZXNzacOzKTogJXMgc3VwcmltaXQgZW4gJXMgaSAlcyBhICVzIGVuICVzLiBMYSB2ZXJzacOzICVzICIKKyJkZSAlcyBzJ2hhIGRlaXhhdCBlbiBsJ2FyYnJlIGEgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTM0Cittc2dpZCAicmVuYW1lIgorbXNnc3RyICJjYW52aSBkZSBub20iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MzQKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICJjYW52aWF0IGRlIG5vbSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYxNCBtZXJnZS1yZWN1cnNpdmUuYzoyNTMwIG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0ICVzIgorbXNnc3RyICJTJ2VzdMOgIHJlZnVzYW50IGEgcGVyZHJlIGVsIGZpdHhlciBicnV0IGEgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAiIgorIlMnZXN0w6AgcmVmdXNhbnQgcGVyZHJlIGVsIGZpdHhlciBubyBzZWd1aXQgYSDCqyVzwrssIG1hbGdyYXQgcXVlIGVzdMOgIGVuIG1pZyAiCisiZGUgbCdvcGVyYWNpw7MuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gIEFkZGVkICVzIGluICVzIgorbXNnc3RyICIiCisiQ09ORkxJQ1RFIChjYW52aSBkZSBub20vYWZlZ2ltZW50KTogQ2FudmkgZGUgbm9tICVzLT4lcyBhICVzLiAgUydoYSBhZmVnaXQgIgorIiVzIGEgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVzIMOpcyB1biBkaXJlY3RvcmkgZW4gJXM7IHMnZXN0w6AgYWZlZ2ludCBjb20gYSAlcyBlbiBsbG9jIGQnYWl4w7IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiIKKyJzJ2VzdMOgIHJlZnVzYW50IHBlcmRyZSBlbCBmaXR4ZXIgbm8gc2VndWl0IGEgJXM7IGVuIGNvbXB0ZXMsIHMnZXN0w6AgYWZlZ2ludCAiCisiY29tIGEgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lIFwiJXMiCisiXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAiIgorIkNPTkZMSUNURSAoY2FudmkgZGUgbm9tL2NhbnZpIGRlIG5vbSk6IENhbnZpIGRlIG5vbSDCqyVzwrstPsKrJXPCuyBlbiBsYSBicmFuY2EgIgorIsKrJXPCuyBjYW52aSBkZSBub20gwqslc8K7LT7CqyVzwrsgZW4gwqslc8K7JXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NDIKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAoZGVpeGF0IHNlbnNlIHJlc29sdWNpw7MpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSUNURSAoY2FudmkgZGUgbm9tL2NhbnZpIGRlIG5vbSk6IENhbnZpIGRlIG5vbSAlcy0+JXMgZW4gJXMuIENhbnZpIGRlICIKKyJub20gJXMtPiVzIGVuICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZGlyZWN0b3J5IHJlbmFtZSBzcGxpdCk6IFVuY2xlYXIgd2hlcmUgdG8gcGxhY2UgJXMgYmVjYXVzZSAiCisiZGlyZWN0b3J5ICVzIHdhcyByZW5hbWVkIHRvIG11bHRpcGxlIG90aGVyIGRpcmVjdG9yaWVzLCB3aXRoIG5vIGRlc3RpbmF0aW9uICIKKyJnZXR0aW5nIGEgbWFqb3JpdHkgb2YgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IEV4aXN0aW5nIGZpbGUvZGlyIGF0ICVzIGluIHRoZSB3YXkgb2YgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWUocykgcHV0dGluZyB0aGUgZm9sbG93aW5nIHBhdGgocykgdGhlcmU6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IENhbm5vdCBtYXAgbW9yZSB0aGFuIG9uZSBwYXRoIHRvICVzOyAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZXMgdHJpZWQgdG8gcHV0IHRoZXNlIHBhdGhzIHRoZXJlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiBSZW5hbWUgZGlyZWN0b3J5ICVzLSIKKyI+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJDT05GTElDVEUgKGNhbnZpIGRlIG5vbS9jYW52aSBkZSBub20pOiBjYW52aSBkZSBub20gJXMtPiVzIGVuICVzLiBDYW52aSBkZSAiCisibm9tIGRlIGRpcmVjdG9yaSAlcy0+JXMgZW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nICVzIC0+ICVzIHJlbmFtZSB0byAlcywgYmVjYXVzZSAlcyBpdHNlbGYgd2FzICIKKyJyZW5hbWVkLiIKK21zZ3N0ciAiIgorIkFWw41TOiBTJ2VzdMOgIGV2aXRhbnQgYXBsaWNhciBlbCBjYW52aSBkZSBub20gJXMgLT4gJXMgYSAlcywgcGVycXXDqCAlcyBlbGwgIgorIm1hdGVpeCBqYSBoYXZpYSBjYW52aWF0IGRlIG5vbS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIGwnb2JqZWN0ZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyMgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAibCdvYmplY3RlICVzIG5vIMOpcyB1biBibG9iIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDg2Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICJtb2RpZmljYWNpw7MiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODYKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAibW9kaWZpY2F0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDk4Cittc2dpZCAiY29udGVudCIKK21zZ3N0ciAiY29udGluZ3V0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTAyCittc2dpZCAiYWRkL2FkZCIKK21zZ3N0ciAiYWZlZ2ltZW50L2FmZWdpbWVudCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIlMnaGEgb23DqHMgJXMgKGVsIGZ1c2lvbmF0IMOpcyBpZ3VhbCBhIGwnZXhpc3RlbnQpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTQ3IGdpdC1zdWJtb2R1bGUuc2g6OTkzCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJzdWJtw7JkdWwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIkNPTkZMSUNURSAoJXMpOiBDb25mbGljdGUgZGUgZnVzacOzIGVuICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICJTJ2VzdMOgIGFmZWdpbnQgY29tIGEgJXMgZW4gbGxvYyBkJ2FpeMOyIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzOyAiCisibW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkICIKKyJpbiAlcywgc3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAiCisiJXM7IG1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCAiCisid2FzIHJlbmFtZWQgaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgIlMnZXN0w6AgZWxpbWluYW50ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDA4Cittc2dpZCAiZmlsZS9kaXJlY3RvcnkiCittc2dzdHIgImZpdHhlci9kaXJlY3RvcmkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MTMKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAiZGlyZWN0b3JpL2ZpdHhlciIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSUNURSAoJXMpOiBIaSBoYSB1biBkaXJlY3RvcmkgYW1iIG5vbSAlcyBlbiAlcy4gUydlc3TDoCBhZmVnaW50ICVzIGNvbSBhICIKKyIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIlMnZXN0w6AgYWZlZ2ludCAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoYWRkL2FkZCk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJDT05GTElDVEUgKGFmZWdpbWVudC9hZmVnaW1lbnQpOiBDb25mbGljdGUgZGUgZnVzacOzIGVuICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDgyCittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlISIKK21zZ3N0ciAiSmEgZXN0w6AgYWwgZGlhISIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiCittc2dzdHIgImxhIGZ1c2nDsyBkZWxzIGFyYnJlcyAlcyBpICVzIGhhIGZhbGxhdCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzU5NQorbXNnaWQgIk1lcmdpbmc6IgorbXNnc3RyICJTJ2VzdMOgIGZ1c2lvbmFudDoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIKK21zZ2lkX3BsdXJhbCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiCittc2dzdHJbMF0gInMnaGEgdHJvYmF0ICV1IGF2YW50cGFzc2F0IGVuIGNvbcO6OiIKK21zZ3N0clsxXSAicydoYW4gdHJvYmF0ICV1IGF2YW50cGFzc2F0cyBlbiBjb23DujoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2NTgKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgImxhIGZ1c2nDsyBubyBoYSByZXRvcm5hdCBjYXAgY29taXNzacOzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIgICVzIgorbXNnc3RyICIiCisiRWxzIGNhbnZpcyBsb2NhbHMgYWxzIGZpdHhlcnMgc2Vnw7xlbnRzIHNlIHNvYnJlZXNjcml1cmFuIHBlciBsYSBmdXNpw7M6XG4iCisiICAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGwnb2JqZWN0ZSDCqyVzwrsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM4MzIgYnVpbHRpbi9tZXJnZS5jOjY5NCBidWlsdGluL21lcmdlLmM6ODc0Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBlc2NyaXVyZSBsJ8OtbmRleC4iCisKKyM6IG1pZHguYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSAweCUwOHggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCB2ZXJzaW9uICVkIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaGFzaCB2ZXJzaW9uICV1IGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJlbCBjYW3DrSDCqyVzwrsgbm8gdMOpIGxhIHNldmEgdmVyc2nDsyIKKworIzogbWlkeC5jOjEwOAorbXNnaWQgImludmFsaWQgY2h1bmsgb2Zmc2V0ICh0b28gbGFyZ2UpIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMzIKK21zZ2lkICJ0ZXJtaW5hdGluZyBtdWx0aS1wYWNrLWluZGV4IGNodW5rIGlkIGFwcGVhcnMgZWFybGllciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxNDUKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgcGFjay1uYW1lIGNodW5rIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxNDcKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGZhbm91dCBjaHVuayIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTQ5Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBsb29rdXAgY2h1bmsiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjE1MQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBvYmplY3Qgb2Zmc2V0cyBjaHVuayIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggcGFjayBuYW1lcyBvdXQgb2Ygb3JkZXI6ICclcycgYmVmb3JlICclcyciCittc2dzdHIgIiIKKworIzogbWlkeC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay1pbnQtaWQ6ICV1ICgldSB0b3RhbCBwYWNrcykiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjI2MAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc3RvcmVzIGEgNjQtYml0IG9mZnNldCwgYnV0IG9mZl90IGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6Mjg4Cittc2dpZCAiZXJyb3IgcHJlcGFyaW5nIHBhY2tmaWxlIGZyb20gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6NDcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWRkIHBhY2tmaWxlICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbGxlZ2lyIGVsIGZpdHhlciBkJ29yZHJlcyDCqyVzwrsiCisKKyM6IG1pZHguYzo0NzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBhY2staW5kZXggJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBvYnJpciDCqyVzwrsiCisKKyM6IG1pZHguYzo1MzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2NhdGUgb2JqZWN0ICVkIGluIHBhY2tmaWxlIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBsJ29iamVjdGUgwqslc8K7LiIKKworIzogbWlkeC5jOjg0MgorIywgZnV6enkKK21zZ2lkICJBZGRpbmcgcGFja2ZpbGVzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbmV0ZWphciBsJ8OtbmRleCIKKworIzogbWlkeC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHNlZSBwYWNrLWZpbGUgJXMgdG8gZHJvcCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6OTczCittc2dpZCAiV3JpdGluZyBjaHVua3MgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTA1MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbmV0ZWphciBsJ8OtbmRleCIKKworIzogbWlkeC5jOjExMDgKK21zZ2lkICJMb29raW5nIGZvciByZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAiUydlc3RhbiBjZXJjYW50IGZpdHhlcnMgZGUgcGFxdWV0cyByZWZlcmVuY2lhdHMiCisKKyM6IG1pZHguYzoxMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvaWQgZmFub3V0IG91dCBvZiBvcmRlcjogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCittc2dzdHIgIiIKKworIzogbWlkeC5jOjExMjgKK21zZ2lkICJWZXJpZnlpbmcgT0lEIG9yZGVyIGluIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjExMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAib2lkIGxvb2t1cCBvdXQgb2Ygb3JkZXI6IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCittc2dzdHIgIiIKKworIzogbWlkeC5jOjExNTcKK21zZ2lkICJTb3J0aW5nIG9iamVjdHMgYnkgcGFja2ZpbGUiCittc2dzdHIgIlMnZXN0YW4gb3JkZW5hbnQgZWxzIG9iamVjdGVzIHBlciBmaXR4ZXIgZGUgcGFxdWV0IgorCisjOiBtaWR4LmM6MTE2NAorbXNnaWQgIlZlcmlmeWluZyBvYmplY3Qgb2Zmc2V0cyIKK21zZ3N0ciAiUydlc3RhbiB2ZXJpZmljYW50IGVscyBkZXNwbGHDp2FtZW50cyBkZWxzIG9iamVjdGVzIgorCisjOiBtaWR4LmM6MTE4MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgcGFjayBlbnRyeSBmb3Igb2lkWyVkXSA9ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFmZWdpciB1bmEgZW50cmFkYSBkZSBjYXUgcGVyIGEgJXMiCisKKyM6IG1pZHguYzoxMTg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrLWluZGV4IGZvciBwYWNrZmlsZSAlcyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgZWwgZml0eGVyIGQnb3JkcmVzIMKrJXPCuyIKKworIzogbWlkeC5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb3JyZWN0IG9iamVjdCBvZmZzZXQgZm9yIG9pZFslZF0gPSAlczogJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTIyMAorbXNnaWQgIkNvdW50aW5nIHJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAiUydlc3RhbiBjb21wdGFudCBlbHMgb2JqZWN0ZXMgcmVmZXJlbmNpYXRzIgorCisjOiBtaWR4LmM6MTIzMAorbXNnaWQgIkZpbmRpbmcgYW5kIGRlbGV0aW5nIHVucmVmZXJlbmNlZCBwYWNrZmlsZXMiCittc2dzdHIgIlMnZXN0YW4gY2VyY2FudCBpIHN1cHJpbWludCBlbHMgZml0eGVycyBkZSBwYXF1ZXRzIG5vIHJlZmVyZW5jaWF0cyIKKworIzogbWlkeC5jOjEzODgKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyIGVsIHBhY2stb2JqZWN0cyIKKworIzogbWlkeC5jOjE0MDcKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBmaW5hbGl0emFyIGVsIHBhY2stb2JqZWN0cyIKKworIzogbmFtZS1oYXNoLmM6NTM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfZGlyIHRocmVhZDogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZmlsOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIGZpbDogJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU2NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZmlsOiAlcyIKKworIzogbm90ZXMtbWVyZ2UuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBwcmV2aW91cyBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIHVzZSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHRvICIKKyJjb21taXQvYWJvcnQgdGhlIHByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgbm90ZXMgbWVyZ2UuIgorbXNnc3RyICIiCisiTm8gaGV1IGFjYWJhdCBsYSB2b3N0cmEgZnVzacOzIGRlIG5vdGVzIHByw6h2aWEgKCVzIGV4aXN0ZWl4KS5cbiIKKyJVc2V1IMKrZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0wrsgbyDCq2dpdCBub3RlcyBtZXJnZSAtLWFib3J0wrsgcGVyIGEgY29tZXRyZS8iCisiYXZvcnRhciBsYSBmdXNpw7MgcHLDqHZpYSBhYmFucyBkZSBjb21lbsOnYXIgdW5hIGZ1c2nDsyBkZSBub3RlcyBub3ZhLiIKKworIzogbm90ZXMtbWVyZ2UuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLiIKK21zZ3N0ciAiTm8gaGV1IGNvbmNsw7JzIGxhIHZvc3RyYSBmdXNpw7MgZGUgbm90ZXMgKCVzIGV4aXN0ZWl4KS4iCisKKyM6IG5vdGVzLXV0aWxzLmM6NDYKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIk5vIGVzIHBvdCBjb21ldHJlIHVuIGFyYnJlIGRlIG5vdGVzIG5vIGluaWNpYWxpdHphdCAvIG5vIHJlZmVyZW5jaWF0IgorCisjOiBub3Rlcy11dGlscy5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgIlZhbG9yIGRlIG5vdGVzLnJld3JpdGVNb2RlIGVycm9uaTogwqslc8K7IgorCisjOiBub3Rlcy11dGlscy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiUydlc3TDoCByZWZ1c2FudCByZWVzY3JpdXJlIGxlcyBub3RlcyBlbiAlcyAoZm9yYSBkZSByZWZzL25vdGVzLykiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YKKyMuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcworIy4gaXRzIHZhbHVlLgorIy4KKyM6IG5vdGVzLXV0aWxzLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVmFsb3IgZXJyb25pIGRlICVzOiDCqyVzwrsiCisKKyM6IG9iamVjdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUgXCIlc1wiIgorbXNnc3RyICJ0aXB1cyBkJ29iamVjdGUgwqslc8K7IG5vIHbDoGxpZCIKKworIzogb2JqZWN0LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBhICVzLCBub3QgYSAlcyIKK21zZ3N0ciAibCdvYmplY3RlICVzIMOpcyAlcywgbm8gcGFzICVzIgorCisjOiBvYmplY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGhhcyB1bmtub3duIHR5cGUgaWQgJWQiCittc2dzdHIgImwnb2JqZWN0ZSAlcyB0w6kgdW4gaWRlbnRpZmljYWRvciBkZSB0aXB1cyAlZCBkZXNjb25lZ3V0IgorCisjOiBvYmplY3QuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdDogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGwnb2JqZWN0ZTogJXMiCisKKyM6IG9iamVjdC5jOjI2NiBvYmplY3QuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCAlcyIKK21zZ3N0ciAiIgorCisjOiBwYWNrZmlsZS5jOjY0MQorbXNnaWQgIm9mZnNldCBiZWZvcmUgZW5kIG9mIHBhY2tmaWxlIChicm9rZW4gLmlkeD8pIgorbXNnc3RyICJkZXNwbGHDp2FtZW50IGFiYW5zIGRlIGxhIGZpIGRlbCBmaXR4ZXIgZGUgcGFxdWV0ICguaWR4IHRyZW5jYXQ/KSIKKworIzogcGFja2ZpbGUuYzoxODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZWZvcmUgc3RhcnQgb2YgcGFjayBpbmRleCBmb3IgJXMgKGNvcnJ1cHQgaW5kZXg/KSIKK21zZ3N0ciAiIgorImRlc3BsYcOnYW1lbnQgYWJhbnMgZCdpbmljaSBkJ8OtbmRleCBkZSBwYXF1ZXQgcGVyIGEgJXMgKMOtbmRleCBjb3Jyb21wdXQ/KSIKKworIzogcGFja2ZpbGUuYzoxODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZXlvbmQgZW5kIG9mIHBhY2sgaW5kZXggZm9yICVzICh0cnVuY2F0ZWQgaW5kZXg/KSIKK21zZ3N0ciAiIgorImRlc3BsYcOnYW1lbnQgbcOpcyBlbmxsw6AgZGUgbGEgZmkgZCfDrW5kZXggZGUgcGFxdWV0IHBlciBhICVzICjDrW5kZXggdHJ1bmNhdD8pIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiJXMgcmVxdWVyZWl4IHVuIHZhbG9yIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJXMiCittc2dzdHIgIiVzIMOpcyBpbmNvbXBhdGlibGUgYW1iICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBpbmNvbXBhdGlibGUgd2l0aCBzb21ldGhpbmcgZWxzZSIKK21zZ3N0ciAiJXM6IMOpcyBpbmNvbXBhdGlibGUgYW1iIGFsZ3VuYSBhbHRyYSBjb3NhIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTIgcGFyc2Utb3B0aW9ucy5jOjk2IHBhcnNlLW9wdGlvbnMuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGFrZXMgbm8gdmFsdWUiCittc2dzdHIgIiVzIG5vIGFjY2VwdGEgY2FwIHZhbG9yIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXNuJ3QgYXZhaWxhYmxlIgorbXNnc3RyICIlcyBubyDDqXMgZGlzcG9uaWJsZSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2l0aCBhbiBvcHRpb25hbCBrL20vZyBzdWZmaXgiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgb3B0aW9uOiAlcyAoY291bGQgYmUgLS0lcyVzIG9yIC0tJXMlcykiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjQyMyBwYXJzZS1vcHRpb25zLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyA/KSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uIGAlcyciCittc2dzdHIgIm9wY2nDsyBkZXNjb25lZ3VkYSDCqyVzwrsiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzd2l0Y2ggYCVjJyIKK21zZ3N0ciAiwqtzd2l0Y2jCuyDCqyVjwrsgZGVzY29uZWd1dCIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vbi1hc2NpaSBvcHRpb24gaW4gc3RyaW5nOiBgJXMnIgorbXNnc3RyICJvcGNpw7Mgbm8gYXNjaWkgZGVzY29uZWd1ZGEgZW4gbGEgY2FkZW5hOiDCqyVzwrsiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4ODgKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgIsO6czogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBwYXJzZS1vcHRpb25zLmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiIG86ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTU1Cittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLU5VTSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk2OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBvZiAtLSVzIgorbXNnc3RyICLDoGxpZXMgZGUgLS0lcyIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjIwIHBhcnNlLW9wdGlvbnMtY2IuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJsJ29wY2nDsyDCqyVzwrsgZXNwZXJhIHVuIHZhbG9yIG51bcOocmljIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGV4cGlyYXRpb24gZGF0ZSAnJXMnIgorbXNnc3RyICJkYXRhIGRlIHZlbmNpbWVudCDCqyVzwrsgbWFsIGZvcm1hZGEiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIFwiYWx3YXlzXCIsIFwiYXV0b1wiLCBvciBcIm5ldmVyXCIiCittc2dzdHIgImwnb3BjacOzIMKrJXPCuyBlc3BlcmEgwqthbHdheXPCuywgwqthdXRvwrsgbyDCq25ldmVywrsiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoxMzAgcGFyc2Utb3B0aW9ucy1jYi5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAibm9tIGQnb2JqZWN0ZSDCqyVzwrsgbWFsIGZvcm1hdCIKKworIzogcGF0aC5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBmZXIgJXMgZXNjcml2aWJsZSBwZWwgZ3J1cCIKKworIzogcGF0aHNwZWMuYzoxMzAKK21zZ2lkICJFc2NhcGUgY2hhcmFjdGVyICdcXCcgbm90IGFsbG93ZWQgYXMgbGFzdCBjaGFyYWN0ZXIgaW4gYXR0ciB2YWx1ZSIKK21zZ3N0ciAiIgorIkVsIGNhcsOgY3RlciBkJ2VzY2FwYW1lbnQgwqtcXMK7IG5vIGVzdMOgIHBlcm3DqHMgY29tIGEgw7psdGltIGNhcsOgY3RlciBlbiB1biAiCisidmFsb3IgZCd1biBhdHJpYnV0IgorCisjOiBwYXRoc3BlYy5jOjE0OAorbXNnaWQgIk9ubHkgb25lICdhdHRyOicgc3BlY2lmaWNhdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiTm9tw6lzIGVzIHBlcm1ldCB1bmEgZXNwZWNpZmljYWNpw7MgwqthdHRyOsK7LiIKKworIzogcGF0aHNwZWMuYzoxNTEKK21zZ2lkICJhdHRyIHNwZWMgbXVzdCBub3QgYmUgZW1wdHkiCittc2dzdHIgInVuYSBlc3BlY2lmaWNhY2nDsyBkJ2F0cmlidXQgbm8gcG90IGVzdGFyIGJ1aWRhIgorCisjOiBwYXRoc3BlYy5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSBuYW1lICVzIgorbXNnc3RyICJub20gZCdhdHJpYnV0IG5vIHbDoGxpZCAlcyIKKworIzogcGF0aHNwZWMuYzoyNTkKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisiZWxzIHBhcsOgbWV0cmVzIGQnZXNwZWNpZmljYWNpw7MgZGUgY2Ftw60gwqtnbG9iwrsgaSDCq25vZ2xvYsK7IGdsb2JhbHMgc8OzbiAiCisiaW5jb21wYXRpYmxlcyIKKworIzogcGF0aHNwZWMuYzoyNjYKK21zZ2lkICIiCisiZ2xvYmFsICdsaXRlcmFsJyBwYXRoc3BlYyBzZXR0aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBnbG9iYWwgIgorInBhdGhzcGVjIHNldHRpbmdzIgorbXNnc3RyICIiCisiZWwgcGFyw6BtZXRyZSBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtIMKrbGl0ZXJhbMK7IGdsb2JhbCDDqXMgaW5jb21wYXRpYmxlIGFtYiAiCisidG90cyBlbHMgYWx0cmVzIHBhcsOgbWV0cmVzIGQnZXNwZWNpZmljYWNpw7MgZGUgY2Ftw60gZ2xvYmFscyIKKworIzogcGF0aHNwZWMuYzozMDYKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgcGF0aHNwZWMgbWFnaWMgJ3ByZWZpeCciCittc2dzdHIgInBhcsOgbWV0cmUgbm8gdsOgbGlkIHBlciBhIGxhIG3DoGdpYSBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtIMKrcHJlZml4wrsiCisKKyM6IHBhdGhzcGVjLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIk3DoGdpYSBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtIG5vIHbDoGxpZGEgJyUuKnMnIGVuIMKrJXPCuyIKKworIzogcGF0aHNwZWMuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnKScgYXQgdGhlIGVuZCBvZiBwYXRoc3BlYyBtYWdpYyBpbiAnJXMnIgorbXNnc3RyICLCqynCuyBtYW5jYW50IGFsIGZpbmFsIGRlIGxhIG3DoGdpYSBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtIGVuIMKrJXPCuyIKKworIzogcGF0aHNwZWMuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIk3DoGdpYSBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtIG5vIGltcGxlbWVudGFkYSDCqyVjwrsgZW4gwqslc8K7IgorCisjOiBwYXRoc3BlYy5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJ2xpdGVyYWwnIGFuZCAnZ2xvYicgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiJXM6IMKrbGl0ZXJhbMK7IGkgwqtnbG9iwrsgc8OzbiBpbmNvbXBhdGlibGVzIgorCisjOiBwYXRoc3BlYy5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzOiDCqyVzwrsgw6lzIGZvcmEgZGVsIGRpcMOyc2l0IgorCisjOiBwYXRoc3BlYy5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIChtbmVtb25pYzogJyVjJykiCittc2dzdHIgIsKrJXPCuyAobW5lbcOybmljOiDCqyVjwrspIgorCisjOiBwYXRoc3BlYy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIiCisiJXM6IGFxdWVzdGEgb3JkcmUgbm8gZXN0w6AgYWRtZXNhIGFtYiBsYSBtw6BnaWEgZCdlc3BlY2lmaWNhY2nDsyBkZSBjYW3DrTogJXMiCisKKyM6IHBhdGhzcGVjLmM6NTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAibCdlc3BlY2lmaWNhY2nDsyBkZSBjYW3DrSDCqyVzwrsgw6lzIG3DqXMgZW5sbMOgIGQndW4gZW5sbGHDpyBzaW1iw7JsaWMiCisKKyM6IHBhdGhzcGVjLmM6NjM4CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgaXMgYmFkbHkgcXVvdGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBlbCBwYXF1ZXQgZGUgYnVpZGF0Z2UiCisKKyM6IHBrdC1saW5lLmM6OTkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZGVsaW0gcGFja2V0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGVsIHBhcXVldCBkZWxpbSIKKworIzogcGt0LWxpbmUuYzoxMDYKK21zZ2lkICJmbHVzaCBwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVzY3JpdXJlIGVsIHBhcXVldCBkZSBidWlkYXRnZSIKKworIzogcGt0LWxpbmUuYzoxNDYgcGt0LWxpbmUuYzoyMzIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiCittc2dzdHIgImVycm9yIGRlIHByb3RvY29sOiBsb25naXR1ZCBkZSBsw61uaWEgaW1wb3NzaWJsZSIKKworIzogcGt0LWxpbmUuYzoxNjIgcGt0LWxpbmUuYzoxNjQKK21zZ2lkICJwYWNrZXQgd3JpdGUgd2l0aCBmb3JtYXQgZmFpbGVkIgorbXNnc3RyICJoYSBmYWxsYXQgbCdlc2NyaXB0dXJhIGRlbCBwYXF1ZXQgYW1iIGZvcm1hdCIKKworIzogcGt0LWxpbmUuYzoxOTYKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIC0gZGF0YSBleGNlZWRzIG1heCBwYWNrZXQgc2l6ZSIKK21zZ3N0ciAiIgorIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgZWwgcGFxdWV0IC0gbGVzIGRhZGVzIGV4Y2VkZWl4ZW4gbGEgbWlkYSBtw6B4aW1hIGRlbCAiCisicGFxdWV0IgorCisjOiBwa3QtbGluZS5jOjIwMyBwa3QtbGluZS5jOjIxMAorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgZWwgcGFxdWV0IgorCisjOiBwa3QtbGluZS5jOjI5NQorbXNnaWQgInJlYWQgZXJyb3IiCittc2dzdHIgImVycm9yIGRlIGxlY3R1cmEiCisKKyM6IHBrdC1saW5lLmM6MzAzCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiCittc2dzdHIgImVsIHJlbW90IGhhIHBlbmphdCBpbmVzcGVyYWRhbWVudCIKKworIzogcGt0LWxpbmUuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCBjaGFyYWN0ZXI6ICUuNHMiCittc2dzdHIgImVycm9yIGRlIHByb3RvY29sOiBjYXLDoGN0ZXIgZGUgbG9uZ2l0dWQgZGUgbMOtbmlhIGVycm9uaTogJS40cyIKKworIzogcGt0LWxpbmUuYzozNDEgcGt0LWxpbmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCAlZCIKK21zZ3N0ciAiZXJyb3IgZGUgcHJvdG9jb2w6IGxvbmdpdHVkIGRlIGzDrW5pYSBlcnLDsm5pYSAlZCIKKworIzogcGt0LWxpbmUuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAiZXJyb3IgcmVtb3Q6ICVzIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTE5Cittc2dpZCAiUmVmcmVzaGluZyBpbmRleCIKK21zZ3N0ciAiUydlc3TDoCBhY3R1YWxpdHphbnQgbCfDrW5kZXgiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQ6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIGZpbDogJXMiCisKKyM6IHByZXR0eS5jOjk4MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGVsIGZvcm1hdCAtLXByZXR0eSIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6MjMKK21zZ2lkICJSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgIlJlbW90IHNlbnNlIFVSTCIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbWlzb3IgcmVtb3RlIG5hbWUgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIKK21zZ3N0ciAiIgorCisjOiByYW5nZS1kaWZmLmM6NzUKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgYGxvZ2AiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgaW5pY2lhciDCq2xvZ8K7IgorCisjOiByYW5nZS1kaWZmLmM6NzcKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBgbG9nYCBvdXRwdXQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGxhIHNvcnRpZGEgZGUgwqtsb2fCuyIKKworIzogcmFuZ2UtZGlmZi5jOjk2IHNlcXVlbmNlci5jOjUxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjb21pc3Npw7Mgwqslc8K7IgorCisjOiByYW5nZS1kaWZmLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBnaXQgaGVhZGVyICclLipzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgbGEgY2Fww6dhbGVyYSBkZSBsYSBnaWYgwqslLipzwrsiCisKKyM6IHJhbmdlLWRpZmYuYzoyODUKK21zZ2lkICJmYWlsZWQgdG8gZ2VuZXJhdGUgZGlmZiIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBnZW5lcmFyIGVsIGRpZmYiCisKKyM6IHJhbmdlLWRpZmYuYzo1MTggcmFuZ2UtZGlmZi5jOjUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbG9nIGZvciAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBmaXR4ZXIgZGUgcmVnaXN0cmUgcGVyIMKrJXPCuyIKKworIzogcmVhZC1jYWNoZS5jOjY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBhZGQgZmlsZSBhbGlhcyAnJXMnICgnJXMnIGFscmVhZHkgZXhpc3RzIGluIGluZGV4KSIKK21zZ3N0ciAibm8gcydhZmVnaXLDoCBsJ8OgbGllcyDCqyVzwrs6ICjCqyVzwrsgamEgZXhpc3RlaXggZW4gbCfDrW5kZXgpIgorCisjOiByZWFkLWNhY2hlLmM6Njk2Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBhbiBlbXB0eSBibG9iIGluIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIm5vIGVzIHBvdCBjcmVhciB1biBibG9iIGJ1aXQgYSBsYSBiYXNlIGRlIGRhZGVzIGQnb2JqZWN0ZXMiCisKKyM6IHJlYWQtY2FjaGUuYzo3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbiBvbmx5IGFkZCByZWd1bGFyIGZpbGVzLCBzeW1ib2xpYyBsaW5rcyBvciBnaXQtZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKyIlczogbm9tw6lzIHBvdCBhZmVnaXIgZml0eGVycyBub3JtYWxzLCBlbmxsYcOnb3Mgc2ltYsOybGljcyBvIGRpcmVjdG9yaXMgZ2l0IgorCisjOiByZWFkLWNhY2hlLmM6NzIzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIsKrJXPCuyBubyBhc3NlbnlhbGEgdW5hIGNvbWlzc2nDsyIKKworIzogcmVhZC1jYWNoZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaW5kZXggZmlsZSAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIGluZGV4YXIgZWwgZml0eGVyIMKrJXPCuyIKKworIzogcmVhZC1jYWNoZS5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkICclcycgdG8gaW5kZXgiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYWZlZ2lyIMKrJXPCuyBhIGwnw61uZGV4IgorCisjOiByZWFkLWNhY2hlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0ICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZmVyIMKrc3RhdMK7IGEgwqslc8K7IgorCisjOiByZWFkLWNhY2hlLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFwcGVhcnMgYXMgYm90aCBhIGZpbGUgYW5kIGFzIGEgZGlyZWN0b3J5IgorbXNnc3RyICLCqyVzwrsgYXBhcmVpeCBjb20gYSBmaXR4ZXIgaSBjb20gYSBkaXJlY3RvcmkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNTMxCittc2dpZCAiUmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiQWN0dWFsaXR6YSBsJ8OtbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorImluZGV4LnZlcnNpb24gZXN0w6AgZXN0YWJsZXJ0YSwgcGVyw7IgZWwgdmFsb3Igbm8gw6lzIHbDoGxpZC5cbiIKKyJTJ2VzdMOgIHVzYW50IGxhIHZlcnNpw7MgJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisiR0lUX0lOREVYX1ZFUlNJT04gZXN0w6AgZXN0YWJsZXJ0YSwgcGVyw7IgZWwgdmFsb3Igbm8gw6lzIHbDoGxpZC5cbiIKKyJTJ2VzdMOgIHVzYW50IGxhIHZlcnNpw7MgJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaWduYXR1cmUgMHglMDh4IgorbXNnc3RyICJzaWduYXR1cmEgbWFsbWVzYSAweCUwOHgiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzE1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICVkIgorbXNnc3RyICJ2ZXJzacOzIGQnw61uZGV4IGluY29ycmVjdGEgJWQiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzI0Cittc2dpZCAiYmFkIGluZGV4IGZpbGUgc2hhMSBzaWduYXR1cmUiCittc2dzdHIgInNpZ25hdHVyYSBzaGExIG1hbG1lc2EgYWwgZml0eGVyIGQnw61uZGV4IgorCisjOiByZWFkLWNhY2hlLmM6MTc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCB1c2VzICUuNHMgZXh0ZW5zaW9uLCB3aGljaCB3ZSBkbyBub3QgdW5kZXJzdGFuZCIKK21zZ3N0ciAibCfDrW5kZXggdXNhIGwnZXh0ZW5zacOzICUuNHMsIHF1ZSBubyBlcyBwb3QgZW50ZW5kcmUiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICUuNHMgZXh0ZW5zaW9uIgorbXNnc3RyICJzJ2VzdMOgIGlnbm9yYW50IGwnZXh0ZW5zacOzICUuNHMiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW5kZXggZW50cnkgZm9ybWF0IDB4JTA4eCIKK21zZ3N0ciAiZm9ybWF0IGQnZW50cmFkYSBkJ8OtbmRleCBkZXNjb25lZ3VkYSDCqzB4JTA4eMK7IgorCisjOiByZWFkLWNhY2hlLmM6MTgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbmFtZSBmaWVsZCBpbiB0aGUgaW5kZXgsIG5lYXIgcGF0aCAnJXMnIgorbXNnc3RyICJjYW1wIGRlbCBub20gbWFsIGZvcm1hdGF0IGwnaW5kZXgsIGNhbcOtIGEgcHJvcCDCqyVzwrsiCisKKyM6IHJlYWQtY2FjaGUuYzoxODY2Cittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgaW4gaW5kZXgiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE4NjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHN0YWdlIGVudHJpZXMgZm9yIG1lcmdlZCBmaWxlICclcyciCittc2dzdHIgIm5vbSBkJ2lkZW50aXRhdCBidWl0IChwZXIgPCVzPikgbm8gw6lzIHBlcm3DqHMiCisKKyM6IHJlYWQtY2FjaGUuYzoxODcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBmb3IgJyVzJyIKK21zZ3N0ciAibm8gcydoYW4gcG9ndXQgY3JlYXIgZGlyZWN0b3JpcyBwZXIgJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoxOTc4IHJlYWQtY2FjaGUuYzoyMjY2IHJlcmVyZS5jOjU2NSByZXJlcmUuYzo1OTkgcmVyZXJlLmM6MTExMQorIzogYnVpbHRpbi9hZGQuYzo0OTkgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzggYnVpbHRpbi9jaGVja291dC5jOjQ3MAorIzogYnVpbHRpbi9jaGVja291dC5jOjY1NCBidWlsdGluL2NsZWFuLmM6OTY3IGJ1aWx0aW4vY29tbWl0LmM6MzY3CisjOiBidWlsdGluL2RpZmYtdHJlZS5jOjEyMCBidWlsdGluL2dyZXAuYzo0OTkgYnVpbHRpbi9tdi5jOjE0NQorIzogYnVpbHRpbi9yZXNldC5jOjI0NiBidWlsdGluL3JtLmM6MjcxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozMzIKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQiCittc2dzdHIgImZpdHhlciBkJ8OtbmRleCBtYWxtw6hzIgorCisjOiByZWFkLWNhY2hlLmM6MjExOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2NhY2hlX2VudHJpZXMgdGhyZWFkOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBmaWw6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjEzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZmlsOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxNjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIG9wZW4gZmFpbGVkIgorbXNnc3RyICIlczogcydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhY3R1YWxpdHphciBlbHMgZml0eGVycyIKKworIzogcmVhZC1jYWNoZS5jOjIxNjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgc3RhdCB0aGUgb3BlbiBpbmRleCIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciBsJ8OtbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjIxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgc21hbGxlciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIlczogZml0eGVyIGQnw61uZGV4IG3DqXMgcGV0aXQgcXVlIHMnZXNwZXJhdmEiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmFibGUgdG8gbWFwIGluZGV4IGZpbGUiCittc2dzdHIgIiVzOiBubyBlcyBwb3QgbWFwYXIgZWwgZml0eGVyIGQnw61uZGV4IgorCisjOiByZWFkLWNhY2hlLmM6MjIxOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2luZGV4X2V4dGVuc2lvbnMgdGhyZWFkOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBmaWw6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI0NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZmlsOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZyZXNoZW4gc2hhcmVkIGluZGV4ICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgcmVmcmVzY2FyIGwnw61uZGV4IGNvbXBhcnRpdCDCqyVzwrsiCisKKyM6IHJlYWQtY2FjaGUuYzoyMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiCittc2dzdHIgIsOtbmRleCBtYWxtw6hzLCBzJ2VzcGVyYXZhICVzIGEgJXMsIHMnaGEgcmVidXQgJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMDIxIHN0cmJ1Zi5jOjExNDUgd3JhcHBlci5jOjYyMiBidWlsdGluL21lcmdlLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCB0YW5jYXIgwqslc8K7IgorCisjOiByZWFkLWNhY2hlLmM6MzEyNCBzZXF1ZW5jZXIuYzoyNDI5IHNlcXVlbmNlci5jOjQwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBmZXIgc3RhdCBhIMKrJXPCuyIKKworIzogcmVhZC1jYWNoZS5jOjMxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gZ2l0IGRpcjogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgZGlyZWN0b3JpIGdpdDogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bmxpbms6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGRlc2VubGxhw6dhcjogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZml4IHBlcm1pc3Npb24gYml0cyBvbiAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIGxhIHJldmlzacOzOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMzMjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgZHJvcCB0byBzdGFnZSAjMCIKK21zZ3N0ciAibm8gZXMgcG90IGNhbnZpYXIgZGUgZGlyZWN0b3JpIGEgJXMiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bnJlY29nbml6ZWQgc2V0dGluZyAlcyBmb3Igb3B0aW9uIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiBJZ25vcmluZy4iCittc2dzdHIgIiIKKyJObyBzJ2hhIHJlY29uZWd1dCBlbCBwYXLDoG1ldHJlICVzIHBlciByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gUydlc3TDoCAiCisiaWdub3JhbnQuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzozNQorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1hbmQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImIsIGJyZWFrID0gc3RvcCBoZXJlIChjb250aW51ZSByZWJhc2UgbGF0ZXIgd2l0aCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJylcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPcmRyZXM6XG4iCisiIHAsIHBpY2sgPSB1c2EgbGEgY29taXNzacOzXG4iCisiIHIsIHJld29yZCA9IHVzYSBsYSBjb21pc3Npw7MsIHBlcsOyIGVkaXRhIGVsIG1pc3NhdGdlIGRlIGNvbWlzc2nDs1xuIgorIiBlLCBlZGl0ID0gdXNhIGxhIGNvbWlzc2nDsywgcGVyw7IgYXR1cmEndCBwZXIgYSBlc21lbmFyXG4iCisiIHMsIHNxdWFzaCA9IHVzYSBsYSBjb21pc3Npw7MsIHBlcsOyIGZ1c2lvbmEnbCBhIGxhIGNvbWlzc2nDsyBwcsOodmlhXG4iCisiIGYsIGZpeHVwID0gY29tIFwic3F1YXNoXCIsIHBlcsOyIGRlc2NhcnRhIGVsIG1pc3NhdGdlIGRlIHJlZ2lzdHJlIGQnYXF1ZXN0YSAiCisiY29taXNzacOzXG4iCisiIHgsIGV4ZWMgPSBleGVjdXRhIGwnb3JkcmUgKGxhIHJlc3RhIGRlIGxhIGzDrW5pYSkgdXNhbnQgbCdpbnTDqHJwcmV0ICIKKyJkJ29yZHJlc1xuIgorIiBkLCBkcm9wID0gZWxpbWluYSBsYSBjb21pc3Npw7NcbiIKKyJcbiIKKyJFcyBwb3QgY2FudmlhciBsJ29yZHJlIGQnYXF1ZXN0ZXMgbMOtbmllczsgcydleGVjdXRlbiBkZSBkYWx0IGEgYmFpeC5cbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmRzKSIKK21zZ3N0clswXSAiUmViYXNhICRzaG9ydHJldmlzaW9ucyBzb2JyZSAkc2hvcnRvbnRvICgkdG9kb2NvdW50IG9yZHJlKSIKK21zZ3N0clsxXSAiUmViYXNhICRzaG9ydHJldmlzaW9ucyBzb2JyZSAkc2hvcnRvbnRvICgkdG9kb2NvdW50IG9yZHJlcykiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjY1IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMjgKK21zZ2lkICIiCisiXG4iCisiRG8gbm90IHJlbW92ZSBhbnkgbGluZS4gVXNlICdkcm9wJyBleHBsaWNpdGx5IHRvIHJlbW92ZSBhIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk5vIGVsaW1pbmV1IGNhcCBsw61uaWEuIFVzZXUgwqtkcm9wwrsgZXhwbMOtY2l0YW1lbnQgcGVyIGEgZWxpbWluYXIgdW5hICIKKyJjb21pc3Npw7MuXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjY4IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMzIKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTaSBlbGltaW5ldSB1bmEgbMOtbmlhIGFxdcOtLCBFUyBQRVJEUsOAIEFRVUVMTEEgQ09NSVNTScOTLlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo3NCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODcxCittc2dpZCAiIgorIlxuIgorIllvdSBhcmUgZWRpdGluZyB0aGUgdG9kbyBmaWxlIG9mIGFuIG9uZ29pbmcgaW50ZXJhY3RpdmUgcmViYXNlLlxuIgorIlRvIGNvbnRpbnVlIHJlYmFzZSBhZnRlciBlZGl0aW5nLCBydW46XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiRXN0ZXUgZWRpdGFudCBlbCBmaXR4ZXIgZGUgY29zZXMgYSBmZXIgZCd1biDCq3JlYmFzZcK7IGludGVyYWN0aXUgZW4gbWFyeGEuXG4iCisiUGVyIGEgY29udGludWFyIGVsIMKrcmViYXNlwrsgZGVzcHLDqXMgZCdlZGl0YXIsIGV4ZWN1dGV1OlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0OAorbXNnaWQgIiIKKyJcbiIKKyJIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiTm8gb2JzdGFudCwgc2kgZWxpbWluZXUgdG90LCBzJ2F2b3J0YXLDoCBlbCDCq3JlYmFzZcK7LlxuIgorIlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTU1Cittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgIlRpbmd1ZXUgZW4gY29tcHRlIHF1ZSBsZXMgY29taXNzaW9ucyBidWlkZXMgZXN0YW4gY29tZW50YWRlcyIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTA1IHJlcmVyZS5jOjQ4NSByZXJlcmUuYzo2OTIgc2VxdWVuY2VyLmM6MzUzNgorIzogc2VxdWVuY2VyLmM6MzU2MiBzZXF1ZW5jZXIuYzo1MjYzIGJ1aWx0aW4vZnNjay5jOjM0NiBidWlsdGluL3JlYmFzZS5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSDCqyVzwrsiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcycuIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNvcGlhciDCqyVzwrsgYSDCqyVzwrsuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LlxuIgorIkRyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOlxuIgorbXNnc3RyICIiCisiQWR2ZXJ0w6huY2lhOiBwb3Qgc2VyIHF1ZSBhbGd1bmVzIGNvbWlzc2lvbnMgcydoYWdpbiBkZXNjYXJ0YXQgIgorImFjY2lkZW50YWxtZW50LlxuIgorIkxlcyBjb21pc3Npb25zIGRlc2NhcnRhZGVzIChtw6lzIG5vdmEgYSBtw6lzIHZlbGxhKTpcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSBcImRyb3BcIiB0byBleHBsaWNpdGx5IHJlbW92ZSBhIGNvbW1pdC5cbiIKKyJcbiIKKyJVc2UgJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2YgIgorIndhcm5pbmdzLlxuIgorIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBlciBhIGV2aXRhciBhcXVlc3QgbWlzc2F0Z2UsIHVzZXUgXCJkcm9wXCIgcGVyIGEgZWxpbWluYXIgZXhwbMOtY2l0YW1lbnQgdW5hICIKKyJjb21pc3Npw7MuXG4iCisiXG4iCisiVXNldSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgcGVyIGEgY2FudmlhciBlbCBuaXZlbGwgIgorImQnYWR2ZXJ0w6huY2llcy5cbiIKKyJFbHMgY29tcG9ydGFtZW50cyBwb3NzaWJsZXMgc8OzbjogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKworIzogcmVmcy5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIG9iamVjdCEiCittc2dzdHIgIiVzIG5vIGFwdW50YSBhIHVuIG9iamVjdGUgdsOgbGlkIgorCisjOiByZWZzLmM6NjY3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMiCittc2dzdHIgInMnZXN0w6AgaWdub3JhbnQgbGEgcmVmZXLDqG5jaWEgdHJlbmNhZGEgJXMiCisKKyM6IHJlZnMuYzo2NjkgcmVmLWZpbHRlci5jOjIwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIKK21zZ3N0ciAicydlc3TDoCBpZ25vcmFudCBsYSByZWZlcsOobmNpYSB0cmVuY2FkYSAlcyIKKworIzogcmVmcy5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciDCqyVzwrsgcGVyIGEgZXNjcmlwdHVyYTogJXMiCisKKyM6IHJlZnMuYzo4MTQgcmVmcy5jOjg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgbGEgcmVmZXLDqG5jaWEgwqslc8K7IgorCisjOiByZWZzLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJsYSByZWZlcsOobmNpYSDCqyVzwrsgamEgZXhpc3RlaXgiCisKKyM6IHJlZnMuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciCittc2dzdHIgIklEIGQnb2JqZWN0ZSBubyBlc3BlcmF0IGVuIGVzY3JpdXJlIMKrJXPCuyIKKworIzogcmVmcy5jOjgzMyBzZXF1ZW5jZXIuYzo0MDUgc2VxdWVuY2VyLmM6Mjc5MyBzZXF1ZW5jZXIuYzoyOTk3CisjOiBzZXF1ZW5jZXIuYzozMDExIHNlcXVlbmNlci5jOjMyNjkgc2VxdWVuY2VyLmM6NTE3OSBzdHJidWYuYzoxMTQyCisjOiB3cmFwcGVyLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGEgwqslc8K7IgorCisjOiByZWZzLmM6ODYwIHN0cmJ1Zi5jOjExNDAgd3JhcHBlci5jOjE4OCB3cmFwcGVyLmM6MzU4IGJ1aWx0aW4vYW0uYzo3MTQKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9icmlyIMKrJXPCuyBwZXIgYSBlc2NyaXB0dXJhIgorCisjOiByZWZzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gZGVsZXRpbmcgJyVzJyIKK21zZ3N0ciAiSUQgZCdvYmplY3RlIG5vIGVzcGVyYXQgZW4gc3VwcmltaXIgwqslc8K7IgorCisjOiByZWZzLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIGhhcyBnYXAgYWZ0ZXIgJXMiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgdW5leHBlY3RlZGx5IGVuZGVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoxMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgJXMgaXMgZW1wdHkiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gdXBkYXRlIHJlZiB3aXRoIGJhZCBuYW1lICclcyciCittc2dzdHIgInMnZXN0w6AgcmVmdXNhbnQgbGEgcmVmZXLDqG5jaWEgYW1iIG5vbSBtYWxtw6hzIMKrJXPCuyIKKworIzogcmVmcy5jOjEyMzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVwZGF0ZV9yZWYgZmFpbGVkIGZvciByZWYgJyVzJzogJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2JyaXIgwqslc8K7OiAlcyIKKworIzogcmVmcy5jOjIwMjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICJub20gZCdpZGVudGl0YXQgYnVpdCAocGVyIDwlcz4pIG5vIMOpcyBwZXJtw6hzIgorCisjOiByZWZzLmM6MjA1NQorbXNnaWQgInJlZiB1cGRhdGVzIGZvcmJpZGRlbiBpbnNpZGUgcXVhcmFudGluZSBlbnZpcm9ubWVudCIKK21zZ3N0ciAibm8gZXN0w6AgcGVybcOocyBhY3R1YWxpdHphciBsZXMgcmVmZXLDqG5jaWVzIGVuIHVuIGVudG9ybiBkZSBxdWFyYW50ZW5hIgorCisjOiByZWZzLmM6MjE1MSByZWZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICLCqyVzwrsgZXhpc3RlaXg7IG5vIGVzIHBvdCBjcmVhciDCqyVzwrsiCisKKyM6IHJlZnMuYzoyMTU3IHJlZnMuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAibm8gZXMgcG9kZW4gcHJvY2Vzc2FyIMKrJXPCuyBpIMKrJXPCuyBhIGxhIHZlZ2FkYSIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIHJlZmVyZW5jZSAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlbGltaW5hciBsYSByZWZlcsOobmNpYSAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI0OCByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU0MQorIzogcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHN1cHJpbWlyIGxhIHJlZmVyw6huY2lhICVzOiAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI1MSByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZXM6ICVzIgorbXNnc3RyICJubyBzJ2hhbiBwb2d1dCBzdXByaW1pciBsZXMgcmVmZXLDqG5jaWVzOiAlcyIKKworIzogcmVmc3BlYy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZnNwZWMgJyVzJyIKK21zZ3N0ciAicmVmc3BlYyBubyB2w6BsaWRhOiDCqyVzwrsiCisKKyM6IHJlZi1maWx0ZXIuYzo0MiB3dC1zdGF0dXMuYzoxOTM4Cittc2dpZCAiZ29uZSIKK21zZ3N0ciAibm8gaGkgw6lzIgorCisjOiByZWYtZmlsdGVyLmM6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQiCittc2dzdHIgImRhdmFudCBwZXIgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJiZWhpbmQgJWQiCittc2dzdHIgImRhcnJlcmUgcGVyICVkIgorCisjOiByZWYtZmlsdGVyLmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQsIGJlaGluZCAlZCIKK21zZ3N0ciAiZGF2YW50IHBlciAlZCwgZGFycmVyZSBwZXIgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShjb2xvcjo8Y29sb3I+KSIKK21zZ3N0ciAiZm9ybWF0IGVzcGVyYXQ6ICUlKGNvbG9yOjxjb2xvcj4pIgorCisjOiByZWYtZmlsdGVyLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBjb2xvcjogJSUoY29sb3I6JXMpIgorbXNnc3RyICJjb2xvciBubyByZWNvbmVndXQ6ICUlKGNvbG9yOiVzKSIKKworIzogcmVmLWZpbHRlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6bHN0cmlwPSVzIgorbXNnc3RyICJWYWxvciBlbnRlciBlc3BlcmF0IHBlbCBub20gZGUgcmVmZXLDqG5jaWE6bHN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpyc3RyaXA9JXMiCittc2dzdHIgIlZhbG9yIGVudGVyIGVzcGVyYXQgcGVsIG5vbSBkZSByZWZlcsOobmNpYTpyc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKCVzKSBhcmd1bWVudDogJXMiCittc2dzdHIgInBhcsOgbWV0cmUgJSUoJXMpIGRlc2NvbmVndXQ6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKG9iamVjdHR5cGUpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShzdWJqZWN0KSBubyBhY2NlcHRhIHBhcsOgbWV0cmVzIgorCisjOiByZWYtZmlsdGVyLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RzaXplKSBhcmd1bWVudDogJXMiCittc2dzdHIgInBhcsOgbWV0cmUgJSUob2JqZWN0c2l6ZSkgbm8gcmVjb25lZ3V0OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShkZWx0YWJhc2UpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShkZWx0YWJhc2UpIG5vIGFjY2VwdGEgcGFyw6BtZXRyZXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoYm9keSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGJvZHkpIG5vIGFjY2VwdGEgcGFyw6BtZXRyZXMiCisKKyM6IHJlZi1maWx0ZXIuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoc3ViamVjdCkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKHN1YmplY3QpIG5vIGFjY2VwdGEgcGFyw6BtZXRyZXMiCisKKyM6IHJlZi1maWx0ZXIuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAlJSh0cmFpbGVycykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJwYXLDoG1ldHJlICUlKHRyYWlsZXJzKSBkZXNjb25lZ3V0OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAidmFsb3IgcG9zaXRpdSBlc3BlcmF0IGNvbnTDqTpsaW5lcz0lcyIKKworIzogcmVmLWZpbHRlci5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoY29udGVudHMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAicGFyw6BtZXRyZSAlJShjb250ZW50cykgbm8gcmVjb25lZ3V0OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBvYmplY3RuYW1lOnNob3J0PSVzIgorbXNnc3RyICJ2YWxvciBwb3NpdGl1IGVzcGVyYXQgbm9tIGQnb2JqZWN0ZTpjdXJ0PSVzIgorCisjOiByZWYtZmlsdGVyLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RuYW1lKSBhcmd1bWVudDogJXMiCittc2dzdHIgInBhcsOgbWV0cmUgJSUob2JqZWN0bmFtZSkgbm8gcmVjb25lZ3V0OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCittc2dzdHIgImZvcm1hdCBlc3BlcmF0OiAlJShhbGlnbjo8YW1wbGFkYT4sPHBvc2ljacOzPikiCisKKyM6IHJlZi1maWx0ZXIuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBvc2l0aW9uOiVzIgorbXNnc3RyICJwb3NpY2nDsyBubyByZWNvbmVndWRhOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAiYW1wbGFkYSBubyByZWNvbmVndWRhOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJwYXLDoG1ldHJlICUlKGFsaWduKSBubyByZWNvbmVndXQ6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHdpZHRoIGV4cGVjdGVkIHdpdGggdGhlICUlKGFsaWduKSBhdG9tIgorbXNnc3RyICJhbXBsYWRhIHBvc2l0aXZhIGVzcGVyYWRhIGFtYiBsJ8OgdG9tICUlKGFsaWduKSIKKworIzogcmVmLWZpbHRlci5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoaWYpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAicGFyw6BtZXRyZSAlJShpZikgbm8gcmVjb25lZ3V0OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAibm9tIGRlIGNhbXAgbWFsIGZvcm1hdDogJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIm5vbSBkZSBjYW1wIGRlc2NvbmVndXQ6ICUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5LCBidXQgdGhlIGZpZWxkICclLipzJyByZXF1aXJlcyBhY2Nlc3MgdG8gb2JqZWN0IGRhdGEiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgImZvcm1hdDogcydoYSB1c2F0IGwnw6B0b20gJSUoaWYpIHNlbnNlIHVuIMOgdG9tICUlKHRoZW4pIgorCisjOiByZWYtZmlsdGVyLmM6Nzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgImZvcm1hdDogcydoYSB1c2F0IGwnw6B0b20gJSUodGhlbikgc2Vuc2UgdW4gw6B0b20gJSUoaWYpIgorCisjOiByZWYtZmlsdGVyLmM6Nzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICJmb3JtYXQ6IHMnaGEgdXNhdCBsJ8OgdG9tICUlKHRoZW4pIG3DqXMgZCd1biBjb3AiCisKKyM6IHJlZi1maWx0ZXIuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgYWZ0ZXIgJSUoZWxzZSkiCittc2dzdHIgImZvcm1hdDogcydoYSB1c2F0IGwnw6B0b20gJSUodGhlbikgZGVzcHLDqXMgZGUgJSUoZWxzZSkiCisKKyM6IHJlZi1maWx0ZXIuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0OiBzJ2hhIHVzYXQgbCfDoHRvbSAlJShlbHNlKSBzZW5zZSB1biDDoHRvbSAlJShpZikiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgImZvcm1hdDogcydoYSB1c2F0IGwnw6B0b20gJSUoZWxzZSkgc2Vuc2UgdW4gw6B0b20gJSUodGhlbikiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgImZvcm1hdDogcydoYSB1c2F0IGwnw6B0b20gJSUoZWxzZSkgbcOpcyBkJ3VuIGNvcCIKKworIzogcmVmLWZpbHRlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSB1c2VkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBhdG9tIgorbXNnc3RyICJmb3JtYXQ6IHMnaGEgdXNhdCBsJ8OgdG9tICUlKGVuZCkgc2Vuc2UgbCfDoHRvbSBjb3JyZXNwb25lbnQiCisKKyM6IHJlZi1maWx0ZXIuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgImNhZGVuYSBkZSBmb3JtYXQgbWFsIGZvcm1hdCAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyAlcyIKK21zZ3N0ciAic2Vuc2UgYnJhbmNhLCBzJ2VzdMOgIGZlbnQgwqtyZWJhc2XCuyAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyBkZXRhY2hlZCBIRUFEICVzIgorbXNnc3RyICJzZW5zZSBicmFuY2EsIHMnZXN0w6AgZmVudCDCq3JlYmFzZcK7IGQndW4gwqtIRUFEwrsgJXMgbm8gYWRqdW50YXQiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gJXMiCittc2dzdHIgIihzZW5zZSBicmFuY2EsIGJpc2VjY2nDsyBjb21lbsOnYWRhIGVuICVzKSIKKworIzogcmVmLWZpbHRlci5jOjE1MDQKK21zZ2lkICJubyBicmFuY2giCittc2dzdHIgInNlbnNlIGJyYW5jYSIKKworIzogcmVmLWZpbHRlci5jOjE1NDAgcmVmLWZpbHRlci5jOjE3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBvYmplY3QgJXMgZm9yICVzIgorbXNnc3RyICJtYW5jYSBsJ29iamVjdGUgJXMgcGVyIGEgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhcnNlX29iamVjdF9idWZmZXIgZmFpbGVkIG9uICVzIGZvciAlcyIKK21zZ3N0ciAicGFyc2Vfb2JqZWN0X2J1ZmZlciBoYSBmYWxsYXQgZW4gJXMgcGVyIGEgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAib2JqZWN0ZSBtYWwgZm9ybWF0IGEgwqslc8K7IgorCisjOiByZWYtZmlsdGVyLmM6MjA5MworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSAlcyIKK21zZ3N0ciAicydlc3TDoCBpZ25vcmFudCBsYSByZWZlcsOobmNpYSBhbWIgbm9tIG1hbG3DqHMgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIG1pc3NpbmciCittc2dzdHIgImZvcm1hdDogbWFuY2EgbCfDoHRvbSAlJShlbmQpIgorCisjOiByZWYtZmlsdGVyLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW1lcmdlZCIKK21zZ3N0ciAibCdvcGNpw7Mgwqslc8K7IMOpcyBpbmNvbXBhdGlibGUgYW1iIC0tbWVyZ2VkIgorCisjOiByZWYtZmlsdGVyLmM6MjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLW1lcmdlZCIKK21zZ3N0ciAibCdvcGNpw7Mgwqslc8K7IMOpcyBpbmNvbXBhdGlibGUgYW1iIC0tbm8tbWVyZ2VkIgorCisjOiByZWYtZmlsdGVyLmM6MjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIm5vbSBkJ29iamVjdGUgJXMgbWFsIGZvcm1hdCIKKworIzogcmVmLWZpbHRlci5jOjI1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgbXVzdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAibCdvcGNpw7Mgwqslc8K7IGhhIGQnYXB1bnRhciBhIHVuYSBjb21pc3Npw7MiCisKKyM6IHJlbW90ZS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjQxMworbXNnaWQgIm1vcmUgdGhhbiBvbmUgcmVjZWl2ZXBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzo0MjEKK21zZ2lkICJtb3JlIHRoYW4gb25lIHVwbG9hZHBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzo2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIgorbXNnc3RyICJObyBlcyBwb2RlbiBvYnRlbmlyIGFtYmTDs3MgJXMgaSAlcyBhICVzIgorCisjOiByZW1vdGUuYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMgZ2VuZXJhbG1lbnQgc2VndWVpeCAlcywgbm8gJXMiCisKKyM6IHJlbW90ZS5jOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiCittc2dzdHIgIiVzIHNlZ3VlaXggYW1iZMOzcyAlcyBpICVzIgorCisjOiByZW1vdGUuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5ICclcycgb2YgcGF0dGVybiBoYWQgbm8gJyonIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICJ2YWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkiCittc2dzdHIgIiVzOiBubyBjb2luY2lkZWl4IGFtYiBsJ8OtbmRleCIKKworIzogcmVtb3RlLmM6MTAwOAorIywgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICJtYXRjaGVzICclcyclIiBpcyB0aGUgPGRzdD4gcGFydCBvZiAiZ2l0IHB1c2gKKyMuIDxyZW1vdGU+IDxzcmM+Ojxkc3Q+IiBwdXNoLCBhbmQgImJlaW5nIHB1c2hlZCAoJyVzJykiIGlzCisjLiB0aGUgPHNyYz4uCisjLgorIzogcmVtb3RlLmM6MTAyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRlc3RpbmF0aW9uIHlvdSBwcm92aWRlZCBpcyBub3QgYSBmdWxsIHJlZm5hbWUgKGkuZS4sXG4iCisic3RhcnRpbmcgd2l0aCBcInJlZnMvXCIpLiBXZSB0cmllZCB0byBndWVzcyB3aGF0IHlvdSBtZWFudCBieTpcbiIKKyJcbiIKKyItIExvb2tpbmcgZm9yIGEgcmVmIHRoYXQgbWF0Y2hlcyAnJXMnIG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyItIENoZWNraW5nIGlmIHRoZSA8c3JjPiBiZWluZyBwdXNoZWQgKCclcycpXG4iCisiICBpcyBhIHJlZiBpbiBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBJZiBzbyB3ZSBhZGQgYSBjb3JyZXNwb25kaW5nXG4iCisiICByZWZzL3toZWFkcyx0YWdzfS8gcHJlZml4IG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyJcbiIKKyJOZWl0aGVyIHdvcmtlZCwgc28gd2UgZ2F2ZSB1cC4gWW91IG11c3QgZnVsbHkgcXVhbGlmeSB0aGUgcmVmLiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGNvbW1pdCBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL2hlYWRzLyVzJz8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0YWcgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgdGFnIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTA1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IHRyZWUgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGJsb2Igb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgYmxvYiBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjEwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGJyYW5jaCIKK21zZ3N0ciAiwqslc8K7IG5vIGVzIHBvdCByZXNvbGRyZSBhIHVuYSBicmFuY2EiCisKKyM6IHJlbW90ZS5jOjExMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlbGV0ZSAnJXMnOiByZW1vdGUgcmVmIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHN1cHJpbWlyIMKrJXPCuzogbGEgcmVmZXLDqG5jaWEgcmVtb3RhIG5vIGV4aXN0ZWl4IgorCisjOiByZW1vdGUuYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWYgJXMgcmVjZWl2ZXMgZnJvbSBtb3JlIHRoYW4gb25lIHNyYyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxNjI3IHJlbW90ZS5jOjE3MjgKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICJIRUFEIG5vIGFzc2VueWFsYSBjYXAgYnJhbmNhIgorCisjOiByZW1vdGUuYzoxNjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorbXNnc3RyICJubyBleGlzdGVpeCBsYSBicmFuY2E6IMKrJXPCuyIKKworIzogcmVtb3RlLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAiY2FwIGZvbnQgY29uZmlndXJhZGEgcGVyIGEgbGEgYnJhbmNhIMKrJXPCuyIKKworIzogcmVtb3RlLmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAibGEgYnJhbmNhIGZvbnQgwqslc8K7IG5vIHMnZW1tYWdhdHplbWEgY29tIGEgYnJhbmNhIGFtYiBzZWd1aW1lbnQgcmVtb3QiCisKKyM6IHJlbW90ZS5jOjE2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJlbCBkZXN0w60gZGUgcHVqYWRhIMKrJXPCuyBlbiBlbCByZW1vdCDCqyVzwrsgbm8gdMOpIGNhcCBicmFuY2EgYW1iIHNlZ3VpbWVudCByZW1vdCIKKworIzogcmVtb3RlLmM6MTY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICJsYSBicmFuY2Egwqslc8K7IG5vIHTDqSBjYXAgcmVtb3QgYWwgcXVhbCBwdWphciIKKworIzogcmVtb3RlLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciCittc2dzdHIgImxlcyBlc3BlY2lmaWNhY2lvbnMgZGUgcmVmZXLDqG5jaWEgZGUgwqslc8K7IG5vIGluY2xvdWVuIMKrJXPCuyIKKworIzogcmVtb3RlLmM6MTY5NQorbXNnaWQgInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIKK21zZ3N0ciAicHVzaCBubyB0w6kgZGVzdMOtIChwdXNoLmRlZmF1bHQgw6lzIMKrbm90aGluZykiCisKKyM6IHJlbW90ZS5jOjE3MTcKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSAnc2ltcGxlJyBwdXNoIHRvIGEgc2luZ2xlIGRlc3RpbmF0aW9uIgorbXNnc3RyICJubyBlcyBwb3QgcmVzb2xkcmUgdW5hIHB1amFkYSAnc2ltcGxlJyBhIHVuIHNvbCBkZXN0w60iCisKKyM6IHJlbW90ZS5jOjE4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZmluZCByZW1vdGUgcmVmICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHRyb2JhciBsYSByZWZlcsOobmNpYSByZW1vdGEgJXMiCisKKyM6IHJlbW90ZS5jOjE4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiBJZ25vcmluZyBmdW5ueSByZWYgJyVzJyBsb2NhbGx5IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjIwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICJMYSB2b3N0cmEgYnJhbmNhIGVzdMOgIGJhc2FkYSBlbiDCqyVzwrssIHBlcsOyIGxhIGZvbnQgbm8gaGkgw6lzLlxuIgorCisjOiByZW1vdGUuYzoyMDIzCittc2dpZCAiICAodXNlIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgdG8gZml4dXApXG4iCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiBwZXIgYSBhcnJlZ2xhcilcbiIKKworIzogcmVtb3RlLmM6MjAyNgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyB1cCB0byBkYXRlIHdpdGggJyVzJy5cbiIKK21zZ3N0ciAiTGEgdm9zdHJhIGJyYW5jYSBlc3TDoCBhbCBkaWEgYW1iIMKrJXPCuy5cbiIKKworIzogcmVtb3RlLmM6MjAzMAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBhbmQgJyVzJyByZWZlciB0byBkaWZmZXJlbnQgY29tbWl0cy5cbiIKK21zZ3N0ciAiTGEgdm9zdHJhIGJyYW5jYSBpIMKrJXPCuyBlcyByZWZlcmVpeGVuIGEgZGlmZXJlbnRzIGNvbWlzc2lvbnMuXG4iCisKKyM6IHJlbW90ZS5jOjIwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiJXNcIiBmb3IgZGV0YWlscylcbiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIkxhIHZvc3RyYSBicmFuY2EgZXN0w6AgJTIkZCBjb21pc3Npw7MgcGVyIGRhdmFudCBkZSDCqyUxJHPCuy5cbiIKK21zZ3N0clsxXSAiTGEgdm9zdHJhIGJyYW5jYSBlc3TDoCAlMiRkIGNvbWlzc2lvbnMgcGVyIGRhdmFudCBkZSDCqyUxJHPCuy5cbiIKKworIzogcmVtb3RlLmM6MjA0MworbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgcHVzaFwiIHBlciBhIHB1YmxpY2FyIGxlcyB2b3N0cmVzIGNvbWlzc2lvbnMgbG9jYWxzKVxuIgorCisjOiByZW1vdGUuYzoyMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKKyJMYSB2b3N0cmEgYnJhbmNhIGVzdMOgICUyJGQgY29taXNzacOzIHBlciBkYXJyZXJlIGRlIMKrJTEkc8K7LCBpIHBvdCBhdmFuw6dhci1zZSAiCisicsOgcGlkYW1lbnQuXG4iCittc2dzdHJbMV0gIiIKKyJMYSB2b3N0cmEgYnJhbmNhIGVzdMOgICUyJGQgY29taXNzaW9ucyBwZXIgZGFycmVyZSBkZSDCqyUxJHPCuywgaSBwb3QgYXZhbsOnYXItIgorInNlIHLDoHBpZGFtZW50LlxuIgorCisjOiByZW1vdGUuYzoyMDU0Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiAgKHVzZXUgwqtnaXQgcHVsbMK7IHBlciBhIGFjdHVhbGl0emFyIGxhIHZvc3RyYSBicmFuY2EgbG9jYWwpXG4iCisKKyM6IHJlbW90ZS5jOjIwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisiTGEgdm9zdHJhIGJyYW5jYSBpIMKrJXPCuyBoYW4gZGl2ZXJnaXQsXG4iCisiaSB0ZW5lbiAlZCBpICVkIGNvbWlzc2nDsyBkaXN0aW50YSBjYWRhIHVuYSwgcmVzcGVjdGl2YW1lbnQuXG4iCittc2dzdHJbMV0gIiIKKyJMYSB2b3N0cmEgYnJhbmNhIGkgwqslc8K7IGhhbiBkaXZlcmdpdCxcbiIKKyJpIHRlbmVuICVkIGkgJWQgY29taXNzaW9ucyBkaXN0aW50ZXMgY2FkYSB1bmEsIHJlc3BlY3RpdmFtZW50LlxuIgorCisjOiByZW1vdGUuYzoyMDY3Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIgICh1c2V1IMKrZ2l0IHB1bGzCuyBwZXIgYSBmdXNpb25hciBsYSBicmFuY2EgcmVtb3RhIGFtYiBsYSB2b3N0cmEpXG4iCisKKyM6IHJlbW90ZS5jOjIyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGV4cGVjdGVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBhbmFsaXR6YXIgZWwgbm9tIGRlIGwnb2JqZWN0ZSBlc3BlcmF0IMKrJXPCuyIKKworIzogcmVwbGFjZS1vYmplY3QuYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiCittc2dzdHIgIm5vbSBkZSBsYSByZWZlcsOobmNpYSByZWVtcGxhw6dhZGEgaW5jb3JyZWN0ZTogJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAiZHVwbGljYSBsZXMgcmVmZXLDqG5jaWVzIHJlZW1wbGHDp2FkZXM6ICVzIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgZGVwdGggdG9vIGhpZ2ggZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAibGEgcHJvZnVuZGl0YXQgZGUgcmVlbXBsYcOnYW1lbnQgw6lzIG1hc3NhIGFsdGEgcGVyIGwnb2JqZWN0ZSAlcyIKKworIzogcmVyZXJlLmM6MjE3IHJlcmVyZS5jOjIyNiByZXJlcmUuYzoyMjkKK21zZ2lkICJjb3JydXB0IE1FUkdFX1JSIgorbXNnc3RyICJNRVJHRV9SUiBjb3JydXB0ZSIKKworIzogcmVyZXJlLmM6MjY0IHJlcmVyZS5jOjI2OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXJlcmUgcmVjb3JkIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGVsIHJlZ2lzdHJlIMKrcmVyZXJlwrsiCisKKyM6IHJlcmVyZS5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICclcycgKCVzKSIKK21zZ3N0ciAicydoYW4gcHJvZHXDr3QgZXJyb3JzIGVuIGVzY3JpdXJlIMKrJXPCuyAoJXMpIgorCisjOiByZXJlcmUuYzo0OTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmbHVzaCAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGZlciBzdGF0IGEgwqslc8K7IgorCisjOiByZXJlcmUuYzo1MDMgcmVyZXJlLmM6MTAzOQorIywgIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbmZsaWN0IGh1bmtzIGluICclcyciCittc2dzdHIgIm5vIHMnaGFuIHBvZ3V0IGFuYWxpdHphciBlbHMgcGVkYcOnb3MgZW4gY29uZmxpY3RlIGEgwqslc8K7IgorCisjOiByZXJlcmUuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmZXIgwqtmYWlsZWQgdXRpbWUoKcK7IGEgwqslc8K7IgorCisjOiByZXJlcmUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlc2NyaXVyZSDCqyVzwrsiCisKKyM6IHJlcmVyZS5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcmVzb2x1dGlvbiBmb3IgJyVzJy4iCittc2dzdHIgIkVzIHJlY29yZGEgbGEgcmVzb2x1Y2nDsyBwZXIgYSDCqyVzwrsuIgorCisjOiByZXJlcmUuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzb2x2ZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAiUydoYSByZXNvbHQgwqslc8K7IHVzYW50IHVuYSByZXNvbHVjacOzIGFudGVyaW9yLiIKKworIzogcmVyZXJlLmM6ODAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rIHN0cmF5ICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBmZXIgc3ltbGluayBlbiDCqyVzwrsgwqslc8K7IgorCisjOiByZXJlcmUuYzo4MDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBmaXR4ZXIgZGUgcmVnaXN0cmUgwqslc8K7IgorCisjOiByZXJlcmUuYzo4ODEgc3VibW9kdWxlLmM6MjA2NyBidWlsdGluL2xvZy5jOjE4NzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDM2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZWwgZGlyZWN0b3JpIMKrJXPCuyIKKworIzogcmVyZXJlLmM6MTA1NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBjb25mbGljdGVkIHN0YXRlIGluICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgYSDCqyVzwrsiCisKKyM6IHJlcmVyZS5jOjEwNjggcmVyZXJlLmM6MTA3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFmZWdpciBlbCByZXN1bHRhdCBkZSBmdXNpw7MgcGVyIGEgwqslc8K7IgorCisjOiByZXJlcmUuYzoxMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGZlciDCq3VubGlua8K7IGRlIMKrJXPCuyIKKworIzogcmVyZXJlLmM6MTA4NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCBwcmVpbWFnZSBmb3IgJyVzJyIKK21zZ3N0ciAic3VwcmltZWl4IGxlcyByZWZlcsOobmNpZXMgcmVlbXBsYcOnYWRlcyIKKworIzogcmVyZXJlLmM6MTA5NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRm9yZ290IHJlc29sdXRpb24gZm9yICclcydcbiIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgZml0eGVyIGRlIHJlZ2lzdHJlIMKrJXPCuyIKKworIzogcmVyZXJlLmM6MTE5OQorbXNnaWQgInVuYWJsZSB0byBvcGVuIHJyLWNhY2hlIGRpcmVjdG9yeSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciBlbCBkaXJlY3RvcmkgcnItY2FjaGUiCisKKyM6IHJldmlzaW9uLmM6MjQ5NworbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgImxhIHZvc3RyYSBicmFuY2EgYWN0dWFsIHNlbWJsYSBtYWxtZXNhIgorCisjOiByZXZpc2lvbi5jOjI1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdHMgeWV0IgorbXNnc3RyICJsYSBicmFuY2EgYWN0dWFsIMKrJXPCuyBlbmNhcmEgbm8gdMOpIGNhcCBjb21pc3Npw7MiCisKKyM6IHJldmlzaW9uLmM6MjcwOAorbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnc3RyICItLWZpcnN0LXBhcmVudCDDqXMgaW5jb21wYXRpYmxlIGFtYiAtLWJpc2VjdCIKKworIzogcmV2aXNpb24uYzoyNzEyCittc2dpZCAiLUwgZG9lcyBub3QgeWV0IHN1cHBvcnQgZGlmZiBmb3JtYXRzIGJlc2lkZXMgLXAgYW5kIC1zIgorbXNnc3RyICItTCBubyDDqXMgZW5jYXJhIGNvbXBhdGlibGUgYW1iIGZvcm1hdHMgcXVlIG5vIHNpZ3VpbiDCqy1wwrsgbyDCqy1zwrsiCisKKyM6IHJ1bi1jb21tYW5kLmM6NzYyCittc2dpZCAib3BlbiAvZGV2L251bGwgZmFpbGVkIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIG9icmlyIC9kZXYvbnVsbCIKKworIzogcnVuLWNvbW1hbmQuYzoxMjY4CisjLCAgICAgICAgICAgICAgICAgICAgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFzeW5jIHRocmVhZDogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZmlsIMKrYXN5bmPCuzogJXMiCisKKyM6IHJ1bi1jb21tYW5kLmM6MTMzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlICclcycgaG9vayB3YXMgaWdub3JlZCBiZWNhdXNlIGl0J3Mgbm90IHNldCBhcyBleGVjdXRhYmxlLlxuIgorIllvdSBjYW4gZGlzYWJsZSB0aGlzIHdhcm5pbmcgd2l0aCBgZ2l0IGNvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgZmFsc2VgLiIKK21zZ3N0ciAiIgorCisjOiBzZW5kLXBhY2suYzoxNDQKK21zZ2lkICJ1bmV4cGVjdGVkIGZsdXNoIHBhY2tldCB3aGlsZSByZWFkaW5nIHJlbW90ZSB1bnBhY2sgc3RhdHVzIgorbXNnc3RyICIiCisicGFxdWV0IGRlIG5ldGVqYSBubyBlc3BlcmF0IHF1YW4gZXN0YXZhIGxsZWdpbnQgbCdlc3RhdCBkZWwgZGVzZW1wYXF1ZXRhbWVudCAiCisicmVtb3QiCisKKyM6IHNlbmQtcGFjay5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgcmVtb3RlIHVucGFjayBzdGF0dXM6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsJ2VzdGF0IGRlbCBkZXNlbXBhcXVldGFtZW50IHJlbW90OiAlcyIKKworIzogc2VuZC1wYWNrLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSB1bnBhY2sgZmFpbGVkOiAlcyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlbCBkZXNlbXBhcXVldGFtZW50IHJlbW90OiAlcyIKKworIzogc2VuZC1wYWNrLmM6MzA5Cittc2dpZCAiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gc2lnbmFyIGVsIGNlcnRpZmljYXQgZGUgcHVqYWRhIgorCisjOiBzZW5kLXBhY2suYzo0MjMKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIHB1c2giCittc2dzdHIgImVsIGRlc3TDrSByZWNlcHRvciBubyBhZG1ldCBwdWphciAtLXNpZ25lZCIKKworIzogc2VuZC1wYWNrLmM6NDI1Cittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tIgorInNpZ25lZCBwdXNoIgorbXNnc3RyICIiCisibm8gcydlc3TDoCBlbnZpYW50IHVuYSBjZXJ0aWZpY2FjacOzIGRlIHB1amFkYSBwZXJxdcOoIGVsIGRlc3TDrSByZWNlcHRvciBubyAiCisiYWRtZXQgcHVqYXIgLS1zaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQzNworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMgcHVzaCIKK21zZ3N0ciAiZWwgZGVzdMOtIHJlY2VwdG9yIG5vIGFkbWV0IHB1amFyIC0tYXRvbWljIgorCisjOiBzZW5kLXBhY2suYzo0NDIKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IHB1c2ggb3B0aW9ucyIKK21zZ3N0ciAiZWwgZGVzdMOtIHJlY2VwdG9yIG5vIGFkbWV0IG9wY2lvbnMgZGUgcHVqYWRhIgorCisjOiBzZXF1ZW5jZXIuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgbWVzc2FnZSBjbGVhbnVwIG1vZGUgJyVzJyIKK21zZ3N0ciAibW9kZSBkZSBuZXRlamEgwqslc8K7IG5vIHbDoGxpZCBlbiBsYSBjb21pc3Npw7MgZGVsIG1pc3NhdGdlIgorCisjOiBzZXF1ZW5jZXIuYzoyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHN1cHJpbWlyIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MzEzIGJ1aWx0aW4vcmViYXNlLmM6NzgxIGJ1aWx0aW4vcmViYXNlLmM6MTcwNiBidWlsdGluL3JtLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBzdXByaW1pciDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjMyMworbXNnaWQgInJldmVydCIKK21zZ3N0ciAicmV2ZXJ0aXIiCisKKyM6IHNlcXVlbmNlci5jOjMyNQorbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICJjaGVycnktcGljayIKKworIzogc2VxdWVuY2VyLmM6MzI3Cittc2dpZCAicmViYXNlIC1pIgorbXNnc3RyICJyZWJhc2UgLWkiCisKKyM6IHNlcXVlbmNlci5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGFjdGlvbjogJWQiCittc2dzdHIgImFjY2nDsyBkZXNjb25lZ3VkYTogJWQiCisKKyM6IHNlcXVlbmNlci5jOjM4NworbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisiZGVzcHLDqXMgZGUgcmVzb2xkcmUgZWxzIGNvbmZsaWN0ZXMsIG1hcnF1ZXUgZWxzIGNhbWluc1xuIgorImNvcnJlZ2l0cyBhbWIgJ2dpdCBhZGQgPGNhbWlucz4nIG8gJ2dpdCBybSA8Y2FtaW5zPiciCisKKyM6IHNlcXVlbmNlci5jOjM5MAorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisiZGVzcHLDqXMgZGUgcmVzb2xkcmUgZWxzIGNvbmZsaWN0ZXMsIG1hcnF1ZXUgZWxzIGNhbWluc1xuIgorImNvcnJlZ2l0cyBhbWIgJ2dpdCBhZGQgPGNhbWlucz4nIG8gJ2dpdCBybSA8Y2FtaW5zPidcbiIKKyJpIGNvbWV0ZXUgZWwgcmVzdWx0YXQgYW1iICdnaXQgY29tbWl0JyIKKworIzogc2VxdWVuY2VyLmM6NDAzIHNlcXVlbmNlci5jOjI5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBibG9xdWVqYXIgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzo0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGVvbCB0byAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGVsIHRlcm1pbmFkb3IgZGUgbMOtbmlhIGEgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzo0MTUgc2VxdWVuY2VyLmM6Mjc5OCBzZXF1ZW5jZXIuYzoyOTk5IHNlcXVlbmNlci5jOjMwMTMKKyM6IHNlcXVlbmNlci5jOjMyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZmluYWxpdHphciDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjQzOCBzZXF1ZW5jZXIuYzoxNzA3IHNlcXVlbmNlci5jOjI4MTggc2VxdWVuY2VyLmM6MzI1OQorIzogc2VxdWVuY2VyLmM6MzM2OCBidWlsdGluL2FtLmM6MjQ0IGJ1aWx0aW4vY29tbWl0LmM6NzgzIGJ1aWx0aW4vbWVyZ2UuYzoxMTE3CisjOiBidWlsdGluL3JlYmFzZS5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXMuIgorbXNnc3RyICJlbHMgdm9zdHJlcyBjYW52aXMgbG9jYWxzIHNlIHNvYnJlZXNjcml1cmllbiBwZXIgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzo0NjgKK21zZ2lkICJjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iCittc2dzdHIgImNvbWV0ZXUgZWxzIHZvc3RyZXMgY2FudmlzIG8gZmV1IHVuIMKrc3Rhc2jCuyBwZXIgYSBwcm9jZWRpci4iCisKKyM6IHNlcXVlbmNlci5jOjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFzdC1mb3J3YXJkIgorbXNnc3RyICIlczogYXZhbsOnIHLDoHBpZCIKKworIzogc2VxdWVuY2VyLmM6NTM5IGJ1aWx0aW4vdGFnLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICJNb2RlIGRlIG5ldGVqYSBubyB2w6BsaWQgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiLCAiY2hlcnJ5LXBpY2siIG9yCisjLiAicmViYXNlIC1pIi4KKyMuCisjOiBzZXF1ZW5jZXIuYzo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IE5vIHMnaGEgcG9ndXQgZXNjcml1cmUgdW4gZml0eGVyIGQnw61uZGV4IG5vdSIKKworIzogc2VxdWVuY2VyLmM6NjUwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFjdHVhbGl0emFyIGwnYXJicmUgY2F1IgorCisjOiBzZXF1ZW5jZXIuYzo2NjQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCByZXNvbGRyZSBsYSBjb21pc3Npw7MgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6NzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGtleSBwcmVzZW50IGluICclLipzJyIKK21zZ3N0ciAibm8gaGkgaGEgdW5hIGNsYXUgYSDCqyUuKnPCuyIKKworIzogc2VxdWVuY2VyLmM6NzU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVxdW90ZSB2YWx1ZSBvZiAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFmZWdpciBlbCByZXN1bHRhdCBkZSBmdXNpw7MgcGVyIGEgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzo3OTIgd3JhcHBlci5jOjE5MCB3cmFwcGVyLmM6MzYwIGJ1aWx0aW4vYW0uYzo3MDUKKyM6IGJ1aWx0aW4vYW0uYzo3OTcgYnVpbHRpbi9tZXJnZS5jOjExMTQgYnVpbHRpbi9yZWJhc2UuYzoxMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2JyaXIgwqslc8K7IHBlciBhIGxlY3R1cmEiCisKKyM6IHNlcXVlbmNlci5jOjgwMgorbXNnaWQgIidHSVRfQVVUSE9SX05BTUUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIkphIHMnaGEgZG9uYXQgwqtHSVRfQVVUSE9SX05BTUXCuyIKKworIzogc2VxdWVuY2VyLmM6ODA3Cittc2dpZCAiJ0dJVF9BVVRIT1JfRU1BSUwnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIkphIHMnaGEgZG9uYXQgwqtHSVRfQVVUSE9SX0VNQUlMwrsiCisKKyM6IHNlcXVlbmNlci5jOjgxMgorbXNnaWQgIidHSVRfQVVUSE9SX0RBVEUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIkphIHMnaGEgZG9uYXQgwqtHSVRfQVVUSE9SX0RBVEXCuyIKKworIzogc2VxdWVuY2VyLmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFyaWFibGUgJyVzJyIKK21zZ3N0ciAidmFyaWFibGUgIMKrJXPCuyBkZXNjb25lZ3VkYSIKKworIzogc2VxdWVuY2VyLmM6ODIxCittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9OQU1FJyIKK21zZ3N0ciAiZmFsdGEgwqtHSVRfQVVUSE9SX05BTUXCuyIKKworIzogc2VxdWVuY2VyLmM6ODIzCittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9FTUFJTCciCittc2dzdHIgImZhbHRhIMKrR0lUX0FVVEhPUl9FTUFJTMK7IgorCisjOiBzZXF1ZW5jZXIuYzo4MjUKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX0RBVEUnIgorbXNnc3RyICJmYWx0YSDCq0dJVF9BVVRIT1JfREFURcK7IgorCisjOiBzZXF1ZW5jZXIuYzo5MDIgc2VxdWVuY2VyLmM6MTQyNworbXNnaWQgIm1hbGZvcm1lZCBpZGVudCBsaW5lIgorbXNnc3RyICJsw61uaWEgZCdpZGVudGl0YXQgbWFsIGZvcm1hZGEiCisKKyM6IHNlcXVlbmNlci5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWVcbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZSBzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisidGVuaXUgY2FudmlzIMKrc3RhZ2VkwrsgZW4gZWwgdm9zdHJlIGFyYnJlIGRlIHRyZWJhbGxcbiIKKyJTaSBhcXVlc3RzIGNhbnZpcyBlc3RhbiBwZW5zYXRzIHBlciBmZXIgwqtzcXVhc2jCuyBhIGxhIGNvbWlzc2nDsyBwcsOodmlhLCAiCisiZXhlY3V0ZXU6XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJTaSBzw7NuIHBlciBhIGZvcm1hciB1bmEgY29taXNzacOzIG5vdmEsIGV4ZWN1dGV1OlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIkVuIGFtYmTDs3MgY2Fzb3MsIHF1YW4gaMOgZ2l1IHRlcm1pbmF0LCBjb250aW51ZXUgYW1iOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyMTgKK21zZ2lkICIncHJlcGFyZS1jb21taXQtbXNnJyBob29rIGZhaWxlZCIKK21zZ3N0ciAiZWwgbGxpZ2FtIMKrcHJlcGFyZS1jb21taXQtbXNnwrsgaGEgZmFsbGF0IgorCisjOiBzZXF1ZW5jZXIuYzoxMjI0Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseS4gUnVuIHRoZVxuIgorImZvbGxvd2luZyBjb21tYW5kIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIGVkaXRvciB0byBlZGl0XG4iCisieW91ciBjb25maWd1cmF0aW9uIGZpbGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiUydoYW4gY29uZmlndXJhdCBlbCB2b3N0cmUgbm9tIGkgYWRyZcOnYSBlbGVjdHLDsm5pY2FcbiIKKyJhdXRvbcOgdGljYW1lbnQgYmFzYW50LXNlIGVuIGVsIHZvc3RyZSBub20gZCd1c3VhcmkgaSBub20gZGUgbcOgcXVpbmEuIFxuIgorIkNvbXByb3ZldSBxdWUgc2lndWluIGNvcnJlY3Rlcy4gUG9kZXUgc3VwcmltaXIgYXF1ZXN0XG4iCisibWlzc2F0Z2UgZXN0YWJsaW50LWxvcyBleHBsw61jaXRhbWVudC4gRXhlY3V0ZXUgbCdvcmRyZSBzZWfDvGVudCBpXG4iCisic2VndWl1IGxlcyBpbnN0cnVjY2lvbnMgZW4gZWwgdm9zdHJlIGVkaXRvciBwZXIgZWRpdGFyIGVsIHZvc3RyZVxuIgorImZpdHhlciBkZSBjb25maWd1cmFjacOzOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIkRlc3Byw6lzIGRlIGZlciBhaXjDsiwgcG9kZXUgZXNtZW5hciBsYSBpZGVudGl0YXQgdXNhZGEgcGVyIGEgYXF1ZXN0YVxuIgorImNvbWlzc2nDsyBhbWI6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjM3Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiUydoYW4gY29uZmlndXJhdCBlbCB2b3N0cmUgbm9tIGkgYWRyZcOnYSBlbGVjdHLDsm5pY2FcbiIKKyJhdXRvbcOgdGljYW1lbnQgYmFzYXRzIGVuIGVsIHZvc3RyZSBub20gZCd1c3VhcmkgaSBub20gZGUgbcOgcXVpbmEuIFxuIgorIkNvbXByb3ZldSBxdWUgc2lndWluIGNvcnJlY3Rlcy4gUG9kZXUgc3VwcmltaXIgYXF1ZXN0XG4iCisibWlzc2F0Z2UgZXN0YWJsaW50LWxvcyBleHBsw61jaXRhbWVudDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJFbCBWb3N0cmUgTm9tXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHR1QGV4YW1wbGUuY29tXG4iCisiXG4iCisiRGVzcHLDqXMgZGUgZmVyIGFpeMOyLCBwb2RldSBhcnJlZ2xhciBsYSBpZGVudGl0YXQgdXNhZGEgcGVyIGEgYXF1ZXN0YVxuIgorImNvbWlzc2nDsyBhbWI6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjc5Cittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCB0cm9iYXIgbGEgY29taXNzacOzIG5vdmFtZW50IGNyZWFkYSIKKworIzogc2VxdWVuY2VyLmM6MTI4MQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbGEgY29taXNzacOzIG5vdmFtZW50IGNyZWFkYSIKKworIzogc2VxdWVuY2VyLmM6MTMyNworbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIEhFQUQgZGVzcHLDqXMgZGUgY3JlYXIgbGEgY29taXNzacOzIgorCisjOiBzZXF1ZW5jZXIuYzoxMzI5Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiSEVBRCBzZXBhcmF0IgorCisjOiBzZXF1ZW5jZXIuYzoxMzMzCittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAoY29taXNzacOzIGFycmVsKSIKKworIzogc2VxdWVuY2VyLmM6MTM1NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiSEVBRCAlcyBubyDDqXMgdW5hIGNvbWlzc2nDsyEiCisKKyM6IHNlcXVlbmNlci5jOjEzNjAgc2VxdWVuY2VyLmM6MTQ1OCBidWlsdGluL2NvbW1pdC5jOjE1NjkKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGxhIGNvbWlzc2nDsyBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNDExIHNlcXVlbmNlci5jOjIwNTUKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0IGF1dGhvciIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbCdhdXRvciBkZSBsYSBjb21pc3Npw7MiCisKKyM6IHNlcXVlbmNlci5jOjE0MzEKK21zZ2lkICJjb3JydXB0ZWQgYXV0aG9yIHdpdGhvdXQgZGF0ZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiYXV0b3IgbWFsbcOocyBzZW5zZSBpbmZvcm1hY2nDsyBkZSBkYXRhIgorCisjOiBzZXF1ZW5jZXIuYzoxNDQ3IGJ1aWx0aW4vYW0uYzoxNTYxIGJ1aWx0aW4vbWVyZ2UuYzo2ODQKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBoYSBmYWxsYXQgZW4gZXNjcml1cmUgdW4gYXJicmUiCisKKyM6IHNlcXVlbmNlci5jOjE0ODAgc2VxdWVuY2VyLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb21taXQgbWVzc2FnZSBmcm9tICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyBkZXMgZGUgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzoxNTE2IGJ1aWx0aW4vYW0uYzoxNTgzIGJ1aWx0aW4vY29tbWl0LmM6MTY2OCBidWlsdGluL21lcmdlLmM6ODgzCisjOiBidWlsdGluL21lcmdlLmM6OTA4Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXNjcml1cmUgbCdvYmplY3RlIGRlIGNvbWlzc2nDsyIKKworIzogc2VxdWVuY2VyLmM6MTU3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjb21pc3Npw7MgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGxhIGNvbWlzc2nDsyBwYXJlICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNjU2IHNlcXVlbmNlci5jOjE3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kOiAlZCIKK21zZ3N0ciAib3JkcmUgZGVzY29uZWd1ZGE6ICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxNzE0IHNlcXVlbmNlci5jOjE3MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICVkIGNvbW1pdHMuIgorbXNnc3RyICJBaXjDsiDDqXMgdW5hIGNvbWJpbmFjacOzIGRlICVkIGNvbWlzc2lvbnMuIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI0Cittc2dpZCAibmVlZCBhIEhFQUQgdG8gZml4dXAiCittc2dzdHIgImNhbCB1biBIRUFEIHBlciByZXBhcmFyLWhvIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI2IHNlcXVlbmNlci5jOjMzMDQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI4Cittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCdzIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MgZGUgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTczNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGVzY3JpdXJlIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MTc0MSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk2Cittc2dpZCAiVGhpcyBpcyB0aGUgMXN0IGNvbW1pdCBtZXNzYWdlOiIKK21zZ3N0ciAiQXF1ZXN0IMOpcyBlbCAxciBtaXNzYXRnZSBkZSBjb21pc3Npw7M6IgorCisjOiBzZXF1ZW5jZXIuYzoxNzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBtaXNzYXRnZSBkZSBjb21pc3Npw7M6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMlZDoiCittc2dzdHIgIkFxdWVzdCDDqXMgZWwgbWlzc2F0Z2UgZGUgY29taXNzacOzICMlZDoiCisKKyM6IHNlcXVlbmNlci5jOjE3NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJFbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MgbsO6bS4gIyVkIHMnb21ldHLDoDoiCisKKyM6IHNlcXVlbmNlci5jOjE4NTAKK21zZ2lkICJ5b3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorbXNnc3RyICJlbCB2b3N0cmUgZml0eGVyIGQnw61uZGV4IGVzdMOgIHNlbnNlIGZ1c2lvbmFyLiIKKworIzogc2VxdWVuY2VyLmM6MTg1NworbXNnaWQgImNhbm5vdCBmaXh1cCByb290IGNvbW1pdCIKK21zZ3N0ciAibm8gZXMgcG90IGFycmVnbGFyIGxhIGNvbWlzc2nDsyBhcnJlbCIKKworIzogc2VxdWVuY2VyLmM6MTg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgImxhIGNvbWlzc2nDsyAlcyDDqXMgdW5hIGZ1c2nDsyBwZXLDsiBubyBzJ2hhIGRvbmF0IGNhcCBvcGNpw7MgLW0uIgorCisjOiBzZXF1ZW5jZXIuYzoxODg0IHNlcXVlbmNlci5jOjE4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGRvZXMgbm90IGhhdmUgcGFyZW50ICVkIgorbXNnc3RyICJsYSBjb21pc3Npw7MgJXMgbm8gdMOpIHBhcmUgJWQiCisKKyM6IHNlcXVlbmNlci5jOjE4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgIm5vIGVzIHBvdCBvYnRlbmlyIGVsIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyBkZSAlcyIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlIGEgInRvZG8iIGNvbW1hbmQgbGlrZQorIy4gInJldmVydCIgb3IgInBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMS4KKyM6IHNlcXVlbmNlci5jOjE5MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIlczogbm8gZXMgcG90IGFuYWxpdHphciBsYSBjb21pc3Npw7MgcGFyZSAlcyIKKworIzogc2VxdWVuY2VyLmM6MTk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lICclcycgdG8gJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjYW52aWFyIGVsIG5vbSDCqyVzwrsgYSDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjIwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCByZXZlcnRpciAlcy4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYXBsaWNhciAlcy4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBsJ8OtbmRleCIKKworIzogc2VxdWVuY2VyLmM6MjExMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGFjdHVhbGl0emFyIGwnw61uZGV4IgorCisjOiBzZXF1ZW5jZXIuYzoyMTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IGFjY2VwdCBhcmd1bWVudHM6ICclcyciCittc2dzdHIgIiVzIG5vIGFjY2VwdGEgcGFyw6BtZXRyZXM6IMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MjE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50cyBmb3IgJXMiCittc2dzdHIgImZhbHRlbiBlbHMgYXJndW1lbnRzIHBlciAlcyIKKworIzogc2VxdWVuY2VyLmM6MjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJyUuKnMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciDCqyUuKnPCuyIKKworIzogc2VxdWVuY2VyLmM6MjI4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgImzDrW5pYSBubyB2w6BsaWRhICVkOiAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzoyMzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAnJXMnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIm5vIGVzIHBvdCDCqyVzwrsgc2Vuc2UgdW5hIGNvbWlzc2nDsyBwcsOodmlhIgorCisjOiBzZXF1ZW5jZXIuYzoyMzQ4IGJ1aWx0aW4vcmViYXNlLmM6MTcyIGJ1aWx0aW4vcmViYXNlLmM6MTk3CisjOiBidWlsdGluL3JlYmFzZS5jOjIyMyBidWlsdGluL3JlYmFzZS5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnLiIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgwqslc8K7LiIKKworIzogc2VxdWVuY2VyLmM6MjM4NAorbXNnaWQgImNhbmNlbGxpbmcgYSBjaGVycnkgcGlja2luZyBpbiBwcm9ncmVzcyIKK21zZ3N0ciAicydlc3TDoCBjYW5jZWzCt2xhbnQgdW4gwqtjaGVycnkgcGlja8K7IGVuIGN1cnMiCisKKyM6IHNlcXVlbmNlci5jOjIzOTEKK21zZ2lkICJjYW5jZWxsaW5nIGEgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJzJ2VzdMOgIGNhbmNlbMK3bGFudCBsYSByZXZlcnNpw7MgZW4gY3VycyIKKworIzogc2VxdWVuY2VyLmM6MjQzNQorbXNnaWQgInBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICJjb3JyZWdpdS1obyB1c2FudCDCq2dpdCByZWJhc2UgLS1lZGl0LXRvZG/Cuy4iCisKKyM6IHNlcXVlbmNlci5jOjI0MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICclcyciCittc2dzdHIgImZ1bGwgZCdpbnN0cnVjY2lvbnMgaW51c2FibGU6IMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MjQ0MgorbXNnaWQgIm5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAibm8gcydoYSBhbmFsaXR6YXQgY2FwIGNvbWlzc2nDsy4iCisKKyM6IHNlcXVlbmNlci5jOjI0NTMKK21zZ2lkICJjYW5ub3QgY2hlcnJ5LXBpY2sgZHVyaW5nIGEgcmV2ZXJ0LiIKK21zZ3N0ciAibm8gZXMgcG90IGZlciDCq2NoZXJyeSBwaWNrwrsgZHVyYW50IHVuYSByZXZlcnNpw7MuIgorCisjOiBzZXF1ZW5jZXIuYzoyNDU1Cittc2dpZCAiY2Fubm90IHJldmVydCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIm5vIGVzIHBvdCByZXZlcnRpciBkdXJhbnQgdW4gwqtjaGVycnkgcGlja8K7LiIKKworIzogc2VxdWVuY2VyLmM6MjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgInZhbG9yIG5vIHbDoGxpZCBwZXIgYSAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjI2MzAKK21zZ2lkICJ1bnVzYWJsZSBzcXVhc2gtb250byIKK21zZ3N0ciAiwqtzcXVhc2gtb250b8K7IG5vIHVzYWJsZSIKKworIzogc2VxdWVuY2VyLmM6MjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJyVzJyIKK21zZ3N0ciAiZnVsbCBkJ29wY2lvbnMgbWFsIGZvcm1hdDogwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzoyNzM2IHNlcXVlbmNlci5jOjQ0NjMKK21zZ2lkICJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIKK21zZ3N0ciAiY29uanVudCBkZSBjb21pc3Npb25zIGJ1aXQgcGFzc2F0IgorCisjOiBzZXF1ZW5jZXIuYzoyNzUyCittc2dpZCAicmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgInVuYSByZXZlcnNpw7MgamEgZXN0w6AgZW4gY3VycyIKKworIzogc2VxdWVuY2VyLmM6Mjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnkgXCJnaXQgcmV2ZXJ0ICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICJpbnRlbnRldSDCq2dpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpwrsiCisKKyM6IHNlcXVlbmNlci5jOjI3NTcKK21zZ2lkICJjaGVycnktcGljayBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJ1biDCq2NoZXJyeSBwaWNrwrsgamEgZXN0w6AgZW4gY3VycyIKKworIzogc2VxdWVuY2VyLmM6Mjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgImludGVudGV1IMKrZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KcK7IgorCisjOiBzZXF1ZW5jZXIuYzoyNzczCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgc2VxdWVuY2VyIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIGVsIGRpcmVjdG9yaSBkZSBzZXHDvGVuY2lhZG9yIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6Mjc4OAorbXNnaWQgImNvdWxkIG5vdCBsb2NrIEhFQUQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYmxvcXVlamFyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI4NDggc2VxdWVuY2VyLmM6NDIwOQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAibmkgaGkgaGEgY2FwIMKrY2hlcnJ5IHBpY2vCuyBuaSBjYXAgcmV2ZXJzacOzIGVuIGN1cnMiCisKKyM6IHNlcXVlbmNlci5jOjI4NTAgc2VxdWVuY2VyLmM6Mjg2MQorbXNnaWQgImNhbm5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgIm5vIGVzIHBvdCByZXNvbGRyZSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoyODUyIHNlcXVlbmNlci5jOjI4OTYKK21zZ2lkICJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAibm8gZXMgcG90IGF2b3J0YXIgZGVzIGQndW5hIGJyYW5jYSBxdWUgZW5jYXJhIGhhIGRlIG7DoGl4ZXIiCisKKyM6IHNlcXVlbmNlci5jOjI4ODIgYnVpbHRpbi9ncmVwLmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBvYnJpciDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjI4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJzogJXMiCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgwqslc8K7OiAlcyIKKworIzogc2VxdWVuY2VyLmM6Mjg4NQorbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgImZpbmFsIGRlIGZpdHhlciBpbmVzcGVyYXQiCisKKyM6IHNlcXVlbmNlci5jOjI4OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICJlbCBmaXR4ZXIgSEVBRCBlbW1hZ2F0emVtYXQgYWJhbnMgZGUgZmVyIMKrY2hlcnJ5IHBpY2vCuyDCqyVzwrsgw6lzIG1hbG3DqHMiCisKKyM6IHNlcXVlbmNlci5jOjI5MDIKK21zZ2lkICJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQuIE5vdCByZXdpbmRpbmcsIGNoZWNrIHlvdXIgSEVBRCEiCittc2dzdHIgIlNlbWJsYSBxdWUgaGV1IG1vZ3V0IEhFQUQgc2Vuc2UgcmVib2JpbmFyLCBjb21wcm92ZXUtaG8gSEVBRCIKKworIzogc2VxdWVuY2VyLmM6Mjk0MworbXNnaWQgIm5vIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAibm8gaGkgaGEgY2FwIHJldmVyc2nDsyBlbiBjdXJzIgorCisjOiBzZXF1ZW5jZXIuYzoyOTUxCittc2dpZCAibm8gY2hlcnJ5LXBpY2sgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIm5pIGhpIGhhIGNhcCDCq2NoZXJyeSBwaWNrwrsgZW4gY3VycyIKKworIzogc2VxdWVuY2VyLmM6Mjk2MQorbXNnaWQgImZhaWxlZCB0byBza2lwIHRoZSBjb21taXQiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb21ldHJlIGxhIGNvbWlzc2nDsyIKKworIzogc2VxdWVuY2VyLmM6Mjk2OAorbXNnaWQgInRoZXJlIGlzIG5vdGhpbmcgdG8gc2tpcCIKK21zZ3N0ciAibm8gaGkgaGEgcmVzIGEgb21ldHJlIgorCisjOiBzZXF1ZW5jZXIuYzoyOTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJoYXZlIHlvdSBjb21taXR0ZWQgYWxyZWFkeT9cbiIKKyJ0cnkgXCJnaXQgJXMgLS1jb250aW51ZVwiIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMwOTUgc2VxdWVuY2VyLmM6NDEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFjdHVhbGl0emFyICVzIgorCisjOiBzZXF1ZW5jZXIuYzozMTM0IHNlcXVlbmNlci5jOjQxMDEKK21zZ2lkICJjYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjMxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNvcGlhciDCqyVzwrsgYSDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjMxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJQb2RldSBlc21lbmFyIGxhIGNvbWlzc2nDsyBhcmEsIGFtYlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiVW5hIHZlZ2FkYSBxdWUgZXN0aWd1ZXUgc2F0aXNmZXQgYW1iIGVscyB2b3N0cmVzIGNhbnZpcywgZXhlY3V0ZXVcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzozMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAlcy4uLiAlLipzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFwbGljYXIgJXMuLi4gJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MzE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWVyZ2UgJS4qcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBmdXNpb25hciAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzozMTkwIHNlcXVlbmNlci5jOjMxOTQgYnVpbHRpbi9kaWZmdG9vbC5jOjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY29waWFyIMKrJXPCuyBhIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MzIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIGZhaWxlZDogJXNcbiIKKyIlc1lvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiaGEgZmFsbGF0OiAlc1xuIgorIiVzUG9kZXUgc29sdWNpb25hciBlbCBwcm9ibGVtYSwgaSBsbGF2b3JzIGV4ZWN1dGFyXG4iCisiXG4iCisiIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjI3Cittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKK21zZ3N0ciAiaSBoYSBmZXQgY2FudmlzIGEgbCfDrW5kZXggaS9vIGwnYXJicmUgZGUgdHJlYmFsbFxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gc3VjY2VlZGVkOiAlc1xuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImwnZXhlY3VjacOzIGhhIHRpbmd1dCDDqHhpdDogJXNcbiIKKyJwZXLDsiBoYSBkZWl4YXQgY2FudmlzIGEgbCfDrW5kZXggaS9vIGwnYXJicmUgZGUgdHJlYmFsbFxuIgorIkNvbWV0ZXUgbyBmZXUgwqtzdGFzaMK7IGRlbHMgdm9zdHJlcyBjYW52aXMsIGkgbGxhdm9ycyBleGVjdXRldVxuIgorIlxuIgorIiBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6MzI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGxhYmVsIG5hbWU6ICclLipzJyIKK21zZ3N0ciAibm9tIGQnZXRpcXVldGEgbm8gcGVybcOoczogwqslLipzwrsiCisKKyM6IHNlcXVlbmNlci5jOjMzNDgKK21zZ2lkICJ3cml0aW5nIGZha2Ugcm9vdCBjb21taXQiCittc2dzdHIgInMnZXN0w6AgZXNjcml2aW50IHVuYSBjb21pc3Npw7MgYXJyZWwgZmFsc2EiCisKKyM6IHNlcXVlbmNlci5jOjMzNTMKK21zZ2lkICJ3cml0aW5nIHNxdWFzaC1vbnRvIgorbXNnc3RyICJzJ2VzdMOgIGVzY3JpdmludCDCq3NxdWFzaC1vbnRvwrsiCisKKyM6IHNlcXVlbmNlci5jOjMzOTEgYnVpbHRpbi9yZWJhc2UuYzo4NzYgYnVpbHRpbi9yZWJhc2UuYzo4ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjZXJjYXIgbCdhcmJyZSBkZSAlcyIKKworIzogc2VxdWVuY2VyLmM6MzQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MzQ2NworbXNnaWQgImNhbm5vdCBtZXJnZSB3aXRob3V0IGEgY3VycmVudCByZXZpc2lvbiIKK21zZ3N0ciAibm8gZXMgcG90IGZ1c2lvbmFyIHNlbnNlIHVuYSByZXZpc2nDsyBhY3R1YWwiCisKKyM6IHNlcXVlbmNlci5jOjM0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclLipzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgwqslLipzwrsiCisKKyM6IHNlcXVlbmNlci5jOjM0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBtZXJnZTogJyUuKnMnIgorbXNnc3RyICJubyBoaSBoYSByZXMgcGVyIGZ1c2lvbmFyIMKrJS4qc8K7IgorCisjOiBzZXF1ZW5jZXIuYzozNTEwCittc2dpZCAib2N0b3B1cyBtZXJnZSBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gdG9wIG9mIGEgW25ldyByb290XSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgY29tbWl0IG1lc3NhZ2Ugb2YgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgbWlzc2F0Z2UgZGUgY29taXNzacOzIGRlIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MzY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXZlbiBhdHRlbXB0IHRvIG1lcmdlICclLipzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBmdXNpb25hciDCqyUuKnPCuyIKKworIzogc2VxdWVuY2VyLmM6MzcwNAorbXNnaWQgIm1lcmdlOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgImZ1c2nDszogbm8gcydoYSBwb2d1dCBlc2NyaXVyZSB1biBmaXR4ZXIgZCfDrW5kZXggbm91IgorCisjOiBzZXF1ZW5jZXIuYzozNzczIGJ1aWx0aW4vcmViYXNlLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLlxuIgorbXNnc3RyICJTJ2hhIGFwbGljYXQgZWwgwqtzdGFzaMK7IGF1dG9tw6B0aWNhbWVudC5cbiIKKworIzogc2VxdWVuY2VyLmM6Mzc4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIm5vIGVzIHBvdCBlbW1hZ2F0emVtYXIgJXMiCisKKyM6IHNlcXVlbmNlci5jOjM3ODggYnVpbHRpbi9yZWJhc2UuYzo3NDkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKyJZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLlxuIgorIllvdSBjYW4gcnVuIFwiZ2l0IHN0YXNoIHBvcFwiIG9yIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdCBhbnkgdGltZS5cbiIKK21zZ3N0ciAiIgorIkwnYXBsaWNhY2nDsyBkZWwgwqtzdGFzaMK7IGF1dG9tw6B0aWMgaGEgcmVzdWx0YXQgZW4gY29uZmxpY3Rlcy5cbiIKKyJFbHMgdm9zdHJlcyBjYW52aXMgZXN0YW4gc2VndXJzIGVuIGVsIMKrc3Rhc2jCuy5cbiIKKyJQb2RldSBleGVjdXRhciBcImdpdCBzdGFzaCBwb3BcIiBvIFwiZ2l0IHN0YXNoIGRyb3BcIiBlbiBxdWFsc2V2b2wgbW9tZW50LlxuIgorCisjOiBzZXF1ZW5jZXIuYzozODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAibm8gZXMgcG90IGFnYWZhciAlcyIKKworIzogc2VxdWVuY2VyLmM6Mzg2MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm90IGEgdmFsaWQgT0lEIgorbXNnc3RyICIlczogbm8gw6lzIHVuIE9JRCB2w6BsaWQiCisKKyM6IHNlcXVlbmNlci5jOjM4NjggZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc3OQorbXNnaWQgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBzZXBhcmFyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjM4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCBIRUFEXG4iCittc2dzdHIgIkF0dXJhdCBhIEhFQURcbiIKKworIzogc2VxdWVuY2VyLmM6Mzg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzXG4iCittc2dzdHIgIkF0dXJhdCBhICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjM4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBleGVjdXRlIHRoZSB0b2RvIGNvbW1hbmRcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzLi4uICAlLipzXG4iCittc2dzdHIgIkF0dXJhdCBhICVzLi4uICAlLipzXG4iCisKKyM6IHNlcXVlbmNlci5jOjQwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kICVkIgorbXNnc3RyICJvcmRyZSAlZCBkZXNjb25lZ3VkYSIKKworIzogc2VxdWVuY2VyLmM6NDEwOQorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9yaWctaGVhZCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgb3JpZy1oZWFkIgorCisjOiBzZXF1ZW5jZXIuYzo0MTE0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ29udG8nIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciAnb250byciCisKKyM6IHNlcXVlbmNlci5jOjQxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSBIRUFEIHRvICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFjdHVhbGl0emFyIEhFQUQgYSAlcyIKKworIzogc2VxdWVuY2VyLmM6NDIyMQorbXNnaWQgImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJObyBlcyBwb3QgZmVyIMKrcmViYXNlwrs6IHRlbml1IGNhbnZpcyDCq3Vuc3RhZ2VkwrsuIgorCisjOiBzZXF1ZW5jZXIuYzo0MjMwCittc2dpZCAiY2Fubm90IGFtZW5kIG5vbi1leGlzdGluZyBjb21taXQiCittc2dzdHIgIm5vIGVzIHBvdCBlc21lbmFyIHVuYSBjb21pc3Npw7Mgbm8gZXhpc3RlbnQiCisKKyM6IHNlcXVlbmNlci5jOjQyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBmaWxlOiAnJXMnIgorbXNnc3RyICJmaXR4ZXIgbm8gdsOgbGlkOiDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjQyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb250ZW50czogJyVzJyIKK21zZ3N0ciAiY29udGluZ3V0IG5vIHbDoGxpZDogwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzo0MjM3Cittc2dpZCAiIgorIlxuIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSwgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisiXG4iCisiVGVuaXUgY2FudmlzIG5vIGNvbWVzb3MgZW4gZWwgdm9zdHJlIGFyYnJlIGRlIHRyZWJhbGwuIFxuIgorIkNvbWV0ZXUtbG9zIHByaW1lciBpIGRlc3Byw6lzIGV4ZWN1dGV1IMKrZ2l0IHJlYmFzZSAtLWNvbnRpbnVlwrsgZGUgbm91LiIKKworIzogc2VxdWVuY2VyLmM6NDI3MyBzZXF1ZW5jZXIuYzo0MzEyCisjLCAgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZmlsZTogJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBlbCBmaXR4ZXI6IMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6NDMyNworbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBlbGltaW5hciBDSEVSUllfUElDS19IRUFEIgorCisjOiBzZXF1ZW5jZXIuYzo0MzM0Cittc2dpZCAiY291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIm5vIHMnaGFuIHBvZ3V0IGNvbWV0cmUgZWxzIGNhbnZpcyDCq3N0YWdlZMK7LiIKKworIzogc2VxdWVuY2VyLmM6NDQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiJXM6IG5vIGVzIHBvdCBmZXIgwqtjaGVycnkgcGlja8K7IGEgJXMiCisKKyM6IHNlcXVlbmNlci5jOjQ0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGJhZCByZXZpc2lvbiIKK21zZ3N0ciAiJXM6IHJldmlzacOzIGluY29ycmVjdGEiCisKKyM6IHNlcXVlbmNlci5jOjQ0NzkKK21zZ2lkICJjYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIm5vIGVzIHBvdCByZXZlcnRpciBjb20gYSBjb21pc3Npw7MgaW5pY2lhbCIKKworIzogc2VxdWVuY2VyLmM6NDk1MgorbXNnaWQgIm1ha2Vfc2NyaXB0OiB1bmhhbmRsZWQgb3B0aW9ucyIKK21zZ3N0ciAibWFrZV9zY3JpcHQ6IG9wY2lvbnMgbm8gZ2VzdGlvbmFkZXMiCisKKyM6IHNlcXVlbmNlci5jOjQ5NTUKK21zZ2lkICJtYWtlX3NjcmlwdDogZXJyb3IgcHJlcGFyaW5nIHJldmlzaW9ucyIKK21zZ3N0ciAibWFrZV9zY3JpcHQ6IHMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gcHJlcGFyYXIgbGVzIHJldmlzaW9ucyIKKworIzogc2VxdWVuY2VyLmM6NTExMworbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGlzIHdpdGggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZScuXG4iCisiT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCittc2dzdHIgIiIKKyJQb2RldSBhcnJlZ2xhciBhaXjDsiBhbWIgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGkgZGVzcHLDqXMgJ2dpdCByZWJhc2UgLS0iCisiY29udGludWUnLlxuIgorCisjOiBzZXF1ZW5jZXIuYzo1MjI2IHNlcXVlbmNlci5jOjUyNDMKK21zZ2lkICJub3RoaW5nIHRvIGRvIgorbXNnc3RyICJyZXMgYSBmZXIiCisKKyM6IHNlcXVlbmNlci5jOjUyNTcKK21zZ2lkICJjb3VsZCBub3Qgc2tpcCB1bm5lY2Vzc2FyeSBwaWNrIGNvbW1hbmRzIgorbXNnc3RyICJubyBzJ2hhbiBwb2d1dCBvbWV0cmUgbGVzIG9yZHJlcyDCq3BpY2tzwrsgbm8gbmVjZXNzw6ByaWVzIgorCisjOiBzZXF1ZW5jZXIuYzo1MzUxCittc2dpZCAidGhlIHNjcmlwdCB3YXMgYWxyZWFkeSByZWFycmFuZ2VkLiIKK21zZ3N0ciAibCdzY3JpcHQgamEgZXN0YXZhIGVuZHJlw6dhdC4iCisKKyM6IHNldHVwLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICLCqyVzwrsgw6lzIGZvcmEgZGVsIGRpcMOyc2l0IgorCisjOiBzZXR1cC5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IG5vIHN1Y2ggcGF0aCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnZ2l0IDxjb21tYW5kPiAtLSA8cGF0aD4uLi4nIHRvIHNwZWNpZnkgcGF0aHMgdGhhdCBkbyBub3QgZXhpc3QgbG9jYWxseS4iCittc2dzdHIgIiIKKyIlczogbm8gaGkgaGEgdGFsIGNhbcOtIGVuIGwnYXJicmUgZGUgdHJlYmFsbC5cbiIKKyJVc2V1IMKrZ2l0IDxvcmRyZT4gLS0gPGNhbcOtPi4uLsK7IHBlciBhIGVzcGVjaWZpY2FyIGNhbWlucyBxdWUgbm8gZXhpc3RlaXhpbiAiCisibG9jYWxtZW50LiIKKworIzogc2V0dXAuYzoxODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiB1bmtub3duIHJldmlzaW9uIG9yIHBhdGggbm90IGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisicGFyw6BtZXRyZSBhbWJpZ3Ugwqslc8K7OiByZXZpc2nDsyBubyBjb25lZ3VkYSBvIGVsIGNhbcOtIG5vIMOpcyBlbiBsJ2FyYnJlIGRlICIKKyJ0cmViYWxsLlxuIgorIlVzZXUgwqstLcK7IHBlciBhIHNlcGFyYXIgZWxzIGNhbWlucyBkZSBsZXMgcmV2aXNpb25zOlxuIgorIidnaXQgPG9yZHJlPiBbPHJldmlzacOzPi4uLl0gLS0gWzxmaXR4ZXI+Li4uXSciCisKKyM6IHNldHVwLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAnJXMnIG11c3QgY29tZSBiZWZvcmUgbm9uLW9wdGlvbiBhcmd1bWVudHMiCittc2dzdHIgImwnb3BjacOzIMKrJXPCuyBoYSBkZSB2ZW5pciBhYmFucyBkZWxzIGFyZ3VtZW50cyBvcGNpb25hbHMiCisKKyM6IHNldHVwLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWVcbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyJwYXLDoG1ldHJlIGFtYmlndSDCqyVzwrs6IGFtYmTDs3MgdW5hIHJldmlzacOzIGkgdW4gbm9tIGRlIGZpdHhlclxuIgorIlVzZXUgJy0tJyBwZXIgYSBzZXBhcmFyIGVscyBjYW1pbnMgZGUgbGVzIHJldmlzaW9uczpcbiIKKyInZ2l0IDxvcmRyZT4gWzxyZXZpc2nDsz4uLi5dIC0tIFs8Zml0eGVyPi4uLl0nIgorCisjOiBzZXR1cC5jOjM5MQorbXNnaWQgInVuYWJsZSB0byBzZXQgdXAgd29yayB0cmVlIHVzaW5nIGludmFsaWQgY29uZmlnIgorbXNnc3RyICIiCisibm8gcydoYSBwb2d1dCBjb25maWd1cmFyIHVuIGFyYnJlIGRlIHRyZWJhbGwgdXRpbGl0emFudCB1bmEgY29uZmlndXJhY2nDsyBubyAiCisidsOgbGlkYSIKKworIzogc2V0dXAuYzozOTUKK21zZ2lkICJ0aGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIKK21zZ3N0ciAiYXF1ZXN0YSBvcGVyYWNpw7MgcydoYSBkJ2V4ZWN1dGFyIGVuIHVuIGFyYnJlIGRlIHRyZWJhbGwiCisKKyM6IHNldHVwLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIgorbXNnc3RyICJTJ2VzcGVyYXZhIHVuYSB2ZXJzacOzIGRlIGRpcMOyc2l0IGRlIGdpdCA8PSAlZCwgcydoYSB0cm9iYXQgJWQiCisKKyM6IHNldHVwLmM6NTQ5Cittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICJzJ2hhbiB0cm9iYXQgZXh0ZW5zaW9ucyBkZSBkaXDDsnNpdCBkZXNjb25lZ3VkZXM6IgorCisjOiBzZXR1cC5jOjU2OAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBvcGVuaW5nICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2JyaXIgwqslc8K7IgorCisjOiBzZXR1cC5jOjU3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbGFyZ2UgdG8gYmUgYSAuZ2l0IGZpbGU6ICclcyciCittc2dzdHIgIm1hc3NhIGxhcmcgcGVyIGEgc2VyIHVuIGZpdHhlciAuZ2l0OiDCqyVzwrsiCisKKyM6IHNldHVwLmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgJXMiCittc2dzdHIgImVycm9yIGVuIGxsZWdpciAlcyIKKworIzogc2V0dXAuYzo1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBnaXRmaWxlIGZvcm1hdDogJXMiCittc2dzdHIgImZvcm1hdCBnaXRmaWxlIG5vIHbDoGxpZDogJXMiCisKKyM6IHNldHVwLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHBhdGggaW4gZ2l0ZmlsZTogJXMiCittc2dzdHIgInNlbnNlIGNhbcOtIGFsIGdpdGZpbGU6ICVzIgorCisjOiBzZXR1cC5jOjU3OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIm5vIMOpcyB1biBkaXDDsnNpdCBkZSBnaXQ6ICVzIgorCisjOiBzZXR1cC5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICInJCVzJyB0b28gYmlnIgorbXNnc3RyICLCqyQlc8K7IG1hc3NhIGdyYW4iCisKKyM6IHNldHVwLmM6NjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAnJXMnIgorbXNnc3RyICJubyDDqXMgdW4gZGlww7JzaXQgZGUgZ2l0OiDCqyVzwrsiCisKKyM6IHNldHVwLmM6NzIwIHNldHVwLmM6NzIyIHNldHVwLmM6NzUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgY2FudmlhciBkZSBkaXJlY3RvcmkgYSDCqyVzwrsiCisKKyM6IHNldHVwLmM6NzI1IHNldHVwLmM6NzgxIHNldHVwLmM6NzkxIHNldHVwLmM6ODMwIHNldHVwLmM6ODM4Cittc2dpZCAiY2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIm5vIGVzIHBvdCB0b3JuYXIgYWwgZGlyZWN0b3JpIGRlIHRyZWJhbGwgYWN0dWFsIgorCisjOiBzZXR1cC5jOjg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJSpzJXMlcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZmVyIHN0YXQgYSDCqyUqcyVzJXPCuyIKKworIzogc2V0dXAuYzoxMDkwCittc2dpZCAiVW5hYmxlIHRvIHJlYWQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgZGlyZWN0b3JpIGRlIHRyZWJhbGwgYWN0dWFsIgorCisjOiBzZXR1cC5jOjEwOTkgc2V0dXAuYzoxMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGFuZ2UgdG8gJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGNhbnZpYXIgYSDCqyVzwrsiCisKKyM6IHNldHVwLmM6MTExMAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMpOiAlcyIKK21zZ3N0ciAibm8gw6lzIHVuIGRpcMOyc2l0IGRlIGdpdCAobmkgY2FwIGRlbHMgZGlyZWN0b3JpcyBwYXJlcyk6ICVzIgorCisjOiBzZXR1cC5jOjExMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgcGFyZW50IHVwIHRvIG1vdW50IHBvaW50ICVzKVxuIgorIlN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0gYm91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuIgorbXNnc3RyICIiCisibm8gw6lzIHVuIGRpcMOyc2l0IGRlIGdpdCAobmkgY2FwIHBhcmUgZmlucyBhbCBwdW50IGRlIG11bnRhdGdlICVzKVxuIgorIlMnYXR1cmEgYSBsYSBmcm9udGVyYSBkZSBzaXN0ZW1hIGRlIGZpdHhlcnMgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gIgorIm5vIGVzdMOgIGVzdGFibGVydCkuIgorCisjOiBzZXR1cC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgKDAlLjNvKS5cbiIKKyJUaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKyJoaSBoYSB1biBwcm9ibGVtYSBhbWIgZWwgdmFsb3IgZGUgbW9kZSBkZSBmaXR4ZXIgY29yZS5zaGFyZWRSZXBvc2l0b3J5ICIKKyIoMCUuM28pLlxuIgorIkVsIHByb3BpZXRhcmkgZGVscyBmaXR4ZXJzIHNlbXByZSBoYSBkZSB0ZW5pciBwZXJtaXNvcyBkZSBsZWN0dXJhIGkgIgorImVzY3JpcHR1cmEuIgorCisjOiBzZXR1cC5jOjEyNzEKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBvciBkdXAgZmFpbGVkIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIG9icmlyIC9kZXYvbnVsbCBvIGR1cCIKKworIzogc2V0dXAuYzoxMjg2Cittc2dpZCAiZm9yayBmYWlsZWQiCittc2dzdHIgImVsIMKrZm9ya8K7IGhhIGZhbGxhdCIKKworIzogc2V0dXAuYzoxMjkxCittc2dpZCAic2V0c2lkIGZhaWxlZCIKK21zZ3N0ciAibCfCq3N0YXNowrsgaGEgZmFsbGF0IgorCisjOiBzaGExLWZpbGUuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdDsgY2hlY2sgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKK21zZ3N0ciAibm8gZXhpc3RlaXggZWwgZGlyZWN0b3JpIGQnb2JqZWN0ZSAlczsgY29tcHJvdmV1IC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiCisKKyM6IHNoYTEtZmlsZS5jOjUwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIGFsdGVybmF0ZSBvYmplY3QgcGF0aDogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbm9ybWFsaXR6YXIgZWwgY2Ftw60gYSBsJ29iamVjdGUgYWx0ZXJuYXRpdTogJXMiCisKKyM6IHNoYTEtZmlsZS5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWdub3JpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgb2JqZWN0IGRpcmVjdG9yeTogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbm9ybWFsaXR6YXIgZWwgZGlyZWN0b3JpIGRlIGwnb2JqZWN0ZTogJXMiCisKKyM6IHNoYTEtZmlsZS5jOjYyNQorIywgZnV6enkKK21zZ2lkICJ1bmFibGUgdG8gZmRvcGVuIGFsdGVybmF0ZXMgbG9ja2ZpbGUiCittc2dzdHIgIm5vIHMnaGFuIHBvZ3V0IGVzY3JpdXJlIGVscyBwYXLDoG1ldHJlcyBhbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyIKKworIzogc2hhMS1maWxlLmM6NjQzCittc2dpZCAidW5hYmxlIHRvIHJlYWQgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIGVsIGZpdHhlciDCq2FsdGVybmF0ZXPCuyIKKworIzogc2hhMS1maWxlLmM6NjUwCittc2dpZCAidW5hYmxlIHRvIG1vdmUgbmV3IGFsdGVybmF0ZXMgZmlsZSBpbnRvIHBsYWNlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG1vdXJlIGVsIG5vdSBmaXR4ZXIgwqthbHRlcm5hdGVzwrsgYWwgbGxvYyIKKworIzogc2hhMS1maWxlLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiZWwgY2Ftw60gwqslc8K7IG5vIGV4aXN0ZWl4IgorCisjOiBzaGExLWZpbGUuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBhcyBhIGxpbmtlZCBjaGVja291dCBpcyBub3Qgc3VwcG9ydGVkIHlldC4iCittc2dzdHIgIiIKKyJFbmNhcmEgbm8gc2Ugc3Vwb3J0YSBlbCBkaXDDsnNpdCBkZSByZWZlcsOobmNpYSDCqyVzwrsgY29tIGEgYWdhZmFtZW50IGVubGxhw6dhdC4iCisKKyM6IHNoYTEtZmlsZS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJlbCBkaXDDsnNpdCBkZSByZWZlcsOobmNpYSDCqyVzwrsgbm8gw6lzIHVuIGRpcMOyc2l0IGxvY2FsLiIKKworIzogc2hhMS1maWxlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgc2hhbGxvdyIKK21zZ3N0ciAiZWwgZGlww7JzaXQgZGUgcmVmZXLDqG5jaWEgwqslc8K7IMOpcyBzdXBlcmZpY2lhbCIKKworIzogc2hhMS1maWxlLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgZ3JhZnRlZCIKK21zZ3N0ciAiZWwgZGlww7JzaXQgZGUgcmVmZXLDqG5jaWEgwqslc8K7IMOpcyBlbXBlbHRhdCIKKworIzogc2hhMS1maWxlLmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSB3aGlsZSBwYXJzaW5nIGFsdGVybmF0ZSByZWZzOiAlcyIKK21zZ3N0ciAibMOtbmlhIG5vIHbDoGxpZGEgcXVhbiBzJ2FuYWxpdHphdmVuIGxlcyByZWZlcsOobmNpZXMgZGUgbCfCq2FsdGVybmF0ZcK7OiAlcyIKKworIzogc2hhMS1maWxlLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo5NjQKK21zZ2lkICJtbWFwIGZhaWxlZCIKK21zZ3N0ciAibW1hcCBoYSBmYWxsYXQiCisKKyM6IHNoYTEtZmlsZS5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGZpbGUgJXMgaXMgZW1wdHkiCittc2dzdHIgImVsIHRpcHVzIGQnb2JqZWN0ZSAlcyDDqXMgYnVpdCIKKworIzogc2hhMS1maWxlLmM6MTI1MiBzaGExLWZpbGUuYzoyMzkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsJ29iamVjdGUgwqslc8K7IgorCisjOiBzaGExLWZpbGUuYzoxMjU0IHNoYTEtZmlsZS5jOjIzOTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsJ29iamVjdGU6ICVzIgorCisjOiBzaGExLWZpbGUuYzoxMjk2Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSIKK21zZ3N0ciAidGlwdXMgZCdvYmplY3RlIMOpcyBpbmNvcnJlY3RlIgorCisjOiBzaGExLWZpbGUuYzoxMzgwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZGVzZW1wYXF1ZXRhciBsYSBjYXDDp2FsZXJhICVzIGFtYiAtLWFsbG93LXVua25vd24tdHlwZSIKKworIzogc2hhMS1maWxlLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBkZXNlbXBhcXVldGFyIGxhIGNhcMOnYWxlcmEgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjEzODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjYXDDp2FsZXJhICVzIGFtYiAtLWFsbG93LXVua25vd24tdHlwZSIKKworIzogc2hhMS1maWxlLmM6MTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjYXDDp2FsZXJhICVzIgorCisjOiBzaGExLWZpbGUuYzoxNTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgbCdvYmplY3RlICVzIgorCisjOiBzaGExLWZpbGUuYzoxNTg4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlbWVudCAlcyBub3QgZm91bmQgZm9yICVzIgorbXNnc3RyICJubyBzJ2hhbiB0cm9iYXQgbGVzIHBsYW50aWxsZXMgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE1OTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImxvb3NlIG9iamVjdCAlcyAoc3RvcmVkIGluICVzKSBpcyBjb3JydXB0IgorbXNnc3RyICJsJ29iamVjdGUgbG9jYWwgJXMgw6lzIG1hbG3DqHMiCisKKyM6IHNoYTEtZmlsZS5jOjE1OTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInBhY2tlZCBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAibCdvYmplY3RlIGxvY2FsICVzIMOpcyBtYWxtw6hzIgorCisjOiBzaGExLWZpbGUuYzoxNjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGFsIGZpdHhlciAlcyIKKworIzogc2hhMS1maWxlLmM6MTcwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBwZXJtaXNzaW9uIHRvICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgcmVzb2xkcmUgbGEgcmV2aXNpw7M6ICVzIgorCisjOiBzaGExLWZpbGUuYzoxNzEzCittc2dpZCAiZmlsZSB3cml0ZSBlcnJvciIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlc2NyaXVyZSBhbCBmaXR4ZXIiCisKKyM6IHNoYTEtZmlsZS5jOjE3MzIKKyMsIGZ1enp5Cittc2dpZCAiZXJyb3Igd2hlbiBjbG9zaW5nIGxvb3NlIG9iamVjdCBmaWxlIgorbXNnc3RyICJlcnJvciBlbiB0YW5jYXIgZWwgZml0eGVyIGRlIHBhcXVldCIKKworIzogc2hhMS1maWxlLmM6MTc5NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgYWRkaW5nIGFuIG9iamVjdCB0byByZXBvc2l0b3J5IGRhdGFiYXNlICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE3OTkKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIHVuIGZpdHhlciB0ZW1wb3JhbCIKKworIzogc2hhMS1maWxlLmM6MTgyMworIywgZnV6enkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgbCdvYmplY3RlIGRlIG5vdGEiCisKKyM6IHNoYTEtZmlsZS5jOjE4MjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIG5ldyBvYmplY3QgJXMgKCVkKSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBkZXNpbmZsYXIgbCdvYmplY3RlIGFubmV4YXQgKCVkKSIKKworIzogc2hhMS1maWxlLmM6MTgzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZUVuZCBvbiBvYmplY3QgJXMgZmFpbGVkICglZCkiCittc2dzdHIgImhhIGZhbGxhdCBmc3RhdCBhICVzIgorCisjOiBzaGExLWZpbGUuYzoxODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZ1c2VkIGJ5IHVuc3RhYmxlIG9iamVjdCBzb3VyY2UgZGF0YSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTg0NyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjkyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2JyaXIgwqslc8K7IgorCisjOiBzaGExLWZpbGUuYzoxOTIyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIGwnb2JqZWN0ZSAlcyIKKworIzogc2hhMS1maWxlLmM6MTk2MgorIywgZnV6enkKK21zZ2lkICJjb3JydXB0IGNvbW1pdCIKK21zZ3N0ciAiYXV0b3IgY29ycmVnaXQgZGUgbGEgY29taXNzacOzIgorCisjOiBzaGExLWZpbGUuYzoxOTcwCisjLCBmdXp6eQorbXNnaWQgImNvcnJ1cHQgdGFnIgorbXNnc3RyICJpbmZvcm1hIGRlIGxlcyBldGlxdWV0ZXMiCisKKyM6IHNoYTEtZmlsZS5jOjIwNjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZXJyb3Igd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgImVycm9yIGVuIGxsZWdpciAlcyIKKworIzogc2hhMS1maWxlLmM6MjA3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgcmVhZCB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciBsJ8OtbmRleCIKKworIzogc2hhMS1maWxlLmM6MjE0NSBzaGExLWZpbGUuYzoyMTU0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogZmFpbGVkIHRvIGluc2VydCBpbnRvIGRhdGFiYXNlIgorbXNnc3RyICJncGcgaGEgZmFsbGF0IGVuIHNpZ25hciBsZXMgZGFkZXMiCisKKyM6IHNoYTEtZmlsZS5jOjIxNjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnN1cHBvcnRlZCBmaWxlIHR5cGUiCittc2dzdHIgInZlcnNpw7MgZCfDrW5kZXggbm8gY29tcGF0aWJsZSAlcyIKKworIzogc2hhMS1maWxlLmM6MjE4NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgb2JqZWN0IgorbXNnc3RyICLCqyVzwrsgbm8gw6lzIHVuYSB0ZXJtZSB2w6BsaWQiCisKKyM6IHNoYTEtZmlsZS5jOjIxODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICIlcyBubyDDqXMgdW4gb2JqZWN0ZSBkZSDCqyVzwrsgdsOgbGlkIgorCisjOiBzaGExLWZpbGUuYzoyMjEzIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciAlcyIKKworIzogc2hhMS1maWxlLmM6MjQwMyBzaGExLWZpbGUuYzoyNDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggZm9yICVzIChleHBlY3RlZCAlcykiCittc2dzdHIgIm5vIGNvaW5jaWRlaXggbGEgc3VtYSBwZXIgYSAlcyAocydlc3BlcmF2YSAlcykiCisKKyM6IHNoYTEtZmlsZS5jOjI0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1tYXAgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZmVyIMKrbW1hcMK7ICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDMyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgaGVhZGVyIG9mICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGRlc2VtcGFxdWV0YXIgbGEgY2Fww6dhbGVyYSBkZSAlcyIKKworIzogc2hhMS1maWxlLmM6MjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgaGVhZGVyIG9mICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjYXDDp2FsZXJhIGRlICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgY29udGVudHMgb2YgJXMiCittc2dzdHIgIm5vIHMnaGFuIHBvZ3V0IGRlc2VtcGFxdWV0YXIgZWxzIGNvbnRpbmd1dHMgZGUgJXMiCisKKyM6IHNoYTEtbmFtZS5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCBTSEExICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAibCdTSEExICVzIGN1cnQgw6lzIGFtYmlndSIKKworIzogc2hhMS1uYW1lLmM6NDk4Cittc2dpZCAiVGhlIGNhbmRpZGF0ZXMgYXJlOiIKK21zZ3N0ciAiRWxzIGNhbmRpZGF0cyBzw7NuOiIKKworIzogc2hhMS1uYW1lLmM6Nzk3Cittc2dpZCAiIgorIkdpdCBub3JtYWxseSBuZXZlciBjcmVhdGVzIGEgcmVmIHRoYXQgZW5kcyB3aXRoIDQwIGhleCBjaGFyYWN0ZXJzXG4iCisiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorIm1heSBiZSBjcmVhdGVkIGJ5IG1pc3Rha2UuIEZvciBleGFtcGxlLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorIkdpdCBub3JtYWxtZW50IG1haSBjcmVhIHVuYSByZWZlcsOobmNpYSBxdWUgYWNhYmkgYW1iIDQwIGNhcsOgY3RlcnNcbiIKKyJoZXhhZGVjaW1hbHMgcGVycXXDqCBzJ2lnbm9yYXLDoCBxdWFuIG5vbcOpcyBlc3BlY2lmaXF1ZXUgNDAgY2Fyw6BjdGVyc1xuIgorImhleGFkZWNpbWFscy4gQXF1ZXN0ZXMgcmVmZXLDqG5jaWVzIGVzIHBvZGVuIGNyZWFyIHBlciBlcnJvci4gUGVyXG4iCisiZXhlbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisib24gwqskYnLCuyDDqXMgYnVpZGEgcGVyIGFsZ3VuIG1vdGl1IGkgZXMgY3JlYSB1bmEgcmVmZXLDqG5jaWEgZGUgNDAgY2Fyw6BjdGVyc1xuIgorImhleGFkZWNpbWFscy4gRXhhbWluZXUgYXF1ZXN0ZXMgcmVmZXLDqG5jaWVzIGkgcG90c2VyXG4iCisic3VwcmltaXUtbGVzLiBEZXNhY3RpdmV1IGFxdWVzdCBtaXNzYXRnZSBleGVjdXRhbnRcbiIKKyLCq2dpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlwrsiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZQorIzogc3RyYnVmLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEdpQiIKK21zZ3N0ciAiJXUuJTIuMnUgR2lCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCL3MiCittc2dzdHIgIiV1LiUyLjJ1IEdpQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUKKyM6IHN0cmJ1Zi5jOjgzMgorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIiCittc2dzdHIgIiV1LiUyLjJ1IE1pQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQi9zIgorbXNnc3RyICIldS4lMi4ydSBNaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlCisjOiBzdHJidWYuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCIgorbXNnc3RyICIldS4lMi4ydSBLaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBLaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgS2lCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlCisjOiBzdHJidWYuYzo4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiJXUgYnl0ZXMiCittc2dzdHJbMF0gIiV1IGJ5dGUiCittc2dzdHJbMV0gIiV1IGJ5dGVzIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg1MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlL3MiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzL3MiCittc2dzdHJbMF0gIiV1IGJ5dGUvcyIKK21zZ3N0clsxXSAiJXUgYnl0ZXMvcyIKKworIzogc3RyYnVmLmM6MTE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZWRpdCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVkaXRhciDCqyVzwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjExNCBzdWJtb2R1bGUuYzoxNDMKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAiIgorIk5vIGVzIHBvdCBjYW52aWFyIHVuIC5naXRtb2R1bGVzIG5vIGZ1c2lvbmF0LCBwcmltZXIgcmVzb2xldSBlbHMgY29uZmxpY3RlcyAiCisiZGUgZnVzacOzIgorCisjOiBzdWJtb2R1bGUuYzoxMTggc3VibW9kdWxlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCB0cm9iYXIgbGEgc2VjY2nDsyBlbiAuZ2l0bW9kdWxlcyBvbiBwYXRoPSVzIgorCisjOiBzdWJtb2R1bGUuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSAuZ2l0bW9kdWxlcyBlbnRyeSBmb3IgJXMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZWxpbWluYXIgbCdlbnRyYWRhIGRlIC5naXRtb2R1bGVzIHBlciBhICVzIgorCisjOiBzdWJtb2R1bGUuYzoxNjUKK21zZ2lkICJzdGFnaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorbXNnc3RyICJsJ2FsbGlzdGFtZW50IGRlbCAuZ2l0bW9kdWxlcyBhY3R1YWxpdHphdCBoYSBmYWxsYXQiCisKKyM6IHN1Ym1vZHVsZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJpbiB1bnBvcHVsYXRlZCBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiYWwgc3VibcOyZHVsIHNlbnNlIHBvcHVsYXIgwqslc8K7IgorCisjOiBzdWJtb2R1bGUuYzozNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0aHNwZWMgJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICJMJ2VzcGVjaWZpY2FjacOzIMKrJXPCuyDDqXMgZW4gZWwgc3VibcOyZHVsIMKrJS4qc8K7IgorCisjOiBzdWJtb2R1bGUuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGVudHJ5ICclcycgKCVzKSBpcyBhICVzLCBub3QgYSBjb21taXQiCittc2dzdHIgImwnZW50cmFkYSBkZWwgc3VibcOyZHVsIMKrJXPCuyAoJXMpIMOpcyBhICVzLCBubyDDqXMgdW5hIGNvbWlzc2nDsyIKKworIzogc3VibW9kdWxlLmM6MTE0NyBidWlsdGluL2JyYW5jaC5jOjY4MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjAxNgorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHJlc29sZHJlIEhFQUQgY29tIGEgcmVmZXLDqG5jaWEgdsOgbGlkYS4iCisKKyM6IHN1Ym1vZHVsZS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFjY2VzcyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhY2NlZGlyIGFsIHN1Ym3DsmR1bCDCqyVzwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBub3QgcmVjb2duaXplZCBhcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICLCqyVzwrsgbm8gcmVjb25lZ3V0IGNvbSB1biBkaXDDsnNpdCBnaXQiCisKKyM6IHN1Ym1vZHVsZS5jOjE3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXJ0ICdnaXQgc3RhdHVzJyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBpbmljaWFyIMKrZ2l0IHN0YXR1c8K7IGFsIHN1Ym3DsmR1bCDCqyVzwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjE4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXhlY3V0YXIgJ2dpdCBzdGF0dXMnIGFsIHN1Ym3DsmR1bCDCqyVzwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjE4MTcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXhlY3V0YXIgJ2dpdCBzdGF0dXMnIGFsIHN1Ym3DsmR1bCDCqyVzwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjE5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgaGFzIGRpcnR5IGluZGV4IgorbXNnc3RyICJlbCBzdWJtw7JkdWwgwqslc8K7IHTDqSBsJ8OtbmRleCBicnV0IgorCisjOiBzdWJtb2R1bGUuYzoxOTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnIGNvdWxkIG5vdCBiZSB1cGRhdGVkLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhY3R1YWxpdHphciBlbCBzdWJtw7JkdWwgwqslc8K7IgorCisjOiBzdWJtb2R1bGUuYzoyMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSBnaXQgZGlyICclcycgaXMgaW5zaWRlIGdpdCBkaXIgJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKyJubyBlc3TDoCBhZG3DqHMgcmVsb2NhdGVfZ2l0ZGlyIHBlciBhbCBzdWJtw7JkdWwgwqslc8K7IGFtYiBtw6lzIGQndW4gYXJicmUgZGUgIgorInRyZWJhbGwiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNjAgc3VibW9kdWxlLmM6MjExOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIG5hbWUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHRyb2JhdCBlbCBub20gcGVsIHN1Ym3DsmR1bCDCqyVzwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbW92ZSAnJXMnIGludG8gYW4gZXhpc3RpbmcgZ2l0IGRpciIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoyMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNaWdyYXRpbmcgZ2l0IGRpcmVjdG9yeSBvZiAnJXMlcycgZnJvbVxuIgorIiclcycgdG9cbiIKKyInJXMnXG4iCittc2dzdHIgIiIKKyJTJ2VzdMOgIG1pZ3JhbnQgZWwgZGlyZWN0b3JpIGRlIMKrJXMlc8K7IGRlcyBkZVxuIgorIsKrJXPCuyBhXG4iCisiwqslc8K7XG4iCisKKyM6IHN1Ym1vZHVsZS5jOjIxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjZXJjYXIgcmVjdXJzaXZhbWVudCBhbCBjYW3DrSBkZSBzdWJtw7JkdWwgwqslc8K7IgorCisjOiBzdWJtb2R1bGUuYzoyMTk4Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGxzLWZpbGVzIGluIC4uIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGluaWNpYXIgbHMtZmlsZXMgYSAuLiIKKworIzogc3VibW9kdWxlLmM6MjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJscy10cmVlIHJldHVybmVkIHVuZXhwZWN0ZWQgcmV0dXJuIGNvZGUgJWQiCittc2dzdHIgImxzLXRyZWUgaGEgcmV0b3JuYXQgdW4gY29kaSBkZSByZXRvcm4gJWQgbm8gZXNwZXJhdCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBzdXNwaWNpb3VzIHN1Ym1vZHVsZSBuYW1lOiAlcyIKK21zZ3N0ciAicydlc3TDoCBpZ25vcmFudCBlbCBub20gZGUgc3VibcOyZHVsIHNvc3BpdMOycyAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjMwMworbXNnaWQgIm5lZ2F0aXZlIHZhbHVlcyBub3QgYWxsb3dlZCBmb3Igc3VibW9kdWxlLmZldGNoam9icyIKK21zZ3N0ciAibm8gZXMgcGVybWV0ZW4gZWxzIHZhbG9ycyBuZWdhdGl1cyBhIHN1Ym1vZHVsZS5mZXRjaGpvYnMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJyVzJyB3aGljaCBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICJ2YWxvciBubyB2w6BsaWQgcGVyIGEgJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo3NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSAuZ2l0bW9kdWxlcyBlbnRyeSAlcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhY3R1YWxpdHphciBsJ2VudHJhZGEgZGUgLmdpdG1vZHVsZXMgJXMiCisKKyM6IHRyYWlsZXIuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiCittc2dzdHIgImwnZXhlY3VjacOzIGRlIGwnb3JkcmUgZGUgcmVtb2xjIMKrJXPCuyBoYSBmYWxsYXQiCisKKyM6IHRyYWlsZXIuYzo0ODUgdHJhaWxlci5jOjQ5MCB0cmFpbGVyLmM6NDk1IHRyYWlsZXIuYzo1NDkgdHJhaWxlci5jOjU1MworIzogdHJhaWxlci5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICJ2YWxvciBkZXNjb25lZ3V0IMKrJXPCuyBwZXIgYSBsYSBjbGF1IMKrJXPCuyIKKworIzogdHJhaWxlci5jOjUzOSB0cmFpbGVyLmM6NTQ0IGJ1aWx0aW4vcmVtb3RlLmM6Mjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgIm3DqXMgZCd1biAlcyIKKworIzogdHJhaWxlci5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIgorbXNnc3RyICJ0ZXN0aW1vbmkgZGUgcmVtb2xjIGJ1aXQgZW4gZWwgcmVtb2xjICclLipzJyIKKworIzogdHJhaWxlci5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIGZpdHhlciBkJ2VudHJhZGEgwqslc8K7IgorCisjOiB0cmFpbGVyLmM6NzUzCittc2dpZCAiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgZGVzIGRlIHN0ZGluIgorCisjOiB0cmFpbGVyLmM6MTAxMSB3cmFwcGVyLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGZlciBzdGF0IGEgJXMiCisKKyM6IHRyYWlsZXIuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IGEgcmVndWxhciBmaWxlIgorbXNnc3RyICJlbCBmaXR4ZXIgJXMgbm8gw6lzIHVuIGZpdHhlciByZWd1bGFyIgorCisjOiB0cmFpbGVyLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCB3cml0YWJsZSBieSB1c2VyIgorbXNnc3RyICJlbCBmaXR4ZXIgJXMgbm8gw6lzIGdyYXZhYmxlIHBlciBsJ3VzdWFyaSIKKworIzogdHJhaWxlci5jOjEwMjcKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciBlbCBmaXR4ZXIgdGVtcG9yYWwiCisKKyM6IHRyYWlsZXIuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgdGVtcG9yYXJ5IGZpbGUgdG8gJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY2FudmlhciBlbCBub20gZGVsIGZpdHhlciB0ZW1wb3JhbCBhICVzIgorCisjOiB0cmFuc3BvcnQuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2V0IHVwc3RyZWFtIG9mICclcycgdG8gJyVzJyBvZiAnJXMnXG4iCittc2dzdHIgIkNhbnZpYXJpYSBsYSBmb250IGRlIMKrJXPCuyBhIMKrJXPCuyBkZSDCqyVzwrtcbiIKKworIzogdHJhbnNwb3J0LmM6MTQ1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBidW5kbGUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgZml0eGVyIMKrJXPCuyIKKworIzogdHJhbnNwb3J0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIKK21zZ3N0ciAidHJhbnNwb3J0OiBvcGNpw7MgZGUgcHJvZnVuZGl0YXQgbm8gdsOgbGlkYSDCqyVzwrsiCisKKyM6IHRyYW5zcG9ydC5jOjI2NgorbXNnaWQgInNlZSBwcm90b2NvbC52ZXJzaW9uIGluICdnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGRldGFpbHMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6MjY3Cittc2dpZCAic2VydmVyIG9wdGlvbnMgcmVxdWlyZSBwcm90b2NvbCB2ZXJzaW9uIDIgb3IgbGF0ZXIiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6NjMyCisjLCBmdXp6eQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSB0cmFuc3BvcnQuY29sb3IuKiBjb25maWciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGwnc2NyaXB0IGQnYXV0b3IiCisKKyM6IHRyYW5zcG9ydC5jOjcwNQorbXNnaWQgInN1cHBvcnQgZm9yIHByb3RvY29sIHYyIG5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6ODMxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGZvciBjb25maWcgJyVzJzogJXMiCittc2dzdHIgInZhbG9yIGRlc2NvbmVndXQgwqslc8K7IHBlciBhIGxhIGNsYXUgwqslc8K7IgorCisjOiB0cmFuc3BvcnQuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0ICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgIm5vIGVzIHBlcm1ldCBlbCB0cmFuc3BvcnQgwqslc8K7IgorCisjOiB0cmFuc3BvcnQuYzo5NDkKK21zZ2lkICJnaXQtb3Zlci1yc3luYyBpcyBubyBsb25nZXIgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgc3VibW9kdWxlIHBhdGhzIGNvbnRhaW4gY2hhbmdlcyB0aGF0IGNhblxuIgorIm5vdCBiZSBmb3VuZCBvbiBhbnkgcmVtb3RlOlxuIgorbXNnc3RyICIiCisiRWxzIGNhbWlucyBkZSBzdWJtw7JkdWwgc2Vnw7xlbnRzIGNvbnRlbmVuIGNhbnZpcyBxdWUgbm9cbiIKKyJlcyBwb2RlbiB0cm9iYXIgZW4gY2FwIHJlbW90OlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQbGVhc2UgdHJ5XG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJvciBjZCB0byB0aGUgcGF0aCBhbmQgdXNlXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorInRvIHB1c2ggdGhlbSB0byBhIHJlbW90ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkludGVudGV1XG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJvIGNhbnZpYXIgZGUgZGlyZWN0b3JpIGFsIGNhbcOtIGkgdXNldVxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyJwZXIgYSBwdWphci1sb3MgYSB1biByZW1vdC5cbiIKKworIzogdHJhbnNwb3J0LmM6MTA1NgorbXNnaWQgIkFib3J0aW5nLiIKK21zZ3N0ciAiUydlc3TDoCBhdm9ydGFudC4iCisKKyM6IHRyYW5zcG9ydC5jOjEyMDEKKyMsIGZ1enp5Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggYWxsIG5lZWRlZCBzdWJtb2R1bGVzIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNlcmNhciByZWN1cnNpdmFtZW50IGFsIHN1Ym3DsmR1bCDCqyVzwrsiCisKKyM6IHRyYW5zcG9ydC5jOjEzNDUgdHJhbnNwb3J0LWhlbHBlci5jOjY1NgorbXNnaWQgIm9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIgorbXNnc3RyICJvcGNpw7Mgbm8gYWRtZXNhIHBlbCBwcm90b2NvbCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxIHRyYW5zcG9ydC1oZWxwZXIuYzo5MAorIywgZnV6enkKK21zZ2lkICJmdWxsIHdyaXRlIHRvIHJlbW90ZSBoZWxwZXIgZmFpbGVkIgorbXNnc3RyICJpbXByaW1laXggbCdlc3RhdCBkZXMgZGUgbCdhanVkYW50IHJlbW90IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIHJlbW90ZSBoZWxwZXIgZm9yICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgdHJvYmFyIGwnYWp1ZGFudCByZW1vdCBwZXIgYSDCqyVzwrsiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNjAgdHJhbnNwb3J0LWhlbHBlci5jOjU3MAorbXNnaWQgImNhbid0IGR1cCBoZWxwZXIgb3V0cHV0IGZkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVua25vd24gbWFuZGF0b3J5IGNhcGFiaWxpdHkgJXM7IHRoaXMgcmVtb3RlIGhlbHBlciBwcm9iYWJseSBuZWVkcyBuZXdlciAiCisidmVyc2lvbiBvZiBHaXQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxNworbXNnaWQgInRoaXMgcmVtb3RlIGhlbHBlciBzaG91bGQgaW1wbGVtZW50IHJlZnNwZWMgY2FwYWJpbGl0eSIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6Mjg0IHRyYW5zcG9ydC1oZWxwZXIuYzo0MjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIHVuZXhwZWN0ZWRseSBzYWlkOiAnJXMnIgorbXNnc3RyICJibG9iIGVzcGVyYXQgcGVyIGEgJXMgwqslc8K7IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsc28gbG9ja2VkICVzIgorbXNnc3RyICIlcyB0YW1iw6kgaGEgYmxvcXVlamF0ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDkyCittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtaW1wb3J0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyIMKrZmFzdC1pbXBvcnTCuyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjUxNQorIywgZnV6enkKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtaW1wb3J0IgorbXNnc3RyICJlcnJvciBlbiB0YW5jYXIgZWwgZml0eGVyIGRlIHBhcXVldCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU0NCB0cmFuc3BvcnQtaGVscGVyLmM6MTEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGxhIHJlZmVyw6huY2lhICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIgorbXNnc3RyICJvcGNpw7MgZGVzY29uZWd1ZGE6ICVzXG4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTEKK21zZ2lkICJzZXR0aW5nIHJlbW90ZSBzZXJ2aWNlIHBhdGggbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEzCisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgcmVtb3RlIHNlcnZpY2UgcGF0aCIKK21zZ3N0ciAicmVmZXLDqG5jaWEgbm8gdsOgbGlkYTogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY29ubmVjdCB0byBzdWJzZXJ2aWNlICVzIgorbXNnc3RyICJubyBlcyBwb3QgY29ubmVjdGFyIGFsIHN1YnNlcnZlaSAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjczNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciCittc2dzdHIgImJsb2IgZXNwZXJhdCBwZXIgYSAlcyDCqyVzwrsiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3ODgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciByZXBvcnRlZCB1bmV4cGVjdGVkIHN0YXR1cyBvZiAlcyIKK21zZ3N0ciAibHMtdHJlZSBoYSByZXRvcm5hdCB1biBjb2RpIGRlIHJldG9ybiAlZCBubyBlc3BlcmF0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCBkcnktcnVuIgorbXNnc3RyICJFbCBzZXJ2aWRvciBubyBhZG1ldCAtLWRlZXBlbiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIGFkbWV0IC0tc2hhbGxvdy1zaW5jZSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQ9aWYtYXNrZWQiCittc2dzdHIgImVsIGRlc3TDrSByZWNlcHRvciBubyBhZG1ldCBwdWphciAtLXNpZ25lZCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMiCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIGFkbWV0IC0tc2hhbGxvdy1zaW5jZSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ3B1c2gtb3B0aW9uJyIKK21zZ3N0ciAiZWwgZGVzdMOtIHJlY2VwdG9yIG5vIGFkbWV0IG9wY2lvbnMgZGUgcHVqYWRhIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTY0Cittc2dpZCAicmVtb3RlLWhlbHBlciBkb2Vzbid0IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ2ZvcmNlJyIKK21zZ3N0ciAiRWwgc2Vydmlkb3Igbm8gYWRtZXQgLS1kZWVwZW4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDE2CisjLCBmdXp6eQorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBleGVjdXRhciDCq3N0YXNowrsuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAyMQorIywgZnV6enkKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtZXhwb3J0IgorbXNnc3RyICJlcnJvciBlbiB0YW5jYXIgZWwgZml0eGVyIGRlIHBhcXVldCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHJlZnMgaW4gY29tbW9uIGFuZCBub25lIHNwZWNpZmllZDsgZG9pbmcgbm90aGluZy5cbiIKKyJQZXJoYXBzIHlvdSBzaG91bGQgc3BlY2lmeSBhIGJyYW5jaCBzdWNoIGFzICdtYXN0ZXInLlxuIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMTE5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgcmVzcG9uc2UgaW4gcmVmIGxpc3Q6ICVzIgorbXNnc3RyICJmdWxsIGQnb3BjaW9ucyBtYWwgZm9ybWF0OiDCqyVzwrsiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjcxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZWFkKCVzKSBmYWlsZWQiCittc2dzdHIgIiVzIGhhIGZhbGxhdCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyOTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndyaXRlKCVzKSBmYWlsZWQiCittc2dzdHIgIiVzIGhhIGZhbGxhdCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQiCittc2dzdHIgIiVzIGhhIGZhbGxhdCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2JyaXIgwqslc8K7IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM3MCB0cmFuc3BvcnQtaGVscGVyLmM6MTM3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YTogJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQgdG8gd2FpdCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiVzIGhhIGZhbGxhdCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MzMgdHJhbnNwb3J0LWhlbHBlci5jOjE0NDIKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIKK21zZ3N0ciAiIgorCisjOiB0cmVlLXdhbGsuYzozMworbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAib2JqZWN0ZSBkJ2FyYnJlIG1hc3NhIGN1cnQiCisKKyM6IHRyZWUtd2Fsay5jOjM5Cittc2dpZCAibWFsZm9ybWVkIG1vZGUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAibW9kZSBtYWwgZm9ybWF0IGVuIGVudHJhZGEgZCdhcmJyZSIKKworIzogdHJlZS13YWxrLmM6NDMKK21zZ2lkICJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICJub20gZGUgZml0eGVyIGJ1aXQgZW4gdW5hIGVudHJhZGEgZCdhcmJyZSIKKworIzogdHJlZS13YWxrLmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZW5hbWUgaW4gdHJlZSBlbnRyeSBjb250YWlucyBiYWNrc2xhc2g6ICclcyciCittc2dzdHIgIiIKKworIzogdHJlZS13YWxrLmM6MTI0Cittc2dpZCAidG9vLXNob3J0IHRyZWUgZmlsZSIKK21zZ3N0ciAiZml0eGVyIGQnYXJicmUgbWFzc2EgY3VydCIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkVscyB2b3N0cmVzIGNhbnZpcyBsb2NhbHMgYWxzIGZpdHhlcnMgc2Vnw7xlbnRzIHNlIHNvYnJlZXNjcml1cmllbiBwZXIgIgorImFnYWZhcjpcbiIKKyIlJXNDb21ldGV1IGVscyB2b3N0cmVzIGNhbnZpcyBvIGZldSDCq3N0YXNowrsgYWJhbnMgZGUgY2FudmlhciBkZSBicmFuY2EuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkVscyB2b3N0cmVzIGNhbnZpcyBsb2NhbHMgYWxzIGZpdHhlcnMgc2Vnw7xlbnRzIHNlIHNvYnJlZXNjcml1cmllbiBwZXIgIgorImFnYWZhcjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkVscyB2b3N0cmVzIGNhbnZpcyBsb2NhbHMgYWxzIGZpdHhlcnMgc2Vnw7xlbnRzIHNlIHNvYnJlZXNjcml1cmllbiBwZXIgIgorImZ1c2lvbmFyOlxuIgorIiUlc0NvbWV0ZXUgZWxzIHZvc3RyZXMgY2FudmlzIG8gZmV1IMKrc3Rhc2jCuyBhYmFucyBkZSBmdXNpb25hci4iCisKKyM6IHVucGFjay10cmVlcy5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRWxzIHZvc3RyZXMgY2FudmlzIGxvY2FscyBhbHMgZml0eGVycyBzZWfDvGVudHMgc2Ugc29icmVlc2NyaXVyaWVuIHBlciAiCisiZnVzaW9uYXI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyJFbHMgdm9zdHJlcyBjYW52aXMgbG9jYWxzIGFscyBmaXR4ZXJzIHNlZ8O8ZW50cyBzZSBzb2JyZWVzY3JpdXJpZW4gcGVyICVzOlxuIgorIiUlc0NvbWV0ZXUgZWxzIHZvc3RyZXMgY2FudmlzIG8gZmV1IMKrc3Rhc2jCuyBhYmFucyBkZSAlcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRWxzIHZvc3RyZXMgY2FudmlzIGxvY2FscyBhbHMgZml0eGVycyBzZWfDvGVudHMgc2Ugc29icmVlc2NyaXVyaWVuIHBlciAlczpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVtOlxuIgorIiVzIgorbXNnc3RyICIiCisiRW4gYWN0dWFsaXR6YXIgZWxzIGRpcmVjdG9yaXMgc2Vnw7xlbnRzIHBlcmRyaWEgZml0eGVycyBubyBzZWd1aXRzIGVuIGVsOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkVscyBzZWfDvGVudHMgZml0eGVycyBubyBzZWd1aXRzIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBzJ2VsaW1pbmFyaWVuIHBlciAiCisiYWdhZmFyOlxuIgorIiUlc01vdmV1LWxvcyBvIGVsaW1pbmV1LWxvcyBhYmFucyBkZSBjYW52aWFyIGRlIGJyYW5jYS4iCisKKyM6IHVucGFjay10cmVlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRWxzIHNlZ8O8ZW50cyBmaXR4ZXJzIG5vIHNlZ3VpdHMgZW4gbCdhcmJyZSBkZSB0cmViYWxsIHMnZWxpbWluYXJpZW4gcGVyICIKKyJhZ2FmYXI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiRWxzIHNlZ8O8ZW50cyBmaXR4ZXJzIG5vIHNlZ3VpdHMgZW4gbCdhcmJyZSBkZSB0cmViYWxsIHMnZWxpbWluYXJpZW4gcGVyICIKKyJmdXNpb25hcjpcbiIKKyIlJXNNb3ZldS1sb3MgbyBlbGltaW5ldS1sb3MgYWJhbnMgZGUgZnVzaW9uYXIuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkVscyBzZWfDvGVudHMgZml0eGVycyBubyBzZWd1aXRzIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBzJ2VsaW1pbmFyaWVuIHBlciAiCisiZnVzaW9uYXI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiRWxzIHNlZ8O8ZW50cyBmaXR4ZXJzIG5vIHNlZ3VpdHMgZW4gbCdhcmJyZSBkZSB0cmViYWxsIHMnZWxpbWluYXJpZW4gcGVyICVzOlxuIgorIiUlc01vdmV1LWxvcyBvIGVsaW1pbmV1LWxvcyBhYmFucyBkZSAlcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRWxzIHNlZ8O8ZW50cyBmaXR4ZXJzIG5vIHNlZ3VpdHMgZW4gbCdhcmJyZSBkZSB0cmViYWxsIHMnZWxpbWluYXJpZW4gcGVyICVzOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkVscyBzZWfDvGVudHMgZml0eGVycyBubyBzZWd1aXRzIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBzZSBzb2JyZWVzY3JpdXJpZW4gcGVyICIKKyJhZ2FmYXI6XG4iCisiJSVzTW92ZXUtbG9zIG8gZWxpbWluZXUtbG9zIGFiYW5zIGRlIGNhbnZpYXIgZGUgYnJhbmNhLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkVscyBzZWfDvGVudHMgZml0eGVycyBubyBzZWd1aXRzIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBzZSBzb2JyZWVzY3JpdXJpZW4gcGVyICIKKyJhZ2FmYXI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkVscyBzZWfDvGVudHMgZml0eGVycyBubyBzZWd1aXRzIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBzZSBzb2JyZWVzY3JpdXJpZW4gcGVyICIKKyJmdXNpb25hcjpcbiIKKyIlJXNNb3ZldS1sb3MgbyBlbGltaW5ldS1sb3MgYWJhbnMgZGUgZnVzaW9uYXIuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJFbHMgc2Vnw7xlbnRzIGZpdHhlcnMgbm8gc2VndWl0cyBlbiBsJ2FyYnJlIGRlIHRyZWJhbGwgc2Ugc29icmVlc2NyaXVyaWVuIHBlciAiCisiZnVzaW9uYXI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIkVscyBzZWfDvGVudHMgZml0eGVycyBubyBzZWd1aXRzIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBzZSBzb2JyZWVzY3JpdXJpZW4gcGVyICIKKyIlczpcbiIKKyIlJXNNb3ZldS1sb3MgbyBlbGltaW5ldS1sb3MgYWJhbnMgZGUgJXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJFbHMgc2Vnw7xlbnRzIGZpdHhlcnMgbm8gc2VndWl0cyBlbiBsJ2FyYnJlIGRlIHRyZWJhbGwgc2Ugc29icmVlc2NyaXVyaWVuIHBlciAiCisiJXM6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50cnkgJyVzJyBvdmVybGFwcyB3aXRoICclcycuICBDYW5ub3QgYmluZC4iCittc2dzdHIgIkwnZW50cmFkYSDCqyVzwrsgZW5jYXZhbGNhIGFtYiDCqyVzwrsuICBObyBlcyBwb3QgdmluY3VsYXIuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0OiB0aGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIG5vdCB1cCB0byBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiTm8gZXMgcG90IGFjdHVhbGl0emFyIGwnYWdhZmFtZW50IHBhcmNpYWw6IGxlcyBlbnRyYWRlcyBzZWfDvGVudHMgbm8gZXN0YW4gYWwgIgorImRpYTpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkVscyBmaXR4ZXJzIHNlZ8O8ZW50cyBlbiBsJ2FyYnJlIGRlIHRyZWJhbGwgc2Ugc29icmVlc2NyaXVyaWVuIHBlciAiCisiYWN0dWFsaXR6YXIgbCdhZ2FmYW1lbnQgcGFyY2lhbDpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiRWxzIGZpdHhlcnMgc2Vnw7xlbnRzIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBzJ2VsaW1pbmFyaWVuIHBlciBhY3R1YWxpdHphciAiCisibCdhZ2FmYW1lbnQgcGFyY2lhbDpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHN1Ym1vZHVsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIk5vIGVzIHBvdCBhY3R1YWxpdHphciBlbCBzdWJtw7JkdWw6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZ1xuIgorbXNnc3RyICJTJ2VzdMOgIGF2b3J0YW50XG4iCisKKyM6IHVucGFjay10cmVlcy5jOjMxNworbXNnaWQgIlVwZGF0aW5nIGZpbGVzIgorbXNnc3RyICJTJ2VzdGFuIGFjdHVhbGl0emFudCBlbHMgZml0eGVycyIKKworIzogdW5wYWNrLXRyZWVzLmM6MzQ5Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgcGF0aHMgaGF2ZSBjb2xsaWRlZCAoZS5nLiBjYXNlLXNlbnNpdGl2ZSBwYXRoc1xuIgorIm9uIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtKSBhbmQgb25seSBvbmUgZnJvbSB0aGUgc2FtZVxuIgorImNvbGxpZGluZyBncm91cCBpcyBpbiB0aGUgd29ya2luZyB0cmVlOlxuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjE0NDEKKyMsIGZ1enp5Cittc2dpZCAiVXBkYXRpbmcgaW5kZXggZmxhZ3MiCittc2dzdHIgIlMnZXN0YW4gYWN0dWFsaXR6YW50IGVscyBmaXR4ZXJzIgorCisjOiB1cmxtYXRjaC5jOjE2MworbXNnaWQgImludmFsaWQgVVJMIHNjaGVtZSBuYW1lIG9yIG1pc3NpbmcgJzovLycgc3VmZml4IgorbXNnc3RyICJsJ2VzcXVlbWEgZCdVUkwgbm8gw6lzIHbDoGxpZCBvIGxpIG1hbmNhIGVsIHN1Zml4ICc6Ly8nIgorCisjOiB1cmxtYXRjaC5jOjE4NyB1cmxtYXRjaC5jOjM0NiB1cmxtYXRjaC5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgInNlccO8w6huY2lhIGQnZXNjYXBhbWVudCAlWFggbm8gdsOgbGlkYSIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAibWFuY2EgbGEgbcOgcXVpbmEgaSBsJ2VzcXVlbWEgbm8gw6lzICdmaWxlOiciCisKKyM6IHVybG1hdGNoLmM6MjMyCittc2dpZCAiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIKK21zZ3N0ciAidW4gVVJMICdmaWxlOicgbm8gcG90IHRlbmlyIG7Dum1lcm8gZGUgcG9ydCIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICJoaSBoYSBjYXLDoGN0ZXJzIG5vIHbDoGxpZHMgZW4gZWwgbm9tIGRlIG3DoHF1aW5hIgorCisjOiB1cmxtYXRjaC5jOjI5MiB1cmxtYXRjaC5jOjMwMworbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIm7Dum1lcm8gZGUgcG9ydCBubyB2w6BsaWQiCisKKyM6IHVybG1hdGNoLmM6MzcxCittc2dpZCAiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIKK21zZ3N0ciAic2VnbWVudCBkZSBjYW3DrSAnLi4nIG5vIHbDoGxpZCIKKworIzogd29ya3RyZWUuYzoyNTggYnVpbHRpbi9hbS5jOjIwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgwqslc8K7IgorCisjOiB3b3JrdHJlZS5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGF0IG1haW4gd29ya2luZyB0cmVlIGlzIG5vdCB0aGUgcmVwb3NpdG9yeSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogd29ya3RyZWUuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgd29ya2luZyB0cmVlIGxvY2F0aW9uIgorbXNnc3RyICIiCisKKyM6IHdvcmt0cmVlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIsKrJXPCuyBubyBleGlzdGVpeCIKKworIzogd29ya3RyZWUuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSAuZ2l0IGZpbGUsIGVycm9yIGNvZGUgJWQiCittc2dzdHIgIsKrJXPCuyBubyDDqXMgdW4gZml0eGVyIC5naXQsIGNvZGkgZCdlcnJvciAlZCIKKworIzogd29ya3RyZWUuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCBiYWNrIHRvICclcyciCittc2dzdHIgIsKrJXPCuyBubyBhc3NlbnlhbGEgZGUgdG9ybmFkYSBhIMKrJXPCuyIKKworIzogd3JhcHBlci5jOjE4NiB3cmFwcGVyLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2JyaXIgwqslc8K7IHBlciBhIGxlY3R1cmEgaSBlc2NyaXB0dXJhIgorCisjOiB3cmFwcGVyLmM6Mzg3IHdyYXBwZXIuYzo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFjY2VkaXIgYSDCqyVzwrsiCisKKyM6IHdyYXBwZXIuYzo1OTYKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2J0ZW5pciBlbCBkaXJlY3RvcmkgZGUgdHJlYmFsbCBhY3R1YWwiCisKKyM6IHd0LXN0YXR1cy5jOjE1OAorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiQ2FtaW5zIHNlbnNlIGZ1c2lvbmFyOiIKKworIzogd3Qtc3RhdHVzLmM6MTg3IHd0LXN0YXR1cy5jOjIxOQorIywgZnV6enkKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCByZXNldCAlcyA8Zml0eGVyPi4uLlwiIHBlciBhIGZlciDCq3Vuc3RhZ2XCuykiCisKKyM6IHd0LXN0YXR1cy5jOjE5MCB3dC1zdGF0dXMuYzoyMjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IHJlc2V0ICVzIDxmaXR4ZXI+Li4uXCIgcGVyIGEgZmVyIMKrdW5zdGFnZcK7KSIKKworIzogd3Qtc3RhdHVzLmM6MTkzIHd0LXN0YXR1cy5jOjIyNQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCBybSAtLWNhY2hlZCA8Zml0eGVyPi4uLlwiIHBlciBhIGZlciDCq3Vuc3RhZ2XCuykiCisKKyM6IHd0LXN0YXR1cy5jOjE5NworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCBhZGQgPGZpdHhlcj4uLi5cIiBwZXIgYSBzZW55YWxhciByZXNvbHVjacOzKSIKKworIzogd3Qtc3RhdHVzLmM6MTk5IHd0LXN0YXR1cy5jOjIwMworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorIiAgKHVzZXUgXCJnaXQgYWRkL3JtIDxmaXR4ZXI+Li4uXCIgc2Vnb25zIHNpZ3VpIGFwcm9waWF0IHBlciBhIHNlbnlhbGFyICIKKyJyZXNvbHVjacOzKSIKKworIzogd3Qtc3RhdHVzLmM6MjAxCittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgcm0gPGZpdHhlcj4uLi5cIiBwZXIgYSBzZW55YWxhciByZXNvbHVjacOzKSIKKworIzogd3Qtc3RhdHVzLmM6MjExIHd0LXN0YXR1cy5jOjEwNzQKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIkNhbnZpcyBhIGNvbWV0cmU6IgorCisjOiB3dC1zdGF0dXMuYzoyMzQgd3Qtc3RhdHVzLmM6MTA4MworbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAiQ2FudmlzIG5vIMKrc3RhZ2VkwrsgcGVyIGEgY29tZXRyZToiCisKKyM6IHd0LXN0YXR1cy5jOjIzOAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IGFkZCA8Zml0eGVyPi4uLlwiIHBlciBhIGFjdHVhbGl0emFyIHF1w6ggZXMgY29tZXRyw6ApIgorCisjOiB3dC1zdGF0dXMuYzoyNDAKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCBhZGQvcm0gPGZpdHhlcj4uLi5cIiBwZXIgYSBhY3R1YWxpdHphciBxdcOoIGVzIGNvbWV0csOgKSIKKworIzogd3Qtc3RhdHVzLmM6MjQxCisjLCBmdXp6eQorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmVzdG9yZSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisiICAodXNldSBcImdpdCBjaGVja291dCAtLSA8Zml0eGVyPi4uLlwiIHBlciBhIGRlc2NhcnRhciBlbHMgY2FudmlzIGVuIGVsICIKKyJkaXJlY3RvcmkgZGUgdHJlYmFsbCkiCisKKyM6IHd0LXN0YXR1cy5jOjI0MworbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorIiAgKGNvbWV0ZXUgbyBkZXNjYXJ0ZXUgZWwgY29udGluZ3V0IG1vZGlmaWNhdCBvIG5vIHNlZ3VpdCBlbiBlbHMgc3VibcOyZHVscykiCisKKyM6IHd0LXN0YXR1cy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCAlcyA8Zml0eGVyPi4uLlwiIHBlciBhIGluY2xvdXJlLWhvIGVuIGVsIHF1ZSBlcyBjb21ldHLDoCkiCisKKyM6IHd0LXN0YXR1cy5jOjI2OAorbXNnaWQgImJvdGggZGVsZXRlZDoiCittc2dzdHIgInN1cHJpbWl0IHBlciBhbWJkw7NzOiIKKworIzogd3Qtc3RhdHVzLmM6MjcwCittc2dpZCAiYWRkZWQgYnkgdXM6IgorbXNnc3RyICJhZmVnaXQgcGVyIG5vc2FsdHJlczoiCisKKyM6IHd0LXN0YXR1cy5jOjI3MgorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgInN1cHJpbWl0IHBlciBlbGxzOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc0Cittc2dpZCAiYWRkZWQgYnkgdGhlbToiCittc2dzdHIgImFmZWdpdCBwZXIgZWxsczoiCisKKyM6IHd0LXN0YXR1cy5jOjI3NgorbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICJzdXByaW1pdCBwZXIgbm9zYWx0cmVzOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc4Cittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgImFmZWdpdCBwZXIgYW1iZMOzczoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MAorbXNnaWQgImJvdGggbW9kaWZpZWQ6IgorbXNnc3RyICJtb2RpZmljYXQgcGVyIGFtYmTDs3M6IgorCisjOiB3dC1zdGF0dXMuYzoyOTAKK21zZ2lkICJuZXcgZmlsZToiCittc2dzdHIgImZpdHhlciBub3U6IgorCisjOiB3dC1zdGF0dXMuYzoyOTIKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICJjb3BpYXQ6IgorCisjOiB3dC1zdGF0dXMuYzoyOTQKK21zZ2lkICJkZWxldGVkOiIKK21zZ3N0ciAic3VwcmltaXQ6IgorCisjOiB3dC1zdGF0dXMuYzoyOTYKK21zZ2lkICJtb2RpZmllZDoiCittc2dzdHIgIm1vZGlmaWNhdDoiCisKKyM6IHd0LXN0YXR1cy5jOjI5OAorbXNnaWQgInJlbmFtZWQ6IgorbXNnc3RyICJjYW52aWF0IGRlIG5vbToiCisKKyM6IHd0LXN0YXR1cy5jOjMwMAorbXNnaWQgInR5cGVjaGFuZ2U6IgorbXNnc3RyICJjYW52aWF0IGRlIHRpcHVzOiIKKworIzogd3Qtc3RhdHVzLmM6MzAyCittc2dpZCAidW5rbm93bjoiCittc2dzdHIgImRlc2NvbmVndXQ6IgorCisjOiB3dC1zdGF0dXMuYzozMDQKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgInNlbnNlIGZ1c2lvbmFyOiIKKworIzogd3Qtc3RhdHVzLmM6Mzg0Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAiY29taXNzaW9ucyBub3ZlcywgIgorCisjOiB3dC1zdGF0dXMuYzozODYKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgImNvbnRpbmd1dCBtb2RpZmljYXQsICIKKworIzogd3Qtc3RhdHVzLmM6Mzg4Cittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAiY29udGluZ3V0IG5vIHNlZ3VpdCwgIgorCisjOiB3dC1zdGF0dXMuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJ5IgorbXNnaWRfcGx1cmFsICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cmllcyIKK21zZ3N0clswXSAiTCfCq3N0YXNowrsgdMOpIGFjdHVhbG1lbnQgJWQgZW50cmFkYSIKK21zZ3N0clsxXSAiTCfCq3N0YXNowrsgdMOpIGFjdHVhbG1lbnQgJWQgZW50cmFkZXMiCisKKyM6IHd0LXN0YXR1cy5jOjkzOAorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICJTdWJtw7JkdWxzIGNhbnZpYXRzIHBlcsOyIG5vIGFjdHVhbGl0emF0czoiCisKKyM6IHd0LXN0YXR1cy5jOjk0MAorbXNnaWQgIlN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIkNhbnZpcyBkZSBzdWJtw7JkdWwgYSBjb21ldHJlOiIKKworIzogd3Qtc3RhdHVzLmM6MTAyMgorbXNnaWQgIiIKKyJEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS5cbiIKKyJFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4iCittc2dzdHIgIiIKKyJObyBtb2RpZmlxdWV1IG8gc3VwcmltaXUgbGEgbMOtbmlhIGRlIGRhbHQuXG4iCisiVG90IGVsIHF1ZSBoaSBoYSBhIHNvdGEgcydpZ25vcmFyw6AuIgorCisjOiB3dC1zdGF0dXMuYzoxMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjb21wdXRlIHRoZSBicmFuY2ggYWhlYWQvYmVoaW5kIHZhbHVlcy5cbiIKKyJZb3UgY2FuIHVzZSAnLS1uby1haGVhZC1iZWhpbmQnIHRvIGF2b2lkIHRoaXMuXG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NAorbXNnaWQgIllvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLiIKK21zZ3N0ciAiVGVuaXUgY2FtaW5zIHNlbnNlIGZ1c2lvbmFyLiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiAgKGFycmVnbGV1IGVscyBjb25mbGljdGVzIGkgZXhlY3V0ZXUgXCJnaXQgY29tbWl0XCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ5Cittc2dpZCAiICAodXNlIFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiB0byBhYm9ydCB0aGUgbWVyZ2UpIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiBwZXIgYSBhdm9ydGFyIGxhIGZ1c2nDsykiCisKKyM6IHd0LXN0YXR1cy5jOjExNTMKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgorbXNnc3RyICJUb3RzIGVscyBjb25mbGljdGVzIGVzdGFuIGFycmVnbGF0cyBwZXLDsiBlbmNhcmEgZXN0ZXUgZnVzaW9uYW50LiIKKworIzogd3Qtc3RhdHVzLmM6MTE1NgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgY29tbWl0XCIgcGVyIGEgY29uY2xvdXJlIGxhIGZ1c2nDsykiCisKKyM6IHd0LXN0YXR1cy5jOjExNjUKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4iCittc2dzdHIgIkVzdGV1IGVubWlnIGQndW5hIHNlc3Npw7MgYW0uIgorCisjOiB3dC1zdGF0dXMuYzoxMTY4Cittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICJFbCBwZWRhw6cgYWN0dWFsIGVzdMOgIGJ1aXQuIgorCisjOiB3dC1zdGF0dXMuYzoxMTcyCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoYXJyZWdsZXUgZWxzIGNvbmZsaWN0ZXMgaSBkZXNwcsOpcyBleGVjdXRldSBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTc0Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgYW0gLS1za2lwXCIgcGVyIGEgb21ldHJlIGFxdWVzdCBwZWRhw6cpIgorCisjOiB3dC1zdGF0dXMuYzoxMTc2Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IGFtIC0tYWJvcnRcIiBwZXIgYSByZXN0YXVyYXIgbGEgYnJhbmNhIG9yaWdpbmFsKSIKKworIzogd3Qtc3RhdHVzLmM6MTMwOQorbXNnaWQgImdpdC1yZWJhc2UtdG9kbyBpcyBtaXNzaW5nLiIKK21zZ3N0ciAiTWFuY2EgZ2l0LXJlYmFzZS10b2RvLiIKKworIzogd3Qtc3RhdHVzLmM6MTMxMQorbXNnaWQgIk5vIGNvbW1hbmRzIGRvbmUuIgorbXNnc3RyICJObyBzJ2hhIGZldCBjYXAgb3JkcmUuIgorCisjOiB3dC1zdGF0dXMuYzoxMzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhc3QgY29tbWFuZCBkb25lICglZCBjb21tYW5kIGRvbmUpOiIKK21zZ2lkX3BsdXJhbCAiTGFzdCBjb21tYW5kcyBkb25lICglZCBjb21tYW5kcyBkb25lKToiCittc2dzdHJbMF0gIsOabHRpbWEgb3JkcmUgZmV0YSAoJWQgb3JkcmUgZmV0YSk6IgorbXNnc3RyWzFdICLDmmx0aW1lcyBvcmRyZXMgZmV0ZXMgKCVkIG9yZHJlcyBmZXRlcyk6IgorCisjOiB3dC1zdGF0dXMuYzoxMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHNlZSBtb3JlIGluIGZpbGUgJXMpIgorbXNnc3RyICIgICh2ZWdldSBtw6lzIGVuIGVsIGZpdHhlciAlcykiCisKKyM6IHd0LXN0YXR1cy5jOjEzMzAKK21zZ2lkICJObyBjb21tYW5kcyByZW1haW5pbmcuIgorbXNnc3RyICJObyBtYW5jYSBjYXAgb3JkcmUuIgorCisjOiB3dC1zdGF0dXMuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5leHQgY29tbWFuZCB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmQpOiIKK21zZ2lkX3BsdXJhbCAiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiCittc2dzdHJbMF0gIk9yZHJlIHNlZ8O8ZW50IGEgZmVyIChtYW5jYSAlZCBvcmRyZSk6IgorbXNnc3RyWzFdICJPcmRyZXMgc2Vnw7xlbnRzIGEgZmVyIChtYW5xdWVuICVkIG9yZHJlcyk6IgorCisjOiB3dC1zdGF0dXMuYzoxMzQxCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHBlciBhIHZldXJlIGkgZWRpdGFyKSIKKworIzogd3Qtc3RhdHVzLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiQWN0dWFsbWVudCBlc3RldSBmZW50IMKrcmViYXNlwrsgZGUgbGEgYnJhbmNhIMKrJXPCuyBlbiDCqyVzwrsuIgorCisjOiB3dC1zdGF0dXMuYzoxMzU4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICJBY3R1YWxtZW50IGVzdGV1IGZlbnQgwqtyZWJhc2XCuy4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNzEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKGFycmVnbGV1IGVscyBjb25mbGljdGVzIGkgZGVzcHLDqXMgZXhlY3V0ZXUgwqtnaXQgcmViYXNlIC0tY29udGludWXCuykiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzMKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHVzZXUgwqtnaXQgcmViYXNlIC0tc2tpcMK7IHBlciBhIG9tZXRyZSBhcXVlc3QgcGVkYcOnKSIKKworIzogd3Qtc3RhdHVzLmM6MTM3NQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAodXNldSDCq2dpdCByZWJhc2UgLS1hYm9ydMK7IHBlciBhIGFnYWZhciBsYSBicmFuY2Egb3JpZ2luYWwpIgorCisjOiB3dC1zdGF0dXMuYzoxMzgyCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAodG90cyBlbHMgY29uZmxpY3RlcyBlc3RhbiBhcnJlZ2xhdHM6IGV4ZWN1dGV1IMKrZ2l0IHJlYmFzZSAtLWNvbnRpbnVlwrspIgorCisjOiB3dC1zdGF0dXMuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJBY3R1YWxtZW50IGVzdGV1IGRpdmlkaW50IHVuYSBjb21pc3Npw7MgbWVudHJlIGVzIGZhIMKrcmViYXNlwrsgZGUgbGEgYnJhbmNhICIKKyLCqyVzwrsgZW4gwqslc8K7LiIKKworIzogd3Qtc3RhdHVzLmM6MTM5MQorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICJBY3R1YWxtZW50IGVzdGV1IGRpdmlkaW50IHVuYSBjb21pc3Npw7MgZHVyYW50IHVuIMKrcmViYXNlwrsuIgorCisjOiB3dC1zdGF0dXMuYzoxMzk0Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChVbmEgdmVnYWRhIHF1ZSBlbCB2b3N0cmUgZGlyZWN0b3JpIGRlIHRyZWJhbGwgc2lndWkgbmV0LCBleGVjdXRldSBcImdpdCAiCisicmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIkFjdHVhbG1lbnQgZXN0ZXUgZWRpdGFudCB1bmEgY29taXNzacOzIG1lbnRyZSBlcyBmYSDCq3JlYmFzZcK7IGRlIGxhIGJyYW5jYSAiCisiwqslc8K7IGVuIMKrJXPCuy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIkFjdHVhbG1lbnQgZXN0ZXUgZWRpdGFudCB1bmEgY29taXNzacOzIGR1cmFudCB1biDCq3JlYmFzZcK7LiIKKworIzogd3Qtc3RhdHVzLmM6MTQwNgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiBwZXIgYSBlc21lbmFyIGxhIGNvbWlzc2nDsyBhY3R1YWwpIgorCisjOiB3dC1zdGF0dXMuYzoxNDA4Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIiCisiICAodXNldSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIHVuYSB2ZWdhZGEgcXVlIGVzdGlndWV1IHNhdGlzZmV0IGFtYiBlbHMgIgorInZvc3RyZXMgY2FudmlzKSIKKworIzogd3Qtc3RhdHVzLmM6MTQxOQorbXNnaWQgIkNoZXJyeS1waWNrIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4iCittc2dzdHIgIkhpIGhhIMKrY2hlcnJ5IHBpY2vCuyBhY3R1YWxtZW50IGVuIGN1cnMuIgorCisjOiB3dC1zdGF0dXMuYzoxNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIkFjdHVhbG1lbnQgZXN0ZXUgZmVudCDCq2NoZXJyeSBwaWNrwrsgYSBsYSBjb21pc3Npw7MgJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxNDI5Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKGFycmVnbGV1IGVscyBjb25mbGljdGVzIGkgZXhlY3V0ZXUgwqtnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZcK7KSIKKworIzogd3Qtc3RhdHVzLmM6MTQzMgorIywgZnV6enkKK21zZ2lkICIgIChydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHRvIGNvbnRpbnVlKSIKK21zZ3N0ciAiICAoYXJyZWdsZXUgZWxzIGNvbmZsaWN0ZXMgaSBleGVjdXRldSBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM1Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHRvdHMgZWxzIGNvbmZsaWN0ZXMgZXN0YW4gYXJyZWdsYXRzOiBleGVjdXRldSDCq2dpdCBjaGVycnktcGljayAtLWNvbnRpbnVlwrspIgorCisjOiB3dC1zdGF0dXMuYzoxNDM3Cittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHVzZXUgwqtnaXQgY2hlcnJ5LXBpY2sgLS1za2lwwrsgcGVyIGEgb21ldHJlIGFxdWVzdCBwZWRhw6cpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM5Cittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyIgICh1c2V1IFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiBwZXIgYSBjYW5jZWzCt2xhciBsJ29wZXJhY2nDsyBkZSDCq2NoZXJyeSAiCisicGlja8K7KSIKKworIzogd3Qtc3RhdHVzLmM6MTQ0OQorbXNnaWQgIlJldmVydCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICJVbmEgcmV2ZXJzacOzIGVzdMOgIGFjdHVhbG1lbnQgZW4gY3Vycy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIkFjdHVhbG1lbnQgZXN0ZXUgcmV2ZXJ0aW50IGxhIGNvbWlzc2nDsyAlcy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTgKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKGFycmVnbGV1IGVscyBjb25mbGljdGVzIGkgZXhlY3V0ZXUgXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjEKKyMsIGZ1enp5Cittc2dpZCAiICAocnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIChhcnJlZ2xldSBlbHMgY29uZmxpY3RlcyBpIGV4ZWN1dGV1IFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDY0Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAodG90cyBlbHMgY29uZmxpY3RlcyBlc3RhbiBhcnJlZ2xhdHM6IGV4ZWN1dGV1IFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDY2CisjLCBmdXp6eQorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCByZWJhc2UgLS1za2lwXCIgcGVyIGEgb21ldHJlIGFxdWVzdCBwZWRhw6cpIgorCisjOiB3dC1zdGF0dXMuYzoxNDY4Cittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorIiAgKHVzZXUgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiBwZXIgYSBjYW5jZWzCt2xhciBsJ29wZXJhY2nDsyBkZSByZXZlcnNpw7MpIgorCisjOiB3dC1zdGF0dXMuYzoxNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiQWN0dWFsbWVudCBlc3RldSBiaXNlY2FudCwgaGV1IGNvbWVuw6dhdCBkZXMgZGUgbGEgYnJhbmNhIMKrJXPCuy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0ODIKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICJBY3R1YWxtZW50IGVzdGV1IGJpc2VjYW50LiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4NQorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCBiaXNlY3QgcmVzZXRcIiBwZXIgYSB0b3JuYXIgYSBsYSBicmFuY2Egb3JpZ2luYWwpIgorCisjOiB3dC1zdGF0dXMuYzoxNjk0Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAiRW4gbGEgYnJhbmNhICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMQorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgIsKrcmViYXNlwrsgaW50ZXJhY3RpdSBlbiBjdXJzOyBzb2JyZSAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDMKK21zZ2lkICJyZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICLCq3JlYmFzZcK7IGVuIGN1cnM7IHNvYnJlICIKKworIzogd3Qtc3RhdHVzLmM6MTcxMworbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIkFjdHVhbG1lbnQgbm8gcyfDqXMgZW4gY2FwIGJyYW5jYS4iCisKKyM6IHd0LXN0YXR1cy5jOjE3MzAKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiQ29taXNzacOzIGluaWNpYWwiCisKKyM6IHd0LXN0YXR1cy5jOjE3MzEKK21zZ2lkICJObyBjb21taXRzIHlldCIKK21zZ3N0ciAiTm8gcydoYSBmZXQgY2FwIGNvbWlzc2nDsyBlbmNhcmEiCisKKyM6IHd0LXN0YXR1cy5jOjE3NDUKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIkZpdHhlcnMgbm8gc2VndWl0cyIKKworIzogd3Qtc3RhdHVzLmM6MTc0NworbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgIkZpdHhlcnMgaWdub3JhdHMiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICdzdGF0dXMgLXVubydcbiIKKyJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkXG4iCisibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKK21zZ3N0ciAiIgorIkhhIHRyaWdhdCAlLjJmIHNlZ29ucyBlbnVtZXJhciBlbHMgZml0eGVycyBubyBzZWd1aXRzLlxuIgorIidzdGF0dXMgLXVubycgcG90IGFjY2VsZXJhci1obywgcGVyw7IgaGV1IGQnYW5hciBhbWIgY29tcHRlIGRlIG5vXG4iCisib2JsaWRhci12b3MgZCdhZmVnaXIgZml0eGVycyBub3VzIHZvc2FsdHJlcyBtYXRlaXhvcyAodmVnZXVcbiIKKyInZ2l0IGhlbHAgc3RhdHVzJykuIgorCisjOiB3dC1zdGF0dXMuYzoxNzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIkVscyBmaXR4ZXJzIG5vIHNlZ3VpdHMgbm8gZXN0YW4gbGxpc3RhdHMlcyIKKworIzogd3Qtc3RhdHVzLmM6MTc1OQorbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiAodXNldSBsJ29wY2nDsyAtdSBwZXIgYSBtb3N0cmFyIGVscyBmaXR4ZXJzIG5vIHNlZ3VpdHMpIgorCisjOiB3dC1zdGF0dXMuYzoxNzY1Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiU2Vuc2UgY2FudmlzIgorCisjOiB3dC1zdGF0dXMuYzoxNzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICIiCisibm8gaGkgaGEgY2FudmlzIGFmZWdpdHMgYSBjb21ldHJlICh1c2V1IFwiZ2l0IGFkZFwiIG8gXCJnaXQgY29tbWl0IC1hXCIpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXRcbiIKK21zZ3N0ciAibm8gaGkgaGEgY2FudmlzIGFmZWdpdHMgYSBjb21ldHJlXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvICIKKyJ0cmFjaylcbiIKK21zZ3N0ciAiIgorIm5vIGhpIGhhIHJlcyBhZmVnaXQgYSBjb21ldHJlIHBlcsOyIGhpIGhhIGZpdHhlcnMgbm8gc2VndWl0cyAodXNldSBcImdpdCBhZGQiCisiXCIgcGVyIGEgc2VndWlyLWxvcylcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAibm8gaGkgaGEgcmVzIGFmZWdpdCBhIGNvbWV0cmUgcGVyw7IgaGkgaGEgZml0eGVycyBubyBzZWd1aXRzXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iCittc2dzdHIgIiIKKyJubyBoaSBoYSByZXMgYSBjb21ldHJlIChjcmVldS9jb3BpZXUgZml0eGVycyBpIHVzZXUgXCJnaXQgYWRkXCIgcGVyIGEgc2VndWlyLSIKKyJsb3MpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODUgd3Qtc3RhdHVzLmM6MTc5MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICJubyBoaSBoYSByZXMgYSBjb21ldHJlXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAiIgorIm5vIGhpIGhhIHJlcyBhIGNvbWV0cmUgKHVzZXUgLXUgcGVyIGEgbW9zdHJhciBlbHMgZml0eGVycyBubyBzZWd1aXRzKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW5cbiIKK21zZ3N0ciAibm8gaGkgaGEgcmVzIGEgY29tZXRyZSwgbCdhcmJyZSBkZSB0cmViYWxsIGVzdMOgIG5ldFxuIgorCisjOiB3dC1zdGF0dXMuYzoxOTA1Cittc2dpZCAiTm8gY29tbWl0cyB5ZXQgb24gIgorbXNnc3RyICJObyBzJ2hhIGZldCBjYXAgY29taXNzacOzIGVuY2FyYSBhICIKKworIzogd3Qtc3RhdHVzLmM6MTkwOQorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUQgKHNlbnNlIGJyYW5jYSkiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDAKK21zZ2lkICJkaWZmZXJlbnQiCittc2dzdHIgImRpZmVyZW50IgorCisjOiB3dC1zdGF0dXMuYzoxOTQyIHd0LXN0YXR1cy5jOjE5NTAKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICJkYXJyZXJlICIKKworIzogd3Qtc3RhdHVzLmM6MTk0NSB3dC1zdGF0dXMuYzoxOTQ4Cittc2dpZCAiYWhlYWQgIgorbXNnc3RyICJkYXZhbnQgcGVyICIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBhY3Rpb24gaXMgZS5nLiAicHVsbCB3aXRoIHJlYmFzZSIKKyM6IHd0LXN0YXR1cy5jOjI0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAibm8gZXMgcG90ICVzOiBUZW5pdSBjYW52aXMgwqt1bnN0YWdlZMK7LiIKKworIzogd3Qtc3RhdHVzLmM6MjQ3NgorbXNnaWQgImFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiYWRkaWNpb25hbG1lbnQsIGVsIHZvc3RyZSDDrW5kZXggY29udMOpIGNhbnZpcyBzZW5zZSBjb21ldHJlLiIKKworIzogd3Qtc3RhdHVzLmM6MjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJXM6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIm5vIGVzIHBvdCAlczogRWwgdm9zdHJlIMOtbmRleCBjb250w6kgY2FudmlzIHNlbnNlIGNvbWV0cmUuIgorCisjOiBjb21wYXQvcHJlY29tcG9zZV91dGY4LmM6NTggYnVpbHRpbi9jbG9uZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZGVzZW5sbGHDp2FyIMKrJXPCuyIKKworIzogYnVpbHRpbi9hZGQuYzoyNgorbXNnaWQgImdpdCBhZGQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgYWRkIFs8b3BjaW9ucz5dIFstLV0gPGVzcGVjaWZpY2FjacOzLWRlLWNhbcOtPi4uLiIKKworIzogYnVpbHRpbi9hZGQuYzo4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICJlc3RhdCBkZSBkaWZmIGluZXNwZXJhdCAlYyIKKworIzogYnVpbHRpbi9hZGQuYzo5MiBidWlsdGluL2NvbW1pdC5jOjI4OAorbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhY3R1YWxpdHphciBlbHMgZml0eGVycyIKKworIzogYnVpbHRpbi9hZGQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAiZWxpbWluYSDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9hZGQuYzoxNzcKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAiQ2FudmlzIMKrdW5zdGFnZWTCuyBkZXNwcsOpcyBkJ2FjdHVhbGl0emFyIGwnw61uZGV4OiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTIgYnVpbHRpbi9yZXYtcGFyc2UuYzo4OTkKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgbGxlZ2lyIGwnw61uZGV4IgorCisjOiBidWlsdGluL2FkZC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciDCqyVzwrsgcGVyIGEgZXNjcmlwdHVyYS4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY3Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHBhdGNoIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGVsIHBlZGHDpyIKKworIzogYnVpbHRpbi9hZGQuYzoyNzAKK21zZ2lkICJlZGl0aW5nIHBhdGNoIGZhaWxlZCIKK21zZ3N0ciAibCdlZGljacOzIGRlbCBwZWRhw6cgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL2FkZC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGZlciBzdGF0IGEgwqslc8K7IgorCisjOiBidWlsdGluL2FkZC5jOjI3NQorbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAiRWwgcGVkYcOnIMOpcyBidWl0LiBTJ2hhIGF2b3J0YXQuIgorCisjOiBidWlsdGluL2FkZC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhcGxpY2FyIMKrJXPCuyIKKworIzogYnVpbHRpbi9hZGQuYzoyODgKK21zZ2lkICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCittc2dzdHIgIiIKKyJFbHMgY2FtaW5zIHNlZ8O8ZW50cyBzJ2lnbm9yZW4gcGVyIHVuIGRlbHMgdm9zdHJlcyBmaXR4ZXJzIC5naXRpZ25vcmU6XG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzA4IGJ1aWx0aW4vY2xlYW4uYzo5MTAgYnVpbHRpbi9mZXRjaC5jOjE2MyBidWlsdGluL212LmM6MTI0CisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU2IGJ1aWx0aW4vcHVsbC5jOjIyMyBidWlsdGluL3B1c2guYzo1NDgKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM0NCBidWlsdGluL3JtLmM6MjQxIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY1Cittc2dpZCAiZHJ5IHJ1biIKK21zZ3N0ciAibWFyeGEgZW4gc2VjIgorCisjOiBidWlsdGluL2FkZC5jOjMxMQorbXNnaWQgImludGVyYWN0aXZlIHBpY2tpbmciCittc2dzdHIgInJlY3VsbCBpbnRlcmFjdGl1IgorCisjOiBidWlsdGluL2FkZC5jOjMxMiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MiBidWlsdGluL3Jlc2V0LmM6MzA3Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgInNlbGVjY2lvbmEgZWxzIHRyb3Nzb3MgaW50ZXJhY3RpdmFtZW50IgorCisjOiBidWlsdGluL2FkZC5jOjMxMworbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAiZWRpdGEgbGEgZGlmZXLDqG5jaWEgYWN0dWFsIGkgYXBsaWNhLWxhIgorCisjOiBidWlsdGluL2FkZC5jOjMxNAorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAicGVybWV0IGFmZWdpciBmaXR4ZXJzIHF1ZSBkJ2FsdHJhIG1hbmVyYSBzJ2lnbm9yZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE1Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgImFjdHVhbGl0emEgZWxzIGZpdHhlcnMgc2VndWl0cyIKKworIzogYnVpbHRpbi9hZGQuYzozMTYKK21zZ2lkICJyZW5vcm1hbGl6ZSBFT0wgb2YgdHJhY2tlZCBmaWxlcyAoaW1wbGllcyAtdSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMTcKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgInJlZ2lzdHJhIG5vbcOpcyBlbCBmZXQgcXVlIGVsIGNhbcOtIHMnYWZlZ2lyw6AgbcOpcyB0YXJkIgorCisjOiBidWlsdGluL2FkZC5jOjMxOAorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiYWZlZ2VpeCBlbHMgY2FudmlzIGRlIHRvdHMgZWxzIGZpdHhlcnMgc2VndWl0cyBpIG5vIHNlZ3VpdHMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIxCittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgIiIKKyJpZ25vcmEgZWxzIGNhbWlucyBlbGltaW5hdHMgZW4gbCdhcmJyZSBkZSB0cmViYWxsIChlbCBtYXRlaXggcXVlIC0tbm8tYWxsKSIKKworIzogYnVpbHRpbi9hZGQuYzozMjMKK21zZ2lkICJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgIm5vIGFmZWdlaXhpcywgbm9tw6lzIGFjdHVhbGl0emEgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI0Cittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAibm9tw6lzIG9tZXQgZWxzIGZpdHhlcnMgcXVlIG5vIGVzIHBvZGVuIGFmZWdpciBhIGNhdXNhIGQnZXJyb3JzIgorCisjOiBidWlsdGluL2FkZC5jOjMyNQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAiIgorImNvbXByb3ZldSBzaSBlbHMgZml0eGVycyAtIGZpbnMgaSB0b3QgZWxzIGFic2VudHMgLSBzJ2lnbm9yZW4gZW4gbWFyeGEgZW4gc2VjIgorCisjOiBidWlsdGluL2FkZC5jOjMyNyBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDQKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAicGFzc2EgcGVyIGFsdCBlbCBiaXQgZXhlY3V0YWJsZSBkZWxzIGZpdHhlcnMgbGxpc3RhdHMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI5Cittc2dpZCAid2FybiB3aGVuIGFkZGluZyBhbiBlbWJlZGRlZCByZXBvc2l0b3J5IgorbXNnc3RyICJhdmlzYSdtIHF1YW4gcydhZmVnZWl4aSB1biBkaXDDsnNpdCBpbmNydXN0YXQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIklmIHlvdSBhZGRlZCB0aGlzIHBhdGggYnkgbWlzdGFrZSwgeW91IGNhbiByZW1vdmUgaXQgZnJvbSB0aGVcbiIKKyJpbmRleCB3aXRoOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2VlIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiSGV1IGFmZWdpdCB1biBhbHRyZSBkaXDDsnNpdCBnaXQgZGlucyBkZWwgZGlww7JzaXQgYWN0dWFsLlxuIgorIkVscyBjbG9ucyBkZSBkaXDDsnNpdHMgZXh0ZXJucyBubyBjb250aW5kcmFuIGVscyBjb250aW5ndXRzXG4iCisiZGVsIGRpcMOyc2l0IGluY3J1c3RhdCBpIG5vIHNhYnJhbiBjb20gb2J0ZW5pci1oby5cbiIKKyJTaSB2b2zDrWV1IGFmZWdpciB1biBzdWJtw7JkdWwsIHVzZXU6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIlNpIGhldSBhZmVnaXQgYXF1ZXN0IGNhbcOtIHBlciBlcnJvciwgcG9kZXUgc3VwcmltaXItbG8gZGVcbiIKKyJsJ8OtbmRleCBhbWI6XG4iCisiXG4iCisiXHRnaXQgcm0gLS1jYWNoZWQgJXNcbiIKKyJcbiIKKyJWZWdldSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIHBlciBhIG3DqXMgaW5mb3JtYWNpw7MuIgorCisjOiBidWlsdGluL2FkZC5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRpbmcgZW1iZWRkZWQgZ2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICJzJ2VzdMOgIGFmZWdpbnQgdW4gZGlww7JzaXQgaW5jcnVzdGF0OiAlcyIKKworIzogYnVpbHRpbi9hZGQuYzozOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKK21zZ3N0ciAiVXNldSAtZiBzaSByZWFsbWVudCBlbHMgdm9sZXUgYWZlZ2lyLlxuIgorCisjOiBidWlsdGluL2FkZC5jOjQwMAorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgImwnYWZlZ2ltZW50IGRlIGZpdHhlcnMgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL2FkZC5jOjQyOCBidWlsdGluL2NvbW1pdC5jOjM0OAorIywgZnV6enkKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giCittc2dzdHIgIi0tZmlyc3QtcGFyZW50IMOpcyBpbmNvbXBhdGlibGUgYW1iIC0tYmlzZWN0IgorCisjOiBidWlsdGluL2FkZC5jOjQzNAorIywgZnV6enkKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWVkaXQiCittc2dzdHIgIi0tZmlyc3QtcGFyZW50IMOpcyBpbmNvbXBhdGlibGUgYW1iIC0tYmlzZWN0IgorCisjOiBidWlsdGluL2FkZC5jOjQ0NgorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICItQSBpIC11IHPDs24gbcO6dHVhbWVudCBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL2FkZC5jOjQ0OQorbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIkwnb3BjacOzIC0taWdub3JlLW1pc3Npbmcgbm9tw6lzIGVzIHBvdCB1c2FyIGp1bnRhbWVudCBhbWIgLS1kcnktcnVuIgorCisjOiBidWlsdGluL2FkZC5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICItLWNobW9kIHBhcmFtICclcycgbXVzdCBiZSBlaXRoZXIgLXggb3IgK3giCittc2dzdHIgImVsIHBhcsOgbWV0cmUgLS1jaG1vZCDCqyVzwrsgaGEgZGUgc2VyIG8gLXggbyAreCIKKworIzogYnVpbHRpbi9hZGQuYzo0NzEgYnVpbHRpbi9jaGVja291dC5jOjE2NDggYnVpbHRpbi9jb21taXQuYzozNTQKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjcKKyMsIGZ1enp5Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIgorbXNnc3RyICItLXBhdGNoIMOpcyBpbmNvbXBhdGlibGUgYW1iIC0te2hhcmQsbWl4ZWQsc29mdH0iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDc4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjYwIGJ1aWx0aW4vY29tbWl0LmM6MzYwCisjOiBidWlsdGluL3Jlc2V0LmM6MzMzCittc2dpZCAiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAiTm8gcydoYSBlc3BlY2lmaWNhdCByZXMsIG5vIHMnaGEgYWZlZ2l0IHJlcy5cbiIKKworIzogYnVpbHRpbi9hZGQuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCittc2dzdHIgIlBvdHNlciB2b2zDrWV1IGRpciDCq2dpdCBhZGQgLsK7P1xuIgorCisjOiBidWlsdGluL2FtLmM6MzQ3Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGF1dGhvciBzY3JpcHQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGwnc2NyaXB0IGQnYXV0b3IiCisKKyM6IGJ1aWx0aW4vYW0uYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyB3YXMgZGVsZXRlZCBieSB0aGUgYXBwbHlwYXRjaC1tc2cgaG9vayIKK21zZ3N0ciAicydoYSBzdXByaW1pdCDCqyVzwrsgcGVsIGxsaWdhbSBhcHBseXBhdGNoLW1zZyIKKworIzogYnVpbHRpbi9hbS5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIkzDrW5pYSBkJ2VudHJhZGEgbWFsIGZvcm1hZGE6IMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vYW0uYzo1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY29waWFyIGxlcyBub3RlcyBkZSDCqyVzwrsgYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYW0uYzo1MzcKK21zZ2lkICJmc2VlayBmYWlsZWQiCittc2dzdHIgImZzZWVrIGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9hbS5jOjcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgZWwgcGVkYcOnIMKrJXPCuyIKKworIzogYnVpbHRpbi9hbS5jOjc5MAorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICJOb23DqXMgdW5hIHPDqHJpZSBkZSBwZWRhw6dvcyBTdEdJVCBlcyBwb3QgYXBsaWNhciBhIGxhIHZlZ2FkYSIKKworIzogYnVpbHRpbi9hbS5jOjgzOAorbXNnaWQgImludmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICJtYXJjYSBkZSB0ZW1wcyBubyB2w6BsaWRhIgorCisjOiBidWlsdGluL2FtLmM6ODQzIGJ1aWx0aW4vYW0uYzo4NTUKK21zZ2lkICJpbnZhbGlkIERhdGUgbGluZSIKK21zZ3N0ciAibMOtbmlhIERhdGUgbm8gdsOgbGlkYSIKKworIzogYnVpbHRpbi9hbS5jOjg1MAorbXNnaWQgImludmFsaWQgdGltZXpvbmUgb2Zmc2V0IgorbXNnc3RyICJkZXNwbGHDp2FtZW50IGRlIHpvbmEgZGUgdGVtcHMgbm8gdsOgbGlkIgorCisjOiBidWlsdGluL2FtLmM6OTQzCittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICJMYSBkZXRlY2Npw7MgZGUgZm9ybWF0IGRlIHBlZGHDpyBoYSBmYWxsYXQuIgorCisjOiBidWlsdGluL2FtLmM6OTQ4IGJ1aWx0aW4vY2xvbmUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjcmVhciBlbCBkaXJlY3Rvcmkgwqslc8K7IgorCisjOiBidWlsdGluL2FtLmM6OTUzCittc2dpZCAiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGRpdmlkaXIgZWxzIHBlZGHDp29zLiIKKworIzogYnVpbHRpbi9hbS5jOjEwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiVzIC0tY29udGludWVcIi4iCittc2dzdHIgIlF1YW4gaMOgZ2l1IHJlc29sdCBhcXVlc3QgcHJvYmxlbWEsIGV4ZWN1dGV1IFwiJXMgLS1jb250aW51ZVwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIgorbXNnc3RyICIiCisiU2kgcHJlZmVyaXUgb21ldHJlIGFxdWVzdCBwZWRhw6csIGV4ZWN1dGV1IFwiJXMgLS1za2lwXCIgZW4gbGxvYyBkJ2FpeMOyLiIKKworIzogYnVpbHRpbi9hbS5jOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIlcyAtLWFib3J0XCIuIgorbXNnc3RyICIiCisiUGVyIGEgcmVzdGF1cmFyIGxhIGJyYW5jYSBvcmlnaW5hbCBpIGRlaXhhciBkJ2FwZWRhw6dhciwgZXhlY3V0ZXUgXCIlcyAtLWFib3J0IgorIlwiLiIKKworIzogYnVpbHRpbi9hbS5jOjExNjkKK21zZ2lkICJQYXRjaCBzZW50IHdpdGggZm9ybWF0PWZsb3dlZDsgc3BhY2UgYXQgdGhlIGVuZCBvZiBsaW5lcyBtaWdodCBiZSBsb3N0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTE5NworbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiRWwgcGVkYcOnIGVzdMOgIGJ1aXQuIgorCisjOiBidWlsdGluL2FtLmM6MTI2MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhdXRob3IgbGluZSBpbiBjb21taXQgJXMiCittc2dzdHIgIk1hbmNhIGVsIG5vbSBkZSBicmFuY2E7IHByb3ZldSAtYiIKKworIzogYnVpbHRpbi9hbS5jOjEyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlLipzIgorbXNnc3RyICJsw61uaWEgZCdpZGVudGl0YXQgbm8gdsOgbGlkYTogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE0ODQKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisiQWwgZGlww7JzaXQgbGkgbWFucXVlbiBlbHMgYmxvYnMgbmVjZXNzYXJpcyBwZXIgYSByZXRyb2NlZGlyIGEgdW5hIGZ1c2nDsyBkZSAzICIKKyJ2aWVzLiIKKworIzogYnVpbHRpbi9hbS5jOjE0ODYKK21zZ2lkICJVc2luZyBpbmRleCBpbmZvIHRvIHJlY29uc3RydWN0IGEgYmFzZSB0cmVlLi4uIgorbXNnc3RyICJTJ2VzdMOgIHVzYW50IGxhIGluZm9ybWFjacOzIGQnw61uZGV4IHBlciBhIHJlY29uc3RydWlyIHVuIGFyYnJlIGJhc2UuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTA1Cittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorIkhldSBlZGl0YXQgZWwgdm9zdHJlIHBlZGHDpyBhIG3DoD9cbiIKKyJObyBzJ2FwbGljYSBhbHMgYmxvYnMgcmVjb3JkYXRzIGVuIGVsIHNldSDDrW5kZXguIgorCisjOiBidWlsdGluL2FtLmM6MTUxMQorbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAiUydlc3TDoCByZXRyb2NlZGludCBhIGFwZWRhw6dhciBsYSBiYXNlIGkgdW5hIGZ1c2nDsyBkZSAzIHZpZXMuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTM3Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmdXNpb25hciBlbHMgY2FudmlzLiIKKworIzogYnVpbHRpbi9hbS5jOjE1NjkKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICJzJ2VzdMOgIGFwbGljYW50IGEgdW5hIGhpc3TDsnJpYSBidWlkYSIKKworIzogYnVpbHRpbi9hbS5jOjE2MTYgYnVpbHRpbi9hbS5jOjE2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3VtZTogJXMgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICJubyBlcyBwb3QgcmVwcmVuZHJlOiAlcyBubyBleGlzdGVpeC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjM4Cittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICJFbCBjb3MgZGUgbGEgY29taXNzacOzIMOpczoiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgIiIKKyJWb2xldSBhcGxpY2FyLWxvPyBbeV1lcy9bbl1vL1tlXWRpdGEvW3ZdaXN1YWxpdHphIGVsIHBlZGHDpy9bYV1jY2VwdGEnbHMgIgorInRvdHM6ICIKKworIzogYnVpbHRpbi9hbS5jOjE2OTUgYnVpbHRpbi9jb21taXQuYzozOTQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBlbCBmaXR4ZXIgZCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAiw41uZGV4IGJydXQ6IG5vIGVzIHBvZGVuIGFwbGljYXIgcGVkYcOnb3MgKGJydXRzOiAlcykiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzM5IGJ1aWx0aW4vYW0uYzoxODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICJTJ2VzdMOgIGFwbGljYW50OiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc1NgorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAiU2Vuc2UgY2FudmlzIC0tIEVsIHBlZGHDpyBqYSBzJ2hhIGFwbGljYXQuIgorCisjOiBidWlsdGluL2FtLmM6MTc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAiRWwgcGVkYcOnIGhhIGZhbGxhdCBhICVzICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzY2Cittc2dpZCAiVXNlICdnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2gnIHRvIHNlZSB0aGUgZmFpbGVkIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODEwCittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisiQ2FwIGNhbnZpIC0gaGV1IG9ibGlkYXQgZCd1c2FyICdnaXQgYWRkJz9cbiIKKyJTaSBubyBoaSBoYSByZXMgcGVyIGZlciDCq3N0YWdlwrssIHByb2JhYmxlbWVudCBhbGd1bmEgYWx0cmEgY29zYSBqYSBoYVxuIgorImludHJvZHXDr3QgZWxzIG1hdGVpeG9zIGNhbnZpczsgcG90c2VyIHZvbGV1IG9tZXRyZSBhcXVlc3QgcGVkYcOnLiIKKworIzogYnVpbHRpbi9hbS5jOjE4MTcKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJZb3Ugc2hvdWxkICdnaXQgYWRkJyBlYWNoIGZpbGUgd2l0aCByZXNvbHZlZCBjb25mbGljdHMgdG8gbWFyayB0aGVtIGFzICIKKyJzdWNoLlxuIgorIllvdSBtaWdodCBydW4gYGdpdCBybWAgb24gYSBmaWxlIHRvIGFjY2VwdCBcImRlbGV0ZWQgYnkgdGhlbVwiIGZvciBpdC4iCittc2dzdHIgIiIKKyJFbmNhcmEgdGVuaXUgY2FtaW5zIHNlbnNlIGZ1c2lvbmFyIGEgbCfDrW5kZXguXG4iCisiSGV1IGRlIGZlciAnZ2l0IGFkZCcgYSBjYWRhIGZpdHhlciBhbWIgY29uZmxpY3RlcyByZXNvbHRzIHBlciBtYXJjYXItbG9zIGNvbSAiCisiYSB0YWwuXG4iCisiUG9kZXUgZXhlY3V0YXIgYGdpdCBybWAgZW4gdW4gZml0eGVyIHBlciBhY2NlcHRhciBcInN1cHJpbWl0IHBlciBlbGxzXCIgcGVsICIKKyJmaXR4ZXIuIgorCisjOiBidWlsdGluL2FtLmM6MTkyNCBidWlsdGluL2FtLmM6MTkyOCBidWlsdGluL2FtLmM6MTk0MCBidWlsdGluL3Jlc2V0LmM6MzQ2CisjOiBidWlsdGluL3Jlc2V0LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGwnb2JqZWN0ZSDCqyVzwrsuIgorCisjOiBidWlsdGluL2FtLmM6MTk3NgorbXNnaWQgImZhaWxlZCB0byBjbGVhbiBpbmRleCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBuZXRlamFyIGwnw61uZGV4IgorCisjOiBidWlsdGluL2FtLmM6MjAyMAorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICIiCisiU2VtYmxhIHF1ZSBoZXUgbW9ndXQgSEVBRCBkZXNwcsOpcyBkZSBsJ8O6bHRpbWEgZmFsbGFkYSBkZSAnYW0nLlxuIgorIk5vIHMnZXN0w6AgcmVib2JpbmFudCBhIE9SSUdfSEVBRCIKKworIzogYnVpbHRpbi9hbS5jOjIxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICJWYWxvciBubyB2w6BsaWQgcGVyIGEgLS1wYXRjaC1mb3JtYXQ6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MjE1MworbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSBbKDxtYm94PiB8IDxNYWlsZGlyPikuLi5dIgorbXNnc3RyICJnaXQgYW0gWzxvcGNpb25zPl0gWyg8YsO6c3RpYT4gfCA8ZGlyZWN0b3JpLWRlLWNvcnJldT4pLi4uXSIKKworIzogYnVpbHRpbi9hbS5jOjIxNTQKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKK21zZ3N0ciAiZ2l0IGFtIFs8b3BjaW9ucz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTYwCittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgImV4ZWN1dGEgaW50ZXJhY3RpdmFtZW50IgorCisjOiBidWlsdGluL2FtLmM6MjE2MgorbXNnaWQgImhpc3RvcmljYWwgb3B0aW9uIC0tIG5vLW9wIgorbXNnc3RyICJvcGNpw7MgaGlzdMOycmljYSAtLSBuby1vcCIKKworIzogYnVpbHRpbi9hbS5jOjIxNjQKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAicGVybWV0IHJldHJvY2VkaXIgYSB1bmEgZnVzacOzIGRlIDMgdmllcyBzaSDDqXMgbmVjZXNzYXJpIgorCisjOiBidWlsdGluL2FtLmM6MjE2NSBidWlsdGluL2luaXQtZGIuYzo0OTQgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1OAorIzogYnVpbHRpbi9yZXBhY2suYzozMDQgYnVpbHRpbi9zdGFzaC5jOjgxMQorbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICJzaWxlbmNpw7NzIgorCisjOiBidWlsdGluL2FtLmM6MjE2NworbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImFmZWdlaXggdW5hIGzDrW5pYSDCq1NpZ25lZC1vZmYtYnnCuyBhbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTcwCittc2dpZCAicmVjb2RlIGludG8gdXRmOCAoZGVmYXVsdCkiCittc2dzdHIgInJlY29kaWZpY2EgZW4gdXRmOCAocGVyIGRlZmVjdGUpIgorCisjOiBidWlsdGluL2FtLmM6MjE3MgorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInBhc3NhIGwnaW5kaWNhZG9yIC1rIGEgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE3NAorbXNnaWQgInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInBhc3NhIGwnaW5kaWNhZG9yIC1iIGEgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE3NgorbXNnaWQgInBhc3MgLW0gZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInBhc3NhIGwnaW5kaWNhZG9yIC1tIGEgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE3OAorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgInBhc3NhIGwnaW5kaWNhZG9yIC0ta2VlcC1jciBhIGdpdC1tYWlsc3BsaXQgcGVyIGFsIGZvcm1hdCBtYm94IgorCisjOiBidWlsdGluL2FtLmM6MjE4MQorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICIiCisibm8gcGFzc2lzIGwnaW5kaWNhZG9yIC0ta2VlcC1jciBhIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgZCdhbS5rZWVwY3IiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTg0Cittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICJlbGltaW5hIHRvdCBhYmFucyBkJ3VuYSBsw61uaWEgZGUgdGlzb3JlcyIKKworIzogYnVpbHRpbi9hbS5jOjIxODYgYnVpbHRpbi9hbS5jOjIxODkgYnVpbHRpbi9hbS5jOjIxOTIgYnVpbHRpbi9hbS5jOjIxOTUKKyM6IGJ1aWx0aW4vYW0uYzoyMTk4IGJ1aWx0aW4vYW0uYzoyMjAxIGJ1aWx0aW4vYW0uYzoyMjA0IGJ1aWx0aW4vYW0uYzoyMjA3CisjOiBidWlsdGluL2FtLmM6MjIxMworbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgInBhc3NhLWhvIGEgdHJhdsOpcyBkZSBnaXQtYXBwbHkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjAzIGJ1aWx0aW4vY29tbWl0LmM6MTM4NiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzMKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NiBidWlsdGluL2dyZXAuYzo4ODMgYnVpbHRpbi9tZXJnZS5jOjI0OQorIzogYnVpbHRpbi9wdWxsLmM6MTYwIGJ1aWx0aW4vcHVsbC5jOjIxOSBidWlsdGluL3JlYmFzZS5jOjE0NjkKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE1IGJ1aWx0aW4vcmVwYWNrLmM6MzE5IGJ1aWx0aW4vcmVwYWNrLmM6MzIxCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUwIGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzIgYnVpbHRpbi90YWcuYzo0MDMKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNTQgcGFyc2Utb3B0aW9ucy5oOjE3NSBwYXJzZS1vcHRpb25zLmg6MzE2Cittc2dpZCAibiIKK21zZ3N0ciAibiIKKworIzogYnVpbHRpbi9hbS5jOjIyMDkgYnVpbHRpbi9icmFuY2guYzo2NjEgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOAorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU1IGJ1aWx0aW4vdGFnLmM6NDM3IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IgorbXNnc3RyICJmb3JtYXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjEwCittc2dpZCAiZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluIgorbXNnc3RyICJlbCBmb3JtYXQgZW4gZWwgcXVhbCBlc3RhbiBlbHMgcGVkYcOnb3MiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE2Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICJwYXNzYSBwZXIgYWx0IGVsIG1pc3NhdGdlIGQnZXJyb3Igc2kgZmFsbGEgbCdhcGxpY2FjacOzIGRlbCBwZWRhw6ciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE4Cittc2dpZCAiY29udGludWUgYXBwbHlpbmcgcGF0Y2hlcyBhZnRlciByZXNvbHZpbmcgYSBjb25mbGljdCIKK21zZ3N0ciAic2VndWVpeCBhcGxpY2FudCBwZWRhw6dvcyBkZXNwcsOpcyBkZSByZXNvbGRyZSB1biBjb25mbGljdGUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIxCittc2dpZCAic3lub255bXMgZm9yIC0tY29udGludWUiCittc2dzdHIgInNpbsOybmltcyBkZSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL2FtLmM6MjIyNAorbXNnaWQgInNraXAgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgIm9tZXQgZWwgcGVkYcOnIGFjdHVhbCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjcKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICJyZXN0YXVyYSBsYSBicmFuY2Egb3JpZ2luYWwgaSBhdm9ydGEgbCdvcGVyYWNpw7MgZCdhcGVkYcOnYW1lbnQuIgorCisjOiBidWlsdGluL2FtLmM6MjIzMAorbXNnaWQgImFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24gYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzMKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBiZWluZyBhcHBsaWVkLiIKK21zZ3N0ciAibW9zdHJhIGVsIHBlZGHDpyBxdWUgcydlc3TDoCBhcGxpY2FudC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM3Cittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICJtZW50ZWl4IHNvYnJlIGxhIGRhdGEgZGVsIGNvbWl0ZW50IgorCisjOiBidWlsdGluL2FtLmM6MjIzOQorbXNnaWQgInVzZSBjdXJyZW50IHRpbWVzdGFtcCBmb3IgYXV0aG9yIGRhdGUiCittc2dzdHIgInVzYSBlbCBtYXJjIGRlIHRlbXBzIGFjdHVhbCBwZXIgbGEgZGF0YSBkJ2F1dG9yIgorCisjOiBidWlsdGluL2FtLmM6MjI0MSBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIwIGJ1aWx0aW4vY29tbWl0LmM6MTUwNworIzogYnVpbHRpbi9tZXJnZS5jOjI4NiBidWlsdGluL3B1bGwuYzoxOTQgYnVpbHRpbi9yZWJhc2UuYzo1MDkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxMyBidWlsdGluL3JldmVydC5jOjExNyBidWlsdGluL3RhZy5jOjQxOAorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAiSUQgZGUgY2xhdSIKKworIzogYnVpbHRpbi9hbS5jOjIyNDIgYnVpbHRpbi9yZWJhc2UuYzo1MTAgYnVpbHRpbi9yZWJhc2UuYzoxNTE0Cittc2dpZCAiR1BHLXNpZ24gY29tbWl0cyIKK21zZ3N0ciAic2lnbmEgbGVzIGNvbWlzc2lvbnMgYW1iIEdQRyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDUKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAiKMO6cyBpbnRlcm4gcGVyIGEgZ2l0LXJlYmFzZSkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjYzCittc2dpZCAiIgorIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmRcbiIKKyJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIgorbXNnc3RyICIiCisiRmEgbW9sdCBxdWUgbCdvcGNpw7MgLWIvLS1iaW5hcnkgbm8gaGEgZmV0IHJlcywgaVxuIgorInMnZWxpbWluYXLDoC4gTm8gbCd1c2V1IG3DqXMuIgorCisjOiBidWlsdGluL2FtLmM6MjI3MAorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJXMgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAiIgorInVuIGRpcmVjdG9yaSBkZSDCq3JlYmFzZcK7IGFudGVyaW9yICVzIGVuY2FyYSBleGlzdGVpeCBwZXLDsiBzJ2hhIGRvbmF0IHVuYSAiCisiYsO6c3RpYS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisiUydoYSB0cm9iYXQgdW4gZGlyZWN0b3JpICVzIGV4dHJhdmlhdC5cbiIKKyJVc2V1IFwiZ2l0IGFtIC0tYWJvcnRcIiBwZXIgYSBlbGltaW5hci1sby4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzE1Cittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiVW5hIG9wZXJhY2nDsyBkZSByZXNvbHVjacOzIG5vIGVzdMOgIGVuIGN1cnM7IG5vIHJlcHJlbmVtLiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjUKK21zZ2lkICJpbnRlcmFjdGl2ZSBtb2RlIHJlcXVpcmVzIHBhdGNoZXMgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6OAorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbPG9wY2lvbnM+XSBbPHBlZGHDpz4uLi5dIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIGVsIGZpdHhlciBkJ2FyeGl1IMKrJXPCuyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MjAKK21zZ2lkICJjb3VsZCBub3QgcmVkaXJlY3Qgb3V0cHV0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlZGlyaWdpciBsYSBzb3J0aWRhIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzozNworbXNnaWQgImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgImdpdCBhcmNoaXZlOiBSZW1vdCBzZW5zZSBVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IHMnZXNwZXJhdmEgQUNLL05BSywgcydoYSByZWJ1dCB1biBwYXF1ZXQgZGUgbmV0ZWphIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6ICVzIE5BQ0siCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY1Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogZXJyb3IgZGUgcHJvdG9jb2wiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY5Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlOiBzJ2VzcGVyYXZhIHVuYSBuZXRlamEiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMgorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8YmFkX3Rlcm0+IDxnb29kX3Rlcm0+IgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8bWFsX3Rlcm1lPiA8Ym9uX3Rlcm1lPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI0Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNQorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzxjb21pc3Npw7M+XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA8c3RhdGU+IDxyZXZpc2lvbj4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxtYWxfdGVybWU+IDxib25fdGVybWU+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjcKKyMsIGZ1enp5Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxjb21tYW5kPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPG1hbF90ZXJtZT4gPGJvbl90ZXJtZT4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOAorIywgZnV6enkKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA8Z29vZF90ZXJtPiA8YmFkX3Rlcm0+IFs8dGVybT5dIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8bWFsX3Rlcm1lPiA8Ym9uX3Rlcm1lPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5CisjLCBmdXp6eQorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCittc2dzdHIgIiIKKyJwYXLDoG1ldHJlIG5vIHbDoGxpZCAkYXJnIHBlciBhICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJMZXMgb3BjaW9ucyBhZG1lc2VzIHPDs246IC0tdGVybS1nb29kfC0tdGVybS1vbGQgaSAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzAKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PHRlcm0+XVstLW5vLWNoZWNrb3V0XSBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRlcm0iCittc2dzdHIgIsKrJXPCuyBubyDDqXMgdW4gdGVybWUgdsOgbGlkIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgdXNlIHRoZSBidWlsdGluIGNvbW1hbmQgJyVzJyBhcyBhIHRlcm0iCittc2dzdHIgIm5vIGVzIHBvdCB1c2FyIGwnb3JkcmUgaW50ZXJuYSDCqyVzwrsgY29tIGEgdGVybWUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSB0ZXJtICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBjYW52aWFyIGVsIHNpZ25pZmljYXQgZGVsIHRlcm1lIMKrJXPCuyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExMQorbXNnaWQgInBsZWFzZSB1c2UgdHdvIGRpZmZlcmVudCB0ZXJtcyIKK21zZ3N0ciAidXNldSBkb3MgdGVybWVzIGRpc3RpbnRlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExOAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRoZSBmaWxlIEJJU0VDVF9URVJNUyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciBlbCBCSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLlxuIgorbXNnc3RyICJObyBlc3RlbSBiaXNlY2FudC4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIsKrJXPCuyBubyDDqXMgdW5hIGNvbWlzc2nDsyB2w6BsaWRhIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICclcycuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisiTm8gcydoYSBwb2d1dCBhZ2FmYXIgbGEgSEVBRCBvcmlnaW5hbCAnJGJyYW5jaCcuXG4iCisiUHJvdmV1ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21pc3Npw7M+Jy4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJQYXLDoG1ldHJlIGJpc2VjdF93cml0ZSBpbmNvcnJlY3RlOiAkc3RhdGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGdldCB0aGUgb2lkIG9mIHRoZSByZXYgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGNhbnZpYXIgZWwgc2lnbmlmaWNhdCBkZWwgdGVybWUgwqslc8K7IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBvcGVuIHRoZSBmaWxlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZWwgZml0eGVyIMKrJXPCuyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21tYW5kOiB5b3UncmUgY3VycmVudGx5IGluIGEgJXMvJXMgYmlzZWN0IgorbXNnc3RyICIiCisiT3JkcmUgbm8gdsOgbGlkYTogYWN0dWFsbWVudCBlc3RldSBlbiB1bmEgYmlzZWNjacOzICRURVJNX0JBRC8kVEVSTV9HT09ELiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKyJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIgorbXNnc3RyICIiCisiQ2FsIGRvbmFyLW1lIGFsbWVueXMgdW5hIHJldmlzacOzICRiYWRfc3luIGkgdW5hICRnb29kX3N5bi5cbiIKKyIoUG9kZXUgdXNhciBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBpIFwiZ2l0IGJpc2VjdCAkZ29vZF9zeW5cIiBwZXIgYWl4w7IuKSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyJDYWwgY29tZW7Dp2FyIGFtYiBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJEZXNwcsOpcyBjYWwgZG9uYXItbWUgYWxtZW55cyB1bmEgcmV2aXNpw7MgJGdvb2Rfc3luIGkgdW5hICRiYWRfc3luLlxuIgorIihQb2RldSB1c2FyIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIGkgXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIHBlciBhaXjDsi4pIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzIyCisjLCBjLWZvcm1hdAorbXNnaWQgImJpc2VjdGluZyBvbmx5IHdpdGggYSAlcyBjb21taXQiCittc2dzdHIgImJpc2VjYW50IGFtYiBub23DqXMgdW5hIGNvbWlzc2nDsyAlcyIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMzMAorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICJOJ2VzdGV1IHNlZ3VyIFtZL25dPyAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozNzcKK21zZ2lkICJubyB0ZXJtcyBkZWZpbmVkIgorbXNnc3RyICJjYXAgdGVybWUgZGVmaW5pdCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjdXJyZW50IHRlcm1zIGFyZSAlcyBmb3IgdGhlIG9sZCBzdGF0ZVxuIgorImFuZCAlcyBmb3IgdGhlIG5ldyBzdGF0ZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAnZ2l0IGJpc2VjdCB0ZXJtcycuXG4iCisiU3VwcG9ydGVkIG9wdGlvbnMgYXJlOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIGFuZCAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIgorbXNnc3RyICIiCisicGFyw6BtZXRyZSBubyB2w6BsaWQgJXMgcGVyIGEgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIkxlcyBvcGNpb25zIGFkbWVzZXMgc8OzbjogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBpIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIG9wdGlvbjogJyVzJyIKK21zZ3N0ciAib3BjacOzIG5vIHJlY29uZWd1ZGE6IMKrJXPCuyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICLCqyVzwrsgbm8gc2VtYmxhIHNlciB1bmEgcmV2aXNpw7MgdsOgbGlkYSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUxMgorbXNnaWQgImJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAiSEVBRCBpbmNvcnJlY3RlIC0gQ2FsIHVuIEhFQUQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hlY2tpbmcgb3V0ICclcycgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3Qgc3RhcnQgPHZhbGlkLWJyYW5jaD4nLiIKK21zZ3N0ciAiIgorImwnYWdhZmFtZW50IGRlIMKrJXPCuyBoYSBmYWxsYXQuIFByb3ZldSDCq2dpdCAgYmlzZWN0IHN0YXJ0IDxicmFuY2EtIgorInbDoGxpZGE+wrsuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTQ4Cittc2dpZCAid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIKK21zZ3N0ciAibm8gZXMgYmlzZWNhcsOgIGVuIHVuIGFyYnJlIGVuIGVsIHF1YWwgcydoYSBmZXQgY2ctc2VlayIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MQorIywgZnV6enkKK21zZ2lkICJiYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICJIRUFEIGluY29ycmVjdGUgLSByZWZlcsOobmNpYSBzaW1iw7JsaWNhIGVzdHJhbnlhIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTc1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZjogJyVzJyIKK21zZ3N0ciAiZml0eGVyIG5vIHbDoGxpZDogwqslc8K7IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMxCittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAicmVhbGl0emEgJ2dpdCBiaXNlY3QgbmV4dCciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzMKK21zZ2lkICJ3cml0ZSB0aGUgdGVybXMgdG8gLmdpdC9CSVNFQ1RfVEVSTVMiCittc2dzdHIgImVzY3JpdSBlbHMgdGVybWVzIGEgLmdpdC9CSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzUKK21zZ2lkICJjbGVhbnVwIHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIm5ldGVqYSBsJ2VzdGF0IGRlIGxhIGJpc2VjY2nDsyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNworbXNnaWQgImNoZWNrIGZvciBleHBlY3RlZCByZXZzIgorbXNnc3RyICJjb21wcm92YSBsZXMgcmV2aXNpb25zIGVzcGVyYWRlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzOQorIywgZnV6enkKK21zZ2lkICJyZXNldCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICJuZXRlamEgbCdlc3RhdCBkZSBsYSBiaXNlY2Npw7MiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDEKKyMsIGZ1enp5Cittc2dpZCAid3JpdGUgb3V0IHRoZSBiaXNlY3Rpb24gc3RhdGUgaW4gQklTRUNUX0xPRyIKK21zZ3N0ciAibmV0ZWphIGwnZXN0YXQgZGUgbGEgYmlzZWNjacOzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQzCisjLCBmdXp6eQorbXNnaWQgImNoZWNrIGFuZCBzZXQgdGVybXMgaW4gYSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIm5ldGVqYSBsJ2VzdGF0IGRlIGxhIGJpc2VjY2nDsyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NQorbXNnaWQgImNoZWNrIHdoZXRoZXIgYmFkIG9yIGdvb2QgdGVybXMgZXhpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NworIywgZnV6enkKK21zZ2lkICJwcmludCBvdXQgdGhlIGJpc2VjdCB0ZXJtcyIKK21zZ3N0ciAiaW1wcmltZWl4IG5vbcOpcyBsZXMgZXRpcXVldGVzIGRlIGwnb2JqZWN0ZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0OQorbXNnaWQgInN0YXJ0IHRoZSBiaXNlY3Qgc2Vzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjUxCittc2dpZCAidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIKK21zZ3N0ciAiYWN0dWFsaXR6YSBCSVNFQ1RfSEVBRCBlbiBsbG9jIGQnYWdhZmFyIGxhIGNvbWlzc2nDsyBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTMKK21zZ2lkICJubyBsb2cgZm9yIEJJU0VDVF9XUklURSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjcwCittc2dpZCAiLS13cml0ZS10ZXJtcyByZXF1aXJlcyB0d28gYXJndW1lbnRzIgorbXNnc3RyICItLXdyaXRlLXRlcm1zIHJlcXVlcmVpeCBkb3MgcGFyw6BtZXRyZXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzQKK21zZ2lkICItLWJpc2VjdC1jbGVhbi1zdGF0ZSByZXF1aXJlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIG5vIGFjY2VwdGEgcGFyw6BtZXRyZXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODEKKyMsIGZ1enp5Cittc2dpZCAiLS1iaXNlY3QtcmVzZXQgcmVxdWlyZXMgZWl0aGVyIG5vIGFyZ3VtZW50IG9yIGEgY29tbWl0IgorbXNnc3RyICItLWJpc2VjdC1jbGVhbi1zdGF0ZSBubyBhY2NlcHRhIHBhcsOgbWV0cmVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg1CisjLCBmdXp6eQorbXNnaWQgIi0tYmlzZWN0LXdyaXRlIHJlcXVpcmVzIGVpdGhlciA0IG9yIDUgYXJndW1lbnRzIgorbXNnc3RyICItLWJpc2VjdC1jbGVhbi1zdGF0ZSBubyBhY2NlcHRhIHBhcsOgbWV0cmVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjkxCisjLCBmdXp6eQorbXNnaWQgIi0tY2hlY2stYW5kLXNldC10ZXJtcyByZXF1aXJlcyAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgbm8gYWNjZXB0YSBwYXLDoG1ldHJlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY5NworIywgZnV6enkKK21zZ2lkICItLWJpc2VjdC1uZXh0LWNoZWNrIHJlcXVpcmVzIDIgb3IgMyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIG5vIGFjY2VwdGEgcGFyw6BtZXRyZXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3MDMKKyMsIGZ1enp5Cittc2dpZCAiLS1iaXNlY3QtdGVybXMgcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50IgorbXNnc3RyICItLXdyaXRlLXRlcm1zIHJlcXVlcmVpeCBkb3MgcGFyw6BtZXRyZXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMQorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJsYW1lIFs8b3BjaW9ucz5dIFs8b3BjaW9ucy1kZS1yZXZpc2nDsz5dIFs8cmV2aXNpw7M+XSBbLS1dIGZpdHhlciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjM2Cittc2dpZCAiPHJldi1vcHRzPiBhcmUgZG9jdW1lbnRlZCBpbiBnaXQtcmV2LWxpc3QoMSkiCittc2dzdHIgImVzIGRvY3VtZW50ZW4gbGVzIDxvcGNpb25zLWRlLXJldmlzacOzPiBlbiBnaXQtcmV2LWxpc3QoMSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGluZyBhIGNvbG9yOiAlcyIKK21zZ3N0ciAicmVzcGVjdGEgZWxzIGNvbG9ycyBkZWwgZm9ybWF0IgorCisjOiBidWlsdGluL2JsYW1lLmM6NDE2Cittc2dpZCAibXVzdCBlbmQgd2l0aCBhIGNvbG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3MjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgJyVzJyBpbiBjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVzIgorbXNnc3RyICJpZ25vcmEgZWwgY29sb3Igbm8gdsOgbGlkIMKrJS4qc8K7IGVuIGxvZy5ncmFwaENvbG9ycyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc0NworIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciBibGFtZS5jb2xvcmluZyIKK21zZ3N0ciAidmFsb3Igbm8gdsOgbGlkIHBlciBhIC0tbWlzc2luZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgyMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgcmV2aXNpb24gJXMgdG8gaWdub3JlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIGxhIHJldmlzacOzOiAlcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NAorbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgIk1vc3RyYSBsZXMgZW50cmFkZXMgwqtibGFtZcK7IG1lbnRyZSBsZXMgdHJvYmVtLCBpbmNyZW1lbnRhbG1lbnQiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDUKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisiTW9zdHJhIHVuIFNIQS0xIGVuIGJsYW5jIHBlciBsZXMgY29taXNzaW9ucyBkZSBmcm9udGVyYSAoUGVyIGRlZmVjdGU6ICIKKyJkZXNhY3RpdmF0KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NgorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorIk5vIHRyYWN0aXMgbGVzIGNvbWlzc2lvbnMgZCdhcnJlbCBjb20gYSBsw61taXRzIChQZXIgZGVmZWN0ZTogZGVzYWN0aXZhdCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDcKK21zZ2lkICJTaG93IHdvcmsgY29zdCBzdGF0aXN0aWNzIgorbXNnc3RyICJNb3N0cmEgbGVzIGVzdGFkw61zdGlxdWVzIGRlIHByZXUgZGUgdHJlYmFsbCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiRm9yw6dhIGwnaW5mb3JtZSBkZSBwcm9ncsOpcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OQorbXNnaWQgIlNob3cgb3V0cHV0IHNjb3JlIGZvciBibGFtZSBlbnRyaWVzIgorbXNnc3RyICJNb3N0cmEgbGEgcHVudHVhY2nDsyBkZSBzb3J0aWRhIGRlIGxlcyBlbnRyYWRlcyDCq2JsYW1lwrsiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTAKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAiTW9zdHJhIGVsIG5vbSBkZSBmaXR4ZXIgb3JpZ2luYWwgKFBlciBkZWZlY3RlOiBhdXRvbcOgdGljKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MQorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiTW9zdHJhIGVsIG7Dum1lcm8gZGUgbMOtbmlhIG9yaWdpbmFsIChQZXIgZGVmZWN0ZTogZGVzYWN0aXZhdCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTIKK21zZ2lkICJTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIgorbXNnc3RyICJQcmVzZW50YSBlbiB1biBmb3JtYXQgZGlzc2VueWF0IHBlciBjb25zdW1wY2nDsyBwZXIgbcOgcXVpbmEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTMKK21zZ2lkICJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIk1vc3RyYSBlbCBmb3JtYXQgZGUgcG9yY2VsbGFuYSBhbWIgaW5mb3JtYWNpw7MgZGUgY29taXNzacOzIHBlciBsw61uaWEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTQKK21zZ2lkICJVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgZ2l0LWFubm90YXRlIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisiVXNhIGVsIG1hdGVpeCBtb2RlIGRlIHNvcnRpZGEgcXVlIGdpdC1hbm5vdGF0ZSAoUGVyIGRlZmVjdGU6IGRlc2FjdGl2YXQpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU1Cittc2dpZCAiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJNb3N0cmEgbGEgbWFyY2EgZGUgdGVtcHMgY3J1YSAoUGVyIGRlZmVjdGU6IGRlc2FjdGl2YXQpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU2Cittc2dpZCAiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJNb3N0cmEgbCdTSEExIGRlIGNvbWlzc2nDsyBsbGFyZyAoUGVyIGRlZmVjdGU6IGRlc2FjdGl2YXQpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU3Cittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiT21ldCBlbCBub20gZCdhdXRvciBpIGxhIG1hcmNhIGRlIHRlbXBzIChQZXIgZGVmZWN0ZTogZGVzYWN0aXZhdCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTgKK21zZ2lkICJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyJNb3N0cmEgbCdhZHJlw6dhIGVsZWN0csOybmljYSBkZSBsJ2F1dG9yIGVuIGxsb2MgZGVsIG5vbSAoUGVyIGRlZmVjdGU6ICIKKyJkZXNhY3RpdmF0KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1OQorbXNnaWQgIklnbm9yZSB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIgorbXNnc3RyICJJZ25vcmEgbGVzIGRpZmVyw6huY2llcyBkJ2VzcGFpIGVuIGJsYW5jIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYwIGJ1aWx0aW4vbG9nLmM6MTcwMgorbXNnaWQgInJldiIKK21zZ3N0ciAicmV2IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYwCisjLCBmdXp6eQorbXNnaWQgIklnbm9yZSA8cmV2PiB3aGVuIGJsYW1pbmciCittc2dzdHIgImlnbm9yYSBsJ8OtbmRleCBlbiBjb21wcm92YXIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjEKKyMsIGZ1enp5Cittc2dpZCAiSWdub3JlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiIKK21zZ3N0ciAibGxlZ2l1IGVsIG1pc3NhdGdlIGRlcyBkJ3VuIGZpdHhlciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MgorbXNnaWQgImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MworbXNnaWQgImNvbG9yIGxpbmVzIGJ5IGFnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY0Cittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICJHYXN0YSBjaWNsZXMgZXh0cmVzIHBlciBhIHRyb2JhciB1bmEgY29pbmNpZMOobmNpYSBtaWxsb3IiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjUKK21zZ2lkICJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiCittc2dzdHIgIlVzYSBsZXMgcmV2aXNpb25zIGRlIDxmaXR4ZXI+IGVuIGxsb2MgZCdpbnZvY2FyIGdpdC1yZXYtbGlzdCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NgorbXNnaWQgIlVzZSA8ZmlsZT4ncyBjb250ZW50cyBhcyB0aGUgZmluYWwgaW1hZ2UiCittc2dzdHIgIlVzYSBlbHMgY29udGluZ3V0cyBkZSA8Zml0eGVyPiBjb20gYSBsYSBpbWF0Z2UgZmluYWwiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjcgYnVpbHRpbi9ibGFtZS5jOjg2OAorbXNnaWQgInNjb3JlIgorbXNnc3RyICJwdW50dWFjacOzIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY3Cittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiVHJvYmEgY8OycGllcyBkZSBsw61uaWEgZGlucyBpIGEgdHJhdsOpcyBkZWxzIGZpdHhlcnMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjgKK21zZ2lkICJGaW5kIGxpbmUgbW92ZW1lbnRzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJUcm9iYSBtb3ZpbWVudHMgZGUgbMOtbmlhIGRpbnMgaSBhIHRyYXbDqXMgZGVscyBmaXR4ZXJzIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAibixtIgorbXNnc3RyICJuLG0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjkKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiUHJvY2Vzc2Egbm9tw6lzIGVsIHJhbmcgZGUgbMOtbmllcyBuLG0sIGNvbXB0YW50IGRlcyBkJzEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo5MjEKK21zZ2lkICItLXByb2dyZXNzIGNhbid0IGJlIHVzZWQgd2l0aCAtLWluY3JlbWVudGFsIG9yIHBvcmNlbGFpbiBmb3JtYXRzIgorbXNnc3RyICIiCisibm8gZXMgcG90IHVzYXIgLS1wcm9ncmVzcyBhbWIgZWxzIGZvcm1hdHMgLS1pbmNyZW1lbnRhbCBvIGRlIHBvcmNlbGxhbmEiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlCisjLiBtYXhpbXVtIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluCisjLiAiZ2l0IGJsYW1lIiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMQorIy4gbW9udGhzIGFnbyIsIHdoaWNoIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QKKyMuIGFtb25nIHZhcmlvdXMgZm9ybXMgb2YgcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0CisjLiB5b3VyIGxhbmd1YWdlIG1heSBuZWVkIG1vcmUgb3IgZmV3ZXIgZGlzcGxheQorIy4gY29sdW1ucy4KKyMuCisjOiBidWlsdGluL2JsYW1lLmM6OTcyCittc2dpZCAiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIKK21zZ3N0ciAiZmEgNCBhbnlzIGkgMTEgbWVzb3MiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmUiCittc2dpZF9wbHVyYWwgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmVzIgorbXNnc3RyWzBdICJlbCBmaXR4ZXIgJXMgdMOpIG5vbcOpcyAlbHUgbMOtbmlhIgorbXNnc3RyWzFdICJlbCBmaXR4ZXIgJXMgdMOpIG5vbcOpcyAlbHUgbMOtbmllcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjExMjUKK21zZ2lkICJCbGFtaW5nIGxpbmVzIgorbXNnc3RyICJTJ2VzdMOgIGZlbnQgdW4gwqtibGFtZcK7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI5Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3BjaW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzAKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstbF0gWy1mXSA8YnJhbmNoLW5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wY2lvbnM+XSBbLWxdIFstZl0gPG5vbS1kZS1icmFuY2E+IFs8cHVudC1pbmljaWFsPl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzEKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstcl0gKC1kIHwgLUQpIDxicmFuY2gtbmFtZT4uLi4iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcGNpb25zPl0gWy1yXSAoLWQgfCAtRCkgPG5vbS1kZS1icmFuY2E+Li4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMyCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLW0gfCAtTSkgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3BjaW9ucz5dICgtbSB8IC1NKSBbPGJyYW5jYS1hbnRpZ2E+XSA8YnJhbmNhLW5vdmE+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMzCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLWMgfCAtQykgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3BjaW9ucz5dICgtYyB8IC1DKSBbPGJyYW5jYS1hbnRpZ2E+XSA8YnJhbmNhLW5vdmE+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM0Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wY2lvbnM+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozNQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcGNpb25zPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorInMnZXN0w6Agc3VwcmltaW50IGxhIGJyYW5jYSDCqyVzwrsgcXVlIHMnaGFcbiIKKyIgICAgICAgICBmdXNpb25hdCBhIMKrJXPCuywgcGVyw7IgZW5jYXJhIG5vXG4iCisiICAgICAgICAgcydoYSBmdXNpb25hdCBhIEhFQUQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyJubyBzJ2VzdMOgIHN1cHJpbWludCBsYSBicmFuY2Egwqslc8K7IHF1ZSBlbmNhcmEgbm9cbiIKKyIgICAgICAgICBzJ2hhIGZ1c2lvbmF0IGEgwqslc8K7LCBlbmNhcmEgcXVlIGVzdMOgXG4iCisiICAgICAgICAgZnVzaW9uYWRhIGEgSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCB0cm9iYXIgbCdvYmplY3RlIGRlIGNvbWlzc2nDsyBkZSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jYSDCqyVzwrsgbm8gZXN0w6AgdG90YWxtZW50IGZ1c2lvbmFkYS5cbiIKKyJTaSBlc3RldSBzZWd1ciBxdWUgbGEgdm9sZXUgc3VwcmltaXIsIGV4ZWN1dGV1ICdnaXQgYnJhbmNoIC1EICVzJy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTg5Cittc2dpZCAiVXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiTCdhY3R1YWxpdHphY2nDsyBkZWwgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyMAorbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAibm8gZXMgcG90IHVzYXIgLWEgYW1iIC1kIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNgorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCB0cm9iYXIgbCdvYmplY3RlIGRlIGNvbWlzc2nDsyBkZSBIRUFEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnIGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIk5vIGVzIHBvdCBzdXByaW1pciBsYSBicmFuY2Egwqslc8K7IGFnYWZhZGEgYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJubyBzJ2hhIHRyb2JhdCBsYSBicmFuY2EgYW1iIHNlZ3VpbWVudCByZW1vdCDCqyVzwrsuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJubyBzJ2hhIHRyb2JhdCBsYSBicmFuY2Egwqslc8K7LiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICJFcnJvciBlbiBzdXByaW1pciBsYSBicmFuY2EgYW1iIHNlZ3VpbWVudCByZW1vdCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICJFcnJvciBlbiBzdXByaW1pciBsYSBicmFuY2Egwqslc8K7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZS10cmFja2luZyBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIlMnaGEgc3VwcmltaXQgbGEgYnJhbmNhIGFtYiBzZWd1aW1lbnQgcmVtb3QgJXMgKGVyYSAlcykuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJTJ2hhIHN1cHJpbWl0IGxhIGJyYW5jYSAlcyAoZXJhICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjkgYnVpbHRpbi90YWcuYzo2MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjYWRlbmEgZGUgZm9ybWF0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2MAorIywgZnV6enkKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIGxhIGNvbWlzc2nDsyBIRUFEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAoJXMpIHBvaW50cyBvdXRzaWRlIG9mIHJlZnMvaGVhZHMvIgorbXNnc3RyICJIRUFEIG5vIHRyb2JhdCBzb3RhIHJlZnMvaGVhZHMhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgcmViYXNlZCBhdCAlcyIKK21zZ3N0ciAiUydlc3TDoCBmZW50IMKrcmViYXNlwrsgZW4gbGEgYnJhbmNhICVzIGEgJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyBiaXNlY3RlZCBhdCAlcyIKK21zZ3N0ciAiTGEgYnJhbmNhICVzIHMnZXN0w6AgYmlzZWNhbnQgYSAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDIKK21zZ2lkICJjYW5ub3QgY29weSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIm5vIGVzIHBvdCBjb3BpYXIgYnJhbmNhIGFjdHVhbCBtZW50cmUgbm8gcyfDqXMgYSBjYXAuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUwNAorbXNnaWQgImNhbm5vdCByZW5hbWUgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICJubyBlcyBwb3QgY2FudmlhciBlbCBub20gZGUgbGEgYnJhbmNhIGFjdHVhbCBtZW50cmUgbm8gcyfDqXMgYSBjYXAuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICJOb20gZGUgYnJhbmNhIG5vIHbDoGxpZDogwqslc8K7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0MgorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICJFbCBjYW52aSBkZSBub20gZGUgYnJhbmNhIGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDQKK21zZ2lkICJCcmFuY2ggY29weSBmYWlsZWQiCittc2dzdHIgIkxhIGPDsnBpYSBkZSBsYSBicmFuY2EgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGEgY29weSBvZiBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIgorbXNnc3RyICJTJ2hhIGNyZWF0IHVuYSBjw7JwaWEgZCd1bmEgYnJhbmNhIG1hbCBhbm9tZW5hZGEgwqslc8K7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAiUydoYSBjYW52aWF0IGVsIG5vbSBkZSBsYSBicmFuY2EgbWFsIGFub21lbmFkYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIlMnaGEgY2FudmlhdCBlbCBub20gZGUgbGEgYnJhbmNhIGEgJXMsIHBlcsOyIEhFQUQgbm8gZXN0w6AgYWN0dWFsaXR6YXQhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2NgorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorIkxhIGJyYW5jYSBlc3TDoCBjYW52aWFkYSBkZSBub20sIHBlcsOyIGwnYWN0dWFsaXR6YWNpw7MgZGVsIGZpdHhlciBkZSAiCisiY29uZmlndXJhY2nDsyBoYSBmYWxsYXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY4Cittc2dpZCAiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJMYSBicmFuY2EgZXN0w6AgY29waWFkYSwgcGVyw7IgbCdhY3R1YWxpdHphY2nDsyBkZWwgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MgaGEgIgorImZhbGxhdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaFxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBzdHJpcHBlZC5cbiIKK21zZ3N0ciAiIgorIkVkaXRldSBsYSBkZXNjcmlwY2nDsyBkZSBsYSBicmFuY2FcbiIKKyIgICVzXG4iCisiUydlbGltaW5hcmFuIGxlcyBsw61uaWVzIHF1ZSBjb21lbmNpbiBhbWIgwqslY8K7LlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9ucyBnZW7DqHJpcXVlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjAKK21zZ2lkICJzaG93IGhhc2ggYW5kIHN1YmplY3QsIGdpdmUgdHdpY2UgZm9yIHVwc3RyZWFtIGJyYW5jaCIKK21zZ3N0ciAibW9zdHJhIGVsIGhhc2ggaSBsJ2Fzc3VtcHRlLCBkb25ldSBkdWVzIHZlZ2FkZXMgcGVyIGxhIGJyYW5jYSBmb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMQorbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgIm9tZXQgZWxzIG1pc3NhdGdlcyBpbmZvcm1hdGl1cyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjIKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIKK21zZ3N0ciAiY29uZmlndXJhIGVsIG1vZGUgZGUgc2VndWltZW50ICh2ZWdldSBnaXQtcHVsbCgxKSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI0Cittc2dpZCAiZG8gbm90IHVzZSIKK21zZ3N0ciAibm8gdXNhciIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYgYnVpbHRpbi9yZWJhc2UuYzo1MDUKK21zZ2lkICJ1cHN0cmVhbSIKK21zZ3N0ciAiZm9udCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYKK21zZ2lkICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgImNhbnZpYSBsYSBpbmZvcm1hY2nDsyBkZSBmb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNworIywgZnV6enkKK21zZ2lkICJ1bnNldCB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAiRGVzYXNzaWduYSBsYSBpbmZvcm1hY2nDsyBkZSBmb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOAorbXNnaWQgInVzZSBjb2xvcmVkIG91dHB1dCIKK21zZ3N0ciAidXNhIHNvcnRpZGEgY29sb3JhZGEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI5Cittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiYWN0dWEgZW4gYnJhbnF1ZXMgYW1iIHNlZ3VpbWVudCByZW1vdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzEgYnVpbHRpbi9icmFuY2guYzo2MzMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyBicmFucXVlcyBxdWUgY29udGluZ3VpbiBsYSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMyIGJ1aWx0aW4vYnJhbmNoLmM6NjM0Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiaW1wcmltZWl4IG5vbcOpcyBsZXMgYnJhbnF1ZXMgcXVlIG5vIGNvbnRpbmd1aW4gbGEgY29taXNzacOzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzNworbXNnaWQgIlNwZWNpZmljIGdpdC1icmFuY2ggYWN0aW9uczoiCittc2dzdHIgIkFjY2lvbnMgZGUgZ2l0LWJyYW5jaCBlc3BlY8OtZmlxdWVzOiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzgKK21zZ2lkICJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAibGxpc3RhIGxlcyBicmFucXVlcyBhbWIgc2VndWltZW50IHJlbW90IGkgbGVzIGxvY2FscyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDAKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAic3VwcmltZWl4IGxhIGJyYW5jYSBzaSBlc3TDoCBjb21wbGV0YW1lbnQgZnVzaW9uYWRhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MQorbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgInN1cHJpbWVpeCBsYSBicmFuY2EgKGVuY2FyYSBxdWUgbm8gZXN0aWd1aSBmdXNpb25hZGEpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MgorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJtb3UvY2FudmlhIGRlIG5vbSB1bmEgYnJhbmNhIGkgZWwgc2V1IHJlZ2lzdHJlIGRlIHJlZmVyw6huY2lhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MworbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIm1vdS9jYW52aWEgZGUgbm9tIHVuYSBicmFuY2EsIGVuY2FyYSBxdWUgZWwgZGVzdMOtIGV4aXN0ZWl4aSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDQKK21zZ2lkICJjb3B5IGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJjb3BpYSB1bmEgYnJhbmNhIGkgZWwgc2V1IHJlZ2lzdHJlIGRlIHJlZmVyw6huY2lhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NQorbXNnaWQgImNvcHkgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiY29waWEgdW5hIGJyYW5jYSwgZW5jYXJhIHF1ZSBlbCBkZXN0w60gZXhpc3RlaXhpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NgorbXNnaWQgImxpc3QgYnJhbmNoIG5hbWVzIgorbXNnc3RyICJsbGlzdGEgZWxzIG5vbXMgZGUgYnJhbmNhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NworIywgZnV6enkKK21zZ2lkICJzaG93IGN1cnJlbnQgYnJhbmNoIG5hbWUiCittc2dzdHIgIk5vIGhpIGhhIGNhcCBicmFuY2EgYWN0dWFsLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDgKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAiY3JlYSBlbCByZWdpc3RyZSBkZSByZWZlcsOobmNpYSBkZSBsYSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUwCittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgImVkaXRhIGxhIGRlc2NyaXBjacOzIGRlIGxhIGJyYW5jYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTEKK21zZ2lkICJmb3JjZSBjcmVhdGlvbiwgbW92ZS9yZW5hbWUsIGRlbGV0aW9uIgorbXNnc3RyICJmb3LDp2EgY3JlYWNpw7MsIG1vdmltZW50L2NhbnZpIGRlIG5vbSwgc3VwcmVzc2nDsyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTIKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAiaW1wcmltZWl4IG5vbcOpcyBsZXMgYnJhbnF1ZXMgcXVlIHMnaGFuIGZ1c2lvbmF0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAiaW1wcmltZWl4IG5vbcOpcyBsZXMgYnJhbnF1ZXMgcXVlIG5vIHMnaGFuIGZ1c2lvbmF0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NAorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAibGxpc3RhIGxlcyBicmFucXVlcyBlbiBjb2x1bW5lcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTcgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MiBidWlsdGluL25vdGVzLmM6NDE1CisjOiBidWlsdGluL25vdGVzLmM6NDE4IGJ1aWx0aW4vbm90ZXMuYzo1ODEgYnVpbHRpbi9ub3Rlcy5jOjU4NAorIzogYnVpbHRpbi90YWcuYzo0MzMKK21zZ2lkICJvYmplY3QiCittc2dzdHIgIm9iamVjdGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU4Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyBicmFucXVlcyBkZSBsJ29iamVjdGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYwIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDggYnVpbHRpbi90YWcuYzo0NDAKK21zZ2lkICJzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgYXJlIGNhc2UgaW5zZW5zaXRpdmUiCittc2dzdHIgImwnb3JkZW5hY2nDsyBpIGVsIGZpbHRyYXRnZSBkaXN0aW5nZWl4ZW4gZW50cmUgbWFqw7pzY3VsZXMgaSBtaW7DunNjdWxlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NjEgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOCBidWlsdGluL3RhZy5jOjQzOAorIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IgorbXNnc3RyICJmb3JtYXQgYSB1c2FyIGVuIGxhIHNvcnRpZGEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Njg0IGJ1aWx0aW4vY2xvbmUuYzo3ODQKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiSEVBRCBubyB0cm9iYXQgc290YSByZWZzL2hlYWRzISIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MDgKK21zZ2lkICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIGkgLS12ZXJib3NlIHPDs24gaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MjMgYnVpbHRpbi9icmFuY2guYzo3NzcgYnVpbHRpbi9icmFuY2guYzo3ODYKK21zZ2lkICJicmFuY2ggbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiY2FsIGVsIG5vbSBkZSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzUzCittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiTm8gZXMgcG90IGRvbmFyIGRlc2NyaXBjacOzIGEgdW4gSEVBRCBzZXBhcmF0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OAorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICJubyBlcyBwb3QgZWRpdGFyIGxhIGRlc2NyaXBjacOzIGRlIG3DqXMgZCd1bmEgYnJhbmNhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIKK21zZ3N0ciAiRW5jYXJhIG5vIGhpIGhhIGNhcCBjb21pc3Npw7MgZW4gbGEgYnJhbmNhIMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIKK21zZ3N0ciAiTm8gaGkgaGEgY2FwIGJyYW5jYSBhbWIgbm9tIMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzgzCittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgZm9yIGEgY29weSBvcGVyYXRpb24iCittc2dzdHIgImhpIGhhIG1hc3NhIGJyYW5xdWVzIHBlciBhIHVuYSBvcGVyYWNpw7MgZGUgY8OycGlhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5MgorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgYSByZW5hbWUgb3BlcmF0aW9uIgorbXNnc3RyICJoaSBoYSBtYXNzYSBhcmd1bWVudHMgcGVyIGEgdW5hIG9wZXJhY2nDsyByZW1vdGEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzk3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHNldCBuZXcgdXBzdHJlYW0iCittc2dzdHIgImhpIGhhIG1hc3NhIGFyZ3VtZW50cyBwZXIgYSBlc3RhYmxpciB1bmEgbm92YSBmb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyJubyBzJ2hhIHBvZ3V0IGVzdGFibGlyIGxhIGZvbnQgZGUgSEVBRCBjb20gYSAlcyBxdWFuIG5vIGFzc2VueWFsYSBjYXAgYnJhbmNhLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDQgYnVpbHRpbi9icmFuY2guYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAibm8gZXhpc3RlaXggbGEgYnJhbmNhIMKrJXPCuyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImxhIGJyYW5jYSDCqyVzwrsgbm8gZXhpc3RlaXgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHVuc2V0IHVwc3RyZWFtIgorbXNnc3RyICJoaSBoYSBtYXNzYSBhcmd1bWVudHMgcGVyIGEgZGVzYXNzaWduYXIgbGEgZm9udCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjUKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisibm8gcydoYSBwb2d1dCBkZXNhc3NpZ25hciBsYSBmb250IGRlIEhFQUQgcGVycXXDqCBubyBhc3NlbnlhbGEgY2FwIGJyYW5jYS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTGEgYnJhbmNhIMKrJXPCuyBubyB0w6kgaW5mb3JtYWNpw7MgZGUgZm9udCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSAtYSwgYW5kIC1yLCBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgdGFrZSBhIGJyYW5jaCBuYW1lLlxuIgorIkRpZCB5b3UgbWVhbiB0byB1c2U6IC1hfC1yIC0tbGlzdCA8cGF0dGVybj4/IgorbXNnc3RyICIiCisibGVzIG9wY2lvbnMgLWEgaSAtciBhICdnaXQgYnJhbmNoJyBubyB0ZW5lbiBzZW50aXQgYW1iIHVuIG5vbSBkZSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ1Cittc2dpZCAiIgorInRoZSAnLS1zZXQtdXBzdHJlYW0nIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBQbGVhc2UgdXNlICctLXRyYWNrJyBvciAiCisiJy0tc2V0LXVwc3RyZWFtLXRvJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIkwnb3BjacOzIC0tc2V0LXVwc3RyZWFtIGphIG5vIGVzdMOgIHN1cG9ydGFkYS4gVXNldSBlbiBjb21wdGVzIC0tdHJhY2sgbyAtLXNldC0iCisidXBzdHJlYW0tdG8uIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE1IGJ1aWx0aW4vYnVuZGxlLmM6MjMKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxvcHRpb25zPl0gPGZpbGU+IDxnaXQtcmV2LWxpc3QgYXJncz4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs8b3BjaW9ucz5dIDxub20+IDx1cmw+IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2IGJ1aWx0aW4vYnVuZGxlLmM6MjgKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzxvcHRpb25zPl0gPGZpbGU+IgorbXNnc3RyICJnaXQgcm0gWzxvcGNpb25zPl0gWy0tXSA8Zml0eGVyPi4uLiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNyBidWlsdGluL2J1bmRsZS5jOjMzCittc2dpZCAiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE4IGJ1aWx0aW4vYnVuZGxlLmM6MzgKK21zZ2lkICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIyOAorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJubyBtb3N0cmlzIGwnaW5kaWNhZG9yIGRlIHByb2dyw6lzIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzMAorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgIm1vc3RyYSBsJ2luZGljYWRvciBkZSBwcm9ncsOpcyIKKworIzogYnVpbHRpbi9idW5kbGUuYzo3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzIKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIKK21zZ3N0ciAibW9zdHJhIGwnaW5kaWNhZG9yIGRlIHByb2dyw6lzIGR1cmFudCBsYSBmYXNlIGQnZXNjcmlwdHVyYSBkJ29iamVjdGVzIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjczIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNQorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAic2ltaWxhciBhIC0tYWxsLXByb2dyZXNzIHF1YW4gbCdpbmRpY2Fkb3IgZGUgcHJvZ3LDqXMgZXMgbW9zdHJhIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjkzCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAiQ2FsIHVuIGRpcMOyc2l0IHBlciBhIGZlciB1biBmYXJjZWxsLiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxMDQKKyMsIGZ1enp5Cittc2dpZCAiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiCittc2dzdHIgIm5vIG1vc3RyaXMgbGVzIGV0aXF1ZXRlcyBwZWxhZGVzIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBva2F5XG4iCittc2dzdHIgIiVzIGVzdMOgIGLDqVxuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2MAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAiQ2FsIHVuIGRpcMOyc2l0IHBlciBhIGRlc2ZlciB1biBmYXJjZWxsLiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNjggYnVpbHRpbi9yZW1vdGUuYzoxNjA5Cittc2dpZCAiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIKK21zZ3N0ciAic2lndWVzIGRldGFsbGF0OyBzJ2hhIGRlIGNvbMK3bG9jYXIgYWJhbnMgZCd1biBzdWJvcmRyZSIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIlN1Ym9yZHJlIGRlc2NvbmVndWRhOiAlcyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NQorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8dHlwZT4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxwYXRoPl0gPG9iamVjdD4iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8dGlwdXM+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycyBbLS1wYXRoPTxjYW3DrT5dKSA8b2JqZWN0ZT4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTYKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjE3CisjLCBmdXp6eQorbXNnaWQgIm9ubHkgb25lIGJhdGNoIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIgorbXNnc3RyICJDYXAgbm9tIGRlIGJyYW5jYSBlc3BlY2lmaWNhdCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNQorbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiPHRpcHVzPiBwb3Qgc2VyIHVuIGRlOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNgorbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgIm1vc3RyYSBlbCB0aXB1cyBkZSBsJ29iamVjdGUiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzcKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICJtb3N0cmEgbGEgbWlkYSBkZSBsJ29iamVjdGUiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzkKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgInN1cnQgYW1iIHplcm8gcXVhbiBubyBoaSBoYSBlcnJvciIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MAorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJpbXByaW1laXggYmVsbGFtZW50IGVsIGNvbnRpbmd1dCBkZSBsJ29iamVjdGUiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDIKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiZW4gZWxzIG9iamVjdGVzIGRlIGJsb2IsIGV4ZWN1dGEgdGV4dGNvbnYgZW4gZWwgY29udGluZ3V0IGRlIGwnb2JqZWN0ZSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NAorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biBmaWx0ZXJzIG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgIiIKKyJlbiBlbHMgb2JqZWN0ZXMgZGUgYmxvYiwgZXhlY3V0YSBlbHMgZmlsdHJlcyBlbiBlbCBjb250aW5ndXQgZGUgbCdvYmplY3RlIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ1IGdpdC1zdWJtb2R1bGUuc2g6OTkyCittc2dpZCAiYmxvYiIKK21zZ3N0ciAiYmxvYiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NgorbXNnaWQgInVzZSBhIHNwZWNpZmljIHBhdGggZm9yIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorbXNnc3RyICJ1c2EgdW4gY2Ftw60gZXNwZWPDrWZpYyBwZXIgYSAtLXRleHRjb252Ly0tZmlsdGVycyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0OAorbXNnaWQgImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIKK21zZ3N0ciAicGVybWV0IHF1ZSAtcyBpIC10IGZ1bmNpb25pbiBhbWIgb2JqZWN0ZXMgdHJlbmNhdHMvbWFsbWVzb3MiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDkKK21zZ2lkICJidWZmZXIgLS1iYXRjaCBvdXRwdXQiCittc2dzdHIgInBvc2EgbGEgc29ydGlkYSBkZSAtLWJhdGNoIGVuIG1lbcOycmlhIGludGVybcOoZGlhIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjUxCittc2dpZCAic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisibW9zdHJhIGxhIGluZm9ybWFjacOzIGkgY29udGluZ3V0IGRlbHMgb2JqZWN0ZXMgcmVidXRzIGRlIGwnZW50cmFkYSBlc3TDoG5kYXJkIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU1Cittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJtb3N0cmEgaW5mb3JtYWNpw7Mgc29icmUgZWxzIG9iamVjdGVzIHJlYnV0cyBkZSBsJ2VudHJhZGEgZXN0w6BuZGFyZCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1OQorbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAiIgorInNlZ3VlaXggZWxzIGVubGxhw6dvcyBzaW1iw7JsaWNzIGVuIGwnYXJicmUgKHMndXNhIGFtYiAtLWJhdGNoIG8gLS1iYXRjaC1jaGVjaykiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjEKK21zZ2lkICJzaG93IGFsbCBvYmplY3RzIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrIgorbXNnc3RyICJtb3N0cmEgdG90cyBlbHMgb2JqZWN0ZXMgYW1iIC0tYmF0Y2ggbyAtLWJhdGNoLWNoZWNrIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYzCittc2dpZCAiZG8gbm90IG9yZGVyIC0tYmF0Y2gtYWxsLW9iamVjdHMgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjEzCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXRyaWJ1dD4uLi5dIFstLV0gPG5vbS1kZS1jYW3DrT4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjE0Cittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0cmlidXQ+Li4uXSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjEKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgImluZm9ybWEgZGUgdG90cyBlbHMgYXRyaWJ1dHMgZXN0YWJsZXJ0cyBlbiBlbCBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIyCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgInVzYSAuZ2l0YXR0cmlidXRlcyBub23DqXMgZGVzIGRlIGwnw61uZGV4IgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI1IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDIKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGxlZ2VpeCBlbHMgbm9tcyBkZSBmaXR4ZXIgZGUgc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjI1IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjcKK21zZ2lkICJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiYWNhYmEgZWxzIHJlZ2lzdHJlcyBkJ2VudHJhZGEgaSBkZSBzb3J0aWRhIGFtYiB1biBjYXLDoGN0ZXIgTlVMIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDM1IGJ1aWx0aW4vZ2MuYzo1MzcKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDYKK21zZ2lkICJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIm9tZXQgZWxzIGluZm9ybWVzIGRlIHByb2dyw6lzIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI5Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgaW5wdXQgcGF0aHMiCittc2dzdHIgIm1vc3RyYSBlbHMgY2FtaW5zIGQnZW50cmFkYSBxdWUgbm8gY29pbmNpZGVpeGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjMxCittc2dpZCAiaWdub3JlIGluZGV4IHdoZW4gY2hlY2tpbmciCittc2dzdHIgImlnbm9yYSBsJ8OtbmRleCBlbiBjb21wcm92YXIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYwCittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAibm8gZXMgcG9kZW4gZXNwZWNpZmljYXIgbm9tcyBkZSBjYW3DrSBhbWIgLS1zdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICIteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiLXogbm9tw6lzIHTDqSBzZW50aXQgYW1iIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY1Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgImNhcCBjYW3DrSBlc3BlY2lmaWNhdCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjkKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAiLS1xdWlldCBub23DqXMgw6lzIHbDoGxpZCBhbWIgdW4gc29sIG5vbSBkZSBjYW3DrSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzEKK21zZ2lkICJjYW5ub3QgaGF2ZSBib3RoIC0tcXVpZXQgYW5kIC0tdmVyYm9zZSIKK21zZ3N0ciAibm8gZXMgcG9kZW4gZXNwZWNpZmljYXIgLS1xdWlldCBpIC0tdmVyYm9zZSBhbGhvcmEiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc0Cittc2dpZCAiLS1ub24tbWF0Y2hpbmcgaXMgb25seSB2YWxpZCB3aXRoIC0tdmVyYm9zZSIKK21zZ3N0ciAiLS1ub24tbWF0Y2hpbmcgw6lzIHbDoGxpZCBub23DqXMgYW1iIC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OQorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcGNpb25zPl0gPGNvbnRhY3RlPi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MTQKK21zZ2lkICJhbHNvIHJlYWQgY29udGFjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAidGFtYsOpIGxsZWdlaXggZWxzIGNvbnRhY3RlcyBkZXMgZGUgc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb250YWN0OiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgZWwgY29udGFjdGU6ICVzIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0OAorbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAibm8gaGkgaGEgY29udGFjdGVzIGVzcGVjaWZpY2F0cyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjEzMQorbXNnaWQgImdpdCBjaGVja291dC1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcGNpb25zPl0gWy0tXSBbPGZpdHhlcj4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTQ4Cittc2dpZCAic3RhZ2Ugc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMyBvciBhbGwiCittc2dzdHIgIsKrc3RhZ2XCuyBoYSBkZSBzZXIgZW50cmUgMSBpIDMgbyBhbGwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjQKK21zZ2lkICJjaGVjayBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiYWdhZmEgdG90cyBlbHMgZml0eGVycyBlbiBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NQorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBleGlzdGluZyBmaWxlcyIKK21zZ3N0ciAiZm9yw6dhIGxhIHNvYnJlZXNjcmlwdHVyYSBkZSBmaXR4ZXJzIGV4aXN0ZW50cyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NworbXNnaWQgIm5vIHdhcm5pbmcgZm9yIGV4aXN0aW5nIGZpbGVzIGFuZCBmaWxlcyBub3QgaW4gaW5kZXgiCittc2dzdHIgIiIKKyJjYXAgYWR2ZXJ0w6huY2lhIHBlciBhIGZpdHhlcnMgZXhpc3RlbnRzIGkgZml0eGVycyBxdWUgbm8gc2lndWluIGEgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjkKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgIm5vIGFnYWZpcyBmaXR4ZXJzIG5vdXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzEKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAiYWN0dWFsaXR6YSBsYSBpbmZvcm1hY2nDsyBkJ2VzdGFkw61zdGlxdWVzIGVuIGVsIGZpdHhlciBkJ8OtbmRleCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGxlZ2VpeCBsYSBsbGlzdGEgZGUgY2FtaW5zIGRlcyBkZSBsJ2VudHJhZGEgZXN0w6BuZGFyZCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NworbXNnaWQgIndyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcyIKK21zZ3N0ciAiZXNjcml1IGVsIGNvbnRpbmd1dCBhIGZpdHhlcnMgdGVtcG9yYWxzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc4IGJ1aWx0aW4vY29sdW1uLmM6MzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg4CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4MgorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY3OQorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAiY2FkZW5hIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc5Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAiZW4gY3JlYXIgZml0eGVycywgYW50ZXBvc2EgPGNhZGVuYT4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODEKK21zZ2lkICJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIKK21zZ3N0ciAiY29waWEgZWxzIGZpdHhlcnMgZGVzIGRlIMKrc3RhZ2XCuyBhbWIgbm9tIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzEKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBbPG9wY2lvbnM+XSA8YnJhbmNhPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMyCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxvcGNpb25zPl0gWzxicmFuY2E+XSAtLSA8Zml0eGVyPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3CisjLCBmdXp6eQorbXNnaWQgImdpdCBzd2l0Y2ggWzxvcHRpb25zPl0gWzxicmFuY2g+XSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8b3BjaW9ucz5dIDxicmFuY2E+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IHJlc3RvcmUgWzxvcHRpb25zPl0gWy0tc291cmNlPTxicmFuY2g+XSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBjaGVja291dCBbPG9wY2lvbnM+XSBbPGJyYW5jYT5dIC0tIDxmaXR4ZXI+Li4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc1IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgImVsIGNhbcOtIMKrJXPCuyBubyB0w6kgbGEgbm9zdHJhIHZlcnNpw7MiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcgYnVpbHRpbi9jaGVja291dC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJlbCBjYW3DrSDCqyVzwrsgbm8gdMOpIGxhIHNldmEgdmVyc2nDsyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJlbCBjYW3DrSDCqyVzwrsgbm8gdMOpIHRvdGVzIGxlcyB2ZXJzaW9ucyBuZWNlc3PDoHJpZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJlbCBjYW3DrSDCqyVzwrsgbm8gdMOpIGxlcyB2ZXJzaW9ucyBuZWNlc3PDoHJpZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgImNhbcOtIMKrJXPCuzogbm8gZXMgcG90IGZ1c2lvbmFyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgbWVyZ2UgcmVzdWx0IGZvciAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFmZWdpciBlbCByZXN1bHRhdCBkZSBmdXNpw7MgcGVyIGEgwqslc8K7IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdHMiCittc2dzdHJbMF0gImV0aXF1ZXRhIGRlIGZ1c2nDsyBpbmNvcnJlY3RhIGVuIGxhIGNvbWlzc2nDsyDCqyVzwrsiCittc2dzdHJbMV0gImV0aXF1ZXRhIGRlIGZ1c2nDsyBpbmNvcnJlY3RhIGVuIGxhIGNvbWlzc2nDsyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tICVzIgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gJXMiCittc2dzdHJbMF0gImFjdHVhbGl0emF0ICVkIGNhbcOtXG4iCittc2dzdHJbMV0gImFjdHVhbGl0emF0cyAlZCBjYW1pbnNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkICVkIHBhdGggZnJvbSB0aGUgaW5kZXgiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSB0aGUgaW5kZXgiCittc2dzdHJbMF0gIlMnaGEgYWN0dWFsaXR6YXQgdW4gY2Ftw60gZGVzIGRlIGwnw61uZGV4IgorbXNnc3RyWzFdICJTJ2hhIGFjdHVhbGl0emF0ICVkIGNhbWlucyBkZXMgZGUgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTIgYnVpbHRpbi9jaGVja291dC5jOjQxNSBidWlsdGluL2NoZWNrb3V0LmM6NDE4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiwqslc8K7IG5vIGVzIHBvdCB1c2FyIGFtYiBhY3R1YWxpdHphY2nDsyBkZSBjYW1pbnMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjUgYnVpbHRpbi9jaGVja291dC5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIsKrJXPCuyBubyBlcyBwb3QgdXNhciBhbWIgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIgorbXNnc3RyICIiCisiTm8gZXMgcG9kZW4gYWN0dWFsaXR6YXIgZWxzIGNhbWlucyBpIGNhbnZpYXIgYSBsYSBicmFuY2Egwqslc8K7IGEgbGEgdmVnYWRhLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZWl0aGVyICclcycgb3IgJyVzJyBpcyBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtdXN0IGJlIHVzZWQgd2hlbiAnJXMnIGlzIG5vdCBzcGVjaWZpZWQiCittc2dzdHIgIsKrJXPCuyBubyBlcyBwb3QgdXNhciBhbWIgwqslc8K7IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQ1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiclcycgb3IgJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIlczogJXMgbm8gZXMgcG90IHVzYXIgYW1iICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTA5IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICJlbCBjYW3DrSDCqyVzwrsgZXN0w6Agc2Vuc2UgZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2ODIgYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo4MgorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICJoZXUgZGUgcHJpbWVyIHJlc29sZHJlIGVsIHZvc3RyZSDDrW5kZXggYWN0dWFsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgY29udGludWUgd2l0aCBzdGFnZWQgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIGZpbGVzOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuIG5vdCBkbyByZWZsb2cgZm9yICclcyc6ICVzXG4iCittc2dzdHIgIk5vIGVzIHBvdCBmZXIgcmVmbG9nIHBlciBhIMKrJXPCuzogJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg3NworbXNnaWQgIkhFQUQgaXMgbm93IGF0IgorbXNnc3RyICJIRUFEIGFyYSDDqXMgYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4MSBidWlsdGluL2Nsb25lLmM6NzE2Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBIRUFEIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFjdHVhbGl0emFyIEhFQUQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiUmVzdGFibGVpeCBsYSBicmFuY2Egwqslc8K7XG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSBvbiAnJXMnXG4iCittc2dzdHIgIkphIGVuIMKrJXPCu1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGFuZCByZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJTJ2hhIGNhbnZpYXQgaSByZXN0YWJsZXJ0IGEgbGEgYnJhbmNhIMKrJXPCu1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk0IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlMnaGEgY2FudmlhdCBhIGxhIGJyYW5jYSBub3ZhIMKrJXPCu1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlMnaGEgY2FudmlhdCBhIGxhIGJyYW5jYSDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk0NworIywgYy1mb3JtYXQKK21zZ2lkICIgLi4uIGFuZCAlZCBtb3JlLlxuIgorbXNnc3RyICIgLi4uIGkgJWQgbcOpcy5cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorIkFkdmVydMOobmNpYTogZXN0ZXUgZGVpeGFudCBlbnJlcmUgJWQgY29taXNzacOzLCBub1xuIgorInZpbmN1bGFkYSBhIGNhcCBkZSBsZXMgdm9zdHJlcyBicmFucXVlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzFdICIiCisiQWR2ZXJ0w6huY2lhOiBlc3RldSBkZWl4YW50IGVucmVyZSAlZCBjb21pc3Npb25zLCBub1xuIgorInZpbmN1bGFkZXMgYSBjYXAgZGUgbGVzIHZvc3RyZXMgYnJhbnF1ZXM6XG4iCisiXG4iCisiJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCBpdCBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnaWRfcGx1cmFsICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCB0aGVtIGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dzdHJbMF0gIiIKKyJTaSBsYSB2b2xldSBtYW50ZW5pciBjcmVhbnQgdW5hIGJyYW5jYSBub3ZhLCBhcmEgcG90IHNlciB1biBib24gbW9tZW50XG4iCisicGVyIGEgZmVyLWhvIGFtYjpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bm9tLWRlLWJyYW5jYS1ub3ZhPiAlc1xuIgorIlxuIgorbXNnc3RyWzFdICIiCisiU2kgbGVzIHZvbGV1IG1hbnRlbmlyIGNyZWFudCB1bmEgYnJhbmNhIG5vdmEsIGFyYSBwb3Qgc2VyIHVuIGJvbiBtb21lbnRcbiIKKyJwZXIgYSBmZXItaG8gYW1iOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxub20tZGUtYnJhbmNhLW5vdmE+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA3Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAiZXJyb3IgaW50ZXJuIGVuIGVsIHBhc3NlaWcgcGVyIHJldmlzaW9ucyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTEKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAiTGEgcG9zaWNpw7MgZGUgSEVBRCBhbnRlcmlvciBlcmEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDUxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjg2Cittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiU291IGVuIHVuYSBicmFuY2EgcXVlIGVuY2FyYSBoYSBkZSBuw6lpeGVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE3OAorIywgZnV6enkKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQiCittc2dzdHIgInMnZXNwZXJhdmEgbm9tw6lzIHVuYSByZWZlcsOobmNpYSwgcydoYW4gZG9uYXQgJWQuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIKK21zZ3N0ciAicydlc3BlcmF2YSBub23DqXMgdW5hIHJlZmVyw6huY2lhLCBzJ2hhbiBkb25hdCAlZC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvdWxkIGJlIGJvdGggYSBsb2NhbCBmaWxlIGFuZCBhIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJQbGVhc2UgdXNlIC0tIChhbmQgb3B0aW9uYWxseSAtLW5vLWd1ZXNzKSB0byBkaXNhbWJpZ3VhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNDUgYnVpbHRpbi93b3JrdHJlZS5jOjI5MCBidWlsdGluL3dvcmt0cmVlLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAicmVmZXLDqG5jaWEgbm8gdsOgbGlkYTogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjU4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjIyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAibGEgcmVmZXLDqG5jaWEgbm8gw6lzIHVuIGFyYnJlOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgdGFnICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgbCdvYmplY3RlICVzIMKrJXPCuyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgcmVtb3RlIGJyYW5jaCAnJXMnIgorbXNnc3RyICIiCisiTGEgYnJhbmNhIMKrJXPCuyBlc3TDoCBjb25maWd1cmFkYSBwZXIgYSBzZWd1aXIgbGEgYnJhbmNhIHJlbW90YSDCqyVzwrsgZGUgwqslc8K7LiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDggYnVpbHRpbi9jaGVja291dC5jOjEzMTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgJyVzJyIKK21zZ3N0ciAicydlc3BlcmF2YSBzaGFsbG93L3Vuc2hhbGxvdywgcydoYSByZWJ1dCAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgY29tbWl0ICclcyciCittc2dzdHIgIkxhIHZvc3RyYSBicmFuY2EgZXN0w6AgYWwgZGlhIGFtYiDCqyVzwrsuXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzI3Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIG1lcmdpbmdcbiIKKyJDb25zaWRlciBcImdpdCBtZXJnZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzEKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uXG4iCisiQ29uc2lkZXIgXCJnaXQgYW0gLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM1Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJlYmFzaW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgcmViYXNlIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzOQorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSBjaGVycnktcGlja2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM0MworbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSByZXZlcnRpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZXZlcnQgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQ3CisjLCBmdXp6eQorbXNnaWQgInlvdSBhcmUgc3dpdGNoaW5nIGJyYW5jaCB3aGlsZSBiaXNlY3RpbmciCittc2dzdHIgIkFjdHVhbG1lbnQgZXN0ZXUgYmlzZWNhbnQuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1NAorbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICJlbHMgY2FtaW5zIG5vIGVzIHBvZGVuIHVzYXIgYW1iIGNhbnZpIGRlIGJyYW5jYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNTcgYnVpbHRpbi9jaGVja291dC5jOjEzNjEgYnVpbHRpbi9jaGVja291dC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiwqslc8K7IG5vIGVzIHBvdCB1c2FyIGFtYiBjYW52aSBkZSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY5IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzcyIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzc1CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4MCBidWlsdGluL2NoZWNrb3V0LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIKK21zZ3N0ciAiwqslc8K7IG5vIGVzIHBvdCB1c2FyIGFtYiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCB0YWtlIDxzdGFydC1wb2ludD4iCittc2dzdHIgIsKrJXPCuyBubyBlcyBwb3QgdXNhciBhbWIgYWN0dWFsaXR6YWNpw7MgZGUgY2FtaW5zIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIKK21zZ3N0ciAiTm8gZXMgcG90IGNhbnZpYXIgbGEgYnJhbmNhIGEgbGEgbm8gY29taXNzacOzIMKrJXPCuyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzOTcKKyMsIGZ1enp5Cittc2dpZCAibWlzc2luZyBicmFuY2ggb3IgY29tbWl0IGFyZ3VtZW50IgorbXNnc3RyICJNYW5jYSBlbCBub20gZGUgYnJhbmNhOyBwcm92ZXUgLWIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDM5IGJ1aWx0aW4vY2xvbmUuYzo5MSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUyCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMyBidWlsdGluL2ZldGNoLmM6MTY3IGJ1aWx0aW4vbWVyZ2UuYzoyODUKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI3IGJ1aWx0aW4vcHVsbC5jOjEzOCBidWlsdGluL3B1c2guYzo1NjMKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc0Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJmb3LDp2EgbCdpbmZvcm1lIGRlIHByb2dyw6lzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ0MAorbXNnaWQgInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJyZWFsaXR6YSB1bmEgZnVzacOzIGRlIDMgdmllcyBhbWIgbGEgYnJhbmNhIG5vdmEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQxIGJ1aWx0aW4vbG9nLmM6MTY5MCBwYXJzZS1vcHRpb25zLmg6MzIyCittc2dpZCAic3R5bGUiCittc2dzdHIgImVzdGlsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ0MgorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgImVzdGlsIGRlIGNvbmZsaWN0ZSAoZnVzacOzIG8gZGlmZjMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1NCBidWlsdGluL3dvcmt0cmVlLmM6NTAzCittc2dpZCAiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICJzZXBhcmEgSEVBRCBhIGxhIGNvbWlzc2nDsyBhbm9tZW5hZGEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU1Cittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgImVzdGFibGVpeCBsYSBpbmZvcm1hY2nDsyBkZSBmb250IGRlIGxhIGJyYW5jYSBub3ZhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1NworbXNnaWQgImZvcmNlIGNoZWNrb3V0ICh0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMpIgorbXNnc3RyICJhZ2FmYSBhIGxhIGZvcsOnYSAoZGVzY2FydGEgcXVhbHNldm9sIG1vZGlmaWNhY2nDsyBsb2NhbCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU5Cittc2dpZCAibmV3LWJyYW5jaCIKK21zZ3N0ciAiYnJhbmNhLW5vdmEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU5Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICJicmFuY2Egw7JyZmVuYSBub3ZhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ2MSBidWlsdGluL21lcmdlLmM6Mjg4Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICJhY3R1YWxpdHphIGVscyBmaXR4ZXJzIGlnbm9yYXRzIChwZXIgZGVmZWN0ZSkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDY0Cittc2dpZCAiZG8gbm90IGNoZWNrIGlmIGFub3RoZXIgd29ya3RyZWUgaXMgaG9sZGluZyB0aGUgZ2l2ZW4gcmVmIgorbXNnc3RyICJubyBjb21wcm92aXMgc2kgYWx0cmUgYXJicmUgZGUgdHJlYmFsbCB0w6kgbGEgcmVmZXLDqG5jaWEgZG9uYWRhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ3NworbXNnaWQgImNoZWNrb3V0IG91ciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiYWdhZmEgbGEgdmVyc2nDsyBub3N0cmEgZGVscyBmaXR4ZXJzIHNlbnNlIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MAorbXNnaWQgImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICJhZ2FmYSBsYSB2ZXJzacOzIHNldmEgZGVscyBmaXR4ZXJzIHNlbnNlIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4NAorbXNnaWQgImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIKK21zZ3N0ciAibm8gbGltaXRpcyBsZXMgZXNwZWNpZmljYWNpb25zIGRlIGNhbcOtIG5vbcOpcyBhIGVudHJhZGVzIGRpc3BlcnNlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MzcKK21zZ2lkICItYiwgLUIgYW5kIC0tb3JwaGFuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1iLCAtQiBpIC0tb3JwaGFuIHPDs24gbcO6dHVhbWVudCBleGNsb2VudHMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTQwCisjLCBmdXp6eQorbXNnaWQgIi1wIGFuZCAtLW92ZXJsYXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLW4gaSAtayBzw7NuIG3DunR1YW1lbnQgZXhjbG9lbnRzLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NzcKK21zZ2lkICItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIi0tdHJhY2sgbmVjZXNzaXRhIHVuIG5vbSBkZSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTgyCisjLCBmdXp6eQorbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAiTWFuY2EgZWwgbm9tIGRlIGJyYW5jYTsgcHJvdmV1IC1iIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgcmVzb2xkcmUgwqslc8K7IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYzMQorbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICJlc3BlY2lmaWNhY2nDsyBkZSBjYW3DrSBubyB2w6BsaWRhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYzOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIGNvbW1pdCBhbmQgYSBicmFuY2ggJyVzJyBjYW5ub3QgYmUgY3JlYXRlZCBmcm9tIGl0IgorbXNnc3RyICIiCisiwqslc8K7IG5vIMOpcyB1bmEgY29taXNzacOzIGkgbGEgYnJhbmNhIMKrJXPCuyBubyBlcyBwb3QgY3JlYXIgYSBwYXJ0aXIgZCdhcXVlc3RhICIKKyJjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBubyBhY2NlcHRhIHVuIHBhcsOgbWV0cmUgZGUgY2Ftw60gwqslc8K7IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY1MQorIywgZnV6enkKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWRldGFjaCIKK21zZ3N0ciAiLS1maXJzdC1wYXJlbnQgw6lzIGluY29tcGF0aWJsZSBhbWIgLS1iaXNlY3QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjU0IGJ1aWx0aW4vcmVzZXQuYzozMjQKKyMsIGZ1enp5Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1wYXRjaCIKK21zZ3N0ciAiLS1maXJzdC1wYXJlbnQgw6lzIGluY29tcGF0aWJsZSBhbWIgLS1iaXNlY3QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjY1Cittc2dpZCAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgaSAtLW1lcmdlIHPDs24gaW5jb21wYXRpYmxlcyBlblxuIgorImFnYWZhciBkZSBsJ8OtbmRleC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjcwCisjLCBmdXp6eQorbXNnaWQgInlvdSBtdXN0IHNwZWNpZnkgcGF0aChzKSB0byByZXN0b3JlIgorbXNnc3RyICJIZXUgZCdlc3BlY2lmaWNhciB1biBkaXJlY3RvcmkuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBtYXRjaGVkIG1vcmUgdGhhbiBvbmUgcmVtb3RlIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJXZSBmb3VuZCAlZCByZW1vdGVzIHdpdGggYSByZWZlcmVuY2UgdGhhdCBtYXRjaGVkLiBTbyB3ZSBmZWxsIGJhY2tcbiIKKyJvbiB0cnlpbmcgdG8gcmVzb2x2ZSB0aGUgYXJndW1lbnQgYXMgYSBwYXRoLCBidXQgZmFpbGVkIHRoZXJlIHRvbyFcbiIKKyJcbiIKKyJJZiB5b3UgbWVhbnQgdG8gY2hlY2sgb3V0IGEgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBvbiwgZS5nLiAnb3JpZ2luJyxcbiIKKyJ5b3UgY2FuIGRvIHNvIGJ5IGZ1bGx5IHF1YWxpZnlpbmcgdGhlIG5hbWUgd2l0aCB0aGUgLS10cmFjayBvcHRpb246XG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtZT5cbiIKKyJcbiIKKyJJZiB5b3UnZCBsaWtlIHRvIGFsd2F5cyBoYXZlIGNoZWNrb3V0cyBvZiBhbiBhbWJpZ3VvdXMgPG5hbWU+IHByZWZlclxuIgorIm9uZSByZW1vdGUsIGUuZy4gdGhlICdvcmlnaW4nIHJlbW90ZSwgY29uc2lkZXIgc2V0dGluZ1xuIgorImNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIGluIHlvdXIgY29uZmlnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcxNCBidWlsdGluL2NoZWNrb3V0LmM6MTcxNiBidWlsdGluL2NoZWNrb3V0LmM6MTc2NQorIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjcgYnVpbHRpbi9jbG9uZS5jOjEyMSBidWlsdGluL3JlbW90ZS5jOjE2OQorIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEgYnVpbHRpbi93b3JrdHJlZS5jOjQ5OSBidWlsdGluL3dvcmt0cmVlLmM6NTAxCittc2dpZCAiYnJhbmNoIgorbXNnc3RyICJicmFuY2EiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE1Cittc2dpZCAiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giCittc2dzdHIgImNyZWEgaSBhZ2FmYSB1bmEgYnJhbmNhIG5vdmEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAiY3JlYS9yZXN0YWJsZWl4IGkgYWdhZmEgdW5hIGJyYW5jYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTgKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICJjcmVhIHVuIHJlZ2lzdHJlIGRlIHJlZmVyw6huY2lhIHBlciBhIGxhIGJyYW5jYSBub3ZhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyMAorIywgZnV6enkKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBjaGVja291dCA8bm8tc3VjaC1icmFuY2g+JyAoZGVmYXVsdCkiCittc2dzdHIgImR1YnRhICdnaXQgY2hlY2tvdXQgPGNhcC1icmFuY2EtYWl4w60+JyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjEKKyMsIGZ1enp5Cittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSAoZGVmYXVsdCkiCittc2dzdHIgInBvZGEgbGVzIHJlZmVyw6huY2llcyBzb2x0ZXMgKHBlciBkZWZlY3RlKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjYKKyMsIGZ1enp5Cittc2dpZCAiY3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoIgorbXNnc3RyICJjcmVhIGkgYWdhZmEgdW5hIGJyYW5jYSBub3ZhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc2OAorIywgZnV6enkKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIHN3aXRjaCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiY3JlYS9yZXN0YWJsZWl4IGkgYWdhZmEgdW5hIGJyYW5jYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzAKKyMsIGZ1enp5Cittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgc3dpdGNoIDxuby1zdWNoLWJyYW5jaD4nIgorbXNnc3RyICJkdWJ0YSAnZ2l0IGNoZWNrb3V0IDxjYXAtYnJhbmNhLWFpeMOtPiciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcyCisjLCBmdXp6eQorbXNnaWQgInRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAiYWdhZmEgYSBsYSBmb3LDp2EgKGRlc2NhcnRhIHF1YWxzZXZvbCBtb2RpZmljYWNpw7MgbG9jYWwpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgwNAorIywgZnV6enkKK21zZ2lkICJ3aGljaCB0cmVlLWlzaCB0byBjaGVja291dCBmcm9tIgorbXNnc3RyICJsbGVnZWl4IGwnb2JqZWN0ZSBkZXMgZGUgc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA2CisjLCBmdXp6eQorbXNnaWQgInJlc3RvcmUgdGhlIGluZGV4IgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MDgKKyMsIGZ1enp5Cittc2dpZCAicmVzdG9yZSB0aGUgd29ya2luZyB0cmVlIChkZWZhdWx0KSIKK21zZ3N0ciAiTW9zdHJhIGwnZXN0YXQgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMAorIywgZnV6enkKK21zZ2lkICJpZ25vcmUgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAicydlc3TDoCBpZ25vcmFudCAlcyBubyBmdXNpb25hdFxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMQorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjI4Cittc2dpZCAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXRyw7M+XSBbLXggfCAtWF0gWy0tXSA8Y2FtaW5zPi4uLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIlMnZXN0w6AgZWxpbWluYW50ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMworIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiRWxpbWluYXJpYSAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJTJ2VzdMOgIG9tZXRlbnQgZWwgZGlww7JzaXQgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJPbWV0cmlhIGVsIGRpcMOyc2l0ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVsaW1pbmFyICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsc3RhdCAlc1xuIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGZlciBzdGF0IGEgJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZ1xuIgorbXNnc3RyICIiCisiQWp1ZGE6XG4iCisiMSAgICAgICAgICAtIHNlbGVjY2lvbmEgdW4gw610ZW0gbnVtZXJhdFxuIgorImZvbyAgICAgICAgLSBzZWxlY2Npb25hIHVuIMOtdGVtIGJhc2F0IGVuIHVuIHByZWZpeCDDum5pY1xuIgorIiAgICAgICAgICAgLSAoYnVpdCkgbm8gc2VsZWNjaW9uaXMgcmVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbVxuIgorIjMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtc1xuIgorIjItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyItLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zXG4iCisiKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXNcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nXG4iCittc2dzdHIgIiIKKyJBanVkYTpcbiIKKyIxICAgICAgICAgIC0gc2VsZWNjaW9uYSB1biBzb2wgw610ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWNjaW9uYSB1biByYW5nIGQnw610ZW1zXG4iCisiMi0zLDYtOSAgICAtIHNlbGVjY2lvbmEgbcO6bHRpcGxlcyByYW5nc1xuIgorImZvbyAgICAgICAgLSBzZWxlY2Npb25hIHVuIMOtdGVtIGJhc2F0IGVuIHVuIHByZWZpeCDDum5pY1xuIgorIi0uLi4gICAgICAgLSBkZXNzZWxlY2Npb25hIGVscyDDrXRlbXMgc2VsZWNjaW9uYXRzXG4iCisiKiAgICAgICAgICAtIHRyaWEgdG90cyBlbHMgw610ZW1zXG4iCisiICAgICAgICAgICAtIChidWl0KSBmaW5hbGl0emEgbGEgc2VsZWNjacOzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTc1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT9cbiIKK21zZ3N0ciAiUGVyZMOzICglcyk/XG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIgorbXNnc3RyICJJbnRyb2R1w691IGVscyBwYXRyb25zIGEgaWdub3Jhcj4+ICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBDYW5ub3QgZmluZCBpdGVtcyBtYXRjaGVkIGJ5OiAlcyIKK21zZ3N0ciAiQURWRVJUw4hOQ0lBOiBObyBlcyBwb2RlbiB0cm9iYXIgw610ZW1zIHF1ZSBjb2luY2lkZWl4aW4gYW1iOiAlcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcyMQorbXNnaWQgIlNlbGVjdCBpdGVtcyB0byBkZWxldGUiCittc2dzdHIgIlNlbGVjY2lvbmEgZWxzIMOtdGVtcyBhIHN1cHJpbWlyIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGtlZXAgW3kvTl0gYXMgaXMKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZlICVzIFt5L05dPyAiCittc2dzdHIgIlZvbGV1IGVsaW1pbmFyICVzIFt5L05dPyAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3OTUKK21zZ2lkICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKK21zZ3N0ciAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBjb21lbsOnYSBhIG5ldGVqYXJcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gZXhjbG91IMOtdGVtcyBkZSBzdXByZXNzacOzXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIHNlbGVjY2lvbmEgw610ZW1zIGEgc3VwcmltaXIgcGVyIG7Dum1lcm9zXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm1hIGNhZGEgc3VwcmVzc2nDsyAoY29tIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gZGVpeGEgZGUgbmV0ZWphclxuIgorImhlbHAgICAgICAgICAgICAgICAgLSBhcXVlc3RhIHBhbnRhbGxhXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGFqdWRhIGRlIHNlbGVjY2nDsyBkZSBsJ2F2w61zIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODMxCittc2dpZCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbToiCittc2dpZF9wbHVyYWwgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW1zOiIKK21zZ3N0clswXSAiRWxpbWluYXJpYSBsJ8OtdGVtIHNlZ8O8ZW50OiIKK21zZ3N0clsxXSAiRWxpbWluYXJpYSBlbHMgw610ZW1zIHNlZ8O8ZW50czoiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDcKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAiTm8gaGkgaGEgbcOpcyBmaXR4ZXJzIGEgbmV0ZWphcjsgcydlc3TDoCBzb3J0aW50LiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwOQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICJubyBpbXByaW1laXhpcyBlbHMgbm9tcyBkZWxzIGZpdHhlcnMgZWxpbWluYXRzIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTExCittc2dpZCAiZm9yY2UiCittc2dzdHIgImZvcsOnYSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMgorbXNnaWQgImludGVyYWN0aXZlIGNsZWFuaW5nIgorbXNnc3RyICJuZXRlamEgaW50ZXJhY3RpdmEiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTQKK21zZ2lkICJyZW1vdmUgd2hvbGUgZGlyZWN0b3JpZXMiCittc2dzdHIgImVsaW1pbmEgZGlyZWN0b3JpcyBzZW5jZXJzIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDggYnVpbHRpbi9kZXNjcmliZS5jOjU1MAorIzogYnVpbHRpbi9ncmVwLmM6OTAxIGJ1aWx0aW4vbG9nLmM6MTc3IGJ1aWx0aW4vbG9nLmM6MTc5CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjQgYnVpbHRpbi9uYW1lLXJldi5jOjQ2NgorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgInBhdHLDsyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNgorbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICJhZmVnaXUgPHBhdHLDsz4gcGVyIGEgaWdub3JhciBsZXMgcmVnbGVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE3Cittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAiZWxpbWluYSBlbHMgZml0eGVycyBpZ25vcmF0cywgdGFtYsOpIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE5Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiZWxpbWluYSBub23DqXMgZWxzIGZpdHhlcnMgaWdub3JhdHMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzcKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IGkgLVggbm8gZXMgcG9kZW4gdXNhciBqdW50cyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0MQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBlc3TDoCBlc3RhYmxlcnRhIGVuIGNlcnQgaSBuaSAtaSwgLW4gbmkgLWYgcydoYW4gaW5kaWNhdDsgIgorInJlZnVzYW50IG5ldGVqYXIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDQKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKyJyZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSDDqXMgcGVyIGRlZmVjdGUgY2VydCBpIG5pIC1pLCAtbiBuaSAtZiBzJ2hhbiBpbmRpY2F0OyAiCisicmVmdXNhbnQgbmV0ZWphciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ1Cittc2dpZCAiZ2l0IGNsb25lIFs8b3B0aW9ucz5dIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgImdpdCBjbG9uZSBbPG9wY2lvbnM+XSBbLS1dIDxkaXDDsnNpdD4gWzxkaXJlY3Rvcmk+XSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkzCittc2dpZCAiZG9uJ3QgY3JlYXRlIGEgY2hlY2tvdXQiCittc2dzdHIgIm5vIGZhY2lzIGNhcCBhZ2FmYW1lbnQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NCBidWlsdGluL2Nsb25lLmM6OTYgYnVpbHRpbi9pbml0LWRiLmM6NDg5Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJjcmVhIHVuIGRpcMOyc2l0IG51IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgKK21zZ2lkICJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIKK21zZ3N0ciAiY3JlYSB1biBkaXDDsnNpdCBtaXJhbGwgKGltcGxpY2EgYmFyZSkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDAKK21zZ2lkICJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAicGVyIGEgY2xvbmFyIGRlcyBkJ3VuIGRpcMOyc2l0IGxvY2FsIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyCittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgIm5vIHVzaXMgZW5sbGHDp29zIGR1cnMgbG9jYWxzLCBzZW1wcmUgY29waWEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY29uZmlndXJhIGNvbSBhIGRpcMOyc2l0IGNvbXBhcnRpdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgInBhdGhzcGVjIgorbXNnc3RyICJlc3BlY2lmaWNhY2nDsyBkZSBjYW3DrSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgImluaWNpYWxpdHphIGVscyBzdWJtw7JkdWxzIGVuIGVsIGNsb24iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIm5vbWJyZSBkZSBzdWJtw7JkdWxzIGNsb25hdHMgZW4gcGFyYWzCt2xlbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMSBidWlsdGluL2luaXQtZGIuYzo0ODYKK21zZ2lkICJ0ZW1wbGF0ZS1kaXJlY3RvcnkiCittc2dzdHIgImRpcmVjdG9yaS1kZS1wbGFudGlsbGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTIgYnVpbHRpbi9pbml0LWRiLmM6NDg3Cittc2dpZCAiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIKK21zZ3N0ciAiZGlyZWN0b3JpIGRlcyBkZWwgcXVhbCBzJ3VzYXJhbiBsZXMgcGxhbnRpbGxlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNCBidWlsdGluL2Nsb25lLmM6MTE2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzkyCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4NQorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICJkaXDDsnNpdCBkZSByZWZlcsOobmNpYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODcKK21zZ2lkICJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIgorbXNnc3RyICJ1c2EgLS1yZWZlcmVuY2Ugbm9tw6lzIGVuIGNsb25hciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOSBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ2CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTQgYnVpbHRpbi9yZXBhY2suYzozMjcKK21zZ2lkICJuYW1lIgorbXNnc3RyICJub20iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjAKK21zZ2lkICJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iCittc2dzdHIgInVzYSA8bm9tPiBlbiBsbG9jIGRlICdvcmlnaW4nIHBlciBhIHNlZ3VpciBsYSBmb250IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIyCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAiYWdhZmEgPGJyYW5jYT4gZW4gbGxvYyBkZSBsYSBIRUFEIGRlbCByZW1vdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNAorbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgImNhbcOtIGEgZ2l0LXVwbG9hZC1wYWNrIGVuIGVsIHJlbW90IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI1IGJ1aWx0aW4vZmV0Y2guYzoxNjggYnVpbHRpbi9ncmVwLmM6ODQwCisjOiBidWlsdGluL3B1bGwuYzoyMjcKK21zZ2lkICJkZXB0aCIKK21zZ3N0ciAicHJvZnVuZGl0YXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjYKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoYXQgZGVwdGgiCittc2dzdHIgImNyZWEgdW4gY2xvbiBzdXBlcmZpY2lhbCBkZSB0YWwgcHJvZnVuZGl0YXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjcgYnVpbHRpbi9mZXRjaC5jOjE3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODMKK21zZ2lkICJ0aW1lIgorbXNnc3RyICJob3JhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgImNyZWEgdW4gY2xvbiBzdXBlcmZpY2lhbCBkZXMgZCd1bmEgaG9yYSBlc3BlY8OtZmljYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOSBidWlsdGluL2ZldGNoLmM6MTcyIGJ1aWx0aW4vZmV0Y2guYzoxOTUKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0NQorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICJyZXZpc2nDsyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMCBidWlsdGluL2ZldGNoLmM6MTczCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSwgZXhjbHVkaW5nIHJldiIKK21zZ3N0ciAiYXByb2Z1bmRlaXggbGEgaGlzdMOycmlhIGQndW4gY2xvbiBzdXBlcmZpY2lhbCwgZXhjbG9lbnQgdW5hIHJldmlzacOzIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMyCittc2dpZCAiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIgorbXNnc3RyICJjbG9uYSBub23DqXMgdW5hIGJyYW5jYSwgSEVBRCBvIC0tYnJhbmNoIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM0Cittc2dpZCAiZG9uJ3QgY2xvbmUgYW55IHRhZ3MsIGFuZCBtYWtlIGxhdGVyIGZldGNoZXMgbm90IHRvIGZvbGxvdyB0aGVtIgorbXNnc3RyICIiCisibm8gY2xvbmV1IGNhcCBldGlxdWV0YSwgaSBmZXUgcXVlIGVscyDCq2ZldGNowrsgc2Vnw7xlbnRzIG5vIGVscyBzZWd1ZWl4ZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzYKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCBiZSBzaGFsbG93IgorbXNnc3RyICJxdWFsc2V2b2wgc3VibcOyZHVsIGNsb25hdCBzZXLDoCBzdXBlcmZpY2lhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNyBidWlsdGluL2luaXQtZGIuYzo0OTUKK21zZ2lkICJnaXRkaXIiCittc2dzdHIgImRpcmVjdG9yaSBkZSBnaXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzggYnVpbHRpbi9pbml0LWRiLmM6NDk2Cittc2dpZCAic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAic2VwYXJhIGVsIGRpcmVjdG9yaSBkZSBnaXQgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM5Cittc2dpZCAia2V5PXZhbHVlIgorbXNnc3RyICJjbGF1PXZhbG9yIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQwCittc2dpZCAic2V0IGNvbmZpZyBpbnNpZGUgdGhlIG5ldyByZXBvc2l0b3J5IgorbXNnc3RyICJlc3RhYmxlaXggbGEgY29uZmlndXJhY2nDsyBkaW5zIGRlbCBkaXDDsnNpdCBub3UiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJzZXJ2ZXItc3BlY2lmaWMiCittc2dzdHIgImVzcGVjw61maWMgYWwgc2Vydmlkb3IiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzMKK21zZ2lkICJvcHRpb24gdG8gdHJhbnNtaXQiCittc2dzdHIgIm9wY2nDsyBhIHRyYW5zbWV0cmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDMgYnVpbHRpbi9mZXRjaC5jOjE5MSBidWlsdGluL3B1bGwuYzoyNDAKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3NAorbXNnaWQgInVzZSBJUHY0IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICJ1c2Egbm9tw6lzIGFkcmVjZXMgSVB2NCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0NSBidWlsdGluL2ZldGNoLmM6MTkzIGJ1aWx0aW4vcHVsbC5jOjI0MworIzogYnVpbHRpbi9wdXNoLmM6NTc2Cittc2dpZCAidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgInVzYSBub23DqXMgYWRyZWNlcyBJUHY2IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ5CisjLCBmdXp6eQorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIHVzZSB0aGVpciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJxdWFsc2V2b2wgc3VibcOyZHVsIGNsb25hdCBzZXLDoCBzdXBlcmZpY2lhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE1MQorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgdG8gaW5jbHVkZSBvbmx5IGZpbGVzIGF0IHJvb3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI4NworbXNnaWQgIiIKKyJObyBkaXJlY3RvcnkgbmFtZSBjb3VsZCBiZSBndWVzc2VkLlxuIgorIlBsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKyJObyBzJ2hhIHBvZ3V0IGVuZGV2aW5hciBjYXAgbm9tIGRlIGRpcmVjdG9yaS5cbiIKKyJFc3BlY2lmaXF1ZXUgdW4gZGlyZWN0b3JpIGVuIGxhIGzDrW5pYSBkJ29yZHJlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZvOiBDb3VsZCBub3QgYWRkIGFsdGVybmF0ZSBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiaW5mbzogTm8gcydoYSBwb2d1dCBhZmVnaXIgdW4gYWx0ZXJuYXRpdSBwZXIgYSDCqyVzwrs6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzIGV4aXN0ZWl4IGkgbm8gw6lzIGRpcmVjdG9yaSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXJ0IGl0ZXJhdG9yIG92ZXIgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBhIMKrJXPCuyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjcmVhciBsJ2VubGxhw6cgwqslc8K7IgorCisjOiBidWlsdGluL2Nsb25lLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjb3BpYXIgZWwgZml0eGVyIGEgwqslc8K7IgorCisjOiBidWlsdGluL2Nsb25lLmM6NDY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gaXRlcmF0ZSBvdmVyICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZWxpbWluYXIgwqslc8K7IgorCisjOiBidWlsdGluL2Nsb25lLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgImZldC5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjUwOAorIywgZnV6enkKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB3aXRoICdnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEIDovJ1xuIgorbXNnc3RyICIiCisiRWwgY2xvbmF0Z2UgaGEgdGluZ3V0IMOoeGl0LCBwZXLDsiBsJ2FnYWZhbWVudCBoYVxuIgorImZhbGxhdC4gUG9kZXUgaW5zcGVjY2lvbmFyIHF1w6ggcydoYSBhZ2FmYXQgYW1iXG4iCisiJ2dpdCBzdGF0dXMnIGkgdG9ybmFyIGEgaW50ZW50YXIgbCdhZ2FmYW1lbnQgYW1iXG4iCisiJ2dpdCBjaGVja291dCAtZiBIRUFEJ1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHRyb2JhciBsYSBicmFuY2EgcmVtb3RhICVzIHBlciBhIGNsb25hci4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhY3R1YWxpdHphciAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc1MgorIywgZnV6enkKK21zZ2lkICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZmluYWxpdHphciDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NzUKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgIiIKKyJsYSBIRUFEIHJlbW90IGVzIHJlZmVyZWl4IGEgdW5hIHJlZmVyw6huY2lhIHF1ZSBubyBleGlzdGVpeDsgbm8gcydoYSBwb2d1dCAiCisiYWdhZmFyLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODA2Cittc2dpZCAidW5hYmxlIHRvIGNoZWNrb3V0IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhZ2FmYXIgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODU2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHBhcmFtZXRlcnMgdG8gY29uZmlnIGZpbGUiCittc2dzdHIgIm5vIHMnaGFuIHBvZ3V0IGVzY3JpdXJlIGVscyBwYXLDoG1ldHJlcyBhbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxOQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgIm5vIGVzIHBvdCByZWVtcGFxdWV0YXIgcGVyIGEgbmV0ZWphciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyMQorbXNnaWQgImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAibm8gZXMgcG90IGRlc2VubGxhw6dhciBlbCBmaXR4ZXIgZCdhbHRlcm5hdGl2ZXMgdGVtcG9yYWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NTkgYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTQ4Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzLiIKK21zZ3N0ciAiSGkgaGEgbWFzc2EgcGFyw6BtZXRyZXMuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTYzCittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICJIZXUgZCdlc3BlY2lmaWNhciB1biBkaXDDsnNpdCBwZXIgYSBjbG9uYXIuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAibGVzIG9wY2lvbnMgLS1iYXJlIGkgLS1vcmlnaW4gJXMgc8OzbiBpbmNvbXBhdGlibGVzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3OQorbXNnaWQgIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICItLWJhcmUgaSAtLXNlcGFyYXRlLWdpdC1kaXIgc8OzbiBpbmNvbXBhdGlibGVzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImVsIGRpcMOyc2l0IMKrJXPCuyBubyBleGlzdGVpeCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5OCBidWlsdGluL2ZldGNoLmM6MTc4NworIywgYy1mb3JtYXQKK21zZ2lkICJkZXB0aCAlcyBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgImxhIHByb2Z1bmRpdGF0ICVzIG5vIMOpcyB1biBub21icmUgcG9zaXRpdSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAiZWwgY2Ftw60gZGVzdMOtIMKrJXPCuyBqYSBleGlzdGVpeCBpIG5vIMOpcyB1biBkaXJlY3RvcmkgYnVpdC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAibCdhcmJyZSBkZSB0cmViYWxsIMKrJXPCuyBqYSBleGlzdGVpeC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDMzIGJ1aWx0aW4vY2xvbmUuYzoxMDU0IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNzEKKyM6IGJ1aWx0aW4vbG9nLmM6MTg2NiBidWlsdGluL3dvcmt0cmVlLmM6MzAyIGJ1aWx0aW4vd29ya3RyZWUuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgIm5vIHMnaGFuIHBvZ3V0IGNyZWFyIGVscyBkaXJlY3RvcmlzIGluaWNpYWxzIGRlIMKrJXPCuyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZWwgZGlyZWN0b3JpIGQnYXJicmUgZGUgdHJlYmFsbCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICJTJ2VzdMOgIGNsb25hbnQgYWwgZGlww7JzaXQgbnUgwqslc8K7Li4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgIlMnZXN0w6AgY2xvbmFudCBhIMKrJXPCuy4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA4NAorbXNnaWQgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGJvdGggLS1yZWZlcmVuY2UgYW5kIC0tcmVmZXJlbmNlLWlmLSIKKyJhYmxlIgorbXNnc3RyICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgbm8gw6lzIGNvbXBhdGlibGUgYW1iIGFtYmTDs3MgLS1yZWZlcmVuY2UgaSAtLXJlZmVyZW5jZS1pZi0iCisiYWJsZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNDgKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1kZXB0aCBzJ2lnbm9yYSBlbiBlbHMgY2xvbnMgbG9jYWxzOyB1c2V1IGZpbGU6Ly8gZW4gbGxvYyBkJ2FpeMOyLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTAKK21zZ2lkICItLXNoYWxsb3ctc2luY2UgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisiLS1zaGFsbG93LXNpbmNlIHMnaWdub3JhIGVuIGVscyBjbG9ucyBsb2NhbHM7IHVzZXUgZmlsZTovLyBlbiBsbG9jIGQnYWl4w7IuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1MgorbXNnaWQgIi0tc2hhbGxvdy1leGNsdWRlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tc2hhbGxvdy1leGNsdWRlIHMnaWdub3JhIGVuIGVscyBjbG9ucyBsb2NhbHM7IHVzZXUgZmlsZTovLyBlbiBsbG9jIGQnYWl4w7IuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1NAorbXNnaWQgIi0tZmlsdGVyIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1maWx0ZXIgcydpZ25vcmEgZW4gZWxzIGNsb25zIGxvY2FsczsgdXNldSBmaWxlOi8vIGVuIGxsb2MgZCdhaXjDsi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU3Cittc2dpZCAic291cmNlIHJlcG9zaXRvcnkgaXMgc2hhbGxvdywgaWdub3JpbmcgLS1sb2NhbCIKK21zZ3N0ciAiZWwgZGlww7JzaXQgZm9udCDDqXMgc3VwZXJmaWNpYWwsIHMnZXN0w6AgaWdub3JhbnQgLS1sb2NhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjIKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwgcydpZ25vcmEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjM3IGJ1aWx0aW4vY2xvbmUuYzoxMjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW90ZSBicmFuY2ggJXMgbm90IGZvdW5kIGluIHVwc3RyZWFtICVzIgorbXNnc3RyICJMYSBicmFuY2EgcmVtb3RhICVzIG5vIGVzIHRyb2JhIGVuIGxhIGZvbnQgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQ4Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiU2VtYmxhIHF1ZSBoZXUgY2xvbmF0IHVuIGRpcMOyc2l0IGJ1aXQuIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjEwCittc2dpZCAiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbHVtbiBbPG9wY2lvbnM+XSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNworbXNnaWQgImxvb2t1cCBjb25maWcgdmFycyIKK21zZ3N0ciAiY2VyY2EgbGVzIHZhcmlhYmxlcyBkZSBjb25maWd1cmFjacOzIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI4IGJ1aWx0aW4vY29sdW1uLmM6MjkKK21zZ2lkICJsYXlvdXQgdG8gdXNlIgorbXNnc3RyICJkaXNwb3NpY2nDsyBhIHVzYXIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJNYXhpbXVtIHdpZHRoIgorbXNnc3RyICJBbXBsYWRhIG3DoHhpbWEiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzEKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIGxlZnQgYm9yZGVyIgorbXNnc3RyICJFc3BhaSBkJ2VuY29peGluYWRhIGVuIGVsIG1hcmdlIGVzcXVlcnJlIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgIkVzcGFpIGQnZW5jb2l4aW5hZGEgZW4gZWwgbWFyZ2UgZHJldCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMworbXNnaWQgIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIgorbXNnc3RyICJFc3BhaSBkJ2VuY29peGluYWRhIGVudHJlIGNvbHVtbmVzIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICItLWNvbW1hbmQgaGEgZGUgc2VyIGVsIHByaW1lciBwYXLDoG1ldHJlIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTgKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPHBhcmVudD4pLi4uXSBbLVNbPGtleWlkPl1dIFsoLW0gPG1lc3NhZ2U+KS4uLl0gWygtRiAiCisiPGZpbGU+KS4uLl0gPHRyZWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzozMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHBhcmVudCAlcyBpZ25vcmVkIgorbXNnc3RyICJzdXByaW1laXggbGVzIHJlZmVyw6huY2llcyByZWVtcGxhw6dhZGVzIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6NTYgYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzNiBidWlsdGluL2xvZy5jOjUyNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIm5vIMOpcyB1biBub20gZCdvYmplY3RlIHbDoGxpZDogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIG9icmlyIMKrJXPCuyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgImdpdCB3cml0ZS10cmVlIGhhIGZhbGxhdCBlbiBlc2NyaXVyZSB1biBhcmJyZSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBjbG9zZSAnJXMnIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBoYSBmYWxsYXQgZW4gZXNjcml1cmUgdW4gYXJicmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTEKKyMsIGZ1enp5Cittc2dpZCAicGFyZW50IgorbXNnc3RyICJwYXJlIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTEyCisjLCBmdXp6eQorbXNnaWQgImlkIG9mIGEgcGFyZW50IGNvbW1pdCBvYmplY3QiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXNjcml1cmUgbCdvYmplY3RlIGRlIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNCBidWlsdGluL2NvbW1pdC5jOjE0OTYgYnVpbHRpbi9tZXJnZS5jOjI3MAorIzogYnVpbHRpbi9ub3Rlcy5jOjQwOSBidWlsdGluL25vdGVzLmM6NTc1IGJ1aWx0aW4vc3Rhc2guYzoxNDY5CisjOiBidWlsdGluL3RhZy5jOjQxMgorbXNnaWQgIm1lc3NhZ2UiCittc2dzdHIgIm1pc3NhdGdlIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE1IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NgorbXNnaWQgImNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJtaXNzYXRnZSBkZSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTgKKyMsIGZ1enp5Cittc2dpZCAicmVhZCBjb21taXQgbG9nIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsbGVnaXUgZWwgbWlzc2F0Z2UgZGVzIGQndW4gZml0eGVyIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIxIGJ1aWx0aW4vY29tbWl0LmM6MTUwOCBidWlsdGluL21lcmdlLmM6Mjg3CisjOiBidWlsdGluL3B1bGwuYzoxOTUgYnVpbHRpbi9yZXZlcnQuYzoxMTgKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgInNpZ25hIGxhIGNvbWlzc2nDsyBhbWIgR1BHIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTMzCisjLCBmdXp6eQorbXNnaWQgIm11c3QgZ2l2ZSBleGFjdGx5IG9uZSB0cmVlIgorbXNnc3RyICJDYWwgZXhhY3RhbWVudCB1biByYW5nLiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjE0MAorIywgZnV6enkKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBoYSBmYWxsYXQgZW4gZXNjcml1cmUgdW4gYXJicmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDEKK21zZ2lkICJnaXQgY29tbWl0IFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGNvbW1pdCBbPG9wY2lvbnM+XSBbLS1dIDxlc3BlY2lmaWNhY2nDsy1kZS1jYW3DrT4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDYKK21zZ2lkICJnaXQgc3RhdHVzIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHN0YXR1cyBbPG9wY2lvbnM+XSBbLS1dIDxlc3BlY2lmaWNhY2nDsy1kZS1jYW3DrT4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTEKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKyJIZXUgZGVtYW5hdCBlc21lbmFyIGxhIGNvbWlzc2nDsyBtw6lzIHJlY2VudCwgcGVyw7IgZmVyIGFpeMOyIGxhXG4iCisiZGVpeGFyaWEgYnVpZGEuIFBvZGV1IHJlcGV0aXIgbGEgdm9zdHJhIG9yZHJlIGFtYiAtLWFsbG93LWVtcHR5LCBvXG4iCisicG9kZXUgZWxpbWluYXIgbGEgY29taXNzacOzIHBlciBjb21wbGV0IGFtYiBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU2Cittc2dpZCAiIgorIlRoZSBwcmV2aW91cyBjaGVycnktcGljayBpcyBub3cgZW1wdHksIHBvc3NpYmx5IGR1ZSB0byBjb25mbGljdCByZXNvbHV0aW9uLlxuIgorIklmIHlvdSB3aXNoIHRvIGNvbW1pdCBpdCBhbnl3YXksIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCittc2dzdHIgIiIKKyJFbCDCq2NoZXJyeSBwaWNrwrsgcHJldmkgamEgZXN0w6AgYnVpdCwgcG9zc2libGVtZW50IGEgY2F1c2EgZGUgcmVzb2x1Y2nDsyBkZSAiCisiY29uZmxpY3RlLlxuIgorIlNpIGVsIHZvbGV1IGNvbWV0cmUgZGUgdG90ZXMgbWFuZXJlcywgdXNldTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjMKKyMsIGZ1enp5Cittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgY2hlcnJ5LXBpY2sgLS1za2lwJ1xuIgorbXNnc3RyICJEJ2FsdHJhIG1hbmVyYSwgdXNldSDCq2dpdCByZXNldMK7XG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjYKK21zZ2lkICIiCisiYW5kIHRoZW4gdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorInRvIHJlc3VtZSBjaGVycnktcGlja2luZyB0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMTUKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZGVzZW1wYXF1ZXRhciBsJ29iamVjdGUgZCdhcmJyZSBIRUFEIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorIywgZnV6enkKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi1hIG5vIHTDqSBzZW50aXQgYW1iIGNhbWlucy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY0Cittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICItLWluY2x1ZGUvLS1vbmx5IG5vIHTDqSBzZW50aXQgc2Vuc2UgY2Ftw60uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM3NgorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIHVuIMOtbmRleCB0ZW1wb3JhbCIKKworIzogYnVpbHRpbi9jb21taXQuYzozODIKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICJsJ2FmZWdpbWVudCBpbnRlcmFjdGl1IGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTYKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhY3R1YWxpdHphciBsJ8OtbmRleCB0ZW1wb3JhbCIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTgKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhY3R1YWxpdHphciBsJ2FyYnJlIHByaW5jaXBhbCBkZSBtZW3DsnJpYSBjYXUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDIzIGJ1aWx0aW4vY29tbWl0LmM6NDQ2IGJ1aWx0aW4vY29tbWl0LmM6NDkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGVsIGZpdHhlciBuZXdfaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc1Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICJubyBlcyBwb3QgZmVyIHVuYSBjb21pc3Npw7MgcGFyY2lhbCBkdXJhbnQgdW5hIGZ1c2nDsy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc3Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICJubyBlcyBwb3QgZmVyIHVuYSBjb21pc3Npw7MgcGFyY2lhbCBkdXJhbnQgdW4gwqtjaGVycnkgcGlja8K7LiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0ODUKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTA0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIHVuIGZpdHhlciBkJ8OtbmRleCB0ZW1wb3JhbCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgbGFja3MgYXV0aG9yIGhlYWRlciIKK21zZ3N0ciAiYSBsYSBjb21pc3Npw7Mgwqslc8K7IGxpIG1hbmNhIGxhIGNhcMOnYWxlcmEgZCdhdXRvciIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAibGEgY29taXNzacOzIMKrJXPCuyB0w6kgdW5hIGzDrW5pYSBkJ2F1dG9yIG1hbCBmb3JtYWRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYyMworbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgInBhcsOgbWV0cmUgLS1hdXRob3IgbWFsIGZvcm1hdCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NzYKK21zZ2lkICIiCisidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKyJpbiB0aGUgY3VycmVudCBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorIm5vIGVzIHBvdCBzZWxlY2Npb25hciB1biBjYXLDoGN0ZXIgZGUgY29tZW50YXJpIHF1ZVxuIgorIm5vIHNpZ3VpIHVzYXQgZW4gZWwgbWlzc2F0Z2UgZGUgY29taXNzacOzIGFjdHVhbCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MTQgYnVpbHRpbi9jb21taXQuYzo3NDcgYnVpbHRpbi9jb21taXQuYzoxMDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHRyb2JhciBsYSBjb21pc3Npw7MgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzI2IGJ1aWx0aW4vc2hvcnRsb2cuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIKK21zZ3N0ciAiKHMnZXN0w6AgbGxlZ2ludCBlbCBtaXNzYXRnZSBkZSByZWdpc3RyZSBkZXMgZGUgbCdlbnRyYWRhIGVzdMOgbmRhcmQpXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzI4Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIHJlZ2lzdHJlIGRlcyBkZSBsJ2VudHJhZGEgZXN0w6BuZGFyZCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgZml0eGVyIGRlIHJlZ2lzdHJlIMKrJXPCuyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NjMgYnVpbHRpbi9jb21taXQuYzo3NzkKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc3MAorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzMAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgbGEgcGxhbnRpbGxhIGRlIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiU2VtYmxhIHF1ZSBwb2RldSBlc3RhciBjb21ldGVudCB1bmEgZnVzacOzLlxuIgorIlNpIGFpeMOyIG5vIMOpcyBjb3JyZWN0ZSwgZWxpbWluZXUgZWwgZml0eGVyXG4iCisiXHQlc1xuIgorImkgaW50ZW50ZXUtaG8gZGUgbm91LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTZW1ibGEgcXVlIHBvZGV1IGVzdGFyIGNvbWV0ZW50IHVuIMKrY2hlcnJ5IHBpY2vCuy5cbiIKKyJTaSBhaXjDsiBubyDDqXMgY29ycmVjdGUsIGVsaW1pbmV1IGVsIGZpdHhlclxuIgorIlx0JXNcbiIKKyJpIGludGVudGV1LWhvIGRlIG5vdS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkludHJvZHXDr3UgZWwgbWlzc2F0Z2UgZGUgY29taXNzacOzIGRlbHMgdm9zdHJlcyBjYW52aXMuXG4iCisiUydpZ25vcmFyYW4gbGVzIGzDrW5pZXMgcXVlIGNvbWVuY2luIGFtYiDCqyVjwrssIGkgdW4gbWlzc2F0Z2UgZGVcbiIKKyJjb21pc3Npw7MgYnVpdCBhdm9ydGEgbGEgY29taXNzacOzLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkludHJvZHXDr3UgZWwgbWlzc2F0Z2UgZGUgY29taXNzacOzIGRlbHMgdm9zdHJlcyBjYW52aXMuXG4iCisiRXMgbWFudGluZHJhbiBsZXMgbMOtbmllcyBxdWUgY29tZW5jaW4gYW1iIMKrJWPCuzsgcG9kZXUgZWxpbWluYXItbGVzICIKKyJ2b3NhbHRyZXNcbiIKKyJtYXRlaXhvcyBzaSB2b2xldS4gVW4gbWlzc2F0Z2UgYnVpdCBhdm9ydGEgbGEgY29taXNzacOzLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlc0F1dGhvcjogICAgJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzQXV0b3I6ICAgICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlc0RhdGU6ICAgICAgJXMiCittc2dzdHIgIiVzRGF0YTogICAgICAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc0NvbWl0ZW50OiAlLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MjUKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiTm8gZXMgcG90IGxsZWdpciBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9jb21taXQuYzo5OTIKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiRXJyb3IgZW4gY29uc3RydWlyIGFyYnJlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDA2IGJ1aWx0aW4vdGFnLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAiRXNwZWNpZmlxdWV1IGVsIG1pc3NhdGdlIHVzYW50IGwnb3BjacOzIC1tIG8gbCdvcGNpw7MgLUYuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIiIKKyItLWF1dGhvciDCqyVzwrsgbm8gw6lzIMKrTm9tIDxhZHJlw6dhLWVsZWN0csOybmljYT7CuyBpIG5vIGNvaW5jaWRlaXggYW1iXG4iCisiY2FwIGF1dG9yIGV4aXN0ZW50IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpZ25vcmVkIG1vZGUgJyVzJyIKK21zZ3N0ciAibW9kZSBpZ25vcmF0IG5vIHbDoGxpZCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA4MiBidWlsdGluL2NvbW1pdC5jOjEzMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICJNb2RlIGRlIGZpdHhlcnMgbm8gc2VndWl0cyBubyB2w6BsaWQgwqslc8K7IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMjIKK21zZ2lkICItLWxvbmcgYW5kIC16IGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbG9uZyBpIC16IHPDs24gaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTY2Cittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiVXNhciBhbWJkw7NzIC0tcmVzZXQtYXV0aG9yIGkgLS1hdXRob3Igbm8gdMOpIHNlbnRpdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTc1Cittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgIk5vIHRlbml1IHJlcyBhIGVzbWVuYXIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzgKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJFc3RldSBlbm1pZyBkJ3VuYSBmdXNpw7MgLS0gbm8gZXMgcG90IGVzbWVuYXIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODAKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJFc3RldSBlbm1pZyBkJ3VuIMKrY2hlcnJ5IHBpY2vCuyAtLSBubyBlcyBwb3QgZXNtZW5hci4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MworbXNnaWQgIk9wdGlvbnMgLS1zcXVhc2ggYW5kIC0tZml4dXAgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIkxlcyBvcGNpb25zIC0tc3F1YXNoIGkgLS1maXh1cCBubyBlcyBwb2RlbiB1c2FyIGp1bnRlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTkzCittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIk5vbcOpcyB1biBkZSAtYy8tQy8tRi8tLWZpeHVwIGVzIHBvdCB1c2FyLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk1Cittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLiIKK21zZ3N0ciAiTCdvcGNpw7MgLW0gbm8gZXMgcG90IGNvbWJpbmFyIGFtYiAtYy8tQy8tRi8uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDMKK21zZ2lkICItLXJlc2V0LWF1dGhvciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggLUMsIC1jIG9yIC0tYW1lbmQuIgorbXNnc3RyICItLXJlc2V0LWF1dGhvciBub23DqXMgZXMgcG90IHVzYXIgYW1iIC1DLCAtYyBvIC0tYW1lbmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjAKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIk5vbcOpcyB1biBkZSAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBlcyBwb3QgdXNhci4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicGF0aHMgJyVzIC4uLicgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItYSBubyB0w6kgc2VudGl0IGFtYiBjYW1pbnMuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTcgYnVpbHRpbi9jb21taXQuYzoxNTE5Cittc2dpZCAic2hvdyBzdGF0dXMgY29uY2lzZWx5IgorbXNnc3RyICJtb3N0cmEgbCdlc3RhdCBjb25jaXNhbWVudCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU5IGJ1aWx0aW4vY29tbWl0LmM6MTUyMQorbXNnaWQgInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIgorbXNnc3RyICJtb3N0cmEgbGEgaW5mb3JtYWNpw7MgZGUgYnJhbmNhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjEKK21zZ2lkICJzaG93IHN0YXNoIGluZm9ybWF0aW9uIgorbXNnc3RyICJtb3N0cmEgbGEgaW5mb3JtYWNpw7MgZGUgwqtzdGFzaMK7IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjMgYnVpbHRpbi9jb21taXQuYzoxNTIzCittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY1Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAidmVyc2nDsyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY1IGJ1aWx0aW4vY29tbWl0LmM6MTUyNSBidWlsdGluL3B1c2guYzo1NDkKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NTAKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAic29ydGlkYSBsbGVnaWJsZSBwZXIgbcOgcXVpbmEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2OCBidWlsdGluL2NvbW1pdC5jOjE1MjcKK21zZ2lkICJzaG93IHN0YXR1cyBpbiBsb25nIGZvcm1hdCAoZGVmYXVsdCkiCittc2dzdHIgIm1vc3RyYSBsJ2VzdGF0IGVuIGZvcm1hdCBsbGFyZyAocGVyIGRlZmVjdGUpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzEgYnVpbHRpbi9jb21taXQuYzoxNTMwCittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgImFjYWJhIGxlcyBlbnRyYWRlcyBhbWIgTlVMIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzMgYnVpbHRpbi9jb21taXQuYzoxMzc3IGJ1aWx0aW4vY29tbWl0LmM6MTUzMworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTMgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTYKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU5IGJ1aWx0aW4vcmViYXNlLmM6MTUyNSBwYXJzZS1vcHRpb25zLmg6MzM2Cittc2dpZCAibW9kZSIKK21zZ3N0ciAibW9kZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc0IGJ1aWx0aW4vY29tbWl0LmM6MTUzMworbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorIm1vc3RyYSBlbHMgZml0eGVycyBubyBzZWd1aXRzLCBtb2RlcyBvcGNpb25hbHM6IGFsbCwgbm9ybWFsLCBuby4gKFBlciAiCisiZGVmZWN0ZTogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc4Cittc2dpZCAiIgorInNob3cgaWdub3JlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uIChEZWZhdWx0OiAiCisidHJhZGl0aW9uYWwpIgorbXNnc3RyICIiCisibW9zdHJhIGVscyBmaXR4ZXJzIGlnbm9yYXRzLCBtb2RlcyBvcGNpb25hbHM6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uICIKKyIoUGVyIGRlZmVjdGU6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgwIHBhcnNlLW9wdGlvbnMuaDoxOTIKK21zZ2lkICJ3aGVuIgorbXNnc3RyICJxdWFuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODEKK21zZ2lkICIiCisiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcywgb3B0aW9uYWwgd2hlbjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKyJpZ25vcmEgZWxzIGNhbnZpcyBhbHMgc3VibcOyZHVscywgb3BjaW9uYWwgcXVhbjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAoUGVyICIKKyJkZWZlY3RlOiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODMKK21zZ2lkICJsaXN0IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJtb3N0cmEgZWxzIGZpdHhlcnMgbm8gc2VndWl0cyBlbiBjb2x1bW5lcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg0Cittc2dpZCAiZG8gbm90IGRldGVjdCByZW5hbWVzIgorbXNnc3RyICJubyBkZXRlY3RpcyBjYW52aXMgZGUgbm9tcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg2Cittc2dpZCAiZGV0ZWN0IHJlbmFtZXMsIG9wdGlvbmFsbHkgc2V0IHNpbWlsYXJpdHkgaW5kZXgiCittc2dzdHIgImRldGVjdGEgY2FudmlzIGRlIG5vbXMsIGkgb3BjaW9uYWxtZW50IGVzdGFibGVpeCB1biDDrW5kZXggZGUgc2VtYmxhbsOnYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDA2Cittc2dpZCAiVW5zdXBwb3J0ZWQgY29tYmluYXRpb24gb2YgaWdub3JlZCBhbmQgdW50cmFja2VkLWZpbGVzIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODkKK21zZ2lkICJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IgorbXNnc3RyICJvbWV0IGVsIHJlc3VtIGRlc3Byw6lzIGQndW5hIGNvbWlzc2nDsyByZWVpeGlkYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkwCittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJtb3N0cmEgbGEgZGlmZXLDqG5jaWEgZW4gbGEgcGxhbnRpbGxhIGRlIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkyCittc2dpZCAiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9ucyBkZSBtaXNzYXRnZSBkZSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5MyBidWlsdGluL21lcmdlLmM6Mjc0IGJ1aWx0aW4vdGFnLmM6NDE0Cittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAibGxlZ2l1IGVsIG1pc3NhdGdlIGRlcyBkJ3VuIGZpdHhlciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk0Cittc2dpZCAiYXV0aG9yIgorbXNnc3RyICJhdXRvciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk0Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgImF1dG9yIGNvcnJlZ2l0IGRlIGxhIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1IGJ1aWx0aW4vZ2MuYzo1MzgKK21zZ2lkICJkYXRlIgorbXNnc3RyICJkYXRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTUKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgImRhdGEgY29ycmVnaWRhIGRlIGxhIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk3IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OCBidWlsdGluL2NvbW1pdC5jOjE0OTkKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMCBwYXJzZS1vcHRpb25zLmg6MzI4IHJlZi1maWx0ZXIuaDo5MgorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiY29taXNzacOzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTcKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAicmV1c2EgaSBlZGl0YSBlbCBtaXNzYXRnZSBkZSBsYSBjb21pc3Npw7MgZXNwZWNpZmljYWRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTgKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAicmV1c2EgZWwgbWlzc2F0Z2UgZGUgbGEgY29taXNzacOzIGVzcGVjaWZpY2FkYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk5Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorInVzYSBlbCBtaXNzYXRnZSBmb3JtYXRhdCBkZSDCq3NxdWFzaMK7IGF1dG9tw6B0aWMgcGVyIGEgY29ycmVnaXIgbGEgY29taXNzacOzICIKKyJlc3BlY2lmaWNhZGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMAorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisidXNhIGVsIG1pc3NhdGdlIGZvcm1hdGF0IGRlIMKrc3F1YXNowrsgYXV0b23DoHRpYyBwZXIgYSDCq3NxdWFzaMK7IGEgbGEgY29taXNzacOzICIKKyJlc3BlY2lmaWNhZGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMQorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgImwnYXV0b3IgZGUgbGEgY29taXNzacOzIGphIHPDs2Mgam8gKHMndXNhIGFtYiAtQy8tYy8tLWFtZW5kKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAyIGJ1aWx0aW4vbG9nLmM6MTYzNCBidWlsdGluL21lcmdlLmM6Mjg5CisjOiBidWlsdGluL3B1bGwuYzoxNjQgYnVpbHRpbi9yZXZlcnQuYzoxMTAKK21zZ2lkICJhZGQgU2lnbmVkLW9mZi1ieToiCittc2dzdHIgImFmZWdlaXggU2lnbmVkLW9mZi1ieToiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMworbXNnaWQgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIKK21zZ3N0ciAidXNhIGVsIGZpdHhlciBkZSBwbGFudGlsbGEgZXNwZWNpZmljYXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNAorbXNnaWQgImZvcmNlIGVkaXQgb2YgY29tbWl0IgorbXNnc3RyICJmb3LDp2EgbCdlZGljacOzIGRlIGxhIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA2Cittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgImluY2xvdSBsJ2VzdGF0IGVuIGxhIHBsYW50aWxsYSBkZSBtaXNzYXRnZSBkZSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMQorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICJPcGNpb25zIGRlbHMgY29udGluZ3V0cyBkZSBsZXMgY29taXNzaW9ucyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTEyCittc2dpZCAiY29tbWl0IGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJjb21ldCB0b3RzIGVscyBmaXR4ZXJzIGNhbnZpYXRzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTMKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgImFmZWdlaXggZWxzIGZpdHhlcnMgZXNwZWNpZmljYXRzIGEgbCfDrW5kZXggcGVyIGEgY29tZXRyZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE0Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgZmlsZXMiCittc2dzdHIgImFmZWdlaXggZWxzIGZpdHhlcnMgaW50ZXJhY3RpdmFtZW50IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTUKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIgorbXNnc3RyICJhZmVnZWl4IGVscyBjYW52aXMgaW50ZXJhY3RpdmFtZW50IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTYKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgImNvbWV0IG5vbcOpcyBlbHMgZml0eGVycyBlc3BlY2lmaWNhdHMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNworbXNnaWQgImJ5cGFzcyBwcmUtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIgorbXNnc3RyICJldml0YSBlbHMgbGxpZ2FtcyBkZSBwcmVjb21pc3Npw7MgaSBtaXNzYXRnZSBkZSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxOAorbXNnaWQgInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiCittc2dzdHIgIm1vc3RyYSBxdcOoIGVzIGNvbWV0cmlhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzEKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgImVzbWVuYSBsYSBjb21pc3Npw7MgYW50ZXJpb3IiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzMgorbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAiZXZpdGEgZWwgbGxpZ2FtIGRlIHBvc3QgZXNjcmlwdHVyYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM5Cittc2dpZCAib2sgdG8gcmVjb3JkIGFuIGVtcHR5IGNoYW5nZSIKK21zZ3N0ciAiZXN0w6AgYsOpIHJlZ2lzdHJhciB1biBjYW52aSBidWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NDEKK21zZ2lkICJvayB0byByZWNvcmQgYSBjaGFuZ2Ugd2l0aCBhbiBlbXB0eSBtZXNzYWdlIgorbXNnc3RyICJlc3TDoCBiw6kgcmVnaXN0cmFyIHVuIGNhbnZpIGFtYiBtaXNzYXRnZSBidWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIKK21zZ3N0ciAiRml0eGVyIE1FUkdFX0hFQUQgbWFsbcOocyAoJXMpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MjEKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBNRVJHRV9NT0RFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBtaXNzYXRnZSBkZSBjb21pc3Npw7M6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAiUydlc3TDoCBhdm9ydGFudCBsYSBjb21pc3Npw7MgYSBjYXVzYSBkJ3VuIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyBidWl0LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICJTJ2VzdMOgIGF2b3J0YW50IGxhIGNvbWlzc2nDszsgbm8gaGV1IGVkaXRhdCBlbCBtaXNzYXRnZS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjg2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJyZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisicydoYSBhY3R1YWxpdHphdCBlbCBkaXDDsnNpdCwgcGVyw7Igbm8gZXMgcG90IGVzY3JpdXJlIGVsXG4iCisiZml0eGVyIG5ld19pbmRleC4gQ29tcHJvdmV1IHF1ZSBlbCBkaXNjIG5vIGVzdGlndWkgcGxlIGlcbiIKKyJxdWUgbm8gcydoYWdpIGV4Y2VkaXQgbGEgcXVvdGEsIGkgZGVzcHLDqXMgZmV1IFxuIgorIsKrZ2l0IHJlc2V0IEhFQUTCuyBwZXIgYSByZWN1cGVyYXItaG8uIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTcKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIyCittc2dpZCAiIgorImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tYXBwZW5kfC0tc3BsaXRdIFstLSIKKyJyZWFjaGFibGV8LS1zdGRpbi1wYWNrc3wtLXN0ZGluLWNvbW1pdHNdIFstLVtuby1dcHJvZ3Jlc3NdIDxzcGxpdCBvcHRpb25zPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQ4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTAzCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE4NyBidWlsdGluL2ZldGNoLmM6MTc5IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgImRpciIKK21zZ3N0ciAiZGlyZWN0b3JpIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQ5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTA0CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE4OAorbXNnaWQgIlRoZSBvYmplY3QgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBncmFwaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUxCittc2dpZCAiaWYgdGhlIGNvbW1pdC1ncmFwaCBpcyBzcGxpdCwgb25seSB2ZXJpZnkgdGhlIHRpcCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NzMgdC9oZWxwZXIvdGVzdC1yZWFkLWdyYXBoLmM6MjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGNvbW1pdC1ncmFwaCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjb21pc3Npw7Mgwqslc8K7IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwNgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDgKK21zZ2lkICJzY2FuIHBhY2staW5kZXhlcyBsaXN0ZWQgYnkgc3RkaW4gZm9yIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTAKK21zZ2lkICJzdGFydCB3YWxrIGF0IGNvbW1pdHMgbGlzdGVkIGJ5IHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEyCittc2dpZCAiaW5jbHVkZSBhbGwgY29tbWl0cyBhbHJlYWR5IGluIHRoZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExNQorIywgZnV6enkKK21zZ2lkICJhbGxvdyB3cml0aW5nIGFuIGluY3JlbWVudGFsIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICJFc2NyaXUgaSB2ZXJpZmljYSBlbHMgZml0eGVycyBjb21taXQtZ3JhcGggZGUgR2l0IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExNyBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyMQorbXNnaWQgIm1heGltdW0gbnVtYmVyIG9mIGNvbW1pdHMgaW4gYSBub24tYmFzZSBzcGxpdCBjb21taXQtZ3JhcGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTkKK21zZ2lkICJtYXhpbXVtIHJhdGlvIGJldHdlZW4gdHdvIGxldmVscyBvZiBhIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNworbXNnaWQgInVzZSBhdCBtb3N0IG9uZSBvZiAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzLCBvciAtLXN0ZGluLXBhY2tzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTEKK21zZ2lkICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29uZmlnIFs8b3BjaW9ucz5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEwMyBidWlsdGluL2Vudi0taGVscGVyLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIC0tdHlwZSBhcmd1bWVudCwgJXMiCittc2dzdHIgInBhcsOgbWV0cmUgLS10eXBlIG5vIHJlY29uZWd1dCwgJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTE1Cittc2dpZCAib25seSBvbmUgdHlwZSBhdCBhIHRpbWUiCittc2dzdHIgIm5vbcOpcyB1biB0aXB1cyBjYWRhIGNvcCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjQKK21zZ2lkICJDb25maWcgZmlsZSBsb2NhdGlvbiIKK21zZ3N0ciAiVWJpY2FjacOzIGRlbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjUKK21zZ2lkICJ1c2UgZ2xvYmFsIGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2EgZWwgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MgZ2xvYmFsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNgorbXNnaWQgInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiCittc2dzdHIgInVzYSBlbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyBkZWwgc2lzdGVtYSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjcKK21zZ2lkICJ1c2UgcmVwb3NpdG9yeSBjb25maWcgZmlsZSIKK21zZ3N0ciAidXNhIGVsIGZpdHhlciBkZSBjb25maWd1cmFjacOzIGRlbCBkaXDDsnNpdCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjgKK21zZ2lkICJ1c2UgcGVyLXdvcmt0cmVlIGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2EgdW4gZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MgcGVyIGRpcMOyc2l0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOQorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAidXNhIGVsIGZpdHhlciBkZSBjb25maWd1cmFjacOzIGRvbmF0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMAorbXNnaWQgImJsb2ItaWQiCittc2dzdHIgIklEIGRlIGJsb2IiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAibGxlZ2VpeCBsYSBjb25maWd1cmFjacOzIGRlIGwnb2JqZWN0ZSBkZSBibG9iIGRvbmF0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAiQWNjacOzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMgorbXNnaWQgImdldCB2YWx1ZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJvYnTDqW4gdmFsb3I6IG5vbSBbcmVnZXgtZGUtdmFsb3JzXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzMKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIm9idMOpbiB0b3RzIGVscyB2YWxvcnM6IGNsYXUgW3JlZ2V4LWRlLXZhbG9yc10iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM0Cittc2dpZCAiZ2V0IHZhbHVlcyBmb3IgcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIm9idMOpbiB2YWxvcnMgZGUgcmVnZXhwOiByZWdleC1kZS1ub21zIFtyZWdleC1kZS12YWxvcnNdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNQorbXNnaWQgImdldCB2YWx1ZSBzcGVjaWZpYyBmb3IgdGhlIFVSTDogc2VjdGlvblsudmFyXSBVUkwiCittc2dzdHIgIm9idMOpbiBlbCB2YWxvciBlc3BlY8OtZmljIHBlciBhIGwnVVJMOiBzZWNjacOzWy52YXJpYWJsZV0gVVJMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNgorbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICIiCisicmVlbXBsYcOnYSB0b3RlcyBsZXMgdmFyaWFibGVzIHF1ZSBjb2luY2lkZWl4ZW46IG5vbSB2YWxvciBbcmVnZXhfZGVfdmFsb3JzXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzcKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgImFmZWdlaXggdW5hIHZhcmlhYmxlIG5vdmE6IG5vbSB2YWxvciIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzgKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJlbGltaW5hIHVuYSB2YXJpYWJsZTogbm9tIFtyZWdleC1kZS12YWxvcnNdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOQorbXNnaWQgInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJlbGltaW5hIHRvdGVzIGxlcyBjb2luY2lkw6huY2llczogbm9tIFtyZWdleC1kZS12YWxvcnNdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MAorbXNnaWQgInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIKK21zZ3N0ciAiY2FudmlhIGVsIG5vbSBkZSBzZWNjacOzOiBub20tYW50aWMgbm9tLW5vdSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDEKK21zZ2lkICJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIgorbXNnc3RyICJlbGltaW5hIHVuYSBzZWNjacOzOiBub20iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQyCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgImxsaXN0YSB0b3RzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MworbXNnaWQgIm9wZW4gYW4gZWRpdG9yIgorbXNnc3RyICJvYnJlIHVuIGVkaXRvciIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDQKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAidHJvYmEgZWwgY29sb3IgY29uZmlndXJhdDogcmFudXJhIFtwZXIgZGVmZWN0ZV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ1Cittc2dpZCAiZmluZCB0aGUgY29sb3Igc2V0dGluZzogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCittc2dzdHIgInRyb2JhIGVsIHBhcsOgbWV0cmUgZGUgY29sb3I6IHJhbnVyYSBbc3Rkb3V0LcOpcy10dHldIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NgorbXNnaWQgIlR5cGUiCittc2dzdHIgIlRpcHVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NyBidWlsdGluL2Vudi0taGVscGVyLmM6MzgKK21zZ2lkICJ2YWx1ZSBpcyBnaXZlbiB0aGlzIHR5cGUiCittc2dzdHIgImVsIHZhbG9yIHTDqSBkb25hdCBhcXVlc3QgdGlwdXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ4Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICJlbCB2YWxvciDDqXMgXCJ0cnVlXCIgbyBcImZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ5Cittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgImVsIHZhbG9yIMOpcyB1biBub21icmUgZGVjaW1hbCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTAKK21zZ2lkICJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiCittc2dzdHIgImVsIHZhbG9yIMOpcyAtLWJvb2wgbyAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTEKK21zZ2lkICJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIgorbXNnc3RyICJlbCB2YWxvciDDqXMgdW4gY2Ftw60gKG5vbSBkZSBmaXR4ZXIgbyBkaXJlY3RvcmkpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MgorbXNnaWQgInZhbHVlIGlzIGFuIGV4cGlyeSBkYXRlIgorbXNnc3RyICJlbCB2YWxvciDDqXMgdW5hIGRhdGEgZGUgdmVuY2ltZW50IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MworbXNnaWQgIk90aGVyIgorbXNnc3RyICJBbHRyZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTQKK21zZ2lkICJ0ZXJtaW5hdGUgdmFsdWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgImFjYWJhIGVscyB2YWxvcnMgYW1iIHVuIG9jdGV0IE5VTCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTUKK21zZ2lkICJzaG93IHZhcmlhYmxlIG5hbWVzIG9ubHkiCittc2dzdHIgIm1vc3RyYSBub23DqXMgZWxzIG5vbXMgZGUgdmFyaWFibGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU2Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICJyZXNwZWN0YSBsZXMgZGlyZWN0aXZlcyBkJ2luY2x1c2nDsyBlbiBjZXJjYXIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU3Cittc2dpZCAic2hvdyBvcmlnaW4gb2YgY29uZmlnIChmaWxlLCBzdGFuZGFyZCBpbnB1dCwgYmxvYiwgY29tbWFuZCBsaW5lKSIKK21zZ3N0ciAiIgorIm1vc3RyYSBsJ29yaWdlbiBkZSBsYSBjb25maWd1cmFjacOzIChmaXR4ZXIsIGVudHJhZGEgZXN0w6BuZGFyZCwgYmxvYiwgbMOtbmlhICIKKyJkJ29yZHJlcykiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU4IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MAorbXNnaWQgInZhbHVlIgorbXNnc3RyICJ2YWxvciIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTgKK21zZ2lkICJ3aXRoIC0tZ2V0LCB1c2UgZGVmYXVsdCB2YWx1ZSB3aGVuIG1pc3NpbmcgZW50cnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIHNob3VsZCBiZSBmcm9tICVkIHRvICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IHBhdHRlcm46ICVzIgorbXNnc3RyICJwYXRyw7MgZGUgbGEgY2xhdSBubyB2w6BsaWQ6ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZm9ybWF0IGRlZmF1bHQgY29uZmlnIHZhbHVlOiAlcyIKK21zZ3N0ciAiIgorInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZm9ybWF0YXIgZWwgdmFsb3IgcGVyIGRlZmVjdGUgZGUgbGEgY29uZmlndXJhY2nDszogJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBjb2xvciAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgYW5hbGl0emFyIGVsIGNvbG9yIMKrJXPCuyIKKworIzogYnVpbHRpbi9jb25maWcuYzo0NDMKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgZWwgdmFsb3IgZGUgY29sb3IgcGVyIGRlZmVjdGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDk2IGJ1aWx0aW4vY29uZmlnLmM6NzQyCittc2dpZCAibm90IGluIGEgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAibm8gw6lzIGVuIHVuIGRpcmVjdG9yaSBnaXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDk5Cittc2dpZCAid3JpdGluZyB0byBzdGRpbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJubyBzJ2FkbWV0IGVzY3JpdXJlIGEgc3RkaW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTAyCisjLCBmdXp6eQorbXNnaWQgIndyaXRpbmcgY29uZmlnIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgImF2w61zOiBlbCBzb2JyZW5vbSBkZSBzZW5kbWFpbCBhbWIgY29tZXRlcyBubyBlc3TDoCBzdXBvcnRhdDogJXNcbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiMgVGhpcyBpcyBHaXQncyBwZXItdXNlciBjb25maWd1cmF0aW9uIGZpbGUuXG4iCisiW3VzZXJdXG4iCisiIyBQbGVhc2UgYWRhcHQgYW5kIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKK21zZ3N0ciAiIgorIiMgQWl4w7Igw6lzIGVsIGZpdHhlciBkZSBjb25maWd1cmFjacOzIGRlbCBHaXQgZGUgbCd1c3VhcmkuXG4iCisiW3VzZXJdXG4iCisiIyBBZGFwdGV1IGkgZGVzY29tZW50ZXUgbGVzIGzDrW5pZXMgc2Vnw7xlbnRzOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTEKK21zZ2lkICJvbmx5IG9uZSBjb25maWcgZmlsZSBhdCBhIHRpbWUiCittc2dzdHIgIm5vbcOpcyB1biBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyBjYWRhIGNvcCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTYKK21zZ2lkICItLWxvY2FsIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tbG9jYWwgbm9tw6lzIGVzIHBvdCB1c2FyIGRpbnMgZCd1biBkaXDDsnNpdCBnaXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjE5Cittc2dpZCAiLS1ibG9iIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tYmxvYiBub23DqXMgZXMgcG90IHVzYXIgZGlucyBkJ3VuIGRpcMOyc2l0IGdpdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MzgKK21zZ2lkICIkSE9NRSBub3Qgc2V0IgorbXNnc3RyICIkSE9NRSBubyBlc3TDoCBlc3RhYmxlcnRhIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1OAorbXNnaWQgIiIKKyItLXdvcmt0cmVlIGNhbm5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgd29ya2luZyB0cmVlcyB1bmxlc3MgdGhlIGNvbmZpZ1xuIgorImV4dGVuc2lvbiB3b3JrdHJlZUNvbmZpZyBpcyBlbmFibGVkLiBQbGVhc2UgcmVhZCBcIkNPTkZJR1VSQVRJT04gRklMRVwiXG4iCisic2VjdGlvbiBpbiBcImdpdCBoZWxwIHdvcmt0cmVlXCIgZm9yIGRldGFpbHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2ODgKK21zZ2lkICItLWdldC1jb2xvciBhbmQgdmFyaWFibGUgdHlwZSBhcmUgaW5jb2hlcmVudCIKK21zZ3N0ciAiLS1nZXQtY29sb3IgaSBlbCB0aXB1cyBkZSB2YXJpYWJsZSBzw7NuIGluY29oZXJlbnRzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY5MworbXNnaWQgIm9ubHkgb25lIGFjdGlvbiBhdCBhIHRpbWUiCittc2dzdHIgIm5vbcOpcyB1bmEgYWNjacOzIGNhZGEgY29wIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcwNgorbXNnaWQgIi0tbmFtZS1vbmx5IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWxpc3Qgb3IgLS1nZXQtcmVnZXhwIgorbXNnc3RyICItLW5hbWUtb25seSBub23DqXMgw6lzIGFwbGljYWJsZSBhIC0tbGlzdCBvIC0tZ2V0LXJlZ2V4cCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTIKK21zZ2lkICIiCisiLS1zaG93LW9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwLCBhbmQgLS0iCisibGlzdCIKK21zZ3N0ciAiIgorIi0tc2hvdy1vcmlnaW4gbm9tw6lzIMOpcyBhcGxpY2FibGUgYSAtLWdldCwgLS1nZXQtYWxsLCAtLWdldC1yZWdleHAsIGkgLS1saXN0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxOAorbXNnaWQgIi0tZGVmYXVsdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQiCittc2dzdHIgIi0tZGVmYXVsdCBub23DqXMgw6lzIGFwbGljYWJsZSBhIC0tZ2V0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzM0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBjb25maWcgZmlsZShzKSIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBwcm9jZXNzYW50IGVscyBmaXR4ZXJzIGRlIGNvbmZpZ3VyYWNpw7MiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzQ0Cittc2dpZCAiZWRpdGluZyBzdGRpbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJubyBoaSBoYSBjb21wYXRpYmlsaXRhdCBwZXIgYSBsJ2VkaWNpw7MgYSBzdGRpbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDYKK21zZ2lkICJlZGl0aW5nIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIm5vIGhpIGhhIGNvbXBhdGliaWxpdGF0IHBlciBsJ2VkaWNpw7MgZGUgYmxvYnMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJubyBlcyBwb3QgY3JlYXIgZWwgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MgJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3Qgb3ZlcndyaXRlIG11bHRpcGxlIHZhbHVlcyB3aXRoIGEgc2luZ2xlIHZhbHVlXG4iCisiICAgICAgIFVzZSBhIHJlZ2V4cCwgLS1hZGQgb3IgLS1yZXBsYWNlLWFsbCB0byBjaGFuZ2UgJXMuIgorbXNnc3RyICIiCisibm8gZXMgcG9kZW4gc29icmVlc2NyaXVyZSBtw7psdGlwbGVzIHZhbG9ycyBhbWIgdW4gc29sIHZhbG9yXG4iCisiICAgICAgIFVzZXUgdW5hIGV4cHJlc3Npw7MgcmVndWxhciwgLS1hZGQgbyAtLXJlcGxhY2UtYWxsIHBlciBhIGNhbnZpYXIgJXMuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjg0NyBidWlsdGluL2NvbmZpZy5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHNlY3Rpb246ICVzIgorbXNnc3RyICJubyBleGlzdGVpeCBsYSBzZWNjacOzOiAlcyIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTAKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorbXNnc3RyICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzoxMDAKK21zZ2lkICJwcmludCBzaXplcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtYXQiCittc2dzdHIgImltcHJpbWVpeCBsZXMgbWlkZXMgZW4gdW4gZm9ybWF0IGxsZWdpYmxlIHBlbHMgaHVtYW5zIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjYKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gWzxjb21taXQtaXNoPi4uLl0iCittc2dzdHIgImdpdCBkZXNjcmliZSBbPG9wY2lvbnM+XSBbPGNvbWlzc2nDsz4uLi5dIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gLS1kaXJ0eSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8b3BjaW9ucz5dIC0tZGlydHkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImhlYWQiCittc2dzdHIgImRhdmFudCBwZXIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICJsbGV1Z2VyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjIKK21zZ2lkICJhbm5vdGF0ZWQiCittc2dzdHIgImFub3RhdCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgImwnZXRpcXVldGEgYW5vdGFkYSAlcyBubyDDqXMgZGlzcG9uaWJsZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIgorbXNnc3RyICJsJ2V0aXF1ZXRhIGFub3RhZGEgJXMgbm8gdMOpIG5vbSBpbmNydXN0YXQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAibCdldGlxdWV0YSDCqyVzwrsgcmVhbG1lbnQgw6lzIMKrJXPCuyBhcXXDrSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgImNhcCBldGlxdWV0YSBjb2luY2lkZWl4IGV4YWN0YW1lbnQgYW1iIMKrJXPCuyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJObyBleGFjdCBtYXRjaCBvbiByZWZzIG9yIHRhZ3MsIHNlYXJjaGluZyB0byBkZXNjcmliZVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgInMnaGEgZmluYWxpdHphdCBsYSBjZXJjYSBhICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKyJDYXAgZXRpcXVldGEgYW5vdGFkYSBwb3QgZGVzY3JpdXJlIMKrJXPCuy5cbiIKKyJObyBvYnN0YW50LCBoaSBoYXZpYSBldGlxdWV0ZXMgbm8gYW5vdGFkZXM6IHByb3ZldSAtLXRhZ3MuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iCittc2dzdHIgIiIKKyJDYXAgZXRpcXVldGEgcG90IGRlc2NyaXVyZSDCqyVzwrsuXG4iCisiUHJvdmV1IC0tYWx3YXlzLCBvIGNyZWV1IGFsZ3VuZXMgZXRpcXVldGVzLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmF2ZXJzZWQgJWx1IGNvbW1pdHNcbiIKK21zZ3N0ciAiJWx1IGNvbWlzc2lvbnMgdHJhdmVzc2FkZXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKyJzJ2hhbiB0cm9iYXQgbcOpcyBkZSAlaSBldGlxdWV0ZXM6IHMnaGFuIGxsaXN0YXQgbGVzICVpIG3DqXMgcmVjZW50c1xuIgorInMnaGEgcmVudW5jaWF0IGxhIGNlcmNhIGEgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJkZXNjcmliZSAlc1xuIgorbXNnc3RyICJkZXNjcml1ICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIiVzIG5vIMOpcyB1biBub20gZCdvYmplY3RlIHbDoGxpZCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBuZWl0aGVyIGEgY29tbWl0IG5vciBibG9iIgorbXNnc3RyICIlcyBubyDDqXMgdW5hIGNvbWlzc2nDsyBvIHVuIGJsb2IiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzcKK21zZ2lkICJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IgorbXNnc3RyICJ0cm9iYSBsJ2V0aXF1ZXRhIHF1ZSB2aW5ndWkgZGVzcHLDqXMgZGUgbGEgY29taXNzacOzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM4Cittc2dpZCAiZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVyciIKK21zZ3N0ciAiZXN0cmF0w6hnaWEgZGUgY2VyY2EgZGUgZGVwdXJhY2nDsyBlbiBzdGRlcnIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzkKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAidXNhIHF1YWxzZXZvbCByZWZlcsOobmNpYSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MAorbXNnaWQgInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIgorbXNnc3RyICJ1c2EgcXVhbHNldm9sIGV0aXF1ZXRhLCBmaW5zIGkgdG90IGFxdWVsbGVzIHNlbnNlIGFub3RhciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MQorbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgInNlbXByZSB1c2EgZWwgZm9ybWF0IGxsYXJnIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQyCittc2dpZCAib25seSBmb2xsb3cgZmlyc3QgcGFyZW50IgorbXNnc3RyICJub23DqXMgc2VndWVpeCBsYSBwcmltZXJhIG1hcmUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDUKK21zZ2lkICJvbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIgorbXNnc3RyICJlbWV0IG5vbcOpcyBjb2luY2lkw6huY2llcyBleGFjdGVzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ3Cittc2dpZCAiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIKK21zZ3N0ciAiY29uc2lkZXJhIGxlcyA8bj4gZXRpcXVldGVzIG3DqXMgcmVjZW50cyAocGVyIGRlZmVjdGU6IDEwKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0OQorbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIm5vbcOpcyBjb25zaWRlcmEgbGVzIGV0aXF1ZXRlcyBxdWUgY29pbmNpZGVpeGVuIGFtYiA8cGF0csOzPiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MQorbXNnaWQgImRvIG5vdCBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAibm8gY29uc2lkZXJpcyBsZXMgZXRpcXVldGVzIHF1ZSBubyBjb2luY2lkZWl4ZW4gYW1iIDxwYXRyw7M+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUzIGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzMKK21zZ2lkICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siCittc2dzdHIgIm1vc3RyYSBsJ29iamVjdGUgZGUgY29taXNzacOzIGFicmV2aWF0IGNvbSBhIHNpc3RlbWEgYWx0ZXJuYXRpdSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NCBidWlsdGluL2Rlc2NyaWJlLmM6NTU3Cittc2dpZCAibWFyayIKK21zZ3N0ciAibWFyY2EiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTUKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiCittc2dzdHIgImFubmV4YSA8bWFyY2E+IGVuIGwnYXJicmUgZGUgdHJlYmFsbCBicnV0IChwZXIgZGVmZWN0ZTogXCItZGlydHlcIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTgKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGJyb2tlbiB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWJyb2tlblwiKSIKK21zZ3N0ciAiYW5uZXhhIDxtYXJjYT4gZW4gbCdhcmJyZSBkZSB0cmViYWxsIGJydXQgKHBlciBkZWZlY3RlOiBcIi1icm9rZW5cIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NzYKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiLS1sb25nIMOpcyBpbmNvbXBhdGlibGUgYW1iIC0tYWJicmV2PTAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MDUKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgY2FwIG5vbSwgbm8gZXMgcG90IGRlc2NyaXVyZSByZXMuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjU2Cittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tZGlydHkgw6lzIGluY29tcGF0aWJsZSBhbWIgbGVzIGNvbWlzc2lvbnMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NTgKK21zZ2lkICItLWJyb2tlbiBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tYnJva2VuIMOpcyBpbmNvbXBhdGlibGUgYW1iIGxlcyBjb21pc3Npb25zIgorCisjOiBidWlsdGluL2RpZmYuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBub3QgYSByZWd1bGFyIGZpbGUgb3Igc3ltbGluayIKK21zZ3N0ciAiwqslc8K7OiBubyDDqXMgbmkgZml0eGVyIHJlZ3VsYXIgbmkgZW5sbGHDpyBzaW1iw7JsaWMiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIm9wY2nDsyBubyB2w6BsaWRhOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzUwCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIk5vIMOpcyB1biBkaXDDsnNpdCBkZSBnaXQiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAicydoYSBkb25hdCB1biBvYmplY3RlIG5vIHbDoGxpZCDCqyVzwrsuIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIHR3byBibG9icyBnaXZlbjogJyVzJyIKK21zZ3N0ciAicydoYSBkb25hdCBtw6lzIGRlIGRvcyBibG9iczogwqslc8K7IgorCisjOiBidWlsdGluL2RpZmYuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAicydoYSBkb25hdCBsJ29iamVjdGUgbm8gZ2VzdGlvbmF0IMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMAorbXNnaWQgImdpdCBkaWZmdG9vbCBbPG9wdGlvbnM+XSBbPGNvbW1pdD4gWzxjb21taXQ+XV0gWy0tXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGRpZmZ0b29sIFs8b3BjaW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8Y2Ftw60+Li4uXSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQ6ICVkIgorbXNnc3RyICJoYSBmYWxsYXQ6ICVkIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGwnZW5sbGHDpyBzaW1iw7JsaWMgJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayBmaWxlICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBmaXR4ZXIgZCdlbmxsYcOnIHNpbWLDsmxpYyAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMgZm9yIHN5bWxpbmsgJXMiCittc2dzdHIgIk5vIGVzIHBvdCBsbGVnaXIgbCdvYmplY3RlICVzIHBlciBsJ2VubGxhw6cgc2ltYsOybGljICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NDEzCittc2dpZCAiIgorImNvbWJpbmVkIGRpZmYgZm9ybWF0cygnLWMnIGFuZCAnLS1jYycpIGFyZSBub3Qgc3VwcG9ydGVkIGluXG4iCisiZGlyZWN0b3J5IGRpZmYgbW9kZSgnLWQnIGFuZCAnLS1kaXItZGlmZicpLiIKK21zZ3N0ciAiIgorImVscyBmb3JtYXRzIGRlIGRpZmYgY29tYmluYXRzICgnLWMnIGFuZCAnLS1jYycpIG5vIHPDs24gYWRtZXNvcyBcbiIKKyJlbiBlbCBtb2RlIGRpZmYgcGVyIGRpcmVjdG9yaXMgKCctZCcgYW5kICctLWRpci1kaWZmJykuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJvdGggZmlsZXMgbW9kaWZpZWQ6ICclcycgYW5kICclcycuIgorbXNnc3RyICJzJ2hhbiBtb2RpZmljYXQgYW1iZMOzcyBmaXR4ZXJzOiDCqyVzwrsgaSDCqyVzwrsuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjM2Cittc2dpZCAid29ya2luZyB0cmVlIGZpbGUgaGFzIGJlZW4gbGVmdC4iCittc2dzdHIgInMnaGEgZGVpeGF0IHVuIGZpdHhlciBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBvcmFyeSBmaWxlcyBleGlzdCBpbiAnJXMnLiIKK21zZ3N0ciAiZXhpc3RlaXggdW4gZml0eGVyIHRlbXBvcmFsIGEgwqslc8K7LiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0OAorbXNnaWQgInlvdSBtYXkgd2FudCB0byBjbGVhbnVwIG9yIHJlY292ZXIgdGhlc2UuIgorbXNnc3RyICJwb2RldSBuZXRlamFyIG8gcmVjdXBlcmFyLWxvcy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTcKK21zZ2lkICJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIKK21zZ3N0ciAidXRpbGl0emEgYGRpZmYuZ3VpdG9vbGAgZW4gY29tcHRlcyBkZSBgZGlmZi50b29sYCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5OQorbXNnaWQgInBlcmZvcm0gYSBmdWxsLWRpcmVjdG9yeSBkaWZmIgorbXNnc3RyICJmZXMgdW4gZGlmZiBkZSB0b3QgZWwgZGlyZWN0b3JpIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzAxCittc2dpZCAiZG8gbm90IHByb21wdCBiZWZvcmUgbGF1bmNoaW5nIGEgZGlmZiB0b29sIgorbXNnc3RyICJubyBwcmVndW50aXMgYWJhbnMgZCdleGVjdXRhciBsJ2VpbmEgZGlmZiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNgorbXNnaWQgInVzZSBzeW1saW5rcyBpbiBkaXItZGlmZiBtb2RlIgorbXNnc3RyICJ1dGlsaXR6YSBlbmxsYcOnb3Mgc2ltYsOybGljcyBlbiBtb2RlIGRpci1kaWZmIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA3Cittc2dpZCAidG9vbCIKK21zZ3N0ciAiZWluYSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwOAorbXNnaWQgInVzZSB0aGUgc3BlY2lmaWVkIGRpZmYgdG9vbCIKK21zZ3N0ciAidXRpbGl0emEgbCdlaW5hIGRlIGRpZmYgZXNwZWNpZmljYWRhIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEwCittc2dpZCAicHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgIgorbXNnc3RyICIiCisiaW1wcmltZWl4IHVuYSBsbGlzdGEgZGUgdG90ZXMgbGVzIGVpbmVzIGRpZmYgcXVlIHBvZGV1IHVzYXIgYW1iIGAtLXRvb2xgIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEzCittc2dpZCAiIgorIm1ha2UgJ2dpdC1kaWZmdG9vbCcgZXhpdCB3aGVuIGFuIGludm9rZWQgZGlmZiB0b29sIHJldHVybnMgYSBub24gLSB6ZXJvIGV4aXQgIgorImNvZGUiCittc2dzdHIgIiIKKyJmZXMgcXVlICdnaXQtZGlmZnRvb2wnIHN1cnRpIHF1YW4gbCdlaW5hIGRlIGRpZmYgaW52b2NhZGEgdG9ybmEgdW4gY29kaSBkZSAiCisic29ydGlkYSBkaWZlcmVudCBkZSB6ZXJvIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE2Cittc2dpZCAic3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzIgorbXNnc3RyICJlc3BlY2lmaXF1ZXUgdW4gb3JkcmUgcGVyc29uYWxpdHphdCBwZXIgdmV1cmUgZGlmZnMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTcKK21zZ2lkICJwYXNzZWQgdG8gYGRpZmZgIgorbXNnc3RyICJwYXNzYS1obyBhIMKrZGlmZsK7IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzMyCittc2dpZCAiZGlmZnRvb2wgcmVxdWlyZXMgd29ya3RyZWUgb3IgLS1uby1pbmRleCIKK21zZ3N0ciAiZGlmZnRvb2wgcmVxdWVyZWl4IHdvcmt0cmVlIG8gLS1uby1pbmRleCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjczOQorbXNnaWQgIi0tZGlyLWRpZmYgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiLS1kaXItZGlmZiDDqXMgaW5jb21wYXRpYmxlIGFtYiAtLW5vLWluZGV4IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzQyCittc2dpZCAiLS1ndWksIC0tdG9vbCBhbmQgLS1leHRjbWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1ndWksIC0tdG9vbCBhbmQgLS1leHRjbWQgc8OzbiBtw7p0dWFtZW50IGV4Y2xvZW50cyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1MAorbXNnaWQgIm5vIDx0b29sPiBnaXZlbiBmb3IgLS10b29sPTx0b29sPiIKK21zZ3N0ciAibm8gcydoYSBwcm9wb3JjaW9uYXQgPHRvb2w+IHBlciAtLXRvb2w9PHRvb2w+IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzU3Cittc2dpZCAibm8gPGNtZD4gZ2l2ZW4gZm9yIC0tZXh0Y21kPTxjbWQ+IgorbXNnc3RyICJubyBzJ2hhIHByb3BvcmNpb25hdCA8Y21kPiBwZXIgLS1leHRjbWQ9PGNtZD4iCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2Cittc2dpZCAiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPG9wdGlvbnM+IDxlbnYtdmFyPiIKK21zZ3N0ciAiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPG9wY2lvbnM+IDxlbnYtdmFyPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjM3IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgInR5cGUiCittc2dzdHIgInRpcHVzIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NDEKK21zZ2lkICJkZWZhdWx0IGZvciBnaXRfZW52XyooLi4uKSB0byBmYWxsIGJhY2sgb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQzCittc2dpZCAiYmUgcXVpZXQgb25seSB1c2UgZ2l0X2Vudl8qKCkgdmFsdWUgYXMgZXhpdCBjb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYC0tZGVmYXVsdCcgZXhwZWN0cyBhIGJvb2xlYW4gdmFsdWUgd2l0aCBgLS10eXBlPWJvb2xgLCBub3QgYCVzYCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGFuIHVuc2lnbmVkIGxvbmcgdmFsdWUgd2l0aCBgLS10eXBlPXVsb25nYCwgbm90IGAiCisiJXNgIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyOQorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgImdpdCBmYXN0LWV4cG9ydCBbb3BjaW9ucy1kZS1sbGlzdGEtZGUtcmV2aXNpb25zXSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjg1MgorbXNnaWQgIkVycm9yOiBDYW5ub3QgZXhwb3J0IG5lc3RlZCB0YWdzIHVubGVzcyAtLW1hcmstdGFncyBpcyBzcGVjaWZpZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTUyCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAibW9zdHJhIGVsIHByb2dyw6lzIGRlc3Byw6lzIGRlIDxuPiBvYmplY3RlcyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTQKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgInNlbGVjY2lvbmEgbGEgZ2VzdGnDsyBkZSBsZXMgZXRpcXVldGVzIHNpZ25hZGVzIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NworbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgInNlbGVjY2lvbmEgbGEgZ2VzdGnDsyBkZSBsZXMgZXRpcXVldGVzIHF1ZSBldGlxdWV0aW4gb2JqZWN0ZXMgZmlsdHJhdHMiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYwCisjLCBmdXp6eQorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBjb21taXQgbWVzc2FnZXMgaW4gYW4gYWx0ZXJuYXRlIGVuY29kaW5nIgorbXNnc3RyICJzZWxlY2Npb25hIGxhIGdlc3Rpw7MgZGUgbGVzIGV0aXF1ZXRlcyBxdWUgZXRpcXVldGluIG9iamVjdGVzIGZpbHRyYXRzIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MworbXNnaWQgIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJCb2xjYSBsZXMgbWFycXVlcyBhIGFxdWVzdCBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY1Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICJJbXBvcnRhIGxlcyBtYXJxdWVzIGQnYXF1ZXN0IGZpdHhlciIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjkKKyMsIGZ1enp5Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAiSW1wb3J0YSBsZXMgbWFycXVlcyBkJ2FxdWVzdCBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTcxCittc2dpZCAiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiCittc2dzdHIgIkZpbmdlaXggdW4gZXRpcXVldGFkb3IgcXVhbiBlbHMgZW4gbWFuY2EgdW4gYSBsZXMgZXRpcXVldGVzIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3MworbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICJJbXByaW1laXggbCdhcmJyZSBjb21wbGV0IGRlIGNhZGEgY29taXNzacOzIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NQorbXNnaWQgIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIgorbXNnc3RyICJVc2EgbGEgY2FyYWN0ZXLDrXN0aWNhIGRvbmUgcGVyIGEgYWNhYmFyIGVsIGNvcnJlbnQiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc2Cittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICJPbWV0IGwnZW1pc3Npw7MgZGUgZGFkZXMgZGUgYmxvYiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzcgYnVpbHRpbi9sb2cuYzoxNzA1Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAiZXNwZWNpZmljYWNpw7MgZGUgcmVmZXLDqG5jaWEiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc4Cittc2dpZCAiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIgorbXNnc3RyICJBcGxpY2EgbCdlc3BlY2lmaWNhY2nDsyBkZSByZWZlcsOobmNpYSBhIGxlcyByZWZlcsOobmNpZXMgZXhwb3J0YWRlcyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzkKK21zZ2lkICJhbm9ueW1pemUgb3V0cHV0IgorbXNnc3RyICJhbm9uaW1pdHphIGxhIHNvcnRpZGEiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTgxCittc2dpZCAiUmVmZXJlbmNlIHBhcmVudHMgd2hpY2ggYXJlIG5vdCBpbiBmYXN0LWV4cG9ydCBzdHJlYW0gYnkgb2JqZWN0IGlkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTgzCittc2dpZCAiU2hvdyBvcmlnaW5hbCBvYmplY3QgaWRzIG9mIGJsb2JzL2NvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODUKK21zZ2lkICJMYWJlbCB0YWdzIHdpdGggbWFyayBpZHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEyMjAKK21zZ2lkICJDYW5ub3QgcGFzcyBib3RoIC0taW1wb3J0LW1hcmtzIGFuZCAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM0Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgZmV0Y2ggWzxvcGNpb25zPl0gWzxkaXDDsnNpdD4gWzxlc3BlY2lmaWNhY2nDsy1kZS1yZWZlcsOobmNpYT4uLi5dXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cD4iCittc2dzdHIgImdpdCBmZXRjaCBbPG9wY2lvbnM+XSA8Z3J1cD4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNgorbXNnaWQgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wY2lvbnM+XSBbKDxkaXDDsnNpdD4gfCA8Z3J1cD4pLi4uXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM3Cittc2dpZCAiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1hbGwgWzxvcGNpb25zPl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTYKK21zZ2lkICJmZXRjaC5wYXJhbGxlbCBjYW5ub3QgYmUgbmVnYXRpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzOSBidWlsdGluL3B1bGwuYzoyMDQKK21zZ2lkICJmZXRjaCBmcm9tIGFsbCByZW1vdGVzIgorbXNnc3RyICJvYnTDqW4gZGUgdG90cyBlbHMgcmVtb3RzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQxIGJ1aWx0aW4vcHVsbC5jOjI0OAorIywgZnV6enkKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL2ZldGNoIgorbXNnc3RyICJlc3RhYmxlaXggbGEgZm9udCBwZXIgYSBnaXQgcHVsbC9zdGF0dXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMgYnVpbHRpbi9wdWxsLmM6MjA3Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICJhbm5leGEgYSAuZ2l0L0ZFVENIX0hFQUQgZW4gbGxvYyBkZSBzb2JyZWVzY3JpdXJlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ1IGJ1aWx0aW4vcHVsbC5jOjIxMAorbXNnaWQgInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIKK21zZ3N0ciAiY2Ftw60gYWwgcXVhbCBwdWphciBlbCBwYXF1ZXQgYWwgY29zdGF0IHJlbW90IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ2Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIHJlZmVyZW5jZSIKK21zZ3N0ciAiZm9yw6dhIGxhIHNvYnJlZXNjcmlwdHVyYSBkZSBsYSByZWZlcsOobmNpYSBsb2NhbCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0OAorbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAib2J0w6luIGRlIG3Dumx0aXBsZXMgcmVtb3RzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUwIGJ1aWx0aW4vcHVsbC5jOjIxNAorbXNnaWQgImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgIm9idMOpbiB0b3RlcyBsZXMgZXRpcXVldGVzIGkgdG90cyBlbHMgb2JqZWN0ZXMgYXNzb2NpYXRzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUyCittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICJubyBvYnRpbmd1aXMgbGVzIGV0aXF1ZXRlcyAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIm5vbWJyZSBkZSBzdWJtw7JkdWxzIG9idGluZ3V0cyBlbiBwYXJhbMK3bGVsIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2IGJ1aWx0aW4vcHVsbC5jOjIxNworbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICJwb2RhIGxlcyBicmFucXVlcyBhbWIgc2VndWltZW50IHJlbW90IHF1ZSBqYSBubyBlc3RpZ3VpbiBlbiBlbCByZW1vdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OAorbXNnaWQgInBydW5lIGxvY2FsIHRhZ3Mgbm8gbG9uZ2VyIG9uIHJlbW90ZSBhbmQgY2xvYmJlciBjaGFuZ2VkIHRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OSBidWlsdGluL2ZldGNoLmM6MTgyIGJ1aWx0aW4vcHVsbC5jOjE0MQorbXNnaWQgIm9uLWRlbWFuZCIKK21zZ3N0ciAic290YSBkZW1hbmRhIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYwCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiY29udHJvbGEgbCdvYnRlbmNpw7MgcmVjdXJzaXZhIGRlIHN1Ym3DsmR1bHMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9wdWxsLmM6MjI1Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgInJldMOpbiBlbCBwYXF1ZXQgYmFpeGF0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY2Cittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgInBlcm1ldCBsJ2FjdHVhbGl0emFjacOzIGRlIGxhIHJlZmVyw6huY2lhIEhFQUQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjkgYnVpbHRpbi9mZXRjaC5jOjE3NSBidWlsdGluL3B1bGwuYzoyMjgKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIgorbXNnc3RyICJhcHJvZnVuZGVpeCBsYSBoaXN0w7JyaWEgZCd1biBjbG9uIHN1cGVyZmljaWFsIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcxCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyByZXBvc2l0b3J5IGJhc2VkIG9uIHRpbWUiCittc2dzdHIgImFwcm9mdW5kZWl4IGxhIGhpc3TDsnJpYSBkJ3VuIGNsb24gc3VwZXJmaWNpYWwgYmFzYXQgZW4gdGVtcHMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzcgYnVpbHRpbi9wdWxsLmM6MjMxCittc2dpZCAiY29udmVydCB0byBhIGNvbXBsZXRlIHJlcG9zaXRvcnkiCittc2dzdHIgImNvbnZlcnRlaXggZW4gdW4gZGlww7JzaXQgY29tcGxldCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MAorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgImFudGVwb3NhIGFpeMOyIGEgbGEgc29ydGlkYSBkZSBjYW3DrSBkZWwgc3VibcOyZHVsIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgzCittc2dpZCAiIgorImRlZmF1bHQgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIChsb3dlciBwcmlvcml0eSB0aGFuIGNvbmZpZyAiCisiZmlsZXMpIgorbXNnc3RyICIiCisicGVyIGRlZmVjdGUgcGVyIGEgbCdvYnRlbmNpw7MgcmVjdXJzaXZhIGRlIHN1Ym3DsmR1bHMgKHByaW9yaXRhdCBtw6lzIGJhaXhhIHF1ZSAiCisiZWxzIGZpdHhlcnMgZGUgY29uZmlndXJhY2nDsykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODcgYnVpbHRpbi9wdWxsLmM6MjM0Cittc2dpZCAiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IgorbXNnc3RyICJhY2NlcHRhIGxlcyByZWZlcsOobmNpZXMgcXVlIGFjdHVhbGl0emluIC5naXQvc2hhbGxvdyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OCBidWlsdGluL3B1bGwuYzoyMzYKK21zZ2lkICJyZWZtYXAiCittc2dzdHIgIm1hcGEgZGUgcmVmZXLDqG5jaWVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg5IGJ1aWx0aW4vcHVsbC5jOjIzNworbXNnaWQgInNwZWNpZnkgZmV0Y2ggcmVmbWFwIgorbXNnc3RyICJlc3BlY8OtZmljYSBsJ29idGVuY2nDsyBkZWwgbWFwYSBkZSByZWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxOTYKK21zZ2lkICJyZXBvcnQgdGhhdCB3ZSBoYXZlIG9ubHkgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0aGlzIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk5CisjLCBmdXp6eQorbXNnaWQgInJ1biAnZ2MgLS1hdXRvJyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAicG9kYSBlbHMgcmVtb3RzIGRlc3Byw6lzIGQnb2J0ZW5pci1sb3MiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDEgYnVpbHRpbi9wdWxsLmM6MjQ2Cittc2dpZCAiY2hlY2sgZm9yIGZvcmNlZC11cGRhdGVzIG9uIGFsbCB1cGRhdGVkIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDMKKyMsIGZ1enp5Cittc2dpZCAid3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAicG9kYSBlbHMgcmVtb3RzIGRlc3Byw6lzIGQnb2J0ZW5pci1sb3MiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MTMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCB0cm9iYXIgbGEgcmVmZXLDqG5jaWEgSEVBRCByZW1vdGEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlndXJhdGlvbiBmZXRjaC5vdXRwdXQgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAlcyIKK21zZ3N0ciAibGEgY29uZmlndXJhY2nDsyBmZXRjaC5vdXRwdXQgY29udMOpIHVuIHZhbG9yIG5vIHbDoGxpZCAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1MQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICJvYmplY3RlICVzIG5vIHRyb2JhdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1NQorbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW2FsIGRpYV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NjggYnVpbHRpbi9mZXRjaC5jOjc4NCBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiW3JlYnV0amF0XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2OQorbXNnaWQgImNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJubyBlcyBwb3Qgb2J0ZW5pciBlbiBsYSBicmFuY2EgYWN0dWFsIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzc5Cittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICJbYWN0dWFsaXR6YWNpw7MgZCdldGlxdWV0YV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODAgYnVpbHRpbi9mZXRjaC5jOjgxNyBidWlsdGluL2ZldGNoLmM6ODM5CisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYWN0dWFsaXR6YXIgbGEgcmVmZXLDqG5jaWEgbG9jYWwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODQKK21zZ2lkICJ3b3VsZCBjbG9iYmVyIGV4aXN0aW5nIHRhZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODA2Cittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICJbZXRpcXVldGEgbm92YV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDkKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIlticmFuY2Egbm92YV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MTIKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIltyZWZlcsOobmNpYSBub3ZhXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg1MQorbXNnaWQgImZvcmNlZCB1cGRhdGUiCittc2dzdHIgImFjdHVhbGl0emFjacOzIGZvcsOnYWRhIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAic2Vuc2UgYXZhbsOnIHLDoHBpZCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg3NworbXNnaWQgIiIKKyJGZXRjaCBub3JtYWxseSBpbmRpY2F0ZXMgd2hpY2ggYnJhbmNoZXMgaGFkIGEgZm9yY2VkIHVwZGF0ZSxcbiIKKyJidXQgdGhhdCBjaGVjayBoYXMgYmVlbiBkaXNhYmxlZC4gVG8gcmUtZW5hYmxlLCB1c2UgJy0tc2hvdy1mb3JjZWQtdXBkYXRlcydcbiIKKyJmbGFnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gY2hlY2sgZm9yY2VkIHVwZGF0ZXMuIFlvdSBjYW4gdXNlXG4iCisiJy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcycgb3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzICIKKyJmYWxzZSdcbiIKKyIgdG8gYXZvaWQgdGhpcyBjaGVjay5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHNcbiIKK21zZ3N0ciAiJXMgbm8gaGEgZW52aWF0IHRvdHMgZWxzIG9iamVjdGVzIG5lY2Vzc2FyaXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkzMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWplY3QgJXMgYmVjYXVzZSBzaGFsbG93IHJvb3RzIGFyZSBub3QgYWxsb3dlZCB0byBiZSB1cGRhdGVkIgorbXNnc3RyICIiCisicmVidXRqYSAlcyBwZXJxdcOoIG5vIGVzIHBlcm1ldCBxdWUgbGVzIGFycmVscyBzdXBlcmZpY2lhbHMgcydhY3R1YWxpdHppbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMTcgYnVpbHRpbi9mZXRjaC5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIkRlICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorImFsZ3VuZXMgcmVmZXLDqG5jaWVzIGxvY2FscyBubyBzJ2hhbiBwb2d1dCBhY3R1YWxpdHphcjtcbiIKKyIgaW50ZW50ZXUgZXhlY3V0YXIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHBlciBhIGVsaW1pbmFyXG4iCisiIHF1YWxzZXZvbCBicmFuY2EgYW50aWdhIG8gY29uZmxpY3RpdmEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyBlcyB0b3JuYXLDoCBwZW5qYW50KSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMgcydoYSB0b3JuYXQgcGVuamFudCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU4Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICJbc3VwcmltaXRdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE1OSBidWlsdGluL3JlbW90ZS5jOjEwMzUKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIihjYXApIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIlMnZXN0w6AgcmVmdXNhbnQgb2J0ZW5pciBlbiBsYSBicmFuY2EgYWN0dWFsICVzIGQndW4gZGlww7JzaXQgbm8gbnUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIkwnb3BjacOzIMKrJXPCuyBhbWIgdmFsb3Igwqslc8K7IG5vIMOpcyB2w6BsaWRhIHBlciBhICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgIlMnaWdub3JhIGwnb3BjacOzIMKrJXPCuyBwZXIgYSAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQxMgorbXNnaWQgIm11bHRpcGxlIGJyYW5jaGVzIGRldGVjdGVkLCBpbmNvbXBhdGlibGUgd2l0aCAtLXNldC11cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQyNworIywgZnV6enkKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAibGEgYnJhbmNhIGZvbnQgwqslc8K7IG5vIHMnZW1tYWdhdHplbWEgY29tIGEgYnJhbmNhIGFtYiBzZWd1aW1lbnQgcmVtb3QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDI5CisjLCBmdXp6eQorbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSB0YWciCittc2dzdHIgImVzdGFibGVpeCBsYSBmb250IHBlciBhIGdpdCBwdWxsL3N0YXR1cyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzEKKyMsIGZ1enp5Cittc2dpZCAidW5rbm93biBicmFuY2ggdHlwZSIKK21zZ3N0ciAidGlwdXMgZCdvYmplY3RlIGRlc2NvbmVndXQgJWQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMzCittc2dpZCAiIgorIm5vIHNvdXJjZSBicmFuY2ggZm91bmQuXG4iCisieW91IG5lZWQgdG8gc3BlY2lmeSBleGFjdGx5IG9uZSBicmFuY2ggd2l0aCB0aGUgLS1zZXQtdXBzdHJlYW0gb3B0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU1OSBidWlsdGluL2ZldGNoLmM6MTYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICJTJ2VzdMOgIG9idGVuaW50ICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTY5IGJ1aWx0aW4vZmV0Y2guYzoxNjI0IGJ1aWx0aW4vcmVtb3RlLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnRlbmlyICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZldGNoICclcycgKGV4aXQgY29kZTogJWQpXG4iCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXN0YWJsaXIgwqslc8K7IGEgwqslc8K7IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY4NAorbXNnaWQgIiIKKyJObyByZW1vdGUgcmVwb3NpdG9yeSBzcGVjaWZpZWQuICBQbGVhc2UsIHNwZWNpZnkgZWl0aGVyIGEgVVJMIG9yIGFcbiIKKyJyZW1vdGUgbmFtZSBmcm9tIHdoaWNoIG5ldyByZXZpc2lvbnMgc2hvdWxkIGJlIGZldGNoZWQuIgorbXNnc3RyICIiCisiQ2FwIGRpcMOyc2l0IHJlbW90IGVzcGVjaWZpY2F0LiBFc3BlY2lmaXF1ZXUgdW4gVVJMIG9cbiIKKyJ1biBub20gcmVtb3QgZGVsIHF1YWwgZXMgZGV1ZW4gb2J0ZW5pciBsZXMgcmV2aXNpb25zIG5vdmVzLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MjEKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICJOZWNlc3NpdGV1IGVzcGVjaWZpY2FyIHVuIG5vbSBkJ2V0aXF1ZXRhLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NzEKK21zZ2lkICJOZWdhdGl2ZSBkZXB0aCBpbiAtLWRlZXBlbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJObyBzJ2FkbWV0IHVuYSBwcm9mdW5kaXRhdCBuZWdhdGl2YSBlbiAtLWRlZXBlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NzMKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWRlZXBlbiBpIC0tZGVwdGggc8OzbiBtw7p0dWFtZW50IGV4Y2xvZW50cyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NzgKK21zZ2lkICItLWRlcHRoIGFuZCAtLXVuc2hhbGxvdyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLS1kZXB0aCBpIC0tdW5zaGFsbG93IG5vIGVzIHBvZGVuIHVzYXIganVudHMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzgwCittc2dpZCAiLS11bnNoYWxsb3cgb24gYSBjb21wbGV0ZSByZXBvc2l0b3J5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tdW5zaGFsbG93IGVuIHVuIGRpcMOyc2l0IGNvbXBsZXQgbm8gdMOpIHNlbnRpdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3OTYKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwgbm8gYWNjZXB0YSB1biBwYXLDoG1ldHJlIGRlIGRpcMOyc2l0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc5OAorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwgbm8gdMOpIHNlbnRpdCBhbWIgZXNwZWNpZmljYWNpb25zIGRlIHJlZmVyw6huY2lhIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwNworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICJObyBleGlzdGVpeCB1biByZW1vdCBuaSB1biBncnVwIHJlbW90OiAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MTQKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIk9idGVuaXIgdW4gZ3J1cCBpIGVzcGVjaWZpY2FyIHJlZmVyw6huY2llcyBubyB0w6kgc2VudGl0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgzMgorbXNnaWQgIiIKKyItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSBjb25maWd1cmVkIGluIGV4dGVuc2lvbnMuIgorInBhcnRpYWxjbG9uZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzoxOAorbXNnaWQgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8ZmlsZT5dIgorbXNnc3RyICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtaXNzYXRnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaXR4ZXI+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc0Cittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICJlbXBsZW5hIGVsIHJlZ2lzdHJlIGFtYiA8bj4gZW50cmFkZXMgZGVsIHJlZ2lzdHJlIGN1cnQgY29tIGEgbcOgeGltIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzcKK21zZ2lkICJhbGlhcyBmb3IgLS1sb2cgKGRlcHJlY2F0ZWQpIgorbXNnc3RyICLDoGxpZXMgcGVyIC0tbG9nIChlbiBkZXPDunMpIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2ODAKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICJ0ZXh0IgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2ODEKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgInVzYSA8dGV4dD4gY29tIGEgaW5pY2kgZGUgbWlzc2F0Z2UiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY4MgorbXNnaWQgImZpbGUgdG8gcmVhZCBmcm9tIgorbXNnc3RyICJmaXR4ZXIgZGVsIHF1YWwgbGxlZ2lyIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wY2lvbnM+XSBbPHBhdHLDsz5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamVjdD5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZWN0ZT5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEyCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8Y29tbWl0Pl1dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21pc3Npw7M+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTMKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIFstLW5vLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIgorbXNnc3RyICIiCisiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPGNvbWlzc2nDsz5dXSBbLS1uby1jb250YWlucyBbPGNvbWlzc2nDsz5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIgorbXNnc3RyICIiCisicG9zYSBlbHMgbWFyY2Fkb3JzIGRlIHBvc2ljacOzIGRlIGZvcm1hIGFkZXF1YWRhIHBlciBhIGludMOocnByZXRzIGQnb3JkcmVzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMwCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBwZXJsIgorbXNnc3RyICJwb3NhIGVscyBtYXJjYWRvcnMgZGUgcG9zaWNpw7MgZW50cmUgY29tZXRlcyBhZGVxdWFkZXMgcGVyIGFsIHBlcmwiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzIKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHB5dGhvbiIKK21zZ3N0ciAicG9zYSBlbHMgbWFyY2Fkb3JzIGRlIHBvc2ljacOzIGVudHJlIGNvbWV0ZXMgYWRlcXVhZGVzIHBlciBhbCBweXRob24iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAicG9zYSBlbHMgbWFyY2Fkb3JzIGRlIHBvc2ljacOzIGVudHJlIGNvbWV0ZXMgYWRlcXVhZGVzIHBlciBhbCBUY2wiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzcKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAibW9zdHJhIG5vbcOpcyA8bj4gcmVmZXLDqG5jaWVzIGNvaW5jaWRlbnRzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM5IGJ1aWx0aW4vdGFnLmM6NDM5Cittc2dpZCAicmVzcGVjdCBmb3JtYXQgY29sb3JzIgorbXNnc3RyICJyZXNwZWN0YSBlbHMgY29sb3JzIGRlbCBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggcG9pbnRzIGF0IHRoZSBnaXZlbiBvYmplY3QiCittc2dzdHIgImltcHJpbWVpeCBub23DqXMgbGVzIHJlZmVyw6huY2llcyBxdWUgYXNzZW55YWxpbiBsJ29iamVjdGUgZG9uYXQiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDQKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyByZWZlcsOobmNpZXMgcXVlIHMnaGFuIGZ1c2lvbmF0IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ1Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgImltcHJpbWVpeCBub23DqXMgbGVzIHJlZmVyw6huY2llcyBxdWUgbm8gcydoYW4gZnVzaW9uYXQiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDYKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyByZWZlcsOobmNpZXMgcXVlIGNvbnRpbmd1aW4gbGEgY29taXNzacOzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ3Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiaW1wcmltZWl4IG5vbcOpcyBsZXMgcmVmZXLDqG5jaWVzIHF1ZSBubyBjb250aW5ndWluIGxhIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjggYnVpbHRpbi9mc2NrLmM6MTQ3IGJ1aWx0aW4vZnNjay5jOjE0OAorbXNnaWQgInVua25vd24iCittc2dzdHIgImRlc2NvbmVndXQiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIGVycm9yIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjEwMCBidWlsdGluL2ZzY2suYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gJXMgJXM6ICVzIgorbXNnc3RyICJlcnJvciBlbiAlcyAlczogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIHdhcm5pbmcgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmcgaW4gJXMgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE0MyBidWlsdGluL2ZzY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MTU1Cittc2dpZCAid3Jvbmcgb2JqZWN0IHR5cGUgaW4gbGluayIKK21zZ3N0ciAidGlwdXMgZCdvYmplY3RlIGluY29ycmVjdGUgZW4gbCdlbmxsYcOnIgorCisjOiBidWlsdGluL2ZzY2suYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImJyb2tlbiBsaW5rIGZyb20gJTdzICVzXG4iCisiICAgICAgICAgICAgICB0byAlN3MgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgJXMiCittc2dzdHIgIm1hbmNhICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWFjaGFibGUgJXMgJXMiCittc2dzdHIgImluYWJhc3RhYmxlICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImRhbmdsaW5nICVzICVzIgorbXNnc3RyICJTJ2VzdGFuIGFjdHVhbGl0emFudCAlcy4uJXNcbiIKKworIzogYnVpbHRpbi9mc2NrLmM6MzM5CisjLCBmdXp6eQorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbG9zdC1mb3VuZCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBlbCBmaXR4ZXIgwqslc8K7IgorCisjOiBidWlsdGluL2ZzY2suYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGZpbmFsaXR6YXIgwqslc8K7IgorCisjOiBidWlsdGluL2ZzY2suYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMiCittc2dzdHIgIlMnZXN0w6AgY29tcHJvdmFudCAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSAoJWQgb2JqZWN0cykiCittc2dzdHIgIlMnZXN0w6AgY29tcHJvdmFudCBsYSBjb25uZWN0aXZpdGF0ICglZCBvYmplY3RlcykiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyAlcyIKK21zZ3N0ciAiUydlc3TDoCBjb21wcm92YW50ICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0MjkKK21zZ2lkICJicm9rZW4gbGlua3MiCittc2dzdHIgImVubGxhw6dvcyB0cmVuY2F0cyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJvb3QgJXMiCittc2dzdHIgImFycmVsICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnZ2VkICVzICVzICglcykgaW4gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nIgorbXNnc3RyICIlczogb2JqZWN0ZSBjb3JydXB0ZSBvIG5vIHRyb2JhdCIKKworIzogYnVpbHRpbi9mc2NrLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHJlZmxvZyBlbnRyeSAlcyIKK21zZ3N0ciAiICVzOiBlbnRyYWRhIGRlIHJlZmVyw6huY2lhIG5vIHbDoGxpZGEgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUxNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVmbG9nICVzLT4lcyIKK21zZ3N0ciAiUydlc3TDoCBjb21wcm92YW50IGVsIGNhbnZpIGRlIG5vbSBkZSDCqyVzwrsgYSDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9mc2NrLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciAlcyIKK21zZ3N0ciAiJXM6IHB1bnRlciBzaGExIG5vIHbDoGxpZDogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm90IGEgY29tbWl0IgorbXNnc3RyICIlczogbm8gw6lzIHVuYSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYwOQorbXNnaWQgIm5vdGljZTogTm8gZGVmYXVsdCByZWZlcmVuY2VzIgorbXNnc3RyICJhdsOtczogbm8gaGkgaGEgcmVmZXLDqG5jaWVzIHBlciBkZWZlY3RlIgorCisjOiBidWlsdGluL2ZzY2suYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3Npbmc6ICVzIgorbXNnc3RyICIlczogb2JqZWN0ZSBjb3JydXB0ZSBvIG5vIHRyb2JhdDogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICVzIgorbXNnc3RyICIlczogbm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbCdvYmplY3RlOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaGExIGZpbGU6ICVzIgorbXNnc3RyICJmaXR4ZXIgc2hhMSBtYWxtw6hzOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjcyCittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yeSIKK21zZ3N0ciAiUydlc3TDoCBjb21wcm92YW50IGVsIGRpcmVjdG9yaSBkJ29iamVjdGUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3NQorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIKK21zZ3N0ciAiUydlc3RhbiBjb21wcm92YW50IGVscyBkaXJlY3RvcmlzIGQnb2JqZWN0ZSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIGxpbmsiCittc2dzdHIgIlMnZXN0w6AgY29tcHJvdmFudCBsJ2VubGxhw6cgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY5NSBidWlsdGluL2luZGV4LXBhY2suYzo4NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyIKK21zZ3N0ciAiJXMgbm8gdsOgbGlkIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyB0byBzb21ldGhpbmcgc3RyYW5nZSAoJXMpIgorbXNnc3RyICIlcyAtIG5vIMOpcyB1bmEgY29zYSBxdWUgcHVndWVtIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRldGFjaGVkIEhFQUQgcG9pbnRzIGF0IG5vdGhpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGljZTogJXMgcG9pbnRzIHRvIGFuIHVuYm9ybiBicmFuY2ggKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjQKK21zZ2lkICJDaGVja2luZyBjYWNoZSB0cmVlIgorbXNnc3RyICJTJ2VzdMOgIGNvbXByb3ZhbnQgbCdhcmJyZSBkZSBsYSBtZW3DsnJpYSBjYXUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyIGluIGNhY2hlLXRyZWUiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gYWN0dWFsaXR6YXIgbCdhcmJyZSBwcmluY2lwYWwgZGUgbWVtw7JyaWEgY2F1IgorCisjOiBidWlsdGluL2ZzY2suYzo3MzgKK21zZ2lkICJub24tdHJlZSBpbiBjYWNoZS10cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc2OQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs8b3BjaW9ucz5dIFs8b2JqZWN0ZT4uLi5dIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzUKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIm1vc3RyYSBlbHMgb2JqZWN0ZXMgaW5hYmFzdGFibGVzIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzYKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgIm1vc3RyYSBlbHMgb2JqZWN0ZXMgcGVuamFudHMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NworbXNnaWQgInJlcG9ydCB0YWdzIgorbXNnc3RyICJpbmZvcm1hIGRlIGxlcyBldGlxdWV0ZXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3OAorbXNnaWQgInJlcG9ydCByb290IG5vZGVzIgorbXNnc3RyICJpbmZvcm1hIGRlbHMgbm9kZXMgZCdhcnJlbCIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc5Cittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgImZlcyBlbHMgb2JqZWN0ZXMgZCfDrW5kZXggbm9kZXMgZGUgY2FwIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODAKK21zZ2lkICJtYWtlIHJlZmxvZ3MgaGVhZCBub2RlcyAoZGVmYXVsdCkiCittc2dzdHIgImZlcyBxdWUgZWxzIHJlZ2lzdHJlcyBkZSByZWZlcsOobmNpZXMgc2lndWluIG5vZGVzIGRlIGNhcCAocGVyIGRlZmVjdGUpIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODEKK21zZ2lkICJhbHNvIGNvbnNpZGVyIHBhY2tzIGFuZCBhbHRlcm5hdGUgb2JqZWN0cyIKK21zZ3N0ciAidGFtYsOpIGNvbnNpZGVyYSBlbHMgcGFxdWV0cyBpIGVscyBvYmplY3RlcyBhbHRlcm5hdGl1cyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgyCittc2dpZCAiY2hlY2sgb25seSBjb25uZWN0aXZpdHkiCittc2dzdHIgImNvbXByb3ZhIG5vbcOpcyBsYSBjb25uZWN0aXZpdGF0IgorCisjOiBidWlsdGluL2ZzY2suYzo3ODMKK21zZ2lkICJlbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmciCittc2dzdHIgImhhYmlsaXRhIGxhIGNvbXByb3ZhY2nDsyBtw6lzIGVzdHJpY3RhIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODUKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAiZXNjcml1IG9iamVjdGVzIHBlbmphbnRzIGEgLmdpdC9sb3N0LWZvdW5kIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODYgYnVpbHRpbi9wcnVuZS5jOjEzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgIm1vc3RyYSBlbCBwcm9ncsOpcyIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg3Cittc2dpZCAic2hvdyB2ZXJib3NlIG5hbWVzIGZvciByZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAibW9zdHJhIGVscyBub21zIGRldGFsbGF0cyBkZWxzIG9iamVjdGVzIGFiYXN0YWJsZXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg0NiBidWlsdGluL2luZGV4LXBhY2suYzoyMjUKK21zZ2lkICJDaGVja2luZyBvYmplY3RzIgorbXNnc3RyICJTJ2VzdGFuIGNvbXByb3ZhbnQgZWxzIG9iamVjdGVzIgorCisjOiBidWlsdGluL2ZzY2suYzo4NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgbWlzc2luZyIKK21zZ3N0ciAibW9zdHJhIGxhIG1pZGEgZGUgbCdvYmplY3RlIgorCisjOiBidWlsdGluL2ZzY2suYzo4ODUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyOiBleHBlY3RlZCBzaGExLCBnb3QgJyVzJyIKK21zZ3N0ciAicydlc3BlcmF2YSBzaGFsbG93L3Vuc2hhbGxvdywgcydoYSByZWJ1dCAlcyIKKworIzogYnVpbHRpbi9nYy5jOjM1Cittc2dpZCAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZ2MgWzxvcGNpb25zPl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZnN0YXQgJXM6ICVzIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGZlciBmc3RhdCAlczogJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzoxMjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAnJXMnIHZhbHVlICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbW91cmUgwqslc8K7IGEgwqslc8K7IgorCisjOiBidWlsdGluL2djLmM6NDc1IGJ1aWx0aW4vaW5pdC1kYi5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBmZXIgc3RhdCBlbiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0ODQgYnVpbHRpbi9ub3Rlcy5jOjI0MCBidWlsdGluL3RhZy5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIMKrJXPCuyIKKworIzogYnVpbHRpbi9nYy5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGxhc3QgZ2MgcnVuIHJlcG9ydGVkIHRoZSBmb2xsb3dpbmcuIFBsZWFzZSBjb3JyZWN0IHRoZSByb290IGNhdXNlXG4iCisiYW5kIHJlbW92ZSAlcy5cbiIKKyJBdXRvbWF0aWMgY2xlYW51cCB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgdW50aWwgdGhlIGZpbGUgaXMgcmVtb3ZlZC5cbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkwnw7psdGltYSBleGVjdWNpw7MgZGUgZ2MgaGEgaW5mb3JtYXQgZWwgc2Vnw7xlbnQuIENvcnJlZ2l1XG4iCisibGEgY2F1c2EgcHJpbW9yZGlhbCBpIGVsaW1pbmV1ICVzLlxuIgorIk5vIGVzIHJlYWxpdHphcsOgIGxhIG5ldGVqYSBhdXRvbcOgdGljYSBmaW5zIHF1ZSBzJ2VsaW1pbmkgZWwgZml0eGVyLlxuIgorIlxuIgorIiVzIgorCisjOiBidWlsdGluL2djLmM6NTM5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgInBvZGEgb2JqZWN0ZXMgc2Vuc2UgcmVmZXLDqG5jaWEiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDEKK21zZ2lkICJiZSBtb3JlIHRob3JvdWdoIChpbmNyZWFzZWQgcnVudGltZSkiCittc2dzdHIgInNpZ3VlcyBtw6lzIGV4aGF1c3RpdSAoZWwgdGVtcHMgZCdleGVjdWNpw7MgYXVnbWVudGEpIgorCisjOiBidWlsdGluL2djLmM6NTQyCittc2dpZCAiZW5hYmxlIGF1dG8tZ2MgbW9kZSIKK21zZ3N0ciAiaGFiaWxpdGEgZWwgbW9kZSBkZSByZWNvbGxpZGEgZCdlc2NvbWJyYXJpZXMgYXV0b23DoHRpY2EiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDUKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAiZm9yw6dhIGwnZXhlY3VjacOzIGRlIGdjIGVuY2FyYSBxdWUgaGkgcHVndWkgaGF2ZXIgdW4gYWx0cmUgZ2MgZXhlY3V0YW50IgorCisjOiBidWlsdGluL2djLmM6NTQ4Cittc2dpZCAicmVwYWNrIGFsbCBvdGhlciBwYWNrcyBleGNlcHQgdGhlIGxhcmdlc3QgcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NTY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgZ2MubG9nZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBlbCB2YWxvciBnYy5sb2dleHBpcnkgJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBwcnVuZSBleHBpcnkgdmFsdWUgJXMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGVsIHZhbG9yIGdjLmxvZ2V4cGlyeSAlcyIKKworIzogYnVpbHRpbi9nYy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaW4gYmFja2dyb3VuZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiIgorIlMnZXN0w6AgZW1wYXF1ZXRhbnQgZWwgZGlww7JzaXQgYXV0b23DoHRpY2FtZW50IGVuIGVsIHJlcmVmb25zIHBlciBhIHVuICIKKyJyZW5kaW1lbnQgw7JwdGltLlxuIgorCisjOiBidWlsdGluL2djLmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiIgorIlMnZXN0w6AgZW1wYXF1ZXRhbnQgYXV0b23DoHRpY2FtZW50IGVsIGRpcMOyc2l0IHBlciBhIHVuIHJlbmRpbWVudCDDsnB0aW0uXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIKK21zZ3N0ciAiVmVnZXUgwqtnaXQgaGVscCBnY8K7IHBlciBhIG5ldGVqYSBtYW51YWwuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCittc2dzdHIgIiIKKyJnYyBqYSBzJ2VzdMOgIGV4ZWN1dGFudCBlbiBsYSBtw6BxdWluYSDCqyVzwrsgcGlkICU8UFJJdU1BWD4gKHVzZXUgLS1mb3JjZSBzaSBubykiCisKKyM6IGJ1aWx0aW4vZ2MuYzo2OTQKK21zZ2lkICIiCisiVGhlcmUgYXJlIHRvbyBtYW55IHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHM7IHJ1biAnZ2l0IHBydW5lJyB0byByZW1vdmUgdGhlbS4iCittc2dzdHIgIiIKKyJIaSBoYSBtYXNzYSBvYmplY3RlcyBzb2x0cyBpbmFiYXN0YWJsZXM7IGV4ZWN1dGV1ICdnaXQgcHJ1bmUnIHBlciBhIGVsaW1pbmFyLSIKKyJsb3MuIgorCisjOiBidWlsdGluL2dyZXAuYzoyOQorbXNnaWQgImdpdCBncmVwIFs8b3B0aW9ucz5dIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGdyZXAgWzxvcGNpb25zPl0gWy1lXSA8cGF0csOzPiBbPHJldmlzacOzPi4uLl0gW1stLV0gPGNhbcOtPi4uLl0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXA6IHMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY3JlYXIgZmlsOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkgZm9yICVzIgorbXNnc3RyICJzJ2hhIGVzcGVjaWZpY2F0IHVuIG5vbWJyZSBkZSBmaWxzIG5vIHbDoGxpZCAoJWQpIHBlciBhICVzIgorCisjLiBUUkFOU0xBVE9SUzogJXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24KKyMuIHZhcmlhYmxlIGZvciB0d2Vha2luZyB0aHJlYWRzLCBjdXJyZW50bHkKKyMuIGdyZXAudGhyZWFkcworIy4KKyM6IGJ1aWx0aW4vZ3JlcC5jOjI4NyBidWlsdGluL2luZGV4LXBhY2suYzoxNTM0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MjcKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIgorbXNnc3RyICJubyBoaSBoYSBzdXBvcnQgZGUgZmlscywgcydlc3TDoCBpZ25vcmFudCAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NDY3IGJ1aWx0aW4vZ3JlcC5jOjU5MiBidWlsdGluL2dyZXAuYzo2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBsJ2FyYnJlICglcykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICJubyBlcyBwb3QgZmVyIGdyZXAgZGVzIGQndW4gb2JqZWN0ZSBkZSB0aXB1cyAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgImwnb3BjacOzIMKrJWPCuyBlc3BlcmEgdW4gdmFsb3IgbnVtw6hyaWMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNQorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgImNlcmNhIGVuIGwnw61uZGV4IGVuIGxsb2MgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTcKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAiY2VyY2EgZW4gY29udGluZ3V0cyBubyBnZXN0aW9uYXRzIHBlciBnaXQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxOQorbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiY2VyY2EgdGFudCBlbiBmaXR4ZXJzIHNlZ3VpdHMgY29tIGVuIG5vIHNlZ3VpdHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMQorbXNnaWQgImlnbm9yZSBmaWxlcyBzcGVjaWZpZWQgdmlhICcuZ2l0aWdub3JlJyIKK21zZ3N0ciAiaWdub3JhIGVscyBmaXR4ZXJzIGVzcGVjaWZpY2F0cyBtaXRqYW7Dp2FudCAnLmdpdGlnbm9yZSciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMworbXNnaWQgInJlY3Vyc2l2ZWx5IHNlYXJjaCBpbiBlYWNoIHN1Ym1vZHVsZSIKK21zZ3N0ciAiY2VyY2EgcmVjdXJzaXZhbWVudCBhIGNhZGEgc3VibcOyZHVsIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjYKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAibW9zdHJhIGxlcyBsw61uaWVzIG5vIGNvaW5jaWRlbnRzIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjgKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICJjb2luY2lkw6huY2lhIGluc2Vuc2libGUgYSBtYWrDunNjdWxhIGkgbWluw7pzY3VsYSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODMwCittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgImNvaW5jaWRlaXggYW1iIGVscyBwYXRyb25zIG5vbcOpcyBhbHMgbMOtbWl0cyBkZSBwYXJhdWxhIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzIKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICJwcm9jZXNzYSBlbHMgZml0eGVycyBiaW5hcmlzIGNvbSBhIHRleHQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNAorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAibm8gY29pbmNpZGVpeGlzIGFtYiBlbHMgcGF0cm9ucyBlbiBlbHMgZml0eGVycyBiaW5hcmlzIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzcKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyB3aXRoIHRleHRjb252IGZpbHRlcnMiCittc2dzdHIgInByb2Nlc3NhIGVscyBmaXR4ZXJzIGJpbmFyaXMgYW1iIGZpbHRyZXMgZGUgdGV4dGNvbnYiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzOQorbXNnaWQgInNlYXJjaCBpbiBzdWJkaXJlY3RvcmllcyAoZGVmYXVsdCkiCittc2dzdHIgImNlcmNhIGFscyBzdWJkaXJlY3RvcmllcyAocGVyIGRlZmVjdGUpIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDEKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgImRlc2NlbmRlaXggY29tIGEgbcOgeGltIDxwcm9mdW5kaXRhdD4gbml2ZWxscyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ1Cittc2dpZCAidXNlIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgInVzYSBsZXMgZXhwcmVzc2lvbnMgcmVndWxhcnMgUE9TSVggYW1wbGlhZGVzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDgKK21zZ2lkICJ1c2UgYmFzaWMgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyAoZGVmYXVsdCkiCittc2dzdHIgInVzYSBsZXMgZXhwcmVzc2lvbnMgcmVndWxhcnMgUE9TSVggYsOgc2lxdWVzIChwZXIgZGVmZWN0ZSkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MQorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICJpbnRlcnByZXRhIGVscyBwYXRyb25zIGNvbSBhIGNhZGVuZXMgZml4ZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NAorbXNnaWQgInVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAidXNhIGxlcyBleHByZXNzaW9ucyByZWd1bGFycyBjb21wYXRpYmxlcyBhbWIgUGVybCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU3Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgIm1vc3RyYSBlbHMgbsO6bWVyb3MgZGUgbMOtbmlhIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTgKK21zZ2lkICJzaG93IGNvbHVtbiBudW1iZXIgb2YgZmlyc3QgbWF0Y2giCittc2dzdHIgIm1vc3RyYSBlbCBub21icmUgZGUgY29sdW1uYSBkZSBsYSBwcmltZXJhIGNvaW5jaWTDqG5jaWEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1OQorbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICJubyBtb3N0cmlzIGVscyBub21zIGRlIGZpdHhlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYwCittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIm1vc3RyYSBlbHMgbm9tcyBkZSBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MgorbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgIm1vc3RyYSBlbHMgbm9tcyBkZSBmaXR4ZXIgcmVsYXRpdXMgYWwgZGlyZWN0b3JpIHN1cGVyaW9yIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjQKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIm1vc3RyYSBub23DqXMgZWxzIG5vbXMgZGUgZml0eGVyIGVuIGxsb2MgZGUgbGVzIGzDrW5pZXMgY29pbmNpZGVudHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NgorbXNnaWQgInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorbXNnc3RyICJzaW7Dsm5pbSBkZSAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY5Cittc2dpZCAic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIgorbXNnc3RyICJtb3N0cmEgbm9tw6lzIGVscyBub21zIGRlbHMgZml0eGVycyBzZW5zZSBjb2luY2lkw6huY2lhIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzEKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICJpbXByaW1laXggTlVMIGRlc3Byw6lzIGRlbHMgbm9tcyBkZSBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NAorbXNnaWQgInNob3cgb25seSBtYXRjaGluZyBwYXJ0cyBvZiBhIGxpbmUiCittc2dzdHIgIm1vc3RyYSBub23DqXMgbGVzIHBhcnRzIGRlIGNvaW5jaWRlbnRzIGRlIGxhIGzDrW5pYSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc2Cittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAibW9zdHJhIGVsIG5vbWJyZSBkZSBjb2luY2lkw6huY2llcyBlbiBsbG9jIGRlIGxlcyBsw61uaWVzIGNvaW5jaWRlbnRzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzcKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAicmVzc2FsdGEgbGVzIGNvaW5jaWTDqG5jaWVzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzkKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAiaW1wcmltZWl4IHVuYSBsw61uaWEgYnVpZGEgZW50cmUgY29pbmNpZMOobmNpZXMgZGUgZml0eGVycyBkaXN0aW50cyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgxCittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAiIgorIm1vc3RyYSBlbCBub20gZGUgZml0eGVyIG5vbcOpcyB1bmEgdmVnYWRhIGEgZGFsdCBkZSBsZXMgY29pbmNpZMOobmNpZXMgZGVsICIKKyJtYXRlaXggZml0eGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODQKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAibW9zdHJhIDxuPiBsw61uaWVzIGRlIGNvbnRleHQgYWJhbnMgaSBkZXNwcsOpcyBkJ3VuYSBjb2luY2lkw6huY2lhIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODcKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICJtb3N0cmEgPG4+IGzDrW5pZXMgZGUgY29udGV4dCBhYmFucyBkJ3VuYSBjb2luY2lkw6huY2lhIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODkKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIm1vc3RyYSA8bj4gbMOtbmllcyBkZSBjb250ZXh0IGRlc3Byw6lzIGQndW5hIGNvaW5jaWTDqG5jaWEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MQorbXNnaWQgInVzZSA8bj4gd29ya2VyIHRocmVhZHMiCittc2dzdHIgInVzYSA8bj4gZmlscyBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTIKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICJkcmVjZXJhIHBlciAtQyBOVU0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5NQorbXNnaWQgInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIm1vc3RyYSB1bmEgbMOtbmlhIGFtYiBlbCBub20gZGUgZnVuY2nDsyBhYmFucyBkZSBsZXMgY29pbmNpZMOobmNpZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5NworbXNnaWQgInNob3cgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIgorbXNnc3RyICJtb3N0cmEgbGEgZnVuY2nDsyBjaXJjdW1kYW50IgorCisjOiBidWlsdGluL2dyZXAuYzo5MDAKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIKK21zZ3N0ciAibGxlZ2VpeCBlbHMgcGF0cm9ucyBkZXMgZCd1biBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMgorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiY29pbmNpZGVpeCBhbWIgPHBhdHLDsz4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwNAorbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgImNvbWJpbmEgZWxzIHBhdHJvbnMgZXNwZWNpZmljYXRzIGFtYiAtZSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTE2Cittc2dpZCAiaW5kaWNhdGUgaGl0IHdpdGggZXhpdCBzdGF0dXMgd2l0aG91dCBvdXRwdXQiCittc2dzdHIgImluZGljYSBjb2luY2lkw6huY2lhIGFtYiBlc3RhdCBkZSBzb3J0aWRhIHNlbnNlIHNvcnRpZGEgdGV4dHVhbCIKKworIzogYnVpbHRpbi9ncmVwLmM6OTE4Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIKK21zZ3N0ciAiIgorIm1vc3RyYSBub23DqXMgbGVzIGNvaW5jaWTDqG5jaWVzIGRlbHMgZml0eGVycyBxdWUgY29pbmNpZGVpeGluIGFtYiB0b3RzIGVscyAiCisicGF0cm9ucyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTIwCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgIm1vc3RyYSBsJ2FyYnJlIGQnYW7DoGxpc2kgZGUgbCdleHByZXNzacOzIGdyZXAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyNAorbXNnaWQgInBhZ2VyIgorbXNnc3RyICJwYWdpbmFkb3IiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyNAorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICJtb3N0cmEgZWxzIGZpdHhlcnMgY29pbmNpZGVudHMgZW4gZWwgcGFnaW5hZG9yIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjgKK21zZ2lkICJhbGxvdyBjYWxsaW5nIG9mIGdyZXAoMSkgKGlnbm9yZWQgYnkgdGhpcyBidWlsZCkiCittc2dzdHIgInBlcm1ldCBsYSBpbnZvY2FjacOzIGRlIGdyZXAoMSkgKGlnbm9yYXQgcGVyIGFxdWVzdGEgY29tcGlsYWNpw7MpIgorCisjOiBidWlsdGluL2dyZXAuYzo5OTIKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuIgorbXNnc3RyICJubyBzJ2hhIGRvbmF0IGNhcCBwYXRyw7MiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMjgKK21zZ2lkICItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cyIKK21zZ3N0ciAiLS1uby1pbmRleCBvIC0tdW50cmFja2VkIG5vIGVzIHBvdCB1c2FyIGFtYiByZXZpc2lvbnMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgcmV2aXNpb246ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIGxhIHJldmlzacOzOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2NworbXNnaWQgImludmFsaWQgb3B0aW9uIGNvbWJpbmF0aW9uLCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgImNvbWJpbmFjacOzIGQnb3BjaW9ucyBubyB2w6BsaWRhLCBzJ2VzdMOgIGlnbm9yYW50IC0tdGhyZWFkcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDAKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAibm8gaGkgaGEgc3Vwb3J0IGRlIGZpbHMsIHMnZXN0w6AgaWdub3JhbnQgLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDczIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzEgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgInMnaGEgZXNwZWNpZmljYXQgdW4gbm9tYnJlIGRlIGZpbHMgbm8gdsOgbGlkICglZCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwOTYKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBub23DqXMgZnVuY2lvbmEgZW4gbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTE5Cittc2dpZCAib3B0aW9uIG5vdCBzdXBwb3J0ZWQgd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIKK21zZ3N0ciAib3BjacOzIG5vIGFkbWVzYSBhbWIgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMjUKK21zZ2lkICItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIi0tY2FjaGVkIG8gLS11bnRyYWNrZWQgbm8gZXMgcG90IHVzYXIgYW1iIC0tbm8taW5kZXguIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTMxCisjLCBmdXp6eQorbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzIgorbXNnc3RyICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBubyBlcyBwb3QgdXNhciBwZXIgYWxzIGNvbnRpbmd1dHMgc2VndWl0cy4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzkKKyMsIGZ1enp5Cittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuIgorbXNnc3RyICJzJ2hhbiBkb25hdCBhbWJkw7NzIC0tY2FjaGVzIGkgYXJicmVzLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg1Cittc2dpZCAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGZpbGU+Li4uIgorbXNnc3RyICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dGlwdXM+XSBbLXddIFstLXBhdGg9PGZpdHhlcj4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8Zml0eGVyPi4uLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg2Cittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICJ0aXB1cyBkJ29iamVjdGUiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJlc2NyaXUgbCdvYmplY3RlIGEgbGEgYmFzZSBkZSBkYWRlcyBkJ29iamVjdGVzIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAxCittc2dpZCAicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iCittc2dzdHIgImxsZWdlaXggbCdvYmplY3RlIGRlcyBkZSBzdGRpbiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMworbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICJlbW1hZ2F0emVtYSBlbCBmaXR4ZXIgdGFsIGNvbSDDqXMgc2Vuc2UgZmlsdHJlcyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNAorbXNnaWQgIiIKKyJqdXN0IGhhc2ggYW55IHJhbmRvbSBnYXJiYWdlIHRvIGNyZWF0ZSBjb3JydXB0IG9iamVjdHMgZm9yIGRlYnVnZ2luZyBHaXQiCittc2dzdHIgIiIKKyJub23DqXMgc3VtYSBxdWFsc2V2b2wgYnJvc3NhIGFsZWF0w7JyaWEgcGVyIGEgY3JlYXIgb2JqZWN0ZXMgbWFsbWVzb3MgcGVyIGEgIgorImRlcHVyYXIgYWwgR2l0IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1Cittc2dpZCAicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiCittc2dzdHIgInByb2Nlc3NhIGVsIGZpdHhlciBjb20gc2kgZm9zIGQnYXF1ZXN0IGNhbcOtIgorCisjOiBidWlsdGluL2hlbHAuYzo0NgorbXNnaWQgInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiCittc2dzdHIgImltcHJpbWVpeCB0b3RlcyBsZXMgb3JkcmVzIGRpc3BvbmlibGVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NworbXNnaWQgImV4Y2x1ZGUgZ3VpZGVzIgorbXNnc3RyICJleGNsb3UgZ3VpZXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ4Cittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICJpbXByaW1laXggbGEgbGxpc3RhIGRlIGd1aWVzIMO6dGlscyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkKKyMsIGZ1enp5Cittc2dpZCAicHJpbnQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMiCittc2dzdHIgIm5vIGVzIHBvdCBjcmVhciBlbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyAlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NTEKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICJtb3N0cmEgbGEgcMOgZ2luYSBkZSBtYW51YWwiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUyCittc2dpZCAic2hvdyBtYW51YWwgaW4gd2ViIGJyb3dzZXIiCittc2dzdHIgIm1vc3RyYSBsYSBww6BnaW5hIGRlIG1hbnVhbCBlbiBlbCBuYXZlZ2Fkb3Igd2ViIgorCisjOiBidWlsdGluL2hlbHAuYzo1NAorbXNnaWQgInNob3cgaW5mbyBwYWdlIgorbXNnc3RyICJtb3N0cmEgbGEgcMOgZ2luYSBkJ2luZm9ybWFjacOzIgorCisjOiBidWlsdGluL2hlbHAuYzo1NgorIywgZnV6enkKK21zZ2lkICJwcmludCBjb21tYW5kIGRlc2NyaXB0aW9uIgorbXNnc3RyICJpbXByaW1laXggZWxzIGNvbnRpbmd1dHMgZGUgbGEgY29taXNzacOzIgorCisjOiBidWlsdGluL2hlbHAuYzo2MQorbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iCittc2dzdHIgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxvcmRyZT5dIgorCisjOiBidWlsdGluL2hlbHAuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVscCBmb3JtYXQgJyVzJyIKK21zZ3N0ciAiZm9ybWF0IGQnYWp1ZGEgbm8gcmVjb25lZ3V0IMKrJXPCuyIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA0Cittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvcidoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBpbmljaWFyIGVtYWNzY2xpZW50LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTE3Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGFuYWxpdHphciBsYSB2ZXJzacOzIGQnZW1hY3NjbGllbnQuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAibGEgdmVyc2nDsyBkJ2VtYWNzY2xpZW50IMKrJWTCuyDDqXMgbWFzc2EgdmVsbGEgKDwgMjIpLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTQzIGJ1aWx0aW4vaGVscC5jOjE2NSBidWlsdGluL2hlbHAuYzoxNzUgYnVpbHRpbi9oZWxwLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXhlY3V0YXIgwqslc8K7IgorCisjOiBidWlsdGluL2hlbHAuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyLCqyVzwrs6IGNhbcOtIGEgdW4gdmlzdWFsaXR6YWRvciBkZSBtYW51YWxzIG5vIGNvbXBhdGlibGUuXG4iCisiQ29uc2lkZXJldSB1c2FyICdtYW4uPGVpbmE+LmNtZCcgZW4gbGxvYyBkJ2FpeMOyLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIsKrJXPCuzogb3JkcmUgcGVyIGEgdW4gdmlzdWFsaXR6YWRvciBkZSBtYW51YWxzIGNvbXBhdGlibGUuXG4iCisiQ29uc2lkZXJldSB1c2FyICdtYW4uPGVpbmE+LnBhdGgnIGVuIGxsb2MgZCdhaXjDsi4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICLCqyVzwrs6IHZpc3VhbGl0emFkb3IgZGUgbWFudWFscyBkZXNjb25lZ3V0LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzY3Cittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJjYXAgdmlzdWFsaXR6YWRvciBkZSBtYW51YWxzIGhhIGdlc3Rpb25hdCBsYSBzb2zCt2xpY2l0dWQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM3NQorbXNnaWQgIm5vIGluZm8gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImNhcCB2aXN1YWxpdHphZG9yIGQnaW5mb3JtYWNpw7MgaGEgZ2VzdGlvbmF0IGxhIHNvbMK3bGljaXR1ZCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDM0IGJ1aWx0aW4vaGVscC5jOjQ0NSBnaXQuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbGlhc2VkIHRvICclcyciCittc2dzdHIgIsKrJXPCuyDDqXMgdW4gw6BsaWVzIGRlIMKrJXPCuyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ4IGdpdC5jOjM2NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGFsaWFzLiVzIHN0cmluZzogJXMiCittc2dzdHIgIkNhZGVuYSBicmFuY2guJXMubWVyZ2VvcHRpb25zIGluY29ycmVjdGE6ICVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NzcgYnVpbHRpbi9oZWxwLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICLDunM6ICVzJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ5MQorbXNnaWQgIidnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAiaGkgaGEgdW5hIGRpc2NvcmRhbsOnYSBkZSB0aXB1cyBkJ29iamVjdGUgYSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgIm5vIHMnaGEgcmVidXQgbCdvYmplY3RlIGVzcGVyYXQgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXM6IGV4cGVjdGVkIHR5cGUgJXMsIGZvdW5kICVzIgorbXNnc3RyICJvYmplY3RlICVzOiBzJ2VzcGVyYXZhIGVsIHRpcHVzICVzLCBzJ2hhIHRyb2JhdCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICJubyBlcyBwb3Qgb21wbGlyICVkIG9jdGV0IgorbXNnc3RyWzFdICJubyBlcyBwb3Qgb21wbGlyICVkIG9jdGV0cyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY4Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICJFT0YgcHJlbWF0dXIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2OQorbXNnaWQgInJlYWQgZXJyb3Igb24gaW5wdXQiCittc2dzdHIgImVycm9yIGRlIGxlY3R1cmEgZCdlbnRyYWRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODEKK21zZ2lkICJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIKK21zZ3N0ciAicydoYW4gdXNhdCBtw6lzIG9jdGV0cyBxdWUgaGkgaGF2aWEgZGlzcG9uaWJsZXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4OCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjYwNAorbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgInBhcXVldCBtYXNzYSBncmFuIHBlciBhIGxhIGRlZmluaWNpw7MgYWN0dWFsIGQnb2ZmX3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5MSBidWlsdGluL3VucGFjay1vYmplY3RzLmM6OTUKK21zZ2lkICJwYWNrIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUiCittc2dzdHIgImVsIHBhcXVldCBzdXBlcmEgbGEgbWlkYSBtw6B4aW1hIHBlcm1lc2EiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJubyBlcyBwb3Qgb2JyaXIgZWwgZml0eGVyIGRlIHBhcXVldCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyNgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICJoaSBoYSB1bmEgZGlzY29yZGFuw6dhIGRlIHNpZ25hdHVyYSBkZSBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIHZlcnNpb24gJTxQUkl1MzI+IHVuc3VwcG9ydGVkIgorbXNnc3RyICJsYSB2ZXJzacOzIGRlIHBhcXVldCAlPFBSSXUzMj4gbm8gw6lzIGNvbXBhdGlibGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKK21zZ3N0ciAiZWwgcGFxdWV0IHTDqSB1biBvYmplY3RlIGluY29ycmVjdGUgYSBsYSBwb3NpY2nDsyAlPFBSSXVNQVg+OiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmxhdGUgcmV0dXJuZWQgJWQiCittc2dzdHIgImxhIGluZmxhY2nDsyBoYSByZXRvcm5hdCAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTE1Cittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAiIgorImRlc2JvcmRhbWVudCBkZSB2YWxvciBkZSBkZXNwbGHDp2FtZW50IHBlciBhIGwnb2JqZWN0ZSBiYXNlIGRlIGRpZmVyw6huY2llcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIzCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICJlbCBkZXNwbGHDp2FtZW50IGRlIGJhc2UgZGUgZGlmZXLDqG5jaWVzIGVzdMOgIGZvcmEgZGUgbMOtbWl0cyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb2JqZWN0IHR5cGUgJWQiCittc2dzdHIgInRpcHVzIGQnb2JqZWN0ZSBkZXNjb25lZ3V0ICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjIKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICJubyBlcyBwb3QgZmVyIHByZWFkIGVuIGVsIGZpdHhlciBlbXBhcXVldGF0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZSBtaXNzaW5nIgorbXNnaWRfcGx1cmFsICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICJlbCBmaW5hbCBkZWwgZml0eGVyIGVtcGFxdWV0YXQgw6lzIHByZW1hdHVyLCBtYW5jYSAlPFBSSXVNQVg+IG9jdGV0IgorbXNnc3RyWzFdICIiCisiZWwgZmluYWwgZGVsIGZpdHhlciBlbXBhcXVldGF0IMOpcyBwcmVtYXR1ciwgbWFucXVlbiAlPFBSSXVNQVg+IG9jdGV0cyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTkwCittc2dpZCAic2VyaW91cyBpbmZsYXRlIGluY29uc2lzdGVuY3kiCittc2dzdHIgImhpIGhhIHVuYSBpbmNvbnNpc3TDqG5jaWEgc2VyaW9zYSBkJ2luZmxhY2nDsyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0MSBidWlsdGluL2luZGV4LXBhY2suYzo3NjQKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwMyBidWlsdGluL2luZGV4LXBhY2suYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICJTJ0hBIFRST0JBVCBVTkEgQ09MwrdMSVNJw5MgU0hBMSBBTUIgJXMgISIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU3CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxNyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgaW5mbyAlcyIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciBsYSBpbmZvcm1hY2nDsyBkJ29iamVjdGUgZXhpc3RlbnQgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgbCdvYmplY3RlIGV4aXN0ZW50ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAib2JqZWN0ZSBkZSBibG9iIG5vIHbDoGxpZCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NQorIywgZnV6enkKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2tlZCBvYmplY3QiCittc2dzdHIgImlnbm9yYSBlbHMgb2JqZWN0ZXMgZW1wYXF1ZXRhdHMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiTm8gdG90cyBlbHMgb2JqZWN0ZXMgZmlsbHMgZGUgJXMgc8OzbiBhYmFzdGFibGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MTkgYnVpbHRpbi9pbmRleC1wYWNrLmM6OTUwCittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGFwbGljYXIgbGEgZGlmZXLDqG5jaWEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTgKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUydlc3RhbiByZWJlbnQgb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTgKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICJTJ2VzdGFuIGluZGV4YW50IG9iamVjdGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTUyCittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICJlbCBwYXF1ZXQgw6lzIG1hbG3DqHMgKGRpc2NvcmRhbsOnYSBTSEExKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1NworbXNnaWQgImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIKK21zZ3N0ciAibm8gZXMgcG90IGZlciBmc3RhdCBlbiBlbCBmaXR4ZXIgZGUgcGFxdWV0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTYwCittc2dpZCAicGFjayBoYXMganVuayBhdCB0aGUgZW5kIgorbXNnc3RyICJlbCBwYXF1ZXQgdMOpIGJyb3NzYSBhbCBzZXUgZmluYWwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNzIKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICJjb25mdXNpw7MgbcOpcyBlbmxsw6AgZGUgbGEgYm9nZXJpYSBlbiBwYXJzZV9wYWNrX29iamVjdHMoKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE5NQorbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIlMnZXN0YW4gcmVzb2xlbnQgbGVzIGRpZmVyw6huY2llcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTIwNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIGZpbDogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNDYKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICJjb25mdXNpw7MgbcOpcyBlbmxsw6AgZGUgbGEgYm9nZXJpYSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3QiCittc2dpZF9wbHVyYWwgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdHMiCittc2dzdHJbMF0gInMnaGEgY29tcGxldGF0IGFtYiAlZCBvYmplY3RlIGxvY2FsIgorbXNnc3RyWzFdICJzJ2hhIGNvbXBsZXRhdCBhbWIgJWQgb2JqZWN0ZXMgbG9jYWxzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICJTdW1hIGRlIHZlcmlmaWNhY2nDsyBmaW5hbCBubyBlc3BlcmFkYSBwZXIgYSAlcyAoY29ycnVwY2nDsyBkZSBkaXNjPykiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gIkVsIHBhcXVldCB0w6kgJWQgZGlmZXLDqG5jaWEgbm8gcmVzb2x0YSIKK21zZ3N0clsxXSAiRWwgcGFxdWV0IHTDqSAlZCBkaWZlcsOobmNpZXMgbm8gcmVzb2x0ZXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZGVzaW5mbGFyIGwnb2JqZWN0ZSBhbm5leGF0ICglZCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgImwnb2JqZWN0ZSBsb2NhbCAlcyDDqXMgbWFsbcOocyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAiZWwgbm9tIGRlbCBmaXR4ZXIgZGUgcGFxdWV0IMKrJXPCuyBubyBhY2FiYSBhbWIgJy5wYWNrJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJXMgZmlsZSAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgZXNjcml1cmUgwqslc8K7IGFsIGZpdHhlciDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSB3cml0dGVuICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IHRhbmNhciBlbCBmaXR4ZXIgZXNjcml0IGEgbWFudGVuaXIgwqslc8K7IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDU5Cittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgImVycm9yIGVuIHRhbmNhciBlbCBmaXR4ZXIgZW1wYXF1ZXRhdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ3MworbXNnaWQgImNhbm5vdCBzdG9yZSBwYWNrIGZpbGUiCittc2dzdHIgIm5vIGVzIHBvdCBlbW1hZ2F0emVtYXIgZWwgZml0eGVyIGVtcGFxdWV0YXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0ODEKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAibm8gZXMgcG90IGVtbWFnYXR6ZW1hciBlbCBmaXR4ZXIgZCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MjUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzE2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCittc2dzdHIgInBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiBpbmNvcnJlY3RlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICJObyBlcyBwb3Qgb2JyaXIgZWwgZml0eGVyIGVtcGFxdWV0YXQgZXhpc3RlbnQgwqslc8K7IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIk5vIGVzIHBvdCBvYnJpciBlbCBmaXR4ZXIgZCfDrW5kZXggZGUgcGFxdWV0cyBleGlzdGVudCBkZSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAic2Vuc2UgZGlmZXLDqG5jaWVzOiAlZCBvYmplY3RlIgorbXNnc3RyWzFdICJzZW5zZSBkaWZlcsOobmNpZXM6ICVkIG9iamVjdGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gImxvbmdpdHVkIGRlIGNhZGVuYSA9ICVkOiAlbHUgb2JqZWN0ZSIKK21zZ3N0clsxXSAibG9uZ2l0dWQgZGUgY2FkZW5hID0gJWQ6ICVsdSBvYmplY3RlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY4OQorbXNnaWQgIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICJObyBlcyBwb3QgdG9ybmFyIGFsIGRpcmVjdG9yaSBkZSB0cmViYWxsIGFjdHVhbCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTczOCBidWlsdGluL2luZGV4LXBhY2suYzoxNzQxCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzU3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICIlcyBpbmNvcnJlY3RlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzc3Cittc2dpZCAiLS1maXgtdGhpbiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IC0tc3RkaW4iCittc2dzdHIgIi0tZml4LXRoaW4gbm8gZXMgcG90IHVzYXIgc2Vuc2UgLS1zdGRpbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc3OQorbXNnaWQgIi0tc3RkaW4gcmVxdWlyZXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1zdGRpbiByZXF1ZXJlaXggdW4gZGlww7JzaXQgZ2l0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzg1Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICJzJ2hhIGRvbmF0IC0tdmVyaWZ5IHNlbnNlIG5vbSBkZSBmaXR4ZXIgZGUgcGFxdWV0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODMzIGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1ODEKKyMsIGZ1enp5Cittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrIG9iamVjdHMiCittc2dzdHIgImVycm9yIGVuIG9iamVjdGU6ICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgZmVyIHN0YXQgZW4gbGEgcGxhbnRpbGxhIMKrJXPCuyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGZlciBvcGVuZGlyIGVuIGVsIGRpcmVjdG9yaSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgZmVyIHJlYWRsaW5rIGVuIMKrJXPCuyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgZmVyIHN5bWxpbmsgZW4gwqslc8K7IMKrJXPCuyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgY29waWFyIMKrJXPCuyBhIMKrJXPCuyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdGVtcGxhdGUgJXMiCittc2dzdHIgInMnZXN0w6AgaWdub3JhbnQgbGEgcGxhbnRpbGxhICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgaW4gJXMiCittc2dzdHIgIm5vIHMnaGFuIHRyb2JhdCBsZXMgcGxhbnRpbGxlcyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBmcm9tICclcyc6ICVzIgorbXNnc3RyICJubyBzJ2VzdGFuIGNvcGlhbnQgcGxhbnRpbGxlcyBkZSDCqyVzwrs6ICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZ2VzdGlvbmFyIGVsIHRpcHVzIGRlIGZpdHhlciAlZCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG1vdXJlICVzIGEgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NCBidWlsdGluL2luaXQtZGIuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiVzIGphIGV4aXN0ZWl4IgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJTJ2hhIHJlaW5pY2lhbGl0emF0IGVsIGRpcMOyc2l0IGNvbXBhcnRpdCBleGlzdGVudCBkZWwgR2l0IGVuICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJTJ2hhIHJlaW5pY2lhbGl0emF0IGVsIGRpcMOyc2l0IGV4aXN0ZW50IGRlbCBHaXQgZW4gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiUydoYSBpbmljaWFsaXR6YXQgdW4gZGlww7JzaXQgY29tcGFydGl0IGJ1aXQgZGVsIEdpdCBlbiAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIlMnaGEgaW5pY2lhbGl0emF0IHVuIGRpcMOyc2l0IGJ1aXQgZGVsIEdpdCBlbiAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ2OAorbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08ZGlyZWN0b3JpLWRlLXBsYW50aWxsYT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNvcz5dXSBbPGRpcmVjdG9yaT5dIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTEKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAicGVybWlzb3MiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MgorbXNnaWQgInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIKK21zZ3N0ciAiZXNwZWNpZmljYSBxdWUgZWwgZGlww7JzaXQgZGUgZ2l0IGVzIGNvbXBhcnRpcsOgIGVudHJlIGRpdmVyc29zIHVzdWFyaXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyOSBidWlsdGluL2luaXQtZGIuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICJubyBlcyBwb3QgbWtkaXIgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgIm5vIGVzIHBvdCBjYW52aWFyIGRlIGRpcmVjdG9yaSBhICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAiIgorIm5vIGVzIHBlcm1ldCAlcyAobyAtLXdvcmstdHJlZT08ZGlyZWN0b3JpPikgc2Vuc2UgZXNwZWNpZmljYXIgJXMgKG8gLS1naXQtIgorImRpcj08ZGlyZWN0b3JpPikiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICJObyBlcyBwb3QgYWNjZWRpciBhIGwnYXJicmUgZGUgdHJlYmFsbCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTYKK21zZ2lkICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgIgorIjx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgIgorIjx0ZXN0aW1vbmk+Wyg9fDopPHZhbG9yPl0pLi4uXSBbPGZpdHhlcj4uLi5dIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk1Cittc2dpZCAiZWRpdCBmaWxlcyBpbiBwbGFjZSIKK21zZ3N0ciAiZWRpdGEgZWxzIGZpdHhlcnMgaW4gc2l0dSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NgorbXNnaWQgInRyaW0gZW1wdHkgdHJhaWxlcnMiCittc2dzdHIgImVzY3Vyw6dhIGVscyByZW1vbGNzIGJ1aXRzIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk5Cittc2dpZCAid2hlcmUgdG8gcGxhY2UgdGhlIG5ldyB0cmFpbGVyIgorbXNnc3RyICJvbiB1YmljYSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDEKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiYWNjacOzIHNpIGVsIMKrdHJhaWxlcsK7IGphIGV4aXN0ZWl4IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMworbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGlzIG1pc3NpbmciCittc2dzdHIgImFjY2nDsyBzaSBlbCDCq3RyYWlsZXLCuyBmYWx0YSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDUKK21zZ2lkICJvdXRwdXQgb25seSB0aGUgdHJhaWxlcnMiCittc2dzdHIgIm1vc3RyYSBub23DqXMgZWxzIMKrdHJhaWxlcsK7IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNgorbXNnaWQgImRvIG5vdCBhcHBseSBjb25maWcgcnVsZXMiCittc2dzdHIgIm5vIGFwbGlxdWlzIGxlcyByZWdsZXMgZGUgY29uZmlndXJhY2nDsyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDcKK21zZ2lkICJqb2luIHdoaXRlc3BhY2UtY29udGludWVkIHZhbHVlcyIKK21zZ3N0ciAidW5laXggZWxzIHZhbG9ycyBjb250aW51cyBhbWIgZXNwYWlzIGVuIGJsYW5jIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwOAorbXNnaWQgInNldCBwYXJzaW5nIG9wdGlvbnMiCittc2dzdHIgImVzdGFibGVpeCBsZXMgb3BjaW9ucyBkJ2Fuw6BsaXNpIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMAorbXNnaWQgImRvIG5vdCB0cmVhdCAtLS0gc3BlY2lhbGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTExCittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAicmVtb2xjIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMgorbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICJyZW1vbGNzIGEgYWZlZ2lyIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEyMworbXNnaWQgIi0tdHJhaWxlciB3aXRoIC0tb25seS1pbnB1dCBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLXRyYWlsZXIgYW1iIC0tb25seS1pbnB1dCBubyB0w6kgc2VudGl0IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEzMworbXNnaWQgIm5vIGlucHV0IGZpbGUgZ2l2ZW4gZm9yIGluLXBsYWNlIGVkaXRpbmciCittc2dzdHIgIm5vIHMnaGEgZG9uYXQgY2FwIGZpdHhlciBkJ2VudHJhZGEgcGVyIGEgZWRpY2nDsyBpbiBzaXR1IgorCisjOiBidWlsdGluL2xvZy5jOjU2Cittc2dpZCAiZ2l0IGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxvZyBbPG9wY2lvbnM+XSBbPHJhbmctZGUtcmV2aXNpb25zPl0gW1stLV0gPGNhbcOtPi4uLl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTcKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzxvcGNpb25zPl0gPG9iamVjdGU+Li4uIgorCisjOiBidWlsdGluL2xvZy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tZGVjb3JhdGUgb3B0aW9uOiAlcyIKK21zZ3N0ciAib3BjacOzIC0tZGVjb3JhdGUgbm8gdsOgbGlkYTogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc0Cittc2dpZCAic2hvdyBzb3VyY2UiCittc2dzdHIgIm1vc3RyYSBsYSBmb250IgorCisjOiBidWlsdGluL2xvZy5jOjE3NQorbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICJVc2EgZWwgZml0eGVyIGRlIG1hcGEgZGUgY29ycmV1IgorCisjOiBidWlsdGluL2xvZy5jOjE3NworbXNnaWQgIm9ubHkgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAibm9tw6lzIGRlY29yYSBsZXMgcmVmZXLDqG5jaWVzIHF1ZSBjb2luY2lkZWl4aW4gYW1iIDxwYXRyw7M+IgorCisjOiBidWlsdGluL2xvZy5jOjE3OQorbXNnaWQgImRvIG5vdCBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJubyBkZWNvcmlzIGxlcyByZWZlcsOobmNpZXMgcXVlIGNvaW5jaWRlaXhlbiBhbWIgPHBhdHLDsz4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwCittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAib3BjaW9ucyBkZSBkZWNvcmFjacOzIgorCisjOiBidWlsdGluL2xvZy5jOjE4MworbXNnaWQgIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICJQcm9jZXNzYSBlbCByYW5nIGRlIGzDrW5pZXMgbixtIGVuIGVsIGZpdHhlciwgY29tcHRhbnQgZGVzIGQnMSIKKworIzogYnVpbHRpbi9sb2cuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICJTb3J0aWRhIGZpbmFsOiAlZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgImdpdCBzaG93ICVzOiBmaXR4ZXIgaW5jb3JyZWN0ZSIKKworIzogYnVpbHRpbi9sb2cuYzo1NTAgYnVpbHRpbi9sb2cuYzo2NDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiTm8gZXMgcG90IGxsZWdpciBsJ29iamVjdGUgJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjcwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHR5cGU6ICVkIgorbXNnc3RyICJUaXB1cyBkZXNjb25lZ3V0OiAlZCIKKworIzogYnVpbHRpbi9sb2cuYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgY292ZXIgZnJvbSBkZXNjcmlwdGlvbiBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODIxCittc2dpZCAiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIKK21zZ3N0ciAiZm9ybWF0LmhlYWRlcnMgc2Vuc2UgdmFsb3IiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTM2Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICJlbCBub20gZGVsIGRpcmVjdG9yaSBkZSBzb3J0aWRhIMOpcyBtYXNzYSBsbGFyZyIKKworIzogYnVpbHRpbi9sb2cuYzo5NTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgIk5vIGVzIHBvdCBvYnJpciBlbCBmaXR4ZXIgZGUgcGVkYcOnICVzIgorCisjOiBidWlsdGluL2xvZy5jOjk2OQorIywgZnV6enkKK21zZ2lkICJuZWVkIGV4YWN0bHkgb25lIHJhbmdlIgorbXNnc3RyICJDYWwgZXhhY3RhbWVudCB1biByYW5nLiIKKworIzogYnVpbHRpbi9sb2cuYzo5NzkKKyMsIGZ1enp5Cittc2dpZCAibm90IGEgcmFuZ2UiCittc2dzdHIgIk5vIMOpcyB1biByYW5nLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQzCisjLCBmdXp6eQorbXNnaWQgImNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgIkxhIGNhcnRhIGRlIHByZXNlbnRhY2nDsyBuZWNlc3NpdGEgZWwgZm9ybWF0IGRlIGNvcnJldSBlbGVjdHLDsm5pYyIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQ5CisjLCBmdXp6eQorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgY292ZXItbGV0dGVyIGZpbGUiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY3JlYXIgZWxzIGZpdHhlcnMgZGUgc29ydGlkYSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgImluLXJlcGx5LXRvIGJvaWc6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTUKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcGNpb25zPl0gWzxkZXMtZGU+IHwgPHJhbmctZGUtcmV2aXNpb25zPl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMxMworIywgZnV6enkKK21zZ2lkICJ0d28gb3V0cHV0IGRpcmVjdG9yaWVzPyIKK21zZ3N0ciAiSGkgaGEgZG9zIGRpcmVjdG9yaXMgZGUgc29ydGlkYT8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQyNCBidWlsdGluL2xvZy5jOjIxOTcgYnVpbHRpbi9sb2cuYzoyMTk5IGJ1aWx0aW4vbG9nLmM6MjIxMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21taXQgJXMiCittc2dzdHIgIkNvbWlzc2nDsyBkZXNjb25lZ3VkYSAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDM0IGJ1aWx0aW4vcmVwbGFjZS5jOjU4IGJ1aWx0aW4vcmVwbGFjZS5jOjIwNworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gcmVzb2xkcmUgwqslc8K7IGNvbSBhIHJlZmVyw6huY2lhIHbDoGxpZGEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzOQorIywgZnV6enkKK21zZ2lkICJjb3VsZCBub3QgZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHRyb2JhciBsYSBiYXNlIGV4YWN0YSBkZSBmdXNpw7MuIgorCisjOiBidWlsdGluL2xvZy5jOjE0NDMKKyMsIGZ1enp5Cittc2dpZCAiIgorImZhaWxlZCB0byBnZXQgdXBzdHJlYW0sIGlmIHlvdSB3YW50IHRvIHJlY29yZCBiYXNlIGNvbW1pdCBhdXRvbWF0aWNhbGx5LFxuIgorInBsZWFzZSB1c2UgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byB0byB0cmFjayBhIHJlbW90ZSBicmFuY2guXG4iCisiT3IgeW91IGNvdWxkIHNwZWNpZnkgYmFzZSBjb21taXQgYnkgLS1iYXNlPTxiYXNlLWNvbW1pdC1pZD4gbWFudWFsbHkiCittc2dzdHIgIiIKKyJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIG9idGVuaXIgbGEgZm9udC4gU2kgdm9sZXUgcmVnaXN0cmFyIGxhIGNvbWlzc2nDsyAiCisiYmFzZVxuIgorImF1dG9tw6B0aWNhbWVudCwgdXNldSBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIHBlciBhXG4iCisic2VndWlyIHVuYSBicmFuY2EgcmVtb3RhLiBPIHBvZGV1IGVzcGVjaWZpY2FyIGxhIGNvbWlzc2nDsyBiYXNlIG1hbnVhbG1lbnRcbiIKKyJhbWIgLS1iYXNlPTxpZC1kZS1jb21pc3Npw7MtYmFzZT4uIgorCisjOiBidWlsdGluL2xvZy5jOjE0NjMKKyMsIGZ1enp5Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiB0cm9iYXIgbGEgYmFzZSBleGFjdGEgZGUgZnVzacOzLiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc0Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkIGJlIHRoZSBhbmNlc3RvciBvZiByZXZpc2lvbiBsaXN0IgorbXNnc3RyICJsYSBjb21pc3Npw7MgYmFzZSBoYSBkZSBzZXIgbCdhdmFudHBhc3NhdCBkZSBsYSBsbGlzdGEgZGUgcmV2aXNpb25zIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzgKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGRuJ3QgYmUgaW4gcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAibGEgY29taXNzacOzIGJhc2Ugbm8gaGEgZGUgc2VyIGVuIGxhIGxsaXN0YSBkZSByZXZpc2lvbnMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzMQorbXNnaWQgImNhbm5vdCBnZXQgcGF0Y2ggaWQiCittc2dzdHIgIm5vIGVzIHBvdCBvYnRlbmlyIGwnaWQgZGVsIHBlZGHDpyIKKworIzogYnVpbHRpbi9sb2cuYzoxNTgzCisjLCBmdXp6eQorbXNnaWQgImZhaWxlZCB0byBpbmZlciByYW5nZS1kaWZmIHJhbmdlcyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBleGVjdXRhciDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYyOQorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgInVzYSBbUEFUQ0ggbi9tXSBmaW5zIGkgdG90IGFtYiB1biBzb2wgcGVkYcOnIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzIKK21zZ2lkICJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIKK21zZ3N0ciAidXNhIFtQQVRDSF0gZmlucyBpIHRvdCBhbWIgbcO6bHRpcGxlcyBwZWRhw6dvcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjM2Cittc2dpZCAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiCittc2dzdHIgImltcHJpbWVpeCBlbHMgcGVkYcOnb3MgYSBsYSBzb3J0aWRhIGVzdMOgbmRhcmQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzOAorbXNnaWQgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIgorbXNnc3RyICJnZW5lcmEgdW5hIGNhcnRhIGRlIHByZXNlbnRhY2nDsyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQwCittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICJ1c2EgdW5hIHNlccO8w6huY2lhIGRlIG7Dum1lcm9zIHBlciBhbHMgbm9tcyBkZWxzIGZpdHhlcnMgZGUgc29ydGlkYSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQxCittc2dpZCAic2Z4IgorbXNnc3RyICJzdWZpeCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQyCittc2dpZCAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciCittc2dzdHIgInVzYSA8c3VmaXg+IGVuIGxsb2MgZGUgJy5wYXRjaCciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NAorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgImNvbWVuw6dhIG51bWVyYW50IGVscyBwZWRhw6dvcyBhIDxuPiBlbiBsbG9jIGQnMSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ2Cittc2dpZCAibWFyayB0aGUgc2VyaWVzIGFzIE50aCByZS1yb2xsIgorbXNnc3RyICJtYXJjYSBsYSBzw6hyaWUgY29tIGEgbCdlbsOoc2ltYSBsbGFuw6dhZGEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0OAorbXNnaWQgIlVzZSBbUkZDIFBBVENIXSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIlVzYSBbUkZDIFBBVENIXSBlbiBsbG9jIGRlIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1MQorbXNnaWQgImNvdmVyLWZyb20tZGVzY3JpcHRpb24tbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTIKK21zZ2lkICJnZW5lcmF0ZSBwYXJ0cyBvZiBhIGNvdmVyIGxldHRlciBiYXNlZCBvbiBhIGJyYW5jaCdzIGRlc2NyaXB0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NAorbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiVXNhIFs8cHJlZml4Pl0gZW4gbGxvYyBkZSBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTcKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgImVtbWFnYXR6ZW1hIGVscyBmaXR4ZXJzIHJlc3VsdGFudHMgYSA8ZGlyZWN0b3JpPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYwCittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgIm5vIGRlc3B1bGxpcy9hZmVnZWl4aXMgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYzCittc2dpZCAiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIKK21zZ3N0ciAibm8gZW1ldGlzIGRpZmVyw6huY2llcyBiaW7DoHJpZXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NQorbXNnaWQgIm91dHB1dCBhbGwtemVybyBoYXNoIGluIEZyb20gaGVhZGVyIgorbXNnc3RyICJlbWV0IHVuIGhhc2ggZGUgdG90cyB6ZXJvcyBlbiBsYSBjYXDDp2FsZXJhIEZyb20iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NworbXNnaWQgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIKK21zZ3N0ciAibm8gaW5jbG9ndWlzIHBlZGHDp29zIHF1ZSBjb2luY2lkZWl4aW4gYW1iIGNvbWlzc2lvbnMgYSBsYSBmb250IgorCisjOiBidWlsdGluL2xvZy5jOjE2NjkKK21zZ2lkICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiCittc2dzdHIgIiIKKyJtb3N0cmEgZWwgZm9ybWF0IGRlIHBlZGHDpyBlbiBsbG9jIGRlbCBwZXIgZGVmZWN0ZSAocGVkYcOnICsgZXN0YWTDrXN0aXF1ZXMpIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzEKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIk1pc3NhdGdlcmlhIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzIKK21zZ2lkICJoZWFkZXIiCittc2dzdHIgImNhcMOnYWxlcmEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MworbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgImFmZWdlaXggdW5hIGNhcMOnYWxlcmEgZGUgY29ycmV1IGVsZWN0csOybmljIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzQgYnVpbHRpbi9sb2cuYzoxNjc2Cittc2dpZCAiZW1haWwiCittc2dzdHIgImNvcnJldSBlbGVjdHLDsm5pYyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0Cittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgImFmZWdlaXggbGEgY2Fww6dhbGVyYSBUbzoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NgorbXNnaWQgImFkZCBDYzogaGVhZGVyIgorbXNnc3RyICJhZmVnZWl4IGxhIGNhcMOnYWxlcmEgQ2M6IgorCisjOiBidWlsdGluL2xvZy5jOjE2NzgKK21zZ2lkICJpZGVudCIKK21zZ3N0ciAiaWRlbnRpdGF0IgorCisjOiBidWlsdGluL2xvZy5jOjE2NzkKK21zZ2lkICJzZXQgRnJvbSBhZGRyZXNzIHRvIDxpZGVudD4gKG9yIGNvbW1pdHRlciBpZGVudCBpZiBhYnNlbnQpIgorbXNnc3RyICIiCisiZXN0YWJsZWl4IGwnYWRyZcOnYSBGcm9tIGEgPGlkZW50aXRhdD4gKG8gbGEgaWRlbnRpdGF0IGRlbCBjb21pdGVudCBzaSBtYW5jYSkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MQorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgIklEIGRlIG1pc3NhdGdlIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODIKK21zZ2lkICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iCittc2dzdHIgImZlcyBxdWUgZWwgcHJpbWVyIG1pc3NhdGdlIHNpZ3VpIHVuYSByZXNwb3N0YSBhIDxJRCBkZSBtaXNzYXRnZT4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MyBidWlsdGluL2xvZy5jOjE2ODYKK21zZ2lkICJib3VuZGFyeSIKK21zZ3N0ciAibMOtbWl0IgorCisjOiBidWlsdGluL2xvZy5jOjE2ODQKK21zZ2lkICJhdHRhY2ggdGhlIHBhdGNoIgorbXNnc3RyICJhZGp1bnRhIGVsIHBlZGHDpyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjg3Cittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAicG9zYSBlbCBwZWRhw6cgZW4gZWwgY29zIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTEKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAiaGFiaWxpdGEgbCdlbmZpbGFkYSBkZSBtaXNzYXRnZXMsIGVzdGlsczogc2hhbGxvdywgZGVlcCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkzCittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICJzaWduYXR1cmEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSIKK21zZ3N0ciAiYWZlZ2VpeCB1bmEgc2lnbmF0dXJhIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTUKK21zZ2lkICJiYXNlLWNvbW1pdCIKK21zZ3N0ciAiY29taXNzacOzIGJhc2UiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NgorbXNnaWQgImFkZCBwcmVyZXF1aXNpdGUgdHJlZSBpbmZvIHRvIHRoZSBwYXRjaCBzZXJpZXMiCittc2dzdHIgImFmZWdlaXggbGEgaW5mb3JtYWNpw7MgZCdhcmJyZSByZXF1ZXJpZGEgYSBsYSBzw6hyaWUgZGUgcGVkYcOnb3MiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5OAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSBmcm9tIGEgZmlsZSIKK21zZ3N0ciAiYWZlZ2VpeCB1bmEgc2lnbmF0dXJhIGRlcyBkJ3VuIGZpdHhlciIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk5Cittc2dpZCAiZG9uJ3QgcHJpbnQgdGhlIHBhdGNoIGZpbGVuYW1lcyIKK21zZ3N0ciAibm8gaW1wcmltZWl4aXMgZWxzIG5vbXMgZGUgZml0eGVyIGRlbCBwZWRhw6ciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMQorbXNnaWQgInNob3cgcHJvZ3Jlc3Mgd2hpbGUgZ2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICJtb3N0cmEgZWwgcHJvZ3LDqXMgZHVyYW50IGxhIGdlbmVyYWNpw7MgZGUgcGVkYcOnb3MiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMworbXNnaWQgInNob3cgY2hhbmdlcyBhZ2FpbnN0IDxyZXY+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA2Cittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJlZnNwZWM+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA4Cittc2dpZCAicGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAibMOtbmlhIGQnaWRlbnRpdGF0IG5vIHbDoGxpZGE6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE4MDcKKyMsIGZ1enp5Cittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1uIGkgLWsgc8OzbiBtw7p0dWFtZW50IGV4Y2xvZW50cy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwOQorIywgZnV6enkKK21zZ2lkICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIGkgLWsgc8OzbiBtw7p0dWFtZW50IGV4Y2xvZW50cy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxNworbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1vbmx5IG5vIHTDqSBzZW50aXQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxOQorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLXN0YXR1cyBubyB0w6kgc2VudGl0IgorCisjOiBidWlsdGluL2xvZy5jOjE4MjEKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tY2hlY2sgbm8gdMOpIHNlbnRpdCIKKworIzogYnVpbHRpbi9sb2cuYzoxODU0Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgInNvcnRpZGEgZXN0w6BuZGFyZCBvIGRpcmVjdG9yaSwgcXVpbiBkZWxzIGRvcz8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk1OAorbXNnaWQgIi0taW50ZXJkaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE5NjIKK21zZ2lkICJJbnRlcmRpZmY6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlcmRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2OQorbXNnaWQgIi0tY3JlYXRpb24tZmFjdG9yIHJlcXVpcmVzIC0tcmFuZ2UtZGlmZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE5NzMKK21zZ2lkICItLXJhbmdlLWRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk4MQorbXNnaWQgIlJhbmdlLWRpZmY6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSYW5nZS1kaWZmIGFnYWluc3QgdiVkOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgZml0eGVyIGRlIHNpZ25hdHVyYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjAyOQorbXNnaWQgIkdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAiUydlc3RhbiBnZW5lcmFudCBlbHMgcGVkYcOnb3MiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjA3MworIywgZnV6enkKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjcmVhciBlbHMgZml0eGVycyBkZSBzb3J0aWRhIgorCisjOiBidWlsdGluL2xvZy5jOjIxMzIKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs8Zm9udD4gWzxjYXA+IFs8bMOtbWl0Pl1dXSIKKworIzogYnVpbHRpbi9sb2cuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgdHJvYmFyIHVuYSBicmFuY2EgcmVtb3RhIHNlZ3VpZGEuIEVzcGVjaWZpcXVldSA8Zm9udD4gIgorIm1hbnVhbG1lbnQuXG4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzAKK21zZ2lkICJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBscy1maWxlcyBbPG9wY2lvbnM+XSBbPGZpdHhlcj4uLi5dIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI2Cittc2dpZCAiaWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGFncyIKK21zZ3N0ciAiaWRlbnRpZmljYSBsJ2VzdGF0IGRlIGZpdHhlciBhbWIgZXRpcXVldGVzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI4Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgInVzYSBsbGV0cmVzIG1pbsO6c2N1bGVzIHBlciBhbHMgZml0eGVycyAnYXNzdW1lIHVuY2hhbmdlZCciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzAKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdmc21vbml0b3IgY2xlYW4nIGZpbGVzIgorbXNnc3RyICJ1c2EgbGxldHJlcyBtaW7DunNjdWxlcyBwZXIgYWxzIGZpdHhlcnMgJ2ZzbW9uaXRvciBjbGVhbiciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzIKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAiIgorIm1vc3RyYSBlbiBsYSBzb3J0aWRhIGVscyBmaXR4ZXJzIGRlc2F0cyBlbiBsYSBtZW3DsnJpYSBjYXUgKHBlciBkZWZlY3RlKSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNAorbXNnaWQgInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJtb3N0cmEgZW4gbGEgc29ydGlkYSBlbHMgZml0eGVycyBzdXByaW1pdHMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzYKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIm1vc3RyYSBlbiBsYSBzb3J0aWRhIGVscyBmaXR4ZXJzIG1vZGlmaWNhdHMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzgKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIm1vc3RyYSBlbiBsYSBzb3J0aWRhIGVscyBhbHRyZXMgZml0eGVycyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MAorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJtb3N0cmEgZW4gbGEgc29ydGlkYSBlbHMgZml0eGVycyBpZ25vcmF0cyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MworbXNnaWQgInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJtb3N0cmEgZW4gbGEgc29ydGlkYSBlbCBub20gZCdvYmplY3RlIGRlbHMgY29udGluZ3V0cyDCq3N0YWdlwrsiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDUKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICJtb3N0cmEgZWxzIGZpdHhlcnMgZW4gZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIHF1ZSBzJ2hhbiBkJ2VsaW1pbmFyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ3Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICJtb3N0cmEgbm9tw6lzIGVscyBub21zIGRlbHMgZGlyZWN0b3JpcyAnb3RoZXInIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ5Cittc2dpZCAic2hvdyBsaW5lIGVuZGluZ3Mgb2YgZmlsZXMiCittc2dzdHIgIm1vc3RyYSBlbHMgdGVybWluYWRvcnMgZGUgbMOtbmlhIGRlbHMgZml0eGVycyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1MQorbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgIm5vIG1vc3RyaXMgZWxzIGRpcmVjdG9yaXMgYnVpdHMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTQKK21zZ2lkICJzaG93IHVubWVyZ2VkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIm1vc3RyYSBlbiBsYSBzb3J0aWRhIGVscyBmaXR4ZXJzIHNlbnNlIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU2Cittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIm1vc3RyYSBsYSBpbmZvcm1hY2nDsyBkZSByZXNvbHVjacOzIGRlIGRlc2ZldCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1OAorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAib21ldCBlbHMgZml0eGVycyBjb2luY2lkZW50cyBhbWIgZWwgcGF0csOzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTYxCittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAiZWxzIHBhdHJvbnMgZCdleGNsdXNpw7MgZXMgbGxlZ2VpeGVuIGRlIDxmaXR4ZXI+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY0Cittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgImxsZWdlaXggZWxzIHBhdHJvbnMgYWRkaWNpb25hbHMgZCdleGNsdXNpw7MgcGVyIGRpcmVjdG9yaSBlbiA8Zml0eGVyPiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NgorbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgImFmZWdlaXggbGVzIGV4Y2x1c2lvbnMgZXN0w6BuZGFyZHMgZGUgZ2l0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTcwCittc2dpZCAibWFrZSB0aGUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHRvcCBkaXJlY3RvcnkiCittc2dzdHIgImZlcyBxdWUgbGEgc29ydGlkYSBzaWd1aSByZWxhdGl2YSBhbCBkaXJlY3Rvcmkgc3VwZXJpb3IgZGVsIHByb2plY3RlIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTczCittc2dpZCAicmVjdXJzZSB0aHJvdWdoIHN1Ym1vZHVsZXMiCittc2dzdHIgImluY2xvdSByZWN1cnNpdmFtZW50IGFscyBzdWJtw7JkdWxzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc1Cittc2dpZCAiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIgorbXNnc3RyICJzaSBxdWFsc2V2b2wgPGZpdHhlcj4gbm8gw6lzIGVuIGwnw61uZGV4LCB0cmFjdGEtaG8gY29tIGEgZXJyb3IiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzYKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAiYXJicmUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzcKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICIiCisicHJldMOpbiBxdWUgZWxzIGNhbWlucyBlbGltaW5hdHMgZGVzcHLDqXMgZGUgPGFyYnJlPiBlbmNhcmEgc2lndWluIHByZXNlbnRzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc5Cittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAibW9zdHJhIGxlcyBkYWRlcyBkZSBkZXB1cmFjacOzIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjkKK21zZ2lkICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc11cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS11cGxvYWQtcGFjaz08ZXhlY3V0YWJsZT5dIFstcSB8IC0tcXVpZXRdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tZXhpdC1jb2RlXSBbLS1nZXQtdXJsXSBbLS1zeW1yZWZdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWzxkaXDDsnNpdD4gWzxyZWZlcsOobmNpZXM+Li4uXV0iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAibm8gaW1wcmltZWl4aXMgbCdVUkwgcmVtb3QiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAgYnVpbHRpbi9scy1yZW1vdGUuYzo2MiBidWlsdGluL3JlYmFzZS5jOjE1MTgKK21zZ2lkICJleGVjIgorbXNnc3RyICJleGVjdXRhYmxlIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYxIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjMKK21zZ2lkICJwYXRoIG9mIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIGhvc3QiCittc2dzdHIgImNhbcOtIGEgZ2l0LXVwbG9hZC1wYWNrIGVuIGxhIG3DoHF1aW5hIHJlbW90YSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NQorbXNnaWQgImxpbWl0IHRvIHRhZ3MiCittc2dzdHIgImxpbWl0YSBhIGV0aXF1ZXRlcyIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NgorbXNnaWQgImxpbWl0IHRvIGhlYWRzIgorbXNnc3RyICJsaW1pdGEgYSBjYXBzIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY3Cittc2dpZCAiZG8gbm90IHNob3cgcGVlbGVkIHRhZ3MiCittc2dzdHIgIm5vIG1vc3RyaXMgbGVzIGV0aXF1ZXRlcyBwZWxhZGVzIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY5Cittc2dpZCAidGFrZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiBpbnRvIGFjY291bnQiCittc2dzdHIgInRpbmd1ZXMgZW4gY29tcHRlIHVybC48YmFzZT4uaW5zdGVhZE9mIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjcyCittc2dpZCAiZXhpdCB3aXRoIGV4aXQgY29kZSAyIGlmIG5vIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kIgorbXNnc3RyICJzdXJ0IGFtYiBjb2RpIGRlIHNvcnRpZGEgMiBzaSBubyBlcyB0cm9iYSBjYXAgcmVmZXLDqG5jaWEgY29pbmNpZGVudCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3NQorbXNnaWQgInNob3cgdW5kZXJseWluZyByZWYgaW4gYWRkaXRpb24gdG8gdGhlIG9iamVjdCBwb2ludGVkIGJ5IGl0IgorbXNnc3RyICJtb3N0cmEgbGEgcmVmZXLDqG5jaWEgc3ViamFjZW50IGEgbcOpcyBkZSBsJ29iamVjdGUgcXVlIHNlbnlhbGkiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjMwCittc2dpZCAiZ2l0IGxzLXRyZWUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLXRyZWUgWzxvcGNpb25zPl0gPGFyYnJlPiBbPGNhbcOtPi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOAorbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAibW9zdHJhIG5vbcOpcyBlbHMgYXJicmVzIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzAKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgImluY2xvdSByZWN1cnNpdmFtZW50IGFscyBzdWJhcmJyZXMiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMgorbXNnaWQgInNob3cgdHJlZXMgd2hlbiByZWN1cnNpbmciCittc2dzdHIgIm1vc3RyYSBlbHMgYXJicmVzIHF1YW4gZXMgdHJlYmFsbGEgcmVjdXJzaXZhbWVudCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAiYWNhYmEgbGVzIGVudHJhZGVzIGFtYiB1biBvY3RldCBOVUwiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNgorbXNnaWQgImluY2x1ZGUgb2JqZWN0IHNpemUiCittc2dzdHIgIm1pZGEgZGUgbCdvYmplY3RlIGQnaW5jbHVzacOzIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzggYnVpbHRpbi9scy10cmVlLmM6MTQwCittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAibGxpc3RhIG5vbcOpcyBlbHMgbm9tcyBkZSBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MworbXNnaWQgInVzZSBmdWxsIHBhdGggbmFtZXMiCittc2dzdHIgInVzYSBlbHMgbm9tcyBkZSBjYW3DrSBjb21wbGV0cyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQ1Cittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICIiCisibGxpc3RhIGwnYXJicmUgc2VuY2VyOyBubyBub23DqXMgZWwgZGlyZWN0b3JpIGFjdHVhbCAoaW1wbGljYSAtLWZ1bGwtbmFtZSkiCisKKyM6IGJ1aWx0aW4vbWFpbHNwbGl0LmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IG1ib3g6ICclcyciCittc2dzdHIgIm1ib3ggYnVpdDogwqslc8K7IgorCisjOiBidWlsdGluL21lcmdlLmM6NTUKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IG1lcmdlIFs8b3BjaW9ucz5dIFs8Y29taXNzacOzPi4uLl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NgorbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU3Cittc2dpZCAiZ2l0IG1lcmdlIC0tY29udGludWUiCittc2dzdHIgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE4Cittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJsJ29wY2nDsyDCq23CuyByZXF1ZXJlaXggdW4gdmFsb3IiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgImwnb3BjacOzIMKrJXPCuyByZXF1ZXJlaXggdW4gdmFsb3IiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCB0cm9iYXIgbCdlc3RyYXTDqGdpYSBkZSBmdXNpw7Mgwqslc8K7LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkxlcyBlc3RyYXTDqGdpZXMgZGlzcG9uaWJsZXMgc8OzbjoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkxlcyBlc3RyYXTDqGdpZXMgcGVyc29uYWxpdHphZGVzIGRpc3BvbmlibGVzIHPDs246IgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ0IGJ1aWx0aW4vcHVsbC5jOjE1MgorbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIm5vIG1vc3RyaXMgbGVzIGVzdGFkw61zdGlxdWVzIGRlIGRpZmVyw6huY2lhIGFsIGZpbmFsIGRlIGxhIGZ1c2nDsyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0NyBidWlsdGluL3B1bGwuYzoxNTUKK21zZ2lkICJzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIm1vc3RyYSBsZXMgZXN0YWTDrXN0aXF1ZXMgZGUgZGlmZXLDqG5jaWEgYWwgZmluYWwgZGUgbGEgZnVzacOzIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ4IGJ1aWx0aW4vcHVsbC5jOjE1OAorbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIihzaW7Dsm5pbSBkZSAtLXN0YXQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUwIGJ1aWx0aW4vcHVsbC5jOjE2MQorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorImFmZWdlaXggKGNvbSBhIG3DoHhpbSA8bj4pIGVudHJhZGVzIGRlbCByZWdpc3RyZSBjdXJ0IGFsIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyAiCisiZGUgZnVzacOzIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUzIGJ1aWx0aW4vcHVsbC5jOjE2NworbXNnaWQgImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIgorbXNnc3RyICJjcmVhIHVuYSDDum5pY2EgY29taXNzacOzIGVuIGxsb2MgZGUgZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTUgYnVpbHRpbi9wdWxsLmM6MTcwCittc2dpZCAicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIgorbXNnc3RyICJyZWFsaXR6YSB1bmEgY29taXNzacOzIHNpIGxhIGZ1c2nDsyB0w6kgw6h4aXQgKHBlciBkZWZlY3RlKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NyBidWlsdGluL3B1bGwuYzoxNzMKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgImVkaXRhIGVsIG1pc3NhdGdlIGFiYW5zIGRlIGNvbWV0cmUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTkKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIgorbXNnc3RyICJwZXJtZXQgbCdhdmFuw6cgcsOgcGlkIChwZXIgZGVmZWN0ZSkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjEgYnVpbHRpbi9wdWxsLmM6MTgwCittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAiYXZvcnRhIHNpIGwnYXZhbsOnIHLDoHBpZCBubyDDqXMgcG9zc2libGUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjUgYnVpbHRpbi9wdWxsLmM6MTgzCittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICJ2ZXJpZmljYSBxdWUgbGEgY29taXNzacOzIGFub21lbmFkYSB0aW5ndWkgdW5hIHNpZ25hdHVyYSBHUEcgdsOgbGlkYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NiBidWlsdGluL25vdGVzLmM6Nzg3IGJ1aWx0aW4vcHVsbC5jOjE4NworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTIgYnVpbHRpbi9yZWJhc2UuYzoxNTMxIGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgImVzdHJhdMOoZ2lhIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY3IGJ1aWx0aW4vcHVsbC5jOjE4OAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAiZXN0cmF0w6hnaWEgZGUgZnVzacOzIGEgdXNhciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OCBidWlsdGluL3B1bGwuYzoxOTEKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgIm9wY2nDsz12YWxvciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OSBidWlsdGluL3B1bGwuYzoxOTIKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJvcGNpw7MgcGVyIGEgbCdlc3RyYXTDqGdpYSBkZSBmdXNpw7Mgc2VsZWNjaW9uYWRhIgorCisjOiBidWlsdGluL21lcmdlLmM6MjcxCittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICJtaXNzYXRnZSBkZSBjb21pc3Npw7MgZGUgZnVzacOzIChwZXIgYSB1bmEgZnVzacOzIG5vIGQnYXZhbsOnIHLDoHBpZCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzgKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiYXZvcnRhIGxhIGZ1c2nDsyBlbiBjdXJzIGFjdHVhbCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MAorIywgZnV6enkKK21zZ2lkICItLWFib3J0IGJ1dCBsZWF2ZSBpbmRleCBhbmQgd29ya2luZyB0cmVlIGFsb25lIgorbXNnc3RyICJyZXN0YWJsZWl4IEhFQUQsIGwnw61uZGV4IGkgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgyCittc2dpZCAiY29udGludWUgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgImNvbnRpbnVhIGxhIGZ1c2nDsyBlbiBjdXJzIGFjdHVhbCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4NCBidWlsdGluL3B1bGwuYzoxOTkKK21zZ2lkICJhbGxvdyBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgInBlcm1ldCBmdXNpb25hciBoaXN0w7JyaWVzIG5vIHJlbGFjaW9uYWRlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI5MAorIywgZnV6enkKK21zZ2lkICJieXBhc3MgcHJlLW1lcmdlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAiZXZpdGEgZWxzIGxsaWdhbXMgZGUgcHJlY29taXNzacOzIGkgbWlzc2F0Z2UgZGUgY29taXNzacOzIgorCisjOiBidWlsdGluL21lcmdlLmM6MzA3Cittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXhlY3V0YXIgwqtzdGFzaMK7LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxMgorbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAibCfCq3N0YXNowrsgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL21lcmdlLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgIm5vIMOpcyB1biBvYmplY3RlIHbDoGxpZDogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMzkgYnVpbHRpbi9tZXJnZS5jOjM1NgorbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgInJlYWQtdHJlZSBoYSBmYWxsYXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozODYKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiIChyZXMgYSBmZXIgwqtzcXVhc2jCuykiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJDb21pc3Npw7MgwqtzcXVhc2jCuyAtLSBubyBzJ2VzdMOgIGFjdHVhbGl0emFudCBIRUFEXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJDYXAgbWlzc2F0Z2UgZGUgZnVzacOzIC0tIG5vIHMnZXN0w6AgYWN0dWFsaXR6YW50IEhFQURcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICLCqyVzwrsgbm8gYXNzZW55YWxhIHVuYSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiQ2FkZW5hIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgaW5jb3JyZWN0YTogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MDUKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJObyBzJ2VzdMOgIGdlc3Rpb25hbnQgcmVzIGEgcGFydCBkZSBsYSBmdXNpw7MgZGUgZG9zIGNhcHMuIgorCisjOiBidWlsdGluL21lcmdlLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCittc2dzdHIgIk9wY2nDsyBkZXNjb25lZ3VkYSBkZSBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBsbGVnaXIgZGUgwqslc8K7IgorCisjOiBidWlsdGluL21lcmdlLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIk5vIHMnZXN0w6AgY29tZXRlbnQgbGEgZnVzacOzOyB1c2V1ICdnaXQgY29tbWl0JyBwZXIgYSBjb21wbGV0YXIgbGEgZnVzacOzLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODAxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCittc2dzdHIgIiIKKyJJbnRyb2R1w691IHVuIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyBwZXIgYSBleHBsaWNhciBwZXIgcXXDqFxuIgorImFxdWVzdGEgZnVzacOzIMOpcyBuZWNlc3PDoHJpYSwgZXNwZWNpYWxtZW50IHNpIGZ1c2lvbmEgdW5hIGZvbnRcbiIKKyJhY3R1YWxpdHphZGEgYSB1bmEgYnJhbmNhIHRlbcOgdGljYS5cbiIKKyJcbiIKKyJTJ2lnbm9yYXJhbiBsZXMgbMOtbmllcyBxdWUgY29tZW5jaW4gYW1iIMKrJWPCuywgaSB1biBtaXNzYXRnZSBidWl0XG4iCisiYXZvcnRhIGxhIGNvbWlzc2nDsy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwNgorIywgZnV6enkKK21zZ2lkICJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICJlZGl0YSBlbCBtaXNzYXRnZSBhYmFucyBkZSBjb21ldHJlIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkludHJvZHXDr3UgZWwgbWlzc2F0Z2UgZGUgY29taXNzacOzIGRlbHMgdm9zdHJlcyBjYW52aXMuXG4iCisiUydpZ25vcmFyYW4gbGVzIGzDrW5pZXMgcXVlIGNvbWVuY2luIGFtYiDCqyVjwrssIGkgdW4gbWlzc2F0Z2UgZGVcbiIKKyJjb21pc3Npw7MgYnVpdCBhdm9ydGEgbGEgY29taXNzacOzLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODYyCittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICJFbCBtaXNzYXRnZSBkZSBjb21pc3Npw7Mgw6lzIGJ1aXQuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAiTWVyYXZlbGzDs3MuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorIkxhIGZ1c2nDsyBhdXRvbcOgdGljYSBoYSBmYWxsYXQ7IGFycmVnbGV1IGVscyBjb25mbGljdGVzIGkgZGVzcHLDqXMgY29tZXRldSBlbCAiCisicmVzdWx0YXQuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NzcKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5vIGhpIGhhIGNhcCBicmFuY2EgYWN0dWFsLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk3OQorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTm8gaGkgaGEgY2FwIHJlbW90IHBlciBhIGxhIGJyYW5jYSBhY3R1YWwuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTgxCittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJObyBoaSBoYSBjYXAgZm9udCBwZXIgZGVmZWN0ZSBkZWZpbmlkYSBwZXIgYSBsYSBicmFuY2EgYWN0dWFsLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICJObyBoaSBoYSBjYXAgYnJhbmNhIGFtYiBzZWd1aW1lbnQgcmVtb3QgcGVyIGEgJXMgZGUgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciCittc2dzdHIgIlZhbG9yIGluY29ycmVjdGUgwqslc8K7IGVuIGwnZW50b3JuIMKrJXPCuyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UgaW4gJXM6ICVzIgorbXNnc3RyICJubyDDqXMgcXVlbGNvbSBxdWUgcHVndWVtIGZ1c2lvbmFyIGVuICVzOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExODAKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAibm8gw6lzIHF1ZWxjb20gcXVlIHB1Z3VlbSBmdXNpb25hciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODMKK21zZ2lkICItLWFib3J0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWFib3J0IG5vIGFjY2VwdGEgcGFyw6BtZXRyZXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjg3Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICJObyBoaSBoYSBmdXNpw7MgYSBhdm9ydGFyIChtYW5jYSBNRVJHRV9IRUFEKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk2CisjLCBmdXp6eQorbXNnaWQgIi0tcXVpdCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1hYm9ydCBubyBhY2NlcHRhIHBhcsOgbWV0cmVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMwOQorbXNnaWQgIi0tY29udGludWUgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tY29udGludWUgbm8gYWNjZXB0YSBwYXLDoG1ldHJlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTMKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIk5vIGhpIGhhIGNhcCBmdXNpw7MgZW4gY3VycyAobWFuY2EgTUVSR0VfSEVBRCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMyOQorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJObyBoZXUgY29uY2zDsnMgbGEgdm9zdHJhIGZ1c2nDsyAoTUVSR0VfSEVBRCBleGlzdGVpeCkuXG4iCisiQ29tZXRldSBlbHMgdm9zdHJlcyBjYW52aXMgYWJhbnMgZGUgZnVzaW9uYXIuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzNgorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJObyBoZXUgY29uY2zDsnMgZWwgdm9zdHJlIMKrY2hlcnJ5IHBpY2vCuyAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdGVpeCkuXG4iCisiQ29tZXRldSBlbHMgdm9zdHJlcyBjYW52aXMgYWJhbnMgZGUgZnVzaW9uYXIuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzOQorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiTm8gaGV1IGNvbmNsw7JzIGVsIHZvc3RyZSDCq2NoZXJyeSBwaWNrwrsgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RlaXgpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTMKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiTm8gcG9kZXUgY29tYmluYXIgLS1zcXVhc2ggYW1iIC0tbm8tZmYuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1NQorIywgZnV6enkKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLWNvbW1pdC4iCittc2dzdHIgIk5vIHBvZGV1IGNvbWJpbmFyIC0tc3F1YXNoIGFtYiAtLW5vLWZmLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNzEKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiIgorIk5vIGhpIGhhIHVuYSBjb21pc3Npw7MgZXNwZWNpZmljYWRhIGkgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm8gZXN0w6AgIgorImVzdGFibGVydC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzg4Cittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgIlVuYSBjb21pc3Npw7MgwqtzcXVhc2jCuyBhIHVuIEhFQUQgYnVpdCBlbmNhcmEgbm8gZXMgcGVybWV0IgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5MAorbXNnaWQgIk5vbi1mYXN0LWZvcndhcmQgY29tbWl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW50byBhbiBlbXB0eSBoZWFkIgorbXNnc3RyICJVbmEgY29taXNzacOzIG5vIGQnYXZhbsOnIHLDoHBpZCBubyB0w6kgc2VudGl0IGEgdW4gSEVBRCBidWl0IgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICIlcyAtIG5vIMOpcyB1bmEgY29zYSBxdWUgcHVndWVtIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5NworbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIkVzIHBvdCBmdXNpb25hciBub23DqXMgdW5hIGNvbWlzc2nDsyBhIHVuIEhFQUQgYnVpdCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NzYKK21zZ2lkICJyZWZ1c2luZyB0byBtZXJnZSB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJzJ2VzdMOgIHJlZnVzYW50IGZ1c2lvbmFyIGhpc3TDsnJpZXMgbm8gcmVsYWNpb25hZGVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ4NQorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkphIGVzdMOgIGFsIGRpYS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICJTJ2VzdGFuIGFjdHVhbGl0emFudCAlcy4uJXNcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iCittc2dzdHIgIlMnZXN0w6AgaW50ZW50YW50IHVuYSBmdXNpw7MgbW9sdCB0cml2aWFsIGVuIGwnw61uZGV4Li4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIk5vLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU2OQorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4gWWVlYWghIgorbXNnc3RyICJKYSBlc3TDoCBhbCBkaWEuIEVzdHVwZW5kISIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NzUKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIk5vIMOpcyBwb3NzaWJsZSBhdmFuw6dhciByw6BwaWRhbWVudCwgcydlc3TDoCBhdm9ydGFudC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk4IGJ1aWx0aW4vbWVyZ2UuYzoxNjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICJTJ2VzdMOgIHJlYm9iaW5hbnQgbCdhcmJyZSBhIGxhIHByaXN0aW5hLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICJTJ2VzdMOgIGludGVudGFudCBsJ2VzdHJhdMOoZ2lhIGRlIGZ1c2nDsyAlcy4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiQ2FwIGVzdHJhdMOoZ2lhIGRlIGZ1c2nDsyBoYSBnZXN0aW9uYXQgbGEgZnVzacOzLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAiTCdlc3RyYXTDqGdpYSBkZSBmdXNpw7MgJXMgaGEgZmFsbGF0LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIKK21zZ3N0ciAiUydlc3TDoCB1c2FudCBlbCAlcyBwZXIgYSBwcmVwYXJhciBsYSByZXNvbHVjacOzIGEgbcOgLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY3NworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisiTGEgZnVzacOzIGF1dG9tw6B0aWNhIGhhIHNvcnRpdCBiw6k7IHMnaGEgYXR1cmF0IGFiYW5zIGRlIGNvbWV0cmUgY29tIHMnaGF2aWEgIgorImRlbWFuYXRcbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzIKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29taXNzacOzPiA8Y29taXNzacOzPi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21pc3Npw7M+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNAorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbWlzc2nDsz4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM1Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29taXNzacOzPiA8Y29taXNzacOzPiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzYKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWZlcsOobmNpYT4gWzxjb21pc3Npw7M+XSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTUzCittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICJlbWV0IHRvdHMgZWxzIGF2YW50cGFzc2F0cyBjb211bnMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NQorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAidHJvYmEgZWxzIGF2YW50cGFzc2F0cyBwZXIgYSB1bmEgc29sYSBmdXNpw7MgZCduIHZpZXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NworbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICJsbGlzdGEgbGVzIHJldmlzaW9ucyBubyBhYmFzdGFibGVzIGQnYWx0cmVzIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTkKK21zZ2lkICJpcyB0aGUgZmlyc3Qgb25lIGFuY2VzdG9yIG9mIHRoZSBvdGhlcj8iCittc2dzdHIgIsOpcyBsYSBwcmltZXJhIHVuIGF2YW50cGFzc2F0IGRlIGwnYWx0cmU/IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNjEKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAiIgorInRyb2JhIG9uIDxjb21pc3Npw7M+IHMnaGEgYmlmdXJjYXQgZGVsIHJlZ2lzdHJlIGRlIHJlZmVyw6huY2llcyBkZSA8cmVmZXLDqG5jaWE+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo5Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiAiCisiPG9yaWctZmlsZT4gPGZpbGUyPiIKK21zZ3N0ciAiIgorImdpdCBtZXJnZS1maWxlIFs8b3BjaW9ucz5dIFstTCA8bm9tMT4gWy1MIDxvcmlnaW5hbD4gWy1MIDxub20yPl1dXSA8Zml0eGVyMT4gIgorIjxmaXR4ZXItb3JpZ2luYWw+IDxmaXR4ZXIyPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJlbnZpYSBlbHMgcmVzdWx0YXRzIGEgbGEgc29ydGlkYSBlc3TDoG5kYXJkIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNgorbXNnaWQgInVzZSBhIGRpZmYzIGJhc2VkIG1lcmdlIgorbXNnc3RyICJ1c2EgdW5hIGZ1c2nDsyBiYXNhZGEgZW4gZGlmZjMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM3Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIgorbXNnc3RyICJlbiBjb25mbGljdGVzLCB1c2EgbGEgbm9zdHJhIHZlcnNpw7MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM5Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgImVuIGNvbmZsaWN0ZXMsIHVzYSBsYSBzZXZhIHZlcnNpw7MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQxCittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIGEgdW5pb24gdmVyc2lvbiIKK21zZ3N0ciAiZW4gY29uZmxpY3RlcywgdXNhIHVuYSB2ZXJzacOzIGQndW5pw7MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ0Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoaXMgbWFya2VyIHNpemUiCittc2dzdHIgImVuIGNvbmZsaWN0ZXMsIHVzYSBhcXVlc3RhIG1pZGEgZGUgbWFyY2Fkb3IiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ1Cittc2dpZCAiZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzIgorbXNnc3RyICJubyBhdmlzaXMgZGUgY29uZmxpY3RlcyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDcKK21zZ2lkICJzZXQgbGFiZWxzIGZvciBmaWxlMS9vcmlnLWZpbGUvZmlsZTIiCittc2dzdHIgImVzdGFibGVpeCBsZXMgZXRpcXVldGVzIHBlciBhIGZpdHhlcjEvZml0eGVyLW9yaWdpbmFsL2ZpdHhlcjIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gJXMiCittc2dzdHIgIm9wY2nDsyBkZXNjb25lZ3VkYSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGwnb2JqZWN0ZSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZS4gSWdub3JpbmcgJXMuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlcy4gSWdub3JpbmcgJXMuIgorbXNnc3RyWzBdICJubyBlcyBwb3QgZ2VzdGlvbmFyIG3DqXMgZCclZCBiYXNlLiBTJ2VzdMOgIGlnbm9yYW50ICVzLiIKK21zZ3N0clsxXSAibm8gZXMgcG9kZW4gZ2VzdGlvbmFyIG3DqXMgZGUgJWQgYmFzZXMuIFMnZXN0w6AgaWdub3JhbnQgJXMuIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjY1Cittc2dpZCAibm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAibm8gcydlc3TDoCBnZXN0aW9uYW50IHJlcyBhIHBhcnQgZGUgbGEgZnVzacOzIGRlIGRvcyBjYXBzLiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NCBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIGxhIHJlZmVyw6huY2lhIMKrJXPCuyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXNcbiIKK21zZ3N0ciAiUydlc3TDoCBmdXNpb25hbnQgJXMgYW1iICVzXG4iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6NjYKK21zZ2lkICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorbXNnc3RyICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NAorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICJsJ2VudHJhZGEgw6lzIGFjYWJhZGEgYW1iIE5VTCIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTUgYnVpbHRpbi93cml0ZS10cmVlLmM6MjYKK21zZ2lkICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgInBlcm1ldCBlbHMgb2JqZWN0ZXMgYWJzZW50cyIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTYKK21zZ2lkICJhbGxvdyBjcmVhdGlvbiBvZiBtb3JlIHRoYW4gb25lIHRyZWUiCittc2dzdHIgInBlcm1ldCBsYSBjcmVhY2nDsyBkZSBtw6lzIGQndW4gYXJicmUiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjkKK21zZ2lkICIiCisiZ2l0IG11bHRpLXBhY2staW5kZXggWzxvcHRpb25zPl0gKHdyaXRlfHZlcmlmeXxleHBpcmV8cmVwYWNrIC0tYmF0Y2gtIgorInNpemU9PHNpemU+KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNgorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjkKK21zZ2lkICIiCisiZHVyaW5nIHJlcGFjaywgY29sbGVjdCBwYWNrLWZpbGVzIG9mIHNtYWxsZXIgc2l6ZSBpbnRvIGEgYmF0Y2ggdGhhdCBpcyAiCisibGFyZ2VyIHRoYW4gdGhpcyBzaXplIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjUwIGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NjcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgImhpIGhhIG1hc3NhIHBhcsOgbWV0cmVzIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo2MAorbXNnaWQgIi0tYmF0Y2gtc2l6ZSBvcHRpb24gaXMgb25seSBmb3IgJ3JlcGFjaycgc3ViY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJzdWJvcmRyZSBkZXNjb25lZ3VkYTogJXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOAorbXNnaWQgImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICJnaXQgbXYgWzxvcGNpb25zPl0gPG9yaWdlbj4uLi4gPGRlc3TDrT4iCisKKyM6IGJ1aWx0aW4vbXYuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgIkVsIGRpcmVjdG9yaSAlcyDDqXMgZW4gbCfDrW5kZXggaSBubyBoaSBoYSBjYXAgc3VibcOyZHVsPyIKKworIzogYnVpbHRpbi9tdi5jOjg1Cittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJGZXUgwqtzdGFnZcK7IGRlbHMgdm9zdHJlcyBjYW52aXMgYSAuZ2l0bW9kdWxlcyBvIGZldSDCq3N0YXNowrsgZGVscyBtYXRlaXhvcyAiCisicGVyIGEgcHJvY2VkaXIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiJS4qcyDDqXMgZW4gbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjUKK21zZ2lkICJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgImZvcsOnYSBlbCBtb3ZpbWVudCAvIGNhbnZpIGRlIG5vbSBlbmNhcmEgcXVlIGVsIGRlc3TDrSBleGlzdGVpeGkiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjcKK21zZ2lkICJza2lwIG1vdmUvcmVuYW1lIGVycm9ycyIKK21zZ3N0ciAib21ldCBlbHMgZXJyb3JzIGRlIG1vdmltZW50IC8gY2FudmkgZGUgbm9tIgorCisjOiBidWlsdGluL212LmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICJlbCBkZXN0w60gwqslc8K7IG5vIMOpcyB1biBkaXJlY3RvcmkiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICJTJ2VzdMOgIGNvbXByb3ZhbnQgZWwgY2FudmkgZGUgbm9tIGRlIMKrJXPCuyBhIMKrJXPCu1xuIgorCisjOiBidWlsdGluL212LmM6MTg0Cittc2dpZCAiYmFkIHNvdXJjZSIKK21zZ3N0ciAib3JpZ2VuIGluY29ycmVjdGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODcKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICJubyBlcyBwb3QgbW91cmUgdW4gZGlyZWN0b3JpIGEgZGlucyBkJ2VsbCBtYXRlaXgiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTAKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICJubyBlcyBwb3QgbW91cmUgdW4gZGlyZWN0b3JpIHNvYnJlIHVuIGZpdHhlciIKKworIzogYnVpbHRpbi9tdi5jOjE5OQorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgImVsIGRpcmVjdG9yaSBkJ29yaWdlbiBlc3TDoCBidWl0IgorCisjOiBidWlsdGluL212LmM6MjI0Cittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAibm8gZXN0w6Agc290YSBjb250cm9sIGRlIHZlcnNpb25zIgorCisjOiBidWlsdGluL212LmM6MjI3Cittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICJlbCBkZXN0w60gZXhpc3RlaXgiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcndyaXRpbmcgJyVzJyIKK21zZ3N0ciAicydlc3TDoCBzb2JyZWVzY3JpdmludCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzgKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICJObyBlcyBwb3Qgc29icmVlc2NyaXVyZSIKKworIzogYnVpbHRpbi9tdi5jOjI0MQorbXNnaWQgIm11bHRpcGxlIHNvdXJjZXMgZm9yIHRoZSBzYW1lIHRhcmdldCIKK21zZ3N0ciAibcO6bHRpcGxlcyBvcsOtZ2VucyBwZXIgYWwgbWF0ZWl4IGRlc3TDrSIKKworIzogYnVpbHRpbi9tdi5jOjI0MworbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiZWwgZGlyZWN0b3JpIGRlc3TDrSBubyBleGlzdGVpeCIKKworIzogYnVpbHRpbi9tdi5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiJXMsIG9yaWdlbj0lcywgZGVzdMOtPSVzIgorCisjOiBidWlsdGluL212LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIlMnZXN0w6AgY2FudmlhbnQgZWwgbm9tIGRlICVzIGEgJXNcbiIKKworIzogYnVpbHRpbi9tdi5jOjI3NyBidWlsdGluL3JlbW90ZS5jOjcxNiBidWlsdGluL3JlcGFjay5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZWwgY2FudmkgZGVsIG5vbSBkZSDCqyVzwrsgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDAzCittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxvcGNpb25zPl0gPGNvbWlzc2nDsz4uLi4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDQKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1hbGwiCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9wY2lvbnM+XSAtLWFsbCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQwNQorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLXN0ZGluIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxvcGNpb25zPl0gLS1zdGRpbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2MgorbXNnaWQgInByaW50IG9ubHkgbmFtZXMgKG5vIFNIQS0xKSIKK21zZ3N0ciAiaW1wcmltZWl4IG5vbcOpcyBlbHMgbm9tcyAoc2Vuc2UgU0hBLTEpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDYzCittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICJub23DqXMgdXNhIGxlcyBldGlxdWV0ZXMgcGVyIGEgYW5vbWVuYXIgbGVzIGNvbWlzc2lvbnMiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjUKK21zZ2lkICJvbmx5IHVzZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAibm9tw6lzIHVzYSBsZXMgcmVmZXLDqG5jaWVzIHF1ZSBjb2luY2lkZWl4aW4gYW1iIDxwYXRyw7M+IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY3Cittc2dpZCAiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJpZ25vcmEgbGVzIHJlZmVyw6huY2llcyBxdWUgY29pbmNpZGVpeGluIGFtYiA8cGF0csOzPiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2OQorbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgImxsaXN0YSB0b3RlcyBsZXMgY29taXNzaW9ucyBhYmFzdGFibGVzIGRlIHRvdGVzIGxlcyByZWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzAKK21zZ2lkICJyZWFkIGZyb20gc3RkaW4iCittc2dzdHIgImxsZWdlaXggZGUgc3RkaW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzEKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgInBlcm1ldCBpbXByaW1pciBlbHMgbm9tcyBgdW5kZWZpbmVkYCAocGVyIGRlZmVjdGUpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDc3Cittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbiB0aGUgaW5wdXQgKGludGVybmFsIHVzZSkiCittc2dzdHIgImRlc3JlZmVyZW5jaWEgbGVzIGV0aXF1ZXRlcyBlbiBsJ2VudHJhZGEgKMO6cyBpbnRlcm4pIgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXLDqG5jaWEtZGUtbm90ZXM+XSBbbGxpc3RhIFs8b2JqZWN0ZT5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI5Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gIgorInwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXLDqG5jaWEtZGUtbm90ZXM+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tICIKKyI8bWlzc2F0Z2U+IHwgLUYgPGZpdHhlcj4gfCAoLWMgfCAtQykgPG9iamVjdGU+XSBbPG9iamVjdGU+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gY29weSBbLWZdIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcsOobmNpYS1kZS1ub3Rlcz5dIGNvcHkgWy1mXSA8ZCdvYmplY3RlPiA8YS1vYmplY3RlPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxCittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgIgorIigtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyw6huY2lhLWRlLW5vdGVzPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gIgorIjxtaXNzYXRnZT4gfCAtRiA8Zml0eGVyPiB8ICgtYyB8IC1DKSA8b2JqZWN0ZT5dIFs8b2JqZWN0ZT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzIKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXLDqG5jaWEtZGUtbm90ZXM+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVjdGU+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcsOobmNpYS1kZS1ub3Rlcz5dIHNob3cgWzxvYmplY3RlPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXLDqG5jaWEtZGUtbm90ZXM+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxlc3RyYXTDqGdpYT5dICIKKyI8cmVmZXLDqG5jaWEtZGUtbm90ZXM+IgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyw6huY2lhLWRlLW5vdGVzPl0gcmVtb3ZlIFs8b2JqZWN0ZT4uLi5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW5dIFstdl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyw6huY2lhLWRlLW5vdGVzPl0gcHJ1bmUgWy1uXSBbLXZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzkKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcsOobmNpYS1kZS1ub3Rlcz5dIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NAorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFtsbGlzdGEgWzxvYmplY3RlPl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6NDkKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhZGQgWzxvcGNpb25zPl0gWzxvYmplY3RlPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NAorbXNnaWQgImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IFs8b3BjaW9ucz5dIDxkJ29iamVjdGU+IDxhLW9iamVjdGU+IgorCisjOiBidWlsdGluL25vdGVzLmM6NTUKK21zZ2lkICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+XS4uLiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGQnb2JqZWN0ZT4gPGEtb2JqZWN0ZT5dLi4uIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAKK21zZ2lkICJnaXQgbm90ZXMgYXBwZW5kIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhcHBlbmQgWzxvcGNpb25zPl0gWzxvYmplY3RlPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NQorbXNnaWQgImdpdCBub3RlcyBlZGl0IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBlZGl0IFs8b2JqZWN0ZT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAKK21zZ2lkICJnaXQgbm90ZXMgc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgc2hvdyBbPG9iamVjdGU+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgWzxvcGNpb25zPl0gPHJlZmVyw6huY2lhLWRlLW5vdGVzPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcGNpb25zPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wY2lvbnM+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgyCittc2dpZCAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWN0ZT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODcKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBwcnVuZSBbPG9wY2lvbnM+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkyCittc2dpZCAiZ2l0IG5vdGVzIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6OTcKK21zZ2lkICJXcml0ZS9lZGl0IHRoZSBub3RlcyBmb3IgdGhlIGZvbGxvd2luZyBvYmplY3Q6IgorbXNnc3RyICJFc2NyaXZpdS9lZGl0ZXUgbGVzIG5vdGVzIHBlciBsJ29iamVjdGUgc2Vnw7xlbnQ6IgorCisjOiBidWlsdGluL25vdGVzLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGluaWNpYXIgJ3Nob3cnIHBlciBhIGwnb2JqZWN0ZSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnc2hvdycgb3V0cHV0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBsYSBzb3J0aWRhIGRlICdzaG93JyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZmluYWxpdHphciAnc2hvdycgcGVyIGEgbCdvYmplY3RlIMKrJXPCuyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE5NworbXNnaWQgInBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAiIgorImVzcGVjaWZpcXVldSBlbCBjb250aW5ndXQgZGUgbGEgbm90YSBmZW50IHNlcnZpciBsJ29wY2nDsyAtbSBvIGwnb3BjacOzIC1GIgorCisjOiBidWlsdGluL25vdGVzLmM6MjA2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGwnb2JqZWN0ZSBkZSBub3RhIgorCisjOiBidWlsdGluL25vdGVzLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBub3RlIGNvbnRlbnRzIGhhdmUgYmVlbiBsZWZ0IGluICVzIgorbXNnc3RyICJzJ2hhbiBkZWl4YXQgZWxzIGNvbnRpbmd1dHMgZGUgbGEgbm90YSBlbiAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI0MiBidWlsdGluL3RhZy5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2JyaXIgbyBsbGVnaXIgwqslc8K7IgorCisjOiBidWlsdGluL25vdGVzLmM6MjYzIGJ1aWx0aW4vbm90ZXMuYzozMTMgYnVpbHRpbi9ub3Rlcy5jOjMxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjM4MyBidWlsdGluL25vdGVzLmM6NDM4IGJ1aWx0aW4vbm90ZXMuYzo1MjYKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzEgYnVpbHRpbi9ub3Rlcy5jOjYxMCBidWlsdGluL25vdGVzLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHJlc29sZHJlIMKrJXPCuyBjb20gYSByZWZlcsOobmNpYSB2w6BsaWRhLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbGxlZ2lyIGwnb2JqZWN0ZSDCqyVzwrsuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG5vdGUgZGF0YSBmcm9tIG5vbi1ibG9iIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAibm8gZXMgcG9kZW4gbGxlZ2lyIGxlcyBkYWRlcyBkZSBub2RlIGRlIGwnb2JqZWN0ZSBubyBkZSBibG9iIMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICJsw61uaWEgZCdlbnRyYWRhIG1hbCBmb3JtYWRhOiDCqyVzwrsuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNvcGlhciBsZXMgbm90ZXMgZGUgwqslc8K7IGEgwqslc8K7IgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGZpcnN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBnaXQKKyMuIG5vdGVzIGNvbW1hbmQ6ICdhZGQnLCAnbWVyZ2UnLCAncmVtb3ZlJywgZXRjLgorIy4KKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gJXMgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICJzJ2VzdMOgIHJlZnVzYW50ICVzIGxlcyBub3RlcyBlbiAlcyAoZm9yYSBkZSByZWZzL25vdGVzLykiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNzYgYnVpbHRpbi9ub3Rlcy5jOjQzMSBidWlsdGluL25vdGVzLmM6NTA5CisjOiBidWlsdGluL25vdGVzLmM6NTIxIGJ1aWx0aW4vbm90ZXMuYzo1OTggYnVpbHRpbi9ub3Rlcy5jOjY2NQorIzogYnVpbHRpbi9ub3Rlcy5jOjgxNSBidWlsdGluL25vdGVzLmM6OTYzIGJ1aWx0aW4vbm90ZXMuYzo5ODUKK21zZ2lkICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorbXNnc3RyICJtYXNzYSBwYXLDoG1ldHJlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4OSBidWlsdGluL25vdGVzLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgIm5vIHMnaGEgdHJvYmF0IGNhcCBub3RhIHBlciBhIGwnb2JqZWN0ZSAlcy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTAgYnVpbHRpbi9ub3Rlcy5jOjU3NgorbXNnaWQgIm5vdGUgY29udGVudHMgYXMgYSBzdHJpbmciCittc2dzdHIgImFub3RhIGVscyBjb250aW5ndXRzIGNvbSBhIGNhZGVuYSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMyBidWlsdGluL25vdGVzLmM6NTc5Cittc2dpZCAibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiCittc2dzdHIgImFub3RhIGVscyBjb250aW5ndXRzIGVuIHVuIGZpdHhlciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxNiBidWlsdGluL25vdGVzLmM6NTgyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICJyZXVzYSBpIGVkaXRhIGwnb2JqZWN0ZSBkZSBub3RhIGVzcGVjaWZpY2F0IgorCisjOiBidWlsdGluL25vdGVzLmM6NDE5IGJ1aWx0aW4vbm90ZXMuYzo1ODUKK21zZ2lkICJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgInJldXNhIGwnb2JqZWN0ZSBkZSBub3RhIGVzcGVjaWZpY2F0IgorCisjOiBidWlsdGluL25vdGVzLmM6NDIyIGJ1aWx0aW4vbm90ZXMuYzo1ODgKK21zZ2lkICJhbGxvdyBzdG9yaW5nIGVtcHR5IG5vdGUiCittc2dzdHIgInBlcm1ldCBsJ2VtbWFnYXR6ZW1hdGdlIGQndW5hIG5vdGEgYnVpZGEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MjMgYnVpbHRpbi9ub3Rlcy5jOjQ5NgorbXNnaWQgInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgInJlZW1wbGHDp2EgbGVzIG5vdGVzIGV4aXN0ZW50cyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIk5vIGVzIHBvZGVuIGFmZWdpciBsZXMgbm90ZXMuIFMnaGFuIHRyb2JhdCBub3RlcyBleGlzdGVudHMgZGUgbCdvYmplY3RlICVzLiAiCisiVXNldSAnLWYnIHBlciBhIHNvYnJlZXNjcml1cmUgbGVzIG5vdGVzIGV4aXN0ZW50cyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ2MyBidWlsdGluL25vdGVzLmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiUydlc3RhbiBzb2JyZWVzY3JpdmludCBsZXMgbm90ZXMgZXhpc3RlbnRzIGRlIGwnb2JqZWN0ZSAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDc1IGJ1aWx0aW4vbm90ZXMuYzo2MzcgYnVpbHRpbi9ub3Rlcy5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiUydlc3TDoCBlbGltaW5hbnQgbGEgbm90YSBkZSBsJ29iamVjdGUgJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5NworbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICJsbGVnZWl4IGVscyBvYmplY3RlcyBkZXMgZGUgc3RkaW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTkKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAiIgorImNhcnJlZ2EgbGEgY29uZmlndXJhY2nDsyBkZSByZWVzY3JpcHR1cmEgcGVyIGEgPG9yZHJlPiAoaW1wbGljYSAtLXN0ZGluKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxNworbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAiaGkgaGEgbWFzc2EgcG9jcyBwYXLDoG1ldHJlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyJObyBlcyBwb2RlbiBjb3BpYXIgbGVzIG5vdGVzLiBTJ2hhbiB0cm9iYXQgbm90ZXMgZXhpc3RlbnRzIGRlIGwnb2JqZWN0ZSAlcy4gIgorIlVzZXUgJy1mJyBwZXIgYSBzb2JyZWVzY3JpdXJlIGxlcyBub3RlcyBleGlzdGVudHMuIgorCisjOiBidWlsdGluL25vdGVzLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICJtYW5xdWVuIG5vdGVzIGEgbCdvYmplY3RlIGZvbnQgJXMuIE5vIGVzIHBvdCBjb3BpYXIuIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyJFcyBkZXNhY29uc2VsbGVuIGxlcyBvcGNpb25zIC1tLy1GLy1jLy1DIGVuIGZhdm9yIGRlIGxhIHN1Ym9yZHJlICdlZGl0Jy5cbiIKKyJVc2V1IMKrZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQ8K7IGVuIGxsb2MgZCdhaXjDsi5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY5OAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gc3VwcmltaXIgbGEgcmVmZXLDqG5jaWEgTk9URVNfTUVSR0VfUEFSVElBTCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwMAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgcmVmIE5PVEVTX01FUkdFX1JFRiIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBzdXByaW1pciBsYSByZWZlcsOobmNpYSBOT1RFU19NRVJHRV9SRUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDIKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICdnaXQgbm90ZXMgbWVyZ2UnIHdvcmt0cmVlIgorbXNnc3RyICIiCisicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlbGltaW5hciBsJ2FyYnJlIGRlIHRyZWJhbGwgZGUgJ2dpdCBub3RlcyBtZXJnZSciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjIKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgbGEgcmVmZXLDqG5jaWEgTk9URVNfTUVSR0VfUEFSVElBTCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyNAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHRyb2JhciBjYXAgY29taXNzacOzIGRlIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjb21pc3Npw7MgZGUgTk9URVNfTUVSR0VfUEFSVElBTC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MzkKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gcmVzb2xkcmUgTk9URVNfTUVSR0VfUkVGIgorCisjOiBidWlsdGluL25vdGVzLmM6NzQyCittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplIG5vdGVzIG1lcmdlIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGZpbmFsaXR6YXIgbGEgZnVzacOzIGRlIG5vdGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm90ZXMgbWVyZ2Ugc3RyYXRlZ3kgJXMiCittc2dzdHIgImVzdHJhdMOoZ2lhIGRlIGZ1c2nDsyBkZSBub3RlcyBkZXNjb25lZ3VkYSAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NAorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9ucyBnZW5lcmFscyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NgorbXNnaWQgIk1lcmdlIG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbnMgZGUgZnVzacOzIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg4Cittc2dpZCAiIgorInJlc29sdmUgbm90ZXMgY29uZmxpY3RzIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKK21zZ3N0ciAiIgorInJlc29sIGVscyBjb25mbGljdGVzIGRlIG5vdGEgdXNhbnQgbCdlc3RyYXTDqGdpYSBkb25hZGEgKG1hbnVhbC9vdXJzL3RoZWlycy8iCisidW5pb24vY2F0X3NvcnRfdW5pcSkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTAKK21zZ2lkICJDb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICJTJ2VzdGFuIGNvbWV0ZW50IGxlcyBub3RlcyBzZW5zZSBmdXNpb25hciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MgorbXNnaWQgImZpbmFsaXplIG5vdGVzIG1lcmdlIGJ5IGNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgImZpbmFsaXR6YSBsYSBmdXNpw7MgZGUgbm90ZXMgY29tZXRlbnQgbGVzIG5vdGVzIHNlbnNlIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzk0Cittc2dpZCAiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAiUydlc3TDoCBhdm9ydGFudCBsYSByZXNvbHVjacOzIGRlIGZ1c2nDsyBkZSBub3RlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NgorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICJhdm9ydGEgbGEgZnVzacOzIGRlIG5vdGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODA3Cittc2dpZCAiY2Fubm90IG1peCAtLWNvbW1pdCwgLS1hYm9ydCBvciAtcy8tLXN0cmF0ZWd5IgorbXNnc3RyICJubyBlcyBwb3QgY29tYmluYXIgLS1jb21taXQsIC0tYWJvcnQgaSAtcy8tLXN0cmF0ZWd5IgorCisjOiBidWlsdGluL25vdGVzLmM6ODEyCittc2dpZCAibXVzdCBzcGVjaWZ5IGEgbm90ZXMgcmVmIHRvIG1lcmdlIgorbXNnc3RyICJjYWwgZXNwZWNpZmljYXIgdW5hIHJlZmVyw6huY2lhIGRlIG5vdGVzIGEgZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAtcy8tLXN0cmF0ZWd5OiAlcyIKK21zZ3N0ciAiLXMvLS1zdHJhdGVneSBkZXNjb25lZ3VkYTogJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBub3RlcyBtZXJnZSBpbnRvICVzIGlzIGFscmVhZHkgaW4tcHJvZ3Jlc3MgYXQgJXMiCittc2dzdHIgInVuYSBmdXNpw7MgZGUgbm90ZXMgYSAlcyBqYSBlc3TDoCBlbiBjdXJzIGEgJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0b3JlIGxpbmsgdG8gY3VycmVudCBub3RlcyByZWYgKCVzKSIKK21zZ3N0ciAiIgorInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZW1tYWdhdHplbWFyIGwnZW5sbGHDpyBhIGxhIHJlZmVyw6huY2lhIGRlIG5vdGVzICIKKyJhY3R1YWwgKCVzKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0b21hdGljIG5vdGVzIG1lcmdlIGZhaWxlZC4gRml4IGNvbmZsaWN0cyBpbiAlcyBhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAiCisiJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG9yIGFib3J0IHRoZSBtZXJnZSB3aXRoICdnaXQgbm90ZXMgbWVyZ2UgLS0iCisiYWJvcnQnLlxuIgorbXNnc3RyICIiCisiTGEgZnVzacOzIGRlIG5vdGVzIGF1dG9tw6B0aWNhIGhhIGZhbGxhdC4gQXJyZWdsZXUgZWxzIGNvbmZsaWN0ZXMgZW4gJXMgaSAiCisiY29tZXRldSBlbCByZXN1bHRhdCBhbWIgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG8gYXZvcnRldSBsYSBmdXNpw7MgYW1iICIKKyInZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODk3IGJ1aWx0aW4vdGFnLmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHJlc29sZHJlIMKrJXPCuyBjb20gYSByZWZlcsOobmNpYSB2w6BsaWRhLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAiTCdvYmplY3RlICVzIG5vIHTDqSBjYXAgbm90YVxuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTEyCittc2dpZCAiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIgorbXNnc3RyICJsJ2ludGVudCBkJ2VsaW1pbmFyIHVuYSBub3RhIG5vIGV4aXN0ZW50IG5vIMOpcyB1biBlcnJvciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxNQorbXNnaWQgInJlYWQgb2JqZWN0IG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsbGVnZWl4IGVscyBub21zIGQnb2JqZWN0ZSBkZXMgZGUgbCdlbnRyYWRhIGVzdMOgbmRhcmQiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTQgYnVpbHRpbi9wcnVuZS5jOjEzMCBidWlsdGluL3dvcmt0cmVlLmM6MTY0Cittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICJubyBlbGltaW5pcywgbm9tw6lzIG1vc3RyYSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgbm90ZXMiCittc2dzdHIgImluZm9ybWEgZGUgbm90ZXMgcG9kYWRlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OAorbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAicmVmZXLDqG5jaWEgZGUgbm90ZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTkKK21zZ2lkICJ1c2Ugbm90ZXMgZnJvbSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAidXNhIGxlcyBub3RlcyBkZSA8cmVmZXLDqG5jaWEtZGUtbm90ZXM+IgorCisjOiBidWlsdGluL25vdGVzLmM6MTAzNCBidWlsdGluL3N0YXNoLmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJzdWJvcmRyZSBkZXNjb25lZ3VkYTogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTIKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+Li4uXSBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcGNpb25zPi4uLl0gWzwgPGxsaXN0YS1kZS1yZWZlcsOobmNpZXM+IHwgPCAiCisiPGxsaXN0YS1kZS1vYmplY3Rlcz5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUzCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs8b3BjaW9ucz4uLi5dIDxub20tYmFzZT4gWzwgPGxsaXN0YS1kZS1yZWZlcsOobmNpZXM+IHwgPCAiCisiPGxsaXN0YS1kZS1vYmplY3Rlcz5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2tlZCBvYmplY3QgQ1JDIGZvciAlcyIKK21zZ3N0ciAiaWdub3JhIGVscyBvYmplY3RlcyBlbXBhcXVldGF0cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo0MzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGFja2VkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgImlnbm9yYSBlbHMgb2JqZWN0ZXMgZW1wYXF1ZXRhdHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTcwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgZGVsdGEgZGV0ZWN0ZWQgZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAibm8gcydoYSByZWJ1dCBsJ29iamVjdGUgZXNwZXJhdCAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3JkZXJlZCAldSBvYmplY3RzLCBleHBlY3RlZCAlPFBSSXUzMj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIGlzIGludmFsaWQ6ICVzIgorbXNnc3RyICIlcyBubyB2w6BsaWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBwYWNrZmlsZSBmb3IgcmV1c2U6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9icmlyIG8gbGxlZ2lyICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjgwMgorIywgZnV6enkKK21zZ2lkICJ1bmFibGUgdG8gc2VlayBpbiByZXVzZWQgcGFja2ZpbGUiCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgZWwgZml0eGVyIGQnw61uZGV4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjgxMworIywgZnV6enkKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIHJldXNlZCBwYWNrZmlsZSIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciBlbCBmaXR4ZXIgZCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODQxCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBwYWNrcyBhcmUgc3BsaXQgZHVlIHRvIHBhY2sucGFja1NpemVMaW1pdCIKK21zZ3N0ciAiIgorInMnZXN0w6AgaW5oYWJpbGl0YW50IGwnZXNjcmlwdHVyYSBkZSBtYXBlcyBkZSBiaXRzLCBlcyBkaXZpZGVpeGVuIGVscyBwYXF1ZXRzICIKKyJhIGNhdXNhIGRlIHBhY2sucGFja1NpemVMaW1pdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4NTQKK21zZ2lkICJXcml0aW5nIG9iamVjdHMiCittc2dzdHIgIlMnZXN0YW4gZXNjcml2aW50IGVscyBvYmplY3RlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5MTcgYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlcyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmZXIgc3RhdCBhICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm90ZSAlPFBSSXUzMj4gb2JqZWN0cyB3aGlsZSBleHBlY3RpbmcgJTxQUkl1MzI+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTE2NAorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICIiCisicydlc3TDoCBpbmhhYmlsaXRhbnQgbCdlc2NyaXB0dXJhIGRlIG1hcGVzIGRlIGJpdHMsIHBlcnF1w6ggYWxndW5zIG9iamVjdGVzIG5vICIKKyJzJ2VtcGFxdWV0ZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3ZlcmZsb3cgaW4gcGFjayBmb3IgJXMiCittc2dzdHIgImVsIGRlc3BsYcOnYW1lbnQgZGUgYmFzZSBkZSBkaWZlcsOobmNpZXMgZXN0w6AgZm9yYSBkZSBsw61taXRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE2MDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG91dCBvZiBib3VuZCBmb3IgJXMiCittc2dzdHIgImVsIGRlc3BsYcOnYW1lbnQgZGUgYmFzZSBkZSBkaWZlcsOobmNpZXMgZXN0w6AgZm9yYSBkZSBsw61taXRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE4NzAKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICJTJ2VzdGFuIGNvbXB0YW50IGVscyBvYmplY3RlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDAwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHNpemUgb2YgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbW91cmUgJXMgYSAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0IGhlYWRlciBvZiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbCdvYmplY3RlOiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDg1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjEwMQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTExCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgIm9iamVjdGUgJXMgbm8gdHJvYmF0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwODggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpbmNvbnNpc3RlbnQgb2JqZWN0IGxlbmd0aCAoJTxQUkl1TUFYPiB2cyAlPFBSSXVNQVg+KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMjUKK21zZ2lkICJzdWJvcHRpbWFsIHBhY2sgLSBvdXQgb2YgbWVtb3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWx0YSBjb21wcmVzc2lvbiB1c2luZyB1cCB0byAlZCB0aHJlYWRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhY2sgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0YWcgJXMiCittc2dzdHIgImluY2xvdSBlbHMgb2JqZWN0ZXMgYWJhc3RhYmxlcyBkZSBxdWFsc2V2b2wgcmVmZXLDqG5jaWEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1OQorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIlMnZXN0YW4gY29tcHJpbWludCBlbHMgb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2NQorbXNnaWQgImluY29uc2lzdGVuY3kgd2l0aCBkZWx0YSBjb3VudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIGVkZ2Ugb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NDYKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAtLW1pc3NpbmciCittc2dzdHIgInZhbG9yIG5vIHbDoGxpZCBwZXIgYSAtLW1pc3NpbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkwNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwMTMKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IG9wZW4gcGFjayBpbmRleCIKK21zZ3N0ciAibm8gZXMgcG90IGZlciBwcmVhZCBlbiBlbCBmaXR4ZXIgZGUgcGFxdWV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0IGF0ICVzIGNvdWxkIG5vdCBiZSBleGFtaW5lZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwMjEKKyMsIGZ1enp5Cittc2dpZCAidW5hYmxlIHRvIGZvcmNlIGxvb3NlIG9iamVjdCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBsJ29iamVjdGUgZGUgbm90YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJub3QgYSByZXYgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzExNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gJyVzJyIKK21zZ3N0ciAicmV2aXNpw7MgaW5jb3JyZWN0ZSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE0MQorbXNnaWQgInVuYWJsZSB0byBhZGQgcmVjZW50IG9iamVjdHMiCittc2dzdHIgIm5vIHMnaGFuIHBvZ3V0IGFmZWdpciBlbHMgb2JqZWN0ZXMgcmVjZW50cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgInZlcnNpw7MgZCfDrW5kZXggbm8gY29tcGF0aWJsZSAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgInZlcnNpw7MgZCfDrW5kZXggaW5jb3JyZWN0YSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNgorbXNnaWQgIjx2ZXJzaW9uPlssPG9mZnNldD5dIgorbXNnc3RyICI8dmVyc2nDsz5bLDxkZXNwbGHDp2FtZW50Pl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNworbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgIiIKKyJlc2NyaXUgZWwgZml0eGVyIGQnw61uZGV4IGRlIHBhcXVldCBlbiBsYSB2ZXJzacOzIGRlIGZvcm1hdCBkJ8OtbmRleCAiCisiZXNwZWNpZmljYWRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDAKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlIgorbXNnc3RyICJtaWRhIG3DoHhpbWEgZGUgY2FkYSBmaXR4ZXIgZW1wYXF1ZXRhdCBkZSBzb3J0aWRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDIKK21zZ2lkICJpZ25vcmUgYm9ycm93ZWQgb2JqZWN0cyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUiCittc2dzdHIgImlnbm9yYSBlbHMgb2JqZWN0ZXMgcHJlc3RhdHMgZCd1biBlbW1hZ2F0emVtYXRnZSBkJ29iamVjdGVzIGFsdGVybmF0aXUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0NAorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiaWdub3JhIGVscyBvYmplY3RlcyBlbXBhcXVldGF0cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ2Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgb2JqZWN0cyIKK21zZ3N0ciAibGltaXRhIGxhIGZpbmVzdHJhIGQnZW1wYXF1ZXRhbWVudCBwZXIgb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0OAorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgIiIKKyJsaW1pdGEgbGEgZmluZXN0cmEgZCdlbXBhcXVldGFtZW50IHBlciBtZW3DsnJpYSBhIG3DqXMgZGVsIGzDrW1pdCBkJ29iamVjdGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTAKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAiIgorImxvbmdpdHVkIG3DoHhpbWEgZGUgbGEgY2FkZW5hIGRlIGRpZmVyw6huY2llcyBwZXJtZXNhIGVuIGVsIHBhcXVldCByZXN1bHRhbnQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1MgorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAicmV1c2EgbGVzIGRpZmVyw6huY2llcyBleGlzdGVudHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1NAorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgInJldXNhIGVscyBvYmplY3RlcyBleGlzdGVudHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1NgorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAidXNhIG9iamVjdGVzIE9GU19ERUxUQSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjU4Cittc2dpZCAidXNlIHRocmVhZHMgd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QgZGVsdGEgbWF0Y2hlcyIKK21zZ3N0ciAidXNhIGZpbHMgZW4gY2VyY2FyIGxlcyBtaWxsb3JlcyBjb2luY2lkw6huY2llcyBkZSBkaWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MAorbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgIm5vIGNyZcOvcyB1bmEgZW1pc3Npw7MgZGUgcGFxdWV0IGJ1aWRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjIKK21zZ2lkICJyZWFkIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsbGVnZWl4IGVscyBwYXLDoG1ldHJlcyBkZSByZXZpc2nDsyBkZXMgZGUgbCdlbnRyYWRhIGVzdMOgbmRhcmQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2NAorbXNnaWQgImxpbWl0IHRoZSBvYmplY3RzIHRvIHRob3NlIHRoYXQgYXJlIG5vdCB5ZXQgcGFja2VkIgorbXNnc3RyICJsaW1pdGEgZWxzIG9iamVjdGVzIGFscyBxdWFscyBlbmNhcmEgbm8gcydoYWdpbiBlbXBhcXVldGF0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAiaW5jbG91IGVscyBvYmplY3RlcyBhYmFzdGFibGVzIGRlIHF1YWxzZXZvbCByZWZlcsOobmNpYSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjcwCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICIiCisiaW5jbG91IGVscyBvYmplY3RlcyBhbHMgcXVhbHMgZmFjaW4gcmVmZXLDqG5jaWEgbGVzIGVudHJhZGVzIGRlbCByZWdpc3RyZSBkZSAiCisicmVmZXLDqG5jaWVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzMKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgdG8gYnkgdGhlIGluZGV4IgorbXNnc3RyICJpbmNsb3UgZWxzIG9iamVjdGVzIGFscyBxdWFscyBmYWNpIHJlZmVyw6huY2lhIGwnw61uZGV4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzYKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgImVtZXQgZWwgcGFxdWV0IGEgc3Rkb3V0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzgKK21zZ2lkICJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiCittc2dzdHIgIiIKKyJpbmNsb3UgZWxzIG9iamVjdGVzIGQnZXRpcXVldGEgcXVlIGZhY2luIHJlZmVyw6huY2lhIGFscyBvYmplY3RlcyBhIGVtcGFxdWV0YXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4MAorbXNnaWQgImtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAicmV0w6luIGVscyBvYmplY3RlcyBpbmFiYXN0YWJsZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4MgorbXNnaWQgInBhY2sgbG9vc2UgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiZW1wYXF1ZXRhIGVscyBvYmplY3RlcyBpbmFiYXN0YWJsZXMgc29sdHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4NAorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICJkZXNlbXBhcXVldGEgZWxzIG9iamVjdGVzIGluYWJhc3RhYmxlcyBtw6lzIG5vdXMgcXVlIDxob3JhPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg3Cittc2dpZCAidXNlIHRoZSBzcGFyc2UgcmVhY2hhYmlsaXR5IGFsZ29yaXRobSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODkKK21zZ2lkICJjcmVhdGUgdGhpbiBwYWNrcyIKK21zZ3N0ciAiY3JlYSBwYXF1ZXRzIHByaW1zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTEKK21zZ2lkICJjcmVhdGUgcGFja3Mgc3VpdGFibGUgZm9yIHNoYWxsb3cgZmV0Y2hlcyIKK21zZ3N0ciAiY3JlYSBwYXF1ZXRzIGFkZXF1YXRzIHBlciBhIGxlcyBvYnRlbmNpb25zIHN1cGVyZmljaWFscyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkzCittc2dpZCAiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIKK21zZ3N0ciAiaWdub3JhIGVscyBwYXF1ZXRzIHF1ZSB0aW5ndWluIHVuIGZpdHhlciAua2VlcCBjb3JyZXNwb25lbnQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NQorIywgZnV6enkKK21zZ2lkICJpZ25vcmUgdGhpcyBwYWNrIgorbXNnc3RyICJ1c2EgZWwgcGFxdWV0IHByaW0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NworbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgIm5pdmVsbCBkZSBjb21wcmVzc2nDsyBkZSBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5OQorbXNnaWQgImRvIG5vdCBoaWRlIGNvbW1pdHMgYnkgZ3JhZnRzIgorbXNnc3RyICJubyBhbWFndWlzIGxlcyBjb21pc3Npb25zIHBlciBlbXBlbHQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMwMQorbXNnaWQgInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorInVzYSB1biDDrW5kZXggZGUgbWFwYSBkZSBiaXRzLCBzaSBlc3TDoCBkaXNwb25pYmxlLCBwZXIgYSBhY2NlbGVyYXIgZWwgIgorInJlY29tcHRlIGQnb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMwMworbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgImVzY3JpdSB1biDDrW5kZXggZGUgbWFwYSBkZSBiaXRzIGp1bnRhbWVudCBhbWIgbCfDrW5kZXggZGUgcGFxdWV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDcKKyMsIGZ1enp5Cittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggaWYgcG9zc2libGUiCittc2dzdHIgImVzY3JpdSDDrW5kZXggZGUgbWFwYSBkZSBiaXRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTEKK21zZ2lkICJoYW5kbGluZyBmb3IgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICJnZXN0acOzIGRlbHMgb2JqZWN0ZXMgYWJzZW50cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzE0Cittc2dpZCAiZG8gbm90IHBhY2sgb2JqZWN0cyBpbiBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzE2CisjLCBmdXp6eQorbXNnaWQgInJlc3BlY3QgaXNsYW5kcyBkdXJpbmcgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgIm1pZGEgZGUgbGEgZmluZXN0cmEgcXVlIHMndXNhIHBlciBhIGNvbXByZXNzacOzIGRlIGRpZmVyw6huY2llcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGNoYWluIGRlcHRoICVkIGlzIHRvbyBkZWVwLCBmb3JjaW5nICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrLmRlbHRhQ2FjaGVMaW1pdCBpcyB0b28gaGlnaCwgZm9yY2luZyAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDQKK21zZ2lkICItLW1heC1wYWNrLXNpemUgY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYSBwYWNrIGZvciB0cmFuc2ZlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDYKK21zZ2lkICJtaW5pbXVtIHBhY2sgc2l6ZSBsaW1pdCBpcyAxIE1pQiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTEKKyMsIGZ1enp5Cittc2dpZCAiLS10aGluIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGFuIGluZGV4YWJsZSBwYWNrIgorbXNnc3RyICItLWZpeC10aGluIG5vIGVzIHBvdCB1c2FyIHNlbnNlIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQxNAorIywgZnV6enkKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC0tdW5wYWNrLXVucmVhY2hhYmxlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSBpIC1BIHPDs24gaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDIwCisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCB1c2UgLS1maWx0ZXIgd2l0aG91dCAtLXN0ZG91dCIKK21zZ3N0ciAibm8gZXMgcG90IHVzYXIgLWEgYW1iIC1kIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0ODEKK21zZ2lkICJFbnVtZXJhdGluZyBvYmplY3RzIgorbXNnc3RyICJTJ2VzdGFuIGVudW1lcmFudCBlbHMgb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJUb3RhbCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHJldXNlZCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPikiCittc2dzdHIgIiIKKyJUb3RhbCAlPFBSSXUzMj4gKGRpZmVyw6huY2llcyAlPFBSSXUzMj4pLCByZXVzYXQgJTxQUkl1MzI+IChkaWZlcsOobmNpZXMgIgorIiU8UFJJdTMyPikiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6OAorbXNnaWQgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBwYWNrLXJlZnMgWzxvcGNpb25zPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTYKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmciCittc2dzdHIgImVtcGFxdWV0YS1obyB0b3QiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTcKK21zZ2lkICJwcnVuZSBsb29zZSByZWZzIChkZWZhdWx0KSIKK21zZ3N0ciAicG9kYSBsZXMgcmVmZXLDqG5jaWVzIHNvbHRlcyAocGVyIGRlZmVjdGUpIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjkKK21zZ2lkICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCittc2dzdHIgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo0MgorbXNnaWQgIlJlbW92aW5nIGR1cGxpY2F0ZSBvYmplY3RzIgorbXNnc3RyICJTJ2VzdGFuIGVsaW1pbmFudCBvYmplY3RlcyBkdXBsaWNhdHMiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMgorbXNnaWQgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSA8dGltZT5dIFstLV0gWzxoZWFkPi4uLl0iCittc2dzdHIgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSA8aG9yYT5dIFstLV0gWzxoZWFkPi4uLl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzEKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgImluZm9ybWEgZCdvYmplY3RlcyBwb2RhdHMiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZmVzIGNhZHVjYXIgZWxzIG9iamVjdGVzIG3DqXMgdmVsbHMgcXVlIDxob3JhPiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNgorbXNnaWQgImxpbWl0IHRyYXZlcnNhbCB0byBvYmplY3RzIG91dHNpZGUgcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxNTAKK21zZ2lkICJjYW5ub3QgcHJ1bmUgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgIm5vIGVzIHBvdCBwb2RhciBlbiB1biBkaXDDsnNpdCBkJ29iamVjdGVzIHByZWNpb3NvcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NjYgYnVpbHRpbi9wdWxsLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJWYWxvciBubyB2w6BsaWQgcGVyIGEgJXM6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo4OAorbXNnaWQgImdpdCBwdWxsIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVsbCBbPG9wY2lvbnM+XSBbPGRpcMOyc2l0PiBbPGVzcGVjaWZpY2FjacOzLWRlLXJlZmVyw6huY2lhPi4uLl1dIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDIKK21zZ2lkICJjb250cm9sIGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiY29udHJvbGEgbCdvYnRlbmNpw7MgcmVjdXJzaXZhIGRlIHN1Ym3DsmR1bHMiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0NgorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBtZXJnaW5nIgorbXNnc3RyICJPcGNpb25zIHJlbGFjaW9uYWRlcyBhbWIgZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0OQorbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAiaW5jb3Jwb3JhIGVscyBjYW52aXMgZmVudCDCq3JlYmFzZcK7IGVuIGxsb2MgZGUgZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE3NyBidWlsdGluL3JlYmFzZS5jOjQ2NyBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAicGVybWV0IGwnYXZhbsOnIHLDoHBpZCIKKworIzogYnVpbHRpbi9wdWxsLmM6MTg2Cittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciByZWJhc2UiCittc2dzdHIgIiIKKyJmZXMgwqtzdGFzaMK7IGkgwqtzdGFzaCBwb3DCuyBhdXRvbcOgdGljYW1lbnQgYWJhbnMgaSBkZXNwcsOpcyBkZSBmZXIgwqtyZWJhc2XCuyIKKworIzogYnVpbHRpbi9wdWxsLmM6MjAyCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nIgorbXNnc3RyICJPcGNpb25zIHJlbGFjaW9uYWRlcyBhbWIgb2J0ZW5pciIKKworIzogYnVpbHRpbi9wdWxsLmM6MjEyCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiZm9yw6dhIGxhIHNvYnJlZXNjcmlwdHVyYSBkZSBsYSBicmFuY2EgbG9jYWwiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIyMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIHB1bGxlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAibm9tYnJlIGRlIHN1Ym3DsmR1bHMgYmFpeGF0cyBlbiBwYXJhbMK3bGVsIgorCisjOiBidWlsdGluL3B1bGwuYzozMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgcHVsbC5mZjogJXMiCittc2dzdHIgIlZhbG9yIG5vIHbDoGxpZCBwZXIgYSBwdWxsLmZmOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM3Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0ICIKKyJmZXRjaGVkLiIKK21zZ3N0ciAiIgorIk5vIGhpIGhhIGNhcCBjYW5kaWRhdCBzb2JyZSBlbCBxdWFsIGZlciDCq3JlYmFzZcK7IGVudHJlIGxlcyByZWZlcsOobmNpZXMgcXVlICIKKyJhY2FiZXUgZCdvYnRlbmlyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM5Cittc2dpZCAiIgorIlRoZXJlIGFyZSBubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJObyBoaSBoYSBjYW5kaWRhdHMgcGVyIGEgZnVzaW9uYXIgZW50cmUgbGVzIHJlZmVyw6huY2llcyBxdWUgYWNhYmV1IGQnb2J0ZW5pci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MAorbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIiIKKyJHZW5lcmFsbWVudCBhaXjDsiB2b2wgZGlyIHF1ZSBoZXUgcHJvdmXDr3QgdW5hIGVzcGVjaWZpY2FjacOzIGRlXG4iCisicmVmZXLDqG5jaWEgZGUgY29tb2TDrSBxdWUgbm8gdGVuaWEgY2FwIGNvaW5jaWTDqG5jaWEgZW4gZWwgY29zdGF0IHJlbW90LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIiIKKyJIZXUgZGVtYW5hdCBiYWl4YXIgZGVsIHJlbW90IMKrJXPCuywgcGVyw7Igbm8gaGV1IGVzcGVjaWZpY2F0IGNhcCBicmFuY2EuXG4iCisiUGVycXXDqCBhcXVlc3Qgbm8gw6lzIGVsIHJlbW90IGNvbmZpZ3VyYXQgcGVyIGRlZmVjdGUgcGVyIGEgbGEgdm9zdHJhXG4iCisiYnJhbmNhIGFjdHVhbCwgaGV1IGQnZXNwZWNpZmljYXIgdW5hIGJyYW5jYSBlbiBsYSBsw61uaWEgZCdvcmRyZXMuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDggYnVpbHRpbi9yZWJhc2UuYzoxMzc1IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzMKK21zZ2lkICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIgorbXNnc3RyICJBY3R1YWxtZW50IG5vIHNvdSBlbiBjYXAgYnJhbmNhLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUwIGJ1aWx0aW4vcHVsbC5jOjQ2NSBnaXQtcGFyc2UtcmVtb3RlLnNoOjc5Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIKK21zZ3N0ciAiRXNwZWNpZmlxdWV1IHNvYnJlIHF1aW5hIGJyYW5jYSB2b2xldSBmZXIgwqtyZWJhc2XCuy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MiBidWlsdGluL3B1bGwuYzo0NjcgZ2l0LXBhcnNlLXJlbW90ZS5zaDo4MgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKK21zZ3N0ciAiRXNwZWNpZmlxdWV1IGFtYiBxdWluYSBicmFuY2Egdm9sZXUgZnVzaW9uYXIuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTMgYnVpbHRpbi9wdWxsLmM6NDY4Cittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiVmVnZXUgZ2l0LXB1bGwoMSkgcGVyIGRldGFsbHMuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTUgYnVpbHRpbi9wdWxsLmM6NDYxIGJ1aWx0aW4vcHVsbC5jOjQ3MAorIzogYnVpbHRpbi9yZWJhc2UuYzoxMzgxIGdpdC1wYXJzZS1yZW1vdGUuc2g6NjQKK21zZ2lkICI8cmVtb3RlPiIKK21zZ3N0ciAiPHJlbW90PiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDU1IGJ1aWx0aW4vcHVsbC5jOjQ3MCBidWlsdGluL3B1bGwuYzo0NzUKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6NjUKK21zZ2lkICI8YnJhbmNoPiIKK21zZ3N0ciAiPGJyYW5jYT4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2MyBidWlsdGluL3JlYmFzZS5jOjEzNzMgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3NQorbXNnaWQgIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJObyBoaSBoYSBjYXAgaW5mb3JtYWNpw7MgZGUgc2VndWltZW50IHBlciBhIGxhIGJyYW5jYSBhY3R1YWwuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzIgZ2l0LXBhcnNlLXJlbW90ZS5zaDo5NQorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDoiCittc2dzdHIgIiIKKyJTaSB2b2xldSBlc3RhYmxpciBpbmZvcm1hY2nDsyBkZSBzZWd1aW1lbnQgcGVyIGEgYXF1ZXN0YSBicmFuY2EsIHBvZGV1IGZlci1obyAiCisiYW1iOiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIHRvIG1lcmdlIHdpdGggdGhlIHJlZiAnJXMnXG4iCisiZnJvbSB0aGUgcmVtb3RlLCBidXQgbm8gc3VjaCByZWYgd2FzIGZldGNoZWQuIgorbXNnc3RyICIiCisiTGEgdm9zdHJhIGNvbmZpZ3VyYWNpw7MgZXNwZWNpZmljYSBmdXNpb25hciBhbWIgbGEgcmVmZXLDqG5jaWEgwqslc8K7XG4iCisiZGVsIHJlbW90LCBwZXLDsiBubyBzJ2hhIG9idGluZ3V0IHRhbCByZWZlcsOobmNpYS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIGNvbW1pdCAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhY2NlZGlyIGEgbGEgY29taXNzacOzICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo4NjcKK21zZ2lkICJpZ25vcmluZyAtLXZlcmlmeS1zaWduYXR1cmVzIGZvciByZWJhc2UiCittc2dzdHIgInMnZXN0w6AgaWdub3JhbnQgLS12ZXJpZnktc2lnbmF0dXJlcyBlbiBmZXIgwqtyZWJhc2XCuyIKKworIzogYnVpbHRpbi9wdWxsLmM6OTIyCittc2dpZCAiLS1bbm8tXWF1dG9zdGFzaCBvcHRpb24gaXMgb25seSB2YWxpZCB3aXRoIC0tcmViYXNlLiIKK21zZ3N0ciAibCdvcGNpw7MgLS1bbm8tXS1hdXRvc3Rhc2ggw6lzIHbDoGxpZCBub23DqXMgYW1iIC0tcmViYXNlLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTMwCittc2dpZCAiVXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorIlMnZXN0w6AgYWN0dWFsaXR6YW50IHVuYSBicmFuY2Egbm8gbmFzY3VkYSBhbWIgY2FudmlzIGFmZWdpdHMgYSBsJ8OtbmRleC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkzNAorbXNnaWQgInB1bGwgd2l0aCByZWJhc2UiCittc2dzdHIgImJhaXhhciBmZW50IMKrcmViYXNlwrsiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkzNQorbXNnaWQgInBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgImNvbWV0ZXUtbG9zIG8gZW1tYWdhdHplbWV1LWxvcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKyJmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorImNvbW1pdCAlcy4iCittc2dzdHIgIiIKKyJsJ29idGVuY2nDsyBoYSBhY3R1YWxpdHphdCBIRUFEIGRlIGxhIGJyYW5jYSBhY3R1YWwuXG4iCisicydlc3TDoCBhdmFuw6dhbnQgcsOgcGlkYW1lbnQgZWwgdm9zdHJlIGFyYnJlIGRlIHRyZWJhbGwgZGVzIGRlXG4iCisibGEgY29taXNzacOzICVzLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgZmFzdC1mb3J3YXJkIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIkFmdGVyIG1ha2luZyBzdXJlIHRoYXQgeW91IHNhdmVkIGFueXRoaW5nIHByZWNpb3VzIGZyb21cbiIKKyIkIGdpdCBkaWZmICVzXG4iCisib3V0cHV0LCBydW5cbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJ0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorIk5vIGVzIHBvdCBhdmFuw6dhciByw6BwaWRhbWVudCBlbCB2b3N0cmUgYXJicmUgZGUgdHJlYmFsbC5cbiIKKyJEZXNwcsOpcyBkJ2Fzc2VndXJhciBxdWUgaMOgZ2l1IGRlc2F0IHF1YWxzZXZvbCBjb3NhIHByZWNpb3NhIGRlIGxhIHNvcnRpZGEgIgorImRlXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorImV4ZWN1dGV1XG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisicGVyIGEgcmVjdXBlcmFyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTgxCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIk5vIGVzIHBvZGVuIGZ1c2lvbmFyIG3Dumx0aXBsZXMgYnJhbnF1ZXMgYSB1biBIRUFEIGJ1aXQuIgorCisjOiBidWlsdGluL3B1bGwuYzo5ODUKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIgorbXNnc3RyICJObyBlcyBwb3QgZmVyIMKrcmViYXNlwrsgc29icmUgbcO6bHRpcGxlcyBicmFucXVlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk5MgorbXNnaWQgImNhbm5vdCByZWJhc2Ugd2l0aCBsb2NhbGx5IHJlY29yZGVkIHN1Ym1vZHVsZSBtb2RpZmljYXRpb25zIgorbXNnc3RyICIiCisibm8gZXMgcG90IGZlciDCq3JlYmFzZcK7IGFtYiBtb2RpZmljYWNpb25zIGFscyBzdWJtw7JkdWxzIGVucmVnaXN0cmFkZXMgIgorImxvY2FsbWVudCIKKworIzogYnVpbHRpbi9wdXNoLmM6MTkKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1c2ggWzxvcGNpb25zPl0gWzxkaXDDsnNpdD4gWzxlc3BlY2lmaWNhY2nDsy1kZS1yZWZlcsOobmNpYT4uLi5dXSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTEyCittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICJhYnJldmlhdHVyYSBkJ2V0aXF1ZXRhIHNlbnNlIDx0YWc+IgorCisjOiBidWlsdGluL3B1c2guYzoxMjIKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUgbm9tw6lzIGFjY2VwdGEgbm9tcyBkZSByZWZlcsOobmNpYSBkZSBkZXN0w60gc2VuemlsbHMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE2OAorbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKyJcbiIKKyJQZXIgYSB0cmlhciBxdWFsc2V2b2wgb3BjacOzIHBlcm1hbmVudG1lbnQsIHZlZ2V1IHB1c2guZGVmYXVsdCBhICdnaXQgaGVscCAiCisiY29uZmlnJy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGRvZXMgbm90IG1hdGNoXG4iCisidGhlIG5hbWUgb2YgeW91ciBjdXJyZW50IGJyYW5jaC4gIFRvIHB1c2ggdG8gdGhlIHVwc3RyZWFtIGJyYW5jaFxuIgorIm9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiVG8gcHVzaCB0byB0aGUgYnJhbmNoIG9mIHRoZSBzYW1lIG5hbWUgb24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkxhIGJyYW5jYSBmb250IGRlIGxhIHZvc3RyYSBicmFuY2EgYWN0dWFsIG5vIGNvaW5jaWRlaXhcbiIKKyJhbWIgZWwgbm9tIGRlIGxhIHZvc3RyYSBicmFuY2EgYWN0dWFsLiBQZXIgYSBwdWphci1sYSBhIGxhXG4iCisiYnJhbmNhIGZvbnQgZW4gZWwgcmVtb3QsIHVzZXVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlBlciBhIHB1amFyIGEgbGEgYnJhbmNhIGRlbCBtYXRlaXggbm9tIGVuIGVsIHJlbW90LCB1c2V1XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAiIgorIkFjdHVhbG1lbnQgbm8gc291IGVuIGNhcCBicmFuY2EuXG4iCisiUGVyIGEgcHVqYXIgbGEgaGlzdMOycmlhIHF1ZSBjb25kdWVpeCBhIGwnZXN0YXQgYWN0dWFsXG4iCisiKEhFQUQgc2VwYXJhdCkgYXJhLCB1c2V1XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5vbS1kZS1icmFuY2EtcmVtb3RhPlxuIgorCisjOiBidWlsdGluL3B1c2guYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgIiIKKyJMYSBicmFuY2EgYWN0dWFsICVzIG5vIHTDqSBjYXAgYnJhbmNhIGZvbnQuXG4iCisiUGVyIGEgcHVqYXIgbGEgYnJhbmNhIGFjdHVhbCBpIGVzdGFibGlyIGVsIHJlbW90IGNvbSBhIGZvbnQsIHVzZXVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICIiCisiTGEgYnJhbmNhIGFjdHVhbCAlcyB0w6kgbcO6bHRpcGxlcyBicmFucXVlcyBmb250cywgcydlc3TDoCByZWZ1c2FudCBwdWphci4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisiRXN0ZXUgcHVqYW50IGFsIHJlbW90IMKrJXPCuywgcXVlIG5vIMOpcyBsYSBmb250IGRlIGxhIHZvc3RyYVxuIgorImJyYW5jYSBhY3R1YWwgwqslc8K7LCBzZW5zZSBkaXItbWUgcXXDqCBwdWphciBwZXIgYSBhY3R1YWxpdHphclxuIgorInF1aW5hIGJyYW5jYSByZW1vdGEuIgorCisjOiBidWlsdGluL3B1c2guYzoyNzAKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAiIgorIk5vIGhldSBlc3BlY2lmaWNhdCBjYXAgZXNwZWNpZmljYWNpw7MgZGUgcmVmZXLDqG5jaWEgYSBwdWphciwgaSBwdXNoLmRlZmF1bHQgIgorIsOpcyBcIm5vdGhpbmdcIi4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3NworbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gSW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLlxuIgorIidnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIlMnaGFuIHJlYnV0amF0IGxlcyBhY3R1YWxpdHphY2lvbnMgcGVycXXDqCBlbCBwdW50IGRlIGxhIHZvc3RyYSBicmFuY2FcbiIKKyJhY3R1YWwgZXN0w6AgZGFycmVyZSBkZSBsYSBzZXZhIGJyYW5jYSByZW1vdGEgY29ycmVzcG9uZW50LiBJbnRlZ3JldVxuIgorImVscyBjYW52aXMgcmVtb3RzIChwZXIgZXhlbXBsZSwgJ2dpdCBwdWxsIC4uLicpIGFiYW5zIGRlIHB1amFyIGRlIG5vdS5cbiIKKyJWZWdldSBsYSAnTm90YSBzb2JyZSBhdmFuw6dvcyByw6BwaWRzJyBhICdnaXQgcHVzaCAtLWhlbHAnIHBlciBkZXRhbGxzLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjgzCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiUydoYW4gcmVidXRqYXQgbGVzIGFjdHVhbGl0emFjaW9ucyBwZXJxdcOoIHVuIHB1bnQgZGUgYnJhbmNhIHB1amFkYVxuIgorImVzdMOgIGRhcnJlcmUgZGUgbGEgc2V2YSBicmFuY2EgcmVtb3RhIGNvcnJlc3BvbmVudC4gQWdhZmV1IGFxdWVzdGFcbiIKKyJicmFuY2EgaSBpbnRlZ3JldSBlbHMgY2FudmlzIHJlbW90cyAocGVyIGV4ZW1wbGUsICdnaXQgcHVsbCAuLi4nKVxuIgorImFiYW5zIGRlIHB1amFyIGRlIG5vdS5cbiIKKyJWZWdldSBsYSAnTm90YSBzb2JyZSBhdmFuw6dvcyByw6BwaWRzJyBhICdnaXQgcHVzaCAtLWhlbHAnIHBlciBkZXRhbGxzLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg5Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIlMnaGFuIHJlYnV0amF0IGxlcyBhY3R1YWxpdHphY2lvbnMgcGVycXXDqCBlbCByZW1vdCBjb250w6kgY2FudmlzXG4iCisicXVlIG5vIHRlbml1IGxvY2FsbWVudC4gQWl4w7IgYWNvc3R1bWEgYSBzZXIgY2F1c2F0IHBlciB1biBhbHRyZSBkaXDDsnNpdFxuIgorInF1ZSBoYSBwdWphdCBhIGxhIG1hdGVpeGEgcmVmZXLDqG5jaWEuIFBvdCBzZXIgcXVlIHByaW1lciB2dWxndWV1XG4iCisiaW50ZWdyYXIgZWxzIGNhbnZpcyByZW1vdHMgKHBlciBleGVtcGxlLCAnZ2l0IHB1bGwgLi4uJykgYWJhbnMgZGVcbiIKKyJwdWphciBkZSBub3UuXG4iCisiVmVnZXUgbGEgJ05vdGEgc29icmUgYXZhbsOnb3MgcsOgcGlkcycgYSAnZ2l0IHB1c2ggLS1oZWxwJyBwZXIgZGV0YWxscy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5NgorbXNnaWQgIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0YWcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlbW90ZS4iCittc2dzdHIgIiIKKyJTJ2hhbiByZWJ1dGphdCBsZXMgYWN0dWFsaXR6YWNpb25zIHBlcnF1w6ggbCdldGlxdWV0YSBqYSBleGlzdGVpeCBlbiBlbCByZW1vdC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5OQorbXNnaWQgIiIKKyJZb3UgY2Fubm90IHVwZGF0ZSBhIHJlbW90ZSByZWYgdGhhdCBwb2ludHMgYXQgYSBub24tY29tbWl0IG9iamVjdCxcbiIKKyJvciB1cGRhdGUgYSByZW1vdGUgcmVmIHRvIG1ha2UgaXQgcG9pbnQgYXQgYSBub24tY29tbWl0IG9iamVjdCxcbiIKKyJ3aXRob3V0IHVzaW5nIHRoZSAnLS1mb3JjZScgb3B0aW9uLlxuIgorbXNnc3RyICIiCisiTm8gcG9kZXUgYWN0dWFsaXR6YXIgdW5hIHJlZmVyw6huY2lhIHJlbW90YSBxdWUgYXNzZW55YWxhIHVuXG4iCisib2JqZWN0ZSBubyBkZSBjb21pc3Npw7MsIG5pIGFjdHVhbGl0emFyIHVuYSByZWZlcsOobmNpYSByZW1vdGEgcGVyXG4iCisiZmVyIHF1ZSBhc3NlbnlhbGkgdW4gb2JqZWN0ZSBubyBkZSBjb21pc3Npw7MsIHNlbnNlIHVzYXIgbCdvcGNpw7NcbiIKKyInLS1mb3JjZScuXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIlMnZXN0w6AgcHVqYW50IGEgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHB1amFyIGFsZ3VuZXMgcmVmZXLDqG5jaWVzIGEgwqslc8K7IgorCisjOiBidWlsdGluL3B1c2guYzo1NDIKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICJkaXDDsnNpdCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQzIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY0Cittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAicHVqYSB0b3RlcyBsZXMgcmVmZXLDqG5jaWVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NDQgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjYKK21zZ2lkICJtaXJyb3IgYWxsIHJlZnMiCittc2dzdHIgInJlZmxlY3RlaXggdG90ZXMgbGVzIHJlZmVyw6huY2llcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ2Cittc2dpZCAiZGVsZXRlIHJlZnMiCittc2dzdHIgInN1cHJpbWVpeCBsZXMgcmVmZXLDqG5jaWVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NDcKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgInB1amEgbGVzIGV0aXF1ZXRlcyAobm8gZXMgcG90IHVzYXIgYW1iIC0tYWxsIG8gLS1taXJyb3IpIgorCisjOiBidWlsdGluL3B1c2guYzo1NTAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjcKK21zZ2lkICJmb3JjZSB1cGRhdGVzIgorbXNnc3RyICJmb3LDp2EgbGVzIGFjdHVhbGl0emFjaW9ucyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgxCittc2dpZCAiPHJlZm5hbWU+OjxleHBlY3Q+IgorbXNnc3RyICI8bm9tLWRlLXJlZmVyw6huY2lhPjo8ZXNwZXJhdD4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MyBidWlsdGluL3NlbmQtcGFjay5jOjE4MgorbXNnaWQgInJlcXVpcmUgb2xkIHZhbHVlIG9mIHJlZiB0byBiZSBhdCB0aGlzIHZhbHVlIgorbXNnc3RyICJyZXF1ZXJlaXggcXVlIGVsIHZhbG9yIGFudGljIGRlIGxhIHJlZmVyw6huY2lhIHNpZ3VpIGQnYXF1ZXN0IHZhbG9yIgorCisjOiBidWlsdGluL3B1c2guYzo1NTYKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgImNvbnRyb2xhIGxhIHB1amFkYSByZWN1cnNpdmEgZGVscyBzdWJtw7JkdWxzIgorCisjOiBidWlsdGluL3B1c2guYzo1NTggYnVpbHRpbi9zZW5kLXBhY2suYzoxNzUKK21zZ2lkICJ1c2UgdGhpbiBwYWNrIgorbXNnc3RyICJ1c2EgZWwgcGFxdWV0IHByaW0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OSBidWlsdGluL3B1c2guYzo1NjAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjEKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYyCittc2dpZCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iCittc2dzdHIgInByb2dyYW1hIHF1ZSByZXAgZWxzIHBhcXVldHMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2MQorbXNnaWQgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvc3RhdHVzIgorbXNnc3RyICJlc3RhYmxlaXggbGEgZm9udCBwZXIgYSBnaXQgcHVsbC9zdGF0dXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NAorbXNnaWQgInBydW5lIGxvY2FsbHkgcmVtb3ZlZCByZWZzIgorbXNnc3RyICJwb2RhIGxlcyByZWZlcsOobmNpZXMgZWxpbWluYWRlcyBsb2NhbG1lbnQiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NgorbXNnaWQgImJ5cGFzcyBwcmUtcHVzaCBob29rIgorbXNnc3RyICJldml0YSBlbCBsbGlnYW0gZGUgcHJlcHVqYWRhIgorCisjOiBidWlsdGluL3B1c2guYzo1NjcKK21zZ2lkICJwdXNoIG1pc3NpbmcgYnV0IHJlbGV2YW50IHRhZ3MiCittc2dzdHIgInB1amEgbGVzIGV0aXF1ZXRlcyBhYnNlbnRzIHBlcsOyIHJlbGxldmFudHMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MCBidWlsdGluL3NlbmQtcGFjay5jOjE2OQorbXNnaWQgIkdQRyBzaWduIHRoZSBwdXNoIgorbXNnc3RyICJzaWduYSBsYSBwdWphZGEgYW1iIEdQRyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTcyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc2Cittc2dpZCAicmVxdWVzdCBhdG9taWMgdHJhbnNhY3Rpb24gb24gcmVtb3RlIHNpZGUiCittc2dzdHIgImRlbWFuYSB1bmEgdHJhbnNhY2Npw7MgYXTDsm1pY2EgYWwgY29zdGF0IHJlbW90IgorCisjOiBidWlsdGluL3B1c2guYzo1OTAKK21zZ2lkICItLWRlbGV0ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1taXJyb3IgYW5kIC0tdGFncyIKK21zZ3N0ciAiLS1kZWxldGUgw6lzIGluY29tcGF0aWJsZSBhbWIgLS1hbGwsIC0tbWlycm9yIGkgLS10YWdzIgorCisjOiBidWlsdGluL3B1c2guYzo1OTIKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiLS1kZWxldGUgbm8gdMOpIHNlbnRpdCBzZW5zZSByZWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICJkaXDDsnNpdCBpbmNvcnJlY3RlIMKrJXPCuyIKKworIzogYnVpbHRpbi9wdXNoLmM6NjEzCittc2dpZCAiIgorIk5vIGNvbmZpZ3VyZWQgcHVzaCBkZXN0aW5hdGlvbi5cbiIKKyJFaXRoZXIgc3BlY2lmeSB0aGUgVVJMIGZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBjb25maWd1cmUgYSByZW1vdGUgIgorInJlcG9zaXRvcnkgdXNpbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisiXG4iCisiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iCittc2dzdHIgIiIKKyJObyBoaSBoYSBjYXAgZGVzdMOtIGRlIHB1amFkYSBjb25maWd1cmF0LlxuIgorIkVzcGVjaWZpcXVldSBsJ1VSTCBkZXMgZGUgbGEgbMOtbmlhIGQnb3JkcmVzIG8gYsOpIGNvbmZpZ3VyZXUgdW4gZGlww7JzaXQgcmVtb3QgIgorImZlbnQgc2VydmlyXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxub20+IDx1cmw+XG4iCisiXG4iCisiaSBkZXNwcsOpcyBwdWdldSBmZW50IHNlcnZpciBlbCBub20gcmVtb3RcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5vbT5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjI4Cittc2dpZCAiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCBpIC0tdGFncyBzw7NuIGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzMAorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tYWxsIG5vIGVzIHBvdCBjb21iaW5hciBhbWIgZXNwZWNpZmljYWNpb25zIGRlIHJlZmVyw6huY2lhIgorCisjOiBidWlsdGluL3B1c2guYzo2MzQKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbWlycm9yIGkgLS10YWdzIHPDs24gaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM2Cittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1taXJyb3Igbm8gZXMgcG90IGNvbWJpbmFyIGFtYiBlc3BlY2lmaWNhY2lvbnMgZGUgcmVmZXLDqG5jaWEiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzOQorbXNnaWQgIi0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCBpIC0tbWlycm9yIHPDs24gaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NjQzCittc2dpZCAicHVzaCBvcHRpb25zIG11c3Qgbm90IGhhdmUgbmV3IGxpbmUgY2hhcmFjdGVycyIKK21zZ3N0ciAibGVzIG9wY2lvbnMgZGUgcHVqYWRhIG5vIGhhbiBkZSB0ZW5pciBjYXLDoGN0ZXJzIGRlIGzDrW5pYSBub3ZhIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo4Cittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPG9sZC1iYXNlPi4uPG9sZC10aXA+IDxuZXctYmFzZT4uLjxuZXctdGlwPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo5CisjLCBmdXp6eQorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtdGlwPi4uLjxuZXctdGlwPiIKK21zZ3N0ciAiZ2l0IG1lcmdlIFs8b3BjaW9ucz5dIFs8Y29taXNzacOzPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjEwCisjLCBmdXp6eQorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxiYXNlPiA8b2xkLXRpcD4gPG5ldy10aXA+IgorbXNnc3RyICJnaXQgbXYgWzxvcGNpb25zPl0gPGZvbnQ+Li4uIDxkZXN0w60+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyMgorbXNnaWQgIlBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjQKK21zZ2lkICJ1c2Ugc2ltcGxlIGRpZmYgY29sb3JzIgorbXNnc3RyICJ1dGlsaXR6YSBjb2xvcnMgc2ltcGxlcyBkZSBkaWZmIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyNgorIywgZnV6enkKK21zZ2lkICJub3RlcyIKK21zZ3N0ciAibm90ZXMiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2CisjLCBmdXp6eQorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGxvZyciCittc2dzdHIgInBhc3NhLWhvIGEgwqtnaXQgYW3CuyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NTAgYnVpbHRpbi9yYW5nZS1kaWZmLmM6NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gLi4gaW4gcmFuZ2U6ICclcyciCittc2dzdHIgImNhcCAuLiBlbiByYW5nOiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjY0Cittc2dpZCAic2luZ2xlIGFyZyBmb3JtYXQgbXVzdCBiZSBzeW1tZXRyaWMgcmFuZ2UiCittc2dzdHIgImVsIGZvcm1hdCBkZSBsJ2FyZ3VtZW50IMO6bmljIGhhIGRlIHNlciBkZSByYW5nIHNpbcOodHJpYyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NzkKK21zZ2lkICJuZWVkIHR3byBjb21taXQgcmFuZ2VzIgorbXNnc3RyICJjYWxlbiBkb3MgcmFuZ3MgZGUgY29taXNzacOzIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjQxCittc2dpZCAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4PikgIgorIlstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLSIKKyJpbmRleC1vdXRwdXQ9PGZpbGU+XSAoLS1lbXB0eSB8IDx0cmVlLWlzaDE+IFs8dHJlZS1pc2gyPiBbPHRyZWUtaXNoMz5dXSkiCittc2dzdHIgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaXR4ZXI+XSAoLS1lbXB0eSB8IDxhcmJyZTE+IFs8YXJicmUyPiBbPGFyYnJlMz5dXSkiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAiZXNjcml1IGwnw61uZGV4IHJlc3VsdGFudCBhbCA8Zml0eGVyPiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjcKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAibm9tw6lzIGJ1aWRhIGwnw61uZGV4IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyOQorbXNnaWQgIk1lcmdpbmciCittc2dzdHIgIlMnZXN0w6AgZnVzaW9uYW50IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMQorbXNnaWQgInBlcmZvcm0gYSBtZXJnZSBpbiBhZGRpdGlvbiB0byBhIHJlYWQiCittc2dzdHIgInJlYWxpdHphIHVuYSBmdXNpw7MgYSBtw6lzIGQndW5hIGxlY3R1cmEiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMzCittc2dpZCAiMy13YXkgbWVyZ2UgaWYgbm8gZmlsZSBsZXZlbCBtZXJnaW5nIHJlcXVpcmVkIgorbXNnc3RyICJmdXNpw7MgZGUgMyB2aWVzIHNpIG5vIGNhbCBmdXNpw7MgYSBuaXZlbGwgZGUgZml0eGVycyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzUKK21zZ2lkICIzLXdheSBtZXJnZSBpbiBwcmVzZW5jZSBvZiBhZGRzIGFuZCByZW1vdmVzIgorbXNnc3RyICJmdXNpw7MgZGUgMyB2aWVzIGVuIHByZXPDqG5jaWEgZCdhZmVnaW1lbnRzIGkgZWxpbWluYWNpb25zIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgImVsIG1hdGVpeCBxdWUgLW0sIHBlcsOyIGRlc2NhcnRhIGxlcyBlbnRyYWRlcyBubyBmdXNpb25hZGVzIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOAorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiPHN1YmRpcmVjdG9yaT4vIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOQorbXNnaWQgInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICJsbGVnaXUgbCdhcmJyZSBhIGwnw61uZGV4IHNvdGEgPHN1YmRpcmVjdG9yaT4vIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0MgorbXNnaWQgInVwZGF0ZSB3b3JraW5nIHRyZWUgd2l0aCBtZXJnZSByZXN1bHQiCittc2dzdHIgImFjdHVhbGl0emEgbCdhcmJyZSBkZSB0cmViYWxsIGFtYiBlbCByZXN1bHRhdCBkZSBmdXNpw7MiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ0Cittc2dpZCAiZ2l0aWdub3JlIgorbXNnc3RyICJnaXRpZ25vcmUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ1Cittc2dpZCAiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIgorbXNnc3RyICJwZXJtZXQgcXVlIGVscyBmaXR4ZXJzIGV4cGzDrWNpdGFtZW50IGlnbm9yYXRzIHNlIHNvYnJlZXNjcmlndWluIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OAorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAibm8gY29tcHJvdmlzIGwnYXJicmUgZGUgdHJlYmFsbCBkZXNwcsOpcyBkZSBmdXNpb25hciIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDkKK21zZ2lkICJkb24ndCB1cGRhdGUgdGhlIGluZGV4IG9yIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgIm5vIGFjdHVhbGl0emlzIGwnw61uZGV4IG5pIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTEKK21zZ2lkICJza2lwIGFwcGx5aW5nIHNwYXJzZSBjaGVja291dCBmaWx0ZXIiCittc2dzdHIgIm9tZXQgbCdhcGxpY2FjacOzIGRlbCBmaWx0cmUgZCdhZ2FmYW1lbnQgcGFyY2lhbCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTMKK21zZ2lkICJkZWJ1ZyB1bnBhY2stdHJlZXMiCittc2dzdHIgImRlcHVyYSB1bnBhY2stdHJlZXMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTU3CisjLCBmdXp6eQorbXNnaWQgInN1cHByZXNzIGZlZWRiYWNrIG1lc3NhZ2VzIgorbXNnc3RyICJvbWV0IGVscyBtaXNzYXRnZXMgaW5mb3JtYXRpdXMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTg4CisjLCBmdXp6eQorbXNnaWQgIllvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICJoZXUgZGUgcHJpbWVyIHJlc29sZHJlIGVsIHZvc3RyZSDDrW5kZXggYWN0dWFsIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+IHwgLS1rZWVwLWJhc2VdICIKKyJbPHVwc3RyZWFtPiBbPGJyYW5jaD5dXSIKK21zZ3N0ciAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxkaXDDsnNpdD4gWy0tZXhlYyA8b3JkcmU+XSBbPG9wY2lvbnM+XSA8YXJicmU+ICIKKyJbPGNhbcOtPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPl0gLS1yb290IFs8YnJhbmNoPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNgorbXNnaWQgImdpdCByZWJhc2UgLS1jb250aW51ZSB8IC0tYWJvcnQgfCAtLXNraXAgfCAtLWVkaXQtdG9kbyIKK21zZ3N0ciAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NyBidWlsdGluL3JlYmFzZS5jOjIwMSBidWlsdGluL3JlYmFzZS5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSB0b2RvIGxpc3Q6ICclcyciCittc2dzdHIgImxsaXN0YSBwZXIgYSBmZXIgaW5lc3RhYmxlOiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg2IGJ1aWx0aW4vcmViYXNlLmM6MjEyIGJ1aWx0aW4vcmViYXNlLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnLiIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBhIMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjcxCittc2dpZCAibm8gSEVBRD8iCittc2dzdHIgIm5vIGhpIGhhIGNhcCBIRUFEPyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZWwgZml0eGVyIHRlbXBvcmFsICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMwNAorbXNnaWQgImNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG1hcmNhciBjb20gYSBpbnRlcmFjdGl1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2MgorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSB0b2RvIGxpc3QiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZ2VuZXJhciBsYSBsbGlzdGEgcGVyIGEgZmVyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQwMgorbXNnaWQgImEgYmFzZSBjb21taXQgbXVzdCBiZSBwcm92aWRlZCB3aXRoIC0tdXBzdHJlYW0gb3IgLS1vbnRvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDU3Cittc2dpZCAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs8b3BjaW9ucz5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ2OQorbXNnaWQgImtlZXAgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAibWFudMOpbiBsZXMgY29taXNzaW9ucyBidWlkZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDcxIGJ1aWx0aW4vcmV2ZXJ0LmM6MTI4Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICJwZXJtZXQgbGVzIGNvbWlzc2lvbnMgYW1iIG1pc3NhdGdlcyBidWl0cyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzIKK21zZ2lkICJyZWJhc2UgbWVyZ2UgY29tbWl0cyIKK21zZ3N0ciAiZmVzIMKrcmViYXNlwrsgZGUgbGVzIGNvbWlzc2lvbnMgZGUgZnVzacOzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NAorbXNnaWQgImtlZXAgb3JpZ2luYWwgYnJhbmNoIHBvaW50cyBvZiBjb3VzaW5zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc2Cittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NworbXNnaWQgInNpZ24gY29tbWl0cyIKK21zZ3N0ciAic2lnbmEgbGVzIGNvbWlzc2lvbnMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc5IGJ1aWx0aW4vcmViYXNlLmM6MTQ1NQorbXNnaWQgImRpc3BsYXkgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODEKK21zZ2lkICJjb250aW51ZSByZWJhc2UiCittc2dzdHIgImNvbnRpbnVhIGVsIMKrcmViYXNlwrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgzCittc2dpZCAic2tpcCBjb21taXQiCittc2dzdHIgIm9tZXQgbGEgY29taXNzacOzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiZWRpdGEgbGEgbGxpc3RhIGEgZmVyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NgorbXNnaWQgInNob3cgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgIm1vc3RyYSBlbCBwZWRhw6cgYWN0dWFsIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4OQorbXNnaWQgInNob3J0ZW4gY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJlc2N1csOnYSBlbHMgaWRzIGRlIGxlcyBjb21pc3Npb25zIGVuIGxhIGxsaXN0YSBwZXIgYSBmZXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkxCittc2dpZCAiZXhwYW5kIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiZXhwYW5kZWl4IGVscyBpZHMgZGUgbGVzIGNvbWlzc2lvbnMgZW4gbGEgbGxpc3RhIHBlciBhIGZlciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTMKK21zZ2lkICJjaGVjayB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJjb21wcm92YSBsYSBsbGlzdGEgYSBmZXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk1Cittc2dpZCAicmVhcnJhbmdlIGZpeHVwL3NxdWFzaCBsaW5lcyIKK21zZ3N0ciAicmVvcmdhbml0emEgbGVzIGzDrW5pZXMgwqtmaXh1cC9waWNrwrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk3Cittc2dpZCAiaW5zZXJ0IGV4ZWMgY29tbWFuZHMgaW4gdG9kbyBsaXN0IgorbXNnc3RyICJleHBhbmRlaXggbGVzIG9yZHJlcyBleGVjIGVuIGxhIGxsaXN0YSBwZXIgYSBmZXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk4Cittc2dpZCAib250byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMQorIywgZnV6enkKK21zZ2lkICJyZXN0cmljdC1yZXZpc2lvbiIKK21zZ3N0ciAicmV2aXNpw7MiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAxCisjLCBmdXp6eQorbXNnaWQgInJlc3RyaWN0IHJldmlzaW9uIgorbXNnc3RyICJyZXZpc2nDsyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDMKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwNAorbXNnaWQgInNxdWFzaCBvbnRvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA2CisjLCBmdXp6eQorbXNnaWQgInRoZSB1cHN0cmVhbSBjb21taXQiCittc2dzdHIgIkRlc2Fzc2lnbmEgbGEgaW5mb3JtYWNpw7MgZGUgZm9udCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDgKKyMsIGZ1enp5Cittc2dpZCAiaGVhZC1uYW1lIgorbXNnc3RyICJjYW52aSBkZSBub20iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA4CisjLCBmdXp6eQorbXNnaWQgImhlYWQgbmFtZSIKK21zZ3N0ciAiZGF2YW50IHBlciAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTEzCisjLCBmdXp6eQorbXNnaWQgInJlYmFzZSBzdHJhdGVneSIKK21zZ3N0ciAiZXN0cmF0w6hnaWEgZGUgZnVzacOzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNAorIywgZnV6enkKK21zZ2lkICJzdHJhdGVneS1vcHRzIgorbXNnc3RyICJlc3RyYXTDqGdpYSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTUKKyMsIGZ1enp5Cittc2dpZCAic3RyYXRlZ3kgb3B0aW9ucyIKK21zZ3N0ciAib3BjaW9ucyBkZSBkZWNvcmFjacOzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNgorbXNnaWQgInN3aXRjaC10byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNworbXNnaWQgInRoZSBicmFuY2ggb3IgY29tbWl0IHRvIGNoZWNrb3V0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE4CisjLCBmdXp6eQorbXNnaWQgIm9udG8tbmFtZSIKK21zZ3N0ciAibm9tIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOAorIywgZnV6enkKK21zZ2lkICJvbnRvIG5hbWUiCittc2dzdHIgIm5vbSBkZWwgcmVtb3QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE5CisjLCBmdXp6eQorbXNnaWQgImNtZCIKK21zZ3N0ciAib3JkcmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE5Cittc2dpZCAidGhlIGNvbW1hbmQgdG8gcnVuIgorbXNnc3RyICJsJ29yZHJlIGEgZXhlY3V0YXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIyIGJ1aWx0aW4vcmViYXNlLmM6MTU0MAorbXNnaWQgImF1dG9tYXRpY2FsbHkgcmUtc2NoZWR1bGUgYW55IGBleGVjYCB0aGF0IGZhaWxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTQwCittc2dpZCAiLS1bbm8tXXJlYmFzZS1jb3VzaW5zIGhhcyBubyBlZmZlY3Qgd2l0aG91dCAtLXJlYmFzZS1tZXJnZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICIlcyByZXF1ZXJlaXggdW4gwqtyZWJhc2XCuyBpbnRlcmFjdGl1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCAnb250byc6ICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXN0YWJsaXIgwqslc8K7IGEgwqslc8K7IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYyMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcmlnLWhlYWQ6ICclcyciCittc2dzdHIgImZpdHhlciBubyB2w6BsaWQ6IMKrJXPCuyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgaW52YWxpZCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjcyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGxsZWdpciDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAiTm8gZXMgcG90IGVtbWFnYXR6ZW1hciAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo4NDkKK21zZ2lkICJjb3VsZCBub3QgZGV0ZXJtaW5lIEhFQUQgcmV2aXNpb24iCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZGV0ZXJtaW5hciBsYSByZXZpc2nDsyBkZSBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjk3MiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEKK21zZ2lkICIiCisiUmVzb2x2ZSBhbGwgY29uZmxpY3RzIG1hbnVhbGx5LCBtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgd2l0aFxuIgorIlwiZ2l0IGFkZC9ybSA8Y29uZmxpY3RlZF9maWxlcz5cIiwgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJZb3UgY2FuIGluc3RlYWQgc2tpcCB0aGlzIGNvbW1pdDogcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIi5cbiIKKyJUbyBhYm9ydCBhbmQgZ2V0IGJhY2sgdG8gdGhlIHN0YXRlIGJlZm9yZSBcImdpdCByZWJhc2VcIiwgcnVuIFwiZ2l0IHJlYmFzZSAtLSIKKyJhYm9ydFwiLiIKK21zZ3N0ciAiIgorIlJlc29sZXUgdG90cyBlbHMgY29uZmxpY3RlcyBtYW51YWxtZW50LCBtYXJxdWV1LWxvcyBjb20gYSByZXNvbHRzIGFtYlxuIgorIsKrZ2l0IGFkZC9ybSA8Zml0eGVyc19hbWJfY29uZmxpY3RlPsK7LCBsbGF2b3JzIGV4ZWN1dGV1IMKrZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZcK7LlxuIgorIlBvZGV1IGVuIGNvbXB0ZXMgb21ldHJlIGFxdWVzdGEgY29taXNzacOzOiBleGVjdXRldSDCq2dpdCByZWJhc2UgLS1za2lwwrsuXG4iCisiUGVyIGEgYXZvcnRhciBpIHRvcm5hciBhIGwnZXN0YXQgYW50ZXJpb3IgYWJhbnMgZGUgbCdvcmRyZSDCq2dpdCByZWJhc2XCuywgIgorImV4ZWN1dGV1IMKrZ2l0IHJlYmFzZSAtLWFib3J0wrsuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorImdpdCBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSBwcmVwYXJpbmcgdGhlIHBhdGNoZXMgdG8gcmVwbGF5XG4iCisidGhlc2UgcmV2aXNpb25zOlxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIkFzIGEgcmVzdWx0LCBnaXQgY2Fubm90IHJlYmFzZSB0aGVtLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzXG4iCisiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LlxuIgorIlNlZSBnaXQtcmViYXNlKDEpIGZvciBkZXRhaWxzLlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlICc8YnJhbmNoPidcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzXG4iCisiRXNwZWNpZmlxdWV1IHNvYnJlIHF1w6ggYnJhbmNhIHZvbGV1IGZlciDCq3JlYmFzZcK7LlxuIgorIlZlZ2V1IGdpdC1yZWJhc2UoMSkgcGVyIGRldGFsbHMuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxicmFuY2E+J1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJTaSB2b2xldSBlc3RhYmxpciBpbmZvcm1hY2nDsyBkZSBzZWd1aW1lbnQgcGVyIGEgYXF1ZXN0YSBicmFuY2EsIHBvZGV1IGZlci1obyAiCisiYW1iOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxMworIywgZnV6enkKK21zZ2lkICJleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICJleHBhbmRlaXggbGVzIG9yZHJlcyBleGVjIGVuIGxhIGxsaXN0YSBwZXIgYSBmZXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxNworbXNnaWQgImVtcHR5IGV4ZWMgY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDYKK21zZ2lkICJyZWJhc2Ugb250byBnaXZlbiBicmFuY2ggaW5zdGVhZCBvZiB1cHN0cmVhbSIKK21zZ3N0ciAiZmVzIHVuIMKrcmViYXNlwrsgZW4gbGEgYnJhbmNhIGRvbmFkYSBlbiBjb21wdGVzIGRlIGxhIGZvbnQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0OAorIywgZnV6enkKK21zZ2lkICJ1c2UgdGhlIG1lcmdlLWJhc2Ugb2YgdXBzdHJlYW0gYW5kIGJyYW5jaCBhcyB0aGUgY3VycmVudCBiYXNlIgorbXNnc3RyICJsYSBicmFuY2EgZm9udCBkZW1hbmFkYSDCqyVzwrsgbm8gZXhpc3RlaXgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MAorbXNnaWQgImFsbG93IHByZS1yZWJhc2UgaG9vayB0byBydW4iCittc2dzdHIgInBlcm1ldCBhbCBsbGlnYW0gcHJlLXJlYmFzZSBleGVjdXRhci1zZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDUyCittc2dpZCAiYmUgcXVpZXQuIGltcGxpZXMgLS1uby1zdGF0IgorbXNnc3RyICJzaWxlbmNpw7NzLiBJbXBsaWNhIC0tbm8tc3RhdCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDU4CisjLCBmdXp6eQorbXNnaWQgImRvIG5vdCBzaG93IGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAibm8gbW9zdHJpcyBsZXMgZXN0YWTDrXN0aXF1ZXMgZGUgZGlmZXLDqG5jaWEgYWwgZmluYWwgZGUgbGEgZnVzacOzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjEKKyMsIGZ1enp5Cittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieTogbGluZSB0byBlYWNoIGNvbW1pdCIKK21zZ3N0ciAiYWZlZ2VpeCB1bmEgbMOtbmlhIMKrU2lnbmVkLW9mZi1iecK7IGFsIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDY0CisjLCBmdXp6eQorbXNnaWQgIm1ha2UgY29tbWl0dGVyIGRhdGUgbWF0Y2ggYXV0aG9yIGRhdGUiCittc2dzdHIgIkFncnVwYSBwZXIgwqtjb21pdHRlcsK7IGVuIGNvbXB0ZXMgZGUgcGVyIGF1dG9yIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjYKK21zZ2lkICJpZ25vcmUgYXV0aG9yIGRhdGUgYW5kIHVzZSBjdXJyZW50IGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDY4CisjLCBmdXp6eQorbXNnaWQgInN5bm9ueW0gb2YgLS1yZXNldC1hdXRob3ItZGF0ZSIKK21zZ3N0ciAic2luw7JuaW0gZGUgLS1maWxlcy13aXRoLW1hdGNoZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3MCBidWlsdGluL3JlYmFzZS5jOjE0NzQKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBhcHBseSciCittc2dzdHIgInBhc3NhLWhvIGEgwqtnaXQtYXBwbHnCuyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDcyCisjLCBmdXp6eQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UiCittc2dzdHIgImlnbm9yYSBlbHMgY2FudmlzIGQnZXNwYWkgZW4gYmxhbmMgYWwgZmluYWwgZGUgbGEgbMOtbmlhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzYgYnVpbHRpbi9yZWJhc2UuYzoxNDc5Cittc2dpZCAiY2hlcnJ5LXBpY2sgYWxsIGNvbW1pdHMsIGV2ZW4gaWYgdW5jaGFuZ2VkIgorbXNnc3RyICLCq2NoZXJyeSBwaWNrwrsgdG90ZXMgbGVzIGNvbWlzc2lvbnMsIGluY2zDunMgbGVzIG5vIGNhbnZpYWRlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDgxCittc2dpZCAiY29udGludWUiCittc2dzdHIgImNvbnRpbnVhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODQKK21zZ2lkICJza2lwIGN1cnJlbnQgcGF0Y2ggYW5kIGNvbnRpbnVlIgorbXNnc3RyICJvbWV0IGVsIHBlZGHDpyBhY3R1YWwgaSBjb250aW51YSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg2Cittc2dpZCAiYWJvcnQgYW5kIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIgorbXNnc3RyICJpbnRlcnJvbXAgaSBhZ2FmYSBsYSBicmFuY2Egb3JpZ2luYWwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4OQorbXNnaWQgImFib3J0IGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMiCittc2dzdHIgImludGVycm9tcCBwZXLDsiBtYW50w6kgSEVBRCBvbiDDqXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCBkdXJpbmcgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICJlZGl0YSBsYSBsbGlzdGEgZGUgY29zZXMgYSBmZXIgZHVyYW50IHVuIMKrcmViYXNlwrsgaW50ZXJhY3RpdSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDkzCittc2dpZCAic2hvdyB0aGUgcGF0Y2ggZmlsZSBiZWluZyBhcHBsaWVkIG9yIG1lcmdlZCIKK21zZ3N0ciAibW9zdHJhIGVsIHBlZGHDpyBxdWUgcydlc3TDoCBhcGxpY2FudCBvIGZ1c2lvbmFudCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDk2CisjLCBmdXp6eQorbXNnaWQgInVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICJlc3RyYXTDqGdpYSBkZSBmdXNpw7MgYSB1c2FyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDAKK21zZ2lkICJsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbGlzdCBvZiBjb21taXRzIHRvIHJlYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDQKKyMsIGZ1enp5Cittc2dpZCAiKERFUFJFQ0FURUQpIHRyeSB0byByZWNyZWF0ZSBtZXJnZXMgaW5zdGVhZCBvZiBpZ25vcmluZyB0aGVtIgorbXNnc3RyICJpbnRlbnRhIHJlY3JlYXIgbGVzICIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTA5CisjLCBmdXp6eQorbXNnaWQgInByZXNlcnZlIGVtcHR5IGNvbW1pdHMgZHVyaW5nIHJlYmFzZSIKK21zZ3N0ciAicHJlc2VydmEgbGVzIGNvbWlzc2lvbnMgaW5pY2lhbG1lbnQgYnVpZGVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTEKK21zZ2lkICJtb3ZlIGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHNxdWFzaCEvZml4dXAhIHVuZGVyIC1pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxNworIywgZnV6enkKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIgorbXNnc3RyICIiCisiZmVzIMKrc3Rhc2jCuyBpIMKrc3Rhc2ggcG9wwrsgYXV0b23DoHRpY2FtZW50IGFiYW5zIGkgZGVzcHLDqXMgZGUgZmVyIMKrcmViYXNlwrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxOQorbXNnaWQgImFkZCBleGVjIGxpbmVzIGFmdGVyIGVhY2ggY29tbWl0IG9mIHRoZSBlZGl0YWJsZSBsaXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyMworIywgZnV6enkKK21zZ2lkICJhbGxvdyByZWJhc2luZyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgInBlcm1ldCBsZXMgY29taXNzaW9ucyBhbWIgbWlzc2F0Z2VzIGJ1aXRzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjYKK21zZ2lkICJ0cnkgdG8gcmViYXNlIG1lcmdlcyBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTI5CisjLCBmdXp6eQorbXNnaWQgInVzZSAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIHRvIHJlZmluZSB1cHN0cmVhbSIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWZlcsOobmNpYT4gWzxjb21pc3Npw7M+XSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTMxCittc2dpZCAidXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAidXRpbGl0emEgbCdlc3RyYXTDqGdpYSBkZSBmdXNpw7MgZG9uYWRhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzMgYnVpbHRpbi9yZXZlcnQuYzoxMTUKK21zZ2lkICJvcHRpb24iCittc2dzdHIgIm9wY2nDsyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTM0Cittc2dpZCAicGFzcyB0aGUgYXJndW1lbnQgdGhyb3VnaCB0byB0aGUgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInBhc3NhIGwnYXJndW1lbnQgYSBsJ2VzdHJhdMOoZ2lhIGRlIGZ1c2nDsyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTM3Cittc2dpZCAicmViYXNlIGFsbCByZWFjaGFibGUgY29tbWl0cyB1cCB0byB0aGUgcm9vdChzKSIKK21zZ3N0ciAiZmVzIMKrcmViYXNlwrsgZGUgdG90ZXMgbGVzIGNvbWlzc2lvbnMgYWNjZXNzaWJsZXMgZmlucyBhIGwnYXJyZWwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NAorbXNnaWQgIiIKKyJ0aGUgcmViYXNlLnVzZUJ1aWx0aW4gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkIVxuIgorIlNlZSBpdHMgZW50cnkgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2MAorbXNnaWQgIkl0IGxvb2tzIGxpa2UgJ2dpdCBhbScgaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIgorbXNnc3RyICJTZW1ibGEgcXVlIMKrZ2l0IGFtwrsgZXN0w6AgZW4gY3Vycy4gTm8gZXMgcG90IGZlciDCq3JlYmFzZcK7LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjAxCisjLCBmdXp6eQorbXNnaWQgIiIKKyJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIGlzIGRlcHJlY2F0ZWQuIFVzZSAtLXJlYmFzZS1tZXJnZXMgaW5zdGVhZC4iCittc2dzdHIgImVycm9yOiBubyBlcyBwb3QgY29tYmluYXIgwqstLXByZXNlcnZlLW1lcmdlc8K7IGFtYiDCqy0tcmViYXNlLW1lcmdlc8K7IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDYKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0ta2VlcC1iYXNlJyB3aXRoICctLW9udG8nIgorbXNnc3RyICJlcnJvcjogbm8gZXMgcG90IGNvbWJpbmFyIMKrLS1yZWJhc2UtbWVyZ2VzwrsgYW1iIMKrLS1zdHJhdGVnecK7IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDgKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0ta2VlcC1iYXNlJyB3aXRoICctLXJvb3QnIgorbXNnc3RyICJlcnJvcjogbm8gZXMgcG90IGNvbWJpbmFyIMKrLS1yZWJhc2UtbWVyZ2VzwrsgYW1iIMKrLS1zdHJhdGVnecK7IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MTIKK21zZ2lkICJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IgorbXNnc3RyICJObyBoaSBoYSB1biDCq3JlYmFzZcK7IGVuIGN1cnM/IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MTYKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIkwnYWNjacOzIC0tZWRpdC10b2RvIG5vbcOpcyBlcyBwb3QgdXNhciBkdXJhbnQgdW4gwqtyZWJhc2XCuyBpbnRlcmFjdGl1LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjM5Cittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiTm8gZXMgcG90IGxsZWdpciBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTEKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyJIZXUgZCdlZGl0YXIgdG90cyBlbHMgY29uZmxpY3RlcyBkZSBmdXNpw7MgaSBkZXNwcsOpc1xuIgorIm1hcmNhci1sb3MgY29tIGEgcmVzb2x0cyBmZW50IHNlcnZpciBnaXQgYWRkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NzAKK21zZ2lkICJjb3VsZCBub3QgZGlzY2FyZCB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJubyBzJ2hhbiBwb2d1dCBkZXNjYXJ0YXIgZWxzIGNhbnZpcyBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbW92ZSBiYWNrIHRvICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHRvcm5hciBhICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAlcyBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JXNcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQlc1xuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuXG4iCittc2dzdHIgIiIKKyJTZW1ibGEgcXVlIGphIGhpIGhhIHVuIGRpcmVjdG9yaSAkc3RhdGVfZGlyX2Jhc2UsIGlcbiIKKyJlbSBwcmVndW50byBzaSBlc3RldSBlbm1pZyBkJ3VuIGFsdHJlIMKrcmViYXNlwrsuIFNpIGFxdWVzdCDDqXMgZWxcbiIKKyJjYXMsIHByb3ZldVxuIgorIlx0JGNtZF9saXZlX3JlYmFzZVxuIgorIlNpIG5vIMOpcyBlbCBjYXMsIFxuIgorIlx0JGNtZF9jbGVhcl9zdGFsZV9yZWJhc2VcbiIKKyJpIGV4ZWN1dGV1LW1lIGRlIG5vdS4gTSdhdHVybyBwZXIgc2kgZW5jYXJhIGhpIHRlbml1IGFsZ3VuYSBjb3NhXG4iCisiZGUgdmFsb3IuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NTcKK21zZ2lkICJzd2l0Y2ggYEMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIsKrc3dpdGNowrsgwqtjwrsgZXNwZXJhIHVuIHZhbG9yIG51bcOocmljIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBtb2RlOiAlcyIKK21zZ3N0ciAiTW9kZSBkZXNjb25lZ3V0OiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODIwCittc2dpZCAiLS1zdHJhdGVneSByZXF1aXJlcyAtLW1lcmdlIG9yIC0taW50ZXJhY3RpdmUiCittc2dzdHIgIi0tc3RyYXRlZ3kgcmVxdWVyZWl4IC0tbWVyZ2UgbyAtLWludGVyYWN0aXZlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NjAKKyMsIGZ1enp5Cittc2dpZCAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIHJlcXVpcmVzIC0tZXhlYyBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXN0cmF0ZWd5IHJlcXVlcmVpeCAtLW1lcmdlIG8gLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODcyCittc2dpZCAiY2Fubm90IGNvbWJpbmUgYW0gb3B0aW9ucyB3aXRoIGVpdGhlciBpbnRlcmFjdGl2ZSBvciBtZXJnZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5MQorIywgZnV6enkKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmViYXNlLW1lcmdlcyciCittc2dzdHIgImVycm9yOiBubyBlcyBwb3QgY29tYmluYXIgwqstLXByZXNlcnZlLW1lcmdlc8K7IGFtYiDCqy0tcmViYXNlLW1lcmdlc8K7IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4OTUKKyMsIGZ1enp5Cittc2dpZCAiIgorImVycm9yOiBjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyciCittc2dzdHIgImVycm9yOiBubyBlcyBwb3QgY29tYmluYXIgwqstLXByZXNlcnZlLW1lcmdlc8K7IGFtYiDCqy0tcmViYXNlLW1lcmdlc8K7IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJXMnIgorbXNnc3RyICJmb250IG5vIHbDoGxpZGE6IMKrJXPCuyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTI1Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBuZXcgcm9vdCBjb21taXQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgdW5hIGNvbWlzc2nDsyBhcnJlbCBub3ZhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5NTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSB3aXRoIGJyYW5jaCIKK21zZ3N0ciAiQ2FsIGV4YWN0YW1lbnQgdW4gcmFuZy4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIgorbXNnc3RyICJDYWwgZXhhY3RhbWVudCB1biByYW5nLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdCAnJXMnIgorbXNnc3RyICJObyBhc3NlbnlhbGEgdW5hIGNvbWlzc2nDsyB2w6BsaWRhOiAkb250b19uYW1lIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaC9jb21taXQgJyVzJyIKK21zZ3N0ciAiZmF0YWw6IG5vIGhpIGhhIHRhbCBicmFuY2E6ICRicmFuY2hfbmFtZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTk1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZWY6ICVzIgorbXNnc3RyICJObyBoaSBoYSB0YWwgcmVmZXLDqG5jaWE6ICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMDYKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCB0byBhIHJldmlzaW9uIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIGxhIGNvbWlzc2nDsyBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNDQKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICJObyBlcyBwb3QgZW1tYWdhdHplbWFyIGF1dG9tw6B0aWNhbWVudCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHN0YXNoIHJlc3BvbnNlOiAnJXMnIgorbXNnc3RyICJmaW5hbCBkZSBmaXR4ZXIgaW5lc3BlcmF0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNyZWFyIGVsIGRpcmVjdG9yaSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICVzXG4iCittc2dzdHIgIlMnaGEgY3JlYXQgdW4gbWFnYXR6ZW0gYXV0b23DoHRpYzogJHN0YXNoX2FiYnJldiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDU5CisjLCBmdXp6eQorbXNnaWQgImNvdWxkIG5vdCByZXNldCAtLWhhcmQiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgbGxlZ2lyIG9yaWctaGVhZCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDY4Cittc2dpZCAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAiQ29tZXRldS1sb3MgbyBlbW1hZ2F0emVtZXUtbG9zLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3dpdGNoIHRvICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNvbW11dGFyIGEgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjExOQorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkhFQUQgZXN0w6AgYWwgZGlhLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUuXG4iCittc2dzdHIgIkxhIGJyYW5jYSBhY3R1YWwgJXMgZXN0w6AgYWwgZGlhLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjkKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICJMYSBicmFuY2EgYWN0dWFsIGVzdMOgIGFsIGRpYSwgwqtyZWJhc2XCuyBmb3LDp2F0LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuXG4iCittc2dzdHIgIkxhIGJyYW5jYSBhY3R1YWwgJXMgZXN0w6AgYWwgZGlhOyDCq3JlYmFzZcK7IGZvcsOnYXQuXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEzOQorbXNnaWQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIgorbXNnc3RyICJFbCBsbGlnYW0gcHJlLcKrcmViYXNlwrsgaGEgcmVmdXNhdCBhIGZlciDCq3JlYmFzZcK7LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgdG8gJXM6XG4iCittc2dzdHIgIkNhbnZpcyBhICAlczpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAlcyB0byAlczpcbiIKK21zZ3N0ciAiQ2FudmlzIGRlICVzIGEgJXM6XG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi5cbiIKK21zZ3N0ciAiIgorIlByaW1lciwgcydlc3TDoCByZWJvYmluYW50IEhFQUQgcGVyIGEgcmVwcm9kdWlyIGVsIHZvc3RyZSB0cmViYWxsIGFsICIKKyJkYW11bnQuLi5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTgzCittc2dpZCAiQ291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHNlcGFyYXIgSEVBRCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICVzIHRvICVzLlxuIgorbXNnc3RyICJBdmFuw6cgcsOgcGlkICVzIGEgJXMuXG4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MzIKK21zZ2lkICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKK21zZ3N0ciAiZ2l0IHJlY2VpdmUtcGFjayA8Z2l0LWRpcj4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODMwCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnlcbiIKKyJpcyBkZW5pZWQsIGJlY2F1c2UgaXQgd2lsbCBtYWtlIHRoZSBpbmRleCBhbmQgd29yayB0cmVlIGluY29uc2lzdGVudFxuIgorIndpdGggd2hhdCB5b3UgcHVzaGVkLCBhbmQgd2lsbCByZXF1aXJlICdnaXQgcmVzZXQgLS1oYXJkJyB0byBtYXRjaFxuIgorInRoZSB3b3JrIHRyZWUgdG8gSEVBRC5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCB0aGUgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVcbiIKKyJ0byAnaWdub3JlJyBvciAnd2FybicgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IHB1c2hpbmcgaW50b1xuIgorIml0cyBjdXJyZW50IGJyYW5jaDsgaG93ZXZlciwgdGhpcyBpcyBub3QgcmVjb21tZW5kZWQgdW5sZXNzIHlvdVxuIgorImFycmFuZ2VkIHRvIHVwZGF0ZSBpdHMgd29yayB0cmVlIHRvIG1hdGNoIHdoYXQgeW91IHB1c2hlZCBpbiBzb21lXG4iCisib3RoZXIgd2F5LlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2aW91ciwgc2V0XG4iCisiJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisiUGVyIGRlZmVjdGUsIGVzIGRlbmVnYSBhY3R1YWxpdHphciBsYSBicmFuY2EgYWN0dWFsIGVuIHVuIGRpcMOyc2l0IG5vXG4iCisibnUsIHBlcnF1w6ggZmFyaWEgbCfDrW5kZXggaSBsJ2FyYnJlIGRlIHRyZWJhbGwgaW5jb25zaXN0ZW50cyBhbWIgZWxcbiIKKyJxdWUgaMOgZ2l1IHB1amF0LCBpIHJlcXVlcmlyaWEgJ2dpdCByZXNldCAtLWhhcmQnIHBlciBhIGZlciBxdWVcbiIKKyJsJ2FyYnJlIGRlIHRyZWJhbGwgY29pbmNpZGVpeGkgYW1iIEhFQUQuXG4iCisiXG4iCisiUG9kZXUgZXN0YWJsaXIgbGEgdmFyaWFibGUgZGUgY29uZmlndXJhY2nDs1xuIgorIidyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBhICdpZ25vcmUnIG8gJ3dhcm4nIGVuIGVsIGRpcMOyc2l0IHJlbW90XG4iCisicGVyIGEgcGVybWV0cmUgcHVqYXIgYSBsYSBzZXZhIGJyYW5jYSBhY3R1YWw7IG5vIG9ic3RhbnQsIG5vIGVzXG4iCisicmVjb21hbmEgYWl4w7IgYSBtZW55cyBxdWUgaMOgZ2l1IGRlY2lkaXQgYWN0dWFsaXR6YXIgZWwgc2V1IGFyYnJlIGVuXG4iCisiYWxndW5hIGFsdHJhIG1hbmVyYSBwZXIgYSBjb2luY2lkaXIgYW1iIGVsIHF1ZSBow6BnaXUgcHVqYXQuXG4iCisiXG4iCisiUGVyIGEgc2lsZW5jaWFyIGFxdWVzdCBtaXNzYXRnZSBpIG1hbnRlbmlyIGVsIGNvbXBvcnRhbWVudFxuIgorInByZWRldGVybWluYXQsIGVzdGFibGl1IGxhIHZhcmlhYmxlIGRlIGNvbmZpZ3VyYWNpw7NcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgYSAncmVmdXNlJy4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODUwCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIGRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBkZW5pZWQsIGJlY2F1c2UgdGhlIG5leHRcbiIKKyInZ2l0IGNsb25lJyB3b24ndCByZXN1bHQgaW4gYW55IGZpbGUgY2hlY2tlZCBvdXQsIGNhdXNpbmcgY29uZnVzaW9uLlxuIgorIlxuIgorIllvdSBjYW4gc2V0ICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvXG4iCisiJ3dhcm4nIG9yICdpZ25vcmUnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBkZWxldGluZyB0aGVcbiIKKyJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlLCB5b3UgY2FuIHNldCBpdCB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyJQZXIgZGVmZWN0ZSwgZXMgZGVuZWdhIHN1cHJpbWlyIGxhIGJyYW5jYSBhY3R1YWwsIHBlcnF1w6ggZWxcbiIKKyInZ2l0IGNsb25lJyBzZWfDvGVudCBubyByZXN1bHRhcsOgIGVuIGNhcCBmaXR4ZXIgYWdhZmF0LCBjYXVzYW50XG4iCisiY29uZnVzacOzLlxuIgorIlxuIgorIlBvZGV1IGVzdGFibGlyIGxhIHZhcmlhYmxlIGRlIGNvbmZpZ3VyYWNpw7NcbiIKKyIncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgYSAnd2FybicgbyAnaWdub3JlJyBlbiBlbCBkaXDDsnNpdCByZW1vdFxuIgorInBlciBhIHBlcm1ldHJlIHN1cHJpbWlyIGxhIGJyYW5jYSBhY3R1YWwsIGFtYiB1biBtaXNzYXRnZVxuIgorImQnYWR2ZXJ0w6huY2lhIG8gc2Vuc2UuXG4iCisiXG4iCisiUGVyIGEgc2lsZW5jaWFyIGFxdWVzdCBtaXNzYXRnZSwgcG9kZXUgZXN0YWJsaXItbGEgYSAncmVmdXNlJy4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTkzNgorbXNnaWQgInF1aWV0IgorbXNnc3RyICJzaWxlbmNpw7NzIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NTAKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiSGV1IGQnZXNwZWNpZmljYXIgdW4gZGlyZWN0b3JpLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoxNworbXNnaWQgIiIKKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9PHRpbWU+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHRpbWU+XSBbLS0iCisicmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gWy0tYWxsXSAiCisiPHJlZnM+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjIKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoyNQorbXNnaWQgImdpdCByZWZsb2cgZXhpc3RzIDxyZWY+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NTY3IGJ1aWx0aW4vcmVmbG9nLmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICLCqyVzwrsgbm8gw6lzIHVuYSBtYXJjYSBkZSB0ZW1wcyB2w6BsaWRhIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjYwNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyByZWFjaGFibGUgb2JqZWN0cy4uLiIKK21zZ3N0ciAicmV0w6luIGVscyBvYmplY3RlcyBpbmFiYXN0YWJsZXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyBub3doZXJlISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY5NQorIywgZnV6enkKK21zZ2lkICJubyByZWZsb2cgc3BlY2lmaWVkIHRvIGRlbGV0ZSIKK21zZ3N0ciAiY2FwIHJlbW90IGVzcGVjaWZpY2F0IgorCisjOiBidWlsdGluL3JlZmxvZy5jOjcwNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmVmbG9nOiAlcyIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJubyByZWZsb2cgZm9yICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIGZpdHhlciBkZSByZWdpc3RyZSBwZXIgwqslc8K7IgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZiBmb3JtYXQ6ICVzIgorbXNnc3RyICJmb3JtYXQgZGUgcmVmZXLDqG5jaWEgbm8gdsOgbGlkOiAlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NjQKK21zZ2lkICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNworbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2E+XSBbLW0gPG1lc3RyYT5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxub20+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4IGJ1aWx0aW4vcmVtb3RlLmM6MzgKK21zZ2lkICJnaXQgcmVtb3RlIHJlbmFtZSA8b2xkPiA8bmV3PiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW5hbWUgPGFudGljPiA8bm91PiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOSBidWlsdGluL3JlbW90ZS5jOjQzCittc2dpZCAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbW92ZSA8bm9tPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMCBidWlsdGluL3JlbW90ZS5jOjQ4Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bm9tPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jYT4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIxCittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPG5vbT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5vbT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjMKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncnVwPiB8IDxyZW1vdD4pLi4uXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxub20+IDxicmFuY2E+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI1IGJ1aWx0aW4vcmVtb3RlLmM6NzQKK21zZ2lkICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxub20+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI2IGJ1aWx0aW4vcmVtb3RlLmM6NzkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+IFs8b2xkdXJsPl0iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bm9tPiA8dXJsLW5vdT4gWzx1cmwtYW50aWM+XSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNyBidWlsdGluL3JlbW90ZS5jOjgwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxub20+IDx1cmwtbm91PiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOCBidWlsdGluL3JlbW90ZS5jOjgxCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxub20+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjMzCittc2dpZCAiZ2l0IHJlbW90ZSBhZGQgWzxvcHRpb25zPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIGFkZCBbPG9wY2lvbnM+XSA8bm9tPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1MworbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5vbT4gPGJyYW5jYT4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTQKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxub20+IDxicmFuY2E+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU5Cittc2dpZCAiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzaG93IFs8b3BjaW9ucz5dIDxub20+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY0Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWzxvcGNpb25zPl0gPG5vbT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjkKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcGNpb25zPl0gWzxncnVwPiB8IDxyZW1vdD5dLi4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICJTJ2VzdMOgIGFjdHVhbGl0emFudCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzAKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3Igw6lzIHBlcmlsbMOzcyBpIGVzdMOgIGVuIGRlc8O6czsgXG4iCisiXHQgdXNldSAtLW1pcnJvcj1mZXRjaCBvXG4iCisiXHQgLS1taXJyb3I9cHVzaCBlbiBsbG9jIGQnYWl4w7IiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAicGFyw6BtZXRyZSBkZSByZWZsZXhpw7MgZGVzY29uZWd1dDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYzCittc2dpZCAiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIKK21zZ3N0ciAib2J0w6luIGxlcyBicmFucXVlcyByZW1vdGVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NQorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgImVuIG9idGVuaXIsIGltcG9ydGEgdG90ZXMgbGVzIGV0aXF1ZXRlcyBpIHRvdHMgZWxzIG9iamVjdGVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2OAorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAibyBubyBvYnRpbmd1aXMgY2FwIGV0aXF1ZXRhICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MAorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgImJyYW5xdWVzIGEgc2VndWlyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MQorbXNnaWQgIm1hc3RlciBicmFuY2giCittc2dzdHIgImJyYW5jYSBtZXN0cmEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTczCittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgImVzdGFibGVpeCBlbCByZW1vdCBjb20gYSBtaXJhbGwgYWwgcXVhbCBwdWphciBvIGRlbCBxdWFsIG9idGVuaXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg1Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAiZXNwZWNpZmljYXIgdW5hIGJyYW5jYSBtZXN0cmEgbm8gdMOpIHNlbnRpdCBhbWIgLS1taXJyb3IiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg3Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAiIgorImVzcGVjaWZpY2FyIGxlcyBicmFucXVlcyBhIHNlZ3VpciB0w6kgc2VudGl0IG5vbcOpcyBhbWIgbWlyYWxscyBkJ29idGVuY2nDsyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTQgYnVpbHRpbi9yZW1vdGUuYzo2MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiZWwgcmVtb3QgJXMgamEgZXhpc3RlaXguIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5OCBidWlsdGluL3JlbW90ZS5jOjY0MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgorbXNnc3RyICLCqyVzwrsgbm8gw6lzIHVuIG5vbSBkZSByZW1vdCB2w6BsaWQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBjb25maWd1cmFyIGxhIG1lc3RyYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICIiCisiTm8gcydoYSBwb2d1dCBvYnRlbmlyIGVsIG1hcGEgZCdvYnRlbmNpw7MgZGUgbCdlc3BlY2lmaWNhY2nDsyBkZSByZWZlcsOobmNpYSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NDMgYnVpbHRpbi9yZW1vdGUuYzo0NTEKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICIoY29pbmNpZGVudCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDU1Cittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIihzdXByaW1pcikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjI5IGJ1aWx0aW4vcmVtb3RlLmM6NzY0IGJ1aWx0aW4vcmVtb3RlLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAnJXMnIgorbXNnc3RyICJObyBleGlzdGVpeCBlbCByZW1vdCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNhbnZpYXIgZWwgbm9tIGRlIGxhIHNlY2Npw7MgZGUgY29uZmlndXJhY2nDsyDCqyVzwrsgYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorIk5vIHMnZXN0w6AgYWN0dWFsaXR6YW50IGwnZXNwZWNpZmljYWNpw7MgZGUgcmVmZXLDqG5jaWVzIGQnb2J0ZW5jacOzIG5vIHBlciAiCisiZGVmZWN0ZVxuIgorIlx0JXNcbiIKKyJcdEFjdHVhbGl0emV1IGxhIGNvbmZpZ3VyYWNpw7MgbWFudWFsbWVudCBzaSDDqXMgbmVjZXNzYXJpLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImxhIHN1cHJlc3Npw7MgZGUgwqslc8K7IGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImxhIGNyZWFjacOzIGRlIMKrJXPCuyBoYSBmYWxsYXQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODAxCittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIiIKKyJOb3RhOiBVbmEgYnJhbmNhIGZvcmEgZGUgbGEgamVyYXJxdWlhIHJlZnMvcmVtb3Rlcy8gbm8gcydoYSBlbGltaW5hdDtcbiIKKyJwZXIgYSBzdXByaW1pci1sYSwgdXNldToiCittc2dzdHJbMV0gIiIKKyJOb3RhOiBBbGd1bmVzIGJyYW5xdWVzIGZvcmEgZGUgbGEgamVyYXJxdWlhIHJlZnMvcmVtb3Rlcy8gbm8gcydoYW4gIgorImVsaW1pbmF0O1xuIgorInBlciBhIHN1cHJpbWlyLWxlcywgdXNldToiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBlbGltaW5hciBsYSBzZWNjacOzIGRlIGNvbmZpZ3VyYWNpw7Mgwqslc8K7IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiBub3UgKGxhIHByw7J4aW1hIG9idGVuY2nDsyBlbW1hZ2F0emVtYXLDoCBhIHJlbW90ZXMvJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxOQorbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIgc2VndWl0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyMQorbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIgZXN0YW5jYXQgKHVzZXUgJ2dpdCByZW1vdGUgcHJ1bmUnIHBlciBhIGVsaW1pbmFyKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjMKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk2NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgImJyYW5jaC4lcy5tZXJnZSBubyB2w6BsaWQ7IG5vIGVzIHBvdCBmZXIgwqtyZWJhc2XCuyBzb2JyZSA+IDEgYnJhbmNhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgb250byByZW1vdGUgJXMiCittc2dzdHIgImVzIGZhIMKrcmViYXNlwrsgaW50ZXJhY3RpdmFtZW50IHNvYnJlIGVsIHJlbW90ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5ICh3aXRoIG1lcmdlcykgb250byByZW1vdGUgJXMiCittc2dzdHIgImVzIGZhIMKrcmViYXNlwrsgaW50ZXJhY3RpdmFtZW50IHNvYnJlIGVsIHJlbW90ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJlcyBmYSDCq3JlYmFzZcK7IHNvYnJlIGVsIHJlbW90ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgbWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICJlcyBmdXNpb25hIGFtYiBlbCByZW1vdCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICJlcyBmdXNpb25hIGFtYiBlbCByZW1vdCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS0qcyAgICBhbmQgd2l0aCByZW1vdGUgJXNcbiIKK21zZ3N0ciAiJS0qcyAgICBpIGFtYiBlbCByZW1vdCAlc1xuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzEKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgImNyZWEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzNAorbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAic3VwcmltZWl4IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzgKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICJhbCBkaWEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MQorbXNnaWQgImZhc3QtZm9yd2FyZGFibGUiCittc2dzdHIgImF2YW7DpyByw6BwaWQgcG9zc2libGUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0NAorbXNnaWQgImxvY2FsIG91dCBvZiBkYXRlIgorbXNnc3RyICJsb2NhbCBubyBhY3R1YWxpdHphdCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIGZvcsOnYSBhICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIHB1amEgYSAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIGZvcsOnYSBhICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyBwdWphIGEgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOQorbXNnaWQgImRvIG5vdCBxdWVyeSByZW1vdGVzIgorbXNnc3RyICJubyBjb25zdWx0aXMgZWxzIHJlbW90cyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqIHJlbW90ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIFVSTCBkJ29idGVuY2nDszogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1OCBidWlsdGluL3JlbW90ZS5jOjExNzQgYnVpbHRpbi9yZW1vdGUuYzoxMzEzCittc2dpZCAiKG5vIFVSTCkiCittc2dzdHIgIihzZW5zZSBVUkwpIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uICc6JyBzaG91bGQgYWxpZ24KKyMuIHdpdGggdGhlIG9uZSBpbiAiIEZldGNoIFVSTDogJXMiCisjLiB0cmFuc2xhdGlvbi4KKyMuCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzIgYnVpbHRpbi9yZW1vdGUuYzoxMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUHVzaCAgVVJMOiAlcyIKK21zZ3N0ciAiICBVUkwgZGUgcHVqYWRhOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc2IGJ1aWx0aW4vcmVtb3RlLmM6MTE3OCBidWlsdGluL3JlbW90ZS5jOjExODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaDogJXMiCittc2dzdHIgIiAgQnJhbmNhIGRlIEhFQUQ6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzYKK21zZ2lkICIobm90IHF1ZXJpZWQpIgorbXNnc3RyICIobm8gY29uc3VsdGF0KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc4Cittc2dpZCAiKHVua25vd24pIgorbXNnc3RyICIoZGVzY29uZWd1dCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIiCisiICBCcmFuY2EgZGUgSEVBRCAobGEgSEVBRCByZW1vdCDDqXMgYW1iaWd1YSwgcG90IHNlciB1biBkZWxzIHNlZ8O8ZW50cyk6XG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIEJyYW5jYSByZW1vdGE6JXMiCittc2dzdHJbMV0gIiAgQnJhbnF1ZXMgcmVtb3RlczolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTk3IGJ1aWx0aW4vcmVtb3RlLmM6MTIyMworbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiIChlc3RhdCBubyBjb25zdWx0YXQpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDYKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiICBCcmFuY2EgbG9jYWwgY29uZmlndXJhZGEgcGVyIGEgwqtnaXQgcHVsbMK7OiIKK21zZ3N0clsxXSAiICBCcmFucXVlcyBsb2NhbHMgY29uZmlndXJhZGVzIHBlciBhIMKrZ2l0IHB1bGzCuzoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxNAorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiAgwqtnaXQgcHVzaMK7IHJlZmxlY3RpcsOgIGxlcyByZWZlcsOobmNpZXMgbG9jYWxzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAgUmVmZXLDqG5jaWEgbG9jYWwgY29uZmlndXJhZGEgcGVyIGEgwqtnaXQgcHVzaMK7JXM6IgorbXNnc3RyWzFdICIgIFJlZmVyw6huY2llcyBsb2NhbHMgY29uZmlndXJhZGVzIHBlciBhIMKrZ2l0IHB1c2jCuyVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQxCittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICJlc3RhYmxlaXggcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIHNlZ29ucyBlbCByZW1vdCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQzCittc2dpZCAiZGVsZXRlIHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCIKK21zZ3N0ciAic3VwcmltZWl4IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU4Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiTm8gZXMgcG90IGRldGVybWluYXIgbGEgSEVBRCByZW1vdGEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI2MAorbXNnaWQgIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6IgorbXNnc3RyICJNw7psdGlwbGVzIGJyYW5xdWVzIGRlIEhFQUQgcmVtb3Rlcy4gVHJpZXUtbmUgdW5hIGV4cGzDrWNpdGFtZW50IGFtYjoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHN1cHJpbWlyICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAiTm8gw6lzIHVuYSByZWZlcsOobmNpYSB2w6BsaWRhOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBjb25maWd1cmFyICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIGVzIHRvcm5hcsOgIHBlbmphbnQhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMgcydoYSB0b3JuYXQgcGVuamFudCEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICJTJ2VzdMOgIHBvZGFudCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIlVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIgKiBbcG9kYXJpYV0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiICogW3BvZGF0XSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzc0Cittc2dpZCAicHJ1bmUgcmVtb3RlcyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAicG9kYSBlbHMgcmVtb3RzIGRlc3Byw6lzIGQnb2J0ZW5pci1sb3MiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzNyBidWlsdGluL3JlbW90ZS5jOjE0OTEgYnVpbHRpbi9yZW1vdGUuYzoxNTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIk5vIGhpIGhhIHRhbCByZW1vdCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ1MworbXNnaWQgImFkZCBicmFuY2giCittc2dzdHIgImFmZWdlaXggYnJhbmNhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NjAKK21zZ2lkICJubyByZW1vdGUgc3BlY2lmaWVkIgorbXNnc3RyICJjYXAgcmVtb3QgZXNwZWNpZmljYXQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3NworbXNnaWQgInF1ZXJ5IHB1c2ggVVJMcyByYXRoZXIgdGhhbiBmZXRjaCBVUkxzIgorbXNnc3RyICJjb25zdWx0YSBlbHMgVVJMIGRlIHB1amFkYSBlbiBsbG9jIGRlbHMgVVJMIGQnb2J0ZW5jacOzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NzkKK21zZ2lkICJyZXR1cm4gYWxsIFVSTHMiCittc2dzdHIgInJldG9ybmEgdG90cyBlbHMgVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gVVJMcyBjb25maWd1cmVkIGZvciByZW1vdGUgJyVzJyIKK21zZ3N0ciAiY2FwIFVSTCBjb25maWd1cmF0IHBlciBhbCByZW1vdCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzMworbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICJtYW5pcHVsYSBlbHMgVVJMIGRlIHB1amFkYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM1Cittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAiYWZlZ2VpeCBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNworbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICJzdXByaW1laXggZWxzIFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTQ0Cittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWFkZCAtLWRlbGV0ZSBubyB0w6kgc2VudGl0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICJQYXRyw7MgZCdVUkwgYW50aWMgbm8gdsOgbGlkOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgdGFsIFVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU5MworbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAiTm8gc2Ugc3VwcmltaXJhbiB0b3RzIGVscyBVUkwgbm8gZGUgcHVqYWRhIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIzCittc2dpZCAiZ2l0IHJlcGFjayBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHJlcGFjayBbPG9wY2lvbnM+XSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOAorbXNnaWQgIiIKKyJJbmNyZW1lbnRhbCByZXBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBiaXRtYXAgaW5kZXhlcy4gIFVzZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9yIGRpc2FibGUgdGhlIHBhY2sud3JpdGViaXRtYXBzIGNvbmZpZ3VyYXRpb24uIgorbXNnc3RyICIiCisiRWxzIHJlZW1wYXF1ZXRhbWVudHMgaW5jcmVtZW50YWxzIHPDs24gaW5jb21wYXRpYmxlcyBhbWIgZWxzIMOtbmRleHMgZGUgIgorImJpdG1hcHMuICBVc2V1XG4iCisiLS1uby13cml0ZS1iaXRtYXAtaW5kZXggbyBpbmhhYmlsaXRldSBlbCBwYXLDoG1ldHJlIGRlIGNvbmZpZ3VyYWNpw7MgcGFjay4iCisid3JpdGViaXRtYXBzLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTEKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMwIGJ1aWx0aW4vcmVwYWNrLmM6NDE2Cittc2dpZCAicmVwYWNrOiBFeHBlY3RpbmcgZnVsbCBoZXggb2JqZWN0IElEIGxpbmVzIG9ubHkgZnJvbSBwYWNrLW9iamVjdHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjU0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTIKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAiZW1wYXF1ZXRhLWhvIHRvdCBlbiB1biDDum5pYyBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk0Cittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAiZWwgbWF0ZWl4IHF1ZSAtYSwgaSBzb2x0YSBlbHMgb2JqZWN0ZXMgaW5hYmFzdGFibGVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NworbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAiZWxpbWluYSBlbHMgcGFxdWV0cyByZWR1bmRhbnRzLCBpIGV4ZWN1dGV1IGdpdC1wcnVuZS1wYWNrZWQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk5Cittc2dpZCAicGFzcyAtLW5vLXJldXNlLWRlbHRhIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgInBhc3NhIC0tbm8tcmV1c2UtZGVsdGEgYSBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwMQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1vYmplY3QgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFzc2EgLS1uby1yZXVzZS1vYmplY3QgYSBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwMworbXNnaWQgImRvIG5vdCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKK21zZ3N0ciAibm8gZXhlY3V0aXMgZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDYKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFzc2EgLS1sb2NhbCBhIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA4Cittc2dpZCAid3JpdGUgYml0bWFwIGluZGV4IgorbXNnc3RyICJlc2NyaXUgw61uZGV4IGRlIG1hcGEgZGUgYml0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTAKKyMsIGZ1enp5Cittc2dpZCAicGFzcyAtLWRlbHRhLWlzbGFuZHMgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFzc2EgLS1sb2NhbCBhIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzExCittc2dpZCAiYXBwcm94aWRhdGUiCittc2dzdHIgImRhdGEgYXByb3hpbWFkYSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTIKK21zZ2lkICJ3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzIgorbXNnc3RyICJhbWIgLUEsIG5vIHNvbHRpcyBlbHMgb2JqZWN0ZXMgbcOpcyB2ZWxscyBxdWUgYXF1ZXN0IgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNAorbXNnaWQgIndpdGggLWEsIHJlcGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJhbWIgLWEsIHJlZW1wYXF1ZXRhIGVscyBvYmplY3RlcyBpbmFiYXN0YWJsZXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE2Cittc2dpZCAic2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICJtaWRhIGRlIGxhIGZpbmVzdHJhIHF1ZSBzJ3VzYSBwZXIgYSBjb21wcmVzc2nDsyBkZSBkaWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE3IGJ1aWx0aW4vcmVwYWNrLmM6MzIzCittc2dpZCAiYnl0ZXMiCittc2dzdHIgIm9jdGV0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTgKK21zZ2lkICJzYW1lIGFzIHRoZSBhYm92ZSwgYnV0IGxpbWl0IG1lbW9yeSBzaXplIGluc3RlYWQgb2YgZW50cmllcyBjb3VudCIKK21zZ3N0ciAiIgorImVsIG1hdGVpeCBxdWUgbCdhbnRlcmlvciwgcGVyw7IgbGltaXRhIGxhIG1pZGEgZGUgbWVtw7JyaWEgZW4gbGxvYyBkZWwgbm9tYnJlICIKKyJkJ2VudHJhZGVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMAorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBkZWx0YSBkZXB0aCIKK21zZ3N0ciAibGltaXRhIGxhIHByb2Z1bmRpdGF0IG3DoHhpbWEgZGUgbGVzIGRpZmVyw6huY2llcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjIKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMiCittc2dzdHIgImxpbWl0YSBlbCBub21icmUgbcOgeGltIGRlIGZpbHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI0Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggcGFja2ZpbGUiCittc2dzdHIgIm1pZGEgbcOgeGltYSBkZSBjYWRhIGZpdHhlciBkZSBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI2Cittc2dpZCAicmVwYWNrIG9iamVjdHMgaW4gcGFja3MgbWFya2VkIHdpdGggLmtlZXAiCittc2dzdHIgInJlZW1wYXF1ZXRhIGVscyBvYmplY3RlcyBlbiBwYXF1ZXRzIG1hcmNhdHMgYW1iIC5rZWVwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyOAorIywgZnV6enkKK21zZ2lkICJkbyBub3QgcmVwYWNrIHRoaXMgcGFjayIKK21zZ3N0ciAiY3JlYSBwYXF1ZXRzIHByaW1zIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMzOAorbXNnaWQgImNhbm5vdCBkZWxldGUgcGFja3MgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgIm5vIGVzIHBvZGVuIHN1cHJpbWlyIHBhcXVldHMgZW4gdW4gZGlww7JzaXQgZCdvYmplY3RlcyBwcmVjaW9zb3MiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzQyCittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtQSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUgaSAtQSBzw7NuIGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDI1CisjLCBmdXp6eQorbXNnaWQgIk5vdGhpbmcgbmV3IHRvIHBhY2suIgorbXNnc3RyICJ1c2EgZWwgcGFxdWV0IHByaW0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBTb21lIHBhY2tzIGluIHVzZSBoYXZlIGJlZW4gcmVuYW1lZCBieVxuIgorIldBUk5JTkc6IHByZWZpeGluZyBvbGQtIHRvIHRoZWlyIG5hbWUsIGluIG9yZGVyIHRvXG4iCisiV0FSTklORzogcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZVxuIgorIldBUk5JTkc6IGZpbGUuICBCdXQgdGhlIG9wZXJhdGlvbiBmYWlsZWQsIGFuZCB0aGVcbiIKKyJXQVJOSU5HOiBhdHRlbXB0IHRvIHJlbmFtZSB0aGVtIGJhY2sgdG8gdGhlaXJcbiIKKyJXQVJOSU5HOiBvcmlnaW5hbCBuYW1lcyBhbHNvIGZhaWxlZC5cbiIKKyJXQVJOSU5HOiBQbGVhc2UgcmVuYW1lIHRoZW0gaW4gJXMgbWFudWFsbHk6XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVsaW1pbmFyIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPG9iamVjdGU+IDxyZWVtcGxhw6dhbWVudD4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxvYmplY3RlPiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21pc3Npw7M+IFs8bWFyZT4uLi5dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI2Cittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCByZXBsYWNlIC1kIDxvYmplY3RlPi4uLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcKK21zZ2lkICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFstbCBbPHBhdHRlcm4+XV0iCittc2dzdHIgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0csOzPl1dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCByZXBsYWNlIGZvcm1hdCAnJXMnXG4iCisidmFsaWQgZm9ybWF0cyBhcmUgJ3Nob3J0JywgJ21lZGl1bScgYW5kICdsb25nJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxMjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgcmVmICclcycgbm90IGZvdW5kIgorbXNnc3RyICJubyBzJ2hhIHRyb2JhdCBsYSBicmFuY2Egwqslc8K7LiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTQxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlcGxhY2UgcmVmICclcyciCittc2dzdHIgInN1cHJpbWVpeCBsZXMgcmVmZXLDqG5jaWVzIHJlZW1wbGHDp2FkZXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYgbmFtZSIKK21zZ3N0ciAiwqslc8K7IG5vIMOpcyB1biBub20gZGUgcmVtb3QgdsOgbGlkIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgcmVmICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgImVsIGRlc3TDrSDCqyVzwrsgamEgZXhpc3RlaXgiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4iCisiJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlZCBvYmplY3Qgb2YgdHlwZSAnJXMnXG4iCisid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgdHlwZSAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9icmlyIMKrJXPCuyBwZXIgYSBlc2NyaXB0dXJhIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNDIKK21zZ2lkICJjYXQtZmlsZSByZXBvcnRlZCBmYWlsdXJlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2JyaXIgbyBsbGVnaXIgJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3MgorIywgZnV6enkKK21zZ2lkICJ1bmFibGUgdG8gc3Bhd24gbWt0cmVlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBsJ2FyYnJlICglcykiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3NgorIywgZnV6enkKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIG1rdHJlZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgbCdhcmJyZSAoJXMpIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODUKKyMsIGZ1enp5Cittc2dpZCAibWt0cmVlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgImxhIHJldmVyc2nDsyBoYSBmYWxsYXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4OQorIywgZnV6enkKK21zZ2lkICJta3RyZWUgZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0IG5hbWUiCittc2dzdHIgImVsIHJlbW90IG5vIGhhIGVudmlhdCB0b3RzIGVscyBvYmplY3RlcyBuZWNlc3NhcmlzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyOTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmc3RhdCAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhY3R1YWxpdHphciAlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzAzCisjLCBmdXp6eQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBvYmplY3QgdG8gZGF0YWJhc2UiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgbCdvYmplY3RlIGRlIG5vdGEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyMiBidWlsdGluL3JlcGxhY2UuYzozNzggYnVpbHRpbi9yZXBsYWNlLmM6NDIzCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICJObyDDqXMgdW4gbm9tIGQnb2JqZWN0ZSB2w6BsaWQ6IMKrJXPCuyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IG9iamVjdCB0eXBlIGZvciAlcyIKK21zZ3N0ciAibm8gZXMgcG90IGZlciBncmVwIGRlcyBkJ3VuIG9iamVjdGUgZGUgdGlwdXMgJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM0MgorIywgZnV6enkKK21zZ2lkICJlZGl0aW5nIG9iamVjdCBmaWxlIGZhaWxlZCIKK21zZ3N0ciAibGEgbGVjdHVyYSBkZSBsZXMgcmVmZXLDqG5jaWVzIGRlIGJpc2VjY2nDsyBoYSBmYWxsYXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM4NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIGFzIGEgY29tbWl0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjb21pc3Npw7MgSEVBRCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAiZXRpcXVldGEgZGUgZnVzacOzIGluY29ycmVjdGEgZW4gbGEgY29taXNzacOzIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAiZXRpcXVldGEgZGUgZnVzacOzIG1hbCBmb3JtYWRhIGVuIGxhIGNvbWlzc2nDsyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICIiCisibGEgY29taXNzacOzIG9yaWdpbmFsIMKrJXPCuyBjb250w6kgbCdldGlxdWV0YSBkZSBmdXNpw7Mgwqslc8K7IHF1ZSBlcyBkZXNjYXJ0YTsgIgorInVzZXUgLS1lZGl0IGVuIGxsb2MgZGUgLS1ncmFmdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBvcmlnaW5hbCBjb21taXQgJyVzJyBoYXMgYSBncGcgc2lnbmF0dXJlIgorbXNnc3RyICJsYSBjb21pc3Npw7Mgb3JpZ2luYWwgwqslc8K7IHTDqSB1bmEgc2lnbmF0dXJhIGdwZyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDY5Cittc2dpZCAidGhlIHNpZ25hdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHJlcGxhY2VtZW50IGNvbW1pdCEiCittc2dzdHIgInMnZWxpbWluYXLDoCBsYSBzaWduYXR1cmEgZW4gbGEgY29taXNzacOzIGRlIHJlZW1wbGHDp2FtZW50ISIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSByZXBsYWNlbWVudCBjb21taXQgZm9yOiAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGxhIGNvbWlzc2nDsyBkZSByZWVtcGxhw6dhbWVudCBwZXIgYTogwqslc8K7IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JhZnQgZm9yICclcycgdW5uZWNlc3NhcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBjb21taXQgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmU6ICclcyciCittc2dzdHIgImxhIGNvbWlzc2nDsyBub3ZhIMOpcyBsYSBtYXRlaXhhIHF1ZSBsJ2FudGlnYTogwqslc8K7IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1MjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY29udmVydCB0aGUgZm9sbG93aW5nIGdyYWZ0KHMpOlxuIgorIiVzIgorbXNnc3RyICJFbGltaW5hcmlhIGwnw610ZW0gc2Vnw7xlbnQ6IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDcKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAibGxpc3RhIGxlcyByZWZlcsOobmNpZXMgcmVlbXBsYcOnYWRlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ4Cittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAic3VwcmltZWl4IGxlcyByZWZlcsOobmNpZXMgcmVlbXBsYcOnYWRlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ5Cittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgImVkaXRhIHVuIG9iamVjdGUgZXhpc3RlbnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MAorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgImNhbnZpYSBsZXMgbWFyZXMgZCd1bmEgY29taXNzacOzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTEKKyMsIGZ1enp5Cittc2dpZCAiY29udmVydCBleGlzdGluZyBncmFmdCBmaWxlIgorbXNnc3RyICJmb3LDp2EgbGEgc29icmVlc2NyaXB0dXJhIGRlIGZpdHhlcnMgZXhpc3RlbnRzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTIKK21zZ2lkICJyZXBsYWNlIHRoZSByZWYgaWYgaXQgZXhpc3RzIgorbXNnc3RyICJyZWVtcGxhw6dhIGxhIHJlZmVyw6huY2lhIHNpIGV4aXN0ZWl4IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTQKK21zZ2lkICJkbyBub3QgcHJldHR5LXByaW50IGNvbnRlbnRzIGZvciAtLWVkaXQiCittc2dzdHIgIm5vIGltcHJpbWVpeGlzIGJlbGxhbWVudCBlbHMgY29udGluZ3V0cyBwZXIgYSAtLWVkaXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NQorbXNnaWQgInVzZSB0aGlzIGZvcm1hdCIKK21zZ3N0ciAidXNhIGFxdWVzdCBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU2OAorIywgZnV6enkKK21zZ2lkICItLWZvcm1hdCBjYW5ub3QgYmUgdXNlZCB3aGVuIG5vdCBsaXN0aW5nIgorbXNnc3RyICItLWZpeC10aGluIG5vIGVzIHBvdCB1c2FyIHNlbnNlIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU3NgorIywgZnV6enkKK21zZ2lkICItZiBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gd3JpdGluZyBhIHJlcGxhY2VtZW50IgorbXNnc3RyICIteiBub23DqXMgdMOpIHNlbnRpdCBhbWIgLS1zdGRpbiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTgwCittc2dpZCAiLS1yYXcgb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiLS1yYXcgbm9tw6lzIHTDqSBzZW50aXQgYW1iIC0tZWRpdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTg2Cittc2dpZCAiLWQgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU5MgorbXNnaWQgImJhZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICJub21icmUgaW5jb3JyZWN0ZSBkJ2FyZ3VtZW50cyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk4Cittc2dpZCAiLWUgbmVlZHMgZXhhY3RseSBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1lIG5lY2Vzc2l0YSBleGFjdGFtZW50IHVuIGFyZ3VtZW50IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MDQKK21zZ2lkICItZyBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1nIG5lY2Vzc2l0YSBhbG1lbnlzIHVuIGFyZ3VtZW50IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTAKK21zZ2lkICItLWNvbnZlcnQtZ3JhZnQtZmlsZSB0YWtlcyBubyBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgYXJndW1lbnRzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTYKK21zZ2lkICJvbmx5IG9uZSBwYXR0ZXJuIGNhbiBiZSBnaXZlbiB3aXRoIC1sIgorbXNnc3RyICJub23DqXMgZXMgcG90IGVzcGVjaWZpY2FyIHVuIHBhdHLDsyBhbWIgLWwiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTMKK21zZ2lkICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorbXNnc3RyICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8Y2Ftw60+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo2MAorbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICJyZWdpc3RyYSBsZXMgcmVzb2x1Y2lvbnMgbmV0ZXMgZW4gbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NzkKK21zZ2lkICInZ2l0IHJlcmVyZSBmb3JnZXQnIHdpdGhvdXQgcGF0aHMgaXMgZGVwcmVjYXRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjExMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZiBmb3IgJyVzJyIKK21zZ3N0ciAicydoYSBwb2d1dCBnZW5lcmFyIGVsIGRpZmYgcGVyIGEgwqslc8K7IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbWlzc2nDsz5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gWzxhcmJyZT5dIFstLV0gPGNhbWlucz4uLi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyZWUtaXNoPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1CisjLCBmdXp6eQorbXNnaWQgImdpdCByZXNldCAtLXBhdGNoIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHNwZWM+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzxhcmJyZT5dIFstLV0gWzxjYW1pbnM+Li4uXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWl4ZWQiCittc2dzdHIgIm1peHQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgInNvZnQiCittc2dzdHIgInN1YXUiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImhhcmQiCittc2dzdHIgImR1ciIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWVyZ2UiCittc2dzdHIgImZ1c2nDsyIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAia2VlcCIKK21zZ3N0ciAicmV0ZW5pbWVudCIKKworIzogYnVpbHRpbi9yZXNldC5jOjgyCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIk5vIHRlbml1IHVuIEhFQUQgdsOgbGlkLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjg0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiB0cm9iYXIgbCdhcmJyZSBkZSBIRUFELiIKKworIzogYnVpbHRpbi9yZXNldC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNlcmNhciBsJ2FyYnJlIGRlICVzLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBRCBhcmEgw6lzIGEgJXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAiTm8gZXMgcG90IGZlciB1biByZXN0YWJsaW1lbnQgZGUgJXMgZW5taWcgZCd1bmEgZnVzacOzLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NCBidWlsdGluL3N0YXNoLmM6NTE5IGJ1aWx0aW4vc3Rhc2guYzo1OTQKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MTgKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICJzaWd1ZXMgc2lsZW5jacOzcywgbm9tw6lzIGluZm9ybWEgZCdlcnJvcnMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTYKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAicmVzdGFibGVpeCBIRUFEIGkgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTcKK21zZ2lkICJyZXNldCBvbmx5IEhFQUQiCittc2dzdHIgInJlc3RhYmxlaXggbm9tw6lzIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTkgYnVpbHRpbi9yZXNldC5jOjMwMQorbXNnaWQgInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiCittc2dzdHIgInJlc3RhYmxlaXggSEVBRCwgbCfDrW5kZXggaSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDMKK21zZ2lkICJyZXNldCBIRUFEIGJ1dCBrZWVwIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgInJlc3RhYmxlaXggSEVBRCBwZXLDsiByZXTDqW4gZWxzIGNhbnZpcyBsb2NhbHMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDkKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAicmVnaXN0cmEgbm9tw6lzIGVsIGZldCBxdWUgZWxzIGNhbWlucyBlbGltaW5hdHMgcydhZmVnaXJhbiBkZXNwcsOpcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmV2aXNpb24uIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHJlc29sZHJlIMKrJXPCuyBjb20gYSByZXZpc2nDsyB2w6BsaWRhLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gcmVzb2xkcmUgwqslc8K7IGNvbSBhIGFyYnJlIHbDoGxpZC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjAKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2ggw6lzIGluY29tcGF0aWJsZSBhbWIgLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tbWl4ZWQgYW1iIGNhbWlucyBlc3TDoCBlbiBkZXPDunM7IHVzZXUgJ2dpdCByZXNldCAtLSA8Y2FtaW5zPicgZW4gbGxvYyAiCisiZCdhaXjDsi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICJObyBlcyBwb3QgcmVzdGFibGlyIGRlICVzIGFtYiBjYW1pbnMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJlbCByZXN0YWJsaW1lbnQgZGUgJXMgbm8gZXMgcGVybWV0IGVuIHVuIGRpcMOyc2l0IG51IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzkxCittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgIi1OIG5vbcOpcyBlcyBwb3QgdXNhciBhbWIgLS1taXhlZCIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxMgorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6IgorbXNnc3RyICJDYW52aXMgwqt1bnN0YWdlZMK7IGRlc3Byw6lzIGRlbCByZXN0YWJsaW1lbnQ6IgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldC4gIFlvdSBjYW5cbiIKKyJ1c2UgJy0tcXVpZXQnIHRvIGF2b2lkIHRoaXMuICBTZXQgdGhlIGNvbmZpZyBzZXR0aW5nIHJlc2V0LnF1aWV0IHRvIHRydWVcbiIKKyJ0byBtYWtlIHRoaXMgdGhlIGRlZmF1bHQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCByZXN0YWJsaXIgZWwgZml0eGVyIGQnw61uZGV4IGEgbGEgcmV2aXNpw7Mgwqslc8K7LiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyOQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZXNjcml1cmUgZWwgZml0eGVyIGQnw61uZGV4IG5vdS4iCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo0MTEKK21zZ2lkICJjYW5ub3QgY29tYmluZSAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBhbmQgLS1taXNzaW5nIgorbXNnc3RyICJubyBlcyBwb3QgY29tYmluYXIgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgaSAtLW1pc3NpbmciCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo0NzIKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIHJlcXVpcmVzIC0tb2JqZWN0cyIKK21zZ3N0ciAiZWwgZmlsdHJhdGdlIGQnb2JqZWN0ZXMgcmVxdWVyZWl4IC0tb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjUyMgorbXNnaWQgInJldi1saXN0IGRvZXMgbm90IHN1cHBvcnQgZGlzcGxheSBvZiBub3RlcyIKK21zZ3N0ciAiZWwgcmV2LWxpc3Qgbm8gcGVybWV0IG1vc3RyYXIgbm90ZXMiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1MjUKK21zZ2lkICJjYW5ub3QgY29tYmluZSAtLXVzZS1iaXRtYXAtaW5kZXggd2l0aCBvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICJubyBlcyBwb3QgY29tYmluYXIgLS11c2UtYml0bWFwLWluZGV4IGFtYiBlbCBmaWx0cmF0Z2UgZCdvYmplY3RlcyIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MDgKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wY2lvbnM+XSAtLSBbPHBhcsOgbWV0cmVzPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDEzCittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICJyZXTDqW4gZWwgwqstLcK7IHBhc3NhdCBjb20gYSBwYXLDoG1ldHJlIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxNQorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAiZGVpeGEgZCdhbmFsaXR6YXIgZGVzcHLDqXMgZGVsIHByaW1lciBwYXLDoG1ldHJlIG5vIGQnb3BjacOzIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxOAorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgImVtZXQgZW4gZm9ybWEgbGxhcmdhIGVuZ2FueGFkYSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1NTEKK21zZ2lkICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcGNpb25zPl0gLS0gWzxwYXLDoG1ldHJlcz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPHBhcsOgbWV0cmU+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3BjaW9ucz5dIFs8cGFyw6BtZXRyZT4uLi5dXG4iCisiXG4iCisiRXhlY3V0ZXUgXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBwZXIgbcOpcyBpbmZvcm1hY2nDsyBzb2JyZSBsJ8O6cyAiCisiaW5pY2lhbC4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQKK21zZ2lkICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJldmVydCBbPG9wY2lvbnM+XSA8Y29taXNzacOzPi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNQorbXNnaWQgImdpdCByZXZlcnQgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgcmV2ZXJ0IDxzdWJvcmRyZT4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzAKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzxvcGNpb25zPl0gPGNvbWlzc2nDsz4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzEKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPHN1Ym9yZHJlPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIgorbXNnc3RyICJsJ29wY2nDsyDCqyVzwrsgZXNwZXJhIHVuIG5vbWJyZSBtYWpvciBxdWUgemVybyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJXM6ICVzIG5vIGVzIHBvdCB1c2FyIGFtYiAlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDIKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJhY2FiYSBsYSBzZXHDvMOobmNpYSBkZSByZXZlcnNpw7MgbyBlbCDCq2NoZXJyeSBwaWNrwrsiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAicmVwcsOobiBsYSBzZXHDvMOobmNpYSBkZSByZXZlcnNpw7MgbyBlbCDCq2NoZXJyeSBwaWNrwrsiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA0Cittc2dpZCAiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAiY2FuY2VswrdsYSBsYSBzZXHDvMOobmNpYSBkZSByZXZlcnNpw7MgbyBlbCDCq2NoZXJyeSBwaWNrwrsiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA1Cittc2dpZCAic2tpcCBjdXJyZW50IGNvbW1pdCBhbmQgY29udGludWUiCittc2dzdHIgIm9tZXQgbGEgY29taXNzacOzIGFjdHVhbCBpIGNvbnRpbnVhIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICJubyBjb21ldGlzIGF1dG9tw6B0aWNhbWVudCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDgKK21zZ2lkICJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiZWRpdGEgZWwgbWlzc2F0Z2UgZGUgY29taXNzacOzIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMQorbXNnaWQgInBhcmVudC1udW1iZXIiCittc2dzdHIgIm7Dum1lcm8gZGVsIHBhcmUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEyCittc2dpZCAic2VsZWN0IG1haW5saW5lIHBhcmVudCIKK21zZ3N0ciAic2VsZWNjaW9uYSBsYSBsw61uaWEgcHJpbmNpcGFsIGRlbCBwYXJlIgorCisjOiBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJlc3RyYXTDqGdpYSBkZSBmdXNpw7MiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE2Cittc2dpZCAib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAib3BjacOzIGQnZXN0cmF0w6hnaWEgZGUgZnVzacOzIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNQorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAibm9tIGRlIGxhIGNvbWlzc2nDsyBhIGFubmV4YXIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI3Cittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgInByZXNlcnZhIGxlcyBjb21pc3Npb25zIGluaWNpYWxtZW50IGJ1aWRlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjkKK21zZ2lkICJrZWVwIHJlZHVuZGFudCwgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAicmV0w6luIGxlcyBjb21pc3Npb25zIHJlZHVuZGFudHMgaSBidWlkZXMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjMyCittc2dpZCAicmV2ZXJ0IGZhaWxlZCIKK21zZ3N0ciAibGEgcmV2ZXJzacOzIGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNDUKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgImVsIMKrY2hlcnJ5IHBpY2vCuyBoYSBmYWxsYXQiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOQorbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJtIFs8b3BjaW9ucz5dIFstLV0gPGZpdHhlcj4uLi4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyMDcKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorImVsIGZpdHhlciBzZWfDvGVudCB0w6kgY29udGluZ3V0IMKrc3RhZ2XCuyBkaWZlcmVudCBkJ2FtYmTDs3MgZWxcbiIKKyJmaXR4ZXIgaSBsYSBIRUFEOiIKK21zZ3N0clsxXSAiIgorImVscyBmaXR4ZXJzIHNlZ8O8ZW50cyB0ZW5lbiBjb250aW5ndXQgwqtzdGFnZcK7IGRpZmVyZW50IGQnYW1iZMOzc1xuIgorImVsIGZpdHhlciBpIGxhIEhFQUQ6IgorCisjOiBidWlsdGluL3JtLmM6MjEyCittc2dpZCAiIgorIlxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIodXNldSAtZiBwZXIgYSBmb3LDp2FyIGwnZWxpbWluYWNpw7MpIgorCisjOiBidWlsdGluL3JtLmM6MjE2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ3N0clswXSAiZWwgZml0eGVyIHNlZ8O8ZW50IHTDqSBjYW52aXMgwqtzdGFnZWTCuyBlbiBsJ8OtbmRleDoiCittc2dzdHJbMV0gImVscyBmaXR4ZXJzIHNlZ8O8ZW50cyB0ZW5lbiBjYW52aXMgwqtzdGFnZWTCuyBlbiBsJ8OtbmRleDoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjAgYnVpbHRpbi9ybS5jOjIyOQorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKHVzZXUgLS1jYWNoZWQgcGVyIGEgbWFudGVuaXIgZWwgZml0eGVyLCBvIC1mIHBlciBhIGZvcsOnYXIgbCdlbGltaW5hY2nDsykiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjYKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dzdHJbMF0gImVsIGZpdHhlciBzZWfDvGVudCB0w6kgbW9kaWZpY2FjaW9ucyBsb2NhbHM6IgorbXNnc3RyWzFdICJlbHMgZml0eGVycyBzZWfDvGVudHMgdGVuZW4gbW9kaWZpY2FjaW9ucyBsb2NhbHM6IgorCisjOiBidWlsdGluL3JtLmM6MjQyCittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAibm8gbGxpc3RpcyBlbHMgZml0eGVycyBlbGltaW5hdHMiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDMKK21zZ2lkICJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAibm9tw6lzIGVsaW1pbmEgZGUgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDQKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAicGFzc2EgcGVyIGFsdCBsYSBjb21wcm92YWNpw7MgZCdhY3R1YWxpdGF0IgorCisjOiBidWlsdGluL3JtLmM6MjQ1Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgInBlcm1ldCBsJ2VsaW1pbmFjacOzIHJlY3Vyc2l2YSIKKworIzogYnVpbHRpbi9ybS5jOjI0NworbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICJzdXJ0IGFtYiBlc3RhdCB6ZXJvIGVuY2FyYSBxdWUgcmVzIGhhZ2kgY29pbmNpZGl0IgorCisjOiBidWlsdGluL3JtLmM6Mjg5CisjLCBmdXp6eQorbXNnaWQgInBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisiRmV1IMKrc3RhZ2XCuyBkZWxzIHZvc3RyZXMgY2FudmlzIGEgLmdpdG1vZHVsZXMgbyBmZXUgwqtzdGFzaMK7IGRlbHMgbWF0ZWl4b3MgIgorInBlciBhIHByb2NlZGlyIgorCisjOiBidWlsdGluL3JtLmM6MzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiCittc2dzdHIgIm5vIHMnaGEgc3VwcmltaXQgwqslc8K7IHJlY3Vyc2l2YW1lbnQgc2Vuc2UgLXIiCisKKyM6IGJ1aWx0aW4vcm0uYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJnaXQgcm06IG5vIHMnaGEgcG9ndXQgZWxpbWluYXIgJXMiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MjAKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLSIKKyJwYWNrPTxwYXF1ZXQtZGVsLWdpdC1yZWNlaXZlPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSAiCisiWzxtw6BxdWluYT46XTxkaXJlY3Rvcmk+IFs8cmVmZXLDqG5jaWE+Li4uXVxuIgorIiAgLS1hbGwgaSBlc3BlY2lmaWNhY2nDsyA8cmVmZXLDqG5jaWE+IGV4cGzDrWNpdGEgc8OzbiBtw7p0dWFtZW50IGV4Y2xvZW50cy4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYzCittc2dpZCAicmVtb3RlIG5hbWUiCittc2dzdHIgIm5vbSBkZWwgcmVtb3QiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc3Cittc2dpZCAidXNlIHN0YXRlbGVzcyBSUEMgcHJvdG9jb2wiCittc2dzdHIgInVzYSBlbCBwcm90b2NvbCBSUEMgc2Vuc2UgZXN0YXQiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc4Cittc2dpZCAicmVhZCByZWZzIGZyb20gc3RkaW4iCittc2dzdHIgImxsZWdlaXggbGVzIHJlZmVyw6huY2llcyBkZXMgZGUgc3RkaW4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc5Cittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAiaW1wcmltZWl4IGwnZXN0YXQgZGVzIGRlIGwnYWp1ZGFudCByZW1vdCIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE0Cittc2dpZCAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc2hvcnRsb2cgWzxvcGNpb25zPl0gWzxyYW5nLWRlLXJldmlzaW9ucz5dIFtbLS1dIDxjYW3DrT4uLi5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTUKK21zZ2lkICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3BjaW9ucz5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY0Cittc2dpZCAiR3JvdXAgYnkgY29tbWl0dGVyIHJhdGhlciB0aGFuIGF1dGhvciIKK21zZ3N0ciAiQWdydXBhIHBlciDCq2NvbWl0dGVywrsgZW4gY29tcHRlcyBkZSBwZXIgYXV0b3IiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjYKK21zZ2lkICJzb3J0IG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBjb21taXRzIHBlciBhdXRob3IiCittc2dzdHIgIm9yZGVuYSBsYSBzb3J0aWRhIHNlZ29ucyBlbCBub21icmUgZGUgY29taXNzaW9ucyBwZXIgYXV0b3IiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjgKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAiIgorIk9tZXQgbGVzIGRlc2NyaXBjaW9ucyBkZSBjb21pc3Npw7MsIG5vbcOpcyBwcm92ZWVpeCBlbCByZWNvbXB0ZSBkZSBjb21pc3Npb25zIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcwCittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAiTW9zdHJhIGwnYWRyZcOnYSBlbGVjdHLDsm5pY2EgZGUgY2FkYSBhdXRvciIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MQorbXNnaWQgIjx3PlssPGkxPlssPGkyPl1dIgorbXNnc3RyICI8dz5bLDxpMT5bLDxpMj5dXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MgorbXNnaWQgIkxpbmV3cmFwIG91dHB1dCIKK21zZ3N0ciAiQWp1c3RhIGxlcyBsw61uaWVzIGRlIGxhIHNvcnRpZGEiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDEKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZ2l2ZW4gb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICJoaSBoYSBtYXNzYSBhcmd1bWVudHMgZG9uYXRzIGZvcmEgZGVsIGRpcMOyc2l0IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTMKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTxxdWFuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldmlzacOzPiB8IDxnbG9iPikuLi5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTcKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWZlcsOobmNpYT5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWYiCittc2dpZF9wbHVyYWwgImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWZzIgorbXNnc3RyWzBdICJzJ2VzdMOgIGlnbm9yYW50ICVzOyBubyBlcyBwb3QgZ2VzdGlvbmFyIG3DqXMgZGUgJWQgcmVmZXLDqG5jaWEiCittc2dzdHJbMV0gInMnZXN0w6AgaWdub3JhbnQgJXM7IG5vIGVzIHBvZGVuIGdlc3Rpb25hciBtw6lzIGRlICVkIHJlZmVyw6huY2llcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBtYXRjaGluZyByZWZzIHdpdGggJXMiCittc2dzdHIgIm5vIGhpIGhhIHJlZmVyw6huY2llcyBjb2luY2lkZW50cyBhbWIgJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDUKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIm1vc3RyYSBsZXMgYnJhbnF1ZXMgYW1iIHNlZ3VpbWVudCByZW1vdCBpIGxlcyBsb2NhbHMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAibW9zdHJhIGxlcyBicmFucXVlcyBhbWIgc2VndWltZW50IHJlbW90IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ5Cittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAiY29sb3JhICcqISstJyBjb3JyZXNwb25lbnQgYSBsYSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTEKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAibW9zdHJhIDxuPiBjb21pc3Npb25zIGRlc3Byw6lzIGRlIGwnYXZhbnRwYXNzYXQgY29tw7oiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTMKK21zZ2lkICJzeW5vbnltIHRvIG1vcmU9LTEiCittc2dzdHIgInNpbsOybmltIGRlIG1vcmU9LTEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTQKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAib21ldCBhbm9tZW5hciBjYWRlbmVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU2Cittc2dpZCAiaW5jbHVkZSB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgImluY2xvdSBsYSBicmFuY2EgYWN0dWFsIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU4Cittc2dpZCAibmFtZSBjb21taXRzIHdpdGggdGhlaXIgb2JqZWN0IG5hbWVzIgorbXNnc3RyICJhbm9tZW5hIGxlcyBjb21pc3Npb25zIGFtYiBlbHMgc2V1cyBub21zIGQnb2JqZWN0ZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MAorbXNnaWQgInNob3cgcG9zc2libGUgbWVyZ2UgYmFzZXMiCittc2dzdHIgIm1vc3RyYSBsZXMgYmFzZXMgZGUgZnVzacOzIHBvc3NpYmxlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MgorbXNnaWQgInNob3cgcmVmcyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciByZWYiCittc2dzdHIgIm1vc3RyYSBsZXMgcmVmZXLDqG5jaWVzIGluYWJhc3RhYmxlcyBkZSBxdWFsc2V2b2wgYWx0cmEgcmVmZXLDqG5jaWEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjQKK21zZ2lkICJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIm1vc3RyYSBsZXMgY29taXNzaW9ucyBlbiBvcmRyZSB0b3BvbMOyZ2ljIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY3Cittc2dpZCAic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giCittc2dzdHIgIm1vc3RyYSBub23DqXMgbGVzIGNvbWlzc2lvbnMgcXVlIG5vIHNpZ3VpbiBlbiBsYSBwcmltZXJhIGJyYW5jYSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2OQorbXNnaWQgInNob3cgbWVyZ2VzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lIHRpcCIKK21zZ3N0ciAibW9zdHJhIGxlcyBmdXNpb25zIGFiYXN0YWJsZXMgZGUgbm9tw6lzIHVuYSBwdW50YSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MQorbXNnaWQgInRvcG9sb2dpY2FsbHkgc29ydCwgbWFpbnRhaW5pbmcgZGF0ZSBvcmRlciB3aGVyZSBwb3NzaWJsZSIKK21zZ3N0ciAib3JkZW5hIHRvcG9sw7JnaWNhbWVudCwgbWFudGVuaW50IGwnb3JkcmUgZGUgZGF0ZXMgb24gc2lndWkgcG9zc2libGUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzQKK21zZ2lkICI8bj5bLDxiYXNlPl0iCittc2dzdHIgIjxuPlssPGJhc2U+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NQorbXNnaWQgInNob3cgPG4+IG1vc3QgcmVjZW50IHJlZi1sb2cgZW50cmllcyBzdGFydGluZyBhdCBiYXNlIgorbXNnc3RyICJtb3N0cmEgbGVzIDxuPiBlbnRyYWRlcyBtw6lzIHJlY2VudHMgY29tZW7Dp2FudCBhIGxhIGJhc2UiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MTEKK21zZ2lkICIiCisiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvciAtLW1lcmdlLWJhc2UiCittc2dzdHIgIiIKKyItLXJlZmxvZyDDqXMgaW5jb21wYXRpYmxlIGFtYiAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50IG8gLS1tZXJnZS1iYXNlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM1Cittc2dpZCAibm8gYnJhbmNoZXMgZ2l2ZW4sIGFuZCBIRUFEIGlzIG5vdCB2YWxpZCIKK21zZ3N0ciAibm8gcydoYSBkb25hdCBjYXAgYnJhbmNhLCBpIEhFQUQgbm8gw6lzIHbDoGxpZCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczOAorbXNnaWQgIi0tcmVmbG9nIG9wdGlvbiBuZWVkcyBvbmUgYnJhbmNoIG5hbWUiCittc2dzdHIgImwnb3BjacOzIC0tcmVmbG9nIG5lY2Vzc2l0YSB1biBub20gZGUgYnJhbmNhIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgJWQgZW50cnkgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ2lkX3BsdXJhbCAib25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dzdHJbMF0gImVzIHBvdCBtb3N0cmFyIG5vbcOpcyAlZCBlbnRyYWRhIGEgbGEgdmVnYWRhLiIKK21zZ3N0clsxXSAiZXMgcG9kZW4gbW9zdHJhciBub23DqXMgJWQgZW50cmFkZXMgYSBsYSB2ZWdhZGEuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmICVzIgorbXNnc3RyICJubyBoaSBoYSB0YWwgcmVmZXLDqG5jaWEgJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2LiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2cy4iCittc2dzdHJbMF0gIm5vIGVzIHBvdCBnZXN0aW9uYXIgbcOpcyBkJyVkIHJldmlzacOzLiIKK21zZ3N0clsxXSAibm8gZXMgcG9kZW4gZ2VzdGlvbmFyIG3DqXMgZGUgJWQgcmV2aXNpb25zLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIsKrJXPCuyBubyDDqXMgdW5hIHJlZmVyw6huY2lhIHbDoGxpZGEuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIGNvbW1pdCAlcyAoJXMpIgorbXNnc3RyICJubyBlcyBwb3QgdHJvYmFyIGxhIGNvbWlzc2nDsyAlcyAoJXMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTIKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXRyw7M+Li4uXSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjEzCittc2dpZCAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHLDsz5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYyCittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAibW9zdHJhIG5vbcOpcyBsZXMgZXRpcXVldGVzIChlcyBwb3QgY29tYmluYXIgYW1iIGhlYWRzKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MworbXNnaWQgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiCittc2dzdHIgIm1vc3RyYSBub23DqXMgZWxzIGNhcHMgKGVzIHBvdCBjb21iaW5hciBhbWIgdGFncykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjQKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICIiCisiY29tcHJvdmFjacOzIGRlIHJlZmVyw6huY2lhIG3DqXMgZXN0cmljdGEsIHJlcXVlcmVpeCBlbCBjYW3DrSBkZSByZWZlcsOobmNpYSAiCisiZXhhY3RlIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY3IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjkKK21zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSwgZXZlbiBpZiBpdCB3b3VsZCBiZSBmaWx0ZXJlZCBvdXQiCittc2dzdHIgIm1vc3RyYSBsYSByZWZlcsOobmNpYSBIRUFELCBlbmNhcmEgcXVlIGVzIGZpbHRyw6lzIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcxCittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMiCittc2dzdHIgImRlc3JlZmVyZW5jaWEgbGVzIGV0aXF1ZXRlcyBhIElEIGQnb2JqZWN0ZSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MworbXNnaWQgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIKK21zZ3N0ciAibW9zdHJhIGVsIGhhc2ggU0hBMSB1c2FudCBub23DqXMgPG4+IHhpZnJlcyIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3NworbXNnaWQgImRvIG5vdCBwcmludCByZXN1bHRzIHRvIHN0ZG91dCAodXNlZnVsIHdpdGggLS12ZXJpZnkpIgorbXNnc3RyICJubyBpbXByaW1laXhpcyBlbHMgcmVzdWx0YXRzIGEgc3Rkb3V0ICjDunRpbCBhbWIgLS12ZXJpZnkpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAibW9zdHJhIGxlcyByZWZlcsOobmNpZXMgZGUgc3RkaW4gcXVlIG5vIHNpZ3VpbiBlbiBlbCBkaXDDsnNpdCBsb2NhbCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMAorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgKGluaXR8bGlzdHxzZXR8ZGlzYWJsZSkgPG9wdGlvbnM+IgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGRpc2FibGUpIDxvcGNpb25zPiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo2MQorbXNnaWQgInRoaXMgd29ya3RyZWUgaXMgbm90IHNwYXJzZSAoc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IG5vdCBleGlzdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMjAKK21zZ2lkICJmYWlsZWQgdG8gc2V0IGV4dGVuc2lvbnMud29ya3RyZWVDb25maWcgc2V0dGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIzNworbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCBbLS1jb25lXSIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IFstLWNvbmVdIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI1NgorbXNnaWQgImluaXRpYWxpemUgdGhlIHNwYXJzZS1jaGVja291dCBpbiBjb25lIG1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyNjIKKyMsIGZ1enp5Cittc2dpZCAiaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgIm9tZXQgbCdhcGxpY2FjacOzIGRlbCBmaWx0cmUgZCdhZ2FmYW1lbnQgcGFyY2lhbCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBvYnJpciDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzYxCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgKC0tc3RkaW4gfCA8cGF0dGVybnM+KSIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgKC0tc3RkaW4gfCA8cGF0cm9ucz4pIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM3OAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBzdGFuZGFyZCBpbiIKK21zZ3N0ciAibGxlZ2VpeCBlbHMgcGF0cm9ucyBkZSBsJ2VudHJhZGEgZXN0w6BuZGFyZCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozODQKKyMsIG1zZ2lkICJzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnaWQgInNldCBzcGFyc2UtY2hlY2tvdXQgcGF0dGVybnMiCittc2dzdHIgImVzdGFibGVpeCBlbHMgcGF0cm9ucyDCq3NwYXJzZS1jaGVja291dMK7IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjQ0NworbXNnaWQgImRpc2FibGUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJpbmhhYmlsaXRhIMKrc3BhcnNlLWNoZWNrb3V0wrsiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDU5Cittc2dpZCAiZXJyb3Igd2hpbGUgcmVmcmVzaGluZyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhY3R1YWxpdHphciBlbCBkaXJlY3RvcmkgZGUgdHJlYmFsbCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyIGJ1aWx0aW4vc3Rhc2guYzozNworbXNnaWQgImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgc3Rhc2ggbGlzdCBbPG9wY2lvbnM+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIzIGJ1aWx0aW4vc3Rhc2guYzo0MgorbXNnaWQgImdpdCBzdGFzaCBzaG93IFs8b3B0aW9ucz5dIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHNob3cgWzxvcGNpb25zPl0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjQgYnVpbHRpbi9zdGFzaC5jOjQ3Cittc2dpZCAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjUKK21zZ2lkICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNiBidWlsdGluL3N0YXNoLmM6NjIKK21zZ2lkICJnaXQgc3Rhc2ggYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBicmFuY2ggPG5vbS1kZS1icmFuY2E+IFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI3IGJ1aWx0aW4vc3Rhc2guYzo2NworbXNnaWQgImdpdCBzdGFzaCBjbGVhciIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjggYnVpbHRpbi9zdGFzaC5jOjc3Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWlzc2F0Z2U+XVxuIgorIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzozMSBidWlsdGluL3N0YXNoLmM6ODQKK21zZ2lkICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8bWVzc2FnZT5dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8bWlzc2F0Z2U+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUyCittc2dpZCAiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU3Cittc2dpZCAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3MgorbXNnaWQgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IgorbXNnc3RyICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWlzc2F0Z2U+XSBbLXF8LS1xdWlldF0gPGNvbW1pdD4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiwqslc8K7IG5vIMOpcyB1bmEgY29taXNzacOzIGRlIHRpcHVzIMKrc3Rhc2jCuyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiVzIgorbXNnc3RyICJTJ2hhbiBlc3BlY2lmaWNhdCBtYXNzYSByZXZpc2lvbnM6JXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNjEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NDkKK21zZ2lkICJObyBzdGFzaCBlbnRyaWVzIGZvdW5kLiIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgY2FwIMKrc3Rhc2jCuy4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICLCqyVzwrsgbm8gw6lzIHVuYSByZWZlcsOobmNpYSB2w6BsaWRhIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjI0IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzUKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciBhbWIgcGFyw6BtZXRyZXMgbm8gZXN0w6AgaW1wbGVtZW50YXQiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MDMKK21zZ2lkICJjYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIm5vIGVzIHBvdCBhcGxpY2FyIHVuIMKrc3Rhc2jCuyBlbm1pZyBkJ3VuYSBmdXNpw7MiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIGRpZmYgJXNeIS4iCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZ2VuZXJhciBkaWZmICVzXiEuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDIxCittc2dpZCAiY29uZmxpY3RzIGluIGluZGV4LlRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICJoaSBoYSBjb25mbGljdGVzIGVuIGwnw61uZGV4LiBQcm92ZXUtaG8gc2Vuc2UgLS1pbmRleC4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjcKK21zZ2lkICJjb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGRlc2FyIGwnYXJicmUgZCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MzYKK21zZ2lkICJjb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCIKK21zZ3N0ciAibm8gcydoYW4gcG9ndXQgcmVzdGF1cmFyIGVscyBmaXR4ZXJzIG5vIHNlZ3VpdHMgZGVzIGRlbCDCq3N0YXNowrsiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzIgorbXNnc3RyICJTJ2VzdMOgIGZ1c2lvbmFudCAlcyBhbWIgJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NjAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2ODEKK21zZ2lkICJJbmRleCB3YXMgbm90IHVuc3Rhc2hlZC4iCittc2dzdHIgIkwnw61uZGV4IG5vIGVzdGF2YSDCq3Vuc3Rhc2hlZMK7IgorCisjOiBidWlsdGluL3N0YXNoLmM6NTIxIGJ1aWx0aW4vc3Rhc2guYzo2MjAKK21zZ2lkICJhdHRlbXB0IHRvIHJlY3JlYXRlIHRoZSBpbmRleCIKK21zZ3N0ciAiaW50ZW50YSB0b3JuYXIgYSBjcmVhciBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICVzICglcykiCittc2dzdHIgIkRlc2NhcnRhdCAlcyAoJXMpIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJXM6IG5vIHMnaGEgcG9ndXQgZGVzY2FydGFyIGwnZW50cmFkYSDCq3N0YXNowrsiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIsKrJXPCuyBubyDDqXMgdW5hIHJlZmVyw6huY2lhIMKrc3Rhc2jCuyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjYzMiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY5NQorbXNnaWQgIlRoZSBzdGFzaCBlbnRyeSBpcyBrZXB0IGluIGNhc2UgeW91IG5lZWQgaXQgYWdhaW4uIgorbXNnc3RyICJFcyBjb25zZXJ2YSBsJ2VudHJhZGEgwqtzdGFzaMK7IGVuIGNhcyBxdWUgbGEgbmVjZXNzaXRldSBhbHRyYSB2ZWdhZGEuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NjU1IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzEzCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJDYXAgbm9tIGRlIGJyYW5jYSBlc3BlY2lmaWNhdCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjc5NSBidWlsdGluL3N0YXNoLmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJXMgd2l0aCAlcyIKK21zZ3N0ciAiTm8gZXMgcG90IGFjdHVhbGl0emFyICVzIGFtYiAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgxMyBidWlsdGluL3N0YXNoLmM6MTQ3MCBidWlsdGluL3N0YXNoLmM6MTUwNgorbXNnaWQgInN0YXNoIG1lc3NhZ2UiCittc2dzdHIgIm1pc3NhdGdlIMKrc3Rhc2jCuyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgyMworbXNnaWQgIlwiZ2l0IHN0YXNoIHN0b3JlXCIgcmVxdWlyZXMgb25lIDxjb21taXQ+IGFyZ3VtZW50IgorbXNnc3RyICLCq2dpdCBzdGFzaCBzdG9yZcK7IHJlcXVlcmVpeCB1biBwYXLDoG1ldHJlIDxjb21pc3Npw7M+IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTA0NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxOAorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgIk5vIGhpIGhhIGNhbnZpcyBzZWxlY2Npb25hdHMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTQ1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MTUwCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIkVuY2FyYSBubyB0ZW5pdSBsYSBjb21pc3Npw7MgaW5pY2lhbCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNzIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNjUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAiTm8gZXMgcG90IGRlc2FyIGwnZXN0YXQgZCfDrW5kZXggYWN0dWFsIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE4MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE4MAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIk5vIGVzIHBvZGVuIGRlc2FyIGVscyBmaXR4ZXJzIG5vIHNlZ3VpdHMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTkyIGJ1aWx0aW4vc3Rhc2guYzoxMjAxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MjAxCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxNAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICJObyBlcyBwb3QgZGVzYXIgbCdlc3RhdCBkJ2FyYnJlIGRlIHRyZWJhbGwgYWN0dWFsIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTIyOSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIzNAorbXNnaWQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIgorbXNnc3RyICJObyBlcyBwb3QgcmVnaXN0cmFyIGwnZXN0YXQgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI3OCBnaXQtbGVnYWN5LXN0YXNoLnNoOjMzOAorbXNnaWQgIkNhbid0IHVzZSAtLXBhdGNoIGFuZCAtLWluY2x1ZGUtdW50cmFja2VkIG9yIC0tYWxsIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIk5vIGVzIHBvZGVuIHVzYXIgLS1wYXRjaCBpIC0taW5jbHVkZS11bnRyYWNrZWQgbyAtLWFsbCBhIGxhIHZlZ2FkYSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOTQKK21zZ2lkICJEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/IgorbXNnc3RyICJIZXUgb2JsaWRhdCBkZSBmZXIgwqtnaXQgYWRkwrs/IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMwOSBnaXQtbGVnYWN5LXN0YXNoLnNoOjM0NgorbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAiTm8gaGkgaGEgY2FudmlzIGxvY2FscyBhIGRlc2FyIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMxNiBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1MQorbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICJObyBlcyBwb3QgaW5pY2lhbGl0emFyIGVsIG1hZ2F0emVtIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMzMSBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1NQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIKK21zZ3N0ciAiTm8gZXMgcG90IGRlc2FyIGwnZXN0YXQgYWN0dWFsIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJXMiCittc2dzdHIgIlMnaGFuIGRlc2F0IGVsIGRpcmVjdG9yaSBkZSB0cmViYWxsIGkgbCdlc3RhdCBkJ8OtbmRleCAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0MjYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozODUKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIk5vIGVzIHBvZGVuIGVsaW1pbmFyIGVscyBjYW52aXMgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2MSBidWlsdGluL3N0YXNoLmM6MTQ5NworbXNnaWQgImtlZXAgaW5kZXgiCittc2dzdHIgIm1hbnTDqW4gbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDYzIGJ1aWx0aW4vc3Rhc2guYzoxNDk5Cittc2dpZCAic3Rhc2ggaW4gcGF0Y2ggbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2NCBidWlsdGluL3N0YXNoLmM6MTUwMAorbXNnaWQgInF1aWV0IG1vZGUiCittc2dzdHIgIm1vZGUgc2lsZW5jacOzcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjYgYnVpbHRpbi9zdGFzaC5jOjE1MDIKK21zZ2lkICJpbmNsdWRlIHVudHJhY2tlZCBmaWxlcyBpbiBzdGFzaCIKK21zZ3N0ciAiaW5jbG91IGVscyBmaXR4ZXJzIG5vIHNlZ3VpdHMgYSDCq3N0YXNowrsiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDY4IGJ1aWx0aW4vc3Rhc2guYzoxNTA0Cittc2dpZCAiaW5jbHVkZSBpZ25vcmUgZmlsZXMiCittc2dzdHIgImluY2xvdSBlbHMgZml0eGVycyBpZ25vcmF0cyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4ZWMgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXhlY3V0YXIgJXMiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM3Cittc2dpZCAic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIgorbXNnc3RyICIiCisib21ldCBpIGVsaW1pbmEgdG90ZXMgbGVzIGzDrW5pZXMgcXVlIGNvbWVuY2luIGFtYiBlbCBjYXLDoGN0ZXIgZGUgY29tZW50YXJpIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzo0MAorbXNnaWQgInByZXBlbmQgY29tbWVudCBjaGFyYWN0ZXIgYW5kIHNwYWNlIHRvIGVhY2ggbGluZSIKK21zZ3N0ciAiYW50ZXBvc2EgZWwgY2Fyw6BjdGVyIGRlIGNvbWVudGFyaSBpIHVuIGVzcGFpIGEgY2FkYSBsw61uaWEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiCittc2dzdHIgIlMnZXNwZXJhIHVuIG5vbSBkZSByZWZlcsOobmNpYSBwbGUsIHMnaGEgcmVidXQgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NAorbXNnaWQgInN1Ym1vZHVsZS0taGVscGVyIHByaW50LWRlZmF1bHQtcmVtb3RlIHRha2VzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGRlc3B1bGxhciB1biBjb21wb25lbnQgZGUgbCd1cmwgwqslc8K7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDEwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgwCittc2dpZCAiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAiw6BuY29yYSBhbHRlcm5hdGl2YSBwZXIgYWxzIGNhbWlucyByZWxhdGl1cyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PGNhbcOtPl0gWzxjYW3DrT4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICJObyBzJ2hhIHRyb2JhdCBjYXAgdXJsIHBlciBhbCBjYW3DrSBkZSBzdWJtw7JkdWwgwqslc8K7IGEgLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyVzJ1xuIgorbXNnc3RyICJTJ2VzdMOgIGVudHJhbnQgYSDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIGZvciAlc1xuIgorIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIHdoaWxlIHJlY3Vyc2luZyBpbiB0aGUgbmVzdGVkICIKKyJzdWJtb2R1bGVzIG9mICVzXG4iCisiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY1Cittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IG9mIGVudGVyaW5nIGVhY2ggc3VibW9kdWxlIGNvbW1hbmQiCittc2dzdHIgIk9tZXQgbGEgc29ydGlkYSBlbiBlbnRyYXIgbCdvcmRyZSBkZSBjYWRhIHN1Ym3DsmR1bCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA1MworbXNnaWQgIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiSW5jbG91IHJlY3Vyc2l2YW1lbnQgZWxzIHN1Ym3DsmR1bHMgaW1icmljYXRzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTcyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWy0tXSA8Y29tbWFuZD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBmb3JlYWNoIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gPG9yZHJlPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGxvb2sgdXAgY29uZmlndXJhdGlvbiAnJXMnLiBBc3N1bWluZyB0aGlzIHJlcG9zaXRvcnkgaXMgaXRzIG93biAiCisiYXV0aG9yaXRhdGl2ZSB1cHN0cmVhbS4iCittc2dzdHIgIiIKKyJubyBzJ2hhIHBvZ3V0IHRyb2JhciBsYSBjb25maWd1cmFjacOzIMKrJXPCuy4gUydhc3N1bWVpeCBxdWUgYXF1ZXN0IGRpcMOyc2l0IMOpcyAiCisiZWwgc2V1IGRpcMOyc2l0IGZvbnQgYXV0b3JpdHphdC4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiByZWdpc3RyYXIgbCd1cmwgcGVyIGFsIGNhbcOtIGRlIHN1Ym3DsmR1bCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSByZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiUydoYSByZWdpc3RyYXQgZWwgc3VibcOyZHVsIMKrJXPCuyAoJXMpIHBlciBhbCBjYW3DrSDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBjb21tYW5kIHVwZGF0ZSBtb2RlIHN1Z2dlc3RlZCBmb3Igc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAiIgorImFkdmVydMOobmNpYTogc2Ugc3VnZ2VyZWl4IGVsIG1vZGUgZCdhY3R1YWxpdHphY2nDsyBwZXIgb3JkcmUgcGVyIGFsIHN1Ym3DsmR1bCAiCisiwqslc8K7XG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiByZWdpc3RyYXIgZWwgbW9kZSBkJ2FjdHVhbGl0emFjacOzIHBlciBhbCBjYW3DrSBkZSAiCisic3VibcOyZHVsIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxMAorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBmb3IgaW5pdGlhbGl6aW5nIGEgc3VibW9kdWxlIgorbXNnc3RyICJPbWV0IGxhIHNvcnRpZGEgZCdpbmljaWFsaXR6YXIgdW4gc3VibcOyZHVsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzxvcHRpb25zPl0gWzxwYXRoPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8b3BjaW9ucz5dIFs8Y2Ftw60+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjc4NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICclcyciCittc2dzdHIgIk5vIHMnaGEgdHJvYmF0IGNhcCBtYXBhdGdlIGRlIHN1Ym3DsmR1bCBhIC5naXRtb2R1bGVzIHBlciBhbCBjYW3DrSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCByZWYgaW5zaWRlIHRoZSBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCByZXNvbGRyZSBsYSByZWZlcsOobmNpYSBhIEhFQUQgZGlucyBkZWwgc3VibcOyZHVsIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg1NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAyMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNlcmNhciByZWN1cnNpdmFtZW50IGFsIHN1Ym3DsmR1bCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NzggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExODkKK21zZ2lkICJTdXBwcmVzcyBzdWJtb2R1bGUgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAiU3VwcmltZWl4IGxhIHNvcnRpZGEgZGUgbCdlc3RhdCBkZWwgc3VibcOyZHVsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODc5Cittc2dpZCAiIgorIlVzZSBjb21taXQgc3RvcmVkIGluIHRoZSBpbmRleCBpbnN0ZWFkIG9mIHRoZSBvbmUgc3RvcmVkIGluIHRoZSBzdWJtb2R1bGUgIgorIkhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4MAorbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiaW5jbG91IHJlY3Vyc2l2YW1lbnQgZWxzIHN1Ym3DsmR1bHMgaW1icmljYXRzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODg1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPGNhbcOtPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MDkKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8cGF0aD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxjYW3DrT4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJXMnXG4iCittc2dzdHIgIlMnZXN0w6Agc2luY3Jvbml0emFudCBsJ3VybCBkZWwgc3VibcOyZHVsIHBlciBhIMKrJXPCu1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gcmVnaXN0cmFyIGwndXJsIHBlciBhbCBjYW3DrSBkZWwgc3VibcOyZHVsIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk5MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKyJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIG9idGVuaXIgZWwgcmVtb3QgcGVyIGRlZmVjdGUgcGVsIHN1Ym3DsmR1bCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhY3R1YWxpdHphciBlbCByZW1vdCBwZWwgc3VibcOyZHVsIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTEKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIgorbXNnc3RyICJPbWV0IGxhIHNvcnRpZGEgZGUgbGEgc2luY3Jvbml0emFjacOzIGRlIGwndXJsIGRlbCBzdWJtw7JkdWwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDU4Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs8Y2Ftw60+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91ICIKKyJyZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyJMJ2FyYnJlIGRlIHRyZWJhbGwgZGUgc3VibcOyZHVsIMKrJXPCuyBjb250w6kgdW4gZGlyZWN0b3JpIC5naXRcbiIKKyIodXNldSAncm0gLXJmJyBzaSByZWFsbWVudCB2b2xldSBlbGltaW5hci1sbywgaW5jbG9lbnQgdG90YSBsYSBzZXZhIGhpc3TDsnJpYSkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgbG9jYWwgbW9kaWZpY2F0aW9uczsgdXNlICctZicgdG8gZGlzY2FyZCAiCisidGhlbSIKK21zZ3N0ciAiIgorIkwnYXJicmUgZGUgdHJlYmFsbCBkZWwgc3VibcOyZHVsIMKrJXPCuyBjb250w6kgbW9kaWZpY2FjaW9ucyBsb2NhbHM7IHVzZXUgJy1mJyAiCisicGVyIGEgZGVzY2FydGFyLWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyVzJ1xuIgorbXNnc3RyICJTJ2hhIG5ldGVqYXQgZWwgZGlyZWN0b3JpIMKrJXPCu1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVsaW1pbmFyIGwnYXJicmUgZGUgdHJlYmFsbCBkZSBzdWJtw7JkdWwgwqslc8K7XG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZW1wdHkgc3VibW9kdWxlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBlbCBkaXJlY3RvcmkgZGUgc3VibcOyZHVsIGJ1aXQgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiUydoYSBkZXNyZWdpc3RyYXQgZWwgc3VibcOyZHVsIMKrJXPCuyAoJXMpIHBlciBhbCBjYW3DrSDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTAKK21zZ2lkICJSZW1vdmUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZXMgZXZlbiBpZiB0aGV5IGNvbnRhaW4gbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiIgorIlN1cHJpbWVpeCBlbHMgYXJicmVzIGRlIHRyZWJhbGwgZGVscyBzdWJtw7JkdWxzIGZpbnMgaSB0b3Qgc2kgY29udGVuZW4gY2FudmlzICIKKyJsb2NhbHMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTkxCittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiRGVzcmVnaXN0cmEgcmVjdXJzaXZhbWVudCB0b3RzIGVscyBzdWJtw7JkdWxzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5NgorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPHBhdGg+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPGNhbcOtPi4uLl1dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIxMAorbXNnaWQgIlVzZSAnLS1hbGwnIGlmIHlvdSByZWFsbHkgd2FudCB0byBkZWluaXRpYWxpemUgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgIlVzZXUgJy0tYWxsJyBzaSByZWFsbWVudCB2b2xldSBkZXNpbmljaWFsaXR6YXIgdG90cyBlbHMgc3VibcOyZHVscyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyNzUKK21zZ2lkICIiCisiQW4gYWx0ZXJuYXRlIGNvbXB1dGVkIGZyb20gYSBzdXBlcnByb2plY3QncyBhbHRlcm5hdGUgaXMgaW52YWxpZC5cbiIKKyJUbyBhbGxvdyBHaXQgdG8gY2xvbmUgd2l0aG91dCBhbiBhbHRlcm5hdGUgaW4gc3VjaCBhIGNhc2UsIHNldFxuIgorInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IHRvICdpbmZvJyBvciwgZXF1aXZhbGVudGx5LCBjbG9uZSB3aXRoXG4iCisiJy0tcmVmZXJlbmNlLWlmLWFibGUnIGluc3RlYWQgb2YgJy0tcmVmZXJlbmNlJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzMTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgY2Fubm90IGFkZCBhbHRlcm5hdGU6ICVzIgorbXNnc3RyICJlbCBzdWJtw7JkdWwgwqslc8K7IG5vIHBvdCBhZmVnaXIgdW4gYWx0ZXJuYXRpdTogJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJObyBlcyByZWNvbmVpeCBlbCB2YWxvciDCqyVzwrsgcGVyIGEgc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAiTm8gZXMgcmVjb25laXggZWwgdmFsb3Igwqslc8K7IHBlciBhIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODMKK21zZ2lkICJ3aGVyZSB0aGUgbmV3IHN1Ym1vZHVsZSB3aWxsIGJlIGNsb25lZCB0byIKK21zZ3N0ciAiYSBvbiBlcyBjbG9uYXLDoCBlbCBzdWJtw7JkdWwgbm91IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4NgorbXNnaWQgIm5hbWUgb2YgdGhlIG5ldyBzdWJtb2R1bGUiCittc2dzdHIgIm5vbSBkZWwgc3VibcOyZHVsIG5vdSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODkKK21zZ2lkICJ1cmwgd2hlcmUgdG8gY2xvbmUgdGhlIHN1Ym1vZHVsZSBmcm9tIgorbXNnc3RyICJ1cmwgZGVsIHF1YWwgY2xvbmFyIGVsIHN1Ym3DsmR1bCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTcKK21zZ2lkICJkZXB0aCBmb3Igc2hhbGxvdyBjbG9uZXMiCittc2dzdHIgInByb2Z1bmRpdGF0IGRlbHMgY2xvbnMgc3VwZXJmaWNpYWxzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwMCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5NworbXNnaWQgImZvcmNlIGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgImZvcsOnYSBlbCBwcm9ncsOpcyBkZWwgY2xvbmF0Z2UiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODk5Cittc2dpZCAiZGlzYWxsb3cgY2xvbmluZyBpbnRvIG5vbi1lbXB0eSBkaXJlY3RvcnkiCittc2dzdHIgIm5vIHBlcm1ldGlzIGNsb25hciBlbiB1biBkaXJlY3Rvcmkgbm8gYnVpdCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDcKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD08cGF0aD5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxyZXBvc2l0b3J5Pl0gWy0tbmFtZSA8bmFtZT5dIFstLWRlcHRoIDxkZXB0aD5dIC0tdXJsIDx1cmw+IC0tcGF0aCA8cGF0aD4iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxjYW3DrT5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxkaXDDsnNpdD5dIFstLW5hbWUgPG5vbT5dIFstLWRlcHRoIDxwcm9mdW5kaXRhdD5dIC0tdXJsIDx1cmw+IC0tcGF0aCA8Y2Ftw60+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBjcmVhdGUvdXNlICclcycgaW4gYW5vdGhlciBzdWJtb2R1bGUncyBnaXQgZGlyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZWwgY2xvbmF0Z2UgZGUgwqslc8K7IGFsIGNhbcOtIGRlIHN1Ym3DsmR1bCDCqyVzwrsgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJkaXJlY3Rvcnkgbm90IGVtcHR5OiAnJXMnIgorbXNnc3RyICJkaXJlY3Rvcmkgbm8gYnVpdDogwqslc8K7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2J0ZW5pciBlbCBkaXJlY3RvcmkgZGUgc3VibcOyZHVsIHBlciBhIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJNb2RlIGQnYWN0dWFsaXR6YWNpw7Mgwqslc8K7IG5vIHbDoGxpZCBwZXIgYWwgY2Ftw60gZGUgc3VibcOyZHVsIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGNvbmZpZ3VyZWQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiIKKyJNb2RlIGQnYWN0dWFsaXR6YWNpw7Mgwqslc8K7IGNvbmZpZ3VyYXQgbm8gdsOgbGlkIHBlciBhbCBjYW3DrSBkZSBzdWJtw7JkdWwgwqslc8K7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJXMnIG5vdCBpbml0aWFsaXplZCIKK21zZ3N0ciAiRWwgY2Ftw60gZGUgc3VibcOyZHVsIMKrJXPCuyBubyBlc3TDoCBpbmljaWFsaXR6YXQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTk4Cittc2dpZCAiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIlBvdHNlciB2b2xldSB1c2FyICd1cGRhdGUgLS1pbml0Jz8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHVubWVyZ2VkIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiUydlc3TDoCBvbWV0ZW50IGVsIHN1Ym3DsmR1bCBubyBmdXNpb25hdCAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgc3VibW9kdWxlICclcyciCittc2dzdHIgIlMnZXN0w6Agb21ldGVudCBlbCBzdWJtw7JkdWwgwqslc8K7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJy4gUmV0cnkgc2NoZWR1bGVkIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNsb25hciDCqyVzwrsuIFMnaGEgcHJvZ3JhbWF0IHVuIHJlaW50ZW50IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJyBhIHNlY29uZCB0aW1lLCBhYm9ydGluZyIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBwZXIgc2Vnb24gY29wIGVuIGNsb25hciDCqyVzwrssIHMnZXN0w6AgYXZvcnRhbnQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTIwCittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgImNhbcOtIGEgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3OQorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlLCBhY3Jvc3MgbmVzdGVkIHN1Ym1vZHVsZSBib3VuZGFyaWVzIgorbXNnc3RyICJjYW3DrSBhIGwnYXJicmUgZGUgdHJlYmFsbCwgYSB0cmF2w6lzIGRlIGZyb250ZXJlcyBkZSBzdWJtw7JkdWxzIG5pYXRzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4MworbXNnaWQgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiCittc2dzdHIgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG8gbm9uZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODkKK21zZ2lkICJDcmVhdGUgYSBzaGFsbG93IGNsb25lIHRydW5jYXRlZCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXZpc2lvbnMiCittc2dzdHIgIkNyZWEgdW4gY2xvbiBzdXBlcmZpY2lhbCB0cnVuY2F0IGFsIG5vbWJyZSBkZSByZXZpc2lvbnMgZXNwZWNpZmljYXQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODkyCittc2dpZCAicGFyYWxsZWwgam9icyIKK21zZ3N0ciAidGFzcXVlcyBwYXJhbMK3bGVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODk0Cittc2dpZCAid2hldGhlciB0aGUgaW5pdGlhbCBjbG9uZSBzaG91bGQgZm9sbG93IHRoZSBzaGFsbG93IHJlY29tbWVuZGF0aW9uIgorbXNnc3RyICJzaSBlbCBjbG9uYXRnZSBpbmljaWFsIGhhIGRlIHNlZ3VpciBsYSByZWNvbWFuYWNpw7MgZGUgc3VwZXJmaWNpYWxpdGF0IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5NQorbXNnaWQgImRvbid0IHByaW50IGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgIm5vIGltcHJpbWVpeGlzIGVsIHByb2dyw6lzIGRlbCBjbG9uYXRnZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDQKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08Y2Ftw60+XSBbPGNhbcOtPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE3Cittc2dpZCAiYmFkIHZhbHVlIGZvciB1cGRhdGUgcGFyYW1ldGVyIgorbXNnc3RyICJ2YWxvciBpbmNvcnJlY3RlIHBlciBhbCBwYXLDoG1ldHJlIHVwZGF0ZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSAoJXMpIGJyYW5jaCBjb25maWd1cmVkIHRvIGluaGVyaXQgYnJhbmNoIGZyb20gc3VwZXJwcm9qZWN0LCBidXQgIgorInRoZSBzdXBlcnByb2plY3QgaXMgbm90IG9uIGFueSBicmFuY2giCittc2dzdHIgIiIKKyJMYSBicmFuY2EgZGUgc3VibcOyZHVsICglcykgZXN0w6AgY29uZmlndXJhZGEgcGVyIGEgaGVyZXRhciBsYSBicmFuY2EgZGVsICIKKyJzdXBlcnByb2plY3RlLCBwZXLDsiBlbCBzdXBlcnByb2plY3RlIG5vIMOpcyBlbiBjYXAgYnJhbmNhIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjA4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGEgcmVwb3NpdG9yeSBoYW5kbGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9idGVuaXIgZWwgZ2VzdG9yIGRlbCBkaXDDsnNpdCBwZWwgc3VibcOyZHVsIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMjEKK21zZ2lkICJyZWN1cnNlIGludG8gc3VibW9kdWxlcyIKK21zZ3N0ciAiaW5jbG91IHJlY3Vyc2l2YW1lbnQgYWxzIHN1Ym3DsmR1bHMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTI3Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wY2lvbnM+XSBbPGNhbcOtPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTgzCittc2dpZCAiY2hlY2sgaWYgaXQgaXMgc2FmZSB0byB3cml0ZSB0byB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAiY29tcHJvdmEgc2kgw6lzIHNlZ3VyIGVzY3JpdXJlIGFsIGZpdHhlciAuZ2l0bW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxODYKKyMsIGZ1enp5Cittc2dpZCAidW5zZXQgdGhlIGNvbmZpZyBpbiB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAibCdhbGxpc3RhbWVudCBkZWwgLmdpdG1vZHVsZXMgYWN0dWFsaXR6YXQgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE5MQorIywgZnV6enkKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIDxuYW1lPiBbPHZhbHVlPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgbmFtZSBbdmFsb3JdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE5MgorIywgZnV6enkKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIG5hbWUgW3ZhbG9yXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxOTMKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIxMiBnaXQtc3VibW9kdWxlLnNoOjE3MworIywgZnV6enksIHNoLWZvcm1hdAorbXNnaWQgInBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpcyBpbiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisiRmV1IMKrc3RhZ2XCuyBkZWxzIHZvc3RyZXMgY2FudmlzIGEgLmdpdG1vZHVsZXMgbyBmZXUgwqtzdGFzaMK7IGRlbHMgbWF0ZWl4b3MgIgorInBlciBhIHByb2NlZGlyIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI2MiBnaXQuYzo0MzMgZ2l0LmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXNuJ3Qgc3VwcG9ydCAtLXN1cGVyLXByZWZpeCIKK21zZ3N0ciAiJXMgbm8gYWRtZXQgLS1zdXBlci1wcmVmaXgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgc3VibW9kdWxlLS1oZWxwZXIgc3ViY29tbWFuZCIKK21zZ3N0ciAiwqslc8K7IG5vIMOpcyB1biBzdWJvcmRyZSB2w6BsaWQgZGUgc3VibW9kdWxlLS1oZWxwZXIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OAorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgWzxvcGNpb25zPl0gPG5vbT4gWzxyZWZlcsOobmNpYT5dIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjkKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0gPG5hbWU+IgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0gPG5vbT4iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDAKK21zZ2lkICJzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGZvciBub24tc3ltYm9saWMgKGRldGFjaGVkKSByZWZzIgorbXNnc3RyICJvbWV0IGVsIG1pc3NhdGdlIGQnZXJyb3IgZGUgcmVmZXLDqG5jaWVzIG5vIHNpbWLDsmxpcXVlcyAoc2VwYXJhZGVzKSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MQorbXNnaWQgImRlbGV0ZSBzeW1ib2xpYyByZWYiCittc2dzdHIgInN1cHJpbWVpeCBsYSByZWZlcsOobmNpYSBzaW1iw7JsaWNhIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICJlc2N1csOnYSBsYSBzb3J0aWRhIGRlIHJlZmVyw6huY2llcyIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24iCittc2dzdHIgInJhw7MiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIG9mIHRoZSB1cGRhdGUiCittc2dzdHIgInJhw7MgZGUgbCdhY3R1YWxpdHphY2nDsyIKKworIzogYnVpbHRpbi90YWcuYzoyNQorIywgZnV6enkKK21zZ2lkICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl1cbiIKKyJcdFx0PHRhZ25hbWU+IFs8aGVhZD5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxpZC1kZS1jbGF1Pl0gWy1mXSBbLW0gPG1pc3NhdGdlPiB8IC1GIDxmaXR4ZXI+XSA8bm9tLSIKKyJkJ2V0aXF1ZXRhPiBbPGNhcD5dIgorCisjOiBidWlsdGluL3RhZy5jOjI3Cittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLWQgPG5vbS1kJ2V0aXF1ZXRhPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzoyOAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0gWy0tIgorInBvaW50cy1hdCA8b2JqZWN0Pl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCB0YWcgLWwgWy1uWzxub21icmU+XV0gWy0tY29udGFpbnMgPGNvbWlzc2nDsz5dIFstLW5vLWNvbnRhaW5zIDxjb21pc3Npw7M+XSAiCisiWy0tcG9pbnRzLWF0IDxvYmplY3RlPl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbWlzc2nDsz5dXSBbPHBhdHLDsz4uLi5dIgorCisjOiBidWlsdGluL3RhZy5jOjMwCittc2dpZCAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDxub20tZCdldGlxdWV0YT4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAibm8gcydoYSB0cm9iYXQgbCdldGlxdWV0YSDCqyVzwrsuIgorCisjOiBidWlsdGluL3RhZy5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlMnaGEgc3VwcmltaXQgbCdldGlxdWV0YSDCqyVzwrsgKGVyYSAlcylcbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiRXNjcml2aXUgZWwgbWlzc2F0Z2UgZGUgbCdldGlxdWV0YTpcbiIKKyIgICVzXG4iCisiTGVzIGzDrW5pZXMgcXVlIGNvbWVuY2luIGFtYiDCqyVjwrsgcydpZ25vcmFyYW4uXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3UgIgorIndhbnQgdG8uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFc2NyaXZpdSBlbCBtaXNzYXRnZSBkZSBsJ2V0aXF1ZXRhOlxuIgorIiAgJXNcbiIKKyJMZXMgbMOtbmllcyBxdWUgY29tZW5jaW4gYW1iIMKrJWPCuyBlcyByZXRpbmRyYW47IHBvZGV1IGVsaW1pbmFyLWxlcyBwZXIgdsOzcyAiCisibWF0ZWl4IHNpIHZvbGV1LlxuIgorCisjOiBidWlsdGluL3RhZy5jOjE5OAorbXNnaWQgInVuYWJsZSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgc2lnbmFyIGwnZXRpcXVldGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjAwCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGVsIGZpdHhlciBkJ2V0aXF1ZXRhIgorCisjOiBidWlsdGluL3RhZy5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgY3JlYXRlZCBhIG5lc3RlZCB0YWcuIFRoZSBvYmplY3QgcmVmZXJyZWQgdG8gYnkgeW91ciBuZXcgdGFnIGlzXG4iCisiYWxyZWFkeSBhIHRhZy4gSWYgeW91IG1lYW50IHRvIHRhZyB0aGUgb2JqZWN0IHRoYXQgaXQgcG9pbnRzIHRvLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgdGFnIC1mICVzICVzXnt9IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjMyCittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAiZWwgdGlwdXMgZCdvYmplY3RlIMOpcyBpbmNvcnJlY3RlLiIKKworIzogYnVpbHRpbi90YWcuYzoyODQKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgIm5vIGhpIGhhIGNhcCBtaXNzYXRnZSBkJ2V0aXF1ZXRhPyIKKworIzogYnVpbHRpbi90YWcuYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiUydoYSBkZWl4YXQgZWwgbWlzc2F0Z2UgZGUgbCdldGlxdWV0YSBlbiAlc1xuIgorCisjOiBidWlsdGluL3RhZy5jOjQwMgorbXNnaWQgImxpc3QgdGFnIG5hbWVzIgorbXNnc3RyICJsbGlzdGEgZWxzIG5vbXMgZCdldGlxdWV0YSIKKworIzogYnVpbHRpbi90YWcuYzo0MDQKK21zZ2lkICJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiaW1wcmltZWl4IDxuPiBsw61uaWVzIGRlIGNhZGEgbWlzc2F0Z2UgZCdldGlxdWV0YSIKKworIzogYnVpbHRpbi90YWcuYzo0MDYKK21zZ2lkICJkZWxldGUgdGFncyIKK21zZ3N0ciAic3VwcmltZWl4IGxlcyBldGlxdWV0ZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA3Cittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgInZlcmlmaWNhIGxlcyBldGlxdWV0ZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA5Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbnMgZGUgY3JlYWNpw7MgZCdldGlxdWV0ZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDExCittc2dpZCAiYW5ub3RhdGVkIHRhZywgbmVlZHMgYSBtZXNzYWdlIgorbXNnc3RyICJldGlxdWV0YSBhbm90YWRhLCBuZWNlc3NpdGEgdW4gbWlzc2F0Z2UiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDEzCittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgIm1pc3NhdGdlIGQnZXRpcXVldGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE1Cittc2dpZCAiZm9yY2UgZWRpdCBvZiB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiZm9yw6dhIGwnZWRpY2nDsyBkZWwgbWlzc2F0Z2UgZGUgbCdldGlxdWV0YSIKKworIzogYnVpbHRpbi90YWcuYzo0MTYKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICJldGlxdWV0YSBhbm90YWRhIGkgc2lnbmFkYSBwZXIgR1BHIgorCisjOiBidWlsdGluL3RhZy5jOjQxOQorbXNnaWQgInVzZSBhbm90aGVyIGtleSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgInVzYSB1bmEgYWx0cmEgY2xhdSBwZXIgYSBzaWduYXIgbCdldGlxdWV0YSIKKworIzogYnVpbHRpbi90YWcuYzo0MjAKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICJyZWVtcGxhw6dhIGwnZXRpcXVldGEgc2kgZXhpc3RlaXgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIxIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OQorbXNnaWQgImNyZWF0ZSBhIHJlZmxvZyIKK21zZ3N0ciAiY3JlYSB1biByZWdpc3RyZSBkZSByZWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIzCittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9ucyBkZSBsbGlzdGF0IGQnZXRpcXVldGVzIgorCisjOiBidWlsdGluL3RhZy5jOjQyNAorbXNnaWQgInNob3cgdGFnIGxpc3QgaW4gY29sdW1ucyIKK21zZ3N0ciAibW9zdHJhIGxhIGxsaXN0YSBkJ2V0aXF1ZXRlcyBlbiBjb2x1bW5lcyIKKworIzogYnVpbHRpbi90YWcuYzo0MjUgYnVpbHRpbi90YWcuYzo0MjcKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImltcHJpbWVpeCBub23DqXMgbGVzIGV0aXF1ZXRlcyBxdWUgY29udGluZ3VpbiBsYSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI2IGJ1aWx0aW4vdGFnLmM6NDI4Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyBldGlxdWV0ZXMgcXVlIG5vIGNvbnRpbmd1aW4gbGEgY29taXNzacOzIgorCisjOiBidWlsdGluL3RhZy5jOjQyOQorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgImltcHJpbWVpeCBub23DqXMgbGVzIGV0aXF1ZXRlcyBxdWUgcydoYW4gZnVzaW9uYXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDMwCittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgImltcHJpbWVpeCBub23DqXMgbGVzIGV0aXF1ZXRlcyBxdWUgbm8gcydoYW4gZnVzaW9uYXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDM0Cittc2dpZCAicHJpbnQgb25seSB0YWdzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgImltcHJpbWVpeCBub23DqXMgbGVzIGV0aXF1ZXRlcyBkZSBsJ29iamVjdGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDgyCittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIGkgLW4gc8OzbiBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJlcyBwZXJtZXQgbCdvcGNpw7MgLW4gbm9tw6lzIGFtYiBtb2RlIGxsaXN0YSIKKworIzogYnVpbHRpbi90YWcuYzo1MDYKK21zZ2lkICItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJlcyBwZXJtZXQgbCdvcGNpw7MgLS1jb250YWlucyBub23DqXMgYW1iIG1vZGUgbGxpc3RhIgorCisjOiBidWlsdGluL3RhZy5jOjUwOAorbXNnaWQgIi0tbm8tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgImVzIHBlcm1ldCBsJ29wY2nDsyAtLW5vLWNvbnRhaW5zIG5vbcOpcyBhbWIgbW9kZSBsbGlzdGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEwCittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgImVzIHBlcm1ldCAtLXBvaW50cy1hdCBvcHRpb24gbm9tw6lzIGFtYiBtb2RlIGxsaXN0YSIKKworIzogYnVpbHRpbi90YWcuYzo1MTIKK21zZ2lkICItLW1lcmdlZCBhbmQgLS1uby1tZXJnZWQgb3B0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiZXMgcGVybWV0ZW4gbGVzIG9wY2lvbnMgLS1tZXJnZWQgaSAtLW5vLW1lcmdlZCBub23DqXMgYW1iIG1vZGUgbGxpc3RhIgorCisjOiBidWlsdGluL3RhZy5jOjUyMworbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAibm9tw6lzIGVzIHBlcm1ldCB1bmEgb3BjacOzIC1GIG8gLW0uIgorCisjOiBidWlsdGluL3RhZy5jOjU0MgorbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAibWFzc2EgcGFyw6BtZXRyZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICLCqyVzwrsgbm8gw6lzIHVuIG5vbSBkJ2V0aXF1ZXRhIHbDoGxpZC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJsJ2V0aXF1ZXRhIMKrJXPCuyBqYSBleGlzdGVpeCIKKworIzogYnVpbHRpbi90YWcuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICJFdGlxdWV0YSDCqyVzwrsgYWN0dWFsaXR6YWRhIChlcmEgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1MDEKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUydlc3RhbiBkZXNlbXBhcXVldGFudCBlbHMgb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY3JlYXIgZWwgZGlyZWN0b3JpICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY3JlYXIgZWwgZml0eGVyICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGZpbGUgJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gc3VwcmltaXIgZWwgZml0eGVyICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNSBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBzdXByaW1pciBlbCBkaXJlY3RvcmkgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRlc3RpbmcgbXRpbWUgaW4gJyVzJyAiCittc2dzdHIgIlMnZXN0w6AgcHJvdmFudCBtdGltZSBlbiDCqyVzwrsgIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE1NAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBmaWxlIgorbXNnc3RyICIiCisibGEgaW5mb3JtYWNpw7MgZCdzdGF0IGRlIGRpcmVjdG9yaSBubyBjYW52aWEgZGVzcHLDqXMgZCdhZmVnaXIgdW4gZml0eGVyIG5vdSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNjcKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisibGEgaW5mb3JtYWNpw7MgZCdzdGF0IGRlIGRpcmVjdG9yaSBubyBjYW52aWEgZGVzcHLDqXMgZCdhZmVnaXIgdW4gZGlyZWN0b3JpIG5vdSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxODAKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgdXBkYXRpbmcgYSBmaWxlIgorbXNnc3RyICIiCisibGEgaW5mb3JtYWNpw7MgZCdzdGF0IGRlIGRpcmVjdG9yaSBjYW52aWEgZGVzcHLDqXMgZCdhY3R1YWxpdHphciB1biBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTkxCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIGFkZGluZyBhIGZpbGUgaW5zaWRlIHN1YmRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImxhIGluZm9ybWFjacOzIGQnc3RhdCBkZSBkaXJlY3RvcmkgY2FudmlhIGRlc3Byw6lzIGQnYWZlZ2lyIHVuIGZpdHhlciBkaW5zICIKKyJkJ3VuIHN1YmRpcmVjdG9yaSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDIKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGZpbGUiCittc2dzdHIgIiIKKyJsYSBpbmZvcm1hY2nDsyBkJ3N0YXQgZGUgZGlyZWN0b3JpIG5vIGNhbnZpYSBkZXNwcsOpcyBkZSBzdXByaW1pciB1biBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjE1Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJsYSBpbmZvcm1hY2nDsyBkJ3N0YXQgZGUgZGlyZWN0b3JpIG5vIGNhbnZpYSBkZXNwcsOpcyBkZSBzdXByaW1pciB1biBkaXJlY3RvcmkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIyCittc2dpZCAiIE9LIgorbXNnc3RyICIgRCdhY29yZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo1OTEKK21zZ2lkICJnaXQgdXBkYXRlLWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCB1cGRhdGUtaW5kZXggWzxvcGNpb25zPl0gWy0tXSBbPGZpdHhlcj4uLi5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NAorbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAiIgorImNvbnRpbnVhIGwnYWN0dWFsaXR6YWNpw7MgZW5jYXJhIHF1ZSBsJ8OtbmRleCBuZWNlc3NpdGkgdW5hIGFjdHVhbGl0emFjacOzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NworbXNnaWQgInJlZnJlc2g6IGlnbm9yZSBzdWJtb2R1bGVzIgorbXNnc3RyICJhY3R1YWxpdHphOiBpZ25vcmEgZWxzIHN1Ym3DsmR1bHMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgwCittc2dpZCAiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiCittc2dzdHIgIm5vIGlnbm9yaXMgZWxzIGZpdHhlcnMgbm91cyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODIKK21zZ2lkICJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIKK21zZ3N0ciAiZGVpeGEgcXVlIGVscyBmaXR4ZXJzIHJlZW1wbGFjaW4gZWxzIGRpcmVjdG9yaXMgaSB2aWNldmVyc2EiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg0Cittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAidGluZ3VlcyBlbiBjb21wdGUgZWxzIGZpdHhlcnMgYWJzZW50cyBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg2Cittc2dpZCAicmVmcmVzaCBldmVuIGlmIGluZGV4IGNvbnRhaW5zIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgImFjdHVhbGl0emEgZW5jYXJhIHF1ZSBsJ8OtbmRleCBjb250aW5ndWkgZW50cmFkZXMgbm8gZnVzaW9uYWRlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODkKK21zZ2lkICJyZWZyZXNoIHN0YXQgaW5mb3JtYXRpb24iCittc2dzdHIgImFjdHVhbGl0emEgbGEgaW5mb3JtYWNpw7MgZCdlc3RhZMOtc3RpcXVlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTMKK21zZ2lkICJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciCittc2dzdHIgImNvbSAtLXJlZnJlc2gsIHBlcsOyIGlnbm9yYSBlbCBwYXLDoG1ldHJlIGFzc3VtZS11bmNoYW5nZWQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk3Cittc2dpZCAiPG1vZGU+LDxvYmplY3Q+LDxwYXRoPiIKK21zZ3N0ciAiPG1vZGU+LDxvYmplY3RlPiw8Y2Ftw60+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiYWZlZ2VpeCBsJ2VudHJhZGEgZXNwZWNpZmljYWRhIGEgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwOAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAibWFyY2EgZWxzIGZpdHhlcnMgY29tIGEgXCJubyBjYW52aWFudFwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTEKK21zZ2lkICJjbGVhciBhc3N1bWVkLXVuY2hhbmdlZCBiaXQiCittc2dzdHIgIm5ldGVqYSBlbCBiaXQgYXNzdW1lZC11bmNoYW5nZWQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgIm1hcmNhIGVscyBmaXR4ZXJzIGNvbSBhIFwibm9tw6lzIMOtbmRleFwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTcKK21zZ2lkICJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIKK21zZ3N0ciAibmV0ZWphIGVsIGJpdCBza2lwLXdvcmt0cmVlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjAKK21zZ2lkICJkbyBub3QgdG91Y2ggaW5kZXgtb25seSBlbnRyaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMgorbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisibm9tw6lzIGFmZWdlaXggYSBsJ8OtbmRleDsgbm8gYWZlZ2VpeGlzIGVsIGNvbnRpbmd1dCBhIGxhIGJhc2UgZGUgZGFkZXMgIgorImQnb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyNAorbXNnaWQgInJlbW92ZSBuYW1lZCBwYXRocyBldmVuIGlmIHByZXNlbnQgaW4gd29ya3RyZWUiCittc2dzdHIgIiIKKyJlbGltaW5hIGVscyBjYW1pbnMgYW5vbWVuYXRzIGVuY2FyYSBxdWUgZXN0aWd1aW4gcHJlc2VudHMgZW4gbCdhcmJyZSBkZSAiCisidHJlYmFsbCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI2Cittc2dpZCAid2l0aCAtLXN0ZGluOiBpbnB1dCBsaW5lcyBhcmUgdGVybWluYXRlZCBieSBudWxsIGJ5dGVzIgorbXNnc3RyICJhbWIgLS1zdGRpbjogbGVzIGzDrW5pZXMgZCdlbnRyYWRhIGFjYWJlbiBhbWIgb2N0ZXRzIG51bHMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyOAorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImxsZWdlaXggbGEgbGxpc3RhIGRlIGNhbWlucyBhIGFjdHVhbGl0emFyIGRlcyBkZSBsJ2VudHJhZGEgZXN0w6BuZGFyZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDMyCittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgImFmZWdlaXggbGVzIGVudHJhZGVzIGRlIGwnZW50cmFkYSBlc3TDoG5kYXJkIGEgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzNgorbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAicmVlbXBsZW5hIGxlcyDCq3N0YWdlwrsgIzIgaSAjMyBwZXIgYWxzIGNhbWlucyBsbGlzdGF0cyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQwCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgIm5vbcOpcyBhY3R1YWxpdHphIGxlcyBlbnRyYWRlcyBxdWUgZGlmZXJlaXhpbiBkZSBIRUFEIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDQKK21zZ2lkICJpZ25vcmUgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICJpZ25vcmEgZWxzIGZpdHhlcnMgYWJzZW50cyBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NworbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiaW5mb3JtYSBkZSBsZXMgYWNjaW9ucyBlbiBsYSBzb3J0aWRhIGVzdMOgbmRhcmQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0OQorbXNnaWQgIihmb3IgcG9yY2VsYWlucykgZm9yZ2V0IHNhdmVkIHVucmVzb2x2ZWQgY29uZmxpY3RzIgorbXNnc3RyICIocGVyIGEgcG9yY2VsbGFuZXMpIG9ibGlkYSd0IGRlbHMgY29uZmxpY3RlcyBubyByZXNvbHRzIG5pIGRlc2F0cyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDUzCittc2dpZCAid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiCittc2dzdHIgImVzY3JpdSBsJ8OtbmRleCBlbiBhcXVlc3QgZm9ybWF0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTUKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiaGFiaWxpdGEgbyBpbmhhYmlsaXRhIGwnw61uZGV4IGRpdmlkaXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1NworbXNnaWQgImVuYWJsZS9kaXNhYmxlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiaGFiaWxpdGEvaW5oYWJpbGl0YSBsYSBtZW3DsnJpYSBjYXUgbm8gc2VndWlkYSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU5Cittc2dpZCAidGVzdCBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgInByb3ZhIHNpIGVsIHNpc3RlbWEgZGUgZml0eGVycyBhZG1ldCBsYSBtZW3DsnJpYSBjYXUgbm8gc2VndWlkYSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDYxCittc2dpZCAiZW5hYmxlIHVudHJhY2tlZCBjYWNoZSB3aXRob3V0IHRlc3RpbmcgdGhlIGZpbGVzeXN0ZW0iCittc2dzdHIgImhhYmlsaXRhIGxhIG1lbcOycmlhIGNhdSBubyBzZWd1aWRhIHNlbnNlIHByb3ZhciBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2MworbXNnaWQgIndyaXRlIG91dCB0aGUgaW5kZXggZXZlbiBpZiBpcyBub3QgZmxhZ2dlZCBhcyBjaGFuZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIGZpbGUgc3lzdGVtIG1vbml0b3IiCittc2dzdHIgImhhYmlsaXRhIG8gaW5oYWJpbGl0YSBlbCBtb25pdG9yIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NworbXNnaWQgIm1hcmsgZmlsZXMgYXMgZnNtb25pdG9yIHZhbGlkIgorbXNnc3RyICJtYXJjYSBlbHMgZml0eGVycyBjb20gYSB2w6BsaWRzIHBlbCBmc21vbml0b3IiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA3MAorbXNnaWQgImNsZWFyIGZzbW9uaXRvciB2YWxpZCBiaXQiCittc2dzdHIgIm5ldGVqYSBlbCBiaXQgZGUgdmFsaWRlc2EgZGVsIGZzbW9uaXRvciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTczCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZW5hYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IGVzdMOgIGVzdGFibGVydCBhIGZhbHM7IGVsaW1pbmV1LWxvIG8gY2Fudmlhci1sbywgc2kgcmVhbG1lbnQgIgorInZvbGV1IGhhYmlsaXRhciBsJ8OtbmRleCBkaXZpZGl0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExODIKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggZXN0w6AgZXN0YWJsZXJ0IGEgY2VydDsgZWxpbWluZXUtbG8gbyBjYW52aWV1LWxvLCBzaSByZWFsbWVudCAiCisidm9sZXUgaW5oYWJpbGl0YXIgbCfDrW5kZXggZGl2aWRpdCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk0Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZGlzYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBlc3TDoCBlc3RhYmxlcnQgYSBjZXJ0OyBlbGltaW5ldS1sbyBvIGNhbnZpZXUtbG8sIHNpICIKKyJyZWFsbWVudCB2b2xldSBpbmhhYmlsaXRhciBlbCBjYXUgbm8gc2VndWl0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTgKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIkxhIG1lbcOycmlhIGNhdSBubyBzZWd1aWRhIGVzdMOgIGluaGFiaWxpdGFkYSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjA2Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGVuYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBlc3TDoCBlc3RhYmxlcnQgYSBmYWxzOyBlbGltaW5ldS1sbyBvIGNhbnZpYXItbG8sIHNpICIKKyJyZWFsbWVudCB2b2xldSBoYWJpbGl0YXIgZWwgY2F1IG5vIHNlZ3VpdCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICJMYSBtZW3DsnJpYSBjYXUgbm8gc2VndWlkYSBlc3TDoCBoYWJpbGl0YWRhIHBlciBhIMKrJXPCuyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjE4Cittc2dpZCAiY29yZS5mc21vbml0b3IgaXMgdW5zZXQ7IHNldCBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZW5hYmxlIGZzbW9uaXRvciIKK21zZ3N0ciAiIgorImNvcmUuZnNtb25pdG9yIGVzdMOgIGVzdGFibGVydCBhIGZhbHM7IGVzdGFibGl1LWxvIGEgY2VydCBzaSByZWFsbWVudCB2b2xldSAiCisiaGFiaWxpdGFyIGZzbW9uaXRvciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjIyCittc2dpZCAiZnNtb25pdG9yIGVuYWJsZWQiCittc2dzdHIgImZzbW9uaXRvciBoYWJpbGl0YXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyNQorbXNnaWQgIiIKKyJjb3JlLmZzbW9uaXRvciBpcyBzZXQ7IHJlbW92ZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKyJjb3JlLmZzbW9uaXRvciBlc3TDoCBlc3RhYmxlcnQgYSBjZXJ0OyBlbGltaW5ldS1sbyBzaSByZWFsbWVudCB2b2xldSAiCisiaW5oYWJpbGl0YXIgZnNtb25pdG9yIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjkKK21zZ2lkICJmc21vbml0b3IgZGlzYWJsZWQiCittc2dzdHIgImZzbW9uaXRvciBpbmhhYmlsaXRhdCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8b3BjaW9ucz5dIC1kIDxub20tZGUtcmVmZXLDqG5jaWE+IFs8dmFsb3ItYW50aWM+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICIiCisiZ2l0IHVwZGF0ZS1yZWYgWzxvcGNpb25zPl0gICAgPG5vbS1kZS1yZWZlcsOobmNpYT4gPHZhbG9yLW5vdT4gWzx2YWxvci1hbnRpYz5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMgorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxvcGNpb25zPl0gLS1zdGRpbiBbLXpdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjQKK21zZ2lkICJkZWxldGUgdGhlIHJlZmVyZW5jZSIKK21zZ3N0ciAic3VwcmltZWl4IGxhIHJlZmVyw6huY2lhIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjYKK21zZ2lkICJ1cGRhdGUgPHJlZm5hbWU+IG5vdCB0aGUgb25lIGl0IHBvaW50cyB0byIKK21zZ3N0ciAiYWN0dWFsaXR6YSA8bm9tIGRlIHJlZmVyw6huY2lhPiwgbm8gbGEgcXVlIGFwdW50aSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIKK21zZ3N0ciAic3RkaW4gdMOpIHBhcsOgbWV0cmVzIGFjYWJhdHMgYW1iIE5VTCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgImxsZWdlaXggbGVzIGFjdHVhbGl0emFjaW9ucyBkZXMgZGUgc3RkaW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6NworbXNnaWQgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorbXNnc3RyICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNQorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgImFjdHVhbGl0emEgZWxzIGZpdHhlcnMgZCdpbmZvcm1hY2nDsyBkZXMgZGUgemVybyIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjExCittc2dpZCAiZ2l0IHVwbG9hZC1wYWNrIFs8b3B0aW9ucz5dIDxkaXI+IgorbXNnc3RyICJnaXQgdXBsb2FkLXBhY2sgWzxvcGNpb25zPl0gPGRpcmVjdG9yaT4iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyMyB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTcKK21zZ2lkICJxdWl0IGFmdGVyIGEgc2luZ2xlIHJlcXVlc3QvcmVzcG9uc2UgZXhjaGFuZ2UiCittc2dzdHIgInN1cnQgZGVzcHLDqXMgZCd1biBzb2wgaW50ZXJjYW52aSBkZSBzb2zCt2xpY2l0dWQvcmVzcG9zdGEiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyNQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCIKK21zZ3N0ciAic3VydCBpbW1lZGlhdGFtZW50IGRlc3Byw6lzIGRlIGwnYW51bmNpIGluaWNpYWwgZGUgcmVmZXLDqG5jaWEiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyNworbXNnaWQgImRvIG5vdCB0cnkgPGRpcmVjdG9yeT4vLmdpdC8gaWYgPGRpcmVjdG9yeT4gaXMgbm8gR2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIm5vIGludGVudGlzIDxkaXJlY3Rvcmk+Ly5naXQvIHNpIDxkaXJlY3Rvcmk+IG5vIMOpcyBjYXAgZGlyZWN0b3JpIGRlbCBHaXQiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyOQorbXNnaWQgImludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5IgorbXNnc3RyICJpbnRlcnJvbXAgbGEgdHJhbnNmZXLDqG5jaWEgZGVzcHLDqXMgZGUgPG4+IHNlZ29ucyBkJ2luYWN0aXZpdGF0IgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxOQorbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbWlzc2nDsz4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY4Cittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICJpbXByaW1laXggZWxzIGNvbnRpbmd1dHMgZGUgbGEgY29taXNzacOzIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo2OSBidWlsdGluL3ZlcmlmeS10YWcuYzozNworbXNnaWQgInByaW50IHJhdyBncGcgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAiaW1wcmltZWl4IGxhIHNvcnRpZGEgY3J1YSBkZSBsJ2VzdGF0IGdwZyIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU1Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYXF1ZXQ+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjUKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICJkZXRhbGxhdCIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY3Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgIm1vc3RyYSBub23DqXMgZXN0YWTDrXN0aXF1ZXMiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjE4Cittc2dpZCAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWc+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD08Zm9ybWF0Pl0gPGV0aXF1ZXRhPi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MzYKK21zZ2lkICJwcmludCB0YWcgY29udGVudHMiCittc2dzdHIgImltcHJpbWVpeCBlbHMgY29udGluZ3V0cyBkZSBsJ2V0aXF1ZXRhIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTcKK21zZ2lkICJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxwYXRoPiBbPGNvbW1pdC1pc2g+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wY2lvbnM+XSA8Y2Ftw60+IFs8Y29tbWl0LWlzaD4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOAorbXNnaWQgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgbGlzdCBbPG9wY2lvbnM+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE5Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxvcHRpb25zPl0gPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbG9jayBbPG9wY2lvbnM+XSA8Y2Ftw60+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjAKK21zZ2lkICJnaXQgd29ya3RyZWUgbW92ZSA8d29ya3RyZWU+IDxuZXctcGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBtb3ZlIDxhcmJyZSBkZSB0cmViYWxsPiA8Y2Ftw60tbm91PiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIxCittc2dpZCAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcGNpb25zPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMgorbXNnaWQgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHRpb25zPl0gPHdvcmt0cmVlPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxvcGNpb25zPl0gPGFyYnJlIGRlIHRyZWJhbGw+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjMKK21zZ2lkICJnaXQgd29ya3RyZWUgdW5sb2NrIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHVubG9jayA8Y2Ftw60+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjAgYnVpbHRpbi93b3JrdHJlZS5jOjg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gc3VwcmltaXIgwqslc8K7IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBub3QgYSB2YWxpZCBkaXJlY3RvcnkiCittc2dzdHIgIkVsaW1pbmFjacOzIGRlIHdvcmt0cmVlcy8lczogbm8gw6lzIHVuIGRpcmVjdG9yaSB2w6BsaWQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJFbGltaW5hY2nDsyBkZSB3b3JrdHJlZXMvJXM6IGVsIGZpdHhlciBnaXRkaXIgbm8gZXhpc3RlaXgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MCBidWlsdGluL3dvcmt0cmVlLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICJFbGltaW5hY2nDsyBkZSB3b3JrdHJlZXMvJXM6IG5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIGZpdHhlciBnaXRkaXIgKCVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBzaG9ydCByZWFkIChleHBlY3RlZCAlPFBSSXVNQVg+IGJ5dGVzLCByZWFkICIKKyIlPFBSSXVNQVg+KSIKK21zZ3N0ciAiIgorIlMnZXN0YW4gc3VwcmltaW50IGVscyBhcmJyZXMgZGUgdHJlYmFsbC8lczogbGVjdHVyYSBjdXJ0YSAocydlc3BlcmF2ZW4gIgorIiU8UFJJdU1BWD4gYnl0ZXMsIGxsZWdpdHMgJTxQUkl1TUFYPikiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICJFbGltaW5hY2nDsyBkZSB3b3JrdHJlZXMvJXM6IGZpdHhlciBnaXRkaXIgbm8gdsOgbGlkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgcG9pbnRzIHRvIG5vbi1leGlzdGVudCBsb2NhdGlvbiIKK21zZ3N0ciAiIgorIkVsaW1pbmFjacOzIGRlIHdvcmt0cmVlcy8lczogZWwgZml0eGVyIGdpdGRpciBlcyByZWZlcmVpeCBhIHVuYSB1YmljYWNpw7Mgbm8gIgorImV4aXN0ZW50IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY1Cittc2dpZCAicmVwb3J0IHBydW5lZCB3b3JraW5nIHRyZWVzIgorbXNnc3RyICJpbmZvcm1hIGRlbHMgYXJicmVzIGRlIHRyZWJhbGwgcG9kYXRzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY3Cittc2dpZCAiZXhwaXJlIHdvcmtpbmcgdHJlZXMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgImZlcyBjYWR1Y2FyIGVscyBhcmJyZXMgZGUgdHJlYmFsbCBtw6lzIHZlbGxzIHF1ZSA8aG9yYT4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiwqslc8K7IGphIGV4aXN0ZWl4IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZS1hZGQgd29ya3RyZWUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCB0b3JuYXIgYSBhZmVnaXIgYSBsJ2FyYnJlIGRlIHRyZWJhbGwgwqslc8K7IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgbG9ja2VkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mIC1mJyB0byBvdmVycmlkZSwgb3IgJ3VubG9jaycgYW5kICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGFscmVhZHkgcmVnaXN0ZXJlZCB3b3JrdHJlZTtcbiIKKyJ1c2UgJ2FkZCAtZicgdG8gb3ZlcnJpZGUsIG9yICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIGRpcmVjdG9yaSBkZSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzkgYnVpbHRpbi93b3JrdHJlZS5jOjQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKG5ldyBicmFuY2ggJyVzJykiCittc2dzdHIgIlMnZXN0w6AgcHJlcGFyYW50IGwnYXJicmUgZGUgdHJlYmFsbCAoYnJhbmNhIG5vdmEgwqslc8K7KSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKHJlc2V0dGluZyBicmFuY2ggJyVzJzsgd2FzIGF0ICVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoY2hlY2tpbmcgb3V0ICclcycpIgorbXNnc3RyICJTJ2VzdMOgIHByZXBhcmFudCBsJ2FyYnJlIGRlIHRyZWJhbGwgKHMnZXN0w6AgYWdhZmFudCDCqyVzwrspIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoZGV0YWNoZWQgSEVBRCAlcykiCittc2dzdHIgIlMnZXN0w6AgcHJlcGFyYW50IGwnYXJicmUgZGUgdHJlYmFsbCAoSEVBRCAlcyBzZXBhcmF0KSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5NworbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGV2ZW4gaWYgYWxyZWFkeSBjaGVja2VkIG91dCBpbiBvdGhlciB3b3JrdHJlZSIKK21zZ3N0ciAiYWdhZmEgPGJyYW5jYT4gZW5jYXJhIHF1ZSBzaWd1aSBhZ2FmYWRhIGVuIGFsdHJlIGFyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDAKK21zZ2lkICJjcmVhdGUgYSBuZXcgYnJhbmNoIgorbXNnc3RyICJjcmVhIHVuYSBicmFuY2Egbm92YSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwMgorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAiY3JlYSBvIHJlc3RhYmxlaXggdW5hIGJyYW5jYSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNAorbXNnaWQgInBvcHVsYXRlIHRoZSBuZXcgd29ya2luZyB0cmVlIgorbXNnc3RyICJlbXBsZW5hIGwnYXJicmUgZGUgdHJlYmFsbCBub3UiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDUKK21zZ2lkICJrZWVwIHRoZSBuZXcgd29ya2luZyB0cmVlIGxvY2tlZCIKK21zZ3N0ciAibWFudMOpbiBsJ2FyYnJlIGRlIHRyZWJhbGwgbm91IGJsb3F1ZWphdCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwOAorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LWJyYW5jaCgxKSkiCittc2dzdHIgImNvbmZpZ3VyYSBlbCBtb2RlIGRlIHNlZ3VpbWVudCAodmVnZXUgZ2l0LWJyYW5jaCgxKSkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MTEKK21zZ2lkICJ0cnkgdG8gbWF0Y2ggdGhlIG5ldyBicmFuY2ggbmFtZSB3aXRoIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorInByb3ZhIGRlIGZlciBjb2luY2lkaXIgZWwgbm9tIGRlIGxhIGJyYW5jYSBub3ZhIGFtYiB1bmEgYnJhbmNhIGFtYiBzZWd1aW1lbnQgIgorInJlbW90IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTE5Cittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWIsIC1CIGkgLS1kZXRhY2ggc8OzbiBtw7p0dWFtZW50IGV4Y2xvZW50cyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjU4MAorbXNnaWQgIi0tW25vLV10cmFjayBjYW4gb25seSBiZSB1c2VkIGlmIGEgbmV3IGJyYW5jaCBpcyBjcmVhdGVkIgorbXNnc3RyICItLVtuby1ddHJhY2sgbm9tw6lzIGVzIHBvdCB1c2FyIHNpIGVzIGNyZWEgdW5hIGJyYW5jYSBub3ZhIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjgwCittc2dpZCAicmVhc29uIGZvciBsb2NraW5nIgorbXNnc3RyICJyYcOzIHBlciBibG9xdWVqYXIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTIgYnVpbHRpbi93b3JrdHJlZS5jOjcyNSBidWlsdGluL3dvcmt0cmVlLmM6Nzk5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIgorbXNnc3RyICLCqyVzwrsgbm8gw6lzIHVuIGFyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTQgYnVpbHRpbi93b3JrdHJlZS5jOjcyNworbXNnaWQgIlRoZSBtYWluIHdvcmtpbmcgdHJlZSBjYW5ub3QgYmUgbG9ja2VkIG9yIHVubG9ja2VkIgorbXNnc3RyICJObyBlcyBwb3QgYmxvcXVlamFyIG5pIGRlc2Jsb3F1ZWphciBsJ2FyYnJlIGRlIHRyZWJhbGwgcHJpbmNpcGFsIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQsIHJlYXNvbjogJXMiCittc2dzdHIgIsKrJXPCuyBqYSBlc3TDoCBibG9xdWVqYXQsIHJhw7M6IMKrJXPCuyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkIgorbXNnc3RyICLCqyVzwrsgamEgZXN0w6AgYmxvcXVlamF0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiwqslc8K7IG5vIGVzdMOgIGJsb3F1ZWphdCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc3MAorbXNnaWQgIndvcmtpbmcgdHJlZXMgY29udGFpbmluZyBzdWJtb2R1bGVzIGNhbm5vdCBiZSBtb3ZlZCBvciByZW1vdmVkIgorbXNnc3RyICJlbHMgYXJicmVzIGRlIHRyZWJhbGwgcXVlIGNvbnRlbmVuIHN1Ym3DsmR1bHMgbm8gZXMgcG9kZW4gbW91cmUgbyBzdXByaW1pciIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc3OAorbXNnaWQgImZvcmNlIG1vdmUgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgImZvcsOnYSBlbCBtb3ZpbWVudCBlbmNhcmEgcXVlIGwnYXJicmUgZGUgdHJlYmFsbCBlc3RpZ3VpIGJydXQgbyBibG9xdWVqYXQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MDEgYnVpbHRpbi93b3JrdHJlZS5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGEgbWFpbiB3b3JraW5nIHRyZWUiCittc2dzdHIgIsKrJXPCuyDDqXMgdW4gYXJicmUgZGUgdHJlYmFsbCBwcmluY2lwYWwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpZ3VyZSBvdXQgZGVzdGluYXRpb24gbmFtZSBmcm9tICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZGVkdWlyIGVsIG5vbSBkZSBkZXN0w60gZGVzIGRlIMKrJXPCuyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YXJnZXQgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiZWwgZGVzdMOtIMKrJXPCuyBqYSBleGlzdGVpeCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgyMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIk5vIGVzIHBvZGVuIGVsaW1pbmFyIGVscyBjYW52aXMgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODIyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWU7XG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIk5vIGVzIHBvZGVuIGVsaW1pbmFyIGVscyBjYW52aXMgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICJsYSB2YWxpZGFjacOzIGhhIGZhbGxhdCwgbm8gZXMgcG90IG1vdXJlIGwnYXJicmUgZGUgdHJlYmFsbDogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG1vdmUgJyVzJyB0byAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIG1vdXJlIMKrJXPCuyBhIMKrJXPCuyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyIMKrZ2l0IHN0YXR1c8K7IGEgwqslc8K7IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY29udGFpbnMgbW9kaWZpZWQgb3IgdW50cmFja2VkIGZpbGVzLCB1c2UgLS1mb3JjZSB0byBkZWxldGUgaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyIMKrZ2l0IHN0YXR1c8K7IGEgwqslc8K7LCBjb2RpICVkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTEwCittc2dpZCAiZm9yY2UgcmVtb3ZhbCBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiZm9yw6dhIGxhIHN1cHJlc3Npw7MgZW5jYXJhIHF1ZSBsJ2FyYnJlIGRlIHRyZWJhbGwgZXN0aWd1aSBicnV0IG8gYmxvcXVlamF0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIk5vIGVzIHBvZGVuIGVsaW1pbmFyIGVscyBjYW52aXMgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTM1CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICJObyBlcyBwb2RlbiBlbGltaW5hciBlbHMgY2FudmlzIGRlIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IHJlbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjE1Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOAorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiPHByZWZpeD4vIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOQorbXNnaWQgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIKK21zZ3N0ciAiZXNjcml1IGwnb2JqZWN0ZSBkJ2FyYnJlIHBlciBhIHVuIHN1YmRpcmVjdG9yaSA8cHJlZml4PiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MzEKK21zZ2lkICJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIgorbXNnc3RyICJub23DqXMgw7p0aWwgcGVyIGEgbGEgZGVwdXJhY2nDsyIKKworIzogZmFzdC1pbXBvcnQuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICdtYXJrJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgIlMnZXNwZXJhdmEgbCdvcmRyZSDCq21hcmvCuywgcydoYSByZWJ1dCAlcyIKKworIzogZmFzdC1pbXBvcnQuYzozMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICd0bycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICJTJ2VzcGVyYXZhIGwnb3JkcmUgwqt0b8K7LCBzJ2hhIHJlYnV0IMKrJXPCuyIKKworIzogZmFzdC1pbXBvcnQuYzozMjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZlYXR1cmUgJyVzJyBmb3JiaWRkZW4gaW4gaW5wdXQgd2l0aG91dCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwZXJtaXNzaW9ucyBvbiB5b3VyIHNvY2tldCBkaXJlY3RvcnkgYXJlIHRvbyBsb29zZTsgb3RoZXJcbiIKKyJ1c2VycyBtYXkgYmUgYWJsZSB0byByZWFkIHlvdXIgY2FjaGVkIGNyZWRlbnRpYWxzLiBDb25zaWRlciBydW5uaW5nOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKK21zZ3N0ciAiIgorIkVscyBwZXJtaXNvcyBlbiBlbCB2b3N0cmUgZGlyZWN0b3JpIGRlIHPDsmNvbCBzw7NuIG1hc3NhIGxpYmVyYWxzO1xuIgorInBvdCBzZXIgcXVlIGFsdHJlcyB1c3VhcmlzIHBvZGVuIGxsZWdpciBsZXMgdm9zdHJlcyBjcmVkZW5jaWFscy5cbiIKKyJDb25zaWRlcmV1IGV4ZWN1dGFyOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjcyCittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAiaW1wcmltZWl4IGVscyBtaXNzYXRnZXMgZGUgZGVwdXJhY2nDsyBhIHN0ZGVyciIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgbm90IG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgImxhIGNvbWlzc2nDsyAlcyBubyBlc3TDoCBtYXJjYWRhIGNvbSBhYmFzdGFibGUiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNjIKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgIm1hc3NlcyBjb21pc3Npb24gbWFyY2FkZXMgY29tIGFiYXN0YWJsZSIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjcKK21zZ2lkICJ0ZXN0LXRvb2wgc2VydmUtdjIgWzxvcHRpb25zPl0iCittc2dzdHIgInRlc3QtdG9vbCBzZXJ2ZS12MiBbPG9wY2lvbnM+XSIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE5Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBhZHZlcnRpc2luZyBjYXBhYmlsaXRpZXMiCittc2dzdHIgInN1cnQgaW1tZWRpYXRhbWVudCBkZXNwcsOpcyBkJ2FudW5jaWFyIGxlcyBmdW5jaW9uYWxpdGF0cyIKKworIzogZ2l0LmM6MjcKK21zZ2lkICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8cGF0aD5dIFstYyA8bmFtZT49PHZhbHVlPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PHBhdGg+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PHBhdGg+XSBbLS13b3JrLXRyZWU9PHBhdGg+XSBbLS1uYW1lc3BhY2U9PG5hbWU+XVxuIgorIiAgICAgICAgICAgPGNvbW1hbmQ+IFs8YXJncz5dIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjM0Cittc2dpZCAiIgorIidnaXQgaGVscCAtYScgYW5kICdnaXQgaGVscCAtZycgbGlzdCBhdmFpbGFibGUgc3ViY29tbWFuZHMgYW5kIHNvbWVcbiIKKyJjb25jZXB0IGd1aWRlcy4gU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIG9yICdnaXQgaGVscCA8Y29uY2VwdD4nXG4iCisidG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQgb3IgY29uY2VwdC5cbiIKKyJTZWUgJ2dpdCBoZWxwIGdpdCcgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiwqtnaXQgaGVscCAtYcK7IGkgwqtnaXQgaGVscCAtZ8K7IGxsaXN0ZW4gc3Vib3JkcmVzIGRpc3BvbmlibGVzIGlcbiIKKyJhbGd1bmVzIGd1aWVzIGRlIGNvbmNlcHRlLiBWZWdldSDCq2dpdCBoZWxwIDxvcmRyZT7CuyBvXG4iCisiwqtnaXQgaGVscCA8Y29uY2VwdGU+wrsgcGVyIGEgbGxlZ2lyIHNvYnJlIHVuIHN1Ym9yZHJlIG8gY29uY2VwdGUgZXNwZWPDrWZpYy5cbiIKKyJWZWdldSDCq2dpdCBoZWxwIGdpdMK7IHBlciBhIHVuYSB2aXNpw7MgZ2VuZXJhbCBkZWwgc2lzdGVtYS4iCisKKyM6IGdpdC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tZ2l0LWRpclxuIgorbXNnc3RyICJubyBzJ2hhIGVzcGVjaWZpY2F0IHVuIGRpcmVjdG9yaSBwZXIgLS1naXQtZGlyXG4iCisKKyM6IGdpdC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlXG4iCittc2dzdHIgIm5vIHMnaGEgZXNwZWNpZmljYXQgdW4gbm9tIGQnZXNwYWkgcGVyIC0tbmFtZXNwYWNlXG4iCisKKyM6IGdpdC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgIm5vIHMnaGEgZXNwZWNpZmljYXQgdW4gZGlyZWN0b3JpIHBlciAtLXdvcmstdHJlZVxuIgorCisjOiBnaXQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJlZml4IGdpdmVuIGZvciAtLXN1cGVyLXByZWZpeFxuIgorbXNnc3RyICJubyBzJ2hhIGVzcGVjaWZpY2F0IGNhcCBwcmVmaXggcGVyIGEgLS1zdXBlci1wcmVmaXhcbiIKKworIzogZ2l0LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi1jIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIHN0cmluZ1xuIgorbXNnc3RyICItYyBlc3BlcmEgdW5hIGNhZGVuYSBkZSBjb25maWd1cmFjacOzXG4iCisKKyM6IGdpdC5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC1DXG4iCittc2dzdHIgIm5vIHMnaGEgZXNwZWNpZmljYXQgdW4gZGlyZWN0b3JpIHBlciAtQ1xuIgorCisjOiBnaXQuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgIm9wY2nDsyBkZXNjb25lZ3VkYTogJXNcbiIKKworIzogZ2l0LmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYWxpYXMgJyVzJyBjaGFuZ2VzIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiIKKyJZb3UgY2FuIHVzZSAnIWdpdCcgaW4gdGhlIGFsaWFzIHRvIGRvIHRoaXMiCittc2dzdHIgIiIKKworIzogZ2l0LmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGFsaWFzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGFsaWFzOiAlcyIKK21zZ3N0ciAiw6BsaWVzIHJlY3Vyc2l1OiAlcyIKKworIzogZ2l0LmM6NDU5Cittc2dpZCAid3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgImZhbGxhZGEgZCdlc2NyaXB0dXJhIGVuIGxhIHNvcnRpZGEgZXN0w6BuZGFyZCIKKworIzogZ2l0LmM6NDYxCittc2dpZCAidW5rbm93biB3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiZmFsbGFkYSBkJ2VzY3JpcHR1cmEgZGVzY29uZWd1ZGEgZW4gbGEgc29ydGlkYSBlc3TDoG5kYXJkIgorCisjOiBnaXQuYzo0NjMKK21zZ2lkICJjbG9zZSBmYWlsZWQgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJoYSBmYWxsYXQgZWwgdGFuY2FtZW50IGVuIGxhIHNvcnRpZGEgZXN0w6BuZGFyZCIKKworIzogZ2l0LmM6NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIGxvb3AgZGV0ZWN0ZWQ6IGV4cGFuc2lvbiBvZiAnJXMnIGRvZXMgbm90IHRlcm1pbmF0ZTolcyIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo4NDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgJXMgYXMgYSBidWlsdGluIgorbXNnc3RyICJubyBlcyBwb3QgdXNhciAgJXMgY29tIGEgZml0eGVyIGQnZXhjbHVzacOzIgorCisjOiBnaXQuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVzYWdlOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiw7pzOiAlc1xuIgorIlxuIgorCisjOiBnaXQuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwYW5zaW9uIG9mIGFsaWFzICclcycgZmFpbGVkOyAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gY29tbWFuZCAnJXMnOiAlc1xuIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGV4ZWN1dGFyIGwnb3JkcmUgwqslc8K7OiAlc1xuIgorCisjOiBodHRwLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5lZ2F0aXZlIHZhbHVlIGZvciBodHRwLnBvc3RidWZmZXI7IGRlZmF1bHRpbmcgdG8gJWQiCittc2dzdHIgInZhbG9yIG5lZ2F0aXUgcGVyIGh0dHAucG9zdGJ1ZmZlcjsgdXRpbGl0emFudCBlbCB2YWxvciAlZCIKKworIzogaHR0cC5jOjM5OQorbXNnaWQgIkRlbGVnYXRpb24gY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMjIuMCIKK21zZ3N0ciAiTm8gcydhZG1ldCBlbCBjb250cm9sIGRlIGRlbGVnYWNpw7MgYW1iIGVsIGNVUkwgPCA3LjIyLjAiCisKKyM6IGh0dHAuYzo0MDgKK21zZ2lkICJQdWJsaWMga2V5IHBpbm5pbmcgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIk5vIHMnYWRtZXQgbCdlbmdhbnggZGUgY2xhdSBww7pibGljYSBhbWIgY1VSTCA8IDcuNDQuMCIKKworIzogaHR0cC5jOjg3NgorIywgZnV6enkKK21zZ2lkICJDVVJMU1NMT1BUX05PX1JFVk9LRSBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiTm8gcydhZG1ldCBsJ2VuZ2FueCBkZSBjbGF1IHDDumJsaWNhIGFtYiBjVVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6OTQ5CisjLCBmdXp6eQorbXNnaWQgIlByb3RvY29sIHJlc3RyaWN0aW9ucyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMTkuNCIKK21zZ3N0ciAiTm8gcydhZG1ldCBsJ2VuZ2FueCBkZSBjbGF1IHDDumJsaWNhIGFtYiBjVVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbnN1cHBvcnRlZCBTU0wgYmFja2VuZCAnJXMnLiBTdXBwb3J0ZWQgU1NMIGJhY2tlbmRzOiIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6MTA5MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGNVUkwgd2FzIGJ1aWx0IHdpdGhvdXQgU1NMIGJhY2tlbmRzIgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzoxMDk3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGFscmVhZHkgc2V0IgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHRvcm5hciBhICRoZWFkX25hbWUiCisKKyM6IGh0dHAuYzoxOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gdXBkYXRlIHVybCBiYXNlIGZyb20gcmVkaXJlY3Rpb246XG4iCisiICBhc2tlZCBmb3I6ICVzXG4iCisiICAgcmVkaXJlY3Q6ICVzIgorbXNnc3RyICIiCisibm8gcydoYSBwb2d1dCBhY3R1YWxpdHphciBsJ1VSTCBiYXNlIGRlcyBkZSBsYSByZWRpcmVjY2nDszpcbiIKKyIgIHBldGljacOzOiAlc1xuIgorIiAgIHJlZGlyZWNjacOzOiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzoxNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcXVvdGluZyBpbiBwdXNoLW9wdGlvbiB2YWx1ZTogJyVzJyIKK21zZ3N0ciAidmFsb3IgcGFyY2lhbCBubyB2w6BsaWQ6IMKrJXPCuyIKKworIzogcmVtb3RlLWN1cmwuYzoyNjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzaW5mby9yZWZzIG5vdCB2YWxpZDogaXMgdGhpcyBhIGdpdCByZXBvc2l0b3J5PyIKK21zZ3N0ciAiwqslc8K7IG5vIHJlY29uZWd1dCBjb20gdW4gZGlww7JzaXQgZ2l0IgorCisjOiByZW1vdGUtY3VybC5jOjM2NAorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZXhwZWN0ZWQgc2VydmljZSwgZ290IGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IHMnZXNwZXJhdmEgQUNLL05BSywgcydoYSByZWJ1dCB1biBwYXF1ZXQgZGUgbmV0ZWphIgorCisjOiByZW1vdGUtY3VybC5jOjM5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGdvdCAnJXMnIgorbXNnc3RyICJyZWZlcsOobmNpYSBubyB2w6BsaWRhOiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAibm8gcydoYSB0cm9iYXQgZWwgZGlww7JzaXQgwqslc8K7IgorCisjOiByZW1vdGUtY3VybC5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yICclcyciCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gYXV0ZW50aWNhciBwZXIgwqslc8K7IgorCisjOiByZW1vdGUtY3VybC5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFjY2VkaXIgYSDCqyVzwrs6ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyB0byAlcyIKK21zZ3N0ciAicydlc3TDoCByZWRpcmlnaW50IGEgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6NTkzCittc2dpZCAic2hvdWxkbid0IGhhdmUgRU9GIHdoZW4gbm90IGdlbnRsZSBvbiBFT0YiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo2NzMKK21zZ2lkICJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo3MzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlJQQyBmYWlsZWQ7ICVzIgorbXNnc3RyICJTVEFSVFRMUyBoYSBmYWxsYXQhICVzIgorCisjOiByZW1vdGUtY3VybC5jOjc3MworIywgZnV6enkKK21zZ2lkICJjYW5ub3QgaGFuZGxlIHB1c2hlcyB0aGlzIGJpZyIKK21zZ3N0ciAibm8gZXMgcG90IHVzYXIgICVzIGNvbSBhIGZpdHhlciBkJ2V4Y2x1c2nDsyIKKworIzogcmVtb3RlLWN1cmwuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBkZWZsYXRlIGVycm9yICVkIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZW5kIGVycm9yICVkIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTAyMworIywgZnV6enkKK21zZ2lkICJkdW1iIGh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjYXBhYmlsaXRpZXMiCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIHBlcm1ldCBjbGllbnRzIHN1cGVyZmljaWFscyIKKworIzogcmVtb3RlLWN1cmwuYzoxMDM3CisjLCBmdXp6eQorbXNnaWQgImZldGNoIGZhaWxlZC4iCittc2dzdHIgImwnwqtzdGFzaMK7IGhhIGZhbGxhdCIKKworIzogcmVtb3RlLWN1cmwuYzoxMDg1Cittc2dpZCAiY2Fubm90IGZldGNoIGJ5IHNoYTEgb3ZlciBzbWFydCBodHRwIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTEyOSByZW1vdGUtY3VybC5jOjExMzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAiIgorInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZGUgcHJvdG9jb2w6IHMnZXNwZXJhdmEgc2hhbGxvdyBzaGEtMSwgcydoYSByZWJ1dCDCqyVzwrsiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE0NyByZW1vdGUtY3VybC5jOjEyNjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiCittc2dzdHIgImxhIHZhcmlhbnQgwqtzaW1wbGXCuyBkJ3NzaCBubyDDqXMgY29tcGF0aWJsZSBhbWIgLTQiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE4MworIywgZnV6enkKK21zZ2lkICJnaXQtaHR0cC1wdXNoIGZhaWxlZCIKK21zZ3N0ciAibCfCq3N0YXNowrsgaGEgZmFsbGF0IgorCisjOiByZW1vdGUtY3VybC5jOjEzNjcKK21zZ2lkICJyZW1vdGUtY3VybDogdXNhZ2U6IGdpdCByZW1vdGUtY3VybCA8cmVtb3RlPiBbPHVybD5dIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM5OQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwNgorbXNnaWQgInJlbW90ZS1jdXJsOiBmZXRjaCBhdHRlbXB0ZWQgd2l0aG91dCBhIGxvY2FsIHJlcG8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxNDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS1jdXJsOiB1bmtub3duIGNvbW1hbmQgJyVzJyBmcm9tIGdpdCIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NQorbXNnaWQgImFyZ3MiCittc2dzdHIgImFyZ3MiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oOjg2Cittc2dpZCAib2JqZWN0IGZpbHRlcmluZyIKK21zZ3N0ciAiZmlsdHJhdGdlIGQnb2JqZWN0ZSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE4MworbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICJkYXRhLWRlLWNhZHVjaXRhdCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE5NworbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAib3BlcmFjacOzIG51bMK3bGEgKHBlciBhIGNvbXBhdGliaWxpdGF0IGFtYiB2ZXJzaW9ucyBhbnRlcmlvcnMpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzA5Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICJzaWd1ZXMgbcOpcyBkZXRhbGxhdCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxMQorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgInNpZ3VlcyBtw6lzIGRpc2NyZXQiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTcKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAidXNhIDxuPiB4aWZyZXMgcGVyIHByZXNlbnRhciBlbHMgU0hBLTEiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICJjb20gc3VwcmltaXIgZWxzIGVzcGFpcyBpICNjb21lbnRhcmlzIGRlbCBtaXNzYXRnZSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzNworIywgZnV6enkKK21zZ2lkICJyZWFkIHBhdGhzcGVjIGZyb20gZmlsZSIKK21zZ3N0ciAibGxlZ2VpeCBlbHMgcGF0cm9ucyBkZXMgZCd1biBmaXR4ZXIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzgKKyMsIGZ1enp5Cittc2dpZCAiIgorIndpdGggLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHBhdGhzcGVjIGVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJlbHMgY2FtaW5zIHNlIHNlcGFyZW4gYW1iIGVsIGNhcsOgY3RlciBOVUwiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJrZXkiCittc2dzdHIgImNsYXUiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgIm5vbSBkZWwgY2FtcCBlbiBlbCBxdWFsIG9yZGVuYXIiCisKKyM6IHJlcmVyZS5oOjQ0Cittc2dpZCAidXBkYXRlIHRoZSBpbmRleCB3aXRoIHJldXNlZCBjb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlIgorbXNnc3RyICIiCisiYWN0dWFsaXR6YSBsJ8OtbmRleCBhbWIgbGEgcmVzb2x1Y2nDsyBkZSBjb25mbGljdGUgcmV1c2FkYSBzaSDDqXMgcG9zc2libGUiCisKKyM6IHd0LXN0YXR1cy5oOjY3Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBhdCAiCittc2dzdHIgIkhFQUQgc2VwYXJhdCBhICIKKworIzogd3Qtc3RhdHVzLmg6NjgKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICJIRUFEIHNlcGFyYXQgZGUgIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MAorbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiQWZlZ2VpeCBlbHMgY29udGluZ3V0cyBkZWxzIGZpdHhlcnMgYSBsJ8OtbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6NTEKK21zZ2lkICJBcHBseSBhIHNlcmllcyBvZiBwYXRjaGVzIGZyb20gYSBtYWlsYm94IgorbXNnc3RyICJBcGxpY2EgdW5hIHPDqHJpZSBkZSBwZWRhw6dvcyBkZXMgZCd1bmEgYsO6c3RpYSBkZSBjb3JyZXUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUyCittc2dpZCAiQW5ub3RhdGUgZmlsZSBsaW5lcyB3aXRoIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiQW5vdGEgbGVzIGzDrW5pZXMgZGVsIGZpdHhlciBhbWIgbGEgaW5mb3JtYWNpw7MgZGUgbGEgY29taXNzacOzIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MworbXNnaWQgIkFwcGx5IGEgcGF0Y2ggdG8gZmlsZXMgYW5kL29yIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiQXBsaWNhIHVuIHBlZGHDpyBhIGZpdHhlciBpL28gYSBsJ8OtbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6NTQKK21zZ2lkICJJbXBvcnQgYSBHTlUgQXJjaCByZXBvc2l0b3J5IGludG8gR2l0IgorbXNnc3RyICJJbXBvcnRhIHVuIGRpcMOyc2l0IEdOVSBBcmNoIGEgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo1NQorbXNnaWQgIkNyZWF0ZSBhbiBhcmNoaXZlIG9mIGZpbGVzIGZyb20gYSBuYW1lZCB0cmVlIgorbXNnc3RyICJDcmVhIHVuIGFyeGl1IGRlIGZpdHhlcnMgZGVzIGQndW4gYXJicmUgYW1iIG5vbSIKKworIzogY29tbWFuZC1saXN0Lmg6NTYKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICJUcm9iYSBwZXIgY2VyY2EgYmluw6ByaWEgZWwgY2FudmkgcXVlIGhhZ2kgaW50cm9kdcOvdCB1biBkZWZlY3RlIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NworbXNnaWQgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIKK21zZ3N0ciAiIgorIk1vc3RyYSBxdWluYSByZXZpc2nDsyBpIGF1dG9yIGhhIG1vZGlmaWNhdCBwZXIgw7psdGltIGNvcCBjYWRhIGzDrW5pYSBkJ3VuICIKKyJmaXR4ZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU4Cittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgIkxsaXN0YSwgY3JlYSBvIHN1cHJpbWVpeCBicmFucXVlcyIKKworIzogY29tbWFuZC1saXN0Lmg6NTkKK21zZ2lkICJNb3ZlIG9iamVjdHMgYW5kIHJlZnMgYnkgYXJjaGl2ZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MAorbXNnaWQgIlByb3ZpZGUgY29udGVudCBvciB0eXBlIGFuZCBzaXplIGluZm9ybWF0aW9uIGZvciByZXBvc2l0b3J5IG9iamVjdHMiCittc2dzdHIgIiIKKyJQcm92ZWVpeCBjb250aW5ndXQgbyBpbmZvcm1hY2nDsyBkZWwgdGlwdXMgaSBtaWRhIHBlciBhbHMgb2JqZWN0ZXMgZGVsIGRpcMOyc2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo2MQorbXNnaWQgIkRpc3BsYXkgZ2l0YXR0cmlidXRlcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTW9zdHJhIGxhIGluZm9ybWFjacOzIGRlIC5naXRhdHRyaWJ1dGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MgorbXNnaWQgIkRlYnVnIGdpdGlnbm9yZSAvIGV4Y2x1ZGUgZmlsZXMiCittc2dzdHIgIkRlcHVyYSBnaXRpZ25vcmUgLyBmaXR4ZXJzIGQnZXhjbHVzacOzIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MworIywgZnV6enkKK21zZ2lkICJTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzIgorbXNnc3RyICJNb3N0cmEgbCdhZHJlw6dhIGVsZWN0csOybmljYSBkZSBjYWRhIGF1dG9yIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NAorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiQ2FudmlhIGRlIGJyYW5jYSBvIHJlc3RhdXJhIGVscyBmaXR4ZXJzIGRlIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogY29tbWFuZC1saXN0Lmg6NjUKK21zZ2lkICJDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIkNvcGlhIGZpdHhlcnMgZGVzIGRlIGwnw61uZGV4IGEgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NgorbXNnaWQgIkVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBuYW1lIGlzIHdlbGwgZm9ybWVkIgorbXNnc3RyICJBc3NlZ3VyYSBxdWUgdW4gbm9tIGRlIHJlZmVyw6huY2lhIGVzdMOgIGJlbiBmb3JtYXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY3Cittc2dpZCAiRmluZCBjb21taXRzIHlldCB0byBiZSBhcHBsaWVkIHRvIHVwc3RyZWFtIgorbXNnc3RyICJUcm9iYSBsZXMgY29taXNzaW9ucyBxdWUgZW5jYXJhIHMnaGFuIGQnYXBsaWNhciBhIGxhIGZvbnQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY4Cittc2dpZCAiQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIkFwbGljYSBlbHMgY2FudmlzIGludHJvZHXDr3RzIHBlciBhbGd1bmVzIGNvbWlzc2lvbnMgZXhpc3RlbnRzIgorCisjOiBjb21tYW5kLWxpc3QuaDo2OQorbXNnaWQgIkdyYXBoaWNhbCBhbHRlcm5hdGl2ZSB0byBnaXQtY29tbWl0IgorbXNnc3RyICJBbHRlcm5hdGl2YSBncsOgZmljYSBhIGdpdC1jb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcwCittc2dpZCAiUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIlN1cHJpbWVpeCBlbHMgZml0eGVycyBubyBzZWd1aXRzIGRlIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogY29tbWFuZC1saXN0Lmg6NzEKK21zZ2lkICJDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIkNsb25hIHVuIGRpcMOyc2l0IGEgdW4gZGlyZWN0b3JpIG5vdSIKKworIzogY29tbWFuZC1saXN0Lmg6NzIKK21zZ2lkICJEaXNwbGF5IGRhdGEgaW4gY29sdW1ucyIKK21zZ3N0ciAiTW9zdHJhIGxlcyBkYWRlcyBlbiBjb2x1bW5lcyIKKworIzogY29tbWFuZC1saXN0Lmg6NzMKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVnaXN0cmEgZWxzIGNhbnZpcyBhbCBkaXDDsnNpdCIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIkVzY3JpdSBpIHZlcmlmaWNhIGVscyBmaXR4ZXJzIGNvbW1pdC1ncmFwaCBkZSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc1Cittc2dpZCAiQ3JlYXRlIGEgbmV3IGNvbW1pdCBvYmplY3QiCittc2dzdHIgIkNyZWEgdW4gb2JqZWN0ZSBkZSBjb21pc3Npw7Mgbm91IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgIk9idMOpIG8gZXN0YWJsZWl4IG9wY2lvbnMgZGUgZGlww7JzaXQgbyBnbG9iYWxzIgorCisjOiBjb21tYW5kLWxpc3QuaDo3NworbXNnaWQgIkNvdW50IHVucGFja2VkIG51bWJlciBvZiBvYmplY3RzIGFuZCB0aGVpciBkaXNrIGNvbnN1bXB0aW9uIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc4Cittc2dpZCAiUmV0cmlldmUgYW5kIHN0b3JlIHVzZXIgY3JlZGVudGlhbHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NzkKK21zZ2lkICJIZWxwZXIgdG8gdGVtcG9yYXJpbHkgc3RvcmUgcGFzc3dvcmRzIGluIG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MAorbXNnaWQgIkhlbHBlciB0byBzdG9yZSBjcmVkZW50aWFscyBvbiBkaXNrIgorbXNnc3RyICJBanVkYW50IHBlciBhIGVtbWFnYXR6ZW1hciBjcmVkZW5jaWFscyBhIGRpc2MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgxCittc2dpZCAiRXhwb3J0IGEgc2luZ2xlIGNvbW1pdCB0byBhIENWUyBjaGVja291dCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MgorbXNnaWQgIlNhbHZhZ2UgeW91ciBkYXRhIG91dCBvZiBhbm90aGVyIFNDTSBwZW9wbGUgbG92ZSB0byBoYXRlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgzCittc2dpZCAiQSBDVlMgc2VydmVyIGVtdWxhdG9yIGZvciBHaXQiCittc2dzdHIgIlVuIGVtdWxhZG9yIGRlIHNlcnZpZG9yIENWUyBwZXIgYWwgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo4NAorbXNnaWQgIkEgcmVhbGx5IHNpbXBsZSBzZXJ2ZXIgZm9yIEdpdCByZXBvc2l0b3JpZXMiCittc2dzdHIgIlVuIHNlcnZpZG9yIHJlYWxtZW50IHNlbnppbGwgcGVyIGEgZGlww7JzaXRzIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODUKK21zZ2lkICJHaXZlIGFuIG9iamVjdCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgYmFzZWQgb24gYW4gYXZhaWxhYmxlIHJlZiIKK21zZ3N0ciAiIgorIkTDs25hIHVuIG5vbSBsbGVnaWJsZSBwZXIgaHVtYW5zIGJhc2FudC1zZSBlbiBsZXMgcmVmZXLDqG5jaWVzIGRpc3BvbmlibGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NgorbXNnaWQgIlNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMiCittc2dzdHIgIiIKKyJNb3N0cmEgZWxzIGNhbnZpcyBlbnRyZSBjb21pc3Npb25zLCBsYSBjb21pc3Npw7MgaSBsJ2FyYnJlIGRlIHRyZWJhbGwsIGV0YyIKKworIzogY29tbWFuZC1saXN0Lmg6ODcKK21zZ2lkICJDb21wYXJlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgiCittc2dzdHIgIkNvbXBhcmEgZml0eGVycyBlbiBsJ2FyYnJlIGRlIHRyZWJhbGwgaSBsJ8OtbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6ODgKK21zZ2lkICJDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4IgorbXNnc3RyICJDb21wYXJhIHVuIGFyYnJlIGFtYiBsJ2FyYnJlIGRlIHRyZWJhbGwgbyBsJ8OtbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6ODkKK21zZ2lkICJDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAiTW9zdHJhIGVscyBjYW52aXMgdXNhbnQgZWluZXMgZGlmZiBjb211bmVzIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MQorbXNnaWQgIkdpdCBkYXRhIGV4cG9ydGVyIgorbXNnc3RyICJFeHBsb3JhZG9yIGRlIGRhZGVzIGRlbCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkyCittc2dpZCAiQmFja2VuZCBmb3IgZmFzdCBHaXQgZGF0YSBpbXBvcnRlcnMiCittc2dzdHIgIlJlcmVmb25zIHBlciBhIGltcG9ydGFkb3JzIHLDoHBpZHMgZGUgZGFkZXMgZGUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo5MworbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIkJhaXhhIG9iamVjdGVzIGkgcmVmZXLDqG5jaWVzIGQndW4gYWx0cmUgZGlww7JzaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk0Cittc2dpZCAiUmVjZWl2ZSBtaXNzaW5nIG9iamVjdHMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIlJlcCBlbHMgb2JqZWN0ZXMgcXVlIG1hbnF1ZW4gZGVzIGQndW4gYWx0cmUgZGlww7JzaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk1Cittc2dpZCAiUmV3cml0ZSBicmFuY2hlcyIKK21zZ3N0ciAiVG9ybmEgYSBlc2NyaXVyZSBsZXMgYnJhbnF1ZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk2Cittc2dpZCAiUHJvZHVjZSBhIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJQcm9kdWVpeCB1biBtaXNzYXRnZSBkZSBjb21pc3Npw7MgZGUgZnVzacOzIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NworbXNnaWQgIk91dHB1dCBpbmZvcm1hdGlvbiBvbiBlYWNoIHJlZiIKK21zZ3N0ciAiTW9zdHJhIGxhIGluZm9ybWFjacOzIGVuIGNhZGEgcmVmZXLDqG5jaWEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk4Cittc2dpZCAiUHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwgc3VibWlzc2lvbiIKK21zZ3N0ciAiUHJlcGFyYSBwZWRhw6dvcyBwZXIgZW52aWFyLWxvcyBwZXIgY29ycmV1IGVsZWN0csOybmljIgorCisjOiBjb21tYW5kLWxpc3QuaDo5OQorbXNnaWQgIlZlcmlmaWVzIHRoZSBjb25uZWN0aXZpdHkgYW5kIHZhbGlkaXR5IG9mIHRoZSBvYmplY3RzIGluIHRoZSBkYXRhYmFzZSIKK21zZ3N0ciAiVmVyaWZpY2EgbGEgY29ubmVjdGl2aXRhdCBpIHZhbGlkZXNhIGRlbHMgb2JqZWN0ZXMgYSBsYSBiYXNlIGRlIGRhZGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDAKK21zZ2lkICJDbGVhbnVwIHVubmVjZXNzYXJ5IGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiTmV0ZWphIGVscyBmaXR4ZXJzIGlubmVjZXNzYXJpcyBpIG9wdGltaXR6YSBlbCBkaXDDsnNpdCBsb2NhbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTAxCittc2dpZCAiRXh0cmFjdCBjb21taXQgSUQgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgdXNpbmcgZ2l0LWFyY2hpdmUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTAyCittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICJJbXByaW1laXggbGVzIGzDrW5pZXMgY29pbmNpZGVudHMgYW1iIHVuIHBhdHLDsyIKKworIzogY29tbWFuZC1saXN0Lmg6MTAzCittc2dpZCAiQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdCIKK21zZ3N0ciAiVW5hIGludGVyZsOtY2llIGdyw6BmaWMgcG9ydGFibGUgcGVyIGFsIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA0Cittc2dpZCAiQ29tcHV0ZSBvYmplY3QgSUQgYW5kIG9wdGlvbmFsbHkgY3JlYXRlcyBhIGJsb2IgZnJvbSBhIGZpbGUiCittc2dzdHIgIkNhbGN1bGEgbCdJRCBkZSBsJ29iamVjdGUgaSBvcGNpb25hbG1lbnQgY3JlYSB1biBibG9iIGRlcyBkZWwgZml0eGVyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDUKK21zZ2lkICJEaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gYWJvdXQgR2l0IgorbXNnc3RyICJNb3N0cmEgaW5mb3JtYWNpw7MgZCdhanVkYSBkZWwgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDYKK21zZ2lkICJTZXJ2ZXIgc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBHaXQgb3ZlciBIVFRQIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNworbXNnaWQgIkRvd25sb2FkIGZyb20gYSByZW1vdGUgR2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAiCittc2dzdHIgIkJhaXhhIGRlcyBkJ3VuIGRpcMOyc2l0IEdpdCByZW1vdCB2aWEgSFRUUCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA4CisjLCBmdXp6eQorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEhUVFAvREFWIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiQmFpeGEgb2JqZWN0ZXMgaSByZWZlcsOobmNpZXMgZCd1biBhbHRyZSBkaXDDsnNpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA5Cittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBmcm9tIHN0ZGluIHRvIGFuIElNQVAgZm9sZGVyIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTExCittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIkNyZWEgdW4gZGlww7JzaXQgZGUgR2l0IGJ1aXQgbyByZWluaWNpYWxpdHphIHVuIGV4aXN0ZW50IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTIKK21zZ2lkICJJbnN0YW50bHkgYnJvd3NlIHlvdXIgd29ya2luZyByZXBvc2l0b3J5IGluIGdpdHdlYiIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTMKK21zZ2lkICJBZGQgb3IgcGFyc2Ugc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBpbiBjb21taXQgbWVzc2FnZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTE0Cittc2dpZCAiVGhlIEdpdCByZXBvc2l0b3J5IGJyb3dzZXIiCittc2dzdHIgIkVsIG5hdmVnYWRvciBkZSBkaXDDsnNpdHMgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTUKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJNb3N0cmEgZWxzIHJlZ2lzdHJlcyBkZSBjb21pc3Npw7MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNgorbXNnaWQgIlNob3cgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJNb3N0cmEgaW5mb3JtYWNpw7Mgc29icmUgZWxzIGZpdHhlcnMgYSBsJ8OtbmRleCBpIGEgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTcKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiTW9zdHJhIGxlcyByZWZlcsOobmNpZXMgZCd1biBkaXDDsnNpdCByZW1vdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE4Cittc2dpZCAiTGlzdCB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdCIKK21zZ3N0ciAiTW9zdHJhIGVscyBjb250aW5ndXRzIGQndW4gb2JqZWN0ZSBkZSBsJ2FyYnJlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTkKK21zZ2lkICJFeHRyYWN0cyBwYXRjaCBhbmQgYXV0aG9yc2hpcCBmcm9tIGEgc2luZ2xlIGUtbWFpbCBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMAorbXNnaWQgIlNpbXBsZSBVTklYIG1ib3ggc3BsaXR0ZXIgcHJvZ3JhbSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjEKK21zZ2lkICJKb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlciIKK21zZ3N0ciAiVW5laXggZHVlcyBvIG3DqXMgaGlzdMOycmllcyBkZSBkZXNlbnZvbHVwYW1lbnQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMgorIywgZnV6enkKK21zZ2lkICJGaW5kIGFzIGdvb2QgY29tbW9uIGFuY2VzdG9ycyBhcyBwb3NzaWJsZSBmb3IgYSBtZXJnZSIKK21zZ3N0ciAidHJvYmEgZWxzIGF2YW50cGFzc2F0cyBwZXIgYSB1bmEgc29sYSBmdXNpw7MgZCduIHZpZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMworIywgZnV6enkKK21zZ2lkICJSdW4gYSB0aHJlZS13YXkgZmlsZSBtZXJnZSIKK21zZ3N0ciAiUydlc3TDoCByZXRyb2NlZGludCBhIHVuYSBmdXNpw7MgZGUgMyB2aWVzLi4uXG4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNAorIywgZnV6enkKK21zZ2lkICJSdW4gYSBtZXJnZSBmb3IgZmlsZXMgbmVlZGluZyBtZXJnaW5nIgorbXNnc3RyICJmdXNpw7MgZGUgMyB2aWVzIHNpIG5vIGNhbCBmdXNpw7MgYSBuaXZlbGwgZGUgZml0eGVycyIKKworIzogY29tbWFuZC1saXN0Lmg6MTI1Cittc2dpZCAiVGhlIHN0YW5kYXJkIGhlbHBlciBwcm9ncmFtIHRvIHVzZSB3aXRoIGdpdC1tZXJnZS1pbmRleCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjYKK21zZ2lkICJSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0ciAiIgorIkV4ZWN1dGEgZWluZXMgZGUgcmVzb2x1Y2nDsyBkZSBjb25mbGljdGVzIHBlciBhIHJlc29sZHJlIGNvbmZsaWN0ZXMgZGUgZnVzc2nDsyIKKworIzogY29tbWFuZC1saXN0Lmg6MTI3Cittc2dpZCAiU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjgKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IG11bHRpLXBhY2staW5kZXhlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjkKK21zZ2lkICJDcmVhdGVzIGEgdGFnIG9iamVjdCIKK21zZ3N0ciAiQ3JlYSB1biBvYmplY3RlIGV0aXF1ZXRhIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzAKK21zZ2lkICJCdWlsZCBhIHRyZWUtb2JqZWN0IGZyb20gbHMtdHJlZSBmb3JtYXR0ZWQgdGV4dCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzEKK21zZ2lkICJNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsiCittc2dzdHIgIk1vdSBvIGNhbnZpYSBkZSBub20gYSB1biBmaXR4ZXIsIGRpcmVjdG9yaSBvIGVubGxhw6cgc2ltYsOybGljIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzIKK21zZ2lkICJGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMworbXNnaWQgIkFkZCBvciBpbnNwZWN0IG9iamVjdCBub3RlcyIKK21zZ3N0ciAiQWZlZ2VpeCBvIGluc3BlY2Npb25hIG5vdGVzIGRlIGwnb2JqZWN0ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM0Cittc2dpZCAiSW1wb3J0IGZyb20gYW5kIHN1Ym1pdCB0byBQZXJmb3JjZSByZXBvc2l0b3JpZXMiCittc2dzdHIgIkltcG9ydGEgZGVzIGRlIGkgZW52aWEgYSBkaXDDsnNpdHMgUGVyZm9yY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNQorbXNnaWQgIkNyZWF0ZSBhIHBhY2tlZCBhcmNoaXZlIG9mIG9iamVjdHMiCittc2dzdHIgIkNyZWEgdW4gYXJ4aXUgZW1wYXF1ZXRhdCBkJ29iamVjdGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzYKK21zZ2lkICJGaW5kIHJlZHVuZGFudCBwYWNrIGZpbGVzIgorbXNnc3RyICJUcm9iYSBmaXR4ZXJzIGVtcGFxdWV0YXRzIHJlZHVuZGFudHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNworbXNnaWQgIlBhY2sgaGVhZHMgYW5kIHRhZ3MgZm9yIGVmZmljaWVudCByZXBvc2l0b3J5IGFjY2VzcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzgKK21zZ2lkICJSb3V0aW5lcyB0byBoZWxwIHBhcnNpbmcgcmVtb3RlIHJlcG9zaXRvcnkgYWNjZXNzIHBhcmFtZXRlcnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM5Cittc2dpZCAiQ29tcHV0ZSB1bmlxdWUgSUQgZm9yIGEgcGF0Y2giCittc2dzdHIgIkNhbGN1bGEgdW4gaWRlbnRpZmljYWRvciDDum5pY2EgcGVyIGEgY2FkYSBwZWRhw6ciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MAorbXNnaWQgIlBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiUG9kYSB0b3RzIGVscyBvYmplY3RlcyBubyBhY2Nlc3NpYmxlcyBkZSBsYSBiYXNlIGRlIGRhZGVzIGQnb2JqZWN0ZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MQorbXNnaWQgIlJlbW92ZSBleHRyYSBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgaW4gcGFjayBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDIKK21zZ2lkICJGZXRjaCBmcm9tIGFuZCBpbnRlZ3JhdGUgd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgIk9idMOpbiBpIGludGVncmEgYW1iIHVuIGFsdHJlIGRpcMOyc2l0IG8gdW5hIGJyYW5jYSBsb2NhbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQzCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICIiCisiQWN0dWFsaXR6YSBsZXMgcmVmZXLDqG5jaWVzIHJlbW90ZXMganVudGFtZW50IGFtYiBlbHMgb2JqZWN0ZXMgYXNzb2NpYXRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDQKKyMsIGZ1enp5Cittc2dpZCAiQXBwbGllcyBhIHF1aWx0IHBhdGNoc2V0IG9udG8gdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJObyBoaSBoYSBjYXAgZm9udCBwZXIgZGVmZWN0ZSBkZWZpbmlkYSBwZXIgYSBsYSBicmFuY2EgYWN0dWFsLiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ1Cittc2dpZCAiQ29tcGFyZSB0d28gY29tbWl0IHJhbmdlcyAoZS5nLiB0d28gdmVyc2lvbnMgb2YgYSBicmFuY2gpIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NgorIywgZnV6enkKK21zZ2lkICJSZWFkcyB0cmVlIGluZm9ybWF0aW9uIGludG8gdGhlIGluZGV4IgorbXNnc3RyICJhY3R1YWxpdHphIGxhIGluZm9ybWFjacOzIGQnZXN0YWTDrXN0aXF1ZXMgZW4gZWwgZml0eGVyIGQnw61uZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDcKK21zZ2lkICJSZWFwcGx5IGNvbW1pdHMgb24gdG9wIG9mIGFub3RoZXIgYmFzZSB0aXAiCittc2dzdHIgIlRvcm5hIGEgYXBsaWNhciBsZXMgY29taXNzaW9ucyBzb2JyZSB1biBhbHRyZSBwdW50IGRlIGJhc2FtZW50IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDgKKyMsIGZ1enp5Cittc2dpZCAiUmVjZWl2ZSB3aGF0IGlzIHB1c2hlZCBpbnRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJSZWdpc3RyYSBlbHMgY2FudmlzIGFsIGRpcMOyc2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDkKKyMsIGZ1enp5Cittc2dpZCAiTWFuYWdlIHJlZmxvZyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAibW9zdHJhIGxhIGluZm9ybWFjacOzIGRlIHJlc29sdWNpw7MgZGUgZGVzZmV0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTAKKyMsIGZ1enp5Cittc2dpZCAiTWFuYWdlIHNldCBvZiB0cmFja2VkIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAiUmVnaXN0cmEgZWxzIGNhbnZpcyBhbCBkaXDDsnNpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTUxCisjLCBmdXp6eQorbXNnaWQgIlBhY2sgdW5wYWNrZWQgb2JqZWN0cyBpbiBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tY2FjaGVkIGZvcmEgZCd1biBkaXDDsnNpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTUyCisjLCBmdXp6eQorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIHJlZnMgdG8gcmVwbGFjZSBvYmplY3RzIgorbXNnc3RyICIiCisiQ3JlYSwgbGxpc3RhLCBzdXByaW1laXggbyB2ZXJpZmljYSB1biBvYmplY3RlIGQnZXRpcXVldGEgc2lnbmF0IGFtYiBHUEciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MworbXNnaWQgIkdlbmVyYXRlcyBhIHN1bW1hcnkgb2YgcGVuZGluZyBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NAorbXNnaWQgIlJldXNlIHJlY29yZGVkIHJlc29sdXRpb24gb2YgY29uZmxpY3RlZCBtZXJnZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTU1Cittc2dpZCAiUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUiCittc2dzdHIgIlJlc3RhYmxlaXggbGEgSEVBRCBhY3R1YWwgYSBsJ2VzdGF0IGVzcGVjaWZpY2F0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTYKK21zZ2lkICJSZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiUmVzdGF1cmEgZWxzIGZpdHhlcnMgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTcKK21zZ2lkICJSZXZlcnQgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICJSZXZlcnRlaXggY29taXNzaW9ucyBleGlzdGVudHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OAorbXNnaWQgIkxpc3RzIGNvbW1pdCBvYmplY3RzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiTW9zdHJhIGxlcyBjb21pc3Npb25zIGVuIG9yZHJlIHRvcG9sw7JnaWMgaW52ZXJzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTkKK21zZ2lkICJQaWNrIG91dCBhbmQgbWFzc2FnZSBwYXJhbWV0ZXJzIgorbXNnc3RyICJFc2NvbGxlaXggaSBwZXJzb25hbGl0emEgZWxzIHBhcsOgbWV0cmVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjAKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiRWxpbWluYSBmaXR4ZXJzIGRlIGwnYXJicmUgZGUgdHJlYmFsbCBpIGRlIGwnw61uZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjEKK21zZ2lkICJTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGFzIGVtYWlscyIKK21zZ3N0ciAiRW52aWEgdW5hIGNvbMK3bGVjY2nDsyBkZSBwZWRhw6dvcyBjb20gYSBjb3JyZXVzIGVsZWN0csOybmljcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTYyCittc2dpZCAiUHVzaCBvYmplY3RzIG92ZXIgR2l0IHByb3RvY29sIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUHVqYSBvYmplY3RlcyBzb2JyZSBlbCBwcm90b2NvbCBHaXQgYSB1biBhbHRyZSBkaXDDsnNpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTYzCittc2dpZCAiUmVzdHJpY3RlZCBsb2dpbiBzaGVsbCBmb3IgR2l0LW9ubHkgU1NIIGFjY2VzcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjQKK21zZ2lkICJTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjUKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiTW9zdHJhIGRpdmVyc29zIHRpcHVzIGQnb2JqZWN0ZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NgorbXNnaWQgIlNob3cgYnJhbmNoZXMgYW5kIHRoZWlyIGNvbW1pdHMiCittc2dzdHIgIk1vc3RyYSBsZXMgYnJhbnF1ZXMgaSBsZXMgc2V2ZXMgY29taXNzaW9ucyIKKworIzogY29tbWFuZC1saXN0Lmg6MTY3Cittc2dpZCAiU2hvdyBwYWNrZWQgYXJjaGl2ZSBpbmRleCIKK21zZ3N0ciAiTW9zdHJhIGwnw61uZGV4IGQnYXJ4aXVzIGVtcGFxdWV0YXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OAorbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIkxsaXN0YSBsZXMgcmVmZXLDqG5jaWVzIGVuIHVuIGRpcMOyc2l0IGxvY2FsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjkKK21zZ2lkICJHaXQncyBpMThuIHNldHVwIGNvZGUgZm9yIHNoZWxsIHNjcmlwdHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTcwCittc2dpZCAiQ29tbW9uIEdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZSIKK21zZ3N0ciAiQ29kaSBkZSBzY3JpcHRzIGRlIGNvbmZpZ3VyYWNpw7MgY29tdW5zIHBlbCBHaXQgc2hlbGwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MQorbXNnaWQgIkluaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MgorIywgZnV6enkKK21zZ2lkICJTdGFzaCB0aGUgY2hhbmdlcyBpbiBhIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGF3YXkiCittc2dzdHIgIiVzOiBqYSBleGlzdGVpeCBlbiBlbCBkaXJlY3RvcmkgZGUgdHJlYmFsbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTczCisjLCBmdXp6eQorbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBzdGFnaW5nIGFyZWEiCittc2dzdHIgIkFmZWdlaXggZWxzIGNvbnRpbmd1dHMgZGVscyBmaXR4ZXJzIGEgbCfDrW5kZXgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NAorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgIk1vc3RyYSBsJ2VzdGF0IGRlIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc1Cittc2dpZCAiUmVtb3ZlIHVubmVjZXNzYXJ5IHdoaXRlc3BhY2UiCittc2dzdHIgIlN1cHJpbWVpeCBsJ2VzcGFpIGVuIGJsYW5jIGlubmVjZXNzYXJpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzYKK21zZ2lkICJJbml0aWFsaXplLCB1cGRhdGUgb3IgaW5zcGVjdCBzdWJtb2R1bGVzIgorbXNnc3RyICJJbmljaWFsaXR6YSwgYWN0dWFsaXR6YSBvIGluc3BlY2Npb25hIHN1Ym3DsmR1bHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NworbXNnaWQgIkJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYW5kIEdpdCIKK21zZ3N0ciAiT3BlcmFjacOzIGJpZGlyZWNjaW9uYWwgZW50cmUgdW4gZGlww7JzaXQgYSBTdWJ2ZXJzaW9uIGkgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzgKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMiCittc2dzdHIgIkNvbW11dGEgYnJhbnF1ZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3OQorbXNnaWQgIlJlYWQsIG1vZGlmeSBhbmQgZGVsZXRlIHN5bWJvbGljIHJlZnMiCittc2dzdHIgIkxsZWdlaXgsIG1vZGlmaWNhIGkgc3VwcmltZWl4IHJlZmVyw6huY2llcyBzaW1iw7JsaXF1ZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MAorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIG9yIHZlcmlmeSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHIgorbXNnc3RyICIiCisiQ3JlYSwgbGxpc3RhLCBzdXByaW1laXggbyB2ZXJpZmljYSB1biBvYmplY3RlIGQnZXRpcXVldGEgc2lnbmF0IGFtYiBHUEciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MQorbXNnaWQgIkNyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGEgYmxvYidzIGNvbnRlbnRzIgorbXNnc3RyICJDcmVhIHVuIGZpdHhlciB0ZW1wb3JhbCBhbWIgZWxzIGNvbnRpbmd1dHMgZGVscyBibG9icyIKKworIzogY29tbWFuZC1saXN0Lmg6MTgyCittc2dpZCAiVW5wYWNrIG9iamVjdHMgZnJvbSBhIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICJEZXNlbXBhcXVldGEgb2JqZWN0ZXMgZCd1biBhcnhpdSBlbXBhcXVldGF0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxODMKK21zZ2lkICJSZWdpc3RlciBmaWxlIGNvbnRlbnRzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGluZGV4IgorbXNnc3RyICJSZWdpc3RyYSBlbHMgY29udGluZ3V0cyBkZWwgZml0eGVyIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBhIGwnw61uZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxODQKK21zZ2lkICJVcGRhdGUgdGhlIG9iamVjdCBuYW1lIHN0b3JlZCBpbiBhIHJlZiBzYWZlbHkiCittc2dzdHIgIiIKKyJBY3R1YWxpdHphIGVsIG5vbSBkZSBsJ29iamVjdGUgZW1tYWdhdHplbWEgZW4gdW5hIHJlZmVyw6huY2lhIGRlIGZvcm1hIHNlZ3VyYSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg1Cittc2dpZCAiVXBkYXRlIGF1eGlsaWFyeSBpbmZvIGZpbGUgdG8gaGVscCBkdW1iIHNlcnZlcnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg2Cittc2dpZCAiU2VuZCBhcmNoaXZlIGJhY2sgdG8gZ2l0LWFyY2hpdmUiCittc2dzdHIgIkVudmlhIGwnYXJ4aXUgZGUgdG9ybmFkYSBhbCBnaXQtYXJjaGl2ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg3Cittc2dpZCAiU2VuZCBvYmplY3RzIHBhY2tlZCBiYWNrIHRvIGdpdC1mZXRjaC1wYWNrIgorbXNnc3RyICJFbnZpYSBlbHMgb2JqZWN0ZXMgZW1wYXF1ZXRhdHMgZGUgdG9ybmFkYSBhbCBnaXQtZmV0Y2gtcGFjayIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiU2hvdyBhIEdpdCBsb2dpY2FsIHZhcmlhYmxlIgorbXNnc3RyICJNb3N0cmEgdW5hIHZhcmlhYmxlIGzDsmdpY2EgZGVsIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg5Cittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgY29tbWl0cyIKK21zZ3N0ciAiVmVyaWZpY2EgbGEgc2lnbmF0dXJhIEdQRyBkZSBsZXMgY29taXNzaW9ucyIKKworIzogY29tbWFuZC1saXN0Lmg6MTkwCittc2dpZCAiVmFsaWRhdGUgcGFja2VkIEdpdCBhcmNoaXZlIGZpbGVzIgorbXNnc3RyICJWYWxpZGEgZWxzIGZpdHhlcnMgZCdhcnhpdXMgR2l0IGVtcGFxdWV0YXRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTEKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiB0YWdzIgorbXNnc3RyICJWZXJpZmljYSBsYSBzaWduYXR1cmEgR1BHIGRlIGxlcyBldGlxdWV0ZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MgorbXNnaWQgIkdpdCB3ZWIgaW50ZXJmYWNlICh3ZWIgZnJvbnRlbmQgdG8gR2l0IHJlcG9zaXRvcmllcykiCittc2dzdHIgIkludGVyZsOtY2llIHdlYiBkZWwgR2l0IChpbnRlcmbDrWNpZSB3ZWIgcGVscyBkaXDDsnNpdHMgR2l0KSIKKworIzogY29tbWFuZC1saXN0Lmg6MTkzCittc2dpZCAiU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIgorbXNnc3RyICJNb3N0cmEgcmVnaXN0cmVzIGFtYiBsYSBkaWZlcsOobmNpYSBpbnRyb2R1w69kYSBwZXIgY2FkYSBjb21pc3Npw7MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NAorbXNnaWQgIk1hbmFnZSBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIgorbXNnc3RyICJHZXN0aW9uYSBtw7psdGlwbGVzIGFyYnJlcyBkZSB0cmViYWxsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTUKK21zZ2lkICJDcmVhdGUgYSB0cmVlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICJDcmVhIHVuIG9iamVjdGUgYXJicmUgZGVzIGRlIGwnw61uZGV4IGFjdHVhbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTk2Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAiTGEgZGVmaW5pY2nDsyBkJ2F0cmlidXRzIHBlciBjYW3DrSIKKworIzogY29tbWFuZC1saXN0Lmg6MTk3Cittc2dpZCAiR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zIgorbXNnc3RyICJJbnRlcmbDrWNpZSBpIGNvbnZlbmNpb25zIGRlIGxhIGzDrW5pYSBkJ29yZHJlcyBkZWwgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTgKK21zZ2lkICJBIEdpdCBjb3JlIHR1dG9yaWFsIGZvciBkZXZlbG9wZXJzIgorbXNnc3RyICJVbiB0dXRvcmlhbCBiw6BzaWMgZGVsIEdpdCBwZXIgYSBkZXNlbnZvbHVwYWRvcnMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OQorbXNnaWQgIkdpdCBmb3IgQ1ZTIHVzZXJzIgorbXNnc3RyICJHaXQgcGVyIGEgdXN1YXJpcyBkZWwgQ1ZTIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDAKKyMsIGZ1enp5Cittc2dpZCAiVHdlYWtpbmcgZGlmZiBvdXRwdXQiCittc2dzdHIgIm9tZXQgbGEgc29ydGlkYSBkZSBkaWZlcsOobmNpZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMQorbXNnaWQgIkEgdXNlZnVsIG1pbmltdW0gc2V0IG9mIGNvbW1hbmRzIGZvciBFdmVyeWRheSBHaXQiCittc2dzdHIgIlVuIGNvbmp1bnQgbcOtbmltIMO6dGlsIGQnb3JkcmVzIGRpw6ByaWVzIGRlbCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMgorbXNnaWQgIkEgR2l0IEdsb3NzYXJ5IgorbXNnc3RyICJVbiBnbG9zc2FyaSBkZSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMworbXNnaWQgIkhvb2tzIHVzZWQgYnkgR2l0IgorbXNnc3RyICJMbGlnYW1zIHV0aWxpdHphdHMgcGVsIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA0Cittc2dpZCAiU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZSIKK21zZ3N0ciAiRXNwZWNpZmljYSBlbHMgZml0eGVycyBpbnRlbmNpb25hbG1lbnQgbm8gc2VndWl0cyBhIGlnbm9yYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNQorbXNnaWQgIkRlZmluaW5nIHN1Ym1vZHVsZSBwcm9wZXJ0aWVzIgorbXNnc3RyICJMYSBkZWZpbmljacOzIGRlIGxlcyBwcm9waWV0YXRzIGRlIHN1Ym3DsmR1bHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNgorbXNnaWQgIkdpdCBuYW1lc3BhY2VzIgorbXNnc3RyICJFc3BhaXMgZGUgbm9tcyBkZWwgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDcKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSBMYXlvdXQiCittc2dzdHIgIkRpc3Bvc2ljacOzIGRlbCBkaXDDsnNpdCBkZWwgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDgKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgIkwnZXNwZWNpZmljYWNpw7MgZGUgcmV2aXNpb25zIGkgcmFuZ3MgcGVyIGFsIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA5Cittc2dpZCAiTW91bnRpbmcgb25lIHJlcG9zaXRvcnkgaW5zaWRlIGFub3RoZXIiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MjEwCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0OiBwYXJ0IHR3byIKK21zZ3N0ciAiVW4gdHV0b3JpYWwgZCdpbnRyb2R1Y2Npw7MgYWwgR2l0OiBzZWdvbmEgcGFydCIKKworIzogY29tbWFuZC1saXN0Lmg6MjExCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0IgorbXNnc3RyICJVbiB0dXRvcmlhbCBkJ2ludHJvZHVjY2nDsyBhbCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMgorbXNnaWQgIkFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cyB3aXRoIEdpdCIKK21zZ3N0ciAiVW5hIHZpc2nDsyBkZSBjb25qdW50IGRlIGZsdXhvcyBkZSB0cmViYWxsIHJlY29tYW5hdHMgYW1iIEdpdCIKKworIzogZ2l0LWJpc2VjdC5zaDo1NAorbXNnaWQgIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorbXNnc3RyICJDYWwgY29tZW7Dp2FyIHBlciBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjYwCittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICJWb2xldSBxdWUgaG8gZmFjaSBwZXIgdm9zdMOoIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICJJbnRyb2R1Y2Npw7MgZGUgcmV2aXNpw7MgZXJyw7JuaWE6ICRhcmciCisKKyM6IGdpdC1iaXNlY3Quc2g6MTIxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYmlzZWN0ZWRfaGVhZCIKK21zZ3N0ciAiRW50cmFkYSBkZSByZXZpc2nDsyBlcnLDsm5pYTogJGJpc2VjdGVkX2hlYWQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkcmV2IgorbXNnc3RyICJJbnRyb2R1Y2Npw7MgZGUgcmV2aXNpw7MgZXJyw7JuaWE6ICRyZXYiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTM5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIGNhbiB0YWtlIG9ubHkgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBwb3QgYWNjZXB0YXIgbm9tw6lzIHVuIHBhcsOgbWV0cmUuIgorCisjOiBnaXQtYmlzZWN0LnNoOjIwOQorbXNnaWQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iCittc2dzdHIgIkNhcCBmaXR4ZXIgZGUgcmVnaXN0cmUgZG9uYXQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyICRmaWxlIHBlciBhIHJlcHJvZHVjY2nDsyIKKworIzogZ2l0LWJpc2VjdC5zaDoyMzIKK21zZ2lkICI/PyB3aGF0IGFyZSB5b3UgdGFsa2luZyBhYm91dD8iCittc2dzdHIgIj8/IGRlIHF1w6ggcGFybGV1PyIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDEKK21zZ2lkICJiaXNlY3QgcnVuIGZhaWxlZDogbm8gY29tbWFuZCBwcm92aWRlZC4iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgInMnZXN0w6AgZXhlY3V0YW50ICRjb21tYW5kIgorCisjOiBnaXQtYmlzZWN0LnNoOjI1MworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgorbXNnc3RyICIiCisiZWwgcGFzIGRlIGJpc2VjY2nDsyBoYSBmYWxsYXQ6XG4iCisiZWwgY29kaSBkZSBzb3J0aWRhICRyZXMgZGUgJyRjb21tYW5kJyDDqXMgPCAwIG8gPj0gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJlbCBwYXMgZGUgYmlzZWNjacOzIG5vIHBvdCBjb250aW51YXIgbcOpcyIKKworIzogZ2l0LWJpc2VjdC5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICIiCisiZWwgcGFzIGRlIGJpc2VjY2nDsyBoYSBmYWxsYXQ6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIGhhIHNvcnRpdCBhbWIgZWwgY29kaSBkJ2Vycm9yICRyZXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjkyCittc2dpZCAiYmlzZWN0IHJ1biBzdWNjZXNzIgorbXNnc3RyICJwYXMgZGUgYmlzZWNjacOzIHJlZWl4aXQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzAwCittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICJObyBlc3RlbSBiaXNlY2FudC4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjQ2Cittc2dpZCAiIgorIkVycm9yOiBZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisibWVyZ2UiCittc2dzdHIgIiIKKyJFcnJvcjogRWxzIHZvc3RyZXMgY2FudmlzIGxvY2FscyBhbHMgZml0eGVycyBzZWfDvGVudHMgc2Ugc29icmVlc2NyaXVyaWVuIHBlciAiCisiZnVzaW9uYXIiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIkxhIGZ1c2nDsyBhdXRvbcOgdGljYSBubyBoYSBmdW5jaW9uYXQuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MgorbXNnaWQgIlNob3VsZCBub3QgYmUgZG9pbmcgYW4gb2N0b3B1cy4iCittc2dzdHIgIk5vIHMnaGEgZGUgZmVyIHVuIHBvcC4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjb21tb24gY29tbWl0IHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHRyb2JhciBjYXAgY29taXNzacOzIGVuIGNvbcO6IGFtYiAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjc3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUgd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIkphIGVzdMOgIGFsIGRpYSBhbWIgJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHRvOiAkcHJldHR5X25hbWUiCittc2dzdHIgIlMnZXN0w6AgYXZhbsOnYW50IHLDoHBpZGFtZW50IGE6ICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6OTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIlMnZXN0w6AgaW50ZW50YW50IHVuYSBmdXNpw7Mgc2ltcGxlIGFtYiAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjEwMgorbXNnaWQgIlNpbXBsZSBtZXJnZSBkaWQgbm90IHdvcmssIHRyeWluZyBhdXRvbWF0aWMgbWVyZ2UuIgorbXNnc3RyICIiCisiTGEgZnVzacOzIHNpbXBsZSBubyBoYSBmdW5jaW9uYXQsIHMnZXN0w6AgaW50ZW50YW50IHVuYSBmdXNpw7MgYXV0b23DoHRpY2EuIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIyMQorbXNnaWQgIkNhbm5vdCByZW1vdmUgdGVtcG9yYXJ5IGluZGV4IChjYW4ndCBoYXBwZW4pIgorbXNnc3RyICJObyBlcyBwb3QgZWxpbWluYXIgbCfDrW5kZXggdGVtcG9yYWwgKGFpeMOyIG5vIHBvdCBwYXNzYXIpIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjI3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAkcmVmX3N0YXNoIHdpdGggJHdfY29tbWl0IgorbXNnc3RyICJObyBlcyBwb3QgYWN0dWFsaXR6YXIgJHJlZl9zdGFzaCBhbWIgJHdfY29tbWl0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAkc3Rhc2hfbXNnIgorbXNnc3RyICJTJ2hhbiBkZXNhdCBlbCBkaXJlY3RvcmkgZGUgdHJlYmFsbCBpIGwnZXN0YXQgZCfDrW5kZXggJHN0YXNoX21zZyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICJvcGNpw7MgZGVzY29uZWd1ZGE6ICRvcHQiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICJTJ2hhbiBlc3BlY2lmaWNhdCBtYXNzYSByZXZpc2lvbnM6ICRSRVYiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZSBubyDDqXMgdW5hIHJlZmVyw6huY2lhIHbDoGxpZGEiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICInJGFyZ3MnIG5vIMOpcyB1bmEgY29taXNzacOzIGRlIHRpcHVzIG1hZ2F0emVtIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIickYXJncycgbm8gw6lzIHVuYSByZWZlcsOobmNpYSBkZSBtYWdhdHplbSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MTgKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhY3R1YWxpdHphciBsJ8OtbmRleCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MjIKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIk5vIGVzIHBvdCBhcGxpY2FyIHVuIG1hZ2F0emVtIGVubWlnIGQndW5hIGZ1c2nDsyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzAKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICJIaSBoYSBjb25mbGljdGVzIGVuIGwnw61uZGV4LiBQcm92ZXUtaG8gc2Vuc2UgLS1pbmRleC4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMyCittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBkZXNhciBsJ2FyYnJlIGQnw61uZGV4IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY0MQorbXNnaWQgIkNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIGVudHJ5IgorbXNnc3RyICJObyBzJ2hhbiBwb2d1dCByZXN0YXVyYXIgZWxzIGZpdHhlcnMgbm8gc2VndWl0cyBkZXMgZGVsIMKrc3Rhc2jCuyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NjYKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiTm8gZXMgcG90IGZlciDCq3Vuc3RhZ2XCuyBkZWxzIGZpdHhlcnMgbW9kaWZpY2F0cyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgIiR7UkVWfSAoJHMpIGRlc2NhcnRhZGEiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIke1JFVn06IE5vIHMnaGEgcG9ndXQgZGVzY2FydGFyIGwnZW50cmFkYSBkZSBtYWdhdHplbSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3OTIKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIihQZXIgcmVzdGF1cmFyLWxlcyB0ZWNsZWdldSBcImdpdCBzdGFzaCBhcHBseVwiKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMDIKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIkVsIGNhbcOtIHJlbGF0aXUgbm9tw6lzIGVzIHBvdCB1c2FyIGRlcyBkZWwgbml2ZWxsIHN1cGVyaW9yIGRlIGwnYXJicmUgZGUgIgorInRyZWJhbGwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJyZXBvIFVSTDogJyRyZXBvJyBtdXN0IGJlIGFic29sdXRlIG9yIGJlZ2luIHdpdGggLi98Li4vIgorbXNnc3RyICJVUkwgZGUgZGlww7JzaXQ6ICckcmVwbycgaGEgZGUgc2VyIGFic29sdXQgbyBjb21lbsOnYXIgYW1iIC4vfC4uLyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IgorbXNnc3RyICInJHNtX3BhdGgnIGphIGV4aXN0ZWl4IGVuIGwnw61uZGV4IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiJyRzbV9wYXRoJyBqYSBleGlzdGVpeCBlbiBsJ8OtbmRleCBpIG5vIMOpcyBzdWJtw7JkdWwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQxCisjLCBmdXp6eSwgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0IgorbXNnc3RyICJlbCBjYW3DrSDCqyVzwrsgbm8gdMOpIGxhIHNldmEgdmVyc2nDsyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorIiRzbV9wYXRoXG4iCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorbXNnc3RyICIiCisiRWwgY2Ftw60gc2Vnw7xlbnQgcydpZ25vcmEgcGVyIHVuIGRlbHMgdm9zdHJlcyBmaXR4ZXJzIC5naXRpZ25vcmU6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2V1IC1mIHNpIHJlYWxtZW50IHZvbGV1IGFmZWdpci1sby4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgZXhpc3RpbmcgcmVwbyBhdCAnJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiUydlc3TDoCBhZmVnaW50IGVsIGRpcMOyc2l0IGV4aXN0ZW50IGEgJyRzbV9wYXRoJyBhIGwnw61uZGV4IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIickc21fcGF0aCcgamEgZXhpc3RlaXggaSBubyDDqXMgdW4gZGlww7JzaXQgZGUgZ2l0IHbDoGxpZCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAiIgorIkVzIHRyb2JhIHVuIGRpcmVjdG9yaSBkZSBnaXQgcGVyIGEgJyRzbV9uYW1lJyBsb2NhbG1lbnQgYW1iIGVscyByZW1vdHM6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbVxuIgorIiAgJHJlYWxyZXBvXG4iCisidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgIgorInJlcG9cbiIKKyJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyAiCisib3B0aW9uLiIKK21zZ3N0ciAiIgorIlNpIHZvbGV1IHJldXNhciBhcXVlc3QgZGlyZWN0b3JpIGRlIGdpdCBsb2NhbCBlbiBsbG9jIGRlIGNsb25hciBkZSBub3UgZGVcbiIKKyIgICRyZWFscmVwb1xuIgorInVzZXUgbCdvcGNpw7MgJy0tZm9yY2UnLiBTaSBlbCBkaXJlY3RvcmkgZGUgZ2l0IGxvY2FsIG5vIMOpcyBlbCBkaXDDsnNpdCAiCisiY29ycmVjdGVcbiIKKyJvIG5vIGVzdGV1IHNlZ3VyIGRlIHF1w6ggdm9sIGRpciBhaXjDsiwgdHJpZXUgdW4gYWx0cmUgbm9tIGFtYiBsJ29wY2nDsyAnLS0iCisibmFtZScuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4OAorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnJHNtX25hbWUnLiIKK21zZ3N0ciAiIgorIlMnZXN0w6AgcmVhY3RpdmFudCBlbCBkaXJlY3RvcmkgZGUgZ2l0IGxvY2FsIHBlciBhbCBzdWJtw7JkdWwgJyRzbV9uYW1lJy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYWdhZmFyIGVsIHN1Ym3DsmR1bCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhZmVnaXIgZWwgc3VibcOyZHVsICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gcmVnaXN0cmFyIGVsIHN1Ym3DsmR1bCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU4MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgdHJvYmFyIGxhIHJldmlzacOzIGFjdHVhbCBlbiBlbCBjYW3DrSBkZSBzdWJtw7JkdWwgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnRlbmlyIGVuIGVsIGNhbcOtIGRlIHN1Ym3DsmR1bCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICIKKyInJHNtX3BhdGgnIgorbXNnc3RyICIiCisiTm8gcydoYSBwb2d1dCB0cm9iYXIgbGEgcmV2aXNpw7MgYWN0dWFsIGRlICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSBlbiBlbCAiCisiY2Ftw60gZGUgc3VibcOyZHVsICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjEzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOyB0cnlpbmcgdG8gZGlyZWN0bHkgZmV0Y2ggIgorIiRzaGExOiIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgb2J0ZW5pciBlbiBlbCBjYW3DrSBkZSBzdWJtw7JkdWwgwqskZGlzcGxheXBhdGjCuzsgcydlc3TDoCAiCisiaW50ZW50YW50IG9idGVuaXIgZGlyZWN0YW1lbnQgJHNoYTE6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkZldGNoZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcsIGJ1dCBpdCBkaWQgbm90IGNvbnRhaW4gJHNoYTEuICIKKyJEaXJlY3QgZmV0Y2hpbmcgb2YgdGhhdCBjb21taXQgZmFpbGVkLiIKK21zZ3N0ciAiIgorIlMnaGEgb2J0aW5ndXQgZW4gZWwgY2Ftw60gZGUgc3VibcOyZHVsIMKrJGRpc3BsYXlwYXRowrssIHBlcsOyIG5vIGNvbnRlbmlhICRzaGExLiAiCisiTCdvYnRlbmNpw7MgZGlyZWN0YSBkJ2FxdWVsbGEgY29taXNzacOzIGhhIGZhbGxhdC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhZ2FmYXIgwqskc2hhMcK7IGVuIGVsIGNhbcOtIGRlIHN1Ym3DsmR1bCDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyNworIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCittc2dzdHIgIkNhbcOtIGRlIHN1Ym3DsmR1bCDCqyRkaXNwbGF5cGF0aMK7OiBzJ2hhIGFnYWZhdCDCqyRzaGExwrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJObyBzJ2hhIHBvZ3V0IGZlciDCq3JlYmFzZcK7IMKrJHNoYTHCuycgZW4gZWwgY2Ftw60gZGUgc3VibcOyZHVsIMKrJGRpc3BsYXlwYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjMyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIkNhbcOtIGRlIHN1Ym3DsmR1bCDCqyRkaXNwbGF5cGF0aMK7OiBzJ2hhIGZldCDCq3JlYmFzZcK7IGVuIMKrJHNoYTHCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGZ1c2lvbmFyIMKrJHNoYTHCuyBlbiBlbCBjYW3DrSBkZSBzdWJtw7JkdWwgwqskZGlzcGxheXBhdGjCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBtZXJnZWQgaW4gJyRzaGExJyIKK21zZ3N0ciAiQ2Ftw60gZGUgc3VibcOyZHVsIMKrJGRpc3BsYXlwYXRowrs6IHMnaGEgZnVzaW9uYXQgZW4gwqskc2hhMcK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiTCdleGVjdWNpw7MgZGUgwqskY29tbWFuZCAkc2hhMcK7IGhhIGZhbGxhdCBlbiBlbCBjYW3DrSBkZSBzdWJtw7JkdWwgIgorIsKrJGRpc3BsYXlwYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKK21zZ3N0ciAiQ2Ftw60gZGUgc3VibcOyZHVsIMKrJGRpc3BsYXlwYXRowrs6IMKrJGNvbW1hbmQgJHNoYTHCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHJlY29ycmUgcmVjdXJzaXZhbWVudCBkaW5zIGRlbCBjYW3DrSBkZSBzdWJtw7JkdWwgIgorIsKrJGRpc3BsYXlwYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODg2Cittc2dpZCAiVGhlIC0tY2FjaGVkIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSAtLWZpbGVzIG9wdGlvbiIKK21zZ3N0ciAiTCdvcGNpw7MgLS1jYWNoZWQgbm8gZXMgcG90IHVzYXIgYW1iIGwnb3BjacOzIC0tZmlsZXMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTM4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG1vZGUgJG1vZF9kc3QiCittc2dzdHIgIm1vZGUgaW5lc3BlcmF0ICRtb2RfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgIEF2w61zOiAkZGlzcGxheV9uYW1lIG5vIGNvbnTDqSBsYSBjb21pc3Npw7MgJHNoYTFfc3JjIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk2MQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgIEF2w61zOiAkZGlzcGxheV9uYW1lIG5vIGNvbnTDqSBsYSBjb21pc3Npw7MgJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk2NAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIgIEF2w61zOiAkZGlzcGxheV9uYW1lIG5vIGNvbnTDqSBsZXMgY29taXNzaW9ucyAkc2hhMV9zcmMgaSAkc2hhMV9kc3QiCisKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNlZSBnaXQtJHtjbWR9KDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiVmVnZXUgZ2l0LSR7Y21kfSgxKSBwZXIgZGV0YWxscy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDkKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC4iCittc2dzdHIgIlMnaGEgYXBsaWNhdCBsJ8KrYXV0b3N0YXNowrsuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgIk5vIGVzIHBvdCBlbW1hZ2F0emVtYXIgJHN0YXNoX3NoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzaW5nICgkbmV3X2NvdW50LyR0b3RhbCkiCittc2dzdHIgIlMnZXN0w6AgZmVudCDCq3JlYmFzZcK7ICgkbmV3X2NvdW50LyR0b3RhbCkiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMDcKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk9yZHJlczpcbiIKKyIgcCwgcGljayA8Y29taXNzacOzPiA9IHVzYSBsYSBjb21pc3Npw7NcbiIKKyIgciwgcmV3b3JkIDxjb21pc3Npw7M+ID0gdXNhIGxhIGNvbWlzc2nDsywgcGVyw7IgZWRpdGEgZWwgbWlzc2F0Z2UgZGUgY29taXNzacOzXG4iCisiIGUsIGVkaXQgPGNvbWlzc2nDsz4gPSB1c2EgbGEgY29taXNzacOzLCBwZXLDsiBhdHVyYSd0IHBlciBhIGVzbWVuYXJcbiIKKyIgcywgc3F1YXNoIDxjb21pc3Npw7M+ID0gdXNhIGxhIGNvbWlzc2nDsywgcGVyw7IgZnVzaW9uYSdsIGEgbGEgY29taXNzacOzIHByw6h2aWFcbiIKKyIgZiwgZml4dXAgPGNvbWlzc2nDsz4gPSBjb20gXCJzcXVhc2hcIiwgcGVyw7IgZGVzY2FydGEgZWwgbWlzc2F0Z2UgZGUgcmVnaXN0cmUgZCdhcXVlc3RhICIKKyJjb21pc3Npw7NcbiIKKyIgeCwgZXhlYyA9IGV4ZWN1dGEgbCdvcmRyZSAobGEgcmVzdGEgZGUgbGEgbMOtbmlhKSB1c2FudCBsJ2ludMOocnByZXQgIgorImQnb3JkcmVzXG4iCisiIGQsIGRyb3AgPSBlbGltaW5hIGxhIGNvbWlzc2nDs1xuIgorIlxuIgorIkVzIHBvdCBjYW52aWFyIGwnb3JkcmUgZCdhcXVlc3RlcyBsw61uaWVzOyBzJ2V4ZWN1dGVuIGRlIGRhbHQgYSBiYWl4LlxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJQb2RldSBlc21lbmFyIGxhIGNvbWlzc2nDsyBhcmEsIGFtYlxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiVW5hIHZlZ2FkYSBxdWUgZXN0aWd1ZXUgc2F0aXNmZXQgYW1iIGVscyB2b3N0cmVzIGNhbnZpcywgZXhlY3V0ZXVcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjI5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHNoYTE6IG5vdCBhIGNvbW1pdCB0aGF0IGNhbiBiZSBwaWNrZWQiCittc2dzdHIgIiRzaGExOiBubyDDqXMgdW5hIGNvbWlzc2nDsyBxdWUgZXMgcHVndWkgZXNjb2xsaXIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozMzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWl0IG5hbWU6ICRzaGExIgorbXNnc3RyICJOb20gZGUgY29taXNzacOzIG5vIHbDoGxpZDogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozNjQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIgorbXNnc3RyICJObyBlcyBwb3QgZXNjcml1cmUgZWwgc2hhMSByZWVtcGxhw6dhbnQgZGUgbGEgY29taXNzacOzIGFjdHVhbCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICJBdmFuw6cgcsOgcGlkIGEgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIk5vIGVzIHBvdCBhdmFuw6dhciByw6BwaWRhbWVudCBhICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgbW92ZSBIRUFEIHRvICRmaXJzdF9wYXJlbnQiCittc2dzdHIgIk5vIGVzIHBvdCBtb3VyZSBIRUFEIGEgJGZpcnN0X3BhcmVudCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gc3F1YXNoIGEgbWVyZ2U6ICRzaGExIgorbXNnc3RyICJTJ2VzdMOgIHJlZnVzYW50IGZlciDCq3NxdWFzaMK7IGEgdW5hIGZ1c2nDszogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCittc2dzdHIgIkVycm9yIGVuIHJlZmVyIGxhIGZ1c2nDsyAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBpY2sgJHNoYTEiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZXNjb2xsaXIgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMke259OiIKK21zZ3N0ciAiQXF1ZXN0IMOpcyBlbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MgbsO6bS4gJHtufToiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJHtufSB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJFbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MgbsO6bS4gJHtufSBzJ29tZXRyw6A6IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdC4iCittc2dpZF9wbHVyYWwgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0cy4iCittc2dzdHJbMF0gIkFpeMOyIMOpcyB1bmEgY29tYmluYWNpw7MgZGUgJGNvdW50IGNvbWlzc2nDsy4iCittc2dzdHJbMV0gIkFpeMOyIMOpcyB1bmEgY29tYmluYWNpw7MgZGUgJGNvdW50IGNvbWlzc2lvbnMuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgJGZpeHVwX21zZyIKK21zZ3N0ciAiTm8gZXMgcG90IGVzY3JpdXJlICRmaXh1cF9tc2ciCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTUKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgMiBjb21taXRzLiIKK21zZ3N0ciAiQWl4w7Igw6lzIHVuYSBjb21iaW5hY2nDsyBkZSAyIGNvbWlzc2lvbnMuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTM2IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1NzkKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1ODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAkc2hhMS4uLiAkcmVzdCIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhcGxpY2FyICRzaGExLi4uICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFtZW5kIGNvbW1pdCBhZnRlciBzdWNjZXNzZnVsbHkgcGlja2luZyAkc2hhMS4uLiAkcmVzdFxuIgorIlRoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlLCBvciB0aGUgcHJlLWNvbW1pdCBob29rXG4iCisiZmFpbGVkLiBJZiB0aGUgcHJlLWNvbW1pdCBob29rIGZhaWxlZCwgeW91IG1heSBuZWVkIHRvIHJlc29sdmUgdGhlIGlzc3VlICIKKyJiZWZvcmVcbiIKKyJ5b3UgYXJlIGFibGUgdG8gcmV3b3JkIHRoZSBjb21taXQuIgorbXNnc3RyICIiCisiTm8gcydoYSBwb2d1dCBlc21lbmFyIGxhIGNvbWlzc2nDsyBkZXNwcsOpcyBkJ2VzY29sbGlyIGFtYiDDqHhpdCAkc2hhMS4uLiAiCisiJHJlc3RcbiIKKyJBaXjDsiDDqXMgcHJvYmFibGVtZW50IGEgY2F1c2EgZCd1biBtaXNzYXRnZSBkZSBjb21pc3Npw7MgYnVpdCwgbyBlbCBsbGlnYW0gZGVcbiIKKyJwcmVjb21pc3Npw7MgaGEgZmFsbGF0LiBTaSBlbCBsbGlnYW0gZGUgcHJlY29taXNzacOzIGhhIGZhbGxhdCwgcG90IHNlciBxdWVcbiIKKyJuZWNlc3NpdGV1IHJlc29sZHJlIGVsIHByb2JsZW1hIGFiYW5zIHF1ZSBwdWd1ZXUgY2FudmlhciBlbCBtaXNzYXRnZSBkZVxuIgorImNvbWlzc2nDsy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJHNoYTFfYWJicmV2Li4uICRyZXN0IgorbXNnc3RyICJTJ2hhIGF0dXJhdCBhICRzaGExX2FiYnJldi4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICckc3F1YXNoX3N0eWxlJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICJObyBlcyBwb3QgJyRzcXVhc2hfc3R5bGUnIHNlbnNlIHVuYSBjb21pc3Npw7MgcHLDqHZpYSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY4MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nOiAkcmVzdCIKK21zZ3N0ciAiUydlc3TDoCBleGVjdXRhbnQ6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gZmFpbGVkOiAkcmVzdCIKK21zZ3N0ciAiTCdleGVjdWNpw7MgaGEgZmFsbGF0OiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5MworbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJpIGhhIGZldCBjYW52aXMgYSBsJ8OtbmRleCBvIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5NQorbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJQb2RldSBhcnJlZ2xhciBlbCBwcm9ibGVtYSwgaSBsbGF2b3JzIGV4ZWN1dGV1XG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyMuIFRSQU5TTEFUT1JTOiBhZnRlciB0aGVzZSBsaW5lcyBpcyBhIGNvbW1hbmQgdG8gYmUgaXNzdWVkIGJ5IHRoZSB1c2VyCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRXhlY3V0aW9uIHN1Y2NlZWRlZDogJHJlc3RcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiTCdleGVjdWNpw7MgaGEgdGluZ3V0IMOoeGl0OiAkcmVzdFxuIgorInBlcsOyIGhhIGRlaXhhdCBjYW52aXMgYSBsJ8OtbmRleCBvIGwnYXJicmUgZGUgdHJlYmFsbFxuIgorIkNvbWV0ZXUgbyBlbW1hZ2F0emVtZXUgZWxzIHZvc3RyZXMgY2FudmlzLCBpIGxsYXZvcnMgZXhlY3V0ZXVcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21tYW5kOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKK21zZ3N0ciAiT3JkcmUgZGVzY29uZWd1ZGE6ICRjb21tYW5kICRzaGExICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzIwCittc2dpZCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgIkNvcnJlZ2l1LWhvIHVzYW50IMKrZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb8K7LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc1NQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCittc2dzdHIgIlMnaGEgZmV0IMKrcmViYXNlwrsgaSBhY3R1YWxpdHphdCAkaGVhZF9uYW1lIGFtYiDDqHhpdC4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTIKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZWxpbWluYXIgQ0hFUlJZX1BJQ0tfSEVBRCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlXG4iCisic3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIlRlbml1IGNhbnZpcyDCq3N0YWdlwrsgZW4gZWwgdm9zdHJlIGFyYnJlIGRlIHRyZWJhbGwuXG4iCisiU2kgYXF1ZXN0cyBjYW52aXMgc8OzbiBwZXIgZmVyIMKrc3F1YXNowrtcbiIKKyJhIGxhIGNvbWlzc2nDsyBwcsOodmlhLCBleGVjdXRldTpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIlNpIHPDs24gcGVyIGEgZm9ybWFyIHVuYSBjb21pc3Npw7Mgbm92YSwgZXhlY3V0ZXU6XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiRW4gYW1iZMOzcyBjYXNvcywgcXVhbiBow6BnaXUgdGVybWluYXQsIGNvbnRpbnVldSBhbWI6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgzNAorbXNnaWQgIkVycm9yIHRyeWluZyB0byBmaW5kIHRoZSBhdXRob3IgaWRlbnRpdHkgdG8gYW1lbmQgY29tbWl0IgorbXNnc3RyICIiCisiSGkgaGEgaGFndXQgdW4gZXJyb3IgZW4gaW50ZW50YXIgdHJvYmFyIGxhIGlkZW50aXRhdCBkJ2F1dG9yIHBlciBhIGVzbWVuYXIgIgorImxhIGNvbWlzc2nDsyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgzOQorbXNnaWQgIiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisiVGVuaXUgY2FudmlzIG5vIGNvbWVzb3MgZW4gZWwgdm9zdHJlIGFyYnJlIGRlIHRyZWJhbGwuIFxuIgorIlByaW1lciBjb21ldGV1LWxvcyBpIGRlc3Byw6lzIGV4ZWN1dGV1IMKrZ2l0IHJlYmFzZSAtLWNvbnRpbnVlwrsgZGUgbm91LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0NCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ4Cittc2dpZCAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIk5vIHMnaGFuIHBvZ3V0IGNvbWV0cmUgZWxzIGNhbnZpcyDCq3N0YWdlZMK7LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg3OSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTY1Cittc2dpZCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyIGwnZWRpdG9yIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhZ2FmYXIgJHN3aXRjaF90byIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwNworbXNnaWQgIk5vIEhFQUQ/IgorbXNnc3RyICJObyBoaSBoYSBjYXAgSEVBRD8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICRzdGF0ZV9kaXIiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgY3JlYXIgZWwgJHN0YXRlX2RpciB0ZW1wb3JhbCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkxMQorbXNnaWQgIkNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG1hcmNhciBjb20gYSBpbnRlcmFjdGl1IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZHMpIgorbXNnc3RyWzBdICJGZXMgwqtyZWJhc2XCuyAkc2hvcnRyZXZpc2lvbnMgc29icmUgJHNob3J0b250byAoJHRvZG9jb3VudCBvcmRyZSkiCittc2dzdHJbMV0gIkZlcyDCq3JlYmFzZcK7ICRzaG9ydHJldmlzaW9ucyBzb2JyZSAkc2hvcnRvbnRvICgkdG9kb2NvdW50IG9yZHJlcykiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5OTcgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEwMDIKK21zZ2lkICJDb3VsZCBub3QgaW5pdCByZXdyaXR0ZW4gY29tbWl0cyIKK21zZ3N0ciAiTm8gcydoYW4gcG9ndXQgaW5pY2lhciBsZXMgY29taXNzaW9ucyByZWVzY3JpdGVzIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6ODkgZ2l0LXNoLXNldHVwLnNoOjk0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJGRhc2hsZXNzICRVU0FHRSIKK21zZ3N0ciAiw7pzOiAkZGFzaGxlc3MgJFVTQUdFIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgY2hkaXIgdG8gJGNkdXAsIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisiTm8gZXMgcG90IGNhbnZpYXIgZGUgZGlyZWN0b3JpIGEgJGNkdXAsIGVsIG5pdmVsbCBzdXBlcmlvciBkZSBsJ2FyYnJlIGRlICIKKyJ0cmViYWxsIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjAwIGdpdC1zaC1zZXR1cC5zaDoyMDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiAkcHJvZ3JhbV9uYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICJmYXRhbDogbm8gZXMgcG90IHVzYXIgJHByb2dyYW1fbmFtZSBzZW5zZSB1biBhcmJyZSBkZSB0cmViYWxsLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyMQorbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJObyBlcyBwb3QgZmVyIMKrcmViYXNlwrs6IHRlbml1IGNhbnZpcyDCq3Vuc3RhZ2VkwrsuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI0Cittc2dpZCAiQ2Fubm90IHJld3JpdGUgYnJhbmNoZXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJObyBlcyBwb2RlbiByZWVzY3JpdXJlIGJyYW5xdWVzOiBUZW5pdSBjYW52aXMgwqt1bnN0YWdlZMK7LiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNworbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiTm8gZXMgcG90IGJhaXhhciBmZW50IMKrcmViYXNlwrs6IFRlbml1IGNhbnZpcyDCq3Vuc3RhZ2VkwrsuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIk5vIGVzIHBvdCAkYWN0aW9uOiBUZW5pdSBjYW52aXMgwqt1bnN0YWdlZMK7LiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0MworbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIk5vIGVzIHBvdCBmZXIgwqtyZWJhc2XCuzogRWwgdm9zdHJlIMOtbmRleCBjb250w6kgY2FudmlzIHNlbnNlIGNvbWV0cmUuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ2Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJObyBlcyBwb3QgYmFpeGFyIGZlbnQgwqtyZWJhc2XCuzogRWwgdm9zdHJlIMOtbmRleCBjb250w6kgY2FudmlzIHNlbnNlIGNvbWV0cmUuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiTm8gZXMgcG90ICRhY3Rpb246IEVsIHZvc3RyZSDDrW5kZXggY29udMOpIGNhbnZpcyBzZW5zZSBjb21ldHJlLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI1MworbXNnaWQgIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiQWRkaWNpb25hbG1lbnQsIGVsIHZvc3RyZSDDrW5kZXggY29udMOpIGNhbnZpcyBzZW5zZSBjb21ldHJlLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3MworbXNnaWQgIllvdSBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIiIKKyJIZXUgZCdleGVjdXRhciBhcXVlc3RhIG9yZHJlIGRlcyBkZWwgbml2ZWxsIHN1cGVyaW9yIGRlIGwnYXJicmUgZGUgdHJlYmFsbC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDozNzgKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIGFic29sdXRlIHBhdGggb2YgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBkZXRlcm1pbmFyIGVsIGNhbcOtIGFic29sdXQgZGVsIGRpcmVjdG9yaSBkZSBnaXQiCisKKyMuIFRSQU5TTEFUT1JTOiB5b3UgY2FuIGFkanVzdCB0aGlzIHRvIGFsaWduICJnaXQgYWRkIC1pIiBzdGF0dXMgbWVudQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJTEycyAlMTJzICVzIgorbXNnc3RyICIlMTJzICUxMnMgJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInRvdWNoZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ0b3VjaGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIm1vZGlmaWNhdCAlZCBjYW3DrVxuIgorbXNnc3RyWzFdICJtb2RpZmljYXQgJWQgY2FtaW5zXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1MworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy4iCittc2dzdHIgIiIKKyJTaSBlbCBwZWRhw6cgcydhcGxpY2EgY29ycmVjdGFtZW50LCBlbCB0cm9zIGVkaXRhdCBlcyBtYXJjYXLDoCBpbW1lZGlhdGFtZW50XG4iCisicGVyIMKrc3RhZ2luZ8K7LiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDU2Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFzaGluZy4iCittc2dzdHIgIiIKKyJTaSBlbCBwZWRhw6cgcydhcGxpY2EgY29ycmVjdGFtZW50LCBlbCB0cm9zIGVkaXRhdCBlcyBtYXJjYXLDoCBpbW1lZGlhdGFtZW50XG4iCisicGVyIMKrc3Rhc2hpbmfCuy4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1OQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgdW5zdGFnaW5nLiIKK21zZ3N0ciAiIgorIlNpIGVsIHBlZGHDpyBzJ2FwbGljYSBjb3JyZWN0YW1lbnQsIGVsIHRyb3MgZWRpdGF0IGVzIG1hcmNhcsOgIGltbWVkaWF0YW1lbnRcbiIKKyJwZXIgwqt1bnN0YWdpbmfCuy4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzEKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgYXBwbHlpbmcuIgorbXNnc3RyICIiCisiU2kgZWwgcGVkYcOnIHMnYXBsaWNhIGNvcnJlY3RhbWVudCwgZWwgdHJvcyBlZGl0YXQgZXMgbWFyY2Fyw6AgaW1tZWRpYXRhbWVudFxuIgorInBlciBhcGxpY2FyLXNlLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc0Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBkaXNjYXJkaW5nLiIKK21zZ3N0ciAiIgorIlNpIGVsIHBlZGHDpyBzJ2FwbGljYSBjb3JyZWN0YW1lbnQsIGVsIHRyb3MgZWRpdGF0IGVzIG1hcmNhcsOgIGltbWVkaWF0YW1lbnRcbiIKKyJwZXIgZGVzY2FydGFyLXNlLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTExCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlc2NyaXVyZSBhbCBmaXR4ZXIgZCdlZGljacOzIGRlbCB0cm9zOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJXMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisiLS0tXG4iCisiUGVyIHN1cHJpbWlyIMKrJXPCuyBsw61uaWVzLCBmZXUtbGVzIGzDrW5pZXMgJyAnIChjb250ZXh0KS5cbiIKKyJQZXIgc3VwcmltaXIgwqslc8K7IGzDrW5pZXMsIHN1cHJpbWl1LWxlcy5cbiIKKyJMZXMgbMOtbmllcyBxdWUgY29tZW5jaW4gcGVyICVzIHNlcmFuIHN1cHJpbWlkZXMuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTE0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3IgcmVhZGluZzogJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbGxlZ2lyIGFsIGZpdHhlciBkJ2VkaWNpw7MgZGVsIHRyb3M6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNDgKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gZmVzIMKrc3RhZ2XCuyBkJ2FxdWVzdCB0cm9zXG4iCisibiAtIG5vIGZhY2lzIMKrc3RhZ2XCuyBkJ2FxdWVzdCB0cm9zXG4iCisicSAtIHN1cnQ7IG5vIGZhY2lzIMKrc3RhZ2XCuyBkJ2FxdWVzdCB0cm9zIG8gZGUgY2FwIGFsdHJlIHJlc3RhbnRcbiIKKyJhIC0gZmVzIMKrc3RhZ2XCuyBkJ2FxdWVzdCB0cm9zIGkgdG90YSBsYSByZXN0YSBkZSB0cm9zc29zIGRlbCBmaXR4ZXJcbiIKKyJkIC0gbm8gZmFjaXMgwqtzdGFnZcK7IGQnYXF1ZXN0IHRyb3MgbyBkZSBjYXAgYWx0cmUgcmVzdGFudCBkZWwgZml0eGVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNTQKK21zZ2lkICIiCisieSAtIHN0YXNoIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFzaCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gZmVzIMKrc3Rhc2jCuyBkJ2FxdWVzdCB0cm9zXG4iCisibiAtIG5vIGZhY2lzIMKrc3Rhc2jCuyBkJ2FxdWVzdCB0cm9zXG4iCisicSAtIHN1cnQ7IG5vIGZhY2lzIMKrc3Rhc2jCuyBkJ2FxdWVzdCB0cm9zIG8gZGUgY2FwIGFsdHJlIHJlc3RhbnRcbiIKKyJhIC0gZmVzIMKrc3Rhc2jCuyBkJ2FxdWVzdCB0cm9zIGkgdG90YSBsYSByZXN0YSBkZSB0cm9zc29zIGRlbCBmaXR4ZXJcbiIKKyJkIC0gbm8gZmFjaXMgwqtzdGFzaMK7IGQnYXF1ZXN0IHRyb3MgbyBkZSBjYXAgYWx0cmUgcmVzdGFudCBkZWwgZml0eGVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNjAKK21zZ2lkICIiCisieSAtIHVuc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSB1bnN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGZlcyDCq3Vuc3RhZ2XCuyBkJ2FxdWVzdCB0cm9zXG4iCisibiAtIG5vIGZhY2lzIMKrdW5zdGFnZcK7IGQnYXF1ZXN0IHRyb3NcbiIKKyJxIC0gc3VydDsgbm8gZmFjaXMgwqt1bnN0YWdlwrsgZCdhcXVlc3QgdHJvcyBvIGRlIGNhcCBhbHRyZSByZXN0YW50XG4iCisiYSAtIGZlcyDCq3Vuc3RhZ2XCuyBkJ2FxdWVzdCB0cm9zIGkgdG90YSBsYSByZXN0YSBkZSB0cm9zc29zIGRlbCBmaXR4ZXJcbiIKKyJkIC0gbm8gZmFjaXMgwqt1bnN0YWdlwrsgZCdhcXVlc3QgdHJvcyBvIGRlIGNhcCBhbHRyZSByZXN0YW50IGRlbCBmaXR4ZXIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBhcGxpY2EgYXF1ZXN0IHRyb3MgYSBsJ8OtbmRleFxuIgorIm4gLSBubyBhcGxpcXVpcyBhcXVlc3QgdHJvcyBhIGwnw61uZGV4XG4iCisicSAtIHN1cnQ7IG5vIGFwbGlxdWlzIGFxdWVzdCB0cm9zIG5pIGNhcCBkZWxzIHBlbmRlbnRzXG4iCisiYSAtIGFwbGljYSBhcXVlc3QgdHJvcyBpIHRvdHMgZWxzIHRyb3Nzb3MgcG9zdGVyaW9ycyBlbiBlbCBmaXR4ZXJcbiIKKyJkIC0gbm8gYXBsaXF1aXMgYXF1ZXN0IHRyb3MgbmkgY2FwIGRlbHMgdHJvc3NvcyBwb3N0ZXJpb3JzIGVuIGVsIGZpdHhlciIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5MAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGRlc2NhcnRhIGFxdWVzdCB0cm9zIGRlIGwnYXJicmUgZGUgdHJlYmFsbFxuIgorIm4gLSBubyBkZXNjYXJ0aXMgYXF1ZXN0IHRyb3MgZGVzIGRlIGwnYXJicmUgZGUgdHJlYmFsbFxuIgorInEgLSBzdXJ0OyBubyBhcGxpcXVpcyBhcXVlc3QgdHJvcyBuaSBjYXAgZGVscyBwZW5kZW50c1xuIgorImEgLSBkZXNjYXJ0YSBhcXVlc3QgdHJvcyBpIHRvdHMgZWxzIHRyb3Nzb3MgcG9zdGVyaW9ycyBlbiBlbCBmaXR4ZXJcbiIKKyJkIC0gbm8gZGVzY2FydGlzIGFxdWVzdCB0cm9zIG5pIGNhcCBkZWxzIHRyb3Nzb3MgcG9zdGVyaW9ycyBlbiBlbCBmaXR4ZXIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3OAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gZGVzY2FydGEgYXF1ZXN0IHRyb3MgZGUgbCfDrW5kZXggaSBkZSBsJ2FyYnJlIGRlIHRyZWJhbGxcbiIKKyJuIC0gbm8gZGVzY2FydGlzIGFxdWVzdCB0cm9zIGRlcyBkZSBsJ8OtbmRleCBpIGRlIGwnYXJicmUgZGUgdHJlYmFsbFxuIgorInEgLSBzdXJ0OyBubyBhcGxpcXVpcyBhcXVlc3QgdHJvcyBuaSBjYXAgZGVscyBwZW5kZW50c1xuIgorImEgLSBkZXNjYXJ0YSBhcXVlc3QgdHJvcyBpIHRvdHMgZWxzIHRyb3Nzb3MgcG9zdGVyaW9ycyBlbiBlbCBmaXR4ZXJcbiIKKyJkIC0gbm8gZGVzY2FydGlzIGFxdWVzdCB0cm9zIG5pIGNhcCBkZWxzIHRyb3Nzb3MgcG9zdGVyaW9ycyBlbiBlbCBmaXR4ZXIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI4NAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGFwbGljYSBhcXVlc3QgdHJvcyBhIGwnw61uZGV4IGkgbCdhcmJyZSBkZSB0cmViYWxsXG4iCisibiAtIG5vIGFwbGlxdWlzIGFxdWVzdCB0cm9zIGRlcyBkZSBsJ8OtbmRleCBpIGRlIGwnYXJicmUgZGUgdHJlYmFsbFxuIgorInEgLSBzdXJ0OyBubyBhcGxpcXVpcyBhcXVlc3QgdHJvcyBuaSBjYXAgZGVscyBwZW5kZW50c1xuIgorImEgLSBhcGxpY2EgYXF1ZXN0IHRyb3MgaSB0b3RzIGVscyB0cm9zc29zIHBvc3RlcmlvcnMgZW4gZWwgZml0eGVyXG4iCisiZCAtIG5vIGFwbGlxdWlzIGFxdWVzdCB0cm9zIG5pIGNhcCBkZWxzIHRyb3Nzb3MgcG9zdGVyaW9ycyBlbiBlbCBmaXR4ZXIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBhcGxpY2EgYXF1ZXN0IHRyb3MgYSBsJ2FyYnJlIGRlIHRyZWJhbGxcbiIKKyJuIC0gbm8gYXBsaXF1aXMgYXF1ZXN0IHRyb3MgYSBsJ2FyYnJlIGRlIHRyZWJhbGxcbiIKKyJxIC0gc3VydDsgbm8gYXBsaXF1aXMgYXF1ZXN0IHRyb3MgbmkgY2FwIGRlbHMgcGVuZGVudHNcbiIKKyJhIC0gYXBsaWNhIGFxdWVzdCB0cm9zIGkgdG90cyBlbHMgdHJvc3NvcyBwb3N0ZXJpb3JzIGVuIGVsIGZpdHhlclxuIgorImQgLSBubyBhcGxpcXVpcyBhcXVlc3QgdHJvcyBuaSBjYXAgZGVscyB0cm9zc29zIHBvc3RlcmlvcnMgZW4gZWwgZml0eGVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMTEKK21zZ2lkICIiCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJnIC0gc2VsZWNjaW9uYSBlbCB0cm9zIG9uIHZvbGV1IGFuYXJcbiIKKyIvIC0gY2VyY2EgdW4gdHJvcyBxdWUgY29pbmNpZGVpeGkgYW1iIGwnZXhwcmVzc2nDsyByZWd1bGFyIGRvbmFkYVxuIgorImogLSBkZWl4YSBhcXVlc3QgdHJvcyBzZW5zZSBkZWNpZGlyLCB2ZXVyZSBlbCB0cm9zIHNlbnNlIGRlY2lkaXIgc2Vnw7xlbnRcbiIKKyJKIC0gZGVpeGEgYXF1ZXN0IHRyb3Mgc2Vuc2UgZGVjaWRpciwgdmV1cmUgZWwgdHJvcyBzZWfDvGVudFxuIgorImsgLSBkZWl4YSBhcXVlc3QgdHJvcyBzZW5zZSBkZWNpZGlyLCB2ZXVyZSBlbCB0cm9zIHNlbnNlIGRlY2lkaXIgYW50ZXJpb3JcbiIKKyJLIC0gZGVpeGEgYXF1ZXN0IHRyb3Mgc2Vuc2UgZGVjaWRpciwgdmV1cmUgZWwgdHJvcyBhbnRlcmlvclxuIgorInMgLSBkaXZpZGVpeCBlbCB0cm9zIGFjdHVhbCBlbiB0cm9zc29zIG3DqXMgcGV0aXRzXG4iCisiZSAtIGVkaXRhIG1hbnVhbG1lbnQgZWwgdHJvcyBhY3R1YWxcbiIKKyI/IC0gbW9zdHJhIGwnYWp1ZGFcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQyCittc2dpZCAiVGhlIHNlbGVjdGVkIGh1bmtzIGRvIG5vdCBhcHBseSB0byB0aGUgaW5kZXghXG4iCittc2dzdHIgIkVscyB0cm9zc29zIHNlbGVjY2lvbmF0cyBubyBhcGxpcXVlbiBhIGwnw61uZGV4XG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MworbXNnaWQgIkFwcGx5IHRoZW0gdG8gdGhlIHdvcmt0cmVlIGFueXdheT8gIgorbXNnc3RyICJWb2xldSBhcGxpY2FyLWxvcyBpZ3VhbG1lbnQgYSBsJ2FyYnJlIGRlIHRyZWJhbGw/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQ2Cittc2dpZCAiTm90aGluZyB3YXMgYXBwbGllZC5cbiIKK21zZ3N0ciAiTm8gcydoYSBhcGxpY2F0IHJlcy5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzU3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlc1xuIgorbXNnc3RyICJzJ2VzdMOgIGlnbm9yYW50ICVzIG5vIGZ1c2lvbmF0XG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQ2FudmlhIGVsIG1vZGUgZGUgwqtzdGFnZcK7IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIlN1cHJpbWVpeCDCq3N0YWdlwrsgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkZlciB1biDCq3N0YWdlwrsgZCdhcXVlc3QgdHJvcyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJDYW52aWEgZWwgbW9kZSBkZSDCq3N0YXNowrsgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiU3VwcmltZWl4IMKrc3Rhc2jCuyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiRmVyIHVuIMKrc3Rhc2jCuyBkJ2FxdWVzdCB0cm9zIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQ2FudmlhIGVsIG1vZGUgZGUgwqt1bnN0YWdlwrsgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzOQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJTdXByaW1laXggwqtVbnN0YWdlwrsgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiRmVyIHVuIMKrdW5zdGFnZcK7IGQnYXF1ZXN0IHRyb3MgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBsaWNhIGVsIGNhbnZpIGRlIG1vZGUgYSBsJ8OtbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcGxpY2EgbCdlc2JvcnJhdCBhIGwnw61uZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcGxpY2EgYXF1ZXN0IHRyb3MgYSBsJ8OtbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkRlc2NhcnRhIGVsIGNhbnZpIGRlIG1vZGUgZGVzIGRlIGwnYXJicmUgZGUgdHJlYmFsbCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkRlc2NhcnRhIGwnZXNib3JyYXQgZGVzIGRlIGwnYXJicmUgZGUgdHJlYmFsbCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJEZXNjYXJ0YSBhcXVlc3QgdHJvcyBkZXMgZGUgbCdhcmJyZSBkZSB0cmViYWxsICBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyJEZXNjYXJ0YSBlbCBjYW52aSBkZSBtb2RlIGRlcyBkZSBsJ8OtbmRleCBpIGwnYXJicmUgZGUgdHJlYmFsbCBbeSxuLHEsYSxkIgorIiVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisiRGVzY2FydGEgbGEgc3VwcmVzc2nDsyBkZXMgZGUgbCfDrW5kZXggaSBsJ2FyYnJlIGRlIHRyZWJhbGwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIkRlc2NhcnRhIGFxdWVzdCB0cm9zIGRlcyBkZSBsJ8OtbmRleCBpIGwnYXJicmUgZGUgdHJlYmFsbCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIkFwbGljYSBlbCBjYW52aSBkZSBtb2RlIGEgbCfDrW5kZXggaSBsJ2FyYnJlIGRlIHRyZWJhbGwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwbGljYSBsYSBzdXByZXNzacOzIGEgbCfDrW5kZXggaSBsJ2FyYnJlIGRlIHRyZWJhbGwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcGxpY2EgYXF1ZXN0IHRyb3MgYSBsJ8OtbmRleCBpIGwnYXJicmUgZGUgdHJlYmFsbCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcGxpY2EgZWwgY2FudmkgZGUgbW9kZSBhIGwnYXJicmUgZGUgdHJlYmFsbCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcGxpY2EgbGEgc3VwcmVzc2nDsyBhIGwnYXJicmUgZGUgdHJlYmFsbCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDcwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBsaWNhIGFxdWVzdCB0cm9zIGEgbCdhcmJyZSBkZSB0cmViYWxsIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzAKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvXG4iCittc2dzdHIgIk5vIGhpIGhhIGFsdHJlcyB0cm9zc29zIG9uIGFuYXItaGlcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTg4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnXG4iCittc2dzdHIgIk7Dum1lcm8gbm8gdsOgbGlkOiDCqyVzwrtcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTkzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLlxuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuXG4iCittc2dzdHJbMF0gIk5vbcOpcyAlZCB0cm9zIGRpc3BvbmlibGUuXG4iCittc2dzdHJbMV0gIk5vbcOpcyAlZCB0cm9zc29zIGRpc3BvbmlibGVzLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MTkKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBzZWFyY2hcbiIKK21zZ3N0ciAiTm8gaGkgaGEgY2FwIGFsdHJlIHRyb3MgYSBjZXJjYXJcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjM2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlc1xuIgorbXNnc3RyICJFeHByZXNzacOzIHJlZ3VsYXIgZGUgY2VyY2EgbWFsIGZvcm1hZGEgJXM6ICVzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY0NgorbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVyblxuIgorbXNnc3RyICJObyBoaSBoYSB0cm9zc29zIHF1ZSBjb2luY2lkZWl4aW4gYW1iIGVsIHBhdHLDsyBkb25hdFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjgwCittc2dpZCAiTm8gcHJldmlvdXMgaHVua1xuIgorbXNnc3RyICJTZW5zZSB0cm9zIHByZXZpXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY2NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODYKK21zZ2lkICJObyBuZXh0IGh1bmtcbiIKK21zZ3N0ciAiTm8gaGkgaGEgdHJvcyBzZWfDvGVudFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2OTIKK21zZ2lkICJTb3JyeSwgY2Fubm90IHNwbGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICJObyBlcyBwb3QgZGl2aWRpciBhcXVlc3QgdHJvc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2OTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rLlxuIgorbXNnaWRfcGx1cmFsICJTcGxpdCBpbnRvICVkIGh1bmtzLlxuIgorbXNnc3RyWzBdICJEaXZpZGVpeCBlbiAlZCB0cm9zLlxuIgorbXNnc3RyWzFdICJEaXZpZGVpeCBlbiAlZCB0cm9zc29zLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3MDgKK21zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIk5vIGVzIHBvdCBlZGl0YXIgYXF1ZXN0IHRyb3NcbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBkbyBub3QgdHJhbnNsYXRlIHRoZSBjb21tYW5kIG5hbWVzCisjLiAnc3RhdHVzJywgJ3VwZGF0ZScsICdyZXZlcnQnLCBldGMuCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NzMKK21zZ2lkICIiCisic3RhdHVzICAgICAgICAtIHNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzXG4iCisidXBkYXRlICAgICAgICAtIGFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlc1xuIgorInJldmVydCAgICAgICAgLSByZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvblxuIgorInBhdGNoICAgICAgICAgLSBwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHlcbiIKKyJkaWZmICAgICAgICAgIC0gdmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXhcbiIKKyJhZGQgdW50cmFja2VkIC0gYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiAiCisiY2hhbmdlc1xuIgorbXNnc3RyICIiCisic3RhdHVzICAgICAgICAtIG1vc3RyYSBlbHMgY2FtaW5zIGFtYiBjYW52aXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWZlZ2VpeCBsJ2VzdGF0IGRlIGwnYXJicmUgZGUgdHJlYmFsbCBhbCBjb25qdW50IGRlIGNhbnZpcyAiCisiwqtzdGFnZWTCu1xuIgorInJldmVydCAgICAgICAgLSByZXZlcnRlaXggZWwgY29uanVudCBkZSBjYW52aXMgZGUgwqtzdGFnZWTCuyBhIGxhIHZlcnNpw7MgSEVBRFxuIgorInBhdGNoICAgICAgICAgLSBzZWxlY2Npb25hIHRyb3Nzb3MgaSBhY3R1YWxpdHphJ2xzIHNlbGVjdGl2YW1lbnRcbiIKKyJkaWZmICAgICAgICAgIC0gbW9zdHJhIGxhIGRpZmVyw6huY2lhIGVudHJlIEhFQUQgaSBsJ8OtbmRleFxuIgorImFkZCB1bnRyYWNrZWQgLSBhZmVnZWl4IGVsIGNvbnRpbmd1dCBkZWxzIGZpdHhlcnMgbm8gc2VndWl0cyBhbCBjb25qdW50IGRlICIKKyJjYW52aXMgwqtzdGFnZWTCu1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODI1Cittc2dpZCAibWlzc2luZyAtLSIKK21zZ3N0ciAibWFuY2EgLS0iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC0tcGF0Y2ggbW9kZTogJXMiCittc2dzdHIgImRlc2NvbmVndXQgLS1wYXRjaCBtb2RlOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODI3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgzMworIywgcGVybC1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzLCBleHBlY3RpbmcgLS0iCittc2dzdHIgImFyZ3VtZW50ICVzIG5vIHbDoGxpZCwgcydlc3BlcmF2YSAtLSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzgKK21zZ2lkICJsb2NhbCB6b25lIGRpZmZlcnMgZnJvbSBHTVQgYnkgYSBub24tbWludXRlIGludGVydmFsXG4iCittc2dzdHIgImxhIHpvbmEgbG9jYWwgZGlmZXJlaXggZGUgR01UIHBlciB1biBpbnRlcnZhbCBxdWUgbm8gw6lzIGRlIG1pbnV0c1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MQorbXNnaWQgImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIgorbXNnc3RyICJlbCBkZXNwbGHDp2FtZW50IGRlIGxhIHpvbmEgbG9jYWwgw6lzIG3DqXMgZ3JhbiBvIGlndWFsIGEgMjQgaG9yZXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoyMjMgZ2l0LXNlbmQtZW1haWwucGVybDoyMjkKK21zZ2lkICJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciCittc2dzdHIgImwnZWRpdG9yIG5vIGhhIHNvcnRpdCBjb3JyZWN0YW1lbnQsIGF2b3J0YW50LWhvIHRvdCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMTAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIiclcycgY29udGFpbnMgYW4gaW50ZXJtZWRpYXRlIHZlcnNpb24gb2YgdGhlIGVtYWlsIHlvdSB3ZXJlIGNvbXBvc2luZy5cbiIKK21zZ3N0ciAiwqslc8K7IGNvbnTDqSB1bmEgdmVyc2nDsyBpbnRlcm3DqGRpYSBkZWwgY29ycmV1IHF1ZSBlc3TDoHZldSByZWRhY3RhbnQuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzE1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiclcy5maW5hbCcgY29udGFpbnMgdGhlIGNvbXBvc2VkIGVtYWlsLlxuIgorbXNnc3RyICInJXMuZmluYWwnIGNvbnTDqSBlbCBjb3JyZXUgcmVkYWN0YXQuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDA4Cittc2dpZCAiLS1kdW1wLWFsaWFzZXMgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgb3B0aW9uc1xuIgorbXNnc3RyICItLWR1bXAtYWxpYXNlcyDDqXMgaW5jb21wYXRpYmxlIGFtYiBhbHRyZXMgb3BjaW9uc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4MSBnaXQtc2VuZC1lbWFpbC5wZXJsOjY4MworbXNnaWQgIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iCittc2dzdHIgIk5vIGVzIHBvdCBleGVjdXRhciBnaXQgZm9ybWF0LXBhdGNoIGRlcyBkZSBmb3JhIGRlbCBkaXDDsnNpdFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4NAorbXNnaWQgIiIKKyJgYmF0Y2gtc2l6ZWAgYW5kIGByZWxvZ2luYCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciAodmlhIGNvbW1hbmQtbGluZSBvciAiCisiY29uZmlndXJhdGlvbiBvcHRpb24pXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0OTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLXN1cHByZXNzLWNjIGZpZWxkOiAnJXMnXG4iCittc2dzdHIgIkNhbXAgLS1zdXBwcmVzcy1jYyBkZXNjb25lZ3V0OiDCqyVzwrtcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLWNvbmZpcm0gc2V0dGluZzogJyVzJ1xuIgorbXNnc3RyICItLWNvbmZpcm0gc2V0dGluZyBkZXNjb25lZ3V0OiDCqyVzwrtcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgYWxpYXMgd2l0aCBxdW90ZXMgaXMgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiYXbDrXM6IGVsIHNvYnJlbm9tIGRlIHNlbmRtYWlsIGFtYiBjb21ldGVzIG5vIGVzdMOgIHN1cG9ydGF0OiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgOmluY2x1ZGU6YCBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICJhdsOtczogYDppbmNsdWRlOmAgbm8gZXN0w6Agc3Vwb3J0YXQ6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTYwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGAvZmlsZWAgb3IgYHxwaXBlYCByZWRpcmVjdGlvbiBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICJhdsOtczogbGVzIHJlZGlyZWNjaW9ucyBgL2ZpbGVgIG9yIGB8cGlwZSBubyBzw7NuIGFkbWVzZXM6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGxpbmUgaXMgbm90IHJlY29nbml6ZWQ6ICVzXG4iCittc2dzdHIgImF2w61zOiBubyBlcyBwb3QgcmVjb27DqGl4ZXIgbGEgbMOtbmlhIHNlbmRtYWlsOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY0OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSAnJXMnIGV4aXN0cyBidXQgaXQgY291bGQgYWxzbyBiZSB0aGUgcmFuZ2Ugb2YgY29tbWl0c1xuIgorInRvIHByb2R1Y2UgcGF0Y2hlcyBmb3IuICBQbGVhc2UgZGlzYW1iaWd1YXRlIGJ5Li4uXG4iCisiXG4iCisiICAgICogU2F5aW5nIFwiLi8lc1wiIGlmIHlvdSBtZWFuIGEgZmlsZTsgb3JcbiIKKyIgICAgKiBHaXZpbmcgLS1mb3JtYXQtcGF0Y2ggb3B0aW9uIGlmIHlvdSBtZWFuIGEgcmFuZ2UuXG4iCittc2dzdHIgIiIKKyJFbCBmaXR4ZXIgwqslc8K7IGV4aXN0ZWl4IHBlcsOyIHRhbWLDqSBwb3Qgc2VyIHVuIHJhbmcgZGUgY29taXNzaW9uc1xuIgorInBlciBwcm9kdWlyIHBlZGHDp29zLiBEZXNhbWJpZ8O8ZXUuLi5cbiIKKyJcbiIKKyIgICAgKiBEaWVudCBcIi4vJXNcIiBzaSB2b2zDrWV1IGVzcGVjaWZpY2FyIGFxdWVzdCBmaXR4ZXI7IG9cbiIKKyIgICAgKiBQcm9wb3JjaW9uYW50IGwnb3BjacOzIC0tZm9ybWF0LXBhdGNoIHNpIHZvbMOtZXUgZXNwZWNpZmljYXIgdW4gcmFuZy5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW5kaXIgJXM6ICVzIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIG9icmlyIGVsIGRpcmVjdG9yaSAlczogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6Njk0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJmYXRhbDogJXM6ICVzXG4iCisid2FybmluZzogbm8gcGF0Y2hlcyB3ZXJlIHNlbnRcbiIKK21zZ3N0ciAiIgorImZhdGFsOiAlczogJXNcbiIKKyJhdsOtczogbm8gcydoYW4gZW52aWF0IHBlZGHDp29zXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzA1Cittc2dpZCAiIgorIlxuIgorIk5vIHBhdGNoIGZpbGVzIHNwZWNpZmllZCFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5vIHMnaGFuIGVzcGVjaWZpY2F0IGZpdHhlcnMgZGUgcGVkYcOnXG4iCisiXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk5vIHN1YmplY3QgbGluZSBpbiAlcz8iCittc2dzdHIgIlNlbnNlIGFzc3VtcHRlIGEgJXM/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAlczogJXMiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2JyaXIgcGVyIGVzY3JpcHR1cmEgJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjczOQorbXNnaWQgIiIKKyJMaW5lcyBiZWdpbm5pbmcgaW4gXCJHSVQ6XCIgd2lsbCBiZSByZW1vdmVkLlxuIgorIkNvbnNpZGVyIGluY2x1ZGluZyBhbiBvdmVyYWxsIGRpZmZzdGF0IG9yIHRhYmxlIG9mIGNvbnRlbnRzXG4iCisiZm9yIHRoZSBwYXRjaCB5b3UgYXJlIHdyaXRpbmcuXG4iCisiXG4iCisiQ2xlYXIgdGhlIGJvZHkgY29udGVudCBpZiB5b3UgZG9uJ3Qgd2lzaCB0byBzZW5kIGEgc3VtbWFyeS5cbiIKK21zZ3N0ciAiIgorIlNlIHN1cHJpbWlyYW4gbGVzIGzDrW5pZXMgcXVlIGNvbWVuY2VuIGFtYiBcIkdJVDpcIi5cbiIKKyJDb25zaWRlcmV1IGluY2xvdXJlIHVuIGRpZmZzdGF0IGdsb2JhbCBvIHVuYSB0YXVsYSBkZSBjb250aW5ndXRzXG4iCisicGVyIGNhZGEgcGVkYcOnIHF1ZSBlc3RldSBlc2NyaXZpbnQuXG4iCisiXG4iCisiTmV0ZWdldSBlbCBjb250aW5ndXQgZGVsIGNvcyBzaSBubyB2b2xldSBlbnZpYXIgdW4gcmVzdW0uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzOiAlcyIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBvYnJpciAlczogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzgwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzLmZpbmFsOiAlcyIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBvYnJpciAlcy5maW5hbDogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODIzCittc2dpZCAiU3VtbWFyeSBlbWFpbCBpcyBlbXB0eSwgc2tpcHBpbmcgaXRcbiIKK21zZ3N0ciAiRWwgY29ycmV1IGVsZWN0csOybmljIGRlIHJlc3VtIGVzdMOgIGJ1aXQsIHMnb21ldFxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgW3kvTl0gYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdXNlIDwlcz4gW3kvTl0/ICIKK21zZ3N0ciAiRXN0ZXUgc2VndXIgcXVlIHZvbGV1IHVzYXIgPCVzPiBbeS9OXT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxMworbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGZpbGVzIGFyZSA4Yml0LCBidXQgZG8gbm90IGRlY2xhcmUgYSBDb250ZW50LVRyYW5zZmVyLSIKKyJFbmNvZGluZy5cbiIKK21zZ3N0ciAiIgorIkVscyBmaXR4ZXJzIHNlZ8O8ZW50cyBzw7NuIDhiaXQsIHBlcsOyIG5vIGRlY2xhcmVuIHVuIENvbnRlbnQtVHJhbnNmZXItIgorIkVuY29kaW5nLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxOAorbXNnaWQgIldoaWNoIDhiaXQgZW5jb2Rpbmcgc2hvdWxkIEkgZGVjbGFyZSBbVVRGLThdPyAiCittc2dzdHIgIlF1aW5hIGNvZGlmaWNhY2nDsyBkZSA4IGJpdHMgaGF1cmlhIGRlIGRlY2xhcmFyIFtVVEYtOF0/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MjYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIlJlZnVzaW5nIHRvIHNlbmQgYmVjYXVzZSB0aGUgcGF0Y2hcbiIKKyJcdCVzXG4iCisiaGFzIHRoZSB0ZW1wbGF0ZSBzdWJqZWN0ICcqKiogU1VCSkVDVCBIRVJFICoqKicuIFBhc3MgLS1mb3JjZSBpZiB5b3UgcmVhbGx5ICIKKyJ3YW50IHRvIHNlbmQuXG4iCittc2dzdHIgIiIKKyJTJ2hhIHJlZnVzYXQgYSBlbnZpYXIgcGVycXXDqCBlbCBwZWRhw6dcbiIKKyJcdCVzXG4iCisicGVycXXDqCBsYSBwbGFudGlsbGEgdMOpIGwnYXNzdW1wdGUgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzc2V1IC0tZm9yY2Ugc2kgIgorInJlYWxtZW50IHZvbGV1IGVudmlhci1sby5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NDUKK21zZ2lkICJUbyB3aG9tIHNob3VsZCB0aGUgZW1haWxzIGJlIHNlbnQgKGlmIGFueW9uZSk/IgorbXNnc3RyICIiCisiQSBxdWkgcydoYXVyaWVuIGQnZW52aWFyIGVscyBjb3JyZXVzIGVsZWN0csOybmljcyAoc2kgcydoYW4gZCdlbnZpYXIgYSBhbGfDuik/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYXRhbDogYWxpYXMgJyVzJyBleHBhbmRzIHRvIGl0c2VsZlxuIgorbXNnc3RyICJmYXRhbDogbCfDoGxpZXMgwqslc8K7IHMnZXhwYW5kZWl4IGEgc2kgbWF0ZWl4XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTc1Cittc2dpZCAiTWVzc2FnZS1JRCB0byBiZSB1c2VkIGFzIEluLVJlcGx5LVRvIGZvciB0aGUgZmlyc3QgZW1haWwgKGlmIGFueSk/ICIKK21zZ3N0ciAiIgorIlMnaGEgZCd1c2FyIGVsIE1lc3NhZ2UtSUQgY29tIGEgSW4tUmVwbHktVG8gcGVsIHByaW1lciBjb3JyZXUgKHNpIG4naGkgaGEgIgorImNhcCk/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDMzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJlcnJvcjogdW5hYmxlIHRvIGV4dHJhY3QgYSB2YWxpZCBhZGRyZXNzIGZyb206ICVzXG4iCittc2dzdHIgImVycm9yOiBubyBzJ2hhIHBvZ3V0IGV4dHJldXJlIHVuYSBhZHJlw6dhIHbDoGxpZGEgZGU6ICVzXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbcV0gW2RdIFtlXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDQ1Cittc2dpZCAiV2hhdCB0byBkbyB3aXRoIHRoaXMgYWRkcmVzcz8gKFtxXXVpdHxbZF1yb3B8W2VdZGl0KTogIgorbXNnc3RyICJRdcOoIGNhbCBmZXIgYW1iIGFxdWVzdGEgYWRyZcOnYT8gKFtxXXN1cnR8W2RdZXNjYXJ0YXxbZV1kaXRhKTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzNjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQ0EgcGF0aCBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImVsIGNhbcOtIENBIMKrJXPCuyBubyBleGlzdGVpeCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDQ1Cittc2dpZCAiIgorIiAgICBUaGUgQ2MgbGlzdCBhYm92ZSBoYXMgYmVlbiBleHBhbmRlZCBieSBhZGRpdGlvbmFsXG4iCisiICAgIGFkZHJlc3NlcyBmb3VuZCBpbiB0aGUgcGF0Y2ggY29tbWl0IG1lc3NhZ2UuIEJ5IGRlZmF1bHRcbiIKKyIgICAgc2VuZC1lbWFpbCBwcm9tcHRzIGJlZm9yZSBzZW5kaW5nIHdoZW5ldmVyIHRoaXMgb2NjdXJzLlxuIgorIiAgICBUaGlzIGJlaGF2aW9yIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHNlbmRlbWFpbC5jb25maXJtXG4iCisiICAgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy5cbiIKKyJcbiIKKyIgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHJ1biAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJy5cbiIKKyIgICAgVG8gcmV0YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yLCBidXQgc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsXG4iCisiICAgIHJ1biAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiAgICBMYSBsbGlzdGEgZGUgQ2MgZGUgc29icmUgcydoYSBhbXBsaWF0IGFtYiBhZHJlY2VzIGFkZGljaW9uYWxzXG4iCisiICAgIHRyb2JhZGVzIGFsIG1pc3NhdGdlIGRlIGxhIGNvbWlzc2nDsyBkZWwgcGVkYcOnLiBQZXIgZGVmZWN0ZSwgXG4iCisiICAgIHNlbmQtZW1haWwgcHJlZ3VudGEgYWJhbnMgZCdlbnZpYXIgZWwgbWlzc2F0Z2UgcXVhbiBhaXjDsiBzdWNjZWVpeC5cbiIKKyIgICAgQXF1ZXN0IGNvbXBvcnRhbWVudCBlc3TDoCBjb250cm9sYXQgcGVsIHBhcsOgbWV0cmUgZGUgY29uZmlndXJhY2nDs1xuIgorIiAgICBzZW5kZW1haWwuY29uZmlybS5cbiIKKyJcbiIKKyIgICAgUGVyIGEgaW5mb3JtYWNpw7MgYWRkaWNpb25hbCwgZXhlY3V0ZXUgJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFBlciBtYW50ZW5pciBlbCBjb21wb3J0YW1lbnQgYWN0dWFsLCBwZXLDsiBzaWxlbmNpYXIgYXF1ZXN0XG4iCisiICAgIG1pc3NhdGdlLCBleGVjdXRldSAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy5cbiIKKyJcbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSBbbl0gW2VdIFtxXSBbYV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ2MAorbXNnaWQgIlNlbmQgdGhpcyBlbWFpbD8gKFt5XWVzfFtuXW98W2VdZGl0fFtxXXVpdHxbYV1sbCk6ICIKK21zZ3N0ciAiIgorIlZvbGV1IGVudmlhciBhcXVlc3QgY29ycmV1IGVsZWN0csOybmljPyAoW3ldc8OtfFtuXW98W2VdZGl0YXxbcV1zdXJ0fFthXXRvdCk6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDYzCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsIHJlcGx5IHJlcXVpcmVkIgorbXNnc3RyICJSZXF1ZXJlaXggcmVzcG9zdGEgZW4gZW52aWFyIGVsIGNvcnJldSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDkxCittc2dpZCAiVGhlIHJlcXVpcmVkIFNNVFAgc2VydmVyIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkLiIKK21zZ3N0ciAiRWwgc2Vydmlkb3IgU01UUCByZXF1ZXJpdCBubyBlc3TDoCBjb3JyZWN0YW1lbnQgZGVmaW5pdC4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUzOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBTVEFSVFRMUyEgJXMiCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIGFkbWV0IFNUQVJUVExTISAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTQzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTVEFSVFRMUyBmYWlsZWQhICVzIgorbXNnc3RyICJTVEFSVFRMUyBoYSBmYWxsYXQhICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NTYKK21zZ2lkICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTTVRQIHByb3Blcmx5LiBDaGVjayBjb25maWcgYW5kIHVzZSAtLXNtdHAtZGVidWcuIgorbXNnc3RyICIiCisiTm8gcydoYSBwb2d1dCBpbmljaWFsaXR6YXIgU01UUCBjb3JyZWN0YW1lbnQuIENvbXByb3ZldS1obyBsYSBjb25maWd1cmFjacOzIGkgIgorInVzZXUgLS1zbXRwLWRlYnVnLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBzZW5kICVzXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZW52aWFyICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEcnktU2VudCAlc1xuIgorbXNnc3RyICJTaW11bGFjacOzIGQnZW52aWFtZW50ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZW50ICVzXG4iCittc2dzdHIgIkVudmlhdCAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJEcnktT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICJTaW11bGFjacOzIGRlIGNvcnJlY3RlLiBFbCByZWdpc3RyZSBkaXU6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIk9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiQ29ycmVjdGUuIEVsIHJlZ2lzdHJlIGRpdTogXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU5MQorbXNnaWQgIlJlc3VsdDogIgorbXNnc3RyICJSZXN1bHRhdDogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1OTQKK21zZ2lkICJSZXN1bHQ6IE9LXG4iCittc2dzdHIgIlJlc3VsdGF0OiBjb3JyZWN0ZVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2MTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICJubyBlcyBwb3Qgb2JyaXIgZWwgZml0eGVyICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NTkgZ2l0LXNlbmQtZW1haWwucGVybDoxNjc5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihtYm94KSBTJ2VzdMOgIGFmZWdpbnQgY2M6ICVzIGRlcyBkZSBsYSBsw61uaWEgwqslc8K7XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgUydlc3TDoCBhZmVnaW50IGE6ICVzIGRlcyBkZSBsYSBsw61uaWEgwqslc8K7XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobm9uLW1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG5vIG1ib3gpIFMnZXN0w6AgYWZlZ2ludCBjYzogJXMgZGVzIGRlIGxhIGzDrW5pYSDCqyVzwrtcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihib2R5KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihjb3MpIFMnZXN0w6AgYWZlZ2ludCBjYzogJXMgZGVzIGRlIGxhIGzDrW5pYSDCqyVzwrtcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODY0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQ291bGQgbm90IGV4ZWN1dGUgJyVzJyIKK21zZ3N0ciAiKCVzKSBubyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyIMKrJXPCuyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODcxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQWRkaW5nICVzOiAlcyBmcm9tOiAnJXMnXG4iCittc2dzdHIgIiglcykgUydlc3TDoCBhZmVnaW50ICVzOiAlcyBkZXMgZGU6IMKrJXPCu1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBmYWlsZWQgdG8gY2xvc2UgcGlwZSB0byAnJXMnIgorbXNnc3RyICIoJXMpIHMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gdGFuY2FyIGVsIGNvbmR1Y3RlIMKrJXPCuyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTA1Cittc2dpZCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IgorbXNnc3RyICJubyBlcyBwb3QgZW52aWFyIGVsIG1pc3NhdGdlIGVuIDcgYml0cyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTEzCittc2dpZCAiaW52YWxpZCB0cmFuc2ZlciBlbmNvZGluZyIKK21zZ3N0ciAiY29kaWZpY2FjacOzIGRlIHRyYW5zZmVyw6huY2lhIG5vIHbDoGxpZGEiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NCBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwMDYgZ2l0LXNlbmQtZW1haWwucGVybDoyMDE2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9icmlyICVzOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGNvbnRhaW5zIGEgbGluZSBsb25nZXIgdGhhbiA5OTggY2hhcmFjdGVycyIKK21zZ3N0ciAiJXM6IGVsIHBlZGHDpyBjb250w6kgdW5hIGzDrW5pYSBtw6lzIGdyYW4gZGUgOTk4IGNhcsOgY3RlcnMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk3NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyAlcyB3aXRoIGJhY2t1cCBzdWZmaXggJyVzJy5cbiIKK21zZ3N0ciAiUydlc3TDoCBvbWV0ZW50ICVzIGFtYiBlbCBzdWZpeCBkZSBjw7JwaWEgZGUgc2VndXJldGF0IMKrJXPCuy5cbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwICJbeXxOXSIgYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHNlbmQgJXM/IFt5fE5dOiAiCittc2dzdHIgIkVzdGV1IHNlZ3VyIHF1ZSB2b2xldSBlbnZpYXIgJXM/IFt5fE5dOiAiCmRpZmYgLS1naXQgYS9wby9kZS5wbyBiL3BvL2RlLnBvCmluZGV4IGE4ZDVmNjEuLmNmZTUwYzEgMTAwNjQ0Ci0tLSBhL3BvL2RlLnBvCisrKyBiL3BvL2RlLnBvCkBAIC0xLDI4NzQgKzEsMjUxNDAgQEAKLSMgVHJhbnNsYXRpb24gb2YgZ2l0LWd1aSB0byBHZXJtYW4uCi0jIENvcHlyaWdodCAoQykgMjAwNyBTaGF3biBQZWFyY2UsIGV0IGFsLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0IHBhY2thZ2UuCi0jIENocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT4sIDIwMDcKKyMgR2VybWFuIHRyYW5zbGF0aW9ucyBmb3IgR2l0LgorIyBDb3B5cmlnaHQgKEMpIDIwMTkgTWF0dGhpYXMgUsO8c3RlciA8bWF0dGhpYXMucnVlc3RlckBnbWFpbC5jb20+CisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KKyMgTWF0dGhpYXMgUsO8c3RlciA8bWF0dGhpYXMucnVlc3RlckBnbWFpbC5jb20+LCAyMDE5LTIwMjAuCisjIFJhbGYgVGhpZWxvdyA8cmFsZi50aGllbG93QGdtYWlsLmNvbT4sIDIwMTAtMjAxOS4KICMKIG1zZ2lkICIiCiBtc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWlcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMjAtMDItMDggMjI6NTQrMDEwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMjAtMDItMDkgMjI6NDArMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogQ2hyaXN0aWFuIFN0aW1taW5nIDxjaHJpc3RpYW5AY3N0aW1taW5nLmRlPlxuIgotIkxhbmd1YWdlLVRlYW06IEdlcm1hblxuIgotIkxhbmd1YWdlOiBkZV9ERVxuIgorIlByb2plY3QtSWQtVmVyc2lvbjogR2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMjAtMDMtMTEgMTU6MjYrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMjAtMDMtMTQgMjI6MzQrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWF0dGhpYXMgUsO8c3RlciA8bWF0dGhpYXMucnVlc3RlckBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTWF0dGhpYXMgUsO8c3RlciA8bWF0dGhpYXMucnVlc3RlckBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2U6IGRlXG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4hPTEpO1xuIgogCi0jOiBnaXQtZ3VpLnNoOjg0NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgotbXNnc3RyICJVbmfDvGx0aWdlIFplaWNoZW5zYXR6LUFuZ2FiZSBpbiAlczoiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/IgorbXNnc3RyICJXaWUgYml0dGUgKCVzKT8iCiAKLSM6IGdpdC1ndWkuc2g6OTAxCi1tc2dpZCAiTWFpbiBGb250IgotbXNnc3RyICJQcm9ncmFtbXNjaHJpZnRhcnQiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1MjEgYWRkLWludGVyYWN0aXZlLmM6ODIyIHNlcXVlbmNlci5jOjMxMjQKKyM6IHNlcXVlbmNlci5jOjM1NjIgYnVpbHRpbi9yZWJhc2UuYzo4NzUgYnVpbHRpbi9yZWJhc2UuYzoxNjg3CisjOiBidWlsdGluL3JlYmFzZS5jOjIwODYgYnVpbHRpbi9yZWJhc2UuYzoyMTMwCittc2dpZCAiY291bGQgbm90IHJlYWQgaW5kZXgiCittc2dzdHIgIkluZGV4IGtvbm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlbiIKIAotIzogZ2l0LWd1aS5zaDo5MDIKLW1zZ2lkICJEaWZmL0NvbnNvbGUgRm9udCIKLW1zZ3N0ciAiVmVyZ2xlaWNoLVNjaHJpZnRhcnQiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1NzYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNjkKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjk0Cittc2dpZCAiYmluYXJ5IgorbXNnc3RyICJCaW7DpHIiCiAKLSM6IGdpdC1ndWkuc2g6OTE3IGdpdC1ndWkuc2g6OTMxIGdpdC1ndWkuc2g6OTQ0IGdpdC1ndWkuc2g6MTAzNCBnaXQtZ3VpLnNoOjEwNTMKLSM6IGdpdC1ndWkuc2g6MzIxMgotbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgotbXNnc3RyICJnaXQtZ3VpOiBQcm9ncmFtbWZlaGxlciIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYzNCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI3OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMzIKK21zZ2lkICJub3RoaW5nIgorbXNnc3RyICJOaWNodHMiCiAKLSM6IGdpdC1ndWkuc2g6OTE4Ci1tc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgotbXNnc3RyICJHaXQga2FubiBpbSBQQVRIIG5pY2h0IGdlZnVuZGVuIHdlcmRlbi4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMTQKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzI5Cittc2dpZCAidW5jaGFuZ2VkIgorbXNnc3RyICJ1bnZlcsOkbmRlcnQiCiAKLSM6IGdpdC1ndWkuc2g6OTQ1Ci1tc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCi1tc2dzdHIgIkdpdCBWZXJzaW9uc2FuZ2FiZSBrYW5uIG5pY2h0IGVya2FubnQgd2VyZGVuOiIKLQotIzogZ2l0LWd1aS5zaDo5NzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iR2l0IHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWQuXG4iCi0iXG4iCi0iJXMgY2xhaW1zIGl0IGlzIHZlcnNpb24gJyVzJy5cbiIKLSJcbiIKLSIlcyByZXF1aXJlcyBhdCBsZWFzdCBHaXQgMS41LjAgb3IgbGF0ZXIuXG4iCi0iXG4iCi0iQXNzdW1lICclcycgaXMgdmVyc2lvbiAxLjUuMD9cbiIKLW1zZ3N0ciAiIgotIkRpZSBWZXJzaW9uIHZvbiBHaXQga2FubiBuaWNodCBiZXN0aW1tdCB3ZXJkZW4uXG4iCi0iXG4iCi0iwrslc8KrIGJlaGF1cHRldCwgZXMgc2VpIFZlcnNpb24gwrslc8KrLlxuIgotIlxuIgotIiVzIGJlbsO2dGlndCBtaW5kZXN0ZW5zIEdpdCAxLjUuMCBvZGVyIGjDtmhlci5cbiIKLSJcbiIKLSJTb2xsIGFuZ2Vub21tZW4gd2VyZGVuLCDCuyVzwqsgc2VpIFZlcnNpb24gMS41LjA/XG4iCi0KLSM6IGdpdC1ndWkuc2g6MTI2NwotbXNnaWQgIkdpdCBkaXJlY3Rvcnkgbm90IGZvdW5kOiIKLW1zZ3N0ciAiR2l0LVZlcnplaWNobmlzIG5pY2h0IGdlZnVuZGVuOiIKLQotIzogZ2l0LWd1aS5zaDoxMzAxCi1tc2dpZCAiQ2Fubm90IG1vdmUgdG8gdG9wIG9mIHdvcmtpbmcgZGlyZWN0b3J5OiIKLW1zZ3N0ciAiIgotIkVzIGtvbm50ZSBuaWNodCBpbiBkYXMgb2JlcnN0ZSBWZXJ6ZWljaG5pcyBkZXIgQXJiZWl0c2tvcGllIGdld2VjaHNlbHQgIgotIndlcmRlbjoiCi0KLSM6IGdpdC1ndWkuc2g6MTMwOQotbXNnaWQgIkNhbm5vdCB1c2UgYmFyZSByZXBvc2l0b3J5OiIKLW1zZ3N0ciAiQmxvw59lcyBSZXBvc2l0b3J5IGthbm4gbmljaHQgYmVudXR6dCB3ZXJkZW46IgotCi0jOiBnaXQtZ3VpLnNoOjEzMTcKLW1zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAiS2VpbiBBcmJlaXRzdmVyemVpY2huaXMiCi0KLSM6IGdpdC1ndWkuc2g6MTQ5MSBsaWIvY2hlY2tvdXRfb3AudGNsOjMwNgotbXNnaWQgIlJlZnJlc2hpbmcgZmlsZSBzdGF0dXMuLi4iCi1tc2dzdHIgIkRhdGVpc3RhdHVzIGFrdHVhbGlzaWVyZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MTU1MQotbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCi1tc2dzdHIgIk5hY2ggZ2XDpG5kZXJ0ZW4gRGF0ZWllbiBzdWNoZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MTYyOQotbXNnaWQgIkNhbGxpbmcgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suLi4iCi1tc2dzdHIgIkF1ZnJ1ZmVuIGRlcyDCu3ByZXBhcmUtY29tbWl0LW1zZyBob29rwqsuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MTY0NgotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCi1tc2dzdHIgIkNvbW1pdCBhYmdlbGVobnQgZHVyY2ggwrtwcmVwYXJlLWNvbW1pdC1tc2cgaG9va8KrLiIKLQotIzogZ2l0LWd1aS5zaDoxODA0IGxpYi9icm93c2VyLnRjbDoyNTIKLW1zZ2lkICJSZWFkeS4iCi1tc2dzdHIgIkJlcmVpdC4iCi0KLSM6IGdpdC1ndWkuc2g6MTk2OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJEaXNwbGF5IGxpbWl0IChndWkubWF4ZmlsZXNkaXNwbGF5ZWQgPSAlcykgcmVhY2hlZCwgbm90IHNob3dpbmcgYWxsICVzIGZpbGVzLiIKLW1zZ3N0ciAiIgotIkFuemVpZ2VsaW1pdCBlcnJlaWNodCAoZ3VpLm1heGZpbGVzZGlzcGxheWVkID0gJXMpIGbDvHIgQW56YWhsIEVpbnRyw6RnZS4gRXMgIgotIndlcmRlbiBuaWNodCBhbGxlICVzIERhdGVpZW4gZ2V6ZWlndC4iCi0KLSM6IGdpdC1ndWkuc2g6MjA5MQotbXNnaWQgIlVubW9kaWZpZWQiCi1tc2dzdHIgIlVudmVyw6RuZGVydCIKLQotIzogZ2l0LWd1aS5zaDoyMDkzCi1tc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIlZlcsOkbmRlcnQsIG5pY2h0IGJlcmVpdGdlc3RlbGx0IgotCi0jOiBnaXQtZ3VpLnNoOjIwOTQgZ2l0LWd1aS5zaDoyMTA2Ci1tc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIkJlcmVpdGdlc3RlbGx0IHp1bSBDb21taXR0ZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjA5NSBnaXQtZ3VpLnNoOjIxMDcKLW1zZ2lkICJQb3J0aW9ucyBzdGFnZWQgZm9yIGNvbW1pdCIKLW1zZ3N0ciAiVGVpbHdlaXNlIGJlcmVpdGdlc3RlbGx0IHp1bSBDb21taXR0ZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjA5NiBnaXQtZ3VpLnNoOjIxMDgKLW1zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyIKLW1zZ3N0ciAiQmVyZWl0Z2VzdGVsbHQgenVtIENvbW1pdHRlbiwgZmVobGVuZCIKLQotIzogZ2l0LWd1aS5zaDoyMDk4Ci1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIkRhdGVpdHlwIGdlw6RuZGVydCwgbmljaHQgYmVyZWl0Z2VzdGVsbHQiCi0KLSM6IGdpdC1ndWkuc2g6MjA5OSBnaXQtZ3VpLnNoOjIxMDAKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgb2xkIHR5cGUgc3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIkRhdGVpdHlwIGdlw6RuZGVydCwgYWx0ZXIgRGF0ZWl0eXAgYmVyZWl0Z2VzdGVsbHQiCi0KLSM6IGdpdC1ndWkuc2g6MjEwMQotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCi1tc2dzdHIgIkRhdGVpdHlwIGdlw6RuZGVydCwgYmVyZWl0Z2VzdGVsbHQiCi0KLSM6IGdpdC1ndWkuc2g6MjEwMgotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2Ugc3RhZ2VkLCBtb2RpZmljYXRpb24gbm90IHN0YWdlZCIKLW1zZ3N0ciAiRGF0ZWl0eXAtw4RuZGVydW5nIGJlcmVpdGdlc3RlbGx0LCBJbmhhbHRzw6RuZGVydW5nIG5pY2h0IGJlcmVpdGdlc3RlbGx0IgotCi0jOiBnaXQtZ3VpLnNoOjIxMDMKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlIHN0YWdlZCwgZmlsZSBtaXNzaW5nIgotbXNnc3RyICJEYXRlaXR5cC3DhG5kZXJ1bmcgYmVyZWl0Z2VzdGVsbHQsIERhdGVpIGdlbMO2c2NodCIKLQotIzogZ2l0LWd1aS5zaDoyMTA1Ci1tc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICJVbnZlcnNpb25pZXJ0LCBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKLQotIzogZ2l0LWd1aS5zaDoyMTEwCi1tc2dpZCAiTWlzc2luZyIKLW1zZ3N0ciAiRmVobGVuZCIKLQotIzogZ2l0LWd1aS5zaDoyMTExCi1tc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsIgotbXNnc3RyICJCZXJlaXRnZXN0ZWxsdCB6dW0gTMO2c2NoZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjExMgotbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKLW1zZ3N0ciAiQmVyZWl0Z2VzdGVsbHQgenVtIEzDtnNjaGVuLCB0cm90emRlbSB2b3JoYW5kZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjExNCBnaXQtZ3VpLnNoOjIxMTUgZ2l0LWd1aS5zaDoyMTE2IGdpdC1ndWkuc2g6MjExNwotIzogZ2l0LWd1aS5zaDoyMTE4IGdpdC1ndWkuc2g6MjExOQotbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCi1tc2dzdHIgIktvbmZsaWt0YXVmbMO2c3VuZyBuw7Z0aWciCi0KLSM6IGdpdC1ndWkuc2g6MjE2NAotbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgotbXNnc3RyICJHaXRrIGthbm4gaW0gUEFUSCBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4uIgotCi0jOiBnaXQtZ3VpLnNoOjIyMTAgZ2l0LWd1aS5zaDoyMjQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU3RhcnRpbmcgJXMuLi4gcGxlYXNlIHdhaXQuLi4iCi1tc2dzdHIgIiVzIHdpcmQgZ2VzdGFydGV0Li4uIGJpdHRlIHdhcnRlbi4iCi0KLSM6IGdpdC1ndWkuc2g6MjIyNAotbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0IGd1aSBpbiBQQVRIIgotbXNnc3RyICLCu0dpdCBndWnCqyBrYW5uIGltIFBBVEggbmljaHQgZ2VmdW5kZW4gd2VyZGVuLiIKLQotIzogZ2l0LWd1aS5zaDoyNzI2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTMKLW1zZ2lkICJSZXBvc2l0b3J5IgotbXNnc3RyICJSZXBvc2l0b3J5IgotCi0jOiBnaXQtZ3VpLnNoOjI3MjcKLW1zZ2lkICJFZGl0IgotbXNnc3RyICJCZWFyYmVpdGVuIgotCi0jOiBnaXQtZ3VpLnNoOjI3MjkgbGliL2Nob29zZV9yZXYudGNsOjU2NwotbXNnaWQgIkJyYW5jaCIKLW1zZ3N0ciAiQnJhbmNoIgotCi0jOiBnaXQtZ3VpLnNoOjI3MzIgbGliL2Nob29zZV9yZXYudGNsOjU1NAotbXNnaWQgIkNvbW1pdEBAbm91biIKLW1zZ3N0ciAiQ29tbWl0IgotCi0jOiBnaXQtZ3VpLnNoOjI3MzUgbGliL21lcmdlLnRjbDoxMjcgbGliL21lcmdlLnRjbDoxNzQKLW1zZ2lkICJNZXJnZSIKLW1zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIgotCi0jOiBnaXQtZ3VpLnNoOjI3MzYgbGliL2Nob29zZV9yZXYudGNsOjU2MwotbXNnaWQgIlJlbW90ZSIKLW1zZ3N0ciAiRXh0ZXJuIgotCi0jOiBnaXQtZ3VpLnNoOjI3MzkKLW1zZ2lkICJUb29scyIKLW1zZ3N0ciAiV2Vya3pldWdlIgotCi0jOiBnaXQtZ3VpLnNoOjI3NDgKLW1zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKLW1zZ3N0ciAiQXJiZWl0c2tvcGllIGltIERhdGVpbWFuYWdlciDDtmZmbmVuIgotCi0jOiBnaXQtZ3VpLnNoOjI3NjMKLW1zZ2lkICJHaXQgQmFzaCIKLW1zZ3N0ciAiR2l0IEJhc2giCi0KLSM6IGdpdC1ndWkuc2g6Mjc3MgotbXNnaWQgIkJyb3dzZSBDdXJyZW50IEJyYW5jaCdzIEZpbGVzIgotbXNnc3RyICJBa3R1ZWxsZW4gQnJhbmNoIGR1cmNoYmzDpHR0ZXJuIgotCi0jOiBnaXQtZ3VpLnNoOjI3NzYKLW1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzLi4uIgotbXNnc3RyICJCcmFuY2ggZHVyY2hibMOkdHRlcm4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjc4MQotbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCdzIEhpc3RvcnkiCi1tc2dzdHIgIkFrdHVlbGxlbiBCcmFuY2ggZGFyc3RlbGxlbiIKLQotIzogZ2l0LWd1aS5zaDoyNzg1Ci1tc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKLW1zZ3N0ciAiSGlzdG9yaWUgYWxsZXIgQnJhbmNoZXMgZGFyc3RlbGxlbiIKLQotIzogZ2l0LWd1aS5zaDoyNzkyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCi1tc2dzdHIgIkJyYW5jaCDCuyVzwqsgZHVyY2hibMOkdHRlcm4iCi0KLSM6IGdpdC1ndWkuc2g6Mjc5NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCi1tc2dzdHIgIkhpc3RvcmllIHZvbiDCuyVzwqsgZGFyc3RlbGxlbiIKLQotIzogZ2l0LWd1aS5zaDoyNzk5IGxpYi9kYXRhYmFzZS50Y2w6NDAKLW1zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgotbXNnc3RyICJEYXRlbmJhbmtzdGF0aXN0aWsiCi0KLSM6IGdpdC1ndWkuc2g6MjgwMiBsaWIvZGF0YWJhc2UudGNsOjMzCi1tc2dpZCAiQ29tcHJlc3MgRGF0YWJhc2UiCi1tc2dzdHIgIkRhdGVuYmFuayBrb21wcmltaWVyZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjgwNQotbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKLW1zZ3N0ciAiRGF0ZW5iYW5rIMO8YmVycHLDvGZlbiIKLQotIzogZ2l0LWd1aS5zaDoyODEyIGdpdC1ndWkuc2g6MjgxNiBnaXQtZ3VpLnNoOjI4MjAKLW1zZ2lkICJDcmVhdGUgRGVza3RvcCBJY29uIgotbXNnc3RyICJEZXNrdG9wLUljb24gZXJzdGVsbGVuIgotCi0jOiBnaXQtZ3VpLnNoOjI4MjggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyMDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyMTcKLW1zZ2lkICJRdWl0IgotbXNnc3RyICJCZWVuZGVuIgotCi0jOiBnaXQtZ3VpLnNoOjI4MzYKLW1zZ2lkICJVbmRvIgotbXNnc3RyICJSw7xja2fDpG5naWciCi0KLSM6IGdpdC1ndWkuc2g6MjgzOQotbXNnaWQgIlJlZG8iCi1tc2dzdHIgIldpZWRlcmhvbGVuIgotCi0jOiBnaXQtZ3VpLnNoOjI4NDMgZ2l0LWd1aS5zaDozNDYxCi1tc2dpZCAiQ3V0IgotbXNnc3RyICJBdXNzY2huZWlkZW4iCi0KLSM6IGdpdC1ndWkuc2g6Mjg0NiBnaXQtZ3VpLnNoOjM0NjQgZ2l0LWd1aS5zaDozNTQwIGdpdC1ndWkuc2g6MzYzMwotIzogbGliL2NvbnNvbGUudGNsOjY5Ci1tc2dpZCAiQ29weSIKLW1zZ3N0ciAiS29waWVyZW4iCi0KLSM6IGdpdC1ndWkuc2g6Mjg0OSBnaXQtZ3VpLnNoOjM0NjcKLW1zZ2lkICJQYXN0ZSIKLW1zZ3N0ciAiRWluZsO8Z2VuIgotCi0jOiBnaXQtZ3VpLnNoOjI4NTIgZ2l0LWd1aS5zaDozNDcwIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzkKLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyOAotbXNnaWQgIkRlbGV0ZSIKLW1zZ3N0ciAiTMO2c2NoZW4iCi0KLSM6IGdpdC1ndWkuc2g6Mjg1NiBnaXQtZ3VpLnNoOjM0NzQgZ2l0LWd1aS5zaDozNjM3IGxpYi9jb25zb2xlLnRjbDo3MQotbXNnaWQgIlNlbGVjdCBBbGwiCi1tc2dzdHIgIkFsbGUgYXVzd8OkaGxlbiIKLQotIzogZ2l0LWd1aS5zaDoyODY1Ci1tc2dpZCAiQ3JlYXRlLi4uIgotbXNnc3RyICJFcnN0ZWxsZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjg3MQotbXNnaWQgIkNoZWNrb3V0Li4uIgotbXNnc3RyICJBdXNjaGVja2VuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI4NzcKLW1zZ2lkICJSZW5hbWUuLi4iCi1tc2dzdHIgIlVtYmVuZW5uZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjg4MgotbXNnaWQgIkRlbGV0ZS4uLiIKLW1zZ3N0ciAiTMO2c2NoZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjg4NwotbXNnaWQgIlJlc2V0Li4uIgotbXNnc3RyICLDhG5kZXJ1bmdlbiB2ZXJ3ZXJmZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjg5NwotbXNnaWQgIkRvbmUiCi1tc2dzdHIgIkZlcnRpZyIKLQotIzogZ2l0LWd1aS5zaDoyODk5Ci1tc2dpZCAiQ29tbWl0QEB2ZXJiIgotbXNnc3RyICJDb21taXR0ZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjkwOCBnaXQtZ3VpLnNoOjM0MDAKLW1zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKLW1zZ3N0ciAiTGV0enRlbiBDb21taXQgbmFjaGJlc3Nlcm4iCi0KLSM6IGdpdC1ndWkuc2g6MjkxOCBnaXQtZ3VpLnNoOjMzNjEgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDEKLW1zZ2lkICJSZXNjYW4iCi1tc2dzdHIgIk5ldSBsYWRlbiIKLQotIzogZ2l0LWd1aS5zaDoyOTI0Ci1tc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgotbXNnc3RyICJGw7xyIENvbW1pdCBiZXJlaXRzdGVsbGVuIgotCi0jOiBnaXQtZ3VpLnNoOjI5MzAKLW1zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKLW1zZ3N0ciAiR2XDpG5kZXJ0ZSBEYXRlaWVuIGbDvHIgQ29tbWl0IGJlcmVpdHN0ZWxsZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjkzNgotbXNnaWQgIlVuc3RhZ2UgRnJvbSBDb21taXQiCi1tc2dzdHIgIkF1cyBDb21taXQtQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgotCi0jOiBnaXQtZ3VpLnNoOjI5NDIgbGliL2luZGV4LnRjbDo1MjEKLW1zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKLW1zZ3N0ciAiw4RuZGVydW5nZW4gdmVyd2VyZmVuIgotCi0jOiBnaXQtZ3VpLnNoOjI5NTAgZ2l0LWd1aS5zaDozNzAwIGdpdC1ndWkuc2g6MzczMQotbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgotbXNnc3RyICJXZW5pZ2VyIFplaWxlbiBhbnplaWdlbiIKLQotIzogZ2l0LWd1aS5zaDoyOTU0IGdpdC1ndWkuc2g6MzcwNCBnaXQtZ3VpLnNoOjM3MzUKLW1zZ2lkICJTaG93IE1vcmUgQ29udGV4dCIKLW1zZ3N0ciAiTWVociBaZWlsZW4gYW56ZWlnZW4iCi0KLSM6IGdpdC1ndWkuc2g6Mjk2MSBnaXQtZ3VpLnNoOjMzNzQgZ2l0LWd1aS5zaDozNDg1Ci1tc2dpZCAiU2lnbiBPZmYiCi1tc2dzdHIgIkFiemVpY2huZW4iCi0KLSM6IGdpdC1ndWkuc2g6Mjk3NwotbXNnaWQgIkxvY2FsIE1lcmdlLi4uIgotbXNnc3RyICJMb2thbGVzIFp1c2FtbWVuZsO8aHJlbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyOTgyCi1tc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiBhYmJyZWNoZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjk5NCBnaXQtZ3VpLnNoOjMwMjIKLW1zZ2lkICJBZGQuLi4iCi1tc2dzdHIgIk5ldWVzIGhpbnp1ZsO8Z2VuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI5OTgKLW1zZ2lkICJQdXNoLi4uIgotbXNnc3RyICJWZXJzZW5kZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MzAwMgotbXNnaWQgIkRlbGV0ZSBCcmFuY2guLi4iCi1tc2dzdHIgIkJyYW5jaCBsw7ZzY2hlbi4uLiIKLQotIzogZ2l0LWd1aS5zaDozMDEyIGdpdC1ndWkuc2g6MzY2NgotbXNnaWQgIk9wdGlvbnMuLi4iCi1tc2dzdHIgIk9wdGlvbmVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjMwMjMKLW1zZ2lkICJSZW1vdmUuLi4iCi1tc2dzdHIgIkVudGZlcm5lbi4uLiIKLQotIzogZ2l0LWd1aS5zaDozMDMyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjcKLW1zZ2lkICJIZWxwIgotbXNnc3RyICJIaWxmZSIKLQotIzogZ2l0LWd1aS5zaDozMDM2IGdpdC1ndWkuc2g6MzA0MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwIGxpYi9hYm91dC50Y2w6MTQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBYm91dCAlcyIKLW1zZ3N0ciAiw5xiZXIgJXMiCi0KLSM6IGdpdC1ndWkuc2g6MzA2NAotbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgotbXNnc3RyICJPbmxpbmUtRG9rdW1lbnRhdGlvbiIKLQotIzogZ2l0LWd1aS5zaDozMDY3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MwotbXNnaWQgIlNob3cgU1NIIEtleSIKLW1zZ3N0ciAiU1NILVNjaGzDvHNzZWwgYW56ZWlnZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzA5NyBnaXQtZ3VpLnNoOjMyMjkKLW1zZ2lkICJ1c2FnZToiCi1tc2dzdHIgIlZlcndlbmR1bmc6IgotCi0jOiBnaXQtZ3VpLnNoOjMxMDEgZ2l0LWd1aS5zaDozMjMzCi1tc2dpZCAiVXNhZ2UiCi1tc2dzdHIgIlZlcndlbmR1bmciCi0KLSM6IGdpdC1ndWkuc2g6MzE4MiBsaWIvYmxhbWUudGNsOjU3NQotbXNnaWQgIkVycm9yIgotbXNnc3RyICJGZWhsZXIiCi0KLSM6IGdpdC1ndWkuc2g6MzIxMwotIywgdGNsLWZvcm1hdAotbXNnaWQgImZhdGFsOiBjYW5ub3Qgc3RhdCBwYXRoICVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgotbXNnc3RyICIiCi0iRmVobGVyOiBWZXJ6ZWljaG5pcyDCuyVzwqsga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbjogRGF0ZWkgb2RlciBWZXJ6ZWljaG5pcyAiCi0ibmljaHQgZ2VmdW5kZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzI0NgotbXNnaWQgIkN1cnJlbnQgQnJhbmNoOiIKLW1zZ3N0ciAiQWt0dWVsbGVyIEJyYW5jaDoiCi0KLSM6IGdpdC1ndWkuc2g6MzI3MQotbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCi1tc2dzdHIgIk5pY2h0IGJlcmVpdGdlc3RlbGx0ZSDDhG5kZXJ1bmdlbiIKLQotIzogZ2l0LWd1aS5zaDozMjkzCi1tc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKLW1zZ3N0ciAiQmVyZWl0c3RlbGx1bmcgKHp1bSBDb21taXR0ZW4pIgotCi0jOiBnaXQtZ3VpLnNoOjMzNjcKLW1zZ2lkICJTdGFnZSBDaGFuZ2VkIgotbXNnc3RyICJBbGxlcyBiZXJlaXRzdGVsbGVuIgotCi0jOiBnaXQtZ3VpLnNoOjMzODYgbGliL3RyYW5zcG9ydC50Y2w6MTM3Ci1tc2dpZCAiUHVzaCIKLW1zZ3N0ciAiVmVyc2VuZGVuIgotCi0jOiBnaXQtZ3VpLnNoOjM0MTMKLW1zZ2lkICJJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiRXJzdGUgQ29tbWl0LUJlc2NocmVpYnVuZzoiCi0KLSM6IGdpdC1ndWkuc2g6MzQxNAotbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJOYWNoZ2ViZXNzZXJ0ZSBCZXNjaHJlaWJ1bmc6IgotCi0jOiBnaXQtZ3VpLnNoOjM0MTUKLW1zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJOYWNoZ2ViZXNzZXJ0ZSBlcnN0ZSBCZXNjaHJlaWJ1bmc6IgotCi0jOiBnaXQtZ3VpLnNoOjM0MTYKLW1zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiTmFjaGdlYmVzc2VydGUgWnVzYW1tZW5mw7xocnVuZ3MtQmVzY2hyZWlidW5nOiIKLQotIzogZ2l0LWd1aS5zaDozNDE3Ci1tc2dpZCAiTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJadXNhbW1lbmbDvGhydW5ncy1CZXNjaHJlaWJ1bmc6IgotCi0jOiBnaXQtZ3VpLnNoOjM0MTgKLW1zZ2lkICJDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIkNvbW1pdC1CZXNjaHJlaWJ1bmc6IgotCi0jOiBnaXQtZ3VpLnNoOjM0NzcgZ2l0LWd1aS5zaDozNjQxIGxpYi9jb25zb2xlLnRjbDo3MwotbXNnaWQgIkNvcHkgQWxsIgotbXNnc3RyICJBbGxlIGtvcGllcmVuIgotCi0jOiBnaXQtZ3VpLnNoOjM1MDEgbGliL2JsYW1lLnRjbDoxMDYKLW1zZ2lkICJGaWxlOiIKLW1zZ3N0ciAiRGF0ZWk6IgotCi0jOiBnaXQtZ3VpLnNoOjM1NDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTAwCi1tc2dpZCAiT3BlbiIKLW1zZ3N0ciAiw5ZmZm5lbiIKLQotIzogZ2l0LWd1aS5zaDozNjI5Ci1tc2dpZCAiUmVmcmVzaCIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY3MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY0MworbXNnaWQgIlVwZGF0ZSIKIG1zZ3N0ciAiQWt0dWFsaXNpZXJlbiIKIAotIzogZ2l0LWd1aS5zaDozNjUwCi1tc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICJTY2hyaWZ0Z3LDtsOfZSB2ZXJrbGVpbmVybiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY4OSBhZGQtaW50ZXJhY3RpdmUuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YWdlICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHp1bSBDb21taXQgdm9ybWVya2VuLiIKIAotIzogZ2l0LWd1aS5zaDozNjU0Ci1tc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICJTY2hyaWZ0Z3LDtsOfZSB2ZXJncsO2w59lcm4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTUgYWRkLWludGVyYWN0aXZlLmM6ODg0IHNlcXVlbmNlci5jOjMzMTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODk5Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGluZGV4IgorbXNnc3RyICJLb25udGUgSW5kZXggbmljaHQgc2NocmVpYmVuLiIKIAotIzogZ2l0LWd1aS5zaDozNjYyIGxpYi9ibGFtZS50Y2w6Mjk2Ci1tc2dpZCAiRW5jb2RpbmciCi1tc2dzdHIgIlplaWNoZW5rb2RpZXJ1bmciCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInVwZGF0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ1cGRhdGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIFBmYWQgYWt0dWFsaXNpZXJ0XG4iCittc2dzdHJbMV0gIiVkIFBmYWRlIGFrdHVhbGlzaWVydFxuIgogCi0jOiBnaXQtZ3VpLnNoOjM2NzMKLW1zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCi1tc2dzdHIgIlBhdGNoLUJsb2NrIGFud2VuZGVuL3p1csO8Y2tuZWhtZW4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3MTYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NzgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIm5vdGU6ICVzIGlzIHVudHJhY2tlZCBub3cuXG4iCittc2dzdHIgIkhpbndlaXM6ICVzIGlzdCBudW4gdW52ZXJzaW9uaWVydC5cbiIKIAotIzogZ2l0LWd1aS5zaDozNjc4Ci1tc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgotbXNnc3RyICJaZWlsZSBhbndlbmRlbi96dXLDvGNrbmVobWVuIgorIzogYWRkLWludGVyYWN0aXZlLmM6NzIxIGFwcGx5LmM6NDExMCBidWlsdGluL2NoZWNrb3V0LmM6MjgxCisjOiBidWlsdGluL3Jlc2V0LmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIm1ha2VfY2FjaGVfZW50cnkgZsO8ciBQZmFkICclcycgZmVobGdlc2NobGFnZW4iCiAKLSM6IGdpdC1ndWkuc2g6MzY4NCBnaXQtZ3VpLnNoOjM3OTQgZ2l0LWd1aS5zaDozODA1Ci1tc2dpZCAiUmV2ZXJ0IEh1bmsiCi1tc2dzdHIgIlBhdGNoLUJsb2NrIHp1csO8Y2tuZWhtZW4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NTUKK21zZ2lkICJSZXZlcnQiCittc2dzdHIgIlJldmVydCIKIAotIzogZ2l0LWd1aS5zaDozNjg5IGdpdC1ndWkuc2g6MzgwMSBnaXQtZ3VpLnNoOjM4MTIKLW1zZ2lkICJSZXZlcnQgTGluZSIKLW1zZ3N0ciAiWmVpbGVuw6RuZGVydW5nZW4genVyw7xja25laG1lbiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjc2NworbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBIRUFEXnt0cmVlfSIKK21zZ3N0ciAiS29ubnRlIEhFQURee3RyZWV9IG5pY2h0IHBhcnNlbi4iCiAKLSM6IGdpdC1ndWkuc2g6MzY5NCBnaXQtZ3VpLnNoOjM3OTEKLW1zZ2lkICJVbmRvIExhc3QgUmV2ZXJ0IgotbXNnc3RyICJMZXR6dGVzIFp1csO8Y2tuZWhtZW4gcsO8Y2tnw6RuZ2lnIgorIzogYWRkLWludGVyYWN0aXZlLmM6ODA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjMxCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJyZXZlcnRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInJldmVydGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIFBmYWQgd2llZGVyaGVyZ2VzdGVsbHRcbiIKK21zZ3N0clsxXSAiJWQgUGZhZGUgd2llZGVyaGVyZ2VzdGVsbHRcbiIKIAotIzogZ2l0LWd1aS5zaDozNzEzCi1tc2dpZCAiUnVuIE1lcmdlIFRvb2wiCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWciCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4NTYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdW50cmFja2VkIGZpbGVzLlxuIgorbXNnc3RyICJLZWluZSB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbi5cbiIKIAotIzogZ2l0LWd1aS5zaDozNzE4Ci1tc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgotbXNnc3RyICJFeHRlcm5lIFZlcnNpb24gYmVudXR6ZW4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4NjAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2ODkKK21zZ2lkICJBZGQgdW50cmFja2VkIgorbXNnc3RyICJ1bnZlcnNpb25pZXJ0ZSBEYXRlaWVuIGhpbnp1ZsO8Z2VuIgogCi0jOiBnaXQtZ3VpLnNoOjM3MjIKLW1zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKLW1zZ3N0ciAiTG9rYWxlIFZlcnNpb24gYmVudXR6ZW4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgImFkZGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAiYWRkZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiJWQgUGZhZCBoaW56dWdlZsO8Z3RcbiIKK21zZ3N0clsxXSAiJWQgUGZhZGUgaGluenVnZWbDvGd0XG4iCiAKLSM6IGdpdC1ndWkuc2g6MzcyNgotbXNnaWQgIlJldmVydCBUbyBCYXNlIgotbXNnc3RyICJadXLDvGNrc2V0emVuIGF1ZiB1cnNwcsO8bmdsaWNoZW4gQ29tbWl0IgorIzogYWRkLWludGVyYWN0aXZlLmM6OTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlcyIKK21zZ3N0ciAiSWdub3JpZXJlIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpOiAlcyIKIAotIzogZ2l0LWd1aS5zaDozNzQ0Ci1tc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiRGllc2Ugw4RuZGVydW5nZW4gaW0gU3VibW9kdWwgZGFyc3RlbGxlbiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkyOSBhZGQtcGF0Y2guYzoxNjc1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkLlxuIgorbXNnc3RyICJOdXIgQmluw6RyZGF0ZWllbiBnZcOkbmRlcnQuXG4iCiAKLSM6IGdpdC1ndWkuc2g6Mzc0OAotbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgIkFrdHVlbGxlbiBCcmFuY2ggaW0gU3VibW9kdWwgZGFyc3RlbGxlbiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkzMSBhZGQtcGF0Y2guYzoxNjczIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjaGFuZ2VzLlxuIgorbXNnc3RyICJLZWluZSDDhG5kZXJ1bmdlbi5cbiIKIAotIzogZ2l0LWd1aS5zaDozNzUyCi1tc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJBbGxlIEJyYW5jaGVzIGltIFN1Ym1vZHVsIGRhcnN0ZWxsZW4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzc2Cittc2dpZCAiUGF0Y2ggdXBkYXRlIgorbXNnc3RyICJQYXRjaCBBa3R1YWxpc2llcnVuZyIKIAotIzogZ2l0LWd1aS5zaDozNzU3Ci1tc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJHaXQgZ3VpIGltIFN1Ym1vZHVsIHN0YXJ0ZW4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5NzQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzU0Cittc2dpZCAiUmV2aWV3IGRpZmYiCittc2dzdHIgIkRpZmYgw7xiZXJwcsO8ZmVuIgogCi0jOiBnaXQtZ3VpLnNoOjM3OTMKLW1zZ2lkICJVbnN0YWdlIEh1bmsgRnJvbSBDb21taXQiCi1tc2dzdHIgIlBhdGNoLUJsb2NrIGF1cyBCZXJlaXRzdGVsbHVuZyBoZXJhdXNuZWhtZW4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDAyCittc2dpZCAic2hvdyBwYXRocyB3aXRoIGNoYW5nZXMiCittc2dzdHIgIlplaWdlIFBmYWRlIG1pdCDDhG5kZXJ1bmdlbiIKIAotIzogZ2l0LWd1aS5zaDozNzk3Ci1tc2dpZCAiVW5zdGFnZSBMaW5lcyBGcm9tIENvbW1pdCIKLW1zZ3N0ciAiWmVpbGVuIGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgorIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNAorbXNnaWQgImFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAiWnVzdGFuZCBkZXMgQXJiZWl0c3ZlcnplaWNobmlzc2VzIHp1bSBDb21taXQgdm9ybWVya2VuIgogCi0jOiBnaXQtZ3VpLnNoOjM3OTggZ2l0LWd1aS5zaDozODA5Ci1tc2dpZCAiUmV2ZXJ0IExpbmVzIgotbXNnc3RyICJaZWlsZW7DpG5kZXJ1bmcgenVyw7xja25laG1lbiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDYKK21zZ2lkICJyZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvbiIKK21zZ3N0ciAiWnVtIENvbW1pdCB2b3JnZW1lcmt0ZSDDhG5kZXJ1bmdlbiBhdWYgSEVBRC1WZXJzaW9uIHp1csO8Y2tzZXR6ZW4iCiAKLSM6IGdpdC1ndWkuc2g6MzgwMAotbXNnaWQgIlVuc3RhZ2UgTGluZSBGcm9tIENvbW1pdCIKLW1zZ3N0ciAiWmVpbGUgYXVzIGRlciBCZXJlaXRzdGVsbHVuZyBoZXJhdXNuZWhtZW4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA4Cittc2dpZCAicGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5IgorbXNnc3RyICJCbMO2Y2tlIHVuZCDDhG5kZXJ1bmcgZ2V6aWVsdCBhdXN3w6RobGVuIgogCi0jOiBnaXQtZ3VpLnNoOjM4MDQKLW1zZ2lkICJTdGFnZSBIdW5rIEZvciBDb21taXQiCi1tc2dzdHIgIlBhdGNoLUJsb2NrIHp1ciBCZXJlaXRzdGVsbHVuZyBoaW56dWbDvGdlbiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTAKK21zZ2lkICJ2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAiRGlmZmVyZW56IHp3aXNjaGVuIEhFQUQgdW5kIEluZGV4IGFuc2VoZW4iCiAKLSM6IGdpdC1ndWkuc2g6MzgwOAotbXNnaWQgIlN0YWdlIExpbmVzIEZvciBDb21taXQiCi1tc2dzdHIgIlplaWxlbiB6dXIgQmVyZWl0c3RlbGx1bmcgaGluenVmw7xnZW4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEyCittc2dpZCAiYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICJJbmhhbHRlIHZvbiB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiB6dW0gQ29tbWl0IHZvcm1lcmtlbiIKIAotIzogZ2l0LWd1aS5zaDozODExCi1tc2dpZCAiU3RhZ2UgTGluZSBGb3IgQ29tbWl0IgotbXNnc3RyICJaZWlsZSB6dXIgQmVyZWl0c3RlbGx1bmcgaGluenVmw7xnZW4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDIwIGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjkKK21zZ2lkICJQcm9tcHQgaGVscDoiCittc2dzdHIgIkhpbGZlIGbDvHIgRWluZ2FiZW46IgogCi0jOiBnaXQtZ3VpLnNoOjM4NjEKLW1zZ2lkICJJbml0aWFsaXppbmcuLi4iCi1tc2dzdHIgIkluaXRpYWxpc2llcmVuLi4uIgorIzogYWRkLWludGVyYWN0aXZlLmM6MTAyMgorbXNnaWQgInNlbGVjdCBhIHNpbmdsZSBpdGVtIgorbXNnc3RyICJFaW4gZWluemVsbmVzIEVsZW1lbnQgYXVzd8OkaGxlbiIKIAotIzogZ2l0LWd1aS5zaDo0MDE3Ci0jLCB0Y2wtZm9ybWF0CisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI0Cittc2dpZCAic2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXMiCittc2dzdHIgIkVpbmUgUmVpaGUgdm9uIEVsZW1lbnRlbiBhdXN3w6RobGVuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI2Cittc2dpZCAic2VsZWN0IG11bHRpcGxlIHJhbmdlcyIKK21zZ3N0ciAiTWVocmVyZSBSZWloZW4gYXVzd8OkaGxlbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAyOCBhZGQtaW50ZXJhY3RpdmUuYzoxMDczCittc2dpZCAic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIKK21zZ3N0ciAiRWxlbWVudCBiYXNpZXJlbmQgYXVmIGVpbmRldXRpZ2VuIFByw6RmaXggYXVzd8OkaGxlbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAzMAorbXNnaWQgInVuc2VsZWN0IHNwZWNpZmllZCBpdGVtcyIKK21zZ3N0ciAiQW5nZWdlYmVuZSBFbGVtZW50ZSBhYnfDpGhsZW4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMzIKK21zZ2lkICJjaG9vc2UgYWxsIGl0ZW1zIgorbXNnc3RyICJBbGxlIEVsZW1lbnRlIGF1c3fDpGhsZW4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMzQKK21zZ2lkICIoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIihsZWVyKSBBdXN3w6RobGVuIGJlZW5kZW4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNzEKK21zZ2lkICJzZWxlY3QgYSBudW1iZXJlZCBpdGVtIgorbXNnc3RyICJFaW4gbnVtbWVyaWVydGVzIEVsZW1lbnQgYXVzd8OkaGxlbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA3NQorbXNnaWQgIihlbXB0eSkgc2VsZWN0IG5vdGhpbmciCittc2dzdHIgIihsZWVyKSBuaWNodHMgYXVzd8OkaGxlbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA4MyBidWlsdGluL2NsZWFuLmM6ODIyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg1MQorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiBCZWZlaGxlICoqKiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA4NCBidWlsdGluL2NsZWFuLmM6ODIzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg0OAorbXNnaWQgIldoYXQgbm93IgorbXNnc3RyICJXYXMgbnVuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAic3RhZ2VkIgorbXNnc3RyICJ6dXIgU3RhZ2luZy1BcmVhIGhpbnp1Z2Vmw7xndCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTEzNiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInVuc3RhZ2VkIgorbXNnc3RyICJhdXMgU3RhZ2luZy1BcmVhIGVudGZlcm50IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGFwcGx5LmM6NDk2NyBhcHBseS5jOjQ5NzAgYnVpbHRpbi9hbS5jOjIyNTEKKyM6IGJ1aWx0aW4vYW0uYzoyMjU0IGJ1aWx0aW4vY2xvbmUuYzoxMjMgYnVpbHRpbi9mZXRjaC5jOjE0NAorIzogYnVpbHRpbi9tZXJnZS5jOjI3NCBidWlsdGluL3B1bGwuYzoxODkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTcKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTAyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA1CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE0OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInBhdGgiCittc2dzdHIgIlBmYWQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExNDMKK21zZ2lkICJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiSW5kZXgga29ubnRlIG5pY2h0IGFrdHVhbGlzaWVydCB3ZXJkZW4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExNTcgYnVpbHRpbi9jbGVhbi5jOjc4NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnllLlxuIgorbXNnc3RyICJUc2Now7xzcy5cbiIKKworIzogYWRkLXBhdGNoLmM6MzMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTW9kdXPDpG5kZXJ1bmcgZGVyIFN0YWdpbmctQXJlYSBoaW56dWbDvGdlbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MzQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI5CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTMO2c2NodW5nIGRlciBTdGFnaW5nLUFyZWEgaGluenVmw7xnZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJEaWVzZW4gUGF0Y2gtQmxvY2sgZGVyIFN0YWdpbmctQXJlYSBoaW56dWbDvGdlbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MzcKIG1zZ2lkICIiCi0iUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorInN0YWdpbmcuIgorbXNnc3RyICIiCisiV2VubiBkZXIgUGF0Y2ggc2F1YmVyIGFuZ2V3ZW5kZXQgd2VyZGVuIGthbm4sIHdpcmQgZGVyIGJlYXJiZWl0ZXRlICIKKyJQYXRjaC1CbG9jayBkaXJla3QgZsO8ciBkaWUgU3RhZ2luZy1BcmVhIG1hcmtpZXJ0LiIKKworIzogYWRkLXBhdGNoLmM6NDAKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgenVtIENvbW1pdCB2b3JtZXJrZW5cbiIKKyJuIC0gZGllc2VuIFBhdGNoLUJsb2NrIG5pY2h0IHp1bSBDb21taXQgdm9ybWVya2VuXG4iCisicSAtIEJlZW5kZW47IGRpZXNlbiBvZGVyIGFsbGUgdmVyYmxlaWJlbmRlbiBQYXRjaC1CbMO2Y2tlIG5pY2h0IHp1bSBDb21taXQgIgorInZvcm1lcmtlblxuIgorImEgLSBkaWVzZW4gdW5kIGFsbGUgd2VpdGVyZW4gUGF0Y2gtQmzDtmNrZSBkaWVzZXIgRGF0ZWkgenVtIENvbW1pdCB2b3JtZXJrZW5cbiIKKyJkIC0gZGllc2VuIG9kZXIgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGluIGRpZXNlciBEYXRlaSBuaWNodCB6dW0gQ29tbWl0ICIKKyJ2b3JtZXJrZW5cbiIKKworIzogYWRkLXBhdGNoLmM6NTQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMzCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTW9kdXPDpG5kZXJ1bmcgc3Rhc2hlbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTMO2c2NodW5nIHN0YXNoZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjU2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJEaWVzZW4gUGF0Y2gtQmxvY2sgc3Rhc2hlbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NTgKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisic3Rhc2hpbmcuIgorbXNnc3RyICIiCisiV2VubiBkZXIgUGF0Y2ggc2F1YmVyIGFuZ2V3ZW5kZXQgd2VyZGVuIGthbm4sIHdpcmQgZGVyIGJlYXJiZWl0ZXRlICIKKyJQYXRjaC1CbG9jayBkaXJla3QgenVtIFN0YXNoZW4gbWFya2llcnQuIgorCisjOiBhZGQtcGF0Y2guYzo2MQorbXNnaWQgIiIKKyJ5IC0gc3Rhc2ggdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YXNoIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIGRpZXNlbiBQYXRjaC1CbG9jayBzdGFzaGVuXG4iCisibiAtIGRpZXNlbiBQYXRjaC1CbG9jayBuaWNodCBzdGFzaGVuXG4iCisicSAtIEJlZW5kZW47IGRpZXNlbiBvZGVyIGFsbGUgdmVyYmxlaWJlbmRlbiBQYXRjaC1CbMO2Y2tlIG5pY2h0IHN0YXNoZW5cbiIKKyJhIC0gZGllc2VuIHVuZCBhbGxlIHdlaXRlcmVuIFBhdGNoLUJsw7Zja2UgZGllc2VyIERhdGVpIHN0YXNoZW5cbiIKKyJkIC0gZGllc2VuIG9kZXIgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGRpZXNlciBEYXRlaSBuaWNodCBzdGFzaGVuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjc3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzOAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTW9kdXPDpG5kZXJ1bmcgYXVzIGRlciBTdGFnaW5nLUFyZWEgZW50ZmVybmVuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzo3OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzkKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkzDtnNjaHVuZyBhdXMgZGVyIFN0YWdpbmctQXJlYSBlbnRmZXJuZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjc5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkRpZXNlbiBQYXRjaC1CbG9jayBhdXMgZGVyIFN0YWdpbmctQXJlYSBlbnRmZXJuZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjgxCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorInVuc3RhZ2luZy4iCittc2dzdHIgIiIKKyJXZW5uIGRlciBQYXRjaCBzYXViZXIgYW5nZXdlbmRldCB3ZXJkZW4ga2Fubiwgd2lyZCBkZXIgYmVhcmJlaXRldGUgIgorIlBhdGNoLUJsb2NrIGRpcmVrdCB6dW0gRW50ZmVybmVuIGF1cyBkZXIgU3RhZ2luZy1BcmVhIG1hcmtpZXJ0LiIKKworIzogYWRkLXBhdGNoLmM6ODQKK21zZ2lkICIiCisieSAtIHVuc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSB1bnN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gZGllc2VuIFBhdGNoLUJsb2NrIGF1cyBTdGFnaW5nLUFyZWEgZW50ZmVybmVuXG4iCisibiAtIGRpZXNlbiBQYXRjaC1CbG9jayBuaWNodCBhdXMgU3RhZ2luZy1BcmVhIGVudGZlcm5lblxuIgorInEgLSBCZWVuZGVuOyBkaWVzZW4gb2RlciBhbGxlIHZlcmJsZWliZW5kZW4gUGF0Y2gtQmzDtmNrZSBuaWNodCBhdXMgU3RhZ2luZy0iCisiQXJlYSBlbnRmZXJuZW5cbiIKKyJhIC0gZGllc2VuIHVuZCBhbGxlIHdlaXRlcmVuIFBhdGNoLUJsw7Zja2UgZGllc2VyIERhdGVpIGF1cyBTdGFnaW5nLUFyZWEgIgorImVudGZlcm5lblxuIgorImQgLSBkaWVzZW4gb2RlciBhbGxlIHdlaXRlcmVuIFBhdGNoLUJsw7Zja2UgZGllc2VyIERhdGVpIG5pY2h0IGF1cyBTdGFnaW5nLSIKKyJBcmVhIGVudGZlcm5lblxuIgorCisjOiBhZGQtcGF0Y2guYzo5OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJNb2R1c8OkbmRlcnVuZyBhdWYgSW5kZXggYW53ZW5kZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEwMCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDQKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJMw7ZzY2h1bmcgYXVmIEluZGV4IGFud2VuZGVuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMDEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkRpZXNlbiBQYXRjaC1CbG9jayBhdWYgSW5kZXggYW53ZW5kZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEwMyBhZGQtcGF0Y2guYzoxNjggYWRkLXBhdGNoLmM6MjExCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorImFwcGx5aW5nLiIKK21zZ3N0ciAiV2VubiBkZXIgUGF0Y2ggc2F1YmVyIGFuZ2V3ZW5kZXQgd2VyZGVuIGthbm4sIHdpcmQgZGVyIGJlYXJiZWl0ZXRlICIKKyJQYXRjaC1CbG9jayBkaXJla3QgenVtIEFud2VuZGVuIG1hcmtpZXJ0LiIKKworIzogYWRkLXBhdGNoLmM6MTA2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gZGllc2VuIFBhdGNoLUJsb2NrIGF1ZiBkZW4gSW5kZXggYW53ZW5kZW5cbiIKKyJuIC0gZGllc2VuIFBhdGNoLUJsb2NrIG5pY2h0IGF1ZiBkZW4gSW5kZXggYW53ZW5kZW5cbiIKKyJxIC0gQmVlbmRlbjsgZGllc2VuIG9kZXIgYWxsZSB2ZXJibGVpYmVuZGVuIFBhdGNoLUJsw7Zja2UgbmljaHQgYXVmIGRlbiBJbmRleCAiCisiYW53ZW5kZW5cbiIKKyJhIC0gZGllc2VuIHVuZCBhbGxlIHdlaXRlcmVuIFBhdGNoLUJsw7Zja2UgZGllc2VyIERhdGVpIGF1ZiBkZW4gSW5kZXggIgorImFud2VuZGVuXG4iCisiZCAtIGRpZXNlbiBvZGVyIGFsbGUgd2VpdGVyZW4gUGF0Y2gtQmzDtmNrZSBkaWVzZXIgRGF0ZWkgbmljaHQgYXVmIGRlbiBJbmRleCAiCisiYW53ZW5kZW5cbiIKKworIzogYWRkLXBhdGNoLmM6MTIxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYzCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIk1vZHVzw6RuZGVydW5nIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB2ZXJ3ZXJmZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyMiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDkKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJMw7ZzY2h1bmcgaW0gQXJiZWl0c3ZlcnplaWNobmlzIHZlcndlcmZlbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTIzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1MAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJEaWVzZW4gUGF0Y2gtQmxvY2sgaW0gQXJiZWl0c3ZlcnplaWNobmlzIHZlcndlcmZlbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTI1IGFkZC1wYXRjaC5jOjE0NyBhZGQtcGF0Y2guYzoxOTAKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisiZGlzY2FyZGluZy4iCittc2dzdHIgIiIKKyJXZW5uIGRlciBQYXRjaCBzYXViZXIgYW5nZXdlbmRldCB3ZXJkZW4ga2Fubiwgd2lyZCBkZXIgYmVhcmJlaXRldGUgIgorIlBhdGNoLUJsb2NrIGRpcmVrdCB6dW0gVmVyd2VyZmVuIG1hcmtpZXJ0LiIKKworIzogYWRkLXBhdGNoLmM6MTI4IGFkZC1wYXRjaC5jOjE5MworbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gZGllc2VuIFBhdGNoLUJsb2NrIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB2ZXJ3ZXJmZW5cbiIKKyJuIC0gZGllc2VuIFBhdGNoLUJsb2NrIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyBuaWNodCB2ZXJ3ZXJmZW5cbiIKKyJxIC0gQmVlbmRlbjsgZGllc2VuIG9kZXIgYWxsZSB2ZXJibGVpYmVuZGVuIFBhdGNoLUJsw7Zja2UgbmljaHQgaW0gIgorIkFyYmVpdHN2ZXJ6ZWljaG5pcyB2ZXJ3ZXJmZW5cbiIKKyJhIC0gZGllc2VuIHVuZCBhbGxlIHdlaXRlcmVuIFBhdGNoLUJsw7Zja2UgZGllc2VyIERhdGVpIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyAiCisidmVyd2VyZmVuXG4iCisiZCAtIGRpZXNlbiBvZGVyIGFsbGUgd2VpdGVyZW4gUGF0Y2gtQmzDtmNrZSBkaWVzZXIgRGF0ZWkgbmljaHQgaW0gIgorIkFyYmVpdHN2ZXJ6ZWljaG5pcyB2ZXJ3ZXJmZW5cbiIKKworIzogYWRkLXBhdGNoLmM6MTQzIGFkZC1wYXRjaC5jOjE4NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyJNb2R1c8OkbmRlcnVuZyB2b20gSW5kZXggdW5kIEFyYmVpdHN2ZXJ6ZWljaG5pcyB2ZXJ3ZXJmZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE0NCBhZGQtcGF0Y2guYzoxODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJMw7ZzY2h1bmcgdm9tIEluZGV4IHVuZCBBcmJlaXRzdmVyemVpY2huaXMgdmVyd2VyZmVuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNDUgYWRkLXBhdGNoLmM6MTg4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyJEaWVzZW4gUGF0Y2gtQmxvY2sgdm9tIEluZGV4IHVuZCBBcmJlaXRzdmVyemVpY2huaXMgdmVyd2VyZmVuIFt5LG4scSxhLGQiCisiJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTUwCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIGRpZXNlbiBQYXRjaC1CbG9jayBpbSBJbmRleCB1bmQgQXJiZWl0c3ZlcnplaWNobmlzIHZlcndlcmZlblxuIgorIm4gLSBkaWVzZW4gUGF0Y2gtQmxvY2sgbmljaHQgaW0gSW5kZXggdW5kIEFyYmVpdHN2ZXJ6ZWljaG5pcyB2ZXJ3ZXJmZW5cbiIKKyJxIC0gQmVlbmRlbjsgZGllc2VuIG9kZXIgYWxsZSB2ZXJibGVpYmVuZGVuIFBhdGNoLUJsw7Zja2UgbmljaHQgdmVyd2VyZmVuXG4iCisiYSAtIGRpZXNlbiB1bmQgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGluIGRlciBEYXRlaSB2ZXJ3ZXJmZW5cbiIKKyJkIC0gZGllc2VuIG9kZXIgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGluIGRlciBEYXRlaSBuaWNodCB2ZXJ3ZXJmZW5cbiIKKworIzogYWRkLXBhdGNoLmM6MTY0IGFkZC1wYXRjaC5jOjIwNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIk1vZHVzw6RuZGVydW5nIGF1ZiBJbmRleCB1bmQgQXJiZWl0c3ZlcnplaWNobmlzIGFud2VuZGVuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNjUgYWRkLXBhdGNoLmM6MjA4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJMw7ZzY2h1bmcgYXVmIEluZGV4IHVuZCBBcmJlaXRzdmVyemVpY2huaXMgYW53ZW5kZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE2NiBhZGQtcGF0Y2guYzoyMDkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYwCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisiRGllc2VuIFBhdGNoLUJsb2NrIGF1ZiBJbmRleCB1bmQgQXJiZWl0c3ZlcnplaWNobmlzIGFud2VuZGVuIFt5LG4scSxhLGQiCisiJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTcxCittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgaW0gSW5kZXggdW5kIGF1ZiBkYXMgQXJiZWl0c3ZlcnplaWNobmlzIGFud2VuZGVuXG4iCisibiAtIGRpZXNlbiBQYXRjaC1CbG9jayBuaWNodCBpbSBJbmRleCB1bmQgYXVmIGRhcyBBcmJlaXRzdmVyemVpY2huaXMgIgorImFud2VuZGVuXG4iCisicSAtIEJlZW5kZW47IGRpZXNlbiBvZGVyIGFsbGUgdmVyYmxlaWJlbmRlbiBQYXRjaC1CbMO2Y2tlIG5pY2h0IGFud2VuZGVuXG4iCisiYSAtIGRpZXNlbiB1bmQgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGluIGRlciBEYXRlaSBhbndlbmRlblxuIgorImQgLSBkaWVzZW4gb2RlciBhbGxlIHdlaXRlcmVuIFBhdGNoLUJsw7Zja2UgaW4gZGVyIERhdGVpIG5pY2h0IGFud2VuZGVuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjIxNAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIGRpZXNlbiBQYXRjaC1CbG9jayBhdWYgZGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcyBhbndlbmRlblxuIgorIm4gLSBkaWVzZW4gUGF0Y2gtQmxvY2sgbmljaHQgYXVmIGRhcyBBcmJlaXRzdmVyemVpY2huaXMgYW53ZW5kZW5cbiIKKyJxIC0gQmVlbmRlbjsgZGllc2VuIHVuZCBhbGxlIHZlcmJsZWliZW5kZW4gUGF0Y2gtQmzDtmNrZSBuaWNodCBhbndlbmRlblxuIgorImEgLSBkaWVzZW4gdW5kIGFsbGUgd2VpdGVyZW4gUGF0Y2gtQmzDtmNrZSBpbiBkZXIgRGF0ZWkgYW53ZW5kZW5cbiIKKyJkIC0gZGllc2VuIHVuZCBhbGxlIHdlaXRlcmVuIFBhdGNoLUJsw7Zja2UgaW4gZGVyIERhdGVpIG5pY2h0IGFud2VuZGVuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICJLb25udGUgQmxvY2stSGVhZGVyICclLipzJyBuaWNodCBwYXJzZW4uIgorCisjOiBhZGQtcGF0Y2guYzozMzcgYWRkLXBhdGNoLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAiS29ubnRlIGZhcmJpZ2VuIEJsb2NrLUhlYWRlciAnJS4qcycgbmljaHQgcGFyc2VuLiIKKworIzogYWRkLXBhdGNoLmM6Mzk1Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGRpZmYiCittc2dzdHIgIktvbm50ZSBEaWZmZXJlbnogbmljaHQgcGFyc2VuLiIKKworIzogYWRkLXBhdGNoLmM6NDE0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAiS29ubnRlIGZhcmJpZ2UgRGlmZmVyZW56IG5pY2h0IHBhcnNlbi4iCisKKyM6IGFkZC1wYXRjaC5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICclcyciCittc2dzdHIgIiclcycga29ubnRlIG5pY2h0IGF1c2dlZsO8aHJ0IHdlcmRlbiIKKworIzogYWRkLXBhdGNoLmM6NTg3Cittc2dpZCAibWlzbWF0Y2hlZCBvdXRwdXQgZnJvbSBpbnRlcmFjdGl2ZS5kaWZmRmlsdGVyIgorbXNnc3RyICJuaWNodCDDvGJlcmVpbnN0aW1tZW5kZSBBdXNnYWJlIHZvbiBpbnRlcmFjdGl2ZS5kaWZmRmlsdGVyIgorCisjOiBhZGQtcGF0Y2guYzo1ODgKK21zZ2lkICIiCisiWW91ciBmaWx0ZXIgbXVzdCBtYWludGFpbiBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2VcbiIKKyJiZXR3ZWVuIGl0cyBpbnB1dCBhbmQgb3V0cHV0IGxpbmVzLiIKK21zZ3N0ciAiIgorIkRlciBGaWx0ZXIgbXVzcyBlaW5lIEVpbnMtenUtRWlucy1CZXppZWh1bmdcbiIKKyJ6d2lzY2hlbiBkZW4gRWluLSB1bmQgQXVzZ2FiZS1aZWlsZW4gZWluaGFsdGVuLiIKKworIzogYWRkLXBhdGNoLmM6NzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBjb250ZXh0IGxpbmUgIyVkIGluXG4iCisiJS4qcyIKK21zZ3N0ciAiIgorIkVyd2FydGV0ZSBLb250ZXh0emVpbGUgIyVkIGluXG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJodW5rcyBkbyBub3Qgb3ZlcmxhcDpcbiIKKyIlLipzXG4iCisiXHRkb2VzIG5vdCBlbmQgd2l0aDpcbiIKKyIlLipzIgorbXNnc3RyICIiCisiUGF0Y2gtQmzDtmNrZSDDvGJlcmxhcHBlbiBzaWNoIG5pY2h0OlxuIgorIiUuKnNcbiIKKyJcdGVuZGV0IG5pY2h0IG1pdDpcbiIKKyIlLipzIgorCisjOiBhZGQtcGF0Y2guYzoxMDUyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMgorbXNnaWQgIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlLlxuIgorbXNnc3RyICIiCisiTWFudWVsbGVyIEVkaXRpZXJtb2R1cyBmw7xyIFBhdGNoLUJsw7Zja2UgLS0gc2llaGUgbmFjaCB1bnRlbiBmw7xyIGVpbmVcbiIKKyJLdXJ6YW5sZWl0dW5nLlxuIgorCisjOiBhZGQtcGF0Y2guYzoxMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclYycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJWMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisiLS0tXG4iCisiVW0gJyVjJyBaZWlsZW4genUgZW50ZmVybmVuLCBtYWNoZW4gU2llIGF1cyBkaWVzZW4gJyAnIFplaWxlbiAoS29udGV4dCkuXG4iCisiVW0gJyVjJyBaZWlsZW4genUgZW50ZmVybmVuLCBsw7ZzY2hlbiBTaWUgZGllc2UuXG4iCisiWmVpbGVuLCBkaWUgbWl0ICVjIGJlZ2lubmVuLCB3ZXJkZW4gZW50ZmVybnQuXG4iCisKKyMuIFRSQU5TTEFUT1JTOiAnaXQnIHJlZmVycyB0byB0aGUgcGF0Y2ggbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBtZXNzYWdlcy4KKyM6IGFkZC1wYXRjaC5jOjEwNzAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTI2Cittc2dpZCAiIgorIklmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlIGdpdmVuIGFuIG9wcG9ydHVuaXR5IHRvXG4iCisiZWRpdCBhZ2Fpbi4gIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgcmVtb3ZlZCwgdGhlbiB0aGUgZWRpdCBpc1xuIgorImFib3J0ZWQgYW5kIHRoZSBodW5rIGlzIGxlZnQgdW5jaGFuZ2VkLlxuIgorbXNnc3RyICIiCisiV2VubiBkYXMgbmljaHQgc2F1YmVyIGFuZ2V3ZW5kZXQgd2VyZGVuIGthbm4sIGhhYmVuIFNpZSBkaWUgTcO2Z2xpY2hrZWl0XG4iCisiZWluZXIgZXJuZXV0ZW4gQmVhcmJlaXR1bmcuIFdlbm4gYWxsZSBaZWlsZW4gZGVzIFBhdGNoLUJsb2NrcyBlbnRmZXJudCAiCisid2VyZGVuLFxuIgorIndpcmQgZGllIEJlYXJiZWl0dW5nIGFiZ2Vicm9jaGVuIHVuZCBkZXIgUGF0Y2gtQmxvY2sgYmxlaWJ0IHVudmVyw6RuZGVydC5cbiIKKworIzogYWRkLXBhdGNoLmM6MTEwMworbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciIKK21zZ3N0ciAiS29ubnRlIEJsb2NrLUhlYWRlciBuaWNodCBwYXJzZW4uIgorCisjOiBhZGQtcGF0Y2guYzoxMTQ4Cittc2dpZCAiJ2dpdCBhcHBseSAtLWNhY2hlZCcgZmFpbGVkIgorbXNnc3RyICInZ2l0IGFwcGx5IC0tY2FjaGVkJyBzY2hsdWcgZmVobC4iCisKKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjLgorIy4gVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKyMuIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgdGhhdCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjOiBhZGQtcGF0Y2guYzoxMjE4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIzOQorbXNnaWQgIiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/ICIKK21zZ3N0ciAiIgorIklociBiZWFyYmVpdGV0ZXIgUGF0Y2gtQmxvY2sga2FubiBuaWNodCBhbmdld2VuZGV0IHdlcmRlbi5cbiIKKyJFcm5ldXQgYmVhcmJlaXRlbj8gKFwiblwiIHZlcndpcmZ0IEJlYXJiZWl0dW5nISkgW3kvbl0/IgorCisjOiBhZGQtcGF0Y2guYzoxMjYxCittc2dpZCAiVGhlIHNlbGVjdGVkIGh1bmtzIGRvIG5vdCBhcHBseSB0byB0aGUgaW5kZXghIgorbXNnc3RyICIiCisiRGllIGF1c2dld8OkaGx0ZW4gUGF0Y2gtQmzDtmNrZSBrw7ZubmVuIG5pY2h0IGF1ZiBkZW4gSW5kZXggYW5nZXdlbmRldCB3ZXJkZW4hIgorCisjOiBhZGQtcGF0Y2guYzoxMjYyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MworbXNnaWQgIkFwcGx5IHRoZW0gdG8gdGhlIHdvcmt0cmVlIGFueXdheT8gIgorbXNnc3RyICJUcm90emRlbSBhdWYgQXJiZWl0c3ZlcnplaWNobmlzIGFud2VuZGVuPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyNjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQ2Cittc2dpZCAiTm90aGluZyB3YXMgYXBwbGllZC5cbiIKK21zZ3N0ciAiTmljaHRzIGFuZ2V3ZW5kZXQuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjEzMjYKK21zZ2lkICIiCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJqIC0gZGllc2VuIFBhdGNoLUJsb2NrIHVuYmVzdGltbXQgbGFzc2VuLCBuw6RjaHN0ZW4gdW5iZXN0aW1tdGVuIFBhdGNoLUJsb2NrICIKKyJhbnplaWdlblxuIgorIkogLSBkaWVzZW4gUGF0Y2gtQmxvY2sgdW5iZXN0aW1tdCBsYXNzZW4sIG7DpGNoc3RlbiBQYXRjaC1CbG9jayBhbnplaWdlblxuIgorImsgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgdW5iZXN0aW1tdCBsYXNzZW4sIHZvcmhlcmlnZW4gdW5iZXN0aW1tdGVuIFBhdGNoLSIKKyJCbG9jayBhbnplaWdlblxuIgorIksgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgdW5iZXN0aW1tdCBsYXNzZW4sIHZvcmhlcmlnZW4gUGF0Y2gtQmxvY2sgYW56ZWlnZW5cbiIKKyJnIC0gUGF0Y2gtQmxvY2sgenVtIEhpbnNwcmluZ2VuIGF1c3fDpGhsZW5cbiIKKyIvIC0gbmFjaCBQYXRjaC1CbG9jayBzdWNoZW4sIGRlciBnZWdlYmVuZW0gcmVndWzDpHJlbSBBdXNkcnVjayBlbnRzcHJpY2h0XG4iCisicyAtIGFrdHVlbGxlbiBQYXRjaC1CbG9jayBpbiBrbGVpbmVyZSBQYXRjaC1CbMO2Y2tlIGF1ZnRlaWxlblxuIgorImUgLSBha3R1ZWxsZW4gUGF0Y2gtQmxvY2sgbWFudWVsbCBlZGl0aWVyZW5cbiIKKyI/IC0gSGlsZmUgYW56ZWlnZW5cbiIKKworIzogYWRkLXBhdGNoLmM6MTQ0NyBhZGQtcGF0Y2guYzoxNDU3Cittc2dpZCAiTm8gcHJldmlvdXMgaHVuayIKK21zZ3N0ciAiS2VpbiB2b3JoZXJpZ2VyIFBhdGNoLUJsb2NrIgorCisjOiBhZGQtcGF0Y2guYzoxNDUyIGFkZC1wYXRjaC5jOjE0NjIKK21zZ2lkICJObyBuZXh0IGh1bmsiCittc2dzdHIgIktlaW4gZm9sZ2VuZGVyIFBhdGNoLUJsb2NrIgorCisjOiBhZGQtcGF0Y2guYzoxNDY4Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290byIKK21zZ3N0ciAiS2VpbmUgYW5kZXJlbiBQYXRjaC1CbMO2Y2tlIHZlcmJsZWliZW5kIgorCisjOiBhZGQtcGF0Y2guYzoxNDc5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3NworbXNnaWQgImdvIHRvIHdoaWNoIGh1bmsgKDxyZXQ+IHRvIHNlZSBtb3JlKT8gIgorbXNnc3RyICJ6dSB3ZWxjaGVtIFBhdGNoLUJsb2NrIHNwcmluZ2VuICg8RW50ZXI+IGbDvHIgbWVociBJbmZvcm1hdGlvbmVuKT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNDgwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3OQorbXNnaWQgImdvIHRvIHdoaWNoIGh1bms/ICIKK21zZ3N0ciAienUgd2VsY2hlbSBQYXRjaC1CbG9jayBzcHJpbmdlbj8gIgorCisjOiBhZGQtcGF0Y2guYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlIE51bW1lcjogJyVzJyIKKworIzogYWRkLXBhdGNoLmM6MTQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS4iCittc2dpZF9wbHVyYWwgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS4iCittc2dzdHJbMF0gIkVudHNjaHVsZGlndW5nLCBudXIgJWQgUGF0Y2gtQmxvY2sgdmVyZsO8Z2Jhci4iCittc2dzdHJbMV0gIkVudHNjaHVsZGlndW5nLCBudXIgJWQgUGF0Y2gtQmzDtmNrZSB2ZXJmw7xnYmFyLiIKKworIzogYWRkLXBhdGNoLmM6MTUwNQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaCIKK21zZ3N0ciAiS2VpbmUgYW5kZXJlbiBQYXRjaC1CbMO2Y2tlIHp1bSBEdXJjaHN1Y2hlbiIKKworIzogYWRkLXBhdGNoLmM6MTUxMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MjMKK21zZ2lkICJzZWFyY2ggZm9yIHJlZ2V4PyAiCittc2dzdHIgIlN1Y2hlIG5hY2ggcmVndWzDpHJlbSBBdXNkcnVjaz8gIgorCisjOiBhZGQtcGF0Y2guYzoxNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlcyIKK21zZ3N0ciAiRmVobGVyaGFmdGVyIHJlZ3Vsw6RyZXIgQXVzZHJ1Y2sgZsO8ciBTdWNoZSAlczogJXMiCisKKyM6IGFkZC1wYXRjaC5jOjE1NDMKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4iCittc2dzdHIgIktlaW4gUGF0Y2gtQmxvY2sgZW50c3ByaWNodCBkZW0gYW5nZWdlYmVuZW4gTXVzdGVyIgorCisjOiBhZGQtcGF0Y2guYzoxNTUwCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmsiCittc2dzdHIgIkVudHNjaHVsZGlndW5nLCBrYW5uIGRpZXNlbiBQYXRjaC1CbG9jayBuaWNodCBhdWZ0ZWlsZW4iCisKKyM6IGFkZC1wYXRjaC5jOjE1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rcy4iCittc2dzdHIgIkluICVkIFBhdGNoLUJsb2NrIGF1ZmdldGVpbHQuIgorCisjOiBhZGQtcGF0Y2guYzoxNTU4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVuayIKK21zZ3N0ciAiRW50c2NodWxkaWd1bmcsIGthbm4gZGllc2VuIFBhdGNoLUJsb2NrIG5pY2h0IGJlYXJiZWl0ZW4iCisKKyM6IGFkZC1wYXRjaC5jOjE2MDkKK21zZ2lkICInZ2l0IGFwcGx5JyBmYWlsZWQiCittc2dzdHIgIidnaXQgYXBwbHknIHNjaGx1ZyBmZWhsIgorCisjOiBhZHZpY2UuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNoaW50OiAlLipzJXNcbiIKK21zZ3N0ciAiJXNIaW53ZWlzOiAlLipzJXNcbiIKKworIzogYWR2aWNlLmM6MTY4Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiQ2hlcnJ5LVBpY2tlbiBpc3QgbmljaHQgbcO2Z2xpY2gsIHdlaWwgU2llIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4gIgorImhhYmVuLiIKKworIzogYWR2aWNlLmM6MTcwCittc2dpZCAiQ29tbWl0dGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKyJDb21taXR0ZW4gaXN0IG5pY2h0IG3DtmdsaWNoLCB3ZWlsIFNpZSBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBEYXRlaWVuIGhhYmVuLiIKKworIzogYWR2aWNlLmM6MTcyCittc2dpZCAiTWVyZ2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKyJNZXJnZW4gaXN0IG5pY2h0IG3DtmdsaWNoLCB3ZWlsIFNpZSBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBEYXRlaWVuIGhhYmVuLiIKKworIzogYWR2aWNlLmM6MTc0Cittc2dpZCAiUHVsbGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKyJQdWxsZW4gaXN0IG5pY2h0IG3DtmdsaWNoLCB3ZWlsIFNpZSBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBEYXRlaWVuIGhhYmVuLiIKKworIzogYWR2aWNlLmM6MTc2Cittc2dpZCAiUmV2ZXJ0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIlJldmVydGVuIGlzdCBuaWNodCBtw7ZnbGljaCwgd2VpbCBTaWUgbmljaHQgenVzYW1tZW5nZWbDvGhydGUgRGF0ZWllbiBoYWJlbi4iCisKKyM6IGFkdmljZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJJdCBpcyBub3QgcG9zc2libGUgdG8gJXMgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiVzIGlzdCBuaWNodCBtw7ZnbGljaCwgd2VpbCBTaWUgbmljaHQgenVzYW1tZW5nZWbDvGhydGUgRGF0ZWllbiBoYWJlbi4iCisKKyM6IGFkdmljZS5jOjE4NgorbXNnaWQgIiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCittc2dzdHIgIiIKKyJLb3JyaWdpZXJlbiBTaWUgZGllcyBpbSBBcmJlaXRzdmVyemVpY2huaXMsIHVuZCBiZW51dHplbiBTaWVcbiIKKyJkYW5uICdnaXQgYWRkL3JtIDxEYXRlaT4nLCB1bSBkaWUgQXVmbMO2c3VuZyBlbnRzcHJlY2hlbmQgenUgbWFya2llcmVuXG4iCisidW5kIHp1IGNvbW1pdHRlbi4iCisKKyM6IGFkdmljZS5jOjE5NAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiBhbiB1bnJlc29sdmVkIGNvbmZsaWN0LiIKK21zZ3N0ciAiQmVlbmRlIHdlZ2VuIHVuYXVmZ2Vsw7ZzdGVtIEtvbmZsaWt0LiIKKworIzogYWR2aWNlLmM6MTk5IGJ1aWx0aW4vbWVyZ2UuYzoxMzM1Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICJTaWUgaGFiZW4gSWhyZW4gTWVyZ2UgbmljaHQgYWJnZXNjaGxvc3NlbiAoTUVSR0VfSEVBRCBleGlzdGllcnQpLiIKKworIzogYWR2aWNlLmM6MjAxCittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSBtZXJnaW5nLiIKK21zZ3N0ciAiQml0dGUgY29tbWl0dGVuIFNpZSBJaHJlIMOEbmRlcnVuZ2VuLCBiZXZvciBTaWUgbWVyZ2VuLiIKKworIzogYWR2aWNlLmM6MjAyCittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIHVuZmluaXNoZWQgbWVyZ2UuIgorbXNnc3RyICJCZWVuZGUgd2VnZW4gbmljaHQgYWJnZXNjaGxvc3NlbmVtIE1lcmdlLiIKKworIzogYWR2aWNlLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBzd2l0Y2hpbmcgdG8gJyVzJy5cbiIKICJcbiIKLSJUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHlcbiIKLSJnb2luZyB0byBiZSBpZ25vcmVkIGJ5IGFueSBHaXQgc3VicHJvY2VzcyBydW5cbiIKLSJieSAlczpcbiIKKyJZb3UgYXJlIGluICdkZXRhY2hlZCBIRUFEJyBzdGF0ZS4gWW91IGNhbiBsb29rIGFyb3VuZCwgbWFrZSBleHBlcmltZW50YWxcbiIKKyJjaGFuZ2VzIGFuZCBjb21taXQgdGhlbSwgYW5kIHlvdSBjYW4gZGlzY2FyZCBhbnkgY29tbWl0cyB5b3UgbWFrZSBpbiB0aGlzXG4iCisic3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHN3aXRjaGluZyBiYWNrIHRvIGEgYnJhbmNoLlxuIgorIlxuIgorIklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gcmV0YWluIGNvbW1pdHMgeW91IGNyZWF0ZSwgeW91IG1heVxuIgorImRvIHNvIChub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1jIHdpdGggdGhlIHN3aXRjaCBjb21tYW5kLiBFeGFtcGxlOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyA8bmV3LWJyYW5jaC1uYW1lPlxuIgorIlxuIgorIk9yIHVuZG8gdGhpcyBvcGVyYXRpb24gd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLVxuIgorIlxuIgorIlR1cm4gb2ZmIHRoaXMgYWR2aWNlIGJ5IHNldHRpbmcgY29uZmlnIHZhcmlhYmxlIGFkdmljZS5kZXRhY2hlZEhlYWQgdG8gIgorImZhbHNlXG4iCiAiXG4iCiBtc2dzdHIgIiIKLSJNw7ZnbGljaGVyd2Vpc2UgZ2lidCBlcyBQcm9ibGVtZSBtaXQgbWFuY2hlbiBVbWdlYnVuZ3N2YXJpYWJsZW4uXG4iCisiSGlud2VpczogV2VjaHNsZSB6dSAnJXMnLlxuIgogIlxuIgotIkRpZSBmb2xnZW5kZW4gVW1nZWJ1bmdzdmFyaWFibGVuIGvDtm5uZW4gdmVybXV0bGljaCBuaWNodCBcbiIKLSJ2b24gJXMgYW4gR2l0IHdlaXRlcmdlZ2ViZW4gd2VyZGVuOlxuIgorIlNpZSBiZWZpbmRlbiBzaWNoIGltIFp1c3RhbmQgZWluZXMgJ2xvc2dlbMO2c3RlbiBIRUFEJy4gU2llIGvDtm5uZW4gc2ljaFxuIgorInVtc2NoYXVlbiwgZXhwZXJpbWVudGVsbGUgw4RuZGVydW5nZW4gdm9ybmVobWVuIHVuZCBkaWVzZSBjb21taXR0ZW4sIHVuZFxuIgorIlNpZSBrw7ZubmVuIGFsbGUgbcO2Z2xpY2hlbiBDb21taXRzLCBkaWUgU2llIGluIGRpZXNlbSBadXN0YW5kIG1hY2hlbixcbiIKKyJvaG5lIEF1c3dpcmt1bmdlbiBhdWYgaXJnZW5kZWluZW4gQnJhbmNoIHZlcndlcmZlbiwgaW5kZW0gU2llIHp1IGVpbmVtXG4iCisiYW5kZXJlbiBCcmFuY2ggd2VjaHNlbG4uXG4iCisiXG4iCisiV2VubiBTaWUgZWluZW4gbmV1ZW4gQnJhbmNoIGVyc3RlbGxlbiBtw7ZjaHRlbiwgdW0gSWhyZSBlcnN0ZWxsdGVuIENvbW1pdHNcbiIKKyJ6dSBiZWhhbHRlbiwga8O2bm5lbiBTaWUgZGFzIChqZXR6dCBvZGVyIHNww6R0ZXIpIGR1cmNoIE51dHp1bmcgdm9uXG4iCisiJ3N3aXRjaCcgbWl0IGRlciBPcHRpb24gLWMgdHVuLiBCZWlzcGllbDpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPG5ldWVyLUJyYW5jaG5hbWU+XG4iCisiXG4iCisiT2RlciB1bSBkaWVzZSBPcGVyYXRpb24gcsO8Y2tnw6RuZ2lnIHp1IG1hY2hlbjpcbiIKKyIgIGdpdCBzd2l0Y2ggLVxuIgorIlxuIgorIlNpZSBrw7ZubmVuIGRpZXNlbiBIaW53ZWlzIGF1c3NjaGFsdGVuLCBpbmRlbSBTaWUgZGllIEtvbmZpZ3VyYXRpb25zdmFyaWFibGVcbiIKKyInYWR2aWNlLmRldGFjaGVkSGVhZCcgYXVmICdmYWxzZScgc2V0emVuLlxuIgogIlxuIgogCi0jOiBnaXQtZ3VpLnNoOjQwNDYKKyM6IGFsaWFzLmM6NTAKK21zZ2lkICJjbWRsaW5lIGVuZHMgd2l0aCBcXCIKK21zZ3N0ciAiQmVmZWhsc3plaWxlIGVuZGV0IG1pdCBcXCIKKworIzogYWxpYXMuYzo1MQorbXNnaWQgInVuY2xvc2VkIHF1b3RlIgorbXNnc3RyICJOaWNodCBnZXNjaGxvc3NlbmUgQW5mw7xocnVuZ3N6ZWljaGVuLiIKKworIzogYXBwbHkuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAiTmljaHQgZXJrYW5udGUgV2hpdGVzcGFjZS1PcHRpb246ICclcyciCisKKyM6IGFwcGx5LmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJuaWNodCBlcmthbm50ZSBPcHRpb24genVtIElnbm9yaWVyZW4gdm9uIFdoaXRlc3BhY2U6ICclcyciCisKKyM6IGFwcGx5LmM6MTM1Cittc2dpZCAiLS1yZWplY3QgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tcmVqZWN0IHVuZCAtLTN3YXkga8O2bm5lbiBuaWNodCBnZW1laW5zYW0gdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGFwcGx5LmM6MTM3Cittc2dpZCAiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tY2FjaGVkIHVuZCAtLTN3YXkga8O2bm5lbiBuaWNodCBnZW1laW5zYW0gdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGFwcGx5LmM6MTQwCittc2dpZCAiLS0zd2F5IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisiRGllIE9wdGlvbiAtLTN3YXkga2FubiBuaWNodCBhdcOfZXJoYWxiIGVpbmVzIFJlcG9zaXRvcmllcyB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYXBwbHkuYzoxNTEKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisiRGllIE9wdGlvbiAtLWluZGV4IGthbm4gbmljaHQgYXXDn2VyaGFsYiBlaW5lcyBSZXBvc2l0b3JpZXMgdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGFwcGx5LmM6MTU0Cittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uIC0tY2FjaGVkIGthbm4gbmljaHQgYXXDn2VyaGFsYiBlaW5lcyBSZXBvc2l0b3JpZXMgdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGFwcGx5LmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiCittc2dzdHIgIkthbm4gcmVndWzDpHJlbiBBdXNkcnVjayBmw7xyIFplaXRzdGVtcGVsICVzIG5pY2h0IHZlcmFyYmVpdGVuIgorCisjOiBhcHBseS5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgIkF1c2bDvGhydW5nIGRlcyByZWd1bMOkcmVuIEF1c2RydWNrcyBnYWIgJWQgenVyw7xjay4gRWluZ2FiZTogJXMiCisKKyM6IGFwcGx5LmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIktvbm50ZSBrZWluZW4gRGF0ZWluYW1lbiBpbiBaZWlsZSAlZCBkZXMgUGF0Y2hlcyBmaW5kZW4uIgorCisjOiBhcHBseS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IHVuZ8O8bHRpZ2VzICdnaXQtZGlmZicgLSBlcndhcnRldGUgL2Rldi9udWxsLCBlcmhpZWx0ICVzIGluIFplaWxlICIKKyIlZCIKKworIzogYXBwbHkuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IHVuZ8O8bHRpZ2VzICdnaXQtZGlmZicgLSBJbmtvbnNpc3RlbnRlciBuZXVlciBEYXRlaW5hbWUgaW4gWmVpbGUgJWQiCisKKyM6IGFwcGx5LmM6OTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5OiB1bmfDvGx0aWdlcyAnZ2l0LWRpZmYnIC0gSW5rb25zaXN0ZW50ZXIgYWx0ZXIgRGF0ZWluYW1lIGluIFplaWxlICVkIgorCisjOiBhcHBseS5jOjkzNAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IHVuZ8O8bHRpZ2VzICdnaXQtZGlmZicgLSBlcndhcnRldGUgL2Rldi9udWxsIGluIFplaWxlICVkIgorCisjOiBhcHBseS5jOjk2MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgb24gbGluZSAlZDogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIE1vZHVzIGluIFplaWxlICVkOiAlcyIKKworIzogYXBwbHkuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgImluY29uc2lzdGVudCBoZWFkZXIgbGluZXMgJWQgYW5kICVkIgorbXNnc3RyICJJbmtvbnNpc3RlbnRlIEtvcGZ6ZWlsZW4gJWQgdW5kICVkLiIKKworIzogYXBwbHkuYzoxMzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnQgKGxpbmUgJWQpIgorbXNnaWRfcGx1cmFsICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50cyAobGluZSAlZCkiCittc2dzdHJbMF0gIiIKKyJEZW0gS29wZmJlcmVpY2ggdm9uIFwiZ2l0IGRpZmZcIiBmZWhsZW4gSW5mb3JtYXRpb25lbiB6dW0gRGF0ZWluYW1lbiwgd2VubiAiCisiJWQgdm9yYW5nZXN0ZWxsdGVyIFRlaWwgZGVzIFBmYWRlcyBlbnRmZXJudCB3aXJkIChaZWlsZSAlZCkiCittc2dzdHJbMV0gIiIKKyJEZW0gS29wZmJlcmVpY2ggdm9uIFwiZ2l0IGRpZmZcIiBmZWhsZW4gSW5mb3JtYXRpb25lbiB6dW0gRGF0ZWluYW1lbiwgd2VubiAiCisiJWQgdm9yYW5nZXN0ZWxsdGUgVGVpbGUgZGVzIFBmYWRlcyBlbnRmZXJudCB3ZXJkZW4gKFplaWxlICVkKSIKKworIzogYXBwbHkuYzoxMzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiAobGluZSAlZCkiCittc2dzdHIgIiIKKyJEZW0gS29wZmJlcmVpY2ggdm9uIFwiZ2l0IGRpZmZcIiBmZWhsZW4gSW5mb3JtYXRpb25lbiB6dW0gRGF0ZWluYW1lbiAoWmVpbGUgIgorIiVkKSIKKworIzogYXBwbHkuYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAicmVjb3VudDogdW5lcndhcnRldGUgWmVpbGU6ICUuKnMiCisKKyM6IGFwcGx5LmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJQYXRjaC1GcmFnbWVudCBvaG5lIEtvcGZiZXJlaWNoIGJlaSBaZWlsZSAlZDogJS4qcyIKKworIzogYXBwbHkuYzoxNzUzCittc2dpZCAibmV3IGZpbGUgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIm5ldWUgRGF0ZWkgaMOkbmd0IHZvbiBhbHRlbiBJbmhhbHRlbiBhYiIKKworIzogYXBwbHkuYzoxNzU1Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiZW50ZmVybnRlIERhdGVpIGhhdCBub2NoIEluaGFsdGUiCisKKyM6IGFwcGx5LmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgImZlaGxlcmhhZnRlciBQYXRjaCBiZWkgWmVpbGUgJWQiCisKKyM6IGFwcGx5LmM6MTgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAibmV1ZSBEYXRlaSAlcyBow6RuZ3Qgdm9uIGFsdGVuIEluaGFsdGVuIGFiIgorCisjOiBhcHBseS5jOjE4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiZW50ZmVybnRlIERhdGVpICVzIGhhdCBub2NoIEluaGFsdGUiCisKKyM6IGFwcGx5LmM6MTgzMQorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIqKiBXYXJudW5nOiBEYXRlaSAlcyB3aXJkIGxlZXIsIGFiZXIgbmljaHQgZW50ZmVybnQuIgorCisjOiBhcHBseS5jOjE5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiZmVobGVyaGFmdGVyIEJpbsOkci1QYXRjaCBiZWkgWmVpbGUgJWQ6ICUuKnMiCisKKyM6IGFwcGx5LmM6MjAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIm5pY2h0IGVya2FubnRlciBCaW7DpHItUGF0Y2ggYmVpIFplaWxlICVkIgorCisjOiBhcHBseS5jOjIxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIKK21zZ3N0ciAiUGF0Y2ggbWl0IG51dHpsb3NlbiBJbmZvcm1hdGlvbmVuIGJlaSBaZWlsZSAlZCIKKworIzogYXBwbHkuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImtvbm50ZSBzeW1ib2xpc2NoZSBWZXJrbsO8cGZ1bmcgJXMgbmljaHQgbGVzZW4iCisKKyM6IGFwcGx5LmM6MjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBvciByZWFkICVzIgorbXNnc3RyICJrb25udGUgJXMgbmljaHQgw7ZmZm5lbiBvZGVyIGxlc2VuIgorCisjOiBhcHBseS5jOjI5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydCBvZiBsaW5lOiAnJWMnIgorbXNnc3RyICJVbmfDvGx0aWdlciBaZWlsZW5hbmZhbmc6ICclYyciCisKKyM6IGFwcGx5LmM6MzA1NworIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iCittc2dpZF9wbHVyYWwgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iCittc2dzdHJbMF0gIlBhdGNoLUJlcmVpY2ggIyVkIGVyZm9sZ3JlaWNoIGFuZ2V3ZW5kZXQgYmVpICVkICglZCBaZWlsZSB2ZXJzZXR6dCkiCittc2dzdHJbMV0gIiIKKyJQYXRjaC1CZXJlaWNoICMlZCBlcmZvbGdyZWljaCBhbmdld2VuZGV0IGJlaSAlZCAoJWQgWmVpbGVuIHZlcnNldHp0KSIKKworIzogYXBwbHkuYzozMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIktvbnRleHQgcmVkdXppZXJ0IHp1ICglbGQvJWxkKSwgdW0gUGF0Y2gtQmVyZWljaCBiZWkgJWQgYW56dXdlbmRlbiIKKworIzogYXBwbHkuYzozMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyJiZWkgZGVyIFN1Y2hlIG5hY2g6XG4iCisiJS4qcyIKKworIzogYXBwbHkuYzozMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgImtlaW5lIERhdGVuIGluIEJpbsOkci1QYXRjaCBmw7xyICclcyciCisKKyM6IGFwcGx5LmM6MzEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmV2ZXJzZS1hcHBseSBhIGJpbmFyeSBwYXRjaCB3aXRob3V0IHRoZSByZXZlcnNlIGh1bmsgdG8gJyVzJyIKK21zZ3N0ciAiIgorImthbm4gYmluw6RyZW4gUGF0Y2ggbmljaHQgaW4gdW1nZWtlaHJ0ZXIgUmVpaGVuZm9sZ2UgYW53ZW5kZW4gb2huZSBlaW5lblxuIgorInVtZ2VrZWhydGVuIFBhdGNoLUJsb2NrIGF1ZiAnJXMnIgorCisjOiBhcHBseS5jOjMxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFwcGx5IGJpbmFyeSBwYXRjaCB0byAnJXMnIHdpdGhvdXQgZnVsbCBpbmRleCBsaW5lIgorbXNnc3RyICIiCisia2FubiBiaW7DpHJlbiBQYXRjaCBhdWYgJyVzJyBuaWNodCBvaG5lIGVpbmUgdm9sbHN0w6RuZGlnZSBJbmRleC1aZWlsZSBhbndlbmRlbiIKKworIzogYXBwbHkuYzozMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgcGF0Y2ggYXBwbGllcyB0byAnJXMnICglcyksIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IGNvbnRlbnRzLiIKK21zZ3N0ciAiIgorImRlciBQYXRjaCB3aXJkIGFuZ2V3ZW5kZXQgYXVmICclcycgKCVzKSwgd2FzIG5pY2h0IGRlbiBha3R1ZWxsZW4gSW5oYWx0ZW5cbiIKKyJlbnRzcHJpY2h0IgorCisjOiBhcHBseS5jOjMxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHBhdGNoIGFwcGxpZXMgdG8gYW4gZW1wdHkgJyVzJyBidXQgaXQgaXMgbm90IGVtcHR5IgorbXNnc3RyICJkZXIgUGF0Y2ggd2lyZCBhdWYgZWluIGxlZXJlcyAnJXMnIGFuZ2V3ZW5kZXQsIHdhcyBhYmVyIG5pY2h0IGxlZXIgaXN0IgorCisjOiBhcHBseS5jOjMxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG5lY2Vzc2FyeSBwb3N0aW1hZ2UgJXMgZm9yICclcycgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgImRhcyBlcmZvcmRlcmxpY2hlIFBvc3RpbWFnZSAlcyBmw7xyICclcycga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiIKKworIzogYXBwbHkuYzozMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICJLb25udGUgQmluw6RyLVBhdGNoIG5pY2h0IGF1ZiAnJXMnIGFud2VuZGVuIgorCisjOiBhcHBseS5jOjMyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKyJCaW7DpHItUGF0Y2ggZsO8ciAnJXMnIGVyemV1Z3QgZmFsc2NoZXMgRXJnZWJuaXMgKGVyd2FydGV0ZSAlcywgYmVrYW0gJXMpIgorCisjOiBhcHBseS5jOjMyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgIkFud2VuZHVuZyBkZXMgUGF0Y2hlcyBmZWhsZ2VzY2hsYWdlbjogJXM6JWxkIgorCisjOiBhcHBseS5jOjMzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICJrYW5uICVzIG5pY2h0IGF1c2NoZWNrZW4iCisKKyM6IGFwcGx5LmM6MzQwNSBhcHBseS5jOjM0MTYgYXBwbHkuYzozNDYyIG1pZHguYzo2MSBzZXR1cC5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gdm9uICVzIgorCisjOiBhcHBseS5jOjM0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBmcm9tICclcycgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiJyVzJyBpc3QgaGludGVyIGVpbmVyIHN5bWJvbGlzY2hlbiBWZXJrbsO8cGZ1bmciCisKKyM6IGFwcGx5LmM6MzQ0MiBhcHBseS5jOjM2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgIlBmYWQgJXMgd3VyZGUgdW1iZW5hbm50L2dlbMO2c2NodCIKKworIzogYXBwbHkuYzozNTI4IGFwcGx5LmM6MzcwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzIGlzdCBuaWNodCBpbSBJbmRleCIKKworIzogYXBwbHkuYzozNTM3IGFwcGx5LmM6MzcwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVzIGVudHNwcmljaHQgbmljaHQgZGVyIFZlcnNpb24gaW0gSW5kZXgiCisKKyM6IGFwcGx5LmM6MzU3MgorbXNnaWQgInJlcG9zaXRvcnkgbGFja3MgdGhlIG5lY2Vzc2FyeSBibG9iIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIiIKKyJEZW0gUmVwb3NpdG9yeSBmZWhsdCBkZXIgbm90d2VuZGlnZSBCbG9iLCB1bSBhdWYgZWluZW4gMy1XZWdlLU1lcmdlXG4iCisienVyw7xja3p1ZmFsbGVuLiIKKworIzogYXBwbHkuYzozNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhbGxpbmcgYmFjayB0byB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiRmFsbGUgenVyw7xjayBhdWYgMy1XZWdlLU1lcmdlIC4uLlxuIgorCisjOiBhcHBseS5jOjM1OTEgYXBwbHkuYzozNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgImthbm4gYWt0dWVsbGUgSW5oYWx0ZSB2b24gJyVzJyBuaWNodCBsZXNlbiIKKworIzogYXBwbHkuYzozNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmYWxsIGJhY2sgb24gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIkZlaGxlciBiZWltIFp1csO8Y2tmYWxsZW4gYXVmIDMtV2VnZS1NZXJnZS4uLlxuIgorCisjOiBhcHBseS5jOjM2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIHdpdGggY29uZmxpY3RzLlxuIgorbXNnc3RyICJQYXRjaCBhdWYgJyVzJyBtaXQgS29uZmxpa3RlbiBhbmdld2VuZGV0LlxuIgorCisjOiBhcHBseS5jOjM2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIGNsZWFubHkuXG4iCittc2dzdHIgIlBhdGNoIGF1ZiAnJXMnIHNhdWJlciBhbmdld2VuZGV0LlxuIgorCisjOiBhcHBseS5jOjM2NTIKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICJMw7ZzY2gtUGF0Y2ggaGludGVybMOkc3N0IERhdGVpaW5oYWx0ZSIKKworIzogYXBwbHkuYzozNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3cm9uZyB0eXBlIgorbXNnc3RyICIlczogZmFsc2NoZXIgVHlwIgorCisjOiBhcHBseS5jOjM3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvIgorbXNnc3RyICIlcyBpc3Qgdm9tIFR5cCAlbywgZXJ3YXJ0ZXRlICVvIgorCisjOiBhcHBseS5jOjM4NzggYXBwbHkuYzozODgwIHJlYWQtY2FjaGUuYzo4MzAgcmVhZC1jYWNoZS5jOjg1NgorIzogcmVhZC1jYWNoZS5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXRoICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFBmYWQgJyVzJyIKKworIzogYXBwbHkuYzozOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXMgaXN0IGJlcmVpdHMgYmVyZWl0Z2VzdGVsbHQiCisKKyM6IGFwcGx5LmM6MzkzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiVzIGV4aXN0aWVydCBiZXJlaXRzIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyIKKworIzogYXBwbHkuYzozOTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSIKK21zZ3N0ciAibmV1ZXIgTW9kdXMgKCVvKSB2b24gJXMgZW50c3ByaWNodCBuaWNodCBkZW0gYWx0ZW4gTW9kdXMgKCVvKSIKKworIzogYXBwbHkuYzozOTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIKK21zZ3N0ciAibmV1ZXIgTW9kdXMgKCVvKSB2b24gJXMgZW50c3ByaWNodCBuaWNodCBkZW0gYWx0ZW4gTW9kdXMgKCVvKSB2b24gJXMiCisKKyM6IGFwcGx5LmM6Mzk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiYmV0cm9mZmVuZSBEYXRlaSAnJXMnIGlzdCBoaW50ZXIgZWluZXIgc3ltYm9saXNjaGVuIFZlcmtuw7xwZnVuZyIKKworIzogYXBwbHkuYzozOTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiJXM6IFBhdGNoIGtvbm50ZSBuaWNodCBhbmdld2VuZGV0IHdlcmRlbiIKKworIzogYXBwbHkuYzo0MDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHBhdGNoICVzLi4uIgorbXNnc3RyICJQcsO8ZmUgUGF0Y2ggJXMgLi4uIgorCisjOiBhcHBseS5jOjQwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiU0hBLTEgSW5mb3JtYXRpb24gZmVobHQgb2RlciBpc3QgdW5icmF1Y2hiYXIgZsO8ciBTdWJtb2R1bCAlcyIKKworIzogYXBwbHkuYzo0MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGUgY2hhbmdlIGZvciAlcywgd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgSEVBRCIKK21zZ3N0ciAiTW9kdXPDpG5kZXJ1bmcgZsO8ciAlcywgd2FzIHNpY2ggbmljaHQgaW0gYWt0dWVsbGVuIEhFQUQgYmVmaW5kZXQiCisKKyM6IGFwcGx5LmM6NDEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAoJXMpLiIKK21zZ3N0ciAiU0hBLTEgSW5mb3JtYXRpb24gZmVobHQgb2RlciBpc3QgdW5icmF1Y2hiYXIgKCVzKS4iCisKKyM6IGFwcGx5LmM6NDExNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAia29ubnRlICVzIG5pY2h0IHp1bSB0ZW1wb3LDpHJlbiBJbmRleCBoaW56dWbDvGdlbiIKKworIzogYXBwbHkuYzo0MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggdG8gJXMiCittc2dzdHIgImtvbm50ZSB0ZW1wb3LDpHJlbiBJbmRleCBuaWNodCBuYWNoICVzIHNjaHJlaWJlbiIKKworIzogYXBwbHkuYzo0MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAia29ubnRlICVzIG5pY2h0IGF1cyBkZW0gSW5kZXggZW50ZmVybmVuIgorCisjOiBhcHBseS5jOjQyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICJmZWhsZXJoYWZ0ZXIgUGF0Y2ggZsO8ciBTdWJtb2R1bCAlcyIKKworIzogYXBwbHkuYzo0MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICJrb25udGUgbmV1IGVyc3RlbGx0ZSBEYXRlaSAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBhcHBseS5jOjQzMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlIGZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiCittc2dzdHIgImthbm4gaW50ZXJuZW4gU3BlaWNoZXIgZsO8ciBlYmVuIGVyc3RlbGx0ZSBEYXRlaSAlcyBuaWNodCBlcnpldWdlbiIKKworIzogYXBwbHkuYzo0MzE2IGFwcGx5LmM6NDQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAia2FubiBmw7xyICVzIGtlaW5lbiBFaW50cmFnIGluIGRlbiBad2lzY2hlbnNwZWljaGVyIGhpbnp1ZsO8Z2VuIgorCisjOiBhcHBseS5jOjQzNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIHRvICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBuYWNoICclcyciCisKKyM6IGFwcGx5LmM6NDM2MworIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAic2NobGllw59lIERhdGVpICclcyciCisKKyM6IGFwcGx5LmM6NDQzMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgImtvbm50ZSBEYXRlaSAnJXMnIG1pdCBNb2R1cyAlbyBuaWNodCBzY2hyZWliZW4iCisKKyM6IGFwcGx5LmM6NDUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICJQYXRjaCAlcyBzYXViZXIgYW5nZXdlbmRldCIKKworIzogYXBwbHkuYzo0NTM5Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgImludGVybmVyIEZlaGxlciIKKworIzogYXBwbHkuYzo0NTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAiV2VuZGUgUGF0Y2ggJSVzIG1pdCAlZCBadXLDvGNrd2Vpc3VuZyBhbi4uLiIKK21zZ3N0clsxXSAiV2VuZGUgUGF0Y2ggJSVzIG1pdCAlZCBadXLDvGNrd2Vpc3VuZ2VuIGFuLi4uIgorCisjOiBhcHBseS5jOjQ1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICJWZXJrw7xyemUgTmFtZSB2b24gLnJlaiBEYXRlaSB6dSAlLipzLnJlaiIKKworIzogYXBwbHkuYzo0NTYxIGJ1aWx0aW4vZmV0Y2guYzo5MDEgYnVpbHRpbi9mZXRjaC5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXMiCittc2dzdHIgImthbm4gJyVzJyBuaWNodCDDtmZmbmVuIgorCisjOiBhcHBseS5jOjQ1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAiUGF0Y2gtQmVyZWljaCAjJWQgc2F1YmVyIGFuZ2V3ZW5kZXQuIgorCisjOiBhcHBseS5jOjQ1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICJQYXRjaC1CbG9jayAjJWQgenVyw7xja2dld2llc2VuLiIKKworIzogYXBwbHkuYzo0Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgcGF0Y2ggJyVzJy4iCittc2dzdHIgIlBhdGNoICclcycgYXVzZ2VsYXNzZW4uIgorCisjOiBhcHBseS5jOjQ3MDYKK21zZ2lkICJ1bnJlY29nbml6ZWQgaW5wdXQiCittc2dzdHIgIm5pY2h0IGVya2FubnRlIEVpbmdhYmUiCisKKyM6IGFwcGx5LmM6NDcyNgorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgIktvbm50ZSBJbmRleC1EYXRlaSBuaWNodCBsZXNlbiIKKworIzogYXBwbHkuYzo0ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgImthbm4gUGF0Y2ggJyVzJyBuaWNodCDDtmZmbmVuOiAlcyIKKworIzogYXBwbHkuYzo0OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gInVudGVyZHLDvGNrdGUgJWQgV2hpdGVzcGFjZS1GZWhsZXIiCittc2dzdHJbMV0gInVudGVyZHLDvGNrdGUgJWQgV2hpdGVzcGFjZS1GZWhsZXIiCisKKyM6IGFwcGx5LmM6NDkxNiBhcHBseS5jOjQ5MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQgWmVpbGUgZsO8Z3QgV2hpdGVzcGFjZS1GZWhsZXIgaGluenUuIgorbXNnc3RyWzFdICIlZCBaZWlsZW4gZsO8Z2VuIFdoaXRlc3BhY2UtRmVobGVyIGhpbnp1LiIKKworIzogYXBwbHkuYzo0OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIFplaWxlIG5hY2ggQmVoZWJ1bmcgdm9uIFdoaXRlc3BhY2UtRmVobGVybiBhbmdld2VuZGV0LiIKK21zZ3N0clsxXSAiJWQgWmVpbGVuIG5hY2ggQmVoZWJ1bmcgdm9uIFdoaXRlc3BhY2UtRmVobGVybiBhbmdld2VuZGV0LiIKKworIzogYXBwbHkuYzo0OTQwIGJ1aWx0aW4vYWRkLmM6NjEyIGJ1aWx0aW4vbXYuYzozMDEgYnVpbHRpbi9ybS5jOjQwNgorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiS29ubnRlIG5ldWUgSW5kZXgtRGF0ZWkgbmljaHQgc2NocmVpYmVuLiIKKworIzogYXBwbHkuYzo0OTY4Cittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAia2VpbmUgw4RuZGVydW5nZW4gaW0gYW5nZWdlYmVuZW4gUGZhZCBhbndlbmRlbiIKKworIzogYXBwbHkuYzo0OTcxCittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAiw4RuZGVydW5nZW4gbnVyIGltIGFuZ2VnZWJlbmVuIFBmYWQgYW53ZW5kZW4iCisKKyM6IGFwcGx5LmM6NDk3MyBidWlsdGluL2FtLmM6MjI2MAorbXNnaWQgIm51bSIKK21zZ3N0ciAiQW56YWhsIgorCisjOiBhcHBseS5jOjQ5NzQKK21zZ2lkICJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIKK21zZ3N0ciAiIgorIjxBbnphaGw+IHZvcmFuZ2VzdGVsbHRlIFNjaHLDpGdzdHJpY2hlIHZvbiBoZXJrw7ZtbWxpY2hlbiBEaWZmZXJlbnpwZmFkZW4gIgorImVudGZlcm5lbiIKKworIzogYXBwbHkuYzo0OTc3Cittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAiaGluenVnZWbDvGd0ZSBaZWlsZW4gZGVzIFBhdGNoZXMgaWdub3JpZXJlbiIKKworIzogYXBwbHkuYzo0OTc5Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICIiCisiYW5zdGF0dCBkZXIgQW53ZW5kdW5nIGRlcyBQYXRjaGVzLCBkZW4gXCJkaWZmc3RhdFwiIGbDvHIgZGllIEVpbmdhYmUgIgorImF1c2dlZ2ViZW4iCisKKyM6IGFwcGx5LmM6NDk4MworbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIiIKKyJkaWUgQW56YWhsIHZvbiBoaW56dWdlZsO8Z3Rlbi9lbnRmZXJudGVuIFplaWxlbiBpbiBEZXppbWFsbm90YXRpb24gYW56ZWlnZW4iCisKKyM6IGFwcGx5LmM6NDk4NQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgIiIKKyJhbnN0YXR0IGRlciBBbndlbmR1bmcgZGVzIFBhdGNoZXMsIGVpbmUgWnVzYW1tZW5mYXNzdW5nIGbDvHIgZGllIEVpbmdhYmUgIgorImF1c2dlYmVuIgorCisjOiBhcHBseS5jOjQ5ODcKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIgorbXNnc3RyICIiCisiYW5zdGF0dCBkZXIgQW53ZW5kdW5nIGRlcyBQYXRjaGVzLCB6ZWlnZSBvYiBQYXRjaCBhbmdld2VuZGV0IHdlcmRlbiBrYW5uIgorCisjOiBhcHBseS5jOjQ5ODkKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgIiIKKyJzaWNoZXJzdGVsbGVuLCBkYXNzIGRlciBQYXRjaCBtaXQgZGVtIGFrdHVlbGxlbiBJbmRleCBhbmdld2VuZGV0IHdlcmRlbiBrYW5uIgorCisjOiBhcHBseS5jOjQ5OTEKK21zZ2lkICJtYXJrIG5ldyBmaWxlcyB3aXRoIGBnaXQgYWRkIC0taW50ZW50LXRvLWFkZGAiCittc2dzdHIgIm5ldWUgRGF0ZWllbiBtaXQgYGdpdCBhZGQgLS1pbnRlbnQtdG8tYWRkYCBtYXJraWVyZW4iCisKKyM6IGFwcGx5LmM6NDk5MworbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJQYXRjaCBhbndlbmRlbiwgb2huZSDDhG5kZXJ1bmdlbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgdm9yenVuZWhtZW4iCisKKyM6IGFwcGx5LmM6NDk5NQorbXNnaWQgImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiCittc2dzdHIgIiIKKyJQYXRjaCBhbndlbmRlbiwgZGVyIMOEbmRlcnVuZ2VuIGF1w59lcmhhbGIgZGVzIEFyYmVpdHN2ZXJ6ZWljaG5pc3NlcyB2b3JuaW1tdCIKKworIzogYXBwbHkuYzo0OTk4Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgIlBhdGNoIGFud2VuZGVuIChCZW51dHp1bmcgbWl0IC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCisKKyM6IGFwcGx5LmM6NTAwMAorbXNnaWQgImF0dGVtcHQgdGhyZWUtd2F5IG1lcmdlIGlmIGEgcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgInZlcnN1Y2hlIDMtV2VnZS1NZXJnZSwgd2VubiBkZXIgUGF0Y2ggbmljaHQgYW5nZXdlbmRldCB3ZXJkZW4ga29ubnRlIgorCisjOiBhcHBseS5jOjUwMDIKK21zZ2lkICJidWlsZCBhIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiBlbWJlZGRlZCBpbmRleCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorImVpbmVuIHRlbXBvcsOkcmVuIEluZGV4LCBiYXNpZXJlbmQgYXVmIGRlbiBpbnRlZ3JpZXJ0ZW4gSW5kZXgtSW5mb3JtYXRpb25lbiwgIgorImVyc3RlbGxlbiIKKworIzogYXBwbHkuYzo1MDA1IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzMgYnVpbHRpbi9scy1maWxlcy5jOjUyNAorbXNnaWQgInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJQZmFkZSBzaW5kIGdldHJlbm50IGR1cmNoIE5VTCBaZWljaGVuIgorCisjOiBhcHBseS5jOjUwMDcKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgIiIKKyJzaWNoZXIgc3RlbGxlbiwgZGFzcyBtaW5kZXN0ZW5zIDxuPiBaZWlsZW4gZGVzIEtvbnRleHRlcyDDvGJlcmVpbnN0aW1tZW4iCisKKyM6IGFwcGx5LmM6NTAwOCBidWlsdGluL2FtLmM6MjIzOSBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk4CisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMCBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDU3IGJ1aWx0aW4vcmViYXNlLmM6MTUwOAorbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAiQWt0aW9uIgorCisjOiBhcHBseS5jOjUwMDkKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAibmV1ZSBvZGVyIGdlw6RuZGVydGUgWmVpbGVuLCBkaWUgV2hpdGVzcGFjZS1GZWhsZXIgaGFiZW4sIGVybWl0dGVsbiIKKworIzogYXBwbHkuYzo1MDEyIGFwcGx5LmM6NTAxNQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgIsOEbmRlcnVuZ2VuIGltIFdoaXRlc3BhY2UgYmVpIGRlciBTdWNoZSBkZXMgS29udGV4dGVzIGlnbm9yaWVyZW4iCisKKyM6IGFwcGx5LmM6NTAxOAorbXNnaWQgImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIgorbXNnc3RyICJkZW4gUGF0Y2ggaW4gdW1nZWtlaHJ0ZXIgUmVpaGVuZm9sZ2UgYW53ZW5kZW4iCisKKyM6IGFwcGx5LmM6NTAyMAorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICJrZWluZW4gS29udGV4dCBlcndhcnRlbiIKKworIzogYXBwbHkuYzo1MDIyCittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgIiIKKyJ6dXLDvGNrZ2V3aWVzZW5lIFBhdGNoLUJsw7Zja2UgaW4gZW50c3ByZWNoZW5kZW4gKi5yZWogRGF0ZWllbiBoaW50ZXJsYXNzZW4iCisKKyM6IGFwcGx5LmM6NTAyNAorbXNnaWQgImFsbG93IG92ZXJsYXBwaW5nIGh1bmtzIgorbXNnc3RyICJzaWNoIMO8YmVybGFwcGVuZGUgUGF0Y2gtQmzDtmNrZSBlcmxhdWJlbiIKKworIzogYXBwbHkuYzo1MDI1IGJ1aWx0aW4vYWRkLmM6MzIzIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjIKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MCBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5OCBidWlsdGluL2ZzY2suYzo3NzQKKyM6IGJ1aWx0aW4vbG9nLmM6MjE2NiBidWlsdGluL212LmM6MTIzIGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI4Cittc2dpZCAiYmUgdmVyYm9zZSIKK21zZ3N0ciAiZXJ3ZWl0ZXJ0ZSBBdXNnYWJlbiIKKworIzogYXBwbHkuYzo1MDI3Cittc2dpZCAidG9sZXJhdGUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIGZpbGUiCittc2dzdHIgImZlaGxlcmhhZnQgZXJrYW5udGVuIGZlaGxlbmRlbiBaZWlsZW51bWJydWNoIGFtIERhdGVpZW5kZSB0b2xlcmllcmVuIgorCisjOiBhcHBseS5jOjUwMzAKK21zZ2lkICJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiCittc2dzdHIgImRlbiBaZWlsZW5udW1tZXJuIGltIEtvcGYgZGVzIFBhdGNoLUJsb2NrcyBuaWNodCB2ZXJ0cmF1ZW4iCisKKyM6IGFwcGx5LmM6NTAzMiBidWlsdGluL2FtLmM6MjI0OAorbXNnaWQgInJvb3QiCittc2dzdHIgIld1cnplbHZlcnplaWNobmlzIgorCisjOiBhcHBseS5jOjUwMzMKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICI8V3VyemVsdmVyemVpY2huaXM+IHZvciBhbGxlIERhdGVpbmFtZW4gc3RlbGxlbiIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgWzxPcHRpb25lbj5dIDxDb21taXQtUmVmZXJlbno+IFs8UGZhZD4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTUKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjE2Cittc2dpZCAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPFJlcG9zaXRvcnk+IFstLWV4ZWMgPFByb2dyYW1tPl0gWzxPcHRpb25lbj5dIDxDb21taXQtIgorIlJlZmVyZW56PiBbPFBmYWQ+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE3Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPFJlcG9zaXRvcnk+IFstLWV4ZWMgPFByb2dyYW1tPl0gLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MzcyIGJ1aWx0aW4vYWRkLmM6MTgxIGJ1aWx0aW4vYWRkLmM6NTg4IGJ1aWx0aW4vcm0uYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAiUGZhZHNwZXppZmlrYXRpb24gJyVzJyBzdGltbXQgbWl0IGtlaW5lbiBEYXRlaWVuIMO8YmVyZWluIgorCisjOiBhcmNoaXZlLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmOiAlLipzIgorbXNnc3RyICJLZWluZSBzb2xjaGUgUmVmZXJlbno6ICUuKnMiCisKKyM6IGFyY2hpdmUuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICVzIgorbXNnc3RyICJLZWluIGfDvGx0aWdlciBPYmpla3RuYW1lOiAlcyIKKworIzogYXJjaGl2ZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB0cmVlIG9iamVjdDogJXMiCittc2dzdHIgIktlaW4gVHJlZS1PYmpla3Q6ICVzIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgIkFrdHVlbGxlcyBBcmJlaXRzdmVyemVpY2huaXMgaXN0IHVudmVyc2lvbmllcnQuIgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiZm10IgorbXNnc3RyICJGb3JtYXQiCisKKyM6IGFyY2hpdmUuYzo0NTcKK21zZ2lkICJhcmNoaXZlIGZvcm1hdCIKK21zZ3N0ciAiQXJjaGl2Zm9ybWF0IgorCisjOiBhcmNoaXZlLmM6NDU4IGJ1aWx0aW4vbG9nLmM6MTY1MworbXNnaWQgInByZWZpeCIKK21zZ3N0ciAiUHLDpGZpeCIKKworIzogYXJjaGl2ZS5jOjQ1OQorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgImVpbmVuIFByw6RmaXggdm9yIGplZGVuIFBmYWRuYW1lbiBpbiBkZW0gQXJjaGl2IHN0ZWxsZW4iCisKKyM6IGFyY2hpdmUuYzo0NjAgYnVpbHRpbi9ibGFtZS5jOjg2MSBidWlsdGluL2JsYW1lLmM6ODY1IGJ1aWx0aW4vYmxhbWUuYzo4NjYKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTcgYnVpbHRpbi9jb25maWcuYzoxMzAgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY0IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY4IGJ1aWx0aW4vZ3JlcC5jOjg4NworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNSBidWlsdGluL2xzLWZpbGVzLmM6NTYwIGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjMKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTIgYnVpbHRpbi9ub3Rlcy5jOjU3OCBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworIzogcGFyc2Utb3B0aW9ucy5oOjE5MAorbXNnaWQgImZpbGUiCittc2dzdHIgIkRhdGVpIgorCisjOiBhcmNoaXZlLmM6NDYxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJkYXMgQXJjaGl2IGluIGRpZXNlIERhdGVpIHNjaHJlaWJlbiIKKworIzogYXJjaGl2ZS5jOjQ2MworbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIi5naXRhdHRyaWJ1dGVzIGF1cyBkZW0gQXJiZWl0c3ZlcnplaWNobmlzIGxlc2VuIgorCisjOiBhcmNoaXZlLmM6NDY0Cittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAiYXJjaGl2aWVydGUgRGF0ZWllbiBpbiBkZXIgU3RhbmRhcmQtRmVobGVyYXVzZ2FiZSBhdXNnZWJlbiIKKworIzogYXJjaGl2ZS5jOjQ2NQorbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgIm51ciBzcGVpY2hlcm4iCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgInNjaG5lbGxlciBrb21wcmltaWVyZW4iCisKKyM6IGFyY2hpdmUuYzo0NzQKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgImJlc3NlciBrb21wcmltaWVyZW4iCisKKyM6IGFyY2hpdmUuYzo0NzcKK21zZ2lkICJsaXN0IHN1cHBvcnRlZCBhcmNoaXZlIGZvcm1hdHMiCittc2dzdHIgInVudGVyc3TDvHR6dGUgQXJjaGl2Zm9ybWF0ZSBhdWZsaXN0ZW4iCisKKyM6IGFyY2hpdmUuYzo0NzkgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9jbG9uZS5jOjExMyBidWlsdGluL2Nsb25lLmM6MTE2CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMQorbXNnaWQgInJlcG8iCittc2dzdHIgIlJlcG9zaXRvcnkiCisKKyM6IGFyY2hpdmUuYzo0ODAgYnVpbHRpbi9hcmNoaXZlLmM6OTIKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAiQXJjaGl2IHZvbSBSZW1vdGUtUmVwb3NpdG9yeSA8UmVwb3NpdG9yeT4gYWJydWZlbiIKKworIzogYXJjaGl2ZS5jOjQ4MSBidWlsdGluL2FyY2hpdmUuYzo5MyBidWlsdGluL2RpZmZ0b29sLmM6NzE1CisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAiUHJvZ3JhbW0iCisKKyM6IGFyY2hpdmUuYzo0ODIgYnVpbHRpbi9hcmNoaXZlLmM6OTQKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgIlBmYWQgenVtIGV4dGVybmVuIFwiZ2l0LXVwbG9hZC1hcmNoaXZlXCItUHJvZ3JhbW0iCisKKyM6IGFyY2hpdmUuYzo0ODkKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLXJlbW90ZSIKK21zZ3N0ciAiVW5lcndhcnRldGUgT3B0aW9uIC0tcmVtb3RlIgorCisjOiBhcmNoaXZlLmM6NDkxCittc2dpZCAiT3B0aW9uIC0tZXhlYyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1yZW1vdGUiCittc2dzdHIgIkRpZSBPcHRpb24gLS1leGVjIGthbm4gbnVyIHp1c2FtbWVuIG1pdCAtLXJlbW90ZSB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYXJjaGl2ZS5jOjQ5MworbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tb3V0cHV0IgorbXNnc3RyICJVbmVyd2FydGV0ZSBPcHRpb24gLS1vdXRwdXQiCisKKyM6IGFyY2hpdmUuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBhcmNoaXZlIGZvcm1hdCAnJXMnIgorbXNnc3RyICJVbmJla2FubnRlcyBBcmNoaXZmb3JtYXQgJyVzJyIKKworIzogYXJjaGl2ZS5jOjUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJBcmd1bWVudCBub3Qgc3VwcG9ydGVkIGZvciBmb3JtYXQgJyVzJzogLSVkIgorbXNnc3RyICJBcmd1bWVudCBmw7xyIEZvcm1hdCAnJXMnIG5pY2h0IHVudGVyc3TDvHR6dDogLSVkIgorCisjOiBhcmNoaXZlLXRhci5jOjEyNSBhcmNoaXZlLXppcC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyZWFtIGJsb2IgJXMiCittc2dzdHIgIkthbm4gQmxvYiAlcyBuaWNodCBzdHJlYW1lbi4iCisKKyM6IGFyY2hpdmUtdGFyLmM6MjY2IGFyY2hpdmUtemlwLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiCittc2dzdHIgIk5pY2h0IHVudGVyc3TDvHR6dGVyIERhdGVpbW9kdXM6IDAlbyAoU0hBMTogJXMpIgorCisjOiBhcmNoaXZlLXRhci5jOjI5MyBhcmNoaXZlLXppcC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlcyIKK21zZ3N0ciAiS2FubiAlcyBuaWNodCBsZXNlbi4iCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnJXMnIGZpbHRlciIKK21zZ3N0ciAiS29ubnRlICclcycgRmlsdGVyIG5pY2h0IHN0YXJ0ZW4uIgorCisjOiBhcmNoaXZlLXRhci5jOjQ2OAorbXNnaWQgInVuYWJsZSB0byByZWRpcmVjdCBkZXNjcmlwdG9yIgorbXNnc3RyICJLb25udGUgRGVzY3JpcHRvciBuaWNodCB1bWxlaXRlbi4iCisKKyM6IGFyY2hpdmUtdGFyLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsdGVyIHJlcG9ydGVkIGVycm9yIgorbXNnc3RyICInJXMnIEZpbHRlciBtZWxkZXRlIEZlaGxlci4iCisKKyM6IGFyY2hpdmUtemlwLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggaXMgbm90IHZhbGlkIFVURi04OiAlcyIKK21zZ3N0ciAiUGZhZCBpc3Qga2VpbiBnw7xsdGlnZXMgVVRGLTg6ICVzIgorCisjOiBhcmNoaXZlLXppcC5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoIHRvbyBsb25nICglZCBjaGFycywgU0hBMTogJXMpOiAlcyIKK21zZ3N0ciAiUGZhZCB6dSBsYW5nICglZCBaZWljaGVuLCBTSEExOiAlcyk6ICVzIgorCisjOiBhcmNoaXZlLXppcC5jOjQ4MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlIGVycm9yICglZCkiCittc2dzdHIgIkZlaGxlciBiZWltIEtvbXByaW1pZXJlbiAoJWQpIgorCisjOiBhcmNoaXZlLXppcC5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lc3RhbXAgdG9vIGxhcmdlIGZvciB0aGlzIHN5c3RlbTogJTxQUkl1TUFYPiIKK21zZ3N0ciAiVGltZXN0YW1wIHp1IGdyb8OfIGbDvHIgZGllc2VzIFN5c3RlbTogJTxQUkl1TUFYPiIKKworIzogYXR0ci5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lIgorbXNnc3RyICIlLipzIGlzdCBrZWluIGfDvGx0aWdlciBBdHRyaWJ1dG5hbWUiCisKKyM6IGF0dHIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbm90IGFsbG93ZWQ6ICVzOiVkIgorbXNnc3RyICIlcyBuaWNodCBlcmxhdWJ0OiAlczolZCIKKworIzogYXR0ci5jOjQwOQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorIlZlcm5laW5lbmRlIE11c3RlciB3ZXJkZW4gaW4gR2l0LUF0dHJpYnV0ZW4gaWdub3JpZXJ0LlxuIgorIkJlbnV0emVuIFNpZSAnXFwhJyBmw7xyIGbDvGhyZW5kZSBBdXNydWZlemVpY2hlbi4iCisKKyM6IGJpc2VjdC5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWRseSBxdW90ZWQgY29udGVudCBpbiBmaWxlICclcyc6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBJbmhhbHQgYnpnbC4gQW5mw7xocnVuZ3N6ZWljaGVuIGluIERhdGVpICclcyc6ICVzIgorCisjOiBiaXNlY3QuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICJLZWluZSBiaW7DpHJlIFN1Y2hlIG1laHIgbcO2Z2xpY2ghXG4iCisKKyM6IGJpc2VjdC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBjb21taXQgbmFtZSAlcyIKK21zZ3N0ciAiJXMgaXN0IGtlaW4gZ8O8bHRpZ2VyIENvbW1pdC1OYW1lIgorCisjOiBiaXNlY3QuYzo3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIGJhZC5cbiIKKyJUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIkRpZSBNZXJnZS1CYXNpcyAlcyBpc3QgZmVobGVyaGFmdC5cbiIKKyJEYXMgYmVkZXV0ZXQsIGRlciBGZWhsZXIgd3VyZGUgendpc2NoZW4gJXMgdW5kIFslc10gYmVob2Jlbi5cbiIKKworIzogYmlzZWN0LmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBuZXcuXG4iCisiVGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyJEaWUgTWVyZ2UtQmFzaXMgJXMgaXN0IG5ldS5cbiIKKyJEYXMgYmVkZXV0ZXQsIGRpZSBFaWdlbnNjaGFmdCBoYXQgc2ljaCB6d2lzY2hlbiAlcyB1bmQgWyVzXSBnZcOkbmRlcnQuXG4iCisKKyM6IGJpc2VjdC5jOjc4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIkRpZSBNZXJnZS1CYXNpcyAlcyBpc3QgJXMuXG4iCisiRGFzIGJlZGV1dGV0LCBkZXIgZXJzdGUgJyVzJyBDb21taXQgYmVmaW5kZXQgc2ljaCB6d2lzY2hlbiAlcyB1bmQgWyVzXS5cbiIKKworIzogYmlzZWN0LmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTb21lICVzIHJldnMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlICVzIHJldi5cbiIKKyJnaXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS5cbiIKKyJNYXliZSB5b3UgbWlzdG9vayAlcyBhbmQgJXMgcmV2cz9cbiIKK21zZ3N0ciAiIgorIk1hbmNoZSAlcyBDb21taXRzIHNpbmQga2VpbmUgVm9yZ8OkbmdlciBkZXMgJXMgQ29tbWl0cy5cbiIKKyJnaXQgYmlzZWN0IGthbm4gaW4gZGllc2VtIEZhbGwgbmljaHQgcmljaHRpZyBhcmJlaXRlbi5cbiIKKyJWaWVsbGVpY2h0IHZlcndlY2hzZWx0ZW4gU2llICVzIHVuZCAlcyBDb21taXRzP1xuIgorCisjOiBiaXNlY3QuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBtZXJnZSBiYXNlIGJldHdlZW4gJXMgYW5kIFslc10gbXVzdCBiZSBza2lwcGVkLlxuIgorIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCAlcyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgJXMuXG4iCisiV2UgY29udGludWUgYW55d2F5LiIKK21zZ3N0ciAiIgorIkRpZSBNZXJnZS1CYXNpcyB6d2lzY2hlbiAlcyB1bmQgWyVzXSBtdXNzIGF1c2dlbGFzc2VuIHdlcmRlbi5cbiIKKyJFcyBrYW5uIGRhaGVyIG5pY2h0IHNpY2hlcmdlc3RlbGx0IHdlcmRlbiwgZGFzcyBzaWNoIGRlclxuIgorImVyc3RlICVzIENvbW1pdCB6d2lzY2hlbiAlcyB1bmQgJXMgYmVmaW5kZXQuXG4iCisiRXMgd2lyZCBkZW5ub2NoIGZvcnRnZXNldHp0LiIKKworIzogYmlzZWN0LmM6ODQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkXG4iCittc2dzdHIgImJpbsOkcmUgU3VjaGU6IGVpbmUgTWVyZ2UtQmFzaXMgbXVzcyBnZXByw7xmdCB3ZXJkZW5cbiIKKworIzogYmlzZWN0LmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgImEgJXMgcmV2aXNpb24gaXMgbmVlZGVkIgorbXNnc3RyICJlaW4gJXMgQ29tbWl0IHdpcmQgYmVuw7Z0aWd0IgorCisjOiBiaXNlY3QuYzo5MjAgYnVpbHRpbi9ub3Rlcy5jOjE3NyBidWlsdGluL3RhZy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAia29ubnRlIERhdGVpICclcycgbmljaHQgZXJzdGVsbGVuIgorCisjOiBiaXNlY3QuYzo5NjYgYnVpbHRpbi9tZXJnZS5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciCittc2dzdHIgIktvbm50ZSBEYXRlaSAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBiaXNlY3QuYzo5OTcKK21zZ2lkICJyZWFkaW5nIGJpc2VjdCByZWZzIGZhaWxlZCIKK21zZ3N0ciAiTGVzZW4gdm9uIFJlZmVyZW56ZW4gZsO8ciBiaW7DpHJlIFN1Y2hlIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBiaXNlY3QuYzoxMDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHdhcyBib3RoICVzIGFuZCAlc1xuIgorbXNnc3RyICIlcyB3YXIgc293b2hsICVzIGFscyBhdWNoICVzXG4iCisKKyM6IGJpc2VjdC5jOjEwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKyJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iCittc2dzdHIgIiIKKyJLZWluIHRlc3RiYXJlciBDb21taXQgZ2VmdW5kZW4uXG4iCisiVmllbGxlaWNodCBzdGFydGV0ZW4gU2llIG1pdCBmYWxzY2hlbiBQZmFkLVBhcmFtZXRlcm4/XG4iCisKKyM6IGJpc2VjdC5jOjEwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJvdWdobHkgJWQgc3RlcCkiCittc2dpZF9wbHVyYWwgIihyb3VnaGx5ICVkIHN0ZXBzKSIKK21zZ3N0clswXSAiKHVuZ2Vmw6RociAlZCBTY2hyaXR0KSIKK21zZ3N0clsxXSAiKHVuZ2Vmw6RociAlZCBTY2hyaXR0ZSkiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgbGFzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggIihyb3VnaGx5ICVkCisjLiBzdGVwcykiIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJpc2VjdC5jOjEwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICJiaW7DpHJlIFN1Y2hlOiBkYW5hY2ggbm9jaCAlZCBDb21taXQgenVtIFRlc3RlbiDDvGJyaWcgJXNcbiIKK21zZ3N0clsxXSAiYmluw6RyZSBTdWNoZTogZGFuYWNoIG5vY2ggJWQgQ29tbWl0cyB6dW0gVGVzdGVuIMO8YnJpZyAlc1xuIgorCisjOiBibGFtZS5jOjI3MDAKK21zZ2lkICItLWNvbnRlbnRzIGFuZCAtLXJldmVyc2UgZG8gbm90IGJsZW5kIHdlbGwuIgorbXNnc3RyICItLWNvbnRlbnRzIHVuZCAtLXJldmVyc2UgZnVua3Rpb25pZXJlbiBnZW1laW5zYW0gbmljaHQuIgorCisjOiBibGFtZS5jOjI3MTQKK21zZ2lkICJjYW5ub3QgdXNlIC0tY29udGVudHMgd2l0aCBmaW5hbCBjb21taXQgb2JqZWN0IG5hbWUiCittc2dzdHIgIiIKKyJrYW5uIC0tY29udGVudHMgbmljaHQgbWl0IGVuZGfDvGx0aWdlbSBOYW1lbiBkZXMgQ29tbWl0LU9iamVrdGVzIGJlbnV0emVuIgorCisjOiBibGFtZS5jOjI3MzUKK21zZ2lkICItLXJldmVyc2UgYW5kIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgc3BlY2lmaWVkIGxhdGVzdCBjb21taXQiCittc2dzdHIgIiIKKyItLXJldmVyc2UgdW5kIC0tZmlyc3QtcGFyZW50IHp1c2FtbWVuIGVyZm9yZGVybiBkaWUgQW5nYWJlIGVpbmVzICIKKyJlbmRnw7xsdGlnZW5cbiIKKyJDb21taXRzIgorCisjOiBibGFtZS5jOjI3NDQgYnVuZGxlLmM6MTY3IHJlZi1maWx0ZXIuYzoyMjAzIHJlbW90ZS5jOjE5NDIgc2VxdWVuY2VyLmM6MjAwNgorIzogc2VxdWVuY2VyLmM6NDM1OCBzdWJtb2R1bGUuYzo4NDcgYnVpbHRpbi9jb21taXQuYzoxMDQ1IGJ1aWx0aW4vbG9nLmM6Mzg4CisjOiBidWlsdGluL2xvZy5jOjk5MSBidWlsdGluL2xvZy5jOjE1MjAgYnVpbHRpbi9sb2cuYzoxOTI1IGJ1aWx0aW4vbG9nLmM6MjIxNQorIzogYnVpbHRpbi9tZXJnZS5jOjQxMiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkwCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTkyCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgIkVpbnJpY2h0dW5nIGRlcyBSZXZpc2lvbnNnYW5ncyBmZWhsZ2VzY2hsYWdlbiIKKworIzogYmxhbWUuYzoyNzYyCittc2dpZCAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHJhbmdlIGFsb25nIGZpcnN0LXBhcmVudCBjaGFpbiIKK21zZ3N0ciAiIgorIi0tcmV2ZXJzZSB1bmQgLS1maXJzdC1wYXJlbnQgenVzYW1tZW4gZXJmb3JkZXJuIGVpbmVuIEJlcmVpY2ggZW50bGFuZyBkZXJcbiIKKyJcImZpcnN0LXBhcmVudFwiLUtldHRlIgorCisjOiBibGFtZS5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBwYXRoICVzIGluICVzIgorbXNnc3RyICJQZmFkICVzIG5pY2h0IGluICVzIgorCisjOiBibGFtZS5jOjI3ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgYmxvYiAlcyBmb3IgcGF0aCAlcyIKK21zZ3N0ciAia2FubiBCbG9iICVzIGbDvHIgUGZhZCAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBicmFuY2guYzo1MworIywgYy1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCi0iVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZVxuIgotIlRjbCBiaW5hcnkgZGlzdHJpYnV0ZWQgYnkgQ3lnd2luLiIKKyJBZnRlciBmaXhpbmcgdGhlIGVycm9yIGNhdXNlIHlvdSBtYXkgdHJ5IHRvIGZpeCB1cFxuIgorInRoZSByZW1vdGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYnkgaW52b2tpbmdcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgogbXNnc3RyICIiCiAiXG4iCi0iRGllcyBpc3QgZWluIGJla2FubnRlcyBQcm9ibGVtIGRlciBUY2wtVmVyc2lvbiwgZGllXG4iCi0iaW4gQ3lnd2luIG1pdGdlbGllZmVydCB3aXJkLiIKKyJOYWNoZGVtIFNpZSBkaWUgRmVobGVydXJzYWNoZSBiZWhvYmVuIGhhYmVuLCBrw7ZubmVuIFNpZVxuIgorImRpZSBUcmFja2luZy1JbmZvcm1hdGlvbmVuIG1pdFxuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIlxuIgorImVybmV1dCBzZXR6ZW4uIgogCi0jOiBnaXQtZ3VpLnNoOjQwNTEKLSMsIHRjbC1mb3JtYXQKKyM6IGJyYW5jaC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAiQnJhbmNoICVzIGthbm4gbmljaHQgc2VpbiBlaWdlbmVyIFVwc3RyZWFtLUJyYW5jaCBzZWluLiIKKworIzogYnJhbmNoLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICJCcmFuY2ggJyVzJyBmb2xndCBudW4gUmVtb3RlLUJyYW5jaCAnJXMnIHZvbiAnJXMnIGR1cmNoIFJlYmFzZS4iCisKKyM6IGJyYW5jaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnLiIKK21zZ3N0ciAiQnJhbmNoICclcycgZm9sZ3QgbnVuIFJlbW90ZS1CcmFuY2ggJyVzJyB2b24gJyVzJy4iCisKKyM6IGJyYW5jaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIkJyYW5jaCAnJXMnIGZvbGd0IG51biBsb2thbGVtIEJyYW5jaCAnJXMnIGR1cmNoIFJlYmFzZS4iCisKKyM6IGJyYW5jaC5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJy4iCittc2dzdHIgIkJyYW5jaCAnJXMnIGZvbGd0IG51biBsb2thbGVtIEJyYW5jaCAnJXMnLiIKKworIzogYnJhbmNoLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICJCcmFuY2ggJyVzJyBmb2xndCBudW4gUmVtb3RlLVJlZmVyZW56ICclcycgZHVyY2ggUmViYXNlLiIKKworIzogYnJhbmNoLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycuIgorbXNnc3RyICJCcmFuY2ggJyVzJyBmb2xndCBudW4gUmVtb3RlLVJlZmVyZW56ICclcycuIgorCisjOiBicmFuY2guYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiQnJhbmNoICclcycgZm9sZ3QgbnVuIGxva2FsZXIgUmVmZXJlbnogJyVzJyBkdXJjaCBSZWJhc2UuIgorCisjOiBicmFuY2guYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAnJXMnLiIKK21zZ3N0ciAiQnJhbmNoICclcycgZm9sZ3QgbnVuIGxva2FsZXIgUmVmZXJlbnogJyVzJy4iCisKKyM6IGJyYW5jaC5jOjExOQorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiS29ubnRlIEtvbmZpZ3VyYXRpb24genUgVXBzdHJlYW0tQnJhbmNoIG5pY2h0IHNjaHJlaWJlbi4iCisKKyM6IGJyYW5jaC5jOjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgdHJhY2tpbmc6IGFtYmlndW91cyBpbmZvcm1hdGlvbiBmb3IgcmVmICVzIgorbXNnc3RyICIiCisiS29uZmlndXJhdGlvbiB6dW0gRm9sZ2VuIHZvbiBCcmFuY2ggbmljaHQgZWluZ2VyaWNodGV0LiBSZWZlcmVueiAlcyBpc3QgIgorIm1laHJkZXV0aWcuIgorCisjOiBicmFuY2guYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcycgaXN0IGtlaW4gZ8O8bHRpZ2VyIEJyYW5jaG5hbWUuIgorCisjOiBicmFuY2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkJyYW5jaCAnJXMnIGV4aXN0aWVydCBiZXJlaXRzLiIKKworIzogYnJhbmNoLmM6MjEzCittc2dpZCAiQ2Fubm90IGZvcmNlIHVwZGF0ZSB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJLYW5uIEFrdHVhbGlzaWVydW5nIGRlcyBha3R1ZWxsZW4gQnJhbmNoZXMgbmljaHQgZXJ6d2luZ2VuLiIKKworIzogYnJhbmNoLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzZXR1cCB0cmFja2luZyBpbmZvcm1hdGlvbjsgc3RhcnRpbmcgcG9pbnQgJyVzJyBpcyBub3QgYSBicmFuY2guIgorbXNnc3RyICIiCisiS2FubiBUcmFja2luZy1JbmZvcm1hdGlvbmVuIG5pY2h0IGVpbnJpY2h0ZW47IFN0YXJ0cHVua3QgJyVzJyBpc3Qga2VpbiAiCisiQnJhbmNoLiIKKworIzogYnJhbmNoLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSByZXF1ZXN0ZWQgdXBzdHJlYW0gYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImRlciBhbmdlZm9yZGVydGUgVXBzdHJlYW0tQnJhbmNoICclcycgZXhpc3RpZXJ0IG5pY2h0IgorCisjOiBicmFuY2guYzoyMzcKIG1zZ2lkICIiCiAiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyBvbiBiYXNpbmcgeW91ciB3b3JrIG9uIGFuIHVwc3RyZWFtXG4iCisiYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXQgdGhlIHJlbW90ZSwgeW91IG1heSBuZWVkIHRvXG4iCisicnVuIFwiZ2l0IGZldGNoXCIgdG8gcmV0cmlldmUgaXQuXG4iCiAiXG4iCi0iQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgotImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgotInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCi0ifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyB0byBwdXNoIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggdGhhdFxuIgorIndpbGwgdHJhY2sgaXRzIHJlbW90ZSBjb3VudGVycGFydCwgeW91IG1heSB3YW50IHRvIHVzZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB0byBzZXQgdGhlIHVwc3RyZWFtIGNvbmZpZyBhcyB5b3UgcHVzaC4iCiBtc2dzdHIgIiIKICJcbiIKKyJGYWxscyBTaWUgdm9yaGFiZW4sIElocmUgQXJiZWl0IGF1ZiBlaW5lbSBiZXJlaXRzIGV4aXN0aWVyZW5kZW5cbiIKKyJVcHN0cmVhbS1CcmFuY2ggYXVmenViYXVlbiwgc29sbHRlbiBTaWUgXCJnaXQgZmV0Y2hcIlxuIgorImF1c2bDvGhyZW4sIHVtIGRpZXNlbiBhYnp1cnVmZW4uXG4iCiAiXG4iCi0iVW0gZGVuIE5hbWVuIMK7JXPCqyB6dSDDpG5kZXJuLCBzb2xsdGVuIFNpZSBkaWUgXG4iCi0iZ2V3w7xuc2NodGVuIFdlcnRlIGbDvHIgZGllIEVpbnN0ZWxsdW5nIHVzZXIubmFtZSB1bmQgXG4iCi0idXNlci5lbWFpbCBpbiBJaHJlIERhdGVpIH4vLmdpdGNvbmZpZyBlaW5mw7xnZW4uXG4iCisiRmFsbHMgU2llIHZvcmhhYmVuLCBlaW5lbiBuZXVlbiBsb2thbGVuIEJyYW5jaCB6dSB2ZXJzZW5kZW5cbiIKKyJkZXIgc2VpbmVtIGV4dGVybmVuIEdlZ2Vuc3TDvGNrIGZvbGdlbiBzb2xsLCBrw7ZubmVuIFNpZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB2ZXJ3ZW5kZW4sIHVtIGRlbiBVcHN0cmVhbS1CcmFuY2ggYmVpbSBcInB1c2hcIlxuIgorInp1IGtvbmZpZ3VyaWVyZW4uIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKLW1zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJSZWNodHNjaHJlaWJwcsO8ZnVuZ3Nwcm9ncmFtbSBuaWNodCB1bnRlcnN0w7x0enQiCisjOiBicmFuY2guYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJVbmfDvGx0aWdlciBPYmpla3QtTmFtZTogJyVzJyIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjY1Ci1tc2dpZCAiU3BlbGwgY2hlY2tpbmcgaXMgdW5hdmFpbGFibGUiCi1tc2dzdHIgIlJlY2h0c2NocmVpYnByw7xmdW5nIG5pY2h0IHZlcmbDvGdiYXIiCisjOiBicmFuY2guYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAibWVocmRldXRpZ2VyIE9iamVrdC1OYW1lOiAnJXMnIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NjgKLW1zZ2lkICJJbnZhbGlkIHNwZWxsIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24iCi1tc2dzdHIgIlVuYmVudXR6YmFyZSBLb25maWd1cmF0aW9uIGRlciBSZWNodHNjaHJlaWJwcsO8ZnVuZyIKKyM6IGJyYW5jaC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBicmFuY2ggcG9pbnQ6ICclcycuIgorbXNnc3RyICJVbmfDvGx0aWdlciBCcmFuY2hwdW5rdDogJyVzJyIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgotbXNnc3RyICJXw7ZydGVyYnVjaCBhdWYgJXMgenVyw7xja2dlc2V0enQuIgorIzogYnJhbmNoLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICInJXMnIGlzdCBiZXJlaXRzIGluICclcycgYXVzZ2VjaGVja3QiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MwotbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCi1tc2dzdHIgIlJlY2h0c2NocmVpYnByw7xmdW5nc3Byb2dyYW1tIG1pdCBGZWhsZXIgYWJnZWJyb2NoZW4iCisjOiBicmFuY2guYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBvZiB3b3JraW5nIHRyZWUgJXMgaXMgbm90IHVwZGF0ZWQiCittc2dzdHIgIkhFQUQgZGVzIEFyYmVpdHN2ZXJ6ZWljaG5pc3NlcyAlcyBpc3QgbmljaHQgYWt0dWFsaXNpZXJ0LiIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCi1tc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgIlVuYmVrYW5udGVzIFJlY2h0c2NocmVpYnByw7xmdW5nc3Byb2dyYW1tIgorIzogYnVuZGxlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAiJyVzJyBzaWVodCBuaWNodCB3aWUgZWluZSB2MiBQYWtldGRhdGVpIGF1cyIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgotbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgotbXNnc3RyICJLZWluZSBWb3JzY2hsw6RnZSIKKyM6IGJ1bmRsZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAibmljaHQgZXJrYW5udGVyIEtvcGZiZXJlaWNoOiAlcyVzICglZCkiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKLW1zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgIlVuZXJ3YXJ0ZXRlcyBFT0Ygdm9tIFJlY2h0c2NocmVpYnByw7xmdW5nc3Byb2dyYW1tIgorIzogYnVuZGxlLmM6OTAgcmVyZXJlLmM6NDgwIHJlcmVyZS5jOjY5MCBzZXF1ZW5jZXIuYzoyMjU4IHNlcXVlbmNlci5jOjMwMTYKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IMO2ZmZuZW4iCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKLW1zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKLW1zZ3N0ciAiUmVjaHRzY2hyZWlicHLDvGZ1bmcgZmVobGdlc2NobGFnZW4iCisjOiBidW5kbGUuYzoxNDMKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiRGVtIFJlcG9zaXRvcnkgZmVobGVuIGZvbGdlbmRlIHZvcmF1c2dlc2V0enRlIENvbW1pdHM6IgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo2IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmZXRjaCAlcyIKLW1zZ3N0ciAiwrslc8KrIGFuZm9yZGVybiIKKyM6IGJ1bmRsZS5jOjE0NgorbXNnaWQgIm5lZWQgYSByZXBvc2l0b3J5IHRvIHZlcmlmeSBhIGJ1bmRsZSIKK21zZ3N0ciAiVW0gZWluIFBha2V0IHp1IMO8YmVycHLDvGZlbiB3aXJkIGVpbiBSZXBvc2l0b3J5IGJlbsO2dGlndC4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgotbXNnc3RyICJOZXVlIMOEbmRlcnVuZ2VuIHZvbiDCuyVzwqsgaG9sZW4iCisjOiBidW5kbGUuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIkRhcyBQYWtldCBlbnRow6RsdCBkaWVzZSBSZWZlcmVuejoiCittc2dzdHJbMV0gIkRhcyBQYWtldCBlbnRow6RsdCBkaWVzZSAlZCBSZWZlcmVuemVuOiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCi1tc2dzdHIgIkdlbMO2c2NodGUgZXh0ZXJuZSBCcmFuY2hlcyBhdXMgwrslc8KrIGVudGZlcm5lbiIKKyM6IGJ1bmRsZS5jOjIwNAorbXNnaWQgIlRoZSBidW5kbGUgcmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkuIgorbXNnc3RyICJEYXMgUGFrZXQgc3BlaWNoZXJ0IGVpbmUga29tcGxldHRlIEhpc3RvcmllLiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKLW1zZ3N0ciAiR2Vsw7ZzY2h0ZSBleHRlcm5lIFRyYWNraW5nYnJhbmNoZXMgYXVzIMK7JXPCqyB3ZXJkZW4gZW50ZmVybnQiCisjOiBidW5kbGUuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIkRhcyBQYWtldCBiZW7DtnRpZ3QgZGllc2UgUmVmZXJlbno6IgorbXNnc3RyWzFdICJEYXMgUGFrZXQgYmVuw7Z0aWd0IGRpZXNlICVkIFJlZmVyZW56ZW46IgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyNQotbXNnaWQgImZldGNoIGFsbCByZW1vdGVzIgotbXNnc3RyICJBYnJ1ZmVuIGFsbGVyIGV4dGVybmVuIgorIzogYnVuZGxlLmM6MjczCittc2dpZCAidW5hYmxlIHRvIGR1cCBidW5kbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAiS29ubnRlIGR1cCBmw7xyIERlc2NyaXB0b3IgZGVzIFBha2V0cyBuaWNodCBhdXNmw7xocmVuLiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MjYKLW1zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tIGFsbCByZW1vdGVzIgotbXNnc3RyICJOZXVlIMOEbmRlcnVuZ2VuIHZvbiBhbGxlbiBleHRlcm5lbiBhbmZvcmRlcm4iCisjOiBidW5kbGUuYzoyODAKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICJLb25udGUgUGFrZXRvYmpla3RlIG5pY2h0IGVyc3RlbGxlbiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6NDAKLW1zZ2lkICJyZW1vdGUgcHJ1bmUgYWxsIHJlbW90ZXMiCi1tc2dzdHIgIkV4dGVybiB2ZXJhbHRldGUgQnJhbmNoZXMgZW50ZmVybmVuIGFsbGVyIFJlcG9zaXRvcmllcyIKKyM6IGJ1bmRsZS5jOjI5MQorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICJFcnN0ZWxsdW5nIGRlciBQYWtldG9iamVrdGUgYWJnZWJyb2NoZW4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjQxCi1tc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gYWxsIHJlbW90ZXMiCi1tc2dzdHIgIiIKLSJHZWzDtnNjaHRlIGV4dGVybmUgVHJhY2tpbmdicmFuY2hlcyBhdXMgYWxsZW4gUmVwb3NpdG9yaWVzIHdlcmRlbiBlbnRmZXJudCIKKyM6IGJ1bmRsZS5jOjMzMworbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgIlwicmV2LWxpc3RcIiBhYmdlYnJvY2hlbiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6NTQgbGliL3RyYW5zcG9ydC50Y2w6OTIgbGliL3RyYW5zcG9ydC50Y2w6MTEwCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAicHVzaCAlcyIKLW1zZ3N0ciAiwrslc8KrIHZlcnNlbmRlbi4uLiIKKyM6IGJ1bmRsZS5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIKK21zZ3N0ciAiUmVmZXJlbnogJyVzJyB3aXJkIGR1cmNoIFwicmV2LWxpc3RcIiBPcHRpb25lbiBhdXNnZXNjaGxvc3NlbiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6NTUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQdXNoaW5nIGNoYW5nZXMgdG8gJXMiCi1tc2dzdHIgIsOEbmRlcnVuZ2VuIG5hY2ggwrslc8KrIHZlcnNlbmRlbiIKKyM6IGJ1bmRsZS5jOjQ2MSBidWlsdGluL2xvZy5jOjIwMyBidWlsdGluL2xvZy5jOjE4MTQgYnVpbHRpbi9zaG9ydGxvZy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJuaWNodCBlcmthbm50ZXMgQXJndW1lbnQ6ICVzIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo5MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1pcnJvcmluZyB0byAlcyIKLW1zZ3N0ciAiU3BpZWdlbG4gbmFjaCAlcyIKKyM6IGJ1bmRsZS5jOjQ2OQorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICJFcnN0ZWxsdW5nIGVpbmVzIGxlZXJlbiBQYWtldHMgenVyw7xja2dld2llc2VuLiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKLW1zZ3N0ciAiJXMgJXMgbmFjaCAlcyB2ZXJzZW5kZW4iCisjOiBidW5kbGUuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICJrYW5uICclcycgbmljaHQgZXJzdGVsbGVuIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxMzIKLW1zZ2lkICJQdXNoIEJyYW5jaGVzIgotbXNnc3RyICJCcmFuY2hlcyB2ZXJzZW5kZW4iCisjOiBidW5kbGUuYzo1MDQKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgIkVyc3RlbGx1bmcgZGVyIFBha2V0aW5kZXhkYXRlaSBhYmdlYnJvY2hlbiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTQxIGxpYi9jaGVja291dF9vcC50Y2w6NTgwIGxpYi9yZW1vdGVfYWRkLnRjbDozNAotIzogbGliL2Jyb3dzZXIudGNsOjI5MiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzIKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NDUgbGliL29wdGlvbi50Y2w6MTI3IGxpYi90b29sc19kbGcudGNsOjQxCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMDIgbGliL3Rvb2xzX2RsZy50Y2w6MzQ1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDMKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNyBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzQgbGliL21lcmdlLnRjbDoxNzgKLW1zZ2lkICJDYW5jZWwiCi1tc2dzdHIgIkFiYnJlY2hlbiIKKyM6IGNvbG9yLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIEZhcmJ3ZXJ0OiAlLipzIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNDcKLW1zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCi1tc2dzdHIgIkxva2FsZSBCcmFuY2hlcyIKKyM6IGNvbW1pdC5jOjUxIHNlcXVlbmNlci5jOjI3MTkgYnVpbHRpbi9hbS5jOjM1OSBidWlsdGluL2FtLmM6NDAzCisjOiBidWlsdGluL2FtLmM6MTM3MSBidWlsdGluL2FtLmM6MjAxNCBidWlsdGluL3JlcGxhY2UuYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIgorbXNnc3RyICJrb25udGUgJXMgbmljaHQgcGFyc2VuIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjIKLW1zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgotbXNnc3RyICJaaWVsLVJlcG9zaXRvcnkiCisjOiBjb21taXQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICIlcyAlcyBpc3Qga2VpbiBDb21taXQhIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MQotbXNnaWQgIlJlbW90ZToiCi1tc2dzdHIgIkV4dGVybmVzIFJlcG9zaXRvcnk6IgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxODcgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo3MgotbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCi1tc2dzdHIgIkJlbGllYmlnZSBBZHJlc3NlOiIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MjA1Ci1tc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKLW1zZ3N0ciAiTmV0endlcmstRWluc3RlbGx1bmdlbiIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MjA3Ci1tc2dpZCAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiCi1tc2dzdHIgIiIKLSLDnGJlcnNjaHJlaWJlbiB2b24gZXhpc3RpZXJlbmRlbiBCcmFuY2hlcyBlcnp3aW5nZW4gKGvDtm5udGUgw4RuZGVydW5nZW4gIgotImzDtnNjaGVuKSIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MjExCi1tc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCi1tc2dzdHIgIktvbXBha3RlcyBEYXRlbmZvcm1hdCBiZW51dHplbiAoZsO8ciBsYW5nc2FtZSBOZXR6dmVyYmluZHVuZ2VuKSIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MjE1Ci1tc2dpZCAiSW5jbHVkZSB0YWdzIgotbXNnc3RyICJNaXQgVGFncyB2ZXJzZW5kZW4iCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjIyOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IFB1c2giCi1tc2dzdHIgIiVzICglcyk6IFZlcnNlbmRlbiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo4NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nICVzIGZyb20gJXMiCi1tc2dzdHIgIsOEbmRlcnVuZ2VuIMK7JXPCqyB2b24gwrslc8KrIGFuZm9yZGVybiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCi1tc2dzdHIgIkZlaGxlcjogwrslc8KrIGthbm4gbmljaHQgYWxzIEJyYW5jaCBvZGVyIFZlcnNpb24gZXJrYW5udCB3ZXJkZW4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQ2IGxpYi9zc2hrZXkudGNsOjU4IGxpYi9jb25zb2xlLnRjbDo4MQotIzogbGliL2RhdGFiYXNlLnRjbDozMAotbXNnaWQgIkNsb3NlIgotbXNnc3RyICJTY2hsaWXDn2VuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKLW1zZ3N0ciAiQnJhbmNoIMK7JXPCqyBleGlzdGllcnQgbmljaHQuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCi1tc2dzdHIgIkZlaGxlciBiZWltIEVpbnJpY2h0ZW4gZGVyIHZlcmVpbmZhY2h0ZW4gZ2l0LXB1bGwgZsO8ciDCuyVzwqsuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTAyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJCcmFuY2ggwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjkKLSMsIHRjbC1mb3JtYXQKKyM6IGNvbW1pdC5jOjE5MwogbXNnaWQgIiIKLSJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKKyJTdXBwb3J0IGZvciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaXMgZGVwcmVjYXRlZFxuIgorImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgR2l0IHZlcnNpb24uXG4iCiAiXG4iCi0iSXQgY2Fubm90IGZhc3QtZm9yd2FyZCB0byAlcy5cbiIKLSJBIG1lcmdlIGlzIHJlcXVpcmVkLiIKKyJQbGVhc2UgdXNlIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIlxuIgorInRvIGNvbnZlcnQgdGhlIGdyYWZ0cyBpbnRvIHJlcGxhY2UgcmVmcy5cbiIKKyJcbiIKKyJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiIgogbXNnc3RyICIiCi0iQnJhbmNoIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy5cbiIKKyJEaWUgVW50ZXJzdMO8dHp1bmcgZsO8ciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaXN0IHZlcmFsdGV0XG4iCisidW5kIHdpcmQgaW4genVrw7xuZnRpZ2VuIEdpdCBWZXJzaW9uZW4gZW50ZmVybnQuXG4iCiAiXG4iCi0iQnJhbmNoIGthbm4gbmljaHQgYXVmIMK7JXPCqyB2b3JnZXNwdWx0IHdlcmRlbi4gUmVndWzDpHJlcyBadXNhbW1lbmbDvGhyZW4gaXN0ICIKLSJub3R3ZW5kaWcuIgorIkJpdHRlIGJlbnV0emVuIFNpZSBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyJ6dW0gS29udmVydGllcmVuIGRlciBrw7xuc3RsaWNoZW4gVm9yZ8OkbmdlciAoXCJncmFmdHNcIilcbiIKKyJpbiBlcnNldHplbmRlIFJlZmVyZW56ZW4uPFxuIgorIlxuIgorIlNpZSBrw7ZubmVuIGRpZXNlIE1lbGR1bmcgdW50ZXJkcsO8Y2tlbiwgaW5kZW0gU2llXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIgYXVzZsO8aHJlbi4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3NtZXRob2RlIMK7JXPCqyBuaWNodCB1bnRlcnN0w7x0enQuIgorIzogY29tbWl0LmM6MTE1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlLCBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICIiCisiQ29tbWl0ICVzIGhhdCBlaW5lIG5pY2h0IHZlcnRyYXVlbnN3w7xyZGlnZSBHUEctU2lnbmF0dXIsIGFuZ2VibGljaCB2b24gJXMuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCi1tc2dzdHIgIkFrdHVhbGlzaWVyZW4gdm9uIMK7JXPCqyBmZWhsZ2VzY2hsYWdlbi4iCisjOiBjb21taXQuYzoxMTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBiYWQgR1BHIHNpZ25hdHVyZSBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICJDb21taXQgJXMgaGF0IGVpbmUgdW5nw7xsdGlnZSBHUEctU2lnbmF0dXIsIGFuZ2VibGljaCB2b24gJXMuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3NAotbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKLW1zZ3N0ciAiQmVyZWl0c3RlbGx1bmcgKMK7aW5kZXjCqykgaXN0IHp1ciBCZWFyYmVpdHVuZyBnZXNwZXJydCAowrtsb2NrZWTCqykuIgorIzogY29tbWl0LmM6MTE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIgorbXNnc3RyICJDb21taXQgJXMgaGF0IGtlaW5lIEdQRy1TaWduYXR1ci4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5CisjOiBjb21taXQuYzoxMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAiQ29tbWl0ICVzIGhhdCBlaW5lIGfDvGx0aWdlIEdQRy1TaWduYXR1ciB2b24gJXNcbiIKKworIzogY29tbWl0LmM6MTQxNwogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorIldhcm5pbmc6IGNvbW1pdCBtZXNzYWdlIGRpZCBub3QgY29uZm9ybSB0byBVVEYtOC5cbiIKKyJZb3UgbWF5IHdhbnQgdG8gYW1lbmQgaXQgYWZ0ZXIgZml4aW5nIHRoZSBtZXNzYWdlLCBvciBzZXQgdGhlIGNvbmZpZ1xuIgorInZhcmlhYmxlIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gdGhlIGVuY29kaW5nIHlvdXIgcHJvamVjdCB1c2VzLlxuIgogbXNnc3RyICIiCi0iRGVyIGxldHp0ZSBnZWxhZGVuZSBTdGF0dXMgc3RpbW10IG5pY2h0IG1laHIgbWl0IGRlbSBSZXBvc2l0b3J5IMO8YmVyZWluLlxuIgotIlxuIgotIkVpbiBhbmRlcmVzIEdpdC1Qcm9ncmFtbSBoYXQgZGFzIFJlcG9zaXRvcnkgc2VpdCBkZW0gbGV0enRlbiBMYWRlbiAiCi0iZ2XDpG5kZXJ0LiAgVm9yIGRlbSBXZWNoc2VsbiBkZXMgbG9rYWxlbiBCcmFuY2hlcyBtdXNzIG5ldSBnZWxhZGVuIHdlcmRlbi5cbiIKLSJcbiIKLSJFcyB3aXJkIGdsZWljaCBuZXUgZ2VsYWRlbi5cbiIKKyJXYXJudW5nOiBEaWUgQ29tbWl0LUJlc2NocmVpYnVuZyBpc3QgbmljaHQgVVRGLTgga29uZm9ybS5cbiIKKyJTaWUga8O2bm5lbiBkYXMgbmFjaGJlc3Nlcm4sIG5hY2hkZW0gU2llIGRpZSBCZXNjaHJlaWJ1bmcga29ycmlnaWVydCBoYWJlbixcbiIKKyJvZGVyIFNpZSBzZXR6ZW4gZGllIEtvbmZpZ3VyYXRpb25zdmFyaWFibGUgaTE4bi5jb21taXRlbmNvZGluZyBhdWYgZGFzICIKKyJFbmNvZGluZyxcbiIKKyJ3ZWxjaGVzIHZvbiBpaHJlbSBQcm9qZWt0IHZlcndlbmRldCB3aXJkLlxuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvICclcycuLi4iCi1tc2dzdHIgIkFyYmVpdHNrb3BpZSBha3R1YWxpc2llcmVuIGF1ZiDCuyVzwqsuLi4iCisjOiBjb21taXQtZ3JhcGguYzoxMjIKK21zZ2lkICJjb21taXQtZ3JhcGggZmlsZSBpcyB0b28gc21hbGwiCittc2dzdHIgIkNvbW1pdC1HcmFwaC1EYXRlaSBpc3QgenUga2xlaW4uIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgotbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgotbXNnc3RyICJEYXRlaWVuIGFrdHVhbGlzaWVydCIKKyM6IGNvbW1pdC1ncmFwaC5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggc2lnbmF0dXJlICVYIGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAlWCIKK21zZ3N0ciAiQ29tbWl0LUdyYXBoLVNpZ25hdHVyICVYIHN0aW1tdCBuaWNodCBtaXQgU2lnbmF0dXIgJVggw7xiZXJlaW4uIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFib3J0ZWQgY2hlY2tvdXQgb2YgJyVzJyAoZmlsZSBsZXZlbCBtZXJnaW5nIGlzIHJlcXVpcmVkKS4iCisjOiBjb21taXQtZ3JhcGguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAiQ29tbWl0LUdyYXBoLVZlcnNpb24gJVggc3RpbW10IG5pY2h0IG1pdCBWZXJzaW9uICVYIMO8YmVyZWluLiIKKworIzogY29tbWl0LWdyYXBoLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXNoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAiSGFzaC1WZXJzaW9uIGRlcyBDb21taXQtR3JhcGggJVggc3RpbW10IG5pY2h0IG1pdCBWZXJzaW9uICVYIMO8YmVyZWluLiIKKworIzogY29tbWl0LWdyYXBoLmM6MjI2Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGxvb2t1cCB0YWJsZSBlbnRyeSBtaXNzaW5nOyBmaWxlIG1heSBiZSBpbmNvbXBsZXRlIgogbXNnc3RyICIiCi0iQnJhbmNoIMK7JXPCqyBBdXNjaGVja2VuIGFiZ2Vicm9jaGVuIChadXNhbW1lbmbDvGhyZW4gZGVyIERhdGVpZW4gaXN0ICIKLSJub3R3ZW5kaWcpLiIKKyJmZWhsZW5kZXIgVGFiZWxsZW5laW50cmFnIGbDvHIgQ29tbWl0LUdyYXBoIENodW5rLUxvb2t1cDsgRGF0ZWkgIgorIm3DtmdsaWNoZXJ3ZWlzZSB1bnZvbGxzdMOkbmRpZyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzgKLW1zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKLW1zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIGRlciBEYXRlaWVuIGlzdCBub3R3ZW5kaWcuIgorIzogY29tbWl0LWdyYXBoLmM6MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBpbXByb3BlciBjaHVuayBvZmZzZXQgJTA4eCUwOHgiCittc2dzdHIgIlVuenVsw6Rzc2lnZXIgQ29tbWl0LUdyYXBoIENodW5rLU9mZnNldCAlMDh4JTA4eCIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozODIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKLW1zZ3N0ciAiRXMgd2lyZCBhdWYgQnJhbmNoIMK7JXPCqyB2ZXJibGllYmVuLiIKKyM6IGNvbW1pdC1ncmFwaC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggY2h1bmsgaWQgJTA4eCBhcHBlYXJzIG11bHRpcGxlIHRpbWVzIgorbXNnc3RyICJDb21taXQtR3JhcGggQ2h1bmstSWQgJTA4eCBrb21tdCBtZWhyZmFjaCB2b3IuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MworIzogY29tbWl0LWdyYXBoLmM6MzQzCittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBubyBiYXNlIGdyYXBocyBjaHVuayIKK21zZ3N0ciAiQ29tbWl0LUdyYXBoIGhhdCBrZWluZW4gQmFzaXMtR3JhcGgtQ2h1bmsiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM1MworbXNnaWQgImNvbW1pdC1ncmFwaCBjaGFpbiBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAiQ29tbWl0LUdyYXBoIFZlcmtldHR1bmcgc3RpbW10IG5pY2h0IMO8YmVyZWluLiIKKworIzogY29tbWl0LWdyYXBoLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0LWdyYXBoIGNoYWluOiBsaW5lICclcycgbm90IGEgaGFzaCIKK21zZ3N0ciAiVW5nw7xsdGlnZSBDb21taXQtR3JhcGggVmVya2V0dHVuZzogWmVpbGUgJyVzJyBpc3Qga2VpbiBIYXNoIgorCisjOiBjb21taXQtZ3JhcGguYzo0MjUKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBhbGwgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICJLb25udGUgbmljaHQgYWxsZSBDb21taXQtR3JhcGgtRGF0ZWllbiBmaW5kZW4uIgorCisjOiBjb21taXQtZ3JhcGguYzo1NTggY29tbWl0LWdyYXBoLmM6NjE4Cittc2dpZCAiaW52YWxpZCBjb21taXQgcG9zaXRpb24uIGNvbW1pdC1ncmFwaCBpcyBsaWtlbHkgY29ycnVwdCIKK21zZ3N0ciAiVW5nw7xsdGlnZSBDb21taXQtUG9zaXRpb24uIENvbW1pdC1HcmFwaCBpc3Qgd2FocnNjaGVpbmxpY2ggYmVzY2jDpGRpZ3QuIgorCisjOiBjb21taXQtZ3JhcGguYzo1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmQgY29tbWl0ICVzIgorbXNnc3RyICJLb25udGUgQ29tbWl0ICVzIG5pY2h0IGZpbmRlbi4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjg1MiBidWlsdGluL2FtLmM6MTI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICJLb25udGUgQ29tbWl0ICclcycgbmljaHQgcGFyc2VuLiIKKworIzogY29tbWl0LWdyYXBoLmM6MTAxMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCB0eXBlIG9mIG9iamVjdCAlcyIKK21zZ3N0ciAiS29ubnRlIEFydCB2b24gT2JqZWt0ICclcycgbmljaHQgYmVzdGltbWVuLiIKKworIzogY29tbWl0LWdyYXBoLmM6MTA0MworbXNnaWQgIkxvYWRpbmcga25vd24gY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIkxhZGUgYmVrYW5udGUgQ29tbWl0cyBpbiBDb21taXQtR3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNjAKK21zZ2lkICJFeHBhbmRpbmcgcmVhY2hhYmxlIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJFcndlaXRlcmUgZXJyZWljaGJhcmUgQ29tbWl0cyBpbiBDb21taXQtR3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNzkKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJMw7ZzY2hlIENvbW1pdC1NYXJraWVydW5nZW4gaW4gQ29tbWl0LUdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDk4Cittc2dpZCAiQ29tcHV0aW5nIGNvbW1pdCBncmFwaCBnZW5lcmF0aW9uIG51bWJlcnMiCittc2dzdHIgIkNvbW1pdC1HcmFwaCBHZW5lcmF0aW9uc251bW1lcm4gYmVyZWNobmVuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2siCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2tzIgorbXNnc3RyWzBdICJTdWNoZSBDb21taXRzIGbDvHIgQ29tbWl0LUdyYXBoIGluICVkIFBha2V0IgorbXNnc3RyWzFdICJTdWNoZSBDb21taXRzIGbDvHIgQ29tbWl0LUdyYXBoIGluICVkIFBha2V0ZW4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgYWRkaW5nIHBhY2sgJXMiCittc2dzdHIgIkZlaGxlciBiZWltIEhpbnp1ZsO8Z2VuIHZvbiBQYWtldCAlcy4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyBpbmRleCBmb3IgJXMiCittc2dzdHIgIkZlaGxlciBiZWltIMOWZmZuZW4gZGVzIEluZGV4IGbDvHIgJXMuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBmcm9tICVkIHJlZnMiCittc2dzdHJbMF0gIlN1Y2hlIENvbW1pdHMgZsO8ciBDb21taXQtR3JhcGggaW4gJWQgUmVmZXJlbnoiCittc2dzdHJbMV0gIlN1Y2hlIENvbW1pdHMgZsO8ciBDb21taXQtR3JhcGggaW4gJWQgUmVmZXJlbnplbiIKKworIzogY29tbWl0LWdyYXBoLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBvYmplY3QgaWQ6ICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlIENvbW1pdC1PYmpla3QtSUQ6ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjQ5Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggYW1vbmcgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIlN1Y2hlIENvbW1pdHMgZsO8ciBDb21taXQtR3JhcGggaW4gZ2VwYWNrdGVuIE9iamVrdGVuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjY0Cittc2dpZCAiQ291bnRpbmcgZGlzdGluY3QgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIlrDpGhsZSBDb21taXRzIGluIENvbW1pdC1HcmFwaCIKKworIzogY29tbWl0LWdyYXBoLmM6MTI5NAorbXNnaWQgIkZpbmRpbmcgZXh0cmEgZWRnZXMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJTdWNoZSB6dXPDpHR6bGljaGUgUsOkbmRlciBpbiBDb21taXQtR3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNDAKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29ycmVjdCBudW1iZXIgb2YgYmFzZSBncmFwaCBpZHMiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXIga29ycmVrdGVuIEFuemFobCB2b24gQmFzaXMtR3JhcGgtSURzLiIKKworIzogY29tbWl0LWdyYXBoLmM6MTM3MyBtaWR4LmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAlcyIKK21zZ3N0ciAiS29ubnRlIGbDvGhyZW5kZSBWZXJ6ZWljaG5pc3NlIHZvbiAnJXMnIG5pY2h0IGVyc3RlbGxlbi4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzODUgYnVpbHRpbi9pbmRleC1wYWNrLmM6MzA2IGJ1aWx0aW4vcmVwYWNrLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAia29ubnRlICclcycgbmljaHQgZXJzdGVsbGVuIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzIgorbXNnaWRfcGx1cmFsICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzc2VzIgorbXNnc3RyWzBdICJTY2hyZWliZSBDb21taXQtR3JhcGggaW4gJWQgRHVyY2hnYW5nIgorbXNnc3RyWzFdICJTY2hyZWliZSBDb21taXQtR3JhcGggaW4gJWQgRHVyY2hnw6RuZ2VuIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDg2Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gY29tbWl0LWdyYXBoIGNoYWluIGZpbGUiCittc2dzdHIgIktvbm50ZSBDb21taXQtR3JhcGggQ2hhaW4tRGF0ZWkgbmljaHQgw7ZmZm5lbi4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0OTgKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIGJhc2UgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIktvbm50ZSBCYXNpcy1Db21taXQtR3JhcGgtRGF0ZWkgbmljaHQgdW1iZW5lbm5lbi4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE1MTgKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIHRlbXBvcmFyeSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiS29ubnRlIHRlbXBvcsOkcmUgQ29tbWl0LUdyYXBoLURhdGVpIG5pY2h0IHVtYmVuZW5uZW4uIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjMxCittc2dpZCAiU2Nhbm5pbmcgbWVyZ2VkIGNvbW1pdHMiCittc2dzdHIgIkR1cmNoc3VjaGUgenVzYW1tZW5nZWbDvGhydGUgQ29tbWl0cyIKKworIzogY29tbWl0LWdyYXBoLmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGR1cGxpY2F0ZSBjb21taXQgaWQgJXMiCittc2dzdHIgIlVuZXJ3YXJ0ZXRlIGRvcHBlbHRlIENvbW1pdC1JRCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTY2NQorbXNnaWQgIk1lcmdpbmcgY29tbWl0LWdyYXBoIgorbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gdm9uIENvbW1pdC1HcmFwaCIKKworIzogY29tbWl0LWdyYXBoLmM6MTg0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgY29tbWl0IGdyYXBoIGZvcm1hdCBjYW5ub3Qgd3JpdGUgJWQgY29tbWl0cyIKK21zZ3N0ciAiRGFzIENvbW1pdC1HcmFwaCBGb3JtYXQga2FubiBuaWNodCAlZCBDb21taXRzIHNjaHJlaWJlbi4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4NTUKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIHRvIHdyaXRlIGdyYXBoIgorbXNnc3RyICJadSB2aWVsZSBDb21taXRzIHp1bSBTY2hyZWliZW4gZGVzIEdyYXBoZW4uIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTQ0Cittc2dpZCAidGhlIGNvbW1pdC1ncmFwaCBmaWxlIGhhcyBpbmNvcnJlY3QgY2hlY2tzdW0gYW5kIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICIiCisiRGllIENvbW1pdC1HcmFwaC1EYXRlaSBoYXQgZWluZSBmYWxzY2hlIFByw7xmc3VtbWUgdW5kIGlzdCB3YWhyc2NoZWlubGljaCAiCisiYmVzY2jDpGRpZ3QuIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IE9JRCBvcmRlcjogJXMgdGhlbiAlcyIKK21zZ3N0ciAiQ29tbWl0LUdyYXBoIGhhdCBmZWhsZXJoYWZ0ZSBPSUQtUmVpaGVuZm9sZ2U6ICVzIGRhbm4gJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NjQgY29tbWl0LWdyYXBoLmM6MTk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBmYW5vdXQgdmFsdWU6IGZhbm91dFslZF0gPSAldSAhPSAldSIKK21zZ3N0ciAiQ29tbWl0LUdyYXBoIGhhdCBmZWhsZXJoYWZ0ZW4gRmFub3V0LVdlcnQ6IGZhbm91dFslZF0gPSAldSAhPSAldSIKKworIzogY29tbWl0LWdyYXBoLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gY29tbWl0LWdyYXBoIgorbXNnc3RyICJLb25udGUgQ29tbWl0ICVzIHZvbiBDb21taXQtR3JhcGggbmljaHQgcGFyc2VuLiIKKworIzogY29tbWl0LWdyYXBoLmM6MTk4OQorbXNnaWQgIlZlcmlmeWluZyBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiQ29tbWl0IGluIENvbW1pdC1HcmFwaCDDvGJlcnByw7xmZW4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIG9iamVjdCBkYXRhYmFzZSBmb3IgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisiRmVobGVyIGJlaW0gUGFyc2VuIGRlcyBDb21taXRzICVzIHZvbiBPYmpla3QtRGF0ZW5iYW5rIGbDvHIgQ29tbWl0LUdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDEwCisjLCBjLWZvcm1hdAorbXNnaWQgInJvb3QgdHJlZSBPSUQgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJXMgIT0gJXMiCittc2dzdHIgIiIKKyJPSUQgZGVzIFd1cnplbHZlcnplaWNobmlzc2VzIGbDvHIgQ29tbWl0ICVzIGluIENvbW1pdC1HcmFwaCBpc3QgJXMgIT0gJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBsaXN0IGZvciBjb21taXQgJXMgaXMgdG9vIGxvbmciCittc2dzdHIgIkNvbW1pdC1HcmFwaCBWb3Jnw6RuZ2VyLUxpc3RlIGbDvHIgQ29tbWl0ICVzIGlzdCB6dSBsYW5nIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgZm9yICVzIGlzICVzICE9ICVzIgorbXNnc3RyICJDb21taXQtR3JhcGgtVm9yZ8OkbmdlciBmw7xyICVzIGlzdCAlcyAhPSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjA0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyB0ZXJtaW5hdGVzIGVhcmx5IgorbXNnc3RyICJDb21taXQtR3JhcGggVm9yZ8Okbmdlci1MaXN0ZSBmw7xyIENvbW1pdCAlcyBlbmRldCB6dSBmcsO8aCIKKworIzogY29tbWl0LWdyYXBoLmM6MjA0NworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCi0iXG4iCi0iSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCi0iQ2hlY2tvdXQnLiIKKyJjb21taXQtZ3JhcGggaGFzIGdlbmVyYXRpb24gbnVtYmVyIHplcm8gZm9yIGNvbW1pdCAlcywgYnV0IG5vbi16ZXJvIGVsc2V3aGVyZSIKIG1zZ3N0ciAiIgotIkRpZSBBcmJlaXRza29waWUgaXN0IG5pY2h0IGF1ZiBlaW5lbSBsb2thbGVuIEJyYW5jaC5cbiIKLSJcbiIKLSJXZW5uIFNpZSBhdWYgZWluZW0gQnJhbmNoIGFyYmVpdGVuIG3DtmNodGVuLCBlcnN0ZWxsZW4gU2llIGJpdHRlIGpldHp0IGVpbmVuICIKLSJCcmFuY2ggbWl0IGRlciBBdXN3YWhsIMK7TG9zZ2Vsw7ZzdGUgQXJiZWl0c2tvcGllLVZlcnNpb27Cqy4iCisiQ29tbWl0LUdyYXBoIGhhdCBHZW5lcmF0aW9uc251bW1lciBudWxsIGbDvHIgQ29tbWl0ICVzLCBhYmVyIHNvbnN0IHVuZ2xlaWNoICIKKyJudWxsIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNCBsaWIvY2hlY2tvdXRfb3AudGNsOjUwOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgotbXNnc3RyICJVbWdlc3RlbGx0IGF1ZiDCuyVzwqsuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0dGluZyAnJXMnIHRvICclcycgd2lsbCBsb3NlIHRoZSBmb2xsb3dpbmcgY29tbWl0czoiCi1tc2dzdHIgIlVtc2V0emVuIHZvbiDCuyVzwqsgbmFjaCDCuyVzwqsgd2lyZCBmb2xnZW5kZSBDb21taXRzIHZlcmxpZXJlbjoiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU4Ci1tc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKLW1zZ3N0ciAiIgotIlZlcmxvcmVuZSBDb21taXRzIGvDtm5uZW4gbnVyIG1pdCBncsO2w59lcmVtIEF1ZndhbmQgd2llZGVyaGVyZ2VzdGVsbHQgd2VyZGVuLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldCAnJXMnPyIKLW1zZ3N0ciAiwrslc8KrIHVtc2V0emVuPyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjggbGliL3Rvb2xzX2RsZy50Y2w6MzM2IGxpYi9tZXJnZS50Y2w6MTcwCi1tc2dpZCAiVmlzdWFsaXplIgotbXNnc3RyICJEYXJzdGVsbGVuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUKLW1zZ2lkICJSZXNldCIKLW1zZ3N0ciAiVW1zZXR6ZW4gKFJlc2V0KSIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo2MzYKLSMsIHRjbC1mb3JtYXQKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNTEKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCi0iXG4iCi0iVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKLSJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKLSJcbiIKLSJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKKyJjb21taXQtZ3JhcGggaGFzIG5vbi16ZXJvIGdlbmVyYXRpb24gbnVtYmVyIGZvciBjb21taXQgJXMsIGJ1dCB6ZXJvIGVsc2V3aGVyZSIKIG1zZ3N0ciAiIgotIkxva2FsZXIgQnJhbmNoIGthbm4gbmljaHQgZ2VzZXR6dCB3ZXJkZW4uXG4iCi0iXG4iCi0iRGllc2UgQXJiZWl0c2tvcGllIGlzdCBudXIgdGVpbHdlaXNlIHVtZ2VzdGVsbHQuIERpZSBEYXRlaWVuIHNpbmQga29ycmVrdCAiCi0iYWt0dWFsaXNpZXJ0LCBhYmVyIGVpbmlnZSBpbnRlcm5lIEdpdC1EYXRlaWVuIGtvbm50ZW4gbmljaHQgZ2XDpG5kZXJ0ICIKLSJ3ZXJkZW4uXG4iCi0iXG4iCi0iRGllcyBpc3QgZWluIGludGVybmVyIFByb2dyYW1tZmVobGVyIHZvbiAlcy4gUHJvZ3JhbW0gd2lyZCBqZXR6dCBhYmdlYnJvY2hlbi4iCisiQ29tbWl0LUdyYXBoIGhhdCBHZW5lcmF0aW9uc251bW1lciB1bmdsZWljaCBudWxsIGbDvHIgQ29tbWl0ICVzLCBhYmVyIHNvbnN0ICIKKyJudWxsIgogCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBBZGQgUmVtb3RlIgotbXNnc3RyICIlcyAoJXMpOiBFeHRlcm5lcyBSZXBvc2l0b3J5IGhpbnp1ZsO8Z2VuIgorIzogY29tbWl0LWdyYXBoLmM6MjA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggZ2VuZXJhdGlvbiBmb3IgY29tbWl0ICVzIGlzICV1ICE9ICV1IgorbXNnc3RyICJDb21taXQtR3JhcGggRXJzdGVsbHVuZyBmw7xyIENvbW1pdCAlcyBpc3QgJXUgIT0gJXUiCiAKLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyNQotbXNnaWQgIkFkZCBOZXcgUmVtb3RlIgotbXNnc3RyICJOZXVlcyBleHRlcm5lcyBSZXBvc2l0b3J5IGhpbnp1ZsO8Z2VuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzAgbGliL3Rvb2xzX2RsZy50Y2w6MzcKLW1zZ2lkICJBZGQiCi1tc2dzdHIgIkhpbnp1ZsO8Z2VuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzkKLW1zZ2lkICJSZW1vdGUgRGV0YWlscyIKLW1zZ3N0ciAiRWluemVsaGVpdGVuIGRlcyBleHRlcm5lbiBSZXBvc2l0b3J5IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NDEgbGliL3Rvb2xzX2RsZy50Y2w6NTEgbGliL2JyYW5jaF9jcmVhdGUudGNsOjQ0Ci1tc2dpZCAiTmFtZToiCi1tc2dzdHIgIk5hbWU6IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKLW1zZ2lkICJMb2NhdGlvbjoiCi1tc2dzdHIgIkFkcmVzc2U6IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjAKLW1zZ2lkICJGdXJ0aGVyIEFjdGlvbiIKLW1zZ3N0ciAiV2VpdGVyZSBBa3Rpb24iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MwotbXNnaWQgIkZldGNoIEltbWVkaWF0ZWx5IgotbXNnc3RyICJKZXR6dCBhbmZvcmRlcm4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2OQotbXNnaWQgIkluaXRpYWxpemUgUmVtb3RlIFJlcG9zaXRvcnkgYW5kIFB1c2giCi1tc2dzdHIgIkV4dGVybmVzIFJlcG9zaXRvcnkgaW5pdGlhbGlzaWVyZW4gdW5kIGRhaGluIHZlcnNlbmRlbiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjc1Ci1tc2dpZCAiRG8gTm90aGluZyBFbHNlIE5vdyIKLW1zZ3N0ciAiS2VpbmUgd2VpdGVyZSBBa3Rpb24iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMDAKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgcmVtb3RlIG5hbWUuIgotbXNnc3RyICJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gTmFtZW4gZGVzIGV4dGVybmVuIFJlcG9zaXRvcnkgYW4uIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTEzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCi1tc2dzdHIgIsK7JXPCqyBpc3Qga2VpbiB6dWzDpHNzaWdlciBOYW1lIGVpbmVzIGV4dGVybmVuIFJlcG9zaXRvcnkuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTI0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gSGluenVmw7xnZW4gZGVzIGV4dGVybmVuIFJlcG9zaXRvcnkgwrslc8KrIGF1cyBBZHJlc3NlIMK7JXPCqy4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyB0aGUgJXMiCi1tc2dzdHIgIsK7JXPCqyBhbmZvcmRlcm4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgorIzogY29tbWl0LWdyYXBoLmM6MjA3MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgZGF0ZSBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlPFBSSXVNQVg+ICE9ICU8UFJJdU1BWD4iCiBtc2dzdHIgIiIKLSJJbml0aWFsaXNpZXJlbiBlaW5lcyBleHRlcm5lbiBSZXBvc2l0b3JpZXMgYW4gQWRyZXNzZSDCuyVzwqsgaXN0IG5pY2h0IG3DtmdsaWNoLiIKKyJDb21taXQtRGF0dW0gZsO8ciBDb21taXQgJXMgaW4gQ29tbWl0LUdyYXBoIGlzdCAlPFBSSXVNQVg+ICE9ICU8UFJJdU1BWD4iCiAKLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHVwIHRoZSAlcyAoYXQgJXMpIgotbXNnc3RyICJFaW5yaWNodGVuIHZvbiDCuyVzwqsgYW4gwrslc8KrIgorIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJTcGVpY2hlciB2ZXJicmF1Y2h0IgogCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTcKLW1zZ2lkICJTdGFydGluZy4uLiIKLW1zZ3N0ciAiU3RhcnRlbi4uLiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogRmlsZSBCcm93c2VyIgotbXNnc3RyICIlcyAoJXMpOiBEYXRlaS1Ccm93c2VyIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTMyIGxpYi9icm93c2VyLnRjbDoxNDkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2FkaW5nICVzLi4uIgotbXNnc3RyICIlcyBsYWRlbi4uLiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjE5MwotbXNnaWQgIltVcCBUbyBQYXJlbnRdIgotbXNnc3RyICJbTmFjaCBvYmVuXSIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IEJyb3dzZSBCcmFuY2ggRmlsZXMiCi1tc2dzdHIgIiVzICglcyk6IERhdGVpZW4gZGVzIEJyYW5jaGVzIGR1cmNoYmzDpHR0ZXJuIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MjgyCi1tc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKLW1zZ3N0ciAiRGF0ZWllbiBkZXMgQnJhbmNoZXMgZHVyY2hibMOkdHRlcm4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyODggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MzcKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTI0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTMzCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMTUKLW1zZ2lkICJCcm93c2UiCi1tc2dzdHIgIkJsw6R0dGVybiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI5NyBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNSBsaWIvdG9vbHNfZGxnLnRjbDozMjEKLW1zZ2lkICJSZXZpc2lvbiIKLW1zZ3N0ciAiVmVyc2lvbiIKLQotIzogbGliL2luZGV4LnRjbDo2Ci1tc2dpZCAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIgotbXNnc3RyICJCZXJlaXRzdGVsbHVuZyBrYW5uIG5pY2h0IHdpZWRlciBmcmVpZ2VnZWJlbiB3ZXJkZW4uIgotCi0jOiBsaWIvaW5kZXgudGNsOjMwCi1tc2dpZCAiSW5kZXggRXJyb3IiCi1tc2dzdHIgIkZlaGxlciBpbiBCZXJlaXRzdGVsbHVuZyIKLQotIzogbGliL2luZGV4LnRjbDozMgorIzogY29uZmlnLmM6MTI0CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJVcGRhdGluZyB0aGUgR2l0IGluZGV4IGZhaWxlZC4gIEEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvICIKLSJyZXN5bmNocm9uaXplIGdpdC1ndWkuIgorImV4Y2VlZGVkIG1heGltdW0gaW5jbHVkZSBkZXB0aCAoJWQpIHdoaWxlIGluY2x1ZGluZ1xuIgorIlx0JXNcbiIKKyJmcm9tXG4iCisiXHQlc1xuIgorIlRoaXMgbWlnaHQgYmUgZHVlIHRvIGNpcmN1bGFyIGluY2x1ZGVzLiIKIG1zZ3N0ciAiIgotIkRhcyBBa3R1YWxpc2llcmVuIGRlciBHaXQtQmVyZWl0c3RlbGx1bmcgaXN0IGZlaGxnZXNjaGxhZ2VuLiBFaW5lIGFsbGdlbWVpbmUgIgotIkdpdC1Ba3R1YWxpc2llcnVuZyB3aXJkIGpldHp0IGdlc3RhcnRldCwgdW0gZ2l0LWd1aSB3aWVkZXIgbWl0IGdpdCB6dSAiCi0ic3luY2hyb25pc2llcmVuLiIKKyJNYXhpbWFsZSBJbmNsdWRlLVRpZWZlICglZCkgYmVpbSBFaW5iaW5kZW4gdm9uXG4iCisiXHQlc1xuIgorInZvblxuIgorIlx0JXNcbiIKKyLDvGJlcnNjaHJpdHRlbi5cbiIKKyJEYXMga8O2bm50ZSBkdXJjaCB6aXJrdWxhcmUgSW5jbHVkZXMgZW50c3RhbmRlbiBzZWluLiIKIAotIzogbGliL2luZGV4LnRjbDo0MwotbXNnaWQgIkNvbnRpbnVlIgotbXNnc3RyICJGb3J0c2V0emVuIgorIzogY29uZmlnLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBleHBhbmQgaW5jbHVkZSBwYXRoICclcyciCittc2dzdHIgIktvbm50ZSBJbmNsdWRlLVBmYWQgJyVzJyBuaWNodCBlcndlaXRlcm4uIgogCi0jOiBsaWIvaW5kZXgudGNsOjQ2Ci1tc2dpZCAiVW5sb2NrIEluZGV4IgotbXNnc3RyICJCZXJlaXRzdGVsbHVuZyBmcmVpZ2ViZW4iCisjOiBjb25maWcuYzoxNTEKK21zZ2lkICJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZXMgbXVzdCBjb21lIGZyb20gZmlsZXMiCittc2dzdHIgIlJlbGF0aXZlIEluY2x1ZGVzIHZvbiBLb25maWd1cmF0aW9uZW4gbcO8c3NlbiBhdXMgRGF0ZWllbiBrb21tZW4uIgogCi0jOiBsaWIvaW5kZXgudGNsOjc3IGxpYi9pbmRleC50Y2w6MTQ2IGxpYi9pbmRleC50Y2w6MjIwIGxpYi9pbmRleC50Y2w6NTg3Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk5OQotbXNnaWQgImZpbGVzIgotbXNnc3RyICJEYXRlaWVuIgorIzogY29uZmlnLmM6MTk3Cittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGUgY29uZGl0aW9uYWxzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICIiCisiQmVkaW5ndW5nZW4gZsO8ciBkYXMgRWluYmluZGVuIHZvbiBLb25maWd1cmF0aW9uZW4gYXVzIHJlbGF0aXZlbiBQZmFkZW4gIgorIm3DvHNzZW5cbiIKKyJhdXMgRGF0ZWllbiBrb21tZW4uIgogCi0jOiBsaWIvaW5kZXgudGNsOjMyNgotbXNnaWQgIlVuc3RhZ2luZyBzZWxlY3RlZCBmaWxlcyBmcm9tIGNvbW1pdCIKLW1zZ3N0ciAiR2V3w6RobHRlIERhdGVpZW4gYXVzIGRlciBCZXJlaXRzdGVsbHVuZyBoZXJhdXNuZWhtZW4iCisjOiBjb25maWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlcyIKK21zZ3N0ciAiU2NobMO8c3NlbCBlbnRow6RsdCBrZWluZSBTZWt0aW9uOiAlcyIKIAotIzogbGliL2luZGV4LnRjbDozMzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCi1tc2dzdHIgIkRhdGVpIMK7JXPCqyBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nIGhlcmF1c25laG1lbiIKKyM6IGNvbmZpZy5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiB2YXJpYWJsZSBuYW1lOiAlcyIKK21zZ3N0ciAiU2NobMO8c3NlbCBlbnRow6RsdCBrZWluZW4gVmFyaWFibGVubmFtZW46ICVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjM2OQotbXNnaWQgIlJlYWR5IHRvIGNvbW1pdC4iCi1tc2dzdHIgIkJlcmVpdCB6dW0gQ29tbWl0dGVuLiIKKyM6IGNvbmZpZy5jOjQwNiBzZXF1ZW5jZXIuYzoyNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgU2NobMO8c3NlbDogJXMiCiAKLSM6IGxpYi9pbmRleC50Y2w6Mzc4Ci1tc2dpZCAiQWRkaW5nIHNlbGVjdGVkIGZpbGVzIgotbXNnc3RyICJHZXfDpGhsdGUgRGF0ZWllbiBoaW56dWbDvGdlbiIKKyM6IGNvbmZpZy5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBTY2hsw7xzc2VsIChuZXVlIFplaWxlKTogJXMiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzgyCi0jLCB0Y2wtZm9ybWF0CisjOiBjb25maWcuYzo0NDggY29uZmlnLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGNvbmZpZyBwYXJhbWV0ZXI6ICVzIgorbXNnc3RyICJGZWhsZXJoYWZ0ZXIgS29uZmlndXJhdGlvbnNwYXJhbWV0ZXI6ICVzIgorCisjOiBjb25maWcuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgZm9ybWF0IGluICVzIgorbXNnc3RyICJGZWhsZXJoYWZ0ZXMgRm9ybWF0IGluICVzIgorCisjOiBjb25maWcuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGJsb2IgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgS29uZmlndXJhdGlvbnN6ZWlsZSAlZCBpbiBCbG9iICVzIgorCisjOiBjb25maWcuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGZpbGUgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgS29uZmlndXJhdGlvbnN6ZWlsZSAlZCBpbiBEYXRlaSAlcyIKKworIzogY29uZmlnLmM6ODI5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiVW5nw7xsdGlnZSBLb25maWd1cmF0aW9uc3plaWxlICVkIGluIFN0YW5kYXJkLUVpbmdhYmUiCisKKyM6IGNvbmZpZy5jOjgzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3VibW9kdWxlLWJsb2IgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgS29uZmlndXJhdGlvbnN6ZWlsZSAlZCBpbiBTdWJtb2R1bC1CbG9iICVzIgorCisjOiBjb25maWcuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBLb25maWd1cmF0aW9uc3plaWxlICVkIGluIEtvbW1hbmRvemVpbGUgJXMiCisKKyM6IGNvbmZpZy5jOjg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgS29uZmlndXJhdGlvbnN6ZWlsZSAlZCBpbiAlcyIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAib3V0IG9mIHJhbmdlIgorbXNnc3RyICJBdcOfZXJoYWxiIGRlcyBCZXJlaWNocyIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAiaW52YWxpZCB1bml0IgorbXNnc3RyICJVbmfDvGx0aWdlIEVpbmhlaXQiCisKKyM6IGNvbmZpZy5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIG51bWVyaXNjaGVyIFdlcnQgJyVzJyBmw7xyIEtvbmZpZ3VyYXRpb24gJyVzJzogJXMiCisKKyM6IGNvbmZpZy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBibG9iICVzOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgbnVtZXJpc2NoZXIgV2VydCAnJXMnIGbDvHIgS29uZmlndXJhdGlvbiAnJXMnIGluIEJsb2IgJXM6ICVzIgorCisjOiBjb25maWcuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIgorbXNnc3RyICIiCisiVW5nw7xsdGlnZXIgbnVtZXJpc2NoZXIgV2VydCAnJXMnIGbDvHIgS29uZmlndXJhdGlvbiAnJXMnIGluIERhdGVpICVzOiAlcyIKKworIzogY29uZmlnLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogJXMiCittc2dzdHIgIiIKKyJVbmfDvGx0aWdlciBudW1lcmlzY2hlciBXZXJ0ICclcycgZsO8ciBLb25maWd1cmF0aW9uICclcycgaW4gU3RhbmRhcmQtRWluZ2FiZTogIgorIiVzIgorCisjOiBjb25maWcuYzoxMDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN1Ym1vZHVsZS1ibG9iICVzOiAlcyIKK21zZ3N0ciAiIgorIlVuZ8O8bHRpZ2VyIG51bWVyaXNjaGVyIFdlcnQgJyVzJyBmw7xyIEtvbmZpZ3VyYXRpb24gJyVzJyBpbiBTdWJtb2R1bC1CbG9iICVzOiAiCisiJXMiCisKKyM6IGNvbmZpZy5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gY29tbWFuZCBsaW5lICVzOiAlcyIKK21zZ3N0ciAiIgorIlVuZ8O8bHRpZ2VyIG51bWVyaXNjaGVyIFdlcnQgJyVzJyBmw7xyIEtvbmZpZ3VyYXRpb24gJyVzJyBpbiBCZWZlaGxzemVpbGUgJXM6ICIKKyIlcyIKKworIzogY29uZmlnLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIG51bWVyaXNjaGVyIFdlcnQgJyVzJyBmw7xyIEtvbmZpZ3VyYXRpb24gJyVzJyBpbiAlczogJXMiCisKKyM6IGNvbmZpZy5jOjExMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJ3ZWl0ZXJuIGRlcyBOdXR6ZXJ2ZXJ6ZWljaG5pc3NlcyBpbjogJyVzJyIKKworIzogY29uZmlnLmM6MTExNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZvciAnJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJyVzJyBpc3Qga2VpbiBnw7xsdGlnZXIgWmVpdHN0ZW1wZWwgZsO8ciAnJXMnIgorCisjOiBjb25maWcuYzoxMjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYnJldiBsZW5ndGggb3V0IG9mIHJhbmdlOiAlZCIKK21zZ3N0ciAiTMOkbmdlIGbDvHIgQWJrw7xyenVuZyB2b24gQ29tbWl0LUlEcyBhdcOfZXJoYWxiIGRlcyBCZXJlaWNoczogJWQiCisKKyM6IGNvbmZpZy5jOjEyMjIgY29uZmlnLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAidW5nw7xsdGlnZXIgemxpYiBLb21wcmltaWVydW5nc2dyYWQgJWQiCisKKyM6IGNvbmZpZy5jOjEzMjUKK21zZ2lkICJjb3JlLmNvbW1lbnRDaGFyIHNob3VsZCBvbmx5IGJlIG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgImNvcmUuY29tbWVudENoYXIgc29sbHRlIG51ciBlaW4gWmVpY2hlbiBzZWluIgorCisjOiBjb25maWcuYzoxMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgTW9kdXMgZsO8ciBPYmpla3RlcnN0ZWxsdW5nOiAlcyIKKworIzogY29uZmlnLmM6MTQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBXZXJ0IGbDvHIgJXMuIgorCisjOiBjb25maWcuYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBXZXJ0IGbDvHIgJXM6ICVzIgorCisjOiBjb25maWcuYzoxNDU3Cittc2dpZCAibXVzdCBiZSBvbmUgb2Ygbm90aGluZywgbWF0Y2hpbmcsIHNpbXBsZSwgdXBzdHJlYW0gb3IgY3VycmVudCIKK21zZ3N0ciAiIgorIk11c3MgZWluZXIgdm9uIGRpZXNlbiBzZWluOiBub3RoaW5nLCBtYXRjaGluZywgc2ltcGxlLCB1cHN0cmVhbSwgY3VycmVudCIKKworIzogY29uZmlnLmM6MTUxOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgInVuZ8O8bHRpZ2VyIEtvbXByaW1pZXJ1bmdzZ3JhZCAoJWQpIGbDvHIgUGFrZXRpZXJ1bmciCisKKyM6IGNvbmZpZy5jOjE2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvYWQgY29uZmlnIGJsb2Igb2JqZWN0ICclcyciCittc2dzdHIgIktvbm50ZSBCbG9iLU9iamVrdCAnJXMnIGbDvHIgS29uZmlndXJhdGlvbiBuaWNodCBsYWRlbi4iCisKKyM6IGNvbmZpZy5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBibG9iIgorbXNnc3RyICJSZWZlcmVueiAnJXMnIHplaWd0IGF1ZiBrZWluZW4gQmxvYi4iCisKKyM6IGNvbmZpZy5jOjE2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgY29uZmlnIGJsb2IgJyVzJyIKK21zZ3N0ciAiS29ubnRlIEJsb2IgJyVzJyBmw7xyIEtvbmZpZ3VyYXRpb24gbmljaHQgYXVmbMO2c2VuLiIKKworIzogY29uZmlnLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJXMiCittc2dzdHIgIkZlaGxlciBiZWltIFBhcnNlbiB2b24gJXMuIgorCisjOiBjb25maWcuYzoxNzQzCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIiIKKyJLb25udGUgZGllIMO8YmVyIGRpZSBCZWZlaGxzemVpbGUgYW5nZWdlYmVuZSBLb25maWd1cmF0aW9uIG5pY2h0IHBhcnNlbi4iCisKKyM6IGNvbmZpZy5jOjIwOTcKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgIiIKKyJFcyB0cmF0IGVpbiB1bmJla2FubnRlciBGZWhsZXIgYmVpbSBMZXNlbiBkZXIgS29uZmlndXJhdGlvbnNkYXRlaWVuIGF1Zi4iCisKKyM6IGNvbmZpZy5jOjIyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgJXM6ICclcyciCisKKyM6IGNvbmZpZy5jOjIzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIHZhbHVlICclZCcgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwIgorbXNnc3RyICIiCisiRGVyIFdlcnQgJyVkJyB2b24gc3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIHNvbGx0ZSB6d2lzY2hlbiAwIHVuZCAxMDAgIgorImxpZWdlbi4iCisKKyM6IGNvbmZpZy5jOjIzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICIiCisiS29ubnRlIFdlcnQgJyVzJyBhdXMgZGVyIMO8YmVyIGRpZSBCZWZlaGxzemVpbGUgYW5nZWdlYmVuZW4gS29uZmlndXJhdGlvblxuIgorIm5pY2h0IHBhcnNlbi4iCisKKyM6IGNvbmZpZy5jOjIzNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICJ1bmfDvGx0aWdlIEtvbmZpZ3VyYXRpb25zdmFyaWFibGUgJyVzJyBpbiBEYXRlaSAnJXMnIGJlaSBaZWlsZSAlZCIKKworIzogY29uZmlnLmM6MjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZSAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlciBTZWt0aW9uc25hbWUgJyVzJyIKKworIzogY29uZmlnLmM6MjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbXVsdGlwbGUgdmFsdWVzIgorbXNnc3RyICIlcyBoYXQgbWVocmVyZSBXZXJ0ZSIKKworIzogY29uZmlnLmM6MjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAiS29ubnRlIG5ldWUgS29uZmlndXJhdGlvbnNkYXRlaSAnJXMnIG5pY2h0IHNjaHJlaWJlbi4iCisKKyM6IGNvbmZpZy5jOjI3NTQgY29uZmlnLmM6MzA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAiS29ubnRlIEtvbmZpZ3VyYXRpb25zZGF0ZWkgJyVzJyBuaWNodCBzcGVycmVuLiIKKworIzogY29uZmlnLmM6Mjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nICVzIgorbXNnc3RyICLDlmZmbmUgJXMiCisKKyM6IGNvbmZpZy5jOjI4MDAgYnVpbHRpbi9jb25maWcuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgTXVzdGVyOiAlcyIKKworIzogY29uZmlnLmM6MjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICJVbmfDvGx0aWdlIEtvbmZpZ3VyYXRpb25zZGF0ZWkgJXMiCisKKyM6IGNvbmZpZy5jOjI4MzggY29uZmlnLmM6MzA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJmc3RhdCBvbiAlcyBmYWlsZWQiCittc2dzdHIgImZzdGF0IGF1ZiAlcyBmZWhsZ2VzY2hsYWdlbiIKKworIzogY29uZmlnLmM6Mjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAnJXMnIgorbXNnc3RyICJtbWFwIGbDvHIgJyVzJyBmZWhsZ2VzY2hsYWdlbiIKKworIzogY29uZmlnLmM6Mjg1OCBjb25maWcuYzozMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNobW9kIG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiY2htb2QgYXVmICVzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBjb25maWcuYzoyOTQzIGNvbmZpZy5jOjMxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICJLb25udGUgS29uZmlndXJhdGlvbnNkYXRlaSAlcyBuaWNodCBzY2hyZWliZW4uIgorCisjOiBjb25maWcuYzoyOTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgJyVzJyB0byAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCB6dSAnJXMnIHNldHplbi4iCisKKyM6IGNvbmZpZy5jOjI5NzkgYnVpbHRpbi9yZW1vdGUuYzo2NTUgYnVpbHRpbi9yZW1vdGUuYzo4NDkgYnVpbHRpbi9yZW1vdGUuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVuc2V0ICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGF1ZmhlYmVuLiIKKworIzogY29uZmlnLmM6MzA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZTogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFNla3Rpb25zbmFtZTogJXMiCisKKyM6IGNvbmZpZy5jOjMyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyB2YWx1ZSBmb3IgJyVzJyIKK21zZ3N0ciAiRmVobGVuZGVyIFdlcnQgZsO8ciAnJXMnIgorCisjOiBjb25uZWN0LmM6NjEKK21zZ2lkICJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVwb24gaW5pdGlhbCBjb250YWN0IgorbXNnc3RyICJEaWUgR2VnZW5zZWl0ZSBoYXQgbmFjaCBkZW0gZXJzdGVuIEtvbnRha3QgYWJnZWJyb2NoZW4uIgorCisjOiBjb25uZWN0LmM6NjMKK21zZ2lkICIiCisiQ291bGQgbm90IHJlYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS5cbiIKKyJcbiIKKyJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHNcbiIKKyJhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLiIKK21zZ3N0ciAiIgorIktvbm50ZSBuaWNodCB2b20gUmVtb3RlLVJlcG9zaXRvcnkgbGVzZW4uXG4iCisiXG4iCisiQml0dGUgc3RlbGxlbiBTaWUgc2ljaGVyLCBkYXNzIGRpZSBrb3JyZWt0ZW4gWnVncmlmZnNiZXJlY2h0aWd1bmdlbiAiCisiYmVzdGVoZW5cbiIKKyJ1bmQgZGFzIFJlcG9zaXRvcnkgZXhpc3RpZXJ0LiIKKworIzogY29ubmVjdC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciBkb2Vzbid0IHN1cHBvcnQgJyVzJyIKK21zZ3N0ciAiRGVyIFNlcnZlciB1bnRlcnN0w7x0enQga2VpbiAnJXMnLiIKKworIzogY29ubmVjdC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IGZlYXR1cmUgJyVzJyIKK21zZ3N0ciAiRGVyIFNlcnZlciB1bnRlcnN0w7x0enQgZGFzIEZlYXR1cmUgJyVzJyBuaWNodC4iCisKKyM6IGNvbm5lY3QuYzoxMTQKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciBjYXBhYmlsaXRpZXMiCittc2dzdHIgIkVyd2FydGV0ZSBGbHVzaCBuYWNoIEbDpGhpZ2tlaXRlbi4iCisKKyM6IGNvbm5lY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgY2FwYWJpbGl0aWVzIGFmdGVyIGZpcnN0IGxpbmUgJyVzJyIKK21zZ3N0ciAiSWdub3JpZXJlIEbDpGhpZ2tlaXRlbiBuYWNoIGRlciBlcnN0ZW4gWmVpbGUgJyVzJy4iCisKKyM6IGNvbm5lY3QuYzoyNTIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCBjYXBhYmlsaXRpZXNee30iCittc2dzdHIgIlByb3Rva29sbGZlaGxlcjogdW5lcndhcnRldGVzIGNhcGFiaWxpdGllc157fSIKKworIzogY29ubmVjdC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogZXhwZWN0ZWQgc2hhbGxvdyBzaGEtMSwgZ290ICclcyciCittc2dzdHIgIlByb3Rva29sbGZlaGxlcjogc2hhbGxvdyBTSEEtMSBlcndhcnRldCwgJyVzJyBiZWtvbW1lbiIKKworIzogY29ubmVjdC5jOjI3NQorbXNnaWQgInJlcG9zaXRvcnkgb24gdGhlIG90aGVyIGVuZCBjYW5ub3QgYmUgc2hhbGxvdyIKK21zZ3N0ciAiIgorIlJlcG9zaXRvcnkgYXVmIGRlciBHZWdlbnNlaXRlIGthbm4ga2VpbmUgdW52b2xsc3TDpG5kaWdlIEhpc3RvcmllIChzaGFsbG93KSAiCisiZW50aGFsdGVuIgorCisjOiBjb25uZWN0LmM6MzEzCittc2dpZCAiaW52YWxpZCBwYWNrZXQiCittc2dzdHIgIlVuZ8O8bHRpZ2VzIFBha2V0LiIKKworIzogY29ubmVjdC5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCAnJXMnIgorbXNnc3RyICJQcm90b2tvbGxmZWhsZXI6IHVuZXJ3YXJ0ZXRlcyAnJXMnIgorCisjOiBjb25uZWN0LmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbHMtcmVmcyByZXNwb25zZTogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgbHMtcmVmcyBBbnR3b3J0OiAlcyIKKworIzogY29ubmVjdC5jOjQ0NQorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIHJlZiBsaXN0aW5nIgorbXNnc3RyICJFcndhcnRldGUgRmx1c2ggbmFjaCBBdWZsaXN0dW5nIGRlciBSZWZlcmVuemVuLiIKKworIzogY29ubmVjdC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCAnJXMnIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIlByb3Rva29sbCAnJXMnIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0LiIKKworIzogY29ubmVjdC5jOjU5NQorbXNnaWQgInVuYWJsZSB0byBzZXQgU09fS0VFUEFMSVZFIG9uIHNvY2tldCIKK21zZ3N0ciAiS2FubiBTT19LRUVQQUxJVkUgYmVpIFNvY2tldCBuaWNodCBzZXR6ZW4uIgorCisjOiBjb25uZWN0LmM6NjM1IGNvbm5lY3QuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9va2luZyB1cCAlcyAuLi4gIgorbXNnc3RyICJTdWNoZSBuYWNoICVzIC4uLiIKKworIzogY29ubmVjdC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCAlcyAocG9ydCAlcykgKCVzKSIKK21zZ3N0ciAiRmVobGVyIGJlaSBTdWNoZSBuYWNoICVzIChQb3J0ICVzKSAoJXMpLiIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiTG9va2luZyB1cCAlcyAuLi4gIgorIzogY29ubmVjdC5jOjY0MyBjb25uZWN0LmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkb25lLlxuIgorIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCittc2dzdHIgIiIKKyJGZXJ0aWcuXG4iCisiVmVyYmluZGUgbmFjaCAlcyAoUG9ydCAlcykgLi4uICIKKworIzogY29ubmVjdC5jOjY2NSBjb25uZWN0LmM6NzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gY29ubmVjdCB0byAlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIktvbm50ZSBuaWNodCBuYWNoICVzIHZlcmJpbmRlbjpcbiIKKyIlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKKyM6IGNvbm5lY3QuYzo2NzEgY29ubmVjdC5jOjc0OAorbXNnaWQgImRvbmUuIgorbXNnc3RyICJGZXJ0aWcuIgorCisjOiBjb25uZWN0LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzICglcykiCittc2dzdHIgIkZlaGxlciBiZWkgZGVyIFN1Y2hlIG5hY2ggJXMgKCVzKSIKKworIzogY29ubmVjdC5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHBvcnQgJXMiCittc2dzdHIgIlVuYmVrYW5udGVyIFBvcnQgJXMiCisKKyM6IGNvbm5lY3QuYzo4NDUgY29ubmVjdC5jOjExNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBob3N0bmFtZSAnJXMnIGJsb2NrZWQiCittc2dzdHIgIk1lcmt3w7xyZGlnZW4gSG9zdG5hbWVuICclcycgYmxvY2tpZXJ0LiIKKworIzogY29ubmVjdC5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBvcnQgJyVzJyBibG9ja2VkIgorbXNnc3RyICJNZXJrd8O8cmRpZ2VuIFBvcnQgJyVzJyBibG9ja2llcnQuIgorCisjOiBjb25uZWN0LmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGFydCBwcm94eSAlcyIKK21zZ3N0ciAiS2FubiBQcm94eSAlcyBuaWNodCBzdGFydGVuLiIKKworIzogY29ubmVjdC5jOjkyOAorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkOyBzZWUgJ2dpdCBoZWxwIHB1bGwnIGZvciB2YWxpZCB1cmwgc3ludGF4IgorbXNnc3RyICIiCisiS2VpbiBQZmFkIGFuZ2VnZWJlbjsgc2llaGUgJ2dpdCBoZWxwIHB1bGwnIGbDvHIgZWluZSBnw7xsdGlnZSBVUkwtU3ludGF4LiIKKworIzogY29ubmVjdC5jOjExMjMKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IC00IgorbXNnc3RyICJTU0gtVmFyaWFudGUgJ3NpbXBsZScgdW50ZXJzdMO8dHp0IGtlaW4gLTQuIgorCisjOiBjb25uZWN0LmM6MTEzNQorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiCittc2dzdHIgIlNTSC1WYXJpYW50ZSAnc2ltcGxlJyB1bnRlcnN0w7x0enQga2VpbiAtNi4iCisKKyM6IGNvbm5lY3QuYzoxMTUyCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIHBvcnQiCittc2dzdHIgIlNTSC1WYXJpYW50ZSAnc2ltcGxlJyB1bnRlcnN0w7x0enQgbmljaHQgZGFzIFNldHplbiBlaW5lcyBQb3J0cy4iCisKKyM6IGNvbm5lY3QuYzoxMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcGF0aG5hbWUgJyVzJyBibG9ja2VkIgorbXNnc3RyICJNZXJrd8O8cmRpZ2VuIFBmYWRuYW1lbiAnJXMnIGJsb2NraWVydC4iCisKKyM6IGNvbm5lY3QuYzoxMzExCittc2dpZCAidW5hYmxlIHRvIGZvcmsiCittc2dzdHIgIkthbm4gUHJvemVzcyBuaWNodCBzdGFydGVuLiIKKworIzogY29ubmVjdGVkLmM6OTggYnVpbHRpbi9mc2NrLmM6MjA4IGJ1aWx0aW4vcHJ1bmUuYzo0MworbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAiUHLDvGZlIEtvbm5la3Rpdml0w6R0IgorCisjOiBjb25uZWN0ZWQuYzoxMTAKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICJLb25udGUgJ2dpdCByZXYtbGlzdCcgbmljaHQgYXVzZsO8aHJlbiIKKworIzogY29ubmVjdGVkLmM6MTMwCittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0IgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gbmFjaCByZXYtbGlzdCIKKworIzogY29ubmVjdGVkLmM6MTM3Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgIkZlaGxlciBiZWltIFNjaGxpZcOfZW4gdm9uIHJldi1saXN0J3MgU3RhbmRhcmQtRWluZ2FiZSIKKworIzogY29udmVydC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIgorbXNnc3RyICJVbmVybGF1YnRlIGNybGZfYWN0aW9uICVkIgorCisjOiBjb252ZXJ0LmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNSTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMiCittc2dzdHIgIkNSTEYgd8O8cmRlIGluICVzIGR1cmNoIExGIGVyc2V0enQgd2VyZGVuLiIKKworIzogY29udmVydC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJDUkxGIHdpcmQgaW4gJXMgZHVyY2ggTEYgZXJzZXR6dC5cbiIKKyJEaWUgRGF0ZWkgd2lyZCBpaHJlIHVyc3Byw7xuZ2xpY2hlbiBaZWlsZW5lbmRlbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgIgorImJlaGFsdGVuLiIKKworIzogY29udmVydC5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIgorbXNnc3RyICJMRiB3w7xyZGUgaW4gJXMgZHVyY2ggQ1JMRiBlcnNldHp0IHdlcmRlbi4iCisKKyM6IGNvbnZlcnQuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiTEYgd2lyZCBpbiAlcyBkdXJjaCBDUkxGIGVyc2V0enQuXG4iCisiRGllIERhdGVpIHdpcmQgaWhyZSB1cnNwcsO8bmdsaWNoZW4gWmVpbGVuZW5kZW4gaW0gQXJiZWl0c3ZlcnplaWNobmlzICIKKyJiZWhhbHRlbi4iCisKKyM6IGNvbnZlcnQuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHByb2hpYml0ZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICJCT00gaXN0IGluICclcycgdW56dWzDpHNzaWcsIHdlbm4gYWxzICVzIGNvZGllcnQuIgorCisjOiBjb252ZXJ0LmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lLipzIGFzICIKKyJ3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisiRGllIERhdGVpICclcycgZW50aMOkbHQgZWluIEJ5dGUtT3JkZXItTWFyayAoQk9NKS4gQml0dGUgYmVudXR6ZW4gU2llXG4iCisiVVRGLSUuKnMgYWxzIENvZGllcnVuZyBpbSBBcmJlaXRzdmVyemVpY2huaXMuIgorCisjOiBjb252ZXJ0LmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyByZXF1aXJlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIkJPTSBpc3QgZXJmb3JkZXJsaWNoIGluICclcycsIHdlbm4gYWxzICVzIGNvZGllcnQuIgorCisjOiBjb252ZXJ0LmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGlzIG1pc3NpbmcgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSVzQkUgb3IgVVRGLSIKKyIlc0xFIChkZXBlbmRpbmcgb24gdGhlIGJ5dGUgb3JkZXIpIGFzIHdvcmtpbmctdHJlZS1lbmNvZGluZy4iCittc2dzdHIgIiIKKyJEZXIgRGF0ZWkgJyVzJyBmZWhsdCBlaW4gQnl0ZS1PcmRlci1NYXJrIChCT00pLiBCaXR0ZSBiZW51dHplbiBTaWUgVVRGLSVzQkVcbiIKKyJvZGVyIFVURi0lc0xFIChhYmjDpG5naWcgdm9uIGRlciBCeXRlLVJlaWhlbmZvbGdlKSBhbHMgQ29kaWVydW5nIGltXG4iCisiQXJiZWl0c3ZlcnplaWNobmlzLiIKKworIzogY29udmVydC5jOjQxOSBjb252ZXJ0LmM6NDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBlbmNvZGUgJyVzJyBmcm9tICVzIHRvICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBDb2RpZXJlbiB2b24gJyVzJyB2b24gJXMgbmFjaCAlcy4iCisKKyM6IGNvbnZlcnQuYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW5jb2RpbmcgJyVzJyBmcm9tICVzIHRvICVzIGFuZCBiYWNrIGlzIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiRGllIENvZGllcnVuZyAnJXMnIHZvbiAlcyBuYWNoICVzIHVuZCB6dXLDvGNrIGlzdCBuaWNodCBkYXNzZWxiZS4iCisKKyM6IGNvbnZlcnQuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgdG8gcnVuIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICJLYW5uIGV4dGVybmVuIEZpbHRlciAnJXMnIG5pY2h0IHN0YXJ0ZW4uIgorCisjOiBjb252ZXJ0LmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmZWVkIHRoZSBpbnB1dCB0byBleHRlcm5hbCBmaWx0ZXIgJyVzJyIKK21zZ3N0ciAiS2FubiBFaW5nYWJlbiBuaWNodCBhbiBleHRlcm5lbiBGaWx0ZXIgJyVzJyDDvGJlcmdlYmVuLiIKKworIzogY29udmVydC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQgJWQiCittc2dzdHIgIkV4dGVybmVyIEZpbHRlciAnJXMnIGZlaGxnZXNjaGxhZ2VuICVkIgorCisjOiBjb252ZXJ0LmM6NzMwIGNvbnZlcnQuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBmcm9tIGV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiTGVzZW4gdm9uIGV4dGVybmVtIEZpbHRlciAnJXMnIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogY29udmVydC5jOjczNiBjb252ZXJ0LmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiRXh0ZXJuZXIgRmlsdGVyICclcycgZmVobGdlc2NobGFnZW4uIgorCisjOiBjb252ZXJ0LmM6ODM5Cittc2dpZCAidW5leHBlY3RlZCBmaWx0ZXIgdHlwZSIKK21zZ3N0ciAiVW5lcndhcnRldGUgRmlsdGVyYXJ0LiIKKworIzogY29udmVydC5jOjg1MAorbXNnaWQgInBhdGggbmFtZSB0b28gbG9uZyBmb3IgZXh0ZXJuYWwgZmlsdGVyIgorbXNnc3RyICJQZmFkbmFtZSB6dSBsYW5nIGbDvHIgZXh0ZXJuZW4gRmlsdGVyLiIKKworIzogY29udmVydC5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXh0ZXJuYWwgZmlsdGVyICclcycgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGFsdGhvdWdoIG5vdCBhbGwgcGF0aHMgaGF2ZSAiCisiYmVlbiBmaWx0ZXJlZCIKK21zZ3N0ciAiIgorIkV4dGVybmVyIEZpbHRlciAnJXMnIG5pY2h0IG1laHIgdmVyZsO8Z2Jhci4gTmljaHQgYWxsZSBQZmFkZSB3dXJkZW4gZ2VmaWx0ZXJ0LiIKKworIzogY29udmVydC5jOjEyMjMKK21zZ2lkICJ0cnVlL2ZhbHNlIGFyZSBubyB2YWxpZCB3b3JraW5nLXRyZWUtZW5jb2RpbmdzIgorbXNnc3RyICJ0cnVlL2ZhbHNlIHNpbmQga2VpbmUgZ8O8bHRpZ2VuIENvZGllcnVuZ2VuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcy4iCisKKyM6IGNvbnZlcnQuYzoxNDExIGNvbnZlcnQuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIiVzOiBjbGVhbi1GaWx0ZXIgJyVzJyBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGNvbnZlcnQuYzoxNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBzbXVkZ2UgZmlsdGVyICVzIGZhaWxlZCIKK21zZ3N0ciAiJXM6IHNtdWRnZS1GaWx0ZXIgJyVzJyBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGRhdGUuYzoxMzgKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICJpbiBkZXIgWnVrdW5mdCIKKworIzogZGF0ZS5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gInZvciAlPFBSSXVNQVg+IFNla3VuZGUiCittc2dzdHJbMV0gInZvciAlPFBSSXVNQVg+IFNla3VuZGVuIgorCisjOiBkYXRlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbWludXRlIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAidm9yICU8UFJJdU1BWD4gTWludXRlIgorbXNnc3RyWzFdICJ2b3IgJTxQUkl1TUFYPiBNaW51dGVuIgorCisjOiBkYXRlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gaG91cnMgYWdvIgorbXNnc3RyWzBdICJ2b3IgJTxQUkl1TUFYPiBTdHVuZGUiCittc2dzdHJbMV0gInZvciAlPFBSSXVNQVg+IFN0dW5kZW4iCisKKyM6IGRhdGUuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IGRheXMgYWdvIgorbXNnc3RyWzBdICJ2b3IgJTxQUkl1TUFYPiBUYWciCittc2dzdHJbMV0gInZvciAlPFBSSXVNQVg+IFRhZ2VuIgorCisjOiBkYXRlLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gd2Vla3MgYWdvIgorbXNnc3RyWzBdICJ2b3IgJTxQUkl1TUFYPiBXb2NoZSIKK21zZ3N0clsxXSAidm9yICU8UFJJdU1BWD4gV29jaGVuIgorCisjOiBkYXRlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gInZvciAlPFBSSXVNQVg+IE1vbmF0IgorbXNnc3RyWzFdICJ2b3IgJTxQUkl1TUFYPiBNb25hdGVuIgorCisjOiBkYXRlLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4geWVhciIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyIKK21zZ3N0clswXSAidm9yICU8UFJJdU1BWD4gSmFociIKK21zZ3N0clsxXSAidm9yICU8UFJJdU1BWD4gSmFocmVuIgorCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVzLCB1bmQgJTxQUkl1TUFYPiBNb25hdCIKK21zZ3N0clsxXSAiJXMsIHVuZCAlPFBSSXVNQVg+IE1vbmF0ZW4iCisKKyM6IGRhdGUuYzoxOTcgZGF0ZS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIGFnbyIKK21zZ3N0clswXSAidm9yICU8UFJJdU1BWD4gSmFociIKK21zZ3N0clsxXSAidm9yICU8UFJJdU1BWD4gSmFocmVuIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MjcyCittc2dpZCAiUHJvcGFnYXRpbmcgaXNsYW5kIG1hcmtzIgorbXNnc3RyICJFcnpldWdlIERlbHRhLUlzbGFuZCBNYXJraWVydW5nZW4iCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHRyZWUgb2JqZWN0ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlcyBUcmVlLU9iamVrdCAlcy4iCisKKyM6IGRlbHRhLWlzbGFuZHMuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgaXNsYW5kIHJlZ2V4IGZvciAnJXMnOiAlcyIKK21zZ3N0ciAiIgorIkZlaGxlciBiZWltIExhZGVuIGRlcyByZWd1bMOkcmVuIEF1c2RydWNrcyBkZXMgRGVsdGEtSXNsYW5kIGbDvHIgJyVzJzogJXMiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaXNsYW5kIHJlZ2V4IGZyb20gY29uZmlnIGhhcyB0b28gbWFueSBjYXB0dXJlIGdyb3VwcyAobWF4PSVkKSIKK21zZ3N0ciAiIgorIlJlZ3Vsw6RyZXIgQXVzZHJ1Y2sgZGVzIERlbHRhLUlzbGFuZCBhdXMgS29uZmlndXJhdGlvbiBoYXQgenVcbiIKKyJ2aWVsZSBDYXB0dXJlLUdydXBwZW4gKG1heGltYWwgJWQpLiIKKworIzogZGVsdGEtaXNsYW5kcy5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJrZWQgJWQgaXNsYW5kcywgZG9uZS5cbiIKK21zZ3N0ciAiJWQgRGVsdGEtSXNsYW5kcyBtYXJraWVydCwgZmVydGlnLlxuIgorCisjOiBkaWZmY29yZS1vcmRlci5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9yZGVyZmlsZSAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZXIgUmVpaGVuZm9sZ2VkYXRlaSAnJXMnLiIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTQzCittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIkbDvGhyZSBFcmtlbm51bmcgZsO8ciB1bmdlbmF1ZSBVbWJlbmVubnVuZyBhdXMiCisKKyM6IGRpZmYtbm8taW5kZXguYzoyMzgKK21zZ2lkICJnaXQgZGlmZiAtLW5vLWluZGV4IFs8b3B0aW9ucz5dIDxwYXRoPiA8cGF0aD4iCittc2dzdHIgImdpdCBkaWZmIC0tbm8taW5kZXggWzxPcHRpb25lbj5dIDxQZmFkPiA8UGZhZD4iCisKKyM6IGRpZmYtbm8taW5kZXguYzoyNjMKK21zZ2lkICIiCisiTm90IGEgZ2l0IHJlcG9zaXRvcnkuIFVzZSAtLW5vLWluZGV4IHRvIGNvbXBhcmUgdHdvIHBhdGhzIG91dHNpZGUgYSB3b3JraW5nICIKKyJ0cmVlIgorbXNnc3RyICIiCisiS2VpbiBHaXQtUmVwb3NpdG9yeS4gTnV0emVuIFNpZSAtLW5vLWluZGV4LCB1bSB6d2VpIFBmYWRlIGF1w59lcmhhbGIgZGVzICIKKyJBcmJlaXRzdmVyemVpY2huaXNzZXMgenUgdmVyZ2xlaWNoZW4uIgorCisjOiBkaWZmLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiIgorIiAgRmVobGVyIGJlaW0gUGFyc2VuIGRlcyBhYmdlc2Nobml0dGVuZW4gXCJkaXJzdGF0XCIgUHJvemVudHNhdHplcyAnJXMnXG4iCisKKyM6IGRpZmYuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclcydcbiIKK21zZ3N0ciAiICBVbmJla2FubnRlciBcImRpcnN0YXRcIiBQYXJhbWV0ZXIgJyVzJ1xuIgorCisjOiBkaWZmLmM6Mjk2Cittc2dpZCAiIgorImNvbG9yIG1vdmVkIHNldHRpbmcgbXVzdCBiZSBvbmUgb2YgJ25vJywgJ2RlZmF1bHQnLCAnYmxvY2tzJywgJ3plYnJhJywgIgorIidkaW1tZWQtemVicmEnLCAncGxhaW4nIgorbXNnc3RyICIiCisiXCJjb2xvciBtb3ZlZFwiLUVpbnN0ZWxsdW5nIG11c3MgZWluZXMgdm9uIGRpZXNlbiBzZWluOiAnbm8nLCAnZGVmYXVsdCcsICIKKyInYmxvY2tzJywgJ3plYnJhJywgJ2RpbW1lZF96ZWJyYScsICdwbGFpbiciCisKKyM6IGRpZmYuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVua25vd24gY29sb3ItbW92ZWQtd3MgbW9kZSAnJXMnLCBwb3NzaWJsZSB2YWx1ZXMgYXJlICdpZ25vcmUtc3BhY2UtY2hhbmdlJywgIgorIidpZ25vcmUtc3BhY2UtYXQtZW9sJywgJ2lnbm9yZS1hbGwtc3BhY2UnLCAnYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlJyIKK21zZ3N0ciAiIgorIlVuYmVrYW5udGVyIGNvbG9yLW1vdmVkLXdzIE1vZHVzICclcycsIG3DtmdsaWNoZSBXZXJ0ZSBzaW5kICdpZ25vcmUtc3BhY2UtIgorImNoYW5nZScsICdpZ25vcmUtc3BhY2UtYXQtZW9sJywgJ2lnbm9yZS1hbGwtc3BhY2UnLCAnYWxsb3ctaWRlbnRhdGlvbi1jaGFuZ2UnIgorCisjOiBkaWZmLmM6MzMyCittc2dpZCAiIgorImNvbG9yLW1vdmVkLXdzOiBhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgIgorIndoaXRlc3BhY2UgbW9kZXMiCittc2dzdHIgIiIKKyJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIGthbm4gbmljaHQgbWl0IGFuZGVyZW5cbiIKKyJXaGl0ZXNwYWNlLU1vZGkga29tYmluaWVydCB3ZXJkZW4uIgorCisjOiBkaWZmLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdmFsdWUgZm9yICdkaWZmLnN1Ym1vZHVsZScgY29uZmlnIHZhcmlhYmxlOiAnJXMnIgorbXNnc3RyICJVbmJla2FubnRlciBXZXJ0IGluIEtvbmZpZ3VyYXRpb25zdmFyaWFibGUgJ2RpZmYuZGlyc3RhdCc6ICclcyciCisKKyM6IGRpZmYuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJGZWhsZXIgaW4gJ2RpZmYuZGlyc3RhdCcgS29uZmlndXJhdGlvbnN2YXJpYWJsZSBnZWZ1bmRlbjpcbiIKKyIlcyIKKworIzogZGlmZi5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZGlmZiBkaWVkLCBzdG9wcGluZyBhdCAlcyIKK21zZ3N0ciAiZXh0ZXJuZXMgRGlmZi1Qcm9ncmFtbSB1bmVyd2FydGV0IGJlZW5kZXQsIGFuZ2VoYWx0ZW4gYmVpICVzIgorCisjOiBkaWZmLmM6NDU0NworbXNnaWQgIi0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtLWNoZWNrIGFuZCAtcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICIiCisiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgdW5kIC1zIHNjaGxpZcOfZW4gc2ljaCBnZWdlbnNlaXRpZyBhdXMiCisKKyM6IGRpZmYuYzo0NTUwCittc2dpZCAiLUcsIC1TIGFuZCAtLWZpbmQtb2JqZWN0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1HLCAtUyB1bmQgLS1maW5kLW9iamVjdCBzY2hsaWXDn2VuIHNpY2ggZ2VnZW5zZWl0aWcgYXVzIgorCisjOiBkaWZmLmM6NDYyOAorbXNnaWQgIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIgorbXNnc3RyICItLWZvbGxvdyBlcmZvcmRlcnQgZ2VuYXUgZWluZSBQZmFkc3BlemlmaWthdGlvbiIKKworIzogZGlmZi5jOjQ2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLXN0YXQgdmFsdWU6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciAtLXN0YXQgV2VydDogJXMiCisKKyM6IGRpZmYuYzo0NjgxIGRpZmYuYzo0Njg2IGRpZmYuYzo0NjkxIGRpZmYuYzo0Njk2IGRpZmYuYzo1MjA5CisjOiBwYXJzZS1vcHRpb25zLmM6MTk3IHBhcnNlLW9wdGlvbnMuYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiJXMgZXJ3YXJ0ZXQgZWluZW4gbnVtZXJpc2NoZW4gV2VydC4iCisKKyM6IGRpZmYuYzo0NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gcGFyc2UgLS1kaXJzdGF0Ly1YIG9wdGlvbiBwYXJhbWV0ZXI6XG4iCisiJXMiCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBQYXJzZW4gZGVzIC0tZGlyc3RhdC8tWCBPcHRpb25zcGFyYW1ldGVyczpcbiIKKyIlcyIKKworIzogZGlmZi5jOjQ3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjaGFuZ2UgY2xhc3MgJyVjJyBpbiAtLWRpZmYtZmlsdGVyPSVzIgorbXNnc3RyICJVbmJla2FubnRlIMOEbmRlcnVuZ3NrbGFzc2UgJyVjJyBpbiAtLWRpZmYtZmlsdGVyPSVzIgorCisjOiBkaWZmLmM6NDgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGFmdGVyIHdzLWVycm9yLWhpZ2hsaWdodD0lLipzIgorbXNnc3RyICJVbmJla2FubnRlciBXZXJ0IG5hY2ggd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCisKKyM6IGRpZmYuYzo0ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlICclcyciCittc2dzdHIgImtvbm50ZSAnJXMnIG5pY2h0IGF1ZmzDtnNlbiIKKworIzogZGlmZi5jOjQ4ODYgZGlmZi5jOjQ4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyA8bj4vPG0+IGZvcm0iCittc2dzdHIgIiVzIGVyd2FydGV0IGRpZSBGb3JtIDxuPi88bT4iCisKKyM6IGRpZmYuYzo0OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBjaGFyYWN0ZXIsIGdvdCAnJXMnIgorbXNnc3RyICIlcyBlcndhcnRldCBlaW4gWmVpY2hlbiwgJyVzJyBiZWtvbW1lbiIKKworIzogZGlmZi5jOjQ5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0tY29sb3ItbW92ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlcyAtLWNvbG9yLW1vdmVkIEFyZ3VtZW50OiAlcyIKKworIzogZGlmZi5jOjQ5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlICclcycgaW4gLS1jb2xvci1tb3ZlZC13cyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgTW9kdXMgJyVzJyBpbiAtLWNvbG9yLW1vdmVkLXdzIgorCisjOiBkaWZmLmM6NDk4NAorbXNnaWQgIiIKKyJvcHRpb24gZGlmZi1hbGdvcml0aG0gYWNjZXB0cyBcIm15ZXJzXCIsIFwibWluaW1hbFwiLCBcInBhdGllbmNlXCIgYW5kICIKKyJcImhpc3RvZ3JhbVwiIgorbXNnc3RyICIiCisiT3B0aW9uIGRpZmYtYWxnb3JpdGhtIGFremVwdGllcnQ6IFwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2VcIiBhbmQgIgorIlwiaGlzdG9ncmFtXCIiCisKKyM6IGRpZmYuYzo1MDIwIGRpZmYuYzo1MDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgdG8gJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VzIEFyZ3VtZW50IGbDvHIgJXMiCisKKyM6IGRpZmYuYzo1MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAtLXN1Ym1vZHVsZSBvcHRpb24gcGFyYW1ldGVyOiAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBQYXJzZW4gZGVzIC0tc3VibW9kdWxlIE9wdGlvbnNwYXJhbWV0ZXJzOiAnJXMnIgorCisjOiBkaWZmLmM6NTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS13b3JkLWRpZmYgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlcyAtLXdvcmQtZGlmZiBBcmd1bWVudDogJXMiCisKKyM6IGRpZmYuYzo1MjU3Cittc2dpZCAiRGlmZiBvdXRwdXQgZm9ybWF0IG9wdGlvbnMiCittc2dzdHIgIkRpZmYtT3B0aW9uZW4genUgQXVzZ2FiZWZvcm1hdGVuIgorCisjOiBkaWZmLmM6NTI1OSBkaWZmLmM6NTI2NQorbXNnaWQgImdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJFcnpldWdlIFBhdGNoIgorCisjOiBkaWZmLmM6NTI2MiBidWlsdGluL2xvZy5jOjE3MworbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICJBdXNnYWJlIGRlciBVbnRlcnNjaGllZGUgdW50ZXJkcsO8Y2tlbiIKKworIzogZGlmZi5jOjUyNjcgZGlmZi5jOjUzODEgZGlmZi5jOjUzODgKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZGlmZi5jOjUyNjggZGlmZi5jOjUyNzEKK21zZ2lkICJnZW5lcmF0ZSBkaWZmcyB3aXRoIDxuPiBsaW5lcyBjb250ZXh0IgorbXNnc3RyICJFcnN0ZWxsZSBVbnRlcnNjaGllZGUgbWl0IDxuPiBaZWlsZW4gZGVzIEtvbnRleHRlcyIKKworIzogZGlmZi5jOjUyNzMKK21zZ2lkICJnZW5lcmF0ZSB0aGUgZGlmZiBpbiByYXcgZm9ybWF0IgorbXNnc3RyICJFcnN0ZWxsZSBVbnRlcnNjaGllZGUgaW0gUm9oZm9ybWF0IgorCisjOiBkaWZmLmM6NTI3NgorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXJhdyciCittc2dzdHIgIlN5bm9ueW0gZsO8ciAnLXAgLS1yYXcnIgorCisjOiBkaWZmLmM6NTI4MAorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXN0YXQnIgorbXNnc3RyICJTeW5vbnltIGbDvHIgJy1wIC0tc3RhdCciCisKKyM6IGRpZmYuYzo1Mjg0Cittc2dpZCAibWFjaGluZSBmcmllbmRseSAtLXN0YXQiCittc2dzdHIgIm1hc2NoaW5lbmxlc2JhcmUgQXVzZ2FiZSB2b24gLS1zdGF0IgorCisjOiBkaWZmLmM6NTI4NworbXNnaWQgIm91dHB1dCBvbmx5IHRoZSBsYXN0IGxpbmUgb2YgLS1zdGF0IgorbXNnc3RyICJudXIgZGllIGxldHp0ZSBaZWlsZSB2b24gLS1zdGF0IGF1c2dlYmVuIgorCisjOiBkaWZmLmM6NTI4OSBkaWZmLmM6NTI5NworbXNnaWQgIjxwYXJhbTEscGFyYW0yPi4uLiIKK21zZ3N0ciAiPFBhcmFtZXRlcjEsUGFyYW1ldGVyMj4uLi4iCisKKyM6IGRpZmYuYzo1MjkwCittc2dpZCAiIgorIm91dHB1dCB0aGUgZGlzdHJpYnV0aW9uIG9mIHJlbGF0aXZlIGFtb3VudCBvZiBjaGFuZ2VzIGZvciBlYWNoIHN1Yi1kaXJlY3RvcnkiCittc2dzdHIgIiIKKyJHZWJlIGRpZSBWZXJ0ZWlsdW5nIGRlcyByZWxhdGl2ZW4gVW1mYW5ncyBkZXIgw4RuZGVydW5nZW4gZsO8ciBqZWRlcyAiCisiVW50ZXJ2ZXJ6ZWljaG5pcyBhdXMiCisKKyM6IGRpZmYuYzo1Mjk0Cittc2dpZCAic3lub255bSBmb3IgLS1kaXJzdGF0PWN1bXVsYXRpdmUiCittc2dzdHIgIlN5bm9ueW0gZsO8ciAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSIKKworIzogZGlmZi5jOjUyOTgKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9ZmlsZXMscGFyYW0xLHBhcmFtMi4uLiIKK21zZ3N0ciAiU3lub255bSBmw7xyIC0tZGlyc3RhdD1maWxlcyxQYXJhbWV0ZXIxLFBhcmFtZXRlcjIuLi4iCisKKyM6IGRpZmYuYzo1MzAyCittc2dpZCAid2FybiBpZiBjaGFuZ2VzIGludHJvZHVjZSBjb25mbGljdCBtYXJrZXJzIG9yIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICIiCisiV2FybmVuLCB3ZW5uIMOEbmRlcnVuZ2VuIEtvbmZsaWt0bWFya2VyIG9kZXIgV2hpdGVzcGFjZS1GZWhsZXIgZWluYnJpbmdlbiIKKworIzogZGlmZi5jOjUzMDUKK21zZ2lkICJjb25kZW5zZWQgc3VtbWFyeSBzdWNoIGFzIGNyZWF0aW9ucywgcmVuYW1lcyBhbmQgbW9kZSBjaGFuZ2VzIgorbXNnc3RyICIiCisiR2Vrw7xyenRlIFp1c2FtbWVuZmFzc3VuZywgd2llIHouQi4gRXJzdGVsbHVuZ2VuLCBVbWJlbmVubnVuZ2VuIHVuZCAiCisiw4RuZGVydW5nZW4gZGVyIERhdGVpLVJlY2h0ZSIKKworIzogZGlmZi5jOjUzMDgKK21zZ2lkICJzaG93IG9ubHkgbmFtZXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAibnVyIERhdGVpbmFtZW4gZGVyIGdlw6RuZGVydGVuIERhdGVpZW4gYW56ZWlnZW4iCisKKyM6IGRpZmYuYzo1MzExCittc2dpZCAic2hvdyBvbmx5IG5hbWVzIGFuZCBzdGF0dXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAibnVyIERhdGVpbmFtZW4gdW5kIFN0YXR1cyBkZXIgZ2XDpG5kZXJ0ZW4gRGF0ZWllbiBhbnplaWdlbiIKKworIzogZGlmZi5jOjUzMTMKK21zZ2lkICI8d2lkdGg+Wyw8bmFtZS13aWR0aD5bLDxjb3VudD5dXSIKK21zZ3N0ciAiPEJyZWl0ZT5bLDxOYW1lbnMtQnJlaXRlPlssPEFuemFobD5dXSIKKworIzogZGlmZi5jOjUzMTQKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCIKK21zZ3N0ciAiR2VuZXJpZXJlIFp1c2FtbWVuZmFzc3VuZyBkZXIgVW50ZXJzY2hpZWRlIgorCisjOiBkaWZmLmM6NTMxNiBkaWZmLmM6NTMxOSBkaWZmLmM6NTMyMgorbXNnaWQgIjx3aWR0aD4iCittc2dzdHIgIjxCcmVpdGU+IgorCisjOiBkaWZmLmM6NTMxNworbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiB3aWR0aCIKK21zZ3N0ciAiRXJ6ZXVnZSBadXNhbW1lbmZhc3N1bmcgZGVyIFVudGVyc2NoaWVkZSBtaXQgZ2VnZWJlbmVyIEJyZWl0ZSIKKworIzogZGlmZi5jOjUzMjAKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gbmFtZSB3aWR0aCIKK21zZ3N0ciAiRXJ6ZXVnZSBadXNhbW1lbmZhc3N1bmcgZGVyIFVudGVyc2NoaWVkZSBtaXQgZ2VnZWJlbmVyIE5hbWVucy1CcmVpdGUiCisKKyM6IGRpZmYuYzo1MzIzCittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIGdyYXBoIHdpZHRoIgorbXNnc3RyICJFcnpldWdlIFp1c2FtbWVuZmFzc3VuZyBkZXIgVW50ZXJzY2hpZWRlIG1pdCBnZWdlYmVuZXIgR3JhcGgtQnJlaXRlIgorCisjOiBkaWZmLmM6NTMyNQorbXNnaWQgIjxjb3VudD4iCittc2dzdHIgIjxBbnphaGw+IgorCisjOiBkaWZmLmM6NTMyNgorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggbGltaXRlZCBsaW5lcyIKK21zZ3N0ciAiRXJ6ZXVnZSBadXNhbW1lbmZhc3N1bmcgZGVyIFVudGVyc2NoaWVkZSBtaXQgYmVncmVuenRlbiBaZWlsZW4iCisKKyM6IGRpZmYuYzo1MzI5Cittc2dpZCAiZ2VuZXJhdGUgY29tcGFjdCBzdW1tYXJ5IGluIGRpZmZzdGF0IgorbXNnc3RyICJFcnpldWdlIGtvbXBha3RlIFp1c2FtbWVuc3RlbGx1bmcgaW4gWnVzYW1tZW5mYXNzdW5nIGRlciBVbnRlcnNjaGllZGUiCisKKyM6IGRpZmYuYzo1MzMyCittc2dpZCAib3V0cHV0IGEgYmluYXJ5IGRpZmYgdGhhdCBjYW4gYmUgYXBwbGllZCIKK21zZ3N0ciAiR2ViZSBlaW5lIGJpbsOkcmUgRGlmZmVyZW56IGF1cywgZGFzcyBhbmdld2VuZGV0IHdlcmRlbiBrYW5uIgorCisjOiBkaWZmLmM6NTMzNQorbXNnaWQgInNob3cgZnVsbCBwcmUtIGFuZCBwb3N0LWltYWdlIG9iamVjdCBuYW1lcyBvbiB0aGUgXCJpbmRleFwiIGxpbmVzIgorbXNnc3RyICJaZWlnZSB2b2xsc3TDpG5kaWdlIE9iamVrdC1OYW1lbiBpbiBkZW4gXCJpbmRleFwiLVplaWxlbiIKKworIzogZGlmZi5jOjUzMzcKK21zZ2lkICJzaG93IGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAiWmVpZ2UgZmFyYmlnZSBVbnRlcnNjaGllZGUiCisKKyM6IGRpZmYuYzo1MzM4Cittc2dpZCAiPGtpbmQ+IgorbXNnc3RyICI8QXJ0PiIKKworIzogZGlmZi5jOjUzMzkKK21zZ2lkICIiCisiaGlnaGxpZ2h0IHdoaXRlc3BhY2UgZXJyb3JzIGluIHRoZSAnY29udGV4dCcsICdvbGQnIG9yICduZXcnIGxpbmVzIGluIHRoZSAiCisiZGlmZiIKK21zZ3N0ciAiIgorIkhlYmUgV2hpdGVzcGFjZS1GZWhsZXIgaW4gZGVuIFplaWxlbiAnY29udGV4dCcsICdvbGQnIG9kZXIgJ25ldycgYmVpIGRlbiAiCisiVW50ZXJzY2hpZWRlbiBoZXJ2b3IiCisKKyM6IGRpZmYuYzo1MzQyCittc2dpZCAiIgorImRvIG5vdCBtdW5nZSBwYXRobmFtZXMgYW5kIHVzZSBOVUxzIGFzIG91dHB1dCBmaWVsZCB0ZXJtaW5hdG9ycyBpbiAtLXJhdyBvciAiCisiLS1udW1zdGF0IgorbXNnc3RyICIiCisiVmVyc2NobGVpZXJlIG5pY2h0IGRpZSBQZmFkbmFtZW4gdW5kIG51dHplIE5VTC1aZWljaGVuIGFscyBTY2hsdXNzemVpY2hlbiBpbiAiCisiQXVzZ2FiZWZlbGRlcm4gYmVpIC0tcmF3IG9kZXIgLS1udW1zdGF0IgorCisjOiBkaWZmLmM6NTM0NSBkaWZmLmM6NTM0OCBkaWZmLmM6NTM1MSBkaWZmLmM6NTQ1NworbXNnaWQgIjxwcmVmaXg+IgorbXNnc3RyICI8UHLDpGZpeD4iCisKKyM6IGRpZmYuYzo1MzQ2Cittc2dpZCAic2hvdyB0aGUgZ2l2ZW4gc291cmNlIHByZWZpeCBpbnN0ZWFkIG9mIFwiYS9cIiIKK21zZ3N0ciAiWmVpZ2UgZGVuIGdlZ2ViZW5lbiBRdWVsbC1QcsOkZml4IHN0YXR0IFwiYS9cIiIKKworIzogZGlmZi5jOjUzNDkKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBwcmVmaXggaW5zdGVhZCBvZiBcImIvXCIiCittc2dzdHIgIlplaWdlIGRlbiBnZWdlYmVuZW4gWmllbC1QcsOkZml4IHN0YXR0IFwiYi9cIiIKKworIzogZGlmZi5jOjUzNTIKK21zZ2lkICJwcmVwZW5kIGFuIGFkZGl0aW9uYWwgcHJlZml4IHRvIGV2ZXJ5IGxpbmUgb2Ygb3V0cHV0IgorbXNnc3RyICJTdGVsbGUgZWluZW4genVzw6R0emxpY2hlbiBQcsOkZml4IGJlaSBqZWRlciBBdXNnYWJlemVpbGUgdm9yYW4iCisKKyM6IGRpZmYuYzo1MzU1Cittc2dpZCAiZG8gbm90IHNob3cgYW55IHNvdXJjZSBvciBkZXN0aW5hdGlvbiBwcmVmaXgiCittc2dzdHIgIlplaWdlIGtlaW5lIFF1ZWxsLSBvZGVyIFppZWwtUHLDpGZpeGUgYW4iCisKKyM6IGRpZmYuYzo1MzU4Cittc2dpZCAic2hvdyBjb250ZXh0IGJldHdlZW4gZGlmZiBodW5rcyB1cCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBsaW5lcyIKK21zZ3N0ciAiIgorIlplaWdlIEtvbnRleHQgendpc2NoZW4gVW50ZXJzY2hpZWQtQmzDtmNrZW4gYmlzIHp1ciBhbmdlZ2ViZW5lbiBBbnphaGwgdm9uICIKKyJaZWlsZW4uIgorCisjOiBkaWZmLmM6NTM2MiBkaWZmLmM6NTM2NyBkaWZmLmM6NTM3MgorbXNnaWQgIjxjaGFyPiIKK21zZ3N0ciAiPFplaWNoZW4+IgorCisjOiBkaWZmLmM6NTM2MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIG5ldyBsaW5lIGluc3RlYWQgb2YgJysnIgorbXNnc3RyICJEYXMgWmVpY2hlbiBmZXN0bGVnZW4sIGRhcyBlaW5lIG5ldWUgWmVpbGUga2VubnplaWNobmV0IChzdGF0dCAnKycpIgorCisjOiBkaWZmLmM6NTM2OAorbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhbiBvbGQgbGluZSBpbnN0ZWFkIG9mICctJyIKK21zZ3N0ciAiRGFzIFplaWNoZW4gZmVzdGxlZ2VuLCBkYXMgZWluZSBhbHRlIFplaWxlIGtlbm56ZWljaG5ldCAoc3RhdHQgJy0nKSIKKworIzogZGlmZi5jOjUzNzMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBjb250ZXh0IGluc3RlYWQgb2YgJyAnIgorbXNnc3RyICJEYXMgWmVpY2hlbiBmZXN0bGVnZW4sIGRhcyBkZW4gS29udGV4dCBrZW5uemVpY2huZXQgKHN0YXR0ICcgJykiCisKKyM6IGRpZmYuYzo1Mzc2Cittc2dpZCAiRGlmZiByZW5hbWUgb3B0aW9ucyIKK21zZ3N0ciAiRGlmZi1PcHRpb25lbiB6dXIgVW1iZW5lbm51bmciCisKKyM6IGRpZmYuYzo1Mzc3Cittc2dpZCAiPG4+Wy88bT5dIgorbXNnc3RyICI8bj5bLzxtPl0iCisKKyM6IGRpZmYuYzo1Mzc4Cittc2dpZCAiYnJlYWsgY29tcGxldGUgcmV3cml0ZSBjaGFuZ2VzIGludG8gcGFpcnMgb2YgZGVsZXRlIGFuZCBjcmVhdGUiCittc2dzdHIgIiIKKyJUZWlsZSBrb21wbGV0dGUgUmV3cml0ZS3DhG5kZXJ1bmdlbiBpbiDDhG5kZXJ1bmdlbiBtaXQgXCJsw7ZzY2hlblwiIHVuZCAiCisiXCJlcnN0ZWxsZW5cIiIKKworIzogZGlmZi5jOjUzODIKK21zZ2lkICJkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAiVW1iZW5lbm51bmdlbiBlcmtlbm5lbiIKKworIzogZGlmZi5jOjUzODYKK21zZ2lkICJvbWl0IHRoZSBwcmVpbWFnZSBmb3IgZGVsZXRlcyIKK21zZ3N0ciAiUHJlaW1hZ2UgZsO8ciBMw7ZzY2h1bmdlbiB3ZWdsYXNzZW4uIgorCisjOiBkaWZmLmM6NTM4OQorbXNnaWQgImRldGVjdCBjb3BpZXMiCittc2dzdHIgIktvcGllbiBlcmtlbm5lbiIKKworIzogZGlmZi5jOjUzOTMKK21zZ2lkICJ1c2UgdW5tb2RpZmllZCBmaWxlcyBhcyBzb3VyY2UgdG8gZmluZCBjb3BpZXMiCittc2dzdHIgIk51dHplIHVuZ2XDpG5kZXJ0ZSBEYXRlaWVuIGFscyBRdWVsbGUgenVtIEZpbmRlbiB2b24gS29waWVuIgorCisjOiBkaWZmLmM6NTM5NQorbXNnaWQgImRpc2FibGUgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAiRXJrZW5udW5nIHZvbiBVbWJlbmVubnVuZ2VuIGRlYWt0aXZpZXJlbiIKKworIzogZGlmZi5jOjUzOTgKK21zZ2lkICJ1c2UgZW1wdHkgYmxvYnMgYXMgcmVuYW1lIHNvdXJjZSIKK21zZ3N0ciAiTnV0emUgbGVlcmUgQmxvYnMgYWxzIFF1ZWxsZSB2b24gVW1iZW5udW5nZW4iCisKKyM6IGRpZmYuYzo1NDAwCittc2dpZCAiY29udGludWUgbGlzdGluZyB0aGUgaGlzdG9yeSBvZiBhIGZpbGUgYmV5b25kIHJlbmFtZXMiCittc2dzdHIgIkZvcnRmw7xocmVuIGRlciBBdWZsaXN0dW5nIGRlciBIaXN0b3JpZSBlaW5lciBEYXRlaSBuYWNoIFVtYmVubnVuZyIKKworIzogZGlmZi5jOjU0MDMKK21zZ2lkICIiCisicHJldmVudCByZW5hbWUvY29weSBkZXRlY3Rpb24gaWYgdGhlIG51bWJlciBvZiByZW5hbWUvY29weSB0YXJnZXRzIGV4Y2VlZHMgIgorImdpdmVuIGxpbWl0IgorbXNnc3RyICIiCisiVmVyaGluZGVyZSBkaWUgRXJrZW5udW5nIHZvbiBVbWJlbm51bmdlbiB1bmQgS29waWVuLCB3ZW5uIGRpZSBBbnphaGwgZGVyICIKKyJaaWVsZSBmw7xyIFVtYmVubnVuZ2VuIHVuZCBLb3BpZW4gZGFzIGdlZ2ViZW5lIExpbWl0IMO8YmVyc2NocmVpdGV0IgorCisjOiBkaWZmLmM6NTQwNQorbXNnaWQgIkRpZmYgYWxnb3JpdGhtIG9wdGlvbnMiCittc2dzdHIgIkRpZmYgQWxnb3JpdGhtdXMtT3B0aW9uZW4iCisKKyM6IGRpZmYuYzo1NDA3Cittc2dpZCAicHJvZHVjZSB0aGUgc21hbGxlc3QgcG9zc2libGUgZGlmZiIKK21zZ3N0ciAiRXJ6ZXVnZSBkaWUga2xlaW5zdG3DtmdsaWNoZW4gw4RuZGVydW5nZW4iCisKKyM6IGRpZmYuYzo1NDEwCittc2dpZCAiaWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgbGluZXMiCittc2dzdHIgIldoaXRlc3BhY2Utw4RuZGVydW5nZW4gYmVpbSBWZXJnbGVpY2ggdm9uIFplaWxlbiBpZ25vcmllcmVuIgorCisjOiBkaWZmLmM6NTQxMworbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZXNwYWNlIgorbXNnc3RyICLDhG5kZXJ1bmdlbiBiZWkgZGVyIEFuemFobCB2b24gV2hpdGVzcGFjZSBpZ25vcmllcmVuIgorCisjOiBkaWZmLmM6NTQxNgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgYXQgRU9MIgorbXNnc3RyICJXaGl0ZXNwYWNlLcOEbmRlcnVuZ2VuIGFtIFplaWxlbmVuZGUgaWdub3JpZXJlbiIKKworIzogZGlmZi5jOjU0MTkKK21zZ2lkICJpZ25vcmUgY2Fycmllci1yZXR1cm4gYXQgdGhlIGVuZCBvZiBsaW5lIgorbXNnc3RyICJJZ25vcmllcmUgZGVuIFplaWxlbnVtYnJ1Y2ggYW0gRW5kZSBkZXIgWmVpbGUiCisKKyM6IGRpZmYuYzo1NDIyCittc2dpZCAiaWdub3JlIGNoYW5nZXMgd2hvc2UgbGluZXMgYXJlIGFsbCBibGFuayIKK21zZ3N0ciAiSWdub3JpZXJlIMOEbmRlcnVuZ2VuIGluIGxlZXJlbiBaZWlsZW4iCisKKyM6IGRpZmYuYzo1NDI1Cittc2dpZCAiaGV1cmlzdGljIHRvIHNoaWZ0IGRpZmYgaHVuayBib3VuZGFyaWVzIGZvciBlYXN5IHJlYWRpbmciCittc2dzdHIgIiIKKyJIZXVyaXN0aWssIHVtIEdyZW56ZW4gZGVyIMOEbmRlcnVuZ3NibMO2Y2tlIGbDvHIgYmVzc2VyZSBMZXNiYXJrZWl0IHp1ICIKKyJ2ZXJzY2hpZWJlbiIKKworIzogZGlmZi5jOjU0MjgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcInBhdGllbmNlIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgIkVyemV1Z2Ugw4RuZGVydW5nZW4gZHVyY2ggTnV0enVuZyBkZXMgQWxnb3JpdGhtdXMgXCJQYXRpZW5jZSBEaWZmXCIiCisKKyM6IGRpZmYuYzo1NDMyCittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJoaXN0b2dyYW0gZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiRXJ6ZXVnZSDDhG5kZXJ1bmdlbiBkdXJjaCBOdXR6dW5nIGRlcyBBbGdvcml0aG11cyBcIkhpc3RvZ3JhbSBEaWZmXCIiCisKKyM6IGRpZmYuYzo1NDM0Cittc2dpZCAiPGFsZ29yaXRobT4iCittc2dzdHIgIjxBbGdvcml0aG11cz4iCisKKyM6IGRpZmYuYzo1NDM1Cittc2dpZCAiY2hvb3NlIGEgZGlmZiBhbGdvcml0aG0iCittc2dzdHIgIkVpbiBBbGdvcml0aG11cyBmw7xyIMOEbmRlcnVuZ2VuIHfDpGhsZW4iCisKKyM6IGRpZmYuYzo1NDM3Cittc2dpZCAiPHRleHQ+IgorbXNnc3RyICI8VGV4dD4iCisKKyM6IGRpZmYuYzo1NDM4Cittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJhbmNob3JlZCBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICJFcnpldWdlIMOEbmRlcnVuZ2VuIGR1cmNoIE51dHp1bmcgZGVzIEFsZ29yaXRobXVzIFwiQW5jaG9yZWQgRGlmZlwiIgorCisjOiBkaWZmLmM6NTQ0MCBkaWZmLmM6NTQ0OSBkaWZmLmM6NTQ1MgorbXNnaWQgIjxtb2RlPiIKK21zZ3N0ciAiPE1vZHVzPiIKKworIzogZGlmZi5jOjU0NDEKK21zZ2lkICJzaG93IHdvcmQgZGlmZiwgdXNpbmcgPG1vZGU+IHRvIGRlbGltaXQgY2hhbmdlZCB3b3JkcyIKK21zZ3N0ciAiWmVpZ2UgV29ydC3DhG5kZXJ1bmdlbiwgbnV0emUgPE1vZHVzPiwgdW0gV8O2cnRlciBhYnp1Z3JlbnplbiIKKworIzogZGlmZi5jOjU0NDMgZGlmZi5jOjU0NDYgZGlmZi5jOjU0OTEKK21zZ2lkICI8cmVnZXg+IgorbXNnc3RyICI8UmVnZXg+IgorCisjOiBkaWZmLmM6NTQ0NAorbXNnaWQgInVzZSA8cmVnZXg+IHRvIGRlY2lkZSB3aGF0IGEgd29yZCBpcyIKK21zZ3N0ciAiTnV0emUgPFJlZ2V4PiwgdW0genUgZW50c2NoZWlkZW4sIHdhcyBlaW4gV29ydCBpc3QiCisKKyM6IGRpZmYuYzo1NDQ3Cittc2dpZCAiZXF1aXZhbGVudCB0byAtLXdvcmQtZGlmZj1jb2xvciAtLXdvcmQtZGlmZi1yZWdleD08cmVnZXg+IgorbXNnc3RyICJFbnRzcHJlY2hlbmQgd2llIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxSZWdleD4iCisKKyM6IGRpZmYuYzo1NDUwCittc2dpZCAibW92ZWQgbGluZXMgb2YgY29kZSBhcmUgY29sb3JlZCBkaWZmZXJlbnRseSIKK21zZ3N0ciAiVmVyc2Nob2JlbmUgQ29kZXplaWxlbiBzaW5kIGFuZGVyc2ZhcmJpZyIKKworIzogZGlmZi5jOjU0NTMKK21zZ2lkICJob3cgd2hpdGUgc3BhY2VzIGFyZSBpZ25vcmVkIGluIC0tY29sb3ItbW92ZWQiCittc2dzdHIgIldpZSBXaGl0ZXNwYWNlcyBpbiAtLWNvbG9yLW1vdmVkIGlnbm9yaWVydCB3ZXJkZW4iCisKKyM6IGRpZmYuYzo1NDU2Cittc2dpZCAiT3RoZXIgZGlmZiBvcHRpb25zIgorbXNnc3RyICJBbmRlcmUgRGlmZi1PcHRpb25lbiIKKworIzogZGlmZi5jOjU0NTgKK21zZ2lkICJ3aGVuIHJ1biBmcm9tIHN1YmRpciwgZXhjbHVkZSBjaGFuZ2VzIG91dHNpZGUgYW5kIHNob3cgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgIiIKKyJXZW5uIHZvbSBVbnRlcnZlcnplaWNobmlzIGF1ZmdlcnVmZW4sIHNjaGxpZcOfZSDDhG5kZXJ1bmdlbiBhdcOfZXJoYWxiIGF1cyB1bmQgIgorInplaWdlIHJlbGF0aXZlIFBmYWRlIGFuIgorCisjOiBkaWZmLmM6NTQ2MgorbXNnaWQgInRyZWF0IGFsbCBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICJhbGxlIERhdGVpZW4gYWxzIFRleHQgYmVoYW5kZWxuIgorCisjOiBkaWZmLmM6NTQ2NAorbXNnaWQgInN3YXAgdHdvIGlucHV0cywgcmV2ZXJzZSB0aGUgZGlmZiIKK21zZ3N0ciAiVmVydGF1c2NoZSBkaWUgYmVpZGVuIEVpbmdhYmVuIHVuZCBkcmVoZSBkaWUgw4RuZGVydW5nZW4gdW0iCisKKyM6IGRpZmYuYzo1NDY2Cittc2dpZCAiZXhpdCB3aXRoIDEgaWYgdGhlcmUgd2VyZSBkaWZmZXJlbmNlcywgMCBvdGhlcndpc2UiCittc2dzdHIgIiIKKyJCZWVuZGUgbWl0IEV4aXQtU3RhdHVzIDEsIHdlbm4gw4RuZGVydW5nZW4gdm9yaGFuZGVuIHNpbmQsIGFuZGVybmZhbGxzIG1pdCAwIgorCisjOiBkaWZmLmM6NTQ2OAorbXNnaWQgImRpc2FibGUgYWxsIG91dHB1dCBvZiB0aGUgcHJvZ3JhbSIKK21zZ3N0ciAiS2VpbmUgQXVzZ2FiZW4gdm9tIFByb2dyYW1tIgorCisjOiBkaWZmLmM6NTQ3MAorbXNnaWQgImFsbG93IGFuIGV4dGVybmFsIGRpZmYgaGVscGVyIHRvIGJlIGV4ZWN1dGVkIgorbXNnc3RyICJFcmxhdWJlIGRpZSBBdXNmw7xocnVuZyBlaW5lcyBleHRlcm5lcyBQcm9ncmFtbXMgZsO8ciDDhG5kZXJ1bmdlbiIKKworIzogZGlmZi5jOjU0NzIKK21zZ2lkICJydW4gZXh0ZXJuYWwgdGV4dCBjb252ZXJzaW9uIGZpbHRlcnMgd2hlbiBjb21wYXJpbmcgYmluYXJ5IGZpbGVzIgorbXNnc3RyICIiCisiRsO8aHJlIGV4dGVybmUgVGV4dC1Lb252ZXJ0aWVydW5nc2ZpbHRlciBhdXMsIHdlbm4gYmluw6RyZSBEYXRlaWVuIHZlcmdsZWljaHQgIgorIndlcmRlbiIKKworIzogZGlmZi5jOjU0NzQKK21zZ2lkICI8d2hlbj4iCittc2dzdHIgIjx3YW5uPiIKKworIzogZGlmZi5jOjU0NzUKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzIGluIHRoZSBkaWZmIGdlbmVyYXRpb24iCittc2dzdHIgIiIKKyLDhG5kZXJ1bmdlbiBpbiBTdWJtb2R1bGVuIHfDpGhyZW5kIGRlciBFcnN0ZWxsdW5nIGRlciBVbnRlcnNjaGllZGUgaWdub3JpZXJlbiIKKworIzogZGlmZi5jOjU0NzgKK21zZ2lkICI8Zm9ybWF0PiIKK21zZ3N0ciAiPEZvcm1hdD4iCisKKyM6IGRpZmYuYzo1NDc5Cittc2dpZCAic3BlY2lmeSBob3cgZGlmZmVyZW5jZXMgaW4gc3VibW9kdWxlcyBhcmUgc2hvd24iCittc2dzdHIgIkFuZ2ViZW4sIHdpZSBVbnRlcnNjaGllZGUgaW4gU3VibW9kdWxlbiBnZXplaWd0IHdlcmRlbiIKKworIzogZGlmZi5jOjU0ODMKK21zZ2lkICJoaWRlICdnaXQgYWRkIC1OJyBlbnRyaWVzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJ2ZXJzdGVja2UgJ2dpdCBhZGQgLU4nIEVpbnRyw6RnZSB2b20gSW5kZXgiCisKKyM6IGRpZmYuYzo1NDg2Cittc2dpZCAidHJlYXQgJ2dpdCBhZGQgLU4nIGVudHJpZXMgYXMgcmVhbCBpbiB0aGUgaW5kZXgiCittc2dzdHIgIkJlaGFuZGxlICdnaXQgYWRkIC1OJyBFaW50csOkZ2UgaW0gSW5kZXggYWxzIGVjaHQiCisKKyM6IGRpZmYuYzo1NDg4Cittc2dpZCAiPHN0cmluZz4iCittc2dzdHIgIjxaZWljaGVua2V0dGU+IgorCisjOiBkaWZmLmM6NTQ4OQorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInN0cmluZyIKK21zZ3N0ciAiIgorIlN1Y2hlIG5hY2ggVW50ZXJzY2hpZWRlbiwgd2VsY2hlIGRpZSBBbnphaGwgZGVzIFZvcmtvbW1lbnMgZGVyIGFuZ2VnZWJlbmVuICIKKyJaZWljaGVua2V0dGUgdmVyw6RuZGVybiIKKworIzogZGlmZi5jOjU0OTIKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJyZWdleCIKK21zZ3N0ciAiIgorIlN1Y2hlIG5hY2ggVW50ZXJzY2hpZWRlbiwgd2VsY2hlIGRpZSBBbnphaGwgZGVzIFZvcmtvbW1lbnMgZGVzIGFuZ2VnZWJlbmVuICIKKyJyZWd1bMOkcmVuIEF1c2RydWNrcyB2ZXLDpG5kZXJuIgorCisjOiBkaWZmLmM6NTQ5NQorbXNnaWQgInNob3cgYWxsIGNoYW5nZXMgaW4gdGhlIGNoYW5nZXNldCB3aXRoIC1TIG9yIC1HIgorbXNnc3RyICJ6ZWlnZSBhbGxlIMOEbmRlcnVuZ2VuIGltIENoYW5nZXNldCBtaXQgLVMgb2RlciAtRyIKKworIzogZGlmZi5jOjU0OTgKK21zZ2lkICJ0cmVhdCA8c3RyaW5nPiBpbiAtUyBhcyBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKyJiZWhhbmRsZSA8WmVpY2hlbmtldHRlPiBiZWkgLVMgYWxzIGVyd2VpdGVydGVuIFBPU0lYIHJlZ3Vsw6RyZW4gQXVzZHJ1Y2siCisKKyM6IGRpZmYuYzo1NTAxCittc2dpZCAiY29udHJvbCB0aGUgb3JkZXIgaW4gd2hpY2ggZmlsZXMgYXBwZWFyIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKyJrb250cm9sbGllcmUgZGllIFJlaWhlbmZvbGdlLCBpbiBkZXIgZGllIERhdGVpZW4gaW4gZGVyIEF1c2dhYmUgZXJzY2hlaW5lbiIKKworIzogZGlmZi5jOjU1MDIKK21zZ2lkICI8b2JqZWN0LWlkPiIKK21zZ3N0ciAiPE9iamVrdC1JRD4iCisKKyM6IGRpZmYuYzo1NTAzCittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisib2JqZWN0IgorbXNnc3RyICIiCisiU3VjaGUgbmFjaCBVbnRlcnNjaGllZGVuLCB3ZWxjaGUgZGllIEFuemFobCBkZXMgVm9ya29tbWVucyBkZXMgYW5nZWdlYmVuZW4gIgorIk9iamVrdGVzIHZlcsOkbmRlcm4iCisKKyM6IGRpZmYuYzo1NTA1Cittc2dpZCAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorbXNnc3RyICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCisKKyM6IGRpZmYuYzo1NTA2Cittc2dpZCAic2VsZWN0IGZpbGVzIGJ5IGRpZmYgdHlwZSIKK21zZ3N0ciAiV8OkaGxlIERhdGVpZW4gYW5oYW5kIGRlciBBcnQgZGVyIMOEbmRlcnVuZyIKKworIzogZGlmZi5jOjU1MDgKK21zZ2lkICI8ZmlsZT4iCittc2dzdHIgIjxEYXRlaT4iCisKKyM6IGRpZmYuYzo1NTA5Cittc2dpZCAiT3V0cHV0IHRvIGEgc3BlY2lmaWMgZmlsZSIKK21zZ3N0ciAiQXVzZ2FiZSB6dSBlaW5lciBiZXN0aW1tdGVuIERhdGVpIgorCisjOiBkaWZmLmM6NjE2NAorbXNnaWQgImluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiB3YXMgc2tpcHBlZCBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICIiCisiVW5nZW5hdWUgRXJrZW5udW5nIGbDvHIgVW1iZW5lbm51bmdlbiB3dXJkZSBhdWZncnVuZCB6dSB2aWVsZXIgRGF0ZWllblxuIgorIsO8YmVyc3BydW5nZW4uIgorCisjOiBkaWZmLmM6NjE2NworbXNnaWQgIm9ubHkgZm91bmQgY29waWVzIGZyb20gbW9kaWZpZWQgcGF0aHMgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAibnVyIEtvcGllbiB2b24gZ2XDpG5kZXJ0ZW4gUGZhZGVuLCBhdWZncnVuZCB6dSB2aWVsZXIgRGF0ZWllbiwgZ2VmdW5kZW4iCisKKyM6IGRpZmYuYzo2MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgbWF5IHdhbnQgdG8gc2V0IHlvdXIgJXMgdmFyaWFibGUgdG8gYXQgbGVhc3QgJWQgYW5kIHJldHJ5IHRoZSBjb21tYW5kLiIKK21zZ3N0ciAiIgorIlNpZSBrw7ZubnRlbiBkaWUgVmFyaWFibGUgJXMgYXVmIG1pbmRlc3RlbnMgJWQgc2V0emVuIHVuZCBkZW4gQmVmZWhsXG4iCisiZXJuZXV0IHZlcnN1Y2hlbi4iCisKKyM6IGRpci5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGUocykga25vd24gdG8gZ2l0IgorbXNnc3RyICIiCisiUGZhZHNwZXppZmlrYXRpb24gJyVzJyBzdGltbXQgbWl0IGtlaW5lbiBnaXQtYmVrYW5udGVuIERhdGVpZW4gw7xiZXJlaW4uIgorCisjOiBkaXIuYzo2OTUgZGlyLmM6NzI0IGRpci5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcGF0dGVybjogJyVzJyIKK21zZ3N0ciAiVW5iZWthbm50ZXMgTXVzdGVyOiAnJXMnIgorCisjOiBkaXIuYzo3NTQgZGlyLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICJVbmJla2FubnRlcyB2ZXJuZWluZW5kZXMgTXVzdGVyOiAnJXMnIgorCisjOiBkaXIuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgaGF2ZSBpc3N1ZXM6IHBhdHRlcm4gJyVzJyBpcyByZXBlYXRlZCIKK21zZ3N0ciAiIgorIklocmUgRGF0ZWkgZsO8ciBkZW4gcGFydGllbGxlbiBDaGVja291dCBoYXQgZXZlbnR1ZWxsIFByb2JsZW1lOlxuIgorIk11c3RlciAnJXMnIHdpZWRlcmhvbHQgc2ljaC4iCisKKyM6IGRpci5jOjc5NgorbXNnaWQgImRpc2FibGluZyBjb25lIHBhdHRlcm4gbWF0Y2hpbmciCittc2dzdHIgIkRlYWt0aXZpZXJlIENvbmUtTXVzdGVyLcOcYmVyZWluc3RpbW11bmciCisKKyM6IGRpci5jOjExNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiCittc2dzdHIgIkthbm4gJXMgbmljaHQgYWxzIGV4Y2x1ZGUtRmlsdGVyIGJlbnV0emVuLiIKKworIzogZGlyLmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiS29ubnRlIFZlcnplaWNobmlzICclcycgbmljaHQgw7ZmZm5lbi4iCisKKyM6IGRpci5jOjI0NzkKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IGtlcm5lbCBuYW1lIGFuZCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2FtbWVsbiB2b24gTmFtZW4gdW5kIEluZm9ybWF0aW9uZW4genVtIEtlcm5lbCIKKworIzogZGlyLmM6MjYwMworbXNnaWQgInVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbSBvciBsb2NhdGlvbiIKK21zZ3N0ciAiIgorIkNhY2hlIGbDvHIgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiBpc3QgYXVmIGRpZXNlbSBTeXN0ZW0gb2RlclxuIgorImbDvHIgZGllc2VzIFZlcnplaWNobmlzIGRlYWt0aXZpZXJ0LiIKKworIzogZGlyLmM6MzQwNworIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQgaW4gcmVwbyAlcyIKK21zZ3N0ciAiSW5kZXgtRGF0ZWkgaW4gUmVwb3NpdG9yeSAlcyBiZXNjaMOkZGlndC4iCisKKyM6IGRpci5jOjM0NTIgZGlyLmM6MzQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciAlcyIKK21zZ3N0ciAiS29ubnRlIFZlcnplaWNobmlzc2UgZsO8ciAnJXMnIG5pY2h0IGVyc3RlbGxlbi4iCisKKyM6IGRpci5jOjM0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1pZ3JhdGUgZ2l0IGRpcmVjdG9yeSBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiS29ubnRlIEdpdC1WZXJ6ZWljaG5pcyBuaWNodCB2b24gJyVzJyBuYWNoICclcycgbWlncmllcmVuLiIKKworIzogZWRpdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGludDogV2FpdGluZyBmb3IgeW91ciBlZGl0b3IgdG8gY2xvc2UgdGhlIGZpbGUuLi4lYyIKK21zZ3N0ciAiSGlud2VpczogV2FydGUgYXVmIGRhcyBTY2hsaWXDn2VuIGRlciBEYXRlaSBkdXJjaCBJaHJlbiBFZGl0b3IuLi4lYyIKKworIzogZW50cnkuYzoxNzgKK21zZ2lkICJGaWx0ZXJpbmcgY29udGVudCIKK21zZ3N0ciAiRmlsdGVyZSBJbmhhbHQiCisKKyM6IGVudHJ5LmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0IGZpbGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlIERhdGVpICclcycgbmljaHQgbGVzZW4uIgorCisjOiBlbnZpcm9ubWVudC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2l0IG5hbWVzcGFjZSBwYXRoIFwiJXNcIiIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgR2l0LU5hbWVzcGFjZS1QZmFkIFwiJXNcIiIKKworIzogZW52aXJvbm1lbnQuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBHSVRfRElSIHRvICclcyciCittc2dzdHIgIktvbm50ZSBHSVRfRElSIG5pY2h0IHp1ICclcycgc2V0emVuLiIKKworIzogZXhlYy1jbWQuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJncyB0byBydW4gJXMiCittc2dzdHIgIlp1IHZpZWxlIEFyZ3VtZW50ZSBhbmdlZ2ViZW4sIHVtICVzIGF1c3p1ZsO8aHJlbi4iCisKKyM6IGZldGNoLXBhY2suYzoxNTAKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogZXJ3YXJ0ZXRlIHNoYWxsb3ctTGlzdGUiCisKKyM6IGZldGNoLXBhY2suYzoxNTMKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgYSBmbHVzaCBwYWNrZXQgYWZ0ZXIgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogZXJ3YXJ0ZXRlIGVpbiBGbHVzaC1QYWtldCBuYWNoIGRlciBzaGFsbG93LUxpc3RlIgorCisjOiBmZXRjaC1wYWNrLmM6MTY0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IEFDSy9OQUsgZXJ3YXJ0ZXQsIEZsdXNoLVBha2V0IGJla29tbWVuIgorCisjOiBmZXRjaC1wYWNrLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgJyVzJyIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IEFDSy9OQUsgZXJ3YXJ0ZXQsICclcycgYmVrb21tZW4iCisKKyM6IGZldGNoLXBhY2suYzoxOTUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdG8gcmVtb3RlIgorbXNnc3RyICJrb25udGUgbmljaHQgenVtIFJlbW90ZSBzY2hyZWliZW4iCisKKyM6IGZldGNoLXBhY2suYzoyNTcKK21zZ2lkICItLXN0YXRlbGVzcy1ycGMgcmVxdWlyZXMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICItLXN0YXRlbGVzcy1ycGMgYmVuw7Z0aWd0IG11bHRpX2Fja19kZXRhaWxlZCIKKworIzogZmV0Y2gtcGFjay5jOjM1NiBmZXRjaC1wYWNrLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2Ugc2hhbGxvdy1aZWlsZTogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjIgZmV0Y2gtcGFjay5jOjEzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1bnNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgdW5zaGFsbG93LVplaWxlOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NCBmZXRjaC1wYWNrLmM6MTM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3Qgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiT2JqZWt0IG5pY2h0IGdlZnVuZGVuOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NyBmZXRjaC1wYWNrLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICJGZWhsZXIgaW4gT2JqZWt0OiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2OSBmZXRjaC1wYWNrLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaGFsbG93IGZvdW5kOiAlcyIKK21zZ3N0ciAiS2VpbiBzaGFsbG93LU9iamVrdCBnZWZ1bmRlbjogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNzIgZmV0Y2gtcGFjay5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgc2hhbGxvdy91bnNoYWxsb3csIGdvdCAlcyIKK21zZ3N0ciAic2hhbGxvdy91bnNoYWxsb3cgZXJ3YXJ0ZXQsICVzIGJla29tbWVuIgorCisjOiBmZXRjaC1wYWNrLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAlZCAlcyIKK21zZ3N0ciAiJXMgJWQgJXMgYmVrb21tZW4iCisKKyM6IGZldGNoLXBhY2suYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIENvbW1pdCAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQ2MgorbXNnaWQgImdpdmluZyB1cCIKK21zZ3N0ciAiR2ViZSBhdWYiCisKKyM6IGZldGNoLXBhY2suYzo0NzUgcHJvZ3Jlc3MuYzozMjMKK21zZ2lkICJkb25lIgorbXNnc3RyICJGZXJ0aWciCisKKyM6IGZldGNoLXBhY2suYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICglZCkgJXMiCittc2dzdHIgIiVzICglZCkgJXMgYmVrb21tZW4iCisKKyM6IGZldGNoLXBhY2suYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyAlcyBhcyBjb21wbGV0ZSIKK21zZ3N0ciAiTWFya2llcmUgJXMgYWxzIHZvbGxzdMOkbmRpZyIKKworIzogZmV0Y2gtcGFjay5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJhbHJlYWR5IGhhdmUgJXMgKCVzKSIKK21zZ3N0ciAiaGFiZSAlcyAoJXMpIGJlcmVpdHMiCisKKyM6IGZldGNoLXBhY2suYzo4MTgKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiZmV0Y2gtcGFjazogRmVobGVyIGJlaW0gU3RhcnRlbiBkZXMgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKKworIzogZmV0Y2gtcGFjay5jOjgyNgorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgIlByb3Rva29sbGZlaGxlcjogdW5nw7xsdGlnZXIgUGFjay1IZWFkZXIiCisKKyM6IGZldGNoLXBhY2suYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIgorbXNnc3RyICJmZXRjaC1wYWNrOiBrb25udGUgJXMgbmljaHQgc3RhcnRlbiIKKworIzogZmV0Y2gtcGFjay5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBmYWlsZWQiCittc2dzdHIgIiVzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBmZXRjaC1wYWNrLmM6OTE4Cittc2dpZCAiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiRmVobGVyIGluIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCisKKyM6IGZldGNoLXBhY2suYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb24gaXMgJS4qcyIKK21zZ3N0ciAiU2VydmVyLVZlcnNpb24gaXN0ICUuKnMiCisKKyM6IGZldGNoLXBhY2suYzo5NzAgZmV0Y2gtcGFjay5jOjk3NiBmZXRjaC1wYWNrLmM6OTc5IGZldGNoLXBhY2suYzo5ODUKKyM6IGZldGNoLXBhY2suYzo5ODkgZmV0Y2gtcGFjay5jOjk5MyBmZXRjaC1wYWNrLmM6OTk3IGZldGNoLXBhY2suYzoxMDAxCisjOiBmZXRjaC1wYWNrLmM6MTAwNSBmZXRjaC1wYWNrLmM6MTAwOSBmZXRjaC1wYWNrLmM6MTAxMyBmZXRjaC1wYWNrLmM6MTAxNworIzogZmV0Y2gtcGFjay5jOjEwMjMgZmV0Y2gtcGFjay5jOjEwMjkgZmV0Y2gtcGFjay5jOjEwMzQgZmV0Y2gtcGFjay5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzICVzIgorbXNnc3RyICJTZXJ2ZXIgdW50ZXJzdMO8dHp0ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6OTcyCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjbGllbnRzIgorbXNnc3RyICJTZXJ2ZXIgdW50ZXJzdMO8dHp0IGtlaW5lIHNoYWxsb3ctQ2xpZW50cyIKKworIzogZmV0Y2gtcGFjay5jOjEwMzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctc2luY2UiCittc2dzdHIgIlNlcnZlciB1bnRlcnN0w7x0enQga2VpbiAtLXNoYWxsb3ctc2luY2UiCisKKyM6IGZldGNoLXBhY2suYzoxMDM3Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LWV4Y2x1ZGUiCittc2dzdHIgIlNlcnZlciB1bnRlcnN0w7x0enQga2VpbiAtLXNoYWxsb3ctZXhjbHVkZSIKKworIzogZmV0Y2gtcGFjay5jOjEwNDEKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLWRlZXBlbiIKK21zZ3N0ciAiU2VydmVyIHVudGVyc3TDvHR6dCBrZWluIC0tZGVlcGVuIgorCisjOiBmZXRjaC1wYWNrLmM6MTA1OAorbXNnaWQgIm5vIGNvbW1vbiBjb21taXRzIgorbXNnc3RyICJrZWluZSBnZW1laW5zYW1lbiBDb21taXRzIgorCisjOiBmZXRjaC1wYWNrLmM6MTA3MCBmZXRjaC1wYWNrLmM6MTUzNgorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogQWJob2xlbiBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGZldGNoLXBhY2suYzoxMjA5Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXF1ZXN0cyIKK21zZ3N0ciAiU2VydmVyIHVudGVyc3TDvHR6dCBrZWluZSBzaGFsbG93LUFuZnJhZ2VuLiIKKworIzogZmV0Y2gtcGFjay5jOjEyMTYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgZmlsdGVyIgorbXNnc3RyICJTZXJ2ZXIgdW50ZXJzdMO8dHp0IEZpbHRlciIKKworIzogZmV0Y2gtcGFjay5jOjEyMzkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVxdWVzdCB0byByZW1vdGUiCittc2dzdHIgImtvbm50ZSBBbmZyYWdlIG5pY2h0IHp1bSBSZW1vdGUgc2NocmVpYmVuIgorCisjOiBmZXRjaC1wYWNrLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIHNlY3Rpb24gaGVhZGVyICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIHZvbiBTZWt0aW9uc2tvcGYgJyVzJy4iCisKKyM6IGZldGNoLXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciCittc2dzdHIgIiclcycgZXJ3YXJ0ZXQsICclcycgZW1wZmFuZ2VuIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGFja25vd2xlZGdtZW50IGxpbmU6ICclcyciCittc2dzdHIgIlVuZXJ3YXJ0ZXRlIEFja25vd2xlZGdtZW50LVplaWxlOiAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGFja3M6ICVkIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJhcmJlaXRlbiB2b24gQUNLUzogJWQiCisKKyM6IGZldGNoLXBhY2suYzoxMzE4Cittc2dpZCAiZXhwZWN0ZWQgcGFja2ZpbGUgdG8gYmUgc2VudCBhZnRlciAncmVhZHknIgorbXNnc3RyICJFcndhcnRldGUgVmVyc2FuZCBlaW5lciBQYWNrZGF0ZWkgbmFjaCAncmVhZHknLiIKKworIzogZmV0Y2gtcGFjay5jOjEzMjAKK21zZ2lkICJleHBlY3RlZCBubyBvdGhlciBzZWN0aW9ucyB0byBiZSBzZW50IGFmdGVyIG5vICdyZWFkeSciCittc2dzdHIgIkVyd2FydGV0ZSBrZWluZW4gVmVyc2FuZCBlaW5lciBhbmRlcmVuIFNla3Rpb24gb2huZSAncmVhZHknLiIKKworIzogZmV0Y2gtcGFjay5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBzaGFsbG93IGluZm86ICVkIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJhcmJlaXRlbiB2b24gU2hhbGxvdy1JbmZvcm1hdGlvbmVuOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgd2FudGVkLXJlZiwgZ290ICclcyciCittc2dzdHIgIndhbnRlZC1yZWYgZXJ3YXJ0ZXQsICclcycgYmVrb21tZW4iCisKKyM6IGZldGNoLXBhY2suYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgd2FudGVkLXJlZjogJyVzJyIKK21zZ3N0ciAiVW5lcndhcnRldGVzIHdhbnRlZC1yZWY6ICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgd2FudGVkIHJlZnM6ICVkIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJhcmJlaXRlbiB2b24gd2FudGVkLXJlZnM6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTc2MgorbXNnaWQgIm5vIG1hdGNoaW5nIHJlbW90ZSBoZWFkIgorbXNnc3RyICJrZWluIMO8YmVyZWluc3RpbW1lbmRlciBSZW1vdGUtQnJhbmNoIgorCisjOiBmZXRjaC1wYWNrLmM6MTc4NSBidWlsdGluL2Nsb25lLmM6Njg5Cittc2dpZCAicmVtb3RlIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHMiCittc2dzdHIgIlJlbW90ZS1SZXBvc2l0b3J5IGhhdCBuaWNodCBhbGxlIGVyZm9yZGVybGljaGVuIE9iamVrdGUgZ2VzZW5kZXQuIgorCisjOiBmZXRjaC1wYWNrLmM6MTgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlbW90ZSByZWYgJXMiCittc2dzdHIgImtlaW5lIHNvbGNoZSBSZW1vdGUtUmVmZXJlbnogJXMiCisKKyM6IGZldGNoLXBhY2suYzoxODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICJEZXIgU2VydmVyIGxlaG50IEFuZnJhZ2UgbmFjaCBuaWNodCBhbmdlYm90ZW5lbSBPYmpla3QgJXMgYWIuIgorCisjOiBncGctaW50ZXJmYWNlLmM6NDA4Cittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGcgYmVpbSBTaWduaWVyZW4gZGVyIERhdGVuIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBncGctaW50ZXJmYWNlLmM6NDM0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAia29ubnRlIHRlbXBvcsOkcmUgRGF0ZWkgbmljaHQgZXJzdGVsbGVuIgorCisjOiBncGctaW50ZXJmYWNlLmM6NDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVyIGxvc2dlbMO2c3RlbiBTaWduYXR1ciBuYWNoICclcyciCisKKyM6IGdyYXBoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JlIGludmFsaWQgY29sb3IgJyUuKnMnIGluIGxvZy5ncmFwaENvbG9ycyIKK21zZ3N0ciAiSWdub3JpZXJlIHVuZ8O8bHRpZ2UgRmFyYmUgJyUuKnMnIGluIGxvZy5ncmFwaENvbG9ycyIKKworIzogZ3JlcC5jOjY2OAorbXNnaWQgIiIKKyJnaXZlbiBwYXR0ZXJuIGNvbnRhaW5zIE5VTEwgYnl0ZSAodmlhIC1mIDxmaWxlPikuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgIgorIndpdGggLVAgdW5kZXIgUENSRSB2MiIKK21zZ3N0ciAiIgorIkFuZ2VnZWJlbmVzIE11c3RlciBlbnRow6RsdCBOVUxMIEJ5dGUgKMO8YmVyIC1mIDxEYXRlaT4pLiBEYXMgd2lyZCBudXIgbWl0IC0iCisiUHVudGVyIFBDUkUgdjIgdW50ZXJzdMO8dHp0LiIKKworIzogZ3JlcC5jOjIxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIiclcyc6IGtvbm50ZSAlcyBuaWNodCBsZXNlbiIKKworIzogZ3JlcC5jOjIxNDUgc2V0dXAuYzoxNjYgYnVpbHRpbi9jbG9uZS5jOjQxMSBidWlsdGluL2RpZmYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBsZXNlbiIKKworIzogZ3JlcC5jOjIxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCIKK21zZ3N0ciAiJyVzJzogcmVhZCgpIHp1IGt1cnoiCisKKyM6IGhlbHAuYzoyMworbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICJBcmJlaXRzdmVyemVpY2huaXMgYW5sZWdlbiAoc2llaGUgYXVjaDogZ2l0IGhlbHAgdHV0b3JpYWwpIgorCisjOiBoZWxwLmM6MjQKK21zZ2lkICJ3b3JrIG9uIHRoZSBjdXJyZW50IGNoYW5nZSAoc2VlIGFsc286IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKK21zZ3N0ciAiYW4gYWt0dWVsbGVuIMOEbmRlcnVuZ2VuIGFyYmVpdGVuIChzaWVoZSBhdWNoOiBnaXQgaGVscCBldmVyeWRheSkiCisKKyM6IGhlbHAuYzoyNQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAiSGlzdG9yaWUgdW5kIFN0YXR1cyB1bnRlcnN1Y2hlbiAoc2llaGUgYXVjaDogZ2l0IGhlbHAgcmV2aXNpb25zKSIKKworIzogaGVscC5jOjI2Cittc2dpZCAiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIKK21zZ3N0ciAiSGlzdG9yaWUgZXJ3ZWl0ZXJuIHVuZCBiZWFyYmVpdGVuIgorCisjOiBoZWxwLmM6MjcKK21zZ2lkICJjb2xsYWJvcmF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHdvcmtmbG93cykiCittc2dzdHIgIm1pdCBhbmRlcmVuIHp1c2FtbWVuYXJiZWl0ZW4gKHNpZWhlIGF1Y2g6IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGhlbHAuYzozMQorbXNnaWQgIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIgorbXNnc3RyICJIYXVwdGJlZmVobGUiCisKKyM6IGhlbHAuYzozMgorbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIE1hbmlwdWxhdG9ycyIKK21zZ3N0ciAiTmViZW5iZWZlaGxlIC8gTWFuaXB1bGF0aW9uZW4iCisKKyM6IGhlbHAuYzozMworbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIk5lYmVuYmVmZWhsZSAvIEFiZnJhZ2VuIgorCisjOiBoZWxwLmM6MzQKK21zZ2lkICJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIKK21zZ3N0ciAibWl0IGFuZGVyZW4gaW50ZXJhZ2llcmVuIgorCisjOiBoZWxwLmM6MzUKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIlN5c3RlbWJlZmVobGUgLyBNYW5pcHVsYXRpb25lbiIKKworIzogaGVscC5jOjM2Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAiU3lzdGVtYmVmZWhsZSAvIEFiZnJhZ2VuIgorCisjOiBoZWxwLmM6MzcKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBTeW5jaW5nIFJlcG9zaXRvcmllcyIKK21zZ3N0ciAiU3lzdGVtYmVmZWhsZSAvIFJlcG9zaXRvcmllcyBzeW5jaHJvbmlzaWVyZW4iCisKKyM6IGhlbHAuYzozOAorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVybmFsIEhlbHBlcnMiCittc2dzdHIgIlN5c3RlbWJlZmVobGUgLyBJbnRlcm5lIEhpbGZzYmVmZWhsZSIKKworIzogaGVscC5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciCittc2dzdHIgIlZvcmhhbmRlbmUgR2l0LUJlZmVobGUgaW4gJyVzJyIKKworIzogaGVscC5jOjMwNQorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAiVm9yaGFuZGVuZSBHaXQtQmVmZWhsZSBhbmRlcnN3byBpbiBJaHJlbSAkUEFUSCIKKworIzogaGVscC5jOjMxNAorbXNnaWQgIlRoZXNlIGFyZSBjb21tb24gR2l0IGNvbW1hbmRzIHVzZWQgaW4gdmFyaW91cyBzaXR1YXRpb25zOiIKK21zZ3N0ciAiQWxsZ2VtZWluZSBHaXQtQmVmZWhsZSwgdmVyd2VuZGV0IGluIHZlcnNjaGllZGVuZW4gU2l0dWF0aW9uZW46IgorCisjOiBoZWxwLmM6MzYzIGdpdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciCittc2dzdHIgIk5pY2h0IHVudGVyc3TDvHR6dGUgQXJ0IHp1ciBCZWZlaGxzYXVmbGlzdHVuZyAnJXMnLiIKKworIzogaGVscC5jOjQwMworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6IgorbXNnc3RyICJEaWUgYWxsZ2VtZWluZW4gR2l0LUFubGVpdHVuZ2VuIHNpbmQ6IgorCisjOiBoZWxwLmM6NTEyCittc2dpZCAiU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIHRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIgorbXNnc3RyICIiCisiU2llaGUgJ2dpdCBoZWxwIDxCZWZlaGw+JywgdW0gbWVociDDvGJlciBlaW5lbiBzcGV6aWZpc2NoZW4gVW50ZXJiZWZlaGwgenUgIgorImxlc2VuLiIKKworIzogaGVscC5jOjUxNworbXNnaWQgIkV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICJFeHRlcm5lIEJlZmVobGUiCisKKyM6IGhlbHAuYzo1MzIKK21zZ2lkICJDb21tYW5kIGFsaWFzZXMiCittc2dzdHIgIkFsaWFzLUJlZmVobGUiCisKKyM6IGhlbHAuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgorbXNnc3RyICIiCisiJyVzJyBzY2hlaW50IGVpbiBnaXQtQmVmZWhsIHp1IHNlaW4sIGtvbm50ZSBhYmVyXG4iCisibmljaHQgYXVzZ2Vmw7xocnQgd2VyZGVuLiBWaWVsbGVpY2h0IGlzdCBnaXQtJXMgZmVobGVyaGFmdD8iCisKKyM6IGhlbHAuYzo2NTUKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAiVWggb2guIEtlaW5lIEdpdC1CZWZlaGxlIGF1ZiBJaHJlbSBTeXN0ZW0gdm9yaGFuZGVuLiIKKworIzogaGVscC5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICIiCisiV0FSTlVORzogU2llIGhhYmVuIEdpdC1CZWZlaGwgJyVzJyBhdXNnZWbDvGhydCwgd2VsY2hlciBuaWNodCBleGlzdGllcnQuIgorCisjOiBoZWxwLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgIlNldHplIGZvcnQgdW50ZXIgZGVyIEFubmFobWUsIGRhc3MgU2llICclcycgbWVpbnRlbi4iCisKKyM6IGhlbHAuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyBpbiAlMC4xZiBzZWNvbmRzLCBhc3N1bWluZyB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAiU2V0emUgaW4gJTAuMWYgU2VrdW5kZW4gZm9ydCB1bnRlciBkZXIgQW5uYWhtZSwgZGFzcyBTaWUgJyVzJyBtZWludGVuLiIKKworIzogaGVscC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6ICclcycgaXN0IGtlaW4gR2l0LUJlZmVobC4gU2llaGUgJ2dpdCAtLWhlbHAnLiIKKworIzogaGVscC5jOjY5OQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmRzIGFyZSIKK21zZ3N0clswXSAiIgorIlxuIgorIkRlciDDpGhubGljaHN0ZSBCZWZlaGwgaXN0IgorbXNnc3RyWzFdICIiCisiXG4iCisiRGllIMOkaG5saWNoc3RlbiBCZWZlaGxlIHNpbmQiCisKKyM6IGhlbHAuYzo3MTQKK21zZ2lkICJnaXQgdmVyc2lvbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHZlcnNpb24gWzxPcHRpb25lbj5dIgorCisjOiBoZWxwLmM6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIlczogJXMgLSAlcyIKKworIzogaGVscC5jOjc4NworbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgorIlxuIgorIkhhYmVuIFNpZSBkYXMgZ2VtZWludD8iCittc2dzdHJbMV0gIiIKKyJcbiIKKyJIYWJlbiBTaWUgZWluZXMgdm9uIGRpZXNlbiBnZW1laW50PyIKKworIzogaWRlbnQuYzozNDkKK21zZ2lkICIiCisiXG4iCisiKioqIFBsZWFzZSB0ZWxsIG1lIHdobyB5b3UgYXJlLlxuIgorIlxuIgorIlJ1blxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyJcbiIKKyJ0byBzZXQgeW91ciBhY2NvdW50J3MgZGVmYXVsdCBpZGVudGl0eS5cbiIKKyJPbWl0IC0tZ2xvYmFsIHRvIHNldCB0aGUgaWRlbnRpdHkgb25seSBpbiB0aGlzIHJlcG9zaXRvcnkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKiogQml0dGUgZ2ViZW4gU2llIGFuLCB3ZXIgU2llIHNpbmQuXG4iCisiXG4iCisiRsO8aHJlbiBTaWVcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisiYXVzLCB1bSBkYXMgYWxzIElocmUgc3RhbmRhcmRtw6TDn2lnZSBJZGVudGl0w6R0IHp1IHNldHplbi5cbiIKKyJMYXNzZW4gU2llIGRpZSBPcHRpb24gXCItLWdsb2JhbFwiIHdlZywgdW0gZGllIElkZW50aXTDpHQgbnVyXG4iCisiZsO8ciBkaWVzZXMgUmVwb3NpdG9yeSB6dSBzZXR6ZW4uXG4iCisKKyM6IGlkZW50LmM6Mzc5Cittc2dpZCAibm8gZW1haWwgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAia2VpbmUgRS1NYWlsIGFuZ2VnZWJlbiB1bmQgYXV0b21hdGlzY2hlIEVya2VubnVuZyBpc3QgZGVha3RpdmllcnQiCisKKyM6IGlkZW50LmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBlbWFpbCBhZGRyZXNzIChnb3QgJyVzJykiCittc2dzdHIgIktvbm50ZSBkaWUgRS1NYWlsLUFkcmVzc2UgbmljaHQgYXV0b21hdGlzY2ggZXJrZW5uZW4gKCclcycgZXJoYWx0ZW4pIgorCisjOiBpZGVudC5jOjQwMQorbXNnaWQgIm5vIG5hbWUgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAia2VpbiBOYW1lIGFuZ2VnZWJlbiB1bmQgYXV0b21hdGlzY2hlIEVya2VubnVuZyBpc3QgZGVha3RpdmllcnQiCisKKyM6IGlkZW50LmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBuYW1lIChnb3QgJyVzJykiCittc2dzdHIgImtvbm50ZSBOYW1lbiBuaWNodCBhdXRvbWF0aXNjaCBlcmtlbm5lbiAoJyVzJyBlcmhhbHRlbikiCisKKyM6IGlkZW50LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGlkZW50IG5hbWUgKGZvciA8JXM+KSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiTGVlcmVyIE5hbWUgaW4gSWRlbnRpZmlrYXRpb24gKGbDvHIgPCVzPikgbmljaHQgZXJsYXVidC4iCisKKyM6IGlkZW50LmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIgorbXNnc3RyICJOYW1lIGJlc3RlaHQgbnVyIGF1cyBuaWNodCBlcmxhdWJ0ZW4gWmVpY2hlbjogJXMiCisKKyM6IGlkZW50LmM6NDM2IGJ1aWx0aW4vY29tbWl0LmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlcyBEYXR1bXNmb3JtYXQ6ICVzIgorCisjOiBsaXN0LW9iamVjdHMuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyB0cmVlIG1vZGUsIGJ1dCBpcyBub3QgYSB0cmVlIgorbXNnc3RyICIiCisiRWludHJhZyAnJXMnIGltIFRyZWUtT2JqZWt0ICVzIGhhdCBUcmVlLU1vZHVzLCBhYmVyIGlzdCBrZWluIFRyZWUtT2JqZWt0IgorCisjOiBsaXN0LW9iamVjdHMuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyBibG9iIG1vZGUsIGJ1dCBpcyBub3QgYSBibG9iIgorbXNnc3RyICJFaW50cmFnICclcycgaW0gVHJlZS1PYmpla3QgJXMgaGF0IEJsb2ItTW9kdXMsIGFiZXIgaXN0IGtlaW4gQmxvYiIKKworIzogbGlzdC1vYmplY3RzLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIHJvb3QgdHJlZSBmb3IgY29tbWl0ICVzIgorbXNnc3RyICJLb25udGUgUm9vdC1UcmVlLU9iamVrdCBmw7xyIENvbW1pdCAlcyBuaWNodCBsYWRlbi4iCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBzcGFyc2UgYmxvYiBpbiAnJXMnIgorbXNnc3RyICJrb25udGUgbmljaHQgYXVmIHBhcnRpZWxsZW4gQmxvYiAnJXMnIHp1Z3JlaWZlbiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugc3BhcnNlIGZpbHRlciBkYXRhIGluICVzIgorbXNnc3RyICJLb25udGUgcGFydGllbGxlIEZpbHRlci1EYXRlbiBpbiAlcyBuaWNodCBwYXJzZW4uIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo1OAorbXNnaWQgImV4cGVjdGVkICd0cmVlOjxkZXB0aD4nIgorbXNnc3RyICIndHJlZTo8VGllZmU+JyBlcndhcnRldCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NzMKK21zZ2lkICJzcGFyc2U6cGF0aCBmaWx0ZXJzIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCIKK21zZ3N0ciAiS2VpbmUgVW50ZXJzdMO8dHp1bmcgZsO8ciBzcGFyc2U6cGF0aCBGaWx0ZXIgbWVociIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBmaWx0ZXItc3BlYyAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlIGZpbHRlci1zcGVjICclcyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtdXN0IGVzY2FwZSBjaGFyIGluIHN1Yi1maWx0ZXItc3BlYzogJyVjJyIKK21zZ3N0ciAiWmVpY2hlbiBpbiBzdWItZmlsdGVyLXNwZWMgbXVzcyBtYXNraWVydCB3ZXJkZW46ICclYyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjE0NAorbXNnaWQgImV4cGVjdGVkIHNvbWV0aGluZyBhZnRlciBjb21iaW5lOiIKK21zZ3N0ciAiZXJ3YXJ0ZXRlIGV0d2FzIG5hY2ggJ2NvbWJpbmU6JyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MjI2Cittc2dpZCAibXVsdGlwbGUgZmlsdGVyLXNwZWNzIGNhbm5vdCBiZSBjb21iaW5lZCIKK21zZ3N0ciAiTWVocmVyZSBmaWx0ZXItc3BlY3Mga8O2bm5lbiBuaWNodCBrb21iaW5pZXJ0IHdlcmRlbi4iCisKKyM6IGxvY2tmaWxlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMuXG4iCisiXG4iCisiQW5vdGhlciBnaXQgcHJvY2VzcyBzZWVtcyB0byBiZSBydW5uaW5nIGluIHRoaXMgcmVwb3NpdG9yeSwgZS5nLlxuIgorImFuIGVkaXRvciBvcGVuZWQgYnkgJ2dpdCBjb21taXQnLiBQbGVhc2UgbWFrZSBzdXJlIGFsbCBwcm9jZXNzZXNcbiIKKyJhcmUgdGVybWluYXRlZCB0aGVuIHRyeSBhZ2Fpbi4gSWYgaXQgc3RpbGwgZmFpbHMsIGEgZ2l0IHByb2Nlc3NcbiIKKyJtYXkgaGF2ZSBjcmFzaGVkIGluIHRoaXMgcmVwb3NpdG9yeSBlYXJsaWVyOlxuIgorInJlbW92ZSB0aGUgZmlsZSBtYW51YWxseSB0byBjb250aW51ZS4iCittc2dzdHIgIiIKKyJLb25udGUgJyVzLmxvY2snIG5pY2h0IGVyc3RlbGxlbjogJXMuXG4iCisiXG4iCisiRWluIGFuZGVyZXIgR2l0LVByb3plc3Mgc2NoZWludCBpbiBkaWVzZW0gUmVwb3NpdG9yeSBhdXNnZWbDvGhydFxuIgorInp1IHdlcmRlbiwgenVtIEJlaXNwaWVsIGVpbiBub2NoIG9mZmVuZXIgRWRpdG9yIHZvbiAnZ2l0IGNvbW1pdCcuXG4iCisiQml0dGUgc3RlbGxlbiBTaWUgc2ljaGVyLCBkYXNzIGFsbGUgUHJvemVzc2UgYmVlbmRldCB3dXJkZW4gdW5kXG4iCisidmVyc3VjaGVuIFNpZSBlcyBlcm5ldXQuIEZhbGxzIGVzIGltbWVyIG5vY2ggZmVobHNjaGzDpGd0LCBrw7ZubnRlXG4iCisiZWluIGZyw7xoZXJlciBHaXQtUHJvemVzcyBpbiBkaWVzZW0gUmVwb3NpdG9yeSBhYmdlc3TDvHJ6dCBzZWluOlxuIgorIkzDtnNjaGVuIFNpZSBkaWUgRGF0ZWkgbWFudWVsbCB1bSBmb3J0enVmYWhyZW4uIgorCisjOiBsb2NrZmlsZS5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMiCittc2dzdHIgIktvbm50ZSAnJXMubG9jaycgbmljaHQgZXJzdGVsbGVuOiAlcyIKKworIzogbWVyZ2UuYzo0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAiTGVzZW4gZGVzIFp3aXNjaGVuc3BlaWNoZXJzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBtZXJnZS5jOjEwNyByZXJlcmUuYzo3MjAgYnVpbHRpbi9hbS5jOjE4NzkgYnVpbHRpbi9hbS5jOjE5MTMKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1NDEgYnVpbHRpbi9jaGVja291dC5jOjgwMCBidWlsdGluL2Nsb25lLmM6ODEwCisjOiBidWlsdGluL3N0YXNoLmM6MjY1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgbmV1ZSBJbmRleC1EYXRlaSBuaWNodCBzY2hyZWliZW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTYKK21zZ2lkICIoYmFkIGNvbW1pdClcbiIKK21zZ3N0ciAiKHVuZ8O8bHRpZ2VyIENvbW1pdClcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiYWRkX2NhY2hlaW5mbyBmw7xyIFBmYWQgJyVzJyBmZWhsZ2VzY2hsYWdlbjsgTWVyZ2Ugd2lyZCBhYmdlYnJvY2hlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRfY2FjaGVpbmZvIGZhaWxlZCB0byByZWZyZXNoIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiIgorImFkZF9jYWNoZWluZm8genVyIEFrdHVhbGlzaWVydW5nIGbDvHIgUGZhZCAnJXMnIGZlaGxnZXNjaGxhZ2VuO1xuIgorIk1lcmdlIHdpcmQgYWJnZWJyb2NoZW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGRlcyBQZmFkZXMgJyVzJyVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAiRW50ZmVybmUgJXMsIHVtIFBsYXR6IGbDvHIgVW50ZXJ2ZXJ6ZWljaG5pcyB6dSBzY2hhZmZlblxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4OTkgbWVyZ2UtcmVjdXJzaXZlLmM6OTE4Cittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAiOiB2aWVsbGVpY2h0IGVpbiBWZXJ6ZWljaG5pcy9EYXRlaS1Lb25mbGlrdD8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkwOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICclcyciCittc2dzdHIgInZlcndlaWdlcmUsIGRhIHVudmVyc2lvbmllcnRlIERhdGVpZW4gaW4gJyVzJyB2ZXJsb3JlbiBnZWhlbiB3w7xyZGVuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NDkgYnVpbHRpbi9jYXQtZmlsZS5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnIgorbXNnc3RyICJrYW5uIE9iamVrdCAlcyAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAiQmxvYiBlcndhcnRldCBmw7xyICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gw5ZmZm5lbiB2b24gJyVzJzogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGVpbmVyIHN5bWJvbGlzY2hlbiBWZXJrbsO8cGZ1bmcgZsO8ciAnJXMnOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgIndlacOfIG5pY2h0IHdhcyBtaXQgJTA2byAlcyAnJXMnIHp1IG1hY2hlbiBpc3QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGNoZWNrZWQgb3V0KSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTWVyZ2Ugdm9uIFN1Ym1vZHVsICVzIChuaWNodCBhdXNnZWNoZWNrdCkuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgbm90IHByZXNlbnQpIgorbXNnc3RyICJGZWhsZXIgYmVpbSBNZXJnZSB2b24gU3VibW9kdWwgJXMgKENvbW1pdHMgbmljaHQgdm9yaGFuZGVuKS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBkb24ndCBmb2xsb3cgbWVyZ2UtYmFzZSkiCittc2dzdHIgIkZlaGxlciBiZWltIE1lcmdlIHZvbiBTdWJtb2R1bCAlcyAoQ29tbWl0cyBmb2xnZW4ga2VpbmVyIE1lcmdlLUJhc2lzKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxMyBtZXJnZS1yZWN1cnNpdmUuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMgdG8gdGhlIGZvbGxvd2luZyBjb21taXQ6IgorbXNnc3RyICJTcHVsZSBTdWJtb2R1bCAlcyB6dSBkZW0gZm9sZ2VuZGVuIENvbW1pdCB2b3I6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjE2IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiU3B1bGUgU3VibW9kdWwgJXMgdm9yIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG1lcmdlIGZvbGxvd2luZyBjb21taXRzIG5vdCBmb3VuZCkiCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBNZXJnZSB2b24gU3VibW9kdWxlICVzIChkZW0gTWVyZ2UgbmFjaGZvbGdlbmRlIENvbW1pdHMgbmljaHQgIgorImdlZnVuZGVuKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChub3QgZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTWVyZ2Ugdm9uIFN1Ym1vZHVsICVzIChrZWluIFZvcnNwdWxlbikiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTYKK21zZ2lkICJGb3VuZCBhIHBvc3NpYmxlIG1lcmdlIHJlc29sdXRpb24gZm9yIHRoZSBzdWJtb2R1bGU6XG4iCittc2dzdHIgIk3DtmdsaWNoZSBBdWZsw7ZzdW5nIGRlcyBNZXJnZXMgZsO8ciBTdWJtb2R1bCBnZWZ1bmRlbjpcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgdGhpcyBpcyBjb3JyZWN0IHNpbXBseSBhZGQgaXQgdG8gdGhlIGluZGV4IGZvciBleGFtcGxlXG4iCisiYnkgdXNpbmc6XG4iCisiXG4iCisiICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcbiIKKyJcbiIKKyJ3aGljaCB3aWxsIGFjY2VwdCB0aGlzIHN1Z2dlc3Rpb24uXG4iCittc2dzdHIgIiIKKyJGYWxscyBkYXMga29ycmVrdCBpc3QsIGbDvGdlbiBTaWUgZXMgZWluZmFjaCBkZXIgU3RhZ2luZy1BcmVhLCB6dW0gQmVpc3BpZWwgIgorIm1pdDpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorImhpbnp1LCB1bSBkaWVzZW4gVm9yc2NobGFnIHp1IGFremVwdGllcmVuLlxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG11bHRpcGxlIG1lcmdlcyBmb3VuZCkiCittc2dzdHIgIkZlaGxlciBiZWltIE1lcmdlIHZvbiBTdWJtb2R1bCAlcyAobWVocmVyZSBNZXJnZXMgZ2VmdW5kZW4pIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzQxCittc2dpZCAiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiCittc2dzdHIgIkZlaGxlciBiZWkgQXVzZsO8aHJ1bmcgZGVzIGludGVybmVuIE1lcmdlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICJLb25udGUgJXMgbmljaHQgenVyIERhdGVuYmFuayBoaW56dWbDvGdlbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvLW1lcmdpbmcgJXMiCittc2dzdHIgImF1dG9tYXRpc2NoZXIgTWVyZ2Ugdm9uICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyB3cml0aW5nIHRvICVzIGluc3RlYWQuIgorbXNnc3RyICIiCisiRmVobGVyOiBWZXJ3ZWlnZXJlIHVudmVyc2lvbmllcnRlIERhdGVpIGJlaSAlcyB6dSB2ZXJsaWVyZW47XG4iCisic2NocmVpYmUgc3RhdHRkZXNzZW4gbmFjaCAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKK21zZ3N0ciAiIgorIktPTkZMSUtUICglcy9sw7ZzY2hlbik6ICVzIGdlbMO2c2NodCBpbiAlcyB1bmQgJXMgaW4gJXMuIFN0YW5kICVzIHZvbiAlcyB3dXJkZSAiCisiaW0gQXJiZWl0c2JlcmVpY2ggZ2VsYXNzZW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZS4iCittc2dzdHIgIiIKKyJLT05GTElLVCAoJXMvbMO2c2NoZW4pOiAlcyBnZWzDtnNjaHQgaW4gJXMgdW5kICVzIG5hY2ggJXMgaW4gJXMuIFN0YW5kICVzIHZvbiAiCisiJXMgd3VyZGUgaW0gQXJiZWl0c2JlcmVpY2ggZ2VsYXNzZW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJLT05GTElLVCAoJXMvbMO2c2NoZW4pOiAlcyBnZWzDtnNjaHQgaW4gJXMgdW5kICVzIGluICVzLiBTdGFuZCAlcyB2b24gJXMgd3VyZGUgIgorImltIEFyYmVpdHNiZXJlaWNoIGJlaSAlcyBnZWxhc3Nlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIktPTkZMSUtUICglcy9sw7ZzY2hlbik6ICVzIGdlbMO2c2NodCBpbiAlcyB1bmQgJXMgbmFjaCAlcyBpbiAlcy4gU3RhbmQgJXMgdm9uICIKKyIlcyB3dXJkZSBpbSBBcmJlaXRzYmVyZWljaCBiZWkgJXMgZ2VsYXNzZW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI2Cittc2dpZCAicmVuYW1lIgorbXNnc3RyICJ1bWJlbmVubmVuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI2Cittc2dpZCAicmVuYW1lZCIKK21zZ3N0ciAidW1iZW5hbm50IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTc3IG1lcmdlLXJlY3Vyc2l2ZS5jOjI0NzIgbWVyZ2UtcmVjdXJzaXZlLmM6MzExNworIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgJXMiCittc2dzdHIgIlZlcndlaWdlcmUgZ2XDpG5kZXJ0ZSBEYXRlaSBiZWkgJXMgenUgdmVybGllcmVuLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU4NworIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzLCBldmVuIHRob3VnaCBpdCdzIGluIHRoZSB3YXkuIgorbXNnc3RyICIiCisiVmVyd2VpZ2VyZSB1bnZlcnNpb25pZXJ0ZSBEYXRlaSBiZWkgJXMgenUgdmVybGllcmVuLCBhdWNoIHdlbm4gZGllc2UgaW0gV2VnICIKKyJpc3QuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gIEFkZGVkICVzIGluICVzIgorbXNnc3RyICIiCisiS09ORkxJS1QgKHVtYmVuZW5uZW4vaGluenVmw7xnZW4pOiBCZW5lbm5lIHVtICVzLT4lcyBpbiAlcy4gJXMgaGluenVnZWbDvGd0IGluICIKKyIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiJXMgaXN0IGVpbiBWZXJ6ZWljaG5pcyBpbiAlcywgZsO8Z2UgZXMgc3RhdHRkZXNzZW4gYWxzICVzIGhpbnp1IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIiCisiVmVyd2VpZ2VyZSB1bnZlcnNpb25pZXJ0ZSBEYXRlaSBiZWkgJXMgenUgdmVybGllcmVuOyBmw7xnZSBzdGF0dGRlc3NlbiAlcyAiCisiaGluenUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lIFwiJXMiCisiXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAiIgorIktPTkZMSUtUICh1bWJlbmVubmVuL3VtYmVuZW5uZW4pOiBCZW5lbm5lIHVtIFwiJXNcIi0+XCIlc1wiIGluIEJyYW5jaCBcIiVzXCIgIgorInVuZCBcIiVzXCItPlwiJXNcIiBpbiBCcmFuY2ggXCIlc1wiJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MTMKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAoYmxlaWJ0IHVuYXVmZ2Vsw7ZzdCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgJXMtPiVzIGluICVzLiBSZW5hbWUgJXMtPiVzIGluICVzIgorbXNnc3RyICIiCisiS09ORkxJS1QgKHVtYmVuZW5uZW4vdW1iZW5lbm5lbik6IEJlbmVubmUgdW0gJXMtPiVzIGluICVzLiBCZW5lbm5lIHVtICVzLT4lcyAiCisiaW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChkaXJlY3RvcnkgcmVuYW1lIHNwbGl0KTogVW5jbGVhciB3aGVyZSB0byBwbGFjZSAlcyBiZWNhdXNlICIKKyJkaXJlY3RvcnkgJXMgd2FzIHJlbmFtZWQgdG8gbXVsdGlwbGUgb3RoZXIgZGlyZWN0b3JpZXMsIHdpdGggbm8gZGVzdGluYXRpb24gIgorImdldHRpbmcgYSBtYWpvcml0eSBvZiB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisiS09ORkxJS1QgKEF1ZnRlaWx1bmcgVmVyemVpY2huaXN1bWJlbmVubnVuZyk6IFVua2xhciwgd28gJXMgenUgcGxhdHppZXJlbiAiCisiaXN0LFxuIgorIndlaWwgVmVyemVpY2huaXMgJXMgenUgbWVocmVyZW4gYW5kZXJlbiBWZXJ6ZWljaG5pc3NlbiB1bWJlbmFubnQgd3VyZGUsICIKKyJ3b2JlaVxuIgorImtlaW5lcyBkaWVzZXIgWmllbGUgZGllIE1laHJoZWl0IGRlciBEYXRlaWVuIGVyaGllbHQuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IEV4aXN0aW5nIGZpbGUvZGlyIGF0ICVzIGluIHRoZSB3YXkgb2YgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWUocykgcHV0dGluZyB0aGUgZm9sbG93aW5nIHBhdGgocykgdGhlcmU6ICVzLiIKK21zZ3N0ciAiIgorIktPTkZMSUtUIChpbXBsaXppdGUgVmVyemVpY2huaXN1bWJlbmVubnVuZyk6IEV4aXN0aWVyZW5kZSBEYXRlaS9QZmFkIGJlaSAlcyAiCisiaW1cbiIKKyJXZWcgdm9uIGltcGxpeml0ZXIgVmVyemVpY2huaXN1bWJlbmVubnVuZywgZGllIHZlcnN1Y2h0LCBlaW5lbiBvZGVyIG1laHJlcmVcbiIKKyJQZmFkZSBkYWhpbiB6dSBzZXR6ZW46ICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBDYW5ub3QgbWFwIG1vcmUgdGhhbiBvbmUgcGF0aCB0byAlczsgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzIHRyaWVkIHRvIHB1dCB0aGVzZSBwYXRocyB0aGVyZTogJXMiCittc2dzdHIgIiIKKyJLT05GTElLVCAoaW1wbGl6aXRlIFZlcnplaWNobmlzdW1iZW5lbm51bmcpOiBLYW5uIG5pY2h0IG1laHIgYWxzIGVpbiBQZmFkICIKKyJ6dVxuIgorIiVzIG1hcHBlbjsgaW1wbGl6aXRlIFZlcnplaWNobmlzdW1iZW5lbm51bmdlbiB2ZXJzdWNodGVuIGRpZXNlIFBmYWRlIGRhaGluXG4iCisienUgc2V0emVuOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgZGlyZWN0b3J5ICVzLT4lcyBpbiAlcy4gUmVuYW1lIGRpcmVjdG9yeSAlcy0iCisiPiVzIGluICVzIgorbXNnc3RyICIiCisiS09ORkxJS1QgKHVtYmVuZW5uZW4vdW1iZW5lbm5lbik6IEJlbmVubmUgVmVyemVpY2huaXMgdW0gJXMtPiVzIGluICVzLlxuIgorIkJlbmVubmUgVmVyemVpY2huaXMgdW0gJXMtPiVzIGluICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNDM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBBdm9pZGluZyBhcHBseWluZyAlcyAtPiAlcyByZW5hbWUgdG8gJXMsIGJlY2F1c2UgJXMgaXRzZWxmIHdhcyAiCisicmVuYW1lZC4iCittc2dzdHIgIiIKKyJXQVJOVU5HOiBWZXJtZWlkZSBVbWJlbmVubnVuZyAlcyAtPiAlcyB2b24gJXMsIHdlaWwgJXMgc2VsYnN0IHVtYmVuYW5udCAiCisid3VyZGUuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyOTYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAia2FubiBPYmpla3QgJXMgbmljaHQgbGVzZW4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIk9iamVrdCAlcyBpc3Qga2VpbiBCbG9iIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDI4Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICLDpG5kZXJuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDI4Cittc2dpZCAibW9kaWZpZWQiCittc2dzdHIgImdlw6RuZGVydCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA0MAorbXNnaWQgImNvbnRlbnQiCittc2dzdHIgIkluaGFsdCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA0NAorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgImhpbnp1ZsO8Z2VuL2hpbnp1ZsO8Z2VuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgJXMgKG1lcmdlZCBzYW1lIGFzIGV4aXN0aW5nKSIKK21zZ3N0ciAiJXMgYXVzZ2VsYXNzZW4gKEVyZ2VibmlzIGRlcyBNZXJnZXMgZXhpc3RpZXJ0IGJlcmVpdHMpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDg5IGdpdC1zdWJtb2R1bGUuc2g6MTAwMworbXNnaWQgInN1Ym1vZHVsZSIKK21zZ3N0ciAiU3VibW9kdWwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIktPTkZMSUtUICglcyk6IE1lcmdlLUtvbmZsaWt0IGluICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICJGw7xnZSBzdGF0dGRlc3NlbiBhbHMgJXMgaGluenUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhdGggdXBkYXRlZDogJXMgYWRkZWQgaW4gJXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gJXM7ICIKKyJtb3ZpbmcgaXQgdG8gJXMuIgorbXNnc3RyICIiCisiUGZhZCBha3R1YWxpc2llcnQ6ICVzIGhpbnp1Z2Vmw7xndCBpbiAlcyBpbm5lcmhhbGIgZWluZXMgVmVyemVpY2huaXNzZXMsIGRhcyAiCisidW1iZW5hbm50IHd1cmRlIGluICVzOyBWZXJzY2hpZWJlIGVzIG5hY2ggJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkICIKKyJpbiAlcywgc3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iCittc2dzdHIgIiIKKyJLT05GTElLVCAoU3BlaWNoZXJvcnQpOiAlcyBoaW56dWdlZsO8Z3QgaW4gJXMgaW5uZXJoYWxiIGVpbmVzIFZlcnplaWNobmlzc2VzLCAiCisiZGFzIHVtYmVuYW5udCB3dXJkZSBpbiAlcywgZXMgc29sbHRlIHZpZWxsZWljaHQgbmFjaCAlcyB2ZXJzY2hvYmVuIHdlcmRlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhdGggdXBkYXRlZDogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gIgorIiVzOyBtb3ZpbmcgaXQgdG8gJXMuIgorbXNnc3RyICIiCisiUGZhZCBha3R1YWxpc2llcnQ6ICVzIHVtYmVuYW5udCBuYWNoICVzIGluICVzLCBpbm5lcmhhbGIgZWluZXMgIgorIlZlcnplaWNobmlzc2VzLCBkYXMgdW1iZW5hbm50IHd1cmRlIGluICVzOyBWZXJzY2hpZWJlIGVzIG5hY2ggJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0ICIKKyJ3YXMgcmVuYW1lZCBpbiAlcywgc3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iCittc2dzdHIgIiIKKyJLT05GTElLVCAoU3BlaWNoZXJvcnQpOiAlcyB1bWJlbmFubnQgbmFjaCAlcyBpbiAlcywgaW5uZXJoYWxiIGVpbmVzICIKKyJWZXJ6ZWljaG5pc3NlcywgZGFzIHVtYmVuYW5udCB3dXJkZSBpbiAlcywgZXMgc29sbHRlIHZpZWxsZWljaHQgbmFjaCAlcyAiCisidmVyc2Nob2JlbiB3ZXJkZW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIgorbXNnc3RyICJFbnRmZXJuZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM1MAorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICJEYXRlaS9WZXJ6ZWljaG5pcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM1NQorbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICJWZXJ6ZWljaG5pcy9EYXRlaSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorIktPTkZMSUtUICglcyk6IEVzIGV4aXN0aWVydCBiZXJlaXRzIGVpbiBWZXJ6ZWljaG5pcyAlcyBpbiAlcy4gRsO8Z2UgJXMgYWxzICVzICIKKyJoaW56dS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNzEKKyMsIGMtZm9ybWF0CiBtc2dpZCAiQWRkaW5nICVzIgotbXNnc3RyICLCuyVzwqsgaGluenVmw7xnZW4iCittc2dzdHIgIkbDvGdlICVzIGhpbnp1IgogCi0jOiBsaWIvaW5kZXgudGNsOjQxMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN0YWdlICVkIHVudHJhY2tlZCBmaWxlcz8iCi1tc2dzdHIgIiVkIHVudmVyc2lvbmllcnRlIERhdGVpZW4gYmVyZWl0c3RlbGxlbj8iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChhZGQvYWRkKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIktPTkZMSUtUIChoaW56dWbDvGdlbi9oaW56dWbDvGdlbik6IE1lcmdlLUtvbmZsaWt0IGluICVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjQyMAotbXNnaWQgIkFkZGluZyBhbGwgY2hhbmdlZCBmaWxlcyIKLW1zZ3N0ciAiQWxsZSBnZcOkbmRlcnRlbiBEYXRlaWVuIGhpbnp1ZsO8Z2VuIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQyNAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSEiCittc2dzdHIgIkJlcmVpdHMgYWt0dWVsbCEiCiAKLSM6IGxpYi9pbmRleC50Y2w6NTAzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCi1tc2dzdHIgIsOEbmRlcnVuZ2VuIGluIERhdGVpIMK7JXPCqyB2ZXJ3ZXJmZW4/IgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQzMworIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiCittc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiBkZXIgXCJUcmVlXCItT2JqZWt0ZSAlcyB1bmQgJXMgZmVobGdlc2NobGFnZW4iCiAKLSM6IGxpYi9pbmRleC50Y2w6NTA4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgotbXNnc3RyICLDhG5kZXJ1bmdlbiBpbiBkaWVzZW4gJWkgRGF0ZWllbiB2ZXJ3ZXJmZW4/IgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzUzNworbXNnaWQgIk1lcmdpbmc6IgorbXNnc3RyICJNZXJnZToiCiAKLSM6IGxpYi9pbmRleC50Y2w6NTE3Ci1tc2dpZCAiQW55IHVuc3RhZ2VkIGNoYW5nZXMgd2lsbCBiZSBwZXJtYW5lbnRseSBsb3N0IGJ5IHRoZSByZXZlcnQuIgotbXNnc3RyICIiCi0iQWxsZSBuaWNodCBiZXJlaXRnZXN0ZWxsdGVuIMOEbmRlcnVuZ2VuIHdlcmRlbiBiZWltIFZlcndlcmZlbiB2ZXJsb3JlbiBnZWhlbi4iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICIldSBnZW1laW5zYW1lbiBWb3Jnw6RuZ2VyLUNvbW1pdCBnZWZ1bmRlbiIKK21zZ3N0clsxXSAiJXUgZ2VtZWluc2FtZSBWb3Jnw6RuZ2VyLUNvbW1pdHMgZ2VmdW5kZW4iCiAKLSM6IGxpYi9pbmRleC50Y2w6NTIwIGxpYi9pbmRleC50Y2w6NTYzCi1tc2dpZCAiRG8gTm90aGluZyIKLW1zZ3N0ciAiTmljaHRzIHR1biIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2MDAKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgIk1lcmdlIGhhdCBrZWluZW4gQ29tbWl0IHp1csO8Y2tnZWdlYmVuIgogCi0jOiBsaWIvaW5kZXgudGNsOjU0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRlbGV0ZSB1bnRyYWNrZWQgZmlsZSAlcz8iCi1tc2dzdHIgIlVudmVyc2lvbmllcnRlIERhdGVpIMK7JXPCqyBsw7ZzY2hlbj8iCi0KLSM6IGxpYi9pbmRleC50Y2w6NTUwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGVsZXRlIHRoZXNlICVpIHVudHJhY2tlZCBmaWxlcz8iCi1tc2dzdHIgIkRpZXNlICVpIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIGzDtnNjaGVuPyIKLQotIzogbGliL2luZGV4LnRjbDo1NjAKLW1zZ2lkICJGaWxlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGRlbGV0ZWQuIgotbXNnc3RyICJEYXRlaWVuIHdlcmRlbiBlbmRnw7xsdGlnIGdlbMO2c2NodC4iCi0KLSM6IGxpYi9pbmRleC50Y2w6NTY0Ci1tc2dpZCAiRGVsZXRlIEZpbGVzIgotbXNnc3RyICJEYXRlaWVuIGzDtnNjaGVuIgotCi0jOiBsaWIvaW5kZXgudGNsOjU4NgotbXNnaWQgIkRlbGV0aW5nIgotbXNnc3RyICJMw7ZzY2hlbiIKLQotIzogbGliL2luZGV4LnRjbDo2NjUKLW1zZ2lkICJFbmNvdW50ZXJlZCBlcnJvcnMgZGVsZXRpbmcgZmlsZXM6XG4iCi1tc2dzdHIgIkZlaGxlciBiZWltIEzDtnNjaGVuIGRlciBEYXRlaWVuOlxuIgotCi0jOiBsaWIvaW5kZXgudGNsOjY3NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vbmUgb2YgdGhlICVkIHNlbGVjdGVkIGZpbGVzIGNvdWxkIGJlIGRlbGV0ZWQuIgotbXNnc3RyICJLZWluZSBkZXIgJWQgZ2V3w6RobHRlbiBEYXRlaWVuIGtvbm50ZW4gZ2Vsw7ZzY2h0IHdlcmRlbi4iCi0KLSM6IGxpYi9pbmRleC50Y2w6Njc5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJWQgb2YgdGhlICVkIHNlbGVjdGVkIGZpbGVzIGNvdWxkIG5vdCBiZSBkZWxldGVkLiIKLW1zZ3N0ciAiJWQgZGVyICVkIGdld8OkaGx0ZW4gRGF0ZWllbiBrb25udGVuIG5pY2h0IGdlbMO2c2NodCB3ZXJkZW4uIgotCi0jOiBsaWIvaW5kZXgudGNsOjcyNgotbXNnaWQgIlJldmVydGluZyBzZWxlY3RlZCBmaWxlcyIKLW1zZ3N0ciAiw4RuZGVydW5nZW4gaW4gZ2V3w6RobHRlbiBEYXRlaWVuIHZlcndlcmZlbiIKLQotIzogbGliL2luZGV4LnRjbDo3MzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnRpbmcgJXMiCi1tc2dzdHIgIsOEbmRlcnVuZ2VuIGluICVzIHZlcndlcmZlbiIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBDaGVja291dCBCcmFuY2giCi1tc2dzdHIgIiVzICglcyk6IEJyYW5jaCBhdXNjaGVja2VuIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyMQotbXNnaWQgIkNoZWNrb3V0IEJyYW5jaCIKLW1zZ3N0ciAiQnJhbmNoIGF1c2NoZWNrZW4iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI2Ci1tc2dpZCAiQ2hlY2tvdXQiCi1tc2dzdHIgIkF1c2NoZWNrZW4iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9vcHRpb24udGNsOjMxMCBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkKLW1zZ2lkICJPcHRpb25zIgotbXNnc3RyICJPcHRpb25lbiIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDIgbGliL2JyYW5jaF9jcmVhdGUudGNsOjkyCi1tc2dpZCAiRmV0Y2ggVHJhY2tpbmcgQnJhbmNoIgotbXNnc3RyICJUcmFja2luZ2JyYW5jaCBhbmZvcmRlcm4iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ3Ci1tc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgotbXNnc3RyICJWZXJiaW5kdW5nIHp1IGxva2FsZW0gQnJhbmNoIGzDtnNlbiIKLQotIzogbGliL3N0YXR1c19iYXIudGNsOjI2MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCi1tc2dzdHIgIiVzIC4uLiAlKmkgdm9uICUqaSAlcyAoJTNpJSUpIgotCi0jOiBsaWIvcmVtb3RlLnRjbDoyMDAKLW1zZ2lkICJQdXNoIHRvIgotbXNnc3RyICJWZXJzZW5kZW4gbmFjaCIKLQotIzogbGliL3JlbW90ZS50Y2w6MjE4Ci1tc2dpZCAiUmVtb3ZlIFJlbW90ZSIKLW1zZ3N0ciAiRXh0ZXJuZXMgUmVwb3NpdG9yeSBlbnRmZXJuZW4iCi0KLSM6IGxpYi9yZW1vdGUudGNsOjIyMwotbXNnaWQgIlBydW5lIGZyb20iCi1tc2dzdHIgIlZlcmFsdGV0ZSBCcmFuY2hlcyBlbnRmZXJuZW4iCi0KLSM6IGxpYi9yZW1vdGUudGNsOjIyOAotbXNnaWQgIkZldGNoIGZyb20iCi1tc2dzdHIgIkFuZm9yZGVybiIKLQotIzogbGliL3JlbW90ZS50Y2w6MjQ5IGxpYi9yZW1vdGUudGNsOjI1MyBsaWIvcmVtb3RlLnRjbDoyNTggbGliL3JlbW90ZS50Y2w6MjY0Ci1tc2dpZCAiQWxsIgotbXNnc3RyICJBbGxlIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBSZW5hbWUgQnJhbmNoIgotbXNnc3RyICIlcyAoJXMpOiBCcmFuY2ggdW1iZW5lbm5lbiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjIzCi1tc2dpZCAiUmVuYW1lIEJyYW5jaCIKLW1zZ3N0ciAiQnJhbmNoIHVtYmVuZW5uZW4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyOAotbXNnaWQgIlJlbmFtZSIKLW1zZ3N0ciAiVW1iZW5lbm5lbiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM4Ci1tc2dpZCAiQnJhbmNoOiIKLW1zZ3N0ciAiQnJhbmNoOiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjQ2Ci1tc2dpZCAiTmV3IE5hbWU6IgotbXNnc3RyICJOZXVlciBOYW1lOiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjgxCi1tc2dpZCAiUGxlYXNlIHNlbGVjdCBhIGJyYW5jaCB0byByZW5hbWUuIgotbXNnc3RyICJCaXR0ZSB3w6RobGVuIFNpZSBlaW5lbiBCcmFuY2ggenVtIHVtYmVuZW5uZW4uIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTIgbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1NAotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBicmFuY2ggbmFtZS4iCi1tc2dzdHIgIkJpdHRlIGdlYmVuIFNpZSBlaW5lbiBCcmFuY2huYW1lbiBhbi4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMTIgbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIgotbXNnc3RyICLCuyVzwqsgaXN0IGtlaW4genVsw6Rzc2lnZXIgQnJhbmNobmFtZS4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgotbXNnc3RyICJGZWhsZXIgYmVpbSBVbWJlbmVubmVuIHZvbiDCuyVzwqsuIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQxCi1tc2dpZCAiU2VsZWN0IgotbXNnc3RyICJBdXN3w6RobGVuIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjU1Ci1tc2dpZCAiRm9udCBGYW1pbHkiCi1tc2dzdHIgIlNjaHJpZnRmYW1pbGllIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjc2Ci1tc2dpZCAiRm9udCBTaXplIgotbXNnc3RyICJTY2hyaWZ0Z3LDtsOfZSIKLQotIzogbGliL2Nob29zZV9mb250LnRjbDo5MwotbXNnaWQgIkZvbnQgRXhhbXBsZSIKLW1zZ3N0ciAiU2NocmlmdGJlaXNwaWVsIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwNQorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzY1OQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVGhpcyBpcyBleGFtcGxlIHRleHQuXG4iCi0iSWYgeW91IGxpa2UgdGhpcyB0ZXh0LCBpdCBjYW4gYmUgeW91ciBmb250LiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIgICVzIgogbXNnc3RyICIiCi0iRGllcyBpc3QgZWluIEJlaXNwaWVsdGV4dC5cbiIKLSJXZW5uIElobmVuIGRpZXNlciBUZXh0IGdlZsOkbGx0LCBzb2xsdGVuIFNpZSBkaWVzZSBTY2hyaWZ0YXJ0IHfDpGhsZW4uIgorIklocmUgbG9rYWxlbiDDhG5kZXJ1bmdlbiBpbiBkZW4gZm9sZ2VuZGVuIERhdGVpZW4gd8O8cmRlbiBkdXJjaCBkZW4gTWVyZ2VcbiIKKyLDvGJlcnNjaHJpZWJlbiB3ZXJkZW46XG4iCisiICAlcyIKIAotIzogbGliL29wdGlvbi50Y2w6MTEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGdsb2JhbCBlbmNvZGluZyAnJXMnIgotbXNnc3RyICJVbmfDvGx0aWdlIGdsb2JhbGUgWmVpY2hlbmtvZGllcnVuZyDCuyVzwqsiCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiS29ubnRlIE9iamVrdCAnJXMnIG5pY2h0IHBhcnNlbi4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjE5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCByZXBvIGVuY29kaW5nICclcyciCi1tc2dzdHIgIlVuZ8O8bHRpZ2UgUmVwb3NpdG9yeS1aZWljaGVua29kaWVydW5nIMK7JXPCqyIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM3NzQgYnVpbHRpbi9tZXJnZS5jOjY5NyBidWlsdGluL21lcmdlLmM6ODc3Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiS29ubnRlIEluZGV4IG5pY2h0IHNjaHJlaWJlbi4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjExOQotbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCi1tc2dzdHIgIlZvcmVpbnN0ZWxsdW5nZW4gd2llZGVyaGVyc3RlbGxlbiIKKyM6IG1pZHguYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4LURhdGVpICVzIGlzdCB6dSBrbGVpbi4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjEyMwotbXNnaWQgIlNhdmUiCi1tc2dzdHIgIlNwZWljaGVybiIKKyM6IG1pZHguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSAweCUwOHggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAiIgorIm11bHRpLXBhY2staW5kZXgtU2lnbmF0dXIgMHglMDh4IHN0aW1tdCBuaWNodCBtaXQgU2lnbmF0dXIgMHglMDh4IMO8YmVyZWluLiIKIAotIzogbGliL29wdGlvbi50Y2w6MTMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiJXMgUmVwb3NpdG9yeSIKKyM6IG1pZHguYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHZlcnNpb24gJWQgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXgtVmVyc2lvbiAlZCBuaWNodCBlcmthbm50LiIKIAotIzogbGliL29wdGlvbi50Y2w6MTM0Ci1tc2dpZCAiR2xvYmFsIChBbGwgUmVwb3NpdG9yaWVzKSIKLW1zZ3N0ciAiR2xvYmFsIChBbGxlIFJlcG9zaXRvcmllcykiCisjOiBtaWR4LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCB2ZXJzaW9uICV1IGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJIYXNoLVZlcnNpb24gJXUgc3RpbW10IG5pY2h0IMO8YmVyZWluLiIKIAotIzogbGliL29wdGlvbi50Y2w6MTQwCi1tc2dpZCAiVXNlciBOYW1lIgotbXNnc3RyICJCZW51dHplcm5hbWUiCisjOiBtaWR4LmM6MTA4Cittc2dpZCAiaW52YWxpZCBjaHVuayBvZmZzZXQgKHRvbyBsYXJnZSkiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIENodW5rLU9mZnNldCAoenUgZ3Jvw58pIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDEKLW1zZ2lkICJFbWFpbCBBZGRyZXNzIgotbXNnc3RyICJFLU1haWwtQWRyZXNzZSIKKyM6IG1pZHguYzoxMzIKK21zZ2lkICJ0ZXJtaW5hdGluZyBtdWx0aS1wYWNrLWluZGV4IGNodW5rIGlkIGFwcGVhcnMgZWFybGllciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICJBYnNjaGxpZcOfZW5kZSBtdWx0aS1wYWNrLWluZGV4IENodW5rLUlkIGVyc2NoZWludCBlaGVyIGFscyBlcndhcnRldC4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjE0MwotbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgotbXNnc3RyICJadXNhbW1lbmbDvGhydW5ncy1Db21taXRzIHp1c2FtbWVuZmFzc2VuIgorIzogbWlkeC5jOjE0NQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBwYWNrLW5hbWUgY2h1bmsiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXggZmVobHQgZXJmb3JkZXJsaWNoZXIgcGFjay1uYW1lIENodW5rLiIKIAotIzogbGliL29wdGlvbi50Y2w6MTQ0Ci1tc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgotbXNnc3RyICJBdXNmw7xocmxpY2hrZWl0IGRlciBadXNhbW1lbmbDvGhyZW4tTWVsZHVuZ2VuIgorIzogbWlkeC5jOjE0NworbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgZmFub3V0IGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IGZlaGx0IGVyZm9yZGVybGljaGVyIE9JRCBmYW5vdXQgQ2h1bmsuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDUKLW1zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgotbXNnc3RyICJWZXJnbGVpY2hzc3RhdGlzdGlrIG5hY2ggWnVzYW1tZW5mw7xocmVuIGFuemVpZ2VuIgorIzogbWlkeC5jOjE0OQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgbG9va3VwIGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IGZlaGx0IGVyZm9yZGVybGljaGVyIE9JRCBsb29rdXAgQ2h1bmsuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDYKLW1zZ2lkICJVc2UgTWVyZ2UgVG9vbCIKLW1zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1ZyIKKyM6IG1pZHguYzoxNTEKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgb2JqZWN0IG9mZnNldHMgY2h1bmsiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXggZmVobHQgZXJmb3JkZXJsaWNoZXIgb2JqZWN0IG9mZnNldCBDaHVuay4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjE0OAotbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCi1tc2dzdHIgIkF1ZiBEYXRlacOkbmRlcnVuZ3NkYXR1bSB2ZXJsYXNzZW4iCisjOiBtaWR4LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggcGFjayBuYW1lcyBvdXQgb2Ygb3JkZXI6ICclcycgYmVmb3JlICclcyciCittc2dzdHIgIkZhbHNjaGUgUmVpaGVuZm9sZ2UgYmVpIG11bHRpLXBhY2staW5kZXggUGFjay1OYW1lbjogJyVzJyB2b3IgJyVzJyIKIAotIzogbGliL29wdGlvbi50Y2w6MTQ5Ci1tc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgotbXNnc3RyICJWZXJhbHRldGUgVHJhY2tpbmdicmFuY2hlcyBlbnRmZXJuZW4gd8OkaHJlbmQgQW5mb3JkZXJ1bmciCisjOiBtaWR4LmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLWludC1pZDogJXUgKCV1IHRvdGFsIHBhY2tzKSIKK21zZ3N0ciAiVW5nw7xsdGlnZSBwYWNrLWludC1pZDogJXUgKCV1IFBha2V0ZSBpbnNnZXNhbXQpIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTAKLW1zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2hlcyIKLW1zZ3N0ciAiTmV1ZSBCcmFuY2hlcyBhdXRvbWF0aXNjaCBhbHMgVHJhY2tpbmdicmFuY2giCisjOiBtaWR4LmM6MjYwCittc2dpZCAibXVsdGktcGFjay1pbmRleCBzdG9yZXMgYSA2NC1iaXQgb2Zmc2V0LCBidXQgb2ZmX3QgaXMgdG9vIHNtYWxsIgorbXNnc3RyICIiCisibXVsdGktcGFjay1pbmRleCBzcGVpY2hlcnQgZWluZW4gNjQtQml0IE9mZnNldCwgYWJlciBvZmZfdCBpc3QgenUga2xlaW4uIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTEKLW1zZ2lkICJVc2UgVGV4dGNvbnYgRm9yIERpZmZzIGFuZCBCbGFtZXMiCi1tc2dzdHIgIkJlbnV0emUgwrt0ZXh0Y29udsKrIGbDvHIgVmVyZ2xlaWNoIHVuZCBBbm5vdGllcmVuIgorIzogbWlkeC5jOjI4OAorbXNnaWQgImVycm9yIHByZXBhcmluZyBwYWNrZmlsZSBmcm9tIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIkZlaGxlciBiZWkgVm9yYmVyZWl0dW5nIGRlciBQYWNrZGF0ZWkgYXVzIG11bHRpLXBhY2staW5kZXguIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTIKLW1zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKLW1zZ3N0ciAiS29waWUtQW5ub3RpZXJlbiBudXIgYmVpIGdlw6RuZGVydGVuIERhdGVpZW4iCisjOiBtaWR4LmM6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhZGQgcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gSGluenVmw7xnZW4gdm9uIFBhY2tkYXRlaSAnJXMnLiIKIAotIzogbGliL29wdGlvbi50Y2w6MTUzCi1tc2dpZCAiTWF4aW11bSBMZW5ndGggb2YgUmVjZW50IFJlcG9zaXRvcmllcyBMaXN0IgotbXNnc3RyICJBbnphaGwgRWludHLDpGdlIGluIMK7TGV0enRlIFJlcG9zaXRvcmllc8KrIgorIzogbWlkeC5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwYWNrLWluZGV4ICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIMOWZmZuZW4gdm9uIHBhY2staW5kZXggJyVzJyIKIAotIzogbGliL29wdGlvbi50Y2w6MTU0Ci1tc2dpZCAiTWluaW11bSBMZXR0ZXJzIFRvIEJsYW1lIENvcHkgT24iCi1tc2dzdHIgIk1pbmRlc3R6YWhsIFplaWNoZW4gZsO8ciBLb3BpZS1Bbm5vdGllcmVuIgorIzogbWlkeC5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9jYXRlIG9iamVjdCAlZCBpbiBwYWNrZmlsZSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTG9rYWxpc2llcmVuIHZvbiBPYmpla3QgJWQgaW4gUGFja2RhdGVpLiIKIAotIzogbGliL29wdGlvbi50Y2w6MTU1Ci1tc2dpZCAiQmxhbWUgSGlzdG9yeSBDb250ZXh0IFJhZGl1cyAoZGF5cykiCi1tc2dzdHIgIkFuemFobCBUYWdlIGbDvHIgQW5ub3RpZXJlbi1IaXN0b3JpZW4tS29udGV4dCIKKyM6IG1pZHguYzo4NDIKK21zZ2lkICJBZGRpbmcgcGFja2ZpbGVzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIlBhY2tkYXRlaWVuIHp1bSBtdWx0aS1wYWNrLWluZGV4IGhpbnp1ZsO8Z2VuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTYKLW1zZ2lkICJOdW1iZXIgb2YgRGlmZiBDb250ZXh0IExpbmVzIgotbXNnc3RyICJBbnphaGwgZGVyIEtvbnRleHR6ZWlsZW4gYmVpbSBWZXJnbGVpY2giCisjOiBtaWR4LmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3Qgc2VlIHBhY2stZmlsZSAlcyB0byBkcm9wIgorbXNnc3RyICJQYWNrLURhdGVpICVzIHp1bSBXZWdsYXNzZW4gbmljaHQgZ2VmdW5kZW4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjE1NwotbXNnaWQgIkFkZGl0aW9uYWwgRGlmZiBQYXJhbWV0ZXJzIgotbXNnc3RyICJadXPDpHR6bGljaGUgVmVyZ2xlaWNoLS9kaWZmLVBhcmFtZXRlciIKKyM6IG1pZHguYzo5NzMKK21zZ2lkICJXcml0aW5nIGNodW5rcyB0byBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJDaHVua3MgenVtIG11bHRpLXBhY2staW5kZXggc2NocmVpYmVuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTgKLW1zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgotbXNnc3RyICJUZXh0YnJlaXRlIGRlciBDb21taXQtQmVzY2hyZWlidW5nIgorIzogbWlkeC5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiCittc2dzdHIgIkZlaGxlciBiZWltIEzDtnNjaGVuIGRlcyBtdWx0aS1wYWNrLWluZGV4IGJlaSAlcyIKIAotIzogbGliL29wdGlvbi50Y2w6MTU5Ci1tc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgotbXNnc3RyICJOYW1lbnN2b3JsYWdlIGbDvHIgbmV1ZSBCcmFuY2hlcyIKKyM6IG1pZHguYzoxMTA4Cittc2dpZCAiTG9va2luZyBmb3IgcmVmZXJlbmNlZCBwYWNrZmlsZXMiCittc2dzdHIgIlN1Y2hlIG5hY2ggcmVmZXJlbnppZXJ0ZW4gUGFjay1EYXRlaWVuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNjAKLW1zZ2lkICJEZWZhdWx0IEZpbGUgQ29udGVudHMgRW5jb2RpbmciCi1tc2dzdHIgIlZvcmVpbmdlc3RlbGx0ZSBaZWljaGVua29kaWVydW5nIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNjEKLW1zZ2lkICJXYXJuIGJlZm9yZSBjb21taXR0aW5nIHRvIGEgZGV0YWNoZWQgaGVhZCIKLW1zZ3N0ciAiV2FybmVuIHZvciBDb21taXR0ZW4gYXVmIGxvc2dlbMO2c3RlIEJyYW5jaHNwaXR6ZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTYyCi1tc2dpZCAiU3RhZ2luZyBvZiB1bnRyYWNrZWQgZmlsZXMiCi1tc2dzdHIgIlVudmVyc2lvbmllcnRlIERhdGVpZW4gYmVyZWl0c3RlbGxlbiIKLQotIzogbGliL29wdGlvbi50Y2w6MTYzCi1tc2dpZCAiU2hvdyB1bnRyYWNrZWQgZmlsZXMiCi1tc2dzdHIgIlVudmVyc2lvbmllcnRlIERhdGVpZW4gYW56ZWlnZW4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjE2NAotbXNnaWQgIlRhYiBzcGFjaW5nIgotbXNnc3RyICJUYWJ1bGF0b3ItQnJlaXRlIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxODIgbGliL29wdGlvbi50Y2w6MTk3IGxpYi9vcHRpb24udGNsOjIyMCBsaWIvb3B0aW9uLnRjbDoyODIKLSM6IGxpYi9kYXRhYmFzZS50Y2w6NTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlczoiCi1tc2dzdHIgIiVzOiIKLQotIzogbGliL29wdGlvbi50Y2w6MjEwCi1tc2dpZCAiQ2hhbmdlIgotbXNnc3RyICLDhG5kZXJuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyNTQKLW1zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKLW1zZ3N0ciAiV8O2cnRlcmJ1Y2ggUmVjaHRzY2hyZWlicHLDvGZ1bmc6IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyODQKLW1zZ2lkICJDaGFuZ2UgRm9udCIKLW1zZ3N0ciAiU2NocmlmdGFydCDDpG5kZXJuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyODgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDaG9vc2UgJXMiCi1tc2dzdHIgIiVzIHfDpGhsZW4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjI5NAotbXNnaWQgInB0LiIKLW1zZ3N0ciAicHQuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDozMDgKLW1zZ2lkICJQcmVmZXJlbmNlcyIKLW1zZ3N0ciAiRWluc3RlbGx1bmdlbiIKLQotIzogbGliL29wdGlvbi50Y2w6MzQ1Ci1tc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKLW1zZ3N0ciAiT3B0aW9uZW4ga29ubnRlbiBuaWNodCBnZXNwZWljaGVydCB3ZXJkZW46IgotCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ0MwotbXNnaWQgIkRlZmF1bHQiCi1tc2dzdHIgIlZvcmVpbnN0ZWxsdW5nIgotCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ0OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN5c3RlbSAoJXMpIgotbXNnc3RyICJTeXN0ZW13ZWl0ICglcykiCi0KLSM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Ci1tc2dpZCAiT3RoZXIiCi1tc2dzdHIgIkFuZGVyZSIKLQotIzogbGliL3Rvb2xzLnRjbDo3NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKLW1zZ3N0ciAiVW0gwrslc8KrIHp1IHN0YXJ0ZW4sIG11c3MgZWluZSBEYXRlaSBhdXNnZXfDpGhsdCBzZWluLiIKLQotIzogbGliL3Rvb2xzLnRjbDo5MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJTEkcyBvbiBmaWxlIFwiJTIkc1wiPyIKLW1zZ3N0ciAiV29sbGVuIFNpZSAlMSRzIHdpcmtsaWNoIGF1ZiBEYXRlaSDCuyUyJHPCqyBzdGFydGVuPyIKLQotIzogbGliL3Rvb2xzLnRjbDo5NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJXM/IgotbXNnc3RyICJXb2xsZW4gU2llICVzIHdpcmtsaWNoIHN0YXJ0ZW4/IgotCi0jOiBsaWIvdG9vbHMudGNsOjExOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2w6ICVzIgotbXNnc3RyICJXZXJremV1ZzogJXMiCi0KLSM6IGxpYi90b29scy50Y2w6MTE5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVubmluZzogJXMiCi1tc2dzdHIgIlN0YXJ0ZW46ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjE1OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCi1tc2dzdHIgIldlcmt6ZXVnIGVyZm9sZ3JlaWNoIGFiZ2VzY2hsb3NzZW46ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjE2MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgZmFpbGVkOiAlcyIKLW1zZ3N0ciAiV2Vya3pldWcgZmVobGdlc2NobGFnZW46ICVzIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo4Ci1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKLW1zZ3N0ciAiS29uZmxpa3QgZHVyY2ggQmFzaXN2ZXJzaW9uIGVyc2V0emVuPyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6OQotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhpcyBicmFuY2g/IgotbXNnc3RyICJLb25mbGlrdCBkdXJjaCBkaWVzZW4gQnJhbmNoIGVyc2V0emVuPyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MTAKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBvdGhlciBicmFuY2g/IgotbXNnc3RyICJLb25mbGlrdCBkdXJjaCBhbmRlcmVuIEJyYW5jaCBlcnNldHplbj8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0Ci0jLCB0Y2wtZm9ybWF0CisjOiBtaWR4LmM6MTEyMworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKLSJcbiIKLSIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgotIlxuIgotIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCisib2lkIGZhbm91dCBvdXQgb2Ygb3JkZXI6IGZhbm91dFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSBmYW5vdXRbJWRdIgogbXNnc3RyICIiCi0iSGlud2VpczogRGVyIFZlcmdsZWljaCB6ZWlndCBudXIga29uZmxpa3R2ZXJ1cnNhY2hlbmRlIMOEbmRlcnVuZ2VuIGFuLlxuIgotIlxuIgotIsK7JXPCqyB3aXJkIMO8YmVyc2NocmllYmVuLlxuIgotIlxuIgotIkRpZXNlIE9wZXJhdGlvbiBrYW5uIG51ciByw7xja2fDpG5naWcgZ2VtYWNodCB3ZXJkZW4sIHdlbm4gZGllXG4iCi0iWnVzYW1tZW5mw7xocnVuZyBlcm5ldXQgZ2VzdGFydGV0IHdpcmQuIgorIlVuZ8O8bHRpZ2Ugb2lkIGZhbm91dCBSZWloZW5mb2xnZTogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9ICIKKyJmYW5vdXRbJWRdIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgotbXNnc3RyICJEYXRlaSDCuyVzwqsgaGF0IG5pY2h0IGF1ZmdlbMO2c3RlIEtvbmZsaWt0ZS4gVHJvdHpkZW0gYmVyZWl0c3RlbGxlbj8iCisjOiBtaWR4LmM6MTEyOAorbXNnaWQgIlZlcmlmeWluZyBPSUQgb3JkZXIgaW4gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiVmVyaWZpemllcmUgT0lELVJlaWhlbmZvbGdlIGltIG11bHRpLXBhY2staW5kZXgiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWRkaW5nIHJlc29sdXRpb24gZm9yICVzIgotbXNnc3RyICJBdWZsw7ZzdW5nIGhpbnp1Z2Vmw7xndCBmw7xyICVzIgorIzogbWlkeC5jOjExMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAib2lkIGxvb2t1cCBvdXQgb2Ygb3JkZXI6IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCittc2dzdHIgIlVuZ8O8bHRpZ2Ugb2lkIGxvb2t1cCBSZWloZW5mb2xnZTogb2lkWyVkXSA9ICVzID49ICVzID0gb2lkWyVkXSIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MTQxCi1tc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgotbXNnc3RyICIiCi0iS29uZmxpa3RlIGR1cmNoIGdlbMO2c2NodGUgRGF0ZWllbiBvZGVyIHN5bWJvbGlzY2hlIExpbmtzIGvDtm5uZW4gbmljaHQgZHVyY2ggIgotImRhcyBadXNhbWVuZsO8aHJ1bmdzd2Vya3pldWcgZ2Vsw7ZzdCB3ZXJkZW4uIgorIzogbWlkeC5jOjExNTcKK21zZ2lkICJTb3J0aW5nIG9iamVjdHMgYnkgcGFja2ZpbGUiCittc2dzdHIgIlNvcnRpZXJlIE9iamVrdGUgbmFjaCBQYWNrLURhdGVpIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKLW1zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgotbXNnc3RyICJLb25mbGlrdC1EYXRlaSBleGlzdGllcnQgbmljaHQiCisjOiBtaWR4LmM6MTE2NAorbXNnaWQgIlZlcmlmeWluZyBvYmplY3Qgb2Zmc2V0cyIKK21zZ3N0ciAiw5xiZXJwcsO8ZmUgT2JqZWt0LU9mZnNldHMiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjI0NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgotbXNnc3RyICJLZWluIEdVSSBadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnOiDCuyVzwqsiCisjOiBtaWR4LmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrIGVudHJ5IGZvciBvaWRbJWRdID0gJXMiCittc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlcyBQYWNrLUVpbnRyYWdzIGbDvHIgb2lkWyVkXSA9ICVzIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoyNzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbnN1cHBvcnRlZCBtZXJnZSB0b29sICclcyciCi1tc2dzdHIgIlVuYmVrYW5udGVzIFp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWc6IMK7JXPCqyIKKyM6IG1pZHguYzoxMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2staW5kZXggZm9yIHBhY2tmaWxlICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXMgUGFjay1JbmRleCBmw7xyIFBhY2tkYXRlaSAlcyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzEwCi1tc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWcgbMOkdWZ0IGJlcmVpdHMuIFNvbGwgZXMgYWJnZWJyb2NoZW4gd2VyZGVuPyIKKyM6IG1pZHguYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImluY29ycmVjdCBvYmplY3Qgb2Zmc2V0IGZvciBvaWRbJWRdID0gJXM6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCittc2dzdHIgIkZhbHNjaGVyIE9iamVrdC1PZmZzZXQgZsO8ciBvaWRbJWRdID0gJXM6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjMzMAotIywgdGNsLWZvcm1hdAorIzogbWlkeC5jOjEyMjAKK21zZ2lkICJDb3VudGluZyByZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgIlJlZmVyZW56aWVydGUgT2JqZWt0ZSB6w6RobGVuIgorCisjOiBtaWR4LmM6MTIzMAorbXNnaWQgIkZpbmRpbmcgYW5kIGRlbGV0aW5nIHVucmVmZXJlbmNlZCBwYWNrZmlsZXMiCittc2dzdHIgIlN1Y2hlbiB1bmQgTMO2c2NoZW4gdm9uIHVucmVmZXJlbnppZXJ0ZW4gUGFjay1EYXRlaWVuIgorCisjOiBtaWR4LmM6MTM4OAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMiCittc2dzdHIgIktvbm50ZSAncGFjay1vYmplY3RzJyBuaWNodCBhdXNmw7xocmVuIgorCisjOiBtaWR4LmM6MTQwNworbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggcGFjay1vYmplY3RzIgorbXNnc3RyICJLb25udGUgJ3BhY2stb2JqZWN0cycgbmljaHQgYmVlbmRlbiIKKworIzogbmFtZS1oYXNoLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9kaXIgdGhyZWFkOiAlcyIKK21zZ3N0ciAiS2FubiBsYXp5X2RpciBUaHJlYWQgbmljaHQgZXJ6ZXVnZW46ICVzIgorCisjOiBuYW1lLWhhc2guYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsYXp5X25hbWUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiS2FubiBsYXp5X25hbWUgVGhyZWFkIG5pY2h0IGVyemV1Z2VuOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJLYW5uIGxhenlfbmFtZSBUaHJlYWQgbmljaHQgYmVpdHJldGVuOiAlcyIKKworIzogbm90ZXMtbWVyZ2UuYzoyNzcKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkVycm9yIHJldHJpZXZpbmcgdmVyc2lvbnM6XG4iCi0iJXMiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIHByZXZpb3VzIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLlxuIgorIlBsZWFzZSwgdXNlICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG9yICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcgdG8gIgorImNvbW1pdC9hYm9ydCB0aGUgcHJldmlvdXMgbWVyZ2UgYmVmb3JlIHlvdSBzdGFydCBhIG5ldyBub3RlcyBtZXJnZS4iCiBtc2dzdHIgIiIKLSJGZWhsZXIgYmVpbSBBYnJ1ZmVuIGRlciBEYXRlaXZlcnNpb25lbjpcbiIKLSIlcyIKKyJTaWUgaGFiZW4gSWhyZW4gdm9yaGVyaWdlbiBNZXJnZSB2b24gTm90aXplbiBuaWNodCBhYmdlc2NobG9zc2VuICglcyAiCisiZXhpc3RpZXJ0KS5cbiIKKyJCaXR0ZSBiZW51dHplbiBTaWUgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcgb2RlciAnZ2l0IG5vdGVzIG1lcmdlIC0tIgorImFib3J0JywgdW1cbiIKKyJkZW4gdm9yaGVyaWdlbiBNZXJnZSB6dSBjb21taXR0ZW4gYnp3LiBhYnp1YnJlY2hlbiwgYmV2b3IgU2llIGVpbmVuIG5ldWVuICIKKyJNZXJnZVxuIgorInZvbiBOb3RpemVuIGJlZ2lubmVuLiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzUwCi0jLCB0Y2wtZm9ybWF0CisjOiBub3Rlcy1tZXJnZS5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuIgorbXNnc3RyICJTaWUgaGFiZW4gSWhyZW4gTWVyZ2Ugdm9uIE5vdGl6ZW4gbmljaHQgYWJnZXNjaGxvc3NlbiAoJXMgZXhpc3RpZXJ0KS4iCisKKyM6IG5vdGVzLXV0aWxzLmM6NDYKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIiIKKyJLYW5uIHVuaW5pdGlhbGlzaWVydGVzL3VucmVmZXJlbnppZXJ0ZXMgTm90aXotVmVyemVpY2huaXMgbmljaHQgY29tbWl0dGVuLiIKKworIzogbm90ZXMtdXRpbHMuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlciBub3Rlcy5yZXdyaXRlTW9kZSBXZXJ0OiAnJXMnIgorCisjOiBub3Rlcy11dGlscy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiIgorIlVtc2NocmVpYmVuIGRlciBOb3RpemVuIGluICVzIHp1csO8Y2tnZXdpZXNlbiAoYXXDn2VyaGFsYiB2b24gcmVmcy9ub3Rlcy8pIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mCisjLiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMKKyMuIGl0cyB2YWx1ZS4KKyMuCisjOiBub3Rlcy11dGlscy5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2VyICVzIFdlcnQ6ICclcyciCisKKyM6IG9iamVjdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUgXCIlc1wiIgorbXNnc3RyICJVbmfDvGx0aWdlciBPYmpla3R0eXAgXCIlc1wiIgorCisjOiBvYmplY3QuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIGEgJXMsIG5vdCBhICVzIgorbXNnc3RyICJPYmpla3QgJXMgaXN0IGVpbiAlcywga2VpbiAlcyIKKworIzogb2JqZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBoYXMgdW5rbm93biB0eXBlIGlkICVkIgorbXNnc3RyICJPYmpla3QgJXMgaGF0IGVpbmUgdW5iZWthbm50ZSBUeXAtSWRlbnRpZmlrYXRpb24gJWQiCisKKyM6IG9iamVjdC5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIKK21zZ3N0ciAiS29ubnRlIE9iamVrdCAnJXMnIG5pY2h0IHBhcnNlbi4iCisKKyM6IG9iamVjdC5jOjI2NiBvYmplY3QuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCAlcyIKK21zZ3N0ciAiSGFzaCBzdGltbXQgbmljaHQgbWl0ICVzIMO8YmVyZWluLiIKKworIzogcGFja2ZpbGUuYzo2MjkKK21zZ2lkICJvZmZzZXQgYmVmb3JlIGVuZCBvZiBwYWNrZmlsZSAoYnJva2VuIC5pZHg/KSIKK21zZ3N0ciAiT2Zmc2V0IHZvciBFbmRlIGRlciBQYWNrZGF0ZWkgKGZlaGxlcmhhZnRlIEluZGV4ZGF0ZWk/KSIKKworIzogcGFja2ZpbGUuYzoxODk5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZWZvcmUgc3RhcnQgb2YgcGFjayBpbmRleCBmb3IgJXMgKGNvcnJ1cHQgaW5kZXg/KSIKK21zZ3N0ciAiT2Zmc2V0IHZvciBCZWdpbm4gZGVzIFBhY2stSW5kZXggZsO8ciAlcyAoYmVzY2jDpGRpZ3RlciBJbmRleD8pIgorCisjOiBwYWNrZmlsZS5jOjE5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFjayBpbmRleCBmb3IgJXMgKHRydW5jYXRlZCBpbmRleD8pIgorbXNnc3RyICJPZmZzZXQgaGludGVyIEVuZGUgZGVzIFBhY2stSW5kZXggZsO8ciAlcyAoYWJnZXNjaG5pdHRlbmVyIEluZGV4PykiCisKKyM6IHBhY2stYml0bWFwLmM6ODAwIHBhY2stYml0bWFwLmM6ODA2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHNpemUgb2YgJXMiCittc2dzdHIgIktvbm50ZSBHcsO2w59lIHZvbiAlcyBuaWNodCBiZXN0aW1tZW4uIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiJXMgZXJmb3JkZXJ0IGVpbmVuIFdlcnQuIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJXMiCittc2dzdHIgIiVzIGlzdCBpbmtvbXBhdGliZWwgbWl0ICVzLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogaW5jb21wYXRpYmxlIHdpdGggc29tZXRoaW5nIGVsc2UiCittc2dzdHIgIiVzOiBpbmtvbXBhdGliZWwgbWl0IGV0d2FzIGFuZGVyZW0iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MiBwYXJzZS1vcHRpb25zLmM6OTYgcGFyc2Utb3B0aW9ucy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0YWtlcyBubyB2YWx1ZSIKK21zZ3N0ciAiJXMgZXJ3YXJ0ZXQga2VpbmVuIFdlcnQiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpc24ndCBhdmFpbGFibGUiCittc2dzdHIgIiVzIGlzdCBuaWNodCB2ZXJmw7xnYmFyLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2l0aCBhbiBvcHRpb25hbCBrL20vZyBzdWZmaXgiCittc2dzdHIgIiIKKyIlcyBlcndhcnRldCBlaW5lbiBuaWNodC1uZWdhdGl2ZW4gSW50ZWdlci1XZXJ0IG1pdCBlaW5lbSBvcHRpb25hbGVuIGsvbS9nICIKKyJTdWZmaXgiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIG9wdGlvbjogJXMgKGNvdWxkIGJlIC0tJXMlcyBvciAtLSVzJXMpIgorbXNnc3RyICJNZWhyZGV1dGlnZSBPcHRpb246ICVzIChrYW5uIC0tJXMlcyBvZGVyIC0tJXMlcyBzZWluKSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjQyMCBwYXJzZS1vcHRpb25zLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyk/IgorbXNnc3RyICJNZWludGVuIFNpZSBgLS0lc2AgKG1pdCB6d2VpIFN0cmljaGVuKT8iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gYCVzJyIKK21zZ3N0ciAiVW5iZWthbm50ZSBPcHRpb246IGAlcyciCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzd2l0Y2ggYCVjJyIKK21zZ3N0ciAiVW5iZWthbm50ZXIgU2NoYWx0ZXIgYCVjJyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vbi1hc2NpaSBvcHRpb24gaW4gc3RyaW5nOiBgJXMnIgorbXNnc3RyICJVbmJla2FubnRlIG5pY2h0LUFzY2lpIE9wdGlvbiBpbiBTdHJpbmc6IGAlcyciCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4ODUKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgIlZlcndlbmR1bmc6ICVzIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uIGhlcmUgc2hvdWxkIGFsaWduIHdpdGggdGhlCisjLiBvbmUgaW4gInVzYWdlOiAlcyIgdHJhbnNsYXRpb24uCisjLgorIzogcGFyc2Utb3B0aW9ucy5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICIgICBvcjogJXMiCittc2dzdHIgIiAgICAgIG9kZXI6ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTUyCittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLU5VTSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBvZiAtLSVzIgorbXNnc3RyICJBbGlhcyBmw7xyIC0tJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoyMCBwYXJzZS1vcHRpb25zLWNiLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiT3B0aW9uIGAlcycgZXJ3YXJ0ZXQgZWluZW4gbnVtZXJpc2NoZW4gV2VydC4iCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZXhwaXJhdGlvbiBkYXRlICclcyciCittc2dzdHIgIkZlaGxlcmhhZnRlcyBBYmxhdWZkYXR1bSAnJXMnIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBcImFsd2F5c1wiLCBcImF1dG9cIiwgb3IgXCJuZXZlclwiIgorbXNnc3RyICJPcHRpb24gYCVzJyBlcndhcnRldCBcImFsd2F5c1wiLCBcImF1dG9cIiBvZGVyIFwibmV2ZXJcIi4iCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoxMzAgcGFyc2Utb3B0aW9ucy1jYi5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAiZmVobGVyaGFmdGVyIE9iamVrdC1OYW1lICclcyciCisKKyM6IHBhdGguYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgIktvbm50ZSBHcnVwcGVuc2NocmVpYnJlY2h0IGbDvHIgJXMgbmljaHQgc2V0emVuLiIKKworIzogcGF0aHNwZWMuYzoxMzAKK21zZ2lkICJFc2NhcGUgY2hhcmFjdGVyICdcXCcgbm90IGFsbG93ZWQgYXMgbGFzdCBjaGFyYWN0ZXIgaW4gYXR0ciB2YWx1ZSIKK21zZ3N0ciAiRXNjYXBlLVplaWNoZW4gJ1xcJyBhbHMgbGV0enRlcyBaZWljaGVuIGluIEF0dHJpYnV0d2VydCBuaWNodCBlcmxhdWJ0IgorCisjOiBwYXRoc3BlYy5jOjE0OAorbXNnaWQgIk9ubHkgb25lICdhdHRyOicgc3BlY2lmaWNhdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiRXMgaXN0IG51ciBlaW5lIEFuZ2FiZSB2b24gJ2F0dHI6JyBlcmxhdWJ0LiIKKworIzogcGF0aHNwZWMuYzoxNTEKK21zZ2lkICJhdHRyIHNwZWMgbXVzdCBub3QgYmUgZW1wdHkiCittc2dzdHIgIkFuZ2FiZSB2b24gJ2F0dHI6JyBkYXJmIG5pY2h0IGxlZXIgc2VpbiIKKworIzogcGF0aHNwZWMuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUgbmFtZSAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgQXR0cmlidXRuYW1lICVzIgorCisjOiBwYXRoc3BlYy5jOjI1OQorbXNnaWQgImdsb2JhbCAnZ2xvYicgYW5kICdub2dsb2InIHBhdGhzcGVjIHNldHRpbmdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKyJHbG9iYWxlIEVpbnN0ZWxsdW5nZW4genVyIFBmYWRzcGV6aWZpa2F0aW9uICdnbG9iJyB1bmQgJ25vZ2xvYicgc2luZCAiCisiaW5rb21wYXRpYmVsLiIKKworIzogcGF0aHNwZWMuYzoyNjYKIG1zZ2lkICIiCi0iQ291bGQgbm90IHN0YXJ0IHRoZSBtZXJnZSB0b29sOlxuIgotIlxuIgotIiVzIgorImdsb2JhbCAnbGl0ZXJhbCcgcGF0aHNwZWMgc2V0dGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgZ2xvYmFsICIKKyJwYXRoc3BlYyBzZXR0aW5ncyIKIG1zZ3N0ciAiIgotIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWcga29ubnRlIG5pY2h0IGdlc3RhcnRldCB3ZXJkZW46XG4iCi0iXG4iCi0iJXMiCisiR2xvYmFsZSBFaW5zdGVsbHVuZyB6dXIgUGZhZHNwZXppZmlrYXRpb24gJ2xpdGVyYWwnIGlzdCBpbmtvbXBhdGliZWxcbiIKKyJtaXQgYWxsZW4gYW5kZXJlbiBPcHRpb25lbi4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM1NAotbXNnaWQgIlJ1bm5pbmcgbWVyZ2UgdG9vbC4uLiIKLW1zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1ZyBzdGFydGVuLi4uIgorIzogcGF0aHNwZWMuYzozMDYKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgcGF0aHNwZWMgbWFnaWMgJ3ByZWZpeCciCittc2dzdHIgInVuZ8O8bHRpZ2VyIFBhcmFtZXRlciBmw7xyIFBmYWRzcGV6aWZpa2F0aW9uc2FuZ2FiZSAncHJlZml4JyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzgyIGxpYi9tZXJnZXRvb2wudGNsOjM5MAotbXNnaWQgIk1lcmdlIHRvb2wgZmFpbGVkLiIKLW1zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1ZyBmZWhsZ2VzY2hsYWdlbi4iCisjOiBwYXRoc3BlYy5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIgorbXNnc3RyICJ1bmfDvGx0aWdlIFBmYWRzcGV6aWZpa2F0aW9uc2FuZ2FiZSAnJS4qcycgaW4gJyVzJyIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBBZGQgVG9vbCIKLW1zZ3N0ciAiJXMgKCVzKTogV2Vya3pldWcgaGluenVmw7xnZW4iCisjOiBwYXRoc3BlYy5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcpJyBhdCB0aGUgZW5kIG9mIHBhdGhzcGVjIG1hZ2ljIGluICclcyciCittc2dzdHIgIkZlaGxlbmRlcyAnKScgYW0gRW5kZSBkZXIgUGZhZHNwZXppZmlrYXRpb25zYW5nYWJlIGluICclcyciCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjI4Ci1tc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCi1tc2dzdHIgIk5ldWVzIEtvbW1hbmRvIGbDvHIgV2Vya3pldWcgaGluenVmw7xnZW4iCisjOiBwYXRoc3BlYy5jOjM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmltcGxlbWVudGVkIHBhdGhzcGVjIG1hZ2ljICclYycgaW4gJyVzJyIKK21zZ3N0ciAibmljaHQgdW50ZXJzdMO8dHp0ZSBQZmFkc3BlemlmaWthdGlvbnNhbmdhYmUgJyVjJyBpbiAnJXMnIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDozNAotbXNnaWQgIkFkZCBnbG9iYWxseSIKLW1zZ3N0ciAiR2xvYmFsIGhpbnp1ZsO8Z2VuIgorIzogcGF0aHNwZWMuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICdsaXRlcmFsJyBhbmQgJ2dsb2InIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiVzOiAnbGl0ZXJhbCcgdW5kICdnbG9iJyBzaW5kIGlua29tcGF0aWJlbCIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6NDYKLW1zZ2lkICJUb29sIERldGFpbHMiCi1tc2dzdHIgIkVpbnplbGhlaXRlbiBkZXMgV2Vya3pldWdzIgorIzogcGF0aHNwZWMuYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IGF0ICclcyciCittc2dzdHIgIiVzOiAnJXMnIGxpZWd0IGF1w59lcmhhbGIgZGVzIFJlcG9zaXRvcmllcyB2b24gJyVzJyIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6NDkKLW1zZ2lkICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiIKLW1zZ3N0ciAiQmVudXR6ZW4gU2llIGVpbmVuIFNjaHLDpGdzdHJpY2ggwrsvwqssIHVtIFVudGVybWVuw7xzIHp1IGVyc3RlbGxlbjoiCisjOiBwYXRoc3BlYy5jOjUxNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIChtbmVtb25pYzogJyVjJykiCittc2dzdHIgIiclcycgKEvDvHJ6ZWw6ICclYycpIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo2MAotbXNnaWQgIkNvbW1hbmQ6IgotbXNnc3RyICJLb21tYW5kbzoiCisjOiBwYXRoc3BlYy5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIiCisiJXM6IFBmYWRzcGV6aWZpa2F0aW9uc2FuZ2FiZSB3aXJkIHZvbiBkaWVzZW0gQmVmZWhsIG5pY2h0IHVudGVyc3TDvHR6dDogJXMiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjcxCi1tc2dpZCAiU2hvdyBhIGRpYWxvZyBiZWZvcmUgcnVubmluZyIKLW1zZ3N0ciAiQmVzdMOkdGlndW5nc2ZyYWdlIHZvciBTdGFydGVuIGFuemVpZ2VuIgorIzogcGF0aHNwZWMuYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJQZmFkc3BlemlmaWthdGlvbiAnJXMnIGlzdCBoaW50ZXIgZWluZXIgc3ltYm9saXNjaGVuIFZlcmtuw7xwZnVuZyIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6NzcKLW1zZ2lkICJBc2sgdGhlIHVzZXIgdG8gc2VsZWN0IGEgcmV2aXNpb24gKHNldHMgJFJFVklTSU9OKSIKLW1zZ3N0ciAiQmVudXR6ZXIgbmFjaCBWZXJzaW9uIGZyYWdlbiAoc2V0enQgJFJFVklTSU9OKSIKKyM6IHBhdGhzcGVjLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgaXMgYmFkbHkgcXVvdGVkOiAlcyIKK21zZ3N0ciAiWmVpbGUgZW50aMOkbHQgZmFsc2NoZSBBbmbDvGhydW5nc3plaWNoZW46ICVzIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo4MgotbXNnaWQgIkFzayB0aGUgdXNlciBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgKHNldHMgJEFSR1MpIgotbXNnc3RyICJCZW51dHplciBuYWNoIHp1c8OkdHpsaWNoZW4gQXJndW1lbnRlbiBmcmFnZW4gKHNldHp0ICRBUkdTKSIKKyM6IHBrdC1saW5lLmM6OTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmx1c2ggcGFja2V0IgorbXNnc3RyICJLb25udGUgRmx1c2gtUGFrZXQgbmljaHQgc2NocmVpYmVuLiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6ODkKLW1zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCi1tc2dzdHIgIktlaW4gQXVzZ2FiZWZlbnN0ZXIgemVpZ2VuIgorIzogcGt0LWxpbmUuYzo5OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBkZWxpbSBwYWNrZXQiCittc2dzdHIgIktvbm50ZSBEZWxpbS1QYWtldCBuaWNodCBzY2hyZWliZW4uIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo5NAotbXNnaWQgIlJ1biBvbmx5IGlmIGEgZGlmZiBpcyBzZWxlY3RlZCAoJEZJTEVOQU1FIG5vdCBlbXB0eSkiCi1tc2dzdHIgIk51ciBzdGFydGVuLCB3ZW5uIGVpbiBWZXJnbGVpY2ggZ2V3w6RobHQgaXN0ICgkRklMRU5BTUUgaXN0IG5pY2h0IGxlZXIpIgorIzogcGt0LWxpbmUuYzoxMDYKK21zZ2lkICJmbHVzaCBwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICJGbHVzaCBiZWltIFNjaHJlaWJlbiBkZXMgUGFrZXRzIGZlaGxnZXNjaGxhZ2VuLiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTE4Ci1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIG5hbWUgZm9yIHRoZSB0b29sLiIKLW1zZ3N0ciAiQml0dGUgZ2ViZW4gU2llIGVpbmVuIFdlcmt6ZXVnbmFtZW4gYW4uIgorIzogcGt0LWxpbmUuYzoxNDYgcGt0LWxpbmUuYzoyMzIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiCittc2dzdHIgIlByb3Rva29sbGZlaGxlcjogdW5tw7ZnbGljaCBsYW5nZSBaZWlsZSIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiV2Vya3pldWcgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiIKKyM6IHBrdC1saW5lLmM6MTYyIHBrdC1saW5lLmM6MTY0Cittc2dpZCAicGFja2V0IHdyaXRlIHdpdGggZm9ybWF0IGZhaWxlZCIKK21zZ3N0ciAiU2NocmVpYmVuIGRlcyBQYWtldHMgbWl0IEZvcm1hdCBmZWhsZ2VzY2hsYWdlbi4iCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjE0OAotIywgdGNsLWZvcm1hdAorIzogcGt0LWxpbmUuYzoxOTYKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIC0gZGF0YSBleGNlZWRzIG1heCBwYWNrZXQgc2l6ZSIKK21zZ3N0ciAiIgorIlNjaHJlaWJlbiBkZXMgUGFrZXRzIGZlaGxnZXNjaGxhZ2VuIC0gRGF0ZW4gw7xiZXJzY2hyZWl0ZW4gbWF4aW1hbGUgUGFrZXRncsO2w59lIgorCisjOiBwa3QtbGluZS5jOjIwMyBwa3QtbGluZS5jOjIxMAorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgIlNjaHJlaWJlbiBkZXMgUGFrZXRzIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogcGt0LWxpbmUuYzoyOTUKK21zZ2lkICJyZWFkIGVycm9yIgorbXNnc3RyICJMZXNlZmVobGVyIgorCisjOiBwa3QtbGluZS5jOjMwMworbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5IgorbXNnc3RyICJEaWUgR2VnZW5zZWl0ZSBoYXQgdW5lcndhcnRldCBhYmdlYnJvY2hlbi4iCisKKyM6IHBrdC1saW5lLmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggY2hhcmFjdGVyOiAlLjRzIgorbXNnc3RyICJQcm90b2tvbGxmZWhsZXI6IHVuZ8O8bHRpZ2VzIFplaWNoZW4gZsO8ciBaZWlsZW5sw6RuZ2U6ICUuNHMiCisKKyM6IHBrdC1saW5lLmM6MzQxIHBrdC1saW5lLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggJWQiCittc2dzdHIgIlByb3Rva29sbGZlaGxlcjogdW5nw7xsdGlnZSBaZWlsZW5sw6RuZ2UgJWQiCisKKyM6IHBrdC1saW5lLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgIkZlaGxlciBhbSBhbmRlcmVuIEVuZGU6ICVzIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTE5Cittc2dpZCAiUmVmcmVzaGluZyBpbmRleCIKK21zZ3N0ciAiQWt0dWFsaXNpZXJlIEluZGV4IgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQ6ICVzIgorbXNnc3RyICJLYW5uIFRocmVhZCBmw7xyIGxzdGF0IG5pY2h0IGVyemV1Z2VuOiAlcyIKKworIzogcHJldHR5LmM6OTgxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIC0tcHJldHR5IGZvcm1hdCIKK21zZ3N0ciAiS29ubnRlIC0tcHJldHR5IEZvcm1hdCBuaWNodCBwYXJzZW4uIgorCisjOiBwcm9taXNvci1yZW1vdGUuYzoyMworbXNnaWQgIlJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiUmVtb3RlLVJlcG9zaXRvcnkgb2huZSBVUkwiCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21pc29yIHJlbW90ZSBuYW1lIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgIlByb21pc29yLVJlbW90ZS1OYW1lIGthbm4gbmljaHQgbWl0ICcvJyBiZWdpbm5lbjogJXMiCisKKyM6IHJhbmdlLWRpZmYuYzo3NQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBgbG9nYCIKK21zZ3N0ciAiS29ubnRlIGBsb2dgIG5pY2h0IHN0YXJ0ZW4uIgorCisjOiByYW5nZS1kaWZmLmM6NzcKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBgbG9nYCBvdXRwdXQiCittc2dzdHIgIktvbm50ZSBBdXNnYWJlIHZvbiBgbG9nYCBuaWNodCBsZXNlbi4iCisKKyM6IHJhbmdlLWRpZmYuYzo5NiBzZXF1ZW5jZXIuYzo1MDIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJyVzJyIKK21zZ3N0ciAiS29ubnRlIENvbW1pdCAnJXMnIG5pY2h0IHBhcnNlbi4iCisKKyM6IHJhbmdlLWRpZmYuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGdpdCBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICJLb25udGUgR2l0LUhlYWRlciAnJS4qcycgbmljaHQgcGFyc2VuLiIKKworIzogcmFuZ2UtZGlmZi5jOjI4NQorbXNnaWQgImZhaWxlZCB0byBnZW5lcmF0ZSBkaWZmIgorbXNnc3RyICJGZWhsZXIgYmVpbSBHZW5lcmllcmVuIGRlcyBEaWZmcy4iCisKKyM6IHJhbmdlLWRpZmYuYzo1MTggcmFuZ2UtZGlmZi5jOjUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbG9nIGZvciAnJXMnIgorbXNnc3RyICJLb25udGUgTG9nIGbDvHIgJyVzJyBuaWNodCBwYXJzZW4uIgorCisjOiByZWFkLWNhY2hlLmM6NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IGFkZCBmaWxlIGFsaWFzICclcycgKCclcycgYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgpIgorbXNnc3RyICIiCisiRGF0ZWlhbGlhcyAnJXMnIHdpcmQgbmljaHQgaGluenVnZWbDvGd0ICgnJXMnIGV4aXN0aWVydCBiZXJlaXRzIGltIEluZGV4KS4iCisKKyM6IHJlYWQtY2FjaGUuYzo2OTYKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFuIGVtcHR5IGJsb2IgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiS2FubiBrZWluZW4gbGVlcmVuIEJsb2IgaW4gZGllIE9iamVrdGRhdGVuYmFuayBzY2hyZWliZW4uIgorCisjOiByZWFkLWNhY2hlLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4gb25seSBhZGQgcmVndWxhciBmaWxlcywgc3ltYm9saWMgbGlua3Mgb3IgZ2l0LWRpcmVjdG9yaWVzIgorbXNnc3RyICIiCisiJXM6IEthbm4gbnVyIHJlZ3Vsw6RyZSBEYXRlaWVuLCBzeW1ib2xpc2NoZSBMaW5rcyBvZGVyIEdpdC1WZXJ6ZWljaG5pc3NlICIKKyJoaW56dWbDvGdlbi4iCisKKyM6IHJlYWQtY2FjaGUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0IgorbXNnc3RyICInJXMnIGhhdCBrZWluZW4gQ29tbWl0IGF1c2dlY2hlY2t0IgorCisjOiByZWFkLWNhY2hlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBpbmRleCBmaWxlICclcyciCittc2dzdHIgIktvbm50ZSBEYXRlaSAnJXMnIG5pY2h0IGluZGl6aWVyZW4uIgorCisjOiByZWFkLWNhY2hlLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgJyVzJyB0byBpbmRleCIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgZGVtIEluZGV4IGhpbnp1ZsO8Z2VuLiIKKworIzogcmVhZC1jYWNoZS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBsZXNlbi4iCisKKyM6IHJlYWQtY2FjaGUuYzoxMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXBwZWFycyBhcyBib3RoIGEgZmlsZSBhbmQgYXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIiclcycgc2NoZWludCBlaW5lIERhdGVpIHVuZCBlaW4gVmVyemVpY2huaXMgenUgc2Vpbi4iCisKKyM6IHJlYWQtY2FjaGUuYzoxNTM2Cittc2dpZCAiUmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiQWt0dWFsaXNpZXJlIEluZGV4IgorCisjOiByZWFkLWNhY2hlLmM6MTY1MQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQ291bGQgbm90IGFkZCB0b29sOlxuIgotIiVzIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKIG1zZ3N0ciAiIgotIldlcmt6ZXVnIGtvbm50ZSBuaWNodCBoaW56dWdlZsO8Z3Qgd2VyZGVuOlxuIgotIlxuIgotIiVzIgorImluZGV4LnZlcnNpb24gZ2VzZXR6dCwgYWJlciBXZXJ0IHVuZ8O8bHRpZy5cbiIKKyJWZXJ3ZW5kZSBWZXJzaW9uICVpIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxODcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBSZW1vdmUgVG9vbCIKLW1zZ3N0ciAiJXMgKCVzKTogV2Vya3pldWcgZW50ZmVybmVuIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTMKLW1zZ2lkICJSZW1vdmUgVG9vbCBDb21tYW5kcyIKLW1zZ3N0ciAiV2Vya3pldWdrb21tYW5kb3MgZW50ZmVybmVuIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTgKLW1zZ2lkICJSZW1vdmUiCi1tc2dzdHIgIkVudGZlcm5lbiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjMxCi1tc2dpZCAiKEJsdWUgZGVub3RlcyByZXBvc2l0b3J5LWxvY2FsIHRvb2xzKSIKLW1zZ3N0ciAiKFdlcmt6ZXVnZSBmw7xyIGxva2FsZXMgUmVwb3NpdG9yeSB3ZXJkZW4gaW4gQmxhdSBhbmdlemVpZ3QpIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyODMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiIKLW1zZ3N0ciAiJXMgKCVzKToiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjI5MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1biBDb21tYW5kOiAlcyIKLW1zZ3N0ciAiS29tbWFuZG8gYXVmcnVmZW46ICVzIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDozMDYKLW1zZ2lkICJBcmd1bWVudHMiCi1tc2dzdHIgIkFyZ3VtZW50ZSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQxCi1tc2dpZCAiT0siCi1tc2dzdHIgIk9rIgotCi0jOiBsaWIvc2VhcmNoLnRjbDo0OAotbXNnaWQgIkZpbmQ6IgotbXNnc3RyICJTdWNoZW46IgotCi0jOiBsaWIvc2VhcmNoLnRjbDo1MAotbXNnaWQgIk5leHQiCi1tc2dzdHIgIk7DpGNoc3RlciIKLQotIzogbGliL3NlYXJjaC50Y2w6NTEKLW1zZ2lkICJQcmV2IgotbXNnc3RyICJWb3JpZ2VyIgotCi0jOiBsaWIvc2VhcmNoLnRjbDo1MgotbXNnaWQgIlJlZ0V4cCIKLW1zZ3N0ciAiUmVnQXVzZHJ1Y2siCi0KLSM6IGxpYi9zZWFyY2gudGNsOjU0Ci1tc2dpZCAiQ2FzZSIKLW1zZ3N0ciAiR3Jvw58va2xlaW4iCi0KLSM6IGxpYi9zaG9ydGN1dC50Y2w6OCBsaWIvc2hvcnRjdXQudGNsOjQzIGxpYi9zaG9ydGN1dC50Y2w6NzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBDcmVhdGUgRGVza3RvcCBJY29uIgotbXNnc3RyICIlcyAoJXMpOiBEZXNrdG9wLUljb24gZXJzdGVsbGVuIgotCi0jOiBsaWIvc2hvcnRjdXQudGNsOjI0IGxpYi9zaG9ydGN1dC50Y2w6NjUKLW1zZ2lkICJDYW5ub3Qgd3JpdGUgc2hvcnRjdXQ6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVyIFZlcmtuw7xwZnVuZzoiCi0KLSM6IGxpYi9zaG9ydGN1dC50Y2w6MTQwCi1tc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgotbXNnc3RyICJGZWhsZXIgYmVpbSBFcnN0ZWxsZW4gZGVzIEljb25zOiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IERlbGV0ZSBCcmFuY2ggUmVtb3RlbHkiCi1tc2dzdHIgIiVzICglcyk6IEJyYW5jaCBpbiBleHRlcm5lbSBSZXBvc2l0b3J5IGzDtnNjaGVuIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM0Ci1tc2dpZCAiRGVsZXRlIEJyYW5jaCBSZW1vdGVseSIKLW1zZ3N0ciAiQnJhbmNoIGluIGV4dGVybmVtIFJlcG9zaXRvcnkgbMO2c2NoZW4iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDgKLW1zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCi1tc2dzdHIgIkluIFJlcG9zaXRvcnkiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6ODgKLW1zZ2lkICJCcmFuY2hlcyIKLW1zZ3N0ciAiQnJhbmNoZXMiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTEwCi1tc2dpZCAiRGVsZXRlIE9ubHkgSWYiCi1tc2dzdHIgIk51ciBsw7ZzY2hlbiwgd2VubiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTIKLW1zZ2lkICJNZXJnZWQgSW50bzoiCi1tc2dzdHIgIlp1c2FtbWVuZ2Vmw7xocnQgbWl0OiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMjAgbGliL2JyYW5jaF9kZWxldGUudGNsOjUzCi1tc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgotbXNnc3RyICJJbW1lciAoS2VpbmUgWnVzYW1tZW5mw7xocnVuZ3NwcsO8ZnVuZykiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTUzCi1tc2dpZCAiQSBicmFuY2ggaXMgcmVxdWlyZWQgZm9yICdNZXJnZWQgSW50bycuIgotbXNnc3RyICJGw7xyIMK7WnVzYW1tZW5mw7xocmVuIG1pdMKrIG11c3MgZWluIEJyYW5jaCBhbmdlZ2ViZW4gd2VyZGVuLiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODUKLSMsIHRjbC1mb3JtYXQKKyM6IHJlYWQtY2FjaGUuYzoxNjYxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKLSJcbiIKLSIgLSAlcyIKKyJHSVRfSU5ERVhfVkVSU0lPTiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgogbXNnc3RyICIiCi0iRm9sZ2VuZGUgQnJhbmNoZXMgc2luZCBub2NoIG5pY2h0IG1pdCDCuyVzwqsgenVzYW1tZW5nZWbDvGhydDpcbiIKLSJcbiIKLSIgLSAlcyIKKyJHSVRfSU5ERVhfVkVSU0lPTiBnZXNldHp0LCBhYmVyIFdlcnQgdW5nw7xsdGlnLlxuIgorIlZlcndlbmRlIFZlcnNpb24gJWkiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTkwCi0jLCB0Y2wtZm9ybWF0CisjOiByZWFkLWNhY2hlLmM6MTcxNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAiVW5nw7xsdGlnZSBTaWduYXR1ciAweCUwOHgiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICVkIgorbXNnc3RyICJVbmfDvGx0aWdlIEluZGV4LVZlcnNpb24gJWQiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzI5Cittc2dpZCAiYmFkIGluZGV4IGZpbGUgc2hhMSBzaWduYXR1cmUiCittc2dzdHIgIlVuZ8O8bHRpZ2UgU0hBMS1TaWduYXR1ciBkZXIgSW5kZXgtRGF0ZWkuIgorCisjOiByZWFkLWNhY2hlLmM6MTc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCB1c2VzICUuNHMgZXh0ZW5zaW9uLCB3aGljaCB3ZSBkbyBub3QgdW5kZXJzdGFuZCIKK21zZ3N0ciAiSW5kZXggdmVyd2VuZGV0IEVyd2VpdGVydW5nICUuNHMsIHdlbGNoZSB3aXIgbmljaHQgdW50ZXJzdMO8dHplbi4iCisKKyM6IHJlYWQtY2FjaGUuYzoxNzYxCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICUuNHMgZXh0ZW5zaW9uIgorbXNnc3RyICJJZ25vcmllcmUgRXJ3ZWl0ZXJ1bmcgJS40cyIKKworIzogcmVhZC1jYWNoZS5jOjE3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbmRleCBlbnRyeSBmb3JtYXQgMHglMDh4IgorbXNnc3RyICJVbmJla2FubnRlcyBGb3JtYXQgZsO8ciBJbmRleC1FaW50cmFnIDB4JTA4eCIKKworIzogcmVhZC1jYWNoZS5jOjE4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG5hbWUgZmllbGQgaW4gdGhlIGluZGV4LCBuZWFyIHBhdGggJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgTmFtZW5zZmVsZCBpbSBJbmRleCwgaW4gZGVyIE7DpGhlIHZvbiBQZmFkICclcycuIgorCisjOiByZWFkLWNhY2hlLmM6MTg3MQorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGluIGluZGV4IgorbXNnc3RyICJVbmdlb3JkbmV0ZSBTdGFnZS1FaW50csOkZ2UgaW0gSW5kZXguIgorCisjOiByZWFkLWNhY2hlLmM6MTg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBzdGFnZSBlbnRyaWVzIGZvciBtZXJnZWQgZmlsZSAnJXMnIgorbXNnc3RyICJNZWhyZXJlIFN0YWdlLUVpbnRyw6RnZSBmw7xyIHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpICclcycuIgorCisjOiByZWFkLWNhY2hlLmM6MTg3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBmb3IgJyVzJyIKK21zZ3N0ciAiVW5nZW9yZG5ldGUgU3RhZ2UtRWludHLDpGdlIGbDvHIgJyVzJy4iCisKKyM6IHJlYWQtY2FjaGUuYzoxOTgzIHJlYWQtY2FjaGUuYzoyMjcxIHJlcmVyZS5jOjU2NSByZXJlcmUuYzo1OTkgcmVyZXJlLmM6MTExMQorIzogc3VibW9kdWxlLmM6MTYxOSBidWlsdGluL2FkZC5jOjUzMiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE4MQorIzogYnVpbHRpbi9jaGVja291dC5jOjQ3MCBidWlsdGluL2NoZWNrb3V0LmM6NjU2IGJ1aWx0aW4vY2xlYW4uYzo5NjcKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY3IGJ1aWx0aW4vZGlmZi10cmVlLmM6MTIwIGJ1aWx0aW4vZ3JlcC5jOjQ4NQorIzogYnVpbHRpbi9tdi5jOjE0NSBidWlsdGluL3Jlc2V0LmM6MjQ2IGJ1aWx0aW4vcm0uYzoyOTAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozMzIKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQiCittc2dzdHIgIkluZGV4LURhdGVpIGJlc2Now6RkaWd0IgorCisjOiByZWFkLWNhY2hlLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICJLYW5uIFRocmVhZCBmw7xyIGxvYWRfY2FjaGVfZW50cmllcyBuaWNodCBlcnpldWdlbjogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICJLYW5uIFRocmVhZCBmw7xyIGxvYWRfY2FjaGVfZW50cmllcyBuaWNodCBlcnpldWdlbjogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIG9wZW4gZmFpbGVkIgorbXNnc3RyICIlczogw5ZmZm5lbiBkZXIgSW5kZXgtRGF0ZWkgZmVobGdlc2NobGFnZW4uIgorCisjOiByZWFkLWNhY2hlLmM6MjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHN0YXQgdGhlIG9wZW4gaW5kZXgiCittc2dzdHIgIiVzOiBLYW5uIGdlw7ZmZm5ldGVuIEluZGV4IG5pY2h0IGxlc2VuLiIKKworIzogcmVhZC1jYWNoZS5jOjIxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgc21hbGxlciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIlczogSW5kZXgtRGF0ZWkgaXN0IGtsZWluZXIgYWxzIGVyd2FydGV0LiIKKworIzogcmVhZC1jYWNoZS5jOjIxODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuYWJsZSB0byBtYXAgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IEtvbm50ZSBJbmRleC1EYXRlaSBuaWNodCBlaW5sZXNlbi4iCisKKyM6IHJlYWQtY2FjaGUuYzoyMjI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgIkthbm4gVGhyZWFkIGbDvHIgbG9hZF9pbmRleF9leHRlbnNpb25zIG5pY2h0IGVyemV1Z2VuOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgIkthbm4gVGhyZWFkIGbDvHIgbG9hZF9pbmRleF9leHRlbnNpb25zIG5pY2h0IGJlaXRyZXRlbjogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmcmVzaGVuIHNoYXJlZCBpbmRleCAnJXMnIgorbXNnc3RyICJLb25udGUgZ2V0ZWlsdGVuIEluZGV4ICclcycgbmljaHQgYWt0dWFsaXNpZXJlbi4iCisKKyM6IHJlYWQtY2FjaGUuYzoyMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiCittc2dzdHIgIkZlaGxlcmhhZnRlciBJbmRleC4gRXJ3YXJ0ZXRlICVzIGluICVzLCBlcmhpZWx0ICVzLiIKKworIzogcmVhZC1jYWNoZS5jOjMwMjYgc3RyYnVmLmM6MTE2MCB3cmFwcGVyLmM6NjIyIGJ1aWx0aW4vbWVyZ2UuYzoxMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBzY2hsaWXDn2VuLiIKKworIzogcmVhZC1jYWNoZS5jOjMxMjkgc2VxdWVuY2VyLmM6MjM0MyBzZXF1ZW5jZXIuYzozOTU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGxlc2VuLiIKKworIzogcmVhZC1jYWNoZS5jOjMxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gZ2l0IGRpcjogJXMiCittc2dzdHIgImtvbm50ZSBHaXQtVmVyemVpY2huaXMgbmljaHQgw7ZmZm5lbjogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bmxpbms6ICVzIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBlbnRmZXJuZW4uIgorCisjOiByZWFkLWNhY2hlLmM6MzE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZml4IHBlcm1pc3Npb24gYml0cyBvbiAnJXMnIgorbXNnc3RyICJLb25udGUgWnVncmlmZnNiZXJlY2h0aWd1bmcgYXVmICclcycgbmljaHQgc2V0emVuLiIKKworIzogcmVhZC1jYWNoZS5jOjMzMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBkcm9wIHRvIHN0YWdlICMwIgorbXNnc3RyICIlczogS2FubiBuaWNodCBhdWYgU3R1ZmUgIzAgd2VjaHNlbG4uIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMQogbXNnaWQgIiIKLSJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKLSJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKKyJZb3UgY2FuIGZpeCB0aGlzIHdpdGggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZScuXG4iCisiT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCiBtc2dzdHIgIiIKLSJFaW4gb2RlciBtZWhyZXJlIFp1c2FtbWVuZsO8aHJ1bmdlbiBzaW5kIGZlaGxnZXNjaGxhZ2VuLCBkYSBTaWUgbmljaHQgZGllICIKLSJub3R3ZW5kaWdlbiBDb21taXRzIHZvcmhlciBhbmdlZm9yZGVydCBoYWJlbi4gIFNpZSBzb2xsdGVuIHZlcnN1Y2hlbiwgenVlcnN0ICIKLSJ2b24gwrslc8KrIGFuenVmb3JkZXJuLiIKKyJTaWUga8O2bm5lbiBkYXMgbWl0ICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBiZWhlYmVuLiBGw7xocmVuIFNpZSBkYW5hY2hcbiIKKyInZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhdXMuXG4iCisiT2RlciBTaWUga8O2bm5lbiBkZW4gUmViYXNlIG1pdCAnZ2l0IHJlYmFzZSAtLWFib3J0JyBhYmJyZWNoZW4uXG4iCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjA4Ci1tc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgotbXNnc3RyICJCaXR0ZSB3w6RobGVuIFNpZSBtaW5kZXN0ZW5zIGVpbmVuIEJyYW5jaCwgZGVyIGdlbMO2c2NodCB3ZXJkZW4gc29sbC4iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjMzCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgotIlxuIgotIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorInVucmVjb2duaXplZCBzZXR0aW5nICVzIGZvciBvcHRpb24gcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suIElnbm9yaW5nLiIKIG1zZ3N0ciAiIgotIkRhcyBXaWVkZXJoZXJzdGVsbGVuIHZvbiBnZWzDtnNjaHRlbiBCcmFuY2hlcyBpc3QgbnVyIG1pdCBncsO2w59lcmVtIEF1ZndhbmQgIgotIm3DtmdsaWNoLlxuIgorIk5pY2h0IGVya2FubnRlIEVpbnN0ZWxsdW5nICVzIGbDvHIgT3B0aW9uIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiAiCisiSWdub3JpZXJlLiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NDIKK21zZ2lkICIiCiAiXG4iCi0iU29sbGVuIGRpZSBhdXNnZXfDpGhsdGVuIEJyYW5jaGVzIGdlbMO2c2NodCB3ZXJkZW4/IgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21tYW5kPiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJiLCBicmVhayA9IHN0b3AgaGVyZSAoY29udGludWUgcmViYXNlIGxhdGVyIHdpdGggJ2dpdCByZWJhc2UgLS1jb250aW51ZScpXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLlxuIgorbXNnc3RyICIiCisiXG4iCisiQmVmZWhsZTpcbiIKKyJwLCBwaWNrIDxDb21taXQ+ID0gQ29tbWl0IHZlcndlbmRlblxuIgorInIsIHJld29yZCA8Q29tbWl0PiA9IENvbW1pdCB2ZXJ3ZW5kZW4sIGFiZXIgQ29tbWl0LUJlc2NocmVpYnVuZyBiZWFyYmVpdGVuXG4iCisiZSwgZWRpdCA8Q29tbWl0PiA9IENvbW1pdCB2ZXJ3ZW5kZW4sIGFiZXIgenVtIE5hY2hiZXNzZXJuIGFuaGFsdGVuXG4iCisicywgc3F1YXNoIDxDb21taXQ+ID0gQ29tbWl0IHZlcndlbmRlbiwgYWJlciBtaXQgdm9yaGVyaWdlbSBDb21taXQgdmVyZWluZW5cbiIKKyJmLCBmaXh1cCA8Q29tbWl0PiA9IHdpZSBcInNxdWFzaFwiLCBhYmVyIGRpZXNlIENvbW1pdC1CZXNjaHJlaWJ1bmcgIgorInZlcndlcmZlblxuIgorIngsIGV4ZWMgPENvbW1pdD4gPSBCZWZlaGwgKFJlc3QgZGVyIFplaWxlKSBtaXR0ZWxzIFNoZWxsIGF1c2bDvGhyZW5cbiIKKyJiLCBicmVhayA9IGhpZXIgYW5oYWx0ZW4gKFJlYmFzZSBzcMOkdGVyIG1pdCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyAiCisiZm9ydHNldHplbilcbiIKKyJkLCBkcm9wIDxDb21taXQ+ID0gQ29tbWl0IGVudGZlcm5lblxuIgorImwsIGxhYmVsIDxMYWJlbD4gPSBha3R1ZWxsZW4gSEVBRCBtaXQgTGFiZWwgdmVyc2VoZW5cbiIKKyJ0LCByZXNldCA8TGFiZWw+ID0gSEVBRCB6dSBlaW5lbSBMYWJlbCB1bXNldHplblxuIgorIm0sIG1lcmdlIFstQyA8Q29tbWl0PiB8IC1jIDxDb21taXQ+XSA8TGFiZWw+IFsjIDxlaW5lWmVpbGU+XVxuIgorIi4gICAgICAgTWVyZ2UtQ29tbWl0IG1pdCBkZXIgb3JpZ2luYWxlbiBNZXJnZS1Db21taXQtQmVzY2hyZWlidW5nIGVyc3RlbGxlblxuIgorIi4gICAgICAgKG9kZXIgZGllIGVpbmUgWmVpbGUsIHdlbm4ga2VpbmUgb3JpZ2luYWxlIE1lcmdlLUNvbW1pdC0iCisiQmVzY2hyZWlidW5nXG4iCisiLiAgICAgICBzcGV6aWZpemllcnQgaXN0KS4gQmVudXR6ZW4gU2llIC1jIDxDb21taXQ+IHp1bSBCZWFyYmVpdGVuIGRlclxuIgorIi4gICAgICAgQ29tbWl0LUJlc2NocmVpYnVuZy5cbiIKKyJcbiIKKyJEaWVzZSBaZWlsZW4ga8O2bm5lbiB1bXNvcnRpZXJ0IHdlcmRlbjsgU2llIHdlcmRlbiB2b24gb2JlbiBuYWNoIHVudGVuXG4iCisiYXVzZ2Vmw7xocnQuXG4iCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKLW1zZ3N0ciAiQnJhbmNoZXMgYXVmIMK7JXPCqyB3ZXJkZW4gZ2Vsw7ZzY2h0IgorIzogcmViYXNlLWludGVyYWN0aXZlLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmQpIgorbXNnaWRfcGx1cmFsICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZHMpIgorbXNnc3RyWzBdICJSZWJhc2Ugdm9uICVzIGF1ZiAlcyAoJWQgS29tbWFuZG8pIgorbXNnc3RyWzFdICJSZWJhc2Ugdm9uICVzIGF1ZiAlcyAoJWQgS29tbWFuZG9zKSIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozMDAKLW1zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKLW1zZ3N0ciAiS2VpbiBSZXBvc2l0b3J5IGF1c2dld8OkaGx0LiIKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjcyIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMjgKK21zZ2lkICIiCisiXG4iCisiRG8gbm90IHJlbW92ZSBhbnkgbGluZS4gVXNlICdkcm9wJyBleHBsaWNpdGx5IHRvIHJlbW92ZSBhIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIktlaW5lIFplaWxlIGVudGZlcm5lbi4gQmVudXR6ZW4gU2llICdkcm9wJywgdW0gZXhwbGl6aXQgZWluZW4gQ29tbWl0IHp1XG4iCisiZW50ZmVybmVuLlxuIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjMwNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNjYW5uaW5nICVzLi4uIgotbXNnc3RyICLCuyVzwqsgbGFkZW4uLi4iCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo3NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjMyCittc2dpZCAiIgorIlxuIgorIklmIHlvdSByZW1vdmUgYSBsaW5lIGhlcmUgVEhBVCBDT01NSVQgV0lMTCBCRSBMT1NULlxuIgorbXNnc3RyICIiCisiXG4iCisiV2VubiBTaWUgaGllciBlaW5lIFplaWxlIGVudGZlcm5lbiwgd2lyZCBESUVTRVIgQ09NTUlUIFZFUkxPUkVOIEdFSEVOLlxuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ1Ci1tc2dpZCAiR2l0IEd1aSIKLW1zZ3N0ciAiR2l0IEd1aSIKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjgxIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzEKK21zZ2lkICIiCisiXG4iCisiWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuXG4iCisiVG8gY29udGludWUgcmViYXNlIGFmdGVyIGVkaXRpbmcsIHJ1bjpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTaWUgYmVhcmJlaXRlbiBnZXJhZGUgZGllIFRPRE8tRGF0ZWkgZWluZXMgbGF1ZmVuZGVuIGludGVyYWt0aXZlbiBSZWJhc2UuXG4iCisiVW0gZGVuIFJlYmFzZSBuYWNoIGRlbSBFZGl0aWVyZW4gZm9ydHp1c2V0emVuLCBmw7xocmVuIFNpZSBhdXM6XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQyNwotbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiUmVwb3NpdG9yeSBuZXUgZXJzdGVsbGVuIgorIzogcmViYXNlLWludGVyYWN0aXZlLmM6ODYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0OAorbXNnaWQgIiIKKyJcbiIKKyJIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiV2VubiBTaWUgamVkb2NoIGFsbGVzIGzDtnNjaGVuLCB3aXJkIGRlciBSZWJhc2UgYWJnZWJyb2NoZW4uXG4iCisiXG4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEwCi1tc2dpZCAiTmV3Li4uIgotbXNnc3RyICJOZXUuLi4iCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMTAgcmVyZXJlLmM6NDg1IHJlcmVyZS5jOjY5MiBzZXF1ZW5jZXIuYzozNDQ0CisjOiBzZXF1ZW5jZXIuYzozNDcwIHNlcXVlbmNlci5jOjUxMjUgYnVpbHRpbi9mc2NrLmM6MzQ2IGJ1aWx0aW4vcmViYXNlLmM6MjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBzY2hyZWliZW4uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExNyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxMQotbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgIlJlcG9zaXRvcnkga2xvbmVuIgorIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTE2IGJ1aWx0aW4vcmViYXNlLmM6MTg0IGJ1aWx0aW4vcmViYXNlLmM6MjEwCisjOiBidWlsdGluL3JlYmFzZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHNjaHJlaWJlbi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTI4Ci1tc2dpZCAiQ2xvbmUuLi4iCi1tc2dzdHIgIktsb25lbi4uLiIKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc29tZSBjb21taXRzIG1heSBoYXZlIGJlZW4gZHJvcHBlZCBhY2NpZGVudGFsbHkuXG4iCisiRHJvcHBlZCBjb21taXRzIChuZXdlciB0byBvbGRlcik6XG4iCittc2dzdHIgIiIKKyJXYXJudW5nOiBFaW5pZ2UgQ29tbWl0cyBrw7ZubnRlbiBhdXMgVmVyc2VoZW4gZW50ZmVybnQgd29yZGVuIHNlaW4uXG4iCisiRW50ZmVybnRlIENvbW1pdHMgKG5ldSB6dSBhbHQpOlxuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzNSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMDUKLW1zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgIlJlcG9zaXRvcnkgw7ZmZm5lbiIKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgXCJkcm9wXCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuXG4iCisiXG4iCisiVXNlICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyB0byBjaGFuZ2UgdGhlIGxldmVsIG9mICIKKyJ3YXJuaW5ncy5cbiIKKyJUaGUgcG9zc2libGUgYmVoYXZpb3VycyBhcmU6IGlnbm9yZSwgd2FybiwgZXJyb3IuXG4iCisiXG4iCittc2dzdHIgIiIKKyJVbSBkaWVzZSBNZWxkdW5nIHp1IHZlcm1laWRlbiwgYmVudXR6ZW4gU2llIFwiZHJvcFwiLCB1bSBleGxpeml0IENvbW1pdHMgenVcbiIKKyJlbnRmZXJuZW4uXG4iCisiXG4iCisiQmVudXR6ZW4gU2llICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJywgdW0gZGllIFN0dWZlIGRlclxuIgorIldhcm51bmdlbiB6dSDDpG5kZXJuLlxuIgorIkRpZSBtw7ZnbGljaGVuIFZlcmhhbHRlbnN3ZWlzZW4gc2luZDogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxNDEKLW1zZ2lkICJPcGVuLi4uIgotbXNnc3RyICLDlmZmbmVuLi4uIgorIzogcmViYXNlLWludGVyYWN0aXZlLmM6MjMzIHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjIzOCBzZXF1ZW5jZXIuYzoyMjYyCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MCBidWlsdGluL3JlYmFzZS5jOjE5NSBidWlsdGluL3JlYmFzZS5jOjIyMQorIzogYnVpbHRpbi9yZWJhc2UuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJy4iCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGxlc2VuLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxNTQKLW1zZ2lkICJSZWNlbnQgUmVwb3NpdG9yaWVzIgotbXNnc3RyICJMZXR6dGUgUmVwb3NpdG9yaWVzIgorIzogcmVmcy5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIG9iamVjdCEiCittc2dzdHIgIiVzIHplaWd0IGF1ZiBrZWluIGfDvGx0aWdlcyBPYmpla3QhIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE2NAotbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgotbXNnc3RyICJadWxldHp0IGJlbnV0enRlcyBSZXBvc2l0b3J5IMO2ZmZuZW46IgorIzogcmVmcy5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMiCittc2dzdHIgIklnbm9yaWVyZSB1bnJlZmVyZW56aWVydGUgc3ltYm9saXNjaGUgUmVmZXJlbnogJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzM4Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgIlJlcG9zaXRvcnkgwrslc8KrIGtvbm50ZSBuaWNodCBlcnN0ZWxsdCB3ZXJkZW46IgorIzogcmVmcy5jOjY2OSByZWYtZmlsdGVyLmM6MjA5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBicm9rZW4gcmVmICVzIgorbXNnc3RyICJJZ25vcmllcmUgZmVobGVyaGFmdGUgUmVmZXJlbnogJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDIyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMwotbXNnaWQgIkNyZWF0ZSIKLW1zZ3N0ciAiRXJzdGVsbGVuIgorIzogcmVmcy5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgenVtIFNjaHJlaWJlbiDDtmZmbmVuOiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MzIKLW1zZ2lkICJEaXJlY3Rvcnk6IgotbXNnc3RyICJWZXJ6ZWljaG5pczoiCisjOiByZWZzLmM6ODE0IHJlZnMuYzo4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICclcyciCittc2dzdHIgIktvbm50ZSBSZWZlcmVueiAnJXMnIG5pY2h0IGxlc2VuLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1ODgKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzOQotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgotbXNnc3RyICJHaXQgUmVwb3NpdG9yeSIKKyM6IHJlZnMuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlJlZmVyZW56ICclcycgZXhpc3RpZXJ0IGJlcmVpdHMuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIlZlcnplaWNobmlzIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCisjOiByZWZzLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gd3JpdGluZyAnJXMnIgorbXNnc3RyICJVbmVyd2FydGV0ZSBPYmpla3QtSUQgYmVpbSBTY2hyZWliZW4gdm9uICclcycuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZpbGUgJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJEYXRlaSDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgorIzogcmVmcy5jOjgzMyBzZXF1ZW5jZXIuYzo0MDcgc2VxdWVuY2VyLmM6MjcwMSBzZXF1ZW5jZXIuYzoyOTA1CisjOiBzZXF1ZW5jZXIuYzoyOTE5IHNlcXVlbmNlci5jOjMxNzcgc2VxdWVuY2VyLmM6NTAzNiBzdHJidWYuYzoxMTU3CisjOiB3cmFwcGVyLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJLb25udGUgbmljaHQgbmFjaCAnJXMnIHNjaHJlaWJlbi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA2Ci1tc2dpZCAiQ2xvbmUiCi1tc2dzdHIgIktsb25lbiIKKyM6IHJlZnMuYzo4NjAgc3RyYnVmLmM6MTE1NSB3cmFwcGVyLmM6MTg4IHdyYXBwZXIuYzozNTggYnVpbHRpbi9hbS5jOjcxOQorIzogYnVpbHRpbi9yZWJhc2UuYzoxMDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHp1bSBTY2hyZWliZW4gw7ZmZm5lbi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE5Ci1tc2dpZCAiU291cmNlIExvY2F0aW9uOiIKLW1zZ3N0ciAiSGVya3VuZnRzLUFkcmVzc2U6IgorIzogcmVmcy5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG9iamVjdCBJRCB3aGVuIGRlbGV0aW5nICclcyciCittc2dzdHIgIlVuZXJ3YXJ0ZXRlIE9iamVrdC1JRCBiZWltIEzDtnNjaGVuIHZvbiAnJXMnLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjgKLW1zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKLW1zZ3N0ciAiWmllbHZlcnplaWNobmlzOiIKKyM6IHJlZnMuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgaGFzIGdhcCBhZnRlciAlcyIKK21zZ3N0ciAiTG9nIGbDvHIgUmVmZXJlbnogJXMgaGF0IGVpbmUgTMO8Y2tlIG5hY2ggJXMuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzOAotbXNnaWQgIkNsb25lIFR5cGU6IgotbXNnc3RyICJBcnQgZGVzIEtsb25lbnM6IgorIzogcmVmcy5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgdW5leHBlY3RlZGx5IGVuZGVkIG9uICVzIgorbXNnc3RyICJMb2cgZsO8ciBSZWZlcmVueiAlcyB1bmVyd2FydGV0IGJlaSAlcyBiZWVuZGV0LiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NDMKLW1zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCi1tc2dzdHIgIlN0YW5kYXJkIChzY2huZWxsLCB0ZWlsd2Vpc2UgcmVkdW5kYW50LCBIYXJkbGlua3MpIgorIzogcmVmcy5jOjEwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciAlcyBpcyBlbXB0eSIKK21zZ3N0ciAiTG9nIGbDvHIgJXMgaXN0IGxlZXIuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU0OAotbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKLW1zZ3N0ciAiQWxsZXMga29waWVyZW4gKGxhbmdzYW1lciwgdm9sbGUgUmVkdW5kYW56KSIKKyM6IHJlZnMuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIHVwZGF0ZSByZWYgd2l0aCBiYWQgbmFtZSAnJXMnIgorbXNnc3RyICJWZXJ3ZWlnZXJlIEFrdHVhbGlzaWVydW5nIGVpbmVyIFJlZmVyZW56IG1pdCBmZWhsZXJoYWZ0ZW0gTmFtZW4gJyVzJy4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUzCi1tc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCi1tc2dzdHIgIlZlcmtuw7xwZnQgKHNjaG5lbGwsIG5pY2h0IGVtcGZvaGxlbiwga2VpbiBCYWNrdXApIgorIzogcmVmcy5jOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBkYXRlX3JlZiBmYWlsZWQgZm9yIHJlZiAnJXMnOiAlcyIKK21zZ3N0ciAidXBkYXRlX3JlZiBmw7xyIFJlZmVyZW56ICclcycgZmVobGdlc2NobGFnZW46ICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2MAotbXNnaWQgIlJlY3Vyc2l2ZWx5IGNsb25lIHN1Ym1vZHVsZXMgdG9vIgotbXNnc3RyICJSZWt1cnNpdiB3ZWl0ZXJlIFN1Ym1vZHVsZSBrbG9uZW4iCisjOiByZWZzLmM6MjAyMworIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSB1cGRhdGVzIGZvciByZWYgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAiTWVocmVyZSBBa3R1YWxpc2llcnVuZ2VuIGbDvHIgUmVmZXJlbnogJyVzJyBuaWNodCBlcmxhdWJ0LiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDEKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzkwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODY0Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExNDUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTUzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgorIzogcmVmcy5jOjIwNTUKK21zZ2lkICJyZWYgdXBkYXRlcyBmb3JiaWRkZW4gaW5zaWRlIHF1YXJhbnRpbmUgZW52aXJvbm1lbnQiCittc2dzdHIgIiIKKyJBa3R1YWxpc2llcnVuZ2VuIHZvbiBSZWZlcmVuemVuIGlzdCBpbm5lcmhhbGIgZGVyIFF1YXJhbnTDpG5lLVVtZ2VidW5nICIKKyJ2ZXJib3Rlbi4iCisKKyM6IHJlZnMuYzoyMTUxIHJlZnMuYzoyMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIiclcycgZXhpc3RpZXJ0OyBrYW5uICclcycgbmljaHQgZXJzdGVsbGVuIgorCisjOiByZWZzLmM6MjE1NyByZWZzLmM6MjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcHJvY2VzcyAnJXMnIGFuZCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIkthbm4gJyVzJyB1bmQgJyVzJyBuaWNodCB6dXIgc2VsYmVuIFplaXQgdmVyYXJiZWl0ZW4uIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgcmVmZXJlbmNlICVzIgorbXNnc3RyICJLb25udGUgUmVmZXJlbnogJXMgbmljaHQgbMO2c2NoZW4iCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNDcgcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NDEKKyM6IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIKK21zZ3N0ciAiS29ubnRlIFJlZmVyZW56ICVzIG5pY2h0IGVudGZlcm5lbjogJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNTAgcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIKK21zZ3N0ciAiS29ubnRlIFJlZmVyZW56ZW4gbmljaHQgZW50ZmVybmVuOiAlcyIKKworIzogcmVmc3BlYy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZnNwZWMgJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBSZWZzcGVjICclcyciCisKKyM6IHJlZi1maWx0ZXIuYzo0MiB3dC1zdGF0dXMuYzoxOTM4Cittc2dpZCAiZ29uZSIKK21zZ3N0ciAiZW50ZmVybnQiCisKKyM6IHJlZi1maWx0ZXIuYzo0MworIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCIKK21zZ3N0ciAiJWQgdm9yYXVzIgorCisjOiByZWYtZmlsdGVyLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmVoaW5kICVkIgorbXNnc3RyICIlZCBoaW50ZXJoZXIiCisKKyM6IHJlZi1maWx0ZXIuYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCwgYmVoaW5kICVkIgorbXNnc3RyICIlZCB2b3JhdXMsICVkIGhpbnRlcmhlciIKKworIzogcmVmLWZpbHRlci5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGNvbG9yOjxjb2xvcj4pIgorbXNnc3RyICJFcndhcnRldGVzIEZvcm1hdDogJSUoY29sb3I6PEZhcmJlPikiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiCittc2dzdHIgIm5pY2h0IGVya2FubnRlIEZhcmJlOiAlJShjb2xvcjolcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOmxzdHJpcD0lcyIKK21zZ3N0ciAiUG9zaXRpdmVyIFdlcnQgZXJ3YXJ0ZXQgcmVmbmFtZTpsc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOnJzdHJpcD0lcyIKK21zZ3N0ciAiUG9zaXRpdmVyIFdlcnQgZXJ3YXJ0ZXQgcmVmbmFtZTpyc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKCVzKSBhcmd1bWVudDogJXMiCittc2dzdHIgIm5pY2h0IGVya2FubnRlcyAlJSglcykgQXJndW1lbnQ6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKG9iamVjdHR5cGUpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShvYmplY3R0eXBlKSBha3plcHRpZXJ0IGtlaW5lIEFyZ3VtZW50ZSIKKworIzogcmVmLWZpbHRlci5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0c2l6ZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJuaWNodCBlcmthbm50ZXMgJSUob2JqZWN0c2l6ZSkgQXJndW1lbnQ6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGRlbHRhYmFzZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGRlbHRhYmFzZSkgYWt6ZXB0aWVydCBrZWluZSBBcmd1bWVudGUiCisKKyM6IHJlZi1maWx0ZXIuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoYm9keSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGJvZHkpIGFremVwdGllcnQga2VpbmUgQXJndW1lbnRlIgorCisjOiByZWYtZmlsdGVyLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKHN1YmplY3QpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShzdWJqZWN0KSBha3plcHRpZXJ0IGtlaW5lIEFyZ3VtZW50ZSIKKworIzogcmVmLWZpbHRlci5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duICUlKHRyYWlsZXJzKSBhcmd1bWVudDogJXMiCittc2dzdHIgInVuYmVrYW5udGVzICUlKHRyYWlsZXJzKSBBcmd1bWVudDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgY29udGVudHM6bGluZXM9JXMiCittc2dzdHIgIlBvc2l0aXZlciBXZXJ0IGVyd2FydGV0IGNvbnRlbnRzOmxpbmVzPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShjb250ZW50cykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJuaWNodCBlcmthbm50ZXMgJSUoY29udGVudHMpIEFyZ3VtZW50OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBvYmplY3RuYW1lOnNob3J0PSVzIgorbXNnc3RyICJQb3NpdGl2ZXIgV2VydCBlcndhcnRldCBvYmplY3RuYW1lOnNob3J0PSVzIgorCisjOiByZWYtZmlsdGVyLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RuYW1lKSBhcmd1bWVudDogJXMiCittc2dzdHIgIm5pY2h0IGVya2FubnRlcyAlJShvYmplY3RuYW1lKSBBcmd1bWVudDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShhbGlnbjo8d2lkdGg+LDxwb3NpdGlvbj4pIgorbXNnc3RyICJFcndhcnRldGVzIEZvcm1hdDogJSUoYWxpZ246PEJyZWl0ZT4sPFBvc2l0aW9uPikiCisKKyM6IHJlZi1maWx0ZXIuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBvc2l0aW9uOiVzIgorbXNnc3RyICJuaWNodCBlcmthbm50ZSBQb3NpdGlvbjolcyIKKworIzogcmVmLWZpbHRlci5jOjQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2lkdGg6JXMiCittc2dzdHIgIm5pY2h0IGVya2FubnRlIEJyZWl0ZTolcyIKKworIzogcmVmLWZpbHRlci5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoYWxpZ24pIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAibmljaHQgZXJrYW5udGVzICUlKGFsaWduKSBBcmd1bWVudDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgd2lkdGggZXhwZWN0ZWQgd2l0aCB0aGUgJSUoYWxpZ24pIGF0b20iCittc2dzdHIgIlBvc2l0aXZlIEJyZWl0ZW5hbmdhYmUgZsO8ciAlJShhbGlnbikgZXJ3YXJ0ZXQiCisKKyM6IHJlZi1maWx0ZXIuYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGlmKSBhcmd1bWVudDogJXMiCittc2dzdHIgIm5pY2h0IGVya2FubnRlcyAlJShpZikgQXJndW1lbnQ6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICJGZWhsZXJoYWZ0ZXIgRmVsZG5hbWU6ICUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICJVbmJla2FubnRlciBGZWxkbmFtZTogJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnksIGJ1dCB0aGUgZmllbGQgJyUuKnMnIHJlcXVpcmVzIGFjY2VzcyB0byBvYmplY3QgZGF0YSIKK21zZ3N0ciAiIgorIktlaW4gR2l0LVJlcG9zaXRvcnksIGFiZXIgZGFzIEZlbGQgJyUuKnMnIGVyZm9yZGVydCBadWdyaWZmIGF1ZiBPYmpla3RkYXRlbi4iCisKKyM6IHJlZi1maWx0ZXIuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShpZikgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICJmb3JtYXQ6ICUlKGlmKSBBdG9tIG9obmUgZWluICUlKHRoZW4pIEF0b20gdmVyd2VuZGV0IgorCisjOiByZWYtZmlsdGVyLmM6Nzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgImZvcm1hdDogJSUodGhlbikgQXRvbSBvaG5lIGVpbiAlJShpZikgQXRvbSB2ZXJ3ZW5kZXQiCisKKyM6IHJlZi1maWx0ZXIuYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgImZvcm1hdDogJSUodGhlbikgQXRvbSBtZWhyIGFscyBlaW5tYWwgdmVyd2VuZGV0IgorCisjOiByZWYtZmlsdGVyLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIGFmdGVyICUlKGVsc2UpIgorbXNnc3RyICJmb3JtYXQ6ICUlKHRoZW4pIEF0b20gbmFjaCAlJShlbHNlKSB2ZXJ3ZW5kZXQiCisKKyM6IHJlZi1maWx0ZXIuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0OiAlJShlbHNlKSBBdG9tIG9obmUgZWluICUlKGlmKSBBdG9tIHZlcndlbmRldCIKKworIzogcmVmLWZpbHRlci5jOjgxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAiRm9ybWF0OiAlJShlbHNlKSBBdG9tIG9obmUgZWluICUlKHRoZW4pIEF0b20gdmVyd2VuZGV0IgorCisjOiByZWYtZmlsdGVyLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICJGb3JtYXQ6ICUlKGVuZCkgQXRvbSBtZWhyIGFscyBlaW5tYWwgdmVyd2VuZGV0IgorCisjOiByZWYtZmlsdGVyLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIHVzZWQgd2l0aG91dCBjb3JyZXNwb25kaW5nIGF0b20iCittc2dzdHIgIkZvcm1hdDogJSUoZW5kKSBBdG9tIG9obmUgenVnZWjDtnJpZ2VzIEF0b20gdmVyd2VuZGV0IgorCisjOiByZWYtZmlsdGVyLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmb3JtYXQgc3RyaW5nICVzIgorbXNnc3RyICJGZWhsZXJoYWZ0ZXIgRm9ybWF0aWVydW5nc3N0cmluZyAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyAlcyIKK21zZ3N0ciAia2VpbiBCcmFuY2gsIFJlYmFzZSB2b24gJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgcmViYXNpbmcgZGV0YWNoZWQgSEVBRCAlcyIKK21zZ3N0ciAia2VpbiBCcmFuY2gsIFJlYmFzZSB2b24gbG9zZ2Vsw7ZzdGVtIEhFQUQgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gJXMiCittc2dzdHIgImtlaW4gQnJhbmNoLCBiaW7DpHJlIFN1Y2hlIGJlZ29ubmVuIGJlaSAlcyIKKworIzogcmVmLWZpbHRlci5jOjE1MDQKK21zZ2lkICJubyBicmFuY2giCittc2dzdHIgImtlaW4gQnJhbmNoIgorCisjOiByZWYtZmlsdGVyLmM6MTU0MCByZWYtZmlsdGVyLmM6MTc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiCittc2dzdHIgIk9iamVrdCAlcyBmZWhsdCBmw7xyICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXJzZV9vYmplY3RfYnVmZmVyIGZhaWxlZCBvbiAlcyBmb3IgJXMiCittc2dzdHIgInBhcnNlX29iamVjdF9idWZmZXIgYmVpICVzIGbDvHIgJXMgZmVobGdlc2NobGFnZW4iCisKKyM6IHJlZi1maWx0ZXIuYzoyMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAiZmVobGVyaGFmdGVzIE9iamVrdCBiZWkgJyVzJyIKKworIzogcmVmLWZpbHRlci5jOjIwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgJXMiCittc2dzdHIgIklnbm9yaWVyZSBSZWZlcmVueiBtaXQgZmVobGVyaGFmdGVtIE5hbWVuICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSBtaXNzaW5nIgorbXNnc3RyICJGb3JtYXQ6ICUlKGVuZCkgQXRvbSBmZWhsdCIKKworIzogcmVmLWZpbHRlci5jOjI0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1tZXJnZWQiCittc2dzdHIgIkRpZSBPcHRpb24gYCVzJyBpc3QgaW5rb21wYXRpYmVsIG1pdCAtLW1lcmdlZC4iCisKKyM6IHJlZi1maWx0ZXIuYzoyNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8tbWVyZ2VkIgorbXNnc3RyICJEaWUgT3B0aW9uIGAlcycgaXN0IGlua29tcGF0aWJlbCBtaXQgLS1uby1tZXJnZWQuIgorCisjOiByZWYtZmlsdGVyLmM6MjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIk1pc3NnZWJpbGRldGVyIE9iamVrdG5hbWUgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIG11c3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIkRpZSBPcHRpb24gYCVzJyBtdXNzIGF1ZiBlaW5lbiBDb21taXQgemVpZ2VuLiIKKworIzogcmVtb3RlLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZpZyByZW1vdGUgc2hvcnRoYW5kIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgIiIKKyJLw7xyemVsIGbDvHIgUmVtb3RlLVJlcG9zaXRvcnkgaW4gZGVyIEtvbmZpZ3VyYXRpb24ga2FubiBuaWNodCBtaXQgJy8nICIKKyJiZWdpbm5lbjogJXMiCisKKyM6IHJlbW90ZS5jOjQxNAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgcmVjZWl2ZXBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAiTWVociBhbHMgZWluIHJlY2VpdmVwYWNrLUJlZmVobCBhbmdlZ2ViZW4sIGJlbnV0emUgZGVuIGVyc3Rlbi4iCisKKyM6IHJlbW90ZS5jOjQyMgorbXNnaWQgIm1vcmUgdGhhbiBvbmUgdXBsb2FkcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0IgorbXNnc3RyICJNZWhyIGFscyBlaW4gdXBsb2FkcGFjay1CZWZlaGwgYW5nZWdlYmVuLCBiZW51dHplIGRlbiBlcnN0ZW4uIgorCisjOiByZW1vdGUuYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIgorbXNnc3RyICJLYW5uICdmZXRjaCcgbmljaHQgZsO8ciBzb3dvaGwgJXMgYWxzIGF1Y2ggJXMgbmFjaCAlcyBhdXNmw7xocmVuLiIKKworIzogcmVtb3RlLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHVzdWFsbHkgdHJhY2tzICVzLCBub3QgJXMiCittc2dzdHIgIiVzIGZvbGd0IMO8YmxpY2hlcndlaXNlICVzLCBuaWNodCAlcyIKKworIzogcmVtb3RlLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyYWNrcyBib3RoICVzIGFuZCAlcyIKK21zZ3N0ciAiJXMgZm9sZ3Qgc293b2hsICVzIGFscyBhdWNoICVzIgorCisjOiByZW1vdGUuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5ICclcycgb2YgcGF0dGVybiBoYWQgbm8gJyonIgorbXNnc3RyICJTY2hsw7xzc2VsICclcycgZGVzIE11c3RlcnMgaGF0dGUga2VpbiAnKicuIgorCisjOiByZW1vdGUuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsdWUgJyVzJyBvZiBwYXR0ZXJuIGhhcyBubyAnKiciCittc2dzdHIgIldlcnQgJyVzJyBkZXMgTXVzdGVycyBoYXQga2VpbiAnKicuIgorCisjOiByZW1vdGUuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIGRvZXMgbm90IG1hdGNoIGFueSIKK21zZ3N0ciAiU3JjLVJlZnNwZWMgJXMgZW50c3ByaWNodCBrZWluZXIgUmVmZXJlbnouIgorCisjOiByZW1vdGUuYzoxMDA5CisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAiU3JjLVJlZnNwZWMgJXMgZW50c3ByaWNodCBtZWhyIGFscyBlaW5lciBSZWZlcmVuei4iCisKKyMuIFRSQU5TTEFUT1JTOiAibWF0Y2hlcyAnJXMnJSIgaXMgdGhlIDxkc3Q+IHBhcnQgb2YgImdpdCBwdXNoCisjLiA8cmVtb3RlPiA8c3JjPjo8ZHN0PiIgcHVzaCwgYW5kICJiZWluZyBwdXNoZWQgKCclcycpIiBpcworIy4gdGhlIDxzcmM+LgorIy4KKyM6IHJlbW90ZS5jOjEwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXN0aW5hdGlvbiB5b3UgcHJvdmlkZWQgaXMgbm90IGEgZnVsbCByZWZuYW1lIChpLmUuLFxuIgorInN0YXJ0aW5nIHdpdGggXCJyZWZzL1wiKS4gV2UgdHJpZWQgdG8gZ3Vlc3Mgd2hhdCB5b3UgbWVhbnQgYnk6XG4iCisiXG4iCisiLSBMb29raW5nIGZvciBhIHJlZiB0aGF0IG1hdGNoZXMgJyVzJyBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiLSBDaGVja2luZyBpZiB0aGUgPHNyYz4gYmVpbmcgcHVzaGVkICgnJXMnKVxuIgorIiAgaXMgYSByZWYgaW4gXCJyZWZzL3toZWFkcyx0YWdzfS9cIi4gSWYgc28gd2UgYWRkIGEgY29ycmVzcG9uZGluZ1xuIgorIiAgcmVmcy97aGVhZHMsdGFnc30vIHByZWZpeCBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiXG4iCisiTmVpdGhlciB3b3JrZWQsIHNvIHdlIGdhdmUgdXAuIFlvdSBtdXN0IGZ1bGx5IHF1YWxpZnkgdGhlIHJlZi4iCittc2dzdHIgIiIKKyJEYXMgYW5nZWdlYmVuZSBaaWVsIGlzdCBrZWluIHZvbGxzdMOkbmRpZ2VyIFJlZmVyZW56bmFtZSAoc3RhcnRldCBtaXQgXCJyZWZzLyIKKyJcIikuXG4iCisiV2lyIHZlcnN1Y2h0ZW4genUgZXJyYXRlbiwgd2FzIFNpZSBtZWludGVuLCBtaXQ6XG4iCisiXG4iCisiLSBTdWNoZSBlaW5lciBSZWZlcmVueiwgZGllIG1pdCAnJXMnIMO8YmVyZWluc3RpbW10LCBhdWYgZGVyIFJlbW90ZS1TZWl0ZVxuIgorIi0gUHLDvGZ1bmcsIG9iIGRpZSB2ZXJzZW5kZXRlIDxRdWVsbGU+ICgnJXMnKSBlaW5lIFJlZmVyZW56IGluIFwicmVmcy97aGVhZHMsIgorInRhZ3N9XCJcbiIKKyIgIGlzdCwgaW4gZGVzc2VuIEZhbGxlIHdpciBlaW5lbiBlbnRzcHJlY2hlbmRlbiByZWZzL3toZWFkcyx0YWdzfSBQcsOkZml4ICIKKyJhdWZcbiIKKyIgIGRlciBSZW1vdGUtU2VpdGUgaGluenVmw7xnZW4gd8O8cmRlbi5cbiIKKyJcbiIKKyJLZWluZXMgaGF0IGZ1bmt0aW9uaWVydCwgc29kYXNzIHdpciBhdWZnZWdlYmVuIGhhYmVuLiBTaWUgbcO8c3NlbiBkaWVcbiIKKyJSZWZlcmVueiBtaXQgdm9sbHF1YWxpZml6aWVydGVuIE5hbWVuIGFuZ2ViZW4uIgorCisjOiByZW1vdGUuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGNvbW1pdCBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL2hlYWRzLyVzJz8iCittc2dzdHIgIiIKKyJEZXIgPFF1ZWxsZT4gVGVpbCBkZXIgUmVmc3BlYyBpc3QgZWluIENvbW1pdC1PYmpla3QuXG4iCisiTWVpbnRlbiBTaWUsIGVpbmVuIG5ldWVuIEJyYW5jaCBtaXR0ZWxzIFB1c2ggbmFjaFxuIgorIiclczpyZWZzL2hlYWRzLyVzJyB6dSBlcnN0ZWxsZW4/IgorCisjOiByZW1vdGUuYzoxMDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRhZyBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyB0YWcgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIkRlciA8UXVlbGxlPiBUZWlsIGRlciBSZWZzcGVjIGlzdCBlaW4gVGFnLU9iamVrdC5cbiIKKyJNZWludGVuIFNpZSwgZWluZW4gbmV1ZW4gVGFnIG1pdHRlbHMgUHVzaCBuYWNoXG4iCisiJyVzOnJlZnMvdGFncy8lcycgenUgZXJzdGVsbGVuPyIKKworIzogcmVtb3RlLmM6MTA1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IHRyZWUgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIkRlciA8UXVlbGxlPiBUZWlsIGRlciBSZWZzcGVjIGlzdCBlaW4gVHJlZS1PYmpla3QuXG4iCisiTWVpbnRlbiBTaWUsIGVpbmVuIFRhZyBmw7xyIGVpbiBuZXVlcyBUcmVlLU9iamVrdFxuIgorIm1pdHRlbHMgUHVzaCBuYWNoICclczpyZWZzL3RhZ3MvJyVzJyB6dSBlcnN0ZWxsZW4/IgorCisjOiByZW1vdGUuYzoxMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGJsb2Igb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgYmxvYiBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisiRGVyIDxRdWVsbGU+IFRlaWwgZGVyIFJlZnNwZWMgaXN0IGVpbiBCbG9iLU9iamVrdC5cbiIKKyJNZWludGVuIFNpZSwgZWluZW4gVGFnIGbDvHIgZWluIG5ldWVzIEJsb2ItT2JqZWt0XG4iCisibWl0dGVscyBQdXNoIG5hY2ggJyVzOnJlZnMvdGFncy8lcycgenUgZXJzdGVsbGVuPyIKKworIzogcmVtb3RlLmM6MTA5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYnJhbmNoIgorbXNnc3RyICIlcyBrYW5uIG5pY2h0IHp1IEJyYW5jaCBhdWZnZWzDtnN0IHdlcmRlbi4iCisKKyM6IHJlbW90ZS5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlbGV0ZSAnJXMnOiByZW1vdGUgcmVmIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBsw7ZzY2hlbjogUmVtb3RlLVJlZmVyZW56IGV4aXN0aWVydCBuaWNodC4iCisKKyM6IHJlbW90ZS5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHN0IHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICJEc3QtUmVmc3BlYyAlcyBlbnRzcHJpY2h0IG1laHIgYWxzIGVpbmVyIFJlZmVyZW56LiIKKworIzogcmVtb3RlLmM6MTEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmICVzIHJlY2VpdmVzIGZyb20gbW9yZSB0aGFuIG9uZSBzcmMiCittc2dzdHIgIkRzdC1SZWZlcmVueiAlcyBlbXBmw6RuZ3Qgdm9uIG1laHIgYWxzIGVpbmVyIFF1ZWxsZSIKKworIzogcmVtb3RlLmM6MTYyOCByZW1vdGUuYzoxNzI5Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBRCB6ZWlndCBhdWYga2VpbmVuIEJyYW5jaCIKKworIzogcmVtb3RlLmM6MTYzNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAiS2VpbiBzb2xjaGVyIEJyYW5jaDogJyVzJyIKKworIzogcmVtb3RlLmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAiS2VpbiBVcHN0cmVhbS1CcmFuY2ggZsO8ciBCcmFuY2ggJyVzJyBrb25maWd1cmllcnQuIgorCisjOiByZW1vdGUuYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJVcHN0cmVhbS1CcmFuY2ggJyVzJyBuaWNodCBhbHMgUmVtb3RlLVRyYWNraW5nLUJyYW5jaCBnZXNwZWljaGVydCIKKworIzogcmVtb3RlLmM6MTY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIGRlc3RpbmF0aW9uICclcycgb24gcmVtb3RlICclcycgaGFzIG5vIGxvY2FsIHRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorIlppZWwgZsO8ciBcInB1c2hcIiAnJXMnIGF1ZiBSZW1vdGUtUmVwb3NpdG9yeSAnJXMnIGhhdCBrZWluZW4gbG9rYWwgZ2Vmb2xndGVuICIKKyJCcmFuY2giCisKKyM6IHJlbW90ZS5jOjE2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgaGFzIG5vIHJlbW90ZSBmb3IgcHVzaGluZyIKK21zZ3N0ciAiQnJhbmNoICclcycgaGF0IGtlaW5lbiBVcHN0cmVhbS1CcmFuY2ggZ2VzZXR6dCIKKworIzogcmVtb3RlLmM6MTY4MworIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciCittc2dzdHIgIlB1c2gtUmVmc3BlY3MgZsO8ciAnJXMnIGJlaW5oYWx0ZW4gbmljaHQgJyVzJyIKKworIzogcmVtb3RlLmM6MTY5NgorbXNnaWQgInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIKK21zZ3N0ciAia2VpbiBaaWVsIGbDvHIgXCJwdXNoXCIgKHB1c2guZGVmYXVsdCBpc3QgJ25vdGhpbmcnKSIKKworIzogcmVtb3RlLmM6MTcxOAorbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgImthbm4gZWluemVsbmVzIFppZWwgZsO8ciBcInB1c2hcIiBpbSBNb2R1cyAnc2ltcGxlJyBuaWNodCBhdWZsw7ZzZW4iCisKKyM6IHJlbW90ZS5jOjE4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZmluZCByZW1vdGUgcmVmICVzIgorbXNnc3RyICJLb25udGUgUmVtb3RlLVJlZmVyZW56ICVzIG5pY2h0IGZpbmRlbi4iCisKKyM6IHJlbW90ZS5jOjE4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiBJZ25vcmluZyBmdW5ueSByZWYgJyVzJyBsb2NhbGx5IgorbXNnc3RyICIqIElnbm9yaWVyZSBzb25kZXJiYXJlIFJlZmVyZW56ICclcycgbG9rYWwiCisKKyM6IHJlbW90ZS5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICIiCisiSWhyIEJyYW5jaCBiYXNpZXJ0IGF1ZiAnJXMnLCBhYmVyIGRlciBVcHN0cmVhbS1CcmFuY2ggd3VyZGUgZW50ZmVybnQuXG4iCisKKyM6IHJlbW90ZS5jOjIwMjQKK21zZ2lkICIgICh1c2UgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB0byBmaXh1cClcbiIKK21zZ3N0ciAiICAoYmVudXR6ZW4gU2llIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgenVtIEJlaGViZW4pXG4iCisKKyM6IHJlbW90ZS5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAgdG8gZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgIklociBCcmFuY2ggaXN0IGF1ZiBkZW1zZWxiZW4gU3RhbmQgd2llICclcycuXG4iCisKKyM6IHJlbW90ZS5jOjIwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggYW5kICclcycgcmVmZXIgdG8gZGlmZmVyZW50IGNvbW1pdHMuXG4iCittc2dzdHIgIklociBCcmFuY2ggdW5kICclcycgemVpZ2VuIGF1ZiB1bnRlcnNjaGllZGxpY2hlIENvbW1pdHMuXG4iCisKKyM6IHJlbW90ZS5jOjIwMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiJXNcIiBmb3IgZGV0YWlscylcbiIKK21zZ3N0ciAiICAoYmVudXR6ZW4gU2llIFwiJXNcIiBmw7xyIERldGFpbHMpXG4iCisKKyM6IHJlbW90ZS5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAiSWhyIEJyYW5jaCBpc3QgJTIkZCBDb21taXQgdm9yICclMSRzJy5cbiIKK21zZ3N0clsxXSAiSWhyIEJyYW5jaCBpc3QgJTIkZCBDb21taXRzIHZvciAnJTEkcycuXG4iCisKKyM6IHJlbW90ZS5jOjIwNDQKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIgorbXNnc3RyICIgIChiZW51dHplbiBTaWUgXCJnaXQgcHVzaFwiLCB1bSBsb2thbGUgQ29tbWl0cyB6dSBwdWJsaXppZXJlbilcbiIKKworIzogcmVtb3RlLmM6MjA0NworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICIiCisiSWhyIEJyYW5jaCBpc3QgJTIkZCBDb21taXQgaGludGVyICclMSRzJywgdW5kIGthbm4gdm9yZ2VzcHVsdCB3ZXJkZW4uXG4iCittc2dzdHJbMV0gIiIKKyJJaHIgQnJhbmNoIGlzdCAlMiRkIENvbW1pdHMgaGludGVyICclMSRzJywgdW5kIGthbm4gdm9yZ2VzcHVsdCB3ZXJkZW4uXG4iCisKKyM6IHJlbW90ZS5jOjIwNTUKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBwdWxsXCIsIHVtIElocmVuIGxva2FsZW4gQnJhbmNoIHp1IGFrdHVhbGlzaWVyZW4pXG4iCisKKyM6IHJlbW90ZS5jOjIwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisiSWhyIEJyYW5jaCB1bmQgJyVzJyBzaW5kIGRpdmVyZ2llcnQsXG4iCisidW5kIGhhYmVuIGpld2VpbHMgJWQgdW5kICVkIHVudGVyc2NoaWVkbGljaGUgQ29tbWl0cy5cbiIKK21zZ3N0clsxXSAiIgorIklociBCcmFuY2ggdW5kICclcycgc2luZCBkaXZlcmdpZXJ0LFxuIgorInVuZCBoYWJlbiBqZXdlaWxzICVkIHVuZCAlZCB1bnRlcnNjaGllZGxpY2hlIENvbW1pdHMuXG4iCisKKyM6IHJlbW90ZS5jOjIwNjgKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpXG4iCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgcHVsbFwiLCB1bSBJaHJlbiBCcmFuY2ggbWl0IGRlbSBSZW1vdGUtQnJhbmNoICIKKyJ6dXNhbW1lbnp1ZsO8aHJlbilcbiIKKworIzogcmVtb3RlLmM6MjI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcGFyc2UgZXhwZWN0ZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAiS2FubiBlcndhcnRldGVuIE9iamVrdG5hbWVuICclcycgbmljaHQgcGFyc2VuLiIKKworIzogcmVwbGFjZS1vYmplY3QuYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiCittc2dzdHIgInVuZ8O8bHRpZ2VyIE5hbWUgZsO8ciBlcnNldHplbmRlIFJlZmVyZW56OiAlcyIKKworIzogcmVwbGFjZS1vYmplY3QuYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgcmVwbGFjZSByZWY6ICVzIgorbXNnc3RyICJkb3BwZWx0ZSBlcnNldHplbmRlIFJlZmVyZW56OiAlcyIKKworIzogcmVwbGFjZS1vYmplY3QuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIGRlcHRoIHRvbyBoaWdoIGZvciBvYmplY3QgJXMiCittc2dzdHIgIkVyc2V0enVuZ3N0aWVmZSB6dSBob2NoIGbDvHIgT2JqZWt0ICVzIgorCisjOiByZXJlcmUuYzoyMTcgcmVyZXJlLmM6MjI2IHJlcmVyZS5jOjIyOQorbXNnaWQgImNvcnJ1cHQgTUVSR0VfUlIiCittc2dzdHIgIkZlaGxlcmhhZnRlcyBNRVJHRV9SUiIKKworIzogcmVyZXJlLmM6MjY0IHJlcmVyZS5jOjI2OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXJlcmUgcmVjb3JkIgorbXNnc3RyICJLb25udGUgUmVyZXJlLUVpbnRyYWcgbmljaHQgc2NocmVpYmVuLiIKKworIzogcmVyZXJlLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZXJlIHdlcmUgZXJyb3JzIHdoaWxlIHdyaXRpbmcgJyVzJyAoJXMpIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gdm9uICclcycgKCVzKS4iCisKKyM6IHJlcmVyZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmx1c2ggJyVzJyIKK21zZ3N0ciAiRmx1c2ggYmVpICclcycgZmVobGdlc2NobGFnZW4uIgorCisjOiByZXJlcmUuYzo1MDMgcmVyZXJlLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29uZmxpY3QgaHVua3MgaW4gJyVzJyIKK21zZ3N0ciAiS29ubnRlIEtvbmZsaWt0LUJsw7Zja2UgaW4gJyVzJyBuaWNodCBwYXJzZW4uIgorCisjOiByZXJlcmUuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVmcnVmIHZvbiB1dGltZSgpIGF1ZiAnJXMnLiIKKworIzogcmVyZXJlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIlNjaHJlaWJlbiB2b24gJyVzJyBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IHJlcmVyZS5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAiJyVzJyBtaXQgdm9yaGVyaWdlciBLb25mbGlrdGF1ZmzDtnN1bmcgenVtIENvbW1pdCB2b3JnZW1lcmt0LiIKKworIzogcmVyZXJlLmM6NzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHJlc29sdXRpb24gZm9yICclcycuIgorbXNnc3RyICJLb25mbGlrdGF1ZmzDtnN1bmcgZsO8ciAnJXMnIGF1ZmdlemVpY2huZXQuIgorCisjOiByZXJlcmUuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzb2x2ZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAiS29uZmxpa3RlIGluICclcycgbWl0IHZvcmhlcmlnZXIgS29uZmxpa3RhdWZsw7ZzdW5nIGJlc2VpdGlndC4iCisKKyM6IHJlcmVyZS5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rIHN0cmF5ICclcyciCittc2dzdHIgIkthbm4gJyVzJyBuaWNodCBsw7ZzY2hlbi4iCisKKyM6IHJlcmVyZS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNvcmRlZCBwcmVpbWFnZSBmb3IgJyVzJyIKK21zZ3N0ciAiUHJlaW1hZ2UgZsO8ciAnJXMnIGF1ZmdlemVpY2huZXQuIgorCisjOiByZXJlcmUuYzo4ODEgc3VibW9kdWxlLmM6MjA3OCBidWlsdGluL2xvZy5jOjE4NzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDU0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIktvbm50ZSBWZXJ6ZWljaG5pcyAnJXMnIG5pY2h0IGVyc3RlbGxlbi4iCisKKyM6IHJlcmVyZS5jOjEwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBjb25mbGljdGVkIHN0YXRlIGluICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEFrdHVhbGlzaWVyZW4gZGVzIEtvbmZsaWt0LVN0YXR1cyBpbiAnJXMnLiIKKworIzogcmVyZXJlLmM6MTA2OCByZXJlcmUuYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlbWVtYmVyZWQgcmVzb2x1dGlvbiBmb3IgJyVzJyIKK21zZ3N0ciAiS2VpbmUgYXVmZ2V6ZWljaG5ldGUgS29uZmxpa3RhdWZsw7ZzdW5nIGbDvHIgJyVzJy4iCisKKyM6IHJlcmVyZS5jOjEwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayAnJXMnIgorbXNnc3RyICJLYW5uICclcycgbmljaHQgbMO2c2NoZW4uIgorCisjOiByZXJlcmUuYzoxMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIlByZWltYWdlIGbDvHIgJyVzJyBha3R1YWxpc2llcnQuIgorCisjOiByZXJlcmUuYzoxMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvcmdvdCByZXNvbHV0aW9uIGZvciAnJXMnXG4iCittc2dzdHIgIkF1ZmdlemVpY2huZXRlIEtvbmZsaWt0YXVmbMO2c3VuZyBmw7xyICclcycgZ2Vsw7ZzY2h0LlxuIgorCisjOiByZXJlcmUuYzoxMTk5Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcnItY2FjaGUgZGlyZWN0b3J5IgorbXNnc3RyICJLb25udGUgcnItY2FjaGUgVmVyemVpY2huaXMgbmljaHQgw7ZmZm5lbi4iCisKKyM6IHJldmlzaW9uLmM6MjQ5NworbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgIklociBha3R1ZWxsZXIgQnJhbmNoIHNjaGVpbnQgZmVobGVyaGFmdCB6dSBzZWluLiIKKworIzogcmV2aXNpb24uYzoyNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIKK21zZ3N0ciAiSWhyIGFrdHVlbGxlciBCcmFuY2ggJyVzJyBoYXQgbm9jaCBrZWluZSBDb21taXRzLiIKKworIzogcmV2aXNpb24uYzoyNzA4Cittc2dpZCAiLS1maXJzdC1wYXJlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1iaXNlY3QiCittc2dzdHIgIkRpZSBPcHRpb25lbiAtLWZpcnN0LXBhcmVudCB1bmQgLS1iaXNlY3Qgc2luZCBpbmtvbXBhdGliZWwuIgorCisjOiByZXZpc2lvbi5jOjI3MTIKK21zZ2lkICItTCBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBkaWZmIGZvcm1hdHMgYmVzaWRlcyAtcCBhbmQgLXMiCittc2dzdHIgIi1MIHVudGVyc3TDvHR6dCBub2NoIGtlaW5lIGFuZGVyZW4gRGlmZi1Gb3JtYXRlIGF1w59lciAtcCB1bmQgLXMiCisKKyM6IHJ1bi1jb21tYW5kLmM6NzYzCittc2dpZCAib3BlbiAvZGV2L251bGwgZmFpbGVkIgorbXNnc3RyICLDlmZmbmVuIHZvbiAvZGV2L251bGwgZmVobGdlc2NobGFnZW4iCisKKyM6IHJ1bi1jb21tYW5kLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFzeW5jIHRocmVhZDogJXMiCittc2dzdHIgIktvbm50ZSBUaHJlYWQgZsO8ciBhc3luYyBuaWNodCBlcnpldWdlbjogJXMiCisKKyM6IHJ1bi1jb21tYW5kLmM6MTMzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlICclcycgaG9vayB3YXMgaWdub3JlZCBiZWNhdXNlIGl0J3Mgbm90IHNldCBhcyBleGVjdXRhYmxlLlxuIgorIllvdSBjYW4gZGlzYWJsZSB0aGlzIHdhcm5pbmcgd2l0aCBgZ2l0IGNvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgZmFsc2VgLiIKK21zZ3N0ciAiIgorIkRlciAnJXMnIEhvb2sgd3VyZGUgaWdub3JpZXJ0LCB3ZWlsIGVyIG5pY2h0IGFscyBhdXNmw7xocmJhciBtYXJraWVydCBpc3QuXG4iCisiU2llIGvDtm5uZW4gZGllc2UgV2FybnVuZyBtaXQgYGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlYCAiCisiZGVha3RpdmllcmVuLiIKKworIzogc2VuZC1wYWNrLmM6MTQ0Cittc2dpZCAidW5leHBlY3RlZCBmbHVzaCBwYWNrZXQgd2hpbGUgcmVhZGluZyByZW1vdGUgdW5wYWNrIHN0YXR1cyIKK21zZ3N0ciAiVW5lcndhcnRldGVzIEZsdXNoLVBha2V0IGJlaW0gTGVzZW4gZGVzIFJlbW90ZS1VbnBhY2stU3RhdHVzLiIKKworIzogc2VuZC1wYWNrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSByZW1vdGUgdW5wYWNrIHN0YXR1czogJXMiCittc2dzdHIgIktvbm50ZSBTdGF0dXMgZGVzIEVudHBhY2tlbnMgZGVyIEdlZ2Vuc2VpdGUgbmljaHQgcGFyc2VuOiAlcyIKKworIzogc2VuZC1wYWNrLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSB1bnBhY2sgZmFpbGVkOiAlcyIKK21zZ3N0ciAiRW50cGFja2VuIGF1ZiBkZXIgR2VnZW5zZWl0ZSBmZWhsZ2VzY2hsYWdlbjogJXMiCisKKyM6IHNlbmQtcGFjay5jOjMwOQorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTaWduaWVyZW4gZGVzIFwicHVzaFwiLVplcnRpZmlrYXRlcyIKKworIzogc2VuZC1wYWNrLmM6NDIzCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCBwdXNoIgorbXNnc3RyICIiCisiZGllIEdlZ2Vuc2VpdGUgdW50ZXJzdMO8dHp0IGtlaW5lbiBzaWduaWVydGVuIFZlcnNhbmQgKFwiLS1zaWduZWQgcHVzaFwiKSIKKworIzogc2VuZC1wYWNrLmM6NDI1Cittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tIgorInNpZ25lZCBwdXNoIgorbXNnc3RyICIiCisia2VpbiBWZXJzYW5kIGRlcyBcInB1c2hcIi1aZXJ0aWZpa2F0ZXMsIGRhIGRpZSBHZWdlbnNlaXRlIGtlaW5lbiBzaWduaWVydGVuXG4iCisiVmVyc2FuZCAoXCItLXNpZ25lZCBwdXNoXCIpIHVudGVyc3TDvHR6dCIKKworIzogc2VuZC1wYWNrLmM6NDM3Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyBwdXNoIgorbXNnc3RyICJkaWUgR2VnZW5zZWl0ZSB1bnRlcnN0w7x0enQga2VpbmVuIGF0b21hcmVuIFZlcnNhbmQgKFwiLS1hdG9taWMgcHVzaFwiKSIKKworIzogc2VuZC1wYWNrLmM6NDQyCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBwdXNoIG9wdGlvbnMiCittc2dzdHIgImRpZSBHZWdlbnNlaXRlIHVudGVyc3TDvHR6dCBrZWluZSBQdXNoLU9wdGlvbmVuIgorCisjOiBzZXF1ZW5jZXIuYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgbWVzc2FnZSBjbGVhbnVwIG1vZGUgJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgXCJjbGVhbnVwXCItTW9kdXMgJyVzJyBmw7xyIENvbW1pdC1CZXNjaHJlaWJ1bmdlbi4iCisKKyM6IHNlcXVlbmNlci5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGzDtnNjaGVuLiIKKworIzogc2VxdWVuY2VyLmM6MzE1IGJ1aWx0aW4vcmViYXNlLmM6Nzg1IGJ1aWx0aW4vcmViYXNlLmM6MTc1MCBidWlsdGluL3JtLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbMO2c2NoZW4iCisKKyM6IHNlcXVlbmNlci5jOjMyNQorbXNnaWQgInJldmVydCIKK21zZ3N0ciAiUmV2ZXJ0IgorCisjOiBzZXF1ZW5jZXIuYzozMjcKK21zZ2lkICJjaGVycnktcGljayIKK21zZ3N0ciAiQ2hlcnJ5LVBpY2siCisKKyM6IHNlcXVlbmNlci5jOjMyOQorbXNnaWQgInJlYmFzZSIKK21zZ3N0ciAiUmViYXNlIgorCisjOiBzZXF1ZW5jZXIuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBhY3Rpb246ICVkIgorbXNnc3RyICJVbmJla2FubnRlIEFrdGlvbjogJWQiCisKKyM6IHNlcXVlbmNlci5jOjM4OQorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisibmFjaCBBdWZsw7ZzdW5nIGRlciBLb25mbGlrdGUgbWFya2llcmVuIFNpZSBkaWUga29ycmlnaWVydGVuIFBmYWRlXG4iCisibWl0ICdnaXQgYWRkIDxQZmFkZT4nIG9kZXIgJ2dpdCBybSA8UGZhZGU+JyIKKworIzogc2VxdWVuY2VyLmM6MzkyCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKyJuYWNoIEF1ZmzDtnN1bmcgZGVyIEtvbmZsaWt0ZSBtYXJraWVyZW4gU2llIGRpZSBrb3JyaWdpZXJ0ZW4gUGZhZGVcbiIKKyJtaXQgJ2dpdCBhZGQgPFBmYWRlPicgb2RlciAnZ2l0IHJtIDxQZmFkZT4nIHVuZCB0cmFnZW4gU2llIGRhcyBFcmdlYm5pcyBtaXRcbiIKKyInZ2l0IGNvbW1pdCcgZWluIgorCisjOiBzZXF1ZW5jZXIuYzo0MDUgc2VxdWVuY2VyLmM6MjkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBzcGVycmVuIgorCisjOiBzZXF1ZW5jZXIuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGVvbCB0byAnJXMnIgorbXNnc3RyICJLb25udGUgRU9MIG5pY2h0IG5hY2ggJyVzJyBzY2hyZWliZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo0MTcgc2VxdWVuY2VyLmM6MjcwNiBzZXF1ZW5jZXIuYzoyOTA3IHNlcXVlbmNlci5jOjI5MjEKKyM6IHNlcXVlbmNlci5jOjMxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEZlcnRpZ3N0ZWxsZW4gdm9uICclcycuIgorCisjOiBzZXF1ZW5jZXIuYzo0NDAgc2VxdWVuY2VyLmM6MTYxMyBzZXF1ZW5jZXIuYzoyNzI2IHNlcXVlbmNlci5jOjMxNjcKKyM6IHNlcXVlbmNlci5jOjMyNzYgYnVpbHRpbi9hbS5jOjI0OSBidWlsdGluL2NvbW1pdC5jOjc4NyBidWlsdGluL21lcmdlLmM6MTEyMAorIzogYnVpbHRpbi9yZWJhc2UuYzo1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbGVzZW4iCisKKyM6IHNlcXVlbmNlci5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXMuIgorbXNnc3RyICJJaHJlIGxva2FsZW4gw4RuZGVydW5nZW4gd8O8cmRlbiBkdXJjaCBkZW4gJXMgw7xiZXJzY2hyaWViZW4gd2VyZGVuLiIKKworIzogc2VxdWVuY2VyLmM6NDcwCittc2dpZCAiY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICIiCisiQ29tbWl0dGVuIFNpZSBJaHJlIMOEbmRlcnVuZ2VuIG9kZXIgYmVudXR6ZW4gU2llIFwic3Rhc2hcIiwgdW0gZm9ydHp1ZmFocmVuLiIKKworIzogc2VxdWVuY2VyLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiVzOiBWb3JzcHVsZW4iCisKKyM6IHNlcXVlbmNlci5jOjU0MSBidWlsdGluL3RhZy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgXCJjbGVhbnVwXCIgTW9kdXMgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiLCAiY2hlcnJ5LXBpY2siIG9yCisjLiAicmViYXNlIi4KKyMuCisjOiBzZXF1ZW5jZXIuYzo2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IEtvbm50ZSBuZXVlIEluZGV4LURhdGVpIG5pY2h0IHNjaHJlaWJlbiIKKworIzogc2VxdWVuY2VyLmM6NjUyCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlIgorbXNnc3RyICJLb25udGUgQ2FjaGUtVmVyemVpY2huaXMgbmljaHQgYWt0dWFsaXNpZXJlbi4iCisKKyM6IHNlcXVlbmNlci5jOjY2NgorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICJLb25udGUgSEVBRC1Db21taXQgbmljaHQgYXVmbMO2c2VuLiIKKworIzogc2VxdWVuY2VyLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGtleSBwcmVzZW50IGluICclLipzJyIKK21zZ3N0ciAiS2VpbiBTY2hsw7xzc2VsIGluICclLipzJyB2b3JoYW5kZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlcXVvdGUgdmFsdWUgb2YgJyVzJyIKK21zZ3N0ciAiS29ubnRlIEFuZsO8aHJ1bmdzemVpY2hlbiB2b24gJyVzJyBuaWNodCBlbnRmZXJuZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo3OTQgd3JhcHBlci5jOjE5MCB3cmFwcGVyLmM6MzYwIGJ1aWx0aW4vYW0uYzo3MTAKKyM6IGJ1aWx0aW4vYW0uYzo4MDIgYnVpbHRpbi9tZXJnZS5jOjExMTcgYnVpbHRpbi9yZWJhc2UuYzoxMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHp1bSBMZXNlbiDDtmZmbmVuLiIKKworIzogc2VxdWVuY2VyLmM6ODA0Cittc2dpZCAiJ0dJVF9BVVRIT1JfTkFNRScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfTkFNRScgYmVyZWl0cyBhbmdlZ2ViZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo4MDkKK21zZ2lkICInR0lUX0FVVEhPUl9FTUFJTCcgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfRU1BSUwnIGJlcmVpdHMgYW5nZWdlYmVuLiIKKworIzogc2VxdWVuY2VyLmM6ODE0Cittc2dpZCAiJ0dJVF9BVVRIT1JfREFURScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfREFURScgYmVyZWl0cyBhbmdlZ2ViZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YXJpYWJsZSAnJXMnIgorbXNnc3RyICJVbmJla2FubnRlIFZhcmlhYmxlICclcyciCisKKyM6IHNlcXVlbmNlci5jOjgyMworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfTkFNRSciCittc2dzdHIgIidHSVRfQVVUSE9SX05BTUUnIGZlaGx0LiIKKworIzogc2VxdWVuY2VyLmM6ODI1Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9FTUFJTCciCittc2dzdHIgIidHSVRfQVVUSE9SX0VNQUlMJyBmZWhsdC4iCisKKyM6IHNlcXVlbmNlci5jOjgyNworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfREFURSciCittc2dzdHIgIidHSVRfQVVUSE9SX0RBVEUnIGZlaGx0LiIKKworIzogc2VxdWVuY2VyLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZVxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlIHNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJFcyBiZWZpbmRlbiBzaWNoIHp1bSBDb21taXQgdm9yZ2VtZXJrdGUgw4RuZGVydW5nZW4gaW4gSWhyZW0gIgorIkFyYmVpdHN2ZXJ6ZWljaG5pcy5cbiIKKyJXZW5uIGRpZXNlIMOEbmRlcnVuZ2VuIGluIGRlbiB2b3JoZXJpZ2VuIENvbW1pdCBhdWZnZW5vbW1lbiB3ZXJkZW4gc29sbGVuLFxuIgorImbDvGhyZW4gU2llIGF1czpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIldlbm4gZGFyYXVzIGVpbiBuZXVlciBDb21taXQgZXJ6ZXVndCB3ZXJkZW4gc29sbCwgZsO8aHJlbiBTaWUgYXVzOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIkltIEFuc2NobHVzcyBmw7xocmVuIFNpZSB6dW0gRm9ydGZhaHJlbiBhdXM6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6MTE0OAorbXNnaWQgIidwcmVwYXJlLWNvbW1pdC1tc2cnIGhvb2sgZmFpbGVkIgorbXNnc3RyICIncHJlcGFyZS1jb21taXQtbXNnJyBIb29rIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogc2VxdWVuY2VyLmM6MTE1NAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIklociBOYW1lIHVuZCBFLU1haWwgQWRyZXNzZSB3dXJkZW4gYXV0b21hdGlzY2ggYXVmIEJhc2lzXG4iCisiSWhyZXMgQmVudXR6ZXItIHVuZCBSZWNobmVybmFtZW5zIGtvbmZpZ3VyaWVydC4gQml0dGUgcHLDvGZlbiBTaWUsIGRhc3NcbiIKKyJkaWVzZSB6dXRyZWZmZW5kIHNpbmQuIFNpZSBrw7ZubmVuIGRpZXNlIE1lbGR1bmcgdW50ZXJkcsO8Y2tlbiwgaW5kZW0gU2llXG4iCisiZGllc2UgZXhwbGl6aXQgc2V0emVuLiBGw7xocmVuIFNpZSBkYXp1IGRlbiBmb2xnZW5kZW4gQmVmZWhsIGF1cyB1bmQgZm9sZ2VuXG4iCisiU2llIGRlbiBBbndlaXN1bmdlbiBpbiBJaHJlbSBFZGl0b3IsIHVtIGRpZSBLb25maWd1cmF0aW9uc2RhdGVpIHp1ICIKKyJiZWFyYmVpdGVuOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIk5hY2hkZW0gU2llIGRhcyBnZXRhbiBoYWJlbiwga8O2bm5lbiBTaWUgSWhyZSBJZGVudGl0w6R0IGbDvHIgZGllc2VuIENvbW1pdFxuIgorIsOkbmRlcm4gbWl0OlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTE2NworbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIklociBOYW1lIHVuZCBFLU1haWwgQWRyZXNzZSB3dXJkZW4gYXV0b21hdGlzY2ggYXVmIEJhc2lzXG4iCisiSWhyZXMgQmVudXR6ZXItIHVuZCBSZWNobmVybmFtZW5zIGtvbmZpZ3VyaWVydC4gQml0dGUgcHLDvGZlbiBTaWUsIGRhc3NcbiIKKyJkaWVzZSB6dXRyZWZmZW5kIHNpbmQuIFNpZSBrw7ZubmVuIGRpZXNlIE1lbGR1bmcgdW50ZXJkcsO8Y2tlbiwgaW5kZW0gU2llXG4iCisiZGllc2UgZXhwbGl6aXQgc2V0emVuOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIklociBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIGlocmVAZW1haWxhZHJlc3NlLmRlXG4iCisiXG4iCisiTmFjaGRlbSBTaWUgZGFzIGdldGFuIGhhYmVuLCBrw7ZubmVuIFNpZSBJaHJlIElkZW50aXTDpHQgZsO8ciBkaWVzZW4gQ29tbWl0ICIKKyLDpG5kZXJuOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTIwOQorbXNnaWQgImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIktvbm50ZSBuZXUgZXJzdGVsbHRlbiBDb21taXQgbmljaHQgbmFjaHNjaGxhZ2VuLiIKKworIzogc2VxdWVuY2VyLmM6MTIxMQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiS29ubnRlIG5ldSBlcnN0ZWxsdGVuIENvbW1pdCBuaWNodCBhbmFseXNpZXJlbi4iCisKKyM6IHNlcXVlbmNlci5jOjEyNTcKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBIRUFEIGFmdGVyIGNyZWF0aW5nIGNvbW1pdCIKK21zZ3N0ciAiS29ubnRlIEhFQUQgbmljaHQgYXVmbMO2c2VuLCBuYWNoZGVtIGRlciBDb21taXQgZXJzdGVsbHQgd3VyZGUuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjU5Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAibG9zZ2Vsw7ZzdGVyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjEyNjMKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAiIChSb290LUNvbW1pdCkiCisKKyM6IHNlcXVlbmNlci5jOjEyODQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCIKK21zZ3N0ciAiS29ubnRlIEhFQUQgbmljaHQgcGFyc2VuLiIKKworIzogc2VxdWVuY2VyLmM6MTI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIkhFQUQgJXMgaXN0IGtlaW4gQ29tbWl0ISIKKworIzogc2VxdWVuY2VyLmM6MTI5MCBzZXF1ZW5jZXIuYzoxMzY0IGJ1aWx0aW4vY29tbWl0LmM6MTU3NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAiS29ubnRlIENvbW1pdCB2b24gSEVBRCBuaWNodCBhbmFseXNpZXJlbi4iCisKKyM6IHNlcXVlbmNlci5jOjEzNDIgc2VxdWVuY2VyLmM6MTk2OAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgYXV0aG9yIgorbXNnc3RyICJLb25udGUgQ29tbWl0LUF1dG9yIG5pY2h0IHBhcnNlbi4iCisKKyM6IHNlcXVlbmNlci5jOjEzNTMgYnVpbHRpbi9hbS5jOjE1NjYgYnVpbHRpbi9tZXJnZS5jOjY4NworbXNnaWQgImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiCittc2dzdHIgIlwiZ2l0IHdyaXRlLXRyZWVcIiBzY2hsdWcgYmVpbSBTY2hyZWliZW4gZWluZXMgXCJUcmVlXCItT2JqZWt0ZXMgZmVobCIKKworIzogc2VxdWVuY2VyLmM6MTM4NiBzZXF1ZW5jZXIuYzoxNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbW1pdCBtZXNzYWdlIGZyb20gJyVzJyIKK21zZ3N0ciAiS29ubnRlIENvbW1pdC1CZXNjaHJlaWJ1bmcgdm9uICclcycgbmljaHQgbGVzZW4uIgorCisjOiBzZXF1ZW5jZXIuYzoxNDEzIGJ1aWx0aW4vYW0uYzoxNTg4IGJ1aWx0aW4vY29tbWl0LmM6MTY3MyBidWlsdGluL21lcmdlLmM6ODg2CisjOiBidWlsdGluL21lcmdlLmM6OTExCittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXMgQ29tbWl0LU9iamVrdGVzLiIKKworIzogc2VxdWVuY2VyLmM6MTQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICJLb25udGUgQ29tbWl0ICVzIG5pY2h0IHBhcnNlbi4iCisKKyM6IHNlcXVlbmNlci5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIktvbm50ZSBFbHRlcm4tQ29tbWl0ICVzIG5pY2h0IHBhcnNlbi4iCisKKyM6IHNlcXVlbmNlci5jOjE1NjIgc2VxdWVuY2VyLmM6MTY3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQ6ICVkIgorbXNnc3RyICJVbmJla2FubnRlciBCZWZlaGw6ICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxNjIwIHNlcXVlbmNlci5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICVkIGNvbW1pdHMuIgorbXNnc3RyICJEYXMgaXN0IGVpbmUgS29tYmluYXRpb24gYXVzICVkIENvbW1pdHMuIgorCisjOiBzZXF1ZW5jZXIuYzoxNjMwCittc2dpZCAibmVlZCBhIEhFQUQgdG8gZml4dXAiCittc2dzdHIgImJlbsO2dGlnZSBIRUFEIGbDvHIgZml4dXAiCisKKyM6IHNlcXVlbmNlci5jOjE2MzIgc2VxdWVuY2VyLmM6MzIxMgorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQiCittc2dzdHIgIktvbm50ZSBIRUFEIG5pY2h0IGxlc2VuIgorCisjOiBzZXF1ZW5jZXIuYzoxNjM0Cittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCdzIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJLb25udGUgQ29tbWl0LUJlc2NocmVpYnVuZyB2b24gSEVBRCBuaWNodCBsZXNlbiIKKworIzogc2VxdWVuY2VyLmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAia2FubiAnJXMnIG5pY2h0IHNjaHJlaWJlbiIKKworIzogc2VxdWVuY2VyLmM6MTY0NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk2Cittc2dpZCAiVGhpcyBpcyB0aGUgMXN0IGNvbW1pdCBtZXNzYWdlOiIKK21zZ3N0ciAiRGFzIGlzdCBkaWUgZXJzdGUgQ29tbWl0LUJlc2NocmVpYnVuZzoiCisKKyM6IHNlcXVlbmNlci5jOjE2NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2Ugb2YgJXMiCittc2dzdHIgIktvbm50ZSBDb21taXQtQmVzY2hyZWlidW5nIHZvbiAlcyBuaWNodCBsZXNlbi4iCisKKyM6IHNlcXVlbmNlci5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyVkOiIKK21zZ3N0ciAiRGFzIGlzdCBDb21taXQtQmVzY2hyZWlidW5nICMlZDoiCisKKyM6IHNlcXVlbmNlci5jOjE2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJEaWUgQ29tbWl0LUJlc2NocmVpYnVuZyAjJWQgd2lyZCBhdXNnZWxhc3NlbjoiCisKKyM6IHNlcXVlbmNlci5jOjE3NTYKK21zZ2lkICJ5b3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorbXNnc3RyICJJaHJlIEluZGV4LURhdGVpIGlzdCBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0LiIKKworIzogc2VxdWVuY2VyLmM6MTc2MworbXNnaWQgImNhbm5vdCBmaXh1cCByb290IGNvbW1pdCIKK21zZ3N0ciAia2FubiBmaXh1cCBuaWNodCBhdWYgUm9vdC1Db21taXQgYW53ZW5kZW4iCisKKyM6IHNlcXVlbmNlci5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICJDb21taXQgJXMgaXN0IGVpbiBNZXJnZSwgYWJlciBkaWUgT3B0aW9uIC1tIHd1cmRlIG5pY2h0IGFuZ2VnZWJlbi4iCisKKyM6IHNlcXVlbmNlci5jOjE3OTAgc2VxdWVuY2VyLmM6MTc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIkNvbW1pdCAlcyBoYXQga2VpbmVuIEVsdGVybi1Db21taXQgJWQiCisKKyM6IHNlcXVlbmNlci5jOjE4MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgIkthbm4ga2VpbmUgQ29tbWl0LUJlc2NocmVpYnVuZyBmw7xyICVzIGJla29tbWVuLiIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlIGEgInRvZG8iIGNvbW1hbmQgbGlrZQorIy4gInJldmVydCIgb3IgInBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMS4KKyM6IHNlcXVlbmNlci5jOjE4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIlczoga2FubiBFbHRlcm4tQ29tbWl0ICVzIG5pY2h0IHBhcnNlbiIKKworIzogc2VxdWVuY2VyLmM6MTg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lICclcycgdG8gJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgenUgJyVzJyB1bWJlbmVubmVuLiIKKworIzogc2VxdWVuY2VyLmM6MTk0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICJLb25udGUgXCJyZXZlcnRcIiBuaWNodCBhdWYgJXMuLi4gKCVzKSBhdXNmw7xocmVuIgorCisjOiBzZXF1ZW5jZXIuYzoxOTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhcHBseSAlcy4uLiAlcyIKK21zZ3N0ciAiS29ubnRlICVzLi4uICglcykgbmljaHQgYW53ZW5kZW4iCisKKyM6IHNlcXVlbmNlci5jOjE5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHJvcHBpbmcgJXMgJXMgLS0gcGF0Y2ggY29udGVudHMgYWxyZWFkeSB1cHN0cmVhbVxuIgorbXNnc3RyICJXZWdsYXNzZW4gdm9uICVzICVzIC0tIFBhdGNoLUluaGFsdGUgc2luZCBiZXJlaXRzIGltIFVwc3RyZWFtLUJyYW5jaFxuIgorCisjOiBzZXF1ZW5jZXIuYzoyMDE4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IEZlaGxlciBiZWltIExlc2VuIGRlcyBJbmRleCIKKworIzogc2VxdWVuY2VyLmM6MjAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBGZWhsZXIgYmVpbSBBa3R1YWxpc2llcmVuIGRlcyBJbmRleCIKKworIzogc2VxdWVuY2VyLmM6MjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBhY2NlcHQgYXJndW1lbnRzOiAnJXMnIgorbXNnc3RyICIlcyBha3plcHRpZXJ0IGtlaW5lIEFyZ3VtZW50ZTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50cyBmb3IgJXMiCittc2dzdHIgIkZlaGxlbmRlIEFyZ3VtZW50ZSBmw7xyICVzLiIKKworIzogc2VxdWVuY2VyLmM6MjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgcGFyc2VuLiIKKworIzogc2VxdWVuY2VyLmM6MjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgWmVpbGUgJWQ6ICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjIyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiS2FubiAnJXMnIG5pY2h0IG9obmUgdm9yaGVyaWdlbiBDb21taXQgYXVzZsO8aHJlbiIKKworIzogc2VxdWVuY2VyLmM6MjI5OAorbXNnaWQgImNhbmNlbGxpbmcgYSBjaGVycnkgcGlja2luZyBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiQWJicmVjaGVuIGVpbmVzIGxhdWZlbmRlbiBcImNoZXJyeS1waWNrXCIiCisKKyM6IHNlcXVlbmNlci5jOjIzMDUKK21zZ2lkICJjYW5jZWxsaW5nIGEgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJBYmJyZWNoZW4gZWluZXMgbGF1ZmVuZGVuIFwicmV2ZXJ0XCIiCisKKyM6IHNlcXVlbmNlci5jOjIzNDkKK21zZ2lkICJwbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAiIgorIkJpdHRlIGJlaGViZW4gU2llIGRpZXNlcywgaW5kZW0gU2llICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBhdXNmw7xocmVuLiIKKworIzogc2VxdWVuY2VyLmM6MjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJyVzJyIKK21zZ3N0ciAiVW5iZW51dHpiYXJlcyBJbnN0cnVrdGlvbnNibGF0dDogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjM1NgorbXNnaWQgIm5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAiS2VpbmUgQ29tbWl0cyBnZXBhcnN0LiIKKworIzogc2VxdWVuY2VyLmM6MjM2NworbXNnaWQgImNhbm5vdCBjaGVycnktcGljayBkdXJpbmcgYSByZXZlcnQuIgorbXNnc3RyICJLYW5uIENoZXJyeS1QaWNrIG5pY2h0IHfDpGhyZW5kIGVpbmVzIFJldmVydHMgYXVzZsO8aHJlbi4iCisKKyM6IHNlcXVlbmNlci5jOjIzNjkKK21zZ2lkICJjYW5ub3QgcmV2ZXJ0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiS2FubiBSZXZlcnQgbmljaHQgd8OkaHJlbmQgZWluZXMgQ2hlcnJ5LVBpY2tzIGF1c2bDvGhyZW4uIgorCisjOiBzZXF1ZW5jZXIuYzoyNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgV2VydCBmw7xyICVzOiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjU0MAorbXNnaWQgInVudXNhYmxlIHNxdWFzaC1vbnRvIgorbXNnc3RyICJVbmJlbnV0emJhcmVzIHNxdWFzaC1vbnRvLiIKKworIzogc2VxdWVuY2VyLmM6MjU1NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJyVzJyIKK21zZ3N0ciAiRmVobGVyaGFmdGVzIE9wdGlvbnNibGF0dDogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjY0NCBzZXF1ZW5jZXIuYzo0MzYxCittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgImxlZXJlIE1lbmdlIHZvbiBDb21taXRzIMO8YmVyZ2ViZW4iCisKKyM6IHNlcXVlbmNlci5jOjI2NjAKK21zZ2lkICJyZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiXCJyZXZlcnRcIiBpc3QgYmVyZWl0cyBpbSBHYW5nZSIKKworIzogc2VxdWVuY2VyLmM6MjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnkgXCJnaXQgcmV2ZXJ0ICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICJWZXJzdWNoZW4gU2llIFwiZ2l0IHJldmVydCAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKKworIzogc2VxdWVuY2VyLmM6MjY2NQorbXNnaWQgImNoZXJyeS1waWNrIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIlwiY2hlcnJ5LXBpY2tcIiB3aXJkIGJlcmVpdHMgZHVyY2hnZWbDvGhydCIKKworIzogc2VxdWVuY2VyLmM6MjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgIlZlcnN1Y2hlbiBTaWUgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjI2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIktvbm50ZSBcInNlcXVlbmNlclwiLVZlcnplaWNobmlzICclcycgbmljaHQgZXJzdGVsbGVuLiIKKworIzogc2VxdWVuY2VyLmM6MjY5NgorbXNnaWQgImNvdWxkIG5vdCBsb2NrIEhFQUQiCittc2dzdHIgIktvbm50ZSBIRUFEIG5pY2h0IHNwZXJyZW4iCisKKyM6IHNlcXVlbmNlci5jOjI3NTYgc2VxdWVuY2VyLmM6NDA5OQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAia2VpbiBcImNoZXJyeS1waWNrXCIgb2RlciBcInJldmVydFwiIGltIEdhbmdlIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU4IHNlcXVlbmNlci5jOjI3NjkKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJrYW5uIEhFQUQgbmljaHQgYXVmbMO2c2VuIgorCisjOiBzZXF1ZW5jZXIuYzoyNzYwIHNlcXVlbmNlci5jOjI4MDQKK21zZ2lkICJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAia2FubiBuaWNodCBhYmJyZWNoZW46IGJpbiBhdWYgZWluZW0gQnJhbmNoLCBkZXIgbm9jaCBuaWNodCBnZWJvcmVuIGlzdCIKKworIzogc2VxdWVuY2VyLmM6Mjc5MCBidWlsdGluL2dyZXAuYzo3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJyVzJyIKK21zZ3N0ciAia2FubiAnJXMnIG5pY2h0IMO2ZmZuZW4iCisKKyM6IHNlcXVlbmNlci5jOjI3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJzogJXMiCittc2dzdHIgIkthbm4gJyVzJyBuaWNodCBsZXNlbjogJXMiCisKKyM6IHNlcXVlbmNlci5jOjI3OTMKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICJVbmVyd2FydGV0ZXMgRGF0ZWllbmRlIgorCisjOiBzZXF1ZW5jZXIuYzoyNzk5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAiZ2VzcGVpY2hlcnRlIFwicHJlLWNoZXJyeS1waWNrXCIgSEVBRCBEYXRlaSAnJXMnIGlzdCBiZXNjaMOkZGlndCIKKworIzogc2VxdWVuY2VyLmM6MjgxMAorbXNnaWQgIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRC4gTm90IHJld2luZGluZywgY2hlY2sgeW91ciBIRUFEISIKK21zZ3N0ciAiIgorIlNpZSBzY2hlaW5lbiBIRUFEIHZlcsOkbmRlcnQgenUgaGFiZW4uIEtlaW5lIFLDvGNrc3B1bHVuZywgcHLDvGZlbiBTaWUgSEVBRC4iCisKKyM6IHNlcXVlbmNlci5jOjI4NTEKK21zZ2lkICJubyByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIktlaW4gUmV2ZXJ0IGltIEdhbmdlIgorCisjOiBzZXF1ZW5jZXIuYzoyODU5Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImtlaW4gXCJjaGVycnktcGlja1wiIGltIEdhbmdlIgorCisjOiBzZXF1ZW5jZXIuYzoyODY5Cittc2dpZCAiZmFpbGVkIHRvIHNraXAgdGhlIGNvbW1pdCIKK21zZ3N0ciAiw5xiZXJzcHJpbmdlbiBkZXMgQ29tbWl0cyBmZWhsZ2VzY2hsYWdlbiIKKworIzogc2VxdWVuY2VyLmM6Mjg3NgorbXNnaWQgInRoZXJlIGlzIG5vdGhpbmcgdG8gc2tpcCIKK21zZ3N0ciAiTmljaHRzIHp1bSDDnGJlcnNwcmluZ2VuIHZvcmhhbmRlbiIKKworIzogc2VxdWVuY2VyLmM6Mjg3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaGF2ZSB5b3UgY29tbWl0dGVkIGFscmVhZHk/XG4iCisidHJ5IFwiZ2l0ICVzIC0tY29udGludWVcIiIKK21zZ3N0ciAiIgorIkhhYmVuIFNpZSBiZXJlaXRzIGNvbW1pdHRldD9cbiIKKyJWZXJzdWNoZW4gU2llIFwiZ2l0ICVzIC0tY29udGludWVcIiIKKworIzogc2VxdWVuY2VyLmM6MzAwMyBzZXF1ZW5jZXIuYzo0MDExCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgJXMiCittc2dzdHIgIktvbm50ZSAlcyBuaWNodCBha3R1YWxpc2llcmVuLiIKKworIzogc2VxdWVuY2VyLmM6MzA0MiBzZXF1ZW5jZXIuYzozOTkxCittc2dpZCAiY2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiS2FubiBIRUFEIG5pY2h0IGxlc2VuIgorCisjOiBzZXF1ZW5jZXIuYzozMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbmFjaCAnJXMnIGtvcGllcmVuLiIKKworIzogc2VxdWVuY2VyLmM6MzA2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIlNpZSBrw7ZubmVuIGRlbiBDb21taXQgbnVuIG5hY2hiZXNzZXJuIG1pdDpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIlNvYmFsZCBTaWUgbWl0IElocmVuIMOEbmRlcnVuZ2VuIHp1ZnJpZWRlbiBzaW5kLCBmw7xocmVuIFNpZSBhdXM6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6MzA3NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJXMuLi4gJS4qcyIKK21zZ3N0ciAiS29ubnRlICVzLi4uICglLipzKSBuaWNodCBhbndlbmRlbiIKKworIzogc2VxdWVuY2VyLmM6MzA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWVyZ2UgJS4qcyIKK21zZ3N0ciAiS29ubnRlIFwiJS4qc1wiIG5pY2h0IHp1c2FtbWVuZsO8aHJlbi4iCisKKyM6IHNlcXVlbmNlci5jOjMwOTggc2VxdWVuY2VyLmM6MzEwMiBidWlsdGluL2RpZmZ0b29sLmM6NjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbmFjaCAnJXMnIGtvcGllcmVuLiIKKworIzogc2VxdWVuY2VyLmM6MzEyOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIGZhaWxlZDogJXNcbiIKKyIlc1lvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiQXVzZsO8aHJ1bmcgZmVobGdlc2NobGFnZW46ICVzXG4iCisiJXNTaWUga8O2bm5lbiBkYXMgUHJvYmxlbSBiZWhlYmVuLCB1bmQgZGFublxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisiYXVzZsO8aHJlbi5cbiIKKworIzogc2VxdWVuY2VyLmM6MzEzNQorbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCittc2dzdHIgIkRlciBJbmRleCB1bmQvb2RlciBkYXMgQXJiZWl0c3ZlcnplaWNobmlzIHd1cmRlIGdlw6RuZGVydC5cbiIKKworIzogc2VxdWVuY2VyLmM6MzE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIHN1Y2NlZWRlZDogJXNcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJBdXNmw7xocnVuZyBlcmZvbGdyZWljaDogJXNcbiIKKyJBYmVyIMOEbmRlcnVuZ2VuIGluIEluZGV4IG9kZXIgQXJiZWl0c3ZlcnplaWNobmlzIHZlcmJsaWViZW4uXG4iCisiQ29tbWl0dGVuIFNpZSBJaHJlIMOEbmRlcnVuZ2VuIG9kZXIgYmVudXR6ZW4gU2llIFwic3Rhc2hcIi5cbiIKKyJGw7xocmVuIFNpZSBkYW5uIGF1czpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgbGFiZWwgbmFtZTogJyUuKnMnIgorbXNnc3RyICJVbmVybGF1YnRlciBCZXNjaHJpZnR1bmdzbmFtZTogJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozMjU2Cittc2dpZCAid3JpdGluZyBmYWtlIHJvb3QgY29tbWl0IgorbXNnc3RyICJ1bmVjaHRlbiBSb290LUNvbW1pdCBzY2hyZWliZW4iCisKKyM6IHNlcXVlbmNlci5jOjMyNjEKK21zZ2lkICJ3cml0aW5nIHNxdWFzaC1vbnRvIgorbXNnc3RyICJzcXVhc2gtb250byBzY2hyZWliZW4iCisKKyM6IHNlcXVlbmNlci5jOjMyOTkgYnVpbHRpbi9yZWJhc2UuYzo4ODAgYnVpbHRpbi9yZWJhc2UuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRmluZGVuIGRlcyBcIlRyZWVcIi1PYmpla3RlcyB2b24gJXMuIgorCisjOiBzZXF1ZW5jZXIuYzozMzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGF1ZmzDtnNlbi4iCisKKyM6IHNlcXVlbmNlci5jOjMzNzUKK21zZ2lkICJjYW5ub3QgbWVyZ2Ugd2l0aG91dCBhIGN1cnJlbnQgcmV2aXNpb24iCittc2dzdHIgIkthbm4gbmljaHQgb2huZSBlaW5lbiBha3R1ZWxsZW4gQ29tbWl0IG1lcmdlbi4iCisKKyM6IHNlcXVlbmNlci5jOjMzOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclLipzJyIKK21zZ3N0ciAiS29ubnRlICclLipzJyBuaWNodCBwYXJzZW4uIgorCisjOiBzZXF1ZW5jZXIuYzozNDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gbWVyZ2U6ICclLipzJyIKK21zZ3N0ciAiTmljaHRzIHp1bSBadXNhbW1lbmbDvGhyZW46ICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzQxOAorbXNnaWQgIm9jdG9wdXMgbWVyZ2UgY2Fubm90IGJlIGV4ZWN1dGVkIG9uIHRvcCBvZiBhIFtuZXcgcm9vdF0iCittc2dzdHIgIiIKKyJPY3R1cHVzLU1lcmdlIGthbm4gbmljaHQgYXVmIEJhc2lzIHZvbiBbbmV1ZW0gUm9vdC1Db21taXRdIGF1c2dlZsO8aHJ0IHdlcmRlbi4iCisKKyM6IHNlcXVlbmNlci5jOjM0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBjb21taXQgbWVzc2FnZSBvZiAnJXMnIgorbXNnc3RyICJLb25udGUga2VpbmUgQ29tbWl0LUJlc2NocmVpYnVuZyB2b24gJyVzJyBiZWtvbW1lbi4iCisKKyM6IHNlcXVlbmNlci5jOjM1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV2ZW4gYXR0ZW1wdCB0byBtZXJnZSAnJS4qcyciCittc2dzdHIgIktvbm50ZSBuaWNodCBlaW5tYWwgdmVyc3VjaGVuICclLipzJyB6dSBtZXJnZW4uIgorCisjOiBzZXF1ZW5jZXIuYzozNjEwCittc2dpZCAibWVyZ2U6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAibWVyZ2U6IEtvbm50ZSBuZXVlIEluZGV4LURhdGVpIG5pY2h0IHNjaHJlaWJlbi4iCisKKyM6IHNlcXVlbmNlci5jOjM2NzkgYnVpbHRpbi9yZWJhc2UuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guXG4iCittc2dzdHIgIkF1dG9tYXRpc2NoZW4gU3Rhc2ggYW5nZXdlbmRldC5cbiIKKworIzogc2VxdWVuY2VyLmM6MzY5MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgImthbm4gJXMgbmljaHQgc3BlaWNoZXJuIgorCisjOiBzZXF1ZW5jZXIuYzozNjk0IGJ1aWx0aW4vcmViYXNlLmM6NzUzIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuXG4iCisiWW91ciBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBzdGFzaC5cbiIKKyJZb3UgY2FuIHJ1biBcImdpdCBzdGFzaCBwb3BcIiBvciBcImdpdCBzdGFzaCBkcm9wXCIgYXQgYW55IHRpbWUuXG4iCittc2dzdHIgIiIKKyJBbndlbmR1bmcgZGVzIGF1dG9tYXRpc2NoZW4gU3Rhc2ggcmVzdWx0aWVydGUgaW4gS29uZmxpa3Rlbi5cbiIKKyJJaHJlIMOEbmRlcnVuZ2VuIHNpbmQgaW0gU3Rhc2ggc2ljaGVyLlxuIgorIlNpZSBrw7ZubmVuIGplZGVyemVpdCBcImdpdCBzdGFzaCBwb3BcIiBvZGVyIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdXNmw7xocmVuLlxuIgorCisjOiBzZXF1ZW5jZXIuYzozNzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSB2YWxpZCBPSUQiCittc2dzdHIgIiVzOiBrZWluZSBnw7xsdGlnZSBPSUQiCisKKyM6IHNlcXVlbmNlci5jOjM3NjAgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc3OQorbXNnaWQgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAiS29ubnRlIEhFQUQgbmljaHQgbG9zbMO2c2VuIgorCisjOiBzZXF1ZW5jZXIuYzozNzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgSEVBRFxuIgorbXNnc3RyICJBbmdlaGFsdGVuIGJlaSBIRUFEXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAlc1xuIgorbXNnc3RyICJBbmdlaGFsdGVuIGJlaSAlc1xuIgorCisjOiBzZXF1ZW5jZXIuYzozNzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZXhlY3V0ZSB0aGUgdG9kbyBjb21tYW5kXG4iCisiXG4iCisiICAgICUuKnNcbiIKKyJJdCBoYXMgYmVlbiByZXNjaGVkdWxlZDsgVG8gZWRpdCB0aGUgY29tbWFuZCBiZWZvcmUgY29udGludWluZywgcGxlYXNlXG4iCisiZWRpdCB0aGUgdG9kbyBsaXN0IGZpcnN0OlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tZWRpdC10b2RvXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisiS29ubnRlIFRPRE8tQmVmZWhsIG5pY2h0IGF1c2bDvGhyZW5cbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkRpZXNlciB3dXJkZSBuZXUgYW5nZXNldHp0OyBVbSBkZW4gQmVmZWhsIHp1IGJlYXJiZWl0ZW4sIGJldm9yIGZvcnRnZXNldHp0ICIKKyJ3aXJkLFxuIgorImJlYXJiZWl0ZW4gU2llIGJpdHRlIHp1ZXJzdCBkaWUgVE9ETy1MaXN0ZTpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6Mzg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzLi4uICAlLipzXG4iCittc2dzdHIgIkFuZ2VoYWx0ZW4gYmVpICVzLi4uICUuKnNcbiIKKworIzogc2VxdWVuY2VyLmM6Mzk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQgJWQiCittc2dzdHIgIlVuYmVrYW5udGVyIEJlZmVobCAlZCIKKworIzogc2VxdWVuY2VyLmM6Mzk5OQorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9yaWctaGVhZCIKK21zZ3N0ciAiS29ubnRlIG9yaWctaGVhZCBuaWNodCBsZXNlbi4iCisKKyM6IHNlcXVlbmNlci5jOjQwMDQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnb250byciCittc2dzdHIgIktvbm50ZSAnb250bycgbmljaHQgbGVzZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo0MDE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgSEVBRCB0byAlcyIKK21zZ3N0ciAiS29ubnRlIEhFQUQgbmljaHQgYXVmICVzIGFrdHVhbGlzaWVyZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo0MTExCittc2dpZCAiY2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJSZWJhc2UgbmljaHQgbcO2Z2xpY2g6IFNpZSBoYWJlbiDDhG5kZXJ1bmdlbiwgZGllIG5pY2h0IHp1bSBDb21taXRcbiIKKyJ2b3JnZW1lcmt0IHNpbmQuIgorCisjOiBzZXF1ZW5jZXIuYzo0MTIwCittc2dpZCAiY2Fubm90IGFtZW5kIG5vbi1leGlzdGluZyBjb21taXQiCittc2dzdHIgIkthbm4gbmljaHQgZXhpc3RpZXJlbmRlbiBDb21taXQgbmljaHQgbmFjaGJlc3Nlcm4uIgorCisjOiBzZXF1ZW5jZXIuYzo0MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsZTogJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBEYXRlaTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbnRlbnRzOiAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlIEluaGFsdGU6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQxMjcKK21zZ2lkICIiCisiXG4iCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlLCBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJcbiIKKyJTaWUgaGFiZW4gbmljaHQgY29tbWl0dGV0ZSDDhG5kZXJ1bmdlbiBpbiBJaHJlbSBBcmJlaXRzdmVyemVpY2huaXMuIEJpdHRlXG4iCisiY29tbWl0dGVuIFNpZSBkaWVzZSB6dWVyc3QgdW5kIGbDvGhyZW4gU2llIGRhbm4gJ2dpdCByZWJhc2UgLS1jb250aW51ZSdcbiIKKyJlcm5ldXQgYXVzLiIKKworIzogc2VxdWVuY2VyLmM6NDE2MyBzZXF1ZW5jZXIuYzo0MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBmaWxlOiAnJXMnIgorbXNnc3RyICJLb25udGUgRGF0ZWkgbmljaHQgc2NocmVpYmVuOiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MjE3Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIgorbXNnc3RyICJLb25udGUgQ0hFUlJZX1BJQ0tfSEVBRCBuaWNodCBsw7ZzY2hlbi4iCisKKyM6IHNlcXVlbmNlci5jOjQyMjQKK21zZ2lkICJjb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiS29ubnRlIMOEbmRlcnVuZ2VuIGF1cyBkZXIgU3RhZ2luZy1BcmVhIG5pY2h0IGNvbW1pdHRlbi4iCisKKyM6IHNlcXVlbmNlci5jOjQzMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbid0IGNoZXJyeS1waWNrIGEgJXMiCittc2dzdHIgIiVzOiAlcyBrYW5uIG5pY2h0IGluIFwiY2hlcnJ5LXBpY2tcIiBiZW51dHp0IHdlcmRlbiIKKworIzogc2VxdWVuY2VyLmM6NDM0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlczogdW5nw7xsdGlnZXIgQ29tbWl0IgorCisjOiBzZXF1ZW5jZXIuYzo0Mzc3Cittc2dpZCAiY2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICJLYW5uIG5pY2h0IGFscyBhbGxlcmVyc3RlbiBDb21taXQgZWluZW4gUmV2ZXJ0IGF1c2bDvGhyZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo0ODQ2Cittc2dpZCAibWFrZV9zY3JpcHQ6IHVuaGFuZGxlZCBvcHRpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDogdW5iZWhhbmRlbHRlIE9wdGlvbmVuIgorCisjOiBzZXF1ZW5jZXIuYzo0ODQ5Cittc2dpZCAibWFrZV9zY3JpcHQ6IGVycm9yIHByZXBhcmluZyByZXZpc2lvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB0OiBGZWhsZXIgYmVpbSBWb3JiZXJlaXRlbiBkZXIgQ29tbWl0cyIKKworIzogc2VxdWVuY2VyLmM6NTA4MyBzZXF1ZW5jZXIuYzo1MTAwCittc2dpZCAibm90aGluZyB0byBkbyIKK21zZ3N0ciAiTmljaHRzIHp1IHR1bi4iCisKKyM6IHNlcXVlbmNlci5jOjUxMTkKK21zZ2lkICJjb3VsZCBub3Qgc2tpcCB1bm5lY2Vzc2FyeSBwaWNrIGNvbW1hbmRzIgorbXNnc3RyICJLb25udGUgdW5uw7Z0aWdlIFwicGlja1wiLUJlZmVobGUgbmljaHQgYXVzbGFzc2VuLiIKKworIzogc2VxdWVuY2VyLmM6NTIxMworbXNnaWQgInRoZSBzY3JpcHQgd2FzIGFscmVhZHkgcmVhcnJhbmdlZC4iCittc2dzdHIgIkRhcyBTY3JpcHQgd3VyZGUgYmVyZWl0cyB1bWdlb3JkbmV0LiIKKworIzogc2V0dXAuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkgYXQgJyVzJyIKK21zZ3N0ciAiJyVzJyBsaWVndCBhdcOfZXJoYWxiIGRlcyBSZXBvc2l0b3JpZXMgdm9uICclcyciCisKKyM6IHNldHVwLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogbm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICdnaXQgPGNvbW1hbmQ+IC0tIDxwYXRoPi4uLicgdG8gc3BlY2lmeSBwYXRocyB0aGF0IGRvIG5vdCBleGlzdCBsb2NhbGx5LiIKK21zZ3N0ciAiIgorIiVzOiBrZWluIHNvbGNoZXIgUGZhZCBpbSBBcmJlaXRzdmVyemVpY2huaXMuXG4iCisiQmVudXR6ZW4gU2llICdnaXQgPEJlZmVobD4gLS0gPFBmYWQ+Li4uJyB6dXIgQW5nYWJlIHZvbiBQZmFkZW4sIGRpZSBsb2thbFxuIgorIm5pY2h0IGV4aXN0aWVyZW4uIgorCisjOiBzZXR1cC5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyJtZWhyZGV1dGlnZXMgQXJndW1lbnQgJyVzJzogdW5iZWthbm50ZXIgQ29tbWl0IG9kZXIgUGZhZCBleGlzdGllcnQgbmljaHRcbiIKKyJpbSBBcmJlaXRzdmVyemVpY2huaXNcbiIKKyJCZW51dHplbiBTaWUgJy0tJywgdW0gUGZhZGUgdW5kIENvbW1pdHMgenUgdHJlbm5lbiwgw6RobmxpY2ggd2llOlxuIgorIidnaXQgPEJlZmVobD4gWzxDb21taXQ+Li4uXSAtLSBbPERhdGVpPi4uLl0nIgorCisjOiBzZXR1cC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gJyVzJyBtdXN0IGNvbWUgYmVmb3JlIG5vbi1vcHRpb24gYXJndW1lbnRzIgorbXNnc3RyICIiCisiRGllIE9wdGlvbiAnJXMnIG11c3Mgdm9yIGRlbiBBcmd1bWVudGVuIGtvbW1lbiwgZGllIGtlaW5lIE9wdGlvbmVuIHNpbmQuIgorCisjOiBzZXR1cC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisibWVocmRldXRpZ2VzIEFyZ3VtZW50ICclcyc6IHNvd29obCBDb21taXQgYWxzIGF1Y2ggRGF0ZWluYW1lXG4iCisiQmVudXR6ZW4gU2llICctLScsIHVtIFBmYWRlIHVuZCBDb21taXRzIHp1IHRyZW5uZW4sIMOkaG5saWNoIHdpZTpcbiIKKyInZ2l0IDxCZWZlaGw+IFs8Q29tbWl0Pi4uLl0gLS0gWzxEYXRlaT4uLi5dJyIKKworIzogc2V0dXAuYzo0MDkKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHVwIHdvcmsgdHJlZSB1c2luZyBpbnZhbGlkIGNvbmZpZyIKK21zZ3N0ciAiIgorIktvbm50ZSBBcmJlaXRzdmVyemVpY2huaXMgbWl0IHVuZ8O8bHRpZ2VyIEtvbmZpZ3VyYXRpb24gbmljaHQgZWlucmljaHRlbi4iCisKKyM6IHNldHVwLmM6NDEzCittc2dpZCAidGhpcyBvcGVyYXRpb24gbXVzdCBiZSBydW4gaW4gYSB3b3JrIHRyZWUiCittc2dzdHIgIkRpZXNlIE9wZXJhdGlvbiBtdXNzIGluIGVpbmVtIEFyYmVpdHN2ZXJ6ZWljaG5pcyBhdXNnZWbDvGhydCB3ZXJkZW4uIgorCisjOiBzZXR1cC5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCBnaXQgcmVwbyB2ZXJzaW9uIDw9ICVkLCBmb3VuZCAlZCIKK21zZ3N0ciAiRXJ3YXJ0ZXRlIEdpdC1SZXBvc2l0b3J5LVZlcnNpb24gPD0gJWQsICVkIGdlZnVuZGVuIgorCisjOiBzZXR1cC5jOjU2NworbXNnaWQgInVua25vd24gcmVwb3NpdG9yeSBleHRlbnNpb25zIGZvdW5kOiIKK21zZ3N0ciAiVW5iZWthbm50ZSBSZXBvc2l0b3J5LUVyd2VpdGVydW5nZW4gZ2VmdW5kZW46IgorCisjOiBzZXR1cC5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBvcGVuaW5nICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIMOWZmZuZW4gdm9uICclcycuIgorCisjOiBzZXR1cC5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbGFyZ2UgdG8gYmUgYSAuZ2l0IGZpbGU6ICclcyciCittc2dzdHIgIlp1IGdyb8OfLCB1bSBlaW5lIC5naXQtRGF0ZWkgenUgc2VpbjogJyVzJyIKKworIzogc2V0dXAuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gdm9uICclcycuIgorCisjOiBzZXR1cC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGdpdGZpbGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgZ2l0ZmlsZS1Gb3JtYXQ6ICVzIgorCisjOiBzZXR1cC5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBwYXRoIGluIGdpdGZpbGU6ICVzIgorbXNnc3RyICJLZWluIFBmYWQgaW4gZ2l0ZmlsZTogJXMiCisKKyM6IHNldHVwLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAlcyIKIG1zZ3N0ciAiS2VpbiBHaXQtUmVwb3NpdG9yeTogJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjMwCi1tc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgotbXNnc3RyICJTdGFuZGFyZCBpc3QgbnVyIGbDvHIgbG9rYWxlIFJlcG9zaXRvcmllcyB2ZXJmw7xnYmFyLiIKKyM6IHNldHVwLmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgIickJXMnIHRvbyBiaWciCittc2dzdHIgIickJXMnIHp1IGdyb8OfIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYzNAotbXNnaWQgIlNoYXJlZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIlZlcmtuw7xwZnQgaXN0IG51ciBmw7xyIGxva2FsZSBSZXBvc2l0b3JpZXMgdmVyZsO8Z2Jhci4iCisjOiBzZXR1cC5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJyVzJyIKK21zZ3N0ciAiS2VpbiBHaXQtUmVwb3NpdG9yeTogJyVzJyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NTUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2NhdGlvbiAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIkFkcmVzc2Ugwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiIKKyM6IHNldHVwLmM6NzM4IHNldHVwLmM6NzQwIHNldHVwLmM6NzcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAnJXMnIgorbXNnc3RyICJLYW5uIG5pY2h0IGluIFZlcnplaWNobmlzICclcycgd2VjaHNlbG4uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NgotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgotbXNnc3RyICJEZXIgVXJzcHJ1bmdzb3J0IGtvbm50ZSBuaWNodCBlaW5nZXJpY2h0ZXQgd2VyZGVuIgorIzogc2V0dXAuYzo3NDMgc2V0dXAuYzo3OTkgc2V0dXAuYzo4MDkgc2V0dXAuYzo4NDggc2V0dXAuYzo4NTYKK21zZ2lkICJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAiS2FubiBuaWNodCB6dW0gYWt0dWVsbGVuIEFyYmVpdHN2ZXJ6ZWljaG5pcyB6dXLDvGNrd2VjaHNlbG4uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY3OAorIzogc2V0dXAuYzo4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyUqcyVzJXMnIgorbXNnc3RyICJLb25udGUgJyUqcyVzJXMnIG5pY2h0IGxlc2VuLiIKKworIzogc2V0dXAuYzoxMTA4Cittc2dpZCAiVW5hYmxlIHRvIHJlYWQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiS29ubnRlIGFrdHVlbGxlcyBBcmJlaXRzdmVyemVpY2huaXMgbmljaHQgbGVzZW4uIgorCisjOiBzZXR1cC5jOjExMTcgc2V0dXAuYzoxMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGFuZ2UgdG8gJyVzJyIKK21zZ3N0ciAiS2FubiBuaWNodCBuYWNoICclcycgd2VjaHNlbG4uIgorCisjOiBzZXR1cC5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzKTogJXMiCittc2dzdHIgIktlaW4gR2l0LVJlcG9zaXRvcnkgKG9kZXIgaXJnZW5kZWluZXMgZGVyIEVsdGVybnZlcnplaWNobmlzc2UpOiAlcyIKKworIzogc2V0dXAuYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IHBhcmVudCB1cCB0byBtb3VudCBwb2ludCAlcylcbiIKKyJTdG9wcGluZyBhdCBmaWxlc3lzdGVtIGJvdW5kYXJ5IChHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNIG5vdCBzZXQpLiIKK21zZ3N0ciAiIgorIktlaW4gR2l0LVJlcG9zaXRvcnkgKG9kZXIgaXJnZW5kZWluIEVsdGVybnZlcnplaWNobmlzIGJpcyB6dW0gRWluaMOkbmdlcHVua3QgIgorIiVzKVxuIgorIlN0b3BwZSBiZWkgRGF0ZWlzeXN0ZW1ncmVuemUgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbmljaHQgZ2VzZXR6dCkuIgorCisjOiBzZXR1cC5jOjEyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgKDAlLjNvKS5cbiIKKyJUaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKyJQcm9ibGVtIG1pdCBXZXJ0IGbDvHIgRGF0ZWltb2R1cyAoMCUuM28pIHZvbiBjb3JlLnNoYXJlZFJlcG9zaXRvcnkuXG4iCisiRGVyIEJlc2l0emVyIGRlciBEYXRlaWVuIG11c3MgaW1tZXIgTGVzZS0gdW5kIFNjaHJlaWJyZWNodGUgaGFiZW4uIgorCisjOiBzZXR1cC5jOjEyODkKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBvciBkdXAgZmFpbGVkIgorbXNnc3RyICLDlmZmbmVuIHZvbiAvZGV2L251bGwgb2RlciBkdXAgZmVobGdlc2NobGFnZW4uIgorCisjOiBzZXR1cC5jOjEzMDQKK21zZ2lkICJmb3JrIGZhaWxlZCIKK21zZ3N0ciAiZm9yayBmZWhsZ2VzY2hsYWdlbiIKKworIzogc2V0dXAuYzoxMzA5Cittc2dpZCAic2V0c2lkIGZhaWxlZCIKK21zZ3N0ciAic2V0c2lkIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBzaGExLWZpbGUuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdDsgY2hlY2sgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKK21zZ3N0ciAiIgorIk9iamVrdHZlcnplaWNobmlzICVzIGV4aXN0aWVydCBuaWNodDsgcHLDvGZlIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiCisKKyM6IHNoYTEtZmlsZS5jOjUwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIGFsdGVybmF0ZSBvYmplY3QgcGF0aDogJXMiCittc2dzdHIgIktvbm50ZSBhbHRlcm5hdGl2ZW4gT2JqZWt0cGZhZCAnJXMnIG5pY2h0IG5vcm1hbGlzaWVyZW4uIgorCisjOiBzaGExLWZpbGUuYzo1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGlnbm9yaW5nIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzLCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICIlczogaWdub3JpZXJlIGFsdGVybmF0aXZlIE9iamVrdHNwZWljaGVyIC0gVmVyc2NoYWNodGVsdW5nIHp1IHRpZWYiCisKKyM6IHNoYTEtZmlsZS5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIG9iamVjdCBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJLb25udGUgT2JqZWt0dmVyemVpY2huaXMgJyVzJyBuaWNodCBub3JtYWxpc2llcmVuLiIKKworIzogc2hhMS1maWxlLmM6NjI1Cittc2dpZCAidW5hYmxlIHRvIGZkb3BlbiBhbHRlcm5hdGVzIGxvY2tmaWxlIgorbXNnc3RyICJLb25udGUgZmRvcGVuIG5pY2h0IGF1ZiBMb2NrLURhdGVpIGbDvHIgXCJhbHRlcm5hdGVzXCIgYXVmcnVmZW4uIgorCisjOiBzaGExLWZpbGUuYzo2NDMKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgIktvbm50ZSBcImFsdGVybmF0ZXNcIi1EYXRlaSBuaWNodCBsZXNlbi4iCisKKyM6IHNoYTEtZmlsZS5jOjY1MAorbXNnaWQgInVuYWJsZSB0byBtb3ZlIG5ldyBhbHRlcm5hdGVzIGZpbGUgaW50byBwbGFjZSIKK21zZ3N0ciAiS29ubnRlIG5ldWUgXCJhbHRlcm5hdGVzXCItRGF0ZWkgbmljaHQgw7xiZXJuZWhtZW4uIgorCisjOiBzaGExLWZpbGUuYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJQZmFkICclcycgZXhpc3RpZXJ0IG5pY2h0IgorCisjOiBzaGExLWZpbGUuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBhcyBhIGxpbmtlZCBjaGVja291dCBpcyBub3Qgc3VwcG9ydGVkIHlldC4iCittc2dzdHIgIiIKKyJSZWZlcmVuemllcnRlcyBSZXBvc2l0b3J5ICclcycgd2lyZCBub2NoIG5pY2h0IGFscyB2ZXJrbsO8cGZ0ZXNcbiIKKyJBcmJlaXRzdmVyemVpY2huaXMgdW50ZXJzdMO8dHp0LiIKKworIzogc2hhMS1maWxlLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIlJlZmVyZW56aWVydGVzIFJlcG9zaXRvcnkgJyVzJyBpc3Qga2VpbiBsb2thbGVzIFJlcG9zaXRvcnkuIgorCisjOiBzaGExLWZpbGUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBzaGFsbG93IgorbXNnc3RyICIiCisiUmVmZXJlbnppZXJ0ZXMgUmVwb3NpdG9yeSAnJXMnIGhhdCBlaW5lIHVudm9sbHN0w6RuZGlnZSBIaXN0b3JpZSAoc2hhbGxvdykuIgorCisjOiBzaGExLWZpbGUuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICIiCisiUmVmZXJlbnppZXJ0ZXMgUmVwb3NpdG9yeSAnJXMnIGlzdCBtaXQga8O8bnN0bGljaGVuIFZvcmfDpG5nZXJuIChcImdyYWZ0c1wiKSAiCisiZWluZ2Vow6RuZ3QuIgorCisjOiBzaGExLWZpbGUuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBsaW5lIHdoaWxlIHBhcnNpbmcgYWx0ZXJuYXRlIHJlZnM6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlIFplaWxlIGJlaW0gUGFyc2VuIGFsdGVybmF0aXZlciBSZWZlcmVuemVuOiAlcyIKKworIzogc2hhMS1maWxlLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAiVmVyc3VjaGUgbW1hcCAlPFBSSXVNQVg+IMO8YmVyIExpbWl0ICU8UFJJdU1BWD4uIgorCisjOiBzaGExLWZpbGUuYzo5NjQKK21zZ2lkICJtbWFwIGZhaWxlZCIKK21zZ3N0ciAibW1hcCBmZWhsZ2VzY2hsYWdlbiIKKworIzogc2hhMS1maWxlLmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZmlsZSAlcyBpcyBlbXB0eSIKK21zZ3N0ciAiT2JqZWt0ZGF0ZWkgJXMgaXN0IGxlZXIuIgorCisjOiBzaGExLWZpbGUuYzoxMjYzIHNoYTEtZmlsZS5jOjI0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBsb29zZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiRmVobGVyaGFmdGVzIGxvc2VzIE9iamVrdCAnJXMnLiIKKworIzogc2hhMS1maWxlLmM6MTI2NSBzaGExLWZpbGUuYzoyNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICJOdXR6bG9zZSBEYXRlbiBhbSBFbmRlIHZvbiBsb3NlbSBPYmpla3QgJyVzJy4iCisKKyM6IHNoYTEtZmlsZS5jOjEzMDcKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIgorbXNnc3RyICJ1bmfDvGx0aWdlciBPYmpla3QtVHlwIgorCisjOiBzaGExLWZpbGUuYzoxMzkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgIktvbm50ZSAlcyBLb3BmYmVyZWljaCBuaWNodCBtaXQgLS1hbGxvdy11bmtub3duLXR5cGUgZW50cGFja2VuLiIKKworIzogc2hhMS1maWxlLmM6MTM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciIKK21zZ3N0ciAiS29ubnRlICVzIEtvcGZiZXJlaWNoIG5pY2h0IGVudHBhY2tlbi4iCisKKyM6IHNoYTEtZmlsZS5jOjE0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIgorbXNnc3RyICJLb25udGUgJXMgS29wZmJlcmVpY2ggbWl0IC0tYWxsb3ctdW5rbm93bi10eXBlIG5pY2h0IHBhcnNlbi4iCisKKyM6IHNoYTEtZmlsZS5jOjE0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciIKK21zZ3N0ciAiS29ubnRlICVzIEtvcGZiZXJlaWNoIG5pY2h0IHBhcnNlbi4iCisKKyM6IHNoYTEtZmlsZS5jOjE2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJLb25udGUgT2JqZWt0ICVzIG5pY2h0IGxlc2VuLiIKKworIzogc2hhMS1maWxlLmM6MTYzMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlbWVudCAlcyBub3QgZm91bmQgZm9yICVzIgorbXNnc3RyICJFcnNldHp1bmcgJXMgZsO8ciAlcyBuaWNodCBnZWZ1bmRlbi4iCisKKyM6IHNoYTEtZmlsZS5jOjE2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgIkxvc2VzIE9iamVrdCAlcyAoZ2VzcGVpY2hlcnQgaW4gJXMpIGlzdCBiZXNjaMOkZGlndC4iCisKKyM6IHNoYTEtZmlsZS5jOjE2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2VkIG9iamVjdCAlcyAoc3RvcmVkIGluICVzKSBpcyBjb3JydXB0IgorbXNnc3RyICJHZXBhY2t0ZXMgT2JqZWt0ICVzIChnZXNwZWljaGVydCBpbiAlcykgaXN0IGJlc2Now6RkaWd0LiIKKworIzogc2hhMS1maWxlLmM6MTc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIKK21zZ3N0ciAiS29ubnRlIERhdGVpICVzIG5pY2h0IHNjaHJlaWJlbi4iCisKKyM6IHNoYTEtZmlsZS5jOjE3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBwZXJtaXNzaW9uIHRvICclcyciCittc2dzdHIgIktvbm50ZSBadWdyaWZmc2JlcmVjaHRpZ3VuZyBhdWYgJyVzJyBuaWNodCBzZXR6ZW4uIgorCisjOiBzaGExLWZpbGUuYzoxNzYwCittc2dpZCAiZmlsZSB3cml0ZSBlcnJvciIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIGVpbmVyIERhdGVpLiIKKworIzogc2hhMS1maWxlLmM6MTc4MAorbXNnaWQgImVycm9yIHdoZW4gY2xvc2luZyBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NobGllw59lbiBkZXIgRGF0ZWkgZsO8ciBsb3NlIE9iamVrdGUuIgorCisjOiBzaGExLWZpbGUuYzoxODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImluc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciBhZGRpbmcgYW4gb2JqZWN0IHRvIHJlcG9zaXRvcnkgZGF0YWJhc2UgJXMiCittc2dzdHIgIiIKKyJVbnp1cmVpY2hlbmRlIEJlcmVjaHRpZ3VuZyB6dW0gSGluenVmw7xnZW4gZWluZXMgT2JqZWt0ZXMgenVyIFJlcG9zaXRvcnktIgorIkRhdGVuYmFuayAlcyIKKworIzogc2hhMS1maWxlLmM6MTg0NworbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIktvbm50ZSB0ZW1wb3LDpHJlIERhdGVpIG5pY2h0IGVyc3RlbGxlbi4iCisKKyM6IHNoYTEtZmlsZS5jOjE4NzEKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXIgRGF0ZWkgZsO8ciBsb3NlIE9iamVrdGUuIgorCisjOiBzaGExLWZpbGUuYzoxODc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIG5ldyBvYmplY3QgJXMgKCVkKSIKK21zZ3N0ciAiS29ubnRlIG5ldWVzIE9iamVrdCAlcyAoJWQpIG5pY2h0IGtvbXByaW1pZXJlbi4iCisKKyM6IHNoYTEtZmlsZS5jOjE4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZUVuZCBvbiBvYmplY3QgJXMgZmFpbGVkICglZCkiCittc2dzdHIgImRlZmxhdGVFbmQgYXVmIE9iamVrdCAlcyBmZWhsZ2VzY2hsYWdlbiAoJWQpIgorCisjOiBzaGExLWZpbGUuYzoxODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZ1c2VkIGJ5IHVuc3RhYmxlIG9iamVjdCBzb3VyY2UgZGF0YSBmb3IgJXMiCittc2dzdHIgIkZlaGxlciB3ZWdlbiBpbnN0YWJpbGVuIE9iamVrdHF1ZWxsZGF0ZW4gZsO8ciAlcyIKKworIzogc2hhMS1maWxlLmM6MTg5NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJXMiCittc2dzdHIgIkZlaGxlciBiZWltIEF1ZnJ1ZiB2b24gdXRpbWUoKSBhdWYgJyVzJy4iCisKKyM6IHNoYTEtZmlsZS5jOjE5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAiS2FubiBPYmpla3QgZsO8ciAlcyBuaWNodCBsZXNlbi4iCisKKyM6IHNoYTEtZmlsZS5jOjIwMTEKK21zZ2lkICJjb3JydXB0IGNvbW1pdCIKK21zZ3N0ciAiZmVobGVyaGFmdGVyIENvbW1pdCIKKworIzogc2hhMS1maWxlLmM6MjAxOQorbXNnaWQgImNvcnJ1cHQgdGFnIgorbXNnc3RyICJmZWhsZXJoYWZ0ZXMgVGFnIgorCisjOiBzaGExLWZpbGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZXJyb3Igd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgIkxlc2VmZWhsZXIgYmVpbSBJbmRpemllcmVuIHZvbiAnJXMnLiIKKworIzogc2hhMS1maWxlLmM6MjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCByZWFkIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICJyZWFkKCkgenUga3VyeiBiZWltIEluZGl6aWVyZW4gdm9uICclcycuIgorCisjOiBzaGExLWZpbGUuYzoyMTk1IHNoYTEtZmlsZS5jOjIyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIKK21zZ3N0ciAiJXM6IEZlaGxlciBiZWltIEVpbmbDvGdlbiBpbiBkaWUgRGF0ZW5iYW5rIgorCisjOiBzaGExLWZpbGUuYzoyMjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnN1cHBvcnRlZCBmaWxlIHR5cGUiCittc2dzdHIgIiVzOiBuaWNodCB1bnRlcnN0w7x0enRlIERhdGVpYXJ0IgorCisjOiBzaGExLWZpbGUuYzoyMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIG9iamVjdCIKK21zZ3N0ciAiJXMgaXN0IGtlaW4gZ8O8bHRpZ2VzIE9iamVrdCIKKworIzogc2hhMS1maWxlLmM6MjIzNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiJXMgaXN0IGtlaW4gZ8O8bHRpZ2VzICclcycgT2JqZWt0IgorCisjOiBzaGExLWZpbGUuYzoyMjY0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyIKK21zZ3N0ciAia2FubiAlcyBuaWNodCDDtmZmbmVuIgorCisjOiBzaGExLWZpbGUuYzoyNDU0IHNoYTEtZmlsZS5jOjI1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCBmb3IgJXMgKGV4cGVjdGVkICVzKSIKK21zZ3N0ciAiSGFzaCBmw7xyICVzIHN0aW1tdCBuaWNodCDDvGJlcmVpbiAoJXMgZXJ3YXJ0ZXQpLiIKKworIzogc2hhMS1maWxlLmM6MjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAlcyIKK21zZ3N0ciAiS29ubnRlIG1tYXAgbmljaHQgYXVmICVzIGF1c2bDvGhyZW4uIgorCisjOiBzaGExLWZpbGUuYzoyNDgzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgaGVhZGVyIG9mICVzIgorbXNnc3RyICJLb25udGUgS29wZmJlcmVpY2ggdm9uICVzIG5pY2h0IGVudHBhY2tlbi4iCisKKyM6IHNoYTEtZmlsZS5jOjI0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAiS29ubnRlIEtvcGZiZXJlaWNoIHZvbiAlcyBuaWNodCBwYXJzZW4uIgorCisjOiBzaGExLWZpbGUuYzoyNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgY29udGVudHMgb2YgJXMiCittc2dzdHIgIktvbm50ZSBJbmhhbHQgdm9uICVzIG5pY2h0IGVudHBhY2tlbi4iCisKKyM6IHNoYTEtbmFtZS5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCBTSEExICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiS3VyemVyIFNIQS0xICVzIGlzdCBtZWhyZGV1dGlnLiIKKworIzogc2hhMS1uYW1lLmM6NDk3Cittc2dpZCAiVGhlIGNhbmRpZGF0ZXMgYXJlOiIKK21zZ3N0ciAiRGllIEthbmRpZGF0ZW4gc2luZDoiCisKKyM6IHNoYTEtbmFtZS5jOjc5NgorbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisid2hlcmUgXCIkYnJcIiBpcyBzb21laG93IGVtcHR5IGFuZCBhIDQwLWhleCByZWYgaXMgY3JlYXRlZC4gUGxlYXNlXG4iCisiZXhhbWluZSB0aGVzZSByZWZzIGFuZCBtYXliZSBkZWxldGUgdGhlbS4gVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5XG4iCisicnVubmluZyBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiCittc2dzdHIgIiIKKyJHaXQgZXJ6ZXVndCBub3JtYWxlcndlaXNlIGtlaW5lIFJlZmVyZW56ZW4gZGllIG1pdFxuIgorIjQwIEhleC1aZWljaGVuIGVuZGVuLCBkYSBkaWVzZSBpZ25vcmllcnQgd2VyZGVuIHdlbm5cbiIKKyJTaWUgZGllc2UgYW5nZWJlbi4gRGllc2UgUmVmZXJlbnplbiBrw7ZubnRlbiBhdXMgVmVyc2VoZW5cbiIKKyJlcnpldWd0IHdvcmRlbiBzZWluLiBadW0gQmVpc3BpZWwsXG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorIlxuIgorIndvYmVpIFwiJGJyXCIgbGVlciBpc3QgdW5kIGVpbmUgNDAtSGV4LVJlZmVyZW56IGVyemV1Z3RcbiIKKyJ3dXJkZS4gQml0dGUgcHLDvGZlbiBTaWUgZGllc2UgUmVmZXJlbnplbiB1bmQgbMO2c2NoZW5cbiIKKyJTaWUgc2llIGdlZ2ViZW5lbmZhbGxzLiBVbnRlcmRyw7xja2VuIFNpZSBkaWVzZSBNZWxkdW5nXG4iCisiaW5kZW0gU2llIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIlxuIgorImF1c2bDvGhyZW4uIgorCisjOiBzaGExLW5hbWUuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciAnJS4qcycgb25seSBnb2VzIGJhY2sgdG8gJXMiCittc2dzdHIgIkxvZyBmw7xyICclLipzJyBnZWh0IG51ciBiaXMgJXMgenVyw7xjayIKKworIzogc2hhMS1uYW1lLmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgJyUuKnMnIG9ubHkgaGFzICVkIGVudHJpZXMiCittc2dzdHIgIkxvZyBmw7xyICclLipzJyBoYXQgbnVyICVkIEVpbnRyw6RnZSIKKworIzogc2hhMS1uYW1lLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gJyUuKnMnIgorbXNnc3RyICJQZmFkICclcycgYmVmaW5kZXQgc2ljaCBpbSBEYXRlaXN5c3RlbSwgYWJlciBuaWNodCBpbiAnJS4qcyciCisKKyM6IHNoYTEtbmFtZS5jOjE2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInBhdGggJyVzJyBleGlzdHMsIGJ1dCBub3QgJyVzJ1xuIgorImhpbnQ6IERpZCB5b3UgbWVhbiAnJS4qczolcycgYWthICclLipzOi4vJXMnPyIKK21zZ3N0ciAiIgorIlBmYWQgJyVzJyBleGlzdGllcnQsIGFiZXIgbmljaHQgJyVzJ1xuIgorIkhpbndlaXM6IE1laW50ZW4gU2llICclLipzOiVzJyBhdWNoIGJla2FubnQgYWxzICclLipzOi4vJXMnPyIKKworIzogc2hhMS1uYW1lLmM6MTcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QgaW4gJyUuKnMnIgorbXNnc3RyICJQZmFkICclcycgZXhpc3RpZXJ0IG5pY2h0IGluICclLipzJyIKKworIzogc2hhMS1uYW1lLmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicGF0aCAnJXMnIGlzIGluIHRoZSBpbmRleCwgYnV0IG5vdCBhdCBzdGFnZSAlZFxuIgorImhpbnQ6IERpZCB5b3UgbWVhbiAnOiVkOiVzJz8iCittc2dzdHIgIiIKKyJQZmFkICclcycgaXN0IGltIEluZGV4LCBhYmVyIG5pY2h0IGluIFN0dWZlICVkXG4iCisiSGlud2VpczogTWVpbnRlbiBTaWUgJzolZDolcyc/IgorCisjOiBzaGExLW5hbWUuYzoxNzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXRoICclcycgaXMgaW4gdGhlIGluZGV4LCBidXQgbm90ICclcydcbiIKKyJoaW50OiBEaWQgeW91IG1lYW4gJzolZDolcycgYWthICc6JWQ6Li8lcyc/IgorbXNnc3RyICIiCisiUGZhZCAnJXMnIGlzdCBpbSBJbmRleCwgYWJlciBuaWNodCAnJXMnXG4iCisiSGlud2VpczogTWVpbnRlbiBTaWUgJzolZDolcycgYXVjaCBiZWthbm50IGFscyAnOiVkOi4vJXMnPyIKKworIzogc2hhMS1uYW1lLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gdGhlIGluZGV4IgorbXNnc3RyICJQZmFkICclcycgZXhpc3RpZXJ0IGltIERhdGVpc3lzdGVtLCBhYmVyIG5pY2h0IGltIEluZGV4IgorCisjOiBzaGExLW5hbWUuYzoxNzU4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCAobmVpdGhlciBvbiBkaXNrIG5vciBpbiB0aGUgaW5kZXgpIgorbXNnc3RyICJQZmFkICclcycgZXhpc3RpZXJ0IG5pY2h0ICh3ZWRlciBpbSBEYXRlaXN5c3RlbSBub2NoIGltIEluZGV4KSIKKworIzogc2hhMS1uYW1lLmM6MTc3MQorbXNnaWQgInJlbGF0aXZlIHBhdGggc3ludGF4IGNhbid0IGJlIHVzZWQgb3V0c2lkZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKyJEaWUgU3ludGF4IGbDvHIgcmVsYXRpdmUgUGZhZGUga2FubiBuaWNodCBhdcOfZXJoYWxiIGRlcyBBcmJlaXRzdmVyemVpY2huaXNzZXMgIgorImJlbnV0enQgd2VyZGVuLiIKKworIzogc2hhMS1uYW1lLmM6MTkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCBuYW1lICclLipzJy4iCittc2dzdHIgInVuZ8O8bHRpZ2VyIE9iamVrdG5hbWUgJyUuKnMnLiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlCisjOiBzdHJidWYuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCIgorbXNnc3RyICIldS4lMi4ydSBHaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgR2lCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZQorIzogc3RyYnVmLmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQiIKK21zZ3N0ciAiJXUuJTIuMnUgTWlCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCL3MiCittc2dzdHIgIiV1LiUyLjJ1IE1pQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBLaUIiCittc2dzdHIgIiV1LiUyLjJ1IEtpQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQi9zIgorbXNnc3RyICIldS4lMi4ydSBLaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUKKyM6IHN0cmJ1Zi5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlIgorbXNnaWRfcGx1cmFsICIldSBieXRlcyIKK21zZ3N0clswXSAiJXUgQnl0ZSIKK21zZ3N0clsxXSAiJXUgQnl0ZXMiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUvcyIKK21zZ2lkX3BsdXJhbCAiJXUgYnl0ZXMvcyIKK21zZ3N0clswXSAiJXUgQnl0ZS9zIgorbXNnc3RyWzFdICIldSBCeXRlcy9zIgorCisjOiBzdHJidWYuYzoxMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBlZGl0ICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGVkaXRpZXJlbi4iCisKKyM6IHN1Ym1vZHVsZS5jOjExNCBzdWJtb2R1bGUuYzoxNDMKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAiIgorIkthbm4gbmljaHQgenVzYW1tZW5nZWbDvGhydGUgLmdpdG1vZHVsZXMtRGF0ZWkgbmljaHQgw6RuZGVybiwgbMO2c2VuXG4iCisiU2llIHp1ZXJzdCBkaWUgS29uZmxpa3RlIGF1ZiIKKworIzogc3VibW9kdWxlLmM6MTE4IHN1Ym1vZHVsZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0aW9uIGluIC5naXRtb2R1bGVzIHdoZXJlIHBhdGg9JXMiCittc2dzdHIgIktvbm50ZSBrZWluZSBTZWt0aW9uIGluIC5naXRtb2R1bGVzIG1pdCBQZmFkIFwiJXNcIiBmaW5kZW4iCisKKyM6IHN1Ym1vZHVsZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIC5naXRtb2R1bGVzIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiS29ubnRlIEVpbnRyYWcgJyVzJyBuaWNodCBhdXMgLmdpdG1vZHVsZXMgZW50ZmVybmVuIgorCisjOiBzdWJtb2R1bGUuYzoxNjUKK21zZ2lkICJzdGFnaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorbXNnc3RyICJLb25udGUgYWt0dWFsaXNpZXJ0ZSAuZ2l0bW9kdWxlcy1EYXRlaSBuaWNodCB6dW0gQ29tbWl0IHZvcm1lcmtlbiIKKworIzogc3VibW9kdWxlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJJbiBuaWNodCBhdXNnZWNoZWNrdGVtIFN1Ym1vZHVsICclcycuIgorCisjOiBzdWJtb2R1bGUuYzozNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0aHNwZWMgJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICJQZmFkc3BlemlmaWthdGlvbiAnJXMnIGJlZmluZGV0IHNpY2ggaW4gU3VibW9kdWwgJyUuKnMnIgorCisjOiBzdWJtb2R1bGUuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0taWdub3JlLXN1Ym1vZHVsZXMgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlcyAtLWlnbm9yZS1zdWJtb2R1bGVzIEFyZ3VtZW50OiAlcyIKKworIzogc3VibW9kdWxlLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgaW4gY29tbWl0ICVzIGF0IHBhdGg6ICclcycgY29sbGlkZXMgd2l0aCBhIHN1Ym1vZHVsZSBuYW1lZCB0aGUgIgorInNhbWUuIFNraXBwaW5nIGl0LiIKK21zZ3N0ciAiIgorIlN1Ym1vZHVsIGluIENvbW1pdCAlcyBiZWltIFBmYWQ6ICclcycgaGF0IGRlbiBnbGVpY2hlbiBOYW1lbiB3aWUgZWluICIKKyJTdWJtb2R1bC4gV2lyZCDDvGJlcnNwcnVuZ2VuLiIKKworIzogc3VibW9kdWxlLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSBlbnRyeSAnJXMnICglcykgaXMgYSAlcywgbm90IGEgY29tbWl0IgorbXNnc3RyICJTdWJtb2R1bC1FaW50cmFnICclcycgKCVzKSBpc3QgZWluICVzLCBrZWluIENvbW1pdC4iCisKKyM6IHN1Ym1vZHVsZS5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0IDxjb21taXRzPiAtLW5vdCAtLXJlbW90ZXMgLW4gMScgY29tbWFuZCBpbiAiCisic3VibW9kdWxlICVzIgorbXNnc3RyICIiCisiS29ubnRlICdnaXQgcmV2LWxpc3QgPENvbW1pdHM+IC0tbm90IC0tcmVtb3RlcyAtbiAxJyBuaWNodCBpbiBTdWJtb2R1bCAnJXMnICIKKyJhdXNmw7xocmVuLiIKKworIzogc3VibW9kdWxlLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9jZXNzIGZvciBzdWJtb2R1bGUgJyVzJyBmYWlsZWQiCittc2dzdHIgIlByb3plc3MgZsO8ciBTdWJtb2R1bCAnJXMnIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBzdWJtb2R1bGUuYzoxMTQ3IGJ1aWx0aW4vYnJhbmNoLmM6NjgwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDQ1Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIktvbm50ZSBIRUFEIG5pY2h0IGFscyBnw7xsdGlnZSBSZWZlcmVueiBhdWZsw7ZzZW4uIgorCisjOiBzdWJtb2R1bGUuYzoxMTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAiUHVzaGUgU3VibW9kdWwgJyVzJ1xuIgorCisjOiBzdWJtb2R1bGUuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBwdXNoIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIkthbm4gUHVzaCBmw7xyIFN1Ym1vZHVsICclcycgbmljaHQgYXVzZsO8aHJlblxuIgorCisjOiBzdWJtb2R1bGUuYzoxNDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIHN1Ym1vZHVsZSAlcyVzXG4iCittc2dzdHIgIkFuZm9yZGVybiBkZXMgU3VibW9kdWxzICVzJXNcbiIKKworIzogc3VibW9kdWxlLmM6MTQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYWNjZXNzIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIktvbm50ZSBuaWNodCBhdWYgU3VibW9kdWwgJyVzJyB6dWdyZWlmZW5cbiIKKworIzogc3VibW9kdWxlLmM6MTYzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3JzIGR1cmluZyBzdWJtb2R1bGUgZmV0Y2g6XG4iCisiJXMiCittc2dzdHIgIiIKKyJGZWhsZXIgd8OkaHJlbmQgZGVzIEFuZm9yZGVybnMgZGVyIFN1Ym1vZHVsZTpcbiIKKyIlcyIKKworIzogc3VibW9kdWxlLmM6MTY2MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG5vdCByZWNvZ25pemVkIGFzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIiclcycgbmljaHQgYWxzIEdpdC1SZXBvc2l0b3J5IGVya2FubnQiCisKKyM6IHN1Ym1vZHVsZS5jOjE2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj0yJyBpbiBzdWJtb2R1bGUgJXMiCittc2dzdHIgIktvbm50ZSAnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj0yJyBuaWNodCBpbiBTdWJtb2R1bCAlcyBhdXNmw7xocmVuIgorCisjOiBzdWJtb2R1bGUuYzoxNzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIidnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTInIGZhaWxlZCBpbiBzdWJtb2R1bGUgJXMiCittc2dzdHIgIidnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTInIGlzdCBpbiBTdWJtb2R1bCAlcyBmZWhsZ2VzY2hsYWdlbiIKKworIzogc3VibW9kdWxlLmM6MTgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJLb25udGUgJ2dpdCBzdGF0dXMnIGluIFN1Ym1vZHVsICclcycgbmljaHQgc3RhcnRlbi4iCisKKyM6IHN1Ym1vZHVsZS5jOjE4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIktvbm50ZSAnZ2l0IHN0YXR1cycgaW4gU3VibW9kdWwgJyVzJyBuaWNodCBhdXNmw7xocmVuLiIKKworIzogc3VibW9kdWxlLmM6MTgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdW5zZXQgY29yZS53b3JrdHJlZSBzZXR0aW5nIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJLb25udGUgY29yZS53b3JrdHJlZSBFaW5zdGVsbHVuZyBpbiBTdWJtb2R1bCAnJXMnIG5pY2h0IGF1ZmhlYmVuLiIKKworIzogc3VibW9kdWxlLmM6MTg1NSBzdWJtb2R1bGUuYzoyMTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgIkZlaGxlciBiZWkgUmVrdXJzaW9uIGluIFN1Ym1vZHVsLVBmYWQgJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTg3NgorbXNnaWQgImNvdWxkIG5vdCByZXNldCBzdWJtb2R1bGUgaW5kZXgiCittc2dzdHIgImtvbm50ZSBJbmRleCBkZXMgU3VibW9kdWxzIG5pY2h0IHp1csO8Y2tzZXR6ZW4iCisKKyM6IHN1Ym1vZHVsZS5jOjE5MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgaGFzIGRpcnR5IGluZGV4IgorbXNnc3RyICJTdWJtb2R1bCAnJXMnIGhhdCBlaW5lbiBnZcOkbmRlcnRlbiBJbmRleC4iCisKKyM6IHN1Ym1vZHVsZS5jOjE5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgY291bGQgbm90IGJlIHVwZGF0ZWQuIgorbXNnc3RyICJTdWJtb2R1bGUgJyVzJyBrb25udGUgbmljaHQgYWt0dWFsaXNpZXJ0IHdlcmRlbi4iCisKKyM6IHN1Ym1vZHVsZS5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGdpdCBkaXIgJyVzJyBpcyBpbnNpZGUgZ2l0IGRpciAnJS4qcyciCittc2dzdHIgIiIKKyJHaXQtVmVyemVpY2huaXMgZGVzIFN1Ym1vZHVscyAnJXMnIGlzdCBpbSBHaXQtVmVyemVpY2huaXMgJyUuKnMnIGVudGhhbHRlbi4iCisKKyM6IHN1Ym1vZHVsZS5jOjIwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKyJyZWxvY2F0ZV9naXRkaXIgZsO8ciBTdWJtb2R1bCAnJXMnIG1pdCBtZWhyIGFscyBlaW5lbSBBcmJlaXRzdmVyemVpY2huaXNcbiIKKyJ3aXJkIG5pY2h0IHVudGVyc3TDvHR6dCIKKworIzogc3VibW9kdWxlLmM6MjA3MSBzdWJtb2R1bGUuYzoyMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgbmFtZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIktvbm50ZSBOYW1lIGbDvHIgU3VibW9kdWwgJyVzJyBuaWNodCBuYWNoc2NobGFnZW4uIgorCisjOiBzdWJtb2R1bGUuYzoyMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG1vdmUgJyVzJyBpbnRvIGFuIGV4aXN0aW5nIGdpdCBkaXIiCittc2dzdHIgIlZlcnNjaGllYmVuIHZvbiAnJXMnIGluIGVpbiBleGlzdGllcmVuZGVzIEdpdC1WZXJ6ZWljaG5pcyB2ZXJ3ZWlnZXJ0LiIKKworIzogc3VibW9kdWxlLmM6MjA4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTWlncmF0aW5nIGdpdCBkaXJlY3Rvcnkgb2YgJyVzJXMnIGZyb21cbiIKKyInJXMnIHRvXG4iCisiJyVzJ1xuIgorbXNnc3RyICIiCisiTWlncmllcmUgR2l0LVZlcnplaWNobmlzIHZvbiAnJXMlcycgdm9uXG4iCisiJyVzJyBuYWNoXG4iCisiJyVzJ1xuIgorCisjOiBzdWJtb2R1bGUuYzoyMjA5Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGxzLWZpbGVzIGluIC4uIgorbXNnc3RyICJLb25udGUgJ2xzLWZpbGVzJyBuaWNodCBpbiAuLiBzdGFydGVuIgorCisjOiBzdWJtb2R1bGUuYzoyMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImxzLXRyZWUgcmV0dXJuZWQgdW5leHBlY3RlZCByZXR1cm4gY29kZSAlZCIKK21zZ3N0ciAibHMtdHJlZSBtaXQgdW5lcndhcnRldGVtIFLDvGNrZ2FiZXdlcnQgJWQgYmVlbmRldCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBzdXNwaWNpb3VzIHN1Ym1vZHVsZSBuYW1lOiAlcyIKK21zZ3N0ciAiSWdub3JpZXJlIHZlcmTDpGNodGlnZW4gU3VibW9kdWxuYW1lbjogJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzozMDMKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZXMgbm90IGFsbG93ZWQgZm9yIHN1Ym1vZHVsZS5mZXRjaGpvYnMiCittc2dzdHIgIk5lZ2F0aXZlIFdlcnRlIGbDvHIgc3VibW9kdWxlLmZldGNoam9icyBuaWNodCBlcmxhdWJ0LiIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAnJXMnIHdoaWNoIG1heSBiZSBpbnRlcnByZXRlZCBhcyBhIGNvbW1hbmQtbGluZSBvcHRpb246ICVzIgorbXNnc3RyICIiCisiSWdub3JpZXJlICclcycsIHdhcyBhbHMgZWluZSBCZWZlaGxzemVpbGVub3B0aW9uICclcycgaW50ZXJwcmV0aWVydCB3ZXJkZW4gIgorInfDvHJkZS4iCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFdlcnQgZsO8ciAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIC5naXRtb2R1bGVzIGVudHJ5ICVzIgorbXNnc3RyICJLb25udGUgRWludHJhZyAnJXMnIGluIC5naXRtb2R1bGVzIG5pY2h0IGFrdHVhbGlzaWVyZW4iCisKKyM6IHRyYWlsZXIuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiCittc2dzdHIgIkF1c2bDvGhyZW4gZGVzIEFuaGFuZy1CZWZlaGxzICclcycgZmVobGdlc2NobGFnZW4iCisKKyM6IHRyYWlsZXIuYzo0ODUgdHJhaWxlci5jOjQ5MCB0cmFpbGVyLmM6NDk1IHRyYWlsZXIuYzo1NDkgdHJhaWxlci5jOjU1MworIzogdHJhaWxlci5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICJ1bmJla2FubnRlciBXZXJ0ICclcycgZsO8ciBTY2hsw7xzc2VsICVzIgorCisjOiB0cmFpbGVyLmM6NTM5IHRyYWlsZXIuYzo1NDQgYnVpbHRpbi9yZW1vdGUuYzoyOTggYnVpbHRpbi9yZW1vdGUuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAibWVociBhbHMgZWluICVzIgorCisjOiB0cmFpbGVyLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHRyYWlsZXIgdG9rZW4gaW4gdHJhaWxlciAnJS4qcyciCittc2dzdHIgImxlZXJlciBBbmhhbmctVG9rZW4gaW4gQW5oYW5nICclLipzJyIKKworIzogdHJhaWxlci5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICclcyciCittc2dzdHIgIktvbm50ZSBFaW5nYWJlLURhdGVpICclcycgbmljaHQgbGVzZW4iCisKKyM6IHRyYWlsZXIuYzo3NTMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICJrb25udGUgbmljaHQgdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiB0cmFpbGVyLmM6MTAxMSB3cmFwcGVyLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBsZXNlbiIKKworIzogdHJhaWxlci5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUiCittc2dzdHIgIkRhdGVpICclcycgaXN0IGtlaW5lIHJlZ3Vsw6RyZSBEYXRlaSIKKworIzogdHJhaWxlci5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3Qgd3JpdGFibGUgYnkgdXNlciIKK21zZ3N0ciAiRGF0ZWkgJXMgaXN0IHZvbSBCZW51dHplciBuaWNodCBiZXNjaHJlaWJiYXIuIgorCisjOiB0cmFpbGVyLmM6MTAyNworbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICJrb25udGUgdGVtcG9yw6RyZSBEYXRlaSAnJXMnIG5pY2h0IMO2ZmZuZW4iCisKKyM6IHRyYWlsZXIuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgdGVtcG9yYXJ5IGZpbGUgdG8gJXMiCittc2dzdHIgImtvbm50ZSB0ZW1wb3LDpHJlIERhdGVpIG5pY2h0IHp1ICVzIHVtYmVuZW5uZW4iCisKKyM6IHRyYW5zcG9ydC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBzZXQgdXBzdHJlYW0gb2YgJyVzJyB0byAnJXMnIG9mICclcydcbiIKK21zZ3N0ciAiV8O8cmRlIFVwc3RyZWFtLUJyYW5jaCB2b24gJyVzJyB6dSAnJXMnIHZvbiAnJXMnIHNldHplblxuIgorCisjOiB0cmFuc3BvcnQuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgYnVuZGxlICclcyciCittc2dzdHIgIktvbm50ZSBQYWtldCAnJXMnIG5pY2h0IGxlc2VuLiIKKworIzogdHJhbnNwb3J0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIKK21zZ3N0ciAidHJhbnNwb3J0OiB1bmfDvGx0aWdlIC0tZGVwdGggT3B0aW9uICclcyciCisKKyM6IHRyYW5zcG9ydC5jOjI2NgorbXNnaWQgInNlZSBwcm90b2NvbC52ZXJzaW9uIGluICdnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGRldGFpbHMiCittc2dzdHIgIlNpZWhlIHByb3RvY29sLnZlcnNpb24gaW4gJ2dpdCBoZWxwIGNvbmZpZycgZsO8ciB3ZWl0ZXJlIEluZm9ybWF0aW9uZW4iCisKKyM6IHRyYW5zcG9ydC5jOjI2NworbXNnaWQgInNlcnZlciBvcHRpb25zIHJlcXVpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGxhdGVyIgorbXNnc3RyICJTZXJ2ZXItT3B0aW9uZW4gYmVuw7Z0aWdlbiBQcm90b2tvbGwtVmVyc2lvbiAyIG9kZXIgaMO2aGVyIgorCisjOiB0cmFuc3BvcnQuYzo2MzIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgdHJhbnNwb3J0LmNvbG9yLiogY29uZmlnIgorbXNnc3RyICJLb25udGUgdHJhbnNwb3J0LmNvbG9yLiogS29uZmlndXJhdGlvbiBuaWNodCBwYXJzZW4uIgorCisjOiB0cmFuc3BvcnQuYzo3MDUKK21zZ2lkICJzdXBwb3J0IGZvciBwcm90b2NvbCB2MiBub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICJVbnRlcnN0w7x0enVuZyBmw7xyIFByb3Rva29sbCB2MiBub2NoIG5pY2h0IGltcGxlbWVudGllcnQuIgorCisjOiB0cmFuc3BvcnQuYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBmb3IgY29uZmlnICclcyc6ICVzIgorbXNnc3RyICJVbmJla2FubnRlciBXZXJ0IGbDvHIgS29uZmlndXJhdGlvbiAnJXMnOiAlcyIKKworIzogdHJhbnNwb3J0LmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydCAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICLDnGJlcnRyYWd1bmdzYXJ0ICclcycgbmljaHQgZXJsYXVidC4iCisKKyM6IHRyYW5zcG9ydC5jOjk0OQorbXNnaWQgImdpdC1vdmVyLXJzeW5jIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiCittc2dzdHIgImdpdC1vdmVyLXJzeW5jIHdpcmQgbmljaHQgbMOkbmdlciB1bnRlcnN0w7x0enQuIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKKyJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIKK21zZ3N0ciAiIgorIkRpZSBmb2xnZW5kZW4gU3VibW9kdWwtUGZhZGUgZW50aGFsdGVuIMOEbmRlcnVuZ2VuLCBkaWUgaW4ga2VpbmVtXG4iCisiUmVtb3RlLVJlcG9zaXRvcnkgZ2VmdW5kZW4gd3VyZGVuOlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQbGVhc2UgdHJ5XG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJvciBjZCB0byB0aGUgcGF0aCBhbmQgdXNlXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorInRvIHB1c2ggdGhlbSB0byBhIHJlbW90ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkJpdHRlIHZlcnN1Y2hlbiBTaWVcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm9kZXIgd2VjaHNlbG4gU2llIGluIGRhcyBWZXJ6ZWljaG5pcyB1bmQgYmVudXR6ZW4gU2llXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorInp1bSBWZXJzZW5kZW4genUgZWluZW0gUmVtb3RlLVJlcG9zaXRvcnkuXG4iCisiXG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwNTYKK21zZ2lkICJBYm9ydGluZy4iCittc2dzdHIgIkFiYnJ1Y2guIgorCisjOiB0cmFuc3BvcnQuYzoxMjAxCittc2dpZCAiZmFpbGVkIHRvIHB1c2ggYWxsIG5lZWRlZCBzdWJtb2R1bGVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJzYW5kIGFsbGVyIGVyZm9yZGVybGljaGVuIFN1Ym1vZHVsZS4iCisKKyM6IHRyYW5zcG9ydC5jOjEzNDUgdHJhbnNwb3J0LWhlbHBlci5jOjY1NworbXNnaWQgIm9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIgorbXNnc3RyICJEaWUgT3BlcmF0aW9uIHdpcmQgdm9uIGRlbSBQcm90b2tvbGwgbmljaHQgdW50ZXJzdMO8dHp0LiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxIHRyYW5zcG9ydC1oZWxwZXIuYzo5MAorbXNnaWQgImZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiCittc2dzdHIgIlZvbGxzdMOkbmRpZ2VzIFNjaHJlaWJlbiB6dSBSZW1vdGUtSGVscGVyIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCByZW1vdGUgaGVscGVyIGZvciAnJXMnIgorbXNnc3RyICJLb25udGUgUmVtb3RlLUhlbHBlciBmw7xyICclcycgbmljaHQgZmluZGVuLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE2MCB0cmFuc3BvcnQtaGVscGVyLmM6NTcxCittc2dpZCAiY2FuJ3QgZHVwIGhlbHBlciBvdXRwdXQgZmQiCittc2dzdHIgIiIKKyJLb25udGUgZHVwKCkgYXVmIERhdGVpZGVza3JpcHRvciBmw7xyIEF1c2dhYmVuIGRlcyBSZW1vdGUtSGVscGVycyBuaWNodCAiCisiYXVzZsO8aHJlbi4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVua25vd24gbWFuZGF0b3J5IGNhcGFiaWxpdHkgJXM7IHRoaXMgcmVtb3RlIGhlbHBlciBwcm9iYWJseSBuZWVkcyBuZXdlciAiCisidmVyc2lvbiBvZiBHaXQiCittc2dzdHIgIiIKKyJVbmJla2FubnRlIGVyZm9yZGVybGljaGUgRsOkaGlna2VpdCAlczsgZGllc2VyIFJlbW90ZS1IZWxwZXIgYmVuw7Z0aWd0XG4iCisid2FocnNjaGVpbmxpY2ggZWluZSBuZXVlcmUgVmVyc2lvbiB2b24gR2l0LiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxNworbXNnaWQgInRoaXMgcmVtb3RlIGhlbHBlciBzaG91bGQgaW1wbGVtZW50IHJlZnNwZWMgY2FwYWJpbGl0eSIKK21zZ3N0ciAiRGllc2VyIFJlbW90ZS1IZWxwZXIgc29sbHRlIGRpZSBcInJlZnNwZWNcIi1Gw6RoaWdrZWl0IGltcGxlbWVudGllcmVuLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjI4NCB0cmFuc3BvcnQtaGVscGVyLmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHVuZXhwZWN0ZWRseSBzYWlkOiAnJXMnIgorbXNnc3RyICJ1bmVyd2FydGV0ZSBBdXNnYWJlIHZvbiAlczogJyVzJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHNvIGxvY2tlZCAlcyIKK21zZ3N0ciAiJXMgc3BlcnJ0ZSBhdWNoICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDkzCittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtaW1wb3J0IgorbXNnc3RyICJLb25udGUgXCJmYXN0LWltcG9ydFwiIG5pY2h0IGF1c2bDvGhyZW4uIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTE2Cittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWltcG9ydCIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiB2b24gJ2Zhc3QtaW1wb3J0Jy4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1NDUgdHJhbnNwb3J0LWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICJLb25udGUgUmVmZXJlbnogJXMgbmljaHQgbGVzZW4uIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcmVzcG9uc2UgdG8gY29ubmVjdDogJXMiCittc2dzdHIgIlVuYmVrYW5udGUgQW50d29ydCBhdWYgJ2Nvbm5lY3QnOiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxMgorbXNnaWQgInNldHRpbmcgcmVtb3RlIHNlcnZpY2UgcGF0aCBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIgorbXNnc3RyICIiCisiU2V0emVuIGRlcyBSZW1vdGUtU2VydmljZSBQZmFkcyB3aXJkIHZvbiBkZW0gUHJvdG9rb2xsIG5pY2h0IHVudGVyc3TDvHR6dC4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTQKK21zZ2lkICJpbnZhbGlkIHJlbW90ZSBzZXJ2aWNlIHBhdGgiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFJlbW90ZS1TZXJ2aWNlIFBmYWQuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNvbm5lY3QgdG8gc3Vic2VydmljZSAlcyIKK21zZ3N0ciAiS2FubiBrZWluZSBWZXJiaW5kdW5nIHp1IFN1YnNlcnZpY2UgJXMgaGVyc3RlbGxlbi4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciCittc2dzdHIgIkVyd2FydGV0ZSBvay9lcnJvciwgUmVtb3RlLUhlbHBlciBnYWIgJyVzJyBhdXMuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciByZXBvcnRlZCB1bmV4cGVjdGVkIHN0YXR1cyBvZiAlcyIKK21zZ3N0ciAiUmVtb3RlLUhlbHBlciBtZWxkZXRlIHVuZXJ3YXJ0ZXRlbiBTdGF0dXMgdm9uICVzLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCBkcnktcnVuIgorbXNnc3RyICJSZW1vdGUtSGVscGVyICVzIHVudGVyc3TDvHR6dCBrZWluIFRyb2NrZW5sYXVmLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCIKK21zZ3N0ciAiUmVtb3RlLUhlbHBlciAlcyB1bnRlcnN0w7x0enQga2VpbiAtLXNpZ25lZC4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQ9aWYtYXNrZWQiCittc2dzdHIgIlJlbW90ZS1IZWxwZXIgJXMgdW50ZXJzdMO8dHp0IGtlaW4gLS1zaWduZWQ9aWYtYXNrZWQuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIgorbXNnc3RyICJSZW1vdGUtSGVscGVyICVzIHVudGVyc3TDvHR6dCBrZWluIC0tYXRvbWljLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAncHVzaC1vcHRpb24nIgorbXNnc3RyICJSZW1vdGUtSGVscGVyICVzIHVudGVyc3TDvHR6dCBuaWNodCAncHVzaC1vcHRpb24nLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk2NQorbXNnaWQgInJlbW90ZS1oZWxwZXIgZG9lc24ndCBzdXBwb3J0IHB1c2g7IHJlZnNwZWMgbmVlZGVkIgorbXNnc3RyICJSZW1vdGUtSGVscGVyIHVudGVyc3TDvHR6dCBrZWluIFB1c2g7IFJlZnNwZWMgYmVuw7Z0aWd0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTcwCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdmb3JjZSciCittc2dzdHIgIlJlbW90ZS1IZWxwZXIgJXMgdW50ZXJzdMO8dHp0IGtlaW4gJ2ZvcmNlJy4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDE3Cittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtZXhwb3J0IgorbXNnc3RyICJLb25udGUgXCJmYXN0LWV4cG9ydFwiIG5pY2h0IGF1c2bDvGhyZW4uIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAyMgorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1leHBvcnQiCittc2dzdHIgIkZlaGxlciBiZWltIEF1c2bDvGhyZW4gdm9uIFwiZmFzdC1leHBvcnRcIi4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyByZWZzIGluIGNvbW1vbiBhbmQgbm9uZSBzcGVjaWZpZWQ7IGRvaW5nIG5vdGhpbmcuXG4iCisiUGVyaGFwcyB5b3Ugc2hvdWxkIHNwZWNpZnkgYSBicmFuY2ggc3VjaCBhcyAnbWFzdGVyJy5cbiIKK21zZ3N0ciAiIgorIktlaW5lIGdlbWVpbnNhbWVuIFJlZmVyZW56ZW4gdW5kIG5pY2h0cyBzcGV6aWZpemllcnQ7IGtlaW5lIEF1c2bDvGhydW5nLlxuIgorIlZpZWxsZWljaHQgc29sbHRlbiBTaWUgZWluZW4gQnJhbmNoIHdpZSAnbWFzdGVyJyBhbmdlYmVuLlxuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgcmVzcG9uc2UgaW4gcmVmIGxpc3Q6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlIEFudHdvcnQgaW4gUmVmZXJlbnpsaXN0ZTogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQoJXMpIGZhaWxlZCIKK21zZ3N0ciAiTGVzZW4gdm9uICVzIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGUoJXMpIGZhaWxlZCIKK21zZ3N0ciAiU2NocmVpYmVuIHZvbiAlcyBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQiCittc2dzdHIgIlRocmVhZCAlcyBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIEJlaXRyZXRlbiB6dSBUaHJlYWQgJXM6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM3MSB0cmFuc3BvcnQtaGVscGVyLmM6MTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YTogJXMiCittc2dzdHIgIkthbm4gVGhyZWFkIHp1bSBLb3BpZXJlbiB2b24gRGF0ZW4gbmljaHQgc3RhcnRlbjogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIHRvIHdhaXQiCittc2dzdHIgIkZlaGxlciBiZWltIFdhcnRlbiB2b24gUHJvemVzcyAlcy4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICJQcm96ZXNzICVzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQzNCB0cmFuc3BvcnQtaGVscGVyLmM6MTQ0MworbXNnaWQgImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhIgorbXNnc3RyICJLYW5uIFRocmVhZCB6dW0gS29waWVyZW4gdm9uIERhdGVuIG5pY2h0IHN0YXJ0ZW4uIgorCisjOiB0cmVlLXdhbGsuYzozMgorbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAienUga3VyemVzIFRyZWUtT2JqZWt0IgorCisjOiB0cmVlLXdhbGsuYzozOAorbXNnaWQgIm1hbGZvcm1lZCBtb2RlIGluIHRyZWUgZW50cnkiCittc2dzdHIgImZlaGxlcmhhZnRlciBNb2R1cyBpbiBUcmVlLUVpbnRyYWciCisKKyM6IHRyZWUtd2Fsay5jOjQyCittc2dpZCAiZW1wdHkgZmlsZW5hbWUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAibGVlcmVyIERhdGVpbmFtZSBpbiBUcmVlLUVpbnRyYWciCisKKyM6IHRyZWUtd2Fsay5jOjExNworbXNnaWQgInRvby1zaG9ydCB0cmVlIGZpbGUiCittc2dzdHIgInp1IGt1cnplIFRyZWUtRGF0ZWkiCisKKyM6IHVucGFjay10cmVlcy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyJJaHJlIGxva2FsZW4gw4RuZGVydW5nZW4gaW4gZGVuIGZvbGdlbmRlbiBEYXRlaWVuIHfDvHJkZW4gYmVpbSBBdXNjaGVja2VuXG4iCisiw7xiZXJzY2hyaWViZW4gd2VyZGVuOlxuIgorIiUlc0JpdHRlIGNvbW1pdHRlbiBvZGVyIHN0YXNoZW4gU2llIElocmUgw4RuZGVydW5nZW4sIGJldm9yIFNpZSBCcmFuY2hlc1xuIgorIndlY2hzZWxuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJJaHJlIGxva2FsZW4gw4RuZGVydW5nZW4gaW4gZGVuIGZvbGdlbmRlbiBEYXRlaWVuIHfDvHJkZW4gYmVpbSBBdXNjaGVja2VuXG4iCisiw7xiZXJzY2hyaWViZW4gd2VyZGVuOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiSWhyZSBsb2thbGVuIMOEbmRlcnVuZ2VuIGluIGRlbiBmb2xnZW5kZW4gRGF0ZWllbiB3w7xyZGVuIGR1cmNoIGRlbiBNZXJnZVxuIgorIsO8YmVyc2NocmllYmVuIHdlcmRlbjpcbiIKKyIlJXNCaXR0ZSBjb21taXR0ZW4gb2RlciBzdGFzaGVuIFNpZSBJaHJlIMOEbmRlcnVuZ2VuLCBiZXZvciBTaWUgbWVyZ2VuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJJaHJlIGxva2FsZW4gw4RuZGVydW5nZW4gaW4gZGVuIGZvbGdlbmRlbiBEYXRlaWVuIHfDvHJkZW4gZHVyY2ggZGVuIE1lcmdlXG4iCisiw7xiZXJzY2hyaWViZW4gd2VyZGVuOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiSWhyZSBsb2thbGVuIMOEbmRlcnVuZ2VuIGluIGRlbiBmb2xnZW5kZW4gRGF0ZWllbiB3w7xyZGVuIGR1cmNoICVzXG4iCisiw7xiZXJzY2hyaWViZW4gd2VyZGVuOlxuIgorIiUlc0JpdHRlIGNvbW1pdHRlbiBvZGVyIHN0YXNoZW4gU2llIElocmUgw4RuZGVydW5nZW4sIGJldm9yIFNpZSAlcyBhdXNmw7xocmVuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJJaHJlIGxva2FsZW4gw4RuZGVydW5nZW4gd8O8cmRlbiBkdXJjaCAlcyDDvGJlcnNjaHJpZWJlbiB3ZXJkZW4uXG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgd291bGQgbG9zZSB1bnRyYWNrZWQgZmlsZXMgaW4gdGhlbTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkR1cmNoIGRpZSBBa3R1YWxpc2llcnVuZyBkZXIgZm9sZ2VuZGVuIFZlcnplaWNobmlzc2Ugd8O8cmRlbiB1bnZlcnNpb25pZXJ0ZVxuIgorIkRhdGVpZW4gaW4gZGllc2VuIFZlcnplaWNobmlzc2VuIHZlcmxvcmVuIGdlaGVuOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkRpZSBmb2xnZW5kZW4gdW52ZXJzaW9uaWVydGVuIERhdGVpZW4gaW0gQXJiZWl0c3ZlcnplaWNobmlzIHfDvHJkZW4gZHVyY2hcbiIKKyJkZW4gQ2hlY2tvdXQgZW50ZmVybnQgd2VyZGVuOlxuIgorIiUlc0JpdHRlIHZlcnNjaGllYmVuIG9kZXIgZW50ZmVybmVuIFNpZSBkaWVzZSwgYmV2b3IgU2llIEJyYW5jaGVzIHdlY2hzZWxuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJEaWUgZm9sZ2VuZGVuIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3w7xyZGVuIGR1cmNoICIKKyJkZW5cbiIKKyJDaGVja291dCBlbnRmZXJudCB3ZXJkZW46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgd8O8cmRlbiBkdXJjaFxuIgorImRlbiBNZXJnZSBlbnRmZXJudCB3ZXJkZW46XG4iCisiJSVzQml0dGUgdmVyc2NoaWViZW4gb2RlciBlbnRmZXJuZW4gU2llIGRpZXNlLCBiZXZvciBzaWUgbWVyZ2VuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJEaWUgZm9sZ2VuZGVuIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3w7xyZGVuIGR1cmNoICIKKyJkZW5cbiIKKyJNZXJnZSBlbnRmZXJudCB3ZXJkZW46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgd8O8cmRlbiBkdXJjaFxuIgorImRlbiAlcyBlbnRmZXJudCB3ZXJkZW46XG4iCisiJSVzQml0dGUgdmVyc2NoaWViZW4gb2RlciBlbnRmZXJuZW4gU2llIGRpZXNlLCBiZXZvciBzaWUgJXMgYXVzZsO8aHJlbi4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgd8O8cmRlbiBkdXJjaFxuIgorImRlbiAlcyBlbnRmZXJudCB3ZXJkZW46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgd8O8cmRlbiBkdXJjaFxuIgorImRlbiBDaGVja291dCDDvGJlcnNjaHJpZWJlbiB3ZXJkZW46XG4iCisiJSVzQml0dGUgdmVyc2NoaWViZW4gb2RlciBlbnRmZXJuZW4gU2llIGRpZXNlLCBiZXZvciBTaWUgQnJhbmNoZXMgd2VjaHNlbG4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgd8O8cmRlbiBkdXJjaCAiCisiZGVuXG4iCisiQ2hlY2tvdXQgw7xiZXJzY2hyaWViZW4gd2VyZGVuOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJEaWUgZm9sZ2VuZGVuIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3w7xyZGVuIGR1cmNoXG4iCisiZGVuIE1lcmdlIMO8YmVyc2NocmllYmVuIHdlcmRlbjpcbiIKKyIlJXNCaXR0ZSB2ZXJzY2hpZWJlbiBvZGVyIGVudGZlcm5lbiBTaWUgZGllc2UsIGJldm9yIFNpZSBtZXJnZW4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJEaWUgZm9sZ2VuZGVuIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3w7xyZGVuIGR1cmNoXG4iCisiZGVuIE1lcmdlIMO8YmVyc2NocmllYmVuIHdlcmRlbjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgd8O8cmRlbiBkdXJjaFxuIgorImRlbiAlcyDDvGJlcnNjaHJpZWJlbiB3ZXJkZW46XG4iCisiJSVzQml0dGUgdmVyc2NoaWViZW4gb2RlciBlbnRmZXJuZW4gU2llIGRpZXNlLCBiZXZvciBzaWUgJXMgYXVzZsO8aHJlbi4iCisKKyM6IHVucGFjay10cmVlcy5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkRpZSBmb2xnZW5kZW4gdW52ZXJzaW9uaWVydGVuIERhdGVpZW4gaW0gQXJiZWl0c3ZlcnplaWNobmlzIHfDvHJkZW4gZHVyY2ggIgorImRlblxuIgorIiVzIMO8YmVyc2NocmllYmVuIHdlcmRlbjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiIKK21zZ3N0ciAiRWludHJhZyAnJXMnIMO8YmVyc2NobmVpZGV0IHNpY2ggbWl0ICclcycuIEthbm4gbmljaHQgdmVyYmluZGVuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHNwYXJzZSBjaGVja291dDogdGhlIGZvbGxvd2luZyBlbnRyaWVzIGFyZSBub3QgdXAgdG8gZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkthbm4gcGFydGllbGxlbiBDaGVja291dCBuaWNodCBha3R1YWxpc2llcmVuOiBkaWUgZm9sZ2VuZGVuIEVpbnRyw6RnZVxuIgorInNpbmQgbmljaHQgYWt0dWVsbDpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkRpZSBmb2xnZW5kZW4gRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgd8O8cmRlbiBkdXJjaCBkaWUgQWt0dWFsaXNpZXJ1bmdcbiIKKyLDvGJlciBlaW5lbiBwYXJ0aWVsbGVuIENoZWNrb3V0IMO8YmVyc2NocmllYmVuIHdlcmRlbjpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3w7xyZGVuIGR1cmNoIGRpZSBBa3R1YWxpc2llcnVuZ1xuIgorIsO8YmVyIGVpbmVuIHBhcnRpZWxsZW4gQ2hlY2tvdXQgZW50ZmVybnQgd2VyZGVuOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3VibW9kdWxlOlxuIgorIiVzIgorbXNnc3RyICIiCisiS2FubiBTdWJtb2R1bCBuaWNodCBha3R1YWxpc2llcmVuOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmdcbiIKK21zZ3N0ciAiQWJicnVjaFxuIgorCisjOiB1bnBhY2stdHJlZXMuYzozMTcKK21zZ2lkICJVcGRhdGluZyBmaWxlcyIKK21zZ3N0ciAiQWt0dWFsaXNpZXJlIERhdGVpZW4iCisKKyM6IHVucGFjay10cmVlcy5jOjM0OQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHBhdGhzIGhhdmUgY29sbGlkZWQgKGUuZy4gY2FzZS1zZW5zaXRpdmUgcGF0aHNcbiIKKyJvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSkgYW5kIG9ubHkgb25lIGZyb20gdGhlIHNhbWVcbiIKKyJjb2xsaWRpbmcgZ3JvdXAgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZTpcbiIKK21zZ3N0ciAiIgorIkRpZSBmb2xnZW5kZW4gUGZhZGUgaGFiZW4ga29sbGlkaWVydCAoei5CLiBjYXNlLXNlbnNpdGl2ZSBQZmFkZVxuIgorImF1ZiBlaW5lbSBjYXNlLWluc2Vuc2l0aXZlbiBEYXRlaXN5c3RlbSkgdW5kIG51ciBlaW5lciB2b24gZGVyXG4iCisic2VsYmVuIEtvbGxpc3Npb25zZ3J1cHBlIGlzdCBpbSBBcmJlaXRzdmVyemVpY2huaXM6XG4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0NDUKK21zZ2lkICJVcGRhdGluZyBpbmRleCBmbGFncyIKK21zZ3N0ciAiQWt0dWFsaXNpZXJlIEluZGV4LU1hcmtpZXJ1bmdlbiIKKworIzogdXJsbWF0Y2guYzoxNjMKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgVVJMLVNjaGVtYSBvZGVyIFN1ZmZpeCAnOi8vJyBmZWhsdCIKKworIzogdXJsbWF0Y2guYzoxODcgdXJsbWF0Y2guYzozNDYgdXJsbWF0Y2guYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlWFggZXNjYXBlIHNlcXVlbmNlIgorbXNnc3RyICJ1bmfDvGx0aWdlIEVzY2FwZS1TZXF1ZW56ICVYWCIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAiZmVobGVuZGVyIEhvc3QgdW5kIFNjaGVtYSBpc3QgbmljaHQgJ2ZpbGU6JyIKKworIzogdXJsbWF0Y2guYzoyMzIKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICJlaW5lICdmaWxlOicgVVJMIGRhcmYga2VpbmUgUG9ydG51bW1lciBlbnRoYWx0ZW4iCisKKyM6IHVybG1hdGNoLmM6MjQ3Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGhvc3QgbmFtZSIKK21zZ3N0ciAiSG9zdG5hbWUgZW50aMOkbHQgdW5nw7xsdGlnZSBaZWljaGVuIgorCisjOiB1cmxtYXRjaC5jOjI5MiB1cmxtYXRjaC5jOjMwMworbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgInVuZ8O8bHRpZ2UgUG9ydG51bW1lciIKKworIzogdXJsbWF0Y2guYzozNzEKK21zZ2lkICJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50IgorbXNnc3RyICJ1bmfDvGx0aWdlcyAnLi4nIFBmYWRzZWdtZW50IgorCisjOiB3YWxrZXIuYzoxNzAKK21zZ2lkICJGZXRjaGluZyBvYmplY3RzIgorbXNnc3RyICJBbmZvcmRlcm4gZGVyIE9iamVrdGUiCisKKyM6IHdvcmt0cmVlLmM6MjU5IGJ1aWx0aW4vYW0uYzoyMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIHZvbiAnJXMnIgorCisjOiB3b3JrdHJlZS5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGF0IG1haW4gd29ya2luZyB0cmVlIGlzIG5vdCB0aGUgcmVwb3NpdG9yeSBkaXJlY3RvcnkiCittc2dzdHIgIiclcycgaW0gSGF1cHRhcmJlaXRzdmVyemVpY2huaXMgaXN0IG5pY2h0IGRhcyBSZXBvc2l0b3J5LVZlcnplaWNobmlzLiIKKworIzogd29ya3RyZWUuYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgd29ya2luZyB0cmVlIGxvY2F0aW9uIgorbXNnc3RyICInJXMnIERhdGVpIGVudGjDpGx0IG5pY2h0IGRlbiBhYnNvbHV0ZW4gUGZhZCB6dW0gQXJiZWl0c3ZlcnplaWNobmlzLiIKKworIzogd29ya3RyZWUuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiJyVzJyBleGlzdGllcnQgbmljaHQuIgorCisjOiB3b3JrdHJlZS5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIC5naXQgZmlsZSwgZXJyb3IgY29kZSAlZCIKK21zZ3N0ciAiJyVzJyBpc3Qga2VpbmUgLmdpdC1EYXRlaSwgRmVobGVyY29kZSAlZCIKKworIzogd29ya3RyZWUuYzozNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCBiYWNrIHRvICclcyciCittc2dzdHIgIiclcycgemVpZ3QgbmljaHQgenVyw7xjayBhdWYgJyVzJyIKKworIzogd3JhcHBlci5jOjE4NiB3cmFwcGVyLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHp1bSBMZXNlbiB1bmQgU2NocmVpYmVuIMO2ZmZuZW4uIgorCisjOiB3cmFwcGVyLmM6Mzg3IHdyYXBwZXIuYzo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnIgorbXNnc3RyICJrb25udGUgbmljaHQgYXVmICclcycgenVncmVpZmVuIgorCisjOiB3cmFwcGVyLmM6NTk2Cittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJLb25udGUgYWt0dWVsbGVzIEFyYmVpdHN2ZXJ6ZWljaG5pcyBuaWNodCBiZWtvbW1lbi4iCisKKyM6IHd0LXN0YXR1cy5jOjE1OAorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiTmljaHQgenVzYW1tZW5nZWbDvGhydGUgUGZhZGU6IgorCisjOiB3dC1zdGF0dXMuYzoxODcgd3Qtc3RhdHVzLmM6MjE5Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8RGF0ZWk+Li4uXCIgenVtIEVudGZlcm5lbiBhdXMgZGVyICIKKyJTdGFnaW5nLUFyZWEpIgorCisjOiB3dC1zdGF0dXMuYzoxOTAgd3Qtc3RhdHVzLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisiICAoYmVudXR6ZW4gU2llIFwiZ2l0IHJlc3RvcmUgLS1zb3VyY2U9JXMgLS1zdGFnZWQgPERhdGVpPi4uLlwiIHp1bSAiCisiRW50ZmVybmVuIGF1cyBkZXIgU3RhZ2luZy1BcmVhKSIKKworIzogd3Qtc3RhdHVzLmM6MTkzIHd0LXN0YXR1cy5jOjIyNQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBybSAtLWNhY2hlZCA8RGF0ZWk+Li4uXCIgenVtIEVudGZlcm5lbiBhdXMgZGVyIFN0YWdpbmctIgorIkFyZWEpIgorCisjOiB3dC1zdGF0dXMuYzoxOTcKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgYWRkL3JtIDxEYXRlaT4uLi5cIiwgdW0gZGllIEF1ZmzDtnN1bmcgenUgbWFya2llcmVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTk5IHd0LXN0YXR1cy5jOjIwMworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBhZGQvcm0gPERhdGVpPi4uLlwiLCB1bSBkaWUgQXVmbMO2c3VuZyBlbnRzcHJlY2hlbmQgenUgIgorIm1hcmtpZXJlbikiCisKKyM6IHd0LXN0YXR1cy5jOjIwMQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAoYmVudXR6ZW4gU2llIFwiZ2l0IGFkZC9ybSA8RGF0ZWk+Li4uXCIsIHVtIGRpZSBBdWZsw7ZzdW5nIHp1IG1hcmtpZXJlbikiCisKKyM6IHd0LXN0YXR1cy5jOjIxMSB3dC1zdGF0dXMuYzoxMDc0Cittc2dpZCAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICJadW0gQ29tbWl0IHZvcmdlbWVya3RlIMOEbmRlcnVuZ2VuOiIKKworIzogd3Qtc3RhdHVzLmM6MjM0IHd0LXN0YXR1cy5jOjEwODMKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIsOEbmRlcnVuZ2VuLCBkaWUgbmljaHQgenVtIENvbW1pdCB2b3JnZW1lcmt0IHNpbmQ6IgorCisjOiB3dC1zdGF0dXMuYzoyMzgKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBhZGQgPERhdGVpPi4uLlwiLCB1bSBkaWUgw4RuZGVydW5nZW4genVtIENvbW1pdCAiCisidm9yenVtZXJrZW4pIgorCisjOiB3dC1zdGF0dXMuYzoyNDAKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBhZGQvcm0gPERhdGVpPi4uLlwiLCB1bSBkaWUgw4RuZGVydW5nZW4genVtIENvbW1pdCAiCisidm9yenVtZXJrZW4pIgorCisjOiB3dC1zdGF0dXMuYzoyNDEKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCByZXN0b3JlIDxEYXRlaT4uLi5cIiwgdW0gZGllIMOEbmRlcnVuZ2VuIGltICIKKyJBcmJlaXRzdmVyemVpY2huaXMgenUgdmVyd2VyZmVuKSIKKworIzogd3Qtc3RhdHVzLmM6MjQzCittc2dpZCAiICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpIgorbXNnc3RyICIiCisiICAoY29tbWl0dGVuIG9kZXIgdmVyd2VyZmVuIFNpZSBkZW4gdW52ZXJzaW9uaWVydGVuIG9kZXIgZ2XDpG5kZXJ0ZW4gSW5oYWx0ICIKKyJpbiBkZW4gU3VibW9kdWxlbikiCisKKyM6IHd0LXN0YXR1cy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCAlcyA8RGF0ZWk+Li4uXCIsIHVtIGRpZSDDhG5kZXJ1bmdlbiB6dW0gQ29tbWl0ICIKKyJ2b3J6dW1lcmtlbikiCisKKyM6IHd0LXN0YXR1cy5jOjI2OAorbXNnaWQgImJvdGggZGVsZXRlZDoiCittc2dzdHIgImJlaWRlIGdlbMO2c2NodDoiCisKKyM6IHd0LXN0YXR1cy5jOjI3MAorbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAidm9uIHVucyBoaW56dWdlZsO8Z3Q6IgorCisjOiB3dC1zdGF0dXMuYzoyNzIKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICJ2b24gZGVuZW4gZ2Vsw7ZzY2h0OiIKKworIzogd3Qtc3RhdHVzLmM6Mjc0Cittc2dpZCAiYWRkZWQgYnkgdGhlbToiCittc2dzdHIgInZvbiBkZW5lbiBoaW56dWdlZsO8Z3Q6IgorCisjOiB3dC1zdGF0dXMuYzoyNzYKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAidm9uIHVucyBnZWzDtnNjaHQ6IgorCisjOiB3dC1zdGF0dXMuYzoyNzgKK21zZ2lkICJib3RoIGFkZGVkOiIKK21zZ3N0ciAidm9uIGJlaWRlbiBoaW56dWdlZsO8Z3Q6IgorCisjOiB3dC1zdGF0dXMuYzoyODAKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAidm9uIGJlaWRlbiBnZcOkbmRlcnQ6IgorCisjOiB3dC1zdGF0dXMuYzoyOTAKK21zZ2lkICJuZXcgZmlsZToiCittc2dzdHIgIm5ldWUgRGF0ZWk6IgorCisjOiB3dC1zdGF0dXMuYzoyOTIKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICJrb3BpZXJ0OiIKKworIzogd3Qtc3RhdHVzLmM6Mjk0Cittc2dpZCAiZGVsZXRlZDoiCittc2dzdHIgImdlbMO2c2NodDoiCisKKyM6IHd0LXN0YXR1cy5jOjI5NgorbXNnaWQgIm1vZGlmaWVkOiIKK21zZ3N0ciAiZ2XDpG5kZXJ0OiIKKworIzogd3Qtc3RhdHVzLmM6Mjk4Cittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgInVtYmVuYW5udDoiCisKKyM6IHd0LXN0YXR1cy5jOjMwMAorbXNnaWQgInR5cGVjaGFuZ2U6IgorbXNnc3RyICJUeXDDpG5kZXJ1bmc6IgorCisjOiB3dC1zdGF0dXMuYzozMDIKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAidW5iZWthbm50OiIKKworIzogd3Qtc3RhdHVzLmM6MzA0Cittc2dpZCAidW5tZXJnZWQ6IgorbXNnc3RyICJuaWNodCBnZW1lcmdlZDoiCisKKyM6IHd0LXN0YXR1cy5jOjM4NAorbXNnaWQgIm5ldyBjb21taXRzLCAiCittc2dzdHIgIm5ldWUgQ29tbWl0cywgIgorCisjOiB3dC1zdGF0dXMuYzozODYKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgImdlw6RuZGVydGVyIEluaGFsdCwgIgorCisjOiB3dC1zdGF0dXMuYzozODgKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICJ1bnZlcnNpb25pZXJ0ZXIgSW5oYWx0LCAiCisKKyM6IHd0LXN0YXR1cy5jOjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cnkiCittc2dpZF9wbHVyYWwgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyaWVzIgorbXNnc3RyWzBdICJJaHIgU3Rhc2ggaGF0IGdlcmFkZSAlZCBFaW50cmFnIgorbXNnc3RyWzFdICJJaHIgU3Rhc2ggaGF0IGdlcmFkZSAlZCBFaW50csOkZ2UiCisKKyM6IHd0LXN0YXR1cy5jOjkzOAorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICJTdWJtb2R1bGUgZ2XDpG5kZXJ0LCBhYmVyIG5pY2h0IGFrdHVhbGlzaWVydDoiCisKKyM6IHd0LXN0YXR1cy5jOjk0MAorbXNnaWQgIlN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIsOEbmRlcnVuZ2VuIGluIFN1Ym1vZHVsIHp1bSBDb21taXR0ZW46IgorCisjOiB3dC1zdGF0dXMuYzoxMDIyCittc2dpZCAiIgorIkRvIG5vdCBtb2RpZnkgb3IgcmVtb3ZlIHRoZSBsaW5lIGFib3ZlLlxuIgorIkV2ZXJ5dGhpbmcgYmVsb3cgaXQgd2lsbCBiZSBpZ25vcmVkLiIKK21zZ3N0ciAiIgorIsOEbmRlcm4gb2RlciBlbnRmZXJuZW4gU2llIG5pY2h0IGRpZSBvYmlnZSBaZWlsZS5cbiIKKyJBbGxlcyB1bnRlcmhhbGIgdm9uIGlociB3aXJkIGlnbm9yaWVydC4iCisKKyM6IHd0LXN0YXR1cy5jOjExMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGNvbXB1dGUgdGhlIGJyYW5jaCBhaGVhZC9iZWhpbmQgdmFsdWVzLlxuIgorIllvdSBjYW4gdXNlICctLW5vLWFoZWFkLWJlaGluZCcgdG8gYXZvaWQgdGhpcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkVzIHd1cmRlbiAlLjJmIFNla3VuZGVuIGJlbsO2dGlndCwgdW0gZGllIHZvcmF1cy9oaW50ZXJoZXItV2VydGUgenUgIgorImJlcmVjaG5lbi5cbiIKKyJTaWUga8O2bm5lbiAnLS1uby1haGVhZC1iZWhpbmQnIGJlbnV0emVuLCB1bSBkYXMgenUgdmVyaGluZGVybi5cbiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NAorbXNnaWQgIllvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLiIKK21zZ3N0ciAiU2llIGhhYmVuIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIFBmYWRlLiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiAgKGJlaGViZW4gU2llIGRpZSBLb25mbGlrdGUgdW5kIGbDvGhyZW4gU2llIFwiZ2l0IGNvbW1pdFwiIGF1cykiCisKKyM6IHd0LXN0YXR1cy5jOjExNDkKK21zZ2lkICIgICh1c2UgXCJnaXQgbWVyZ2UgLS1hYm9ydFwiIHRvIGFib3J0IHRoZSBtZXJnZSkiCittc2dzdHIgIiAgKGJlbnV0emVuIFNpZSBcImdpdCBtZXJnZSAtLWFib3J0XCIsIHVtIGRlbiBNZXJnZSBhYnp1YnJlY2hlbikiCisKKyM6IHd0LXN0YXR1cy5jOjExNTMKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgorbXNnc3RyICJBbGxlIEtvbmZsaWt0ZSBzaW5kIGJlaG9iZW4sIGFiZXIgU2llIHNpbmQgaW1tZXIgbm9jaCBiZWltIE1lcmdlLiIKKworIzogd3Qtc3RhdHVzLmM6MTE1NgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAgKGJlbnV0emVuIFNpZSBcImdpdCBjb21taXRcIiwgdW0gZGVuIE1lcmdlIGFienVzY2hsaWXDn2VuKSIKKworIzogd3Qtc3RhdHVzLmM6MTE2NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAiRWluZSBcImFtXCItU2l0enVuZyBpc3QgaW0gR2FuZ2UuIgorCisjOiB3dC1zdGF0dXMuYzoxMTY4Cittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICJEZXIgYWt0dWVsbGUgUGF0Y2ggaXN0IGxlZXIuIgorCisjOiB3dC1zdGF0dXMuYzoxMTcyCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKGJlaGViZW4gU2llIGRpZSBLb25mbGlrdGUgdW5kIGbDvGhyZW4gU2llIGRhbm4gXCJnaXQgYW0gLS1jb250aW51ZVwiIGF1cykiCisKKyM6IHd0LXN0YXR1cy5jOjExNzQKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoYmVudXR6ZW4gU2llIFwiZ2l0IGFtIC0tc2tpcFwiLCB1bSBkaWVzZW4gUGF0Y2ggYXVzenVsYXNzZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMTc2Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIiCisiICAoYmVudXR6ZW4gU2llIFwiZ2l0IGFtIC0tYWJvcnRcIiwgdW0gZGVuIHVyc3Byw7xuZ2xpY2hlbiBCcmFuY2ggIgorIndpZWRlcmhlcnp1c3RlbGxlbikiCisKKyM6IHd0LXN0YXR1cy5jOjEzMDkKK21zZ2lkICJnaXQtcmViYXNlLXRvZG8gaXMgbWlzc2luZy4iCittc2dzdHIgImdpdC1yZWJhc2UtdG9kbyBmZWhsdC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMTEKK21zZ2lkICJObyBjb21tYW5kcyBkb25lLiIKK21zZ3N0ciAiS2VpbmUgQmVmZWhsZSBhdXNnZWbDvGhydC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGFzdCBjb21tYW5kIGRvbmUgKCVkIGNvbW1hbmQgZG9uZSk6IgorbXNnaWRfcGx1cmFsICJMYXN0IGNvbW1hbmRzIGRvbmUgKCVkIGNvbW1hbmRzIGRvbmUpOiIKK21zZ3N0clswXSAiWnVsZXR6dCBhdXNnZWbDvGhydGVyIEJlZmVobCAoJWQgQmVmZWhsIGF1c2dlZsO8aHJ0KToiCittc2dzdHJbMV0gIlp1bGV0enQgYXVzZ2Vmw7xocnRlIEJlZmVobGUgKCVkIEJlZmVobGUgYXVzZ2Vmw7xocnQpOiIKKworIzogd3Qtc3RhdHVzLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiICAobWVociBJbmZvcm1hdGlvbmVuIGluIERhdGVpICVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTMzMAorbXNnaWQgIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iCittc2dzdHIgIktlaW5lIEJlZmVobGUgdmVyYmxlaWJlbmQuIgorCisjOiB3dC1zdGF0dXMuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5leHQgY29tbWFuZCB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmQpOiIKK21zZ2lkX3BsdXJhbCAiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiCittc2dzdHJbMF0gIk7DpGNoc3RlciBhdXN6dWbDvGhyZW5kZXIgQmVmZWhsICglZCBCZWZlaGxlIHZlcmJsZWliZW5kKToiCittc2dzdHJbMV0gIk7DpGNoc3RlIGF1c3p1ZsO8aHJlbmRlIEJlZmVobGUgKCVkIEJlZmVobGUgdmVyYmxlaWJlbmQpOiIKKworIzogd3Qtc3RhdHVzLmM6MTM0MQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiB0byB2aWV3IGFuZCBlZGl0KSIKK21zZ3N0ciAiICAoYmVudXR6ZW4gU2llIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHp1bSBBbnNlaGVuIHVuZCBCZWFyYmVpdGVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiU2llIHNpbmQgZ2VyYWRlIGJlaW0gUmViYXNlIHZvbiBCcmFuY2ggJyVzJyBhdWYgJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNTgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgIlNpZSBzaW5kIGdlcmFkZSBiZWltIFJlYmFzZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNzEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKGJlaGViZW4gU2llIGRpZSBLb25mbGlrdGUgdW5kIGbDvGhyZW4gU2llIGRhbm4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIiAiCisiYXVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTM3MworbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoYmVudXR6ZW4gU2llIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiwgdW0gZGllc2VuIFBhdGNoIGF1c3p1bGFzc2VuKSIKKworIzogd3Qtc3RhdHVzLmM6MTM3NQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiLCB1bSBkZW4gdXJzcHLDvG5nbGljaGVuIEJyYW5jaCAiCisiYXVzenVjaGVja2VuKSIKKworIzogd3Qtc3RhdHVzLmM6MTM4MgorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoYWxsZSBLb25mbGlrdGUgYmVob2JlbjogZsO8aHJlbiBTaWUgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBhdXMpIgorCisjOiB3dC1zdGF0dXMuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJTaWUgdGVpbGVuIGdlcmFkZSBlaW5lbiBDb21taXQgYXVmLCB3w6RocmVuZCBlaW4gUmViYXNlIHZvbiBCcmFuY2ggJyVzJyBhdWYgIgorIiclcycgaW0gR2FuZ2UgaXN0LiIKKworIzogd3Qtc3RhdHVzLmM6MTM5MQorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICJTaWUgdGVpbGVuIGdlcmFkZSBlaW5lbiBDb21taXQgd8OkaHJlbmQgZWluZXMgUmViYXNlIGF1Zi4iCisKKyM6IHd0LXN0YXR1cy5jOjEzOTQKK21zZ2lkICIgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKFNvYmFsZCBJaHIgQXJiZWl0c3ZlcnplaWNobmlzIHVudmVyw6RuZGVydCBpc3QsIGbDvGhyZW4gU2llIFwiZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZVwiIGF1cykiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIlNpZSBlZGl0aWVyZW4gZ2VyYWRlIGVpbmVuIENvbW1pdCB3w6RocmVuZCBlaW5lcyBSZWJhc2Ugdm9uIEJyYW5jaCAnJXMnIGF1ZiAiCisiJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIlNpZSBlZGl0aWVyZW4gZ2VyYWRlIGVpbmVuIENvbW1pdCB3w6RocmVuZCBlaW5lcyBSZWJhc2UuIgorCisjOiB3dC1zdGF0dXMuYzoxNDA2Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBjb21taXQgLS1hbWVuZFwiLCB1bSBkZW4gYWt0dWVsbGVuIENvbW1pdCAiCisibmFjaHp1YmVzc2VybikiCisKKyM6IHd0LXN0YXR1cy5jOjE0MDgKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBzb2JhbGQgSWhyZSDDhG5kZXJ1bmdlbiAiCisiYWJnZXNjaGxvc3NlbiBzaW5kKSIKKworIzogd3Qtc3RhdHVzLmM6MTQxOQorbXNnaWQgIkNoZXJyeS1waWNrIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4iCittc2dzdHIgIkNoZXJyeS1waWNrIHp1cnplaXQgaW0gR2FuZ2UuIgorCisjOiB3dC1zdGF0dXMuYzoxNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIlNpZSBmw7xocmVuIGdlcmFkZSBcImNoZXJyeS1waWNrXCIgdm9uIENvbW1pdCAlcyBhdXMuIgorCisjOiB3dC1zdGF0dXMuYzoxNDI5Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChiZWhlYmVuIFNpZSBkaWUgS29uZmxpa3RlIHVuZCBmw7xocmVuIFNpZSBkYW5uIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUiCisiXCIgYXVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzMgorbXNnaWQgIiAgKHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIChGw7xocmVuIFNpZSBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgYXVzLCB1bSB3ZWl0ZXJ6dW1hY2hlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzUKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKGFsbGUgS29uZmxpa3RlIGJlaG9iZW46IGbDvGhyZW4gU2llIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiBhdXMpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM3Cittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCIsIHVtIGRpZXNlbiBQYXRjaCBhdXN6dWxhc3NlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzkKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIsIHVtIGRpZSBDaGVycnktUGljay1PcGVyYXRpb24gIgorImFienVicmVjaGVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ0OQorbXNnaWQgIlJldmVydCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICJSZXZlcnQgenVyemVpdCBpbSBHYW5nZS4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIlNpZSBzaW5kIGdlcmFkZSBiZWltIFJldmVydCB2b24gQ29tbWl0ICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxNDU4Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAoYmVoZWJlbiBTaWUgZGllIEtvbmZsaWt0ZSB1bmQgZsO8aHJlbiBTaWUgZGFubiBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiICIKKyJhdXMpIgorCisjOiB3dC1zdGF0dXMuYzoxNDYxCittc2dpZCAiICAocnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIChGw7xocmVuIFNpZSBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiLCB1bSB3ZWl0ZXJ6dW1hY2hlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjQKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKGFsbGUgS29uZmxpa3RlIGJlaG9iZW46IGbDvGhyZW4gU2llIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgYXVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2NgorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoYmVudXR6ZW4gU2llIFwiZ2l0IHJldmVydCAtLXNraXBcIiwgdW0gZGllc2VuIFBhdGNoIGF1c3p1bGFzc2VuKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2OAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiwgdW0gZGllIFJldmVydC1PcGVyYXRpb24gYWJ6dWJyZWNoZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiU2llIHNpbmQgZ2VyYWRlIGJlaSBlaW5lciBiaW7DpHJlbiBTdWNoZSwgZ2VzdGFydGV0IHZvbiBCcmFuY2ggJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0ODIKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICJTaWUgc2luZCBnZXJhZGUgYmVpIGVpbmVyIGJpbsOkcmVuIFN1Y2hlLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4NQorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBiaXNlY3QgcmVzZXRcIiwgdW0genVtIHVyc3Byw7xuZ2xpY2hlbiBCcmFuY2ggIgorInp1csO8Y2t6dWtlaHJlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE2OTQKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICJBdWYgQnJhbmNoICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMQorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgImludGVyYWt0aXZlcyBSZWJhc2UgaW0gR2FuZ2U7IGF1ZiAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDMKK21zZ2lkICJyZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICJSZWJhc2UgaW0gR2FuZ2U7IGF1ZiAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MTMKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICJJbSBNb21lbnQgYXVmIGtlaW5lbSBCcmFuY2guIgorCisjOiB3dC1zdGF0dXMuYzoxNzMwCittc2dpZCAiSW5pdGlhbCBjb21taXQiCittc2dzdHIgIkluaXRpYWxlciBDb21taXQiCisKKyM6IHd0LXN0YXR1cy5jOjE3MzEKK21zZ2lkICJObyBjb21taXRzIHlldCIKK21zZ3N0ciAiTm9jaCBrZWluZSBDb21taXRzIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ1Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJVbnZlcnNpb25pZXJ0ZSBEYXRlaWVuIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ3Cittc2dpZCAiSWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiSWdub3JpZXJ0ZSBEYXRlaWVuIgorCisjOiB3dC1zdGF0dXMuYzoxNzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW50cmFja2VkIGZpbGVzLiAnc3RhdHVzIC11bm8nXG4iCisibWF5IHNwZWVkIGl0IHVwLCBidXQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZm9yZ2V0IHRvIGFkZFxuIgorIm5ldyBmaWxlcyB5b3Vyc2VsZiAoc2VlICdnaXQgaGVscCBzdGF0dXMnKS4iCittc2dzdHIgIiIKKyJFcyBkYXVlcnRlICUuMmYgU2VrdW5kZW4gZGllIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIHp1IGJlc3RpbW1lbi5cbiIKKyInc3RhdHVzIC11bm8nIGvDtm5udGUgZGFzIGJlc2NobGV1bmlnZW4sIGFiZXIgU2llIG3DvHNzZW4gZGFyYXVmIGFjaHRlbixcbiIKKyJuZXVlIERhdGVpZW4gc2VsYnN0c3TDpG5kaWcgaGluenV6dWbDvGdlbiAoc2llaGUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKKworIzogd3Qtc3RhdHVzLmM6MTc1NworIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICJVbnZlcnNpb25pZXJ0ZSBEYXRlaWVuIG5pY2h0IGF1ZmdlbGlzdGV0JXMiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTkKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIgKGJlbnV0emVuIFNpZSBkaWUgT3B0aW9uIC11LCB1bSB1bnZlcnNpb25pZXJ0ZSBEYXRlaWVuIGFuenV6ZWlnZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxNzY1Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiS2VpbmUgw4RuZGVydW5nZW4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIiIKKyJrZWluZSDDhG5kZXJ1bmdlbiB6dW0gQ29tbWl0IHZvcmdlbWVya3QgKGJlbnV0emVuIFNpZSBcImdpdCBhZGRcIiB1bmQvb2RlciAiCisiXCJnaXQgY29tbWl0IC1hXCIpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXRcbiIKK21zZ3N0ciAia2VpbmUgw4RuZGVydW5nZW4genVtIENvbW1pdCB2b3JnZW1lcmt0XG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvICIKKyJ0cmFjaylcbiIKK21zZ3N0ciAiIgorIm5pY2h0cyB6dW0gQ29tbWl0IHZvcmdlbWVya3QsIGFiZXIgZXMgZ2lidCB1bnZlcnNpb25pZXJ0ZSBEYXRlaWVuXG4iCisiKGJlbnV0emVuIFNpZSBcImdpdCBhZGRcIiB6dW0gVmVyc2lvbmllcmVuKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICJuaWNodHMgenVtIENvbW1pdCB2b3JnZW1lcmt0LCBhYmVyIGVzIGdpYnQgdW52ZXJzaW9uaWVydGUgRGF0ZWllblxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0IChjcmVhdGUvY29weSBmaWxlcyBhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIgorbXNnc3RyICIiCisibmljaHRzIHp1IGNvbW1pdHRlbiAoZXJzdGVsbGVuL2tvcGllcmVuIFNpZSBEYXRlaWVuIHVuZCBiZW51dHplblxuIgorIlNpZSBcImdpdCBhZGRcIiB6dW0gVmVyc2lvbmllcmVuKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzg1IHd0LXN0YXR1cy5jOjE3OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXRcbiIKK21zZ3N0ciAibmljaHRzIHp1IGNvbW1pdHRlblxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpXG4iCittc2dzdHIgIiIKKyJuaWNodHMgenUgY29tbWl0dGVuIChiZW51dHplbiBTaWUgZGllIE9wdGlvbiAtdSwgdW0gdW52ZXJzaW9uaWVydGUgRGF0ZWllbiAiCisiYW56dXplaWdlbilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuXG4iCittc2dzdHIgIm5pY2h0cyB6dSBjb21taXR0ZW4sIEFyYmVpdHN2ZXJ6ZWljaG5pcyB1bnZlcsOkbmRlcnRcbiIKKworIzogd3Qtc3RhdHVzLmM6MTkwNQorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IG9uICIKK21zZ3N0ciAiTm9jaCBrZWluZSBDb21taXRzIGluICIKKworIzogd3Qtc3RhdHVzLmM6MTkwOQorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUQgKGtlaW4gQnJhbmNoKSIKKworIzogd3Qtc3RhdHVzLmM6MTk0MAorbXNnaWQgImRpZmZlcmVudCIKK21zZ3N0ciAidW50ZXJzY2hpZWRsaWNoIgorCisjOiB3dC1zdGF0dXMuYzoxOTQyIHd0LXN0YXR1cy5jOjE5NTAKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICJoaW50ZXJoZXIgIgorCisjOiB3dC1zdGF0dXMuYzoxOTQ1IHd0LXN0YXR1cy5jOjE5NDgKK21zZ2lkICJhaGVhZCAiCittc2dzdHIgInZvcmF1cyAiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgYWN0aW9uIGlzIGUuZy4gInB1bGwgd2l0aCByZWJhc2UiCisjOiB3dC1zdGF0dXMuYzoyNDcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyIlcyBuaWNodCBtw7ZnbGljaDogU2llIGhhYmVuIMOEbmRlcnVuZ2VuLCBkaWUgbmljaHQgenVtIENvbW1pdCB2b3JnZW1lcmt0IHNpbmQuIgorCisjOiB3dC1zdGF0dXMuYzoyNDc2Cittc2dpZCAiYWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICJadXPDpHR6bGljaCBlbnRow6RsdCBkaWUgU3RhZ2luZy1BcmVhIG5pY2h0IGNvbW1pdHRldGUgw4RuZGVydW5nZW4uIgorCisjOiB3dC1zdGF0dXMuYzoyNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIiVzIG5pY2h0IG3DtmdsaWNoOiBEaWUgU3RhZ2luZy1BcmVhIGVudGjDpGx0IG5pY2h0IGNvbW1pdHRldGUgw4RuZGVydW5nZW4uIgorCisjOiBjb21wYXQvcHJlY29tcG9zZV91dGY4LmM6NTggYnVpbHRpbi9jbG9uZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGVudGZlcm5lbi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbPE9wdGlvbmVuPl0gWy0tXSA8UGZhZHNwZXppZmlrYXRpb24+Li4uIgorCisjOiBidWlsdGluL2FkZC5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgInVuZXJ3YXJ0ZXRlciBEaWZmZXJlbnotU3RhdHVzICVjIgorCisjOiBidWlsdGluL2FkZC5jOjkzIGJ1aWx0aW4vY29tbWl0LmM6Mjg4Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJBa3R1YWxpc2llcnVuZyBkZXIgRGF0ZWllbiBmZWhsZ2VzY2hsYWdlbiIKKworIzogYnVpbHRpbi9hZGQuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAibMO2c2NoZSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc4Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIiIKKyJOaWNodCB6dW0gQ29tbWl0IHZvcmdlbWVya3RlIMOEbmRlcnVuZ2VuIG5hY2ggQWt0dWFsaXNpZXJ1bmcgZGVyIFN0YWdpbmctQXJlYToiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY2IGJ1aWx0aW4vcmV2LXBhcnNlLmM6ODk5Cittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJLb25udGUgZGVuIEluZGV4IG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2FkZC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgenVtIFNjaHJlaWJlbiDDtmZmbmVuLiIKKworIzogYnVpbHRpbi9hZGQuYzoyODEKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giCittc2dzdHIgIktvbm50ZSBQYXRjaCBuaWNodCBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg0Cittc2dpZCAiZWRpdGluZyBwYXRjaCBmYWlsZWQiCittc2dzdHIgIkJlYXJiZWl0dW5nIGRlcyBQYXRjaGVzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL2FkZC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJLb25udGUgVmVyemVpY2huaXMgJyVzJyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9hZGQuYzoyODkKK21zZ2lkICJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iCittc2dzdHIgIkxlZXJlciBQYXRjaC4gQWJnZWJyb2NoZW4uIgorCisjOiBidWlsdGluL2FkZC5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgYW53ZW5kZW4uIgorCisjOiBidWlsdGluL2FkZC5jOjMwMgorbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAiIgorIkRpZSBmb2xnZW5kZW4gUGZhZGUgd2VyZGVuIGR1cmNoIGVpbmUgSWhyZXIgXCIuZ2l0aWdub3JlXCIgRGF0ZWllbiAiCisiaWdub3JpZXJ0OlxuIgorCisjOiBidWlsdGluL2FkZC5jOjMyMiBidWlsdGluL2NsZWFuLmM6OTEwIGJ1aWx0aW4vZmV0Y2guYzoxNjMgYnVpbHRpbi9tdi5jOjEyNAorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NiBidWlsdGluL3B1bGwuYzoyMDMgYnVpbHRpbi9wdXNoLmM6NTQ4CisjOiBidWlsdGluL3JlbW90ZS5jOjE0MjEgYnVpbHRpbi9ybS5jOjI0MiBidWlsdGluL3NlbmQtcGFjay5jOjE2NQorbXNnaWQgImRyeSBydW4iCittc2dzdHIgIlByb2JlbGF1ZiIKKworIzogYnVpbHRpbi9hZGQuYzozMjUKK21zZ2lkICJpbnRlcmFjdGl2ZSBwaWNraW5nIgorbXNnc3RyICJpbnRlcmFrdGl2ZXMgQXVzd8OkaGxlbiIKKworIzogYnVpbHRpbi9hZGQuYzozMjYgYnVpbHRpbi9jaGVja291dC5jOjE1MTEgYnVpbHRpbi9yZXNldC5jOjMwNworbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJCbMO2Y2tlIGludGVyYWt0aXYgYXVzd8OkaGxlbiIKKworIzogYnVpbHRpbi9hZGQuYzozMjcKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgImFrdHVlbGxlIFVudGVyc2NoaWVkZSBlZGl0aWVyZW4gdW5kIGFud2VuZGVuIgorCisjOiBidWlsdGluL2FkZC5jOjMyOAorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiZGFzIEhpbnp1ZsO8Z2VuIGFuZGVybmZhbGxzIGlnbm9yaWVydGVyIERhdGVpZW4gZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI5Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgInZlcnNpb25pZXJ0ZSBEYXRlaWVuIGFrdHVhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMwCittc2dpZCAicmVub3JtYWxpemUgRU9MIG9mIHRyYWNrZWQgZmlsZXMgKGltcGxpZXMgLXUpIgorbXNnc3RyICIiCisiZXJuZXV0ZXMgTm9ybWFsaXNpZXJlbiBkZXIgWmVpbGVuZW5kZW4gdm9uIHZlcnNpb25pZXJ0ZW4gRGF0ZWllbiAoaW1wbGl6aWVydCAiCisiLXUpIgorCisjOiBidWlsdGluL2FkZC5jOjMzMQorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAibnVyIHNwZWljaGVybiwgZGFzcyBkZXIgUGZhZCBzcMOkdGVyIGhpbnp1Z2Vmw7xndCB3ZXJkZW4gc29sbCIKKworIzogYnVpbHRpbi9hZGQuYzozMzIKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIiIKKyLDhG5kZXJ1bmdlbiB2b24gYWxsZW4gdmVyc2lvbmllcnRlbiB1bmQgdW52ZXJzaW9uaWVydGVuIERhdGVpZW4gaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM1Cittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgImdlbMO2c2NodGUgUGZhZGUgaW0gQXJiZWl0c3ZlcnplaWNobmlzIGlnbm9yaWVyZW4gKGdlbmF1IHdpZSAtLW5vLWFsbCkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM3Cittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJuaWNodHMgaGluenVmw7xnZW4sIG51ciBkZW4gSW5kZXggYWt0dWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi9hZGQuYzozMzgKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICIiCisiRGF0ZWllbiDDvGJlcnNwcmluZ2VuLCBkaWUgYXVmZ3J1bmQgdm9uIEZlaGxlcm4gbmljaHQgaGluenVnZWbDvGd0IHdlcmRlbiAiCisia29ubnRlbiIKKworIzogYnVpbHRpbi9hZGQuYzozMzkKK21zZ2lkICJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iCittc2dzdHIgInByw7xmZW4gb2IgLSBhdWNoIGZlaGxlbmRlIC0gRGF0ZWllbiBpbSBQcm9iZWxhdWYgaWdub3JpZXJ0IHdlcmRlbiIKKworIzogYnVpbHRpbi9hZGQuYzozNDEgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA0Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgImRhcyBcImF1c2bDvGhyYmFyXCItQml0IGRlciBhdWZnZWxpc3RldGVuIERhdGVpZW4gw7xiZXJzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQzCittc2dpZCAid2FybiB3aGVuIGFkZGluZyBhbiBlbWJlZGRlZCByZXBvc2l0b3J5IgorbXNnc3RyICJ3YXJuZW4gd2VubiBlaW5nZWJldHRldGVzIFJlcG9zaXRvcnkgaGluenVnZWbDvGd0IHdpcmQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQ1Cittc2dpZCAiYmFja2VuZCBmb3IgYGdpdCBzdGFzaCAtcGAiCittc2dzdHIgIkJhY2tlbmQgZsO8ciBgZ2l0IHN0YXNoIC1wYCIKKworIzogYnVpbHRpbi9hZGQuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSd2ZSBhZGRlZCBhbm90aGVyIGdpdCByZXBvc2l0b3J5IGluc2lkZSB5b3VyIGN1cnJlbnQgcmVwb3NpdG9yeS5cbiIKKyJDbG9uZXMgb2YgdGhlIG91dGVyIHJlcG9zaXRvcnkgd2lsbCBub3QgY29udGFpbiB0aGUgY29udGVudHMgb2ZcbiIKKyJ0aGUgZW1iZWRkZWQgcmVwb3NpdG9yeSBhbmQgd2lsbCBub3Qga25vdyBob3cgdG8gb2J0YWluIGl0LlxuIgorIklmIHlvdSBtZWFudCB0byBhZGQgYSBzdWJtb2R1bGUsIHVzZTpcbiIKKyJcbiIKKyJcdGdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisiSWYgeW91IGFkZGVkIHRoaXMgcGF0aCBieSBtaXN0YWtlLCB5b3UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZVxuIgorImluZGV4IHdpdGg6XG4iCisiXG4iCisiXHRnaXQgcm0gLS1jYWNoZWQgJXNcbiIKKyJcbiIKKyJTZWUgXCJnaXQgaGVscCBzdWJtb2R1bGVcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJTaWUgaGFiZW4gZWluIEdpdC1SZXBvc2l0b3J5IGlubmVyaGFsYiBpaHJlcyBha3R1ZWxsZW4gUmVwb3NpdG9yaWVzICIKKyJoaW56dWdlZsO8Z3QuXG4iCisiS2xvbmUgZGVzIMOkdcOfZXJlbiBSZXBvc2l0b3JpZXMgd2VyZGVuIGRpZSBJbmhhbHRlIGRlcyBlaW5nZWJldHRldGVuICIKKyJSZXBvc2l0b3JpZXNcbiIKKyJ3ZWRlciBlbnRoYWx0ZW4sIG5vY2ggd2lzc2VuLCB3aWUgZGllc2UgenUgYmVzY2hhZmZlbiBzaW5kLlxuIgorIldlbm4gU2llIGVpbiBTdWJtb2R1bCBoaW56dWbDvGdlbiB3b2xsdGVuLCBiZW51dHplbiBTaWU6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8VVJMPiAlc1xuIgorIlxuIgorIldlbm4gU2llIGRpZXNlbiBQZmFkIGF1cyBWZXJzZWhlbiBoaW56dWdlZsO8Z3QgaGFiZW4sIGvDtm5uZW4gU2llIGRpZXNlbiBtaXRcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorInZvbSBJbmRleCBlbnRmZXJuZW4uXG4iCisiXG4iCisiU2llaGUgXCJnaXQgaGVscCBzdWJtb2R1bGVcIiBmw7xyIHdlaXRlcmUgSW5mb3JtYXRpb25lbi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZyBlbWJlZGRlZCBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIkbDvGdlIGVpbmdlYmV0dGV0ZXMgUmVwb3NpdG9yeSBoaW56dTogJXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDEwCittc2dpZCAiIgorIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZElnbm9yZWRGaWxlIGZhbHNlXCIiCittc2dzdHIgIiIKKyJOdXR6ZW4gU2llIGRpZSBPcHRpb24gLWYsIHdlbm4gc2llIHdpcmtsaWNoIGhpbnp1Z2Vmw7xndCB3ZXJkZW4gc29sbGVuLlxuIgorIlVtIGRpZXNlIE1lbGR1bmcgYWJ6dXNjaGFsdGVuLCBmw7xocmVuIFNpZSBmb2xnZW5kZW4gQmVmZWhsIGF1czpcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZElnbm9yZWRGaWxlIGZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDE5Cittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiSGluenVmw7xnZW4gdm9uIERhdGVpZW4gZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ3IGJ1aWx0aW4vY29tbWl0LmM6MzQ4Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorbXNnc3RyICIiCisiRGllIE9wdGlvbmVuIC0tcGF0aHNwZWMtZnJvbS1maWxlIHVuZCAtLWludGVyYWN0aXZlLy0tcGF0Y2ggc2luZCAiCisiaW5rb21wYXRpYmVsLiIKKworIzogYnVpbHRpbi9hZGQuYzo0NjQKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWVkaXQiCittc2dzdHIgIkRpZSBPcHRpb25lbiAtLXBhdGhzcGVjLWZyb20tZmlsZSB1bmQgLS1lZGl0IHNpbmQgaW5rb21wYXRpYmVsLiIKKworIzogYnVpbHRpbi9hZGQuYzo0NzYKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC1BIHVuZCAtdSBzaW5kIHp1ZWluYW5kZXIgaW5rb21wYXRpYmVsLiIKKworIzogYnVpbHRpbi9hZGQuYzo0NzkKK21zZ2lkICJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIgorbXNnc3RyICIiCisiRGllIE9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGthbm4gbnVyIHp1c2FtbWVuIG1pdCAtLWRyeS1ydW4gdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tY2htb2QgcGFyYW0gJyVzJyBtdXN0IGJlIGVpdGhlciAteCBvciAreCIKK21zZ3N0ciAiLS1jaG1vZCBQYXJhbWV0ZXIgJyVzJyBtdXNzIGVudHdlZGVyIC14IG9kZXIgK3ggc2VpbiIKKworIzogYnVpbHRpbi9hZGQuYzo1MDEgYnVpbHRpbi9jaGVja291dC5jOjE2NzUgYnVpbHRpbi9jb21taXQuYzozNTQKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjcgYnVpbHRpbi9ybS5jOjI3MiBidWlsdGluL3N0YXNoLmM6MTUwOQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb24gLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXN0IGlua29tcGF0aWJlbCBtaXRcbiIKKyJQZmFkc3BlemlmaWthdGlvbi1Bcmd1bWVudGVuLiIKKworIzogYnVpbHRpbi9hZGQuYzo1MDggYnVpbHRpbi9jaGVja291dC5jOjE2ODcgYnVpbHRpbi9jb21taXQuYzozNjAKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzMgYnVpbHRpbi9ybS5jOjI3OCBidWlsdGluL3N0YXNoLmM6MTUxNQorbXNnaWQgIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWlyZXMgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCittc2dzdHIgIkRpZSBPcHRpb24gLS1wYXRoc3BlYy1maWxlLW51bCBiZW7DtnRpZ3QgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICJOaWNodHMgc3BlemlmaXppZXJ0LCBuaWNodHMgaGluenVnZWbDvGd0LlxuIgorCisjOiBidWlsdGluL2FkZC5jOjUxNAorbXNnaWQgIiIKKyJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKKyJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkRW1wdHlQYXRoc3BlYyBmYWxzZVwiIgorbXNnc3RyICIiCisiRXZlbnR1ZWxsIG1laW50ZW4gU2llICdnaXQgYWRkIC4nP1xuIgorIlVtIGRpZXNlIE1lbGR1bmcgYWJ6dXNjaGFsdGVuLCBmw7xocmVuIFNpZSBmb2xnZW5kZW4gQmVmZWhsIGF1czpcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZEVtcHR5UGF0aHNwZWMgZmFsc2VcIiIKKworIzogYnVpbHRpbi9hbS5jOjM1MgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBhdXRob3Igc2NyaXB0IgorbXNnc3RyICJrb25udGUgQXV0b3ItU2tyaXB0IG5pY2h0IHBhcnNlbiIKKworIzogYnVpbHRpbi9hbS5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICInJXMnIHd1cmRlIGR1cmNoIGRlbiBhcHBseXBhdGNoLW1zZyBIb29rIGVudGZlcm50IgorCisjOiBidWlsdGluL2FtLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiRmVobGVyaGFmdGUgRWluZ2FiZXplaWxlOiAnJXMnLiIKKworIzogYnVpbHRpbi9hbS5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gS29waWVyZW4gZGVyIE5vdGl6ZW4gdm9uICclcycgbmFjaCAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6NTQyCittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICJcImZzZWVrXCIgZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhdGNoICclcyciCittc2dzdHIgImtvbm50ZSBQYXRjaCAnJXMnIG5pY2h0IHBhcnNlbiIKKworIzogYnVpbHRpbi9hbS5jOjc5NQorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICJFcyBrYW5uIG51ciBlaW5lIFN0R0lUIFBhdGNoLVNlcmllIGF1ZiBlaW5tYWwgYW5nZXdlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2FtLmM6ODQzCittc2dpZCAiaW52YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgInVuZ8O8bHRpZ2VyIFplaXRzdGVtcGVsIgorCisjOiBidWlsdGluL2FtLmM6ODQ4IGJ1aWx0aW4vYW0uYzo4NjAKK21zZ2lkICJpbnZhbGlkIERhdGUgbGluZSIKK21zZ3N0ciAiVW5nw7xsdGlnZSBcIkRhdGVcIi1aZWlsZSIKKworIzogYnVpbHRpbi9hbS5jOjg1NQorbXNnaWQgImludmFsaWQgdGltZXpvbmUgb2Zmc2V0IgorbXNnc3RyICJVbmfDvGx0aWdlciBPZmZzZXQgaW4gZGVyIFplaXR6b25lIgorCisjOiBidWlsdGluL2FtLmM6OTQ4Cittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICJQYXRjaC1Gb3JtYXRlcmtlbm51bmcgZmVobGdlc2NobGFnZW4uIgorCisjOiBidWlsdGluL2FtLmM6OTUzIGJ1aWx0aW4vY2xvbmUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIHZvbiBWZXJ6ZWljaG5pcyAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6OTU4Cittc2dpZCAiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdWZ0ZWlsZW4gZGVyIFBhdGNoZXMuIgorCisjOiBidWlsdGluL2FtLmM6MTA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJXMgLS1jb250aW51ZVwiLiIKK21zZ3N0ciAiIgorIldlbm4gU2llIGRhcyBQcm9ibGVtIGF1ZmdlbMO2c3QgaGFiZW4sIGbDvGhyZW4gU2llIFwiJXMgLS1jb250aW51ZVwiIGF1cy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIlcyAtLXNraXBcIiBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIkZhbGxzIFNpZSBkaWVzZW4gUGF0Y2ggYXVzbGFzc2VuIG3DtmNodGVuLCBmw7xocmVuIFNpZSBzdGF0dGRlc3NlbiBcIiVzIC0tc2tpcCIKKyJcIiBhdXMuIgorCisjOiBidWlsdGluL2FtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iCittc2dzdHIgIiIKKyJVbSBkZW4gdXJzcHLDvG5nbGljaGVuIEJyYW5jaCB3aWVkZXJoZXJ6dXN0ZWxsZW4gdW5kIGRpZSBBbndlbmR1bmcgZGVyICIKKyJQYXRjaGVzIGFienVicmVjaGVuLCBmw7xocmVuIFNpZSBcIiVzIC0tYWJvcnRcIiBhdXMuIgorCisjOiBidWlsdGluL2FtLmM6MTE3NAorbXNnaWQgIlBhdGNoIHNlbnQgd2l0aCBmb3JtYXQ9Zmxvd2VkOyBzcGFjZSBhdCB0aGUgZW5kIG9mIGxpbmVzIG1pZ2h0IGJlIGxvc3QuIgorbXNnc3RyICIiCisiUGF0Y2ggbWl0IGZvcm1hdD1mbG93ZWQgdmVyc2VuZGV0OyBMZWVyemVpY2hlbiBhbSBFbmRlIHZvbiBaZWlsZW4ga8O2bm50ZSAiCisidmVybG9yZW4gZ2VoZW4uIgorCisjOiBidWlsdGluL2FtLmM6MTIwMgorbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiUGF0Y2ggaXN0IGxlZXIuIgorCisjOiBidWlsdGluL2FtLmM6MTI2NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGF1dGhvciBsaW5lIGluIGNvbW1pdCAlcyIKK21zZ3N0ciAiQXV0b3ItWmVpbGUgZmVobHQgaW4gQ29tbWl0ICVzIgorCisjOiBidWlsdGluL2FtLmM6MTI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICUuKnMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgSWRlbnRpZmlrYXRpb25zemVpbGU6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDg5Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorIkRlbSBSZXBvc2l0b3J5IGZlaGxlbiBub3R3ZW5kaWdlIEJsb2JzIHVtIGF1ZiBlaW5lbiAzLVdlZ2UtTWVyZ2UgIgorInp1csO8Y2t6dWZhbGxlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDkxCittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAiIgorIlZlcndlbmRlIEluZm9ybWF0aW9uZW4gYXVzIGRlciBTdGFnaW5nLUFyZWEsIHVtIGVpbiBCYXNpc3ZlcnplaWNobmlzICIKKyJuYWNoenVzdGVsbGVuIC4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE1MTAKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisiSGFiZW4gU2llIGRlbiBQYXRjaCBwZXIgSGFuZCBlZGl0aWVydD9cbiIKKyJFciBrYW5uIG5pY2h0IGF1ZiBkaWUgQmxvYnMgaW4gc2VpbmVyICdpbmRleCcgWmVpbGUgYW5nZXdlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2FtLmM6MTUxNgorbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAiRmFsbGUgenVyw7xjayB6dW0gUGF0Y2hlbiBkZXIgQmFzaXMgdW5kIHp1bSAzLVdlZ2UtTWVyZ2UgLi4uIgorCisjOiBidWlsdGluL2FtLmM6MTU0MgorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iCittc2dzdHIgIk1lcmdlIGRlciDDhG5kZXJ1bmdlbiBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTc0Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAiYXVmIGxlZXJlIEhpc3RvcmllIGFud2VuZGVuIgorCisjOiBidWlsdGluL2FtLmM6MTYyMSBidWlsdGluL2FtLmM6MTYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIkthbm4gbmljaHQgZm9ydHNldHplbjogJXMgZXhpc3RpZXJ0IG5pY2h0IgorCisjOiBidWlsdGluL2FtLmM6MTY0MworbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAiQ29tbWl0LUJlc2NocmVpYnVuZyBpc3Q6IgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2FtLmM6MTY1MworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorbXNnc3RyICJBbndlbmRlbj8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorCisjOiBidWlsdGluL2FtLmM6MTcwMCBidWlsdGluL2NvbW1pdC5jOjM5OAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgSW5kZXgtRGF0ZWkgbmljaHQgc2NocmVpYmVuLiIKKworIzogYnVpbHRpbi9hbS5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJXMpIgorbXNnc3RyICJHZcOkbmRlcnRlciBJbmRleDoga2FubiBQYXRjaGVzIG5pY2h0IGFud2VuZGVuIChnZcOkbmRlcnQ6ICVzKSIKKworIzogYnVpbHRpbi9hbS5jOjE3NDQgYnVpbHRpbi9hbS5jOjE4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICUuKnMiCittc2dzdHIgIldlbmRlIGFuOiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc2MQorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAiS2VpbmUgw4RuZGVydW5nZW4gLS0gUGF0Y2hlcyBiZXJlaXRzIGFuZ2V3ZW5kZXQuIgorCisjOiBidWlsdGluL2FtLmM6MTc2NworIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAiQW53ZW5kdW5nIGRlcyBQYXRjaGVzIGZlaGxnZXNjaGxhZ2VuIGJlaSAlcyAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc3MQorbXNnaWQgIlVzZSAnZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoPWRpZmYnIHRvIHNlZSB0aGUgZmFpbGVkIHBhdGNoIgorbXNnc3RyICIiCisiQmVudXR6ZW4gU2llICdnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2g9ZGlmZicsIHVtIGRlblxuIgorImZlaGxnZXNjaGxhZ2VuZW4gUGF0Y2ggenUgc2VoZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODE1Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisiS2VpbmUgw4RuZGVydW5nZW4gLSBoYWJlbiBTaWUgdmVyZ2Vzc2VuICdnaXQgYWRkJyB6dSBiZW51dHplbj9cbiIKKyJXZW5uIGtlaW5lIMOEbmRlcnVuZ2VuIG1laHIgenVtIENvbW1pdCB2b3J6dW1lcmtlbiBzaW5kLCBrw7ZubnRlblxuIgorImRpZXNlIGJlcmVpdHMgYW5kZXJ3ZWl0aWcgZWluZ2Vmw7xndCB3b3JkZW4gc2VpbjsgU2llIGvDtm5udGVuIGRpZXNlbiBQYXRjaFxuIgorImF1c2xhc3Nlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODIyCittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisiWW91IHNob3VsZCAnZ2l0IGFkZCcgZWFjaCBmaWxlIHdpdGggcmVzb2x2ZWQgY29uZmxpY3RzIHRvIG1hcmsgdGhlbSBhcyAiCisic3VjaC5cbiIKKyJZb3UgbWlnaHQgcnVuIGBnaXQgcm1gIG9uIGEgZmlsZSB0byBhY2NlcHQgXCJkZWxldGVkIGJ5IHRoZW1cIiBmb3IgaXQuIgorbXNnc3RyICIiCisiU2llIGhhYmVuIG5vY2ggaW1tZXIgbmljaHQgenVzYW1tZW5nZWbDvGhydGUgUGZhZGUgaW4gSWhyZW0gSW5kZXguXG4iCisiU2llIHNvbGx0ZW4gJ2dpdCBhZGQnIGbDvHIgamVkZSBEYXRlaSBtaXQgYXVmZ2Vsw7ZzdGVuIEtvbmZsaWt0ZW4gYXVzZsO8aHJlbixcbiIKKyJ1bSBkaWVzZSBhbHMgc29sY2hlIHp1IG1hcmtpZXJlbi5cbiIKKyJTaWUga8O2bm5lbiAnZ2l0IHJtJyBhdWYgRGF0ZWllbiBhdXNmw7xocmVuLCB1bSBcInZvbiBkZW5lbiBnZWzDtnNjaHRcIiBmw7xyXG4iCisiZGllc2UgenUgYWt6ZXB0aWVyZW4uIgorCisjOiBidWlsdGluL2FtLmM6MTkyOSBidWlsdGluL2FtLmM6MTkzMyBidWlsdGluL2FtLmM6MTk0NSBidWlsdGluL3Jlc2V0LmM6MzQ2CisjOiBidWlsdGluL3Jlc2V0LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIktvbm50ZSBPYmpla3QgJyVzJyBuaWNodCBwYXJzZW4uIgorCisjOiBidWlsdGluL2FtLmM6MTk4MQorbXNnaWQgImZhaWxlZCB0byBjbGVhbiBpbmRleCIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQmVyZWluaWdlbiBkZXMgSW5kZXgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMDI1Cittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKyJTaWUgc2NoZWluZW4gc2VpdCBkZW0gbGV0enRlbiBnZXNjaGVpdGVydGVuICdhbScgSEVBRCBnZcOkbmRlcnQgenUgaGFiZW4uXG4iCisiS2VpbmUgWnVyw7xja3NldHp1bmcgenUgT1JJR19IRUFELiIKKworIzogYnVpbHRpbi9hbS5jOjIxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBXZXJ0IGbDvHIgLS1wYXRjaC1mb3JtYXQ6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXNob3ctY3VycmVudC1wYXRjaDogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFdlcnQgZsO8ciAtLXNob3ctY3VycmVudC1wYXRjaDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2hvdy1jdXJyZW50LXBhdGNoPSVzIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tc2hvdy1jdXJyZW50LXBhdGNoPSVzIgorbXNnc3RyICIiCisiLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMgaXN0IGlua29tYmF0aWJlbCBtaXQgLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA3Cittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCittc2dzdHIgImdpdCBhbSBbPE9wdGlvbmVuPl0gWyg8bWJveD4gfCA8RS1NYWlsLVZlcnplaWNobmlzPikuLi5dIgorCisjOiBidWlsdGluL2FtLmM6MjIwOAorbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorbXNnc3RyICJnaXQgYW0gWzxPcHRpb25lbj5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE0Cittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgImludGVyYWt0aXYgYXVzZsO8aHJlbiIKKworIzogYnVpbHRpbi9hbS5jOjIyMTYKK21zZ2lkICJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIKK21zZ3N0ciAiaGlzdG9yaXNjaGUgT3B0aW9uIC0tIGtlaW4gRWZmZWt0IgorCisjOiBidWlsdGluL2FtLmM6MjIxOAorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICJlcmxhdWJlLCBmYWxscyBub3R3ZW5kaWcsIGRhcyBadXLDvGNrZmFsbGVuIGF1ZiBlaW5lbiAzLVdlZ2UtTWVyZ2UiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE5IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU4CisjOiBidWlsdGluL3JlcGFjay5jOjMwNCBidWlsdGluL3N0YXNoLmM6ODEyCittc2dpZCAiYmUgcXVpZXQiCittc2dzdHIgIndlbmlnZXIgQXVzZ2FiZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIxCittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiZGVyIENvbW1pdC1CZXNjaHJlaWJ1bmcgZWluZSBTaWduZWQtb2ZmLWJ5IFplaWxlIGhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL2FtLmM6MjIyNAorbXNnaWQgInJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpIgorbXNnc3RyICJuYWNoIFVURi04IHVta29kaWVyZW4gKFN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjYKK21zZ2lkICJwYXNzIC1rIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICItayBhbiBnaXQtbWFpbGluZm8gw7xiZXJnZWJlbiIKKworIzogYnVpbHRpbi9hbS5jOjIyMjgKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICItYiBhbiBnaXQtbWFpbGluZm8gw7xiZXJnZWJlbiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzAKK21zZ2lkICJwYXNzIC1tIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICItbSBhbiBnaXQtbWFpbGluZm8gw7xiZXJnZWJlbiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzIKK21zZ2lkICJwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgZm9yIG1ib3ggZm9ybWF0IgorbXNnc3RyICItLWtlZXAtY3IgYW4gZ2l0LW1haWxzcGxpdCBmw7xyIG1ib3gtRm9ybWF0IMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM1Cittc2dpZCAiZG8gbm90IHBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudCBvZiBhbS5rZWVwY3IiCittc2dzdHIgImtlaW4gLS1rZWVwLWNyIGFuIGdpdC1tYWlsc3BsaXQgw7xiZXJnZWJlbiwgdW5hYmjDpG5naWcgdm9uIGFtLmtlZXBjciIKKworIzogYnVpbHRpbi9hbS5jOjIyMzgKK21zZ2lkICJzdHJpcCBldmVyeXRoaW5nIGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUiCittc2dzdHIgImFsbGVzIHZvciBlaW5lciBTY2hlcmVuLVplaWxlIGVudGZlcm5lbiIKKworIzogYnVpbHRpbi9hbS5jOjIyNDAgYnVpbHRpbi9hbS5jOjIyNDMgYnVpbHRpbi9hbS5jOjIyNDYgYnVpbHRpbi9hbS5jOjIyNDkKKyM6IGJ1aWx0aW4vYW0uYzoyMjUyIGJ1aWx0aW4vYW0uYzoyMjU1IGJ1aWx0aW4vYW0uYzoyMjU4IGJ1aWx0aW4vYW0uYzoyMjYxCisjOiBidWlsdGluL2FtLmM6MjI2NworbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgImFuIGdpdC1hcHBseSDDvGJlcmdlYmVuIgorCisjOiBidWlsdGluL2FtLmM6MjI1NyBidWlsdGluL2NvbW1pdC5jOjEzOTEgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcwCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzMgYnVpbHRpbi9ncmVwLmM6ODcxIGJ1aWx0aW4vbWVyZ2UuYzoyNTAKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0MCBidWlsdGluL3B1bGwuYzoxOTkgYnVpbHRpbi9yZWJhc2UuYzoxNTA1CisjOiBidWlsdGluL3JlcGFjay5jOjMxNSBidWlsdGluL3JlcGFjay5jOjMxOSBidWlsdGluL3JlcGFjay5jOjMyMQorIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MCBidWlsdGluL3Nob3ctcmVmLmM6MTcyIGJ1aWx0aW4vdGFnLmM6NDAzCisjOiBwYXJzZS1vcHRpb25zLmg6MTU0IHBhcnNlLW9wdGlvbnMuaDoxNzUgcGFyc2Utb3B0aW9ucy5oOjMxNgorbXNnaWQgIm4iCittc2dzdHIgIkFuemFobCIKKworIzogYnVpbHRpbi9hbS5jOjIyNjMgYnVpbHRpbi9icmFuY2guYzo2NjEgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOAorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU2IGJ1aWx0aW4vdGFnLmM6NDM3IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IgorbXNnc3RyICJGb3JtYXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjY0Cittc2dpZCAiZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluIgorbXNnc3RyICJQYXRjaC1Gb3JtYXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjcwCittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICJNZWxkdW5nIGJlaSBmZWhsZXJoYWZ0ZXIgUGF0Y2gtQW53ZW5kdW5nIMO8YmVyc2NocmVpYmVuIgorCisjOiBidWlsdGluL2FtLmM6MjI3MgorbXNnaWQgImNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QiCittc2dzdHIgIkFud2VuZHVuZyBkZXIgUGF0Y2hlcyBuYWNoIEF1ZmzDtnN1bmcgZWluZXMgS29uZmxpa3RlcyBmb3J0c2V0emVuIgorCisjOiBidWlsdGluL2FtLmM6MjI3NQorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICJTeW5vbnltZSBmw7xyIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc4Cittc2dpZCAic2tpcCB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAiZGVuIGFrdHVlbGxlbiBQYXRjaCBhdXNsYXNzZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjgxCittc2dpZCAicmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLiIKK21zZ3N0ciAiIgorInVyc3Byw7xuZ2xpY2hlbiBCcmFuY2ggd2llZGVyaGVyc3RlbGxlbiB1bmQgQW53ZW5kdW5nIGRlciBQYXRjaGVzIGFiYnJlY2hlbiIKKworIzogYnVpbHRpbi9hbS5jOjIyODQKK21zZ2lkICJhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uIGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMuIgorbXNnc3RyICJQYXRjaC1PcGVyYXRpb24gYWJicmVjaGVuLCBhYmVyIEhFQUQgYW4gYWt0dWVsbGVyIFN0ZWxsZSBiZWxhc3NlbiIKKworIzogYnVpbHRpbi9hbS5jOjIyODgKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBiZWluZyBhcHBsaWVkIgorbXNnc3RyICJkZW4gUGF0Y2gsIGRlciBnZXJhZGUgYW5nZXdlbmRldCB3aXJkLCBhbnplaWdlbiIKKworIzogYnVpbHRpbi9hbS5jOjIyOTMKK21zZ2lkICJsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUiCittc2dzdHIgIkF1dG9yLURhdHVtIGFscyBDb21taXQtRGF0dW0gdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2FtLmM6MjI5NQorbXNnaWQgInVzZSBjdXJyZW50IHRpbWVzdGFtcCBmb3IgYXV0aG9yIGRhdGUiCittc2dzdHIgImFrdHVlbGxlbiBaZWl0c3RlbXBlbCBhbHMgQXV0b3ItRGF0dW0gdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2FtLmM6MjI5NyBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIwIGJ1aWx0aW4vY29tbWl0LmM6MTUxMgorIzogYnVpbHRpbi9tZXJnZS5jOjI4NyBidWlsdGluL3B1bGwuYzoxNzQgYnVpbHRpbi9yZWJhc2UuYzo1MTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NiBidWlsdGluL3JldmVydC5jOjExNyBidWlsdGluL3RhZy5jOjQxOAorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAiR1BHLVNjaGzDvHNzZWxrZW5udW5nIgorCisjOiBidWlsdGluL2FtLmM6MjI5OCBidWlsdGluL3JlYmFzZS5jOjUxOCBidWlsdGluL3JlYmFzZS5jOjE1NTcKK21zZ2lkICJHUEctc2lnbiBjb21taXRzIgorbXNnc3RyICJDb21taXRzIG1pdCBHUEcgc2lnbmllcmVuIgorCisjOiBidWlsdGluL2FtLmM6MjMwMQorbXNnaWQgIihpbnRlcm5hbCB1c2UgZm9yIGdpdC1yZWJhc2UpIgorbXNnc3RyICIoaW50ZXJuIGbDvHIgZ2l0LXJlYmFzZSB2ZXJ3ZW5kZXQpIgorCisjOiBidWlsdGluL2FtLmM6MjMxOQorbXNnaWQgIiIKKyJUaGUgLWIvLS1iaW5hcnkgb3B0aW9uIGhhcyBiZWVuIGEgbm8tb3AgZm9yIGxvbmcgdGltZSwgYW5kXG4iCisiaXQgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdCBhbnltb3JlLiIKK21zZ3N0ciAiIgorIkRpZSAtYi8tLWJpbmFyeSBPcHRpb24gaGF0IHNlaXQgTGFuZ2VtIGtlaW5lbiBFZmZla3QgdW5kIHdpcmRcbiIKKyJlbnRmZXJudC4gQml0dGUgdmVyd2VuZGVuIFNpZSBkaWVzZSBuaWNodCBtZWhyLiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjYKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIGRlcyBJbmRleCIKKworIzogYnVpbHRpbi9hbS5jOjIzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICJWb3JoZXJpZ2VzIFJlYmFzZS1WZXJ6ZWljaG5pcyAlcyBleGlzdGllcnQgbm9jaCwgYWJlciBtYm94IGdlZ2ViZW4uIgorCisjOiBidWlsdGluL2FtLmM6MjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3RyYXkgJXMgZGlyZWN0b3J5IGZvdW5kLlxuIgorIlVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIKK21zZ3N0ciAiIgorIlN0cmF5ICVzIFZlcnplaWNobmlzIGdlZnVuZGVuLlxuIgorIkJlbnV0emVuIFNpZSBcImdpdCBhbSAtLWFib3J0XCIsIHVtIGVzIHp1IGVudGZlcm5lbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzcxCittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiRXMgaXN0IGtlaW5lIEF1ZmzDtnN1bmcgaW0gR2FuZ2UsIGVzIHdpcmQgbmljaHQgZm9ydGdlc2V0enQuIgorCisjOiBidWlsdGluL2FtLmM6MjM4MQorbXNnaWQgImludGVyYWN0aXZlIG1vZGUgcmVxdWlyZXMgcGF0Y2hlcyBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICJJbnRlcmFrdGl2ZXIgTW9kdXMgYmVuw7Z0aWd0IFBhdGNoZXMgw7xiZXIgZGllIEtvbW1hbmRvemVpbGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4Cittc2dpZCAiZ2l0IGFwcGx5IFs8b3B0aW9ucz5dIFs8cGF0Y2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGFwcGx5IFs8T3B0aW9uZW4+XSBbPFBhdGNoPi4uLl0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgIktvbm50ZSBBcmNoaXYtRGF0ZWkgJyVzJyBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgIktvbm50ZSBBdXNnYWJlIG5pY2h0IHVtbGVpdGVuLiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogRXh0ZXJuZXMgQXJjaGl2IG9obmUgVVJMIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBhcmNoaXZlOiBBQ0svTkFLIGVyd2FydGV0LCBGbHVzaC1QYWtldCBiZWtvbW1lbiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NQorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IFByb3Rva29sbGZlaGxlciIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjkKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IGVyd2FydGV0ZSBlaW5lIFNww7xsdW5nIChmbHVzaCkiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMgorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8YmFkX3Rlcm0+IDxnb29kX3Rlcm0+IgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8YmFkX3Rlcm0+IDxnb29kX3Rlcm0+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjQKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXJlc2V0IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPENvbW1pdD5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjYKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPHN0YXRlPiA8cmV2aXNpb24+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPFp1c3RhbmQ+IDxSZXZpc2lvbj4gIgorIjxCZWdyaWZmX2d1dD4gPEJlZ3JpZmZfc2NobGVjaHQ+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjcKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPGNvbW1hbmQ+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPEJlZmVobD4gPEJlZ3JpZmZfZ3V0PiAiCisiPEJlZ3JpZmZfc2NobGVjaHQ+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjgKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA8Z29vZF90ZXJtPiA8YmFkX3Rlcm0+IFs8dGVybT5dIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPEJlZ3JpZmZfZ3V0PiA8QmVncmlmZl9zY2hsZWNodD4gIgorIls8QmVncmlmZj5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzAKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PHRlcm0+XVstLW5vLWNoZWNrb3V0XSBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08QmVncmlmZj4gLS10ZXJtLXtuZXcsIgorImJhZH09PEJlZ3JpZmY+XVstLW5vLWNoZWNrb3V0XSBbPHNjaGxlY2h0PiBbPGd1dD4uLi5dXSBbLS1dIFs8UGZhZGU+Li4uXSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGVybSIKK21zZ3N0ciAiJyVzJyBpc3Qga2VpbiBnw7xsdGlnZXIgQmVncmlmZi4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnJXMnIGFzIGEgdGVybSIKK21zZ3N0ciAiS2FubiBkZW4gZWluZ2ViYXV0ZW4gQmVmZWhsICclcycgbmljaHQgYWxzIEJlZ3JpZmYgdmVyd2VuZGVuLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIHRlcm0gJyVzJyIKK21zZ3N0ciAiS2FubiBkaWUgQmVkZXV0dW5nIHZvbiBkZW0gQmVncmlmZiAnJXMnIG5pY2h0IMOkbmRlcm4uIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTExCittc2dpZCAicGxlYXNlIHVzZSB0d28gZGlmZmVyZW50IHRlcm1zIgorbXNnc3RyICJCaXR0ZSB2ZXJ3ZW5kZW4gU2llIHp3ZWkgdmVyc2NoaWVkZW5lIEJlZ3JpZmZlLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExOAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRoZSBmaWxlIEJJU0VDVF9URVJNUyIKK21zZ3N0ciAiS29ubnRlIGRpZSBEYXRlaSBCSVNFQ1RfVEVSTVMgbmljaHQgw7ZmZm5lbi4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuXG4iCittc2dzdHIgIktlaW5lIGJpbsOkcmUgU3VjaGUgaW0gR2FuZ2UuXG4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIiclcycgaXN0IGtlaW4gZ8O8bHRpZ2VyIENvbW1pdC4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJXMnLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIKK21zZ3N0ciAiIgorIktvbm50ZSBkZW4gdXJzcHLDvG5nbGljaGVuIEhFQUQgJyVzJyBuaWNodCBhdXNjaGVja2VuLlxuIgorIlZlcnN1Y2hlbiBTaWUgJ2dpdCBiaXNlY3QgcmVzZXQgPENvbW1pdD4nLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgXCJiaXNlY3Rfd3JpdGVcIiBBcmd1bWVudDogJXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZ2V0IHRoZSBvaWQgb2YgdGhlIHJldiAnJXMnIgorbXNnc3RyICJLb25udGUgZGllIE9JRCBkZXIgUmV2aXNpb24gJyVzJyBuaWNodCBlcmhhbHRlbi4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3Qgb3BlbiB0aGUgZmlsZSAnJXMnIgorbXNnc3RyICJLb25udGUgZGllIERhdGVpICclcycgbmljaHQgw7ZmZm5lbi4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21tYW5kOiB5b3UncmUgY3VycmVudGx5IGluIGEgJXMvJXMgYmlzZWN0IgorbXNnc3RyICJVbmfDvGx0aWdlciBCZWZlaGw6IFNpZSBzaW5kIGdlcmFkZSBiZWkgZWluZXIgYmluw6RyZW4gJXMvJXMgU3VjaGUuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorIlNpZSBtw7xzc2VuIG1pbmRlc3RlbnMgZWluZW4gXCIlc1wiIHVuZCBlaW5lbiBcIiVzXCIgQ29tbWl0IGFuZ2ViZW4uXG4iCisiU2llIGvDtm5uZW4gZGFmw7xyIFwiZ2l0IGJpc2VjdCAlc1wiIHVuZCBcImdpdCBiaXNlY3QgJXNcIiBiZW51dHplbi4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyJTaWUgbcO8c3NlbiBtaXQgXCJnaXQgYmlzZWN0IHN0YXJ0XCIgYmVnaW5uZW4uXG4iCisiRGFuYWNoIG3DvHNzZW4gU2llIG1pbmRlc3RlbnMgZWluZW4gXCIlc1wiIHVuZCBlaW5lbiBcIiVzXCIgQ29tbWl0IGFuZ2ViZW4uXG4iCisiU2llIGvDtm5uZW4gZGFmw7xyIFwiZ2l0IGJpc2VjdCAlc1wiIHVuZCBcImdpdCBiaXNlY3QgJXNcIiBiZW51dHplbi4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzZWN0aW5nIG9ubHkgd2l0aCBhICVzIGNvbW1pdCIKK21zZ3N0ciAiQmluw6RyZSBTdWNoZSBudXIgbWl0IGVpbmVtICVzIENvbW1pdC4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMTgKK21zZ2lkICJBcmUgeW91IHN1cmUgW1kvbl0/ICIKK21zZ3N0ciAiU2luZCBTaWUgc2ljaGVyIFtZL25dPyAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozNzkKK21zZ2lkICJubyB0ZXJtcyBkZWZpbmVkIgorbXNnc3RyICJLZWluZSBCZWdyaWZmZSBkZWZpbmllcnQuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGN1cnJlbnQgdGVybXMgYXJlICVzIGZvciB0aGUgb2xkIHN0YXRlXG4iCisiYW5kICVzIGZvciB0aGUgbmV3IHN0YXRlLlxuIgorbXNnc3RyICIiCisiSWhyZSBha3R1ZWxsZW4gQmVncmlmZmUgc2luZCAlcyBmw7xyIGRlbiBhbHRlbiBadXN0YW5kXG4iCisidW5kICVzIGbDvHIgZGVuIG5ldWVuIFp1c3RhbmQuXG4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgYXJndW1lbnQgJXMgZm9yICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6IC0tdGVybS1nb29kfC0tdGVybS1vbGQgYW5kIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCittc2dzdHIgIiIKKyJVbmfDvGx0aWdlcyBBcmd1bWVudCAlcyBmw7xyICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJVbnRlcnN0w7x0enRlIE9wdGlvbmVuIHNpbmQ6IC0tdGVybS1nb29kfC0tdGVybS1vbGQgdW5kIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIG9wdGlvbjogJyVzJyIKK21zZ3N0ciAiTmljaHQgZXJrYW5udGUgUG9zaXRpb246ICclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiJyVzJyBzY2hlaW50IGtlaW4gZ8O8bHRpZ2VyIENvbW1pdCB6dSBzZWluLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUxNAorbXNnaWQgImJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgSEVBRCAtIEhFQUQgd2lyZCBiZW7DtnRpZ3QuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNoZWNraW5nIG91dCAnJXMnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHN0YXJ0IDx2YWxpZC1icmFuY2g+Jy4iCittc2dzdHIgIiIKKyJBdXNjaGVja2VuIHZvbiAnJXMnIGZlaGxnZXNjaGxhZ2VuLiBWZXJzdWNoZW4gU2llICdnaXQgYmlzZWN0IHN0YXJ0ICIKKyI8Z8O8bHRpZ2VyLUJyYW5jaD4nLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MAorbXNnaWQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiCittc2dzdHIgIiIKKyJiaW7DpHJlIFN1Y2hlIGF1ZiBlaW5lbSBkdXJjaCAnY2ctc2VlaycgZ2XDpG5kZXJ0ZW0gVmVyemVpY2huaXMgbmljaHQgbcO2Z2xpY2giCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NTMKK21zZ2lkICJiYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICJVbmfDvGx0aWdlciBIRUFEIC0gbWVya3fDvHJkaWdlIHN5bWJvbGlzY2hlIFJlZmVyZW56LiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU3NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZjogJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBSZWZlcmVuejogJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMworbXNnaWQgInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciCittc2dzdHIgIidnaXQgYmlzZWN0IG5leHQnIGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzUKK21zZ2lkICJ3cml0ZSB0aGUgdGVybXMgdG8gLmdpdC9CSVNFQ1RfVEVSTVMiCittc2dzdHIgImRpZSBCZWdyaWZmZSBuYWNoIC5naXQvQklTRUNUX1RFUk1TIHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNworbXNnaWQgImNsZWFudXAgdGhlIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAiZGVuIFp1c3RhbmQgZGVyIGJpbsOkcmVuIFN1Y2hlIGF1ZnLDpHVtZW4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzkKK21zZ2lkICJjaGVjayBmb3IgZXhwZWN0ZWQgcmV2cyIKK21zZ3N0ciAiYXVmIGVyd2FydGV0ZSBDb21taXRzIHByw7xmZW4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDEKK21zZ2lkICJyZXNldCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICJkZW4gWnVzdGFuZCBkZXIgYmluw6RyZW4gU3VjaGUgenVyw7xja3NldHplbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MworbXNnaWQgIndyaXRlIG91dCB0aGUgYmlzZWN0aW9uIHN0YXRlIGluIEJJU0VDVF9MT0ciCittc2dzdHIgImRlbiBadXN0YW5kIGRlciBiaW7DpHJlbiBTdWNoZSBuYWNoIEJJU0VDVF9MT0cgc2NocmVpYmVuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ1Cittc2dpZCAiY2hlY2sgYW5kIHNldCB0ZXJtcyBpbiBhIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAiQmVncmlmZmUgaW5uZXJoYWxiIGVpbmVyIGJpbsOkcmVuIFN1Y2hlIHByw7xmZW4gdW5kIHNldHplbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NworbXNnaWQgImNoZWNrIHdoZXRoZXIgYmFkIG9yIGdvb2QgdGVybXMgZXhpc3QiCittc2dzdHIgInByw7xmZW4sIG9iIEJlZ3JpZmZlIGbDvHIgZ3V0ZSB1bmQgc2NobGVjaHRlIENvbW1pdHMgZXhpc3RpZXJlbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0OQorbXNnaWQgInByaW50IG91dCB0aGUgYmlzZWN0IHRlcm1zIgorbXNnc3RyICJkaWUgQmVncmlmZmUgZsO8ciBkaWUgYmluw6RyZSBTdWNoZSBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MQorbXNnaWQgInN0YXJ0IHRoZSBiaXNlY3Qgc2Vzc2lvbiIKK21zZ3N0ciAiU2l0enVuZyBmw7xyIGJpbsOkcmUgU3VjaGUgc3RhcnRlbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MworbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgIkJJU0VDVF9IRUFEIGFrdHVhbGlzaWVyZW4sIGFuc3RhdHQgZGVuIGFrdHVlbGxlbiBDb21taXQgYXVzenVjaGVja2VuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjU1Cittc2dpZCAibm8gbG9nIGZvciBCSVNFQ1RfV1JJVEUiCittc2dzdHIgImtlaW4gTG9nIGbDvHIgQklTRUNUX1dSSVRFIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjczCittc2dpZCAiLS13cml0ZS10ZXJtcyByZXF1aXJlcyB0d28gYXJndW1lbnRzIgorbXNnc3RyICItLXdyaXRlLXRlcm1zIGJlbsO2dGlndCB6d2VpIEFyZ3VtZW50ZS4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzcKK21zZ2lkICItLWJpc2VjdC1jbGVhbi1zdGF0ZSByZXF1aXJlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIGVyd2FydGV0IGtlaW5lIEFyZ3VtZW50ZS4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODQKK21zZ2lkICItLWJpc2VjdC1yZXNldCByZXF1aXJlcyBlaXRoZXIgbm8gYXJndW1lbnQgb3IgYSBjb21taXQiCittc2dzdHIgIi0tYmlzZWN0LXJlc2V0IGJlbsO2dGlndCBlbnR3ZWRlciBrZWluIEFyZ3VtZW50IG9kZXIgZWluIENvbW1pdC4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODgKK21zZ2lkICItLWJpc2VjdC13cml0ZSByZXF1aXJlcyBlaXRoZXIgNCBvciA1IGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3Qtd3JpdGUgYmVuw7Z0aWd0IGVudHdlZGVyIDQgb2RlciA1IEFyZ3VtZW50ZS4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTQKK21zZ2lkICItLWNoZWNrLWFuZC1zZXQtdGVybXMgcmVxdWlyZXMgMyBhcmd1bWVudHMiCittc2dzdHIgIi0tY2hlY2stYW5kLXNldC10ZXJtcyBiZW7DtnRpZ3QgMyBBcmd1bWVudGUuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NzAwCittc2dpZCAiLS1iaXNlY3QtbmV4dC1jaGVjayByZXF1aXJlcyAyIG9yIDMgYXJndW1lbnRzIgorbXNnc3RyICItLWJpc2VjdC1uZXh0LWNoZWNrIGJlbsO2dGlndCAyIG9kZXIgMyBBcmd1bWVudGUuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NzA2Cittc2dpZCAiLS1iaXNlY3QtdGVybXMgcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50IgorbXNnc3RyICItLWJpc2VjdC10ZXJtcyBiZW7DtnRpZ3QgMCBvZGVyIDEgQXJndW1lbnQuIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzEKK21zZ2lkICJnaXQgYmxhbWUgWzxvcHRpb25zPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8ZmlsZT4iCittc2dzdHIgImdpdCBibGFtZSBbPE9wdGlvbmVuPl0gWzxyZXYtb3B0cz5dIFs8Q29tbWl0Pl0gWy0tXSA8RGF0ZWk+IgorCisjOiBidWlsdGluL2JsYW1lLmM6MzYKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAiPHJldi1vcHRzPiBzaW5kIGRva3VtZW50aWVydCBpbiBnaXQtcmV2LWxpc3QoMSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0aW5nIGEgY29sb3I6ICVzIgorbXNnc3RyICJFcndhcnRlIGVpbmUgRmFyYmU6ICVzIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDE2Cittc2dpZCAibXVzdCBlbmQgd2l0aCBhIGNvbG9yIgorbXNnc3RyICJNdXNzIG1pdCBlaW5lciBGYXJiZSBlbmRlbi4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciAnJXMnIGluIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgRmFyYmUgJyVzJyBpbiBjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVzLiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc0NworbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIGJsYW1lLmNvbG9yaW5nIgorbXNnc3RyICJVbmfDvGx0aWdlciBXZXJ0IGbDvHIgYmxhbWUuY29sb3JpbmcuIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIHJldmlzaW9uICVzIHRvIGlnbm9yZSIKK21zZ3N0ciAiS29ubnRlIENvbW1pdCAlcyB6dW0gSWdub3JpZXJlbiBuaWNodCBmaW5kZW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDQKK21zZ2lkICJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IgorbXNnc3RyICJcImJsYW1lXCItRWludHLDpGdlIHNjaHJpdHR3ZWlzZSBhbnplaWdlbiwgd8OkaHJlbmQgd2lyIHNpZSBnZW5lcmllcmVuIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ1Cittc2dpZCAiU2hvdyBibGFuayBTSEEtMSBmb3IgYm91bmRhcnkgY29tbWl0cyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAibGVlcmUgU0hBLTEgZsO8ciBHcmVuei1Db21taXRzIGFuemVpZ2VuIChTdGFuZGFyZDogYXVzKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NgorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiUm9vdC1Db21taXRzIG5pY2h0IGFscyBHcmVuemVuIGJlaGFuZGVsbiAoU3RhbmRhcmQ6IGF1cykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDcKK21zZ2lkICJTaG93IHdvcmsgY29zdCBzdGF0aXN0aWNzIgorbXNnc3RyICJTdGF0aXN0aWtlbiB6dW0gQXJiZWl0c2F1ZndhbmQgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDgKK21zZ2lkICJGb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIkZvcnRzY2hyaXR0c2FuemVpZ2UgZXJ6d2luZ2VuIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ5Cittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIkF1c2dhYmViZXdlcnR1bmcgZsO8ciBcImJsYW1lXCItRWludHLDpGdlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUwCittc2dpZCAiU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bykiCittc2dzdHIgInVyc3Byw7xuZ2xpY2hlbiBEYXRlaW5hbWVuIGFuemVpZ2VuIChTdGFuZGFyZDogYXV0bykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTEKK21zZ2lkICJTaG93IG9yaWdpbmFsIGxpbmVudW1iZXIgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgInVyc3Byw7xuZ2xpY2hlIFplaWxlbm51bW1lciBhbnplaWdlbiAoU3RhbmRhcmQ6IGF1cykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTIKK21zZ2lkICJTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIgorbXNnc3RyICJBbnplaWdlIGluIGVpbmVtIEZvcm1hdCBmw7xyIG1hc2NoaW5lbGxlIEF1c3dlcnR1bmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTMKK21zZ2lkICJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKyJBbnplaWdlIGluIEZvcm1hdCBmw7xyIEZyZW1kcHJvZ3JhbW1lIG1pdCBDb21taXQtSW5mb3JtYXRpb25lbiBwcm8gWmVpbGUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTQKK21zZ2lkICJVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgZ2l0LWFubm90YXRlIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisiRGVuIGdsZWljaGVuIEF1c2dhYmVtb2R1cyBiZW51dHplbiB3aWUgXCJnaXQtYW5ub3RhdGVcIiAoU3RhbmRhcmQ6IGF1cykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTUKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIlVuYmVhcmJlaXRldGVuIFplaXRzdGVtcGVsIGFuemVpZ2VuIChTdGFuZGFyZDogYXVzKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NgorbXNnaWQgIlNob3cgbG9uZyBjb21taXQgU0hBMSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiTGFuZ2VuIENvbW1pdC1TSEExIGFuemVpZ2VuIChTdGFuZGFyZDogYXVzKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NworbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkRlbiBOYW1lbiBkZXMgQXV0b3JzIHVuZCBkZW4gWmVpdHN0ZW1wZWwgdW50ZXJkcsO8Y2tlbiAoU3RhbmRhcmQ6IGF1cykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTgKK21zZ2lkICJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyJBbnN0YXR0IGRlcyBOYW1lbnMgZGllIEUtTWFpbC1BZHJlc3NlIGRlcyBBdXRvcnMgYW56ZWlnZW4gKFN0YW5kYXJkOiBhdXMpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU5Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgIlVudGVyc2NoaWVkZSBpbSBXaGl0ZXNwYWNlIGlnbm9yaWVyZW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjAgYnVpbHRpbi9sb2cuYzoxNzAyCittc2dpZCAicmV2IgorbXNnc3RyICJDb21taXQiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjAKK21zZ2lkICJJZ25vcmUgPHJldj4gd2hlbiBibGFtaW5nIgorbXNnc3RyICJJZ25vcmllcmUgPHJldj4gYmVpbSBBdXNmw7xocmVuIHZvbiAnYmxhbWUnIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYxCittc2dpZCAiSWdub3JlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiIKK21zZ3N0ciAiSWdub3JpZXJlIENvbW1pdHMgYXVzIDxEYXRlaT4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjIKK21zZ2lkICJjb2xvciByZWR1bmRhbnQgbWV0YWRhdGEgZnJvbSBwcmV2aW91cyBsaW5lIGRpZmZlcmVudGx5IgorbXNnc3RyICJyZWR1bmRhbnRlIE1ldGFkYXRlbiBkZXIgdm9yaGVyaWdlbiBaZWlsZSB1bnRlcnNjaGllZGxpY2ggZWluZsOkcmJlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MworbXNnaWQgImNvbG9yIGxpbmVzIGJ5IGFnZSIKK21zZ3N0ciAiWmVpbGVuIG5hY2ggQWx0ZXIgZWluZsOkcmJlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NAorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAiTMOkbmdlciBhcmJlaXRlbiwgdW0gYmVzc2VyZSDDnGJlcmVpbnN0aW1tdW5nZW4genUgZmluZGVuIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY1Cittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICJDb21taXRzIHZvbiA8RGF0ZWk+IGJlbnV0emVuLCBhbnN0YXR0IFwiZ2l0LXJldi1saXN0XCIgYXVmenVydWZlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NgorbXNnaWQgIlVzZSA8ZmlsZT4ncyBjb250ZW50cyBhcyB0aGUgZmluYWwgaW1hZ2UiCittc2dzdHIgIkluaGFsdGUgZGVyIDxEYXRlaT5lbiBhbHMgZW5kZ8O8bHRpZ2VzIEFiYmlsZCBiZW51dHplbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NyBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAic2NvcmUiCittc2dzdHIgIkJld2VydHVuZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NworbXNnaWQgIkZpbmQgbGluZSBjb3BpZXMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgImtvcGllcnRlIFplaWxlbiBpbm5lcmhhbGIgb2RlciB6d2lzY2hlbiBEYXRlaWVuIGZpbmRlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OAorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgInZlcnNjaG9iZW5lIFplaWxlbiBpbm5lcmhhbGIgb2RlciB6d2lzY2hlbiBEYXRlaWVuIGZpbmRlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIm4sbSIKK21zZ3N0ciAibixtIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAiUHJvY2VzcyBvbmx5IGxpbmUgcmFuZ2UgbixtLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIm51ciBaZWlsZW4gaW0gQmVyZWljaCBuLG0gdmVyYXJiZWl0ZW4sIGdlesOkaGx0IHZvbiAxIgorCisjOiBidWlsdGluL2JsYW1lLmM6OTIxCittc2dpZCAiLS1wcm9ncmVzcyBjYW4ndCBiZSB1c2VkIHdpdGggLS1pbmNyZW1lbnRhbCBvciBwb3JjZWxhaW4gZm9ybWF0cyIKK21zZ3N0ciAiIgorIi0tcHJvZ3Jlc3Mga2FubiBuaWNodCBtaXQgLS1pbmNyZW1lbnRhbCBvZGVyIEZvcm1hdGVuIGbDvHIgRnJlbWRwcm9ncmFtbWVcbiIKKyJ2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBzdHJpbmcgaXMgdXNlZCB0byB0ZWxsIHVzIHRoZQorIy4gbWF4aW11bSBkaXNwbGF5IHdpZHRoIGZvciBhIHJlbGF0aXZlIHRpbWVzdGFtcCBpbgorIy4gImdpdCBibGFtZSIgb3V0cHV0LiAgRm9yIEMgbG9jYWxlLCAiNCB5ZWFycywgMTEKKyMuIG1vbnRocyBhZ28iLCB3aGljaCB0YWtlcyAyMiBwbGFjZXMsIGlzIHRoZSBsb25nZXN0CisjLiBhbW9uZyB2YXJpb3VzIGZvcm1zIG9mIHJlbGF0aXZlIHRpbWVzdGFtcHMsIGJ1dAorIy4geW91ciBsYW5ndWFnZSBtYXkgbmVlZCBtb3JlIG9yIGZld2VyIGRpc3BsYXkKKyMuIGNvbHVtbnMuCisjLgorIzogYnVpbHRpbi9ibGFtZS5jOjk3MgorbXNnaWQgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iCittc2dzdHIgInZvciA0IEphaHJlbiB1bmQgMTEgTW9uYXRlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjEwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZSIKK21zZ2lkX3BsdXJhbCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZXMiCittc2dzdHJbMF0gIkRhdGVpICVzIGhhdCBudXIgJWx1IFplaWxlIgorbXNnc3RyWzFdICJEYXRlaSAlcyBoYXQgbnVyICVsdSBaZWlsZW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoxMTI1Cittc2dpZCAiQmxhbWluZyBsaW5lcyIKK21zZ3N0ciAiVmVyYXJiZWl0ZSBaZWlsZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjkKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxPcHRpb25lbj5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzAKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstbF0gWy1mXSA8YnJhbmNoLW5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPE9wdGlvbmVuPl0gWy1sXSBbLWZdIDxCcmFuY2huYW1lPiBbPFN0YXJ0cHVua3Q+XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaC1uYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPE9wdGlvbmVuPl0gWy1yXSAoLWQgfCAtRCkgPEJyYW5jaG5hbWU+Li4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMyCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLW0gfCAtTSkgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs8T3B0aW9uZW4+XSAoLW0gfCAtTSkgWzxhbHRlci1CcmFuY2g+XSA8bmV1ZXItQnJhbmNoPiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMworbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1jIHwgLUMpIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPE9wdGlvbmVuPl0gKC1jIHwgLUMpIFs8YWx0ZXItQnJhbmNoPl0gPG5ldWVyLUJyYW5jaD4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8T3B0aW9uZW4+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozNQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxPcHRpb25lbj5dIFstciB8IC1hXSBbLS1mb3JtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBidXQgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyJlbnRmZXJuZSBCcmFuY2ggJyVzJywgZGVyIHp1c2FtbWVuZ2Vmw7xocnQgd3VyZGUgbWl0XG4iCisiICAgICAgICAgJyVzJywgYWJlciBub2NoIG5pY2h0IG1pdCBIRUFEIHp1c2FtbWVuZ2Vmw7xocnQgd3VyZGUuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyJlbnRmZXJuZSBCcmFuY2ggJyVzJyBuaWNodCwgZGVyIG5vY2ggbmljaHQgenVzYW1tZW5nZWbDvGhydCB3dXJkZSBtaXRcbiIKKyIgICAgICAgICAnJXMnLCBvYndvaGwgZXIgbWl0IEhFQUQgenVzYW1tZW5nZWbDvGhydCB3dXJkZS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIKK21zZ3N0ciAiS29ubnRlIENvbW1pdC1PYmpla3QgZsO8ciAnJXMnIG5pY2h0IG5hY2hzY2hsYWdlbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorIkRlciBCcmFuY2ggJyVzJyBpc3QgbmljaHQgdm9sbHN0w6RuZGlnIHp1c2FtbWVuZ2Vmw7xocnQuXG4iCisiV2VubiBTaWUgc2ljaGVyIHNpbmQgZGllc2VuIEJyYW5jaCB6dSBlbnRmZXJuZW4sIGbDvGhyZW4gU2llICdnaXQgYnJhbmNoIC1EICIKKyIlcycgYXVzLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODkKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJBa3R1YWxpc2llcnVuZyBkZXIgS29uZmlndXJhdGlvbnNkYXRlaSBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjIwCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICJrYW5uIC1hIG5pY2h0IG1pdCAtZCBiZW51dHplbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjYKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgIktvbm50ZSBDb21taXQtT2JqZWt0IGbDvHIgSEVBRCBuaWNodCBuYWNoc2NobGFnZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnIGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIkthbm4gQnJhbmNoICclcycgbmljaHQgZW50ZmVybmVuLCBhdXNnZWNoZWNrdCBpbiAnJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIlJlbW90ZS1UcmFja2luZy1CcmFuY2ggJyVzJyBuaWNodCBnZWZ1bmRlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiQnJhbmNoICclcycgbmljaHQgZ2VmdW5kZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEVudGZlcm5lbiBkZXMgUmVtb3RlLVRyYWNraW5nLUJyYW5jaGVzICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBFbnRmZXJuZW4gZGVzIEJyYW5jaGVzICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiUmVtb3RlLVRyYWNraW5nLUJyYW5jaCAlcyBlbnRmZXJudCAod2FyICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIkJyYW5jaCAlcyBlbnRmZXJudCAod2FyICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjkgYnVpbHRpbi90YWcuYzo2MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJLb25udGUgRm9ybWF0aWVydW5nc3N0cmluZyBuaWNodCBwYXJzZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2MAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgIktvbm50ZSBIRUFELUNvbW1pdCBuaWNodCBhdWZsw7ZzZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEICglcykgcG9pbnRzIG91dHNpZGUgb2YgcmVmcy9oZWFkcy8iCittc2dzdHIgIkhFQUQgKCVzKSB3dXJkZSBuaWNodCB1bnRlciBcInJlZnMvaGVhZHMvXCIgZ2VmdW5kZW4hIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgcmViYXNlZCBhdCAlcyIKK21zZ3N0ciAiQnJhbmNoICVzIHdpcmQgYXVmICVzIHVtZ2VzZXR6dCIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIGJpc2VjdGVkIGF0ICVzIgorbXNnc3RyICJCaW7DpHJlIFN1Y2hlIHZvbiBCcmFuY2ggJXMgenUgJXMgaW0gR2FuZ2UiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTAyCittc2dpZCAiY2Fubm90IGNvcHkgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICIiCisiS2FubiBkZW4gYWt0dWVsbGVuIEJyYW5jaCBuaWNodCBrb3BpZXJlbiwgc29sYW5nZSBTaWUgc2ljaCBhdWYga2VpbmVtICIKKyJiZWZpbmRlbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTA0Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIiIKKyJLYW5uIGFrdHVlbGxlbiBCcmFuY2ggbmljaHQgdW1iZW5lbm5lbiwgc29sYW5nZSBTaWUgc2ljaCBhdWYga2VpbmVtIGJlZmluZGVuLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgQnJhbmNobmFtZTogJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDIKK21zZ2lkICJCcmFuY2ggcmVuYW1lIGZhaWxlZCIKK21zZ3N0ciAiVW1iZW5lbm51bmcgZGVzIEJyYW5jaGVzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0NAorbXNnaWQgIkJyYW5jaCBjb3B5IGZhaWxlZCIKK21zZ3N0ciAiS29waWUgZGVzIEJyYW5jaGVzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGEgY29weSBvZiBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIgorbXNnc3RyICJLb3BpZSBlaW5lcyBmYWxzY2ggYmVuYW5udGVuIEJyYW5jaGVzICclcycgZXJzdGVsbHQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAiZmFsc2NoIGJlbmFubnRlbiBCcmFuY2ggJyVzJyB1bWJlbmFubnQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIkJyYW5jaCB1bWJlbmFubnQgenUgJXMsIGFiZXIgSEVBRCBpc3QgbmljaHQgYWt0dWFsaXNpZXJ0ISIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjYKK21zZ2lkICJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJCcmFuY2ggaXN0IHVtYmVuYW5udCwgYWJlciBkaWUgQWt0dWFsaXNpZXJ1bmcgZGVyIEtvbmZpZ3VyYXRpb25zZGF0ZWkgaXN0ICIKKyJmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY4Cittc2dpZCAiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJCcmFuY2ggd3VyZGUga29waWVydCwgYWJlciBkaWUgQWt0dWFsaXNpZXJ1bmcgZGVyIEtvbmZpZ3VyYXRpb25zZGF0ZWkgaXN0XG4iCisiZmVobGdlc2NobGFnZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoXG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIHN0cmlwcGVkLlxuIgorbXNnc3RyICIiCisiQml0dGUgw6RuZGVybiBTaWUgZGllIEJlc2NocmVpYnVuZyBmw7xyIGRlbiBCcmFuY2hcbiIKKyIgICVzXG4iCisiWmVpbGVuLCBkaWUgbWl0ICclYycgYmVnaW5uZW4sIHdlcmRlbiBlbnRmZXJudC5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTgKK21zZ2lkICJHZW5lcmljIG9wdGlvbnMiCittc2dzdHIgIkFsbGdlbWVpbmUgT3B0aW9uZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIwCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgIkhhc2ggdW5kIEJldHJlZmYgYW56ZWlnZW47IC12djogenVzw6R0emxpY2ggVXBzdHJlYW0tQnJhbmNoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMQorbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgIkluZm9ybWF0aW9uc21lbGR1bmdlbiB1bnRlcmRyw7xja2VuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJNb2R1cyB6dW0gRm9sZ2VuIHZvbiBCcmFuY2hlcyBlaW5zdGVsbGVuIChzaWVoZSBnaXQtcHVsbCgxKSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI0Cittc2dpZCAiZG8gbm90IHVzZSIKK21zZ3N0ciAibmljaHQgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNiBidWlsdGluL3JlYmFzZS5jOjUxMworbXNnaWQgInVwc3RyZWFtIgorbXNnc3RyICJVcHN0cmVhbSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYKK21zZ2lkICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgIkluZm9ybWF0aW9uZW4genVtIFVwc3RyZWFtLUJyYW5jaCDDpG5kZXJuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNworbXNnaWQgInVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICJJbmZvcm1hdGlvbmVuIHp1bSBVcHN0cmVhbS1CcmFuY2ggZW50ZmVybmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOAorbXNnaWQgInVzZSBjb2xvcmVkIG91dHB1dCIKK21zZ3N0ciAiZmFyYmlnZSBBdXNnYWJlbiB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI5Cittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiYXVmIFJlbW90ZS1UcmFja2luZy1CcmFuY2hlcyB3aXJrZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMxIGJ1aWx0aW4vYnJhbmNoLmM6NjMzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAibnVyIEJyYW5jaGVzIGF1c2dlYmVuLCBkaWUgZGllc2VuIENvbW1pdCBlbnRoYWx0ZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMyIGJ1aWx0aW4vYnJhbmNoLmM6NjM0Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAibnVyIEJyYW5jaGVzIGF1c2dlYmVuLCBkaWUgZGllc2VuIENvbW1pdCBuaWNodCBlbnRoYWx0ZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM3Cittc2dpZCAiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIKK21zZ3N0ciAic3BlemlmaXNjaGUgQWt0aW9uZW4gZsO8ciBcImdpdC1icmFuY2hcIjoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM4Cittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIlJlbW90ZS1UcmFja2luZyB1bmQgbG9rYWxlIEJyYW5jaGVzIGF1Zmxpc3RlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDAKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAidm9sbHN0w6RuZGlnIHp1c2FtbWVuZ2Vmw7xocnRlbiBCcmFuY2ggZW50ZmVybmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MQorbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgIkJyYW5jaCBsw7ZzY2hlbiAoYXVjaCB3ZW5uIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnQpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MgorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJlaW5lbiBCcmFuY2ggdW5kIGRlc3NlbiBSZWZsb2cgdmVyc2NoaWViZW4vdW1iZW5lbm5lbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDMKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICIiCisiZWluZW4gQnJhbmNoIHZlcnNjaGllYmVuL3VtYmVuZW5uZW4sIGF1Y2ggd2VubiBkYXMgWmllbCBiZXJlaXRzIGV4aXN0aWVydCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDQKK21zZ2lkICJjb3B5IGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJlaW5lbiBCcmFuY2ggdW5kIGRlc3NlbiBSZWZsb2cga29waWVyZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ1Cittc2dpZCAiY29weSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJlaW5lbiBCcmFuY2gga29waWVyZW4sIGF1Y2ggd2VubiBkYXMgWmllbCBiZXJlaXRzIGV4aXN0aWVydCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDYKK21zZ2lkICJsaXN0IGJyYW5jaCBuYW1lcyIKK21zZ3N0ciAiQnJhbmNobmFtZW4gYXVmbGlzdGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NworbXNnaWQgInNob3cgY3VycmVudCBicmFuY2ggbmFtZSIKK21zZ3N0ciAiWmVpZ2UgYWt0dWVsbGVuIEJyYW5jaC1OYW1lbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ4Cittc2dpZCAiY3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2ciCittc2dzdHIgImRhcyBSZWZsb2cgZGVzIEJyYW5jaGVzIGVyemV1Z2VuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MAorbXNnaWQgImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICJkaWUgQmVzY2hyZWlidW5nIGbDvHIgZGVuIEJyYW5jaCBiZWFyYmVpdGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MQorbXNnaWQgImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iCittc2dzdHIgIkVyc3RlbGx1bmcsIFZlcnNjaGllYnVuZy9VbWJlbmVubnVuZyBvZGVyIEzDtnNjaHVuZyBlcnp3aW5nZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUyCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgIm51ciB6dXNhbW1lbmdlZsO8aHJ0ZSBCcmFuY2hlcyBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgIm51ciBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBCcmFuY2hlcyBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTQKK21zZ2lkICJsaXN0IGJyYW5jaGVzIGluIGNvbHVtbnMiCittc2dzdHIgIkJyYW5jaGVzIGluIFNwYWx0ZW4gYXVmbGlzdGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NyBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQyIGJ1aWx0aW4vbm90ZXMuYzo0MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTggYnVpbHRpbi9ub3Rlcy5jOjU4MSBidWlsdGluL25vdGVzLmM6NTg0CisjOiBidWlsdGluL3RhZy5jOjQzMworbXNnaWQgIm9iamVjdCIKK21zZ3N0ciAiT2JqZWt0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1OAorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAibnVyIEJyYW5jaGVzIHZvbiBkaWVzZW0gT2JqZWt0IGF1c2dlYmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY2MCBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ4IGJ1aWx0aW4vdGFnLmM6NDQwCittc2dpZCAic29ydGluZyBhbmQgZmlsdGVyaW5nIGFyZSBjYXNlIGluc2Vuc2l0aXZlIgorbXNnc3RyICJTb3J0aWVydW5nIHVuZCBGaWx0ZXJ1bmcgc2luZCB1bmFiaMOkbmdpZyB2b24gR3Jvw58tIHVuZCBLbGVpbnNjaHJlaWJ1bmciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzggYnVpbHRpbi90YWcuYzo0MzgKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAiZsO8ciBkaWUgQXVzZ2FiZSB6dSB2ZXJ3ZW5kZW5kZXMgRm9ybWF0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY4NCBidWlsdGluL2Nsb25lLmM6Nzg1Cittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgIkhFQUQgd3VyZGUgbmljaHQgdW50ZXIgXCJyZWZzL2hlYWRzXCIgZ2VmdW5kZW4hIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcwOAorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC0tY29sdW1uIHVuZCAtLXZlcmJvc2Ugc2luZCBpbmtvbXBhdGliZWwuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyMyBidWlsdGluL2JyYW5jaC5jOjc3NyBidWlsdGluL2JyYW5jaC5jOjc4NgorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJCcmFuY2huYW1lIGVyZm9yZGVybGljaCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTMKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJ6dSBsb3NnZWzDtnN0ZW0gSEVBRCBrYW5uIGtlaW5lIEJlc2NocmVpYnVuZyBoaW50ZXJsZWd0IHdlcmRlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTgKK21zZ2lkICJjYW5ub3QgZWRpdCBkZXNjcmlwdGlvbiBvZiBtb3JlIHRoYW4gb25lIGJyYW5jaCIKK21zZ3N0ciAiQmVzY2hyZWlidW5nIHZvbiBtZWhyIGFscyBlaW5lbSBCcmFuY2gga2FubiBuaWNodCBiZWFyYmVpdGV0IHdlcmRlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWl0IG9uIGJyYW5jaCAnJXMnIHlldC4iCittc2dzdHIgIk5vY2gga2VpbiBDb21taXQgaW4gQnJhbmNoICclcycuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBicmFuY2ggbmFtZWQgJyVzJy4iCittc2dzdHIgIkJyYW5jaCAnJXMnIG5pY2h0IHZvcmhhbmRlbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzgzCittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgZm9yIGEgY29weSBvcGVyYXRpb24iCittc2dzdHIgInp1IHZpZWxlIEJyYW5jaGVzIGbDvHIgZWluZSBLb3BpZXJvcGVyYXRpb24gYW5nZWdlYmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5MgorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgYSByZW5hbWUgb3BlcmF0aW9uIgorbXNnc3RyICJ6dSB2aWVsZSBBcmd1bWVudGUgZsO8ciBlaW5lIFVtYmVuZW5uZW4tT3BlcmF0aW9uIGFuZ2VnZWJlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAienUgdmllbGUgQXJndW1lbnRlIGFuZ2VnZWJlbiwgdW0gVXBzdHJlYW0tQnJhbmNoIHp1IHNldHplbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisiS29ubnRlIGtlaW5lbiBuZXVlbiBVcHN0cmVhbS1CcmFuY2ggdm9uIEhFQUQgenUgJXMgc2V0emVuLCBkYSBkaWVzZXIgYXVmXG4iCisia2VpbmVuIEJyYW5jaCB6ZWlndC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODA0IGJ1aWx0aW4vYnJhbmNoLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoICclcyciCittc2dzdHIgIktlaW4gc29sY2hlciBCcmFuY2ggJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkJyYW5jaCAnJXMnIGV4aXN0aWVydCBuaWNodCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjEKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gdW5zZXQgdXBzdHJlYW0iCittc2dzdHIgIiIKKyJ6dSB2aWVsZSBBcmd1bWVudGUgYW5nZWdlYmVuLCB1bSBLb25maWd1cmF0aW9uIHp1IFVwc3RyZWFtLUJyYW5jaCB6dSAiCisiZW50ZmVybmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNQorbXNnaWQgImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyJLb25udGUgS29uZmlndXJhdGlvbiB6dSBVcHN0cmVhbS1CcmFuY2ggdm9uIEhFQUQgbmljaHQgZW50ZmVybmVuLCBkYSBkaWVzZXJcbiIKKyJhdWYga2VpbmVuIEJyYW5jaCB6ZWlndC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiQnJhbmNoICclcycgaGF0IGtlaW5lbiBVcHN0cmVhbS1CcmFuY2ggZ2VzZXR6dCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDEKK21zZ2lkICIiCisiVGhlIC1hLCBhbmQgLXIsIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCB0YWtlIGEgYnJhbmNoIG5hbWUuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHVzZTogLWF8LXIgLS1saXN0IDxwYXR0ZXJuPj8iCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uZW4gLWEgdW5kIC1yIGJlaSAnZ2l0IGJyYW5jaCcga8O2bm5lbiBuaWNodCBtaXQgZWluZW0gQnJhbmNobmFtZW4gIgorInZlcndlbmRldCB3ZXJkZW4uXG4iCisiV29sbHRlbiBTaWUgLWF8LXIgLS1saXN0IDxNdXN0ZXI+IGJlbnV0emVuPyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDUKK21zZ2lkICIiCisidGhlICctLXNldC11cHN0cmVhbScgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgJy0tdHJhY2snIG9yICIKKyInLS1zZXQtdXBzdHJlYW0tdG8nIGluc3RlYWQuIgorbXNnc3RyICIiCisiRGllICctLXNldC11cHN0cmVhbScgT3B0aW9uIHdpcmQgbmljaHQgbMOkbmdlciB1bnRlcnN0w7x0enQuXG4iCisiQml0dGUgYmVudXR6ZW4gU2llIHN0YXR0ZGVzc2VuICctLXRyYWNrJyBvZGVyICctLXNldC11cHN0cmVhbS10bycuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE1IGJ1aWx0aW4vYnVuZGxlLmM6MjMKK21zZ2lkICJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxPcHRpb25lbj5dIDxEYXRlaT4gPGdpdC1yZXYtbGlzdCBBcmd1bWVudGU+IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2IGJ1aWx0aW4vYnVuZGxlLmM6MjgKK21zZ2lkICJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmlsZT4iCittc2dzdHIgImdpdCBidW5kbGUgdmVyaWZ5IFs8T3B0aW9uZW4+XSA8RGF0ZWk+IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE3IGJ1aWx0aW4vYnVuZGxlLmM6MzMKK21zZ2lkICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPERhdGVpPiBbPFJlZmVyZW56bmFtZT4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE4IGJ1aWx0aW4vYnVuZGxlLmM6MzgKK21zZ2lkICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8RGF0ZWk+IFs8UmVmZXJlbnpuYW1lPi4uLl0iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzc1Cittc2dpZCAiZG8gbm90IHNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgImtlaW5lIEZvcnRzY2hyaXR0c2FuemVpZ2UgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzc3Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAiRm9ydHNjaHJpdHRzYW56ZWlnZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNzkKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIKK21zZ3N0ciAiRm9yc2Nocml0dHNhbnplaWdlIHfDpGhyZW5kIGRlcyBTY2hyZWliZW5zIHZvbiBPYmpla3RlbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo3MyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODIKK21zZ2lkICJzaW1pbGFyIHRvIC0tYWxsLXByb2dyZXNzIHdoZW4gcHJvZ3Jlc3MgbWV0ZXIgaXMgc2hvd24iCittc2dzdHIgIsOkaG5saWNoIHp1IC0tYWxsLXByb2dyZXNzIHdlbm4gRm9ydHNjaHJpdHRzYW56ZWlnZSBkYXJzdGVsbHQgd2lyZCIKKworIzogYnVpbHRpbi9idW5kbGUuYzo5MworbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIlVtIGVpbiBQYWtldCB6dSBlcnN0ZWxsZW4gd2lyZCBlaW4gUmVwb3NpdG9yeSBiZW7DtnRpZ3QuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjEwNAorbXNnaWQgImRvIG5vdCBzaG93IGJ1bmRsZSBkZXRhaWxzIgorbXNnc3RyICJLZWluZSBCdW5kbGUtRGV0YWlscyBhbnplaWdlbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIlcyBpc3QgaW4gT3JkbnVuZ1xuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2MAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAiWnVtIEVudHBhY2tlbiB3aXJkIGVpbiBSZXBvc2l0b3J5IGJlbsO2dGlndC4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTY4NgorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgImVyd2VpdGVydGUgQXVzZ2FiZW47IG11c3Mgdm9yIGVpbmVtIFVudGVyYmVmZWhsIGFuZ2VnZWJlbiB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTkwIGJ1aWx0aW4vcmVtb3RlLmM6MTcxNworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJVbmJla2FubnRlciBVbnRlcmJlZmVobDogJXMiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTUKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgLSIKKyJwIHwgPHR5cGU+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD08cGF0aD5dIDxvYmplY3Q+IgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgLSIKKyJwIHwgPEFydD4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxQZmFkPl0gPE9iamVrdD4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTYKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjE3Cittc2dpZCAib25seSBvbmUgYmF0Y2ggb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQiCittc2dzdHIgIk51ciBlaW5lIEJhdGNoLU9wdGlvbiBlcmxhdWJ0LiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNQorbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiPEFydD4ga2FubiBzZWluOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNgorbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgIk9iamVrdGFydCBhbnplaWdlbiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNworbXNnaWQgInNob3cgb2JqZWN0IHNpemUiCittc2dzdHIgIk9iamVrdGdyw7bDn2UgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzkKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgIm1pdCBSw7xja2dhYmV3ZXJ0IDAgYmVlbmRlbiwgd2VubiBrZWluIEZlaGxlciBhdWZnZXRyZXRlbiBpc3QiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDAKK21zZ2lkICJwcmV0dHktcHJpbnQgb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiYW5zcHJlY2hlbmRlIEFuemVpZ2UgZGVzIE9iamVrdGluaGFsdGVzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQyCittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgImVpbmUgVGV4dGtvbnZlcnRpZXJ1bmcgYXVmIGRlbiBJbmhhbHQgdm9uIEJsb2ItT2JqZWt0ZW4gYXVzZsO8aHJlbiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NAorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biBmaWx0ZXJzIG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgImbDvHIgQmxvYi1PYmpla3RlLCBGaWx0ZXIgYXVmIE9iamVrdC1JbmhhbHRlIGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDUgZ2l0LXN1Ym1vZHVsZS5zaDoxMDAyCittc2dpZCAiYmxvYiIKK21zZ3N0ciAiQmxvYiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NgorbXNnaWQgInVzZSBhIHNwZWNpZmljIHBhdGggZm9yIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorbXNnc3RyICJlaW5lbiBiZXN0aW1tdGVuIFBmYWQgZsO8ciAtLXRleHRjb252Ly0tZmlsdGVycyB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDgKK21zZ2lkICJhbGxvdyAtcyBhbmQgLXQgdG8gd29yayB3aXRoIGJyb2tlbi9jb3JydXB0IG9iamVjdHMiCittc2dzdHIgIi1zIHVuZCAtdCBtaXQgYmVzY2jDpGRpZ3RlbiBPYmpla3RlbiBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0OQorbXNnaWQgImJ1ZmZlciAtLWJhdGNoIG91dHB1dCIKK21zZ3N0ciAiQXVzZ2FiZSB2b24gLS1iYXRjaCBwdWZmZXJuIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjUxCittc2dpZCAic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisiQW56ZWlnZSB2b24gSW5mb3JtYXRpb25lbiB1bmQgSW5oYWx0IHZvbiBPYmpla3RlbiwgZ2VsZXNlbiB2b24gZGVyIFN0YW5kYXJkLSIKKyJFaW5nYWJlIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU1Cittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisiQW56ZWlnZSB2b24gSW5mb3JtYXRpb25lbiDDvGJlciBPYmpla3RlLCBnZWxlc2VuIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1OQorbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAiIgorInN5bWJvbGlzY2hlbiBWZXJrbsO8cGZ1bmdlbiBpbm5lcmhhbGIgZGVzIFJlcG9zaXRvcmllcyBmb2xnZW4gKHZlcndlbmRldCBtaXQgIgorIi0tYmF0Y2ggb2RlciAtLWJhdGNoLWNoZWNrKSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MQorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgImFsbGUgT2JqZWt0ZSBtaXQgLS1iYXRjaCBvZGVyIC0tYmF0Y2gtY2hlY2sgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjMKK21zZ2lkICJkbyBub3Qgb3JkZXIgLS1iYXRjaC1hbGwtb2JqZWN0cyBvdXRwdXQiCittc2dzdHIgIkF1c2dhYmUgdm9uIC0tYmF0Y2gtYWxsLW9iamVjdHMgbmljaHQgb3JkbmVuIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMworbXNnaWQgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxwYXRobmFtZT4uLi4iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPEF0dHJpYnV0Pi4uLl0gWy0tXSA8UGZhZG5hbWU+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxNAorbXNnaWQgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxBdHRyaWJ1dD4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAiYWxsZSBBdHRyaWJ1dGUgZWluZXIgRGF0ZWkgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIyCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIm51ciAuZ2l0YXR0cmlidXRlcyB2b20gSW5kZXggdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI1IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDIKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAiRGF0ZWluYW1lbiB2b24gZGVyIFN0YW5kYXJkLUVpbmdhYmUgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjI1IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjcKK21zZ2lkICJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiRWludHLDpGdlIHZvbiBFaW4tIHVuZCBBdXNnYWJlIG1pdCBOVUwtWmVpY2hlbiBhYnNjaGxpZcOfZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjEgYnVpbHRpbi9jaGVja291dC5jOjE0NjQgYnVpbHRpbi9nYy5jOjUzNworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5OQorbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiRm9ydHNjaHJpdHRzYW56ZWlnZSB1bnRlcmRyw7xja2VuIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI5Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgaW5wdXQgcGF0aHMiCittc2dzdHIgIkVpbmdhYmUtUGZhZGUgb2huZSDDnGJlcmVpbnN0aW1tdW5nZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MzEKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAiSW5kZXggYmVpIGRlciBQcsO8ZnVuZyBpZ25vcmllcmVuIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MworbXNnaWQgImNhbm5vdCBzcGVjaWZ5IHBhdGhuYW1lcyB3aXRoIC0tc3RkaW4iCittc2dzdHIgIkFuZ2FiZSB2b24gUGZhZG5hbWVuIGthbm4gbmljaHQgZ2VtZWluc2FtIG1pdCAtLXN0ZGluIHZlcndlbmRldCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY2Cittc2dpZCAiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iCittc2dzdHIgIkRpZSBPcHRpb24gLXoga2FubiBudXIgbWl0IC0tc3RkaW4gdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY4Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgImtlaW4gUGZhZCBhbmdlZ2ViZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTcyCittc2dpZCAiLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCittc2dzdHIgIkRpZSBPcHRpb24gLS1xdWlldCBpc3QgbnVyIG1pdCBlaW5lbSBlaW56ZWxuZW4gUGZhZG5hbWVuIGfDvGx0aWcuIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3NAorbXNnaWQgImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIgorbXNnc3RyICIiCisiRGllIE9wdGlvbmVuIC0tcXVpZXQgdW5kIC0tdmVyYm9zZSBrw7ZubmVuIG5pY2h0IGdlbWVpbnNhbSB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzcKK21zZ2lkICItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIgorbXNnc3RyICItLW5vbi1tYXRjaGluZyBpc3QgbnVyIG1pdCAtLXZlcmJvc2UgenVsw6Rzc2lnIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo5Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stbWFpbG1hcCBbPE9wdGlvbmVuPl0gPEtvbnRha3Q+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoxNAorbXNnaWQgImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICJlYmVuZmFsbHMgS29udGFrdGUgdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29udGFjdDogJXMiCittc2dzdHIgIktvbm50ZSBLb250YWt0ICclcycgbmljaHQgcGFyc2VuLiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6NDgKK21zZ2lkICJubyBjb250YWN0cyBzcGVjaWZpZWQiCittc2dzdHIgImtlaW5lIEtvbnRha3RlIGFuZ2VnZWJlbiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjEzMQorbXNnaWQgImdpdCBjaGVja291dC1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2tvdXQtaW5kZXggWzxPcHRpb25lbj5dIFstLV0gWzxEYXRlaT4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTQ4Cittc2dpZCAic3RhZ2Ugc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMyBvciBhbGwiCittc2dzdHIgIi0tc3RhZ2Ugc29sbHRlIHp3aXNjaGVuIDEgdW5kIDMgb2RlciAnYWxsJyBzZWluIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY0Cittc2dpZCAiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiCittc2dzdHIgImFsbGUgRGF0ZWllbiBpbSBJbmRleCBhdXNjaGVja2VuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY1Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICJkYXMgw5xiZXJzY2hyZWliZW4gYmVyZWl0cyBleGlzdGllcmVuZGVyIERhdGVpZW4gZXJ6d2luZ2VuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY3Cittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAiIgorImtlaW5lIFdhcm51bmcgZsO8ciBleGlzdGllcmVuZGUgRGF0ZWllbiwgdW5kIERhdGVpZW4sIGRpZSBzaWNoIG5pY2h0IGltIEluZGV4ICIKKyJiZWZpbmRlbiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2OQorbXNnaWQgImRvbid0IGNoZWNrb3V0IG5ldyBmaWxlcyIKK21zZ3N0ciAia2VpbmUgbmV1ZW4gRGF0ZWllbiBhdXNjaGVja2VuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTcxCittc2dpZCAidXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGZpbGUiCittc2dzdHIgIkRhdGVpaW5mb3JtYXRpb25lbiBpbiBkZXIgSW5kZXgtRGF0ZWkgYWt0dWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiZWluZSBMaXN0ZSB2b24gUGZhZGVuIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSBsZXNlbiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NworbXNnaWQgIndyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcyIKK21zZ3N0ciAiZGVuIEluaGFsdCBpbiB0ZW1wb3LDpHJlIERhdGVpZW4gc2NocmVpYmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc4IGJ1aWx0aW4vY29sdW1uLmM6MzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAzCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxMSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwOQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY3MgorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAiWmVpY2hlbmtldHRlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc5Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAiIgorIndlbm4gRGF0ZWllbiBlcnpldWd0IHdlcmRlbiwgc3RlbGxlIDxaZWljaGVua2V0dGU+IGRlbSBEYXRlaW5hbWVuIHZvcmFuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTgxCittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgIkRhdGVpZW4gdm9uIGRlbSBiZW5hbm50ZW4gU3RhbmQga29waWVyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMQorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8T3B0aW9uZW4+XSA8QnJhbmNoPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMyCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxPcHRpb25lbj5dIFs8QnJhbmNoPl0gLS0gPERhdGVpPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3Cittc2dpZCAiZ2l0IHN3aXRjaCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIgorbXNnc3RyICJnaXQgc3dpdGNoIFs8T3B0aW9uZW4+XSBbPEJyYW5jaD5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIKK21zZ2lkICJnaXQgcmVzdG9yZSBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PGJyYW5jaD5dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc3RvcmUgWzxPcHRpb25lbj5dIFstLXNvdXJjZT08QnJhbmNoPl0gPERhdGVpPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NSBidWlsdGluL2NoZWNrb3V0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIgorbXNnc3RyICJQZmFkICclcycgaGF0IG5pY2h0IHVuc2VyZSBWZXJzaW9uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NyBidWlsdGluL2NoZWNrb3V0LmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIlBmYWQgJyVzJyBoYXQgbmljaHQgZGVyZW4gVmVyc2lvbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgYWxsIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAiUGZhZCAnJXMnIGhhdCBuaWNodCBhbGxlIG5vdHdlbmRpZ2VuIFZlcnNpb25lbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJQZmFkICclcycgaGF0IG5pY2h0IGRpZSBub3R3ZW5kaWdlbiBWZXJzaW9uZW4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJzogY2Fubm90IG1lcmdlIgorbXNnc3RyICJQZmFkICclcyc6IGthbm4gbmljaHQgenVzYW1tZW5mw7xocmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgbWVyZ2UgcmVzdWx0IGZvciAnJXMnIgorbXNnc3RyICJLb25udGUgTWVyZ2UtRXJnZWJuaXMgdm9uICclcycgbmljaHQgaGluenVmw7xnZW4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiJWQgTWVyZ2UtS29uZmxpa3Qgd2llZGVyIGVyc3RlbGx0IgorbXNnc3RyWzFdICIlZCBNZXJnZS1Lb25mbGlrdGUgd2llZGVyIGVyc3RlbGx0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tICVzIgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gJXMiCittc2dzdHJbMF0gIiVkIFBmYWQgdm9uICVzIGFrdHVhbGlzaWVydCIKK21zZ3N0clsxXSAiJWQgUGZhZGUgdm9uICVzIGFrdHVhbGlzaWVydCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkICVkIHBhdGggZnJvbSB0aGUgaW5kZXgiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSB0aGUgaW5kZXgiCittc2dzdHJbMF0gIiVkIFBmYWQgdm9tIEluZGV4IGFrdHVhbGlzaWVydCIKK21zZ3N0clsxXSAiJWQgUGZhZGUgdm9tIEluZGV4IGFrdHVhbGlzaWVydCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQxMiBidWlsdGluL2NoZWNrb3V0LmM6NDE1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTgKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIgorbXNnc3RyICInJXMnIGthbm4gbmljaHQgbWl0IGRlciBBa3R1YWxpc2llcnVuZyB2b24gUGZhZGVuIHZlcndlbmRldCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjUgYnVpbHRpbi9jaGVja291dC5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiclcycga2FubiBuaWNodCBtaXQgJyVzJyB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAiIgorIkthbm4gbmljaHQgZ2xlaWNoemVpdGlnIFBmYWRlIGFrdHVhbGlzaWVyZW4gdW5kIHp1IEJyYW5jaCAnJXMnIHdlY2hzZWxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5laXRoZXIgJyVzJyBvciAnJXMnIGlzIHNwZWNpZmllZCIKK21zZ3N0ciAiV2VkZXIgJyVzJyBub2NoICclcycgaXN0IGFuZ2VnZWJlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgdXNlZCB3aGVuICclcycgaXMgbm90IHNwZWNpZmllZCIKK21zZ3N0ciAiJyVzJyBrYW5uIG51ciBnZW51dHp0IHdlcmRlbiwgd2VubiAnJXMnIG5pY2h0IHZlcndlbmRldCB3aXJkIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQ1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBvciAnJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiclcycgb2RlciAnJXMnIGthbm4gbmljaHQgbWl0ICVzIHZlcndlbmRldCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MDkgYnVpbHRpbi9jaGVja291dC5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgaXMgdW5tZXJnZWQiCittc2dzdHIgIlBmYWQgJyVzJyBpc3QgbmljaHQgenVzYW1tZW5nZWbDvGhydC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2ODQgYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoxMDYKK21zZ2lkICJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAiU2llIG3DvHNzZW4genVlcnN0IGRpZSBLb25mbGlrdGUgaW4gSWhyZW0gYWt0dWVsbGVuIEluZGV4IGF1ZmzDtnNlbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBjb250aW51ZSB3aXRoIHN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJLYW5uIG5pY2h0IG1pdCB2b3JnZW1lcmt0ZW4gw4RuZGVydW5nZW4gaW4gZm9sZ2VuZGVuIERhdGVpZW4gZm9ydHNldHplbjpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiS2FubiBcInJlZmxvZ1wiIGbDvHIgJyVzJyBuaWNodCBkdXJjaGbDvGhyZW46ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NzkKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCBpc3QgamV0enQgYmVpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODgzIGJ1aWx0aW4vY2xvbmUuYzo3MTcKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIEhFQUQiCittc2dzdHIgIktvbm50ZSBIRUFEIG5pY2h0IGFrdHVhbGlzaWVyZW4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlNldHplIEJyYW5jaCAnJXMnIG5ldVxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICJCZXJlaXRzIGF1ZiAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlp1IHVtZ2VzZXR6dGVtIEJyYW5jaCAnJXMnIGdld2VjaHNlbHRcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NiBidWlsdGluL2NoZWNrb3V0LmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJadSBuZXVlbSBCcmFuY2ggJyVzJyBnZXdlY2hzZWx0XG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiWnUgQnJhbmNoICclcycgZ2V3ZWNoc2VsdFxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4gdW5kICVkIHdlaXRlcmUuXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKKyJXYXJudW5nOiBTaWUgbGFzc2VuICVkIENvbW1pdCB6dXLDvGNrLiBGb2xnZW5kZXIgQ29tbWl0IGlzdCBpblxuIgorImtlaW5lbSBJaHJlciBCcmFuY2hlcyBlbnRoYWx0ZW46XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clsxXSAiIgorIldhcm51bmc6IFNpZSBsYXNzZW4gJWQgQ29tbWl0cyB6dXLDvGNrLiBGb2xnZW5kZSBDb21taXRzIHNpbmQgaW5cbiIKKyJrZWluZW0gSWhyZXIgQnJhbmNoZXMgZW50aGFsdGVuOlxuIgorIlxuIgorIiVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgaXQgYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ2lkX3BsdXJhbCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzBdICIiCisiV2VubiBTaWUgZGllc2UgZHVyY2ggZWluZW4gbmV1ZW4gQnJhbmNoIGJlaGFsdGVuIG3DtmNodGVuLCBkYW5uIGvDtm5udGUgamV0enRcbiIKKyJlaW4gZ3V0ZXIgWmVpdHB1bmt0IHNlaW4sIGRpZXMgenUgdHVuIG1pdDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV1ZXItQnJhbmNobmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clsxXSAiIgorIldlbm4gU2llIGRpZXNlIGR1cmNoIGVpbmVuIG5ldWVuIEJyYW5jaCBiZWhhbHRlbiBtw7ZjaHRlbiwgZGFubiBrw7ZubnRlIGpldHp0XG4iCisiZWluIGd1dGVyIFplaXRwdW5rdCBzZWluLCBkaWVzIHp1IHR1biBtaXQ6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldWVyLUJyYW5jaG5hbWU+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA5Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAiaW50ZXJuZXIgRmVobGVyIGltIFJldmlzaW9uc2dhbmciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDEzCittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgIlZvcmhlcmlnZSBQb3NpdGlvbiB2b24gSEVBRCB3YXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDUzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzE1Cittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiU2llIHNpbmQgYXVmIGVpbmVtIEJyYW5jaCwgZGVyIG5vY2ggbmljaHQgZ2Vib3JlbiBpc3QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvdWxkIGJlIGJvdGggYSBsb2NhbCBmaWxlIGFuZCBhIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJQbGVhc2UgdXNlIC0tIChhbmQgb3B0aW9uYWxseSAtLW5vLWd1ZXNzKSB0byBkaXNhbWJpZ3VhdGUiCittc2dzdHIgIiIKKyInJXMnIGvDtm5udGUgZWluZSBsb2thbGUgRGF0ZWkgdW5kIGVpbiBUcmFja2luZy1CcmFuY2ggc2Vpbi5cbiIKKyJCaXR0ZSBiZW51dHplbiBTaWUgLS0gKHVuZCBvcHRpb25hbCAtLW5vLWd1ZXNzKSwgdW0gZGllc2VcbiIKKyJlaW5kZXV0aWcgdm9uZWluYW5kZXIgenUgdW50ZXJzY2hlaWRlbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM1Cittc2dpZCAiIgorIklmIHlvdSBtZWFudCB0byBjaGVjayBvdXQgYSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIG9uLCBlLmcuICdvcmlnaW4nLFxuIgorInlvdSBjYW4gZG8gc28gYnkgZnVsbHkgcXVhbGlmeWluZyB0aGUgbmFtZSB3aXRoIHRoZSAtLXRyYWNrIG9wdGlvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luLzxuYW1lPlxuIgorIlxuIgorIklmIHlvdSdkIGxpa2UgdG8gYWx3YXlzIGhhdmUgY2hlY2tvdXRzIG9mIGFuIGFtYmlndW91cyA8bmFtZT4gcHJlZmVyXG4iCisib25lIHJlbW90ZSwgZS5nLiB0aGUgJ29yaWdpbicgcmVtb3RlLCBjb25zaWRlciBzZXR0aW5nXG4iCisiY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW4gaW4geW91ciBjb25maWcuIgorbXNnc3RyICIiCisiRmFsbHMgU2llIGVpbmVuIFJlbW90ZS1UcmFja2luZy1CcmFuY2gsIHouQi4gdm9uICdvcmlnaW4nLCBhdXNjaGVja2VuICIKKyJ3b2xsdGVuLFxuIgorImvDtm5uZW4gU2llIGRhcyB0dW4sIGluZGVtIFNpZSBkZW4gdm9sbHN0w6RuZGlnIHF1YWxpZml6aWVydGVuIE5hbWVuIG1pdCBkZXJcbiIKKyItLXRyYWNrIE9wdGlvbiBhbmdlYmVuOlxuIgorIlxuIgorIiAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4vPE5hbWU+XG4iCisiXG4iCisiRmFsbHMgU2llIGJlaW0gQXVzY2hlY2tlbiBtaXQgbWVocmRldXRpZ2VuIDxOYW1lbj4gaW1tZXIgZWluIFJlbW90ZS0iCisiUmVwb3NpdG9yeVxuIgorImJldm9yenVnZW4gbcO2Y2h0ZW4sIHouQi4gJ29yaWdpbicsIGvDtm5uZW4gU2llIGRpZSBFaW5zdGVsbHVuZ1xuIgorImNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIGluIElocmVyIEtvbmZpZ3VyYXRpb24gc2V0emVuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtYXRjaGVkIG11bHRpcGxlICglZCkgcmVtb3RlIHRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICInJXMnIGVudHNwcmljaHQgbWVocmVyZW4gKCVkKSBSZW1vdGUtVHJhY2tpbmctQnJhbmNoZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjExCittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkIgorbXNnc3RyICJudXIgZWluZSBSZWZlcmVueiBlcndhcnRldCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iCittc2dzdHIgIm51ciBlaW5lIFJlZmVyZW56IGVyd2FydGV0LCAlZCBnZWdlYmVuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNzQgYnVpbHRpbi93b3JrdHJlZS5jOjI4MyBidWlsdGluL3dvcmt0cmVlLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBSZWZlcmVuejogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjg3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAiUmVmZXJlbnogaXN0IGtlaW4gXCJUcmVlXCItT2JqZWt0OiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCB0YWcgJyVzJyIKK21zZ3N0ciAiRWluIEJyYW5jaCB3aXJkIGVyd2FydGV0LCBUYWcgJyVzJyBiZWtvbW1lbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCByZW1vdGUgYnJhbmNoICclcyciCittc2dzdHIgIkVpbiBCcmFuY2ggd2lyZCBlcndhcnRldCwgUmVtb3RlLUJyYW5jaCAnJXMnIGJla29tbWVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNyBidWlsdGluL2NoZWNrb3V0LmM6MTM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290ICclcyciCittc2dzdHIgIkVpbiBCcmFuY2ggd2lyZCBlcndhcnRldCwgJyVzJyBiZWtvbW1lbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCBjb21taXQgJyVzJyIKK21zZ3N0ciAiRWluIEJyYW5jaCB3aXJkIGVyd2FydGV0LCBDb21taXQgJyVzJyBiZWtvbW1lbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNTYKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgbWVyZ2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IG1lcmdlIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIkRlciBCcmFuY2gga2FubiBuaWNodCB3w6RocmVuZCBlaW5lcyBNZXJnZXMgZ2V3ZWNoc2VsdCB3ZXJkZW4uXG4iCisiWmllaGVuIFNpZSBcImdpdCBtZXJnZSAtLXF1aXRcIiBvZGVyIFwiZ2l0IHdvcmt0cmVlIGFkZFwiIGluIEJldHJhY2h0LiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjAKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uXG4iCisiQ29uc2lkZXIgXCJnaXQgYW0gLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisiRGVyIEJyYW5jaCBrYW5uIG5pY2h0IHfDpGhyZW5kIGVpbmVzIGxhdWZlbmRlbiAnYW0nLUJlZmVobHMgZ2V3ZWNoc2VsdCAiCisid2VyZGVuLlxuIgorIlppZWhlbiBTaWUgXCJnaXQgYW0gLS1xdWl0XCIgb2RlciBcImdpdCB3b3JrdHJlZSBhZGRcIiBpbiBCZXRyYWNodC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY0Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJlYmFzaW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgcmViYXNlIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIkRlciBCcmFuY2gga2FubiBuaWNodCB3w6RocmVuZCBlaW5lcyBsYXVmZW5kZW4gJ3JldmVydCctQmVmZWhscyBnZXdlY2hzZWx0ICIKKyJ3ZXJkZW4uXG4iCisiWmllaGVuIFNpZSBcImdpdCByZWJhc2UgLS1xdWl0XCIgb2RlciBcImdpdCB3b3JrdHJlZSBhZGRcIiBpbiBCZXRyYWNodC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY4Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIGNoZXJyeS1waWNraW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisiRGVyIEJyYW5jaCBrYW5uIG5pY2h0IHfDpGhyZW5kIGVpbmVzIGxhdWZlbmRlbiAnY2hlcnJ5LXBpY2snLUJlZmVobHMgIgorImdld2VjaHNlbHQgd2VyZGVuLlxuIgorIlppZWhlbiBTaWUgXCJnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0XCIgb2RlciBcImdpdCB3b3JrdHJlZSBhZGRcIiBpbiBCZXRyYWNodC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzcyCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJldmVydGluZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJldmVydCAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJEZXIgQnJhbmNoIGthbm4gbmljaHQgd8OkaHJlbmQgZWluZXMgbGF1ZmVuZGVuICdyZXZlcnQnLUJlZmVobHMgZ2V3ZWNoc2VsdCAiCisid2VyZGVuLlxuIgorIlppZWhlbiBTaWUgXCJnaXQgcmV2ZXJ0IC0tcXVpdFwiIG9kZXIgXCJnaXQgd29ya3RyZWUgYWRkXCIgaW4gQmV0cmFjaHQuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM3NgorbXNnaWQgInlvdSBhcmUgc3dpdGNoaW5nIGJyYW5jaCB3aGlsZSBiaXNlY3RpbmciCittc2dzdHIgIlNpZSB3ZWNoc2VsbiBkZW4gQnJhbmNoIHfDpGhyZW5kIGVpbmVyIGJpbsOkcmVuIFN1Y2hlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4MworbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICJQZmFkZSBrw7ZubmVuIG5pY2h0IGJlaW0gV2VjaHNlbG4gdm9uIEJyYW5jaGVzIHZlcndlbmRldCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzg2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzkwIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIiclcycga2FubiBuaWNodCBiZWltIFdlY2hzZWxuIHZvbiBCcmFuY2hlcyB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5OCBidWlsdGluL2NoZWNrb3V0LmM6MTQwMSBidWlsdGluL2NoZWNrb3V0LmM6MTQwNAorIzogYnVpbHRpbi9jaGVja291dC5jOjE0MDkgYnVpbHRpbi9jaGVja291dC5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIiclcycga2FubiBuaWNodCBtaXQgJyVzJyB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQxMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCB0YWtlIDxzdGFydC1wb2ludD4iCittc2dzdHIgIiclcycga2FubiBuaWNodCA8U3RhcnRwdW5rdD4gYmVrb21tZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICJLYW5uIEJyYW5jaCBuaWNodCB6dSBOaWNodC1Db21taXQgJyVzJyB3ZWNoc2VsbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MjYKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBvciBjb21taXQgYXJndW1lbnQiCittc2dzdHIgIkJyYW5jaC0gb2RlciBDb21taXQtQXJndW1lbnQgZmVobHQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDY4IGJ1aWx0aW4vY2xvbmUuYzo5MSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjcyCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNSBidWlsdGluL2ZldGNoLmM6MTY3IGJ1aWx0aW4vbWVyZ2UuYzoyODYKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI3IGJ1aWx0aW4vcHVsbC5jOjExOCBidWlsdGluL3B1c2guYzo1NjMKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc0Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJGb3J0c2Nocml0dHNhbnplaWdlIGVyendpbmdlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjkKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiZWluZW4gMy1XZWdlLU1lcmdlIG1pdCBkZW0gbmV1ZW4gQnJhbmNoIGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDcwIGJ1aWx0aW4vbG9nLmM6MTY5MCBwYXJzZS1vcHRpb25zLmg6MzIyCittc2dpZCAic3R5bGUiCittc2dzdHIgIlN0aWwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDcxCittc2dpZCAiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIKK21zZ3N0ciAiS29uZmxpa3RzdGlsIChtZXJnZSBvZGVyIGRpZmYzKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODMgYnVpbHRpbi93b3JrdHJlZS5jOjQ5NgorbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAiSEVBRCBiZWkgYmVuYW5udGVtIENvbW1pdCBsb3Nsw7ZzZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg0Cittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgIkluZm9ybWF0aW9uZW4genVtIFVwc3RyZWFtLUJyYW5jaCBmw7xyIGRlbiBuZXVlbiBCcmFuY2ggc2V0emVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4NgorbXNnaWQgImZvcmNlIGNoZWNrb3V0ICh0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMpIgorbXNnc3RyICJBdXNjaGVja2VuIGVyendpbmdlbiAodmVyd2lyZnQgbG9rYWxlIMOEbmRlcnVuZ2VuKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODgKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICJuZXVlciBCcmFuY2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg4Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICJuZXVlciBCcmFuY2ggb2huZSBFbHRlcm4tQ29tbWl0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ5MCBidWlsdGluL21lcmdlLmM6Mjg5Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICJpZ25vcmllcnRlIERhdGVpZW4gYWt0dWFsaXNpZXJlbiAoU3RhbmRhcmQpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ5MworbXNnaWQgImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIKK21zZ3N0ciAiIgorIlByw7xmdW5nLCBvYiBkaWUgUmVmZXJlbnogYmVyZWl0cyBpbiBlaW5lbSBhbmRlcmVuIEFyYmVpdHN2ZXJ6ZWljaG5pcyAiCisiYXVzZ2VjaGVja3Qgd3VyZGUsIGRlYWt0aXZpZXJlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MDYKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgInVuc2VyZSBWYXJpYW50ZSBmw7xyIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4gYXVzY2hlY2tlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MDkKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiaWhyZSBWYXJpYW50ZSBmw7xyIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4gYXVzY2hlY2tlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MTMKK21zZ2lkICJkbyBub3QgbGltaXQgcGF0aHNwZWNzIHRvIHNwYXJzZSBlbnRyaWVzIG9ubHkiCittc2dzdHIgImtlaW5lIEVpbnNjaHLDpG5rdW5nIGJlaSBQZmFkc3BlemlmaWthdGlvbmVuIHp1bSBwYXJ0aWVsbGVuIEF1c2NoZWNrZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTY1Cittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLWIsIC1CIHVuZCAtLW9ycGhhbiBzY2hsaWXDn2VuIHNpY2ggZ2VnZW5zZWl0aWcgYXVzLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NjgKK21zZ2lkICItcCBhbmQgLS1vdmVybGF5IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1wIHVuZCAtLW92ZXJsYXkgc2NobGllw59lbiBzaWNoIGdlZ2Vuc2VpdGlnIGF1cy4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjA1Cittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICJCZWkgZGVyIE9wdGlvbiAtLXRyYWNrIG11c3MgZWluIEJyYW5jaG5hbWUgYW5nZWdlYmVuIHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjEwCittc2dpZCAibWlzc2luZyBicmFuY2ggbmFtZTsgdHJ5IC1iIgorbXNnc3RyICJLZWluIEJyYW5jaG5hbWU7IHZlcnN1Y2hlbiBTaWUgLWIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAlcyIKK21zZ3N0ciAiS29ubnRlICVzIG5pY2h0IGF1ZmzDtnNlbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjU4Cittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgInVuZ8O8bHRpZ2UgUGZhZHNwZXppZmlrYXRpb24iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIiIKKyInJXMnIGlzdCBrZWluIENvbW1pdCB1bmQgZXMga2FubiBrZWluIEJyYW5jaCAnJXMnIGF1cyBkaWVzZW0gZXJzdGVsbHQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIG5pbW10IGtlaW4gUGZhZC1Bcmd1bWVudCAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY3OAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZGV0YWNoIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1wYXRoc3BlYy1mcm9tLWZpbGUgdW5kIC0tZGV0YWNoIHNpbmQgaW5rb21wYXRpYmVsLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2ODEgYnVpbHRpbi9yZXNldC5jOjMyNCBidWlsdGluL3N0YXNoLmM6MTUwNgorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giCittc2dzdHIgIkRpZSBPcHRpb25lbiAtLXBhdGhzcGVjLWZyb20tZmlsZSB1bmQgLS1wYXRjaCBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjkyCittc2dpZCAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgdW5kIC0tbWVyZ2Ugc2luZCBpbmtvbXBhdGliZWwgd2VublxuIgorIlNpZSBhdXMgZGVtIEluZGV4IGF1c2NoZWNrZW4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY5NworbXNnaWQgInlvdSBtdXN0IHNwZWNpZnkgcGF0aChzKSB0byByZXN0b3JlIgorbXNnc3RyICJTaWUgbcO8c3NlbiBQZmFkKGUpIHp1ciBXaWVkZXJoZXJzdGVsbHVuZyBhbmdlYmVuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjMgYnVpbHRpbi9jaGVja291dC5jOjE3MjUgYnVpbHRpbi9jaGVja291dC5jOjE3NzQKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc2IGJ1aWx0aW4vY2xvbmUuYzoxMjEgYnVpbHRpbi9yZW1vdGUuYzoxNzAKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcyIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTIgYnVpbHRpbi93b3JrdHJlZS5jOjQ5NAorbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAiQnJhbmNoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyNAorbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICJlaW5lbiBuZXVlbiBCcmFuY2ggZXJ6ZXVnZW4gdW5kIGF1c2NoZWNrZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI2Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAiZWluZW4gQnJhbmNoIGVyc3RlbGxlbi91bXNldHplbiB1bmQgYXVzY2hlY2tlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjcKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICJkYXMgUmVmbG9nIGbDvHIgZGVuIG5ldWVuIEJyYW5jaCBlcnpldWdlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjkKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBjaGVja291dCA8bm8tc3VjaC1icmFuY2g+JyAoZGVmYXVsdCkiCittc2dzdHIgIlp3ZWl0ZSBWZXJtdXR1bmcgJ2dpdCBjaGVja291dCA8a2Vpbi1zb2xjaGVyLUJyYW5jaD4nIChTdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzMwCittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSAoZGVmYXVsdCkiCittc2dzdHIgImJlbnV0emUgT3ZlcmxheS1Nb2R1cyAoU3RhbmRhcmQpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3NQorbXNnaWQgImNyZWF0ZSBhbmQgc3dpdGNoIHRvIGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAiZWluZW4gbmV1ZW4gQnJhbmNoIGVyemV1Z2VuIHVuZCBkYWhpbiB3ZWNoc2VsbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzcKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIHN3aXRjaCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiZWluZW4gQnJhbmNoIGVyc3RlbGxlbi91bXNldHplbiB1bmQgZGFoaW4gd2VjaHNlbG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc5Cittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgc3dpdGNoIDxuby1zdWNoLWJyYW5jaD4nIgorbXNnc3RyICJad2VpdGUgVmVybXV0dW5nICdnaXQgc3dpdGNoIDxrZWluLXNvbGNoZXItQnJhbmNoPiciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzgxCittc2dpZCAidGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zIgorbXNnc3RyICJsb2thbGUgw4RuZGVydW5nZW4gdmVyd2VyZmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMworbXNnaWQgIndoaWNoIHRyZWUtaXNoIHRvIGNoZWNrb3V0IGZyb20iCittc2dzdHIgIlZvbiB3ZWxjaGVyIENvbW1pdC1SZWZlcmVueiBhdXNnZWNoZWNrdCB3ZXJkZW4gc29sbCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTUKK21zZ2lkICJyZXN0b3JlIHRoZSBpbmRleCIKK21zZ3N0ciAiSW5kZXggd2llZGVyaGVyc3RlbGxlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTcKK21zZ2lkICJyZXN0b3JlIHRoZSB3b3JraW5nIHRyZWUgKGRlZmF1bHQpIgorbXNnc3RyICJkYXMgQXJiZWl0c3ZlcnplaWNobmlzIHdpZWRlcmhlcnN0ZWxsZW4gKFN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTkKK21zZ2lkICJpZ25vcmUgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiaWdub3JpZXJlIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIEVpbnRyw6RnZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MjAKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIgorbXNnc3RyICJiZW51dHplIE92ZXJsYXktTW9kdXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOAorbXNnaWQgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8TXVzdGVyPl0gWy14IHwgLVhdIFstLV0gPFBmYWRlPi4uLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIkzDtnNjaGUgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICJXw7xyZGUgJXMgbMO2c2NoZW5cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAiw5xiZXJzcHJpbmdlIFJlcG9zaXRvcnkgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJXw7xyZGUgUmVwb3NpdG9yeSAlcyDDvGJlcnNwcmluZ2VuXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMw7ZzY2hlbiB2b24gJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbHN0YXQgJXNcbiIKK21zZ3N0ciAiS29ubnRlICdsc3RhdCcgbmljaHQgZsO8ciAlcyBhdXNmw7xocmVuXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZ1xuIgorbXNnc3RyICIiCisiRWluZ2FiZWhpbGZlOlxuIgorIjEgICAgICAgICAgLSBudW1tZXJpZXJ0ZXMgRWxlbWVudCBhdXN3w6RobGVuXG4iCisiZm9vICAgICAgICAtIEVsZW1lbnQgYW5oYW5kIGVpbmVzIGVpbmRldXRpZ2VuIFByw6RmaXggYXVzd8OkaGxlblxuIgorIiAgICAgICAgICAgLSAobGVlcikgbmljaHRzIGF1c3fDpGhsZW5cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIHNpbmdsZSBpdGVtXG4iCisiMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zXG4iCisiMi0zLDYtOSAgICAtIHNlbGVjdCBtdWx0aXBsZSByYW5nZXNcbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIi0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXNcbiIKKyIqICAgICAgICAgIC0gY2hvb3NlIGFsbCBpdGVtc1xuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmdcbiIKK21zZ3N0ciAiIgorIkVpbmdhYmVoaWxmZTpcbiIKKyIxICAgICAgICAgIC0gZWluemVsbmVzIEVsZW1lbnQgYXVzd8OkaGxlblxuIgorIjMtNSAgICAgICAgLSBCZXJlaWNoIHZvbiBFbGVtZW50ZW4gYXVzd8OkaGxlblxuIgorIjItMyw2LTkgICAgLSBtZWhyZXJlIEJlcmVpY2hlIGF1c3fDpGhsZW5cbiIKKyJmb28gICAgICAgIC0gRWxlbWVudCBhbmhhbmQgZWluZXMgZWluZGV1dGlnZW4gUHLDpGZpeCBhdXN3w6RobGVuXG4iCisiLS4uLiAgICAgICAtIGFuZ2VnZWJlbmVzIEVsZW1lbnQgYWJ3w6RobGVuXG4iCisiKiAgICAgICAgICAtIGFsbGUgRWxlbWVudGUgYXVzd8OkaGxlblxuIgorIiAgICAgICAgICAgLSAobGVlcikgQXVzd2FobCBiZWVuZGVuXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTc1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT9cbiIKK21zZ3N0ciAiV2llIGJpdHRlICglcyk/XG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIgorbXNnc3RyICJJZ25vcmllci1NdXN0ZXIgZWluZ2ViZW4+PiAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogQ2Fubm90IGZpbmQgaXRlbXMgbWF0Y2hlZCBieTogJXMiCittc2dzdHIgIldBUk5VTkc6IEthbm4ga2VpbmUgRWludHLDpGdlIGZpbmRlbiBkaWUgTXVzdGVyIGVudHNwcmVjaGVuOiAlcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcyMQorbXNnaWQgIlNlbGVjdCBpdGVtcyB0byBkZWxldGUiCittc2dzdHIgIlfDpGhsZW4gU2llIEVpbnRyw6RnZSB6dW0gTMO2c2NoZW4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiJyVzJyBsw7ZzY2hlbiBbeS9OXT8gIgorCisjOiBidWlsdGluL2NsZWFuLmM6Nzk1Cittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gQ2xlYW4gc3RhcnRlblxuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBFaW50csOkZ2Ugdm9uIEzDtnNjaHVuZyBhdXNzY2hsaWXDn2VuXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIEF1c3dhaGwgdm9uIEVpbnRyw6RnZW4gw7xiZXIgTnVtbWVyblxuIgorImFzayBlYWNoICAgICAgICAgICAgLSBqZWRlIEzDtnNjaHVuZyBiZXN0w6R0aWdlbiAod2llIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gQ2xlYW4gYmVlbmRlblxuIgorImhlbHAgICAgICAgICAgICAgICAgLSBkaWVzZSBNZWxkdW5nIGFuemVpZ2VuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIEhpbGZlIHp1ciBBdXN3YWhsIG1pdHRlbHMgRWluZ2FiZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzMQorbXNnaWQgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IgorbXNnaWRfcGx1cmFsICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiCittc2dzdHJbMF0gIlfDvHJkZSBkYXMgZm9sZ2VuZGUgRWxlbWVudCBlbnRmZXJuZW46IgorbXNnc3RyWzFdICJXw7xyZGUgZGllIGZvbGdlbmRlbiBFbGVtZW50ZSBlbnRmZXJuZW46IgorCisjOiBidWlsdGluL2NsZWFuLmM6ODQ3Cittc2dpZCAiTm8gbW9yZSBmaWxlcyB0byBjbGVhbiwgZXhpdGluZy4iCittc2dzdHIgIktlaW5lIERhdGVpZW4gbWVociB6dW0gTMO2c2NoZW4sIGJlZW5kZS4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDkKK21zZ2lkICJkbyBub3QgcHJpbnQgbmFtZXMgb2YgZmlsZXMgcmVtb3ZlZCIKK21zZ3N0ciAia2VpbmUgTmFtZW4gdm9uIGdlbMO2c2NodGVuIERhdGVpZW4gYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTEKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAiQWt0aW9uIGVyendpbmdlbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMgorbXNnaWQgImludGVyYWN0aXZlIGNsZWFuaW5nIgorbXNnc3RyICJpbnRlcmFrdGl2ZXMgQ2xlYW4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTQKK21zZ2lkICJyZW1vdmUgd2hvbGUgZGlyZWN0b3JpZXMiCittc2dzdHIgImdhbnplIFZlcnplaWNobmlzc2UgbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTUgYnVpbHRpbi9kZXNjcmliZS5jOjU2MiBidWlsdGluL2Rlc2NyaWJlLmM6NTY0CisjOiBidWlsdGluL2dyZXAuYzo4ODkgYnVpbHRpbi9sb2cuYzoxNzcgYnVpbHRpbi9sb2cuYzoxNzkKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTcgYnVpbHRpbi9uYW1lLXJldi5jOjUyNiBidWlsdGluL25hbWUtcmV2LmM6NTI4CisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAicGF0dGVybiIKK21zZ3N0ciAiTXVzdGVyIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE2Cittc2dpZCAiYWRkIDxwYXR0ZXJuPiB0byBpZ25vcmUgcnVsZXMiCittc2dzdHIgIjxNdXN0ZXI+IHp1IGRlbiBSZWdlbG4gZsO8ciBpZ25vcmllcnRlIFBmYWRlIGhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE3Cittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAiYXVjaCBpZ25vcmllcnRlIERhdGVpZW4gbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTkKK21zZ2lkICJyZW1vdmUgb25seSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJudXIgaWdub3JpZXJ0ZSBEYXRlaWVuIGzDtnNjaGVuIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTM3Cittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLXggdW5kIC1YIGvDtm5uZW4gbmljaHQgZ2VtZWluc2FtIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTQxCittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBzZXQgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgcmVmdXNpbmcgdG8gIgorImNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGF1ZiBcInRydWVcIiBnZXNldHp0IHVuZCB3ZWRlciAtaSwgLW4gbm9jaCAtZiBnZWdlYmVuOyAiCisiXCJjbGVhblwiIHZlcndlaWdlcnQiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDQKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKyJyZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBzdGFuZGFyZG3DpMOfaWcgYXVmIFwidHJ1ZVwiIGdlc2V0enQgdW5kIHdlZGVyIC1pLCAtbiBub2NoIC0iCisiZiBnZWdlYmVuOyBcImNsZWFuXCIgdmVyd2VpZ2VydCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ1Cittc2dpZCAiZ2l0IGNsb25lIFs8b3B0aW9ucz5dIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgImdpdCBjbG9uZSBbPE9wdGlvbmVuPl0gWy0tXSA8UmVwb3NpdG9yeT4gWzxWZXJ6ZWljaG5pcz5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAia2VpbiBBdXNjaGVja2VuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQgYnVpbHRpbi9jbG9uZS5jOjk2IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4OQorbXNnaWQgImNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiZWluIEJhcmUtUmVwb3NpdG9yeSBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OAorbXNnaWQgImNyZWF0ZSBhIG1pcnJvciByZXBvc2l0b3J5IChpbXBsaWVzIGJhcmUpIgorbXNnc3RyICJlaW4gU3BpZWdlbGFyY2hpdiBlcnN0ZWxsZW4gKGltcGxpemllcnQgLS1iYXJlKSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMAorbXNnaWQgInRvIGNsb25lIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJ2b24gZWluZW0gbG9rYWxlbiBSZXBvc2l0b3J5IGtsb25lbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMgorbXNnaWQgImRvbid0IHVzZSBsb2NhbCBoYXJkbGlua3MsIGFsd2F5cyBjb3B5IgorbXNnc3RyICJsb2thbCBrZWluZSBoYXJ0ZW4gVmVyd2Vpc2UgdmVyd2VuZGVuLCBpbW1lciBLb3BpZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiYWxzIHZlcnRlaWx0ZXMgUmVwb3NpdG9yeSBlaW5yaWNodGVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAicGF0aHNwZWMiCittc2dzdHIgIlBmYWRzcGV6aWZpa2F0aW9uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIKK21zZ3N0ciAiU3VibW9kdWxlIGltIEtsb24gaW5pdGlhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIkFuemFobCBkZXIgcGFyYWxsZWwgenUga2xvbmVuZGVuIFN1Ym1vZHVsZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMSBidWlsdGluL2luaXQtZGIuYzo0ODYKK21zZ2lkICJ0ZW1wbGF0ZS1kaXJlY3RvcnkiCittc2dzdHIgIlZvcmxhZ2VudmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTIgYnVpbHRpbi9pbml0LWRiLmM6NDg3Cittc2dpZCAiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIKK21zZ3N0ciAiVmVyemVpY2huaXMsIHZvbiB3ZWxjaGVtIGRpZSBWb3JsYWdlbiB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE0IGJ1aWx0aW4vY2xvbmUuYzoxMTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDcKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTEyCittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgIlJlcG9zaXRvcnkgcmVmZXJlbnppZXJlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTQKK21zZ2lkICJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIgorbXNnc3RyICItLXJlZmVyZW5jZSBudXIgd8OkaHJlbmQgZGVzIEtsb25lbnMgYmVudXR6ZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTkgYnVpbHRpbi9jb2x1bW4uYzoyNyBidWlsdGluL21lcmdlLWZpbGUuYzo0NgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQxIGJ1aWx0aW4vcmVwYWNrLmM6MzI3Cittc2dpZCAibmFtZSIKK21zZ3N0ciAiTmFtZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMAorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAiPE5hbWU+IHN0YXR0ICdvcmlnaW4nIGbDvHIgVXBzdHJlYW0tUmVwb3NpdG9yeSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjIKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBpbnN0ZWFkIG9mIHRoZSByZW1vdGUncyBIRUFEIgorbXNnc3RyICI8QnJhbmNoPiBhdXNjaGVja2VuLCBhbnN0YXR0IEhFQUQgZGVzIFJlbW90ZS1SZXBvc2l0b3JpZXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQKK21zZ2lkICJwYXRoIHRvIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIgorbXNnc3RyICJQZmFkIHp1IFwiZ2l0LXVwbG9hZC1wYWNrXCIgYXVmIGRlciBHZWdlbnNlaXRlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI1IGJ1aWx0aW4vZmV0Y2guYzoxNjggYnVpbHRpbi9ncmVwLmM6ODI4CisjOiBidWlsdGluL3B1bGwuYzoyMDcKK21zZ2lkICJkZXB0aCIKK21zZ3N0ciAiVGllZmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjYKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoYXQgZGVwdGgiCittc2dzdHIgIiIKKyJlaW5lbiBLbG9uIG1pdCB1bnZvbGxzdMOkbmRpZ2VyIEhpc3RvcmllIChzaGFsbG93KSBpbiBkaWVzZXIgVGllZmUgZXJzdGVsbGVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI3IGJ1aWx0aW4vZmV0Y2guYzoxNzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDMwCittc2dpZCAidGltZSIKK21zZ3N0ciAiWmVpdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOAorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgc2luY2UgYSBzcGVjaWZpYyB0aW1lIgorbXNnc3RyICIiCisiZWluZW4gS2xvbiBtaXQgdW52b2xsc3TDpG5kaWdlciBIaXN0b3JpZSAoc2hhbGxvdykgc2VpdCBlaW5lciBiZXN0aW1tdGVuICIKKyJaZWl0XG4iCisiZXJzdGVsbGVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI5IGJ1aWx0aW4vZmV0Y2guYzoxNzIgYnVpbHRpbi9mZXRjaC5jOjE5NQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNDgwCittc2dpZCAicmV2aXNpb24iCittc2dzdHIgIkNvbW1pdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMCBidWlsdGluL2ZldGNoLmM6MTczCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSwgZXhjbHVkaW5nIHJldiIKK21zZ3N0ciAiIgorImRpZSBIaXN0b3JpZSBlaW5lcyBLbG9ucyBtaXQgdW52b2xsc3TDpG5kaWdlciBIaXN0b3JpZSAoc2hhbGxvdykgbWl0dGVsc1xuIgorIkF1c3NjaGx1c3MgZWluZXMgQ29tbWl0cyB2ZXJ0aWVmZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTI4Cittc2dpZCAiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIgorbXNnc3RyICJudXIgZWluZW4gQnJhbmNoIGtsb25lbiwgSEVBRCBvZGVyIC0tYnJhbmNoIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM0Cittc2dpZCAiZG9uJ3QgY2xvbmUgYW55IHRhZ3MsIGFuZCBtYWtlIGxhdGVyIGZldGNoZXMgbm90IHRvIGZvbGxvdyB0aGVtIgorbXNnc3RyICJrZWluZSBUYWdzIGtsb25lbiwgdW5kIGF1Y2ggYmVpIHNww6R0ZXJlbiBBYnJ1ZmVuIG5pY2h0IGJlYWNodGVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM2Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgYmUgc2hhbGxvdyIKK21zZ3N0ciAiamVkZXMgZ2VrbG9udGUgU3VibW9kdWwgbWl0IHVudm9sbHN0w6RuZGlnZXIgSGlzdG9yaWUgKHNoYWxsb3cpIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiLmdpdC1WZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOCBidWlsdGluL2luaXQtZGIuYzo0OTYKK21zZ2lkICJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIgorbXNnc3RyICJHaXQtVmVyemVpY2huaXMgdm9tIEFyYmVpdHN2ZXJ6ZWljaG5pcyBzZXBhcmllcmVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM5Cittc2dpZCAia2V5PXZhbHVlIgorbXNnc3RyICJTY2hsw7xzc2VsPVdlcnQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDAKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgIktvbmZpZ3VyYXRpb24gaW5uZXJoYWxiIGRlcyBuZXVlbiBSZXBvc2l0b3JpZXMgc2V0emVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQyIGJ1aWx0aW4vZmV0Y2guYzoxOTAgYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorIzogYnVpbHRpbi9wdXNoLmM6NTczIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTcyCittc2dpZCAic2VydmVyLXNwZWNpZmljIgorbXNnc3RyICJzZXJ2ZXJzcGV6aWZpc2NoIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQyIGJ1aWx0aW4vZmV0Y2guYzoxOTAgYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorIzogYnVpbHRpbi9wdXNoLmM6NTczIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTczCittc2dpZCAib3B0aW9uIHRvIHRyYW5zbWl0IgorbXNnc3RyICJPcHRpb24gw7xiZXJ0cmFnZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDMgYnVpbHRpbi9mZXRjaC5jOjE5MSBidWlsdGluL3B1bGwuYzoyMjAKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3NAorbXNnaWQgInVzZSBJUHY0IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICJudXIgSVB2NC1BZHJlc3NlbiBiZW51dHplbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0NSBidWlsdGluL2ZldGNoLmM6MTkzIGJ1aWx0aW4vcHVsbC5jOjIyMworIzogYnVpbHRpbi9wdXNoLmM6NTc2Cittc2dpZCAidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgIm51ciBJUHY2LUFkcmVzc2VuIGJlbnV0emVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ5Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgdXNlIHRoZWlyIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgImplZGVzIGdla2xvbnRlIFN1Ym1vZHVsIG51dHp0IHNlaW5lbiBSZW1vdGUtVHJhY2tpbmctQnJhbmNoIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTUxCittc2dpZCAiaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQgZmlsZSB0byBpbmNsdWRlIG9ubHkgZmlsZXMgYXQgcm9vdCIKK21zZ3N0ciAiIgorIkluaXRpYWxpc2llcmUgRGF0ZWkgZsO8ciBwYXJ0aWVsbGVuIENoZWNrb3V0LCB1bSBudXIgRGF0ZWllbiBpbVxuIgorIlJvb3QtVmVyemVpY2huaXMgZWluenViZXppZWhlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI4NworbXNnaWQgIiIKKyJObyBkaXJlY3RvcnkgbmFtZSBjb3VsZCBiZSBndWVzc2VkLlxuIgorIlBsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKyJLb25udGUga2VpbmVuIFZlcnplaWNobmlzbmFtZW4gZXJyYXRlbi5cbiIKKyJCaXR0ZSBnZWJlbiBTaWUgZWluIFZlcnplaWNobmlzIGF1ZiBkZXIgQmVmZWhsc3plaWxlIGFuLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZvOiBDb3VsZCBub3QgYWRkIGFsdGVybmF0ZSBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiaW5mbzogS29ubnRlIEFsdGVybmF0aXZlIGbDvHIgJyVzJyBuaWNodCBoaW56dWbDvGdlbjogJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXMgZXhpc3RpZXJ0IHVuZCBpc3Qga2VpbiBWZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhcnQgaXRlcmF0b3Igb3ZlciAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTdGFydGVuIGRlciBJdGVyYXRpb24gw7xiZXIgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAiS29ubnRlIFZlcndlaXMgJyVzJyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICJLb25udGUgRGF0ZWkgbmljaHQgbmFjaCAnJXMnIGtvcGllcmVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBpdGVyYXRlIG92ZXIgJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gSXRlcmllcmVuIMO8YmVyICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAiRmVydGlnLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTA4Cittc2dpZCAiIgorIkNsb25lIHN1Y2NlZWRlZCwgYnV0IGNoZWNrb3V0IGZhaWxlZC5cbiIKKyJZb3UgY2FuIGluc3BlY3Qgd2hhdCB3YXMgY2hlY2tlZCBvdXQgd2l0aCAnZ2l0IHN0YXR1cydcbiIKKyJhbmQgcmV0cnkgd2l0aCAnZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LydcbiIKK21zZ3N0ciAiIgorIktsb25lbiBlcmZvbGdyZWljaCwgQXVzY2hlY2tlbiBpc3QgYWJlciBmZWhsZ2VzY2hsYWdlbi5cbiIKKyJTaWUga8O2bm5lbiBtaXQgJ2dpdCBzdGF0dXMnIHByw7xmZW4sIHdhcyBhdXNnZWNoZWNrdCB3b3JkZW4gaXN0XG4iCisidW5kIGRhcyBBdXNjaGVja2VuIG1pdCAnZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LycgZXJuZXV0IHZlcnN1Y2hlbi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAiS29ubnRlIHp1IGtsb25lbmRlbiBSZW1vdGUtQnJhbmNoICVzIG5pY2h0IGZpbmRlbi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSAlcyIKK21zZ3N0ciAia2FubiAlcyBuaWNodCBha3R1YWxpc2llcmVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzUzCittc2dpZCAiZmFpbGVkIHRvIGluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJGZWhsZXIgYmVpbSBJbml0aWFsaXNpZXJlbiB2b20gcGFydGllbGxlbiBDaGVja291dC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NzYKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgIiIKKyJFeHRlcm5lciBIRUFEIGJlemllaHQgc2ljaCBhdWYgZWluZSBuaWNodCBleGlzdGllcmVuZGUgUmVmZXJlbnogdW5kIGthbm4gIgorIm5pY2h0IGF1c2dlY2hlY2t0IHdlcmRlbi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwNworbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgIkFyYmVpdHN2ZXJ6ZWljaG5pcyBrb25udGUgbmljaHQgYXVzZ2VjaGVja3Qgd2VyZGVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODYyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHBhcmFtZXRlcnMgdG8gY29uZmlnIGZpbGUiCittc2dzdHIgImtvbm50ZSBQYXJhbWV0ZXIgbmljaHQgaW4gS29uZmlndXJhdGlvbnNkYXRlaSBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjUKK21zZ2lkICJjYW5ub3QgcmVwYWNrIHRvIGNsZWFuIHVwIgorbXNnc3RyICJLYW5uIFwicmVwYWNrXCIgenVtIEF1ZnLDpHVtZW4gbmljaHQgYXVmcnVmZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjcKK21zZ2lkICJjYW5ub3QgdW5saW5rIHRlbXBvcmFyeSBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgIkthbm4gdGVtcG9yw6RyZSBcImFsdGVybmF0ZXNcIi1EYXRlaSBuaWNodCBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjUgYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTUwCittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzLiIKK21zZ3N0ciAiWnUgdmllbGUgQXJndW1lbnRlLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2OQorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAiU2llIG3DvHNzZW4gZWluIFJlcG9zaXRvcnkgenVtIEtsb25lbiBhbmdlYmVuLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4MgorIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIkRpZSBPcHRpb25lbiAtLWJhcmUgdW5kIC0tb3JpZ2luICVzIHNpbmQgaW5rb21wYXRpYmVsLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4NQorbXNnaWQgIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1iYXJlIHVuZCAtLXNlcGFyYXRlLWdpdC1kaXIgc2luZCBpbmtvbXBhdGliZWwuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiUmVwb3NpdG9yeSAnJXMnIGV4aXN0aWVydCBuaWNodC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDA0IGJ1aWx0aW4vZmV0Y2guYzoxNzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiVGllZmUgJXMgaXN0IGtlaW5lIHBvc2l0aXZlIFphaGwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIlppZWxwZmFkICclcycgZXhpc3RpZXJ0IGJlcmVpdHMgdW5kIGlzdCBrZWluIGxlZXJlcyBWZXJ6ZWljaG5pcy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiQXJiZWl0c3ZlcnplaWNobmlzICclcycgZXhpc3RpZXJ0IGJlcmVpdHMuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAzOSBidWlsdGluL2Nsb25lLmM6MTA2MCBidWlsdGluL2RpZmZ0b29sLmM6MjcxCisjOiBidWlsdGluL2xvZy5jOjE4NjYgYnVpbHRpbi93b3JrdHJlZS5jOjI5NSBidWlsdGluL3dvcmt0cmVlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICJLb25udGUgZsO8aHJlbmRlIFZlcnplaWNobmlzc2Ugdm9uICclcycgbmljaHQgZXJzdGVsbGVuLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgIktvbm50ZSBBcmJlaXRzdmVyemVpY2huaXMgJyVzJyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICJLbG9uZSBpbiBCYXJlLVJlcG9zaXRvcnkgJyVzJyAuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAiS2xvbmUgbmFjaCAnJXMnIC4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA5MAorbXNnaWQgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGJvdGggLS1yZWZlcmVuY2UgYW5kIC0tcmVmZXJlbmNlLWlmLSIKKyJhYmxlIgorbXNnc3RyICIiCisiJ2Nsb25lIC0tcmVjdXJzaXZlJyBpc3QgbmljaHQga29tcGF0aWJlbCBtaXQgLS1yZWZlcmVuY2UgdW5kIC0tcmVmZXJlbmNlLWlmLSIKKyJhYmxlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1NAorbXNnaWQgIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisiRGllIE9wdGlvbiAtLWRlcHRoIHdpcmQgaW4gbG9rYWxlbiBLbG9uZW4gaWdub3JpZXJ0OyBiZW51dHplbiBTaWUgIgorInN0YXR0ZGVzc2VuIGZpbGU6Ly8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU2Cittc2dpZCAiLS1zaGFsbG93LXNpbmNlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tc2hhbGxvdy1zaW5jZSB3aXJkIGluIGxva2FsZW4gS2xvbmVuIGlnbm9yaWVydDsgYmVudXR6ZW4gU2llIHN0YXR0ZGVzc2VuICIKKyJmaWxlOi8vIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1OAorbXNnaWQgIi0tc2hhbGxvdy1leGNsdWRlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tc2hhbGxvdy1leGNsdWRlIHdpcmQgaW4gbG9rYWxlbiBLbG9uZW4gaWdub3JpZXJ0OyBiZW51dHplbiBTaWUgc3RhdHRkZXNzZW4gIgorImZpbGU6Ly8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTYwCittc2dpZCAiLS1maWx0ZXIgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisiLS1maWx0ZXIgd2lyZCBpbiBsb2thbGVuIEtsb25lbiBpZ25vcmllcnQ7IGJlbnV0emVuIFNpZSBzdGF0dGRlc3NlbiBmaWxlOi8vIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2MworbXNnaWQgInNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGlnbm9yaW5nIC0tbG9jYWwiCittc2dzdHIgIiIKKyJRdWVsbGUgaXN0IGVpbiBSZXBvc2l0b3J5IG1pdCB1bnZvbGxzdMOkbmRpZ2VyIEhpc3RvcmllIChzaGFsbG93KSxcbiIKKyJpZ25vcmllcmUgLS1sb2NhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjgKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwgd2lyZCBpZ25vcmllcnQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQzIGJ1aWx0aW4vY2xvbmUuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW90ZSBicmFuY2ggJXMgbm90IGZvdW5kIGluIHVwc3RyZWFtICVzIgorbXNnc3RyICJSZW1vdGUtQnJhbmNoICVzIG5pY2h0IGltIFVwc3RyZWFtLVJlcG9zaXRvcnkgJXMgZ2VmdW5kZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjU0Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiU2llIHNjaGVpbmVuIGVpbiBsZWVyZXMgUmVwb3NpdG9yeSBnZWtsb250IHp1IGhhYmVuLiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoxMAorbXNnaWQgImdpdCBjb2x1bW4gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb2x1bW4gWzxPcHRpb25lbj5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICJLb25maWd1cmF0aW9uc3ZhcmlhYmxlbiBuYWNoc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgInp1IHZlcndlbmRlbmRlIEFub3JkbnVuZyIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIm1heGltYWxlIEJyZWl0ZSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIkFic3RhbmQgenVtIGxpbmtlbiBSYW5kIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgIkFic3RhbmQgenVtIHJlY2h0ZW4gUmFuZCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMworbXNnaWQgIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIgorbXNnc3RyICJBYnN0YW5kIHp3aXNjaGVuIFNwYWx0ZW4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgIkRpZSBPcHRpb24gLS1jb21tYW5kIG11c3MgYW4gZXJzdGVyIFN0ZWxsZSBzdGVoZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTgKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPHBhcmVudD4pLi4uXSBbLVNbPGtleWlkPl1dIFsoLW0gPG1lc3NhZ2U+KS4uLl0gWygtRiAiCisiPGZpbGU+KS4uLl0gPHRyZWU+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPEVsdGVybi1Db21taXQ+KS4uLl0gWy1TWzxLZXktSUQ+XV0gWygtbSAiCisiPE5hY2hyaWNodD4pLi4uXSBbKC1GIDxEYXRlaT4pLi4uXSA8VHJlZS1PYmpla3Q+IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHBhcmVudCAlcyBpZ25vcmVkIgorbXNnc3RyICJkb3BwZWx0ZXIgVm9yZ8OkbmdlciAlcyBpZ25vcmllcnQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo1NiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTM2IGJ1aWx0aW4vbG9nLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICJLZWluIGfDvGx0aWdlciBPYmpla3RuYW1lOiAlcyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjkzCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBGZWhsZXIgYmVpbSDDlmZmbmVuIHZvbiAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IEZlaGxlciBiZWltIExlc2VuIHZvbiAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gY2xvc2UgJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBGZWhsZXIgYmVpbSBTY2hsaWXDn2VuIHZvbiAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICJFbHRlcm4tQ29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTEyCittc2dpZCAiaWQgb2YgYSBwYXJlbnQgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiSUQgZWluZXMgRWx0ZXJuLUNvbW1pdC1PYmpla3Rlcy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTQgYnVpbHRpbi9jb21taXQuYzoxNTAxIGJ1aWx0aW4vbWVyZ2UuYzoyNzEKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDkgYnVpbHRpbi9ub3Rlcy5jOjU3NSBidWlsdGluL3N0YXNoLmM6MTQ3NworIzogYnVpbHRpbi90YWcuYzo0MTIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICJCZXNjaHJlaWJ1bmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTUgYnVpbHRpbi9jb21taXQuYzoxNTAxCittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIkNvbW1pdC1CZXNjaHJlaWJ1bmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTgKK21zZ2lkICJyZWFkIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgIkNvbW1pdC1CZXNjaHJlaWJ1bmcgdm9uIERhdGVpIGxlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIxIGJ1aWx0aW4vY29tbWl0LmM6MTUxMyBidWlsdGluL21lcmdlLmM6Mjg4CisjOiBidWlsdGluL3B1bGwuYzoxNzUgYnVpbHRpbi9yZXZlcnQuYzoxMTgKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgIkNvbW1pdCBtaXQgR1BHIHNpZ25pZXJlbiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzMworbXNnaWQgIm11c3QgZ2l2ZSBleGFjdGx5IG9uZSB0cmVlIgorbXNnc3RyICJCcmF1Y2hlIGdlbmF1IGVpbiBUcmVlLU9iamVrdC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxNDAKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IEZlaGxlciBiZWltIExlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQxCittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzxPcHRpb25lbj5dIFstLV0gPFBmYWRzcGV6aWZpa2F0aW9uPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NgorbXNnaWQgImdpdCBzdGF0dXMgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgc3RhdHVzIFs8T3B0aW9uZW4+XSBbLS1dIDxQZmFkc3BlemlmaWthdGlvbj4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTEKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKyJTaWUgZnJhZ3RlbiBkZW4gasO8bmdzdGVuIENvbW1pdCBuYWNoenViZXNzZXJuLCBhYmVyIGRhcyB3w7xyZGUgZGllc2VuIGxlZXJcbiIKKyJtYWNoZW4uIFNpZSBrw7ZubmVuIElocmVuIEJlZmVobCBtaXQgLS1hbGxvdy1lbXB0eSB3aWVkZXJob2xlbiwgb2RlciBkaWVzZW5cbiIKKyJDb21taXQgbWl0IFwiZ2l0IHJlc2V0IEhFQUReXCIgdm9sbHN0w6RuZGlnIGVudGZlcm5lbi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisiRGVyIGxldHp0ZSBcImNoZXJyeS1waWNrXCIgaXN0IGpldHp0IGxlZXIsIG3DtmdsaWNoZXJ3ZWlzZSBkdXJjaCBlaW5lICIKKyJLb25mbGlrdGF1ZmzDtnN1bmcuXG4iCisiV2VubiBTaWUgZGllcyB0cm90emRlbSBjb21taXR0ZW4gd29sbGVuLCBiZW51dHplbiBTaWU6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzCittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgY2hlcnJ5LXBpY2sgLS1za2lwJ1xuIgorbXNnc3RyICJBbmRlcm5mYWxscyBiZW51dHplbiBTaWUgYml0dGUgJ2dpdCBjaGVycnktcGljayAtLXNraXAnXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjYKK21zZ2lkICIiCisiYW5kIHRoZW4gdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorInRvIHJlc3VtZSBjaGVycnktcGlja2luZyB0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCittc2dzdHIgIiIKKyJVbmQgZGFubiBudXR6ZW4gU2llOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorInVtIGRhcyBDaGVycnktUGlja2luZyBtaXQgZGVuIMO8YnJpZ2VuIENvbW1pdHMgZm9ydHp1c2V0emVuLlxuIgorIldlbm4gZGllc2VyIENvbW1pdCDDvGJlcnNwcnVuZ2VuIHdlcmRlbiBzb2xsLCBudXR6ZW4gU2llOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzE1Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICJGZWhsZXIgYmVpbSBFbnRwYWNrZW4gZGVzIFRyZWUtT2JqZWt0ZXMgdm9uIEhFQUQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiT3B0aW9uIC0tcGF0aHNwZWMtZnJvbS1maWxlIG1pdCAtYSBpc3QgbmljaHQgc2lubnZvbGwuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2NAorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiS2VpbmUgUGZhZGUgbWl0IGRlciBPcHRpb24gLS1pbmNsdWRlLy0tb25seSBpc3QgbmljaHQgc2lubnZvbGwuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM3NgorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJLb25udGUgdGVtcG9yw6RyZW4gSW5kZXggbmljaHQgZXJzdGVsbGVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozODUKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICJpbnRlcmFrdGl2ZXMgSGluenVmw7xnZW4gZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDAwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIktvbm50ZSB0ZW1wb3LDpHJlbiBJbmRleCBuaWNodCBha3R1YWxpc2llcmVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MDIKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIKK21zZ3N0ciAiS29ubnRlIEhhdXB0LUNhY2hlLVZlcnplaWNobmlzIG5pY2h0IGFrdHVhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDI3IGJ1aWx0aW4vY29tbWl0LmM6NDUwIGJ1aWx0aW4vY29tbWl0LmM6NDk2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgbmV3X2luZGV4IERhdGVpIG5pY2h0IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzkKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgIkthbm4ga2VpbmVuIFRlaWwtQ29tbWl0IGR1cmNoZsO8aHJlbiwgd8OkaHJlbmQgZWluIE1lcmdlIGltIEdhbmdlIGlzdC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDgxCittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICIiCisiS2FubiBrZWluZW4gVGVpbC1Db21taXQgZHVyY2hmw7xocmVuLCB3w6RocmVuZCBcImNoZXJyeS1waWNrXCIgaW0gR2FuZ2UgaXN0LiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0ODkKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIkthbm4gSW5kZXggbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTA4Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgdGVtcG9yw6RyZSBJbmRleC1EYXRlaSBuaWNodCBzY2hyZWliZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICJDb21taXQgJyVzJyBmZWhsdCBBdXRvci1Lb3BmYmVyZWljaCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAiQ29tbWl0ICclcycgaGF0IGZlaGxlcmhhZnRlIEF1dG9yLVplaWxlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYyNworbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgIkZlaGxlcmhhZnRlciAtLWF1dGhvciBQYXJhbWV0ZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjgwCittc2dpZCAiIgorInVuYWJsZSB0byBzZWxlY3QgYSBjb21tZW50IGNoYXJhY3RlciB0aGF0IGlzIG5vdCB1c2VkXG4iCisiaW4gdGhlIGN1cnJlbnQgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyJLb25udGUga2VpbiBLb21tZW50YXItWmVpY2hlbiBhdXN3w6RobGVuLCBkYXMgbmljaHQgaW5cbiIKKyJkZXIgYWt0dWVsbGVuIENvbW1pdC1CZXNjaHJlaWJ1bmcgdmVyd2VuZGV0IHdpcmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcxOCBidWlsdGluL2NvbW1pdC5jOjc1MSBidWlsdGluL2NvbW1pdC5jOjEwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgIktvbm50ZSBDb21taXQgJXMgbmljaHQgbmFjaHNjaGxhZ2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMCBidWlsdGluL3Nob3J0bG9nLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIihsZXNlIExvZy1OYWNocmljaHQgdm9uIFN0YW5kYXJkLUVpbmdhYmUpXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMyCittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIktvbm50ZSBMb2cgbmljaHQgdm9uIFN0YW5kYXJkLUVpbmdhYmUgbGVzZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICJLb25udGUgTG9nLURhdGVpICclcycgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzY3IGJ1aWx0aW4vY29tbWl0LmM6NzgzCittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAiS29ubnRlIFNRVUFTSF9NU0cgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzc0Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJLb25udGUgTUVSR0VfTVNHIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzNAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgIktvbm50ZSBDb21taXQtVm9ybGFnZSBuaWNodCBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkVzIHNpZWh0IHNvIGF1cywgYWxzIGNvbW1pdHRlbiBTaWUgZWluZW4gTWVyZ2UuXG4iCisiRmFsbHMgZGFzIG5pY2h0IGtvcnJla3QgaXN0LCBsw7ZzY2hlbiBTaWUgYml0dGUgZGllIERhdGVpXG4iCisiXHQlc1xuIgorInVuZCB2ZXJzdWNoZW4gU2llIGVzIGVybmV1dC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgY2hlcnJ5LXBpY2suXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiRXMgc2llaHQgc28gYXVzLCBhbHMgY29tbWl0dGVuIFNpZSBlaW5lbiBcImNoZXJyeS1waWNrXCIuXG4iCisiRmFsbHMgZGFzIG5pY2h0IGtvcnJla3QgaXN0LCBsw7ZzY2hlbiBTaWUgYml0dGUgZGllIERhdGVpXG4iCisiXHQlc1xuIgorInVuZCB2ZXJzdWNoZW4gU2llIGVzIGVybmV1dC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkJpdHRlIGdlYmVuIFNpZSBlaW5lIENvbW1pdC1CZXNjaHJlaWJ1bmcgZsO8ciBJaHJlIMOEbmRlcnVuZ2VuIGVpbi4gWmVpbGVuLFxuIgorImRpZSBtaXQgJyVjJyBiZWdpbm5lbiwgd2VyZGVuIGlnbm9yaWVydCwgdW5kIGVpbmUgbGVlcmUgQmVzY2hyZWlidW5nXG4iCisiYnJpY2h0IGRlbiBDb21taXQgYWIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiQml0dGUgZ2ViZW4gU2llIGVpbmUgQ29tbWl0LUJlc2NocmVpYnVuZyBmw7xyIElocmUgw4RuZGVydW5nZW4gZWluLiBaZWlsZW4sICIKKyJkaWVcbiIKKyJtaXQgJyVjJyBiZWdpbm5lbiwgd2VyZGVuIGJlaWJlaGFsdGVuOyB3ZW5uIFNpZSBtw7ZjaHRlbiwga8O2bm5lbiBTaWUgZGllc2UgIgorImVudGZlcm5lbi5cbiIKKyJFaW5lIGxlZXJlIEJlc2NocmVpYnVuZyBicmljaHQgZGVuIENvbW1pdCBhYi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNBdXRob3I6ICAgICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc0F1dG9yOiAgICAgICAgICAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXNEYXR1bTogICAgICAgICAgICAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc0NvbW1pdC1FcnN0ZWxsZXI6ICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkyOQorbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICJLYW5uIEluZGV4IG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5NworbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBkZXIgXCJUcmVlXCItT2JqZWt0ZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDExIGJ1aWx0aW4vdGFnLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIkJpdHRlIGxpZWZlcm4gU2llIGVpbmUgQmVzY2hyZWlidW5nIGVudHdlZGVyIG1pdCBkZXIgT3B0aW9uIC1tIG9kZXIgLUYuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIiIKKyItLWF1dGhvciAnJXMnIGlzdCBuaWNodCBpbSBGb3JtYXQgJ05hbWUgPEUtTWFpbD4nIHVuZCBzdGltbXQgbWl0IGtlaW5lbSAiCisidm9yaGFuZGVuZW4gQXV0b3Igw7xiZXJlaW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlnbm9yZWQgbW9kZSAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlciBpZ25vcmVkLU1vZHVzICclcycuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODcgYnVpbHRpbi9jb21taXQuYzoxMzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgTW9kdXMgJyVzJyBmw7xyIHVudmVyc2lvbmllcnRlIERhdGVpZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEyNworbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC0tbG9uZyB1bmQgLXogc2luZCBpbmtvbXBhdGliZWwuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzEKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisiRGllIE9wdGlvbmVuIC0tcmVzZXQtYXV0aG9yIHVuZCAtLWF1dGhvciBrw7ZubmVuIG5pY2h0IGdlbWVpbnNhbSB2ZXJ3ZW5kZXQgIgorIndlcmRlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MAorbXNnaWQgIllvdSBoYXZlIG5vdGhpbmcgdG8gYW1lbmQuIgorbXNnc3RyICJTaWUgaGFiZW4gbmljaHRzIGbDvHIgXCItLWFtZW5kXCIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODMKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJFaW4gTWVyZ2UgaXN0IGltIEdhbmdlIC0tIGthbm4gXCItLWFtZW5kXCIgbmljaHQgYXVzZsO8aHJlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIlwiY2hlcnJ5LXBpY2tcIiBpc3QgaW0gR2FuZ2UgLS0ga2FubiBcIi0tYW1lbmRcIiBuaWNodCBhdXNmw7xocmVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTg4Cittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb25lbiAtLXNxdWFzaCB1bmQgLS1maXh1cCBrw7ZubmVuIG5pY2h0IGdlbWVpbnNhbSB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk4Cittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIkVzIGthbm4gbnVyIGVpbmUgT3B0aW9uIHZvbiAtYy8tQy8tRi8tLWZpeHVwIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDAKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYuIgorbXNnc3RyICJEaWUgT3B0aW9uIC1tIGthbm4gbmljaHQgbWl0IC1jLy1DLy1GIGtvbWJpbmllcnQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjA4Cittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb24gLS1yZXNldC0tYXV0aG9yIGthbm4gbnVyIG1pdCAtQywgLWMgb2RlciAtLWFtZW5kIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjUKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyJFcyBrYW5uIG51ciBlaW5lIE9wdGlvbiB2b24gLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggIgorInZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHMgJyVzIC4uLicgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJQZmFkZSAnJXMgLi4uJyBtaXQgLWEgc2luZCBuaWNodCBzaW5udm9sbCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYyIGJ1aWx0aW4vY29tbWl0LmM6MTUyNAorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAiU3RhdHVzIGltIEt1cnpmb3JtYXQgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NCBidWlsdGluL2NvbW1pdC5jOjE1MjYKK21zZ2lkICJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiQnJhbmNoaW5mb3JtYXRpb25lbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY2Cittc2dpZCAic2hvdyBzdGFzaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiU3Rhc2hpbmZvcm1hdGlvbmVuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjggYnVpbHRpbi9jb21taXQuYzoxNTI4Cittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgInZvcmF1cy9oaW50ZXJoZXItV2VydGUgYmVyZWNobmVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzAKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJWZXJzaW9uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzAgYnVpbHRpbi9jb21taXQuYzoxNTMwIGJ1aWx0aW4vcHVzaC5jOjU0OQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY0MworbXNnaWQgIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IgorbXNnc3RyICJtYXNjaGluZW5sZXNiYXJlIEF1c2dhYmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MyBidWlsdGluL2NvbW1pdC5jOjE1MzIKK21zZ2lkICJzaG93IHN0YXR1cyBpbiBsb25nIGZvcm1hdCAoZGVmYXVsdCkiCittc2dzdHIgIlN0YXR1cyBpbSBMYW5nZm9ybWF0IGFuemVpZ2VuIChTdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3NiBidWlsdGluL2NvbW1pdC5jOjE1MzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAiRWludHLDpGdlIG1pdCBOVUwtWmVpY2hlbiBhYnNjaGxpZcOfZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OCBidWlsdGluL2NvbW1pdC5jOjEzODIgYnVpbHRpbi9jb21taXQuYzoxNTM4CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTkgYnVpbHRpbi9yZWJhc2UuYzoxNTY5IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJtb2RlIgorbXNnc3RyICJNb2R1cyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc5IGJ1aWx0aW4vY29tbWl0LmM6MTUzOAorbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorInVudmVyc2lvbmllcnRlIERhdGVpZW4gYW56ZWlnZW4sIG9wdGlvbmFsZSBNb2RpOiBhbGwsIG5vcm1hbCwgbm8uIChTdGFuZGFyZDogIgorImFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MworbXNnaWQgIiIKKyJzaG93IGlnbm9yZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAoRGVmYXVsdDogIgorInRyYWRpdGlvbmFsKSIKK21zZ3N0ciAiIgorImlnbm9yaWVydGUgRGF0ZWllbiBhbnplaWdlbiwgb3B0aW9uYWxlIE1vZGk6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uICIKKyIoU3RhbmRhcmQ6IHRyYWRpdGlvbmFsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg1IHBhcnNlLW9wdGlvbnMuaDoxOTIKK21zZ2lkICJ3aGVuIgorbXNnc3RyICJ3YW5uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODYKK21zZ2lkICIiCisiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcywgb3B0aW9uYWwgd2hlbjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKyLDhG5kZXJ1bmdlbiBpbiBTdWJtb2R1bGVuIGlnbm9yaWVyZW4sIG9wdGlvbmFsIHdlbm46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihTdGFuZGFyZDogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg4Cittc2dpZCAibGlzdCB1bnRyYWNrZWQgZmlsZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAidW52ZXJzaW9uaWVydGUgRGF0ZWllbiBpbiBTcGFsdGVuIGF1Zmxpc3RlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg5Cittc2dpZCAiZG8gbm90IGRldGVjdCByZW5hbWVzIgorbXNnc3RyICJrZWluZSBVbWJlbmVubnVuZ2VuIGVybWl0dGVsbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzkxCittc2dpZCAiZGV0ZWN0IHJlbmFtZXMsIG9wdGlvbmFsbHkgc2V0IHNpbWlsYXJpdHkgaW5kZXgiCittc2dzdHIgIlVtYmVuZW5udW5nZW4gZXJrZW5uZW4sIG9wdGlvbmFsIEluZGV4IGbDvHIgR2xlaWNoaGVpdCBzZXR6ZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQxMQorbXNnaWQgIlVuc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIGlnbm9yZWQgYW5kIHVudHJhY2tlZC1maWxlcyBhcmd1bWVudHMiCittc2dzdHIgIiIKKyJOaWNodCB1bnRlcnN0w7x0enRlIEtvbWJpbmF0aW9uIHZvbiBpZ25vcmVkIHVuZCB1bnRyYWNrZWQtZmlsZXMgQXJndW1lbnRlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NAorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgIlp1c2FtbWVuZmFzc3VuZyBuYWNoIGVyZm9sZ3JlaWNoZW0gQ29tbWl0IHVudGVyZHLDvGNrZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NQorbXNnaWQgInNob3cgZGlmZiBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiVW50ZXJzY2hpZWRlIGluIENvbW1pdC1CZXNjaHJlaWJ1bmdzdm9ybGFnZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk3Cittc2dpZCAiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9uZW4gZsO8ciBDb21taXQtQmVzY2hyZWlidW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTggYnVpbHRpbi9tZXJnZS5jOjI3NSBidWlsdGluL3RhZy5jOjQxNAorbXNnaWQgInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgIkJlc2NocmVpYnVuZyB2b24gRGF0ZWkgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorbXNnaWQgImF1dGhvciIKK21zZ3N0ciAiQXV0b3IiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICJBdXRvciBlaW5lcyBDb21taXRzIMO8YmVyc2NocmVpYmVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAgYnVpbHRpbi9nYy5jOjUzOAorbXNnaWQgImRhdGUiCittc2dzdHIgIkRhdHVtIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgIkRhdHVtIGVpbmVzIENvbW1pdHMgw7xiZXJzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMiBidWlsdGluL2NvbW1pdC5jOjE1MDMgYnVpbHRpbi9jb21taXQuYzoxNTA0CisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDUgcGFyc2Utb3B0aW9ucy5oOjMyOCByZWYtZmlsdGVyLmg6OTIKK21zZ2lkICJjb21taXQiCittc2dzdHIgIkNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIkJlc2NocmVpYnVuZyBkZXMgYW5nZWdlYmVuZW4gQ29tbWl0cyB3aWVkZXJ2ZXJ3ZW5kZW4gdW5kIGVkaXRpZXJlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAzCittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIkJlc2NocmVpYnVuZyBkZXMgYW5nZWdlYmVuZW4gQ29tbWl0cyB3aWVkZXJ2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNAorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIGZpeHVwIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyJlaW5lIGF1dG9tYXRpc2NoIHp1c2FtbWVuZ2VzZXR6dGUgQmVzY2hyZWlidW5nIHp1bSBOYWNoYmVzc2VybiBkZXMgIgorImFuZ2VnZWJlbmVuIENvbW1pdHMgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDUKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorImVpbmUgYXV0b21hdGlzY2ggenVzYW1tZW5nZXNldHp0ZSBCZXNjaHJlaWJ1bmcgYmVpbSBcInNxdWFzaFwiIGRlcyAiCisiYW5nZWdlYmVuZW4gQ29tbWl0cyB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNgorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgIlNpZSBhbHMgQXV0b3IgZGVzIENvbW1pdHMgc2V0emVuICh2ZXJ3ZW5kZXQgbWl0IC1DLy1jLy0tYW1lbmQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDcgYnVpbHRpbi9sb2cuYzoxNjM0IGJ1aWx0aW4vbWVyZ2UuYzoyOTAKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0NCBidWlsdGluL3JldmVydC5jOjExMAorbXNnaWQgImFkZCBTaWduZWQtb2ZmLWJ5OiIKK21zZ3N0ciAiJ1NpZ25lZC1vZmYtYnk6Jy1aZWlsZSBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA4Cittc2dpZCAidXNlIHNwZWNpZmllZCB0ZW1wbGF0ZSBmaWxlIgorbXNnc3RyICJhbmdlZ2ViZW5lIFZvcmxhZ2VuZGF0ZWkgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDkKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAiQmVhcmJlaXR1bmcgZGVzIENvbW1pdHMgZXJ6d2luZ2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTEKK21zZ2lkICJpbmNsdWRlIHN0YXR1cyBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiU3RhdHVzIGluIGRpZSBDb21taXQtQmVzY2hyZWlidW5nc3ZvcmxhZ2UgZWluZsO8Z2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTYKK21zZ2lkICJDb21taXQgY29udGVudHMgb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9uZW4gZsO8ciBDb21taXQtSW5oYWx0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTcKK21zZ2lkICJjb21taXQgYWxsIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgImFsbGUgZ2XDpG5kZXJ0ZW4gRGF0ZWllbiBjb21taXR0ZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxOAorbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAiZGllIGFuZ2VnZWJlbmVuIERhdGVpZW4genVzw6R0emxpY2ggenVtIENvbW1pdCB2b3JtZXJrZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxOQorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGZpbGVzIgorbXNnc3RyICJpbnRlcmFrdGl2ZXMgSGluenVmw7xnZW4gdm9uIERhdGVpZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMAorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgImludGVyYWt0aXZlcyBIaW56dWbDvGdlbiB2b24gw4RuZGVydW5nZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMQorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAibnVyIGRpZSBhbmdlZ2ViZW5lbiBEYXRlaWVuIGNvbW1pdHRlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIyCittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgIkhvb2tzIHByZS1jb21taXQgdW5kIGNvbW1pdC1tc2cgdW1nZWhlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIzCittc2dpZCAic2hvdyB3aGF0IHdvdWxkIGJlIGNvbW1pdHRlZCIKK21zZ3N0ciAiYW56ZWlnZW4sIHdhcyBjb21taXR0ZXQgd2VyZGVuIHfDvHJkZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM2Cittc2dpZCAiYW1lbmQgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICJ2b3JoZXJpZ2VuIENvbW1pdCDDpG5kZXJuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzcKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgIlwicG9zdC1yZXdyaXRlIGhvb2tcIiB1bWdlaGVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NDQKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICJBdWZ6ZWljaG51bmcgZWluZXIgbGVlcmVuIMOEbmRlcnVuZyBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTQ2Cittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAiQXVmemVpY2hudW5nIGVpbmVyIMOEbmRlcnVuZyBtaXQgZWluZXIgbGVlcmVuIEJlc2NocmVpYnVuZyBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIkJlc2Now6RkaWd0ZSBNRVJHRV9IRUFELURhdGVpICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYyNgorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIktvbm50ZSBNRVJHRV9NT0RFIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIgorbXNnc3RyICJLb25udGUgQ29tbWl0LUJlc2NocmVpYnVuZyBuaWNodCBsZXNlbjogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJDb21taXQgYXVmZ3J1bmQgbGVlcmVyIEJlc2NocmVpYnVuZyBhYmdlYnJvY2hlbi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdDsgeW91IGRpZCBub3QgZWRpdCB0aGUgbWVzc2FnZS5cbiIKK21zZ3N0ciAiQ29tbWl0IGFiZ2Vicm9jaGVuOyBTaWUgaGFiZW4gZGllIEJlc2NocmVpYnVuZyBuaWNodCBlZGl0aWVydC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjkxCittc2dpZCAiIgorInJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgYW5kIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDovXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJEYXMgUmVwb3NpdG9yeSB3dXJkZSBha3R1YWxpc2llcnQsIGFiZXIgZGllIFwibmV3X2luZGV4XCItRGF0ZWlcbiIKKyJrb25udGUgbmljaHQgZ2VzY2hyaWViZW4gd2VyZGVuLiBQcsO8ZmVuIFNpZSwgZGFzcyBJaHJlIEZlc3RwbGF0dGUgbmljaHRcbiIKKyJ2b2xsIHVuZCBJaHIgS29udGluZ2VudCBuaWNodCBhdWZnZWJyYXVjaHQgaXN0IHVuZCBmw7xocmVuIFNpZVxuIgorImFuc2NobGllw59lbmQgXCJnaXQgcmVzdG9yZSBIRUFEIC0tc3RhZ2VkIDovXCIgenVyIFdpZWRlcmhlcnN0ZWxsdW5nIGF1cy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNworbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXSIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPE9iamVrdHZlcnplaWNobmlzPl0gWy0tc2hhbGxvd10gWy0tIgorIltuby1dcHJvZ3Jlc3NdIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjIKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxPYmpla3R2ZXJ6ZWljaG5pcz5dIFstLWFwcGVuZHxzcGxpdF0gIgorIlstLXJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPFNwbGl0LSIKKyJPcHRpb25lbj4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmQgb2JqZWN0IGRpcmVjdG9yeSBtYXRjaGluZyAlcyIKK21zZ3N0ciAia29ubnRlIE9iamVrdC1WZXJ6ZWljaG5pcyBuaWNodCBmaW5kZW4sIGRhc3MgJyVzJyBlbnRzcHJlY2hlbiBzb2xsIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjY4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTI1CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIxMCBidWlsdGluL2ZldGNoLmM6MTc5IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgImRpciIKK21zZ3N0ciAiVmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NjkgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMjYKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjExCittc2dpZCAiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIgorbXNnc3RyICJEYXMgT2JqZWt0dmVyemVpY2huaXMgenVtIFNwZWljaGVybiBkZXMgR3JhcGhlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NzEKK21zZ2lkICJpZiB0aGUgY29tbWl0LWdyYXBoIGlzIHNwbGl0LCBvbmx5IHZlcmlmeSB0aGUgdGlwIGZpbGUiCittc2dzdHIgIiIKKyJXZW5uIGRlciBDb21taXQtR3JhcGggYXVmZ2V0ZWlsdCBpc3QsIG51ciBkaWUgRGF0ZWkgYW4gZGVyIFNwaXR6ZSDDvGJlcnByw7xmZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6OTQgdC9oZWxwZXIvdGVzdC1yZWFkLWdyYXBoLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gY29tbWl0LWdyYXBoICclcyciCittc2dzdHIgIktvbm50ZSBDb21taXQtR3JhcGggJyVzJyBuaWNodCDDtmZmbmVuLiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMjgKK21zZ2lkICJzdGFydCB3YWxrIGF0IGFsbCByZWZzIgorbXNnc3RyICJEdXJjaGxhdWYgYXVmIGFsbGVuIFJlZmVyZW56ZW4gYmVnaW5uZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTMwCittc2dpZCAic2NhbiBwYWNrLWluZGV4ZXMgbGlzdGVkIGJ5IHN0ZGluIGZvciBjb21taXRzIgorbXNnc3RyICJkdXJjaCBTdGFuZGFyZC1FaW5nYWJlIGdlbGlzdGV0ZSBQYWNrLUluZGV4ZSBuYWNoIENvbW1pdHMgc2Nhbm5lbiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzIKK21zZ2lkICJzdGFydCB3YWxrIGF0IGNvbW1pdHMgbGlzdGVkIGJ5IHN0ZGluIgorbXNnc3RyICJMYXVmIGJlaSBDb21taXRzIGJlZ2lubmVuLCBkaWUgw7xiZXIgZGllIFN0YW5kYXJkLUVpbmdhYmUgZ2VsaXN0ZXQgc2luZCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzQKK21zZ2lkICJpbmNsdWRlIGFsbCBjb21taXRzIGFscmVhZHkgaW4gdGhlIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICIiCisiYWxsZSBDb21taXRzIGVpbnNjaGxpZcOfZW4sIGRpZSBzaWNoIGJlcmVpdHMgaW4gZGVyIENvbW1pdC1HcmFwaC1EYXRlaSAiCisiYmVmaW5kZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM3Cittc2dpZCAiYWxsb3cgd3JpdGluZyBhbiBpbmNyZW1lbnRhbCBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiRXJsYXViZSBkYXMgU2NocmVpYmVuIGVpbmVyIGlua3JlbWVudGVsbGVuIENvbW1pdC1HcmFwaC1EYXRlaSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzkgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNDMKK21zZ2lkICJtYXhpbXVtIG51bWJlciBvZiBjb21taXRzIGluIGEgbm9uLWJhc2Ugc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisiTWF4aW1hbGUgQW56YWhsIHZvbiBDb21taXRzIGluIGVpbmVtIGF1ZmdldGVpbHRlbiBDb21taXQtR3JhcGggb2huZSBCYXNpcyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNDEKK21zZ2lkICJtYXhpbXVtIHJhdGlvIGJldHdlZW4gdHdvIGxldmVscyBvZiBhIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorIk1heGltYWxlcyBWZXJow6RsdG5pcyB6d2lzY2hlbiB6d2VpIEViZW5lbiBlaW5lcyBhdWZnZXRlaWx0ZW4gQ29tbWl0LUdyYXBoIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE1OQorbXNnaWQgInVzZSBhdCBtb3N0IG9uZSBvZiAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzLCBvciAtLXN0ZGluLXBhY2tzIgorbXNnc3RyICIiCisiQmVudXR6ZW4gU2llIG1pbmRlc3RlbnMgZWlucyB2b24gLS1yZWFjaGFibGUsIC0tc3RkaW4tY29tbWl0cywgb2RlciAtLXN0ZGluLSIKKyJwYWNrcy4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTEKK21zZ2lkICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29uZmlnIFs8T3B0aW9uZW4+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMDQgYnVpbHRpbi9lbnYtLWhlbHBlci5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAtLXR5cGUgYXJndW1lbnQsICVzIgorbXNnc3RyICJuaWNodCBlcmthbm50ZXMgLS10eXBlIEFyZ3VtZW50LCAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMTYKK21zZ2lkICJvbmx5IG9uZSB0eXBlIGF0IGEgdGltZSIKK21zZ3N0ciAibnVyIGVpbiBUeXAgZXJsYXVidCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjUKK21zZ2lkICJDb25maWcgZmlsZSBsb2NhdGlvbiIKK21zZ3N0ciAiT3J0IGRlciBLb25maWd1cmF0aW9uc2RhdGVpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNgorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgImdsb2JhbGUgS29uZmlndXJhdGlvbnNkYXRlaSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI3Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAic3lzdGVtd2VpdGUgS29uZmlndXJhdGlvbnNkYXRlaSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI4Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgIktvbmZpZ3VyYXRpb25zZGF0ZWkgZGVzIFJlcG9zaXRvcmllcyB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI5Cittc2dpZCAidXNlIHBlci13b3JrdHJlZSBjb25maWcgZmlsZSIKK21zZ3N0ciAiS29uZmlndXJhdGlvbnNkYXRlaSBwcm8gQXJiZWl0c3ZlcnplaWNobmlzIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgImRpZSBhbmdlZ2ViZW5lIEtvbmZpZ3VyYXRpb25zZGF0ZWkgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgImJsb2ItaWQiCittc2dzdHIgIkJsb2ItSWQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMxCittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAiS29uZmlndXJhdGlvbiB2b24gYW5nZWdlYmVuZW0gQmxvYi1PYmpla3QgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMyCittc2dpZCAiQWN0aW9uIgorbXNnc3RyICJBa3Rpb24iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMzCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIldlcnQgenVyw7xja2dlYmVuOiBOYW1lIFtXZXJ0LXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzQKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImFsbGUgV2VydGUgenVyw7xja2dlYmVuOiBTY2hsw7xzc2VsIFtXZXJ0LXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzUKK21zZ2lkICJnZXQgdmFsdWVzIGZvciByZWdleHA6IG5hbWUtcmVnZXggW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiV2VydGUgZsO8ciBkZW4gcmVndWzDpHJlbiBBdXNkcnVjayB6dXLDvGNrZ2ViZW46IE5hbWUtcmVnZXggW1dlcnQtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNgorbXNnaWQgImdldCB2YWx1ZSBzcGVjaWZpYyBmb3IgdGhlIFVSTDogc2VjdGlvblsudmFyXSBVUkwiCittc2dzdHIgIldlcnQgc3BlemlmaXNjaCBmw7xyIGVpbmUgVVJMIHp1csO8Y2tnZWJlbjogc2VjdGlvblsudmFyXSBVUkwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM3Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgImFsbGUgcGFzc2VuZGVuIFZhcmlhYmxlbiBlcnNldHplbjogTmFtZSBXZXJ0IFtXZXJ0LXJlZ2V4XSAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM4Cittc2dpZCAiYWRkIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIgorbXNnc3RyICJuZXVlIFZhcmlhYmxlIGhpbnp1ZsO8Z2VuOiBOYW1lIFdlcnQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM5Cittc2dpZCAicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiZWluZSBWYXJpYWJsZSBlbnRmZXJuZW46IE5hbWUgW1dlcnQtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MAorbXNnaWQgInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJhbGxlIMOcYmVyZWluc3RpbW11bmdlbiBlbnRmZXJuZW46IE5hbWUgW1dlcnQtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MQorbXNnaWQgInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIKK21zZ3N0ciAiZWluZSBTZWt0aW9uIHVtYmVuZW5uZW46IGFsdGVyLU5hbWUgbmV1ZXItTmFtZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDIKK21zZ2lkICJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIgorbXNnc3RyICJlaW5lIFNla3Rpb24gZW50ZmVybmVuOiBOYW1lIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MworbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICJhbGxlcyBhdWZsaXN0ZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ0Cittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgImVpbmVuIEVkaXRvciDDtmZmbmVuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NQorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICJkaWUga29uZmlndXJpZXJ0ZSBGYXJiZSBmaW5kZW46IFNsb3QgW1N0YW5kYXJkXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDYKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAiZGllIEZhcmJlaW5zdGVsbHVuZyBmaW5kZW46IFNsb3QgW1N0YW5kYXJkLUF1c2dhYmUtaXN0LVRlcm1pbmFsXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDcKK21zZ2lkICJUeXBlIgorbXNnc3RyICJUeXAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ4IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzozOAorbXNnaWQgInZhbHVlIGlzIGdpdmVuIHRoaXMgdHlwZSIKK21zZ3N0ciAiV2VydCBpc3QgbWl0IGRpZXNlbSBUeXAgYW5nZWdlYmVuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OQorbXNnaWQgInZhbHVlIGlzIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIKK21zZ3N0ciAiV2VydCBpc3QgXCJ0cnVlXCIgb2RlciBcImZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUwCittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgIldlcnQgaXN0IGVpbmUgRGV6aW1hbHphaGwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUxCittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICJXZXJ0IGlzdCAtLWJvb2wgb2RlciAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTIKK21zZ2lkICJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIgorbXNnc3RyICJXZXJ0IGlzdCBlaW4gUGZhZCAoRGF0ZWkgb2RlciBWZXJ6ZWljaG5pc25hbWUpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MworbXNnaWQgInZhbHVlIGlzIGFuIGV4cGlyeSBkYXRlIgorbXNnc3RyICJXZXJ0IGlzdCBlaW4gVmVyZmFsbHNkYXR1bSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTQKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAiU29uc3RpZ2VzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NQorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAic2NobGllw590IFdlcnRlIG1pdCBOVUwtQnl0ZSBhYiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTYKK21zZ2lkICJzaG93IHZhcmlhYmxlIG5hbWVzIG9ubHkiCittc2dzdHIgIm51ciBWYXJpYWJsZW5uYW1lbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTcKK21zZ2lkICJyZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcyBvbiBsb29rdXAiCittc2dzdHIgImJlYWNodGV0IFwiaW5jbHVkZVwiLURpcmVrdGl2ZW4gYmVpbSBOYWNoc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU4Cittc2dpZCAic2hvdyBvcmlnaW4gb2YgY29uZmlnIChmaWxlLCBzdGFuZGFyZCBpbnB1dCwgYmxvYiwgY29tbWFuZCBsaW5lKSIKK21zZ3N0ciAiIgorIlVyc3BydW5nIGRlciBLb25maWd1cmF0aW9uIGFuemVpZ2VuIChEYXRlaSwgU3RhbmRhcmQtRWluZ2FiZSwgQmxvYiwgIgorIkJlZmVobHN6ZWlsZSkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU5Cittc2dpZCAic2hvdyBzY29wZSBvZiBjb25maWcgKHdvcmt0cmVlLCBsb2NhbCwgZ2xvYmFsLCBzeXN0ZW0sIGNvbW1hbmQpIgorbXNnc3RyICIiCisiWmVpZ2UgR2VsdHVuZ3NiZXJlaWNoIGRlciBLb25maWd1cmF0aW9uIChBcmJlaXRzdmVyemVpY2huaXMsIGxva2FsLCBnbG9iYWwsICIKKyJzeXN0ZW13ZWl0LCBCZWZlaGwpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE2MCBidWlsdGluL2Vudi0taGVscGVyLmM6NDAKK21zZ2lkICJ2YWx1ZSIKK21zZ3N0ciAiV2VydCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNjAKK21zZ2lkICJ3aXRoIC0tZ2V0LCB1c2UgZGVmYXVsdCB2YWx1ZSB3aGVuIG1pc3NpbmcgZW50cnkiCittc2dzdHIgIm1pdCAtLWdldCwgYmVudXR6ZSBkZW4gU3RhbmRhcmR3ZXJ0LCB3ZW5uIGRlciBFaW50cmFnIGZlaGx0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgJWQiCittc2dzdHIgIkZhbHNjaGUgQW56YWhsIHZvbiBBcmd1bWVudGVuIC0gc29sbHRlICVkIHNlaW4uIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgZnJvbSAlZCB0byAlZCIKK21zZ3N0ciAiRmFsc2NoZSBBbnphaGwgdm9uIEFyZ3VtZW50ZW4gLSBzb2xsdGUgendpc2NoZW4gJWQgdW5kICVkIHNlaW4uIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgU2NobMO8c3NlbG11c3RlcjogJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmb3JtYXQgZGVmYXVsdCBjb25maWcgdmFsdWU6ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBGb3JtYXRpZXJlbiBkZXMgU3RhbmRhcmRrb25maWd1cmF0aW9uc3dlcnRlczogJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBjb2xvciAnJXMnIgorbXNnc3RyICJLYW5uIEZhcmJlICclcycgbmljaHQgcGFyc2VuLiIKKworIzogYnVpbHRpbi9jb25maWcuYzo0NTkKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAia29ubnRlIFN0YW5kYXJkLUZhcmJ3ZXJ0IG5pY2h0IHBhcnNlbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MTIgYnVpbHRpbi9jb25maWcuYzo3NjgKK21zZ2lkICJub3QgaW4gYSBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICJOaWNodCBpbiBlaW5lbSBHaXQtUmVwb3NpdG9yeS4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTE1Cittc2dpZCAid3JpdGluZyB0byBzdGRpbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJEYXMgU2NocmVpYmVuIGluIGRpZSBTdGFuZGFyZC1FaW5nYWJlIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0LiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MTgKK21zZ2lkICJ3cml0aW5nIGNvbmZpZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisiRGFzIFNjaHJlaWJlbiB2b24gQmxvYi1PYmpla3RlbiBmw7xyIEtvbmZpZ3VyYXRpb25lbiB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dC4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiIKKyIjIERhcyBpc3QgR2l0J3MgYmVudXR6ZXJzcGV6aWZpc2NoZSBLb25maWd1cmF0aW9uc2RhdGVpLlxuIgorIlt1c2VyXVxuIgorIiMgQml0dGUgcGFzc2VuIFNpZSBkaWUgZm9sZ2VuZGVuIFplaWxlbiBhbiB1bmQga29tbWVudGllcmVuIFNpZSBkaWVzZSBhdXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYyNworbXNnaWQgIm9ubHkgb25lIGNvbmZpZyBmaWxlIGF0IGEgdGltZSIKK21zZ3N0ciAiTnVyIGVpbmUgS29uZmlndXJhdGlvbnNkYXRlaSB6dSBlaW5lciBaZWl0IG3DtmdsaWNoLiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MzIKK21zZ2lkICItLWxvY2FsIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tbG9jYWwga2FubiBudXIgaW5uZXJoYWxiIGVpbmVzIEdpdC1SZXBvc2l0b3JpZXMgdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjM1Cittc2dpZCAiLS1ibG9iIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tYmxvYiBrYW5uIG51ciBpbm5lcmhhbGIgZWluZXMgR2l0LVJlcG9zaXRvcmllcyB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NTUKK21zZ2lkICIkSE9NRSBub3Qgc2V0IgorbXNnc3RyICIkSE9NRSBuaWNodCBnZXNldHp0LiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NzkKK21zZ2lkICIiCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgorbXNnc3RyICIiCisiLS13b3JrdHJlZSBrYW5uIG5pY2h0IG1pdCBtZWhyZXJlbiBBcmJlaXRzdmVyemVpY2huaXNzZW4gdmVyd2VuZGV0IHdlcmRlbixcbiIKKyJhdcOfZXIgZGllIEtvbmZpZ3VyYXRpb25zZXJ3ZWl0ZXJ1bmcgd29ya3RyZWVDb25maWcgaXN0IGFrdGl2aWVydC4gQml0dGVcbiIKKyJsZXNlbiBTaWUgZGllIFNla3Rpb24gXCJDT05GSUdVUkFUSU9OX0ZJTEVcIiBpbiBcImdpdCBoZWxwIHdvcmt0cmVlXCIgZsO8ciAiCisiRGV0YWlscyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTQKK21zZ2lkICItLWdldC1jb2xvciBhbmQgdmFyaWFibGUgdHlwZSBhcmUgaW5jb2hlcmVudCIKK21zZ3N0ciAiQW5nYWJlIHZvbiAtLWdldC1jb2xvciB1bmQgVmFyaWFibGVudHlwIHNpbmQgdW5nw7xsdGlnLiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTkKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICJOdXIgZWluZSBBa3Rpb24gZXJsYXVidC4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzMyCittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIi0tbmFtZS1vbmx5IGlzdCBudXIgYW53ZW5kYmFyIGF1ZiAtLWxpc3Qgb2RlciAtLWdldC1yZWdleHAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzM4Cittc2dpZCAiIgorIi0tc2hvdy1vcmlnaW4gaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0LCAtLWdldC1hbGwsIC0tZ2V0LXJlZ2V4cCwgYW5kIC0tIgorImxpc3QiCittc2dzdHIgIiIKKyItLXNob3ctb3JpZ2luIGlzdCBudXIgYW53ZW5kYmFyIGF1ZiAtLWdldCwgLS1nZXQtYWxsLCAtLWdldC1yZWdleHAgdW5kIC0tbGlzdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDQKK21zZ2lkICItLWRlZmF1bHQgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0IgorbXNnc3RyICItLWRlZmF1bHQgaXN0IG51ciBhbndlbmRiYXIgYXVmIC0tZ2V0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIgorbXNnc3RyICJLb25udGUgS29uZmlndXJhdGlvbnNkYXRlaSAnJXMnIG5pY2h0IGxlc2VuLiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NjAKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGNvbmZpZyBmaWxlKHMpIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJhcmJlaXRlbiBkZXIgS29uZmlndXJhdGlvbnNkYXRlaShlbikuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3MAorbXNnaWQgImVkaXRpbmcgc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRGFzIEJlYXJiZWl0ZW4gZGVyIFN0YW5kYXJkLUVpbmdhYmUgd2lyZCBuaWNodCB1bnRlcnN0w7x0enQuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3MgorbXNnaWQgImVkaXRpbmcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRGFzIEJlYXJiZWl0ZW4gdm9uIEJsb2JzIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0LiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgIktvbm50ZSBLb25maWd1cmF0aW9uc2RhdGVpICclcycgbmljaHQgZXJzdGVsbGVuLiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBvdmVyd3JpdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGggYSBzaW5nbGUgdmFsdWVcbiIKKyIgICAgICAgVXNlIGEgcmVnZXhwLCAtLWFkZCBvciAtLXJlcGxhY2UtYWxsIHRvIGNoYW5nZSAlcy4iCittc2dzdHIgIiIKKyJrYW5uIG5pY2h0IG1laHJlcmUgV2VydGUgbWl0IGVpbmVtIGVpbnppZ2VuIFdlcnQgw7xiZXJzY2hyZWliZW5cbiIKKyIgICAgICAgQmVudXR6ZW4gU2llIGVpbmVuIHJlZ3Vsw6RyZW4gQXVzZHJ1Y2ssIC0tYWRkIG9kZXIgLS1yZXBsYWNlLCB1bSAlc1xuIgorIiAgICAgICB6dSDDpG5kZXJuLiIKKworIzogYnVpbHRpbi9jb25maWcuYzo4NzMgYnVpbHRpbi9jb25maWcuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBzZWN0aW9uOiAlcyIKK21zZ3N0ciAiS2VpbmUgc29sY2hlIFNla3Rpb246ICVzIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5MAorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjEwMAorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAiZ2lidCBHcsO2w59lbmFuZ2FiZW4gaW4gbWVuc2NoZW5sZXNiYXJlbiBGb3JtYXQgYXVzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjYKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gWzxjb21taXQtaXNoPi4uLl0iCittc2dzdHIgImdpdCBkZXNjcmliZSBbPE9wdGlvbmVuPl0gWzxDb21taXQtQW5nYWJlPi4uLl0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxPcHRpb25lbj5dIC0tZGlydHkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImhlYWQiCittc2dzdHIgIkJyYW5jaCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAibGlnaHR3ZWlnaHQiCittc2dzdHIgIm5pY2h0LWFubm90aWVydCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiYW5ub3RhdGVkIgorbXNnc3RyICJhbm5vdGllcnQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJhbm5vdGllcnRlcyBUYWcgJXMgaXN0IG5pY2h0IHZlcmbDvGdiYXIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAiYW5ub3RpZXJ0ZXMgVGFnICVzIGhhdCBrZWluZW4gZWluZ2ViZXR0ZXRlbiBOYW1lbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICJUYWcgJyVzJyBpc3QgZWlnZW50bGljaCAnJXMnIGhpZXIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICJrZWluIFRhZyBlbnRzcHJpY2h0IGV4YWt0ICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAiIgorIktlaW5lIGV4YWt0ZSDDnGJlcmVpbnN0aW1tdW5nIGJlaSBSZWZlcmVuemVuIG9kZXIgVGFncywgU3VjaGUgenVtICIKKyJCZXNjaHJlaWJlblxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICJiZWVuZGV0ZSBTdWNoZSBiZWkgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorIktlaW5lIGFubm90aWVydGVuIFRhZ3Mga8O2bm5lbiAnJXMnIGJlc2NocmVpYmVuLlxuIgorIkplZG9jaCBnYWIgZXMgbmljaHQtYW5ub3RpZXJ0ZSBUYWdzOiB2ZXJzdWNoZW4gU2llIC0tdGFncy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorIktlaW5lIFRhZ3Mga8O2bm5lbiAnJXMnIGJlc2NocmVpYmVuLlxuIgorIlZlcnN1Y2hlbiBTaWUgLS1hbHdheXMgb2RlciBlcnN0ZWxsZW4gU2llIGVpbmlnZSBUYWdzLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmF2ZXJzZWQgJWx1IGNvbW1pdHNcbiIKK21zZ3N0ciAiJWx1IENvbW1pdHMgZHVyY2hsYXVmZW5cbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKyJtZWhyIGFscyAlaSBUYWdzIGdlZnVuZGVuOyBmw7xocmUgZGllIGVyc3RlbiAlaSBhdWZcbiIKKyJTdWNoZSBiZWkgJXMgYXVmZ2VnZWJlblxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc2NyaWJlICVzXG4iCittc2dzdHIgIkJlc2NocmVpYmUgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiJXMgaXN0IGtlaW4gZ8O8bHRpZ2VyIE9iamVrdC1OYW1lIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5laXRoZXIgYSBjb21taXQgbm9yIGJsb2IiCittc2dzdHIgIiVzIGlzdCB3ZWRlciBlaW4gQ29tbWl0LCBub2NoIGVpbiBCbG9iLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MQorbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgImRhcyBUYWcgZmluZGVuLCBkYXMgbmFjaCBkZW0gQ29tbWl0IGtvbW10IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUyCittc2dpZCAiZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVyciIKK21zZ3N0ciAiZGllIFN1Y2hzdHJhdGVnaWUgaW4gZGVyIFN0YW5kYXJkLUZlaGxlcmF1c2dhYmUgcHJvdG9rb2xsaWVyZW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTMKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAiYWxsZSBSZWZlcmVuemVuIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NAorbXNnaWQgInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIgorbXNnc3RyICJqZWRlcyBUYWcgdmVyd2VuZGVuLCBhdWNoIG5pY2h0LWFubm90aWVydGUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTUKK21zZ2lkICJhbHdheXMgdXNlIGxvbmcgZm9ybWF0IgorbXNnc3RyICJpbW1lciBsYW5nZXMgRm9ybWF0IHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NgorbXNnaWQgIm9ubHkgZm9sbG93IGZpcnN0IHBhcmVudCIKK21zZ3N0ciAibnVyIGVyc3RlbSBFbHRlcm50ZWlsIGZvbGdlbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1OQorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgIm51ciBleGFrdGUgw5xiZXJlaW5zdGltbXVuZ2VuIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTYxCittc2dpZCAiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIKK21zZ3N0ciAiZGllIGrDvG5nc3RlbiA8bj4gVGFncyBiZXRyYWNodGVuIChTdGFuZGFyZDogMTApIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTYzCittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAibnVyIFRhZ3MsIGRpZSA8TXVzdGVyPiBlbnRzcHJlY2hlbiwgYmV0cmFjaHRlbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2NQorbXNnaWQgImRvIG5vdCBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAia2VpbmUgVGFncyBiZXRyYWNodGVuLCBkaWUgPE11c3Rlcj4gZW50c3ByZWNoZW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjcgYnVpbHRpbi9uYW1lLXJldi5jOjUzNQorbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAiZ2Vrw7xyenRlcyBDb21taXQtT2JqZWt0IGFuemVpZ2VuLCB3ZW5uIHNvbnN0IG5pY2h0cyB6dXRyaWZmdCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2OCBidWlsdGluL2Rlc2NyaWJlLmM6NTcxCittc2dpZCAibWFyayIKK21zZ3N0ciAiTWFya2llcnVuZyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2OQorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIKK21zZ3N0ciAiIgorIjxNYXJraWVydW5nPiBiZWkgZ2XDpG5kZXJ0ZW0gQXJiZWl0c3ZlcnplaWNobmlzIGFuaMOkbmdlbiAoU3RhbmRhcmQ6IFwiLWRpcnR5IgorIlwiKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU3MgorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gYnJva2VuIHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItYnJva2VuXCIpIgorbXNnc3RyICIiCisiPE1hcmtpZXJ1bmc+IGJlaSBkZWZla3RlbSBBcmJlaXRzdmVyemVpY2huaXMgYW5ow6RuZ2VuIChTdGFuZGFyZDogXCItYnJva2VuXCIpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTkwCittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIkRpZSBPcHRpb25lbiAtLWxvbmcgdW5kIC0tYWJicmV2PTAgc2luZCBpbmtvbXBhdGliZWwuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjE5Cittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIktlaW5lIE5hbWVuIGdlZnVuZGVuLCBrYW5uIG5pY2h0cyBiZXNjaHJlaWJlbi4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NzAKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiRGllIE9wdGlvbiAtLWRpcnR5IGthbm4gbmljaHQgbWl0IENvbW1pdHMgdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NzIKK21zZ2lkICItLWJyb2tlbiBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIkRpZSBPcHRpb24gLS1icm9rZW4ga2FubiBuaWNodCBtaXQgQ29tbWl0cyB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiCittc2dzdHIgIiclcyc6IGtlaW5lIHJlZ3Vsw6RyZSBEYXRlaSBvZGVyIHN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZyIKKworIzogYnVpbHRpbi9kaWZmLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBPcHRpb246ICVzIgorCisjOiBidWlsdGluL2RpZmYuYzozNTAKK21zZ2lkICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiS2VpbiBHaXQtUmVwb3NpdG9yeSIKKworIzogYnVpbHRpbi9kaWZmLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJPYmpla3QgJyVzJyBpc3QgdW5nw7xsdGlnLiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIk1laHIgYWxzIHp3ZWkgQmxvYnMgYW5nZWdlYmVuOiAnJXMnIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAidW5iZWhhbmRlbHRlcyBPYmpla3QgJyVzJyBhbmdlZ2ViZW4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMAorbXNnaWQgImdpdCBkaWZmdG9vbCBbPG9wdGlvbnM+XSBbPGNvbW1pdD4gWzxjb21taXQ+XV0gWy0tXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGRpZmZ0b29sIFs8T3B0aW9uZW4+XSBbPENvbW1pdD4gWzxDb21taXQ+XV0gWy0tXSBbPFBmYWQ+Li4uXSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQ6ICVkIgorbXNnc3RyICJmZWhsZ2VzY2hsYWdlbjogJWQiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAia29ubnRlIHN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZyAlcyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rIGZpbGUgJXMiCittc2dzdHIgIktvbm50ZSBEYXRlaSB2b24gc3ltYm9saXNjaGVyIFZlcmtuw7xwZnVuZyAnJXMnIG5pY2h0IGxlc2VuLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMgZm9yIHN5bWxpbmsgJXMiCittc2dzdHIgIktvbm50ZSBPYmpla3QgJyVzJyBmw7xyIHN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZyAnJXMnIG5pY2h0IGxlc2VuLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjQxMworbXNnaWQgIiIKKyJjb21iaW5lZCBkaWZmIGZvcm1hdHMoJy1jJyBhbmQgJy0tY2MnKSBhcmUgbm90IHN1cHBvcnRlZCBpblxuIgorImRpcmVjdG9yeSBkaWZmIG1vZGUoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4iCittc2dzdHIgIiIKKyJLb21iaW5pZXJ0ZSBEaWZmLUZvcm1hdGUoJy1jJyB1bmQgJy0tY2MnKSB3ZXJkZW4gaW0gVmVyemVpY2huaXMtXG4iCisiRGlmZi1Nb2R1cygnLWQnIHVuZCAnLS1kaXItZGlmZicpIG5pY2h0IHVudGVyc3TDvHR6dC4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm90aCBmaWxlcyBtb2RpZmllZDogJyVzJyBhbmQgJyVzJy4iCittc2dzdHIgImJlaWRlIERhdGVpZW4gZ2XDpG5kZXJ0OiAnJXMnIHVuZCAnJXMnLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNgorbXNnaWQgIndvcmtpbmcgdHJlZSBmaWxlIGhhcyBiZWVuIGxlZnQuIgorbXNnc3RyICJEYXRlaSBpbSBBcmJlaXRzdmVyemVpY2huaXMgYmVsYXNzZW4uIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBvcmFyeSBmaWxlcyBleGlzdCBpbiAnJXMnLiIKK21zZ3N0ciAiRXMgZXhpc3RpZXJlbiB0ZW1wb3LDpHJlIERhdGVpZW4gaW4gJyVzJy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDgKK21zZ2lkICJ5b3UgbWF5IHdhbnQgdG8gY2xlYW51cCBvciByZWNvdmVyIHRoZXNlLiIKK21zZ3N0ciAiU2llIGvDtm5udGVuIGRpZXNlIGF1ZnLDpHVtZW4gb2RlciB3aWVkZXJoZXJzdGVsbGVuLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5NworbXNnaWQgInVzZSBgZGlmZi5ndWl0b29sYCBpbnN0ZWFkIG9mIGBkaWZmLnRvb2xgIgorbXNnc3RyICJgZGlmZi5ndWl0b29sYCBhbnN0YXR0IGBkaWZmLnRvb2xgIGJlbnV0emVuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njk5Cittc2dpZCAicGVyZm9ybSBhIGZ1bGwtZGlyZWN0b3J5IGRpZmYiCittc2dzdHIgIkRpZmYgw7xiZXIgZ2FuemVzIFZlcnplaWNobmlzIGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDEKK21zZ2lkICJkbyBub3QgcHJvbXB0IGJlZm9yZSBsYXVuY2hpbmcgYSBkaWZmIHRvb2wiCittc2dzdHIgImtlaW5lIEVpbmdhYmVhdWZmb3JkZXJ1bmcgdm9yIEF1c2bDvGhydW5nIGVpbmVzIERpZmYtVG9vbHMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDYKK21zZ2lkICJ1c2Ugc3ltbGlua3MgaW4gZGlyLWRpZmYgbW9kZSIKK21zZ3N0ciAic3ltYm9saXNjaGUgVmVya27DvHBmdW5nZW4gaW0gZGlyLWRpZmYgTW9kdXMgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA3Cittc2dpZCAidG9vbCIKK21zZ3N0ciAiVG9vbCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwOAorbXNnaWQgInVzZSB0aGUgc3BlY2lmaWVkIGRpZmYgdG9vbCIKK21zZ3N0ciAiZGFzIGFuZ2VnZWJlbmUgRGlmZi1Ub29sIGJlbnV0emVuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEwCittc2dpZCAicHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgIgorbXNnc3RyICIiCisiZWluZSBMaXN0ZSBtaXQgRGlmZi1Ub29scyBkYXJzdGVsbGVuLCBkaWUgbWl0IGAtLXRvb2xgIGJlbnV0enQgd2VyZGVuIGvDtm5uZW4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTMKK21zZ2lkICIiCisibWFrZSAnZ2l0LWRpZmZ0b29sJyBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbiAtIHplcm8gZXhpdCAiCisiY29kZSIKK21zZ3N0ciAiIgorIidnaXQtZGlmZnRvb2wnIGJlZW5kZW4sIHdlbm4gZGFzIGF1ZmdlcnVmZW5lIERpZmYtVG9vbCBtaXQgZWluZW0gIgorIlLDvGNra2VocndlcnRcbiIKKyJ2ZXJzY2hpZWRlbiAwIGF1c2dlZsO8aHJ0IHd1cmRlIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE2Cittc2dpZCAic3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzIgorbXNnc3RyICJlaWdlbmVuIEJlZmVobCB6dXIgQW56ZWlnZSB2b24gVW50ZXJzY2hpZWRlbiBhbmdlYmVuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE3Cittc2dpZCAicGFzc2VkIHRvIGBkaWZmYCIKK21zZ3N0ciAiYW4gJ2RpZmYnIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzIKK21zZ2lkICJkaWZmdG9vbCByZXF1aXJlcyB3b3JrdHJlZSBvciAtLW5vLWluZGV4IgorbXNnc3RyICJkaWZmdG9vbCBiZW7DtnRpZ3QgQXJiZWl0c3ZlcnplaWNobmlzIG9kZXIgLS1uby1pbmRleCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjczOQorbXNnaWQgIi0tZGlyLWRpZmYgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiLS1kaXItZGlmZiBrYW5uIG5pY2h0IG1pdCAtLW5vLWluZGV4IHZlcndlbmRldCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NDIKK21zZ2lkICItLWd1aSwgLS10b29sIGFuZCAtLWV4dGNtZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWd1aSwgLS10b29sIHVuZCAtLWV4dGNtZCBzY2hsaWXDn2VuIHNpY2ggZ2VnZW5zZWl0aWcgYXVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzUwCittc2dpZCAibm8gPHRvb2w+IGdpdmVuIGZvciAtLXRvb2w9PHRvb2w+IgorbXNnc3RyICJrZWluIDxUb29sPiBmw7xyIC0tdG9vbD08VG9vbD4gYW5nZWdlYmVuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzU3Cittc2dpZCAibm8gPGNtZD4gZ2l2ZW4gZm9yIC0tZXh0Y21kPTxjbWQ+IgorbXNnc3RyICJrZWluIDxQcm9ncmFtbT4gZsO8ciAtLWV4dGNtZD08UHJvZ3JhbW0+IGFuZ2VnZWJlbiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYKK21zZ2lkICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3B0aW9ucz4gPGVudi12YXI+IgorbXNnc3RyICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8T3B0aW9uZW4+IDxVbWdlYnVuZ3N2YXJpYWJsZT4iCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzozNyBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTgKK21zZ2lkICJ0eXBlIgorbXNnc3RyICJBcnQiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MQorbXNnaWQgImRlZmF1bHQgZm9yIGdpdF9lbnZfKiguLi4pIHRvIGZhbGwgYmFjayBvbiIKK21zZ3N0ciAiU3RhbmRhcmQgZsO8ciBnaXRfZW52XyooLi4uKSwgdW0gZGFyYXVmIHp1csO8Y2t6dWdyZWlmZW4iCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MworbXNnaWQgImJlIHF1aWV0IG9ubHkgdXNlIGdpdF9lbnZfKigpIHZhbHVlIGFzIGV4aXQgY29kZSIKK21zZ3N0ciAiQXVzZ2FiZW4gdW50ZXJkcsO8Y2tlbjsgbnVyIGdpdF9lbnZfKigpIFdlcnRlIGFscyBFeGl0LUNvZGUgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYSBib29sZWFuIHZhbHVlIHdpdGggYC0tdHlwZT1ib29sYCwgbm90IGAlc2AiCittc2dzdHIgIiIKKyJPcHRpb24gYC0tZGVmYXVsdCcgZXJ3YXJ0ZXQgZWluZW4gYm9vbGVzY2hlbiBXZXJ0IGJlaSBgLS10eXBlPWJvb2wnLCBuaWNodCBgIgorIiVzYCIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcHRpb24gYC0tZGVmYXVsdCcgZXhwZWN0cyBhbiB1bnNpZ25lZCBsb25nIHZhbHVlIHdpdGggYC0tdHlwZT11bG9uZ2AsIG5vdCBgIgorIiVzYCIKK21zZ3N0ciAiIgorIk9wdGlvbiBgLS1kZWZhdWx0JyBlcndhcnRldCBlaW5lbiB2b3J6ZWljaGVubG9zZW4gTG9uZy1XZXJ0IGJlaSBgLS0iCisidHlwZT11bG9uZ2AsIG5pY2h0IGAlc2AiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyOQorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo4NTMKK21zZ2lkICJFcnJvcjogQ2Fubm90IGV4cG9ydCBuZXN0ZWQgdGFncyB1bmxlc3MgLS1tYXJrLXRhZ3MgaXMgc3BlY2lmaWVkLiIKK21zZ3N0ciAiIgorIkZlaGxlcjogVmVyc2NoYWNodGVsdGUgVGFncyBrw7ZubmVuIG5pY2h0IGV4cG9ydGllcnQgd2VyZGVuLCBhdcOfZXIgLS1tYXJrLSIKKyJ0YWdzIHd1cmRlIGFuZ2VnZWJlbi4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTUyCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAiRm9ydHNjaHJpdHQgbmFjaCA8bj4gT2JqZWt0ZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU0Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHNpZ25lZCB0YWdzIgorbXNnc3RyICJCZWhhbmRsdW5nIHZvbiBzaWduaWVydGVuIFRhZ3Mgd8OkaGxlbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTcKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgdGFncyB0aGF0IHRhZyBmaWx0ZXJlZCBvYmplY3RzIgorbXNnc3RyICJCZWhhbmRsdW5nIHZvbiBUYWdzIHfDpGhsZW4sIGRpZSBnZWZpbHRlcnRlIE9iamVrdGUgbWFya2llcmVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MAorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBjb21taXQgbWVzc2FnZXMgaW4gYW4gYWx0ZXJuYXRlIGVuY29kaW5nIgorbXNnc3RyICIiCisiQXVzd8OkaGxlbiBkZXIgQmVoYW5kbHVuZyB2b24gQ29tbWl0LUJlc2NocmVpYnVuZ2VuIGJlaSB3ZWNoc2VsbmRlbSBFbmNvZGluZyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjMKK21zZ2lkICJEdW1wIG1hcmtzIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAiTWFya2llcnVuZ2VuIGluIGRpZXNlIERhdGVpIHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjUKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgIk1hcmtpZXJ1bmdlbiB2b24gZGllc2VyIERhdGVpIGltcG9ydGllcmVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSBpZiBpdCBleGlzdHMiCittc2dzdHIgIk1hcmtpZXJ1bmdlbiB2b24gZGllc2VyIERhdGVpIGltcG9ydGllcmVuLCB3ZW5uIGRpZXNlIGV4aXN0aWVydCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzEKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAia8O8bnN0bGljaCBlaW5lbiBUYWctRXJzdGVsbGVyIGVyemV1Z2VuLCB3ZW5uIGRhcyBUYWcga2VpbmVuIGhhdCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzMKK21zZ2lkICJPdXRwdXQgZnVsbCB0cmVlIGZvciBlYWNoIGNvbW1pdCIKK21zZ3N0ciAiZsO8ciBqZWRlbiBDb21taXQgZGFzIGdlc2FtdGUgVmVyemVpY2huaXMgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc1Cittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgImRpZSBcImRvbmVcIi1GdW5rdGlvbiBiZW51dHplbiwgdW0gZGVuIERhdGVuc3Ryb20gYWJ6dXNjaGxpZcOfZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc2Cittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICJBdXNnYWJlIHZvbiBCbG9iLURhdGVuIMO8YmVyc3ByaW5nZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc3IGJ1aWx0aW4vbG9nLmM6MTcwNQorbXNnaWQgInJlZnNwZWMiCittc2dzdHIgIlJlZnNwZWMiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc4Cittc2dpZCAiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIgorbXNnc3RyICJSZWZzcGVjIGF1ZiBleHBvcnRpZXJ0ZSBSZWZlcmVuemVuIGFud2VuZGVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OQorbXNnaWQgImFub255bWl6ZSBvdXRwdXQiCittc2dzdHIgIkF1c2dhYmUgYW5vbnltaXNpZXJlbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODEKK21zZ2lkICJSZWZlcmVuY2UgcGFyZW50cyB3aGljaCBhcmUgbm90IGluIGZhc3QtZXhwb3J0IHN0cmVhbSBieSBvYmplY3QgaWQiCittc2dzdHIgIiIKKyJFbHRlcm4sIGRpZSBuaWNodCBpbSBGYXN0LUV4cG9ydC1TdHJlYW0gc2luZCwgYW5oYW5kIGlocmVyIE9iamVrdC1JRCAiCisicmVmZXJlbnppZXJlbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODMKK21zZ2lkICJTaG93IG9yaWdpbmFsIG9iamVjdCBpZHMgb2YgYmxvYnMvY29tbWl0cyIKK21zZ3N0ciAib3JpZ2luYWxlIE9iamVrdC1JRHMgdm9uIEJsb2JzL0NvbW1pdHMgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTg1Cittc2dpZCAiTGFiZWwgdGFncyB3aXRoIG1hcmsgaWRzIgorbXNnc3RyICJUYWdzIG1pdCBNYXJraWVydW5ncy1JRHMgYmVzY2hyaWZ0ZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMjIwCittc2dpZCAiQ2Fubm90IHBhc3MgYm90aCAtLWltcG9ydC1tYXJrcyBhbmQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorbXNnc3RyICIiCisiLS1pbXBvcnQtbWFya3MgdW5kIC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cyBrw7ZubmVuIG5pY2h0IHp1c2FtbWVuICIKKyJ3ZWl0ZXJnZWdlYmVuIHdlcmRlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM0Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgZmV0Y2ggWzxPcHRpb25lbj5dIFs8UmVwb3NpdG9yeT4gWzxSZWZzcGVjPi4uLl1dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzUKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8T3B0aW9uZW4+XSA8R3J1cHBlPiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM2Cittc2dpZCAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8cmVwb3NpdG9yeT4gfCA8Z3JvdXA+KS4uLl0iCittc2dzdHIgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8T3B0aW9uZW4+XSBbKDxSZXBvc2l0b3J5PiB8IDxHcnVwcGU+KS4uLl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNworbXNnaWQgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tYWxsIFs8T3B0aW9uZW4+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNgorbXNnaWQgImZldGNoLnBhcmFsbGVsIGNhbm5vdCBiZSBuZWdhdGl2ZSIKK21zZ3N0ciAiZmV0Y2gucGFyYWxsZWwga2FubiBuaWNodCBuZWdhdGl2IHNlaW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzkgYnVpbHRpbi9wdWxsLmM6MTg0Cittc2dpZCAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAiZm9yZGVydCB2b24gYWxsZW4gUmVtb3RlLVJlcG9zaXRvcmllcyBhbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MSBidWlsdGluL3B1bGwuYzoyMjgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL2ZldGNoIgorbXNnc3RyICJVcHN0cmVhbSBmw7xyIFwiZ2l0IHB1bGwvZmV0Y2hcIiBzZXR6ZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMgYnVpbHRpbi9wdWxsLmM6MTg3Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICJhbiAuZ2l0L0ZFVENIX0hFQUQgYW5ow6RuZ2VuLCBhbnN0YXR0IHp1IMO8YmVyc2NocmVpYmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ1IGJ1aWx0aW4vcHVsbC5jOjE5MAorbXNnaWQgInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIKK21zZ3N0ciAiUGZhZCBkZXMgUHJvZ3JhbW1zIHp1bSBIb2NobGFkZW4gdm9uIFBha2V0ZW4gYXVmIGRlciBHZWdlbnNlaXRlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ2Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIHJlZmVyZW5jZSIKK21zZ3N0ciAiZGFzIMOcYmVyc2NocmVpYmVuIGVpbmVyIGxva2FsZW4gUmVmZXJlbnogZXJ6d2luZ2VuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ4Cittc2dpZCAiZmV0Y2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIgorbXNnc3RyICJ2b24gbWVocmVyZW4gUmVtb3RlLVJlcG9zaXRvcmllcyBhbmZvcmRlcm4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTAgYnVpbHRpbi9wdWxsLmM6MTk0Cittc2dpZCAiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiYWxsZSBUYWdzIHVuZCB2ZXJidW5kZW5lIE9iamVrdGUgYW5mb3JkZXJuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUyCittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICJuaWNodCBhbGxlIFRhZ3MgYW5mb3JkZXJuICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU0Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgZmV0Y2hlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAiQW56YWhsIGRlciBwYXJhbGxlbCBhbnp1Zm9yZGVybmRlbiBTdWJtb2R1bGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTYgYnVpbHRpbi9wdWxsLmM6MTk3Cittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgIiIKKyJSZW1vdGUtVHJhY2tpbmctQnJhbmNoZXMgZW50ZmVybmVuLCBkaWUgc2ljaCBuaWNodCBtZWhyIGltIFJlbW90ZS1SZXBvc2l0b3J5ICIKKyJiZWZpbmRlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OAorbXNnaWQgInBydW5lIGxvY2FsIHRhZ3Mgbm8gbG9uZ2VyIG9uIHJlbW90ZSBhbmQgY2xvYmJlciBjaGFuZ2VkIHRhZ3MiCittc2dzdHIgIiIKKyJsb2thbGUgVGFncyBlbnRmZXJuZW4sIGRpZSBzaWNoIG5pY2h0IG1laHIgaW0gUmVtb3RlLVJlcG9zaXRvcnkgYmVmaW5kZW4sICIKKyJ1bmQgZ2XDpG5kZXJ0ZSBUYWdzIGFrdHVhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTkgYnVpbHRpbi9mZXRjaC5jOjE4MiBidWlsdGluL3B1bGwuYzoxMjEKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgImJlaS1CZWRhcmYiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjAKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJyZWt1cnNpdmUgQW5mb3JkZXJ1bmdlbiB2b24gU3VibW9kdWxlbiBrb250cm9sbGllcmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY0IGJ1aWx0aW4vcHVsbC5jOjIwNQorbXNnaWQgImtlZXAgZG93bmxvYWRlZCBwYWNrIgorbXNnc3RyICJoZXJ1bnRlcmdlbGFkZW5lcyBQYWtldCBiZWhhbHRlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2NgorbXNnaWQgImFsbG93IHVwZGF0aW5nIG9mIEhFQUQgcmVmIgorbXNnc3RyICJBa3R1YWxpc2llcnVuZyBkZXIgXCJIRUFEXCItUmVmZXJlbnogZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjkgYnVpbHRpbi9mZXRjaC5jOjE3NSBidWlsdGluL3B1bGwuYzoyMDgKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIgorbXNnc3RyICIiCisiZGllIEhpc3RvcmllIGVpbmVzIEtsb25zIG1pdCB1bnZvbGxzdMOkbmRpZ2VyIEhpc3RvcmllIChzaGFsbG93KSB2ZXJ0aWVmZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzEKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IHJlcG9zaXRvcnkgYmFzZWQgb24gdGltZSIKK21zZ3N0ciAiIgorImRpZSBIaXN0b3JpZSBlaW5lcyBLbG9ucyBtaXQgdW52b2xsc3TDpG5kaWdlciBIaXN0b3JpZSAoc2hhbGxvdykgYXVmICIKKyJaZWl0YmFzaXNcbiIKKyJ2ZXJ0aWVmZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzcgYnVpbHRpbi9wdWxsLmM6MjExCittc2dpZCAiY29udmVydCB0byBhIGNvbXBsZXRlIHJlcG9zaXRvcnkiCittc2dzdHIgInp1IGVpbmVtIHZvbGxzdMOkbmRpZ2VuIFJlcG9zaXRvcnkga29udmVydGllcmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwCittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAiZGllcyBhbiBkaWUgQXVzZ2FiZSBkZXIgU3VibW9kdWwtUGZhZGUgdm9yYW5zdGVsbGVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgzCittc2dpZCAiIgorImRlZmF1bHQgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIChsb3dlciBwcmlvcml0eSB0aGFuIGNvbmZpZyAiCisiZmlsZXMpIgorbXNnc3RyICIiCisiU3RhbmRhcmQgZsO8ciBkaWUgcmVrdXJzaXZlIEFuZm9yZGVydW5nIHZvbiBTdWJtb2R1bGVuIChnZXJpbmdlcmUgUHJpb3JpdMOkdFxuIgorImFscyBLb25maWd1cmF0aW9uc2RhdGVpZW4pIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg3IGJ1aWx0aW4vcHVsbC5jOjIxNAorbXNnaWQgImFjY2VwdCByZWZzIHRoYXQgdXBkYXRlIC5naXQvc2hhbGxvdyIKK21zZ3N0ciAiUmVmZXJlbnplbiwgZGllIC5naXQvc2hhbGxvdyBha3R1YWxpc2llcmVuLCBha3plcHRpZXJlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OCBidWlsdGluL3B1bGwuYzoyMTYKK21zZ2lkICJyZWZtYXAiCittc2dzdHIgIlJlZm1hcCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OSBidWlsdGluL3B1bGwuYzoyMTcKK21zZ2lkICJzcGVjaWZ5IGZldGNoIHJlZm1hcCIKK21zZ3N0ciAiUmVmbWFwIGbDvHIgJ2ZldGNoJyBhbmdlYmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk2Cittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgIiIKKyJhdXNnZWJlbiwgZGFzcyB3aXIgbnVyIE9iamVrdGUgaGFiZW4sIGRpZSB2b24gZGllc2VtIE9iamVrdCBhdXMgZXJyZWljaGJhciAiCisic2luZCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5OQorbXNnaWQgInJ1biAnZ2MgLS1hdXRvJyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiRsO8aHJlICdnYyAtLWF1dG8nIG5hY2ggXCJmZXRjaFwiIGF1cyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMSBidWlsdGluL3B1bGwuYzoyMjYKK21zZ2lkICJjaGVjayBmb3IgZm9yY2VkLXVwZGF0ZXMgb24gYWxsIHVwZGF0ZWQgYnJhbmNoZXMiCittc2dzdHIgIlByw7xmZSBhdWYgZXJ6d3VuZ2VuZSBBa3R1YWxpc2llcnVuZ2VuIGluIGFsbGVuIGFrdHVhbGlzaWVydGVuIEJyYW5jaGVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAzCittc2dpZCAid3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiU2NocmVpYmUgZGVuIENvbW1pdC1HcmFwaCBuYWNoIFwiZmV0Y2hcIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUxMworbXNnaWQgIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIgorbXNnc3RyICJLb25udGUgUmVtb3RlLVJlZmVyZW56IHZvbiBIRUFEIG5pY2h0IGZpbmRlbi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlndXJhdGlvbiBmZXRjaC5vdXRwdXQgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAlcyIKK21zZ3N0ciAiS29uZmlndXJhdGlvbiBmZXRjaC5vdXRwdXQgZW50aMOkbHQgdW5nw7xsdGlnZW4gV2VydCAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1MQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICJPYmpla3QgJXMgbmljaHQgZ2VmdW5kZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTUKK21zZ2lkICJbdXAgdG8gZGF0ZV0iCittc2dzdHIgIltha3R1ZWxsXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2OCBidWlsdGluL2ZldGNoLmM6Nzg0IGJ1aWx0aW4vZmV0Y2guYzo4NTYKK21zZ2lkICJbcmVqZWN0ZWRdIgorbXNnc3RyICJbenVyw7xja2dld2llc2VuXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2OQorbXNnaWQgImNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJrYW5uIFwiZmV0Y2hcIiBpbSBha3R1ZWxsZW4gQnJhbmNoIG5pY2h0IGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzkKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIltUYWcgQWt0dWFsaXNpZXJ1bmddIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzgwIGJ1aWx0aW4vZmV0Y2guYzo4MTcgYnVpbHRpbi9mZXRjaC5jOjgzOQorIzogYnVpbHRpbi9mZXRjaC5jOjg1MQorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICJrYW5uIGxva2FsZSBSZWZlcmVueiBuaWNodCBha3R1YWxpc2llcmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzg0Cittc2dpZCAid291bGQgY2xvYmJlciBleGlzdGluZyB0YWciCittc2dzdHIgInfDvHJkZSBiZXN0ZWhlbmRlIFRhZ3MgdmVyw6RuZGVybiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwNgorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW25ldWVzIFRhZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDkKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIltuZXVlciBCcmFuY2hdIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODEyCittc2dpZCAiW25ldyByZWZdIgorbXNnc3RyICJbbmV1ZSBSZWZlcmVuel0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICJBa3R1YWxpc2llcnVuZyBlcnp3dW5nZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTYKK21zZ2lkICJub24tZmFzdC1mb3J3YXJkIgorbXNnc3RyICJrZWluIFZvcnNwdWxlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg3NworbXNnaWQgIiIKKyJGZXRjaCBub3JtYWxseSBpbmRpY2F0ZXMgd2hpY2ggYnJhbmNoZXMgaGFkIGEgZm9yY2VkIHVwZGF0ZSxcbiIKKyJidXQgdGhhdCBjaGVjayBoYXMgYmVlbiBkaXNhYmxlZC4gVG8gcmUtZW5hYmxlLCB1c2UgJy0tc2hvdy1mb3JjZWQtdXBkYXRlcydcbiIKKyJmbGFnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJy4iCittc2dzdHIgIiIKKyJOb3JtYWxlcndlaXNlIHplaWd0ICdmZXRjaCcgd2VsY2hlIEJyYW5jaGVzIGVpbmUgZXJ6d3VuZ2VuZSBBa3R1YWxpc2llcnVuZ1xuIgorImhhdHRlbiwgYWJlciBkaWVzZSDDnGJlcnByw7xmdW5nIHd1cmRlIGRlYWt0aXZpZXJ0LiBVbSBkaWVzZSB3aWVkZXIgenVcbiIKKyJha3RpdmllcmVuLCBudXR6ZW4gU2llIGRpZSBPcHRpb24gJy0tc2hvdy1mb3JjZWQtdXBkYXRlZCcgb2RlciBmw7xocmVuXG4iCisiU2llICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIHRydWUnIGF1cy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGNoZWNrIGZvcmNlZCB1cGRhdGVzLiBZb3UgY2FuIHVzZVxuIgorIictLW5vLXNob3ctZm9yY2VkLXVwZGF0ZXMnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyAiCisiZmFsc2UnXG4iCisiIHRvIGF2b2lkIHRoaXMgY2hlY2suXG4iCittc2dzdHIgIiIKKyJFcyBicmF1Y2h0ZSAlLjJmIFNla3VuZGVuLCB1bSBlcnp3dW5nZW5lIEFrdHVhbGlzaWVydW5nZW4genUgw7xiZXJwcsO8ZmVuLlxuIgorIlNpZSBrw7ZubmVuIGRpZSBPcHRpb24gJy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcycgYmVudXR6ZW4gb2RlclxuIgorIidnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIGZhbHNlJyBhdXNmw7xocmVuLCB1bSBkaWVzZSDDnGJlcnByw7xmdW5nXG4iCisienUgdW1nZWhlbi5cbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzIGhhdCBuaWNodCBhbGxlIGVyZm9yZGVybGljaGVuIE9iamVrdGUgZ2VzZW5kZXRcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk0MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWplY3QgJXMgYmVjYXVzZSBzaGFsbG93IHJvb3RzIGFyZSBub3QgYWxsb3dlZCB0byBiZSB1cGRhdGVkIgorbXNnc3RyICIiCisiJXMgd3VyZGUgenVyw7xja2dld2llc2VuLCBkYSBSb290LUNvbW1pdHMgdm9uIFJlcG9zaXRvcmllcyBtaXQgIgorInVudm9sbHN0w6RuZGlnZXJcbiIKKyJIaXN0b3JpZSAoc2hhbGxvdykgbmljaHQgYWt0dWFsaXNpZXJ0IHdlcmRlbiBkw7xyZmVuLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMjYgYnVpbHRpbi9mZXRjaC5jOjExNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIlZvbiAlLipzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKyJFaW5pZ2UgbG9rYWxlIFJlZmVyZW56ZW4ga29ubnRlbiBuaWNodCBha3R1YWxpc2llcnQgd2VyZGVuOyB2ZXJzdWNoZW4gU2llXG4iCisiJ2dpdCByZW1vdGUgcHJ1bmUgJXMnLCB1bSBqZWRlbiDDpGx0ZXJlbiwgd2lkZXJzcHLDvGNobGljaGVuIEJyYW5jaCB6dSBsw7ZzY2hlbi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyB3aXJkIHVucmVmZXJlbnppZXJ0KSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMgd3VyZGUgdW5yZWZlcmVuemllcnQpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2NworbXNnaWQgIltkZWxldGVkXSIKK21zZ3N0ciAiW2dlbMO2c2NodF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTExMgorbXNnaWQgIihub25lKSIKK21zZ3N0ciAiKG5pY2h0cykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorIkRlciBcImZldGNoXCIgaW4gZGVuIGFrdHVlbGxlbiBCcmFuY2ggJXMgdm9uIGVpbmVtIE5pY2h0LUJhcmUtUmVwb3NpdG9yeSAiCisid3VyZGUgdmVyd2VpZ2VydC4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIk9wdGlvbiBcIiVzXCIgV2VydCBcIiVzXCIgaXN0IG5pY2h0IGfDvGx0aWcgZsO8ciAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICJPcHRpb24gXCIlc1wiIHdpcmQgaWdub3JpZXJ0IGbDvHIgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MjEKK21zZ2lkICJtdWx0aXBsZSBicmFuY2hlcyBkZXRlY3RlZCwgaW5jb21wYXRpYmxlIHdpdGggLS1zZXQtdXBzdHJlYW0iCittc2dzdHIgIk1laHJlcmUgQnJhbmNoZXMgZXJrYW5udCwgaW5rb21wYXRpYmVsIG1pdCAtLXNldC11cHN0cmVhbSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzYKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiU2V0emUga2VpbmVuIFVwc3RyZWFtIGbDvHIgZWluZW4gZW50ZmVybnRlbiBSZW1vdGUtVHJhY2tpbmctQnJhbmNoLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzgKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgdGFnIgorbXNnc3RyICJTZXR6ZSBrZWluZW4gVXBzdHJlYW0gZsO8ciBlaW5lbiBUYWcgZWluZXMgUmVtb3RlLVJlcG9zaXRvcmllcy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDQwCittc2dpZCAidW5rbm93biBicmFuY2ggdHlwZSIKK21zZ3N0ciAiVW5iZWthbm50ZXIgQnJhbmNoLVR5cCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NDIKK21zZ2lkICIiCisibm8gc291cmNlIGJyYW5jaCBmb3VuZC5cbiIKKyJ5b3UgbmVlZCB0byBzcGVjaWZ5IGV4YWN0bHkgb25lIGJyYW5jaCB3aXRoIHRoZSAtLXNldC11cHN0cmVhbSBvcHRpb24uIgorbXNnc3RyICIiCisiS2VpbmVuIFF1ZWxsLUJyYW5jaCBnZWZ1bmRlbi5cbiIKKyJTaWUgbcO8c3NlbiBiZWkgZGVyIE9wdGlvbiAtLXNldC11cHN0cmVhbSBnZW5hdSBlaW5lbiBCcmFuY2ggYW5nZWJlbi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTY4IGJ1aWx0aW4vZmV0Y2guYzoxNjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIkZvcmRlcmUgYW4gdm9uICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTc4IGJ1aWx0aW4vZmV0Y2guYzoxNjMzIGJ1aWx0aW4vcmVtb3RlLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAiS29ubnRlIG5pY2h0IHZvbiAlcyBhbmZvcmRlcm4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmZXRjaCAnJXMnIChleGl0IGNvZGU6ICVkKVxuIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBhbmZvcmRlcm4gKEV4aXQtQ29kZTogJWQpXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjkzCittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJLZWluIFJlbW90ZS1SZXBvc2l0b3J5IGFuZ2VnZWJlbi4gQml0dGUgZ2ViZW4gU2llIGVudHdlZGVyIGVpbmUgVVJMXG4iCisib2RlciBkZW4gTmFtZW4gZGVzIFJlbW90ZS1SZXBvc2l0b3JpZXMgYW4sIHZvbiB3ZWxjaGVtIG5ldWVcbiIKKyJDb21taXRzIGFuZ2Vmb3JkZXJ0IHdlcmRlbiBzb2xsZW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTczMAorbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgIlNpZSBtw7xzc2VuIGRlbiBOYW1lbiBkZXMgVGFncyBhbmdlYmVuLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODAKK21zZ2lkICJOZWdhdGl2ZSBkZXB0aCBpbiAtLWRlZXBlbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJOZWdhdGl2ZSBUaWVmZSB3aXJkIHZvbiAtLWRlZXBlbiBuaWNodCB1bnRlcnN0w7x0enQuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc4MgorbXNnaWQgIi0tZGVlcGVuIGFuZCAtLWRlcHRoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tZGVlcGVuIHVuZCAtLWRlcHRoIHNjaGxpZcOfZW4gc2ljaCBnZWdlbnNlaXRpZyBhdXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzg3Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uZW4gLS1kZXB0aCB1bmQgLS11bnNoYWxsb3cga8O2bm5lbiBuaWNodCBnZW1laW5zYW0gdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzg5Cittc2dpZCAiLS11bnNoYWxsb3cgb24gYSBjb21wbGV0ZSByZXBvc2l0b3J5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uIC0tdW5zaGFsbG93IGthbm4gbmljaHQgaW4gZWluZW0gUmVwb3NpdG9yeSBtaXQgdm9sbHN0w6RuZGlnZXIgIgorIkhpc3RvcmllIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwNQorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICJmZXRjaCAtLWFsbCBha3plcHRpZXJ0IGtlaW4gUmVwb3NpdG9yeSBhbHMgQXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODA3Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJmZXRjaCAtLWFsbCBrYW5uIG5pY2h0IG1pdCBSZWZzcGVjcyB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAiS2VpbiBSZW1vdGUtUmVwb3NpdG9yeSAoZWluemVsbiBvZGVyIEdydXBwZSk6ICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgyMworbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorIkRhcyBBYmhvbGVuIGVpbmVyIEdydXBwZSB2b24gUmVtb3RlLVJlcG9zaXRvcmllcyBrYW5uIG5pY2h0IG1pdCBkZXIgQW5nYWJlXG4iCisidm9uIFJlZnNwZWNzIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg0MQorbXNnaWQgIiIKKyItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSBjb25maWd1cmVkIGluIGV4dGVuc2lvbnMuIgorInBhcnRpYWxjbG9uZSIKK21zZ3N0ciAiIgorIi0tZmlsdGVyIGthbm4gbnVyIG1pdCBkZW4gUmVtb3RlLVJlcG9zaXRvcmllcyB2ZXJ3ZW5kZXQgd2VyZGVuLFxuIgorImRpZSBpbiBjb3JlLnBhcnRpYWxDbG9uZSBrb25maWd1cmllcnQgc2luZC4iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjE4Cittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPEJlc2NocmVpYnVuZz5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlICIKKyI8RGF0ZWk+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcxCittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICJIaXN0b3JpZSBtaXQgaMO2Y2hzdGVucyA8bj4gRWludHLDpGdlbiB2b24gXCJzaG9ydGxvZ1wiIGhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzQKK21zZ2lkICJhbGlhcyBmb3IgLS1sb2cgKGRlcHJlY2F0ZWQpIgorbXNnc3RyICJBbGlhcyBmw7xyIC0tbG9nICh2ZXJhbHRldCkiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NworbXNnaWQgInRleHQiCittc2dzdHIgIlRleHQiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3OAorbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAiPFRleHQ+IGFscyBCZXNjaHJlaWJ1bmdzYW5mYW5nIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc5Cittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgIkRhdGVpIHp1bSBFaW5sZXNlbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMAorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWzxPcHRpb25lbj5dIFs8TXVzdGVyPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTEKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDxPYmpla3Q+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMgorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbW1pdD5dXSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8Q29tbWl0Pl1dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEzCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPGNvbW1pdD5dXSBbLS1uby1jb250YWlucyBbPGNvbW1pdD5dXSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPE9iamVrdD5dXSBbLS1uby1jb250YWlucyBbPENvbW1pdD5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIgorbXNnc3RyICJQbGF0emhhbHRlciBhbHMgU2hlbGwtU3RyaW5nIGZvcm1hdGllcmVuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMwCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBwZXJsIgorbXNnc3RyICJQbGF0emhhbHRlciBhbHMgUGVybC1TdHJpbmcgZm9ybWF0aWVyZW4iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzIKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHB5dGhvbiIKK21zZ3N0ciAiUGxhdHpoYWx0ZXIgYWxzIFB5dGhvbi1TdHJpbmcgZm9ybWF0aWVyZW4iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAiUGxhdHpoYWx0ZXIgYWxzIFRjbC1TdHJpbmcgZm9ybWF0aWVyZW4iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzcKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAibnVyIDxuPiBwYXNzZW5kZSBSZWZlcmVuemVuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM5IGJ1aWx0aW4vdGFnLmM6NDM5Cittc2dpZCAicmVzcGVjdCBmb3JtYXQgY29sb3JzIgorbXNnc3RyICJGb3JtYXRmYXJiZW4gYmVhY2h0ZW4iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggcG9pbnRzIGF0IHRoZSBnaXZlbiBvYmplY3QiCittc2dzdHIgIm51ciBhdWYgZGllc2VzIE9iamVrdCB6ZWlnZW5kZSBSZWZlcmVuemVuIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ0Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAibnVyIHp1c2FtbWVuZ2Vmw7xocnRlIFJlZmVyZW56ZW4gYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDUKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAibnVyIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIFJlZmVyZW56ZW4gYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDYKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJudXIgUmVmZXJlbnplbiBhdXNnZWJlbiwgZGllIGRpZXNlbiBDb21taXQgZW50aGFsdGVuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ3Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAibnVyIFJlZmVyZW56ZW4gYXVzZ2ViZW4sIGRpZSBkaWVzZW4gQ29tbWl0IG5pY2h0IGVudGhhbHRlbiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjggYnVpbHRpbi9mc2NrLmM6MTQ3IGJ1aWx0aW4vZnNjay5jOjE0OAorbXNnaWQgInVua25vd24iCittc2dzdHIgInVuYmVrYW5udCIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTAwIGJ1aWx0aW4vZnNjay5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiAlcyAlczogJXMiCittc2dzdHIgIkZlaGxlciBpbiAlcyAlczogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIHdhcm5pbmcgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmcgaW4gJXMgJXM6ICVzIgorbXNnc3RyICJXYXJudW5nIGluICVzICVzOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MTQzIGJ1aWx0aW4vZnNjay5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJicm9rZW4gbGluayBmcm9tICU3cyAlcyIKK21zZ3N0ciAiRmVobGVyaGFmdGUgVmVya27DvHBmdW5nIHZvbiAlN3MgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE1NQorbXNnaWQgIndyb25nIG9iamVjdCB0eXBlIGluIGxpbmsiCittc2dzdHIgIkZhbHNjaGVyIE9iamVrdHR5cCBpbiBWZXJrbsO8cGZ1bmcuIgorCisjOiBidWlsdGluL2ZzY2suYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImJyb2tlbiBsaW5rIGZyb20gJTdzICVzXG4iCisiICAgICAgICAgICAgICB0byAlN3MgJXMiCittc2dzdHIgIiIKKyJGZWhsZXJoYWZ0ZSBWZXJrbsO8cGZ1bmcgdm9uICU3cyAlc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgbmFjaCAlN3MgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzICVzIgorbXNnc3RyICIlcyAlcyBmZWhsdCIKKworIzogYnVpbHRpbi9mc2NrLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVhY2hhYmxlICVzICVzIgorbXNnc3RyICIlcyAlcyBuaWNodCBlcnJlaWNoYmFyIgorCisjOiBidWlsdGluL2ZzY2suYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGFuZ2xpbmcgJXMgJXMiCittc2dzdHIgIiVzICVzIHVucmVmZXJlbnppZXJ0IgorCisjOiBidWlsdGluL2ZzY2suYzozMzkKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxvc3QtZm91bmQiCittc2dzdHIgIktvbm50ZSBsb3N0LWZvdW5kIG5pY2h0IGVyc3RlbGxlbi4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGFic2NobGllw59lbi4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyIKK21zZ3N0ciAiUHLDvGZlICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5ICglZCBvYmplY3RzKSIKK21zZ3N0ciAiUHLDvGZlIEtvbm5la3Rpdml0w6R0ICglZCBPYmpla3RlKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzICVzIgorbXNnc3RyICJQcsO8ZmUgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyOQorbXNnaWQgImJyb2tlbiBsaW5rcyIKK21zZ3N0ciAiRmVobGVyaGFmdGUgVmVya27DvHBmdW5nZW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJyb290ICVzIgorbXNnc3RyICJXdXJ6ZWwgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWdnZWQgJXMgJXMgKCVzKSBpbiAlcyIKK21zZ3N0ciAiJXMgJXMgKCVzKSBpbiAlcyBnZXRhZ2d0IgorCisjOiBidWlsdGluL2ZzY2suYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3NpbmciCittc2dzdHIgIiVzOiBPYmpla3QgZmVobGVyaGFmdCBvZGVyIG5pY2h0IHZvcmhhbmRlbiIKKworIzogYnVpbHRpbi9mc2NrLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHJlZmxvZyBlbnRyeSAlcyIKK21zZ3N0ciAiJXM6IFVuZ8O8bHRpZ2VyIFJlZmxvZy1FaW50cmFnICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVmbG9nICVzLT4lcyIKK21zZ3N0ciAiUHLDvGZlIFJlZmxvZyAlcy0+JXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgJXMiCittc2dzdHIgIiVzOiBVbmfDvGx0aWdlciBTSEExLVplaWdlciAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSBjb21taXQiCittc2dzdHIgIiVzOiBrZWluIENvbW1pdCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjA5Cittc2dpZCAibm90aWNlOiBObyBkZWZhdWx0IHJlZmVyZW5jZXMiCittc2dzdHIgIk5vdGl6OiBLZWluZSBTdGFuZGFyZHJlZmVyZW56ZW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZzogJXMiCittc2dzdHIgIiVzOiBPYmpla3QgZmVobGVyaGFmdCBvZGVyIG5pY2h0IHZvcmhhbmRlbjogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICVzIgorbXNnc3RyICIlczogT2JqZWt0IGtvbm50ZSBuaWNodCBnZXBhcnN0IHdlcmRlbjogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY1NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc2hhMSBmaWxlOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBTSEExLURhdGVpOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjcyCittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yeSIKK21zZ3N0ciAiUHLDvGZlIE9iamVrdC1WZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi9mc2NrLmM6Njc1Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yaWVzIgorbXNnc3RyICJQcsO8ZmUgT2JqZWt0LVZlcnplaWNobmlzc2UiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyBsaW5rIgorbXNnc3RyICJQcsO8ZmUgJXMgVmVya27DvHBmdW5nIgorCisjOiBidWlsdGluL2ZzY2suYzo2OTUgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIE9iamVrdC1UeXAgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIKK21zZ3N0ciAiJXMgemVpZ3QgYXVmIGV0d2FzIHNlbHRzYW1lcyAoJXMpIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRldGFjaGVkIEhFQUQgcG9pbnRzIGF0IG5vdGhpbmciCittc2dzdHIgIiVzOiBsb3NnZWzDtnN0ZXIgSEVBRCB6ZWlndCBhdWYgbmljaHRzIgorCisjOiBidWlsdGluL2ZzY2suYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aWNlOiAlcyBwb2ludHMgdG8gYW4gdW5ib3JuIGJyYW5jaCAoJXMpIgorbXNnc3RyICJOb3RpejogJXMgemVpZ3QgYXVmIGVpbmVuIHVuZ2Vib3JlbmVuIEJyYW5jaCAoJXMpIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjQKK21zZ2lkICJDaGVja2luZyBjYWNoZSB0cmVlIgorbXNnc3RyICJQcsO8ZmUgQ2FjaGUtVmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAiJXM6IFVuZ8O8bHRpZ2VyIFNIQTEtWmVpZ2VyIGluIENhY2hlLVZlcnplaWNobmlzIgorCisjOiBidWlsdGluL2ZzY2suYzo3MzgKK21zZ2lkICJub24tdHJlZSBpbiBjYWNoZS10cmVlIgorbXNnc3RyICJub24tdHJlZSBpbiBDYWNoZS1WZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzY5Cittc2dpZCAiZ2l0IGZzY2sgWzxvcHRpb25zPl0gWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IGZzY2sgWzxPcHRpb25lbj5dIFs8T2JqZWt0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NQorbXNnaWQgInNob3cgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAidW5lcnJlaWNoYmFyZSBPYmpla3RlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzYKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgInVucmVmZXJlbnppZXJ0ZSBPYmpla3RlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzcKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAiVGFncyBtZWxkZW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3OAorbXNnaWQgInJlcG9ydCByb290IG5vZGVzIgorbXNnc3RyICJIYXVwdHd1cnplbG4gbWVsZGVuIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzkKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAiSW5kZXgtT2JqZWt0ZSBpbiBFcnJlaWNoYmFya2VpdHNwcsO8ZnVuZyBlaW5iZXppZWhlbiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgwCittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICJSZWZsb2dzIGluIEVycmVpY2hiYXJrZWl0c3Byw7xmdW5nIGVpbmJlemllaGVuIChTdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MQorbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICJlYmVuc28gUGFrZXRlIHVuZCBhbHRlcm5hdGl2ZSBPYmpla3RlIGJldHJhY2h0ZW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MgorbXNnaWQgImNoZWNrIG9ubHkgY29ubmVjdGl2aXR5IgorbXNnc3RyICJudXIgS29ubmVrdGl2aXTDpHQgcHLDvGZlbiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgzCittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICJnZW5hdWVyZSBQcsO8ZnVuZyBha3RpdmllcmVuIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODUKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAidW5yZWZlcmVuemllcnRlIE9iamVrdGUgbmFjaCAuZ2l0L2xvc3QtZm91bmQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODYgYnVpbHRpbi9wcnVuZS5jOjEzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgIkZvcnRzY2hyaXR0c2FuemVpZ2UgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NworbXNnaWQgInNob3cgdmVyYm9zZSBuYW1lcyBmb3IgcmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImF1c2bDvGhybGljaGUgTmFtZW4gZsO8ciBlcnJlaWNoYmFyZSBPYmpla3RlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2ZzY2suYzo4NDYgYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI1Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUHLDvGZlIE9iamVrdGUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IG1pc3NpbmciCittc2dzdHIgIiVzOiBPYmpla3QgbmljaHQgdm9yaGFuZGVuIgorCisjOiBidWlsdGluL2ZzY2suYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXI6IGV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlciBQYXJhbWV0ZXI6IFNIQS0xIGVyd2FydGV0LCAnJXMnIGJla29tbWVuIgorCisjOiBidWlsdGluL2djLmM6MzUKK21zZ2lkICJnaXQgZ2MgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBnYyBbPE9wdGlvbmVuPl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZnN0YXQgJXM6ICVzIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBsZXNlbjogJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlICclcycgdmFsdWUgJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gUGFyc2VuIHZvbiAnJXMnIG1pdCBkZW0gV2VydCAnJXMnIgorCisjOiBidWlsdGluL2djLmM6NDc1IGJ1aWx0aW4vaW5pdC1kYi5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgIkthbm4gJyVzJyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9nYy5jOjQ4NCBidWlsdGluL25vdGVzLmM6MjQwIGJ1aWx0aW4vdGFnLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyciCittc2dzdHIgImthbm4gJyVzJyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9nYy5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGxhc3QgZ2MgcnVuIHJlcG9ydGVkIHRoZSBmb2xsb3dpbmcuIFBsZWFzZSBjb3JyZWN0IHRoZSByb290IGNhdXNlXG4iCisiYW5kIHJlbW92ZSAlcy5cbiIKKyJBdXRvbWF0aWMgY2xlYW51cCB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgdW50aWwgdGhlIGZpbGUgaXMgcmVtb3ZlZC5cbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkRpZSBsZXR6dGUgQXVzZsO8aHJ1bmcgdm9uIFwiZ2MgcnVuXCIgZW50aGllbHQgZGllIGZvbGdlbmRlbiBNZWxkdW5nZW4uXG4iCisiQml0dGUgYmVoZWJlbiBTaWUgZGFzIEhhdXB0cHJvYmxlbSB1bmQgbMO2c2NoZW4gU2llICVzLlxuIgorIkVpbiBhdXRvbWF0aXNjaGVyIENsZWFudXAgd2lyZCBuaWNodCBhdXNnZWbDvGhydCwgYmlzIGRpZXNlIERhdGVpIGVudGZlcm50XG4iCisid3VyZGUuXG4iCisiXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1MzkKK21zZ2lkICJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAidW5yZWZlcmVuemllcnRlIE9iamVrdGUgZW50ZmVybmVuIgorCisjOiBidWlsdGluL2djLmM6NTQxCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICJtZWhyIEdyw7xuZGxpY2hrZWl0IChlcmjDtmh0IExhdWZ6ZWl0KSIKKworIzogYnVpbHRpbi9nYy5jOjU0MgorbXNnaWQgImVuYWJsZSBhdXRvLWdjIG1vZGUiCittc2dzdHIgIlwiYXV0by1nY1wiIE1vZHVzIGFrdGl2aWVyZW4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDUKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAiIgorIkF1c2bDvGhydW5nIHZvbiBcImdpdCBnY1wiIGVyendpbmdlbiwgc2VsYnN0IHdlbm4gZWluIGFuZGVyZXNcbiIKKyJcImdpdCBnY1wiIGJlcmVpdHMgYXVzZ2Vmw7xocnQgd2lyZCIKKworIzogYnVpbHRpbi9nYy5jOjU0OAorbXNnaWQgInJlcGFjayBhbGwgb3RoZXIgcGFja3MgZXhjZXB0IHRoZSBsYXJnZXN0IHBhY2siCittc2dzdHIgImFsbGUgYW5kZXJlbiBQYWtldGUsIGF1w59lciBkYXMgZ3LDtsOfdGUgUGFrZXQsIG5ldSBwYWNrZW4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGdjLmxvZ2V4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gUGFyc2VuIGRlcyBXZXJ0ZXMgJyVzJyB2b24gZ2MubG9nZXhwaXJ5LiIKKworIzogYnVpbHRpbi9nYy5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgcHJ1bmUgZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBQYXJzZW4gZGVzIFwicHJ1bmUgZXhwaXJ5XCIgV2VydGVzICVzIgorCisjOiBidWlsdGluL2djLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICIiCisiRGllIERhdGVuYmFuayBkZXMgUmVwb3NpdG9yaWVzIHdpcmQgZsO8ciBlaW5lIG9wdGltYWxlIFBlcmZvcm1hbmNlIGltXG4iCisiSGludGVyZ3J1bmQga29tcHJpbWllcnQuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICIiCisiRGllIERhdGVuYmFuayBkZXMgUHJvamVrdGFyY2hpdnMgd2lyZCBmw7xyIGVpbmUgb3B0aW1hbGUgUGVyZm9ybWFuY2UgIgorImtvbXByaW1pZXJ0LlxuIgorCisjOiBidWlsdGluL2djLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1hbnVhbCBob3VzZWtlZXBpbmcuXG4iCittc2dzdHIgIlNpZWhlIFwiZ2l0IGhlbHAgZ2NcIiBmw7xyIG1hbnVlbGxlcyBBdWZyw6R1bWVuLlxuIgorCisjOiBidWlsdGluL2djLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnYyBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gbWFjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBpZiBub3QpIgorbXNnc3RyICIiCisiXCJnaXQgZ2NcIiB3aXJkIGJlcmVpdHMgYXVmIE1hc2NoaW5lICclcycgcGlkICU8UFJJdU1BWD4gYXVzZ2Vmw7xocnRcbiIKKyIoYmVudXR6ZW4gU2llIC0tZm9yY2UgZmFsbHMgbmljaHQpIgorCisjOiBidWlsdGluL2djLmM6Njk0Cittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgorbXNnc3RyICIiCisiRXMgZ2lidCB6dSB2aWVsZSB1bmVycmVpY2hiYXJlIGxvc2UgT2JqZWt0ZTsgZsO8aHJlbiBTaWUgJ2dpdCBwcnVuZScgYXVzLCB1bSAiCisiZGllc2UgenUgbMO2c2NoZW4uIgorCisjOiBidWlsdGluL2dyZXAuYzozMAorbXNnaWQgImdpdCBncmVwIFs8b3B0aW9ucz5dIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGdyZXAgWzxPcHRpb25lbj5dIFstZV0gPE11c3Rlcj4gWzxDb21taXQ+Li4uXSBbWy0tXSA8UGZhZD4uLi5dIgorCisjOiBidWlsdGluL2dyZXAuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVwOiBGZWhsZXIgYmVpbSBFcnpldWdlbiBlaW5lcyBUaHJlYWQ6ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSBmb3IgJXMiCittc2dzdHIgInVuZ8O8bHRpZ2UgQW56YWhsIHZvbiBUaHJlYWRzICglZCkgZsO8ciAlcyBhbmdlZ2ViZW4iCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBpcyB0aGUgY29uZmlndXJhdGlvbgorIy4gdmFyaWFibGUgZm9yIHR3ZWFraW5nIHRocmVhZHMsIGN1cnJlbnRseQorIy4gZ3JlcC50aHJlYWRzCisjLgorIzogYnVpbHRpbi9ncmVwLmM6Mjg3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzggYnVpbHRpbi9pbmRleC1wYWNrLmM6MTczMQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiCittc2dzdHIgImtlaW5lIFVudGVyc3TDvHR6dW5nIHZvbiBUaHJlYWRzLCAnJXMnIHdpcmQgaWdub3JpZXJ0IgorCisjOiBidWlsdGluL2dyZXAuYzo0NTMgYnVpbHRpbi9ncmVwLmM6NTc4IGJ1aWx0aW4vZ3JlcC5jOjYxOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgImtvbm50ZSBcIlRyZWVcIi1PYmpla3QgKCVzKSBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgImthbm4gXCJncmVwXCIgbmljaHQgbWl0IE9iamVrdGVuIGRlcyBUeXBzICVzIGR1cmNoZsO8aHJlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIlNjaGFsdGVyICclYycgZXJ3YXJ0ZXQgZWluZW4gbnVtZXJpc2NoZW4gV2VydCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODAzCittc2dpZCAic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAiaW0gSW5kZXggYW5zdGF0dCBpbSBBcmJlaXRzdmVyemVpY2huaXMgc3VjaGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDUKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAiYXVjaCBpbiBJbmhhbHRlbiBmaW5kZW4sIGRpZSBuaWNodCB2b24gR2l0IHZlcndhbHRldCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwNworbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiaW4gdmVyc2lvbmllcnRlbiB1bmQgdW52ZXJzaW9uaWVydGVuIERhdGVpZW4gc3VjaGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDkKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgIkRhdGVpZW4sIGRpZSDDvGJlciAnLmdpdGlnbm9yZScgYW5nZWdlYmVuIHNpbmQsIGlnbm9yaWVyZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxMQorbXNnaWQgInJlY3Vyc2l2ZWx5IHNlYXJjaCBpbiBlYWNoIHN1Ym1vZHVsZSIKK21zZ3N0ciAicmVrdXJzaXZlIFN1Y2hlIGluIGplZGVtIFN1Ym1vZHVsIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTQKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAiWmVpbGVuIG9obmUgw5xiZXJlaW5zdGltbXVuZ2VuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTYKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICLDnGJlcmVpbnN0aW1tdW5nZW4gdW5hYmjDpG5naWcgdm9uIEdyb8OfLSB1bmQgS2xlaW5zY2hyZWlidW5nIGZpbmRlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE4Cittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgIm51ciBnYW56ZSBXw7ZydGVyIHN1Y2hlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIwCittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAiYmluw6RyZSBEYXRlaWVuIGFscyBUZXh0IHZlcmFyYmVpdGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjIKK21zZ2lkICJkb24ndCBtYXRjaCBwYXR0ZXJucyBpbiBiaW5hcnkgZmlsZXMiCittc2dzdHIgImtlaW5lIE11c3RlciBpbiBCaW7DpHJkYXRlaWVuIGZpbmRlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI1Cittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgd2l0aCB0ZXh0Y29udiBmaWx0ZXJzIgorbXNnc3RyICJiaW7DpHJlIERhdGVpZW4gbWl0IFwidGV4dGNvbnZcIi1GaWx0ZXJuIHZlcmFyYmVpdGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjcKK21zZ2lkICJzZWFyY2ggaW4gc3ViZGlyZWN0b3JpZXMgKGRlZmF1bHQpIgorbXNnc3RyICJpbiBVbnRlcnZlcnplaWNobmlzc2VuIHN1Y2hlbiAoU3RhbmRhcmQpIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjkKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgImjDtmNoc3RlbnMgPFRpZWZlPiBFYmVuZW4gZHVyY2hsYXVmZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMworbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJlcndlaXRlcnRlIHJlZ3Vsw6RyZSBBdXNkcsO8Y2tlIGF1cyBQT1NJWCB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNgorbXNnaWQgInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIKK21zZ3N0ciAiZ3J1bmRsZWdlbmRlIHJlZ3Vsw6RyZSBBdXNkcsO8Y2tlIGF1cyBQT1NJWCB2ZXJ3ZW5kZW4gKFN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM5Cittc2dpZCAiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiCittc2dzdHIgIk11c3RlciBhbHMgZmVzdGUgWmVpY2hlbmtldHRlbiBpbnRlcnByZXRpZXJlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQyCittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJQZXJsLWtvbXBhdGlibGUgcmVndWzDpHJlIEF1c2Ryw7xja2UgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDUKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAiWmVpbGVubnVtbWVybiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ2Cittc2dpZCAic2hvdyBjb2x1bW4gbnVtYmVyIG9mIGZpcnN0IG1hdGNoIgorbXNnc3RyICJOdW1tZXIgZGVyIFNwYWx0ZSBkZXMgZXJzdGVuIFRyZWZmZXJzIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDcKK21zZ2lkICJkb24ndCBzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAia2VpbmUgRGF0ZWluYW1lbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ4Cittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIkRhdGVpbmFtZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgIkRhdGVpbmFtZW4gcmVsYXRpdiB6dW0gUHJvamVrdHZlcnplaWNobmlzIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTIKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIm51ciBEYXRlaW5hbWVuIGFuemVpZ2VuIGFuc3RhdHQgw7xiZXJlaW5zdGltbWVuZGUgWmVpbGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTQKK21zZ2lkICJzeW5vbnltIGZvciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKK21zZ3N0ciAiU3lub255bSBmw7xyIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTcKK21zZ2lkICJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giCittc2dzdHIgIm51ciBkaWUgRGF0ZWluYW1lbiBvaG5lIMOcYmVyZWluc3RpbW11bmdlbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU5Cittc2dpZCAicHJpbnQgTlVMIGFmdGVyIGZpbGVuYW1lcyIKK21zZ3N0ciAiTlVMLVplaWNoZW4gbmFjaCBEYXRlaW5hbWVuIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjIKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hpbmcgcGFydHMgb2YgYSBsaW5lIgorbXNnc3RyICJudXIgw7xiZXJlaW5zdGltbWVuZGUgVGVpbGUgZGVyIFplaWxlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjQKK21zZ2lkICJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJhbnN0YXR0IGRlciBaZWlsZW4sIGRpZSBBbnphaGwgZGVyIMO8YmVyZWluc3RpbW1lbmRlbiBaZWlsZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NQorbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICLDnGJlcmVpbnN0aW1tdW5nZW4gaGVydm9yaGViZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NworbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICIiCisiZWluZSBMZWVyemVpbGUgendpc2NoZW4gw5xiZXJlaW5zdGltbXVuZ2VuIGluIHZlcnNjaGllZGVuZW4gRGF0ZWllbiBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY5Cittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAiIgorImRlbiBEYXRlaW5hbWVuIG51ciBlaW5tYWwgb2JlcmhhbGIgZGVyIMOcYmVyZWluc3RpbW11bmdlbiBhdXMgZGllc2VyIERhdGVpICIKKyJhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODcyCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIjxuPiBaZWlsZW4gdm9yIHVuZCBuYWNoIGRlbiDDnGJlcmVpbnN0aW1tdW5nZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NQorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIjxuPiBaZWlsZW4gdm9yIGRlbiDDnGJlcmVpbnN0aW1tdW5nZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NworbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAiPG4+IFplaWxlbiBuYWNoIGRlbiDDnGJlcmVpbnN0aW1tdW5nZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3OQorbXNnaWQgInVzZSA8bj4gd29ya2VyIHRocmVhZHMiCittc2dzdHIgIjxuPiBUaHJlYWRzIGJlbnV0emVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODAKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICJLdXJ6Zm9ybSBmw7xyIC1DIE5VTSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgzCittc2dpZCAic2hvdyBhIGxpbmUgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAiZWluZSBaZWlsZSBtaXQgZGVtIEZ1bmt0aW9uc25hbWVuIHZvciDDnGJlcmVpbnN0aW1tdW5nZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4NQorbXNnaWQgInNob3cgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIgorbXNnc3RyICJkaWUgdW1nZWJlbmRlIEZ1bmt0aW9uIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODgKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIKK21zZ3N0ciAiTXVzdGVyIHZvbiBlaW5lciBEYXRlaSBsZXNlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkwCittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICI8TXVzdGVyPiBmaW5kZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MgorbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgIk11c3RlciBrb21iaW5pZXJlbiwgZGllIG1pdCAtZSBhbmdlZ2ViZW4gd3VyZGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDQKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAiw5xiZXJlaW5zdGltbXVuZ2VuIG51ciBkdXJjaCBCZWVuZGlndW5nc3N0YXR1cyBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTA2Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIKK21zZ3N0ciAiIgorIm51ciDDnGJlcmVpbnN0aW1tdW5nZW4gdm9uIERhdGVpZW4gYW56ZWlnZW4sIGRpZSBhbGxlbiBNdXN0ZXJuIGVudHNwcmVjaGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDgKK21zZ2lkICJzaG93IHBhcnNlIHRyZWUgZm9yIGdyZXAgZXhwcmVzc2lvbiIKK21zZ3N0ciAiZ2VwYXJzdGVzIFZlcnplaWNobmlzIGbDvHIgXCJncmVwXCItQXVzZHJ1Y2sgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxMgorbXNnaWQgInBhZ2VyIgorbXNnc3RyICJBbnplaWdlcHJvZ3JhbW0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxMgorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICJEYXRlaWVuIG1pdCDDnGJlcmVpbnN0aW1tdW5nZW4gaW0gQW56ZWlnZXByb2dyYW1tIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTYKK21zZ2lkICJhbGxvdyBjYWxsaW5nIG9mIGdyZXAoMSkgKGlnbm9yZWQgYnkgdGhpcyBidWlsZCkiCittc2dzdHIgImRlbiBBdWZydWYgdm9uIGdyZXAoMSkgZXJsYXViZW4gKHZvbiBkaWVzZXIgUHJvZ3JhbW12ZXJzaW9uIGlnbm9yaWVydCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk4MworbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4iCittc2dzdHIgIktlaW4gTXVzdGVyIGFuZ2VnZWJlbi4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMTkKK21zZ2lkICItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cyIKK21zZ3N0ciAiLS1uby1pbmRleCBvZGVyIC0tdW50cmFja2VkIGvDtm5uZW4gbmljaHQgbWl0IENvbW1pdHMgdmVyd2VuZGV0IHdlcmRlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiCittc2dzdHIgIktvbm50ZSBDb21taXQgbmljaHQgYXVmbMO2c2VuOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA1NworbXNnaWQgIi0tdW50cmFja2VkIG5vdCBzdXBwb3J0ZWQgd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIKK21zZ3N0ciAiLS11bnRyYWNrZWQgenVzYW1tZW4gbWl0IC0tcmVjdXJzZS1zdWJtb2R1bGVzIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0IgorCisjOiBidWlsdGluL2dyZXAuYzoxMDYxCittc2dpZCAiaW52YWxpZCBvcHRpb24gY29tYmluYXRpb24sIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBLb21iaW5hdGlvbiB2b24gT3B0aW9uZW4sIC0tdGhyZWFkcyB3aXJkIGlnbm9yaWVydC4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjQgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTQ3Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgIktlaW5lIFVudGVyc3TDvHR6dW5nIGbDvHIgVGhyZWFkcywgLS10aHJlYWRzIHdpcmQgaWdub3JpZXJ0LiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2NyBidWlsdGluL2luZGV4LXBhY2suYzoxNTM1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg1MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIgorbXNnc3RyICJ1bmfDvGx0aWdlIEFuemFobCB2b24gVGhyZWFkcyBhbmdlZ2ViZW4gKCVkKSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEwMQorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb24gLS1vcGVuLWZpbGVzLWluLXBhZ2VyIGthbm4gbnVyIGlubmVyaGFsYiBkZXMgIgorIkFyYmVpdHN2ZXJ6ZWljaG5pc3NlcyB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEyNworbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiLS1jYWNoZWQgdW5kIC0tdW50cmFja2VkIGvDtm5uZW4gbmljaHQgbWl0IC0tbm8taW5kZXggdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzMKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cyIKK21zZ3N0ciAiIgorIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGthbm4gbmljaHQgbWl0IHZlcnNpb25pZXJ0ZW4gSW5oYWx0ZW4gdmVyd2VuZGV0ICIKKyJ3ZXJkZW4uIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTQxCittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuIgorbXNnc3RyICItLWNhY2hlZCB1bmQgXCJUcmVlXCItT2JqZWt0ZSBhbmdlZ2ViZW4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4NQorbXNnaWQgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0eXBlPl0gWy13XSBbLS1wYXRoPTxmaWxlPiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dICIKKyJbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPEFydD5dIFstd10gWy0tcGF0aD08RGF0ZWk+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPERhdGVpPi4uLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg2Cittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICJBcnQgZGVzIE9iamVrdGVzIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiZGFzIE9iamVrdCBpbiBkaWUgT2JqZWt0ZGF0ZW5iYW5rIHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMQorbXNnaWQgInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIgorbXNnc3RyICJkYXMgT2JqZWt0IHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSBsZXNlbiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMworbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICJEYXRlaSB3aWUgc2llIGlzdCBzcGVpY2hlcm4sIG9obmUgRmlsdGVyIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA0Cittc2dpZCAiIgorImp1c3QgaGFzaCBhbnkgcmFuZG9tIGdhcmJhZ2UgdG8gY3JlYXRlIGNvcnJ1cHQgb2JqZWN0cyBmb3IgZGVidWdnaW5nIEdpdCIKK21zZ3N0ciAiIgorIkhhc2ggw7xiZXIgenVmw6RsbGlnZSBEYXRlbiwgenVyIEVyemV1Z3VuZyB2b24gYmVzY2jDpGRpZ3RlbiBPYmpla3RlbiB6dXJcbiIKKyJGZWhsZXJzdWNoZSBpbiBHaXQsIGVyemV1Z2VuIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1Cittc2dpZCAicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiCittc2dzdHIgIkRhdGVpIHZlcmFyYmVpdGVuLCBhbHMgb2Igc2llIHZvbiBkaWVzZW0gUGZhZCB3w6RyZSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDYKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICJhbGxlIHZvcmhhbmRlbmVuIEJlZmVobGUgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3Cittc2dpZCAiZXhjbHVkZSBndWlkZXMiCittc2dzdHIgIkFubGVpdHVuZ2VuIGF1c3NjaGxpZcOfZW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ4Cittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICJMaXN0ZSB2b24gYWxsZ2VtZWluIHZlcndlbmRldGVuIEFubGVpdHVuZ2VuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2hlbHAuYzo0OQorbXNnaWQgInByaW50IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIgorbXNnc3RyICJhbGxlIE5hbWVuIGRlciBLb25maWd1cmF0aW9uc3ZhcmlhYmxlbiBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTEKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICJIYW5kYnVjaCBhbnplaWdlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTIKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAiSGFuZGJ1Y2ggaW4gZWluZW0gV2ViYnJvd3NlciBhbnplaWdlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTQKK21zZ2lkICJzaG93IGluZm8gcGFnZSIKK21zZ3N0ciAiSW5mby1TZWl0ZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTYKK21zZ2lkICJwcmludCBjb21tYW5kIGRlc2NyaXB0aW9uIgorbXNnc3RyICJCZXNjaHJlaWJ1bmcgZGVzIEJlZmVobHMgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjYxCittc2dpZCAiZ2l0IGhlbHAgWy0tYWxsXSBbLS1ndWlkZXNdIFstLW1hbiB8IC0td2ViIHwgLS1pbmZvXSBbPGNvbW1hbmQ+XSIKK21zZ3N0ciAiZ2l0IGhlbHAgWy0tYWxsXSBbLS1ndWlkZXNdIFstLW1hbiB8IC0td2ViIHwgLS1pbmZvXSBbPEJlZmVobD5dIgorCisjOiBidWlsdGluL2hlbHAuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVscCBmb3JtYXQgJyVzJyIKK21zZ3N0ciAibmljaHQgZXJrYW5udGVzIEhpbGZlZm9ybWF0OiAlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA0Cittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAiS29ubnRlIGVtYWNzY2xpZW50IG5pY2h0IHN0YXJ0ZW4uIgorCisjOiBidWlsdGluL2hlbHAuYzoxMTcKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZW1hY3NjbGllbnQgdmVyc2lvbi4iCittc2dzdHIgIktvbm50ZSBWZXJzaW9uIGRlcyBlbWFjc2NsaWVudCBuaWNodCBwYXJzZW4uIgorCisjOiBidWlsdGluL2hlbHAuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAiVmVyc2lvbiBkZXMgZW1hY3NjbGllbnQgJyVkJyBpc3QgenUgYWx0ICg8IDIyKS4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjE0MyBidWlsdGluL2hlbHAuYzoxNjUgYnVpbHRpbi9oZWxwLmM6MTc1IGJ1aWx0aW4vaGVscC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIHZvbiAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMnOiBQZmFkIGbDvHIgbmljaHQgdW50ZXJzdMO8dHp0ZW4gSGFuZGJ1Y2hiZXRyYWNodGVyLlxuIgorIlNpZSBrw7ZubnRlbiBzdGF0dGRlc3NlbiAnbWFuLjxXZXJremV1Zz4uY21kJyBiZW51dHplbi4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogY21kIGZvciBzdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMnOiBQcm9ncmFtbSBmw7xyIHVudGVyc3TDvHR6dGVuIEhhbmRidWNoYmV0cmFjaHRlci5cbiIKKyJTaWUga8O2bm50ZW4gc3RhdHRkZXNzZW4gJ21hbi48V2Vya3pldWc+LnBhdGgnIGJlbnV0emVuLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iCittc2dzdHIgIiclcyc6IHVuYmVrYW5udGVyIEhhbmRidWNoLUJldHJhY2h0ZXIuIgorCisjOiBidWlsdGluL2hlbHAuYzozNjcKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImtlaW4gSGFuZGJ1Y2gtQmV0cmFjaHRlciBrb25udGUgbWl0IGRpZXNlciBBbmZyYWdlIHVtZ2VoZW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM3NQorbXNnaWQgIm5vIGluZm8gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImtlaW4gSW5mb3JtYXRpb25zLUJldHJhY2h0ZXIga29ubnRlIG1pdCBkaWVzZXIgQW5mcmFnZSB1bWdlaGVuIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzQgYnVpbHRpbi9oZWxwLmM6NDQ1IGdpdC5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFsaWFzZWQgdG8gJyVzJyIKK21zZ3N0ciAiRsO8ciAnJXMnIHd1cmRlIGRlciBBbGlhcyAnJXMnIGFuZ2VsZWd0LiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ4IGdpdC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgYWxpYXMuJXMgU3RyaW5nOiAlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDc3IGJ1aWx0aW4vaGVscC5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMlcyIKK21zZ3N0ciAiVmVyd2VuZHVuZzogJXMlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkxCittc2dpZCAiJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgaW5mb3JtYXRpb24iCittc2dzdHIgIidnaXQgaGVscCBjb25maWcnIGbDvHIgd2VpdGVyZSBJbmZvcm1hdGlvbmVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgIk9iamVrdC1UeXBlbiBwYXNzZW4gYmVpICVzIG5pY2h0IHp1c2FtbWVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIG9iamVjdCAlcyIKK21zZ3N0ciAia29ubnRlIGVyd2FydGV0ZXMgT2JqZWt0ICVzIG5pY2h0IGVtcGZhbmdlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiCittc2dzdHIgIk9iamVrdCAlczogZXJ3YXJ0ZXRlciBUeXAgJXMsICVzIGdlZnVuZGVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gImthbm4gJWQgQnl0ZSBuaWNodCBsZXNlbiIKK21zZ3N0clsxXSAia2FubiAlZCBCeXRlcyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY4Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICJ6dSBmcsO8aGVzIERhdGVpZW5kZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY5Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gZGVyIEVpbmdhYmUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4MQorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICJ2ZXJ3ZW5kZXRlIG1laHIgQnl0ZXMgYWxzIHZlcmbDvGdiYXIgd2FyZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4OCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjYwNgorbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgIlBha2V0IGlzdCB6dSBncm/DnyBmw7xyIGRpZSBha3R1ZWxsZSBEZWZpbml0aW9uIHZvbiBvZmZfdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjkxIGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo5NQorbXNnaWQgInBhY2sgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZSIKK21zZ3N0ciAiUGFrZXQgw7xiZXJzY2hyZWl0ZXQgZGllIG1heGltYWwgZXJsYXVidGUgR3LDtsOfZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhY2tmaWxlICclcyciCittc2dzdHIgIkthbm4gUGFrZXRkYXRlaSAnJXMnIG5pY2h0IMO2ZmZuZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyNgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICJQYWtldHNpZ25hdHVyIHN0aW1tdCBuaWNodCDDvGJlcmVpbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgIlBha2V0dmVyc2lvbiAlPFBSSXUzMj4gbmljaHQgdW50ZXJzdMO8dHp0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJTxQUkl1TUFYPjogJXMiCittc2dzdHIgIlBha2V0IGhhdCBlaW4gdW5nw7xsdGlnZXMgT2JqZWt0IGJlaSBWZXJzYXR6ICU8UFJJdU1BWD46ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAiRGVrb21wcmltaWVydW5nIGdhYiAlZCB6dXLDvGNrIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MTUKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICJXZXJ0IGbDvHIgVmVyc2F0eiBiZWkgRGlmZmVyZW56b2JqZWt0IMO8YmVyZ2VsYXVmZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUyMworbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IGlzIG91dCBvZiBib3VuZCIKK21zZ3N0ciAiIgorIldlcnQgZsO8ciBWZXJzYXR6IGJlaSBEaWZmZXJlbnpvYmpla3QgbGllZ3QgYXXDn2VyaGFsYiBkZXMgZ8O8bHRpZ2VuIEJlcmVpY2hzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAiVW5iZWthbm50ZXIgT2JqZWt0LVR5cCAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTYyCittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAiS2FubiBQYWtldGRhdGVpICVzIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZSBtaXNzaW5nIgorbXNnaWRfcGx1cmFsICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICJmcsO8aHplaXRpZ2VzIEVuZGUgZGVyIFBha2V0ZGF0ZWksIHZlcm1pc3NlICU8UFJJdU1BWD4gQnl0ZSIKK21zZ3N0clsxXSAiZnLDvGh6ZWl0aWdlcyBFbmRlIGRlciBQYWtldGRhdGVpLCB2ZXJtaXNzZSAlPFBSSXVNQVg+IEJ5dGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1OTAKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAiZXJuc3RoYWZ0ZSBJbmtvbnNpc3RlbnogbmFjaCBEZWtvbXByaW1pZXJ1bmciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczNSBidWlsdGluL2luZGV4LXBhY2suYzo3NDEgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzY1CisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDQgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIKK21zZ3N0ciAiU0hBMSBLT0xMSVNJT04gTUlUICVzIEdFRlVOREVOICEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1OAorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgImthbm4gJXMgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgaW5mbyAlcyIKK21zZ3N0ciAiS2FubiBleGlzdGllcmVuZGUgSW5mb3JtYXRpb25lbiB6dSBPYmpla3QgJXMgbmljaHQgbGVzZW4uIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0ICVzIgorbXNnc3RyICJLYW5uIGV4aXN0aWVyZW5kZXMgT2JqZWt0ICVzIG5pY2h0IGxlc2VuLiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvYiBvYmplY3QgJXMiCittc2dzdHIgInVuZ8O8bHRpZ2VzIEJsb2ItT2JqZWt0ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjcgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ2Cittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrZWQgb2JqZWN0IgorbXNnc3RyICJmc2NrIEZlaGxlciBpbiBnZXBhY2t0ZW0gT2JqZWt0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgIk5pY2h0IGFsbGUgS2luZC1PYmpla3RlIHZvbiAlcyBzaW5kIGVycmVpY2hiYXIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjkyMCBidWlsdGluL2luZGV4LXBhY2suYzo5NTEKK21zZ2lkICJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiCittc2dzdHIgIktvbm50ZSBEYXRlaXVudGVyc2NoaWVkIG5pY2h0IGFud2VuZGVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTIxCittc2dpZCAiUmVjZWl2aW5nIG9iamVjdHMiCittc2dzdHIgIkVtcGZhbmdlIE9iamVrdGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjEKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICJJbmRpemllcmUgT2JqZWt0ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1NQorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAiUGFrZXQgaXN0IGJlc2Now6RkaWd0IChTSEExIHVudGVyc2NoaWVkbGljaCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjAKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgImthbm4gUGFrZXRkYXRlaSBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2MworbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAiUGFrZXRlbmRlIGVudGjDpGx0IG5pY2h0IHZlcndlbmRiYXJlbiBJbmhhbHQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNzUKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIHZvbiBcInBhcnNlX3BhY2tfb2JqZWN0cygpXCIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExOTgKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICJMw7ZzZSBVbnRlcnNjaGllZGUgYXVmIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjA4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImthbm4gVGhyZWFkIG5pY2h0IGVyemV1Z2VuOiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI0OQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiCittc2dzdHIgIkZlaGxlciBiZWltIEF1ZmzDtnNlbiBkZXIgVW50ZXJzY2hpZWRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0clswXSAiYWJnZXNjaGxvc3NlbiBtaXQgJWQgbG9rYWxlbSBPYmpla3QiCittc2dzdHJbMV0gImFiZ2VzY2hsb3NzZW4gbWl0ICVkIGxva2FsZW4gT2JqZWt0ZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCB0YWlsIGNoZWNrc3VtIGZvciAlcyAoZGlzayBjb3JydXB0aW9uPykiCittc2dzdHIgIlVuZXJ3YXJ0ZXRlIFByw7xmc3VtbWUgZsO8ciAlcyAoRmVzdHBsYXR0ZW5mZWhsZXI/KSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAiUGFrZXQgaGF0ICVkIHVuYXVmZ2Vsw7ZzdGVuIFVudGVyc2NoaWVkIgorbXNnc3RyWzFdICJQYWtldCBoYXQgJWQgdW5hdWZnZWzDtnN0ZSBVbnRlcnNjaGllZGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgIktvbm50ZSBhbmdlaMOkbmd0ZXMgT2JqZWt0ICglZCkgbmljaHQga29tcHJpbWllcmVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzkyCisjLCBjLWZvcm1hdAorbXNnaWQgImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0IgorbXNnc3RyICJsb2thbGVzIE9iamVrdCAlcyBpc3QgYmVzY2jDpGRpZ3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgIk5hbWUgZGVyIFBha2V0ZGF0ZWkgJyVzJyBlbmRldCBuaWNodCBtaXQgJy5wYWNrJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJXMgZmlsZSAnJXMnIgorbXNnc3RyICJLYW5uICVzIERhdGVpICclcycgbmljaHQgc2NocmVpYmVuLiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiAlcyBmaWxlICclcyciCittc2dzdHIgIkthbm4gZWJlbiBnZXNjaHJpZWJlbmUgJXMgRGF0ZWkgJyVzJyBuaWNodCBzY2hsaWXDn2VuLiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ2MworbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hsaWXDn2VuIGRlciBQYWtldGRhdGVpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDc3Cittc2dpZCAiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIKK21zZ3N0ciAiS2FubiBQYWtldGRhdGVpIG5pY2h0IHNwZWljaGVybiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ4NQorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICJLYW5uIEluZGV4ZGF0ZWkgbmljaHQgc3BlaWNoZXJuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTI5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICJcInBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPlwiIGlzdCB1bmfDvGx0aWciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIkthbm4gZXhpc3RpZXJlbmRlIFBha2V0ZGF0ZWkgJyVzJyBuaWNodCDDtmZmbmVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIkthbm4gZXhpc3RpZXJlbmRlIEluZGV4ZGF0ZWkgZsO8ciBQYWtldCAnJXMnIG5pY2h0IMO2ZmZuZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAia2VpbiBVbnRlcnNjaGllZDogJWQgT2JqZWt0IgorbXNnc3RyWzFdICJrZWluIFVudGVyc2NoaWVkOiAlZCBPYmpla3RlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gIkzDpG5nZSBkZXIgT2JqZWt0LUxpc3RlID0gJWQ6ICVsdSBPYmpla3QiCittc2dzdHJbMV0gIkzDpG5nZSBkZXIgT2JqZWt0LUxpc3RlID0gJWQ6ICVsdSBPYmpla3RlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjkzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIkthbm4gbmljaHQgenVyw7xjayB6dW0gQXJiZWl0c3ZlcnplaWNobmlzIHdlY2hzZWxuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzQyIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NDUKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NjEgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgIiVzIGlzdCB1bmfDvGx0aWciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3ODEKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAiRGllIE9wdGlvbiAtLWZpeC10aGluIGthbm4gbmljaHQgb2huZSAtLXN0ZGluIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzgzCittc2dpZCAiLS1zdGRpbiByZXF1aXJlcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLXN0ZGluIGVyZm9yZGVydCBlaW4gR2l0LVJlcG9zaXRvcnkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3ODkKK21zZ2lkICItLXZlcmlmeSB3aXRoIG5vIHBhY2tmaWxlIG5hbWUgZ2l2ZW4iCittc2dzdHIgIkRpZSBPcHRpb24gLS12ZXJpZnkgd3VyZGUgb2huZSBOYW1lbiBkZXIgUGFrZXRkYXRlaSBhbmdlZ2ViZW4uIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODM3IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1ODIKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2sgb2JqZWN0cyIKK21zZ3N0ciAiZnNjayBGZWhsZXIgYmVpbSBQYWNrZW4gdm9uIE9iamVrdGVuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICJrYW5uIFZvcmxhZ2UgJyVzJyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAia2FubiBWZXJ6ZWljaG5pcyAnJXMnIG5pY2h0IMO2ZmZuZW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICJrYW5uIFZlcndlaXMgJyVzJyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICJrYW5uIHN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZyAnJXMnIGF1ZiAnJXMnIG5pY2h0IGVyc3RlbGxlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJrYW5uICclcycgbmljaHQgbmFjaCAnJXMnIGtvcGllcmVuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAiaWdub3JpZXJlIFZvcmxhZ2UgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kIGluICVzIgorbXNnc3RyICJLZWluZSBWb3JsYWdlbiBpbiAlcyBnZWZ1bmRlbi4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgZnJvbSAnJXMnOiAlcyIKK21zZ3N0ciAia29waWVyZSBrZWluZSBWb3JsYWdlbiB2b24gJyVzJzogJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaGFuZGxlIGZpbGUgdHlwZSAlZCIKK21zZ3N0ciAia2FubiBuaWNodCBtaXQgRGF0ZWl0eXAgJWQgdW1nZWhlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICJLb25udGUgJXMgbmljaHQgbmFjaCAlcyB2ZXJzY2hpZWJlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU0IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMgZXhpc3RpZXJ0IGJlcmVpdHMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkJlc3RlaGVuZGVzIHZlcnRlaWx0ZXMgR2l0LVJlcG9zaXRvcnkgaW4gJXMlcyBuZXVpbml0aWFsaXNpZXJ0XG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiQmVzdGVoZW5kZXMgR2l0LVJlcG9zaXRvcnkgaW4gJXMlcyBuZXVpbml0aWFsaXNpZXJ0XG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJMZWVyZXMgdmVydGVpbHRlcyBHaXQtUmVwb3NpdG9yeSBpbiAlcyVzIGluaXRpYWxpc2llcnRcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiTGVlcmVzIEdpdC1SZXBvc2l0b3J5IGluICVzJXMgaW5pdGlhbGlzaWVydFxuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0NjgKK21zZ2lkICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPGRpcmVjdG9yeT5dIgorbXNnc3RyICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PFZvcmxhZ2VudmVyemVpY2huaXM+XSBbLS0iCisic2hhcmVkWz08QmVyZWNodGlndW5nZW4+XV0gWzxWZXJ6ZWljaG5pcz5dIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTEKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAiQmVyZWNodGlndW5nZW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MgorbXNnaWQgInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIKK21zZ3N0ciAiYW5nZWJlbiwgZGFzcyBkYXMgR2l0LVJlcG9zaXRvcnkgbWl0IG1laHJlcmVuIEJlbnV0emVybiBnZXRlaWx0IHdpcmQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyOSBidWlsdGluL2luaXQtZGIuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICJrYW5uIFZlcnplaWNobmlzICVzIG5pY2h0IGVyc3RlbGxlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAia2FubiBuaWNodCBpbiBWZXJ6ZWljaG5pcyAlcyB3ZWNoc2VsbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgc3BlY2lmeWluZyAlcyAob3IgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIiIKKyIlcyAob2RlciAtLXdvcmstdHJlZT08VmVyemVpY2huaXM+KSBuaWNodCBlcmxhdWJ0IG9obmUgU3BlemlmaXppZXJ1bmcgdm9uICVzICIKKyIob2RlciAtLWdpdC1kaXI9PFZlcnplaWNobmlzPikiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICJLYW5uIG5pY2h0IGF1ZiBBcmJlaXRzdmVyemVpY2huaXMgJyVzJyB6dWdyZWlmZW4uIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjE2Cittc2dpZCAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8VG9rZW4+Wyg9fDopPFdlcnQ+XSkuLi5dIFs8RGF0ZWk+Li4uXSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NQorbXNnaWQgImVkaXQgZmlsZXMgaW4gcGxhY2UiCittc2dzdHIgInZvcmhhbmRlbmUgRGF0ZWllbiBkaXJla3QgYmVhcmJlaXRlbiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NgorbXNnaWQgInRyaW0gZW1wdHkgdHJhaWxlcnMiCittc2dzdHIgImvDvHJ6dCBsZWVyZSBBbmjDpG5nZSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OQorbXNnaWQgIndoZXJlIHRvIHBsYWNlIHRoZSBuZXcgdHJhaWxlciIKK21zZ3N0ciAid28gZGVyIG5ldWUgQW5oYW5nIHBsYXR6aWVydCB3aXJkIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMQorbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJBa3Rpb24sIHdlbm4gQW5oYW5nIGJlcmVpdHMgZXhpc3RpZXJ0IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMworbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGlzIG1pc3NpbmciCittc2dzdHIgIkFrdGlvbiwgd2VubiBBbmhhbmcgZmVobHQiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA1Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIHRyYWlsZXJzIgorbXNnc3RyICJudXIgQW5ow6RuZ2UgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA2Cittc2dpZCAiZG8gbm90IGFwcGx5IGNvbmZpZyBydWxlcyIKK21zZ3N0ciAiUmVnZWxuIGF1cyBLb25maWd1cmF0aW9uIG5pY2h0IGFud2VuZGVuIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNworbXNnaWQgImpvaW4gd2hpdGVzcGFjZS1jb250aW51ZWQgdmFsdWVzIgorbXNnc3RyICJkdXJjaCBMZWVyemVpY2hlbiBmb3J0Z2VzZXR6dGUgV2VydGUgdmVyYmluZGVuIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwOAorbXNnaWQgInNldCBwYXJzaW5nIG9wdGlvbnMiCittc2dzdHIgIk9wdGlvbmVuIGbDvHIgZGFzIFBhcnNlbiBzZXR6ZW4iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEwCittc2dpZCAiZG8gbm90IHRyZWF0IC0tLSBzcGVjaWFsbHkiCittc2dzdHIgIi0tLSBuaWNodCBzcGV6aWVsbCBiZWhhbmRlbG4iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTExCittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAiQW5oYW5nIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMgorbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICJBbmhhbmcvQW5ow6RuZ2UgaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTIzCittc2dpZCAiLS10cmFpbGVyIHdpdGggLS1vbmx5LWlucHV0IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uZW4gLS10cmFpbGVyIHVuZCAtLW9ubHktaW5wdXQga8O2bm5lbiBuaWNodCBnZW1laW5zYW0gdmVyd2VuZGV0ICIKKyJ3ZXJkZW4uIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEzMworbXNnaWQgIm5vIGlucHV0IGZpbGUgZ2l2ZW4gZm9yIGluLXBsYWNlIGVkaXRpbmciCittc2dzdHIgImtlaW5lIERhdGVpIHp1ciBkaXJla3RlbiBCZWFyYmVpdHVuZyBhbmdlZ2ViZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTYKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbG9nIFs8T3B0aW9uZW4+XSBbPENvbW1pdGJlcmVpY2g+XSBbWy0tXSA8UGZhZD4uLi5dIgorCisjOiBidWlsdGluL2xvZy5jOjU3Cittc2dpZCAiZ2l0IHNob3cgWzxvcHRpb25zPl0gPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCBzaG93IFs8T3B0aW9uZW4+XSA8T2JqZWt0Pi4uLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLWRlY29yYXRlIG9wdGlvbjogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgT3B0aW9uIGbDvHIgLS1kZWNvcmF0ZTogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc0Cittc2dpZCAic2hvdyBzb3VyY2UiCittc2dzdHIgIlF1ZWxsZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzUKK21zZ2lkICJVc2UgbWFpbCBtYXAgZmlsZSIKK21zZ3N0ciAiXCJtYWlsbWFwXCItRGF0ZWkgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2xvZy5jOjE3NworbXNnaWQgIm9ubHkgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiXCJkZWNvcmF0ZVwiIG51ciBiZWkgUmVmZXJlbnplbiBhbndlbmRlbiwgZGllIDxNdXN0ZXI+IGVudHNwcmVjaGVuIgorCisjOiBidWlsdGluL2xvZy5jOjE3OQorbXNnaWQgImRvIG5vdCBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJcImRlY29yYXRlXCIgbmljaHQgYmVpIFJlZmVyZW56ZW4gYW53ZW5kZW4sIGRpZSA8TXVzdGVyPiBlbnRzcHJlY2hlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxODAKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICJkZWNvcmF0ZS1PcHRpb25lbiIKKworIzogYnVpbHRpbi9sb2cuYzoxODMKK21zZ2lkICJQcm9jZXNzIGxpbmUgcmFuZ2UgbixtIGluIGZpbGUsIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiVmVyYXJiZWl0ZXQgbnVyIFplaWxlbiBpbSBCZXJlaWNoIG4sbSBpbiBkZXIgRGF0ZWksIGdlesOkaGx0IHZvbiAxIgorCisjOiBidWlsdGluL2xvZy5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iCittc2dzdHIgImxldHp0ZSBBdXNnYWJlOiAlZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgImdpdCBzaG93ICVzOiB1bmfDvGx0aWdlIERhdGVpIgorCisjOiBidWlsdGluL2xvZy5jOjU1MCBidWlsdGluL2xvZy5jOjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIktvbm50ZSBPYmpla3QgJXMgbmljaHQgbGVzZW4uIgorCisjOiBidWlsdGluL2xvZy5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHR5cGU6ICVkIgorbXNnc3RyICJVbmJla2FubnRlciBUeXA6ICVkIgorCisjOiBidWlsdGluL2xvZy5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBjb3ZlciBmcm9tIGRlc2NyaXB0aW9uIG1vZGUiCittc2dzdHIgIiIKKyIlczogVW5nw7xsdGlnZXIgTW9kdXMgZsO8ciBFcnN0ZWxsdW5nIGRlcyBEZWNrYmxhdHRlcyBhdXMgZGVyIEJlc2NocmVpYnVuZyIKKworIzogYnVpbHRpbi9sb2cuYzo4MjEKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyBvaG5lIFdlcnQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTM2Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICJOYW1lIGRlcyBBdXNnYWJldmVyemVpY2huaXNzZXMgaXN0IHp1IGxhbmcuIgorCisjOiBidWlsdGluL2xvZy5jOjk1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIgorbXNnc3RyICJLYW5uIFBhdGNoLURhdGVpICVzIG5pY2h0IMO2ZmZuZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTY5Cittc2dpZCAibmVlZCBleGFjdGx5IG9uZSByYW5nZSIKK21zZ3N0ciAiQnJhdWNoZSBnZW5hdSBlaW5lbiBDb21taXQtQmVyZWljaC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTc5Cittc2dpZCAibm90IGEgcmFuZ2UiCittc2dzdHIgIktlaW4gQ29tbWl0LUJlcmVpY2guIgorCisjOiBidWlsdGluL2xvZy5jOjExNDMKK21zZ2lkICJjb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IgorbXNnc3RyICJBbnNjaHJlaWJlbiBiZW7DtnRpZ3QgRS1NYWlsLUZvcm1hdCIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQ5Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBjb3Zlci1sZXR0ZXIgZmlsZSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGRlciBEYXRlaSBmw7xyIGRhcyBBbnNjaHJlaWJlbi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmUgaW4tcmVwbHktdG86ICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBpbi1yZXBseS10bzogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NQorbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHRpb25zPl0gWzxzaW5jZT4gfCA8cmV2aXNpb24tcmFuZ2U+XSIKK21zZ3N0ciAiZ2l0IGZvcm1hdC1wYXRjaCBbPE9wdGlvbmVuPl0gWzxzZWl0PiB8IDxDb21taXRiZXJlaWNoPl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMxMworbXNnaWQgInR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICJad2VpIEF1c2dhYmV2ZXJ6ZWljaG5pc3NlPyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDI0IGJ1aWx0aW4vbG9nLmM6MjE5NyBidWlsdGluL2xvZy5jOjIxOTkgYnVpbHRpbi9sb2cuYzoyMjExCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWl0ICVzIgorbXNnc3RyICJVbmJla2FubnRlciBDb21taXQgJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzNCBidWlsdGluL3JlcGxhY2UuYzo1OCBidWlsdGluL3JlcGxhY2UuYzoyMDcKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBhbHMgZ8O8bHRpZ2UgUmVmZXJlbnogYXVmbMO2c2VuLiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDM5Cittc2dpZCAiY291bGQgbm90IGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIKK21zZ3N0ciAiS29ubnRlIGtlaW5lIGV4YWt0ZSBNZXJnZS1CYXNpcyBmaW5kZW4uIgorCisjOiBidWlsdGluL2xvZy5jOjE0NDMKK21zZ2lkICIiCisiZmFpbGVkIHRvIGdldCB1cHN0cmVhbSwgaWYgeW91IHdhbnQgdG8gcmVjb3JkIGJhc2UgY29tbWl0IGF1dG9tYXRpY2FsbHksXG4iCisicGxlYXNlIHVzZSBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIHRvIHRyYWNrIGEgcmVtb3RlIGJyYW5jaC5cbiIKKyJPciB5b3UgY291bGQgc3BlY2lmeSBiYXNlIGNvbW1pdCBieSAtLWJhc2U9PGJhc2UtY29tbWl0LWlkPiBtYW51YWxseSIKK21zZ3N0ciAiIgorIkZlaGxlciBiZWltIEJlc3RpbW1lbiBkZXMgVXBzdHJlYW0tQnJhbmNoZXMuIFdlbm4gU2llIGRlbiBCYXNpcy1Db21taXRcbiIKKyJhdXRvbWF0aXNjaCBzcGVpY2hlcm4gbGFzc2VuIG3DtmNodGVuLCBiZW51dHplbiBTaWUgYml0dGVcbiIKKyInZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bycsIHVtIGVpbmVtIFJlbW90ZS1CcmFuY2ggenUgZm9sZ2VuLlxuIgorIk9kZXIgZ2ViZW4gU2llIGRlbiBCYXNpcy1Db21taXQgbWl0ICctLWJhc2U9PEJhc2lzLUNvbW1pdC1JZD4nIG1hbnVlbGwgYW4uIgorCisjOiBidWlsdGluL2xvZy5jOjE0NjMKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICJGZWhsZXIgYmVpbSBGaW5kZW4gZWluZXIgZXhha3RlbiBNZXJnZS1CYXNpcy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ3NAorbXNnaWQgImJhc2UgY29tbWl0IHNob3VsZCBiZSB0aGUgYW5jZXN0b3Igb2YgcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAiQmFzaXMtQ29tbWl0IHNvbGx0ZSBkZXIgVm9yZ8OkbmdlciBkZXIgUmV2aXNpb25zbGlzdGUgc2Vpbi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ3OAorbXNnaWQgImJhc2UgY29tbWl0IHNob3VsZG4ndCBiZSBpbiByZXZpc2lvbiBsaXN0IgorbXNnc3RyICJCYXNpcy1Db21taXQgc29sbHRlIG5pY2h0IGluIGRlciBSZXZpc2lvbnNsaXN0ZSBlbnRoYWx0ZW4gc2Vpbi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzMQorbXNnaWQgImNhbm5vdCBnZXQgcGF0Y2ggaWQiCittc2dzdHIgImthbm4gUGF0Y2gtSWQgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU4MworbXNnaWQgImZhaWxlZCB0byBpbmZlciByYW5nZS1kaWZmIHJhbmdlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQWJsZWl0ZW4gZGVzIHJhbmdlLWRpZmYtQmVyZWljaHMuIgorCisjOiBidWlsdGluL2xvZy5jOjE2MjkKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICJbUEFUQ0ggbi9tXSBhdWNoIG1pdCBlaW56ZWxuZW0gUGF0Y2ggdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzIKK21zZ2lkICJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIKK21zZ3N0ciAiW1BBVENIXSBhdWNoIG1pdCBtZWhyZXJlbiBQYXRjaGVzIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjM2Cittc2dpZCAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiCittc2dzdHIgIkF1c2dhYmUgZGVyIFBhdGNoZXMgaW4gU3RhbmRhcmQtQXVzZ2FiZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjM4Cittc2dpZCAiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiCittc2dzdHIgImVpbiBEZWNrYmxhdHQgZXJ6ZXVnZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MAorbXNnaWQgInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIKK21zZ3N0ciAiZWluZmFjaGUgTnVtbWVybmZvbGdlIGbDvHIgZGllIE5hbWVuIGRlciBBdXNnYWJlZGF0ZWllbiB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MQorbXNnaWQgInNmeCIKK21zZ3N0ciAiRGF0ZWllbmR1bmciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MgorbXNnaWQgInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIgorbXNnc3RyICI8RGF0ZWllbmR1bmc+IGFuc3RhdHQgJy5wYXRjaCcgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDQKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICJkaWUgTnVtbWVyaWVydW5nIGRlciBQYXRjaGVzIGJlaSA8bj4gYW5zdGF0dCBiZWkgMSBiZWdpbm5lbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ2Cittc2dpZCAibWFyayB0aGUgc2VyaWVzIGFzIE50aCByZS1yb2xsIgorbXNnc3RyICJkaWUgU2VyaWUgYWxzIG4tdGUgRmFzc3VuZyBrZW5uemVpY2huZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0OAorbXNnaWQgIlVzZSBbUkZDIFBBVENIXSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIltSRkMgUEFUQ0hdIGFuc3RhdHQgW1BBVENIXSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1MQorbXNnaWQgImNvdmVyLWZyb20tZGVzY3JpcHRpb24tbW9kZSIKK21zZ3N0ciAiTW9kdXMgZsO8ciBFcnN0ZWxsdW5nIGRlcyBEZWNrYmxhdHRlcyBhdXMgZGVyIEJlc2NocmVpYnVuZyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUyCittc2dpZCAiZ2VuZXJhdGUgcGFydHMgb2YgYSBjb3ZlciBsZXR0ZXIgYmFzZWQgb24gYSBicmFuY2gncyBkZXNjcmlwdGlvbiIKK21zZ3N0ciAiIgorIkVyemV1Z2UgVGVpbGUgZGVzIERlY2tibGF0dGVzIGJhc2llcmVuZCBhdWYgZGVyIEJlc2NocmVpYnVuZyBkZXMgQnJhbmNoZXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NAorbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiTnV0emUgWzxQcsOkZml4Pl0gc3RhdHQgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAic3RvcmUgcmVzdWx0aW5nIGZpbGVzIGluIDxkaXI+IgorbXNnc3RyICJlcnpldWd0ZSBEYXRlaWVuIGluIDxWZXJ6ZWljaG5pcz4gc3BlaWNoZXJuIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjAKK21zZ2lkICJkb24ndCBzdHJpcC9hZGQgW1BBVENIXSIKK21zZ3N0ciAiW1BBVENIXSBuaWNodCBlbnRmZXJuZW4vaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MworbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgImtlaW5lIGJpbsOkcmVuIFVudGVyc2NoaWVkZSBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY1Cittc2dpZCAib3V0cHV0IGFsbC16ZXJvIGhhc2ggaW4gRnJvbSBoZWFkZXIiCittc2dzdHIgIkhhc2ggbWl0IE51bGxlbiBpbiBcIkZyb21cIi1IZWFkZXIgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NworbXNnaWQgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIKK21zZ3N0ciAiIgorImtlaW5lIFBhdGNoZXMgZWluc2NobGllw59lbiwgZGllIGVpbmVtIENvbW1pdCBpbSBVcHN0cmVhbS1CcmFuY2ggZW50c3ByZWNoZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2OQorbXNnaWQgInNob3cgcGF0Y2ggZm9ybWF0IGluc3RlYWQgb2YgZGVmYXVsdCAocGF0Y2ggKyBzdGF0KSIKK21zZ3N0ciAiUGF0Y2hmb3JtYXQgYW5zdGF0dCBkZXMgU3RhbmRhcmRzIGFuemVpZ2VuIChQYXRjaCArIFp1c2FtbWVuZmFzc3VuZykiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MQorbXNnaWQgIk1lc3NhZ2luZyIKK21zZ3N0ciAiRS1NYWlsLUVpbnN0ZWxsdW5nZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MgorbXNnaWQgImhlYWRlciIKK21zZ3N0ciAiSGVhZGVyIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzMKK21zZ2lkICJhZGQgZW1haWwgaGVhZGVyIgorbXNnc3RyICJFLU1haWwtSGVhZGVyIGhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzQgYnVpbHRpbi9sb2cuYzoxNjc2Cittc2dpZCAiZW1haWwiCittc2dzdHIgIkUtTWFpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0Cittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgIlwiVG86XCItSGVhZGVyIGhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAiXCJDYzpcIi1IZWFkZXIgaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3OAorbXNnaWQgImlkZW50IgorbXNnc3RyICJJZGVudCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc5Cittc2dpZCAic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIKK21zZ3N0ciAiIgorIlwiRnJvbVwiLUFkcmVzc2UgYXVmIDxJZGVudD4gc2V0emVuIChvZGVyIElkZW50IGRlcyBDb21taXQtRXJzdGVsbGVycywgd2VubiAiCisiZmVobGVuZCkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MQorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgIm1lc3NhZ2UtaWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MgorbXNnaWQgIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIKK21zZ3N0ciAiYXVzIGVyc3RlciBFLU1haWwgZWluZSBBbnR3b3J0IHp1IDxtZXNzYWdlLWlkPiBtYWNoZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MyBidWlsdGluL2xvZy5jOjE2ODYKK21zZ2lkICJib3VuZGFyeSIKK21zZ3N0ciAiR3JlbnplIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODQKK21zZ2lkICJhdHRhY2ggdGhlIHBhdGNoIgorbXNnc3RyICJkZW4gUGF0Y2ggYW5ow6RuZ2VuIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODcKK21zZ2lkICJpbmxpbmUgdGhlIHBhdGNoIgorbXNnc3RyICJkZW4gUGF0Y2ggZGlyZWt0IGluIGRpZSBOYWNocmljaHQgZWluZsO8Z2VuIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTEKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAiTmFjaHJpY2h0ZW52ZXJrZXR0dW5nIGFrdGl2aWVyZW4sIFN0aWxlOiBzaGFsbG93LCBkZWVwIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTMKK21zZ2lkICJzaWduYXR1cmUiCittc2dzdHIgIlNpZ25hdHVyIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTQKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUiCittc2dzdHIgImVpbmUgU2lnbmF0dXIgaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NQorbXNnaWQgImJhc2UtY29tbWl0IgorbXNnc3RyICJCYXNpcy1Db21taXQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NgorbXNnaWQgImFkZCBwcmVyZXF1aXNpdGUgdHJlZSBpbmZvIHRvIHRoZSBwYXRjaCBzZXJpZXMiCittc2dzdHIgImVyZm9yZGVybGljaGUgUmV2aXNpb25zLUluZm9ybWF0aW9uZW4gZGVyIFBhdGNoLVNlcmllIGhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTgKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUgZnJvbSBhIGZpbGUiCittc2dzdHIgImVpbmUgU2lnbmF0dXIgYXVzIGVpbmVyIERhdGVpIGhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTkKK21zZ2lkICJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIgorbXNnc3RyICJrZWluZSBEYXRlaW5hbWVuIGRlciBQYXRjaGVzIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDEKK21zZ2lkICJzaG93IHByb2dyZXNzIHdoaWxlIGdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAiRm9yc2Nocml0dHNhbnplaWdlIHfDpGhyZW5kIGRlciBFcnpldWd1bmcgZGVyIFBhdGNoZXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMworbXNnaWQgInNob3cgY2hhbmdlcyBhZ2FpbnN0IDxyZXY+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKyLDhG5kZXJ1bmdlbiBnZWdlbsO8YmVyIDxDb21taXQ+IGltIERlY2tibGF0dCBvZGVyIGVpbnplbG5lbSBQYXRjaCBhbnplaWdlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA2Cittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJlZnNwZWM+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKyLDhG5kZXJ1bmdlbiBnZWdlbsO8YmVyIDxSZWZzcGVjPiBpbSBEZWNrYmxhdHQgb2RlciBlaW56ZWxuZW0gUGF0Y2ggYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwOAorbXNnaWQgInBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiCittc2dzdHIgIlByb3plbnRzYXR6IG1pdCB3ZWxjaGVtIEVyemV1Z3VuZyBnZXdpY2h0ZXQgd2lyZCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzkyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgSWRlbnRpZmlrYXRpb25zemVpbGU6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE4MDcKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLW4gdW5kIC1rIHNjaGxpZcOfZW4gc2ljaCBnZWdlbnNlaXRpZyBhdXMuIgorCisjOiBidWlsdGluL2xvZy5jOjE4MDkKK21zZ2lkICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIHVuZCAtayBzY2hsaWXDn2VuIHNpY2ggZ2VnZW5zZWl0aWcgYXVzLiIKKworIzogYnVpbHRpbi9sb2cuYzoxODE3Cittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiRGllIE9wdGlvbiAtLW5hbWUtb25seSBrYW5uIG5pY2h0IHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2xvZy5jOjE4MTkKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIkRpZSBPcHRpb24gLS1uYW1lLXN0YXR1cyBrYW5uIG5pY2h0IHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2xvZy5jOjE4MjEKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIkRpZSBPcHRpb24gLS1jaGVjayBrYW5uIG5pY2h0IHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2xvZy5jOjE4NTQKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAiU3RhbmRhcmQtQXVzZ2FiZSBvZGVyIFZlcnplaWNobmlzLCB3ZWxjaGVzIHZvbiBiZWlkZW0/IgorCisjOiBidWlsdGluL2xvZy5jOjE5NTgKK21zZ2lkICItLWludGVyZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIi0taW50ZXJkaWZmIGVyZm9yZGVydCAtLWNvdmVyLWxldHRlciBvZGVyIGVpbnplbG5lbiBQYXRjaC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2MgorbXNnaWQgIkludGVyZGlmZjoiCittc2dzdHIgIkludGVyZGlmZjoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlcmRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICJJbnRlcmRpZmYgZ2VnZW4gdiVkOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTY5Cittc2dpZCAiLS1jcmVhdGlvbi1mYWN0b3IgcmVxdWlyZXMgLS1yYW5nZS1kaWZmIgorbXNnc3RyICItLWNyZWF0aW9uLWZhY3RvciBlcmZvcmRlcnQgLS1yYW5nZS1kaWZmIgorCisjOiBidWlsdGluL2xvZy5jOjE5NzMKK21zZ2lkICItLXJhbmdlLWRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICItLXJhbmdlLWRpZmYgZXJmb3JkZXJ0IC0tY292ZXItbGV0dGVyIG9kZXIgZWluemVsbmVuIFBhdGNoLiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgxCittc2dpZCAiUmFuZ2UtZGlmZjoiCittc2dzdHIgIlJhbmdlLURpZmY6IgorCisjOiBidWlsdGluL2xvZy5jOjE5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmFuZ2UtZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIlJhbmdlLURpZmYgZ2VnZW4gdiVkOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgIktvbm50ZSBTaWduYXR1ci1EYXRlaSAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2xvZy5jOjIwMjkKK21zZ2lkICJHZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgIkVyemV1Z2UgUGF0Y2hlcyIKKworIzogYnVpbHRpbi9sb2cuYzoyMDczCittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiCittc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiBkZXIgQXVzZ2FiZWRhdGVpZW4uIgorCisjOiBidWlsdGluL2xvZy5jOjIxMzIKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs8VXBzdHJlYW0+IFs8QnJhbmNoPiBbPExpbWl0Pl1dXSIKKworIzogYnVpbHRpbi9sb2cuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIKK21zZ3N0ciAiIgorIktvbm50ZSBnZWZvbGd0ZW4gUmVtb3RlLUJyYW5jaCBuaWNodCBmaW5kZW4sIGJpdHRlIGdlYmVuIFNpZSA8VXBzdHJlYW0+ICIKKyJtYW51ZWxsIGFuLlxuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDcwCittc2dpZCAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgbHMtZmlsZXMgWzxPcHRpb25lbj5dIFs8RGF0ZWk+Li4uXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyNgorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgImRlbiBEYXRlaXN0YXR1cyBtaXQgVGFncyBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyOAorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIgorbXNnc3RyICIiCisiS2xlaW5idWNoc3RhYmVuIGbDvHIgRGF0ZWllbiBtaXQgJ2Fzc3VtZSB1bmNoYW5nZWQnIE1hcmtpZXJ1bmcgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMwCittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnZnNtb25pdG9yIGNsZWFuJyBmaWxlcyIKK21zZ3N0ciAiS2xlaW5idWNoc3RhYmVuIGbDvHIgJ2ZzbW9uaXRvciBjbGVhbicgRGF0ZWllbiB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzIKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAiendpc2NoZW5nZXNwZWljaGVydGUgRGF0ZWllbiBpbiBkZXIgQXVzZ2FiZSBhbnplaWdlbiAoU3RhbmRhcmQpIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM0Cittc2dpZCAic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImVudGZlcm50ZSBEYXRlaWVuIGluIGRlciBBdXNnYWJlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM2Cittc2dpZCAic2hvdyBtb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJnZcOkbmRlcnRlIERhdGVpZW4gaW4gZGVyIEF1c2dhYmUgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzgKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgInNvbnN0aWdlIERhdGVpZW4gaW4gZGVyIEF1c2dhYmUgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDAKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiaWdub3JpZXJ0ZSBEYXRlaWVuIGluIGRlciBBdXNnYWJlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQzCittc2dpZCAic2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKyJPYmpla3RuYW1lbiB2b24gSW5oYWx0ZW4sIGRpZSB6dW0gQ29tbWl0IHZvcmdlbWVya3Qgc2luZCwgaW4gZGVyIEF1c2dhYmUgIgorImFuemVpZ2VuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ1Cittc2dpZCAic2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCIKK21zZ3N0ciAiRGF0ZWllbiBpbSBEYXRlaXN5c3RlbSwgZGllIGdlbMO2c2NodCB3ZXJkZW4gbcO8c3NlbiwgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDcKK21zZ2lkICJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWVzIG9ubHkiCittc2dzdHIgIm51ciBOYW1lbiB2b24gJ3NvbnN0aWdlbicgVmVyemVpY2huaXNzZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDkKK21zZ2lkICJzaG93IGxpbmUgZW5kaW5ncyBvZiBmaWxlcyIKK21zZ3N0ciAiWmVpbGVuZW5kZW4gdm9uIERhdGVpZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTEKK21zZ2lkICJkb24ndCBzaG93IGVtcHR5IGRpcmVjdG9yaWVzIgorbXNnc3RyICJrZWluZSBsZWVyZW4gVmVyemVpY2huaXNzZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAibmljaHQgenVzYW1tZW5nZWbDvGhydGUgRGF0ZWllbiBpbiBkZXIgQXVzZ2FiZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NgorbXNnaWQgInNob3cgcmVzb2x2ZS11bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICIncmVzb2x2ZS11bmRvJyBJbmZvcm1hdGlvbmVuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU4Cittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICJEYXRlaWVuIGF1c2xhc3NlbiwgZGllIGVpbmVtIE11c3RlciBlbnRzcHJlY2hlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2MQorbXNnaWQgImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iCittc2dzdHIgIk11c3RlciwgZ2VsZXNlbiB2b24gPERhdGVpPiwgYXVzc2NobGllw59lbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NAorbXNnaWQgInJlYWQgYWRkaXRpb25hbCBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUgcGF0dGVybnMgaW4gPGZpbGU+IgorbXNnc3RyICJ6dXPDpHR6bGljaGUgcHJvLVZlcnplaWNobmlzIEF1c2NobHVzc211c3RlciBhdXMgPERhdGVpPiBhdXNsZXNlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NgorbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgImRpZSBzdGFuZGFyZG3DpMOfaWdlbiBHaXQtQXVzc2NobMO8c3NlIGhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTcwCittc2dpZCAibWFrZSB0aGUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHRvcCBkaXJlY3RvcnkiCittc2dzdHIgIkF1c2dhYmUgcmVsYXRpdiB6dW0gUHJvamVrdHZlcnplaWNobmlzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTczCittc2dpZCAicmVjdXJzZSB0aHJvdWdoIHN1Ym1vZHVsZXMiCittc2dzdHIgIlJla3Vyc2lvbiBpbiBTdWJtb2R1bGVuIGR1cmNoZsO8aHJlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NQorbXNnaWQgImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIKK21zZ3N0ciAiYWxzIEZlaGxlciBiZWhhbmRlbG4sIHdlbm4gc2ljaCBlaW5lIDxEYXRlaT4gbmljaHQgaW0gSW5kZXggYmVmaW5kZXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzYKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAiQ29tbWl0LVJlZmVyZW56IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc3Cittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiIgorInZvcmdlYmVuLCBkYXNzIFBmYWRlLCBkaWUgc2VpdCA8Q29tbWl0LVJlZmVyZW56PiBnZWzDtnNjaHQgd3VyZGVuLCBpbW1lciBub2NoICIKKyJ2b3JoYW5kZW4gc2luZCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3OQorbXNnaWQgInNob3cgZGVidWdnaW5nIGRhdGEiCittc2dzdHIgIkF1c2dhYmVuIHp1ciBGZWhsZXJzdWNoZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo5Cittc2dpZCAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPHJlcG9zaXRvcnk+IFs8cmVmcz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxQcm9ncmFtbT5dXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy1xIHwgLS1xdWlldF0gWy0tZXhpdC1jb2RlXSBbLS1nZXQtdXJsXVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstLXN5bXJlZl0gWzxSZXBvc2l0b3J5PiBbPFJlZmVyZW56ZW4+Li4uXV0iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAiVVJMIGRlcyBSZW1vdGUtUmVwb3NpdG9yaWVzIG5pY2h0IGF1c2dlYmVuIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjIgYnVpbHRpbi9yZWJhc2UuYzoxNTYxCittc2dpZCAiZXhlYyIKK21zZ3N0ciAiUHJvZ3JhbW0iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjEgYnVpbHRpbi9scy1yZW1vdGUuYzo2MworbXNnaWQgInBhdGggb2YgZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUgaG9zdCIKK21zZ3N0ciAiUGZhZCB6dSBcImdpdC11cGxvYWQtcGFja1wiIGF1ZiBkZXIgR2VnZW5zZWl0ZSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NQorbXNnaWQgImxpbWl0IHRvIHRhZ3MiCittc2dzdHIgImF1ZiBUYWdzIGVpbnNjaHLDpG5rZW4iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjYKK21zZ2lkICJsaW1pdCB0byBoZWFkcyIKK21zZ3N0ciAiYXVmIEJyYW5jaGVzIGVpbnNjaHLDpG5rZW4iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjcKK21zZ2lkICJkbyBub3Qgc2hvdyBwZWVsZWQgdGFncyIKK21zZ3N0ciAia2VpbmUgVGFncyBhbnplaWdlbiwgZGllIGFuZGVyZSBUYWdzIGVudGhhbHRlbiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2OQorbXNnaWQgInRha2UgdXJsLjxiYXNlPi5pbnN0ZWFkT2YgaW50byBhY2NvdW50IgorbXNnc3RyICJ1cmwuPEJhc2lzPi5pbnN0ZWFkT2YgYmVyw7xja3NpY2h0aWdlbiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3MgorbXNnaWQgImV4aXQgd2l0aCBleGl0IGNvZGUgMiBpZiBubyBtYXRjaGluZyByZWZzIGFyZSBmb3VuZCIKK21zZ3N0ciAiIgorIm1pdCBFeGl0LUNvZGUgMiBiZWVuZGVuLCB3ZW5uIGtlaW5lIMO8YmVyZWluc3RpbW1lbmRlbiBSZWZlcmVuemVuXG4iCisiZ2VmdW5kZW4gd3VyZGVuIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjc1Cittc2dpZCAic2hvdyB1bmRlcmx5aW5nIHJlZiBpbiBhZGRpdGlvbiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgYnkgaXQiCittc2dzdHIgInp1c8OkdHpsaWNoIHp1bSBPYmpla3QgZGllIGRhcmF1ZiB2ZXJ3ZWlzZW5kZW4gUmVmZXJlbnplbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MzAKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBbPE9wdGlvbmVuPl0gPENvbW1pdC1SZWZlcmVuej4gWzxQZmFkPi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOAorbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAibnVyIFZlcnplaWNobmlzc2UgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMAorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIKK21zZ3N0ciAiUmVrdXJzaW9uIGluIFVudGVydmVyemVpY2huaXNzZW4gZHVyY2hmw7xocmVuIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzIKK21zZ2lkICJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIgorbXNnc3RyICJWZXJ6ZWljaG5pc3NlIGJlaSBSZWt1cnNpb24gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNQorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgIkVpbnRyw6RnZSBtaXQgTlVMLUJ5dGUgYWJzY2hsaWXDn2VuIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzYKK21zZ2lkICJpbmNsdWRlIG9iamVjdCBzaXplIgorbXNnc3RyICJPYmpla3RncsO2w59lIGVpbnNjaGxpZcOfZW4iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzOCBidWlsdGluL2xzLXRyZWUuYzoxNDAKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICJudXIgRGF0ZWluYW1lbiBhdWZsaXN0ZW4iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MworbXNnaWQgInVzZSBmdWxsIHBhdGggbmFtZXMiCittc2dzdHIgInZvbGxzdMOkbmRpZ2UgUGZhZG5hbWVuIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQ1Cittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICIiCisiZGFzIGdlc2FtdGUgVmVyemVpY2huaXMgYXVmbGlzdGVuOyBuaWNodCBudXIgZGFzIGFrdHVlbGxlIFZlcnplaWNobmlzICIKKyIoaW1wbGl6aWVydCAtLWZ1bGwtbmFtZSkiCisKKyM6IGJ1aWx0aW4vbWFpbHNwbGl0LmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IG1ib3g6ICclcyciCittc2dzdHIgIkxlZXJlIG1ib3g6ICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NQorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICJnaXQgbWVyZ2UgWzxPcHRpb25lbj5dIFs8Q29tbWl0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NgorbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU3Cittc2dpZCAiZ2l0IG1lcmdlIC0tY29udGludWUiCittc2dzdHIgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE5Cittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJTY2hhbHRlciAnbScgZXJmb3JkZXJ0IGVpbmVuIFdlcnQuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIk9wdGlvbiBgJXMnIGVyZm9yZGVydCBlaW5lbiBXZXJ0LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBtZXJnZSBzdHJhdGVneSAnJXMnLlxuIgorbXNnc3RyICJLb25udGUgTWVyZ2UtU3RyYXRlZ2llICclcycgbmljaHQgZmluZGVuLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIlZlcmbDvGdiYXJlIFN0cmF0ZWdpZW4gc2luZDoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIlZlcmbDvGdiYXJlIGJlbnV0emVyZGVmaW5pZXJ0ZSBTdHJhdGVnaWVuIHNpbmQ6IgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ1IGJ1aWx0aW4vcHVsbC5jOjEzMgorbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgImtlaW5lIFp1c2FtbWVuZmFzc3VuZyBkZXIgVW50ZXJzY2hpZWRlIGFtIFNjaGx1c3MgZGVzIE1lcmdlcyBhbnplaWdlbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0OCBidWlsdGluL3B1bGwuYzoxMzUKK21zZ2lkICJzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgImVpbmUgWnVzYW1tZW5mYXNzdW5nIGRlciBVbnRlcnNjaGllZGUgYW0gU2NobHVzcyBkZXMgTWVyZ2VzIGFuemVpZ2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ5IGJ1aWx0aW4vcHVsbC5jOjEzOAorbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIihTeW5vbnltIGbDvHIgLS1zdGF0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1MSBidWlsdGluL3B1bGwuYzoxNDEKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyIoaMO2Y2hzdGVucyA8bj4pIEVpbnRyw6RnZSB2b24gXCJzaG9ydGxvZ1wiIHp1ciBCZXNjaHJlaWJ1bmcgZGVzIE1lcmdlLUNvbW1pdHMgIgorImhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU0IGJ1aWx0aW4vcHVsbC5jOjE0NworbXNnaWQgImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIgorbXNnc3RyICJlaW5lbiBlaW56ZWxuZW4gQ29tbWl0IGFuc3RhdHQgZWluZXMgTWVyZ2VzIGVyemV1Z2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU2IGJ1aWx0aW4vcHVsbC5jOjE1MAorbXNnaWQgInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIKK21zZ3N0ciAiZWluZW4gQ29tbWl0IGR1cmNoZsO8aHJlbiwgd2VubiBkZXIgTWVyZ2UgZXJmb2xncmVpY2ggd2FyIChTdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTggYnVpbHRpbi9wdWxsLmM6MTUzCittc2dpZCAiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIgorbXNnc3RyICJCZWFyYmVpdHVuZyBkZXIgQmVzY2hyZWlidW5nIHZvciBkZW0gQ29tbWl0IgorCisjOiBidWlsdGluL21lcmdlLmM6MjYwCittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KSIKK21zZ3N0ciAiVm9yc3B1bGVuIGVybGF1YmVuIChTdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjIgYnVpbHRpbi9wdWxsLmM6MTYwCittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAiYWJicmVjaGVuLCB3ZW5uIGtlaW4gVm9yc3B1bGVuIG3DtmdsaWNoIGlzdCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NiBidWlsdGluL3B1bGwuYzoxNjMKK21zZ2lkICJ2ZXJpZnkgdGhhdCB0aGUgbmFtZWQgY29tbWl0IGhhcyBhIHZhbGlkIEdQRyBzaWduYXR1cmUiCittc2dzdHIgImRlbiBnZW5hbm50ZW4gQ29tbWl0IGF1ZiBlaW5lIGfDvGx0aWdlIEdQRy1TaWduYXR1ciDDvGJlcnByw7xmZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjcgYnVpbHRpbi9ub3Rlcy5jOjc4NyBidWlsdGluL3B1bGwuYzoxNjcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIwIGJ1aWx0aW4vcmViYXNlLmM6MTU3NSBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICJTdHJhdGVnaWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjggYnVpbHRpbi9wdWxsLmM6MTY4Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIgorbXNnc3RyICJ6dSB2ZXJ3ZW5kZW5kZSBNZXJnZS1TdHJhdGVnaWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjkgYnVpbHRpbi9wdWxsLmM6MTcxCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICJPcHRpb249V2VydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3MCBidWlsdGluL3B1bGwuYzoxNzIKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJPcHRpb24gZsO8ciBhdXNnZXfDpGhsdGUgTWVyZ2UtU3RyYXRlZ2llIgorCisjOiBidWlsdGluL21lcmdlLmM6MjcyCittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICIiCisiQ29tbWl0LUJlc2NocmVpYnVuZyB6dXNhbW1lbmbDvGhyZW4gKGbDvHIgZWluZW4gTWVyZ2UsIGRlciBrZWluIFZvcnNwdWxlbiB3YXIpIgorCisjOiBidWlsdGluL21lcmdlLmM6Mjc5Cittc2dpZCAiYWJvcnQgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgImRlbiBzaWNoIGltIEdhbmdlIGJlZmluZGxpY2hlbiBNZXJnZSBhYmJyZWNoZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODEKK21zZ2lkICItLWFib3J0IGJ1dCBsZWF2ZSBpbmRleCBhbmQgd29ya2luZyB0cmVlIGFsb25lIgorbXNnc3RyICItLWFib3J0LCBhYmVyIEluZGV4IHVuZCBBcmJlaXRzdmVyemVpY2huaXMgdW52ZXLDpG5kZXJ0IGxhc3NlbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MworbXNnaWQgImNvbnRpbnVlIHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICJkZW4gc2ljaCBpbSBHYW5nZSBiZWZpbmRsaWNoZW4gTWVyZ2UgZm9ydHNldHplbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4NSBidWlsdGluL3B1bGwuYzoxNzkKK21zZ2lkICJhbGxvdyBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgImVybGF1YmUgZGFzIFp1c2FtbWVuZsO8aHJlbiB2b24gbmljaHQgenVzYW1tZW5ow6RuZ2VuZGVuIEhpc3RvcmllbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI5MQorbXNnaWQgImJ5cGFzcyBwcmUtbWVyZ2UtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIgorbXNnc3RyICJIb29rcyBwcmUtbWVyZ2UtY29tbWl0IHVuZCBjb21taXQtbXNnIHVtZ2VoZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMDgKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAiS29ubnRlIFwic3Rhc2hcIiBuaWNodCBhdXNmw7xocmVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxMworbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAiXCJzdGFzaFwiIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgImtlaW4gZ8O8bHRpZ2VzIE9iamVrdDogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNDAgYnVpbHRpbi9tZXJnZS5jOjM1NworbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgInJlYWQtdHJlZSBmZWhsZ2VzY2hsYWdlbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM4NworbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKG5pY2h0cyB6dSBxdWV0c2NoZW4pIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiUXVldHNjaGUgQ29tbWl0IC0tIEhFQUQgd2lyZCBuaWNodCBha3R1YWxpc2llcnRcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIktlaW5lIE1lcmdlLUNvbW1pdC1CZXNjaHJlaWJ1bmcgLS0gSEVBRCB3aXJkIG5pY2h0IGFrdHVhbGlzaWVydFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiclcycgemVpZ3QgYXVmIGtlaW5lbiBDb21taXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBTdHJpbmc6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzA4Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiRXMgd2lyZCBudXIgZGVyIE1lcmdlIHZvbiB6d2VpIEJyYW5jaGVzIGJlaGFuZGVsdC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiVW5iZWthbm50ZSBPcHRpb24gZsO8ciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICJrb25udGUgJXMgbmljaHQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAia29ubnRlIG5pY2h0IHZvbiAnJXMnIGxlc2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIk1lcmdlIHd1cmRlIG5pY2h0IGNvbW1pdHRldDsgYmVudXR6ZW4gU2llICdnaXQgY29tbWl0JywgdW0gZGVuIE1lcmdlICIKKyJhYnp1c2NobGllw59lbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwNAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCittc2dzdHIgIiIKKyJCaXR0ZSBnZWJlbiBTaWUgZWluZSBDb21taXQtQmVzY2hyZWlidW5nIGVpbiwgdW0genUgZXJrbMOkcmVuLCB3YXJ1bSBkaWVzZXJcbiIKKyJNZXJnZSBlcmZvcmRlcmxpY2ggaXN0LCBpbnNiZXNvbmRlcmUgd2VubiBlcyBlaW5lbiBha3R1YWxpc2llcnRlblxuIgorIlVwc3RyZWFtLUJyYW5jaCBtaXQgZWluZW0gVGhlbWEtQnJhbmNoIHp1c2FtbWVuZsO8aHJ0LlxuIgorIlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA5Cittc2dpZCAiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiRWluZSBsZWVyZSBDb21taXQtQmVzY2hyZWlidW5nIGJyaWNodCBkZW4gQ29tbWl0IGFiLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiWmVpbGVuLCBkaWUgbWl0ICclYycgYmVnaW5uZW4sIHdlcmRlbiBpZ25vcmllcnQsXG4iCisidW5kIGVpbmUgbGVlcmUgQmVzY2hyZWlidW5nIGJyaWNodCBkZW4gQ29tbWl0IGFiLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODY1Cittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICJMZWVyZSBDb21taXQtQmVzY2hyZWlidW5nIgorCisjOiBidWlsdGluL21lcmdlLmM6ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAiV3VuZGVyYmFyLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iCittc2dzdHIgIiIKKyJBdXRvbWF0aXNjaGVyIE1lcmdlIGZlaGxnZXNjaGxhZ2VuOyBiZWhlYmVuIFNpZSBkaWUgS29uZmxpa3RlIHVuZCBjb21taXR0ZW4gIgorIlNpZSBkYW5uIGRhcyBFcmdlYm5pcy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4MAorbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiU2llIGJlZmluZGVuIHNpY2ggYXVmIGtlaW5lbSBCcmFuY2guIgorCisjOiBidWlsdGluL21lcmdlLmM6OTgyCittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJLZWluIFJlbW90ZS1SZXBvc2l0b3J5IGbDvHIgZGVuIGFrdHVlbGxlbiBCcmFuY2guIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg0Cittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisiRXMgaXN0IGtlaW4gU3RhbmRhcmQtVXBzdHJlYW0tQnJhbmNoIGbDvHIgZGVuIGFrdHVlbGxlbiBCcmFuY2ggZGVmaW5pZXJ0LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICJLZWluIFJlbW90ZS1UcmFja2luZy1CcmFuY2ggZsO8ciAlcyB2b24gJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciCittc2dzdHIgIkZlaGxlcmhhZnRlciBXZXJ0ICclcycgaW4gVW1nZWJ1bmdzdmFyaWFibGUgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UgaW4gJXM6ICVzIgorbXNnc3RyICJuaWNodHMgd2FzIHdpciBpbiAlcyB6dXNhbW1lbmbDvGhyZW4ga8O2bm5lbjogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTgzCittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIm5pY2h0cyB3YXMgd2lyIHp1c2FtbWVuZsO8aHJlbiBrw7ZubmVuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI4NgorbXNnaWQgIi0tYWJvcnQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYWJvcnQgYWt6ZXB0aWVydCBrZWluZSBBcmd1bWVudGUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjkwCittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICJFcyBnaWJ0IGtlaW5lbiBNZXJnZSBhYnp1YnJlY2hlbiAoTUVSR0VfSEVBRCBmZWhsdCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk5Cittc2dpZCAiLS1xdWl0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLXF1aXQgZXJ3YXJ0ZXQga2VpbmUgQXJndW1lbnRlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMxMgorbXNnaWQgIi0tY29udGludWUgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tY29udGludWUgZXJ3YXJ0ZXQga2VpbmUgQXJndW1lbnRlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMxNgorbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIGluIHByb2dyZXNzIChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiRXMgaXN0IGtlaW4gTWVyZ2UgaW0gR2FuZ2UgKE1FUkdFX0hFQUQgZmVobHQpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzIKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiU2llIGhhYmVuIElocmVuIE1lcmdlIG5pY2h0IGFiZ2VzY2hsb3NzZW4gKE1FUkdFX0hFQUQgZXhpc3RpZXJ0KS5cbiIKKyJCaXR0ZSBjb21taXR0ZW4gU2llIElocmUgw4RuZGVydW5nZW4sIGJldm9yIFNpZSBkZW4gTWVyZ2UgYXVzZsO8aHJlbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM5Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIlNpZSBoYWJlbiBcImNoZXJyeS1waWNrXCIgbmljaHQgYWJnZXNjaGxvc3NlbiAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdGllcnQpLlxuIgorIkJpdHRlIGNvbW1pdHRlbiBTaWUgSWhyZSDDhG5kZXJ1bmdlbiwgYmV2b3IgU2llIGRlbiBNZXJnZSBhdXNmw7xocmVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNDIKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIiIKKyJTaWUgaGFiZW4gXCJjaGVycnktcGlja1wiIG5pY2h0IGFiZ2VzY2hsb3NzZW4gKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RpZXJ0KS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzU2Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCittc2dzdHIgIlNpZSBrw7ZubmVuIC0tc3F1YXNoIG5pY2h0IG1pdCAtLW5vLWZmIGtvbWJpbmllcmVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTgKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLWNvbW1pdC4iCittc2dzdHIgIlNpZSBrw7ZubmVuIC0tc3F1YXNoIG5pY2h0IG1pdCAtLWNvbW1pdCBrb21iaW5pZXJlbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzc0Cittc2dpZCAiTm8gY29tbWl0IHNwZWNpZmllZCBhbmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm90IHNldC4iCittc2dzdHIgIktlaW4gQ29tbWl0IGFuZ2VnZWJlbiB1bmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gaXN0IG5pY2h0IGdlc2V0enQuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5MQorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICIiCisiQmluIGF1ZiBlaW5lbSBDb21taXQsIGRlciBub2NoIGdlYm9yZW4gd2lyZDsga2FubiBcInNxdWFzaFwiIG5pY2h0IGF1c2bDvGhyZW4uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5MworbXNnaWQgIk5vbi1mYXN0LWZvcndhcmQgY29tbWl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW50byBhbiBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisiTmljaHQgdm9yenVzcHVsZW5kZXIgQ29tbWl0IGthbm4gbmljaHQgaW4gZWluZW0gbGVlcmVuIEJyYW5jaCB2ZXJ3ZW5kZXQgIgorIndlcmRlbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiVzIC0gbmljaHRzIHdhcyB3aXIgenVzYW1tZW5mw7xocmVuIGvDtm5uZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDAwCittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiS2FubiBudXIgZXhha3QgZWluZW4gQ29tbWl0IGluIGVpbmVtIGxlZXJlbiBCcmFuY2ggenVzYW1tZW5mw7xocmVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0ODEKK21zZ2lkICJyZWZ1c2luZyB0byBtZXJnZSB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJWZXJ3ZWlnZXJlIGRlbiBNZXJnZSB2b24gbmljaHQgenVzYW1tZW5ow6RuZ2VuZGVuIEhpc3Rvcmllbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDkwCittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiIKK21zZ3N0ciAiQmVyZWl0cyBha3R1ZWxsLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgIkFrdHVhbGlzaWVyZSAlcy4uJXNcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iCittc2dzdHIgIlByb2JpZXJlIHdpcmtsaWNoIHRyaXZpYWxlbiBcImluLWluZGV4XCItTWVyZ2UgLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIk5laW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTc0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiBZZWVhaCEiCittc2dzdHIgIkJlcmVpdHMgYWt0dWVsbC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTgwCittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICJWb3JzcHVsZW4gbmljaHQgbcO2Z2xpY2gsIGJyZWNoZSBhYi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjAzIGJ1aWx0aW4vbWVyZ2UuYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICJSw7xja2xhdWYgZGVzIFZlcnplaWNobmlzc2VzIGJpcyB6dW0gVXJzcHJ1bmcgLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICJQcm9iaWVyZSBNZXJnZS1TdHJhdGVnaWUgJXMgLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICJLZWluZSBNZXJnZS1TdHJhdGVnaWUgYmVoYW5kZWx0IGRpZXNlbiBNZXJnZS5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugd2l0aCBzdHJhdGVneSAlcyBmYWlsZWQuXG4iCittc2dzdHIgIk1lcmdlIG1pdCBTdHJhdGVnaWUgJXMgZmVobGdlc2NobGFnZW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICJCZW51dHplbiBTaWUgXCIlc1wiLCB1bSBkaWUgQXVmbMO2c3VuZyBwZXIgSGFuZCB2b3J6dWJlcmVpdGVuLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisiQXV0b21hdGlzY2hlciBNZXJnZSBhYmdlc2NobG9zc2VuOyBoYWx0ZSwgd2llIGdld8O8bnNjaHQsIHZvciBkZW0gQ29tbWl0IGFuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMyCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPENvbW1pdD4gPENvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMzCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Q29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzQKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDxDb21taXQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPENvbW1pdD4gPENvbW1pdD4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM2Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8UmVmZXJlbno+IFs8Q29tbWl0Pl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1MworbXNnaWQgIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIKK21zZ3N0ciAiQXVzZ2FiZSBhbGxlciBnZW1laW5zYW1lbiBWb3Jnw6RuZ2VyLUNvbW1pdHMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NQorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAiVm9yZ8Okbmdlci1Db21taXRzIGbDvHIgZWluZW4gZWluemVsbmVuIG4tV2VnZS1NZXJnZSBmaW5kZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NworbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICJDb21taXRzIGF1Zmxpc3RlbiwgZGllIG5pY2h0IGR1cmNoIEFuZGVyZSBlcnJlaWNoYmFyIHNpbmQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1OQorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAiaXN0IGRlciBFcnN0ZSBlaW4gVm9yZ8Okbmdlci1Db21taXQgZGVzIEFuZGVyZW4/IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNjEKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAiPENvbW1pdD4gZmluZGVuLCB2b24gd28gUmVmbG9nIHZvbiA8UmVmZXJlbno+IGFiZ2VzcGFsdGVuIHd1cmRlIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo5Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiAiCisiPG9yaWctZmlsZT4gPGZpbGUyPiIKK21zZ3N0ciAiIgorImdpdCBtZXJnZS1maWxlIFs8T3B0aW9uZW4+XSBbLUwgPE5hbWUxPiBbLUwgPG9yaWc+IFstTCA8TmFtZTI+XV1dIDxEYXRlaTE+ICIKKyI8b3JpZy1EYXRlaT4gPERhdGVpMj4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM1Cittc2dpZCAic2VuZCByZXN1bHRzIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiRXJnZWJuaXNzZSB6dXIgU3RhbmRhcmQtQXVzZ2FiZSBzZW5kZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM2Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgImVpbmVuIGRpZmYzIGJhc2llcnRlbiBNZXJnZSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM3Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIgorbXNnc3RyICJiZWkgS29uZmxpa3RlbiB1bnNlcmUgVmFyaWFudGUgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozOQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJiZWkgS29uZmxpa3RlbiBpaHJlIFZhcmlhbnRlIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDEKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIgorbXNnc3RyICJiZWkgS29uZmxpa3RlbiBlaW5lIGdlbWVpbnNhbWUgVmFyaWFudGUgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NAorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGlzIG1hcmtlciBzaXplIgorbXNnc3RyICJiZWkgS29uZmxpa3RlbiBkaWVzZSBLZW5uemVpY2hudW5nc2zDpG5nZSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ1Cittc2dpZCAiZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzIgorbXNnc3RyICJrZWluZSBXYXJudW5nIGJlaSBLb25mbGlrdGVuIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NworbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIKK21zZ3N0ciAiQmVzY2hyaWZ0dW5nIGbDvHIgRGF0ZWkxL29yaWctRGF0ZWkvRGF0ZWkyIHNldHplbiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiAlcyIKK21zZ3N0ciAidW5iZWthbm50ZSBPcHRpb246ICVzIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiS29ubnRlIE9iamVrdCAnJXMnIG5pY2h0IHBhcnNlbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZS4gSWdub3JpbmcgJXMuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlcy4gSWdub3JpbmcgJXMuIgorbXNnc3RyWzBdICJrYW5uIG5pY2h0IG1pdCBtZWhyIGFscyAlZCBNZXJnZS1CYXNpcyB1bWdlaGVuLiBJZ25vcmllcmUgJXMuIgorbXNnc3RyWzFdICJrYW5uIG5pY2h0IG1pdCBtZWhyIGFscyAlZCBNZXJnZS1CYXNlbiB1bWdlaGVuLiBJZ25vcmllcmUgJXMuIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjY1Cittc2dpZCAibm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiRXMgd2lyZCBudXIgZGVyIE1lcmdlIHZvbiB6d2VpIEJyYW5jaGVzIGJlaGFuZGVsdC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzQgYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSByZWYgJyVzJyIKK21zZ3N0ciAiS29ubnRlIFJlZmVyZW56ICclcycgbmljaHQgYXVmbMO2c2VuIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgd2l0aCAlc1xuIgorbXNnc3RyICJGw7xocmUgJXMgbWl0ICVzIHp1c2FtbWVuXG4iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6NjYKK21zZ2lkICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorbXNnc3RyICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NAorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICJFaW5nYWJlIGlzdCBkdXJjaCBOVUwtWmVpY2hlbiBhYmdlc2NobG9zc2VuIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NSBidWlsdGluL3dyaXRlLXRyZWUuYzoyNgorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiZmVobGVuZGUgT2JqZWt0ZSBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTYKK21zZ2lkICJhbGxvdyBjcmVhdGlvbiBvZiBtb3JlIHRoYW4gb25lIHRyZWUiCittc2dzdHIgImRpZSBFcnN0ZWxsdW5nIHZvbiBtZWhyIGFscyBlaW5lbSBcIlRyZWVcIi1PYmpla3QgZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjkKK21zZ2lkICIiCisiZ2l0IG11bHRpLXBhY2staW5kZXggWzxvcHRpb25zPl0gKHdyaXRlfHZlcmlmeXxleHBpcmV8cmVwYWNrIC0tYmF0Y2gtIgorInNpemU9PHNpemU+KSIKK21zZ3N0ciAiIgorImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8T3B0aW9uZW4+XSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC0iCisic2l6ZT08R3LDtsOfZT4pIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNgorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiCittc2dzdHIgIiIKKyJPYmpla3QtVmVyemVpY2huaXMsIHdlbGNoZXMgUGFhcmUgdm9uIFBhY2tkYXRlaWVuIHVuZCBwYWNrLWluZGV4IGVudGjDpGx0IgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyOQorbXNnaWQgIiIKKyJkdXJpbmcgcmVwYWNrLCBjb2xsZWN0IHBhY2stZmlsZXMgb2Ygc21hbGxlciBzaXplIGludG8gYSBiYXRjaCB0aGF0IGlzICIKKyJsYXJnZXIgdGhhbiB0aGlzIHNpemUiCittc2dzdHIgIiIKKyJXw6RocmVuZCBkZXMgVW1wYWNrZW5zLCBzYW1tbGUgUGFrZXQtRGF0ZWllbiB2b24gZ2VyaW5nZXJlciBHcsO2w59lIGluICIKKyJlaW5lblN0YXBlbCwgd2VsY2hlciBncsO2w59lciBpc3QgYWxzIGRpZXNlIEdyw7bDn2UiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjUwIGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NjcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgIlp1IHZpZWxlIEFyZ3VtZW50ZS4iCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjYwCittc2dpZCAiLS1iYXRjaC1zaXplIG9wdGlvbiBpcyBvbmx5IGZvciAncmVwYWNrJyBzdWJjb21tYW5kIgorbXNnc3RyICJPcHRpb24gLS1iYXRjaC1zaXplIGlzdCBudXIgZsO8ciBkZW4gVW50ZXJiZWZlaGwgJ3JlcGFjayciCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiTmljaHQgZXJrYW5udGVyIFVudGVyYmVmZWhsOiAlcyIKKworIzogYnVpbHRpbi9tdi5jOjE4Cittc2dpZCAiZ2l0IG12IFs8b3B0aW9ucz5dIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCittc2dzdHIgImdpdCBtdiBbPE9wdGlvbmVuPl0gPFF1ZWxsZT4uLi4gPFppZWw+IgorCisjOiBidWlsdGluL212LmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IgorbXNnc3RyICJWZXJ6ZWljaG5pcyAlcyBpc3QgenVtIENvbW1pdCB2b3JnZW1lcmt0IHVuZCBrZWluIFN1Ym1vZHVsPyIKKworIzogYnVpbHRpbi9tdi5jOjg1Cittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJCaXR0ZSBtZXJrZW4gU2llIElocmUgw4RuZGVydW5nZW4gaW4gLmdpdG1vZHVsZXMgenVtIENvbW1pdCB2b3Igb2RlciAiCisiYmVudXR6ZW5cbiIKKyJTaWUgXCJzdGFzaFwiLCB1bSBmb3J0enVmYWhyZW4uIgorCisjOiBidWlsdGluL212LmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgaW4gaW5kZXgiCittc2dzdHIgIiUuKnMgaXN0IHp1bSBDb21taXQgdm9yZ2VtZXJrdCIKKworIzogYnVpbHRpbi9tdi5jOjEyNQorbXNnaWQgImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiVmVyc2NoaWViZW4vVW1iZW5lbm5lbiBlcnp3aW5nZW4sIGF1Y2ggd2VubiBkYXMgWmllbCBleGlzdGllcnQiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjcKK21zZ2lkICJza2lwIG1vdmUvcmVuYW1lIGVycm9ycyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gVmVyc2NoaWViZW4gb2RlciBVbWJlbmVubmVuIMO8YmVyc3ByaW5nZW4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gJyVzJyBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIlppZWwgJyVzJyBpc3Qga2VpbiBWZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi9tdi5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgIlByw7xmZSBVbWJlbmVubnVuZyB2b24gJyVzJyBuYWNoICclcydcbiIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgInVuZ8O8bHRpZ2UgUXVlbGxlIgorCisjOiBidWlsdGluL212LmM6MTg3Cittc2dpZCAiY2FuIG5vdCBtb3ZlIGRpcmVjdG9yeSBpbnRvIGl0c2VsZiIKK21zZ3N0ciAia2FubiBWZXJ6ZWljaG5pcyBuaWNodCBpbiBzaWNoIHNlbGJzdCB2ZXJzY2hpZWJlbiIKKworIzogYnVpbHRpbi9tdi5jOjE5MAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgImthbm4gVmVyemVpY2huaXMgbmljaHQgw7xiZXIgRGF0ZWkgdmVyc2NoaWViZW4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTkKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICJRdWVsbHZlcnplaWNobmlzIGlzdCBsZWVyIgorCisjOiBidWlsdGluL212LmM6MjI0Cittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAibmljaHQgdW50ZXIgVmVyc2lvbnNrb250cm9sbGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjcKK21zZ2lkICJkZXN0aW5hdGlvbiBleGlzdHMiCittc2dzdHIgIlppZWwgZXhpc3RpZXJ0IGJlcmVpdHMiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcndyaXRpbmcgJyVzJyIKK21zZ3N0ciAiw7xiZXJzY2hyZWliZSAnJXMnIgorCisjOiBidWlsdGluL212LmM6MjM4Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAiS2FubiBuaWNodCDDvGJlcnNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9tdi5jOjI0MQorbXNnaWQgIm11bHRpcGxlIHNvdXJjZXMgZm9yIHRoZSBzYW1lIHRhcmdldCIKK21zZ3N0ciAibWVocmVyZSBRdWVsbGVuIGbDvHIgZGFzc2VsYmUgWmllbCIKKworIzogYnVpbHRpbi9tdi5jOjI0MworbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiWmllbHZlcnplaWNobmlzIGV4aXN0aWVydCBuaWNodCIKKworIzogYnVpbHRpbi9tdi5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiJXMsIFF1ZWxsZT0lcywgWmllbD0lcyIKKworIzogYnVpbHRpbi9tdi5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICJCZW5lbm5lICVzIG5hY2ggJXMgdW1cbiIKKworIzogYnVpbHRpbi9tdi5jOjI3NyBidWlsdGluL3JlbW90ZS5jOjc4MSBidWlsdGluL3JlcGFjay5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiVW1iZW5lbm51bmcgdm9uICclcycgZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPE9wdGlvbmVuPl0gPENvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjYKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1hbGwiCittc2dzdHIgImdpdCBuYW1lLXJldiBbPE9wdGlvbmVuPl0gLS1hbGwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjcKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8T3B0aW9uZW4+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI0Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICJudXIgTmFtZW4gYW56ZWlnZW4gKGtlaW5lIFNIQS0xKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUyNQorbXNnaWQgIm9ubHkgdXNlIHRhZ3MgdG8gbmFtZSB0aGUgY29tbWl0cyIKK21zZ3N0ciAibnVyIFRhZ3MgdmVyd2VuZGVuLCB1bSBkaWUgQ29tbWl0cyB6dSBiZW5lbm5lbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUyNworbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJudXIgUmVmZXJlbnplbiB2ZXJ3ZW5kZW4sIGRpZSA8TXVzdGVyPiBlbnRzcHJlY2hlbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUyOQorbXNnaWQgImlnbm9yZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiaWdub3JpZXJlIFJlZmVyZW56ZW4gZGllIDxNdXN0ZXI+IGVudHNwcmVjaGVuIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTMxCittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAiYWxsZSBDb21taXRzIGF1Zmxpc3RlbiwgZGllIHZvbiBhbGxlbiBSZWZlcmVuemVuIGVycmVpY2hiYXIgc2luZCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUzMgorbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAidm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTMzCittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIgorbXNnc3RyICJBdXNnYWJlIHZvbiBgdW5kZWZpbmllcnRlbmAgTmFtZW4gZXJsYXViZW4gKFN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUzOQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW4gdGhlIGlucHV0IChpbnRlcm5hbCB1c2UpIgorbXNnc3RyICJUYWdzIGluIGRlciBFaW5nYWJlIGRlcmVmZXJlbnppZXJlbiAoaW50ZXJuZSBWZXJ3ZW5kdW5nKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPE5vdGl6LVJlZmVyZW56Pl0gW2xpc3QgWzxPYmpla3Q+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+ICIKKyJ8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPE5vdGl6LVJlZmVyZW56Pl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSAiCisiPEJlc2NocmVpYnVuZz4gfCAtRiA8RGF0ZWk+IHwgKC1jIHwgLUMpIDxPYmpla3Q+XSBbPE9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzAKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPE5vdGl6LVJlZmVyZW56Pl0gY29weSBbLWZdIDx2b24tT2JqZWt0PiA8bmFjaC1PYmpla3Q+IgorCisjOiBidWlsdGluL25vdGVzLmM6MzEKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gfCAiCisiKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8Tm90aXotUmVmZXJlbno+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8QmVzY2hyZWlidW5nPiAiCisifCAtRiA8RGF0ZWk+IHwgKC1jIHwgLUMpIDxPYmpla3Q+XSBbPE9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzIKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxOb3Rpei1SZWZlcmVuej5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8T2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMworbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8Tm90aXotUmVmZXJlbno+XSBzaG93IFs8T2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8Tm90aXotUmVmZXJlbno+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxTdHJhdGVnaWU+XSA8Tm90aXotIgorIlJlZmVyZW56PiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNworbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHJlbW92ZSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxOb3Rpei1SZWZlcmVuej5dIHJlbW92ZSBbPE9iamVrdD4uLi5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW5dIFstdl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPE5vdGl6LVJlZmVyZW56Pl0gcHJ1bmUgWy1uXSBbLXZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzkKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxOb3Rpei1SZWZlcmVuej5dIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NAorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFtsaXN0IFs8T2JqZWt0Pl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6NDkKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhZGQgWzxPcHRpb25lbj5dIFs8T2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NAorbXNnaWQgImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IFs8T3B0aW9uZW4+XSA8dm9uLU9iamVrdD4gPG5hY2gtT2JqZWt0PiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzx2b24tT2JqZWt0PiA8bmFjaC1PYmpla3Q+XS4uLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwCittc2dpZCAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYXBwZW5kIFs8T3B0aW9uZW4+XSBbPE9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjUKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgZWRpdCBbPE9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAKK21zZ2lkICJnaXQgbm90ZXMgc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgc2hvdyBbPE9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzLXJlZj4iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSBbPE9wdGlvbmVuPl0gPE5vdGl6LVJlZmVyZW56PiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxPcHRpb25lbj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzcKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxPcHRpb25lbj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODIKK21zZ2lkICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyByZW1vdmUgWzxPYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3Cittc2dpZCAiZ2l0IG5vdGVzIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgcHJ1bmUgWzxPcHRpb25lbj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6OTIKK21zZ2lkICJnaXQgbm90ZXMgZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NworbXNnaWQgIldyaXRlL2VkaXQgdGhlIG5vdGVzIGZvciB0aGUgZm9sbG93aW5nIG9iamVjdDoiCittc2dzdHIgIlNjaHJlaWJlbi9CZWFyYmVpdGVuIGRlciBOb3RpemVuIGbDvHIgZGFzIGZvbGdlbmRlIE9iamVrdDoiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgImtvbm50ZSAnc2hvdycgZsO8ciBPYmpla3QgJyVzJyBuaWNodCBzdGFydGVuIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ3Nob3cnIG91dHB1dCIKK21zZ3N0ciAiS29ubnRlIEF1c2dhYmUgdm9uICdzaG93JyBuaWNodCBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJrb25udGUgJ3Nob3cnIGbDvHIgT2JqZWt0ICclcycgbmljaHQgYWJzY2hsaWXDn2VuIgorCisjOiBidWlsdGluL25vdGVzLmM6MTk3Cittc2dpZCAicGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICIiCisiQml0dGUgbGllZmVybiBTaWUgZGllIE5vdGl6LUluaGFsdGUgdW50ZXIgVmVyd2VuZHVuZyBkZXIgT3B0aW9uIC1tIG9kZXIgLUYuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjA2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICJLb25udGUgTm90aXotT2JqZWt0IG5pY2h0IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAiRGllIE5vdGl6LUluaGFsdGUgd3VyZGVuIGluICVzIGJlbGFzc2VuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI0MiBidWlsdGluL3RhZy5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciCittc2dzdHIgImtvbm50ZSAnJXMnIG5pY2h0IMO2ZmZuZW4gb2RlciBsZXNlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2MyBidWlsdGluL25vdGVzLmM6MzEzIGJ1aWx0aW4vbm90ZXMuYzozMTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODMgYnVpbHRpbi9ub3Rlcy5jOjQzOCBidWlsdGluL25vdGVzLmM6NTI2CisjOiBidWlsdGluL25vdGVzLmM6NTMxIGJ1aWx0aW4vbm90ZXMuYzo2MTAgYnVpbHRpbi9ub3Rlcy5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgYWxzIGfDvGx0aWdlIFJlZmVyZW56IGF1ZmzDtnNlbi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICclcycuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZXMgT2JqZWt0ZXMgJyVzJy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgbm90ZSBkYXRhIGZyb20gbm9uLWJsb2Igb2JqZWN0ICclcycuIgorbXNnc3RyICJLYW5uIE5vdGl6LURhdGVuIG5pY2h0IHZvbiBOaWNodC1CbG9iIE9iamVrdCAnJXMnIGxlc2VuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIkZlaGxlcmhhZnRlIEVpbmdhYmV6ZWlsZTogJyVzJy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEtvcGllcmVuIGRlciBOb3RpemVuIHZvbiAnJXMnIG5hY2ggJyVzJyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBmaXJzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgZ2l0CisjLiBub3RlcyBjb21tYW5kOiAnYWRkJywgJ21lcmdlJywgJ3JlbW92ZScsIGV0Yy4KKyMuCisjOiBidWlsdGluL25vdGVzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvICVzIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiIgorIkF1c2bDvGhydW5nIHZvbiAlcyBhdWYgTm90aXplbiBpbiAlcyAoYXXDn2VyaGFsYiB2b24gcmVmcy9ub3Rlcy8pICIKKyJ6dXLDvGNrZ2V3aWVzZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNzYgYnVpbHRpbi9ub3Rlcy5jOjQzMSBidWlsdGluL25vdGVzLmM6NTA5CisjOiBidWlsdGluL25vdGVzLmM6NTIxIGJ1aWx0aW4vbm90ZXMuYzo1OTggYnVpbHRpbi9ub3Rlcy5jOjY2NQorIzogYnVpbHRpbi9ub3Rlcy5jOjgxNSBidWlsdGluL25vdGVzLmM6OTYzIGJ1aWx0aW4vbm90ZXMuYzo5ODUKK21zZ2lkICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorbXNnc3RyICJ6dSB2aWVsZSBQYXJhbWV0ZXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODkgYnVpbHRpbi9ub3Rlcy5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICJLZWluZSBOb3RpeiBmw7xyIE9iamVrdCAlcyBnZWZ1bmRlbi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTAgYnVpbHRpbi9ub3Rlcy5jOjU3NgorbXNnaWQgIm5vdGUgY29udGVudHMgYXMgYSBzdHJpbmciCittc2dzdHIgIk5vdGl6aW5oYWx0ZSBhbHMgWmVpY2hlbmtldHRlIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEzIGJ1aWx0aW4vbm90ZXMuYzo1NzkKK21zZ2lkICJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIKK21zZ3N0ciAiTm90aXppbmhhbHRlIGluIGVpbmVyIERhdGVpIgorCisjOiBidWlsdGluL25vdGVzLmM6NDE2IGJ1aWx0aW4vbm90ZXMuYzo1ODIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgIldpZWRlcnZlcndlbmR1bmcgdW5kIEJlYXJiZWl0dW5nIGRlcyBhbmdlZ2ViZW5lbiBOb3Rpei1PYmpla3RlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxOSBidWlsdGluL25vdGVzLmM6NTg1Cittc2dpZCAicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICJXaWVkZXJ2ZXJ3ZW5kdW5nIGRlcyBhbmdlZ2ViZW5lbiBOb3Rpei1PYmpla3RlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyMiBidWlsdGluL25vdGVzLmM6NTg4Cittc2dpZCAiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIgorbXNnc3RyICJTcGVpY2hlcm4gbGVlcmVyIE5vdGl6IGVybGF1YmVuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDIzIGJ1aWx0aW4vbm90ZXMuYzo0OTYKK21zZ2lkICJyZXBsYWNlIGV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICJleGlzdGllcmVuZGUgTm90aXplbiBlcnNldHplbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIktvbm50ZSBOb3RpemVuIG5pY2h0IGhpbnp1ZsO8Z2VuLiBFeGlzdGllcmVuZGUgTm90aXplbiBmw7xyIE9iamVrdCAlcyAiCisiZ2VmdW5kZW4uIFZlcndlbmRlbiBTaWUgJy1mJywgdW0gZGllIGV4aXN0aWVyZW5kZW4gTm90aXplbiB6dSDDvGJlcnNjaHJlaWJlbi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjMgYnVpbHRpbi9ub3Rlcy5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIsOcYmVyc2NocmVpYmUgZXhpc3RpZXJlbmRlIE5vdGl6ZW4gZsO8ciBPYmpla3QgJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3NSBidWlsdGluL25vdGVzLmM6NjM3IGJ1aWx0aW4vbm90ZXMuYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIkVudGZlcm5lIE5vdGl6IGbDvHIgT2JqZWt0ICVzXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTcKK21zZ2lkICJyZWFkIG9iamVjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAiT2JqZWt0ZSB2b24gZGVyIFN0YW5kYXJkLUVpbmdhYmUgbGVzZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTkKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAiIgorIktvbmZpZ3VyYXRpb24gZsO8ciA8QmVmZWhsPiB6dW0gVW1zY2hyZWliZW4gdm9uIENvbW1pdHMgbGFkZW4gKGltcGxpemllcnQgLS0iCisic3RkaW4pIgorCisjOiBidWlsdGluL25vdGVzLmM6NTE3Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICJ6dSB3ZW5pZyBQYXJhbWV0ZXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiS2FubiBOb3RpemVuIG5pY2h0IGtvcGllcmVuLiBFeGlzdGllcmVuZGUgTm90aXplbiBmw7xyIE9iamVrdCAlcyBnZWZ1bmRlbi4gIgorIlZlcndlbmRlbiBTaWUgJy1mJywgdW0gZGllIGV4aXN0aWVyZW5kZW4gTm90aXplbiB6dSDDvGJlcnNjaHJlaWJlbi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgIktlaW5lIE5vdGl6ZW4gZsO8ciBRdWVsbC1PYmpla3QgJXMuIEtvcGllIG5pY2h0IG3DtmdsaWNoLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKyJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIgorbXNnc3RyICIiCisiRGllIE9wdGlvbmVuIC1tLy1GLy1jLy1DIHNpbmQgZsO8ciBkZW4gVW50ZXJiZWZlaGwgJ2VkaXQnIHZlcmFsdGV0LlxuIgorIkJpdHRlIGJlbnV0emVuIFNpZSBzdGF0dGRlc3NlbiAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OTgKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMw7ZzY2hlbiBkZXIgUmVmZXJlbnogTk9URVNfTUVSR0VfUEFSVElBTCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwMAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgcmVmIE5PVEVTX01FUkdFX1JFRiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTMO2c2NoZW4gZGVyIFJlZmVyZW56IE5PVEVTX01FUkdFX1JFRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwMgorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJ2dpdCBub3RlcyBtZXJnZScgd29ya3RyZWUiCittc2dzdHIgIkZlaGxlciBiZWltIEzDtnNjaGVuIGRlcyBBcmJlaXRzdmVyemVpY2huaXNzZXMgdm9uICdnaXQgbm90ZXMgbWVyZ2UnLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyMgorbXNnaWQgImZhaWxlZCB0byByZWFkIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZXIgUmVmZXJlbnogTk9URVNfTUVSR0VfUEFSVElBTCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyNAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICJLb25udGUgQ29tbWl0IHZvbiBOT1RFU19NRVJHRV9QQVJUSUFMIG5pY2h0IGZpbmRlbi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjYKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iCittc2dzdHIgIktvbm50ZSBDb21taXQgdm9uIE5PVEVTX01FUkdFX1BBUlRJQUwgbmljaHQgcGFyc2VuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjczOQorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlIE5PVEVTX01FUkdFX1JFRiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVmbMO2c2VuIHZvbiBOT1RFU19NRVJHRV9SRUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NDIKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgbm90ZXMgbWVyZ2UiCittc2dzdHIgIkZlaGxlciBiZWltIEFic2NobGllw59lbiBkZXIgWnVzYW1tZW5mw7xocnVuZyBkZXIgTm90aXplbi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub3RlcyBtZXJnZSBzdHJhdGVneSAlcyIKK21zZ3N0ciAidW5iZWthbm50ZSBNZXJnZS1TdHJhdGVnaWUgJyVzJyBmw7xyIE5vdGl6ZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODQKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIkFsbGdlbWVpbmUgT3B0aW9uZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODYKK21zZ2lkICJNZXJnZSBvcHRpb25zIgorbXNnc3RyICJNZXJnZS1PcHRpb25lbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4OAorbXNnaWQgIiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCittc2dzdHIgIiIKKyJsw7ZzdCBLb25mbGlrdGUgYmVpIE5vdGl6ZW4gbWl0IGRlciBhbmdlZ2ViZW5lbiBTdHJhdGVnaWUgYXVmIChtYW51YWwvb3Vycy8iCisidGhlaXJzL3VuaW9uL2NhdF9zb3J0X3VuaXEpIgorCisjOiBidWlsdGluL25vdGVzLmM6NzkwCittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAibmljaHQgenVzYW1tZW5nZWbDvGhydGUgTm90aXplbiBlaW50cmFnZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTIKK21zZ2lkICJmaW5hbGl6ZSBub3RlcyBtZXJnZSBieSBjb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICIiCisiTWVyZ2Ugdm9uIE5vdGl6ZW4gYWJzY2hsaWXDn2VuLCBpbiBkZW0gbmljaHQgenVzYW1tZW5nZWbDvGhydGUgTm90aXplbiAiCisiY29tbWl0dGV0IHdlcmRlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NAorbXNnaWQgIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIktvbmZsaWt0YXVmbMO2c3VuZyBiZWltIE1lcmdlIHZvbiBOb3RpemVuIGFiYnJlY2hlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NgorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICJNZXJnZSB2b24gTm90aXplbiBhYmJyZWNoZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MDcKK21zZ2lkICJjYW5ub3QgbWl4IC0tY29tbWl0LCAtLWFib3J0IG9yIC1zLy0tc3RyYXRlZ3kiCittc2dzdHIgIkthbm4gLS1jb21taXQsIC0tYWJvcnQgb2RlciAtcy8tLXN0cmF0ZWd5IG5pY2h0IGtvbWJpbmllcmVuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgxMgorbXNnaWQgIm11c3Qgc3BlY2lmeSBhIG5vdGVzIHJlZiB0byBtZXJnZSIKK21zZ3N0ciAiU2llIG3DvHNzZW4gZWluZSBOb3Rpei1SZWZlcmVueiB6dW0gTWVyZ2VuIGFuZ2ViZW4uIgorCisjOiBidWlsdGluL25vdGVzLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gLXMvLS1zdHJhdGVneTogJXMiCittc2dzdHIgIlVuYmVrYW5udGVyIFdlcnQgZsO8ciAtcy8tLXN0cmF0ZWd5OiAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJhIG5vdGVzIG1lcmdlIGludG8gJXMgaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBhdCAlcyIKK21zZ3N0ciAiRWluIE1lcmdlIHZvbiBOb3RpemVuIG5hY2ggJXMgaXN0IGJlcmVpdHMgaW0gR2FuZ2UgYmVpICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdG9yZSBsaW5rIHRvIGN1cnJlbnQgbm90ZXMgcmVmICglcykiCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBTcGVpY2hlcm4gZGVyIFZlcmtuw7xwZnVuZyB6dXIgYWt0dWVsbGVuIE5vdGVzLVJlZmVyZW56ICglcykiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF1dG9tYXRpYyBub3RlcyBtZXJnZSBmYWlsZWQuIEZpeCBjb25mbGljdHMgaW4gJXMgYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggIgorIidnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvciBhYm9ydCB0aGUgbWVyZ2Ugd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tIgorImFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIkF1dG9tYXRpc2NoZXMgWnVzYW1tZW5mw7xocmVuIGRlciBOb3RpemVuIGZlaGxnZXNjaGxhZ2VuLiBCZWhlYmVuIFNpZSBkaWVcbiIKKyJLb25mbGlrdGUgaW4gJXMgdW5kIGNvbW1pdHRlbiBTaWUgZGFzIEVyZ2VibmlzIG1pdCAnZ2l0IG5vdGVzIG1lcmdlIC0tIgorImNvbW1pdCcsXG4iCisib2RlciBicmVjaGVuIFNpZSBkZW4gTWVyZ2UgbWl0ICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcgYWIuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4OTcgYnVpbHRpbi90YWcuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGFscyBnw7xsdGlnZSBSZWZlcmVueiBhdWZsw7ZzZW4uIgorCisjOiBidWlsdGluL25vdGVzLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICJPYmpla3QgJXMgaGF0IGtlaW5lIE5vdGl6XG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MTIKK21zZ2lkICJhdHRlbXB0IHRvIHJlbW92ZSBub24tZXhpc3RlbnQgbm90ZSBpcyBub3QgYW4gZXJyb3IiCittc2dzdHIgImRlciBWZXJzdWNoLCBlaW5lIG5pY2h0IGV4aXN0aWVyZW5kZSBOb3RpeiB6dSBsw7ZzY2hlbiwgaXN0IGtlaW4gRmVobGVyIgorCisjOiBidWlsdGluL25vdGVzLmM6OTE1Cittc2dpZCAicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIk9iamVrdG5hbWVuIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSBsZXNlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NCBidWlsdGluL3BydW5lLmM6MTMwIGJ1aWx0aW4vd29ya3RyZWUuYzoxNjQKK21zZ2lkICJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiCittc2dzdHIgIm5pY2h0IGzDtnNjaGVuLCBudXIgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTUKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG5vdGVzIgorbXNnc3RyICJnZWzDtnNjaHRlIE5vdGl6ZW4gbWVsZGVuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTk4Cittc2dpZCAibm90ZXMtcmVmIgorbXNnc3RyICJOb3Rpei1SZWZlcmVueiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OQorbXNnaWQgInVzZSBub3RlcyBmcm9tIDxub3Rlcy1yZWY+IgorbXNnc3RyICJOb3RpemVuIHZvbiA8Tm90aXotUmVmZXJlbno+IHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEwMzQgYnVpbHRpbi9zdGFzaC5jOjE2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiVW5iZWthbm50ZXIgVW50ZXJiZWZlaGw6ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUyCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8T3B0aW9uZW4+Li4uXSBbPCA8UmVmZXJlbnpsaXN0ZT4gfCA8ICIKKyI8T2JqZWt0bGlzdGU+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1MworbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs8b3B0aW9ucz4uLi5dIDxiYXNlLW5hbWU+IFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPE9wdGlvbmVuPi4uLl0gPEJhc2lzLU5hbWU+IFs8IDxSZWZlcmVuemxpc3RlPiB8IDwgIgorIjxPYmpla3RsaXN0ZT5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIgorbXNnc3RyICJVbmfDvGx0aWdlcyBDUkMgZsO8ciBnZXBhY2t0ZXMgT2JqZWt0ICVzLiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYWNrZWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAiRmVobGVyaGFmdGVzIGdlcGFja3RlcyBPYmpla3QgZsO8ciAlcy4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBkZWx0YSBkZXRlY3RlZCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICJSZWt1cnNpdmVyIFVudGVyc2NoaWVkIGbDvHIgT2JqZWt0ICVzIGZlc3RnZXN0ZWxsdC4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9yZGVyZWQgJXUgb2JqZWN0cywgZXhwZWN0ZWQgJTxQUkl1MzI+IgorbXNnc3RyICIldSBPYmpla3RlIGdlb3JkbmV0LCAlPFBSSXUzMj4gZXJ3YXJ0ZXQuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk3MgorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgcGFja3MgYXJlIHNwbGl0IGR1ZSB0byBwYWNrLnBhY2tTaXplTGltaXQiCittc2dzdHIgIiIKKyJEZWFrdGl2aWVyZSBTY2hyZWliZW4gZGVyIEJpdG1hcCwgUGFrZXRlIHd1cmRlbiBkdXJjaCBwYWNrLnBhY2tTaXplTGltaXRcbiIKKyJhdWZnZXRyZW5udC4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTg1Cittc2dpZCAiV3JpdGluZyBvYmplY3RzIgorbXNnc3RyICJTY2hyZWliZSBPYmpla3RlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwNDYgYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlcyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm90ZSAlPFBSSXUzMj4gb2JqZWN0cyB3aGlsZSBleHBlY3RpbmcgJTxQUkl1MzI+IgorbXNnc3RyICJTY2hyaWViICU8UFJJdTMyPiBPYmpla3RlIHfDpGhyZW5kICU8UFJJdTMyPiBlcndhcnRldCB3YXJlbi4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTI5NworbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICIiCisiRGVha3RpdmllcmUgU2NocmVpYmVuIGRlciBCaXRtYXAsIGRhIGVpbmlnZSBPYmpla3RlIG5pY2h0IGluIGVpbmUgUGFjay0iCisiRGF0ZWlcbiIKKyJnZXNjaHJpZWJlbiB3dXJkZW4uIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3ZlcmZsb3cgaW4gcGFjayBmb3IgJXMiCittc2dzdHIgIlwiZGVsdGEgYmFzZSBvZmZzZXRcIiDDnGJlcmxhdWYgaW4gUGFrZXQgZsO8ciAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG91dCBvZiBib3VuZCBmb3IgJXMiCittc2dzdHIgIlwiZGVsdGEgYmFzZSBvZmZzZXRcIiBsaWVndCBhdcOfZXJoYWxiIGRlcyBnw7xsdGlnZW4gQmVyZWljaHMgZsO8ciAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDA0CiBtc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiT2JqZWt0ZSB3ZXJkZW4gZ2V6w6RobHQiCittc2dzdHIgIlrDpGhsZSBPYmpla3RlIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY3OQotbXNnaWQgImJ1Y2tldHMiCi1tc2dzdHIgIkJ1Y2tldHMiCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdCBoZWFkZXIgb2YgJXMiCittc2dzdHIgIktvbm50ZSBLb3BmYmVyZWljaCB2b24gT2JqZWt0ICclcycgbmljaHQgcGFyc2VuLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCi1tc2dzdHIgIktvcGllbiB2b24gT2JqZWt0ZW4vSW5mby9BbHRlcm5hdGVzIGtvbm50ZW4gbmljaHQgZXJzdGVsbHQgd2VyZGVuOiAlcyIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjIxOSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyMzUKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgIk9iamVrdCAlcyBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgotbXNnc3RyICJWb24gwrslc8KrIGtvbm50ZSBuaWNodHMgZ2VrbG9udCB3ZXJkZW4uIgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjIyIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGggKCU8UFJJdU1BWD4gdnMgJTxQUkl1TUFYPikiCittc2dzdHIgIklua29uc2lzdGVudGUgT2JqZWt0bMOkbmdlIGJlaSBPYmpla3QgJXMgKCU8UFJJdU1BWD4gdnMgJTxQUkl1TUFYPikiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTYyCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk3NAotbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKLW1zZ3N0ciAiRGVyIMK7bWFzdGVywqstQnJhbmNoIHd1cmRlIG5vY2ggbmljaHQgaW5pdGlhbGlzaWVydC4iCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyNTkKK21zZ2lkICJzdWJvcHRpbWFsIHBhY2sgLSBvdXQgb2YgbWVtb3J5IgorbXNnc3RyICJ1bmfDvG5zdGlnZXMgUGFja2V0IC0gU3BlaWNoZXIgdm9sbCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTUKLW1zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgotbXNnc3RyICJIYXJkbGlua3MgbmljaHQgdmVyZsO8Z2Jhci4gU3RhdHRkZXNzZW4gd2lyZCBrb3BpZXJ0LiIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU3NAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWx0YSBjb21wcmVzc2lvbiB1c2luZyB1cCB0byAlZCB0aHJlYWRzIgorbXNnc3RyICJEZWx0YS1Lb21wcmVzc2lvbiB2ZXJ3ZW5kZXQgYmlzIHp1ICVkIFRocmVhZHMuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKLW1zZ3N0ciAiS29waWVyZW4gdm9uIMK7JXPCqyIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcxMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFjayBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRhZyAlcyIKK21zZ3N0ciAiS29ubnRlIGtlaW5lIE9iamVrdGUgcGFja2VuLCBkaWUgdm9uIFRhZyAlcyBlcnJlaWNoYmFyIHNpbmQuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgwMAotbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiT2JqZWt0ZGF0ZW5iYW5rIGtvcGllcmVuIgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODAxCittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiS29tcHJpbWllcmUgT2JqZWt0ZSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDEKLW1zZ2lkICJLaUIiCi1tc2dzdHIgIktCIgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODA3Cittc2dpZCAiaW5jb25zaXN0ZW5jeSB3aXRoIGRlbHRhIGNvdW50IgorbXNnc3RyICJJbmtvbnNpc3RlbnogbWl0IGRlciBBbnphaGwgdm9uIERlbHRhcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgotbXNnc3RyICJPYmpla3Qga2FubiBuaWNodCBrb3BpZXJ0IHdlcmRlbjogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODM3Ci1tc2dpZCAiTGlua2luZyBvYmplY3RzIgotbXNnc3RyICJPYmpla3RlIHZlcmxpbmtlbiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MzgKLW1zZ2lkICJvYmplY3RzIgotbXNnc3RyICJPYmpla3RlIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg0NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgotbXNnc3RyICJGw7xyIE9iamVrdCBrb25udGUga2VpbiBIYXJkbGluayBlcnN0ZWxsdCB3ZXJkZW46ICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMwotbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIiIKLSJCcmFuY2hlcyB1bmQgT2JqZWt0ZSBrb25udGVuIG5pY2h0IGFuZ2Vmb3JkZXJ0IHdlcmRlbi4gIEtvbnRyb2xsaWVyZW4gU2llICIKLSJkaWUgQXVzZ2FiZW4gYXVmIGRlciBLb25zb2xlIGbDvHIgd2VpdGVyZSBBbmdhYmVuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTQKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIiIKLSJUYWdzIGtvbm50ZW4gbmljaHQgYW5nZWZvcmRlcnQgd2VyZGVuLiAgS29udHJvbGxpZXJlbiBTaWUgZGllIEF1c2dhYmVuIGF1ZiAiCi0iZGVyIEtvbnNvbGUgZsO8ciB3ZWl0ZXJlIEFuZ2FiZW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOAotbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIiIKLSJEaWUgQnJhbmNoc3BpdHplIChIRUFEKSBrb25udGUgbmljaHQgZ2VmdW5kZW4gd2VyZGVuLiAgS29udHJvbGxpZXJlbiBTaWUgZGllICIKLSJBdXNnYWJlbiBhdWYgZGVyIEtvbnNvbGUgZsO8ciB3ZWl0ZXJlIEFuZ2FiZW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk0NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgotbXNnc3RyICJWZXJ6ZWljaG5pcyDCuyVzwqsga2FubiBuaWNodCBhdWZnZXLDpHVtdCB3ZXJkZW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk1MwotbXNnaWQgIkNsb25lIGZhaWxlZC4iCi1tc2dzdHIgIktsb25lbiBmZWhsZ2VzY2hsYWdlbi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTYwCi1tc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgotbXNnc3RyICJLZWluIHZvcmVpbmdlc3RlbGx0ZXIgQnJhbmNoIGdlZnVuZGVuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NzEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCi1tc2dzdHIgIsK7JXPCqyB3dXJkZSBuaWNodCBhbHMgQ29tbWl0IGdlZnVuZGVuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5OTgKLW1zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAiQXJiZWl0c2tvcGllIGVyc3RlbGxlbiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI4Ci1tc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCi1tc2dzdHIgIkVyc3RlbGxlbiBkZXIgQXJiZWl0c2tvcGllIGZlaGxnZXNjaGxhZ2VuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDcyCi1tc2dpZCAiQ2xvbmluZyBzdWJtb2R1bGVzIgotbXNnc3RyICJLbG9uZSBTdWJtb2R1bCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDg3Ci1tc2dpZCAiQ2Fubm90IGNsb25lIHN1Ym1vZHVsZXMuIgotbXNnc3RyICJTdWJtb2R1bCBrb25udGUgbmljaHQgZ2VrbG9udCB3ZXJkZW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMTAKLW1zZ2lkICJSZXBvc2l0b3J5OiIKLW1zZ3N0ciAiUmVwb3NpdG9yeToiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE1OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgotbXNnc3RyICJSZXBvc2l0b3J5IMK7JXPCqyBrb25udGUgbmljaHQgZ2XDtmZmbmV0IHdlcmRlbi4iCi0KLSM6IGxpYi9hYm91dC50Y2w6MjYKLW1zZ2lkICJnaXQtZ3VpIC0gYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIEdpdC4iCi1tc2dzdHIgImdpdC1ndWkgLSBlaW5lIGdyYWZpc2NoZSBPYmVyZmzDpGNoZSBmw7xyIEdpdC4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6NzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBGaWxlIFZpZXdlciIKLW1zZ3N0ciAiJXMgKCVzKTogRGF0ZWktQnJvd3NlciIKLQotIzogbGliL2JsYW1lLnRjbDo4MAotbXNnaWQgIkNvbW1pdDoiCi1tc2dzdHIgIkNvbW1pdDoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MjgyCi1tc2dpZCAiQ29weSBDb21taXQiCi1tc2dzdHIgIkNvbW1pdCBrb3BpZXJlbiIKLQotIzogbGliL2JsYW1lLnRjbDoyODYKLW1zZ2lkICJGaW5kIFRleHQuLi4iCi1tc2dzdHIgIlRleHQgc3VjaGVuLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjI5MAotbXNnaWQgIkdvdG8gTGluZS4uLiIKLW1zZ3N0ciAiR2VoZSB6dSBaZWlsZS4uLiIKLQotIzogbGliL2JsYW1lLnRjbDoyOTkKLW1zZ2lkICJEbyBGdWxsIENvcHkgRGV0ZWN0aW9uIgotbXNnc3RyICJWb2xsZSBLb3BpZS1Fcmtlbm51bmciCi0KLSM6IGxpYi9ibGFtZS50Y2w6MzAzCi1tc2dpZCAiU2hvdyBIaXN0b3J5IENvbnRleHQiCi1tc2dzdHIgIkhpc3Rvcmllbi1Lb250ZXh0IGFuemVpZ2VuIgotCi0jOiBsaWIvYmxhbWUudGNsOjMwNgotbXNnaWQgIkJsYW1lIFBhcmVudCBDb21taXQiCi1tc2dzdHIgIkVsdGVybmNvbW1pdCBhbm5vdGllcmVuIgotCi0jOiBsaWIvYmxhbWUudGNsOjQ2OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlYWRpbmcgJXMuLi4iCi1tc2dzdHIgIiVzIGxlc2VuLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjU5NgotbXNnaWQgIkxvYWRpbmcgY29weS9tb3ZlIHRyYWNraW5nIGFubm90YXRpb25zLi4uIgotbXNnc3RyICJBbm5vdGllcnVuZ2VuIGbDvHIgS29waWVyZW4vVmVyc2NoaWViZW4gd2VyZGVuIGdlbGFkZW4uLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6NjEzCi1tc2dpZCAibGluZXMgYW5ub3RhdGVkIgotbXNnc3RyICJaZWlsZW4gYW5ub3RpZXJ0IgotCi0jOiBsaWIvYmxhbWUudGNsOjgxNQotbXNnaWQgIkxvYWRpbmcgb3JpZ2luYWwgbG9jYXRpb24gYW5ub3RhdGlvbnMuLi4iCi1tc2dzdHIgIkFubm90aWVydW5nZW4gZsO8ciB1cnNwcsO8bmdsaWNoZW4gT3J0IHdlcmRlbiBnZWxhZGVuLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjgxOAotbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgotbXNnc3RyICJBbm5vdGllcnVuZyB2b2xsc3TDpG5kaWcuIgotCi0jOiBsaWIvYmxhbWUudGNsOjg0OQotbXNnaWQgIkJ1c3kiCi1tc2dzdHIgIlZlcmFyYmVpdHVuZyBsw6R1ZnQiCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODUwCi1tc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCi1tc2dzdHIgIkFubm90aWVydW5nIGzDpHVmdCBiZXJlaXRzLiIKLQotIzogbGliL2JsYW1lLnRjbDo4ODkKLW1zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgotbXNnc3RyICJJbnRlbnNpdmUgS29waWUtRXJrZW5udW5nIGzDpHVmdC4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo5NTcKLW1zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCi1tc2dzdHIgIkFubm90aWVydW5nIGxhZGVuLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjEwMTAKLW1zZ2lkICJBdXRob3I6IgotbXNnc3RyICJBdXRvcjoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTAxNAotbXNnaWQgIkNvbW1pdHRlcjoiCi1tc2dzdHIgIkNvbW1pdHRlcjoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTAxOQotbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgotbXNnc3RyICJVcnNwcsO8bmdsaWNoZSBEYXRlaToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTA2NwotbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKLW1zZ3N0ciAiQnJhbmNoc3BpdHplICjCu0hFQUQgY29tbWl0wqspIGthbm4gbmljaHQgZ2VmdW5kZW4gd2VyZGVuOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMTIyCi1tc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCi1tc2dzdHIgIkVsdGVybmNvbW1pdCBrYW5uIG5pY2h0IGdlZnVuZGVuIHdlcmRlbjoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTEzNwotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKLW1zZ3N0ciAiRWx0ZXJuY29tbWl0IGthbm4gbmljaHQgYW5nZXplaWd0IHdlcmRlbiIKLQotIzogbGliL2JsYW1lLnRjbDoxMTM4IGxpYi9kaWZmLnRjbDozNDUKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXMgVmVyZ2xlaWNoczoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTI3OQotbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgotbXNnc3RyICJVcnNwcsO8bmdsaWNoIHZvbjoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTI4NQotbXNnaWQgIkluIEZpbGU6IgotbXNnc3RyICJJbiBEYXRlaToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTI5MAotbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKLW1zZ3N0ciAiS29waWVydCBvZGVyIHZlcnNjaG9iZW4gZHVyY2g6IgotCi0jOiBsaWIvZGlmZi50Y2w6NzcKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg4OAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCi0iXG4iCi0iJXMgaGFzIG5vIGNoYW5nZXMuXG4iCi0iXG4iCi0iVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgIgotInRoZSBjb250ZW50IHdpdGhpbiB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQuXG4iCi0iXG4iCi0iQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gZmluZCBvdGhlciBmaWxlcyB3aGljaCBtYXkgaGF2ZSAiCi0idGhlIHNhbWUgc3RhdGUuIgorImV4cGVjdGVkIGVkZ2Ugb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCiBtc2dzdHIgIiIKLSJLZWluZSDDhG5kZXJ1bmdlbiBmZXN0c3RlbGxiYXIuXG4iCi0iXG4iCi0iwrslc8KrIGVudGjDpGx0IGtlaW5lIMOEbmRlcnVuZ2VuLiBad2FyIHd1cmRlIGRhcyDDhG5kZXJ1bmdzZGF0dW0gZGllc2VyIERhdGVpICIKLSJ2b24gZWluZW0gYW5kZXJlbiBQcm9ncmFtbSBtb2RpZml6aWVydCwgYWJlciBkZXIgSW5oYWx0IGRlciBEYXRlaSBpc3QgIgotInVudmVyw6RuZGVydC5cbiIKLSJcbiIKLSJEYXMgQXJiZWl0c3ZlcnplaWNobmlzIHdpcmQgamV0enQgbmV1IGdlbGFkZW4sIHVtIGRpZXNlIMOEbmRlcnVuZyBiZWkgYWxsZW4gIgotIkRhdGVpZW4genUgcHLDvGZlbi4iCisiRXJ3YXJ0ZXRlIFJhbmRvYmpla3QtSUQsIGVyaGllbHQgbnV0emxvc2UgRGF0ZW46XG4iCisiICVzIgogCi0jOiBsaWIvZGlmZi50Y2w6MTE3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgotbXNnc3RyICJWZXJnbGVpY2ggdm9uIMK7JXPCqyBsYWRlbi4uLiIKLQotIzogbGliL2RpZmYudGNsOjE0MworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODk0CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJMT0NBTDogZGVsZXRlZFxuIgotIlJFTU9URTpcbiIKKyJleHBlY3RlZCBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKIG1zZ3N0ciAiIgotIkxPS0FMOiBnZWzDtnNjaHRcbiIKLSJFWFRFUk46XG4iCisiRXJ3YXJ0ZXRlIE9iamVrdC1JRCwgZXJoaWVsdCBudXR6bG9zZSBEYXRlbjpcbiIKKyIgJXMiCiAKLSM6IGxpYi9kaWZmLnRjbDoxNDgKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjk5MgorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIC0tbWlzc2luZyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgV2VydCBmw7xyIC0tbWlzc2luZy4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA1MSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTkKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4IgorbXNnc3RyICJLYW5uIFBha2V0aW5kZXggbmljaHQgw7ZmZm5lbi4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA4MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgYXQgJXMgY291bGQgbm90IGJlIGV4YW1pbmVkIgorbXNnc3RyICJMb3NlcyBPYmpla3QgYmVpICVzIGtvbm50ZSBuaWNodCB1bnRlcnN1Y2h0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE2NworbXNnaWQgInVuYWJsZSB0byBmb3JjZSBsb29zZSBvYmplY3QiCittc2dzdHIgIktvbm50ZSBsb3NlcyBPYmpla3QgbmljaHQgZXJ6d2luZ2VuLiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJldiAnJXMnIgorbXNnc3RyICInJXMnIGlzdCBrZWluIENvbW1pdC4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgQ29tbWl0ICclcycuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODgKK21zZ2lkICJ1bmFibGUgdG8gYWRkIHJlY2VudCBvYmplY3RzIgorbXNnc3RyICJLb25udGUgasO8bmdzdGUgT2JqZWt0ZSBuaWNodCBoaW56dWbDvGdlbi4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIgorbXNnc3RyICJOaWNodCB1bnRlcnN0w7x0enRlIEluZGV4LVZlcnNpb24gJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlIEluZGV4LVZlcnNpb24gJyVzJyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzgzCittc2dpZCAiPHZlcnNpb24+Wyw8b2Zmc2V0Pl0iCittc2dzdHIgIjxWZXJzaW9uPlssPE9mZnNldD5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODQKK21zZ2lkICJ3cml0ZSB0aGUgcGFjayBpbmRleCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgaWR4IGZvcm1hdCB2ZXJzaW9uIgorbXNnc3RyICIiCisiZGllIEluZGV4LURhdGVpIGRlcyBQYWtldGVzIGluIGRlciBhbmdlZ2ViZW5lbiBJbmRleGZvcm1hdC1WZXJzaW9uIHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg3Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAibWF4aW1hbGUgR3LDtsOfZSBmw7xyIGplZGUgYXVzZ2VnZWJlbmUgUGFrZXRkYXRlaSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg5Cittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICJnZWxpZWhlbmUgT2JqZWt0ZSB2b24gYWx0ZXJuYXRpdmVtIE9iamVrdHNwZWljaGVyIGlnbm9yaWVyZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5MQorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiZ2VwYWNrdGUgT2JqZWt0ZSBpZ25vcmllcmVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTMKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBvYmplY3RzIgorbXNnc3RyICJQYWtldGZlbnN0ZXIgZHVyY2ggT2JqZWt0ZSBiZWdyZW56ZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5NQorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgIiIKKyJQYWtldGZlbnN0ZXIsIHp1c8OkdHpsaWNoIHp1ciBPYmpla3RiZWdyZW56dW5nLCBkdXJjaCBTcGVpY2hlciBiZWdyZW56ZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5NworbXNnaWQgIm1heGltdW0gbGVuZ3RoIG9mIGRlbHRhIGNoYWluIGFsbG93ZWQgaW4gdGhlIHJlc3VsdGluZyBwYWNrIgorbXNnc3RyICIiCisibWF4aW1hbGUgTMOkbmdlIGRlciBlcmxhdWJ0ZW4gRGlmZmVyZW56dmVya2V0dHVuZyBpbSByZXN1bHRpZXJlbmRlbiBQYWtldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk5Cittc2dpZCAicmV1c2UgZXhpc3RpbmcgZGVsdGFzIgorbXNnc3RyICJleGlzdGllcmVuZGUgVW50ZXJzY2hpZWRlIHdpZWRlcnZlcndlbmRlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDAxCittc2dpZCAicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIKK21zZ3N0ciAiZXhpc3RpZXJlbmRlIE9iamVrdGUgd2llZGVydmVyd2VuZGVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDMKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgIk9GU19ERUxUQSBPYmpla3RlIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA1Cittc2dpZCAidXNlIHRocmVhZHMgd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QgZGVsdGEgbWF0Y2hlcyIKK21zZ3N0ciAiIgorIlRocmVhZHMgYmVpIGRlciBTdWNoZSBuYWNoIGRlbiBiZXN0ZW4gw5xiZXJlaW5zdGltbXVuZ2VuIGJlaSBVbnRlcnNjaGllZGVuICIKKyJ2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNworbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgImtlaW5lIGxlZXJlbiBQYWtldGUgZXJ6ZXVnZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwOQorbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIkFyZ3VtZW50ZSBiZXrDvGdsaWNoIENvbW1pdHMgdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTEKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAiZGllIE9iamVrdGUgenUgc29sY2hlbiwgZGllIG5vY2ggbmljaHQgZ2VwYWNrdCB3dXJkZW4sIGJlZ3JlbnplbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDE0Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgIk9iamVrdGUgZWluc2NobGllw59lbiwgZGllIHZvbiBqZWRlciBSZWZlcmVueiBlcnJlaWNoYmFyIHNpbmQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQxNworbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCBieSByZWZsb2cgZW50cmllcyIKK21zZ3N0ciAiIgorIk9iamVrdGUgZWluc2NobGllw59lbiwgZGllIHZvbiBFaW50csOkZ2VuIGRlcyBSZWZsb2dzIHJlZmVyZW56aWVydCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgIk9iamVrdGUgZWluc2NobGllw59lbiwgZGllIHZvbSBJbmRleCByZWZlcmVuemllcnQgd2VyZGVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjMKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgIlBha2V0IGluIGRpZSBTdGFuZGFyZC1BdXNnYWJlIHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI1Cittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICJUYWctT2JqZWt0ZSBlaW5zY2hsaWXDn2VuLCBkaWUgYXVmIGdlcGFja3RlIE9iamVrdGUgcmVmZXJlbnppZXJlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI3Cittc2dpZCAia2VlcCB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJuaWNodCBlcnJlaWNoYmFyZSBPYmpla3RlIGJlaGFsdGVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjkKK21zZ2lkICJwYWNrIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIm5pY2h0IGVycmVpY2hiYXJlIGxvc2UgT2JqZWt0ZSBwYWNrZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzMQorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICJuaWNodCBlcnJlaWNoYmFyZSBPYmpla3RlIGVudHBhY2tlbiwgZGllIG5ldWVyIGFscyA8WmVpdD4gc2luZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDM0Cittc2dpZCAidXNlIHRoZSBzcGFyc2UgcmVhY2hhYmlsaXR5IGFsZ29yaXRobSIKK21zZ3N0ciAiZGVuIFwic3BhcnNlXCIgQWxnb3JpdGhtdXMgenVyIEJlc3RpbW11bmcgZGVyIEVycmVpY2hiYXJrZWl0IGJlbnV0emVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzYKK21zZ2lkICJjcmVhdGUgdGhpbiBwYWNrcyIKK21zZ3N0ciAiZMO8bm5lcmUgUGFrZXRlIGVyemV1Z2VuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzgKK21zZ2lkICJjcmVhdGUgcGFja3Mgc3VpdGFibGUgZm9yIHNoYWxsb3cgZmV0Y2hlcyIKK21zZ3N0ciAiIgorIlBha2V0ZSBnZWVpZ25ldCBmw7xyIEFiaG9sdW5nIG1pdCB1bnZvbGxzdMOkbmRpZ2VyIEhpc3RvcmllIChzaGFsbG93KSBlcnpldWdlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQwCittc2dpZCAiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIKK21zZ3N0ciAiUGFrZXRlIGlnbm9yaWVyZW4sIGRpZSAua2VlcCBEYXRlaWVuIGhhYmVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDIKK21zZ2lkICJpZ25vcmUgdGhpcyBwYWNrIgorbXNnc3RyICJkaWVzZXMgUGFrZXQgaWdub3JpZXJlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQ0Cittc2dpZCAicGFjayBjb21wcmVzc2lvbiBsZXZlbCIKK21zZ3N0ciAiS29tcHJpbWllcnVuZ3NncmFkIGbDvHIgUGFrZXRpZXJ1bmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0NgorbXNnaWQgImRvIG5vdCBoaWRlIGNvbW1pdHMgYnkgZ3JhZnRzIgorbXNnc3RyICJrZWluZSBrw7xuc3RsaWNoZW4gVm9yZ8Okbmdlci1Db21taXRzIChcImdyYWZ0c1wiKSB2ZXJiZXJnZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0OAorbXNnaWQgInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorIkJpdG1hcC1JbmRleCAoZmFsbHMgdmVyZsO8Z2JhcikgenVyIE9wdGltaWVydW5nIGRlciBPYmpla3R6w6RobHVuZyBiZW51dHplbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDUwCittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggdG9nZXRoZXIgd2l0aCB0aGUgcGFjayBpbmRleCIKK21zZ3N0ciAiQml0bWFwLUluZGV4IHp1c2FtbWVuIG1pdCBQYWNrLUluZGV4IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDU0Cittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggaWYgcG9zc2libGUiCittc2dzdHIgIkJpdG1hcC1JbmRleCBzY2hyZWliZW4sIHdlbm4gbcO2Z2xpY2giCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1OAorbXNnaWQgImhhbmRsaW5nIGZvciBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgIkJlaGFuZGx1bmcgZsO8ciBmZWhsZW5kZSBPYmpla3RlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NjEKK21zZ2lkICJkbyBub3QgcGFjayBvYmplY3RzIGluIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAiIgorImtlaW5lIE9iamVrdGUgYXVzIFBhY2tkYXRlaWVuIHZvbiBwYXJ0aWVsbCBnZWtsb250ZW4gUmVtb3RlLVJlcG9zaXRvcmllcyAiCisicGFja2VuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NjMKK21zZ2lkICJyZXNwZWN0IGlzbGFuZHMgZHVyaW5nIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICJEZWx0YS1Jc2xhbmRzIGJlaSBEZWx0YS1Lb21wcmVzc2lvbiBiZWFjaHRlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGNoYWluIGRlcHRoICVkIGlzIHRvbyBkZWVwLCBmb3JjaW5nICVkIgorbXNnc3RyICJUaWVmZSBmw7xyIFZlcmtldHR1bmcgdm9uIFVudGVyc2NoaWVkZW4gJWQgaXN0IHp1IHRpZWYsIGVyendpbmdlICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjay5kZWx0YUNhY2hlTGltaXQgaXMgdG9vIGhpZ2gsIGZvcmNpbmcgJWQiCittc2dzdHIgInBhY2suZGVsdGFDYWNoZUxpbWl0IGlzdCB6dSBob2NoLCBlcnp3aW5nZSAlZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTUxCittc2dpZCAiLS1tYXgtcGFjay1zaXplIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGEgcGFjayBmb3IgdHJhbnNmZXIiCittc2dzdHIgIiIKKyItLW1heC1wYWNrLXNpemUga2FubiBuaWNodCBmw7xyIGRpZSBFcnN0ZWxsdW5nIGVpbmVzIFBha2V0cyBmw7xyIGVpbmUgIgorIsOcYmVydHJhZ3VuZ1xuIgorImJlbnV0enQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTUzCittc2dpZCAibWluaW11bSBwYWNrIHNpemUgbGltaXQgaXMgMSBNaUIiCittc2dzdHIgIk1pbmltYWxlcyBMaW1pdCBmw7xyIGRpZSBQYWtldGdyw7bDn2UgaXN0IDEgTWlCLiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTU4Cittc2dpZCAiLS10aGluIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGFuIGluZGV4YWJsZSBwYWNrIgorbXNnc3RyICIiCisiLS10aGluIGthbm4gbmljaHQgYmVudXR6dCB3ZXJkZW4sIHVtIGVpbiBpbmRpemllcmJhcmVzIFBha2V0IHp1IGVyc3RlbGxlbi4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU2MQorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLS11bnBhY2stdW5yZWFjaGFibGUgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1rZWVwLXVucmVhY2hhYmxlIHVuZCAtLXVucGFjay11bnJlYWNoYWJsZSBzaW5kIGlua29tcGF0aWJlbCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTY3Cittc2dpZCAiY2Fubm90IHVzZSAtLWZpbHRlciB3aXRob3V0IC0tc3Rkb3V0IgorbXNnc3RyICJLYW5uIC0tZmlsdGVyIG5pY2h0IG9obmUgLS1zdGRvdXQgYmVudXR6ZW4uIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM2MjcKK21zZ2lkICJFbnVtZXJhdGluZyBvYmplY3RzIgorbXNnc3RyICJPYmpla3RlIGF1ZnrDpGhsZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzY1NworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iUkVNT1RFOiBkZWxldGVkXG4iCi0iTE9DQUw6XG4iCisiVG90YWwgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pLCByZXVzZWQgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pLCBwYWNrLSIKKyJyZXVzZWQgJTxQUkl1MzI+IgogbXNnc3RyICIiCi0iRVhURVJOOiBnZWzDtnNjaHRcbiIKLSJMT0tBTDpcbiIKKyJHZXNhbXQgJTxQUkl1MzI+IChEZWx0YSAlPFBSSXUzMj4pLCBXaWVkZXJ2ZXJ3ZW5kZXQgJTxQUkl1MzI+IChEZWx0YSAiCisiJTxQUkl1MzI+KSwgUGFjayB3aWVkZXJ2ZXJ3ZW5kZXQgJTxQUkl1MzI+IgogCi0jOiBsaWIvZGlmZi50Y2w6MTU1Ci1tc2dpZCAiTE9DQUw6XG4iCi1tc2dzdHIgIkxPS0FMOlxuIgorIzogYnVpbHRpbi9wYWNrLXJlZnMuYzo4Cittc2dpZCAiZ2l0IHBhY2stcmVmcyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHBhY2stcmVmcyBbPE9wdGlvbmVuPl0iCiAKLSM6IGxpYi9kaWZmLnRjbDoxNTgKLW1zZ2lkICJSRU1PVEU6XG4iCi1tc2dzdHIgIkVYVEVSTjpcbiIKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTYKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmciCittc2dzdHIgImFsbGVzIHBhY2tlbiIKIAotIzogbGliL2RpZmYudGNsOjIyMCBsaWIvZGlmZi50Y2w6MzQ0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCi1tc2dzdHIgIkRhdGVpIMK7JXPCqyBrYW5uIG5pY2h0IGFuZ2V6ZWlndCB3ZXJkZW4iCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE3Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgImxvc2UgUmVmZXJlbnplbiBlbnRmZXJuZW4gKFN0YW5kYXJkKSIKIAotIzogbGliL2RpZmYudGNsOjIyMQotbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCi1tc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlciBEYXRlaToiCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjkKK21zZ2lkICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCittc2dzdHIgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKIAotIzogbGliL2RpZmYudGNsOjIyNwotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKLW1zZ3N0ciAiR2l0LVJlcG9zaXRvcnkgKFN1YnByb2pla3QpIgorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo0MgorbXNnaWQgIlJlbW92aW5nIGR1cGxpY2F0ZSBvYmplY3RzIgorbXNnc3RyICJMw7ZzY2hlIGRvcHBlbHRlIE9iamVrdGUiCiAKLSM6IGxpYi9kaWZmLnRjbDoyMzkKLW1zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCi1tc2dzdHIgIiogQmluw6RyZGF0ZWkgKEluaGFsdCB3aXJkIG5pY2h0IGFuZ2V6ZWlndCkiCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPFplaXQ+XSBbLS1dIFs8QnJhbmNoPi4uLl0iCiAKLSM6IGxpYi9kaWZmLnRjbDoyNDQKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzEKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgImdlbMO2c2NodGUgT2JqZWt0ZSBtZWxkZW4iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiT2JqZWt0ZSDDpGx0ZXIgYWxzIDxaZWl0PiB2ZXJmYWxsZW4gbGFzc2VuIgorCisjOiBidWlsdGluL3BydW5lLmM6MTM2Cittc2dpZCAibGltaXQgdHJhdmVyc2FsIHRvIG9iamVjdHMgb3V0c2lkZSBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgIiIKKyJUcmF2ZXJzaWVydW5nIGF1ZiBPYmpla3RlIGF1w59lcmhhbGIgdm9uIFBhY2tkYXRlaWVuIGF1cyBwYXJ0aWVsbCBnZWtsb250ZW4gIgorIlJlbW90ZS1SZXBvc2l0b3JpZXMgZWluc2NocsOkbmtlbiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjE1MAorbXNnaWQgImNhbm5vdCBwcnVuZSBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAia2FubiBcInBydW5lXCIgaW4gcHJlY2lvdXMtb2JqZWN0cyBSZXBvc2l0b3J5IG5pY2h0IGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1IGJ1aWx0aW4vcHVsbC5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgV2VydCBmw7xyICVzOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NjcKK21zZ2lkICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1bGwgWzxPcHRpb25lbj5dIFs8UmVwb3NpdG9yeT4gWzxSZWZzcGVjPi4uLl1dIgorCisjOiBidWlsdGluL3B1bGwuYzoxMjIKK21zZ2lkICJjb250cm9sIGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAicmVrdXJzaXZlIEFuZm9yZGVydW5nZW4gdm9uIFN1Ym1vZHVsZW4ga29udHJvbGxpZXJlbiIKKworIzogYnVpbHRpbi9wdWxsLmM6MTI2Cittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgIk9wdGlvbmVuIGJlem9nZW4gYXVmIE1lcmdlIgorCisjOiBidWlsdGluL3B1bGwuYzoxMjkKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgIkludGVncmF0aW9uIHZvbiDDhG5kZXJ1bmdlbiBkdXJjaCBSZWJhc2Ugc3RhdHQgTWVyZ2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE1NyBidWlsdGluL3JlYmFzZS5jOjQ3MSBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiVm9yc3B1bGVuIGVybGF1YmVuIgorCisjOiBidWlsdGluL3B1bGwuYzoxNjYKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIHJlYmFzZSIKK21zZ3N0ciAiYXV0b21hdGlzY2hlciBTdGFzaC9TdGFzaC1Qb3Agdm9yIHVuZCBuYWNoIGVpbmVzIFJlYmFzZSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTgyCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nIgorbXNnc3RyICJPcHRpb25lbiBiZXpvZ2VuIGF1ZiBGZXRjaCIKKworIzogYnVpbHRpbi9wdWxsLmM6MTkyCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiZGFzIMOcYmVyc2NocmVpYmVuIHZvbiBsb2thbGVuIEJyYW5jaGVzIGVyendpbmdlbiIKKworIzogYnVpbHRpbi9wdWxsLmM6MjAwCittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgcHVsbGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICJBbnphaGwgZGVyIHBhcmFsbGVsIG1pdCAncHVsbCcgenUgdmVyYXJiZWl0ZW5kZW4gU3VibW9kdWxlIgorCisjOiBidWlsdGluL3B1bGwuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgcHVsbC5mZjogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFdlcnQgZsO8ciBwdWxsLmZmOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI2CiBtc2dpZCAiIgotIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCi0iKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCisiVGhlcmUgaXMgbm8gY2FuZGlkYXRlIGZvciByZWJhc2luZyBhZ2FpbnN0IGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgIgorImZldGNoZWQuIgogbXNnc3RyICIiCi0iKiBVbnZlcnNpb25pZXJ0ZSBEYXRlaSBoYXQgJWQgQnl0ZXMuXG4iCi0iKiBOdXIgZXJzdGUgJWQgQnl0ZXMgd2VyZGVuIGFuZ2V6ZWlndC5cbiIKKyJFcyBnaWJ0IGtlaW5lbiBLYW5kaWRhdGVuIGbDvHIgUmViYXNlIGlubmVyaGFsYiBkZXIgUmVmZXJlbnplbiwgZGllIGViZW4gIgorImFuZ2Vmb3JkZXJ0IHd1cmRlbi4iCiAKLSM6IGxpYi9kaWZmLnRjbDoyNTAKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyOAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorbXNnc3RyICIiCisiRXMgZ2lidCBrZWluZSBLYW5kaWRhdGVuIGbDvHIgTWVyZ2UgaW5uZXJoYWxiIGRlciBSZWZlcmVuemVuLCBkaWUgZWJlbiAiCisiYW5nZWZvcmRlcnQgd3VyZGVuLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI5Cittc2dpZCAiIgorIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKyJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKK21zZ3N0ciAiIgorIkltIEFsbGdlbWVpbmVuIGJlZGV1dGV0IGRhcywgZGFzcyBTaWUgZWluZW4gUmVmc3BlYyBtaXQgV2lsZGNhcmRzIGFuZ2VnZWJlblxuIgorImhhYmVuLCBkZXIgYXVmIGRlciBHZWdlbnNlaXRlIG1pdCBrZWluZW4gUmVmZXJlbnplbiDDvGJlcmVpbnN0aW1tdC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKyJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICIiCisiU2llIGbDvGhydGVuIFwicHVsbFwiIHZvbiBSZW1vdGUtUmVwb3NpdG9yeSAnJXMnIGF1cywgb2huZSBlaW5lblxuIgorIkJyYW5jaCBhbnp1Z2ViZW4uIERhIGRhcyBuaWNodCBkYXMga29uZmlndXJpZXJ0ZSBTdGFuZGFyZC1SZW1vdGUtXG4iCisiUmVwb3NpdG9yeSBmw7xyIGRlbiBha3R1ZWxsZW4gQnJhbmNoIGlzdCwgbcO8c3NlbiBTaWUgZWluZW4gQnJhbmNoIGF1ZlxuIgorImRlciBCZWZlaGxzemVpbGUgYW5nZWJlbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNyBidWlsdGluL3JlYmFzZS5jOjE0MDkgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3MworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgIkltIE1vbWVudCBhdWYga2VpbmVtIEJyYW5jaC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOSBidWlsdGluL3B1bGwuYzo0NTQgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIiIKKyJCaXR0ZSBnZWJlbiBTaWUgZGVuIEJyYW5jaCBhbiwgZ2VnZW4gd2VsY2hlbiBTaWUgXCJyZWJhc2VcIiBhdXNmw7xocmVuICIKKyJtw7ZjaHRlbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MSBidWlsdGluL3B1bGwuYzo0NTYgZ2l0LXBhcnNlLXJlbW90ZS5zaDo4MgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKK21zZ3N0ciAiQml0dGUgZ2ViZW4gU2llIGRlbiBCcmFuY2ggYW4sIHdlbGNoZW4gU2llIHp1c2FtbWVuZsO8aHJlbiBtw7ZjaHRlbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MiBidWlsdGluL3B1bGwuYzo0NTcKK21zZ2lkICJTZWUgZ2l0LXB1bGwoMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICJTaWVoZSBnaXQtcHVsbCgxKSBmw7xyIHdlaXRlcmUgRGV0YWlscy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NCBidWlsdGluL3B1bGwuYzo0NTAgYnVpbHRpbi9wdWxsLmM6NDU5CisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NAorbXNnaWQgIjxyZW1vdGU+IgorbXNnc3RyICI8UmVtb3RlLVJlcG9zaXRvcnk+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NDQgYnVpbHRpbi9wdWxsLmM6NDU5IGJ1aWx0aW4vcHVsbC5jOjQ2NAorIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NQorbXNnaWQgIjxicmFuY2g+IgorbXNnc3RyICI8QnJhbmNoPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcmViYXNlLmM6MTQwNyBnaXQtcGFyc2UtcmVtb3RlLnNoOjc1Cittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIkVzIGdpYnQga2VpbmUgVHJhY2tpbmctSW5mb3JtYXRpb25lbiBmw7xyIGRlbiBha3R1ZWxsZW4gQnJhbmNoLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDYxIGdpdC1wYXJzZS1yZW1vdGUuc2g6OTUKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6IgorbXNnc3RyICIiCisiV2VubiBTaWUgVHJhY2tpbmctSW5mb3JtYXRpb25lbiBmw7xyIGRpZXNlbiBCcmFuY2ggc2V0emVuIG3DtmNodGVuLCBrw7ZubmVuICIKKyJTaWVcbiIKKyJkaWVzIHR1biBtaXQ6IgorCisjOiBidWlsdGluL3B1bGwuYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdG8gbWVyZ2Ugd2l0aCB0aGUgcmVmICclcydcbiIKKyJmcm9tIHRoZSByZW1vdGUsIGJ1dCBubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJJaHJlIEtvbmZpZ3VyYXRpb24gZ2lidCBhbiwgZGVuIE1lcmdlIG1pdCBSZWZlcmVueiAnJXMnXG4iCisiZGVzIFJlbW90ZS1SZXBvc2l0b3JpZXMgZHVyY2h6dWbDvGhyZW4sIGFiZXIgZGllc2UgUmVmZXJlbnpcbiIKKyJ3dXJkZSBuaWNodCBhbmdlZm9yZGVydC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIGNvbW1pdCAlcyIKK21zZ3N0ciAiS29ubnRlIG5pY2h0IGF1ZiBDb21taXQgJyVzJyB6dWdyZWlmZW4uIgorCisjOiBidWlsdGluL3B1bGwuYzo4NTcKK21zZ2lkICJpZ25vcmluZyAtLXZlcmlmeS1zaWduYXR1cmVzIGZvciByZWJhc2UiCittc2dzdHIgIklnbm9yaWVyZSAtLXZlcmlmeS1zaWduYXR1cmVzIGbDvHIgUmViYXNlIgorCisjOiBidWlsdGluL3B1bGwuYzo5MTIKK21zZ2lkICItLVtuby1dYXV0b3N0YXNoIG9wdGlvbiBpcyBvbmx5IHZhbGlkIHdpdGggLS1yZWJhc2UuIgorbXNnc3RyICItLVtuby1dYXV0b3N0YXNoIGlzdCBudXIgbWl0IC0tcmViYXNlIHp1bMOkc3NpZy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyMAorbXNnaWQgIlVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKyJBa3R1YWxpc2llcmUgZWluZW4gdW5nZWJvcmVuZW4gQnJhbmNoIG1pdCDDhG5kZXJ1bmdlbiwgZGllIHp1bSBDb21taXQgIgorInZvcmdlbWVya3Qgc2luZC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyNAorbXNnaWQgInB1bGwgd2l0aCByZWJhc2UiCittc2dzdHIgIlB1bGwgbWl0IFJlYmFzZSIKKworIzogYnVpbHRpbi9wdWxsLmM6OTI1Cittc2dpZCAicGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAiQml0dGUgY29tbWl0dGVuIFNpZSBkaWUgw4RuZGVydW5nZW4gb2RlciBiZW51dHplbiBTaWUgXCJzdGFzaFwiLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorIlwiZmV0Y2hcIiBha3R1YWxpc2llcnRlIGRpZSBTcGl0emUgZGVzIGFrdHVlbGxlbiBCcmFuY2hlcy5cbiIKKyJTcHVsZSBJaHIgQXJiZWl0c3ZlcnplaWNobmlzIHZvbiBDb21taXQgJXMgdm9yLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgZmFzdC1mb3J3YXJkIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIkFmdGVyIG1ha2luZyBzdXJlIHRoYXQgeW91IHNhdmVkIGFueXRoaW5nIHByZWNpb3VzIGZyb21cbiIKKyIkIGdpdCBkaWZmICVzXG4iCisib3V0cHV0LCBydW5cbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJ0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorIkthbm4gQXJiZWl0c3ZlcnplaWNobmlzIG5pY2h0IHZvcnNwdWxlbi5cbiIKKyJOYWNoZGVtIFNpZSBzaWNoZXJnZXN0ZWxsdCBoYWJlbiwgYWxsZXMgU2Now7x0emVuc3dlcnRlIGRlciBBdXNnYWJlIHZvblxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJnZXNwZWljaGVydCB6dSBoYWJlbi4gRsO8aHJlbiBTaWVcbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJ6dXIgV2llZGVyaGVyc3RlbGx1bmcgYXVzLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTcxCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIkthbm4gbmljaHQgbWVocmVyZSBCcmFuY2hlcyBpbiBlaW5lbiBsZWVyZW4gQnJhbmNoIHp1c2FtbWVuZsO8aHJlbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk3NQorbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcy4iCittc2dzdHIgIkthbm4gUmViYXNlIG5pY2h0IGF1ZiBtZWhyZXJlIEJyYW5jaGVzIGF1c2bDvGhyZW4uIgorCisjOiBidWlsdGluL3B1bGwuYzo5ODIKK21zZ2lkICJjYW5ub3QgcmViYXNlIHdpdGggbG9jYWxseSByZWNvcmRlZCBzdWJtb2R1bGUgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAiIgorIkthbm4gUmViYXNlIG5pY2h0IG1pdCBsb2thbCBhdWZnZXplaWNobmV0ZW4gw4RuZGVydW5nZW4gaW4gU3VibW9kdWxlbiAiCisiYXVzZsO8aHJlbi4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE5Cittc2dpZCAiZ2l0IHB1c2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBwdXNoIFs8T3B0aW9uZW4+XSBbPFJlcG9zaXRvcnk+IFs8UmVmc3BlYz4uLi5dXSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTEyCittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICJLdXJ6c2NocmlmdCBmw7xyIFRhZyBvaG5lIDxUYWc+IgorCisjOiBidWlsdGluL3B1c2guYzoxMjIKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiRGllIE9wdGlvbiAtLWRlbGV0ZSBha3plcHRpZXJ0IG51ciByZWluZSBSZWZlcmVuem5hbWVuIGFscyBaaWVsLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTY4CiBtc2dpZCAiIgogIlxuIgotIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgotIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCiBtc2dzdHIgIiIKICJcbiIKLSIqIFVudmVyc2lvbmllcnRlIERhdGVpLCBoaWVyIGFiZ2VzY2huaXR0ZW4gZHVyY2ggJXMuXG4iCi0iKiBadW0gQW5zZWhlbiBkZXIgdm9sbHN0w6RuZGlnZW4gRGF0ZWkgZXh0ZXJuZW4gRWRpdG9yIGJlbnV0emVuLlxuIgorIlVtIGVpbmUgVmFyaWFudGUgcGVybWFuZW50IHp1IHZlcndlbmRlbiwgc2llaGUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCAiCisiY29uZmlnJy4iCiAKLSM6IGxpYi9kaWZmLnRjbDo1ODMKLW1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKLW1zZ3N0ciAiIgotIkZlaGxlciBiZWltIEhlcmF1c25laG1lbiBkZXMgZ2V3w6RobHRlbiBQYXRjaC1CbG9ja3MgYXVzIGRlciBCZXJlaXRzdGVsbHVuZy4iCi0KLSM6IGxpYi9kaWZmLnRjbDo1OTEKLW1zZ2lkICJGYWlsZWQgdG8gcmV2ZXJ0IHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICJGZWhsZXIgYmVpbSBadXLDvGNrbmVobWVuIGRlcyBnZXfDpGhsdGVuIFBhdGNoLUJsb2Nrcy4iCi0KLSM6IGxpYi9kaWZmLnRjbDo1OTQKLW1zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCi1tc2dzdHIgIkZlaGxlciBiZWltIEJlcmVpdHN0ZWxsZW4gZGVzIGdld8OkaGx0ZW4gUGF0Y2gtQmxvY2tzLiIKLQotIzogbGliL2RpZmYudGNsOjY4NwotbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGxpbmUuIgotbXNnc3RyICJGZWhsZXIgYmVpbSBIZXJhdXNuZWhtZW4gZGVyIGdld8OkaGx0ZW4gWmVpbGUgYXVzIGRlciBCZXJlaXRzdGVsbHVuZy4iCi0KLSM6IGxpYi9kaWZmLnRjbDo2OTYKLW1zZ2lkICJGYWlsZWQgdG8gcmV2ZXJ0IHNlbGVjdGVkIGxpbmUuIgotbXNnc3RyICJGZWhsZXIgYmVpbSBadXLDvGNrbmVobWVuIGRlciBnZXfDpGhsdGVuIFplaWxlLiIKLQotIzogbGliL2RpZmYudGNsOjcwMAotbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gQmVyZWl0c3RlbGxlbiBkZXIgZ2V3w6RobHRlbiBaZWlsZS4iCi0KLSM6IGxpYi9kaWZmLnRjbDo4ODkKLW1zZ2lkICJGYWlsZWQgdG8gdW5kbyBsYXN0IHJldmVydC4iCi1tc2dzdHIgIkZlaGxlciBiZWltIFLDvGNrZ8OkbmdpZ21hY2hlbiBkZXMgbGV0enRlbiBadXLDvGNrbmVobWVuLUNvbW1pdHMiCi0KLSM6IGxpYi9zc2hrZXkudGNsOjM0Ci1tc2dpZCAiTm8ga2V5cyBmb3VuZC4iCi1tc2dzdHIgIktlaW5lIFNjaGzDvHNzZWwgZ2VmdW5kZW4uIgotCi0jOiBsaWIvc3Noa2V5LnRjbDozNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZvdW5kIGEgcHVibGljIGtleSBpbjogJXMiCi1tc2dzdHIgIsOWZmZlbnRsaWNoZXIgU2NobMO8c3NlbCBnZWZ1bmRlbiBpbjogJXMiCi0KLSM6IGxpYi9zc2hrZXkudGNsOjQzCi1tc2dpZCAiR2VuZXJhdGUgS2V5IgotbXNnc3RyICJTY2hsw7xzc2VsIGVyemV1Z2VuIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo2MQotbXNnaWQgIkNvcHkgVG8gQ2xpcGJvYXJkIgotbXNnc3RyICJJbiBad2lzY2hlbmFibGFnZSBrb3BpZXJlbiIKLQotIzogbGliL3NzaGtleS50Y2w6NzUKLW1zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKLW1zZ3N0ciAiSWhyIE9wZW5TU0ggw7ZmZmVubGljaGVyIFNjaGzDvHNzZWwiCi0KLSM6IGxpYi9zc2hrZXkudGNsOjgzCi1tc2dpZCAiR2VuZXJhdGluZy4uLiIKLW1zZ3N0ciAiRXJ6ZXVnZW4uLi4iCi0KLSM6IGxpYi9zc2hrZXkudGNsOjg5Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3B1c2guYzoxNzEKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKICJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEXG4iCiAiJXMiCiBtc2dzdHIgIiIKLSJLb25udGUgwrtzc2gta2V5Z2VuwqsgbmljaHQgc3RhcnRlbjpcbiIKKyJEZXIgTmFtZSBkZXMgVXBzdHJlYW0tQnJhbmNoZXMgc3RpbW10IG5pY2h0IG1pdCBkZW0gTmFtZW4gSWhyZXNcbiIKKyJha3R1ZWxsZW4gQnJhbmNoZXMgw7xiZXJlaW4uIFVtIGF1ZiBkZW4gVXBzdHJlYW0tQnJhbmNoIGluIGRlbSBSZW1vdGUtXG4iCisiUmVwb3NpdG9yeSB6dSB2ZXJzZW5kZW4sIGJlbnV0emVuIFNpZTpcbiIKICJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlVtIGF1ZiBkZW4gQnJhbmNoIG1pdCBkZW1zZWxiZW4gTmFtZW4gaW0gUmVtb3RlLVJlcG9zaXRvcnkgenUgdmVyc2VuZGVuLFxuIgorImJlbnV0emVuIFNpZTpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRFxuIgogIiVzIgogCi0jOiBsaWIvc3Noa2V5LnRjbDoxMTYKLW1zZ2lkICJHZW5lcmF0aW9uIGZhaWxlZC4iCi1tc2dzdHIgIlNjaGzDvHNzZWxlcnpldWd1bmcgZmVobGdlc2NobGFnZW4uIgotCi0jOiBsaWIvc3Noa2V5LnRjbDoxMjMKLW1zZ2lkICJHZW5lcmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vIGtleXMgZm91bmQuIgotbXNnc3RyICJTY2hsw7xzc2VsZXJ6ZXVndW5nIGVyZm9sZ3JlaWNoLCBhYmVyIGtlaW5lIFNjaGzDvHNzZWwgZ2VmdW5kZW4uIgotCi0jOiBsaWIvc3Noa2V5LnRjbDoxMjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJZb3VyIGtleSBpcyBpbjogJXMiCi1tc2dzdHIgIklociBTY2hsw7xzc2VsIGlzdCBhYmdlbGVndCBpbjogJXMiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IENyZWF0ZSBCcmFuY2giCi1tc2dzdHIgIiVzICglcyk6IEJyYW5jaCBlcnN0ZWxsZW4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyOAotbXNnaWQgIkNyZWF0ZSBOZXcgQnJhbmNoIgotbXNnc3RyICJOZXVlbiBCcmFuY2ggZXJzdGVsbGVuIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDIKLW1zZ2lkICJCcmFuY2ggTmFtZSIKLW1zZ3N0ciAiQnJhbmNobmFtZSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjU3Ci1tc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoIE5hbWUiCi1tc2dzdHIgIlBhc3NlbmQgenUgVHJhY2tpbmdicmFuY2gtTmFtZSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Ci1tc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCi1tc2dzdHIgIkFuZmFuZ3N2ZXJzaW9uIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzIKLW1zZ2lkICJVcGRhdGUgRXhpc3RpbmcgQnJhbmNoOiIKLW1zZ3N0ciAiRXhpc3RpZXJlbmRlbiBCcmFuY2ggYWt0dWFsaXNpZXJlbjoiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQotbXNnaWQgIk5vIgotbXNnc3RyICJOZWluIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODAKLW1zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKLW1zZ3N0ciAiTnVyIFZvcnNwdWxlbiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Ci1tc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCi1tc2dzdHIgIkJyYW5jaCBhdXNjaGVja2VuIG5hY2ggRXJzdGVsbGVuIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTMyCi1tc2dpZCAiUGxlYXNlIHNlbGVjdCBhIHRyYWNraW5nIGJyYW5jaC4iCi1tc2dzdHIgIkJpdHRlIHfDpGhsZW4gU2llIGVpbmVuIFRyYWNraW5nYnJhbmNoLiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE0MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRyYWNraW5nIGJyYW5jaCAlcyBpcyBub3QgYSBicmFuY2ggaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiIKLW1zZ3N0ciAiVHJhY2tpbmdicmFuY2ggwrslc8KrIGlzdCBrZWluIEJyYW5jaCBpbSBleHRlcm5lbiBSZXBvc2l0b3J5LiIKLQotIzogbGliL2NvbnNvbGUudGNsOjU5Ci1tc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAiVmVyYXJiZWl0dW5nLiBCaXR0ZSB3YXJ0ZW4uLi4iCi0KLSM6IGxpYi9jb25zb2xlLnRjbDoxODYKLW1zZ2lkICJTdWNjZXNzIgotbXNnc3RyICJFcmZvbGdyZWljaCIKLQotIzogbGliL2NvbnNvbGUudGNsOjIwMAotbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKLW1zZ3N0ciAiRmVobGVyOiBLb21tYW5kbyBmZWhsZ2VzY2hsYWdlbiIKLQotIzogbGliL2xpbmUudGNsOjE3Ci1tc2dpZCAiR290byBMaW5lOiIKLW1zZ3N0ciAiR2VoZSB6dSBaZWlsZToiCi0KLSM6IGxpYi9saW5lLnRjbDoyMwotbXNnaWQgIkdvIgotbXNnc3RyICJHZWhlIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTIKLW1zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgotbXNnc3RyICJMb3NnZWzDtnN0ZSBBcmJlaXRza29waWUtVmVyc2lvbiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjYwCi1tc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCi1tc2dzdHIgIlZlcnNpb24gUmVnZXgtQXVzZHJ1Y2s6IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzIKLW1zZ2lkICJMb2NhbCBCcmFuY2giCi1tc2dzdHIgIkxva2FsZXIgQnJhbmNoIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzcKLW1zZ2lkICJUcmFja2luZyBCcmFuY2giCi1tc2dzdHIgIlRyYWNraW5nYnJhbmNoIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODIgbGliL2Nob29zZV9yZXYudGNsOjU0NAotbXNnaWQgIlRhZyIKLW1zZ3N0ciAiVGFnIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzIxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCByZXZpc2lvbjogJXMiCi1tc2dzdHIgIlVuZ8O8bHRpZ2UgVmVyc2lvbjogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDIKLW1zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCi1tc2dzdHIgIktlaW5lIFZlcnNpb24gYXVzZ2V3w6RobHQuIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzUwCi1tc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCi1tc2dzdHIgIlZlcnNpb25zLUF1c2RydWNrIGlzdCBsZWVyLiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjUzNwotbXNnaWQgIlVwZGF0ZWQiCi1tc2dzdHIgIkFrdHVhbGlzaWVydCIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjU2NQotbXNnaWQgIlVSTCIKLW1zZ3N0ciAiVVJMIgotCi0jOiBsaWIvY29tbWl0LnRjbDo5CisjOiBidWlsdGluL3B1c2guYzoxODYKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgogIlxuIgotIllvdSBhcmUgYWJvdXQgdG8gY3JlYXRlIHRoZSBpbml0aWFsIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGNvbW1pdCBiZWZvcmUgdGhpcyAiCi0idG8gYW1lbmQuXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKIG1zZ3N0ciAiIgotIktlaW4gQ29tbWl0IHp1ciBOYWNoYmVzc2VydW5nIHZvcmhhbmRlbi5cbiIKKyJTaWUgYmVmaW5kZW4gc2ljaCBpbSBNb21lbnQgYXVmIGtlaW5lbSBCcmFuY2guXG4iCisiVW0gZGllIEhpc3RvcmllLCBmw7xocmVuZCB6dW0gYWt0dWVsbGVuIChsb3NnZWzDtnN0ZXIgSEVBRClcbiIKKyJTdGF0dXMgenUgdmVyc2VuZGVuLCBiZW51dHplbiBTaWVcbiIKICJcbiIKLSJTaWUgc2luZCBkYWJlaSwgZGVuIGVyc3RlbiBDb21taXQgenUgZXJzdGVsbGVuLiBFcyBnaWJ0IGtlaW5lbiBleGlzdGllcmVuZGVuICIKLSJDb21taXQsIGRlbiBTaWUgbmFjaGJlc3Nlcm4ga8O2bm50ZW4uXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PE5hbWUtZGVzLVJlbW90ZS1CcmFuY2hlcz5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTgKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwMAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKICJcbiIKLSJZb3UgYXJlIGN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgdGhhdCBoYXMgbm90IGJlZW4gZnVsbHkgIgotImNvbXBsZXRlZC4gIFlvdSBjYW5ub3QgYW1lbmQgdGhlIHByaW9yIGNvbW1pdCB1bmxlc3MgeW91IGZpcnN0IGFib3J0IHRoZSAiCi0iY3VycmVudCBtZXJnZSBhY3Rpdml0eS5cbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKIG1zZ3N0ciAiIgotIk5hY2hiZXNzZXJ1bmcgYmVpIFp1c2FtbWVuZsO8aHJ1bmcgbmljaHQgbcO2Z2xpY2guXG4iCisiRGVyIGFrdHVlbGxlIEJyYW5jaCAlcyBoYXQga2VpbmVuIFVwc3RyZWFtLUJyYW5jaC5cbiIKKyJVbSBkZW4gYWt0dWVsbGVuIEJyYW5jaCB6dSB2ZXJzZW5kZW4gdW5kIGRlbiBSZW1vdGUtQnJhbmNoXG4iCisiYWxzIFVwc3RyZWFtLUJyYW5jaCB6dSBzZXR6ZW4sIGJlbnV0emVuIFNpZVxuIgogIlxuIgotIlNpZSBoYWJlbiBkYXMgWnVzYW1tZW5mw7xocmVuIHZvbiBDb21taXRzIGFuZ2VmYW5nZW4sIGFiZXIgbm9jaCBuaWNodCAiCi0iYmVlbmRldC4gU2llIGvDtm5uZW4ga2VpbmVuIHZvcmlnZW4gQ29tbWl0IG5hY2hiZXNzZXJuLCBzb2xhbmdlIGVpbmUgIgotInVuZmVydGlnZSBadXNhbW1lbmbDvGhydW5nIGV4aXN0aWVydC4gRGF6dSBtw7xzc2VuIFNpZSBkaWUgWnVzYW1tZW5mw7xocnVuZyAiCi0iYmVlbmRlbiBvZGVyIGFiYnJlY2hlbi5cbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKIAotIzogbGliL2NvbW1pdC50Y2w6NTYKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCi1tc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlciBDb21taXRkYXRlbiBmw7xyIE5hY2hiZXNzZXJuOiIKLQotIzogbGliL2NvbW1pdC50Y2w6ODMKLW1zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgotbXNnc3RyICJCZW51dHplcm5hbWUga29ubnRlIG5pY2h0IGJlc3RpbW10IHdlcmRlbjoiCi0KLSM6IGxpYi9jb21taXQudGNsOjg4Ci1tc2dpZCAiSW52YWxpZCBHSVRfQ09NTUlUVEVSX0lERU5UOiIKLW1zZ3N0ciAiVW5nw7xsdGlnZXIgV2VydCB2b24gR0lUX0NPTU1JVFRFUl9JTkRFTlQ6IgotCi0jOiBsaWIvY29tbWl0LnRjbDoxMzgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJ3YXJuaW5nOiBUY2wgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyAnJXMnLiIKLW1zZ3N0ciAiV2FybmluZzogVGNsL1RrIHVudGVyc3TDvHR6dCBkaWUgWmVpY2hlbmNvZGllcnVuZyDCuyVzwqsgbmljaHQuIgotCi0jOiBsaWIvY29tbWl0LnRjbDoxNTgKLW1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorIzogYnVpbHRpbi9wdXNoLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgogbXNnc3RyICIiCi0iRGVyIGxldHp0ZSBnZWxhZGVuZSBTdGF0dXMgc3RpbW10IG5pY2h0IG1laHIgbWl0IGRlbSBSZXBvc2l0b3J5IMO8YmVyZWluLlxuIgotIlxuIgotIkVpbiBhbmRlcmVzIEdpdC1Qcm9ncmFtbSBoYXQgZGFzIFJlcG9zaXRvcnkgc2VpdCBkZW0gbGV0enRlbiBMYWRlbiAiCi0iZ2XDpG5kZXJ0LiAgVm9yIGRlbSBuw6RjaHN0ZW4gQ29tbWl0IG11c3MgbmV1IGdlbGFkZW4gd2VyZGVuLlxuIgotIlxuIgotIkVzIHdpcmQgZ2xlaWNoIG5ldSBnZWxhZGVuLlxuIgorIkRlciBha3R1ZWxsZSBCcmFuY2ggJXMgaGF0IG1laHJlcmUgVXBzdHJlYW0tQnJhbmNoZXMsIFwicHVzaFwiIHZlcndlaWdlcnQuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODIKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxMQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKLSJcbiIKLSJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIHN0YWdlIHRoZSBmaWxlICIKLSJiZWZvcmUgY29tbWl0dGluZy5cbiIKKyJZb3UgYXJlIHB1c2hpbmcgdG8gcmVtb3RlICclcycsIHdoaWNoIGlzIG5vdCB0aGUgdXBzdHJlYW0gb2ZcbiIKKyJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycsIHdpdGhvdXQgdGVsbGluZyBtZSB3aGF0IHRvIHB1c2hcbiIKKyJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iCiBtc2dzdHIgIiIKLSJOaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBEYXRlaWVuIGvDtm5uZW4gbmljaHQgY29tbWl0dGV0IHdlcmRlbi5cbiIKLSJcbiIKLSJEaWUgRGF0ZWkgwrslc8KrIGhhdCBub2NoIG5pY2h0IGF1ZmdlbMO2c3RlIFp1c2FtbWVuZsO8aHJ1bmdzLUtvbmZsaWt0ZS4gU2llICIKLSJtw7xzc2VuIGRpZXNlIEtvbmZsaWt0ZSBhdWZsw7ZzZW4gdW5kIGRpZSBEYXRlaWVuIGluIGRpZSBCZXJlaXRzdGVsbHVuZyAiCi0iaGluenVmw7xnZW4sIGJldm9yIFNpZSBjb21taXR0ZW4ga8O2bm5lbi5cbiIKKyJTaWUgdmVyc2VuZGVuIG5hY2ggJyVzJywgd2VsY2hlcyBrZWluIFVwc3RyZWFtLVJlcG9zaXRvcnkgSWhyZXMgYWt0dWVsbGVuXG4iCisiQnJhbmNoZXMgJyVzJyBpc3QsIG9obmUgYW56dWdlYmVuLCB3YXMgdmVyc2VuZGV0IHdlcmRlbiBzb2xsLCB1bSB3ZWxjaGVuXG4iCisiUmVtb3RlLUJyYW5jaCB6dSBha3R1YWxpc2llcmVuLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTkwCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3B1c2guYzoyNzAKIG1zZ2lkICIiCi0iVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgotIlxuIgotIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKIG1zZ3N0ciAiIgotIlVuYmVrYW5udGVyIERhdGVpenVzdGFuZCDCuyVzwqsuXG4iCi0iXG4iCi0iRGF0ZWkgwrslc8KrIGthbm4gbmljaHQgY29tbWl0dGV0IHdlcmRlbi5cbiIKKyJTaWUgaGFiZW4ga2VpbmUgUmVmc3BlYyBmw7xyIFwicHVzaFwiIGFuZ2VnZWJlbiwgdW5kIHB1c2guZGVmYXVsdCBpc3QgIgorIlwibm90aGluZ1wiLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTk4CisjOiBidWlsdGluL3B1c2guYzoyNzcKIG1zZ2lkICIiCi0iTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCi0iXG4iCi0iWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC5cbiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gSW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLlxuIgorIidnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKIG1zZ3N0ciAiIgotIktlaW5lIMOEbmRlcnVuZ2VuIHZvcmhhbmRlbiwgZGllIGNvbW1pdHRldCB3ZXJkZW4ga8O2bm50ZW4uXG4iCi0iXG4iCi0iU2llIG3DvHNzZW4gbWluZGVzdGVucyBlaW5lIERhdGVpIGJlcmVpdHN0ZWxsZW4sIGJldm9yIFNpZSBjb21taXR0ZW4ga8O2bm5lbi5cbiIKKyJBa3R1YWxpc2llcnVuZ2VuIHd1cmRlbiB6dXLDvGNrZ2V3aWVzZW4sIHdlaWwgZGllIFNwaXR6ZSBJaHJlcyBha3R1ZWxsZW5cbiIKKyJCcmFuY2hlcyBoaW50ZXIgc2VpbmVtIGV4dGVybmVuIEdlZ2Vuc3TDvGNrIHp1csO8Y2tnZWZhbGxlbiBpc3QuIEbDvGhyZW4gU2llXG4iCisiZGllIGV4dGVybmVuIMOEbmRlcnVuZ2VuIHp1c2FtbWVuICh6LiBCLiAnZ2l0IHB1bGwgLi4uJykgYmV2b3IgU2llIFwicHVzaFwiXG4iCisiZXJuZXV0IGF1c2bDvGhyZW4uXG4iCisiU2llaGUgYXVjaCBkaWUgU2VrdGlvbiAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJ1xuIgorImbDvHIgd2VpdGVyZSBEZXRhaWxzLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MjEzCisjOiBidWlsdGluL3B1c2guYzoyODMKIG1zZ2lkICIiCi0iUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgotIlxuIgotIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCi0iXG4iCi0iLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgotIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCi0iLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgogbXNnc3RyICIiCi0iQml0dGUgZ2ViZW4gU2llIGVpbmUgVmVyc2lvbnNiZXNjaHJlaWJ1bmcgZWluLlxuIgotIlxuIgotIkVpbmUgZ3V0ZSBWZXJzaW9uc2Jlc2NocmVpYnVuZyBlbnRow6RsdCBmb2xnZW5kZSBBYnNjaG5pdHRlOlxuIgotIlxuIgotIi0gRXJzdGUgWmVpbGU6IEVpbmUgWnVzYW1tZW5mYXNzdW5nLCB3YXMgbWFuIGdlbWFjaHQgaGF0LlxuIgotIlxuIgotIi0gWndlaXRlIFplaWxlOiBMZWVyemVpbGVcbiIKLSJcbiIKLSItIFJlc3Q6IEVpbmUgYXVzZsO8aHJsaWNoZSBCZXNjaHJlaWJ1bmcsIHdhcnVtIGRpZXNlIMOEbmRlcnVuZyBoaWxmcmVpY2ggaXN0LlxuIgorIkFrdHVhbGlzaWVydW5nZW4gd3VyZGVuIHp1csO8Y2tnZXdpZXNlbiwgd2VpbCBkaWUgU3BpdHplIGVpbmVzIHZlcnNlbmRldGVuXG4iCisiQnJhbmNoZXMgaGludGVyIHNlaW5lbSBleHRlcm5lbiBHZWdlbnN0w7xjayB6dXLDvGNrZ2VmYWxsZW4gaXN0LiBDaGVja2VuIFNpZVxuIgorImRpZXNlbiBCcmFuY2ggYXVzIHVuZCBmw7xocmVuIFNpZSBkaWUgZXh0ZXJuZW4gw4RuZGVydW5nZW4genVzYW1tZW5cbiIKKyIoei4gQi4gJ2dpdCBwdWxsIC4uLicpIGJldm9yIFNpZSBlcm5ldXQgXCJwdXNoXCIgYXVzZsO8aHJlbi5cbiIKKyJTaWVoZSBhdWNoIGRpZSBTZWt0aW9uICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnXG4iCisiZsO8ciB3ZWl0ZXJlIERldGFpbHMuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyNDQKLW1zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKLW1zZ3N0ciAiQXVmcnVmZW4gZGVzIMK7cHJlLWNvbW1pdCBob29rwqsuLi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjI1OQotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgotbXNnc3RyICJDb21taXR0ZW4gYWJnZWxlaG50IGR1cmNoIMK7cHJlLWNvbW1pdCBob29rwqsuIgotCi0jOiBsaWIvY29tbWl0LnRjbDoyNzgKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4OQogbXNnaWQgIiIKLSJZb3UgYXJlIGFib3V0IHRvIGNvbW1pdCBvbiBhIGRldGFjaGVkIGhlYWQuIFRoaXMgaXMgYSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgIgotInRoaW5nIHRvIGRvIGJlY2F1c2UgaWYgeW91IHN3aXRjaCB0byBhbm90aGVyIGJyYW5jaCB5b3Ugd2lsbCBsb3NlIHlvdXIgIgotImNoYW5nZXMgYW5kIGl0IGNhbiBiZSBkaWZmaWN1bHQgdG8gcmV0cmlldmUgdGhlbSBsYXRlciBmcm9tIHRoZSByZWZsb2cuIFlvdSAiCi0ic2hvdWxkIHByb2JhYmx5IGNhbmNlbCB0aGlzIGNvbW1pdCBhbmQgY3JlYXRlIGEgbmV3IGJyYW5jaCB0byBjb250aW51ZS5cbiIKLSIgXG4iCi0iIERvIHlvdSByZWFsbHkgd2FudCB0byBwcm9jZWVkIHdpdGggeW91ciBDb21taXQ/IgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKIG1zZ3N0ciAiIgotIlNpZSBzaW5kIGRhYmVpLCBlaW5lbiBDb21taXQgYXVmIGxvc2dlbMO2c3RlIEJyYW5jaHNwaXR6ZSAowrtjb21taXQgdG8gIgotImRldGFjaGVkIGhlYWTCqykgenUgZXJzdGVsbGVuLiBEYXMgaXN0IHJpc2thbnQsIGRlbm4gd2VubiBTaWUgenUgZWluZW0gIgotImFuZGVyZW4gQnJhbmNoIHdlY2hzZWxuLCB3w7xyZGVuIFNpZSBkaWVzZSDDhG5kZXJ1bmdlbiB2ZXJsaWVyZW4gdW5kIGVzIGlzdCAiCi0ibmFjaHRyw6RnbGljaCBzY2h3aWVyaWcsIGRpZXNlIGF1cyBkZW0gQ29tbWl0LUxvZyAowrtyZWZsb2fCqykgd2llZGVyenVmaW5kZW4uICIKLSJFcyB3aXJkIGVtcGZvaGxlbiwgZGllc2VuIENvbW1pdCBhYnp1YnJlY2hlbiB1bmQgenVuw6RjaHN0IGVpbmVuIG5ldWVuIEJyYW5jaCAiCi0ienUgZXJzdGVsbGVuLlxuIgotIlxuIgotIiBXb2xsZW4gU2llIGRlbiBDb21taXQgdHJvdHpkZW0gaW4gZGllc2VyIEZvcm0gZXJzdGVsbGVuPyIKKyJBa3R1YWxpc2llcnVuZ2VuIHd1cmRlbiB6dXLDvGNrZ2V3aWVzZW4sIHdlaWwgZGFzIFJlbW90ZS1SZXBvc2l0b3J5IENvbW1pdHMgIgorImVudGjDpGx0LFxuIgorImRpZSBsb2thbCBuaWNodCB2b3JoYW5kZW4gc2luZC4gRGFzIHdpcmQgw7xibGljaGVyd2Vpc2UgZHVyY2ggZWluZW4gXCJwdXNoXCIgIgorInZvblxuIgorIkNvbW1pdHMgYXVmIGRpZXNlbGJlIFJlZmVyZW56IHZvbiBlaW5lbSBhbmRlcmVuIFJlcG9zaXRvcnkgYXVzIHZlcnVyc2FjaHQuXG4iCisiVmllbGxlaWNodCBtw7xzc2VuIFNpZSBkaWUgZXh0ZXJuZW4gw4RuZGVydW5nZW4genVzYW1tZW5mw7xocmVuICh6LiBCLiAnZ2l0ICIKKyJwdWxsIC4uLicpXG4iCisiYmV2b3IgU2llIGVybmV1dCBcInB1c2hcIiBhdXNmw7xocmVuLlxuIgorIlNpZWhlIGF1Y2ggZGllIFNla3Rpb24gJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCdcbiIKKyJmw7xyIHdlaXRlcmUgRGV0YWlscy4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI5OQotbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICJBdWZydWZlbiBkZXMgwrtjb21taXQtbXNnIGhvb2vCqy4uLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzE0Ci1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCi1tc2dzdHIgIkNvbW1pdHRlbiBhYmdlbGVobnQgZHVyY2ggwrtjb21taXQtbXNnIGhvb2vCqy4iCi0KLSM6IGxpYi9jb21taXQudGNsOjMyNwotbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKLW1zZ3N0ciAiw4RuZGVydW5nZW4gY29tbWl0dGVuLi4uIgotCi0jOiBsaWIvY29tbWl0LnRjbDozNDQKLW1zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCi1tc2dzdHIgIndyaXRlLXRyZWUgZmVobGdlc2NobGFnZW46IgotCi0jOiBsaWIvY29tbWl0LnRjbDozNDUgbGliL2NvbW1pdC50Y2w6Mzk1IGxpYi9jb21taXQudGNsOjQyMgotbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgotbXNnc3RyICJDb21taXR0ZW4gZmVobGdlc2NobGFnZW4uIgotCi0jOiBsaWIvY29tbWl0LnRjbDozNjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgotbXNnc3RyICJWZXJzaW9uIMK7JXPCqyBzY2hlaW50IGJlc2Now6RkaWd0IHp1IHNlaW4iCi0KLSM6IGxpYi9jb21taXQudGNsOjM2NwotbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJObyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGJ5IHRoaXMgY29tbWl0IGFuZCBpdCB3YXMgbm90IGEgbWVyZ2UgY29tbWl0LlxuIgotIlxuIgotIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5NgorbXNnaWQgIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0YWcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlbW90ZS4iCiBtc2dzdHIgIiIKLSJLZWluZSDDhG5kZXJ1bmdlbiB6dW0gY29tbWl0dGVuLlxuIgotIlxuIgotIkVzIGdpYnQga2VpbmUgZ2XDpG5kZXJ0ZSBEYXRlaSBpbiBkaWVzZW0gQ29tbWl0IHVuZCBlcyB3dXJkZSBhdWNoIG5pY2h0cyAiCi0ienVzYW1tZW5nZWbDvGhydC5cbiIKLSJcbiIKLSJEYXMgQXJiZWl0c3ZlcnplaWNobmlzIHdpcmQgZGFoZXIgamV0enQgbmV1IGdlbGFkZW4uXG4iCisiQWt0dWFsaXNpZXJ1bmdlbiB3dXJkZW4genVyw7xja2dld2llc2VuLCB3ZWlsIGRhcyBUYWcgYmVyZWl0c1xuIgorImltIFJlbW90ZS1SZXBvc2l0b3J5IGV4aXN0aWVydC4iCiAKLSM6IGxpYi9jb21taXQudGNsOjM3NAotbXNnaWQgIk5vIGNoYW5nZXMgdG8gY29tbWl0LiIKLW1zZ3N0ciAiS2VpbmUgw4RuZGVydW5nZW4sIGRpZSBjb21taXR0ZXQgd2VyZGVuIGvDtm5uZW4uIgotCi0jOiBsaWIvY29tbWl0LnRjbDozOTQKLW1zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgotbXNnc3RyICJjb21taXQtdHJlZSBmZWhsZ2VzY2hsYWdlbjoiCi0KLSM6IGxpYi9jb21taXQudGNsOjQyMQotbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKLW1zZ3N0ciAidXBkYXRlLXJlZiBmZWhsZ2VzY2hsYWdlbjoiCi0KLSM6IGxpYi9jb21taXQudGNsOjUxNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKLW1zZ3N0ciAiQ29tbWl0ICVzIGVyc3RlbGx0OiAlcyIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogRGVsZXRlIEJyYW5jaCIKLW1zZ3N0ciAiJXMgKCVzKTogQnJhbmNoIGzDtnNjaGVuIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjEKLW1zZ2lkICJEZWxldGUgTG9jYWwgQnJhbmNoIgotbXNnc3RyICJMb2thbGVuIEJyYW5jaCBsw7ZzY2hlbiIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM5Ci1tc2dpZCAiTG9jYWwgQnJhbmNoZXMiCi1tc2dzdHIgIkxva2FsZSBCcmFuY2hlcyIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUxCi1tc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCi1tc2dzdHIgIk51ciBsw7ZzY2hlbiwgd2VubiB6dXNhbW1lbmdlZsO8aHJ0IG5hY2giCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCi1tc2dzdHIgIkZvbGdlbmRlIEJyYW5jaGVzIHNpbmQgbm9jaCBuaWNodCBtaXQgwrslc8KrIHp1c2FtbWVuZ2Vmw7xocnQ6IgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTMxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIC0gJXM6IgotbXNnc3RyICIgLSAlczoiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5OQogbXNnaWQgIiIKLSJGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaGVzOlxuIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgIiIKKyJTaWUga8O2bm5lbiBrZWluZSBSZW1vdGUtUmVmZXJlbnogYWt0dWFsaXNpZXJlbiwgZGllIGF1ZiBlaW4gT2JqZWt0IHplaWd0LFxuIgorImRhcyBrZWluIENvbW1pdCBpc3QsIG9kZXIgZXMgYXVmIGVpbiBzb2xjaGVzIE9iamVrdCB6ZWlnZW4gbGFzc2VuLCBvaG5lXG4iCisiZGllIE9wdGlvbiAnLS1mb3JjZScgenUgdmVyd2VuZGVuLlxuIgorCisjOiBidWlsdGluL3B1c2guYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICJQdXNoIG5hY2ggJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJzZW5kZW4gZWluaWdlciBSZWZlcmVuemVuIG5hY2ggJyVzJyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQyCittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVwb3NpdG9yeSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQzIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY0Cittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAiYWxsZSBSZWZlcmVuemVuIHZlcnNlbmRlbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ0IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY2Cittc2dpZCAibWlycm9yIGFsbCByZWZzIgorbXNnc3RyICJhbGxlIFJlZmVyZW56ZW4gc3BpZWdlbG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NgorbXNnaWQgImRlbGV0ZSByZWZzIgorbXNnc3RyICJSZWZlcmVuemVuIGzDtnNjaGVuIgorCisjOiBidWlsdGluL3B1c2guYzo1NDcKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgIlRhZ3MgdmVyc2VuZGVuIChrYW5uIG5pY2h0IG1pdCAtLWFsbCBvZGVyIC0tbWlycm9yIHZlcndlbmRldCB3ZXJkZW4pIgorCisjOiBidWlsdGluL3B1c2guYzo1NTAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjcKK21zZ2lkICJmb3JjZSB1cGRhdGVzIgorbXNnc3RyICJBa3R1YWxpc2llcnVuZyBlcnp3aW5nZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MiBidWlsdGluL3NlbmQtcGFjay5jOjE4MQorbXNnaWQgIjxyZWZuYW1lPjo8ZXhwZWN0PiIKK21zZ3N0ciAiPFJlZmVyZW56bmFtZT46PEVyd2FydHVuZ3N3ZXJ0PiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUzIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgyCittc2dpZCAicmVxdWlyZSBvbGQgdmFsdWUgb2YgcmVmIHRvIGJlIGF0IHRoaXMgdmFsdWUiCittc2dzdHIgIlJlZmVyZW56IG11c3Mgc2ljaCBhdWYgZGVtIGFuZ2VnZWJlbmVuIFdlcnQgYmVmaW5kZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NgorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIHB1c2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAicmVrdXJzaXZlbiBcInB1c2hcIiB2b24gU3VibW9kdWxlbiBzdGV1ZXJuIgorCisjOiBidWlsdGluL3B1c2guYzo1NTggYnVpbHRpbi9zZW5kLXBhY2suYzoxNzUKK21zZ2lkICJ1c2UgdGhpbiBwYWNrIgorbXNnc3RyICJrbGVpbmVyZSBQYWtldGUgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL3B1c2guYzo1NTkgYnVpbHRpbi9wdXNoLmM6NTYwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYxCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgInJlY2VpdmUgcGFjayBwcm9ncmFtIgorbXNnc3RyICIncmVjZWl2ZSBwYWNrJyBQcm9ncmFtbSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYxCittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgIlVwc3RyZWFtIGbDvHIgXCJnaXQgcHVsbC9zdGF0dXNcIiBzZXR6ZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NAorbXNnaWQgInBydW5lIGxvY2FsbHkgcmVtb3ZlZCByZWZzIgorbXNnc3RyICJsb2thbCBnZWzDtnNjaHRlIFJlZmVyZW56ZW4gZW50ZmVybmVuIgorCisjOiBidWlsdGluL3B1c2guYzo1NjYKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAiXCJwcmUtcHVzaCBob29rXCIgdW1nZWhlbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY3Cittc2dpZCAicHVzaCBtaXNzaW5nIGJ1dCByZWxldmFudCB0YWdzIgorbXNnc3RyICJmZWhsZW5kZSwgYWJlciByZWxldmFudGUgVGFncyB2ZXJzZW5kZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MCBidWlsdGluL3NlbmQtcGFjay5jOjE2OQorbXNnaWQgIkdQRyBzaWduIHRoZSBwdXNoIgorbXNnc3RyICJzaWduaWVydCBcInB1c2hcIiBtaXQgR1BHIgorCisjOiBidWlsdGluL3B1c2guYzo1NzIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzYKK21zZ2lkICJyZXF1ZXN0IGF0b21pYyB0cmFuc2FjdGlvbiBvbiByZW1vdGUgc2lkZSIKK21zZ3N0ciAiUmVmZXJlbnplbiBhdG9tYXIgdmVyc2VuZGVuIgorCisjOiBidWlsdGluL3B1c2guYzo1OTAKK21zZ2lkICItLWRlbGV0ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1taXJyb3IgYW5kIC0tdGFncyIKK21zZ3N0ciAiRGllIE9wdGlvbiAtLWRlbGV0ZSBpc3QgaW5rb21wYXRpYmVsIG1pdCAtLWFsbCwgLS1taXJyb3IgdW5kIC0tdGFncy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU5MgorbXNnaWQgIi0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IGFueSByZWZzIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tZGVsZXRlIGthbm4gbnVyIG1pdCBSZWZlcmVuemVuIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL3B1c2guYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAidW5nw7xsdGlnZXMgUmVwb3NpdG9yeSAnJXMnIgorCisjOiBidWlsdGluL3B1c2guYzo2MTMKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSAiCisicmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAiIgorIktlaW4gWmllbCBmw7xyIFwicHVzaFwiIGtvbmZpZ3VyaWVydC5cbiIKKyJFbnR3ZWRlciBzcGV6aWZpemllcmVuIFNpZSBkaWUgVVJMIHZvbiBkZXIgQmVmZWhsc3plaWxlIG9kZXIga29uZmlndXJpZXJlbiAiCisiZWluIFJlbW90ZS1SZXBvc2l0b3J5IHVudGVyIEJlbnV0enVuZyB2b25cbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPE5hbWU+IDxVUkw+XG4iCisiXG4iCisidW5kIGbDvGhyZW4gXCJwdXNoXCIgZGFubiB1bnRlciBCZW51dHp1bmcgZGllc2VzIE5hbWVucyBhdXNcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPE5hbWU+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYyOAorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC0tYWxsIHVuZCAtLXRhZ3Mgc2luZCBpbmtvbXBhdGliZWwuIgorCisjOiBidWlsdGluL3B1c2guYzo2MzAKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tYWxsIGthbm4gbmljaHQgbWl0IFJlZnNwZWNzIGtvbWJpbmllcnQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM0Cittc2dpZCAiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1taXJyb3IgdW5kIC0tdGFncyBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzNgorbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIkRpZSBPcHRpb24gLS1taXJyb3Iga2FubiBuaWNodCBtaXQgUmVmc3BlY3Mga29tYmluaWVydCB3ZXJkZW4uIgorCisjOiBidWlsdGluL3B1c2guYzo2MzkKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC0tYWxsIHVuZCAtLW1pcnJvciBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjY0MworbXNnaWQgInB1c2ggb3B0aW9ucyBtdXN0IG5vdCBoYXZlIG5ldyBsaW5lIGNoYXJhY3RlcnMiCittc2dzdHIgIlB1c2gtT3B0aW9uZW4gZMO8cmZlbiBrZWluZSBaZWlsZW52b3JzY2h1YnplaWNoZW4gaGFiZW4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjgKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLWJhc2U+Li48b2xkLXRpcD4gPG5ldy1iYXNlPi4uPG5ldy10aXA+IgorbXNnc3RyICIiCisiZ2l0IHJhbmdlLWRpZmYgWzxPcHRpb25lbj5dIDxhbHRlLUJhc2lzPi4uPGFsdGUtU3BpdHplPiA8bmV1ZS1CYXNpcz4uLjxuZXVlLSIKKyJTcGl0emU+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo5Cittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPG9sZC10aXA+Li4uPG5ldy10aXA+IgorbXNnc3RyICJnaXQgcmFuZ2UtZGlmZiBbPE9wdGlvbmVuPl0gPGFsdGUtU3BpdHplPi4uLjxuZXVlLVNwaXR6ZT4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjEwCittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPGJhc2U+IDxvbGQtdGlwPiA8bmV3LXRpcD4iCittc2dzdHIgImdpdCByYW5nZS1kaWZmIFs8T3B0aW9uZW4+XSA8QmFzaXM+IDxhbHRlLVNwaXR6ZT4gPG5ldWUtU3BpdHplPiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjIKK21zZ2lkICJQZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIgorbXNnc3RyICJQcm96ZW50c2F0eiBtaXQgd2VsY2hlbSBFcnpldWd1bmcgZ2V3aWNodGV0IHdpcmQiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI0Cittc2dpZCAidXNlIHNpbXBsZSBkaWZmIGNvbG9ycyIKK21zZ3N0ciAiZWluZmFjaGUgRGlmZi1GYXJiZW4gYmVudXR6ZW4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAibm90ZXMiCittc2dzdHIgIk5vdGl6ZW4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAicGFzc2VkIHRvICdnaXQgbG9nJyIKK21zZ3N0ciAiYW4gJ2dpdCBsb2cnIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjUwIGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIC4uIGluIHJhbmdlOiAnJXMnIgorbXNnc3RyICJLZWluIC4uIGltIEJlcmVpY2g6ICclcyciCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjY0Cittc2dpZCAic2luZ2xlIGFyZyBmb3JtYXQgbXVzdCBiZSBzeW1tZXRyaWMgcmFuZ2UiCittc2dzdHIgIkZvcm1hdCBtaXQgZWluZmFjaGVtIEFyZ3VtZW50IG11c3Mgc3ltbWV0cmlzY2hlciBCZXJlaWNoIHNlaW4uIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo3OQorbXNnaWQgIm5lZWQgdHdvIGNvbW1pdCByYW5nZXMiCittc2dzdHIgIkJlbsO2dGlnZSB6d2VpIENvbW1pdC1CZXJlaWNoZS4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6NDEKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08UHLDpGZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxEYXRlaT5dICgtLWVtcHR5IHwgPENvbW1pdC1SZWZlcmVuejE+IFs8Q29tbWl0LVJlZmVyZW56Mj4gIgorIls8Q29tbWl0LVJlZmVyZW56Mz5dXSkiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAicmVzdWx0aWVyZW5kZW4gSW5kZXggbmFjaCA8RGF0ZWk+IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjcKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAibnVyIGRlbiBJbmRleCBsZWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI5Cittc2dpZCAiTWVyZ2luZyIKK21zZ3N0ciAiTWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMxCittc2dpZCAicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIKK21zZ3N0ciAiZWluZW4gTWVyZ2UsIHp1c8OkdHpsaWNoIHp1bSBMZXNlbiwgYXVzZsO8aHJlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzMKK21zZ2lkICIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiCittc2dzdHIgIjMtV2VnZS1NZXJnZSwgd2VubiBrZWluIE1lcmdlIGF1ZiBEYXRlaWViZW5lIGVyZm9yZGVybGljaCBpc3QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM1Cittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAiMy1XZWdlLU1lcmdlIGJlaSBWb3JoYW5kZW5zZWluIHZvbiBoaW56dWdlZsO8Z3Rlbi9lbnRmZXJudGVuIFplaWxlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzcKK21zZ2lkICJzYW1lIGFzIC1tLCBidXQgZGlzY2FyZCB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJnZW5hdSB3aWUgLW0sIGFiZXIgbmljaHQgenVzYW1tZW5nZWbDvGhydGUgRWludHLDpGdlIHZlcndlcmZlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzgKK21zZ2lkICI8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIjxVbnRlcnZlcnplaWNobmlzPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM5Cittc2dpZCAicmVhZCB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB1bmRlciA8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgImRhcyBWZXJ6ZWljaG5pcyBpbiBkZW4gSW5kZXggdW50ZXIgPFVudGVydmVyemVpY2huaXM+LyBsZXNlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDIKK21zZ2lkICJ1cGRhdGUgd29ya2luZyB0cmVlIHdpdGggbWVyZ2UgcmVzdWx0IgorbXNnc3RyICJBcmJlaXRzdmVyemVpY2huaXMgbWl0IGRlbSBFcmdlYm5pcyBkZXMgTWVyZ2VzIGFrdHVhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ0Cittc2dpZCAiZ2l0aWdub3JlIgorbXNnc3RyICJnaXRpZ25vcmUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ1Cittc2dpZCAiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIgorbXNnc3RyICJleHBsaXppdCBpZ25vcmllcnRlIERhdGVpZW4genUgw7xiZXJzY2hyZWliZW4gZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ4Cittc2dpZCAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIgorbXNnc3RyICJkYXMgQXJiZWl0c3ZlcnplaWNobmlzIG5hY2ggZGVtIE1lcmdlIG5pY2h0IHByw7xmZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ5Cittc2dpZCAiZG9uJ3QgdXBkYXRlIHRoZSBpbmRleCBvciB0aGUgd29yayB0cmVlIgorbXNnc3RyICJ3ZWRlciBkZW4gSW5kZXgsIG5vY2ggZGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcyBha3R1YWxpc2llcmVuIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MQorbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAiQW53ZW5kdW5nIGRlcyBGaWx0ZXJzIGbDvHIgcGFydGllbGxlcyBBdXNjaGVja2VuIMO8YmVyc3ByaW5nZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTUzCittc2dpZCAiZGVidWcgdW5wYWNrLXRyZWVzIgorbXNnc3RyICJ1bnBhY2stdHJlZXMgcHJvdG9rb2xsaWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTU3Cittc2dpZCAic3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMiCittc2dzdHIgIlLDvGNrbWVsZHVuZ2VuIHVudGVyZHLDvGNrZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTg4Cittc2dpZCAiWW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIlNpZSBtw7xzc2VuIHp1ZXJzdCBkaWUgS29uZmxpa3RlIGluIElocmVtIGFrdHVlbGxlbiBJbmRleCBhdWZsw7ZzZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMyCittc2dpZCAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT4gfCAtLWtlZXAtYmFzZV0gIgorIls8dXBzdHJlYW0+IFs8YnJhbmNoPl1dIgorbXNnc3RyICIiCisiZ2l0IHJlYmFzZSBbLWldIFs8T3B0aW9uZW4+XSBbLS1leGVjIDxQcm9ncmFtbT5dIFstLW9udG8gPG5ldWUtQmFzaXM+IHwgLS0iCisia2VlcC1iYXNlXSBbPFVwc3RyZWFtPiBbPEJyYW5jaD5dXSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNAorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XSAtLXJvb3QgWzxicmFuY2g+XSIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgWy1pXSBbPE9wdGlvbmVuPl0gWy0tZXhlYyA8UHJvZ3JhbW0+XSBbLS1vbnRvIDxuZXVlLUJhc2lzPl0gLS0iCisicm9vdCBbPEJyYW5jaD5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2Cittc2dpZCAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorbXNnc3RyICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc1IGJ1aWx0aW4vcmViYXNlLmM6MTk5IGJ1aWx0aW4vcmViYXNlLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAiVW5iZW51dHpiYXJlIFRPRE8tTGlzdGU6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIgorbXNnc3RyICJLb25udGUgdGVtcG9yw6RyZXMgVmVyemVpY2huaXMgJyVzJyBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjI5OAorbXNnaWQgImNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICJNYXJraWVydW5nIGF1ZiBpbnRlcmFrdGl2ZW4gUmViYXNlIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNTIKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgdG9kbyBsaXN0IgorbXNnc3RyICJLb25udGUgVE9ETy1MaXN0ZSBuaWNodCBlcnpldWdlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzkxCittc2dpZCAiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iCittc2dzdHIgIkVpbiBCYXNpcy1Db21taXQgbXVzcyBtaXQgLS11cHN0cmVhbSBvZGVyIC0tb250byBhbmdlZ2ViZW4gd2VyZGVuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NjEKK21zZ2lkICJnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxPcHRpb25lbj5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NCBidWlsdGluL3JlYmFzZS5jOjE1NTAKK21zZ2lkICIoREVQUkVDQVRFRCkga2VlcCBlbXB0eSBjb21taXRzIgorbXNnc3RyICIoVkVSQUxURVQpIGxlZXJlIENvbW1pdHMgYmVoYWx0ZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc4IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI4Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICJDb21taXRzIG1pdCBsZWVyZXIgQmVzY2hyZWlidW5nIGVybGF1YmVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4MAorbXNnaWQgInJlYmFzZSBtZXJnZSBjb21taXRzIgorbXNnc3RyICJSZWJhc2UgYXVmIE1lcmdlLUNvbW1pdHMgYXVzZsO8aHJlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODIKK21zZ2lkICJrZWVwIG9yaWdpbmFsIGJyYW5jaCBwb2ludHMgb2YgY291c2lucyIKK21zZ3N0ciAib3JpZ2luYWxlIEJyYW5jaC1QdW5rdGUgZGVyIENvdXNpbnMgYmVoYWx0ZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg0Cittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISIKK21zZ3N0ciAiQ29tbWl0cyB2ZXJzY2hpZWJlbiwgZGllIG1pdCBzcXVhc2ghL2ZpeHVwISBiZWdpbm5lbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODUKK21zZ2lkICJzaWduIGNvbW1pdHMiCittc2dzdHIgIkNvbW1pdHMgc2lnbmllcmVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NyBidWlsdGluL3JlYmFzZS5jOjE0OTAKK21zZ2lkICJkaXNwbGF5IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICIiCisiWnVzYW1tZW5mYXNzdW5nIGRlciBVbnRlcnNjaGllZGUgZ2VnZW7DvGJlciBkZW0gVXBzdHJlYW0tQnJhbmNoIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4OQorbXNnaWQgImNvbnRpbnVlIHJlYmFzZSIKK21zZ3N0ciAiUmViYXNlIGZvcnRzZXR6ZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkxCittc2dpZCAic2tpcCBjb21taXQiCittc2dzdHIgIkNvbW1pdCBhdXNsYXNzZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkyCittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJkaWUgVE9ETy1MaXN0ZSBiZWFyYmVpdGVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NAorbXNnaWQgInNob3cgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgImRlbiBha3R1ZWxsZW4gUGF0Y2ggYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk3Cittc2dpZCAic2hvcnRlbiBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgIkNvbW1pdC1JRHMgaW4gZGVyIFRPRE8tTGlzdGUgdmVya8O8cnplbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTkKK21zZ2lkICJleHBhbmQgY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJDb21taXQtSURzIGluIGRlciBUT0RPLUxpc3RlIGVyd2VpdGVybiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDEKK21zZ2lkICJjaGVjayB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJkaWUgVE9ETy1MaXN0ZSBwcsO8ZmVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMworbXNnaWQgInJlYXJyYW5nZSBmaXh1cC9zcXVhc2ggbGluZXMiCittc2dzdHIgImZpeHVwL3NxdWFzaC1aZWlsZW4gdW1vcmRuZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA1Cittc2dpZCAiaW5zZXJ0IGV4ZWMgY29tbWFuZHMgaW4gdG9kbyBsaXN0IgorbXNnc3RyICJcImV4ZWNcIi1CZWZlaGxlIGluIFRPRE8tTGlzdGUgZWluZsO8Z2VuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwNgorbXNnaWQgIm9udG8iCittc2dzdHIgImF1ZiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDkKK21zZ2lkICJyZXN0cmljdC1yZXZpc2lvbiIKK21zZ3N0ciAiQmVncmVuenVuZ3Njb21taXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA5Cittc2dpZCAicmVzdHJpY3QgcmV2aXNpb24iCittc2dzdHIgIkJlZ3Jlbnp1bmdzY29tbWl0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxMQorbXNnaWQgInNxdWFzaC1vbnRvIgorbXNnc3RyICJzcXVhc2gtb250byIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTIKK21zZ2lkICJzcXVhc2ggb250byIKK21zZ3N0ciAic3F1YXNoIG9udG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE0Cittc2dpZCAidGhlIHVwc3RyZWFtIGNvbW1pdCIKK21zZ3N0ciAiZGVyIFVwc3RyZWFtLUNvbW1pdCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJoZWFkLW5hbWUiCittc2dzdHIgImhlYWQtTmFtZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJoZWFkIG5hbWUiCittc2dzdHIgImhlYWQtTmFtZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjEKK21zZ2lkICJyZWJhc2Ugc3RyYXRlZ3kiCittc2dzdHIgIlJlYmFzZS1TdHJhdGVnaWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIyCittc2dpZCAic3RyYXRlZ3ktb3B0cyIKK21zZ3N0ciAiU3RyYXRlZ2llLU9wdGlvbmVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMworbXNnaWQgInN0cmF0ZWd5IG9wdGlvbnMiCittc2dzdHIgIlN0cmF0ZWdpZS1PcHRpb25lbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjQKK21zZ2lkICJzd2l0Y2gtdG8iCittc2dzdHIgIndlY2hzZWxuIHp1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNQorbXNnaWQgInRoZSBicmFuY2ggb3IgY29tbWl0IHRvIGNoZWNrb3V0IgorbXNnc3RyICJkZXIgQnJhbmNoIG9kZXIgQ29tbWl0IHp1bSBBdXNjaGVja2VuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNgorbXNnaWQgIm9udG8tbmFtZSIKK21zZ3N0ciAib250by1OYW1lIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNgorbXNnaWQgIm9udG8gbmFtZSIKK21zZ3N0ciAib250by1OYW1lIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNworbXNnaWQgImNtZCIKK21zZ3N0ciAiQmVmZWhsIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNworbXNnaWQgInRoZSBjb21tYW5kIHRvIHJ1biIKK21zZ3N0ciAiYXVzenVmw7xocmVuZGVyIEJlZmVobCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MzAgYnVpbHRpbi9yZWJhc2UuYzoxNTg0Cittc2dpZCAiYXV0b21hdGljYWxseSByZS1zY2hlZHVsZSBhbnkgYGV4ZWNgIHRoYXQgZmFpbHMiCittc2dzdHIgImplZGVuIGZlaGxnZXNjaGxhZ2VuZW4gYGV4ZWNgLUJlZmVobCBuZXUgYW5zZXR6ZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTQ2Cittc2dpZCAiLS1bbm8tXXJlYmFzZS1jb3VzaW5zIGhhcyBubyBlZmZlY3Qgd2l0aG91dCAtLXJlYmFzZS1tZXJnZXMiCittc2dzdHIgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXQgb2huZSAtLXJlYmFzZS1tZXJnZXMga2VpbmUgQXVzd2lya3VuZyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICIlcyBlcmZvcmRlcnQgZWluIGludGVyYWt0aXZlcyBSZWJhc2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgJ29udG8nOiAnJXMnIgorbXNnc3RyICJLb25udGUgJ29udG8nIG5pY2h0IGJlc3RpbW1lbjogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcmlnLWhlYWQ6ICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2VzIG9yaWctaGVhZDogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgaW52YWxpZCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogJyVzJyIKK21zZ3N0ciAiSWdub3JpZXJlIHVuZ8O8bHRpZ2VzIGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjcyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAiS2FubiAlcyBuaWNodCBzcGVpY2hlcm4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjg1MworbXNnaWQgImNvdWxkIG5vdCBkZXRlcm1pbmUgSEVBRCByZXZpc2lvbiIKK21zZ3N0ciAiS29ubnRlIEhFQUQtQ29tbWl0IG5pY2h0IGJlc3RpbW1lbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6OTc2IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MQorbXNnaWQgIiIKKyJSZXNvbHZlIGFsbCBjb25mbGljdHMgbWFudWFsbHksIG1hcmsgdGhlbSBhcyByZXNvbHZlZCB3aXRoXG4iCisiXCJnaXQgYWRkL3JtIDxjb25mbGljdGVkX2ZpbGVzPlwiLCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIllvdSBjYW4gaW5zdGVhZCBza2lwIHRoaXMgY29tbWl0OiBydW4gXCJnaXQgcmViYXNlIC0tc2tpcFwiLlxuIgorIlRvIGFib3J0IGFuZCBnZXQgYmFjayB0byB0aGUgc3RhdGUgYmVmb3JlIFwiZ2l0IHJlYmFzZVwiLCBydW4gXCJnaXQgcmViYXNlIC0tIgorImFib3J0XCIuIgorbXNnc3RyICIiCisiTMO2c2VuIFNpZSBhbGxlIEtvbmZsaWt0ZSBtYW51ZWxsIGF1ZiwgbWFya2llcmVuIFNpZSBkaWVzZSBtaXRcbiIKKyJcImdpdCBhZGQvcm0gPGtvbmZsaWt0YmVoYWZ0ZXRlX0RhdGVpZW4+XCIgdW5kIGbDvGhyZW4gU2llIGRhbm5cbiIKKyJcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIGF1cy5cbiIKKyJTaWUga8O2bm5lbiBhdWNoIHN0YXR0ZGVzc2VuIGRpZXNlbiBDb21taXQgYXVzbGFzc2VuLCBpbmRlbVxuIgorIlNpZSBcImdpdCByZWJhc2UgLS1za2lwXCIgYXVzZsO8aHJlbi5cbiIKKyJVbSBhYnp1YnJlY2hlbiB1bmQgenVyw7xjayB6dW0gWnVzdGFuZCB2b3IgXCJnaXQgcmViYXNlXCIgenUgZ2VsYW5nZW4sXG4iCisiZsO8aHJlbiBTaWUgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiBhdXMuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorImdpdCBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSBwcmVwYXJpbmcgdGhlIHBhdGNoZXMgdG8gcmVwbGF5XG4iCisidGhlc2UgcmV2aXNpb25zOlxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIkFzIGEgcmVzdWx0LCBnaXQgY2Fubm90IHJlYmFzZSB0aGVtLiIKK21zZ3N0ciAiIgorIlxuIgorIkdpdCBzdGVsbHRlIGVpbmVuIEZlaGxlciBiZWltIFZvcmJlcmVpdGVuIGRlciBQYXRjaGVzIHp1clxuIgorIndpZWRlcmhvbHRlbiBBbndlbmR1bmcgZGVyIFJldmlzaW9uZW4gZmVzdDpcbiIKKyJcbiIKKyIgICAgJXNcbiIKKyJcbiIKKyJJbmZvbGdlIGRlc3NlbiBrYW5uIEdpdCBhdWYgZGllc2VuIFJldmlzaW9uZW4gUmViYXNlIG5pY2h0XG4iCisiYXVzZsO8aHJlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5yZWNvZ25pemVkIGVtcHR5IHR5cGUgJyVzJzsgdmFsaWQgdmFsdWVzIGFyZSBcImRyb3BcIiwgXCJrZWVwXCIsIGFuZCBcImFzayIKKyJcIi4iCittc2dzdHIgIiIKKyJuaWNodCBlcmthbm50ZXIgbGVlcmVyIFR5cCAnJXMnOyBHw7xsdGlnZSBXZXJ0ZSBzaW5kIFwiZHJvcFwiLCBcImtlZXBcIiwgdW5kICIKKyJcImFza1wiLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlc1xuIgorIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC5cbiIKKyJTZWUgZ2l0LXJlYmFzZSgxKSBmb3IgZGV0YWlscy5cbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAnPGJyYW5jaD4nXG4iCisiXG4iCittc2dzdHIgIiIKKyIlc1xuIgorIkJpdHRlIGdlYmVuIFNpZSBkZW4gQnJhbmNoIGFuLCBnZWdlbiB3ZWxjaGVuIFNpZSBcInJlYmFzZVwiIGF1c2bDvGhyZW4gIgorIm3DtmNodGVuLlxuIgorIlNpZWhlIGdpdC1yZWJhc2UoMSkgZsO8ciBEZXRhaWxzLlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlICc8QnJhbmNoPidcbiIKKyJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiV2VubiBTaWUgVHJhY2tpbmctSW5mb3JtYXRpb25lbiBmw7xyIGRpZXNlbiBCcmFuY2ggc2V0emVuIG3DtmNodGVuLFxuIgorImvDtm5uZW4gU2llIGRpZXMgdHVuIG1pdDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88QnJhbmNoPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDcKK21zZ2lkICJleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICJcImV4ZWNcIi1CZWZlaGxlIGvDtm5uZW4ga2VpbmUgbmV1ZW4gWmVpbGVuIGVudGhhbHRlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDUxCittc2dpZCAiZW1wdHkgZXhlYyBjb21tYW5kIgorbXNnc3RyICJMZWVyZXIgXCJleGVjXCItQmVmZWhsLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDgxCittc2dpZCAicmViYXNlIG9udG8gZ2l2ZW4gYnJhbmNoIGluc3RlYWQgb2YgdXBzdHJlYW0iCittc2dzdHIgIlJlYmFzZSBhdWYgYW5nZWdlYmVuZW4gQnJhbmNoIGFuc3RlbGxlIGRlcyBVcHN0cmVhbS1CcmFuY2hlcyBhdXNmw7xocmVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODMKK21zZ2lkICJ1c2UgdGhlIG1lcmdlLWJhc2Ugb2YgdXBzdHJlYW0gYW5kIGJyYW5jaCBhcyB0aGUgY3VycmVudCBiYXNlIgorbXNnc3RyICJOdXR6ZSBkaWUgTWVyZ2UtQmFzaXMgdm9uIFVwc3RyZWFtIHVuZCBCcmFuY2ggYWxzIGRpZSBha3R1ZWxsZSBCYXNpcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg1Cittc2dpZCAiYWxsb3cgcHJlLXJlYmFzZSBob29rIHRvIHJ1biIKK21zZ3N0ciAiQXVzZsO8aHJ1bmcgZGVzIHByZS1yZWJhc2UtSG9va3MgZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4NworbXNnaWQgImJlIHF1aWV0LiBpbXBsaWVzIC0tbm8tc3RhdCIKK21zZ3N0ciAid2VuaWdlciBBdXNnYWJlbiAoaW1wbGl6aWVydCAtLW5vLXN0YXQpIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTMKK21zZ2lkICJkbyBub3Qgc2hvdyBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgIiIKKyJadXNhbW1lbmZhc3N1bmcgZGVyIFVudGVyc2NoaWVkZSBnZWdlbsO8YmVyIGRlbSBVcHN0cmVhbS1CcmFuY2ggdmVyYmVyZ2VuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTYKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5OiBsaW5lIHRvIGVhY2ggY29tbWl0IgorbXNnc3RyICJlaW5lIFwiU2lnbmVkLW9mZi1ieTpcIi1aZWlsZSB6dSBqZWRlbSBDb21taXQgaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5OCBidWlsdGluL3JlYmFzZS5jOjE1MDIgYnVpbHRpbi9yZWJhc2UuYzoxNTA0Cittc2dpZCAicGFzc2VkIHRvICdnaXQgYW0nIgorbXNnc3RyICJhbiAnZ2l0IGFtJyDDvGJlcmdlYmVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDYgYnVpbHRpbi9yZWJhc2UuYzoxNTA4Cittc2dpZCAicGFzc2VkIHRvICdnaXQgYXBwbHknIgorbXNnc3RyICJhbiAnZ2l0IGFwcGx5JyDDvGJlcmdlYmVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTAgYnVpbHRpbi9yZWJhc2UuYzoxNTEzCittc2dpZCAiY2hlcnJ5LXBpY2sgYWxsIGNvbW1pdHMsIGV2ZW4gaWYgdW5jaGFuZ2VkIgorbXNnc3RyICIiCisiQ2hlcnJ5LVBpY2sgYXVmIGFsbGUgQ29tbWl0cyBhdXNmw7xocmVuLCBhdWNoIHdlbm4gZGllc2UgdW52ZXLDpG5kZXJ0IHNpbmQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxNQorbXNnaWQgImNvbnRpbnVlIgorbXNnc3RyICJmb3J0c2V0emVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTgKK21zZ2lkICJza2lwIGN1cnJlbnQgcGF0Y2ggYW5kIGNvbnRpbnVlIgorbXNnc3RyICJkZW4gYWt0dWVsbGVuIFBhdGNoIGF1c2xhc3NlbiB1bmQgZm9ydGZhaHJlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTIwCittc2dpZCAiYWJvcnQgYW5kIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIgorbXNnc3RyICJhYmJyZWNoZW4gdW5kIGRlbiB1cnNwcsO8bmdsaWNoZW4gQnJhbmNoIGF1c2NoZWNrZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyMworbXNnaWQgImFib3J0IGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMiCittc2dzdHIgImFiYnJlY2hlbiwgYWJlciBIRUFEIGFuIGFrdHVlbGxlciBTdGVsbGUgYmVsYXNzZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCBkdXJpbmcgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICJUT0RPLUxpc3RlIHfDpGhyZW5kIGVpbmVzIGludGVyYWt0aXZlbiBSZWJhc2UgYmVhcmJlaXRlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTI3Cittc2dpZCAic2hvdyB0aGUgcGF0Y2ggZmlsZSBiZWluZyBhcHBsaWVkIG9yIG1lcmdlZCIKK21zZ3N0ciAiZGVuIFBhdGNoLCBkZXIgZ2VyYWRlIGFuZ2V3ZW5kZXQgb2RlciB6dXNhbW1lbmdlZsO8aHJ0IHdpcmQsIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzAKK21zZ2lkICJ1c2UgYXBwbHkgc3RyYXRlZ2llcyB0byByZWJhc2UiCittc2dzdHIgIlN0cmF0ZWdpZW4gdm9uICdnaXQgYW0nIGJlaSBSZWJhc2UgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzQKK21zZ2lkICJ1c2UgbWVyZ2luZyBzdHJhdGVnaWVzIHRvIHJlYmFzZSIKK21zZ3N0ciAiTWVyZ2UtU3RyYXRlZ2llbiBiZWltIFJlYmFzZSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzOAorbXNnaWQgImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIgorbXNnc3RyICJkZW4gQmVudXR6ZXIgZGllIExpc3RlIGRlciBDb21taXRzIGbDvHIgZGVuIFJlYmFzZSBiZWFyYmVpdGVuIGxhc3NlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTQyCittc2dpZCAiKERFUFJFQ0FURUQpIHRyeSB0byByZWNyZWF0ZSBtZXJnZXMgaW5zdGVhZCBvZiBpZ25vcmluZyB0aGVtIgorbXNnc3RyICIiCisiKFZFUkFMVEVUKSBWZXJzdWNoZSwgTWVyZ2VzIHdpZWRlcmhlcnp1c3RlbGxlbiBhbnN0YXR0IHNpZSB6dSBpZ25vcmllcmVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NDcKK21zZ2lkICJob3cgdG8gaGFuZGxlIGNvbW1pdHMgdGhhdCBiZWNvbWUgZW1wdHkiCittc2dzdHIgIndpZSBzb2xsZW4gQ29tbWl0cyBiZWhhbmRlbHQgd2VyZGVuLCBkaWUgbGVlciB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NAorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEgdW5kZXIgLWkiCittc2dzdHIgImJlaSAtaSBDb21taXRzIHZlcnNjaGllYmVuLCBkaWUgbWl0IHNxdWFzaCEvZml4dXAhIGJlZ2lubmVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NjAKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIgorbXNnc3RyICJhdXRvbWF0aXNjaGVyIFN0YXNoL1N0YXNoLVBvcCBkYXZvciB1bmQgZGFuYWNoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NjIKK21zZ2lkICJhZGQgZXhlYyBsaW5lcyBhZnRlciBlYWNoIGNvbW1pdCBvZiB0aGUgZWRpdGFibGUgbGlzdCIKK21zZ3N0ciAiZXhlYy1aZWlsZW4gbmFjaCBqZWRlbSBDb21taXQgZGVyIGVkaXRpZXJiYXJlbiBMaXN0ZSBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTY2Cittc2dpZCAiYWxsb3cgcmViYXNpbmcgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICJSZWJhc2Ugdm9uIENvbW1pdHMgbWl0IGxlZXJlciBCZXNjaHJlaWJ1bmcgZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3MAorbXNnaWQgInRyeSB0byByZWJhc2UgbWVyZ2VzIGluc3RlYWQgb2Ygc2tpcHBpbmcgdGhlbSIKK21zZ3N0ciAiIgorInZlcnN1Y2hlbiwgUmViYXNlIG1pdCBNZXJnZXMgYXVzenVmw7xocmVuLCBhbnN0YXR0IGRpZXNlIHp1IMO8YmVyc3ByaW5nZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3MworbXNnaWQgInVzZSAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIHRvIHJlZmluZSB1cHN0cmVhbSIKK21zZ3N0ciAiIgorIidnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIGJlbnV0emVuLCB1bSBVcHN0cmVhbS1CcmFuY2ggenUgYmVzdGltbWVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzUKK21zZ2lkICJ1c2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJhbmdlZ2ViZW5lIE1lcmdlLVN0cmF0ZWdpZSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3NyBidWlsdGluL3JldmVydC5jOjExNQorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAiT3B0aW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzgKK21zZ2lkICJwYXNzIHRoZSBhcmd1bWVudCB0aHJvdWdoIHRvIHRoZSBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiQXJndW1lbnQgenVyIE1lcmdlLVN0cmF0ZWdpZSBkdXJjaHJlaWNoZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU4MQorbXNnaWQgInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiCittc2dzdHIgIlJlYmFzZSBhdWYgYWxsZSBlcnJlaWNoYmFyZW4gQ29tbWl0cyBiaXMgenVtIFJvb3QtQ29tbWl0IGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU5OAorbXNnaWQgIiIKKyJ0aGUgcmViYXNlLnVzZUJ1aWx0aW4gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkIVxuIgorIlNlZSBpdHMgZW50cnkgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiRGllIFVudGVyc3TDvHR6dW5nIGbDvHIgcmViYXNlLnVzZUJ1aWx0aW4gd3VyZGUgZW50ZmVybnQhXG4iCisiU2llaGUgZGVzc2VuIEVpbnRyYWcgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZsO8ciBEZXRhaWxzLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjA0Cittc2dpZCAiSXQgbG9va3MgbGlrZSAnZ2l0IGFtJyBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIidnaXQtYW0nIHNjaGVpbnQgaW0gR2FuZ2UgenUgc2Vpbi4gS2FubiBSZWJhc2UgbmljaHQgZHVyY2hmw7xocmVuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjQ1Cittc2dpZCAiIgorImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgaXMgZGVwcmVjYXRlZC4gVXNlIC0tcmViYXNlLW1lcmdlcyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIidnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzJyBpc3QgdmVyYWx0ZXQuIEJlbnV0emVuIFNpZSBzdGF0dGRlc3NlbiAnLS0iCisicmViYXNlLW1lcmdlcycuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTAKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tb250byciCittc2dzdHIgIictLWtlZXAtYmFzZScga2FubiBuaWNodCBtaXQgJy0tb250bycga29tYmluaWVydCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1MgorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1yb290JyIKK21zZ3N0ciAiJy0ta2VlcC1iYXNlJyBrYW5uIG5pY2h0IG1pdCAnLS1yb290JyBrb21iaW5pZXJ0IHdlcmRlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjU2Cittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiS2VpbiBSZWJhc2UgaW0gR2FuZ2U/IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NjAKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIiIKKyJEaWUgLS1lZGl0LXRvZG8gQWt0aW9uIGthbm4gbnVyIHfDpGhyZW5kIGVpbmVzIGludGVyYWt0aXZlbiBSZWJhc2UgdmVyd2VuZGV0ICIKKyJ3ZXJkZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2ODMKK21zZ2lkICJDYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJLYW5uIEhFQUQgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY5NQorbXNnaWQgIiIKKyJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKyJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKK21zZ3N0ciAiIgorIlNpZSBtw7xzc2VuIGFsbGUgTWVyZ2UtS29uZmxpa3RlIGVkaXRpZXJlbiB1bmQgZGllc2UgZGFublxuIgorIm1pdHRlbHMgXCJnaXQgYWRkXCIgYWxzIGF1ZmdlbMO2c3QgbWFya2llcmVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MTQKK21zZ2lkICJjb3VsZCBub3QgZGlzY2FyZCB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJLb25udGUgw4RuZGVydW5nZW4gaW0gQXJiZWl0c3ZlcnplaWNobmlzIG5pY2h0IHZlcndlcmZlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTczMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbW92ZSBiYWNrIHRvICVzIgorbXNnc3RyICJLb25udGUgbmljaHQgenUgJXMgenVyw7xja2dlaGVuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAlcyBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JXNcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQlc1xuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuXG4iCittc2dzdHIgIiIKKyJFcyBzaWVodCBzbyBhdXMsIGFscyBvYiBlcyBkYXMgVmVyemVpY2huaXMgJXMgYmVyZWl0cyBnaWJ0XG4iCisidW5kIGVzIGvDtm5udGUgZWluIGFuZGVyZXIgUmViYXNlIGltIEdhbmdlIHNlaW4uIFdlbm4gZGFzIGRlciBGYWxsIGlzdCxcbiIKKyJwcm9iaWVyZW4gU2llIGJpdHRlXG4iCisiXHQlc1xuIgorIldlbm4gZGFzIG5pY2h0IGRlciBGYWxsIGlzdCwgcHJvYmllcmVuIFNpZSBiaXR0ZVxuIgorIlx0JXNcbiIKKyJ1bmQgZsO8aHJlbiBTaWUgZGllc2VuIEJlZmVobCBub2NobWFsIGF1cy4gRXMgd2lyZCBhbmdlaGFsdGVuLCBmYWxscyBub2NoXG4iCisiZXR3YXMgU2Now7x0emVuc3dlcnRlcyB2b3JoYW5kZW4gaXN0LlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4MDYKK21zZ2lkICJzd2l0Y2ggYEMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIlNjaGFsdGVyIGBDJyBlcndhcnRldCBlaW5lbiBudW1lcmlzY2hlbiBXZXJ0LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gbW9kZTogJXMiCittc2dzdHIgIlVuYmVrYW5udGVyIE1vZHVzOiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODY5Cittc2dpZCAiLS1zdHJhdGVneSByZXF1aXJlcyAtLW1lcmdlIG9yIC0taW50ZXJhY3RpdmUiCittc2dzdHIgIi0tc3RyYXRlZ3kgZXJmb3JkZXJ0IC0tbWVyZ2Ugb2RlciAtLWludGVyYWN0aXZlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4OTkKK21zZ2lkICJjYW5ub3QgY29tYmluZSBhcHBseSBvcHRpb25zIHdpdGggbWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiIgorIk9wdGlvbmVuIGbDvHIgXCJhbVwiIGvDtm5uZW4gbmljaHQgbWl0IE9wdGlvbmVuIGbDvHIgXCJtZXJnZVwiIGtvbWJpbmllcnQgIgorIndlcmRlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHJlYmFzZSBiYWNrZW5kOiAlcyIKK21zZ3N0ciAiVW5iZWthbm50ZXMgUmViYXNlLUJhY2tlbmQ6ICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MzcKK21zZ2lkICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMgcmVxdWlyZXMgLS1leGVjIG9yIC0taW50ZXJhY3RpdmUiCittc2dzdHIgIi0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyBlcmZvcmRlcnQgLS1leGVjIG9kZXIgLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTU3Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorbXNnc3RyICIiCisiJy0tcHJlc2VydmUtbWVyZ2VzJyBrYW5uIG5pY2h0IG1pdCAnLS1yZWJhc2UtbWVyZ2VzJyBrb21iaW5pZXJ0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk2MQorbXNnaWQgIiIKKyJlcnJvcjogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnIgorbXNnc3RyICIiCisiRmVobGVyOiAnLS1wcmVzZXJ2ZS1tZXJnZXMnIGthbm4gbmljaHQgbWl0ICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnICIKKyJrb21iaW5pZXJ0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk4NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFVwc3RyZWFtICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk5MQorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgbmV3IHJvb3QgY29tbWl0IgorbXNnc3RyICJLb25udGUgbmV1ZW4gUm9vdC1Db21taXQgbmljaHQgZXJzdGVsbGVuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSB3aXRoIGJyYW5jaCIKK21zZ3N0ciAiJyVzJzogYmVuw7Z0aWdlIGdlbmF1IGVpbmUgTWVyZ2UtQmFzaXMgbWl0IGRlbSBCcmFuY2giCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjAyMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UiCittc2dzdHIgIiclcyc6IGJlbsO2dGlnZSBnZW5hdSBlaW5lIE1lcmdlLUJhc2lzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQgJyVzJyIKK21zZ3N0ciAiJyVzJyB6ZWlndCBhdWYga2VpbmVuIGfDvGx0aWdlbiBDb21taXQuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoL2NvbW1pdCAnJXMnIgorbXNnc3RyICJmYXRhbDogQnJhbmNoL0NvbW1pdCAnJXMnIG5pY2h0IGdlZnVuZGVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNjIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlZjogJXMiCittc2dzdHIgIlJlZmVyZW56IG5pY2h0IGdlZnVuZGVuOiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDczCittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCB0byBhIHJldmlzaW9uIgorbXNnc3RyICJLb25udGUgSEVBRCB6dSBrZWluZW0gQ29tbWl0IGF1ZmzDtnNlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjExMQorbXNnaWQgIkNhbm5vdCBhdXRvc3Rhc2giCittc2dzdHIgIkthbm4gYXV0b21hdGlzY2hlbiBTdGFzaCBuaWNodCBlcnpldWdlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHN0YXNoIHJlc3BvbnNlOiAnJXMnIgorbXNnc3RyICJVbmVyd2FydGV0ZSAnc3Rhc2gnLUFudHdvcnQ6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAiS29ubnRlIFZlcnplaWNobmlzIGbDvHIgJyVzJyBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICVzXG4iCittc2dzdHIgIkF1dG9tYXRpc2NoZW4gU3Rhc2ggZXJ6ZXVndDogJXNcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTI2Cittc2dpZCAiY291bGQgbm90IHJlc2V0IC0taGFyZCIKK21zZ3N0ciAiS29ubnRlICdyZXNldCAtLWhhcmQnIG5pY2h0IGF1c2bDvGhyZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMzUKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJCaXR0ZSBjb21taXR0ZW4gU2llIGRpZSDDhG5kZXJ1bmdlbiBvZGVyIGJlbnV0emVuIFNpZSBcInN0YXNoXCIuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN3aXRjaCB0byAlcyIKK21zZ3N0ciAiS29ubnRlIG5pY2h0IHp1ICVzIHdlY2hzZWxuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTgwCittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLiIKK21zZ3N0ciAiSEVBRCBpc3QgYWt0dWVsbC4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAlcyBpcyB1cCB0byBkYXRlLlxuIgorbXNnc3RyICJBa3R1ZWxsZXIgQnJhbmNoICVzIGlzdCBhdWYgZGVtIG5ldWVzdGVuIFN0YW5kLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxOTAKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICJIRUFEIGlzdCBha3R1ZWxsLCBSZWJhc2UgZXJ6d3VuZ2VuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuXG4iCittc2dzdHIgIkFrdHVlbGxlciBCcmFuY2ggJXMgaXN0IGF1ZiBkZW0gbmV1ZXN0ZW4gU3RhbmQsIFJlYmFzZSBlcnp3dW5nZW4uXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjIwMAorbXNnaWQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIgorbXNnc3RyICJEZXIgXCJwcmUtcmViYXNlIGhvb2tcIiBoYXQgZGVuIFJlYmFzZSB6dXLDvGNrZ2V3aWVzZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyB0byAlczpcbiIKK21zZ3N0ciAiw4RuZGVydW5nZW4genUgJXM6XG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIGZyb20gJXMgdG8gJXM6XG4iCittc2dzdHIgIsOEbmRlcnVuZ2VuIHZvbiAlcyB6dSAlczpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLlxuIgorbXNnc3RyICIiCisiWnVuw6RjaHN0IHdpcmQgZGVyIEJyYW5jaCB6dXLDvGNrZ2VzcHVsdCwgdW0gSWhyZSDDhG5kZXJ1bmdlbiBkYXJhdWYgbmV1ICIKKyJhbnp1d2VuZGVuLi4uXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjI0NAorbXNnaWQgIkNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAiS29ubnRlIEhFQUQgbmljaHQgbG9zbMO2c2VuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICVzIHRvICVzLlxuIgorbXNnc3RyICJTcHVsZSAlcyB2b3IgenUgJXMuXG4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MzMKK21zZ2lkICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKK21zZ3N0ciAiZ2l0IHJlY2VpdmUtcGFjayA8R2l0LVZlcnplaWNobmlzPiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4MjEKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeVxuIgorImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisid2l0aCB3aGF0IHlvdSBwdXNoZWQsIGFuZCB3aWxsIHJlcXVpcmUgJ2dpdCByZXNldCAtLWhhcmQnIHRvIG1hdGNoXG4iCisidGhlIHdvcmsgdHJlZSB0byBIRUFELlxuIgorIlxuIgorIllvdSBjYW4gc2V0IHRoZSAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvXG4iCisiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWVcbiIKKyJvdGhlciB3YXkuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXRcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyJTdGFuZGFyZG3DpMOfaWcgd2lyZCBkaWUgQWt0dWFsaXNpZXJ1bmcgZGVzIGFrdHVlbGxlbiBCcmFuY2hlcyBpbiBlaW5lbVxuIgorIk5pY2h0LUJhcmUtUmVwb3NpdG9yeSB6dXLDvGNrZ2V3aWVzZW4sIGRhIGRpZXMgZGVuIEluZGV4IHVuZCBkYXMgQXJiZWl0cy1cbiIKKyJ2ZXJ6ZWljaG5pcyBpbmtvbnNpc3RlbnQgenUgZGVtIG1hY2hlbiB3w7xyZGUsIHdhcyBTaWUgZ2VwdXNoZWQgaGFiZW4sIHVuZFxuIgorIidnaXQgcmVzZXQgLS1oYXJkJyBlcmZvcmRlcmxpY2ggd8OkcmUsIGRhbWl0IGRhcyBBcmJlaXRzdmVyemVpY2huaXMgSEVBRFxuIgorImVudHNwcmljaHQuXG4iCisiXG4iCisiU2llIGvDtm5udGVuIGRpZSBLb25maWd1cmF0aW9uc3ZhcmlhYmxlICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBpbVxuIgorIlJlbW90ZS1SZXBvc2l0b3J5IGF1ZiAnaWdub3JlJyBvZGVyICd3YXJuJyBzZXR6ZW4sIHVtIGRlbiBQdXNoIGluIGRlblxuIgorImFrdHVlbGxlbiBCcmFuY2ggenUgZXJsYXViZW47IGRpZXMgd2lyZCBqZWRvY2ggbmljaHQgZW1wZm9obGVuIGF1w59lclxuIgorIlNpZSBzdGVsbGVuIGR1cmNoIGFuZGVyZSBXZWdlIGRpZSBBa3R1YWxpdMOkdCBkZXMgQXJiZWl0c3ZlcnplaWNobmlzc2VzXG4iCisiZ2VnZW7DvGJlciBkZW0gZ2VwdXNodGVuIFN0YW5kIHNpY2hlci5cbiIKKyJcbiIKKyJVbSBkaWVzZSBNZWxkdW5nIHp1IHVudGVyZHLDvGNrZW4gdW5kIGRhcyBTdGFuZGFyZHZlcmhhbHRlbiB6dSBiZWhhbHRlbixcbiIKKyJzZXR6ZW4gU2llIGRpZSBLb25maWd1cmF0aW9uc3ZhcmlhYmxlICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBhdWZcbiIKKyIncmVmdXNlJy4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODQxCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIGRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBkZW5pZWQsIGJlY2F1c2UgdGhlIG5leHRcbiIKKyInZ2l0IGNsb25lJyB3b24ndCByZXN1bHQgaW4gYW55IGZpbGUgY2hlY2tlZCBvdXQsIGNhdXNpbmcgY29uZnVzaW9uLlxuIgorIlxuIgorIllvdSBjYW4gc2V0ICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvXG4iCisiJ3dhcm4nIG9yICdpZ25vcmUnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBkZWxldGluZyB0aGVcbiIKKyJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlLCB5b3UgY2FuIHNldCBpdCB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyJTdGFuZGFyZG3DpMOfaWcgd2lyZCBkYXMgTMO2c2NoZW4gZGVzIGFrdHVlbGxlbiBCcmFuY2hlcyB6dXLDvGNrZ2V3aWVzZW4sXG4iCisiZGEgYmVpbSBuw6RjaHN0ZW4gJ2dpdCBjbG9uZScga2VpbmUgRGF0ZWllbiBhdXNnZWNoZWNrdCB3ZXJkZW4gd8O8cmRlbixcbiIKKyJ3YXMgenUgVmVyd3VuZGVydW5nIGbDvGhydC5cbiIKKyJcbiIKKyJTaWUga8O2bm5lbiBkaWUgS29uZmlndXJhdGlvbnN2YXJpYWJsZSAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgaW1cbiIKKyJSZW1vdGUtUmVwb3NpdG9yeSBhdWYgJ3dhcm4nIG9kZXIgJ2lnbm9yZScgc2V0emVuLCB1bSBkYXMgTMO2c2NoZW4gZGVzXG4iCisiYWt0dWVsbGVuIEJyYW5jaCBtaXQgb2RlciBvaG5lIFdhcm51bmcgenUgZXJsYXViZW4uXG4iCisiXG4iCisiVW0gZGllc2UgTWVsZHVuZyB6dSB1bnRlcmRyw7xja2VuLCBzZXR6ZW4gU2llIGRpZSBWYXJpYWJsZSBhdWYgJ3JlZnVzZScuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5MzgKK21zZ2lkICJxdWlldCIKK21zZ3N0ciAid2VuaWdlciBBdXNnYWJlbiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTUyCittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIGRpcmVjdG9yeS4iCittc2dzdHIgIlNpZSBtw7xzc2VuIGVpbiBSZXBvc2l0b3J5IGFuZ2ViZW4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjE3Cittc2dpZCAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT08dGltZT5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT5dIFstLSIKKyJyZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGxdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9PFplaXQ+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PFplaXQ+XSBbLS0iCisicmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gWy0tYWxsXSAiCisiPFJlZmVyZW56ZW4+Li4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjIyCittc2dpZCAiIgorImdpdCByZWZsb2cgZGVsZXRlIFstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSAiCisiPHJlZnM+Li4uIgorbXNnc3RyICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8UmVmZXJlbnplbj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjUKK21zZ2lkICJnaXQgcmVmbG9nIGV4aXN0cyA8cmVmPiIKK21zZ3N0ciAiZ2l0IHJlZmxvZyBleGlzdHMgPFJlZmVyZW56PiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo1NjggYnVpbHRpbi9yZWZsb2cuYzo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIiclcycgaXN0IGtlaW4gZ8O8bHRpZ2VyIFplaXRzdGVtcGVsIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nIHJlYWNoYWJsZSBvYmplY3RzLi4uIgorbXNnc3RyICJNYXJraWVyZSBuaWNodCBlcnJlaWNoYmFyZSBPYmpla3RlLi4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgbm93aGVyZSEiCittc2dzdHIgIiVzIHplaWd0IGF1ZiBuaWNodHMhIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY5NgorbXNnaWQgIm5vIHJlZmxvZyBzcGVjaWZpZWQgdG8gZGVsZXRlIgorbXNnc3RyICJLZWluIFJlZmxvZyB6dW0gTMO2c2NoZW4gYW5nZWdlYmVuLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmVmbG9nOiAlcyIKK21zZ3N0ciAiS2VpbiBSZWZsb2c6ICVzIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjcxMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyByZWZsb2cgZm9yICclcyciCittc2dzdHIgIktlaW4gUmVmbG9nIGbDvHIgJyVzJy4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmIGZvcm1hdDogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VzIEZvcm1hdCBmw7xyIFJlZmVyZW56ZW46ICVzIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc2NQorbXNnaWQgImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iCittc2dzdHIgImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOAorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxCcmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxOYW1lPiA8VVJMPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOSBidWlsdGluL3JlbW90ZS5jOjM5Cittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgImdpdCByZW1vdGUgcmVuYW1lIDxhbHQ+IDxuZXU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NDQKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDxOYW1lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMSBidWlsdGluL3JlbW90ZS5jOjQ5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8TmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxCcmFuY2g+KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMgorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxOYW1lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMworbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8TmFtZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjQKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxHcnVwcGU+IHwgPFJlbW90ZT4pLi4uXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNQorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxOYW1lPiA8QnJhbmNoPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNiBidWlsdGluL3JlbW90ZS5jOjc1Cittc2dpZCAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8TmFtZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjcgYnVpbHRpbi9yZW1vdGUuYzo4MAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxOYW1lPiA8bmV1ZVVSTD4gWzxhbHRlVVJMPl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjggYnVpbHRpbi9yZW1vdGUuYzo4MQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtZT4gPG5ld3VybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8TmFtZT4gPG5ldWVVUkw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI5IGJ1aWx0aW4vcmVtb3RlLmM6ODIKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPE5hbWU+IDxVUkw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjM0Cittc2dpZCAiZ2l0IHJlbW90ZSBhZGQgWzxvcHRpb25zPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIGFkZCBbPE9wdGlvbmVuPl0gPE5hbWU+IDxVUkw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8TmFtZT4gPEJyYW5jaD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTUKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxOYW1lPiA8QnJhbmNoPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MAorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2hvdyBbPE9wdGlvbmVuPl0gPE5hbWU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY1Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWzxPcHRpb25lbj5dIDxOYW1lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MAorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBbPE9wdGlvbmVuPl0gWzxHcnVwcGU+IHwgPGV4dGVybmVzUmVwb3NpdG9yeT5dLi4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICJBa3R1YWxpc2llcmUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorIi0tbWlycm9yIGlzdCBnZWbDpGhybGljaCB1bmQgdmVyYWx0ZXQ7IGJpdHRlXG4iCisiXHQgYmVudXR6ZW4gU2llIHN0YXR0ZGVzc2VuIC0tbWlycm9yPWZldGNoIG9kZXIgLS1taXJyb3I9cHVzaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJ1bmJla2FubnRlcyBBcmd1bWVudCBmw7xyIE9wdGlvbiAtLW1pcnJvcjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY0Cittc2dpZCAiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIKK21zZ3N0ciAiZGllIFJlbW90ZS1CcmFuY2hlcyBhbmZvcmRlcm4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2Cittc2dpZCAiaW1wb3J0IGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMgd2hlbiBmZXRjaGluZyIKK21zZ3N0ciAiYWxsZSBUYWdzIHVuZCB2ZXJidW5kZW5lIE9iamVrdGUgYmVpbSBBbmZvcmRlcm4gaW1wb3J0aWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY5Cittc2dpZCAib3IgZG8gbm90IGZldGNoIGFueSB0YWcgYXQgYWxsICgtLW5vLXRhZ3MpIgorbXNnc3RyICJvZGVyIGZvcmRlcmUgZ2FyIGtlaW5lIFRhZ3MgYW4gKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcxCittc2dpZCAiYnJhbmNoKGVzKSB0byB0cmFjayIKK21zZ3N0ciAiQnJhbmNoKGVzKSB6dXIgw5xiZXJuYWhtZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzIKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICJIYXVwdGJyYW5jaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzQKK21zZ2lkICJzZXQgdXAgcmVtb3RlIGFzIGEgbWlycm9yIHRvIHB1c2ggdG8gb3IgZmV0Y2ggZnJvbSIKK21zZ3N0ciAiIgorIkF1ZnNldHplbiBkZXMgUmVtb3RlLVJlcG9zaXRvcmllcyBhbHMgU3BpZWdlbC1SZXBvc2l0b3J5IGbDvHIgXCJwdXNoXCIgdW5kICIKKyJcImZldGNoXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg2Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb24gLS1taXJyb3Iga2FubiBuaWNodCBtaXQgZGVyIEFuZ2FiZSBlaW5lcyBIYXVwdGJyYW5jaGVzIHZlcndlbmRldCAiCisid2VyZGVuLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODgKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICIiCisiRGllIEFuZ2FiZSB2b24genUgZm9sZ2VuZGVuIEJyYW5jaGVzIGthbm4gbnVyIG1pdCBkZW0gQW5mb3JkZXJuIHZvbiAiCisiU3BpZWdlbGFyY2hpdmVuIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5NSBidWlsdGluL3JlbW90ZS5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJleHRlcm5lcyBSZXBvc2l0b3J5ICVzIGV4aXN0aWVydCBiZXJlaXRzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5OSBidWlsdGluL3JlbW90ZS5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgorbXNnc3RyICInJXMnIGlzdCBrZWluIGfDvGx0aWdlciBOYW1lIGbDvHIgZWluIFJlbW90ZS1SZXBvc2l0b3J5IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgbWFzdGVyICclcyciCittc2dzdHIgIktvbm50ZSBzeW1ib2xpc2NoZSBSZWZlcmVueiBmw7xyIEhhdXB0YnJhbmNoIHZvbiAnJXMnIG5pY2h0IGVpbnJpY2h0ZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICJLb25udGUgRmV0Y2gtTWFwIGbDvHIgUmVmc3BlYyAlcyBuaWNodCBiZWtvbW1lbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NTMgYnVpbHRpbi9yZW1vdGUuYzo0NjEKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICIow7xiZXJlaW5zdGltbWVuZCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDY1Cittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIihsw7ZzY2hlKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICJrb25udGUgJyVzJyBuaWNodCBzZXR6ZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJXMgY29uZmlndXJhdGlvbiByZW1vdGUucHVzaERlZmF1bHQgaW46XG4iCisiXHQlczolZFxuIgorIm5vdyBuYW1lcyB0aGUgbm9uLWV4aXN0ZW50IHJlbW90ZSAnJXMnIgorbXNnc3RyICIiCisiRGllICVzIEtvbmZpZ3VyYXRpb24gcmVtb3RlLnB1c2hEZWZhdWx0IGluOlxuIgorIlx0JXM6JWRcbiIKKyJiZW5lbm50IGpldHp0IGRhcyBuaWNodCBleGlzdGllcmVuZGUgUmVtb3RlLVJlcG9zaXRvcnkgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2ODkgYnVpbHRpbi9yZW1vdGUuYzo4MzIgYnVpbHRpbi9yZW1vdGUuYzo5NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICclcyciCittc2dzdHIgIktlaW4gc29sY2hlcyBSZW1vdGUtUmVwb3NpdG9yeTogJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIktvbm50ZSBTZWt0aW9uICclcycgaW4gS29uZmlndXJhdGlvbiBuaWNodCBuYWNoICclcycgdW1iZW5lbm5lbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisiS2VpbmUgQWt0dWFsaXNpZXJ1bmcgZGVyIG5pY2h0IHN0YW5kYXJkbcOkw59pZ2VuIFJlZnNwZWMgZsO8ciBcImZldGNoXCJcbiIKKyJcdCVzXG4iCisiXHRCaXR0ZSBha3R1YWxpc2llcmVuIFNpZSwgZmFsbHMgbm90d2VuZGlnLCBkaWUgS29uZmlndXJhdGlvbiBtYW51ZWxsLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGzDtnNjaGVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgZXJzdGVsbGVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjg3NgorbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICIiCisiSGlud2VpczogRWluIEJyYW5jaCBhdcOfZXJoYWxiIGRlciByZWZzL3JlbW90ZXMvIEhpZXJhY2hpZSB3dXJkZSBuaWNodCAiCisiZ2Vsw7ZzY2h0O1xuIgorInVtIGRpZXNlbiB6dSBsw7ZzY2hlbiwgYmVudXR6ZW4gU2llOiIKK21zZ3N0clsxXSAiIgorIkhpbndlaXM6IEVpbmlnZSBCcmFuY2hlcyBhdcOfZXJoYWxiIGRlciByZWZzL3JlbW90ZXMvIEhpZXJhcmNoaWUgd3VyZGVuIG5pY2h0ICIKKyJlbnRmZXJudDtcbiIKKyJ1bSBkaWVzZSB6dSBlbnRmZXJuZW4sIGJlbnV0emVuIFNpZToiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAiS29ubnRlIFNla3Rpb24gJyVzJyBuaWNodCBhdXMgS29uZmlndXJhdGlvbiBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIKK21zZ3N0ciAiIG5ldSAod2lyZCBiZWkgbsOkY2hzdGVtIFwiZmV0Y2hcIiBpbiByZW1vdGVzLyVzIGdlc3BlaWNoZXJ0KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OTYKK21zZ2lkICIgdHJhY2tlZCIKK21zZ3N0ciAiIGdlZm9sZ3QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTk4Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiB2ZXJhbHRldCAoYmVudXR6ZW4gU2llICdnaXQgcmVtb3RlIHBydW5lJyB6dW0gTMO2c2NoZW4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDAKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBicmFuY2guJXMubWVyZ2U7IGthbm4gUmViYXNlIG5pY2h0IGF1ZiA+IDEgQnJhbmNoIGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgb250byByZW1vdGUgJXMiCittc2dzdHIgImludGVyYWt0aXZlciBSZWJhc2UgYXVmIFJlbW90ZS1CcmFuY2ggJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgKHdpdGggbWVyZ2VzKSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiaW50ZXJha3RpdmVyIFJlYmFzZSAobWl0IE1lcmdlcykgYXVmIFJlbW90ZS1CcmFuY2ggJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJSZWJhc2UgYXVmIFJlbW90ZS1CcmFuY2ggJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1OQorIywgYy1mb3JtYXQKK21zZ2lkICIgbWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICIgZsO8aHJ0IG1pdCBSZW1vdGUtQnJhbmNoICVzIHp1c2FtbWVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICJmw7xocnQgbWl0IFJlbW90ZS1CcmFuY2ggJXMgenVzYW1tZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlLSpzICAgIGFuZCB3aXRoIHJlbW90ZSAlc1xuIgorbXNnc3RyICIlLSpzICAgIHVuZCBtaXQgUmVtb3RlLUJyYW5jaCAlc1xuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMDgKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgImVyc3RlbGx0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTEKK21zZ2lkICJkZWxldGUiCittc2dzdHIgImdlbMO2c2NodCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE1Cittc2dpZCAidXAgdG8gZGF0ZSIKK21zZ3N0ciAiYWt0dWVsbCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE4Cittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAidm9yc3B1bGJhciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTIxCittc2dpZCAibG9jYWwgb3V0IG9mIGRhdGUiCittc2dzdHIgImxva2FsIG5pY2h0IGFrdHVlbGwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyBlcnp3aW5ndCBWZXJzYW5kdCBuYWNoICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIHZlcnNlbmRldCBuYWNoICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgZXJ6d2luZ3QgVmVyc2FuZCBuYWNoICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyB2ZXJzZW5kZXQgbmFjaCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjA2Cittc2dpZCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiCittc2dzdHIgImtlaW5lIEFiZnJhZ2Ugdm9uIFJlbW90ZS1SZXBvc2l0b3JpZXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAiKiBSZW1vdGUtUmVwb3NpdG9yeSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmV0Y2ggVVJMOiAlcyIKK21zZ3N0ciAiICBVUkwgenVtIEFiaG9sZW46ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzUgYnVpbHRpbi9yZW1vdGUuYzoxMjUxIGJ1aWx0aW4vcmVtb3RlLmM6MTM5MAorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIoa2VpbmUgVVJMKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiAnOicgc2hvdWxkIGFsaWduCisjLiB3aXRoIHRoZSBvbmUgaW4gIiBGZXRjaCBVUkw6ICVzIgorIy4gdHJhbnNsYXRpb24uCisjLgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQ5IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAgVVJMIHp1bSBWZXJzZW5kZW46ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTMgYnVpbHRpbi9yZW1vdGUuYzoxMjU1IGJ1aWx0aW4vcmVtb3RlLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICBIYXVwdGJyYW5jaDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MworbXNnaWQgIihub3QgcXVlcmllZCkiCittc2dzdHIgIihuaWNodCBhYmdlZnJhZ3QpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTUKK21zZ2lkICIodW5rbm93bikiCittc2dzdHIgIih1bmJla2FubnQpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIKK21zZ3N0ciAiIgorIiAgSGF1cHRicmFuY2ggKGV4dGVybmVyIEhFQUQgaXN0IG1laHJkZXV0aWcsIGvDtm5udGUgZWluZXIgZGVyIGZvbGdlbmRlbiAiCisic2Vpbik6XG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIFJlbW90ZS1CcmFuY2g6JXMiCittc2dzdHJbMV0gIiAgUmVtb3RlLUJyYW5jaGVzOiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzQgYnVpbHRpbi9yZW1vdGUuYzoxMzAwCittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKFp1c3RhbmQgbmljaHQgYWJnZWZyYWd0KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgzCittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAgTG9rYWxlciBCcmFuY2gga29uZmlndXJpZXJ0IGbDvHIgJ2dpdCBwdWxsJzoiCittc2dzdHJbMV0gIiAgTG9rYWxlIEJyYW5jaGVzIGtvbmZpZ3VyaWVydCBmw7xyICdnaXQgcHVsbCc6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTEKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIgIExva2FsZSBSZWZlcmVuemVuIHdlcmRlbiB2b24gJ2dpdCBwdXNoJyBnZXNwaWVnZWx0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAgTG9rYWxlIFJlZmVyZW56IGtvbmZpZ3VyaWVydCBmw7xyICdnaXQgcHVzaCclczoiCittc2dzdHJbMV0gIiAgTG9rYWxlIFJlZmVyZW56ZW4ga29uZmlndXJpZXJ0IGbDvHIgJ2dpdCBwdXNoJyVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzE4Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICJzZXR6dCByZWZzL3JlbW90ZXMvPE5hbWU+L0hFQUQgZ2Vtw6TDnyBkZW0gUmVtb3RlLVJlcG9zaXRvcnkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyMAorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgImVudGZlcm50IHJlZnMvcmVtb3Rlcy88TmFtZT4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzM1Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiS2FubiBIRUFEIGRlcyBSZW1vdGUtUmVwb3NpdG9yaWVzIG5pY2h0IGJlc3RpbW1lbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzM3Cittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIiIKKyJNZWhyZXJlIEhhdXB0YnJhbmNoZXMgaW0gUmVtb3RlLVJlcG9zaXRvcnkuIEJpdHRlIHfDpGhsZW4gU2llIGV4cGxpeml0IGVpbmVuICIKKyJhdXMgbWl0OiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIktvbm50ZSAlcyBuaWNodCBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICJrZWluZSBnw7xsdGlnZSBSZWZlcmVuejogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIktvbm50ZSAlcyBuaWNodCBlaW5yaWNodGVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIHdpcmQgdW5yZWZlcmVuemllcnQhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMgd3VyZGUgdW5yZWZlcmVuemllcnQhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAiZW50ZmVybmUgdmVyYWx0ZXRlIEJyYW5jaGVzIHZvbiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIlVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQwMworIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIgKiBbd8O8cmRlIHZlcmFsdGV0ZW4gQnJhbmNoIGVudGZlcm5lbl0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQwNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiKiBbdmVyYWx0ZXRlbiBCcmFuY2ggZW50ZmVybnRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTEKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJlbnRmZXJuZSB2ZXJhbHRldGUgQnJhbmNoZXMgaW0gUmVtb3RlLVJlcG9zaXRvcnkgbmFjaCBcImZldGNoXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUxNCBidWlsdGluL3JlbW90ZS5jOjE1NjggYnVpbHRpbi9yZW1vdGUuYzoxNjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIktlaW4gc29sY2hlcyBSZW1vdGUtUmVwb3NpdG9yeSAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzAKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICJCcmFuY2ggaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNworbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgImtlaW4gUmVtb3RlLVJlcG9zaXRvcnkgYW5nZWdlYmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NTQKK21zZ2lkICJxdWVyeSBwdXNoIFVSTHMgcmF0aGVyIHRoYW4gZmV0Y2ggVVJMcyIKK21zZ3N0ciAibnVyIFVSTHMgZsO8ciBQdXNoIGF1c2dlYmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NTYKK21zZ2lkICJyZXR1cm4gYWxsIFVSTHMiCittc2dzdHIgImFsbGUgVVJMcyBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIFVSTHMgY29uZmlndXJlZCBmb3IgcmVtb3RlICclcyciCittc2dzdHIgIktlaW5lIFVSTHMgZsO8ciBSZW1vdGUtUmVwb3NpdG9yeSAnJXMnIGtvbmZpZ3VyaWVydC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxMAorbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICJVUkxzIGbDvHIgXCJwdXNoXCIgbWFuaXB1bGllcmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MTIKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICJVUkwgaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxNAorbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICJVUkxzIGzDtnNjaGVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MjEKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uZW4gLS1hZGQgdW5kIC0tZGVsZXRlIGvDtm5uZW4gbmljaHQgZ2VtZWluc2FtIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBhbHRlcyBVUkwgRm9ybWF0OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiS2VpbmUgc29sY2hlIFVSTCBnZWZ1bmRlbjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY3MAorbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAiV2VyZGUga2VpbmUgVVJMcyBlbnRmZXJuZW4sIGRpZSBuaWNodCBmw7xyIFwicHVzaFwiIGJlc3RpbW10IHNpbmQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMKK21zZ2lkICJnaXQgcmVwYWNrIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmVwYWNrIFs8T3B0aW9uZW4+XSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOAorbXNnaWQgIiIKKyJJbmNyZW1lbnRhbCByZXBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBiaXRtYXAgaW5kZXhlcy4gIFVzZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9yIGRpc2FibGUgdGhlIHBhY2sud3JpdGViaXRtYXBzIGNvbmZpZ3VyYXRpb24uIgorbXNnc3RyICIiCisiU2Nocml0dHdlaXNlcyBOZXVwYWNrZW4gaXN0IG1pdCBCaXRtYXAtSW5kZXhlbiBpbmtvbXBhdGliZWwuIEJlbnV0emVuIFNpZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9kZXIgZGVha3RpdmllcmVuIFNpZSBkaWUgcGFjay53cml0ZWJpdG1hcHNcbiIKKyJLb25maWd1cmF0aW9uLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTEKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICIiCisiS29ubnRlICdwYWNrLW9iamVjdHMnIGbDvHIgZGFzIE5ldXBhY2tlbiB2b24gT2JqZWt0ZW4gYXVzIHBhcnRpZWxsIGdla2xvbnRlblxuIgorIlJlbW90ZS1SZXBvc2l0b3JpZXMgbmljaHQgc3RhcnRlbi4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMwIGJ1aWx0aW4vcmVwYWNrLmM6NDE2Cittc2dpZCAicmVwYWNrOiBFeHBlY3RpbmcgZnVsbCBoZXggb2JqZWN0IElEIGxpbmVzIG9ubHkgZnJvbSBwYWNrLW9iamVjdHMuIgorbXNnc3RyICIiCisicmVwYWNrOiBFcndhcnRlIFplaWxlbiBtaXQgdm9sbHN0w6RuZGlnZXIgSGV4LU9iamVrdC1JRCBudXIgdm9uIHBhY2stb2JqZWN0cy4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjU0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgIiIKKyJLb25udGUgJ3BhY2stb2JqZWN0cycgZsO8ciBkYXMgTmV1cGFja2VuIHZvbiBPYmpla3RlbiBhdXMgcGFydGllbGwgZ2VrbG9udGVuXG4iCisiUmVtb3RlLVJlcG9zaXRvcmllcyBuaWNodCBhYnNjaGxpZcOfZW4uIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5MgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICJhbGxlcyBpbiBlaW5lIGVpbnppZ2UgUGFjay1EYXRlaSBwYWNrZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk0Cittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAiZ2VuYXUgd2llIC1hLCB1bmVycmVpY2hiYXJlIE9iamVrdGUgd2VyZGVuIGFiZXIgbmljaHQgZ2Vsw7ZzY2h0IgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NworbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAicmVkdW5kYW50ZSBQYWtldGUgZW50ZmVybmVuIHVuZCBcImdpdC1wcnVuZS1wYWNrZWRcIiBhdXNmw7xocmVuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5OQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICItLW5vLXJldXNlLWRlbHRhIGFuIGdpdC1wYWNrLW9iamVjdHMgw7xiZXJnZWJlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDEKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIi0tbm8tcmV1c2Utb2JqZWN0IGFuIGdpdC1wYWNrLW9iamVjdHMgw7xiZXJnZWJlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDMKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgImdpdC11cGRhdGUtc2VydmVyLWluZm8gbmljaHQgYXVzZsO8aHJlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDYKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiLS1sb2NhbCBhbiBnaXQtcGFjay1vYmplY3RzIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA4Cittc2dpZCAid3JpdGUgYml0bWFwIGluZGV4IgorbXNnc3RyICJCaXRtYXAtSW5kZXggc2NocmVpYmVuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMAorbXNnaWQgInBhc3MgLS1kZWx0YS1pc2xhbmRzIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIi0tZGVsdGEtaXNsYW5kcyBhbiBnaXQtcGFjay1vYmplY3RzIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzExCittc2dpZCAiYXBwcm94aWRhdGUiCittc2dzdHIgIkRhdHVtc2FuZ2FiZSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTIKK21zZ2lkICJ3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzIgorbXNnc3RyICJtaXQgLUEsIGtlaW5lIE9iamVrdGUgw6RsdGVyIGFscyBkaWVzZXMgRGF0dW0gbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE0Cittc2dpZCAid2l0aCAtYSwgcmVwYWNrIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIm1pdCAtYSwgbmljaHQgZXJyZWljaGJhcmUgT2JqZWt0ZSBuZXUgcGFja2VuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNgorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAiR3LDtsOfZSBkZXMgRmVuc3RlcnMgZsO8ciBkaWUgRGVsdGEtS29tcHJlc3Npb24iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE3IGJ1aWx0aW4vcmVwYWNrLmM6MzIzCittc2dpZCAiYnl0ZXMiCittc2dzdHIgIkJ5dGVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxOAorbXNnaWQgInNhbWUgYXMgdGhlIGFib3ZlLCBidXQgbGltaXQgbWVtb3J5IHNpemUgaW5zdGVhZCBvZiBlbnRyaWVzIGNvdW50IgorbXNnc3RyICIiCisiZ2xlaWNoZXMgd2llIG9iZW4sIGFiZXIgZGllIFNwZWljaGVyZ3LDtsOfZSBhbnN0YXR0IGRlclxuIgorIkFuemFobCBkZXIgRWludHLDpGdlIGxpbWl0aWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzIwCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIgorbXNnc3RyICJkaWUgbWF4aW1hbGUgRGVsdGEtVGllZmUgbGltaXRpZXJlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjIKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMiCittc2dzdHIgIm1heGltYWxlIEFuemFobCB2b24gVGhyZWFkcyBsaW1pdGllcmVuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICJtYXhpbWFsZSBHcsO2w59lIGbDvHIgamVkZSBQYWtldGRhdGVpIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNgorbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICIiCisiT2JqZWt0ZSB1bXBhY2tlbiwgZGllIHNpY2ggaW4gbWl0IC5rZWVwIG1hcmtpZXJ0ZW4gUGFjay1EYXRlaWVuIGJlZmluZGVuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyOAorbXNnaWQgImRvIG5vdCByZXBhY2sgdGhpcyBwYWNrIgorbXNnc3RyICJkaWVzZXMgUGFrZXQgbmljaHQgbmV1IHBhY2tlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMzgKK21zZ2lkICJjYW5ub3QgZGVsZXRlIHBhY2tzIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICJrYW5uIFBhY2stRGF0ZWllbiBpbiBwcmVjaW91cy1vYmplY3RzIFJlcG9zaXRvcnkgbmljaHQgbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzQyCittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtQSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUgdW5kIC1BIHNpbmQgaW5rb21wYXRpYmVsIgorCisjOiBidWlsdGluL3JlcGFjay5jOjQyNQorbXNnaWQgIk5vdGhpbmcgbmV3IHRvIHBhY2suIgorbXNnc3RyICJOaWNodHMgTmV1ZXMgenVtIFBhY2tlbi4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBTb21lIHBhY2tzIGluIHVzZSBoYXZlIGJlZW4gcmVuYW1lZCBieVxuIgorIldBUk5JTkc6IHByZWZpeGluZyBvbGQtIHRvIHRoZWlyIG5hbWUsIGluIG9yZGVyIHRvXG4iCisiV0FSTklORzogcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZVxuIgorIldBUk5JTkc6IGZpbGUuICBCdXQgdGhlIG9wZXJhdGlvbiBmYWlsZWQsIGFuZCB0aGVcbiIKKyJXQVJOSU5HOiBhdHRlbXB0IHRvIHJlbmFtZSB0aGVtIGJhY2sgdG8gdGhlaXJcbiIKKyJXQVJOSU5HOiBvcmlnaW5hbCBuYW1lcyBhbHNvIGZhaWxlZC5cbiIKKyJXQVJOSU5HOiBQbGVhc2UgcmVuYW1lIHRoZW0gaW4gJXMgbWFudWFsbHk6XG4iCittc2dzdHIgIiIKKyJXQVJOVU5HOiBFaW5pZ2UgaW4gVmVyd2VuZHVuZyBiZWZpbmRsaWNoZSBQYWtldGUgd3VyZGVuXG4iCisiV0FSTlVORzogdW1iZW5hbm50LCBpbmRlbSAnb2xkLScgYW4gZGVyZW4gTmFtZW4gdm9ycmFuZ2VzdGVsbHRcbiIKKyJXQVJOVU5HOiB3dXJkZSwgdW0gZGllc2UgbWl0IGRlciBuZXVlbiBEYXRlaXZlcnNpb24genUgZXJzZXR6ZW4uXG4iCisiV0FSTlVORzogRGllc2UgT3BlcmF0aW9uIGlzdCBmZWhsZ2VzY2hsYWdlbi4gRGVyIFZlcnN1Y2gsIGRpZVxuIgorIldBUk5VTkc6IERhdGVpIHp1IGlocmVtIHVyc3Byw7xuZ2xpY2hlbiBOYW1lbiB1bXp1YmVuZW5uZW4sIHNjaGx1Z1xuIgorIldBUk5VTkc6IGViZW5mYWxscyBmZWhsLlxuIgorIldBUk5VTkc6IEJpdHRlIGJlbmVubmVuIFNpZSBkaWVzZSBtYW51ZWxsIG5hY2ggJXMgdW06XG4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTMO2c2NoZW4gdm9uICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIDxPYmpla3Q+IDxFcnNldHp1bmc+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMworbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxvYmplY3Q+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8T2JqZWt0PiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxDb21taXQ+IFs8RWx0ZXJuLUNvbW1pdD4uLi5dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI2Cittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCByZXBsYWNlIC1kIDxPYmpla3Q+Li4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNworbXNnaWQgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxGb3JtYXQ+XSBbLWwgWzxNdXN0ZXI+XV0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIHJlcGxhY2UgZm9ybWF0ICclcydcbiIKKyJ2YWxpZCBmb3JtYXRzIGFyZSAnc2hvcnQnLCAnbWVkaXVtJyBhbmQgJ2xvbmcnIgorbXNnc3RyICIiCisiVW5nw7xsdGlnZXMgRXJzZXR6dW5nc2Zvcm1hdCAnJXMnXG4iCisiR8O8bHRpZ2UgRm9ybWF0ZSBzaW5kICdzaG9ydCcsICdtZWRpdW0nIHVuZCAnbG9uZycuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBub3QgZm91bmQiCittc2dzdHIgIkVyc2V0emVuZGUgUmVmZXJlbnogJyVzJyBuaWNodCBnZWZ1bmRlbi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlcGxhY2UgcmVmICclcyciCittc2dzdHIgIkVyc2V0emVuZGUgUmVmZXJlbnogJyVzJyBnZWzDtnNjaHQuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYgbmFtZSIKK21zZ3N0ciAiJyVzJyBpc3Qga2VpbiBnw7xsdGlnZXIgUmVmZXJlbnpuYW1lLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgcmVmICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkVyc2V0emVuZGUgUmVmZXJlbnogJyVzJyBleGlzdGllcnQgYmVyZWl0cy4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4iCisiJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlZCBvYmplY3Qgb2YgdHlwZSAnJXMnXG4iCisid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgdHlwZSAnJXMnLiIKK21zZ3N0ciAiIgorIk9iamVrdGUgbcO8c3NlbiB2b20gc2VsYmVuIFR5cCBzZWluLlxuIgorIiclcycgemVpZ3QgYXVmIGVpbiBlcnNldHp0ZXMgT2JqZWt0IHZvbSBUeXAgJyVzJ1xuIgorInfDpGhyZW5kICclcycgYXVmIGVpbiBlcnNldHplbmRlcyBPYmpla3Qgdm9tIFR5cCAnJXMnXG4iCisiemVpZ3QuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHp1bSBTY2hyZWliZW4gw7ZmZm5lbi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0MgorbXNnaWQgImNhdC1maWxlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgImNhdC1maWxlIG1lbGRldGUgRmVobGVyLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCB6dW0gTGVzZW4gw7ZmZm5lbi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3MgorbXNnaWQgInVuYWJsZSB0byBzcGF3biBta3RyZWUiCittc2dzdHIgIktvbm50ZSBta3RyZWUgbmljaHQgYXVzZsO8aHJlbi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3NgorbXNnaWQgInVuYWJsZSB0byByZWFkIGZyb20gbWt0cmVlIgorbXNnc3RyICJLb25udGUgbmljaHQgdm9uIG1rdHJlZSBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4NQorbXNnaWQgIm1rdHJlZSByZXBvcnRlZCBmYWlsdXJlIgorbXNnc3RyICJta3RyZWUgbWVsZGV0ZSBGZWhsZXIuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODkKK21zZ2lkICJta3RyZWUgZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0IG5hbWUiCittc2dzdHIgIm1rdHJlZSBsaWVmZXJ0ZSBrZWluZW4gT2JqZWt0bmFtZW4genVyw7xjay4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZnN0YXQgJXMiCittc2dzdHIgIkthbm4gZnN0YXQgYXVmICVzIG5pY2h0IGF1c2bDvGhyZW4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMDMKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgb2JqZWN0IHRvIGRhdGFiYXNlIgorbXNnc3RyICJLb25udGUgT2JqZWt0IG5pY2h0IGluIERhdGVuYmFuayBzY2hyZWliZW4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjIgYnVpbHRpbi9yZXBsYWNlLmM6Mzc4IGJ1aWx0aW4vcmVwbGFjZS5jOjQyNAorIzogYnVpbHRpbi9yZXBsYWNlLmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICJLZWluIGfDvGx0aWdlciBPYmpla3RuYW1lOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBvYmplY3QgdHlwZSBmb3IgJXMiCittc2dzdHIgIktvbm50ZSBPYmpla3RhcnQgdm9uICVzIG5pY2h0IGJlc3RpbW10ZW4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNDIKK21zZ2lkICJlZGl0aW5nIG9iamVjdCBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiQmVhcmJlaXRlbiB2b24gT2JqZWt0ZGF0ZWkgZmVobGdlc2NobGFnZW4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAiTmV1ZXMgT2JqZWt0IGlzdCBkYXNzZWxiZSB3aWUgZGFzIGFsdGU6ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMgYXMgYSBjb21taXQiCittc2dzdHIgIktvbm50ZSBuaWNodCAlcyBhbHMgQ29tbWl0IHBhcnNlbi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgInVuZ8O8bHRpZ2VyIE1lcmdlLVRhZyBpbiBDb21taXQgJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAiZmVobGVyaGFmdGVyIE1lcmdlLVRhZyBpbiBDb21taXQgJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcmlnaW5hbCBjb21taXQgJyVzJyBjb250YWlucyBtZXJnZXRhZyAnJXMnIHRoYXQgaXMgZGlzY2FyZGVkOyB1c2UgLS1lZGl0ICIKKyJpbnN0ZWFkIG9mIC0tZ3JhZnQiCittc2dzdHIgIiIKKyJEZXIgdXJzcHLDvG5nbGljaGUgQ29tbWl0ICclcycgZW50aMOkbHQgTWVyZ2UtVGFnICclcycsIGRlciB2ZXJ3b3JmZW5cbiIKKyJ3aXJkOyBiZW51dHplbiBTaWUgLS1lZGl0IGFuc3RhdHQgLS1ncmFmdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBvcmlnaW5hbCBjb21taXQgJyVzJyBoYXMgYSBncGcgc2lnbmF0dXJlIgorbXNnc3RyICJEZXIgb3JpZ2luYWxlIENvbW1pdCAnJXMnIGhhdCBlaW5lIEdQRy1TaWduYXR1ci4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ3MAorbXNnaWQgInRoZSBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSByZXBsYWNlbWVudCBjb21taXQhIgorbXNnc3RyICJEaWUgU2lnbmF0dXIgd2lyZCBpbiBkZW0gRXJzZXR6dW5ncy1Db21taXQgZW50ZmVybnQhIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHJlcGxhY2VtZW50IGNvbW1pdCBmb3I6ICclcyciCittc2dzdHIgIktvbm50ZSBFcnNldHp1bmdzLUNvbW1pdCBmw7xyICclcycgbmljaHQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JhZnQgZm9yICclcycgdW5uZWNlc3NhcnkiCittc2dzdHIgIkvDvG5zdGxpY2hlciBWb3Jnw6RuZ2VyIChcImdyYWZ0XCIpIGbDvHIgJyVzJyBuaWNodCBub3R3ZW5kaWcuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGNvbW1pdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAiTmV1ZXIgQ29tbWl0IGlzdCBkZXJzZWxiZSB3aWUgZGVyIGFsdGU6ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNvbnZlcnQgdGhlIGZvbGxvd2luZyBncmFmdChzKTpcbiIKICIlcyIKIG1zZ3N0ciAiIgotIkZlaGxlciBiZWltIEzDtnNjaGVuIGRlciBCcmFuY2hlczpcbiIKKyJLb25udGUgZGllIGZvbGdlbmRlbiBrw7xuc3RsaWNoZW4gVm9yZ8OkbmdlciAoXCJncmFmdHNcIikgbmljaHQga29udmVydGllcmVuOlxuIgogIiVzIgogCi0jOiBsaWIvZGF0ZS50Y2w6MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgotbXNnc3RyICJVbmfDvGx0aWdlcyBEYXR1bSB2b24gR2l0OiAlcyIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0OAorbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICJlcnNldHplbmRlIFJlZmVyZW56ZW4gYXVmbGlzdGVuIgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQyCi1tc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCi1tc2dzdHIgIkFuemFobCB1bnZlcmtuw7xwZnRlciBPYmpla3RlIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ5Cittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAiZXJzZXR6ZW5kZSBSZWZlcmVuemVuIGzDtnNjaGVuIgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQzCi1tc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCi1tc2dzdHIgIkZlc3RwbGF0dGVucGxhdHogdm9uIHVudmVya27DvHBmdGVuIE9iamVrdGVuIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUwCittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgImV4aXN0aWVyZW5kZXMgT2JqZWt0IGJlYXJiZWl0ZW4iCiAKLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKLW1zZ2lkICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMiCi1tc2dzdHIgIkFuemFobCBrb21wcmltaWVydGVyIE9iamVrdGUiCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTEKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICJFbHRlcm4tQ29tbWl0cyBlaW5lcyBDb21taXRzIMOkbmRlcm4iCiAKLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKLW1zZ2lkICJOdW1iZXIgb2YgcGFja3MiCi1tc2dzdHIgIkFuemFobCBLb21wcmltaWVydW5nc2VpbmhlaXRlbiIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MgorbXNnaWQgImNvbnZlcnQgZXhpc3RpbmcgZ3JhZnQgZmlsZSIKK21zZ3N0ciAiZXhpc3RpZXJlbmRlIERhdGVpIGRlcyBrw7xuc3RsaWNoZW4gVm9yZ8OkbmdlcnMgKFwiZ3JhZnRcIikga29udmVydGllcmVuIgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ2Ci1tc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICJGZXN0cGxhdHRlbnBsYXR6IHZvbiBrb21wcmltaWVydGVuIE9iamVrdGVuIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUzCittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAiZGllIFJlZmVyZW56IGVyc2V0emVuLCB3ZW5uIHNpZSBleGlzdGllcnQiCiAKLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKLW1zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgotbXNnc3RyICJLb21wcmltaWVydGUgT2JqZWt0ZSwgZGllIHp1bSBBdWZyw6R1bWVuIHZvcmdlc2VoZW4gc2luZCIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NQorbXNnaWQgImRvIG5vdCBwcmV0dHktcHJpbnQgY29udGVudHMgZm9yIC0tZWRpdCIKK21zZ3N0ciAia2VpbmUgYW5zcHJlY2hlbmRlIEFuemVpZ2UgZGVzIE9iamVrdGluaGFsdGVzIGbDvHIgLS1lZGl0IgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ4Ci1tc2dpZCAiR2FyYmFnZSBmaWxlcyIKLW1zZ3N0ciAiRGF0ZWllbiBpbSBNw7xsbGVpbWVyIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU2Cittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICJkYXMgYW5nZWdlYmVuZSBGb3JtYXQgYmVudXR6ZW4iCiAKLSM6IGxpYi9kYXRhYmFzZS50Y2w6NjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBEYXRhYmFzZSBTdGF0aXN0aWNzIgotbXNnc3RyICIlcyAoJXMpOiBEYXRlbmJhbmtzdGF0aXN0aWsiCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NjkKK21zZ2lkICItLWZvcm1hdCBjYW5ub3QgYmUgdXNlZCB3aGVuIG5vdCBsaXN0aW5nIgorbXNnc3RyICItLWZvcm1hdCBrYW5uIG5pY2h0IGJlaW0gQXVmbGlzdGVuIHZlcndlbmRldCB3ZXJkZW4uIgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjcyCi1tc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKLW1zZ3N0ciAiT2JqZWt0ZGF0ZW5iYW5rIGtvbXByaW1pZXJlbiIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU3NworbXNnaWQgIi1mIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB3cml0aW5nIGEgcmVwbGFjZW1lbnQiCittc2dzdHIgIi1mIG1hY2h0IG51ciBiZWltIFNjaHJlaWJlbiBlaW5lciBFcnNldHp1bmcgU2lubi4iCiAKLSM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKLW1zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKLW1zZ3N0ciAiRGllIE9iamVrdGRhdGVuYmFuayBkdXJjaCDCu2ZzY2stb2JqZWN0c8KrIMO8YmVycHLDvGZlbiBsYXNzZW4iCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODEKK21zZ2lkICItLXJhdyBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1lZGl0IgorbXNnc3RyICItLXJhdyBtYWNodCBudXIgbWl0IC0tZWRpdCBTaW5uLiIKIAotIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU4NworbXNnaWQgIi1kIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWQgYmVuw7Z0aWd0IG1pbmRlc3RlbnMgZWluIEFyZ3VtZW50LiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTkzCittc2dpZCAiYmFkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgQW56YWhsIHZvbiBBcmd1bWVudGVuLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk5Cittc2dpZCAiLWUgbmVlZHMgZXhhY3RseSBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1lIGJlbsO2dGlndCBnZW5hdSBlaW4gQXJndW1lbnQuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MDUKK21zZ2lkICItZyBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1nIGJlbsO2dGlndCBtaW5kZXN0ZW5zIGVpbiBBcmd1bWVudC4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxMQorbXNnaWQgIi0tY29udmVydC1ncmFmdC1maWxlIHRha2VzIG5vIGFyZ3VtZW50IgorbXNnc3RyICItLWNvbnZlcnQtZ3JhZnQtZmlsZSBlcndhcnRldCBrZWluZSBBcmd1bWVudGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxNworbXNnaWQgIm9ubHkgb25lIHBhdHRlcm4gY2FuIGJlIGdpdmVuIHdpdGggLWwiCittc2dzdHIgIk1pdCAtbCBrYW5uIG51ciBlaW4gTXVzdGVyIGFuZ2VnZWJlbiB3ZXJkZW4uIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjEzCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBhdGg+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKK21zZ3N0ciAiZ2l0IHJlcmVyZSBbY2xlYW4gfCBmb3JnZXQgPFBmYWQ+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo2MAorbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICJzYXViZXJlIEF1ZmzDtnN1bmdlbiBpbSBJbmRleCByZWdpc3RyaWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NzkKK21zZ2lkICInZ2l0IHJlcmVyZSBmb3JnZXQnIHdpdGhvdXQgcGF0aHMgaXMgZGVwcmVjYXRlZCIKK21zZ3N0ciAiJ2dpdCByZXJlcmUgZm9yZ2V0JyBvaG5lIFBmYWRlIGlzdCB2ZXJhbHRldC4iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmIGZvciAnJXMnIgorbXNnc3RyICJLb25udGUga2VpbiBEaWZmIGbDvHIgJyVzJyBnZW5lcmllcmVuLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMyCiBtc2dpZCAiIgotIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKLSJcbiIKLSJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKLSJ0aGUgZGF0YWJhc2UuXG4iCi0iXG4iCi0iQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgogbXNnc3RyICIiCi0iRGllc2VzIFJlcG9zaXRvcnkgZW50aMOkbHQgdW5nZWbDpGhyICVpIG5pY2h0IHZlcmtuw7xwZnRlIE9iamVrdGUuXG4iCi0iXG4iCi0iRsO8ciBlaW5lIG9wdGltYWxlIFBlcmZvcm1hbmNlIHdpcmQgZW1wZm9obGVuLCBkaWUgRGF0ZW5iYW5rIGRlcyBSZXBvc2l0b3J5ICIKLSJ6dSBrb21wcmltaWVyZW4uXG4iCi0iXG4iCi0iU29sbCBkaWUgRGF0ZW5iYW5rIGpldHp0IGtvbXByaW1pZXJ0IHdlcmRlbj8iCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPENvbW1pdD5dIgogCi0jOiBsaWIvZXJyb3IudGNsOjIwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXM6IGVycm9yIgotbXNnc3RyICIlczogRmVobGVyIgorIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gWzxDb21taXQtUmVmZXJlbno+XSBbLS1dIDxQZmFkc3BlemlmaWthdGlvbj4uLi4iCiAKLSM6IGxpYi9lcnJvci50Y2w6MzYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlczogd2FybmluZyIKLW1zZ3N0ciAiJXM6IFdhcm51bmciCi0KLSM6IGxpYi9lcnJvci50Y2w6ODAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyBob29rIGZhaWxlZDoiCi1tc2dzdHIgIiVzIGhvb2sgZmVobGdlc2NobGFnZW46IgotCi0jOiBsaWIvZXJyb3IudGNsOjk2Ci1tc2dpZCAiWW91IG11c3QgY29ycmVjdCB0aGUgYWJvdmUgZXJyb3JzIGJlZm9yZSBjb21taXR0aW5nLiIKLW1zZ3N0ciAiIgotIlNpZSBtw7xzc2VuIGRpZSBvYmlnZW4gRmVobGVyIHp1ZXJzdCBiZWhlYmVuLCBiZXZvciBTaWUgY29tbWl0dGVuIGvDtm5uZW4uIgotCi0jOiBsaWIvZXJyb3IudGNsOjExNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IGVycm9yIgotbXNnc3RyICIlcyAoJXMpOiBGZWhsZXIiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTMKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAogbXNnaWQgIiIKLSJDYW5ub3QgbWVyZ2Ugd2hpbGUgYW1lbmRpbmcuXG4iCi0iXG4iCi0iWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhbnkgdHlwZSBvZiBtZXJnZS5cbiIKKyJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyZWUtaXNoPl0iCiBtc2dzdHIgIiIKLSJadXNhbW1lbmbDvGhyZW4ga2FubiBuaWNodCBnbGVpY2h6ZWl0aWcgbWl0IE5hY2hiZXNzZXJuIGR1cmNoZ2Vmw7xocnQgd2VyZGVuLlxuIgotIlxuIgotIlNpZSBtw7xzc2VuIHp1ZXJzdCBkZW4gTmFjaGJlc3NlcnVuZ3MtQ29tbWl0IGFic2NobGllw59lbiwgYmV2b3IgU2llICIKLSJ6dXNhbW1lbmbDvGhyZW4ga8O2bm5lbi5cbiIKKyJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPENvbW1pdC0iCisiUmVmZXJlbno+XSIKIAotIzogbGliL21lcmdlLnRjbDoyNworIzogYnVpbHRpbi9yZXNldC5jOjM1Cittc2dpZCAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRoc3BlYz4uLi5dIgorbXNnc3RyICJnaXQgcmVzZXQgLS1wYXRjaCBbPENvbW1pdC1SZWZlcmVuej5dIFstLV0gWzxQZmFkc3BlemlmaWthdGlvbj4uLi5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAibWl4ZWQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgInNvZnQiCittc2dzdHIgInNvZnQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImhhcmQiCittc2dzdHIgImhhcmQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1lcmdlIgorbXNnc3RyICJ6dXNhbW1lbmbDvGhyZW4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImtlZXAiCittc2dzdHIgImtlZXAiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4MgorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICJTaWUgaGFiZW4ga2VpbmVuIGfDvGx0aWdlbiBIRUFELiIKKworIzogYnVpbHRpbi9yZXNldC5jOjg0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRmluZGVuIGRlcyBcIlRyZWVcIi1PYmpla3RlcyB2b24gSEVBRC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRmluZGVuIGRlcyBcIlRyZWVcIi1PYmpla3RlcyB2b24gJXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJIRUFEIGlzdCBqZXR6dCBiZWkgJXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAiS2FubiBrZWluZW4gJyVzJy1SZXNldCBkdXJjaGbDvGhyZW4sIHfDpGhyZW5kIGVpbiBNZXJnZSBpbSBHYW5nZSBpc3QuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk0IGJ1aWx0aW4vc3Rhc2guYzo1MjAgYnVpbHRpbi9zdGFzaC5jOjU5NQorIzogYnVpbHRpbi9zdGFzaC5jOjYxOQorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgIndlbmlnZXIgQXVzZ2FiZW4sIG51ciBGZWhsZXIgbWVsZGVuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk2Cittc2dpZCAicmVzZXQgSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgIkhFQUQgdW5kIEluZGV4IHVtc2V0emVuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk3Cittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICJudXIgSEVBRCB1bXNldHplbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5OSBidWlsdGluL3Jlc2V0LmM6MzAxCittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiSEVBRCwgSW5kZXggdW5kIEFyYmVpdHN2ZXJ6ZWljaG5pcyB1bXNldHplbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwMworbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiSEVBRCB1bXNldHplbiwgYWJlciBsb2thbGUgw4RuZGVydW5nZW4gYmVoYWx0ZW4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDkKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAibnVyIHNwZWljaGVybiwgZGFzcyBnZWzDtnNjaHRlIFBmYWRlIHNww6R0ZXIgaGluenVnZWbDvGd0IHdlcmRlbiBzb2xsZW4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgYWxzIGfDvGx0aWdlbiBDb21taXQgYXVmbMO2c2VuLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGFscyBnw7xsdGlnZXMgXCJUcmVlXCItT2JqZWt0IGF1ZmzDtnNlbi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjAKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2ggaXN0IGlua29tcGF0aWJlbCBtaXQgLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tbWl4ZWQgbWl0IFBmYWRlbiBpc3QgdmVyYWx0ZXQ7IGJlbnV0emVuIFNpZSBzdGF0dGRlc3NlbiAnZ2l0IHJlc2V0IC0tICIKKyI8UGZhZGU+Jy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICJFaW4gJyVzJy1SZXNldCBtaXQgUGZhZGVuIGlzdCBuaWNodCBtw7ZnbGljaC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiclcyctUmVzZXQgaXN0IGluIGVpbmVtIEJhcmUtUmVwb3NpdG9yeSBuaWNodCBlcmxhdWJ0IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzkxCittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgIi1OIGthbm4gbnVyIG1pdCAtbWl4ZWQgYmVudXR6dCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MTIKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAiTmljaHQgenVtIENvbW1pdCB2b3JnZW1lcmt0ZSDDhG5kZXJ1bmdlbiBuYWNoIFp1csO8Y2tzZXR6dW5nOiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxNQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCiAiXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGEgbWVyZ2UgY2FuIGJlIHBlcmZvcm1lZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldC4gIFlvdSBjYW5cbiIKKyJ1c2UgJy0tcXVpZXQnIHRvIGF2b2lkIHRoaXMuICBTZXQgdGhlIGNvbmZpZyBzZXR0aW5nIHJlc2V0LnF1aWV0IHRvIHRydWVcbiIKKyJ0byBtYWtlIHRoaXMgdGhlIGRlZmF1bHQuXG4iCiBtc2dzdHIgIiIKLSJEZXIgbGV0enRlIGdlbGFkZW5lIFN0YXR1cyBzdGltbXQgbmljaHQgbWVociBtaXQgZGVtIFJlcG9zaXRvcnkgw7xiZXJlaW4uXG4iCiAiXG4iCi0iRWluIGFuZGVyZXMgR2l0LVByb2dyYW1tIGhhdCBkYXMgUmVwb3NpdG9yeSBzZWl0IGRlbSBsZXR6dGVuIExhZGVuICIKLSJnZcOkbmRlcnQuICBWb3IgZWluZW0gWnVzYW1tZW5mw7xocmVuIG11c3MgbmV1IGdlbGFkZW4gd2VyZGVuLlxuIgotIlxuIgotIkVzIHdpcmQgZ2xlaWNoIG5ldSBnZWxhZGVuLlxuIgorIkVzIGRhdWVydGUgJS4yZiBTZWt1bmRlbiwgdW0gw7xiZXIgZGllIG5hY2ggZWluZW0gUmVzZXQgbmljaHQgenVtIENvbW1pdFxuIgorInZvcmdlbWVya3RlbiDDhG5kZXJ1bmdlbiB6dSB6w6RobGVuLiBTaWUga8O2bm5lbiAnLS1xdWlldCcgYmVudXR6ZW4sIHVtXG4iCisiZGFzIHp1IHZlcmhpbmRlcm4uIFNldHplbiBTaWUgZGllIEtvbmZpZ3VyYXRpb25zZWluc3RlbGx1bmcgcmVzZXQucXVpZXRcbiIKKyJhdWYgXCJ0cnVlXCIsIHVtIGRhcyB6dW0gU3RhbmRhcmQgenUgbWFjaGVuLlxuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjQ1Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3Jlc2V0LmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICJLb25udGUgSW5kZXgtRGF0ZWkgbmljaHQgenUgQ29tbWl0ICclcycgc2V0emVuLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyOQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIktvbm50ZSBuZXVlIEluZGV4LURhdGVpIG5pY2h0IHNjaHJlaWJlbi4iCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo0OTkKK21zZ2lkICJjYW5ub3QgY29tYmluZSAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBhbmQgLS1taXNzaW5nIgorbXNnc3RyICIiCisiLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgdW5kIC0tbWlzc2luZyBrw7ZubmVuIG5pY2h0IGtvbWJpbmllcnQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjU2MAorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmcgcmVxdWlyZXMgLS1vYmplY3RzIgorbXNnc3RyICJEYXMgRmlsdGVybiB2b24gT2JqZWt0ZW4gZXJmb3JkZXJ0IC0tb2JqZWN0cy4iCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo2MTAKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgInJldi1saXN0IHVudGVyc3TDvHR6dCBrZWluZSBBbnplaWdlIHZvbiBOb3RpemVuIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NjE1Cittc2dpZCAibWFya2VkIGNvdW50aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tb2JqZWN0cyIKK21zZ3N0ciAibWFya2llcnRlcyBaw6RobGVuIGlzdCBpbmtvbXBhdGliZWwgbWl0IGRlciBPcHRpb24gLS1vYmplY3RzIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQwOAorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8T3B0aW9uZW4+XSAtLSBbPEFyZ3VtZW50ZT4uLi5dIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxMworbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAiYC0tYCBhbHMgQXJndW1lbnQgbGFzc2VuIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxNQorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAiZGFzIFBhcnNlbiBuYWNoIGRlbSBlcnN0ZW4gQXJndW1lbnQsIHdhcyBrZWluZSBPcHRpb24gaXN0LCBzdG9wcGVuIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxOAorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgIiIKKyJBdXNnYWJlIGluIExhbmdmb3JtIG1pdCBBcmd1bWVudGVuIGFuIGRlbiBPcHRpb25lbiAoZ2V0cmVubnQgZHVyY2ggJz0nKSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1NTEKIG1zZ2lkICIiCi0iWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCiAiXG4iCi0iRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgotIlxuIgotIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgotIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIgogbXNnc3RyICIiCi0iWnVzYW1tZW5mw7xocnVuZyBtaXQgS29uZmxpa3Rlbi5cbiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxPcHRpb25lbj5dIC0tIFs8QXJndW1lbnRlPi4uLl1cbiIKKyIgICBvZGVyOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxBcmd1bWVudGU+Li4uXVxuIgorIiAgIG9kZXI6IGdpdCByZXYtcGFyc2UgWzxPcHRpb25lbj5dIFs8QXJndW1lbnRlPi4uLl1cbiIKICJcbiIKLSJEaWUgRGF0ZWkgwrslc8KrIGVudGjDpGx0IEtvbmZsaWt0ZSBiZWltIFp1c2FtbWVuZsO8aHJlbi5cbiIKLSJcbiIKLSJTaWUgbcO8c3NlbiBkaWVzZSBLb25mbGlrdGUgcGVyIEhhbmQgYXVmbMO2c2VuLiBBbnNjaGxpZcOfZW5kIG3DvHNzZW4gU2llIGRpZSAiCi0iRGF0ZWkgd2llZGVyIGJlcmVpdHN0ZWxsZW4gdW5kIGNvbW1pdHRlbiwgdW0gZGllIFp1c2FtbWVuZsO8aHJ1bmcgIgotImFienVzY2hsaWXDn2VuLiBFcnN0IGRhbmFjaCBrYW5uIGVpbmUgbmV1ZSBadXNhbW1lbmbDvGhydW5nIGJlZ29ubmVuIHdlcmRlbi5cbiIKKyJGw7xocmVuIFNpZSBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGbDvHIgd2VpdGVyZSBJbmZvcm1hdGlvbmVuIGJlaSAiCisiZXJzdGVyIFZlcndlbmR1bmcgYXVzLiIKIAotIzogbGliL21lcmdlLnRjbDo1NQotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9yZXZlcnQuYzoyNAorbXNnaWQgImdpdCByZXZlcnQgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgcmV2ZXJ0IFs8T3B0aW9uZW4+XSA8Q29tbWl0LUFuZ2FiZT4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjUKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHJldmVydCA8VW50ZXJiZWZlaGw+IgorCisjOiBidWlsdGluL3JldmVydC5jOjMwCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIFs8T3B0aW9uZW4+XSA8Q29tbWl0LUFuZ2FiZT4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzEKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPFVudGVyYmVmZWhsPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIgorbXNnc3RyICJPcHRpb24gYCVzJyBlcndhcnRldCBlaW5lIE51bW1lciBncsO2w59lciBhbHMgMC4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzOiAlcyBrYW5uIG5pY2h0IG1pdCAlcyB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMgorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIlwicmV2ZXJ0XCIgb2RlciBcImNoZXJyeS1waWNrXCIgQWJsYXVmIGJlZW5kZW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAiXCJyZXZlcnRcIiBvZGVyIFwiY2hlcnJ5LXBpY2tcIiBBYmxhdWYgZm9ydHNldHplbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDQKK21zZ2lkICJjYW5jZWwgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJcInJldmVydFwiIG9kZXIgXCJjaGVycnktcGlja1wiIEFibGF1ZiBhYmJyZWNoZW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA1Cittc2dpZCAic2tpcCBjdXJyZW50IGNvbW1pdCBhbmQgY29udGludWUiCittc2dzdHIgImRlbiBha3R1ZWxsZW4gQ29tbWl0IGF1c2xhc3NlbiB1bmQgZm9ydGZhaHJlbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDcKK21zZ2lkICJkb24ndCBhdXRvbWF0aWNhbGx5IGNvbW1pdCIKK21zZ3N0ciAibmljaHQgYXV0b21hdGlzY2ggY29tbWl0dGVuIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwOAorbXNnaWQgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJDb21taXQtQmVzY2hyZWlidW5nIGJlYXJiZWl0ZW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTExCittc2dpZCAicGFyZW50LW51bWJlciIKK21zZ3N0ciAiTnVtbWVyIGRlcyBFbHRlcm50ZWlscyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJzZWxlY3QgbWFpbmxpbmUgcGFyZW50IgorbXNnc3RyICJFbHRlcm50ZWlsIGRlciBIYXVwdGxpbmllIGF1c3fDpGhsZW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIk1lcmdlLVN0cmF0ZWdpZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTYKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJPcHRpb24gZsO8ciBNZXJnZS1TdHJhdGVnaWUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI1Cittc2dpZCAiYXBwZW5kIGNvbW1pdCBuYW1lIgorbXNnc3RyICJDb21taXQtTmFtZW4gYW5ow6RuZ2VuIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNworbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICJ1cnNwcsO8bmdsaWNoZSwgbGVlcmUgQ29tbWl0cyBlcmhhbHRlbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjkKK21zZ2lkICJrZWVwIHJlZHVuZGFudCwgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAicmVkdW5kYW50ZSwgbGVlcmUgQ29tbWl0cyBiZWhhbHRlbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzIKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJcInJldmVydFwiIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0NQorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAiXCJjaGVycnktcGlja1wiIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL3JtLmM6MTkKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBbPE9wdGlvbmVuPl0gWy0tXSA8RGF0ZWk+Li4uIgorCisjOiBidWlsdGluL3JtLmM6MjA3CiBtc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKLSJcbiIKLSJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgotIlxuIgotIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgotIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKLW1zZ3N0ciAiIgotIkVzIGxpZWdlbiDDhG5kZXJ1bmdlbiB2b3IuXG4iCi0iXG4iCi0iRGllIERhdGVpIMK7JXPCqyB3dXJkZSBnZcOkbmRlcnQuXG4iCi0iXG4iCi0iU2llIHNvbGx0ZW4genVlcnN0IGRlbiBiZXJlaXRnZXN0ZWxsdGVuIENvbW1pdCBhYnNjaGxpZcOfZW4sIGJldm9yIFNpZSBlaW5lICIKLSJadXNhbW1lbmbDvGhydW5nIGJlZ2lubmVuLiAgTWl0IGRpZXNlciBSZWloZW5mb2xnZSBrw7ZubmVuIFNpZSBtw7ZnbGljaGUgIgotIktvbmZsaWt0ZSBiZWltIFp1c2FtbWVuZsO8aHJlbiB3ZXNlbnRsaWNoIGVpbmZhY2hlciBiZWhlYmVuIG9kZXIgYWJicmVjaGVuLlxuIgorInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dpZF9wbHVyYWwgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dzdHJbMF0gIiIKKyJkaWUgZm9sZ2VuZGUgRGF0ZWkgaGF0IHp1bSBDb21taXQgdm9yZ2VtZXJrdGUgw4RuZGVydW5nZW4gdW50ZXJzY2hpZWRsaWNoXG4iCisienUgZGVyIERhdGVpIHVuZCBIRUFEOiIKK21zZ3N0clsxXSAiIgorImRpZSBmb2xnZW5kZW4gRGF0ZWllbiBoYWJlbiB6dW0gQ29tbWl0IHZvcmdlbWVya3RlIMOEbmRlcnVuZ2VuICIKKyJ1bnRlcnNjaGllZGxpY2hcbiIKKyJ6dSBkZXIgRGF0ZWkgdW5kIEhFQUQ6IgogCi0jOiBsaWIvbWVyZ2UudGNsOjEwOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIG9mICVzIgotbXNnc3RyICIlcyB2b24gJXMiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTI2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2luZyAlcyBhbmQgJXMuLi4iCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiB2b24gJXMgdW5kICVzLi4uIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEzNwotbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgotbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gZXJmb2xncmVpY2ggYWJnZXNjaGxvc3Nlbi4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTM5Ci1tc2dpZCAiTWVyZ2UgZmFpbGVkLiAgQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyByZXF1aXJlZC4iCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiBmZWhsZ2VzY2hsYWdlbi4gS29uZmxpa3RhdWZsw7ZzdW5nIGlzdCBub3R3ZW5kaWcuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjE1NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IE1lcmdlIgotbXNnc3RyICIlcyAoJXMpOiBadXNhbW1lbmbDvGhyZW4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTY0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2UgSW50byAlcyIKLW1zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIGluIMK7JXPCqyIKLQotIzogbGliL21lcmdlLnRjbDoxODMKLW1zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKLW1zZ3N0ciAiWnVzYW1tZW56dWbDvGhyZW5kZSBWZXJzaW9uIgotCi0jOiBsaWIvbWVyZ2UudGNsOjIxOAorIzogYnVpbHRpbi9ybS5jOjIxMgogbXNnaWQgIiIKLSJDYW5ub3QgYWJvcnQgd2hpbGUgYW1lbmRpbmcuXG4iCiAiXG4iCi0iWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0LlxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCiBtc2dzdHIgIiIKLSJBYmJydWNoIGRlciBOYWNoYmVzc2VydW5nIGlzdCBuaWNodCBtw7ZnbGljaC5cbiIKICJcbiIKLSJTaWUgbcO8c3NlbiBkaWUgTmFjaGJlc3NlcnVuZyBkaWVzZSBDb21taXRzIGFic2NobGllw59lbi5cbiIKKyIoYmVudXR6ZW4gU2llIC1mLCB1bSBkaWUgTMO2c2NodW5nIHp1IGVyendpbmdlbikiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjI4CisjOiBidWlsdGluL3JtLmM6MjE2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ3N0clswXSAiZGllIGZvbGdlbmRlIERhdGVpIGhhdCB6dW0gQ29tbWl0IHZvcmdlbWVya3RlIMOEbmRlcnVuZ2VuOiIKK21zZ3N0clsxXSAiZGllIGZvbGdlbmRlbiBEYXRlaWVuIGhhYmVuIHp1bSBDb21taXQgdm9yZ2VtZXJrdGUgw4RuZGVydW5nZW46IgorCisjOiBidWlsdGluL3JtLmM6MjIwIGJ1aWx0aW4vcm0uYzoyMjkKIG1zZ2lkICIiCi0iQWJvcnQgbWVyZ2U/XG4iCiAiXG4iCi0iQWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2Ugd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCi0iXG4iCi0iQ29udGludWUgd2l0aCBhYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZT8iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKIG1zZ3N0ciAiIgotIlp1c2FtbWVuZsO8aHJlbiBhYmJyZWNoZW4/XG4iCiAiXG4iCi0iV2VubiBTaWUgYWJicmVjaGVuLCBnZWhlbiBhbGxlIG5vY2ggbmljaHQgY29tbWl0dGV0ZW4gw4RuZGVydW5nZW4gdmVybG9yZW4uXG4iCi0iXG4iCi0iWnVzYW1tZW5mw7xocmVuIGpldHp0IGFiYnJlY2hlbj8iCisiKGJlbnV0emVuIFNpZSAtLWNhY2hlZCwgdW0gZGllIERhdGVpIHp1IGJlaGFsdGVuLCBvZGVyIC1mLCB1bSBkYXMgRW50ZmVybmVuICIKKyJ6dSBlcnp3aW5nZW4pIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIzNAorIzogYnVpbHRpbi9ybS5jOjIyNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ3N0clswXSAiZGllIGZvbGdlbmRlIERhdGVpIGhhdCBsb2thbGUgw4RuZGVydW5nZW46IgorbXNnc3RyWzFdICJkaWUgZm9sZ2VuZGVuIERhdGVpZW4gaGFiZW4gbG9rYWxlIMOEbmRlcnVuZ2VuOiIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgImtlaW5lIGdlbMO2c2NodGVuIERhdGVpZW4gYXVmbGlzdGVuIgorCisjOiBidWlsdGluL3JtLmM6MjQ0Cittc2dpZCAib25seSByZW1vdmUgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIm51ciBhdXMgZGVtIEluZGV4IGVudGZlcm5lbiIKKworIzogYnVpbHRpbi9ybS5jOjI0NQorbXNnaWQgIm92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrIgorbXNnc3RyICJkaWUgXCJ1cC10by1kYXRlXCIgUHLDvGZ1bmcgw7xiZXJzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDYKK21zZ2lkICJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIKK21zZ3N0ciAicmVrdXJzaXZlcyBFbnRmZXJuZW4gZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDgKK21zZ2lkICJleGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vdGhpbmcgbWF0Y2hlZCIKK21zZ3N0ciAibWl0IFLDvGNrZ2FiZXdlcnQgMCBiZWVuZGVuLCB3ZW5uIGtlaW5lIMOcYmVyZWluc3RpbW11bmcgZ2VmdW5kZW4gd3VyZGUiCisKKyM6IGJ1aWx0aW4vcm0uYzoyODIKK21zZ2lkICJObyBwYXRoc3BlYyB3YXMgZ2l2ZW4uIFdoaWNoIGZpbGVzIHNob3VsZCBJIHJlbW92ZT8iCittc2dzdHIgIiIKKyJFcyB3dXJkZSBrZWluZSBQZmFkc3BlemlmaWthdGlvbiBhbmdlZ2ViZW4uIFdlbGNoZSBEYXRlaWVuIHNvbGxlbiBlbnRmZXJudCAiCisid2VyZGVuPyIKKworIzogYnVpbHRpbi9ybS5jOjMwNQorbXNnaWQgInBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisiQml0dGUgbWVya2VuIFNpZSBJaHJlIMOEbmRlcnVuZ2VuIGluIC5naXRtb2R1bGVzIHp1bSBDb21taXQgdm9yIG9kZXJcbiIKKyJiZW51dHplbiBTaWUgXCJzdGFzaFwiLCB1bSBmb3J0enVmYWhyZW4uIgorCisjOiBidWlsdGluL3JtLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiCittc2dzdHIgIiclcycgd2lyZCBuaWNodCBvaG5lIC1yIHJla3Vyc2l2IGVudGZlcm50IgorCisjOiBidWlsdGluL3JtLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJtOiBrb25udGUgJXMgbmljaHQgbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MjAKIG1zZ2lkICIiCi0iUmVzZXQgY2hhbmdlcz9cbiIKLSJcbiIKLSJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCi0iXG4iCi0iQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKIG1zZ3N0ciAiIgotIsOEbmRlcnVuZ2VuIHZlcndlcmZlbj9cbiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxIb3N0PjpdPFZlcnplaWNobmlzPiAiCisiWzxSZWZlcmVuej4uLi5dXG4iCisiICAtLWFsbCB1bmQgZGllIGV4cGxpeml0ZSBBbmdhYmUgZWluZXIgPFJlZmVyZW56PiBzY2hsaWXDn2VuIHNpY2ggZ2VnZW5zZWl0aWcgIgorImF1cy4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYzCittc2dpZCAicmVtb3RlIG5hbWUiCittc2dzdHIgIk5hbWUgZGVzIFJlbW90ZS1SZXBvc2l0b3JpZXMiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc3Cittc2dpZCAidXNlIHN0YXRlbGVzcyBSUEMgcHJvdG9jb2wiCittc2dzdHIgInp1c3RhbmRzbG9zZXMgUlBDLVByb3Rva29sbCB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc4Cittc2dpZCAicmVhZCByZWZzIGZyb20gc3RkaW4iCittc2dzdHIgIlJlZmVyZW56ZW4gdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OQorbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgIlN0YXR1cyBkZXMgUmVtb3RlLUhlbHBlcnMgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNAorbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHNob3J0bG9nIFs8T3B0aW9uZW4+XSBbPENvbW1pdGJlcmVpY2g+XSBbWy0tXSA8UGZhZD4uLi5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTUKK21zZ2lkICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8T3B0aW9uZW4+XSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NAorbXNnaWQgIkdyb3VwIGJ5IGNvbW1pdHRlciByYXRoZXIgdGhhbiBhdXRob3IiCittc2dzdHIgIsO8YmVyIENvbW1pdC1FcnN0ZWxsZXIgYW5zdGF0dCBBdXRvciBncnVwcGllcmVuIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY2Cittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICJkaWUgQXVzZ2FiZSBlbnRzcHJlY2hlbmQgZGVyIEFuemFobCB2b24gQ29tbWl0cyBwcm8gQXV0b3Igc29ydGllcmVuIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY4Cittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgIkNvbW1pdC1CZXNjaHJlaWJ1bmdlbiB1bnRlcmRyw7xja2VuLCBudXIgQW56YWhsIGRlciBDb21taXRzIGxpZWZlcm4iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzAKK21zZ2lkICJTaG93IHRoZSBlbWFpbCBhZGRyZXNzIG9mIGVhY2ggYXV0aG9yIgorbXNnc3RyICJkaWUgRS1NYWlsLUFkcmVzc2Ugdm9uIGplZGVtIEF1dG9yIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcxCittc2dpZCAiPHc+Wyw8aTE+Wyw8aTI+XV0iCittc2dzdHIgIjx3PlssPGkxPlssPGkyPl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcyCittc2dpZCAiTGluZXdyYXAgb3V0cHV0IgorbXNnc3RyICJBdXNnYWJlIG1pdCBaZWlsZW51bWJyw7xjaGVuIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MzAxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGdpdmVuIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAienUgdmllbGUgQXJndW1lbnRlIGF1w59lcmhhbGIgZGVzIFJlcG9zaXRvcmllcyBhbmdlZ2ViZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxMworbXNnaWQgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PFdhbm4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8Q29tbWl0PiB8IDxnbG9iPikuLi5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTcKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPEJhc2lzPl1dIFstLWxpc3RdIFs8UmVmZXJlbno+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIKK21zZ3N0clswXSAiaWdub3JpZXJlICVzOyBrYW5uIG5pY2h0IG1laHIgYWxzICVkIFJlZmVyZW56IGJlaGFuZGVsbiIKK21zZ3N0clsxXSAiaWdub3JpZXJlICVzOyBrYW5uIG5pY2h0IG1laHIgYWxzICVkIFJlZmVyZW56ZW4gYmVoYW5kZWxuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG1hdGNoaW5nIHJlZnMgd2l0aCAlcyIKK21zZ3N0ciAia2VpbmUgw7xiZXJlaW5zdGltbWVuZGVuIFJlZmVyZW56ZW4gbWl0ICVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ1Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICJSZW1vdGUtVHJhY2tpbmcgdW5kIGxva2FsZSBCcmFuY2hlcyBhbnplaWdlbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NworbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJSZW1vdGUtVHJhY2tpbmctQnJhbmNoZXMgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDkKK21zZ2lkICJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIgorbXNnc3RyICInKiErLScgZW50c3ByZWNoZW5kIGRlcyBCcmFuY2hlcyBlaW5mw6RyYmVuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUxCittc2dpZCAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiCittc2dzdHIgIjxuPiB3ZWl0ZXJlIENvbW1pdHMgbmFjaCBkZW0gZ2VtZWluc2FtZW4gVm9yZ8Okbmdlci1Db21taXQgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTMKK21zZ2lkICJzeW5vbnltIHRvIG1vcmU9LTEiCittc2dzdHIgIlN5bm9ueW0gZsO8ciBtb3JlPS0xIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU0Cittc2dpZCAic3VwcHJlc3MgbmFtaW5nIHN0cmluZ3MiCittc2dzdHIgIk5hbWVuIHVudGVyZHLDvGNrZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTYKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiZGVuIGFrdHVlbGxlbiBCcmFuY2ggZWluYmV6aWVoZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTgKK21zZ2lkICJuYW1lIGNvbW1pdHMgd2l0aCB0aGVpciBvYmplY3QgbmFtZXMiCittc2dzdHIgIkNvbW1pdHMgbmFjaCBpaHJlbiBPYmpla3RuYW1lbiBiZW5lbm5lbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MAorbXNnaWQgInNob3cgcG9zc2libGUgbWVyZ2UgYmFzZXMiCittc2dzdHIgIm3DtmdsaWNoZSBNZXJnZS1CYXNlbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MgorbXNnaWQgInNob3cgcmVmcyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciByZWYiCittc2dzdHIgIiIKKyJSZWZlcmVuemVuLCBkaWUgdW5lcnJlaWNoYmFyIHZvbiBhbGxlbiBhbmRlcmVuIFJlZmVyZW56ZW4gc2luZCwgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjQKK21zZ2lkICJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIkNvbW1pdHMgaW4gdG9wb2xvZ2lzY2hlciBPcmRudW5nIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY3Cittc2dpZCAic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giCittc2dzdHIgIm51ciBDb21taXRzIGFuemVpZ2VuLCBkaWUgc2ljaCBuaWNodCBpbSBlcnN0ZW4gQnJhbmNoIGJlZmluZGVuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY5Cittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICJNZXJnZXMgYW56ZWlnZW4sIGRpZSBudXIgdm9uIGVpbmVtIEJyYW5jaCBhdXMgZXJyZWljaGJhciBzaW5kIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcxCittc2dpZCAidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyIHdoZXJlIHBvc3NpYmxlIgorbXNnc3RyICJ0b3BvbG9naXNjaGUgU29ydGllcnVuZywgQmVpYmVoYWx0dW5nIERhdHVtc29yZG51bmcgd28gbcO2Z2xpY2giCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzQKK21zZ2lkICI8bj5bLDxiYXNlPl0iCittc2dzdHIgIjxuPlssPEJhc2lzPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzUKK21zZ2lkICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgYmFzZSIKK21zZ3N0ciAiZGllIDxuPiBqw7xuZ3N0ZW4gRWludHLDpGdlIGltIFJlZmxvZywgYmVnaW5uZW5kIGFuIGRlciBCYXNpcywgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MTEKK21zZ2lkICIiCisiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvciAtLW1lcmdlLWJhc2UiCittc2dzdHIgIiIKKyItLXJlZmxvZyBpc3QgaW5rb21wYXRpYmVsIG1pdCAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50IG9kZXIgLS1tZXJnZS0iCisiYmFzZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczNQorbXNnaWQgIm5vIGJyYW5jaGVzIGdpdmVuLCBhbmQgSEVBRCBpcyBub3QgdmFsaWQiCittc2dzdHIgImtlaW5lIEJyYW5jaGVzIGFuZ2VnZWJlbiwgdW5kIEhFQUQgaXN0IHVuZ8O8bHRpZyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczOAorbXNnaWQgIi0tcmVmbG9nIG9wdGlvbiBuZWVkcyBvbmUgYnJhbmNoIG5hbWUiCittc2dzdHIgIkRpZSBPcHRpb24gLS1yZWZsb2cgYmVuw7Z0aWd0IGVpbmVuIEJyYW5jaG5hbWVuLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjc0MQorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5ICVkIGVudHJ5IGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dpZF9wbHVyYWwgIm9ubHkgJWQgZW50cmllcyBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnc3RyWzBdICJudXIgJWQgRWludHJhZyBrYW5uIHp1ciBzZWxiZW4gWmVpdCBhbmdlemVpZ3Qgd2VyZGVuIgorbXNnc3RyWzFdICJudXIgJWQgRWludHLDpGdlIGvDtm5uZW4genVyIHNlbGJlbiBaZWl0IGFuZ2V6ZWlndCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWYgJXMiCittc2dzdHIgIlJlZmVyZW56IG5pY2h0IGdlZnVuZGVuOiAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXYuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXZzLiIKK21zZ3N0clswXSAiS2FubiBuaWNodCBtZWhyIGFscyAlZCBDb21taXQgYmVoYW5kZWxuLiIKK21zZ3N0clsxXSAiS2FubiBuaWNodCBtZWhyIGFscyAlZCBDb21taXRzIGJlaGFuZGVsbi4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYuIgorbXNnc3RyICInJXMnIGlzdCBrZWluZSBnw7xsdGlnZSBSZWZlcmVuei4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgY29tbWl0ICVzICglcykiCittc2dzdHIgImthbm4gQ29tbWl0ICVzICglcykgbmljaHQgZmluZGVuIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTIKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxNdXN0ZXI+Li4uXSAiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMworbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxNdXN0ZXI+XSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MgorbXNnaWQgIm9ubHkgc2hvdyB0YWdzIChjYW4gYmUgY29tYmluZWQgd2l0aCBoZWFkcykiCittc2dzdHIgIm51ciBUYWdzIGFuemVpZ2VuIChrYW5uIG1pdCBcImhlYWRzXCIga29tYmluaWVydCB3ZXJkZW4pIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYzCittc2dpZCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIKK21zZ3N0ciAibnVyIEJyYW5jaGVzIGFuemVpZ2VuIChrYW5uIG1pdCBcInRhZ3NcIiBrb21iaW5pZXJ0IHdlcmRlbikiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjQKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICJzdHJlbmdlcmUgUmVmZXJlbnpwcsO8ZnVuZywgZXJmb3JkZXJ0IGV4YWt0ZW4gUmVmZXJlbnpwZmFkIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY3IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjkKK21zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSwgZXZlbiBpZiBpdCB3b3VsZCBiZSBmaWx0ZXJlZCBvdXQiCittc2dzdHIgIiIKKyJkaWUgSEVBRC1SZWZlcmVueiBhbnplaWdlbiwgc2VsYnN0IHdlbm4gZGllc2UgYXVzZ2VmaWx0ZXJ0IHdlcmRlbiB3w7xyZGUiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzEKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAiVGFncyBpbiBPYmpla3QtSWRlbnRpZmlrYXRpb25lbiBkZXJlZmVyZW56aWVyZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzMKK21zZ2lkICJvbmx5IHNob3cgU0hBMSBoYXNoIHVzaW5nIDxuPiBkaWdpdHMiCittc2dzdHIgIm51ciBTSEExIEhhc2ggbWl0IDxuPiBaaWZmZXJuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc3Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgIiIKKyJrZWluZSBBdXNnYWJlIGRlciBFcmdlYm5pc3NlIGluIGRpZSBTdGFuZGFyZC1BdXNnYWJlIChuw7x0emxpY2ggbWl0IC0tdmVyaWZ5KSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInNob3cgcmVmcyBmcm9tIHN0ZGluIHRoYXQgYXJlbid0IGluIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJSZWZlcmVuemVuIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSBhbnplaWdlbiwgZGllIHNpY2ggbmljaHQgaW0gbG9rYWxlbiAiCisiUmVwb3NpdG9yeSBiZWZpbmRlbiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMQorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgKGluaXR8bGlzdHxzZXR8YWRkfGRpc2FibGUpIDxvcHRpb25zPiIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxhZGR8ZGlzYWJsZSkgPE9wdGlvbmVuPiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo2NAorbXNnaWQgInRoaXMgd29ya3RyZWUgaXMgbm90IHNwYXJzZSAoc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IG5vdCBleGlzdCkiCittc2dzdHIgIiIKKyJEaWVzZXMgQXJiZWl0c3ZlcnplaWNobmlzIGlzdCBuaWNodCBwYXJ0aWVsbCAoRGF0ZWkgZsO8ciBwYXJ0aWVsbGVyIENoZWNrb3V0ICIKKyJleGlzdGllcnQgZXZlbnR1ZWxsIG5pY2h0KS4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjI1Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yIHNwYXJzZS1jaGVja291dCBmaWxlIgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnN0ZWxsZW4gZWluZXMgVmVyemVpY2huaXNzZXMgZsO8ciBEYXRlaSBlaW5lcyBwYXJ0aWVsbGVuICIKKyJDaGVja291dHMiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjY2Cittc2dpZCAiZmFpbGVkIHRvIHNldCBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIHNldHRpbmciCittc2dzdHIgIkVpbnN0ZWxsdW5nIGbDvHIgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyBrb25udGUgbmljaHQgZ2VzZXR6dCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjgzCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IFstLWNvbmVdIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzAyCittc2dpZCAiaW5pdGlhbGl6ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGluIGNvbmUgbW9kZSIKK21zZ3N0ciAiSW5pdGlhbGlzaWVyZSBkZW4gcGFydGllbGxlbiBDaGVja291dCBpbSBDb25lLU1vZHVzIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjMwOAorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJQYXJ0aWVsbGVuIENoZWNrb3V0IGluaXRpYWxpc2llcmVuIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSDDlmZmbmVuIHZvbiAnJXMnIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgbm9ybWFsaXplIHBhdGggJXMiCittc2dzdHIgImtvbm50ZSBQZmFkICclcycgbmljaHQgbm9ybWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0MTAKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChzZXR8YWRkKSAoLS1zdGRpbiB8IDxwYXR0ZXJucz4pIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IChzZXR8YWRkKSAoLS1zdGRpbiB8IDxNdXN0ZXI+KSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucXVvdGUgQy1zdHlsZSBzdHJpbmcgJyVzJyIKK21zZ3N0ciAia29ubnRlIEFuZsO8aHJ1bmdzemVpY2hlbiB2b24gQy1TdHlsZSBaZWljaGVua2V0dGUgJyVzJyBuaWNodCBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDg5IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTEzCittc2dpZCAidW5hYmxlIHRvIGxvYWQgZXhpc3Rpbmcgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICJrb25udGUgZGllIGV4aXN0aWVyZW5kZW4gTXVzdGVyIGRlcyBwYXJ0aWVsbGVuIENoZWNrb3V0cyBuaWNodCBsYWRlbiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1NTgKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gc3RhbmRhcmQgaW4iCittc2dzdHIgIk11c3RlciB2b24gZGVyIFN0YW5kYXJkLUVpbmdhYmUgbGVzZW4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTY0Cittc2dpZCAic2V0IHNwYXJzZS1jaGVja291dCBwYXR0ZXJucyIKK21zZ3N0ciAic2V0emUgTXVzdGVyIGbDvHIgcGFydGllbGxlbiBDaGVja291dCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1ODEKK21zZ2lkICJkaXNhYmxlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiUGFydGllbGxlbiBDaGVja291dCBkZWFrdGl2aWVyZW4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTkzCittc2dpZCAiZXJyb3Igd2hpbGUgcmVmcmVzaGluZyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiRmVobGVyIHfDpGhyZW5kIGRlciBBa3R1YWxpc2llcnVuZyBkZXMgQXJiZWl0c3ZlcnplaWNobmlzc2VzLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyIGJ1aWx0aW4vc3Rhc2guYzozOAorbXNnaWQgImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgc3Rhc2ggbGlzdCBbPE9wdGlvbmVuPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMyBidWlsdGluL3N0YXNoLmM6NDMKK21zZ2lkICJnaXQgc3Rhc2ggc2hvdyBbPG9wdGlvbnM+XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBzaG93IFs8T3B0aW9uZW4+XSBbPFN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNCBidWlsdGluL3N0YXNoLmM6NDgKK21zZ2lkICJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzxTdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjUKK21zZ2lkICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxTdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjYgYnVpbHRpbi9zdGFzaC5jOjYzCittc2dpZCAiZ2l0IHN0YXNoIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggYnJhbmNoIDxCcmFuY2g+IFs8U3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI3IGJ1aWx0aW4vc3Rhc2guYzo2OAorbXNnaWQgImdpdCBzdGFzaCBjbGVhciIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjgKK21zZ2lkICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl1cbiIKKyIgICAgICAgICAgWy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPiBbLS1wYXRoc3BlYy1maWxlLW51bF1dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8TmFjaHJpY2h0Pl1cbiIKKyIgICAgICAgICAgWy0tcGF0aHNwZWMtZnJvbS1maWxlPTxEYXRlaT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdXVxuIgorIiAgICAgICAgICBbLS1dIFs8UGZhZHNwZXppZmlrYXRpb24+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzozMiBidWlsdGluL3N0YXNoLmM6ODUKK21zZ2lkICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8bWVzc2FnZT5dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8TmFjaHJpY2h0Pl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MworbXNnaWQgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPFN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1OAorbXNnaWQgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxTdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NzMKK21zZ2lkICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dIFstcXwtLXF1aWV0XSA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IHN0YXNoIHN0b3JlIFstbXwtLW1lc3NhZ2UgPE5hY2hyaWNodD5dIFstcXwtLXF1aWV0XSA8Q29tbWl0PiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjc4Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8TmFjaHJpY2h0Pl1cbiIKKyIgICAgICAgICAgWy0tXSBbPFBmYWRzcGV6aWZpa2F0aW9uPi4uLl1dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIiclcycgaXN0IGtlaW4gXCJzdGFzaFwiLWFydGlnZXIgQ29tbWl0IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6JXMiCittc2dzdHIgIlp1IHZpZWxlIENvbW1pdHMgYW5nZWdlYmVuOiVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTYyIGdpdC1sZWdhY3ktc3Rhc2guc2g6NTQ5Cittc2dpZCAiTm8gc3Rhc2ggZW50cmllcyBmb3VuZC4iCittc2dzdHIgIktlaW5lIFN0YXNoLUVpbnRyw6RnZSBnZWZ1bmRlbi4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICInJXMnIGlzdCBrZWluIGfDvGx0aWdlciBSZWZlcmVuem5hbWUuIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjI1IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzUKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciBtaXQgUGFyYW1ldGVybiBpc3QgbmljaHQgaW1wbGVtZW50aWVydCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQwNAorbXNnaWQgImNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAiS2FubiBTdGFzaCBuaWNodCBhbndlbmRlbiwgc29sYW5nZSBlaW4gTWVyZ2UgaW0gR2FuZ2UgaXN0IgorCisjOiBidWlsdGluL3N0YXNoLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSBkaWZmICVzXiEuIgorbXNnc3RyICJLb25udGUga2VpbmVuIERpZmYgZXJ6ZXVnZW4gJXNeIS4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjIKK21zZ2lkICJjb25mbGljdHMgaW4gaW5kZXguVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIktvbmZsaWt0ZSBpbSBJbmRleC4gVmVyc3VjaGVuIFNpZSBlcyBvaG5lIC0taW5kZXguIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDI4Cittc2dpZCAiY291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiS29ubnRlIEluZGV4LVZlcnplaWNobmlzIG5pY2h0IHNwZWljaGVybiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQzNworbXNnaWQgImNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIgorbXNnc3RyICJLb25udGUgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiB2b20gU3Rhc2ggbmljaHQgd2llZGVyaGVyc3RlbGxlbi4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzIgorbXNnc3RyICJGw7xocmUgJXMgbWl0ICVzIHp1c2FtbWVuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDYxIGdpdC1sZWdhY3ktc3Rhc2guc2g6NjgxCittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICJJbmRleCB3dXJkZSBuaWNodCBhdXMgZGVtIFN0YXNoIHp1csO8Y2tnZWxhZGVuLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUyMiBidWlsdGluL3N0YXNoLmM6NjIxCittc2dpZCAiYXR0ZW1wdCB0byByZWNyZWF0ZSB0aGUgaW5kZXgiCittc2dzdHIgIlZlcnN1Y2hlIEluZGV4IHdpZWRlcmhlcnp1c3RlbGxlbi4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAlcyAoJXMpIgorbXNnc3RyICIlcyAoJXMpIGdlbMO2c2NodCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiVzOiBLb25udGUgU3Rhc2gtRWludHJhZyBuaWNodCBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU4MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiJyVzJyBpc3Qga2VpbmUgU3Rhc2gtUmVmZXJlbnoiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MzMgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2OTUKK21zZ2lkICJUaGUgc3Rhc2ggZW50cnkgaXMga2VwdCBpbiBjYXNlIHlvdSBuZWVkIGl0IGFnYWluLiIKK21zZ3N0ciAiIgorIkRlciBTdGFzaC1FaW50cmFnIHdpcmQgZsO8ciBkZW4gRmFsbCBiZWhhbHRlbiwgZGFzcyBTaWUgZGllc2VuIG5vY2htYWwgIgorImJlbsO2dGlnZW4uIgorCisjOiBidWlsdGluL3N0YXNoLmM6NjU2IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzEzCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJLZWluIEJyYW5jaG5hbWUgc3BlemlmaXppZXJ0IgorCisjOiBidWlsdGluL3N0YXNoLmM6Nzk2IGJ1aWx0aW4vc3Rhc2guYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAlcyB3aXRoICVzIgorbXNnc3RyICJLYW5uIG5pY2h0ICVzIG1pdCAlcyBha3R1YWxpc2llcmVuLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgxNCBidWlsdGluL3N0YXNoLmM6MTQ3OCBidWlsdGluL3N0YXNoLmM6MTU0MworbXNnaWQgInN0YXNoIG1lc3NhZ2UiCittc2dzdHIgIlN0YXNoLUJlc2NocmVpYnVuZyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgyNAorbXNnaWQgIlwiZ2l0IHN0YXNoIHN0b3JlXCIgcmVxdWlyZXMgb25lIDxjb21taXQ+IGFyZ3VtZW50IgorbXNnc3RyICJcImdpdCBzdGFzaCBzdG9yZVwiIGVyd2FydGV0IGVpbiBBcmd1bWVudCA8Q29tbWl0PiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEwNDkgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTgKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICJLZWluZSDDhG5kZXJ1bmdlbiBhdXNnZXfDpGhsdCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNDkgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNTAKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgdGhlIGluaXRpYWwgY29tbWl0IHlldCIKK21zZ3N0ciAiU2llIGhhYmVuIGJpc2hlciBub2NoIGtlaW5lbiBpbml0aWFsZW4gQ29tbWl0IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE3NiBnaXQtbGVnYWN5LXN0YXNoLnNoOjE2NQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICJLYW5uIGRlbiBha3R1ZWxsZW4gWnVzdGFuZCBkZXMgSW5kZXggbmljaHQgc3BlaWNoZXJuIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE4NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE4MAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIkthbm4gZGllIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIG5pY2h0IHNwZWljaGVybiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExOTYgYnVpbHRpbi9zdGFzaC5jOjEyMDUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMDEKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjE0Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCittc2dzdHIgIkthbm4gZGVuIGFrdHVlbGxlbiBadXN0YW5kIGRlcyBBcmJlaXRzdmVyemVpY2huaXNzZXMgbmljaHQgc3BlaWNoZXJuIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTIzMyBnaXQtbGVnYWN5LXN0YXNoLnNoOjIzNAorbXNnaWQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIgorbXNnc3RyICJLYW5uIFp1c3RhbmQgZGVzIEFyYmVpdHN2ZXJ6ZWljaG5pc3NlcyBuaWNodCBhdWZ6ZWljaG5lbiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyODIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMzgKK21zZ2lkICJDYW4ndCB1c2UgLS1wYXRjaCBhbmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICIiCisiS2FubiBuaWNodCBnbGVpY2h6ZWl0aWcgLS1wYXRjaCB1bmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvZGVyIC0tYWxsIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOTgKK21zZ2lkICJEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/IgorbXNnc3RyICJIYWJlbiBTaWUgdmllbGxlaWNodCAnZ2l0IGFkZCcgdmVyZ2Vzc2VuPyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMTMgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNDYKK21zZ2lkICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiCittc2dzdHIgIktlaW5lIGxva2FsZW4gw4RuZGVydW5nZW4genVtIFNwZWljaGVybiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMjAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTEKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAiS2FubiBcInN0YXNoXCIgbmljaHQgaW5pdGlhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzM1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICJLYW5uIGRlbiBha3R1ZWxsZW4gU3RhdHVzIG5pY2h0IHNwZWljaGVybiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICVzIgorbXNnc3RyICJBcmJlaXRzdmVyemVpY2huaXMgdW5kIEluZGV4LVN0YXR1cyAlcyBnZXNwZWljaGVydC4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDMwIGdpdC1sZWdhY3ktc3Rhc2guc2g6Mzg1Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJLYW5uIMOEbmRlcnVuZ2VuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyBuaWNodCBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjkgYnVpbHRpbi9zdGFzaC5jOjE1MzQKK21zZ2lkICJrZWVwIGluZGV4IgorbXNnc3RyICJiZWhhbHRlIEluZGV4IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3MSBidWlsdGluL3N0YXNoLmM6MTUzNgorbXNnaWQgInN0YXNoIGluIHBhdGNoIG1vZGUiCittc2dzdHIgIlN0YXNoIGluIFBhdGNoLU1vZHVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3MiBidWlsdGluL3N0YXNoLmM6MTUzNworbXNnaWQgInF1aWV0IG1vZGUiCittc2dzdHIgIndlbmlnZXIgQXVzZ2FiZW4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDc0IGJ1aWx0aW4vc3Rhc2guYzoxNTM5Cittc2dpZCAiaW5jbHVkZSB1bnRyYWNrZWQgZmlsZXMgaW4gc3Rhc2giCittc2dzdHIgInVudmVyc2lvbmllcnRlIERhdGVpZW4gaW4gU3Rhc2ggZWluYmV6aWVoZW4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDc2IGJ1aWx0aW4vc3Rhc2guYzoxNTQxCittc2dpZCAiaW5jbHVkZSBpZ25vcmUgZmlsZXMiCittc2dzdHIgImlnbm9yaWVydGUgRGF0ZWllbiBlaW5iZXppZWhlbiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4ZWMgJXMiCittc2dzdHIgIktvbm50ZSAnZXhlYyAlcycgbmljaHQgYXVzZsO8aHJlbi4iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM3Cittc2dpZCAic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIgorbXNnc3RyICIiCisiYWxsZSBaZWlsZW4sIGRpZSBtaXQgZGVtIEtvbW1lbnRhcnplaWNoZW4gYmVnaW5uZW4sIMO8YmVyc3ByaW5nZW4gdW5kICIKKyJlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjQwCittc2dpZCAicHJlcGVuZCBjb21tZW50IGNoYXJhY3RlciBhbmQgc3BhY2UgdG8gZWFjaCBsaW5lIgorbXNnc3RyICJLb21tZW50YXJ6ZWljaGVuIG1pdCBMZWVyemVpY2hlbiBhbiBqZWRlIFplaWxlIHZvcmFuc3RlbGxlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGluZyBhIGZ1bGwgcmVmIG5hbWUsIGdvdCAlcyIKK21zZ3N0ciAiVm9sbHN0w6RuZGlnZXIgUmVmZXJlbnpuYW1lIGVyd2FydGV0LCAlcyBlcmhhbHRlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY0Cittc2dpZCAic3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUgdGFrZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICInc3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUnIGVyd2FydGV0IGtlaW5lIEFyZ3VtZW50ZS4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJXMnIgorbXNnc3RyICJLYW5uIGVpbmUgS29tcG9uZW50ZSB2b24gVVJMICclcycgbmljaHQgZXh0cmFoaWVyZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MTAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTUKK21zZ2lkICJhbHRlcm5hdGl2ZSBhbmNob3IgZm9yIHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICJBbHRlcm5hdGl2ZXIgQW5rZXIgZsO8ciByZWxhdGl2ZSBQZmFkZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PFBmYWQ+XSBbPFBmYWQ+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjMwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVybCBmb3VuZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAiS2VpbmUgVVJMIGbDvHIgU3VibW9kdWwtUGZhZCAnJXMnIGluIC5naXRtb2R1bGVzIGdlZnVuZGVuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICclcydcbiIKK21zZ3N0ciAiQmV0cmV0ZSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyBmb3IgJXNcbiIKKyIuIgorbXNnc3RyICIiCisicnVuX2NvbW1hbmQgZ2FiIG5pY2h0LU51bGwgU3RhdHVzIGbDvHIgJyVzJyB6dXLDvGNrLlxuIgorIi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyB3aGlsZSByZWN1cnNpbmcgaW4gdGhlIG5lc3RlZCAiCisic3VibW9kdWxlcyBvZiAlc1xuIgorIi4iCittc2dzdHIgIiIKKyJydW5fY29tbWFuZCBnYWIgd8OkaHJlbmQgZGVyIFJla3Vyc2lvbiBpbiB2ZXJzY2hhY2h0ZWx0ZSBTdWJtb2R1bGUgdm9uICVzICIKKyJlaW5lblxuIgorIm5pY2h0LU51bGwgU3RhdHVzIHp1csO8Y2suXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBlbnRlcmluZyBlYWNoIHN1Ym1vZHVsZSBjb21tYW5kIgorbXNnc3RyICIiCisiQXVzZ2FiZW4gYmVpbSBCZXRyZXRlbiB1bmQgZGVyIEJlZmVobHNhdXNmw7xocnVuZyBpbiBlaW5lbSBTdWJtb2R1bCAiCisidW50ZXJkcsO8Y2tlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA2MworbXNnaWQgIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiUmVrdXJzaW9uIGluIHZlcnNjaGFjaHRlbHRlIFN1Ym1vZHVsZSBkdXJjaGbDvGhyZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NzIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDxjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWy0tXSA8QmVmZWhsPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGxvb2sgdXAgY29uZmlndXJhdGlvbiAnJXMnLiBBc3N1bWluZyB0aGlzIHJlcG9zaXRvcnkgaXMgaXRzIG93biAiCisiYXV0aG9yaXRhdGl2ZSB1cHN0cmVhbS4iCittc2dzdHIgIiIKKyJLb25udGUgS29uZmlndXJhdGlvbiAnJXMnIG5pY2h0IG5hY2hzY2hsYWdlbi4gTmVobWUgYW4sIGRhc3MgZGllc2VzXG4iCisiUmVwb3NpdG9yeSBzZWluIGVpZ2VuZXMgdmVyYmluZGxpY2hlcyBVcHN0cmVhbS1SZXBvc2l0b3J5IGlzdC4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorIkZlaGxlciBiZWltIEVpbnRyYWdlbiBkZXIgVVJMIGbDvHIgU3VibW9kdWwtUGZhZCAnJXMnIGluIGRpZSBLb25maWd1cmF0aW9uLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIgorbXNnc3RyICJTdWJtb2R1bCAnJXMnICglcykgZsO8ciBQZmFkICclcycgaW4gZGllIEtvbmZpZ3VyYXRpb24gZWluZ2V0cmFnZW4uXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogY29tbWFuZCB1cGRhdGUgbW9kZSBzdWdnZXN0ZWQgZm9yIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIldhcm51bmc6ICd1cGRhdGUnLU1vZHVzIGbDvHIgU3VibW9kdWwgJyVzJyB2b3JnZXNjaGxhZ2VuXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisiRmVobGVyIGJlaSDDhG5kZXJ1bmcgZGVzIEFrdHVhbGlzaWVydW5nc21vZHVzIGbDvHIgU3VibW9kdWwtUGZhZCAnJXMnIGluIGRlclxuIgorIktvbmZpZ3VyYXRpb24uIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzEwCittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IGZvciBpbml0aWFsaXppbmcgYSBzdWJtb2R1bGUiCittc2dzdHIgIkF1c2dhYmVuIGJlaSBJbml0aWFsaXNpZXJ1bmcgZWluZXMgU3VibW9kdWxzIHVudGVyZHLDvGNrZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTUKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPG9wdGlvbnM+XSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzxPcHRpb25lbj5dIFs8UGZhZD5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Nzg5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiS2VpbmUgU3VibW9kdWwtWnVvcmRudW5nIGluIC5naXRtb2R1bGVzIGbDvHIgUGZhZCAnJXMnIGdlZnVuZGVuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgcmVmIGluc2lkZSB0aGUgc3VibW9kdWxlICclcyciCittc2dzdHIgIktvbm50ZSBIRUFELVJlZmVyZW56IG5pY2h0IGlubmVyaGFsYiBkZXMgU3VibW9kdWwtUGZhZHMgJyVzJyBhdWZsw7ZzZW4uIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODY0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgIkZlaGxlciBiZWkgUmVrdXJzaW9uIGluIFN1Ym1vZHVsICclcycuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODg4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTk5Cittc2dpZCAiU3VwcHJlc3Mgc3VibW9kdWxlIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgIkF1c2dhYmUgw7xiZXIgU3VibW9kdWwtU3RhdHVzIHVudGVyZHLDvGNrZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODkKK21zZ2lkICIiCisiVXNlIGNvbW1pdCBzdG9yZWQgaW4gdGhlIGluZGV4IGluc3RlYWQgb2YgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIHN1Ym1vZHVsZSAiCisiSEVBRCIKK21zZ3N0ciAiIgorIkJlbnV0emUgZGVuIENvbW1pdCwgZGVyIGltIEluZGV4IGdlc3BlaWNoZXJ0IGlzdCwgc3RhdHQgZGVuIGltIFN1Ym1vZHVsIEhFQUQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4OTAKK21zZ2lkICJyZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgIlJla3Vyc2lvbiBpbiB2ZXJzY2hhY2h0ZWx0ZSBTdWJtb2R1bGUgZHVyY2hmw7xocmVuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODk1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPFBmYWQ+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkxOQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPFBmYWQ+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJyVzJ1xuIgorbXNnc3RyICJTeW5jaHJvbmlzaWVyZSBTdWJtb2R1bC1VUkwgZsO8ciAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gUmVnaXN0cmllcmVuIGRlciBVUkwgZsO8ciBTdWJtb2R1bC1QZmFkICclcycuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAwMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIGRlcyBTdGFuZGFyZC1SZW1vdGUtUmVwb3NpdG9yaWVzIGbDvHIgU3VibW9kdWwgJyVzJy4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQWt0dWFsaXNpZXJlbiBkZXMgUmVtb3RlLVJlcG9zaXRvcmllcyBmw7xyIFN1Ym1vZHVsICclcycuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA2MQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBzeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwiCittc2dzdHIgIkF1c2dhYmVuIGJlaSBkZXIgU3luY2hyb25pc2llcnVuZyBkZXIgU3VibW9kdWwtVVJMcyB1bnRlcmRyw7xja2VuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA2OAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPFBmYWQ+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91ICIKKyJyZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyJBcmJlaXRzdmVyemVpY2huaXMgdm9uIFN1Ym1vZHVsIGluICclcycgZW50aMOkbHQgZWluIC5naXQtVmVyemVpY2huaXNcbiIKKyIoYmVudXR6ZW4gU2llICdybSAtcmYnLCB3ZW5uIFNpZSBkaWVzZXMgd2lya2xpY2ggbWl0c2FtdCBzZWluZXIgSGlzdG9yaWVcbiIKKyJsw7ZzY2hlbiBtw7ZjaHRlbikiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgbG9jYWwgbW9kaWZpY2F0aW9uczsgdXNlICctZicgdG8gZGlzY2FyZCAiCisidGhlbSIKK21zZ3N0ciAiIgorIkFyYmVpdHN2ZXJ6ZWljaG5pcyB2b24gU3VibW9kdWwgaW4gJyVzJyBlbnRow6RsdCBsb2thbGUgw4RuZGVydW5nZW47XG4iCisidmVyd2VuZGVuIFNpZSAnLWYnLCB1bSBkaWVzZSB6dSB2ZXJ3ZXJmZW4uIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmVkIGRpcmVjdG9yeSAnJXMnXG4iCittc2dzdHIgIlZlcnplaWNobmlzICclcycgYmVyZWluaWd0LlxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIgorbXNnc3RyICJLb25udGUgQXJiZWl0c3ZlcnplaWNobmlzIGRlcyBTdWJtb2R1bHMgaW4gJyVzJyBuaWNodCBsw7ZzY2hlbi5cbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJLb25udGUga2VpbiBsZWVyZXMgVmVyemVpY2huaXMgZsO8ciBTdWJtb2R1bCBpbiAnJXMnIGVyc3RlbGxlbi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiU3VibW9kdWwgJyVzJyAoJXMpIGbDvHIgUGZhZCAnJXMnIGF1c2dldHJhZ2VuLlxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIwMAorbXNnaWQgIlJlbW92ZSBzdWJtb2R1bGUgd29ya2luZyB0cmVlcyBldmVuIGlmIHRoZXkgY29udGFpbiBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICIiCisiQXJiZWl0c3ZlcnplaWNobmlzc2Ugdm9uIFN1Ym1vZHVsZW4gbMO2c2NoZW4sIGF1Y2ggd2VubiBsb2thbGUgw4RuZGVydW5nZW4gIgorInZvcmxpZWdlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMDEKK21zZ2lkICJVbnJlZ2lzdGVyIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICJhbGxlIFN1Ym1vZHVsZSBhdXN0cmFnZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjA2Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8cGF0aD4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8UGZhZD4uLi5dXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMjAKK21zZ2lkICJVc2UgJy0tYWxsJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGVpbml0aWFsaXplIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisiVmVyd2VuZGVuIFNpZSAnLS1hbGwnLCB3ZW5uIFNpZSB3aXJrbGljaCBhbGxlIFN1Ym1vZHVsZSBkZWluaXRpYWxpc2llcmVuXG4iCisibcO2Y2h0ZW4uIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTI4OQorbXNnaWQgIiIKKyJBbiBhbHRlcm5hdGUgY29tcHV0ZWQgZnJvbSBhIHN1cGVycHJvamVjdCdzIGFsdGVybmF0ZSBpcyBpbnZhbGlkLlxuIgorIlRvIGFsbG93IEdpdCB0byBjbG9uZSB3aXRob3V0IGFuIGFsdGVybmF0ZSBpbiBzdWNoIGEgY2FzZSwgc2V0XG4iCisic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgdG8gJ2luZm8nIG9yLCBlcXVpdmFsZW50bHksIGNsb25lIHdpdGhcbiIKKyInLS1yZWZlcmVuY2UtaWYtYWJsZScgaW5zdGVhZCBvZiAnLS1yZWZlcmVuY2UnLiIKK21zZ3N0ciAiIgorIkVpbmUgQWx0ZXJuYXRpdmUsIGRpZSB2b24gZWluZXIgw7xiZXJnZW9yZG5ldGVuIFByb2pla3QtQWx0ZXJuYXRpdmVcbiIKKyJiZXJlY2huZXQgd3VyZGUsIGlzdCB1bmfDvGx0aWcuXG4iCisiVW0gR2l0IGRhcyBLbG9uZW4gb2huZSBBbHRlcm5hdGl2ZSBpbiBzb2xjaCBlaW5lbSBGYWxsIHp1IGVybGF1YmVuLCBzZXR6ZVxuIgorInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGF1ZiAnaW5mbycgb2RlciBrbG9uZSBtaXQgZGVyIE9wdGlvblxuIgorIictLXJlZmVyZW5jZS1pZi1hYmxlJyBzdGF0dCAnLS1yZWZlcmVuY2UnLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzMjggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgY2Fubm90IGFkZCBhbHRlcm5hdGU6ICVzIgorbXNnc3RyICJTdWJtb2R1bCAnJXMnIGthbm4gQWx0ZXJuYXRpdmUgbmljaHQgaGluenVmw7xnZW46ICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM2NworIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAiV2VydCAnJXMnIGbDvHIgc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgd2lyZCBuaWNodCBlcmthbm50IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM3NAorIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24gaXMgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIldlcnQgJyVzJyBmw7xyIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiB3aXJkIG5pY2h0IGVya2FubnQuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5OAorbXNnaWQgIndoZXJlIHRoZSBuZXcgc3VibW9kdWxlIHdpbGwgYmUgY2xvbmVkIHRvIgorbXNnc3RyICJQZmFkIGbDvHIgbmV1ZXMgU3VibW9kdWwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAxCittc2dpZCAibmFtZSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSIKK21zZ3N0ciAiTmFtZSBkZXMgbmV1ZW4gU3VibW9kdWxzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNAorbXNnaWQgInVybCB3aGVyZSB0byBjbG9uZSB0aGUgc3VibW9kdWxlIGZyb20iCittc2dzdHIgIlVSTCB2b24gZGVyIGRhcyBTdWJtb2R1bCBnZWtsb250IHdpcmQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDEyCittc2dpZCAiZGVwdGggZm9yIHNoYWxsb3cgY2xvbmVzIgorbXNnc3RyICJUaWVmZSBkZXMgS2xvbnMgbWl0IHVudm9sbHN0w6RuZGlnZXIgSGlzdG9yaWUgKHNoYWxsb3cpIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxNSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyNAorbXNnaWQgImZvcmNlIGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgIkZvcnRzY2hyaXR0c2FuemVpZ2UgYmVpbSBLbG9uZW4gZXJ6d2luZ2VuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxNyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyNgorbXNnaWQgImRpc2FsbG93IGNsb25pbmcgaW50byBub24tZW1wdHkgZGlyZWN0b3J5IgorbXNnc3RyICJLbG9uZW4gaW4gZWluIG5pY2h0IGxlZXJlcyBWZXJ6ZWljaG5pcyB2ZXJiaWV0ZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDI0Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8cmVwb3NpdG9yeT5dIFstLW5hbWUgPG5hbWU+XSBbLS1kZXB0aCA8ZGVwdGg+XSBbLS1zaW5nbGUtYnJhbmNoXSAtLXVybCAiCisiPHVybD4gLS1wYXRoIDxwYXRoPiIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PFBmYWQ+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8UmVwb3NpdG9yeT5dIFstLW5hbWUgPE5hbWU+XSBbLS1kZXB0aCA8VGllZmU+XSBbLS1zaW5nbGUtYnJhbmNoXSAtLXVybCAiCisiPFVSTD4gLS1wYXRoIDxQZmFkPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gY3JlYXRlL3VzZSAnJXMnIGluIGFub3RoZXIgc3VibW9kdWxlJ3MgZ2l0IGRpciIKK21zZ3N0ciAiIgorIkVyc3RlbGx1bmcvQmVudXR6dW5nIHZvbiAnJXMnIGluIGVpbmVtIGFuZGVyZW4gU3VibW9kdWwtR2l0LVZlcnplaWNobmlzXG4iCisidmVyd2VpZ2VydC4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiS2xvbmVuIHZvbiAnJXMnIGluIFN1Ym1vZHVsLVBmYWQgJyVzJyBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDY0CisjLCBjLWZvcm1hdAorbXNnaWQgImRpcmVjdG9yeSBub3QgZW1wdHk6ICclcyciCittc2dzdHIgIlZlcnplaWNobmlzIGlzdCBuaWNodCBsZWVyOiAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIktvbm50ZSBTdWJtb2R1bC1WZXJ6ZWljaG5pcyAnJXMnIG5pY2h0IGZpbmRlbi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgQWt0dWFsaXNpZXJ1bmdzbW9kdXMgJyVzJyBmw7xyIFN1Ym1vZHVsLVBmYWQgJyVzJy4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisiVW5nw7xsdGlnZXIgQWt0dWFsaXNpZXJ1bmdzbW9kdXMgJyVzJyBmw7xyIFN1Ym1vZHVsLVBmYWQgJyVzJyBrb25maWd1cmllcnQuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYxNworIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJXMnIG5vdCBpbml0aWFsaXplZCIKK21zZ3N0ciAiU3VibW9kdWwtUGZhZCAnJXMnIG5pY2h0IGluaXRpYWxpc2llcnQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjIxCittc2dpZCAiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIk1laW50ZW4gU2llIHZpZWxsZWljaHQgJ3VwZGF0ZSAtLWluaXQnPyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgdW5tZXJnZWQgc3VibW9kdWxlICVzIgorbXNnc3RyICLDnGJlcnNwcmluZ2UgbmljaHQgenVzYW1tZW5nZWbDvGhydGVzIFN1Ym1vZHVsICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiw5xiZXJzcHJpbmdlIFN1Ym1vZHVsICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnLiBSZXRyeSBzY2hlZHVsZWQiCittc2dzdHIgIkZlaGxlciBiZWltIEtsb25lbiB2b24gJyVzJy4gV2VpdGVyZXIgVmVyc3VjaCBnZXBsYW50IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJyBhIHNlY29uZCB0aW1lLCBhYm9ydGluZyIKK21zZ3N0ciAiWndlaXRlciBWZXJzdWNoICclcycgenUga2xvbmVuIGZlaGxnZXNjaGxhZ2VuLCBicmVjaGUgYWIuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwMyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE0OQorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJQZmFkIHp1bSBBcmJlaXRzdmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA2Cittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUsIGFjcm9zcyBuZXN0ZWQgc3VibW9kdWxlIGJvdW5kYXJpZXMiCittc2dzdHIgIiIKKyJQZmFkIHp1bSBBcmJlaXRzdmVyemVpY2huaXMsIMO8YmVyIHZlcnNjaGFjaHRlbHRlIFN1Ym1vZHVsLUdyZW56ZW4gaGlud2VnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMAorbXNnaWQgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiCittc2dzdHIgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9kZXIgbm9uZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTYKK21zZ2lkICJDcmVhdGUgYSBzaGFsbG93IGNsb25lIHRydW5jYXRlZCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXZpc2lvbnMiCittc2dzdHIgIiIKKyJFcnN0ZWxsdW5nIGVpbmVzIEtsb25zIG1pdCB1bnZvbGxzdMOkbmRpZ2VyIEhpc3RvcmllIChzaGFsbG93KSwgYWJnZXNjaG5pdHRlbiAiCisiYmVpXG4iCisiZGVyIGFuZ2VnZWJlbmVuIEFuemFobCB2b24gQ29tbWl0cy4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE5Cittc2dpZCAicGFyYWxsZWwgam9icyIKK21zZ3N0ciAiUGFyYWxsZWxlIEF1c2bDvGhydW5nZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTIxCittc2dpZCAid2hldGhlciB0aGUgaW5pdGlhbCBjbG9uZSBzaG91bGQgZm9sbG93IHRoZSBzaGFsbG93IHJlY29tbWVuZGF0aW9uIgorbXNnc3RyICIiCisib2IgZGFzIGluaXRpYWxlIEtsb25lbiBkZW4gRW1wZmVobHVuZ2VuIGbDvHIgZWluZSB1bnZvbGxzdMOkbmRpZ2VcbiIKKyJIaXN0b3JpZSAoc2hhbGxvdykgZm9sZ2VuIHNvbGwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTIyCittc2dpZCAiZG9uJ3QgcHJpbnQgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAia2VpbmUgRm9ydHNjaHJpdHRzYW56ZWlnZSBiZWltIEtsb25lbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MzMKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08UGZhZD5dIFs8UGZhZD4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk0NgorbXNnaWQgImJhZCB2YWx1ZSBmb3IgdXBkYXRlIHBhcmFtZXRlciIKK21zZ3N0ciAiRmVobGVyaGFmdGVyIFdlcnQgZsO8ciAtLXVwZGF0ZSBQYXJhbWV0ZXIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0IGJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0ICIKKyJ0aGUgc3VwZXJwcm9qZWN0IGlzIG5vdCBvbiBhbnkgYnJhbmNoIgorbXNnc3RyICIiCisiQnJhbmNoIHZvbiBTdWJtb2R1bCAoJXMpIGlzdCBrb25maWd1cmllcnQsIGRlbiBCcmFuY2ggZGVzIEhhdXB0cHJvamVrdGVzXG4iCisienUgZXJiZW4sIGFiZXIgZGFzIEhhdXB0cHJvamVrdCBiZWZpbmRldCBzaWNoIGF1ZiBrZWluZW0gQnJhbmNoLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBhIHJlcG9zaXRvcnkgaGFuZGxlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlIGtlaW4gUmVwb3NpdG9yeS1IYW5kbGUgZsO8ciBTdWJtb2R1bCAnJXMnIGVyaGFsdGVuLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNTAKK21zZ2lkICJyZWN1cnNlIGludG8gc3VibW9kdWxlcyIKK21zZ3N0ciAiUmVrdXJzaW9uIGluIFN1Ym1vZHVsZSBkdXJjaGbDvGhyZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTU2Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPE9wdGlvbmVuPl0gWzxQZmFkPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjEyCittc2dpZCAiY2hlY2sgaWYgaXQgaXMgc2FmZSB0byB3cml0ZSB0byB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAicHLDvGZlbiwgb2IgZXMgc2ljaGVyIGlzdCwgaW4gZGllIERhdGVpIC5naXRtb2R1bGVzIHp1IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMTUKK21zZ2lkICJ1bnNldCB0aGUgY29uZmlnIGluIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICJLb25maWd1cmF0aW9uIGluIGRlciAuZ2l0bW9kdWxlcy1EYXRlaSBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjIwCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA8bmFtZT4gWzx2YWx1ZT5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIDxuYW1lPiBbPFdlcnQ+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMjEKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPE5hbWU+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIyMgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUiCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjQxIGdpdC1zdWJtb2R1bGUuc2g6MTc0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJwbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIC5naXRtb2R1bGVzIGZpbGUgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIkJpdHRlIHN0ZWxsZW4gU2llIHNpY2hlciwgZGFzcyBzaWNoIGRpZSBEYXRlaSAuZ2l0bW9kdWxlcyBpbSAiCisiQXJiZWl0c3ZlcnplaWNobmlzIGJlZmluZGV0LiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyOTEgZ2l0LmM6NDMzIGdpdC5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2Vzbid0IHN1cHBvcnQgLS1zdXBlci1wcmVmaXgiCittc2dzdHIgIiVzIHVudGVyc3TDvHR6dCBrZWluIC0tc3VwZXItcHJlZml4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI5NworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHN1Ym1vZHVsZS0taGVscGVyIHN1YmNvbW1hbmQiCittc2dzdHIgIiclcycgaXN0IGtlaW4gZ8O8bHRpZ2VyIFVudGVyYmVmZWhsIHZvbiBzdWJtb2R1bGUtLWhlbHBlciIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo4Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiBbPG9wdGlvbnM+XSA8bmFtZT4gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiBbPE9wdGlvbmVuPl0gPE5hbWU+IFs8UmVmZXJlbno+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxOYW1lPiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MAorbXNnaWQgInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiCittc2dzdHIgIiIKKyJGZWhsZXJtZWxkdW5nZW4gZsO8ciBuaWNodC1zeW1ib2xpc2NoZSAobG9zZ2Vsw7ZzdGUpIFJlZmVyZW56ZW4gdW50ZXJkcsO8Y2tlbiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MQorbXNnaWQgImRlbGV0ZSBzeW1ib2xpYyByZWYiCittc2dzdHIgInN5bWJvbGlzY2hlIFJlZmVyZW56ZW4gbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDIKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgInZlcmvDvHJ6dGUgQXVzZ2FiZSBkZXIgUmVmZXJlbnplbiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24iCittc2dzdHIgIkdydW5kIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICJHcnVuZCBmw7xyIGRpZSBBa3R1YWxpc2llcnVuZyIKKworIzogYnVpbHRpbi90YWcuYzoyNQorbXNnaWQgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XVxuIgorIlx0XHQ8dGFnbmFtZT4gWzxoZWFkPl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPFNjaGzDvHNzZWwtaWQ+XSBbLWZdIFstbSA8QmVzY2hyZWlidW5nPiB8IC1GIDxEYXRlaT5dXG4iCisiXHRcdDxUYWduYW1lPiBbPENvbW1pdD5dIgorCisjOiBidWlsdGluL3RhZy5jOjI3Cittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLWQgPFRhZ25hbWU+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjI4Cittc2dpZCAiIgorImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLW5vLWNvbnRhaW5zIDxjb21taXQ+XSBbLS0iCisicG9pbnRzLWF0IDxvYmplY3Q+XVxuIgorIlx0XHRbLS1mb3JtYXQ9PGZvcm1hdD5dIFstLVtuby1dbWVyZ2VkIFs8Y29tbWl0Pl1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyAtbCBbLW5bPE51bW1lcj5dXSBbLS1jb250YWlucyA8Q29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPENvbW1pdD5dIFstLSIKKyJwb2ludHMtYXQgPE9iamVrdD5dXG4iCisiXHRcdFstLWZvcm1hdD08TXVzdGVyPl0gWy0tW25vLV1tZXJnZWQgWzxDb21taXQ+XV0gWzxNdXN0ZXI+Li4uXSIKKworIzogYnVpbHRpbi90YWcuYzozMAorbXNnaWQgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxGb3JtYXQ+XSA8VGFnbmFtZT4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiVGFnICclcycgbmljaHQgZ2VmdW5kZW4uIgorCisjOiBidWlsdGluL3RhZy5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlRhZyAnJXMnIGdlbMO2c2NodCAod2FyICVzKVxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCiAiXG4iCi0iQWxsZSBub2NoIG5pY2h0IGNvbW1pdHRldGVuIMOEbmRlcnVuZ2VuIHfDvHJkZW4gdmVybG9yZW4gZ2VoZW4uXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCittc2dzdHIgIiIKICJcbiIKLSLDhG5kZXJ1bmdlbiBqZXR6dCB2ZXJ3ZXJmZW4/IgorIkdlYmVuIFNpZSBlaW5lIEJlc2NocmVpYnVuZyBmw7xyIFRhZ1xuIgorIiAgJXNcbiIKKyJlaW4uIFplaWxlbiwgZGllIG1pdCAnJWMnIGJlZ2lubmVuLCB3ZXJkZW4gaWdub3JpZXJ0LlxuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjI0NgotbXNnaWQgIkFib3J0aW5nIgotbXNnc3RyICJBYmJydWNoIgorIzogYnVpbHRpbi90YWcuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkdlYmVuIFNpZSBlaW5lIEJlc2NocmVpYnVuZyBmw7xyIFRhZ1xuIgorIiAgJXNcbiIKKyJlaW4uIFplaWxlbiwgZGllIG1pdCAnJWMnIGJlZ2lubmVuLCB3ZXJkZW4gYmVoYWx0ZW47IFNpZSBkw7xyZmVuIGRpZXNlXG4iCisic2VsYnN0IGVudGZlcm5lbiB3ZW5uIFNpZSBtw7ZjaHRlbi5cbiIKIAotIzogbGliL21lcmdlLnRjbDoyNDcKLW1zZ2lkICJmaWxlcyByZXNldCIKLW1zZ3N0ciAiRGF0ZWllbiB6dXLDvGNrZ2VzZXR6dCIKKyM6IGJ1aWx0aW4vdGFnLmM6MTk4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAia29ubnRlIFRhZyBuaWNodCBzaWduaWVyZW4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6Mjc3Ci1tc2dpZCAiQWJvcnQgZmFpbGVkLiIKLW1zZ3N0ciAiQWJicnVjaCBmZWhsZ2VzY2hsYWdlbi4iCisjOiBidWlsdGluL3RhZy5jOjIwMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAia29ubnRlIFRhZy1EYXRlaSBuaWNodCBzY2hyZWliZW4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6Mjc5Ci1tc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgotbXNnc3RyICJBYmJydWNoIGR1cmNoZ2Vmw7xocnQuIEJlcmVpdC4iCisjOiBidWlsdGluL3RhZy5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgY3JlYXRlZCBhIG5lc3RlZCB0YWcuIFRoZSBvYmplY3QgcmVmZXJyZWQgdG8gYnkgeW91ciBuZXcgdGFnIGlzXG4iCisiYWxyZWFkeSBhIHRhZy4gSWYgeW91IG1lYW50IHRvIHRhZyB0aGUgb2JqZWN0IHRoYXQgaXQgcG9pbnRzIHRvLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgdGFnIC1mICVzICVzXnt9IgorbXNnc3RyICIiCisiU2llIGhhYmVuIGVpbmVuIHZlcnNjaGFjaHRlbHRlbiBUYWcgZXJ6ZXVndC4gRGFzIE9iamVrdCwgYXVmIHdlbGNoZXMgSWhyXG4iCisibmV1ZXMgVGFnIHJlZmVyZW56aWVydCwgaXN0IGJlcmVpdHMgZWluIFRhZy4gV2VubiBTaWUgZGFzIE9iamVrdCB0YWdnZW5cbiIKKyJ3b2xsdGVuLCB3b3JhdWYgZGllc2VzIHplaWd0LCBudXR6ZW4gU2llOlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKKworIzogYnVpbHRpbi90YWcuYzoyMzIKK21zZ2lkICJiYWQgb2JqZWN0IHR5cGUuIgorbXNnc3RyICJ1bmfDvGx0aWdlciBPYmpla3QtVHlwIgorCisjOiBidWlsdGluL3RhZy5jOjI4NAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAia2VpbmUgVGFnLUJlc2NocmVpYnVuZz8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgIkRpZSBUYWctQmVzY2hyZWlidW5nIHd1cmRlIGluICVzIGdlbGFzc2VuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAyCittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgIlRhZ25hbWVuIGF1Zmxpc3RlbiIKKworIzogYnVpbHRpbi90YWcuYzo0MDQKK21zZ2lkICJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiPG4+IFplaWxlbiBqZWRlciBUYWctQmVzY2hyZWlidW5nIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3RhZy5jOjQwNgorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICJUYWdzIGzDtnNjaGVuIgorCisjOiBidWlsdGluL3RhZy5jOjQwNworbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICJUYWdzIMO8YmVycHLDvGZlbiIKKworIzogYnVpbHRpbi90YWcuYzo0MDkKK21zZ2lkICJUYWcgY3JlYXRpb24gb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9uZW4gZsO8ciBFcnN0ZWxsdW5nIHZvbiBUYWdzIgorCisjOiBidWlsdGluL3RhZy5jOjQxMQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAiYW5ub3RpZXJ0ZXMgVGFnLCBiZW7DtnRpZ3QgZWluZSBCZXNjaHJlaWJ1bmciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDEzCittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgIlRhZy1CZXNjaHJlaWJ1bmciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE1Cittc2dpZCAiZm9yY2UgZWRpdCBvZiB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiQmVhcmJlaXR1bmcgZGVyIFRhZy1CZXNjaHJlaWJ1bmcgZXJ6d2luZ2VuIgorCisjOiBidWlsdGluL3RhZy5jOjQxNgorbXNnaWQgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciCittc2dzdHIgImFubm90aWVydGVzIHVuZCBHUEctc2lnbmllcnRlcyBUYWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE5Cittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAiZWluZW4gYW5kZXJlbiBTY2hsw7xzc2VsIHZlcndlbmRlbiwgdW0gZGFzIFRhZyB6dSBzaWduaWVyZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIwCittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAiZGFzIFRhZyBlcnNldHplbiwgd2VubiBlcyBleGlzdGllcnQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIxIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OQorbXNnaWQgImNyZWF0ZSBhIHJlZmxvZyIKK21zZ3N0ciAiUmVmbG9nIGVyc3RlbGxlbiIKKworIzogYnVpbHRpbi90YWcuYzo0MjMKK21zZ2lkICJUYWcgbGlzdGluZyBvcHRpb25zIgorbXNnc3RyICJPcHRpb25lbiBmw7xyIEF1Zmxpc3R1bmcgZGVyIFRhZ3MiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI0Cittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICJMaXN0ZSBkZXIgVGFncyBpbiBTcGFsdGVuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3RhZy5jOjQyNSBidWlsdGluL3RhZy5jOjQyNworbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAibnVyIFRhZ3MgYXVzZ2ViZW4sIGRpZSBkaWVzZW4gQ29tbWl0IGJlaW5oYWx0ZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI2IGJ1aWx0aW4vdGFnLmM6NDI4Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJudXIgVGFncyBhdXNnZWJlbiwgZGllIGRpZXNlbiBDb21taXQgbmljaHQgZW50aGFsdGVuIgorCisjOiBidWlsdGluL3RhZy5jOjQyOQorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgIm51ciBUYWdzIGF1c2dlYmVuLCBkaWUgZ2VtZXJnZWQgd3VyZGVuIgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJudXIgVGFncyBhdXNnZWJlbiwgZGllIG5pY2h0IGdlbWVyZ2VkIHd1cmRlbiIKKworIzogYnVpbHRpbi90YWcuYzo0MzQKK21zZ2lkICJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAibnVyIFRhZ3Mgdm9uIGRlbSBPYmpla3QgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDgyCittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIHVuZCAtbiBzaW5kIGlua29tcGF0aWJlbCIKKworIzogYnVpbHRpbi90YWcuYzo1MDQKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiRGllIE9wdGlvbiAtbiBpc3QgbnVyIGltIExpc3Rlbm1vZHVzIGVybGF1YnQuIgorCisjOiBidWlsdGluL3RhZy5jOjUwNgorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIkRpZSBPcHRpb24gLS1jb250YWlucyBpc3QgbnVyIGltIExpc3Rlbm1vZHVzIGVybGF1YnQuIgorCisjOiBidWlsdGluL3RhZy5jOjUwOAorbXNnaWQgIi0tbm8tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIkRpZSBPcHRpb24gLS1uby1jb250YWlucyBpc3QgbnVyIGltIExpc3Rlbm1vZHVzIGVybGF1YnQuIgorCisjOiBidWlsdGluL3RhZy5jOjUxMAorbXNnaWQgIi0tcG9pbnRzLWF0IG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tcG9pbnRzLWF0IGlzdCBudXIgaW0gTGlzdGVubW9kdXMgZXJsYXVidC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEyCittc2dpZCAiLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIkRpZSBPcHRpb25lbiAtLW1lcmdlZCB1bmQgLS1uby1tZXJnZWQgc2luZCBudXIgaW0gTGlzdGVubW9kdXMgZXJsYXVidC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTIzCittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJudXIgZWluZSAtRiBvZGVyIC1tIE9wdGlvbiBpc3QgZXJsYXVidC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQyCittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICJ6dSB2aWVsZSBQYXJhbWV0ZXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICInJXMnIGlzdCBrZWluIGfDvGx0aWdlciBUYWduYW1lLiIKKworIzogYnVpbHRpbi90YWcuYzo1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlRhZyAnJXMnIGV4aXN0aWVydCBiZXJlaXRzIgorCisjOiBidWlsdGluL3RhZy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlRhZyAnJXMnIGFrdHVhbGlzaWVydCAod2FyICVzKVxuIgorCisjOiBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTAyCittc2dpZCAiVW5wYWNraW5nIG9iamVjdHMiCittc2dzdHIgIkVudHBhY2tlIE9iamVrdGUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiB2b24gVmVyemVpY2huaXMgJyVzJyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJLb25udGUgRGF0ZWkgJyVzJyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAiS29ubnRlIERhdGVpICclcycgbmljaHQgbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE1IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJLb25udGUgVmVyemVpY2huaXMgJyVzJyBuaWNodCBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGVzdGluZyBtdGltZSBpbiAnJXMnICIKK21zZ3N0ciAiUHLDvGZlIG10aW1lIGluICclcycgIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE1NAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBmaWxlIgorbXNnc3RyICIiCisiVmVyemVpY2huaXNpbmZvcm1hdGlvbmVuIGhhYmVuIHNpY2ggbmFjaCBIaW56dWbDvGdlbiBlaW5lciBuZXVlbiBEYXRlaSBuaWNodCAiCisiZ2XDpG5kZXJ0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE2NworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJWZXJ6ZWljaG5pc2luZm9ybWF0aW9uZW4gaGFiZW4gc2ljaCBuYWNoIEhpbnp1ZsO8Z2VuIGVpbmVzIG5ldWVuICIKKyJWZXJ6ZWljaG5pc3NlcyBuaWNodCBnZcOkbmRlcnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTgwCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIHVwZGF0aW5nIGEgZmlsZSIKK21zZ3N0ciAiIgorIlZlcnplaWNobmlzaW5mb3JtYXRpb25lbiBoYWJlbiBzaWNoIG5hY2ggQWt0dWFsaXNpZXJ1bmcgZWluZXIgRGF0ZWkgZ2XDpG5kZXJ0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5MQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciBhZGRpbmcgYSBmaWxlIGluc2lkZSBzdWJkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJWZXJ6ZWljaG5pc2luZm9ybWF0aW9uZW4gaGFiZW4gc2ljaCBuYWNoIEhpbnp1ZsO8Z2VuIGVpbmVyIERhdGVpIGluIGVpbiAiCisiVW50ZXJ2ZXJ6ZWljaG5pcyBnZcOkbmRlcnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjAyCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBmaWxlIgorbXNnc3RyICIiCisiVmVyemVpY2huaXNpbmZvcm1hdGlvbmVuIGhhYmVuIHNpY2ggbmFjaCBkZW0gTMO2c2NoZW4gZWluZXIgRGF0ZWkgbmljaHQgIgorImdlw6RuZGVydCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTUKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIlZlcnplaWNobmlzaW5mb3JtYXRpb25lbiBoYWJlbiBzaWNoIG5hY2ggZGVtIEzDtnNjaGVuIGVpbmVzIFZlcnplaWNobmlzc2VzICIKKyJuaWNodCBnZcOkbmRlcnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIyCittc2dpZCAiIE9LIgorbXNnc3RyICIgT0siCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTkxCittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgdXBkYXRlLWluZGV4IFs8T3B0aW9uZW4+XSBbLS1dIFs8RGF0ZWk+Li4uXSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzQKK21zZ2lkICJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiCittc2dzdHIgIiIKKyJBa3R1YWxpc2llcnVuZyBmb3J0c2V0emVuLCBhdWNoIHdlbm4gZGVyIEluZGV4IGFrdHVhbGlzaWVydCB3ZXJkZW4gbXVzcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzcKK21zZ2lkICJyZWZyZXNoOiBpZ25vcmUgc3VibW9kdWxlcyIKK21zZ3N0ciAiQWt0dWFsaXNpZXJ1bmc6IGlnbm9yaWVydCBTdWJtb2R1bGUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgwCittc2dpZCAiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiCittc2dzdHIgImtlaW5lIG5ldWVuIERhdGVpZW4gaWdub3JpZXJlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODIKK21zZ2lkICJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIKK21zZ3N0ciAiRGF0ZWllbiBWZXJ6ZWljaG5pc3NlIGVyc2V0emVuIGxhc3NlbiwgdW5kIHVtZ2VkcmVodCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODQKK21zZ2lkICJub3RpY2UgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICJmZWhsZW5kZSBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyBiZWFjaHRlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODYKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiIgorImFrdHVhbGlzaWVyZW4sIGF1Y2ggd2VubiBkZXIgSW5kZXggbmljaHQgenVzYW1tZW5nZWbDvGhydGUgRWludHLDpGdlIGJlaW5oYWx0ZXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg5Cittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICJEYXRlaWluZm9ybWF0aW9uZW4gYWt0dWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTMKK21zZ2lkICJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciCittc2dzdHIgIndpZSAtLXJlZnJlc2gsIGlnbm9yaWVydCBhYmVyIFwiYXNzdW1lLXVuY2hhbmdlZFwiIEVpbnN0ZWxsdW5nIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NworbXNnaWQgIjxtb2RlPiw8b2JqZWN0Piw8cGF0aD4iCittc2dzdHIgIjxNb2R1cz4sPE9iamVrdD4sPFBmYWQ+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiZGVuIGFuZ2VnZWJlbmVuIEVpbnRyYWcgenVtIENvbW1pdCB2b3JtZXJrZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwOAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAiZGllc2UgRGF0ZWkgaW1tZXIgYWxzIHVudmVyw6RuZGVydCBiZXRyYWNodGVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTEKK21zZ2lkICJjbGVhciBhc3N1bWVkLXVuY2hhbmdlZCBiaXQiCittc2dzdHIgIlwiYXNzdW1lZC11bmNoYW5nZWRcIi1CaXQgbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgIkRhdGVpZW4gYWxzIFwiaW5kZXgtb25seVwiIG1hcmtpZXJlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE3Cittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgIlwic2tpcC13b3JrdHJlZVwiLUJpdCBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIwCittc2dpZCAiZG8gbm90IHRvdWNoIGluZGV4LW9ubHkgZW50cmllcyIKK21zZ3N0ciAiXCJpbmRleC1vbmx5XCIgRWludHLDpGdlIMO8YmVyc3ByaW5nZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMgorbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisiZGllIMOEbmRlcnVuZ2VuIG51ciB6dW0gQ29tbWl0IHZvcm1lcmtlbjsgSW5oYWx0IHdpcmQgbmljaHQgZGVyIE9iamVrdC0iCisiRGF0ZW5iYW5rIGhpbnp1Z2Vmw7xndCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI0Cittc2dpZCAicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIKK21zZ3N0ciAiIgorImJlbmFubnRlIFBmYWRlIGzDtnNjaGVuLCBhdWNoIHdlbm4gc2llIHNpY2ggaW0gQXJiZWl0c3ZlcnplaWNobmlzIGJlZmluZGVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjYKK21zZ2lkICJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiCittc2dzdHIgIm1pdCAtLXN0ZGluOiBlaW5nZWdlYmVuZSBaZWlsZW4gc2luZCBkdXJjaCBOVUwtQnl0ZXMgYWJnZXNjaGxvc3NlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI4Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIHRvIGJlIHVwZGF0ZWQgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiTGlzdGUgZGVyIHp1IGFrdHVhbGlzaWVyZW5kZW4gUGZhZGUgdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzIKK21zZ2lkICJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiRWludHLDpGdlIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSB6dW0gQ29tbWl0IHZvcm1lcmtlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDM2Cittc2dpZCAicmVwb3B1bGF0ZSBzdGFnZXMgIzIgYW5kICMzIGZvciB0aGUgbGlzdGVkIHBhdGhzIgorbXNnc3RyICIiCisid2llZGVyaG9sdGVzIEVpbnBmbGVnZW4gZGVyIFp1c3TDpG5kZSAjMiB1bmQgIzMgZsO8ciBkaWUgYXVmZ2VsaXN0ZXRlbiBQZmFkZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQwCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgIm51ciBFaW50csOkZ2UgYWt0dWFsaXNpZXJlbiwgZGllIHVudGVyc2NoaWVkbGljaCB6dSBIRUFEIHNpbmQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NAorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImZlaGxlbmRlIERhdGVpZW4gaW0gQXJiZWl0c3ZlcnplaWNobmlzIGlnbm9yaWVyZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NworbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiZGllIEFrdGlvbmVuIGluIGRlciBTdGFuZGFyZC1BdXNnYWJlIGF1c2dlYmVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDkKK21zZ2lkICIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIKK21zZ3N0ciAiKGbDvHIgRnJlbWRwcm9ncmFtbWUpIGtlaW5lIGdlc3BlaWNoZXJ0ZW4sIG5pY2h0IGF1ZmdlbMO2c3RlIEtvbmZsaWt0ZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDUzCittc2dpZCAid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiCittc2dzdHIgIkluZGV4LURhdGVpIGluIGRpZXNlbSBGb3JtYXQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTUKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiU3BsaXR0aW5nIGRlcyBJbmRleCBha3RpdmllcmVuIG9kZXIgZGVha3RpdmllcmVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTcKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIkNhY2hlIGbDvHIgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiBha3RpdmllcmVuIG9kZXIgZGVha3RpdmllcmVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTkKK21zZ2lkICJ0ZXN0IGlmIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorInByw7xmZW4sIG9iIGRhcyBEYXRlaXN5c3RlbSBlaW5lbiBDYWNoZSBmw7xyIHVudmVyc2lvbmllcnRlIERhdGVpZW4gdW50ZXJzdMO8dHp0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjEKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorIkNhY2hlIGbDvHIgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiBvaG5lIFByw7xmdW5nIGRlcyBEYXRlaXN5c3RlbXMgYWt0aXZpZXJlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDYzCittc2dpZCAid3JpdGUgb3V0IHRoZSBpbmRleCBldmVuIGlmIGlzIG5vdCBmbGFnZ2VkIGFzIGNoYW5nZWQiCittc2dzdHIgIkluZGV4IHJhdXNzY2hyZWliZW4sIGF1Y2ggd2VubiBkaWVzZXIgbmljaHQgYWxzIGdlw6RuZGVydCBtYXJraWVydCBpc3QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIGZpbGUgc3lzdGVtIG1vbml0b3IiCittc2dzdHIgIkRhdGVpc3lzdGVtLU1vbml0b3IgYWt0aXZpZXJlbiBvZGVyIGRlYWt0aXZpZXJlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY3Cittc2dpZCAibWFyayBmaWxlcyBhcyBmc21vbml0b3IgdmFsaWQiCittc2dzdHIgIkRhdGVpZW4gYWxzIFwiZnNtb25pdG9yIHZhbGlkXCIgbWFya2llcmVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNzAKK21zZ2lkICJjbGVhciBmc21vbml0b3IgdmFsaWQgYml0IgorbXNnc3RyICJcImZzbW9uaXRvciB2YWxpZFwiLUJpdCBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTczCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZW5hYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IGlzdCBhdWYgJ2ZhbHNlJyBnZXNldHp0LiBFbnRmZXJuZW4gb2RlciDDpG5kZXJuIFNpZSBkaWVzLFxuIgorIndlbm4gc2llIHdpcmtsaWNoIGRhcyBTcGxpdHRpbmcgZGVzIEluZGV4IGFrdGl2aWVyZW4gbcO2Y2h0ZW4uIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExODIKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggaXN0IGF1ZiAndHJ1ZScgZ2VzZXR6dC4gRW50ZmVybmVuIG9kZXIgw6RuZGVybiBTaWUgZGllcyxcbiIKKyJ3ZW5uIFNpZSB3aXJrbGljaCBkYXMgU3BsaXR0aW5nIGRlcyBJbmRleCBkZWFrdGl2aWVyZW4gbcO2Y2h0ZW4uIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTQKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBkaXNhYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzdCBhdWYgJ3RydWUnIGdlc2V0enQuIEVudGZlcm5lbiBvZGVyIMOkbmRlcm4gU2llIGRpZXMsXG4iCisid2VubiBTaWUgd2lya2xpY2ggZGVuIENhY2hlIGbDvHIgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiBkZWFrdGl2aWVyZW4gbcO2Y2h0ZW4uIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTgKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIkNhY2hlIGbDvHIgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiBkZWFrdGl2aWVydCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjA2Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGVuYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpc3QgYXVmICdmYWxzZScgZ2VzZXR6dC4gRW50ZmVybmVuIG9kZXIgw6RuZGVybiBTaWUgIgorImRpZXMsXG4iCisid2VubiBzaWUgd2lya2xpY2ggZGVuIENhY2hlIGbDvHIgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiBha3RpdmllcmVuIG3DtmNodGVuLiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICJDYWNoZSBmw7xyIHVudmVyc2lvbmllcnRlIERhdGVpZW4gZsO8ciAnJXMnIGFrdGl2aWVydCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjE4Cittc2dpZCAiY29yZS5mc21vbml0b3IgaXMgdW5zZXQ7IHNldCBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZW5hYmxlIGZzbW9uaXRvciIKK21zZ3N0ciAiIgorImNvcmUuZnNtb25pdG9yIG5pY2h0IGdlc2V0enQuIFNldHplbiBTaWUgZXMsIHdlbm4gU2llIGRlbiBEYXRlaXN5c3RlbS0iCisiTW9uaXRvclxuIgorIndpcmtsaWNoIGFrdGl2aWVyZW4gbcO2Y2h0ZW4uIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjIKK21zZ2lkICJmc21vbml0b3IgZW5hYmxlZCIKK21zZ3N0ciAiRGF0ZWlzeXN0ZW0tTW9uaXRvciBha3RpdmllcnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyNQorbXNnaWQgIiIKKyJjb3JlLmZzbW9uaXRvciBpcyBzZXQ7IHJlbW92ZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKyJjb3JlLmZzbW9uaXRvciBpc3QgZ2VzZXR6dC4gTMO2c2NoZW4gU2llIGVzLCB3ZW5uIFNpZSBkZW4gRGF0ZWlzeXN0ZW0tIgorIk1vbml0b3JcbiIKKyJ3aXJrbGljaCBkZWFrdGl2aWVyZW4gbcO2Y2h0ZW4uIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjkKK21zZ2lkICJmc21vbml0b3IgZGlzYWJsZWQiCittc2dzdHIgIkRhdGVpc3lzdGVtLU1vbml0b3IgZGVha3RpdmllcnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEwCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPE9wdGlvbmVuPl0gLWQgPFJlZmVyZW56bmFtZT4gWzxhbHRlci1XZXJ0Pl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gICAgPHJlZm5hbWU+IDxuZXctdmFsPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiIgorImdpdCB1cGRhdGUtcmVmIFs8T3B0aW9uZW4+XSAgICA8UmVmZXJlbnpuYW1lPiA8bmV1ZXItV2VydD4gWzxhbHRlci1XZXJ0Pl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEyCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPE9wdGlvbmVuPl0gLS1zdGRpbiBbLXpdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjQKK21zZ2lkICJkZWxldGUgdGhlIHJlZmVyZW5jZSIKK21zZ3N0ciAiZGllc2UgUmVmZXJlbnogbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInVwZGF0ZSA8cmVmbmFtZT4gbm90IHRoZSBvbmUgaXQgcG9pbnRzIHRvIgorbXNnc3RyICI8UmVmZXJlbnpuYW1lPiBha3R1YWxpc2llcmVuLCBuaWNodCBkZW4gVmVyd2VpcyIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIKK21zZ3N0ciAiU3RhbmRhcmQtRWluZ2FiZSBoYXQgZHVyY2ggTlVMLVplaWNoZW4gYWJnZXNjaGxvc3NlbmUgQXJndW1lbnRlIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjgKK21zZ2lkICJyZWFkIHVwZGF0ZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAiQWt0dWFsaXNpZXJ1bmdlbiB2b24gZGVyIFN0YW5kYXJkLUVpbmdhYmUgbGVzZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6NworbXNnaWQgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorbXNnc3RyICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNQorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgImRpZSBJbmZvcm1hdGlvbnNkYXRlaWVuIHZvbiBHcnVuZCBhdWYgYWt0dWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjExCittc2dpZCAiZ2l0IHVwbG9hZC1wYWNrIFs8b3B0aW9ucz5dIDxkaXI+IgorbXNnc3RyICJnaXQgdXBsb2FkLXBhY2sgWzxPcHRpb25lbj5dIDxWZXJ6ZWljaG5pcz4iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyMyB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTcKK21zZ2lkICJxdWl0IGFmdGVyIGEgc2luZ2xlIHJlcXVlc3QvcmVzcG9uc2UgZXhjaGFuZ2UiCittc2dzdHIgIm5hY2ggZWluZW0gZWluemlnZW4gUmVxdWVzdC9SZXNwb25zZS1BdXN0YXVzY2ggYmVlbmRlbiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI1Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBpbml0aWFsIHJlZiBhZHZlcnRpc2VtZW50IgorbXNnc3RyICJkaXJla3QgbmFjaCBkZXIgaW5pdGlhbGVuIEFuZ2FiZSBkZXIgQ29tbWl0cyBiZWVuZGVuIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjcKK21zZ2lkICJkbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJrZWluIFZlcnN1Y2ggaW4gPFZlcnplaWNobmlzPi8uZ2l0LyB3ZW5uIDxWZXJ6ZWljaG5pcz4ga2VpbiBHaXQtVmVyemVpY2huaXMgIgorImlzdCIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI5Cittc2dpZCAiaW50ZXJydXB0IHRyYW5zZmVyIGFmdGVyIDxuPiBzZWNvbmRzIG9mIGluYWN0aXZpdHkiCittc2dzdHIgIsOcYmVydHJhZ3VuZyBuYWNoIDxuPiBTZWt1bmRlbiBJbmFrdGl2aXTDpHQgdW50ZXJicmVjaGVuIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxOQorbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPENvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY4Cittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICJDb21taXQtSW5oYWx0ZSBhdXNnZWJlbiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjkgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzcKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgInVuYmVhcmJlaXRldGUgQXVzZ2FiZSBkZXMgU3RhdHVzIHZvbiBncGcgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NQorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8UGFrZXQ+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjUKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICJlcndlaXRlcnRlIEF1c2dhYmVuIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjcKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAibnVyIFN0YXRpc3Rpa2VuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxOAorbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PEZvcm1hdD5dIDxUYWc+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozNgorbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAiVGFnLUluaGFsdGUgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNworbXNnaWQgImdpdCB3b3JrdHJlZSBhZGQgWzxvcHRpb25zPl0gPHBhdGg+IFs8Y29tbWl0LWlzaD5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgYWRkIFs8T3B0aW9uZW4+XSA8UGZhZD4gWzxDb21taXQtQW5nYWJlPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOAorbXNnaWQgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgbGlzdCBbPE9wdGlvbmVuPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOQorbXNnaWQgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B0aW9ucz5dIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxPcHRpb25lbj5dIDxQZmFkPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIwCittc2dpZCAiZ2l0IHdvcmt0cmVlIG1vdmUgPHdvcmt0cmVlPiA8bmV3LXBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbW92ZSA8QXJiZWl0c3ZlcnplaWNobmlzPiA8bmV1ZXItUGZhZD4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMQorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8T3B0aW9uZW4+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIyCittc2dpZCAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPG9wdGlvbnM+XSA8d29ya3RyZWU+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgcmVtb3ZlIFs8T3B0aW9uZW4+XSA8QXJiZWl0c3ZlcnplaWNobmlzPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzCittc2dpZCAiZ2l0IHdvcmt0cmVlIHVubG9jayA8cGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSB1bmxvY2sgPFBmYWQ+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjAgYnVpbHRpbi93b3JrdHJlZS5jOjg5MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEzDtnNjaGVuIHZvbiAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBub3QgYSB2YWxpZCBkaXJlY3RvcnkiCittc2dzdHIgIkzDtnNjaGUgd29ya3RyZWVzLyVzOiBrZWluIGfDvGx0aWdlcyBWZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkzDtnNjaGUgd29ya3RyZWVzLyVzOiBnaXRkaXItRGF0ZWkgZXhpc3RpZXJ0IG5pY2h0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTAgYnVpbHRpbi93b3JrdHJlZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIKK21zZ3N0ciAiTMO2c2NoZSB3b3JrdHJlZXMvJXM6IGtvbm50ZSBnaXRkaXItRGF0ZWkgKCVzKSBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBzaG9ydCByZWFkIChleHBlY3RlZCAlPFBSSXVNQVg+IGJ5dGVzLCByZWFkICIKKyIlPFBSSXVNQVg+KSIKK21zZ3N0ciAiIgorIkzDtnNjaGUgd29ya3RyZWVzLyVzOiByZWFkKCkgenUga3VyeiAoJTxQUkl1TUFYPiBCeXRlcyBlcndhcnRldCwgJTxQUkl1TUFYPiAiCisiZ2VsZXNlbikiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICJMw7ZzY2hlIHdvcmt0cmVlcy8lczogdW5nw7xsdGlnZSBnaXRkaXItRGF0ZWkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICJMw7ZzY2hlIHdvcmt0cmVlcy8lczogZ2l0ZGlyLURhdGVpIHZlcndlaXN0IGF1ZiBuaWNodCBleGlzdGllcmVuZGVuIE9ydCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiZW50ZmVybnRlIEFyYmVpdHN2ZXJ6ZWljaG5pc3NlIGF1c2dlYmVuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY3Cittc2dpZCAiZXhwaXJlIHdvcmtpbmcgdHJlZXMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIkFyYmVpdHN2ZXJ6ZWljaG5pc3NlIMOkbHRlciBhbHMgPFplaXQ+IHZlcmZhbGxlbiBsYXNzZW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJyVzJyBleGlzdGllcnQgYmVyZWl0cyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmUtYWRkIHdvcmt0cmVlICclcyciCittc2dzdHIgIktvbm50ZSBBcmJlaXRzdmVyemVpY2huaXMgJyVzJyBuaWNodCBuZXUgaGluenVmw7xnZW4uIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgbG9ja2VkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mIC1mJyB0byBvdmVycmlkZSwgb3IgJ3VubG9jaycgYW5kICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKyInJXMnIGlzdCBlaW4gZmVobGVuZGVzLCBhYmVyIGdlc3BlcnJ0ZXMgQXJiZWl0c3ZlcnplaWNobmlzO1xuIgorIkJlbnV0emVuIFNpZSAnYWRkIC1mIC1mJyB6dW0gw5xiZXJzY2hyaWViZW4sIG9kZXIgJ3VubG9jaycgdW5kICdwcnVuZSdcbiIKKyJvZGVyICdyZW1vdmUnIHp1bSBMw7ZzY2hlbi4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBhbHJlYWR5IHJlZ2lzdGVyZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYnIHRvIG92ZXJyaWRlLCBvciAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisiJyVzJyBpc3QgZWluIGZlaGxlbmRlcywgYWJlciBiZXJlaXRzIHJlZ2lzdHJpZXJ0ZXMgQXJiZWl0c3ZlcnplaWNobmlzO1xuIgorIkJlbnV0emVuIFNpZSAnYWRkIC1mJyB6dW0gw5xiZXJzY2hyZWliZW4sIG9kZXIgJ3BydW5lJyBvZGVyICdyZW1vdmUnIHp1bVxuIgorIkzDtnNjaGVuLiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICJLb25udGUgVmVyemVpY2huaXMgJyVzJyBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDMyIGJ1aWx0aW4vd29ya3RyZWUuYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChuZXcgYnJhbmNoICclcycpIgorbXNnc3RyICJCZXJlaXRlIEFyYmVpdHN2ZXJ6ZWljaG5pcyB2b3IgKG5ldWVyIEJyYW5jaCAnJXMnKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKHJlc2V0dGluZyBicmFuY2ggJyVzJzsgd2FzIGF0ICVzKSIKK21zZ3N0ciAiQmVyZWl0ZSBBcmJlaXRzdmVyemVpY2huaXMgdm9yIChzZXR6ZSBCcmFuY2ggJyVzJyB1bTsgd2FyIGJlaSAlcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChjaGVja2luZyBvdXQgJyVzJykiCittc2dzdHIgIkJlcmVpdGUgQXJiZWl0c3ZlcnplaWNobmlzIHZvciAoY2hlY2tlICclcycgYXVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGRldGFjaGVkIEhFQUQgJXMpIgorbXNnc3RyICJCZXJlaXRlIEFyYmVpdHN2ZXJ6ZWljaG5pcyB2b3IgKGxvc2dlbMO2c3RlciBIRUFEICVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5MAorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGV2ZW4gaWYgYWxyZWFkeSBjaGVja2VkIG91dCBpbiBvdGhlciB3b3JrdHJlZSIKK21zZ3N0ciAiIgorIjxCcmFuY2g+IGF1c2NoZWNrZW4sIGF1Y2ggd2VubiBkaWVzZXIgYmVyZWl0cyBpbiBlaW5lbSBhbmRlcmVuICIKKyJBcmJlaXRzdmVyemVpY2huaXMgYXVzZ2VjaGVja3QgaXN0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDkzCittc2dpZCAiY3JlYXRlIGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAibmV1ZW4gQnJhbmNoIGVyc3RlbGxlbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5NQorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAiQnJhbmNoIGVyc3RlbGxlbiBvZGVyIHVtc2V0emVuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk3Cittc2dpZCAicG9wdWxhdGUgdGhlIG5ldyB3b3JraW5nIHRyZWUiCittc2dzdHIgImRhcyBuZXVlIEFyYmVpdHN2ZXJ6ZWljaG5pcyBhdXNjaGVja2VuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk4Cittc2dpZCAia2VlcCB0aGUgbmV3IHdvcmtpbmcgdHJlZSBsb2NrZWQiCittc2dzdHIgImRhcyBuZXVlIEFyYmVpdHN2ZXJ6ZWljaG5pcyBnZXNwZXJydCBsYXNzZW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDEKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1icmFuY2goMSkpIgorbXNnc3RyICJNb2R1cyB6dW0gRm9sZ2VuIHZvbiBCcmFuY2hlcyBlaW5zdGVsbGVuIChzaWVoZSBnaXQtYnJhbmNoKDEpKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNAorbXNnaWQgInRyeSB0byBtYXRjaCB0aGUgbmV3IGJyYW5jaCBuYW1lIHdpdGggYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisidmVyc3VjaGVuLCBlaW5lIMOcYmVyZWluc3RpbW11bmcgZGVzIEJyYW5jaC1OYW1lbnMgbWl0IGVpbmVtXG4iCisiUmVtb3RlLVRyYWNraW5nLUJyYW5jaCBoZXJ6dXN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MTIKK21zZ2lkICItYiwgLUIsIGFuZCAtLWRldGFjaCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYiwgLUIgdW5kIC0tZGV0YWNoIHNjaGxpZcOfZW4gc2ljaCBnZWdlbnNlaXRpZyBhdXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1NzMKK21zZ2lkICItLVtuby1ddHJhY2sgY2FuIG9ubHkgYmUgdXNlZCBpZiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCIKK21zZ3N0ciAiIgorIi0tW25vXS10cmFjayBrYW5uIG51ciB2ZXJ3ZW5kZXQgd2VyZGVuLCB3ZW5uIGVpbiBuZXVlciBCcmFuY2ggZXJzdGVsbHQgd2lyZC4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NzMKK21zZ2lkICJyZWFzb24gZm9yIGxvY2tpbmciCittc2dzdHIgIlNwZXJyZ3J1bmQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2ODUgYnVpbHRpbi93b3JrdHJlZS5jOjcxOCBidWlsdGluL3dvcmt0cmVlLmM6NzkyCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIGlzdCBrZWluIEFyYmVpdHN2ZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4NyBidWlsdGluL3dvcmt0cmVlLmM6NzIwCittc2dpZCAiVGhlIG1haW4gd29ya2luZyB0cmVlIGNhbm5vdCBiZSBsb2NrZWQgb3IgdW5sb2NrZWQiCittc2dzdHIgIkRhcyBIYXVwdGFyYmVpdHN2ZXJ6ZWljaG5pcyBrYW5uIG5pY2h0IGdlc3BlcnJ0IG9kZXIgZW50c3BlcnJ0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCwgcmVhc29uOiAlcyIKK21zZ3N0ciAiJyVzJyBpc3QgYmVyZWl0cyBnZXNwZXJydCwgR3J1bmQ6ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiCittc2dzdHIgIiclcycgaXN0IGJlcmVpdHMgZ2VzcGVycnQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgbG9ja2VkIgorbXNnc3RyICInJXMnIGlzdCBuaWNodCBnZXNwZXJydCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc2MworbXNnaWQgIndvcmtpbmcgdHJlZXMgY29udGFpbmluZyBzdWJtb2R1bGVzIGNhbm5vdCBiZSBtb3ZlZCBvciByZW1vdmVkIgorbXNnc3RyICIiCisiQXJiZWl0c3ZlcnplaWNobmlzc2UsIGRpZSBTdWJtb2R1bGUgZW50aGFsdGVuLCBrw7ZubmVuIG5pY2h0IHZlcnNjaG9iZW4gb2RlclxuIgorImVudGZlcm50IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzEKK21zZ2lkICJmb3JjZSBtb3ZlIGV2ZW4gaWYgd29ya3RyZWUgaXMgZGlydHkgb3IgbG9ja2VkIgorbXNnc3RyICIiCisiVmVyc2NoaWViZW4gZXJ6d2luZ2VuLCBhdWNoIHdlbm4gZGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcyBnZcOkbmRlcnQgb2RlciAiCisiZ2VzcGVycnQgaXN0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzk0IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIGlzdCBlaW4gSGF1cHRhcmJlaXRzdmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpZ3VyZSBvdXQgZGVzdGluYXRpb24gbmFtZSBmcm9tICclcyciCittc2dzdHIgIktvbm50ZSBaaWVsbmFtZSBhdXMgJyVzJyBuaWNodCBiZXN0aW1tZW4uIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInRhcmdldCAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJaaWVsICclcycgZXhpc3RpZXJ0IGJlcmVpdHMuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisiS2FubiBrZWluIGdlc3BlcnJ0ZXMgQXJiZWl0c3ZlcnplaWNobmlzIHZlcnNjaGllYmVuLCBTcGVycmdydW5kOiAlc1xuIgorIkJlbnV0emVuIFNpZSAnbW92ZSAtZiAtZicgenVtIMOcYmVyc2NocmVpYmVuIG9kZXIgZW50c3BlcnJlbiBTaWUgenVlcnN0XG4iCisiZGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcy4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTUKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisiS2FubiBrZWluIGdlc3BlcnJ0ZXMgQXJiZWl0c3ZlcnplaWNobmlzIHZlcnNjaGllYmVuLlxuIgorIkJlbnV0emVuIFNpZSAnbW92ZSAtZiAtZicgenVtIMOcYmVyc2NocmVpYmVuIG9kZXIgZW50c3BlcnJlbiBTaWUgenVlcnN0XG4iCisiZGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcy4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCBtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgIlZhbGlkaWVydW5nIGZlaGxnZXNjaGxhZ2VuLCBrYW5uIEFyYmVpdHN6ZWljaG5pcyBuaWNodCB2ZXJzY2hpZWJlbjogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG1vdmUgJyVzJyB0byAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJzY2hpZWJlbiB2b24gJyVzJyBuYWNoICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiB2b24gJ2dpdCBzdGF0dXMnIGF1ZiAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY29udGFpbnMgbW9kaWZpZWQgb3IgdW50cmFja2VkIGZpbGVzLCB1c2UgLS1mb3JjZSB0byBkZWxldGUgaXQiCittc2dzdHIgIiIKKyInJXMnIGVudGjDpGx0IGdlw6RuZGVydGUgb2RlciBuaWNodCB2ZXJzaW9uaWVydGUgRGF0ZWllbiwgYmVudXR6ZW4gU2llIC0tZm9yY2UgIgorInp1bSBMw7ZzY2hlbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIHZvbiAnZ2l0IHN0YXR1cycgYXVmICclcycuIENvZGU6ICVkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTAzCittc2dpZCAiZm9yY2UgcmVtb3ZhbCBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiIgorIkzDtnNjaGVuIGVyendpbmdlbiwgYXVjaCB3ZW5uIGRhcyBBcmJlaXRzdmVyemVpY2huaXMgZ2XDpG5kZXJ0IG9kZXIgZ2VzcGVycnQgIgorImlzdCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJLYW5uIGtlaW4gZ2VzcGVycnRlcyBBcmJlaXRzdmVyemVpY2huaXMgbMO2c2NoZW4sIFNwZXJyZ3J1bmQ6ICVzXG4iCisiQmVudXR6ZW4gU2llICdyZW1vdmUgLWYgLWYnIHp1bSDDnGJlcnNjaHJlaWJlbiBvZGVyIGVudHNwZXJyZW4gU2llIHp1ZXJzdFxuIgorImRhcyBBcmJlaXRzdmVyemVpY2huaXMuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI4Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJLYW5uIGtlaW4gZ2VzcGVycnRlcyBBcmJlaXRzdmVyemVpY2huaXMgbMO2c2NoZW4uXG4iCisiQmVudXR6ZW4gU2llICdyZW1vdmUgLWYgLWYnIHp1bSDDnGJlcnNjaHJlaWJlbiBvZGVyIGVudHNwZXJyZW4gU2llIHp1ZXJzdFxuIgorImRhcyBBcmJlaXRzdmVyemVpY2huaXMuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgcmVtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgIlZhbGlkaWVydW5nIGZlaGxnZXNjaGxhZ2VuLCBrYW5uIEFyYmVpdHN2ZXJ6ZWljaG5pcyBuaWNodCBsw7ZzY2hlbjogJXMiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjE1Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08UHLDpGZpeD4vXSIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjgKK21zZ2lkICI8cHJlZml4Pi8iCittc2dzdHIgIjxQcsOkZml4Pi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI5Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICJkYXMgVHJlZS1PYmpla3QgZsO8ciBlaW4gVW50ZXJ2ZXJ6ZWljaG5pcyA8UHLDpGZpeD4gc2NocmVpYmVuIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMQorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgIm51ciBuw7x0emxpY2ggZsO8ciBGZWhsZXJzdWNoZSIKKworIzogZmFzdC1pbXBvcnQuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICdtYXJrJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgIidtYXJrJyBCZWZlaGwgZXJ3YXJ0ZXQsICclcycgYmVrb21tZW4iCisKKyM6IGZhc3QtaW1wb3J0LmM6MzEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCAndG8nIGNvbW1hbmQsIGdvdCAlcyIKK21zZ3N0ciAiJ3RvJyBCZWZlaGwgZXJ3YXJ0ZXQsICclcycgYmVrb21tZW4iCisKKyM6IGZhc3QtaW1wb3J0LmM6MzI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJmZWF0dXJlICclcycgZm9yYmlkZGVuIGluIGlucHV0IHdpdGhvdXQgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMiCittc2dzdHIgIkZlYXR1cmUgJyVzJyB2ZXJib3RlbiBpbiBFaW5nYWJlIG9obmUgT3B0aW9uIC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwZXJtaXNzaW9ucyBvbiB5b3VyIHNvY2tldCBkaXJlY3RvcnkgYXJlIHRvbyBsb29zZTsgb3RoZXJcbiIKKyJ1c2VycyBtYXkgYmUgYWJsZSB0byByZWFkIHlvdXIgY2FjaGVkIGNyZWRlbnRpYWxzLiBDb25zaWRlciBydW5uaW5nOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKK21zZ3N0ciAiIgorIkRpZSBCZXJlY2h0aWd1bmdlbiBhdWYgSWhyIFNvY2tldC1WZXJ6ZWljaG5pcyBzaW5kIHp1IHNjaHdhY2g7IGFuZGVyZVxuIgorIk51dHplciBrw7ZubnRlbiBJaHJlIHp3aXNjaGVuZ2VzcGVpY2hlcnRlbiBBbm1lbGRlaW5mb3JtYXRpb25lbiBsZXNlbi5cbiIKKyJaaWVoZW4gU2llIGluIEJldHJhY2h0XG4iCisiXG4iCisiXHRjaG1vZCAwNzAwICVzXG4iCisiXG4iCisiYXVzenVmw7xocmVuLiIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjcyCittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAiTWVsZHVuZ2VuIHp1ciBGZWhsZXJzdWNoZSBpbiBTdGFuZGFyZC1GZWhsZXJhdXNnYWJlIGF1c2dlYmVuIgorCisjOiB0L2hlbHBlci90ZXN0LXJlYWNoLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBpcyBub3QgbWFya2VkIHJlYWNoYWJsZSIKK21zZ3N0ciAiQ29tbWl0ICVzIGlzdCBuaWNodCBhbHMgZXJyZWljaGJhciBnZWtlbm56ZWljaG5ldC4iCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNjIKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgIlp1IHZpZWxlIENvbW1pdHMgYWxzIGVycmVpY2hiYXIgZ2VrZW5uemVpY2huZXQuIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6NworbXNnaWQgInRlc3QtdG9vbCBzZXJ2ZS12MiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAidGVzdC10b29sIHNlcnZlLXYyIFs8T3B0aW9uZW4+XSIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE5Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBhZHZlcnRpc2luZyBjYXBhYmlsaXRpZXMiCittc2dzdHIgImRpcmVrdCBuYWNoIEFuemVpZ2UgZGVyIGFuZ2Vib3RlbmVuIEbDpGhpZ2tlaXRlbiBiZWVuZGVuIgorCisjOiBnaXQuYzoyNworbXNnaWQgIiIKKyJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxwYXRoPl0gWy1jIDxuYW1lPj08dmFsdWU+XVxuIgorIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08cGF0aD5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLXBhdGhdXG4iCisiICAgICAgICAgICBbLXAgfCAtLXBhZ2luYXRlIHwgLVAgfCAtLW5vLXBhZ2VyXSBbLS1uby1yZXBsYWNlLW9iamVjdHNdIFstLSIKKyJiYXJlXVxuIgorIiAgICAgICAgICAgWy0tZ2l0LWRpcj08cGF0aD5dIFstLXdvcmstdHJlZT08cGF0aD5dIFstLW5hbWVzcGFjZT08bmFtZT5dXG4iCisiICAgICAgICAgICA8Y29tbWFuZD4gWzxhcmdzPl0iCittc2dzdHIgIiIKKyJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxQZmFkPl0gWy1jIDxOYW1lPj08V2VydD5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTxQZmFkPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tcGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tIgorImJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPTxQZmFkPl0gWy0td29yay10cmVlPTxQZmFkPl0gWy0tbmFtZXNwYWNlPTxOYW1lPl1cbiIKKyIgICAgICAgICAgIDxCZWZlaGw+IFs8QXJndW1lbnRlPl0iCisKKyM6IGdpdC5jOjM0Cittc2dpZCAiIgorIidnaXQgaGVscCAtYScgYW5kICdnaXQgaGVscCAtZycgbGlzdCBhdmFpbGFibGUgc3ViY29tbWFuZHMgYW5kIHNvbWVcbiIKKyJjb25jZXB0IGd1aWRlcy4gU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIG9yICdnaXQgaGVscCA8Y29uY2VwdD4nXG4iCisidG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQgb3IgY29uY2VwdC5cbiIKKyJTZWUgJ2dpdCBoZWxwIGdpdCcgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiJ2dpdCBoZWxwIC1hJyB1bmQgJ2dpdCBoZWxwIC1nJyBsaXN0ZXQgdmVyZsO8Z2JhcmUgVW50ZXJiZWZlaGxlIHVuZFxuIgorImVpbmlnZSBBbmxlaXR1bmdlbiB6dSBHaXQtS29uemVwdGVuIGF1Zi4gQmVudXR6ZW4gU2llICdnaXQgaGVscCA8QmVmZWhsPidcbiIKKyJvZGVyICdnaXQgaGVscCA8S29uemVwdD4nLCB1bSBtZWhyIMO8YmVyIGVpbmVuIHNwZXppZmlzY2hlbiBCZWZlaGwgb2RlclxuIgorIktvbnplcHQgenUgZXJmYWhyZW4uXG4iCisiQmVudXR6ZW4gU2llICdnaXQgaGVscCBnaXQnIGbDvHIgZWluZW4gw5xiZXJibGljayBkZXMgU3lzdGVtcy4iCisKKyM6IGdpdC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tZ2l0LWRpclxuIgorbXNnc3RyICJLZWluIFZlcnplaWNobmlzIGbDvHIgLS1naXQtZGlyIGFuZ2VnZWJlbi5cbiIKKworIzogZ2l0LmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5hbWVzcGFjZSBnaXZlbiBmb3IgLS1uYW1lc3BhY2VcbiIKK21zZ3N0ciAiS2VpbiBOYW1lc3BhY2UgZsO8ciAtLW5hbWVzcGFjZSBhbmdlZ2ViZW4uXG4iCisKKyM6IGdpdC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgIktlaW4gVmVyemVpY2huaXMgZsO8ciAtLXdvcmstdHJlZSBhbmdlZ2ViZW4uXG4iCisKKyM6IGdpdC5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcmVmaXggZ2l2ZW4gZm9yIC0tc3VwZXItcHJlZml4XG4iCittc2dzdHIgIktlaW4gUHLDpGZpeCBmw7xyIC0tc3VwZXItcHJlZml4IGFuZ2VnZWJlbi5cbiIKKworIzogZ2l0LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi1jIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIHN0cmluZ1xuIgorbXNnc3RyICItYyBlcndhcnRldCBlaW5lbiBLb25maWd1cmF0aW9uc3N0cmluZy5cbiIKKworIzogZ2l0LmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLUNcbiIKK21zZ3N0ciAiS2VpbiBWZXJ6ZWljaG5pcyBmw7xyIC1DIGFuZ2VnZWJlbi5cbiIKKworIzogZ2l0LmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAlc1xuIgorbXNnc3RyICJVbmJla2FubnRlIE9wdGlvbjogJXNcbiIKKworIzogZ2l0LmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIgorbXNnc3RyICJiZWltIEVyd2VpdGVybiB2b24gQWxpYXMgJyVzJzogJyVzJyIKKworIzogZ2l0LmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbGlhcyAnJXMnIGNoYW5nZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuIgorIllvdSBjYW4gdXNlICchZ2l0JyBpbiB0aGUgYWxpYXMgdG8gZG8gdGhpcyIKK21zZ3N0ciAiIgorIkFsaWFzICclcycgw6RuZGVydCBVbWdlYnVuZ3N2YXJpYWJsZW4uXG4iCisiU2llIGvDtm5uZW4gJyFnaXQnIGltIEFsaWFzIGJlbnV0emVuLCB1bSBkaWVzIHp1IHR1bi4iCisKKyM6IGdpdC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBhbGlhcyBmb3IgJXMiCittc2dzdHIgImxlZXJlciBBbGlhcyBmw7xyICVzIgorCisjOiBnaXQuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGFsaWFzOiAlcyIKK21zZ3N0ciAicmVrdXJzaXZlciBBbGlhczogJXMiCisKKyM6IGdpdC5jOjQ1OQorbXNnaWQgIndyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gaW4gZGllIFN0YW5kYXJkLUF1c2dhYmUuIgorCisjOiBnaXQuYzo0NjEKK21zZ2lkICJ1bmtub3duIHdyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJVbmJla2FubnRlciBGZWhsZXIgYmVpbSBTY2hyZWliZW4gaW4gZGllIFN0YW5kYXJkLUF1c2dhYmUuIgorCisjOiBnaXQuYzo0NjMKK21zZ2lkICJjbG9zZSBmYWlsZWQgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hsaWXDn2VuIGRlciBTdGFuZGFyZC1BdXNnYWJlLiIKKworIzogZ2l0LmM6NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIGxvb3AgZGV0ZWN0ZWQ6IGV4cGFuc2lvbiBvZiAnJXMnIGRvZXMgbm90IHRlcm1pbmF0ZTolcyIKK21zZ3N0ciAiQWxpYXMtU2NobGVpZmUgZXJrYW5udDogRXJ3ZWl0ZXJ1bmcgdm9uICclcycgc2NobGllw590IG5pY2h0IGFiOiVzIgorCisjOiBnaXQuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSAlcyBhcyBhIGJ1aWx0aW4iCittc2dzdHIgIkthbm4gJXMgbmljaHQgYWxzIGVpbmdlYmF1dGVuIEJlZmVobCBiZWhhbmRlbG4uIgorCisjOiBnaXQuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVzYWdlOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiVmVyd2VuZHVuZzogJXNcbiIKKyJcbiIKKworIzogZ2l0LmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGFuc2lvbiBvZiBhbGlhcyAnJXMnIGZhaWxlZDsgJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZFxuIgorbXNnc3RyICJFcndlaXRlcnVuZyB2b24gQWxpYXMgJyVzJyBmZWhsZ2VzY2hsYWdlbjsgJyVzJyBpc3Qga2VpbiBHaXQtQmVmZWhsLlxuIgorCisjOiBnaXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iCittc2dzdHIgIkZlaGxlciBiZWltIEF1c2bDvGhyZW4gdm9uIEJlZmVobCAnJXMnOiAlc1xuIgorCisjOiBodHRwLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5lZ2F0aXZlIHZhbHVlIGZvciBodHRwLnBvc3RidWZmZXI7IGRlZmF1bHRpbmcgdG8gJWQiCittc2dzdHIgIm5lZ2F0aXZlciBXZXJ0IGbDvHIgaHR0cC5wb3N0YnVmZmVyOyBiZW51dHplIFN0YW5kYXJkd2VydCAlZCIKKworIzogaHR0cC5jOjM5OQorbXNnaWQgIkRlbGVnYXRpb24gY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMjIuMCIKK21zZ3N0ciAiS29udHJvbGxlIMO8YmVyIERlbGVnYXRpb24gd2lyZCBtaXQgY1VSTCA8IDcuMjIuMCBuaWNodCB1bnRlcnN0w7x0enQiCisKKyM6IGh0dHAuYzo0MDgKK21zZ2lkICJQdWJsaWMga2V5IHBpbm5pbmcgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIiIKKyJEYXMgQW5oZWZ0ZW4gZGVzIMO2ZmZlbnRsaWNoZW4gU2NobMO8c3NlbHMgd2lyZCBtaXQgY1VSTCA8IDcuNDQuMFxuIgorIm5pY2h0IHVudGVyc3TDvHR6dC4iCisKKyM6IGh0dHAuYzo4NzYKK21zZ2lkICJDVVJMU1NMT1BUX05PX1JFVk9LRSBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiQ1VSTFNTTE9QVF9OT19SRVZPS0Ugd2lyZCBtaXQgY1VSTCA8IDcuNDQuMCBuaWNodCB1bnRlcnN0w7x0enQuIgorCisjOiBodHRwLmM6OTQ5Cittc2dpZCAiUHJvdG9jb2wgcmVzdHJpY3Rpb25zIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4xOS40IgorbXNnc3RyICJQcm90b2tvbGxiZXNjaHLDpG5rdW5nZW4gd2VyZGVuIG1pdCBjVVJMIDwgNy4xOS40IG5pY2h0IHVudGVyc3TDvHR6dC4iCisKKyM6IGh0dHAuYzoxMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuc3VwcG9ydGVkIFNTTCBiYWNrZW5kICclcycuIFN1cHBvcnRlZCBTU0wgYmFja2VuZHM6IgorbXNnc3RyICJOaWNodCB1bnRlcnN0w7x0enRlcyBTU0wtQmFja2VuZCAnJXMnLiBVbnRlcnN0w7x0enRlIFNTTC1CYWNrZW5kczoiCisKKyM6IGh0dHAuYzoxMDkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogY1VSTCB3YXMgYnVpbHQgd2l0aG91dCBTU0wgYmFja2VuZHMiCittc2dzdHIgIiIKKyJLb25udGUgU1NMLUJhY2tlbmQgbmljaHQgenUgJyVzJyBzZXR6ZW46IGNVUkwgd3VyZGUgb2huZSBTU0wtQmFja2VuZHMgZ2ViYXV0LiIKKworIzogaHR0cC5jOjEwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBhbHJlYWR5IHNldCIKK21zZ3N0ciAiS29ubnRlIFNTTC1CYWNrZW5kIG5pY2h0IHp1ICclcycgc2V0emVuOiBiZXJlaXRzIGdlc2V0enQiCisKKyM6IGh0dHAuYzoxOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gdXBkYXRlIHVybCBiYXNlIGZyb20gcmVkaXJlY3Rpb246XG4iCisiICBhc2tlZCBmb3I6ICVzXG4iCisiICAgcmVkaXJlY3Q6ICVzIgorbXNnc3RyICIiCisiS29ubnRlIEJhc2lzLVVSTCBuaWNodCBkdXJjaCBVbWxlaXR1bmcgYWt0dWFsaXNpZXJlbjpcbiIKKyIgIGdlZnJhZ3QgbmFjaDogJXNcbiIKKyIgICAgdW1nZWxlaXRldDogJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcXVvdGluZyBpbiBwdXNoLW9wdGlvbiB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgUXVvdGluZyBiZWltIFwicHVzaC1vcHRpb25cIi1XZXJ0OiAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlc2luZm8vcmVmcyBub3QgdmFsaWQ6IGlzIHRoaXMgYSBnaXQgcmVwb3NpdG9yeT8iCittc2dzdHIgIiVzaW5mby9yZWZzIG5pY2h0IGfDvGx0aWc6IElzdCBkYXMgZWluIEdpdC1SZXBvc2l0b3J5PyIKKworIzogcmVtb3RlLWN1cmwuYzozNjQKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZXhwZWN0ZWQgc2VydmljZSwgZ290IGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiVW5nw7xsdGlnZSBBbnR3b3J0IGRlcyBTZXJ2ZXJzLiBTZXJ2aWNlIGVyd2FydGV0LCBGbHVzaC1QYWtldCBiZWtvbW1lbiIKKworIzogcmVtb3RlLWN1cmwuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGdvdCAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlIFNlcnZlcmFudHdvcnQ7ICclcycgYmVrb21tZW4iCisKKyM6IHJlbW90ZS1jdXJsLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBub3QgZm91bmQiCittc2dzdHIgIlJlcG9zaXRvcnkgJyVzJyBuaWNodCBnZWZ1bmRlbi4iCisKKyM6IHJlbW90ZS1jdXJsLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiQXV0aGVudGlmaXppZXJ1bmcgZmVobGdlc2NobGFnZW4gZsO8ciAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIgorbXNnc3RyICJrb25udGUgbmljaHQgYXVmICclcycgenVncmVpZmVuOiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgdG8gJXMiCittc2dzdHIgIkxlaXRlIG5hY2ggJXMgdW0iCisKKyM6IHJlbW90ZS1jdXJsLmM6NTkzCittc2dpZCAic2hvdWxkbid0IGhhdmUgRU9GIHdoZW4gbm90IGdlbnRsZSBvbiBFT0YiCittc2dzdHIgInNvbGx0ZSBrZWluIEVPRiBoYWJlbiwgd2VubiBuaWNodCBiZWh1dHNhbSBtaXQgRU9GIgorCisjOiByZW1vdGUtY3VybC5jOjY3MworbXNnaWQgInVuYWJsZSB0byByZXdpbmQgcnBjIHBvc3QgZGF0YSAtIHRyeSBpbmNyZWFzaW5nIGh0dHAucG9zdEJ1ZmZlciIKK21zZ3N0ciAiIgorIktvbm50ZSBuaWNodCBSUEMtUE9TVC1EYXRlbiB6dXLDvGNrc3B1bGVuIC0gVmVyc3VjaGVuIFNpZSBodHRwLnBvc3RCdWZmZXIgenUgIgorImVyaMO2aGVuIgorCisjOiByZW1vdGUtY3VybC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJSUEMgZmFpbGVkOyAlcyIKK21zZ3N0ciAiUlBDIGZlaGxnZXNjaGxhZ2VuOyAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo3NzMKK21zZ2lkICJjYW5ub3QgaGFuZGxlIHB1c2hlcyB0aGlzIGJpZyIKK21zZ3N0ciAiS2FubiBzb2xjaGUgZ3Jvw59lbiDDnGJlcnRyYWd1bmdlbiBuaWNodCB2ZXJhcmJlaXRlbi4iCisKKyM6IHJlbW90ZS1jdXJsLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZGVmbGF0ZSBlcnJvciAlZCIKK21zZ3N0ciAiS2FubiBSZXF1ZXN0IG5pY2h0IGtvbXByaW1pZXJlbjsgXCJ6bGliIGRlZmxhdGVcIi1GZWhsZXIgJWQiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZW5kIGVycm9yICVkIgorbXNnc3RyICJLYW5uIFJlcXVlc3QgbmljaHQga29tcHJpbWllcmVuOyBcInpsaWIgZW5kXCItRmVobGVyICVkIgorCisjOiByZW1vdGUtY3VybC5jOjEwMjMKK21zZ2lkICJkdW1iIGh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjYXBhYmlsaXRpZXMiCittc2dzdHIgIkR1bWIgSFRUUC1UcmFuc3BvcnQgdW50ZXJzdMO8dHp0IGtlaW5lIHNoYWxsb3ctRnVua3Rpb25lbiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDM4Cittc2dpZCAiZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiXCJmZXRjaFwiIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDg2Cittc2dpZCAiY2Fubm90IGZldGNoIGJ5IHNoYTEgb3ZlciBzbWFydCBodHRwIgorbXNnc3RyICJLYW5uIFNIQS0xIG5pY2h0IMO8YmVyIFNtYXJ0LUhUVFAgYW5mb3JkZXJuIgorCisjOiByZW1vdGUtY3VybC5jOjExMzAgcmVtb3RlLWN1cmwuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAiUHJvdG9rb2xsZmVobGVyOiBTSEEtMS9SZWZlcmVueiBlcndhcnRldCwgJyVzJyBiZWtvbW1lbiIKKworIzogcmVtb3RlLWN1cmwuYzoxMTQ4IHJlbW90ZS1jdXJsLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0ICVzIgorbXNnc3RyICJIVFRQLVRyYW5zcG9ydCB1bnRlcnN0w7x0enQgbmljaHQgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE4NAorbXNnaWQgImdpdC1odHRwLXB1c2ggZmFpbGVkIgorbXNnc3RyICJcImdpdC1odHRwLXB1c2hcIiBmZWhsZ2VzY2hsYWdlbiIKKworIzogcmVtb3RlLWN1cmwuYzoxMzY5Cittc2dpZCAicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPHJlbW90ZT4gWzx1cmw+XSIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IFZlcndlbmR1bmc6IGdpdCByZW1vdGUtY3VybCA8UmVtb3RlLVJlcG9zaXRvcnk+IFs8VVJMPl0iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwMQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybDogRmVobGVyIGJlaW0gTGVzZW4gZGVzIEtvbW1hbmRvLVN0cmVhbXMgdm9uIEdpdCIKKworIzogcmVtb3RlLWN1cmwuYzoxNDA4Cittc2dpZCAicmVtb3RlLWN1cmw6IGZldGNoIGF0dGVtcHRlZCB3aXRob3V0IGEgbG9jYWwgcmVwbyIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IFwiZmV0Y2hcIiBvaG5lIGxva2FsZXMgUmVwb3NpdG9yeSB2ZXJzdWNodCIKKworIzogcmVtb3RlLWN1cmwuYzoxNDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS1jdXJsOiB1bmtub3duIGNvbW1hbmQgJyVzJyBmcm9tIGdpdCIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IFVuYmVrYW5udGVyIEJlZmVobCAnJXMnIHZvbiBHaXQiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oOjg1Cittc2dpZCAiYXJncyIKK21zZ3N0ciAiQXJndW1lbnRlIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NgorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgIkZpbHRlcm4gbmFjaCBPYmpla3RlbiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE4MworbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICJWZXJmYWxsc2RhdHVtIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTk3Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICJLZWluIEVmZmVrdCAoUsO8Y2t3w6RydHNrb21wYXRpYmlsaXTDpHQpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzA5Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICJlcndlaXRlcnRlIEF1c2dhYmVuIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzExCittc2dpZCAiYmUgbW9yZSBxdWlldCIKK21zZ3N0ciAid2VuaWdlciBBdXNnYWJlbiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxNworbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICJiZW51dHplIDxuPiBaaWZmZXJuIHp1ciBBbnplaWdlIHZvbiBTSEEtMXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICIiCisid2llIExlZXJ6ZWljaGVuIHVuZCAjS29tbWVudGFyZSB2b24gZGVyIEJlc2NocmVpYnVuZyBnZXRyZW5udCB3ZXJkZW4gc29sbGVuIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM3Cittc2dpZCAicmVhZCBwYXRoc3BlYyBmcm9tIGZpbGUiCittc2dzdHIgIlBmYWRzcGV6aWZpa2F0aW9uIGF1cyBlaW5lciBEYXRlaSBsZXNlbiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzOAorbXNnaWQgIiIKKyJ3aXRoIC0tcGF0aHNwZWMtZnJvbS1maWxlLCBwYXRoc3BlYyBlbGVtZW50cyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorIk1pdCBkZXIgT3B0aW9uIC0tcGF0aHNwZWMtZnJvbS1maWxlIHNpbmQgUGZhZGUgZHVyY2ggTlVMLVplaWNoZW4gZ2V0cmVubnQiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJrZXkiCittc2dzdHIgIlNjaMO8c3NlbCIKKworIzogcmVmLWZpbHRlci5oOjEwMQorbXNnaWQgImZpZWxkIG5hbWUgdG8gc29ydCBvbiIKK21zZ3N0ciAic29ydGllcmUgbmFjaCBkaWVzZW0gRmVsZCIKKworIzogcmVyZXJlLmg6NDQKK21zZ2lkICJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiCittc2dzdHIgIiIKKyJJbmRleCwgd2VubiBtw7ZnbGljaCwgbWl0IHdpZWRlcnZlcndlbmRldGVyIEtvbmZsaWt0YXVmbMO2c3VuZyBha3R1YWxpc2llcmVuIgorCisjOiB3dC1zdGF0dXMuaDo2NworbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICJIRUFEIGxvc2dlbMO2c3QgYmVpICIKKworIzogd3Qtc3RhdHVzLmg6NjgKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICJIRUFEIGxvc2dlbMO2c3Qgdm9uICIKKworIzogY29tbWFuZC1saXN0Lmg6NTAKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkRhdGVpaW5oYWx0ZSB6dW0gQ29tbWl0IHZvcm1lcmtlbiIKKworIzogY29tbWFuZC1saXN0Lmg6NTEKK21zZ2lkICJBcHBseSBhIHNlcmllcyBvZiBwYXRjaGVzIGZyb20gYSBtYWlsYm94IgorbXNnc3RyICJlaW5lIFNlcmllIHZvbiBQYXRjaGVzIHZvbiBlaW5lciBNYWlsYm94IGFud2VuZGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MgorbXNnaWQgIkFubm90YXRlIGZpbGUgbGluZXMgd2l0aCBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIlplaWxlbiBkZXIgRGF0ZWkgbWl0IENvbW1pdC1JbmZvcm1hdGlvbmVuIHZlcnNlaGVuIHVuZCBhbnplaWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6NTMKK21zZ2lkICJBcHBseSBhIHBhdGNoIHRvIGZpbGVzIGFuZC9vciB0byB0aGUgaW5kZXgiCittc2dzdHIgImVpbmVuIFBhdGNoIGF1ZiBEYXRlaWVuIHVuZC9vZGVyIGRlbiBJbmRleCBhbndlbmRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6NTQKK21zZ2lkICJJbXBvcnQgYSBHTlUgQXJjaCByZXBvc2l0b3J5IGludG8gR2l0IgorbXNnc3RyICJlaW4gR05VIEFyY2ggUmVwb3NpdG9yeSBpbiBHaXQgaW1wb3J0aWVyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU1Cittc2dpZCAiQ3JlYXRlIGFuIGFyY2hpdmUgb2YgZmlsZXMgZnJvbSBhIG5hbWVkIHRyZWUiCittc2dzdHIgIkRhdGVpYXJjaGl2IHZvbiBhbmdlZ2ViZW5lbSBWZXJ6ZWljaG5pcyBlcnN0ZWxsZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU2Cittc2dpZCAiVXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAiIgorIkJpbsOkcnN1Y2hlIHZlcndlbmRlbiwgdW0gZGVuIENvbW1pdCB6dSBmaW5kZW4sIGRlciBlaW5lbiBGZWhsZXIgdmVydXJzYWNodCAiCisiaGF0IgorCisjOiBjb21tYW5kLWxpc3QuaDo1NworbXNnaWQgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIKK21zZ3N0ciAiIgorIkFuemVpZ2VuLCBkdXJjaCB3ZWxjaGVuIENvbW1pdCB1bmQgQXV0b3IgZGllIGpld2VpbGlnZW4gWmVpbGVuXG4iCisiZWluZXIgRGF0ZWkgenVsZXR6dCBnZcOkbmRlcnQgd3VyZGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OAorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICJCcmFuY2hlcyBhbnplaWdlbiwgZXJzdGVsbGVuIG9kZXIgZW50ZmVybmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OQorbXNnaWQgIk1vdmUgb2JqZWN0cyBhbmQgcmVmcyBieSBhcmNoaXZlIgorbXNnc3RyICJPYmpla3RlIHVuZCBSZWZlcmVuemVuIMO8YmVyIGVpbiBBcmNoaXYgdmVydGVpbGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MAorbXNnaWQgIlByb3ZpZGUgY29udGVudCBvciB0eXBlIGFuZCBzaXplIGluZm9ybWF0aW9uIGZvciByZXBvc2l0b3J5IG9iamVjdHMiCittc2dzdHIgIiIKKyJJbmhhbHQgb2RlciBJbmZvcm1hdGlvbmVuIHp1IFR5cCB1bmQgR3LDtsOfZSBmw7xyIFJlcG9zaXRvcnktT2JqZWt0ZSAiCisiYmVyZWl0c3RlbGxlbiIKKworIzogY29tbWFuZC1saXN0Lmg6NjEKK21zZ2lkICJEaXNwbGF5IGdpdGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24iCittc2dzdHIgImdpdGF0dHJpYnV0ZXMgSW5mb3JtYXRpb25lbiBkYXJzdGVsbGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MgorbXNnaWQgIkRlYnVnIGdpdGlnbm9yZSAvIGV4Y2x1ZGUgZmlsZXMiCittc2dzdHIgIkZlaGxlcnN1Y2hlIGluIGdpdGlnbm9yZSAvIGV4Y2x1ZGUgRGF0ZWllbiIKKworIzogY29tbWFuZC1saXN0Lmg6NjMKK21zZ2lkICJTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzIgorbXNnc3RyICJOYW1lIHVuZCBFLU1haWwtQWRyZXNzZSB2b24gS29udGFrdGVuIGFuemVpZ2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NAorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiQnJhbmNoZXMgd2VjaHNlbG4gb2RlciBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3aWVkZXJoZXJzdGVsbGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NQorbXNnaWQgIkNvcHkgZmlsZXMgZnJvbSB0aGUgaW5kZXggdG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiRGF0ZWllbiB2b24gZGVtIEluZGV4IGlucyBBcmJlaXRzdmVyemVpY2huaXMga29waWVyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY2Cittc2dpZCAiRW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIG5hbWUgaXMgd2VsbCBmb3JtZWQiCittc2dzdHIgIlNpY2hlcnN0ZWxsZW4sIGRhc3MgZWluIFJlZmVyZW56bmFtZSB3b2hsZ2Vmb3JtdCBpc3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY3Cittc2dpZCAiRmluZCBjb21taXRzIHlldCB0byBiZSBhcHBsaWVkIHRvIHVwc3RyZWFtIgorbXNnc3RyICIiCisiQ29tbWl0cyBmaW5kZW4sIGRpZSBub2NoIGF1ZiBkZW0gVXBzdHJlYW0tQnJhbmNoIGFuZ2V3ZW5kZXQgd2VyZGVuIG3DvHNzZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY4Cittc2dpZCAiQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIsOEbmRlcnVuZ2VuIGVpbmVzIGV4aXN0aWVyZW5kZW4gQ29tbWl0cyBhbndlbmRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6NjkKK21zZ2lkICJHcmFwaGljYWwgYWx0ZXJuYXRpdmUgdG8gZ2l0LWNvbW1pdCIKK21zZ3N0ciAiZ3JhZmlzY2hlIEFsdGVybmF0aXZlIHp1IGdpdC1jb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcwCittc2dpZCAiUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgInVudmVyc2lvbmllcnRlIERhdGVpZW4gdm9tIEFyYmVpdHN2ZXJ6ZWljaG5pcyBlbnRmZXJuZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcxCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICJlaW4gUmVwb3NpdG9yeSBpbiBlaW5lbSBuZXVlbiBWZXJ6ZWljaG5pcyBrbG9uZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcyCittc2dpZCAiRGlzcGxheSBkYXRhIGluIGNvbHVtbnMiCittc2dzdHIgIkRhdGVuIGluIFNwYWx0ZW4gYW56ZWlnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjczCittc2dpZCAiUmVjb3JkIGNoYW5nZXMgdG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIsOEbmRlcnVuZ2VuIGluIGRhcyBSZXBvc2l0b3J5IGVpbnRyYWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIkdpdCBDb21taXQtR3JhcGgtRGF0ZWllbiBzY2hyZWliZW4gdW5kIMO8YmVycHLDvGZlbiIKKworIzogY29tbWFuZC1saXN0Lmg6NzUKK21zZ2lkICJDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiZWluIG5ldWVzIENvbW1pdC1PYmpla3QgZXJzdGVsbGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgInJlcG9zaXRvcnl3ZWl0ZSBvZGVyIGdsb2JhbGUgT3B0aW9uZW4gbGVzZW4gb2RlciBzZXR6ZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc3Cittc2dpZCAiQ291bnQgdW5wYWNrZWQgbnVtYmVyIG9mIG9iamVjdHMgYW5kIHRoZWlyIGRpc2sgY29uc3VtcHRpb24iCittc2dzdHIgIkFuemFobCB1bmQgU3BlaWNoZXJ2ZXJicmF1Y2ggdW5nZXBhY2t0ZXIgT2JqZWt0ZSB6w6RobGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo3OAorbXNnaWQgIlJldHJpZXZlIGFuZCBzdG9yZSB1c2VyIGNyZWRlbnRpYWxzIgorbXNnc3RyICJadWdhbmdzZGF0ZW4gZGVzIEJlbnV0emVycyBlbXBmYW5nZW4gdW5kIHNwZWljaGVybiIKKworIzogY29tbWFuZC1saXN0Lmg6NzkKK21zZ2lkICJIZWxwZXIgdG8gdGVtcG9yYXJpbHkgc3RvcmUgcGFzc3dvcmRzIGluIG1lbW9yeSIKK21zZ3N0ciAiIgorIkhpbGZzcHJvZ3JhbW0genVtIHRlbXBvcsOkcmVuIFNwZWljaGVybiB2b24gWnVnYW5nc2RhdGVuIGltIEhhdXB0c3BlaWNoZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgwCittc2dpZCAiSGVscGVyIHRvIHN0b3JlIGNyZWRlbnRpYWxzIG9uIGRpc2siCittc2dzdHIgIkhpbGZzcHJvZ3JhbW0genVtIFNwZWljaGVybiB2b24gWnVnYW5nc2RhdGVuIGF1ZiBkZXIgRmVzdHBsYXR0ZSIKKworIzogY29tbWFuZC1saXN0Lmg6ODEKK21zZ2lkICJFeHBvcnQgYSBzaW5nbGUgY29tbWl0IHRvIGEgQ1ZTIGNoZWNrb3V0IgorbXNnc3RyICJlaW56ZWxuZW4gQ29tbWl0IHp1IGVpbmVtIGF1c2dlY2hlY2t0ZW4gQ1NWLVJlcG9zaXRvcnkgZXhwb3J0aWVyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgyCittc2dpZCAiU2FsdmFnZSB5b3VyIGRhdGEgb3V0IG9mIGFub3RoZXIgU0NNIHBlb3BsZSBsb3ZlIHRvIGhhdGUiCittc2dzdHIgIklocmUgRGF0ZW4gYXVzIGVpbmVtIGFuZGVyZW4gU0NNIMO8YmVybmVobWVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MworbXNnaWQgIkEgQ1ZTIHNlcnZlciBlbXVsYXRvciBmb3IgR2l0IgorbXNnc3RyICJlaW4gQ1NWIFNlcnZlciBFbXVsYXRvciBmw7xyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODQKK21zZ2lkICJBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHaXQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJlaW4gd2lya2xpY2ggZWluZmFjaGVyIFNlcnZlciBmw7xyIEdpdCBSZXBvc2l0b3JpZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg1Cittc2dpZCAiR2l2ZSBhbiBvYmplY3QgYSBodW1hbiByZWFkYWJsZSBuYW1lIGJhc2VkIG9uIGFuIGF2YWlsYWJsZSByZWYiCittc2dzdHIgIiIKKyJlaW5lbSBPYmpla3QgZWluZW4gZsO8ciBNZW5zY2hlbiBsZXNiYXJlbiBOYW1lbiBiYXNpZXJlbmQgYXVmXG4iCisiZWluZXIgdmVyZsO8Z2JhcmVuIFJlZmVyZW56IGdlYmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NgorbXNnaWQgIlNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMiCittc2dzdHIgIiIKKyLDhG5kZXJ1bmdlbiB6d2lzY2hlbiBDb21taXRzLCBDb21taXQgdW5kIEFyYmVpdHN2ZXJ6ZWljaG5pcywgZXRjLiBhbnplaWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6ODcKK21zZ2lkICJDb21wYXJlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgiCittc2dzdHIgIkRhdGVpZW4gdm9uIGRlbSBBcmJlaXRzdmVyemVpY2huaXMgdW5kIGRlbSBJbmRleCB2ZXJnbGVpY2hlbiIKKworIzogY29tbWFuZC1saXN0Lmg6ODgKK21zZ2lkICJDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4IgorbXNnc3RyICJlaW4gVmVyemVpY2huaXMgdm9uIGRlbSBBcmJlaXRzdmVyemVpY2huaXMgdW5kIGRlbSBJbmRleCB2ZXJnbGVpY2hlbiIKKworIzogY29tbWFuZC1saXN0Lmg6ODkKK21zZ2lkICJDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cyIKK21zZ3N0ciAiIgorImRlbiBJbmhhbHQgdW5kIE1vZHVzIHZvbiBCbG9icyBhdXMgendlaSBWZXJ6ZWljaG5pc29iamVrdGVuIHZlcmdsZWljaGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAiw4RuZGVydW5nZW4gbWl0dGVscyBkZW4gYWxsZ2VtZWluZW4gRGlmZi1Ub29scyBhbnplaWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6OTEKK21zZ2lkICJHaXQgZGF0YSBleHBvcnRlciIKK21zZ3N0ciAiRXhwb3J0IFRvb2wgZsO8ciBHaXQgRGF0ZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkyCittc2dpZCAiQmFja2VuZCBmb3IgZmFzdCBHaXQgZGF0YSBpbXBvcnRlcnMiCittc2dzdHIgIkJhY2tlbmQgZsO8ciBzY2huZWxsZSBHaXQgRGF0ZW4gSW1wb3J0IFRvb2xzIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MworbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIk9iamVrdGUgdW5kIFJlZmVyZW56ZW4gdm9uIGVpbmVtIGFuZGVyZW4gUmVwb3NpdG9yeSBoZXJ1bnRlcmxhZGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJmZWhsZW5kZSBPYmpla3RlIHZvbiBlaW5lbSBhbmRlcmVuIFJlcG9zaXRvcnkgZW1wZmFuZ2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NQorbXNnaWQgIlJld3JpdGUgYnJhbmNoZXMiCittc2dzdHIgIkJyYW5jaGVzIHVtc2NocmVpYmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NgorbXNnaWQgIlByb2R1Y2UgYSBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiQmVzY2hyZWlidW5nIGVpbmVzIE1lcmdlLUNvbW1pdHMgZXJ6ZXVnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk3Cittc2dpZCAiT3V0cHV0IGluZm9ybWF0aW9uIG9uIGVhY2ggcmVmIgorbXNnc3RyICJJbmZvcm1hdGlvbmVuIGbDvHIgamVkZSBSZWZlcmVueiBhdXNnZWJlbiIKKworIzogY29tbWFuZC1saXN0Lmg6OTgKK21zZ2lkICJQcmVwYXJlIHBhdGNoZXMgZm9yIGUtbWFpbCBzdWJtaXNzaW9uIgorbXNnc3RyICJQYXRjaGVzIGbDvHIgRS1NYWlsLVZlcnNhbmQgdm9yYmVyZWl0ZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk5Cittc2dpZCAiVmVyaWZpZXMgdGhlIGNvbm5lY3Rpdml0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlIgorbXNnc3RyICIiCisic3RlbGx0IGRpZSBWZXJidW5kZW5oZWl0IHVuZCBHw7xsdGlna2VpdCBkZXIgT2JqZWt0ZSBpbiBkZXIgRGF0ZW5iYW5rIHNpY2hlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTAwCittc2dpZCAiQ2xlYW51cCB1bm5lY2Vzc2FyeSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIm5pY2h0IGJlbsO2dGlndGUgRGF0ZWllbiBlbnRmZXJuZW4gdW5kIGRhcyBsb2thbGUgUmVwb3NpdG9yeSBvcHRpbWllcmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDEKK21zZ2lkICJFeHRyYWN0IGNvbW1pdCBJRCBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCB1c2luZyBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAiIgorIkNvbW1pdC1JRCBlaW5lcyBBcmNoaXZzIGV4dHJhaGllcmVuLCB3ZWxjaGVzIG1pdCBnaXQtYXJjaGl2ZSBlcnN0ZWxsdCB3dXJkZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTAyCittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICJaZWlsZW4gZGFyc3RlbGxlbiwgZGllIGVpbmVtIE11c3RlciBlbnRzcHJlY2hlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTAzCittc2dpZCAiQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdCIKK21zZ3N0ciAiZWluZSBwb3J0YWJsZSBncmFmaXNjaGUgU2Nobml0dHN0ZWxsZSB6dSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNAorbXNnaWQgIkNvbXB1dGUgb2JqZWN0IElEIGFuZCBvcHRpb25hbGx5IGNyZWF0ZXMgYSBibG9iIGZyb20gYSBmaWxlIgorbXNnc3RyICIiCisidm9uIGVpbmVyIERhdGVpIGRpZSBPYmpla3QtSUQgYmVyZWNobmVuIHVuZCBvcHRpb25hbCBlaW4gQmxvYiBlcnN0ZWxsZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNQorbXNnaWQgIkRpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiBhYm91dCBHaXQiCittc2dzdHIgIkhpbGZzaW5mb3JtYXRpb25lbiDDvGJlciBHaXQgYW56ZWlnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNgorbXNnaWQgIlNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdpdCBvdmVyIEhUVFAiCittc2dzdHIgInNlcnZlcnNlaXRpZ2UgSW1wbGVtZW50aWVydW5nIHZvbiBHaXQgw7xiZXIgSFRUUCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA3Cittc2dpZCAiRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUCIKK21zZ3N0ciAidm9uIGVpbmVtIFJlbW90ZS1HaXQtUmVwb3NpdG9yeSDDvGJlciBIVFRQIGhlcnVudGVybGFkZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOAorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEhUVFAvREFWIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiT2JqZWt0ZSDDvGJlciBIVFRQL0RBViB6dSBlaW5lbSBhbmRlcmVuIFJlcG9zaXRvcnkgw7xiZXJ0cmFnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOQorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgZnJvbSBzdGRpbiB0byBhbiBJTUFQIGZvbGRlciIKK21zZ3N0ciAiIgorImVpbmUgU2FtbWx1bmcgdm9uIFBhdGNoZXMgdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIHp1IGVpbmVtIElNQVAtT3JkbmVyICIKKyJzZW5kZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIlBhY2stSW5kZXgtRGF0ZWkgZsO8ciBlaW4gZXhpc3RpZXJlbmRlcyBnZXBhY2t0ZXMgQXJjaGl2IGVyemV1Z2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTEKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAiIgorImVpbiBsZWVyZXMgR2l0LVJlcG9zaXRvcnkgZXJzdGVsbGVuIG9kZXIgZWluIGJlc3RlaGVuZGVzIG5ldWluaXRpYWxpc2llcmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTIKK21zZ2lkICJJbnN0YW50bHkgYnJvd3NlIHlvdXIgd29ya2luZyByZXBvc2l0b3J5IGluIGdpdHdlYiIKK21zZ3N0ciAiSWhyIGFrdHVlbGxlcyBSZXBvc2l0b3J5IHNvZm9ydCBpbiBnaXR3ZWIgYmV0cmFjaHRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTEzCittc2dpZCAiQWRkIG9yIHBhcnNlIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gaW4gY29tbWl0IG1lc3NhZ2VzIgorbXNnc3RyICIiCisiU3RydWt0dXJpZXJ0ZSBJbmZvcm1hdGlvbmVuIGluIENvbW1pdC1CZXNjaHJlaWJ1bmdlbiBoaW56dWbDvGdlbiBvZGVyIHBhcnNlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTE0Cittc2dpZCAiVGhlIEdpdCByZXBvc2l0b3J5IGJyb3dzZXIiCittc2dzdHIgImRlciBHaXQtUmVwb3NpdG9yeS1Ccm93c2VyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTUKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJDb21taXQtSGlzdG9yaWUgYW56ZWlnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNgorbXNnaWQgIlNob3cgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisiSW5mb3JtYXRpb25lbiDDvGJlciBEYXRlaWVuIGluIGRlbSBJbmRleCB1bmQgaW0gQXJiZWl0c3ZlcnplaWNobmlzIGFuemVpZ2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTcKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVmZXJlbnplbiBpbiBlaW5lbSBSZW1vdGUtUmVwb3NpdG9yeSBhdWZsaXN0ZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOAorbXNnaWQgIkxpc3QgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QiCittc2dzdHIgIkluaGFsdGUgZWluZXMgVHJlZS1PYmpla3RlcyBhdWZsaXN0ZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOQorbXNnaWQgIkV4dHJhY3RzIHBhdGNoIGFuZCBhdXRob3JzaGlwIGZyb20gYSBzaW5nbGUgZS1tYWlsIG1lc3NhZ2UiCittc2dzdHIgIiIKKyJQYXRjaCB1bmQgVXJoZWJlcnNjaGFmdCB2b24gZWluZXIgZWluemVsbmVuIEUtTWFpbC1OYWNocmljaHQgZXh0cmFoaWVyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMAorbXNnaWQgIlNpbXBsZSBVTklYIG1ib3ggc3BsaXR0ZXIgcHJvZ3JhbSIKK21zZ3N0ciAiZWluZmFjaGVzIFVOSVggbWJveCBTcGxpdHRlci1Qcm9ncmFtbSIKKworIzogY29tbWFuZC1saXN0Lmg6MTIxCittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgInp3ZWkgb2RlciBtZWhyIEVudHdpY2tsdW5nc3p3ZWlnZSB6dXNhbW1lbmbDvGhyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMgorbXNnaWQgIkZpbmQgYXMgZ29vZCBjb21tb24gYW5jZXN0b3JzIGFzIHBvc3NpYmxlIGZvciBhIG1lcmdlIgorbXNnc3RyICJtw7ZnbGljaHN0IGJlc3RlbiBnZW1laW5zYW1lbiBWb3Jnw6RuZ2VyLUNvbW1pdCBmw7xyIGVpbmVuIE1lcmdlIGZpbmRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTIzCittc2dpZCAiUnVuIGEgdGhyZWUtd2F5IGZpbGUgbWVyZ2UiCittc2dzdHIgImVpbmVuIDMtV2VnZS1EYXRlaS1NZXJnZSBhdXNmw7xocmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjQKK21zZ2lkICJSdW4gYSBtZXJnZSBmb3IgZmlsZXMgbmVlZGluZyBtZXJnaW5nIgorbXNnc3RyICJlaW5lbiBNZXJnZSBmw7xyIHp1c2FtbWVuenVmw7xocmVuZGUgRGF0ZWllbiBhdXNmw7xocmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjUKK21zZ2lkICJUaGUgc3RhbmRhcmQgaGVscGVyIHByb2dyYW0gdG8gdXNlIHdpdGggZ2l0LW1lcmdlLWluZGV4IgorbXNnc3RyICJkYXMgU3RhbmRhcmQtSGlsZnNwcm9ncmFtbSBmw7xyIGRpZSBWZXJ3ZW5kdW5nIG1pdCBnaXQtbWVyZ2UtaW5kZXgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNgorbXNnaWQgIlJ1biBtZXJnZSBjb25mbGljdCByZXNvbHV0aW9uIHRvb2xzIHRvIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIgorbXNnc3RyICIiCisiQXVzZsO8aHJlbiB2b24gVG9vbHMgenVyIEF1ZmzDtnN1bmcgdm9uIE1lcmdlLUtvbmZsaWt0ZW4genVyIEJlaGVidW5nIGRpZXNlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTI3Cittc2dpZCAiU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleCIKK21zZ3N0ciAiMy1XZWdlLU1lcmdlIGFuemVpZ2VuIG9obmUgZGVuIEluZGV4IHp1IHZlcsOkbmRlcm4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgbXVsdGktcGFjay1pbmRleGVzIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4ZXMgc2NocmVpYmVuIHVuZCDDvGJlcnByw7xmZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOQorbXNnaWQgIkNyZWF0ZXMgYSB0YWcgb2JqZWN0IgorbXNnc3RyICJlaW4gVGFnLU9iamVrdCBlcnN0ZWxsZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMAorbXNnaWQgIkJ1aWxkIGEgdHJlZS1vYmplY3QgZnJvbSBscy10cmVlIGZvcm1hdHRlZCB0ZXh0IgorbXNnc3RyICJUcmVlLU9iamVrdCBhdXMgbHMtdHJlZSBmb3JtYXR0aWVydGVtIFRleHQgZXJ6ZXVnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMQorbXNnaWQgIk1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgYSBkaXJlY3RvcnksIG9yIGEgc3ltbGluayIKK21zZ3N0ciAiIgorImVpbmUgRGF0ZWksIGVpbiBWZXJ6ZWljaG5pcywgb2RlciBlaW5lIHN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZyB2ZXJzY2hpZWJlbiAiCisib2RlciB1bWJlbmVubmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzIKK21zZ2lkICJGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzIgorbXNnc3RyICJzeW1ib2xpc2NoZSBOYW1lbiBmw7xyIGRpZSBnZWdlYmVuZW4gQ29tbWl0cyBmaW5kZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMworbXNnaWQgIkFkZCBvciBpbnNwZWN0IG9iamVjdCBub3RlcyIKK21zZ3N0ciAiT2JqZWt0LU5vdGl6ZW4gaGluenVmw7xnZW4gb2RlciDDvGJlcnByw7xmZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNAorbXNnaWQgIkltcG9ydCBmcm9tIGFuZCBzdWJtaXQgdG8gUGVyZm9yY2UgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJ2b24gUGVyZm9yY2UgUmVwb3NpdG9yaWVzIGltcG9ydGllcmVuIHVuZCBuYWNoIGRpZXNlIHNlbmRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM1Cittc2dpZCAiQ3JlYXRlIGEgcGFja2VkIGFyY2hpdmUgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiZWluIGdlcGFja3RlcyBBcmNoaXYgdm9uIE9iamVrdGVuIGVyc3RlbGxlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM2Cittc2dpZCAiRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcyIKK21zZ3N0ciAicmVkdW5kYW50ZSBQYWtldGRhdGVpZW4gZmluZGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzcKK21zZ2lkICJQYWNrIGhlYWRzIGFuZCB0YWdzIGZvciBlZmZpY2llbnQgcmVwb3NpdG9yeSBhY2Nlc3MiCittc2dzdHIgIkJyYW5jaGVzIHVuZCBUYWdzIGbDvHIgZWZmaXppZW50ZW4gWnVncmlmZiBhdWYgZGFzIFJlcG9zaXRvcnkgcGFja2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzgKK21zZ2lkICJSb3V0aW5lcyB0byBoZWxwIHBhcnNpbmcgcmVtb3RlIHJlcG9zaXRvcnkgYWNjZXNzIHBhcmFtZXRlcnMiCittc2dzdHIgIiIKKyJSb3V0aW5lbiBhbHMgSGlsZmUgenVtIFBhcnNlbiB2b24gWnVncmlmZnNwYXJhbWV0ZXJuIHZvbiBSZW1vdGUtUmVwb3NpdG9yaWVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzkKK21zZ2lkICJDb21wdXRlIHVuaXF1ZSBJRCBmb3IgYSBwYXRjaCIKK21zZ3N0ciAiZWluZGV1dGlnZSBJRCBmw7xyIGVpbmVuIFBhdGNoIGJlcmVjaG5lbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQwCittc2dpZCAiUHJ1bmUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJhbGxlIG5pY2h0IGVycmVpY2hiYXJlbiBPYmpla3RlIHZvbiBkZXIgT2JqZWt0ZGF0ZW5iYW5rIGVudGZlcm5lbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQxCittc2dpZCAiUmVtb3ZlIGV4dHJhIG9iamVjdHMgdGhhdCBhcmUgYWxyZWFkeSBpbiBwYWNrIGZpbGVzIgorbXNnc3RyICIiCisienVzw6R0emxpY2hlIE9iamVrdGUsIGRpZSBzaWNoIGJlcmVpdHMgaW4gUGFrZXRkYXRlaWVuIGJlZmluZGVuLCBlbnRmZXJuZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MgorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiIgorIk9iamVrdGUgdm9uIGVpbmVtIGV4dGVybmVuIFJlcG9zaXRvcnkgYW5mb3JkZXJuIHVuZCBzaWUgbWl0IGVpbmVtIGFuZGVyZW4gIgorIlJlcG9zaXRvcnkgb2RlciBlaW5lbSBsb2thbGVuIEJyYW5jaCB6dXNhbW1lbmbDvGhyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MworbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiUmVtb3RlLVJlZmVyZW56ZW4gbWl0c2FtdCBkZW4gdmVyYnVuZGVuZW4gT2JqZWt0ZW4gYWt0dWFsaXNpZXJlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ0Cittc2dpZCAiQXBwbGllcyBhIHF1aWx0IHBhdGNoc2V0IG9udG8gdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJQYXRjaGVzIGF1cyBxdWlsdCBhdWYgYWt0dWVsbGVuIEJyYW5jaCBhbndlbmRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ1Cittc2dpZCAiQ29tcGFyZSB0d28gY29tbWl0IHJhbmdlcyAoZS5nLiB0d28gdmVyc2lvbnMgb2YgYSBicmFuY2gpIgorbXNnc3RyICJ6d2VpIENvbW1pdC1CZXJlaWNoZSB2ZXJnbGVpY2hlbiAoendlaSBWZXJzaW9uZW4gZWluZXMgQnJhbmNoZXMpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDYKK21zZ2lkICJSZWFkcyB0cmVlIGluZm9ybWF0aW9uIGludG8gdGhlIGluZGV4IgorbXNnc3RyICJWZXJ6ZWljaG5pc2luZm9ybWF0aW9uZW4gaW4gZGVuIEluZGV4IGVpbmxlc2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDcKK21zZ2lkICJSZWFwcGx5IGNvbW1pdHMgb24gdG9wIG9mIGFub3RoZXIgYmFzZSB0aXAiCittc2dzdHIgIldpZWRlcmhvbHRlcyBBbndlbmRlbiB2b24gQ29tbWl0cyBhdWYgYW5kZXJlbSBCYXNpcy1Db21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OAorbXNnaWQgIlJlY2VpdmUgd2hhdCBpcyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiRW1wZmFuZ2VuIHdhcyBpbiBkYXMgUmVwb3NpdG9yeSDDvGJlcnRyYWdlbiB3dXJkZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ5Cittc2dpZCAiTWFuYWdlIHJlZmxvZyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiUmVmbG9nIEluZm9ybWF0aW9uZW4gdmVyd2FsdGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTAKK21zZ2lkICJNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJNZW5nZSB2b24gaGludGVybGVndGVuIFJlcG9zaXRvcmllcyB2ZXJ3YWx0ZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MQorbXNnaWQgIlBhY2sgdW5wYWNrZWQgb2JqZWN0cyBpbiBhIHJlcG9zaXRvcnkiCittc2dzdHIgInVuZ2VwYWNrdGUgT2JqZWt0ZSBpbiBlaW5lbSBSZXBvc2l0b3J5IHBhY2tlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTUyCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgcmVmcyB0byByZXBsYWNlIG9iamVjdHMiCittc2dzdHIgIlJlZmVyZW56ZW4gZsO8ciBlcnNldHplbmRlIE9iamVrdGUgZXJzdGVsbGVuLCBhdWZsaXN0ZW4sIGzDtnNjaGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTMKK21zZ2lkICJHZW5lcmF0ZXMgYSBzdW1tYXJ5IG9mIHBlbmRpbmcgY2hhbmdlcyIKK21zZ3N0ciAiZWluZSDDnGJlcnNpY2h0IMO8YmVyIGF1c3N0ZWhlbmRlIMOEbmRlcnVuZ2VuIGdlbmVyaWVyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NAorbXNnaWQgIlJldXNlIHJlY29yZGVkIHJlc29sdXRpb24gb2YgY29uZmxpY3RlZCBtZXJnZXMiCittc2dzdHIgImF1ZmdlemVpY2huZXRlIEF1ZmzDtnN1bmcgdm9uIE1lcmdlLUtvbmZsaWt0ZW4gd2llZGVydmVyd2VuZGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTUKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAiYWt0dWVsbGVuIEhFQUQgenUgZWluZW0gc3BlemlmaXppZXJ0ZW4gWnVzdGFuZCBzZXR6ZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NgorbXNnaWQgIlJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICJEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3aWVkZXJoZXJzdGVsbGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTcKK21zZ2lkICJSZXZlcnQgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICJlaW5pZ2UgYmVzdGVoZW5kZSBDb21taXRzIHLDvGNrZ8OkbmdpZyBtYWNoZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OAorbXNnaWQgIkxpc3RzIGNvbW1pdCBvYmplY3RzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiQ29tbWl0LU9iamVrdGUgaW4gdW1nZWtlaHJ0ZXIgY2hyb25vbG9naXNjaGVyIE9yZG51bmcgYXVmbGlzdGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTkKK21zZ2lkICJQaWNrIG91dCBhbmQgbWFzc2FnZSBwYXJhbWV0ZXJzIgorbXNnc3RyICJQYXJhbWV0ZXIgaGVyYXVzcGlja2VuIHVuZCDDpG5kZXJuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjAKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgdW5kIHZvbSBJbmRleCBsw7ZzY2hlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTYxCittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBhcyBlbWFpbHMiCittc2dzdHIgImVpbmUgU2FtbWx1bmcgdm9uIFBhdGNoZXMgYWxzIEUtTWFpbHMgdmVyc2VuZGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjIKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBHaXQgcHJvdG9jb2wgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJPYmpla3RlIMO8YmVyIGRhcyBHaXQgUHJvdG9rb2xsIHp1IGVpbmVtIGFuZGVyZW4gUmVwb3NpdG9yeSDDvGJlcnRyYWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTYzCittc2dpZCAiUmVzdHJpY3RlZCBsb2dpbiBzaGVsbCBmb3IgR2l0LW9ubHkgU1NIIGFjY2VzcyIKK21zZ3N0ciAiTG9naW4tU2hlbGwgYmVzY2hyw6Rua3QgZsO8ciBOdXItR2l0IFNTSC1adWdyaWZmIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjQKK21zZ2lkICJTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dCIKK21zZ3N0ciAiQXVzZ2FiZSB2b24gJ2dpdCBsb2cnIHp1c2FtbWVuZmFzc2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjUKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAidmVyc2NoaWVkZW5lIEFydGVuIHZvbiBPYmpla3RlbiBhbnplaWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY2Cittc2dpZCAiU2hvdyBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cyIKK21zZ3N0ciAiQnJhbmNoZXMgdW5kIGlocmUgQ29tbWl0cyBhdXNnZWJlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY3Cittc2dpZCAiU2hvdyBwYWNrZWQgYXJjaGl2ZSBpbmRleCIKK21zZ3N0ciAiZ2VwYWNrdGVuIEFyY2hpdi1JbmRleCBhbnplaWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY4Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVmZXJlbnplbiBpbiBlaW5lbSBsb2thbGVzIFJlcG9zaXRvcnkgYXVmbGlzdGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjkKK21zZ2lkICJHaXQncyBpMThuIHNldHVwIGNvZGUgZm9yIHNoZWxsIHNjcmlwdHMiCittc2dzdHIgIkdpdCdzIGkxOG4tS29uZmlndXJhdGlvbnNjb2RlIGbDvHIgU2hlbGwtU2tyaXB0ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTcwCittc2dpZCAiQ29tbW9uIEdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZSIKK21zZ3N0ciAiYWxsZ2VtZWluZXIgR2l0IFNoZWxsLVNrcmlwdCBLb25maWd1cmF0aW9uc2NvZGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MQorbXNnaWQgIkluaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJJbml0aWFsaXNpZXJlIHVuZCB2ZXLDpG5kZXJlIGRlbiBwYXJ0aWVsbGVuIENoZWNrb3V0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzIKK21zZ2lkICJTdGFzaCB0aGUgY2hhbmdlcyBpbiBhIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGF3YXkiCittc2dzdHIgIsOEbmRlcnVuZ2VuIGluIGVpbmVtIEFyYmVpdHN2ZXJ6ZWljaG5pcyBhdWZiZXdhaHJlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTczCittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIHN0YWdpbmcgYXJlYSIKK21zZ3N0ciAiRGF0ZWlpbmhhbHRlIGRlciBTdGFnaW5nLUFyZWEgaGluenVmw7xnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NAorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgImRlbiBadXN0YW5kIGRlcyBBcmJlaXRzdmVyemVpY2huaXNzZXMgYW56ZWlnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NQorbXNnaWQgIlJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIgorbXNnc3RyICJuaWNodCBlcmZvcmRlcmxpY2hlbiBXaGl0ZXNwYWNlIGVudGZlcm5lbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc2Cittc2dpZCAiSW5pdGlhbGl6ZSwgdXBkYXRlIG9yIGluc3BlY3Qgc3VibW9kdWxlcyIKK21zZ3N0ciAiU3VibW9kdWxlIGluaXRpYWxpc2llcmVuLCBha3R1YWxpc2llcmVuIG9kZXIgaW5zcGl6aWVyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NworbXNnaWQgIkJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYW5kIEdpdCIKK21zZ3N0ciAiIgorIkJpZGlyZWt0aW9uYWxlIE9wZXJhdGlvbmVuIHp3aXNjaGVuIGVpbmVtIFN1YnZlcnNpb24gUmVwb3NpdG9yeSB1bmQgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzgKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMiCittc2dzdHIgIkJyYW5jaGVzIHdlY2hzZWxuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzkKK21zZ2lkICJSZWFkLCBtb2RpZnkgYW5kIGRlbGV0ZSBzeW1ib2xpYyByZWZzIgorbXNnc3RyICJzeW1ib2xpc2NoZSBSZWZlcmVuemVuIGxlc2VuLCDDpG5kZXJuIHVuZCBsw7ZzY2hlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgwCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIiIKKyJlaW4gbWl0IEdQRyBzaWduaWVydGVzIFRhZy1PYmpla3QgZXJ6ZXVnZW4sIGF1Zmxpc3RlbiwgbMO2c2NoZW4gb2RlciAiCisidmVyaWZpemllcmVuLiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgxCittc2dpZCAiQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIHdpdGggYSBibG9iJ3MgY29udGVudHMiCittc2dzdHIgImVpbmUgdGVtcG9yw6RyZSBEYXRlaSBtaXQgZGVuIEluaGFsdGVuIGVpbmVzIEJsb2JzIGVyc3RlbGxlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgyCittc2dpZCAiVW5wYWNrIG9iamVjdHMgZnJvbSBhIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICJPYmpla3RlIHZvbiBlaW5lbSBnZXBhY2t0ZW4gQXJjaGl2IGVudHBhY2tlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgzCittc2dpZCAiUmVnaXN0ZXIgZmlsZSBjb250ZW50cyBpbiB0aGUgd29ya2luZyB0cmVlIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiRGF0ZWlpbmhhbHRlIGF1cyBkZW0gQXJiZWl0c3ZlcnplaWNobmlzIGltIEluZGV4IHJlZ2lzdHJpZXJlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg0Cittc2dpZCAiVXBkYXRlIHRoZSBvYmplY3QgbmFtZSBzdG9yZWQgaW4gYSByZWYgc2FmZWx5IgorbXNnc3RyICIiCisiZGVuIE9iamVrdG5hbWVuLCBkZXIgaW4gZWluZXIgUmVmZXJlbnogZ2VzcGVpY2hlcnQgaXN0LCBzaWNoZXIgYWt0dWFsaXNpZXJlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg1Cittc2dpZCAiVXBkYXRlIGF1eGlsaWFyeSBpbmZvIGZpbGUgdG8gaGVscCBkdW1iIHNlcnZlcnMiCittc2dzdHIgIkhpbGZzaW5mb3JtYXRpb25zZGF0ZWkgenVyIEhpbGZlIHZvbiBlaW5mYWNoZW4gU2VydmVybiBha3R1YWxpc2llcmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODYKK21zZ2lkICJTZW5kIGFyY2hpdmUgYmFjayB0byBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAiQXJjaGl2IHp1csO8Y2sgenUgZ2l0LWFyY2hpdmUgc2VuZGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODcKK21zZ2lkICJTZW5kIG9iamVjdHMgcGFja2VkIGJhY2sgdG8gZ2l0LWZldGNoLXBhY2siCittc2dzdHIgIk9iamVrdGUgZ2VwYWNrdCB6dXLDvGNrIGFuIGdpdC1mZXRjaC1wYWNrIHNlbmRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiU2hvdyBhIEdpdCBsb2dpY2FsIHZhcmlhYmxlIgorbXNnc3RyICJlaW5lIGxvZ2lzY2hlIFZhcmlhYmxlIHZvbiBHaXQgYW56ZWlnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OQorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIGNvbW1pdHMiCittc2dzdHIgImRpZSBHUEctU2lnbmF0dXIgdm9uIENvbW1pdHMgcHLDvGZlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTkwCittc2dpZCAiVmFsaWRhdGUgcGFja2VkIEdpdCBhcmNoaXZlIGZpbGVzIgorbXNnc3RyICJnZXBhY2t0ZSBHaXQtQXJjaGl2ZGF0ZWllbiB2YWxpZGllcmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTEKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiB0YWdzIgorbXNnc3RyICJkaWUgR1BHLVNpZ25hdHVyIHZvbiBUYWdzIHByw7xmZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MgorbXNnaWQgIkdpdCB3ZWIgaW50ZXJmYWNlICh3ZWIgZnJvbnRlbmQgdG8gR2l0IHJlcG9zaXRvcmllcykiCittc2dzdHIgIkdpdCBXZWIgSW50ZXJmYWNlIChXZWItRnJvbnRlbmQgZsO8ciBHaXQtUmVwb3NpdG9yaWVzKSIKKworIzogY29tbWFuZC1saXN0Lmg6MTkzCittc2dpZCAiU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIgorbXNnc3RyICJMb2dzIG1pdCBkZW0gVW50ZXJzY2hpZWQsIGRlbiBqZWRlciBDb21taXQgZWluZsO8aHJ0LCBhbnplaWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk0Cittc2dpZCAiTWFuYWdlIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMiCittc2dzdHIgIm1laHJlcmUgQXJiZWl0c3ZlcnplaWNobmlzc2UgdmVyd2FsdGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTUKK21zZ2lkICJDcmVhdGUgYSB0cmVlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICJUcmVlLU9iamVrdCB2b20gYWt0dWVsbGVuIEluZGV4IGVyc3RlbGxlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk2Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAiRGVmaW5pdGlvbiB2b24gQXR0cmlidXRlbiBwcm8gUGZhZCIKKworIzogY29tbWFuZC1saXN0Lmg6MTk3Cittc2dpZCAiR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zIgorbXNnc3RyICJHaXQgS29tbWFuZG96ZWlsZW5zY2huaXR0c3RlbGxlIHVuZCBLb252ZW50aW9uZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OAorbXNnaWQgIkEgR2l0IGNvcmUgdHV0b3JpYWwgZm9yIGRldmVsb3BlcnMiCittc2dzdHIgImVpbmUgR2l0IEFubGVpdHVuZyBmw7xyIEVudHdpY2tsZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OQorbXNnaWQgIkdpdCBmb3IgQ1ZTIHVzZXJzIgorbXNnc3RyICJHaXQgZsO8ciBDVlMgQmVudXR6ZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMAorbXNnaWQgIlR3ZWFraW5nIGRpZmYgb3V0cHV0IgorbXNnc3RyICJEaWZmLUF1c2dhYmUgb3B0aW1pZXJlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MjAxCittc2dpZCAiQSB1c2VmdWwgbWluaW11bSBzZXQgb2YgY29tbWFuZHMgZm9yIEV2ZXJ5ZGF5IEdpdCIKK21zZ3N0ciAiIgorImVpbiBrbGVpbmUsIG7DvHR6bGljaGUgTWVuZ2Ugdm9uIEJlZmVobGVuIGbDvHIgZGllIHTDpGdsaWNoZSBWZXJ3ZW5kdW5nIHZvbiBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMgorbXNnaWQgIkEgR2l0IEdsb3NzYXJ5IgorbXNnc3RyICJlaW4gR2l0LUdsb3NzYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMworbXNnaWQgIkhvb2tzIHVzZWQgYnkgR2l0IgorbXNnc3RyICJ2b24gR2l0IHZlcndlbmRldGUgSG9va3MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNAorbXNnaWQgIlNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUiCittc2dzdHIgIlNwZXppZmlrYXRpb24gdm9uIGJld3Vzc3QgaWdub3JpZXJ0ZW4sIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDUKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAiRGVmaW5pdGlvbiB2b24gU3VibW9kdWwtRWlnZW5zY2hhZnRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MjA2Cittc2dpZCAiR2l0IG5hbWVzcGFjZXMiCittc2dzdHIgIkdpdCBOYW1lbnNiZXJlaWNoZSIKKworIzogY29tbWFuZC1saXN0Lmg6MjA3Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICJHaXQgUmVwb3NpdG9yeSBBdWZiYXUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOAorbXNnaWQgIlNwZWNpZnlpbmcgcmV2aXNpb25zIGFuZCByYW5nZXMgZm9yIEdpdCIKK21zZ3N0ciAiU3BlemlmaWthdGlvbiB2b24gQ29tbWl0cyB1bmQgQmVyZWljaGVuIGbDvHIgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDkKK21zZ2lkICJNb3VudGluZyBvbmUgcmVwb3NpdG9yeSBpbnNpZGUgYW5vdGhlciIKK21zZ3N0ciAiRWluYmluZGVuIGVpbmVzIFJlcG9zaXRvcmllcyBpbiBlaW4gYW5kZXJlcyIKKworIzogY29tbWFuZC1saXN0Lmg6MjEwCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0OiBwYXJ0IHR3byIKK21zZ3N0ciAiZWluZSBlaW5mw7xocmVuZGUgQW5sZWl0dW5nIHp1IEdpdDogVGVpbCB6d2VpIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTEKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQiCittc2dzdHIgImVpbmUgZWluZsO8aHJlbmRlIEFubGVpdHVuZyB6dSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMgorbXNnaWQgIkFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cyB3aXRoIEdpdCIKK21zZ3N0ciAiRWluZSDDnGJlcnNpY2h0IMO8YmVyIGVtcGZvaGxlbmUgQXJiZWl0c2FibMOkdWZlIG1pdCBHaXQiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTQKK21zZ2lkICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKK21zZ3N0ciAiU2llIG3DvHNzZW4gbWl0IFwiZ2l0IGJpc2VjdCBzdGFydFwiIGJlZ2lubmVuLiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjYwCittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICJXb2xsZW4gU2llLCBkYXNzIGljaCBlcyBmw7xyIFNpZSBtYWNoZSBbWS9uXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjEwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGFyZyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBSZWZlcmVuei1FaW5nYWJlOiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGJpc2VjdGVkX2hlYWQiCittc2dzdHIgIlVuZ8O8bHRpZ2UgUmVmZXJlbnotRWluZ2FiZTogJGJpc2VjdGVkX2hlYWQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkcmV2IgorbXNnc3RyICJVbmfDvGx0aWdlIFJlZmVyZW56LUVpbmdhYmU6ICRyZXYiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTM5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIGNhbiB0YWtlIG9ubHkgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBrYW5uIG51ciBlaW4gQXJndW1lbnQgZW50Z2VnZW5uZWhtZW4uIgorCisjOiBnaXQtYmlzZWN0LnNoOjIwOQorbXNnaWQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iCittc2dzdHIgIktlaW5lIExvZy1EYXRlaSBnZWdlYmVuIgorCisjOiBnaXQtYmlzZWN0LnNoOjIxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAia2FubiAkZmlsZSBuaWNodCBmw7xyIGRhcyBBYnNwaWVsZW4gbGVzZW4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjMyCittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICI/PyBXYXMgcmVkZW4gU2llIGRhPyIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDEKK21zZ2lkICJiaXNlY3QgcnVuIGZhaWxlZDogbm8gY29tbWFuZCBwcm92aWRlZC4iCittc2dzdHIgIidiaXNlY3QgcnVuJyBmZWhsZ2VzY2hsYWdlbjoga2VpbiBCZWZlaGwgYW5nZWdlYmVuLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgImbDvGhyZSAkY29tbWFuZCBhdXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgIiIKKyInYmlzZWN0IHJ1bicgZmVobGdlc2NobGFnZW46XG4iCisiRXhpdC1Db2RlICRyZXMgdm9uICckY29tbWFuZCcgaXN0IDwgMCBvZGVyID49IDEyOCIKKworIzogZ2l0LWJpc2VjdC5zaDoyNzkKK21zZ2lkICJiaXNlY3QgcnVuIGNhbm5vdCBjb250aW51ZSBhbnkgbW9yZSIKK21zZ3N0ciAiJ2Jpc2VjdCBydW4nIGthbm4gbmljaHQgbWVociBmb3J0Z2VzZXR6dCB3ZXJkZW4iCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjg1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHJlcyIKK21zZ3N0ciAiIgorIidiaXNlY3QgcnVuJyBmZWhsZ2VzY2hsYWdlbjpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgd3VyZGUgbWl0IEZlaGxlcndlcnQgJHJlcyBiZWVuZGV0IgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAiJ2Jpc2VjdCBydW4nIGVyZm9sZ3JlaWNoIGF1c2dlZsO8aHJ0IgorCisjOiBnaXQtYmlzZWN0LnNoOjMwMAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAia2VpbmUgYmluw6RyZSBTdWNoZSBpbSBHYW5nZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NDYKK21zZ2lkICIiCisiRXJyb3I6IFlvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJtZXJnZSIKK21zZ3N0ciAiIgorIkZlaGxlcjogSWhyZSBsb2thbGVuIMOEbmRlcnVuZ2VuIGluIGRlbiBmb2xnZW5kZW4gRGF0ZWllbiB3w7xyZGVuIGR1cmNoIGRlbiAiCisiTWVyZ2VcbiIKKyLDvGJlcnNjaHJpZWJlbiB3ZXJkZW4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIkF1dG9tYXRpc2NoZXIgTWVyZ2UgaGF0IG5pY2h0IGZ1bmt0aW9uaWVydC4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYyCittc2dpZCAiU2hvdWxkIG5vdCBiZSBkb2luZyBhbiBvY3RvcHVzLiIKK21zZ3N0ciAiU29sbHRlIGtlaW5lbiBPY3RvcHVzLU1lcmdlIGF1c2bDvGhyZW4uIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiS29ubnRlIGtlaW5lbiBnZW1laW5zYW1lbiBDb21taXQgbWl0ICRwcmV0dHlfbmFtZSBmaW5kZW4uIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3NworIywgc2gtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICJCZXJlaXRzIGFrdHVlbGwgbWl0ICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyB0bzogJHByZXR0eV9uYW1lIgorbXNnc3RyICJTcHVsZSB2b3IgenU6ICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6OTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIlZlcnN1Y2hlIGVpbmZhY2hlbiBNZXJnZSBtaXQgJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDoxMDIKK21zZ2lkICJTaW1wbGUgbWVyZ2UgZGlkIG5vdCB3b3JrLCB0cnlpbmcgYXV0b21hdGljIG1lcmdlLiIKK21zZ3N0ciAiRWluZmFjaGVyIE1lcmdlIGhhdCBuaWNodCBmdW5rdGlvbmllcnQsIHZlcnN1Y2hlIGF1dG9tYXRpc2NoZW4gTWVyZ2UuIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIyMQorbXNnaWQgIkNhbm5vdCByZW1vdmUgdGVtcG9yYXJ5IGluZGV4IChjYW4ndCBoYXBwZW4pIgorbXNnc3RyICJLYW5uIHRlbXBvcsOkcmVuIEluZGV4IG5pY2h0IGzDtnNjaGVuIChrYW5uIG5pY2h0IHBhc3NpZXJlbikiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIkthbm4gJHJlZl9zdGFzaCBuaWNodCBtaXQgJHdfY29tbWl0IGFrdHVhbGlzaWVyZW4uIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCittc2dzdHIgIkZlaGxlcjogdW5iZWthbm50ZSBPcHRpb24gZsO8ciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJHN0YXNoX21zZyIKK21zZ3N0ciAiU3BlaWNoZXJ0ZSBBcmJlaXRzdmVyemVpY2huaXMgdW5kIEluZGV4LVN0YXR1cyAkc3Rhc2hfbXNnIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjUzNgorIywgc2gtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICRvcHQiCittc2dzdHIgInVuYmVrYW5udGUgT3B0aW9uOiAkb3B0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiWnUgdmllbGUgQ29tbWl0cyBhbmdlZ2ViZW46ICRSRVYiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZSBpc3Qga2VpbmUgZ8O8bHRpZ2UgUmVmZXJlbnoiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICInJGFyZ3MnIGlzdCBrZWluIFwic3Rhc2hcIi1hcnRpZ2VyIENvbW1pdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJGFyZ3MnIGlzdCBrZWluZSBcInN0YXNoXCItUmVmZXJlbnoiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjE4Cittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgIktvbm50ZSBkZW4gSW5kZXggbmljaHQgYWt0dWFsaXNpZXJlbi4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjIyCittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJLYW5uIFwic3Rhc2hcIiBuaWNodCBhbndlbmRlbiwgc29sYW5nZSBlaW4gTWVyZ2UgaW0gR2FuZ2UgaXN0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYzMAorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIktvbmZsaWt0ZSBpbSBJbmRleC4gVmVyc3VjaGVuIFNpZSBlcyBvaG5lIC0taW5kZXguIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYzMgorbXNnaWQgIkNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgIktvbm50ZSBJbmRleC1WZXJ6ZWljaG5pcyBuaWNodCBzcGVpY2hlcm4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjQxCittc2dpZCAiQ291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2ggZW50cnkiCittc2dzdHIgIiIKKyJLb25udGUgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiB2b20gU3Rhc2gtRWludHJhZyBuaWNodCB3aWVkZXJoZXJzdGVsbGVuLiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NjYKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiS2FubiBnZcOkbmRlcnRlIERhdGVpZW4gbmljaHQgYXVzIGRlbSBJbmRleCBlbnRmZXJuZW4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICIke1JFVn0gKCRzKSBnZWzDtnNjaHQiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIke1JFVn06IEtvbm50ZSBcInN0YXNoXCItRWludHJhZyBuaWNodCBsw7ZzY2hlbiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3OTIKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIihadXIgV2llZGVyaGVyc3RlbGx1bmcgZ2ViZW4gU2llIFwiZ2l0IHN0YXNoIGFwcGx5XCIgZWluKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMDMKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIlJlbGF0aXZlIFBmYWRlIGvDtm5uZW4gbnVyIHZvbiBkZXIgb2JlcnN0ZW4gRWJlbmUgZGVzIEFyYmVpdHN2ZXJ6ZWljaG5pc3NlcyAiCisiYmVudXR6dCB3ZXJkZW4uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMworIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAicmVwbyBVUkw6ICckcmVwbycgbXVzcyBhYnNvbHV0IHNlaW4gb2RlciBtaXQgLi98Li4vIGJlZ2lubmVuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzMgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIickc21fcGF0aCcgaXN0IGJlcmVpdHMgenVtIENvbW1pdCB2b3JnZW1lcmt0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiJyRzbV9wYXRoJyBpc3QgYmVyZWl0cyB6dW0gQ29tbWl0IHZvcmdlbWVya3QgdW5kIGlzdCBrZWluIFN1Ym1vZHVsIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0MgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0IgorbXNnc3RyICInJHNtX3BhdGgnIGhhdCBrZWluZW4gQ29tbWl0IGF1c2dlY2hlY2t0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MworIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkbDvGdlIGV4aXN0aWVyZW5kZXMgUmVwb3NpdG9yeSBpbiAnJHNtX3BhdGgnIGRlbSBJbmRleCBoaW56dS4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYSB2YWxpZCBnaXQgcmVwbyIKK21zZ3N0ciAiJyRzbV9wYXRoJyBleGlzdGllcnQgYmVyZWl0cyB1bmQgaXN0IGtlaW4gZ8O8bHRpZ2VzIEdpdC1SZXBvc2l0b3J5IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4MworIywgc2gtZm9ybWF0Cittc2dpZCAiQSBnaXQgZGlyZWN0b3J5IGZvciAnJHNtX25hbWUnIGlzIGZvdW5kIGxvY2FsbHkgd2l0aCByZW1vdGUocyk6IgorbXNnc3RyICIiCisiRWluIEdpdC1WZXJ6ZWljaG5pcyBmw7xyICckc21fbmFtZScgd3VyZGUgbG9rYWwgZ2VmdW5kZW4gbWl0IGRlbiBSZW1vdGUtIgorIlJlcG9zaXRvcmllczoiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjg1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8gcmV1c2UgdGhpcyBsb2NhbCBnaXQgZGlyZWN0b3J5IGluc3RlYWQgb2YgY2xvbmluZyBhZ2FpbiBmcm9tXG4iCisiICAkcmVhbHJlcG9cbiIKKyJ1c2UgdGhlICctLWZvcmNlJyBvcHRpb24uIElmIHRoZSBsb2NhbCBnaXQgZGlyZWN0b3J5IGlzIG5vdCB0aGUgY29ycmVjdCAiCisicmVwb1xuIgorIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnICIKKyJvcHRpb24uIgorbXNnc3RyICIiCisiV2VubiBTaWUgZGFzIGxva2FsZSBHaXQtVmVyemVpY2huaXMgd2llZGVydmVyd2VuZGVuIHdvbGxlbiwgYW5zdGF0dCBlcm5ldXQgIgorInZvblxuIgorIiAgJHJlYWxyZXBvXG4iCisienUga2xvbmVuLCBiZW51dHplbiBTaWUgZGllIE9wdGlvbiAnLS1mb3JjZScuIFdlbm4gZGFzIGxva2FsZSBHaXQtIgorIlZlcnplaWNobmlzXG4iCisibmljaHQgZGFzIGtvcnJla3RlIFJlcG9zaXRvcnkgaXN0IG9kZXIgU2llIHVuc2ljaGVyIHNpbmQsIHdhcyBkYXMgYmVkZXV0ZXQsXG4iCisid8OkaGxlbiBTaWUgZWluZW4gYW5kZXJlbiBOYW1lbiBtaXQgZGVyIE9wdGlvbiAnLS1uYW1lJy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWFjdGl2YXRpbmcgbG9jYWwgZ2l0IGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlICckc21fbmFtZScuIgorbXNnc3RyICJSZWFrdGl2aWVyZSBsb2thbGVzIEdpdC1WZXJ6ZWljaG5pcyBmw7xyIFN1Ym1vZHVsICckc21fbmFtZScuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwMworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJLYW5uIFN1Ym1vZHVsICckc21fcGF0aCcgbmljaHQgYXVzY2hlY2tlbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIkhpbnp1ZsO8Z2VuIHZvbiBTdWJtb2R1bCAnJHNtX3BhdGgnIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMxNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBFaW50cmFnZW4gdm9uIFN1Ym1vZHVsICckc21fcGF0aCcgaW4gZGllIEtvbmZpZ3VyYXRpb24uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiS29ubnRlIGFrdHVlbGxlbiBDb21taXQgaW4gU3VibW9kdWwtUGZhZCAnJGRpc3BsYXlwYXRoJyBuaWNodCBmaW5kZW4uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIktvbm50ZSBcImZldGNoXCIgaW4gU3VibW9kdWwtUGZhZCAnJHNtX3BhdGgnIG5pY2h0IGF1c2bDvGhyZW4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZpbmQgY3VycmVudCAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0gcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggIgorIickc21fcGF0aCciCittc2dzdHIgIiIKKyJLb25udGUgYWt0dWVsbGVuIENvbW1pdCB2b24gJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IGluIFN1Ym1vZHVsLVBmYWRcbiIKKyInJHNtX3BhdGgnIG5pY2h0IGZpbmRlbi4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjIzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOyB0cnlpbmcgdG8gZGlyZWN0bHkgZmV0Y2ggIgorIiRzaGExOiIKK21zZ3N0ciAiIgorIktvbm50ZSBcImZldGNoXCIgaW4gU3VibW9kdWwtUGZhZCAnJGRpc3BsYXlwYXRoJyBuaWNodCBhdXNmw7xocmVuLiBWZXJzdWNoZSAiCisiJHNoYTEgZGlyZWt0IGFuenVmb3JkZXJuOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJGZXRjaGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnLCBidXQgaXQgZGlkIG5vdCBjb250YWluICRzaGExLiAiCisiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iCittc2dzdHIgIiIKKyJcImZldGNoXCIgaW4gU3VibW9kdWwtUGZhZCAnJGRpc3BsYXlwYXRoJyBhdXNnZWbDvGhydCwgYWJlciAkc2hhMSBuaWNodFxuIgorImVudGhhbHRlbi4gRGlyZWt0ZXMgQW5mb3JkZXJuIGRpZXNlcyBDb21taXRzIGlzdCBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiS29ubnRlICckc2hhMScgaW4gU3VibW9kdWwtUGZhZCAnJGRpc3BsYXlwYXRoJyBuaWNodCBhdXNjaGVja2VuLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICJTdWJtb2R1bC1QZmFkOiAnJGRpc3BsYXlwYXRoJzogJyRzaGExJyBhdXNnZWNoZWNrdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiUmViYXNlIGF1ZiAnJHNoYTEnIGluIFN1Ym1vZHVsLVBmYWQgJyRkaXNwbGF5cGF0aCcgbmljaHQgbcO2Z2xpY2giCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIlN1Ym1vZHVsLVBmYWQgJyRkaXNwbGF5cGF0aCc6IFJlYmFzZSBhdWYgJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJNZXJnZSB2b24gJyRzaGExJyBpbiBTdWJtb2R1bC1QZmFkICckZGlzcGxheXBhdGgnIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0OAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICJTdWJtb2R1bC1QZmFkICckZGlzcGxheXBhdGgnOiB6dXNhbW1lbmdlZsO8aHJ0IGluICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gb2YgJyRjb21tYW5kICRzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJBdXNmw7xocnVuZyB2b24gJyRjb21tYW5kICRzaGExJyBpbiBTdWJtb2R1bC1QZmFkICckZGlzcGxheXBhdGgnICIKKyJmZWhsZ2VzY2hsYWdlbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICJTdWJtb2R1bC1QZmFkICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiRmVobGVyIGJlaSBSZWt1cnNpb24gaW4gU3VibW9kdWwtUGZhZCAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTYKK21zZ2lkICJUaGUgLS1jYWNoZWQgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC0tZmlsZXMgb3B0aW9uIgorbXNnc3RyICIiCisiRGllIE9wdGlvbmVuIC0tY2FjaGVkIHVuZCAtLWZpbGVzIGvDtm5uZW4gbmljaHQgZ2VtZWluc2FtIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk0OAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICJ1bmVyd2FydGV0ZXIgTW9kdXMgJG1vZF9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTY4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiAgV2FybnVuZzogJGRpc3BsYXlfbmFtZSBiZWluaGFsdGV0IG5pY2h0IENvbW1pdCAkc2hhMV9zcmMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiAgV2FybnVuZzogJGRpc3BsYXlfbmFtZSBiZWluaGFsdGV0IG5pY2h0IENvbW1pdCAkc2hhMV9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTc0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiIKKyIgIFdhcm51bmc6ICRkaXNwbGF5X25hbWUgYmVpbmhhbHRldCBuaWNodCBkaWUgQ29tbWl0cyAkc2hhMV9zcmMgdW5kICRzaGExX2RzdCIKKworIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU2VlIGdpdC0ke2NtZH0oMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICJTaWVoZSBnaXQtJHtjbWR9KDEpIGbDvHIgd2VpdGVyZSBEZXRhaWxzLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEwOQorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAiQXV0b21hdGlzY2hlbiBTdGFzaCBhbmdld2VuZGV0LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICRzdGFzaF9zaGExIgorbXNnc3RyICJLYW5uICRzdGFzaF9zaGExIG5pY2h0IHNwZWljaGVybi4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzaW5nICgkbmV3X2NvdW50LyR0b3RhbCkiCittc2dzdHIgIkbDvGhyZSBSZWJhc2UgYXVzICgkbmV3X2NvdW50LyR0b3RhbCkiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMDcKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1pdD4gPSBydW4gY29tbWFuZCAodGhlIHJlc3Qgb2YgdGhlIGxpbmUpIHVzaW5nIHNoZWxsXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLlxuIgorbXNnc3RyICIiCisiXG4iCisiQmVmZWhsZTpcbiIKKyJwLCBwaWNrIDxDb21taXQ+ID0gQ29tbWl0IHZlcndlbmRlblxuIgorInIsIHJld29yZCA8Q29tbWl0PiA9IENvbW1pdCB2ZXJ3ZW5kZW4sIGFiZXIgQ29tbWl0LUJlc2NocmVpYnVuZyBiZWFyYmVpdGVuXG4iCisiZSwgZWRpdCA8Q29tbWl0PiA9IENvbW1pdCB2ZXJ3ZW5kZW4sIGFiZXIgenVtIE5hY2hiZXNzZXJuIGFuaGFsdGVuXG4iCisicywgc3F1YXNoIDxDb21taXQ+ID0gQ29tbWl0IHZlcndlbmRlbiwgYWJlciBtaXQgdm9yaGVyaWdlbSBDb21taXQgdmVyZWluZW5cbiIKKyJmLCBmaXh1cCA8Q29tbWl0PiA9IHdpZSBcInNxdWFzaFwiLCBhYmVyIGRpZXNlIENvbW1pdC1CZXNjaHJlaWJ1bmcgIgorInZlcndlcmZlblxuIgorIngsIGV4ZWMgPENvbW1pdD4gPSBCZWZlaGwgKFJlc3QgZGVyIFplaWxlKSBtaXR0ZWxzIFNoZWxsIGF1c2bDvGhyZW5cbiIKKyJkLCBkcm9wIDxDb21taXQ+ID0gQ29tbWl0IGVudGZlcm5lblxuIgorImwsIGxhYmVsIDxMYWJlbD4gPSBha3R1ZWxsZW4gSEVBRCBtaXQgTGFiZWwgdmVyc2VoZW5cbiIKKyJ0LCByZXNldCA8TGFiZWw+ID0gSEVBRCB6dSBlaW5lbSBMYWJlbCB1bXNldHplblxuIgorIm0sIG1lcmdlIFstQyA8Q29tbWl0PiB8IC1jIDxDb21taXQ+XSA8TGFiZWw+IFsjIDxlaW5lWmVpbGU+XVxuIgorIi4gICAgICAgTWVyZ2UtQ29tbWl0IG1pdCBkZXIgb3JpZ2luYWxlbiBNZXJnZS1Db21taXQtQmVzY2hyZWlidW5nIGVyc3RlbGxlblxuIgorIi4gICAgICAgKG9kZXIgZGllIGVpbmUgWmVpbGUsIHdlbm4ga2VpbmUgb3JpZ2luYWxlIE1lcmdlLUNvbW1pdC0iCisiQmVzY2hyZWlidW5nXG4iCisiLiAgICAgICBzcGV6aWZpemllcnQgaXN0KS4gQmVudXR6ZW4gU2llIC1jIDxDb21taXQ+IHp1bSBCZWFyYmVpdGVuIGRlclxuIgorIi4gICAgICAgQ29tbWl0LUJlc2NocmVpYnVuZy5cbiIKKyJcbiIKKyJEaWVzZSBaZWlsZW4ga8O2bm5lbiB1bXNvcnRpZXJ0IHdlcmRlbjsgU2llIHdlcmRlbiB2b24gb2JlbiBuYWNoIHVudGVuXG4iCisiYXVzZ2Vmw7xocnQuXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyNzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIlNpZSBrw7ZubmVuIGRlbiBDb21taXQgbnVuIG5hY2hiZXNzZXJuIG1pdDpcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIlNvYmFsZCBTaWUgbWl0IElocmVuIMOEbmRlcnVuZ2VuIHp1ZnJpZWRlbiBzaW5kLCBmw7xocmVuIFNpZSBhdXM6XG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyOTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRzaGExOiBub3QgYSBjb21taXQgdGhhdCBjYW4gYmUgcGlja2VkIgorbXNnc3RyICIkc2hhMToga2VpbiBDb21taXQgZGVyIGdlcGlja3Qgd2VyZGVuIGthbm4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozMzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWl0IG5hbWU6ICRzaGExIgorbXNnc3RyICJVbmfDvGx0aWdlciBDb21taXQtTmFtZTogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozNjQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIgorbXNnc3RyICJLYW5uIGVyc2V0emVuZGVuIFNIQS0xIGRlcyBha3R1ZWxsZW4gQ29tbWl0cyBuaWNodCBzY2hyZWliZW4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAiU3B1bGUgdm9yIHp1ICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICJLYW5uIG5pY2h0IHp1ICRzaGExIHZvcnNwdWxlbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG1vdmUgSEVBRCB0byAkZmlyc3RfcGFyZW50IgorbXNnc3RyICJLYW5uIEhFQUQgbmljaHQgYXVmICRmaXJzdF9wYXJlbnQgc2V0emVuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBzcXVhc2ggYSBtZXJnZTogJHNoYTEiCittc2dzdHIgIlwic3F1YXNoXCIgZWluZXMgTWVyZ2VzICgkc2hhMSkgenVyw7xja2dld2llc2VuLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVkb2luZyBtZXJnZSAkc2hhMSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gV2llZGVyaG9sZW4gZGVzIE1lcmdlcyB2b24gJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwaWNrICRzaGExIgorbXNnc3RyICJLb25udGUgJHNoYTEgbmljaHQgcGlja2VuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJHtufToiCittc2dzdHIgIkRhcyBpc3QgQ29tbWl0LUJlc2NocmVpYnVuZyAjJHtufToiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJHtufSB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJDb21taXQtQmVzY2hyZWlidW5nICMke259IHdpcmQgYXVzZ2VsYXNzZW46IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdC4iCittc2dpZF9wbHVyYWwgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0cy4iCittc2dzdHJbMF0gIkRhcyBpc3QgZWluZSBLb21iaW5hdGlvbiBhdXMgJGNvdW50IENvbW1pdC4iCittc2dzdHJbMV0gIkRhcyBpc3QgZWluZSBLb21iaW5hdGlvbiBhdXMgJGNvdW50IENvbW1pdHMuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgJGZpeHVwX21zZyIKK21zZ3N0ciAiS2FubiAkZml4dXBfbXNnIG5pY2h0IHNjaHJlaWJlbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5NQorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHMuIgorbXNnc3RyICJEYXMgaXN0IGVpbmUgS29tYmluYXRpb24gYXVzIDIgQ29tbWl0cy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1MzYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU3OQorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICRzaGExLi4uICRyZXN0IgorbXNnc3RyICJLb25udGUgJHNoYTEuLi4gKCRyZXN0KSBuaWNodCBhbndlbmRlbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhbWVuZCBjb21taXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBpY2tpbmcgJHNoYTEuLi4gJHJlc3RcbiIKKyJUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9va1xuIgorImZhaWxlZC4gSWYgdGhlIHByZS1jb21taXQgaG9vayBmYWlsZWQsIHlvdSBtYXkgbmVlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSAiCisiYmVmb3JlXG4iCisieW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIKK21zZ3N0ciAiIgorIktvbm50ZSBDb21taXQgbmljaHQgbmFjaGJlc3Nlcm4sIG5hY2hkZW0gZGllc2VyIHZlcndlbmRldCB3dXJkZTogJHNoYTEuLi4gIgorIiRyZXN0XG4iCisiRGFzIHBhc3NpZXJ0ZSBzZWhyIHdhaHJzY2hlaW5saWNoIHdlZ2VuIGVpbmVyIGxlZXJlbiBDb21taXQtQmVzY2hyZWlidW5nLCAiCisib2RlclxuIgorIndlaWwgZGVyIHByZS1jb21taXQgSG9vayBmZWhsc2NobHVnLiBGYWxscyBkZXIgcHJlLWNvbW1pdCBIb29rIGZlaGxzY2hsdWcsXG4iCisic29sbHRlbiBTaWUgZGFzIFByb2JsZW0gYmVoZWJlbiwgYmV2b3IgU2llIGRpZSBDb21taXQtQmVzY2hyZWlidW5nIMOkbmRlcm4gIgorImvDtm5uZW4uIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICRzaGExX2FiYnJldi4uLiAkcmVzdCIKK21zZ3N0ciAiQW5nZWhhbHRlbiBiZWkgJHNoYTFfYWJicmV2Li4uICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJyRzcXVhc2hfc3R5bGUnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIkthbm4gbmljaHQgJyRzcXVhc2hfc3R5bGUnIG9obmUgdm9yaGVyaWdlbiBDb21taXQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2ODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZzogJHJlc3QiCittc2dzdHIgIkbDvGhyZSBhdXM6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gZmFpbGVkOiAkcmVzdCIKK21zZ3N0ciAiQXVzZsO8aHJ1bmcgZmVobGdlc2NobGFnZW46ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkzCittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIkRlciBJbmRleCB1bmQvb2RlciBkYXMgQXJiZWl0c3ZlcnplaWNobmlzIHd1cmRlIGdlw6RuZGVydC4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTUKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiU2llIGvDtm5uZW4gZGFzIFByb2JsZW0gYmVoZWJlbiwgdW5kIGRhbm5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorImF1c2bDvGhyZW4uIgorCisjLiBUUkFOU0xBVE9SUzogYWZ0ZXIgdGhlc2UgbGluZXMgaXMgYSBjb21tYW5kIHRvIGJlIGlzc3VlZCBieSB0aGUgdXNlcgorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICRyZXN0XG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIkF1c2bDvGhydW5nIGVyZm9sZ3JlaWNoOiAkcmVzdFxuIgorIkFiZXIgw4RuZGVydW5nZW4gaW4gSW5kZXggb2RlciBBcmJlaXRzdmVyemVpY2huaXMgdmVyYmxpZWJlbi5cbiIKKyJDb21taXR0ZW4gU2llIElocmUgw4RuZGVydW5nZW4gb2RlciBiZW51dHplbiBTaWUgXCJzdGFzaFwiLlxuIgorIkbDvGhyZW4gU2llIGRhbm4gYXVzOlxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzE5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1hbmQ6ICRjb21tYW5kICRzaGExICRyZXN0IgorbXNnc3RyICJVbmJla2FubnRlciBCZWZlaGw6ICRjb21tYW5kICRzaGExICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzIwCittc2dpZCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgIkJpdHRlIGJlaGViZW4gU2llIGRhcywgaW5kZW0gU2llICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBhdXNmw7xocmVuLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc1NQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCittc2dzdHIgIkVyZm9sZ3JlaWNoIFJlYmFzZSBhdXNnZWbDvGhydCB1bmQgJGhlYWRfbmFtZSBha3R1YWxpc2llcnQuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEyCittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIgorbXNnc3RyICJLb25udGUgQ0hFUlJZX1BJQ0tfSEVBRCBuaWNodCBsw7ZzY2hlbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlXG4iCisic3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIkVzIGJlZmluZGVuIHNpY2ggenVtIENvbW1pdCB2b3JnZW1lcmt0ZSDDhG5kZXJ1bmdlbiBpbiBJaHJlbSAiCisiQXJiZWl0c3ZlcnplaWNobmlzLlxuIgorIldlbm4gZGllc2Ugw4RuZGVydW5nZW4gaW4gZGVuIHZvcmhlcmlnZW4gQ29tbWl0IGF1Zmdlbm9tbWVuIHdlcmRlbiBzb2xsZW4sXG4iCisiZsO8aHJlbiBTaWUgYXVzOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiV2VubiBkYXJhdXMgZWluIG5ldWVyIENvbW1pdCBlcnpldWd0IHdlcmRlbiBzb2xsLCBmw7xocmVuIFNpZSBhdXM6XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSW0gQW5zY2hsdXNzIGbDvGhyZW4gU2llIHp1bSBGb3J0ZmFocmVuIGF1czpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM0Cittc2dpZCAiRXJyb3IgdHJ5aW5nIHRvIGZpbmQgdGhlIGF1dGhvciBpZGVudGl0eSB0byBhbWVuZCBjb21taXQiCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBWZXJzdWNoIGRpZSBJZGVudGl0w6R0IGRlcyBBdXRob3JzIHp1bSBWZXJiZXNzZXJuIGRlcyBDb21taXRzIHp1XG4iCisiZmluZGVuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM5Cittc2dpZCAiIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJTaWUgaGFiZW4gbmljaHQgY29tbWl0dGV0ZSDDhG5kZXJ1bmdlbiBpbiBJaHJlbSBBcmJlaXRzdmVyemVpY2huaXMuIEJpdHRlXG4iCisiY29tbWl0dGVuIFNpZSBkaWVzZSB6dWVyc3QgdW5kIGbDvGhyZW4gU2llIGRhbm4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgIgorImVybmV1dFxuIgorImF1cy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0OAorbXNnaWQgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJLb25udGUgw4RuZGVydW5nZW4gYXVzIGRlciBTdGFnaW5nLUFyZWEgbmljaHQgY29tbWl0dGVuLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg3OSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTY1Cittc2dpZCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIgorbXNnc3RyICJLb25udGUgRWRpdG9yIG5pY2h0IGF1c2bDvGhyZW4uIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKK21zZ3N0ciAiS29ubnRlICRzd2l0Y2hfdG8gbmljaHQgYXVzY2hlY2tlbi4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDcKK21zZ2lkICJObyBIRUFEPyIKK21zZ3N0ciAiS2VpbiBIRUFEPyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJHN0YXRlX2RpciIKK21zZ3N0ciAiS29ubnRlIHRlbXBvcsOkcmVzIFZlcnplaWNobmlzICRzdGF0ZV9kaXIgbmljaHQgZXJzdGVsbGVuLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkxMQorbXNnaWQgIkNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICJLb25udGUgbmljaHQgYWxzIGludGVyYWt0aXZlbiBSZWJhc2UgbWFya2llcmVuLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0MworIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmRzKSIKK21zZ3N0clswXSAiUmViYXNlIHZvbiAkc2hvcnRyZXZpc2lvbnMgYXVmICRzaG9ydG9udG8gKCR0b2RvY291bnQgS29tbWFuZG8pIgorbXNnc3RyWzFdICJSZWJhc2Ugdm9uICRzaG9ydHJldmlzaW9ucyBhdWYgJHNob3J0b250byAoJHRvZG9jb3VudCBLb21tYW5kb3MpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTU1Cittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgIkxlZXJlIENvbW1pdHMgc2luZCBhdXNrb21tZW50aWVydC4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5OTcgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEwMDIKK21zZ2lkICJDb3VsZCBub3QgaW5pdCByZXdyaXR0ZW4gY29tbWl0cyIKK21zZ3N0ciAiS29ubnRlIG5ldSBnZXNjaHJpZWJlbmUgQ29tbWl0cyBuaWNodCBpbml0aWFsaXNpZXJlbi4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDo4OSBnaXQtc2gtc2V0dXAuc2g6OTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVzYWdlOiAkZGFzaGxlc3MgJFVTQUdFIgorbXNnc3RyICJWZXJ3ZW5kdW5nOiAkZGFzaGxlc3MgJFVTQUdFIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgY2hkaXIgdG8gJGNkdXAsIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisiS29ubnRlIG5pY2h0IGluIFZlcnplaWNobmlzICRjZHVwIHdlY2hzZWxuLCBkZXIgb2JlcnN0ZW4gRWJlbmUgZGVzXG4iCisiQXJiZWl0c3ZlcnplaWNobmlzc2VzLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIwMCBnaXQtc2gtc2V0dXAuc2g6MjA3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogJHByb2dyYW1fbmFtZSBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiIgorImZhdGFsOiAkcHJvZ3JhbV9uYW1lIGthbm4gb2huZSBlaW4gQXJiZWl0c3ZlcnplaWNobmlzIG5pY2h0IHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjIxCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJSZWJhc2UgbmljaHQgbcO2Z2xpY2g6IFNpZSBoYWJlbiDDhG5kZXJ1bmdlbiwgZGllIG5pY2h0IHp1bSBDb21taXQgdm9yZ2VtZXJrdCAiCisic2luZC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjQKK21zZ2lkICJDYW5ub3QgcmV3cml0ZSBicmFuY2hlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJLYW5uIEJyYW5jaGVzIG5pY2h0IG5ldSBzY2hyZWliZW46IFNpZSBoYWJlbiDDhG5kZXJ1bmdlbiwgZGllIG5pY2h0IHp1bSAiCisiQ29tbWl0XG4iCisidm9yZ2VtZXJrdCBzaW5kLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNworbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIkthbm4gXCJwdWxsXCIgbWl0IFwicmViYXNlXCIgbmljaHQgYXVzZsO8aHJlbjogU2llIGhhYmVuIMOEbmRlcnVuZ2VuLCBkaWUgIgorIm5pY2h0IHp1bSBDb21taXQgdm9yZ2VtZXJrdCBzaW5kLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICRhY3Rpb246IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiS2FubiAkYWN0aW9uIG5pY2h0IGF1c2bDvGhyZW46IFNpZSBoYWJlbiDDhG5kZXJ1bmdlbiwgZGllIG5pY2h0IHp1bSBDb21taXRcbiIKKyJ2b3JnZW1lcmt0IHNpbmQuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQzCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIlJlYmFzZSBuaWNodCBtw7ZnbGljaDogRGllIFN0YWdpbmctQXJlYSBiZWluaGFsdGV0IG5pY2h0IGNvbW1pdHRldGUgIgorIsOEbmRlcnVuZ2VuLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0NgorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiS2FubiBcInB1bGxcIiBtaXQgXCJyZWJhc2VcIiBuaWNodCBhdXNmw7xocmVuOiBEaWUgU3RhZ2luZy1BcmVhIGJlaW5oYWx0ZXQgIgorIm5pY2h0IGNvbW1pdHRldGUgw4RuZGVydW5nZW4uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIkthbm4gJGFjdGlvbiBuaWNodCBhdXNmw7xocmVuOiBEaWUgU3RhZ2luZy1BcmVhIGJlaW5oYWx0ZXQgbmljaHQgY29tbWl0dGV0ZVxuIgorIsOEbmRlcnVuZ2VuLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI1MworbXNnaWQgIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiWnVzw6R0emxpY2ggYmVpbmhhbHRldCBkaWUgU3RhZ2luZy1BcmVhIG5pY2h0IGNvbW1pdHRldGUgw4RuZGVydW5nZW4uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MzczCittc2dpZCAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiIgorIlNpZSBtw7xzc2VuIGRlbiBCZWZlaGwgdm9uIGRlciBvYmVyc3RlbiBFYmVuZSBkZXMgQXJiZWl0c3ZlcnplaWNobmlzc2VzICIKKyJhdXNmw7xocmVuLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3OAorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgYWJzb2x1dGUgcGF0aCBvZiBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICJLb25udGUgYWJzb2x1dGVuIFBmYWQgZGVzIEdpdC1WZXJ6ZWljaG5pc3NlcyBuaWNodCBiZXN0aW1tZW4uIgorCisjLiBUUkFOU0xBVE9SUzogeW91IGNhbiBhZGp1c3QgdGhpcyB0byBhbGlnbiAiZ2l0IGFkZCAtaSIgc3RhdHVzIG1lbnUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiUxMnMgJTEycyAlcyIKK21zZ3N0ciAiJTI4cyAlMjVzICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ0b3VjaGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidG91Y2hlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIlZCBQZmFkIGFuZ2VmYXNzdFxuIgorbXNnc3RyWzFdICIlZCBQZmFkZSBhbmdlZmFzc3RcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDUzCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFnaW5nLiIKK21zZ3N0ciAiIgorIldlbm4gZGVyIFBhdGNoIHNhdWJlciBhbmdld2VuZGV0IHdlcmRlbiBrYW5uLCB3aXJkIGRlciBiZWFyYmVpdGV0ZVxuIgorIlBhdGNoLUJsb2NrIGRpcmVrdCB6dW0gSGluenVmw7xnZW4genVyIFN0YWdpbmctQXJlYSBtYXJraWVydC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1NgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3Rhc2hpbmcuIgorbXNnc3RyICIiCisiV2VubiBkZXIgUGF0Y2ggc2F1YmVyIGFuZ2V3ZW5kZXQgd2VyZGVuIGthbm4sIHdpcmQgZGVyIGJlYXJiZWl0ZXRlXG4iCisiUGF0Y2gtQmxvY2sgZGlyZWt0IHp1bSBIaW56dWbDvGdlbiB6dW0gU3Rhc2ggbWFya2llcnQuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTkKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHVuc3RhZ2luZy4iCittc2dzdHIgIiIKKyJXZW5uIGRlciBQYXRjaCBzYXViZXIgYW5nZXdlbmRldCB3ZXJkZW4ga2Fubiwgd2lyZCBkZXIgYmVhcmJlaXRldGVcbiIKKyJQYXRjaC1CbG9jayBkaXJla3QgenVtIEVudGZlcm5lbiBhdXMgZGVyIFN0YWdpbmctQXJlYSBtYXJraWVydC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzEKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgYXBwbHlpbmcuIgorbXNnc3RyICIiCisiV2VubiBkZXIgUGF0Y2ggc2F1YmVyIGFuZ2V3ZW5kZXQgd2VyZGVuIGthbm4sIHdpcmQgZGVyIGJlYXJiZWl0ZXRlXG4iCisiUGF0Y2gtQmxvY2sgZGlyZWt0IHp1bSBBbndlbmRlbiBtYXJraWVydC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NAorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgZGlzY2FyZGluZy4iCittc2dzdHIgIiIKKyJXZW5uIGRlciBQYXRjaCBzYXViZXIgYW5nZXdlbmRldCB3ZXJkZW4ga2Fubiwgd2lyZCBkZXIgYmVhcmJlaXRldGVcbiIKKyJQYXRjaC1CbG9jayBkaXJla3QgenVtIFZlcndlcmZlbiBtYXJraWVydC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSDDlmZmbmVuIHZvbiBFZGl0aWVyLURhdGVpIGVpbmVzIFBhdGNoLUJsb2NrcyB6dW0gU2NocmVpYmVuOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJXMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisiLS0tXG4iCisiVW0gJyVzJyBaZWlsZW4genUgZW50ZmVybmVuLCBtYWNoZW4gU2llIGF1cyBkaWVzZW4gJyAnIFplaWxlbiAoS29udGV4dCkuXG4iCisiVW0gJyVzJyBaZWlsZW4genUgZW50ZmVybmVuLCBsw7ZzY2hlbiBTaWUgZGllc2UuXG4iCisiWmVpbGVuLCBkaWUgbWl0ICVzIGJlZ2lubmVuLCB3ZXJkZW4gZW50ZmVybnQuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTE0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3IgcmVhZGluZzogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIMOWZmZuZW4gdm9uIEVkaXRpZXItRGF0ZWkgZWluZXMgUGF0Y2gtQmxvY2tzIHp1bSBMZXNlbjogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI0OAorbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgenVtIENvbW1pdCB2b3JtZXJrZW5cbiIKKyJuIC0gZGllc2VuIFBhdGNoLUJsb2NrIG5pY2h0IHp1bSBDb21taXQgdm9ybWVya2VuXG4iCisicSAtIEJlZW5kZW47IGRpZXNlbiBvZGVyIGFsbGUgdmVyYmxlaWJlbmRlbiBQYXRjaC1CbMO2Y2tlIG5pY2h0IHp1bSBDb21taXQgIgorInZvcm1lcmtlblxuIgorImEgLSBkaWVzZW4gdW5kIGFsbGUgd2VpdGVyZW4gUGF0Y2gtQmzDtmNrZSBkaWVzZXIgRGF0ZWkgenVtIENvbW1pdCB2b3JtZXJrZW5cbiIKKyJkIC0gZGllc2VuIG9kZXIgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGluIGRpZXNlciBEYXRlaSBuaWNodCB6dW0gQ29tbWl0ICIKKyJ2b3JtZXJrZW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI1NAorbXNnaWQgIiIKKyJ5IC0gc3Rhc2ggdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YXNoIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgc3Rhc2hlblxuIgorIm4gLSBkaWVzZW4gUGF0Y2gtQmxvY2sgbmljaHQgc3Rhc2hlblxuIgorInEgLSBCZWVuZGVuOyBkaWVzZW4gb2RlciBhbGxlIHZlcmJsZWliZW5kZW4gUGF0Y2gtQmzDtmNrZSBuaWNodCBzdGFzaGVuXG4iCisiYSAtIGRpZXNlbiB1bmQgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGRpZXNlciBEYXRlaSBzdGFzaGVuXG4iCisiZCAtIGRpZXNlbiBvZGVyIGFsbGUgd2VpdGVyZW4gUGF0Y2gtQmzDtmNrZSBkaWVzZXIgRGF0ZWkgbmljaHQgc3Rhc2hlbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjYwCittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgdW5zdGFzaGVuXG4iCisibiAtIGRpZXNlbiBQYXRjaC1CbG9jayBuaWNodCB1bnN0YXNoZW5cbiIKKyJxIC0gQmVlbmRlbjsgZGllc2VuIG9kZXIgYWxsZSB2ZXJibGVpYmVuZGVuIFBhdGNoLUJsw7Zja2UgbmljaHQgdW5zdGFzaGVuXG4iCisiYSAtIGRpZXNlbiB1bmQgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGRpZXNlciBEYXRlaSB1bnN0YXNoZW5cbiIKKyJkIC0gZGllc2VuIG9kZXIgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGRpZXNlciBEYXRlaSBuaWNodCB1bnN0YXNoZW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgYXVmIGRlbiBJbmRleCBhbndlbmRlblxuIgorIm4gLSBkaWVzZW4gUGF0Y2gtQmxvY2sgbmljaHQgYXVmIGRlbiBJbmRleCBhbndlbmRlblxuIgorInEgLSBCZWVuZGVuOyBkaWVzZW4gb2RlciBhbGxlIHZlcmJsZWliZW5kZW4gUGF0Y2gtQmzDtmNrZSBuaWNodCBhdWYgZGVuIEluZGV4ICIKKyJhbndlbmRlblxuIgorImEgLSBkaWVzZW4gdW5kIGFsbGUgd2VpdGVyZW4gUGF0Y2gtQmzDtmNrZSBkaWVzZXIgRGF0ZWkgYXVmIGRlbiBJbmRleCAiCisiYW53ZW5kZW5cbiIKKyJkIC0gZGllc2VuIG9kZXIgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGRpZXNlciBEYXRlaSBuaWNodCBhdWYgZGVuIEluZGV4ICIKKyJhbndlbmRlbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5MAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGRpZXNlbiBQYXRjaC1CbG9jayBpbSBBcmJlaXRzdmVyemVpY2huaXMgdmVyd2VyZmVuXG4iCisibiAtIGRpZXNlbiBQYXRjaC1CbG9jayBpbSBBcmJlaXRzdmVyemVpY2huaXMgbmljaHQgdmVyd2VyZmVuXG4iCisicSAtIEJlZW5kZW47IGRpZXNlbiBvZGVyIGFsbGUgdmVyYmxlaWJlbmRlbiBQYXRjaC1CbMO2Y2tlIG5pY2h0IGltICIKKyJBcmJlaXRzdmVyemVpY2huaXMgdmVyd2VyZmVuXG4iCisiYSAtIGRpZXNlbiB1bmQgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGRpZXNlciBEYXRlaSBpbSBBcmJlaXRzdmVyemVpY2huaXMgIgorInZlcndlcmZlblxuIgorImQgLSBkaWVzZW4gb2RlciBhbGxlIHdlaXRlcmVuIFBhdGNoLUJsw7Zja2UgZGllc2VyIERhdGVpIG5pY2h0IGltICIKKyJBcmJlaXRzdmVyemVpY2huaXMgdmVyd2VyZmVuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzgKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGRpZXNlbiBQYXRjaC1CbG9jayBpbSBJbmRleCB1bmQgQXJiZWl0c3ZlcnplaWNobmlzIHZlcndlcmZlblxuIgorIm4gLSBkaWVzZW4gUGF0Y2gtQmxvY2sgbmljaHQgaW0gSW5kZXggdW5kIEFyYmVpdHN2ZXJ6ZWljaG5pcyB2ZXJ3ZXJmZW5cbiIKKyJxIC0gQmVlbmRlbjsgZGllc2VuIG9kZXIgYWxsZSB2ZXJibGVpYmVuZGVuIFBhdGNoLUJsw7Zja2UgbmljaHQgaW0gSW5kZXggdW5kICIKKyJBcmJlaXRzdmVyemVpY2huaXMgdmVyd2VyZmVuXG4iCisiYSAtIGRpZXNlbiB1bmQgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGluIGRlciBEYXRlaSB2ZXJ3ZXJmZW5cbiIKKyJkIC0gZGllc2VuIG9kZXIgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGluIGRlciBEYXRlaSBuaWNodCB2ZXJ3ZXJmZW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI4NAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGRpZXNlbiBQYXRjaC1CbG9jayBpbSBJbmRleCB1bmQgYXVmIEFyYmVpdHN2ZXJ6ZWljaG5pcyBhbndlbmRlblxuIgorIm4gLSBkaWVzZW4gUGF0Y2gtQmxvY2sgbmljaHQgaW0gSW5kZXggdW5kIGF1ZiBBcmJlaXRzdmVyemVpY2huaXMgYW53ZW5kZW5cbiIKKyJxIC0gQmVlbmRlbjsgZGllc2VuIG9kZXIgYWxsZSB2ZXJibGVpYmVuZGVuIFBhdGNoLUJsw7Zja2UgbmljaHQgYW53ZW5kZW5cbiIKKyJhIC0gZGllc2VuIHVuZCBhbGxlIHdlaXRlcmVuIFBhdGNoLUJsw7Zja2UgaW4gZGVyIERhdGVpIGFud2VuZGVuXG4iCisiZCAtIGRpZXNlbiBvZGVyIGFsbGUgd2VpdGVyZW4gUGF0Y2gtQmzDtmNrZSBpbiBkZXIgRGF0ZWkgbmljaHQgYW53ZW5kZW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgYXVmIGRhcyBBcmJlaXRzdmVyemVpY2huaXMgYW53ZW5kZW5cbiIKKyJuIC0gZGllc2VuIFBhdGNoLUJsb2NrIG5pY2h0IGF1ZiBkYXMgQXJiZWl0c3ZlcnplaWNobmlzIGFud2VuZGVuXG4iCisicSAtIEJlZW5kZW47IGRpZXNlbiB1bmQgYWxsZSB2ZXJibGVpYmVuZGVuIFBhdGNoLUJsw7Zja2UgbmljaHQgYW53ZW5kZW5cbiIKKyJhIC0gZGllc2VuIHVuZCBhbGxlIHdlaXRlcmVuIFBhdGNoLUJsw7Zja2UgaW4gZGVyIERhdGVpIGFud2VuZGVuXG4iCisiZCAtIGRpZXNlbiB1bmQgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGluIGRlciBEYXRlaSBuaWNodCBhbndlbmRlbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzExCittc2dpZCAiIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiZyAtIFBhdGNoLUJsb2NrIHp1bSBIaW5zcHJpbmdlbiBhdXN3w6RobGVuXG4iCisiLyAtIG5hY2ggUGF0Y2gtQmxvY2sgc3VjaGVuLCBkZXIgZ2VnZWJlbmVtIHJlZ3Vsw6RyZW0gQXVzZHJ1Y2sgZW50c3ByaWNodFxuIgorImogLSBkaWVzZW4gUGF0Y2gtQmxvY2sgdW5iZXN0aW1tdCBsYXNzZW4sIG7DpGNoc3RlbiB1bmJlc3RpbW10ZW4gUGF0Y2gtQmxvY2sgIgorImFuemVpZ2VuXG4iCisiSiAtIGRpZXNlbiBQYXRjaC1CbG9jayB1bmJlc3RpbW10IGxhc3NlbiwgbsOkY2hzdGVuIFBhdGNoLUJsb2NrIGFuemVpZ2VuXG4iCisiayAtIGRpZXNlbiBQYXRjaC1CbG9jayB1bmJlc3RpbW10IGxhc3Nlbiwgdm9yaGVyaWdlbiB1bmJlc3RpbW10ZW4gUGF0Y2gtIgorIkJsb2NrIGFuemVpZ2VuXG4iCisiSyAtIGRpZXNlbiBQYXRjaC1CbG9jayB1bmJlc3RpbW10IGxhc3Nlbiwgdm9yaGVyaWdlbiBQYXRjaC1CbG9jayBhbnplaWdlblxuIgorInMgLSBha3R1ZWxsZW4gUGF0Y2gtQmxvY2sgaW4ga2xlaW5lcmUgUGF0Y2gtQmzDtmNrZSBhdWZ0ZWlsZW5cbiIKKyJlIC0gYWt0dWVsbGVuIFBhdGNoLUJsb2NrIG1hbnVlbGwgZWRpdGllcmVuXG4iCisiPyAtIEhpbGZlIGFuemVpZ2VuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MgorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIgorbXNnc3RyICIiCisiRGllIGF1c2dld8OkaGx0ZW4gUGF0Y2gtQmzDtmNrZSBrw7ZubmVuIG5pY2h0IGF1ZiBkZW4gSW5kZXggYW5nZXdlbmRldCB3ZXJkZW4hXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXNcbiIKK21zZ3N0ciAiaWdub3JpZXJlIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpOiAlc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIk1vZHVzw6RuZGVydW5nIGF1ZiBBcmJlaXRzdmVyemVpY2huaXMgYW53ZW5kZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTMO2c2NodW5nIGF1ZiBBcmJlaXRzdmVyemVpY2huaXMgYW53ZW5kZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyJEaWVzZW4gUGF0Y2gtQmxvY2sgYXVmIGRhcyBBcmJlaXRzdmVyemVpY2huaXMgYW53ZW5kZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3MAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG9cbiIKK21zZ3N0ciAiS2VpbmUgYW5kZXJlbiBQYXRjaC1CbMO2Y2tlIHZlcmJsZWliZW5kXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU4OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJ1xuIgorbXNnc3RyICJVbmfDvGx0aWdlIE51bW1lcjogJyVzJ1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1OTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU29ycnksIG9ubHkgJWQgaHVuayBhdmFpbGFibGUuXG4iCittc2dpZF9wbHVyYWwgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS5cbiIKK21zZ3N0clswXSAiRW50c2NodWxkaWd1bmcsIG51ciAlZCBQYXRjaC1CbG9jayB2ZXJmw7xnYmFyLlxuIgorbXNnc3RyWzFdICJFbnRzY2h1bGRpZ3VuZywgbnVyICVkIFBhdGNoLUJsw7Zja2UgdmVyZsO8Z2Jhci5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjE5Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoXG4iCittc2dzdHIgIktlaW5lIGFuZGVyZW4gUGF0Y2gtQmzDtmNrZSB6dW0gRHVyY2hzdWNoZW5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjM2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlc1xuIgorbXNnc3RyICJGZWhsZXJoYWZ0ZXIgcmVndWzDpHJlciBBdXNkcnVjayBmw7xyIFN1Y2hlICVzOiAlc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NDYKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm5cbiIKK21zZ3N0ciAiS2VpbiBQYXRjaC1CbG9jayBlbnRzcHJpY2h0IGRlbSBhbmdlZ2ViZW5lbiBNdXN0ZXJcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjU4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY4MAorbXNnaWQgIk5vIHByZXZpb3VzIGh1bmtcbiIKK21zZ3N0ciAiS2VpbiB2b3JoZXJpZ2VyIFBhdGNoLUJsb2NrXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY2NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODYKK21zZ2lkICJObyBuZXh0IGh1bmtcbiIKK21zZ3N0ciAiS2VpbiBmb2xnZW5kZXIgUGF0Y2gtQmxvY2tcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjkyCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmtcbiIKK21zZ3N0ciAiRW50c2NodWxkaWd1bmcsIGthbm4gZGllc2VuIFBhdGNoLUJsb2NrIG5pY2h0IGF1ZnRlaWxlbi5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjk4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVuay5cbiIKK21zZ2lkX3BsdXJhbCAiU3BsaXQgaW50byAlZCBodW5rcy5cbiIKK21zZ3N0clswXSAiSW4gJWQgUGF0Y2gtQmxvY2sgYXVmZ2V0ZWlsdC5cbiIKK21zZ3N0clsxXSAiSW4gJWQgUGF0Y2gtQmzDtmNrZSBhdWZnZXRlaWx0LlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3MDgKK21zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIkVudHNjaHVsZGlndW5nLCBrYW5uIGRpZXNlbiBQYXRjaC1CbG9jayBuaWNodCBiZWFyYmVpdGVuLlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGRvIG5vdCB0cmFuc2xhdGUgdGhlIGNvbW1hbmQgbmFtZXMKKyMuICdzdGF0dXMnLCAndXBkYXRlJywgJ3JldmVydCcsIGV0Yy4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc3MworbXNnaWQgIiIKKyJzdGF0dXMgICAgICAgIC0gc2hvdyBwYXRocyB3aXRoIGNoYW5nZXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzXG4iCisicmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uXG4iCisicGF0Y2ggICAgICAgICAtIHBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseVxuIgorImRpZmYgICAgICAgICAgLSB2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleFxuIgorImFkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mICIKKyJjaGFuZ2VzXG4iCittc2dzdHIgIiIKKyJzdGF0dXMgICAgICAgIC0gUGZhZGUgbWl0IMOEbmRlcnVuZ2VuIGFuemVpZ2VuXG4iCisidXBkYXRlICAgICAgICAtIFp1c3RhbmQgZGVzIEFyYmVpdHN2ZXJ6ZWljaG5pc3NlcyBkZW4genVtIENvbW1pdCAiCisidm9yZ2VtZXJrdGVuIMOEbmRlcnVuZ2VuIGhpbnp1ZsO8Z2VuXG4iCisicmV2ZXJ0ICAgICAgICAtIHp1bSBDb21taXQgdm9yZ2VtZXJrdGUgw4RuZGVydW5nZW4gYXVmIEhFQUQgVmVyc2lvbiAiCisienVyw7xja3NldHplblxuIgorInBhdGNoICAgICAgICAgLSBQYXRjaC1CbMO2Y2tlIGF1c3fDpGhsZW4gdW5kIHNlbGVrdGl2IGFrdHVhbGlzaWVyZW5cbiIKKyJkaWZmICAgICAgICAgIC0gVW50ZXJzY2hpZWRlIHp3aXNjaGVuIEhFQUQgdW5kIEluZGV4IGFuemVpZ2VuXG4iCisiYWRkIHVudHJhY2tlZCAtIEluaGFsdGUgdm9uIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIHp1bSBDb21taXQgdm9ybWVya2VuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MDUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgwOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MTUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgxOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjUKK21zZ2lkICJtaXNzaW5nIC0tIgorbXNnc3RyICItLSBmZWhsdCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODIxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVua25vd24gLS1wYXRjaCBtb2RlOiAlcyIKK21zZ3N0ciAiVW5iZWthbm50ZXIgLS1wYXRjaCBNb2R1czogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcywgZXhwZWN0aW5nIC0tIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBBcmd1bWVudCAlcywgZXJ3YXJ0ZSAtLSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzgKK21zZ2lkICJsb2NhbCB6b25lIGRpZmZlcnMgZnJvbSBHTVQgYnkgYSBub24tbWludXRlIGludGVydmFsXG4iCittc2dzdHIgIiIKKyJsb2thbGUgWmVpdHpvbmUgdW50ZXJzY2hlaWRldCBzaWNoIHZvbiBHTVQgbmljaHQgdW0gZWluIE1pbnV0ZW5pbnRlcnZhbGxcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDUgZ2l0LXNlbmQtZW1haWwucGVybDoxNTEKK21zZ2lkICJsb2NhbCB0aW1lIG9mZnNldCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMjQgaG91cnNcbiIKK21zZ3N0ciAibG9rYWxlciBaZWl0LU9mZnNldCBncsO2w59lciBvZGVyIGdsZWljaCAyNCBTdHVuZGVuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjIzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MjI5Cittc2dpZCAidGhlIGVkaXRvciBleGl0ZWQgdW5jbGVhbmx5LCBhYm9ydGluZyBldmVyeXRoaW5nIgorbXNnc3RyICJEZXIgRWRpdG9yIHd1cmRlIHVuc2F1YmVyIGJlZW5kZXQsIGJyZWNoZSBhbGxlcyBhYi4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzEwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvbnRhaW5zIGFuIGludGVybWVkaWF0ZSB2ZXJzaW9uIG9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iCittc2dzdHIgIiIKKyInJXMnIGVudGjDpGx0IGVpbmUgWndpc2NoZW52ZXJzaW9uIGRlciBFLU1haWwsIGRpZSBTaWUgZ2VyYWRlIHZlcmZhc3Nlbi5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJyVzLmZpbmFsJyBjb250YWlucyB0aGUgY29tcG9zZWQgZW1haWwuXG4iCittc2dzdHIgIiclcy5maW5hbCcgZW50aMOkbHQgZGllIHZlcmZhc3N0ZSBFLU1haWwuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDA4Cittc2dpZCAiLS1kdW1wLWFsaWFzZXMgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgb3B0aW9uc1xuIgorbXNnc3RyICItLWR1bXAtYWxpYXNlcyBpc3QgbWl0IGFuZGVyZW4gT3B0aW9uZW4gaW5rb21wYXRpYmVsXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDgxIGdpdC1zZW5kLWVtYWlsLnBlcmw6NjgzCittc2dpZCAiQ2Fubm90IHJ1biBnaXQgZm9ybWF0LXBhdGNoIGZyb20gb3V0c2lkZSBhIHJlcG9zaXRvcnlcbiIKK21zZ3N0ciAiIgorIkthbm4gJ2dpdCBmb3JtYXQtcGF0Y2gnIG5pY2h0IGF1w59lcmhhbGIgZWluZXMgUmVwb3NpdG9yaWVzIGF1c2bDvGhyZW4uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDg0Cittc2dpZCAiIgorImBiYXRjaC1zaXplYCBhbmQgYHJlbG9naW5gIG11c3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyICh2aWEgY29tbWFuZC1saW5lIG9yICIKKyJjb25maWd1cmF0aW9uIG9wdGlvbilcbiIKK21zZ3N0ciAiIgorIidiYXRjaC1zaXplJyB1bmQgJ3JlbG9naW4nIG3DvHNzZW4gZ2VtZWluc2FtIGFuZ2VnZWJlbiB3ZXJkZW4gKMO8YmVyICIKKyJLb21tYW5kb3plaWxlXG4iCisib2RlciBLb25maWd1cmF0aW9uc29wdGlvbilcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0OTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLXN1cHByZXNzLWNjIGZpZWxkOiAnJXMnXG4iCittc2dzdHIgIlVuYmVrYW5udGVzIC0tc3VwcHJlc3MtY2MgRmVsZDogJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tY29uZmlybSBzZXR0aW5nOiAnJXMnXG4iCittc2dzdHIgIlVuYmVrYW5udGUgLS1jb25maXJtIEVpbnN0ZWxsdW5nOiAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGFsaWFzIHdpdGggcXVvdGVzIGlzIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKyJXYXJudW5nOiBzZW5kZW1haWwtQWxpYXMgbWl0IEFuZsO8aHJ1bmdzemVpY2hlbiB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dDogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYDppbmNsdWRlOmAgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiV2FybnVuZzogYDppbmNsdWRlOmAgd2lyZCBuaWNodCB1bnRlcnN0w7x0enQ6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTYwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGAvZmlsZWAgb3IgYHxwaXBlYCByZWRpcmVjdGlvbiBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICJXYXJudW5nOiBgL2ZpbGVgIG9kZXIgYHxwaXBlYCBVbWxlaXR1bmcgd2lyZCBuaWNodCB1bnRlcnN0w7x0enQ6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGxpbmUgaXMgbm90IHJlY29nbml6ZWQ6ICVzXG4iCittc2dzdHIgIldhcm51bmc6IHNlbmRtYWlsIFplaWxlIHdpcmQgbmljaHQgZXJrYW5udDogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NDkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgJyVzJyBleGlzdHMgYnV0IGl0IGNvdWxkIGFsc28gYmUgdGhlIHJhbmdlIG9mIGNvbW1pdHNcbiIKKyJ0byBwcm9kdWNlIHBhdGNoZXMgZm9yLiAgUGxlYXNlIGRpc2FtYmlndWF0ZSBieS4uLlxuIgorIlxuIgorIiAgICAqIFNheWluZyBcIi4vJXNcIiBpZiB5b3UgbWVhbiBhIGZpbGU7IG9yXG4iCisiICAgICogR2l2aW5nIC0tZm9ybWF0LXBhdGNoIG9wdGlvbiBpZiB5b3UgbWVhbiBhIHJhbmdlLlxuIgorbXNnc3RyICIiCisiRGF0ZWkgJyVzJyBleGlzdGllcnQsIGFiZXIgZXMga8O2bm50ZSBhdWNoIGRlciBCZXJlaWNoIHZvbiBDb21taXRzIHNlaW4sXG4iCisiZsO8ciBkZW4gUGF0Y2hlcyBlcnpldWd0IHdlcmRlbiBzb2xsZW4uIEJpdHRlIG1hY2hlbiBTaWUgZGllcyBlaW5kZXV0aWdcbiIKKyJpbmRlbSBTaWUgLi4uXG4iCisiXG4iCisiICAgICogXCIuLyVzXCIgYW5nZWJlbiwgd2VubiBTaWUgZWluZSBEYXRlaSBtZWluZW4sIG9kZXJcbiIKKyIgICAgKiBkaWUgT3B0aW9uIC0tZm9ybWF0LXBhdGNoIGFuZ2ViZW4sIHdlbm4gU2llIGVpbmVuIENvbW1pdC1CZXJlaWNoICIKKyJtZWluZW5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW5kaXIgJXM6ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSDDlmZmbmVuIHZvbiAlczogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6Njk0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJmYXRhbDogJXM6ICVzXG4iCisid2FybmluZzogbm8gcGF0Y2hlcyB3ZXJlIHNlbnRcbiIKK21zZ3N0ciAiIgorImZhdGFsOiAlczogJXNcbiIKKyJXYXJudW5nOiBFcyB3dXJkZW4ga2VpbmUgUGF0Y2hlcyB2ZXJzZW5kZXQuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzA1Cittc2dpZCAiIgorIlxuIgorIk5vIHBhdGNoIGZpbGVzIHNwZWNpZmllZCFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorImtlaW5lIFBhdGNoLURhdGVpZW4gYW5nZWdlYmVuIVxuIgorIlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJObyBzdWJqZWN0IGxpbmUgaW4gJXM/IgorbXNnc3RyICJLZWluZSBCZXRyZWZmemVpbGUgaW4gJXM/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAlczogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIMOWZmZuZW4gdm9uICclcycgenVtIFNjaHJlaWJlbjogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzM5Cittc2dpZCAiIgorIkxpbmVzIGJlZ2lubmluZyBpbiBcIkdJVDpcIiB3aWxsIGJlIHJlbW92ZWQuXG4iCisiQ29uc2lkZXIgaW5jbHVkaW5nIGFuIG92ZXJhbGwgZGlmZnN0YXQgb3IgdGFibGUgb2YgY29udGVudHNcbiIKKyJmb3IgdGhlIHBhdGNoIHlvdSBhcmUgd3JpdGluZy5cbiIKKyJcbiIKKyJDbGVhciB0aGUgYm9keSBjb250ZW50IGlmIHlvdSBkb24ndCB3aXNoIHRvIHNlbmQgYSBzdW1tYXJ5LlxuIgorbXNnc3RyICIiCisiWmVpbGVuLCBkaWUgbWl0IFwiR0lUOlwiIGJlZ2lubmVuLCB3ZXJkZW4gZW50ZmVybnQuXG4iCisiWmllaGVuIFNpZSBpbiBCZXRyYWNodCwgZWluZW4gYWxsZ2VtZWluZW4gXCJkaWZmc3RhdFwiIG9kZXIgZWluXG4iCisiSW5oYWx0c3ZlcnplaWNobmlzLCBmw7xyIGRlbiBQYXRjaCBkZW4gU2llIHNjaHJlaWJlbiwgaGluenV6dWbDvGdlbi5cbiIKKyJcbiIKKyJMZWVyZW4gU2llIGRlbiBJbmhhbHQgZGVzIEJvZHlzLCB3ZW5uIFNpZSBrZWluZSBadXNhbW1lbmZhc3N1bmcgc2VuZGVuICIKKyJtw7ZjaHRlbi5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXM6ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSDDlmZmbmVuIHZvbiAlczogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzgwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzLmZpbmFsOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gw5ZmZm5lbiB2b24gJXMuZmluYWw6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjgyMworbXNnaWQgIlN1bW1hcnkgZW1haWwgaXMgZW1wdHksIHNraXBwaW5nIGl0XG4iCittc2dzdHIgIkUtTWFpbCBtaXQgWnVzYW1tZW5mYXNzdW5nIGlzdCBsZWVyLCB3aXJkIGF1c2dlbGFzc2VuXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCBbeS9OXSBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1c2UgPCVzPiBbeS9OXT8gIgorbXNnc3RyICJTaW5kIFNpZSBzaWNoIHNpY2hlciwgPCVzPiB6dSBiZW51dHplbiBbeS9OXT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxMworbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGZpbGVzIGFyZSA4Yml0LCBidXQgZG8gbm90IGRlY2xhcmUgYSBDb250ZW50LVRyYW5zZmVyLSIKKyJFbmNvZGluZy5cbiIKK21zZ3N0ciAiIgorIkRpZSBmb2xnZW5kZW4gRGF0ZWllbiBzaW5kIDgtQml0LCBhYmVyIGRla2xhcmllcmVuIGtlaW5cbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxOAorbXNnaWQgIldoaWNoIDhiaXQgZW5jb2Rpbmcgc2hvdWxkIEkgZGVjbGFyZSBbVVRGLThdPyAiCittc2dzdHIgIldlbGNoZXMgOC1CaXQtRW5jb2Rpbmcgc29sbCBkZWtsYXJpZXJ0IHdlcmRlbiBbVVRGLThdPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTI2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJSZWZ1c2luZyB0byBzZW5kIGJlY2F1c2UgdGhlIHBhdGNoXG4iCisiXHQlc1xuIgorImhhcyB0aGUgdGVtcGxhdGUgc3ViamVjdCAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiBQYXNzIC0tZm9yY2UgaWYgeW91IHJlYWxseSAiCisid2FudCB0byBzZW5kLlxuIgorbXNnc3RyICIiCisiVmVyc2FuZCB6dXLDvGNrZ2V3aWVzZW4sIHdlaWwgZGVyIFBhdGNoXG4iCisiXHQlc1xuIgorImRpZSBCZXRyZWZmemVpbGVudm9ybGFnZSAnKioqIFNVQkpFQ1QgSEVSRSAqKionIGVudGjDpGx0LiBHZWJlbiBTaWUgLS1mb3JjZSAiCisiYW4sXG4iCisid2VubiBTaWUgZGVuIFBhdGNoIHdpcmtsaWNoIHZlcnNlbmRlbiB3b2xsZW4uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTQ1Cittc2dpZCAiVG8gd2hvbSBzaG91bGQgdGhlIGVtYWlscyBiZSBzZW50IChpZiBhbnlvbmUpPyIKK21zZ3N0ciAiQW4gd2VuIHNvbGxlbiBkaWUgRS1NYWlscyB2ZXJzZW5kZXQgd2VyZGVuICh3ZW5uIMO8YmVyaGF1cHQgamVtYW5kKT8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBhbGlhcyAnJXMnIGV4cGFuZHMgdG8gaXRzZWxmXG4iCittc2dzdHIgImZhdGFsOiBBbGlhcyAnJXMnIGVyd2VpdGVydCBzaWNoIHp1IHNpY2ggc2VsYnN0XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTc1Cittc2dpZCAiTWVzc2FnZS1JRCB0byBiZSB1c2VkIGFzIEluLVJlcGx5LVRvIGZvciB0aGUgZmlyc3QgZW1haWwgKGlmIGFueSk/ICIKK21zZ3N0ciAiIgorIk1lc3NhZ2UtSUQgenVyIFZlcndlbmR1bmcgYWxzIEluLVJlcGx5LVRvIGbDvHIgZGllIGVyc3RlIEUtTWFpbCAod2VubiBlaW5lICIKKyJleGlzdGllcnQpPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTAzMyBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwNDEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVuYWJsZSB0byBleHRyYWN0IGEgdmFsaWQgYWRkcmVzcyBmcm9tOiAlc1xuIgorbXNnc3RyICJGZWhsZXI6IGtvbm50ZSBrZWluZSBnw7xsdGlnZSBBZHJlc3NlIGF1cyAlcyBleHRyYWhpZXJlblxuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3FdIFtkXSBbZV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0NQorbXNnaWQgIldoYXQgdG8gZG8gd2l0aCB0aGlzIGFkZHJlc3M/IChbcV11aXR8W2Rdcm9wfFtlXWRpdCk6ICIKK21zZ3N0ciAiIgorIldhcyBzb2xsIG1pdCBkaWVzZXIgQWRyZXNzZSBnZXNjaGVoZW4/IChCZWVuZGVuIFtxXXxMw7ZzY2hlbiBbZF18QmVhcmJlaXRlbiAiCisiW2VdKTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzNjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQ0EgcGF0aCBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkNBIFBmYWQgXCIlc1wiIGV4aXN0aWVydCBuaWNodCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDQ1Cittc2dpZCAiIgorIiAgICBUaGUgQ2MgbGlzdCBhYm92ZSBoYXMgYmVlbiBleHBhbmRlZCBieSBhZGRpdGlvbmFsXG4iCisiICAgIGFkZHJlc3NlcyBmb3VuZCBpbiB0aGUgcGF0Y2ggY29tbWl0IG1lc3NhZ2UuIEJ5IGRlZmF1bHRcbiIKKyIgICAgc2VuZC1lbWFpbCBwcm9tcHRzIGJlZm9yZSBzZW5kaW5nIHdoZW5ldmVyIHRoaXMgb2NjdXJzLlxuIgorIiAgICBUaGlzIGJlaGF2aW9yIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHNlbmRlbWFpbC5jb25maXJtXG4iCisiICAgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy5cbiIKKyJcbiIKKyIgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHJ1biAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJy5cbiIKKyIgICAgVG8gcmV0YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yLCBidXQgc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsXG4iCisiICAgIHJ1biAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiAgICBEaWUgQ2MtTGlzdGUgb2JlcmhhbGIgd3VyZGUgdW0genVzw6R0emxpY2hlIEFkcmVzc2VuIGVyd2VpdGVydCwgZGllIGluICIKKyJkZXJcbiIKKyIgICAgQ29tbWl0LUJlc2NocmVpYnVuZyBkZXMgUGF0Y2hlcyBnZWZ1bmRlbiB3dXJkZW4uIFdlbm4gZGllcyBwYXNzaWVydCwgIgorIndlcmRlblxuIgorIiAgICBTaWUgdm9uIHNlbmQtZW1haWwgenUgZWluZXIgRWluZ2FiZSBhdWZnZWZvcmRlcnQuIERpZXNlcyBWZXJoYWx0ZW4gd2lyZFxuIgorIiAgICBkdXJjaCBkaWUgS29uZmlndXJhdGlvbnNlaW5zdGVsbHVuZyBzZW5kZW1haWwuY29uZmlybSBnZXN0ZXVlcnQuXG4iCisiXG4iCisiICAgIEbDvHIgd2VpdGVyZSBJbmZvcm1hdGlvbmVuLCBmw7xocmVuIFNpZSAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJyBhdXMuXG4iCisiICAgIFVtIGRhcyBha3R1ZWxsZSBWZXJoYWx0ZW4gYmVpenViZWhhbHRlbiwgYWJlciBkaWVzZSBNZWxkdW5nIHp1ICIKKyJ1bnRlcmRyw7xja2VuLFxuIgorIiAgICBmw7xocmVuIFNpZSAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJyBhdXMuXG4iCisiXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0gW25dIFtlXSBbcV0gW2FdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjAKK21zZ2lkICJTZW5kIHRoaXMgZW1haWw/IChbeV1lc3xbbl1vfFtlXWRpdHxbcV11aXR8W2FdbGwpOiAiCittc2dzdHIgIiIKKyJEaWVzZSBFLU1haWwgdmVyc2VuZGVuPyAoSmEgW3ldfE5laW4gW25dfEJlYXJiZWl0ZW4gW2VdfEJlZW5kZW4gW3FdfEFsbGUgIgorIlthXSk6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDYzCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsIHJlcGx5IHJlcXVpcmVkIgorbXNnc3RyICJadW0gVmVyc2VuZGVuIGRpZXNlciBFLU1haWwgaXN0IGVpbmUgQW50d29ydCBlcmZvcmRlcmxpY2guIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0OTEKK21zZ2lkICJUaGUgcmVxdWlyZWQgU01UUCBzZXJ2ZXIgaXMgbm90IHByb3Blcmx5IGRlZmluZWQuIgorbXNnc3RyICJEZXIgZXJmb3JkZXJsaWNoZSBTTVRQLVNlcnZlciBpc3QgbmljaHQga29ycmVrdCBkZWZpbmllcnQuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1RBUlRUTFMhICVzIgorbXNnc3RyICJTZXJ2ZXIgdW50ZXJzdMO8dHp0IGtlaW4gU1RBUlRUTFMhICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDMgZ2l0LXNlbmQtZW1haWwucGVybDoxNTQ3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNUQVJUVExTIGZhaWxlZCEgJXMiCittc2dzdHIgIlNUQVJUVExTIGZlaGxnZXNjaGxhZ2VuISAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTU2Cittc2dpZCAiVW5hYmxlIHRvIGluaXRpYWxpemUgU01UUCBwcm9wZXJseS4gQ2hlY2sgY29uZmlnIGFuZCB1c2UgLS1zbXRwLWRlYnVnLiIKK21zZ3N0ciAiIgorIktvbm50ZSBTTVRQIG5pY2h0IGtvcnJla3QgaW5pdGlhbGlzaWVyZW4uIEJpdHRlIHByw7xmZW4gU2llIElocmUgIgorIktvbmZpZ3VyYXRpb25cbiIKKyJ1bmQgYmVudXR6ZW4gU2llIC0tc210cC1kZWJ1Zy4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gc2VuZCAlc1xuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTZW5kZW4gJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRyeS1TZW50ICVzXG4iCittc2dzdHIgIlByb2JldmVyc2FuZCAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VudCAlc1xuIgorbXNnc3RyICIlcyBnZXNlbmRldFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJEcnktT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICJQcm9iZXZlcnNhbmQgT0suIExvZyBlbnRow6RsdDpcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc5Cittc2dpZCAiT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICJPSy4gTG9nIGVudGjDpGx0OlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1OTEKK21zZ2lkICJSZXN1bHQ6ICIKK21zZ3N0ciAiRXJnZWJuaXM6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTk0Cittc2dpZCAiUmVzdWx0OiBPS1xuIgorbXNnc3RyICJFcmdlYm5pczogT0tcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAiS2FubiBEYXRlaSAlcyBuaWNodCDDtmZmbmVuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NTkgZ2l0LXNlbmQtZW1haWwucGVybDoxNjc5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihtYm94KSBGw7xnZSBjYzogaGluenU6ICVzIHZvbiBaZWlsZSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgRsO8Z2UgdG86IGhpbnp1OiAlcyB2b24gWmVpbGUgJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG5vbi1tYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihub24tbWJveCkgRsO8Z2UgY2M6IGhpbnp1OiAlcyB2b24gWmVpbGUgJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3NTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKGJvZHkpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKGJvZHkpIEbDvGdlIGNjOiBoaW56dTogJXMgdm9uIFplaWxlICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODY0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQ291bGQgbm90IGV4ZWN1dGUgJyVzJyIKK21zZ3N0ciAiKCVzKSBLb25udGUgJyVzJyBuaWNodCBhdXNmw7xocmVuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIKK21zZ3N0ciAiKCVzKSBGw7xnZSAlczogJXMgaGluenUgdm9uOiAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg3NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIGZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICclcyciCittc2dzdHIgIiglcykgRmVobGVyIGJlaW0gU2NobGllw59lbiBkZXIgUGlwZSBuYWNoICclcyciCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkwNQorbXNnaWQgImNhbm5vdCBzZW5kIG1lc3NhZ2UgYXMgN2JpdCIKK21zZ3N0ciAiS2FubiBOYWNocmljaHQgbmljaHQgYWxzIDdiaXQgdmVyc2VuZGVuLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTEzCittc2dpZCAiaW52YWxpZCB0cmFuc2ZlciBlbmNvZGluZyIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgVHJhbnNmZXItRW5jb2RpbmciCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NCBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwMDYgZ2l0LXNlbmQtZW1haWwucGVybDoyMDE2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJrb25udGUgJXMgbmljaHQgw7ZmZm5lbjogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTU3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBjb250YWlucyBhIGxpbmUgbG9uZ2VyIHRoYW4gOTk4IGNoYXJhY3RlcnMiCittc2dzdHIgIiVzOiBQYXRjaCBlbnRow6RsdCBlaW5lIFplaWxlLCBkaWUgbMOkbmdlciBhbHMgOTk4IFplaWNoZW4gaXN0IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgJXMgd2l0aCBiYWNrdXAgc3VmZml4ICclcycuXG4iCittc2dzdHIgIkxhc3NlICVzIG1pdCBCYWNrdXAtU3VmZml4ICclcycgYXVzLlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk3OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAlcz8gW3l8Tl06ICIKK21zZ3N0ciAiV29sbGVuIFNpZSAlcyB3aXJrbGljaCB2ZXJzZW5kZW4/IFt5fE5dOiAiCmRpZmYgLS1naXQgYS9wby9lbC5wbyBiL3BvL2VsLnBvCmluZGV4IDM2MzRiYTQuLjcwM2Y0NmQgMTAwNjQ0Ci0tLSBhL3BvL2VsLnBvCisrKyBiL3BvL2VsLnBvCkBAIC0xLDIwMDUgKzEsMjE0NjggQEAKLSMgVHJhbnNsYXRpb24gb2YgZ2l0LWd1aSB0byBHcmVlawotIyBDb3B5cmlnaHQgKEMpIDIwMDkgSmltbXkgQW5nZWxha29zCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtZ3VpIHBhY2thZ2UuCi0jIEppbW15IEFuZ2VsYWtvcyA8dnlydXNzQGhlbGx1Zy5ncj4sIDIwMDkuCisjIEdyZWVrIHRyYW5zbGF0aW9ucyBmb3IgR2l0LgorIyBDb3B5cmlnaHQgKEMpIDIwMTkgSmltbXkgQW5nZWxha29zIDx2eXJ1c3NAaGVsbHVnLmdyPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjCisjIEdyZWVrIHRyYW5zbGF0aW9ucyBvZiBjb21tb24gR2l0IHdvcmRzIHVzZWQgaW4gdGhpcyBmaWxlOgorIworIyAgIEVuZ2xpc2ggICAgICAgICAgfCAgR3JlZWsKKyMgICAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAzLXdheSBtZXJnZSAgICAgIHwgIM+Ez4HOuc+AzrvOriDPg8+FzrPPh8+Ozr3Otc+Fz4POtworIyAgICNOTiAgICAgICAgICAgICAgfCAgz4XPgCcgzrHPgS4gTk4KKyMgICBhbWVuZCAgICAgICAgICAgIHwgIM+Ez4HOv8+Azr/PgM6/zrnPjgorIyAgIGFyY2hpdmUgICAgICAgICAgfCAgzrHPgc+HzrXOuc6/zrjOrs66zrcKKyMgICBiYWNrd2FyZCAgICAgICAgIHwKKyMgICAgIGNvbXBhdGliaWxpdHkgIHwgIM+Dz4XOvM6yzrHPhM+Mz4TOt8+EzrEgz4DPgc6/z4Igz4TOsSDPgM6vz4PPiQorIyAgIGJhcmUgcmVwb3NpdG9yeSAgfCAgzrPPhc68zr3PjCDOsc+Azr/OuM61z4TOrs+BzrnOvworIyAgIGJpc2VjdCAgICAgICAgICAgfCAgzrTOuc+Hzr/PhM6/zrzPjgorIyAgIGJyYW5jaCAgICAgICAgICAgfCAgzrrOu86szrTOv8+CCisjICAgYnVnICAgICAgICAgICAgICB8ICDPg8+GzqzOu868zrEKKyMgICBidW5kbGUgICAgICAgICAgIHwgIM60zrXPg868zq/OtM6xCisjICAgYnlwYXNzICAgICAgICAgICB8ICDPgM6xz4HOsc66zqzOvM+Az4TPiQorIyAgIChhKSBjaGVja291dCAgICAgfCAgzrXOvs6xzrPPic6zzq4KKyMgICAodG8pIGNoZWNrb3V0ICAgIHwgIM61zr7OrM6zz4kKKyMgICBjaGVycnktcGljayAgICAgIHwgIM61z4DOuc67zrXOus+EzrnOus6uIM60zrnOsc67zr/Os86uCisjICAgKGEpIGNvbW1pdCAgICAgICB8ICDOvM65zrEgz4XPgM6/zrLOv867zq4KKyMgICAodG8pIGNvbW1pdCAgICAgIHwgIM+Fz4DOv86yzqzOu867z4kKKyMgICBjb21taXQtaXNoICAgICAgIHwgIM+Fz4DOv86yzr/Ou86uIM6uIM+GzrHOuc69zr/OvM61zr3Ouc66zq4KKyMgICBjb25maWcgZmlsZSAgICAgIHwgIM6xz4HPh861zq/OvyDPgc+FzrjOvM6vz4POtc+Jzr0KKyMgICBjb25mbGljdCAgICAgICAgIHwgIM+Dz43Os866z4HOv8+Fz4POtworIyAgIGRhbmdsaW5nICAgICAgICAgfCAgzrXOus66z4HOtc68zq3PggorIyAgICh0bykgZGVidWcgICAgICAgfCAgzrHPgM6/z4PPhs6xzrvOvM6xz4TPjs69z4kKKyMgICBkZWJ1Z2dpbmcgICAgICAgIHwgIM6xz4DOv8+Dz4bOsc67zrzOrM+Ez4nPg863CisjICAgZGVmbGF0ZSAgICAgICAgICB8ICDOsc+Azr/Pg8+FzrzPgM65zq3Ots+JCisjICAgZGlyZWN0b3J5ICAgICAgICB8ICDPhs6szrrOtc67zr/PggorIyAgIGRpdmVyZ2UgICAgICAgICAgfCAgzrHPgM6/zrrOu86vzr3PiQorIyAgIGVkaXRvciAgICAgICAgICAgfCAgzrTOuc6/z4HOuM+Jz4TOrs+CCisjICAgZW50cnkgICAgICAgICAgICB8ICDPg8+Ezr/Ouc+HzrXOr86/CisjICAgZmFzdC1mb3J3YXJkICAgICB8ICDPhM6xz4fOtc6vzrEgz4DPgc6/z47OuM63z4POtworIyAgIGZhc3QtZm9yd2FyZGVkICAgfCAgz4TOsc+Hzq3Pic+CIM+Az4HOv8+JzrjOt868zq3Ovc6/CisjICAgKGEpIGZldGNoICAgICAgICB8ICDOsc69zqzOus+EzrfPg863CisjICAgKHRvKSBmZXRjaCAgICAgICB8ICDOsc69zrHOus+Ez44KKyMgICBmaXggY29uZmxpY3RzICAgIHwgIM61z4DOr867z4XPg863IM+Dz4XOs866z4HOv8+Nz4POtc+Jzr0KKyMgICAodG8pIGZvcm1hdCAgICAgIHwgIM68zr/Pgc+Gzr/PgM6/zrnPjgorIyAgIGdsb2IgICAgICAgICAgICAgfCAgzrHOvc+EzrnOus6xz4TOrM+Dz4TOsc+DzrcgzrzOtc+EzrHPh86xz4HOsc66z4TOrs+Bz4nOvQorIyAgIGhhc2ggICAgICAgICAgICAgfCAgz4PPhc68zrLOv867zr/Pg861zrnPgc6sCisjICAgSEVBRCAgICAgICAgICAgICB8ICBIRUFEICjOv8+FzrTOrc+EzrXPgc6/KQorIyAgIGhvb2sgICAgICAgICAgICAgfCAgzqzOs866zrnPg8+Ez4HOvworIyAgIGh1bmsgICAgICAgICAgICAgfCAgzrHOu867zrHOs86uCisjICAgaW5jb25zaXN0ZW5jeSAgICB8ICDOsc69z4TOr8+GzrHPg863CisjICAgKHRvKSBpbmZsYXRlICAgICB8ICDOsc+Azr/Pg8+FzrzPgM65zq3Ots+JCisjICAgKGEpIGxpc3QgICAgICAgICB8ICDPgM6xz4HOrM64zrXPg863CisjICAgKHRvKSBsaXN0ICAgICAgICB8ICDPgM6xz4HOsc64zq3PhM+JCisjICAgbWFwcGluZyAgICAgICAgICB8ICDOsc69z4TOuc+Dz4TOv86vz4fOuc+DzrcKKyMgICBtaXNtYXRjaCAgICAgICAgIHwgIM6xz4PPhc68z4bPic69zq/OsQorIyAgIG1lcmdlICAgICAgICAgICAgfCAgz4PPhc6zz4fPjs69zrXPhc+DzrcKKyMgICBwYWNrICAgICAgICAgICAgIHwgIM+AzrHOus6tz4TOvworIyAgIHBhdGNoZXMgICAgICAgICAgfCAgzrTOuc6/z4HOuM+Oz4POtc65z4IKKyMgICBwYXRoICAgICAgICAgICAgIHwgIM60zrnOsc60z4HOv868zq4KKyMgICBwYXRoc3BlYyAgICAgICAgIHwgIM+AzrXPgc65zrPPgc6xz4bOriDOtM65zrHOtM+Bzr/OvM6uz4IKKyMgICBwYXR0ZXJuICAgICAgICAgIHwgIM68zr/PhM6vzrLOvworIyAgICh0bykgcHJ1bmUgICAgICAgfCAgzrrOu86xzrTOtc+Nz4kKKyMgICAoYSkgcHVsbCAgICAgICAgIHwgIM61zr3Pg8+JzrzOrM+Ez4nPg863CisjICAgKHRvKSBwdWxsICAgICAgICB8ICDOtc69z4PPic68zrHPhM+Ozr3PiQorIyAgIChhKSBwdXNoICAgICAgICAgfCAgzrTOt868zr/Pg86vzrXPhc+DzrcKKyMgICAodG8pIHB1c2ggICAgICAgIHwgIM60zrfOvM6/z4POuc61z43PiQorIyAgIHRyYWlsZXJzICAgICAgICAgfCAgz4XPgM6/z4POt868zrXOuc+Oz4POtc65z4IKKyMgICByZXBvc2l0b3J5ICAgICAgIHwgIM6xz4DOv864zrXPhM6uz4HOuc6/CisjICAgcmVtb3RlICAgICAgICAgICB8ICDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OvyAozq4gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr/PgiDOtc6+z4XPgM63z4HOtc+EzrfPhM6uz4IpCisjICAgcmVzZXQgICAgICAgICAgICB8ICDOtc+AzrHOvc6xz4bOrc+Bz4kKKyMgICByZXNvbHZlICAgICAgICAgIHwgIM61z4DOuc67z43PiSAqzq4qIM+EzrHPhc+Ezq/Ots+JCisjICAgcmVzdG9yZSAgICAgICAgICB8ICDOsc+Azr/Ous6xzrjOuc+Dz4TPjgorIyAgIHJldmlzaW9uICAgICAgICAgfCAgzq3Ous60zr/Pg863CisjICAgc2hhbGxvdyAgICAgICAgICB8ICDPgc63z4fPjAorIyAgIHNoZWxsICAgICAgICAgICAgfCAgzrrOrc67z4XPhs6/z4IKKyMgICBzcXVhc2ggICAgICAgICAgIHwgIM+Dz4XOvM+Az4TPjc+Dz4PPiS/Pg8+NzrzPgM+Ez4XOvs63CisjICAgc3Rhc2ggICAgICAgICAgICB8ICDOsc+Azr/OuM63zrrOtc+FzrzOrc69zrEKKyMgICAodG8pIHN0YWdlICAgICAgIHwgIM+Az4HOv861z4TOv865zrzOrM62z4kKKyMgICAodG8pIHN0YXNoICAgICAgIHwgIM6xz4DOv864zrfOus61z43PiQorIyAgIHN0cmVhbSAgICAgICAgICAgfCAgz4HOv86uCisjICAgc3VibW9kdWxlICAgICAgICB8ICDPhc+Azr/Otc69z4zPhM63z4TOsQorIyAgIHRhZyAgICAgICAgICAgICAgfCAgzrXPhM65zrrOrc+EzrEKKyMgICB0ZW1wbGF0ZSAgICAgICAgIHwgIM+Az4HPjM+Ez4XPgM6/CisjICAgdGhyZWFkICAgICAgICAgICB8ICDOvc6uzrzOsQorIyAgIHRpbWVzdGFtcCAgICAgICAgfCAgz4fPgc6/zr3Ov8+Dzq7OvM6xzr3Pg863CisjICAgKHRvKSB0cmFjayAgICAgICB8ICDPgM6xz4HOsc66zr/Ou86/z4XOuM+OCisjICAgdHJlZSAgICAgICAgICAgICB8ICDOtM6tzr3PhM+Bzr8KKyMgICB0cmVlLWlzaCAgICAgICAgIHwgIM60zq3Ovc+Ez4HOvyDOriDPhs6xzrnOvc6/zrzOtc69zrnOus+MCisjICAgdW5zdGFnZSAgICAgICAgICB8ICDOsc+Azr/PgM+Bzr/Otc+Ezr/Ouc68zqzOts+JCisjICAgdXBzdHJlYW0gICAgICAgICB8ICDPgM+Bzr/PgiDPhM63zr0gz4DOt86zzq4KKyMgICB2aWV3ZXIgICAgICAgICAgIHwgIM+Az4HPjM6zz4HOsc68zrzOsSDPgM+Bzr/Oss6/zrvOrs+CCisjICAgd29ya3RyZWUgLyAgICAgICB8CisjICAgd29yayhpbmcpIHRyZWUgICB8ICDOtM6tzr3PhM+Bzr8gzrXPgc6zzrHPg86vzrHPggorIyBKaW1teSBBbmdlbGFrb3MgPHZ5cnVzc0BoZWxsdWcuZ3I+LCAyMDE5LgorIwogbXNnaWQgIiIKIG1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZWxcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMDgtMDMtMTQgMDc6MTgrMDEwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDYtMjMgMjE6MzMrMDMwMFxuIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTktMDItMTUgMTA6MDkrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTktMDItMTUgMDI6MTArMDAwMFxuIgogIkxhc3QtVHJhbnNsYXRvcjogSmltbXkgQW5nZWxha29zIDx2eXJ1c3NAaGVsbHVnLmdyPlxuIgotIkxhbmd1YWdlLVRlYW06IEdyZWVrIDxpMThuQGxpc3RzLmhlbGx1Zy5ncj5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHcmVlaywgTW9kZXJuICgxNDUzLSkgPHZ5cnVzc0BoZWxsdWcuZ3I+XG4iCisiTGFuZ3VhZ2U6IGVsXG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iWC1HZW5lcmF0b3I6IExva2FsaXplIDAuM1xuIgogIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgogCi0jOiBnaXQtZ3VpLnNoOjQxIGdpdC1ndWkuc2g6NjM0IGdpdC1ndWkuc2g6NjQ4IGdpdC1ndWkuc2g6NjYxIGdpdC1ndWkuc2g6NzQ0Ci0jOiBnaXQtZ3VpLnNoOjc2MwotbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgotbXNnc3RyICJnaXQtZ3VpOiDOus+Bzq/Pg865zrzOvyDPg8+GzqzOu868zrEiCisjOiBhZHZpY2UuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNoaW50OiAlLipzJXNcbiIKK21zZ3N0ciAiJXPOvc+Nzr7OtzogJS4qcyVzXG4iCiAKLSM6IGdpdC1ndWkuc2g6NTkzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCi1tc2dzdHIgIs6czrcgzq3Os866z4XPgc63IM6zz4HOsc68zrzOsc+Ezr/Pg861zrnPgc6sIM+Dz4TOvyAlczoiCisjOiBhZHZpY2UuYzoxNTQKK21zZ2lkICJDaGVycnktcGlja2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKyLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ez4wgzr3OsSDOs86vzr3Otc65IM61z4DOuc67zrXOus+EzrnOus6uIM60zrnOsc67zr/Os86uIM61z4DOtc65zrTOriDOrc+HzrXPhM61IM68zrcgz4PPhc6zz4fPic69zrXPhc68zq3Ovc6xICIKKyLOsc+Bz4fOtc6vzrEuIgogCi0jOiBnaXQtZ3VpLnNoOjYyMAotbXNnaWQgIk1haW4gRm9udCIKLW1zZ3N0ciAizprPjc+BzrnOsSDOk8+BzrHOvM68zrHPhM6/z4POtc65z4HOrCIKKyM6IGFkdmljZS5jOjE1NgorbXNnaWQgIkNvbW1pdHRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ez4wgzr3OsSDOs86vzr3Otc65IM+Fz4DOv86yzr/Ou86uIM61z4DOtc65zrTOriDOrc+HzrXPhM61IM68zrcgz4PPhc6zz4fPic69zrXPhc68zq3Ovc6xIM6xz4HPh861zq/OsS4iCiAKLSM6IGdpdC1ndWkuc2g6NjIxCi1tc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCi1tc2dzdHIgIs6Tz4HOsc68zrzOsc+Ezr/Pg861zrnPgc6sIM6UzrnOsc+Gzr/Pgc6sz4IvzprOv869z4PPjM67zrHPgiIKKyM6IGFkdmljZS5jOjE1OAorbXNnaWQgIk1lcmdpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisizpTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM+MIM69zrEgzrPOr869zrXOuSDPg8+FzrPPh8+Ozr3Otc+Fz4POtyDOtc+AzrXOuc60zq4gzq3Ph861z4TOtSDOvM63IM+Dz4XOs8+Hz4nOvc61z4XOvM6tzr3OsSDOsc+Bz4fOtc6vzrEuIgogCi0jOiBnaXQtZ3VpLnNoOjYzNQotbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKLW1zZ3N0ciAizpTOtSDOss+Bzq3OuM63zrrOtSDPhM6/IGdpdCDPg8+Ezr8gUEFUSC4iCisjOiBhZHZpY2UuYzoxNjAKK21zZ2lkICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIs6UzrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TPjCDOvc6xIM6zzq/Ovc61zrkgzrXOvc+Dz4nOvM6sz4TPic+DzrcgzrXPgM61zrnOtM6uIM6tz4fOtc+EzrUgzrzOtyDPg8+FzrPPh8+Jzr3Otc+FzrzOrc69zrEgzrHPgc+HzrXOr86xLiIKIAotIzogZ2l0LWd1aS5zaDo2NjIKLW1zZ2lkICJDYW5ub3QgcGFyc2UgR2l0IHZlcnNpb24gc3RyaW5nOiIKLW1zZ3N0ciAizpHOtM+Nzr3Osc+EzrcgzrcgzrHOvc6szrPOvc+Jz4POtyDPg8+Ezr/Ouc+HzrXOuc6/z4POtc65z4HOrM+CIM6tzrrOtM6/z4POt8+CIEdpdDoiCisjOiBhZHZpY2UuYzoxNjIKK21zZ2lkICJSZXZlcnRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisizpTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM+MIM69zrEgzrPOr869zrXOuSDOtc+AzrHOvc6xz4bOv8+BzqwgzrXPgM61zrnOtM6uIM6tz4fOtc+EzrUgzrzOtyDPg8+FzrPPh8+Jzr3Otc+FzrzOrc69zrEgzrHPgc+HzrXOr86xLiIKIAotIzogZ2l0LWd1aS5zaDo2ODAKLSMsIHRjbC1mb3JtYXQKKyM6IGFkdmljZS5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJJdCBpcyBub3QgcG9zc2libGUgdG8gJXMgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIs6UzrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TPjCDOvc6xIM6zzq/Ovc61zrkgJXMgzrXPgM61zrnOtM6uIM6tz4fOtc+EzrUgzrzOtyDPg8+FzrPPh8+Jzr3Otc+FzrzOrc69zrEgzrHPgc+HzrXOr86xLiIKKworIzogYWR2aWNlLmM6MTcyCiBtc2dpZCAiIgotIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgotIlxuIgotIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCi0iXG4iCi0iJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgotIlxuIgotIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCisiRml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIgogbXNnc3RyICIiCi0izpTOtSDOvM+Azr/Pgc61zq8gzr3OsSDOsc69zrnPh869zrXPhc+EzrXOryDOtyDOrc66zrTOv8+Dzrcgz4TOv8+FIEdpdC4gXG4iCi0iXG4iCi0izqTOvyAlcyDPhc+Azr/Pg8+EzrfPgc6vzrbOtc65IM+Az4nPgiDOtc6vzr3Osc65IM63IM6tzrrOtM6/z4POtyAnJXMnLlxuIgotIlxuIgotIs6kzr8gJXMgIM6xz4DOsc65z4TOtc6vIM+Ezr/Phc67zqzPh865z4PPhM6/zr0gR2l0IDEuNS4wIM6uIM+AzrnPjCDPgM+Bz4zPg8+GzrHPhM63LlxuIgotIlxuIgotIs6dzrEgz4XPgM6/z4TOtc64zrXOryDPgM+Jz4Igz4TOvyAnJXMnIM61zq/Ovc6xzrkgzrcgzq3Ous60zr/Pg863IDEuNS4wO1xuIgorIs6mz4TOuc6szr7PhM61IM+EzrEgz4PPhM6/IM60zq3Ovc+Ez4HOvyDOtc+BzrPOsc+Dzq/Osc+CLCDOus6xzrkgzrzOtc+Ezqwgz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSAnZ2l0IGFkZC9ybSAiCisiPM6xz4HPh861zq/Ovz4nXG4iCisizq3PhM+Dzrkgz47Pg8+EzrUgzr3OsSDOtc+AzrnPg863zrzOrM69zrXPhM61IM+EzrfOvSDOtc+Azq/Ou8+Fz4POtyDOus6xzrkgzr3OsSDOus6szr3Otc+EzrUgzrzOr86xIM+Fz4DOv86yzr/Ou86uLiIKIAotIzogZ2l0LWd1aS5zaDo5MTgKLW1zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCi1tc2dzdHIgIs6UzrUgzrLPgc6tzrjOt866zrUgz4bOrM66zrXOu86/z4IgR2l0OiIKKyM6IGFkdmljZS5jOjE4MAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiBhbiB1bnJlc29sdmVkIGNvbmZsaWN0LiIKK21zZ3N0ciAizojOvs6/zrTOv8+CIM67z4zOs8+JIM6xzr3Otc+Azq/Ou8+Fz4TOt8+CIM+Dz43Os866z4HOv8+Fz4POt8+CLiIKIAotIzogZ2l0LWd1aS5zaDo5MjUKLW1zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgotbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgzrzOtc+EzrHOus6vzr3Ot8+Dzrcgz4PPhM63zr0gzrrOv8+Bz4XPhs6uIM+Ezr/PhSDPhs6xzrrOrc67zr/PhSDOtc+BzrPOsc+Dzq/Osc+COiIKKyM6IGFkdmljZS5jOjE4NSBidWlsdGluL21lcmdlLmM6MTI5MAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAizpTOtc69IM6tz4fOtc+EzrUgzr/Ou86/zrrOu863z4HPjs+DzrXOuSDPhM63IM+Dz4XOs8+Hz47Ovc61z4XPg86uIM+DzrHPgiAozqXPgM6sz4HPh861zrkgz4TOvyBNRVJHRV9IRUFEKS4iCiAKLSM6IGdpdC1ndWkuc2g6OTMyCi1tc2dpZCAiQ2Fubm90IHVzZSBmdW5ueSAuZ2l0IGRpcmVjdG9yeToiCi1tc2dzdHIgIs6UzrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDPh8+Bzq7Pg863IM+AzrXPgc6vzrXPgc6zzr/PhSDPhs6xzrrOrc67zr/PhSAuZ2l0OiIKKyM6IGFkdmljZS5jOjE4NworbXNnaWQgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgbWVyZ2luZy4iCittc2dzdHIgIs6gzrHPgc6xzrrOsc67z44sIM+Fz4DOv86yzqzOu861z4TOtSDPhM65z4IgzrHOu867zrHOs86tz4Igz4POsc+CIM+Az4HOuc69IM+Dz4XOs8+Hz4nOvc61z43Pg861z4TOtS4iCiAKLSM6IGdpdC1ndWkuc2g6OTM3Ci1tc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCi1tc2dzdHIgIs6UzrXOvSDPhc+AzqzPgc+HzrXOuSDPhs6szrrOtc67zr/PgiDOtc+BzrPOsc+Dzq/Osc+CIgorIzogYWR2aWNlLmM6MTg4Cittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIHVuZmluaXNoZWQgbWVyZ2UuIgorbXNnc3RyICLOiM6+zr/OtM6/z4IgzrvPjM6zz4kgzrzOtyDOv867zr/Ous67zrfPgc+JzrzOrc69zrfPgiDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CLiIKIAotIzogZ2l0LWd1aS5zaDoxMDg0IGxpYi9jaGVja291dF9vcC50Y2w6MjgzCi1tc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKLW1zZ3N0ciAizpHOvc6xzr3Orc+Jz4POtyDOus6xz4TOrM+Dz4TOsc+DzrfPgiDOsc+Bz4fOtc6vzr/PhS4uLiIKLQotIzogZ2l0LWd1aS5zaDoxMTQ5Ci1tc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKLW1zZ3N0ciAizpHOvc6vz4fOvc61z4XPg863IM6zzrnOsSDPhM+Bzr/PgM6/z4DOv865zrfOvM6tzr3OsSDOsc+Bz4fOtc6vzrEuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MTMyNCBsaWIvYnJvd3Nlci50Y2w6MjQ2Ci1tc2dpZCAiUmVhZHkuIgotbXNnc3RyICLOiM+Ezr/Ouc68zr8uIgotCi0jOiBnaXQtZ3VpLnNoOjE1OTAKLW1zZ2lkICJVbm1vZGlmaWVkIgotbXNnc3RyICLOnM63IM+Ez4HOv8+Azr/PgM6/zrnOt868zq3Ovc6/IgotCi0jOiBnaXQtZ3VpLnNoOjE1OTIKLW1zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAizqTPgc6/z4DOv8+Azr/Ouc63zrzOrc69zr8sIM68zrcgz4PPhM6xzrTOuc6/z4DOv865zrfOvM6tzr3OvyIKLQotIzogZ2l0LWd1aS5zaDoxNTkzIGdpdC1ndWkuc2g6MTU5OAotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICLOo8+EzrHOtM65zr/PgM6/zrnOt868zq3Ovc6/IM+Az4HOv8+CIM+Fz4DOv86yzr/Ou86uIgotCi0jOiBnaXQtZ3VpLnNoOjE1OTQgZ2l0LWd1aS5zaDoxNTk5Ci1tc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIs6czq3Pgc63IM+Dz4TOsc60zrnOv8+Azr/Ouc63zrzOrc69zrEgz4DPgc6/z4Igz4XPgM6/zrLOv867zq4iCi0KLSM6IGdpdC1ndWkuc2g6MTU5NSBnaXQtZ3VpLnNoOjE2MDAKLW1zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyIKLW1zZ3N0ciAizqPPhM6xzrTOuc6/z4DOv865zrfOvM6tzr3OvyDPgM+Bzr/PgiDPhc+Azr/Oss6/zrvOriwgzrvOtc6vz4DOtc65IgotCi0jOiBnaXQtZ3VpLnNoOjE1OTcKLW1zZ2lkICJVbnRyYWNrZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIs6czrcgz4DOsc+BzrHOus6/zrvOv8+FzrjOv8+NzrzOtc69zr8sIM68zrcgz4PPhM6xzrTOuc6/z4DOv865zrfOvM6tzr3OvyIKLQotIzogZ2l0LWd1aS5zaDoxNjAyCi1tc2dpZCAiTWlzc2luZyIKLW1zZ3N0ciAizpvOtc6vz4DOtc65IgotCi0jOiBnaXQtZ3VpLnNoOjE2MDMKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCi1tc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Ouc63zrzOrc69zr8gz4DPgc6/z4IgzrHPhs6xzq/Pgc61z4POtyIKLQotIzogZ2l0LWd1aS5zaDoxNjA0Ci1tc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgotbXNnc3RyICLOo8+EzrHOtM65zr/PgM6/zrnOt868zq3Ovc6/IM+Az4HOv8+CIM6xz4bOsc6vz4HOtc+DzrcsIM6xzrrPjM68zrEgz4DOsc+Bz4zOvSIKLQotIzogZ2l0LWd1aS5zaDoxNjA2IGdpdC1ndWkuc2g6MTYwNyBnaXQtZ3VpLnNoOjE2MDggZ2l0LWd1aS5zaDoxNjA5Ci1tc2dpZCAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiIKLW1zZ3N0ciAizpHPgM6xzrnPhM61zq8gzrXPgM6vzrvPhc+Dzrcgz4PPhc6zz4fPjs69zrXPhc+DzrfPgiIKLQotIzogZ2l0LWd1aS5zaDoxNjQ0Ci1tc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAizpPOr869zrXPhM6xzrkgzrXOus66zq/Ovc63z4POtyDPhM6/z4UgZ2l0ay4uLiDPgM6xz4HOsc66zrHOu8+OIM+AzrXPgc65zrzOrc69zrXPhM61Li4uIgotCi0jOiBnaXQtZ3VpLnNoOjE2NTMKLSMsIHRjbC1mb3JtYXQKKyM6IGFkdmljZS5jOjE5NAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVW5hYmxlIHRvIHN0YXJ0IGdpdGs6XG4iCisiTm90ZTogY2hlY2tpbmcgb3V0ICclcycuXG4iCiAiXG4iCi0iJXMgZG9lcyBub3QgZXhpc3QiCi1tc2dzdHIgIiIKLSLOkc60z4XOvc6xzrzOr86xIM61zrrOus6vzr3Ot8+DzrfPgiDPhM6/z4UgZ2l0azpcbiIKKyJZb3UgYXJlIGluICdkZXRhY2hlZCBIRUFEJyBzdGF0ZS4gWW91IGNhbiBsb29rIGFyb3VuZCwgbWFrZSBleHBlcmltZW50YWxcbiIKKyJjaGFuZ2VzIGFuZCBjb21taXQgdGhlbSwgYW5kIHlvdSBjYW4gZGlzY2FyZCBhbnkgY29tbWl0cyB5b3UgbWFrZSBpbiB0aGlzXG4iCisic3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHBlcmZvcm1pbmcgYW5vdGhlciBjaGVja291dC5cbiIKICJcbiIKLSLOpM6/ICVzIM60zrXOvSDPhc+AzqzPgc+HzrXOuSIKLQotIzogZ2l0LWd1aS5zaDoxODYwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKLW1zZ2lkICJSZXBvc2l0b3J5IgotbXNnc3RyICLOkc+Azr/OuM61z4TOrs+BzrnOvyIKLQotIzogZ2l0LWd1aS5zaDoxODYxCi1tc2dpZCAiRWRpdCIKLW1zZ3N0ciAizpXPgM61zr7Otc+BzrPOsc+Dzq/OsSIKLQotIzogZ2l0LWd1aS5zaDoxODYzIGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKLW1zZ2lkICJCcmFuY2giCi1tc2dzdHIgIs6azrvOrM60zr/PgiIKLQotIzogZ2l0LWd1aS5zaDoxODY2IGxpYi9jaG9vc2VfcmV2LnRjbDo1NDgKLW1zZ2lkICJDb21taXRAQG5vdW4iCi1tc2dzdHIgIs6lz4DOv86yzr/Ou86uQEBub3VuIgotCi0jOiBnaXQtZ3VpLnNoOjE4NjkgbGliL21lcmdlLnRjbDoxMjAgbGliL21lcmdlLnRjbDoxNDkgbGliL21lcmdlLnRjbDoxNjcKLW1zZ2lkICJNZXJnZSIKLW1zZ3N0ciAizqPPhc6zz4fPjs69zrXPhc+DzrciCi0KLSM6IGdpdC1ndWkuc2g6MTg3MCBsaWIvY2hvb3NlX3Jldi50Y2w6NTU3Ci1tc2dpZCAiUmVtb3RlIgotbXNnc3RyICLOkc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OvyIKLQotIzogZ2l0LWd1aS5zaDoxODc5Ci1tc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCi1tc2dzdHIgIs6gzrXPgc65zq7Os863z4POtyDOkc+Bz4fOtc6vz4nOvSDOpM+Bzq3Ph86/zr3PhM6xIM6azrvOrM60zr/PhSIKLQotIzogZ2l0LWd1aS5zaDoxODgzCi1tc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKLW1zZ3N0ciAizqDOtc+BzrnOrs6zzrfPg863IM6Rz4HPh861zq/Pic69IM6azrvOrM60zr/PhS4uLiIKLQotIzogZ2l0LWd1aS5zaDoxODg4Ci1tc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKLW1zZ3N0ciAizpHPgM61zrnOus+Mzr3Ouc+DzrcgzpnPg8+Ezr/Pgc65zrrOv8+NIM6kz4HOrc+Hzr/Ovc+EzrEgzprOu86szrTOv8+FIgotCi0jOiBnaXQtZ3VpLnNoOjE4OTIKLW1zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgotbXNnc3RyICLOkc+AzrXOuc66z4zOvc65z4POtyDOmc+Dz4TOv8+BzrnOus6/z40gzozOu8+Jzr0gz4TPic69IM6azrvOrM60z4nOvSIKLQotIzogZ2l0LWd1aS5zaDoxODk5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCi1tc2dzdHIgIs6gzrXPgc65zq7Os863z4POtyDOkc+Bz4fOtc6vz4nOvSDPhM6/z4UgJXMiCi0KLSM6IGdpdC1ndWkuc2g6MTkwMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCi1tc2dzdHIgIs6Rz4DOtc65zrrPjM69zrnPg863IM6Zz4PPhM6/z4HOuc66zr/PjSDPhM6/z4UgJXMiCi0KLSM6IGdpdC1ndWkuc2g6MTkwNiBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKLW1zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgotbXNnc3RyICLOo8+EzrHPhM65z4PPhM65zrrOrCDOks6sz4POt8+CIM6UzrXOtM6/zrzOrc69z4nOvSIKLQotIzogZ2l0LWd1aS5zaDoxOTA5IGxpYi9kYXRhYmFzZS50Y2w6MzQKLW1zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKLW1zZ3N0ciAizqPPhc68z4DOr861z4POtyDOks6sz4POt8+CIM6UzrXOtM6/zrzOrc69z4nOvSIKLQotIzogZ2l0LWd1aS5zaDoxOTEyCi1tc2dpZCAiVmVyaWZ5IERhdGFiYXNlIgotbXNnc3RyICLOlc+AzrHOu86uzrjOtc+Fz4POtyDOks6sz4POt8+CIM6UzrXOtM6/zrzOrc69z4nOvSIKLQotIzogZ2l0LWd1aS5zaDoxOTE5IGdpdC1ndWkuc2g6MTkyMyBnaXQtZ3VpLnNoOjE5MjcgbGliL3Nob3J0Y3V0LnRjbDo3Ci0jOiBsaWIvc2hvcnRjdXQudGNsOjM5IGxpYi9zaG9ydGN1dC50Y2w6NzEKLW1zZ2lkICJDcmVhdGUgRGVza3RvcCBJY29uIgotbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsSDOlc65zrrOv869zrnOtM6vzr/PhSDOlc+AzrnPhs6szr3Otc65zrHPgiDOlc+BzrPOsc+Dzq/Osc+CIgotCi0jOiBnaXQtZ3VpLnNoOjE5MzIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxNzcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODUKLW1zZ2lkICJRdWl0IgotbXNnc3RyICLOiM6+zr/OtM6/z4IiCi0KLSM6IGdpdC1ndWkuc2g6MTkzOQotbXNnaWQgIlVuZG8iCi1tc2dzdHIgIs6Rzr3Osc6vz4HOtc+DzrciCi0KLSM6IGdpdC1ndWkuc2g6MTk0MgotbXNnaWQgIlJlZG8iCi1tc2dzdHIgIs6ezrHOvc6sIgotCi0jOiBnaXQtZ3VpLnNoOjE5NDYgZ2l0LWd1aS5zaDoyNDQzCi1tc2dpZCAiQ3V0IgotbXNnc3RyICLOkc+Azr/Ous6/z4DOriIKLQotIzogZ2l0LWd1aS5zaDoxOTQ5IGdpdC1ndWkuc2g6MjQ0NiBnaXQtZ3VpLnNoOjI1MjAgZ2l0LWd1aS5zaDoyNjE0Ci0jOiBsaWIvY29uc29sZS50Y2w6NjkKLW1zZ2lkICJDb3B5IgotbXNnc3RyICLOkc69z4TOuc6zz4HOsc+Gzq4iCi0KLSM6IGdpdC1ndWkuc2g6MTk1MiBnaXQtZ3VpLnNoOjI0NDkKLW1zZ2lkICJQYXN0ZSIKLW1zZ3N0ciAizpXPgM65zrrPjM67zrvOt8+DzrciCi0KLSM6IGdpdC1ndWkuc2g6MTk1NSBnaXQtZ3VpLnNoOjI0NTIgbGliL2JyYW5jaF9kZWxldGUudGNsOjI2Ci0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM4Ci1tc2dpZCAiRGVsZXRlIgotbXNnc3RyICLOlM65zrHOs8+BzrHPhs6uIgotCi0jOiBnaXQtZ3VpLnNoOjE5NTkgZ2l0LWd1aS5zaDoyNDU2IGdpdC1ndWkuc2g6MjYxOCBsaWIvY29uc29sZS50Y2w6NzEKLW1zZ2lkICJTZWxlY3QgQWxsIgotbXNnc3RyICLOlc+AzrnOu86/zrPOriDOjM67z4nOvSIKLQotIzogZ2l0LWd1aS5zaDoxOTY4Ci1tc2dpZCAiQ3JlYXRlLi4uIgotbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsS4uLiIKLQotIzogZ2l0LWd1aS5zaDoxOTc0Ci1tc2dpZCAiQ2hlY2tvdXQuLi4iCi1tc2dzdHIgIs6Vzr7Osc6zz4nOs86uLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjE5ODAKLW1zZ2lkICJSZW5hbWUuLi4iCi1tc2dzdHIgIs6czrXPhM6/zr3Ov868zrHPg86vzrEuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MTk4NSBnaXQtZ3VpLnNoOjIwODUKLW1zZ2lkICJEZWxldGUuLi4iCi1tc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MTk5MAotbXNnaWQgIlJlc2V0Li4uIgotbXNnc3RyICLOlc+AzrHOvc6xz4bOv8+BzqwuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjAwMiBnaXQtZ3VpLnNoOjIzODkKLW1zZ2lkICJOZXcgQ29tbWl0IgotbXNnc3RyICLOnc6tzrEgzqXPgM6/zrLOv867zq4iCi0KLSM6IGdpdC1ndWkuc2g6MjAxMCBnaXQtZ3VpLnNoOjIzOTYKLW1zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKLW1zZ3N0ciAizpTOuc+Mz4HOuM+Jz4POtyDOpM61zrvOtc+Fz4TOsc6vzrHPgiDOpc+Azr/Oss6/zrvOrs+CIgotCi0jOiBnaXQtZ3VpLnNoOjIwMTkgZ2l0LWd1aS5zaDoyMzU2IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6OTkKLW1zZ2lkICJSZXNjYW4iCi1tc2dzdHIgIs6Vz4DOsc69zrHOvc6vz4fOvc61z4XPg863IgotCi0jOiBnaXQtZ3VpLnNoOjIwMjUKLW1zZ2lkICJTdGFnZSBUbyBDb21taXQiCi1tc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Or863z4POtyDOoM+Bzr/PgiDOpc+Azr/Oss6/zrvOriIKLQotIzogZ2l0LWd1aS5zaDoyMDMxCi1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCi1tc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Or863z4POtyDOkc67zrvOsc6zzrzOrc69z4nOvSDOkc+Bz4fOtc6vz4nOvSDOoM+Bzr/PgiDOpc+Azr/Oss6/zrvOriIKLQotIzogZ2l0LWd1aS5zaDoyMDM3Ci1tc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKLW1zZ3N0ciAizpHPgM6/z4PPhM6xzrTOuc6/z4DOv86vzrfPg863IM6Rz4DPjCDOpc+Azr/Oss6/zrvOriIKLQotIzogZ2l0LWd1aS5zaDoyMDQyIGxpYi9pbmRleC50Y2w6Mzk1Ci1tc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCi1tc2dzdHIgIs6Rzr3Osc6vz4HOtc+DzrcgzpHOu867zrHOs8+Ozr0iCi0KLSM6IGdpdC1ndWkuc2g6MjA0OSBnaXQtZ3VpLnNoOjIzNjggZ2l0LWd1aS5zaDoyNDY3Ci1tc2dpZCAiU2lnbiBPZmYiCi1tc2dzdHIgIs6Rz4DOv8+Dz43Ovc60zrXPg863IgotCi0jOiBnaXQtZ3VpLnNoOjIwNTMgZ2l0LWd1aS5zaDoyMzcyCi1tc2dpZCAiQ29tbWl0QEB2ZXJiIgotbXNnc3RyICLOpc+Azr/Oss6/zrvOrkBAdmVyYiIKLQotIzogZ2l0LWd1aS5zaDoyMDY0Ci1tc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCi1tc2dzdHIgIs6kzr/PgM65zrrOriDOo8+FzrPPh8+Ozr3Otc+Fz4POty4uLiIKLQotIzogZ2l0LWd1aS5zaDoyMDY5Ci1tc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCi1tc2dzdHIgIs6RzrrPjc+Bz4nPg863IM6jz4XOs8+Hz47Ovc61z4XPg863z4IuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjA4MQotbXNnaWQgIlB1c2guLi4iCi1tc2dzdHIgIs6PzrjOt8+DzrcuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjA5MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQxCi0jLCBmdXp6eQotbXNnaWQgIkFwcGxlIgorIklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gcmV0YWluIGNvbW1pdHMgeW91IGNyZWF0ZSwgeW91IG1heVxuIgorImRvIHNvIChub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1iIHdpdGggdGhlIGNoZWNrb3V0IGNvbW1hbmQgYWdhaW4uIEV4YW1wbGU6XG4iCisiXG4iCisiICBnaXQgY2hlY2tvdXQgLWIgPG5ldy1icmFuY2gtbmFtZT5cbiIKKyJcbiIKIG1zZ3N0ciAiIgorIs6jzrfOvM61zq/Pic+Dzrc6IM61zr7Osc6zz4nOs86uIM+Ezr/PhSAnJXMnLlxuIgorIlxuIgorIs6Sz4HOr8+DzrrOtc+Dz4TOtSDPg861IM66zrHPhM6sz4PPhM6xz4POtyAnzrHPgM6/z4PPhc69zrTOtc60zrXOvM6tzr3Ov8+FIEhFQUQnLiDOnM+Azr/Pgc61zq/PhM61IM69zrEgz4DOtc+BzrnOt86zzrfOuM61zq/PhM61LCDOvc6xICIKKyLOus6szr3Otc+EzrUgz4DOtc65z4HOsc68zrHPhM65zrrOrc+CXG4iCisizrHOu867zrHOs86tz4IgzrrOsc65IM69zrEgz4TOuc+CIM+Fz4DOv86yzqzOu861z4TOtSwgzrrOsc64z47PgiDOus6xzrkgzr3OsSDOsc+Azr/Pgc+Bzq/PiM61z4TOtSDPjCzPhM65IM+Fz4DOv86yzr/Ou86tz4IgzrrOrM69zrXPhM61ICIKKyLPg861IM6xz4XPhM6uzr0gz4TOt869XG4iCisizrrOsc+EzqzPg8+EzrHPg863IM+Hz4nPgc6vz4Igzr3OsSDOtc+AzrfPgc61zqzPg861z4TOtSDOrM67zrvOv8+Fz4IgzrrOu86szrTOv8+Fz4IgzrHPgM67zqwgzrrOrM69zr/Ovc+EzrHPgiDOvM65zrEgzr3Orc6xIM61zr7Osc6zz4nOs86uLlxuIgorIlxuIgorIs6Rzr0gzrjOrc67zrXPhM61IM69zrEgzrTOt868zrnOv8+Fz4HOs86uz4POtc+EzrUgzq3Ovc6xzr0gzr3Orc6/IM66zrvOrM60zr8gzrPOuc6xIM69zrEgzrTOuc6xz4TOt8+Bzq7Pg861z4TOtSDPhM65z4Igz4XPgM6/zrLOv867zq3PgiAiCisiz4DOv8+FIM60zrfOvM65zr/Phc+BzrPOtc6vz4TOtSwgzrzPgM6/z4HOtc6vz4TOtVxuIgorIs69zrEgz4TOvyDOus6szr3Otc+EzrUgKM+Ez47Pgc6xIM6uIM6xz4HOs8+Mz4TOtc+BzrEpIM+Hz4HOt8+DzrnOvM6/z4DOv865z47Ovc+EzrHPgiAtYiDOvM61IM+EzrfOvSDOtc69z4TOv867zq4gzrXOvs6xzrPPic6zzq7PgiAiCisiY2hlY2tvdXQgz4DOrM67zrkuIM6gzrHPgc6szrTOtc65zrPOvM6xOlxuIgorIlxuIgorIiAgZ2l0IGNoZWNrb3V0IC1iIDzPjM69zr/OvM6xLc69zq3Ov8+FLc66zrvOrM60zr/PhT5cbiIKKyJcbiIKIAotIzogZ2l0LWd1aS5zaDoyMDk1IGdpdC1ndWkuc2g6MjExNyBsaWIvYWJvdXQudGNsOjE0Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBYm91dCAlcyIKLW1zZ3N0ciAizqDOtc+Bzq8gJXMiCisjOiBhbGlhcy5jOjUwCittc2dpZCAiY21kbGluZSBlbmRzIHdpdGggXFwiCittc2dzdHIgIs6zz4HOsc68zrzOriDOtc69z4TOv867z47OvSDPhM61zrvOtc65z47Ovc61zrkgzrzOtSBcXCIKIAotIzogZ2l0LWd1aS5zaDoyMDk5Ci1tc2dpZCAiUHJlZmVyZW5jZXMuLi4iCi1tc2dzdHIgIs6gz4HOv8+EzrnOvM6uz4POtc65z4IuLi4iCisjOiBhbGlhcy5jOjUxCittc2dpZCAidW5jbG9zZWQgcXVvdGUiCittc2dzdHIgIs6xzr3Ov865z4fPhM6sIM61zrnPg86xzrPPic6zzrnOus6sIgogCi0jOiBnaXQtZ3VpLnNoOjIxMDcgZ2l0LWd1aS5zaDoyNjM5Ci1tc2dpZCAiT3B0aW9ucy4uLiIKLW1zZ3N0ciAizpXPgM65zrvOv86zzq3Pgi4uLiIKKyM6IGFwcGx5LmM6NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciCittc2dzdHIgIs6szrPOvc+Jz4PPhM63IM61z4DOuc67zr/Os86uIM66zrXOvc6/z40gz4fPjs+Bzr/PhSAnJXMnIgogCi0jOiBnaXQtZ3VpLnNoOjIxMTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NwotbXNnaWQgIkhlbHAiCi1tc2dzdHIgIs6Szr/Ors64zrXOuc6xIgorIzogYXBwbHkuYzo3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIs6szrPOvc+Jz4PPhM63IM61z4DOuc67zr/Os86uIM6xzrPOvc+MzrfPg863z4IgzrrOtc69zr/PjSDPh8+Oz4HOv8+FICclcyciCiAKLSM6IGdpdC1ndWkuc2g6MjE1NAotbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgotbXNnc3RyICLOlM65zrHOtM65zrrPhM+FzrHOus6uIM6kzrXOus68zrfPgc6vz4nPg863IgorIzogYXBwbHkuYzoxMjUKK21zZ2lkICItLXJlamVjdCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1yZWplY3QgzrrOsc65IC0tM3dheSDOtM61IM6zzq/Ovc61z4TOsc65IM69zrEgz4fPgc63z4POuc68zr/PgM6/zrnOt864zr/Pjc69IM68zrHOts6vLiIKIAotIzogZ2l0LWd1aS5zaDoyMjM4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiZmF0YWw6IGNhbm5vdCBzdGF0IHBhdGggJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCi1tc2dzdHIgIs66z4HOr8+DzrnOvM6/OiDOtM61IM6yz4HOrc64zrfOus61IM63IM60zrnOsc60z4HOv868zq46ICVzOiDOlM61zr0gz4XPgM6sz4HPh861zrkgz4TOvyDOsc+Bz4fOtc6vzr8gzq4gzr8gz4bOrM66zrXOu86/z4IiCisjOiBhcHBseS5jOjEyNworbXNnaWQgIi0tY2FjaGVkIGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICItLWNhY2hlZCDOus6xzrkgLS0zd2F5IM60zrUgzrPOr869zrXPhM6xzrkgzr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc63zrjOv8+Nzr0gzrzOsc62zq8uLiIKIAotIzogZ2l0LWd1aS5zaDoyMjcxCi1tc2dpZCAiQ3VycmVudCBCcmFuY2g6IgotbXNnc3RyICLOpM+Bzq3Ph8+Jzr0gzprOu86szrTOv8+COiIKKyM6IGFwcGx5LmM6MTMwCittc2dpZCAiLS0zd2F5IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLTN3YXkgzq3Ovs+JIM6xz4DPjCDOsc+Az4zOuM61z4TOrs+BzrnOvyIKIAotIzogZ2l0LWd1aS5zaDoyMjkyCi1tc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKLW1zZ3N0ciAizqPPhM6xzrTOuc6/z4DOv865zrfOvM6tzr3Otc+CIM6RzrvOu86xzrPOrc+CICjOmM6xIM6lz4DOv86yzrvOt864zr/Pjc69KSIKKyM6IGFwcGx5LmM6MTQxCittc2dpZCAiLS1pbmRleCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1pbmRleCDOrc6+z4kgzrHPgM+MIM6xz4DOv864zrXPhM6uz4HOuc6/IgogCi0jOiBnaXQtZ3VpLnNoOjIzMTIKLW1zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIgotbXNnc3RyICLOnM63IM6jz4TOsc60zrnOv8+Azr/Ouc63zrzOrc69zrXPgiDOkc67zrvOsc6zzq3PgiIKKyM6IGFwcGx5LmM6MTQ0Cittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tY2FjaGVkIM6tzr7PiSDOsc+Az4wgzrHPgM6/zrjOtc+Ezq7Pgc65zr8iCiAKLSM6IGdpdC1ndWkuc2g6MjM2MgotbXNnaWQgIlN0YWdlIENoYW5nZWQiCi1tc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Or863z4POtyDOkc67zrvOsc6zz47OvSIKKyM6IGFwcGx5LmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiCittc2dzdHIgIs6UzrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDPgM+Bzr/Otc+Ezr/Ouc68zrHPg86vzrEgzrrOsc69zr/Ovc65zrrOrs+CIM6tzrrPhs+BzrHPg863z4Igz4fPgc6/zr3Ov8+Dzq7OvM6xzr3Pg863z4IgJXMiCiAKLSM6IGdpdC1ndWkuc2g6MjM3OCBsaWIvdHJhbnNwb3J0LnRjbDo5MyBsaWIvdHJhbnNwb3J0LnRjbDoxODIKLW1zZ2lkICJQdXNoIgotbXNnc3RyICLOj864zrfPg863IgorIzogYXBwbHkuYzo4MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICLOpM6/IHJlZ2V4ZWMgzrXPgM6tz4PPhM+BzrXPiM61ICVkIM6zzrnOsSDOtc65z4POsc6zz4nOs86uOiAlcyIKIAotIzogZ2l0LWd1aS5zaDoyNDA4Ci1tc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIs6Rz4HPh865zrrPjCDOnM6uzr3Phc68zrEgzqXPgM6/zrLOv867zq7PgjoiCisjOiBhcHBseS5jOjkwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ez4wgzr3OsSDOss+BzrXOuM61zq8gz4TOvyDPjM69zr/OvM6xIM6xz4HPh861zq/Ov8+FIM+Dz4TOtyDOtM65z4zPgc64z4nPg863IM+Dz4TOtyDOs8+BzrHOvM68zq4gJWQiCiAKLSM6IGdpdC1ndWkuc2g6MjQwOQotbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICLOlM65zr/Pgc64z4nOvM6tzr3OvyDOnM6uzr3Phc68zrEgzqXPgM6/zrLOv867zq7PgjoiCisjOiBhcHBseS5jOjk0NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IM67zqzOuM6/z4IgZ2l0LWRpZmYgLSDOsc69zrHOvM61zr3PjM+EzrHOvSAvZGV2L251bGwsIM6yz4HOrc64zrfOus61ICVzIM+Dz4TOtyDOs8+BzrHOvM68zq4gJWQiCiAKLSM6IGdpdC1ndWkuc2g6MjQxMAotbXNnaWQgIkFtZW5kZWQgSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIs6UzrnOv8+BzrjPic68zq3Ovc6/IM6Rz4HPh865zrrPjCDOnM6uzr3Phc68zrEgzqXPgM6/zrLOv867zq7PgjoiCisjOiBhcHBseS5jOjk1MgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiDOu86szrjOv8+CIGdpdC1kaWZmIC0gzrHPg8+NzrzPhs+Jzr3OvyDPjM69zr/OvM6xIM69zq3Ov8+FIM6xz4HPh861zq/Ov8+FIM+Dz4TOtyDOs8+BzrHOvM68zq4gJWQiCiAKLSM6IGdpdC1ndWkuc2g6MjQxMQotbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICLOlM65zr/Pgc64z4nOvM6tzr3OvyDOnM6uzr3Phc68zrEgzqXPgM6/zrLOv867zq7PgiDOo8+FzrPPh8+Ozr3Otc+Fz4POt8+COiIKKyM6IGFwcGx5LmM6OTUzCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5OiDOu86szrjOv8+CIGdpdC1kaWZmIC0gzrHPg8+NzrzPhs+Jzr3OvyDPjM69zr/OvM6xIM+AzrHOu865zr/PjSDOsc+Bz4fOtc6vzr/PhSDPg8+EzrcgzrPPgc6xzrzOvM6uICVkIgogCi0jOiBnaXQtZ3VpLnNoOjI0MTIKLW1zZ2lkICJNZXJnZSBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIs6czq7Ovc+FzrzOsSDOpc+Azr/Oss6/zrvOrs+CIM6jz4XOs8+Hz47Ovc61z4XPg863z4I6IgorIzogYXBwbHkuYzo5NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiDOu86szrjOv8+CIGdpdC1kaWZmIC0gzrHOvc6xzrzOtc69z4zPhM6xzr0gL2Rldi9udWxsIM+Dz4TOtyDOs8+BzrHOvM68zq4gJWQiCiAKLSM6IGdpdC1ndWkuc2g6MjQxMwotbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAizpzOrs69z4XOvM6xIM6lz4DOv86yzr/Ou86uz4I6IgorIzogYXBwbHkuYzo5ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIG9uIGxpbmUgJWQ6ICVzIgorbXNnc3RyICLOvM63IM6tzrPOus+Fz4HOtyDOus6xz4TOrM+Dz4TOsc+Dzrcgz4PPhM63IM6zz4HOsc68zrzOriAlZDogJXMiCiAKLSM6IGdpdC1ndWkuc2g6MjQ1OSBnaXQtZ3VpLnNoOjI2MjIgbGliL2NvbnNvbGUudGNsOjczCi1tc2dpZCAiQ29weSBBbGwiCi1tc2dzdHIgIs6Rzr3PhM65zrPPgc6xz4bOriDOjM67z4nOvSIKKyM6IGFwcGx5LmM6MTMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvbnNpc3RlbnQgaGVhZGVyIGxpbmVzICVkIGFuZCAlZCIKK21zZ3N0ciAizrHPg8+NzrzPhs+Jzr3Otc+CIM6zz4HOsc68zrzOrc+CIM61z4DOuc66zrXPhs6xzrvOr860zrHPgiAlZCDOus6xzrkgJWQiCiAKLSM6IGdpdC1ndWkuc2g6MjQ4MyBsaWIvYmxhbWUudGNsOjEwNwotbXNnaWQgIkZpbGU6IgotbXNnc3RyICLOkc+Bz4fOtc6vzr86IgorIzogYXBwbHkuYzoxNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAicmVjb3VudDogzrzOtyDOsc69zrHOvM61zr3PjM68zrXOvc63IM6zz4HOsc68zrzOrjogJS4qcyIKIAotIzogZ2l0LWd1aS5zaDoyNTg5Ci1tc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgotbXNnc3RyICLOlc+GzrHPgc68zr/Os86uL86Rzr3PhM65z4PPhM+Bzr/Phs6uIM6azr/OvM68zrHPhM65zr/PjSIKKyM6IGFwcGx5LmM6MTU0NworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICLOsc+Az4zPg8+AzrHPg868zrEgzrTOuc+Mz4HOuM+Jz4POt8+CIM+Hz4nPgc6vz4IgzrXPgM65zrrOtc+GzrHOu86vzrTOsSDPg8+EzrcgzrPPgc6xzrzOvM6uICVkOiAlLipzIgogCi0jOiBnaXQtZ3VpLnNoOjI1OTUKLW1zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKLW1zZ3N0ciAizqDPgc6/zrLOv867zq4gzqPPhM61zr3PjM+EzrXPgc6/z4UgzqDOu86xzrnPg86vzr/PhSIKLQotIzogZ2l0LWd1aS5zaDoyNjAyCi1tc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCi1tc2dzdHIgIs6gz4HOv86yzr/Ou86uIM6Vz4XPgc+Nz4TOtc+Bzr/PhSDOoM67zrHOuc+Dzq/Ov8+FIgotCi0jOiBnaXQtZ3VpLnNoOjI2MTAKLW1zZ2lkICJSZWZyZXNoIgotbXNnc3RyICLOkc69zrHOvc6tz4nPg863IgotCi0jOiBnaXQtZ3VpLnNoOjI2MzEKLW1zZ2lkICJEZWNyZWFzZSBGb250IFNpemUiCi1tc2dzdHIgIs6czrXOr8+Jz4POtyDOnM61zrPOrc64zr/Phc+CIM6Tz4HOsc68zrzOsc+Ezr/Pg861zrnPgc6sz4IiCi0KLSM6IGdpdC1ndWkuc2g6MjYzNQotbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKLW1zZ3N0ciAizpHPjc6+zrfPg863IM6czrXOs86tzrjOv8+Fz4IgzpPPgc6xzrzOvM6xz4TOv8+DzrXOuc+BzqzPgiIKLQotIzogZ2l0LWd1aS5zaDoyNjQ2Ci1tc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgotbXNnc3RyICLOkc+Azr/Pg8+EzrHOtM65zr/PgM6/zq/Ot8+DzrcgzprOv868zrzOsc+EzrnOv8+NIM6Rz4DPjCDOpc+Azr/Oss6/zrvOriIKLQotIzogZ2l0LWd1aS5zaDoyNjQ4Ci1tc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgotbXNnc3RyICLOo8+EzrHOtM65zr/PgM6/zq/Ot8+DzrcgzprOv868zrzOsc+EzrnOv8+NIM6gz4HOv8+CIM6lz4DOv86yzr/Ou86uIgotCi0jOiBnaXQtZ3VpLnNoOjI2NjcKLW1zZ2lkICJJbml0aWFsaXppbmcuLi4iCi1tc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM6xz4HPh865zrrOv8+Azr/Or863z4POty4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzYyCi0jLCB0Y2wtZm9ybWF0CisjOiBhcHBseS5jOjE1NjcKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKLSJcbiIKLSJUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHlcbiIKLSJnb2luZyB0byBiZSBpZ25vcmVkIGJ5IGFueSBHaXQgc3VicHJvY2VzcyBydW5cbiIKLSJieSAlczpcbiIKLSJcbiIKLW1zZ3N0ciAiIgotIs6lz4DOrM+Bz4fOv8+Fzr0gz4DOuc64zrHOvc6sIM64zq3OvM6xz4TOsSDOvM61IM+Ezr8gz4DOtc+BzrnOss6szrvOu86/zr0uXG4iCi0iXG4iCi0izp/OuSDOtc6+zq7PgiDOvM61z4TOsc6yzrvOt8+Ezq3PgiDPgM61z4HOuc6yzqzOu867zr/Ovc+Ezr/PgiDOvM6szrvOu86/zr0gzrjOsVxuIgotIs6xzrPOvc6/zrfOuM6/z43OvSDOsc+Az4wgz4DOuc64zrHOvc6uIM61zrrPhM6tzrvOtc+Dzrcgz4XPgM6/zrTOuc61z4HOs86xz4POr86xz4IgR2l0XG4iCi0izrHPgM+MIM+Ezr8gJXM6XG4iCi0iXG4iCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCisizpvOtc6vz4DOtc65IM63IM+AzrvOt8+Bzr/Phs6/z4HOr86xIM6/zr3PjM68zrHPhM6/z4IgzrHPgc+HzrXOr86/z4UgzrHPgM+MIM+EzrfOvSDOtc+AzrnOus61z4bOsc67zq/OtM6xIGdpdCBkaWZmIM66zrHPhM6sIM+EzrfOvSAiCisizrHPhs6xzq/Pgc61z4POtyDPhM6/z4UgJWQgzrHPgc+HzrnOus6/z40gz4PPhc+Dz4TOsc+EzrnOus6/z40gzr/Ovc+MzrzOsc+Ezr/PgiDOtM65zrHOtM+Bzr/OvM6uz4IgKM6zz4HOsc68zrzOriAlZCkiCittc2dzdHJbMV0gIiIKKyLOm861zq/PgM61zrkgzrcgz4DOu863z4HOv8+Gzr/Pgc6vzrEgzr/Ovc+MzrzOsc+Ezr/PgiDOsc+Bz4fOtc6vzr/PhSDOsc+Az4wgz4TOt869IM61z4DOuc66zrXPhs6xzrvOr860zrEgZ2l0IGRpZmYgzrrOsc+Ezqwgz4TOt869ICIKKyLOsc+GzrHOr8+BzrXPg863IM+Ez4nOvSAlZCDOsc+Bz4fOuc66z47OvSDPg8+Fz4PPhM6xz4TOuc66z47OvSDOv869z4zOvM6xz4TOv8+CIM60zrnOsc60z4HOv868zq7PgiAozrPPgc6xzrzOvM6uICVkKSIKIAotIzogZ2l0LWd1aS5zaDoyNzkyCisjOiBhcHBseS5jOjE1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIChsaW5lICVkKSIKK21zZ3N0ciAiIgorIs6bzrXOr8+AzrXOuSDOtyDPgM67zrfPgc6/z4bOv8+Bzq/OsSDOv869z4zOvM6xz4TOv8+CIM6xz4HPh861zq/Ov8+FIM6xz4DPjCDPhM63zr0gzrXPgM65zrrOtc+GzrHOu86vzrTOsSBnaXQgZGlmZiAozrPPgc6xzrzOvM6uICVkKSIKKworIzogYXBwbHkuYzoxNzY4Cittc2dpZCAibmV3IGZpbGUgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIs+Ezr8gzr3Orc6/IM6xz4HPh861zq/OvyDOtc6+zrHPgc+EzqzPhM6xzrkgzrHPgM+MIM+EzrEgz4DOsc67zrnOrCDPgM61z4HOuc61z4fPjM68zrXOvc6xIgorCisjOiBhcHBseS5jOjE3NzAKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICLPhM6/IM60zrnOtc6zz4HOsc68zrzOrc69zr8gzrHPgc+HzrXOr86/IM6tz4fOtc65IM6xzrrPjM68zrEgz4DOtc+BzrnOtc+Hz4zOvM61zr3OsSIKKworIzogYXBwbHkuYzoxODA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAizrrOsc+EzrXPg8+Ez4HOsc68zrzOrc69zrcgzrTOuc+Mz4HOuM+Jz4POtyDPg8+EzrcgzrPPgc6xzrzOvM6uICVkIgorCisjOiBhcHBseS5jOjE4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIs+Ezr8gzr3Orc6/IM6xz4HPh861zq/OvyAlcyDOtc6+zrHPgc+EzqzPhM6xzrkgzrHPgM+MIM+EzrEgz4DOsc67zrnOrCDPgM61z4HOuc61z4fPjM68zrXOvc6xIgorCisjOiBhcHBseS5jOjE4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiz4TOvyDOtM65zrXOs8+BzrHOvM68zq3Ovc6/IM6xz4HPh861zq/OvyAlcyDOrc+HzrXOuSDOsc66z4zOvM6xIM+AzrXPgc65zrXPh8+MzrzOtc69zrEiCisKKyM6IGFwcGx5LmM6MTg0NgorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIqKiDPgM+Bzr/Pg86/z4fOrjogz4TOvyDOsc+Bz4fOtc6vzr8gJXMgzrPOr869zrXPhM6xzrkgzrrOtc69z4wgzrHOu867zqwgzrTOtSDOtM65zrHOs8+BzqzPhs61z4TOsc65IgorCisjOiBhcHBseS5jOjE5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAizrrOsc+EzrXPg8+Ez4HOsc68zrzOrc69zrcgzrTPhc6xzrTOuc66zq4gzrTOuc+Mz4HOuM+Jz4POtyDPg8+EzrcgzrPPgc6xzrzOvM6uICVkOiAlLipzIgorCisjOiBhcHBseS5jOjIwMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLOvM63IM6xzr3Osc6zzr3Pic+Bzq/Pg865zrzOtyDOtM+FzrHOtM65zrrOriDOtM65z4zPgc64z4nPg863IM+Dz4TOtyDOs8+BzrHOvM68zq4gJWQiCisKKyM6IGFwcGx5LmM6MjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICLOtM65z4zPgc64z4nPg863IM68zrUgzrzPjM69zr8gz4POus6/z4XPgM6vzrTOuc6xIM+Dz4TOtyDOs8+BzrHOvM68zq4gJWQiCisKKyM6IGFwcGx5LmM6MjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgzrHOvc6szrPOvc+Jz4POtyDPhM6/z4Ugz4PPhc68zrLOv867zrnOus6/z40gzrTOtc+DzrzOv8+NICVzIgorCisjOiBhcHBseS5jOjIyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIKK21zZ3N0ciAizrTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM+MIM+Ezr8gzqzOvc6/zrnOs868zrEgzq4gzrcgzrHOvc6szrPOvc+Jz4POtyDPhM6/z4UgJXMiCisKKyM6IGFwcGx5LmM6Mjk0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgIs68zrcgzrHPgM6/zrTOtc66z4TOriDOsc+Bz4fOriDOs8+BzrHOvM68zq7PgjogJyVjJyIKKworIzogYXBwbHkuYzozMDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAizpcgzrHOu867zrHOs86uIM+Fz4AnIM6xz4EuICVkIM+Azq3PhM+Fz4fOtSDPg8+Ezr8gJWQgKM68zrXPhM6xz4TPjM+AzrnPg863ICVkIM6zz4HOsc68zrzOrikuIgorbXNnc3RyWzFdICLOlyDOsc67zrvOsc6zzq4gz4XPgCcgzrHPgS4gJWQgz4DOrc+Ez4XPh861IM+Dz4TOvyAlZCAozrzOtc+EzrHPhM+Mz4DOuc+DzrcgJWQgzrPPgc6xzrzOvM6tz4IpLiIKKworIzogYXBwbHkuYzozMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIiIKKyLOpM6/IM+AzrvOsc6vz4POuc6/IM68zrXOuc+OzrjOt866zrUgz4POtSAoJWxkLyVsZCkgzrPOuc6xIM+EzrfOvSDOtc+GzrHPgc68zr/Os86uIM+Ezr/PhSDOsc+Azr/Pg8+AzqzPg868zrHPhM6/z4Igz4PPhM6/ICVkIgorCisjOiBhcHBseS5jOjMwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndoaWxlIHNlYXJjaGluZyBmb3I6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorIs66zrHPhM6sIM+EzrfOvSDOsc69zrHOts6uz4TOt8+DzrcgzrPOuc6xIM+Ezr86XG4iCisiJS4qcyIKKworIzogYXBwbHkuYzozMTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgIs67zrXOr8+Azr/Phc69IM+EzrEgzrTPhc6xzrTOuc66zqwgzrTOtc60zr/OvM6tzr3OsSDOtM65z4zPgc64z4nPg863z4IgzrPOuc6xIM+Ezr8gJyVzJyIKKworIzogYXBwbHkuYzozMTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXZlcnNlLWFwcGx5IGEgYmluYXJ5IHBhdGNoIHdpdGhvdXQgdGhlIHJldmVyc2UgaHVuayB0byAnJXMnIgorbXNnc3RyICIiCisizrTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM61z4bOsc+BzrzOv86zzq4gz4DPgc6/z4Igz4TOsSDPgM6vz4PPiSDOtM+FzrHOtM65zrrOrs+CIM60zrnPjM+BzrjPic+DzrfPgiDPh8+Jz4HOr8+CIM+EzrfOvSDOsc67zrvOsc6zzq4gIgorIs+Az4HOv8+CIM+EzrEgz4DOr8+Dz4kgz4PPhM6/ICclcyciCisKKyM6IGFwcGx5LmM6MzE1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYXBwbHkgYmluYXJ5IHBhdGNoIHRvICclcycgd2l0aG91dCBmdWxsIGluZGV4IGxpbmUiCittc2dzdHIgIiIKKyLOtM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgzrXPhs6xz4HOvM6/zrPOriDOtM+FzrHOtM65zrrOrs+CIM60zrnPjM+BzrjPic+DzrfPgiDPg8+Ezr8gJyVzJyDPh8+Jz4HOr8+CIM+EzrfOvSDPgM67zq7Pgc63ICIKKyLOs8+BzrHOvM68zq4gzrXPhc+BzrXPhM63z4HOr86/z4UiCisKKyM6IGFwcGx5LmM6MzE2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIHBhdGNoIGFwcGxpZXMgdG8gJyVzJyAoJXMpLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBjb250ZW50cy4iCittc2dzdHIgIiIKKyLOtyDOtM65z4zPgc64z4nPg863IM61z4bOsc+BzrzPjM62zrXPhM6xzrkgz4PPhM6/ICclcycgKCVzKSwgz4DOv8+FIM60zrXOvSDPhM6xzrnPgc65zqzOts61zrkgzrzOtSDPhM6xIM+AzrHPgc+Mzr3PhM6xICIKKyLPgM61z4HOuc61z4fPjM68zrXOvc6xLiIKKworIzogYXBwbHkuYzozMTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBwYXRjaCBhcHBsaWVzIHRvIGFuIGVtcHR5ICclcycgYnV0IGl0IGlzIG5vdCBlbXB0eSIKK21zZ3N0ciAizrcgzrTOuc+Mz4HOuM+Jz4POtyDOtc+GzrHPgc68z4zOts61z4TOsc65IM+DzrUgzq3Ovc6xIM66zrXOvc+MICclcycgzrHOu867zqwgzrTOtc69IM61zq/Ovc6xzrkgzrrOtc69z4wiCisKKyM6IGFwcGx5LmM6MzE5MworIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbmVjZXNzYXJ5IHBvc3RpbWFnZSAlcyBmb3IgJyVzJyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAizrTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM6xzr3OrM6zzr3Pic+Dzrcgz4TOt8+CIM6xzr3Osc6zzrrOsc6vzrHPgiBwb3N0aW1hZ2UgJXMgzrPOuc6xIM+Ezr8gJyVzJyIKKworIzogYXBwbHkuYzozMjA2CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICLOtyDOtM+FzrHOtM65zrrOriDOtM65z4zPgc64z4nPg863IM60zrXOvSDOtc+GzrHPgc68z4zOts61z4TOsc65IM+Dz4TOvyAnJXMnIgorCisjOiBhcHBseS5jOjMyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKyLOtyDOtM+FzrHOtM65zrrOriDOtM65z4zPgc64z4nPg863IM+Dz4TOvyAnJXMnIM60zrfOvM65zr/Phc+BzrPOtc6vIM67zqzOuM6/z4IgzrHPgM6/z4TOrc67zrXPg868zrEgKM6xzr3Osc68zrXOvc+Mz4TOsc69ICVzLCAiCisizrLPgc6tzrjOt866zrUgJXMpIgorCisjOiBhcHBseS5jOjMyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgIs63IM60zrnPjM+BzrjPic+DzrcgzrHPgM6tz4TPhc+HzrU6ICVzOiVsZCIKKworIzogYXBwbHkuYzozMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAizrTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM61zr7Osc6zz4nOs86uIM+Ezr/PhSAlcyIKKworIzogYXBwbHkuYzozNDA4IGFwcGx5LmM6MzQxOSBhcHBseS5jOjM0NjUgbWlkeC5jOjU4IHNldHVwLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICLOsc+Azq3PhM+Fz4fOtSDOtyDOsc69zqzOs869z4nPg863IM+Ezr/PhSAlcyIKKworIzogYXBwbHkuYzozNDE2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIs6xzr3OrM6zzr3Pic+DzrcgzrHPgM+MIM+Ezr8gJyVzJyDPgM6vz4PPiSDOsc+Az4wgz4PPhc68zrLOv867zrnOus+MIM60zrXPg868z4wiCisKKyM6IGFwcGx5LmM6MzQ0NSBhcHBseS5jOjM2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgIs63IM60zrnOsc60z4HOv868zq4gJXMgzq3Ph861zrkgzrzOtc+Ezr/Ovc6/zrzOsc+Dz4TOtc6vL860zrnOsc6zz4HOsc+GzrXOryIKKworIzogYXBwbHkuYzozNTMxIGFwcGx5LmM6MzcwMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzOiDOtM61zr0gz4XPgM6sz4HPh861zrkgz4PPhM6/IM61z4XPgc61z4TOrs+BzrnOvyIKKworIzogYXBwbHkuYzozNTQwIGFwcGx5LmM6MzcxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVzOiDOtM61zr0gz4TOsc65z4HOuc6szrbOtc65IM68zrUgz4TOvyDOtc+Fz4HOtc+Ezq7Pgc65zr8iCisKKyM6IGFwcGx5LmM6MzU3NQorbXNnaWQgInJlcG9zaXRvcnkgbGFja3MgdGhlIG5lY2Vzc2FyeSBibG9iIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIiIKKyLOsc+Az4wgz4TOvyDOsc+Azr/OuM61z4TOrs+BzrnOvyDOu861zq/PgM61zrkgz4TOvyDOsc69zrHOs866zrHOr86/IGJsb2IgzrPOuc6xIM69zrEgzrHOus6/zrvOv8+FzrjOt864zrXOryDOtyDOtc69zrHOu867zrHOus+EzrnOus6uICIKKyLPhM63z4Igz4TPgc65z4DOu86uz4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgi4iCisKKyM6IGFwcGx5LmM6MzU3OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIs6RzrrOv867zr/Phc64zrXOr8+EzrHOuSDOtyDOtc69zrHOu867zrHOus+EzrnOus6uIM+EzrfPgiDPhM+BzrnPgM67zq7PgiDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CLi4uXG4iCisKKyM6IGFwcGx5LmM6MzU5NCBhcHBseS5jOjM1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgJyVzJyIKK21zZ3N0ciAizrTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM6xzr3OrM6zzr3Pic+Dzrcgz4TPic69IM+Ez4HOtc+Hz4zOvc+Ez4nOvSDPgM61z4HOuc61z4fOv868zq3Ovc+Jzr0gz4TOv8+FICclcyciCisKKyM6IGFwcGx5LmM6MzYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmFsbCBiYWNrIG9uIHRocmVlLXdheSBtZXJnZS4uLlxuIgorbXNnc3RyICLOkc+Azq3PhM+Fz4fOtSDOtyDOtc69zrHOu867zrHOus+EzrnOus6uIM+EzrfPgiDPhM+BzrnPgM67zq7PgiDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CLi4uXG4iCisKKyM6IGFwcGx5LmM6MzYyNAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgd2l0aCBjb25mbGljdHMuXG4iCittc2dzdHIgIs6XIM61z4bOsc+BzrzOv86zzq4gz4TOt8+CIM60zrnPjM+BzrjPic+DzrfPgiDPg8+Ezr8gJyVzJyDOrc6zzrnOvc61IM68zrUgz4PPhc6zzrrPgc6/z43Pg861zrnPgi5cbiIKKworIzogYXBwbHkuYzozNjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICLOlyDOtc+GzrHPgc68zr/Os86uIM+EzrfPgiDOtM65z4zPgc64z4nPg863z4Igz4PPhM6/ICclcycgzq3Os865zr3OtSDOus6xzrjOsc+BzqwuXG4iCisKKyM6IGFwcGx5LmM6MzY1NQorbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgIs63IM60zrnPjM+BzrjPic+DzrcgzrHPhs6xzq/Pgc61z4POt8+CIM6xz4bOrs69zrXOuSDPgM6vz4PPiSDPgM61z4HOuc61z4fPjM68zrXOvc6xIM+Dz4TOvyDOsc+Bz4fOtc6vzr8iCisKKyM6IGFwcGx5LmM6MzcyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd3JvbmcgdHlwZSIKK21zZ3N0ciAiJXM6IM67zqzOuM6/z4Igz4TPjc+Azr/PgiIKKworIzogYXBwbHkuYzozNzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMgzq3Ph861zrkgz4TPjc+Azr8gJW8sIM6xzr3Osc68zrXOvc+Mz4TOsc69ICVvIgorCisjOiBhcHBseS5jOjM4ODEgYXBwbHkuYzozODgzIHJlYWQtY2FjaGUuYzo4MjAgcmVhZC1jYWNoZS5jOjg0NgorIzogcmVhZC1jYWNoZS5jOjEyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXRoICclcyciCittc2dzdHIgIs68zrcgzq3Os866z4XPgc63IM60zrnOsc60z4HOv868zq4gJyVzJyIKKworIzogYXBwbHkuYzozOTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IM+Fz4DOrM+Bz4fOtc65IM6uzrTOtyDPg8+Ezr8gzrXPhc+BzrXPhM6uz4HOuc6/IgorCisjOiBhcHBseS5jOjM5NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlczogz4XPgM6sz4HPh861zrkgzq7OtM63IM+Dz4TOv869IM+GzqzOus61zrvOvyDOtc+BzrPOsc+Dzq/Osc+CIgorCisjOiBhcHBseS5jOjM5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICLOtyDOvc6tzrEgzrrOsc+EzqzPg8+EzrHPg863ICglbykgz4TOv8+FICVzIM60zrXOvSDPhM6xzrnPgc65zqzOts61zrkgzrzOtSDPhM63zr0gz4DOsc67zrnOrCAoJW8pIgorCisjOiBhcHBseS5jOjM5NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICLOtyDOvc6tzrEgzrrOsc+EzqzPg8+EzrHPg863ICglbykgz4TOv8+FICVzIM60zrXOvSDPhM6xzrnPgc65zqzOts61zrkgzrzOtSDPhM63zr0gz4DOsc67zrnOrCAoJW8pIM+Ezr/PhSAlcyIKKworIzogYXBwbHkuYzozOTg3CisjLCBjLWZvcm1hdAorbXNnaWQgImFmZmVjdGVkIGZpbGUgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLPhM6/IM6xz4HPh861zq/OvyDPgM6/z4UgzrXPgM63z4HOtc6szrbOtc+EzrHOuSAnJXMnIM61zq/Ovc6xzrkgz4DOr8+Dz4kgzrHPgM+MIM+Dz4XOvM6yzr/Ou865zrrPjCDOtM61z4POvM+MIgorCisjOiBhcHBseS5jOjM5OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIlczogzrcgzrTOuc+Mz4HOuM+Jz4POtyDOtM61zr0gzrXPhs6xz4HOvM+MzrbOtc+EzrHOuSIKKworIzogYXBwbHkuYzo0MDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHBhdGNoICVzLi4uIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOrc67zrXOs8+Hzr/PgiDPhM63z4IgzrTOuc+Mz4HOuM+Jz4POt8+CICVzLi4uIgorCisjOiBhcHBseS5jOjQwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiz4DOu863z4HOv8+Gzr/Pgc6vzrEgc2hhMSDOtc67zrvOuc+Azq7PgiDOriDOrM+Hz4HOt8+Dz4TOtyDOs865zrEgz4TOt869IM+Fz4DOv861zr3PjM+EzrfPhM6xICVzIgorCisjOiBhcHBseS5jOjQxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9kZSBjaGFuZ2UgZm9yICVzLCB3aGljaCBpcyBub3QgaW4gY3VycmVudCBIRUFEIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAoJXMpLiIKK21zZ3N0ciAiz4DOu863z4HOv8+Gzr/Pgc6vzrEgc2hhMSDOtc67zrvOuc+Azq7PgiDOriDOrM+Hz4HOt8+Dz4TOtyAoJXMpLiIKKworIzogYXBwbHkuYzo0MTEzIGJ1aWx0aW4vY2hlY2tvdXQuYzoyNDggYnVpbHRpbi9yZXNldC5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICLPhM6/IG1ha2VfY2FjaGVfZW50cnkgzrHPgM6tz4TPhc+HzrUgzrPOuc6xIM+EzrcgzrTOuc6xzrTPgc6/zrzOriAnJXMnIgorCisjOiBhcHBseS5jOjQxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFkZCAlcyB0byB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggdG8gJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQzMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlIGZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0MzE5IGFwcGx5LmM6NDQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIHRvICclcyciCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIs6XIM61z4bOsc+BzrzOv86zzq4gz4TOt8+CIM60zrnPjM+BzrjPic+DzrfPgiAnJXMnIM6tzrPOuc69zrUgzrrOsc64zrHPgc6sLiIKKworIzogYXBwbHkuYzo0NTQyCittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGFwcGx5LmM6NDU1NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0NTY0IGJ1aWx0aW4vZmV0Y2guYzo4MzcgYnVpbHRpbi9mZXRjaC5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIs6XIM6xzrvOu86xzrPOriDPhc+AJyDOsc+BLiAlZCDOtc+GzrHPgc68z4zPg8+EzrfOus61IM66zrHOuM6xz4HOrC4iCisKKyM6IGFwcGx5LmM6NDU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIs6Rz4DOv8+Bz4HOr8+GzrjOt866zrUgzrcgzrHOu867zrHOs86uIM+Fz4AnIM6xz4EuICVkLiIKKworIzogYXBwbHkuYzo0NjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgcGF0Y2ggJyVzJy4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0NzAwCittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICLOtM61zr0gzrHOvc6xzrPOvc+Jz4HOr862zrXPhM6xzrkgzrcgzrXOuc+DzrHOs8+JzrPOriIKKworIzogYXBwbHkuYzo0NzIwCittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGFwcGx5LmM6NDkwOCBhcHBseS5jOjQ5MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGFwcGx5LmM6NDkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYXBwbHkuYzo0OTMyIGJ1aWx0aW4vYWRkLmM6NTM5IGJ1aWx0aW4vbXYuYzozMDEgYnVpbHRpbi9ybS5jOjM5MAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5NTkgYXBwbHkuYzo0OTYyIGJ1aWx0aW4vYW0uYzoyMjAzIGJ1aWx0aW4vYW0uYzoyMjA2CisjOiBidWlsdGluL2Nsb25lLmM6MTIyIGJ1aWx0aW4vZmV0Y2guYzoxMTggYnVpbHRpbi9tZXJnZS5jOjI2MworIzogYnVpbHRpbi9wdWxsLmM6MjAwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MDcKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzY2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzY5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg1MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg1MworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIwOTIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxOTcKK21zZ2lkICJwYXRoIgorbXNnc3RyICLOtM65zrHOtM+Bzr/OvM6uIgorCisjOiBhcHBseS5jOjQ5NjAKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk2MworbXNnaWQgImFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTY1IGJ1aWx0aW4vYW0uYzoyMjEyCittc2dpZCAibnVtIgorbXNnc3RyICLOsc+BzrnOuC4iCisKKyM6IGFwcGx5LmM6NDk2NgorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk2OQorbXNnaWQgImlnbm9yZSBhZGRpdGlvbnMgbWFkZSBieSB0aGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTcxCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk3NQorbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTc3Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5NzkKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk4MQorbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5ODMKK21zZ2lkICJtYXJrIG5ldyBmaWxlcyB3aXRoIGBnaXQgYWRkIC0taW50ZW50LXRvLWFkZGAiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTg3Cittc2dpZCAiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5OTAKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5OTIKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk5NAorbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk5NyBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTczIGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjQKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5OTkKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo1MDAwIGJ1aWx0aW4vYW0uYzoyMTkxIGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTcKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTkgYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDEKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxNCBidWlsdGluL3JlYmFzZS5jOjEwNjUKK21zZ2lkICJhY3Rpb24iCittc2dzdHIgIs61zr3Orc+BzrPOtc65zrEiCisKKyM6IGFwcGx5LmM6NTAwMQorbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NTAwNCBhcHBseS5jOjUwMDcKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NTAxMAorbXNnaWQgImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NTAxMgorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NTAxNAorbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NTAxNgorbXNnaWQgImFsbG93IG92ZXJsYXBwaW5nIGh1bmtzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NTAxNyBidWlsdGluL2FkZC5jOjI5MSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIyCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMTIgYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTggYnVpbHRpbi9mc2NrLmM6NzI0CisjOiBidWlsdGluL2xvZy5jOjIwMzcgYnVpbHRpbi9tdi5jOjEyMyBidWlsdGluL3JlYWQtdHJlZS5jOjEyOAorIzogYnVpbHRpbi9yZWJhc2UtLWludGVyYWN0aXZlLmM6MTU5Cittc2dpZCAiYmUgdmVyYm9zZSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMTkKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMjIKK21zZ2lkICJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo1MDI0IGJ1aWx0aW4vYW0uYzoyMjAwCittc2dpZCAicm9vdCIKK21zZ3N0ciAiz4HOr862zrEiCisKKyM6IGFwcGx5LmM6NTAyNQorbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgIs+Az4HOv8+DzrjOrs66zrcgz4TOv8+FIM+Az4HOv864zq3OvM6xz4TOv8+CIDzPgc6vzrbOsT4gz4POtSDPjM67zrEgz4TOsSDOv869z4zOvM6xz4TOsSDOsc+Bz4fOtc6vz4nOvSIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgWzzOtc+AzrnOu86/zrPOrc+CPl0gPM60zq3Ovc+Ez4HOvyDOriDPhs6xzrnOvc6/zrzOtc69zrnOus+MPiBbPM60zrnOsc60z4HOv868zq4+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE1Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzoxNgorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDzOsc+Azr/OuM61z4TOrs+BzrnOvz4gWy0tZXhlYyA8zrXOvc+Ezr/Ou86uPl0gWzzOtc+AzrnOu86/zrPOrc+CPl0gPM60zq3Ovc+Ez4HOvyDOriAiCisiz4bOsc65zr3Ov868zrXOvc65zrrPjD4gWzzOtM65zrHOtM+Bzr/OvM6uPi4uLl0iCisKKyM6IGFyY2hpdmUuYzoxNworbXNnaWQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDzOsc+Azr/OuM61z4TOrs+BzrnOvz4gWy0tZXhlYyA8zrXOvc+Ezr/Ou86uPl0gLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MzcyIGJ1aWx0aW4vYWRkLmM6MTc3IGJ1aWx0aW4vYWRkLmM6NTE1IGJ1aWx0aW4vcm0uYzoyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAizrcgzrTOuc6xzrTPgc6/zrzOriAnJXMnIM60zrXOvSDPhM6xzrnPgc65zqzOts61zrkgzrzOtSDOus6xzr3Orc69zrEgzrHPgc+HzrXOr86/IgorCisjOiBhcmNoaXZlLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmOiAlLipzIgorbXNnc3RyICLOtM61zr0gz4XPgM6sz4HPh861zrkgcmVmOiAlLipzIgorCisjOiBhcmNoaXZlLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAlcyIKK21zZ3N0ciAizrzOtyDOrc6zzrrPhc+Bzr8gz4zOvc6/zrzOsSDOsc69z4TOuc66zrXOuc68zq3Ovc6/z4U6ICVzIgorCisjOiBhcmNoaXZlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHRyZWUgb2JqZWN0OiAlcyIKK21zZ3N0ciAizrTOtc69IM61zq/Ovc6xzrkgzrHOvc+EzrnOus61zq/OvM61zr3OvyDOtM6tzr3PhM+Bzr/PhTogJXMiCisKKyM6IGFyY2hpdmUuYzo0MjQKK21zZ2lkICJjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVudHJhY2tlZCIKK21zZ3N0ciAizr8gz4TPgc6tz4fPic69IM+GzqzOus61zrvOv8+CIM61z4HOs86xz4POr86xz4IgzrTOtc69IM+AzrHPgc6xzrrOv867zr/Phc64zrXOr8+EzrHOuSIKKworIzogYXJjaGl2ZS5jOjQ1NQorbXNnaWQgImZtdCIKK21zZ3N0ciAizrzPgc+GLiIKKworIzogYXJjaGl2ZS5jOjQ1NQorbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICLOvM6/z4HPhs6uIM6xz4HPh861zrnOv864zq7Ous63z4IiCisKKyM6IGFyY2hpdmUuYzo0NTYgYnVpbHRpbi9sb2cuYzoxNTQ5Cittc2dpZCAicHJlZml4IgorbXNnc3RyICLPgM+Bz4zOuM61zrzOsSIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgIs+Az4HOv8+DzrjOrs66zrcgz4TOv8+FIM+Az4HOv864zq3OvM6xz4TOv8+CIM+DzrUgzrrOrM64zrUgz4zOvc6/zrzOsSDOtM65zrHOtM+Bzr/OvM6uz4Igz4PPhM63zr0gzrHPgc+HzrXOuc6/zrjOrs66zrciCisKKyM6IGFyY2hpdmUuYzo0NTggYnVpbHRpbi9ibGFtZS5jOjgyMCBidWlsdGluL2JsYW1lLmM6ODIxIGJ1aWx0aW4vY29uZmlnLmM6MTI5CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTA5MSBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTA5MyBidWlsdGluL2dyZXAuYzo4OTUKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUgYnVpbHRpbi9scy1maWxlcy5jOjU2MCBidWlsdGluL2xzLWZpbGVzLmM6NTYzCisjOiBidWlsdGluL25vdGVzLmM6NDEyIGJ1aWx0aW4vbm90ZXMuYzo1NzggYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjMKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNjIKK21zZ2lkICJmaWxlIgorbXNnc3RyICLOsc+Bz4fOtc6vzr8iCisKKyM6IGFyY2hpdmUuYzo0NTkgYnVpbHRpbi9hcmNoaXZlLmM6OTAKK21zZ2lkICJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiCittc2dzdHIgIs6xz4HPh861zrnOv864zq3PhM63z4POtyDPg861IM6xz4XPhM+MIM+Ezr8gzrHPgc+HzrXOr86/IgorCisjOiBhcmNoaXZlLmM6NDYxCittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDYyCittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDYzCittc2dpZCAic3RvcmUgb25seSIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDY0Cittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICLPhM6xz4fPjc+EzrXPgc63IM+Dz4XOvM+Azq/Otc+DzrciCisKKyM6IGFyY2hpdmUuYzo0NzIKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgIs66zrHOu8+Nz4TOtc+Bzrcgz4PPhc68z4DOr861z4POtyIKKworIzogYXJjaGl2ZS5jOjQ3NQorbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAiz4DOsc+BzqzOuM61z4POtyDPhc+Azr/Pg8+EzrfPgc65zrbPjM68zrXOvc+Jzr0gzrzOv8+Bz4bPjs69IM6xz4HPh861zrnOv864zq3PhM63z4POt8+CIgorCisjOiBhcmNoaXZlLmM6NDc3IGJ1aWx0aW4vYXJjaGl2ZS5jOjkxIGJ1aWx0aW4vY2xvbmUuYzoxMTIgYnVpbHRpbi9jbG9uZS5jOjExNQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NTkKK21zZ2lkICJyZXBvIgorbXNnc3RyICLOsc+Azr/OuC4iCisKKyM6IGFyY2hpdmUuYzo0NzggYnVpbHRpbi9hcmNoaXZlLmM6OTIKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDc5IGJ1aWx0aW4vYXJjaGl2ZS5jOjkzIGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTgKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0ODAgYnVpbHRpbi9hcmNoaXZlLmM6OTQKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ4NworbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0ODkKK21zZ2lkICJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDkxCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjUxMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGFyY2hpdmUgZm9ybWF0ICclcyciCittc2dzdHIgIs6GzrPOvc+Jz4PPhM63IM68zr/Pgc+Gzq4gzrHPgc+HzrXOuc6/zrjOrc+EzrfPg863z4IgJyVzJyIKKworIzogYXJjaGl2ZS5jOjUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJBcmd1bWVudCBub3Qgc3VwcG9ydGVkIGZvciBmb3JtYXQgJyVzJzogLSVkIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUtdGFyLmM6MTI1IGFyY2hpdmUtemlwLmM6MzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJlYW0gYmxvYiAlcyIKK21zZ3N0ciAizrTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM+Bzr/OriDPhM6/z4UgYmxvYiAlcyIKKworIzogYXJjaGl2ZS10YXIuYzoyNjAgYXJjaGl2ZS16aXAuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgZmlsZSBtb2RlOiAwJW8gKFNIQTE6ICVzKSIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLXRhci5jOjI4NyBhcmNoaXZlLXppcC5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLXRhci5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJyVzJyBmaWx0ZXIiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS10YXIuYzo0NjEKK21zZ2lkICJ1bmFibGUgdG8gcmVkaXJlY3QgZGVzY3JpcHRvciIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLXRhci5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbHRlciByZXBvcnRlZCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLXppcC5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoIGlzIG5vdCB2YWxpZCBVVEYtODogJXMiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS16aXAuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCB0b28gbG9uZyAoJWQgY2hhcnMsIFNIQTE6ICVzKTogJXMiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS16aXAuYzo0NzQgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUtemlwLmM6NjA5CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWVzdGFtcCB0b28gbGFyZ2UgZm9yIHRoaXMgc3lzdGVtOiAlPFBSSXVNQVg+IgorbXNnc3RyICIiCisKKyM6IGF0dHIuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBhdHRyLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG5vdCBhbGxvd2VkOiAlczolZCIKK21zZ3N0ciAiIgorCisjOiBhdHRyLmM6NDA4Cittc2dpZCAiIgorIk5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBpZ25vcmVkIGluIGdpdCBhdHRyaWJ1dGVzXG4iCisiVXNlICdcXCEnIGZvciBsaXRlcmFsIGxlYWRpbmcgZXhjbGFtYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGJpc2VjdC5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWRseSBxdW90ZWQgY29udGVudCBpbiBmaWxlICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IGJpc2VjdC5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhXG4iCittc2dzdHIgIiIKKworIzogYmlzZWN0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICLOnM63IM6tzrPOus+Fz4HOvyDPjM69zr/OvM6xIM+Fz4DOv86yzr/Ou86uz4IgJXMiCisKKyM6IGJpc2VjdC5jOjc1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisKKyM6IGJpc2VjdC5jOjc2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgbmV3LlxuIgorIlRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisKKyM6IGJpc2VjdC5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNvbWUgJXMgcmV2cyBhcmUgbm90IGFuY2VzdG9ycyBvZiB0aGUgJXMgcmV2LlxuIgorImdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLlxuIgorIk1heWJlIHlvdSBtaXN0b29rICVzIGFuZCAlcyByZXZzP1xuIgorbXNnc3RyICIiCisKKyM6IGJpc2VjdC5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAlcyBhbmQgWyVzXSBtdXN0IGJlIHNraXBwZWQuXG4iCisiU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0ICVzIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCAlcy5cbiIKKyJXZSBjb250aW51ZSBhbnl3YXkuIgorbXNnc3RyICIiCisKKyM6IGJpc2VjdC5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6IGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZFxuIgorbXNnc3RyICIiCisKKyM6IGJpc2VjdC5jOjg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJhICVzIHJldmlzaW9uIGlzIG5lZWRlZCIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo4ODQgYnVpbHRpbi9ub3Rlcy5jOjE3NyBidWlsdGluL3RhZy5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo5MzcgYnVpbHRpbi9tZXJnZS5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYmlzZWN0LmM6OTY3Cittc2dpZCAicmVhZGluZyBiaXNlY3QgcmVmcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYmlzZWN0LmM6OTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHdhcyBib3RoICVzIGFuZCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJpc2VjdC5jOjk5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGVzdGFibGUgY29tbWl0IGZvdW5kLlxuIgorIk1heWJlIHlvdSBzdGFydGVkIHdpdGggYmFkIHBhdGggcGFyYW1ldGVycz9cbiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIihyb3VnaGx5ICVkIHN0ZXApIgorbXNnaWRfcGx1cmFsICIocm91Z2hseSAlZCBzdGVwcykiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGxhc3QgJXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoICIocm91Z2hseSAlZAorIy4gc3RlcHMpIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBiaXNlY3QuYzoxMDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogJWQgcmV2aXNpb24gbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIKK21zZ2lkX3BsdXJhbCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJsYW1lLmM6MTc5MgorbXNnaWQgIi0tY29udGVudHMgYW5kIC0tcmV2ZXJzZSBkbyBub3QgYmxlbmQgd2VsbC4iCittc2dzdHIgIiIKKworIzogYmxhbWUuYzoxODA2Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbnRlbnRzIHdpdGggZmluYWwgY29tbWl0IG9iamVjdCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJsYW1lLmM6MTgyNworbXNnaWQgIi0tcmV2ZXJzZSBhbmQgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSBzcGVjaWZpZWQgbGF0ZXN0IGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBibGFtZS5jOjE4MzYgYnVuZGxlLmM6MTY0IHJlZi1maWx0ZXIuYzoyMDcxIHJlbW90ZS5jOjE5NDggc2VxdWVuY2VyLmM6MTk5MworIzogc2VxdWVuY2VyLmM6NDA2NCBidWlsdGluL2NvbW1pdC5jOjEwMDQgYnVpbHRpbi9sb2cuYzozNzggYnVpbHRpbi9sb2cuYzo5MzYKKyM6IGJ1aWx0aW4vbG9nLmM6MTQyMCBidWlsdGluL2xvZy5jOjE3OTYgYnVpbHRpbi9sb2cuYzoyMDg2IGJ1aWx0aW4vbWVyZ2UuYzo0MDcKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEzNyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTIKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxOTIKK21zZ2lkICJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIKK21zZ3N0ciAizrcgzrHPgc+HzrnOus6/z4DOv86vzrfPg863IM+Ezr/PhSDOvM6/zr3Ov8+AzrHPhM65zr/PjSDOtc66zrTPjM+DzrXPic69IM6xz4DOrc+Ez4XPh861IgorCisjOiBibGFtZS5jOjE4NTQKK21zZ2lkICIiCisiLS1yZXZlcnNlIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgcmFuZ2UgYWxvbmcgZmlyc3QtcGFyZW50IGNoYWluIgorbXNnc3RyICIiCisKKyM6IGJsYW1lLmM6MTg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHBhdGggJXMgaW4gJXMiCittc2dzdHIgIs60zrXOvSDPhc+AzqzPgc+HzrXOuSDPhM6tz4TOv865zrEgzrTOuc6xzrTPgc6/zrzOriAlcyDPg8+Ezr8gJXMiCisKKyM6IGJsYW1lLmM6MTg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgzrHOvc6szrPOvc+Jz4POtyDPhM6/z4UgYmxvYiAlcyDOs865zrEgz4TOtyDOtM65zrHOtM+Bzr/OvM6uICVzIgorCisjOiBicmFuY2guYzo1MgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCi0iVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZVxuIgotIlRjbCBiaW5hcnkgZGlzdHJpYnV0ZWQgYnkgQ3lnd2luLiIKKyJBZnRlciBmaXhpbmcgdGhlIGVycm9yIGNhdXNlIHlvdSBtYXkgdHJ5IHRvIGZpeCB1cFxuIgorInRoZSByZW1vdGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYnkgaW52b2tpbmdcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgogbXNnc3RyICIiCiAiXG4iCi0izpHPhc+Ez4wgzr/Phs61zq/Ou861z4TOsc65IM+DzrUgzq3Ovc6xIM6zzr3Pic+Dz4TPjCDOuM6tzrzOsSDOvM61IM+Ezr9cbiIKLSLOtc66z4TOtc67zq3Pg865zrzOvyBUY2wgz4DOv8+FIM60zrnOsc69zq3OvM61z4TOsc65IM68zrUgz4TOvyBDeWd3aW4uIgorIs6Rz4bOv8+NIM+Gz4TOuc6szr7Otc+EzrUgz4TOt869IM6xzrnPhM6vzrEgz4TOv8+FIM+Dz4bOrM67zrzOsc+Ezr/PgiDOvM+Azr/Pgc61zq/PhM61IM69zrEgzrTOv866zrnOvM6sz4POtc+EzrUgzr3OsSDPhs+EzrnOrM6+zrXPhM61XG4iCisiz4TOuc+CIM+AzrvOt8+Bzr/Phs6/z4HOr861z4Igz4DOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgiDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3Ov8+FIM66zrHOu8+Ozr3PhM6xz4JcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgogCi0jOiBnaXQtZ3VpLnNoOjI3OTcKLSMsIHRjbC1mb3JtYXQKKyM6IGJyYW5jaC5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAizpTOtSDOs86vzr3Otc+EzrHOuSDOv8+BzrnPg868z4zPgiDPhM6/z4UgJXMgz4nPgiDPhM6/IM+Az4HOv8+CIM+EzrEgz4DOrM69z4kgz4TOv8+FIM61zrHPhc+Ezr/PjSDPhM6/z4UuIgorCisjOiBicmFuY2guYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjExOAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkEgYnJhbmNoIG5hbWVkICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjIxMgorbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSByZXF1ZXN0ZWQgdXBzdHJlYW0gYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIs6/IM+Az4HOv8+CIM+EzrEgz4DOrM69z4kgzrrOu86szrTOv8+CICclcycgz4DOv8+FIM62zrfPhM6uzrjOt866zrUgzrTOtc69IM+Fz4DOrM+Bz4fOtc65IgorCisjOiBicmFuY2guYzoyMzYKIG1zZ2lkICIiCiAiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyBvbiBiYXNpbmcgeW91ciB3b3JrIG9uIGFuIHVwc3RyZWFtXG4iCisiYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXQgdGhlIHJlbW90ZSwgeW91IG1heSBuZWVkIHRvXG4iCisicnVuIFwiZ2l0IGZldGNoXCIgdG8gcmV0cmlldmUgaXQuXG4iCiAiXG4iCi0iQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgotImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgotInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCi0ifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyB0byBwdXNoIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggdGhhdFxuIgorIndpbGwgdHJhY2sgaXRzIHJlbW90ZSBjb3VudGVycGFydCwgeW91IG1heSB3YW50IHRvIHVzZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB0byBzZXQgdGhlIHVwc3RyZWFtIGNvbmZpZyBhcyB5b3UgcHVzaC4iCiBtc2dzdHIgIiIKLSJcbiIKLSJcbiIKLSLOiM69zrEgzrrOsc67z4wgz4XPgM6/zrrOsc+EzqzPg8+EzrHPhM6/IM6zzrnOsSDPhM6/ICVzXG4iCi0izrXOr869zrHOuSDOtyDPhM6/z4DOv864zq3PhM63z4POtyDPhM65zrzPjs69IM6zzrnOsSDPhM65z4Igz4HPhc64zrzOr8+DzrXOuc+CXG4iCi0idXNlci5uYW1lIM66zrHOuSB1c2VyLmVtYWlsIM+Dz4TOvyDPgM+Bzr/Pg8+Jz4DOuc66z4wgz4POsc+CXG4iCi0izrHPgc+HzrXOr86/IH4vLmdpdGNvbmZpZyAuXG4iCiAKLSM6IGxpYi9hYm91dC50Y2w6MjYKLW1zZ2lkICJnaXQtZ3VpIC0gYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIEdpdC4iCi1tc2dzdHIgImdpdC1ndWkgLSDOrc69zrEgzrPPgc6xz4bOuc66z4wgz4DOtc+BzrnOss6szrvOu86/zr0gzrPOuc6xIM+Ezr8gR2l0LiIKKyM6IGJyYW5jaC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIs6czrcgzq3Os866z4XPgc6/IM+Mzr3Ov868zrEgzrHOvc+EzrnOus61zrnOvM6tzr3Ov8+FOiAnJXMnLiIKIAotIzogbGliL2JsYW1lLnRjbDo3NwotbXNnaWQgIkZpbGUgVmlld2VyIgotbXNnc3RyICLOlc+GzrHPgc68zr/Os86uIM6gz4HOv86yzr/Ou86uz4IgzpHPgc+HzrXOr86/z4UiCisjOiBicmFuY2guYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAizpHOvM+Gzq/Pg863zrzOvyDPjM69zr/OvM6xIM6xzr3PhM65zrrOtc65zrzOrc69zr/PhTogJyVzJy4iCiAKLSM6IGxpYi9ibGFtZS50Y2w6ODEKLW1zZ2lkICJDb21taXQ6IgotbXNnc3RyICLOpc+Azr/Oss6/zrvOrjoiCisjOiBicmFuY2guYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgYnJhbmNoIHBvaW50OiAnJXMnLiIKK21zZ3N0ciAizpzOtyDOrc6zzrrPhc+Bzr8gz4POt868zrXOr86/IM66zrvOrM60zr/PhTogJyVzJy4iCiAKLSM6IGxpYi9ibGFtZS50Y2w6MjY0Ci1tc2dpZCAiQ29weSBDb21taXQiCi1tc2dzdHIgIs6Rzr3PhM65zrPPgc6xz4bOriDOpc+Azr/Oss6/zrvOrs+CIgotCi0jOiBsaWIvYmxhbWUudGNsOjM4NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlYWRpbmcgJXMuLi4iCi1tc2dzdHIgIs6Rzr3OrM6zzr3Pic+DzrcgJXMuLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6NDg4Ci1tc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCi1tc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM+Gz4zPgc+Ez4nPg863IM+Dz4fOv867zq/Pic69IM+AzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IgzrHOvc+EzrnOs8+BzrHPhs6uz4IvzrzOtc+EzrHOus6vzr3Ot8+DzrfPgi4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo1MDgKLW1zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCi1tc2dzdHIgIs6zz4HOsc68zrzOrc+CIM+Dz4fOv867zrnOsc+DzrzOrc69zrXPgiIKLQotIzogbGliL2JsYW1lLnRjbDo2ODkKLW1zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgotbXNnc3RyICLOk86vzr3Otc+EzrHOuSDPhs+Mz4HPhM+Jz4POtyDPg8+Hzr/Ou86vz4nOvSDOsc+Bz4fOuc66zq7PgiDPhM6/z4DOv864zrXPg86vzrHPgi4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo2OTIKLW1zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKLW1zZ3N0ciAizojOs865zr3OtSDOv867zr/Ous67zq7Pgc+Jz4POtyDPhM6/z4Ugz4PPh86/zrvOuc6xz4POvM6/z40uIgotCi0jOiBsaWIvYmxhbWUudGNsOjc0NgotbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKLW1zZ3N0ciAizqbPjM+Bz4TPic+Dzrcgz4PPh86/zrvOr86/z4UuLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODAyCi1tc2dpZCAiQXV0aG9yOiIKLW1zZ3N0ciAizpTOt868zrnOv8+Fz4HOs8+Mz4I6IgotCi0jOiBsaWIvYmxhbWUudGNsOjgwNgotbXNnaWQgIkNvbW1pdHRlcjoiCi1tc2dzdHIgIs6lz4DOv86yzr/Ou86tzrHPgjoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODExCi1tc2dpZCAiT3JpZ2luYWwgRmlsZToiCi1tc2dzdHIgIs6Rz4HPh865zrrPjCDOkc+Bz4fOtc6vzr86IgotCi0jOiBsaWIvYmxhbWUudGNsOjkyNQotbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgotbXNnc3RyICLOkc+Bz4fOuc66zqwgzpHPgM+MOiIKLQotIzogbGliL2JsYW1lLnRjbDo5MzEKLW1zZ2lkICJJbiBGaWxlOiIKLW1zZ3N0ciAizqPPhM6/IM6Rz4HPh861zq/OvzoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6OTM2Ci1tc2dpZCAiQ29waWVkIE9yIE1vdmVkIEhlcmUgQnk6IgotbXNnc3RyICLOkc69z4TOuc6zz4HOrM+GzrfOus61IM6uIM6czrXPhM6xzrrOuc69zq7OuM63zrrOtSDOlc60z44gzpHPgM+MOiIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTQgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTkKLW1zZ2lkICJDaGVja291dCBCcmFuY2giCi1tc2dzdHIgIs6Vzr7Osc6zz4nOs86uIM6azrvOrM60zr/PhSIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjMKLW1zZ2lkICJDaGVja291dCIKLW1zZ3N0ciAizpXOvs6xzrPPic6zzq4iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI3IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjMyIGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMCBsaWIvYnJvd3Nlci50Y2w6MjgyCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUyMiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQzIGxpYi9tZXJnZS50Y2w6MTcxCi0jOiBsaWIvb3B0aW9uLnRjbDoxMDMgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MiBsaWIvdHJhbnNwb3J0LnRjbDo5NwotbXNnaWQgIkNhbmNlbCIKLW1zZ3N0ciAizpHOus+Nz4HPic+DzrciCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMyIGxpYi9icm93c2VyLnRjbDoyODcKLW1zZ2lkICJSZXZpc2lvbiIKLW1zZ3N0ciAizpHOvc6xzrjOtc+Oz4HOt8+DzrciCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM2IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2OSBsaWIvb3B0aW9uLnRjbDoyNDIKLW1zZ2lkICJPcHRpb25zIgotbXNnc3RyICLOlc+AzrnOu86/zrPOrc+CIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTIKLW1zZ2lkICJGZXRjaCBUcmFja2luZyBCcmFuY2giCi1tc2dzdHIgIs6Rzr3OrM66z4TOt8+DzrcgzprOu86szrTOv8+FIM6gzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ0Ci1tc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgotbXNnc3RyICLOkc+Azr/Ous+MzrvOu863z4POtyDOkc+Az4wgzqTOv8+AzrnOus+MIM6azrvOrM60zr8iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMgotbXNnaWQgIkNyZWF0ZSBCcmFuY2giCi1tc2dzdHIgIs6UzrfOvM65zr/Phc+BzrPOr86xIM6azrvOrM60zr/PhSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI3Ci1tc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCi1tc2dzdHIgIs6UzrfOvM65zr/Phc+BzrPOr86xIM6dzq3Ov8+FIM6azrvOrM60zr/PhSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzcxCi1tc2dpZCAiQ3JlYXRlIgotbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQwCi1tc2dpZCAiQnJhbmNoIE5hbWUiCi1tc2dzdHIgIs6Mzr3Ov868zrEgzprOu86szrTOv8+FIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMKLW1zZ2lkICJOYW1lOiIKLW1zZ3N0ciAizozOvc6/zrzOsToiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo1OAotbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaCBOYW1lIgotbXNnc3RyICLOo8+FzrzPhs+Jzr3Or86xIM6fzr3PjM68zrHPhM6/z4IgzprOu86szrTOv8+FIM6gzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2NgotbXNnaWQgIlN0YXJ0aW5nIFJldmlzaW9uIgotbXNnc3RyICLOkc+Bz4fOuc66zq4gzpHOvc6xzrjOtc+Oz4HOt8+DzrciCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgotbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgotbXNnc3RyICLOlc69zrfOvM6tz4HPic+DzrcgzqXPgM6sz4HPh86/zr3PhM6xIM6azrvOrM60zr/PhToiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQotIywgZnV6enkKLW1zZ2lkICJObyIKLW1zZ3N0ciAizozPh865IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODAKLW1zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKLW1zZ3N0ciAizqPPhc6zz4fPjs69zrXPhc+DzrcgzpXPgM65z4TOrM+Hz4XOvc+DzrfPgiDOnM+Mzr3OvyIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTE0Ci1tc2dpZCAiUmVzZXQiCi1tc2dzdHIgIs6Vz4DOsc69zrHPhs6/z4HOrCIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Ci1tc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCi1tc2dzdHIgIs6Vzr7Osc6zz4nOs86uIM6czrXPhM6sIM+EzrcgzpTOt868zrnOv8+Fz4HOs86vzrEiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzEKLW1zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKLW1zZ3N0ciAizqDOsc+BzrHOus6xzrvPjiDOtc+AzrnOu86tzr7PhM61IM6tzr3Osc69IM66zrvOrM60zr8gz4DOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgi4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCisjOiBicmFuY2guYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IGF0ICclcyciCiBtc2dzdHIgIiIKLSLOnyDOus67zqzOtM6/z4Igz4DOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgiAlcyDOtM61zr0gzrXOr869zrHOuSDOus67zqzOtM6/z4Igz4DOv8+FIM6yz4HOr8+DzrrOtc+EzrHOuSDPg8+Ezr8gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gIgotIs6xz4DOv864zrXPhM6uz4HOuc6/LiIKIAotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1MyBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6ODYKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIgotbXNnc3RyICLOoM6xz4HOsc66zrHOu8+OIM60z47Pg8+EzrUgzq3Ovc6xIM+Mzr3Ov868zrEgzrrOu86szrTOv8+FLiIKKyM6IGJyYW5jaC5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIG9mIHdvcmtpbmcgdHJlZSAlcyBpcyBub3QgdXBkYXRlZCIKK21zZ3N0ciAiIgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTY0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMDYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIGJyYW5jaCBuYW1lLiIKLW1zZ3N0ciAiJyVzJyDOtM61zr0gzrXOr869zrHOuSDOsc+Azr/OtM61zrrPhM+MIM+Mzr3Ov868zrEgzrrOu86szrTOv8+FLiIKKyM6IGJ1bmRsZS5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgbG9vayBsaWtlIGEgdjIgYnVuZGxlIGZpbGUiCittc2dzdHIgIiIKIAotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE1Ci1tc2dpZCAiRGVsZXRlIEJyYW5jaCIKLW1zZ3N0ciAizpTOuc6xzrPPgc6xz4bOriDOms67zqzOtM6/z4UiCisjOiBidW5kbGUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgIiIKIAotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjIwCi1tc2dpZCAiRGVsZXRlIExvY2FsIEJyYW5jaCIKLW1zZ3N0ciAizpTOuc6xzrPPgc6xz4bOriDOpM6/z4DOuc66zr/PjSDOms67zqzOtM6/z4UiCisjOiBidW5kbGUuYzo5MCByZXJlcmUuYzo0ODAgcmVyZXJlLmM6NjkwIHNlcXVlbmNlci5jOjIyMTUgc2VxdWVuY2VyLmM6Mjc2MworIzogYnVpbHRpbi9jb21taXQuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAizrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDPhM6/IM6szr3Ov865zrPOvM6xIM+Ezr/PhSAnJXMnIgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzcKLW1zZ2lkICJMb2NhbCBCcmFuY2hlcyIKLW1zZ3N0ciAizqTOv8+AzrnOus6/zq8gzprOu86szrTOv865IgorIzogYnVuZGxlLmM6MTQzCittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyB0aGVzZSBwcmVyZXF1aXNpdGUgY29tbWl0czoiCittc2dzdHIgIiIKIAotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUyCi1tc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCi1tc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4gzpzPjM69zr8gzpXOrM69IM6Vzq/Ovc6xzrkgzqPPhc6zz4fPic69zrXPhc68zq3Ovc6/IM6czrUiCisjOiBidW5kbGUuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTQKLW1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIHRlc3QuKSIKLW1zZ3N0ciAizqDOrM69z4TOsSAozpzOtyDOtM65zrXOvc61z4HOs863zrjOtc6vIM60zr/Ous65zrzOriDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CLikiCisjOiBidW5kbGUuYzoyMDEKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAiIgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgotbXNnc3RyICLOn865IM61zr7Ors+CIM66zrvOrM60zr/OuSDOtM61zr0gzrXOr869zrHOuSDPgM67zq7Pgc+Jz4Igz4PPhc6zz4fPic69zrXPhc68zq3Ovc6/zrkgzrzOtSDPhM6/ICVzOiIKKyM6IGJ1bmRsZS5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCiAKLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUKKyM6IGJ1bmRsZS5jOjI2OQorbXNnaWQgInVuYWJsZSB0byBkdXAgYnVuZGxlIGRlc2NyaXB0b3IiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6Mjc2Cittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzoyODcKK21zZ2lkICJwYWNrLW9iamVjdHMgZGllZCIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzozMjkKK21zZ2lkICJyZXYtbGlzdCBkaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzo0NTcgYnVpbHRpbi9sb2cuYzoxOTMgYnVpbHRpbi9sb2cuYzoxNzAxIGJ1aWx0aW4vc2hvcnRsb2cuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzo0NjUKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjUwMAorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAiIgorCisjOiBjb2xvci5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yIHZhbHVlOiAlLipzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC5jOjUwIHNlcXVlbmNlci5jOjI1NjcgYnVpbHRpbi9hbS5jOjM1NSBidWlsdGluL2FtLmM6Mzk5CisjOiBidWlsdGluL2FtLmM6MTM3NSBidWlsdGluL2FtLmM6MjAxOSBidWlsdGluL3JlcGxhY2UuYzozNzYKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiIgorCisjOiBjb21taXQuYzoxOTMKIG1zZ2lkICIiCi0iUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC4gXG4iCisiU3VwcG9ydCBmb3IgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIGlzIGRlcHJlY2F0ZWRcbiIKKyJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIEdpdCB2ZXJzaW9uLlxuIgogIlxuIgotIiBEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKKyJQbGVhc2UgdXNlIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIlxuIgorInRvIGNvbnZlcnQgdGhlIGdyYWZ0cyBpbnRvIHJlcGxhY2UgcmVmcy5cbiIKKyJcbiIKKyJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiIgogbXNnc3RyICIiCi0izpcgzrHOvc6szrrPhM63z4POtyDOtM65zrXOs8+BzrHOvM68zq3Ovc+Jzr0gzrrOu86szrTPic69IM61zq/Ovc6xzrkgzrTPjc+DzrrOv867zrcuXG4iCi0iXG4iCi0izpTOuc6xzrPPgc6xz4bOriDPhM+Jzr0gzrXPgM65zrvOtc6zzrzOrc69z4nOvSDOus67zqzOtM+Jzr07IgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCi0jLCB0Y2wtZm9ybWF0CisjOiBjb21taXQuYzoxMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIs6XIM+Fz4DOv86zz4HOsc+Gzq4gJXMgzq3Ph861zrkgzrzOtyDOsc6+zrnPjM+AzrnPg8+Ezrcgz4XPgM6/zrPPgc6xz4bOriBHUEcsIM60zq7OuM61zr0gzrHPgM+MICVzLiIKKworIzogY29tbWl0LmM6MTEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAizpcgz4XPgM6/zrLOv867zq4gJXMgzq3Ph861zrkgzrvOrM64zr/PgiDPhc+Azr/Os8+BzrHPhs6uIEdQRyDOtM6uzrjOtc69IM6xz4DPjCAlcy4iCisKKyM6IGNvbW1pdC5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlLiIKK21zZ3N0ciAizpcgz4XPgM6/zrLOv867zq4gJXMgzrTOtc69IM6tz4fOtc65IM+Fz4DOv86zz4HOsc+Gzq4gR1BHLiIKKworIzogY29tbWl0LmM6MTEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIGJ5ICVzXG4iCittc2dzdHIgIs6XIM+Fz4DOv86yzr/Ou86uICVzIM6tz4fOtc65IM+Dz4nPg8+Ezq4gz4XPgM6/zrPPgc6xz4bOriBHUEcgzrHPgM+MICVzXG4iCisKKyM6IGNvbW1pdC5jOjEzODUKIG1zZ2lkICIiCi0iRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKKyJXYXJuaW5nOiBjb21taXQgbWVzc2FnZSBkaWQgbm90IGNvbmZvcm0gdG8gVVRGLTguXG4iCisiWW91IG1heSB3YW50IHRvIGFtZW5kIGl0IGFmdGVyIGZpeGluZyB0aGUgbWVzc2FnZSwgb3Igc2V0IHRoZSBjb25maWdcbiIKKyJ2YXJpYWJsZSBpMThuLmNvbW1pdGVuY29kaW5nIHRvIHRoZSBlbmNvZGluZyB5b3VyIHByb2plY3QgdXNlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JhcGggZmlsZSAlcyBpcyB0b28gc21hbGwiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImdyYXBoIHNpZ25hdHVyZSAlWCBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUgJVgiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImdyYXBoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTczCittc2dpZCAiY2h1bmsgbG9va3VwIHRhYmxlIGVudHJ5IG1pc3Npbmc7IGdyYXBoIGZpbGUgbWF5IGJlIGluY29tcGxldGUiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImltcHJvcGVyIGNodW5rIG9mZnNldCAlMDh4JTA4eCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2h1bmsgaWQgJTA4eCBhcHBlYXJzIG11bHRpcGxlIHRpbWVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6NjcxIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHR5cGUgb2Ygb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjcwNAorbXNnaWQgIkxvYWRpbmcga25vd24gY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6NzIwCittc2dpZCAiRXhwYW5kaW5nIHJlYWNoYWJsZSBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzo3MzIKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjc1MgorbXNnaWQgIkNvbXB1dGluZyBjb21taXQgZ3JhcGggZ2VuZXJhdGlvbiBudW1iZXJzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBhZGRpbmcgcGFjayAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyBpbmRleCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6ODk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBmcm9tICVkIHJlZnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBjb21taXQtZ3JhcGguYzo5MzAKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBhbW9uZyBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzo5NDMKK21zZ2lkICJDb3VudGluZyBkaXN0aW5jdCBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzo5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIGNvbW1pdCBncmFwaCBmb3JtYXQgY2Fubm90IHdyaXRlICVkIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6OTY1Cittc2dpZCAiRmluZGluZyBleHRyYSBlZGdlcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6OTg5Cittc2dpZCAidG9vIG1hbnkgY29tbWl0cyB0byB3cml0ZSBncmFwaCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzo5OTYgbWlkeC5jOjc2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTAzNgorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzcyIKK21zZ2lkX3BsdXJhbCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3NlcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExMDkKK21zZ2lkICJ0aGUgY29tbWl0LWdyYXBoIGZpbGUgaGFzIGluY29ycmVjdCBjaGVja3N1bSBhbmQgaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTE1MworbXNnaWQgIlZlcmlmeWluZyBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiIgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGNlZWRlZCBtYXhpbXVtIGluY2x1ZGUgZGVwdGggKCVkKSB3aGlsZSBpbmNsdWRpbmdcbiIKKyJcdCVzXG4iCisiZnJvbVxuIgorIlx0JXNcbiIKKyJUaGlzIG1pZ2h0IGJlIGR1ZSB0byBjaXJjdWxhciBpbmNsdWRlcy4iCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBleHBhbmQgaW5jbHVkZSBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTUwCittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjE5MAorbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gdmFyaWFibGUgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6Mzc4IHNlcXVlbmNlci5jOjIzMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjQyMCBjb25maWcuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29uZmlnIHBhcmFtZXRlcjogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGZvcm1hdCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGJsb2IgJXMiCittc2dzdHIgIs67zqzOuM6/z4IgzrPPgc6xzrzOvM6uIM+Bz4XOuM68zq/Pg861z4nOvSAlZCDPg8+Ezr8gYmxvYiAlcyIKKworIzogY29uZmlnLmM6Nzk3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBmaWxlICVzIgorbXNnc3RyICLOu86szrjOv8+CIM6zz4HOsc68zrzOriDPgc+FzrjOvM6vz4POtc+Jzr0gJWQgz4PPhM6/IM6xz4HPh861zq/OvyAlcyIKKworIzogY29uZmlnLmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAizrvOrM64zr/PgiDOs8+BzrHOvM68zq4gz4HPhc64zrzOr8+DzrXPic69ICVkIM+Dz4TOvyBzdGFuZGFyZCBpbnB1dCIKKworIzogY29uZmlnLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdWJtb2R1bGUtYmxvYiAlcyIKK21zZ3N0ciAizrvOrM64zr/PgiDOs8+BzrHOvM68zq4gz4HPhc64zrzOr8+DzrXPic69ICVkIM+Dz4TOvyBibG9iIM+Fz4DOv861zr3PjM+EzrfPhM6xz4IgJXMiCisKKyM6IGNvbmZpZy5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gY29tbWFuZCBsaW5lICVzIgorbXNnc3RyICLOu86szrjOv8+CIM6zz4HOsc68zrzOriDPgc+FzrjOvM6vz4POtc+Jzr0gJWQgz4PPhM63IM6zz4HOsc68zrzOriDOtc69z4TOv867z47OvSAlcyIKKworIzogY29uZmlnLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiAlcyIKK21zZ3N0ciAizrvOrM64zr/PgiDOs8+BzrHOvM68zq4gz4HPhc64zrzOr8+DzrXPic69ICVkIM+Dz4TOvyAlcyIKKworIzogY29uZmlnLmM6OTUyCittc2dpZCAib3V0IG9mIHJhbmdlIgorbXNnc3RyICLOtc66z4TPjM+CIM6/z4HOr8+Jzr0iCisKKyM6IGNvbmZpZy5jOjk1MgorbXNnaWQgImludmFsaWQgdW5pdCIKK21zZ3N0ciAizrzOtyDOrc6zzrrPhc+BzrcgzrzOv869zqzOtM6xIM68zq3PhM+BzrfPg863z4IiCisKKyM6IGNvbmZpZy5jOjk1OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogJXMiCittc2dzdHIgIs67zqzOuM6/z4IgzrHPgc65zrjOvM63z4TOuc66zq4gz4TOuc68zq4gz4HPjc64zrzOuc+DzrfPgiAnJXMnIM6zzrnOsSDPhM6/ICclcyc6ICVzIgorCisjOiBjb25maWcuYzo5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gYmxvYiAlczogJXMiCittc2dzdHIgIs67zqzOuM6/z4IgzrHPgc65zrjOvM63z4TOuc66zq4gz4TOuc68zq4gz4HPjc64zrzOuc+DzrfPgiAnJXMnIM6zzrnOsSDPhM6/ICclcycgz4PPhM6/IGJsb2IgJXM6ICVzIgorCisjOiBjb25maWcuYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gZmlsZSAlczogJXMiCittc2dzdHIgIs67zqzOuM6/z4IgzrHPgc65zrjOvM63z4TOuc66zq4gz4TOuc68zq4gz4HPjc64zrzOuc+DzrfPgiAnJXMnIM6zzrnOsSDPhM6/ICclcycgz4PPhM6/IM6xz4HPh861zq/OvyAlczogJXMiCisKKyM6IGNvbmZpZy5jOjk2OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogJXMiCittc2dzdHIgIs67zqzOuM6/z4IgzrHPgc65zrjOvM63z4TOuc66zq4gz4TOuc68zq4gz4HPjc64zrzOuc+DzrfPgiAnJXMnIM6zzrnOsSDPhM6/ICclcycgz4PPhG8gc3RhbmRhcmQgaW5wdXQ6ICVzIgorCisjOiBjb25maWcuYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6ICVzIgorbXNnc3RyICIiCisizrvOrM64zr/PgiDOsc+BzrnOuM68zrfPhM65zrrOriDPhM65zrzOriDPgc+NzrjOvM65z4POt8+CICclcycgzrPOuc6xIM+Ezr8gJyVzJyDPg8+Ezr8gYmxvYiDPhc+Azr/Otc69z4zPhM63z4TOsc+CICVzOiAlcyIKKworIzogY29uZmlnLmM6OTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiCittc2dzdHIgIiIKKyLOu86szrjOv8+CIM6xz4HOuc64zrzOt8+EzrnOus6uIM+EzrnOvM6uIM+Bz43OuM68zrnPg863z4IgJyVzJyDOs865zrEgz4TOvyAnJXMnIM+Dz4TOtyDOs8+BzrHOvM68zq4gzrXOvc+Ezr/Ou8+Ozr0gJXM6ICVzIgorCisjOiBjb25maWcuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXM6ICVzIgorbXNnc3RyICLOu86szrjOv8+CIM6xz4HOuc64zrzOt8+EzrnOus6uIM+EzrnOvM6uIM+Bz43OuM68zrnPg863z4IgJyVzJyDOs865zrEgz4TOvyAnJXMnIM+Dz4TOvyAlczogJXMiCisKKyM6IGNvbmZpZy5jOjEwNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxMDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIM6zzrnOsSDPhM6/ICclcycgzrTOtc69IM61zq/Ovc6xzrkgzq3Os866z4XPgc63IM+Hz4HOv869zr/Pg86uzrzOsc69z4POtyIKKworIzogY29uZmlnLmM6MTE3MworIywgYy1mb3JtYXQKK21zZ2lkICJhYmJyZXYgbGVuZ3RoIG91dCBvZiByYW5nZTogJWQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTE4NyBjb25maWcuYzoxMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB6bGliIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjEyOTAKK21zZ2lkICJjb3JlLmNvbW1lbnRDaGFyIHNob3VsZCBvbmx5IGJlIG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTMyMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjE0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTQyMgorbXNnaWQgIm11c3QgYmUgb25lIG9mIG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsIHVwc3RyZWFtIG9yIGN1cnJlbnQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTQ4MSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTYwMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBjb25maWcgYmxvYiBvYmplY3QgJyVzJyIKK21zZ3N0ciAizrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDOvc6xIM+Gzr/Pgc+Ez4nOuM61zq8gz4TOvyDOsc69z4TOuc66zrXOr868zrXOvc6/IGJsb2Igz4HPhc64zrzOr8+DzrXPic69ICclcyciCisKKyM6IGNvbmZpZy5jOjE2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBibG9iIgorbXNnc3RyICLOtyDOsc69zrHPhs6/z4HOrCAnJXMnIM60zrUgzrTOtc6vz4fOvc61zrkgz4POtSDOus6sz4DOv865zr8gYmxvYiIKKworIzogY29uZmlnLmM6MTYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBjb25maWcgYmxvYiAnJXMnIgorbXNnc3RyICLOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM6xzr3Osc62zq7PhM63z4POtyBibG9iIM+Bz4XOuM68zq/Pg861z4nOvSAnJXMnIgorCisjOiBjb25maWcuYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNzA1Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjAzNworbXNnaWQgInVua25vd24gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgJXM6ICclcyciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvcmUudW50cmFja2VkQ2FjaGUgdmFsdWUgJyVzJzsgdXNpbmcgJ2tlZXAnIGRlZmF1bHQgdmFsdWUiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgdmFsdWUgJyVkJyBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxMDAiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyVzJyBmcm9tIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIHZhcmlhYmxlICclcycgaW4gZmlsZSAnJXMnIGF0IGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI0MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyNDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI3MTYgY29uZmlnLmM6MzA0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyNzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6Mjc2MiBidWlsdGluL2NvbmZpZy5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdHRlcm46ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI3ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyODAwIGNvbmZpZy5jOjMwNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnN0YXQgb24gJXMgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1tYXAgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyODIwIGNvbmZpZy5jOjMwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2htb2Qgb24gJXMgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI5MDUgY29uZmlnLmM6MzE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjkzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyOTQxIGJ1aWx0aW4vcmVtb3RlLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1bnNldCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjMwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjMxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyB2YWx1ZSBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NjEKK21zZ2lkICJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVwb24gaW5pdGlhbCBjb250YWN0IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo2MworbXNnaWQgIiIKKyJDb3VsZCBub3QgcmVhZCBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LlxuIgorIlxuIgorIlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzIHJpZ2h0c1xuIgorImFuZCB0aGUgcmVwb3NpdG9yeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0ICclcyciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IGZlYXR1cmUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTE0Cittc2dpZCAiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgY2FwYWJpbGl0aWVzIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgY2FwYWJpbGl0aWVzIGFmdGVyIGZpcnN0IGxpbmUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MjUyCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgY2FwYWJpbGl0aWVzXnt9IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYWxsb3cgc2hhLTEsIGdvdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoyNzUKK21zZ2lkICJyZXBvc2l0b3J5IG9uIHRoZSBvdGhlciBlbmQgY2Fubm90IGJlIHNoYWxsb3ciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjMxMworbXNnaWQgImludmFsaWQgcGFja2V0IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbHMtcmVmcyByZXNwb25zZTogJXMiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjQ0NQorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIHJlZiBsaXN0aW5nIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgJyVzJyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo1OTUKK21zZ2lkICJ1bmFibGUgdG8gc2V0IFNPX0tFRVBBTElWRSBvbiBzb2NrZXQiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjYzNSBjb25uZWN0LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkxvb2tpbmcgdXAgJXMgLi4uICIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkxvb2tpbmcgdXAgJXMgLi4uICIKKyM6IGNvbm5lY3QuYzo2NDMgY29ubmVjdC5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZG9uZS5cbiIKKyJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgorbXNnc3RyICIiCisizr/Ou86/zrrOu863z4HPjs64zrfOus61LlxuIgorIs6jz43Ovc60zrXPg863IM+Dz4TOvyAlcyAocG9ydCAlcykgLi4uICIKKworIzogY29ubmVjdC5jOjY2NSBjb25uZWN0LmM6NzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gY29ubmVjdCB0byAlczpcbiIKICIlcyIKIG1zZ3N0ciAiIgotIs6Rz4DOv8+Ez4XPh86vzrEgzrTOuc6xzrPPgc6xz4bOrs+CIM66zrvOrM60z4nOvTpcbiIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKKyM6IGNvbm5lY3QuYzo2NzEgY29ubmVjdC5jOjc0OAorbXNnaWQgImRvbmUuIgorbXNnc3RyICLOv867zr/Ous67zrfPgc+OzrjOt866zrUuIgorCisjOiBjb25uZWN0LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzICglcykiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHBvcnQgJXMiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjg0NSBjb25uZWN0LmM6MTE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIGhvc3RuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcG9ydCAnJXMnIGJsb2NrZWQiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhcnQgcHJveHkgJXMiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjkyNAorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkOyBzZWUgJ2dpdCBoZWxwIHB1bGwnIGZvciB2YWxpZCB1cmwgc3ludGF4IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoxMTE5Cittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTEzMQorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjExNDgKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgcG9ydCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBhdGhuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTMwNAorbXNnaWQgInVuYWJsZSB0byBmb3JrIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3RlZC5jOjY4IGJ1aWx0aW4vZnNjay5jOjIyMSBidWlsdGluL3BydW5lLmM6MTQ2Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3RlZC5jOjgwCittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0ZWQuYzoxMDAKK21zZ2lkICJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3QiCittc2dzdHIgIiIKKworIzogY29ubmVjdGVkLmM6MTA3Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1JMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDUkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMuXG4iCisiVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcHJvaGliaXRlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBjb250YWlucyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJXMgYXMgd29ya2luZy0iCisidHJlZS1lbmNvZGluZy4iCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcmVxdWlyZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICclcycgaXMgbWlzc2luZyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJXNCRSBvciBVVEYtIgorIiVzTEUgKGRlcGVuZGluZyBvbiB0aGUgYnl0ZSBvcmRlcikgYXMgd29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6NDI0IGNvbnZlcnQuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGVuY29kZSAnJXMnIGZyb20gJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJlbmNvZGluZyAnJXMnIGZyb20gJXMgdG8gJXMgYW5kIGJhY2sgaXMgbm90IHRoZSBzYW1lIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgdG8gcnVuIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZlZWQgdGhlIGlucHV0IHRvIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkICVkIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo3MzUgY29udmVydC5jOjczOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIGZyb20gZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo3NDEgY29udmVydC5jOjc5NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjg0NAorbXNnaWQgInVuZXhwZWN0ZWQgZmlsdGVyIHR5cGUiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjg1NQorbXNnaWQgInBhdGggbmFtZSB0b28gbG9uZyBmb3IgZXh0ZXJuYWwgZmlsdGVyIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4dGVybmFsIGZpbHRlciAnJXMnIGlzIG5vdCBhdmFpbGFibGUgYW55bW9yZSBhbHRob3VnaCBub3QgYWxsIHBhdGhzIGhhdmUgIgorImJlZW4gZmlsdGVyZWQiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjEyMjgKK21zZ2lkICJ0cnVlL2ZhbHNlIGFyZSBubyB2YWxpZCB3b3JraW5nLXRyZWUtZW5jb2RpbmdzIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzoxMzk4IGNvbnZlcnQuYzoxNDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjE0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHNtdWRnZSBmaWx0ZXIgJXMgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRhdGUuYzoxMzcKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICIiCisKKyM6IGRhdGUuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBzZWNvbmQgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbWludXRlcyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gaG91cnMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gZGF5cyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gd2Vla3MgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIiCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTk2IGRhdGUuYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MjcyCittc2dpZCAiUHJvcGFnYXRpbmcgaXNsYW5kIG1hcmtzIgorbXNnc3RyICIiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHRyZWUgb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgaXNsYW5kIHJlZ2V4IGZvciAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlzbGFuZCByZWdleCBmcm9tIGNvbmZpZyBoYXMgdG9vIG1hbnkgY2FwdHVyZSBncm91cHMgKG1heD0lZCkiCittc2dzdHIgIiIKKworIzogZGVsdGEtaXNsYW5kcy5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXJrZWQgJWQgaXNsYW5kcywgZG9uZS5cbiIKK21zZ3N0ciAiIgorCisjOiBkaWZmY29yZS1vcmRlci5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9yZGVyZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGRpZmZjb3JlLXJlbmFtZS5jOjU0NAorbXNnaWQgIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICclcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgVW5rbm93biBkaXJzdGF0IHBhcmFtZXRlciAnJXMnXG4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjI5MQorbXNnaWQgIiIKKyJjb2xvciBtb3ZlZCBzZXR0aW5nIG11c3QgYmUgb25lIG9mICdubycsICdkZWZhdWx0JywgJ2Jsb2NrcycsICd6ZWJyYScsICIKKyInZGltbWVkLXplYnJhJywgJ3BsYWluJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmtub3duIGNvbG9yLW1vdmVkLXdzIG1vZGUgJyVzJywgcG9zc2libGUgdmFsdWVzIGFyZSAnaWdub3JlLXNwYWNlLWNoYW5nZScsICIKKyInaWdub3JlLXNwYWNlLWF0LWVvbCcsICdpZ25vcmUtYWxsLXNwYWNlJywgJ2FsbG93LWluZGVudGF0aW9uLWNoYW5nZSciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjMyNworbXNnaWQgIiIKKyJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyICIKKyJ3aGl0ZXNwYWNlIG1vZGVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKICIlcyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjIyCi1tc2dpZCAiUmVuYW1lIEJyYW5jaCIKLW1zZ3N0ciAizpzOtc+Ezr/Ovc6/zrzOsc+Dzq/OsSDOms67zqzOtM6/z4UiCisjOiBkaWZmLmM6NDIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICIiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyNgotbXNnaWQgIlJlbmFtZSIKLW1zZ3N0ciAizpzOtc+Ezr/Ovc6/zrzOsc+Dzq/OsSIKKyM6IGRpZmYuYzo0NTUzCittc2dpZCAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM2Ci1tc2dpZCAiQnJhbmNoOiIKLW1zZ3N0ciAizprOu86szrTOv8+COiIKKyM6IGRpZmYuYzo0NTU2Cittc2dpZCAiLUcsIC1TIGFuZCAtLWZpbmQtb2JqZWN0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM5Ci1tc2dpZCAiTmV3IE5hbWU6IgotbXNnc3RyICLOnc6tzr8gzozOvc6/zrzOsToiCisjOiBkaWZmLmM6NDYzNAorbXNnaWQgIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIgorbXNnc3RyICIiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo3NQotbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKLW1zZ3N0ciAizqDOsc+BzrHOus6xzrvPjiDOtc+AzrnOu86tzr7PhM61IM66zrvOrM60zr8gz4DPgc6/z4IgzrzOtc+Ezr/Ovc6/zrzOsc+Dzq/OsToiCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo5NiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAizp8gzprOu86szrTOv8+CICclcycgz4XPgM6sz4HPh861zrkgzq7OtM63LiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjExNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCi1tc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgzrzOtc+Ezr/Ovc6/zrzOsc+Dzq/Osc+CICclcycuIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTcKLW1zZ2lkICJTdGFydGluZy4uLiIKLW1zZ3N0ciAizpPOr869zrXPhM6xzrkgzpXOus66zq/Ovc63z4POty4uLiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI2Ci1tc2dpZCAiRmlsZSBCcm93c2VyIgotbXNnc3RyICLOoM61z4HOuc63zrPOt8+Ezq7PgiDOkc+Bz4fOtc6vz4nOvSIKLQotIzogbGliL2Jyb3dzZXIudGNsOjEyNiBsaWIvYnJvd3Nlci50Y2w6MTQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyAlcy4uLiIKLW1zZ3N0ciAizpPOr869zrXPhM6xzrkgz4bPjM+Bz4TPic+DzrcgJXMuLi4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoxODcKLSMsIGZ1enp5Ci1tc2dpZCAiW1VwIFRvIFBhcmVudF0iCi1tc2dzdHIgIlvOoM6szr3PiSDOoM+Bzr/PgiDOk86/zr3Orc6xXSIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI2NyBsaWIvYnJvd3Nlci50Y2w6MjczCi1tc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKLW1zZ3N0ciAizqDOtc+BzrnOrs6zzrfPg863IM6Rz4HPh861zq/Pic69IM6azrvOrM60zr/PhSIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI3OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODQKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTg3Ci1tc2dpZCAiQnJvd3NlIgotbXNnc3RyICLOoM61z4HOuc6uzrPOt8+DzrciCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NzkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgotbXNnc3RyICLOkc69zqzOus+EzrfPg863ICVzIM6xz4DPjCDPhM6/ICVzIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEyNwotIywgdGNsLWZvcm1hdAotbXNnaWQgImZhdGFsOiBDYW5ub3QgcmVzb2x2ZSAlcyIKLW1zZ3N0ciAizrrPgc6vz4POuc68zr86IM6UzrUgzrzPgM+Mz4HOtc+DzrUgzr3OsSDOtc+AzrnOu8+FzrjOtc6vIM+Ezr8gJXMiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQwIGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvZGF0YWJhc2UudGNsOjMxCi1tc2dpZCAiQ2xvc2UiCi1tc2dzdHIgIs6azrvOtc6vz4POuc68zr8iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTY5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgotbXNnc3RyICLOnyDOms67zqzOtM6/z4IgJyVzJyDOtM61zr0gz4XPgM6sz4HPh861zrkuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwNgotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjQ4MDAKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgotIlxuIgotIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCi0iQSBtZXJnZSBpcyByZXF1aXJlZC4iCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgogbXNnc3RyICIiCi0izp8gzprOu86szrTOv8+CICclcycgz4XPgM6sz4HPh861zrkgzq7OtM63LlxuIgotIlxuIgotIs6UzrUgzrPOr869zrXPhM6xzrkgz4PPhc6zz4fPjs69zrXPhc+DzrcgzrXPgM65z4TOrM+Hz4XOvc+Dzq7PgiDPhM6/z4Ugz4PPhM6/ICVzLlxuIgotIs6Rz4DOsc65z4TOtc6vz4TOsc65IM+Dz4XOs8+Hz47Ovc61z4XPg863LiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICLOlyDPg8+Ez4HOsc+EzrfOs865zrrOriDOo8+FzrPPh8+Ozr3Otc+Fz4POt8+CICVzIM60zrXOvSDPhc+Azr/Pg8+EzrfPgc6vzrbOtc+EzrHOuS4iCisjOiBkaWZmLmM6NDgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIzOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCi1tc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgzrXOvc63zrzOrc+Bz4nPg863z4IgJyVzJy4iCisjOiBkaWZmLmM6NTkwMAorbXNnaWQgImluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiB3YXMgc2tpcHBlZCBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjUxCi1tc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgotbXNnc3RyICLOlyDPgM61z4HOuc6/z4fOriDPg8+EzrHOtM65zr/PgM6/zq/Ot8+DzrfPgiAoz4TOvyDOtc+Fz4HOtc+Ezq7Pgc65zr8pIM61zq/Ovc6xzrkgzq7OtM63IM66zrvOtc65zrTPic68zq3Ovc63LiIKKyM6IGRpZmYuYzo1OTAzCittc2dpZCAib25seSBmb3VuZCBjb3BpZXMgZnJvbSBtb2RpZmllZCBwYXRocyBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjY2CisjOiBkaWZmLmM6NTkwNgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyJ5b3UgbWF5IHdhbnQgdG8gc2V0IHlvdXIgJXMgdmFyaWFibGUgdG8gYXQgbGVhc3QgJWQgYW5kIHJldHJ5IHRoZSBjb21tYW5kLiIKIG1zZ3N0ciAiIgotIs6XIM+EzrXOu861z4XPhM6xzq/OsSDOus6xz4TOrM+Dz4TOsc+Dzrcgz4DOv8+FIM6xzr3Ouc+Hzr3Otc+NzrjOt866zrUgzrTOtSDPg8+FzrzPhs+Jzr3Otc6vIM68zrUgz4TOt869IM66zrHPhM6sz4PPhM6xz4POtyDPhM6/z4UgIgotIs6xz4DOv864zrXPhM63z4HOr86/z4UuXG4iCi0iXG4iCi0izprOrM+Azr/Ouc6/IM6szrvOu86/IM+Az4HPjM6zz4HOsc68zrzOsSBHaXQgz4TPgc6/z4DOv8+Azr/Or863z4POtSDPhM6/IM6xz4DOv864zrXPhM6uz4HOuc6/IM6xz4DPjCDPhM63zr0gz4TOtc67zrXPhc+EzrHOr86xICIKLSLOsc69zq/Ph869zrXPhc+DzrcuIM6gz4HOrc+AzrXOuSDOvc6xIM6zzq/Ovc61zrkgzrXPgM6xzr3Osc69zq/Ph869zrXPhc+Dzrcgz4DPgc65zr0gzr3OsSDOsc67zrvOsc+HzrjOtc6vIM6/IM+Ez4HOrc+Hz4nOvSDOus67zqzOtM6/z4IuXG4iCi0iXG4iCi0izpcgzrXPgM6xzr3Osc69zq/Ph869zrXPhc+DzrcgzrjOsSDOvs61zrrOuc69zq7Pg861zrkgzrHPhc+Ez4zOvM6xz4TOsSDPhM+Oz4HOsS5cbiIKKyLOvM+Azr/Pgc61zq/PhM61IM69zrEgzrTOv866zrnOvM6sz4PPhM61IM69zrEgzr/Pgc6vz4POtc+EzrUgz4TOtyDOvM61z4TOsc6yzrvOt8+Ezq4gz4POsc+CICVzIM+DzrUgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSAlZCDOus6xzrkgIgorIs69zrEgzrTOv866zrnOvM6sz4POtc+EzrUgz4DOrM67zrkgz4TOt869IM61zr3PhM6/zrvOri4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzIyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKLW1zZ3N0ciAizpXOvc63zrzOrc+Bz4nPg863IM+GzrHOus6tzrvOv8+FIM61z4HOs86xz4POr86xz4Igz4POtSAnJXMnLi4uIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjMyMwotbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgotbXNnc3RyICLOsc+Bz4fOtc6vzrEgzq3Ph86/z4XOvSDOtc6+zrHPh864zrXOryIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorIzogZGlyLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQiCiBtc2dzdHIgIiIKLSLOiM6zzrnOvc61IM6xzrrPjc+Bz4nPg863IM61zr7Osc6zz4nOs86uz4Igz4TOv8+FICclcycgKM6xz4DOsc65z4TOtc6vz4TOsc65IM+Dz4XOs8+Hz47Ovc61z4XPg863IM61z4DOuc+Azq3OtM6/z4UgzrHPgc+HzrXOr86/z4UpLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNTQKLW1zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKLW1zZ3N0ciAizpHPgM6xzrnPhM61zq/PhM6xzrkgz4PPhc6zz4fPjs69zrXPhc+DzrcgzrXPgM65z4DOrc60zr/PhSDOsc+Bz4fOtc6vzr/PhS4iCisjOiBkaXIuYzo5MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiCittc2dzdHIgIiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKLW1zZ3N0ciAizqDOsc+BzrHOvM6/zr3OriDPg8+Ezr/OvSDOus67zqzOtM6/ICclcycuIgorIzogZGlyLmM6MTg0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAizrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDPhM6/IM6szr3Ov865zrPOvM6xIM+Ezr/PhSDPhs6xzrrOrc67zr/PhSAnJXMnIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQyOQorIzogZGlyLmM6MjA4NAorbXNnaWQgImZhaWxlZCB0byBnZXQga2VybmVsIG5hbWUgYW5kIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGRpci5jOjIyMDgKK21zZ2lkICJ1bnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24iCittc2dzdHIgIiIKKworIzogZGlyLmM6MzAwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQgaW4gcmVwbyAlcyIKK21zZ3N0ciAiIgorCisjOiBkaXIuYzozMDU0IGRpci5jOjMwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZGlyLmM6MzA4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbWlncmF0ZSBnaXQgZGlyZWN0b3J5IGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGVkaXRvci5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6IFdhaXRpbmcgZm9yIHlvdXIgZWRpdG9yIHRvIGNsb3NlIHRoZSBmaWxlLi4uJWMiCittc2dzdHIgIiIKKworIzogZW50cnkuYzoxNzgKK21zZ2lkICJGaWx0ZXJpbmcgY29udGVudCIKK21zZ3N0ciAiIgorCisjOiBlbnRyeS5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogZW52aXJvbm1lbnQuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpdCBuYW1lc3BhY2UgcGF0aCBcIiVzXCIiCittc2dzdHIgIiIKKworIzogZW52aXJvbm1lbnQuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBHSVRfRElSIHRvICclcyciCittc2dzdHIgIiIKKworIzogZXhlYy1jbWQuYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJncyB0byBydW4gJXMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtb2JqZWN0LmM6MTcKK21zZ2lkICJSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE1MQorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBzaGFsbG93IGxpc3QiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE1NAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBhIGZsdXNoIHBhY2tldCBhZnRlciBzaGFsbG93IGxpc3QiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE2NQorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290ICclcyciCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjI1NgorbXNnaWQgIi0tc3RhdGVsZXNzLXJwYyByZXF1aXJlcyBtdWx0aV9hY2tfZGV0YWlsZWQiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjM1OCBmZXRjaC1wYWNrLmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjM2NCBmZXRjaC1wYWNrLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVuc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MzY2IGZldGNoLXBhY2suYzoxMjczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzozNjkgZmV0Y2gtcGFjay5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gb2JqZWN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MzcxIGZldGNoLXBhY2suYzoxMjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNoYWxsb3cgZm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzozNzQgZmV0Y2gtcGFjay5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgc2hhbGxvdy91bnNoYWxsb3csIGdvdCAlcyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAlZCAlcyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzo0NjMKK21zZ2lkICJnaXZpbmcgdXAiCittc2dzdHIgIs61zrPOus6xz4TOrM67zrXOuc+IzrciCisKKyM6IGZldGNoLXBhY2suYzo0NzUgcHJvZ3Jlc3MuYzoyMjkKK21zZ2lkICJkb25lIgorbXNnc3RyICLOv867zr/Ous67zrfPgc+OzrjOt866zrUiCisKKyM6IGZldGNoLXBhY2suYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICglZCkgJXMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nICVzIGFzIGNvbXBsZXRlIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzo3NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxyZWFkeSBoYXZlICVzICglcykiCittc2dzdHIgIs+Fz4DOrM+Bz4fOtc65IM6uzrTOtyAlcyAoJXMpIgorCisjOiBmZXRjaC1wYWNrLmM6Nzc5Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjc4NworbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgJXMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjg3MworbXNnaWQgImVycm9yIGluIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjkwMgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2xpZW50cyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6OTA2Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6OTA5Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIG5vLWRvbmUiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjkxNQorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBtdWx0aV9hY2siCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjkxOQorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBzaWRlLWJhbmQtNjRrIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzo5MjMKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzo5MjcKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgYWxsb3ctdGlwLXNoYTEtaW4td2FudCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6OTMxCittc2dpZCAiU2VydmVyIHN1cHBvcnRzIGFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjk0MQorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBvZnMtZGVsdGEiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjk0NyBmZXRjaC1wYWNrLmM6MTE0MAorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBmaWx0ZXIiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbiBpcyAlLipzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzo5NjEKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctc2luY2UiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjk2NQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1leGNsdWRlIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzo5NjcKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLWRlZXBlbiIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6OTg0Cittc2dpZCAibm8gY29tbW9uIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjk5NiBmZXRjaC1wYWNrLmM6MTQxOQorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMTM0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXF1ZXN0cyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIHNlY3Rpb24gaGVhZGVyICclcyciCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjExOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJyVzJywgcmVjZWl2ZWQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGFja25vd2xlZGdtZW50IGxpbmU6ICclcyciCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBhY2tzOiAlZCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTI0NAorbXNnaWQgImV4cGVjdGVkIHBhY2tmaWxlIHRvIGJlIHNlbnQgYWZ0ZXIgJ3JlYWR5JyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTI0NgorbXNnaWQgImV4cGVjdGVkIG5vIG90aGVyIHNlY3Rpb25zIHRvIGJlIHNlbnQgYWZ0ZXIgbm8gJ3JlYWR5JyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTI4NworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHNoYWxsb3cgaW5mbzogJWQiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEzMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgd2FudGVkLXJlZiwgZ290ICclcyciCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEzMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCB3YW50ZWQtcmVmOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMzIyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgd2FudGVkIHJlZnM6ICVkIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxNjQ2Cittc2dpZCAibm8gbWF0Y2hpbmcgcmVtb3RlIGhlYWQiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE2NjQgYnVpbHRpbi9jbG9uZS5jOjY3MQorbXNnaWQgInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIgorbXNnc3RyICLOvyDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3Ov8+CIM61zr7Phc+AzrfPgc61z4TOt8+Ezq7PgiDOtM61zr0gzq3Pg8+EzrXOuc67zrUgz4zOu86xIM+EzrEgzrHOvc6xzrPOus6xzq/OsSDOsc69z4TOuc66zrXOr868zrXOvc6xIgorCisjOiBmZXRjaC1wYWNrLmM6MTY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlbW90ZSByZWYgJXMiCittc2dzdHIgIs60zrXOvSDPhc+AzqzPgc+HzrXOuSDPhM6tz4TOv865zr8gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gcmVmICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTY5MworIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3QgYWxsb3cgcmVxdWVzdCBmb3IgdW5hZHZlcnRpc2VkIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBncGctaW50ZXJmYWNlLmM6MzE4Cittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICIiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzozNDQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvICclcyciCittc2dzdHIgIiIKKworIzogZ3JhcGguYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmUgaW52YWxpZCBjb2xvciAnJS4qcycgaW4gbG9nLmdyYXBoQ29sb3JzIgorbXNnc3RyICIiCisKKyM6IGdyZXAuYzoyMTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICIiCisKKyM6IGdyZXAuYzoyMTMwIHNldHVwLmM6MTY0IGJ1aWx0aW4vY2xvbmUuYzo0MTEgYnVpbHRpbi9kaWZmLmM6ODIKKyM6IGJ1aWx0aW4vcm0uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAizrHPgM6tz4TPhc+HzrUgz4TOvyBzdGF0IM+Ezr/PhSAnJXMnIgorCisjOiBncmVwLmM6MjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyMworbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyNAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyNQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MjYKK21zZ2lkICJncm93LCBtYXJrIGFuZCB0d2VhayB5b3VyIGNvbW1vbiBoaXN0b3J5IgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyNworbXNnaWQgImNvbGxhYm9yYXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzEKK21zZ2lkICJNYWluIFBvcmNlbGFpbiBDb21tYW5kcyIKK21zZ3N0ciAizprPjc+BzrnOtc+CIM6Vzr3PhM6/zrvOrc+CIFBvcmNlbGFpbiIKKworIzogaGVscC5jOjMyCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICLOks6/zrfOuM63z4TOuc66zq3PgiDOlc69z4TOv867zq3PgiAvIM6nzrXOuc+BzrnPg868zr/PjSIKKworIzogaGVscC5jOjMzCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAizpLOv863zrjOt8+EzrnOus6tz4IgzpXOvc+Ezr/Ou86tz4IgLyDOlc+Bz4nPhM63zrzOrM+Ez4nOvSIKKworIzogaGVscC5jOjM0Cittc2dpZCAiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiCittc2dzdHIgIs6UzrnOrM60z4HOsc+DzrcgzrzOtSDOhs67zrvOv8+Fz4IiCisKKyM6IGhlbHAuYzozNQorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIE1hbmlwdWxhdG9ycyIKK21zZ3N0ciAizpXOvc+Ezr/Ou86tz4IgzqfOsc68zrfOu86/z40gzpXPgM65z4DOrc60zr/PhSAvIM6nzrXOuc+BzrnPg868zr/PjSIKKworIzogaGVscC5jOjM2Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAizpXOvc+Ezr/Ou86tz4IgzqfOsc68zrfOu86/z40gzpXPgM65z4DOrc60zr/PhSAvIM6Vz4HPic+EzrfOvM6sz4TPic69IgorCisjOiBoZWxwLmM6MzcKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBTeW5jaGluZyBSZXBvc2l0b3JpZXMiCittc2dzdHIgIs6Vzr3PhM6/zrvOrc+CIM6nzrHOvM63zrvOv8+NIM6Vz4DOuc+Azq3OtM6/z4UgLyDOo8+FzrPPh8+Bzr/Ovc65z4POvM6/z40gzpHPgM6/zrjOtc+EzrfPgc6vz4nOvSIKKworIzogaGVscC5jOjM4Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJuYWwgSGVscGVycyIKK21zZ3N0ciAizpXOvc+Ezr/Ou86tz4IgzqfOsc68zrfOu86/z40gzpXPgM65z4DOrc60zr/PhSAvIM6Vz4PPic+EzrXPgc65zrrOrc+CIM6Szr/Ot864zrfPhM65zrrOrc+CIgorCisjOiBoZWxwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzA1Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICLOtc69z4TOv867zq3PgiBnaXQgzrTOuc6xzrjOrc+DzrnOvM61z4IgzrHPgM+MIM6xzrvOu86/z40gz4PPhM6/ICRQQVRIIM+DzrHPgiIKKworIzogaGVscC5jOjMxNAorbXNnaWQgIlRoZXNlIGFyZSBjb21tb24gR2l0IGNvbW1hbmRzIHVzZWQgaW4gdmFyaW91cyBzaXR1YXRpb25zOiIKK21zZ3N0ciAiIgorIs6Rz4XPhM6tz4IgzrXOr869zrHOuSDOus6/zrnOvc6tz4IgzrXOvc+Ezr/Ou86tz4IgR2l0IM+Azr/PhSDPh8+BzrfPg865zrzOv8+Azr/Ouc6/z43Ovc+EzrHOuSDPg861IM60zrnOrM+Gzr/Pgc61z4Igz4DOtc+BzrnPgM+Ez47Pg861zrnPgjoiCisKKyM6IGhlbHAuYzozNjMgZ2l0LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgY29tbWFuZCBsaXN0aW5nIHR5cGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6NDEwCittc2dpZCAiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZToiCittc2dzdHIgIiIKKworIzogaGVscC5jOjUxOQorbXNnaWQgIlNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyB0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCIKK21zZ3N0ciAiIgorIs6UzrXOr8+EzrUgJ2dpdCBoZWxwIDzOtc69z4TOv867zq4+JyDOs865zrEgzr3OsSDOtM65zrHOss6sz4POtc+EzrUgzrPOuc6xIM66zqzPgM6/zrnOsSDPg8+FzrPOus61zrrPgc65zrzOrc69zrcgz4XPgM6/zrXOvc+Ezr/Ou86uIgorCisjOiBoZWxwLmM6NTI0Cittc2dpZCAiRXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIs6Vzr7Pic+EzrXPgc65zrrOrc+CIM61zr3PhM6/zrvOrc+CIgorCisjOiBoZWxwLmM6NTM5Cittc2dpZCAiQ29tbWFuZCBhbGlhc2VzIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzo2MDMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIllvdSBhcmUgbm8gbG9uZ2VyIG9uIGEgbG9jYWwgYnJhbmNoLlxuIgotIlxuIgotIklmIHlvdSB3YW50ZWQgdG8gYmUgb24gYSBicmFuY2gsIGNyZWF0ZSBvbmUgbm93IHN0YXJ0aW5nIGZyb20gJ1RoaXMgRGV0YWNoZWQgIgotIkNoZWNrb3V0Jy4iCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCiBtc2dzdHIgIiIKLSLOlM61IM6yz4HOr8+DzrrOtc+Dz4TOtSDPgM65zrEgz4POtSDPhM6/z4DOuc66z4wgzrrOu86szrTOvy5cbiIKLSJcbiIKLSLOkc69IM64zq3Ou86xz4TOtSDOvc6xIM6yz4HOr8+DzrrOtc+Dz4TOtSDPg861IM66zrvOrM60zr8sIM60zrfOvM65zr/Phc+BzrPOrs+Dz4TOtSDOrc69zrHOvSDPhM+Oz4HOsSDOsc+Bz4fOr862zr/Ovc+EzrHPgiDOsc+Az4wgJ1RoaXMgIgotIkRldGFjaGVkIENoZWNrb3V0Jy4iCisiJyVzJyDPhs6xzq/Ovc61z4TOsc65IM69zrEgzrXOr869zrHOuSDOtc69z4TOv867zq4gZ2l0LCDOsc67zrvOrCDOtM61zr0gzrzPgM6/z4HOrc+DzrHOvM61XG4iCisizr3OsSDPhM63zr0gzrXOus+EzrXOu86tz4POv8+FzrzOtS4gzpzOrs+Az4nPgiDPhM6/IGdpdC0lcyDOtc6vzr3Osc65IM+HzrHOu86xz4POvM6tzr3OvzsiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDQ2IGxpYi9jaGVja291dF9vcC50Y2w6NDUwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCi1tc2dzdHIgIs6IzrPOuc69zrUgzrXOvs6xzrPPic6zzq4gz4TOv8+FICclcycuIgorIzogaGVscC5jOjY2MgorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICLOj8+AzrEuIM6kzr8gz4PPjc+Dz4TOt868zqwgz4POsc+CIM60zrXOvSDOsc69zrHPhs6tz4HOtc65IM66zrHOvM6vzrEgzrHPgM6/zrvPjc+Ez4nPgiDOtc69z4TOv867zq4gR2l0LiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NzgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgotbXNnc3RyICLOlyDOtc+AzrHOvc6xz4bOv8+BzqwgJyVzJyDPg8+Ezr8gJyVzJyDOuM6xIM+HzqzPg861zrkgz4TOuc+CIM61zr7Ors+CIM+Fz4DOv86yzr/Ou86tz4I6IgorIzogaGVscC5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICLOoM6hzp/Oo86fzqfOlzogzprOsc67zq3Pg86xz4TOtSDOvM6vzrEgzrXOvc+Ezr/Ou86uIEdpdCDOvM61IM+Mzr3Ov868zrEgJyVzJywgzrcgzr/PgM6/zq/OsSDOtM61zr0gz4XPgM6sz4HPh861zrkuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMAotbXNnaWQgIlJlY292ZXJpbmcgbG9zdCBjb21taXRzIG1heSBub3QgYmUgZWFzeS4iCi1tc2dzdHIgIs6XIM6xzr3OrM66z4TOt8+Dzrcgz4fOsc68zq3Ovc+Jzr0gz4XPgM6/zrLOv867z47OvSDOvM+Azr/Pgc61zq8gzr3OsSDOtc6vzr3Osc65IM60z43Pg866zr/Ou863LiIKKyM6IGhlbHAuYzo2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAizqPPhc69zrXPh86vzrbOv8+FzrzOtSDPhc+Azr/OuM6tz4TOv869z4TOsc+CIM+Az4nPgiDOtc69zr3Ov86/z43Pg86xz4TOtSAnJXMnLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldCAnJXMnPyIKLW1zZ3N0ciAizpXPgM6xzr3Osc+Gzr/Pgc6sICclcyc7IgorIzogaGVscC5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIGluICUwLjFmIHNlY29uZHMsIGFzc3VtaW5nIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICLOo8+Fzr3Otc+Hzq/Ots6/z4XOvM61IM+DzrUgJTAuMWYgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xLCDPhc+Azr/OuM6tz4TOv869z4TOsc+CIM+Az4nPgiDOtc69zr3Ov86/z43Pg86xz4TOtSAnJXMnLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MTAgbGliL21lcmdlLnRjbDoxNjMKLW1zZ2lkICJWaXN1YWxpemUiCi1tc2dzdHIgIs6Rz4DOtc65zrrPjM69zrnPg863IgorIzogaGVscC5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6ICclcycgzrTOtc69IM61zq/Ovc6xzrkgzrXOvc+Ezr/Ou86uIGdpdC4gzpTOtc6vz4TOtSAnZ2l0IC0taGVscCcuIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OAotIywgdGNsLWZvcm1hdAorIzogaGVscC5jOjcwNgogbXNnaWQgIiIKLSJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgogIlxuIgotIlRoaXMgd29ya2luZyBkaXJlY3RvcnkgaXMgb25seSBwYXJ0aWFsbHkgc3dpdGNoZWQuICBXZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCAiCi0ieW91ciBmaWxlcywgYnV0IGZhaWxlZCB0byB1cGRhdGUgYW4gaW50ZXJuYWwgR2l0IGZpbGUuXG4iCisiVGhlIG1vc3Qgc2ltaWxhciBjb21tYW5kIGlzIgorbXNnaWRfcGx1cmFsICIiCiAiXG4iCi0iVGhpcyBzaG91bGQgbm90IGhhdmUgb2NjdXJyZWQuICAlcyB3aWxsIG5vdyBjbG9zZSBhbmQgZ2l2ZSB1cC4iCisiVGhlIG1vc3Qgc2ltaWxhciBjb21tYW5kcyBhcmUiCittc2dzdHJbMF0gIiIKKyJcbiIKKyLOlyDPgM65zr8gz4DOsc+Bz4zOvM6/zrnOsSDOtc69z4TOv867zq4gzrXOr869zrHOuSIKK21zZ3N0clsxXSAiIgorIlxuIgorIs6fzrkgz4DOuc6/IM+AzrHPgc+MzrzOv865zrXPgiDOtc69z4TOv867zq3PgiDOtc6vzr3Osc65IgorCisjOiBoZWxwLmM6NzIxCittc2dpZCAiZ2l0IHZlcnNpb24gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB2ZXJzaW9uIFs8zrXPgM65zrvOv86zzq3Pgj5dIgorCisjOiBoZWxwLmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgogbXNnc3RyICIiCi0izpHPgM6/z4TPhc+Hzq/OsSDOv8+BzrnPg868zr/PjSDPhM+Bzq3Ph86/zr3PhM6/z4IgzrrOu86szrTOv8+FLlxuIgotIlxuIgotIs6Rz4XPhM+Mz4Igzr8gz4bOrM66zrXOu86/z4IgzrXPgc6zzrHPg86vzrHPgiDOtc6vzr3Osc65IM68z4zOvc6/IM61zr0gzrzOrc+BzrXOuSDOtc+AzrnOu861zrPOvM6tzr3Ov8+CLiAnzpXOs865zr3OtSDOtc+AzrnPhM+Fz4fOrs+CICIKLSLOtc69zrfOvM6tz4HPic+Dzrcgz4TPic69IM6xz4HPh861zq/Pic69IM+DzrHPgiwgzrHOu867zqwgzrHPgM6tz4TPhc+HzrUgzrcgzrXOvc63zrzOrc+Bz4nPg863IM61zr3PjM+CIM61z4PPic+EzrXPgc65zrrOv8+NIM6xz4HPh861zq/Ov8+FICIKLSLPhM6/z4UgR2l0LlxuIgotIlxuIgotIs6Rz4XPhM+MIM60zrUgzrjOsSDOrc+Az4HOtc+AzrUgzr3OsSDPg8+FzrzOss61zq8uIM6kzr8gJXMgzrjOsSDOus67zrXOr8+DzrXOuSDOus6xzrkgzrjOsSDOtc6zzrrOsc+EzrHOu861zq/PiM61zrkgz4TPjs+BzrEuIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjM5Ci1tc2dpZCAiU2VsZWN0IgotbXNnc3RyICLOlc+AzrnOu86/zrPOriIKLQotIzogbGliL2Nob29zZV9mb250LnRjbDo1MwotbXNnaWQgIkZvbnQgRmFtaWx5IgotbXNnc3RyICLOn865zrrOv86zzq3Ovc61zrnOsSDOk8+BzrHOvM68zrHPhM6/z4POtc65z4HOrM+CIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjc0Ci1tc2dpZCAiRm9udCBTaXplIgotbXNnc3RyICLOnM6tzrPOtc64zr/PgiDOk8+BzrHOvM68zrHPhM6/z4POtc65z4HOrM+CIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjkxCi1tc2dpZCAiRm9udCBFeGFtcGxlIgotbXNnc3RyICLOoM6xz4HOrM60zrXOuc6zzrzOsSDOk8+BzrHOvM68zrHPhM6/z4POtc65z4HOrM+CIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwMworIzogaGVscC5jOjc5MwogbXNnaWQgIiIKLSJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKLSJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgotbXNnc3RyICIiCi0izpHPhc+Ez4wgzrXOr869zrHOuSDOrc69zrEgz4DOsc+BzqzOtM61zrnOs868zrEgzrrOtc65zrzOrc69zr/PhS5cbiIKLSLOkc69IM+DzrHPgiDOsc+Bzq3Pg861zrkgzrHPhc+Ez4wgz4TOvyDOus61zq/OvM61zr3OvywgzrzPgM6/z4HOtc6vIM69zrEgzrPOr869zrXOuSDOtM65zrrPjCDPg86xz4IuIgorIlxuIgorIkRpZCB5b3UgbWVhbiB0aGlzPyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IgorbXNnc3RyWzBdICIiCisiXG4iCisizpzOrs+Az4nPgiDOtc69zr3Ov86/z43Pg86xz4TOtSDOsc+Fz4TPjDsiCittc2dzdHJbMV0gIiIKKyJcbiIKKyLOnM6uz4DPic+CIM61zr3Ovc6/zr/Pjc+DzrHPhM61IM6tzr3OsSDOsc+Az4wgzrHPhc+Ezqw7IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjI4Ci1tc2dpZCAiR2l0IEd1aSIKLW1zZ3N0ciAizpPPgc6xz4bOuc66z4wgzqDOtc+BzrnOss6szrvOu86/zr0gR2l0IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzc2Ci1tc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgotbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsSDOnc6tzr/PhSDOkc+Azr/OuM61z4TOt8+Bzq/Ov8+FIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3Ci1tc2dpZCAiTmV3Li4uIgotbXNnc3RyICLOnc6tzr8uLi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjAKLW1zZ2lkICJDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5IgotbXNnc3RyICLOms67z4nOvc6/z4DOv86vzrfPg863IM6lz4DOrM+Bz4fOv869z4TOv8+CIM6Rz4DOv864zrXPhM63z4HOr86/z4UiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwCi1tc2dpZCAiQ2xvbmUuLi4iCi1tc2dzdHIgIs6azrvPic69zr/PgM6/zq/Ot8+DzrcuLi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTc2Ci1tc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgotbXNnc3RyICLOhs69zr/Ouc6zzrzOsSDOpc+AzqzPgc+Hzr/Ovc+Ezr/PgiDOkc+Azr/OuM61z4TOt8+Bzq/Ov8+FIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMwotbXNnaWQgIk9wZW4uLi4iCi1tc2dzdHIgIs6Gzr3Ov865zrPOvM6xLi4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyNgotbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCi1tc2dzdHIgIs6gz4HPjM+Dz4bOsc+EzrEgzpHPgM6/zrjOtc+Ezq7Pgc65zrEiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTMyCi1tc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCi1tc2dzdHIgIs6Gzr3Ov865zrPOvM6xIM6gz4HPjM+Dz4bOsc+Ezr/PhSDOkc+Azr/OuM61z4TOt8+Bzq/Ov8+FOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyOTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDMKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzEwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKLW1zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOtM63zrzOuc6/z4XPgc6zzq/Osc+CIM6xz4DOv864zrXPhM63z4HOr86/z4UgJXM6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OAotbXNnaWQgIkRpcmVjdG9yeToiCi1tc2dzdHIgIs6mzqzOus61zrvOv8+COiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MTIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MzcKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxMQotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgotbXNnc3RyICLOkc+Azr/OuM61z4TOrs+BzrnOvyBHaXQiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDM3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAizp8gzqbOrM66zrXOu86/z4IgJyVzJyDPhc+AzqzPgc+HzrXOuSDOrs60zrcuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZpbGUgJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICLOpM6/IM6xz4HPh861zq/OvyAlcyDPhc+AzqzPgc+HzrXOuSDOrs60zrcuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ1NQotbXNnaWQgIkNsb25lIgotbXNnc3RyICLOms67z47Ovc6/z4IiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDY4Ci0jLCBmdXp6eQotbXNnaWQgIlVSTDoiCi1tc2dzdHIgIiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODkKLW1zZ2lkICJDbG9uZSBUeXBlOiIKLW1zZ3N0ciAizqTPjc+Azr/PgiDOms67z47Ovc6/z4U6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NQotbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKLW1zZ3N0ciAizqTPhc+AzrnOus+MICjOpM6xz4fPjSwgzpfOvM65Lc6gzrvOtc6/zr3OrM62zr/OvSwgSGFyZGxpbmtzKSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDEKLW1zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCi1tc2dzdHIgIs6gzrvOrs+BzrXPgiDOkc69z4TOr86zz4HOsc+Gzr8gKM6gzrnOvyDOsc+BzrPPjCwgzqDOu861zr/Ovc6szrbOv869IM6Rzr3PhM6vzrPPgc6xz4bOvyDOkc+Dz4bOsc67zrXOr86xz4IpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwNwotbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgotbXNnc3RyICLOms6/zrnOvc6uIM6nz4HOrs+DzrcgKM6kzrHPh8+Nz4TOsc+Ezr8sIM6UzrUgzqPPhc69zrnPg8+EzqzPhM6xzrksIM6azrHOvc6tzr3OsSDOkc69z4TOr86zz4HOsc+Gzr8gzpHPg8+GzrHOu861zq/Osc+CKSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NDMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzM2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODA2Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgotbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOsc+Azr/OuM61z4TOrs+BzrnOvyBHaXQ6ICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU3OQotbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKLW1zZ3N0ciAiXCLOpM+Fz4DOuc66z4xcIiDOtM65zrHOuM6tz4POuc68zr8gzrzPjM69zr8gzrPOuc6xIM+Ezr/PgM65zrrPjCDOsc+Azr/OuM61z4TOrs+BzrnOvy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTgzCi1tc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKLW1zZ3N0ciAiXCLOms6/zrnOvc6uIM6nz4HOrs+DzrdcIiDOtM65zrHOuM6tz4POuc68zrcgzrzPjM69zr8gzrPOuc6xIM+Ezr/PgM65zrrPjCDOsc+Azr/OuM61z4TOrs+BzrnOvy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjA0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICLOlyDOpM6/z4DOv864zrXPg86vzrEgJXMgz4XPgM6sz4HPh861zrkgzq7OtM63LiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTUKLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKLW1zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDPgc+NzrjOvM65z4POt8+CIM+AzrfOs86uz4IiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI3Ci1tc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKLW1zZ3N0ciAizpPOr869zrXPhM6xzrkgzrrOsc+EzrHOvM6tz4TPgc63z4POtyDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI4Ci0jLCBmdXp6eQotbXNnaWQgImJ1Y2tldHMiCi1tc2dzdHIgIiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NTIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHOvc+EzrnOs8+BzrHPhs6uz4IgzrHOvc+EzrnOus61zrnOvM6tzr3Pic69L8+AzrvOt8+Bzr/Phs6/z4HOuc+Ozr0vzrXOvc69zrHOu86xzrrPhM65zrrPjs69OiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2ODgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgotbXNnc3RyICLOpM6vz4DOv8+EzrEgz4DPgc6/z4IgzrrOu8+Jzr3Ov8+Azr/Or863z4POtyDOsc+Az4wgz4TOvyAlcy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjkwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA0Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNgotbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKLW1zZ3N0ciAizp8gzrrOu86szrTOv8+CICdtYXN0ZXInIM60zrXOvSDOrc+HzrXOuSDOsc+Bz4fOuc66zr/PgM6/zrnOt864zrXOry4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzCi1tc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKLW1zZ3N0ciAiSGFyZGxpbmtzIM68zrcgzrTOuc6xzrjOrc+DzrnOvM6xLiDOnM61z4TOrM+Az4TPic+Dzrcgz4POtSDOsc69z4TOuc6zz4HOsc+Gzq4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKLW1zZ3N0ciAizpPOr869zrXPhM6xzrkgzrrOu8+Jzr3Ov8+Azr/Or863z4POtyDOsc+Az4wgz4TOvyAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDYKLW1zZ2lkICJDb3B5aW5nIG9iamVjdHMiCi1tc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM6xzr3PhM65zrPPgc6xz4bOriDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ3Ci0jLCBmdXp6eQotbXNnaWQgIktpQiIKLW1zZ3N0ciAiIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc3MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHOvc+EzrnOs8+BzrHPhs6uz4IgzrHOvc+EzrnOus61zrnOvM6tzr3Ov8+FOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODEKLW1zZ2lkICJMaW5raW5nIG9iamVjdHMiCi1tc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM+Dz43Ovc60zrXPg863IM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODIKLW1zZ2lkICJvYmplY3RzIgotbXNnc3RyICLOsc69z4TOuc66zrXOr868zrXOvc6xIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgotbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIGhhcmRsaW5rIM6xzr3PhM65zrrOtc65zrzOrc69zr/PhTogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODQ1Ci1tc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiIgotIs6UzrUgzrzPgM+Mz4HOtc+DzrUgzr3OsSDOs86vzr3Otc65IM6xzr3OrM66z4TOt8+DzrcgzrrOu86szrTPic69IM66zrHOuSDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0uIM6UzrXOr8+EzrUgz4TOt869IM6tzr7Ov860zr8gIgotIs66zr/Ovc+Dz4zOu86xz4IgzrPOuc6xIM67zrXPgM+Ezr/OvM6tz4HOtc65zrXPgi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU2Ci1tc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgotbXNnc3RyICIiCi0izpTOtSDOvM+Az4zPgc61z4POtSDOvc6xIM6zzq/Ovc61zrkgzrHOvc6szrrPhM63z4POtyDOtc+EzrnOus61z4TPjs69LiDOlM61zq/PhM61IM+EzrfOvSDOrc6+zr/OtM6/IM66zr/Ovc+Dz4zOu86xz4IgzrPOuc6xICIKLSLOu861z4DPhM6/zrzOrc+BzrXOuc61z4IuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg4MAotbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIiIKLSLOlM61IM68z4DPjM+BzrXPg861IM69zrEgzrPOr869zrXOuSDOus6xzrjOv8+BzrnPg868z4zPgiDPhM6/z4UgSEVBRCAoz4DOsc+BzrHOus67zrHOtM65zr/PjSkuIM6UzrXOr8+EzrUgz4TOt869IM6tzr7Ov860zr8gIgotIs66zr/Ovc+Dz4zOu86xz4IgzrPOuc6xICIKLSLOu861z4DPhM6/zrzOrc+BzrXOuc61z4IuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg4OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgotbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM61zrrOus6xzrjOrM+BzrnPg863z4IgJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODk1Ci1tc2dpZCAiQ2xvbmUgZmFpbGVkLiIKLW1zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOus67z4nOvc6/z4DOv86vzrfPg863z4IuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgotbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKLW1zZ3N0ciAizpTOtc69IM6tzrPOuc69zrUgzrHOvc6szrrPhM63z4POtyDPgM+Bzr/Otc+AzrnOu861zrPOvM6tzr3Ov8+FIM66zrvOrM60zr/PhS4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTEzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgotbXNnc3RyICLOlM61IM68z4DPjM+BzrXPg861IM69zrEgzrXPgM65zrvPhc64zrXOryDPhM6/ICVzIM+Jz4Igz4XPgM6/zrLOv867zq4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNQotbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgotbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsSDPhs6xzrrOrc67zr/PhSDOtc+BzrPOsc+Dzq/Osc+CIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNiBsaWIvaW5kZXgudGNsOjY1IGxpYi9pbmRleC50Y2w6MTI3Ci0jOiBsaWIvaW5kZXgudGNsOjE5MwotbXNnaWQgImZpbGVzIgotbXNnc3RyICLOsc+Bz4fOtc6vzrEiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTU1Ci1tc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCi1tc2dzdHIgIs6XIM6xz4HPh865zrrOriDOtc6+zrHOs8+JzrPOriDOsc+Bz4fOtc6vzr/PhSDOsc+Azq3PhM+Fz4fOtS4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTcxCi1tc2dpZCAiT3BlbiIKLW1zZ3N0ciAizobOvc6/zrnOs868zrEiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgxCi1tc2dpZCAiUmVwb3NpdG9yeToiCi1tc2dzdHIgIs6Rz4DOv864zrXPhM6uz4HOuc6/OiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDMxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgzrHOvc6/zq/Os868zrHPhM6/z4IgzrHPgM6/zrjOtc+EzrfPgc6vzr/PhSAlczoiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MwotIywgZnV6enkKLW1zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgotbXNnc3RyICLOkc+Azr/Pg8+Fzr3OtM61zrTOtc68zq3Ovc63IM6Vzr7Osc6zz4nOs86uIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKLW1zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKLW1zZ3N0ciAizojOus+Gz4HOsc+DzrcgzpHOvc6xzrjOtc+Oz4HOt8+DzrfPgjoiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NAotbXNnaWQgIkxvY2FsIEJyYW5jaCIKLW1zZ3N0ciAizqTOv8+AzrnOus+Mz4IgzprOu86szrTOv8+CIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzkKLW1zZ2lkICJUcmFja2luZyBCcmFuY2giCi1tc2dzdHIgIs6azrvOrM60zr/PgiDOoM6xz4HOsc66zr/Ou86/z43OuM63z4POt8+CIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODQgbGliL2Nob29zZV9yZXYudGNsOjUzOAotbXNnaWQgIlRhZyIKLW1zZ3N0ciAizpXPhM65zrrOrc+EzrEiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKLW1zZ3N0ciAizpzOtyDOrc6zzrrPhc+BzrcgzrHOvc6xzrjOtc+Oz4HOt8+Dzrc6ICVzIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzM4Ci1tc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgotbXNnc3RyICLOlM61zr0gzq3Ph861zrkgzrXPgM65zrvOtc6zzrXOryDOsc69zrHOuM61z47Pgc63z4POty4iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDYKLW1zZ2lkICJSZXZpc2lvbiBleHByZXNzaW9uIGlzIGVtcHR5LiIKLW1zZ3N0ciAizpcgzq3Ous+Gz4HOsc+DzrcgzrHOvc6xzrjOtc+Oz4HOt8+DzrfPgiDOtc6vzr3Osc65IM66zrXOvc6uLiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjUzMQotbXNnaWQgIlVwZGF0ZWQiCi1tc2dzdHIgIs6Vzr3Ot868zrXPgc+JzrzOrc69zr8iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTkKLSMsIGZ1enp5Ci1tc2dpZCAiVVJMIgotbXNnc3RyICIiCi0KLSM6IGxpYi9jb21taXQudGNsOjkKKyM6IGlkZW50LmM6MzQ1CiBtc2dpZCAiIgotIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCiAiXG4iCi0iWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKLSJ0byBhbWVuZC5cbiIKKyIqKiogUGxlYXNlIHRlbGwgbWUgd2hvIHlvdSBhcmUuXG4iCisiXG4iCisiUnVuXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIlxuIgorInRvIHNldCB5b3VyIGFjY291bnQncyBkZWZhdWx0IGlkZW50aXR5LlxuIgorIk9taXQgLS1nbG9iYWwgdG8gc2V0IHRoZSBpZGVudGl0eSBvbmx5IGluIHRoaXMgcmVwb3NpdG9yeS5cbiIKKyJcbiIKIG1zZ3N0ciAiIgotIs6UzrXOvSDPhc+AzqzPgc+HzrXOuSDOus6sz4TOuSDPgM+Bzr/PgiDOtM65z4zPgc64z4nPg863LlxuIgogIlxuIgotIs6gz4HPjM66zrXOuc+EzrHOuSDOvc6xIM60zrfOvM65zr/Phc+BzrPOrs+DzrXPhM61IM+EzrfOvSDOsc+Bz4fOuc66zq4gz4XPgM6/zrLOv867zq4uIM6UzrXOvSDPhc+AzqzPgc+HzrXOuSDPhc+Azr/Oss6/zrvOriDPgM+BzrnOvSDOsc+Az4wgIgotIs6xz4XPhM6uIM6zzrnOsSDOvc6xIM60zrnOv8+BzrjPjs+DzrXPhM61LlxuIgorIioqKiDOoM6xz4HOsc66zrHOu8+OIM+AzrXOr8+EzrUgzrzOv8+FIM+Ezr8gz4zOvc6/zrzOrCDPg86xz4IuXG4iCisiXG4iCisizqTPgc6tzr7PhM61XG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCLOpM6/IM6Mzr3Ov868zqwgzqPOsc+CXCJcbiIKKyJcbiIKKyLOs865zrEgzr3OsSDOv8+Bzq/Pg861z4TOtSDPhM63zr0gz4DPgc6/zrXPgM65zrvOtc6zzrzOrc69zrcgz4TOsc+Fz4TPjM+EzrfPhM6xIM+Ezr/PhSDOu86/zrPOsc+BzrnOsc+DzrzOv8+NIM+DzrHPgi5cbiIKKyLOoM6xz4HOsc67zrXOr8+IzrXPhM61IM+Ezr8gLS1nbG9iYWwgzrPOuc6xIM69zrEgzr/Pgc6vz4POtc+EzrUgz4TOt869IM+EzrHPhc+Ez4zPhM63z4TOsSDOvM+Mzr3OvyDPg861IM6xz4XPhM+MIM+Ezr8gIgorIs6xz4DOv864zrXPhM6uz4HOuc6/LlxuIgorIlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxOAorIzogaWRlbnQuYzozNjkKK21zZ2lkICJubyBlbWFpbCB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICLOtM61IM60z4zOuM63zrrOtSBlbWFpbCDOus6xzrkgzrcgzrHPhc+Ez4zOvM6xz4TOtyDOsc69zq/Ph869zrXPhc+DzrcgzrXOr869zrHOuSDOsc+AzrXOvc61z4HOs86/z4DOv865zrfOvM6tzr3OtyIKKworIzogaWRlbnQuYzozNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IGVtYWlsIGFkZHJlc3MgKGdvdCAnJXMnKSIKK21zZ3N0ciAizrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDOsc+Fz4TPjM68zrHPhM63IM6xzr3Or8+Hzr3Otc+Fz4POtyDOtM65zrXPjc64z4XOvc+DzrfPgiBlbWFpbCAozrLPgc6tzrjOt866zrUgJyVzJykiCisKKyM6IGlkZW50LmM6Mzg0Cittc2dpZCAibm8gbmFtZSB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICLOtM61IM60z4zOuM63zrrOtSDPjM69zr/OvM6xIM66zrHOuSDOtyDOsc+Fz4TPjM68zrHPhM63IM6xzr3Or8+Hzr3Otc+Fz4POtyDOtc6vzr3Osc65IM6xz4DOtc69zrXPgc6zzr/PgM6/zrnOt868zq3Ovc63IgorCisjOiBpZGVudC5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgbmFtZSAoZ290ICclcycpIgorbXNnc3RyICLOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM6xz4XPhM+MzrzOsc+EzrcgzrHOvc6vz4fOvc61z4XPg863IM6/zr3PjM68zrHPhM6/z4IgKM6yz4HOrc64zrfOus61ICclcycpIgorCisjOiBpZGVudC5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBpZGVudCBuYW1lIChmb3IgPCVzPikgbm90IGFsbG93ZWQiCittc2dzdHIgIs60zrXOvSDOtc+AzrnPhM+Bzq3PgM61z4TOsc65IM66zrXOvc+MIM+Mzr3Ov868zrEgaWRlbnQgKM6zzrnOsSDPhM6/IDwlcz4pIgorCisjOiBpZGVudC5jOjQwNAorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lIGNvbnNpc3RzIG9ubHkgb2YgZGlzYWxsb3dlZCBjaGFyYWN0ZXJzOiAlcyIKK21zZ3N0ciAiz4TOvyDPjM69zr/OvM6xIM6xz4DOv8+EzrXOu861zq/PhM6xzrkgzrzPjM69zr8gzrHPgM+MIM68zrcgzrXPgM65z4TPgc61z4DPhM6/z43PgiDPh86xz4HOsc66z4TOrs+BzrXPgjogJXMiCisKKyM6IGlkZW50LmM6NDE5IGJ1aWx0aW4vY29tbWl0LmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICLOvM63IM6tzrPOus+Fz4HOtyDOvM6/z4HPhs6uIM63zrzOtc+Bzr/OvM63zr3Or86xz4I6ICVzIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzozNgorbXNnaWQgIm11bHRpcGxlIGZpbHRlci1zcGVjcyBjYW5ub3QgYmUgY29tYmluZWQiCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NTgKK21zZ2lkICJleHBlY3RlZCAndHJlZTo8ZGVwdGg+JyIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxNTIKK21zZ2lkICJjYW5ub3QgY2hhbmdlIHBhcnRpYWwgY2xvbmUgcHJvbWlzb3IgcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGxvY2tmaWxlLmM6MTUxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDYW5ub3QgYW1lbmQgd2hpbGUgbWVyZ2luZy5cbiIKKyJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMuXG4iCiAiXG4iCi0iWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKLSJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgotImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCisiQW5vdGhlciBnaXQgcHJvY2VzcyBzZWVtcyB0byBiZSBydW5uaW5nIGluIHRoaXMgcmVwb3NpdG9yeSwgZS5nLlxuIgorImFuIGVkaXRvciBvcGVuZWQgYnkgJ2dpdCBjb21taXQnLiBQbGVhc2UgbWFrZSBzdXJlIGFsbCBwcm9jZXNzZXNcbiIKKyJhcmUgdGVybWluYXRlZCB0aGVuIHRyeSBhZ2Fpbi4gSWYgaXQgc3RpbGwgZmFpbHMsIGEgZ2l0IHByb2Nlc3NcbiIKKyJtYXkgaGF2ZSBjcmFzaGVkIGluIHRoaXMgcmVwb3NpdG9yeSBlYXJsaWVyOlxuIgorInJlbW92ZSB0aGUgZmlsZSBtYW51YWxseSB0byBjb250aW51ZS4iCiBtc2dzdHIgIiIKLSLOlM61IM6zzq/Ovc61z4TOsc65IM60zrnPjM+BzrjPic+DzrcgzrrOsc64z47PgiDPg8+FzrPPh8+Jzr3Otc+NzrXPhM61LlxuIgorIs6UzrUgzrPOr869zrXPhM6xzrkgzr3OsSDOtM63zrzOuc6/z4XPgc6zzrfOuM61zq8gz4TOvyAnJXMubG9jayc6ICVzLlxuIgogIlxuIgotIs6Sz4HOr8+DzrrOtc+Dz4TOtSDPg8+Ezr8gzrzOrc+Dzr8gzrzOuc6xz4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgiDPgM6/z4UgzrTOtc69IM6tz4fOtc65IM6/zrvOv866zrvOt8+Bz4nOuM61zq8uIM6UzrUgzrzPgM6/z4HOtc6vz4TOtSDOvc6xICIKLSLOtM65zr/Pgc64z47Pg861z4TOtSDPhM63zr0gz4DPgc6/zrfOs86/z43OvM61zr3OtyDPhc+Azr/Oss6/zrvOriDOtc66z4TPjM+CIM61zqzOvSDOsc66z4XPgc+Oz4POtc+EzrUgz4TOt869IM+Ez4HOrc+Hzr/Phc+DzrEgzrXOvc6tz4HOs861zrnOsSAiCi0iz4PPhc6zz4fPjs69zrXPhc+DzrfPgi5cbiIKKyLOps6xzq/Ovc61z4TOsc65IM+Az4nPgiDOvM65zrEgzqzOu867zrcgzrTOuc61z4HOs86xz4POr86xIGdpdCDPhM+Bzq3Ph861zrkgzrzOrc+DzrEgz4POtSDOsc+Fz4TPjCDPhM6/IM6xz4DOv864zrXPhM6uz4HOuc6/LCDPgC7Phy5cbiIKKyLOrc69zrHPgiDOtM65zr/Pgc64z4nPhM6uz4Igz4DOv8+FIM6szr3Ov865zr7OtSDOsc+Az4wgz4TOvyAnZ2l0IGNvbW1pdCcuIM6gzrHPgc6xzrrOsc67z44gz4POuc6zzr/Phc+BzrXPhc+EzrXOr8+EzrUgz4DPic+CICIKKyLPjM67zrXPgiDOv865IM60zrnOtc+BzrPOsc+Dzq/Otc+CXG4iCisizq3Ph86/z4XOvSDPhM61z4HOvM6xz4TOuc+Dz4TOtc6vIM66zrHOuSDPgM+Bzr/Pg8+AzrHOuM6uz4PPhM61IM+AzqzOu865LiDOkc69IM6xz4DOv8+Ez4XOs8+HzqzOvc61zrkgzrHOus+MzrzOsSwgzrzPgM6/z4HOtc6vIM68zrnOsSAiCisizrTOuc61z4HOs86xz4POr86xIGdpdFxuIgorIs69zrEgzq3Ph861zrkgzrrOsc+EzrHPgc+BzrXPjc+DzrXOuSDOvM6tz4POsSDPg861IM6xz4XPhM+MIM+Ezr8gzrHPgM6/zrjOtc+Ezq7Pgc65zr8gzr3Pic+Bzq/PhM61z4HOsTpcbiIKKyLOsc+GzrHOuc+Bzq3Pg8+EzrUgz4TOvyDOsc+Bz4fOtc6vzr8gz4fOtc65z4HOv866zq/Ovc63z4TOsSDOs865zrEgzr3OsSDPg8+Fzr3Otc+Hzq/Pg861z4TOtS4iCiAKLSM6IGxpYi9jb21taXQudGNsOjQ5Ci1tc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgotbXNnc3RyICLOo8+GzqzOu868zrEgz4bPjM+Bz4TPic+DzrfPgiDOtM61zrTOv868zq3Ovc+Jzr0gz4XPgM6/zrLOv867zq7PgiDPgM+Bzr/PgiDOtM65z4zPgc64z4nPg863OiIKKyM6IGxvY2tmaWxlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDo3NgotbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHOvc6szrrPhM63z4POt8+CIM+EzrfPgiDPhM6xz4XPhM+Mz4TOt8+EzqzPgiDPg86xz4I6IgorIzogbWVyZ2UuYzo0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDo4MQotbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCi1tc2dzdHIgIs6czrcgzq3Os866z4XPgc6/IEdJVF9DT01NSVRURVJfSURFTlQ6IgorIzogbWVyZ2UuYzoxMDcgcmVyZXJlLmM6NzIwIGJ1aWx0aW4vYW0uYzoxODg0IGJ1aWx0aW4vYW0uYzoxOTE4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDE2IGJ1aWx0aW4vY2hlY2tvdXQuYzo3NDUgYnVpbHRpbi9jbG9uZS5jOjc3MQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAizrTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM61zrPOs8+BzrHPhs6uIM69zq3Ov8+FIM6xz4HPh861zq/Ov8+FIM61z4XPgc61z4TOt8+Bzq/Ov8+FIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxMzMKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzMgorbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRfY2FjaGVpbmZvIGZhaWxlZCBmb3IgcGF0aCAnJXMnOyBtZXJnZSBhYm9ydGluZy4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIHRvIHJlZnJlc2ggZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjQ0NworbXNnaWQgImVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIHBhdGggJyVzJyVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkyNyBtZXJnZS1yZWN1cnNpdmUuYzo5NDYKK21zZ2lkICI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkzNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICclcyciCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTc4IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAizrHOvc6xzrzOtc69z4zPhM6xzr0gYmxvYiDOs865zrEgJXMgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjExCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBjaGVja2VkIG91dCkiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIG5vdCBwcmVzZW50KSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgZG9uJ3QgZm9sbG93IG1lcmdlLWJhc2UpIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMzMgbWVyZ2UtcmVjdXJzaXZlLmM6MTI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIHRvIHRoZSBmb2xsb3dpbmcgY29tbWl0OiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjM2IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG1lcmdlIGZvbGxvd2luZyBjb21taXRzIG5vdCBmb3VuZCkiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChub3QgZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjc2Cittc2dpZCAiRm91bmQgYSBwb3NzaWJsZSBtZXJnZSByZXNvbHV0aW9uIGZvciB0aGUgc3VibW9kdWxlOlxuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNzkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIklmIHRoaXMgaXMgY29ycmVjdCBzaW1wbHkgYWRkIGl0IHRvIHRoZSBpbmRleCBmb3IgZXhhbXBsZVxuIgorImJ5IHVzaW5nOlxuIgogIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhbm90aGVyIGNvbW1pdCBjYW4gYmUgY3JlYXRlZC5cbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgogIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorIndoaWNoIHdpbGwgYWNjZXB0IHRoaXMgc3VnZ2VzdGlvbi5cbiIKIG1zZ3N0ciAiIgotIs6XIM+EzrXOu861z4XPhM6xzq/OsSDOus6xz4TOrM+Dz4TOsc+Dzrcgz4DOv8+FIM6xzr3Ouc+Hzr3Otc+NzrjOt866zrUgzrTOtSDPg8+FzrzPhs+Jzr3Otc6vIM68zrUgz4TOt869IM66zrHPhM6sz4PPhM6xz4POtyDPhM6/z4UgIgotIs6xz4DOv864zrXPhM63z4HOr86/z4UuXG4iCi0iXG4iCi0izprOrM+Azr/Ouc6/IM6szrvOu86/IM+Az4HPjM6zz4HOsc68zrzOsSBHaXQgz4TPgc6/z4DOv8+Azr/Or863z4POtSDPhM6/IM6xz4DOv864zrXPhM6uz4HOuc6/IM6xz4DPjCDPhM63zr0gz4TOtc67zrXPhc+EzrHOr86xICIKLSLOsc69zq/Ph869zrXPhc+DzrcuIM6gz4HOrc+AzrXOuSDOvc6xIM6zzq/Ovc61zrkgzrXPgM6xzr3Osc69zq/Ph869zrXPhc+Dzrcgz4DPgc65zr0gz4TOtyDOtM63zrzOuc6/z4XPgc6zzq/OsSDOvc6tzrHPgiDPhc+Azr/Oss6/zrvOrs+CLlxuIgotIlxuIgotIs6XIM61z4DOsc69zrHOvc6vz4fOvc61z4XPg863IM64zrEgzr7Otc66zrnOvc6uz4POtc65IM6xz4XPhM+MzrzOsc+EzrEgz4TPjs+BzrEuXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE1NAotIywgdGNsLWZvcm1hdAorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtdWx0aXBsZSBtZXJnZXMgZm91bmQpIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNjEKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvLW1lcmdpbmcgJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgd3JpdGluZyB0byAlcyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDg2CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgotIlxuIgotIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4gIFlvdSBtdXN0IHJlc29sdmUgdGhlbSBhbmQgc3RhZ2UgdGhlIGZpbGUgIgotImJlZm9yZSBjb21taXR0aW5nLlxuIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKIG1zZ3N0ciAiIgotIs6kzrEgzrzOtyDPg8+FzrPPh8+Jzr3Otc+FzrzOrc69zrEgzrHPgc+HzrXOr86xIM60zrUgzrzPgM6/z4HOv8+Nzr0gzr3OsSDPhc+Azr/Oss67zrfOuM6/z43OvS5cbiIKLSJcbiIKLSLOpM6/IM6xz4HPh861zq/OvyAlcyDOrc+HzrXOuSDPg8+FzrPOus+Bzr/Pjc+DzrXOuc+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IuIM6gz4HOrc+AzrXOuSDOvc6xIM+EzrnPgiDOtc+AzrnOu8+Nz4POtc+EzrUgzrrOsc65IM69zrEgIgotIs+Dz4TOsc60zrnOv8+Azr/Ouc6uz4POtc+EzrUgz4TOvyDOsc+Bz4fOtc6vzr8gz4DPgc65zr0gz4TOt869IM+Fz4DOv86yzr/Ou86uLlxuIgorIs6jzqXOk86azqHOn86lzqPOlyAoJXMvzrTOuc6xzrPPgc6xz4bOrik6IM6IzrPOuc69zrUgzrTOuc6xzrPPgc6xz4bOriDPhM6/z4UgJXMgz4PPhM6/ICVzIM66zrHOuSAlcyDPg8+Ezr8gJXMuICIKKyLOlM65zrHPhM63z4HOrs64zrfOus61IM63IM6tzrrOtM6/z4POtyAlcyDPhM6/z4UgJXMgz4PPhM6/IM60zq3Ovc+Ez4HOvy4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE2MgotIywgdGNsLWZvcm1hdAorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5MQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgotIlxuIgotIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUuIgogbXNnc3RyICIiCi0izobOs869z4nPg8+EzrcgzrrOsc+EzqzPg8+EzrHPg863IM6xz4HPh861zq/Ov8+FICVzIM6xzr3Ouc+Hzr3Otc+NzrjOt866zrUuXG4iCi0iXG4iCi0izqTOvyDOsc+Bz4fOtc6vzr8gJXMgzrTOtSDOvM+Azr/Pgc61zq8gzr3OsSDPhc+Azr/Oss67zrfOuM61zq8gzrHPgM+MIM6xz4XPhM+MIM+Ezr8gz4DPgc+MzrPPgc6xzrzOvM6xLlxuIgorIs6jzqXOk86azqHOn86lzqPOlyAoJXMvzrTOuc6xzrPPgc6xz4bOrik6IM6IzrPOuc69zrUgzrTOuc6xzrPPgc6xz4bOriDPhM6/z4UgJXMgz4PPhM6/ICVzIM66zrHOuSAlcyDPg8+Ezr8gJXMgz4PPhM6/ICVzLiAiCisizpTOuc6xz4TOt8+Bzq7OuM63zrrOtSDOtyDOrc66zrTOv8+DzrcgJXMgz4TOv8+FICVzIM+Dz4TOvyDOtM6tzr3PhM+Bzr8uIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxNzAKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0OTgKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgotIlxuIgotIllvdSBtdXN0IHN0YWdlIGF0IGxlYXN0IDEgZmlsZSBiZWZvcmUgeW91IGNhbiBjb21taXQuXG4iCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUgYXQgJXMuIgogbXNnc3RyICIiCi0izpTOtc69IM+Fz4DOrM+Bz4fOv8+Fzr0gzrHOu867zrHOs86tz4Igz4DPgc6/z4Igz4XPgM6/zrLOv867zq4uXG4iCi0iXG4gIgotIs6gz4HOrc+AzrXOuSDOvc6xIM+Dz4TOsc60zrnOv8+Azr/Ouc6uz4POtc+EzrUgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSAxIM6xz4HPh861zq/OvyDPgM+BzrnOvSDOvc6xIM66zqzOvc61z4TOtSDPhc+Azr/Oss6/zrvOri5cbiIKKyLOo86lzpPOms6hzp/Opc6jzpcgKCVzL860zrnOsc6zz4HOsc+Gzq4pOiDOiM6zzrnOvc61IM60zrnOsc6zz4HOsc+Gzq4gz4TOv8+FICVzIM+Dz4TOvyAlcyDOus6xzrkgJXMgz4PPhM6/ICVzLiAiCisizpTOuc6xz4TOt8+Bzq7OuM63zrrOtSDOtyDOrc66zrTOv8+DzrcgJXMgz4TOv8+FICVzIM+Dz4TOvyDOtM6tzr3PhM+Bzr8gz4PPhM6/ICVzLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTgzCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTAzCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCi0iXG4iCi0iQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKLSJcbiIKLSItIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuXG4iCi0iLSBTZWNvbmQgbGluZTogQmxhbmtcbiIKLSItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUgYXQgJXMuIgogbXNnc3RyICIiCi0izqDOsc+BzrHOus6xzrvPjiDOtM+Oz4PPhM61IM6tzr3OsSDOvM6uzr3Phc68zrEgz4XPgM6/zrLOv867zq7Pgi5cbiIKLSJcbiIKLSLOiM69zrEgz4PPic+Dz4TPjCDOvM6uzr3Phc68zrEgz4XPgM6/zrLOv867zq7PgiDOrc+HzrXOuSDPhM63zr0gzrXOvs6uz4IgzrzOv8+Bz4bOrjpcbiIKLSJcbiIKLSItIM6gz4HPjs+EzrcgzrPPgc6xzrzOvM6uOiDOoM61z4HOuc6zz4HOsc+Gzq4gz4POtSDOvM6vzrEgz4DPgc+Mz4TOsc+Dzrcgz4TOv8+FIM+EzrkgzrrOrM69zrHPhM61LlxuIgotIi0gzpTOtc+Nz4TOtc+BzrcgzrPPgc6xzrzOvM6uOiDOms61zr3OrlxuIgotIi0gzqXPgM+MzrvOv865z4DOtc+CIM6zz4HOsc68zrzOrc+COiDOoM61z4HOuc6zz4HOsc+Gzq4gz4TOv8+FIM6zzrnOsc+Ezq8gzrHPhc+Ezq4gzrcgzrHOu867zrHOs86uIM61zq/Ovc6xzrkgz4PPic+Dz4TOri5cbiIKKyLOo86lzpPOms6hzp/Opc6jzpcgKCVzL860zrnOsc6zz4HOsc+Gzq4pOiDOiM6zzrnOvc61IM60zrnOsc6zz4HOsc+Gzq4gz4TOv8+FICVzIM+Dz4TOvyAlcyDOus6xzrkgJXMgz4PPhM6/ICVzIM+Dz4TOvyAlcy4gIgorIs6UzrnOsc+EzrfPgc6uzrjOt866zrUgzrcgzq3Ous60zr/Pg863ICVzIM+Ezr/PhSAlcyDPg8+Ezr8gzrTOrc69z4TPgc6/IM+Dz4TOvyAlcy4iCiAKLSM6IGxpYi9jb21taXQudGNsOjIwNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgotbXNnc3RyICLPgM+Bzr/Otc65zrTOv8+Azr/Or863z4POtzogSCBUY2wgzrTOtc69IM+Fz4DOv8+Dz4TOt8+Bzq/Ots61zrkgz4TOt869IM66z4nOtM65zrrOv8+Azr/Or863z4POtyAnJXMnLiIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MzcKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgIs68zrXPhM6/zr3Ov868zrHPg86vzrEiCiAKLSM6IGxpYi9jb21taXQudGNsOjIyMQotbXNnaWQgIkNhbGxpbmcgcHJlLWNvbW1pdCBob29rLi4uIgotbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOus67zq7Pg863IM+Ezr/PhSBwcmUtY29tbWl0IGhvb2suLi4iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTM3Cittc2dpZCAicmVuYW1lZCIKK21zZ3N0ciAizrzOtc+Ezr/Ovc6/zrzOrM+Dz4TOt866zrUiCiAKLSM6IGxpYi9jb21taXQudGNsOjIzNgotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgotbXNnc3RyICLOlyDPhc+Azr/Oss6/zrvOriDOsc+Azr/Pgc+Bzq/Phs64zrfOus61IM6xz4DPjCDPhM6/IHByZS1jb21taXQgaG9vay4iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjMzIG1lcmdlLXJlY3Vyc2l2ZS5jOjI0ODEgbWVyZ2UtcmVjdXJzaXZlLmM6MzIxMworIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgJXMiCittc2dzdHIgIiIKIAotIzogbGliL2NvbW1pdC50Y2w6MjU5Ci1tc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCi1tc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM66zrvOrs+Dzrcgz4TOv8+FIGNvbW1pdC1tc2cgaG9vay4uLiIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyNzQKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAizpcgz4XPgM6/zrLOv867zq4gzrHPgM6/z4HPgc6vz4bOuM63zrrOtSDOsc+Az4wgz4TOvyBjb21taXQtbXNnIGhvb2suIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL2FkZCk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuICBBZGRlZCAlcyBpbiAlcyIKK21zZ3N0ciAiIgorIs6jzqXOk86azqHOn86lzqPOlyAozrzOtc+Ezr/Ovc6/zrzOsc+Dzq/OsS/PgM+Bzr/Pg864zq7Ous63KTogzpzOtc+Ezr/Ovc6/zrzOsc+Dzq/OsSAlcy0+JXMgz4PPhM6/ICVzLiAgzojOs865zr3OtSDPgM+Bzr/Pg864zq7Ous63ICIKKyIlcyDPg8+Ezr8gJXMiCiAKLSM6IGxpYi9jb21taXQudGNsOjI4NwotbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKLW1zZ3N0ciAizpPOr869zrXPhM6xzrkgz4XPgM6/zrLOv867zq4gz4TPic69IM6xzrvOu86xzrPPjs69Li4uIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTczNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMDMKLW1zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCi1tc2dzdHIgIs+Ezr8gd3JpdGUtdHJlZSDOsc+Azq3PhM+Fz4fOtToiCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jb21taXQudGNsOjMwNCBsaWIvY29tbWl0LnRjbDozNDggbGliL2NvbW1pdC50Y2w6MzY4Ci1tc2dpZCAiQ29tbWl0IGZhaWxlZC4iCi1tc2dzdHIgIs6XIM+Fz4DOv86yzr/Ou86uIM6xz4DOrc+Ez4XPh861LiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzIxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ29tbWl0ICVzIGFwcGVhcnMgdG8gYmUgY29ycnVwdCIKLW1zZ3N0ciAizpcgz4XPgM6/zrLOv867zq4gJXMgzrTOtc6vz4fOvc61zrkgzrrOsc+EzrXPg8+Ez4HOsc68zrzOrc69zrciCi0KLSM6IGxpYi9jb21taXQudGNsOjMyNgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc1OQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCi0iXG4iCi0iTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKLSJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgogbXNnc3RyICIiCi0izpTOtc69IM+Fz4DOrM+Bz4fOv8+Fzr0gzrHOu867zrHOs86tz4Igz4DPgc6/z4Igz4XPgM6/zrLOv867zq4uXG4iCi0iXG4iCi0izpTOtc69IM+Ez4HOv8+Azr/PgM6/zrnOrs64zrfOus6xzr0gzrHPgc+HzrXOr86xIM6xz4DPjCDOsc+Fz4TOriDPhM63zr0gz4XPgM6/zrLOv867zq4gzrrOsc65IM60zrXOvSDOrs+EzrHOvSDPhc+Azr/Oss6/zrvOriAiCi0iz4PPhc6zz4fPjs69zrXPhc+DzrfPgi5cbiIKLSJcbiIKLSLOmM6xIM6+zrXOus65zr3Ors+DzrXOuSDOsc+Fz4TPjM68zrHPhM6xIM61z4DOsc69zrHOvc6vz4fOvc61z4XPg863IM+Ez47Pgc6xLlxuIgorIs6jzqXOk86azqHOn86lzqPOlyAozrzOtc+Ezr/Ovc6/zrzOsc+Dzq/OsS/OvM61z4TOv869zr/OvM6xz4POr86xKTogzpzOtc+Ezr/Ovc6/zrzOsc+Dzq/OsSBcIiVzXCItPlwiJXNcIiDPg8+Ezr/OvSDOus67zqzOtM6/ICIKKyJcIiVzXCIgzrzOtc+Ezr/Ovc6/zrzOsc+Dzq/OsSBcIiVzXCItPlwiJXNcIiDPg8+Ezr/OvSDOus67zqzOtM6/IFwiJXNcIiVzIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMzMKLW1zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCi1tc2dzdHIgIs6UzrXOvSDPhc+AzqzPgc+Hzr/Phc69IM6xzrvOu86xzrPOrc+CIM+Az4HOv8+CIM+Fz4DOv86yzr/Ou86uLiIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NjQKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAozq3OvM61zrnOvc61IM6xz4TOsc+Nz4TOuc+Dz4TOvykiCiAKLSM6IGxpYi9jb21taXQudGNsOjM0NwotbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCi1tc2dzdHIgIs+Ezr8gY29tbWl0LXRyZWUgzrHPgM6tz4TPhc+HzrU6IgotCi0jOiBsaWIvY29tbWl0LnRjbDozNjcKLW1zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCi1tc2dzdHIgIs+Ezr8gdXBkYXRlLXJlZiDOsc+Azq3PhM+Fz4fOtToiCi0KLSM6IGxpYi9jb21taXQudGNsOjQ1NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKLW1zZ3N0ciAizpTOt868zrnOv8+Fz4HOs86uzrjOt866zrUgz4XPgM6/zrLOv867zq4gJXM6ICVzIgotCi0jOiBsaWIvY29uc29sZS50Y2w6NTkKLW1zZ2lkICJXb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uIgotbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOtc+BzrPOsc+Dzq/OsS4uLiDOoM6xz4HOsc66zrHOu8+OIM+AzrXPgc65zrzOrc69zrXPhM61Li4uIgotCi0jOiBsaWIvY29uc29sZS50Y2w6MTg2Ci1tc2dpZCAiU3VjY2VzcyIKLW1zZ3N0ciAizpXPgM65z4TPhc+Hzq/OsSIKLQotIzogbGliL2NvbnNvbGUudGNsOjIwMAotbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKLW1zZ3N0ciAizqPPhs6szrvOvM6xOiDOlyDOlc69z4TOv867zq4gzpHPgM6tz4TPhc+HzrUiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDMKLW1zZ2lkICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyIKLW1zZ3N0ciAizpHPgc65zrjOvM+Mz4IgzrXOu861z43OuM61z4HPic69IM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NAotbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBsb29zZSBvYmplY3RzIgotbXNnc3RyICLOp8+Oz4HOv8+CIM66zrHPhM61zrnOu867zrfOvM6tzr3Ov8+CIM6xz4DPjCDOtc67zrXPjc64zrXPgc6xIM6xzr3PhM65zrrOtc6vzrzOtc69zrEiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKLW1zZ2lkICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMiCi1tc2dzdHIgIs6Rz4HOuc64zrzPjM+CIM+AzrHOus61z4TOsc+BzrnPg868zq3Ovc+Jzr0gzrHOvc+EzrnOus61zrnOvM6tzr3Pic69IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ2Ci1tc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgotbXNnc3RyICLOkc+BzrnOuM68z4zPgiDPgM6xzrrOrc+Ez4nOvSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NwotbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBwYWNrZWQgb2JqZWN0cyIKLW1zZ3N0ciAizqfPjs+Bzr/PgiDOus6xz4TOtc65zrvOu863zrzOrc69zr/PgiDOsc+Az4wgz4DOsc66zrXPhM6xz4HOuc+DzrzOrc69zrEgzrHOvc+EzrnOus61zq/OvM61zr3OsSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0OAotbXNnaWQgIlBhY2tlZCBvYmplY3RzIHdhaXRpbmcgZm9yIHBydW5pbmciCi1tc2dzdHIgIs6gzrHOus61z4TOsc+BzrnPg868zq3Ovc6xIM6xzr3PhM65zrrOtc6vzrzOtc69zrEgzq3PhM6/zrnOvM6xIM6zzrnOsSDOus67zqzOtM61zrzOsSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0OQotbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCi1tc2dzdHIgIs6Gz4fPgc63z4PPhM6xIM6xz4HPh861zq/OsSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo3MgotbXNnaWQgIkNvbXByZXNzaW5nIHRoZSBvYmplY3QgZGF0YWJhc2UiCi1tc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM+Dz4XOvM+Azq/Otc+Dzrcgz4TOt8+CIM6yzqzPg863z4IgzrTOtc60zr/OvM6tzr3Pic69IM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo4MwotbXNnaWQgIlZlcmlmeWluZyB0aGUgb2JqZWN0IGRhdGFiYXNlIHdpdGggZnNjay1vYmplY3RzIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCiBtc2dzdHIgIiIKLSLOk86vzr3Otc+EzrHOuSDOtc+AzrHOu86uzrjOtc+Fz4POtyDPhM63z4IgzrLOrM+DzrfPgiDOtM61zrTOv868zq3Ovc+Jzr0gzrHOvc+EzrnOus61zrnOvM6tzr3Pic69IM68zrUgzrHOvc+EzrnOus61zq/OvM61zr3OsSBmc2NrIgorIs6jzqXOk86azqHOn86lzqPOlyAozrzOtc+Ezr/Ovc6/zrzOsc+Dzq/OsS/OvM61z4TOv869zr/OvM6xz4POr86xKTogzpzOtc+Ezr/Ovc6/zrzOsc+Dzq/OsSAlcy0+JXMgz4PPhM6/ICVzLiDOnM61z4TOv869zr/OvM6xz4POr86xICIKKyIlcy0+JXMgz4PPhM6/ICVzIgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjEwOAotIywgdGNsLWZvcm1hdAorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA2NAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgotIlxuIgotIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgotInRoZSBkYXRhYmFzZSB3aGVuIG1vcmUgdGhhbiAlaSBsb29zZSBvYmplY3RzIGV4aXN0LlxuIgotIlxuIgotIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgorIkNPTkZMSUNUIChkaXJlY3RvcnkgcmVuYW1lIHNwbGl0KTogVW5jbGVhciB3aGVyZSB0byBwbGFjZSAlcyBiZWNhdXNlICIKKyJkaXJlY3RvcnkgJXMgd2FzIHJlbmFtZWQgdG8gbXVsdGlwbGUgb3RoZXIgZGlyZWN0b3JpZXMsIHdpdGggbm8gZGVzdGluYXRpb24gIgorImdldHRpbmcgYSBtYWpvcml0eSBvZiB0aGUgZmlsZXMuIgogbXNnc3RyICIiCi0izpHPhc+Ez4wgz4TOvyDOsc+Azr/OuM61z4TOrs+BzrnOvyDOrc+HzrXOuSDOsc+Fz4TOriDPhM63IM+Dz4TOuc6zzrzOriDPgM61z4HOr8+Azr/PhSAlaSDOtc67zrXPjc64zrXPgc6xIM6xzr3PhM65zrrOtc6vzrzOtc69zrEuXG4iCi0iXG4iCi0izpPOuc6xIM+EzrcgzrTOuc6xz4TOrs+BzrfPg863IM6yzq3Ou8+EzrnPg8+Ez4nOvSDOtc+AzrnOtM+Mz4POtc+Jzr0gz4PPhc69zrnPg8+EzqzPhM6xzrkgzr3OsSDPg8+FzrzPgM65zq3Pg861z4TOtSDPhM63IM6yzqzPg863ICIKLSLOtM61zrTOv868zq3Ovc+Jzr0gz4zPhM6xzr0gz4XPgM6sz4HPh86/z4XOvSDPgM61z4HOuc+Dz4PPjM+EzrXPgc6xIM6xz4DPjCAlaSDOtc67zrXPjc64zrXPgc6xIM6xzr3PhM65zrrOtc6vzrzOtc69zrEuXG4iCi0iXG4iCi0izqPPhc68z4DOr861z4POtyDPhM63z4IgzrLOrM+DzrfPgiDOtM61zrTOv868zq3Ovc+Jzr0gz4TPjs+BzrE7IgorIs6jzqXOk86azqHOn86lzqPOlyAozrHPg86sz4bOtc65zrEgzrzOtc+Ezr/Ovc6/zrzOsc+Dzq/Osc+CIM+GzrHOus6tzrvOv8+FKTogzpTOtc69IM61zq/Ovc6xzrkgz4POsc+Gzq3PgiDPgM6/z40gzr3OsSDPhM6/z4DOv864zrXPhM63zrjOtc6vICIKKyLPhM6/ICVzIM61z4DOtc65zrTOriDOvyDPhs6szrrOtc67zr/PgiAlcyDOvM61z4TOv869zr/OvM6sz4PPhM63zrrOtSDPg861IM+Azr/Ou867zrHPgM67zr/Pjc+CIM6szrvOu86/z4XPgiDPhs6xzrrOrc67zr/Phc+CLCDOus6xzrkgIgorIs66zrHOvc6tzr3Osc+CIM+Az4HOv86/z4HOuc+DzrzPjM+CIM60zrXOvSDPgM6uz4HOtSDPhM6xIM+AzrXPgc65z4PPg8+Mz4TOtc+BzrEgzrHPgc+HzrXOr86xLiIKIAotIzogbGliL2RhdGUudGNsOjI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKLW1zZ3N0ciAizpzOtyDOrc6zzrrPhc+BzrcgzrfOvM61z4HOv868zrfOvc6vzrEgzrHPgM+MIM+Ezr8gR2l0OiAlcyIKLQotIzogbGliL2RpZmYudGNsOjQyCi0jLCB0Y2wtZm9ybWF0CisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDk2CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKLSJcbiIKLSIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKLSJcbiIKLSJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCAiCi0idGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKLSJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlICIKLSJ0aGUgc2FtZSBzdGF0ZS4iCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBFeGlzdGluZyBmaWxlL2RpciBhdCAlcyBpbiB0aGUgd2F5IG9mICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lKHMpIHB1dHRpbmcgdGhlIGZvbGxvd2luZyBwYXRoKHMpIHRoZXJlOiAlcy4iCiBtc2dzdHIgIiIKLSLOlM61zr0gzrHOvc65z4fOvc61z43OuM63zrrOsc69IM60zrnOsc+Gzr/Pgc6tz4IuXG4iCi0iXG4iCi0izqTOvyAlcyDOtM61zr0gzq3Ph861zrkgzrHOu867zrHOs86tz4IuIgotIlxuIgotIs6XIM63zrzOtc+Bzr/OvM63zr3Or86xIM+Ez4HOv8+Azr/PgM6/zq/Ot8+DzrfPgiDOsc+Fz4TOv8+NIM+Ezr/PhSDOsc+Bz4fOtc6vzr/PhSDOtc69zrfOvM61z4HPjs64zrfOus61IM6xz4DPjCDOrM67zrvOtyDOtc+GzrHPgc68zr/Os86uLCAiCi0izrHOu867zqwgz4TOvyDPgM61z4HOuc61z4fPjM68zrXOvc6/IM+Ezr/PhSDOsc+Bz4fOtc6vzr/PhSDOtM61zr0gzqzOu867zrHOvs61LlxuIgotIlxuIgotIs6YzrEgzr7Otc66zrnOvc6uz4POtc65IM6xz4XPhM+MzrzOsc+EzrEgzrXPgM6xzr3Osc69zq/Ph869zrXPhc+DzrcgzrPOuc6xIM69zrEgzrLPgc61zrjOv8+Nzr0gzqzOu867zrEgzrHPgc+HzrXOr86xIM+Azr/PhSDOvM+Azr/Pgc61zq8gzr3OsSAiCi0izrLPgc6vz4POus6/zr3PhM6xzrkgz4POtSDOr860zrnOsSDOus6xz4TOrM+Dz4TOsc+DzrcuIgorIs6jzqXOk86azqHOn86lzqPOlyAozrXOvc69zr/Ov8+NzrzOtc69zrcgzrzOtc+Ezr/Ovc6/zrzOsc+Dzq/OsSDPhs6xzrrOrc67z4nOvSk6IM6lz4DOrM+Bz4fOv869IM6xz4HPh861zq/Ovy/Phs6szrrOtc67zr/PgiDPg8+Ezr8gJXMgIgorIs61zrzPgM6/zrTOr862zrXOuSDPhM63zr0gzrXOvc69zr/Ov8+NzrzOtc69zrcgzrzOtc+Ezr/Ovc6/zrzOsc+Dzq/OsSDPgM6/z4UgzrjOsSDOrc6yzrHOts61IM+EzrnPgiDOtc+Az4zOvM61zr3Otc+CIM60zrnOsc60z4HOv868zq3PgiAiCisizrXOus61zq86ICVzLiIKIAotIzogbGliL2RpZmYudGNsOjgxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgotbXNnc3RyICLOk86vzr3Otc+EzrHOuSDPhs+Mz4HPhM+Jz4POtyDOtM65zrHPhs6/z4HOrM+CIM+Ezr/PhSAlcy4uLiIKLQotIzogbGliL2RpZmYudGNsOjExNCBsaWIvZGlmZi50Y2w6MTg0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCi1tc2dzdHIgIs6UzrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDPgM+Bzr/Oss6/zrvOriDPhM6/z4UgJXMiCi0KLSM6IGxpYi9kaWZmLnRjbDoxMTUKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgotbXNnc3RyICLOo8+GzqzOu868zrEgz4bPjM+Bz4TPic+DzrfPgiDOsc+Bz4fOtc6vzr/PhToiCi0KLSM6IGxpYi9kaWZmLnRjbDoxMjIKLW1zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCi1tc2dzdHIgIs6Rz4DOv864zrXPhM6uz4HOuc6/IEdpdCAozrjPhc6zzrHPhM+BzrnOus+MIM6tz4HOs86/KSIKLQotIzogbGliL2RpZmYudGNsOjEzNAotbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKLW1zZ3N0ciAiKiDOlM+FzrHOtM65zrrPjCDOsc+Bz4fOtc6vzr8gKM68zrcgzrXOvM+GzqzOvc65z4POtyDPgM61z4HOuc61z4fOv868zq3Ovc6/z4UpLiIKLQotIzogbGliL2RpZmYudGNsOjE4NQotbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCi1tc2dzdHIgIs6jz4bOrM67zrzOsSDPhs+Mz4HPhM+Jz4POt8+CIM60zrnOsc+Gzr/Pgc6sz4I6IgotCi0jOiBsaWIvZGlmZi50Y2w6MzAzCi1tc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCi1tc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgzrHPgM6/z4PPhM6xzrTOuc6/z4DOv86vzrfPg863z4IgzrXPgM65zrvOtc6zzrzOrc69zr/PhSDOus6/zrzOvM6xz4TOuc6/z40uIgotCi0jOiBsaWIvZGlmZi50Y2w6MzEwCi1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM+Dz4TOsc60zrnOv8+Azr/Or863z4POt8+CIM61z4DOuc67zrXOs868zq3Ovc6/z4UgzrrOv868zrzOsc+EzrnOv8+NLiIKLQotIzogbGliL2Vycm9yLnRjbDoyMCBsaWIvZXJyb3IudGNsOjExNAotbXNnaWQgImVycm9yIgotbXNnc3RyICLPg8+GzqzOu868zrEiCi0KLSM6IGxpYi9lcnJvci50Y2w6MzYKLW1zZ2lkICJ3YXJuaW5nIgotbXNnc3RyICLPgM+Bzr/Otc65zrTOv8+Azr/Or863z4POtyIKLQotIzogbGliL2Vycm9yLnRjbDo5NAotbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCi1tc2dzdHIgIs6gz4HOrc+AzrXOuSDOvc6xIM60zrnOv8+BzrjPjs+DzrXPhM61IM+EzrEgz4DOsc+BzrHPgM6szr3PiSDOu86szrjOtyDPgM+BzrnOvSDPhM63zr0gz4XPgM6/zrLOv867zq4uIgotCi0jOiBsaWIvaW5kZXgudGNsOjYKLW1zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzr7Otc66zrvOtc65zrTPjs68zrHPhM6/z4Igz4TOv8+FIM61z4XPgc61z4TOt8+Bzq/Ov8+FLiIKLQotIzogbGliL2luZGV4LnRjbDoxNQotbXNnaWQgIkluZGV4IEVycm9yIgotbXNnc3RyICLOo8+GzqzOu868zrEgzpXPhc+BzrXPhM63z4HOr86/z4UiCi0KLSM6IGxpYi9pbmRleC50Y2w6MjEKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIxMDYKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgotInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBDYW5ub3QgbWFwIG1vcmUgdGhhbiBvbmUgcGF0aCB0byAlczsgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzIHRyaWVkIHRvIHB1dCB0aGVzZSBwYXRocyB0aGVyZTogJXMiCiBtc2dzdHIgIiIKLSLOlyDOtc69zrfOvM6tz4HPic+Dzrcgz4TOv8+FIM61z4XPgc61z4TOt8+Bzq/Ov8+FIEdpdCDOsc+Azq3PhM+Fz4fOtS4gzpjOsSDOvs61zrrOuc69zq7Pg861zrkgzrHPhc+Ez4zOvM6xz4TOsSDOtc+AzrHOvc6xzr3Or8+Hzr3Otc+Fz4POtyAiCi0izrPOuc6xIM61z4DOsc69zrHPg8+FzrPPh8+Bzr/Ovc65z4POvM+MIM+Ezr/PhSBnaXQtZ3VpLiIKKyLOo86lzpPOms6hzp/Opc6jzpcgKM61zr3Ovc6/zr/Pjc68zrXOvc63IM68zrXPhM6/zr3Ov868zrHPg86vzrEgz4bOsc66zq3Ou8+Jzr0pOiDOlM61IM68z4DOv8+BzrXOryDOvc6xIM6zzq/Ovc61zrkgzrHOvc+EzrnPg8+Ezr/Or8+HzrnPg863ICIKKyLPhM6/z4UgJXMgzrzOtSDPgM61z4HOuc+Dz4PPjM+EzrXPgc61z4IgzrHPgM+MIM68zq/OsSDOtM65zrHOtM+Bzr/OvM6tz4IsIM6/zrkgzrXOvc69zr/Ov8+NzrzOtc69zrXPgiDOvM61z4TOv869zr/OvM6xz4POr861z4IgIgorIs+GzrHOus6tzrvPic69IM+Az4HOv8+Dz4DOrM64zrfPg86xzr0gzr3OsSDOss6szrvOv8+Fzr0gzrHPhc+Ezq3PgiDPhM65z4IgzrTOuc6xzrTPgc6/zrzOrc+CIM61zrrOtc6vOiAlcyIKIAotIzogbGliL2luZGV4LnRjbDoyNwotbXNnaWQgIkNvbnRpbnVlIgotbXNnc3RyICLOo8+Fzr3Orc+HzrXOuc6xIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjE5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgZGlyZWN0b3J5ICVzLT4lcyBpbiAlcy4gUmVuYW1lIGRpcmVjdG9yeSAlcy0iCisiPiVzIGluICVzIgorbXNnc3RyICIiCisizqPOpc6TzprOoc6fzqXOo86XICjOvM61z4TOv869zr/OvM6xz4POr86xL868zrXPhM6/zr3Ov868zrHPg86vzrEpOiDOnM61z4TOv869zr/OvM6xz4POr86xIM+GzrHOus6tzrvOv8+FICVzLT4lcyDPg8+Ezr8gJXMuICIKKyLOnM61z4TOv869zr/OvM6xz4POr86xIM+GzrHOus6tzrvOv8+FICVzLT4lcyDPg8+Ezr8gJXMiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzEKLW1zZ2lkICJVbmxvY2sgSW5kZXgiCi1tc2dzdHIgIs6ezrXOus67zrXOr860z4nOvM6xIM6Vz4XPgc61z4TOt8+Bzq/Ov8+FIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogQXZvaWRpbmcgYXBwbHlpbmcgJXMgLT4gJXMgcmVuYW1lIHRvICVzLCBiZWNhdXNlICVzIGl0c2VsZiB3YXMgIgorInJlbmFtZWQuIgorbXNnc3RyICIiCiAKLSM6IGxpYi9pbmRleC50Y2w6MjgyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5zdGFnaW5nICVzIGZyb20gY29tbWl0IgotbXNnc3RyICLOkc+Azr/Pg8+EzrHOtM65zr/PgM6/zq/Ot8+DzrcgJXMgzrHPgM+MIM+Fz4DOv86yzr/Ou86uIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIiIKIAotIzogbGliL2luZGV4LnRjbDozMTMKLW1zZ2lkICJSZWFkeSB0byBjb21taXQuIgotbXNnc3RyICLOiM+Ezr/Ouc68zr8gz4DPgc6/z4Igz4XPgM6/zrLOv867zq4uIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAiz4TOvyDOsc69z4TOuc66zrXOr868zrXOvc6/ICVzIM60zrXOvSDOtc6vzr3Osc65IGJsb2IiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzI2Ci0jLCB0Y2wtZm9ybWF0CisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDk0Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICLPhM+Bzr/PgM6/z4DOv865z44iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwOTQKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAiz4TPgc6/z4DOv8+Azr/Ouc63zrzOrc69zr8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxMDUKK21zZ2lkICJjb250ZW50IgorbXNnc3RyICLPgM61z4HOuc61z4fPjM68zrXOvc6/IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTEyCittc2dpZCAiYWRkL2FkZCIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgJXMgKG1lcmdlZCBzYW1lIGFzIGV4aXN0aW5nKSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTgyIGdpdC1zdWJtb2R1bGUuc2g6ODYxCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICLPhc+Azr/Otc69z4zPhM63z4TOsSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE4MworIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAizqPOpc6TzprOoc6fzqXOo86XICglcyk6IM6jz43Os866z4HOv8+Fz4POtyDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CIM+Dz4TOvyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIgorbXNnc3RyICLOkc+GzrHOr8+BzrXPg863IM+Ezr/PhSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM0NQorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNTEKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IFRoZXJlIGlzIGEgZGlyZWN0b3J5IHdpdGggbmFtZSAlcyBpbiAlcy4gQWRkaW5nICVzIGFzICVzIgorbXNnc3RyICIiCisizqPOpc6TzprOoc6fzqXOo86XICglcyk6IM6lz4DOrM+Bz4fOtc65IM+GzqzOus61zrvOv8+CIM68zrUgz4zOvc6/zrzOsSAlcyDPg8+Ezr8gJXMuIM6Tzq/Ovc61z4TOsc65IM+Az4HOv8+DzrjOrs66zrcgz4TOv8+FICVzICIKKyLPic+CICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzY3CisjLCBjLWZvcm1hdAogbXNnaWQgIkFkZGluZyAlcyIKLW1zZ3N0ciAizqDPgc6/z4POuM6uzrrOtyAlcyIKLQotIzogbGliL2luZGV4LnRjbDozODEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKLW1zZ3N0ciAizpHOvc6xzq/Pgc61z4POtyDOsc67zrvOsc6zz47OvSDPg8+Ezr8gzrHPgc+HzrXOr86/ICVzOyIKLQotIzogbGliL2luZGV4LnRjbDozODMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCi1tc2dzdHIgIs6Rzr3Osc6vz4HOtc+DzrcgzrHOu867zrHOs8+Ozr0gz4POtSDOsc+Fz4TOrCDPhM6xICVpIM6xz4HPh861zq/OsTsiCi0KLSM6IGxpYi9pbmRleC50Y2w6MzkxCi1tc2dpZCAiQW55IHVuc3RhZ2VkIGNoYW5nZXMgd2lsbCBiZSBwZXJtYW5lbnRseSBsb3N0IGJ5IHRoZSByZXZlcnQuIgogbXNnc3RyICIiCi0izozOu861z4Igzr/OuSDOvM63IM+Dz4TOsc60zrnOv8+Azr/Ouc63zrzOrc69zrXPgiDOsc67zrvOsc6zzq3PgiDOuM6xIM+HzrHOuM6/z43OvSDOv8+BzrnPg8+EzrnOus6sIM6xz4DPjCDPhM63zr0gzrHOvc6xzq/Pgc61z4POty4iCiAKLSM6IGxpYi9pbmRleC50Y2w6Mzk0Ci1tc2dpZCAiRG8gTm90aGluZyIKLW1zZ3N0ciAizprOsc68zq/OsSDOlc69zq3Pgc6zzrXOuc6xIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoYWRkL2FkZCk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICLOo86lzpPOms6hzp/Opc6jzpcgKM+Az4HOv8+DzrjOrs66zrcvz4DPgc6/z4POuM6uzrrOtyk6IM6jz43Os866z4HOv8+Fz4POtyDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CIM+Dz4TOvyAlcyIKIAotIzogbGliL21lcmdlLnRjbDoxMworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQxNworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgotIlxuIgotIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiICAlcyIKIG1zZ3N0ciAiIgotIs6UzrUgzrPOr869zrXPhM6xzrkgz4PPhc6zz4fPjs69zrXPhc+DzrcgzrrOsc64z47PgiDOtM65zr/Pgc64z47Ovc61z4TOtS5cbiIKLSJcbiIKLSLOoM+Bzq3PgM61zrkgzr3OsSDPhM61zrvOtc65z47Pg861z4TOtSDPhM63IM60zrnPjM+BzrjPic+DzrcgzrHPhc+Ezq7PgiDPhM63z4Igz4XPgM6/zrLOv867zq7PgiDPgM+BzrnOvSDOvc6xIM6+zrXOus65zr3Ors+DzrXPhM61ICIKLSLOv8+Azr/Ouc6xz4POtM6uz4DOv8+EzrUgzrzOv8+Bz4bOrs+CIM+Dz4XOs8+Hz47Ovc61z4XPg863LlxuIgorIs6fzrkgz4TOv8+AzrnOus6tz4IgzrHOu867zrHOs86tz4Igz4POsc+CIM+Dz4TOsSDOsc66z4zOu86/z4XOuM6xIM6xz4HPh861zq/OsSDOuM6xIM61z4DOtc6zzrPPgc6xz4bPjM69z4TOv8+Fz4POsc69IM6xz4DPjCDPhM63ICIKKyLPg8+FzrPPh8+Ozr3Otc+Fz4POtzpcbiIKKyIgICVzIgogCi0jOiBsaWIvbWVyZ2UudGNsOjI3CisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDI4Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlISIKK21zZ3N0ciAizonOtM63IM+AzrvOrs+Bz4nPgiDOtc69zq7OvM61z4HOvyEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1MzYKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzU4OAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjcwIGJ1aWx0aW4vbWVyZ2UuYzo2OTIgYnVpbHRpbi9tZXJnZS5jOjg1MAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iCittc2dzdHIgIiIKKworIzogbWlkeC5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggZmlsZSAlcyBpcyB0b28gc21hbGwiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc2lnbmF0dXJlIDB4JTA4eCBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUgMHglMDh4IgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHZlcnNpb24gJWQgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggdmVyc2lvbiAldSBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTA1Cittc2dpZCAiaW52YWxpZCBjaHVuayBvZmZzZXQgKHRvbyBsYXJnZSkiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjEyOQorbXNnaWQgInRlcm1pbmF0aW5nIG11bHRpLXBhY2staW5kZXggY2h1bmsgaWQgYXBwZWFycyBlYXJsaWVyIHRoYW4gZXhwZWN0ZWQiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjE0MgorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBwYWNrLW5hbWUgY2h1bmsiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjE0NAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgZmFub3V0IGNodW5rIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxNDYKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGxvb2t1cCBjaHVuayIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTQ4Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBvZmZzZXRzIGNodW5rIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBwYWNrIG5hbWVzIG91dCBvZiBvcmRlcjogJyVzJyBiZWZvcmUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLWludC1pZDogJXUgKCV1IHRvdGFsIHBhY2tzKSIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MjQ2Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBzdG9yZXMgYSA2NC1iaXQgb2Zmc2V0LCBidXQgb2ZmX3QgaXMgdG9vIHNtYWxsIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoyNzEKK21zZ2lkICJlcnJvciBwcmVwYXJpbmcgcGFja2ZpbGUgZnJvbSBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFkZCBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGFjay1pbmRleCAnJXMnIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvY2F0ZSBvYmplY3QgJWQgaW4gcGFja2ZpbGUiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjk0MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2xlYXIgbXVsdGktcGFjay1pbmRleCBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6OTgxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYSBtZXJnZSBjYW4gYmUgcGVyZm9ybWVkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorIm9pZCBmYW5vdXQgb3V0IG9mIG9yZGVyOiBmYW5vdXRbJWRdID0gJTxQUkl4MzI+ID4gJTxQUkl4MzI+ID0gZmFub3V0WyVkXSIKIG1zZ3N0ciAiIgotIs6XIM+EzrXOu861z4XPhM6xzq/OsSDOus6xz4TOrM+Dz4TOsc+Dzrcgz4DOv8+FIM6xzr3Ouc+Hzr3Otc+NzrjOt866zrUgzrTOtSDPg8+FzrzPhs+Jzr3Otc6vIM68zrUgz4TOt869IM66zrHPhM6sz4PPhM6xz4POtyDPhM6/z4UgIgotIs6xz4DOv864zrXPhM63z4HOr86/z4UuXG4iCi0iXG4iCi0izprOrM+Azr/Ouc6/IM6szrvOu86/IM+Az4HPjM6zz4HOsc68zrzOsSBHaXQgz4TPgc6/z4DOv8+Azr/Or863z4POtSDPhM6/IM6xz4DOv864zrXPhM6uz4HOuc6/IM6xz4DPjCDPhM63zr0gz4TOtc67zrXPhc+EzrHOr86xICIKLSLOsc69zq/Ph869zrXPhc+DzrcuIM6gz4HOrc+AzrXOuSDOvc6xIM6zzq/Ovc61zrkgzrXPgM6xzr3Osc69zq/Ph869zrXPhc+Dzrcgz4DPgc65zr0gz4TOtyDOtM65zrXOvc6tz4HOs861zrnOsSDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CLlxuIgotIlxuIgotIs6XIM61z4DOsc69zrHOvc6vz4fOvc61z4XPg863IM64zrEgzr7Otc66zrnOvc6uz4POtc65IM6xz4XPhM+MzrzOsc+EzrEgz4TPjs+BzrEuXG4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6NDQKLSMsIHRjbC1mb3JtYXQKKyM6IG1pZHguYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2lkIGxvb2t1cCBvdXQgb2Ygb3JkZXI6IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCittc2dzdHIgIiIKKworIzogbWlkeC5jOjk5NgorbXNnaWQgIlZlcmlmeWluZyBvYmplY3Qgb2Zmc2V0cyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrIGVudHJ5IGZvciBvaWRbJWRdID0gJXMiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgcGFjay1pbmRleCBmb3IgcGFja2ZpbGUgJXMiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjEwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb3JyZWN0IG9iamVjdCBvZmZzZXQgZm9yIG9pZFslZF0gPSAlczogJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKK21zZ3N0ciAiIgorCisjOiBuYW1lLWhhc2guYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsYXp5X2RpciB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5hbWUtaGFzaC5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5hbWUtaGFzaC5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsYXp5X25hbWUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBub3Rlcy1tZXJnZS5jOjI3NworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKLSJcbiIKLSJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCi0iXG4iCi0iWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCi0ibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBwcmV2aW91cyBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIHVzZSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHRvICIKKyJjb21taXQvYWJvcnQgdGhlIHByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgbm90ZXMgbWVyZ2UuIgogbXNnc3RyICIiCi0izpLPgc6vz4POus61z4PPhM61IM+Dz4TOvyDOvM6tz4POvyDOvM65zrHPgiDPg8+FzrPOus+Bzr/Phc+MzrzOtc69zrfPgiDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CLlxuIgotIlxuIgotIs6kzr8gzrHPgc+HzrXOr86/ICVzIM6tz4fOtc65IM+Dz4XOs866z4HOv8+Nz4POtc65z4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgi5cbiIKLSJcbiIKLSLOoM+Bzq3PgM61zrkgzr3OsSDPhM65z4IgzrXPgM65zrvPjc+DzrXPhM61LCDOvc6xIM+Dz4TOsc60zrnOv8+Azr/Ouc6uz4POtc+EzrUgz4TOvyDOsc+Bz4fOtc6vzr8sIM66zrHOuSDOvc6xIM66zqzOvc61z4TOtSDPhc+Azr/Oss6/zrvOriAiCi0izrPOuc6xIM69zrEgzr/Ou86/zrrOu863z4HPjs+DzrXPhM61IM+EzrfOvSDPhM+Bzq3Ph86/z4XPg86xIM+Dz4XOs8+Hz47Ovc61z4XPg863LiDOnM+Mzr3OvyDPhM+Mz4TOtSDOvM+Azr/Pgc61zq/PhM61IM69zrEgIgotIs6+zrXOus65zr3Ors+DzrXPhM61IM6szrvOu863IM+Dz4XOs8+Hz47Ovc61z4XPg863LlxuIgorIs6UzrXOvSDOrc+HzrXPhM61IM6/zrvOv866zrvOt8+Bz47Pg861zrkgz4TOt869IM+Az4HOv863zrPOv8+NzrzOtc69zrcgz4PPhc6zz4fPjs69zrXPhc+Dzrcgz4POt868zrXOuc+Oz4POtc+Ozr0gz4POsc+CICjOpc+AzqzPgc+HzrXOuSDPhM6/ICIKKyIlcykuXG4iCisizqDOsc+BzrHOus6xzrvPjiwgz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyDOriAnZ2l0IG5vdGVzIG1lcmdlIC0tIgorImFib3J0JyDOs865zrEgzr3OsSDPhc+Azr/Oss6szrvOtc+EzrUvzrXOs866zrHPhM6xzrvOtc6vz4jOtc+EzrUgz4TOt869IM+Az4HOv863zrPOv8+NzrzOtc69zrcgz4PPhc6zz4fPjs69zrXPhc+Dzrcgz4DPgc65zr0gIgorIs6+zrXOus65zr3Ors+DzrXPhM61IM69zq3OsSDPg8+FzrPPh8+Ozr3Otc+Fz4POtyDPg863zrzOtc65z47Pg861z4nOvS4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6NTQKLSMsIHRjbC1mb3JtYXQKKyM6IG5vdGVzLW1lcmdlLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS4iCittc2dzdHIgIs6UzrXOvSDOrc+HzrXPhM61IM6/zrvOv866zrvOt8+Bz47Pg861zrkgz4TOtyDPg8+FzrPPh8+Ozr3Otc+Fz4POtyDPg863zrzOtc65z47Pg861z47OvSDPg86xz4IgKM6lz4DOrM+Bz4fOtc65IM+Ezr8gJXMpLiIKKworIzogbm90ZXMtdXRpbHMuYzo0NgorbXNnaWQgIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBub3Rlcy11dGlscy5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgIiIKKworIzogbm90ZXMtdXRpbHMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZgorIy4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzCisjLiBpdHMgdmFsdWUuCisjLgorIzogbm90ZXMtdXRpbHMuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IG9iamVjdC5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUgXCIlc1wiIgorbXNnc3RyICIiCisKKyM6IG9iamVjdC5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgYSAlcywgbm90IGEgJXMiCittc2dzdHIgIiIKKworIzogb2JqZWN0LmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBoYXMgdW5rbm93biB0eXBlIGlkICVkIgorbXNnc3RyICIiCisKKyM6IG9iamVjdC5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBvYmplY3QuYzoyNjcgb2JqZWN0LmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggJXMiCittc2dzdHIgIiIKKworIzogcGFja2ZpbGUuYzo2MDcKK21zZ2lkICJvZmZzZXQgYmVmb3JlIGVuZCBvZiBwYWNrZmlsZSAoYnJva2VuIC5pZHg/KSIKK21zZ3N0ciAiIgorCisjOiBwYWNrZmlsZS5jOjE4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJlZm9yZSBzdGFydCBvZiBwYWNrIGluZGV4IGZvciAlcyAoY29ycnVwdCBpbmRleD8pIgorbXNnc3RyICIiCisKKyM6IHBhY2tmaWxlLmM6MTg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmV5b25kIGVuZCBvZiBwYWNrIGluZGV4IGZvciAlcyAodHJ1bmNhdGVkIGluZGV4PykiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGluY29tcGF0aWJsZSB3aXRoICVzIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IGluY29tcGF0aWJsZSB3aXRoIHNvbWV0aGluZyBlbHNlIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4OCBwYXJzZS1vcHRpb25zLmM6OTIgcGFyc2Utb3B0aW9ucy5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0YWtlcyBubyB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXNuJ3QgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB3aXRoIGFuIG9wdGlvbmFsIGsvbS9nIHN1ZmZpeCIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MzIyCisjLCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyBvcHRpb246ICVzIChjb3VsZCBiZSAtLSVzJXMgb3IgLS0lcyVzKSIKK21zZ3N0ciAizrHOvM+Gzq/Pg863zrzOtyDOtc+AzrnOu86/zrPOrjogJXMgKM64zrEgzrzPgM6/z4HOv8+Nz4POtSDOvc6xIM61zq/Ovc6xzrkgLS0lcyVzIM6uIC0tJXMlcykiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozNTYgcGFyc2Utb3B0aW9ucy5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgeW91IG1lYW4gYC0tJXNgICh3aXRoIHR3byBkYXNoZXMgPykiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiBgJXMnIgorbXNnc3RyICLOrM6zzr3Pic+Dz4TOtyDOtc+AzrnOu86/zrPOriBgJXMnIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NjUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3dpdGNoIGAlYyciCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vbi1hc2NpaSBvcHRpb24gaW4gc3RyaW5nOiBgJXMnIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo2NzUKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgIs+Hz4HOrs+Dzrc6ICVzIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uIGhlcmUgc2hvdWxkIGFsaWduIHdpdGggdGhlCisjLiBvbmUgaW4gInVzYWdlOiAlcyIgdHJhbnNsYXRpb24uCisjLgorIzogcGFyc2Utb3B0aW9ucy5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICIgICBvcjogJXMiCittc2dzdHIgIiAgIM6uOiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjcwMworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJXMiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjc0MgorbXNnaWQgIi1OVU0iCittc2dzdHIgIi3Okc6hzpnOmCIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBleHBpcmF0aW9uIGRhdGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBcImFsd2F5c1wiLCBcImF1dG9cIiwgb3IgXCJuZXZlclwiIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIiIKKworIzogcGF0aC5jOjg5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiIgorCisjOiBwYXRoc3BlYy5jOjEyOAorbXNnaWQgIkVzY2FwZSBjaGFyYWN0ZXIgJ1xcJyBub3QgYWxsb3dlZCBhcyBsYXN0IGNoYXJhY3RlciBpbiBhdHRyIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6MTQ2Cittc2dpZCAiT25seSBvbmUgJ2F0dHI6JyBzcGVjaWZpY2F0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6MTQ5Cittc2dpZCAiYXR0ciBzcGVjIG11c3Qgbm90IGJlIGVtcHR5IgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzoyNTcKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6MjY0CiBtc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKLSJcbiIKLSJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgotIlxuIgotIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgotIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKKyJnbG9iYWwgJ2xpdGVyYWwnIHBhdGhzcGVjIHNldHRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIGdsb2JhbCAiCisicGF0aHNwZWMgc2V0dGluZ3MiCiBtc2dzdHIgIiIKLSLOks+Bzq/Pg866zrXPg8+EzrUgz4PPhM6/IM68zq3Pg86/IM68zrnOsc+CIM6xzrvOu86xzrPOrs+CLlxuIgotIlxuIgotIs6kzr8gzrHPgc+HzrXOr86/ICVzIM6tz4fOtc65IM+Ez4HOv8+Azr/PgM6/zrnOt864zrXOry5cbiIKLSJcbiIKLSLOoM+Bzq3PgM61zrkgzr3OsSDOv867zr/Ous67zrfPgc+Oz4POtc+EzrUgz4TOt869IM+Ez4HOrc+Hzr/Phc+DzrEgz4PPhc6zz4fPjs69zrXPhc+Dzrcgz4DPgc65zr0gzr3OsSDOvs61zrrOuc69zq7Pg861z4TOtSDPg8+FzrPPh8+Ozr3Otc+Fz4POty4iCi0iIM6Rz4XPhM+MIM6yzr/Ot864zqwgz4PPhM63zr0gzrHOus+Nz4HPic+DzrcgzrHPgM6/z4TPhc+HzrfOvM6tzr3Ot8+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IsIM61zqzOvSDPh8+BzrXOuc6xz4PPhM61zq8uXG4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTA2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgb2YgJXMiCi1tc2dzdHIgIiVzIM6xz4DPjCAlcyIKKyM6IHBhdGhzcGVjLmM6MzA0Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICIiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTE5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2luZyAlcyBhbmQgJXMuLi4iCi1tc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM+Dz4XOs8+Hz47Ovc61z4XPg863IM+Ezr/PhSAlcyDOvM61IM+Ezr8gJXMuLi4iCisjOiBwYXRoc3BlYy5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIgorbXNnc3RyICIiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTMwCi1tc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCi1tc2dzdHIgIs6XIM+Dz4XOs8+Hz47Ovc61z4XPg863IM6/zrvOv866zrvOt8+Bz47OuM63zrrOtSDOtc+AzrnPhM+Fz4fPjs+CLiIKKyM6IHBhdGhzcGVjLmM6MzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEzMgotbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgotbXNnc3RyICLOlyDPg8+FzrPPh8+Ozr3Otc+Fz4POtyDOsc+Azq3PhM+Fz4fOtS4gzpHPgM6xzrnPhM61zq/PhM6xzrkgzrXPgM6vzrvPhc+Dzrcgz4PPhc6zzrrPgc6/z43Pg861z4nOvS4iCisjOiBwYXRoc3BlYy5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmltcGxlbWVudGVkIHBhdGhzcGVjIG1hZ2ljICclYycgaW4gJyVzJyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvbWVyZ2UudGNsOjE1NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1lcmdlIEludG8gJXMiCi1tc2dzdHIgIs6jz4XOs8+Hz47Ovc61z4XPg863IM68zrUgJXMiCisjOiBwYXRoc3BlYy5jOjQyNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJ2xpdGVyYWwnIGFuZCAnZ2xvYicgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgogCi0jOiBsaWIvbWVyZ2UudGNsOjE3NgotbXNnaWQgIlJldmlzaW9uIFRvIE1lcmdlIgotbXNnc3RyICLOkc69zrHOuM61z47Pgc63z4POtyDOoM+Bzr/PgiDOo8+FzrPPh8+Ozr3Otc+Fz4POtyIKKyM6IHBhdGhzcGVjLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIxMQorIzogcGF0aHNwZWMuYzo1MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyAobW5lbW9uaWM6ICclYycpIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiIKKyIlczogz4TOvyBtYWdpYyDPhM63z4Igz4DOtc+BzrnOs8+BzrHPhs6uz4IgzrTOuc6xzrTPgc6/zrzOrs+CIM60zrXOvSDPhc+Azr/Pg8+EzrfPgc6vzrbOtc+EzrHOuSDOsc+Az4wgz4TOt869IM61zr3PhM6/zrvOrjogJXMiCisKKyM6IHBhdGhzcGVjLmM6NTkxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAizrcgz4DOtc+BzrnOs8+BzrHPhs6uIM60zrnOsc60z4HOv868zq7PgiAnJXMnIM61zq/Ovc6xzrkgz4DOr8+Dz4kgzrHPgM+MIM+Dz4XOvM6yzr/Ou865zrrPjCDOtM61z4POvM+MIgorCisjOiBwa3QtbGluZS5jOjEwNAorbXNnaWQgImZsdXNoIHBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzoxNDQgcGt0LWxpbmUuYzoyMzAKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzoxNjAgcGt0LWxpbmUuYzoxNjIKK21zZ2lkICJwYWNrZXQgd3JpdGUgd2l0aCBmb3JtYXQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MTk0Cittc2dpZCAicGFja2V0IHdyaXRlIGZhaWxlZCAtIGRhdGEgZXhjZWVkcyBtYXggcGFja2V0IHNpemUiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzoyMDEgcGt0LWxpbmUuYzoyMDgKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MjkzCittc2dpZCAicmVhZCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjMwMQorbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5IgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggY2hhcmFjdGVyOiAlLjRzIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MzM5IHBrdC1saW5lLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggJWQiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTE5Cittc2dpZCAiUmVmcmVzaGluZyBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHByZXR0eS5jOjk2MworbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgIiIKKworIzogcmFuZ2UtZGlmZi5jOjU2Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGBsb2dgIgorbXNnc3RyICIiCisKKyM6IHJhbmdlLWRpZmYuYzo1OQorbXNnaWQgImNvdWxkIG5vdCByZWFkIGBsb2dgIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiByYW5nZS1kaWZmLmM6NzQgc2VxdWVuY2VyLmM6NDgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICclcyciCittc2dzdHIgIiIKKworIzogcmFuZ2UtZGlmZi5jOjIyNAorbXNnaWQgImZhaWxlZCB0byBnZW5lcmF0ZSBkaWZmIgorbXNnc3RyICIiCisKKyM6IHJhbmdlLWRpZmYuYzo0NTUgcmFuZ2UtZGlmZi5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbG9nIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzo2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgYWRkIGZpbGUgYWxpYXMgJyVzJyAoJyVzJyBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCkiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjY4OQorbXNnaWQgImNhbm5vdCBjcmVhdGUgYW4gZW1wdHkgYmxvYiBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisizrTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM60zrfOvM65zr/Phc+BzrPOr86xIM66zrXOvc6/z40gYmxvYiDPg8+EzrcgzrLOrM+DzrcgzrTOtc60zr/OvM6tzr3Pic69IM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIKKworIzogcmVhZC1jYWNoZS5jOjcxMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuIG9ubHkgYWRkIHJlZ3VsYXIgZmlsZXMsIHN5bWJvbGljIGxpbmtzIG9yIGdpdC1kaXJlY3RvcmllcyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBpbmRleCBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkICclcycgdG8gaW5kZXgiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjc5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxMzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXBwZWFycyBhcyBib3RoIGEgZmlsZSBhbmQgYXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE0ODkKK21zZ2lkICJSZWZyZXNoIGluZGV4IgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjAzCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDYW5ub3QgYWJvcnQgd2hpbGUgYW1lbmRpbmcuXG4iCi0iXG4iCi0iWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0LlxuIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKIG1zZ3N0ciAiIgotIs6UzrUgzrPOr869zrXPhM6xzrkgzrHOus+Nz4HPic+DzrcgzrrOsc64z47PgiDOtM65zr/Pgc64z47Ovc61z4TOtS5cbiIKLSJcbiIKLSLOoM+Bzq3PgM61zrkgzr3OsSDPhM61zrvOtc65z47Pg861z4TOtSDPhM63IM60zrnPjM+BzrjPic+DzrcgzrHPhc+Ezq7PgiDPhM63z4Igz4XPgM6/zrLOv867zq7Pgi5cbiIKIAotIzogbGliL21lcmdlLnRjbDoyMjEKKyM6IHJlYWQtY2FjaGUuYzoxNjEzCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJBYm9ydCBtZXJnZT9cbiIKLSJcbiIKLSJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKLSJcbiIKLSJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKKyJHSVRfSU5ERVhfVkVSU0lPTiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgogbXNnc3RyICIiCi0izpHOus+Nz4HPic+Dzrcgz4PPhc6zz4fPjs69zrXPhc+DzrfPgjtcbiIKLSJcbiIKLSLOlyDOsc66z43Pgc+Jz4POtyDPhM63z4Igz4TPgc6tz4fOv8+Fz4POsc+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IgzrjOsSDPgM+Bzr/Ous6xzrvOrc+DzrXOuSDOsc+Az47Ou861zrnOsSAqzp/Om86pzp0qIM+Ez4nOvSDOvM63ICIKLSLPhc+Azr/Oss61zrLOu863zrzOrc69z4nOvSDOsc67zrvOsc6zz47OvS5cbiIKLSJcbiIKLSLOnc6xIM+Az4HOv8+Hz4nPgc6uz4POtc65IM63IM6xzrrPjc+Bz4nPg863IM+EzrfPgiDPhM+Bzq3Ph86/z4XPg86xz4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgjsiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjI3CisjOiByZWFkLWNhY2hlLmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTY4NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAlZCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTY5NgorbXNnaWQgImJhZCBpbmRleCBmaWxlIHNoYTEgc2lnbmF0dXJlIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzI2CisjLCBjLWZvcm1hdAorbXNnaWQgImluZGV4IHVzZXMgJS40cyBleHRlbnNpb24sIHdoaWNoIHdlIGRvIG5vdCB1bmRlcnN0YW5kIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzI4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICUuNHMgZXh0ZW5zaW9uIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW5kZXggZW50cnkgZm9ybWF0IDB4JTA4eCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbmFtZSBmaWVsZCBpbiB0aGUgaW5kZXgsIG5lYXIgcGF0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxODM2Cittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgaW4gaW5kZXgiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE4MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgc3RhZ2UgZW50cmllcyBmb3IgbWVyZ2VkIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTg0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTk0OSByZWFkLWNhY2hlLmM6MjIyNyByZXJlcmUuYzo1NjUgcmVyZXJlLmM6NTk5IHJlcmVyZS5jOjExMTEKKyM6IGJ1aWx0aW4vYWRkLmM6NDU5IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc4IGJ1aWx0aW4vY2hlY2tvdXQuYzoyOTQKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2MjIgYnVpbHRpbi9jaGVja291dC5jOjk5MSBidWlsdGluL2NsZWFuLmM6OTU1CisjOiBidWlsdGluL2NvbW1pdC5jOjM0NCBidWlsdGluL2RpZmYtdHJlZS5jOjExNiBidWlsdGluL2dyZXAuYzo0OTgKKyM6IGJ1aWx0aW4vbXYuYzoxNDUgYnVpbHRpbi9yZXNldC5jOjI0NSBidWlsdGluL3JtLmM6MjcxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzMwCittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICLPhM6/IM6xz4HPh861zq/OvyDOtc+Fz4HOtc+EzrfPgc6vzr/PhSDOtc6vzr3Osc65IM66zrHPhM61z4PPhM+BzrHOvM68zq3Ovc6/IgorCisjOiByZWFkLWNhY2hlLmM6MjA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIG9wZW4gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgc3RhdCB0aGUgb3BlbiBpbmRleCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW5kZXggZmlsZSBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuYWJsZSB0byBtYXAgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmcmVzaGVuIHNoYXJlZCBpbmRleCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjc0CisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjI5NzEgc2VxdWVuY2VyLmM6NDc5MSB3cmFwcGVyLmM6NjU4IGJ1aWx0aW4vbWVyZ2UuYzoxMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzozMDQ0IHNlcXVlbmNlci5jOjIyMzcgc2VxdWVuY2VyLmM6MzY0NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzozMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIGdpdCBkaXI6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzozMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bmxpbms6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzozMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaXggcGVybWlzc2lvbiBiaXRzIG9uICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjMyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBkcm9wIHRvIHN0YWdlICMwIgorbXNnc3RyICIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjEwCiBtc2dpZCAiIgotIlJlc2V0IGNoYW5nZXM/XG4iCiAiXG4iCi0iUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21tYW5kPiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJiLCBicmVhayA9IHN0b3AgaGVyZSAoY29udGludWUgcmViYXNlIGxhdGVyIHdpdGggJ2dpdCByZWJhc2UgLS1jb250aW51ZScpXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKICJcbiIKLSJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKLW1zZ3N0ciAiIgotIs6Vz4DOsc69zrHPhs6/z4HOrCDOsc67zrvOsc6zz47OvTtcbiIKLSJcbiIKLSLOlyDOtc+AzrHOvc6xz4bOv8+Bzqwgz4TPic69IM6xzrvOu86xzrPPjs69IM64zrEgz4DPgc6/zrrOsc67zq3Pg861zrkgzrHPgM+OzrvOtc65zrEgKs6fzpvOqc6dKiDPhM+Jzr0gzrzOtyDPhc+Azr/Oss61zrLOu863zrzOrc69z4nOvSAiCi0izrHOu867zrHOs8+Ozr0uXG4iCi0iXG4iCi0izp3OsSDPg8+Fzr3Otc+Hzq/Pg861zrkgzrcgzrXPgM6xzr3Osc+Gzr/Pgc6sIM+Ez4nOvSDPhM+Bzq3Ph86/z4XPg8+Jzr0gzrHOu867zrHOs8+Ozr07IgotCi0jOiBsaWIvbWVyZ2UudGNsOjIzOAotbXNnaWQgIkFib3J0aW5nIgotbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOsc66z43Pgc+Jz4POtyIKLQotIzogbGliL21lcmdlLnRjbDoyMzgKLW1zZ2lkICJmaWxlcyByZXNldCIKLW1zZ3N0ciAizrHPgc+HzrXOr86xIM+Azr/PhSDOtc+AzrHOvc6xz4bOrc+BzrjOt866zrHOvSIKLQotIzogbGliL21lcmdlLnRjbDoyNjUKLW1zZ2lkICJBYm9ydCBmYWlsZWQuIgotbXNnc3RyICLOlyDOsc66z43Pgc+Jz4POtyDOsc+Azq3PhM+Fz4fOtS4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MjY3Ci1tc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgotbXNnc3RyICLOlyDOsc66z43Pgc+Jz4POtyDOsc+Azq3PhM+Fz4fOtS4gzojPhM6/zrnOvM6/LiIKLQotIzogbGliL29wdGlvbi50Y2w6OTUKLW1zZ2lkICJSZXN0b3JlIERlZmF1bHRzIgotbXNnc3RyICLOlc+AzrHOvc6xz4bOv8+BzqwgzqDPgc6/zrXPgM65zrvOv86zz47OvSIKLQotIzogbGliL29wdGlvbi50Y2w6OTkKLW1zZ2lkICJTYXZlIgotbXNnc3RyICLOkc+Azr/OuM6uzrrOtc+Fz4POtyIKLQotIzogbGliL29wdGlvbi50Y2w6MTA5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiJXMgzpHPgM6/zrjOtc+Ezq7Pgc65zr8iCi0KLSM6IGxpYi9vcHRpb24udGNsOjExMAotbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCi1tc2dzdHIgIs6fzrvOuc66z4wgKM6MzrvOsSDPhM6xIM6Rz4DOv864zrXPhM6uz4HOuc6xKSIKLQotIzogbGliL29wdGlvbi50Y2w6MTE2Ci1tc2dpZCAiVXNlciBOYW1lIgotbXNnc3RyICLOjM69zr/OvM6xIM6nz4HOrs+Dz4TOtyIKLQotIzogbGliL29wdGlvbi50Y2w6MTE3Ci1tc2dpZCAiRW1haWwgQWRkcmVzcyIKLW1zZ3N0ciAizpTOuc61z43OuM+Fzr3Pg863IEVtYWlsIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMTkKLW1zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKLW1zZ3N0ciAizqDOtc+Bzq/Ou863z4jOtyDOpc+Azr/Oss6/zrvPjs69IM6jz4XOs8+Hz47Ovc61z4XPg863z4IiCi0KLSM6IGxpYi9vcHRpb24udGNsOjEyMAotbXNnaWQgIk1lcmdlIFZlcmJvc2l0eSIKLW1zZ3N0ciAizpvOtc+Az4TOv868zq3Pgc61zrnOsSDOo8+FzrPPh8+Ozr3Otc+Fz4POt8+CIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjEKLW1zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgotbXNnc3RyICLOoM+Bzr/Oss6/zrvOriDOo8+EzrHPhM65z4PPhM65zrrPjs69IM6UzrnOsc+Gzr/Pgc6sz4IgzpzOtc+EzqwgzrHPgM+MIM6jz4XOs8+Hz47Ovc61z4XPg863IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjMKLW1zZ2lkICJUcnVzdCBGaWxlIE1vZGlmaWNhdGlvbiBUaW1lc3RhbXBzIgotbXNnc3RyICLOlc68z4DOuc+Dz4TOv8+Dz43Ovc63IM6XzrzOtc+Bzr/OvM63zr3Ouc+Ozr0gzpzOtc+EzrHPhM+Bzr/PgM6uz4IgzpHPgc+HzrXOr8+Jzr0iCi0KLSM6IGxpYi9vcHRpb24udGNsOjEyNAotbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKLW1zZ3N0ciAizprOu86szrTOtc68zrEgzprOu86szrTPic69IM6gzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IgzprOsc+EzqwgzqTOt869IM6Rzr3OrM66z4TOt8+DzrciCi0KLSM6IGxpYi9vcHRpb24udGNsOjEyNQotbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgotbXNnc3RyICLOo8+FzrzPhs+Jzr3Or86xIM6azrvOrM60z4nOvSDOoM6xz4HOsc66zr/Ou86/z43OuM63z4POt8+CIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjYKLW1zZ2lkICJOdW1iZXIgb2YgRGlmZiBDb250ZXh0IExpbmVzIgotbXNnc3RyICLOkc+BzrnOuM68z4zPgiDOk8+BzrHOvM68z47OvSDOlc69zr3Ov865zr/Ou86/zrPOuc66zr/PjSDOoM67zrHOuc+Dzq/Ov8+FIM6UzrnOsc+Gzr/Pgc6sz4IiCi0KLSM6IGxpYi9vcHRpb24udGNsOjEyNwotbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCi1tc2dzdHIgIs6gzrvOrM+Ezr/PgiDOms61zrnOvM6tzr3Ov8+FIM6czrfOvc+NzrzOsc+Ezr/PgiDOpc+Azr/Oss6/zrvOrs+CIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjgKLW1zZ2lkICJOZXcgQnJhbmNoIE5hbWUgVGVtcGxhdGUiCi1tc2dzdHIgIs6dzq3OvyDOoM+Bz4zPhM+Fz4DOvyDOn869z4zOvM6xz4TOv8+CIM6azrvOrM60zr/PhSIKLQotIzogbGliL29wdGlvbi50Y2w6MTkyCi1tc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCi1tc2dzdHIgIs6bzrXOvs65zrrPjCDOn8+BzrjOv86zz4HOsc+Gzq/Osc+COiIKLQotIzogbGliL29wdGlvbi50Y2w6MjE2Ci1tc2dpZCAiQ2hhbmdlIEZvbnQiCi1tc2dzdHIgIs6RzrvOu86xzrPOriDOk8+BzrHOvM68zrHPhM6/z4POtc65z4HOrM+CIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyMjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDaG9vc2UgJXMiCi1tc2dzdHIgIs6Vz4DOuc67zr/Os86uICVzIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyMjYKLSMsIGZ1enp5Ci1tc2dpZCAicHQuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCiBtc2dzdHIgIiIKIAotIzogbGliL29wdGlvbi50Y2w6MjQwCi1tc2dpZCAiUHJlZmVyZW5jZXMiCi1tc2dzdHIgIs6gz4HOv8+EzrnOvM6uz4POtc65z4IiCi0KLSM6IGxpYi9vcHRpb24udGNsOjI3NQotbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCi1tc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgz4DOu86uz4HOv8+Fz4IgzrHPgM6/zrjOrs66zrXPhc+DzrfPgiDOtc+AzrnOu86/zrPPjs69OiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM0Ci1tc2dpZCAiRGVsZXRlIFJlbW90ZSBCcmFuY2giCi1tc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4gzpHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr/PhSDOms67zqzOtM6/z4UiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDcKLW1zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCi1tc2dzdHIgIs6Rz4DPjCDOkc+Azr/OuM61z4TOrs+BzrnOvyIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMjMKLW1zZ2lkICJSZW1vdGU6IgotbXNnc3RyICLOkc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OvzoiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NjYgbGliL3RyYW5zcG9ydC50Y2w6MTM4Ci0jLCBmdXp6eQotbXNnaWQgIkFyYml0cmFyeSBVUkw6IgotbXNnc3RyICLOkc+FzrjOsc6vz4HOtc+Ezr8gVVJMOiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4NAotbXNnaWQgIkJyYW5jaGVzIgotbXNnc3RyICLOms67zqzOtM6/zrkiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTA5Ci1tc2dpZCAiRGVsZXRlIE9ubHkgSWYiCi1tc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4gzpzPjM69zr8gzpXOrM69IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMQotbXNnaWQgIk1lcmdlZCBJbnRvOiIKLW1zZ3N0ciAizqPPhc6zz4fPic69zrXPhc68zq3Ovc6/IM6czrU6IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExOQotbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKLW1zZ3N0ciAizqDOrM69z4TOsSAozpzOtyDOtM65zrXOvc61z4HOs863zrjOv8+Nzr0gzq3Ou861zrPPh86/zrkgz4PPhc6zz4fPjs69zrXPhc+DzrfPgikiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTUyCi1tc2dpZCAiQSBicmFuY2ggaXMgcmVxdWlyZWQgZm9yICdNZXJnZWQgSW50bycuIgotbXNnc3RyICLOkc+AzrHOuc+EzrXOr8+EzrHOuSDOrc69zrHPgiDOus67zqzOtM6/z4IgzrPOuc6xICfOo8+FzrPPh8+Jzr3Otc+FzrzOrc69zr8gzpzOtScuIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NAotIywgdGNsLWZvcm1hdAorIzogcmViYXNlLWludGVyYWN0aXZlLmM6MzEgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjE3MwogbXNnaWQgIiIKLSJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKICJcbiIKLSIgLSAlcyIKKyJEbyBub3QgcmVtb3ZlIGFueSBsaW5lLiBVc2UgJ2Ryb3AnIGV4cGxpY2l0bHkgdG8gcmVtb3ZlIGEgY29tbWl0LlxuIgogbXNnc3RyICIiCi0izp/OuSDOtc6+zq7PgiDOus67zqzOtM6/zrkgzrTOtc69IM61zq/Ovc6xzrkgz4DOu86uz4HPic+CIM+Dz4XOs8+Hz4nOvc61z4XOvM6tzr3Ov865IM68zrUgz4TOvyAlczpcbiIKLSJcbiIKLSIgLSAlcyIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODkKLSMsIHRjbC1mb3JtYXQKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjM0IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxNzcKIG1zZ2lkICIiCi0iT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSAiCi0ibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCisiXG4iCisiSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuXG4iCiBtc2dzdHIgIiIKLSLOnM6vzrEgzq4gz4DOtc+BzrnPg8+Dz4zPhM61z4HOtc+CIM6xz4DPjCDPhM65z4IgzrTOv866zrnOvM6tz4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgiDOsc+Azq3PhM+Fz4fOsc69IM61z4DOtc65zrTOriDOtM61zr0gzq3Ph861z4TOtSAiCi0iz4bOrc+BzrXOuSDPhM65z4IgzrHOvc6xzrPOus6xzq/Otc+CIM+Fz4DOv86yzr/Ou86tz4IuIM6Uzr/Ous65zrzOrM+Dz4TOtSDOsc69zqzOus+EzrfPg863IM6xz4DPjCDPhM6/ICVzIM+Az4HPjs+EzrEuIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNwotbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKLW1zZ3N0ciAizqDOsc+BzrHOus6xzrvPjiDOtc+AzrnOu86tzr7PhM61IM6tzr3Osc69IM6uIM+AzrXPgc65z4PPg8+Mz4TOtc+Bzr/Phc+CIM66zrvOrM60zr/Phc+CIM+Az4HOv8+CIM60zrnOsc6zz4HOsc+Gzq4uIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNgorIzogcmViYXNlLWludGVyYWN0aXZlLmM6NDAgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxNgogbXNnaWQgIiIKLSJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgogIlxuIgotIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgotbXNnc3RyICIiCi0izpcgzrHOvc6szrrPhM63z4POtyDOtM65zrXOs8+BzrHOvM68zq3Ovc+Jzr0gzrrOu86szrTPic69IM61zq/Ovc6xzrkgzrTPjc+DzrrOv867zrcuXG4iCisiWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuXG4iCisiVG8gY29udGludWUgcmViYXNlIGFmdGVyIGVkaXRpbmcsIHJ1bjpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCiAiXG4iCi0izpTOuc6xzrPPgc6xz4bOriDPhM+Jzr0gzrXPgM65zrvOtc6zzrzOrc69z4nOvSDOus67zqzOtM+Jzr07IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCi1tc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM60zrnOsc6zz4HOsc+Gzq4gzrrOu86szrTPic69IM6xz4DPjCAlcyIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyODYKLW1zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKLW1zZ3N0ciAizpTOtc69IM6tz4fOtc65IM61z4DOuc67zrXOs861zq8gzrHPgM6/zrjOtc+Ezq7Pgc65zr8uIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNjYW5uaW5nICVzLi4uIgotbXNnc3RyICLOkc69zq/Ph869zrXPhc+DzrcgJXMuLi4iCi0KLSM6IGxpYi9yZW1vdGUudGNsOjE2NQotbXNnaWQgIlBydW5lIGZyb20iCi1tc2dzdHIgIs6azrvOrM60zrXOvM6xIM6xz4DPjCIKLQotIzogbGliL3JlbW90ZS50Y2w6MTcwCi1tc2dpZCAiRmV0Y2ggZnJvbSIKLW1zZ3N0ciAizpHOvc6szrrPhM63z4POtyDOsc+Az4wiCi0KLSM6IGxpYi9yZW1vdGUudGNsOjIxMwotbXNnaWQgIlB1c2ggdG8iCi1tc2dzdHIgIs6PzrjOt8+Dzrcgz4POtSIKLQotIzogbGliL3Nob3J0Y3V0LnRjbDoyMCBsaWIvc2hvcnRjdXQudGNsOjYxCi1tc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKLW1zZ3N0ciAizpTOtSDOvM+Az4zPgc61z4POtSDOvc6xIM6xz4DOv864zrfOus61z4XPhM61zq8gzrcgz4PPhc69z4TPjM68zrXPhc+Dzrc6IgotCi0jOiBsaWIvc2hvcnRjdXQudGNsOjEzNgotbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKLW1zZ3N0ciAizpTOtSDOvM+Az4zPgc61z4POtSDOvc6xIM6xz4DOv864zrfOus61z4XPhM61zq8gz4TOvyDOtc65zrrOv869zq/OtM65zr86IgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKLW1zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJNzrcgz4XPgM6/z4PPhM63z4HOuc62z4zOvM61zr3Ov8+CIM61zrvOtc6zzrrPhM6uz4Igzr/Pgc64zr/Os8+BzrHPhs6vzrHPgiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjY1Ci1tc2dpZCAiU3BlbGwgY2hlY2tpbmcgaXMgdW5hdmFpbGFibGUiCi1tc2dzdHIgIs6IzrvOtc6zz4fOv8+CIM6/z4HOuM6/zrPPgc6xz4bOr86xz4IgzrzOtyDOtM65zrHOuM6tz4POuc68zr/PgiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjY4Ci1tc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgotbXNnc3RyICLOnM63IM6tzrPOus+Fz4HOtyDPgc+NzrjOvM65z4POtyDOtc67zq3Os8+Hzr/PhSDOv8+BzrjOv86zz4HOsc+Gzq/Osc+CIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCi1tc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM61z4DOsc69zrHPhs6/z4HOrCDPhM6/z4UgzrvOtc6+zrnOus6/z40gz4POtSAlcy4iCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MwotbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCi1tc2dzdHIgIs6fIM61zrvOtc6zzrrPhM6uz4Igzr/Pgc64zr/Os8+BzrHPhs6vzrHPgiDOsc+Azq3PhM+Fz4fOtSDPg865z4nPgM63zrvOrCDOus6xz4TOrCDPhM63zr0gzrXOus66zq/Ovc63z4POtyIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCi1tc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgIs6czrcgzrHOvc6xzrPOvc+Jz4HOr8+DzrnOvM6/z4IgzrXOu861zrPOus+Ezq7PgiDOv8+BzrjOv86zz4HOsc+Gzq/Osc+CIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6MTgwCi1tc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCi1tc2dzdHIgIs6azrHOvM6vzrEgzqDPgc+Mz4TOsc+DzrciCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODEKLW1zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgIs6czrcgzrHOvc6xzrzOtc69z4zOvM61zr3OvyDPhM6tzrvOv8+CIM6xz4HPh861zq/Ov8+FIM6xz4DPjCDPhM6/zr0gzrXOu861zrPOus+Ezq4gzr/Pgc64zr/Os8+BzrHPhs6vzrHPgiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjM4NQotbXNnaWQgIlNwZWxsIENoZWNrZXIgRmFpbGVkIgotbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM6VzrvOtc6zzrrPhM6uIM6fz4HOuM6/zrPPgc6xz4bOr86xz4IiCi0KLSM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCi1tc2dzdHIgIiVzIC4uLiAlKmkgzrHPgM+MICUqaSAlcyAoJTNpJSUpIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiZmV0Y2ggJXMiCi1tc2dzdHIgIs6xzr3OrM66z4TOt8+DzrcgJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgotbXNnc3RyICLOkc69zqzOus+EzrfPg863IM69zq3Pic69IM6xzrvOu86xzrPPjs69IM6xz4DPjCDPhM6/ICVzIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxOAotIywgdGNsLWZvcm1hdAotbXNnaWQgInJlbW90ZSBwcnVuZSAlcyIKLW1zZ3N0ciAizrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gzrrOu86szrTOtc68zrEgJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjE5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gJXMiCi1tc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM66zrvOrM60zrXOvM6xIM66zrvOrM60z4nOvSDPgM6xz4HOsc66zr/Ou86/z43OuM63z4POt8+CIM+Azr/PhSDOtM65zrXOs8+BzqzPhs63z4POsc69IM6xz4DPjCDPhM6/ICVzIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyNSBsaWIvdHJhbnNwb3J0LnRjbDo3MQotIywgdGNsLWZvcm1hdAotbXNnaWQgInB1c2ggJXMiCi1tc2dzdHIgIs+OzrjOt8+DzrcgJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjI2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUHVzaGluZyBjaGFuZ2VzIHRvICVzIgotbXNnc3RyICLOk86vzr3Otc+EzrHOuSDPjs64zrfPg863IM6xzrvOu86xzrPPjs69IM+Dz4TOvyAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6NzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQdXNoaW5nICVzICVzIHRvICVzIgotbXNnc3RyICLOk86vzr3Otc+EzrHOuSDPjs64zrfPg863ICVzICVzIM+Dz4TOvyAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6ODkKLW1zZ2lkICJQdXNoIEJyYW5jaGVzIgotbXNnc3RyICLOj864zrfPg863IM6azrvOrM60z4nOvSIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTAzCi1tc2dpZCAiU291cmNlIEJyYW5jaGVzIgotbXNnc3RyICLOoM63zrPOsc6vzr/OuSDOms67zqzOtM6/zrkiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjEyMAotbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCi1tc2dzdHIgIs6Rz4DOv864zrXPhM6uz4HOuc6/IM6gz4HOv86/z4HOuc+DzrzOv8+NIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNTgKLW1zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgotbXNnc3RyICLOlc+AzrnOu86/zrPOrc+CIM6czrXPhM6xz4bOv8+BzqzPgiIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTYwCi1tc2dpZCAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiCiBtc2dzdHIgIiIKLSLOlc6+zrHOvc6xzrPOus6xz4POvM+Mz4IgzrXPgM61zrPOs8+BzrHPhs6uz4Igz4XPgM6sz4HPh86/zr3PhM6/z4IgzrrOu86szrTOv8+FICjOvM+Azr/Pgc61zq8gzr3OsSDOsc+Azr/Pgc+Bzq/PiM61zrkgzrHOu867zrHOs86tz4IpIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjQKLW1zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKLW1zZ3N0ciAizqfPgc6uz4POtyDOuc+Dz4fOvc6/z40gz4DOsc66zq3PhM6/z4UgKM6zzrnOsSDOsc+BzrPOrc+CIM+Dz4XOvc60zq3Pg861zrnPgiDOtM65zrrPhM+Nzr/PhSkiCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo0NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODkzCittc2dpZCAiIgorIlxuIgorIkhvd2V2ZXIsIGlmIHlvdSByZW1vdmUgZXZlcnl0aGluZywgdGhlIHJlYmFzZSB3aWxsIGJlIGFib3J0ZWQuXG4iCisiXG4iCittc2dzdHIgIiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTY4Ci1tc2dpZCAiSW5jbHVkZSB0YWdzIgotbXNnc3RyICLOo8+FzrzPgM61z4HOr867zrfPiM63IM61z4TOuc66zrXPhM+Ozr0iCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo1MSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTAwCittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgIiIKIAorIzogcmViYXNlLWludGVyYWN0aXZlLmM6NjIgcmViYXNlLWludGVyYWN0aXZlLmM6NzUgc2VxdWVuY2VyLmM6MjIxOQorIzogc2VxdWVuY2VyLmM6NDU2OSBzZXF1ZW5jZXIuYzo0NjI1IHNlcXVlbmNlci5jOjQ5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJy4iCittc2dzdHIgIiIKIAorIzogcmVmcy5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIG9iamVjdCEiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjU4MworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjU4NSByZWYtZmlsdGVyLmM6MTk3NgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBicm9rZW4gcmVmICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgIs60zrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ez4wgz4TOvyDOrM69zr/Ouc6zzrzOsSDPhM6/z4UgJyVzJyDOs865zrEgzrXOs86zz4HOsc+Gzq46ICVzIgorCisjOiByZWZzLmM6NzIxIHJlZnMuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICclcyciCittc2dzdHIgIiIKKworIzogcmVmcy5jOjcyNworIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6NzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gd3JpdGluZyAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo3NDAgc2VxdWVuY2VyLmM6Mzk2IHNlcXVlbmNlci5jOjI1NDkgc2VxdWVuY2VyLmM6MjY3NQorIzogc2VxdWVuY2VyLmM6MjY4OSBzZXF1ZW5jZXIuYzoyOTIzIHNlcXVlbmNlci5jOjQ3ODkgc2VxdWVuY2VyLmM6NDg1MgorIzogd3JhcHBlci5jOjY1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6NzY3IHNlcXVlbmNlci5jOjQ3ODcgc2VxdWVuY2VyLmM6NDg0NiB3cmFwcGVyLmM6MjI1IHdyYXBwZXIuYzozOTUKKyM6IGJ1aWx0aW4vYW0uYzo3MTMgYnVpbHRpbi9yZWJhc2UuYzo1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAizrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDPhM6/IM6szr3Ov865zrPOvM6xIM+Ezr/PhSAnJXMnIM6zzrnOsSDOtc6zzrPPgc6xz4bOriIKKworIzogcmVmcy5jOjc3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG9iamVjdCBJRCB3aGVuIGRlbGV0aW5nICclcyciCittc2dzdHIgIiIKKworIzogcmVmcy5jOjkwNQorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyBoYXMgZ2FwIGFmdGVyICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgdW5leHBlY3RlZGx5IGVuZGVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciAlcyBpcyBlbXB0eSIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6MTA2MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byB1cGRhdGUgcmVmIHdpdGggYmFkIG5hbWUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1cGRhdGVfcmVmIGZhaWxlZCBmb3IgcmVmICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoxOTExCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoxOTQzCittc2dpZCAicmVmIHVwZGF0ZXMgZm9yYmlkZGVuIGluc2lkZSBxdWFyYW50aW5lIGVudmlyb25tZW50IgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoyMDM5IHJlZnMuYzoyMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIiIKKworIzogcmVmcy5jOjIwNDUgcmVmcy5jOjIwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHByb2Nlc3MgJyVzJyBhbmQgJyVzJyBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICIiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgIiIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI0MiByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTUzMgorIzogcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNDUgcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZWZzcGVjLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmc3BlYyAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzozOSB3dC1zdGF0dXMuYzoxODYxCittc2dpZCAiZ29uZSIKK21zZ3N0ciAizrTOtc69IM+Fz4DOrM+Bz4fOtc65IM+AzrnOsSIKKworIzogcmVmLWZpbHRlci5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJiZWhpbmQgJWQiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjQyCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWQiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGNvbG9yOjxjb2xvcj4pIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6bHN0cmlwPSVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOnJzdHJpcD0lcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJSglcykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUob2JqZWN0dHlwZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0c2l6ZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoZGVsdGFiYXNlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGJvZHkpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoc3ViamVjdCkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duICUlKHRyYWlsZXJzKSBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShjb250ZW50cykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzozNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgb2JqZWN0bmFtZTpzaG9ydD0lcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RuYW1lKSBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcG9zaXRpb246JXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2lkdGg6JXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjQwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoYWxpZ24pIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHdpZHRoIGV4cGVjdGVkIHdpdGggdGhlICUlKGFsaWduKSBhdG9tIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGlmKSBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSwgYnV0IHRoZSBmaWVsZCAnJS4qcycgcmVxdWlyZXMgYWNjZXNzIHRvIG9iamVjdCBkYXRhIgorbXNnc3RyICIiCisizrTOtc69IM61zq/Ovc6xzrkgzrHPgM6/zrjOtc+Ezq7Pgc65zr8gZ2l0LCDOsc67zrvOrCDPhM6/IM+AzrXOtM6vzr8gJyUuKnMnIM+Hz4HOtc65zqzOts61z4TOsc65IM+Az4HPjM+DzrLOsc+Dzrcgz4PPhM6xICIKKyLOtM61zrTOv868zq3Ovc6xIM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIKKworIzogcmVmLWZpbHRlci5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBhZnRlciAlJShlbHNlKSIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6Nzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gdXNlZCB3aXRob3V0IGNvcnJlc3BvbmRpbmcgYXRvbSIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmb3JtYXQgc3RyaW5nICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIihubyBicmFuY2gsIHJlYmFzaW5nICVzKSIKK21zZ3N0ciAiKM66zrHOvc6tzr3Osc+CIM66zrvOrM60zr/PgiwgzrPOr869zrXPhM6xzrkgcmViYXNlIM+Ezr/PhSAlcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIihubyBicmFuY2gsIHJlYmFzaW5nIGRldGFjaGVkIEhFQUQgJXMpIgorbXNnc3RyICIozrrOsc69zq3Ovc6xz4IgzrrOu86szrTOv8+CLCDOs86vzr3Otc+EzrHOuSByZWJhc2Ugz4TOv8+FIM6xz4DOv8+Dz4XOvc60zrXOtM61zrzOrc69zr/PhSBIRUFEICVzKSIKKworIzogcmVmLWZpbHRlci5jOjE0NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKG5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gJXMpIgorbXNnc3RyICIozrrOsc69zq3Ovc6xz4IgzrrOu86szrTOv8+CLCDOtyDOtM65z4fOv8+Ez4zOvM63z4POtyDOrM+Bz4fOuc+DzrUgz4PPhM6/ICVzKSIKKworIy4gVFJBTlNMQVRPUlM6IG1ha2Ugc3VyZSB0aGlzIG1hdGNoZXMgIkhFQUQKKyMuIGRldGFjaGVkIGF0ICIgaW4gd3Qtc3RhdHVzLmMKKyMuCisjOiByZWYtZmlsdGVyLmM6MTQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBhdCAlcykiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IG1ha2Ugc3VyZSB0aGlzIG1hdGNoZXMgIkhFQUQKKyMuIGRldGFjaGVkIGZyb20gIiBpbiB3dC1zdGF0dXMuYworIy4KKyM6IHJlZi1maWx0ZXIuYzoxNDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIihIRUFEIGRldGFjaGVkIGZyb20gJXMpIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDcyCittc2dpZCAiKG5vIGJyYW5jaCkiCittc2dzdHIgIijOus6xzr3Orc69zrHPgiDOus67zqzOtM6/z4IpIgorCisjOiByZWYtZmlsdGVyLmM6MTUwNiByZWYtZmlsdGVyLmM6MTY2MworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjE1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWlsZWQgb24gJXMgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoxODgyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MjI1NworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSBtaXNzaW5nIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8tbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MjM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBtdXN0IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICIiCisizrcgz4PPhc69z4TOv868zr/Os8+BzrHPhs6vzrEgz4HPjc64zrzOuc+DzrfPgiDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3Ov8+FIM60zrUgzrPOr869zrXPhM6xzrkgzr3OsSDOvs61zrrOuc69zqwgzrzOtSAnLyc6ICVzIgorCisjOiByZW1vdGUuYzo0MTAKK21zZ2lkICJtb3JlIHRoYW4gb25lIHJlY2VpdmVwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgIs60z4zOuM63zrrOsc69IM+AzrXPgc65z4PPg8+Mz4TOtc+BzrEgzrHPgM+MIM6tzr3OsSByZWNlaXZlcGFjaywgzrPOr869zrXPhM6xzrkgz4fPgc6uz4POtyDPhM6/z4Ugz4DPgc+Oz4TOv8+FIgorCisjOiByZW1vdGUuYzo0MTgKK21zZ2lkICJtb3JlIHRoYW4gb25lIHVwbG9hZHBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAizrTPjM64zrfOus6xzr0gz4DOtc+BzrnPg8+Dz4zPhM61z4HOsSDOsc+Az4wgzq3Ovc6xIHVwbG9hZHBhY2ssIM6zzq/Ovc61z4TOsc65IM+Hz4HOrs+Dzrcgz4TOv8+FIM+Az4HPjs+Ezr/PhSIKKworIzogcmVtb3RlLmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAizpTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM6xzr3OrM66z4TOt8+Dzrcgz4TOv8+FICVzIM66zrHOuSDPhM6/z4UgJXMgz4TOsc+Fz4TPjM+Hz4HOv869zrEgz4PPhM6/ICVzIgorCisjOiByZW1vdGUuYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiz4TOvyAlcyDPg8+Fzr3Ors64z4nPgiDPgM6xz4HOsc66zr/Ou86/z4XOuM61zq8gz4TOvyAlcywgz4zPh865IM+Ezr8gJXMiCisKKyM6IHJlbW90ZS5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiCittc2dzdHIgIs+Ezr8gJXMgz4DOsc+BzrHOus6/zrvOv8+FzrjOtc6vIM+EzrHPhc+Ez4zPh8+Bzr/Ovc6xIM+Ezr8gJXMgzrrOsc65IM+Ezr8gJXMiCisKKyM6IHJlbW90ZS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgJyVzJyBvZiBwYXR0ZXJuIGhhZCBubyAnKiciCittc2dzdHIgIs+Ezr8gzrrOu861zrnOtM6vICclcycgz4TOv8+FIM68zr/PhM6vzrLOv8+FIM60zrXOvSDOtc6vz4fOtSAnKiciCisKKyM6IHJlbW90ZS5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIKK21zZ3N0ciAizrcgz4TOuc68zq4gJyVzJyDPhM6/z4UgzrzOv8+Ezq/Oss6/z4UgzrTOtc69IM6tz4fOtc65ICcqJyIKKworIzogcmVtb3RlLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkiCittc2dzdHIgIs+Ezr8gcmVmc3BlYyDPgM63zrPOrs+CICVzIM60zrXOvSDPhM6xzrnPgc65zqzOts61zrkgzrzOtSDOus6xzr3Orc69zrEiCisKKyM6IHJlbW90ZS5jOjEwMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICLPhM6/IHJlZnNwZWMgz4DOt86zzq7PgiAlcyDPhM6xzrnPgc65zqzOts61zrkgzrzOtSDPgM61z4HOuc+Dz4PPjM+EzrXPgc6xIM6xz4DPjCDOrc69zrEiCisKKyMuIFRSQU5TTEFUT1JTOiAibWF0Y2hlcyAnJXMnJSIgaXMgdGhlIDxkc3Q+IHBhcnQgb2YgImdpdCBwdXNoCisjLiA8cmVtb3RlPiA8c3JjPjo8ZHN0PiIgcHVzaCwgYW5kICJiZWluZyBwdXNoZWQgKCclcycpIiBpcworIy4gdGhlIDxzcmM+LgorIy4KKyM6IHJlbW90ZS5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXN0aW5hdGlvbiB5b3UgcHJvdmlkZWQgaXMgbm90IGEgZnVsbCByZWZuYW1lIChpLmUuLFxuIgorInN0YXJ0aW5nIHdpdGggXCJyZWZzL1wiKS4gV2UgdHJpZWQgdG8gZ3Vlc3Mgd2hhdCB5b3UgbWVhbnQgYnk6XG4iCisiXG4iCisiLSBMb29raW5nIGZvciBhIHJlZiB0aGF0IG1hdGNoZXMgJyVzJyBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiLSBDaGVja2luZyBpZiB0aGUgPHNyYz4gYmVpbmcgcHVzaGVkICgnJXMnKVxuIgorIiAgaXMgYSByZWYgaW4gXCJyZWZzL3toZWFkcyx0YWdzfS9cIi4gSWYgc28gd2UgYWRkIGEgY29ycmVzcG9uZGluZ1xuIgorIiAgcmVmcy97aGVhZHMsdGFnc30vIHByZWZpeCBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiXG4iCisiTmVpdGhlciB3b3JrZWQsIHNvIHdlIGdhdmUgdXAuIFlvdSBtdXN0IGZ1bGx5IHF1YWxpZnkgdGhlIHJlZi4iCittc2dzdHIgIiIKKyLOnyDPgM+Bzr/Ov8+BzrnPg868z4zPgiDPgM6/z4UgzrXOuc+DzrHOs86szrPOsc+EzrUgzrTOtc69IM61zq/Ovc6xzrkgz4DOu86uz4HOtc+CIHJlZm5hbWUgKM60zrfOuy5cbiIKKyLPgM6/z4Ugzr3OsSDOsc+Bz4fOr862zrXOuSDOvM61IFwicmVmcy9cIikuIM6gz4HOv8+Dz4DOsc64zq7Pg86xzrzOtSDOvc6xIM68zrHOvc+Ezq3PiM6/z4XOvM61IM+EzrkgzrXOvc69zr/Otc6vz4TOtTpcbiIKKyJcbiIKKyItIM6ozqzPh869zr/Ovc+EzrHPgiDOs865zrEgcmVmIM+Azr/PhSDOvc6xIM+EzrHOuc+BzrnOrM62zrXOuSDOvM61IM+Ezr8gJyVzJyDPg8+EzrfOvSDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OtyDPgM67zrXPhc+BzqwuXG4iCisiLSDOms6szr3Ov869z4TOsc+CIM6tzrvOtc6zz4fOvyDOtc6szr0gzrcgPM+AzrfOs86uPiDPgM6/z4UgzrTOt868zr/Pg865zrXPjc61z4TOsc65ICgnJXMnKVxuIgorIiAgzrXOr869zrHOuSByZWYgzrzOrc+DzrEgz4POtSBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiDOkc69IM61zq/Ovc6xzrksIM+Az4HOv8+DzrjOrc+Ezr/Phc68zrUgz4TOvyAiCisizrHOvc+Ezq/Pg8+Ezr/Ouc+Hzr9cbiIKKyIgIM+Az4HPjM64zrXOvM6xIHJlZnMve2hlYWRzLHRhZ3N9LyDPg8+EzrfOvSDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OtyDPgM67zrXPhc+BzqwuXG4iCisiXG4iCisizprOsc69zq3Ovc6xIM6xz4DPjCDPhM6xIM60z43OvyDOtM61IM60zr/Pjc67zrXPiM61LCDOv8+Az4zPhM61IM61zrPOus6xz4TOsc67zrXOr8+IzrHOvM61LiDOoM+Bzq3PgM61zrkgzr3OsSDOtc65z4POrM6zzrXPhM61ICIKKyLOv867zr/Os8+BzqzPhs+Jz4Igz4TOvyByZWYuIgorCisjOiByZW1vdGUuYzoxMDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGNvbW1pdCBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL2hlYWRzLyVzJz8iCittc2dzdHIgIiIKKyLOpM6/IM+DzrrOrc67zr/PgiA8z4DOt86zzq4+IM+Ezr/PhSByZWZzcGVjIM61zq/Ovc6xzrkgzrHOvc+EzrnOus61zq/OvM61zr3OvyDPhc+Azr/Oss6/zrvOrs+CLlxuIgorIs6Yzq3Ou86xz4TOtSDOvc6xIM60zrfOvM65zr/Phc+BzrPOrs+DzrXPhM61IM69zq3OvyDOus67zqzOtM6/IM60zrfOvM6/z4POuc61z43Ov869z4TOsc+CIM+Dz4TOv1xuIgorIiclczpyZWZzL3RhZ3MvJXMnOyIKKworIzogcmVtb3RlLmM6MTA0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0YWcgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgdGFnIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyLOpM6/IM+DzrrOrc67zr/PgiA8z4DOt86zzq4+IM+Ezr/PhSByZWZzcGVjIM61zq/Ovc6xzrkgzrHOvc+EzrnOus61zq/OvM61zr3OvyDOtc+EzrnOus6tz4TOsc+CLlxuIgorIs6Yzq3Ou86xz4TOtSDOvc6xIM60zrfOvM65zr/Phc+BzrPOrs+DzrXPhM61IM69zq3OsSDOtc+EzrnOus6tz4TOsSDOtM63zrzOv8+DzrnOtc+Nzr/Ovc+EzrHPgiDPg8+Ezr9cbiIKKyInJXM6cmVmcy90YWdzLyVzJzsiCisKKyM6IHJlbW90ZS5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgdHJlZSBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyB0cmVlIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyLOpM6/IM+DzrrOrc67zr/PgiA8z4DOt86zzq4+IM+Ezr/PhSByZWZzcGVjIM61zq/Ovc6xzrkgzrHOvc+EzrnOus61zq/OvM61zr3OvyDOtM6tzr3PhM+Bzr/PhS5cbiIKKyLOmM6tzrvOsc+EzrUgzr3OsSDOss6szrvOtc+EzrUgzrXPhM65zrrOrc+EzrEgz4POtSDOvc6tzr8gzrTOrc69z4TPgc6/IM60zrfOvM6/z4POuc61z43Ov869z4TOsc+CIM+Dz4TOv1xuIgorIiclczpyZWZzL3RhZ3MvJXMnOyIKKworIzogcmVtb3RlLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBibG9iIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IGJsb2IgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIs6kzr8gz4POus6tzrvOv8+CIDzPgM63zrPOrj4gz4TOv8+FIHJlZnNwZWMgzrXOr869zrHOuSDOsc69z4TOuc66zrXOr868zrXOvc6/IGJsb2IuXG4iCisizpjOrc67zrHPhM61IM69zrEgzrLOrM67zrXPhM61IM61z4TOuc66zq3PhM6xIM+DzrUgzr3Orc6/IGJsb2IgzrTOt868zr/Pg865zrXPjc6/zr3PhM6xz4Igz4PPhM6/XG4iCisiJyVzOnJlZnMvdGFncy8lcyc7IgorCisjOiByZW1vdGUuYzoxMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNhbm5vdCBiZSByZXNvbHZlZCB0byBicmFuY2giCittc2dzdHIgIs60zrUgzrzPgM6/z4HOtc6vIM69zrEgzrPOr869zrXOuSDPhM6xz43PhM65z4POtyDPhM6/z4UgJXMgzrzOtSDOus67zqzOtM6/IgorCisjOiByZW1vdGUuYzoxMTAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWxldGUgJyVzJzogcmVtb3RlIHJlZiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAizrTOtSDOvM+Azr/Pgc61zq8gzr3OsSDOs86vzr3Otc65IM60zrnOsc6zz4HOsc+Gzq4gz4TOv8+FICclcyc6IM+Ezr8gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gcmVmIM60zrXOvSDPhc+AzqzPgc+HzrXOuSIKKworIzogcmVtb3RlLmM6MTExNAorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgIs+Ezr8gcmVmc3BlYyDPgM+Bzr/Ov8+BzrnPg868zr/PjSAlcyDPhM6xzrnPgc65zqzOts61zrkgzrzOtSDPgM61z4HOuc+Dz4PPjM+EzrXPgc6xIM6xz4DPjCDOrc69zrEiCisKKyM6IHJlbW90ZS5jOjExMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHN0IHJlZiAlcyByZWNlaXZlcyBmcm9tIG1vcmUgdGhhbiBvbmUgc3JjIgorbXNnc3RyICLPhM6/IHJlZiDPgM+Bzr/Ov8+BzrnPg868zr/PjSAlcyDOu86xzrzOss6szr3Otc65IM6xz4DPjCDPgM61z4HOuc+Dz4PPjM+EzrXPgc61z4IgzrHPgM+MIM68zq/OsSDPgM63zrPOrc+CIgorCisjOiByZW1vdGUuYzoxNjI0IHJlbW90ZS5jOjE3MjUKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICLOpM6/IEhFQUQgzrTOtSDOtM61zq/Ph869zrXOuSDPg861IM66zqzPgM6/zrnOv869IM66zrvOrM60zr8iCisKKyM6IHJlbW90ZS5jOjE2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgIs60zrXOvSDPhc+AzqzPgc+HzrXOuSDOvyDOus67zqzOtM6/z4I6ICclcyciCisKKyM6IHJlbW90ZS5jOjE2MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICclcyciCittc2dzdHIgIs60zrXOvSDOrc+HzrXOuSDPgc+FzrjOvM65z4PPhM61zq8gz4DPgc6/z4Igz4TOsSDPgM6szr3PiSDOs865zrEgz4TOv869IM66zrvOrM60zr8gJyVzJyIKKworIzogcmVtb3RlLmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1cHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorIs6/IM+Az4HOv8+CIM+EzrEgz4DOrM69z4kgzrrOu86szrTOv8+CICclcycgzrTOtc69IM6xz4DOv864zrfOus61z43Otc+EzrHOuSDPic+CIM66zrvOrM60zr/PgiDPgM6xz4HOsc66zr/Ou86/z43OuM63z4POt8+CICIKKyLOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3Ov8+FIgorCisjOiByZW1vdGUuYzoxNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggZGVzdGluYXRpb24gJyVzJyBvbiByZW1vdGUgJyVzJyBoYXMgbm8gbG9jYWwgdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisizr8gz4DPgc6/zr/Pgc65z4POvM+Mz4IgzrTOt868zr/Pg86vzrXPhc+DzrfPgiAnJXMnIM+Dz4TOv869IM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/IM61zr7Phc+AzrfPgc61z4TOt8+Ezq4gJyVzJyDOtM61zr0gzq3Ph861zrkgIgorIs+Ezr/PgM65zrrPjCDOus67zqzOtM6/IM+AzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IiCisKKyM6IHJlbW90ZS5jOjE2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgaGFzIG5vIHJlbW90ZSBmb3IgcHVzaGluZyIKK21zZ3N0ciAizr8gzrrOu86szrTOv8+CICclcycgzrTOtc69IM6tz4fOtc65IM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/IM6zzrnOsSDOtM63zrzOv8+Dzq/Otc+Fz4POtyIKKworIzogcmVtb3RlLmM6MTY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciCittc2dzdHIgIs+EzrEgcmVmc3BlYyDOtM63zrzOv8+Dzq/Otc+Fz4POt8+CIM6zzrnOsSDPhM6/ICclcycgzrTOtc69IM+AzrXPgc65zrvOsc68zrLOrM69zr/Phc69IM+Ezr8gJyVzJyIKKworIzogcmVtb3RlLmM6MTY5MgorbXNnaWQgInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIKK21zZ3N0ciAiIgorIs63IM60zrfOvM6/z4POr861z4XPg863IM60zrXOvSDOrc+HzrXOuSDPgM+Bzr/Ov8+BzrnPg868z4wgKM+Ezr8gcHVzaC5kZWZhdWx0IM61zq/Ovc6xzrkgz4TOvyDPhM6vz4DOv8+EzrE6ICdub3RoaW5nJykiCisKKyM6IHJlbW90ZS5jOjE3MTQKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSAnc2ltcGxlJyBwdXNoIHRvIGEgc2luZ2xlIGRlc3RpbmF0aW9uIgorbXNnc3RyICLOtM61IM68z4DOv8+BzrXOryDOvc6xIM6zzq/Ovc61zrkgz4TOsc+Nz4TOuc+DzrcgJ3NpbXBsZScgzrTOt868zr/Pg86vzrXPhc+DzrfPgiDPg861IM6tzr3Osc69IM68z4zOvc6/IM+Az4HOv86/z4HOuc+DzrzPjCIKKworIzogcmVtb3RlLmM6MTg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgJXMiCittc2dzdHIgIs60zrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ezq4gzrcgzrXPjc+BzrXPg863IM+Ezr/PhSDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3Ov8+FIHJlZiAlcyIKKworIzogcmVtb3RlLmM6MTg1MworIywgYy1mb3JtYXQKK21zZ2lkICIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiCittc2dzdHIgIiogzpPOr869zrXPhM6xzrkgz4DOsc+BzqzOss67zrXPiM63IM+Ezr/PhSDPgM6xz4HOrM6+zrXOvc6/z4UgcmVmICclcycgz4TOv8+AzrnOus6sIgorCisjOiByZW1vdGUuYzoxOTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJhc2VkIG9uICclcycsIGJ1dCB0aGUgdXBzdHJlYW0gaXMgZ29uZS5cbiIKK21zZ3N0ciAiIgorIs6fIM66zrvOrM60zr/PgiDPg86xz4IgzrLOsc+Dzq/Ots61z4TOsc65IM+AzqzOvc+JIM+Dz4TOvyAnJXMnLCDOsc67zrvOrCDPhM6/IM+Az4HOv8+CIM+EzrEgz4DOrM69z4kgzrTOtc69IM+Fz4DOrM+Bz4fOtc65IM+AzrnOsS5cbiIKKworIzogcmVtb3RlLmM6MTk5NAorbXNnaWQgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIgorbXNnc3RyICIiCisiICAoz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIM6zzrnOsSDOvc6xIM61z4DOuc60zrnOv8+BzrjPjs+DzrXPhM61KVxuIgorCisjOiByZW1vdGUuYzoxOTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIHVwIHRvIGRhdGUgd2l0aCAnJXMnLlxuIgorbXNnc3RyICLOnyDOus67zqzOtM6/z4Igz4POsc+CIM61zq/Ovc6xzrkgzrXOvc6uzrzOtc+Bzr/PgiDOvM61IM+Ezr8gJyVzJy5cbiIKKworIzogcmVtb3RlLmM6MjAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBhbmQgJyVzJyByZWZlciB0byBkaWZmZXJlbnQgY29tbWl0cy5cbiIKK21zZ3N0ciAizp8gzrrOu86szrTOv8+CIM+DzrHPgiDOus6xzrkgz4TOvyAnJXMnIM6xzr3Osc+Gzq3Pgc6/zr3PhM6xzrkgz4POtSDOtM65zrHPhs6/z4HOtc+EzrnOus6tz4Igz4XPgM6/zrLOv867zq3Pgi5cbiIKKworIzogcmVtb3RlLmM6MjAwNAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCIlc1wiIGZvciBkZXRhaWxzKVxuIgorbXNnc3RyICIgICjPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IFwiJXNcIiDOs865zrEgzrvOtc+Az4TOv868zq3Pgc61zrnOtc+CKVxuIgorCisjOiByZW1vdGUuYzoyMDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIs6fIM66zrvOrM60zr/PgiDPg86xz4IgzrXOr869zrHOuSDOvM+Az4HOv8+Dz4TOrCDOsc+Az4wgz4TOvyAnJXMnIM66zrHPhM6sICVkIM+Fz4DOv86yzr/Ou86uLlxuIgorbXNnc3RyWzFdICLOnyDOus67zqzOtM6/z4Igz4POsc+CIM61zq/Ovc6xzrkgzrzPgM+Bzr/Pg8+EzqwgzrHPgM+MIM+Ezr8gJyVzJyDOus6xz4TOrCAlZCDPhc+Azr/Oss6/zrvOrc+CLlxuIgorCisjOiByZW1vdGUuYzoyMDE0Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1c2hcIiB0byBwdWJsaXNoIHlvdXIgbG9jYWwgY29tbWl0cylcbiIKK21zZ3N0ciAiIgorIiAgKM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgXCJnaXQgcHVzaFwiIM6zzrnOsSDOvc6xIM60zrfOvM6/z4POuc61z43Pg861z4TOtSDPhM65z4Igz4TOv8+AzrnOus6tz4Igz4POsc+CICIKKyLPhc+Azr/Oss6/zrvOrc+CKVxuIgorCisjOiByZW1vdGUuYzoyMDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKKyLOnyDOus67zqzOtM6/z4Igz4POsc+CIM61zq/Ovc6xzrkgz4DOr8+Dz4kgzrHPgM+MIM+Ezr8gJyVzJyDOus6xz4TOrCAlZCDPhc+Azr/Oss6/zrvOriwgzrrOsc65IM68z4DOv8+BzrXOryDOvc6xIM66zqzOvc61zrkgIgorIs+EzrHPh861zq/OsSDPgM+Bzr/Pjs64zrfPg863LlxuIgorbXNnc3RyWzFdICIiCisizp8gzrrOu86szrTOv8+CIM+DzrHPgiDOtc6vzr3Osc65IM+Azq/Pg8+JIM6xz4DPjCDPhM6/ICclcycgzrrOsc+EzqwgJWQgz4XPgM6/zrLOv867zq3PgiwgzrrOsc65IM68z4DOv8+BzrXOryDOvc6xIM66zqzOvc61zrkgIgorIs+EzrHPh861zq/OsSDPgM+Bzr/Pjs64zrfPg863LlxuIgorCisjOiByZW1vdGUuYzoyMDI1Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiIKKyIgICjPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IFwiZ2l0IHB1bGxcIiDOs865zrEgzr3OsSDOtc69zrfOvM61z4HPjs+DzrXPhM61IM+Ezr/OvSDPhM6/z4DOuc66z4wgz4POsc+CIM66zrvOrM60zr8pXG4iCisKKyM6IHJlbW90ZS5jOjIwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisizp8gzrrOu86szrTOv8+CIM+DzrHPgiDOus6xzrkgz4TOvyAnJXMnIM6tz4fOv8+Fzr0gzrHPgM6/zrrOu86vzr3Otc65LFxuIgorIs66zrHOuSDOrc+Hzr/Phc69ICVkIM66zrHOuSAlZCDOtM65zrHPhs6/z4HOtc+EzrnOus6uIM+Fz4DOv86yzr/Ou86uIM6/IM66zrHOuM6tzr3Osc+CLCDOsc69z4TOr8+Dz4TOv865z4fOsS5cbiIKK21zZ3N0clsxXSAiIgorIs6fIM66zrvOrM60zr/PgiDPg86xz4IgzrrOsc65IM+Ezr8gJyVzJyDOrc+Hzr/Phc69IM6xz4DOv866zrvOr869zrXOuSxcbiIKKyLOus6xzrkgzq3Ph86/z4XOvSAlZCDOus6xzrkgJWQgzrTOuc6xz4bOv8+BzrXPhM65zrrOrc+CIM+Fz4DOv86yzr/Ou86tz4Igzr8gzrrOsc64zq3Ovc6xz4IsIM6xzr3PhM6vz4PPhM6/zrnPh86xLlxuIgorCisjOiByZW1vdGUuYzoyMDM4Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIiCisiICAoz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSBcImdpdCBwdWxsXCIgzrPOuc6xIM69zrEgz4PPhc6zz4fPic69zrXPjc+DzrXPhM61IM+Ezr/OvSDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OvyDOus67zqzOtM6/ICIKKyLOvM6tz4POsSDPg8+Ezr/OvSDOtM65zrrPjCDPg86xz4IpXG4iCisKKyM6IHJlbW90ZS5jOjIyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGV4cGVjdGVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIs60zrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDOsc69zqzOu8+Fz4POtyDPhM6/z4UgzrHOvc6xzrzOtc69z4zOvM61zr3Ov8+FIM6/zr3PjM68zrHPhM6/z4IgzrHOvc+EzrnOus61zrnOvM6tzr3Ov8+FICclcyciCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcGxhY2UgcmVmIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgZGVwdGggdG9vIGhpZ2ggZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzoyMTcgcmVyZXJlLmM6MjI2IHJlcmVyZS5jOjIyOQorbXNnaWQgImNvcnJ1cHQgTUVSR0VfUlIiCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6MjY0IHJlcmVyZS5jOjI2OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXJlcmUgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjQ4NSByZXJlcmUuYzo2OTIgc2VxdWVuY2VyLmM6MzE4NiBzZXF1ZW5jZXIuYzozMjEyCisjOiBidWlsdGluL2ZzY2suYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZXJlIHdlcmUgZXJyb3JzIHdoaWxlIHdyaXRpbmcgJyVzJyAoJXMpIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmx1c2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo1MDMgcmVyZXJlLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29uZmxpY3QgaHVua3MgaW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2VkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6NzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHJlc29sdXRpb24gZm9yICclcycuIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNvbHZlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICLOpM6xz4XPhM6vz4PPhM63zrrOtSDPhM6/ICclcycgz4fPgc63z4POuc68zr/PgM6/zrnPjs69z4TOsc+CIM+EzrfOvSDPgM+Bzr/Ot86zzr/Pjc68zrXOvc63IM+EzrHPjc+EzrnPg863LiIKKworIzogcmVyZXJlLmM6ODAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgc3RyYXkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6ODgxIHN1Ym1vZHVsZS5jOjIwMTIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTcKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIGNvbmZsaWN0ZWQgc3RhdGUgaW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzoxMDY4IHJlcmVyZS5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjEwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjEwODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCBwcmVpbWFnZSBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzoxMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvcmdvdCByZXNvbHV0aW9uIGZvciAnJXMnXG4iCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6MTE5OQorbXNnaWQgInVuYWJsZSB0byBvcGVuIHJyLWNhY2hlIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiByZXZpc2lvbi5jOjI0ODQKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoIGFwcGVhcnMgdG8gYmUgYnJva2VuIgorbXNnc3RyICLOvyDPgM6xz4HPjs69IM66zrvOrM60zr/PgiDPg86xz4Igz4bOsc6vzr3Otc+EzrHOuSDOvc6xIM61zq/Ovc6xzrkgz4fOsc67zrHPg868zq3Ovc6/z4IiCisKKyM6IHJldmlzaW9uLmM6MjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycgZG9lcyBub3QgaGF2ZSBhbnkgY29tbWl0cyB5ZXQiCittc2dzdHIgIs6/IM+Ez4HOrc+Hz4nOvSDOus67zqzOtM6/z4Igz4POsc+CICclcycgzrTOtc69IM6tz4fOtc65IM6xzrrPjM68zrEgzrrOsc68zq/OsSDPhc+Azr/Oss6/zrvOriIKKworIzogcmV2aXNpb24uYzoyNjg0Cittc2dpZCAiLS1maXJzdC1wYXJlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1iaXNlY3QiCittc2dzdHIgIiIKKworIzogcnVuLWNvbW1hbmQuYzo3NDIKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcnVuLWNvbW1hbmQuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYXN5bmMgdGhyZWFkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBydW4tY29tbWFuZC5jOjEyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAnJXMnIGhvb2sgd2FzIGlnbm9yZWQgYmVjYXVzZSBpdCdzIG5vdCBzZXQgYXMgZXhlY3V0YWJsZS5cbiIKKyJZb3UgY2FuIGRpc2FibGUgdGhpcyB3YXJuaW5nIHdpdGggYGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlYC4iCittc2dzdHIgIiIKKworIzogc2VuZC1wYWNrLmM6MTQxCittc2dpZCAidW5leHBlY3RlZCBmbHVzaCBwYWNrZXQgd2hpbGUgcmVhZGluZyByZW1vdGUgdW5wYWNrIHN0YXR1cyIKK21zZ3N0ciAiIgorCisjOiBzZW5kLXBhY2suYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHJlbW90ZSB1bnBhY2sgc3RhdHVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZW5kLXBhY2suYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIHVucGFjayBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlbmQtcGFjay5jOjMwNgorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICIiCisKKyM6IHNlbmQtcGFjay5jOjQyMAorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorCisjOiBzZW5kLXBhY2suYzo0MjIKK21zZ2lkICIiCisibm90IHNlbmRpbmcgYSBwdXNoIGNlcnRpZmljYXRlIHNpbmNlIHRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS0iCisic2lnbmVkIHB1c2giCittc2dzdHIgIiIKKworIzogc2VuZC1wYWNrLmM6NDM0Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyBwdXNoIgorbXNnc3RyICIiCisKKyM6IHNlbmQtcGFjay5jOjQzOQorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgcHVzaCBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzE0Cittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMxNgorbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMxOAorbXNnaWQgInJlYmFzZSAtaSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBhY3Rpb246ICVkIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM3OAorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisizrHPhs6/z40gzrXPgM65zrvPjc+DzrXPhM61IM+EzrnPgiDPg8+FzrPOus+Bzr/Pjc+DzrXOuc+CLCDOtc+AzrnPg863zrzOrM69zrXPhM61IM+EzrnPgiDOtM65zr/Pgc64z4nOvM6tzr3Otc+CIM60zrnOsc60z4HOv868zq3PglxuIgorIs68zrUgJ2dpdCBhZGQgPM60zrnOsc60z4HOv868zq3Pgj4nIM6uICdnaXQgcm0gPM60zrnOsc60z4HOv868zq3Pgj4nIgorCisjOiBzZXF1ZW5jZXIuYzozODEKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+J1xuIgorImFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JyIKK21zZ3N0ciAiIgorIs6xz4bOv8+NIM61z4DOuc67z43Pg861z4TOtSDPhM65z4Igz4PPhc6zzrrPgc6/z43Pg861zrnPgiwgzrXPgM65z4POt868zqzOvc61z4TOtSDPhM65z4IgzrTOuc6/z4HOuM+JzrzOrc69zrXPgiDOtM65zrHOtM+Bzr/OvM6tz4JcbiIKKyLOvM61ICdnaXQgYWRkIDzOtM65zrHOtM+Bzr/OvM6tz4I+JyDOriAnZ2l0IHJtIDzOtM65zrHOtM+Bzr/OvM6tz4I+J1xuIgorIs66zrHOuSDPhc+Azr/Oss6szrvOtc+EzrUgz4TOvyDOsc+Azr/PhM6tzrvOtc+DzrzOsSDOvM61ICdnaXQgY29tbWl0JyIKKworIzogc2VxdWVuY2VyLmM6Mzk0IHNlcXVlbmNlci5jOjI2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGVvbCB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQwNiBzZXF1ZW5jZXIuYzoyNTU0IHNlcXVlbmNlci5jOjI2Nzcgc2VxdWVuY2VyLmM6MjY5MQorIzogc2VxdWVuY2VyLmM6MjkzMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0Mjkgc2VxdWVuY2VyLmM6OTMxIHNlcXVlbmNlci5jOjE2MTUgc2VxdWVuY2VyLmM6MjU3NAorIzogc2VxdWVuY2VyLmM6MjkxMyBzZXF1ZW5jZXIuYzozMDIyIGJ1aWx0aW4vYW0uYzoyNDUgYnVpbHRpbi9jb21taXQuYzo3NDgKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDg1IGJ1aWx0aW4vcmViYXNlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlcy4iCittc2dzdHIgIs6/zrkgz4TOv8+AzrnOus6tz4IgzrHOu867zrHOs86tz4Igz4POsc+CIM64zrEgzrXPgM61zrPOs8+BzrHPhs+Mzr3PhM6/z4XPg86xzr0gzrHPgM+MIM+Ezr8gJXMuIgorCisjOiBzZXF1ZW5jZXIuYzo0NTkKK21zZ2lkICJjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iCittc2dzdHIgIs+Fz4DOv86yzqzOu861z4TOtSDPhM65z4IgzrHOu867zrHOs86tz4Igz4POsc+CIM6uIM6xz4DOv864zrfOus61z43Pg8+EzrUgz4TOuc+CIM6zzrnOsSDOvc6xIM+Az4HOv8+Hz4nPgc6uz4POtc+EzrUuIgorCisjOiBzZXF1ZW5jZXIuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiwgImNoZXJyeS1waWNrIiBvcgorIy4gInJlYmFzZSAtaSIuCisjLgorIzogc2VxdWVuY2VyLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NTk4Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjYxMgorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICLOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM+EzrHPjc+EzrnPg863IM+EzrfPgiDPhc+Azr/Oss6/zrvOrs+CIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjY5MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBrZXkgcHJlc2VudCBpbiAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZXF1b3RlIHZhbHVlIG9mICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzQwIHdyYXBwZXIuYzoyMjcgd3JhcHBlci5jOjM5NyBidWlsdGluL2FtLmM6NzA0CisjOiBidWlsdGluL2FtLmM6Nzk2IGJ1aWx0aW4vbWVyZ2UuYzoxMDgyIGJ1aWx0aW4vcmViYXNlLmM6NjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgIs60zrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ez4wgz4TOvyDOrM69zr/Ouc6zzrzOsSDPhM6/z4UgJyVzJyDOs865zrEgzrHOvc6szrPOvc+Jz4POtyIKKworIzogc2VxdWVuY2VyLmM6NzUwCittc2dpZCAiJ0dJVF9BVVRIT1JfTkFNRScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfTkFNRScgzrTPjM64zrfOus61IM6uzrTOtyIKKworIzogc2VxdWVuY2VyLmM6NzU1Cittc2dpZCAiJ0dJVF9BVVRIT1JfRU1BSUwnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIidHSVRfQVVUSE9SX0VNQUlMJyDOtM+MzrjOt866zrUgzq7OtM63IgorCisjOiBzZXF1ZW5jZXIuYzo3NjAKK21zZ2lkICInR0lUX0FVVEhPUl9EQVRFJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICInR0lUX0FVVEhPUl9EQVRFJyDOtM+MzrjOt866zrUgzq7OtM63IgorCisjOiBzZXF1ZW5jZXIuYzo3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YXJpYWJsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc2OQorbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfTkFNRSciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzcxCittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9FTUFJTCciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzczCittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9EQVRFJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkYXRlIGZvcm1hdCAnJXMnIGluICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZVxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlIHNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLOrc+HzrXPhM61IM+Az4HOv861z4TOv865zrzOsc+DzrzOrc69zrXPgiDOsc67zrvOsc6zzq3PgiDPg8+Ezr8gzrTOrc69z4TPgc6/IM61z4HOs86xz4POr86xz4Igz4POsc+CXG4iCisizpHOvSDOsc+Fz4TOrc+CIM6/zrkgzrHOu867zrHOs86tz4Igz4DPgc6tz4DOtc65IM69zrEgz4PPhc68z4DPhM+Fz4fOuM6/z43OvSDOvM6tz4POsSDPg8+EzrfOvSDPgM+Bzr/Ot86zzr/Pjc68zrXOvc63IM+Fz4DOv86yzr/Ou86uLCAiCisiz4TPgc6tzr7PhM61OlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisizpHOvSDPgM+Bzq3PgM61zrkgzr3OsSDPgM6szr3OtSDPg861IM69zq3OsSDPhc+Azr/Oss6/zrvOriwgz4TPgc6tzr7PhM61OlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIs6azrHOuSDPg8+EzrnPgiDOtM+Nzr8gz4DOtc+BzrnPgM+Ez47Pg861zrnPgiwgzrzPjM67zrnPgiDPhM61zrvOtc65z47Pg861z4TOtSwgz4PPhc69zrXPh86vz4PPhM61IM68zrU6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6OTQ1Cittc2dpZCAid3JpdGluZyByb290IGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMTU1Cittc2dpZCAiJ3ByZXBhcmUtY29tbWl0LW1zZycgaG9vayBmYWlsZWQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTE2MgorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIs6kzr8gz4zOvc6/zrzOsSDOus6xzrkgzrcgzrTOuc61z43OuM+Fzr3Pg863IGVtYWlsIM+DzrHPgiDPgc+FzrjOvM6vz4PPhM63zrrOsc69IM6xz4XPhM+MzrzOsc+EzrEgzrzOtSDOss6sz4POt1xuIgorIs+Ezr8gz4zOvc6/zrzOsSDPh8+Bzq7Pg8+EzrcgzrrOsc65IM+Ezr8gz4zOvc6/zrzOsSDPhc+Azr/Ou86/zrPOuc+Dz4TOriDPg86xz4IuIM6gzrHPgc6xzrrOsc67z44gzrXOu86tzrPOvs+EzrUgz4DPic+CIM61zq/Ovc6xzrkgIgorIs6xzrrPgc65zrLOri5cbiIKKyLOnM+Azr/Pgc61zq/PhM61IM69zrEgzrHPgM6/zrrPgc+Nz4jOtc+EzrUgzrHPhc+Ez4wgz4TOvyDOvM6uzr3Phc68zrEgzr/Pgc6vzrbOv869z4TOsc+CIM+EzrEgz4HOt8+EzqwuIM6kz4HOrc6+z4TOtSDPhM63zr1cbiIKKyLOsc66z4zOu86/z4XOuM63IM61zr3PhM6/zrvOriDOus6xzrkgzrHOus6/zrvOv8+FzrjOrs+Dz4TOtSDPhM65z4Igzr/OtM63zrPOr861z4Igz4PPhM6/zr0gzrTOuc6/z4HOuM+Jz4TOriDPg86xz4IgzrPOuc6xIM69zrEgIgorIs61z4DOtc6+zrXPgc6zzrHPg8+EzrXOr8+EzrVcbiIKKyLPhM6/IM6xz4HPh861zq/OvyDPgc+FzrjOvM6vz4POtc+Ozr0gz4POsc+CIDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyLOiM+AzrXOuc+EzrEsIM68z4DOv8+BzrXOr8+EzrUgzr3OsSDOtM65zr/Pgc64z47Pg861z4TOtSDPhM63zr0gz4TOsc+Fz4TPjM+EzrfPhM6xIM+Hz4HOrs+Dz4TOtyDPgM6/z4Ugz4fPgc63z4POuc68zr/PgM6/zrnOrs64zrfOus61IM6zzrnOsSAiCisizrHPhc+Ezq4gz4TOt869IM+Fz4DOv86yzr/Ou86uIM68zrU6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMTc1Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisizqTOvyDPjM69zr/OvM6xIM66zrHOuSDOtyDOtM65zrXPjc64z4XOvc+DzrcgZW1haWwgz4POsc+CIM+Bz4XOuM68zq/Pg8+EzrfOus6xzr0gzrHPhc+Ez4zOvM6xz4TOsSDOvM61IM6yzqzPg863XG4iCisiz4TOvyDPjM69zr/OvM6xIM+Hz4HOrs+Dz4TOtyDOus6xzrkgz4TOvyDPjM69zr/OvM6xIM+Fz4DOv867zr/Os865z4PPhM6uIM+DzrHPgi4gzqDOsc+BzrHOus6xzrvPjiDOtc67zq3Os86+z4TOtSDPgM+Jz4IgzrXOr869zrHOuSAiCisizrHOus+BzrnOss6uLlxuIgorIs6cz4DOv8+BzrXOr8+EzrUgzr3OsSDOsc+Azr/Ous+Bz43PiM61z4TOtSDOsc+Fz4TPjCDPhM6/IM68zq7Ovc+FzrzOsSDOv8+Bzq/Ots6/zr3PhM6xz4Igz4TOsSDPgc63z4TOrDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCLOpM6/IM+Mzr3Ov868zqwgz4POsc+CXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIs6Iz4DOtc65z4TOsSwgzrzPgM6/z4HOtc6vz4TOtSDOvc6xIM60zrnOv8+BzrjPjs+DzrXPhM61IM+EzrfOvSDPhM6xz4XPhM+Mz4TOt8+EzrEgz4fPgc6uz4PPhM63IM+Azr/PhSDPh8+BzrfPg865zrzOv8+Azr/Ouc6uzrjOt866zrUgzrPOuc6xICIKKyLOsc+Fz4TOriDPhM63zr0gz4XPgM6/zrLOv867zq4gzrzOtTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyMTcKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEyMTkKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTI2NQorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICLOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM+EzrHPjc+EzrnPg863IM+Ezr/PhSBIRUFEIM68zrXPhM6sIM+EzrcgzrTOt868zrnOv8+Fz4HOs86vzrEgz4TOt8+CIM+Fz4DOv86yzr/Ou86uz4IiCisKKyM6IHNlcXVlbmNlci5jOjEyNjcKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEyNzEKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMjkyCittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIs6kzr8gSEVBRCAlcyDOtM61zr0gzrXOr869zrHOuSDPhc+Azr/Oss6/zrvOriEiCisKKyM6IHNlcXVlbmNlci5jOjEyOTggYnVpbHRpbi9jb21taXQuYzoxNTQ2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEzNTAgc2VxdWVuY2VyLmM6MTk2NAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgYXV0aG9yIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEzNjAgYnVpbHRpbi9hbS5jOjE1NzAgYnVpbHRpbi9tZXJnZS5jOjY3OAorbXNnaWQgImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTM3NyBzZXF1ZW5jZXIuYzoxNDMzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbW1pdCBtZXNzYWdlIGZyb20gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMzk5IGJ1aWx0aW4vYW0uYzoxNTkxIGJ1aWx0aW4vY29tbWl0LmM6MTY0OSBidWlsdGluL21lcmdlLmM6ODU5CisjOiBidWlsdGluL21lcmdlLmM6ODg0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTU2NSBzZXF1ZW5jZXIuYzoxNjc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZDogJWQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTYyMiBzZXF1ZW5jZXIuYzoxNjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAlZCBjb21taXRzLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNjMyIHNlcXVlbmNlci5jOjQ4MDgKK21zZ2lkICJuZWVkIGEgSEVBRCB0byBmaXh1cCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNjM0IHNlcXVlbmNlci5jOjI5NTgKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE2MzYKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEJ3MgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNjQ5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NDEKK21zZ2lkICJUaGlzIGlzIHRoZSAxc3QgY29tbWl0IG1lc3NhZ2U6IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2Ugb2YgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTY2NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJWQ6IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE3NTgKK21zZ2lkICJ5b3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorbXNnc3RyICLPhM6/IM6xz4HPh861zq/OvyDOtc+Fz4HOtc+EzrfPgc6vzr/PhSDPg86xz4IgzrTOtc69IM6tz4fOtc65IM+Dz4XOs8+Hz4nOvc61z4XPhM61zq8uIgorCisjOiBzZXF1ZW5jZXIuYzoxNzY1Cittc2dpZCAiY2Fubm90IGZpeHVwIHJvb3QgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE3ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICLOtyDPhc+Azr/Oss6/zrvOriAlcyDOtc6vzr3Osc65IM+Dz4XOs8+Hz47Ovc61z4XPg863IM6xzrvOu86sIM60zrXOvSDOrc+HzrXOuSDOtM6/zrjOtc6vIM61z4DOuc67zr/Os86uIC1tLiIKKworIzogc2VxdWVuY2VyLmM6MTc5MiBzZXF1ZW5jZXIuYzoxODAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAizrcgz4XPgM6/zrLOv867zq4gJXMgzrTOtc69IM6tz4fOtc65IM6zzr/Ovc6tzrEgz4TOvyAlZCIKKworIzogc2VxdWVuY2VyLmM6MTgwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgYSAidG9kbyIgY29tbWFuZCBsaWtlCisjLiAicmV2ZXJ0IiBvciAicGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExLgorIzogc2VxdWVuY2VyLmM6MTgyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lICclcycgdG8gJyVzJyIKK21zZ3N0ciAizrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDOvM61z4TOv869zr/OvM6xz4POr86xIM+Ezr/PhSAnJXMnIM+DzrUgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE5NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjIwMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjAxMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IGFjY2VwdCBhcmd1bWVudHM6ICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50cyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJyVzJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjIyNDMKK21zZ2lkICJwbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIGluc3RydWN0aW9uIHNoZWV0OiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjIyNTAKK21zZ2lkICJubyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjI2MQorbXNnaWQgImNhbm5vdCBjaGVycnktcGljayBkdXJpbmcgYSByZXZlcnQuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjIyNjMKK21zZ2lkICJjYW5ub3QgcmV2ZXJ0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNDIwCittc2dpZCAidW51c2FibGUgc3F1YXNoLW9udG8iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNTE4IHNlcXVlbmNlci5jOjQwNjcKK21zZ2lkICJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNTI2Cittc2dpZCAiYSBjaGVycnktcGljayBvciByZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNTI3Cittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydClcIiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgc2VxdWVuY2VyIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI1NDQKK21zZ2lkICJjb3VsZCBub3QgbG9jayBIRUFEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI1OTkgc2VxdWVuY2VyLmM6MzgxOQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAizrTOtc69IM+Fz4bOr8+Dz4TOsc+EzrHOuSBjaGVycnktcGljayDOriByZXZlcnQiCisKKyM6IHNlcXVlbmNlci5jOjI2MDEKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgz4TOsc+Nz4TOuc+Dzrcgz4TOv8+FIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI2MDMgc2VxdWVuY2VyLmM6MjYzOAorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI2MjQgYnVpbHRpbi9ncmVwLmM6NzMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNjI3Cittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNjMzCisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNjQ0Cittc2dpZCAiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFELiBOb3QgcmV3aW5kaW5nLCBjaGVjayB5b3VyIEhFQUQhIgorbXNnc3RyICIiCisizqbOsc6vzr3Otc+EzrHOuSDPgM+Jz4IgzrzOtc+EzrHOus65zr3Ors+DzrHPhM61IM+Ezr8gSEVBRC4gzpTOtSDOs86vzr3Otc+EzrHOuSDOs8+Nz4HOuc+DzrzOsSDPgM+Bzr/PgiDPhM6xIM+Azq/Pg8+JLCDOtc67zq3Os86+z4TOtSAiCisiz4TOvyBIRUFEIM+DzrHPgiEiCisKKyM6IHNlcXVlbmNlci5jOjI3NTAgc2VxdWVuY2VyLmM6MzczNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI3ODggc2VxdWVuY2VyLmM6MzcxNQorbXNnaWQgImNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjgxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIs6cz4DOv8+BzrXOr8+EzrUgzr3OsSDPhM+Bzr/PgM6/z4DOv865zq7Pg861z4TOtSDPhM63zr0gz4XPgM6/zrLOv867zq4gz4TPjs+BzrEsIM68zrVcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIs6Mz4TOsc69IM6/zrkgzrHOu867zrHOs86tz4Igz4POsc+CIM+DzrHPgiDOuc66zrHOvc6/z4DOv865zr/Pjc69LCDPhM+Bzq3Ovs+EzrVcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzoyODIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAlcy4uLiAlLipzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1lcmdlICUuKnMiCittc2dzdHIgIs6UzrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ezq4gzrcgz4PPhc6zz4fPjs69zrXPhc+Dzrcgz4TOv8+FICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjI4NDQgc2VxdWVuY2VyLmM6Mjg0OCBidWlsdGluL2RpZmZ0b29sLmM6NjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyODcwIHNlcXVlbmNlci5jOjMyOTMgYnVpbHRpbi9yZWJhc2UuYzo0MjQgYnVpbHRpbi9yZWJhc2UuYzoxMjMwCisjOiBidWlsdGluL3JlYmFzZS5jOjE1OTEgYnVpbHRpbi9yZWJhc2UuYzoxNjQ2Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5kZXgiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIGZhaWxlZDogJXNcbiIKKyIlc1lvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI4ODEKK21zZ2lkICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI4ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICVzXG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI5NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBsYWJlbCBuYW1lOiAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzAwMgorbXNnaWQgIndyaXRpbmcgZmFrZSByb290IGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMDA3Cittc2dpZCAid3JpdGluZyBzcXVhc2gtb250byIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMDQ1IGJ1aWx0aW4vcmViYXNlLmM6NDI5IGJ1aWx0aW4vcmViYXNlLmM6NDM1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzA2MyBidWlsdGluL3JlYmFzZS5jOjQ0OAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgIs60zrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ezq4gzrcgz4TOsc+Nz4TOuc+Dzrcgz4TOv8+FICclcyciCisKKyM6IHNlcXVlbmNlci5jOjMxMTgKK21zZ2lkICJjYW5ub3QgbWVyZ2Ugd2l0aG91dCBhIGN1cnJlbnQgcmV2aXNpb24iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBtZXJnZTogJyUuKnMnIgorbXNnc3RyICLOtM61zr0gz4XPgM6sz4HPh861zrkgz4TOr8+Azr/PhM6xIM+Az4HOv8+CIM+Dz4XOs8+Hz47Ovc61z4XPg863OiAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjMxNjEKK21zZ2lkICJvY3RvcHVzIG1lcmdlIGNhbm5vdCBiZSBleGVjdXRlZCBvbiB0b3Agb2YgYSBbbmV3IHJvb3RdIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBjb21taXQgbWVzc2FnZSBvZiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV2ZW4gYXR0ZW1wdCB0byBtZXJnZSAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzM0MQorbXNnaWQgIm1lcmdlOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzQwOSBidWlsdGluL3JlYmFzZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC5cbiIKK21zZ3N0ciAizojOs865zr3OtSDOtc+GzrHPgc68zr/Os86uIM+Ez4nOvSDOsc+Fz4TPjM68zrHPhM6xIM6xz4DOv864zrfOus61z4XOvM6tzr3Pic69LlxuIgorCisjOiBzZXF1ZW5jZXIuYzozNDIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNDI0IGJ1aWx0aW4vcmViYXNlLmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLlxuIgorIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IgXCJnaXQgc3Rhc2ggZHJvcFwiIGF0IGFueSB0aW1lLlxuIgorbXNnc3RyICIiCisizpcgzrXPhs6xz4HOvM6/zrPOriDPhM+Jzr0gzrHPhc+Ez4zOvM6xz4TOsSDOsc+Azr/OuM63zrrOtc+FzrzOrc69z4nOvSDOv860zq7Os863z4POtSDPg861IM+Dz4XOs866z4HOv8+Nz4POtc65z4IuXG4iCisizp/OuSDOsc67zrvOsc6zzq3PgiDPg86xz4IgzrXOr869zrHOuSDOsc+Dz4bOsc67zrXOr8+CIM68zq3Pg86xIM+Dz4TOsSDOsc+Azr/OuM63zrrOtc+FzrzOrc69zrEuXG4iCisizpzPgM6/z4HOtc6vz4TOtSDOvc6xIM+Ez4HOrc6+zrXPhM61IFwiZ2l0IHN0YXNoIHBvcFwiIM6uIFwiZ2l0IHN0YXNoIGRyb3BcIiDOsc69zqwgz4DOrM+DzrEgz4PPhM65zrPOvM6uLlxuIgorCisjOiBzZXF1ZW5jZXIuYzozNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSB2YWxpZCBPSUQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzQ5NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzI0Cittc2dpZCAiY291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCBIRUFEXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzUyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGV4ZWN1dGUgdGhlIHRvZG8gY29tbWFuZFxuIgorIlxuIgorIiAgICAlLipzXG4iCisiSXQgaGFzIGJlZW4gcmVzY2hlZHVsZWQ7IFRvIGVkaXQgdGhlIGNvbW1hbmQgYmVmb3JlIGNvbnRpbnVpbmcsIHBsZWFzZVxuIgorImVkaXQgdGhlIHRvZG8gbGlzdCBmaXJzdDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXMuLi4gICUuKnNcbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZCAlZCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNzIzCittc2dpZCAiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM3Mjggc2VxdWVuY2VyLmM6NDgwNQorbXNnaWQgImNvdWxkIG5vdCByZWFkICdvbnRvJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNzQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgSEVBRCB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozODMxCittc2dpZCAiY2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzg0MAorbXNnaWQgImNhbm5vdCBhbWVuZCBub24tZXhpc3RpbmcgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM4NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBmaWxlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb250ZW50czogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozODQ3Cittc2dpZCAiIgorIlxuIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSwgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisiXG4iCisizojPh861z4TOtSDOvM63IM+Dz4XOs8+Hz4nOvc61z4XOvM6tzr3Otc+CIM6xzrvOu86xzrPOrc+CIM+Dz4TOvyDOtM6tzr3PhM+Bzr8gzrXPgc6zzrHPg86vzrHPgiDPg86xz4IuIM6gzrHPgc6xzrrOsc67z44sIM+Fz4DOv86yzqzOu861z4TOrSAiCisiz4TOuc+CXG4iCisiz4DPgc+Oz4TOsSDOus6xzrkgzrzOtc+Ezqwgz4TPgc6tzr7PhM61ICdnaXQgcmViYXNlIC0tY29udGludWUnIM+AzqzOu865LiIKKworIzogc2VxdWVuY2VyLmM6Mzg4MyBzZXF1ZW5jZXIuYzozOTIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBmaWxlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM5MzYKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzk0MworbXNnaWQgImNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbid0IGNoZXJyeS1waWNrIGEgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQwODMKK21zZ2lkICJjYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDUyOQorbXNnaWQgIm1ha2Vfc2NyaXB0OiB1bmhhbmRsZWQgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0NTMyCittc2dpZCAibWFrZV9zY3JpcHQ6IGVycm9yIHByZXBhcmluZyByZXZpc2lvbnMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDU3MyBzZXF1ZW5jZXIuYzo0NjI5IHNlcXVlbmNlci5jOjQ5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgdG9kbyBsaXN0OiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVucmVjb2duaXplZCBzZXR0aW5nICVzIGZvciBvcHRpb24gcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suIElnbm9yaW5nLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0NzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS5cbiIKKyJEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKTpcbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0NzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSBcImRyb3BcIiB0byBleHBsaWNpdGx5IHJlbW92ZSBhIGNvbW1pdC5cbiIKKyJcbiIKKyJVc2UgJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2YgIgorIndhcm5pbmdzLlxuIgorIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0Nzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGlzIHdpdGggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZScuXG4iCisiT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCittc2dzdHIgIiIKKyLOnM+Azr/Pgc61zq/PhM61IM69zrEgz4TOvyDOtM65zr/Pgc64z47Pg861z4TOtSDOsc+Fz4TPjCDOvM61ICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyDOus6xzrkgzrzOtc+Ezqwgzr3OsSAiCisiz4TPgc6tzr7Otc+EzrUgJ2dpdCByZWJhc2UgLS1jb250aW51ZScuXG4iCisizokgzrzPgM6/z4HOtc6vz4TOtSDOvc6xIM61zrPOus6xz4TOsc67zrXOr8+IzrXPhM61IM+Ezr8gcmViYXNlIM68zrUgJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCisKKyM6IHNlcXVlbmNlci5jOjQ5MTIgc2VxdWVuY2VyLmM6NDk1MAorbXNnaWQgIm5vdGhpbmcgdG8gZG8iCittc2dzdHIgIs60zrXOvSDPhc+AzqzPgc+HzrXOuSDPhM6vz4DOv8+EzrEgzr3OsSDOs86vzr3Otc65IgorCisjOiBzZXF1ZW5jZXIuYzo0OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmRzKSIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHNlcXVlbmNlci5jOjQ5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0OTMyIHNlcXVlbmNlci5jOjQ5NjEKK21zZ2lkICJjb3VsZCBub3QgdHJhbnNmb3JtIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDk2NAorbXNnaWQgImNvdWxkIG5vdCBza2lwIHVubmVjZXNzYXJ5IHBpY2sgY29tbWFuZHMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NTA0NworbXNnaWQgInRoZSBzY3JpcHQgd2FzIGFscmVhZHkgcmVhcnJhbmdlZC4iCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBubyBzdWNoIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJ2dpdCA8Y29tbWFuZD4gLS0gPHBhdGg+Li4uJyB0byBzcGVjaWZ5IHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGxvY2FsbHkuIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogdW5rbm93biByZXZpc2lvbiBvciBwYXRoIG5vdCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gJyVzJyBtdXN0IGNvbWUgYmVmb3JlIG5vbi1vcHRpb24gYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWVcbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKworIzogc2V0dXAuYzozODkKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHVwIHdvcmsgdHJlZSB1c2luZyBpbnZhbGlkIGNvbmZpZyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjM5MworbXNnaWQgInRoaXMgb3BlcmF0aW9uIG11c3QgYmUgcnVuIGluIGEgd29yayB0cmVlIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6NTM1Cittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjU1NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbGFyZ2UgdG8gYmUgYSAuZ2l0IGZpbGU6ICclcyciCittc2dzdHIgIiIKKworIzogc2V0dXAuYzo1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjU2MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGdpdGZpbGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjU2MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBwYXRoIGluIGdpdGZpbGU6ICVzIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6NTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAizrTOtc69IM61zq/Ovc6xzrkgzrHPgM6/zrjOtc+Ezq7Pgc65zr8gZ2l0OiAlcyIKKworIzogc2V0dXAuYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyQlcycgdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJyVzJyIKK21zZ3N0ciAizrTOtc69IM61zq/Ovc6xzrkgzrHPgM6/zrjOtc+Ezq7Pgc65zr8gZ2l0OiAnJXMnIgorCisjOiBzZXR1cC5jOjcwNiBzZXR1cC5jOjcwOCBzZXR1cC5jOjczOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjcxMSBzZXR1cC5jOjc2NyBzZXR1cC5jOjc3NyBzZXR1cC5jOjgxNiBzZXR1cC5jOjgyNAorbXNnaWQgImNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclKnMlcyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjEwNjgKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6MTA3NyBzZXR1cC5jOjEwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoYW5nZSB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6MTA4OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMpOiAlcyIKK21zZ3N0ciAizrTOtc69IM61zq/Ovc6xzrkgzrHPgM6/zrjOtc+Ezq7Pgc65zr8gZ2l0ICjOriDOus6xzr3Orc69zrHPgiDOsc+Az4wgz4TOv8+Fz4Igz4DOuc6/IM+AzqzOvc+JIM+GzrHOus6tzrvOv8+Fz4IpOiAlcyIKKworIzogc2V0dXAuYzoxMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IHBhcmVudCB1cCB0byBtb3VudCBwb2ludCAlcylcbiIKKyJTdG9wcGluZyBhdCBmaWxlc3lzdGVtIGJvdW5kYXJ5IChHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNIG5vdCBzZXQpLiIKK21zZ3N0ciAiIgorIs60zrXOvSDOtc6vzr3Osc65IM6xz4DOv864zrXPhM6uz4HOuc6/IGdpdCAozq4gzrrOsc69zq3Ovc6xz4Igz4DOuc6/IM+AzqzOvc+JIM+GzqzOus61zrvOv8+CIM68zq3Ph8+Bzrkgz4TOvyDPg863zrzOtc6vzr8gIgorIs+Az4HOv8+DzqzPgc+EzrfPg863z4IgJXMpXG4iCisizqPPhM6xzrzOrM+EzrfOvM6xIM+Dz4TOsSDPjM+BzrnOsSDPhM6/z4Ugz4PPhc+Dz4TOrs68zrHPhM6/z4IgzrHPgc+HzrXOr8+Jzr0gKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gIgorIs68zrcgzr/Pgc65z4POvM6tzr3OvykuIgorCisjOiBzZXR1cC5jOjEyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgKDAlLjNvKS5cbiIKKyJUaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoxMjQ3Cittc2dpZCAib3BlbiAvZGV2L251bGwgb3IgZHVwIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjEyNjIKK21zZ2lkICJmb3JrIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjEyNjcKK21zZ2lkICJzZXRzaWQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0OyBjaGVjayAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIGFsdGVybmF0ZSBvYmplY3QgcGF0aDogJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpZ25vcmluZyBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlcywgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG5vcm1hbGl6ZSBvYmplY3QgZGlyZWN0b3J5OiAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo2MTgKK21zZ2lkICJ1bmFibGUgdG8gZmRvcGVuIGFsdGVybmF0ZXMgbG9ja2ZpbGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NjM2Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjY0MworbXNnaWQgInVuYWJsZSB0byBtb3ZlIG5ldyBhbHRlcm5hdGVzIGZpbGUgaW50byBwbGFjZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGFzIGEgbGlua2VkIGNoZWNrb3V0IGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBzaGFsbG93IgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjcyNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIGdyYWZ0ZWQiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo4NjMKK21zZ2lkICJtbWFwIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBmaWxlICVzIGlzIGVtcHR5IgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjExNTEgc2hhMS1maWxlLmM6MjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjExNTMgc2hhMS1maWxlLmM6MjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJnYXJiYWdlIGF0IGVuZCBvZiBsb29zZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMTk1Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMjc5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlbWVudCAlcyBub3QgZm91bmQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTQ5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZWQgb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTU5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNjAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgcGVybWlzc2lvbiB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE2MDkKK21zZ2lkICJmaWxlIHdyaXRlIGVycm9yIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE2MjgKK21zZ2lkICJlcnJvciB3aGVuIGNsb3NpbmcgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTY5MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgYWRkaW5nIGFuIG9iamVjdCB0byByZXBvc2l0b3J5IGRhdGFiYXNlICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE2OTUKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE3MTkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBuZXcgb2JqZWN0ICVzICglZCkiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlRW5kIG9uIG9iamVjdCAlcyBmYWlsZWQgKCVkKSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZ1c2VkIGJ5IHVuc3RhYmxlIG9iamVjdCBzb3VyY2UgZGF0YSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTc0MyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdXRpbWUoKSBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxODE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTg1OAorbXNnaWQgImNvcnJ1cHQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE4NjYKK21zZ2lkICJjb3JydXB0IHRhZyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxOTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZXJyb3Igd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTk2OAorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCByZWFkIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjIwNDEgc2hhMS1maWxlLmM6MjA1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFpbGVkIHRvIGluc2VydCBpbnRvIGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyMDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjIxMDkgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ez4wgz4TOvyDOrM69zr/Ouc6zzrzOsSDPhM6/z4UgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjIyOTkgc2hhMS1maWxlLmM6MjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIG1pc21hdGNoIGZvciAlcyAoZXhwZWN0ZWQgJXMpIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjIzMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1tYXAgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyMzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBoZWFkZXIgb2YgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MjM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGNvbnRlbnRzIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtbmFtZS5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCBTSEExICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiIgorCisjOiBzaGExLW5hbWUuYzo0NTkKK21zZ2lkICJUaGUgY2FuZGlkYXRlcyBhcmU6IgorbXNnc3RyICIiCisKKyM6IHNoYTEtbmFtZS5jOjc0MgorbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxMTQgc3VibW9kdWxlLmM6MTQzCittc2dpZCAiQ2Fubm90IGNoYW5nZSB1bm1lcmdlZCAuZ2l0bW9kdWxlcywgcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMgZmlyc3QiCittc2dzdHIgIiIKKyLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgzrHOu867zrHOs86uIM68zrcgz4PPhc6zz4fPic69zrXPhc68zq3Ovc+Jzr0gLmdpdG1vZHVsZSwgzrXPgM65zrvPjc+Dz4TOtSDPgM+Bz47PhM6xIM+EzrnPgiAiCisiz4PPhc6zzrrPgc6/z43Pg861zrnPgiDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CIgorCisjOiBzdWJtb2R1bGUuYzoxMTggc3VibW9kdWxlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSAuZ2l0bW9kdWxlcyBlbnRyeSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTY1Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW4gdW5wb3B1bGF0ZWQgc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAizpcgz4DOtc+BzrnOs8+BzrHPhs6uIM60zrnOsc60z4HOv868zq7PgiAnJXMnIM6yz4HOr8+DzrrOtc+EzrHOuSDOvM6tz4POsSDPg8+EzrfOvSDPhc+Azr/Otc69z4zPhM63z4TOsSAnJS4qcyciCisKKyM6IHN1Ym1vZHVsZS5jOjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZW50cnkgJyVzJyAoJXMpIGlzIGEgJXMsIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiz4TOvyDPg8+Ezr/Ouc+HzrXOr86/IM+Fz4DOv861zr3PjM+EzrfPhM6xz4IgJyVzJyAoJXMpIM61zq/Ovc6xzrkgJXMsIM+Mz4fOuSDPhc+Azr/Oss6/zrvOriIKKworIzogc3VibW9kdWxlLmM6MTE0MyBidWlsdGluL2JyYW5jaC5jOjY1NiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk4OQorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLOkc+Azq3PhM+Fz4fOtSDOtyDPhM6xz43PhM65z4POtyDPhM6/z4UgSEVBRCDOvM61IM66zqzPgM6/zrnOvyDOrc6zzrrPhc+Bzr8gcmVmLiIKKworIzogc3VibW9kdWxlLmM6MTQ3NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYWNjZXNzIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjE2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBub3QgcmVjb2duaXplZCBhcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjE3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXJ0ICdnaXQgc3RhdHVzJyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxNzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjE4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVuc2V0IGNvcmUud29ya3RyZWUgc2V0dGluZyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxODk1CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGhhcyBkaXJ0eSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxOTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnIGNvdWxkIG5vdCBiZSB1cGRhdGVkLiIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxOTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJyZWxvY2F0ZV9naXRkaXIgZm9yIHN1Ym1vZHVsZSAnJXMnIHdpdGggbW9yZSB0aGFuIG9uZSB3b3JrdHJlZSBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjIwMDggc3VibW9kdWxlLmM6MjA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIG5hbWUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjIwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1pZ3JhdGluZyBnaXQgZGlyZWN0b3J5IG9mICclcyVzJyBmcm9tXG4iCisiJyVzJyB0b1xuIgorIiclcydcbiIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoyMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MjE0MworbXNnaWQgImNvdWxkIG5vdCBzdGFydCBscy1maWxlcyBpbiAuLiIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImxzLXRyZWUgcmV0dXJuZWQgdW5leHBlY3RlZCByZXR1cm4gY29kZSAlZCIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHN1c3BpY2lvdXMgc3VibW9kdWxlIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzoyOTYKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZXMgbm90IGFsbG93ZWQgZm9yIHN1Ym1vZHVsZS5mZXRjaGpvYnMiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAnJXMnIHdoaWNoIG1heSBiZSBpbnRlcnByZXRlZCBhcyBhIGNvbW1hbmQtbGluZSBvcHRpb246ICVzIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIC5naXRtb2R1bGVzIGVudHJ5ICVzIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogdHJhaWxlci5jOjQ4NSB0cmFpbGVyLmM6NDkwIHRyYWlsZXIuYzo0OTUgdHJhaWxlci5jOjU0OSB0cmFpbGVyLmM6NTUzCisjOiB0cmFpbGVyLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgJyVzJyBmb3Iga2V5ICclcyciCittc2dzdHIgIiIKKworIzogdHJhaWxlci5jOjUzOSB0cmFpbGVyLmM6NTQ0IGJ1aWx0aW4vcmVtb3RlLmM6Mjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgIiIKKworIzogdHJhaWxlci5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzo3NTMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzoxMDExIHdyYXBwZXIuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJXMiCittc2dzdHIgIiIKKworIzogdHJhaWxlci5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUiCittc2dzdHIgIiIKKworIzogdHJhaWxlci5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3Qgd3JpdGFibGUgYnkgdXNlciIKK21zZ3N0ciAiIgorCisjOiB0cmFpbGVyLmM6MTAyNworbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICLOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM+MIM+Ezr8gzqzOvc6/zrnOs868zrEgz4TOv8+FIM+Az4HOv8+Dz4nPgc65zr3Ov8+NIM6xz4HPh861zq/Ov8+FIgorCisjOiB0cmFpbGVyLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIgorbXNnc3RyICLOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM68zrXPhM6/zr3Ov868zrHPg86vzrEgz4DPgc6/z4PPic+BzrnOvc6/z40gzrHPgc+HzrXOr86/z4Ugz4POtSAlcyIKKworIzogdHJhbnNwb3J0LmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNldCB1cHN0cmVhbSBvZiAnJXMnIHRvICclcycgb2YgJyVzJ1xuIgorbXNnc3RyICLOmM6xIM+Mz4HOuc62zrUgz4TOvyDPgM+Bzr/PgiDPhM6xIM+AzqzOvc+JIM+Ezr/PhSAnJXMnIM+Jz4IgJyVzJyDPhM6/z4UgJyVzJ1xuIgorCisjOiB0cmFuc3BvcnQuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgYnVuZGxlICclcyciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzo2MTcKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgdHJhbnNwb3J0LmNvbG9yLiogY29uZmlnIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjY5MAorbXNnaWQgInN1cHBvcnQgZm9yIHByb3RvY29sIHYyIG5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6ODE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgZm9yIGNvbmZpZyAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0ICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6OTM3Cittc2dpZCAiZ2l0LW92ZXItcnN5bmMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzoxMDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKKyJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIKK21zZ3N0ciAiIgorIs6fzrkgz4DOsc+BzrHOus6sz4TPiSDOtM65zrHOtM+Bzr/OvM6tz4Igz4XPgM6/zrXOvc+Mz4TOt8+EzrHPgiDPgM61z4HOuc6tz4fOv8+Fzr0gzrHOu867zrHOs86tz4Igz4DOv8+FIM60zrXOvSDOtc6vzr3Osc65XG4iCisizrTPhc69zrHPhM+MIM69zrEgzrLPgc61zrjOv8+Nzr0gz4POtSDOus6xzr3Orc69zrHOvSDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OvyDOtc6+z4XPgM63z4HOtc+EzrfPhM6uOlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQbGVhc2UgdHJ5XG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJvciBjZCB0byB0aGUgcGF0aCBhbmQgdXNlXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorInRvIHB1c2ggdGhlbSB0byBhIHJlbW90ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIs6gzrHPgc6xzrrOsc67z44gzrTOv866zrnOvM6sz4PPhM61XG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyLOriDOus6szr3PhM61IGNkIM+Dz4TOtyDOtM65zrHOtM+Bzr/OvM6uIM66zrHOuSDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61XG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorIs6zzrnOsSDOvc6xIM+EzrEgzrTOt868zr/Pg865zrXPjc+DzrXPhM61IM+DzrUgzq3Ovc6xzr0gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gzrXOvs+Fz4DOt8+BzrXPhM63z4TOri5cbiIKKyJcbiIKKworIzogdHJhbnNwb3J0LmM6MTA0NAorbXNnaWQgIkFib3J0aW5nLiIKK21zZ3N0ciAizpXOs866zrHPhM6szrvOtc65z4jOty4iCisKKyM6IHRyYW5zcG9ydC5jOjExODQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBhbGwgbmVlZGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6MTMxNyB0cmFuc3BvcnQtaGVscGVyLmM6NjQzCittc2dpZCAib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6MTQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgd2hpbGUgcGFyc2luZyBhbHRlcm5hdGUgcmVmczogJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjUxIHRyYW5zcG9ydC1oZWxwZXIuYzo4MAorbXNnaWQgImZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCByZW1vdGUgaGVscGVyIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDggdHJhbnNwb3J0LWhlbHBlci5jOjU1NworbXNnaWQgImNhbid0IGR1cCBoZWxwZXIgb3V0cHV0IGZkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVua25vd24gbWFuZGF0b3J5IGNhcGFiaWxpdHkgJXM7IHRoaXMgcmVtb3RlIGhlbHBlciBwcm9iYWJseSBuZWVkcyBuZXdlciAiCisidmVyc2lvbiBvZiBHaXQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIwNQorbXNnaWQgInRoaXMgcmVtb3RlIGhlbHBlciBzaG91bGQgaW1wbGVtZW50IHJlZnNwZWMgY2FwYWJpbGl0eSIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjcyIHRyYW5zcG9ydC1oZWxwZXIuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdW5leHBlY3RlZGx5IHNhaWQ6ICclcyciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHNvIGxvY2tlZCAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDc5Cittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtaW1wb3J0IgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1MDIKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtaW1wb3J0IgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1MzEgdHJhbnNwb3J0LWhlbHBlci5jOjEwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biByZXNwb25zZSB0byBjb25uZWN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTk4Cittc2dpZCAic2V0dGluZyByZW1vdGUgc2VydmljZSBwYXRoIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYwMAorbXNnaWQgImludmFsaWQgcmVtb3RlIHNlcnZpY2UgcGF0aCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNvbm5lY3QgdG8gc3Vic2VydmljZSAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIG9rL2Vycm9yLCBoZWxwZXIgc2FpZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyIHJlcG9ydGVkIHVuZXhwZWN0ZWQgc3RhdHVzIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgZHJ5LXJ1biIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODM1CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQ9aWYtYXNrZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAncHVzaC1vcHRpb24nIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5MzcKK21zZ2lkICJyZW1vdGUtaGVscGVyIGRvZXNuJ3Qgc3VwcG9ydCBwdXNoOyByZWZzcGVjIG5lZWRlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdmb3JjZSciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk4OQorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTk0Cittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWV4cG9ydCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgorIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHJlc3BvbnNlIGluIHJlZiBsaXN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkKCVzKSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGUoJXMpIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTMxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzMzUgdHJhbnNwb3J0LWhlbHBlci5jOjEzMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGE6ICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIHRvIHdhaXQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzOTggdHJhbnNwb3J0LWhlbHBlci5jOjE0MDcKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIKK21zZ3N0ciAiIgorCisjOiB0cmVlLXdhbGsuYzozMworbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiB0cmVlLXdhbGsuYzozOQorbXNnaWQgIm1hbGZvcm1lZCBtb2RlIGluIHRyZWUgZW50cnkiCittc2dzdHIgIiIKKworIzogdHJlZS13YWxrLmM6NDMKK21zZ2lkICJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICIiCisKKyM6IHRyZWUtd2Fsay5jOjExNgorbXNnaWQgInRvby1zaG9ydCB0cmVlIGZpbGUiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIs6fzrkgz4TOv8+AzrnOus6tz4IgzrHOu867zrHOs86tz4Igz4POsc+CIM+Dz4TOsSDOsc66z4zOu86/z4XOuM6xIM6xz4HPh861zq/OsSDOuM6xIM61z4DOtc6zzrPPgc6xz4bPjM69z4TOv8+Fz4POsc69IM6xz4DPjCDPhM63zr0gIgorIs61zr7Osc6zz4nOs86uOlxuIgorIiUlc86gzrHPgc6xzrrOsc67z44gz4XPgM6/zrLOrM67zrXPhM61IM+EzrnPgiDOsc67zrvOsc6zzq3PgiDPg86xz4Igzq4gzrHPgM6/zrjOt866zrXPjc+Dz4TOtSDPhM65z4Igz4DPgc65zr0gzrHOu867zqzOvs61z4TOtSDOus67zqzOtM6/LiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLOn865IM+Ezr/PgM65zrrOrc+CIM6xzrvOu86xzrPOrc+CIM+DzrHPgiDPg8+EzrEgzrHOus+MzrvOv8+FzrjOsSDOsc+Bz4fOtc6vzrEgzrjOsSDOtc+AzrXOs86zz4HOsc+Gz4zOvc+Ezr/Phc+DzrHOvSDOsc+Az4wgz4TOt869ICIKKyLOtc6+zrHOs8+JzrPOrjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIs6fzrkgz4TOv8+AzrnOus6tz4IgzrHOu867zrHOs86tz4Igz4POsc+CIM+Dz4TOsSDOsc66z4zOu86/z4XOuM6xIM6xz4HPh861zq/OsSDOuM6xIM61z4DOtc6zzrPPgc6xz4bPjM69z4TOv8+Fz4POsc69IM6xz4DPjCDPhM63ICIKKyLPg8+FzrPPh8+Ozr3Otc+Fz4POtzpcbiIKKyIlJXPOoM6xz4HOsc66zrHOu8+OIM+Fz4DOv86yzqzOu861z4TOtSDPhM65z4IgzrHOu867zrHOs86tz4Igz4POsc+CIM6uIM6xz4DOv864zrfOus61z43Pg8+EzrUgz4TOuc+CIM+Az4HOuc69IM+Dz4XOs8+Hz4nOvc61z43Pg861z4TOtS4iCisKKyM6IHVucGFjay10cmVlcy5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisizp/OuSDPhM6/z4DOuc66zq3PgiDOsc67zrvOsc6zzq3PgiDPg86xz4Igz4PPhM6xIM6xzrrPjM67zr/Phc64zrEgzrHPgc+HzrXOr86xIM64zrEgzrXPgM61zrPOs8+BzrHPhs+Mzr3PhM6/z4XPg86xzr0gzrHPgM+MIM+EzrcgIgorIs+Dz4XOs8+Hz47Ovc61z4XPg863OlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisizp/OuSDPhM6/z4DOuc66zq3PgiDOsc67zrvOsc6zzq3PgiDPg86xz4Igz4PPhM6xIM6xzrrPjM67zr/Phc64zrEgzrHPgc+HzrXOr86xIM64zrEgzrXPgM61zrPOs8+BzrHPhs+Mzr3PhM6/z4XPg86xzr0gzrHPgM+MIM+Ezr8gJXM6XG4iCisiJSVzzqDOsc+BzrHOus6xzrvPjiDPhc+Azr/Oss6szrvOtc+EzrUgz4TOuc+CIM6xzrvOu86xzrPOrc+CIM+DzrHPgiDOriDOsc+Azr/OuM63zrrOtc+Nz4PPhM61IM+EzrnPgiDPgM+BzrnOvSDOsc+Az4wgz4TOvyAlcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjEyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisizp/OuSDPhM6/z4DOuc66zq3PgiDOsc67zrvOsc6zzq3PgiDPg86xz4Igz4PPhM6xIM6xzrrPjM67zr/Phc64zrEgzrHPgc+HzrXOr86xIM64zrEgzrXPgM61zrPOs8+BzrHPhs+Mzr3PhM6/z4XPg86xzr0gzrHPgM+MIM+Ezr8gJXM6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgd291bGQgbG9zZSB1bnRyYWNrZWQgZmlsZXMgaW4gdGhlbTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVudHJ5ICclcycgb3ZlcmxhcHMgd2l0aCAnJXMnLiAgQ2Fubm90IGJpbmQuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBzcGFyc2UgY2hlY2tvdXQ6IHRoZSBmb2xsb3dpbmcgZW50cmllcyBhcmUgbm90IHVwIHRvIGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgc3BhcnNlIGNoZWNrb3V0ICIKKyJ1cGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHN1Ym1vZHVsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmdcbiIKK21zZ3N0ciAizpXOs866zrHPhM6szrvOtc65z4jOt1xuIgorCisjOiB1bnBhY2stdHJlZXMuYzozMzUKK21zZ2lkICJDaGVja2luZyBvdXQgZmlsZXMiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MzY3Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgcGF0aHMgaGF2ZSBjb2xsaWRlZCAoZS5nLiBjYXNlLXNlbnNpdGl2ZSBwYXRoc1xuIgorIm9uIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtKSBhbmQgb25seSBvbmUgZnJvbSB0aGUgc2FtZVxuIgorImNvbGxpZGluZyBncm91cCBpcyBpbiB0aGUgd29ya2luZyB0cmVlOlxuIgorbXNnc3RyICIiCisKKyM6IHVybG1hdGNoLmM6MTYzCittc2dpZCAiaW52YWxpZCBVUkwgc2NoZW1lIG5hbWUgb3IgbWlzc2luZyAnOi8vJyBzdWZmaXgiCittc2dzdHIgIiIKKworIzogdXJsbWF0Y2guYzoxODcgdXJsbWF0Y2guYzozNDYgdXJsbWF0Y2guYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlWFggZXNjYXBlIHNlcXVlbmNlIgorbXNnc3RyICIiCisKKyM6IHVybG1hdGNoLmM6MjE1Cittc2dpZCAibWlzc2luZyBob3N0IGFuZCBzY2hlbWUgaXMgbm90ICdmaWxlOiciCittc2dzdHIgIiIKKworIzogdXJsbWF0Y2guYzoyMzIKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IHVybG1hdGNoLmM6MjQ3Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGhvc3QgbmFtZSIKK21zZ3N0ciAiIgorCisjOiB1cmxtYXRjaC5jOjI5MiB1cmxtYXRjaC5jOjMwMworbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIiIKKworIzogdXJsbWF0Y2guYzozNzEKK21zZ2lkICJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50IgorbXNnc3RyICIiCisKKyM6IHdvcmt0cmVlLmM6MjQ5IGJ1aWx0aW4vYW0uYzoyMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgIiIKKworIzogd29ya3RyZWUuYzoyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhdCBtYWluIHdvcmtpbmcgdHJlZSBpcyBub3QgdGhlIHJlcG9zaXRvcnkgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IHdvcmt0cmVlLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsZSBkb2VzIG5vdCBjb250YWluIGFic29sdXRlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZSBsb2NhdGlvbiIKK21zZ3N0ciAiIgorCisjOiB3b3JrdHJlZS5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IHdvcmt0cmVlLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgLmdpdCBmaWxlLCBlcnJvciBjb2RlICVkIgorbXNnc3RyICIiCisKKyM6IHdvcmt0cmVlLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgYmFjayB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IHdyYXBwZXIuYzoyMjMgd3JhcHBlci5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICLOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM+MIM+Ezr8gzqzOvc6/zrnOs868zrEgz4TOv8+FICclcycgzrPOuc6xIM6xzr3OrM6zzr3Pic+DzrcgzrrOsc65IM61zrPOs8+BzrHPhs6uIgorCisjOiB3cmFwcGVyLmM6NDI0IHdyYXBwZXIuYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnIgorbXNnc3RyICIiCisKKyM6IHdyYXBwZXIuYzo2MzIKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTU1Cittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICLOnM63IM+Dz4XOs8+Hz4nOvc61z4XOvM6tzr3Otc+CIM60zrnOsc60z4HOv868zq3PgjoiCisKKyM6IHd0LXN0YXR1cy5jOjE4MiB3dC1zdGF0dXMuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc2V0ICVzIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisiICAoz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSBcImdpdCByZXNldCAlcyA8zrHPgc+HzrXOr86/Pi4uLlwiIM6zzrnOsSDOvc6xIM6xz4DOv8+Az4HOv861z4TOv865zrzOrM+DzrXPhM61KSIKKworIzogd3Qtc3RhdHVzLmM6MTg0IHd0LXN0YXR1cy5jOjIxMQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorIiAgKM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgXCJnaXQgcm0gLS1jYWNoZWQgPM6xz4HPh861zq/Ovz4uLi5cIiDOs865zrEgzr3OsSDOsc+Azr/PgM+Bzr/Otc+Ezr/Ouc68zqzPg861z4TOtSkiCisKKyM6IHd0LXN0YXR1cy5jOjE4OAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorIiAgKM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgXCJnaXQgYWRkIDzOsc+Bz4fOtc6vzr8+Li4uXCIgzq3PhM+Dzrkgz47Pg8+EzrUgzr3OsSDOtc+AzrnPg863zrzOrM69zrXPhM61IM+EzrfOvSAiCisizrXPgM6vzrvPhc+DzrcpIgorCisjOiB3dC1zdGF0dXMuYzoxOTAgd3Qtc3RhdHVzLmM6MTk0Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAoz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSBcImdpdCBhZGQvcm0gPM6xz4HPh861zq/Ovz4uLi5cIiDOrc+Ez4POuSDPjs+Dz4TOtSDOvc6xIM61z4DOuc+DzrfOvM6szr3Otc+EzrUgz4TOt869ICIKKyLOtc+Azq/Ou8+Fz4POtykiCisKKyM6IHd0LXN0YXR1cy5jOjE5MgorbXNnaWQgIiAgKHVzZSBcImdpdCBybSA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAoz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSBcImdpdCBybSA8zrHPgc+HzrXOr86/Pi4uLlwiIM6tz4TPg865IM+Oz4PPhM61IM69zrEgzrXPgM65z4POt868zqzOvc61z4TOtSDPhM63zr0gIgorIs61z4DOr867z4XPg863KSIKKworIzogd3Qtc3RhdHVzLmM6MjAzIHd0LXN0YXR1cy5jOjEwNDYKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIs6RzrvOu86xzrPOrc+CIM+Az4HOv8+CIM+Fz4DOv86yzr/Ou86uOiIKKworIzogd3Qtc3RhdHVzLmM6MjIxIHd0LXN0YXR1cy5jOjEwNTUKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIs6RzrvOu86xzrPOrc+CIM+Azr/PhSDOtM61zr0gzq3Ph86/z4XOvSDPgM+Bzr/Otc+Ezr/Ouc68zrHPg8+EzrXOryDOs865zrEgz4XPgM6/zrLOv867zq46IgorCisjOiB3dC1zdGF0dXMuYzoyMjUKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgXCJnaXQgYWRkIDzOsc+Bz4fOtc6vzr8+Li4uXCIgzrPOuc6xIM69zrEgzrXOvc63zrzOtc+Bz47Pg861z4TOtSDOsc+Fz4TOrCDPgM6/z4UgzrjOsSAiCisiz4XPgM6/zrLOu863zrjOv8+Nzr0pIgorCisjOiB3dC1zdGF0dXMuYzoyMjcKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgXCJnaXQgYWRkL3JtIDzOsc+Bz4fOtc6vzr8+Li4uXCIgzrPOuc6xIM69zrEgzrXOvc63zrzOtc+Bz47Pg861z4TOtSDOsc+Fz4TOrCDPgM6/z4UgzrjOsSAiCisiz4XPgM6/zrLOu863zrjOv8+Nzr0pIgorCisjOiB3dC1zdGF0dXMuYzoyMjgKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiCittc2dzdHIgIiIKKyIgICjPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IFwiZ2l0IGNoZWNrb3V0IC0tIDzOsc+Bz4fOtc6vzr8+Li4uXCIgzrPOuc6xIM69zrEgzrHPgM6/z4HPgc6vz4jOtc+EzrUgz4TOuc+CICIKKyLOsc67zrvOsc6zzq3PgiDPg8+Ezr8gz4bOrM66zrXOu86/IM61z4HOs86xz4POr86xz4IpIgorCisjOiB3dC1zdGF0dXMuYzoyMzAKK21zZ2lkICIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiCittc2dzdHIgIiIKKyIgICjOvc6xIM6zzq/Ovc61zrkgz4XPgM6/zrLOv867zq4gzq4gzrHPgM+Mz4HPgc65z4jOtyDPhM6/z4UgzrzOtyDPgM6xz4HOsc66zr/Ou86/z4XOuM6/z43OvM61zr3Ov8+FIM6uIM+Ez4HOv8+Azr/PgM6/zrnOt868zq3Ovc6/z4UgIgorIs+AzrXPgc65zrXPh86/zrzOrc69zr/PhSDPg8+EzrnPgiDPhc+Azr/Otc69z4zPhM63z4TOtc+CKSIKKworIzogd3Qtc3RhdHVzLmM6MjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAoz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSBcImdpdCAlcyA8zrHPgc+HzrXOr86/Pi4uLlwiIM6zzrnOsSDOvc6xIM+Dz4XOvM+AzrXPgc65zrvOt8+GzrjOtc6vIM+DzrUgzrHPhc+Ezqwgz4DOv8+FIM64zrEgIgorIs+Fz4DOv86yzrvOt864zr/Pjc69KSIKKworIzogd3Qtc3RhdHVzLmM6MjU3Cittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAizrTOuc6xzrPPgc6xz4bOriDOus6xzrkgzrHPgM+MIM+Ezr/Phc+CIM60z43OvzoiCisKKyM6IHd0LXN0YXR1cy5jOjI1OQorbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAiz4DPgc6/z4POuM6uzrrOtyDOsc+Az4wgzrXOvM6sz4I6IgorCisjOiB3dC1zdGF0dXMuYzoyNjEKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICLOtM65zrHOs8+BzrHPhs6uIM6xz4DPjCDOsc+Fz4TOv8+Nz4I6IgorCisjOiB3dC1zdGF0dXMuYzoyNjMKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAiz4DPgc6/z4POuM6uzrrOtyDOsc+Az4wgzrHPhc+Ezr/Pjc+COiIKKworIzogd3Qtc3RhdHVzLmM6MjY1Cittc2dpZCAiZGVsZXRlZCBieSB1czoiCittc2dzdHIgIs60zrnOsc6zz4HOsc+Gzq4gzrHPgM+MIM61zrzOrM+COiIKKworIzogd3Qtc3RhdHVzLmM6MjY3Cittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgIs+Az4HOv8+DzrjOrs66zrcgzrrOsc65IM6xz4DPjCDPhM6/z4XPgiDOtM+Nzr86IgorCisjOiB3dC1zdGF0dXMuYzoyNjkKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAiz4TPgc6/z4DOv8+Azr/Or863z4POtyDOus6xzrkgzrHPgM+MIM+Ezr/Phc+CIM60z43OvzoiCisKKyM6IHd0LXN0YXR1cy5jOjI3OQorbXNnaWQgIm5ldyBmaWxlOiIKK21zZ3N0ciAizr3Orc6/IM6xz4HPh861zq/OvzoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MQorbXNnaWQgImNvcGllZDoiCittc2dzdHIgIs6xzr3PhM65zrPPgc6xz4bOrjoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MworbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICLOtM65zrHOs8+BzrHPhs6uOiIKKworIzogd3Qtc3RhdHVzLmM6Mjg1Cittc2dpZCAibW9kaWZpZWQ6IgorbXNnc3RyICLPhM+Bzr/PgM6/z4DOv86vzrfPg863OiIKKworIzogd3Qtc3RhdHVzLmM6Mjg3Cittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgIs68zrXPhM6/zr3Ov868zrHPg86vzrE6IgorCisjOiB3dC1zdGF0dXMuYzoyODkKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAizrHOu867zrHOs86uIM+Ez43PgM6/z4U6IgorCisjOiB3dC1zdGF0dXMuYzoyOTEKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAizqzOs869z4nPg8+Ezr86IgorCisjOiB3dC1zdGF0dXMuYzoyOTMKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgIs68zrcgz4PPhc6zz4fPic69zrXPhc68zq3Ovc6/OiIKKworIzogd3Qtc3RhdHVzLmM6MzczCittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAizr3Orc61z4Igz4XPgM6/zrLOv867zq3PgiwgIgorCisjOiB3dC1zdGF0dXMuYzozNzUKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgIs+Ez4HOv8+Azr/PgM6/zrnOt868zq3Ovc6/IM+AzrXPgc65zrXPh8+MzrzOtc69zr8sICIKKworIzogd3Qtc3RhdHVzLmM6Mzc3Cittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAizrzOtyDPgM6xz4HOsc66zr/Ou86/z4XOuM6/z43OvM61zr3OvyDPgM61z4HOuc61z4fPjM68zrXOvc6/LCAiCisKKyM6IHd0LXN0YXR1cy5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cnkiCittc2dpZF9wbHVyYWwgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyaWVzIgorbXNnc3RyWzBdICLOlyDOsc+Azr/OuM6uzrrOtc+Fz4POriDPg86xz4Igzq3Ph861zrkgz4TPjs+BzrEgJWQgz4PPhM6/zrnPh861zq/OvyIKK21zZ3N0clsxXSAizpcgzrHPgM6/zrjOrs66zrXPhc+Dzq4gz4POsc+CIM6tz4fOtc65IM+Ez47Pgc6xICVkIM+Dz4TOv865z4fOtc6vzrEiCisKKyM6IHd0LXN0YXR1cy5jOjkxNgorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICLOpc+Azr/Otc69z4zPhM63z4TOtc+CIM+Azr/PhSDOrM67zrvOsc6+zrHOvSDOsc67zrvOrCDOtM61zr0gzrXOvc63zrzOtc+Bz47OuM63zrrOsc69OiIKKworIzogd3Qtc3RhdHVzLmM6OTE4Cittc2dpZCAiU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAizpHOu867zrHOs86tz4Igz4POtSDPhc+Azr/Otc69z4zPhM63z4TOtc+CIM+Az4HOv8+CIM+Fz4DOv86yzr/Ou86uOiIKKworIzogd3Qtc3RhdHVzLmM6MTAwMAorbXNnaWQgIiIKKyJEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS5cbiIKKyJFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4iCittc2dzdHIgIiIKKyLOnc6xIM68zrfOvSDPhM+Bzr/PgM6/z4DOv865zq7Pg861z4TOtSDOriDOsc+GzrHOuc+Bzq3Pg861z4TOtSDPhM63zr0gz4DOsc+BzrHPgM6szr3PiSDOs8+BzrHOvM68zq4uXG4iCisizp/PhM65zrTOrs+Azr/PhM61IM66zqzPhM+JIM6xz4DPjCDOsc+Fz4TOrs69IM64zrEgzrHOs869zr/Ot864zrXOry4iCisKKyM6IHd0LXN0YXR1cy5jOjExMDEKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgIs6Iz4fOtc+EzrUgzrzOtyDPg8+FzrPPh8+Jzr3Otc+FzrzOrc69zrXPgiDOtM65zrHOtM+Bzr/OvM6tz4IuIgorCisjOiB3dC1zdGF0dXMuYzoxMTA0Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNvbW1pdFwiKSIKK21zZ3N0ciAiICAozrTOuc6/z4HOuM+Oz4PPhM61IM+EzrnPgiDPg8+FzrPOus+Bzr/Pjc+DzrXOuc+CIM66zrHOuSDPhM+Bzq3Ovs+EzrUgXCJnaXQgY29tbWl0XCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTA2Cittc2dpZCAiICAodXNlIFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiB0byBhYm9ydCB0aGUgbWVyZ2UpIgorbXNnc3RyICIiCisiICAoz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSBcImdpdCBtZXJnZSAtLWFib3J0XCIgzrPOuc6xIM69zrEgzrXOs866zrHPhM6xzrvOtc6vz4jOtc+EzrUgz4TOtyDPg8+FzrPPh8+Ozr3Otc+Fz4POtykiCisKKyM6IHd0LXN0YXR1cy5jOjExMTAKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgorbXNnc3RyICLOlc+AzrnOu8+NzrjOt866zrHOvSDPjM67zrXPgiDOv865IM+Dz4XOs866z4HOv8+Nz4POtc65z4IgzrHOu867zqwgzrHOus+MzrzOsSDOus6szr3Otc+EzrUgz4PPhc6zz4fPjs69zrXPhc+DzrcuIgorCisjOiB3dC1zdGF0dXMuYzoxMTEzCittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdFwiIHRvIGNvbmNsdWRlIG1lcmdlKSIKK21zZ3N0ciAiICAoz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSBcImdpdCBjb21taXRcIiDOs865zrEgzr3OsSDOv867zr/Ous67zrfPgc+Oz4POtc+EzrUgz4TOtyDPg8+FzrPPh8+Ozr3Otc+Fz4POtykiCisKKyM6IHd0LXN0YXR1cy5jOjExMjIKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4iCittc2dzdHIgIs6Sz4HOr8+DzrrOtc+Dz4TOtSDPg8+EzrcgzrzOrc+DzrcgzrzOuc6xz4IgzrTOuc61z4HOs86xz4POr86xz4IgYW0uIgorCisjOiB3dC1zdGF0dXMuYzoxMTI1Cittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICLOlyDPgM6xz4HOv8+Nz4POsSDOtM65z4zPgc64z4nPg863IM61zq/Ovc6xzrkgzrrOtc69zq4uIgorCisjOiB3dC1zdGF0dXMuYzoxMTI5Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAozrTOuc6/z4HOuM+Oz4PPhM61IM+EzrnPgiDPg8+FzrPOus+Bzr/Pjc+DzrXOuc+CIM66zrHOuSDPhM+Bzq3Ovs+EzrUgXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTEzMQorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIiCisiICAoz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSBcImdpdCBhbSAtLXNraXBcIiDOs865zrEgzr3OsSDPgM+Bzr/Pg8+AzrXPgc6sz4POtc+EzrUgzrHPhc+Ezq4gz4TOtyDOtM65z4zPgc64z4nPg863KSIKKworIzogd3Qtc3RhdHVzLmM6MTEzMworbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgXCJnaXQgYW0gLS1hYm9ydFwiIM6zzrnOsSDOvc6xIM6xz4DOv866zrHPhM6xz4PPhM6uz4POtc+EzrUgz4TOv869IM6xz4HPh865zrrPjCDOus67zqzOtM6/KSIKKworIzogd3Qtc3RhdHVzLmM6MTI2NAorbXNnaWQgImdpdC1yZWJhc2UtdG9kbyBpcyBtaXNzaW5nLiIKK21zZ3N0ciAizpvOtc6vz4DOtc65IM+Ezr8gZ2l0LXJlYmFzZS10b2RvLiIKKworIzogd3Qtc3RhdHVzLmM6MTI2NgorbXNnaWQgIk5vIGNvbW1hbmRzIGRvbmUuIgorbXNnc3RyICLOlM61zr0gzr/Ou86/zrrOu863z4HPjs64zrfOus61IM66zrHOvM6vzrEgzrXOvc+Ezr/Ou86uLiIKKworIzogd3Qtc3RhdHVzLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJMYXN0IGNvbW1hbmQgZG9uZSAoJWQgY29tbWFuZCBkb25lKToiCittc2dpZF9wbHVyYWwgIkxhc3QgY29tbWFuZHMgZG9uZSAoJWQgY29tbWFuZHMgZG9uZSk6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogd3Qtc3RhdHVzLmM6MTI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiICAozrTOtc6vz4TOtSDPgM61z4HOuc+Dz4PPjM+EzrXPgc6xIM+Dz4TOvyDOsc+Bz4fOtc6vzr8gJXMpIgorCisjOiB3dC1zdGF0dXMuYzoxMjg1Cittc2dpZCAiTm8gY29tbWFuZHMgcmVtYWluaW5nLiIKK21zZ3N0ciAizpTOtc69IM6xz4DOv868zq3Ovc61zrkgzrrOsc68zq/OsSDOtc69z4TOv867zq4uIgorCisjOiB3dC1zdGF0dXMuYzoxMjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5leHQgY29tbWFuZCB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmQpOiIKK21zZ2lkX3BsdXJhbCAiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiCittc2dzdHJbMF0gIs6Vz4DPjM68zrXOvc63IM61zr3PhM6/zrvOriDPgM+Bzr/PgiDOtc66z4TOrc67zrXPg863ICglZCDOtc69z4TOv867zq4gzrHPgM6/zrzOrc69zrXOuSk6IgorbXNnc3RyWzFdICLOlc+Az4zOvM61zr3Otc+CIM61zr3PhM6/zrvOrc+CIM+Az4HOv8+CIM61zrrPhM6tzrvOtc+DzrcgKCVkIM61zr3PhM6/zrvOrc+CIM6xz4DOv868zq3Ovc6/z4XOvSk6IgorCisjOiB3dC1zdGF0dXMuYzoxMjk2Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIiCisiICAoz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiDOs865zrEgz4DPgc6/zrLOv867zq4gzrrOsc65IM61z4DOtc6+zrXPgc6zzrHPg86vzrEpIgorCisjOiB3dC1zdGF0dXMuYzoxMzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICLOkc+Fz4TOriDPhM63IM+Dz4TOuc6zzrzOriDOus6szr3Otc+EzrUgcmViYXNlIM+Ezr/OvSDOus67zqzOtM6/ICclcycgz4PPhM6/ICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxMzEzCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICLOkc+Fz4TOriDPhM63IM+Dz4TOuc6zzrzOriDOus6szr3Otc+EzrUgcmViYXNlLiIKKworIzogd3Qtc3RhdHVzLmM6MTMyNgorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjOtM65zr/Pgc64z47Pg8+EzrUgz4TOuc+CIM+Dz4XOs866z4HOv8+Nz4POtc65z4IgzrrOsc65IM+Ez4HOrc6+z4TOtSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTMyOAorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiIgorIiAgKM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgXCJnaXQgcmViYXNlIC0tc2tpcFwiIM6zzrnOsSDOvc6xIM+Az4HOv8+Dz4DOtc+BzqzPg861z4TOtSDOsc+Fz4TOriDPhM63IM60zrnPjM+BzrjPic+DzrcpIgorCisjOiB3dC1zdGF0dXMuYzoxMzMwCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIiCisiICAoz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIM6zzrnOsSDOvc6xIM61zr7Osc6zzqzOs861z4TOtSDPhM6/zr0gzrHPgc+HzrnOus+MIM66zrvOrM60zr8pIgorCisjOiB3dC1zdGF0dXMuYzoxMzM3Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjOtc+AzrnOu8+NzrjOt866zrHOvSDPjM67zrXPgiDOv865IM+Dz4XOs866z4HOv8+Nz4POtc65z4I6IM+Ez4HOrc6+z4TOtSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTM0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisizpHPhc+Ezq4gz4TOtyDPg8+EzrnOs868zq4gz4TOtc68zrHPh86vzrbOtc+EzrUgzrzOuc6xIM+Fz4DOv86yzr/Ou86uIM66zrHPhM6sIM+EzrcgzrTOuc6sz4HOus61zrnOsSByZWJhc2Ugz4TOv8+FIM66zrvOrM60zr/PhSAiCisiJyVzJyDPg8+Ezr8gJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNDYKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAizpHPhc+Ezq4gz4TOtyDPg8+EzrnOs868zq4gz4TOtc68zrHPh86vzrbOtc+EzrUgzrzOuc6xIM+Fz4DOv86yzr/Ou86uIM66zrHPhM6sIM+EzrcgzrTOuc6sz4HOus61zrnOsSDOtc69z4zPgiByZWJhc2UuIgorCisjOiB3dC1zdGF0dXMuYzoxMzQ5Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgICjOjM+EzrHOvSDOvyDPhs6szrrOtc67zr/PgiDOtc+BzrPOsc+Dzq/Osc+CIM+DzrHPgiDOuM6xIM61zq/Ovc6xzrkgzrrOsc64zrHPgc+Mz4IsIM+Ez4HOrc6+z4TOtSBcImdpdCByZWJhc2UgLS0iCisiY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIs6Rz4XPhM6uIM+Ezrcgz4PPhM65zrPOvM6uIM60zrnOv8+BzrjPjs69zrXPhM61IM68zrnOsSDPhc+Azr/Oss6/zrvOriDOus6xz4TOrCDPhM63IM60zrnOrM+BzrrOtc65zrEgcmViYXNlIM+Ezr/PhSDOus67zqzOtM6/z4UgIgorIiclcycgz4PPhM6/ICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxMzU4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICLOkc+Fz4TOriDPhM63IM+Dz4TOuc6zzrzOriDOtM65zr/Pgc64z47Ovc61z4TOtSDOvM65zrEgz4XPgM6/zrLOv867zq4gzrrOsc+Ezqwgz4TOtyDOtM65zqzPgc66zrXOuc6xIM61zr3PjM+CIHJlYmFzZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNjEKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIgorbXNnc3RyICIiCisiICAoz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSBcImdpdCBjb21taXQgLS1hbWVuZFwiIM6zzrnOsSDOvc6xIM+Ez4HOv8+Azr/PgM6/zrnOrs+DzrXPhM61IM+EzrfOvSDPhM+Bzq3Ph86/z4XPg86xICIKKyLPhc+Azr/Oss6/zrvOrikiCisKKyM6IHd0LXN0YXR1cy5jOjEzNjMKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCittc2dzdHIgIiIKKyIgICjPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgz4zPhM6xzr0gzr/OuSDOsc67zrvOsc6zzq3PgiDPg86xz4Igz4POsc+CICIKKyLOuc66zrHOvc6/z4DOv865zr/Pjc69KSIKKworIzogd3Qtc3RhdHVzLmM6MTM3MgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJXMuIgorbXNnc3RyICLOkc+Fz4TOriDPhM63IM+Dz4TOuc6zzrzOriDOus6szr3Otc+EzrUgzrXPgM65zrvOtc66z4TOuc66zq4gzrTOuc6xzrvOv86zzq4gz4TOt8+CIM+Fz4DOv86yzr/Ou86uz4IgJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxMzc3Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgICjOtM65zr/Pgc64z47Pg8+EzrUgz4TOuc+CIM+Dz4XOs866z4HOv8+Nz4POtc65z4IgzrrOsc65IM+Ez4HOrc6+z4TOtSBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzgwCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgICjOtc+AzrnOu8+NzrjOt866zrHOvSDPjM67zrXPgiDOv865IM+Dz4XOs866z4HOv8+Nz4POtc65z4I6IM+Ez4HOrc6+z4TOtSBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzgyCittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyIgICjPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiDOs865zrEgzr3OsSDOsc66z4XPgc+Oz4POtc+EzrUgz4TOt869IM61zr3Orc+BzrPOtc65zrEgIgorIs61z4DOuc67zrXOus+EzrnOus6uz4IgzrTOuc6xzrvOv86zzq7PgikiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIs6Rz4XPhM6uIM+Ezrcgz4PPhM65zrPOvM6uIM6xzr3Osc65z4HOtc6vz4TOtSDPhM63zr0gz4XPgM6/zrLOv867zq4gJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxMzk1Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjOtc+AzrnOu8+Nz4PPhM61IM+EzrnPgiDPg8+FzrPOus+Bzr/Pjc+DzrXOuc+CIM66zrHOuSDPhM+Bzq3Ovs+EzrUgXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTgKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKM61z4DOuc67z43OuM63zrrOsc69IM+MzrvOtc+CIM6/zrkgz4PPhc6zzrrPgc6/z43Pg861zrnPgjogz4TPgc6tzr7PhM61IFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDAwCittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorIiAgKM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiDOs865zrEgzr3OsSDOtc6zzrrOsc+EzrHOu861zq/PiM61z4TOtSDPhM63IM60zrnOtc+BzrPOsc+Dzq/OsSAiCisicmV2ZXJ0KSIKKworIzogd3Qtc3RhdHVzLmM6MTQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJyVzJy4iCittc2dzdHIgIs6Rz4XPhM6uIM+Ezrcgz4PPhM65zrPOvM6uIM60zrnPh86/z4TOv868zrXOr8+EzrUsIM6tzrPOuc69zrUgzrHPgc+Hzq4gzrHPgM+MIM+Ezr/OvSDOus67zqzOtM6/ICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxNDE0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLiIKK21zZ3N0ciAizpHPhc+Ezq4gz4TOtyDPg8+EzrnOs868zq4gzrTOuc+Hzr/PhM6/zrzOtc6vz4TOtS4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MTcKK21zZ2lkICIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiIKKyIgICjPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IFwiZ2l0IGJpc2VjdCByZXNldFwiIM6zzrnOsSDOvc6xIM61z4DOuc+Dz4TPgc6tz4jOtc+EzrUgz4PPhM6/zr0gzrHPgc+HzrnOus+MIM66zrvOrM60zr8pIgorCisjOiB3dC1zdGF0dXMuYzoxNjE3Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAizqPPhM6/zr0gzrrOu86szrTOvyAiCisKKyM6IHd0LXN0YXR1cy5jOjE2MjQKK21zZ2lkICJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICLOtc66z4TOtc67zrXOr8+EzrHOuSDOtM65zrHOtM+BzrHPg8+EzrnOus+MIHJlYmFzZSwgz4DOrM69z4kgz4PPhM6/ICIKKworIzogd3Qtc3RhdHVzLmM6MTYyNgorbXNnaWQgInJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgIs61zrrPhM61zrvOtc6vz4TOsc65IHJlYmFzZSwgz4DOrM69z4kgz4PPhM6/ICIKKworIzogd3Qtc3RhdHVzLmM6MTYzMQorbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICLOkc+Azr/Pg8+Fzr3OtM61zrTOtc68zq3Ovc6/IEhFQUQgz4PPhM6/ICIKKworIzogd3Qtc3RhdHVzLmM6MTYzMworbXNnaWQgIkhFQUQgZGV0YWNoZWQgZnJvbSAiCittc2dzdHIgIs6Rz4DOv8+Dz4XOvc60zrXOtM61zrzOrc69zr8gSEVBRCDOsc+Az4wgz4TOvyAiCisKKyM6IHd0LXN0YXR1cy5jOjE2MzYKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICLOlM61zr0gzrXOr8+Dz4TOtSDOsc+Fz4TOriDPhM63IM+Dz4TOuc6zzrzOriDPg861IM66zrHOvc6tzr3Osc69IM66zrvOrM60zr8uIgorCisjOiB3dC1zdGF0dXMuYzoxNjUzCittc2dpZCAiSW5pdGlhbCBjb21taXQiCittc2dzdHIgIs6Rz4HPh865zrrOriDPhc+Azr/Oss6/zrvOriIKKworIzogd3Qtc3RhdHVzLmM6MTY1NAorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IgorbXNnc3RyICLOlM61zr0gz4XPgM6sz4HPh86/z4XOvSDOsc66z4zOvM6xIM+Fz4DOv86yzr/Ou86tz4IiCisKKyM6IHd0LXN0YXR1cy5jOjE2NjgKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIs6czrcgz4DOsc+BzrHOus6/zrvOv8+FzrjOv8+NzrzOtc69zrEgzrHPgc+HzrXOr86xIgorCisjOiB3dC1zdGF0dXMuYzoxNjcwCittc2dpZCAiSWdub3JlZCBmaWxlcyIKK21zZ3N0ciAizpHPgc+HzrXOr86xIM+Azr/PhSDPgM6xz4HOsc6yzrvOrc+Azr/Ovc+EzrHOuSIKKworIzogd3Qtc3RhdHVzLmM6MTY3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisizpcgzrHPgM6xz4HOr864zrzOt8+Dzrcgz4TPic69IM68zrcgz4DOsc+BzrHOus6/zrvOv8+FzrjOv8+NzrzOtc69z4nOvSDOsc+Bz4fOtc6vz4nOvSDPgM6uz4HOtSAlLjJmIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsS4gzqTOvyAiCisiJ3N0YXR1cyAtdW5vJ1xuIgorIs68z4DOv8+BzrXOryDOvc6xIM+EzrfOvSDOtc+AzrnPhM6xz4fPjc69zrXOuSwgzrHOu867zqwgz4DPgc6tz4DOtc65IM69zrEgz4DPgc6/z4POrc6+zrXPhM61IM69zrEgzrzOt869IM6+zrXPh86sz4POtc+EzrUgzr3OsSAiCisiz4DPgc6/z4POuM6tz4POtc+EzrVcbiIKKyLOtc+DzrXOr8+CIM+EzrEgzr3Orc6xIM6xz4HPh861zq/OsSAozrTOtc6vz4TOtSDPhM6/ICdnaXQgaGVscCBzdGF0dXMnKS4iCisKKyM6IHd0LXN0YXR1cy5jOjE2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAizpzOtyDPgM6xz4HOsc66zr/Ou86/z4XOuM6/z43OvM61zr3OsSDOsc+Bz4fOtc6vzrEgz4DOv8+FIM60zrXOvSDOrc6zzrnOvc61IM+AzrHPgc6szrjOtc+Dzq4gz4TOv8+Fz4IlcyIKKworIzogd3Qtc3RhdHVzLmM6MTY4MgorbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiIKKyIgKM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgz4TOt869IM61z4DOuc67zr/Os86uIC11IM6zzrnOsSDOvc6xIM6zzq/Ovc61zrkgz4DPgc6/zrLOv867zq4gz4TPic69IM68zrcgIgorIs+AzrHPgc6xzrrOv867zr/Phc64zr/Pjc68zrXOvc+Jzr0gzrHPgc+HzrXOr8+Jzr0pIgorCisjOiB3dC1zdGF0dXMuYzoxNjg4Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAizpTOtc69IM+Fz4DOrM+Bz4fOv8+Fzr0gzrHOu867zrHOs86tz4IiCisKKyM6IHd0LXN0YXR1cy5jOjE2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIiIKKyLOtM61zr0gz4DPgc6/z4PPhM6tzrjOt866zrHOvSDOsc67zrvOsc6zzq3PgiDPg8+EzrfOvSDPhc+Azr/Oss6/zrvOriAoz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSBcImdpdCBhZGRcIiDOus6xzrkvzq4gXCJnaXQgIgorImNvbW1pdCAtYVwiKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgIs60zrXOvSDPgM+Bzr/Pg8+Ezq3OuM63zrrOsc69IM6xzrvOu86xzrPOrc+CIM+Dz4TOt869IM+Fz4DOv86yzr/Ou86uXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE2OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvICIKKyJ0cmFjaylcbiIKK21zZ3N0ciAiIgorIs60zrXOvSDPgM+Bzr/Pg8+Ezq3OuM63zrrOtSDPhM6vz4DOv8+EzrEgz4PPhM63zr0gz4XPgM6/zrLOv867zq4gzrHOu867zqwgz4XPgM6sz4HPh86/z4XOvSDOvM63IM+AzrHPgc6xzrrOv867zr/Phc64zr/Pjc68zrXOvc6xIM6xz4HPh861zq/OsSAiCisiKM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgXCJnaXQgYWRkXCIgzrPOuc6xIM69zrEgz4DOsc+BzrHOus6/zrvOv8+FzrjOrs+DzrXPhM61KVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICIiCisizrTOtc69IM+Az4HOv8+Dz4TOrc64zrfOus61IM+Ezq/PgM6/z4TOsSDPg8+EzrfOvSDPhc+Azr/Oss6/zrvOriDOsc67zrvOrCDPhc+AzqzPgc+Hzr/Phc69IM68zrcgz4DOsc+BzrHOus6/zrvOv8+FzrjOv8+NzrzOtc69zrEgzrHPgc+HzrXOr86xXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iCittc2dzdHIgIiIKKyLOtM61zr0gz4XPgM6sz4HPh861zrkgz4TOr8+Azr/PhM6xIM+Az4HOv8+CIM+Fz4DOv86yzr/Ou86uICjOtM63zrzOuc6/z4XPgc6zzq7Pg8+EzrUvzrHOvc+EzrnOs8+BzqzPiM+EzrUgzrHPgc+HzrXOr86xIM66zrHOuSAiCisiz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSBcImdpdCBhZGRcIiDOs865zrEgzr3OsSDPgM6xz4HOsc66zr/Ou86/z4XOuM6uz4POtc+EzrUpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3MDggd3Qtc3RhdHVzLmM6MTcxMworIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICLOtM61zr0gz4XPgM6sz4HPh861zrkgz4TOr8+Azr/PhM6xIM+Az4HOv8+CIM+Fz4DOv86yzr/Ou86uXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAiIgorIs60zrXOvSDPhc+AzqzPgc+HzrXOuSDPhM6vz4DOv8+EzrEgz4DPgc6/z4Igz4XPgM6/zrLOv867zq4gKM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgLXUgzrPOuc6xIM+Az4HOv86yzr/Ou86uIM+Ez4nOvSAiCisizrzOt8+AzrHPgc6xzrrOv867zr/Phc64zr/Pjc68zrXOvc+Jzr0gzrHPgc+HzrXOr8+Jzr0pXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhblxuIgorbXNnc3RyICLOtM61zr0gz4XPgM6sz4HPh861zrkgz4TOr8+Azr/PhM6xIM+Az4HOv8+CIM+Fz4DOv86yzr/Ou86uLCDPhM6/IM60zq3Ovc+Ez4HOvyDOtc+BzrPOsc+Dzq/Osc+CIM61zq/Ovc6xzrkgzrrOsc64zrHPgc+MXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE4MjgKK21zZ2lkICJObyBjb21taXRzIHlldCBvbiAiCittc2dzdHIgIs6UzrXOvSDPhc+AzqzPgc+Hzr/Phc69IM6xzrrPjM68zrEgz4XPgM6/zrLOv867zq3PgiDPg8+Ezr8gIgorCisjOiB3dC1zdGF0dXMuYzoxODMyCittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRCAoz4fPic+Bzq/PgiDOus67zqzOtM6/KSIKKworIzogd3Qtc3RhdHVzLmM6MTg2MworbXNnaWQgImRpZmZlcmVudCIKK21zZ3N0ciAizrTOuc6xz4bOv8+BzrXPhM65zrrPjCIKKworIzogd3Qtc3RhdHVzLmM6MTg2NSB3dC1zdGF0dXMuYzoxODczCittc2dpZCAiYmVoaW5kICIKK21zZ3N0ciAiz4DOr8+Dz4kgIgorCisjOiB3dC1zdGF0dXMuYzoxODY4IHd0LXN0YXR1cy5jOjE4NzEKK21zZ2lkICJhaGVhZCAiCittc2dzdHIgIs68z4DPgc6/z4PPhM6sICIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBhY3Rpb24gaXMgZS5nLiAicHVsbCB3aXRoIHJlYmFzZSIKKyM6IHd0LXN0YXR1cy5jOjIzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAizrTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM+MIM69zrEgzrPOr869zrXOuSAlczogzojPh861z4TOtSDOvM63IM+Az4HOv861z4TOv865zrzOsc+DzrzOrc69zrXPgiDOsc67zrvOsc6zzq3Pgi4iCisKKyM6IHd0LXN0YXR1cy5jOjIzOTIKK21zZ2lkICJhZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIs61z4DOuc+Az4HPjM+DzrjOtc+EzrEsIM+Ezr8gzrXPhc+BzrXPhM6uz4HOuc+MIM+DzrHPgiDPgM61z4HOuc6tz4fOtc65IM68zrcgz4XPgM6/zrLOtc6yzrvOt868zq3Ovc61z4IgzrHOu867zrHOs86tz4IuIgorCisjOiB3dC1zdGF0dXMuYzoyMzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIs60zrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TPjCDOvc6xIM6zzq/Ovc61zrkgJXM6IM6kzr8gzrXPhc+BzrXPhM6uz4HOuc+MIM+DzrHPgiDPgM61z4HOuc6tz4fOtc65IM68zrcgz4XPgM6/zrLOtc6yzrvOt868zq3Ovc61z4IgIgorIs6xzrvOu86xzrPOrc+CLiIKKworIzogYnVpbHRpbi9hZGQuYzoyNQorbXNnaWQgImdpdCBhZGQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgYWRkIFs8zrXPgM65zrvOv86zzq3Pgj5dIFstLV0gPM+AzrXPgc65zrPPgc6xz4bOriDOtM65zrHOtM+Bzr/OvM6uz4I+Li4uIgorCisjOiBidWlsdGluL2FkZC5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo4OSBidWlsdGluL2NvbW1pdC5jOjI4NQorbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoxNzQKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjIzNCBidWlsdGluL3Jldi1wYXJzZS5jOjg5NgorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAizpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDPhM6/IM6szr3Ov865zrPOvM6xIM+Ezr/PhSAnJXMnIM6zzrnOsSDOtc6zzrPPgc6xz4bOri4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjQ5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjUyCittc2dpZCAiZWRpdGluZyBwYXRjaCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI1NworbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI3MAorbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI5MCBidWlsdGluL2NsZWFuLmM6OTA4IGJ1aWx0aW4vZmV0Y2guYzoxMzcgYnVpbHRpbi9tdi5jOjEyNAorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NiBidWlsdGluL3B1bGwuYzoyMTQgYnVpbHRpbi9wdXNoLmM6NTYwCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNDUgYnVpbHRpbi9ybS5jOjI0MSBidWlsdGluL3NlbmQtcGFjay5jOjE2NQorbXNnaWQgImRyeSBydW4iCittc2dzdHIgIs60zr/Ous65zrzOriIKKworIzogYnVpbHRpbi9hZGQuYzoyOTMKK21zZ2lkICJpbnRlcmFjdGl2ZSBwaWNraW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk0IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzA0IGJ1aWx0aW4vcmVzZXQuYzozMDYKK21zZ2lkICJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIKK21zZ3N0ciAizr3OsSDOs86vzr3Otc65IM60zrnOsc60z4HOsc+Dz4TOuc66zq4gzrXPgM65zrvOv86zzq4gzrHOu867zrHOs8+Ozr0iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk1Cittc2dpZCAiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk2Cittc2dpZCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk3Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyOTgKK21zZ2lkICJyZW5vcm1hbGl6ZSBFT0wgb2YgdHJhY2tlZCBmaWxlcyAoaW1wbGllcyAtdSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyOTkKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMDAKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMDMKK21zZ2lkICJpZ25vcmUgcGF0aHMgcmVtb3ZlZCBpbiB0aGUgd29ya2luZyB0cmVlIChzYW1lIGFzIC0tbm8tYWxsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMwNQorbXNnaWQgImRvbid0IGFkZCwgb25seSByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMwNgorbXNnaWQgImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMDcKK21zZ2lkICJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMDkgYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTEKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMxMQorbXNnaWQgIndhcm4gd2hlbiBhZGRpbmcgYW4gZW1iZWRkZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91J3ZlIGFkZGVkIGFub3RoZXIgZ2l0IHJlcG9zaXRvcnkgaW5zaWRlIHlvdXIgY3VycmVudCByZXBvc2l0b3J5LlxuIgorIkNsb25lcyBvZiB0aGUgb3V0ZXIgcmVwb3NpdG9yeSB3aWxsIG5vdCBjb250YWluIHRoZSBjb250ZW50cyBvZlxuIgorInRoZSBlbWJlZGRlZCByZXBvc2l0b3J5IGFuZCB3aWxsIG5vdCBrbm93IGhvdyB0byBvYnRhaW4gaXQuXG4iCisiSWYgeW91IG1lYW50IHRvIGFkZCBhIHN1Ym1vZHVsZSwgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyJJZiB5b3UgYWRkZWQgdGhpcyBwYXRoIGJ5IG1pc3Rha2UsIHlvdSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhlXG4iCisiaW5kZXggd2l0aDpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIlNlZSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIs6gz4HOv8+DzrjOrc+DzrHPhM61IM6tzr3OsSDOrM67zrvOvyDOsc+Azr/OuM61z4TOrs+BzrnOvyBnaXQgzrzOrc+DzrEgz4PPhM6/IM+Ez4HOrc+Hzr/OvSDOsc+Azr/OuM61z4TOrs+BzrnOvy5cbiIKKyLOn865IM66zrvPjs69zr/OuSDPhM6/z4UgzrXOvs+Oz4TOtc+Bzr/PhSDOsc+Azr/OuM61z4TOt8+Bzq/Ov8+FIM60zrUgzrjOsSDPgM61z4HOuc6tz4fOv8+Fzr0gz4TOsSDPgM61z4HOuc61z4fPjM68zrXOvc6xIM+Ezr/PhVxuIgorIs61zr3Pg8+JzrzOsc+Ez4nOvM6tzr3Ov8+FIM6xz4DOv864zrXPhM63z4HOr86/z4UgzrrOsc65IM60zrXOvSDOuM6xIM6zzr3Pic+Bzq/Ots6/z4XOvSDPgM+Oz4Igzr3OsSDPhM6/IM6yz4HOv8+Fzr0uXG4iCisizpHOvSDOuM6tzrvOsc+EzrUgzr3OsSDPgM+Bzr/Pg864zq3Pg861z4TOtSDOvM65zrEgz4XPgM6/zrXOvc+Mz4TOt8+EzrEgc3VibW9kdWxlLCDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61OlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyLOkc69IM+Az4HOv8+DzrjOrc+DzrHPhM61IM6xz4XPhM6uIM+EzrcgzrTOuc6xzrTPgc6/zrzOriDOus6xz4TOrCDOu86szrjOv8+CLCDOvM+Azr/Pgc61zq/PhM61IM69zrEgz4TOt869IM6xz4bOsc65z4HOrc+DzrXPhM61IM6xz4DPjCAiCisiz4TOv1xuIgorIs61z4XPgc61z4TOrs+BzrnOvyDOvM61OlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisizpTOtc6vz4TOtSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIM6zzrnOsSDPgM61z4HOuc+Dz4PPjM+EzrXPgc61z4Igz4DOu863z4HOv8+Gzr/Pgc6vzrXPgi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZyBlbWJlZGRlZCBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM4MAorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MTgKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQyNQorbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1jaG1vZCBwYXJhbSAnJXMnIG11c3QgYmUgZWl0aGVyIC14IG9yICt4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzozNDgKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjUxMAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6NTM2Cittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzo3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhdGNoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjc4OQorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzo4MzcKK21zZ2lkICJpbnZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6ODQyIGJ1aWx0aW4vYW0uYzo4NTQKK21zZ2lkICJpbnZhbGlkIERhdGUgbGluZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6ODQ5Cittc2dpZCAiaW52YWxpZCB0aW1lem9uZSBvZmZzZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjk0MgorbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6OTQ3IGJ1aWx0aW4vY2xvbmUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAizrHPgM6tz4TPhc+HzrUgzrcgzrTOt868zrnOv8+Fz4HOs86vzrEgz4TOv8+FIM+GzrHOus6tzrvOv8+FICclcyciCisKKyM6IGJ1aWx0aW4vYW0uYzo5NTIKK21zZ2lkICJGYWlsZWQgdG8gc3BsaXQgcGF0Y2hlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjEwODIgYnVpbHRpbi9jb21taXQuYzozNzEKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTA5NgorIywgYy1mb3JtYXQKK21zZ2lkICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJXMgLS1jb250aW51ZVwiLiIKK21zZ3N0ciAizozPhM6xzr0gzq3Ph861z4TOtSDOtc+AzrnOu8+Nz4POtc65IM6xz4XPhM+MIM+Ezr8gz4DPgc+MzrLOu863zrzOsSwgz4TPgc6tzr7PhM61IFwiJXMgLS1jb250aW51ZVwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJXMgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTE4MQorbXNnaWQgIlBhdGNoIHNlbnQgd2l0aCBmb3JtYXQ9Zmxvd2VkOyBzcGFjZSBhdCB0aGUgZW5kIG9mIGxpbmVzIG1pZ2h0IGJlIGxvc3QuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjA5Cittc2dpZCAiUGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTI5NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDkzCittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorIs6bzrXOr8+Azr/Phc69IM+EzrEgzrHOvc6xzrPOus6xzq/OsSBibG9iIM6xz4DPjCDPhM6/IM6xz4DOv864zrXPhM6uz4HOuc6/IM6zzrnOsSDOvc6xIM6xzrrOv867zr/Phc64zrfOuM61zq8gzrcgzrXOvc6xzrvOu86xzrrPhM65zrrOriAiCisiz4TPgc65z4DOu86uz4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDk1Cittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTUxNAorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgIiIKKyLOlc+AzrXOvs61z4HOs86xz4PPhM6uzrrOsc+EzrUgzrzOtSDPhM6/IM+Hzq3Pgc65IM+EzrcgzrTOuc+Mz4HOuM+Jz4POriDPg86xz4I7XG4iCisizpTOtc69IM61z4bOsc+BzrzPjM62zrXPhM6xzrkgz4PPhM6xIGJsb2Igz4DOv8+FIM61zq/Ovc6xzrkgzrrOsc+EzrHOs861zrPPgc6xzrzOvM6tzr3OsSDPg8+Ezr8gzrXPhc+BzrXPhM6uz4HOuc+MIM+Ezr/PhS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTIwCittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTQ2Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTU3OAorbXNnaWQgImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE2MjQgYnVpbHRpbi9hbS5jOjE2MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3VtZTogJXMgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjQ0Cittc2dpZCAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjQ5Cittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICLOpM6/IM+AzrXPgc65zrXPh8+MzrzOtc69zr8gz4TOt8+CIM+Fz4DOv86yzr/Ou86uz4IgzrXOr869zrHOuToiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNjU5Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIKK21zZ3N0ciAizp3OsSDOs86vzr3Otc65IM61z4bOsc+BzrzOv86zzq47IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIKKworIzogYnVpbHRpbi9hbS5jOjE3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzQ5IGJ1aWx0aW4vYW0uYzoxODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzY2Cittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICLOms6xzrjPjM67zr/PhSDOsc67zrvOsc6zzq3PgiAtLSDOiM+HzrXOuSDOs86vzr3Otc65IM6uzrTOtyDOtc+GzrHPgc68zr/Os86uIM+EzrfPgiDOtM65z4zPgc64z4nPg863z4IuIgorCisjOiBidWlsdGluL2FtLmM6MTc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTc3NgorbXNnaWQgIlVzZSAnZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAiIgorIs6nz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaCcgzrPOuc6xIM69zrEgzrTOtc6vz4TOtSDPhM63IM60zrnPjM+BzrjPic+Dzrcgz4DOv8+FICIKKyLOsc+Azq3PhM+Fz4fOtSIKKworIzogYnVpbHRpbi9hbS5jOjE4MjAKK21zZ2lkICIiCisiTm8gY2hhbmdlcyAtIGRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/XG4iCisiSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlXG4iCisiYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZXM7IHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyBwYXRjaC4iCittc2dzdHIgIiIKKyLOms6xzrjPjM67zr/PhSDOsc67zrvOsc6zzq3PgiAtIM6+zrXPh86sz4POsc+EzrUgzr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4POtc+EzrUgz4TOvyAnZ2l0IGFkZCc7XG4iCisizpHOvSDOtM61zr0gzq3Ph861zrkgzrHPgM6/zrzOtc6vzr3Otc65IM+Ezq/PgM6/z4TOsSDOs865zrEgz4DPgc6/zrXPhM6/zrnOvM6xz4POr86xLCDOvM6szrvOu86/zr0gzrrOrM+EzrkgzqzOu867zr8gzq3Ph861zrlcbiIKKyLOrs60zrcgzrXOuc+DzrHOs86szrPOtc65IM+EzrnPgiDOr860zrnOtc+CIM6xzrvOu86xzrPOrc+CLCDOvM+Azr/Pgc61zq8gzr3OsSDOuM6tzrvOtc+EzrUgzr3OsSDPgM+Bzr/Pg8+AzrXPgc6sz4POtc+EzrUgzrHPhc+Ezq4gz4TOtyAiCisizrTOuc+Mz4HOuM+Jz4POty4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODI3Cittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisiWW91IHNob3VsZCAnZ2l0IGFkZCcgZWFjaCBmaWxlIHdpdGggcmVzb2x2ZWQgY29uZmxpY3RzIHRvIG1hcmsgdGhlbSBhcyAiCisic3VjaC5cbiIKKyJZb3UgbWlnaHQgcnVuIGBnaXQgcm1gIG9uIGEgZmlsZSB0byBhY2NlcHQgXCJkZWxldGVkIGJ5IHRoZW1cIiBmb3IgaXQuIgorbXNnc3RyICIiCisizojPh861z4TOtSDOsc66z4zOvM6xIM68zrcgz4PPhc6zz4fPic69zrXPhc68zq3Ovc61z4IgzrTOuc6xzrTPgc6/zrzOrc+CIM+Dz4TOvyDOtc+Fz4HOtc+Ezq7Pgc65z4wgz4POsc+CLlxuIgorIs6YzrEgz4DPgc6tz4DOtc65IM69zrEgz4DPgc6/z4POuM6tz4POtc+EzrUgzrzOtSAnZ2l0IGFkZCcgzrrOrM64zrUgzrHPgc+HzrXOr86/IM+Azr/PhSDOrc+HzrXOuSDOtc+AzrnOu8+FzrzOrc69zrXPgiAiCisiz4PPhc6zzrrPgc6/z43Pg861zrnPgiDOs865zrEgzr3OsSDPhM6/IM61z4DOuc+DzrfOvM6szr3Otc+EzrUuXG4iCisizpzPgM6/z4HOtc6vz4TOtSDOvc6xIM+Ez4HOrc6+zrXPhM61IGBnaXQgcm1gIM+DzrUgzq3Ovc6xIM6xz4HPh861zq/OvyDOs865zrEgzr3OsSDOsc+Azr/OtM61z4fOuM61zq/PhM61IM6zzrnOsSDOsc+Fz4TPjCDPgM+Jz4IgIgorIlwizrTOuc6xzrPPgc6sz4bOt866zrUgzrHPgM+MIM6xz4XPhM6/z43PglwiLiIKKworIzogYnVpbHRpbi9hbS5jOjE5MzQgYnVpbHRpbi9hbS5jOjE5MzggYnVpbHRpbi9hbS5jOjE5NTAgYnVpbHRpbi9yZXNldC5jOjMyOQorIzogYnVpbHRpbi9yZXNldC5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICLOlM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM6xzr3OrM67z4XPg863IM+Ezr/PhSDOsc69z4TOuc66zrXOuc68zq3Ovc6/z4UgJyVzJy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTg2Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMDMwCittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKyLOps6xzq/Ovc61z4TOsc65IM+Az4nPgiDOvM61z4TOsc66zrnOvc6uz4POsc+EzrUgz4TOvyBIRUFEIM6xz4DPjCDPhM63IM+Dz4TOuc6zzrzOriDPhM63z4Igz4TOtc67zrXPhc+EzrHOr86xz4IgzrHPgM6/z4TPhc+Hzq/Osc+CICIKKyInYW0nLlxuIgorIs6UzrUgzrPOr869zrXPhM6xzrkgzrPPjc+BzrnPg868zrEgz4DPgc6/z4Igz4TOsSDPgM6vz4PPiSDPg8+Ezr8gT1JJR19IRUFEIgorCisjOiBidWlsdGluL2FtLmM6MjEyMworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXBhdGNoLWZvcm1hdDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxNTkKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXSIKK21zZ3N0ciAiZ2l0IGFtIFs8zrXPgM65zrvOv86zzq3Pgj5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTYwCittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCittc2dzdHIgImdpdCBhbSBbPM61z4DOuc67zr/Os86tz4I+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorCisjOiBidWlsdGluL2FtLmM6MjE2NgorbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTY4Cittc2dpZCAiaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3AiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxNzAKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjE3MSBidWlsdGluL2luaXQtZGIuYzo0ODYgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1OAorIzogYnVpbHRpbi9yZXBhY2suYzozMDYKK21zZ2lkICJiZSBxdWlldCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjE3MworbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxNzYKK21zZ2lkICJyZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjE3OAorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxODAKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTgyCittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjE4NAorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxODcKK21zZ2lkICJkbyBub3QgcGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGluZGVwZW5kZW50IG9mIGFtLmtlZXBjciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjE5MAorbXNnaWQgInN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjE5MiBidWlsdGluL2FtLmM6MjE5NSBidWlsdGluL2FtLmM6MjE5OCBidWlsdGluL2FtLmM6MjIwMQorIzogYnVpbHRpbi9hbS5jOjIyMDQgYnVpbHRpbi9hbS5jOjIyMDcgYnVpbHRpbi9hbS5jOjIyMTAgYnVpbHRpbi9hbS5jOjIyMTMKKyM6IGJ1aWx0aW4vYW0uYzoyMjE5Cittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIwOSBidWlsdGluL2NvbW1pdC5jOjEzNDMgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcxCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzQgYnVpbHRpbi9ncmVwLmM6ODc5IGJ1aWx0aW4vbWVyZ2UuYzoyNDAKKyM6IGJ1aWx0aW4vcHVsbC5jOjE1MiBidWlsdGluL3B1bGwuYzoyMTAgYnVpbHRpbi9yZWJhc2UuYzoxMDYyCisjOiBidWlsdGluL3JlcGFjay5jOjMxNyBidWlsdGluL3JlcGFjay5jOjMyMSBidWlsdGluL3JlcGFjay5jOjMyMworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MSBidWlsdGluL3Nob3ctcmVmLmM6MTcxIGJ1aWx0aW4vdGFnLmM6Mzg2CisjOiBwYXJzZS1vcHRpb25zLmg6MTQ0IHBhcnNlLW9wdGlvbnMuaDoxNDYgcGFyc2Utb3B0aW9ucy5oOjI2NgorbXNnaWQgIm4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyMTUgYnVpbHRpbi9icmFuY2guYzo2MzcgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOAorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ0IGJ1aWx0aW4vdGFnLmM6NDIyIGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM5Cittc2dpZCAiZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE2Cittc2dpZCAiZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIyCittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI0Cittc2dpZCAiY29udGludWUgYXBwbHlpbmcgcGF0Y2hlcyBhZnRlciByZXNvbHZpbmcgYSBjb25mbGljdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIyNworbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAic2tpcCB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIzMworbXNnaWQgInJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzYKK21zZ2lkICJhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uIGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM5Cittc2dpZCAic2hvdyB0aGUgcGF0Y2ggYmVpbmcgYXBwbGllZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyNDMKK21zZ2lkICJsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyNDUKK21zZ2lkICJ1c2UgY3VycmVudCB0aW1lc3RhbXAgZm9yIGF1dGhvciBkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ3IGJ1aWx0aW4vY29tbWl0LmM6MTQ4NiBidWlsdGluL21lcmdlLmM6Mjc0CisjOiBidWlsdGluL3B1bGwuYzoxODUgYnVpbHRpbi9yZWJhc2UuYzoxMTA2IGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjE4NQorIzogYnVpbHRpbi9yZXZlcnQuYzoxMTQgYnVpbHRpbi90YWcuYzo0MDIKK21zZ2lkICJrZXktaWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyNDggYnVpbHRpbi9yZWJhc2UuYzoxMTA3IGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjE4NgorbXNnaWQgIkdQRy1zaWduIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyNTEKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI2OQorbXNnaWQgIiIKKyJUaGUgLWIvLS1iaW5hcnkgb3B0aW9uIGhhcyBiZWVuIGEgbm8tb3AgZm9yIGxvbmcgdGltZSwgYW5kXG4iCisiaXQgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdCBhbnltb3JlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI3NgorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICVzIHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIzMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN0cmF5ICVzIGRpcmVjdG9yeSBmb3VuZC5cbiIKKyJVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlbW92ZSBpdC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjEKK21zZ2lkICJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIgorbXNnc3RyICLOlM61zr0gz4XPhs6vz4PPhM6xz4TOsc65IM60zrnOtc+BzrPOsc+Dzq/OsSDOtc+Azq/Ou8+Fz4POt8+CLCDOtM61IM+Dz4XOvc61z4fOr862zr/Phc68zrUuIgorCisjOiBidWlsdGluL2FwcGx5LmM6OAorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbPM61z4DOuc67zr/Os86tz4I+XSBbPM60zrnPjM+BzrjPic+Dzrc+Li4uXSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogzpHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr/PgiDOtc6+z4XPgM63z4HOtc+EzrfPhM6uz4Igz4fPic+Bzq/PgiBVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IM6xzr3Osc68zrXOvc+Mz4TOsc69IEFDSy9OQUssIM6yz4HOrc64zrfOus61IM+AzrHOus6tz4TOvyBmbHVzaCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NQorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IM+Dz4bOrM67zrzOsSDPgM+Bz4nPhM6/zrrPjM67zrvOv8+FIM61z4DOuc66zr/Ouc69z4nOvc6vzrHPgiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjkKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IM6xzr3Osc68zrXOvc+Mz4TOsc69IGZsdXNoIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPGJhZF90ZXJtPiA8Z29vZF90ZXJtPiIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPM67zqzOuM6/z4Igz4zPgc6/z4I+IDzPg8+Jz4PPhM+Mz4Igz4zPgc6/z4I+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjQKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXJlc2V0IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPM+Fz4DOv86yzr/Ou86uPl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNgorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA8c3RhdGU+IDxyZXZpc2lvbj4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA8zrrOsc+EzqzPg8+EzrHPg863PiA8zq3Ous60zr/Pg863PiA8z4PPic+Dz4TPjM+CICIKKyLPjM+Bzr/Pgj4gPM67zqzOuM6/z4Igz4zPgc6/z4I+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjcKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPGNvbW1hbmQ+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPM61zr3PhM6/zrvOrj4gPM+Dz4nPg8+Ez4zPgiDPjM+Bzr/Pgj4gIgorIjzOu86szrjOv8+CIM+Mz4HOv8+CPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPGdvb2RfdGVybT4gPGJhZF90ZXJtPiBbPHRlcm0+XSIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrIDzPg8+Jz4PPhM+Mz4Igz4zPgc6/z4I+IDzOu86szrjOv8+CIM+Mz4HOv8+CPiBbPM+Mz4HOv8+CPl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOQorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMAorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtPiAtLXRlcm0te25ldyxiYWR9IgorIj08dGVybT5dWy0tbm8tY2hlY2tvdXRdIFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTzPjM+Bzr/Pgj4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PM+Mz4HOv8+CPl1bLS1uby1jaGVja291dF0gWzzOu86szrjOv8+CPiBbPM+Dz4nPg8+Ez4w+Li4uXV0gWy0tXSBbPM60zrnOsc60z4HOv868zq3Pgj4uLi5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0ZXJtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnJXMnIGFzIGEgdGVybSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgdGVybSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTEKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExOAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRoZSBmaWxlIEJJU0VDVF9URVJNUyIKK21zZ3N0ciAizrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDPhM6/IM6szr3Ov865zrPOvM6xIM+Ezr/PhSDOsc+Bz4fOtc6vzr/PhSBCSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyVzJy4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGdldCB0aGUgb2lkIG9mIHRoZSByZXYgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IG9wZW4gdGhlIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWFuZDogeW91J3JlIGN1cnJlbnRseSBpbiBhICVzLyVzIGJpc2VjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorIs6gz4HOrc+AzrXOuSDOvc6xIM60z47Pg861z4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IM6tzr3OsSAlcyDOus6xzrkgJXMgzq3Ous60zr/Pg863LlxuIgorIs6cz4DOv8+BzrXOr8+EzrUgzr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4POtc+EzrUgXCJnaXQgYmlzZWN0ICVzXCIgzrrOsc65IFwiZ2l0IGJpc2VjdCAlc1wiIM6zzrnOsSDOsc+Fz4TPjC4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyLOp8+BzrXOuc6szrbOtc+EzrHOuSDOvc6xIM6xz4HPh86vz4POtc+EzrUgzrzOtSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyLOiM+AzrXOuc+EzrEgz4fPgc61zrnOrM62zrXPhM6xzrkgzr3OsSDOtM+Oz4POtc+EzrUgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSDOrc69zrEgJXMgzrrOsc65ICVzIM6tzrrOtM6/z4POty5cbiIKKyLOnM+Azr/Pgc61zq/PhM61IM69zrEgz4fPgc63z4POuc68zr/PgM6/zrnOrs+DzrXPhM61IFwiZ2l0IGJpc2VjdCAlc1wiIM66zrHOuSBcImdpdCBiaXNlY3QgJXNcIiDOs865zrEgzrHPhc+Ez4wuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgImJpc2VjdGluZyBvbmx5IHdpdGggYSAlcyBjb21taXQiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMyOQorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICLOlc+AzrnOss61zrLOsc65z47Ovc61z4TOtSBbWS9uXTsgIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mzc2Cittc2dpZCAibm8gdGVybXMgZGVmaW5lZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGN1cnJlbnQgdGVybXMgYXJlICVzIGZvciB0aGUgb2xkIHN0YXRlXG4iCisiYW5kICVzIGZvciB0aGUgbmV3IHN0YXRlLlxuIgorbXNnc3RyICIiCisizp/OuSDPgM6xz4HPjM69z4TOtc+CIM+Mz4HOv865IM+DzrHPgiDOtc6vzr3Osc65ICVzIM6zzrnOsSDPhM63zr0gz4DOsc67zrnOrCDOus6xz4TOrM+Dz4TOsc+DzrdcbiIKKyLOus6xzrkgJXMgzrPOuc6xIM+Ezrcgzr3Orc6xIM66zrHPhM6sz4PPhM6xz4POty5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIlN1cHBvcnRlZCBvcHRpb25zIGFyZTogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBhbmQgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBvcHRpb246ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MTEKK21zZ2lkICJiYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJjaGVja2luZyBvdXQgJyVzJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCBzdGFydCA8dmFsaWQtYnJhbmNoPicuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NDcKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gY2ctc2VlaydlZCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NTAKK21zZ2lkICJiYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MjcKK21zZ2lkICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MjkKK21zZ2lkICJ3cml0ZSB0aGUgdGVybXMgdG8gLmdpdC9CSVNFQ1RfVEVSTVMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMQorbXNnaWQgImNsZWFudXAgdGhlIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMzCittc2dpZCAiY2hlY2sgZm9yIGV4cGVjdGVkIHJldnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNQorbXNnaWQgInJlc2V0IHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNworbXNnaWQgIndyaXRlIG91dCB0aGUgYmlzZWN0aW9uIHN0YXRlIGluIEJJU0VDVF9MT0ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzOQorbXNnaWQgImNoZWNrIGFuZCBzZXQgdGVybXMgaW4gYSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MQorbXNnaWQgImNoZWNrIHdoZXRoZXIgYmFkIG9yIGdvb2QgdGVybXMgZXhpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MworbXNnaWQgInByaW50IG91dCB0aGUgYmlzZWN0IHRlcm1zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDUKK21zZ2lkICJzdGFydCB0aGUgYmlzZWN0IHNlc3Npb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NworbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0OQorbXNnaWQgIm5vIGxvZyBmb3IgQklTRUNUX1dSSVRFIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NjYKK21zZ2lkICItLXdyaXRlLXRlcm1zIHJlcXVpcmVzIHR3byBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3MAorbXNnaWQgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIHJlcXVpcmVzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njc3Cittc2dpZCAiLS1iaXNlY3QtcmVzZXQgcmVxdWlyZXMgZWl0aGVyIG5vIGFyZ3VtZW50IG9yIGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODEKK21zZ2lkICItLWJpc2VjdC13cml0ZSByZXF1aXJlcyBlaXRoZXIgNCBvciA1IGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg3Cittc2dpZCAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIHJlcXVpcmVzIDMgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTMKK21zZ2lkICItLWJpc2VjdC1uZXh0LWNoZWNrIHJlcXVpcmVzIDIgb3IgMyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY5OQorbXNnaWQgIi0tYmlzZWN0LXRlcm1zIHJlcXVpcmVzIDAgb3IgMSBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzEKK21zZ2lkICJnaXQgYmxhbWUgWzxvcHRpb25zPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8ZmlsZT4iCittc2dzdHIgImdpdCBibGFtZSBbPM61z4DOuc67zr/Os86tz4I+XSBbPM61z4DOuc67zr/Os86tz4Igzq3Ous60Lj5dIFs8zq3Ous60Lj5dIFstLV0gPM6xz4HPh861zq/Ovz4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozNgorbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0aW5nIGEgY29sb3I6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MTMKK21zZ2lkICJtdXN0IGVuZCB3aXRoIGEgY29sb3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yICclcycgaW4gY29sb3IuYmxhbWUucmVwZWF0ZWRMaW5lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzE4Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgYmxhbWUuY29sb3JpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5MworbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5NAorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5NQorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6Nzk2Cittc2dpZCAiU2hvdyB3b3JrIGNvc3Qgc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6Nzk3Cittc2dpZCAiRm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3OTgKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6Nzk5Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgwMAorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODAxCittc2dpZCAiU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODAyCittc2dpZCAiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICLOoM+Bzr/Oss6/zrvOriDOvM6/z4HPhs6uz4IgzrXOvc+Ezr/Ou8+Ozr0gcG9yY2VsYWluIM68zrUgz4DOu863z4HOv8+Gzr/Pgc6vzrXPgiDPhc+Azr/Oss6/zrvOrs+CIM6xzr3OrCDOs8+BzrHOvM68zq4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MDMKK21zZ2lkICJVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgZ2l0LWFubm90YXRlIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MDQKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgwNQorbXNnaWQgIlNob3cgbG9uZyBjb21taXQgU0hBMSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODA2Cittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODA3Cittc2dpZCAiU2hvdyBhdXRob3IgZW1haWwgaW5zdGVhZCBvZiBuYW1lIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MDgKK21zZ2lkICJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODA5Cittc2dpZCAiY29sb3IgcmVkdW5kYW50IG1ldGFkYXRhIGZyb20gcHJldmlvdXMgbGluZSBkaWZmZXJlbnRseSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODEwCittc2dpZCAiY29sb3IgbGluZXMgYnkgYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MTcKK21zZ2lkICJVc2UgYW4gZXhwZXJpbWVudGFsIGhldXJpc3RpYyB0byBpbXByb3ZlIGRpZmZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MTkKK21zZ2lkICJTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCBiZXR0ZXIgbWF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgyMAorbXNnaWQgIlVzZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4gaW5zdGVhZCBvZiBjYWxsaW5nIGdpdC1yZXYtbGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIxCittc2dpZCAiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIyIGJ1aWx0aW4vYmxhbWUuYzo4MjMKK21zZ2lkICJzY29yZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIyCittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIzCittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODI0Cittc2dpZCAibixtIgorbXNnc3RyICJuLG0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjQKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODc1Cittc2dpZCAiLS1wcm9ncmVzcyBjYW4ndCBiZSB1c2VkIHdpdGggLS1pbmNyZW1lbnRhbCBvciBwb3JjZWxhaW4gZm9ybWF0cyIKK21zZ3N0ciAiIgorIs+Ezr8gLS1wcm9ncmVzcyDOtM61IM6zzq/Ovc61z4TOsc65IM69zrEgz4fPgc63z4POuc68zr/PgM6/zrnOt864zrXOryDOvM61IM+Ezr8gLS1pbmNyZW1lbnRhbCDOriDOvM61IM68zr/Pgc+Gzq3PgiAiCisizrXOvc+Ezr/Ou8+Ozr0gcG9yY2VsYWluIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBzdHJpbmcgaXMgdXNlZCB0byB0ZWxsIHVzIHRoZQorIy4gbWF4aW11bSBkaXNwbGF5IHdpZHRoIGZvciBhIHJlbGF0aXZlIHRpbWVzdGFtcCBpbgorIy4gImdpdCBibGFtZSIgb3V0cHV0LiAgRm9yIEMgbG9jYWxlLCAiNCB5ZWFycywgMTEKKyMuIG1vbnRocyBhZ28iLCB3aGljaCB0YWtlcyAyMiBwbGFjZXMsIGlzIHRoZSBsb25nZXN0CisjLiBhbW9uZyB2YXJpb3VzIGZvcm1zIG9mIHJlbGF0aXZlIHRpbWVzdGFtcHMsIGJ1dAorIy4geW91ciBsYW5ndWFnZSBtYXkgbmVlZCBtb3JlIG9yIGZld2VyIGRpc3BsYXkKKyMuIGNvbHVtbnMuCisjLgorIzogYnVpbHRpbi9ibGFtZS5jOjkyNgorbXNnaWQgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iCittc2dzdHIgIs+Az4HOuc69IM6xz4DPjCA0IM+Hz4HPjM69zrnOsSDOus6xzrkgMTEgzrzOrs69zrXPgiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjEwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZSIKK21zZ2lkX3BsdXJhbCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTA2NAorbXNnaWQgIkJsYW1pbmcgbGluZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyOQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPM61z4DOuc67zr/Os86tz4I+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMwCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLWxdIFstZl0gPGJyYW5jaC1uYW1lPiBbPHN0YXJ0LXBvaW50Pl0iCittc2dzdHIgImdpdCBicmFuY2ggWzzOtc+AzrnOu86/zrPOrc+CPl0gWy1sXSBbLWZdIDzPjM69zr/OvM6xIM66zrvOrM60zr/PhT4gWzzOsc+Bz4fOuc66z4wgz4POt868zrXOr86/Pl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzEKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstcl0gKC1kIHwgLUQpIDxicmFuY2gtbmFtZT4uLi4iCittc2dzdHIgImdpdCBicmFuY2ggWzzOtc+AzrnOu86/zrPOrc+CPl0gWy1yXSAoLWQgfCAtRCkgPM+Mzr3Ov868zrEgzrrOu86szrTOv8+FPi4uLiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMgorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPM61z4DOuc67zr/Os86tz4I+XSAoLW0gfCAtTSkgWzzPgM6xzrvOuc+Mz4IgzrrOu86szrTOv8+CPl0gPM69zq3Ov8+CIM66zrvOrM60zr/Pgj4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzMKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtYyB8IC1DKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzzOtc+AzrnOu86/zrPOrc+CPl0gKC1jIHwgLUMpIFs8z4DOsc67zrnPjM+CIM66zrvOrM60zr/Pgj5dIDzOvc6tzr/PgiDOus67zqzOtM6/z4I+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM0Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPM61z4DOuc67zr/Os86tz4I+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozNQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzzOtc+AzrnOu86/zrPOrc+CPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyLOtM61IM6zzq/Ovc61z4TOsc65IM60zrnOsc6zz4HOsc+Gzq4gz4TOv8+FIM66zrvOrM60zr/PhSAnJXMnIM+Azr/PhSDOtM61zr0gzq3Ph861zrkgz4PPhc6zz4fPic69zrXPhc+EzrXOryDOsc66z4zOvM6xIM68zrUgz4TOv1xuIgorIiAgICAgICAgICclcycsIM+AzrHPgc+MzrvOvyDPgM6/z4Ugzq3Ph861zrkgz4PPhc6zz4fPic69zrXPhc+EzrXOryDOvM61IM+Ezr8gSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgcnVuICdnaXQgYnJhbmNoIC1EICVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODYKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjE3Cittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjIzCittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgYnJhbmNoICclcycgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZS10cmFja2luZyBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjEgYnVpbHRpbi90YWcuYzo1OQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyByZWJhc2VkIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyBiaXNlY3RlZCBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ3OQorbXNnaWQgImNhbm5vdCBjb3B5IHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4MQorbXNnaWQgImNhbm5vdCByZW5hbWUgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYnJhbmNoIG5hbWU6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MTkKK21zZ2lkICJCcmFuY2ggcmVuYW1lIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUyMQorbXNnaWQgIkJyYW5jaCBjb3B5IGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGEgY29weSBvZiBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDMKK21zZ2lkICJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDUKK21zZ2lkICJCcmFuY2ggaXMgY29waWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoXG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIHN0cmlwcGVkLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTk0Cittc2dpZCAiR2VuZXJpYyBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTk2Cittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTcKK21zZ2lkICJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTk4Cittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtcHVsbCgxKSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MDAKK21zZ2lkICJkbyBub3QgdXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjAyIGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjE4MgorbXNnaWQgInVwc3RyZWFtIgorbXNnc3RyICLPgM+Bzr/PgiDPhM6xIM+AzqzOvc+JIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYwMgorbXNnaWQgImNoYW5nZSB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYwMworbXNnaWQgIlVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjA0Cittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjA1Cittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYwNyBidWlsdGluL2JyYW5jaC5jOjYwOQorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MDggYnVpbHRpbi9icmFuY2guYzo2MTAKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjEzCittc2dpZCAiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxNAorbXNnaWQgImxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjE2Cittc2dpZCAiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTcKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjE4Cittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTkKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIwCittc2dpZCAiY29weSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMQorbXNnaWQgImNvcHkgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgImxpc3QgYnJhbmNoIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIzCittc2dpZCAiY3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjUKK21zZ2lkICJlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNgorbXNnaWQgImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjcKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOAorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOQorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMCBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzAKKyM6IGJ1aWx0aW4vdGFnLmM6NDE1Cittc2dpZCAia2V5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDEgYnVpbHRpbi9scy1yZW1vdGUuYzo3MQorIzogYnVpbHRpbi90YWcuYzo0MTYKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzMgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MyBidWlsdGluL25vdGVzLmM6NDE1CisjOiBidWlsdGluL25vdGVzLmM6NDE4IGJ1aWx0aW4vbm90ZXMuYzo1ODEgYnVpbHRpbi9ub3Rlcy5jOjU4NAorIzogYnVpbHRpbi90YWcuYzo0MTgKK21zZ2lkICJvYmplY3QiCittc2dzdHIgIs6xzr3PhM65zrrOtc6vzrzOtc69zr8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM0Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM2IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDkgYnVpbHRpbi90YWcuYzo0MjUKK21zZ2lkICJzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgYXJlIGNhc2UgaW5zZW5zaXRpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzcgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOCBidWlsdGluL3RhZy5jOjQyMworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MzkKK21zZ2lkICJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYwIGJ1aWx0aW4vY2xvbmUuYzo3NDYKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAizqTOvyBIRUFEIM60zrUgzrLPgc6tzrjOt866zrUgzrrOrM+Ez4kgzrHPgM+MIM+Ezr8gcmVmcy9oZWFkcyEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjgzCittc2dpZCAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Njk4IGJ1aWx0aW4vYnJhbmNoLmM6NzQ5IGJ1aWx0aW4vYnJhbmNoLmM6NzU4Cittc2dpZCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MjUKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzMwCittc2dpZCAiY2Fubm90IGVkaXQgZGVzY3JpcHRpb24gb2YgbW9yZSB0aGFuIG9uZSBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWl0IG9uIGJyYW5jaCAnJXMnIHlldC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gYnJhbmNoIG5hbWVkICclcycuIgorbXNnc3RyICLOlM61zr0gz4XPgM6sz4HPh861zrkgzrrOu86szrTOv8+CIM68zrUgz4zOvc6/zrzOsSAnJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTUKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyBmb3IgYSBjb3B5IG9wZXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2NAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgYSByZW5hbWUgb3BlcmF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY5Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHNldCBuZXcgdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzc2IGJ1aWx0aW4vYnJhbmNoLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoICclcyciCittc2dzdHIgIs60zrXOvSDPhc+AzqzPgc+HzrXOuSDOvyDOus67zqzOtM6/z4IgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTMKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gdW5zZXQgdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTcKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxMworbXNnaWQgIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTYKK21zZ2lkICIiCisidGhlICctLXNldC11cHN0cmVhbScgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgJy0tdHJhY2snIG9yICIKKyInLS1zZXQtdXBzdHJlYW0tdG8nIGluc3RlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NTgKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjIKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5MworbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8dHlwZT4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxwYXRoPl0gPG9iamVjdD4iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8z4TPjc+Azr/Pgj4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTzOtM65zrHOtM+Bzr/OvM6uPl0gPM6xzr3PhM65zrrOtc6vzrzOtc69zr8+IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTk0Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gWy0tdGV4dGNvbnYgfCAtLSIKKyJmaWx0ZXJzXSIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gWy0tdGV4dGNvbnYgfCAtLSIKKyJmaWx0ZXJzXSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYxNQorbXNnaWQgIm9ubHkgb25lIGJhdGNoIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzMKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIs6/IDzPhM+Nz4DOv8+CPiDOvM+Azr/Pgc61zq8gzr3OsSDOtc6vzr3Osc65IM6tzr3Osc+CIM61zrogz4TPic69OiBibG9iLCDOtM6tzr3PhM+Bzr8sIM+Fz4DOv86yzr/Ou86uLCDOtc+EzrnOus6tz4TOsSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNAorbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNQorbXNnaWQgInNob3cgb2JqZWN0IHNpemUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNworbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM4Cittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MAorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biB0ZXh0Y29udiBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICLOs865zrEgzrHOvc+EzrnOus61zq/OvM61zr3OsSBibG9iLCDPhM+Bzq3Ovs+EzrUgdGV4dGNvbnYgz4PPhM6/IM+AzrXPgc65zrXPh8+MzrzOtc69zr8gz4TOv8+FIM6xzr3PhM65zrrOtc65zrzOrc69zr/PhSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MgorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biBmaWx0ZXJzIG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgIs6zzrnOsSDOsc69z4TOuc66zrXOr868zrXOvc6xIGJsb2IsIM+Ez4HOrc6+z4TOtSDPhs6vzrvPhM+BzrEgz4PPhM6/IM+AzrXPgc65zrXPh8+MzrzOtc69zr8gz4TOv8+FIM6xzr3PhM65zrrOtc65zrzOrc69zr/PhSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MyBnaXQtc3VibW9kdWxlLnNoOjg2MAorbXNnaWQgImJsb2IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NAorbXNnaWQgInVzZSBhIHNwZWNpZmljIHBhdGggZm9yIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDYKK21zZ2lkICJhbGxvdyAtcyBhbmQgLXQgdG8gd29yayB3aXRoIGJyb2tlbi9jb3JydXB0IG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NworbXNnaWQgImJ1ZmZlciAtLWJhdGNoIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ5Cittc2dpZCAic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTMKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1NworbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU5Cittc2dpZCAic2hvdyBhbGwgb2JqZWN0cyB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYxCittc2dpZCAiZG8gbm90IG9yZGVyIC0tYmF0Y2gtYWxsLW9iamVjdHMgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjEzCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8z4DOtc60zq/Ovz4uLi5dIFstLV0gPM+Mzr3Ov868zrEgzrTOuc6xzrTPgc6/zrzOrs+CPi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTQKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8z4DOtc60zq/Ovz4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMgorbXNnaWQgInVzZSAuZ2l0YXR0cmlidXRlcyBvbmx5IGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLOvc6xIM6zzq/Ovc61zrkgz4fPgc6uz4POtyDPhM6/z4UgLmdpdGF0dHJpYnV0ZXMgzrzPjM69zr8gzrHPgM+MIM+Ezr8gzrXPhc+BzrXPhM6uz4HOuc6/IgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI1IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDIKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyNSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI3Cittc2dpZCAidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMSBidWlsdGluL2NoZWNrb3V0LmM6MTI4MCBidWlsdGluL2djLmM6NTE3CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk2Cittc2dpZCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLOvc6xIM68zrfOvSDOsc69zrHPhs6tz4HOtc+EzrHOuSDOtyDPgM+Bz4zOv860zr/PgiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOQorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MzEKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MAorbXNnaWQgImNhbm5vdCBzcGVjaWZ5IHBhdGhuYW1lcyB3aXRoIC0tc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICIteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiz4TOvyAteiDOrc+HzrXOuSDOvc+MzrfOvM6xIM68z4zOvc6/IM68zrUgz4TOvyAtLXN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2NQorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY5Cittc2dpZCAiLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzEKK21zZ2lkICJjYW5ub3QgaGF2ZSBib3RoIC0tcXVpZXQgYW5kIC0tdmVyYm9zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3NAorbXNnaWQgIi0tbm9uLW1hdGNoaW5nIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXZlcmJvc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OQorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgWzzOtc+AzrnOu86/zrPOrc+CPl0gPM61z4DOsc+Gzq4+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoxNAorbXNnaWQgImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb250YWN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0OAorbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTMxCittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBjaGVja291dC1pbmRleCBbPM61z4DOuc67zr/Os86tz4I+XSBbLS1dIFs8zrHPgc+HzrXOr86/Pi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNDgKK21zZ2lkICJzdGFnZSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzIG9yIGFsbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY0Cittc2dpZCAiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NQorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBleGlzdGluZyBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY3Cittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY5Cittc2dpZCAiZG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzEKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc1Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzcKK21zZ2lkICJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3OCBidWlsdGluL2NvbHVtbi5jOjMxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM3MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM3NQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODMgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NTcKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NjkKK21zZ2lkICJzdHJpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3OQorbXNnaWQgIndoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE4MQorbXNnaWQgImNvcHkgb3V0IHRoZSBmaWxlcyBmcm9tIG5hbWVkIHN0YWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMgorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8zrXPgM65zrvOv86zzq3Pgj5dIDzOus67zqzOtM6/z4I+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzMKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gWzxicmFuY2g+XSAtLSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBjaGVja291dCBbPM61z4DOuc67zr/Os86tz4I+XSBbPM66zrvOrM60zr/Pgj5dIC0tIDzOsc+Bz4fOtc6vzr8+Li4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgIs63IM60zrnOsc60z4HOv868zq4gJyVzJyDOtM61zr0gzq3Ph861zrkgz4TOtyDOtM65zrrOriDOvM6xz4Igzq3Ous60zr/Pg863IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ5IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAizrcgzrTOuc6xzrTPgc6/zrzOriAnJXMnIM60zrXOvSDOrc+HzrXOuSDPhM63IM60zrnOus6uIM+Ezr/Phc+CIM6tzrrOtM6/z4POtyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLOtyDOtM65zrHOtM+Bzr/OvM6uICclcycgzrTOtc69IM6tz4fOtc65IM+MzrvOtc+CIM+EzrnPgiDOsc69zrHOs866zrHOr861z4IgzrXOus60z4zPg861zrnPgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIs63IM60zrnOsc60z4HOv868zq4gJyVzJyDOtM61zr0gzq3Ph861zrkgz4TOuc+CIM6xzr3Osc6zzrrOsc6vzrXPgiDOtc66zrTPjM+DzrXOuc+CIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJzogY2Fubm90IG1lcmdlIgorbXNnc3RyICLOtM65zrHOtM+Bzr/OvM6uICclcyc6IM60zrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDPg8+FzrPPh8+Ozr3Otc+Fz4POtyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAizpTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM+Az4HOv8+DzrjOrs66zrcgzrHPgM6/z4TOtc67zq3Pg868zrHPhM6/z4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgiDOs865zrEgz4TOvyAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjY3IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzAgYnVpbHRpbi9jaGVja291dC5jOjI3MworIzogYnVpbHRpbi9jaGVja291dC5jOjI3NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiCittc2dzdHIgIs+Ezr8gJyVzJyDOtM61IM6zzq/Ovc61z4TOsc65IM69zrEgz4fPgc63z4POuc68zr/PgM6/zrnOt864zrXOryDOvM61IM+EzrfOvSDOtc69zrfOvM6tz4HPic+DzrcgzrTOuc6xzrTPgc6/zrzPjs69IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mjc5IGJ1aWx0aW4vY2hlY2tvdXQuYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICLPhM6/ICclcycgzrTOtSDOs86vzr3Otc+EzrHOuSDOvc6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zrfOuM61zq8gzrzOtSDPhM6/ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAizpTOtSDOs86vzr3Otc+EzrHOuSDOtc69zrfOvM6tz4HPic+DzrcgzrTOuc6xzrTPgc6/zrzPjs69IM66zrHOuSDOsc67zrvOsc6zzq4gz4PPhM6/zr0gzrrOu86szrTOvyAnJXMnIM+EzrHPhc+Ez4zPh8+Bzr/Ovc6xLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM1NCBidWlsdGluL2NoZWNrb3V0LmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAizrTOtc69IM6tz4fOtc65IM6zzq/Ovc61zrkgz4PPhc6zz4fPjs69zrXPhc+Dzrcgz4TOt8+CIM60zrnOsc60z4HOv868zq7PgiAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gJXMiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSAlcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY0NQorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICLPgM+Bzq3PgM61zrkgzr3OsSDOtc+AzrnOu8+Nz4POtc+EzrUgz4TOvyDPhM+Bzq3Ph86/zr0gz4POsc+CIM61z4XPgc61z4TOrs+BzrnOvyDPgM+Bz47PhM6xIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ez4wgz4TOvyByZWZsb2cgzrPOuc6xIM+Ezr8gJyVzJzogJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgyNAorbXNnaWQgIkhFQUQgaXMgbm93IGF0IgorbXNnc3RyICLOpM6/IEhFQUQgzrLPgc6vz4POus61z4TOsc65IM+Ez47Pgc6xIM+Dz4TOvyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgyOCBidWlsdGluL2Nsb25lLmM6Njk5Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBIRUFEIgorbXNnc3RyICLOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM+MIM69zrEgzrXOvc63zrzOtc+Bz4nOuM61zq8gz4TOvyBIRUFEIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIs6Vz4DOsc69zrHPhs6/z4HOrCDPhM6/z4UgzrrOu86szrTOv8+FICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAizpLPgc6vz4POus61z4PPhM61IM6uzrTOtyDPg8+Ezr8gJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGFuZCByZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLOkc67zrvOsc6zzq4gzrrOsc65IM61z4DOsc69zrHPhs6/z4HOrCDPg8+Ezr/OvSDOus67zqzOtM6/ICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg0MSBidWlsdGluL2NoZWNrb3V0LmM6MTIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLOkc67zrvOsc6zzq4gz4POtSDOvc6tzr8gzrrOu86szrTOvyAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAizpHOu867zrHOs86uIM+Dz4TOv869IM66zrvOrM60zr8gJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4gzrrOsc65ICVkIM6xzrrPjM68zrEuXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NTEKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICLOtc+Dz4nPhM61z4HOuc66z4wgz4PPhs6szrvOvM6xIM+Dz4TOvyDOvM6/zr3Ov8+AzqzPhM65IM61zrrOtM+Mz4POtc+Jzr0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NTUKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAizpcgz4DPgc6/zrfOs86/z43OvM61zr3OtyDOuM6tz4POtyDPhM6/z4UgSEVBRCDOrs+EzrHOvSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk4MyBidWlsdGluL2NoZWNrb3V0LmM6MTIwNworbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIs6Sz4HOr8+DzrrOtc+Dz4TOtSDPg861IM66zrvOrM60zr8gz4DOv8+FIM60zrXOvSDOrc+HzrXOuSDOsc66z4zOvM6xIM6zzrXOvc69zrfOuM61zq8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCwgJWQgZ2l2ZW4uIgorbXNnc3RyICLOsc69zrHOvM61zr3PjM+EzrHOvSDOvM+Mzr3OvyDOvM6vzrEgzrHOvc6xz4bOv8+BzqwsIM60z4zOuM63zrrOsc69ICVkLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgY291bGQgYmUgYm90aCBhIGxvY2FsIGZpbGUgYW5kIGEgdHJhY2tpbmcgYnJhbmNoLlxuIgorIlBsZWFzZSB1c2UgLS0gKGFuZCBvcHRpb25hbGx5IC0tbm8tZ3Vlc3MpIHRvIGRpc2FtYmlndWF0ZSIKK21zZ3N0ciAiIgorIs6kzr8gJyVzJyDOuM6xIM68z4DOv8+Bzr/Pjc+DzrUgzr3OsSDOtc6vzr3Osc65IM61zq/PhM61IM+Ezr/PgM65zrrPjCDOsc+Bz4fOtc6vzr8gzrXOr8+EzrUgzrrOu86szrTOv8+CIM+AzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IuXG4iCisizqDOsc+BzrHOus6xzrvPjiDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IC0tICjOus6xzrkgz4DPgc6/zrHOuc+BzrXPhM65zrrOrCAtLW5vLWd1ZXNzKSDOs865zrEgzr3OsSDOsc+Azr/Pg86xz4bOt869zq/Pg861z4TOtSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNTMgYnVpbHRpbi93b3JrdHJlZS5jOjI5MCBidWlsdGluL3dvcmt0cmVlLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAizrzOtyDOrc6zzrrPhc+BzrcgzrHOvc6xz4bOv8+Bzqw6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiCittc2dzdHIgIs63IM6xzr3Osc+Gzr/Pgc6sIM60zrXOvSDOtc6vzr3Osc65IM60zq3Ovc+Ez4HOvzogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjIxCittc2dpZCAicGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIs60zrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDPh8+Bzq7Pg863IM60zrnOsc60z4HOv868z47OvSDOvM61IM+EzrfOvSDOsc67zrvOsc6zzq4gzrrOu86szrTPic69IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIyNCBidWlsdGluL2NoZWNrb3V0LmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgz4fPgc6uz4POtyDPhM6/z4UgJyVzJyDOvM61IM+EzrfOvSDOsc67zrvOsc6zzq4gzrrOu86szrTPic69IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIzMiBidWlsdGluL2NoZWNrb3V0LmM6MTIzNSBidWlsdGluL2NoZWNrb3V0LmM6MTI0MAorIzogYnVpbHRpbi9jaGVja291dC5jOjEyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIs60zrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDPh8+Bzq7Pg863IM+Ezr/PhSAnJXMnIM68zrUgz4TOvyAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIKK21zZ3N0ciAizpTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM6xzrvOu86xzrPOriDPhM6/z4UgzrrOu86szrTOv8+FIM+Dz4TOvyAnJXMnIM+Azr/PhSDOtM61zr0gzrXOr869zrHOuSDPhc+Azr/Oss6/zrvOriIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyODEgYnVpbHRpbi9jaGVja291dC5jOjEyODMgYnVpbHRpbi9jbG9uZS5jOjEyMAorIzogYnVpbHRpbi9yZW1vdGUuYzoxNjkgYnVpbHRpbi9yZW1vdGUuYzoxNzEgYnVpbHRpbi93b3JrdHJlZS5jOjQ4OQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5MQorbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAizrrOu86szrTOv8+CIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI4MgorbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICLOvc6xIM60zrfOvM65zr/Phc+BzrPOt864zrXOryDOus6xzrkgzr3OsSDOtc6+zrHPh864zrXOryDOrc69zrHPgiDOvc6tzr/PgiDOus67zqzOtM6/z4IiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjg0Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAizr3OsSDOtM63zrzOuc6/z4XPgc6zzrfOuM61zq8vzrXPgM6xzr3Osc+GzrXPgc64zrXOryDOus6xzrkgzr3OsSDOtc6+zrHPh864zrXOryDOrc69zrHPgiDOus67zqzOtM6/z4IiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjg1Cittc2dpZCAiY3JlYXRlIHJlZmxvZyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAizr3OsSDOtM63zrzOuc6/z4XPgc6zzrfOuM61zq8gcmVmbG9nIM6zzrnOsSDOvc6tzr8gzrrOu86szrTOvyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyODYgYnVpbHRpbi93b3JrdHJlZS5jOjQ5MworbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAizr3OsSDOs86vzr3Otc65IM6xz4DOv8+Dz43Ovc60zrXPg863IM+Ezr/PhSBIRUFEIM+Dz4TOt869IM66zrHPhM6/zr3Ov868zrHPg868zq3Ovc63IM+Fz4DOv86yzr/Ou86uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI4NworbXNnaWQgInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLOvc6xIM6/z4HOuc+Dz4TOv8+Nzr0gzr/OuSDPgM67zrfPgc6/z4bOv8+Bzq/Otc+CIM+Ezr/PhSDPgM+Bzr/PgiDPhM6xIM+AzqzOvc+JIM6zzrnOsSDPhM6/zr0gzr3Orc6/IM66zrvOrM60zr8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjg5Cittc2dpZCAibmV3LWJyYW5jaCIKK21zZ3N0ciAizr3Orc6/z4IgzrrOu86szrTOv8+CIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI4OQorbXNnaWQgIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIKK21zZ3N0ciAizr3Orc6/z4IgzrrOu86szrTOv8+CIM+Hz4nPgc6vz4IgzrPOv869zq3OsSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyOTEKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgIs69zrEgzrPOr869zrXOuSDOtc6+zrHOs8+JzrPOriDPhM63z4IgzrTOuc66zq7PgiDOvM6xz4Igzq3Ous60zr/Pg863z4IgzrPOuc6xIM+EzrEgzrzOtyDPg8+FzrPPh8+Jzr3Otc+FzrzOrc69zrEgzrHPgc+HzrXOr86xIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI5NAorbXNnaWQgImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICLOvc6xIM6zzq/Ovc61zrkgzrXOvs6xzrPPic6zzq4gz4TOt8+CIM60zrnOus6uz4Igz4TOv8+Fz4Igzq3Ous60zr/Pg863z4IgzrPOuc6xIM+EzrEgzrzOtyDPg8+FzrPPh8+Jzr3Otc+FzrzOrc69zrEgzrHPgc+HzrXOr86xIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI5NgorbXNnaWQgImZvcmNlIGNoZWNrb3V0ICh0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMpIgorbXNnc3RyICLOvc6xIM6zzq/Ovc61zrkgzrHOvc6xzrPOus6xz4PPhM65zrrOriDOtc6+zrHOs8+JzrPOriAozrHPgM+Mz4HPgc65z4jOtyDPhM+Jzr0gz4TOv8+AzrnOus+Ozr0gz4TPgc6/z4DOv8+Azr/Ouc6uz4POtc+Jzr0pIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI5OAorbXNnaWQgInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICLOvc6xIM6zzq/Ovc61zrkgz4TPgc65z4DOu86uIM+Dz4XOs8+Hz47Ovc61z4XPg863IM68zrUgz4TOv869IM69zq3OvyDOus67zqzOtM6/IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMwMCBidWlsdGluL21lcmdlLmM6Mjc2Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICLOvc6xIM61zr3Ot868zrXPgc+JzrjOv8+Nzr0gz4TOsSDOsc+Bz4fOtc6vzrEgz4DOv8+FIM+AzrHPgc6xzrLOu86tz4DOv869z4TOsc65ICjPgM+Bzr/Otc+AzrnOu86/zrPOrikiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzAyIGJ1aWx0aW4vbG9nLmM6MTU4NiBwYXJzZS1vcHRpb25zLmg6MjcyCittc2dpZCAic3R5bGUiCittc2dzdHIgIs68zr/Pgc+Gzq4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzAzCittc2dpZCAiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIKK21zZ3N0ciAizrzOv8+Bz4bOriDPg8+FzrPOus+Bzr/Pjc+DzrXPic69IChtZXJnZSDOriBkaWZmMykiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzA2Cittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICIiCisizr3OsSDOvM63IM6zzq/Ovc61zrkgz4DOtc+BzrnOv8+BzrnPg868z4zPgiDPhM+Jzr0gz4DOtc+BzrnOs8+BzrHPhs+Ozr0gzrTOuc6xzrTPgc6/zrzPjs69IM+DzrUgzrzPjM69zr8gzrTOuc6sz4PPgM6xz4HPhM6xIM+Dz4TOv865z4fOtc6vzrEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzA4Cittc2dpZCAiZG8gbm90IHNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIgorbXNnc3RyICIiCisizr3OsSDOvM63IM6zzq/Ovc61zrkgzrTOtc+Nz4TOtc+BzrcgzrHPgM+Mz4DOtc65z4HOsSDOtc+BzrzOt869zrXOr86xz4IgJ2dpdCBjaGVja291dCA8zrrOu86szrTOv8+CIM+Azr/PhSDOtM61zr0gIgorIs+Fz4DOrM+Bz4fOtc65PiciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzEwCittc2dpZCAiZG8gbm90IGNoZWNrIGlmIGFub3RoZXIgd29ya3RyZWUgaXMgaG9sZGluZyB0aGUgZ2l2ZW4gcmVmIgorbXNnc3RyICIiCisizr3OsSDOvM63IM6zzq/Ovc61zrkgzq3Ou861zrPPh86/z4IgzrHOvSDOus6sz4DOv865zr8gzqzOu867zr8gzrTOrc69z4TPgc6/IM61z4HOs86xz4POr86xz4IgzrrPgc6xz4TOrCDPhM6/IHJlZiDPgM6/z4UgzrTPjM64zrfOus61IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMxNCBidWlsdGluL2Nsb25lLmM6ODcgYnVpbHRpbi9mZXRjaC5jOjE0MQorIzogYnVpbHRpbi9tZXJnZS5jOjI3MyBidWlsdGluL3B1bGwuYzoxMzAgYnVpbHRpbi9wdXNoLmM6NTc1CisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NAorbXNnaWQgImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAizr3OsSDOs86vzr3Otc65IM6xzr3Osc6zzrrOsc+Dz4TOuc66zqwgzrHOvc6xz4bOv8+Bzqwgz4TOt8+CIM+Az4HOv8+MzrTOv8+FIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM0NQorbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiz4TOsSAtYiwgLUIgzrrOsc65IC0tb3JwaGFuIM61zq/Ovc6xzrkgzrHOu867zrfOu86/zrHPgM6/zrrOu861zrnPjM68zrXOvc6xIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2MgorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiz4TOvyAtLXRyYWNrIM+Hz4HOtc65zqzOts61z4TOsc65IM6tzr3OsSDPjM69zr/OvM6xIM66zrvOrM60zr/PhSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjcKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIs67zrXOr8+AzrXOuSDPhM6/IM+Mzr3Ov868zrEgzrrOu86szrTOv8+FLCDOtM6/zrrOuc68zqzPg8+EzrUgLWIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDA0Cittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgIs68zrcgzq3Os866z4XPgc63IM+AzrXPgc65zrPPgc6xz4bOriDOtM65zrHOtM+Bzr/OvM6uz4IiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIiIKKyLPhM6/ICclcycgzrTOtc69IM61zq/Ovc6xzrkgz4XPgM6/zrLOv867zq4gzrrOsc65IM60zrUgzrPOr869zrXPhM6xzrkgzr3OsSDOtM63zrzOuc6/z4XPgc6zzrfOuM61zq8gzrrOu86szrTOv8+CICclcycgzrHPgM+MIM6xz4XPhM+MIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGRvZXMgbm90IHRha2UgYSBwYXRoIGFyZ3VtZW50ICclcyciCittc2dzdHIgImdpdCBjaGVja291dDogz4TOvyAtLWRldGFjaCDOtM61IM60zq3Ph861z4TOsc65IM+Mz4HOuc+DzrzOsSDOtM65zrHOtM+Bzr/OvM6uz4IgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MTkKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSDOus6xzrkgLS1tZXJnZSDOtc6vzr3Osc65IM6xz4PPjc68zrLOsc+EzrEgz4zPhM6xzr1cbiIKKyLOs86vzr3Otc+EzrHOuSDOtc6+zrHOs8+JzrPOriDOsc+Az4wgz4TOvyDOtc+Fz4HOtc+Ezq7Pgc65zr8uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBtYXRjaGVkIG1vcmUgdGhhbiBvbmUgcmVtb3RlIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJXZSBmb3VuZCAlZCByZW1vdGVzIHdpdGggYSByZWZlcmVuY2UgdGhhdCBtYXRjaGVkLiBTbyB3ZSBmZWxsIGJhY2tcbiIKKyJvbiB0cnlpbmcgdG8gcmVzb2x2ZSB0aGUgYXJndW1lbnQgYXMgYSBwYXRoLCBidXQgZmFpbGVkIHRoZXJlIHRvbyFcbiIKKyJcbiIKKyJJZiB5b3UgbWVhbnQgdG8gY2hlY2sgb3V0IGEgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBvbiwgZS5nLiAnb3JpZ2luJyxcbiIKKyJ5b3UgY2FuIGRvIHNvIGJ5IGZ1bGx5IHF1YWxpZnlpbmcgdGhlIG5hbWUgd2l0aCB0aGUgLS10cmFjayBvcHRpb246XG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtZT5cbiIKKyJcbiIKKyJJZiB5b3UnZCBsaWtlIHRvIGFsd2F5cyBoYXZlIGNoZWNrb3V0cyBvZiBhbiBhbWJpZ3VvdXMgPG5hbWU+IHByZWZlclxuIgorIm9uZSByZW1vdGUsIGUuZy4gdGhlICdvcmlnaW4nIHJlbW90ZSwgY29uc2lkZXIgc2V0dGluZ1xuIgorImNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIGluIHlvdXIgY29uZmlnLiIKK21zZ3N0ciAiIgorIs6kzr8gJyVzJyDPhM6xzq/Pgc65zrHOvs61IM68zrUgz4DOtc+BzrnPg8+Dz4zPhM61z4HOv8+Fz4IgzrHPgM+MIM6tzr3Osc69IM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/z4XPgiAiCisiz4DOsc+BzrHOus6/zrvOv8+FzrjOv8+NzrzOtc69zr/Phc+CIM66zrvOrM60zr/Phc+CLlxuIgorIs6Sz4HOrs66zrHOvM61ICVkIM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/z4XPgiDOtc6+z4XPgM63z4HOtc+EzrfPhM6tz4IgzrzOtSDOsc69zrHPhs6/z4HOrCDPgM6/z4Ugz4TOsc65z4HOuc6szrbOtc65LiDOn8+Az4zPhM61ICIKKyLOrc6zzrnOvc61IM61zr3Osc67zrvOsc66z4TOuc66zqxcbiIKKyLOsc+Az4zPgM61zrnPgc6xIM+EzrHPjc+EzrnPg863z4Igz4TOv8+FIM6/z4HOr8+DzrzOsc+Ezr/PgiDOvM61IM60zrnOsc60z4HOv868zq4sIM6xzrvOu86sIM6xz4DOrc+Ez4XPh861IM66zrHOuSDOsc+Fz4TOriFcbiIKKyJcbiIKKyLOkc69IM64zq3Ou86xz4TOtSDOvc6xIM61zr7Osc6zzqzOs861z4TOtSDOrc69zrHOvSDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OvyDPgM6xz4HOsc66zr/Ou86/z4XOuM6/z43OvM61zr3OvyDOus67zqzOtM6/IM+ALs+HLiDPg8+Ezr8gIgorIidvcmlnaW4nLFxuIgorIs68z4DOv8+BzrXOr8+EzrUgzr3OsSDPhM6/IM66zqzOvc61z4TOtSDOv8+Bzq/Ots6/zr3PhM6xz4Igzr/Ou86/zrPPgc6sz4bPic+CIM+Ezr8gz4zOvc6/zrzOsSDOvM61IM+EzrfOvSDOtc+AzrnOu86/zrPOriAtLXRyYWNrOlxuIgorIlxuIgorIiAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4vPM+Mzr3Ov868zrE+XG4iCisiXG4iCisizpHOvSDOuM6xIM64zq3Ou86xz4TOtSDOv865IM61zr7Osc6zz4nOs86tz4IgzrHPgM+MIM6tzr3OsSDOsc68z4bOr8+DzrfOvM6/IDzPjM69zr/OvM6xPiDOvc6xIM+Az4HOv8+EzrnOvM6/z43OvSDPgM6szr3PhM6xXG4iCisizq3Ovc6xzr0gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gzrXOvs+Fz4DOt8+BzrXPhM63z4TOriwgz4Auz4cuIM+Ezr8gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gJ29yaWdpbicsIM+DzrrOtc+Gz4TOtc6vz4TOtSDOvc6xICIKKyLOv8+Bzq/Pg861z4TOtVxuIgorImNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIM+Dz4TOuc+CIM+Bz4XOuM68zq/Pg861zrnPgiDPg86xz4IuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MjgKK21zZ2lkICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPM68zr/PhM6vzrLOvz5dIFsteCB8IC1YXSBbLS1dICIKKyI8zrTOuc6xzrTPgc6/zrzOrc+CPi4uLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIs6Rz4bOsc6vz4HOtc+Dzrcgz4TOv8+FICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMworIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAizpjOsSDOsc+GzrHOuc+Bzr/Pjc+DzrUgz4TOvyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICLOoM+Bzr/Pg8+AzrXPgc69zqzPhM6xzrkgz4TOvyDOsc+Azr/OuM61z4TOrs+BzrnOvyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIs6YzrEgz4DPgc6/z4PPgM61z4HOvc6/z43Pg861IM+Ezr8gzrHPgM6/zrjOtc+Ezq7Pgc65zr8gJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjI5OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nXG4iCittc2dzdHIgIiIKKyLOks6/zq7OuM61zrnOsTpcbiIKKyIxICAgICAgICAgIC0gzrXPgM65zrvOv86zzq4gzrHPgc65zrjOvM63zrzOrc69zr/PhSDPg8+Ezr/Ouc+HzrXOr86/z4VcbiIKKyJmb28gICAgICAgIC0gzrXPgM65zrvOv86zzq4gz4PPhM6/zrnPh861zq/Ov8+FIM68zrUgzrLOrM+DzrcgzrzOv869zrHOtM65zrrPjCDPgM+Bz4zOuM61zrzOsVxuIgorIiAgICAgICAgICAgLSAozrrOtc69z4wpIM68zrcgzrXPgM65zrvOv86zzq4gzrrOsc69zrXOvc+Mz4JcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIHNpbmdsZSBpdGVtXG4iCisiMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zXG4iCisiMi0zLDYtOSAgICAtIHNlbGVjdCBtdWx0aXBsZSByYW5nZXNcbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIi0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXNcbiIKKyIqICAgICAgICAgIC0gY2hvb3NlIGFsbCBpdGVtc1xuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmdcbiIKK21zZ3N0ciAiIgorIs6Szr/Ors64zrXOuc6xOlxuIgorIjEgICAgICAgICAgLSDOtc+AzrnOu86/zrPOriDOtc69z4zPgiDOvM+Mzr3OvyDPg8+Ezr/Ouc+HzrXOr86/z4VcbiIKKyIzLTUgICAgICAgIC0gzrXPgM65zrvOv86zzq4gzrXPjc+Bzr/Phc+CIM+Dz4TOv865z4fOtc6vz4nOvVxuIgorIjItMyw2LTkgICAgLSDOtc+AzrnOu86/zrPOriDPgM6/zrvOu86xz4DOu8+Ozr0gzrXPhc+Bz47OvSDPg8+Ezr/Ouc+HzrXOr8+Jzr1cbiIKKyJmb28gICAgICAgIC0gzrXPgM65zrvOv86zzq4gz4PPhM6/zrnPh861zq/Ov8+FIM68zrUgzrLOrM+DzrcgzrzOv869zrHOtM65zrrPjCDPgM+Bz4zOuM61zrzOsVxuIgorIi0uLi4gICAgICAgLSDOsc+Azr/Otc+AzrnOu86/zrPOriDPhM+Jzr0gzrXOvs6uz4Igz4PPhM6/zrnPh861zq/Pic69XG4iCisiKiAgICAgICAgICAtIM61z4DOuc67zr/Os86uIM+MzrvPic69IM+Ez4nOvSDPg8+Ezr/Ouc+HzrXOr8+Jzr1cbiIKKyIgICAgICAgICAgIC0gKM66zrXOvc+MKSDOv867zr/Ous67zq7Pgc+Jz4POtyDOtc+AzrnOu86/zrPOrs+CXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NTQKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTU5CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT9cbiIKK21zZ3N0ciAizp/Pgc6vz4PPhM61ICglcyk7XG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogQ2Fubm90IGZpbmQgaXRlbXMgbWF0Y2hlZCBieTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcxOQorbXNnaWQgIlNlbGVjdCBpdGVtcyB0byBkZWxldGUiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBrZWVwIFt5L05dIGFzIGlzCisjOiBidWlsdGluL2NsZWFuLmM6NzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92ZSAlcyBbeS9OXT8gIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3ODUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJ5ZS5cbiIKK21zZ3N0ciAizpHOvc+Ezq/Ovy5cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjc5MworbXNnaWQgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gc3RhcnQgY2xlYW5pbmdcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gZXhjbHVkZSBpdGVtcyBmcm9tIGRlbGV0aW9uXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIHNlbGVjdCBpdGVtcyB0byBiZSBkZWxldGVkIGJ5IG51bWJlcnNcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0gY29uZmlybSBlYWNoIGRlbGV0aW9uIChsaWtlIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gc3RvcCBjbGVhbmluZ1xuIgorImhlbHAgICAgICAgICAgICAgICAgLSB0aGlzIHNjcmVlblxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBoZWxwIGZvciBwcm9tcHQgc2VsZWN0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MjAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzkzCittc2dpZCAiKioqIENvbW1hbmRzICoqKiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODIxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5MAorbXNnaWQgIldoYXQgbm93IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MjkKK21zZ2lkICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIKK21zZ2lkX3BsdXJhbCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbXM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg0NQorbXNnaWQgIk5vIG1vcmUgZmlsZXMgdG8gY2xlYW4sIGV4aXRpbmcuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDcKK21zZ2lkICJkbyBub3QgcHJpbnQgbmFtZXMgb2YgZmlsZXMgcmVtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA5Cittc2dpZCAiZm9yY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMAorbXNnaWQgImludGVyYWN0aXZlIGNsZWFuaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTIKK21zZ2lkICJyZW1vdmUgd2hvbGUgZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMyBidWlsdGluL2Rlc2NyaWJlLmM6NTQ2IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDgKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5NyBidWlsdGluL2xvZy5jOjE2NyBidWlsdGluL2xvZy5jOjE2OQorIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NyBidWlsdGluL25hbWUtcmV2LmM6NDE1IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MTcKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzgKK21zZ2lkICJwYXR0ZXJuIgorbXNnc3RyICLOvM6/z4TOr86yzr8iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTQKK21zZ2lkICJhZGQgPHBhdHRlcm4+IHRvIGlnbm9yZSBydWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1Cittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE3Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTM1Cittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzkKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0MgorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NAorbXNnaWQgImdpdCBjbG9uZSBbPG9wdGlvbnM+XSBbLS1dIDxyZXBvPiBbPGRpcj5dIgorbXNnc3RyICJnaXQgY2xvbmUgWzzOtc+AzrnOu86/zrPOrc+CPl0gWy0tXSA8zrHPgM6/zrjOtc+Ezq7Pgc65zr8+IFs8z4bOrM66zrXOu86/z4I+XSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg5Cittc2dpZCAiZG9uJ3QgY3JlYXRlIGEgY2hlY2tvdXQiCittc2dzdHIgIs69zrEgzrzOtyDOtM63zrzOuc6/z4XPgc6zzrfOuM61zq8gzrXOvs6xzrPPic6zzq4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MCBidWlsdGluL2Nsb25lLmM6OTIgYnVpbHRpbi9pbml0LWRiLmM6NDgxCittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICLOvc6xIM60zrfOvM65zr/Phc+BzrPOt864zrXOryDOrc69zrEgzrPPhc68zr3PjCDOsc+Azr/OuM61z4TOrs+BzrnOvyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk0Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgIs69zrEgzrTOt868zrnOv8+Fz4HOs863zrjOtc6vIM6xz4DOv864zrXPhM6uz4HOuc6/IM6xzr3PhM6vzrPPgc6xz4bOvyAozrXOvc69zr/Otc6vz4TOsc65IM6zz4XOvM69z4wpIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTYKK21zZ2lkICJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAizrPOuc6xIM66zrvPic69zr/PgM6/zq/Ot8+DzrcgzrHPgM+MIM+Ezr/PgM65zrrPjCDOsc+Azr/OuM61z4TOrs+BzrnOvyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4Cittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgIs69zrEgzrzOtyDOs86vzr3Otc65IM+Hz4HOrs+Dzrcgz4TOv8+AzrnOus+Ozr0gaGFyZGxpbmtzLCDOvc6xIM6zzq/Ovc61z4TOsc65IM+AzqzOvc+EzrEgzrHOvc+EzrnOs8+BzrHPhs6uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwCittc2dpZCAic2V0dXAgYXMgc2hhcmVkIHJlcG9zaXRvcnkiCittc2dzdHIgIs6xz4HPh865zrrOv8+Azr/Or863z4POtyDPic+CIM6xz4DOv864zrXPhM6uz4HOuc6/IM66zr/Ouc69zq7PgiDPh8+Bzq7Pg863z4IiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDIgYnVpbHRpbi9jbG9uZS5jOjEwNgorbXNnaWQgInBhdGhzcGVjIgorbXNnc3RyICLPgM61z4HOuc6zz4HOsc+Gzq4gzrTOuc6xzrTPgc6/zrzOrs+CIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyIGJ1aWx0aW4vY2xvbmUuYzoxMDYKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICLOsc+Bz4fOuc66zr/PgM6/zq/Ot8+Dzrcgz4XPgM6/zrXOvc6/z4TOrs+Ez4nOvSDOvM6tz4POsSDPg8+Ezr/OvSDOus67z47Ovc6/IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA5Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgY2xvbmVkIGluIHBhcmFsbGVsIgorbXNnc3RyICLOsc+BzrnOuM68z4zPgiDPhc+Azr/Otc69zr/PhM6uz4TPic69IM+Az4HOv8+CIM+AzrHPgc6szrvOu863zrvOtyDOus67z4nOvc6/z4DOv86vzrfPg863IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEwIGJ1aWx0aW4vaW5pdC1kYi5jOjQ3OAorbXNnaWQgInRlbXBsYXRlLWRpcmVjdG9yeSIKK21zZ3N0ciAiz4bOrM66zrXOu86/z4Igz4DPgc6/z4TPjc+Az4nOvSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMSBidWlsdGluL2luaXQtZGIuYzo0NzkKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICLPhs6szrrOtc67zr/PgiDOsc+Az4wgz4TOv869IM6/z4DOv86vzr8gzrjOsSDPh8+BzrfPg865zrzOv8+Azr/Ouc63zrjOv8+Nzr3PhM6xzrkgz4DPgc+Mz4TPhc+AzrEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTMgYnVpbHRpbi9jbG9uZS5jOjExNSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM3OQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NjAKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSIKK21zZ3N0ciAizrHPgM6/zrjOtc+Ezq7Pgc65zr8gzrHOvc6xz4bOv8+BzqzPgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NjIKK21zZ2lkICJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIgorbXNnc3RyICLOvc6xIM6zzq/Ovc61zrkgz4fPgc6uz4POtyDPhM6/z4UgLS1yZWZlcmVuY2UgzrzPjM69zr8gzrrOsc+Ezqwgz4TOtyDOtM65zqzPgc66zrXOuc6xIM66zrvPic69zr/PgM6/zq/Ot8+DzrfPgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOCBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ2CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDMgYnVpbHRpbi9yZXBhY2suYzozMjkKK21zZ2lkICJuYW1lIgorbXNnc3RyICLPjM69zr/OvM6xIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE5Cittc2dpZCAidXNlIDxuYW1lPiBpbnN0ZWFkIG9mICdvcmlnaW4nIHRvIHRyYWNrIHVwc3RyZWFtIgorbXNnc3RyICIiCisizr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc63zrjOtc6vIM+Ezr8gPM+Mzr3Ov868zrE+IM6xzr3PhM6vIM6zzrnOsSAnb3JpZ2luJyDOs865zrEgz4TOt869IM+AzrHPgc6xzrrOv867zr/Pjc64zrfPg863IM+Ezr/PhSAiCisiz4DPgc6/z4Igz4TOsSDPgM6szr3PiSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMQorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgIs69zrEgzrXOvs6xz4fOuM61zq8gzr8gPM66zrvOrM60zr/Pgj4gzrHOvc+Ezq8gzrPOuc6xIM+Ezr8gSEVBRCDPhM6/z4UgzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr/PhSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMworbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgIs60zrnOsc60z4HOv868zq4gzrPOuc6xIM+Ezr8gZ2l0LXVwbG9hZC1wYWNrIM+Dz4TOv869IM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/IM61zr7Phc+AzrfPgc61z4TOt8+Ezq4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQgYnVpbHRpbi9mZXRjaC5jOjE0MiBidWlsdGluL2dyZXAuYzo4MzYKKyM6IGJ1aWx0aW4vcHVsbC5jOjIxOAorbXNnaWQgImRlcHRoIgorbXNnc3RyICLOss6szrjOv8+CIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI1Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICLOvc6xIM60zrfOvM65zr/Phc+BzrPOt864zrXOryDPgc63z4fPjM+CIM66zrvPjs69zr/PgiDOvM61IM6xz4XPhM+MIM+Ezr8gzrLOrM64zr/PgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNiBidWlsdGluL2ZldGNoLmM6MTQ0IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MgorbXNnaWQgInRpbWUiCittc2dzdHIgIs+Hz4HPjM69zr/PgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNworbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgc2luY2UgYSBzcGVjaWZpYyB0aW1lIgorbXNnc3RyICLOvc6xIM60zrfOvM65zr/Phc+BzrPOt864zrXOryDPgc63z4fPjM+CIM66zrvPjs69zr/PgiDOsc+Az4wgzrrOrM+Azr/Ouc6xIM+Dz4XOs866zrXOus+BzrnOvM6tzr3OtyDPg8+EzrnOs868zq4gzrrOsc65IM68zrXPhM6sIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4IGJ1aWx0aW4vZmV0Y2guYzoxNDYgYnVpbHRpbi9mZXRjaC5jOjE2OQorIzogYnVpbHRpbi9yZWJhc2UuYzoxMDM5Cittc2dpZCAicmV2aXNpb24iCittc2dzdHIgIs6tzrrOtM6/z4POtyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOSBidWlsdGluL2ZldGNoLmM6MTQ3Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSwgZXhjbHVkaW5nIHJldiIKK21zZ3N0ciAizr3OsSDOs86vzr3Otc65IM61zrzOss6szrjPhc69z4POtyDPhM6/z4UgzrnPg8+Ezr/Pgc65zrrOv8+NIM+Ezr/PhSDPgc63z4fOv8+NIM66zrvPjs69zr/PhSwgzrXOvs6xzrnPgc+Ozr3PhM6xz4Igz4TOvyByZXYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzEKK21zZ2lkICJjbG9uZSBvbmx5IG9uZSBicmFuY2gsIEhFQUQgb3IgLS1icmFuY2giCittc2dzdHIgIs69zrEgzrrOu8+Jzr3Ov8+Azr/Ouc63zrjOtc6vIM68z4zOvc6/IM6tzr3Osc+CIM66zrvOrM60zr/Pgiwgz4TOvyBIRUFEIM6uIC0tYnJhbmNoIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMzCittc2dpZCAiZG9uJ3QgY2xvbmUgYW55IHRhZ3MsIGFuZCBtYWtlIGxhdGVyIGZldGNoZXMgbm90IHRvIGZvbGxvdyB0aGVtIgorbXNnc3RyICIiCisizr3OsSDOvM63zr0gzrrOu8+Jzr3Ov8+Azr/Ouc63zrjOtc6vIM66zrHOvM6vzrEgzrXPhM65zrrOrc+EzrEsIM66zrHOuSDOv865IM68zrXOu867zr/Ovc+EzrnOus6tz4IgzrHOvc6xzrrPhM6uz4POtc65z4Igzr3OsSDOvM63zr0gz4TOuc+CICIKKyLOsc66zr/Ou86/z4XOuM6/z43OvSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNQorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIGJlIHNoYWxsb3ciCittc2dzdHIgIs+MzrvOtc+CIM6/zrkgzrrOu8+Jzr3Ov8+Azr/Ouc63zrzOrc69zrXPgiDPhc+Azr/Otc69z4zPhM63z4TOtc+CIM64zrEgzrXOr869zrHOuSDPgc63z4fOrc+CIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM2IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NworbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiz4bOrM66zrXOu86/z4IgZ2l0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4OAorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgIs69zrEgzrPOr869zrXOuSDOtM65zrHPh8+Jz4HOuc+DzrzPjM+CIM+Ezr/PhSDPhs6xzrrOrc67zr/PhSBnaXQgzrHPgM+MIM+Ezr8gzrTOrc69z4TPgc6/IM61z4HOs86xz4POr86xz4IiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzgKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgIs66zrvOtc65zrTOrz3PhM65zrzOriIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOQorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAizr3OsSDOv8+BzrnPg8+Ezr/Pjc69IM+Bz4XOuM68zq/Pg861zrnPgiDOvM6tz4POsSDPg8+Ezr8gzr3Orc6/IM6xz4DOv864zrXPhM6uz4HOuc6/IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQwIGJ1aWx0aW4vZmV0Y2guYzoxNjUgYnVpbHRpbi9wdWxsLmM6MjMxCisjOiBidWlsdGluL3B1c2guYzo1ODYKK21zZ2lkICJ1c2UgSVB2NCBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAiz4fPgc6uz4POtyDOvM+Mzr3OvyDOtM65zrXPhc64z43Ovc+DzrXPic69IElQdjQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE2NyBidWlsdGluL3B1bGwuYzoyMzQKKyM6IGJ1aWx0aW4vcHVzaC5jOjU4OAorbXNnaWQgInVzZSBJUHY2IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICLPh8+Bzq7Pg863IM68z4zOvc6/IM60zrnOtc+FzrjPjc69z4POtc+Jzr0gSVB2NiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI4MAorbXNnaWQgIiIKKyJObyBkaXJlY3RvcnkgbmFtZSBjb3VsZCBiZSBndWVzc2VkLlxuIgorIlBsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKyLOlM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM+MIM69zrEgzrzOsc69z4TOrc+Izr/Phc68zrUgz4TOvyDPjM69zr/OvM6xIM+Ezr/PhSDPhs6xzrrOrc67zr/PhS5cbiIKKyLOoM6xz4HOsc66zrHOu8+OIM60z47Pg8+EzrUgzq3Ovc6xzr0gz4bOrM66zrXOu86/IM+Dz4TOtyDOs8+BzrHOvM68zq4gzrXOvc+Ezr/Ou8+Ozr0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbzogQ291bGQgbm90IGFkZCBhbHRlcm5hdGUgZm9yICclcyc6ICVzXG4iCittc2dzdHIgIs+AzrvOt8+Bzr/Phs6/z4HOr86xOiDOlM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM+MIM69zrEgz4DPgc6/z4PPhM61zrjOtc6vIM61zr3Osc67zrvOsc66z4TOuc66zq4gzrPOuc6xIM+Ezr8gJyVzJzogJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICLOsc+Azq3PhM+Fz4fOtSDPhM6/IM6szr3Ov865zrPOvM6xIM+Ezr/PhSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICLPhM6/ICVzIM+Fz4DOrM+Bz4fOtc65IM6uzrTOtyDOus6xzrkgzrTOtc69IM61zq/Ovc6xzrkgz4bOrM66zrXOu86/z4IiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKK21zZ3N0ciAizrHPgM6tz4TPhc+HzrUgz4TOvyBzdGF0IM+Ezr/PhSAlc1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAizrHPgM6tz4TPhc+HzrUgzrcgzrHPhs6xzq/Pgc61z4POtyDOtM61z4POvM6/z40gJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAizrHPgM6tz4TPhc+HzrUgzrcgzrTOt868zrnOv8+Fz4HOs86vzrEgz4TOv8+FIM60zrXPg868zr/PjSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDUzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAizrHPgM6tz4TPhc+HzrUgzrcgzrHOvc+EzrnOs8+BzrHPhs6uIM+Ezr/PhSDOsc+Bz4fOtc6vzr/PhSDPg8+Ezr8gJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICLOv867zr/Ous67zrfPgc+OzrjOt866zrUuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0OTMKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB0aGUgY2hlY2tvdXQgd2l0aCAnZ2l0IGNoZWNrb3V0IC1mIEhFQUQnXG4iCittc2dzdHIgIiIKKyLOlyDOus67z4nOvc6/z4DOv86vzrfPg863IM+Azq3PhM+Fz4fOtSwgzrHOu867zqwgzrcgzrXOvs6xzrPPic6zzq4gzrHPgM6tz4TPhc+HzrUuXG4iCisizpzPgM6/z4HOtc6vz4TOtSDOvc6xIM61z4DOuc64zrXPic+Bzq7Pg861z4TOtSDPhM65IM61zr7Ors+HzrjOtyDOvM61ICdnaXQgc3RhdHVzJ1xuIgorIs66zrHOuSDOvc6xIM+Az4HOv8+Dz4DOsc64zq7Pg861z4TOtSDPgM6szrvOuSDPhM63zr0gzrXOvs6xzrPPic6zzq4gzrzOtSAnZ2l0IGNoZWNrb3V0IC1mIEhFQUQnXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIs6UzrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ez4wgzr3OsSDOss+BzrXOuM61zq8gzr8gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr/PgiDOus67zqzOtM6/z4IgJXMgz4DPgc6/z4IgzrrOu8+Jzr3Ov8+Azr/Or863z4POty4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSAlcyIKK21zZ3N0ciAizrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDOvc6xIM61zr3Ot868zrXPgc+JzrjOtc6vIM+Ezr8gJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MzcKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgIiIKKyLPhM6/IM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/IEhFQUQgzrHOvc6xz4bOrc+BzrXPhM6xzrkgz4POtSByZWYgz4DOv8+FIM60zrXOvSDPhc+AzqzPgc+HzrXOuSwgzrTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63ICIKKyLOtc6+zrHOs8+JzrPOri5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc2OAorbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgIs60zrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDOtc6+zrHOs8+JzrPOriDPhM6/z4UgzrTOrc69z4TPgc6/z4UgzrXPgc6zzrHPg86vzrHPgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgxMworbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgzrXOs86zz4HOsc+Gzq4gz4DOsc+BzrHOvM6tz4TPgc+Jzr0gz4PPhM6/IM6xz4HPh861zq/OvyDPgc+FzrjOvM6vz4POtc+Jzr0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NzYKK21zZ2lkICJjYW5ub3QgcmVwYWNrIHRvIGNsZWFuIHVwIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ez4wgz4TOvyByZXBhY2sgzrPOuc6xIM66zrHOuM6xz4HOuc+DzrzPjCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg3OAorbXNnaWQgImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAiIgorIs60zrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDOsc+GzrHOr8+BzrXPg863IM60zrXPg868zr/PjSDOsc+Az4wgz4TOvyDPgM+Bzr/Pg8+Jz4HOuc69z4wgzrHPgc+HzrXOr86/IM61zr3Osc67zrvOsc66z4TOuc66z47OvSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxOCBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NDEKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICLOpc+AzrXPgc6yzr/Ou865zrrOrCDPgM6/zrvOu86sIM6/z4HOr8+DzrzOsc+EzrEuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTIyCittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICLOoM+Bzq3PgM61zrkgzr3OsSDOv8+Bzq/Pg861z4TOtSDOrc69zrEgzrHPgM6/zrjOtc+Ezq7Pgc65zr8gz4DPgc6/z4IgzrrOu8+Jzr3Ov8+Azr/Or863z4POty4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICLOv865IM61z4DOuc67zr/Os86tz4IgLS1iYXJlIM66zrHOuSAtLW9yaWdpbiAlcyDOtM61zr0gzrXOr869zrHOuSDPg8+FzrzOss6xz4TOrc+CIM68zrXPhM6xzr7PjSDPhM6/z4XPgi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MzgKK21zZ2lkICItLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpciBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiz4TOvyAtLWJhcmUgzrrOsc65IM+Ezr8gLS1zZXBhcmF0ZS1naXQtZGlyIM60zrXOvSDOtc6vzr3Osc65IM+Dz4XOvM6yzrHPhM6sIM68zrXPhM6xzr7PjSDPhM6/z4XPgi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLPhM6/IM6xz4DOv864zrXPhM6uz4HOuc6/ICclcycgzrTOtc69IM+Fz4DOrM+Bz4fOtc65IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTU3IGJ1aWx0aW4vZmV0Y2guYzoxNjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiz4TOvyDOss6szrjOv8+CICVzIM60zrXOvSDOtc6vzr3Osc65IM64zrXPhM65zrrPjM+CIM6xz4HOuc64zrzPjM+CIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTY3CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIs63IM60zrnOsc60z4HOv868zq4gz4DPgc6/zr/Pgc65z4POvM6/z40gJyVzJyDPhc+AzqzPgc+HzrXOuSDOrs60zrcgzrrOsc65IM60zrXOvSDOtc6vzr3Osc65IM66zrXOvc+Mz4Igz4bOrM66zrXOu86/z4IuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiz4TOvyDOtM6tzr3PhM+Bzr8gzrXPgc6zzrHPg86vzrHPgiAnJXMnIM+Fz4DOrM+Bz4fOtc65IM6uzrTOty4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OTIgYnVpbHRpbi9jbG9uZS5jOjEwMTMgYnVpbHRpbi9kaWZmdG9vbC5jOjI3MgorIzogYnVpbHRpbi93b3JrdHJlZS5jOjI5NiBidWlsdGluL3dvcmt0cmVlLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICLOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM60zrfOvM65zr/Phc+BzrPOr86xIM+Ez4nOvSDOsc+Bz4fOuc66z47OvSDPhs6xzrrOrc67z4nOvSDPhM6/z4UgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJyIKK21zZ3N0ciAizrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDOtM63zrzOuc6/z4XPgc6zzq/OsSDPhM6/z4Ugz4bOsc66zq3Ou86/z4UgzrTOrc69z4TPgc6/z4UgzrXPgc6zzrHPg86vzrHPgiAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAxNworIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrrOu8+Jzr3Ov8+Azr/Or863z4POtyDOvM6tz4POsSDPg8+Ezr8gzrPPhc68zr3PjCDOsc+Azr/OuM61z4TOrs+BzrnOvyAnJXMnLi4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM66zrvPic69zr/PgM6/zq/Ot8+DzrcgzrzOrc+DzrEgz4PPhM6/ICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNDMKK21zZ2lkICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBib3RoIC0tcmVmZXJlbmNlIGFuZCAtLXJlZmVyZW5jZS1pZi0iCisiYWJsZSIKK21zZ3N0ciAiIgorIs+Ezr8gY2xvbmUgLS1yZWN1cnNpdmUgzrTOtc69IM61zq/Ovc6xzrkgz4PPhc68zrLOsc+Ez4wgzrzOtSDPhM6/IC0tcmVmZXJlbmNlIM66zrHOuSDPhM6/IC0tcmVmZXJlbmNlLSIKKyJpZi1hYmxlIM+EzrHPhc+Ez4zPh8+Bzr/Ovc6xIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEwNAorbXNnaWQgIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisiz4TOvyAtLWRlcHRoIM+AzrHPgc6xzrLOu86tz4DOtc+EzrHOuSDPg861IM+Ezr/PgM65zrrOv8+Nz4IgzrrOu8+Ozr3Ov8+Fz4IsIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgz4TOvyBmaWxlOi8vIM6xzr3PhM6vICIKKyLOsc+Fz4TOv8+NLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMDYKK21zZ2lkICItLXNoYWxsb3ctc2luY2UgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisiz4TOvyAtLXNoYWxsb3ctc2luY2Ugz4DOsc+BzrHOss67zq3PgM61z4TOsc65IM+DzrUgz4TOv8+AzrnOus6/z43PgiDOus67z47Ovc6/z4XPgiwgz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSDPhM6/ICIKKyJmaWxlOi8vIM6xzr3PhM6vIM6xz4XPhM6/z40uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEwOAorbXNnaWQgIi0tc2hhbGxvdy1leGNsdWRlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIs+Ezr8gLS1zaGFsbG93LWV4Y2x1ZGUgz4DOsc+BzrHOss67zq3PgM61z4TOsc65IM+DzrUgz4TOv8+AzrnOus6/z43PgiDOus67z47Ovc6/z4XPgiwgz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSDPhM6/ICIKKyJmaWxlOi8vIM6xzr3PhM6vIM6xz4XPhM6/z40uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTExMAorbXNnaWQgIi0tZmlsdGVyIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIs+Ezr8gLS1maWx0ZXIgz4DOsc+BzrHOss67zq3PgM61z4TOsc65IM+DzrUgz4TOv8+AzrnOus6/z43PgiDOus67z47Ovc6/z4XPgiwgz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSDPhM6/IGZpbGU6Ly8gzrHOvc+Ezq8gIgorIs6xz4XPhM6/z40uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTExMworbXNnaWQgInNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGlnbm9yaW5nIC0tbG9jYWwiCittc2dzdHIgIs+Ezr8gzrHPgM6/zrjOtc+Ezq7Pgc65zr8gz4DOt86zzq7PgiDOtc6vzr3Osc65IM+BzrfPh8+MLCDOs86vzr3Otc+EzrHOuSDPgM6xz4HOrM6yzrvOtc+Izrcgz4TOv8+FIC0tbG9jYWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTE4Cittc2dpZCAiLS1sb2NhbCBpcyBpZ25vcmVkIgorbXNnc3RyICLOs86vzr3Otc+EzrHOuSDPgM6xz4HOrM6yzrvOtc+Izrcgz4TOv8+FIC0tbG9jYWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTkyIGJ1aWx0aW4vY2xvbmUuYzoxMjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW90ZSBicmFuY2ggJXMgbm90IGZvdW5kIGluIHVwc3RyZWFtICVzIgorbXNnc3RyICLOnyDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3Ov8+CIM66zrvOrM60zr/PgiAlcyDOtM61IM6yz4HOrc64zrfOus61IM+Dz4TOvyDOsc+Az4wgz4DOrM69z4kgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjAzCittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAizqbOsc6vzr3Otc+EzrHOuSDPgM+Jz4IgzrrOu8+Jzr3Ov8+Azr/Ouc6uz4POsc+EzrUgzq3Ovc6xIM66zrXOvc+MIM6xz4DOv864zrXPhM6uz4HOuc6/LiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoxMAorbXNnaWQgImdpdCBjb2x1bW4gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb2x1bW4gWzzOtc+AzrnOu86/zrPOrc+CPl0iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjcKK21zZ2lkICJsb29rdXAgY29uZmlnIHZhcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyOCBidWlsdGluL2NvbHVtbi5jOjI5Cittc2dpZCAibGF5b3V0IHRvIHVzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMwCittc2dpZCAiTWF4aW11bSB3aWR0aCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMxCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMworbXNnaWQgIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MQorbXNnaWQgImdpdCBjb21taXQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgY29tbWl0IFs8zrXPgM65zrvOv86zzq3Pgj5dIFstLV0gPM+AzrXPgc65zrPPgc6xz4bOriDOtM65zrHOtM+Bzr/OvM6uz4I+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2Cittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBzdGF0dXMgWzzOtc+AzrnOu86/zrPOrc+CPl0gWy0tXSA8z4DOtc+BzrnOs8+BzrHPhs6uIM60zrnOsc60z4HOv868zq7Pgj4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTEKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKyLOls63z4TOrs+DzrHPhM61IM69zrEgz4TPgc6/z4DOv8+Azr/Ouc6uz4POtc+EzrUgz4TOt869IM+AzrnOvyDPgM+Bz4zPg8+GzrHPhM63IM+Fz4DOv86yzr/Ou86uLCDOsc67zrvOrCDOsc+Fz4TPjCDOuM6xIM+EzrfOvSDOrM+GzrfOvc61XG4iCisizrrOtc69zq4uIM6cz4DOv8+BzrXOr8+EzrUgzr3OsSDOtc+AzrHOvc6xzrvOrM6yzrXPhM61IM+EzrfOvSDOtc69z4TOv867zq4gz4POsc+CIM68zrUgLS1hbGxvdy1lbXB0eSwgzq4gzr3OsVxuIgorIs6xz4bOsc65z4HOrc+DzrXPhM61IM+EzrfOvSDPhc+Azr/Oss6/zrvOriDOtc69z4TOtc67z47PgiDOvM61IFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTYKK21zZ2lkICIiCisiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKK21zZ3N0ciAiIgorIs6XIM+Az4HOv863zrPOv8+NzrzOtc69zrcgzrXPgM65zrvOtc66z4TOuc66zq4gzrTOuc6xzrvOv86zzq4gzrXOr869zrHOuSDPhM+Oz4HOsSDOus61zr3Oriwgz4DOuc64zrHOvc+Oz4IgzrvPjM6zz4kgzrXPgM6vzrvPhc+DzrfPgiAiCisiz4PPhc6zzrrPgc6/z43Pg861z4nOvS5cbiIKKyLOkc69IM64zq3Ou861z4TOtSDOvc6xIM+EzrfOvSDPhc+Azr/Oss6szrvOtc+EzrUgz4DOrM+BzrHPhc+EzrEsIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrU6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzCittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgcmVzZXQnXG4iCittc2dzdHIgIs6VzrnOtM6szrvOu8+Jz4IsIM+AzrHPgc6xzrrOsc67z44gz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSAnZ2l0IHJlc2V0J1xuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY2Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNraXAgdGhpcyBjb21taXQsIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlc2V0XG4iCisiXG4iCisiVGhlbiBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgd2lsbCByZXN1bWUgY2hlcnJ5LXBpY2tpbmdcbiIKKyJ0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iCittc2dzdHIgIiIKKyLOkc69IM64zq3Ou861z4TOtSDOvc6xIM+Az4HOv8+Dz4DOtc+BzqzPg861z4TOtSDOsc+Fz4TOriDPhM63zr0gz4XPgM6/zrLOv867zq4sIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrU6XG4iCisiXG4iCisiICAgIGdpdCByZXNldFxuIgorIlxuIgorIs6Iz4DOtc65z4TOsSDOvM61IFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiDOuM6xIM+Dz4XOvc61z4fOr8+DzrXPhM61IM+EzrfOvSDOtc+AzrnOu861zrrPhM65zrrOriAiCisizrTOuc6xzrvOv86zzq5cbiIKKyLPhM+Jzr0gz4XPgM+MzrvOv865z4DPic69IM+Fz4DOv86yzr/Ou8+Ozr0uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzEyCittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzUzCittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNTkKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzczCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNzUKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQwMCBidWlsdGluL2NvbW1pdC5jOjQyMyBidWlsdGluL2NvbW1pdC5jOjQ2OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ1MgorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ1NAorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2MgorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4MQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICLOtyDPhc+Azr/Oss6/zrvOriAnJXMnIM60zrUgzrTOuc6xzrjOrc+EzrXOuSDOtc+AzrnOus61z4bOsc67zq/OtM6xIM60zrfOvM65zr/Phc+BzrPOv8+NIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBoYXMgbWFsZm9ybWVkIGF1dGhvciBsaW5lIgorbXNnc3RyICLOtyDPhc+Azr/Oss6/zrvOriAnJXMnIM6tz4fOtc65IM61z4PPhs6xzrvOvM6tzr3OtyDOs8+BzrHOvM68zq4gzrTOt868zrnOv8+Fz4HOs86/z40iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjAwCittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY1MgorbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Njg5IGJ1aWx0aW4vY29tbWl0LmM6NzIyIGJ1aWx0aW4vY29tbWl0LmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwMSBidWlsdGluL3Nob3J0bG9nLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzM2IGJ1aWx0aW4vY29tbWl0LmM6NzQ0Cittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc0MQorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc5NQorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisizqbOsc6vzr3Otc+EzrHOuSDPgM+Jz4IgzrzOrM67zrvOv869IM+Fz4DOv86yzqzOu867zrXPhM61IM68zrnOsSDPg8+FzrPPh8+Ozr3Otc+Fz4POty5cbiIKKyLOkc69IM6xz4XPhM+MIM60zrXOvSDOtc6vzr3Osc65IM+Dz4nPg8+Ez4wsIM+AzrHPgc6xzrrOsc67z44gzrHPhs6xzrnPgc6tz4PPhM61IM+Ezr8gzrHPgc+HzrXOr86/XG4iCisiXHQlc1xuIgorIs66zrHOuSDPgM+Bzr/Pg8+AzrHOuM6uz4PPhM61IM6+zrHOvc6sLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyLOps6xzq/Ovc61z4TOsc65IM+Az4nPgiDOvM6szrvOu86/zr0gz4XPgM6/zrLOrM67zrvOtc+EzrUgzrzOuc6xIM61z4DOuc67zrXOus+EzrnOus6uIM60zrnOsc67zr/Os86uLlxuIgorIs6Rzr0gzrHPhc+Ez4wgzrTOtc69IM61zq/Ovc6xzrkgz4PPic+Dz4TPjCwgz4DOsc+BzrHOus6xzrvPjiDOsc+GzrHOuc+Bzq3Pg8+EzrUgz4TOvyDOsc+Bz4fOtc6vzr9cbiIKKyJcdCVzXG4iCisizrrOsc65IM+Az4HOv8+Dz4DOsc64zq7Pg8+EzrUgzr7Osc69zqwuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyLOoM6xz4HOsc66zrHOu8+OIM61zrnPg86szrPOtc+EzrUgz4TOvyDOvM6uzr3Phc68zrEgz4XPgM6/zrLOv867zq7PgiDOs865zrEgz4TOuc+CIM6xzrvOu86xzrPOrc+CIM+DzrHPgi4gzp/OuSDOs8+BzrHOvM68zq3PgiDPgM6/z4UgIgorIs6xz4HPh86vzrbOv8+Fzr1cbiIKKyLOvM61ICclYycgzrHOs869zr/Ov8+Nzr3PhM6xzrksIM66zrHOuSDOvM61IM66zrXOvc+MIM68zq7Ovc+FzrzOsSDOtc6zzrrOsc+EzrHOu861zq/PgM61z4TOtSDPhM63zr0gz4XPgM6/zrLOv867zq4uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisizqDOsc+BzrHOus6xzrvPjiDOtc65z4POrM6zzrXPhM61IM+Ezr8gzrzOrs69z4XOvM6xIM+Fz4DOv86yzr/Ou86uz4IgzrPOuc6xIM+EzrnPgiDOsc67zrvOsc6zzq3PgiDPg86xz4IuIM6fzrkgzrPPgc6xzrzOvM6tz4Igz4DOv8+FICIKKyLOsc+Bz4fOr862zr/Phc69XG4iCisizrzOtSAnJWMnIM64zrEgzrTOuc6xz4TOt8+BzrfOuM6/z43OvSwgzrzPgM6/z4HOtc6vz4TOtSDOvc6xIM+EzrnPgiDOsc+GzrHOuc+Bzq3Pg861z4TOtSDOvM61z4TOrCDOsc69IM64zq3Ou861z4TOtS5cbiIKKyLOnM61IM66zrXOvc+MIM68zq7Ovc+FzrzOsSDOtc6zzrrOsc+EzrHOu861zq/PgM61z4TOtSDPhM63zr0gz4XPgM6/zrLOv867zq4uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPOlM63zrzOuc6/z4XPgc6zz4zPgjogICAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXPOl868zrXPgc6/zrzOt869zq/OsTogICAgICAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc86lz4DOv86yzqzOu867z4nOvTogJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODg5Cittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5NTYKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk3MCBidWlsdGluL3RhZy5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIs6gzrHPgc6xzrrOsc67z44gzrXOuc+DzqzOs861z4TOtSDPhM6/IM68zq7Ovc+FzrzOsSDPh8+BzrfPg865zrzOv8+Azr/Ouc+Ozr3PhM6xz4Igz4TOt869IM61z4DOuc67zr/Os86uIC1tIM6uIC1GLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1hdXRob3IgJyVzJyBpcyBub3QgJ05hbWUgPGVtYWlsPicgYW5kIG1hdGNoZXMgbm8gZXhpc3RpbmcgYXV0aG9yIgorbXNnc3RyICIiCisiLS1hdXRob3IgJyVzJyDOtM61zr0gzrXOr869zrHOuSAnzozOvc6/zrzOsSA8ZW1haWw+JyDOus6xzrkgzrTOtc69IM+EzrHOuc+BzrnOrM62zrXOuSDOvM61IM66zqzPgM6/zrnOv869ICIKKyLPhc+AzqzPgc+Hzr/Ovc+EzrEgzrTOt868zrnOv8+Fz4HOs8+MIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpZ25vcmVkIG1vZGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNDIgYnVpbHRpbi9jb21taXQuYzoxMjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODAKK21zZ2lkICItLWxvbmcgYW5kIC16IGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbG9uZyDOus6xzrkgLXogzrXOr869zrHOuSDOsc+Dz43OvM6yzrHPhM6xIM68zrXPhM6xzr7PjSDPhM6/z4XPgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTEzCittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAizpcgz4fPgc6uz4POtyDPhM+Jzr0gLS1yZXNldC1hdXRob3IgzrrOsc65IC0tYXV0aG9yIM+EzrHPhc+Ez4zPh8+Bzr/Ovc6xIM60zrXOvSDOrc+HzrXOuSDOvc+MzrfOvM6xIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMjIKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAizpTOtc69IM6tz4fOtc+EzrUgz4TOr8+Azr/PhM6xIM+Az4HOv8+CIM+Ez4HOv8+Azr/PgM6/zq/Ot8+DzrcuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMjUKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLOks+Bzq/Pg866zrXPg8+EzrUgz4PPhM63IM68zq3Pg863IM68zrnOsc+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IgLS0gzrTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM+Ez4HOv8+Azr/PgM6/zq/Ot8+DzrcuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMjcKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICIiCisizpLPgc6vz4POus61z4PPhM61IM+Dz4TOtyDOvM6tz4POtyDOvM65zrHPgiDOtc+AzrnOu861zrrPhM65zrrOrs+CIM60zrnOsc67zr/Os86uz4IgLS0gzrTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63ICIKKyLPhM+Bzr/PgM6/z4DOv86vzrfPg863LiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTMwCittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNDAKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNDIKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE1MAorbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIi0tcmVzZXQtYXV0aG9yIM68z4DOv8+BzrXOryDOvc6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zrfOuM61zq8gzrzPjM69zr8gzrzOtSAtQywgLWMgzq4gLS1hbWVuZC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2NworbXNnaWQgIk9ubHkgb25lIG9mIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjkKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgzIGJ1aWx0aW4vdGFnLmM6NTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4OAorbXNnaWQgIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzE0IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OAorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMTYgYnVpbHRpbi9jb21taXQuYzoxNTAwCittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzE4Cittc2dpZCAic2hvdyBzdGFzaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjAgYnVpbHRpbi9jb21taXQuYzoxNTAyCittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzIyCittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjIgYnVpbHRpbi9jb21taXQuYzoxNTA0IGJ1aWx0aW4vcHVzaC5jOjU2MQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY0MAorbXNnaWQgIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IgorbXNnc3RyICLOrc6+zr/OtM6/z4Igz4POtSDOvM63z4fOsc69zrnOus6sIM6xzr3Osc6zzr3Pjs+DzrnOvM63IM68zr/Pgc+Gzq4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyNSBidWlsdGluL2NvbW1pdC5jOjE1MDYKK21zZ2lkICJzaG93IHN0YXR1cyBpbiBsb25nIGZvcm1hdCAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzI4IGJ1aWx0aW4vY29tbWl0LmM6MTUwOQorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzMCBidWlsdGluL2NvbW1pdC5jOjEzMzQgYnVpbHRpbi9jb21taXQuYzoxNTEyCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTA4NSBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTA4OCBidWlsdGluL3JlYmFzZS5jOjExMTgKKyM6IGJ1aWx0aW4vdGFnLmM6NDAwCittc2dpZCAibW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzEgYnVpbHRpbi9jb21taXQuYzoxNTEyCittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzNQorbXNnaWQgIiIKKyJzaG93IGlnbm9yZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAoRGVmYXVsdDogIgorInRyYWRpdGlvbmFsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzcgcGFyc2Utb3B0aW9ucy5oOjE2NAorbXNnaWQgIndoZW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM4Cittc2dpZCAiIgorImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MAorbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQxCittc2dpZCAiZG8gbm90IGRldGVjdCByZW5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MworbXNnaWQgImRldGVjdCByZW5hbWVzLCBvcHRpb25hbGx5IHNldCBzaW1pbGFyaXR5IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MworbXNnaWQgIlVuc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIGlnbm9yZWQgYW5kIHVudHJhY2tlZC1maWxlcyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDY4Cittc2dpZCAic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NjkKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDcxCittc2dpZCAiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIKK21zZ3N0ciAizpXPgM65zrvOv86zzq3PgiDOvM63zr3Pjc68zrHPhM6/z4Igz4XPgM6/zrLOv867zq7PgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDcyIGJ1aWx0aW4vbWVyZ2UuYzoyNjQgYnVpbHRpbi90YWcuYzozOTcKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3MworbXNnaWQgImF1dGhvciIKK21zZ3N0ciAizrTOt868zrnOv8+Fz4HOs8+Mz4IiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3MworbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3NCBidWlsdGluL2djLmM6NTE4Cittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzQKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc1IGJ1aWx0aW4vbWVyZ2UuYzoyNjAgYnVpbHRpbi9ub3Rlcy5jOjQwOQorIzogYnVpbHRpbi9ub3Rlcy5jOjU3NSBidWlsdGluL3RhZy5jOjM5NQorbXNnaWQgIm1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc1Cittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIs68zq7Ovc+FzrzOsSDPhc+Azr/Oss6/zrvOrs+CIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzYgYnVpbHRpbi9jb21taXQuYzoxNDc3IGJ1aWx0aW4vY29tbWl0LmM6MTQ3OAorIzogYnVpbHRpbi9jb21taXQuYzoxNDc5IHBhcnNlLW9wdGlvbnMuaDoyNzggcmVmLWZpbHRlci5oOjkyCittc2dpZCAiY29tbWl0IgorbXNnc3RyICLPhc+Azr/Oss6/zrvOriIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc2Cittc2dpZCAicmV1c2UgYW5kIGVkaXQgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc3Cittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc4Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzkKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODAKK21zZ2lkICJ0aGUgY29tbWl0IGlzIGF1dGhvcmVkIGJ5IG1lIG5vdyAodXNlZCB3aXRoIC1DLy1jLy0tYW1lbmQpIgorbXNnc3RyICLOtyDPhc+Azr/Oss6/zrvOriDOrc+HzrXOuSDOtM63zrzOuc6/z4XPgc6zz4wgzrXOvM6tzr3OsSDPhM+Oz4HOsSAoz4fPgc63z4POuc68zr/PgM6/zrnOtc6vz4TOsc65IM68zrUgLUMvLWMvLS1hbWVuZCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4MSBidWlsdGluL2xvZy5jOjE1MzMgYnVpbHRpbi9tZXJnZS5jOjI3NworIzogYnVpbHRpbi9wdWxsLmM6MTU2IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA3Cittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4MgorbXNnaWQgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODMKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODQKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4NCBidWlsdGluL3RhZy5jOjQwMQorbXNnaWQgImhvdyB0byBzdHJpcCBzcGFjZXMgYW5kICNjb21tZW50cyBmcm9tIG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDg1Cittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDg3IGJ1aWx0aW4vbWVyZ2UuYzoyNzUgYnVpbHRpbi9wdWxsLmM6MTg2CisjOiBidWlsdGluL3JldmVydC5jOjExNQorbXNnaWQgIkdQRyBzaWduIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTAKK21zZ2lkICJDb21taXQgY29udGVudHMgb3B0aW9ucyIKK21zZ3N0ciAizpXPgM65zrvOv86zzq3PgiDPgM61z4HOuc61z4fOv868zq3Ovc+Jzr0gz4XPgM6/zrLOv867zq7PgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkxCittc2dpZCAiY29tbWl0IGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICLOvc6xIM6zzq/Ovc61zrkgz4XPgM6/zrLOv867zq4gz4zOu8+Jzr0gz4TPic69IM6xzrvOu86xzrPOvM6tzr3Pic69IM6xz4HPh861zq/Pic69IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTIKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkzCittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk0Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTUKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgIs69zrEgzrPOr869zrXOuSDPhc+Azr/Oss6/zrvOriDOvM+Mzr3OvyDPhM+Jzr0gzrTOv864zq3Ovc+Ez4nOvSDOsc+Bz4fOtc6vz4nOvSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk2Cittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk3Cittc2dpZCAic2hvdyB3aGF0IHdvdWxkIGJlIGNvbW1pdHRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTAKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIs+Ez4HOv8+Azr/PgM6/zq/Ot8+Dzrcgz4TOt8+CIM+Az4HOv863zrPOv8+NzrzOtc69zrfPgiDPhc+Azr/Oss6/zrvOrs+CIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTEKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE2Cittc2dpZCAib2sgdG8gcmVjb3JkIGFuIGVtcHR5IGNoYW5nZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTgKK21zZ2lkICJvayB0byByZWNvcmQgYSBjaGFuZ2Ugd2l0aCBhbiBlbXB0eSBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5OAorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAizpXOs866zrHPhM6szrvOtc65z4jOtyDPhM63z4Igz4XPgM6/zrLOv867zq7PgiDOu8+MzrPPiSDOus61zr3Ov8+NIM68zrfOvc+NzrzOsc+Ezr/PgiDPhc+Azr/Oss6/zrvOrs+CLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICLOlc6zzrrOsc+EzqzOu861zrnPiM63IM+EzrfPgiDPhc+Azr/Oss6/zrvOrs+CLCDOtM61zr0gzrXPgM61zr7Otc+BzrPOsc+Dz4TOrs66zrHPhM61IM+Ezr8gzrzOrs69z4XOvM6xLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NjgKK21zZ2lkICIiCisicmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBhbmQgcXVvdGEgaXNcbiIKKyJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc2V0IEhFQURcIiB0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorIs+Ezr8gzrHPgM6/zrjOtc+Ezq7Pgc65zr8gzrXOvc63zrzOtc+Bz47OuM63zrrOtSwgzrHOu867zqwgzrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDOvc6xIM6zz4HOsc+GzrXOr1xuIgorIs+Ezr8gzrHPgc+HzrXOr86/IG5ld19pbmRleC4gzpXOu86tzrPOvs+EzrUgz4DPic+CIM6/IM60zq/Pg866zr/PgiDOtM61zr0gzrXOr869zrHOuSDOs861zrzOrM+Ezr/PgiDOus6xzrkgz4DPic+CXG4iCisizrTOtc69IM+Fz4DOrM+Bz4fOtc65IM+Fz4DOrc+BzrLOsc+Dzrcgzr/Pgc6vzr/PhSwgzrrOsc65IM68zrXPhM6sIM66zqzOvc+EzrUgXCJnaXQgcmVzZXQgSEVBRFwiIM6zzrnOsSDOsc69zqzOus+EzrfPg863LiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMAorbXNnaWQgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCittc2dzdHIgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA8z4bOrM66zrXOu86/z4IgzrHOvc+EzrnOus61zrnOvM6tzr3Pic69Pl0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoyMworbXNnaWQgImdpdCBjb21taXQtZ3JhcGggcmVhZCBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIKK21zZ3N0ciAiZ2l0IGNvbW1pdC1ncmFwaCByZWFkIFstLW9iamVjdC1kaXIgPM+GzqzOus61zrvOv8+CIM6xzr3PhM65zrrOtc65zrzOrc69z4nOvT5dIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTgKK21zZ2lkICJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIKK21zZ3N0ciAiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8z4bOrM66zrXOu86/z4IgzrHOvc+EzrnOus61zrnOvM6tzr3Pic69Pl0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTMgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoyOAorbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHdyaXRlIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLWFwcGVuZF0gWy0tcmVhY2hhYmxlfC0tIgorInN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHdyaXRlIFstLW9iamVjdC1kaXIgPM+GzqzOus61zrvOv8+CIM6xzr3PhM65zrrOtc65zrzOrc69z4nOvT5dIFstLWFwcGVuZF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NDggYnVpbHRpbi9jb21taXQtZ3JhcGguYzo3OAorIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzIgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxOTAgYnVpbHRpbi9mZXRjaC5jOjE1MworIzogYnVpbHRpbi9sb2cuYzoxNTUzCittc2dpZCAiZGlyIgorbXNnc3RyICLPhs6szrrOtc67zr/PgiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo0OSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjc5CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzMyBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE5MQorbXNnaWQgIlRoZSBvYmplY3QgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBncmFwaCIKK21zZ3N0ciAizp8gz4bOrM66zrXOu86/z4IgzrHOvc+EzrnOus61zrnOvM6tzr3Pic69IM+Azr/PhSDOuM6xIM6xz4DOv864zrfOus61z4XPhM61zq8gzr8gzrPPgc6sz4bOv8+CIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNQorbXNnaWQgInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzcKK21zZ2lkICJzY2FuIHBhY2staW5kZXhlcyBsaXN0ZWQgYnkgc3RkaW4gZm9yIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzkKK21zZ2lkICJzdGFydCB3YWxrIGF0IGNvbW1pdHMgbGlzdGVkIGJ5IHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTQxCittc2dpZCAiaW5jbHVkZSBhbGwgY29tbWl0cyBhbHJlYWR5IGluIHRoZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE1MAorbXNnaWQgInVzZSBhdCBtb3N0IG9uZSBvZiAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzLCBvciAtLXN0ZGluLXBhY2tzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTEKK21zZ2lkICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29uZmlnIFs8zrXPgM65zrvOv86zzq3Pgj5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgLS10eXBlIGFyZ3VtZW50LCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExNQorbXNnaWQgIm9ubHkgb25lIHR5cGUgYXQgYSB0aW1lIgorbXNnc3RyICLOvM+Mzr3OvyDOrc69zrHPgiDPhM+Nz4DOv8+CIM66zqzOuM61IM+Gzr/Pgc6sIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNAorbXNnaWQgIkNvbmZpZyBmaWxlIGxvY2F0aW9uIgorbXNnc3RyICLOpM6/z4DOv864zrXPg86vzrEgzrHPgc+HzrXOr86/z4Ugz4HPhc64zrzOr8+DzrXPic69IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNQorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgIs69zrEgzrPOr869zrXOuSDPh8+Bzq7Pg863IM+Ezr/PhSDOus6xzrjOv867zrnOus6/z40gzrHPgc+HzrXOr86/z4Ugz4HPhc64zrzOr8+DzrXPic69IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNgorbXNnaWQgInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiCittc2dzdHIgIs69zrEgzrPOr869zrXOuSDPh8+Bzq7Pg863IM+Ezr/PhSDOsc+Bz4fOtc6vzr/PhSDPgc+FzrjOvM6vz4POtc+Jzr0gz4PPhc+Dz4TOrs68zrHPhM6/z4IiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI3Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgIs69zrEgzrPOr869zrXOuSDPh8+Bzq7Pg863IM+Ezr/PhSDOsc+Bz4fOtc6vzr/PhSDPgc+FzrjOvM6vz4POtc+Jzr0gzrHPgM6/zrjOtc+EzrfPgc6vzr/PhSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjgKK21zZ2lkICJ1c2UgcGVyLXdvcmt0cmVlIGNvbmZpZyBmaWxlIgorbXNnc3RyICLOvc6xIM6zzq/Ovc61zrkgz4fPgc6uz4POtyDOsc+Bz4fOtc6vzr/PhSDPgc+FzrjOvM6vz4POtc+Jzr0gzrHOvc6sIM60zq3Ovc+Ez4HOvyDOtc+BzrPOsc+Dzq/Osc+CIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOQorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAizr3OsSDOs86vzr3Otc65IM+Hz4HOrs+Dzrcgz4TOv8+FIM60zr/OuM6tzr3PhM6/z4IgzrHPgc+HzrXOr86/z4Ugz4HPhc64zrzOr8+DzrXPic69IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMAorbXNnaWQgImJsb2ItaWQiCittc2dzdHIgIs6xzr3Osc6zzr3Pic+BzrnPg8+EzrnOus+MIGJsb2IiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAizrHOvc6szrPOvc+Jz4POtyDPgc+FzrjOvM6vz4POtc+Jzr0gzrHPgM+MIM+Ezr8gzrTOv864zq3OvSDOsc69z4TOuc66zrXOr868zrXOvc6/IGJsb2IiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMxCittc2dpZCAiQWN0aW9uIgorbXNnc3RyICLOlc69zq3Pgc6zzrXOuc6xIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMgorbXNnaWQgImdldCB2YWx1ZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMzCittc2dpZCAiZ2V0IGFsbCB2YWx1ZXM6IGtleSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM0Cittc2dpZCAiZ2V0IHZhbHVlcyBmb3IgcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzUKK21zZ2lkICJnZXQgdmFsdWUgc3BlY2lmaWMgZm9yIHRoZSBVUkw6IHNlY3Rpb25bLnZhcl0gVVJMIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM2Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzcKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzgKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM5Cittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDAKK21zZ2lkICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDEKK21zZ2lkICJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQyCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDMKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NAorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ1Cittc2dpZCAiZmluZCB0aGUgY29sb3Igc2V0dGluZzogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDYKK21zZ2lkICJUeXBlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ3Cittc2dpZCAidmFsdWUgaXMgZ2l2ZW4gdGhpcyB0eXBlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ4Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ5Cittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTAKK21zZ2lkICJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTEKK21zZ2lkICJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUyCittc2dpZCAidmFsdWUgaXMgYW4gZXhwaXJ5IGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTMKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAizobOu867zr8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU0Cittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU1Cittc2dpZCAic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU2Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU3Cittc2dpZCAic2hvdyBvcmlnaW4gb2YgY29uZmlnIChmaWxlLCBzdGFuZGFyZCBpbnB1dCwgYmxvYiwgY29tbWFuZCBsaW5lKSIKK21zZ3N0ciAiIgorIs+Az4HOv86yzr/Ou86uIM+Az4HOv86tzrvOtc+Fz4POt8+CIM+Bz4XOuM68zq/Pg861z4nOvSAozrHPgc+HzrXOr86/LCBzdGFuZGFyZCBpbnB1dCwgYmxvYiwgzrPPgc6xzrzOvM6uIM61zr3PhM6/zrvPjs69KSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTgKK21zZ2lkICJ2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OAorbXNnaWQgIndpdGggLS1nZXQsIHVzZSBkZWZhdWx0IHZhbHVlIHdoZW4gbWlzc2luZyBlbnRyeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlIGZyb20gJWQgdG8gJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZvcm1hdCBkZWZhdWx0IGNvbmZpZyB2YWx1ZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGNvbG9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo0NDMKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ5NiBidWlsdGluL2NvbmZpZy5jOjc0MgorbXNnaWQgIm5vdCBpbiBhIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo0OTkKK21zZ2lkICJ3cml0aW5nIHRvIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MDIKK21zZ2lkICJ3cml0aW5nIGNvbmZpZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICLOtyDOtc6zzrPPgc6xz4bOriBibG9iIM+Bz4XOuM68zq/Pg8+Jzr0gzrTOtc69IM+Fz4DOv8+Dz4TOt8+Bzq/Ots61z4TOsc65IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIyBUaGlzIGlzIEdpdCdzIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiIKKyJbdXNlcl1cbiIKKyIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjExCittc2dpZCAib25seSBvbmUgY29uZmlnIGZpbGUgYXQgYSB0aW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjE2Cittc2dpZCAiLS1sb2NhbCBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICLPhM6/IC0tbG9jYWwgzrzPgM6/z4HOtc6vIM69zrEgz4fPgc63z4POuc68zr/PgM6/zrnOt864zrXOryDOvM+Mzr3OvyDOvM6tz4POsSDPg861IM6xz4DOv864zrXPhM6uz4HOuc6/IGdpdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTkKK21zZ2lkICItLWJsb2IgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiz4TOvyAtLWJsb2IgzrzPgM6/z4HOtc6vIM69zrEgz4fPgc63z4POuc68zr/PgM6/zrnOt864zrXOryDOvM+Mzr3OvyDOvM6tz4POsSDPg861IM6xz4DOv864zrXPhM6uz4HOuc6/IGdpdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MzgKK21zZ2lkICIkSE9NRSBub3Qgc2V0IgorbXNnc3RyICLOpM6/ICRIT01FIM60zrXOvSDOrc+HzrXOuSDOv8+BzrnPg8+EzrXOryIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NTgKK21zZ2lkICIiCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Njg4Cittc2dpZCAiLS1nZXQtY29sb3IgYW5kIHZhcmlhYmxlIHR5cGUgYXJlIGluY29oZXJlbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OTMKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzA2Cittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTIKK21zZ2lkICIiCisiLS1zaG93LW9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwLCBhbmQgLS0iCisibGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxOAorbXNnaWQgIi0tZGVmYXVsdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29uZmlnIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczNAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDQKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDYKK21zZ2lkICJlZGl0aW5nIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIs63IM60zrnPjM+BzrjPic+DzrcgYmxvYiDOtM61zr0gz4XPgM6/z4PPhM63z4HOr862zrXPhM6xzrkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3Qgb3ZlcndyaXRlIG11bHRpcGxlIHZhbHVlcyB3aXRoIGEgc2luZ2xlIHZhbHVlXG4iCisiICAgICAgIFVzZSBhIHJlZ2V4cCwgLS1hZGQgb3IgLS1yZXBsYWNlLWFsbCB0byBjaGFuZ2UgJXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODQ3IGJ1aWx0aW4vY29uZmlnLmM6ODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggc2VjdGlvbjogJXMiCittc2dzdHIgIs60zrXOvSDPhc+AzqzPgc+HzrXOuSDPhM6tz4TOv865zrEgzrXOvc+Mz4TOt8+EzrE6ICVzIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5MAorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjEwMAorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gWzxjb21taXQtaXNoPi4uLl0iCittc2dzdHIgImdpdCBkZXNjcmliZSBbPM61z4DOuc67zr/Os86tz4I+XSBbPM+Fz4DOv86yzr/Ou86uIM6uIM+GzrHOuc69zr/OvM61zr3Ouc66zq4+Li4uXSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIC0tZGlydHkiCittc2dzdHIgImdpdCBkZXNjcmliZSBbPM61z4DOuc67zr/Os86tz4I+XSAtLWRpcnR5IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjMKK21zZ2lkICJoZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MworbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MworbXNnaWQgImFubm90YXRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICLOus6xzrzOr86xIM61z4TOuc66zq3PhM6xIM60zrXOvSDPhM6xzrnPgc65zqzOts61zrkgzrHOus+BzrnOss+Oz4IgzrzOtSDPhM6/ICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKyLOms6xzrzOr86xIM+Dz4fOv867zrnOsc+DzrzOrc69zrcgzrXPhM65zrrOrc+EzrEgzrTOtc69IM+AzrXPgc65zrPPgc6sz4bOtc65IM+Ezr8gJyVzJy5cbiIKKyLOoM6sz4HOsc+Fz4TOsSwgz4XPgM6uz4HPh86xzr0gzrzOtyDPg8+Hzr/Ou865zrHPg868zq3Ovc61z4IgzrXPhM65zrrOrc+EzrXPgjogzrTOv866zrnOvM6sz4PPhM61IM+Ezr8gLS10YWdzLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgorbXNnc3RyICIiCisizprOsc68zq/OsSDOtc+EzrnOus6tz4TOsSDOtM61zr0gz4DOtc+BzrnOs8+BzqzPhs61zrkgz4TOvyAnJXMnLlxuIgorIs6Uzr/Ous65zrzOrM+Dz4TOtSDPhM6/IC0tYWx3YXlzLCDOriDOtM63zrzOuc6/z4XPgc6zzq7Pg8+EzrUgzrXPhM65zrrOrc+EzrXPgi4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUxMAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXNjcmliZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MTMgYnVpbHRpbi9sb2cuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIs6czrcgzq3Os866z4XPgc6/IM+Mzr3Ov868zrEgzrHOvc+EzrnOus61zrnOvM6tzr3Ov8+FICVzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5laXRoZXIgYSBjb21taXQgbm9yIGJsb2IiCittc2dzdHIgIiVzIM60zrXOvSDOtc6vzr3Osc65IM6/z43PhM61IM+Fz4DOv86yzr/Ou86uIM6/z43PhM61IGJsb2IiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzUKK21zZ2lkICJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzYKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzcKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAizr3OsSDOs86vzr3Otc65IM+Hz4HOrs+Dzrcgzr/PgM6/zrnOv8+FzrTOrs+Azr/PhM61IHJlZiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzOAorbXNnaWQgInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIgorbXNnc3RyICLOvc6xIM6zzq/Ovc61zrkgz4fPgc6uz4POtyDOv8+Azr/Ouc6xz4POtM6uz4DOv8+EzrUgzrXPhM65zrrOrc+EzrHPgiwgzrHOus+MzrzOsSDOus6xzrkgzrzOtyDPg8+Hzr/Ou865zrHPg868zq3Ovc63z4IiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzkKK21zZ2lkICJhbHdheXMgdXNlIGxvbmcgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDAKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MworbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0NQorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0NworbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0OQorbXNnaWQgImRvIG5vdCBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUxIGJ1aWx0aW4vbmFtZS1yZXYuYzo0MjQKK21zZ2lkICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MiBidWlsdGluL2Rlc2NyaWJlLmM6NTU1Cittc2dpZCAibWFyayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUzCittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTYKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGJyb2tlbiB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWJyb2tlblwiKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTc0Cittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYwMworbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NTQKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjU2Cittc2dpZCAiLS1icm9rZW4gaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzY0Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIs6UzrXOvSDOtc6vzr3Osc65IM6xz4DOv864zrXPhM6uz4HOuc6/IGdpdCIKKworIzogYnVpbHRpbi9kaWZmLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIgorbXNnc3RyICLOtM+MzrjOt866zrHOvSDPgM61z4HOuc+Dz4PPjM+EzrXPgc6xIM6xz4DPjCDOtM+Nzr8gYmxvYjogJyVzJyIKKworIzogYnVpbHRpbi9kaWZmLmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMxCittc2dpZCAiZ2l0IGRpZmZ0b29sIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZGlmZnRvb2wgWzzOtc+AzrnOu86/zrPOrc+CPl0gWzzPhc+Azr/Oss6/zrvOrj4gWzzPhc+Azr/Oss6/zrvOrj5dXSBbLS1dIFs8zrTOuc6xzrTPgc6/zrzOrj4uLi5dIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZDogJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIGZvciBzeW1saW5rICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo0MTQKK21zZ2lkICIiCisiY29tYmluZWQgZGlmZiBmb3JtYXRzKCctYycgYW5kICctLWNjJykgYXJlIG5vdCBzdXBwb3J0ZWQgaW5cbiIKKyJkaXJlY3RvcnkgZGlmZiBtb2RlKCctZCcgYW5kICctLWRpci1kaWZmJykuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm90aCBmaWxlcyBtb2RpZmllZDogJyVzJyBhbmQgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNgorbXNnaWQgIndvcmtpbmcgdHJlZSBmaWxlIGhhcyBiZWVuIGxlZnQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcG9yYXJ5IGZpbGVzIGV4aXN0IGluICclcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDgKK21zZ2lkICJ5b3UgbWF5IHdhbnQgdG8gY2xlYW51cCBvciByZWNvdmVyIHRoZXNlLiIKK21zZ3N0ciAizrzPgM6/z4HOtc6vz4TOtSDOvc6xIM60zr/Ous65zrzOrM+DzrXPhM61IM69zrEgz4TOsSDOtc66zrrOsc64zrHPgc6vz4POtc+EzrUgzq4gzr3OsSDPhM6xIM6xzr3Osc66z4TOrs+DzrXPhM61LiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5NworbXNnaWQgInVzZSBgZGlmZi5ndWl0b29sYCBpbnN0ZWFkIG9mIGBkaWZmLnRvb2xgIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTkKK21zZ2lkICJwZXJmb3JtIGEgZnVsbC1kaXJlY3RvcnkgZGlmZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzAxCittc2dpZCAiZG8gbm90IHByb21wdCBiZWZvcmUgbGF1bmNoaW5nIGEgZGlmZiB0b29sIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDYKK21zZ2lkICJ1c2Ugc3ltbGlua3MgaW4gZGlyLWRpZmYgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA3Cittc2dpZCAidG9vbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA4Cittc2dpZCAidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTAKK21zZ2lkICJwcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggYC0tdG9vbGAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxMworbXNnaWQgIiIKKyJtYWtlICdnaXQtZGlmZnRvb2wnIGV4aXQgd2hlbiBhbiBpbnZva2VkIGRpZmYgdG9vbCByZXR1cm5zIGEgbm9uIC0gemVybyBleGl0ICIKKyJjb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTYKK21zZ2lkICJzcGVjaWZ5IGEgY3VzdG9tIGNvbW1hbmQgZm9yIHZpZXdpbmcgZGlmZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc0MAorbXNnaWQgIm5vIDx0b29sPiBnaXZlbiBmb3IgLS10b29sPTx0b29sPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzQ3Cittc2dpZCAibm8gPGNtZD4gZ2l2ZW4gZm9yIC0tZXh0Y21kPTxjbWQ+IgorbXNnc3RyICLOtM61IM60z4zOuM63zrrOtSA8zrXOvc+Ezr/Ou86uPiDOs865zrEgz4TOvyAtLWV4dGNtZD08zrXOvc+Ezr/Ou86uPiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjI5Cittc2dpZCAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKK21zZ3N0ciAiZ2l0IGZhc3QtZXhwb3J0IFvOtc+AzrnOu86/zrPOrc+CIM+AzrHPgc6szrjOtc+DzrfPgiDOtc66zrTPjM+DzrXPic69XSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwODQKK21zZ2lkICJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDg2Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHNpZ25lZCB0YWdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDg5Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTA5MgorbXNnaWQgIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDk0Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDk2Cittc2dpZCAiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwOTgKK21zZ2lkICJPdXRwdXQgZnVsbCB0cmVlIGZvciBlYWNoIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTEwMAorbXNnaWQgIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTAxCittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICLOoM+Bzr/Pg8+Azq3Pgc6xz4POtyDOtc6+z4zOtM6/z4Ugz4TPic69IM60zrXOtM6/zrzOrc69z4nOvSBibG9iIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTEwMiBidWlsdGluL2xvZy5jOjE2MDEKK21zZ2lkICJyZWZzcGVjIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTAzCittc2dpZCAiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTA0Cittc2dpZCAiYW5vbnltaXplIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTEwNgorbXNnaWQgIlJlZmVyZW5jZSBwYXJlbnRzIHdoaWNoIGFyZSBub3QgaW4gZmFzdC1leHBvcnQgc3RyZWFtIGJ5IG9iamVjdCBpZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTEwOAorbXNnaWQgIlNob3cgb3JpZ2luYWwgb2JqZWN0IGlkcyBvZiBibG9icy9jb21taXRzIgorbXNnc3RyICLOoM+Bzr/Oss6/zrvOriDOsc+Bz4fOuc66z47OvSDOsc69zrHOs869z4nPgc65z4PPhM65zrrPjs69IM+Ez4nOvSBibG9iL8+Fz4DOv86yzr/Ou8+Ozr0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyOAorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8zrXPgM65zrvOv86zzq3Pgj5dIFs8zrHPgM6/zrjOtc+Ezq7Pgc65zr8+IFs8cmVmc3BlYz4uLi5dXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI5Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cD4iCittc2dzdHIgImdpdCBmZXRjaCBbPM61z4DOuc67zr/Os86tz4I+XSA8zr/OvM6szrTOsT4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozMAorbXNnaWQgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPM61z4DOuc67zr/Os86tz4I+XSBbKDzOsc+Azr/OuM61z4TOrs+BzrnOvz4gfCA8zr/OvM6szrTOsT4pLi4uXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMxCittc2dpZCAiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1hbGwgWzzOtc+AzrnOu86/zrPOrc+CPl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTUgYnVpbHRpbi9wdWxsLmM6MTk1Cittc2dpZCAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAizr3OsSDOs86vzr3Otc65IM6xzr3OrM66z4TOt8+DzrcgzrHPgM+MIM+MzrvOv8+Fz4Igz4TOv8+Fz4IgzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr/Phc+CIM61zr7Phc+AzrfPgc61z4TOt8+Ezq3PgiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNyBidWlsdGluL3B1bGwuYzoxOTgKK21zZ2lkICJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExOSBidWlsdGluL3B1bGwuYzoyMDEKK21zZ2lkICJwYXRoIHRvIHVwbG9hZCBwYWNrIG9uIHJlbW90ZSBlbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMAorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMgorbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAizr3OsSDOs86vzr3Otc65IM6xzr3OrM66z4TOt8+DzrcgzrHPgM+MIM+Azr/Ou867zrHPgM67zr/Pjc+CIM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/z4XPgiDOtc6+z4XPgM63z4HOtc+EzrfPhM6tz4IiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjQgYnVpbHRpbi9wdWxsLmM6MjA1Cittc2dpZCAiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAizr3OsSDOs86vzr3Otc65IM6xzr3OrM66z4TOt8+Dzrcgz4zOu8+Jzr0gz4TPic69IM61z4TOuc66zrXPhM+Ozr0gzrrOsc65IM+Dz4fOtc+EzrnOus+Ozr0gzrHOvc+EzrnOus61zrnOvM6tzr3Pic69IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI2Cittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICLOvc6xIM68zrcgzrPOr869zrXOuSDOsc69zqzOus+EzrfPg863IM+MzrvPic69IM+Ez4nOvSDOtc+EzrnOus61z4TPjs69ICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI4Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgZmV0Y2hlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAizrHPgc65zrjOvM+Mz4Igz4XPgM6/zrXOvc6/z4TOrs+Ez4nOvSDPgM+Bzr/PgiDPgM6xz4HOrM67zrvOt867zrcgzrHOvc6szrrPhM63z4POtyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzMCBidWlsdGluL3B1bGwuYzoyMDgKK21zZ2lkICJwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm8gbG9uZ2VyIG9uIHJlbW90ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTMyCittc2dpZCAicHJ1bmUgbG9jYWwgdGFncyBubyBsb25nZXIgb24gcmVtb3RlIGFuZCBjbG9iYmVyIGNoYW5nZWQgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTMzIGJ1aWx0aW4vZmV0Y2guYzoxNTYgYnVpbHRpbi9wdWxsLmM6MTMzCittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzQKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLOrc67zrXOs8+Hzr/PgiDOsc69zrHOtM+Bzr/OvM65zrrOrs+CIM6xzr3OrM66z4TOt8+DzrfPgiDPhM+Jzr0gz4XPgM6/zrXOvc6/z4TOrs+Ez4nOvSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzOCBidWlsdGluL3B1bGwuYzoyMTYKK21zZ2lkICJrZWVwIGRvd25sb2FkZWQgcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQwCittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MyBidWlsdGluL2ZldGNoLmM6MTQ5IGJ1aWx0aW4vcHVsbC5jOjIxOQorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NQorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTEgYnVpbHRpbi9wdWxsLmM6MjIyCittc2dpZCAiY29udmVydCB0byBhIGNvbXBsZXRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NAorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NworbXNnaWQgIiIKKyJkZWZhdWx0IGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyAobG93ZXIgcHJpb3JpdHkgdGhhbiBjb25maWcgIgorImZpbGVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYxIGJ1aWx0aW4vcHVsbC5jOjIyNQorbXNnaWQgImFjY2VwdCByZWZzIHRoYXQgdXBkYXRlIC5naXQvc2hhbGxvdyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYyIGJ1aWx0aW4vcHVsbC5jOjIyNworbXNnaWQgInJlZm1hcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYzIGJ1aWx0aW4vcHVsbC5jOjIyOAorbXNnaWQgInNwZWNpZnkgZmV0Y2ggcmVmbWFwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9scy1yZW1vdGUuYzo3NyBidWlsdGluL3B1c2guYzo1ODUKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTcyCittc2dpZCAic2VydmVyLXNwZWNpZmljIgorbXNnc3RyICLOs865zrEgz4PPhc6zzrrOtc66z4HOuc68zq3Ovc6/IM61zr7Phc+AzrfPgc61z4TOt8+Ezq4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9scy1yZW1vdGUuYzo3NyBidWlsdGluL3B1c2guYzo1ODUKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTczCittc2dpZCAib3B0aW9uIHRvIHRyYW5zbWl0IgorbXNnc3RyICLOtc+AzrnOu86/zrPOriDOvc6xIM68zrXPhM6xzrTOv864zrXOryIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MAorbXNnaWQgInJlcG9ydCB0aGF0IHdlIGhhdmUgb25seSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRoaXMgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0NjkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZpZ3VyYXRpb24gZmV0Y2gub3V0cHV0IGNvbnRhaW5zIGludmFsaWQgdmFsdWUgJXMiCittc2dzdHIgIs63IM+Bz43OuM68zrnPg863IGZldGNoLm91dHB1dCDPgM61z4HOuc6tz4fOtc65IM68zrcgzq3Os866z4XPgc63IM+EzrnOvM6uICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcwOQorbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW8+AzrvOrs+Bz4nPgiDOtc69zq7OvM61z4HOv10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MjIgYnVpbHRpbi9mZXRjaC5jOjczOCBidWlsdGluL2ZldGNoLmM6ODAxCittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiW86xz4DOv8+Bz4HOr8+GzrjOt866zrVdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzIzCittc2dpZCAiY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjczMworbXNnaWQgIlt0YWcgdXBkYXRlXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzM0IGJ1aWx0aW4vZmV0Y2guYzo3NzEgYnVpbHRpbi9mZXRjaC5jOjc4NAorIzogYnVpbHRpbi9mZXRjaC5jOjc5NgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MzgKK21zZ2lkICJ3b3VsZCBjbG9iYmVyIGV4aXN0aW5nIHRhZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzYwCittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICJbzr3Orc6xIM61z4TOuc66zq3PhM6xXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2MworbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW869zq3Ov8+CIM66zrvOrM60zr/Pgl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NjYKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIlvOvc6tzr8gcmVmXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc5NgorbXNnaWQgImZvcmNlZCB1cGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwMQorbXNnaWQgIm5vbi1mYXN0LWZvcndhcmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg2OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWplY3QgJXMgYmVjYXVzZSBzaGFsbG93IHJvb3RzIGFyZSBub3QgYWxsb3dlZCB0byBiZSB1cGRhdGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NTkgYnVpbHRpbi9mZXRjaC5jOjEwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIs6Rz4DPjCDPhM6/ICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICjPhM6/ICVzIM64zrEgzrzOtc6vzr3Otc65IM61zrrOus+BzrXOvM6tz4IpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwODQKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwODUgYnVpbHRpbi9yZW1vdGUuYzoxMDM2Cittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorIs6Rz4HOvc6/z43OvM6xzrkgzr3OsSDOus6szr3PiSDOsc69zqzOus+EzrfPg863IM68zq3Pg86xIM+Dz4TOv869IM+Ez4HOrc+Hzr/Ovc+EzrEgzrrOu86szrTOvyAlcyDOvM63IM6zz4XOvM69zr/PjSDOsc+Azr/OuM61z4TOt8+Bzq/Ov8+FIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEyNworIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIHZhbHVlIFwiJXNcIiBpcyBub3QgdmFsaWQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICLOkc69zqzOus+EzrfPg863ICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDM2IGJ1aWx0aW4vcmVtb3RlLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAizpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDOsc69zqzOus+EzrfPg863IM+Ezr/PhSAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0ODIKK21zZ2lkICIiCisiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyJwYXJ0aWFsQ2xvbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MDYKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU0MworbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgIs6nz4HOtc65zqzOts61z4TOsc65IM69zrEgzr/Pgc6vz4POtc+EzrUgzq3Ovc6xIM+Mzr3Ov868zrEgzrXPhM65zrrOrc+EzrHPgi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTkyCittc2dpZCAiTmVnYXRpdmUgZGVwdGggaW4gLS1kZWVwZW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU5NAorbXNnaWQgIi0tZGVlcGVuIGFuZCAtLWRlcHRoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OTkKK21zZ2lkICItLWRlcHRoIGFuZCAtLXVuc2hhbGxvdyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYwMQorbXNnaWQgIi0tdW5zaGFsbG93IG9uIGEgY29tcGxldGUgcmVwb3NpdG9yeSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjE3Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2MTkKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorIs6UzrXOvSDPhc+AzqzPgc+HzrXOuSDPhM6tz4TOv865zr/PgiDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3Ov8+CIM61zr7Phc+AzrfPgc61z4TOt8+Ezq7PgiDOriDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OtyDOv868zqzOtM6xOiAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2MzUKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2NTEKK21zZ2lkICIiCisiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyJwYXJ0aWFsY2xvbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTgKK21zZ2lkICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzIKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc1Cittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzgKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3OQorbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2ODAKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTIKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMworbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM3Cittc2dpZCAic2hvdyBvbmx5IDxuPiBtYXRjaGVkIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOSBidWlsdGluL3RhZy5jOjQyNAorbXNnaWQgInJlc3BlY3QgZm9ybWF0IGNvbG9ycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQzCittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIHBvaW50cyBhdCB0aGUgZ2l2ZW4gb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDUKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDYKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ3Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ4Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo4OCBidWlsdGluL2ZzY2suYzoxNjAgYnVpbHRpbi9mc2NrLmM6MTYxCittc2dpZCAidW5rbm93biIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiBlcnJvciBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+CisjOiBidWlsdGluL2ZzY2suYzoxMjAgYnVpbHRpbi9mc2NrLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGluICVzICVzOiAlcyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiB3YXJuaW5nIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nIGluICVzICVzOiAlcyIKK21zZ3N0ciAiz4DPgc6/z4POv8+Hzq4gz4PPhM6/ICVzICVzOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MTU3IGJ1aWx0aW4vZnNjay5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJicm9rZW4gbGluayBmcm9tICU3cyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzoxNjgKK21zZ2lkICJ3cm9uZyBvYmplY3QgdHlwZSBpbiBsaW5rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgIHRvICU3cyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWFjaGFibGUgJXMgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImRhbmdsaW5nICVzICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMwNworbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbG9zdC1mb3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5ICglZCBvYmplY3RzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6Mzc2Cittc2dpZCAiYnJva2VuIGxpbmtzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJyb290ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWdnZWQgJXMgJXMgKCVzKSBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3NpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHJlZmxvZyBlbnRyeSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVmbG9nICVzLT4lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm90IGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU1NworbXNnaWQgIm5vdGljZTogTm8gZGVmYXVsdCByZWZlcmVuY2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZzogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY291bGQgbm90IGJlIHBhcnNlZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaGExIGZpbGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyMAorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjIzCittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyBsaW5rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MyBidWlsdGluL2luZGV4LXBhY2suYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyIKK21zZ3N0ciAizrzOtyDOrc6zzrrPhc+Bzr8gJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRldGFjaGVkIEhFQUQgcG9pbnRzIGF0IG5vdGhpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGljZTogJXMgcG9pbnRzIHRvIGFuIHVuYm9ybiBicmFuY2ggKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzIKK21zZ2lkICJDaGVja2luZyBjYWNoZSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2ODgKK21zZ2lkICJub24tdHJlZSBpbiBjYWNoZS10cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcxOQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI1Cittc2dpZCAic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyNgorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjcKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjgKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjkKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MzAKK21zZ2lkICJtYWtlIHJlZmxvZ3MgaGVhZCBub2RlcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzMxCittc2dpZCAiYWxzbyBjb25zaWRlciBwYWNrcyBhbmQgYWx0ZXJuYXRlIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzMyCittc2dpZCAiY2hlY2sgb25seSBjb25uZWN0aXZpdHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzMzCittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjczNQorbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjczNiBidWlsdGluL3BydW5lLmM6MTEwCittc2dpZCAic2hvdyBwcm9ncmVzcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MzcKK21zZ2lkICJzaG93IHZlcmJvc2UgbmFtZXMgZm9yIHJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc5NworbXNnaWQgIkNoZWNraW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgbWlzc2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXI6IGV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzozNAorbXNnaWQgImdpdCBnYyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGdjIFs8zrXPgM65zrvOv86zzq3Pgj5dIgorCisjOiBidWlsdGluL2djLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZzdGF0ICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NDYxIGJ1aWx0aW4vaW5pdC1kYi5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjQ3MCBidWlsdGluL25vdGVzLmM6MjQwIGJ1aWx0aW4vdGFnLmM6NTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGxhc3QgZ2MgcnVuIHJlcG9ydGVkIHRoZSBmb2xsb3dpbmcuIFBsZWFzZSBjb3JyZWN0IHRoZSByb290IGNhdXNlXG4iCisiYW5kIHJlbW92ZSAlcy5cbiIKKyJBdXRvbWF0aWMgY2xlYW51cCB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgdW50aWwgdGhlIGZpbGUgaXMgcmVtb3ZlZC5cbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NTE5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjUyMQorbXNnaWQgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NTIyCittc2dpZCAiZW5hYmxlIGF1dG8tZ2MgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NTI1Cittc2dpZCAiZm9yY2UgcnVubmluZyBnYyBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGdjIHJ1bm5pbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjUyOAorbXNnaWQgInJlcGFjayBhbGwgb3RoZXIgcGFja3MgZXhjZXB0IHRoZSBsYXJnZXN0IHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgZ2MubG9nZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIHBydW5lIGV4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnYyBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gbWFjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBpZiBub3QpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo2NzIKK21zZ2lkICIiCisiVGhlcmUgYXJlIHRvbyBtYW55IHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHM7IHJ1biAnZ2l0IHBydW5lJyB0byByZW1vdmUgdGhlbS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MjkKK21zZ2lkICJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSBmb3IgJXMiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGlzIHRoZSBjb25maWd1cmF0aW9uCisjLiB2YXJpYWJsZSBmb3IgdHdlYWtpbmcgdGhyZWFkcywgY3VycmVudGx5CisjLiBncmVwLnRocmVhZHMKKyMuCisjOiBidWlsdGluL2dyZXAuYzoyODcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUwNiBidWlsdGluL2luZGV4LXBhY2suYzoxNjk3CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAizrTOtc69IM+Fz4DOv8+Dz4TOt8+Bzq/Ots6/zr3PhM6xzrkgzr3Ors68zrHPhM6xLCDPgM6xz4HOsc6yzrvOrc+AzrXPhM6xzrkgz4TOvyAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NDY2IGJ1aWx0aW4vZ3JlcC5jOjU5MCBidWlsdGluL2dyZXAuYzo2MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxMQorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODEzCittc2dpZCAiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE1Cittc2dpZCAic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNworbXNnaWQgImlnbm9yZSBmaWxlcyBzcGVjaWZpZWQgdmlhICcuZ2l0aWdub3JlJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTkKK21zZ2lkICJyZWN1cnNpdmVseSBzZWFyY2ggaW4gZWFjaCBzdWJtb2R1bGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIyCittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI0Cittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjYKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjgKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMAorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzMKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyB3aXRoIHRleHRjb252IGZpbHRlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM1Cittc2dpZCAic2VhcmNoIGluIHN1YmRpcmVjdG9yaWVzIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzcKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQxCittc2dpZCAidXNlIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ0Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NworbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MAorbXNnaWQgInVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTMKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTQKK21zZ2lkICJzaG93IGNvbHVtbiBudW1iZXIgb2YgZmlyc3QgbWF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU1Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU2Cittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU4Cittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjAKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYyCittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY1Cittc2dpZCAic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NworbXNnaWQgInByaW50IE5VTCBhZnRlciBmaWxlbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODcwCittc2dpZCAic2hvdyBvbmx5IG1hdGNoaW5nIHBhcnRzIG9mIGEgbGluZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzIKK21zZ2lkICJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3MworbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NQorbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NworbXNnaWQgInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgwCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgzCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODUKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg3Cittc2dpZCAidXNlIDxuPiB3b3JrZXIgdGhyZWFkcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODgKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MQorbXNnaWQgInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkzCittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk2Cittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk4Cittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMAorbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTEyCittc2dpZCAiaW5kaWNhdGUgaGl0IHdpdGggZXhpdCBzdGF0dXMgd2l0aG91dCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTE0Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTYKK21zZ2lkICJzaG93IHBhcnNlIHRyZWUgZm9yIGdyZXAgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjAKK21zZ2lkICJwYWdlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjAKK21zZ2lkICJzaG93IG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjQKK21zZ2lkICJhbGxvdyBjYWxsaW5nIG9mIGdyZXAoMSkgKGlnbm9yZWQgYnkgdGhpcyBidWlsZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTg4Cittc2dpZCAibm8gcGF0dGVybiBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDI0Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAzMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiCittc2dzdHIgIs60zrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ezq4gzrcgz4TOsc+Nz4TOuc+Dzrcgz4TOt8+CIM6tzrrOtM6/z4POt8+COiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2MworbXNnaWQgImludmFsaWQgb3B0aW9uIGNvbWJpbmF0aW9uLCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2NiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDAKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MDMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzE0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgIs60z4zOuM63zrrOtSDOvM63IM6tzrPOus+Fz4HOv8+CIM6xz4HOuc64zrzPjM+CIM69zrfOvM6sz4TPic69ICglZCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwOTIKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTExNQorbXNnaWQgIm9wdGlvbiBub3Qgc3VwcG9ydGVkIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEyMQorbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTI3Cittc2dpZCAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEzNQorbXNnaWQgImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODUKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg2Cittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgInR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAib2JqZWN0IHR5cGUiCittc2dzdHIgIs+Ez43PgM6/z4IgzrHOvc+EzrnOus61zrnOvM6tzr3Ov8+FIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAxCittc2dpZCAicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMworbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDQKK21zZ2lkICIiCisianVzdCBoYXNoIGFueSByYW5kb20gZ2FyYmFnZSB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgR2l0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo0NgorbXNnaWQgInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDcKK21zZ2lkICJleGNsdWRlIGd1aWRlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo0OAorbXNnaWQgInByaW50IGxpc3Qgb2YgdXNlZnVsIGd1aWRlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo0OQorbXNnaWQgInByaW50IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUxCittc2dpZCAic2hvdyBtYW4gcGFnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo1MgorbXNnaWQgInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU0Cittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTYKK21zZ2lkICJwcmludCBjb21tYW5kIGRlc2NyaXB0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjYxCittc2dpZCAiZ2l0IGhlbHAgWy0tYWxsXSBbLS1ndWlkZXNdIFstLW1hbiB8IC0td2ViIHwgLS1pbmZvXSBbPGNvbW1hbmQ+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVscCBmb3JtYXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDAKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExMworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzoxMzkgYnVpbHRpbi9oZWxwLmM6MTYxIGJ1aWx0aW4vaGVscC5jOjE3MSBidWlsdGluL2hlbHAuYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWMgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzozNjMKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzcxCittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzAgYnVpbHRpbi9oZWxwLmM6NDQxIGdpdC5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFsaWFzZWQgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo0NDQgZ2l0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhbGlhcy4lcyBzdHJpbmc6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3MyBidWlsdGluL2hlbHAuYzo1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgIs+Hz4HOrs+Dzrc6ICVzJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ4NworbXNnaWQgIidnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorbXNnc3RyICInZ2l0IGhlbHAgY29uZmlnJyDOs865zrEgz4DOtc+BzrnPg8+Dz4zPhM61z4HOtc+CIM+AzrvOt8+Bzr/Phs6/z4HOr861z4IiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAizrHPg8+FzrzPhs+Jzr3Or86xIM+Ez43PgM6/z4UgzrHOvc+EzrnOus61zrnOvM6tzr3Ov8+FIM+Dz4TOvyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA0CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgIs60zrXOvSDOtc67zq7Phs64zrcgz4TOvyDOsc69zrHOvM61zr3PjM68zrXOvc6/IM6xzr3PhM65zrrOtc6vzrzOtc69zr8gJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXM6IGV4cGVjdGVkIHR5cGUgJXMsIGZvdW5kICVzIgorbXNnc3RyICLOsc69z4TOuc66zrXOr868zrXOvc6/ICVzOiDOsc69zrHOvM61zr3PjM+EzrHOvSDPhM+Nz4DOv8+CICVzLCDOss+Bzq3OuM63zrrOtSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjU5Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICLPgM+Bz4zPic+Bzr8gRU9GIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjAKK21zZ2lkICJyZWFkIGVycm9yIG9uIGlucHV0IgorbXNnc3RyICLPg8+GzqzOu868zrEgzrHOvc6szrPOvc+Jz4POt8+CIM66zrHPhM6sIM+EzrfOvSDOtc65z4POsc6zz4nOs86uIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNzIKK21zZ2lkICJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIKK21zZ3N0ciAiz4fPgc63z4POuc68zr/PgM6/zq/Ot8+DzrUgz4DOtc+BzrnPg8+Dz4zPhM61z4HOsSBieXRlcyDOsc+Az4wgz4zPg86xIM6uz4TOsc69IM60zrnOsc64zq3Pg865zrzOsSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjc5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTk5Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAiz4TOvyDPgM6xzrrOrc+Ezr8gz4DOsc+BzrHOtc6vzr3Osc65IM68zrXOs86szrvOvyDOs865zrEgz4TOv869IM+Ez4HOrc+Hzr/Ovc+EzrEgzr/Pgc65z4POvM+MIM+Ezr/PhSBvZmZfdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjgyIGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo5NAorbXNnaWQgInBhY2sgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZSIKK21zZ3N0ciAiz4TOvyDPgM6xzrrOrc+Ezr8gz4XPgM61z4HOss6xzq/Ovc61zrkgz4TOvyDOvM6tzrPOuc+Dz4TOvyDOtc+AzrnPhM+BzrXPgM+Ez4wgzrzOrc6zzrXOuM6/z4IiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5NyBidWlsdGluL3JlcGFjay5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgIs60zrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ezq4gzrcgzrTOt868zrnOv8+Fz4HOs86vzrEgz4TOv8+FICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICLOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM+MIM+Ezr8gzqzOvc6/zrnOs868zrEgz4TOv8+FIM6xz4HPh861zq/Ov8+FIM+AzrHOus6tz4TOv8+FICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxNworbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICLOsc+Dz4XOvM+Gz4nOvc6vzrEgz4XPgM6/zrPPgc6xz4bOrs+CIM+AzrHOus6tz4TOv8+FIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayB2ZXJzaW9uICU8UFJJdTMyPiB1bnN1cHBvcnRlZCIKK21zZ3N0ciAizrTOtc69IM+Fz4DOv8+Dz4TOt8+Bzq/Ots61z4TOsc65IM63IM6tzrrOtM6/z4POtyAlPFBSSXUzMj4gz4TOv8+FIM+AzrHOus6tz4TOv8+FIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJTxQUkl1TUFYPjogJXMiCittc2dzdHIgIs+Ezr8gz4DOsc66zq3PhM6/IM6tz4fOtc65IM67zqzOuM6/z4IgzrHOvc+EzrnOus61zq/OvM61zr3OvyDPg8+Ezr8gz4POt868zrXOr86/ICU8UFJJdU1BWD46ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAizrcgzrHPgM6/z4PPhc68z4DOr861z4POtyDOtc+Azq3Pg8+Ez4HOtc+IzrUgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUwNgorbXNnaWQgIm9mZnNldCB2YWx1ZSBvdmVyZmxvdyBmb3IgZGVsdGEgYmFzZSBvYmplY3QiCittc2dzdHIgIs+Fz4DOtc+Bz4fOtc6vzrvOuc+Dzrcgz4TOuc68zq7PgiDPg863zrzOtc6vzr/PhSDOs865zrEgz4TOvyDOss6xz4POuc66z4wgzrHOvc+EzrnOus61zq/OvM61zr3OvyBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTE0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICLPhM6/IM+DzrfOvM61zq/OvyDPhM63z4IgzrLOrM+DzrfPgiBkZWx0YSDOtc6vzr3Osc65IM61zrrPhM+Mz4Igzr/Pgc6vz4nOvSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb2JqZWN0IHR5cGUgJWQiCittc2dzdHIgIs6szrPOvc+Jz4PPhM6/z4Igz4TPjc+Azr/PgiDOsc69z4TOuc66zrXOuc68zq3Ovc6/z4UgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU1MworbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgIs60zrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TPjCDOvc6xIM6zzq/Ovc61zrkgcHJlYWQgz4TOvyDOsc+Bz4fOtc6vzr8gz4DOsc66zq3PhM6/z4UiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlIG1pc3NpbmciCittc2dpZF9wbHVyYWwgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGVzIG1pc3NpbmciCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1ODEKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAiz4POv86yzrHPgc6uIM6xzr3PhM6vz4bOsc+Dzrcgz4PPhM63zr0gzrHPgM6/z4PPhc68z4DOr861z4POtyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzI2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczMiBidWlsdGluL2luZGV4LXBhY2suYzo3NTUKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc5NCBidWlsdGluL2luZGV4LXBhY2suYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICLOks6hzpXOmM6XzprOlSDOo86lzpPOms6hzp/Opc6jzpcgU0hBMSDOnM6VIM6kzp8gJXMgISIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzI5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTUyCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAizrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDOsc69zqzOs869z4nPg863IM+Ezr/PhSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCBpbmZvICVzIgorbXNnc3RyICIiCisizrTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM6xzr3OrM6zzr3Pic+Dzrcgz4TPic69IM+AzrvOt8+Bzr/Phs6/z4HOuc+Ozr0gz4TOv8+FIM+Fz4DOrM+Bz4fOv869z4TOv8+CIM6xzr3PhM65zrrOtc65zrzOrc69zr/PhSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAizrTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM6xzr3OrM6zzr3Pic+Dzrcgz4TOv8+FIM+Fz4DOrM+Bz4fOv869z4TOv8+CIM6xzr3PhM65zrrOtc65zrzOrc69zr/PhSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvYiBvYmplY3QgJXMiCittc2dzdHIgIs68zrcgzq3Os866z4XPgc6/IM6xzr3PhM65zrrOtc6vzrzOtc69zr8gYmxvYiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODE3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgzNgorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFja2VkIG9iamVjdCIKK21zZ3N0ciAiz4PPhs6szrvOvM6xIGZzY2sgz4PPhM6/IM+AzrHOus61z4TOsc+BzrnPg868zq3Ovc6/IM6xzr3PhM65zrrOtc6vzrzOtc69zr8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgzOAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAizpTOtc69IM61zq/Ovc6xzrkgz4DPgc6/z4POss6sz4POuc68zrEgz4zOu86xIM+EzrEgzrHOvc+EzrnOus61zq/OvM61zr3OsSDPgM6xzrnOtM65zqwgz4TOv8+FICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MTAgYnVpbHRpbi9pbmRleC1wYWNrLmM6OTQxCittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICLOsc+Azq3PhM+Fz4fOtSDOtyDOtc+GzrHPgc68zr/Os86uIM+Ezr/PhSBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEwOQorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICLOm86uz4jOtyDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMDkKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICLOoM+Bzr/Pg864zq7Ous63IM+DzrUgzrXPhc+BzrXPhM6uz4HOuc6/IM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE0MworbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAiz4TOvyDPgM6xzrrOrc+Ezr8gzrXOr869zrHOuSDOus6xz4TOtc+Dz4TPgc6xzrzOvM6tzr3OvyAozrHPg8+FzrzPhs+Jzr3Or86xIFNIQTEpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTQ4Cittc2dpZCAiY2Fubm90IGZzdGF0IHBhY2tmaWxlIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ez4wgz4TOvyBmc3RhdCDPhM6/z4UgzrHPgc+HzrXOr86/z4Ugz4DOsc66zq3PhM6/z4UiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTEKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgIs+Ezr8gz4DOsc66zq3PhM6/IM6tz4fOtc65IM+DzrrOv8+Fz4DOr860zrnOsSDPg8+Ezr8gz4TOrc67zr/PgiDPhM6/z4UiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjMKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICLOsc+Dz43Ou867zrfPgM+Ezr8gzrzPgM6tz4HOtM61zrzOsSDPg8+Ezr8gcGFyc2VfcGFja19vYmplY3RzKCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExODYKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICLOlc+Azq/Ou8+Fz4POtyBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE5NiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgzrTOt868zrnOv8+Fz4HOs86vzrEgzr3Ors68zrHPhM6/z4I6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjM3Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAizrHPg8+NzrvOu863z4DPhM6/IM68z4DOrc+BzrTOtc68zrEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3RzIgorbXNnc3RyWzBdICLOv867zr/Ous67zrfPgc+OzrjOt866zrUgzrzOtSAlZCDPhM6/z4DOuc66z4wgzrHOvc+EzrnOus61zq/OvM61zr3OvyIKK21zZ3N0clsxXSAizr/Ou86/zrrOu863z4HPjs64zrfOus61IM68zrUgJWQgz4TOv8+AzrnOus6sIM6xzr3PhM65zrrOtc6vzrzOtc69zrEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCB0YWlsIGNoZWNrc3VtIGZvciAlcyAoZGlzayBjb3JydXB0aW9uPykiCittc2dzdHIgIiIKKyLOnM63IM6xzr3Osc68zrXOvc+MzrzOtc69zr8gz4TOtc67zrnOus+MIM6szrjPgc6/zrnPg868zrEgzrXOu86tzrPPh86/z4UgzrPOuc6xIM+Ezr8gJXMgKM66zrHPhM61z4PPhM+BzrHOvM68zq3Ovc6/z4IgzrTOr8+DzrrOv8+COykiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gIs+Ezr8gz4DOsc66zq3PhM6/IM6tz4fOtc65ICVkIM6xzr3Otc+Azq/Ou8+Fz4TOvyBkZWx0YSIKK21zZ3N0clsxXSAiz4TOvyDPgM6xzrrOrc+Ezr8gzq3Ph861zrkgJWQgzrHOvc61z4DOr867z4XPhM6xIGRlbHRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ez4wgzr3OsSDOsc+Azr/Pg8+FzrzPgM65z4PPhM61zq8gz4TOvyDPg8+Fzr3Ot868zrzOrc69zr8gzrHOvc+EzrnOus61zq/OvM61zr3OvyAoJWQpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0IgorbXNnc3RyICLPhM6/IM+Ezr/PgM65zrrPjCDOsc69z4TOuc66zrXOr868zrXOvc6/ICVzIM61zq/Ovc6xzrkgzrrOsc+EzrXPg8+Ez4HOsc68zrzOrc69zr8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgIs+Ezr8gz4zOvc6/zrzOsSDPhM6/z4UgzrHPgc+HzrXOr86/z4Ugz4DOsc66zq3PhM6/z4UgJyVzJyDOtM61zr0gz4TOtc67zrXOuc+Ozr3Otc65IM+DzrUgJy5wYWNrJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJXMgZmlsZSAnJXMnIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgzrXOs86zz4HOsc+Gzq4gJXMgzrHPgc+HzrXOr86/z4UgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQwNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiAlcyBmaWxlICclcyciCittc2dzdHIgIs60zrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TPjCDPhM6/IM66zrvOtc6vz4POuc68zr8gz4TOv8+FIM61zrPOs861zrPPgc6xzrzOvM6tzr3Ov8+FICVzIM6xz4HPh861zq/Ov8+FICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzEKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAiz4PPhs6szrvOvM6xIM66zrHPhM6sIM+Ezr8gzrrOu861zq/Pg865zrzOvyDPhM6/z4UgzrHPgc+HzrXOr86/z4Ugz4DOsc66zq3PhM6/z4UiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NDUKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgzrHPgM6/zrjOrs66zrXPhc+Dzrcgz4TOv8+FIM6xz4HPh861zq/Ov8+FIM+AzrHOus6tz4TOv8+FIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDUzCittc2dpZCAiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiCittc2dzdHIgIs60zrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDOsc+Azr/OuM6uzrrOtc+Fz4POtyDPhM6/z4UgzrHPgc+HzrXOr86/z4UgzrXPhc+BzrXPhM63z4HOr86/z4UiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0OTcgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCittc2dzdHIgIs67zqzOuM6/z4IgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ez4wgz4TOvyDOrM69zr/Ouc6zzrzOsSDPhM6/z4Ugz4XPgM6sz4HPh86/zr3PhM6/z4IgzrHPgc+HzrXOr86/z4Ugz4DOsc66zq3PhM6/z4UgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU2NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIgorbXNnc3RyICIiCisizpTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM+MIM+Ezr8gzqzOvc6/zrnOs868zrEgz4TOv8+FIM+Fz4DOrM+Bz4fOv869z4TOv8+CIM6xz4HPh861zq/Ov8+FIM61z4XPgc61z4TOt8+Bzq/Ov8+FIM+AzrHOus6tz4TOv8+FIM6zzrnOsSAiCisiJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJub24gZGVsdGE6ICVkIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAibm9uIGRlbHRhOiAlZCBvYmplY3RzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY1OQorbXNnaWQgIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgzrXPgM65z4PPhM+Bzr/Phs6uIM+Dz4TOv869IM+Ez4HOrc+Hzr/Ovc+EzrEgz4bOrM66zrXOu86/IM61z4HOs86xz4POr86xz4IiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MDggYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcxMQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyNyBidWlsdGluL2luZGV4LXBhY2suYzoxNzMxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAizrvOrM64zr/PgiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc0NworbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICLPhM6/IC0tZml4LXRoaW4gzrTOtSDOs86vzr3Otc+EzrHOuSDOvc6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zrfOuM61zq8gz4fPic+Bzq/PgiDPhM6/IC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NDkKK21zZ2lkICItLXN0ZGluIHJlcXVpcmVzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIs+Ezr8gLS1zdGRpbiDOsc+AzrHOuc+EzrXOryDOrc69zrEgzrHPgM6/zrjOtc+Ezq7Pgc65zr8gZ2l0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzU1Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICLOtM+MzrjOt866zrUgLS12ZXJpZnkgz4fPic+Bzq/PgiDPjM69zr/OvM6xIM6xz4HPh861zq/Ov8+FIM+AzrHOus6tz4TOv8+FIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODAzIGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1ODAKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2sgb2JqZWN0cyIKK21zZ3N0ciAiz4PPhs6szrvOvM6xIGZzY2sgz4PPhM6xIM6xzr3PhM65zrrOtc6vzrzOtc69zrEgz4TOv8+FIM+AzrHOus6tz4TOv8+FIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIGZyb20gJyVzJzogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNDkgYnVpbHRpbi9pbml0LWRiLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDYwCittc2dpZCAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZS1kaXJlY3Rvcnk+XSBbLS0iCisic2hhcmVkWz08cGVybWlzc2lvbnM+XV0gWzxkaXJlY3Rvcnk+XSIKK21zZ3N0ciAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTzPhs6szrrOtc67zr/PgiDPgM+Bzr/PhM+Nz4DOv8+FPl0gWy0tIgorInNoYXJlZFs9PM60zrnOus6xzrnPjs68zrHPhM6xPl1dIFs8z4bOrM66zrXOu86/z4I+XSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDgzCittc2dpZCAicGVybWlzc2lvbnMiCittc2dzdHIgIs60zrnOus6xzrnPjs68zrHPhM6xIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0ODQKK21zZ2lkICJzcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTE4IGJ1aWx0aW4vaW5pdC1kYi5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjE1Cittc2dpZCAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk0Cittc2dpZCAiZWRpdCBmaWxlcyBpbiBwbGFjZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk1Cittc2dpZCAidHJpbSBlbXB0eSB0cmFpbGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk4Cittc2dpZCAid2hlcmUgdG8gcGxhY2UgdGhlIG5ldyB0cmFpbGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAwCittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIs61zr3Orc+BzrPOtc65zrEgzrHOvSDPhc+AzqzPgc+HzrXOuSDOrs60zrcgz4XPgM6/z4POt868zrXOr8+Jz4POtyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDIKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBpcyBtaXNzaW5nIgorbXNnc3RyICLOtc69zq3Pgc6zzrXOuc6xIM6xzr0gzrTOtc69IM+Fz4DOrM+Bz4fOtc65IM+Fz4DOv8+DzrfOvM61zq/Pic+DzrciCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA0Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIHRyYWlsZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA1Cittc2dpZCAiZG8gbm90IGFwcGx5IGNvbmZpZyBydWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNgorbXNnaWQgImpvaW4gd2hpdGVzcGFjZS1jb250aW51ZWQgdmFsdWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA3Cittc2dpZCAic2V0IHBhcnNpbmcgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwOQorbXNnaWQgImRvIG5vdCB0cmVhdCAtLS0gc3BlY2lhbGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEwCittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMQorbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTIwCittc2dpZCAiLS10cmFpbGVyIHdpdGggLS1vbmx5LWlucHV0IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMzAKK21zZ2lkICJubyBpbnB1dCBmaWxlIGdpdmVuIGZvciBpbi1wbGFjZSBlZGl0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTUKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbG9nIFs8zrXPgM65zrvOv86zzq3Pgj5dIFs8zrXPjc+Bzr/PgiDOtc66zrTPjM+DzrXPic69Pl0gW1stLV0gPM60zrnOsc60z4HOv868zq4+Li4uXSIKKworIzogYnVpbHRpbi9sb2cuYzo1NgorbXNnaWQgImdpdCBzaG93IFs8b3B0aW9ucz5dIDxvYmplY3Q+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzCittc2dpZCAic3VwcHJlc3MgZGlmZiBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NQorbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3Cittc2dpZCAib25seSBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5Cittc2dpZCAiZG8gbm90IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTczCittc2dpZCAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBzaG93ICVzOiBiYWQgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjU0MCBidWlsdGluL2xvZy5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB0eXBlOiAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjc4MAorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo4ODEKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjkxNAorbXNnaWQgIk5lZWQgZXhhY3RseSBvbmUgcmFuZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTI0Cittc2dpZCAiTm90IGEgcmFuZ2UuIgorbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOtc+Nz4HOv8+CLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDQ3Cittc2dpZCAiQ292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjExNTkKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE3Cittc2dpZCAiVHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzI0IGJ1aWx0aW4vbG9nLmM6MjA2OCBidWlsdGluL2xvZy5jOjIwNzAgYnVpbHRpbi9sb2cuYzoyMDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMzNCBidWlsdGluL25vdGVzLmM6ODk3IGJ1aWx0aW4vdGFnLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMzOQorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIGV4YWN0IG1lcmdlIGJhc2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM0MworbXNnaWQgIiIKKyJGYWlsZWQgdG8gZ2V0IHVwc3RyZWFtLCBpZiB5b3Ugd2FudCB0byByZWNvcmQgYmFzZSBjb21taXQgYXV0b21hdGljYWxseSxcbiIKKyJwbGVhc2UgdXNlIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gdG8gdHJhY2sgYSByZW1vdGUgYnJhbmNoLlxuIgorIk9yIHlvdSBjb3VsZCBzcGVjaWZ5IGJhc2UgY29tbWl0IGJ5IC0tYmFzZT08YmFzZS1jb21taXQtaWQ+IG1hbnVhbGx5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEzNjMKK21zZ2lkICJGYWlsZWQgdG8gZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM3NAorbXNnaWQgImJhc2UgY29tbWl0IHNob3VsZCBiZSB0aGUgYW5jZXN0b3Igb2YgcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEzNzgKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGRuJ3QgYmUgaW4gcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE0MzEKK21zZ2lkICJjYW5ub3QgZ2V0IHBhdGNoIGlkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ4MworbXNnaWQgImZhaWxlZCB0byBpbmZlciByYW5nZS1kaWZmIHJhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE1MjgKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzMQorbXNnaWQgInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzNQorbXNnaWQgInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzNworbXNnaWQgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzOQorbXNnaWQgInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE1NDAKK21zZ2lkICJzZngiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTQxCittc2dpZCAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTQzCittc2dpZCAic3RhcnQgbnVtYmVyaW5nIHBhdGNoZXMgYXQgPG4+IGluc3RlYWQgb2YgMSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE1NDUKK21zZ2lkICJtYXJrIHRoZSBzZXJpZXMgYXMgTnRoIHJlLXJvbGwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTQ3Cittc2dpZCAiVXNlIFtSRkMgUEFUQ0hdIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE1NTAKK21zZ2lkICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTUzCittc2dpZCAic3RvcmUgcmVzdWx0aW5nIGZpbGVzIGluIDxkaXI+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU1NgorbXNnaWQgImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU1OQorbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTYxCittc2dpZCAib3V0cHV0IGFsbC16ZXJvIGhhc2ggaW4gRnJvbSBoZWFkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTYzCittc2dpZCAiZG9uJ3QgaW5jbHVkZSBhIHBhdGNoIG1hdGNoaW5nIGEgY29tbWl0IHVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU2NQorbXNnaWQgInNob3cgcGF0Y2ggZm9ybWF0IGluc3RlYWQgb2YgZGVmYXVsdCAocGF0Y2ggKyBzdGF0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE1NjcKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTY4Cittc2dpZCAiaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU2OQorbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTcwIGJ1aWx0aW4vbG9nLmM6MTU3MgorbXNnaWQgImVtYWlsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU3MAorbXNnaWQgImFkZCBUbzogaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU3MgorbXNnaWQgImFkZCBDYzogaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU3NAorbXNnaWQgImlkZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU3NQorbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTc3Cittc2dpZCAibWVzc2FnZS1pZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE1NzgKK21zZ2lkICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTc5IGJ1aWx0aW4vbG9nLmM6MTU4MgorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU4MAorbXNnaWQgImF0dGFjaCB0aGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTgzCittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE1ODcKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE1ODkKK21zZ2lkICJzaWduYXR1cmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTkwCittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU5MQorbXNnaWQgImJhc2UtY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU5MgorbXNnaWQgImFkZCBwcmVyZXF1aXNpdGUgdHJlZSBpbmZvIHRvIHRoZSBwYXRjaCBzZXJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTk0Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU5NQorbXNnaWQgImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTk3Cittc2dpZCAic2hvdyBwcm9ncmVzcyB3aGlsZSBnZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTk4Cittc2dpZCAicmV2IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU5OQorbXNnaWQgInNob3cgY2hhbmdlcyBhZ2FpbnN0IDxyZXY+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjAyCittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJlZnNwZWM+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjA0Cittc2dpZCAicGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTQKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTYKK21zZ2lkICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwNAorbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA2Cittc2dpZCAiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwOAorbXNnaWQgIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE3NDAKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4MjkKK21zZ2lkICItLWludGVyZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODMzCittc2dpZCAiSW50ZXJkaWZmOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJkaWZmIGFnYWluc3QgdiVkOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4NDAKK21zZ2lkICItLWNyZWF0aW9uLWZhY3RvciByZXF1aXJlcyAtLXJhbmdlLWRpZmYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODQ0Cittc2dpZCAiLS1yYW5nZS1kaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4NTIKK21zZ2lkICJSYW5nZS1kaWZmOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmFuZ2UtZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTAwCittc2dpZCAiR2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk0NAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjAwMworbXNnaWQgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIgorbXNnc3RyICJnaXQgY2hlcnJ5IFstdl0gWzzPgM+Bzr/PgiDPhM6xIM+AzqzOvc+JPiBbPGhlYWQ+IFs8z4zPgc65zr8+XV1dIgorCisjOiBidWlsdGluL2xvZy5jOjIwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzAKK21zZ2lkICJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyNgorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyOAorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzAKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdmc21vbml0b3IgY2xlYW4nIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzIKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM0Cittc2dpZCAic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNgorbXNnaWQgInNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM4Cittc2dpZCAic2hvdyBvdGhlciBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDAKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQzCittc2dpZCAic2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NQorbXNnaWQgInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NworbXNnaWQgInNob3cgJ290aGVyJyBkaXJlY3RvcmllcycgbmFtZXMgb25seSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ5Cittc2dpZCAic2hvdyBsaW5lIGVuZGluZ3Mgb2YgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1MQorbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU2Cittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1OAorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTYxCittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY0Cittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NgorbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MAorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzMKK21zZ2lkICJyZWN1cnNlIHRocm91Z2ggc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc1Cittc2dpZCAiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzYKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc3Cittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc5Cittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjkKK21zZ2lkICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjIgYnVpbHRpbi9yZWJhc2UuYzoxMTExCittc2dpZCAiZXhlYyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYxIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjMKK21zZ2lkICJwYXRoIG9mIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIGhvc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NQorbXNnaWQgImxpbWl0IHRvIHRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NgorbXNnaWQgImxpbWl0IHRvIGhlYWRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjcKK21zZ2lkICJkbyBub3Qgc2hvdyBwZWVsZWQgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY5Cittc2dpZCAidGFrZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiBpbnRvIGFjY291bnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3MworbXNnaWQgImV4aXQgd2l0aCBleGl0IGNvZGUgMiBpZiBubyBtYXRjaGluZyByZWZzIGFyZSBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjc2Cittc2dpZCAic2hvdyB1bmRlcmx5aW5nIHJlZiBpbiBhZGRpdGlvbiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgYnkgaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MzAKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOAorbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzAKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMyCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNgorbXNnaWQgImluY2x1ZGUgb2JqZWN0IHNpemUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM4IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MAorbXNnaWQgImxpc3Qgb25seSBmaWxlbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQzCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAizr3OsSDOs86vzr3Otc65IM+Hz4HOrs+Dzrcgz4DOu86uz4HPic69IM6/zr3Ov868zqzPhM+Jzr0gzrTOuc6xzrTPgc6/zrzPjs69IgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDUKK21zZ2lkICJsaXN0IGVudGlyZSB0cmVlOyBub3QganVzdCBjdXJyZW50IGRpcmVjdG9yeSAoaW1wbGllcyAtLWZ1bGwtbmFtZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tYWlsc3BsaXQuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgbWJveDogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NTMKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NTQKK21zZ2lkICJnaXQgbWVyZ2UgLS1hYm9ydCIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tYWJvcnQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NQorbXNnaWQgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorbXNnc3RyICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExMgorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBtZXJnZSBzdHJhdGVneSAnJXMnLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMzUgYnVpbHRpbi9wdWxsLmM6MTQ0Cittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjM4IGJ1aWx0aW4vcHVsbC5jOjE0NworbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjM5IGJ1aWx0aW4vcHVsbC5jOjE1MAorbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0MSBidWlsdGluL3B1bGwuYzoxNTMKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0NCBidWlsdGluL3B1bGwuYzoxNTkKK21zZ2lkICJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ2IGJ1aWx0aW4vcHVsbC5jOjE2MgorbXNnaWQgInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ4IGJ1aWx0aW4vcHVsbC5jOjE2NQorbXNnaWQgImVkaXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ5Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUxIGJ1aWx0aW4vcHVsbC5jOjE3MQorbXNnaWQgImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NSBidWlsdGluL3B1bGwuYzoxNzQKK21zZ2lkICJ2ZXJpZnkgdGhhdCB0aGUgbmFtZWQgY29tbWl0IGhhcyBhIHZhbGlkIEdQRyBzaWduYXR1cmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NiBidWlsdGluL25vdGVzLmM6Nzg3IGJ1aWx0aW4vcHVsbC5jOjE3OAorIzogYnVpbHRpbi9yZWJhc2UuYzoxMTI0IGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjE4OCBidWlsdGluL3JldmVydC5jOjExMQorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTcgYnVpbHRpbi9wdWxsLmM6MTc5Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTggYnVpbHRpbi9wdWxsLmM6MTgyCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTkgYnVpbHRpbi9wdWxsLmM6MTgzCittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjYxCittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjgKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjcwCittc2dpZCAiY29udGludWUgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3MiBidWlsdGluL3B1bGwuYzoxOTAKK21zZ2lkICJhbGxvdyBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3OAorbXNnaWQgInZlcmlmeSBjb21taXQtbXNnIGhvb2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMwMworbXNnaWQgImNvdWxkIG5vdCBydW4gc3Rhc2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMDgKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxMworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOrc6zzrrPhc+Bzr8gzrHOvc+EzrnOus61zq/OvM61zr3OvzogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMzUgYnVpbHRpbi9tZXJnZS5jOjM1MgorbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM4MgorbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKM+Ezq/PgM6/z4TOsSDPgM+Bzr/PgiDPg8+NzrzPgM+Ez4XOvs63KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NzAyCittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjczMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyLOlM61IM6zzq/Ovc61z4TOsc65IM+Fz4DOv86yzr/Ou86uIM+EzrfPgiDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CLCDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61ICdnaXQgY29tbWl0JyDOs865zrEgzr3OsSAiCisizr/Ou86/zrrOu863z4HPjs+DzrXPhM61IM+Ezrcgz4PPhc6zz4fPjs69zrXPhc+DzrcuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MzQKK21zZ2lkICJFbXB0eSBjb21taXQgbWVzc2FnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIs6Vzr7Osc65z4HOtc+EzrnOus6sLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk0NQorbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6OTQ3Cittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NDkKK21zZ2lkICJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk1NAorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDExCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UgaW4gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTQ4Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNTEKK21zZ2lkICItLWFib3J0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjU1Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjY3Cittc2dpZCAiLS1jb250aW51ZSBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3MQorbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIGluIHByb2dyZXNzIChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI4NworbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLOlM61zr0gzq3Ph861z4TOtSDOv867zr/Ous67zrfPgc+Oz4POtc65IM+Ezrcgz4PPhc6zz4fPjs69zrXPhc+Dzq4gz4POsc+CICjOpc+AzqzPgc+HzrXOuSDPhM6/IE1FUkdFX0hFQUQpLlxuIgorIs6gzrHPgc6xzrrOsc67z44sIM+Fz4DOv86yzqzOu861z4TOtSDPhM65z4IgzrHOu867zrHOs86tz4Igz4POsc+CIM+Az4HOuc69IM+Dz4XOs8+Hz4nOvc61z43Pg861z4TOtS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIs6UzrXOvSDOrc+HzrXPhM61IM6/zrvOv866zrvOt8+Bz47Pg861zrkgz4TOt869IM61z4DOuc67zrXOus+EzrnOus6uIM60zrnOsc67zr/Os86uIM+DzrHPgiAozqXPgM6sz4HPh861zrkgz4TOvyAiCisiQ0hFUlJZX1BJQ0tfSEVBRCkuXG4iCisizqDOsc+BzrHOus6xzrvPjiwgz4XPgM6/zrLOrM67zrXPhM61IM+EzrnPgiDOsc67zrvOsc6zzq3PgiDPg86xz4Igz4DPgc65zr0gz4PPhc6zz4fPic69zrXPjc+DzrXPhM61LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTcKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIiIKKyLOlM61zr0gzq3Ph861z4TOtSDOv867zr/Ous67zrfPgc+Oz4POtc65IM+EzrfOvSDOtc+AzrnOu861zrrPhM65zrrOriDOtM65zrHOu86/zrPOriDPg86xz4IgKM6lz4DOrM+Bz4fOtc65IM+Ezr8gIgorIkNIRVJSWV9QSUNLX0hFQUQpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMDYKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAizpTOtSDOvM+Azr/Pgc61zq/PhM61IM69zrEgz4PPhc69zrTPhc6sz4POtc+EzrUgz4TOvyAtLXNxdWFzaCDOvM61IM+Ezr8gLS1uby1mZi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzE0Cittc2dpZCAiTm8gY29tbWl0IHNwZWNpZmllZCBhbmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm90IHNldC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzEKK21zZ2lkICJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzMworbXNnaWQgIk5vbi1mYXN0LWZvcndhcmQgY29tbWl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW50byBhbiBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNDAKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDIyCittc2dpZCAicmVmdXNpbmcgdG8gbWVyZ2UgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQzMQorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4iCittc2dzdHIgIs6JzrTOtyDPgM67zq7Pgc+Jz4IgzrXOvc6uzrzOtc+Bzr8uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTE1Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiBZZWVhaCEiCittc2dzdHIgIs6JzrTOtyDPgM67zq7Pgc+Jz4IgzrXOvc6uzrzOtc+Bzr8uIM6dzrHOuc65zrkhIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUyMQorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU0NCBidWlsdGluL21lcmdlLmM6MTYyMworIywgYy1mb3JtYXQKK21zZ2lkICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYxNAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYzNworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMyCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMzCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNAorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzUKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM2Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTUzCittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NQorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTcKK21zZ2lkICJsaXN0IHJldnMgbm90IHJlYWNoYWJsZSBmcm9tIG90aGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTkKK21zZ2lkICJpcyB0aGUgZmlyc3Qgb25lIGFuY2VzdG9yIG9mIHRoZSBvdGhlcj8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTYxCittc2dpZCAiZmluZCB3aGVyZSA8Y29tbWl0PiBmb3JrZWQgZnJvbSByZWZsb2cgb2YgPHJlZj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6OQorbXNnaWQgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPG9wdGlvbnM+XSBbLUwgPG5hbWUxPiBbLUwgPG9yaWc+IFstTCA8bmFtZTI+XV1dIDxmaWxlMT4gIgorIjxvcmlnLWZpbGU+IDxmaWxlMj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM2Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NworbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZS4gSWdub3JpbmcgJXMuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlcy4gSWdub3JpbmcgJXMuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo2NAorbXNnaWQgIm5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3MCBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIgorbXNnc3RyICLOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM+EzrHPjc+EzrnPg863IM+Ezr/PhSByZWYgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21rdHJlZS5jOjY2Cittc2dpZCAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NAorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU1IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI2Cittc2dpZCAiYWxsb3cgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU2Cittc2dpZCAiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjgKK21zZ2lkICJnaXQgbXVsdGktcGFjay1pbmRleCBbLS1vYmplY3QtZGlyPTxkaXI+XSAod3JpdGV8dmVyaWZ5KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyMQorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MzkKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHZlcmI6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOAorbXNnaWQgImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjg1Cittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjUKK21zZ2lkICJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjEyNworbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gJyVzJyBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjE5MAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjE5OQorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIyNAorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIyNworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIzOAorbXNnaWQgIkNhbm5vdCBvdmVyd3JpdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjI0MQorbXNnaWQgIm11bHRpcGxlIHNvdXJjZXMgZm9yIHRoZSBzYW1lIHRhcmdldCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MjQzCittc2dpZCAiZGVzdGluYXRpb24gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzcgYnVpbHRpbi9yZW1vdGUuYzo3MTcgYnVpbHRpbi9yZXBhY2suYzo1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjM1NQorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzU2Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozNTcKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDEzCittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MTQKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQxNgorbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MTgKK21zZ2lkICJpZ25vcmUgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQyMAorbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQyMQorbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDIyCittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MjgKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjkKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiAiCisifCAoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gY29weSBbLWZdIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxCittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgIgorIigtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzIKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMworbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSByZW1vdmUgWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW5dIFstdl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZ2V0LXJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQKK21zZ2lkICJnaXQgbm90ZXMgW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5Cittc2dpZCAiZ2l0IG5vdGVzIGFkZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NAorbXNnaWQgImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwCittc2dpZCAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NQorbXNnaWQgImdpdCBub3RlcyBlZGl0IFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwCittc2dpZCAiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzLXJlZj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MgorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODcKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkyCittc2dpZCAiZ2l0IG5vdGVzIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6OTcKK21zZ2lkICJXcml0ZS9lZGl0IHRoZSBub3RlcyBmb3IgdGhlIGZvbGxvd2luZyBvYmplY3Q6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1NAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdzaG93JyBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE5NworbXNnaWQgInBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjA2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG5vdGUgY29udGVudHMgaGF2ZSBiZWVuIGxlZnQgaW4gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI0MiBidWlsdGluL3RhZy5jOjUxMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciCittc2dzdHIgIs60zrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ez4wgz4TOvyDOrM69zr/Ouc6zzrzOsSDOriDOtyDOsc69zqzOs869z4nPg863IM+Ezr/PhSAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYzIGJ1aWx0aW4vbm90ZXMuYzozMTMgYnVpbHRpbi9ub3Rlcy5jOjMxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjM4MyBidWlsdGluL25vdGVzLmM6NDM4IGJ1aWx0aW4vbm90ZXMuYzo1MjYKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzEgYnVpbHRpbi9ub3Rlcy5jOjYxMCBidWlsdGluL25vdGVzLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLOsc+Azq3PhM+Fz4fOtSDOtyDPhM6xz43PhM65z4POtyDPhM6/z4UgJyVzJyDOvM61IM66zqzPgM6/zrnOvyDOrc6zzrrPhc+Bzr8gcmVmLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iCittc2dzdHIgIiIKKyLOtM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM6xzr3OrM6zzr3Pic+DzrcgzrTOtc60zr/OvM6tzr3Pic69IM+DzrfOvM61zrnPjs+DzrXPic69IM6xz4DPjCDOvM63IGJsb2IgzrHOvc+EzrnOus61zq/OvM61zr3OvyAnJXMnLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGZpcnN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBnaXQKKyMuIG5vdGVzIGNvbW1hbmQ6ICdhZGQnLCAnbWVyZ2UnLCAncmVtb3ZlJywgZXRjLgorIy4KKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gJXMgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNzYgYnVpbHRpbi9ub3Rlcy5jOjQzMSBidWlsdGluL25vdGVzLmM6NTA5CisjOiBidWlsdGluL25vdGVzLmM6NTIxIGJ1aWx0aW4vbm90ZXMuYzo1OTggYnVpbHRpbi9ub3Rlcy5jOjY2NQorIzogYnVpbHRpbi9ub3Rlcy5jOjgxNSBidWlsdGluL25vdGVzLmM6OTYzIGJ1aWx0aW4vbm90ZXMuYzo5ODUKK21zZ2lkICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODkgYnVpbHRpbi9ub3Rlcy5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTAgYnVpbHRpbi9ub3Rlcy5jOjU3NgorbXNnaWQgIm5vdGUgY29udGVudHMgYXMgYSBzdHJpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMyBidWlsdGluL25vdGVzLmM6NTc5Cittc2dpZCAibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxNiBidWlsdGluL25vdGVzLmM6NTgyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTkgYnVpbHRpbi9ub3Rlcy5jOjU4NQorbXNnaWQgInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDIyIGJ1aWx0aW4vbm90ZXMuYzo1ODgKK21zZ2lkICJhbGxvdyBzdG9yaW5nIGVtcHR5IG5vdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyMyBidWlsdGluL25vdGVzLmM6NDk2Cittc2dpZCAicmVwbGFjZSBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjMgYnVpbHRpbi9ub3Rlcy5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3NSBidWlsdGluL25vdGVzLmM6NjM3IGJ1aWx0aW4vbm90ZXMuYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5NworbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTkKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTE3Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKyJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OTgKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDAKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwMgorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJ2dpdCBub3RlcyBtZXJnZScgd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyMgorbXNnaWQgImZhaWxlZCB0byByZWFkIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MzkKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgIs6xz4DOrc+Ez4XPh861IM63IM+EzrHPjc+EzrnPg863IM+Ezr/PhSBOT1RFU19NRVJHRV9SRUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NDIKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgbm90ZXMgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vdGVzIG1lcmdlIHN0cmF0ZWd5ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODQKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NgorbXNnaWQgIk1lcmdlIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4OAorbXNnaWQgIiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCittc2dzdHIgIiIKKyLOtc+AzrnOu8+Nz4PPhM61IM+EzrnPgiDPg8+FzrPOus+Bzr/Pjc+DzrXOuc+CIM+DzrfOvM61zrnPjs+DzrXPic69IM+Hz4HOt8+DzrnOvM6/z4DOv865z47Ovc+EzrHPgiDPhM63zr0gzrXPgM65zrvOtc6zzrzOrc69zrcgIgorIs+Dz4TPgc6xz4TOt86zzrnOus6uIChtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vY2F0X3NvcnRfdW5pcSkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTAKK21zZ2lkICJDb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTIKK21zZ2lkICJmaW5hbGl6ZSBub3RlcyBtZXJnZSBieSBjb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTQKK21zZ2lkICJBYm9ydGluZyBub3RlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTYKK21zZ2lkICJhYm9ydCBub3RlcyBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODA3Cittc2dpZCAiY2Fubm90IG1peCAtLWNvbW1pdCwgLS1hYm9ydCBvciAtcy8tLXN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTIKK21zZ2lkICJtdXN0IHNwZWNpZnkgYSBub3RlcyByZWYgdG8gbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC1zLy0tc3RyYXRlZ3k6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBub3RlcyBtZXJnZSBpbnRvICVzIGlzIGFscmVhZHkgaW4tcHJvZ3Jlc3MgYXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RvcmUgbGluayB0byBjdXJyZW50IG5vdGVzIHJlZiAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF1dG9tYXRpYyBub3RlcyBtZXJnZSBmYWlsZWQuIEZpeCBjb25mbGljdHMgaW4gJXMgYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggIgorIidnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvciBhYm9ydCB0aGUgbWVyZ2Ugd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tIgorImFib3J0Jy5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MTIKK21zZ2lkICJhdHRlbXB0IHRvIHJlbW92ZSBub24tZXhpc3RlbnQgbm90ZSBpcyBub3QgYW4gZXJyb3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxNQorbXNnaWQgInJlYWQgb2JqZWN0IG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTQgYnVpbHRpbi9wcnVuZS5jOjEwOCBidWlsdGluL3dvcmt0cmVlLmM6MTY1Cittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTUKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTgKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OQorbXNnaWQgInVzZSBub3RlcyBmcm9tIDxub3Rlcy1yZWY+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1MQorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3B0aW9ucz4uLi5dIFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTIKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9wdGlvbnM+Li4uXSA8YmFzZS1uYW1lPiBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQyMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGFja2VkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGRlbHRhIGRldGVjdGVkIGZvciBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAib3JkZXJlZCAldSBvYmplY3RzLCBleHBlY3RlZCAlPFBSSXUzMj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgaXMgaW52YWxpZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcGFja2ZpbGUgZm9yIHJldXNlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc5NworbXNnaWQgInVuYWJsZSB0byBzZWVrIGluIHJldXNlZCBwYWNrZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjgwOAorbXNnaWQgInVuYWJsZSB0byByZWFkIGZyb20gcmV1c2VkIHBhY2tmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODM2Cittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBwYWNrcyBhcmUgc3BsaXQgZHVlIHRvIHBhY2sucGFja1NpemVMaW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjg0OQorbXNnaWQgIldyaXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjkxMSBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb3RlICU8UFJJdTMyPiBvYmplY3RzIHdoaWxlIGV4cGVjdGluZyAlPFBSSXUzMj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMTU4Cittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG92ZXJmbG93IGluIHBhY2sgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU5NQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdXQgb2YgYm91bmQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTg2NAorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIs6azrHPhM6xzrzOrc+Ez4HOt8+DzrcgzrHOvc+EzrnOus61zrnOvM6tzr3Pic69IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE5OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBzaXplIG9mICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0IGhlYWRlciBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwNzkgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDk1CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjA4MiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGluY29uc2lzdGVudCBvYmplY3QgbGVuZ3RoICglPFBSSXVNQVg+IHZzICU8UFJJdU1BWD4pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjExOQorbXNnaWQgInN1Ym9wdGltYWwgcGFjayAtIG91dCBvZiBtZW1vcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbHRhIGNvbXByZXNzaW9uIHVzaW5nIHVwIHRvICVkIHRocmVhZHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYWNrIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGFnICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2NAorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIs6jz4XOvM+Azq/Otc+DzrcgzrHOvc+EzrnOus61zrnOvM6tzr3Pic69IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NzAKK21zZ2lkICJpbmNvbnNpc3RlbmN5IHdpdGggZGVsdGEgY291bnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBlZGdlIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODU1Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkxNCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwMjIKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgYXQgJXMgY291bGQgbm90IGJlIGV4YW1pbmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzAzMAorbXNnaWQgInVuYWJsZSB0byBmb3JjZSBsb29zZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJldiAnJXMnIgorbXNnc3RyICLOtM61zr0gzrXOr869zrHOuSDOrc66zrTOv8+DzrcgzrcgJyVzJyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXZpc2lvbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE1MAorbXNnaWQgInVuYWJsZSB0byBhZGQgcmVjZW50IG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjM3Cittc2dpZCAiZG8gbm90IHNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjM5Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDEKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDQKK21zZ2lkICJzaW1pbGFyIHRvIC0tYWxsLXByb2dyZXNzIHdoZW4gcHJvZ3Jlc3MgbWV0ZXIgaXMgc2hvd24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ1Cittc2dpZCAiPHZlcnNpb24+Wyw8b2Zmc2V0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ2Cittc2dpZCAid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDkKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1MQorbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTMKK21zZ2lkICJpZ25vcmUgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjU1Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTcKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBtZW1vcnkgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGxpbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1OQorbXNnaWQgIm1heGltdW0gbGVuZ3RoIG9mIGRlbHRhIGNoYWluIGFsbG93ZWQgaW4gdGhlIHJlc3VsdGluZyBwYWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MQorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjMKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2NQorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjcKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2OQorbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjcxCittc2dpZCAicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzMKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzYKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzkKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjgyCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODUKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg3Cittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4OQorbXNnaWQgImtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTEKK21zZ2lkICJwYWNrIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkzCittc2dpZCAidW5wYWNrIHVucmVhY2hhYmxlIG9iamVjdHMgbmV3ZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk2Cittc2dpZCAidXNlIHRoZSBzcGFyc2UgcmVhY2hhYmlsaXR5IGFsZ29yaXRobSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTgKK21zZ2lkICJjcmVhdGUgdGhpbiBwYWNrcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDAKK21zZ2lkICJjcmVhdGUgcGFja3Mgc3VpdGFibGUgZm9yIHNoYWxsb3cgZmV0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDIKK21zZ2lkICJpZ25vcmUgcGFja3MgdGhhdCBoYXZlIGNvbXBhbmlvbiAua2VlcCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMwNAorbXNnaWQgImlnbm9yZSB0aGlzIHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzA2Cittc2dpZCAicGFjayBjb21wcmVzc2lvbiBsZXZlbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDgKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTAKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzEyCittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggdG9nZXRoZXIgd2l0aCB0aGUgcGFjayBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTUKK21zZ2lkICJoYW5kbGluZyBmb3IgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxOAorbXNnaWQgImRvIG5vdCBwYWNrIG9iamVjdHMgaW4gcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMyMAorbXNnaWQgInJlc3BlY3QgaXNsYW5kcyBkdXJpbmcgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGNoYWluIGRlcHRoICVkIGlzIHRvbyBkZWVwLCBmb3JjaW5nICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrLmRlbHRhQ2FjaGVMaW1pdCBpcyB0b28gaGlnaCwgZm9yY2luZyAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDQKK21zZ2lkICItLW1heC1wYWNrLXNpemUgY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYSBwYWNrIGZvciB0cmFuc2ZlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDYKK21zZ2lkICJtaW5pbXVtIHBhY2sgc2l6ZSBsaW1pdCBpcyAxIE1pQiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTEKK21zZ2lkICItLXRoaW4gY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYW4gaW5kZXhhYmxlIHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDE0Cittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtLXVucGFjay11bnJlYWNoYWJsZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMAorbXNnaWQgImNhbm5vdCB1c2UgLS1maWx0ZXIgd2l0aG91dCAtLXN0ZG91dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NzkKK21zZ2lkICJFbnVtZXJhdGluZyBvYmplY3RzIgorbXNnc3RyICLOkc+AzrHPgc6vzrjOvM63z4POtyDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJUb3RhbCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHJldXNlZCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPikiCittc2dzdHIgIiIKKyLOo8+Fzr3Ov867zrnOus6sICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgzrXPgM6xzr3Osc+Hz4HOt8+DzrnOvM6/z4DOv865zrfOvM6tzr3OsSAlPFBSSXUzMj4gKGRlbHRhICIKKyIlPFBSSXUzMj4pIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjcKK21zZ2lkICJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTUKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNgorbXNnaWQgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6OQorbXNnaWQgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjQyCittc2dpZCAiUmVtb3ZpbmcgZHVwbGljYXRlIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEyCittc2dpZCAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1wcm9ncmVzc10gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BydW5lLmM6MTA5Cittc2dpZCAicmVwb3J0IHBydW5lZCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMTIKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BydW5lLmM6MTE0Cittc2dpZCAibGltaXQgdHJhdmVyc2FsIHRvIG9iamVjdHMgb3V0c2lkZSBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEyOAorbXNnaWQgImNhbm5vdCBwcnVuZSBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo2MSBidWlsdGluL3B1bGwuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODMKK21zZ2lkICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzoxMzQKK21zZ2lkICJjb250cm9sIGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzoxMzgKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gbWVyZ2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDEKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6MTY4IGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjE0OSBidWlsdGluL3JldmVydC5jOjEyMworbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzoxNzcKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIHJlYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzoxOTMKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6MjAzCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzoyMTEKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBwdWxsZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyMgorbXNnaWQgIiIKKyJUaGVyZSBpcyBubyBjYW5kaWRhdGUgZm9yIHJlYmFzaW5nIGFnYWluc3QgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCAiCisiZmV0Y2hlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI0Cittc2dpZCAiIgorIlRoZXJlIGFyZSBubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI1Cittc2dpZCAiIgorIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKyJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBwdWxsIGZyb20gdGhlIHJlbW90ZSAnJXMnLCBidXQgZGlkIG5vdCBzcGVjaWZ5XG4iCisiYSBicmFuY2guIEJlY2F1c2UgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQgY29uZmlndXJlZCByZW1vdGVcbiIKKyJmb3IgeW91ciBjdXJyZW50IGJyYW5jaCwgeW91IG11c3Qgc3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK21zZ3N0ciAiIgorIs6WzrfPhM6uz4POsc+EzrUgzr3OsSDOtc69z4PPic68zrHPhM+Oz4POtc+EzrUgzrHPgM+MIM+Ezr8gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gJyVzJywgzrHOu867zqwgzrTOtSDOtM+Oz4POsc+EzrVcbiIKKyLOus6sz4DOv865zr/OvSDOus67zqzOtM6/LiDOkc+Gzr/PjSDOsc+Fz4TPjCDOtM61zr0gzrXOr869zrHOuSDPhM6/IM+Az4HOv861z4DOuc67zrXOs868zq3Ovc6/IM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/XG4iCisizrPOuc6xIM+Ezr/OvSDPhM+Bzq3Ph86/zr3PhM6sIM+DzrHPgiDOus67zqzOtM6/LCDPgM+Bzq3PgM61zrkgzr3OsSDOtM+Oz4POtc+EzrUgzq3Ovc6xzr0gzrrOu86szrTOvyDPg8+EzrcgzrPPgc6xzrzOvM6uIM61zr3PhM6/zrvPjs69LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDMzIGJ1aWx0aW4vcmViYXNlLmM6OTU2IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzMKK21zZ2lkICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIgorbXNnc3RyICLOlM61IM6yz4HOr8+DzrrOtc+Dz4TOtSDOsc+Fz4TOriDPhM63IM+Dz4TOuc6zzrzOriDPg861IM66zqzPgM6/zrnOv869IM66zrvOrM60zr8uIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzUgYnVpbHRpbi9wdWxsLmM6NDUwIGdpdC1wYXJzZS1yZW1vdGUuc2g6NzkKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNyBidWlsdGluL3B1bGwuYzo0NTIgZ2l0LXBhcnNlLXJlbW90ZS5zaDo4MgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzggYnVpbHRpbi9wdWxsLmM6NDUzCittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDAgYnVpbHRpbi9wdWxsLmM6NDQ2IGJ1aWx0aW4vcHVsbC5jOjQ1NQorIzogYnVpbHRpbi9yZWJhc2UuYzo5NjIgZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NAorbXNnaWQgIjxyZW1vdGU+IgorbXNnc3RyICI8zrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NDAgYnVpbHRpbi9wdWxsLmM6NDU1IGJ1aWx0aW4vcHVsbC5jOjQ2MAorIzogZ2l0LWxlZ2FjeS1yZWJhc2Uuc2g6NTY0IGdpdC1wYXJzZS1yZW1vdGUuc2g6NjUKK21zZ2lkICI8YnJhbmNoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDggYnVpbHRpbi9yZWJhc2UuYzo5NTQgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3NQorbXNnaWQgIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1NyBnaXQtcGFyc2UtcmVtb3RlLnNoOjk1Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdG8gbWVyZ2Ugd2l0aCB0aGUgcmVmICclcydcbiIKKyJmcm9tIHRoZSByZW1vdGUsIGJ1dCBubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyLOn865IM+Bz4XOuM68zq/Pg861zrnPgiDPg86xz4Igzr/Pgc6vzrbOv8+Fzr0gzr3OsSDOs86vzr3Otc65IM+Dz4XOs8+Hz47Ovc61z4XPg863IM68zrUgz4TOvyByZWYgJyVzJ1xuIgorIs6xz4DPjCDPhM6/zr0gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gzrXOvs+Fz4DOt8+BzrXPhM63z4TOriwgzrHOu867zqwgzrTOtc69IM6tz4fOtc65IM6zzq/Ovc61zrkgzrHOvc6szrrPhM63z4POtyDPhM6tz4TOv865zr/PhSByZWYuIgorCisjOiBidWlsdGluL3B1bGwuYzo1NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODQ0Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg5MgorbXNnaWQgIi0tW25vLV1hdXRvc3Rhc2ggb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXJlYmFzZS4iCittc2dzdHIgIs63IM61z4DOuc67zr/Os86uIC0tW25vLV1hdXRvc3Rhc2ggzrnPg8+Hz43Otc65IM68z4zOvc6/IM68zrUgz4TOvyAtLXJlYmFzZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkwMAorbXNnaWQgIlVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTA0Cittc2dpZCAicHVsbCB3aXRoIHJlYmFzZSIKK21zZ3N0ciAizrXOvc+Dz4nOvM6sz4TPic+DzrcgzrzOtSByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkwNQorbXNnaWQgInBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk1MQorbXNnaWQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk1NQorbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTYyCittc2dpZCAiY2Fubm90IHJlYmFzZSB3aXRoIGxvY2FsbHkgcmVjb3JkZWQgc3VibW9kdWxlIG1vZGlmaWNhdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTkKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1c2ggWzzOtc+AzrnOu86/zrPOrc+CPl0gWzzOsc+Azr/OuM61z4TOrs+BzrnOvz4gWzxyZWZzcGVjPi4uLl1dIgorCisjOiBidWlsdGluL3B1c2guYzoxMTEKK21zZ2lkICJ0YWcgc2hvcnRoYW5kIHdpdGhvdXQgPHRhZz4iCittc2dzdHIgIs+Dz4XOvc+Ezr/OvM6/zrPPgc6xz4bOr86xIM61z4TOuc66zq3PhM6xz4Igz4fPic+Bzq/PgiA8zrXPhM65zrrOrc+EzrE+IgorCisjOiBidWlsdGluL3B1c2guYzoxMjEKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiz4TOvyAtLWRlbGV0ZSDOtM6tz4fOtc+EzrHOuSDOvM+Mzr3OvyDOsc+AzrvOrCDOv869z4zOvM6xz4TOsSByZWYgz4DPgc6/zr/Pgc65z4POvM6/z40iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE2NworbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKyJcbiIKKyLOk865zrEgzr3OsSDOtM65zrHOu86tzr7Otc+EzrUgzr/PgM6/zrnOsc60zq7PgM6/z4TOtSDOsc+Az4wgz4TOuc+CIM60z43OvyDOtc+AzrnOu86/zrPOrc+CIM68z4zOvc65zrzOsSwgzrTOtc6vz4TOtSDPhM6/IHB1c2guIgorImRlZmF1bHQgz4PPhM6/ICdnaXQgaGVscCBjb25maWcnLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRFxuIgorIiVzIgorbXNnc3RyICIiCisizp8gz4DPgc6/z4Igz4TOsSDPgM6szr3PiSDOus67zqzOtM6/z4Igz4TOv8+FIM+Ez4HOrc+Hzr/Ovc+Ezr/PgiDOus67zqzOtM6/z4Ugz4POsc+CIM60zrXOvSDPhM6xzrnPgc65zqzOts61zrkgzrzOtVxuIgorIs+Ezr8gz4zOvc6/zrzOsSDPhM6/z4Ugz4TPgc6tz4fOv869z4TOv8+CIM66zrvOrM60zr/PhSDPg86xz4IuICDOk865zrEgzr3OsSDOtM63zrzOv8+DzrnOtc+Nz4POtc+EzrUgz4PPhM6/zr0gzrrOu86szrTOvyDPgM+Bzr/PgiDPhM6xICIKKyLPgM6szr3PiVxuIgorIs+Dz4TOv869IM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/IM61zr7Phc+AzrfPgc61z4TOt8+Ezq4sIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIs6TzrnOsSDOvc6xIM60zrfOvM6/z4POuc61z43Pg861z4TOtSDPg8+Ezr/OvSDOus67zqzOtM6/IM68zrUgz4TOvyDOr860zrnOvyDPjM69zr/OvM6xIM+Dz4TOv869IM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/ICIKKyLOtc6+z4XPgM63z4HOtc+EzrfPhM6uLCDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAiIgorIs6UzrUgzrLPgc6vz4POus61z4PPhM61IM6xz4XPhM6uIM+Ezrcgz4PPhM65zrPOvM6uIM+DzrUgzrrOrM+Azr/Ouc6/zr0gzrrOu86szrTOvy5cbiIKKyLOk865zrEgzr3OsSDOtM63zrzOv8+DzrnOtc+Nz4POtc+EzrUgz4TOvyDOuc+Dz4TOv8+BzrnOus+MIM+Azr/PhSDOv860zrfOs861zq8gz4PPhM63zr0gz4TPgc6tz4fOv8+Fz4POsSDOus6xz4TOrM+Dz4TOsc+DzrdcbiIKKyIozrHPgM6/z4PPhc69zrTOtc60zrXOvM6tzr3Ov8+FIEhFQUQpIM+Ez47Pgc6xLCDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PM+Mzr3Ov868zrEtz4TOv8+FLc6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/z4UtzrrOu86szrTOv8+FPlxuIgorCisjOiBidWlsdGluL3B1c2guYzoxOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgIiIKKyLOnyDPhM+Bzq3Ph8+Jzr0gzrrOu86szrTOv8+CICVzIM60zrXOvSDOrc+HzrXOuSDPgM+Bzr/PgiDPhM6xIM+AzqzOvc+JIM66zrvOrM60zr8uXG4iCisizpPOuc6xIM69zrEgzrTOt868zr/Pg865zrXPjc+DzrXPhM61IM+Ezr/OvSDPhM+Bzq3Ph86/zr3PhM6xIM66zrvOrM60zr8gzrrOsc65IM69zrEgzr/Pgc6vz4POtc+EzrUgz4TOv869IM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/IM+Jz4IgIgorIs+Az4HOv8+CIM+EzrEgz4DOrM69z4kgz4TOv8+FLCDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61XG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAiIgorIs6fIM+Ez4HOrc+Hz4nOvSDOus67zqzOtM6/z4IgJXMgzq3Ph861zrkgz4DOv867zrvOsc+AzrvOv8+Nz4Igz4DPgc6/z4Igz4TOsSDPgM6szr3PiSDOus67zqzOtM6/z4XPgiwgzrHPgc69zr/Pjc68zrHOuSDOvc6xICIKKyLOtM63zrzOv8+DzrnOtc+Nz4PPiS4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisizpTOt868zr/Pg865zrXPjc61z4TOtSDPg8+Ezr8gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gJyVzJywgz4DOv8+FIM60zrXOvSDOtc6vzr3Osc65IM+Ezr8gz4DPgc6/z4Igz4TOsSDPgM6szr3PiSDPhM6/z4VcbiIKKyLPhM+Bzq3Ph86/zr3PhM+Mz4Igz4POsc+CIM66zrvOrM60zr/PhSAnJXMnLCDPh8+Jz4HOr8+CIM69zrEgzrzOv8+FIM+AzrXOr8+EzrUgz4TOuSDOvc6xIM60zrfOvM6/z4POuc61z43Pg8+JXG4iCisizrrOsc65IM+Azr/Ouc6/zr0gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gzrrOu86szrTOvyDOvc6xIM61zr3Ot868zrXPgc+Oz4PPiS4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI2OQorbXNnaWQgIiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisizpTOtc69IM+Az4HOv8+DzrTOuc6/z4HOr8+DzrHPhM61IHJlZnNwZWNzIM+Az4HOv8+CIM60zrfOvM6/z4POr861z4XPg863LCDOus6xzrkgz4TOvyDPgM+Bzr/Otc+AzrnOu861zrPOvM6tzr3OvyBwdXNoLiIKKyJkZWZhdWx0IM61zq/Ovc6xzrkgz4TOr8+Azr/PhM6xOiBcIm5vdGhpbmdcIi4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3NgorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gSW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLlxuIgorIidnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIs6Rz4DOv8+Bz4HOr8+GzrjOt866zrHOvSDOv865IM61zr3Ot868zrXPgc+Oz4POtc65z4IgzrXPgM61zrnOtM6uIM63IM6szrrPgc63IM+Ezr/PhSDPhM+Bzq3Ph86/zr3PhM6/z4IgzrrOu86szrTOv8+FIM61zq/Ovc6xzrkgz4DOr8+Dz4kgIgorIs6xz4DPjFxuIgorIs+Ezr8gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gzrHOvc+Ezq/Pg8+Ezr/Ouc+Hz4wgz4TOv8+FLiDOlc69z4PPic68zrHPhM+Oz4PPhM61IM+EzrnPgiDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3Otc+CIM6xzrvOu86xzrPOrc+CICjPgC4iCisiz4cuXG4iCisiJ2dpdCBwdWxsIC4uLicpIM+Az4HOuc69IM60zrfOvM6/z4POuc61z43Pg861z4TOtSDOvs6xzr3OrC5cbiIKKyLOlM61zq/PhM61IM+EzrcgJ86jzrfOvM61zq/Pic+DzrcgzrPOuc6xIM+EzrHPh861zq/Otc+CIM+Az4HOv8+JzrjOrs+DzrXOuc+CJyDPg8+Ezr8gJ2dpdCBwdXNoIC0taGVscCcgzrPOuc6xICIKKyLOu861z4DPhM6/zrzOrc+BzrXOuc61z4IuIgorCisjOiBidWlsdGluL3B1c2guYzoyODIKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLOkc+Azr/Pgc+Bzq/Phs64zrfOus6xzr0gzr/OuSDOtc69zrfOvM61z4HPjs+DzrXOuc+CIM61z4DOtc65zrTOriDOtyDOrM66z4HOtyDOtc69z4zPgiDOus67zqzOtM6/z4Ugz4DOv8+FIM60zrfOvM6/z4POuc61z43PhM63zrrOtSDOtc6vzr3Osc65ICIKKyLPgM6vz4PPiSDOsc+Az4xcbiIKKyLPhM6/IM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/IM6xzr3PhM6vz4PPhM6/zrnPh8+MIM+Ezr/PhS4gzpXOvs6szrPOtc+EzrUgzrHPhc+Ez4zOvSDPhM6/zr0gzrrOu86szrTOvyDOus6xzrkgzrXOvc+Dz4nOvM6xz4TPjs+Dz4TOtSDPhM65z4IgIgorIs6xz4DOv868zrHOus+Bz4XPg868zq3Ovc61z4IgzrHOu867zrHOs86tz4JcbiIKKyIoz4Auz4cuICdnaXQgcHVsbCAuLi4nKSDPgM+BzrnOvSDOtM63zrzOv8+DzrnOtc+Nz4POtc+EzrUgzr7Osc69zqwuXG4iCisizpTOtc6vz4TOtSDPhM63ICfOo863zrzOtc6vz4nPg863IM6zzrnOsSDPhM6xz4fOtc6vzrXPgiDPgM+Bzr/Pic64zq7Pg861zrnPgicgz4PPhM6/ICdnaXQgcHVzaCAtLWhlbHAnIM6zzrnOsSAiCisizrvOtc+Az4TOv868zq3Pgc61zrnOtc+CLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg4Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIs6Rz4DOv8+Bz4HOr8+GzrjOt866zrHOvSDOv865IM61zr3Ot868zrXPgc+Oz4POtc65z4IgzrXPgM61zrnOtM6uIM6/IM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/z4IgzrXOvs+Fz4DOt8+BzrXPhM63z4TOrs+CIM+AzrXPgc65zq3Ph861zrkgIgorIs6tz4HOs86/IM+Azr/PhVxuIgorIs60zrUgzrTOuc6xzrjOrc+EzrXPhM61IM+Ezr/PgM65zrrOrC4gzpHPhc+Ez4wgz4DPgc6/zrrOsc67zrXOr8+EzrHOuSDPg8+Fzr3Ors64z4nPgiDPjM+EzrHOvSDOrc69zrEgzqzOu867zr8gzrHPgM6/zrjOtc+Ezq7Pgc65zr8gzq3Ph861zrkgIgorIs60zrfOvM6/z4POuc61z43Pg861zrlcbiIKKyLPg8+Ezr8gzq/OtM65zr8gcmVmLiDOnM+Azr/Pgc61zq8gzr3OsSDOuM6tzrvOtc+EzrUgzr3OsSDOtc69z4PPic68zrHPhM+Oz4POtc+EzrUgz4DPgc+Oz4TOsSDPhM65z4IgzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zrXPgiAiCisizrHOu867zrHOs86tz4JcbiIKKyIoz4Auz4cuICdnaXQgcHVsbCAuLi4nKSDPgM+BzrnOvSDOtM63zrzOv8+DzrnOtc+Nz4POtc+EzrUgzr7Osc69zqwuXG4iCisizpTOtc6vz4TOtSDPhM63ICfOo863zrzOtc6vz4nPg863IM6zzrnOsSDPhM6xz4fOtc6vzrXPgiDPgM+Bzr/Pic64zq7Pg861zrnPgicgz4PPhM6/ICdnaXQgcHVzaCAtLWhlbHAnIM6zzrnOsSAiCisizrvOtc+Az4TOv868zq3Pgc61zrnOtc+CLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk1Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAiIgorIs6Rz4DOv8+Bz4HOr8+GzrjOt866zrHOvSDOv865IM61zr3Ot868zrXPgc+Oz4POtc65z4IgzrXPgM61zrnOtM6uIM63IM61z4TOuc66zq3PhM6xIM+Fz4DOrM+Bz4fOtc65IM6uzrTOtyDPg8+Ezr/OvSDOsc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OvyAiCisizrXOvs+Fz4DOt8+BzrXPhM63z4TOri4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5OAorbXNnaWQgIiIKKyJZb3UgY2Fubm90IHVwZGF0ZSBhIHJlbW90ZSByZWYgdGhhdCBwb2ludHMgYXQgYSBub24tY29tbWl0IG9iamVjdCxcbiIKKyJvciB1cGRhdGUgYSByZW1vdGUgcmVmIHRvIG1ha2UgaXQgcG9pbnQgYXQgYSBub24tY29tbWl0IG9iamVjdCxcbiIKKyJ3aXRob3V0IHVzaW5nIHRoZSAnLS1mb3JjZScgb3B0aW9uLlxuIgorbXNnc3RyICIiCisizpTOtSDOvM+Azr/Pgc61zq/PhM61IM69zrEgzrXOvc63zrzOtc+Bz47Pg861z4TOtSDOrc69zrEgzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gcmVmIM+Azr/PhSDOtM61zq/Ph869zrXOuSDPg861IM6xzr3PhM65zrrOtc6vzrzOtc69zr8gIgorIs+Azr/PhSDOtM61zr0gzrXOr869zrHOuSDPhc+Azr/Oss6/zrvOrixcbiIKKyLOriDOvc6xIM61zr3Ot868zrXPgc+Oz4POtc+EzrUgzq3Ovc6xIM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/IHJlZiDOs865zrEgzr3OsSDPhM6/IM66zqzOvc61z4TOtSDOvc6xIM60zrXOr8+Hzr3Otc65IM+DzrUgIgorIs6xzr3PhM65zrrOtc6vzrzOtc69zr8gz4DOv8+FIM60zrXOvSDOtc6vzr3Osc65IM+Fz4DOv86yzr/Ou86uLFxuIgorIs+Hz4nPgc6vz4Igzr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4POtc+EzrUgz4TOt869IM61z4DOuc67zr/Os86uIM61zr7Osc69zqzOs866zrHPg863z4IgJy0tZm9yY2UnLlxuIgorCisjOiBidWlsdGluL3B1c2guYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICLOlM63zrzOv8+Dzq/Otc+Fz4POtyDPg8+Ezr8gJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICLOsc+Azq3PhM+Fz4fOtSDOtyDOtM63zrzOv8+Dzq/Otc+Fz4POtyDOus6sz4DOv865z4nOvSByZWYgz4PPhM6/ICclcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICLOu86szrjOv8+CIM6xz4DOv864zrXPhM6uz4HOuc6/ICclcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5OQorbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisizpTOtc69IM6tz4fOtc65IM+Bz4XOuM68zrnPg8+EzrXOryDPgM+Bzr/Ov8+BzrnPg868z4zPgiDOtM63zrzOv8+Dzq/Otc+Fz4POt8+CLlxuIgorIs6fz4HOr8+Dz4TOtSDPhM6/IFVSTCDOsc+Az4wgz4TOtyDOs8+BzrHOvM68zq4gzrXOvc+Ezr/Ou8+Ozr0gzq4gz4HPhc64zrzOr8+Dz4TOtSDOrc69zrEgzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gzrHPgM6/zrjOtc+Ezq7Pgc65zr8gIgorIs+Hz4HOt8+DzrnOvM6/z4DOv865z47Ovc+EzrHPglxuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8z4zOvc6/zrzOsT4gPHVybD5cbiIKKyJcbiIKKyLOus6xzrkgzq3PgM61zrnPhM6xIM60zrfOvM6/z4POuc61z43Pg8+EzrUgz4fPgc63z4POuc68zr/PgM6/zrnPjs69z4TOsc+CIM+Ezr8gz4zOvc6/zrzOsSDPhM6/z4UgzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr/PhVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8z4zOvc6/zrzOsT5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU0Cittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAizrHPgM6/zrjOtc+Ezq7Pgc65zr8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NSBidWlsdGluL3NlbmQtcGFjay5jOjE2NAorbXNnaWQgInB1c2ggYWxsIHJlZnMiCittc2dzdHIgIs69zrEgzrPOr869zrXOuSDOtM63zrzOv8+Dzq/Otc+Fz4POtyDPjM67z4nOvSDPhM+Jzr0gcmVmIgorCisjOiBidWlsdGluL3B1c2guYzo1NTYgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjYKK21zZ2lkICJtaXJyb3IgYWxsIHJlZnMiCittc2dzdHIgIs69zrEgzrPOr869zrXOuSDOsc69z4TOuc6zz4HOsc+Gzq4gz4zOu8+Jzr0gz4TPic69IHJlZiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU4Cittc2dpZCAiZGVsZXRlIHJlZnMiCittc2dzdHIgIs69zrEgzrPOr869zrXOuSDOtM65zrHOs8+BzrHPhs6uIM+Ez4nOvSByZWYiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OQorbXNnaWQgInB1c2ggdGFncyAoY2FuJ3QgYmUgdXNlZCB3aXRoIC0tYWxsIG9yIC0tbWlycm9yKSIKK21zZ3N0ciAiIgorIs69zrEgzrPOr869zrXOuSDOtM63zrzOv8+Dzq/Otc+Fz4POtyDPhM+Jzr0gzrXPhM65zrrOtc+Ez47OvSAozrTOtSDOs86vzr3Otc+EzrHOuSDOvc6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zrfOuM61zq8gzrzOtSDPhM6/IC0tYWxsIM6uICIKKyLPhM6/IC0tbWlycm9yKSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY3Cittc2dpZCAiZm9yY2UgdXBkYXRlcyIKK21zZ3N0ciAizr3OsSDOs86vzr3Ov8+Fzr0gzrHOvc6xzrPOus6xz4PPhM65zrrOrCDOtc69zrfOvM61z4HPjs+DzrXOuc+CIgorCisjOiBidWlsdGluL3B1c2guYzo1NjQgYnVpbHRpbi9zZW5kLXBhY2suYzoxODEKK21zZ2lkICI8cmVmbmFtZT46PGV4cGVjdD4iCittc2dzdHIgIjxyZWZuYW1lPjo8ZXhwZWN0PiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY1IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgyCittc2dpZCAicmVxdWlyZSBvbGQgdmFsdWUgb2YgcmVmIHRvIGJlIGF0IHRoaXMgdmFsdWUiCittc2dzdHIgIs69zrEgzrHPgM6xzrnPhM63zrjOtc6vIM63IM+AzrHOu865zqwgz4TOuc68zq4gz4TOv8+FIHJlZiDOvc6xIM61zq/Ovc6xzrkgzrcgzrXOvs6uz4IiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2OAorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIHB1c2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAizq3Ou861zrPPh86/z4IgzrHOvc6xzrTPgc6/zrzOuc66zq7PgiDOtM63zrzOv8+Dzq/Otc+Fz4POt8+CIM+Ez4nOvSDPhc+Azr/Otc69zr/PhM6uz4TPic69IgorCisjOiBidWlsdGluL3B1c2guYzo1NzAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzUKK21zZ2lkICJ1c2UgdGhpbiBwYWNrIgorbXNnc3RyICLOvc6xIM6zzq/Ovc61zrkgz4fPgc6uz4POtyDOu861z4DPhM6/z40gz4DOsc66zq3PhM6/z4UiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MSBidWlsdGluL3B1c2guYzo1NzIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjEKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYyCittc2dpZCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iCittc2dzdHIgIs67zq7PiM63IM+Az4HOv86zz4HOrM68zrzOsc+Ezr/PgiDPgM6xzrrOrc+Ezr/PhSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTczCittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgIs69zrEgzr/Pgc65z4PPhM61zq8gz4TOvyDPgM+Bzr/PgiDPhM6xIM+AzqzOvc+JIM6zzrnOsSDPhM6/IGdpdCBwdWxsL3N0YXR1cyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTc2Cittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgIs69zrEgzrPOr869zrXOuSDOus67zqzOtM61zrzOsSDPhM+Jzr0gz4TOv8+AzrnOus6sIM60zrnOtc6zz4HOsc68zrzOrc69z4nOvSByZWYiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3OAorbXNnaWQgImJ5cGFzcyBwcmUtcHVzaCBob29rIgorbXNnc3RyICLOvc6xIM6zzq/Ovc61zrkgz4DOsc+BzqzOus6xzrzPiM63IM+Ezr/PhSDOsc6zzrrOr8+Dz4TPgc6/z4Ugz4DPgc6/IM60zrfOvM6/z4POr861z4XPg863z4IiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3OQorbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAizr3OsSDOs86vzr3Otc65IM60zrfOvM6/z4POr861z4XPg863IM+Ez4nOvSDOtc+EzrnOus61z4TPjs69IM+Azr/PhSDOu861zq/PgM6/z4XOvSDOsc67zrvOrCDOtc6vzr3Osc65IM+Dz4fOtc+EzrnOus6tz4IiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU4MiBidWlsdGluL3NlbmQtcGFjay5jOjE2OQorbXNnaWQgIkdQRyBzaWduIHRoZSBwdXNoIgorbXNnc3RyICLOvc6xIM+Fz4DOv86zz4HOsc+GzrXOryDOvM61IEdQRyDOtyDOtM63zrzOv8+Dzq/Otc+Fz4POtyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTg0IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc2Cittc2dpZCAicmVxdWVzdCBhdG9taWMgdHJhbnNhY3Rpb24gb24gcmVtb3RlIHNpZGUiCittc2dzdHIgIs69zrEgzrbOt8+EzrfOuM61zq8gzrHPhM6/zrzOuc66zq4gz4PPhc69zrHOu867zrHOs86uIM+Dz4TOt869IM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc63IM+AzrvOtc+Fz4HOrCIKKworIzogYnVpbHRpbi9wdXNoLmM6NjAyCittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIs+Ezr8gLS1kZWxldGUgzrTOtc69IM61zq/Ovc6xzrkgz4PPhc68zrLOsc+Ez4wgzrzOtSDPhM6xIC0tYWxsLCAtLW1pcnJvciDOus6xzrkgLS10YWdzIgorCisjOiBidWlsdGluL3B1c2guYzo2MDQKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiz4TOvyAtLWRlbGV0ZSDOtM61zr0gzq3Ph861zrkgzr3PjM63zrzOsSDPh8+Jz4HOr8+CIM66zrHOvc6tzr3OsSByZWYiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYwNworbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiz4TOvyAtLWFsbCDOus6xzrkgz4TOvyAtLXRhZ3MgzrTOtc69IM61zq/Ovc6xzrkgz4PPhc68zrLOsc+EzqwgzrzOtc+EzrHOvs+NIM+Ezr/Phc+CIgorCisjOiBidWlsdGluL3B1c2guYzo2MDkKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICLPhM6/IC0tYWxsIM60zrUgzrPOr869zrXPhM6xzrkgzr3OsSDPg8+Fzr3OtM+FzrHPg8+EzrXOryDOvM61IHJlZnNwZWMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMworbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiz4TOvyAtLW1pcnJvciDOus6xzrkgz4TOvyAtLXRhZ3MgzrTOtc69IM61zq/Ovc6xzrkgz4PPhc68zrLOsc+EzqwgzrzOtc+EzrHOvs+NIM+Ezr/Phc+CIgorCisjOiBidWlsdGluL3B1c2guYzo2MTUKK21zZ2lkICItLW1pcnJvciBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICLPhM6/IC0tbWlycm9yIM60zrUgzrPOr869zrXPhM6xzrkgzr3OsSDPg8+Fzr3OtM+FzrHPg8+EzrXOryDOvM61IHJlZnNwZWMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxOAorbXNnaWQgIi0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICLPhM6/IC0tYWxsIM66zrHOuSDPhM6/IC0tbWlycm9yIM60zrXOvSDOtc6vzr3Osc65IM+Dz4XOvM6yzrHPhM6sIM68zrXPhM6xzr7PjSDPhM6/z4XPgiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM3Cittc2dpZCAicHVzaCBvcHRpb25zIG11c3Qgbm90IGhhdmUgbmV3IGxpbmUgY2hhcmFjdGVycyIKK21zZ3N0ciAizr/OuSDOtc+AzrnOu86/zrPOrc+CIM60zrfOvM6/z4POr861z4XPg863z4IgzrTOtc69IM+Az4HOrc+AzrXOuSDOvc6xIM6tz4fOv8+Fzr0gz4fOsc+BzrHOus+Ezq7Pgc61z4IgbmV3bGluZSIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtYmFzZT4uLjxvbGQtdGlwPiA8bmV3LWJhc2U+Li48bmV3LXRpcD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OQorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtdGlwPi4uLjxuZXctdGlwPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoxMAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxiYXNlPiA8b2xkLXRpcD4gPG5ldy10aXA+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjIxCittc2dpZCAiUGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyMworbXNnaWQgInVzZSBzaW1wbGUgZGlmZiBjb2xvcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NjEgYnVpbHRpbi9yYW5nZS1kaWZmLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gLi4gaW4gcmFuZ2U6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NzUKK21zZ2lkICJzaW5nbGUgYXJnIGZvcm1hdCBtdXN0IGJlIHN5bW1ldHJpYyByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo5MAorbXNnaWQgIm5lZWQgdHdvIGNvbW1pdCByYW5nZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzo0MQorbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI5Cittc2dpZCAiTWVyZ2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMQorbXNnaWQgInBlcmZvcm0gYSBtZXJnZSBpbiBhZGRpdGlvbiB0byBhIHJlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzMKK21zZ2lkICIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzUKK21zZ2lkICIzLXdheSBtZXJnZSBpbiBwcmVzZW5jZSBvZiBhZGRzIGFuZCByZW1vdmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM3Cittc2dpZCAic2FtZSBhcyAtbSwgYnV0IGRpc2NhcmQgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOAorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOQorbXNnaWQgInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQyCittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OAorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OQorbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MQorbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MworbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMwCittc2dpZCAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dIFs8dXBzdHJlYW0+XSAiCisiWzxicmFuY2g+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMyCittc2dpZCAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dIC0tcm9vdCBbPGJyYW5jaD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzQKK21zZ2lkICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMjEgYnVpbHRpbi9yZWJhc2UuYzoxNDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0ICdvbnRvJzogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yaWctaGVhZDogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBpbnZhbGlkIGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6Mjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDAyCittc2dpZCAiY291bGQgbm90IGRldGVybWluZSBIRUFEIHJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIyCittc2dpZCAiIgorIlJlc29sdmUgYWxsIGNvbmZsaWN0cyBtYW51YWxseSwgbWFyayB0aGVtIGFzIHJlc29sdmVkIHdpdGhcbiIKKyJcImdpdCBhZGQvcm0gPGNvbmZsaWN0ZWRfZmlsZXM+XCIsIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiWW91IGNhbiBpbnN0ZWFkIHNraXAgdGhpcyBjb21taXQ6IHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIuXG4iCisiVG8gYWJvcnQgYW5kIGdldCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgXCJnaXQgcmViYXNlXCIsIHJ1biBcImdpdCByZWJhc2UgLS0iCisiYWJvcnRcIi4iCittc2dzdHIgIiIKKyLOlc+AzrnOu8+Nz4PPhM61IM+MzrvOtc+CIM+EzrnPgiDPg8+FzrPOus+Bzr/Pjc+DzrXOuc+CIM+HzrXOuc+Bzr/Ous6vzr3Ot8+EzrEsIM61z4DOuc+DzrfOvM6szr3Otc+Ezq0gz4TOuc+CIM+Jz4IgzrXPgM65zrvPhc68zq3Ovc61z4IgzrzOtVxuIgorIlwiZ2l0IGFkZC9ybSA8z4PPhc6zzrrPgc6/z4XPjM68zrXOvc6xIM6xz4HPh861zq/OsT5cIiwgzq3PgM61zrnPhM6xIM+Ez4HOrc6+z4TOtSBcImdpdCByZWJhc2UgLS1jb250aW51ZSIKKyJcIi5cbiIKKyLOlc65zrTOrM67zrvPic+CIM68z4DOv8+BzrXOr8+EzrUgzr3OsSDPgM+Bzr/Pg8+AzrXPgc6sz4POtc+EzrUgzrHPhc+Ezq4gz4TOt869IM+Fz4DOv86yzr/Ou86uOiDPhM+Bzq3Ovs+EzrUgXCJnaXQgcmViYXNlIC0tIgorInNraXBcIi5cbiIKKyLOk865zrEgzr3OsSDOtc6zzrrOsc+EzrHOu861zq/PiM61z4TOtSDOus6xzrkgzr3OsSDOtc+AzrnPg8+Ez4HOrc+IzrXPhM61IM+Dz4TOt869IM66zrHPhM6sz4PPhM6xz4POtyDPgM+BzrnOvSDOsc+Az4wgz4TOvyBcImdpdCAiCisicmViYXNlXCIsIM+Ez4HOrc6+z4TOtSBcImdpdCByZWJhc2UgLS1hYm9ydFwiLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorImdpdCBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSBwcmVwYXJpbmcgdGhlIHBhdGNoZXMgdG8gcmVwbGF5XG4iCisidGhlc2UgcmV2aXNpb25zOlxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIkFzIGEgcmVzdWx0LCBnaXQgY2Fubm90IHJlYmFzZSB0aGVtLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjk0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXNcbiIKKyJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuXG4iCisiU2VlIGdpdC1yZWJhc2UoMSkgZm9yIGRldGFpbHMuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxicmFuY2g+J1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6OTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6OTk0Cittc2dpZCAiZXhlYyBjb21tYW5kcyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjk5OAorbXNnaWQgImVtcHR5IGV4ZWMgY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwNDAKK21zZ2lkICJyZWJhc2Ugb250byBnaXZlbiBicmFuY2ggaW5zdGVhZCBvZiB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwNDIKK21zZ2lkICJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA0NAorbXNnaWQgImJlIHF1aWV0LiBpbXBsaWVzIC0tbm8tc3RhdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwNDcKK21zZ2lkICJkaXNwbGF5IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA1MAorbXNnaWQgImRvIG5vdCBzaG93IGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwNTMKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5OiBsaW5lIHRvIGVhY2ggY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA1NSBidWlsdGluL3JlYmFzZS5jOjEwNTkgYnVpbHRpbi9yZWJhc2UuYzoxMDYxCittc2dpZCAicGFzc2VkIHRvICdnaXQgYW0nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA2MyBidWlsdGluL3JlYmFzZS5jOjEwNjUKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBhcHBseSciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMDY3IGJ1aWx0aW4vcmViYXNlLmM6MTA3MAorbXNnaWQgImNoZXJyeS1waWNrIGFsbCBjb21taXRzLCBldmVuIGlmIHVuY2hhbmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwNzIKK21zZ2lkICJjb250aW51ZSIKK21zZ3N0ciAiz4PPhc69zq3Ph861zrnOsSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMDc1Cittc2dpZCAic2tpcCBjdXJyZW50IHBhdGNoIGFuZCBjb250aW51ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwNzcKK21zZ2lkICJhYm9ydCBhbmQgY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMDgwCittc2dpZCAiYWJvcnQgYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwODEKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwODQKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBmaWxlIGJlaW5nIGFwcGxpZWQgb3IgbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA4NworbXNnaWQgInVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA5MQorbXNnaWQgImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA5NQorbXNnaWQgInRyeSB0byByZWNyZWF0ZSBtZXJnZXMgaW5zdGVhZCBvZiBpZ25vcmluZyB0aGVtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA5OQorbXNnaWQgImFsbG93IHJlcmVyZSB0byB1cGRhdGUgaW5kZXggd2l0aCByZXNvbHZlZCBjb25mbGljdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjExMDIKK21zZ2lkICJwcmVzZXJ2ZSBlbXB0eSBjb21taXRzIGR1cmluZyByZWJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMTA0Cittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISB1bmRlciAtaSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjExMTAKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTExMgorbXNnaWQgImFkZCBleGVjIGxpbmVzIGFmdGVyIGVhY2ggY29tbWl0IG9mIHRoZSBlZGl0YWJsZSBsaXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTExNgorbXNnaWQgImFsbG93IHJlYmFzaW5nIGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjExMTkKK21zZ2lkICJ0cnkgdG8gcmViYXNlIG1lcmdlcyBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMTIyCittc2dpZCAidXNlICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcgdG8gcmVmaW5lIHVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTEyNAorbXNnaWQgInVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMTI2IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEyCittc2dpZCAib3B0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTEyNworbXNnaWQgInBhc3MgdGhlIGFyZ3VtZW50IHRocm91Z2ggdG8gdGhlIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTEzMAorbXNnaWQgInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMTMzIGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjE5OAorbXNnaWQgImF1dG9tYXRpY2FsbHkgcmUtc2NoZWR1bGUgYW55IGBleGVjYCB0aGF0IGZhaWxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhlYyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjExNjcgZ2l0LWxlZ2FjeS1yZWJhc2Uuc2g6MjIwCittc2dpZCAiSXQgbG9va3MgbGlrZSAnZ2l0IGFtJyBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMjA4IGdpdC1sZWdhY3ktcmViYXNlLnNoOjQwNgorbXNnaWQgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMjEyIGdpdC1sZWdhY3ktcmViYXNlLnNoOjQxNworbXNnaWQgIlRoZSAtLWVkaXQtdG9kbyBhY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW50ZXJhY3RpdmUgcmViYXNlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEyMjYgZ2l0LWxlZ2FjeS1yZWJhc2Uuc2g6NDI0Cittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEyMzggZ2l0LWxlZ2FjeS1yZWJhc2Uuc2g6NDI3Cittc2dpZCAiIgorIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlblxuIgorIm1hcmsgdGhlbSBhcyByZXNvbHZlZCB1c2luZyBnaXQgYWRkIgorbXNnc3RyICIiCisizqDPgc6tz4DOtc65IM69zrEgzrXPgM61zr7Otc+BzrPOsc+Dz4TOtc6vz4TOtSDPjM67zrXPgiDPhM65z4Igz4PPhc6zzrrPgc6/z43Pg861zrnPgiDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CIM66zrHOuSDOvM61z4TOrFxuIgorIs69zrEgz4TOuc+CIM61z4DOuc+DzrfOvM6szr3Otc+EzrUgz4nPgiDOtc+AzrnOu8+FzrzOrc69zrXPgiDPh8+BzrfPg865zrzOv8+Azr/Ouc+Ozr3PhM6xz4IgZ2l0IGFkZCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMjU3Cittc2dpZCAiY291bGQgbm90IGRpc2NhcmQgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1vdmUgYmFjayB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEyODcgYnVpbHRpbi9ybS5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlICclcyciCittc2dzdHIgIs60zrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ezq4gzrcgzrHPhs6xzq/Pgc61z4POtyDPhM6/z4UgJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAlcyBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JXNcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQlc1xuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMzM0Cittc2dpZCAic3dpdGNoIGBDJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG1vZGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM5NworbXNnaWQgIi0tc3RyYXRlZ3kgcmVxdWlyZXMgLS1tZXJnZSBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0NgorbXNnaWQgImNhbm5vdCBjb21iaW5lIGFtIG9wdGlvbnMgd2l0aCBlaXRoZXIgaW50ZXJhY3RpdmUgb3IgbWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjUKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmViYXNlLW1lcmdlcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDY5IGdpdC1sZWdhY3ktcmViYXNlLnNoOjU0NAorbXNnaWQgIiIKKyJlcnJvcjogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3NQorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLXJlYmFzZS1tZXJnZXMnIHdpdGggJy0tc3RyYXRlZ3ktb3B0aW9uJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzgKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1yZWJhc2UtbWVyZ2VzJyB3aXRoICctLXN0cmF0ZWd5JyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwOAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgbmV3IHJvb3QgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTU4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaC9jb21taXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NjYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjM4CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkzNAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlZjogJXMiCittc2dzdHIgIs6UzrXOvSDPhc+AzqzPgc+HzrXOuSByZWY6ICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzgKK21zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHRvIGEgcmV2aXNpb24iCittc2dzdHIgIs6UzrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ezq4gzrcgz4TOsc+Nz4TOuc+Dzrcgz4TOv8+FIEhFQUQgzrzOtSDOus6sz4DOv865zrEgzq3Ous60zr/Pg863IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MTkgZ2l0LWxlZ2FjeS1yZWJhc2Uuc2g6NjczCittc2dpZCAiQ2Fubm90IGF1dG9zdGFzaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCBzdGFzaCByZXNwb25zZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYXV0b3N0YXNoOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYzNAorbXNnaWQgImNvdWxkIG5vdCByZXNldCAtLWhhcmQiCittc2dzdHIgIs60zrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ezq4gzrcgLS1oYXJkIM61z4DOsc69zrHPhs6/z4HOrCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjM1IGJ1aWx0aW4vcmVzZXQuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQgJXMiCittc2dzdHIgIs6kzr8gSEVBRCDPhM+Oz4HOsSDOss+Bzq/Pg866zrXPhM6xzrkgz4PPhM6/ICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTEgZ2l0LWxlZ2FjeS1yZWJhc2Uuc2g6NjgyCittc2dpZCAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjkxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzd2l0Y2ggdG8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzAyIGdpdC1sZWdhY3ktcmViYXNlLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MTIgZ2l0LWxlZ2FjeS1yZWJhc2Uuc2g6NzE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAlcyBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTcyMiBnaXQtbGVnYWN5LXJlYmFzZS5zaDoyMTUKK21zZ2lkICJUaGUgcHJlLXJlYmFzZSBob29rIHJlZnVzZWQgdG8gcmViYXNlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyB0byAlczpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc1NworIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi5cbiIKK21zZ3N0ciAiIgorIs6gz4HPjs+EzrEsIM6zzq/Ovc61z4TOsc65IM6zz43Pgc65z4POvM6xIM+Az4HOv8+CIM+EzrEgz4DOr8+Dz4kgz4TOv8+FIGhlYWQgzrPOuc6xIM69zrEgzrPOr869zrXOuSDOtc+AzrHOvc6szrvOt8+Izrcgz4TOt8+CICIKKyLOtM6/z4XOu861zrnOrM+CIM+DzrHPgiDPgM6szr3PiSDPg861IM6xz4XPhM+MLi4uXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc2NQorbXNnaWQgIkNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkZWQgJXMgdG8gJXMuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UtLWludGVyYWN0aXZlLmM6MjUKK21zZ2lkICJubyBIRUFEPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzo1OAorbXNnaWQgImNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAlcyIKK21zZ3N0ciAizrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDPhM6/IM6szr3Ov865zrPOvM6xIM+Ezr/PhSAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UtLWludGVyYWN0aXZlLmM6MTE1Cittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIHRvZG8gbGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxMzEKK21zZ2lkICJnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxNTAKK21zZ2lkICJrZWVwIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UtLWludGVyYWN0aXZlLmM6MTUyIGJ1aWx0aW4vcmV2ZXJ0LmM6MTI1Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjE1MworbXNnaWQgInJlYmFzZSBtZXJnZSBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjE1NQorbXNnaWQgImtlZXAgb3JpZ2luYWwgYnJhbmNoIHBvaW50cyBvZiBjb3VzaW5zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjE1NworbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UtLWludGVyYWN0aXZlLmM6MTU4Cittc2dpZCAic2lnbiBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjE2MAorbXNnaWQgImNvbnRpbnVlIHJlYmFzZSIKK21zZ3N0ciAiz4PPhc69zq3Ph861zrnOsTsgcmViYXNlIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxNjIKK21zZ2lkICJza2lwIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxNjMKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UtLWludGVyYWN0aXZlLmM6MTY1Cittc2dpZCAic2hvdyB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxNjgKK21zZ2lkICJzaG9ydGVuIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxNzAKK21zZ2lkICJleHBhbmQgY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjE3MgorbXNnaWQgImNoZWNrIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UtLWludGVyYWN0aXZlLmM6MTc0Cittc2dpZCAicmVhcnJhbmdlIGZpeHVwL3NxdWFzaCBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxNzYKK21zZ2lkICJpbnNlcnQgZXhlYyBjb21tYW5kcyBpbiB0b2RvIGxpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UtLWludGVyYWN0aXZlLmM6MTc3Cittc2dpZCAib250byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxNzkKK21zZ2lkICJyZXN0cmljdC1yZXZpc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxNzkKK21zZ2lkICJyZXN0cmljdCByZXZpc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxODAKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxODEKK21zZ2lkICJzcXVhc2ggb250byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxODMKK21zZ2lkICJ0aGUgdXBzdHJlYW0gY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjE4NAorbXNnaWQgImhlYWQtbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxODQKK21zZ2lkICJoZWFkIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UtLWludGVyYWN0aXZlLmM6MTg5Cittc2dpZCAicmViYXNlIHN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjE5MAorbXNnaWQgInN0cmF0ZWd5LW9wdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UtLWludGVyYWN0aXZlLmM6MTkxCittc2dpZCAic3RyYXRlZ3kgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxOTIKK21zZ2lkICJzd2l0Y2gtdG8iCittc2dzdHIgIs6xzrvOu86xzrPOriDPg861IgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxOTMKK21zZ2lkICJ0aGUgYnJhbmNoIG9yIGNvbW1pdCB0byBjaGVja291dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxOTQKK21zZ2lkICJvbnRvLW5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UtLWludGVyYWN0aXZlLmM6MTk0Cittc2dpZCAib250byBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1pbnRlcmFjdGl2ZS5jOjE5NQorbXNnaWQgImNtZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS0taW50ZXJhY3RpdmUuYzoxOTUKK21zZ2lkICJ0aGUgY29tbWFuZCB0byBydW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UtLWludGVyYWN0aXZlLmM6MjI0Cittc2dpZCAiLS1bbm8tXXJlYmFzZS1jb3VzaW5zIGhhcyBubyBlZmZlY3Qgd2l0aG91dCAtLXJlYmFzZS1tZXJnZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UtLWludGVyYWN0aXZlLmM6MjMwCittc2dpZCAiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzozMworbXNnaWQgImdpdCByZWNlaXZlLXBhY2sgPGdpdC1kaXI+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODMwCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnlcbiIKKyJpcyBkZW5pZWQsIGJlY2F1c2UgaXQgd2lsbCBtYWtlIHRoZSBpbmRleCBhbmQgd29yayB0cmVlIGluY29uc2lzdGVudFxuIgorIndpdGggd2hhdCB5b3UgcHVzaGVkLCBhbmQgd2lsbCByZXF1aXJlICdnaXQgcmVzZXQgLS1oYXJkJyB0byBtYXRjaFxuIgorInRoZSB3b3JrIHRyZWUgdG8gSEVBRC5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCB0aGUgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVcbiIKKyJ0byAnaWdub3JlJyBvciAnd2FybicgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IHB1c2hpbmcgaW50b1xuIgorIml0cyBjdXJyZW50IGJyYW5jaDsgaG93ZXZlciwgdGhpcyBpcyBub3QgcmVjb21tZW5kZWQgdW5sZXNzIHlvdVxuIgorImFycmFuZ2VkIHRvIHVwZGF0ZSBpdHMgd29yayB0cmVlIHRvIG1hdGNoIHdoYXQgeW91IHB1c2hlZCBpbiBzb21lXG4iCisib3RoZXIgd2F5LlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2aW91ciwgc2V0XG4iCisiJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODUwCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIGRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBkZW5pZWQsIGJlY2F1c2UgdGhlIG5leHRcbiIKKyInZ2l0IGNsb25lJyB3b24ndCByZXN1bHQgaW4gYW55IGZpbGUgY2hlY2tlZCBvdXQsIGNhdXNpbmcgY29uZnVzaW9uLlxuIgorIlxuIgorIllvdSBjYW4gc2V0ICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvXG4iCisiJ3dhcm4nIG9yICdpZ25vcmUnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBkZWxldGluZyB0aGVcbiIKKyJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlLCB5b3UgY2FuIHNldCBpdCB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTI5Cittc2dpZCAicXVpZXQiCittc2dzdHIgIs+DzrnPic+AzrfOu86sIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NDMKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAizqDPgc6tz4DOtc65IM69zrEgzr/Pgc6vz4POtc+EzrUgzq3Ovc6xzr0gz4bOrM66zrXOu86/LiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoxNworbXNnaWQgIiIKKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9PHRpbWU+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHRpbWU+XSBbLS0iCisicmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gWy0tYWxsXSAiCisiPHJlZnM+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjIKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoyNQorbXNnaWQgImdpdCByZWZsb2cgZXhpc3RzIDxyZWY+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NTY3IGJ1aWx0aW4vcmVmbG9nLmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgcmVhY2hhYmxlIG9iamVjdHMuLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIG5vd2hlcmUhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6Njk1Cittc2dpZCAibm8gcmVmbG9nIHNwZWNpZmllZCB0byBkZWxldGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmVmbG9nOiAlcyIKK21zZ3N0ciAizrTOtc69IM61zq/Ovc6xzrkgcmVmbG9nOiAlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVmbG9nIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmIGZvcm1hdDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NjQKK21zZ2lkICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNworbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTggYnVpbHRpbi9yZW1vdGUuYzozOAorbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkgYnVpbHRpbi9yZW1vdGUuYzo0MworbXNnaWQgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NDgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjEKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIyCittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzCittc2dpZCAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3JvdXA+IHwgPHJlbW90ZT4pLi4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNSBidWlsdGluL3JlbW90ZS5jOjc0Cittc2dpZCAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjYgYnVpbHRpbi9yZW1vdGUuYzo3OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI3IGJ1aWx0aW4vcmVtb3RlLmM6ODAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjggYnVpbHRpbi9yZW1vdGUuYzo4MQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozMworbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjUzCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTQKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1OQorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NAorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjkKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjMKK21zZ2lkICJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY1Cittc2dpZCAiaW1wb3J0IGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMgd2hlbiBmZXRjaGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2OAorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MAorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTczCittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg3Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5NCBidWlsdGluL3JlbW90ZS5jOjYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk4IGJ1aWx0aW4vcmVtb3RlLmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDQzIGJ1aWx0aW4vcmVtb3RlLmM6NDUxCittc2dpZCAiKG1hdGNoaW5nKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ1NQorbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjI5IGJ1aWx0aW4vcmVtb3RlLmM6NzY1IGJ1aWx0aW4vcmVtb3RlLmM6ODY0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAnJXMnIgorbXNnc3RyICLOlM61zr0gz4XPgM6sz4HPh861zrkgz4TOrc+Ezr/Ouc6/z4IgzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr/PgiDOtc6+z4XPgM63z4HOtc+EzrfPhM6uz4I6ICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgwMgorbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICIiCisizqPOt868zrXOr8+Jz4POtzogzojOvc6xz4IgzrrOu86szrTOv8+CIM61zrrPhM+Mz4Igz4TOt8+CIM65zrXPgc6xz4HPh86vzrHPgiByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSDOtM61zr0gIgorIs6xz4bOsc65z4HOrc64zrfOus61LFxuIgorIs6zzrnOsSDOvc6xIM+Ezr/OvSDOtM65zrHOs8+BzqzPiM61z4TOtSwgz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtToiCittc2dzdHJbMV0gIiIKKyLOo863zrzOtc6vz4nPg863OiDOms6sz4DOv865zr/OuSDOus67zqzOtM6/zrkgzrXOus+Ez4zPgiDPhM63z4IgzrnOtc+BzrHPgc+Hzq/Osc+CIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IM60zrXOvSAiCisizrHPhs6xzrnPgc6tzrjOt866zrHOvSxcbiIKKyLOs865zrEgzr3OsSDPhM6/z4XPgiDOtM65zrHOs8+BzqzPiM61z4TOtSwgz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtToiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxNworIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiDOvc6tzr8gKM63IM61z4DPjM68zrXOvc63IM6xzr3OrM66z4TOt8+DzrcgzrjOsSDOsc+Azr/OuM63zrrOtc+Nz4POtc65IM68zq3Pg86xIM+Dz4TOvyByZW1vdGVzLyVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjAKK21zZ2lkICIgdHJhY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyMgorbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTI0Cittc2dpZCAiID8/PyIKK21zZ3N0ciAiIDs7OyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTc0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgKHdpdGggbWVyZ2VzKSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtKnMgICAgYW5kIHdpdGggcmVtb3RlICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDMyCittc2dpZCAiY3JlYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzNQorbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzkKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICLPgM67zq7Pgc+Jz4IgzrXOvc6uzrzOtc+Bzr8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MgorbXNnaWQgImZhc3QtZm9yd2FyZGFibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQ1Cittc2dpZCAibG9jYWwgb3V0IG9mIGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzMAorbXNnaWQgImRvIG5vdCBxdWVyeSByZW1vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NworIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIFVSTCAgzrHOvc6szrrPhM63z4POt8+COiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU5IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NSBidWlsdGluL3JlbW90ZS5jOjEzMTQKK21zZ2lkICIobm8gVVJMKSIKK21zZ3N0ciAiKM66zrHOvc6tzr3OsSBVUkwpIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uICc6JyBzaG91bGQgYWxpZ24KKyMuIHdpdGggdGhlIG9uZSBpbiAiIEZldGNoIFVSTDogJXMiCisjLiB0cmFuc2xhdGlvbi4KKyMuCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzMgYnVpbHRpbi9yZW1vdGUuYzoxMTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUHVzaCAgVVJMOiAlcyIKK21zZ3N0ciAiICBVUkwgIM60zrfOvM6/z4POr861z4XPg863z4I6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzcgYnVpbHRpbi9yZW1vdGUuYzoxMTc5IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzcKK21zZ2lkICIobm90IHF1ZXJpZWQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3OQorbXNnaWQgIih1bmtub3duKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBSZW1vdGUgYnJhbmNoOiVzIgorbXNnaWRfcGx1cmFsICIgIFJlbW90ZSBicmFuY2hlczolcyIKK21zZ3N0clswXSAiICDOkc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3Ov8+CIM66zrvOrM60zr/PgjolcyIKK21zZ3N0clsxXSAiICDOkc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3Ov865IM66zrvOrM60zr/OuTolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTk4IGJ1aWx0aW4vcmVtb3RlLmM6MTIyNAorbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDcKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxNQorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQyCittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI0NAorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU5Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNjEKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAizpTOtc69IM61zq/Ovc6xzrkgzq3Os866z4XPgc6/IHJlZjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiDPhM6/ICVzIM64zrEgzrzOtc6vzr3Otc65IM61zrrOus+BzrXOvM6tz4IhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICJVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3dvdWxkIHBydW5lXSAlcyIKK21zZ3N0ciAiICogW864zrEgzrrOu86szrTOtc+FzrUgz4TOv10gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMzMAorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiICogW866zrvOsc60zrXOvM6tzr3Ov10gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NQorbXNnaWQgInBydW5lIHJlbW90ZXMgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDM4IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5MiBidWlsdGluL3JlbW90ZS5jOjE1NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAizpTOtc69IM+Fz4DOrM+Bz4fOtc65IM+Ezq3PhM6/zrnOv8+CIM6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/z4IgzrXOvs+Fz4DOt8+BzrXPhM63z4TOrs+CICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ1NAorbXNnaWQgImFkZCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDYxCittc2dpZCAibm8gcmVtb3RlIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NzgKK21zZ2lkICJxdWVyeSBwdXNoIFVSTHMgcmF0aGVyIHRoYW4gZmV0Y2ggVVJMcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0ODAKK21zZ2lkICJyZXR1cm4gYWxsIFVSTHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIFVSTHMgY29uZmlndXJlZCBmb3IgcmVtb3RlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM0Cittc2dpZCAibWFuaXB1bGF0ZSBwdXNoIFVSTHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM2Cittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzgKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NDUKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2xkIFVSTCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIgorbXNnc3RyICLOlM61IM6yz4HOrc64zrfOus61IM+Ezq3PhM6/zrnOvyBVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OTQKK21zZ2lkICJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjEwCittc2dpZCAiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIyCittc2dpZCAiZ2l0IHJlcGFjayBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI3Cittc2dpZCAiIgorIkluY3JlbWVudGFsIHJlcGFja3MgYXJlIGluY29tcGF0aWJsZSB3aXRoIGJpdG1hcCBpbmRleGVzLiAgVXNlXG4iCisiLS1uby13cml0ZS1iaXRtYXAtaW5kZXggb3IgZGlzYWJsZSB0aGUgcGFjay53cml0ZWJpdG1hcHMgY29uZmlndXJhdGlvbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMDAKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjM5IGJ1aWx0aW4vcmVwYWNrLmM6NDExCittc2dpZCAicmVwYWNrOiBFeHBlY3RpbmcgZnVsbCBoZXggb2JqZWN0IElEIGxpbmVzIG9ubHkgZnJvbSBwYWNrLW9iamVjdHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjU2Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTQKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NgorbXNnaWQgInNhbWUgYXMgLWEsIGFuZCB0dXJuIHVucmVhY2hhYmxlIG9iamVjdHMgbG9vc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTkKK21zZ2lkICJyZW1vdmUgcmVkdW5kYW50IHBhY2tzLCBhbmQgcnVuIGdpdC1wcnVuZS1wYWNrZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDEKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwMworbXNnaWQgInBhc3MgLS1uby1yZXVzZS1vYmplY3QgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwNQorbXNnaWQgImRvIG5vdCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwOAorbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzEwCittc2dpZCAid3JpdGUgYml0bWFwIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzEyCittc2dpZCAicGFzcyAtLWRlbHRhLWlzbGFuZHMgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMworbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE0Cittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNgorbXNnaWQgIndpdGggLWEsIHJlcGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE4Cittc2dpZCAic2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE5IGJ1aWx0aW4vcmVwYWNrLmM6MzI1Cittc2dpZCAiYnl0ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjAKK21zZ2lkICJzYW1lIGFzIHRoZSBhYm92ZSwgYnV0IGxpbWl0IG1lbW9yeSBzaXplIGluc3RlYWQgb2YgZW50cmllcyBjb3VudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMgorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBkZWx0YSBkZXB0aCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNAorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNgorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI4Cittc2dpZCAicmVwYWNrIG9iamVjdHMgaW4gcGFja3MgbWFya2VkIHdpdGggLmtlZXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMzAKK21zZ2lkICJkbyBub3QgcmVwYWNrIHRoaXMgcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjM0MAorbXNnaWQgImNhbm5vdCBkZWxldGUgcGFja3MgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozNDQKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC1BIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0MjAKK21zZ2lkICJOb3RoaW5nIG5ldyB0byBwYWNrLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogU29tZSBwYWNrcyBpbiB1c2UgaGF2ZSBiZWVuIHJlbmFtZWQgYnlcbiIKKyJXQVJOSU5HOiBwcmVmaXhpbmcgb2xkLSB0byB0aGVpciBuYW1lLCBpbiBvcmRlciB0b1xuIgorIldBUk5JTkc6IHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGVcbiIKKyJXQVJOSU5HOiBmaWxlLiAgQnV0IHRoZSBvcGVyYXRpb24gZmFpbGVkLCBhbmQgdGhlXG4iCisiV0FSTklORzogYXR0ZW1wdCB0byByZW5hbWUgdGhlbSBiYWNrIHRvIHRoZWlyXG4iCisiV0FSTklORzogb3JpZ2luYWwgbmFtZXMgYWxzbyBmYWlsZWQuXG4iCisiV0FSTklORzogUGxlYXNlIHJlbmFtZSB0aGVtIGluICVzIG1hbnVhbGx5OlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMgorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gPG9iamVjdD4gPHJlcGxhY2VtZW50PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMworbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxvYmplY3Q+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjUKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tY29udmVydC1ncmFmdC1maWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI2Cittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcKK21zZ2lkICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFstbCBbPHBhdHRlcm4+XV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTggYnVpbHRpbi9yZXBsYWNlLmM6MjAzIGJ1aWx0aW4vcmVwbGFjZS5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmIgorbXNnc3RyICLOsc+Azq3PhM+Fz4fOtSDOtyDPhM6xz43PhM65z4POtyDPhM6/z4UgJyVzJyDOvM61IM66zqzPgM6/zrnOvyDOrc6zzrrPhc+Bzr8gcmVmIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCByZXBsYWNlIGZvcm1hdCAnJXMnXG4iCisidmFsaWQgZm9ybWF0cyBhcmUgJ3Nob3J0JywgJ21lZGl1bScgYW5kICdsb25nJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVwbGFjZSByZWYgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk9iamVjdHMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlLlxuIgorIiclcycgcG9pbnRzIHRvIGEgcmVwbGFjZWQgb2JqZWN0IG9mIHR5cGUgJyVzJ1xuIgorIndoaWxlICclcycgcG9pbnRzIHRvIGEgcmVwbGFjZW1lbnQgb2JqZWN0IG9mIHR5cGUgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzOAorbXNnaWQgImNhdC1maWxlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI2OAorbXNnaWQgInVuYWJsZSB0byBzcGF3biBta3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcyCittc2dpZCAidW5hYmxlIHRvIHJlYWQgZnJvbSBta3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjgxCittc2dpZCAibWt0cmVlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjg1Cittc2dpZCAibWt0cmVlIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZnN0YXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjk5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG9iamVjdCB0byBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMTggYnVpbHRpbi9yZXBsYWNlLmM6MzcxIGJ1aWx0aW4vcmVwbGFjZS5jOjQxNQorIzogYnVpbHRpbi9yZXBsYWNlLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICLOvM63IM6tzrPOus+Fz4HOvyDPjM69zr/OvM6xIM6xzr3PhM65zrrOtc65zrzOrc69zr/PhTogJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgb2JqZWN0IHR5cGUgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMzOAorbXNnaWQgImVkaXRpbmcgb2JqZWN0IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICLPhM6/IM69zq3OvyDOsc69z4TOuc66zrXOr868zrXOvc6/IM61zq/Ovc6xzrkgzq/OtM65zr8gzrzOtSDPhM6/IM+AzrHOu865z4w6ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9yaWdpbmFsIGNvbW1pdCAnJXMnIGNvbnRhaW5zIG1lcmdldGFnICclcycgdGhhdCBpcyBkaXNjYXJkZWQ7IHVzZSAtLWVkaXQgIgorImluc3RlYWQgb2YgLS1ncmFmdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG9yaWdpbmFsIGNvbW1pdCAnJXMnIGhhcyBhIGdwZyBzaWduYXR1cmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDYxCittc2dpZCAidGhlIHNpZ25hdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHJlcGxhY2VtZW50IGNvbW1pdCEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSByZXBsYWNlbWVudCBjb21taXQgZm9yOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJncmFmdCBmb3IgJyVzJyB1bm5lY2Vzc2FyeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGNvbW1pdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAizrcgzr3Orc6xIM+Fz4DOv86yzr/Ou86uIM61zq/Ovc6xzrkgzq/OtM65zrEgzrzOtSDPhM63zr0gz4DOsc67zrnOrDogJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY29udmVydCB0aGUgZm9sbG93aW5nIGdyYWZ0KHMpOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUzNgorbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUzNworbXNnaWQgImRlbGV0ZSByZXBsYWNlIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTM4Cittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTM5Cittc2dpZCAiY2hhbmdlIGEgY29tbWl0J3MgcGFyZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDAKK21zZ2lkICJjb252ZXJ0IGV4aXN0aW5nIGdyYWZ0IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQxCittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDMKK21zZ2lkICJkbyBub3QgcHJldHR5LXByaW50IGNvbnRlbnRzIGZvciAtLWVkaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ0Cittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NworbXNnaWQgIi0tZm9ybWF0IGNhbm5vdCBiZSB1c2VkIHdoZW4gbm90IGxpc3RpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTY1Cittc2dpZCAiLWYgb25seSBtYWtlcyBzZW5zZSB3aGVuIHdyaXRpbmcgYSByZXBsYWNlbWVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NjkKK21zZ2lkICItLXJhdyBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1lZGl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU3NQorbXNnaWQgIi1kIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODEKK21zZ2lkICJiYWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODcKK21zZ2lkICItZSBuZWVkcyBleGFjdGx5IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1OTMKK21zZ2lkICItZyBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk5Cittc2dpZCAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgdGFrZXMgbm8gYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjA1Cittc2dpZCAib25seSBvbmUgcGF0dGVybiBjYW4gYmUgZ2l2ZW4gd2l0aCAtbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjEzCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBhdGg+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjYwCittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo3OQorbXNnaWQgIidnaXQgcmVyZXJlIGZvcmdldCcgd2l0aG91dCBwYXRocyBpcyBkZXByZWNhdGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMgorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCittc2dzdHIgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8z4XPgM6/zrLOv867zq4+XSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gWzzOtM6tzr3PhM+Bzr8gzq4gz4bOsc65zr3Ov868zrXOvc65zrrPjD5dIFstLV0gPM60zrnOsc60z4HOv868zq3Pgj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgImdpdCByZXNldCAtLXBhdGNoIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHM+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzzOtM6tzr3PhM+Bzr8gzq4gz4bOsc65zr3Ov868zrXOvc65zrrPjD5dIFstLV0gWzzOtM65zrHOtM+Bzr/OvM6tz4I+Li4uXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQwCittc2dpZCAibWl4ZWQiCittc2dzdHIgIm1peGVkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDAKK21zZ2lkICJzb2Z0IgorbXNnc3RyICJzb2Z0IgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDAKK21zZ2lkICJoYXJkIgorbXNnc3RyICJoYXJkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDAKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAiz4PPhc6zz4fPjs69zrXPhc+DzrciCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MAorbXNnaWQgImtlZXAiCittc2dzdHIgIs60zrnOsc+Ezq7Pgc63z4POtyIKKworIzogYnVpbHRpbi9yZXNldC5jOjgxCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIs6UzrXOvSDOrc+HzrXPhM61IM6tzrPOus+Fz4HOvyBIRUFELiIKKworIzogYnVpbHRpbi9yZXNldC5jOjgzCittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAizpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDOvc6xIM6yz4HOtc64zrXOryDPhM6/IM60zq3Ovc+Ez4HOvyDPhM6/z4UgSEVBRC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIKK21zZ3N0ciAizpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDOvc6xIM6yz4HOtc64zrXOryDPhM6/IM60zq3Ovc+Ez4HOvyDPhM6/z4UgJXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgIs6UzrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TPjCDOvc6xIM6zzq/Ovc61zrkgzrXPgM6xzr3Osc+Gzr/Pgc6sICVzIM+Dz4TOtyDOvM6tz4POtyDOvM65zrHPgiDPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5MworbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgIs+DzrnPic+AzrfOu86uIM67zrXOuc+Ezr/Phc+BzrPOr86xLCDOsc69zrHPhs6/z4HOrCDOvM+Mzr3OvyDPg8+GzrHOu868zqzPhM+Jzr0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTUKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAizrXPgM6xzr3Osc+Gzr/Pgc6sIEhFQUQgzrrOsc65IM61z4XPgc61z4TOt8+Bzq/Ov8+FIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk2Cittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICLOtc+AzrHOvc6xz4bOv8+BzqwgzrzPjM69zr8gSEVBRCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5OCBidWlsdGluL3Jlc2V0LmM6MzAwCittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAizrXPgM6xzr3Osc+Gzr/Pgc6sIEhFQUQsIM61z4XPgc61z4TOt8+Bzq/Ov8+FIM66zrHOuSDOtM6tzr3PhM+Bzr/PhSDOtc+BzrPOsc+Dzq/Osc+CIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzAyCittc2dpZCAicmVzZXQgSEVBRCBidXQga2VlcCBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICLOtc+AzrHOvc6xz4bOv8+BzqwgSEVBRCDOsc67zrvOrCDOtM65zrHPhM6uz4HOt8+Dzrcgz4TOv8+AzrnOus+Ozr0gzrHOu867zrHOs8+Ozr0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDgKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAiIgorIs66zrHPhM6xzrPPgc6xz4bOriDOvM+Mzr3OvyDPhM6/z4UgzrPOtc6zzr/Ovc+Mz4TOv8+CIM+Mz4TOuSDOv865IM6xz4bOsc65z4HOtc64zrXOr8+DzrXPgiDOtM65zrHOtM+Bzr/OvM6tz4IgzrjOsSDPgM+Bzr/Pg8+EzrXOuM6/z43OvSAiCisizrHPgc6zz4zPhM61z4HOsSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmV2aXNpb24uIgorbXNnc3RyICLOkc+Azq3PhM+Fz4fOtSDOtyDPhM6xz43PhM65z4POtyDPhM6/z4UgJyVzJyDOvM61IM66zqzPgM6/zrnOsSDOrc6zzrrPhc+Bzrcgzq3Ous60zr/Pg863LiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIs6Rz4DOrc+Ez4XPh861IM63IM+EzrHPjc+EzrnPg863IM+Ezr/PhSAnJXMnIM68zrUgzrrOrM+Azr/Ouc6/IM6tzrPOus+Fz4HOvyDOtM6tzr3PhM+Bzr8uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQzCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICLPhM6/IC0tcGF0Y2ggzrXOr869zrHOuSDOsc+Dz43OvM6yzrHPhM6/IM68zrUgLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1MgorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIs+Ezr8gLS1taXhlZCDOvM61IM60zrnOsc60z4HOv868zq3PgiDOrc+HzrXOuSDOus6xz4TOsc+BzrPOt864zrXOrywgz4fPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSDOsc69z4TOryDOsc+Fz4TOv8+NICdnaXQgIgorInJlc2V0IC0tIDzOtM65zrHOtM+Bzr/OvM6tz4I+Jy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgzrXPgM6xzr3Osc+Gzr/Pgc6sICVzIM68zrUgzrTOuc6xzrTPgc6/zrzOrc+CLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAizrcgzrXPgM6xzr3Osc+Gzr/Pgc6sICVzIM60zrXOvSDOtc+AzrnPhM+Bzq3PgM61z4TOsc65IM+DzrUgzrPPhc68zr3PjCDOsc+Azr/OuM61z4TOrs+BzrnOvyIKKworIzogYnVpbHRpbi9yZXNldC5jOjM2OAorbXNnaWQgIi1OIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLW1peGVkIgorbXNnc3RyICLPhM6/IC1OIM68z4DOv8+BzrXOryDOvc6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zrfOuM61zq8gzrzPjM69zr8gzrzOtSDPhM6/IC0tbWl4ZWQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozODgKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAizpzOtyDPgM+Bzr/Otc+Ezr/Ouc68zrHPg868zq3Ovc61z4IgzrHOu867zrHOs86tz4IgzrzOtc+Ezqwgz4TOt869IM61z4DOsc69zrHPhs6/z4HOrDoiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0LiAgWW91IGNhblxuIgorInVzZSAnLS1xdWlldCcgdG8gYXZvaWQgdGhpcy4gIFNldCB0aGUgY29uZmlnIHNldHRpbmcgcmVzZXQucXVpZXQgdG8gdHJ1ZVxuIgorInRvIG1ha2UgdGhpcyB0aGUgZGVmYXVsdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIs6XIM6xz4DOsc+Bzq/OuM68zrfPg863IM68zrcgz4DPgc6/zrXPhM6/zrnOvM6xz4POvM6tzr3Pic69IM6xzrvOu86xzrPPjs69IM68zrXPhM6sIM+EzrfOvSDOtc+AzrHOvc6xz4bOv8+Bzqwgz4DOrs+BzrUgJS4yZiAiCisizrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xLiAgzpzPgM6/z4HOtc6vz4TOtSDOvc6xXG4iCisiz4fPgc63z4POuc68zr/PgM6/zrnOrs+DzrXPhM61IM+Ezr8gJy0tcXVpZXQnIM6zzrnOsSDOvc6xIM+Ezr8gzrHPgM6/z4bPjc6zzrXPhM61IM6xz4XPhM+MLiAgzpHOu867zqzOvs+EzrUgz4TOt869IM61z4DOuc67zr/Os86uICIKKyLPgc+NzrjOvM65z4POt8+CIHJlc2V0LnF1aWV0IM+DzrUgdHJ1ZVxuIgorIs6zzrnOsSDOvc6xIM+Ezr8gzrrOrM69zrXPhM61IM+Az4HOv861z4DOuc67zrXOs868zq3Ovc6/LlxuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICLOlM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM61z4DOsc69zrHPhs6/z4HOrCDPhM6/z4UgzrHPgc+HzrXOr86/z4UgzrXPhc+BzrXPhM63z4HOr86/z4Ugz4PPhM63zr0gzq3Ous60zr/Pg863ICclcycuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDA1Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAizpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDOtc6zzrPPgc6xz4bOriDPhM6/z4Ugzr3Orc6/z4UgzrHPgc+HzrXOr86/z4UgzrXPhc+BzrXPhM63z4HOr86/z4UuIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NDA2Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgYW5kIC0tbWlzc2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NDY0Cittc2dpZCAib2JqZWN0IGZpbHRlcmluZyByZXF1aXJlcyAtLW9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNwYXJzZSB2YWx1ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1MDgKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjUxMQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tdXNlLWJpdG1hcC1pbmRleCB3aXRoIG9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MDgKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTMKK21zZ2lkICJrZWVwIHRoZSBgLS1gIHBhc3NlZCBhcyBhbiBhcmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTUKK21zZ2lkICJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTgKK21zZ2lkICJvdXRwdXQgaW4gc3R1Y2sgbG9uZyBmb3JtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NTUxCittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmc+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3B0aW9ucz5dIFs8YXJnPi4uLl1cbiIKKyJcbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQKK21zZ2lkICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjI1Cittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCByZXZlcnQgPM+Fz4DOv861zr3PhM6/zrvOrj4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzAKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzzOtc+AzrnOu86/zrPOrc+CPl0gPM+Fz4DOv86yzr/Ou86uIM6uIM+GzrHOuc69zr/OvM61zr3Ouc66zq4+Li4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjMxCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIDzPhc+Azr/Otc69z4TOv867zq4+IgorCisjOiBidWlsdGluL3JldmVydC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMQorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDIKK21zZ2lkICJyZXN1bWUgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA1Cittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDgKK21zZ2lkICJwYXJlbnQtbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA5Cittc2dpZCAic2VsZWN0IG1haW5saW5lIHBhcmVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMQorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEzCittc2dpZCAib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyMgorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNAorbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI2Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMjAKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjMzCittc2dpZCAiY2hlcnJ5LXBpY2sgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOQorbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJtIFs8zrXPgM65zrvOv86zzq3Pgj5dIFstLV0gPM6xz4HPh861zq/Ovz4uLi4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyMDcKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTIKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIijPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IM+Ezr8gLWYgzrPOuc6xIM69zrEgzrXOvs6xzr3Osc6zzrrOrM+DzrXPhM61IM+EzrfOvSDOsc+GzrHOr8+BzrXPg863KSIKKworIzogYnVpbHRpbi9ybS5jOjIxNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3JtLmM6MjIwIGJ1aWx0aW4vcm0uYzoyMjkKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MjI2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9ybS5jOjI0MgorbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDQKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MjQ1Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjI0NworbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyODkKK21zZ2lkICJwbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgcm06IHVuYWJsZSB0byByZW1vdmUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoyMAorbXNnaWQgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxob3N0PjpdPGRpcmVjdG9yeT4gIgorIls8cmVmPi4uLl1cbiIKKyIgIC0tYWxsIGFuZCBleHBsaWNpdCA8cmVmPiBzcGVjaWZpY2F0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYzCittc2dpZCAicmVtb3RlIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzcKK21zZ2lkICJ1c2Ugc3RhdGVsZXNzIFJQQyBwcm90b2NvbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OAorbXNnaWQgInJlYWQgcmVmcyBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc5Cittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3NlcnZlLmM6NworbXNnaWQgImdpdCBzZXJ2ZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3NlcnZlLmM6MTcgYnVpbHRpbi91cGxvYWQtcGFjay5jOjIzCittc2dpZCAicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2VydmUuYzoxOQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWR2ZXJ0aXNpbmcgY2FwYWJpbGl0aWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNAorbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTUKK21zZ2lkICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8zrXPgM65zrvOv86zzq3Pgj5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY0Cittc2dpZCAiR3JvdXAgYnkgY29tbWl0dGVyIHJhdGhlciB0aGFuIGF1dGhvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY2Cittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjgKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcwCittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcxCittc2dpZCAiPHc+Wyw8aTE+Wyw8aTI+XV0iCittc2dzdHIgIjx3PlssPGkxPlssPGkyPl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcyCittc2dpZCAiTGluZXdyYXAgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDEKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZ2l2ZW4gb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxMworbXNnaWQgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTcKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbWF0Y2hpbmcgcmVmcyB3aXRoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDYKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0OAorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAKK21zZ2lkICJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTIKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU0Cittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTUKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU3Cittc2dpZCAiaW5jbHVkZSB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1OQorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYxCittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYzCittc2dpZCAic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY1Cittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjgKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcwCittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzIKK21zZ2lkICJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgd2hlcmUgcG9zc2libGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NQorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc2Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjcxMgorbXNnaWQgIiIKKyItLXJlZmxvZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50IG9yIC0tbWVyZ2UtYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM2Cittc2dpZCAibm8gYnJhbmNoZXMgZ2l2ZW4sIGFuZCBIRUFEIGlzIG5vdCB2YWxpZCIKK21zZ3N0ciAizrTOtSDOtM+MzrjOt866zrHOvSDOus67zqzOtM6/zrksIM66zrHOuSDPhM6/IEhFQUQgzrTOtc69IM61zq/Ovc6xzrkgzq3Os866z4XPgc6/IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM5Cittc2dpZCAiLS1yZWZsb2cgb3B0aW9uIG5lZWRzIG9uZSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgJWQgZW50cnkgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ2lkX3BsdXJhbCAib25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmICVzIgorbXNnc3RyICLOtM61zr0gz4XPgM6sz4HPh861zrkgcmVmICVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODMwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldi4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldnMuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmluZCBjb21taXQgJXMgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTEKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTIKK21zZ2lkICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjEKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjIKK21zZ2lkICJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjMKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjYgYnVpbHRpbi9zaG93LXJlZi5jOjE2OAorbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcwCittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MgorbXNnaWQgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc2Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OAorbXNnaWQgInNob3cgcmVmcyBmcm9tIHN0ZGluIHRoYXQgYXJlbid0IGluIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTgKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE5Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MzcKK21zZ2lkICJza2lwIGFuZCByZW1vdmUgYWxsIGxpbmVzIHN0YXJ0aW5nIHdpdGggY29tbWVudCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6NDAKK21zZ2lkICJwcmVwZW5kIGNvbW1lbnQgY2hhcmFjdGVyIGFuZCBzcGFjZSB0byBlYWNoIGxpbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGluZyBhIGZ1bGwgcmVmIG5hbWUsIGdvdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjIKK21zZ2lkICJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSB0YWtlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwOCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM2NworbXNnaWQgImFsdGVybmF0aXZlIGFuY2hvciBmb3IgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxMworbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NzAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYyNworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcycgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRlcmluZyAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIGZvciAlc1xuIgorIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIHdoaWxlIHJlY3Vyc2luZyBpbiB0aGUgbmVzdGVkICIKKyJzdWJtb2R1bGVzIG9mICVzXG4iCisiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTYyCittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IG9mIGVudGVyaW5nIGVhY2ggc3VibW9kdWxlIGNvbW1hbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA0OQorbXNnaWQgIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gPGNvbW1hbmQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBsb29rIHVwIGNvbmZpZ3VyYXRpb24gJyVzJy4gQXNzdW1pbmcgdGhpcyByZXBvc2l0b3J5IGlzIGl0cyBvd24gIgorImF1dGhvcml0YXRpdmUgdXBzdHJlYW0uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBjb21tYW5kIHVwZGF0ZSBtb2RlIHN1Z2dlc3RlZCBmb3Igc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzA3Cittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IGZvciBpbml0aWFsaXppbmcgYSBzdWJtb2R1bGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxMgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8cGF0aD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3ODQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCByZWYgaW5zaWRlIHRoZSBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAizrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDPhM6xz43PhM65z4POtyDPhM6/z4UgSEVBRCByZWYgzrzOrc+DzrEgz4PPhM63zr0gz4XPgM6/zrXOvc+Mz4TOt8+EzrEgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg1MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAxOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLOsc+Azq3PhM+Fz4fOtSDOtyDOsc69zrHOtM+Bzr/OvM6uIM68zq3Pg86xIM+Dz4TOt869IM+Fz4DOv861zr3PjM+EzrfPhM6xICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NzQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExODUKK21zZ2lkICJTdXBwcmVzcyBzdWJtb2R1bGUgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODc1Cittc2dpZCAiIgorIlVzZSBjb21taXQgc3RvcmVkIGluIHRoZSBpbmRleCBpbnN0ZWFkIG9mIHRoZSBvbmUgc3RvcmVkIGluIHRoZSBzdWJtb2R1bGUgIgorIkhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg3NgorbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODgxCittc2dpZCAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTA1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHBhdGg+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGdldCB0aGUgZGVmYXVsdCByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDAwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA0NworbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBzeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTQKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGEgLmdpdCBkaXJlY3RvcnkgKHVzZSAncm0gLXJmJyBpZiB5b3UgIgorInJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvIGRpc2NhcmQgIgorInRoZW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgc3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE4NgorbXNnaWQgIlJlbW92ZSBzdWJtb2R1bGUgd29ya2luZyB0cmVlcyBldmVuIGlmIHRoZXkgY29udGFpbiBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTg3Cittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5MgorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPHBhdGg+Li4uXV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMDYKK21zZ2lkICJVc2UgJy0tYWxsJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGVpbml0aWFsaXplIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzAxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBhZGQgYWx0ZXJuYXRlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM0NworIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24gaXMgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzAKK21zZ2lkICJ3aGVyZSB0aGUgbmV3IHN1Ym1vZHVsZSB3aWxsIGJlIGNsb25lZCB0byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM3MworbXNnaWQgIm5hbWUgb2YgdGhlIG5ldyBzdWJtb2R1bGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzYKK21zZ2lkICJ1cmwgd2hlcmUgdG8gY2xvbmUgdGhlIHN1Ym1vZHVsZSBmcm9tIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg0Cittc2dpZCAiZGVwdGggZm9yIHNoYWxsb3cgY2xvbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODcyCittc2dpZCAiZm9yY2UgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5MgorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxuYW1lPl0gWy0tZGVwdGggPGRlcHRoPl0gLS11cmwgPHVybD4gLS1wYXRoIDxwYXRoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQyMworIywgYy1mb3JtYXQKK21zZ2lkICJjbG9uZSBvZiAnJXMnIGludG8gc3VibW9kdWxlIHBhdGggJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBzdWJtb2R1bGUgZGlyZWN0b3J5IGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDczCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ3NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgY29uZmlndXJlZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU3MAorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJXMnIG5vdCBpbml0aWFsaXplZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU3NAorbXNnaWQgIk1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHVubWVyZ2VkIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYzMworIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTc3NworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJy4gUmV0cnkgc2NoZWR1bGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnIGEgc2Vjb25kIHRpbWUsIGFib3J0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODUxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDkzCittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NTQKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSwgYWNyb3NzIG5lc3RlZCBzdWJtb2R1bGUgYm91bmRhcmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg1OAorbXNnaWQgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NjQKK21zZ2lkICJDcmVhdGUgYSBzaGFsbG93IGNsb25lIHRydW5jYXRlZCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXZpc2lvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NjcKK21zZ2lkICJwYXJhbGxlbCBqb2JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODY5Cittc2dpZCAid2hldGhlciB0aGUgaW5pdGlhbCBjbG9uZSBzaG91bGQgZm9sbG93IHRoZSBzaGFsbG93IHJlY29tbWVuZGF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODcwCittc2dpZCAiZG9uJ3QgcHJpbnQgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3NworbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciB1cGRhdGVfY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTAKK21zZ2lkICJiYWQgdmFsdWUgZm9yIHVwZGF0ZSBwYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSAoJXMpIGJyYW5jaCBjb25maWd1cmVkIHRvIGluaGVyaXQgYnJhbmNoIGZyb20gc3VwZXJwcm9qZWN0LCBidXQgIgorInRoZSBzdXBlcnByb2plY3QgaXMgbm90IG9uIGFueSBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBhIHJlcG9zaXRvcnkgaGFuZGxlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjA5NAorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTAwCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGVtYmVkLWdpdC1kaXIgWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNTYKK21zZ2lkICJjaGVjayBpZiBpdCBpcyBzYWZlIHRvIHdyaXRlIHRvIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTYxCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBuYW1lIFt2YWx1ZV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNjIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE3OSBnaXQtc3VibW9kdWxlLnNoOjE2OQorIywgc2gtZm9ybWF0Cittc2dpZCAicGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGlzIGluIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMjkgZ2l0LmM6NDEzIGdpdC5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2Vzbid0IHN1cHBvcnQgLS1zdXBlci1wcmVmaXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBzdWJtb2R1bGUtLWhlbHBlciBzdWJjb21tYW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OAorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwCittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIG9mIHRoZSB1cGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyNQorbXNnaWQgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XSA8dGFnbmFtZT4gIgorIls8aGVhZD5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDzOsc69zrHOs869z4nPgc65z4PPhM65zrrPjCDOus67zrXOuc60zq8+XSBbLWZdIFstbSA8zrzOrs69z4XOvM6xPiB8IC1GICIKKyI8zrHPgc+HzrXOr86/Pl0gPM+Mzr3Ov868zrEgzrXPhM65zrrOrc+EzrHPgj4gWzxoZWFkPl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjYKK21zZ2lkICJnaXQgdGFnIC1kIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtZCA8z4zOvc6/zrzOsSDOtc+EzrnOus6tz4TOsc+CPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzoyNworbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0gWy0tIgorInBvaW50cy1hdCA8b2JqZWN0Pl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCB0YWcgLWwgWy1uWzzOsc+BzrnOuC4+XV0gWy0tY29udGFpbnMgPM+Fz4DOv86yzr/Ou86uPl0gWy0tbm8tY29udGFpbnMgPM+Fz4DOv86yzr/Ou86uPl0gWy0tIgorInBvaW50cy1hdCA8zrHOvc+EzrnOus61zq/OvM61zr3Ovz5dXG4iCisiXHRcdFstLWZvcm1hdD08zrzOv8+Bz4bOrj5dIFstLVtuby1dbWVyZ2VkIFs8z4XPgM6/zrLOv867zq4+XV0gWzzOvM6/z4TOr86yzr8+Li4uXSIKKworIzogYnVpbHRpbi90YWcuYzoyOQorbXNnaWQgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTzOvM6/z4HPhs6uPl0gPM+Mzr3Ov868zrEgzrXPhM65zrrOrc+EzrHPgj4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3UgIgorIndhbnQgdG8uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoxOTEKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTkzCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjE4Cittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjI2NworbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAizrTOtc69IM+Fz4DOrM+Bz4fOtc65IM68zq7Ovc+FzrzOsSDOtc+EzrnOus6tz4TOsc+COyIKKworIzogYnVpbHRpbi90YWcuYzoyNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjM4NQorbXNnaWQgImxpc3QgdGFnIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mzg3Cittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzozODkKK21zZ2lkICJkZWxldGUgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjM5MAorbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzkyCittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzozOTQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzozOTYKK21zZ2lkICJ0YWcgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjM5OAorbXNnaWQgImZvcmNlIGVkaXQgb2YgdGFnIG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzozOTkKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAzCittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQwNAorbXNnaWQgInJlcGxhY2UgdGhlIHRhZyBpZiBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MDUgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY5Cittc2dpZCAiY3JlYXRlIGEgcmVmbG9nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA3Cittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQwOAorbXNnaWQgInNob3cgdGFnIGxpc3QgaW4gY29sdW1ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQwOSBidWlsdGluL3RhZy5jOjQxMQorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQxMCBidWlsdGluL3RhZy5jOjQxMgorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQxMworbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MTQKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQxOQorbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDYzCittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0ODUKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQ4NworbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0ODkKK21zZ2lkICItLW5vLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDkxCittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0OTMKK21zZ2lkICItLW1lcmdlZCBhbmQgLS1uby1tZXJnZWQgb3B0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUyMworbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRhZyBuYW1lLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjUwMAorbXNnaWQgIlVucGFja2luZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE0IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRlc3RpbmcgbXRpbWUgaW4gJyVzJyAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNTMKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE2NgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNzkKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgdXBkYXRpbmcgYSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTkwCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIGFkZGluZyBhIGZpbGUgaW5zaWRlIHN1YmRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIwMQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIxNAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIxCittc2dpZCAiIE9LIgorbXNnc3RyICIgT0siCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTg5Cittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTYyCittc2dpZCAiY29udGludWUgcmVmcmVzaCBldmVuIHdoZW4gaW5kZXggbmVlZHMgdXBkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY1Cittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NjgKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3MAorbXNnaWQgImxldCBmaWxlcyByZXBsYWNlIGRpcmVjdG9yaWVzIGFuZCB2aWNlLXZlcnNhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTcyCittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NAorbXNnaWQgInJlZnJlc2ggZXZlbiBpZiBpbmRleCBjb250YWlucyB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc3Cittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgxCittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg1Cittc2dpZCAiPG1vZGU+LDxvYmplY3Q+LDxwYXRoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NgorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NQorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDEKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwiaW5kZXgtb25seVwiIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwNAorbXNnaWQgImNsZWFyIHNraXAtd29ya3RyZWUgYml0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwNworbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwOQorbXNnaWQgInJlbW92ZSBuYW1lZCBwYXRocyBldmVuIGlmIHByZXNlbnQgaW4gd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDExCittc2dpZCAid2l0aCAtLXN0ZGluOiBpbnB1dCBsaW5lcyBhcmUgdGVybWluYXRlZCBieSBudWxsIGJ5dGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxMworbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE3Cittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIxCittc2dpZCAicmVwb3B1bGF0ZSBzdGFnZXMgIzIgYW5kICMzIGZvciB0aGUgbGlzdGVkIHBhdGhzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyNQorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyOQorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDMyCittc2dpZCAicmVwb3J0IGFjdGlvbnMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzNAorbXNnaWQgIihmb3IgcG9yY2VsYWlucykgZm9yZ2V0IHNhdmVkIHVucmVzb2x2ZWQgY29uZmxpY3RzIgorbXNnc3RyICIozrPOuc6xIM61zr3PhM6/zrvOrc+CIHBvcmNlbGFpbikgzr7Orc+Hzr3OsSDPhM65z4Igz4PPic+DzrzOrc69zrXPgiDOvM63IM61z4DOuc67z4XOvM6tzr3Otc+CIM+Dz4XOs866z4HOv8+Nz4POtc65z4IiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzOAorbXNnaWQgIndyaXRlIGluZGV4IGluIHRoaXMgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0MAorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0MgorbXNnaWQgImVuYWJsZS9kaXNhYmxlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDQKK21zZ2lkICJ0ZXN0IGlmIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDYKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDgKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGluZGV4IGV2ZW4gaWYgaXMgbm90IGZsYWdnZWQgYXMgY2hhbmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTAKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBmaWxlIHN5c3RlbSBtb25pdG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1MgorbXNnaWQgIm1hcmsgZmlsZXMgYXMgZnNtb25pdG9yIHZhbGlkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1NQorbXNnaWQgImNsZWFyIGZzbW9uaXRvciB2YWxpZCBiaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTU2Cittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZW5hYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE2NQorbXNnaWQgIiIKKyJjb3JlLnNwbGl0SW5kZXggaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNzYKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBkaXNhYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTgwCittc2dpZCAiVW50cmFja2VkIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE4OAorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBlbmFibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGVuYWJsZWQgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjAwCittc2dpZCAiY29yZS5mc21vbml0b3IgaXMgdW5zZXQ7IHNldCBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZW5hYmxlIGZzbW9uaXRvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMDQKK21zZ2lkICJmc21vbml0b3IgZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMDcKK21zZ2lkICIiCisiY29yZS5mc21vbml0b3IgaXMgc2V0OyByZW1vdmUgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGRpc2FibGUgZnNtb25pdG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxMQorbXNnaWQgImZzbW9uaXRvciBkaXNhYmxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMAorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC1kIDxyZWZuYW1lPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMQorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dICAgIDxyZWZuYW1lPiA8bmV3LXZhbD4gWzxvbGQtdmFsPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTIKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtLXN0ZGluIFstel0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY0Cittc2dpZCAiZGVsZXRlIHRoZSByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY2Cittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjgKK21zZ2lkICJyZWFkIHVwZGF0ZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjcKK21zZ2lkICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6MTUKK21zZ2lkICJ1cGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoxMQorbXNnaWQgImdpdCB1cGxvYWQtcGFjayBbPG9wdGlvbnM+XSA8ZGlyPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjUKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGluaXRpYWwgcmVmIGFkdmVydGlzZW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI3Cittc2dpZCAiZG8gbm90IHRyeSA8ZGlyZWN0b3J5Pi8uZ2l0LyBpZiA8ZGlyZWN0b3J5PiBpcyBubyBHaXQgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyOQorbXNnaWQgImludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjIwCittc2dpZCAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo3NgorbXNnaWQgInByaW50IGNvbW1pdCBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo3NyBidWlsdGluL3ZlcmlmeS10YWcuYzozOAorbXNnaWQgInByaW50IHJhdyBncGcgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NTUKK21zZ2lkICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NQorbXNnaWQgInZlcmJvc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY3Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MTkKK21zZ2lkICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MzcKK21zZ2lkICJwcmludCB0YWcgY29udGVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE4Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gWzxjb21taXQtaXNoPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE5Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIwCittc2dpZCAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxvcHRpb25zPl0gPHBhdGg+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMQorbXNnaWQgImdpdCB3b3JrdHJlZSBtb3ZlIDx3b3JrdHJlZT4gPG5ldy1wYXRoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjIKK21zZ2lkICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzCittc2dpZCAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPG9wdGlvbnM+XSA8d29ya3RyZWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNAorbXNnaWQgImdpdCB3b3JrdHJlZSB1bmxvY2sgPHBhdGg+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2MSBidWlsdGluL3dvcmt0cmVlLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBub3QgYSB2YWxpZCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkxIGJ1aWx0aW4vd29ya3RyZWUuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlJlbW92aW5nIHdvcmt0cmVlcy8lczogc2hvcnQgcmVhZCAoZXhwZWN0ZWQgJTxQUkl1TUFYPiBieXRlcywgcmVhZCAiCisiJTxQUkl1TUFYPikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIHBvaW50cyB0byBub24tZXhpc3RlbnQgbG9jYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NgorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY4Cittc2dpZCAiZXhwaXJlIHdvcmtpbmcgdHJlZXMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlLWFkZCB3b3JrdHJlZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBsb2NrZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYgLWYnIHRvIG92ZXJyaWRlLCBvciAndW5sb2NrJyBhbmQgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgYWxyZWFkeSByZWdpc3RlcmVkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mJyB0byBvdmVycmlkZSwgb3IgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IG9mICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQyOSBidWlsdGluL3dvcmt0cmVlLmM6NDM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAobmV3IGJyYW5jaCAnJXMnKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAocmVzZXR0aW5nIGJyYW5jaCAnJXMnOyB3YXMgYXQgJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChjaGVja2luZyBvdXQgJyVzJykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGRldGFjaGVkIEhFQUQgJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0ODcKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBldmVuIGlmIGFscmVhZHkgY2hlY2tlZCBvdXQgaW4gb3RoZXIgd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5MAorbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5MgorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk0Cittc2dpZCAicG9wdWxhdGUgdGhlIG5ldyB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5NQorbXNnaWQgImtlZXAgdGhlIG5ldyB3b3JraW5nIHRyZWUgbG9ja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTgKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1icmFuY2goMSkpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDEKK21zZ2lkICJ0cnkgdG8gbWF0Y2ggdGhlIG5ldyBicmFuY2ggbmFtZSB3aXRoIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA5Cittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTcwCittc2dpZCAiLS1bbm8tXXRyYWNrIGNhbiBvbmx5IGJlIHVzZWQgaWYgYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY3MAorbXNnaWQgInJlYXNvbiBmb3IgbG9ja2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjgyIGJ1aWx0aW4vd29ya3RyZWUuYzo3MTUgYnVpbHRpbi93b3JrdHJlZS5jOjc4OQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njg0IGJ1aWx0aW4vd29ya3RyZWUuYzo3MTcKK21zZ2lkICJUaGUgbWFpbiB3b3JraW5nIHRyZWUgY2Fubm90IGJlIGxvY2tlZCBvciB1bmxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQsIHJlYXNvbjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgbG9ja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NjAKK21zZ2lkICJ3b3JraW5nIHRyZWVzIGNvbnRhaW5pbmcgc3VibW9kdWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzY4Cittc2dpZCAiZm9yY2UgbW92ZSBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzkxIGJ1aWx0aW4vd29ya3RyZWUuYzo5MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpZ3VyZSBvdXQgZGVzdGluYXRpb24gbmFtZSBmcm9tICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YXJnZXQgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTIKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCBtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbW92ZSAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg2OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBkaXJ0eSwgdXNlIC0tZm9yY2UgdG8gZGVsZXRlIGl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJywgY29kZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTAwCittc2dpZCAiZm9yY2UgcmVtb3ZhbCBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI1Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IHJlbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjE1Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjgKK21zZ2lkICI8cHJlZml4Pi8iCittc2dzdHIgIjzPgM+Bz4zOuM61zrzOsT4vIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOQorbXNnaWQgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMQorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgIiIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGVybWlzc2lvbnMgb24geW91ciBzb2NrZXQgZGlyZWN0b3J5IGFyZSB0b28gbG9vc2U7IG90aGVyXG4iCisidXNlcnMgbWF5IGJlIGFibGUgdG8gcmVhZCB5b3VyIGNhY2hlZCBjcmVkZW50aWFscy4gQ29uc2lkZXIgcnVubmluZzpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCittc2dzdHIgIiIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjcyCittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAiIgorCisjOiB0L2hlbHBlci90ZXN0LXJlYWNoLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBpcyBub3QgbWFya2VkIHJlYWNoYWJsZSIKK21zZ3N0ciAizrcgz4XPgM6/zrLOv867zq4gJXMgzrTOtc69IM61zq/Ovc6xzrkgz4POt868zrXOuc+JzrzOrc69zrcgz4nPgiDPgM+Bzr/Pg86yzqzPg865zrzOtyIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE2MgorbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgbWFya2VkIHJlYWNoYWJsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzoyNworbXNnaWQgIiIKKyJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxwYXRoPl0gWy1jIDxuYW1lPj08dmFsdWU+XVxuIgorIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08cGF0aD5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLXBhdGhdXG4iCisiICAgICAgICAgICBbLXAgfCAtLXBhZ2luYXRlIHwgLVAgfCAtLW5vLXBhZ2VyXSBbLS1uby1yZXBsYWNlLW9iamVjdHNdIFstLSIKKyJiYXJlXVxuIgorIiAgICAgICAgICAgWy0tZ2l0LWRpcj08cGF0aD5dIFstLXdvcmstdHJlZT08cGF0aD5dIFstLW5hbWVzcGFjZT08bmFtZT5dXG4iCisiICAgICAgICAgICA8Y29tbWFuZD4gWzxhcmdzPl0iCittc2dzdHIgIiIKKyJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDzOtM65zrHOtM+Bzr/OvM6uPl0gWy1jIDzPjM69zr/OvM6xPj08z4TOuc68zq4+XVxuIgorIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08zrTOuc6xzrTPgc6/zrzOrj5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLSIKKyJwYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PM60zrnOsc60z4HOv868zq4+XSBbLS13b3JrLXRyZWU9PM60zrnOsc60z4HOv868zq4+XSBbLS0iCisibmFtZXNwYWNlPTzPjM69zr/OvM6xPl1cbiIKKyIgICAgICAgICAgIDzOtc69z4TOv867zq4+IFs8zr/Pgc6vz4POvM6xz4TOsT5dIgorCisjOiBnaXQuYzozNAorbXNnaWQgIiIKKyInZ2l0IGhlbHAgLWEnIGFuZCAnZ2l0IGhlbHAgLWcnIGxpc3QgYXZhaWxhYmxlIHN1YmNvbW1hbmRzIGFuZCBzb21lXG4iCisiY29uY2VwdCBndWlkZXMuIFNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyBvciAnZ2l0IGhlbHAgPGNvbmNlcHQ+J1xuIgorInRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIG9yIGNvbmNlcHQuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tZ2l0LWRpclxuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS13b3JrLXRyZWVcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJlZml4IGdpdmVuIGZvciAtLXN1cGVyLXByZWZpeFxuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICItYyBleHBlY3RzIGEgY29uZmlndXJhdGlvbiBzdHJpbmdcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzoyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtQ1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzozNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZXhwYW5kaW5nIGFsaWFzICclcyc6ICclcyciCittc2dzdHIgIiIKKworIzogZ2l0LmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbGlhcyAnJXMnIGNoYW5nZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuIgorIllvdSBjYW4gdXNlICchZ2l0JyBpbiB0aGUgYWxpYXMgdG8gZG8gdGhpcyIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgYWxpYXMgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgYWxpYXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjQzNworbXNnaWQgIndyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjQzOQorbXNnaWQgInVua25vd24gd3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogZ2l0LmM6NDQxCittc2dpZCAiY2xvc2UgZmFpbGVkIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgbG9vcCBkZXRlY3RlZDogZXhwYW5zaW9uIG9mICclcycgZG9lcyBub3QgdGVybWluYXRlOiVzIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjc3MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlICVzIGFzIGEgYnVpbHRpbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVzYWdlOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiz4fPgc6uz4POtzogJXNcbiIKKyJcbiIKKworIzogZ2l0LmM6ODAzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGFuc2lvbiBvZiBhbGlhcyAnJXMnIGZhaWxlZDsgJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZFxuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuIGNvbW1hbmQgJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5lZ2F0aXZlIHZhbHVlIGZvciBodHRwLnBvc3RidWZmZXI7IGRlZmF1bHRpbmcgdG8gJWQiCittc2dzdHIgIiIKKworIzogaHR0cC5jOjM5OQorbXNnaWQgIkRlbGVnYXRpb24gY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMjIuMCIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6NDA4Cittc2dpZCAiUHVibGljIGtleSBwaW5uaW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy40NC4wIgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzo4NzYKK21zZ2lkICJDVVJMU1NMT1BUX05PX1JFVk9LRSBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6OTQ5Cittc2dpZCAiUHJvdG9jb2wgcmVzdHJpY3Rpb25zIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4xOS40IgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzoxMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuc3VwcG9ydGVkIFNTTCBiYWNrZW5kICclcycuIFN1cHBvcnRlZCBTU0wgYmFja2VuZHM6IgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzoxMDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogY1VSTCB3YXMgYnVpbHQgd2l0aG91dCBTU0wgYmFja2VuZHMiCittc2dzdHIgIiIKKworIzogaHR0cC5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBhbHJlYWR5IHNldCIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6MTk1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIHVwZGF0ZSB1cmwgYmFzZSBmcm9tIHJlZGlyZWN0aW9uOlxuIgorIiAgYXNrZWQgZm9yOiAlc1xuIgorIiAgIHJlZGlyZWN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTU0Cittc2dpZCAiZXhwaXJ5LWRhdGUiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE2OQorbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjU5Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyNjEKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyNjcKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MAorbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MQorbXNnaWQgIkFwcGx5IGEgc2VyaWVzIG9mIHBhdGNoZXMgZnJvbSBhIG1haWxib3giCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NTIKK21zZ2lkICJBbm5vdGF0ZSBmaWxlIGxpbmVzIHdpdGggY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUzCittc2dpZCAiQXBwbHkgYSBwYXRjaCB0byBmaWxlcyBhbmQvb3IgdG8gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU0Cittc2dpZCAiSW1wb3J0IGEgR05VIEFyY2ggcmVwb3NpdG9yeSBpbnRvIEdpdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NQorbXNnaWQgIkNyZWF0ZSBhbiBhcmNoaXZlIG9mIGZpbGVzIGZyb20gYSBuYW1lZCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU2Cittc2dpZCAiVXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NworbXNnaWQgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OAorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU5Cittc2dpZCAiTW92ZSBvYmplY3RzIGFuZCByZWZzIGJ5IGFyY2hpdmUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NjAKK21zZ2lkICJQcm92aWRlIGNvbnRlbnQgb3IgdHlwZSBhbmQgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVwb3NpdG9yeSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYxCittc2dpZCAiRGlzcGxheSBnaXRhdHRyaWJ1dGVzIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYyCittc2dpZCAiRGVidWcgZ2l0aWdub3JlIC8gZXhjbHVkZSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MworbXNnaWQgIlNob3cgY2Fub25pY2FsIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMgb2YgY29udGFjdHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NjQKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NjUKK21zZ2lkICJDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NjYKK21zZ2lkICJFbnN1cmVzIHRoYXQgYSByZWZlcmVuY2UgbmFtZSBpcyB3ZWxsIGZvcm1lZCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NworbXNnaWQgIkZpbmQgY29tbWl0cyB5ZXQgdG8gYmUgYXBwbGllZCB0byB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo2OAorbXNnaWQgIkFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY5Cittc2dpZCAiR3JhcGhpY2FsIGFsdGVybmF0aXZlIHRvIGdpdC1jb21taXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NzAKK21zZ2lkICJSZW1vdmUgdW50cmFja2VkIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MQorbXNnaWQgIkNsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MgorbXNnaWQgIkRpc3BsYXkgZGF0YSBpbiBjb2x1bW5zIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjczCittc2dpZCAiUmVjb3JkIGNoYW5nZXMgdG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NzUKK21zZ2lkICJDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NzcKK21zZ2lkICJDb3VudCB1bnBhY2tlZCBudW1iZXIgb2Ygb2JqZWN0cyBhbmQgdGhlaXIgZGlzayBjb25zdW1wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo3OAorbXNnaWQgIlJldHJpZXZlIGFuZCBzdG9yZSB1c2VyIGNyZWRlbnRpYWxzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc5Cittc2dpZCAiSGVscGVyIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHBhc3N3b3JkcyBpbiBtZW1vcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6ODAKK21zZ2lkICJIZWxwZXIgdG8gc3RvcmUgY3JlZGVudGlhbHMgb24gZGlzayIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MQorbXNnaWQgIkV4cG9ydCBhIHNpbmdsZSBjb21taXQgdG8gYSBDVlMgY2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6ODIKK21zZ2lkICJTYWx2YWdlIHlvdXIgZGF0YSBvdXQgb2YgYW5vdGhlciBTQ00gcGVvcGxlIGxvdmUgdG8gaGF0ZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MworbXNnaWQgIkEgQ1ZTIHNlcnZlciBlbXVsYXRvciBmb3IgR2l0IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg0Cittc2dpZCAiQSByZWFsbHkgc2ltcGxlIHNlcnZlciBmb3IgR2l0IHJlcG9zaXRvcmllcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NQorbXNnaWQgIkdpdmUgYW4gb2JqZWN0IGEgaHVtYW4gcmVhZGFibGUgbmFtZSBiYXNlZCBvbiBhbiBhdmFpbGFibGUgcmVmIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg2Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NworbXNnaWQgIkNvbXBhcmVzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4OAorbXNnaWQgIkNvbXBhcmUgYSB0cmVlIHRvIHRoZSB3b3JraW5nIHRyZWUgb3IgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6ODkKK21zZ2lkICJDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cyIKK21zZ3N0ciAiIgorIs6jz4XOs866z4HOr869zrXOuSDPhM6/IM+AzrXPgc65zrXPh8+MzrzOtc69zr8gzrrOsc65IM+EzrcgzrvOtc65z4TOv8+Fz4HOs86vzrEgz4TPic69IGJsb2Igz4DOv8+FIM6yz4HOrc64zrfOus6xzr0gzrzOrc+Dz4kgzrTPjc6/ICIKKyLOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0gzrTOrc69z4TPgc+Jzr0iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkwCittc2dpZCAiU2hvdyBjaGFuZ2VzIHVzaW5nIGNvbW1vbiBkaWZmIHRvb2xzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkxCittc2dpZCAiR2l0IGRhdGEgZXhwb3J0ZXIiCittc2dzdHIgIs6Vzr7Osc6zz4nOs86tzrHPgiDOtM61zrTOv868zq3Ovc+Jzr0gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo5MgorbXNnaWQgIkJhY2tlbmQgZm9yIGZhc3QgR2l0IGRhdGEgaW1wb3J0ZXJzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkzCittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk1Cittc2dpZCAiUmV3cml0ZSBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NgorbXNnaWQgIlByb2R1Y2UgYSBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NworbXNnaWQgIk91dHB1dCBpbmZvcm1hdGlvbiBvbiBlYWNoIHJlZiIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo5OAorbXNnaWQgIlByZXBhcmUgcGF0Y2hlcyBmb3IgZS1tYWlsIHN1Ym1pc3Npb24iCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6OTkKK21zZ2lkICJWZXJpZmllcyB0aGUgY29ubmVjdGl2aXR5IGFuZCB2YWxpZGl0eSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTAwCittc2dpZCAiQ2xlYW51cCB1bm5lY2Vzc2FyeSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTAxCittc2dpZCAiRXh0cmFjdCBjb21taXQgSUQgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgdXNpbmcgZ2l0LWFyY2hpdmUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTAyCittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMworbXNnaWQgIkEgcG9ydGFibGUgZ3JhcGhpY2FsIGludGVyZmFjZSB0byBHaXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTA0Cittc2dpZCAiQ29tcHV0ZSBvYmplY3QgSUQgYW5kIG9wdGlvbmFsbHkgY3JlYXRlcyBhIGJsb2IgZnJvbSBhIGZpbGUiCittc2dzdHIgIiIKKyLOpc+Azr/Ou86/zrPOuc+DzrzPjM+CIM6xzr3Osc6zzr3Pic+BzrnPg8+EzrnOus6/z40gzrHOvc+EzrnOus61zrnOvM6tzr3Ov8+FIM66zrHOuSDPgM+Bzr/Osc65z4HOtc+EzrnOus6sIM60zrfOvM65zr/Phc+BzrPOr86xIGJsb2IgzrHPgM+MICIKKyLOrc69zrEgzrHPgc+HzrXOr86/IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDUKK21zZ2lkICJEaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gYWJvdXQgR2l0IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNgorbXNnaWQgIlNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdpdCBvdmVyIEhUVFAiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTA3Cittc2dpZCAiRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDgKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBIVFRQL0RBViB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTA5Cittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBmcm9tIHN0ZGluIHRvIGFuIElNQVAgZm9sZGVyIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTExCittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTEyCittc2dpZCAiSW5zdGFudGx5IGJyb3dzZSB5b3VyIHdvcmtpbmcgcmVwb3NpdG9yeSBpbiBnaXR3ZWIiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTEzCittc2dpZCAiYWRkIG9yIHBhcnNlIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gaW4gY29tbWl0IG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNAorbXNnaWQgIlRoZSBHaXQgcmVwb3NpdG9yeSBicm93c2VyIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNQorbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTE2Cittc2dpZCAiU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBpbiB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTE3Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTE4Cittc2dpZCAiTGlzdCB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTkKK21zZ2lkICJFeHRyYWN0cyBwYXRjaCBhbmQgYXV0aG9yc2hpcCBmcm9tIGEgc2luZ2xlIGUtbWFpbCBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMAorbXNnaWQgIlNpbXBsZSBVTklYIG1ib3ggc3BsaXR0ZXIgcHJvZ3JhbSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjEKK21zZ2lkICJKb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlciIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjIKK21zZ2lkICJGaW5kIGFzIGdvb2QgY29tbW9uIGFuY2VzdG9ycyBhcyBwb3NzaWJsZSBmb3IgYSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjMKK21zZ2lkICJSdW4gYSB0aHJlZS13YXkgZmlsZSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjQKK21zZ2lkICJSdW4gYSBtZXJnZSBmb3IgZmlsZXMgbmVlZGluZyBtZXJnaW5nIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNQorbXNnaWQgIlRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCBnaXQtbWVyZ2UtaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI2Cittc2dpZCAiUnVuIG1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb24gdG9vbHMgdG8gcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMiCittc2dzdHIgIiIKKyLOpM+Bzq3Ovs+EzrUgzrXPgc6zzrHOu861zq/OsSDOtc+Azq/Ou8+Fz4POt8+CIM+Dz4XOs866z4HOv8+Nz4POtc+Jzr0gz4PPhc6zz4fPjs69zrXPhc+DzrfPgiDOs865zrEgzr3OsSDOtc+AzrnOu8+Nz4POtc+EzrUgz4TOuc+CICIKKyLPg8+FzrPOus+Bzr/Pjc+DzrXOuc+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNworbXNnaWQgIlNob3cgdGhyZWUtd2F5IG1lcmdlIHdpdGhvdXQgdG91Y2hpbmcgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI4Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBtdWx0aS1wYWNrLWluZGV4ZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI5Cittc2dpZCAiQ3JlYXRlcyBhIHRhZyBvYmplY3QiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTMwCittc2dpZCAiQnVpbGQgYSB0cmVlLW9iamVjdCBmcm9tIGxzLXRyZWUgZm9ybWF0dGVkIHRleHQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTMxCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMgorbXNnaWQgIkZpbmQgc3ltYm9saWMgbmFtZXMgZm9yIGdpdmVuIHJldnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTMzCittc2dpZCAiQWRkIG9yIGluc3BlY3Qgb2JqZWN0IG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNAorbXNnaWQgIkltcG9ydCBmcm9tIGFuZCBzdWJtaXQgdG8gUGVyZm9yY2UgcmVwb3NpdG9yaWVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNQorbXNnaWQgIkNyZWF0ZSBhIHBhY2tlZCBhcmNoaXZlIG9mIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM2Cittc2dpZCAiRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzcKK21zZ2lkICJQYWNrIGhlYWRzIGFuZCB0YWdzIGZvciBlZmZpY2llbnQgcmVwb3NpdG9yeSBhY2Nlc3MiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM4Cittc2dpZCAiUm91dGluZXMgdG8gaGVscCBwYXJzaW5nIHJlbW90ZSByZXBvc2l0b3J5IGFjY2VzcyBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOQorbXNnaWQgIkNvbXB1dGUgdW5pcXVlIElEIGZvciBhIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MAorbXNnaWQgIlBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDEKK21zZ2lkICJSZW1vdmUgZXh0cmEgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGluIHBhY2sgZmlsZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQyCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgaW50ZWdyYXRlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MworbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDQKK21zZ2lkICJBcHBsaWVzIGEgcXVpbHQgcGF0Y2hzZXQgb250byB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgIs6azqzOvc61zrkgzrXPhs6xz4HOvM6/zrPOriDOtc69z4zPgiDPgM6xzrrOrc+Ezr/PhSDOtM65zr/Pgc64z47Pg861z4nOvSDPgM6szr3PiSDPg8+Ezr/OvSDPhM+Bzq3Ph86/zr3PhM6xIM66zrvOrM60zr8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NQorbXNnaWQgIkNvbXBhcmUgdHdvIGNvbW1pdCByYW5nZXMgKGUuZy4gdHdvIHZlcnNpb25zIG9mIGEgYnJhbmNoKSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDYKK21zZ2lkICJSZWFkcyB0cmVlIGluZm9ybWF0aW9uIGludG8gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NworbXNnaWQgIlJlYXBwbHkgY29tbWl0cyBvbiB0b3Agb2YgYW5vdGhlciBiYXNlIHRpcCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDgKK21zZ2lkICJSZWNlaXZlIHdoYXQgaXMgcHVzaGVkIGludG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ5Cittc2dpZCAiTWFuYWdlIHJlZmxvZyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTAKK21zZ2lkICJNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MQorbXNnaWQgIlBhY2sgdW5wYWNrZWQgb2JqZWN0cyBpbiBhIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTUyCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgcmVmcyB0byByZXBsYWNlIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTUzCittc2dpZCAiR2VuZXJhdGVzIGEgc3VtbWFyeSBvZiBwZW5kaW5nIGNoYW5nZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTU0Cittc2dpZCAiUmV1c2UgcmVjb3JkZWQgcmVzb2x1dGlvbiBvZiBjb25mbGljdGVkIG1lcmdlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTUKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTYKK21zZ2lkICJSZXZlcnQgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NworbXNnaWQgIkxpc3RzIGNvbW1pdCBvYmplY3RzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTgKK21zZ2lkICJQaWNrIG91dCBhbmQgbWFzc2FnZSBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OQorbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MAorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgYXMgZW1haWxzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MQorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEdpdCBwcm90b2NvbCB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTYyCittc2dpZCAiUmVzdHJpY3RlZCBsb2dpbiBzaGVsbCBmb3IgR2l0LW9ubHkgU1NIIGFjY2VzcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjMKK21zZ2lkICJTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjQKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjUKK21zZ2lkICJTaG93IGJyYW5jaGVzIGFuZCB0aGVpciBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NgorbXNnaWQgIlNob3cgcGFja2VkIGFyY2hpdmUgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY3Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjgKK21zZ2lkICJHaXQncyBpMThuIHNldHVwIGNvZGUgZm9yIHNoZWxsIHNjcmlwdHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY5Cittc2dpZCAiQ29tbW9uIEdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzAKK21zZ2lkICJTdGFzaCB0aGUgY2hhbmdlcyBpbiBhIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGF3YXkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTcxCittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIHN0YWdpbmcgYXJlYSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzIKK21zZ2lkICJTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MworbXNnaWQgIlJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NAorbXNnaWQgIkluaXRpYWxpemUsIHVwZGF0ZSBvciBpbnNwZWN0IHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc1Cittc2dpZCAiQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhbmQgR2l0IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NgorbXNnaWQgIlJlYWQsIG1vZGlmeSBhbmQgZGVsZXRlIHN5bWJvbGljIHJlZnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc3Cittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc4Cittc2dpZCAiQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIHdpdGggYSBibG9iJ3MgY29udGVudHMiCittc2dzdHIgIs6UzrfOvM65zr/Phc+BzrPOtc6vIM+Az4HOv8+Dz4nPgc65zr3PjCDOsc+Bz4fOtc6vzr8gzrzOtSDPhM6xIM+AzrXPgc65zrXPh8+MzrzOtc69zrEgzrXOvc+Mz4IgYmxvYiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc5Cittc2dpZCAiVW5wYWNrIG9iamVjdHMgZnJvbSBhIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MAorbXNnaWQgIlJlZ2lzdGVyIGZpbGUgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgxCittc2dpZCAiVXBkYXRlIHRoZSBvYmplY3QgbmFtZSBzdG9yZWQgaW4gYSByZWYgc2FmZWx5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MgorbXNnaWQgIlVwZGF0ZSBhdXhpbGlhcnkgaW5mbyBmaWxlIHRvIGhlbHAgZHVtYiBzZXJ2ZXJzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MworbXNnaWQgIlNlbmQgYXJjaGl2ZSBiYWNrIHRvIGdpdC1hcmNoaXZlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NAorbXNnaWQgIlNlbmQgb2JqZWN0cyBwYWNrZWQgYmFjayB0byBnaXQtZmV0Y2gtcGFjayIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODUKK21zZ2lkICJTaG93IGEgR2l0IGxvZ2ljYWwgdmFyaWFibGUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg2Cittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODcKK21zZ2lkICJWYWxpZGF0ZSBwYWNrZWQgR2l0IGFyY2hpdmUgZmlsZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgdGFncyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODkKK21zZ2lkICJHaXQgd2ViIGludGVyZmFjZSAod2ViIGZyb250ZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMpIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MAorbXNnaWQgIlNob3cgbG9ncyB3aXRoIGRpZmZlcmVuY2UgZWFjaCBjb21taXQgaW50cm9kdWNlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTEKK21zZ2lkICJNYW5hZ2UgbXVsdGlwbGUgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTIKK21zZ2lkICJDcmVhdGUgYSB0cmVlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MworbXNnaWQgIkRlZmluaW5nIGF0dHJpYnV0ZXMgcGVyIHBhdGgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk0Cittc2dpZCAiR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zIgorbXNnc3RyICLOlM65zrXPgM6xz4bOriDOs8+BzrHOvM68zq7PgiDOtc69z4TOv867z47OvSBHaXQgzrrOsc65IM+Dz4XOvM6yzqzPg861zrnPgiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk1Cittc2dpZCAiQSBHaXQgY29yZSB0dXRvcmlhbCBmb3IgZGV2ZWxvcGVycyIKK21zZ3N0ciAizojOvc6xIM68zqzOuM63zrzOsSDPhM6/z4Ugz4DPhc+Bzq7Ovc6xIM+Ezr/PhSBHaXQgzrPOuc6xIM+Az4HOv86zz4HOsc68zrzOsc+EzrnPg8+Ezq3PgiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk2Cittc2dpZCAiR2l0IGZvciBDVlMgdXNlcnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk3Cittc2dpZCAiVHdlYWtpbmcgZGlmZiBvdXRwdXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk4Cittc2dpZCAiQSB1c2VmdWwgbWluaW11bSBzZXQgb2YgY29tbWFuZHMgZm9yIEV2ZXJ5ZGF5IEdpdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTkKK21zZ2lkICJBIEdpdCBHbG9zc2FyeSIKK21zZ3N0ciAizojOvc6xIM6TzrvPic+Dz4POrM+Bzrkgz4TOv8+FIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjAwCittc2dpZCAiSG9va3MgdXNlZCBieSBHaXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MjAxCittc2dpZCAiU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDIKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDMKK21zZ2lkICJHaXQgbmFtZXNwYWNlcyIKK21zZ3N0ciAizp/Ovc+MzrzOsc+EzrEgeM+Oz4HPic69IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA0Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNQorbXNnaWQgIlNwZWNpZnlpbmcgcmV2aXNpb25zIGFuZCByYW5nZXMgZm9yIEdpdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDYKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQ6IHBhcnQgdHdvIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNworbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDgKK21zZ2lkICJBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQiCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6NjMKK21zZ2lkICJhcmdzIgorbXNnc3RyICLOv8+Bzq/Pg868zrHPhM6xIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo2NAorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmg6NDQKK21zZ2lkICJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDo1NAorbXNnaWQgIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorbXNnc3RyICLOp8+BzrXOuc6szrbOtc+EzrHOuSDOvc6xIM6xz4HPh86vz4POtc+EzrUgzrzOtSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjYwCittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTIxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYmlzZWN0ZWRfaGVhZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzOQorIywgc2gtZm9ybWF0Cittc2dpZCAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgzrTOrc+HzrXPhM6xzrkgzrzPjM69zr8gzq3Ovc6xIM+Mz4HOuc+DzrzOsS4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjA5Cittc2dpZCAiTm8gbG9nZmlsZSBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjIxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMgorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiOzsgIM+EzrkgzrXOvc69zr/Otc6vz4TOtTsiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQxCittc2dpZCAiYmlzZWN0IHJ1biBmYWlsZWQ6IG5vIGNvbW1hbmQgcHJvdmlkZWQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQ2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNzkKK21zZ2lkICJiaXNlY3QgcnVuIGNhbm5vdCBjb250aW51ZSBhbnkgbW9yZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjI4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyOTIKK21zZ2lkICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDozMDAKK21zZ2lkICJXZSBhcmUgbm90IGJpc2VjdGluZy4iCittc2dzdHIgIiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NDYKK21zZ2lkICIiCisiRXJyb3I6IFlvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MQorbXNnaWQgIkF1dG9tYXRlZCBtZXJnZSBkaWQgbm90IHdvcmsuIgorbXNnc3RyICIiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYyCittc2dpZCAiU2hvdWxkIG5vdCBiZSBkb2luZyBhbiBvY3RvcHVzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3NworIywgc2gtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICLOic60zrcgz4DOu86uz4HPic+CIM61zr3Ors68zrXPgc6/IM68zrUgz4TOvyAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgdG86ICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo5NworIywgc2gtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDoxMDIKK21zZ2lkICJTaW1wbGUgbWVyZ2UgZGlkIG5vdCB3b3JrLCB0cnlpbmcgYXV0b21hdGljIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXJlYmFzZS5zaDo0NDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJGhlYWRfbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXJlYmFzZS5zaDo0NzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAkc3RhdGVfZGlyX2Jhc2UgZGlyZWN0b3J5LCBhbmRcbiIKKyJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorImNhc2UsIHBsZWFzZSB0cnlcbiIKKyJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuIgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktcmViYXNlLnNoOjUyMworbXNnaWQgIiIKKyJmYXRhbDogY2Fubm90IGNvbWJpbmUgYW0gb3B0aW9ucyB3aXRoIGVpdGhlciBpbnRlcmFjdGl2ZSBvciBtZXJnZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktcmViYXNlLnNoOjUzMAorbXNnaWQgImZhdGFsOiBjYW5ub3QgY29tYmluZSAnLS1zaWdub2ZmJyB3aXRoICctLXByZXNlcnZlLW1lcmdlcyciCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1yZWJhc2Uuc2g6NTQxCittc2dpZCAiZmF0YWw6IGNhbm5vdCBjb21iaW5lICctLXByZXNlcnZlLW1lcmdlcycgd2l0aCAnLS1yZWJhc2UtbWVyZ2VzJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXJlYmFzZS5zaDo1NTAKK21zZ2lkICJmYXRhbDogY2Fubm90IGNvbWJpbmUgJy0tcmViYXNlLW1lcmdlcycgd2l0aCAnLS1zdHJhdGVneS1vcHRpb24nIgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktcmViYXNlLnNoOjU1MgorbXNnaWQgImZhdGFsOiBjYW5ub3QgY29tYmluZSAnLS1yZWJhc2UtbWVyZ2VzJyB3aXRoICctLXN0cmF0ZWd5JyIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXJlYmFzZS5zaDo1NzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgImludmFsaWQgdXBzdHJlYW0gJyR1cHN0cmVhbV9uYW1lJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXJlYmFzZS5zaDo2MDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIG1lcmdlIGJhc2VzIgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktcmViYXNlLnNoOjYwNSBnaXQtbGVnYWN5LXJlYmFzZS5zaDo2MDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGlzIG5vIG1lcmdlIGJhc2UiCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1yZWJhc2Uuc2g6NjE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdDogJG9udG9fbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXJlYmFzZS5zaDo2NDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaC9jb21taXQgJyRicmFuY2hfbmFtZSciCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1yZWJhc2Uuc2g6Njc4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJHN0YXNoX2FiYnJldiIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXJlYmFzZS5zaDo3MDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXJlYmFzZS5zaDo3MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXJlYmFzZS5zaDo3MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgdG8gJG9udG86IgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktcmViYXNlLnNoOjczMworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICRtYiB0byAkb250bzoiCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1yZWJhc2Uuc2g6NzQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAkYnJhbmNoX25hbWUgdG8gJG9udG9fbmFtZS4iCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1yZWJhc2Uuc2g6NzU3Cittc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uIgorbXNnc3RyICIiCisizqDPgc+Oz4TOsSwgzrPOr869zrXPhM6xzrkgzrPPjc+BzrnPg868zrEgz4DPgc6/z4Igz4TOsSDPgM6vz4PPiSDPhM6/z4UgaGVhZCDOs865zrEgzr3OsSDOs86vzr3Otc65IM61z4DOsc69zqzOu863z4jOtyDPhM63z4IgIgorIs60zr/Phc67zrXOuc6sz4Igz4POsc+CIM+AzqzOvc+JIM+DzrUgzrHPhc+Ez4wuLi4iCisKKyM6IGdpdC1zdGFzaC5zaDo3NQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MTI1Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIs6UzrXOvSDOrc+HzrXPhM61IM6xzrrPjM68zrEgz4TOt869IM6xz4HPh865zrrOriDPhc+Azr/Oss6/zrvOriIKKworIzogZ2l0LXN0YXNoLnNoOjE0MAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxNTUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxNzUgZ2l0LXN0YXNoLnNoOjE4OAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxOTIKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICLOlM61zr0gzrXPgM65zrvOrc+Hz4TOt866zrUgzrrOsc68zq/OsSDOsc67zrvOsc6zzq4iCisKKyM6IGdpdC1zdGFzaC5zaDoxOTUKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MjA4Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjI0NgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAkcmVmX3N0YXNoIHdpdGggJHdfY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoyOTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHB1c2gnOiAkb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDozMTIKK21zZ2lkICJDYW4ndCB1c2UgLS1wYXRjaCBhbmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDozMjAKK21zZ2lkICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjMyNQorbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDozMjkKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjMzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICRzdGFzaF9tc2ciCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjM1OQorbXNnaWQgIkNhbm5vdCByZW1vdmUgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NTA3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJG9wdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NTIwCittc2dpZCAiTm8gc3Rhc2ggZW50cmllcyBmb3VuZC4iCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjUyNworIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NTQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NTcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo1ODEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo1ODkKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NTkzCittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo2MDEKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICLOo8+FzrPOus+Bzr/Pjc+DzrXOuc+CIM+Dz4TOvyDOtc+Fz4HOtc+Ezq7Pgc65zr8uIM6Uzr/Ous65zrzOrM+Dz4TOtSDPh8+Jz4HOr8+CIM+Ezr8gLS1pbmRleC4iCisKKyM6IGdpdC1zdGFzaC5zaDo2MDMKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo2MTIKK21zZ2lkICJDb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NjM3Cittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjY1MgorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NjY2Cittc2dpZCAiVGhlIHN0YXNoIGVudHJ5IGlzIGtlcHQgaW4gY2FzZSB5b3UgbmVlZCBpdCBhZ2Fpbi4iCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjY3NQorIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6Njc2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo2ODQKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIs6UzrUgzrTPjM64zrfOus61IM+Mzr3Ov868zrEgzrrOu86szrTOv8+FIgorCisjOiBnaXQtc3Rhc2guc2g6NzYzCittc2dpZCAiKFRvIHJlc3RvcmUgdGhlbSB0eXBlIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTk4Cittc2dpZCAiUmVsYXRpdmUgcGF0aCBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCBhbmQgaXMgbm90IGEgc3VibW9kdWxlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBwYXRoIGlzIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKKyIkc21fcGF0aFxuIgorIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIGl0LiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI1OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjY5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBIGdpdCBkaXJlY3RvcnkgZm9yICckc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb21cbiIKKyIgICRyZWFscmVwb1xuIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0ICIKKyJyZXBvXG4iCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorIm9wdGlvbi4iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI5NAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwMworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTYzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU3OAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICIKKyInJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJGZXRjaGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnLCBidXQgaXQgZGlkIG5vdCBjb250YWluICRzaGExLiAiCisiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxNAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjIxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBvZiAnJGNvbW1hbmQgJHNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyNworIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6ICckY29tbWFuZCAkc2hhMSciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3NTQKK21zZ2lkICJUaGUgLS1jYWNoZWQgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC0tZmlsZXMgb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODA2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG1vZGUgJG1vZF9kc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX3NyYyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjgyOQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODMyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU2VlIGdpdC0ke2NtZH0oMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzaW5nICgkbmV3X2NvdW50LyR0b3RhbCkiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjE1MgorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNlIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdFxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisieCwgZXhlYyA8Y29tbWl0PiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIxNQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisizpzPgM6/z4HOtc6vz4TOtSDOvc6xIM+Ez4HOv8+Azr/PgM6/zrnOrs+DzrXPhM61IM+EzrfOvSDPhc+Azr/Oss6/zrvOriDPhM+Oz4HOsSwgzrzOtVxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisizozPhM6xzr0gzr/OuSDOsc67zrvOsc6zzq3PgiDPg86xz4Igz4POsc+CIM65zrrOsc69zr/PgM6/zrnOv8+Nzr0sIM+Ez4HOrc6+z4TOtVxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjQwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkc2hhMTogbm90IGEgY29tbWl0IHRoYXQgY2FuIGJlIHBpY2tlZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Mjc5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzA5Cittc2dpZCAiQ2Fubm90IHdyaXRlIGN1cnJlbnQgY29tbWl0J3MgcmVwbGFjZW1lbnQgc2hhMSIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzYwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjM2MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgbW92ZSBIRUFEIHRvICRmaXJzdF9wYXJlbnQiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjM3NgorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gc3F1YXNoIGEgbWVyZ2U6ICRzaGExIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozOTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQwMworIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBpY2sgJHNoYTEiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxMgorIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyR7bn06IgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJHtufSB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0LiIKK21zZ2lkX3BsdXJhbCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXRzLiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB3cml0ZSAkZml4dXBfbXNnIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NDAKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgMiBjb21taXRzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDgxIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1MjQKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1MjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAkc2hhMS4uLiAkcmVzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFtZW5kIGNvbW1pdCBhZnRlciBzdWNjZXNzZnVsbHkgcGlja2luZyAkc2hhMS4uLiAkcmVzdFxuIgorIlRoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlLCBvciB0aGUgcHJlLWNvbW1pdCBob29rXG4iCisiZmFpbGVkLiBJZiB0aGUgcHJlLWNvbW1pdCBob29rIGZhaWxlZCwgeW91IG1heSBuZWVkIHRvIHJlc29sdmUgdGhlIGlzc3VlICIKKyJiZWZvcmVcbiIKKyJ5b3UgYXJlIGFibGUgdG8gcmV3b3JkIHRoZSBjb21taXQuIgorbXNnc3RyICIiCisizpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDPhM+Bzr/PgM6/z4DOv86vzrfPg863IM+EzrfPgiDPhc+Azr/Oss6/zrvOrs+CIM68zrXPhM6sIM6xz4DPjCDPhM63zr0gzrXPgM65z4TPhc+Hzq4gzrTOuc6xzrvOv86zzq4gz4TOv8+FICIKKyIkc2hhMS4uLiAkcmVzdFxuIgorIs6azrHPhM6sIM+AzqzPg86xIM+AzrnOuM6xzr3PjM+EzrfPhM6xIM6/z4bOtc6vzrvOtc+EzrHOuSDPg861IM66zrXOvc+MIM68zq7Ovc+FzrzOsSDPhc+Azr/Oss6/zrvOrs+CLCDOriDOsc+Azq3PhM+Fz4fOtSDPhM6/ICIKKyLOrM6zzrrOuc+Dz4TPgc6/IM+Az4HOvyDPhc+Azr/Oss6/zrvOrs+CLlxuIgorIs6Rzr0gzrHPgM6tz4TPhc+HzrUgz4TOvyDOrM6zzrrOuc+Dz4TPgc6/IM+Az4HOvyDPhc+Azr/Oss6/zrvOrs+CLCDOvM+Azr/Pgc61zq8gzr3OsSDPh8+BzrXOuc6xz4PPhM61zq8gzr3OsSDOtc+AzrnOu8+Nz4POtc+EzrUgz4TOvyAiCisizrjOrc68zrEgz4DPgc65zr0gzr3OsVxuIgorIs68z4DOv8+Bzq3Pg861z4TOtSDOvc6xIM6xzr3Osc60zrnOsc+Ez4XPgM+Oz4POtc+EzrUgz4TOt869IM+Fz4DOv86yzr/Ou86uLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU4NgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICckc3F1YXNoX3N0eWxlJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZzogJHJlc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIGZhaWxlZDogJHJlc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYzOAorbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2NDAKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisizpzPgM6/z4HOtc6vz4TOtSDOvc6xIM60zrnOv8+BzrjPjs+DzrXPhM61IM+Ezr8gz4DPgc+MzrLOu863zrzOsSwgzrrOsc65IM68zrXPhM6sIM69zrEgz4TPgc6tzr7Otc+EzrVcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIy4gVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2NTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gc3VjY2VlZGVkOiAkcmVzdFxuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY2NAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21tYW5kOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjY1Cittc2dpZCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc1NworbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzYyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmVcbiIKKyJzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisizojPh861z4TOtSDPgM+Bzr/Otc+Ezr/Ouc68zrHPg868zq3Ovc61z4IgzrHOu867zrHOs86tz4Igz4PPhM6/IM60zq3Ovc+Ez4HOvyDOtc+BzrPOsc+Dzq/Osc+CIM+DzrHPgi5cbiIKKyLOkc69IM6xz4XPhM6tz4Igzr/OuSDOsc67zrvOsc6zzq3PgiDPgM+Bzq3PgM61zrkgzr3OsSBcbiIKKyLPg8+FzrzPgM+Ez4XPh864zr/Pjc69IM68zq3Pg86xIM+Dz4TOt869IM+Az4HOv863zrPOv8+NzrzOtc69zrcgz4XPgM6/zrLOv867zq4sIM+Ez4HOrc6+z4TOtTpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIs6Rzr0gz4DPgc6tz4DOtc65IM69zrEgz4DOrM69zrUgz4POtSDOvc6tzrEgz4XPgM6/zrLOv867zq4sIM+Ez4HOrc6+z4TOtTpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyLOms6xzrkgz4PPhM65z4IgzrTPjc6/IM+AzrXPgc65z4DPhM+Oz4POtc65z4IsIM68z4zOu865z4Igz4TOtc67zrXOuc+Oz4POtc+EzrUsIM+Dz4XOvc61z4fOr8+Dz4TOtSDOvM61OlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NzkKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Nzg0Cittc2dpZCAiIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyLOiM+HzrXPhM61IM68zrcgz4PPhc6zz4fPic69zrXPhc68zq3Ovc61z4IgzrHOu867zrHOs86tz4Igz4PPhM6/IM60zq3Ovc+Ez4HOvyDOtc+BzrPOsc+Dzq/Osc+CIM+DzrHPgi4gzqDOsc+BzrHOus6xzrvPjiDPhc+Azr/Oss6szrvOtc+Ezq0gIgorIs+EzrnPglxuIgorIs+Az4HPjs+EzrEgzrrOsc65IM68zrXPhM6sIM+Ez4HOrc6+z4TOtSAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyDPgM6szrvOuS4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3ODkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc5MworbXNnaWQgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MjQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkxMAorbXNnaWQgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODUyCittc2dpZCAiTm8gSEVBRD8iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg1MworIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJHN0YXRlX2RpciIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODU2Cittc2dpZCAiQ291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg4OAorIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmRzKSIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDIgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0NworbXNnaWQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDo4OSBnaXQtc2gtc2V0dXAuc2g6OTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVzYWdlOiAkZGFzaGxlc3MgJFVTQUdFIgorbXNnc3RyICLPh8+Bzq7Pg863OiAkZGFzaGxlc3MgJFVTQUdFIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MTkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgY2hkaXIgdG8gJGNkdXAsIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoxOTkgZ2l0LXNoLXNldHVwLnNoOjIwNgorIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6ICRwcm9ncmFtX25hbWUgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyMAorbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjMKK21zZ2lkICJDYW5ub3QgcmV3cml0ZSBicmFuY2hlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNgorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0MgorbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0NQorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTIKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIs6Vz4DOuc+Az4HPjM+DzrjOtc+EzrEsIM+Ezr8gzrXPhc+BzrXPhM6uz4HOuc+MIM+DzrHPgiDPgM61z4HOuc6tz4fOtc65IM68zrcgz4XPgM6/zrLOtc6yzrvOt868zq3Ovc61z4IgzrHOu867zrHOs86tz4IuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MzcyCittc2dpZCAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiIgorIs6nz4HOtc65zqzOts61z4TOsc65IM69zrEgz4TPgc6tzr7Otc+EzrUgzrHPhc+Ezq4gz4TOt869IM61zr3PhM6/zrvOriDOsc+Az4wgz4TOvyDPiM63zrvPjM+EzrXPgc6/IM61z4DOr8+AzrXOtM6/IM+Ezr/PhSDOtM6tzr3PhM+Bzr/PhSAiCisizrXPgc6zzrHPg86vzrHPgi4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDozNzcKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIGFic29sdXRlIHBhdGggb2YgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogeW91IGNhbiBhZGp1c3QgdGhpcyB0byBhbGlnbiAiZ2l0IGFkZCAtaSIgc3RhdHVzIG1lbnUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTk2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiUxMnMgJTEycyAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE5NworbXNnaWQgInN0YWdlZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE5NworbXNnaWQgInVuc3RhZ2VkIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjUzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjc4Cittc2dpZCAiYmluYXJ5IgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjYyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzE2Cittc2dpZCAibm90aGluZyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI5OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMxMworbXNnaWQgInVuY2hhbmdlZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYwOQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJhZGRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgImFkZGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1cGRhdGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidXBkYXRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAicmV2ZXJ0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJyZXZlcnRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidG91Y2hlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInRvdWNoZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI3Cittc2dpZCAiVXBkYXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjM5Cittc2dpZCAiUmV2ZXJ0IgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjYyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIm5vdGU6ICVzIGlzIHVudHJhY2tlZCBub3cuXG4iCittc2dzdHIgIs+DzrfOvM61zq/Pic+Dzrc6IM+Ezr8gJXMgzrTOtc69IM+AzrHPgc6xzrrOv867zr/Phc64zrXOr8+EzrHOuSDPhM+Oz4HOsS5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NzMKK21zZ2lkICJBZGQgdW50cmFja2VkIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njc5Cittc2dpZCAiTm8gdW50cmFja2VkIGZpbGVzLlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTAzMworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDM2Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFzaGluZy4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDM5Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciB1bnN0YWdpbmcuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA0MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTEKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGFwcGx5aW5nLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNDUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDQ4Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBkaXNjYXJkaW5nLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwODUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA4NgorbXNnaWQgIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlLlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA5MgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVzIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJ2l0JyByZWZlcnMgdG8gdGhlIHBhdGNoIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgbWVzc2FnZXMuCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMDAKK21zZ2lkICIiCisiSWYgaXQgZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgeW91IHdpbGwgYmUgZ2l2ZW4gYW4gb3Bwb3J0dW5pdHkgdG9cbiIKKyJlZGl0IGFnYWluLiAgSWYgYWxsIGxpbmVzIG9mIHRoZSBodW5rIGFyZSByZW1vdmVkLCB0aGVuIHRoZSBlZGl0IGlzXG4iCisiYWJvcnRlZCBhbmQgdGhlIGh1bmsgaXMgbGVmdCB1bmNoYW5nZWQuXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTE0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciByZWFkaW5nOiAlcyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIy4gQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKyMuIChzYXlpbmcgIm4iIGZvciAibm8iIGRpc2NhcmRzISkgaWYgdGhlIHRyYW5zbGF0aW9uCisjLiBvZiB0aGUgd29yZCAibm8iIGRvZXMgbm90IHN0YXJ0IHdpdGggbi4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIxMworbXNnaWQgIiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/ICIKK21zZ3N0ciAiIgorIs6XIM61z4DOtc6+zrXPgc6zzrHPg868zq3Ovc63IM6xzrvOu86xzrPOriDPg86xz4IgzrTOtc69IM61z4bOsc+BzrzPjM62zrXPhM6xzrkuIM6dzrEgzrPOr869zrXOuSDOtc+AzrXOvs61z4HOs86xz4POr86xIM+AzqzOu865ICjOvM61IFwibiIKKyJcIiDOsc+Azr/Pgc+Bzq/PgM+EzrXPhM6xzrkhKSBbeS9uXTsiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIyMgorbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDPgM+Bzr/Otc+Ezr/Ouc68zrHPg86vzrEgzrHPhc+Ezq7PgiDPhM63z4IgzrHOu867zrHOs86uz4JcbiIKKyJuIC0gz4zPh865IM+Az4HOv861z4TOv865zrzOsc+Dzq/OsSDOsc+Fz4TOrs+CIM+EzrfPgiDOsc67zrvOsc6zzq7PglxuIgorInEgLSDOrc6+zr/OtM6/z4IsIM+Mz4fOuSDPgM+Bzr/Otc+Ezr/Ouc68zrHPg86vzrEgzrHPhc+Ezq7PgiDPhM63z4IgzrHOu867zrHOs86uz4Igzq4gzrrOsc68zq/Osc+CIM6xz4DPjCDPjM+DzrXPgiDOsc+Azr/OvM6tzr3Ov8+Fzr1cbiIKKyJhIC0gz4DPgc6/zrXPhM6/zrnOvM6xz4POr86xIM6xz4XPhM6uz4Igz4TOt8+CIM6xzrvOu86xzrPOrs+CIM66zrHOuSDPjM67z4nOvSDPhM+Jzr0gzrXPgM+MzrzOtc69z4nOvSDOsc67zrvOsc6zz47OvSDPg8+Ezr8gzrHPgc+HzrXOr86/XG4iCisiZCAtIM+Mz4fOuSDPgM+Bzr/Otc+Ezr/Ouc68zrHPg86vzrEgzrHPhc+Ezq7PgiDPhM63z4IgzrHOu867zrHOs86uz4Igzq4gzrrOsc68zq/Osc+CIM6xz4DPjCDPhM65z4IgzrXPgM+MzrzOtc69zrXPgiDOsc67zrvOsc6zzq3PgiDPg8+Ezr8gIgorIs6xz4HPh861zq/OvyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjI4Cittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIM6xz4DOv864zq7Ous61z4XPg863IM6xz4XPhM6uz4Igz4TOt8+CIM6xzrvOu86xzrPOrs+CXG4iCisibiAtIM+Mz4fOuSDOsc+Azr/OuM6uzrrOtc+Fz4POtyDOsc+Fz4TOrs+CIM+EzrfPgiDOsc67zrvOsc6zzq7PglxuIgorInEgLSDOrc6+zr/OtM6/z4IsIM+Mz4fOuSDOsc+Azr/OuM6uzrrOtc+Fz4POtyDOsc+Fz4TOrs+CIM+EzrfPgiDOsc67zrvOsc6zzq7PgiDOriDOus6xzrzOr86xz4IgzrHPgM+MIM+Mz4POtc+CIM6xz4DOv868zq3Ovc6/z4XOvVxuIgorImEgLSDOsc+Azr/OuM6uzrrOtc+Fz4POtyDOsc+Fz4TOrs+CIM+EzrfPgiDOsc67zrvOsc6zzq7PgiDOus6xzrkgz4zOu8+Jzr0gz4TPic69IM61z4DPjM68zrXOvc+Jzr0gzrHOu867zrHOs8+Ozr0gz4PPhM6/IM6xz4HPh861zq/Ov1xuIgorImQgLSDPjM+HzrkgzrHPgM6/zrjOrs66zrXPhc+DzrcgzrHPhc+Ezq7PgiDPhM63z4IgzrHOu867zrHOs86uz4Igzq4gzrrOsc68zq/Osc+CIM6xz4DPjCDPhM65z4IgzrXPgM+MzrzOtc69zrXPgiDOsc67zrvOsc6zzq3PgiDPg8+Ezr8gIgorIs6xz4HPh861zq/OvyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjM0Cittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDOsc+Azr/PgM+Bzr/Otc+Ezr/Ouc68zrHPg86vzrEgzrHPhc+Ezq7PgiDPhM63z4IgzrHOu867zrHOs86uz4JcbiIKKyJuIC0gz4zPh865IM6xz4DOv8+Az4HOv861z4TOv865zrzOsc+Dzq/OsSDOsc+Fz4TOrs+CIM+EzrfPgiDOsc67zrvOsc6zzq7PglxuIgorInEgLSDOrc6+zr/OtM6/z4IsIM+Mz4fOuSDOsc+Azr/PgM+Bzr/Otc+Ezr/Ouc68zrHPg86vzrEgzrHPhc+Ezq7PgiDPhM63z4IgzrHOu867zrHOs86uz4Igzq4gzrrOsc68zq/Osc+CIM6xz4DPjCDPjM+DzrXPgiAiCisizrHPgM6/zrzOrc69zr/Phc69XG4iCisiYSAtIM6xz4DOv8+Az4HOv861z4TOv865zrzOsc+Dzq/OsSDOsc+Fz4TOrs+CIM+EzrfPgiDOsc67zrvOsc6zzq7PgiDOus6xzrkgz4zOu8+Jzr0gz4TPic69IM61z4DPjM68zrXOvc+Jzr0gzrHOu867zrHOs8+Ozr0gz4PPhM6/ICIKKyLOsc+Bz4fOtc6vzr9cbiIKKyJkIC0gz4zPh865IM6xz4DOv8+Az4HOv861z4TOv865zrzOsc+Dzq/OsSDOsc+Fz4TOrs+CIM+EzrfPgiDOsc67zrvOsc6zzq7PgiDOriDOus6xzrzOr86xz4IgzrHPgM+MIM+EzrnPgiDOtc+Az4zOvM61zr3Otc+CIM6xzrvOu86xzrPOrc+CICIKKyLPg8+Ezr8gzrHPgc+HzrXOr86/IgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNDAKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjQ2Cittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjUyCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNTgKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzMKK21zZ2lkICIiCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJnIC0gzrXPgM65zrvOv86zzq4gzrHOu867zrHOs86uz4IgzrPOuc6xIM69zrEgz4DOrM+EzrVcbiIKKyIvIC0gzrHOvc6xzrbOrs+EzrfPg863IM6zzrnOsSDOsc67zrvOsc6zzq4gz4DOv8+FIM+EzrHOuc+BzrnOrM62zrXOuSDOvM61IM+EzrcgzrTOv864zrXOr8+DzrEgzrrOsc69zr/Ovc65zrrOriDOrc66z4bPgc6xz4POt1xuIgorImogLSDPjM+HzrkgzrHPgM+Mz4bOsc+DzrcgzrPOuc6xIM6xz4XPhM6uIM+EzrfOvSDOsc67zrvOsc6zzq4sIM60zrXPgiDPhM63zr0gzrXPgM+MzrzOtc69zrcgzrHOu867zrHOs86uIM+Hz4nPgc6vz4IgzrHPgM+Mz4bOsc+DzrdcbiIKKyJKIC0gz4zPh865IM6xz4DPjM+GzrHPg863IM6zzrnOsSDOsc+Fz4TOriDPhM63zr0gzrHOu867zrHOs86uLCDOtM61z4Igz4TOt869IM61z4DPjM68zrXOvc63IM6xzrvOu86xzrPOrlxuIgorImsgLSDPjM+HzrkgzrHPgM+Mz4bOsc+DzrcgzrPOuc6xIM6xz4XPhM6uIM+EzrfOvSDOsc67zrvOsc6zzq4sIM60zrXPgiDPhM63zr0gz4DPgc6/zrfOs86/z43OvM61zr3OtyDOsc67zrvOsc6zzq4gz4fPic+Bzq/PgiAiCisizrHPgM+Mz4bOsc+DzrdcbiIKKyJLIC0gz4zPh865IM6xz4DPjM+GzrHPg863IM6zzrnOsSDOsc+Fz4TOriDPhM63zr0gzrHOu867zrHOs86uLCDOtM61z4Igz4TOt869IM+Az4HOv863zrPOv8+NzrzOtc69zrcgzrHOu867zrHOs86uXG4iCisicyAtIM+EzrXOvM6sz4fOuc+DzrUgz4TOt869IM+Ez4HOrc+Hzr/Phc+DzrEgzrHOu867zrHOs86uIM+DzrUgzrzOuc66z4HPjM+EzrXPgc61z4IgzrHOu867zrHOs86tz4JcbiIKKyJlIC0gz4fOtc65z4HOv866zq/Ovc63z4TOtyDOtc+AzrXOvs61z4HOs86xz4POr86xIM+EzrfPgiDPgM6xz4HOv8+Nz4POsc+CIM6xzrvOu86xzrPOrs+CXG4iCisiPyAtIM+Az4HOv86yzr/Ou86uIM6yzr/Ors64zrXOuc6xz4JcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzA0Cittc2dpZCAiVGhlIHNlbGVjdGVkIGh1bmtzIGRvIG5vdCBhcHBseSB0byB0aGUgaW5kZXghXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzA1Cittc2dpZCAiQXBwbHkgdGhlbSB0byB0aGUgd29ya3RyZWUgYW55d2F5PyAiCittc2dzdHIgIs6dzrEgzrPOr869zrXOuSDPgM6sz4HOsc+Fz4TOsSDOtc+GzrHPgc68zr/Os86uIM+Ezr/Phc+CIM+Dz4TOvyDOtM6tzr3PhM+Bzr8gzrXPgc6zzrHPg86vzrHPgjsgIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMDgKK21zZ2lkICJOb3RoaW5nIHdhcyBhcHBsaWVkLlxuIgorbXNnc3RyICLOlM61zr0gzrXPhs6xz4HOvM+Mz4PPhM63zrrOtSDPhM6vz4DOv8+EzrEuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMxOQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMjgKK21zZ2lkICJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkLlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMzMAorbXNnaWQgIk5vIGNoYW5nZXMuXG4iCittc2dzdHIgIs6UzrXOvSDPhc+AzqzPgc+Hzr/Phc69IM6xzrvOu86xzrPOrc+CLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMzgKK21zZ2lkICJQYXRjaCB1cGRhdGUiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzkwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM5MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzOTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM5NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzOTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MDEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MDIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDA1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisizp3OsSDOs86vzr3Otc65IM61z4bOsc+BzrzOv86zzq4gz4TOt8+CIM6xzrvOu86xzrPOrs+CIM67zrXOuc+Ezr/Phc+BzrPOr86xz4Igz4PPhM6/IM61z4XPgc61z4TOrs+BzrnOvyBbeSxuLHEsYSxkJXMsP107ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDA2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQwNworIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDEwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MTEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQxNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQxNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQxNworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisizp3OsSDOs86vzr3Otc65IM61z4bOsc+BzrzOv86zzq4gz4TOt8+CIM6xzrvOu86xzrPOrs+CIM67zrXOuc+Ezr/Phc+BzrPOr86xz4Igz4PPhM6/IM61z4XPgc61z4TOrs+BzrnOvyDOus6xzrkgz4TOvyDOtM6tzr3PhM+Bzr8gIgorIs61z4HOs86xz4POr86xz4IgW3ksbixxLGEsZCVzLD9dOyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDIyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTIyCittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290b1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTUyOQorbXNnaWQgImdvIHRvIHdoaWNoIGh1bmsgKDxyZXQ+IHRvIHNlZSBtb3JlKT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTUzMQorbXNnaWQgImdvIHRvIHdoaWNoIGh1bms/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXI6ICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NDUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU29ycnksIG9ubHkgJWQgaHVuayBhdmFpbGFibGUuXG4iCittc2dpZF9wbHVyYWwgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS5cbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3MQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaFxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3NQorbXNnaWQgInNlYXJjaCBmb3IgcmVnZXg/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1ODgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTk4Cittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjEwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYzMgorbXNnaWQgIk5vIHByZXZpb3VzIGh1bmtcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjM4Cittc2dpZCAiTm8gbmV4dCBodW5rXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjQ0Cittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmtcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NTAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rLlxuIgorbXNnaWRfcGx1cmFsICJTcGxpdCBpbnRvICVkIGh1bmtzLlxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjYwCittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcwNgorbXNnaWQgIlJldmlldyBkaWZmIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2UgZG8gbm90IHRyYW5zbGF0ZSB0aGUgY29tbWFuZCBuYW1lcworIy4gJ3N0YXR1cycsICd1cGRhdGUnLCAncmV2ZXJ0JywgZXRjLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzI1Cittc2dpZCAiIgorInN0YXR1cyAgICAgICAgLSBzaG93IHBhdGhzIHdpdGggY2hhbmdlc1xuIgorInVwZGF0ZSAgICAgICAgLSBhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXNcbiIKKyJyZXZlcnQgICAgICAgIC0gcmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb25cbiIKKyJwYXRjaCAgICAgICAgIC0gcGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5XG4iCisiZGlmZiAgICAgICAgICAtIHZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4XG4iCisiYWRkIHVudHJhY2tlZCAtIGFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgIgorImNoYW5nZXNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NDIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzQ3CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzU3CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzY3Cittc2dpZCAibWlzc2luZyAtLSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5rbm93biAtLXBhdGNoIG1vZGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc2OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NzUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcywgZXhwZWN0aW5nIC0tIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM4Cittc2dpZCAibG9jYWwgem9uZSBkaWZmZXJzIGZyb20gR01UIGJ5IGEgbm9uLW1pbnV0ZSBpbnRlcnZhbFxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ1IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUxCittc2dpZCAibG9jYWwgdGltZSBvZmZzZXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDI0IGhvdXJzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoyMTkgZ2l0LXNlbmQtZW1haWwucGVybDoyMjUKK21zZ2lkICJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMDIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIiclcycgY29udGFpbnMgYW4gaW50ZXJtZWRpYXRlIHZlcnNpb24gb2YgdGhlIGVtYWlsIHlvdSB3ZXJlIGNvbXBvc2luZy5cbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMwNworIywgcGVybC1mb3JtYXQKK21zZ2lkICInJXMuZmluYWwnIGNvbnRhaW5zIHRoZSBjb21wb3NlZCBlbWFpbC5cbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMyNgorbXNnaWQgIi0tZHVtcC1hbGlhc2VzIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIG9wdGlvbnNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjM5NSBnaXQtc2VuZC1lbWFpbC5wZXJsOjY1MAorbXNnaWQgIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozOTgKK21zZ2lkICIiCisiYGJhdGNoLXNpemVgIGFuZCBgcmVsb2dpbmAgbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgKHZpYSBjb21tYW5kLWxpbmUgb3IgIgorImNvbmZpZ3VyYXRpb24gb3B0aW9uKVxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1zdXBwcmVzcy1jYyBmaWVsZDogJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1jb25maXJtIHNldHRpbmc6ICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUyNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBhbGlhcyB3aXRoIHF1b3RlcyBpcyBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTI3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGA6aW5jbHVkZTpgIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYC9maWxlYCBvciBgfHBpcGVgIHJlZGlyZWN0aW9uIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgbGluZSBpcyBub3QgcmVjb2duaXplZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjYxNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSAnJXMnIGV4aXN0cyBidXQgaXQgY291bGQgYWxzbyBiZSB0aGUgcmFuZ2Ugb2YgY29tbWl0c1xuIgorInRvIHByb2R1Y2UgcGF0Y2hlcyBmb3IuICBQbGVhc2UgZGlzYW1iaWd1YXRlIGJ5Li4uXG4iCisiXG4iCisiICAgICogU2F5aW5nIFwiLi8lc1wiIGlmIHlvdSBtZWFuIGEgZmlsZTsgb3JcbiIKKyIgICAgKiBHaXZpbmcgLS1mb3JtYXQtcGF0Y2ggb3B0aW9uIGlmIHlvdSBtZWFuIGEgcmFuZ2UuXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2MzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW5kaXIgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjYxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJmYXRhbDogJXM6ICVzXG4iCisid2FybmluZzogbm8gcGF0Y2hlcyB3ZXJlIHNlbnRcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY3MgorbXNnaWQgIiIKKyJcbiIKKyJObyBwYXRjaCBmaWxlcyBzcGVjaWZpZWQhXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2ODUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTm8gc3ViamVjdCBsaW5lIGluICVzPyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY5NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAlczogJXMiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MDYKK21zZ2lkICIiCisiTGluZXMgYmVnaW5uaW5nIGluIFwiR0lUOlwiIHdpbGwgYmUgcmVtb3ZlZC5cbiIKKyJDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50c1xuIgorImZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLlxuIgorIlxuIgorIkNsZWFyIHRoZSBib2R5IGNvbnRlbnQgaWYgeW91IGRvbid0IHdpc2ggdG8gc2VuZCBhIHN1bW1hcnkuXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzQ3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzLmZpbmFsOiAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc5MAorbXNnaWQgIlN1bW1hcnkgZW1haWwgaXMgZW1wdHksIHNraXBwaW5nIGl0XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwIFt5L05dIGFzIGlzLgorIzogZ2l0LXNlbmQtZW1haWwucGVybDo4MjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVzZSA8JXM+IFt5L05dPyAiCittc2dzdHIgIs6Vz4DOuc6yzrXOss6xzrnPjs69zrXPhM61IM+Az4nPgiDOuM6tzrvOtc+EzrUgzr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4POtc+EzrUgPCVzPiBbeS9OXT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg4MAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGZpbGVzIGFyZSA4Yml0LCBidXQgZG8gbm90IGRlY2xhcmUgYSBDb250ZW50LVRyYW5zZmVyLSIKKyJFbmNvZGluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg4NQorbXNnaWQgIldoaWNoIDhiaXQgZW5jb2Rpbmcgc2hvdWxkIEkgZGVjbGFyZSBbVVRGLThdPyAiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4OTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIlJlZnVzaW5nIHRvIHNlbmQgYmVjYXVzZSB0aGUgcGF0Y2hcbiIKKyJcdCVzXG4iCisiaGFzIHRoZSB0ZW1wbGF0ZSBzdWJqZWN0ICcqKiogU1VCSkVDVCBIRVJFICoqKicuIFBhc3MgLS1mb3JjZSBpZiB5b3UgcmVhbGx5ICIKKyJ3YW50IHRvIHNlbmQuXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTIKK21zZ2lkICJUbyB3aG9tIHNob3VsZCB0aGUgZW1haWxzIGJlIHNlbnQgKGlmIGFueW9uZSk/IgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTMwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBhbGlhcyAnJXMnIGV4cGFuZHMgdG8gaXRzZWxmXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NDIKK21zZ2lkICJNZXNzYWdlLUlEIHRvIGJlIHVzZWQgYXMgSW4tUmVwbHktVG8gZm9yIHRoZSBmaXJzdCBlbWFpbCAoaWYgYW55KT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTAwMCBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwMDgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVuYWJsZSB0byBleHRyYWN0IGEgdmFsaWQgYWRkcmVzcyBmcm9tOiAlc1xuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbcV0gW2RdIFtlXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDEyCittc2dpZCAiV2hhdCB0byBkbyB3aXRoIHRoaXMgYWRkcmVzcz8gKFtxXXVpdHxbZF1yb3B8W2VdZGl0KTogIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTMyOQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJDQSBwYXRoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0MTIKK21zZ2lkICIiCisiICAgIFRoZSBDYyBsaXN0IGFib3ZlIGhhcyBiZWVuIGV4cGFuZGVkIGJ5IGFkZGl0aW9uYWxcbiIKKyIgICAgYWRkcmVzc2VzIGZvdW5kIGluIHRoZSBwYXRjaCBjb21taXQgbWVzc2FnZS4gQnkgZGVmYXVsdFxuIgorIiAgICBzZW5kLWVtYWlsIHByb21wdHMgYmVmb3JlIHNlbmRpbmcgd2hlbmV2ZXIgdGhpcyBvY2N1cnMuXG4iCisiICAgIFRoaXMgYmVoYXZpb3IgaXMgY29udHJvbGxlZCBieSB0aGUgc2VuZGVtYWlsLmNvbmZpcm1cbiIKKyIgICAgY29uZmlndXJhdGlvbiBzZXR0aW5nLlxuIgorIlxuIgorIiAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgcnVuICdnaXQgc2VuZC1lbWFpbCAtLWhlbHAnLlxuIgorIiAgICBUbyByZXRhaW4gdGhlIGN1cnJlbnQgYmVoYXZpb3IsIGJ1dCBzcXVlbGNoIHRoaXMgbWVzc2FnZSxcbiIKKyIgICAgcnVuICdnaXQgY29uZmlnIC0tZ2xvYmFsIHNlbmRlbWFpbC5jb25maXJtIGF1dG8nLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0gW25dIFtlXSBbcV0gW2FdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0MjcKK21zZ2lkICJTZW5kIHRoaXMgZW1haWw/IChbeV1lc3xbbl1vfFtlXWRpdHxbcV11aXR8W2FdbGwpOiAiCittc2dzdHIgIs6dzrEgzrPOr869zrXOuSDOsc+Azr/Pg8+Ezr/Ou86uIM6xz4XPhM6/z40gz4TOv8+FIGVtYWlsOyAoW3ldZXN8W25db3xbZV1kaXR8W3FddWl0fFthXWxsKTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0MzAKK21zZ2lkICJTZW5kIHRoaXMgZW1haWwgcmVwbHkgcmVxdWlyZWQiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDU4Cittc2dpZCAiVGhlIHJlcXVpcmVkIFNNVFAgc2VydmVyIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MDUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1RBUlRUTFMhICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUxMCBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MTQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU1RBUlRUTFMgZmFpbGVkISAlcyIKK21zZ3N0ciAizqTOvyBTVEFSVFRMUyDOsc+Azq3PhM+Fz4fOtSEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUyMworbXNnaWQgIlVuYWJsZSB0byBpbml0aWFsaXplIFNNVFAgcHJvcGVybHkuIENoZWNrIGNvbmZpZyBhbmQgdXNlIC0tc210cC1kZWJ1Zy4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTQxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBzZW5kICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTQ0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRyeS1TZW50ICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTQ0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlbnQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDYKK21zZ2lkICJEcnktT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0NgorbXNnaWQgIk9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NTgKK21zZ2lkICJSZXN1bHQ6ICIKK21zZ3N0ciAizpHPgM6/z4TOrc67zrXPg868zrE6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTYxCittc2dpZCAiUmVzdWx0OiBPS1xuIgorbXNnc3RyICLOkc+Azr/PhM6tzrvOtc+DzrzOsTogT0tcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAizrTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDOvc6xIM6xzr3Ov865z4fPhM61zq8gz4TOvyDOsc+Bz4fOtc6vzr8gJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTYyNiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NDYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2MzIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyB0bzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2ODUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG5vbi1tYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzIwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihib2R5KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODMxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQ291bGQgbm90IGV4ZWN1dGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NDIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBmYWlsZWQgdG8gY2xvc2UgcGlwZSB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg3MgorbXNnaWQgImNhbm5vdCBzZW5kIG1lc3NhZ2UgYXMgN2JpdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4ODAKK21zZ2lkICJpbnZhbGlkIHRyYW5zZmVyIGVuY29kaW5nIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkyMSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzMgZ2l0LXNlbmQtZW1haWwucGVybDoxOTgzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkyNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk0MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyAlcyB3aXRoIGJhY2t1cCBzdWZmaXggJyVzJy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk0NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAlcz8gW3l8Tl06ICIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvcG8vZXMucG8gYi9wby9lcy5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTk0ZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vZXMucG8KQEAgLTAsMCArMSwyNTIwMCBAQAorIyBTcGFuaXNoIHRyYW5zbGF0aW9ucyBmb3IgR2l0LgorIyBDb3B5cmlnaHQgKEMpIDIwMTggQ2hyaXN0b3BoZXIgRGlheiBSaXZlcm9zIDxjaHJpc3RvcGhlci5kaWF6LnJpdkBnbWFpbC5jb20+CisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KKyMgQ2hyaXN0b3BoZXIgRGlheiBSaXZlcm9zIDxjaHJpc3RvcGhlci5kaWF6LnJpdkBnbWFpbC5jb20+LCAyMDE3LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMjAtMDMtMTEgMTU6MjYrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMjAtMDMtMTEgMjM6MTgtMDUwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogY2hyaXN0b3BoZXIuZGlhei5yaXZAZ21haWwuY29tXG4iCisiTGFuZ3VhZ2UtVGVhbTogQ29kZUxhYm9yYSA8Y29kZWxhYm9yYUBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2U6IGVzXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisiWC1HZW5lcmF0b3I6IFBvZWRpdCAyLjNcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpPyIKK21zZ3N0ciAiwr9BaGggKCVzKT8iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjUyMSBhZGQtaW50ZXJhY3RpdmUuYzo4MjIgc2VxdWVuY2VyLmM6MzEyNAorIzogc2VxdWVuY2VyLmM6MzU2MiBidWlsdGluL3JlYmFzZS5jOjg3NSBidWlsdGluL3JlYmFzZS5jOjE2ODcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA4NiBidWlsdGluL3JlYmFzZS5jOjIxMzAKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIMOtbmRpY2UiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjU3NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI2OQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyOTQKK21zZ2lkICJiaW5hcnkiCittc2dzdHIgImJpbmFyaW8iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYzNCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI3OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMzIKK21zZ2lkICJub3RoaW5nIgorbXNnc3RyICJuYWRhIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMTQKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzI5Cittc2dpZCAidW5jaGFuZ2VkIgorbXNnc3RyICJzaW4gY2FtYmlvcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjQzCittc2dpZCAiVXBkYXRlIgorbXNnc3RyICJBY3R1YWxpemFyIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2ODkgYWRkLWludGVyYWN0aXZlLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGFnZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIHBvbmVyIGVuIHN0YWdlICclcyciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY5NSBhZGQtaW50ZXJhY3RpdmUuYzo4ODQgc2VxdWVuY2VyLmM6MzMxNworIzogYnVpbHRpbi9yZWJhc2UuYzo4OTkKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgaW5kZXgiCittc2dzdHIgIm5vIHNlIHB1ZG8gZXNjcmliaXIgw61uZGljZSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6Njk4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJ1cGRhdGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidXBkYXRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICJhY3R1YWxpemFkYSAlZCBydXRhXG4iCittc2dzdHJbMV0gImFjdHVhbGl6YWRhcyAlZCBydXRhc1xuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3MTYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NzgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIm5vdGU6ICVzIGlzIHVudHJhY2tlZCBub3cuXG4iCittc2dzdHIgIm5vdGE6ICVzIG5vIGVzIHJhc3RyZWFkbyBhaG9yYS5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzIxIGFwcGx5LmM6NDExMCBidWlsdGluL2NoZWNrb3V0LmM6MjgxCisjOiBidWlsdGluL3Jlc2V0LmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIm1ha2VfY2FjaGVfZW50cnkgZmFsbMOzIHBhcmEgbGEgcnV0YSAnJXMnIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NTUKK21zZ2lkICJSZXZlcnQiCittc2dzdHIgIlJldmVydGlyIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NjcKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgSEVBRF57dHJlZX0iCittc2dzdHIgIm5vIHNlIHB1ZG8gYW5hbGl6YXIgSEVBRF57dHJlZX0iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjgwNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzMQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAicmV2ZXJ0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJyZXZlcnRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICJyZXZlcnRpZGEgJWQgcnV0YVxuIgorbXNnc3RyWzFdICJyZXZlcnRpZGFzICVkIHJ1dGFzXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg1NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyB1bnRyYWNrZWQgZmlsZXMuXG4iCittc2dzdHIgIk5vIGhheSBhcmNoaXZvcyBzaW4gcmFzdHJlYXIuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg2MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY4OQorbXNnaWQgIkFkZCB1bnRyYWNrZWQiCittc2dzdHIgIkFncmVnYXIgbm8gcmFzdHJlYWRvcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODg3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJhZGRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgImFkZGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gImFncmVnYWRhICVkIHJ1dGFcbiIKK21zZ3N0clsxXSAiYWdyZWdhZGFzICVkIHJ1dGFzXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkxNworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXMiCittc2dzdHIgImlnbm9yYW5kbyBsbyBubyBmdXNpb25hZG86ICVzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MjkgYWRkLXBhdGNoLmM6MTY3NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAiU29sbyBjYW1iaWFyb24gYXJjaGl2b3MgYmluYXJpb3MuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkzMSBhZGQtcGF0Y2guYzoxNjczIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjaGFuZ2VzLlxuIgorbXNnc3RyICJTaW4gY2FtYmlvcy5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3NgorbXNnaWQgIlBhdGNoIHVwZGF0ZSIKK21zZ3N0ciAiQWN0dWFsaXphY2nDs24gZGVsIHBhcmNoZSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTc0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc1NAorbXNnaWQgIlJldmlldyBkaWZmIgorbXNnc3RyICJSZXZpc2nDs24gZGUgIGRpZmYiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDIKK21zZ2lkICJzaG93IHBhdGhzIHdpdGggY2hhbmdlcyIKK21zZ3N0ciAibW9zdHJhciBydXRhcyBjb24gY2FtYmlvcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNAorbXNnaWQgImFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAiYWdyZWdhciBlc3RhZG8gZGVsIMOhcmJvbCBkZSB0cmFiYWpvIGFsIGNvbmp1bnRvIGRlIGNhbWJpb3MgZW4gc3RhZ2UiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDYKK21zZ2lkICJyZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvbiIKK21zZ3N0ciAicmV2ZXJ0aXIgY29uanVudG8gZGUgY2FtYmlvcyBlbiBzdGFnZSBhIGxhIHZlcnNpw7NuIGRlIEhFQUQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDgKK21zZ2lkICJwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHkiCittc2dzdHIgImVsZWdpciBodW5rcyB5IGFjdHVhbGl6YXIgZGUgZm9ybWEgc2VsZWN0aXZhIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEwCittc2dpZCAidmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgInZlciBkaWZmIGVudHJlIEhFQUQgZSBpbmRleCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAxMgorbXNnaWQgImFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAiIgorImFncmVnYXIgY29udGVuaWRvcyBkZSBhcmNoaXZvcyBzaW4gcmFzdHJlYXIgYWwgY29uanVudG8gZGUgY2FtYmlvcyBkZSBzdGFnZSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAyMCBhZGQtaW50ZXJhY3RpdmUuYzoxMDY5Cittc2dpZCAiUHJvbXB0IGhlbHA6IgorbXNnc3RyICJNb3N0cmFyIGF5dWRhOiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAyMgorbXNnaWQgInNlbGVjdCBhIHNpbmdsZSBpdGVtIgorbXNnc3RyICJzZWxlY2Npb25hIHVuIMO6bmljbyBvYmpldG8iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMjQKK21zZ2lkICJzZWxlY3QgYSByYW5nZSBvZiBpdGVtcyIKK21zZ3N0ciAic2VsZWNjaW9uYSB1biByYW5nbyBkZSBvYmpldG9zIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI2Cittc2dpZCAic2VsZWN0IG11bHRpcGxlIHJhbmdlcyIKK21zZ3N0ciAic2VsZWNjaW9uYSBtdWx0aXBsZXMgcmFuZ29zIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI4IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNzMKK21zZ2lkICJzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4IgorbXNnc3RyICJzZWxlY2Npb25hciBvYmpldG8gYmFzYWRvIGVuIHByZWZpam8gw7puaWNvIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDMwCittc2dpZCAidW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zIgorbXNnc3RyICJxdWl0YXIgb2JqZXRvcyBlc3BlY2lmaWNhZG9zIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDMyCittc2dpZCAiY2hvb3NlIGFsbCBpdGVtcyIKK21zZ3N0ciAiZXNjb2dlciB0b2RvcyBsb3Mgb2JqZXRvcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAzNAorbXNnaWQgIihlbXB0eSkgZmluaXNoIHNlbGVjdGluZyIKK21zZ3N0ciAiKHZhY8OtbykgZmluYWxpemFyIHNlbGVjY2nDs24iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNzEKK21zZ2lkICJzZWxlY3QgYSBudW1iZXJlZCBpdGVtIgorbXNnc3RyICJzZWxlY2Npb25hIHVuIG9iamV0byBudW1lcmFkbyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA3NQorbXNnaWQgIihlbXB0eSkgc2VsZWN0IG5vdGhpbmciCittc2dzdHIgIih2YWPDrW8pIHNlbGVjY2lvbmEgbmFkYSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA4MyBidWlsdGluL2NsZWFuLmM6ODIyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg1MQorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiBDb21hbmRvcyAqKioiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwODQgYnVpbHRpbi9jbGVhbi5jOjgyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NDgKK21zZ2lkICJXaGF0IG5vdyIKK21zZ3N0ciAiQWhvcmEgcXVlIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAic3RhZ2VkIgorbXNnc3RyICJyYXN0cmVhZG8iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMzYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJ1bnN0YWdlZCIKK21zZ3N0ciAibm8gcmFzdHJlYWRvIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGFwcGx5LmM6NDk2NyBhcHBseS5jOjQ5NzAgYnVpbHRpbi9hbS5jOjIyNTEKKyM6IGJ1aWx0aW4vYW0uYzoyMjU0IGJ1aWx0aW4vY2xvbmUuYzoxMjMgYnVpbHRpbi9mZXRjaC5jOjE0NAorIzogYnVpbHRpbi9tZXJnZS5jOjI3NCBidWlsdGluL3B1bGwuYzoxODkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTcKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTAyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA1CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE0OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInBhdGgiCittc2dzdHIgInJ1dGEiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExNDMKK21zZ2lkICJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAibm8gc2UgcHVkbyByZWZyZXNjYXIgZWwgaW5kZXgiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExNTcgYnVpbHRpbi9jbGVhbi5jOjc4NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnllLlxuIgorbXNnc3RyICJBZGnDs3MuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjMzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/Q2FtYmlvIGRlIG1vZG8gZGUgc3RhZ2UgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjM0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/QXBsaWNhciBzdGFnZSBhbCBib3JyYWRvIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzozNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzAKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9BcGxpY2FyIHN0YWdlIGEgZXN0ZSBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzozNworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJzdGFnaW5nLiIKK21zZ3N0ciAiIgorIlNpIGVsIHBhcmNoZSBhcGxpY2EgbGltcGlhbWVudGUsIGVsIGh1bmsgZWRpdGFkbyBzZXJhIG1hcmNhZG8gaW5tZWRpYXRhbWVudGUgIgorInBhcmEgZWwgw6FyZWEgZGUgc3RhZ2UuIgorCisjOiBhZGQtcGF0Y2guYzo0MAorbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIGFwbGljYXIgc3RhZ2UgYSBlc3RlIGh1bmtcbiIKKyJuIC0gbm8gYXBsaWNhciBzdGFnZSBhIGVzdGUgaHVua1xuIgorInEgLSBxdWl0OyBubyBhcGxpY2FyIHN0YWdlIGEgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcmVzdGFudGVzXG4iCisiYSAtIGFwbGljYXIgc3RhZ2UgYSBlc3RlIGh1bmsgeSBhIHRvZG9zIGxvcyBwb3N0ZXJpb3JlcyBlbiBlbCBhcmNoaXZvIFxuIgorImQgLSBubyBhcGxpY2FyIHN0YWdlIGEgZXN0ZSBodW5rIG8gYSBuaW5ndW5vIGRlIGxvcyBwb3N0ZXJpb3JlcyBlbiBlc3RlICIKKyJhcmNoaXZvXG4iCisKKyM6IGFkZC1wYXRjaC5jOjU0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMworIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/QXBsaWNhciBzdGFzaCBhbCBjYW1iaW8gZGUgbW9kbyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9BcGxpY2FyIHN0YXNoIGFsIGJvcnJhZG8gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjU2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLCv0FwbGljYXIgc3Rhc2ggYSBlc3RlIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjU4Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorInN0YXNoaW5nLiIKK21zZ3N0ciAiIgorIlNpIGVsIHBhcmNoZSBhcGxpY2EgbGltcGlhbWVudGUsIGVsIGh1bmsgZWRpdGFkbyBzZXJhIG1hcmNhZG8gaW5tZWRpYXRhbWVudGUgIgorInBhcmEgYXBsaWNhciBzdGFzaC4iCisKKyM6IGFkZC1wYXRjaC5jOjYxCittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gYXBsaWNhciBzdGFzaCBhIGVzdGUgaHVua1xuIgorIm4gLSBubyBhcGxpY2FyIHN0YXNoIGEgZXN0ZSBodW5rXG4iCisicSAtIHF1aXQ7IG5vIGFwbGljYXIgc3Rhc2ggYSBlc3RlIGh1bmsgbyBhIG5pbmd1bm8gZGUgbG9zIHJlc3RhbnRlc1xuIgorImEgLSBhcGxpY2FyIHN0YXNoIGEgZXN0ZSBodW5rIHkgYSB0b2RvcyBsb3MgcG9zdGVyaW9yZXMgZW4gZWwgYXJjaGl2b1xuIgorImQgLSBubyBhcGxpY2FyIHN0YXNoIGEgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcG9zdGVyaW9yZXMgZW4gZWwgYXJjaGl2b1xuIgorCisjOiBhZGQtcGF0Y2guYzo3NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/U2FjYXIgY2FtYmlvIGRlIG1vZG8gZGVsIHN0YWdlIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzo3OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzkKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/U2FjYXIgYm9ycmFkbyBkZWwgc3RhZ2UgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjc5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/U2FjYXIgZXN0ZSBodW5rIGRlbCBzdGFnZSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6ODEKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisidW5zdGFnaW5nLiIKK21zZ3N0ciAiIgorIlNpIGVsIHBhcmNoZSBhcGxpY2EgbGltcGlhbWVudGUsIGVsIGh1bmsgZWRpdGFkbyBzZXJhIG1hcmNhZG8gaW5tZWRpYXRhbWVudGUgIgorInBhcmEgc2FjYXIgZGVsIMOhcmVhIGRlIHN0YWdlLiIKKworIzogYWRkLXBhdGNoLmM6ODQKK21zZ2lkICIiCisieSAtIHVuc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSB1bnN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gc2FjYXIgZGVzZGUgaHVuayBkZWwgw6FyZWEgZGUgc3RhZ2VcbiIKKyJuIC0gbm8gc2FjYXIgZXN0ZSBodW5rIGRlbCBhcmVhIGRlIHN0YWdlXG4iCisicSAtIHF1aXQ7IG5vIHNhY2FyIGRlbCBhcmVhIGRlIHN0YWdlIGVzdGUgaHVuayBvIG5pbmd1bm8gZGUgbG9zIHJlc3RhbnRlc1xuIgorImEgLSBzYWNhciBkZWwgYXJlYSBkZSBzdGFnZSBlc3RlIGh1bmsgeSB0b2RvcyBsb3MgcG9zdGVyaW9yZXMgZW4gZWwgYXJjaGl2b1xuIgorImQgLSBubyBzYWNhciBkZWwgYXJlYSBkZSBzdGFnZSBlc3RlIGh1bmsgbyBuaW5ndW5vIGRlIGxvcyBwb3N0ZXJpb3JlcyBlbiBlbCAiCisiYXJjaGl2b1xuIgorCisjOiBhZGQtcGF0Y2guYzo5OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLCv0FwbGljYXIgY2FtYmlvIGRlIG1vZG8gYWwgw61uZGljZSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTAwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/QXBsaWNhciBib3JyYWRvIGFsIMOtbmRpY2UgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9BcGxpY2FyIGVzdGUgaHVuayBhbCDDrW5kaWNlIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMDMgYWRkLXBhdGNoLmM6MTY4IGFkZC1wYXRjaC5jOjIxMQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJhcHBseWluZy4iCittc2dzdHIgIiIKKyJTaSBlbCBwYXJjaGUgYXBsaWNhIGRlIGZvcm1hIGxpbXBpYSwgZWwgaHVuayBlZGl0YWRvIHNlcmEgbWFyY2FkbyAiCisiaW5tZWRpYXRhbWVudGUgcGFyYSBhcGxpY2FyLiIKKworIzogYWRkLXBhdGNoLmM6MTA2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gYXBsaWNhciBlc3RlIGh1bmsgYWwgw61uZGljZVxuIgorIm4gLSBubyBhcGxpY2FyIGVzdGUgaHVuayBhbCDDrW5kaWNlXG4iCisicSAtIHF1aXQ7IG5vIGFwbGljYXIgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcmVzdGFudGVzXG4iCisiYSAtIGFwbGljYXIgZXN0ZSBodW5rIHkgdG9kb3MgbG9zIHBvc3RlcmlvcmVzIGVuIGVsIGFyY2hpdm9cbiIKKyJkIC0gbm8gYXBsaWNhciBlc3RlIGh1bmtvIG5pbmd1bm8gZGUgbG9zIHBvc3RlcmlvcmVzIGVuIGVsIGFyY2hpdm9cbiIKKworIzogYWRkLXBhdGNoLmM6MTIxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYzCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/RGVzY2FydGFyIGNhbWJpbyBkZSBtb2RvIGRlbCDDoXJib2wgZGUgdHJhYmFqbyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTIyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0OQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/RGVzY2FydGFyIGJvcnJhZG8gZGVsIMOhcmJvbCBkZSB0cmFiYWpvIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUwCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/RGVzY2FydGFyIGVzdGUgaHVuayBkZWwgw6FyYm9sIGRlIHRyYWJham8gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyNSBhZGQtcGF0Y2guYzoxNDcgYWRkLXBhdGNoLmM6MTkwCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorImRpc2NhcmRpbmcuIgorbXNnc3RyICIiCisiU2kgZWwgcGFyY2hlIGFwbGljYSBkZSBmb3JtYSBsaW1waWEsIGVsIGh1bmsgZWRpdGFkbyBzZXJhIG1hcmNhZG8gIgorImlubWVkaWF0YW1lbnRlIHBhcmEgZGVzY2FydGUuIgorCisjOiBhZGQtcGF0Y2guYzoxMjggYWRkLXBhdGNoLmM6MTkzCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkgLSBkZXNjYXJ0YXIgZXN0ZSBodW5rIGRlbCDDoXJib2wgZGUgdHJhYmFqb1xuIgorIm4gLSBubyBkZXNjYXJ0YXIgZXN0ZSBodW5rIGRlbCDDoXJib2wgZGUgdHJhYmFqb1xuIgorInEgLSBxdWl0OyBubyBkZXNjYXJ0YXIgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcXVlIHJlc3RhbnRlc1xuIgorImEgLSBkZXNjYXJ0YXIgZXN0ZSBodW5rIHkgdG9kb3MgbG9zIHBvc3RlcmlvcmVzIGVuIGVzdGUgYXJjaGl2b1xuIgorImQgLSBubyBkZXNjYXJ0YXIgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcG9zdGVyaW9yZXMgZW4gZWwgYXJjaGl2b1xuIgorCisjOiBhZGQtcGF0Y2guYzoxNDMgYWRkLXBhdGNoLmM6MTg2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1MworIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIsK/RGVzY2FydGFyIGNhbWJpbyBkZSBtb2RvIGRlbCDDrW5kaWNlIHkgZWwgw6FyYm9sIGRlIHRyYWJham8gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE0NCBhZGQtcGF0Y2guYzoxODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLCv0Rlc2NhcnRhciBib3JyYWRvIGRlbCDDrW5kaWNlIHkgZWwgw6FyYm9sIGRlIHRyYWJham8gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE0NSBhZGQtcGF0Y2guYzoxODggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIsK/RGVzY2FydGFyIGVzdGUgaHVuayBkZWwgw61uZGljZSB5IGVsIMOhcmJvbCBkZSB0cmFiYWpvIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNTAKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gZGVzY2FydGFyIGVzdGUgaHVuayBkZWwgw61uZGljZSB5IGVsIMOhcmJvbCBkZSB0cmFiYWpvXG4iCisibiAtIG5vIGRlc2NhcnRhciBlc3RlIGh1bmsgZGVsIMOtbmRpY2UgbmkgZWwgw6FyYm9sIGRlIHRyYWJham9cbiIKKyJxIC0gcXVpdDsgbm8gZGVzY2FydGFyIGVzdGUgaHVuayBvIG5pbmd1bm8gZGUgbG9zIHF1ZSBxdWVkYW5cbiIKKyJhIC0gZGVzY2FydGFyIGVzdGUgaHVuayB5IHRvZG9zIGxvcyBwb3N0ZXJpb3JlcyBlbiBlc3RlIGFyY2hpdm9cbiIKKyJkIC0gbm8gZGVzY2FydGFyIGVzdGUgaHVuayBvIG5pbmd1bm8gcG9zdGVyaW9yIGVuIGVsIGFyY2hpdm9cbiIKKworIzogYWRkLXBhdGNoLmM6MTY0IGFkZC1wYXRjaC5jOjIwNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIsK/QXBsaWNhciBjYW1iaW8gZGUgbW9kbyBwYXJhIGVsIMOtbmRpY2UgeSBlbCDDoXJib2wgZGUgdHJhYmFqbyBbeSxuLHEsYSxkIgorIiVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE2NSBhZGQtcGF0Y2guYzoyMDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU5CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/QXBsaWNhciBib3JyYWRvIGFsIMOtbmRpY2UgeSBhbCDDoXJib2wgZGUgdHJhYmFqbyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTY2IGFkZC1wYXRjaC5jOjIwOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjAKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/QXBsaWNhciBlc3RlIGh1bmsgYWwgw61uZGljZSB5IMOhcmJvbCBkZSB0cmFiYWpvIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE3MQorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gYXBsaWNhciBlc3RlIGh1bmsgYWwgw61uZGljZSB5IGFsIMOhcmJvbCBkZSB0cmFiYWpvXG4iCisibiAtIG5vIGFwbGljYXIgZXN0ZSBodW5rIGFsIMOtbmRpY2UgeSBhbCDDoXJib2wgZGUgdHJhYmFqb1xuIgorInEgLSBxdWl0OyAgbm8gYXBsaWNhciBlc3RlIGh1bmsgbyBuaW5ndW5vIGRlIGxvcyByZXN0YW50ZXNcbiIKKyJhIC0gYXBsaWNhciBlc3RlIGh1bmsgeSB0b2RvcyBsb3MgcG9zdGVyaW9yZXMgZW4gZWwgYXJjaGl2b1xuIgorImQgLSBubyBhcGxpY2FyIGVzdGUgaHVuayBvIG5pbmd1bm8gZGUgbG9zIHNpZ3VpZW50ZXMgZW4gZXN0ZSBhcmNoaXZvXG4iCisKKyM6IGFkZC1wYXRjaC5jOjIxNAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIGFwbGljYXIgZXN0ZSBodW5rIGFsIMOtbmRpY2UgeSBhbCDDoXJib2wgZGUgdHJhYmFqb1xuIgorIm4gLSBubyBhcGxpY2FyIGVzdGUgaHVuayBhbCDDrW5kaWNlIHkgYWwgw6FyYm9sIGRlIHRyYWJham9cbiIKKyJxIC0gcXVpdDsgIG5vIGFwbGljYXIgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcmVzdGFudGVzXG4iCisiYSAtIGFwbGljYXIgZXN0ZSBodW5rIHkgdG9kb3MgbG9zIHBvc3RlcmlvcmVzIGVuIGVsIGFyY2hpdm9cbiIKKyJkIC0gbm8gYXBsaWNhciBlc3RlIGh1bmsgbyBuaW5ndW5vIGRlIGxvcyBzaWd1aWVudGVzIGVuIGVzdGUgYXJjaGl2b1xuIgorCisjOiBhZGQtcGF0Y2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYW5hbGl6YXIgaHVuayBoZWFkZXIgJyUuKnMnIgorCisjOiBhZGQtcGF0Y2guYzozMzcgYWRkLXBhdGNoLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYW5hbGl6YXIgaHVuayBoZWFkZXIgJyUuKnMnIgorCisjOiBhZGQtcGF0Y2guYzozOTUKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZGlmZiIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYW5hbGl6YXIgZGlmZiIKKworIzogYWRkLXBhdGNoLmM6NDE0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAibm8gc2UgcHVkbyBhbmFsaXphciBkaWZmIGEgY29sb3JlcyIKKworIzogYWRkLXBhdGNoLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGVqZWN1dGFyICclcyciCisKKyM6IGFkZC1wYXRjaC5jOjU4NworbXNnaWQgIm1pc21hdGNoZWQgb3V0cHV0IGZyb20gaW50ZXJhY3RpdmUuZGlmZkZpbHRlciIKK21zZ3N0ciAib3V0cHV0IGRlIGludGVyYWN0aXZlLmRpZmZGaWx0ZXIgbm8gY29uY3VlcmRhIgorCisjOiBhZGQtcGF0Y2guYzo1ODgKK21zZ2lkICIiCisiWW91ciBmaWx0ZXIgbXVzdCBtYWludGFpbiBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2VcbiIKKyJiZXR3ZWVuIGl0cyBpbnB1dCBhbmQgb3V0cHV0IGxpbmVzLiIKK21zZ3N0ciAiIgorIlR1IGZpbHRybyB0aWVuZSBxdWUgbWFudGVuZXIgY29ycmVzcG9uZGVuY2lhIGRlIHVubyBhIHVub1xuIgorImVudHJlIGxhcyBsw61uZWFzIGRlIGVudHJhZGEgeSBzYWxpZGEuIgorCisjOiBhZGQtcGF0Y2guYzo3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIGNvbnRleHQgbGluZSAjJWQgaW5cbiIKKyIlLipzIgorbXNnc3RyICIiCisic2UgZXNwZXJhYmEgbMOtbmVhIGRlIGNvbnRleHRvICMlZCBlblxuIgorIiUuKnMiCisKKyM6IGFkZC1wYXRjaC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaHVua3MgZG8gbm90IG92ZXJsYXA6XG4iCisiJS4qc1xuIgorIlx0ZG9lcyBub3QgZW5kIHdpdGg6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorImh1bmtzIG5vIGhhY2VuIG92ZXJsYXA6XG4iCisiJS4qc1xuIgorIlx0bm8gYWNhYmEgY29uOlxuIgorIiUuKnMiCisKKyM6IGFkZC1wYXRjaC5jOjEwNTIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTEyCittc2dpZCAiTWFudWFsIGh1bmsgZWRpdCBtb2RlIC0tIHNlZSBib3R0b20gZm9yIGEgcXVpY2sgZ3VpZGUuXG4iCittc2dzdHIgIk1vZG8gZGUgZWRpY2nDs24gbWFudWFsIGRlIGh1bmsgLS0gdmVhIGFiYWpvIHBhcmEgdW5hIGd1w61hIHLDoXBpZGEuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjEwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlYyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKyItLS1cbiIKKyJQYXJhIGVsaW1pbmFyICclYycgbMOtbmVhcywgaGFnYSBkZSBlbGxhcyBsw61uZWFzICAnICcgIChjb250ZXh0bykuXG4iCisiUGFyYSBlbGltaW5hciAnJWMnIGzDrW5lYXMsIGLDs3JyZWxhcy5cbiIKKyJMaW5lYXMgY29tZW56YW5kbyBjb24gICVjIHNlcsOhbiBlbGltaW5hZGFzLlxuIgorCisjLiBUUkFOU0xBVE9SUzogJ2l0JyByZWZlcnMgdG8gdGhlIHBhdGNoIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgbWVzc2FnZXMuCisjOiBhZGQtcGF0Y2guYzoxMDcwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTEyNgorbXNnaWQgIiIKKyJJZiBpdCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCB5b3Ugd2lsbCBiZSBnaXZlbiBhbiBvcHBvcnR1bml0eSB0b1xuIgorImVkaXQgYWdhaW4uICBJZiBhbGwgbGluZXMgb2YgdGhlIGh1bmsgYXJlIHJlbW92ZWQsIHRoZW4gdGhlIGVkaXQgaXNcbiIKKyJhYm9ydGVkIGFuZCB0aGUgaHVuayBpcyBsZWZ0IHVuY2hhbmdlZC5cbiIKK21zZ3N0ciAiIgorIlNpIGVzdG8gbm8gYXBsaWNhIGRlIG1hbmVyYSBsaW1waWEsIHNlIHRlIGRhIGxhIG9wb3J0dW5pZGFkIGRlIFxuIgorImVkaXRhciBudWV2YW1lbnRlLiBTaSB0b2RhcyBsYXMgbMOtbmVhcyBkZWwgaHVuayBzb24gZWxpbWluYWRhcywgZW50b25jZXMgXG4iCisibGEgZWRpY2nDs24gZXMgYWJvcnRhZGEgeSBlbCBodW5rIHF1ZWRhIHNpbiBjYW1iaW9zLlxuIgorCisjOiBhZGQtcGF0Y2guYzoxMTAzCittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyIgorbXNnc3RyICJubyBzZSBwdWVkZSBhbmFsaXphciBodW5rIGhlYWRlciIKKworIzogYWRkLXBhdGNoLmM6MTE0OAorbXNnaWQgIidnaXQgYXBwbHkgLS1jYWNoZWQnIGZhaWxlZCIKK21zZ3N0ciAiZmFsbMOzICdnaXQgYXBwbHkgLS1jYWNoZWQnIgorCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIy4KKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIzogYWRkLXBhdGNoLmM6MTIxOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyMzkKK21zZ2lkICIiCisiWW91ciBlZGl0ZWQgaHVuayBkb2VzIG5vdCBhcHBseS4gRWRpdCBhZ2FpbiAoc2F5aW5nIFwibm9cIiBkaXNjYXJkcyEpIFt5L25dPyAiCittc2dzdHIgIiIKKyJUdSBodW5rIGVkaXRhZG8gbm8gYXBsaWNhLiDCv0VkaXRhciBudWV2YW1lbnRlICjCoWRlY2lyIFwibm9cIiBkZXNjYXJ0YSEpIFt5LyIKKyJuXT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjYxCittc2dpZCAiVGhlIHNlbGVjdGVkIGh1bmtzIGRvIG5vdCBhcHBseSB0byB0aGUgaW5kZXghIgorbXNnc3RyICLCoUxvcyBodW5rcyBzZWxlY2Npb25hZG9zIG5vIGFwbGljYW4gYWwgw61uZGljZSEiCisKKyM6IGFkZC1wYXRjaC5jOjEyNjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQzCittc2dpZCAiQXBwbHkgdGhlbSB0byB0aGUgd29ya3RyZWUgYW55d2F5PyAiCittc2dzdHIgIsK/QXBsaWNhcmxvcyBhbCDDoXJib2wgZGUgdHJhYmFqbyBkZSB0b2RhcyBtYW5lcmFzPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyNjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQ2Cittc2dpZCAiTm90aGluZyB3YXMgYXBwbGllZC5cbiIKK21zZ3N0ciAiTmFkYSBmdWUgYXBsaWNhZG8uXG4iCisKKyM6IGFkZC1wYXRjaC5jOjEzMjYKK21zZ2lkICIiCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJqIC0gZGVqYSBlc3RlIGh1bmsgc2luIGRlY2lkaXIsIHZlciBlbCBzaWd1aWVudGUgaHVuayBzaW4gZGVjaXNpw7NuXG4iCisiSiAtIGRlamEgZXN0ZSBodW5rIHNpbiBkZWNpZGlyLCB2ZXIgc2lndWllbnRlIGh1bmtcbiIKKyJrIC0gZGVqYSBlc3RlIGh1bmsgc2luIGRlY2lkaXIsIHZlciBodW5rIHByZXZpbyBzaW4gZGVjaWRpclxuIgorIksgLSBkZWphIGVzdGUgaHVuayBzaW4gZGVjaWRpciwgdmVyIGh1bmsgYW50ZXJpb3JcbiIKKyJnIC0gc2VsZWNjaW9uYSB1biBodW5rIGEgZMOzbmRlIGlyXG4iCisiLyAtIGJ1c2NhciB1biBodW5rIHF1ZSBjdW1wbGEgY29uIGVsIHJlZ2V4IGRhZG9cbiIKKyJzIC0gc2VwYXJhciBlbCBodW5rIGFjdHVhbCBlbiBtw6FzIHBlcXVlw7Fvc1xuIgorImUgLSBlZGl0YXIgbWFudWFsbWVudGUgZWwgaHVuayBhY3R1YWxcbiIKKyI/IC0gaW1wcmltaXIgYXl1ZGFcbiIKKworIzogYWRkLXBhdGNoLmM6MTQ0NyBhZGQtcGF0Y2guYzoxNDU3Cittc2dpZCAiTm8gcHJldmlvdXMgaHVuayIKK21zZ3N0ciAiTm8gZWwgYW50ZXJpb3IgaHVuayIKKworIzogYWRkLXBhdGNoLmM6MTQ1MiBhZGQtcGF0Y2guYzoxNDYyCittc2dpZCAiTm8gbmV4dCBodW5rIgorbXNnc3RyICJObyBlbCBzaWd1aWVudGUgaHVuayIKKworIzogYWRkLXBhdGNoLmM6MTQ2OAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG8iCittc2dzdHIgIk5vIGhheSBtw6FzIHBlZGF6b3MgcGFyYSBlbCBpciIKKworIzogYWRkLXBhdGNoLmM6MTQ3OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzcKK21zZ2lkICJnbyB0byB3aGljaCBodW5rICg8cmV0PiB0byBzZWUgbW9yZSk/ICIKK21zZ3N0ciAiwr9hIHF1ZSBodW5rIGlyICg8ZW50ZXI+IHBhcmEgdmVyIG3DoXMpPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE0ODAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc5Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuaz8gIgorbXNnc3RyICLCv2EgcXVlIGh1bmsgaXI/ICIKKworIzogYWRkLXBhdGNoLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJyIKK21zZ3N0ciAiTnVtZXJvIGludsOhbGlkbzogJyVzJyIKKworIzogYWRkLXBhdGNoLmM6MTQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS4iCittc2dpZF9wbHVyYWwgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS4iCittc2dzdHJbMF0gIkxvIHNpZW50bywgc29sbyAlZCBodW5rIGRpc3BvbmlibGUuIgorbXNnc3RyWzFdICJMbyBzaWVudG8sIHNvbG8gJWQgaHVua3MgZGlzcG9uaWJsZXMuIgorCisjOiBhZGQtcGF0Y2guYzoxNTA1Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoIgorbXNnc3RyICJObyBoYXkgbcOhcyBwZWRhem9zIHBhcmEgYnVzY2FyIgorCisjOiBhZGQtcGF0Y2guYzoxNTExIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYyMworbXNnaWQgInNlYXJjaCBmb3IgcmVnZXg/ICIKK21zZ3N0ciAiwr9idXNjYXIgcGFyYSByZWdleHA/ICIKKworIzogYWRkLXBhdGNoLmM6MTUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAlczogJXMiCittc2dzdHIgIlJlZ2V4cCBwYXJhIGxhIGLDunNxdWVkYSBtYWwgZm9ybWFkbyAlczogJXMiCisKKyM6IGFkZC1wYXRjaC5jOjE1NDMKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4iCittc2dzdHIgIk5vIGhheSBodW5rcyBxdWUgY29uY3VlcmRlbiBjb24gZWwgcGF0csOzbiBlbnRyZWdhZG8uIgorCisjOiBhZGQtcGF0Y2guYzoxNTUwCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmsiCittc2dzdHIgIlBlcmTDs24sIG5vIHNlIHB1ZWRlIGRpdmlkaXIgZXN0ZSBwZWRhem8iCisKKyM6IGFkZC1wYXRjaC5jOjE1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rcy4iCittc2dzdHIgIkNvcnRhciBlbiAlZCBodW5rLiIKKworIzogYWRkLXBhdGNoLmM6MTU1OAorbXNnaWQgIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmsiCittc2dzdHIgIlBlcmTDs24sIG5vIHNlIHB1ZWRlIGVkaXRhciBlc3RlIHBlZGF6byIKKworIzogYWRkLXBhdGNoLmM6MTYwOQorbXNnaWQgIidnaXQgYXBwbHknIGZhaWxlZCIKK21zZ3N0ciAiZmFsbMOzICdnaXQgYXBwbHknIgorCisjOiBhZHZpY2UuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNoaW50OiAlLipzJXNcbiIKK21zZ3N0ciAiJXNheXVkYTogJS4qcyVzXG4iCisKKyM6IGFkdmljZS5jOjE2OAorbXNnaWQgIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIk5vIGVzIHBvc2libGUgZWplY3V0YXIgY2hlcnJ5LXBpY2tpbmcgcG9ycXVlIHRpZW5lcyBhcmNoaXZvcyBzaW4gZnVzaW9uYXIuIgorCisjOiBhZHZpY2UuYzoxNzAKK21zZ2lkICJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiTm8gZXMgcG9zaWJsZSByZWFsaXphciB1biBjb21taXQgcG9ycXVlIHRpZW5lcyBhcmNoaXZvcyBzaW4gZnVzaW9uYXIuIgorCisjOiBhZHZpY2UuYzoxNzIKK21zZ2lkICJNZXJnaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiTm8gZXMgcG9zaWJsZSBoYWNlciBtZXJnZSBwb3JxdWUgdGllbmVzIGFyY2hpdm9zIHNpbiBmdXNpb25hci4iCisKKyM6IGFkdmljZS5jOjE3NAorbXNnaWQgIlB1bGxpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICJObyBlcyBwb3NpYmxlIGhhY2VyIHB1bGwgcG9ycXVlIHRpZW5lcyBhcmNoaXZvcyBzaW4gZnVzaW9uYXIuIgorCisjOiBhZHZpY2UuYzoxNzYKK21zZ2lkICJSZXZlcnRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICJObyBlcyBwb3NpYmxlIHJldmVydGlyIHBvcnF1ZSB0aWVuZXMgYXJjaGl2b3Mgc2luIGZ1c2lvbmFyLiIKKworIzogYWR2aWNlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkl0IGlzIG5vdCBwb3NzaWJsZSB0byAlcyBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiTm8gZXMgcG9zaWJsZSAlcyBwb3JxdWUgdGllbmVzIGFyY2hpdm9zIHNpbiBmdXNpb25hci4iCisKKyM6IGFkdmljZS5jOjE4NgorbXNnaWQgIiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCittc2dzdHIgIiIKKyJDb3Jyw61nZWxvcyBlbiBlbCDDoXJib2wgZGUgdHJhYmFqbyB5IGVudG9uY2VzIHVzYSAnZ2l0IGFkZC9ybSA8YXJjaGl2bz4nLFxuIgorImNvbW8gc2VhIGFwcm9waWFkbywgcGFyYSBtYXJjYXIgbGEgcmVzb2x1Y2nDs24geSByZWFsaXphciB1biBjb21taXQuIgorCisjOiBhZHZpY2UuYzoxOTQKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgYW4gdW5yZXNvbHZlZCBjb25mbGljdC4iCittc2dzdHIgIlNhbGllbmRvIHBvcnF1ZSBleGlzdGUgdW4gY29uZmxpY3RvIHNpbiByZXNvbHZlci4iCisKKyM6IGFkdmljZS5jOjE5OSBidWlsdGluL21lcmdlLmM6MTMzNQorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiTm8gaGFzIGNvbmNsdWlkbyB0dSBmdXNpw7NuIChNRVJHRV9IRUFEIGV4aXN0ZSkuIgorCisjOiBhZHZpY2UuYzoyMDEKK21zZ2lkICJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIG1lcmdpbmcuIgorbXNnc3RyICJQb3IgZmF2b3IsIHJlYWxpemEgdW4gY29tbWl0IGFudGVzIGRlIGZ1c2lvbmFyLiIKKworIzogYWR2aWNlLmM6MjAyCittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIHVuZmluaXNoZWQgbWVyZ2UuIgorbXNnc3RyICJTYWxpZW5kbyBwb3IgdW5hIGZ1c2nDs24gaW5jb25jbHVzYS4iCisKKyM6IGFkdmljZS5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogc3dpdGNoaW5nIHRvICclcycuXG4iCisiXG4iCisiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisiY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpc1xuIgorInN0YXRlIHdpdGhvdXQgaW1wYWN0aW5nIGFueSBicmFuY2hlcyBieSBzd2l0Y2hpbmcgYmFjayB0byBhIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKyJkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYyB3aXRoIHRoZSBzd2l0Y2ggY29tbWFuZC4gRXhhbXBsZTpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPG5ldy1icmFuY2gtbmFtZT5cbiIKKyJcbiIKKyJPciB1bmRvIHRoaXMgb3BlcmF0aW9uIHdpdGg6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyJUdXJuIG9mZiB0aGlzIGFkdmljZSBieSBzZXR0aW5nIGNvbmZpZyB2YXJpYWJsZSBhZHZpY2UuZGV0YWNoZWRIZWFkIHRvICIKKyJmYWxzZVxuIgorIlxuIgorbXNnc3RyICIiCisiTm90YTogY2FtYmlhbmRvIGEgJyVzJy5cbiIKKyJcbiIKKyJUZSBlbmN1ZW50cmFzIGVuIGVzdGFkbyAnZGV0YWNoZWQgSEVBRCcuIFB1ZWRlcyByZXZpc2FyIHBvciBhcXXDrSwgaGFjZXJcbiIKKyJjYW1iaW9zIGV4cGVyaW1lbnRhbGVzIHkgaGFjZXIgY29tbWl0cywgeSBwdWVkZXMgZGVzY2FydGFyIGN1YWxxdWllclxuIgorImNvbW1pdCBxdWUgaGF5YXMgaGVjaG8gZW4gZXN0ZSBlc3RhZG8gc2luIGltcGFjdGFyIGEgdHUgcmFtYSByZWFsaXphbmRvXG4iCisib3RybyBjaGVja291dC5cbiIKKyJcbiIKKyJTaSBxdWllcmVzIGNyZWFyIHVuYSBudWV2YSByYW1hIHBhcmEgbWFudGVuZXIgbG9zIGNvbW1pdHMgcXVlIGhhcyBjcmVhZG8sXG4iCisicHVlZGVzIGhhY2VybG8gKGFob3JhIG8gZGVzcHXDqXMpIHVzYW5kbyAtYyBjb24gZWwgY29tYW5kbyBjaGVja291dC4gIgorIkVqZW1wbG86XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jIDxub21icmUtZGUtbnVldmEtcmFtYT5cbiIKKyJcbiIKKyJPIGRlc2hhY2VyIGxhIG9wZXJhY2nDs24gY29uOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtXG4iCisiXG4iCisiRGVzYWN0aXZhIGVzdGUgYXZpc28gcG9uaWVuZG8gbGEgdmFyaWFibGUgZGUgY29uZmlnIGFkdmljZS5kZXRhY2hlZEhlYWQgZW4gIgorImZhbHNlXG4iCisiXG4iCisKKyM6IGFsaWFzLmM6NTAKK21zZ2lkICJjbWRsaW5lIGVuZHMgd2l0aCBcXCIKK21zZ3N0ciAiY21kbGluZSB0ZXJtaW5hIGVuIFxcIgorCisjOiBhbGlhcy5jOjUxCittc2dpZCAidW5jbG9zZWQgcXVvdGUiCittc2dzdHIgImNvbWlsbGFzIGluY29tcGxldGFzIgorCisjOiBhcHBseS5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJvcGNpw7NuIGRlIGVzcGFjaW9zIGVuIGJsYW5jbyBubyByZWNvbm9jaWRhICclcyciCisKKyM6IGFwcGx5LmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJvcGNpw7NuIGRlIGlnbm9yYXIgZXNwYWNpb3MgZW4gYmxhbmNvIG5vIHJlY29ub2NpZGEgJyVzJyIKKworIzogYXBwbHkuYzoxMzUKK21zZ2lkICItLXJlamVjdCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1yZWplY3QgeSAtLTN3YXkgbm8gc2UgcHVlZGVuIHV0aWxpemFyIGp1bnRhcy4iCisKKyM6IGFwcGx5LmM6MTM3Cittc2dpZCAiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tY2FjaGVkIHkgLS0zd2F5IG5vIHNlIHB1ZWRlbiB1dGlsaXphciBqdW50YXMuIgorCisjOiBhcHBseS5jOjE0MAorbXNnaWQgIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS0zd2F5IGVzdMOhIGZ1ZXJhIGRlIHVuIHJlcG9zaXRvcmlvIgorCisjOiBhcHBseS5jOjE1MQorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0taW5kZXggZXN0w6EgZnVlcmEgZGUgdW4gcmVwb3NpdG9yaW8iCisKKyM6IGFwcGx5LmM6MTU0Cittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tY2FjaGVkIGVzdMOhIGZ1ZXJhIGRlIHVuIHJlcG9zaXRvcmlvIgorCisjOiBhcHBseS5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICJObyBzZSBwdWVkZSBwcmVwYXJhciB1bmEgbWFyY2EgZGUgdGllbXBvIHBhcmEgbGEgZXhwcmVzacOzbiByZWd1bGFyICVzIgorCisjOiBhcHBseS5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgInJlZ2V4ZWMgZGV2b2x2acOzICVkIHBhcmEgbGEgZW50cmFkYTogJXMiCisKKyM6IGFwcGx5LmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIiIKKyJubyBzZSBwdWVkZSBlbmNvbnRyYXIgZWwgbm9tYnJlIGRlbCBhcmNoaXZvIGVuIGVsIHBhcmNoZSBlbiBsYSBsw61uZWEgJWQiCisKKyM6IGFwcGx5LmM6OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTogZ2l0LWRpZmYgZXJyw7NuZW8gLSBzZSBlc3BlcmFiYSAvZGV2L251bGwsIHNlIGVuY29udHLDsyAlcyBlbiAiCisibGFsw61uZWEgJWQiCisKKyM6IGFwcGx5LmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5OiBnaXQtZGlmZiBlcnLDs25lbyAtIG51ZXZvIG5vbWJyZSBkZSBhcmNoaXZvIGluY29uc2lzdGVudGUgZW4gIgorImxhbMOtbmVhICVkIgorCisjOiBhcHBseS5jOjkyOQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTogZ2l0LWRpZmYgZXJyw7NuZW8gLSB2aWVqbyBub21icmUgZGUgYXJjaGl2byBpbmNvbnNpc3RlbnRlIGVuICIKKyJsYWzDrW5lYSAlZCIKKworIzogYXBwbHkuYzo5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBnaXQtZGlmZiBlcnLDs25lbyAtIHNlIGVzcGVyYWJhIC9kZXYvbnVsbCBlbiBsYSBsw61uZWEgJWQiCisKKyM6IGFwcGx5LmM6OTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBvbiBsaW5lICVkOiAlcyIKK21zZ3N0ciAibW9kbyBpbnbDoWxpZG8gZW4gbGEgbMOtbmVhICVkOiAlcyIKKworIzogYXBwbHkuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgImluY29uc2lzdGVudCBoZWFkZXIgbGluZXMgJWQgYW5kICVkIgorbXNnc3RyICJoZWFkZXIgaW5jb25zaXN0ZW50ZSBlbiBsYXMgbMOtbmVhcyAlZCB5ICVkIgorCisjOiBhcHBseS5jOjEzNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAiIgorImFsIGhlYWRlciBkZSBnaXQgZGlmZiBjYXJlY2UgZGUgaW5mb3JtYWNpw7NuIGRlbCBub21icmUgZGVsIGFyY2hpdm8gJWQgY3VhbmRvICIKKyJsbyBlbGltaW5hIGRlIGxhIHJ1dGEgcHJpbmNpcGFsIGNvbXBvbmVudGUgKGzDrW5lYSAlZCkiCittc2dzdHJbMV0gIiIKKyJsb3MgaGVhZGVycyBkZSBnaXQgZGlmZiBjYXJlY2VuIGRlIGluZm9ybWFjacOzbiBkZSBsb3Mgbm9tYnJlcyBkZSBsb3MgIgorImFyY2hpdm9zICVkIGN1YW5kbyBsb3MgZWxpbWluYW4gZGUgbGEgcnV0YSBwcmluY2lwYWwgY29tcG9uZW50ZXMgKGzDrW5lYSAlZCkiCisKKyM6IGFwcGx5LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gKGxpbmUgJWQpIgorbXNnc3RyICIiCisibGEgY2FiZWNlcmEgZGUgZ2l0IGRpZmYgY2FyZWNlIGRlIGluZm9ybWFjacOzbiBkZWwgbm9tYnJlIGRlbCBhcmNoaXZvIChsw61uZWEgIgorIiVkKSIKKworIzogYXBwbHkuYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAicmVjb3VudDogbMOtbmVhIGluZXNwZXJhZGE6ICUuKnMiCisKKyM6IGFwcGx5LmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJmcmFnbWVudG8gZGUgcGFyY2hlIHNpbiBoZWFkZXIgZW4gbGEgbMOtbmVhICVkOiAlLipzIgorCisjOiBhcHBseS5jOjE3NTMKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAiZWwgbnVldm8gYXJjaGl2byBkZXBlbmRlIGRlIGNvbnRlbmlkb3Mgdmllam9zIgorCisjOiBhcHBseS5jOjE3NTUKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJlbCBhcmNoaXZvIGVsaW1pbmFkbyB0b2RhdsOtYSB0aWVuZSBjb250ZW5pZG8iCisKKyM6IGFwcGx5LmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgInBhcmNoZSBjb3JydXB0byBlbiBsYSBsw61uZWEgJWQiCisKKyM6IGFwcGx5LmM6MTgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAibnVldm8gYXJjaGl2byAlcyBkZXBlbmRlIGVuIGNvbnRlbmlkb3Mgdmllam9zIgorCisjOiBhcHBseS5jOjE4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiZWwgYXJjaGl2byBib3JyYWRvICVzIHRvZGF2w61hIHRpZW5lIGNvbnRlbmlkbyIKKworIzogYXBwbHkuYzoxODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIioqIHdhcm5pbmc6IGZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiCittc2dzdHIgIioqIHBlbGlncm86IGVsIGFyY2hpdm8gJXMgZXN0w6EgdmFjw61vIHBlcm8gbm8gZXMgYm9ycmFkbyIKKworIzogYXBwbHkuYzoxOTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgInBhcmNoZSBiaW5hcmlvIGNvcnJ1cHRvIGVuIGxhIGzDrW5lYSAlZDogJS4qcyIKKworIzogYXBwbHkuYzoyMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAicGFyY2hlIGJpbmFyaW8gbm8gcmVjb25vY2lkbyBlbiBsYSBsw61uZWEgJWQiCisKKyM6IGFwcGx5LmM6MjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICJwYXJjaGUgcXVlIHNvbG8gY29udGllbmUgYmFzdXJhIGVuIGxhIGzDrW5lYSAlZCIKKworIzogYXBwbHkuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgbGVlciBlbCBlbmxhY2Ugc2ltYsOzbGljbyAlcyIKKworIzogYXBwbHkuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYWJyaXIgbyBsZWVyICVzIgorCisjOiBhcHBseS5jOjI5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydCBvZiBsaW5lOiAnJWMnIgorbXNnc3RyICJjb21pZW56byBpbnbDoWxpZG8gZGUgbMOtbmVhOiAnJWMnIgorCisjOiBhcHBseS5jOjMwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICJIdW5rICMlZCB0dXZvIMOpeGl0byBlbiAlZCAoJWQgbMOtbmVhIGNvbXBlbnNhZGEpLiIKK21zZ3N0clsxXSAiSHVuayAjJWQgdHV2byDDqXhpdG8gZW4gJWQgKCVkIGzDrW5lYXMgY29tcGVuc2FkYXMpLiIKKworIzogYXBwbHkuYzozMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIkNvbnRleHRvIHJlZHVjaWRvIGEgKCVsZC8lbGQpIHBhcmEgYXBsaWNhciBlbCBmcmFnbWVudG8gZW4gJWQiCisKKyM6IGFwcGx5LmM6MzA3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2hpbGUgc2VhcmNoaW5nIGZvcjpcbiIKKyIlLipzIgorbXNnc3RyICIiCisibWllbnRyYXMgc2UgYnVzY2E6XG4iCisiJS4qcyIKKworIzogYXBwbHkuYzozMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgImRhdGEgcGVyZGlkYSBlbiBwYXJjaGUgYmluYXJpbyBwYXJhICclcyciCisKKyM6IGFwcGx5LmM6MzEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmV2ZXJzZS1hcHBseSBhIGJpbmFyeSBwYXRjaCB3aXRob3V0IHRoZSByZXZlcnNlIGh1bmsgdG8gJyVzJyIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZWRlIHJldmVydGlyLWFwbGljYXIgdW4gcGFyY2hlIGJpbmFyaW8gc2luIGVsIGh1bmsgcmV2ZXJ0aWRvIGEgJyVzJyIKKworIzogYXBwbHkuYzozMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhcHBseSBiaW5hcnkgcGF0Y2ggdG8gJyVzJyB3aXRob3V0IGZ1bGwgaW5kZXggbGluZSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYXBsaWNhciBlbCBwYXJjaGUgYmluYXJpbyBhICclcycgc2luIHVuIMOtbmRpY2UgY29tcGxldG8iCisKKyM6IGFwcGx5LmM6MzE2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIHBhdGNoIGFwcGxpZXMgdG8gJyVzJyAoJXMpLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBjb250ZW50cy4iCittc2dzdHIgIiIKKyJlbCBwYXJjaGUgYXBsaWNhIGEgJyVzJyAoJXMpLCBsbyBjdWFsIG5vIGNvbmN1ZXJkYSBjb24gbG9zIGNvbnRlbmlkb3MgIgorImFjdHVhbGVzLiIKKworIzogYXBwbHkuYzozMTcxCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBwYXRjaCBhcHBsaWVzIHRvIGFuIGVtcHR5ICclcycgYnV0IGl0IGlzIG5vdCBlbXB0eSIKK21zZ3N0ciAiZWwgcGFyY2hlIGFwbGljYSBhIHVuICclcycgdmFjw61vLCBwZXJvIGVzdGUgbm8gbG8gZXN0YSIKKworIzogYXBwbHkuYzozMTg5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBuZWNlc3NhcnkgcG9zdGltYWdlICVzIGZvciAnJXMnIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICJsYSBwb3N0aW1hZ2VuIG5lY2VzYXJpYSAlcyBwYXJhICclcycgbm8gc2UgcHVlZGUgbGVlciIKKworIzogYXBwbHkuYzozMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICJlbCBwYXJjaGUgYmluYXJpbyBubyBhcGxpY2EgcGFyYSAnJXMnIgorCisjOiBhcHBseS5jOjMyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKyJlbCBwYXJjaGUgYmluYXJpbyBwYXJhICclcycgY3JlYSB1biByZXN1bHRhZG8gaW5jb3JyZWN0byAoc2FsaWVuZG8gJXMsIHNlICIKKyJvYnR1dm8gJXMpIgorCisjOiBhcHBseS5jOjMyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgImVsIHBhcmNoZSBmYWxsw7M6ICVzOiVsZCIKKworIzogYXBwbHkuYzozMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgaGFjZXIgY2hlY2tvdXQgYSAlcyIKKworIzogYXBwbHkuYzozNDA1IGFwcGx5LmM6MzQxNiBhcHBseS5jOjM0NjIgbWlkeC5jOjYxIHNldHVwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgJXMiCisKKyM6IGFwcGx5LmM6MzQxMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGZyb20gJyVzJyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJsZXllbmRvIGRlICclcycgdHJhcyB1biBlbmxhY2Ugc2ltYsOzbGljbyIKKworIzogYXBwbHkuYzozNDQyIGFwcGx5LmM6MzY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAibGEgcnV0YSAlcyBoYSBzaWRvIHJlbm9tYnJhZGEvc3VwcmltaWRhIgorCisjOiBhcHBseS5jOjM1MjggYXBwbHkuYzozNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IG5vIGV4aXN0ZSBlbiBlbCDDrW5kaWNlIgorCisjOiBhcHBseS5jOjM1MzcgYXBwbHkuYzozNzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXM6IG5vIGNvbmN1ZXJkYSBjb24gZWwgw61uZGljZSIKKworIzogYXBwbHkuYzozNTcyCittc2dpZCAicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorImVsIHJlcG9zaXRvcmlvIGNhcmVjZSBkZWwgYmxvYiBuZWNlc2FyaW8gcGFyYSByZWdyZXNhciBlbiB1biBtZXJnZSBkZSB0cmVzLSIKKyJ2w61hcy4iCisKKyM6IGFwcGx5LmM6MzU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIlJldHJvY2VkaWVuZG8gZW4gdW4gbWVyZ2UgZGUgdHJlcy12w61hcy4uLlxuIgorCisjOiBhcHBseS5jOjM1OTEgYXBwbHkuYzozNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlbiBsZWVyIGxvcyBjb250ZW5pZG9zIGFjdHVhbGVzIGRlICclcyciCisKKyM6IGFwcGx5LmM6MzYwNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmFsbCBiYWNrIG9uIHRocmVlLXdheSBtZXJnZS4uLlxuIgorbXNnc3RyICJGYWxsw7MgZWwgbWVyZ2UgZW4gcmV0cm9jZXNvIGRlIHRyZXMtdsOtYXMuLi5cbiIKKworIzogYXBwbHkuYzozNjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyB3aXRoIGNvbmZsaWN0cy5cbiIKK21zZ3N0ciAiUGFyY2hlIGFwbGljYWRvIGEgJyVzJyBjb24gY29uZmxpY3Rvcy5cbiIKKworIzogYXBwbHkuYzozNjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICJQYXJjaGUgYXBsaWNhZG8gYSAnJXMnIGxpbXBpYW1lbnRlXG4iCisKKyM6IGFwcGx5LmM6MzY1MgorbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgInBhcmNoZSBkZSBlbGltaW5hY2nDs24gZGVqYSBjb250ZW5pZG9zIGVuIGVsIGFyY2hpdm8iCisKKyM6IGFwcGx5LmM6MzcyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd3JvbmcgdHlwZSIKK21zZ3N0ciAiJXM6IHRpcG8gaW5jb3JyZWN0byIKKworIzogYXBwbHkuYzozNzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMgdGllbmUgdGlwbyAlbywgc2UgZXNwZXJhYmEgJW8iCisKKyM6IGFwcGx5LmM6Mzg3OCBhcHBseS5jOjM4ODAgcmVhZC1jYWNoZS5jOjgzMCByZWFkLWNhY2hlLmM6ODU2CisjOiByZWFkLWNhY2hlLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdGggJyVzJyIKK21zZ3N0ciAicnV0YSBpbnbDoWxpZGEgJyVzJyIKKworIzogYXBwbHkuYzozOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IHlhIGV4aXN0ZSBlbiBlbCDDrW5kaWNlIgorCisjOiBhcHBseS5jOjM5MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlczogeWEgZXhpc3RlIGVuIGVsIGRpcmVjdG9yaW8gZGUgdHJhYmFqbyIKKworIzogYXBwbHkuYzozOTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSIKK21zZ3N0ciAibnVldm8gbW9kbyAoJW8pIGRlICVzIG5vIGNvbmN1ZXJkYSBjb24gZWwgdmllam8gbW9kbyAoJW8pIgorCisjOiBhcHBseS5jOjM5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICJudWV2byBtb2RvICglbykgZGUgJXMgbm8gY29uY3VlcmRhIGNvbiBlbCB2aWVqbyBtb2RvICglbykgZGUgJXMiCisKKyM6IGFwcGx5LmM6Mzk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiYXJjaGl2byBhZmVjdGFkbyAnJXMnIGVzdMOhIHRyYXMgdW4gZW5sYWNlIHNpbWLDs2xpY28iCisKKyM6IGFwcGx5LmM6Mzk4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiVzOiBlbCBwYXJjaGUgbm8gYXBsaWNhIgorCisjOiBhcHBseS5jOjQwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIlJldmlzYW5kbyBlbCBwYXJjaGUgJXMuLi4iCisKKyM6IGFwcGx5LmM6NDA5NQorIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICJmYWx0YSBpbmZvcm1hY2nDs24gZGVsIHNoYTEgbyBlcyBpbsO6dGlsIHBhcmEgZWwgc3VibcOzZHVsbyAlcyIKKworIzogYXBwbHkuYzo0MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGUgY2hhbmdlIGZvciAlcywgd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgSEVBRCIKK21zZ3N0ciAibW9kbyBjYW1iaWFkbyBwYXJhICVzLCBlbCBjdWFsIG5vIHNlIGVuY3VlbnRyYSBlbiBlbCBIRUFEIGFjdHVhbCIKKworIzogYXBwbHkuYzo0MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzICglcykuIgorbXNnc3RyICJmYWx0YSBpbmZvcm1hY2nDs24gc2hhMSBvIGVzIGluw7p0aWwgKCVzKS4iCisKKyM6IGFwcGx5LmM6NDExNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAibm8gc2UgcHVkbyBhw7FhZGlyICVzIGFsIMOtbmRpY2UgdGVtcG9yYWwiCisKKyM6IGFwcGx5LmM6NDEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdGVtcG9yYXJ5IGluZGV4IHRvICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGVzY3JpYmlyIHVuIMOtbmRpY2UgdGVtcG9yYWwgcGFyYSAlcyIKKworIzogYXBwbHkuYzo0MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZWxpbWluYXIgJXMgZGVsIMOtbmRpY2UiCisKKyM6IGFwcGx5LmM6NDI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgInBhcmNoZSBjb3JydXB0byBwYXJhIGVsIHN1Ym3Ds2R1bG8gJXMiCisKKyM6IGFwcGx5LmM6NDMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBlc3RhYmxlY2VyIGVsIGFyY2hpdm8gcmVjacOpbiBjcmVhZG8gJyVzJyIKKworIzogYXBwbHkuYzo0MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICIiCisibm8gZXMgcG9zaWJsZSBjcmVhciB1bmEgY29waWEgZGUgc2VndXJpZGFkIHBhcmEgZWwgYXJjaGl2byByZWNpw6luIGNyZWFkbyAlcyIKKworIzogYXBwbHkuYzo0MzE2IGFwcGx5LmM6NDQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBhZ3JlZ2FyIHVuYSBlbnRyYWRhIGVuIGVsIGNhY2hlIHBhcmEgJXMiCisKKyM6IGFwcGx5LmM6NDM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGVzY3JpYmlyIHBhcmEgJyVzJyIKKworIzogYXBwbHkuYzo0MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICJjZXJyYW5kbyBhcmNoaXZvICclcyciCisKKyM6IGFwcGx5LmM6NDQzMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgIm5vIGVzIHBvc2libGUgZXNjcmliaXIgZWwgYXJjaGl2byAnJXMnIG1vZG8gJW8iCisKKyM6IGFwcGx5LmM6NDUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICJQYXJjaGUgJXMgYXBsaWNhZG8gbGltcGlhbWVudGUuIgorCisjOiBhcHBseS5jOjQ1MzkKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiZXJyb3IgaW50ZXJubyIKKworIzogYXBwbHkuYzo0NTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAiQXBsaWNhbmRvIHBhcmNoZSAlJXMgY29uICVkIHJlY2hhem8uLi4iCittc2dzdHJbMV0gIkFwbGljYW5kbyBwYXJjaGUgJSVzIGNvbiAlZCByZWNoYXpvcy4uLiIKKworIzogYXBwbHkuYzo0NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAidHJ1bmNhbmRvIGVsIG5vbWJyZSBkZSBhcmNoaXZvIC5yZWogYSAlLipzLnJlaiIKKworIzogYXBwbHkuYzo0NTYxIGJ1aWx0aW4vZmV0Y2guYzo5MDEgYnVpbHRpbi9mZXRjaC5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFicmlyICVzIgorCisjOiBhcHBseS5jOjQ1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAiSHVuayAjJWQgYXBsaWNhZG8gbGltcGlhbWVudGUuIgorCisjOiBhcHBseS5jOjQ1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICJIdW5rICMlZCByZWNoYXphZG8uIgorCisjOiBhcHBseS5jOjQ2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCBwYXRjaCAnJXMnLiIKK21zZ3N0ciAiUGFyY2hlICclcycgc2FsdGFkby4iCisKKyM6IGFwcGx5LmM6NDcwNgorbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAiaW5wdXQgbm8gcmVjb25vY2lkbyIKKworIzogYXBwbHkuYzo0NzI2Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBsZWVyIGVsIGFyY2hpdm8gw61uZGljZSIKKworIzogYXBwbHkuYzo0ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFicmlyIGVsIHBhcmNoZSAnJXMnOiAlcyIKKworIzogYXBwbHkuYzo0OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIiVkIGVycm9yIGRlIGVzcGFjaW9zIGVuIGJsYW5jbyBhcGxhc3RhZG8iCittc2dzdHJbMV0gIiVkIGVycm9yZXMgZGUgZXNwYWNpb3MgZW4gYmxhbmNvIGFwbGFzdGFkb3MiCisKKyM6IGFwcGx5LmM6NDkxNiBhcHBseS5jOjQ5MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQgbMOtbmVhIGFncmVnYSBlcnJvcmVzIGRlIGVzcGFjaW9zIGVuIGJsYW5jby4iCittc2dzdHJbMV0gIiVkIGzDrW5lYXMgYWdyZWdhbiBlcnJvcmVzIGRlIGVzcGFjaW9zIGVuIGJsYW5jby4iCisKKyM6IGFwcGx5LmM6NDkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIiCisiJWQgbMOtbmVhIGFwbGljYWRhIGRlc3B1w6lzIGRlIGFycmVnbGFyIGxvcyBlcnJvcmVzIGRlIGVzcGFjaW9zIGVuIGJsYW5jby4iCittc2dzdHJbMV0gIiIKKyIlZCBsw61uZWFzIGFwbGljYWRhcyBkZXNwdcOpcyBkZSBhcnJlZ2xhciBsb3MgZXJyb3JlcyBkZSBlc3BhY2lvcyBlbiBibGFuY28uIgorCisjOiBhcHBseS5jOjQ5NDAgYnVpbHRpbi9hZGQuYzo2MTIgYnVpbHRpbi9tdi5jOjMwMSBidWlsdGluL3JtLmM6NDA2Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJObyBlcyBwb3NpYmxlIGVzY3JpYmlyIGVsIGFyY2hpdm8gw61uZGljZSIKKworIzogYXBwbHkuYzo0OTY4Cittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAibm8gYXBsaWNhciBjYW1iaW9zIHF1ZSBjb25jdWVyZGVuIGNvbiBsYSBydXRhIHN1bWluaXN0cmFkYSIKKworIzogYXBwbHkuYzo0OTcxCittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAiYXBsaWNhciBjYW1iaW9zIHF1ZSBjb25jdWVyZGVuIGNvbiBsYSBydXRhIHN1bWluaXN0cmFkYSIKKworIzogYXBwbHkuYzo0OTczIGJ1aWx0aW4vYW0uYzoyMjYwCittc2dpZCAibnVtIgorbXNnc3RyICJudW0iCisKKyM6IGFwcGx5LmM6NDk3NAorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICJlbGltaW5hciA8bnVtPiBzbGFzaGVzIGluaWNpYWxlcyBkZSBsYXMgcnV0YXMgZGlmZiB0cmFkaWNpb25hbGVzIgorCisjOiBhcHBseS5jOjQ5NzcKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICJpZ25vcmFyIGFkaWNpb25lcyBoZWNoYXMgcG9yIGVsIHBhcmNoZSIKKworIzogYXBwbHkuYzo0OTc5Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICJlbiBsdWdhciBkZSBhcGxpY2FyIGVsIHBhcmNoZSwgbW9zdHJhciBkaWZmc3RhdCBwYXJhIGxhIGVudHJhZGEiCisKKyM6IGFwcGx5LmM6NDk4MworbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIm1vc3RyYXIgZWwgbnVtZXJvIGRlIGzDrW5lYXMgYWdyZWdhZGFzIHkgZWxpbWluYWRhcyBlbiBub3RhY2nDs24gZGVjaW1hbCIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiZW4gbHVnYXIgZGUgYXBsaWNhciBlbCBwYXJjaGUsIG1vc3RyYXIgdW4gcmVzdW1lbiBwYXJhIGxhIGVudHJhZGEiCisKKyM6IGFwcGx5LmM6NDk4NworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUiCittc2dzdHIgImVuIGx1Z2FyIGRlIGFwbGljYXIgZWwgcGFyY2hlLCB2ZXIgc2kgZWwgcGFyY2hlIGVzIGFwbGljYWJsZSIKKworIzogYXBwbHkuYzo0OTg5Cittc2dpZCAibWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICJhc2VndXJhciBxdWUgZWwgcGFyY2hlIGVzIGFwbGljYWJsZSBhbCDDrW5kaWNlIGFjdHVhbCIKKworIzogYXBwbHkuYzo0OTkxCittc2dpZCAibWFyayBuZXcgZmlsZXMgd2l0aCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorbXNnc3RyICJtYXJjYSBsb3MgbnVldm9zIGFyY2hpdm9zIGNvbiBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorCisjOiBhcHBseS5jOjQ5OTMKK21zZ2lkICJhcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiYXBsaWNhciB1biBwYXJjaGUgc2luIHRvY2FyIGVsIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBhcHBseS5jOjQ5OTUKK21zZ2lkICJhY2NlcHQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgb3V0c2lkZSB0aGUgd29ya2luZyBhcmVhIgorbXNnc3RyICJhY2VwdGFyIHVuIHBhcmNoZSBxdWUgdG9jYSBmdWVyYSBkZWwgw6FyZWEgZGUgdHJhYmFqbyIKKworIzogYXBwbHkuYzo0OTk4Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgInRhbWJpw6luIGFwbGljYXIgZWwgcGFyY2hlICggdXNhciBjb24gLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrIgorCisjOiBhcHBseS5jOjUwMDAKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICJpbnRlbnRhciBtZXJnZSBkZSB0cmVzLXbDrWFzIHNpIGVsIHBhcmNoZSBubyBhcGxpY2EiCisKKyM6IGFwcGx5LmM6NTAwMgorbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisiY29uc3RydWlyIHVuIMOtbmRpY2UgdGVtcG9yYWwgYmFzYWRvIGVuIGxhIGluZm9ybWFjacOzbiBkZWwgw61uZGljZSBpbmNydXN0YWRvIgorCisjOiBhcHBseS5jOjUwMDUgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MyBidWlsdGluL2xzLWZpbGVzLmM6NTI0Cittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgInJ1dGFzIGVzdMOhbiBzZXBhcmFkYXMgY29uIHVuIGNhcsOhY3RlciBOVUxMIgorCisjOiBhcHBseS5jOjUwMDcKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgImFzZWd1cmFyIHF1ZSBhbCBtZW5vcyBjb25jdWVyZGVuIDxuPiBsw61uZWFzIGRlbCBjb250ZXh0byBjb25jdWVyZGVuIgorCisjOiBhcHBseS5jOjUwMDggYnVpbHRpbi9hbS5jOjIyMzkgYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OAorIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDAgYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1NyBidWlsdGluL3JlYmFzZS5jOjE1MDgKK21zZ2lkICJhY3Rpb24iCittc2dzdHIgImFjY2nDs24iCisKKyM6IGFwcGx5LmM6NTAwOQorbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICIiCisiZGV0ZWN0YXIgbMOtbmVhcyBudWV2YXMgbyBtb2RpZmljYWRhcyBxdWUgY29udGllbmVuIGVycm9yZXMgZGUgZXNwYWNpb3MgZW4gIgorImJsYW5jbyIKKworIzogYXBwbHkuYzo1MDEyIGFwcGx5LmM6NTAxNQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgIiIKKyJpZ25vcmFyIGNhbWJpb3MgZW4gbG9zIGVzcGFjaW9zIGVuIGJsYW5jbyBjdWFuZG8gc2UgZW5jdWVudHJhIGVsIGNvbnRleHRvIgorCisjOiBhcHBseS5jOjUwMTgKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAiYXBsaWNhciBlbCBwYXJjaGUgZW4gcmV2ZXJzYSIKKworIzogYXBwbHkuYzo1MDIwCittc2dpZCAiZG9uJ3QgZXhwZWN0IGF0IGxlYXN0IG9uZSBsaW5lIG9mIGNvbnRleHQiCittc2dzdHIgIm5vIGVzcGVyYSBhbCBtZW5vcyB1bmEgbMOtbmVhIGRlbCBjb250ZXh0byIKKworIzogYXBwbHkuYzo1MDIyCittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgImRlamFyIGxvcyBodW5rcyByZWNoYXphZG9zIGVuIGxvcyBhcmNoaXZvcyAqLnJlaiBjb3JyZXNwb250aWVudGVzIgorCisjOiBhcHBseS5jOjUwMjQKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAicGVybWl0aXIgc29sYXBhbWllbnRvIGRlIGh1bmtzIgorCisjOiBhcHBseS5jOjUwMjUgYnVpbHRpbi9hZGQuYzozMjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMgorIzogYnVpbHRpbi9jb21taXQuYzoxMzYwIGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk4IGJ1aWx0aW4vZnNjay5jOjc3NAorIzogYnVpbHRpbi9sb2cuYzoyMTY2IGJ1aWx0aW4vbXYuYzoxMjMgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICJzZXIgdmVyYm9zbyIKKworIzogYXBwbHkuYzo1MDI3Cittc2dpZCAidG9sZXJhdGUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIGZpbGUiCittc2dzdHIgIiIKKyJ0b2xlcmFyIG51ZXZhcyBsw61uZWFzIGZhbHRhbnRlcyBkZXRlY3RhZGFzIGluY29ycmVjdGFtZW50ZSBhbCBmaW5hbCBkZWwgIgorImFyY2hpdm8iCisKKyM6IGFwcGx5LmM6NTAzMAorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAibm8gY29uZmlhciBlbiBlbCBjb250ZW8gZGUgbMOtbmVhcyBlbiBsb3MgaGVhZGVycyBkZWwgaHVuayIKKworIzogYXBwbHkuYzo1MDMyIGJ1aWx0aW4vYW0uYzoyMjQ4Cittc2dpZCAicm9vdCIKK21zZ3N0ciAicmHDrXoiCisKKyM6IGFwcGx5LmM6NTAzMworbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgImFudGVwb25lciA8cm9vdD4gYSB0b2RvcyBsb3Mgbm9tYnJlcyBkZSBhcmNoaXZvcyIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgWzxvcGNpb25lcz5dIDxwYXJ0ZS1kZWwtw6FyYm9sPiBbPHJ1dGE+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE1Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzoxNgorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjb21hbmRvPiBdIFs8b3BjaW9uZXM+XSA8cGFydGUtZGVsLSIKKyLDoXJib2w+IFs8cnV0YT4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTcKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y29tYW5kbz5dIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjM3MiBidWlsdGluL2FkZC5jOjE4MSBidWlsdGluL2FkZC5jOjU4OCBidWlsdGluL3JtLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiCittc2dzdHIgInJ1dGEgZXNwZWNpZmljYWRhICclcycgbm8gY29uY29yZMOzIGNvbiBuaW5ndW5hIGNhcnBldGEiCisKKyM6IGFyY2hpdmUuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWY6ICUuKnMiCittc2dzdHIgIm5vIGV4aXN0ZSBlbCByZWY6ICUuKnMiCisKKyM6IGFyY2hpdmUuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICVzIgorbXNnc3RyICJub21icmUgZGUgb2JqZXRvIG5vIHbDoWxpZG86ICVzIgorCisjOiBhcmNoaXZlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHRyZWUgb2JqZWN0OiAlcyIKK21zZ3N0ciAibm8gZXMgdW4gb2JqZXRvIHRyZWU6ICVzIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgImRpcmVjdG9yaW8gZGUgdHJhYmFqbyBhY3R1YWwgbm8gcmFzdHJlYWRvIgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiZm10IgorbXNnc3RyICJmbXQiCisKKyM6IGFyY2hpdmUuYzo0NTcKK21zZ2lkICJhcmNoaXZlIGZvcm1hdCIKK21zZ3N0ciAiZm9ybWF0byBkZWwgYXJjaGl2byIKKworIzogYXJjaGl2ZS5jOjQ1OCBidWlsdGluL2xvZy5jOjE2NTMKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgInByZWZpam8iCisKKyM6IGFyY2hpdmUuYzo0NTkKK21zZ2lkICJwcmVwZW5kIHByZWZpeCB0byBlYWNoIHBhdGhuYW1lIGluIHRoZSBhcmNoaXZlIgorbXNnc3RyICJhbnRlcG9uZXIgcHJlZmlqbyBhIGNhZGEgcnV0YSBlbiBlbCBhcmNoaXZvIgorCisjOiBhcmNoaXZlLmM6NDYwIGJ1aWx0aW4vYmxhbWUuYzo4NjEgYnVpbHRpbi9ibGFtZS5jOjg2NSBidWlsdGluL2JsYW1lLmM6ODY2CisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE3IGJ1aWx0aW4vY29uZmlnLmM6MTMwIGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYyCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2NCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OCBidWlsdGluL2dyZXAuYzo4ODcKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUgYnVpbHRpbi9scy1maWxlcy5jOjU2MCBidWlsdGluL2xzLWZpbGVzLmM6NTYzCisjOiBidWlsdGluL25vdGVzLmM6NDEyIGJ1aWx0aW4vbm90ZXMuYzo1NzggYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjMKKyM6IHBhcnNlLW9wdGlvbnMuaDoxOTAKK21zZ2lkICJmaWxlIgorbXNnc3RyICJjYXJwZXRhIgorCisjOiBhcmNoaXZlLmM6NDYxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJlc2NyaWJlIGVsIGFyY2hpdm8gZW4gZXN0YSBjYXJwZXRhIgorCisjOiBhcmNoaXZlLmM6NDYzCittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAibGVlciAuZ2l0YXR0cmlidXRlcyBlbiBlbCBkaXJlY3RvcmlvIGRlIHRyYWJham8iCisKKyM6IGFyY2hpdmUuYzo0NjQKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICJyZXBvcnRhciBhcmNoaXZvcyBhcmNoaXZhZG9zIHBvciBzdGRlcnIiCisKKyM6IGFyY2hpdmUuYzo0NjUKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICJzb2xvIGd1YXJkYXIiCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgImNvbXByaW1pciBtw6FzIHLDoXBpZG8iCisKKyM6IGFyY2hpdmUuYzo0NzQKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgImNvbXByaW1pciBtZWpvciIKKworIzogYXJjaGl2ZS5jOjQ3NworbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAibGlzdGFyIGxvcyBmb3JtYXRvcyBkZSBjYXJwZXRhIHNvcG9ydGFkb3MiCisKKyM6IGFyY2hpdmUuYzo0NzkgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9jbG9uZS5jOjExMyBidWlsdGluL2Nsb25lLmM6MTE2CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMQorbXNnaWQgInJlcG8iCittc2dzdHIgInJlcG8iCisKKyM6IGFyY2hpdmUuYzo0ODAgYnVpbHRpbi9hcmNoaXZlLmM6OTIKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAib2J0ZW5lciBsYSBjYXJwZXRhIGRlbCByZXBvc2l0b3JpbyByZW1vdG8gPHJlcG8+IgorCisjOiBhcmNoaXZlLmM6NDgxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkzIGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTgKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICJjb21hbmRvIgorCisjOiBhcmNoaXZlLmM6NDgyIGJ1aWx0aW4vYXJjaGl2ZS5jOjk0Cittc2dpZCAicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIgorbXNnc3RyICJydXRhIHBhcmEgZWwgY29tYW5kbyBnaXQtdXBsb2FkLWFyY2hpdm8gcmVtb3RvIgorCisjOiBhcmNoaXZlLmM6NDg5Cittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1yZW1vdGUiCittc2dzdHIgIk9wY2nDs24gaW5lc3BlcmFkYSAtLXJlbW90ZSIKKworIzogYXJjaGl2ZS5jOjQ5MQorbXNnaWQgIk9wdGlvbiAtLWV4ZWMgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tcmVtb3RlIgorbXNnc3RyICJPcGNpw7NuIC0tZXhlYyBzb2xvIHB1ZWRlIHNlciB1dGlsaXphZGEgY29uIC0tcmVtb3RlIgorCisjOiBhcmNoaXZlLmM6NDkzCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIk9wY2nDs24gaW5lc3BlcmFkYSAtLW91dHB1dCIKKworIzogYXJjaGl2ZS5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGFyY2hpdmUgZm9ybWF0ICclcyciCittc2dzdHIgIkZvcm1hdG8gZGUgY2FycGV0YSBkZXNjb25vY2lkbyAnJXMnIgorCisjOiBhcmNoaXZlLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiCittc2dzdHIgIkFyZ3VtZW50byBubyBzb3BvcnRhZG8gcGFyYSBmb3JtYXRvICclcyc6IC0lZCIKKworIzogYXJjaGl2ZS10YXIuYzoxMjUgYXJjaGl2ZS16aXAuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmVhbSBibG9iICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSB0cmFuc21pdGlyIGVsIGJsb2IgJXMiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjY2IGFyY2hpdmUtemlwLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiCittc2dzdHIgIm1vZG8gZGUgYXJjaGl2byBubyBzb3BvcnRhZG86IDAlbyAoU0hBMTogJXMpIgorCisjOiBhcmNoaXZlLXRhci5jOjI5MyBhcmNoaXZlLXppcC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciAlcyIKKworIzogYXJjaGl2ZS10YXIuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICclcycgZmlsdGVyIgorbXNnc3RyICJubyBzZSBwdWVkZSBjb21lbnphciBmaWx0cm8gJyVzJyIKKworIzogYXJjaGl2ZS10YXIuYzo0NjgKK21zZ2lkICJ1bmFibGUgdG8gcmVkaXJlY3QgZGVzY3JpcHRvciIKK21zZ3N0ciAiaW5jYXBheiBkZSByZWRpcmlnaXIgZGVzY3JpcHRvciIKKworIzogYXJjaGl2ZS10YXIuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWx0ZXIgcmVwb3J0ZWQgZXJyb3IiCittc2dzdHIgImZpbHRybyAnJXMnIHJlcG9ydMOzIHVuIGVycm9yIgorCisjOiBhcmNoaXZlLXppcC5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoIGlzIG5vdCB2YWxpZCBVVEYtODogJXMiCittc2dzdHIgInJ1dGEgbm8gdsOhbGlkYSBVVEYtODogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICJydXRhIG11eSBsYXJnYSAoJWQgY2hhcnMsIFNIQTE6ICVzKTogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6NDgwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMxIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGUgZXJyb3IgKCVkKSIKK21zZ3N0ciAiZXJyb3IgYWwgZGVzaW5mbGFyICglZCkiCisKKyM6IGFyY2hpdmUtemlwLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWVzdGFtcCB0b28gbGFyZ2UgZm9yIHRoaXMgc3lzdGVtOiAlPFBSSXVNQVg+IgorbXNnc3RyICJ0aW1lc3RhbXAgbXV5IGxhcmdvIHBhcmEgZXN0ZSBzaXN0ZW1hOiAlPFBSSXVNQVg+IgorCisjOiBhdHRyLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWUiCittc2dzdHIgIiUuKnMgbm8gZXMgdW4gbm9tYnJlIGRlIGF0cmlidXRvIHbDoWxpZG8iCisKKyM6IGF0dHIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbm90IGFsbG93ZWQ6ICVzOiVkIgorbXNnc3RyICIlcyBubyBwZXJtaXRpZG86ICVzOiVkIgorCisjOiBhdHRyLmM6NDA5Cittc2dpZCAiIgorIk5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBpZ25vcmVkIGluIGdpdCBhdHRyaWJ1dGVzXG4iCisiVXNlICdcXCEnIGZvciBsaXRlcmFsIGxlYWRpbmcgZXhjbGFtYXRpb24uIgorbXNnc3RyICIiCisiTG9zIHBhdHJvbmVzIG5lZ2F0aXZvcyBzb24gaWdub3JhZG9zIGVuIGxvcyBhdHJpYnV0b3MgZGUgZ2l0XG4iCisiVXNhICdcXCEnIHBhcmEgY29tZW56YXIgbGl0ZXJhbG1lbnRlIGNvbiBleGNsYW1hY2nDs24uIgorCisjOiBiaXNlY3QuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkbHkgcXVvdGVkIGNvbnRlbnQgaW4gZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAiUmV2aXNhIGxhcyBjb21pbGxhcyBlbiBlbCBhcmNoaXZvICclcyc6ICVzIgorCisjOiBiaXNlY3QuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICLCoU5vIHBvZGVtb3MgYmlzZWNjaW9uYXIgbcOhcyFcbiIKKworIzogYmlzZWN0LmM6NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICJObyBlcyB1biBub21icmUgZGUgY29tbWl0IHbDoWxpZG8gJXMiCisKKyM6IGJpc2VjdC5jOjc3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiTGEgYmFzZSBkZSBmaXNpw7NuICVzIGVzdMOhIG1hbC5cbiIKKyJFc3RvIHF1aWVyZSBkZWNpciBxdWUgZWwgYnVnIGhhIHNpZG8gYXJyZWdsYWRvIGVudHJlICVzIHkgWyVzXS5cbiIKKworIzogYmlzZWN0LmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBuZXcuXG4iCisiVGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyJMYSBiYXNlIGRlIGZpc2nDs24gJXMgZXMgbnVldmEuXG4iCisiRXN0YSBwcm9waWVkYWQgaGEgY2FtYmlhZG8gZW50cmUgJXMgeSBbJXNdLlxuIgorCisjOiBiaXNlY3QuYzo3ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzICVzLlxuIgorIlRoaXMgbWVhbnMgdGhlIGZpcnN0ICclcycgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyJMYSBiYXNlIGRlIGZpc2nDs24gJXMgZXMgJXMuXG4iCisiRXN0byBxdWllcmUgZGVjaXIgcXVlIGVsIHByaW1lciAnJXMnIGNvbW1pdCBlc3TDoSBlbnRyZSAlcyB5IFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU29tZSAlcyByZXZzIGFyZSBub3QgYW5jZXN0b3JzIG9mIHRoZSAlcyByZXYuXG4iCisiZ2l0IGJpc2VjdCBjYW5ub3Qgd29yayBwcm9wZXJseSBpbiB0aGlzIGNhc2UuXG4iCisiTWF5YmUgeW91IG1pc3Rvb2sgJXMgYW5kICVzIHJldnM/XG4iCittc2dzdHIgIiIKKyJBbGd1bmFzICVzIHJldmlzaW9uZXMgbm8gc29uIGFuY2VzdHJvcyBkZSBsYSByZXZpc2nDs24gJXMuXG4iCisiZ2l0IGJpc2VjdCBubyBwdWVkZSB0cmFiYWphciBiaWVuIGVuIGVzdGUgY2Fzby5cbiIKKyLCv1RhbCB2ZXogY29uZnVuZGlzdGUgbGEgcmV2aXNpw7NuICVzIHkgJXM/XG4iCisKKyM6IGJpc2VjdC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAlcyBhbmQgWyVzXSBtdXN0IGJlIHNraXBwZWQuXG4iCisiU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0ICVzIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCAlcy5cbiIKKyJXZSBjb250aW51ZSBhbnl3YXkuIgorbXNnc3RyICIiCisibGEgYmFzZSBkZSBmdXNpw7NuIGVudHJlICVzIHkgWyVzXSB0aWVuZSBxdWUgc2VyIHNhbHRhZGEuXG4iCisiQXPDrSBxdWUgbm8gcG9kZW1vcyBlc3RhciBzZWd1cm9zIHF1ZSBlbCBwcmltZXIgJXMgY29tbWl0IGVzdMOhIGVudHJlJXMgeSAlcy5cbiIKKyJWYW1vcyBhIGNvbnRpbnVhciBkZSB0b2RhcyBtYW5lcmFzLiIKKworIzogYmlzZWN0LmM6ODQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkXG4iCittc2dzdHIgIkJpc2VjY2lvbmFuZG86IHVuYSBiYXNlIGRlIGZpc2nDs24gZGViZSBzZXIgcHJvYmFkYVxuIgorCisjOiBiaXNlY3QuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSAlcyByZXZpc2lvbiBpcyBuZWVkZWQiCittc2dzdHIgInVuYSAlcyByZXZpc2nDs24gZXMgbmVjZXNhcmlhIgorCisjOiBiaXNlY3QuYzo5MjAgYnVpbHRpbi9ub3Rlcy5jOjE3NyBidWlsdGluL3RhZy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciBlbCBhcmNoaXZvICclcyciCisKKyM6IGJpc2VjdC5jOjk2NiBidWlsdGluL21lcmdlLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIGVsIGFyY2hpdm8gJyVzJyIKKworIzogYmlzZWN0LmM6OTk3Cittc2dpZCAicmVhZGluZyBiaXNlY3QgcmVmcyBmYWlsZWQiCittc2dzdHIgImZhbGzDsyBsZWVyIGxhcyByZWZzIGRlIGJpc2VjdCIKKworIzogYmlzZWN0LmM6MTAxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB3YXMgYm90aCAlcyBhbmQgJXNcbiIKK21zZ3N0ciAiJXMgZnVlIHRhbnRvICVzIGNvbW8gJXNcbiIKKworIzogYmlzZWN0LmM6MTAyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGVzdGFibGUgY29tbWl0IGZvdW5kLlxuIgorIk1heWJlIHlvdSBzdGFydGVkIHdpdGggYmFkIHBhdGggcGFyYW1ldGVycz9cbiIKK21zZ3N0ciAiIgorIk5vIHNlIGVuY29udHLDsyBjb21taXQgcXVlIHNlIHB1ZWRhIHByb2Jhci5cbiIKKyLCv1F1aXrDoXMgaW5pY2lhc3RlIGNvbiBwYXLDoW1ldHJvcyBkZSBydXRhcyBpbmNvcnJlY3Rvcz9cbiIKKworIzogYmlzZWN0LmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICIocm91Z2hseSAlZCBzdGVwKSIKK21zZ2lkX3BsdXJhbCAiKHJvdWdobHkgJWQgc3RlcHMpIgorbXNnc3RyWzBdICIoYXByb3hpbWFkYW1lbnRlICVkIHBhc28pIgorbXNnc3RyWzFdICIoYXByb3hpbWFkYW1lbnRlICVkIHBhc29zKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBsYXN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCAiKHJvdWdobHkgJWQKKyMuIHN0ZXBzKSIgdHJhbnNsYXRpb24uCisjLgorIzogYmlzZWN0LmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9uIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dpZF9wbHVyYWwgIkJpc2VjdGluZzogJWQgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dzdHJbMF0gIkJpc2VjY2lvbmFuZG86IGZhbHRhICVkIHJldmlzacOzbiBwb3IgcHJvYmFyIGRlc3B1w6lzIGRlIGVzdG8gJXNcbiIKK21zZ3N0clsxXSAiQmlzZWNjaW9uYW5kbzogZmFsdGFuICVkIHJldmlzaW9uZXMgcG9yIHByb2JhciBkZXNwdcOpcyBkZSBlc3RvICVzXG4iCisKKyM6IGJsYW1lLmM6MjcwMAorbXNnaWQgIi0tY29udGVudHMgYW5kIC0tcmV2ZXJzZSBkbyBub3QgYmxlbmQgd2VsbC4iCittc2dzdHIgIi0tY29udGVudHMgeSAtLXJldmVyc2Ugbm8gc2UgbWV6Y2xhbiBiaWVuLiIKKworIzogYmxhbWUuYzoyNzE0Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbnRlbnRzIHdpdGggZmluYWwgY29tbWl0IG9iamVjdCBuYW1lIgorbXNnc3RyICJubyBzZSBwdWVkZSB1c2FyIC0tY29udGVudHMgY29uIGVsIG5vbWJyZSBkZSBvYmpldG8gY29tbWl0IGZpbmFsIgorCisjOiBibGFtZS5jOjI3MzUKK21zZ2lkICItLXJldmVyc2UgYW5kIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgc3BlY2lmaWVkIGxhdGVzdCBjb21taXQiCittc2dzdHIgIiIKKyItLXJldmVyc2UgeSAtLWZpcnN0LXBhcmVudCBqdW50b3MgcmVxdWllcmVuIGVzcGVjaWZpY2FyIGVsIMO6bHRpbW8gY29tbWl0IgorCisjOiBibGFtZS5jOjI3NDQgYnVuZGxlLmM6MTY3IHJlZi1maWx0ZXIuYzoyMjAzIHJlbW90ZS5jOjE5NDIgc2VxdWVuY2VyLmM6MjAwNgorIzogc2VxdWVuY2VyLmM6NDM1OCBzdWJtb2R1bGUuYzo4NDcgYnVpbHRpbi9jb21taXQuYzoxMDQ1IGJ1aWx0aW4vbG9nLmM6Mzg4CisjOiBidWlsdGluL2xvZy5jOjk5MSBidWlsdGluL2xvZy5jOjE1MjAgYnVpbHRpbi9sb2cuYzoxOTI1IGJ1aWx0aW4vbG9nLmM6MjIxNQorIzogYnVpbHRpbi9tZXJnZS5jOjQxMiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkwCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTkyCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgImZhbGzDsyBsYSBjb25maWd1cmFjacOzbiBkZWwgY2FtaW5vIGRlIHJldmlzacOzbiIKKworIzogYmxhbWUuYzoyNzYyCittc2dpZCAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHJhbmdlIGFsb25nIGZpcnN0LXBhcmVudCBjaGFpbiIKK21zZ3N0ciAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCBqdW50b3MgcmVxdWllcmVuIHVuIHJhbmdvIGEgbG8gbGFyZ28gZGUgbGEgY2FkZW5hICIKKyJkZWwgcHJpbWVyIHBhZHJlIgorCisjOiBibGFtZS5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBwYXRoICVzIGluICVzIgorbXNnc3RyICJubyBoYXkgdW5hIHJ1dGEgJXMgZW4gJXMiCisKKyM6IGJsYW1lLmM6Mjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyIGVsIGJsb2IgJXMgcGFyYSBsYSBydXRhICVzIgorCisjOiBicmFuY2guYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQWZ0ZXIgZml4aW5nIHRoZSBlcnJvciBjYXVzZSB5b3UgbWF5IHRyeSB0byBmaXggdXBcbiIKKyJ0aGUgcmVtb3RlIHRyYWNraW5nIGluZm9ybWF0aW9uIGJ5IGludm9raW5nXG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiLiIKK21zZ3N0ciAiIgorIlxuIgorIlRyYXMgYXJyZWdsYXIgbGEgY2F1c2EgZGVsIGVycm9yIHB1ZWRlcyBpbnRlbnRhciBhcnJlZ2xhclxuIgorImxhIGluZmFtYWNpw7NuIGRlbCByYXN0cmVvIHJlbW90byBpbnZvY2FuZG9cbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgorCisjOiBicmFuY2guYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3Qgc2V0dGluZyBicmFuY2ggJXMgYXMgaXRzIG93biB1cHN0cmVhbS4iCittc2dzdHIgIkxhIHJhbWEgJXMgbm8gc2UgY29uZmlndXJhIGNvbW8gc3UgcHJvcGlvIHVwc3RyZWFtLiIKKworIzogYnJhbmNoLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiUmFtYSAnJXMnIGNvbmZpZ3VyYWRhIHBhcmEgaGFjZXIgc2VndWltaWVudG8gYSBsYSByYW1hIHJlbW90YSAnJXMnIGRlICclcycgIgorInBvciByZWJhc2UuIgorCisjOiBicmFuY2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJy4iCittc2dzdHIgIiIKKyJSYW1hICclcycgY29uZmlndXJhZGEgcGFyYSBoYWNlciBzZWd1aW1pZW50byBhIGxhIHJhbWEgcmVtb3RhICclcycgZGUgJyVzJy4iCisKKyM6IGJyYW5jaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJSYW1hICclcycgY29uZmlndXJhZGEgcGFyYSBoYWNlciBzZWd1aW1pZW50byBhIGxhIHJhbWEgbG9jYWwgJyVzJyBwb3IgcmViYXNlLiIKKworIzogYnJhbmNoLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiUmFtYSAnJXMnIGNvbmZpZ3VyYWRhIHBhcmEgaGFjZXIgc2VndWltaWVudG8gYSBsYSByYW1hIGxvY2FsICclcycuIgorCisjOiBicmFuY2guYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJSYW1hICclcycgY29uZmlndXJhZGEgcGFyYSBoYWNlciBzZWd1aW1pZW50byBhIGxhIHJlZmVyZW5jaWEgcmVtb3RhICclcycgcG9yICIKKyJyZWJhc2UuIgorCisjOiBicmFuY2guYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJy4iCittc2dzdHIgIiIKKyJSYW1hICclcycgY29uZmlndXJhZGEgcGFyYSBoYWNlciBzZWd1aW1pZW50byBhIGxhIHJlZmVyZW5jaWEgcmVtb3RhICclcycuIgorCisjOiBicmFuY2guYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIlJhbWEgJyVzJyBjb25maWd1cmFkYSBwYXJhIGhhY2VyIHNlZ3VpbWllbnRvIGEgbGEgcmVmZXJlbmNpYSBsb2NhbCAnJXMnIHBvciAiCisicmViYXNlLiIKKworIzogYnJhbmNoLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJy4iCittc2dzdHIgIiIKKyJSYW1hICclcycgY29uZmlndXJhZGEgcGFyYSBoYWNlciBzZWd1aW1pZW50byBhIGxhIHJlZmVyZW5jaWEgbG9jYWwgJyVzJy4iCisKKyM6IGJyYW5jaC5jOjExOQorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiTm8gZXMgcG9zaWJsZSBlc2NyaWJpciBsYSBjb25maWd1cmFjacOzbiBkZSBsYSByYW1hIHVwc3RyZWFtIgorCisjOiBicmFuY2guYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAiTm8gcmFzdHJlYW5kbzogaW5mb3JtYWNpw7NuIGFtYmlndWEgcGFyYSBsYSByZWZlcmVuY2lhICVzIgorCisjOiBicmFuY2guYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcycgbm8gZXMgdW4gbm9tYnJlIHbDoWxpZG8gZGUgcmFtYS4iCisKKyM6IGJyYW5jaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiVW5hIHJhbWEgbGxhbWFkYSAnJXMnIHlhIGV4aXN0ZS4iCisKKyM6IGJyYW5jaC5jOjIxMworbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZm9yemFyIGxhIGFjdHVhbGl6YWNpw7NuIGRlIGxhIHJhbWEgYWN0dWFsLiIKKworIzogYnJhbmNoLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzZXR1cCB0cmFja2luZyBpbmZvcm1hdGlvbjsgc3RhcnRpbmcgcG9pbnQgJyVzJyBpcyBub3QgYSBicmFuY2guIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgY29uZmlndXJhciBlbCByYXN0cmVvIGRlIGluZm9ybWFjacOzbjsgZWwgcHVudG8gZGUgcGFydGlkYSAnJXMnICIKKyJubyBlcyB1bmEgcmFtYS4iCisKKyM6IGJyYW5jaC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJsYSByYW1hIGRlIHVwc3RyZWFtIHNvbGljaXRhZGEgJyVzJyBubyBleGlzdGUiCisKKyM6IGJyYW5jaC5jOjIzNworbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGJhc2luZyB5b3VyIHdvcmsgb24gYW4gdXBzdHJlYW1cbiIKKyJicmFuY2ggdGhhdCBhbHJlYWR5IGV4aXN0cyBhdCB0aGUgcmVtb3RlLCB5b3UgbWF5IG5lZWQgdG9cbiIKKyJydW4gXCJnaXQgZmV0Y2hcIiB0byByZXRyaWV2ZSBpdC5cbiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIHRvIHB1c2ggb3V0IGEgbmV3IGxvY2FsIGJyYW5jaCB0aGF0XG4iCisid2lsbCB0cmFjayBpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LCB5b3UgbWF5IHdhbnQgdG8gdXNlXG4iCisiXCJnaXQgcHVzaCAtdVwiIHRvIHNldCB0aGUgdXBzdHJlYW0gY29uZmlnIGFzIHlvdSBwdXNoLiIKK21zZ3N0ciAiIgorIlxuIgorIlNpIGVzdMOhcyBwbGFuZWFuZG8gYmFzYXIgdHUgdHJhYmFqbyBlbiB1bmEgcmFtYSB1cHN0cmVhbVxuIgorInF1ZSB5YSBleGlzdGUgZW4gZWwgcmVtb3RvLCB0YWwgdmV6IG5lY2VzaXRlcyBlamVjdXRhclxuIgorIlwiZ2l0IGZldGNoXCIgcGFyYSByZWNpYmlybGEuXG4iCisiXG4iCisiU2kgZXN0w6FzIHBsYW5lYW5kbyBoYWNlciBwdXNoIGEgdW5hIG51ZXZhIHJhbWEgbG9jYWwgcXVlXG4iCisidmEgYSByYXN0cmVhciBhIHN1IGNvbnRyYXBhcnRlIHJlbW90YSwgdGFsIHZleiBxdWllcmFzIHVzYXJcbiIKKyJcImdpdCBwdXNoIC11XCIgcGFyYSBjb25maWd1cmFyIHR1IHVwc3RyZWFtIHByZWRldGVybWluYWRvIGN1YW5kbyByZWFsaXphcyAiCisiZWwgcHVzaC4iCisKKyM6IGJyYW5jaC5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIk5vbWJyZSBkZSBvYmpldG8gbm8gdsOhbGlkbzogJyVzJy4iCisKKyM6IGJyYW5jaC5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJOb21icmUgZGUgb2JqZXRvIGFtYmlndW86ICclcycuIgorCisjOiBicmFuY2guYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgYnJhbmNoIHBvaW50OiAnJXMnLiIKK21zZ3N0ciAiUHVudG8gZGUgcmFtYSBubyB2w6FsaWRvOiAnJXMnLiIKKworIzogYnJhbmNoLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICInJXMnIHlhIGhhIHNpZG8gbWFyY2FkbyBlbiAnJXMnIgorCisjOiBicmFuY2guYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBvZiB3b3JraW5nIHRyZWUgJXMgaXMgbm90IHVwZGF0ZWQiCittc2dzdHIgIkhFQUQgZGVsIMOhcmJvbCBkZSB0cmFiYWpvICVzIG5vIGVzdMOhIGFjdHVhbGl6YWRhIgorCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICInJXMnIG5vIHNlIHZlIGNvbW8gdW4gYXJjaGl2byBidW5kbGUgdjIiCisKKyM6IGJ1bmRsZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAiaGVhZGVyIG5vIHJlY29ub2NpZG8gJXMlcyAoJWQpIgorCisjOiBidW5kbGUuYzo5MCByZXJlcmUuYzo0ODAgcmVyZXJlLmM6NjkwIHNlcXVlbmNlci5jOjIyNTggc2VxdWVuY2VyLmM6MzAxNgorIzogYnVpbHRpbi9jb21taXQuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhYnJpciAnJXMnIgorCisjOiBidW5kbGUuYzoxNDMKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiQWwgcmVwb3NpdG9yaW8gbGUgZmFsdGEgZXN0b3MgY29tbWl0cyBwcmVycmVxdWlzaXRvOiIKKworIzogYnVuZGxlLmM6MTQ2Cittc2dpZCAibmVlZCBhIHJlcG9zaXRvcnkgdG8gdmVyaWZ5IGEgYnVuZGxlIgorbXNnc3RyICJzZSBuZWNlc2l0YSB1biByZXBvc2l0b3JpbyBwYXJhIHZlcmlmaWNhciB1biBidW5kbGUiCisKKyM6IGJ1bmRsZS5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiRWwgYnVuZGxlIGNvbnRpZW5lIGVzdGEgcmVmZXJlbmNpYToiCittc2dzdHJbMV0gIkVsIGJ1bmRsZSBjb250aWVuZSBlc3RhcyAlZCByZWZlcmVuY2lhczoiCisKKyM6IGJ1bmRsZS5jOjIwNAorbXNnaWQgIlRoZSBidW5kbGUgcmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkuIgorbXNnc3RyICJFbCBidW5kbGUgcmVnaXN0cmEgdW5hIGhpc3RvcmlhIGNvbXBsZXRhLiIKKworIzogYnVuZGxlLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJFbCBidW5kbGUgcmVxdWllcmUgZXN0YSByZWZlcmVuY2lhOiIKK21zZ3N0clsxXSAiRWwgYnVuZGxlIHJlcXVpZXJlIGVzdGFzICVkIHJlZmVyZW5jaWFzOiIKKworIzogYnVuZGxlLmM6MjczCittc2dpZCAidW5hYmxlIHRvIGR1cCBidW5kbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAiaW5jYXBheiBkZSBkdXBsaWNhciBidW5kbGUgZGVzY3JpcHRvciIKKworIzogYnVuZGxlLmM6MjgwCittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiTm8gc2UgcHVkbyBjcmVhciBsb3MgcGFjay1vYmpldGN0cyIKKworIzogYnVuZGxlLmM6MjkxCittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgInBhY2stb2JqZWN0cyBtdXJpw7MiCisKKyM6IGJ1bmRsZS5jOjMzMworbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgInJldi1saXN0IG11cmnDsyIKKworIzogYnVuZGxlLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICJyZWZlcmVuY2lhICclcycgZXMgZXhjbHVpZGEgcG9yIGxhcyBvcGNpb25lcyBkZSByZXYtbGlzdCIKKworIzogYnVuZGxlLmM6NDYxIGJ1aWx0aW4vbG9nLmM6MjAzIGJ1aWx0aW4vbG9nLmM6MTgxNCBidWlsdGluL3Nob3J0bG9nLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50byBubyByZWNvbm9jaWRvOiAlcyIKKworIzogYnVuZGxlLmM6NDY5Cittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgIlJlY2hhemFuZG8gY3JlYXIgdW4gYnVuZGxlIHZhY8Otby4iCisKKyM6IGJ1bmRsZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNyZWFyICclcyciCisKKyM6IGJ1bmRsZS5jOjUwNAorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAiaW5kZXgtcGFjayBtdXJpw7MiCisKKyM6IGNvbG9yLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgImNvbG9yIGludsOhbGlkbzogJS4qcyIKKworIzogY29tbWl0LmM6NTEgc2VxdWVuY2VyLmM6MjcxOSBidWlsdGluL2FtLmM6MzU5IGJ1aWx0aW4vYW0uYzo0MDMKKyM6IGJ1aWx0aW4vYW0uYzoxMzcxIGJ1aWx0aW4vYW0uYzoyMDE0IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFuYWxpemFyICVzIgorCisjOiBjb21taXQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICLCoSVzICVzIG5vIGVzIHVuIGNvbW1pdCEiCisKKyM6IGNvbW1pdC5jOjE5MworbXNnaWQgIiIKKyJTdXBwb3J0IGZvciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaXMgZGVwcmVjYXRlZFxuIgorImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgR2l0IHZlcnNpb24uXG4iCisiXG4iCisiUGxlYXNlIHVzZSBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyJ0byBjb252ZXJ0IHRoZSBncmFmdHMgaW50byByZXBsYWNlIHJlZnMuXG4iCisiXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIiIKK21zZ3N0ciAiIgorIkVsIHNvcG9ydGUgcGFyYSA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaGEgc2lkbyBkZXByZWNhZG9cbiIKKyJ5IHNlcsOhIGVsaW1pbmFkbyBlbiB1bmEgdmVyc2nDs24gZnV0dXJhIGRlIEdpdC5cbiIKKyJcbiIKKyJQb3IgZmF2b3IgdXNlIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIlxuIgorInBhcmEgY29udmVydGlyIGxvcyBncmFmdHMgZW4gcmVmcy5cbiIKKyJcbiIKKyJBcGFwYSBlc3RlIG1lbnNhamUgZWplY3V0YW5kb1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiIgorCisjOiBjb21taXQuYzoxMTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIkNvbW1pdCAlcyB0aWVuZSB1bmEgZmlybWEgR1BHIG5vIGNvbmZpYWJsZSwgcHJldGVuZGlkYW1lbnRlIHBvciAlcy4iCisKKyM6IGNvbW1pdC5jOjExNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIkNvbW1pdCAlcyB0aWVuZSB1bmEgbWFsYSBmaXJtYSBHUEcgcHJldGVuZGlkYW1lbnRlIHBvciAlcy4iCisKKyM6IGNvbW1pdC5jOjExNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlLiIKK21zZ3N0ciAiQ29tbWl0ICVzIG5vIHRpZW5lIHVuYSBmaXJtYSBHUEcuIgorCisjOiBjb21taXQuYzoxMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAiRWwgQ29tbWl0ICVzIHRpZW5lIHVuYSBidWVuYSBmaXJtYSBHUEcgcG9yICVzXG4iCisKKyM6IGNvbW1pdC5jOjE0MTcKK21zZ2lkICIiCisiV2FybmluZzogY29tbWl0IG1lc3NhZ2UgZGlkIG5vdCBjb25mb3JtIHRvIFVURi04LlxuIgorIllvdSBtYXkgd2FudCB0byBhbWVuZCBpdCBhZnRlciBmaXhpbmcgdGhlIG1lc3NhZ2UsIG9yIHNldCB0aGUgY29uZmlnXG4iCisidmFyaWFibGUgaTE4bi5jb21taXRlbmNvZGluZyB0byB0aGUgZW5jb2RpbmcgeW91ciBwcm9qZWN0IHVzZXMuXG4iCittc2dzdHIgIiIKKyJQZWxpZ3JvOiBlbCBtZW5zYWplIGRlbCBjb21taXQgbm8gc2UgYWp1c3RhIGEgVVRGLTguXG4iCisiVGFsIHZleiBxdWllcmFzIGVubWVuZGFybG8gZGVzcHXDqXMgZGUgYXJyZWdsYXIgZWwgbWVuc2FqZSwgbyBhcnJlZ2xhciBsYVxuIgorInZhcmlhYmxlIGRlIGNvbmZpZ3VyYWNpw7NuIGkxOG4uY29tbWl0ZW5jb2RpbmcgcGFyYSBsYSBjb2RpZmljYWNpw7NuIHF1ZSB1c2EgIgorInR1IHByb3llY3RvLlxuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjIKK21zZ2lkICJjb21taXQtZ3JhcGggZmlsZSBpcyB0b28gc21hbGwiCittc2dzdHIgImFyY2hpdm8gY29tbWl0LWdyYXBoIGVzIG11eSBwZXF1ZcOxbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBzaWduYXR1cmUgJVggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlICVYIgorbXNnc3RyICJmaXJtYSAlWCBlbiBjb21taXQtZ3JhcGggbm8gY29uY3VlcmRhIGNvbiBmaXJtYSAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgInZlcnNpw7NuIGRlIGNvbW1pdC1ncmFwaCAlWCBubyBjb25jdWVyZGEgY29uIHZlcnNpw7NuICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICJ2ZXJzacOzbiBkZSBoYXNoIGRlIGNvbW1pdC1ncmFwaCAlWCBubyBjb25jdWVyZGEgY29uIHZlcnNpw7NuICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoyMjYKK21zZ2lkICJjb21taXQtZ3JhcGggY2h1bmsgbG9va3VwIHRhYmxlIGVudHJ5IG1pc3Npbmc7IGZpbGUgbWF5IGJlIGluY29tcGxldGUiCittc2dzdHIgIiIKKyJmYWx0YSB0YWJsYSBkZSBsb29rdXAgZGVsIGNodW5rIGVuIGNvbW1pdC1ncmFwaDsgZWwgYXJjaGl2byBwdWVkZSBlc3RhciAiCisiaW5jb21wbGV0byIKKworIzogY29tbWl0LWdyYXBoLmM6MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBpbXByb3BlciBjaHVuayBvZmZzZXQgJTA4eCUwOHgiCittc2dzdHIgIm9mZnNldCBkZWwgY2h1bmsgZGUgY29tbWl0LWdyYXBoIGluYXByb3BpYWRvICUwOHglMDh4IgorCisjOiBjb21taXQtZ3JhcGguYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGlkICUwOHggYXBwZWFycyBtdWx0aXBsZSB0aW1lcyIKK21zZ3N0ciAiaWQgZGUgY2h1bmsgZGUgY29tbWl0LWdyYXBoICUwOHggcGFyZWNlIHRlbmVyIG3Dumx0aXBsZXMgdGllbXBvcyIKKworIzogY29tbWl0LWdyYXBoLmM6MzQzCittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBubyBiYXNlIGdyYXBocyBjaHVuayIKK21zZ3N0ciAiY29tbWl0LWdyYXBoIG5vIHRpZW5lIHVuYSBjaHVuayBiYXNlIGRlIGdyYXBocyIKKworIzogY29tbWl0LWdyYXBoLmM6MzUzCittc2dpZCAiY29tbWl0LWdyYXBoIGNoYWluIGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJjYWRlbmEgY29tbWl0LWdyYXBoIG5vIGNvbmN1ZXJkYSIKKworIzogY29tbWl0LWdyYXBoLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0LWdyYXBoIGNoYWluOiBsaW5lICclcycgbm90IGEgaGFzaCIKK21zZ3N0ciAiY2FkZW5hIGRlIGNvbW1pdC1ncmFwaCBpbnbDoWxpZGE6IGzDrW5lYSAnJXMnIG5vIGVzIHVuIGhhc2giCisKKyM6IGNvbW1pdC1ncmFwaC5jOjQyNQorbXNnaWQgInVuYWJsZSB0byBmaW5kIGFsbCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZW5jb250cmFyIGxvcyBhcmNoaXZvcyBjb21taXQtZ3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU1OCBjb21taXQtZ3JhcGguYzo2MTgKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBwb3NpdGlvbi4gY29tbWl0LWdyYXBoIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICJwb3NpY2nDs24gZGUgY29tbWl0IGludsOhbGlkYS4gY29tbWl0LWdyYXBoIGVzdMOhIHByb2JhYmxlbWVudGUgY29ycnVwdG8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZW5jb250cmFyIGNvbW1pdCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6ODUyIGJ1aWx0aW4vYW0uYzoxMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYW5hbGl6YXIgZWwgY29tbWl0ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDExIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHR5cGUgb2Ygb2JqZWN0ICVzIgorbXNnc3RyICJpbmNhcGF6IGRlIG9idGVuZXIgZWwgdGlwbyBkZSBvYmpldG86ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDQzCittc2dpZCAiTG9hZGluZyBrbm93biBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiQ2FyZ2FuZG8gY29tbWl0cyBjb25vY2lkb3MgZW4gY29tbWl0IGdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDYwCittc2dpZCAiRXhwYW5kaW5nIHJlYWNoYWJsZSBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiRXhwYW5kaWVuZG8gY29tbWl0cyBhbGNhbnphYmxlcyBlbiBjb21taXQgZ3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNzkKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJMaW1waWFuZG8gbWFyY2FzIGRlIGNvbW1pdHMgZW4gY29tbWl0IGdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDk4Cittc2dpZCAiQ29tcHV0aW5nIGNvbW1pdCBncmFwaCBnZW5lcmF0aW9uIG51bWJlcnMiCittc2dzdHIgIkNhbGN1bGFuZG8gbsO6bWVyb3MgZGUgZ2VuZXJhY2nDs24gZGUgY29tbWl0IGdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2siCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2tzIgorbXNnc3RyWzBdICJFbmNvbnRyYW5kbyBjb21taXRzIHBhcmEgY29tbWl0IGdyYXBoIGVuICVkIHBhY2siCittc2dzdHJbMV0gIkVuY29udHJhbmRvIGNvbW1pdHMgcGFyYSBjb21taXQgZ3JhcGggZW4gJWQgcGFja3MiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgYWRkaW5nIHBhY2sgJXMiCittc2dzdHIgImVycm9yIGFncmVnYW5kbyBwYWNrICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgaW5kZXggZm9yICVzIgorbXNnc3RyICJlcnJvciBhYnJpZW5kbyBpbmRleCBwYXJhICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBmcm9tICVkIHJlZnMiCittc2dzdHJbMF0gIkVuY29udHJhbmRvIGNvbW1pdHMgcGFyYSBjb21taXQgZ3JhcGggZGUgJWQgcmVmIgorbXNnc3RyWzFdICJFbmNvbnRyYW5kbyBjb21taXRzIHBhcmEgY29tbWl0IGdyYXBoIGRlICVkIHJlZnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgb2JqZWN0IGlkOiAlcyIKK21zZ3N0ciAiaWQgZGUgb2JqZXRvIGNvbW1pdDogJXMgaW52w6FsaWRvIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjQ5Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggYW1vbmcgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIkVuY29udHJhbmRvIGNvbW1pdHMgcGFyYSBjb21taXQgZ3JhcGggZW50cmUgbG9zIG9iamV0b3MgZW1wYXF1ZXRhZG9zIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjY0Cittc2dpZCAiQ291bnRpbmcgZGlzdGluY3QgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIkNvbnRhbmRvIGNvbW1pdHMgZGlzdGludG9zIGVuIGNvbW1pdCBncmFwaCIKKworIzogY29tbWl0LWdyYXBoLmM6MTI5NAorbXNnaWQgIkZpbmRpbmcgZXh0cmEgZWRnZXMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJFbmNvbnRyYW5kbyBlc3F1aW5hcyBleHRyYSBlbiBjb21taXQgZ3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNDAKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29ycmVjdCBudW1iZXIgb2YgYmFzZSBncmFwaCBpZHMiCittc2dzdHIgImZhbGzDsyBhbCBlc2NyaWJpciBlbCBuw7ptZXJvIGNvcnJlY3RvIGRlIGlkcyBkZSBiYXNlIGdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzczIG1pZHguYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGNyZWFyIGRpcmVjdG9yaW9zIHByaW5jaXBhbGVzIHBhcmEgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzODUgYnVpbHRpbi9pbmRleC1wYWNrLmM6MzA2IGJ1aWx0aW4vcmVwYWNrLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY3JlYXIgJyVzJyIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzcyIKK21zZ2lkX3BsdXJhbCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3NlcyIKK21zZ3N0clswXSAiRXNjcmliaWVuZG8gY29tbWl0IGdyYXBoIGVuICVkIHBhc28iCittc2dzdHJbMV0gIkVzY3JpYmllbmRvIGNvbW1pdCBncmFwaCBlbiAlZCBwYXNvcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ4NgorbXNnaWQgInVuYWJsZSB0byBvcGVuIGNvbW1pdC1ncmFwaCBjaGFpbiBmaWxlIgorbXNnc3RyICJubyBzZSBwdWRvIGFicmlyIGxhIGNhZGVuYSBkZSBhcmNoaXZvcyBjb21taXQtZ3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0OTgKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIGJhc2UgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIm5vIHNlIHB1ZG8gcmVub21icmFyIGVsIGFyY2hpdm8gYmFzZSBjb21taXQtZ3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE1MTgKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIHRlbXBvcmFyeSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiZmFsbMOzIGFsIHJlbm9tYnJhciBlbCBhcmNoaXZvIHRlbXBvcmFsIGNvbW1pdC1ncmFwaCIKKworIzogY29tbWl0LWdyYXBoLmM6MTYzMQorbXNnaWQgIlNjYW5uaW5nIG1lcmdlZCBjb21taXRzIgorbXNnc3RyICJFc2NhbmVhbmRvIGNvbW1pdHMgZnVzaW9uYWRvcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGR1cGxpY2F0ZSBjb21taXQgaWQgJXMiCittc2dzdHIgImlkIGRlIGNvbW1pdCBkdXBsaWNhZG8gaW5lc3BlcmFkbyAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTY2NQorbXNnaWQgIk1lcmdpbmcgY29tbWl0LWdyYXBoIgorbXNnc3RyICJGdXNpb25hbmRvIGNvbW1pdC1ncmFwaCIKKworIzogY29tbWl0LWdyYXBoLmM6MTg0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgY29tbWl0IGdyYXBoIGZvcm1hdCBjYW5ub3Qgd3JpdGUgJWQgY29tbWl0cyIKK21zZ3N0ciAiZWwgZm9ybWF0byBkZSBncsOhZmljb3MgZGUgY29tbWl0IG5vIHB1ZGVkZSBlc2NyaWJpciAlZCBjb21taXRzIgorCisjOiBjb21taXQtZ3JhcGguYzoxODU1Cittc2dpZCAidG9vIG1hbnkgY29tbWl0cyB0byB3cml0ZSBncmFwaCIKK21zZ3N0ciAiZGVtYXNpYWRvcyBjb21taXRzIHBhcmEgZXNjcmliaXIgZWwgZ3LDoWZpY28iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NDQKK21zZ2lkICJ0aGUgY29tbWl0LWdyYXBoIGZpbGUgaGFzIGluY29ycmVjdCBjaGVja3N1bSBhbmQgaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgIiIKKyJlbCBhcmNoaXZvIGRlIGNvbW1pdC1ncmFwaCB0aWVuZSBjaGVja3N1bXMgaW5jb3JyZWN0b3MgeSBwcm9iYWJsZW1lbnRlIGVzdMOhICIKKyJjb3JydXB0byIKKworIzogY29tbWl0LWdyYXBoLmM6MTk1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBPSUQgb3JkZXI6ICVzIHRoZW4gJXMiCittc2dzdHIgImNvbW1pdC1ncmFwaCB0aWVuZSB1biBvcmRlbiBkZSBPSUQgaW5jb3JyZWN0bzogJXMgbHVlZ28gJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NjQgY29tbWl0LWdyYXBoLmM6MTk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBmYW5vdXQgdmFsdWU6IGZhbm91dFslZF0gPSAldSAhPSAldSIKK21zZ3N0ciAiY29tbWl0LWdyYXBoIHRpZW5lIHVuIHZhbG9yIGZhbm91dCBpbmNvcnJlY3RvOiBmYW5vdXRbJWRdID0gJXUgIT0gJXUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiZmFsbMOzIGFsIGFuYWxpemFyIGNvbW1pdCAlcyBwYXJhIGNvbW1pdC1ncmFwaCIKKworIzogY29tbWl0LWdyYXBoLmM6MTk4OQorbXNnaWQgIlZlcmlmeWluZyBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiVmVyaWZpY2FuZG8gY29tbWl0cyBlbiBjb21taXQgZ3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIG9iamVjdCBkYXRhYmFzZSBmb3IgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisiZmFsbMOzIGFsIGFuYWxpemFyIGVsIGNvbW1pdCAlcyBkZSBsYSBiYXNlIGRlIGRhdG9zIGRlIG9iamV0b3MgcGFyYSBjb21taXQtIgorImdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDEwCisjLCBjLWZvcm1hdAorbXNnaWQgInJvb3QgdHJlZSBPSUQgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJXMgIT0gJXMiCittc2dzdHIgIsOhcmJvbCByYcOteiBPSUQgcGFyYSBjb21taXQgJXMgZW4gY29tbWl0LWdyYXBoIGVzICVzICE9ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIGlzIHRvbyBsb25nIgorbXNnc3RyICJsaXN0YSBwYWRyZSBkZSBjb21taXQtZ3JhcGggcGFyYSBjb21taXQgJXMgZXMgbXV5IGxhcmdhIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgZm9yICVzIGlzICVzICE9ICVzIgorbXNnc3RyICJwYWRyZSBkZSBjb21taXQtZ3JhcGggcGFyYSAlcyBlcyAlcyAhPSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjA0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyB0ZXJtaW5hdGVzIGVhcmx5IgorbXNnc3RyICJsaXN0YSBwYWRyZSBkZSBjb21taXQtZ3JhcGggcGFyYSBjb21taXQgJXMgdGVybWluYSBhbnRlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjA0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY29tbWl0LWdyYXBoIGhhcyBnZW5lcmF0aW9uIG51bWJlciB6ZXJvIGZvciBjb21taXQgJXMsIGJ1dCBub24temVybyBlbHNld2hlcmUiCittc2dzdHIgIiIKKyJjb21taXQtZ3JhcGggaGEgZ2VuZXJhZG8gbsO6bWVybyBjZXJvIHBhcmEgJXMsIHBlcm8gbm8tY2VybyBwYXJhIGxvcyBkZW3DoXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgbm9uLXplcm8gZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGNvbW1pdCAlcywgYnV0IHplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisiY29tbWl0LWdyYXBoIHRpZW5lIGdlbmVyYWNpw7NuIG5vLWNlcm8gcGFyYSAlcywgcGVybyBjZXJvIHBhcmEgbG9zIGRlbcOhcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggZ2VuZXJhdGlvbiBmb3IgY29tbWl0ICVzIGlzICV1ICE9ICV1IgorbXNnc3RyICJnZW5lcmFjacOzbiBjb21taXQtZ3JhcGggcGFyYSBjb21taXQgJXMgZXMgJXUgIT0gJXUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0IGRhdGUgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJTxQUkl1TUFYPiAhPSAlPFBSSXVNQVg+IgorbXNnc3RyICIiCisiZmVjaGEgZGUgY29tbWl0IHBhcmEgY29tbWl0ICVzIGVuIGNvbW1pdC1ncmFwaCBlcyAlPFBSSXVNQVg+ICE9ICU8UFJJdU1BWD4iCisKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA2IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAibWVtb3JpYSBhZ290YWRhIgorCisjOiBjb25maWcuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4Y2VlZGVkIG1heGltdW0gaW5jbHVkZSBkZXB0aCAoJWQpIHdoaWxlIGluY2x1ZGluZ1xuIgorIlx0JXNcbiIKKyJmcm9tXG4iCisiXHQlc1xuIgorIlRoaXMgbWlnaHQgYmUgZHVlIHRvIGNpcmN1bGFyIGluY2x1ZGVzLiIKK21zZ3N0ciAiIgorInByb2Z1bmRpZGFkIG3DoXhpbWEgZGUgaW5jbHVzacOzbiBleGNlZGlkYSAoJWQpIG1pZW50cmFzIHNlIGluY2x1w61hXG4iCisiXHQlc1xuIgorImRlXG4iCisiXHQlc1xuIgorIkVzdG8gcHVlZGUgc2VyIGNhdXNhZG8gcG9yIGluY2x1c2lvbmVzIGNpcmN1bGFyZXMuIgorCisjOiBjb25maWcuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4cGFuZCBpbmNsdWRlIHBhdGggJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBleHBhbmRpciBydXRhcyBkZSBpbmNsdXNpw7NuICclcyciCisKKyM6IGNvbmZpZy5jOjE1MQorbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlcyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAiaW5jbHVzaW9uZXMgZGUgY29uZmlndXJhY2nDs24gcmVsYXRpdmFzIHRpZW5lbiBxdWUgdmVuaXIgZGUgYXJjaGl2b3MiCisKKyM6IGNvbmZpZy5jOjE5NworbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAiIgorImxhIGNvbmZpZ3VyYWNpw7NuIHJlbGF0aXZhIGluY2x1eWUgY29uZGljaW9uYWxlcyBxdWUgZGViZW4gdmVuaXIgZGUgYXJjaGl2b3MiCisKKyM6IGNvbmZpZy5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiBhIHNlY3Rpb246ICVzIgorbXNnc3RyICJsbGF2ZSBubyBjb250aWVuZSB1bmEgc2VjY2nDs246ICVzIgorCisjOiBjb25maWcuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gdmFyaWFibGUgbmFtZTogJXMiCittc2dzdHIgImxsYXZlIG5vIGNvbnRpZW5lIGVsIG5vbWJyZSBkZSB2YXJpYWJsZTogJXMiCisKKyM6IGNvbmZpZy5jOjQwNiBzZXF1ZW5jZXIuYzoyNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAibGxhdmUgaW52w6FsaWRhOiAlcyIKKworIzogY29uZmlnLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IChuZXdsaW5lKTogJXMiCittc2dzdHIgImxsYXZlIGludsOhbGlkYSAobnVldmEgbMOtbmVhKTogJXMiCisKKyM6IGNvbmZpZy5jOjQ0OCBjb25maWcuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29uZmlnIHBhcmFtZXRlcjogJXMiCittc2dzdHIgInBhcsOhbWV0cm8gZGUgY29uZmlndXJhY2nDs24gbWFsb2dyYWRvOiAlcyIKKworIzogY29uZmlnLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGZvcm1hdCBpbiAlcyIKK21zZ3N0ciAiZm9ybWF0byBtYWxvZ3JhZG8gZW4gJXMiCisKKyM6IGNvbmZpZy5jOjgyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gYmxvYiAlcyIKK21zZ3N0ciAibWFsYSBsw61uZWEgZGUgY29uZmlnICVkIGVuIGVsIGJsb2IgJXMiCisKKyM6IGNvbmZpZy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gZmlsZSAlcyIKK21zZ3N0ciAibWFsYSBsw61uZWEgZGUgY29uZmlnICVkIGVuIGVsIGFyY2hpdm8gJXMiCisKKyM6IGNvbmZpZy5jOjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIm1hbGEgbMOtbmVhIGRlIGNvbmZpZyAlZCBlbiBsYSBlbnRyYWRhIHN0YW5kYXJkIgorCisjOiBjb25maWcuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN1Ym1vZHVsZS1ibG9iICVzIgorbXNnc3RyICJtYWxhIGzDrW5lYSBkZSBjb25maWcgJWQgZW4gZWwgc3VibcOzZHVsby1ibG9iICVzIgorCisjOiBjb25maWcuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIKK21zZ3N0ciAibWFsYSBsw61uZWEgZGUgY29uZmlnICVkIGVuIGxhIGzDrW5lYSBkZSBjb21hbmRvICVzIgorCisjOiBjb25maWcuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIgorbXNnc3RyICJtYWxhIGzDrW5lYSBkZSBjb25maWcgJWQgZW4gJXMiCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgIm91dCBvZiByYW5nZSIKK21zZ3N0ciAiZnVlcmEgZGUgcmFuZ28iCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgImludmFsaWQgdW5pdCIKK21zZ3N0ciAidW5pZGFkIGludsOhbGlkYSIKKworIzogY29uZmlnLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAibWFsIHZhbG9yIGRlIGNvbmZpZyBudW3DqXJpY2EgJyVzJyBwYXJhICclcyc6ICVzIgorCisjOiBjb25maWcuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gYmxvYiAlczogJXMiCittc2dzdHIgIm1hbCB2YWxvciBkZSBjb25maWcgbnVtw6lyaWNhICclcycgcGFyYSAnJXMnIGVuIGVsIGJsb2IgJXM6ICVzIgorCisjOiBjb25maWcuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIgorbXNnc3RyICJtYWwgdmFsb3IgZGUgY29uZmlnIG51bcOpcmljYSAnJXMnIHBhcmEgJyVzJyBlbiBlbCBhcmNoaXZvICVzOiAlcyIKKworIzogY29uZmlnLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogJXMiCittc2dzdHIgIm1hbCB2YWxvciBkZSBjb25maWcgbnVtw6lyaWNhICclcycgcGFyYSAnJXMnIGVuIGxhIGVudHJhZGEgc3RhbmRhcmQ6ICVzIgorCisjOiBjb25maWcuYzoxMDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN1Ym1vZHVsZS1ibG9iICVzOiAlcyIKK21zZ3N0ciAiIgorIm1hbCB2YWxvciBkZSBjb25maWcgbnVtw6lyaWNhICclcycgcGFyYSAnJXMnIGVuIGVsIHN1Ym3Ds2R1bG8tYmxvYiAlczogJXMiCisKKyM6IGNvbmZpZy5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gY29tbWFuZCBsaW5lICVzOiAlcyIKK21zZ3N0ciAiIgorIm1hbCB2YWxvciBkZSBjb25maWcgbnVtw6lyaWNhICclcycgcGFyYSAnJXMnIGVuIGxhIGzDrW5lYSBkZSBjb21hbmRvICVzOiAlcyIKKworIzogY29uZmlnLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgIm1hbCB2YWxvciBkZSBjb25maWcgbnVtw6lyaWNhICclcycgcGFyYSAnJXMnIGVuICVzOiAlcyIKKworIzogY29uZmlnLmM6MTEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhwYW5kIHVzZXIgZGlyIGluOiAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgZXhwYW5kaXIgZWwgZGlyZWN0b3JpbyBkZSB1c3VhcmlvIGVuOiAnJXMnIgorCisjOiBjb25maWcuYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIHBhcmEgJyVzJyBubyBlcyB1bmEgbWFyY2EgZGUgdGllbXBvIHbDoWxpZGEiCisKKyM6IGNvbmZpZy5jOjEyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJicmV2IGxlbmd0aCBvdXQgb2YgcmFuZ2U6ICVkIgorbXNnc3RyICJsYXJnbyBkZSBhYnJldmlhdHVyYSBmdWVyYSBkZSByYW5nbzogJWQiCisKKyM6IGNvbmZpZy5jOjEyMjIgY29uZmlnLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAibml2ZWwgZGUgY29tcHJlc2nDs24gZGUgemxpYiBlcnLDs25lbyAlZCIKKworIzogY29uZmlnLmM6MTMyNQorbXNnaWQgImNvcmUuY29tbWVudENoYXIgc2hvdWxkIG9ubHkgYmUgb25lIGNoYXJhY3RlciIKK21zZ3N0ciAiY29yZS5jb21tZW50Q2hhciBkZWJlcsOtYSB0ZW5lciBzb2xvIHVuIGNhcmFjdGVyIgorCisjOiBjb25maWcuYzoxMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIKK21zZ3N0ciAibW9kbyBpbnbDoWxpZG8gZGUgY3JlYWNpw7NuIGRlIG9iamV0b3M6ICVzIgorCisjOiBjb25maWcuYzoxNDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgInZhbG9yIG1hbGZvcm1hZG8gcGFyYSAlcyIKKworIzogY29uZmlnLmM6MTQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAidmFsb3IgbWFsZm9ybWFkbyBwYXJhICVzOiAlcyIKKworIzogY29uZmlnLmM6MTQ1NworbXNnaWQgIm11c3QgYmUgb25lIG9mIG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsIHVwc3RyZWFtIG9yIGN1cnJlbnQiCittc2dzdHIgImRlYmUgc2VyIHVubyBkZSBub3RoaW5nLCBtYXRjaGluZywgc2ltcGxlLCB1cHN0cmVhbSBvIGN1cnJlbnQiCisKKyM6IGNvbmZpZy5jOjE1MTggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTQxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICJuaXZlbCBkZSBjb21wcmVzacOzbiBkZSBwYWNrIGVycsOzbmVvICVkIgorCisjOiBjb25maWcuYzoxNjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIGNvbmZpZyBibG9iIG9iamVjdCAnJXMnIgorbXNnc3RyICJpbmNhcGF6IGRlIGNhcmdhciBjb25maWd1cmFjacOzbiBkZSBvYmpldG8gYmxvYiAnJXMnIgorCisjOiBjb25maWcuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgYmxvYiIKK21zZ3N0ciAicmVmZXJlbmNpYSAnJXMnIG5vIGFwdW50YSBhIHVuIGJsb2IiCisKKyM6IGNvbmZpZy5jOjE2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgY29uZmlnIGJsb2IgJyVzJyIKK21zZ3N0ciAibm8gc2UgcG9zaWJsZSByZXNvbHZlciBjb25maWd1cmFjacOzbiBkZSBibG9iICclcyciCisKKyM6IGNvbmZpZy5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGFuYWxpemFyICVzIgorCisjOiBjb25maWcuYzoxNzQzCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIm5vIGVzIHBvc2libGUgYW5hbGl6YXIgbGEgY29uZmlndXJhY2nDs24gZGUgbGEgbMOtbmVhIGRlIGNvbWFuZG8iCisKKyM6IGNvbmZpZy5jOjIwOTcKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgIiIKKyJlcnJvciBkZXNjb25vY2lkbyBvY3VycmnDsyBtaWVudHJhcyBzZSBsZcOtYW4gbG9zIGFyY2hpdm9zIGRlIGNvbmZpZ3VyYWNpw7NuIgorCisjOiBjb25maWcuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgJXM6ICclcyciCittc2dzdHIgIkludsOhbGlkbyAlczogJyVzJyIKKworIzogY29uZmlnLmM6MjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgdmFsdWUgJyVkJyBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxMDAiCittc2dzdHIgInZhbG9yIHNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSAnJWQnIGRlYmUgZXN0YXIgZW50cmUgMCB5IDEwMCIKKworIzogY29uZmlnLmM6MjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyVzJyBmcm9tIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIm5vIGVzIHBvc2libGUgYW5hbGl6YXIgJyVzJyBkZSBsYSBjb25maWd1cmFjacOzbiBkZSBsYSBsw61uZWEgZGUgY29tYW5kbyIKKworIzogY29uZmlnLmM6MjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIHZhcmlhYmxlICclcycgaW4gZmlsZSAnJXMnIGF0IGxpbmUgJWQiCittc2dzdHIgIm1hbGEgdmFyaWFibGUgZGUgY29uZmlnICclcycgZW4gZWwgYXJjaGl2byAnJXMnIGVuIGxhIGzDrW5lYSAlZCIKKworIzogY29uZmlnLmM6MjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZSAnJXMnIgorbXNnc3RyICJub21icmUgZGUgc2VjY2nDs24gaW52w6FsaWRvICclcyciCisKKyM6IGNvbmZpZy5jOjI0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiJXMgdGllbmUgbcO6bHRpcGxlcyB2YWxvcmVzIgorCisjOiBjb25maWcuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJmYWxsw7MgYWwgZXNjcmliaXIgbnVldm8gYXJjaGl2byBkZSBjb25maWd1cmFjacOzbiAlcyIKKworIzogY29uZmlnLmM6Mjc1NCBjb25maWcuYzozMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb2NrIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGJsb3F1ZWFyIGFyY2hpdm8gZGUgY29uZmlndXJhY2nDs24gJXMiCisKKyM6IGNvbmZpZy5jOjI3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyAlcyIKK21zZ3N0ciAiYWJyaWVuZG8gJXMiCisKKyM6IGNvbmZpZy5jOjI4MDAgYnVpbHRpbi9jb25maWcuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAicGF0csOzbiBpbnbDoWxpZG86ICVzIgorCisjOiBjb25maWcuYzoyODI1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgImFyY2hpdm8gZGUgY29uZmlndXJhY2nDs24gaW52w6FsaWRvOiAlcyIKKworIzogY29uZmlnLmM6MjgzOCBjb25maWcuYzozMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgImZzdGF0IG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiZnN0YXQgZW4gJXMgZmFsbMOzIgorCisjOiBjb25maWcuYzoyODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICclcyciCittc2dzdHIgIm5vIGVzIHBvc2libGUgaGFjZXIgbW1hcCAnJXMnIgorCisjOiBjb25maWcuYzoyODU4IGNvbmZpZy5jOjMwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2htb2Qgb24gJXMgZmFpbGVkIgorbXNnc3RyICJjaG1vZCBlbiAlcyBmYWxsw7MiCisKKyM6IGNvbmZpZy5jOjI5NDMgY29uZmlnLmM6MzE5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZXNjcmliaXIgZWwgYXJjaGl2byBkZSBjb25maWd1cmFjacOzbiAlcyIKKworIzogY29uZmlnLmM6Mjk3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0ICclcycgdG8gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjb25maWd1cmFyICclcycgYSAnJXMnIgorCisjOiBjb25maWcuYzoyOTc5IGJ1aWx0aW4vcmVtb3RlLmM6NjU1IGJ1aWx0aW4vcmVtb3RlLmM6ODQ5IGJ1aWx0aW4vcmVtb3RlLmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1bnNldCAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGRlc2FjdGl2YXIgJyVzJyIKKworIzogY29uZmlnLmM6MzA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZTogJXMiCittc2dzdHIgInNlY2Npw7NuIGRlIG5vbWJyZSBpbnbDoWxpZGE6ICVzIgorCisjOiBjb25maWcuYzozMjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgdmFsdWUgZm9yICclcyciCittc2dzdHIgInZhbG9yIGZhbHRhbnRlIHBhcmEgJyVzJyIKKworIzogY29ubmVjdC5jOjYxCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1cG9uIGluaXRpYWwgY29udGFjdCIKK21zZ3N0ciAiZWwgcmVtb3RvIHNlIGNvbGfDsyBlbiBlbCBjb250YWN0byBpbmljaWFsIgorCisjOiBjb25uZWN0LmM6NjMKK21zZ2lkICIiCisiQ291bGQgbm90IHJlYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS5cbiIKKyJcbiIKKyJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHNcbiIKKyJhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZG8gbGVlciBkZWwgcmVwb3NpdG9yaW8gcmVtb3RvLlxuIgorIlxuIgorIlBvciBmYXZvciBhc2Vnw7pyYXRlIHF1ZSB0aWVuZXMgbG9zIHBlcm1pc29zIGRlIGFjY2VzbyBjb3JyZWN0b3NcbiIKKyJ5IHF1ZSBlbCByZXBvc2l0b3JpbyBleGlzdGUuIgorCisjOiBjb25uZWN0LmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCAnJXMnIgorbXNnc3RyICJzZXJ2aWRvciBubyBzb3BvcnRhICclcyciCisKKyM6IGNvbm5lY3QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBmZWF0dXJlICclcyciCittc2dzdHIgInNlcnZpZG9yIG5vIHNvcG9ydGEgZmVhdHVyZSAnJXMnIgorCisjOiBjb25uZWN0LmM6MTE0Cittc2dpZCAiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgY2FwYWJpbGl0aWVzIgorbXNnc3RyICJzZSBlc3BlcmEgZmx1c2ggdHJhcyBjYXBhY2lkYWRlcyIKKworIzogY29ubmVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBjYXBhYmlsaXRpZXMgYWZ0ZXIgZmlyc3QgbGluZSAnJXMnIgorbXNnc3RyICJpZ25vcmFuZG8gY2FwYWNpZGFkZXMgdHJhcyBwcmltZXJhIGzDrW5lYSAnJXMnIgorCisjOiBjb25uZWN0LmM6MjUyCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgY2FwYWJpbGl0aWVzXnt9IgorbXNnc3RyICJlcnJvciBkZSBwcm90b2NvbG86IGNhcGFjaWRhZGVzIGltcHJldmlzdGFzXnt9IgorCisjOiBjb25uZWN0LmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGFsbG93IHNoYS0xLCBnb3QgJyVzJyIKK21zZ3N0ciAiZXJyb3IgZGUgcHJvdG9jb2xvOiBzaGEtMSBzdXBlcmZpY2lhbCBlc3BlcmFkbywgc2Ugb2J0dXZvICclcyciCisKKyM6IGNvbm5lY3QuYzoyNzUKK21zZ2lkICJyZXBvc2l0b3J5IG9uIHRoZSBvdGhlciBlbmQgY2Fubm90IGJlIHNoYWxsb3ciCittc2dzdHIgImVsIHJlcG9zaXRvcmlvIGVuIGVsIG90cm8gZmluYWwgbm8gcHVlZGUgc2VyIHN1cGVyZmljaWFsIgorCisjOiBjb25uZWN0LmM6MzEzCittc2dpZCAiaW52YWxpZCBwYWNrZXQiCittc2dzdHIgInBhcXVldGUgaW52w6FsaWRvIgorCisjOiBjb25uZWN0LmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkICclcyciCittc2dzdHIgImVycm9yIGRlIHByb3RvY29sbzogJyVzJyBpbmVzcGVyYWRvIgorCisjOiBjb25uZWN0LmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbHMtcmVmcyByZXNwb25zZTogJXMiCittc2dzdHIgInJlc3B1ZXN0YSBkZSByZWZlcmVuY2lhcyBscy1yZWZzIGludsOhbGlkYTogJXMiCisKKyM6IGNvbm5lY3QuYzo0NDUKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciByZWYgbGlzdGluZyIKK21zZ3N0ciAiZmx1c2ggZXNwZXJhZG8gdHJhcyBsaXN0YWRvIGRlIHJlZnMiCisKKyM6IGNvbm5lY3QuYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgJyVzJyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJwcm90b2NvbG8gJyVzJyBubyBlcyBzb3BvcnRhZG8iCisKKyM6IGNvbm5lY3QuYzo1OTUKK21zZ2lkICJ1bmFibGUgdG8gc2V0IFNPX0tFRVBBTElWRSBvbiBzb2NrZXQiCittc2dzdHIgIm5vIGVzIHBvc2libGUgY29uZmlndXJhciBTT19LRUVQQUxJVkUgZW4gZWwgc29ja2V0IgorCisjOiBjb25uZWN0LmM6NjM1IGNvbm5lY3QuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9va2luZyB1cCAlcyAuLi4gIgorbXNnc3RyICJSZXZpc2FuZG8gJXMuLi4gIgorCisjOiBjb25uZWN0LmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIgorbXNnc3RyICJubyBzZSBwdWVkZSByZXZpc2FyICVzIChwdWVydG8gJXMpICglcykiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkxvb2tpbmcgdXAgJXMgLi4uICIKKyM6IGNvbm5lY3QuYzo2NDMgY29ubmVjdC5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZG9uZS5cbiIKKyJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgorbXNnc3RyICIiCisiaGVjaG8uXG4iCisiQ29uZWN0YW5kbyBhICVzIChwdWVydG8gJXMpIC4uLiAiCisKKyM6IGNvbm5lY3QuYzo2NjUgY29ubmVjdC5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIGNvbm5lY3QgdG8gJXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJubyBlcyBwb3NpYmxlIGNvbmVjdGFyIGEgJXM6XG4iCisiJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCisjOiBjb25uZWN0LmM6NjcxIGNvbm5lY3QuYzo3NDgKK21zZ2lkICJkb25lLiIKK21zZ3N0ciAiaGVjaG8uIgorCisjOiBjb25uZWN0LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzICglcykiCittc2dzdHIgIm5vIGVzIHBvc2libGUgcmV2aXNhciAlcyAoJXMpIgorCisjOiBjb25uZWN0LmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcG9ydCAlcyIKK21zZ3N0ciAicHVlcnRvIGRlc2Nvbm9jaWRvICVzIgorCisjOiBjb25uZWN0LmM6ODQ1IGNvbm5lY3QuYzoxMTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgaG9zdG5hbWUgJyVzJyBibG9ja2VkIgorbXNnc3RyICJob3N0bmFtZSBleHRyYcOxbyAnJXMnIGJsb3F1ZWFkbyIKKworIzogY29ubmVjdC5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBvcnQgJyVzJyBibG9ja2VkIgorbXNnc3RyICJwdWVydG8gZXh0cmHDsW8gJyVzJyBibG9xdWVhZG8iCisKKyM6IGNvbm5lY3QuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXJ0IHByb3h5ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBjb21lbnphciBwcm94eSAlcyIKKworIzogY29ubmVjdC5jOjkyOAorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkOyBzZWUgJ2dpdCBoZWxwIHB1bGwnIGZvciB2YWxpZCB1cmwgc3ludGF4IgorbXNnc3RyICIiCisibm8gaGF5IHJ1dGEgZXNwZWNpZmljYWRhOyB2ZWEgJ2dpdCBoZWxwIHB1bGwnIHBhcmEgc2ludGF4aXMgZGUgdXJsIHbDoWxpZGFzIgorCisjOiBjb25uZWN0LmM6MTEyMworbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTQiCittc2dzdHIgInZhcmlhbnRlICdzaW1wbGUnIGRlIHNzaCBubyBzb3BvcnRhIC00IgorCisjOiBjb25uZWN0LmM6MTEzNQorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiCittc2dzdHIgInZhcmlhbnRlICdzaW1wbGUnIGRlIHNzaCBubyBzb3BvcnRhIC02IgorCisjOiBjb25uZWN0LmM6MTE1MgorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBwb3J0IgorbXNnc3RyICJ2YXJpYW50ZSBzc2ggJ3NpbXBsZScgbm8gc29wb3J0YSBjb25maWd1cmFyIHB1ZXJ0byIKKworIzogY29ubmVjdC5jOjEyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBwYXRobmFtZSAnJXMnIGJsb2NrZWQiCittc2dzdHIgInJ1dGEgZXh0cmHDsWEgJyVzJyBibG9xdWVhZGEiCisKKyM6IGNvbm5lY3QuYzoxMzExCittc2dpZCAidW5hYmxlIHRvIGZvcmsiCittc2dzdHIgIm5vIGVzIHBvc2libGUgaGFjZXIgZm9yayIKKworIzogY29ubmVjdGVkLmM6OTggYnVpbHRpbi9mc2NrLmM6MjA4IGJ1aWx0aW4vcHJ1bmUuYzo0MworbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAiVmVyaWZpY2FuZG8gY29uZWN0aXZpZGFkIgorCisjOiBjb25uZWN0ZWQuYzoxMTAKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICJObyBzZSBwdWRvIGNvcnJlciAnZ2l0IHJldi1saXN0JyIKKworIzogY29ubmVjdGVkLmM6MTMwCittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0IgorbXNnc3RyICJmYWxsw7MgZXNjcmliaXIgYSByZXYtbGlzdCIKKworIzogY29ubmVjdGVkLmM6MTM3Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgImZhbGzDsyBhbCBjZXJyYXIgbGEgZW50cmFkYSBzdGFuZGFyZCBkZSByZXYtbGlzdCIKKworIzogY29udmVydC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIgorbXNnc3RyICJjcmxmX2FjdGlvbiAlZCBpbGVnYWwiCisKKyM6IGNvbnZlcnQuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1JMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcyIKK21zZ3N0ciAiQ1JMRiBzZXLDoSByZWVtcGxhemFkbyBwb3IgTEYgZW4gJXMiCisKKyM6IGNvbnZlcnQuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNSTEYgd2lsbCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiQ1JMRiBzZXLDoSByZW1wbGF6YWRvIHBvciBMRiBlbiAlcy5cbiIKKyJFbCBhcmNoaXZvIHRlbmRyw6Egc3VzIGZpbmFsZXMgZGUgbMOtbmVhIG9yaWdpbmFsZXMgZW4gdHUgZGlyZWN0b3JpbyBkZSB0cmFiYWpvIgorCisjOiBjb252ZXJ0LmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMiCittc2dzdHIgIkxGIHNlcsOhIHJlZW1wbGF6YWRvIHBvciBDUkxGIGVuICVzIgorCisjOiBjb252ZXJ0LmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMuXG4iCisiVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIkxGIHNlcsOhIHJlZW1wbGF6YWRvIHBvciBDUkxGIGVuICVzLlxuIgorIkVsIGFyY2hpdm8gdGVuZHLDoSBzdXMgZmluYWxlcyBkZSBsw61uZWEgb3JpZ2luYWxlcyBlbiB0dSBkaXJlY3RvcmlvIGRlIHRyYWJham8iCisKKyM6IGNvbnZlcnQuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHByb2hpYml0ZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICJCT00gZXN0w6EgcHJvaGliaWRvIGVuICclcycgc2kgZXMgY29kaWZpY2FkbyBjb21vICVzIgorCisjOiBjb252ZXJ0LmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lLipzIGFzICIKKyJ3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisiRWwgYXJjaGl2byAnJXMnIGNvbnRpZW5lIHVuYSBtYXJjYSBkZSBieXRlIChCT00pLiBQb3IgZmF2b3IgdXNhIFVURi0lLipzICIKKyJjb21vIHdvcmtpbmctdHJlZS1lbmNvZGluZy4iCisKKyM6IGNvbnZlcnQuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHJlcXVpcmVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAiQk9NIGVzIHJlcXVlcmlkbyBlbiAnJXMnIHNpIGVzIGNvZGlmaWNhZG8gY29tbyAlcyIKKworIzogY29udmVydC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBpcyBtaXNzaW5nIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lc0JFIG9yIFVURi0iCisiJXNMRSAoZGVwZW5kaW5nIG9uIHRoZSBieXRlIG9yZGVyKSBhcyB3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisiQWwgYXJjaGl2byAnJXMnIGxlIGZhbHRhIHVuYSBtYXJjYSBkZSBieXRlIChCT00pLiBQb3IgZmF2b3IgdXNhIFVURi0lc0JFIG8gIgorIlVURi0lc0xFIChkZXBlbmRpZW5kbyBlbiBlbCBvcmRlbiBkZSBieXRlKSBjb21vIHdvcmtpbmctdHJlZS1lbmNvZGluZy4iCisKKyM6IGNvbnZlcnQuYzo0MTkgY29udmVydC5jOjQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZW5jb2RlICclcycgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGNvZGlmaWNhciAnJXMnIGRlICVzIGEgJXMiCisKKyM6IGNvbnZlcnQuYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW5jb2RpbmcgJyVzJyBmcm9tICVzIHRvICVzIGFuZCBiYWNrIGlzIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiY29kaWZpY2FjacOzbiAnJXMnIGRlICVzIGEgJXMgeSBkZSB2dWVsdGEgbm8gc29uIGlndWFsZXMiCisKKyM6IGNvbnZlcnQuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgdG8gcnVuIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBoYWNlciBmb3JrIHBhcmEgZWplY3V0YXIgZmlsdHJvcyBleHRlcm5vcyAnJXMnIgorCisjOiBjb252ZXJ0LmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmZWVkIHRoZSBpbnB1dCB0byBleHRlcm5hbCBmaWx0ZXIgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGVuIGFsaW1lbnRhciBkZSBpbnB1dCBhIGxvcyBmaWx0cm9zIGV4dGVybm9zICclcyciCisKKyM6IGNvbnZlcnQuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkICVkIgorbXNnc3RyICJmaWx0cm8gZXh0ZXJubyAnJXMnIGZhbGzDsyAlZCIKKworIzogY29udmVydC5jOjczMCBjb252ZXJ0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZnJvbSBleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgImxlY3R1cmEgZGUgZmlsdHJvIGV4dGVybm8gJyVzJyBmYWxsw7MiCisKKyM6IGNvbnZlcnQuYzo3MzYgY29udmVydC5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgImZpbHRybyBleHRlcm5vICclcycgZmFsbMOzIgorCisjOiBjb252ZXJ0LmM6ODM5Cittc2dpZCAidW5leHBlY3RlZCBmaWx0ZXIgdHlwZSIKK21zZ3N0ciAidGlwbyBkZSBmaWx0cm8gaW5lc3BlcmFkbyIKKworIzogY29udmVydC5jOjg1MAorbXNnaWQgInBhdGggbmFtZSB0b28gbG9uZyBmb3IgZXh0ZXJuYWwgZmlsdGVyIgorbXNnc3RyICJub21icmUgZGUgcnV0YSBtdXkgbGFyZ28gcGFyYSBmaWx0cm8gZXh0ZXJubyIKKworIzogY29udmVydC5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXh0ZXJuYWwgZmlsdGVyICclcycgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGFsdGhvdWdoIG5vdCBhbGwgcGF0aHMgaGF2ZSAiCisiYmVlbiBmaWx0ZXJlZCIKK21zZ3N0ciAiIgorImZpbHRybyBleHRlcm5vICclcycgeWEgbm8gZXN0w6EgZGlzcG9uaWJsZSBhdW5xdWUgbm8gdG9kYXMgbGFzIHJ1dGFzIGhhbiBzaWRvICIKKyJmaWx0cmFkYXMiCisKKyM6IGNvbnZlcnQuYzoxMjIzCittc2dpZCAidHJ1ZS9mYWxzZSBhcmUgbm8gdmFsaWQgd29ya2luZy10cmVlLWVuY29kaW5ncyIKK21zZ3N0ciAidHJ1ZS9mYWxzZSBubyBzb24gd29ya2luZy10cmVlLWVuY29kaW5ncyB2w6FsaWRvcyIKKworIzogY29udmVydC5jOjE0MTEgY29udmVydC5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiJXM6IGZhbGzDsyBhbCBsaW1waWFyIGZpbHRybyAnJXMnIgorCisjOiBjb252ZXJ0LmM6MTQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogc211ZGdlIGZpbHRlciAlcyBmYWlsZWQiCittc2dzdHIgIiVzOiBmaWx0cm8gc211ZGdlICVzIGZhbGzDsyIKKworIzogZGF0ZS5jOjEzOAorbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgImVuIGVsIGZ1dHVybyIKKworIzogZGF0ZS5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gImhhY2UgJTxQUkl1TUFYPiBzZWd1bmRvIgorbXNnc3RyWzFdICJoYWNlICU8UFJJdU1BWD4gc2VndW5kb3MiCisKKyM6IGRhdGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtaW51dGUgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICJoYWNlICU8UFJJdU1BWD4gbWludXRvIgorbXNnc3RyWzFdICJoYWNlICU8UFJJdU1BWD4gbWludXRvcyIKKworIzogZGF0ZS5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGhvdXIgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IGhvdXJzIGFnbyIKK21zZ3N0clswXSAiaGFjZSAlPFBSSXVNQVg+IGhvcmEiCittc2dzdHJbMV0gImhhY2UgJTxQUkl1TUFYPiBob3JhcyIKKworIzogZGF0ZS5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gZGF5cyBhZ28iCittc2dzdHJbMF0gImhhY2UgJTxQUkl1TUFYPiBkw61hIgorbXNnc3RyWzFdICJoYWNlICU8UFJJdU1BWD4gZMOtYXMiCisKKyM6IGRhdGUuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB3ZWVrcyBhZ28iCittc2dzdHJbMF0gImhhY2UgJTxQUkl1TUFYPiBzZW1hbmEiCittc2dzdHJbMV0gImhhY2UgJTxQUkl1TUFYPiBzZW1hbmFzIgorCisjOiBkYXRlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gImhhY2UgJTxQUkl1TUFYPiBtZXMiCittc2dzdHJbMV0gImhhY2UgJTxQUkl1TUFYPiBtZXNlcyIKKworIzogZGF0ZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIiCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMiCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gYcOxbyIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBhw7FvcyIKKworIy4gVFJBTlNMQVRPUlM6ICIlcyIgaXMgIjxuPiB5ZWFycyIKKyM6IGRhdGUuYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsICU8UFJJdU1BWD4gbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlcywgeSAlPFBSSXVNQVg+IG1lcyBhdHLDoXMiCittc2dzdHJbMV0gIiVzLCB5ICU8UFJJdU1BWD4gbWVzZXMgYXRyw6FzIgorCisjOiBkYXRlLmM6MTk3IGRhdGUuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyBhZ28iCittc2dzdHJbMF0gImhhY2UgJTxQUkl1TUFYPiBhw7FvIgorbXNnc3RyWzFdICJoYWNlICU8UFJJdU1BWD4gYcOxb3MiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyNzIKK21zZ2lkICJQcm9wYWdhdGluZyBpc2xhbmQgbWFya3MiCittc2dzdHIgIlByb3BhZ2FuZG8gbWFyY2FzIGlzbGEiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHRyZWUgb2JqZWN0ICVzIgorbXNnc3RyICJtYWwgb2JqZXRvIMOhcmJvbCAlcyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBpc2xhbmQgcmVnZXggZm9yICclcyc6ICVzIgorbXNnc3RyICJmYWxsw7MgYWwgY2FyZ2FyIGlzbGEgZGUgcmVnZXggcGFyYSAnJXMnOiAlcyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpc2xhbmQgcmVnZXggZnJvbSBjb25maWcgaGFzIHRvbyBtYW55IGNhcHR1cmUgZ3JvdXBzIChtYXg9JWQpIgorbXNnc3RyICJyZWdleCBpc2xhIGRlIGNvbmZpZyB0aWVuZSBtdWNob3MgZ3J1cG9zIGRlIGNhcHR1cmEgKG1heD0lZCkiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2VkICVkIGlzbGFuZHMsIGRvbmUuXG4iCittc2dzdHIgIiVkIGlzbGFzIG1hcmNhZGFzLCBsaXN0by5cbiIKKworIzogZGlmZmNvcmUtb3JkZXIuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvcmRlcmZpbGUgJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGxlZXIgb3JkZW4gZGUgYXJjaGl2b3MgJyVzJyIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTQzCittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIlJlYWxpemFuZG8gdW5hIGRldGVjY2nDs24gZGUgY2FtYmlvcyBkZSBub21icmUgaW5leGFjdGEiCisKKyM6IGRpZmYtbm8taW5kZXguYzoyMzgKK21zZ2lkICJnaXQgZGlmZiAtLW5vLWluZGV4IFs8b3B0aW9ucz5dIDxwYXRoPiA8cGF0aD4iCittc2dzdHIgImdpdCBkaWZmIC0tbm8taW5kZXggWzxvcGNpb25lcz5dIDxwYXRoPiA8cGF0aD4iCisKKyM6IGRpZmYtbm8taW5kZXguYzoyNjMKK21zZ2lkICIiCisiTm90IGEgZ2l0IHJlcG9zaXRvcnkuIFVzZSAtLW5vLWluZGV4IHRvIGNvbXBhcmUgdHdvIHBhdGhzIG91dHNpZGUgYSB3b3JraW5nICIKKyJ0cmVlIgorbXNnc3RyICIiCisiTm8gZXMgdW4gcmVwb3NpdG9yaW8gZ2l0LiBVc2UgLS1uby1pbmRleCBwYXJhIGNvbXBhcmFyIGRvcyBwYXRocyBmdWVyYSBkZWwgIgorIsOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBkaWZmLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiICBGYWxsw7MgYWwgYW5hbGl6YXIgZGlyc3RhdCBwb3JjZW50YWplIGRlIGNvcnRlICclcydcbiIKKworIzogZGlmZi5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIHBhcsOhbWV0cm8gJyVzJyBkZSBkaXJzdGF0IGRlc2Nvbm9jaWRvXG4iCisKKyM6IGRpZmYuYzoyOTYKK21zZ2lkICIiCisiY29sb3IgbW92ZWQgc2V0dGluZyBtdXN0IGJlIG9uZSBvZiAnbm8nLCAnZGVmYXVsdCcsICdibG9ja3MnLCAnemVicmEnLCAiCisiJ2RpbW1lZC16ZWJyYScsICdwbGFpbiciCittc2dzdHIgIiIKKyJvcGNpw7NuIGRlIGNvbG9yIHRpZW5lIHF1ZSBzZXIgdW5hIGRlICdubycsICdkZWZhdWx0JywgJ2Jsb2NrcycsICd6ZWJyYScsICIKKyInZGltbWVkX3plYnJhJywgJ3BsYWluJyIKKworIzogZGlmZi5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcycsIHBvc3NpYmxlIHZhbHVlcyBhcmUgJ2lnbm9yZS1zcGFjZS1jaGFuZ2UnLCAiCisiJ2lnbm9yZS1zcGFjZS1hdC1lb2wnLCAnaWdub3JlLWFsbC1zcGFjZScsICdhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UnIgorbXNnc3RyICIiCisibW9kbyBjb2xvci1tb3ZlZC13cyBkZXNjb25vY2lkbyAnJXMnLCB2YWxvcmVzIHBvc2libGVzIHNvbiAnaWdub3JlLXNwYWNlLSIKKyJjaGFuZ2UnLCAnaWdub3JlLXNwYWNlLWF0LWVvbCcsICdpZ25vcmUtYWxsLXNwYWNlJywgJ2FsbG93LWluZGVudGF0aW9uLSIKKyJjaGFuZ2UnIgorCisjOiBkaWZmLmM6MzMyCittc2dpZCAiIgorImNvbG9yLW1vdmVkLXdzOiBhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgIgorIndoaXRlc3BhY2UgbW9kZXMiCittc2dzdHIgIiIKKyJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIG5vIHB1ZWRlIHNlciBjb21iaW5hZG8gY29uIG90cm9zICIKKyJtb2RvcyBkZSBlc3BhY2lvcyBlbiBibGFuY28iCisKKyM6IGRpZmYuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIiIKKyJWYWxvciBwYXJhIGxhIHZhcmlhYmxlIGRlIGNvbmZpZ3VyYWNpw7NuICdkaWZmLnN1Ym1vZHVsZScgZGVzY29ub2NpZG86ICclcyciCisKKyM6IGRpZmYuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJFcnJvcmVzIGVuIGxhIHZhcmlhYmxlIGRlIGNvbmZpZyAnZGlmZi5kaXJzdGF0JyBlbmNvbnRyYWRvczpcbiIKKyIlcyIKKworIzogZGlmZi5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZGlmZiBkaWVkLCBzdG9wcGluZyBhdCAlcyIKK21zZ3N0ciAiZGlmZiBleHRlcm5vIG11cmnDsywgZGV0ZW5pZW5kbyBlbiAlcyIKKworIzogZGlmZi5jOjQ1NDcKK21zZ2lkICItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayBhbmQgLXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgeSAtcyBzb24gbXV0dWFtZW50ZSBleGNsdXNpdmFzIgorCisjOiBkaWZmLmM6NDU1MAorbXNnaWQgIi1HLCAtUyBhbmQgLS1maW5kLW9iamVjdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItRywgLVMgeSAtLWZpbmQtb2JqZWN0IHNvbiBtdXR1YW1lbnRlIGV4Y2x1c2l2YXMiCisKKyM6IGRpZmYuYzo0NjI4Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIi0tZm9sbG93IHJlcXVpZXJlIGV4YWN0YW1lbnRlIHVuIHBhdGhzcGVjIgorCisjOiBkaWZmLmM6NDY3NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tc3RhdCB2YWx1ZTogJXMiCittc2dzdHIgInZhbG9yIC0tc3RhdCBpbnbDoWxpZG86ICVzIgorCisjOiBkaWZmLmM6NDY4MSBkaWZmLmM6NDY4NiBkaWZmLmM6NDY5MSBkaWZmLmM6NDY5NiBkaWZmLmM6NTIwOQorIzogcGFyc2Utb3B0aW9ucy5jOjE5NyBwYXJzZS1vcHRpb25zLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiVzIGVzcGVyYSB1biB2YWxvciBudW3DqXJpY28iCisKKyM6IGRpZmYuYzo0NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gcGFyc2UgLS1kaXJzdGF0Ly1YIG9wdGlvbiBwYXJhbWV0ZXI6XG4iCisiJXMiCittc2dzdHIgIiIKKyJGYWxsw7MgYWwgYW5hbGl6YXIgcGFyw6FtZXRybyBkZSBvcGNpw7NuIC0tZGlyc3RhdC8tWDpcbiIKKyIlcyIKKworIzogZGlmZi5jOjQ3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjaGFuZ2UgY2xhc3MgJyVjJyBpbiAtLWRpZmYtZmlsdGVyPSVzIgorbXNnc3RyICJjYW1iaW8gZGUgY2xhc2UgZGVzY29ub2NpZG8gJyVjJyBlbiAtLWRpZmYtZmlsdGVyPSVzIgorCisjOiBkaWZmLmM6NDgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGFmdGVyIHdzLWVycm9yLWhpZ2hsaWdodD0lLipzIgorbXNnc3RyICJ2YWxvciBkZXNjb25vY2lkbyBsdWVnbyBkZSB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIKKworIzogZGlmZi5jOjQ4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgcmVzb2x2ZXIgJyVzJyIKKworIzogZGlmZi5jOjQ4ODYgZGlmZi5jOjQ4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyA8bj4vPG0+IGZvcm0iCittc2dzdHIgIiVzIGVzcGVyYSBmb3JtYSA8bj4vPG0+IgorCisjOiBkaWZmLmM6NDkwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgY2hhcmFjdGVyLCBnb3QgJyVzJyIKK21zZ3N0ciAiJXMgZXNwZXJhYmEgdW4gY2hhciwgc2Ugb2J0dXZvICclcyciCisKKyM6IGRpZmYuYzo0OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLWNvbG9yLW1vdmVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAibWFsIGFyZ3VtZW50byAtLWNvbG9yLW1vdmVkOiAlcyIKKworIzogZGlmZi5jOjQ5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlICclcycgaW4gLS1jb2xvci1tb3ZlZC13cyIKK21zZ3N0ciAibW9kbyBpbnbDoWxpZG8gJyVzJyBlbiAtLWNvbG9yLW1vdmVkLXdzIgorCisjOiBkaWZmLmM6NDk4NAorbXNnaWQgIiIKKyJvcHRpb24gZGlmZi1hbGdvcml0aG0gYWNjZXB0cyBcIm15ZXJzXCIsIFwibWluaW1hbFwiLCBcInBhdGllbmNlXCIgYW5kICIKKyJcImhpc3RvZ3JhbVwiIgorbXNnc3RyICIiCisib3BjacOzbiBkaWZmLWFsZ29yaXRobSBhY2VwdGEgXCJteWVyc1wiLCBcIm1pbmltYWxcIiwgXCJwYXRpZW5jZVwiIGUgIgorIlwiaGlzdG9ncmFtXCIiCisKKyM6IGRpZmYuYzo1MDIwIGRpZmYuYzo1MDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgdG8gJXMiCittc2dzdHIgImFyZ3VtZW50byBpbnbDoWxpZG8gcGFyYSAlcyIKKworIzogZGlmZi5jOjUxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIC0tc3VibW9kdWxlIG9wdGlvbiBwYXJhbWV0ZXI6ICclcyciCittc2dzdHIgImZhbGzDsyBhbCBhbmFsaXphciBwYXLDoW1ldHJvIGRlIG9wY2nDs24gLS1zdWJtb2R1bGU6ICclcyciCisKKyM6IGRpZmYuYzo1MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLXdvcmQtZGlmZiBhcmd1bWVudDogJXMiCittc2dzdHIgIm1hbCBhcmd1bWVudG8gLS13b3JkLWRpZmY6ICVzIgorCisjOiBkaWZmLmM6NTI1NworbXNnaWQgIkRpZmYgb3V0cHV0IGZvcm1hdCBvcHRpb25zIgorbXNnc3RyICJPcGNpb25lcyBkZSBmb3JtYXRvIGRlIHNhbGlkYSBwYXJhIGRpZmYiCisKKyM6IGRpZmYuYzo1MjU5IGRpZmYuYzo1MjY1Cittc2dpZCAiZ2VuZXJhdGUgcGF0Y2giCittc2dzdHIgImdlbmVyYXIgcGFyY2hlIgorCisjOiBkaWZmLmM6NTI2MiBidWlsdGluL2xvZy5jOjE3MworbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICJzdXByaW1pciBzYWxpZGEgZGUgZGlmZiIKKworIzogZGlmZi5jOjUyNjcgZGlmZi5jOjUzODEgZGlmZi5jOjUzODgKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZGlmZi5jOjUyNjggZGlmZi5jOjUyNzEKK21zZ2lkICJnZW5lcmF0ZSBkaWZmcyB3aXRoIDxuPiBsaW5lcyBjb250ZXh0IgorbXNnc3RyICJnZW5lcmEgZGlmZnMgY29uIDxuPiBsw61uZWFzIGRlIGNvbnRleHRvIgorCisjOiBkaWZmLmM6NTI3MworbXNnaWQgImdlbmVyYXRlIHRoZSBkaWZmIGluIHJhdyBmb3JtYXQiCittc2dzdHIgImdlbmVyYSBlbCBkaWZmIGVuIGZvcm1hdG8gcmF3IgorCisjOiBkaWZmLmM6NTI3NgorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXJhdyciCittc2dzdHIgInNpbsOzbmltbyBwYXJhICctcCAtLXN0YXQnIgorCisjOiBkaWZmLmM6NTI4MAorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXN0YXQnIgorbXNnc3RyICJzaW7Ds25pbW8gcGFyYSAnLXAgLS1zdGF0JyIKKworIzogZGlmZi5jOjUyODQKK21zZ2lkICJtYWNoaW5lIGZyaWVuZGx5IC0tc3RhdCIKK21zZ3N0ciAiLS1zdGF0IGFtaWdhYmxlIHBhcmEgbcOhcXVpbmEiCisKKyM6IGRpZmYuYzo1Mjg3Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIGxhc3QgbGluZSBvZiAtLXN0YXQiCittc2dzdHIgIm1vc3RyYXIgc29sbyBsYSDDumx0aW1hIGzDrW5lYSBwYXJhIC0tc3RhdCIKKworIzogZGlmZi5jOjUyODkgZGlmZi5jOjUyOTcKK21zZ2lkICI8cGFyYW0xLHBhcmFtMj4uLi4iCittc2dzdHIgIjxwYXJhbTEscGFyYW0yPi4uLiIKKworIzogZGlmZi5jOjUyOTAKK21zZ2lkICIiCisib3V0cHV0IHRoZSBkaXN0cmlidXRpb24gb2YgcmVsYXRpdmUgYW1vdW50IG9mIGNoYW5nZXMgZm9yIGVhY2ggc3ViLWRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIm11ZXN0cmEgbGEgZGlzdHJpYnVjacOzbiBkZSBjYW50aWRhZGVzIGRlIGNhbWJpb3MgcmVsYXRpdmEgcGFyYSBjYWRhICIKKyJzdWJkaXJlY3RvcmlvIgorCisjOiBkaWZmLmM6NTI5NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1jdW11bGF0aXZlIgorbXNnc3RyICJzaW7Ds25pbW8gcGFyYSAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSIKKworIzogZGlmZi5jOjUyOTgKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9ZmlsZXMscGFyYW0xLHBhcmFtMi4uLiIKK21zZ3N0ciAic2lub25pbW8gcGFyYSAtLWRpcnN0YXQ9YXJjaGl2b3MscGFyYW0xLHBhcmFtMi4uLiIKKworIzogZGlmZi5jOjUzMDIKK21zZ2lkICJ3YXJuIGlmIGNoYW5nZXMgaW50cm9kdWNlIGNvbmZsaWN0IG1hcmtlcnMgb3Igd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgIiIKKyJhZHZpZXJ0ZSBzaSBjYW1iaW9zIGludHJvZHVjZW4gY29uZmxpY3RvcyBkZSBtYXJrZXJzIG8gZXJyb3JlcyBkZSBlc3BhY2lvcyAiCisiZW4gYmxhbmNvIgorCisjOiBkaWZmLmM6NTMwNQorbXNnaWQgImNvbmRlbnNlZCBzdW1tYXJ5IHN1Y2ggYXMgY3JlYXRpb25zLCByZW5hbWVzIGFuZCBtb2RlIGNoYW5nZXMiCittc2dzdHIgIiIKKyJyZXN1bWVuIGNvbmRlbnNhZG8gZGUgY3JlYWNpb25lcywgY2FtYmlvcyBkZSBub21icmVzIHkgY2FtYmlvcyBkZSBtb2RvcyIKKworIzogZGlmZi5jOjUzMDgKK21zZ2lkICJzaG93IG9ubHkgbmFtZXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAibW9zdHJhciBzb2xvIG5vbWJyZXMgZGUgYXJjaGl2b3MgY2FtYmlhZG9zIgorCisjOiBkaWZmLmM6NTMxMQorbXNnaWQgInNob3cgb25seSBuYW1lcyBhbmQgc3RhdHVzIG9mIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgIm1vc3RyYXIgc29sbyBub21icmVzIHkgZXN0YWRvcyBkZSBhcmNoaXZvcyBjYW1iaWFkb3MiCisKKyM6IGRpZmYuYzo1MzEzCittc2dpZCAiPHdpZHRoPlssPG5hbWUtd2lkdGg+Wyw8Y291bnQ+XV0iCittc2dzdHIgIjxhbmNobz5bLDxub21icmUtYW5jaG8+Wyw8Y2FudGlkYWQ+XV0iCisKKyM6IGRpZmYuYzo1MzE0Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQiCittc2dzdHIgImdlbmVyYXIgZGlmZnN0YXQiCisKKyM6IGRpZmYuYzo1MzE2IGRpZmYuYzo1MzE5IGRpZmYuYzo1MzIyCittc2dpZCAiPHdpZHRoPiIKK21zZ3N0ciAiPGFuY2hvPiIKKworIzogZGlmZi5jOjUzMTcKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gd2lkdGgiCittc2dzdHIgImdlbmVyYSBkaWZmc3RhdCBjb24gdW4gYW5jaG8gZGFkbyIKKworIzogZGlmZi5jOjUzMjAKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gbmFtZSB3aWR0aCIKK21zZ3N0ciAiZ2VuZXJhIGRpZmZzdGF0IGNvbiB1biBub21icmUgZGUgYW5jaG8gZGFkbyIKKworIzogZGlmZi5jOjUzMjMKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gZ3JhcGggd2lkdGgiCittc2dzdHIgImdlbmVyYSBkaWZmc3RhdCBjb24gdW4gYW5jaG8gZGUgZ3JhcGggZGFkbyIKKworIzogZGlmZi5jOjUzMjUKK21zZ2lkICI8Y291bnQ+IgorbXNnc3RyICI8Y2FudGlkYWQ+IgorCisjOiBkaWZmLmM6NTMyNgorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggbGltaXRlZCBsaW5lcyIKK21zZ3N0ciAiZ2VuZXJhIGRpZmZzdGF0IGNvbiBsw61uZWFzIGxpbWl0YWRhcyIKKworIzogZGlmZi5jOjUzMjkKK21zZ2lkICJnZW5lcmF0ZSBjb21wYWN0IHN1bW1hcnkgaW4gZGlmZnN0YXQiCittc2dzdHIgImdlbmVyYSB1biByZXN1bWVuIGNvbXBhY3RvIGRlIGRpZmZzdGF0IgorCisjOiBkaWZmLmM6NTMzMgorbXNnaWQgIm91dHB1dCBhIGJpbmFyeSBkaWZmIHRoYXQgY2FuIGJlIGFwcGxpZWQiCittc2dzdHIgIm11ZXN0cmEgdW4gZGlmZiBiaW5hcmlvIHF1ZSBwdWVkZSBzZXIgYXBsaWNhZG8iCisKKyM6IGRpZmYuYzo1MzM1Cittc2dpZCAic2hvdyBmdWxsIHByZS0gYW5kIHBvc3QtaW1hZ2Ugb2JqZWN0IG5hbWVzIG9uIHRoZSBcImluZGV4XCIgbGluZXMiCittc2dzdHIgIiIKKyJtb3N0cmFyIHRvZG8gdW4gcHJlLSB5IHBvc3QtaW1hZ2UgZGUgbm9tYnJlcyBkZSBvYmpldG9zIGVuIGxhcyBsw61uZWFzIFwiaW5kZXgiCisiXCIiCisKKyM6IGRpZmYuYzo1MzM3Cittc2dpZCAic2hvdyBjb2xvcmVkIGRpZmYiCittc2dzdHIgIm1vc3RyYXIgZGlmZiBjb2xvcmlkbyIKKworIzogZGlmZi5jOjUzMzgKK21zZ2lkICI8a2luZD4iCittc2dzdHIgIjx0aXBvPiIKKworIzogZGlmZi5jOjUzMzkKK21zZ2lkICIiCisiaGlnaGxpZ2h0IHdoaXRlc3BhY2UgZXJyb3JzIGluIHRoZSAnY29udGV4dCcsICdvbGQnIG9yICduZXcnIGxpbmVzIGluIHRoZSAiCisiZGlmZiIKK21zZ3N0ciAiIgorInJlc2FsdGFyIGVycm9yZXMgZGUgZXNwYWNpb3MgZW4gYmxhbmNvIGVuIGxhcyBsw61uZWFzICdjb250ZXh0JywgJ29sZCcgbyAiCisiJ25ldycgZGVsIGRpZmYiCisKKyM6IGRpZmYuYzo1MzQyCittc2dpZCAiIgorImRvIG5vdCBtdW5nZSBwYXRobmFtZXMgYW5kIHVzZSBOVUxzIGFzIG91dHB1dCBmaWVsZCB0ZXJtaW5hdG9ycyBpbiAtLXJhdyBvciAiCisiLS1udW1zdGF0IgorbXNnc3RyICIiCisibm8gY29uc29saWRhciBsb3MgcGF0aG5hbWVzIHkgdXNhciBOVUxzIGNvbW8gdGVybWluYWRvcmVzIGRlIGNhbXBvcyBlbiAtLXJhdyAiCisibyAtLW51bXN0YXQiCisKKyM6IGRpZmYuYzo1MzQ1IGRpZmYuYzo1MzQ4IGRpZmYuYzo1MzUxIGRpZmYuYzo1NDU3Cittc2dpZCAiPHByZWZpeD4iCittc2dzdHIgIjxwcmVmaWpvPiIKKworIzogZGlmZi5jOjUzNDYKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBzb3VyY2UgcHJlZml4IGluc3RlYWQgb2YgXCJhL1wiIgorbXNnc3RyICJtb3N0cmFyIGVsIHByZWZpam8gZGUgZnVlbnRlIGRhZG8gZW4gbHVnYXIgZGUgXCJhL1wiIgorCisjOiBkaWZmLmM6NTM0OQorbXNnaWQgInNob3cgdGhlIGdpdmVuIGRlc3RpbmF0aW9uIHByZWZpeCBpbnN0ZWFkIG9mIFwiYi9cIiIKK21zZ3N0ciAibW9zdHJhciBlbCBwcmVmaWpvIGRlIGRlc3Rpbm8gZW4gbHVnYXIgZGUgXCJiL1wiIgorCisjOiBkaWZmLmM6NTM1MgorbXNnaWQgInByZXBlbmQgYW4gYWRkaXRpb25hbCBwcmVmaXggdG8gZXZlcnkgbGluZSBvZiBvdXRwdXQiCittc2dzdHIgImFudGVwb25lciB1biBwcmVmaWpvIGFkaWNpb25hbCBhIGNhZGEgbMOtbmVhIG1vc3RyYWRhIgorCisjOiBkaWZmLmM6NTM1NQorbXNnaWQgImRvIG5vdCBzaG93IGFueSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcHJlZml4IgorbXNnc3RyICJubyBtb3N0cmFyIG5pbmfDum4gcHJlZmlqbyBkZSBmdWVudGUgbyBkZXN0aW5vIgorCisjOiBkaWZmLmM6NTM1OAorbXNnaWQgInNob3cgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbGluZXMiCittc2dzdHIgIiIKKyJtdWVzdHJhIGVsIGNvbnRleHRvIGVudHJlIGh1bmtzIGRlIGRpZmYgaGFzdGEgZWwgbsO6bWVybyBlc3BlY2lmaWNhZG8gZGUgIgorImzDrW5lYXMiCisKKyM6IGRpZmYuYzo1MzYyIGRpZmYuYzo1MzY3IGRpZmYuYzo1MzcyCittc2dpZCAiPGNoYXI+IgorbXNnc3RyICI8Y2hhcj4iCisKKyM6IGRpZmYuYzo1MzYzCittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGEgbmV3IGxpbmUgaW5zdGVhZCBvZiAnKyciCittc2dzdHIgImVzcGVjaWZpY2EgZWwgY2hhciBwYXJhIGluZGljYXIgdW5hIG51ZXZhIGzDrW5lYSBlbiBsdWdhciBkZSAnKyciCisKKyM6IGRpZmYuYzo1MzY4Cittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGFuIG9sZCBsaW5lIGluc3RlYWQgb2YgJy0nIgorbXNnc3RyICJlc3BlY2lmaWNhIGVsIGNoYXIgcGFyYSBpbmRpY2FyIHVuYSBsw61uZWEgdmllamEgZW4gbHVnYXIgZGUgJy0nIgorCisjOiBkaWZmLmM6NTM3MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIGNvbnRleHQgaW5zdGVhZCBvZiAnICciCittc2dzdHIgImVzcGVjaWZpY2EgZWwgY2hhciBwYXJhIGluZGljYXIgdW4gY29udGV4dG8gZW4gbHVnYXIgZGUgJyAnIgorCisjOiBkaWZmLmM6NTM3NgorbXNnaWQgIkRpZmYgcmVuYW1lIG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbmVzIGRlIGRpZmYgcmVuYW1lIgorCisjOiBkaWZmLmM6NTM3NworbXNnaWQgIjxuPlsvPG0+XSIKK21zZ3N0ciAiPG4+Wy88bT5dIgorCisjOiBkaWZmLmM6NTM3OAorbXNnaWQgImJyZWFrIGNvbXBsZXRlIHJld3JpdGUgY2hhbmdlcyBpbnRvIHBhaXJzIG9mIGRlbGV0ZSBhbmQgY3JlYXRlIgorbXNnc3RyICJkZXNjb21wb25lciBsb3MgY2FtYmlvcyBkZSByZWVzY3JpdHVyYSBlbiBwYXJlcyBkZSBib3JyYXIgeSBjcmVhciIKKworIzogZGlmZi5jOjUzODIKK21zZ2lkICJkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAiZGV0ZWN0YXIgcmVub21icmFkb3MiCisKKyM6IGRpZmYuYzo1Mzg2Cittc2dpZCAib21pdCB0aGUgcHJlaW1hZ2UgZm9yIGRlbGV0ZXMiCittc2dzdHIgIm9taXRlIGxhIHByZWltYWdlIHBhcmEgYm9ycmFkb3MiCisKKyM6IGRpZmYuYzo1Mzg5Cittc2dpZCAiZGV0ZWN0IGNvcGllcyIKK21zZ3N0ciAiZGV0ZWN0YXIgY29waWFzIgorCisjOiBkaWZmLmM6NTM5MworbXNnaWQgInVzZSB1bm1vZGlmaWVkIGZpbGVzIGFzIHNvdXJjZSB0byBmaW5kIGNvcGllcyIKK21zZ3N0ciAidXNhIGFyY2hpdm9zIG5vIG1vZGlmaWNhZG9zIGNvbW8gZnVlbnRlIHBhcmEgZW5jb250cmFyIGNvcGlhcyIKKworIzogZGlmZi5jOjUzOTUKK21zZ2lkICJkaXNhYmxlIHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgImRlc2hhYmlsaXRhIGRldGVjY2nDs24gZGUgcmVub21icmVzIgorCisjOiBkaWZmLmM6NTM5OAorbXNnaWQgInVzZSBlbXB0eSBibG9icyBhcyByZW5hbWUgc291cmNlIgorbXNnc3RyICJ1c2EgYmxvYnMgdmFjw61vcyBjb21vIGZ1ZW50ZSBkZSByZW5vbWJyZSIKKworIzogZGlmZi5jOjU0MDAKK21zZ2lkICJjb250aW51ZSBsaXN0aW5nIHRoZSBoaXN0b3J5IG9mIGEgZmlsZSBiZXlvbmQgcmVuYW1lcyIKK21zZ3N0ciAiY29udGludWEgbGlzdGFuZG8gZWwgaGlzdG9yaWFsIGRlIHVuIGFyY2hpdm8gbcOhcyBhbGzDoSBkZSByZW5vbWJyZXMiCisKKyM6IGRpZmYuYzo1NDAzCittc2dpZCAiIgorInByZXZlbnQgcmVuYW1lL2NvcHkgZGV0ZWN0aW9uIGlmIHRoZSBudW1iZXIgb2YgcmVuYW1lL2NvcHkgdGFyZ2V0cyBleGNlZWRzICIKKyJnaXZlbiBsaW1pdCIKK21zZ3N0ciAiIgorInByZXZpZW5lIGRldGVjY2nDs24gZGUgcmVub21icmUvY29waWFzIHNpIGVsIG7Dum1lcm8gZGUgb2JqZXRpdm9zIHBhcmEgIgorInJlbm9tYnJlcy9jb3BpYXMgZXhjZWRlIGVsIGzDrW1pdGUgZGFkbyIKKworIzogZGlmZi5jOjU0MDUKK21zZ2lkICJEaWZmIGFsZ29yaXRobSBvcHRpb25zIgorbXNnc3RyICJPcGNpb25lcyBkZSBhbGdvcml0bW9zIGRlIGRpZmYiCisKKyM6IGRpZmYuYzo1NDA3Cittc2dpZCAicHJvZHVjZSB0aGUgc21hbGxlc3QgcG9zc2libGUgZGlmZiIKK21zZ3N0ciAicHJvZHVjZSBlbCBkaWZmIG3DoXMgcGVxdWXDsW8gcG9zaWJsZSIKKworIzogZGlmZi5jOjU0MTAKK21zZ2lkICJpZ25vcmUgd2hpdGVzcGFjZSB3aGVuIGNvbXBhcmluZyBsaW5lcyIKK21zZ3N0ciAiaWdub3JhciBlc3BhY2lvcyBlbiBibGFuY28gY3VhbmRvIGNvbXBhcmFuZG8gbMOtbmVhcyIKKworIzogZGlmZi5jOjU0MTMKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiBhbW91bnQgb2Ygd2hpdGVzcGFjZSIKK21zZ3N0ciAiaWdub3JhciBjYW1iaW9zIGVuIGxhIGNhbnRpZGFkIGRlIGzDrW5lYXMgZW4gYmxhbmNvIgorCisjOiBkaWZmLmM6NTQxNgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgYXQgRU9MIgorbXNnc3RyICJpZ25vcmFyIGNhbWJpb3MgZW4gZXNwYWNpb3MgZW4gYmxhbmNvIGVuIEVPTCIKKworIzogZGlmZi5jOjU0MTkKK21zZ2lkICJpZ25vcmUgY2Fycmllci1yZXR1cm4gYXQgdGhlIGVuZCBvZiBsaW5lIgorbXNnc3RyICJpZ25vcmEgY2Fycmllci1yZXR1cm4gYWwgZmluYWwgZGUgbGEgbMOtbmVhIgorCisjOiBkaWZmLmM6NTQyMgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHdob3NlIGxpbmVzIGFyZSBhbGwgYmxhbmsiCittc2dzdHIgImlnbm9yYSBjYW1iaW9zIGN1eWFzIGzDrW5lYXMgc29uIHRvZGFzIGVuIGJsYW5jbyIKKworIzogZGlmZi5jOjU0MjUKK21zZ2lkICJoZXVyaXN0aWMgdG8gc2hpZnQgZGlmZiBodW5rIGJvdW5kYXJpZXMgZm9yIGVhc3kgcmVhZGluZyIKK21zZ3N0ciAiaGV1csOtc3RpY2EgcGFyYSBjYW1iaWFyIGxvcyBsw61taXRlcyBkZSBodW5rIHBhcmEgdW5hIGbDoWNpbCBsZWN0dXJhIgorCisjOiBkaWZmLmM6NTQyOAorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwicGF0aWVuY2UgZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiZ2VuZXJhIHVuIGRpZmYgdXNhbmRvIGFsZ29yaXRtbyBcInBhdGllbmNlIGRpZmZcIiIKKworIzogZGlmZi5jOjU0MzIKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImhpc3RvZ3JhbSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICJnZW5lcmEgdW4gZGlmZiB1c2FuZG8gYWxnb3JpdG1vIFwiaGlzdG9ncmFtIGRpZmZcIiIKKworIzogZGlmZi5jOjU0MzQKK21zZ2lkICI8YWxnb3JpdGhtPiIKK21zZ3N0ciAiPGFsZ29yaXRtbz4iCisKKyM6IGRpZmYuYzo1NDM1Cittc2dpZCAiY2hvb3NlIGEgZGlmZiBhbGdvcml0aG0iCittc2dzdHIgImVzY29nZSB1biBhbGdvcml0bW8gcGFyYSBkaWZmIgorCisjOiBkaWZmLmM6NTQzNworbXNnaWQgIjx0ZXh0PiIKK21zZ3N0ciAiPHRleHRvPiIKKworIzogZGlmZi5jOjU0MzgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImFuY2hvcmVkIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgImdlbmVyYSB1biBkaWZmIHVzYW5kbyBhbGdvcml0bW8gXCJhbmNob3JlZCBkaWZmXCIiCisKKyM6IGRpZmYuYzo1NDQwIGRpZmYuYzo1NDQ5IGRpZmYuYzo1NDUyCittc2dpZCAiPG1vZGU+IgorbXNnc3RyICI8bW9kbz4iCisKKyM6IGRpZmYuYzo1NDQxCittc2dpZCAic2hvdyB3b3JkIGRpZmYsIHVzaW5nIDxtb2RlPiB0byBkZWxpbWl0IGNoYW5nZWQgd29yZHMiCittc2dzdHIgIiIKKyJtdWVzdHJhIGRpZmYgcG9yIHBhbGFicmFzIHVzYW5kbyA8bW9kbz4gcGFyYSBkZWxpbWl0YXIgbGFzIHBhbGFicmFzIGNhbWJpYWRhcyIKKworIzogZGlmZi5jOjU0NDMgZGlmZi5jOjU0NDYgZGlmZi5jOjU0OTEKK21zZ2lkICI8cmVnZXg+IgorbXNnc3RyICI8cmVnZXg+IgorCisjOiBkaWZmLmM6NTQ0NAorbXNnaWQgInVzZSA8cmVnZXg+IHRvIGRlY2lkZSB3aGF0IGEgd29yZCBpcyIKK21zZ3N0ciAidXNhIDxyZWdleD4gcGFyYSBkZWNpZGlyIHF1ZSBwYWxhYnJhIGVzIgorCisjOiBkaWZmLmM6NTQ0NworbXNnaWQgImVxdWl2YWxlbnQgdG8gLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9PHJlZ2V4PiIKK21zZ3N0ciAiZXF1aXZhbGVudGUgYSAtLXdvcmQtZGlmZj1jb2xvciAtLXdvcmQtZGlmZi1yZWdleD08cmVnZXg+IgorCisjOiBkaWZmLmM6NTQ1MAorbXNnaWQgIm1vdmVkIGxpbmVzIG9mIGNvZGUgYXJlIGNvbG9yZWQgZGlmZmVyZW50bHkiCittc2dzdHIgImzDrW5lYXMgbW92aWRhcyBkZSBjw7NkaWdvIGVzdMOhbiBjb2xvcmVhZGFzIGRpZmVyZW50ZSIKKworIzogZGlmZi5jOjU0NTMKK21zZ2lkICJob3cgd2hpdGUgc3BhY2VzIGFyZSBpZ25vcmVkIGluIC0tY29sb3ItbW92ZWQiCittc2dzdHIgImNvbW8gZXNwYWNpb3MgZW4gYmxhbmNvIHNvbiBpZ25vcmFkb3MgZW4gLS1jb2xvci1tb3ZlZCIKKworIzogZGlmZi5jOjU0NTYKK21zZ2lkICJPdGhlciBkaWZmIG9wdGlvbnMiCittc2dzdHIgIk90cmFzIG9wY2lvbmVzIGRlIGRpZmYiCisKKyM6IGRpZmYuYzo1NDU4Cittc2dpZCAid2hlbiBydW4gZnJvbSBzdWJkaXIsIGV4Y2x1ZGUgY2hhbmdlcyBvdXRzaWRlIGFuZCBzaG93IHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICIiCisiY3VhbmRvIGVqZWN1dGFkbyBkZXNkZSB1biBzdWJkaXIsIGV4Y2x1eWUgY2FtYmlvcyBkZWwgZXh0ZXJpb3IgeSBtdWVzdHJhICIKKyJwYXRocyByZWxhdGl2b3MiCisKKyM6IGRpZmYuYzo1NDYyCittc2dpZCAidHJlYXQgYWxsIGZpbGVzIGFzIHRleHQiCittc2dzdHIgInRyYXRhciB0b2RvcyBsb3MgYXJjaGl2b3MgY29tbyB0ZXh0byIKKworIzogZGlmZi5jOjU0NjQKK21zZ2lkICJzd2FwIHR3byBpbnB1dHMsIHJldmVyc2UgdGhlIGRpZmYiCittc2dzdHIgImNhbWJpYSBkb3MgaW5wdXRzLCBpbnZpZXJ0ZSBlbCBkaWZmIgorCisjOiBkaWZmLmM6NTQ2NgorbXNnaWQgImV4aXQgd2l0aCAxIGlmIHRoZXJlIHdlcmUgZGlmZmVyZW5jZXMsIDAgb3RoZXJ3aXNlIgorbXNnc3RyICJ0ZXJtaW5hIGNvbiAxIHNpIGh1Ymllcm9uIGRpZmVyZW5jaWFzLCBkZSBsbyBjb250cmFyaW8gY29uIDAiCisKKyM6IGRpZmYuYzo1NDY4Cittc2dpZCAiZGlzYWJsZSBhbGwgb3V0cHV0IG9mIHRoZSBwcm9ncmFtIgorbXNnc3RyICJkZXNoYWJpbGl0YSB0b2RvIGVsIG91dHB1dCBkZWwgcHJvZ3JhbWEiCisKKyM6IGRpZmYuYzo1NDcwCittc2dpZCAiYWxsb3cgYW4gZXh0ZXJuYWwgZGlmZiBoZWxwZXIgdG8gYmUgZXhlY3V0ZWQiCittc2dzdHIgInBlcm1pdGUgbGEgZWplY3VjacOzbiBkZSB1biBkaWZmIGhlbHBlciBleHRlcm5vIgorCisjOiBkaWZmLmM6NTQ3MgorbXNnaWQgInJ1biBleHRlcm5hbCB0ZXh0IGNvbnZlcnNpb24gZmlsdGVycyB3aGVuIGNvbXBhcmluZyBiaW5hcnkgZmlsZXMiCittc2dzdHIgIiIKKyJlamVjdXRhIGZpbHRyb3MgZGUgY29udmVyc2nDs24gZGUgdGV4dG8gZXh0ZXJub3MgY3VhbmRvIGNvbXBhcmFuZG8gYmluYXJpb3MiCisKKyM6IGRpZmYuYzo1NDc0Cittc2dpZCAiPHdoZW4+IgorbXNnc3RyICI8Y3VhbmRvPiIKKworIzogZGlmZi5jOjU0NzUKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzIGluIHRoZSBkaWZmIGdlbmVyYXRpb24iCittc2dzdHIgImlnbm9yYXIgY2FtYmlvcyBhIHN1Ym3Ds2R1bG9zIGVuIGxhIGdlbmVyYWNpw7NuIGRlIGRpZmYiCisKKyM6IGRpZmYuYzo1NDc4Cittc2dpZCAiPGZvcm1hdD4iCittc2dzdHIgIjxmb3JtYXRvPiIKKworIzogZGlmZi5jOjU0NzkKK21zZ2lkICJzcGVjaWZ5IGhvdyBkaWZmZXJlbmNlcyBpbiBzdWJtb2R1bGVzIGFyZSBzaG93biIKK21zZ3N0ciAiZXNwZWNpZmljYSBjb21vIHNvbiBtb3N0cmFkYXMgbGFzIGRpZmVyZW5jaWFzIGVuIHN1Ym3Ds2R1bG9zIgorCisjOiBkaWZmLmM6NTQ4MworbXNnaWQgImhpZGUgJ2dpdCBhZGQgLU4nIGVudHJpZXMgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIm9jdWx0YXIgZW50cmFkYXMgJ2dpdCBhZGQgLU4nIGRlbCBpbmRleCIKKworIzogZGlmZi5jOjU0ODYKK21zZ2lkICJ0cmVhdCAnZ2l0IGFkZCAtTicgZW50cmllcyBhcyByZWFsIGluIHRoZSBpbmRleCIKK21zZ3N0ciAidHJhdGEgZW50cmFkYXMgJ2dpdCBhZGQgLU4nIGNvbW8gcmVhbGVzIGVuIGVsIGluZGV4IgorCisjOiBkaWZmLmM6NTQ4OAorbXNnaWQgIjxzdHJpbmc+IgorbXNnc3RyICI8c3RyaW5nPiIKKworIzogZGlmZi5jOjU0ODkKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJzdHJpbmciCittc2dzdHIgIiIKKyJidXNjYSBwb3IgZGlmZXJlbmNpYXMgcXVlIGNhbWJpZW4gZWwgbsO6bWVybyBkZSBvY3VycmVuY2lhcyBwYXJhIGVsIHN0cmluZyAiCisiZXNwZWNpZmljYWRvIgorCisjOiBkaWZmLmM6NTQ5MgorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInJlZ2V4IgorbXNnc3RyICIiCisiYnVzY2EgcG9yIGRpZmVyZW5jaWFzIHF1ZSBjYW1iaWVuIGVsIG7Dum1lcm8gZGUgb2N1cnJlbmNpYXMgcGFyYSBlbCByZWdleCAiCisiZXNwZWNpZmljYWRvIgorCisjOiBkaWZmLmM6NTQ5NQorbXNnaWQgInNob3cgYWxsIGNoYW5nZXMgaW4gdGhlIGNoYW5nZXNldCB3aXRoIC1TIG9yIC1HIgorbXNnc3RyICJtb3N0cmFyIHRvZG9zIGxvcyBjYW1iaW9zIGVuIGVsIGNoYW5nZXNldCBjb24gLVMgbyAtRyIKKworIzogZGlmZi5jOjU0OTgKK21zZ2lkICJ0cmVhdCA8c3RyaW5nPiBpbiAtUyBhcyBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgInRyYXRhciA8c3RyaW5nPiBlbiAtUyBjb21vIHVuYSBleHByZXNpw7NuIHJlZ3VsYXIgZXh0ZW5kaWRhIGRlIFBPU0lYIgorCisjOiBkaWZmLmM6NTUwMQorbXNnaWQgImNvbnRyb2wgdGhlIG9yZGVyIGluIHdoaWNoIGZpbGVzIGFwcGVhciBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJjb250cm9sYXIgZWwgb3JkZW4gZW4gZWwgcXVlIGxvcyBhcmNoaXZvcyBhcGFyZWNlbiBlbiBsYSBzYWxpZGEiCisKKyM6IGRpZmYuYzo1NTAyCittc2dpZCAiPG9iamVjdC1pZD4iCittc2dzdHIgIjxpZC1vYmpldG8+IgorCisjOiBkaWZmLmM6NTUwMworbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorIm9iamVjdCIKK21zZ3N0ciAiIgorImJ1c2NhIHBvciBkaWZlcmVuY2lhcyBxdWUgY2FtYmllbiBlbCBuw7ptZXJvIGRlIG9jdXJyZW5jaWFzIHBhcmEgZWwgb2JqZXRvICIKKyJlc3BlY2lmaWNhZG8iCisKKyM6IGRpZmYuYzo1NTA1Cittc2dpZCAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorbXNnc3RyICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCisKKyM6IGRpZmYuYzo1NTA2Cittc2dpZCAic2VsZWN0IGZpbGVzIGJ5IGRpZmYgdHlwZSIKK21zZ3N0ciAic2VsZWNjaW9uYSBhcmNoaXZvcyBwb3IgdGlwbyBkZSBkaWZmIgorCisjOiBkaWZmLmM6NTUwOAorbXNnaWQgIjxmaWxlPiIKK21zZ3N0ciAiPGFyY2hpdm8+IgorCisjOiBkaWZmLmM6NTUwOQorbXNnaWQgIk91dHB1dCB0byBhIHNwZWNpZmljIGZpbGUiCittc2dzdHIgIk91dHB1dCBhIHVuIGFyY2hpdm8gZXNwZWPDrWZpY28iCisKKyM6IGRpZmYuYzo2MTY0Cittc2dpZCAiaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIHdhcyBza2lwcGVkIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgIiIKKyJkZXRlY2Npw7NuIGRlIGNhbWJpbyBkZSBub21icmUgaW5leGFjdGEgZnVlIHNhbHRhZGEgcG9yIGhhYmVyIG11Y2hvcyBhcmNoaXZvcy4iCisKKyM6IGRpZmYuYzo2MTY3Cittc2dpZCAib25seSBmb3VuZCBjb3BpZXMgZnJvbSBtb2RpZmllZCBwYXRocyBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICIiCisic29sbyBzZSBlbmNvbnRyYXJvbiBjb3BpYXMgZGUgcnV0YXMgbW9kaWZpY2FkYXMgcG9yIGhhYmVyIG11Y2hvcyBhcmNoaXZvcy4iCisKKyM6IGRpZmYuYzo2MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgbWF5IHdhbnQgdG8gc2V0IHlvdXIgJXMgdmFyaWFibGUgdG8gYXQgbGVhc3QgJWQgYW5kIHJldHJ5IHRoZSBjb21tYW5kLiIKK21zZ3N0ciAiIgorInRhbCB2ZXogcXVpZXJhcyBjb25maWd1cmFyIGxhIHZhcmlhYmxlICVzIHBhcmEgcG9yIGxvIG1lbm9zICVkIHkgdm9sdmVyIGEgIgorImludGVudGFyIGVsIGNvbWFuZG8uIgorCisjOiBkaXIuYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdCIKK21zZ3N0ciAiIgorInJ1dGEgZXNwZWNpZmljYWRhICclcycgbm8gY29uY29yZMOzIGNvbiBuaW5nw7puIGFyY2hpdm8ocykgY29ub2NpZG8gcG9yIGdpdCIKKworIzogZGlyLmM6Njk1IGRpci5jOjcyNCBkaXIuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBhdHRlcm46ICclcyciCittc2dzdHIgInBhdHLDs24gZGVzY29ub2NpZG86ICclcyciCisKKyM6IGRpci5jOjc1NCBkaXIuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIG5lZ2F0aXZlIHBhdHRlcm46ICclcyciCittc2dzdHIgInBhdHLDs24gbmVnYXRpdm8gbm8gcmVjb25vY2lkbzogJyVzJyIKKworIzogZGlyLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IGhhdmUgaXNzdWVzOiBwYXR0ZXJuICclcycgaXMgcmVwZWF0ZWQiCittc2dzdHIgIiIKKyJ0dSBhcmNoaXZvIHNwYXJzZS1jaGVja291dCB0YWwgdmV6IHRlbmdhIGVycm9yZXM6IHBhdHLDs24gJyVzJyBlc3TDoSByZXBldGlkbyIKKworIzogZGlyLmM6Nzk2Cittc2dpZCAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIKK21zZ3N0ciAiZGVzaGFiaWxpdGFyIGNvaW5jaWRlbmNpYSBkZSBwYXRyw7NuZXMgY29ubyIKKworIzogZGlyLmM6MTE3MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdXNlICVzIGFzIGFuIGV4Y2x1ZGUgZmlsZSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgdXNhciAlcyBjb21vIGFyY2hpdm8gZGUgZXhjbHVzacOzbiIKKworIzogZGlyLmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhYnJpciBlbCBkaXJlY3RvcmlvICclcyciCisKKyM6IGRpci5jOjI0NzkKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IGtlcm5lbCBuYW1lIGFuZCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiZmFsbMOzIGFsIGNvbnNlZ3VpciBsYSBpbmZvcm1hY2nDs24geSBub21icmUgZGVsIGtlcm5lbCIKKworIzogZGlyLmM6MjYwMworbXNnaWQgInVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbSBvciBsb2NhdGlvbiIKK21zZ3N0ciAidW50cmFja2VkIGNhY2hlIGVzdMOhIGRlc2FjdGl2YWRvIGVuIGVzdGUgc2lzdGVtYSBvIHViaWNhY2nDs24iCisKKyM6IGRpci5jOjM0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IGluIHJlcG8gJXMiCittc2dzdHIgImFyY2hpdm8gw61uZGljZSBjb3Jyb21waWRvIGVuIHJlcG9zaXRvcmlvICVzIgorCisjOiBkaXIuYzozNDUyIGRpci5jOjM0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gY3JlYXIgZGlyZWN0b3Jpb3MgcGFyYSAlcyIKKworIzogZGlyLmM6MzQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbWlncmF0ZSBnaXQgZGlyZWN0b3J5IGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIG1pZ3JhciBlbCBkaXJlY3RvcmlvIGdpdCBkZSAnJXMnIGEgJyVzJyIKKworIzogZWRpdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGludDogV2FpdGluZyBmb3IgeW91ciBlZGl0b3IgdG8gY2xvc2UgdGhlIGZpbGUuLi4lYyIKK21zZ3N0ciAiYXl1ZGE6IEVzcGVyYW5kbyBxdWUgdHUgZWRpdG9yIGNpZXJyZSBlbCBhcmNoaXZvIC4uLiVjIgorCisjOiBlbnRyeS5jOjE3OAorbXNnaWQgIkZpbHRlcmluZyBjb250ZW50IgorbXNnc3RyICJGaWx0cmFuZG8gY29udGVuaWRvIgorCisjOiBlbnRyeS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCBmaWxlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gZXN0YWJsZWNlciBlbCBhcmNoaXZvICclcyciCisKKyM6IGVudmlyb25tZW50LmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaXQgbmFtZXNwYWNlIHBhdGggXCIlc1wiIgorbXNnc3RyICJydXRhIGRlIG5hbWVzcGFjZSBkZSBnaXQgbWFsYSBcIiVzXCIiCisKKyM6IGVudmlyb25tZW50LmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgR0lUX0RJUiB0byAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGNvbmZpZ3VyYXIgR0lUX0RJUiBhICclcyciCisKKyM6IGV4ZWMtY21kLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3MgdG8gcnVuICVzIgorbXNnc3RyICJkZW1hc2lhZG9zIGFyZ3VtZW50b3MgcGFyYSBjb3JyZXIgJXMiCisKKyM6IGZldGNoLXBhY2suYzoxNTAKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogbGlzdGEgcG9jbyBwcm9mdW5kYSBlc3BlcmFkYSIKKworIzogZmV0Y2gtcGFjay5jOjE1MworbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBhIGZsdXNoIHBhY2tldCBhZnRlciBzaGFsbG93IGxpc3QiCittc2dzdHIgIiIKKyJnaXQgZmV0Y2gtcGFjazogc2UgZXNwZXJhYmEgdW4gZmx1c2ggcGFja2V0IGx1ZWdvIGRlIGxhIGxpc3RhIHN1cGVyZmljaWFsIgorCisjOiBmZXRjaC1wYWNrLmM6MTY0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IHNlIGVzcGVyYWJhIEFDSy9OQUssIHNlIG9idHV2byB1biBmbHVzaCBwYWNrZXQiCisKKyM6IGZldGNoLXBhY2suYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCAnJXMnIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogc2UgZXNwZXJhYmEgQUNLL05BSywgc2Ugb2J0dXZvICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxOTUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdG8gcmVtb3RlIgorbXNnc3RyICJubyBzZSBwdWVkZSBlc2NyaWJpciBhbCByZW1vdG8iCisKKyM6IGZldGNoLXBhY2suYzoyNTcKK21zZ2lkICItLXN0YXRlbGVzcy1ycGMgcmVxdWlyZXMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICItLXN0YXRlbGVzcy1ycGMgcmVxdWllcmUgbXVsdGlfYWNrX2RldGFpbGVkIgorCisjOiBmZXRjaC1wYWNrLmM6MzU2IGZldGNoLXBhY2suYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAibMOtbmVhIHBvY28gcHJvZnVuZGEgaW52w6FsaWRhOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2MiBmZXRjaC1wYWNrLmM6MTM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVuc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAibMOtbmVhIHN1cGVyZmljaWFsIGludsOhbGlkYTogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjQgZmV0Y2gtcGFjay5jOjEzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIm9iamV0byBubyBlbmNvbnRyYWRvOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NyBmZXRjaC1wYWNrLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICJlcnJvciBlbiBvYmpldG86ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY5IGZldGNoLXBhY2suYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNoYWxsb3cgZm91bmQ6ICVzIgorbXNnc3RyICJzdXBlcmZpY2llIG5vIGVuY29udHJhZGE6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzcyIGZldGNoLXBhY2suYzoxMzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHNoYWxsb3cvdW5zaGFsbG93LCBnb3QgJXMiCittc2dzdHIgInNlIGVzcGVyYWJhIHNoYWxsb3cvdW5zaGFsbG93LCBzZSBvYnR1dm8gJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICVkICVzIgorbXNnc3RyICJzZSBvYnR1dm8gJXMgJWQgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgJXMiCittc2dzdHIgImNvbW1pdCBpbnbDoWxpZG8gJXMiCisKKyM6IGZldGNoLXBhY2suYzo0NjIKK21zZ2lkICJnaXZpbmcgdXAiCittc2dzdHIgInJpbmRpw6luZG9zZSIKKworIzogZmV0Y2gtcGFjay5jOjQ3NSBwcm9ncmVzcy5jOjMyMworbXNnaWQgImRvbmUiCittc2dzdHIgImxpc3RvIgorCisjOiBmZXRjaC1wYWNrLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAoJWQpICVzIgorbXNnc3RyICJzZSBvYnR1dm8gJXMgKCVkKSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nICVzIGFzIGNvbXBsZXRlIgorbXNnc3RyICJNYXJjYW5kbyAlcyBjb21vIGNvbXBsZXRhIgorCisjOiBmZXRjaC1wYWNrLmM6NzU0CisjLCBjLWZvcm1hdAorbXNnaWQgImFscmVhZHkgaGF2ZSAlcyAoJXMpIgorbXNnc3RyICJ5YSBzZSB0aWVuZSAlcyAoJXMpIgorCisjOiBmZXRjaC1wYWNrLmM6ODE4Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgImZldGNoLXBhY2s6IG5vIHNlIHB1ZWRlIGV4dHJhZXIgdW4gZGVtdWx0aXBsZXhvciBkZSBiYW5kYSBsYXRlcmFsIgorCisjOiBmZXRjaC1wYWNrLmM6ODI2Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBwYWNrIGhlYWRlciIKK21zZ3N0ciAiZXJyb3IgZGUgcHJvdG9jb2xvOiBwYXF1ZXRlIGRlIGhlYWRlciBlcnLDs25lbyIKKworIzogZmV0Y2gtcGFjay5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgJXMiCittc2dzdHIgImZldGNoLXBhY2s6IG5vIHNlIHB1ZWRlIHF1aXRhciAlcyIKKworIzogZmV0Y2gtcGFjay5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBmYWlsZWQiCittc2dzdHIgIiVzIGZhbGzDsyIKKworIzogZmV0Y2gtcGFjay5jOjkxOAorbXNnaWQgImVycm9yIGluIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgImVycm9yIGVuIGRlbXVsdGlwbGV4b3IgZGUgYmFuZGEgbGF0ZXJhbCIKKworIzogZmV0Y2gtcGFjay5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbiBpcyAlLipzIgorbXNnc3RyICJWZXJzacOzbiBkZSBzZXJ2aWRvciBlcyAlLipzIgorCisjOiBmZXRjaC1wYWNrLmM6OTcwIGZldGNoLXBhY2suYzo5NzYgZmV0Y2gtcGFjay5jOjk3OSBmZXRjaC1wYWNrLmM6OTg1CisjOiBmZXRjaC1wYWNrLmM6OTg5IGZldGNoLXBhY2suYzo5OTMgZmV0Y2gtcGFjay5jOjk5NyBmZXRjaC1wYWNrLmM6MTAwMQorIzogZmV0Y2gtcGFjay5jOjEwMDUgZmV0Y2gtcGFjay5jOjEwMDkgZmV0Y2gtcGFjay5jOjEwMTMgZmV0Y2gtcGFjay5jOjEwMTcKKyM6IGZldGNoLXBhY2suYzoxMDIzIGZldGNoLXBhY2suYzoxMDI5IGZldGNoLXBhY2suYzoxMDM0IGZldGNoLXBhY2suYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyAlcyIKK21zZ3N0ciAiRWwgc2Vydmlkb3Igc29wb3J0YSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjk3MgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2xpZW50cyIKK21zZ3N0ciAiRWwgc2Vydmlkb3Igbm8gc29wb3J0YSBjbGllbnRlcyBzdXBlcmZpY2lhbGVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTAzMgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1zaW5jZSIKK21zZ3N0ciAiRWwgc2Vydmlkb3Igbm8gc29wb3J0YSAtLXNoYWxvdy1zaW5jZSIKKworIzogZmV0Y2gtcGFjay5jOjEwMzcKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIKK21zZ3N0ciAiRWwgc2Vydmlkb3Igbm8gc29wb3J0YSAtLXNoYWxvdy1leGNsdWRlIgorCisjOiBmZXRjaC1wYWNrLmM6MTA0MQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIgorbXNnc3RyICJFbCBzZXJ2aWRvciBubyBzb3BvcnRhIC0tZGVlcGVuIgorCisjOiBmZXRjaC1wYWNrLmM6MTA1OAorbXNnaWQgIm5vIGNvbW1vbiBjb21taXRzIgorbXNnc3RyICJubyBoYXkgY29tbWl0cyBjb211bmVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTA3MCBmZXRjaC1wYWNrLmM6MTUzNgorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFsbMOzLiIKKworIzogZmV0Y2gtcGFjay5jOjEyMDkKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IHJlcXVlc3RzIgorbXNnc3RyICJFbCBzZXJ2aWRvciBubyBzb3BvcnRhIHBldGljaW9uZXMgc3VwZXJmaWNpYWxlcyIKKworIzogZmV0Y2gtcGFjay5jOjEyMTYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgZmlsdGVyIgorbXNnc3RyICJFbCBzZXJ2aWRvciBzb3BvcnRhIGZpbHRybyIKKworIzogZmV0Y2gtcGFjay5jOjEyMzkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVxdWVzdCB0byByZW1vdGUiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGVzY3JpYmlyIHJlcXVlc3QgYWwgcmVtb3RvIgorCisjOiBmZXRjaC1wYWNrLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIHNlY3Rpb24gaGVhZGVyICclcyciCittc2dzdHIgImVycm9yIGxleWVuZG8gc2VjY2nDs24gaGVhZGVyICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciCittc2dzdHIgInNlIGVzcGVyYWJhICclcycsIHNlIHJlY2liacOzICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgYWNrbm93bGVkZ21lbnQgbGluZTogJyVzJyIKK21zZ3N0ciAibMOtbmVhIGRlIGNvbmZpcm1hY2nDs24gaW5lc3BlcmFkYTogJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjEzMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBhY2tzOiAlZCIKK21zZ3N0ciAiZXJyb3IgcHJvY2VzYW5kbyBhY2tzOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjEzMTgKK21zZ2lkICJleHBlY3RlZCBwYWNrZmlsZSB0byBiZSBzZW50IGFmdGVyICdyZWFkeSciCittc2dzdHIgImVzcGVyZSBxdWUgZWwgcGFja2ZpbGUgc2VhIG1hbmRhZG8gbHVlZ28gZGVsICdsaXN0byciCisKKyM6IGZldGNoLXBhY2suYzoxMzIwCittc2dpZCAiZXhwZWN0ZWQgbm8gb3RoZXIgc2VjdGlvbnMgdG8gYmUgc2VudCBhZnRlciBubyAncmVhZHknIgorbXNnc3RyICJlc3BlcmUgcXVlIG5pbmd1bmEgb3RyYSBzZWNjacOzbiBzZWEgZW52aWFkYSBsdWVnbyBkZWwgJ2xpc3RvJyIKKworIzogZmV0Y2gtcGFjay5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBzaGFsbG93IGluZm86ICVkIgorbXNnc3RyICJlcnJvciBwcm9jZXNhbmRvIGluZm9ybWFjacOzbiBzdXBlcmZpY2lhbDogJWQiCisKKyM6IGZldGNoLXBhY2suYzoxNDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHdhbnRlZC1yZWYsIGdvdCAnJXMnIgorbXNnc3RyICJzZSBlc3BlcmFiYSB3YW50ZWQtcmVmLCBzZSBvYnR1dm8gJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCB3YW50ZWQtcmVmOiAnJXMnIgorbXNnc3RyICJ3YW50ZWQtcmVmIGluZXNwZXJhZG86ICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgd2FudGVkIHJlZnM6ICVkIgorbXNnc3RyICJlcnJvciBwcm9jZXNhbmRvIHJlZnMgZGVzZWFkYXM6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTc2MgorbXNnaWQgIm5vIG1hdGNoaW5nIHJlbW90ZSBoZWFkIgorbXNnc3RyICJubyBjb25jdWVyZGEgZWwgaGVhZCByZW1vdG8iCisKKyM6IGZldGNoLXBhY2suYzoxNzg1IGJ1aWx0aW4vY2xvbmUuYzo2ODkKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAicmVtb3RvIG5vIG1hbmRvIHRvZG9zIGxvcyBvYmpldG9zIG5lY2VzYXJpb3MiCisKKyM6IGZldGNoLXBhY2suYzoxODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVtb3RlIHJlZiAlcyIKK21zZ3N0ciAibm8gZXhpc3RlIHJlZiByZW1vdGEgJXMiCisKKyM6IGZldGNoLXBhY2suYzoxODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICJFbCBzZXJ2aWRvciBubyBwZXJtaXRlIHNvbGljaXR1ZGVzIGRlIG9iamV0b3MgaW5hZHZlcnRpZG9zICVzIgorCisjOiBncGctaW50ZXJmYWNlLmM6NDA4Cittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGcgZmFsbMOzIGFsIGZpcm1hciBsYSBkYXRhIgorCisjOiBncGctaW50ZXJmYWNlLmM6NDM0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciBhcmNoaXZvIHRlbXBvcmFsIgorCisjOiBncGctaW50ZXJmYWNlLmM6NDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgZXNjcmliaXIgbGEgZmlybWEgc2VwYXJhZGEgcGFyYSAnJXMnIgorCisjOiBncmFwaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yZSBpbnZhbGlkIGNvbG9yICclLipzJyBpbiBsb2cuZ3JhcGhDb2xvcnMiCittc2dzdHIgImlnbm9yYSBjb2xvciBpbnbDoWxpZG8gJyUuKnMnIGVuIGxvZy5ncmFwaENvbG9ycyIKKworIzogZ3JlcC5jOjY2OAorbXNnaWQgIiIKKyJnaXZlbiBwYXR0ZXJuIGNvbnRhaW5zIE5VTEwgYnl0ZSAodmlhIC1mIDxmaWxlPikuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgIgorIndpdGggLVAgdW5kZXIgUENSRSB2MiIKK21zZ3N0ciAiIgorImVsIHBhdHLDs24gcHJvdmlzdG8gY29udGllbmUgYnl0ZXMgTlVMTCAodmlhIC1mIDxhcmNoaXZvPikuIEVzdG8gc29sbyBlcyAiCisic29wb3J0YWRvIGNvbiAtUCBiYWpvIFBDUkUgdjIiCisKKyM6IGdyZXAuYzoyMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICInJXMnOiBubyBlcyBwb3NpYmxlIGxlZXIgJXMiCisKKyM6IGdyZXAuYzoyMTQ1IHNldHVwLmM6MTY2IGJ1aWx0aW4vY2xvbmUuYzo0MTEgYnVpbHRpbi9kaWZmLmM6ODIKKyM6IGJ1aWx0aW4vcm0uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIG1hcmNhciAnJXMnIgorCisjOiBncmVwLmM6MjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkIgorbXNnc3RyICInJXMnOiBsZWN0dXJhIGNvcnRhIgorCisjOiBoZWxwLmM6MjMKK21zZ2lkICJzdGFydCBhIHdvcmtpbmcgYXJlYSAoc2VlIGFsc286IGdpdCBoZWxwIHR1dG9yaWFsKSIKK21zZ3N0ciAiY29taWVuemEgdW4gw6FyZWEgZGUgdHJhYmFqbyAodmVyIHRhbWJpw6luOiBnaXQgaGVscCB0dXRvcmlhbCkiCisKKyM6IGhlbHAuYzoyNAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICJ0cmFiYWphIGVuIGxvcyBjYW1iaW9zIGFjdHVhbGVzICh2ZXIgdGFtYmnDqW46IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKKworIzogaGVscC5jOjI1Cittc2dpZCAiZXhhbWluZSB0aGUgaGlzdG9yeSBhbmQgc3RhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCByZXZpc2lvbnMpIgorbXNnc3RyICJleGFtaW5hIGVsIGhpc3RvcmlhbCB5IGVsIGVzdGFkbyAodmVyIHRhbWJpw6luOiBnaXQgaGVscCByZXZpc2lvbnMpIgorCisjOiBoZWxwLmM6MjYKK21zZ2lkICJncm93LCBtYXJrIGFuZCB0d2VhayB5b3VyIGNvbW1vbiBoaXN0b3J5IgorbXNnc3RyICJjcmVjZSwgbWFyY2EgeSBhanVzdGEgdHUgaGlzdG9yaWFsIGNvbcO6biIKKworIzogaGVscC5jOjI3Cittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICJjb2xhYm9yYSAobWlyYSB0YW1iacOpbjogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKKworIzogaGVscC5jOjMxCittc2dpZCAiTWFpbiBQb3JjZWxhaW4gQ29tbWFuZHMiCittc2dzdHIgIkNvbWFuZG9zIGRlIFBvcmNlbGFuYSBwcmluY2lwYWxlcyIKKworIzogaGVscC5jOjMyCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICJDb21hbmRvcyBhdXhpbGlhcmVzIC8gTWFuaXB1bGFkb3JlcyIKKworIzogaGVscC5jOjMzCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAiQ29tYW5kb3MgYXV4aWxpYXJlcyAvIEludGVycm9nYWRvcmVzIgorCisjOiBoZWxwLmM6MzQKK21zZ2lkICJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIKK21zZ3N0ciAiSW50ZXJhY3R1YW5kbyBjb24gT3Ryb3MiCisKKyM6IGhlbHAuYzozNQorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIE1hbmlwdWxhdG9ycyIKK21zZ3N0ciAiQ29tYW5kb3MgZGUgYmFqbyBuaXZlbCAvIE1hbmlwdWxhZG9yZXMiCisKKyM6IGhlbHAuYzozNgorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIkNvbWFuZG9zIGRlIGJham8gbml2ZWwgLyBJbnRlcnJvZ2Fkb3JlcyIKKworIzogaGVscC5jOjM3Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gU3luY2luZyBSZXBvc2l0b3JpZXMiCittc2dzdHIgIkNvbWFuZG9zIGRlIGJham8gbml2ZWwgLyBTaW5jcm9uaXphY2nDs24gZGUgcmVwb3NpdG9yaW9zIgorCisjOiBoZWxwLmM6MzgKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcm5hbCBIZWxwZXJzIgorbXNnc3RyICJDb21hbmRvcyBkZSBiYWpvIG5pdmVsIC8gQXV4aWxpYXJlcyBpbnRlcm5vcyIKKworIzogaGVscC5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciCittc2dzdHIgImNvbWFuZG9zIGRpc3BvbmlibGVzIGRlIGdpdCBlbiAnJXMnIgorCisjOiBoZWxwLmM6MzA1Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICJjb21hbmRvcyBkaXNwb25pYmxlcyBkZSBnaXQgZGVzZGUgb3RybyBsdWdhciBlbiB0dSAkUEFUSCIKKworIzogaGVscC5jOjMxNAorbXNnaWQgIlRoZXNlIGFyZSBjb21tb24gR2l0IGNvbW1hbmRzIHVzZWQgaW4gdmFyaW91cyBzaXR1YXRpb25zOiIKK21zZ3N0ciAiRXN0b3Mgc29uIGNvbWFuZG9zIGNvbXVuZXMgZGUgR2l0IHVzYWRvcyBlbiB2YXJpYXMgc2l0dWFjaW9uZXM6IgorCisjOiBoZWxwLmM6MzYzIGdpdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciCittc2dzdHIgImNvbWFuZG8gZGUgbGlzdGFkbyBkZSB0aXBvcyBubyBzb3BvcnRhZG8gJyVzJyIKKworIzogaGVscC5jOjQwMworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6IgorbXNnc3RyICJMYXMgZ3XDrWFzIGNvbXVuZXMgZGUgR2l0IHNvbjoiCisKKyM6IGhlbHAuYzo1MTIKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgdG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQiCittc2dzdHIgIlZlYSAnZ2l0IGhlbHAgPGNvbWFuZG8+JyBwYXJhIGxlZXIgc29icmUgbG9zIHN1YmNvbWFuZG9zIGVzcGVjw61maWNvcyIKKworIzogaGVscC5jOjUxNworbXNnaWQgIkV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICJDb21hbmRvcyBleHRlcm5vcyIKKworIzogaGVscC5jOjUzMgorbXNnaWQgIkNvbW1hbmQgYWxpYXNlcyIKK21zZ3N0ciAiQWxpYXNlcyBkZSBjb21hbmRvIgorCisjOiBoZWxwLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGFwcGVhcnMgdG8gYmUgYSBnaXQgY29tbWFuZCwgYnV0IHdlIHdlcmUgbm90XG4iCisiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIKK21zZ3N0ciAiIgorIiclcycgcGFyZWNlIHNlciB1biBjb21hbmRvIGRlIGdpdCwgcGVybyBubyBoZW1vc1xuIgorInBvZGlkbyBlamVjdXRhcmxvLiDCv1RhbCB2ZXogZ2l0LSVzIHNlIGhhIHJvdG8/IgorCisjOiBoZWxwLmM6NjU1Cittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgIk9oIG9oLiBUdSBzaXN0ZW1hIG5vIHJlcG9ydGEgbmluZ8O6biBjb21hbmRvIGRlIEdpdC4iCisKKyM6IGhlbHAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiUEVMSUdSTzogSGFzIGxsYW1hZG8gYSB1biBjb21hbmRvIGRlIEdpdCAnJXMnLCBlbCBjdWFsIG5vIGV4aXN0ZS4iCisKKyM6IGhlbHAuYzo2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAiQ29udGludWFuZG8gYXN1bWllbmRvIHF1ZSBxdWlzaXN0ZSBkZWNpciAnJXMnLiIKKworIzogaGVscC5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIGluICUwLjFmIHNlY29uZHMsIGFzc3VtaW5nIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICJDb250aW51YW5kbyBlbiAlMC4xZiBzZWd1bmRvcywgYXN1bWllbmRvIHF1ZSB0dSBkaWppc3RlICclcycuIgorCisjOiBoZWxwLmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdDogJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZC4gU2VlICdnaXQgLS1oZWxwJy4iCittc2dzdHIgImdpdDogJyVzJ25vIGVzIHVuIGNvbWFuZG8gZGUgZ2l0LiBNaXJhICdnaXQgLS1oZWxwJy4iCisKKyM6IGhlbHAuYzo2OTkKK21zZ2lkICIiCisiXG4iCisiVGhlIG1vc3Qgc2ltaWxhciBjb21tYW5kIGlzIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiVGhlIG1vc3Qgc2ltaWxhciBjb21tYW5kcyBhcmUiCittc2dzdHJbMF0gIiIKKyJcbiIKKyJFbCBjb21hbmRvIG3DoXMgc2ltaWxhciBlcyIKK21zZ3N0clsxXSAiIgorIlxuIgorIkxvcyBjb21hbmRvcyBtw6FzIHNpbWlsYXJlcyBzb24iCisKKyM6IGhlbHAuYzo3MTQKK21zZ2lkICJnaXQgdmVyc2lvbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHZlcnNpw7NuIFs8b3BjaW9uZXM+XSIKKworIzogaGVscC5jOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgLSAlcyIKK21zZ3N0ciAiJXM6ICVzIC0gJXMiCisKKyM6IGhlbHAuYzo3ODcKK21zZ2lkICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKKyJcbiIKKyLCv1F1aXNpc3RlIGRlY2lyIGVzdG8/IgorbXNnc3RyWzFdICIiCisiXG4iCisiwr9RdWlzaXN0ZSBkZWNpciBhbGd1bm8gZGUgZXN0b3M/IgorCisjOiBpZGVudC5jOjM0OQorbXNnaWQgIiIKKyJcbiIKKyIqKiogUGxlYXNlIHRlbGwgbWUgd2hvIHlvdSBhcmUuXG4iCisiXG4iCisiUnVuXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIlxuIgorInRvIHNldCB5b3VyIGFjY291bnQncyBkZWZhdWx0IGlkZW50aXR5LlxuIgorIk9taXQgLS1nbG9iYWwgdG8gc2V0IHRoZSBpZGVudGl0eSBvbmx5IGluIHRoaXMgcmVwb3NpdG9yeS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIioqKiBQb3IgZmF2b3IgY3XDqW50YW1lIHF1aWVuIGVyZXMuXG4iCisiXG4iCisiQ29ycmVcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIlR1IE5vbWJyZVwiXG4iCisiXG4iCisicGFyYSBjb25maWd1cmFyIGxhIGlkZW50aWRhZCBwb3IgZGVmZWN0byBkZSB0dSBjdWVudGEuXG4iCisiT21pdGUgLS1nbG9iYWwgcGFyYSBjb25maWd1cmFyIHR1IGlkZW50aWRhZCBzb2xvIGVuIGVzdGUgcmVwb3NpdG9yaW8uXG4iCisiXG4iCisKKyM6IGlkZW50LmM6Mzc5Cittc2dpZCAibm8gZW1haWwgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAibm8gc2UgZW50cmVnbyBuaW5nw7puIGVtYWlsIHkgbGEgZGV0ZWNjacOzbiBhdXRvbcOhdGljYSBlc3TDoSBkZXNhY3RpdmFkYSIKKworIzogaWRlbnQuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IGVtYWlsIGFkZHJlc3MgKGdvdCAnJXMnKSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBhdXRvLWRldGVjdGFyIGxhIGRpcmVjY2nDs24gZGUgY29ycmVvIChzZSBvYnR1dm8gJyVzJykiCisKKyM6IGlkZW50LmM6NDAxCittc2dpZCAibm8gbmFtZSB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICJubyBzZSBlbnRyZWdvIG5pbmfDum4gbm9tYnJlIHkgbGEgZGV0ZWNjacOzbiBhdXRvbcOhdGljYSBlc3TDoSBkZXNhY3RpdmFkYSIKKworIzogaWRlbnQuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IG5hbWUgKGdvdCAnJXMnKSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBhdXRvLWRldGVjdGFyIGVsIG5vbWJyZSAoc2Ugb2J0dXZvICclcycpIgorCisjOiBpZGVudC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBpZGVudCBuYW1lIChmb3IgPCVzPikgbm90IGFsbG93ZWQiCittc2dzdHIgIm5vIHNlIHB1ZWRlIHRlbmVyIHVuIG5vbWJyZSB2YWPDrW8gKHBhcmEgPCVzPikiCisKKyM6IGlkZW50LmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIgorbXNnc3RyICJlbCBub21icmUgY29uc2lzdGUgc29sbyBkZSBjYXJhY3RlcmVzIG5vIHBlcm1pdGlkb3M6ICVzIgorCisjOiBpZGVudC5jOjQzNiBidWlsdGluL2NvbW1pdC5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAiZm9ybWF0byBkZSBmZWNoYSBpbnbDoWxpZG86ICVzIgorCisjOiBsaXN0LW9iamVjdHMuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyB0cmVlIG1vZGUsIGJ1dCBpcyBub3QgYSB0cmVlIgorbXNnc3RyICJlbnRyYWRhICclcycgZW4gw6FyYm9sICVzIHRpZW5lIG1vZG8gw6FyYm9sLCBwZXJvIG5vIGVzIHVubyIKKworIzogbGlzdC1vYmplY3RzLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgYmxvYiBtb2RlLCBidXQgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAiZW50cmFkYSAnJXMnIGVuIMOhcmJvbCAlcyB0aWVuZSBtb2RvIGJsb2IsIHBlcm8gbm8gZXMgdW5vIgorCisjOiBsaXN0LW9iamVjdHMuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvYWQgcm9vdCB0cmVlIGZvciBjb21taXQgJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNhcmdhciDDoXJib2wgcmHDrXogcGFyYSBjb21taXQgJXMiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBzcGFyc2UgYmxvYiBpbiAnJXMnIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGFjY2VkZXIgYWwgYmxvYiBlbiAnJXMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBzcGFyc2UgZmlsdGVyIGRhdGEgaW4gJXMiCittc2dzdHIgImluY2FwYXogZGUgYW5hbGl6YXIgZmlsdHJvIGRlIGRhdGEgZW4gJXMiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjU4Cittc2dpZCAiZXhwZWN0ZWQgJ3RyZWU6PGRlcHRoPiciCittc2dzdHIgInNlIGVzcGVyYWJhICd0cmVlOjxkZXB0aD4nIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo3MworbXNnaWQgInNwYXJzZTpwYXRoIGZpbHRlcnMgc3VwcG9ydCBoYXMgYmVlbiBkcm9wcGVkIgorbXNnc3RyICJzb3BvcnRlIHBhcmEgZmlsdHJvcyBzcGFyc2U6cGF0aCBoYSBzaWRvIGRpc2NvbnRpbnVhZG8iCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsdGVyLXNwZWMgJyVzJyIKK21zZ3N0ciAiZmlsdHJvIC1zcGVjIGludsOhbGlkbyAnJXMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVzdCBlc2NhcGUgY2hhciBpbiBzdWItZmlsdGVyLXNwZWM6ICclYyciCittc2dzdHIgInRpZW5lcyBxdWUgZXNjYXBhciBlbCBjYXJhY3RlciBlbiBzdWItZmlsdGVyLXNwZWM6ICclYyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjE0NAorbXNnaWQgImV4cGVjdGVkIHNvbWV0aGluZyBhZnRlciBjb21iaW5lOiIKK21zZ3N0ciAic2UgZXNwZXJhIGFsZ28gbHVlZ28gZGUgY29tYmluZToiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjIyNgorbXNnaWQgIm11bHRpcGxlIGZpbHRlci1zcGVjcyBjYW5ub3QgYmUgY29tYmluZWQiCittc2dzdHIgIm5vIHNlIHB1ZWRlbiBjb21iaW5hciBtw7psdGlwbGVzIHRpcG9zIGRlIGVzcGVjaWZpY2FjaW9uZXMgZGUgZmlsdHJvIgorCisjOiBsb2NrZmlsZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuIgorIlxuIgorIkFub3RoZXIgZ2l0IHByb2Nlc3Mgc2VlbXMgdG8gYmUgcnVubmluZyBpbiB0aGlzIHJlcG9zaXRvcnksIGUuZy5cbiIKKyJhbiBlZGl0b3Igb3BlbmVkIGJ5ICdnaXQgY29tbWl0Jy4gUGxlYXNlIG1ha2Ugc3VyZSBhbGwgcHJvY2Vzc2VzXG4iCisiYXJlIHRlcm1pbmF0ZWQgdGhlbiB0cnkgYWdhaW4uIElmIGl0IHN0aWxsIGZhaWxzLCBhIGdpdCBwcm9jZXNzXG4iCisibWF5IGhhdmUgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllcjpcbiIKKyJyZW1vdmUgdGhlIGZpbGUgbWFudWFsbHkgdG8gY29udGludWUuIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgY3JlYXIgJyVzLmxvY2snOiAlcy5cbiIKKyJcbiIKKyJPdHJvIHByb2Nlc28gZ2l0IHBhcmVjZSBlc3RhciBjb3JyaWVuZG8gZW4gZWwgcmVwb3NpdG9yaW8sIGVzIGRlY2lyXG4iCisidW4gZWRpdG9yIGFiaWVydG8gY29uICdnaXQgY29tbWl0Jy4gUG9yIGZhdm9yIGFzZWfDunJlc2UgZGUgcXVlIHRvZG9zIGxvcyAiCisicHJvY2Vzb3NcbiIKKyJlc3TDoW4gdGVybWluYWRvcyB5IHZ1ZWx2ZSBhIGludGVudGFyLiBTaSBlbCBmYWxsbyBwZXJtYW5lY2UsIHVuIHByb2Nlc28gZ2l0XG4iCisicHVlZGUgaGFiZXIgcm90byBlbCByZXBvc2l0b3JpbyBhbnRlczpcbiIKKyJib3JyYSBlbCBhcmNoaXZvIG1hbnVhbG1lbnRlIHBhcmEgY29udGludWFyLiIKKworIzogbG9ja2ZpbGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzIgorbXNnc3RyICJObyBzZSBwdWRvIGNyZWFyICclcy5sb2NrJzogJXMiCisKKyM6IG1lcmdlLmM6NDEKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgY2FjaGUiCittc2dzdHIgImZhbGzDsyBhbCBsZWVyIGxhIGNhY2hlIgorCisjOiBtZXJnZS5jOjEwNyByZXJlcmUuYzo3MjAgYnVpbHRpbi9hbS5jOjE4NzkgYnVpbHRpbi9hbS5jOjE5MTMKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1NDEgYnVpbHRpbi9jaGVja291dC5jOjgwMCBidWlsdGluL2Nsb25lLmM6ODEwCisjOiBidWlsdGluL3N0YXNoLmM6MjY1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGVzY3JpYmlyIGVsIGFyY2hpdm8gw61uZGljZSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzU2Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIihjb21taXQgZXJyw7NuZW8pXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRfY2FjaGVpbmZvIGZhaWxlZCBmb3IgcGF0aCAnJXMnOyBtZXJnZSBhYm9ydGluZy4iCittc2dzdHIgImFkZF9jYWNoZWluZm8gZmFsbMOzIHBhcmEgbGEgcnV0YSAnJXMnOyBhYm9ydGFuZG8gZnVzacOzbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRfY2FjaGVpbmZvIGZhaWxlZCB0byByZWZyZXNoIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiYWRkX2NhY2hlaW5mbyBmYWxsw7MgcGFyYSByZWZyZXNjYXIgbGEgcnV0YSAnJXMnOyBhYm9ydGFuZG8gZnVzacOzbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIHBhdGggJyVzJyVzIgorbXNnc3RyICJmYWxsw7MgYWwgY3JlYXIgbGEgcnV0YSAnJXMnJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICJSZW1vdmllbmRvICVzIHBhcmEgaGFjZXIgZXNwYWNpbyBwYXJhIHVuIHN1YmRpcmVjdG9yaW9cbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODk5IG1lcmdlLXJlY3Vyc2l2ZS5jOjkxOAorbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIjogwr90YWwgdmV6IHVuIGNvbmZsaWN0byBEL0Y/IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICJyZWh1c2FuZG8gcGVyZGVyIGVsIGFyY2hpdm8gcmFzdHJlYWRvIGVuICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk0OSBidWlsdGluL2NhdC1maWxlLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGxlZXIgZWwgb2JqZXRvICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk1NAorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICJzZSBlc3BlcmFiYSBibG9iIHBhcmEgJXMgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyc6ICVzIgorbXNnc3RyICJmYWxsw7MgYWwgYWJyaXIgJyVzJzogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnOiAlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGNyZWFyIGVsIGVubGFjZSBzaW1iw7NsaWNvICclcyc6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAibm8gc2UgcXVlIGhhY2VyIGNvbiAlMDZvICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGNoZWNrZWQgb3V0KSIKK21zZ3N0ciAiRmFsbMOzIGFsIGZ1c2lvbmFyIGVsIHN1Ym3Ds2R1bG8gJXMgKG5vIHJldmlzYWRvKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIG5vdCBwcmVzZW50KSIKK21zZ3N0ciAiRmFsbMOzIGFsIGZ1c2lvbmFyIGVsIHN1Ym3Ds2R1bG8gJXMgKGNvbW1pdHMgbm8gcHJlc2VudGVzKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIGRvbid0IGZvbGxvdyBtZXJnZS1iYXNlKSIKK21zZ3N0ciAiRmFsbMOzIGVsIGZ1c2lvbmFyIHN1Ym3Ds2R1bG8gJXMgKGNvbW1pdHMgbm8gc2lndWVuIGxhIGZ1c2nDs24gYmFzZSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMTMgbWVyZ2UtcmVjdXJzaXZlLmM6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIHRvIHRoZSBmb2xsb3dpbmcgY29tbWl0OiIKK21zZ3N0ciAiSGFjaWVuZG8gZmFzdC1mb3J3YXJkIGEgc3VibcOzZHVsbyAlcyBwYXJhIGVsIHNpZ3VpZW50ZSBjb21taXQ6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjE2IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiQXZhbmNlIHLDoXBpZG8gZW4gc3VibcOzZHVsbyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtZXJnZSBmb2xsb3dpbmcgY29tbWl0cyBub3QgZm91bmQpIgorbXNnc3RyICIiCisiRmFsbMOzIGFsIGZ1c2lvbmFyIHN1Ym3Ds2R1bG8gJXMgKGxvcyBzaWd1ZW50ZXMgY29tbWl0cyBubyBmdWVyb24gZW5jb250cmFkb3MpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBmYXN0LWZvcndhcmQpIgorbXNnc3RyICJGYWxsw7MgYWwgZnVzaW9uYXIgZWwgc3VibcOzZHVsbyAlcyAobm8gZXMgcG9zaWJsZSBhdmFuY2UgcsOhcGlkbykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTYKK21zZ2lkICJGb3VuZCBhIHBvc3NpYmxlIG1lcmdlIHJlc29sdXRpb24gZm9yIHRoZSBzdWJtb2R1bGU6XG4iCittc2dzdHIgIlNlIGVuY29udHLDsyB1bmEgcG9zaWJsZSBzb2x1Y2nDs24gZGUgZnVzacOzbiBwYXJhIGVsIHN1Ym3Ds2R1bG86XG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHRoaXMgaXMgY29ycmVjdCBzaW1wbHkgYWRkIGl0IHRvIHRoZSBpbmRleCBmb3IgZXhhbXBsZVxuIgorImJ5IHVzaW5nOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisid2hpY2ggd2lsbCBhY2NlcHQgdGhpcyBzdWdnZXN0aW9uLlxuIgorbXNnc3RyICIiCisiU2kgZXN0byBlcyBjb3JyZWN0byBzaW1wbGVtZW50ZSBhZ3LDqWdhbG8gYWwgw61uZGljZSBwb3IgZWplbXBsb1xuIgorInVzYW5kbzpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorImVsIGN1YWwgYWNlcHRhcsOhIGVzdGEgc3VnZXJlbmNpYS5cbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtdWx0aXBsZSBtZXJnZXMgZm91bmQpIgorbXNnc3RyICJGYWxsw7MgYWwgZnVzaW9uYXIgZWwgc3VibcOzZHVsbyAlcyAoZnVzaW9uZXMgbcO6bHRpcGxlcyBlbmNvbnRyYWRhcykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNDEKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAiRmFsbMOzIGFsIGVqZWN1dGFyIGxhIGZ1c2nDs24gaW50ZXJuYSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICJObyBlcyBwb3NpYmxlIGFncmVnYXIgJXMgYSBsYSBiYXNlIGRlIGRhdG9zIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAiQXV0by1mdXNpb25hbmRvICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyB3cml0aW5nIHRvICVzIGluc3RlYWQuIgorbXNnc3RyICIiCisiRXJyb3I6IFJlaHVzYW5kbyBwZXJkZXIgZWwgYXJjaGl2byBubyByYXN0cmVhZG8gZW4gJXM7IGVzY3JpYmnDqW5kb2xvIGEgJXMgZW4gIgorImNhbWJpby4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKK21zZ3N0ciAiIgorIkNPTkZMSUNUTyAoJXMvYm9ycmFyKTogJXMgYm9ycmFkbyBlbiAlcyB5ICVzIGVuICVzLiBGYWx0YSB2ZXJzacOzbiAlcyBkZSAlcyAiCisiZW4gZWwgw6FyYm9sLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUuIgorbXNnc3RyICIiCisiQ09ORkxJQ1RPICglcy9ib3JyYXIpOiAlcyBib3JyYWRvIGVuICVzIHkgJXMgcGFyYSAlcyBlbiAlcy4gVmVyc2nDs24gJXMgZGUgJXMgIgorInBlcm1hbmVjZSBlbiBlbCDDoXJib2wuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJDT05GTElDVE8gKCVzL2VsaW1pbmFyKTogJXMgZWxpbWluYWRvIGVuICVzIHkgJXMgZW4gJXMuIFZlcnNpw7NuICVzIGRlICVzICIKKyJkZWphZGEgZW4gZWwgw6FyYm9sLCBlbiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIkNPTkZMSUNUTyAoJXMvYm9ycmFyKTogJXMgYm9ycmFkbyBlbiAlcyB5ICVzIHBhcmEgJXMgZW4gJXMuIFZlcnNpw7NuICVzIGRlICVzICIKKyJwZXJtYW5lY2UgZW4gZWwgw6FyYm9sIGVuICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUyNgorbXNnaWQgInJlbmFtZSIKK21zZ3N0ciAicmVub21icmFyIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI2Cittc2dpZCAicmVuYW1lZCIKK21zZ3N0ciAicmVub21icmFkbyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU3NyBtZXJnZS1yZWN1cnNpdmUuYzoyNDcyIG1lcmdlLXJlY3Vyc2l2ZS5jOjMxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0ICVzIgorbXNnc3RyICJSZWh1c2FuZG8gcGVyZGVyIGVsIGFyY2hpdm8gc3VjaW8gZW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAiIgorIlJlaHVzYW5kbyBwZXJkZXIgZWwgYXJjaGl2byBubyByYXN0cmVhZG8gZW4gJXMsIGluY2x1c28gYXVucXVlIHNlIGVzdMOhICIKKyJpbnRlcnBvbmllbmRvLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL2FkZCk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuICBBZGRlZCAlcyBpbiAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSUNUTyAocmVub21icmFyL2FncmVnYXIpOiBSZW5vbWJyYXIgJXMtPiVzIGVuICVzLiAgJXMgYWdyZWdhZG8gZW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVzIGVzIHVuIGRpcmVjdG9yaW8gZW4gJXMgYWdyZWdhbmRvIGNvbW8gJXMgbcOhcyBiaWVuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIiCisiUmVodXNhbmRvIHBlcmRlciBlbCBhcmNoaXZvIG5vIHJhc3RyZWFkbyBlbiAlczsgYWdyZWfDoW5kb2xvIGNvbW8gJXMgZW4gY2FtYmlvIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBcIiVzXCItPlwiJXNcIiBpbiBicmFuY2ggXCIlc1wiIHJlbmFtZSBcIiVzIgorIlwiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCittc2dzdHIgIiIKKyJDT05GTElDVE8gKHJlbm9tYnJhci9yZW5vbWJyYXIpOiBSZW5vbWJyYXIgXCIlc1wiLT5cIiVzXCIgZW4gbGEgcmFtYSBcIiVzXCIgIgorInJlbm9tYnJhciBcIiVzXCItPlwiJXNcIiBlbiBcIiVzXCIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcxMworbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiIChkZWphZG8gc2luIHJlc29sdmVyKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc5MworIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJDT05GTElDVE8gKHJlbm9tYnJhci9yZW5vbWJyYXIpOiBSZW5vbWJyYXIgJXMtPiVzIGVuICVzLiBSZW5vbWJyYXIgJXMtPiVzIGVuICIKKyIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGRpcmVjdG9yeSByZW5hbWUgc3BsaXQpOiBVbmNsZWFyIHdoZXJlIHRvIHBsYWNlICVzIGJlY2F1c2UgIgorImRpcmVjdG9yeSAlcyB3YXMgcmVuYW1lZCB0byBtdWx0aXBsZSBvdGhlciBkaXJlY3Rvcmllcywgd2l0aCBubyBkZXN0aW5hdGlvbiAiCisiZ2V0dGluZyBhIG1ham9yaXR5IG9mIHRoZSBmaWxlcy4iCittc2dzdHIgIiIKKyJDT05GTElDVE8gKGRpdmlzacOzbiBkZSBjYW1iaW8gZGUgbm9tYnJlIGRlIGRpcmVjdG9yaW8pOiBObyBlcyBjbGFybyBkw7NuZGUgIgorImNvbG9jYXIgJXMgcG9ycXVlIGVsIGRpcmVjdG9yaW8gJXMgZnVlIHJlbm9tYnJhZG8gYSBvdHJvcyBtw7psdGlwbGVzICIKKyJkaXJlY3Rvcmlvcywgc2luIG5pbmfDum4gcXVlIGNvbnRlbmdhIGxhIG1heW9yw61hIGRlIGFyY2hpdm9zLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBFeGlzdGluZyBmaWxlL2RpciBhdCAlcyBpbiB0aGUgd2F5IG9mICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lKHMpIHB1dHRpbmcgdGhlIGZvbGxvd2luZyBwYXRoKHMpIHRoZXJlOiAlcy4iCittc2dzdHIgIiIKKyJDT05GTElDVE8gKGNhbWJpbyBkZSBub21icmUgZGUgZGlyZWN0b3JpbyBpbXBsw61jaXRvKTogQXJjaGl2by9kaXJlY3RvcmlvICIKKyJleGlzdGVudGUgZW4gJXMgc2UgaW50ZXJwb25lIGNvbiBlbCBjYW1iaW8gZGUgbm9tYnJlcyBpbXBsw61jaXRvLCBwb25pZW5kbyAiCisibGEocykgc2lndWllbnRlKHMpIHJ1dGEocykgYXF1w606ICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBDYW5ub3QgbWFwIG1vcmUgdGhhbiBvbmUgcGF0aCB0byAlczsgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzIHRyaWVkIHRvIHB1dCB0aGVzZSBwYXRocyB0aGVyZTogJXMiCittc2dzdHIgIiIKKyJDT05GTElDVE8gKGNhbWJpbyBkZSBub21icmUgaW1wbMOtY2l0byk6IE5vIHNlIHB1ZWRlIG1hcGVhciBtw6FzIGRlIHVuYSBydXRhICIKKyJwYXJhICVzOyBjYW1iaW8gZGUgbm9tYnJlIGltcGzDrWNpdG8gaW50ZW50w7MgcG9uZXIgZXN0YXMgcnV0YXM6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiBSZW5hbWUgZGlyZWN0b3J5ICVzLSIKKyI+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJDT05GTElDVE8gKHJlbm9tYnJhci9yZW5vbWJyYXIpOiBSZW5vbWJyYXIgZGlyZWN0b3JpbyAlcy0+JXMgZW4gJXMuICIKKyJSZW5vbWJyYXIgZGlyZWN0b3JpbyAlcy0+JXMgZW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nICVzIC0+ICVzIHJlbmFtZSB0byAlcywgYmVjYXVzZSAlcyBpdHNlbGYgd2FzICIKKyJyZW5hbWVkLiIKK21zZ3N0ciAiIgorIlBFTElHUk86IEV2aXRhbmRvIGFwbGljYXIgJXMgLT4gJXMgcmVub21icmFkbyBhICVzLCBwb3JxdWUgJXMgbWlzbW8gZnVlICIKKyJyZW5vbWJyYWRvLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mjk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciBlbCBvYmpldG8gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIm9iamV0byAlcyBubyBlcyB1biBibG9iIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDI4Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICJtb2RpZmljYXIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMjgKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAibW9kaWZpY2FkbyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA0MAorbXNnaWQgImNvbnRlbnQiCittc2dzdHIgImNvbnRlbmlkbyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA0NAorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgImFncmVnYXIvYWdyZWdhciIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA2NworIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIlNhbHRhZG8gJXMgKGZ1c2lvbmFkbyBjb21vIGV4aXN0ZW50ZSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODkgZ2l0LXN1Ym1vZHVsZS5zaDoxMDAzCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJzdWJtw7NkdWxvIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJDT05GTElDVE8gKCVzKTogQ29uZmxpY3RvIGRlIGZ1c2nDs24gZW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIkFncmVnYW5kbyBtw6FzIGJpZW4gY29tbyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAlczsgIgorIm1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKyJQYXRoIGFjdHVhbGl6YWRvOiAlcyBhZ3JlZ2FkbyBlbiAlcyBkZW50cm8gZGUgdW4gZGlyZWN0b3JpbyBxdWUgZnVlICIKKyJyZW5vbWJyYWRvIGVuICVzOyBtb3Zpw6luZG9sbyBhICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCAiCisiaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisiQ09ORkxJQ1RPICh1YmljYWNpw7NuIGRlIGFyY2hpdm8pOiAlcyBhZ3JlZ2FkbyBlbiAlcyBkZW50cm8gZGUgdW4gZGlyZWN0b3JpbyAiCisicXVlIGZ1ZSByZW5vbWJyYWRvIGVuICVzLCBzdWdlcmltb3MgcXVlIGRlYmVyw61hIHNlciBtb3ZpZG8gYSAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhdGggdXBkYXRlZDogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gIgorIiVzOyBtb3ZpbmcgaXQgdG8gJXMuIgorbXNnc3RyICIiCisiUGF0aCBhY3R1YWxpemFkbzogJXMgcmVub21icmFkbyBhICVzIGVuICVzLCBkZW50cm8gZGUgdW4gZGlyZWN0b3JpbyBxdWUgZnVlICIKKyJyZW5vbWJyYWRvIGVuICVzOyBtb3Zpw6luZG9sbyBhICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCAiCisid2FzIHJlbmFtZWQgaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisiQ09ORkxJQ1RPICh1YmljYWNpw7NuIGRlIGFyY2hpdm8pOiAlcyByZW5vbWJyYWRvIGEgJXMgZW4gJXMsIGRlbnRybyBkZSB1biAiCisiZGlyZWN0b3JpbyBxdWUgZnVlIHJlbm9tYnJhZG8gZW4gJXMsIHN1Z2lyaWVuZG8gcXVlIHRhbCB2ZXogZGViZXLDrWEgc2VyICIKKyJtb3ZpZG8gYSAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgIkVsaW1pbmFuZG8gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNTAKK21zZ2lkICJmaWxlL2RpcmVjdG9yeSIKK21zZ3N0ciAiYXJjaGl2by9kaXJlY3RvcmlvIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzU1Cittc2dpZCAiZGlyZWN0b3J5L2ZpbGUiCittc2dzdHIgImRpcmVjdG9yaW8vYXJjaGl2byIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSUNUTyAoJXMpOiBIYXkgdW4gZGlyZWN0b3JpbyBjb24gZWwgbm9tYnJlICVzIGVuICVzLiBBZ3JlZ2FuZG8gJXMgY29tbyAiCisiJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICJBZ3JlZ2FuZG8gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKGFkZC9hZGQpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAiQ09ORkxJQ1RPIChhZGQvYWRkKTogQ29uZmxpY3RvIGRlIG1lcmdlIGVuICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDI0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlISIKK21zZ3N0ciAiwqFZYSBlc3TDoSBhY3R1YWxpemFkbyEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICJmYWxsw7MgbGEgZnVzacOzbiBkZSBsb3Mgw6FyYm9sZXMgJXMgeSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzUzNworbXNnaWQgIk1lcmdpbmc6IgorbXNnc3RyICJGdXNpb25hbmRvOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IgorbXNnaWRfcGx1cmFsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIKK21zZ3N0clswXSAic2UgZW5jb250csOzICV1IGFuY2VzdHJvIGNvbcO6bjoiCittc2dzdHJbMV0gInNlIGVuY29udHJhcm9uICV1IGFuY2VzdHJvcyBjb211bmVzOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzYwMAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAibGEgZnVzacOzbiBubyBkZXZvbHZpw7MgbmluZ8O6biBjb21taXQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiAgJXMiCittc2dzdHIgIiIKKyJMb3MgY2FtYmlvcyBsb2NhbGVzIGRlIGxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNlcsOhbiBzb2JyZWVzY3JpdG9zIHBvciAiCisibWVyZ2U6XG4iCisiICAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIk5vIHNlIHB1ZG8gYW5hbGl6YXIgZWwgb2JqZXRvICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM3NzQgYnVpbHRpbi9tZXJnZS5jOjY5NyBidWlsdGluL21lcmdlLmM6ODc3Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiSW5jYXBheiBkZSBlc2NyaWJpciBlbCDDrW5kaWNlLiIKKworIzogbWlkeC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggZmlsZSAlcyBpcyB0b28gc21hbGwiCittc2dzdHIgImFyY2hpdm8gbXVsdGktcGFjay1pbmRleCAlcyBlcyBtdXkgcGVxdWXDsW8iCisKKyM6IG1pZHguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSAweCUwOHggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAiZmlybWEgZGUgbXVsdGktcGFjay1pbmRleCAweCUwOHggbm8gY29uY3VlcmRhIGNvbiBmaXJtYSAweCUwOHgiCisKKyM6IG1pZHguYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHZlcnNpb24gJWQgbm90IHJlY29nbml6ZWQiCittc2dzdHIgInZlcnNpw7NuICVkIGRlIG11bHRpLXBhY2staW5kZXggbm8gcmVjb25vY2lkYSIKKworIzogbWlkeC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggdmVyc2lvbiAldSBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAidmVyc2nDs24gZGUgaGFzaCAldSBubyBjb25jdWVyZGEiCisKKyM6IG1pZHguYzoxMDgKK21zZ2lkICJpbnZhbGlkIGNodW5rIG9mZnNldCAodG9vIGxhcmdlKSIKK21zZ3N0ciAib2Zmc2V0IGludsOhbGlkbyBkZWwgY29uanVudG8gKG11eSBncmFuZGUpIgorCisjOiBtaWR4LmM6MTMyCittc2dpZCAidGVybWluYXRpbmcgbXVsdGktcGFjay1pbmRleCBjaHVuayBpZCBhcHBlYXJzIGVhcmxpZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiIgorInRlcm1pbmFuZG8gbXVsdGktcGFjay1pbmRleCBwb3JxdWUgZWwgaWQgZGVsIGNvbmp1bnRvIGFwYXJlY2UgYW50ZXMgZGUgbG8gIgorImVzcGVyYWRvIgorCisjOiBtaWR4LmM6MTQ1Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIHBhY2stbmFtZSBjaHVuayIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCBsZSBmYWx0YSBlbCBjb25qdW50byBwYWNrLW5hbWUgcmVxdWVyaWRvIgorCisjOiBtaWR4LmM6MTQ3Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBmYW5vdXQgY2h1bmsiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXggbGUgZmFsdGEgZWwgY29uanVudG8gT0lEIGZhbm91dCByZXF1ZXJpZG8iCisKKyM6IG1pZHguYzoxNDkKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGxvb2t1cCBjaHVuayIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCBsZSBmYWx0YSBlbCBjb25qdW50byBPSUQgZmFub3V0IHJlcXVlcmlkbyIKKworIzogbWlkeC5jOjE1MQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBvYmplY3Qgb2Zmc2V0cyBjaHVuayIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCBsZSBmYWx0YSBlbCBjb25qdW50byBkZSBvZmZzZXQgZGVsIG9iamV0byByZXF1ZXJpZG8iCisKKyM6IG1pZHguYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBwYWNrIG5hbWVzIG91dCBvZiBvcmRlcjogJyVzJyBiZWZvcmUgJyVzJyIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCBub21icmVzIGRlIHBhcXVldGUgZnVlcmEgZGUgb3JkZW46JyVzJyBhbnRlcyAnJXMnIgorCisjOiBtaWR4LmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLWludC1pZDogJXUgKCV1IHRvdGFsIHBhY2tzKSIKK21zZ3N0ciAibWFsIHBhY2staW50LWlkOiAldSAoJXUgcGFxdWV0ZXMgdG90YWxlcykiCisKKyM6IG1pZHguYzoyNjAKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHN0b3JlcyBhIDY0LWJpdCBvZmZzZXQsIGJ1dCBvZmZfdCBpcyB0b28gc21hbGwiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXggZ3VhcmRhIHVuIG9mZnNldCBkZSA2NC1iaXQsIHBlcm8gb2ZmX3QgZXMgbXV5IHBlcXVlw7FvIgorCisjOiBtaWR4LmM6Mjg4Cittc2dpZCAiZXJyb3IgcHJlcGFyaW5nIHBhY2tmaWxlIGZyb20gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiZXJyb3IgcHJlcGFyYW5kbyBwYWNrZmlsZSBkZSBtdWx0aS1wYWNrLWluZGV4IgorCisjOiBtaWR4LmM6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhZGQgcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGFncmVnYXIgcGFja2ZpbGUgJyVzJyIKKworIzogbWlkeC5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwYWNrLWluZGV4ICclcyciCittc2dzdHIgImZhbGzDsyBhbCBhYnJpciBwYWNrLWluZGV4ICclcyciCisKKyM6IG1pZHguYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvY2F0ZSBvYmplY3QgJWQgaW4gcGFja2ZpbGUiCittc2dzdHIgImZhbGzDsyBhbCB1YmljYXIgb2JqZXRvICVkIGVuIHBhY2tmaWxlIgorCisjOiBtaWR4LmM6ODQyCittc2dpZCAiQWRkaW5nIHBhY2tmaWxlcyB0byBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJBZ3JlZ2FuZG8gcGFja2ZpbGVzIGEgbXVsdGktcGFjay1pbmRleCIKKworIzogbWlkeC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHNlZSBwYWNrLWZpbGUgJXMgdG8gZHJvcCIKK21zZ3N0ciAibm8gc2UgdmnDsyBwYWNrLWZpbGUgJXMgY2FlciIKKworIzogbWlkeC5jOjk3MworbXNnaWQgIldyaXRpbmcgY2h1bmtzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIkVzY3JpYmllbmRvIGNodW5rcyBhIG11bHRpLXBhY2staW5kZXgiCisKKyM6IG1pZHguYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbGVhciBtdWx0aS1wYWNrLWluZGV4IGF0ICVzIgorbXNnc3RyICJmYWxsw7MgYWwgbGltcGlhciBtdWx0aS1wYWNrLWluZGV4IGVuICVzIgorCisjOiBtaWR4LmM6MTEwOAorbXNnaWQgIkxvb2tpbmcgZm9yIHJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICJCdXNjYW5kbyBwb3IgcGFja2ZpbGVzIHJlZmVyaWRvcyIKKworIzogbWlkeC5jOjExMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9pZCBmYW5vdXQgb3V0IG9mIG9yZGVyOiBmYW5vdXRbJWRdID0gJTxQUkl4MzI+ID4gJTxQUkl4MzI+ID0gZmFub3V0WyVkXSIKK21zZ3N0ciAiIgorIm9pZCBmYW5vdXQgZnVlcmEgZGUgb3JkZW46IGZhbm91dFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSBmYW5vdXRbJWRdIgorCisjOiBtaWR4LmM6MTEyOAorbXNnaWQgIlZlcmlmeWluZyBPSUQgb3JkZXIgaW4gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiVmVyaWZpY2FuZG8gb3JkZW4gZGUgT0lEIGVuIG11bHRpLXBhY2staW5kZXgiCisKKyM6IG1pZHguYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9pZCBsb29rdXAgb3V0IG9mIG9yZGVyOiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorbXNnc3RyICJvaWQgbG9va3VwIGZ1ZXJhIGRlIG9yZGVuOiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorCisjOiBtaWR4LmM6MTE1NworbXNnaWQgIlNvcnRpbmcgb2JqZWN0cyBieSBwYWNrZmlsZSIKK21zZ3N0ciAiT3JkZW5hbmRvIG9iamV0b3MgcG9yIHBhY2tmaWxlIgorCisjOiBtaWR4LmM6MTE2NAorbXNnaWQgIlZlcmlmeWluZyBvYmplY3Qgb2Zmc2V0cyIKK21zZ3N0ciAiVmVyaWZpY2FuZG8gb2Zmc2V0cyBkZSBvYmpldG9zIgorCisjOiBtaWR4LmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrIGVudHJ5IGZvciBvaWRbJWRdID0gJXMiCittc2dzdHIgImZhbGxvIGFsIGNhcmdhciBlbnRyYWRhIHBhY2sgcGFyYSBvaWRbJWRdID0gJXMiCisKKyM6IG1pZHguYzoxMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2staW5kZXggZm9yIHBhY2tmaWxlICVzIgorbXNnc3RyICJmYWxsw7MgYWwgY2FyZ2FyIGVsIHBhY2staW5kZXggcGFyYSBwYWNrZmlsZSAlcyIKKworIzogbWlkeC5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb3JyZWN0IG9iamVjdCBvZmZzZXQgZm9yIG9pZFslZF0gPSAlczogJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKK21zZ3N0ciAib2Zmc2V0IHBhcmEgb2JqZXRvIGluY29ycmVjdG8gb2lkWyVkXSA9ICVzOiAlPFBSSXg2ND4gIT0gJTxQUkl4NjQ+IgorCisjOiBtaWR4LmM6MTIyMAorbXNnaWQgIkNvdW50aW5nIHJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAiQ29udGFuZG8gb2JqZXRvcyBubyByZWZlcmVuY2lhZG9zIgorCisjOiBtaWR4LmM6MTIzMAorbXNnaWQgIkZpbmRpbmcgYW5kIGRlbGV0aW5nIHVucmVmZXJlbmNlZCBwYWNrZmlsZXMiCittc2dzdHIgIkVuY29udHJhbmRvIHkgYm9ycmFuZG8gcGFja2ZpbGVzIHNpbiByZWZlcmVuY2lhcyIKKworIzogbWlkeC5jOjEzODgKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIgorbXNnc3RyICJubyBzZSBwdWRvIGVtcGV6YXIgbG9zIHBhY2stb2JqZXRjdHMiCisKKyM6IG1pZHguYzoxNDA3Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZmluYWxpemFyIHBhY2stb2JqZXRjdHMiCisKKyM6IG5hbWUtaGFzaC5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfZGlyIHRocmVhZDogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgY3JlYXIgaGlsbyBsYXp5X2RpcjogJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGNyZWFyIGhpbG8gbGF6eV9uYW1lOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIHVuaXIgaGlsbyBsYXp5X25hbWU6ICVzIgorCisjOiBub3Rlcy1tZXJnZS5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIHByZXZpb3VzIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLlxuIgorIlBsZWFzZSwgdXNlICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG9yICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcgdG8gIgorImNvbW1pdC9hYm9ydCB0aGUgcHJldmlvdXMgbWVyZ2UgYmVmb3JlIHlvdSBzdGFydCBhIG5ldyBub3RlcyBtZXJnZS4iCittc2dzdHIgIiIKKyJObyBoYXMgY29uY2x1aWRvIHR1cyBub3RhcyBwcmV2aWFzIGRlIGZ1c2nDs24gKCVzIGV4aXN0ZSkuXG4iCisiUG9yIGZhdm9yLCB1c2EgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcgbyAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHBhcmEgIgorImNvbmZpcm1hci9hYm9ydGFyIGxhIGZ1c2nDs24gcHJldmlhIGFudGVzIGRlIHF1ZSBwdWVkYXMgY29tZW56YXIgdW5hIG51ZXZhICIKKyJub3RhIGRlIGZ1c2nDs24uIgorCisjOiBub3Rlcy1tZXJnZS5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuIgorbXNnc3RyICJObyBoYXMgdGVybWluYWRvIHR1cyBub3RhcyBkZSBmdXNpw7NuICglcyBleGlzdGUpLiIKKworIzogbm90ZXMtdXRpbHMuYzo0NgorbXNnaWQgIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIHJlYWxpemFyIGNvbW1pdCwgbm90YXMgZGVsIMOhcmJvbCBubyBpbmljaWFsaXphZGFzIG8gbm8gIgorInJlZmVyZW5jaWFkYXMiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVmFsb3IgZXJyw7NuZW8gcGFyYSBub3Rlcy5yZXdyaXRlTW9kZTogJyVzJyIKKworIzogbm90ZXMtdXRpbHMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIlJlaHVzYW5kbyByZWVzY3JpYmlyIG5vdGFzIGVuICVzIChmdWVyYSBkZSByZWZzL25vdGVzLykiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YKKyMuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcworIy4gaXRzIHZhbHVlLgorIy4KKyM6IG5vdGVzLXV0aWxzLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVmFsb3IgZXJyw7NuZW8gcGFyYSAlczogJyVzJyIKKworIzogb2JqZWN0LmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSBcIiVzXCIiCittc2dzdHIgInRpcG8gZGUgb2JqZXRvIFwiJXNcIiBpbnbDoWxpZG8iCisKKyM6IG9iamVjdC5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgYSAlcywgbm90IGEgJXMiCittc2dzdHIgIm9iamV0byAlcyBlcyB1biAlcywgbm8gdW4gJXMiCisKKyM6IG9iamVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaGFzIHVua25vd24gdHlwZSBpZCAlZCIKK21zZ3N0ciAiZWwgb2JqZXRvICVzIHRpZW5lIHVuIGlkIGRlIHRpcG8gZGVzY29ub2NpZG8gJWQiCisKKyM6IG9iamVjdC5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIKK21zZ3N0ciAiaW5jYXBheiBkZSBhbmFsaXphciBvYmpldG86ICVzIgorCisjOiBvYmplY3QuYzoyNjYgb2JqZWN0LmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggJXMiCittc2dzdHIgImhhc2ggbm8gY29uY3VlcmRhICVzIgorCisjOiBwYWNrZmlsZS5jOjYyOQorbXNnaWQgIm9mZnNldCBiZWZvcmUgZW5kIG9mIHBhY2tmaWxlIChicm9rZW4gLmlkeD8pIgorbXNnc3RyICJvZmZzZXQgYW50ZXMgZGVsIGZpbmFsIGRlbCBwYXF1ZXRlIChicm9rZW4gLmlkeD8pIgorCisjOiBwYWNrZmlsZS5jOjE4OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJlZm9yZSBzdGFydCBvZiBwYWNrIGluZGV4IGZvciAlcyAoY29ycnVwdCBpbmRleD8pIgorbXNnc3RyICIiCisib2Zmc2V0IGFudGVzIGRlbCBjb21pZW56byBkZWwgw61uZGljZSBkZWwgcGFxdWV0ZSBwYXJhICVzICjCv8OtbmRpY2UgY29ycnVwdG8/KSIKKworIzogcGFja2ZpbGUuYzoxOTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZXlvbmQgZW5kIG9mIHBhY2sgaW5kZXggZm9yICVzICh0cnVuY2F0ZWQgaW5kZXg/KSIKK21zZ3N0ciAiIgorIm9mZnNldCBtw6FzIGFsbMOhIGRlbCDDrW5kaWNlIGRlIGZpbiBkZSBwYXF1ZXRlIHBhcmEgJXMgKMK/w61uZGljZSB0cnVuY2Fkbz8pIgorCisjOiBwYWNrLWJpdG1hcC5jOjgwMCBwYWNrLWJpdG1hcC5jOjgwNiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBzaXplIG9mICVzIgorbXNnc3RyICJubyBzZSBwdWRvIG9idGVuZXIgZWwgdGFtYcOxbyBkZSAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIiVzIHJlcXVpZXJlIHVuIHZhbG9yIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJXMiCittc2dzdHIgIiVzIGVzIGluY29tcGF0aWJsZSBjb24gJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IGluY29tcGF0aWJsZSB3aXRoIHNvbWV0aGluZyBlbHNlIgorbXNnc3RyICIlcyA6IGluY29tcGF0aWJsZSBjb24gb3RyYSBjb3NhIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTIgcGFyc2Utb3B0aW9ucy5jOjk2IHBhcnNlLW9wdGlvbnMuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGFrZXMgbm8gdmFsdWUiCittc2dzdHIgIiVzIG5vIHRvbWEgdmFsb3JlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzbid0IGF2YWlsYWJsZSIKK21zZ3N0ciAiJXMgbm8gZXN0w6EgZGlzcG9uaWJsZSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2l0aCBhbiBvcHRpb25hbCBrL20vZyBzdWZmaXgiCittc2dzdHIgIiVzIGVzcGVyYSB1biB2YWxvciBlbnRlcm8gbm8gbmVnYXRpdm8gY29uIHVuIHN1ZmlqbyBvcGNpb25hbCBrL20vZyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgb3B0aW9uOiAlcyAoY291bGQgYmUgLS0lcyVzIG9yIC0tJXMlcykiCittc2dzdHIgIm9wY2nDs24gYW1iaWd1YTogJXMgKHB1ZWRlIHNlciAtLSVzJXMgbyAtLSVzJXMpIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NDIwIHBhcnNlLW9wdGlvbnMuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIHlvdSBtZWFuIGAtLSVzYCAod2l0aCB0d28gZGFzaGVzKT8iCittc2dzdHIgIsK/cXVpc2lzdGUgZGVjaXIgYC0tJXNgIChjb24gZG9zIGd1aW9uZXMpPyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiBgJXMnIgorbXNnc3RyICJvcGNpw7NuIGAlcycgZGVzY29ub2NpZGEiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzd2l0Y2ggYCVjJyIKK21zZ3N0ciAic3dpdGNoIGRlc2Nvbm9jaWRvIGAlYyciCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub24tYXNjaWkgb3B0aW9uIGluIHN0cmluZzogYCVzJyIKK21zZ3N0ciAib3BjacOzbiBkZXNjb25vY2lkYSBlbiBzdHJpbmcgbm8gYXNjaWk6IGAlcyciCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4ODUKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgInVzbzogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBwYXJzZS1vcHRpb25zLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICAgbzogJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICVzIgorbXNnc3RyICIgICAgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NTIKK21zZ2lkICItTlVNIgorbXNnc3RyICItTlVNIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIG9mIC0tJXMiCittc2dzdHIgImFsaWFzIGRlIC0tJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoyMCBwYXJzZS1vcHRpb25zLWNiLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAib3BjacOzbiBgJXMnIGVzcGVyYSB1biB2YWxvciBudW3DqXJpY28iCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZXhwaXJhdGlvbiBkYXRlICclcyciCittc2dzdHIgImZlY2hhIGRlIGV4cGlyYWNpw7NuIG1hbCBmb3JtYWRhOiAnJXMnIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBcImFsd2F5c1wiLCBcImF1dG9cIiwgb3IgXCJuZXZlclwiIgorbXNnc3RyICJvcGNpw7NuIGAlcycgcHVlZGUgdXNhciBcImFsd2F5c1wiLCBcImF1dG9cIiwgbyBcIm5ldmVyXCIiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoxMzAgcGFyc2Utb3B0aW9ucy1jYi5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAibm9tYnJlIGRlIG9iamV0byBtYWwgZm9ybWFkbyAnJXMnIgorCisjOiBwYXRoLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICJObyBzZSBwdWRvIGhhY2VyIHF1ZSAlcyBmdWVyYSBlc2NyaWJpYmxlIHBvciBlbCBncnVwbyIKKworIzogcGF0aHNwZWMuYzoxMzAKK21zZ2lkICJFc2NhcGUgY2hhcmFjdGVyICdcXCcgbm90IGFsbG93ZWQgYXMgbGFzdCBjaGFyYWN0ZXIgaW4gYXR0ciB2YWx1ZSIKK21zZ3N0ciAiIgorIkNhcsOhY3RlciBkZSBlc2NhcGUgJ1xcJyBubyBwZXJtaXRpZG8gY29tbyDDumx0aW1vIGNhcsOhY3RlciBlbiBlbCB2YWxvciBhdHRyIgorCisjOiBwYXRoc3BlYy5jOjE0OAorbXNnaWQgIk9ubHkgb25lICdhdHRyOicgc3BlY2lmaWNhdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiU29sbyB1bmEgZXNwZWNpZmljYWNpw7NuICdhdHRyJyBlcyBwZXJtaXRpZGEuIgorCisjOiBwYXRoc3BlYy5jOjE1MQorbXNnaWQgImF0dHIgc3BlYyBtdXN0IG5vdCBiZSBlbXB0eSIKK21zZ3N0ciAiZXNwZWNpZmljYWNpw7NuIGF0dHIgbm8gcHVlZGUgZXN0YXIgdmFjw61hIgorCisjOiBwYXRoc3BlYy5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSBuYW1lICVzIgorbXNnc3RyICJub21icmUgZGUgYXRyaWJ1dG8gJXMgaW52w6FsaWRvIgorCisjOiBwYXRoc3BlYy5jOjI1OQorbXNnaWQgImdsb2JhbCAnZ2xvYicgYW5kICdub2dsb2InIHBhdGhzcGVjIHNldHRpbmdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKyJjb25maWd1cmFjaW9uZXMgZ2xvYmFsZXMgZGUgcGF0aHNwZWMgJ2dsb2InIHkgJ25vZ2xvYicgc29uIGluY29tcGF0aWJsZXMiCisKKyM6IHBhdGhzcGVjLmM6MjY2Cittc2dpZCAiIgorImdsb2JhbCAnbGl0ZXJhbCcgcGF0aHNwZWMgc2V0dGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgZ2xvYmFsICIKKyJwYXRoc3BlYyBzZXR0aW5ncyIKK21zZ3N0ciAiIgorImxhIGNvbmZpZ3VyYWNpw7NuIGdsb2JhbCBkZSAnbGl0ZXJhbCcgcGFyYSBwYXRyb25lcyBkZSBydXRhIGVzIGluY29tcGF0aWJsZSAiCisiY29uIGxhcyBkZW3DoXMgY29uZmlndXJhY2lvbmVzIGdsb2JhbGVzIGRlIHBhdHJvbmVzIGRlIHJ1dGEiCisKKyM6IHBhdGhzcGVjLmM6MzA2Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICJwYXLDoW1ldHJvIG5vIHbDoWxpZG8gcGFyYSBlbCBwcmVmaWpvICdtYWdpYyBwYXRoc3BlYyciCisKKyM6IHBhdGhzcGVjLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIk1hZ2ljIHBhdGhzcGVjIGludsOhbGlkbyAnJS4qcycgZW4gJyVzJyIKKworIzogcGF0aHNwZWMuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnKScgYXQgdGhlIGVuZCBvZiBwYXRoc3BlYyBtYWdpYyBpbiAnJXMnIgorbXNnc3RyICJGYWx0YSAnKScgYWwgZmluYWwgZGVsIG1hZ2ljIHBhdGhzcGVjIGVuICclcyciCisKKyM6IHBhdGhzcGVjLmM6MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaW1wbGVtZW50ZWQgcGF0aHNwZWMgbWFnaWMgJyVjJyBpbiAnJXMnIgorbXNnc3RyICJNYWdpYyBwYXRoc3BlYyAnJWMnIG5vIGltcGxlbWVudGFkbyBlbiAnJXMnIgorCisjOiBwYXRoc3BlYy5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJ2xpdGVyYWwnIGFuZCAnZ2xvYicgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiJXM6ICdsaXRlcmFsJyB5ICdnbG9iJyBzb24gaW5jb21wYXRpYmxlcyIKKworIzogcGF0aHNwZWMuYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IGF0ICclcyciCittc2dzdHIgIiVzOiAnJXMnIGVzdMOhIGZ1ZXJhIGRlbCByZXBvc2l0b3JpbyBlbiAnJXMnIgorCisjOiBwYXRoc3BlYy5jOjUxNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIChtbmVtb25pYzogJyVjJykiCittc2dzdHIgIiclcycgKG5lbW90w6ljbmljbzogJyVjJykiCisKKyM6IHBhdGhzcGVjLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiVzOiBtYWdpYyBwYXRoc3BlYyBubyBzb3BvcnRhZG8gcG9yIGVzdGUgY29tYW5kbzogJXMiCisKKyM6IHBhdGhzcGVjLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiZWwgcGF0csOzbiBkZSBydXRhICclcycgZXN0w6EgZGV0csOhcyBkZSB1biBlbmxhY2Ugc2ltYsOzbGljbyIKKworIzogcGF0aHNwZWMuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBpcyBiYWRseSBxdW90ZWQ6ICVzIgorbXNnc3RyICJsYSBsw61uZWEgZXN0w6EgbcOhbCBjaXRhZGE6ICVzIgorCisjOiBwa3QtbGluZS5jOjkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBlc2NyaWJpciBmbHVzaCBwYWNrZXQiCisKKyM6IHBrdC1saW5lLmM6OTkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZGVsaW0gcGFja2V0IgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGVzY3JpYmlyIGRlbGltIHBhY2tldCIKKworIzogcGt0LWxpbmUuYzoxMDYKK21zZ2lkICJmbHVzaCBwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICJsaW1waWV6YSBkZSBlc2NyaXR1cmEgZGUgcGFxdWV0ZXMgZmFsbMOzIgorCisjOiBwa3QtbGluZS5jOjE0NiBwa3QtbGluZS5jOjIzMgorbXNnaWQgInByb3RvY29sIGVycm9yOiBpbXBvc3NpYmx5IGxvbmcgbGluZSIKK21zZ3N0ciAiZXJyb3IgZGUgcHJvdG9jb2xvOiBsw61uZWEgaW1wb3NpYmxlbWVudGUgbGFyZ2EiCisKKyM6IHBrdC1saW5lLmM6MTYyIHBrdC1saW5lLmM6MTY0Cittc2dpZCAicGFja2V0IHdyaXRlIHdpdGggZm9ybWF0IGZhaWxlZCIKK21zZ3N0ciAiZXNjcml0dXJhIGRlIHBhcXVldGVzIGNvbiBmb3JtYXRvIGZhbGzDsyIKKworIzogcGt0LWxpbmUuYzoxOTYKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIC0gZGF0YSBleGNlZWRzIG1heCBwYWNrZXQgc2l6ZSIKK21zZ3N0ciAiZmFsbG8gYWwgZXNjcmliaXIgcGFxdWV0ZSAtIGxhIGRhdGEgZXhjZWRlIGFsIHRhbWHDsW8gbcOheGltbyBkZSBwYXF1ZXRlIgorCisjOiBwa3QtbGluZS5jOjIwMyBwa3QtbGluZS5jOjIxMAorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgImVzY3JpdHVyYSBkZSBwYXF1ZXRlcyBmYWxsw7MiCisKKyM6IHBrdC1saW5lLmM6Mjk1Cittc2dpZCAicmVhZCBlcnJvciIKK21zZ3N0ciAiZXJyb3IgZGUgbGVjdHVyYSIKKworIzogcGt0LWxpbmUuYzozMDMKK21zZ2lkICJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVuZXhwZWN0ZWRseSIKK21zZ3N0ciAiZWwgcmVtb3RvIHNlIGNvbGfDsyBkZSBtYW5lcmEgaW5lc3BlcmFkYSIKKworIzogcGt0LWxpbmUuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCBjaGFyYWN0ZXI6ICUuNHMiCittc2dzdHIgImVycm9yIGRlIHByb3RvY29sbzogbWFsIGNhcmFjdGVyIGRlIGxhcmdvIGRlIGzDrW5lYTogJS40cyIKKworIzogcGt0LWxpbmUuYzozNDEgcGt0LWxpbmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCAlZCIKK21zZ3N0ciAiZXJyb3IgZGUgcHJvdG9jb2xvOiBtYWwgbGFyZ28gZGUgbMOtbmVhICVkIgorCisjOiBwa3QtbGluZS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICJlcnJvciByZW1vdG86ICVzIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTE5Cittc2dpZCAiUmVmcmVzaGluZyBpbmRleCIKK21zZ3N0ciAiUmVmcmVzY2FuZG8gaW5kZXgiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWRlZCBsc3RhdDogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgY3JlYXIgbHN0YXQgaGlsYWRvOiAlcyIKKworIzogcHJldHR5LmM6OTgxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIC0tcHJldHR5IGZvcm1hdCIKK21zZ3N0ciAiaW5jYXBheiBkZSBhbmFsaXphciBlbCBmb3JtYXRvIC0tcHJldHR5IgorCisjOiBwcm9taXNvci1yZW1vdGUuYzoyMworbXNnaWQgIlJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiUmVtb3RvIHNpbiBVUkwiCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21pc29yIHJlbW90ZSBuYW1lIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgIm5vbWJyZSByZW1vdG8gcHJvbWlzb3Igbm8gcHVlZGUgY29tZW56YXIgY29uICcvJzogJXMiCisKKyM6IHJhbmdlLWRpZmYuYzo3NQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBgbG9nYCIKK21zZ3N0ciAibm8gc2UgcHVkbyBjb21lbnphciBgbG9nYCIKKworIzogcmFuZ2UtZGlmZi5jOjc3Cittc2dpZCAiY291bGQgbm90IHJlYWQgYGxvZ2Agb3V0cHV0IgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgb3V0cHV0IGRlIGBsb2dgIgorCisjOiByYW5nZS1kaWZmLmM6OTYgc2VxdWVuY2VyLmM6NTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gYW5hbGl6YXIgY29tbWl0ICclcyciCisKKyM6IHJhbmdlLWRpZmYuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGdpdCBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBhbmFsaXphciBnaXQgaGVhZGVyICclLipzJyIKKworIzogcmFuZ2UtZGlmZi5jOjI4NQorbXNnaWQgImZhaWxlZCB0byBnZW5lcmF0ZSBkaWZmIgorbXNnc3RyICJmYWxsw7MgYWwgZ2VuZXJhciBkaWZmIgorCisjOiByYW5nZS1kaWZmLmM6NTE4IHJhbmdlLWRpZmYuYzo1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGxvZyBmb3IgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIGVsIGxvZyBwYXJhICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzo2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgYWRkIGZpbGUgYWxpYXMgJyVzJyAoJyVzJyBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCkiCittc2dzdHIgIm5vIGFncmVnYXLDoSBhbGlhcyBkZSBhcmNoaXZvICclcycgKCclcycgeWEgZXhpc3RlIGVuIGVsIGluZGV4KSIKKworIzogcmVhZC1jYWNoZS5jOjY5NgorbXNnaWQgImNhbm5vdCBjcmVhdGUgYW4gZW1wdHkgYmxvYiBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJubyBzZSBwdWVkZSBjcmVhciB1biBibG9iIHZhY8OtbyBlbiBsYSBiYXNlIGRlIGRhdG9zIGRlIG9iamV0b3MiCisKKyM6IHJlYWQtY2FjaGUuYzo3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbiBvbmx5IGFkZCByZWd1bGFyIGZpbGVzLCBzeW1ib2xpYyBsaW5rcyBvciBnaXQtZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKyIlczogc29sbyBwdWVkZSBhZ3JlZ2FyIGFyY2hpdm9zIHJlZ3VsYXJlcywgc3ltYm9saWMgbGlua3MgbyBnaXQtZGlyZWN0b3JpZXMiCisKKyM6IHJlYWQtY2FjaGUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0IgorbXNnc3RyICInJXMnIG5vIHRpZW5lIHVuIGNvbW1pdCBjaGVja2VkIG91dCIKKworIzogcmVhZC1jYWNoZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaW5kZXggZmlsZSAnJXMnIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGluZGV4YXIgYXJjaGl2byAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgJyVzJyB0byBpbmRleCIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBhZ3JlZ2FyICclcycgYWwgaW5kZXgiCisKKyM6IHJlYWQtY2FjaGUuYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAiaW5jYXBheiBkZSBjb3JyZXIgc3RhdCBlbiAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MTMzMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFwcGVhcnMgYXMgYm90aCBhIGZpbGUgYW5kIGFzIGEgZGlyZWN0b3J5IgorbXNnc3RyICInJXMnIHBhcmVjZSBzZXIgdW4gZGlyZWN0b3JpbyB5IHVuIGFyY2hpdm8gYSBsYSB2ZXoiCisKKyM6IHJlYWQtY2FjaGUuYzoxNTM2Cittc2dpZCAiUmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiUmVmcmVzY2FyIGluZGV4IgorCisjOiByZWFkLWNhY2hlLmM6MTY1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5kZXgudmVyc2lvbiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisiaW5kZXgudmVyc2lvbiBjb25maWd1cmFkbywgcGVybyBlbCB2YWxvciBubyBlcyB2w6FsaWRvLlxuIgorIlVzYW5kbyB2ZXJzacOzbiAlaSIKKworIzogcmVhZC1jYWNoZS5jOjE2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBjb25maWd1cmFkbywgcGVybyBlbCB2YWxvciBubyBlcyB2w6FsaWRvLlxuIgorIlVzYW5kbyB2ZXJzacOzbiAlaSIKKworIzogcmVhZC1jYWNoZS5jOjE3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgIm1hbGEgZmlybWEgMHglMDh4IgorCisjOiByZWFkLWNhY2hlLmM6MTcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAlZCIKK21zZ3N0ciAibWFsYSB2ZXJzacOzbiBkZWwgw61uZGljZSAlZCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjkKK21zZ2lkICJiYWQgaW5kZXggZmlsZSBzaGExIHNpZ25hdHVyZSIKK21zZ3N0ciAibWFsYSBmaXJtYSBzaGExIGRlbCBhcmNoaXZvIGluZGV4IgorCisjOiByZWFkLWNhY2hlLmM6MTc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCB1c2VzICUuNHMgZXh0ZW5zaW9uLCB3aGljaCB3ZSBkbyBub3QgdW5kZXJzdGFuZCIKK21zZ3N0ciAiaW5kZXggdXNhICUuNHMgZXh0ZW5zaW9uZXMsIGNvc2EgcXVlIG5vIGVudGVuZGVtb3MiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzYxCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICUuNHMgZXh0ZW5zaW9uIgorbXNnc3RyICJpZ25vcmFuZG8gZXh0ZW5zacOzbiAlLjRzIgorCisjOiByZWFkLWNhY2hlLmM6MTc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGluZGV4IGVudHJ5IGZvcm1hdCAweCUwOHgiCittc2dzdHIgImZvcm1hdG8gZGUgaW5kZXggZGVzY29ub2NpZG8gMHglMDh4IgorCisjOiByZWFkLWNhY2hlLmM6MTgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbmFtZSBmaWVsZCBpbiB0aGUgaW5kZXgsIG5lYXIgcGF0aCAnJXMnIgorbXNnc3RyICJjYW1wbyBub21icmUgbWFsZm9ybWFkbyBlbiBlbCBpbmRleCwgY2VyY2EgYSBydXRhICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzoxODcxCittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgaW4gaW5kZXgiCittc2dzdHIgImVudHJhZGFzIGVuIHN0YWdlIGRlc29yZGVuYWRhcyBlbiBpbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjE4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgc3RhZ2UgZW50cmllcyBmb3IgbWVyZ2VkIGZpbGUgJyVzJyIKK21zZ3N0ciAibcO6bHRpcGxlcyBlbnRyYWRhcyBleHRyYcOxYXMgcGFyYSBhcmNoaXZvIGZ1c2lvbmFkbyAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MTg3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBmb3IgJyVzJyIKK21zZ3N0ciAiZW50cmFkYXMgZGUgc3RhZ2UgZGVzb3JkZW5hZGFzIHBhcmEgJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjE5ODMgcmVhZC1jYWNoZS5jOjIyNzEgcmVyZXJlLmM6NTY1IHJlcmVyZS5jOjU5OSByZXJlcmUuYzoxMTExCisjOiBzdWJtb2R1bGUuYzoxNjE5IGJ1aWx0aW4vYWRkLmM6NTMyIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTgxCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDcwIGJ1aWx0aW4vY2hlY2tvdXQuYzo2NTYgYnVpbHRpbi9jbGVhbi5jOjk2NworIzogYnVpbHRpbi9jb21taXQuYzozNjcgYnVpbHRpbi9kaWZmLXRyZWUuYzoxMjAgYnVpbHRpbi9ncmVwLmM6NDg1CisjOiBidWlsdGluL212LmM6MTQ1IGJ1aWx0aW4vcmVzZXQuYzoyNDYgYnVpbHRpbi9ybS5jOjI5MAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjMzMgorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiYXJjaGl2byDDrW5kaWNlIGNvcnJvbXBpZG8iCisKKyM6IHJlYWQtY2FjaGUuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgY3JlYXIgaGlsbyBsb2FkX2NhY2hlX2VudHJpZXM6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsb2FkX2NhY2hlX2VudHJpZXMgdGhyZWFkOiAlcyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSB1bmlyIGhpbG8gbG9hZF9jYWNoZV9lbnRpcmVzOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgb3BlbiBmYWlsZWQiCittc2dzdHIgIiVzOiBmYWxsw7MgYWwgYWJyaXIgZWwgYXJjaGl2byBpbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4IgorbXNnc3RyICIlczogbm8gc2UgcHVlZGUgaGFjZXIgc3RhdCBkZWwgaW5kZXggYWJpZXJ0byIKKworIzogcmVhZC1jYWNoZS5jOjIxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgc21hbGxlciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIlczogYXJjaGl2byBpbmRleCBtw6FzIHBlcXVlw7FvIGRlIGxvIGVzcGVyYWRvIgorCisjOiByZWFkLWNhY2hlLmM6MjE4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5hYmxlIHRvIG1hcCBpbmRleCBmaWxlIgorbXNnc3RyICIlczogbm8gc2UgcHVkbyBtYXBlYXIgZWwgYXJjaGl2byBpbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjIyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2luZGV4X2V4dGVuc2lvbnMgdGhyZWFkOiAlcyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBjcmVhciBoaWxvIGxvYWRfaW5kZXhfZXh0ZW5zaW9uczogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIHVuaXIgaGlsbyBsb2FkX2luZGV4X2V4dGVuc2lvbnM6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI4MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZnJlc2hlbiBzaGFyZWQgaW5kZXggJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyByZWZyZXNjYXIgZWwgaW5kZXggY29tcGFydGlkbyAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MjMzMAorIywgYy1mb3JtYXQKK21zZ2lkICJicm9rZW4gaW5kZXgsIGV4cGVjdCAlcyBpbiAlcywgZ290ICVzIgorbXNnc3RyICJpbmRleCByb3RvLCBzZSBlc3BlcmFiYSAlcyBlbiAlcywgc2Ugb2J0dXZvICVzIgorCisjOiByZWFkLWNhY2hlLmM6MzAyNiBzdHJidWYuYzoxMTYwIHdyYXBwZXIuYzo2MjIgYnVpbHRpbi9tZXJnZS5jOjExMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNsb3NlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gY2VycmFyICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzozMTI5IHNlcXVlbmNlci5jOjIzNDMgc2VxdWVuY2VyLmM6Mzk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGRlZmluaXIgJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjMxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gZ2l0IGRpcjogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYWJyaXIgZWwgZGlyZWN0b3JpbyBkZSBnaXQ6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MzE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5saW5rOiAlcyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBlbGltaW5hciBlbCB2aW5jdWxvOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpeCBwZXJtaXNzaW9uIGJpdHMgb24gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhcnJlZ2xhciBiaXRzIGRlIHBlcm1pc29zIGVuICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzozMzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgZHJvcCB0byBzdGFnZSAjMCIKK21zZ3N0ciAiJXM6IG5vIHNlIHB1ZWRlIGVsaW1pbmFyIGEgc3RhZ2UgIzAiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjExCittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoaXMgd2l0aCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlJy5cbiIKKyJPciB5b3UgY2FuIGFib3J0IHRoZSByZWJhc2Ugd2l0aCAnZ2l0IHJlYmFzZSAtLWFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIlNlIHB1ZWRlIGFycmVnbGFyIGVzdG8gY29uICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyB5IGRlc3B1w6lzIGVqZWN1dGEgJ2dpdCAiCisicmViYXNlIC0tY29udGludWUnLlxuIgorIk8gc2UgcHVlZGUgYWJvcnRhciBlbCByZWJhc2UgY29uICdnaXQgcmViYXNlIC0tYWJvcnQnLlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzozMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5yZWNvZ25pemVkIHNldHRpbmcgJXMgZm9yIG9wdGlvbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JpbmcuIgorbXNnc3RyICIiCisib3BjacOzbiAlcyBubyByZWNvbm9jaWRhIHBhcmEgbGEgb3BjacOzbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JhbmRvLiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NDIKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1hbmQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImIsIGJyZWFrID0gc3RvcCBoZXJlIChjb250aW51ZSByZWJhc2UgbGF0ZXIgd2l0aCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJylcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJDb21hbmRvczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNhciBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2FyIGNvbW1pdCwgcGVybyBlZGl0YXIgZWwgbWVuc2FqZSBkZSBjb21taXRcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNhciBjb21taXQsIHBlcm8gcGFyYXIgcGFyYSB1biBhbWVuZFxuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzYXIgY29tbWl0LCBwZXJvIGZ1c2lvbmFybG8gZW4gZWwgY29tbWl0IHByZXZpb1xuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gY29tbyBcInNxdWFzaFwiLCBwZXJvIGRlc2NhcnRhIGVsIG1lbnNhamUgZGVsIGxvZyBkZSAiCisiZXN0ZSBjb21taXRcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gZWplY3V0YSBjb21hbmRvICggZWwgcmVzdG8gZGUgbGEgbMOtbmVhKSB1c2FuZG8gdW4gc2hlbGxcbiIKKyJiLCBicmVhayA9IHBhcmFyIGFxdcOtIChjb250aW51YXIgcmViYXNlIGx1ZWdvIGNvbiAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJylcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gZWxpbWluYXIgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IHBvbmVyIGxhYmVsIGFsIEhFQUQgYWN0dWFsIGNvbiB1biBub21icmVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVpbmljaWFyIEhFQUQgYSBlbCBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWEgdW4gY29tbWl0IGRlIGZ1c2nDs24gdXNhbmRvIGVsIG1lbnNhamUgb3JpZ2luYWwgZGVcbiIKKyIuICAgICAgIGZ1c2nDs24gKG8gbGEgbMOtbmVhIGRlIG9uZWxpbmUsIHNpIG5vIHNlIGVzcGVjaWZpY2EgdW4gbWVuc2FqZVxuIgorIi4gICAgICAgZGUgY29tbWl0KS4gVXNlIC1jIDxjb21taXQ+IHBhcmEgcmVlc2NyaWJpciBlbCBtZW5zYWplIGRlbCBjb21taXQuXG4iCisiXG4iCisiRXN0YXMgbMOtbmVhcyBwdWVkZW4gc2VyIHJlb3JkZW5hZGFzOyBzb24gZWplY3V0YWRhcyBkZXNkZSBhcnJpYmEgaGFjaWEgIgorImFiYWpvLlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kcykiCittc2dzdHJbMF0gIlJlYmFzZSAlcyBlbiAlcyAoJWQgY29tYW5kbykiCittc2dzdHJbMV0gIlJlYmFzZSAlcyBlbiAlcyAoJWQgY29tYW5kb3MpIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo3MiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjI4Cittc2dpZCAiIgorIlxuIgorIkRvIG5vdCByZW1vdmUgYW55IGxpbmUuIFVzZSAnZHJvcCcgZXhwbGljaXRseSB0byByZW1vdmUgYSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJObyBlbGltaW5hciBuaW5ndW5hIGzDrW5lYS4gVXNhICdkcm9wJyBleHBsw61jaXRhbWVudGUgcGFyYSBib3JyYXIgdW4gY29tbWl0IFxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo3NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjMyCittc2dpZCAiIgorIlxuIgorIklmIHlvdSByZW1vdmUgYSBsaW5lIGhlcmUgVEhBVCBDT01NSVQgV0lMTCBCRSBMT1NULlxuIgorbXNnc3RyICIiCisiXG4iCisiU2kgZWxpbWluYXMgdW5hIGzDrW5lYSBhcXXDrSBFTCBDT01NSVQgU0UgUEVSREVSw4EuXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjgxIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzEKK21zZ2lkICIiCisiXG4iCisiWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuXG4iCisiVG8gY29udGludWUgcmViYXNlIGFmdGVyIGVkaXRpbmcsIHJ1bjpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFc3TDoXMgZWRpdGFuZG8gZWwgYXJjaGl2byBUT0RPIGRlIHVuIHJlYmFzZSBpbnRlcmFjdGl2by5cbiIKKyJQYXJhIGNvbnRpbnVhciBlbCByZWJhc2UgZGVzcHXDqXMgZGUgZWRpdGFyLCBlamVjdXRhOlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6ODYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0OAorbXNnaWQgIiIKKyJcbiIKKyJIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQ29tbyBzZWEsIHNpIHF1aWVyZXMgYm9ycmFyIHRvZG8sIGVsIHJlYmFzZSBzZXLDoSBhYm9ydGFkby5cbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTEwIHJlcmVyZS5jOjQ4NSByZXJlcmUuYzo2OTIgc2VxdWVuY2VyLmM6MzQ0NAorIzogc2VxdWVuY2VyLmM6MzQ3MCBzZXF1ZW5jZXIuYzo1MTI1IGJ1aWx0aW4vZnNjay5jOjM0NiBidWlsdGluL3JlYmFzZS5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBlc2NyaWJpciAnJXMnIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMTYgYnVpbHRpbi9yZWJhc2UuYzoxODQgYnVpbHRpbi9yZWJhc2UuYzoyMTAKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnLiIKK21zZ3N0ciAibm8gc2UgcHVkbyBlc2NyaWJpciAnJXMnLiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS5cbiIKKyJEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKTpcbiIKK21zZ3N0ciAiIgorIlBlbGlncm86IGFsZ3Vub3MgY29tbWl0cyBwdWVkZW4gaGFiZXIgc2lkbyBib3RhZG9zIGRlIGZvcm1hIGFjY2lkZW50YWwuXG4iCisiQ29tbWl0cyBib3RhZG9zIChlbXBlemFuZG8gY29uIGVsIG3DoXMgbnVldm8pOlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIGF2b2lkIHRoaXMgbWVzc2FnZSwgdXNlIFwiZHJvcFwiIHRvIGV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LlxuIgorIlxuIgorIlVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiAiCisid2FybmluZ3MuXG4iCisiVGhlIHBvc3NpYmxlIGJlaGF2aW91cnMgYXJlOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuIgorIlxuIgorbXNnc3RyICIiCisiUGFyYSBldml0YXIgZXN0ZSBtZW5zYWplLCB1c2UgXCJkcm9wXCIgcGFyYSBlbGltaW5hciBkZSBmb3JtYSBleHBsw61jaXRhIHVuICIKKyJjb21taXQuXG4iCisiXG4iCisiVXNlICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyBwYXJhIGNhbWJpYXIgZWwgbml2ZWwgZGUgIgorImFkdmVydGVuY2lhcy5cbiIKKyJMb3MgcG9zaWJsZXMgY29tcG9ydGFtaWVudG9zIHNvbjogaWdub3JlLHdhcm4sZXJyb3IuXG4iCisiXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjIzMyByZWJhc2UtaW50ZXJhY3RpdmUuYzoyMzggc2VxdWVuY2VyLmM6MjI2MgorIzogYnVpbHRpbi9yZWJhc2UuYzoxNzAgYnVpbHRpbi9yZWJhc2UuYzoxOTUgYnVpbHRpbi9yZWJhc2UuYzoyMjEKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcycuIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyICclcycuIgorCisjOiByZWZzLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgb2JqZWN0ISIKK21zZ3N0ciAiwqElcyBubyBhcHVudGEgYSBuaW5nw7puIG9iamV0byB2w6FsaWRvISIKKworIzogcmVmcy5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMiCittc2dzdHIgImlnbm9yYW5kbyByZWZlcmVuY2lhIHJvdGEgJXMiCisKKyM6IHJlZnMuYzo2NjkgcmVmLWZpbHRlci5jOjIwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIKK21zZ3N0ciAiaWdub3JhbmRvIHJlZmVyZW5jaWEgcm90YSAlcyIKKworIzogcmVmcy5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhYnJpciAnJXMnIHBhcmEgZXNjcml0dXJhOiAlcyIKKworIzogcmVmcy5jOjgxNCByZWZzLmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgbGEgcmVmZXJlbmNpYSAnJXMnIgorCisjOiByZWZzLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJyZWYgJyVzJyB5YSBleGlzdGUiCisKKyM6IHJlZnMuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciCittc2dzdHIgIklEIGRlIG9iamVjdG8gaW5lc3BlcmFkbyBhbCBlc2NyaWJpciAnJXMnIgorCisjOiByZWZzLmM6ODMzIHNlcXVlbmNlci5jOjQwNyBzZXF1ZW5jZXIuYzoyNzAxIHNlcXVlbmNlci5jOjI5MDUKKyM6IHNlcXVlbmNlci5jOjI5MTkgc2VxdWVuY2VyLmM6MzE3NyBzZXF1ZW5jZXIuYzo1MDM2IHN0cmJ1Zi5jOjExNTcKKyM6IHdyYXBwZXIuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gZXNjcmliaXIgZW4gJyVzJyIKKworIzogcmVmcy5jOjg2MCBzdHJidWYuYzoxMTU1IHdyYXBwZXIuYzoxODggd3JhcHBlci5jOjM1OCBidWlsdGluL2FtLmM6NzE5CisjOiBidWlsdGluL3JlYmFzZS5jOjEwMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhYnJpciAnJXMnIHBhcmEgZXNjcml0dXJhIgorCisjOiByZWZzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gZGVsZXRpbmcgJyVzJyIKK21zZ3N0ciAiSUQgZGUgb2JqZWN0byBpbmVzcGVyYWRvIGFsIGJvcnJhciAnJXMnIgorCisjOiByZWZzLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIGhhcyBnYXAgYWZ0ZXIgJXMiCittc2dzdHIgImxvZyBkZSByZWYgJXMgdGllbmUgdW4gdmFjw61vIHRyYXMgJXMiCisKKyM6IHJlZnMuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIHVuZXhwZWN0ZWRseSBlbmRlZCBvbiAlcyIKK21zZ3N0ciAibG9nIGRlIHJlZiAlcyBmaW5hbGl6YWRvIGluZXNwZXJhZGFtZW50ZSBlbiAlcyIKKworIzogcmVmcy5jOjEwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciAlcyBpcyBlbXB0eSIKK21zZ3N0ciAibG9nIGRlICVzIGVzdMOhIHZhY8OtbyIKKworIzogcmVmcy5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gdXBkYXRlIHJlZiB3aXRoIGJhZCBuYW1lICclcyciCittc2dzdHIgInJlaHVzYW5kbyBhY3R1YWxpemFyIHJlZiBjb24gbWFsIG5vbWJyZSAnJXMnIgorCisjOiByZWZzLmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cGRhdGVfcmVmIGZhaWxlZCBmb3IgcmVmICclcyc6ICVzIgorbXNnc3RyICJ1cGRhdGVfcmVmIGZhbGzDsyBwYXJhIHJlZiAnJXMnOiAlcyIKKworIzogcmVmcy5jOjIwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgdXBkYXRlcyBmb3IgcmVmICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgIm3Dumx0aXBsZXMgYWN0dWFsaXphY2lvbmVzIHBhcmEgcmVmICclcycgbm8gcGVybWl0aWRhcyIKKworIzogcmVmcy5jOjIwNTUKK21zZ2lkICJyZWYgdXBkYXRlcyBmb3JiaWRkZW4gaW5zaWRlIHF1YXJhbnRpbmUgZW52aXJvbm1lbnQiCittc2dzdHIgImFjdHVhbGl6YWNpb25lcyBkZSByZWYgcHJvaGliaWRhcyBkZW50cm8gZGUgYW1iaWVudGUgZGUgY3VhcmVudGVuYSIKKworIzogcmVmcy5jOjIxNTEgcmVmcy5jOjIxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiJyVzJyBleGlzdGU7IG5vIHNlIHB1ZWRlIGNyZWFyICclcyciCisKKyM6IHJlZnMuYzoyMTU3IHJlZnMuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgcHJvY2VzYXIgJyVzJyB5ICclcycgYWwgbWlzbW8gdGllbXBvIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgcmVmZXJlbmNlICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGVsaW1pbmFyIGxhIHJlZmVyZW5jaWEgJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNDcgcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NDEKKyM6IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBlbGltaW5hciBsYSByZWZlcmVuY2lhICVzOiAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI1MCByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGVsaW1pbmFyIGxhIHJlZmVyZW5jaWE6ICVzIgorCisjOiByZWZzcGVjLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmc3BlYyAnJXMnIgorbXNnc3RyICJyZWZzcGVjIGludsOhbGlkbzogJyVzJyIKKworIzogcmVmLWZpbHRlci5jOjQyIHd0LXN0YXR1cy5jOjE5MzgKK21zZ2lkICJnb25lIgorbXNnc3RyICJkZXNhcGFyZWNpZG8iCisKKyM6IHJlZi1maWx0ZXIuYzo0MworIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCIKK21zZ3N0ciAiYWRlbGFudGUgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJiZWhpbmQgJWQiCittc2dzdHIgImRldHLDoXMgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCwgYmVoaW5kICVkIgorbXNnc3RyICJkZWxhbnRlICVkLCBkZXRyw6FzICVkIgorCisjOiByZWYtZmlsdGVyLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoY29sb3I6PGNvbG9yPikiCittc2dzdHIgImZvcm1hdG8gZXNwZXJhZG86ICUlKGNvbG9yOjxjb2xvcj4pIgorCisjOiByZWYtZmlsdGVyLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBjb2xvcjogJSUoY29sb3I6JXMpIgorbXNnc3RyICJjb2xvciBubyByZWNvbm9jaWRvOiAlJShjb2xvcjolcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOmxzdHJpcD0lcyIKK21zZ3N0ciAiVmFsb3IgZW50ZXJvIGVzcGVyYWRvIHJlZm5hbWU6bHN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpyc3RyaXA9JXMiCittc2dzdHIgIlZhbG9yIGVudGVybyBlc3BlcmFkbyByZWZuYW1lOnJzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoJXMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnRvOiAlcyBubyByZWNvbm9jaWRvICUlKCVzKSIKKworIzogcmVmLWZpbHRlci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShvYmplY3R0eXBlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUob2JqZWN0dHlwZSkgbm8gdG9tYSBuaW5nw7puIGFyZ3VtZW50byIKKworIzogcmVmLWZpbHRlci5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0c2l6ZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIlJShvYmplY3RzaXplKSBubyByZWNvbm9jaWRvIGFyZ3VtZW50bzogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoZGVsdGFiYXNlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoZGVsdGFiYXNlKSBubyB0b21hIGFyZ3VtZW50b3MiCisKKyM6IHJlZi1maWx0ZXIuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoYm9keSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGJvZHkpIG5vIHRvbWEgbmluZ8O6biBhcmd1bWVudG8iCisKKyM6IHJlZi1maWx0ZXIuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoc3ViamVjdCkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKHN1YmplY3QpIG5vIHRvbWEgbmluZ8O6biBhcmd1bWVudG8iCisKKyM6IHJlZi1maWx0ZXIuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAlJSh0cmFpbGVycykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIlJSh0cmFpbGVycykgZGVzY29ub2NpZG9zLCBhcmd1bWVudG86ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIGNvbnRlbnRzOmxpbmVzPSVzIgorbXNnc3RyICJ2YWxvciBwb3NpdGl2byBlc3BlcmFkbyBjb250ZW50czpsaW5lcz0lcyIKKworIzogcmVmLWZpbHRlci5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoY29udGVudHMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnRvICVzIG5vIHJlY29ub2NpZG8gJSUoY29udGVudHMpIgorCisjOiByZWYtZmlsdGVyLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIG9iamVjdG5hbWU6c2hvcnQ9JXMiCittc2dzdHIgInZhbG9yIHBvc2l0aXZvIGVzcGVyYWRvIG9iamVjdG5hbWU6c2hvcnQ9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdG5hbWUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnRvOiAlcyBubyByZWNvbm9jaWRvICUlKG9iamVjdG5hbWUpIgorCisjOiByZWYtZmlsdGVyLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoYWxpZ246PHdpZHRoPiw8cG9zaXRpb24+KSIKK21zZ3N0ciAiZm9ybWF0byBlc3BlcmFkbzogJSUoYWxpZ246PGFuY2hvPiw8cG9zaWNpw7NuPikiCisKKyM6IHJlZi1maWx0ZXIuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBvc2l0aW9uOiVzIgorbXNnc3RyICJwb3NpY2nDs24gZGVzY29ub2NpZGE6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAiYW5jaG8gZGVzY29ub2NpZG86ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmd1bWVudG8gbm8gcmVjb25vY2lkbyBwYXJhICUlKGFsaWduKTogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgd2lkdGggZXhwZWN0ZWQgd2l0aCB0aGUgJSUoYWxpZ24pIGF0b20iCittc2dzdHIgInNlIGVzcGVyYWJhIHVuIGFuY2hvIHBvc2l0aXZvIGNvbiBlbCDDoXRvbW8gJSUoYWxpZ24pIgorCisjOiByZWYtZmlsdGVyLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShpZikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmd1bWVudG86ICVzIG5vIHJlY29ub2NpZG8gJSUoaWYpIgorCisjOiByZWYtZmlsdGVyLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICJub21icmUgbWFsIGZvcm1hZG8gZGUgY2FtcG86ICUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICJub21icmUgZGUgY2FtcG8gZGVzY29ub2NpZG86ICUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5LCBidXQgdGhlIGZpZWxkICclLipzJyByZXF1aXJlcyBhY2Nlc3MgdG8gb2JqZWN0IGRhdGEiCittc2dzdHIgIiIKKyJubyBlcyB1biByZXBvc2l0b3JpbyBnaXQsIHBlcm8gZWwgY2FtcG8gJyUuKnMnIHJlcXVpZXJlIGFjY2VzbyBhbCBvYmpldG8gZGF0YSIKKworIzogcmVmLWZpbHRlci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgImZvcm1hdG86IMOhdG9tbyAlJShpZikgdXNhZG8gc2luIHVuIMOhdG9tbyAlJSh0aGVuKSIKKworIzogcmVmLWZpbHRlci5jOjc3NworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICJmb3JtYXRvOiDDoXRvbW8gJSUodGhlbikgdXNhZG8gc2luIMOhdG9tbyAlJShpZikiCisKKyM6IHJlZi1maWx0ZXIuYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgImZvcm1hdG86IMOhdG9tbyAlJSh0aGVuKSB1c2FkbyBtw6FzIGRlIHVuYSB2ZXoiCisKKyM6IHJlZi1maWx0ZXIuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgYWZ0ZXIgJSUoZWxzZSkiCittc2dzdHIgImZvcm1hdG86IMOhdG9tbyAlJSh0aGVuKSB1c2FkbyBkZXNwdcOpcyBkZSAlJShlbHNlKSIKKworIzogcmVmLWZpbHRlci5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICJmb3JtYXRvOiDDoXRvbW8gJSUoZWxzZSkgdXNhZG8gc2luIHVuIMOhdG9tbyAlJShpZikiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgImZvcm1hdG86IMOhdG9tbyAlJShlbHNlKSB1c2FkbyBzaW4gdW4gw6F0b21vICUlKHRoZW4pIgorCisjOiByZWYtZmlsdGVyLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICJmb3JtYXRvOiDDoXRvbW8gJSUoZWxzZSkgdXNhZG8gbcOhcyBkZSB1bmEgdmV6IgorCisjOiByZWYtZmlsdGVyLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIHVzZWQgd2l0aG91dCBjb3JyZXNwb25kaW5nIGF0b20iCittc2dzdHIgImZvcm1hdG86IMOhdG9tbyAlJShlbmQpIHVzYWRvIHNpbiDDoXRvbW8gY29ycmVzcG9uZGllbnRlIgorCisjOiByZWYtZmlsdGVyLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmb3JtYXQgc3RyaW5nICVzIgorbXNnc3RyICJmb3JtYXRvIGRlIGNhZGVuYSBtYWwgZm9ybWFkbyAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyAlcyIKK21zZ3N0ciAibm8gaGF5IHJhbWEsIHJlYmFzYW5kbyAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyBkZXRhY2hlZCBIRUFEICVzIgorbXNnc3RyICIobyBoYXkgcmFtYSwgcmViYXNhbmRvIGNvbiBIRUFEIGRlc2Fjb3BsYWRvICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIGJpc2VjdCBzdGFydGVkIG9uICVzIgorbXNnc3RyICJubyBoYXkgcmFtYSwgY29tZW56YW5kbyBiaXNlY2PDs24gZW4gICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTUwNAorbXNnaWQgIm5vIGJyYW5jaCIKK21zZ3N0ciAic2luIHJhbWEiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTQwIHJlZi1maWx0ZXIuYzoxNzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgb2JqZWN0ICVzIGZvciAlcyIKK21zZ3N0ciAiZmFsdGEgb2JqZXRvICVzIHBhcmEgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhcnNlX29iamVjdF9idWZmZXIgZmFpbGVkIG9uICVzIGZvciAlcyIKK21zZ3N0ciAicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWxsw7MgZW4gJXMgcGFyYSAlcyIKKworIzogcmVmLWZpbHRlci5jOjIwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICJvYmpldG8gbWFsIGZvcm1hZG8gZW4gJyVzJyIKKworIzogcmVmLWZpbHRlci5jOjIwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgJXMiCittc2dzdHIgImlnbm9yYW5kbyByZWZlcmVuY2lhIGNvbiBub21icmUgcm90byAlcyIKKworIzogcmVmLWZpbHRlci5jOjIzODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gbWlzc2luZyIKK21zZ3N0ciAiZm9ybWF0bzogZmFsdGEgw6F0b21vICUlKGVuZCkiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbWVyZ2VkIgorbXNnc3RyICJvcGNpw7NuIGAlcycgZXMgaW5jb21wYXRpYmxlIGNvbiAtLW1lcmdlZCIKKworIzogcmVmLWZpbHRlci5jOjI0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1tZXJnZWQiCittc2dzdHIgIm9wY2nDs24gYCVzJyBlcyBpbmNvbXBhdGlibGUgY29uIC0tbm8tbWVyZ2VkIgorCisjOiByZWYtZmlsdGVyLmM6MjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIm5vbWJyZSBkZSBvYmpldG8gbWFsIGZvcm1hZG8gJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIG11c3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIm9wY2nDs24gJyVzJyBkZWJlIGFwdW50YXIgYSB1biBjb21taXQiCisKKyM6IHJlbW90ZS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBubyBwdWVkZSBjb21lbnphciBjb24gJy8nOiAlcyIKKworIzogcmVtb3RlLmM6NDE0Cittc2dpZCAibW9yZSB0aGFuIG9uZSByZWNlaXZlcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0IgorbXNnc3RyICJtw6FzIGRlIHVuIHJlY2VpdmVwYWNrIGRhZG8sIHVzYW5kbyBlbCBwcmltZXJvIgorCisjOiByZW1vdGUuYzo0MjIKK21zZ2lkICJtb3JlIHRoYW4gb25lIHVwbG9hZHBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAibcOhcyBkZSB1biB1cGxvYWRwYWNrIGRhZG8sIHVzYW5kbyBlbCBwcmltZXJvIgorCisjOiByZW1vdGUuYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIgorbXNnc3RyICJObyBzZSBwdWVkZW4gdHJhZXIgYW1ib3MgJXMgeSAlcyBhICVzIgorCisjOiByZW1vdGUuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMgcG9yIGxvIGdlbmVyYWwgaGFjZSBzZWd1aW1pZW50byBhICVzLCBubyBhICVzIgorCisjOiByZW1vdGUuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlcyBoYWNlIHNlZ3VpbWllbnRvIHRhbnRvIGEgJXMgY29tbyBhICVzIgorCisjOiByZW1vdGUuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5ICclcycgb2YgcGF0dGVybiBoYWQgbm8gJyonIgorbXNnc3RyICJsbGF2ZSAnJXMnIGRlIHBhdHLDs24gbm8gdHV2byAnKiciCisKKyM6IHJlbW90ZS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIKK21zZ3N0ciAidmFsb3IgJyVzJyBkZWwgcGF0csOzbiBubyB0aWVuZSAnKiciCisKKyM6IHJlbW90ZS5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgZG9lcyBub3QgbWF0Y2ggYW55IgorbXNnc3RyICJzcmMgcmVmc29lYyAlczogbm8gY29uY3VlcmRhIGNvbiBuaW5ndW5vIgorCisjOiByZW1vdGUuYzoxMDA5CisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAic3JjIHJlZnNwZWMgJXMgY29uY3VlcmRhIGNvbiBtw6FzIGRlIHVubyIKKworIy4gVFJBTlNMQVRPUlM6ICJtYXRjaGVzICclcyclIiBpcyB0aGUgPGRzdD4gcGFydCBvZiAiZ2l0IHB1c2gKKyMuIDxyZW1vdGU+IDxzcmM+Ojxkc3Q+IiBwdXNoLCBhbmQgImJlaW5nIHB1c2hlZCAoJyVzJykiIGlzCisjLiB0aGUgPHNyYz4uCisjLgorIzogcmVtb3RlLmM6MTAyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRlc3RpbmF0aW9uIHlvdSBwcm92aWRlZCBpcyBub3QgYSBmdWxsIHJlZm5hbWUgKGkuZS4sXG4iCisic3RhcnRpbmcgd2l0aCBcInJlZnMvXCIpLiBXZSB0cmllZCB0byBndWVzcyB3aGF0IHlvdSBtZWFudCBieTpcbiIKKyJcbiIKKyItIExvb2tpbmcgZm9yIGEgcmVmIHRoYXQgbWF0Y2hlcyAnJXMnIG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyItIENoZWNraW5nIGlmIHRoZSA8c3JjPiBiZWluZyBwdXNoZWQgKCclcycpXG4iCisiICBpcyBhIHJlZiBpbiBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBJZiBzbyB3ZSBhZGQgYSBjb3JyZXNwb25kaW5nXG4iCisiICByZWZzL3toZWFkcyx0YWdzfS8gcHJlZml4IG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyJcbiIKKyJOZWl0aGVyIHdvcmtlZCwgc28gd2UgZ2F2ZSB1cC4gWW91IG11c3QgZnVsbHkgcXVhbGlmeSB0aGUgcmVmLiIKK21zZ3N0ciAiIgorIkVsIGRlc3Rpbm8gcXVlIHByb3ZlZXMgbm8gZXMgdW4gZnVsbCByZWZuYW1lIChpLmUuLFxuIgorImNvbWllbnphIGNvbiBcInJlZnMvXCIpLiBJbnRlbnRhbW9zIGFkaXZpbmFyIGxvIHF1ZSBxdWlzaXN0ZSBkZWNpcjpcbiIKKyJcbiIKKyItIEJ1c2NhbmRvIHVuIHJlZiBxdWUgY29uY3VlcmRlIGNvbiAnJXMnIGVuIGVsIGxhZG8gcmVtb3RvLlxuIgorIi0gUmV2aXNhbmRvIHNpIGVsIDxzcmM+IGVzIHVzYWRvIGVuIGVsIHB1c2goJyVzJylcbiIKKyIgIGVzIHVuIHJlZiBlbiBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBTaSBlcyBhc8OtLCBhZ3JlZ2Ftb3MgZWwgcHJlZmlqb1xuIgorIiAgcmVmcy97aGVhZHMsdGFnc30vIGNvcnJlc3BvbmRpZW50ZSBhbCBsYWRvIHJlbW90by5cbiIKKyJcbiIKKyJOaW5ndW5vIGZ1bmNpb27DsyBhc8OtIHF1ZSBub3MgZGltb3MgcG9yIHZlbmNpZG9zLiBUaWVuZXMgcXVlIGVzcGVjaWZpY2FyIGVsICIKKyJmdWxsIHJlZi4iCisKKyM6IHJlbW90ZS5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgY29tbWl0IG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvaGVhZHMvJXMnPyIKK21zZ3N0ciAiIgorIkxhIHBhcnRlIDxzcmM+IGRlbCByZWZzcGVjIGVzIHVuIG9iamV0byBjb21taXQuXG4iCisiwr9RdWlzaXN0ZSBjcmVhciB1biBicmFuY2ggbnVldm8gbWVkaWFudGUgdW4gcHVzaCBhXG4iCisiJyVzOnJlZnMvaGVhZHMvJXMnPyIKKworIzogcmVtb3RlLmM6MTA0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0YWcgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgdGFnIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRhZyBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyB0YWcgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKKworIzogcmVtb3RlLmM6MTA1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IHRyZWUgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIkxhIHBhcnRlIDxzcmM+IGRlbCByZWZzcGVjIGVzIHVuIG9iamV0byB0cmVlLlxuIgorIsK/UXVpc2lzdGUgY3JlYXIgdW4gdGFnIG51ZXZvIG1lZGlhbnRlIHVuIHB1c2ggYVxuIgorIiclczpyZWZzL2hlYWRzLyVzJz8iCisKKyM6IHJlbW90ZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgYmxvYiBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyBibG9iIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyJMYSBwYXJ0ZSA8c3JjPiBkZWwgcmVmc3BlYyBlcyB1biBvYmpldG8gYmxvYi5cbiIKKyLCv1F1aXNpc3RlIGNyZWFyIHVuIHRhZyBudWV2byBtZWRpYW50ZSB1biBwdXNoIGFcbiIKKyInJXM6cmVmcy9oZWFkcy8lcyc/IgorCisjOiByZW1vdGUuYzoxMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNhbm5vdCBiZSByZXNvbHZlZCB0byBicmFuY2giCittc2dzdHIgIiVzIG5vIHB1ZWRlIHNlciByZXNvbHZlciBhIHVuIGJyYW5jaCIKKworIzogcmVtb3RlLmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVsZXRlICclcyc6IHJlbW90ZSByZWYgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYm9ycmFyICclcyc6IHJlZiByZW1vdG8gbm8gZXhpc3RlIgorCisjOiByZW1vdGUuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAiZHN0IHJlZnNwZWMgJXMgY29uY3VlcmRhIGNvbiBtw6FzIGRlIHVubyIKKworIzogcmVtb3RlLmM6MTEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmICVzIHJlY2VpdmVzIGZyb20gbW9yZSB0aGFuIG9uZSBzcmMiCittc2dzdHIgImRzdCByZWYgJXMgcmVjaWJlIGRlIG3DoXMgZGUgdW4gc3JjIgorCisjOiByZW1vdGUuYzoxNjI4IHJlbW90ZS5jOjE3MjkKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICJIRUFEIG5vIGFwdW50YSBhIG5pbmd1bmEgcmFtYSIKKworIzogcmVtb3RlLmM6MTYzNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAibm8gZXhpc3RlIHRhbCByYW1hOiAnJXMnIgorCisjOiByZW1vdGUuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICJubyBzZSBoYSBjb25maWd1cmFkbyB1cHN0cmVhbSBwYXJhIGxhIHJhbWEgJyVzJyIKKworIzogcmVtb3RlLmM6MTY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1cHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAibGEgcmFtYSAnJXMnIGRlIHVwc3RyZWFtIG5vIGVzIGd1YXJkYWQgY29tbyByYW1hIGRlIHJhc3RyZW8gcmVtb3RvIgorCisjOiByZW1vdGUuYzoxNjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggZGVzdGluYXRpb24gJyVzJyBvbiByZW1vdGUgJyVzJyBoYXMgbm8gbG9jYWwgdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisiZGVzdGlubyBkZSBwdXNoICclcycgZW4gZWwgcmVtb3RvICclcycgbm8gdGllbmUgdW5hIHJhbWEgZGUgcmFzdHJlbyBsb2NhbCIKKworIzogcmVtb3RlLmM6MTY3MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICJsYSByYW1hICclcycgbm8gdGllbmUgcmVtb3RvIHBhcmEgZW52aWFyIgorCisjOiByZW1vdGUuYzoxNjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggcmVmc3BlY3MgZm9yICclcycgZG8gbm90IGluY2x1ZGUgJyVzJyIKK21zZ3N0ciAicmVmc3BlY3MgZGVsIHB1c2ggcGFyYSAnJXMnIG5vIGluY2x1eWVuICclcyciCisKKyM6IHJlbW90ZS5jOjE2OTYKK21zZ2lkICJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiCittc2dzdHIgInB1c2ggbm8gdGllbmUgZGVzdGlubyAocHVzaC5kZWZhdWx0IGVzICduYWRhJykiCisKKyM6IHJlbW90ZS5jOjE3MTgKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSAnc2ltcGxlJyBwdXNoIHRvIGEgc2luZ2xlIGRlc3RpbmF0aW9uIgorbXNnc3RyICJubyBzZSBwdWVkZSByZXNvbHZlciBwdXNoICdzaW1wbGUnIHBhcmEgdW4gZGVzdGlubyDDum5pY28iCisKKyM6IHJlbW90ZS5jOjE4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZmluZCByZW1vdGUgcmVmICVzIgorbXNnc3RyICJubyBzZSBwdWVkbyBlbmNvbnRyYXIgcmVmIHJlbW90YSAlcyIKKworIzogcmVtb3RlLmM6MTg1NworIywgYy1mb3JtYXQKK21zZ2lkICIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiCittc2dzdHIgIiogSWdub3JhbmRvIHJlZiBncmFjaW9zYSAnJXMnIGxvY2FsbWVudGUiCisKKyM6IHJlbW90ZS5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICJUdSByYW1hIGVzdMOhIGJhc2FkYSBlbiAnJXMnLCBwZXJvIHVwc3RyZWFtIGhhIGRlc2FwYXJlY2lkby5cbiIKKworIzogcmVtb3RlLmM6MjAyNAorbXNnaWQgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIgorbXNnc3RyICIgICh1c2EgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiBwYXJhIGFycmVnbGFyKVxuIgorCisjOiByZW1vdGUuYzoyMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIHVwIHRvIGRhdGUgd2l0aCAnJXMnLlxuIgorbXNnc3RyICJUdSByYW1hIGVzdMOhIGFjdHVhbGl6YWRhIGNvbiAnJXMnLlxuIgorCisjOiByZW1vdGUuYzoyMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGFuZCAnJXMnIHJlZmVyIHRvIGRpZmZlcmVudCBjb21taXRzLlxuIgorbXNnc3RyICJUdSByYW1hIHkgJyVzJyByZWZpZXJlbiBhIGNvbW1pdHMgZGlmZXJlbnRlcy5cbiIKKworIzogcmVtb3RlLmM6MjAzNAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCIlc1wiIGZvciBkZXRhaWxzKVxuIgorbXNnc3RyICIgICh1c2EgXCIlc1wiIHBhcmEgZGV0YWxsZXMpXG4iCisKKyM6IHJlbW90ZS5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAiVHUgcmFtYSBlc3TDoSBhZGVsYW50YWRhIGEgJyVzJyBwb3IgJWQgY29tbWl0LlxuIgorbXNnc3RyWzFdICJUdSByYW1hIGVzdMOhIGFkZWxhbnRhZGEgYSAnJXMnIHBvciAlZCBjb21taXRzLlxuIgorCisjOiByZW1vdGUuYzoyMDQ0Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1c2hcIiB0byBwdWJsaXNoIHlvdXIgbG9jYWwgY29tbWl0cylcbiIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IHB1c2hcIiBwYXJhIHB1YmxpY2FyIHR1cyBjb21taXRzIGxvY2FsZXMpXG4iCisKKyM6IHJlbW90ZS5jOjIwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAiIgorIlR1IHJhbWEgZXN0w6EgZGV0csOhcyBkZSAnJXMnIHBvciAlZCBjb21taXQsIHkgcHVlZGUgc2VyIGF2YW56YWRhIHLDoXBpZG8uXG4iCittc2dzdHJbMV0gIiIKKyJUdSByYW1hIGVzdMOhIGRldHLDoXMgZGUgJyVzJyBwb3IgJWQgY29tbWl0cywgeSBwdWVkZSBzZXIgYXZhbnphZGEgcsOhcGlkby5cbiIKKworIzogcmVtb3RlLmM6MjA1NQorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gdXBkYXRlIHlvdXIgbG9jYWwgYnJhbmNoKVxuIgorbXNnc3RyICIgICh1c2EgXCJnaXQgcHVsbFwiIHBhcmEgYWN0dWFsaXphciB0dSByYW1hIGxvY2FsKVxuIgorCisjOiByZW1vdGUuYzoyMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ3N0clswXSAiIgorIlR1IHJhbWEgeSAnJXMnIGhhbiBkaXZlcmdpZG8sXG4iCisieSBzZSB0aWVuZSAlZCB5ICVkIGNvbW1pdCBkaWZlcmVudGVzIGVuIGNhZGEgdW5hIHJlc3BlY3RpdmFtZW50ZS5cbiIKK21zZ3N0clsxXSAiIgorIlR1IHJhbWEgeSAnJXMnIGhhbiBkaXZlcmdpZG8sXG4iCisieSB0aWVuZW4gJWQgeSAlZCBjb21taXRzIGRpZmVyZW50ZXMgY2FkYSB1bmEgcmVzcGVjdGl2YW1lbnRlLlxuIgorCisjOiByZW1vdGUuYzoyMDY4Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIgICh1c2EgXCJnaXQgcHVsbFwiIHBhcmEgZnVzaW9uYXIgbGEgcmFtYSByZW1vdGEgZW4gbGEgdHV5YSlcbiIKKworIzogcmVtb3RlLmM6MjI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcGFyc2UgZXhwZWN0ZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciBlbCBub21icmUgZGUgb2JqZXRvICclcyciCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcGxhY2UgcmVmIG5hbWU6ICVzIgorbXNnc3RyICJtYWwgbm9tYnJlIGRlIHJlZiBkZSByZWVtcGxhem86ICVzIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSByZXBsYWNlIHJlZjogJXMiCittc2dzdHIgImR1cGxpY2FyIHJlZiBkZSByZWVtcGxhem86ICVzIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgZGVwdGggdG9vIGhpZ2ggZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAicmVtcGxhemFyIHByb2Z1bmRpYWQgbXV5IGVsZXZhZGEgcGFyYSBvYmpldG8gJXMiCisKKyM6IHJlcmVyZS5jOjIxNyByZXJlcmUuYzoyMjYgcmVyZXJlLmM6MjI5Cittc2dpZCAiY29ycnVwdCBNRVJHRV9SUiIKK21zZ3N0ciAiTUVSR0VfUlIgY29ycnVwdG8iCisKKyM6IHJlcmVyZS5jOjI2NCByZXJlcmUuYzoyNjkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVyZXJlIHJlY29yZCIKK21zZ3N0ciAiaW5jYXBheiBkZSBlc2NyaWJpciBlbnRyYWRhIHJlcmVyZSIKKworIzogcmVyZXJlLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZXJlIHdlcmUgZXJyb3JzIHdoaWxlIHdyaXRpbmcgJyVzJyAoJXMpIgorbXNnc3RyICJodWJpZXJvbiBlcnJvcmVzIG1pZW50cmFzIHNlIGVzY3JpYsOtYSAnJXMnICglcykiCisKKyM6IHJlcmVyZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmx1c2ggJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGhhY2VyIGZsdXNoICclcyciCisKKyM6IHJlcmVyZS5jOjUwMyByZXJlcmUuYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb25mbGljdCBodW5rcyBpbiAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGFuYWxpemFyIGh1bmtzIGVuIGNvbmZsaWN0byBlbiAnJXMnIgorCisjOiByZXJlcmUuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJyVzJyIKK21zZ3N0ciAiZmFsbMOzIHV0aW1lKCkgZW4gJyVzJyIKKworIzogcmVyZXJlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImVzY3JpYmllbmRvICclcycgZmFsbMOzIgorCisjOiByZXJlcmUuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2VkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIiclcycgcHVlc3RvIGVuIHN0YWdlIHVzYW5kbyByZXNvbHVjacOzbiBwcmV2aWEuIgorCisjOiByZXJlcmUuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcmVzb2x1dGlvbiBmb3IgJyVzJy4iCittc2dzdHIgIlJlc29sdWNpw7NuIGd1YXJkYWRhIHBhcmEgJyVzJy4iCisKKyM6IHJlcmVyZS5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNvbHZlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICInJXMnIHJlc3VlbHRvIHVzYW5kbyByZXNvbHVjacOzbiBwcmV2aWEuIgorCisjOiByZXJlcmUuYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayBzdHJheSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBkZXN2aW5jdWxhciBzdHJheSAnJXMnIgorCisjOiByZXJlcmUuYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIlJlc29sdWNpw7NuIHByZWNhcmdhZGEgcGFyYSAnJXMnIgorCisjOiByZXJlcmUuYzo4ODEgc3VibW9kdWxlLmM6MjA3OCBidWlsdGluL2xvZy5jOjE4NzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDU0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gY3JlYXIgZWwgZGlyZWN0b3JpbyAnJXMnIgorCisjOiByZXJlcmUuYzoxMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgY29uZmxpY3RlZCBzdGF0ZSBpbiAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgYWN0dWFsaXphciBlc3RhZG8gY29uZmxpY3Rpdm8gZW4gJyVzJyIKKworIzogcmVyZXJlLmM6MTA2OCByZXJlcmUuYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlbWVtYmVyZWQgcmVzb2x1dGlvbiBmb3IgJyVzJyIKK21zZ3N0ciAicmVzb2x1Y2nDs24gcGFyYSAnJXMnIG5vIHJlY29yZGFkYSIKKworIzogcmVyZXJlLmM6MTA3NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGRlc3ZpbmN1bGFyICclcyciCisKKyM6IHJlcmVyZS5jOjEwODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCBwcmVpbWFnZSBmb3IgJyVzJyIKK21zZ3N0ciAiQWN0dWFsaXphZGEgcHJlaW1hZ2VuIHBhcmEgJyVzJyIKKworIzogcmVyZXJlLmM6MTA5NgorIywgYy1mb3JtYXQKK21zZ2lkICJGb3Jnb3QgcmVzb2x1dGlvbiBmb3IgJyVzJ1xuIgorbXNnc3RyICJTZSBvbHZpZMOzIHJlc29sdWNpw7NuIHBhcmEgJyVzJ1xuIgorCisjOiByZXJlcmUuYzoxMTk5Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcnItY2FjaGUgZGlyZWN0b3J5IgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGFicmlyIGRpcmVjdG9yaW8gcnItY2FjaGUiCisKKyM6IHJldmlzaW9uLmM6MjQ5NworbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgInR1IHJhbWEgYWN0dWFsIHBhcmVjZSBlc3RhciByb3RhIgorCisjOiByZXZpc2lvbi5jOjI1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdHMgeWV0IgorbXNnc3RyICJ0dSByYW1hIGFjdHVhbCAnJXMnIG5vIHRpZW5lIG5pbmfDum4gY29tbWl0IHRvZGF2w61hIgorCisjOiByZXZpc2lvbi5jOjI3MDgKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAiLS1maXJzdC1wYXJlbnQgZXMgaW5jb21wYXRpYmxlIGNvbiAtLWJpc2VjdCIKKworIzogcmV2aXNpb24uYzoyNzEyCittc2dpZCAiLUwgZG9lcyBub3QgeWV0IHN1cHBvcnQgZGlmZiBmb3JtYXRzIGJlc2lkZXMgLXAgYW5kIC1zIgorbXNnc3RyICItTCBubyBzb3BvcnRhIHRvZGF2w61hIGZvcm1hdG9zIGRlIGRpZmYgZnVlcmEgZGUgLXAgeSAtcyIKKworIzogcnVuLWNvbW1hbmQuYzo3NjMKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiCittc2dzdHIgImZhbGzDsyBhbCBhYnJpciAvZGV2L251bGwiCisKKyM6IHJ1bi1jb21tYW5kLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFzeW5jIHRocmVhZDogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgY3JlYXIgaGlsbyBhc3luYzogJXMiCisKKyM6IHJ1bi1jb21tYW5kLmM6MTMzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlICclcycgaG9vayB3YXMgaWdub3JlZCBiZWNhdXNlIGl0J3Mgbm90IHNldCBhcyBleGVjdXRhYmxlLlxuIgorIllvdSBjYW4gZGlzYWJsZSB0aGlzIHdhcm5pbmcgd2l0aCBgZ2l0IGNvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgZmFsc2VgLiIKK21zZ3N0ciAiIgorIkVsIGhvb2sgJyVzJyBmdWUgaWdub3JhZG8gcG9ycXVlIG5vIGhhIHNpZG8gY29uZmlndXJhZG8gY29tbyBlamVjdXRhYmxlLlxuIgorIlB1ZWRlcyBkZXNhY3RpdmFyIGVzdGEgYWR2ZXJ0ZW5jaWFzIGNvbiBgZ2l0IGNvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgIgorImZhbHNlYC4iCisKKyM6IHNlbmQtcGFjay5jOjE0NAorbXNnaWQgInVuZXhwZWN0ZWQgZmx1c2ggcGFja2V0IHdoaWxlIHJlYWRpbmcgcmVtb3RlIHVucGFjayBzdGF0dXMiCittc2dzdHIgIiIKKyJmbHVzaCBwYWNrZXQgaW5lc3BlcmFkbyBtaWVudHJhcyBzZSBsZcOtYSBlc3RhdHVzIGRlIGRlc2VtcGFxdWV0YWRvIHJlbW90byIKKworIzogc2VuZC1wYWNrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSByZW1vdGUgdW5wYWNrIHN0YXR1czogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYW5hbGl6YXIgZWwgZXN0YWRvIGRlIGRlc2VtcGFxdWV0YWRvIHJlbW90bzogJXMiCisKKyM6IHNlbmQtcGFjay5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgdW5wYWNrIGZhaWxlZDogJXMiCittc2dzdHIgImRlc2VtcGFxdWV0YWRvIHJlbW90byBmYWxsw7M6ICVzIgorCisjOiBzZW5kLXBhY2suYzozMDkKK21zZ2lkICJmYWlsZWQgdG8gc2lnbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSIKK21zZ3N0ciAiZmFsbMOzIGFsIGZpcm1hciBlbCBjZXJ0aWZpY2FkbyBkZSBwdXNoIgorCisjOiBzZW5kLXBhY2suYzo0MjMKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIHB1c2giCittc2dzdHIgImVsIGZpbmFsIHJlY2VwdG9yIG5vIHNvcG9ydGEgLS1zaWduZWQgcHVzaCIKKworIzogc2VuZC1wYWNrLmM6NDI1Cittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tIgorInNpZ25lZCBwdXNoIgorbXNnc3RyICIiCisibm8gc2UgbWFuZGEgdW4gY2VydGlmaWNhZG8gZGUgcHVzaCB5YSBxdWUgZWwgZGVzdGlubyBubyBzb3BvcnRhIHB1c2ggZmlybWFkbyAiCisiKC0tc2lnbmVkICkiCisKKyM6IHNlbmQtcGFjay5jOjQzNworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMgcHVzaCIKK21zZ3N0ciAiZWwgZGVzdGlubyBubyBzb3BvcnRhIHB1c2ggYXTDs21pY29zICgtLWF0b21pYykiCisKKyM6IHNlbmQtcGFjay5jOjQ0MgorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgcHVzaCBvcHRpb25zIgorbXNnc3RyICJlbCBkZXN0aW5vIG5vIHNvcG9ydGEgb3BjaW9uZXMgZGUgcHVzaCIKKworIzogc2VxdWVuY2VyLmM6MTkxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0IG1lc3NhZ2UgY2xlYW51cCBtb2RlICclcyciCittc2dzdHIgIm1lbnNhamUgZGUgY29tbWl0IGludsOhbGlkbywgbW9kbyBjbGVhbnVwICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gYm9ycmFyICclcyciCisKKyM6IHNlcXVlbmNlci5jOjMxNSBidWlsdGluL3JlYmFzZS5jOjc4NSBidWlsdGluL3JlYmFzZS5jOjE3NTAgYnVpbHRpbi9ybS5jOjM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gZWxpbWluYXInJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozMjUKK21zZ2lkICJyZXZlcnQiCittc2dzdHIgInJldmVydGlyIgorCisjOiBzZXF1ZW5jZXIuYzozMjcKK21zZ2lkICJjaGVycnktcGljayIKK21zZ3N0ciAiY2hlcnJ5LXBpY2siCisKKyM6IHNlcXVlbmNlci5jOjMyOQorbXNnaWQgInJlYmFzZSIKK21zZ3N0ciAicmViYXNlIgorCisjOiBzZXF1ZW5jZXIuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBhY3Rpb246ICVkIgorbXNnc3RyICJhY2Npw7NuIGRlc2Nvbm9jaWRhOiAlZCIKKworIzogc2VxdWVuY2VyLmM6Mzg5Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKyJkZXNwdcOpcyBkZSByZXNvbHZlciBsb3MgY29uZmxpY3RvcywgbWFyY2EgbGFzIHJ1dGFzIGNvcnJlZ2lkYXNcbiIKKyJjb24gJ2dpdCBhZGQgPHJ1dGFzPicgbyAnZ2l0IHJtIDxydXRhcz4nIgorCisjOiBzZXF1ZW5jZXIuYzozOTIKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+J1xuIgorImFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JyIKK21zZ3N0ciAiIgorInRyYXMgcmVzb2x2ZXIgbG9zIGNvbmZsaWN0b3MsIG1hcmNhIGxhcyBydXRhcyBjb3JyZWdpZGFzXG4iCisiY29uICdnaXQgYWRkIDxydXRhcz4nIG8gJ2dpdCBybSA8cnV0YXM+J1xuIgorInkgaGF6IHVuIGNvbW1pdCBkZWwgcmVzdWx0YWRvIGNvbiAnZ2l0IGNvbW1pdCciCisKKyM6IHNlcXVlbmNlci5jOjQwNSBzZXF1ZW5jZXIuYzoyOTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb2NrICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gYmxvcXVlYXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBlb2wgdG8gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBlc2NyaWJpciBFT0wgZW4gJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDE3IHNlcXVlbmNlci5jOjI3MDYgc2VxdWVuY2VyLmM6MjkwNyBzZXF1ZW5jZXIuYzoyOTIxCisjOiBzZXF1ZW5jZXIuYzozMTg1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5hbGl6ZSAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgZmluYWxpemFyICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQ0MCBzZXF1ZW5jZXIuYzoxNjEzIHNlcXVlbmNlci5jOjI3MjYgc2VxdWVuY2VyLmM6MzE2NworIzogc2VxdWVuY2VyLmM6MzI3NiBidWlsdGluL2FtLmM6MjQ5IGJ1aWx0aW4vY29tbWl0LmM6Nzg3IGJ1aWx0aW4vbWVyZ2UuYzoxMTIwCisjOiBidWlsdGluL3JlYmFzZS5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlcy4iCittc2dzdHIgInR1cyBjYW1iaW9zIGxvY2FsZXMgc2Vyw6FuIHNvYnJlZXNjcml0b3MgcG9yICVzLiIKKworIzogc2VxdWVuY2VyLmM6NDcwCittc2dpZCAiY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICJyZWFsaXphIHVuIGNvbW1pdCBjb24gdHVzIGNhbWJpb3MgbyBhcGxpY2EgdW4gc3Rhc2ggcGFyYSBwcm9jZWRlci4iCisKKyM6IHNlcXVlbmNlci5jOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFzdC1mb3J3YXJkIgorbXNnc3RyICIlczogYXZhbmNlIHLDoXBpZG8iCisKKyM6IHNlcXVlbmNlci5jOjU0MSBidWlsdGluL3RhZy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiTW9kbyBjbGVhbnVwIGludsOhbGlkbyAlcyIKKworIy4gVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIsICJjaGVycnktcGljayIgb3IKKyMuICJyZWJhc2UiLgorIy4KKyM6IHNlcXVlbmNlci5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlczogSW5jYXBheiBkZSBlc2NyaWJpciBlbCBudWV2byBhcmNoaXZvIMOtbmRpY2UiCisKKyM6IHNlcXVlbmNlci5jOjY1MgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBhY3R1YWxpemFyIGVsIMOhcmJvbCBkZSBsYSBjYWNow6kiCisKKyM6IHNlcXVlbmNlci5jOjY2NgorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICJubyBzZSBwdWRvIHJlc29sdmVyIGVsIGNvbW1pdCBkZSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzo3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8ga2V5IHByZXNlbnQgaW4gJyUuKnMnIgorbXNnc3RyICJubyBoYXkgbGxhdmUgcHJlc2VudGUgZW4gJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlcXVvdGUgdmFsdWUgb2YgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBkZXF1b3RlIHBhcmEgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6Nzk0IHdyYXBwZXIuYzoxOTAgd3JhcHBlci5jOjM2MCBidWlsdGluL2FtLmM6NzEwCisjOiBidWlsdGluL2FtLmM6ODAyIGJ1aWx0aW4vbWVyZ2UuYzoxMTE3IGJ1aWx0aW4vcmViYXNlLmM6MTA3MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICJubyBzZSBwdWRvIGFicmlyICclcycgcGFyYSBsZWN0dXJhIgorCisjOiBzZXF1ZW5jZXIuYzo4MDQKK21zZ2lkICInR0lUX0FVVEhPUl9OQU1FJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICInR0lUX0FVVEhPUl9OQU1FJyB5YSBwcm9wb3JjaW9uYWRvIgorCisjOiBzZXF1ZW5jZXIuYzo4MDkKK21zZ2lkICInR0lUX0FVVEhPUl9FTUFJTCcgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfRU1BSUwnIHlhIHByb3BvcmNpb25hZG8iCisKKyM6IHNlcXVlbmNlci5jOjgxNAorbXNnaWQgIidHSVRfQVVUSE9SX0RBVEUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIidHSVRfQVVUSE9SX0RBVEUnIHlhIHByb3BvcmNpb25hZG8iCisKKyM6IHNlcXVlbmNlci5jOjgxOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhcmlhYmxlICclcyciCittc2dzdHIgInZhcmlhYmxlIGRlc2Nvbm9jaWRhICclcyciCisKKyM6IHNlcXVlbmNlci5jOjgyMworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfTkFNRSciCittc2dzdHIgImZhbHRhICdHSVRfQVVUSE9SX05BTUUnIgorCisjOiBzZXF1ZW5jZXIuYzo4MjUKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX0VNQUlMJyIKK21zZ3N0ciAiZmFsdGEgJ0dJVF9BVVRIT1JfRU1BSUwnIgorCisjOiBzZXF1ZW5jZXIuYzo4MjcKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX0RBVEUnIgorbXNnc3RyICJmYWx0YSAnR0lUX0FVVEhPUl9EQVRFJyIKKworIzogc2VxdWVuY2VyLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZVxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlIHNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJzZSBoYSBhcGxpY2FkbyB1biBzdGFnZSBhIGxvcyBjYW1iaW9zIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvXG4iCisic2kgZXN0b3MgY2FtYmlvcyBlc3TDoW4gZGVzdGluYWRvcyBhIHNlciBhcGxhc3RhZG9zIGVuIGVsIGNvbW1pdCBwcmV2aW8sICIKKyJlamVjdXRhOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiU2kgZXN0b3MgY2FtYmlvcyBlc3TDoW4gZGVzdGluYWRvcyBhIHVuIG51ZXZvIGNvbW1pdCwgZWplY3V0YTpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJlbiBjYW1ib3MgY2Fzb3MsIGN1YW5kbyBhY2FiZXMsIGNvbnRpbnVhIGNvbjpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMTQ4Cittc2dpZCAiJ3ByZXBhcmUtY29tbWl0LW1zZycgaG9vayBmYWlsZWQiCittc2dzdHIgImhvb2sgJ3ByZXBhcmUtY29tbWl0LW1zZycgZmFsbMOzIgorCisjOiBzZXF1ZW5jZXIuYzoxMTU0Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseS4gUnVuIHRoZVxuIgorImZvbGxvd2luZyBjb21tYW5kIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIGVkaXRvciB0byBlZGl0XG4iCisieW91ciBjb25maWd1cmF0aW9uIGZpbGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiVHUgbm9tYnJlIHkgY29ycmVvIGZ1ZXJvbiBjb25maWd1cmFkb3MgYXV0b23DoXRpY2FtZW50ZSBiYXNhZG9zXG4iCisiZW4gdHUgdXN1YXJpbyB5IG5vbWJyZSBkZSBob3N0LiBQb3IgZmF2b3IgdmVyaWZpY2EgcXVlIHNvbiBjb3JyZWN0b3MuXG4iCisiVHUgcHVlZGVzIHN1cHJpbWlyIGVzdGUgbWVuc2FqZSBjb25maWd1csOhbmRvbG9zIGRlIGZvcm1hIGV4cGxpY2l0YS4gRWplY3V0YSAiCisiZWwgXG4iCisic2lndWllbnRlIGNvbWFuZG8geSBzaWd1ZSBsYXMgaW5zdHJ1Y2Npb25lcyBkZSB0dSBlZGl0b3JcbiIKKyIgcGFyYSBtb2RpZmljYXIgdHUgYXJjaGl2byBkZSBjb25maWd1cmFjacOzbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJUcmFzIGhhY2VyIGVzdG8sIHB1ZWRlcyBhcnJlZ2xhciBsYSBpZGVudGlkYWQgdXNhZGEgcGFyYSBlc3RlIGNvbW1pdCBjb246XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMTY3Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiVHUgbm9tYnJlIHkgY29ycmVvIGZ1ZXJvbiBjb25maWd1cmFkb3MgYXV0b23DoXRpY2FtZW50ZSBiYXNhZG9zXG4iCisiZW4gdHUgdXN1YXJpbyB5IG5vbWJyZSBkZSBob3N0LiBQb3IgZmF2b3IgdmVyaWZpY2EgcXVlIHNvbiBjb3JyZWN0b3MuXG4iCisiVHUgcHVlZGVzIHN1cHJpbWlyIGVzdGUgbWVuc2FqZSBjb25maWd1csOhbmRvbG9zIGRlIGZvcm1hIGV4cGxpY2l0YTogXG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiVHUgbm9tYnJlXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIlRyYXMgaGFjZXIgZXN0bywgcHVlZGVzIGFycmVnbGFyIHR1IGlkZW50aWRhZCBwYXJhIGVzdGUgY29tbWl0IGNvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyMDkKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJubyBzZSBwdWRvIHJldmlzYXIgZWwgY29tbWl0IHJlY2nDqW4gY3JlYWRvIgorCisjOiBzZXF1ZW5jZXIuYzoxMjExCittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJubyBzZSBwdWRvIGFuYWxpemFyIGVsIGNvbW1pdCByZWNpw6luIGNyZWFkbyIKKworIzogc2VxdWVuY2VyLmM6MTI1NworbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICJubyBzZSBwdWRvIHJlc29sdmVyIEhFQUQgdHJhcyBjcmVhciBlbCBjb21taXQiCisKKyM6IHNlcXVlbmNlci5jOjEyNTkKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJIRUFEIGRlc2Fjb3BsYWRvIgorCisjOiBzZXF1ZW5jZXIuYzoxMjYzCittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAoY29tbWl0LXJhw616KSIKKworIzogc2VxdWVuY2VyLmM6MTI4NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIgorbXNnc3RyICJubyBzZSBwdWRvIGFuYWxpemFyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjEyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICLCoUhFQUQgJXMgbm8gZXMgdW4gY29tbWl0ISIKKworIzogc2VxdWVuY2VyLmM6MTI5MCBzZXF1ZW5jZXIuYzoxMzY0IGJ1aWx0aW4vY29tbWl0LmM6MTU3NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAibm8gc2UgcHVkbyBhbmFsaXphciBlbCBjb21taXQgZGUgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTM0MiBzZXF1ZW5jZXIuYzoxOTY4Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCBhdXRob3IiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYW5hbGl6YXIgZWwgYXV0b3IgZGVsIGNvbW1pdCIKKworIzogc2VxdWVuY2VyLmM6MTM1MyBidWlsdGluL2FtLmM6MTU2NiBidWlsdGluL21lcmdlLmM6Njg3Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgZmFsbMOzIGFsIGVzY3JpYmlyIGVsIMOhcmJvbCIKKworIzogc2VxdWVuY2VyLmM6MTM4NiBzZXF1ZW5jZXIuYzoxNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbW1pdCBtZXNzYWdlIGZyb20gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciBlbCBtZW5zYWplIGRlbCBjb21taXQgZGUgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTQxMyBidWlsdGluL2FtLmM6MTU4OCBidWlsdGluL2NvbW1pdC5jOjE2NzMgYnVpbHRpbi9tZXJnZS5jOjg4NgorIzogYnVpbHRpbi9tZXJnZS5jOjkxMQorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICJmYWxsw7MgYWwgZXNjcmliaXIgZWwgb2JqZXRvIGNvbW1pdCIKKworIzogc2VxdWVuY2VyLmM6MTQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGFuYWxpemFyIGNvbW1pdCAlcyIKKworIzogc2VxdWVuY2VyLmM6MTQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhbmFsaXphciBlbCBjb21taXQgcGFkcmUgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE1NjIgc2VxdWVuY2VyLmM6MTY3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQ6ICVkIgorbXNnc3RyICJjb21hbmRvIGRlc2Nvbm9jaWRvOiAlZCIKKworIzogc2VxdWVuY2VyLmM6MTYyMCBzZXF1ZW5jZXIuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAlZCBjb21taXRzLiIKK21zZ3N0ciAiRXN0YSBlcyB1bmEgY29tYmluYWNpw7NuIGRlICVkIGNvbW1pdHMuIgorCisjOiBzZXF1ZW5jZXIuYzoxNjMwCittc2dpZCAibmVlZCBhIEhFQUQgdG8gZml4dXAiCittc2dzdHIgInNlIG5lY2VzaXRhIHVuIEhFQUQgcGFyYSBhcnJlZ2xhciIKKworIzogc2VxdWVuY2VyLmM6MTYzMiBzZXF1ZW5jZXIuYzozMjEyCittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE2MzQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEJ3MgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciBlbCBtZW5zYWplIGRlIGNvbW1pdCBkZSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBlc2NyaWJpciAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxNjQ3IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTYKK21zZ2lkICJUaGlzIGlzIHRoZSAxc3QgY29tbWl0IG1lc3NhZ2U6IgorbXNnc3RyICJFc3RlIGVzIGVsIG1lbnNhamUgZGVsIDFlciBjb21taXQ6IgorCisjOiBzZXF1ZW5jZXIuYzoxNjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyIGVsIG1lbnNhamUgZGVsIGNvbW1pdCBkZSAlcyIKKworIzogc2VxdWVuY2VyLmM6MTY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJWQ6IgorbXNnc3RyICJFc3RlIGVzIGVsIG1lbnNhamUgZGVsIGNvbW1pdCAjJWQ6IgorCisjOiBzZXF1ZW5jZXIuYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJWQgd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiRWwgbWVuc2FqZSBkZWwgY29tbWl0ICMlZCBzZXLDoSBzYWx0YWRvOiIKKworIzogc2VxdWVuY2VyLmM6MTc1NgorbXNnaWQgInlvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgInR1IGFyY2hpdm8gw61uZGljZSBubyBlc3TDoSBmdXNpb25hZG8uIgorCisjOiBzZXF1ZW5jZXIuYzoxNzYzCittc2dpZCAiY2Fubm90IGZpeHVwIHJvb3QgY29tbWl0IgorbXNnc3RyICJubyBzZSBwdWVkZSBhcnJlZ2xhciBlbCBjb21taXQgcmHDrXoiCisKKyM6IHNlcXVlbmNlci5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICJlbCBjb21taXQgJXMgZXMgdW5hIGZ1c2nDs24gcGVybyBubyBzZSBwcm9wb3JjaW9uw7MgbGEgb3BjacOzbiAtbS4iCisKKyM6IHNlcXVlbmNlci5jOjE3OTAgc2VxdWVuY2VyLmM6MTc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgImVsIGNvbW1pdCAlcyBubyB0aWVuZSB1biBwYWRyZSAlZCIKKworIzogc2VxdWVuY2VyLmM6MTgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgb2J0ZW5lciBlbCBtZW5zYWplIGRlIGNvbW1pdCBwYXJhICVzIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgYSAidG9kbyIgY29tbWFuZCBsaWtlCisjLiAicmV2ZXJ0IiBvciAicGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExLgorIzogc2VxdWVuY2VyLmM6MTgyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVzOiBubyBzZSBwdWVkZSBhbmFsaXphciBlbCBjb21taXQgcGFkcmUgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSAnJXMnIHRvICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIHJlbm9tYnJhciAnJXMnIGEgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTk0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICJubyBzZSBwdWRvIHJldmVydGlyICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxOTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhcHBseSAlcy4uLiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhcGxpY2FyICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxOTYxCisjLCBjLWZvcm1hdAorbXNnaWQgImRyb3BwaW5nICVzICVzIC0tIHBhdGNoIGNvbnRlbnRzIGFscmVhZHkgdXBzdHJlYW1cbiIKK21zZ3N0ciAiYm90YW5kbyAkJXMgJXMgLS0gY29udGVuaWRvcyBkZWwgcGFyY2hlIHlhIGVzdMOhbiBlbiB1cHN0cmVhbVxuIgorCisjOiBzZXF1ZW5jZXIuYzoyMDE4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IGZhbGzDsyBhbCBsZWVyIGVsIMOtbmRpY2UiCisKKyM6IHNlcXVlbmNlci5jOjIwMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczogZmFsbMOzIGFsIHJlZnJlc2NhciBlbCDDrW5kaWNlIgorCisjOiBzZXF1ZW5jZXIuYzoyMTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IGFjY2VwdCBhcmd1bWVudHM6ICclcyciCittc2dzdHIgIiVzIG5vIGFjZXB0YSBsb3MgYXJndW1lbnRvczogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50cyBmb3IgJXMiCittc2dzdHIgImZhbHRhbiBhcmd1bWVudG9zIHBhcmEgcGFyYSAlcyIKKworIzogc2VxdWVuY2VyLmM6MjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYW5hbGl6YXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgImzDrW5lYSBpbnbDoWxpZGEgJWQ6ICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjIyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgICclcycgc2luIHVuIGNvbW1pdCBwcmV2aW8iCisKKyM6IHNlcXVlbmNlci5jOjIyOTgKK21zZ2lkICJjYW5jZWxsaW5nIGEgY2hlcnJ5IHBpY2tpbmcgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImNhbmNlbGFuZG8gY2hlcnJ5LXBpY2sgZW4gcHJvZ3Jlc28iCisKKyM6IHNlcXVlbmNlci5jOjIzMDUKK21zZ2lkICJjYW5jZWxsaW5nIGEgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJjYW5jZWxhbmRvIHJldmVydCBlbiBwcm9ncmVzbyIKKworIzogc2VxdWVuY2VyLmM6MjM0OQorbXNnaWQgInBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICJwb3IgZmF2b3IgYXJyZWdsZSBlc3RvIHVzYW5kbyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorCisjOiBzZXF1ZW5jZXIuYzoyMzUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIGluc3RydWN0aW9uIHNoZWV0OiAnJXMnIgorbXNnc3RyICJob2phIGRlIGluc3RydWNjaW9uZXMgaW51dGlsaXphYmxlOiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyMzU2Cittc2dpZCAibm8gY29tbWl0cyBwYXJzZWQuIgorbXNnc3RyICJuaW5nw7puIGNvbW1pdCBhbmFsaXphZG8uIgorCisjOiBzZXF1ZW5jZXIuYzoyMzY3Cittc2dpZCAiY2Fubm90IGNoZXJyeS1waWNrIGR1cmluZyBhIHJldmVydC4iCittc2dzdHIgIm5vIHNlIHB1ZWRlIHJlYWxpemFyIGNoZXJyeS1waWNrIGR1cmFudGUgdW4gcmV2ZXJ0LiIKKworIzogc2VxdWVuY2VyLmM6MjM2OQorbXNnaWQgImNhbm5vdCByZXZlcnQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICJubyBzZSBwdWVkZSByZWFsaXphciB1biByZXZlcnQgZHVyYW50ZSB1biBjaGVycnktcGljay4iCisKKyM6IHNlcXVlbmNlci5jOjI0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJ2YWxvciBpbnbDoWxpZG8gcGFyYSAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjI1NDAKK21zZ2lkICJ1bnVzYWJsZSBzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLW9udG8gaW5zZXJ2aWJsZSIKKworIzogc2VxdWVuY2VyLmM6MjU1NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJyVzJyIKK21zZ3N0ciAiaG9qYSBkZSBvcGNpb25lcyBtYWwgZm9ybWFkYTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjY0NCBzZXF1ZW5jZXIuYzo0MzYxCittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgImNvbmp1bnRvIGRlIGNvbW1pdHMgdmFjw61vIGVudHJlZ2FkbyIKKworIzogc2VxdWVuY2VyLmM6MjY2MAorbXNnaWQgInJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJyZXZlcnQgeWEgZXN0w6EgZW4gcHJvZ3Jlc28iCisKKyM6IHNlcXVlbmNlci5jOjI2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IHJldmVydCAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAiaW50ZW50YSBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAtLXF1aXQgfCAlcyAtLWFib3J0KVwiIgorCisjOiBzZXF1ZW5jZXIuYzoyNjY1Cittc2dpZCAiY2hlcnJ5LXBpY2sgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiY2hlcnJ5LXBpY2sgeWEgZXN0w6EgZW4gcHJvZ3Jlc28iCisKKyM6IHNlcXVlbmNlci5jOjI2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICJpbnRlbnRhIFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgJXMgLS1hYm9ydClcIiIKKworIzogc2VxdWVuY2VyLmM6MjY4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciB1biBkaXJlY3RvcmlvIHNlY3VlbmNpYWRvciAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyNjk2Cittc2dpZCAiY291bGQgbm90IGxvY2sgSEVBRCIKK21zZ3N0ciAibm8gc2UgcHVkbyBibG9xdWVhciBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU2IHNlcXVlbmNlci5jOjQwOTkKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIm5pbmfDum4gY2hlcnJ5LXBpY2sgbyByZXZlcnQgZW4gcHJvZ3Jlc28iCisKKyM6IHNlcXVlbmNlci5jOjI3NTggc2VxdWVuY2VyLmM6Mjc2OQorbXNnaWQgImNhbm5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgIm5vIHNlIHB1ZWRlIHJlc29sdmVyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI3NjAgc2VxdWVuY2VyLmM6MjgwNAorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJubyBzZSBwdWVkZSBhYm9ydGFyIGRlIHVuYSByYW1hIHBvciBuYWNlciIKKworIzogc2VxdWVuY2VyLmM6Mjc5MCBidWlsdGluL2dyZXAuYzo3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYWJyaXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6Mjc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciAnJXMnOiAlcyIKKworIzogc2VxdWVuY2VyLmM6Mjc5MworbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgImZpbmFsIGRlIGFyY2hpdm8gaW5lc3BlcmFkbyIKKworIzogc2VxdWVuY2VyLmM6Mjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiCittc2dzdHIgImFyY2hpdm8gSEVBRCBkZSBwcmUtY2hlcnJ5LXBpY2sgZ3VhcmRhZG/CoCclcycgZXN0w6EgY29ycnVwdG8iCisKKyM6IHNlcXVlbmNlci5jOjI4MTAKK21zZ2lkICJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQuIE5vdCByZXdpbmRpbmcsIGNoZWNrIHlvdXIgSEVBRCEiCittc2dzdHIgIlBhcmVjZSBxdWUgc2UgaGEgbW92aWRvIEhFQUQuIE5vIHNlIGhhY2UgcmVib2JpbmFkbywgwqFyZXZpc2EgdHUgSEVBRCEiCisKKyM6IHNlcXVlbmNlci5jOjI4NTEKK21zZ2lkICJubyByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIm5vIGhheSByZXZlcnQgZW4gcHJvZ3Jlc28iCisKKyM6IHNlcXVlbmNlci5jOjI4NTkKK21zZ2lkICJubyBjaGVycnktcGljayBpbiBwcm9ncmVzcyIKK21zZ3N0ciAibmluZ8O6biBjaGVycnktcGljayBlbiBwcm9ncmVzbyIKKworIzogc2VxdWVuY2VyLmM6Mjg2OQorbXNnaWQgImZhaWxlZCB0byBza2lwIHRoZSBjb21taXQiCittc2dzdHIgImZhbGzDsyBhbCBlc2NyaWJpciBlbCBjb21taXQiCisKKyM6IHNlcXVlbmNlci5jOjI4NzYKK21zZ2lkICJ0aGVyZSBpcyBub3RoaW5nIHRvIHNraXAiCittc2dzdHIgIm5vIGhheSBuYWRhIHF1ZSBzYWx0YXIiCisKKyM6IHNlcXVlbmNlci5jOjI4NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImhhdmUgeW91IGNvbW1pdHRlZCBhbHJlYWR5P1xuIgorInRyeSBcImdpdCAlcyAtLWNvbnRpbnVlXCIiCittc2dzdHIgIiIKKyLCv3lhIGhhcyBoZWNobyBlbCBjb21taXQ/XG4iCisiaW50ZW50YSBcImdpdCAlcyAtLWNvbnRpbnVlXCIiCisKKyM6IHNlcXVlbmNlci5jOjMwMDMgc2VxdWVuY2VyLmM6NDAxMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBhY3R1YWxpemFyICVzIgorCisjOiBzZXF1ZW5jZXIuYzozMDQyIHNlcXVlbmNlci5jOjM5OTEKK21zZ2lkICJjYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjMwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGNvcGlhciAnJXMnIGEgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzA2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIlB1ZWRlcyBlbm1lbmRhciBlbCBjb21taXQgYWhvcmEsIGNvblxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiVW5hIHZleiBxdWUgZXN0w6lzIHNhdGlzZmVjaG8gY29uIGxvcyBjYW1iaW9zLCBlamVjdXRhXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6MzA3NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJXMuLi4gJS4qcyIKK21zZ3N0ciAiTm8gc2UgcHVkbyBhcGxpY2FyICVzLi4uICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjMwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1lcmdlICUuKnMiCittc2dzdHIgIk5vIHNlIHB1ZG8gZnVzaW9uYXIgJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MzA5OCBzZXF1ZW5jZXIuYzozMTAyIGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGNvcGlhciAnJXMnIGEgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzEyOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIGZhaWxlZDogJXNcbiIKKyIlc1lvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiZWplY3VjacOzbiBmYWxsaWRhOiAlc1xuIgorIiVzUHVlZGVzIGFycmVnbGFyIGVsIHByb2JsZW1hLCB5IGx1ZWdvIGVqZWN1dGFyXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogc2VxdWVuY2VyLmM6MzEzNQorbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCittc2dzdHIgInkgc2UgaGljaWVyb24gY2FtYmlvcyBhbCDDrW5kaWNlIHkvbyDDoXJib2wgZGUgdHJhYmFqb1xuIgorCisjOiBzZXF1ZW5jZXIuYzozMTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gc3VjY2VlZGVkOiAlc1xuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImVqZWN1Y2nDs24gZXhpdG9zYTogJXNcbiIKKyJwZXJvIHRvZGF2w61hIHF1ZWRhbiBjYW1iaW9zIHBhcmEgZWwgw61uZGljZSBvIMOhcmJvbCBkZSB0cmFiYWpvLlxuIgorIlJlYWxpemEgdW4gY29tbWl0IG8gc3Rhc2ggY29uIHR1cyBjYW1iaW9zLCB5IGx1ZWdvIGVqZWN1dGFcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgbGFiZWwgbmFtZTogJyUuKnMnIgorbXNnc3RyICJub21icmUgZGUgbGFiZWwgaWxlZ2FsOiAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjMyNTYKK21zZ2lkICJ3cml0aW5nIGZha2Ugcm9vdCBjb21taXQiCittc2dzdHIgImVzY3JpYmllbmRvIGNvbW1pdCByYcOteiBmYWxzbyIKKworIzogc2VxdWVuY2VyLmM6MzI2MQorbXNnaWQgIndyaXRpbmcgc3F1YXNoLW9udG8iCittc2dzdHIgImVzY3JpYmllbmRvIHNxdWFzaC1vbnRvIgorCisjOiBzZXF1ZW5jZXIuYzozMjk5IGJ1aWx0aW4vcmViYXNlLmM6ODgwIGJ1aWx0aW4vcmViYXNlLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiCittc2dzdHIgImZhbGzDsyBhbCBlbmNvbnRyYXIgw6FyYm9sIGRlICVzIgorCisjOiBzZXF1ZW5jZXIuYzozMzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gcmVzb2x2ZXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzM3NQorbXNnaWQgImNhbm5vdCBtZXJnZSB3aXRob3V0IGEgY3VycmVudCByZXZpc2lvbiIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZnVzaW9uYXIgc2luIHVuYSB2ZXJzacOzbiBhY3R1YWwiCisKKyM6IHNlcXVlbmNlci5jOjMzOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclLipzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYW5hbGl6YXIgJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozNDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gbWVyZ2U6ICclLipzJyIKK21zZ3N0ciAibmFkYSBwYXJhIGZ1c2lvbmFyOiAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjM0MTgKK21zZ2lkICJvY3RvcHVzIG1lcmdlIGNhbm5vdCBiZSBleGVjdXRlZCBvbiB0b3Agb2YgYSBbbmV3IHJvb3RdIgorbXNnc3RyICJmdXNpw7NuIG9jdG9wdXMgbm8gcHVlZGUgc2VyIGVqZWN1dGFkYSBlbiBsYSBwdW50YSBkZSB1biBbbnVldm8gcm9vdF0iCisKKyM6IHNlcXVlbmNlci5jOjM0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBjb21taXQgbWVzc2FnZSBvZiAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyIGVsIG1lbnNhamUgZGVsIGNvbW1pdCAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBldmVuIGF0dGVtcHQgdG8gbWVyZ2UgJyUuKnMnIgorbXNnc3RyICJubyBzZSBwdWRvIGludGVudGFyIGZ1c2lvbmFyICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzYxMAorbXNnaWQgIm1lcmdlOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgImZ1c2nDs246IE5vIHNlIHB1ZWRlIGVzY3JpYmlyIGVsIG51ZXZvIGFyY2hpdm8gw61uZGljZSIKKworIzogc2VxdWVuY2VyLmM6MzY3OSBidWlsdGluL3JlYmFzZS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC5cbiIKK21zZ3N0ciAiQXV0b3N0YXNoIGFwbGljYWRvLlxuIgorCisjOiBzZXF1ZW5jZXIuYzozNjkxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZ3VhcmRhciAlcyIKKworIzogc2VxdWVuY2VyLmM6MzY5NCBidWlsdGluL3JlYmFzZS5jOjc1MyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLlxuIgorIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IgXCJnaXQgc3Rhc2ggZHJvcFwiIGF0IGFueSB0aW1lLlxuIgorbXNnc3RyICIiCisiQXBsaWNhbmRvIGF1dG9zdGFzaCByZXN1bHTDsyBlbiBjb25mbGljdG9zLlxuIgorIlR1cyBjYW1iaW9zIGVzdMOhbiBzZWd1cm9zIGVuIGVsIHN0YXNoLlxuIgorIlB1ZWRlcyBlamVjdXRhciBcImdpdCBzdGFzaCBwb3BcIiBvIFwiZ2l0IHN0YXNoIGRyb3BcIiBlbiBjdWFscXVpZXIgIgorIm1vbWVudG8uXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIHZhbGlkIE9JRCIKK21zZ3N0ciAiJXMgbm8gZXMgT0lEIHbDoWxpZG8iCisKKyM6IHNlcXVlbmNlci5jOjM3NjAgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc3OQorbXNnaWQgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZGVzYWNvcGxhciBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozNzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgSEVBRFxuIgorbXNnc3RyICJEZXRlbmlkbyBlbiBIRUFEXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAlc1xuIgorbXNnc3RyICJEZXRlbmlkbyBlbiAlc1xuIgorCisjOiBzZXF1ZW5jZXIuYzozNzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZXhlY3V0ZSB0aGUgdG9kbyBjb21tYW5kXG4iCisiXG4iCisiICAgICUuKnNcbiIKKyJJdCBoYXMgYmVlbiByZXNjaGVkdWxlZDsgVG8gZWRpdCB0aGUgY29tbWFuZCBiZWZvcmUgY29udGludWluZywgcGxlYXNlXG4iCisiZWRpdCB0aGUgdG9kbyBsaXN0IGZpcnN0OlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tZWRpdC10b2RvXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisiTm8gc2UgcHVkbyBlamVjdXRhciBlbCBjb21hbmRvIFwidG9kb1wiXG4iCisiXG4iCisiICAgICUuKnNcbiIKKyJIYSBzaWRvIHJlcHJvZ3JhbWFkbzsgUGFyYSBlZGl0YXIgZWwgY29tYW5kbyBhbnRlcyBkZSBjb250aW51YXIsIHBvciBmYXZvclxuIgorImVkaXRlIGxhIGxpc3RhIGRlIFwidG9kb1wiIHByaW1lcm86XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjM4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAlcy4uLiAgJS4qc1xuIgorbXNnc3RyICJEZXRlbmlkbyBlbiAlcy4uLiAgJS4qc1xuIgorCisjOiBzZXF1ZW5jZXIuYzozOTQwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZCAlZCIKK21zZ3N0ciAiY29tYW5kbyBkZXNjb25vY2lkbyAlZCIKKworIzogc2VxdWVuY2VyLmM6Mzk5OQorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9yaWctaGVhZCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciBvcmlnLWhlYWQiCisKKyM6IHNlcXVlbmNlci5jOjQwMDQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnb250byciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGxlZXIgJ29udG8nIgorCisjOiBzZXF1ZW5jZXIuYzo0MDE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgSEVBRCB0byAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYWN0dWFsaXphciBIRUFEIGEgJXMiCisKKyM6IHNlcXVlbmNlci5jOjQxMTEKK21zZ2lkICJjYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAibm8gc2UgcHVlZGUgcmVhbGl6YXIgcmViYXNlOiBUaWVuZXMgY2FtYmlvcyBmdWVyYSBkZWwgw6FyZWEgZGUgc3RhZ2UuIgorCisjOiBzZXF1ZW5jZXIuYzo0MTIwCittc2dpZCAiY2Fubm90IGFtZW5kIG5vbi1leGlzdGluZyBjb21taXQiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFycmVnbGFyIHVuIGNvbW1pdCBubyBleGlzdGVudGUiCisKKyM6IHNlcXVlbmNlci5jOjQxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBmaWxlOiAnJXMnIgorbXNnc3RyICJhcmNoaXZvIGludsOhbGlkbzogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbnRlbnRzOiAnJXMnIgorbXNnc3RyICJjb250ZW5pZG8gaW52w6FsaWRvOiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTI3Cittc2dpZCAiIgorIlxuIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSwgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisiXG4iCisiVGllbmVzIGNhbWJpb3MgZnVlcmEgZGUgdW4gY29tbWl0IGVuIHR1IMOhcmJvbCBkZSB0cmFiYWpvLiBQb3IgZmF2b3IsIHJlYWxpemEgIgorInVuIGNvbW1pdCBjb24gZXN0b3NcbiIKKyJwcmltZXJvIHkgbHVlZ28gZWplY3V0YSAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBkZSBudWV2by4iCisKKyM6IHNlcXVlbmNlci5jOjQxNjMgc2VxdWVuY2VyLmM6NDIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZmlsZTogJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBlc2NyaWJpciBlbCBhcmNoaXZvOiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MjE3Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIgorbXNnc3RyICJubyBzZSBwdWVkZSBlbGltaW5hciBDSEVSUllfUElDS19IRUFEIgorCisjOiBzZXF1ZW5jZXIuYzo0MjI0Cittc2dpZCAiY291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIm5vIHNlIHB1ZG8gcmVhbGl6YXIgZWwgY29tbWl0IGNvbiBsb3MgY2FtYmlvcyBlbiBlbCDDoXJlYSBkZSBzdGFnZS4iCisKKyM6IHNlcXVlbmNlci5jOjQzMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbid0IGNoZXJyeS1waWNrIGEgJXMiCittc2dzdHIgIiVzOiBubyBzZSBwdWVkZSBhcGxpY2FyIGNoZXJyeS1waWNrIGEgdW4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjQzNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGJhZCByZXZpc2lvbiIKK21zZ3N0ciAiJXM6IHJldmlzacOzbiBlcnLDs25lYSIKKworIzogc2VxdWVuY2VyLmM6NDM3NworbXNnaWQgImNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgcmV2ZXJ0aXIgY29tbyBjb21taXQgaW5pY2lhbCIKKworIzogc2VxdWVuY2VyLmM6NDg0NgorbXNnaWQgIm1ha2Vfc2NyaXB0OiB1bmhhbmRsZWQgb3B0aW9ucyIKK21zZ3N0ciAibWFrZV9zY3JpcHQ6IG9wY2lvbmVzIGRlc2Nvbm9jaWRhcyIKKworIzogc2VxdWVuY2VyLmM6NDg0OQorbXNnaWQgIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJpbmcgcmV2aXNpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDogZXJyb3IgcHJlcGFyYW5kbyByZXZpc2lvbmVzIgorCisjOiBzZXF1ZW5jZXIuYzo1MDgzIHNlcXVlbmNlci5jOjUxMDAKK21zZ2lkICJub3RoaW5nIHRvIGRvIgorbXNnc3RyICJuYWRhIHF1ZSBoYWNlciIKKworIzogc2VxdWVuY2VyLmM6NTExOQorbXNnaWQgImNvdWxkIG5vdCBza2lwIHVubmVjZXNzYXJ5IHBpY2sgY29tbWFuZHMiCittc2dzdHIgIm5vIHNlIHB1ZG8gc2FsdGFyIGxvcyBjb21hbmRvcyBwaWNrIGlubmVjZXNhcmlvcyIKKworIzogc2VxdWVuY2VyLmM6NTIxMworbXNnaWQgInRoZSBzY3JpcHQgd2FzIGFscmVhZHkgcmVhcnJhbmdlZC4iCittc2dzdHIgImVzdGUgc2NyaXB0IHlhIGZ1ZSByZW9yZ2FuaXphZG8uIgorCisjOiBzZXR1cC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSBhdCAnJXMnIgorbXNnc3RyICInJXMnIGVzdMOhIGZ1ZXJhIGRlbCByZXBvc2l0b3JpbyBlbiAnJXMnIgorCisjOiBzZXR1cC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IG5vIHN1Y2ggcGF0aCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnZ2l0IDxjb21tYW5kPiAtLSA8cGF0aD4uLi4nIHRvIHNwZWNpZnkgcGF0aHMgdGhhdCBkbyBub3QgZXhpc3QgbG9jYWxseS4iCittc2dzdHIgIiIKKyIlczogbm8gZXhpc3RlIGxhIHJ1dGEgZW4gZWwgw6FyYm9sIGRlIHRyYWJham8uXG4iCisiVXNlICdnaXQgPGNvbWFuZG8+IC0tIDxydXRhPi4uLicgcGFyYSBlc3BlY2lmaWNhciBydXRhcyBxdWUgbm8gZXhpc3RlbiAiCisibG9jYWxtZW50ZS4iCisKKyM6IHNldHVwLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogdW5rbm93biByZXZpc2lvbiBvciBwYXRoIG5vdCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorImFyZ3VtZW50byBhbWJpZ3VvICclcyc6IHJldmlzacOzbiBkZXNjb25vY2lkYSBvIHJ1dGEgZnVlcmEgZGVsIMOhcmJvbCBkZSAiCisidHJhYmFqby5cbiIKKyJVc2UgJy0tJyBwYXJhIHNlcGFyYXIgbGFzIHJ1dGFzIGRlIGxhcyByZXZpc2lvbmVzLCBkZSBlc3RhIG1hbmVyYTpcbiIKKyInZ2l0IDxjb21hbmRvPiBbPHJldmlzacOzbj4uLi5dIC0tIFs8YXJjaGl2bz4uLi5dJyIKKworIzogc2V0dXAuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICclcycgbXVzdCBjb21lIGJlZm9yZSBub24tb3B0aW9uIGFyZ3VtZW50cyIKK21zZ3N0ciAib3BjacOzbiAnJXMnIGRlYmUgdmVuaXIgYW50ZXMgZGUgYXJndW1lbnRvcyBubyBvcGNpb25hbGVzIgorCisjOiBzZXR1cC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisiYXJndW1lbnRvIGFtYmlndW8gJyVzJzogYW1ib3MgcmV2aXNpw7NuIHkgbm9tYnJlIGRlIGFyY2hpdm9cbiIKKyJVc2UgJy0tJyBwYXJhIHNlcGFyYXIgcnV0YXMgZGUgcmV2aXNpb25lcywgZGUgZXN0YSBtYW5lcmE6XG4iCisiJ2dpdCA8Y29tYW5kbz4gWzxyZXZpc2nDs24+Li4uXSAtLSBbPGFyY2hpdm8+Li4uXSciCisKKyM6IHNldHVwLmM6NDA5Cittc2dpZCAidW5hYmxlIHRvIHNldCB1cCB3b3JrIHRyZWUgdXNpbmcgaW52YWxpZCBjb25maWciCittc2dzdHIgIiIKKyJubyBlcyBwb3NpYmxlIGNvbmZpZ3VyYXIgZWwgZGlyZWN0b3JpbyBkZSB0cmFiYWpvIHVzYW5kbyB1bmEgY29uZmlndXJhY2nDs24gIgorImludsOhbGlkYSIKKworIzogc2V0dXAuYzo0MTMKK21zZ2lkICJ0aGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIKK21zZ3N0ciAiZXN0YSBvcGVyYWNpw7NuIGRlYmUgc2VyIHJlYWxpemFkYSBlbiB1biDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogc2V0dXAuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgZ2l0IHJlcG8gdmVyc2lvbiA8PSAlZCwgZm91bmQgJWQiCittc2dzdHIgIlNlIGVzcGVyYWJhIHZlcnNpw7NuIGRlIGdpdCByZXBvICA8PSAlZCwgZW5jb250cmFkYSAlZCIKKworIzogc2V0dXAuYzo1NjcKK21zZ2lkICJ1bmtub3duIHJlcG9zaXRvcnkgZXh0ZW5zaW9ucyBmb3VuZDoiCittc2dzdHIgInNlIGVuY29udHLDsyBleHRlbnNpw7NuIGRlIHJlcG9zaXRvcmlvIGRlc2Nvbm9jaWRhOiIKKworIzogc2V0dXAuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyAnJXMnIgorbXNnc3RyICJlcnJvciBhYnJpZW5kbyAnJXMnIgorCisjOiBzZXR1cC5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbGFyZ2UgdG8gYmUgYSAuZ2l0IGZpbGU6ICclcyciCittc2dzdHIgIm11eSBncmFuZGUgcGFyYSBzZXIgdW4gYXJjaGl2byAuZ2l0OiAnJXMnIgorCisjOiBzZXR1cC5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nICVzIgorbXNnc3RyICJlcnJvciBsZXllbmRvICVzIgorCisjOiBzZXR1cC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGdpdGZpbGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAiZm9ybWF0byBnaXRmaWxlIGludsOhbGlkbzogJXMiCisKKyM6IHNldHVwLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHBhdGggaW4gZ2l0ZmlsZTogJXMiCittc2dzdHIgIm5vIGhheSBydXRhIGVuIGdpdGZpbGU6ICVzIgorCisjOiBzZXR1cC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIm5vIGVzIHVuIHJlcG9zaXRvcmlvIGdpdDogJXMiCisKKyM6IHNldHVwLmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgIickJXMnIHRvbyBiaWciCittc2dzdHIgIickJXMnIG11eSBncmFuZGUiCisKKyM6IHNldHVwLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAnJXMnIgorbXNnc3RyICJubyBlcyB1biByZXBvc2l0b3JpbyBnaXQ6ICclcyciCisKKyM6IHNldHVwLmM6NzM4IHNldHVwLmM6NzQwIHNldHVwLmM6NzcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBhcGxpY2FyIGNoZGlyIGEgJyVzJyIKKworIzogc2V0dXAuYzo3NDMgc2V0dXAuYzo3OTkgc2V0dXAuYzo4MDkgc2V0dXAuYzo4NDggc2V0dXAuYzo4NTYKK21zZ2lkICJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgdm9sdmVyIGEgY3dkIgorCisjOiBzZXR1cC5jOjg3MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJSpzJXMlcyciCittc2dzdHIgImZhbGzDsyBhbCBkZXRlcm1pbmFyICclKnMlcyVzJyIKKworIzogc2V0dXAuYzoxMTA4Cittc2dpZCAiVW5hYmxlIHRvIHJlYWQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiSW5jYXBheiBkZSBsZWVyIGVsIGRpcmVjdG9yaW8gZGUgdHJhYmFqbyBhY3R1YWwiCisKKyM6IHNldHVwLmM6MTExNyBzZXR1cC5jOjExMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoYW5nZSB0byAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBjYW1iaWFyIGEgJyVzJyIKKworIzogc2V0dXAuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIgorbXNnc3RyICIiCisibm8gZXMgdW4gcmVwb3NpdG9yaW8gZ2l0IChuaSBuaW5ndW5vIGRlIGxvcyBkaXJlY3RvcmlvcyBzdXBlcmlvcmVzKTogJXMiCisKKyM6IHNldHVwLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisiU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS4iCittc2dzdHIgIiIKKyJubyBlcyB1biByZXBvc2l0b3JpbyBnaXQgKCBvIG5pbmfDum4gcGFkcmUgZW4gZWwgcHVudG8gZGUgbW9udGFkbyAlcylcbiIKKyJQYXJhbmRvIGVuIGVsIGzDrW1pdGUgZGVsIHNpc3RlbWEgZGUgYXJjaGl2b3MgIgorIihHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNIG5vIGVzdGFibGVjaWRvKS4iCisKKyM6IHNldHVwLmM6MTI0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicHJvYmxlbSB3aXRoIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBmaWxlbW9kZSB2YWx1ZSAoMCUuM28pLlxuIgorIlRoZSBvd25lciBvZiBmaWxlcyBtdXN0IGFsd2F5cyBoYXZlIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorInByb2JsZW1hIGNvbiBlbCB2YWxvciBkZWwgbW9kbyBkZSBhcmNoaXZvIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSAoMCUuM28pLlxuIgorIkVsIGR1ZcOxbyBkZSBsb3MgYXJjaGl2b3MgdGllbmUgcXVlIHRlbmVyIHBlcm1pc29zIGRlIGxlY3R1cmEgeSBlc2NyaXR1cmEuIgorCisjOiBzZXR1cC5jOjEyODkKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBvciBkdXAgZmFpbGVkIgorbXNnc3RyICJmYWxsw7MgYWwgYWJyaXIgL2Rldi9udWxsIG8gZHVwIgorCisjOiBzZXR1cC5jOjEzMDQKK21zZ2lkICJmb3JrIGZhaWxlZCIKK21zZ3N0ciAiZmFsbMOzIGZvcmsiCisKKyM6IHNldHVwLmM6MTMwOQorbXNnaWQgInNldHNpZCBmYWlsZWQiCittc2dzdHIgImZhbGzDsyBzZXRzaWQiCisKKyM6IHNoYTEtZmlsZS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0OyBjaGVjayAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorbXNnc3RyICJvYmpldG8gZGlyZWN0b3JpbyAlcyBubyBleGlzdGU7IHJldmlzYSAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorCisjOiBzaGExLWZpbGUuYzo1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG5vcm1hbGl6ZSBhbHRlcm5hdGUgb2JqZWN0IHBhdGg6ICVzIgorbXNnc3RyICJpbmNhcGF6IGRlIG5vcm1hbGl6YXIgbGEgcnV0YSBkZSBvYmpldG8gYWx0ZXJubzogJXMiCisKKyM6IHNoYTEtZmlsZS5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWdub3JpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIiVzOiBpZ25vcmFuZG8gZXNwYWNpb3MgZGUgb2JqZXRvcyBhbHRlcm5vcywgYW5pZGFkbyBtdXkgcHJvZnVuZG8iCisKKyM6IHNoYTEtZmlsZS5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIG9iamVjdCBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJpbmNhcGF6IGRlIG5vcm1hbGl6YXIgZGlyZWN0b3JpbyBkZSBvYmpldG86ICVzIgorCisjOiBzaGExLWZpbGUuYzo2MjUKK21zZ2lkICJ1bmFibGUgdG8gZmRvcGVuIGFsdGVybmF0ZXMgbG9ja2ZpbGUiCittc2dzdHIgIm5vIGVzIHBvc2libGUgaGFjZXIgZmRvcGVuIGVuIGxvY2tmaWxlIGFsdGVybm9zIgorCisjOiBzaGExLWZpbGUuYzo2NDMKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgIm5vIGVzIHBvc2libGUgbGVlciBhcmNoaXZvcyBhbHRlcm5vcyIKKworIzogc2hhMS1maWxlLmM6NjUwCittc2dpZCAidW5hYmxlIHRvIG1vdmUgbmV3IGFsdGVybmF0ZXMgZmlsZSBpbnRvIHBsYWNlIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIG1vdmVyIGFyY2hpdm9zIGFsdGVybm9zIGVuIGVsIGx1Z2FyIgorCisjOiBzaGExLWZpbGUuYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJydXRhICclcycgbm8gZXhpc3RlIgorCisjOiBzaGExLWZpbGUuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBhcyBhIGxpbmtlZCBjaGVja291dCBpcyBub3Qgc3VwcG9ydGVkIHlldC4iCittc2dzdHIgIiIKKyJyZXBvc2l0b3JpbyBkZSByZWZlcmVuY2lhICclcycgY29tbyB1biBjaGVja291dCB2aW5jdWxhZG8gbm8gZXMgc29wb3J0YWRvICIKKyJ0b2RhdsOtYS4iCisKKyM6IHNoYTEtZmlsZS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJyZXBvc2l0b3JpbyBkZSByZWZlcmVuY2lhICclcycgbm8gZXMgdW4gcmVwb3NpdG9yaW8gbG9jYWwuIgorCisjOiBzaGExLWZpbGUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBzaGFsbG93IgorbXNnc3RyICJyZXBvc2l0b3JpbyBkZSByZWZlcmVuY2lhICclcycgZXMgc3VwZXJmaWNpYWwgKHNoYWxsb3cpIgorCisjOiBzaGExLWZpbGUuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICJyZXBvc2l0b3JpbyBkZSByZWZlcmVuY2lhICclIHMnIGVzdMOhIGluamVydGFkbyIKKworIzogc2hhMS1maWxlLmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSB3aGlsZSBwYXJzaW5nIGFsdGVybmF0ZSByZWZzOiAlcyIKK21zZ3N0ciAibMOtbmVhIGludsOhbGlkYSBtaWVudHJhcyBzZSBhbmFsaXphYmFuIHJlZnMgYWx0ZXJuYXM6ICVzIgorCisjOiBzaGExLWZpbGUuYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXR0ZW1wdGluZyB0byBtbWFwICU8UFJJdU1BWD4gb3ZlciBsaW1pdCAlPFBSSXVNQVg+IgorbXNnc3RyICJpbnRlbnRhbmRvIHVzYXIgbW1hcCAlPFBSSXVNQVg+IHNvYnJlIGzDrW1pdGUgJTxQUkl1TUFYPiIKKworIzogc2hhMS1maWxlLmM6OTY0Cittc2dpZCAibW1hcCBmYWlsZWQiCittc2dzdHIgIm1tYXAgZmFsbMOzIgorCisjOiBzaGExLWZpbGUuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBmaWxlICVzIGlzIGVtcHR5IgorbXNnc3RyICJhcmNoaXZvIGRlIG9iamV0byAlcyBlc3TDoSB2YWPDrW8iCisKKyM6IHNoYTEtZmlsZS5jOjEyNjMgc2hhMS1maWxlLmM6MjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICJvYmpldG8gcGVyZGlkbyBjb3JydXB0byAnJXMnIgorCisjOiBzaGExLWZpbGUuYzoxMjY1IHNoYTEtZmlsZS5jOjI0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2FyYmFnZSBhdCBlbmQgb2YgbG9vc2Ugb2JqZWN0ICclcyciCittc2dzdHIgImJhc3VyYSBhbCBmaW5hbCBkZWwgb2JqZXRvIHBlcmRpZG8gJyVzJyIKKworIzogc2hhMS1maWxlLmM6MTMwNworbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUiCittc2dzdHIgInRpcG8gZGUgb2JqZXRvIGludsOhbGlkbyIKKworIzogc2hhMS1maWxlLmM6MTM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGRlc2VtcGFjYXIgaGVhZGVyICVzIGNvbiAtLWFsbG93LXVua25vd24tdHlwZSIKKworIzogc2hhMS1maWxlLmM6MTM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciIKK21zZ3N0ciAiaW5jYXBheiBkZSBkZXNlbXBhcXVldGFyIGhlYWRlciAlcyIKKworIzogc2hhMS1maWxlLmM6MTQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYW5hbGl6YXIgaGVhZGVyICVzIGNvbiAtLWFsbG93LXVua25vd24tdHlwZSIKKworIzogc2hhMS1maWxlLmM6MTQwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIgorbXNnc3RyICJpbmNhcGF6IGRlIGFuYWxpemFyIGhlYWRlciAlcyIKKworIzogc2hhMS1maWxlLmM6MTYyOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJXMiCittc2dzdHIgImZhbGzDsyBhbCBsZWVyIG9iamV0byAlcyIKKworIzogc2hhMS1maWxlLmM6MTYzMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlbWVudCAlcyBub3QgZm91bmQgZm9yICVzIgorbXNnc3RyICJyZWVtcGxhem8gJXMgbm8gZW5jb250cmFkbyBwYXJhICVzIgorCisjOiBzaGExLWZpbGUuYzoxNjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImxvb3NlIG9iamVjdCAlcyAoc3RvcmVkIGluICVzKSBpcyBjb3JydXB0IgorbXNnc3RyICJvYmpldG8gcGVyZGlkbyAlcyAoZ3VhcmRhZG8gZW4gJXMpIGVzdMOhIGNvcnJvbXBpZG8iCisKKyM6IHNoYTEtZmlsZS5jOjE2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2VkIG9iamVjdCAlcyAoc3RvcmVkIGluICVzKSBpcyBjb3JydXB0IgorbXNnc3RyICJwYXF1ZXRlIGRlIG9iamV0byAlcyAoZ3VhcmRhZG8gZW4gJXMpIGVzdMOhIGNvcnJvbXBpZG8iCisKKyM6IHNoYTEtZmlsZS5jOjE3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZXNjcmliaXIgYXJjaGl2byAlcyIKKworIzogc2hhMS1maWxlLmM6MTc1MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHBlcm1pc3Npb24gdG8gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBwb25lciBwZXJtaXNvcyBhICclcyciCisKKyM6IHNoYTEtZmlsZS5jOjE3NjAKK21zZ2lkICJmaWxlIHdyaXRlIGVycm9yIgorbXNnc3RyICJmYWxsw7MgZGUgZXNjcml0dXJhIgorCisjOiBzaGExLWZpbGUuYzoxNzgwCittc2dpZCAiZXJyb3Igd2hlbiBjbG9zaW5nIGxvb3NlIG9iamVjdCBmaWxlIgorbXNnc3RyICJlcnJvciBjZXJyYW5kbyBlbCBhcmNoaXZvIGRlIG9iamV0byBzdWVsdG8iCisKKyM6IHNoYTEtZmlsZS5jOjE4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zdWZmaWNpZW50IHBlcm1pc3Npb24gZm9yIGFkZGluZyBhbiBvYmplY3QgdG8gcmVwb3NpdG9yeSBkYXRhYmFzZSAlcyIKK21zZ3N0ciAiIgorInBlcm1pc29zIGluc3VmaWNpZW50ZXMgcGFyYSBhZ3JlZ2FyIHVuIG9iamV0byBhIGxhIGJhc2UgZGUgZGF0b3MgZGVsICIKKyJyZXBvc2l0b3JpbyAlcyIKKworIzogc2hhMS1maWxlLmM6MTg0NworbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIm5vIGVzIHBvc2libGUgY3JlYXIgdW4gYXJjaGl2byB0ZW1wb3JhbCIKKworIzogc2hhMS1maWxlLmM6MTg3MQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBlc2NyaWJpciBlbCBhcmNoaXZvIGRlIG9iamV0byBzdWVsdG8iCisKKyM6IHNoYTEtZmlsZS5jOjE4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgbmV3IG9iamVjdCAlcyAoJWQpIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGRlc2luZmxhciBlbCBvYmpldG8gbnVldm8gJXMgKCVkKSIKKworIzogc2hhMS1maWxlLmM6MTg4MQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlRW5kIG9uIG9iamVjdCAlcyBmYWlsZWQgKCVkKSIKK21zZ3N0ciAiZGVmbGF0ZUVuZCBlbiBvYmpldG8gJXMgZmFsbMOzICglZCkiCisKKyM6IHNoYTEtZmlsZS5jOjE4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZnVzZWQgYnkgdW5zdGFibGUgb2JqZWN0IHNvdXJjZSBkYXRhIGZvciAlcyIKK21zZ3N0ciAiY29uZnVuZGlkbyBwb3IgZnVlbnRlIGRlIGRhdGEgZGUgb2JqZXRvcyBpbmVzdGFibGUgcGFyYSAlcyIKKworIzogc2hhMS1maWxlLmM6MTg5NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJXMiCittc2dzdHIgImZhbGzDsyB1dGltZSgpIGVuICVzIgorCisjOiBzaGExLWZpbGUuYzoxOTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciBlbCBvYmpldG8gcGFyYSAlcyIKKworIzogc2hhMS1maWxlLmM6MjAxMQorbXNnaWQgImNvcnJ1cHQgY29tbWl0IgorbXNnc3RyICJjb21taXQgY29ycnVwdG8iCisKKyM6IHNoYTEtZmlsZS5jOjIwMTkKK21zZ2lkICJjb3JydXB0IHRhZyIKK21zZ3N0ciAidGFnIGNvcnJ1cHRvIgorCisjOiBzaGExLWZpbGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZXJyb3Igd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgImVycm9yIGxleWVuZG8gYWwgaW5kZXhhciAlcyIKKworIzogc2hhMS1maWxlLmM6MjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCByZWFkIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICJsZWN0dXJhIGNvcnRhIGFsIGluZGV4YXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjIxOTUgc2hhMS1maWxlLmM6MjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFpbGVkIHRvIGluc2VydCBpbnRvIGRhdGFiYXNlIgorbXNnc3RyICIlczogZmFsbMOzIGFsIGluc2VydGFyIGVuIGxhIGJhc2UgZGUgZGF0b3MiCisKKyM6IHNoYTEtZmlsZS5jOjIyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIKK21zZ3N0ciAiJXM6IHRpcG8gZGUgYXJjaGl2byBubyBzb3BvcnRhZG8iCisKKyM6IHNoYTEtZmlsZS5jOjIyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgb2JqZWN0IgorbXNnc3RyICIlcyBubyBlcyBvYmpldG8gdsOhbGlkbyIKKworIzogc2hhMS1maWxlLmM6MjIzNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiJXMgbm8gZXMgdW4gb2JqZXRvICclcycgdsOhbGlkbyIKKworIzogc2hhMS1maWxlLmM6MjI2NCBidWlsdGluL2luZGV4LXBhY2suYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYWJyaXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0NTQgc2hhMS1maWxlLmM6MjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIG1pc21hdGNoIGZvciAlcyAoZXhwZWN0ZWQgJXMpIgorbXNnc3RyICJoYXNoIG5vIGNvbmN1ZXJkYSBwYXJhICVzIChzZSBlc3BlcmFiYSAlcykiCisKKyM6IHNoYTEtZmlsZS5jOjI0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1tYXAgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgaGFjZXIgbW1hcCBhICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDgzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgaGVhZGVyIG9mICVzIgorbXNnc3RyICJpbmNhcGF6IGRlIGRlc2VtcGFxdWV0YXIgaGVhZGVyIGRlICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBoZWFkZXIgb2YgJXMiCittc2dzdHIgImluY2FwYXogZGUgYW5hbGl6YXIgaGVhZGVyIGRlICVzIgorCisjOiBzaGExLWZpbGUuYzoyNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgY29udGVudHMgb2YgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZGVzZW1wYXF1ZXRhciBjb250ZW5pZG9zIGRlICVzIgorCisjOiBzaGExLW5hbWUuYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgU0hBMSAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIlNIQTEgJXMgY29ydG8gZXMgYW1iaWd1byIKKworIzogc2hhMS1uYW1lLmM6NDk3Cittc2dpZCAiVGhlIGNhbmRpZGF0ZXMgYXJlOiIKK21zZ3N0ciAiTG9zIGNhbmRpZGF0b3Mgc29uOiIKKworIzogc2hhMS1uYW1lLmM6Nzk2Cittc2dpZCAiIgorIkdpdCBub3JtYWxseSBuZXZlciBjcmVhdGVzIGEgcmVmIHRoYXQgZW5kcyB3aXRoIDQwIGhleCBjaGFyYWN0ZXJzXG4iCisiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorIm1heSBiZSBjcmVhdGVkIGJ5IG1pc3Rha2UuIEZvciBleGFtcGxlLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorIkdpdCBub3JtYWxtZW50ZSBudW5jYSBjcmVhIHVuYSByZWYgcXVlIHRlcm1pbmUgY29uIDQwIGNhcmFjdGVyZXMgaGV4XG4iCisicG9ycXVlIGVzdG8gc2Vyw61hIGlnbm9yYWRvIGN1YW5kbyBzb2xvIHNlIGVzcGVjaWZpcXVlbiA0MC1oZXguIEVzdGFzIHJlZnNcbiIKKyJ0YWwgdmV6IHNlYW4gY3JlYWRhcyBwb3IgZXJyb3IuIFBvciBlamVtcGxvLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJkb25kZSBcIiRiclwiIGVzdMOhIGRlIGFsZ3VuYSBtYW5lcmEgdmFjw61hIHkgdW5hIHJlZiBkZSA0MC1oZXggZXMgY3JlYWRhLiBQb3IgIgorImZhdm9yXG4iCisiZXhhbWluYSBlc3RhcyByZWZzIHkgdGFsIHZleiBiw7NycmFsYXMuIFNpbGVuY2lhIGVzdGUgbWVuc2FqZSBcbiIKKyJlamVjdXRhbmRvIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKKworIzogc2hhMS1uYW1lLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgJyUuKnMnIG9ubHkgZ29lcyBiYWNrIHRvICVzIgorbXNnc3RyICJsb2cgcGFyYSAnJS4qcycgc29sbyB2YSBoYXN0YSAlcyIKKworIzogc2hhMS1uYW1lLmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgJyUuKnMnIG9ubHkgaGFzICVkIGVudHJpZXMiCittc2dzdHIgImxvZyBwYXJhICclLipzJyBzb2xvIHRpZW5lICVkIGVudHJhZGFzIgorCisjOiBzaGExLW5hbWUuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBleGlzdHMgb24gZGlzaywgYnV0IG5vdCBpbiAnJS4qcyciCittc2dzdHIgImxhIHJ1dGEgJyVzJyBleGlzdGUgZW4gZGlzY28sIHBlcm8gbm8gZW4gJyUuKnMnIgorCisjOiBzaGExLW5hbWUuYzoxNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXRoICclcycgZXhpc3RzLCBidXQgbm90ICclcydcbiIKKyJoaW50OiBEaWQgeW91IG1lYW4gJyUuKnM6JXMnIGFrYSAnJS4qczouLyVzJz8iCittc2dzdHIgIiIKKyJydXRhICclcycgZXhpc3RlLCBwZXJvIG5vICclcydcbiIKKyJheXVkYTogwr9RdWlzaXN0ZSBkZWNpciAnJS4qczolcycgbyAnJS4qczouLyVzJz8iCisKKyM6IHNoYTEtbmFtZS5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IGluICclLipzJyIKK21zZ3N0ciAicnV0YSAnJXMnIG5vIGV4aXN0ZSBlbiAnJS4qcyciCisKKyM6IHNoYTEtbmFtZS5jOjE3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInBhdGggJyVzJyBpcyBpbiB0aGUgaW5kZXgsIGJ1dCBub3QgYXQgc3RhZ2UgJWRcbiIKKyJoaW50OiBEaWQgeW91IG1lYW4gJzolZDolcyc/IgorbXNnc3RyICIiCisicnV0YSAnJXMnIGVzdMOhIGVuIGVsIGluZGV4LCBwZXJvIG5vIGVuIHN0YWdlICVkXG4iCisiYXl1ZGE6wr9RdWlzaXN0ZSBkZWNpcjogJyVkOiVzJz8iCisKKyM6IHNoYTEtbmFtZS5jOjE3NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInBhdGggJyVzJyBpcyBpbiB0aGUgaW5kZXgsIGJ1dCBub3QgJyVzJ1xuIgorImhpbnQ6IERpZCB5b3UgbWVhbiAnOiVkOiVzJyBha2EgJzolZDouLyVzJz8iCittc2dzdHIgIiIKKyJydXRhICclcycgZXN0w6EgZW4gZWwgaW5kZXgsIHBlcm8gbm8gJyVzJ1xuIgorImF5dWRhOsK/UXVpc2lzdGUgZGVjaXIgJzolZDolcycgbyAnOiVkOi4vJXMnPyIKKworIzogc2hhMS1uYW1lLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gdGhlIGluZGV4IgorbXNnc3RyICJydXRhICclcycgZXhpc3RlIGVuIGVsIGRpc2NvLCBwZXJvIG5vIGVuIGVsIGluZGV4IgorCisjOiBzaGExLW5hbWUuYzoxNzU4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCAobmVpdGhlciBvbiBkaXNrIG5vciBpbiB0aGUgaW5kZXgpIgorbXNnc3RyICJydXRhICclcycgbm8gZXhpc3RlIChuaSBlbiBkaXNjbyBuaSBlbiBlbCBpbmRleCkiCisKKyM6IHNoYTEtbmFtZS5jOjE3NzEKK21zZ2lkICJyZWxhdGl2ZSBwYXRoIHN5bnRheCBjYW4ndCBiZSB1c2VkIG91dHNpZGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisibGEgc2ludGF4aXMgZGUgcnV0YSByZWxhdGl2YSBubyBzZSBwdWVkZSB1c2FyIGZ1ZXJhIGRlbCBkaXJlY3RvcmlvIGRlIHRyYWJham8iCisKKyM6IHNoYTEtbmFtZS5jOjE5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgbmFtZSAnJS4qcycuIgorbXNnc3RyICJub21icmUgZGUgb2JqZXRvIG5vIHbDoWxpZG86ICclLipzJy4iCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZQorIzogc3RyYnVmLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEdpQiIKK21zZ3N0ciAiJXUuJTIuMnUgR2lCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCL3MiCittc2dzdHIgIiV1LiUyLjJ1IEdpQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUKKyM6IHN0cmJ1Zi5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIiCittc2dzdHIgIiV1LiUyLjJ1IE1pQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQi9zIgorbXNnc3RyICIldS4lMi4ydSBNaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlCisjOiBzdHJidWYuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCIgorbXNnc3RyICIldS4lMi4ydSBLaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBLaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgS2lCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlCisjOiBzdHJidWYuYzo4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiJXUgYnl0ZXMiCittc2dzdHJbMF0gIiV1IGJ5dGUiCittc2dzdHJbMV0gIiV1IGJ5dGVzIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg2NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlL3MiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzL3MiCittc2dzdHJbMF0gIiV1IGJ5dGVzL3MiCittc2dzdHJbMV0gIiV1IGJ5dGVzL3MiCisKKyM6IHN0cmJ1Zi5jOjExNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGVkaXQgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBlZGl0YXIgJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTE0IHN1Ym1vZHVsZS5jOjE0MworbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdW5tZXJnZWQgLmdpdG1vZHVsZXMsIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIGZpcnN0IgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgY2FtYmlhciAuZ2l0bW9kdWxlcyBubyBmdXNpb25hZG9zLCByZXN1ZWx2YSBlc3RlIHByb2JsZW1hIHByaW1lcm8iCisKKyM6IHN1Ym1vZHVsZS5jOjExOCBzdWJtb2R1bGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIgorbXNnc3RyICJObyBzZSBwdWRvIGVuY29udHJhciBsYSBzZWNjacOzbiBlbiAuZ2l0bW9kdWxlcyBkb25kZSBwYXRoPSVzIgorCisjOiBzdWJtb2R1bGUuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSAuZ2l0bW9kdWxlcyBlbnRyeSBmb3IgJXMiCittc2dzdHIgIk5vIHNlIHB1ZG8gZWxpbWluYXIgbGEgZW50cmFkYSAlcyBkZSAuZ2l0bW9kdWxlcyIKKworIzogc3VibW9kdWxlLmM6MTY1Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAiZmFsbMOzIHJlYWxpemFyIHN0YWdlIGEgbG9zIC5naXRtb2R1bGVzIGFjdHVhbGl6YWRvcyIKKworIzogc3VibW9kdWxlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJlbiBlbCBzdWJtw7NkdWxvIG5vIHBvYmxhZG8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAiRWwgcGF0csOzbiBkZSBydXRhICclcycgZXN0w6EgZW4gZWwgc3VibcOzZHVsbyAnJS4qcyciCisKKyM6IHN1Ym1vZHVsZS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS1pZ25vcmUtc3VibW9kdWxlcyBhcmd1bWVudDogJXMiCittc2dzdHIgIm1hbCBhcmd1bWVudG8gLS1pZ25vcmUtc3VibW9kdWxlczogJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIGluIGNvbW1pdCAlcyBhdCBwYXRoOiAnJXMnIGNvbGxpZGVzIHdpdGggYSBzdWJtb2R1bGUgbmFtZWQgdGhlICIKKyJzYW1lLiBTa2lwcGluZyBpdC4iCittc2dzdHIgIiIKKyJTdWJtw7NkdWxvIGVuIGVsIGNvbW1pdCAlcyBlbiBydXRhOiAnJXMnIGNvbGlzaW9uYSBjb24gdW4gc3VibcOzZHVsbyBsbGFtYWRvICIKKyJpZ3VhbC4gU2FsdGFuZG9sby4iCisKKyM6IHN1Ym1vZHVsZS5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZW50cnkgJyVzJyAoJXMpIGlzIGEgJXMsIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiZW50cmFkYSBkZSBzdWJtw7NkdWxvICclcycgKCVzKSBlcyB1biAlcywgbm8gdW4gY29tbWl0IgorCisjOiBzdWJtb2R1bGUuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCA8Y29tbWl0cz4gLS1ub3QgLS1yZW1vdGVzIC1uIDEnIGNvbW1hbmQgaW4gIgorInN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZG8gZWplY3V0YXIgY29tYW5kbyAnZ2l0IHJldi1saXN0IDxjb21taXRzPiAtLW5vdCAtLXJlbW90ZXMgLW4gMScgZW4gIgorImVsIHN1Ym3Ds2R1bG8gJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvY2VzcyBmb3Igc3VibW9kdWxlICclcycgZmFpbGVkIgorbXNnc3RyICJwcm9jZXNvIHBhcmEgc3VibcOzZHVsbyAnJXMnIGZhbGzDsyIKKworIzogc3VibW9kdWxlLmM6MTE0NyBidWlsdGluL2JyYW5jaC5jOjY4MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjA0NQorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJGYWxsw7MgYWwgcmVzb2x2ZXIgSEVBRCBjb21vIHVuIHJlZiB2w6FsaWRvLiIKKworIzogc3VibW9kdWxlLmM6MTE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIkVtcHVqYW5kbyBzdWJtw7NkdWxvICclcydcbiIKKworIzogc3VibW9kdWxlLmM6MTE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcHVzaCBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICJObyBlcyBwb3NpYmxlIGhhY2VyIHB1c2ggYWwgc3VibcOzZHVsbyAnJXMnXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjE0NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgc3VibW9kdWxlICVzJXNcbiIKK21zZ3N0ciAiSGFjaWVuZG8gZmV0Y2ggYWwgc3VibcOzZHVsbyAlcyVzXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjE0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFjY2VzcyBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICJObyBwdWRvIGFjY2VkZXIgYWwgc3VibcOzZHVsbyAnJXMnXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjE2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9ycyBkdXJpbmcgc3VibW9kdWxlIGZldGNoOlxuIgorIiVzIgorbXNnc3RyICIiCisiRXJyb3JlcyBkdXJhbnRlIGVsIGZldGNoIGRlbCBzdWJtw7NkdWxvOlxuIgorIiVzIgorCisjOiBzdWJtb2R1bGUuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbm90IHJlY29nbml6ZWQgYXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJyVzJyBubyByZWNvbm9jaWRvIGNvbW8gdW4gcmVwb3NpdG9yaW8gZ2l0IgorCisjOiBzdWJtb2R1bGUuYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49MicgaW4gc3VibW9kdWxlICVzIgorbXNnc3RyICJObyBzZSBwdWRvIGVqZWN1dGFyICdnaXQgc3RhdHVzIC0tcHJvY2VsYWluPTInIGVuIGVsIHN1Ym3Ds2R1bG8gJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49MicgZmFpbGVkIGluIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiJ2dpdCBzdGF0dXMgLS1wcm9jZWxhaW49MicgZmFsbMOzIGVuIGVsIHN1Ym3Ds2R1bG8gJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjE4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXJ0ICdnaXQgc3RhdHVzJyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjb21lbnphciAnZ2l0IHN0YXR1cycgZW4gZWwgc3VibcOzZHVsbyAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGVqZWN1dGFyICdnaXQgc3RhdHVzJyBlbiBlbCBzdWJtw7NkdWxvICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjE4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVuc2V0IGNvcmUud29ya3RyZWUgc2V0dGluZyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiTm8gc2UgcHVkbyBxdWl0YXIgY29uZmlndXJhY2nDs24gY29yZS53b3JrdHJlZSBlbiBzdWJtw7NkdWxvICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjE4NTUgc3VibW9kdWxlLmM6MjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJubyBwdWRvIHJlY3Vyc2FyIGVuIGVsIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTg3NgorbXNnaWQgImNvdWxkIG5vdCByZXNldCBzdWJtb2R1bGUgaW5kZXgiCittc2dzdHIgIm5vIHNlIHB1ZG8gcmVpbmljaWFyIGVsIGluZGV4IGRlbCBzdWJtw7NkdWxvIgorCisjOiBzdWJtb2R1bGUuYzoxOTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGhhcyBkaXJ0eSBpbmRleCIKK21zZ3N0ciAic3VibcOzZHVsbyAnJXMnIHRpZW5lIHVuIMOtbmRpY2UgY29ycnVwdG8iCisKKyM6IHN1Ym1vZHVsZS5jOjE5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgY291bGQgbm90IGJlIHVwZGF0ZWQuIgorbXNnc3RyICJTdWJtw7NkdWxvICclcycgbm8gcHVkbyBzZXIgYWN0dWFsaXphZG8uIgorCisjOiBzdWJtb2R1bGUuYzoyMDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSBnaXQgZGlyICclcycgaXMgaW5zaWRlIGdpdCBkaXIgJyUuKnMnIgorbXNnc3RyICJzdWJtw7NkdWxvIGdpdCBkaXIgJyVzJyBlc3RhIGRlbnRybyBkZSBnaXQgZGlyICclLipzJyIKKworIzogc3VibW9kdWxlLmM6MjA1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicmVsb2NhdGVfZ2l0ZGlyIGZvciBzdWJtb2R1bGUgJyVzJyB3aXRoIG1vcmUgdGhhbiBvbmUgd29ya3RyZWUgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorInJlbG9jYXRlX2dpdGRpciBwYXJhIGVsIHN1Ym3Ds2R1bG8gJyVzJyBjb24gbcOhcyBkZSB1biDDoXJib2wgZGUgdHJhYmFqbyBubyAiCisic29wb3J0YWRvIgorCisjOiBzdWJtb2R1bGUuYzoyMDcxIHN1Ym1vZHVsZS5jOjIxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBuYW1lIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyByZXNvbHZlciBlbCBub21icmUgcGFyYSBlbCBzdWJtw7NkdWxvICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjIwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbW92ZSAnJXMnIGludG8gYW4gZXhpc3RpbmcgZ2l0IGRpciIKK21zZ3N0ciAicmVjaGF6YW5kbyBtb3ZlciAnJXMnIGRlbnRybyBkZSB1biBkaXJlY3RvcmlvIGdpdCBleGlzdGVudGUiCisKKyM6IHN1Ym1vZHVsZS5jOjIwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1pZ3JhdGluZyBnaXQgZGlyZWN0b3J5IG9mICclcyVzJyBmcm9tXG4iCisiJyVzJyB0b1xuIgorIiclcydcbiIKK21zZ3N0ciAiIgorIk1pZ3JhbmRvIGRpcmVjdG9yaW8gZ2l0IGRlICclcyVzJyBkZXNkZVxuIgorIiclcycgaGFjaWFcbiIKKyInJXMnXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjIyMDkKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgbHMtZmlsZXMgaW4gLi4iCittc2dzdHIgIm5vIHNlIHB1ZG8gY29tZW56YXIgbHMtZmlsZXMgZW4gLi4iCisKKyM6IHN1Ym1vZHVsZS5jOjIyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibHMtdHJlZSByZXR1cm5lZCB1bmV4cGVjdGVkIHJldHVybiBjb2RlICVkIgorbXNnc3RyICJscy10cmVlIGRldm9sdmnDsyB1biBjw7NkaWdvICVkIGluZXNwZXJhZG8iCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgc3VzcGljaW91cyBzdWJtb2R1bGUgbmFtZTogJXMiCittc2dzdHIgImlnbm9yYW5kbyBzdWJtw7NkdWxvIHNvc3BlY2hvc286ICVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MzAzCittc2dpZCAibmVnYXRpdmUgdmFsdWVzIG5vdCBhbGxvd2VkIGZvciBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorbXNnc3RyICJubyBzZSBwZXJtaXRlbiB2YWxvcmVzIG5lZ2F0aXZvcyBwYXJhIHN1Ym1vZHVsZS5mZXRjaGpvYnMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJyVzJyB3aGljaCBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorImlnbm9yYW5kbyAnJXMnIHlhIHF1ZSBwdWVkZSBzZXIgaW50ZXJwcmV0YWRvIGNvbW8gdW5hIG9wY2nDs24gZGUgbMOtbmVhIGRlICIKKyJjb21hbmRvOiAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAidmFsb3IgaW52w6FsaWRvIHBhcmEgJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSAuZ2l0bW9kdWxlcyBlbnRyeSAlcyIKK21zZ3N0ciAiTm8gc2UgcHVkbyBhY3R1YWxpemFyIGxhIGVudHJhZGEgJXMgZGUgLmdpdG1vZHVsZXMiCisKKyM6IHRyYWlsZXIuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiCittc2dzdHIgImVqZWN1Y2nDs24gZGVsIGNvbWFuZG8gZGUgcmVtb2xxdWUgJyVzJyBmYWxsw7MiCisKKyM6IHRyYWlsZXIuYzo0ODUgdHJhaWxlci5jOjQ5MCB0cmFpbGVyLmM6NDk1IHRyYWlsZXIuYzo1NDkgdHJhaWxlci5jOjU1MworIzogdHJhaWxlci5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICJ2YWxvciAnJXMnIGRlc2Nvbm9jaWRvIHBhcmEgbGEgY2xhdmUgJyVzJyIKKworIzogdHJhaWxlci5jOjUzOSB0cmFpbGVyLmM6NTQ0IGJ1aWx0aW4vcmVtb3RlLmM6Mjk4IGJ1aWx0aW4vcmVtb3RlLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgIm3DoXMgZGUgdW4gJXMiCisKKyM6IHRyYWlsZXIuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgdHJhaWxlciB0b2tlbiBpbiB0cmFpbGVyICclLipzJyIKK21zZ3N0ciAidG9rZW4gZGUgcmVtb2xxdWUgdmFjw61vIGVuIGVsIHRyYWlsZXIgJyUuKnMnIgorCisjOiB0cmFpbGVyLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIGVsIGFyY2hpdm8gZGUgZW50cmFkYSAnJXMnIgorCisjOiB0cmFpbGVyLmM6NzUzCittc2dpZCAiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIGRlc2RlIHN0ZGluIgorCisjOiB0cmFpbGVyLmM6MTAxMSB3cmFwcGVyLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGRlZmluaXIgJXMiCisKKyM6IHRyYWlsZXIuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IGEgcmVndWxhciBmaWxlIgorbXNnc3RyICJlbCBhcmNoaXZvICVzIG5vIGVzIHVuIGFyY2hpdm8gcmVndWxhciIKKworIzogdHJhaWxlci5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3Qgd3JpdGFibGUgYnkgdXNlciIKK21zZ3N0ciAiZWwgYXJjaGl2byAlcyBubyBwdWVkZSBzZXIgZXNjcml0byBwb3IgZWwgdXN1YXJpbyIKKworIzogdHJhaWxlci5jOjEwMjcKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAibm8gc2UgcHVkbyBhYnJpciBlbCBhcmNoaXZvIHRlbXBvcmFsIgorCisjOiB0cmFpbGVyLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIgorbXNnc3RyICJubyBzZSBwdWRvIHJlbm9tYnJhciBlbCBhcmNoaXZvIHRlbXBvcmFsIGEgJXMiCisKKyM6IHRyYW5zcG9ydC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBzZXQgdXBzdHJlYW0gb2YgJyVzJyB0byAnJXMnIG9mICclcydcbiIKK21zZ3N0ciAiQ29uZmlndXJhcsOhIHVwc3RyZWFtIGRlICclcycgYSAnJXMnIGRlICclcydcbiIKKworIzogdHJhbnNwb3J0LmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGJ1bmRsZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgZWwgY29uanVudG8gJyVzJyIKKworIzogdHJhbnNwb3J0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIKK21zZ3N0ciAidHJhbnNwb3J0OiBvcGNpw7NuIGludsOhbGlkYSAnJXMnIgorCisjOiB0cmFuc3BvcnQuYzoyNjYKK21zZ2lkICJzZWUgcHJvdG9jb2wudmVyc2lvbiBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBkZXRhaWxzIgorbXNnc3RyICJ2ZXIgcHJvdG9jb2wudmVyc2lvbiBlbiAnZ2l0IGhlbHAgY29uZmlnJyBwYXJhIG3DoXMgaW5mb3JtYWNpw7NuIgorCisjOiB0cmFuc3BvcnQuYzoyNjcKK21zZ2lkICJzZXJ2ZXIgb3B0aW9ucyByZXF1aXJlIHByb3RvY29sIHZlcnNpb24gMiBvciBsYXRlciIKK21zZ3N0ciAib3BjaW9uZXMgZGVsIHNlcnZpZG9yIHJlcXVpZXJlbiBwcm90b2NvbG8gdmVyc2nDs24gMiBvIHBvc3RlcmlvciIKKworIzogdHJhbnNwb3J0LmM6NjMyCittc2dpZCAiY291bGQgbm90IHBhcnNlIHRyYW5zcG9ydC5jb2xvci4qIGNvbmZpZyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhbmFsaXphciB2YWxvciBkZSBjb25maWd1cmFjacOzbiB0cmFuc3BvcnQuY29sb3IuKiIKKworIzogdHJhbnNwb3J0LmM6NzA1Cittc2dpZCAic3VwcG9ydCBmb3IgcHJvdG9jb2wgdjIgbm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAic29wb3J0ZSBwYXJhIHByb3RvY29sbyB2MiBubyBpbXBsZW1lbnRhZG8gdG9kYXbDrWEiCisKKyM6IHRyYW5zcG9ydC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGZvciBjb25maWcgJyVzJzogJXMiCittc2dzdHIgInZhbG9yIGRlc2Nvbm9jaWRvIHBhcmEgY29uZmlndXJhY2nDs24gJyVzJzogJXMiCisKKyM6IHRyYW5zcG9ydC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAidHJhbnNwb3J0ZSAnJXMnIG5vIHBlcm1pdGlkbyIKKworIzogdHJhbnNwb3J0LmM6OTQ5Cittc2dpZCAiZ2l0LW92ZXItcnN5bmMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIKK21zZ3N0ciAiZ2l0LW92ZXItcnN5bmMgeWEgbm8gZXMgc29wb3J0YWRvIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKKyJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIKK21zZ3N0ciAiIgorIkxhIHNpZ3VpZW50ZSBydXRhIGRlIHN1Ym3Ds2R1bG8gY29udGllbmUgY2FtYmlvcyBxdWUgbm9cbiIKKyJwdWVkZW4gc2VyIGVuY29udHJhZG9zIGVuIG5pbmfDum4gcmVtb3RvOlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQbGVhc2UgdHJ5XG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJvciBjZCB0byB0aGUgcGF0aCBhbmQgdXNlXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorInRvIHB1c2ggdGhlbSB0byBhIHJlbW90ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBvciBmYXZvciBpbnRlbnRhXG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJvIGNkIGEgbGEgcnV0YSB5IHVzYVxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyJwYXJhIGhhY2VyIHVuIHB1c2ggYWwgcmVtb3RvLlxuIgorIlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDU2Cittc2dpZCAiQWJvcnRpbmcuIgorbXNnc3RyICJBYm9ydGFuZG8uIgorCisjOiB0cmFuc3BvcnQuYzoxMjAxCittc2dpZCAiZmFpbGVkIHRvIHB1c2ggYWxsIG5lZWRlZCBzdWJtb2R1bGVzIgorbXNnc3RyICJmYWxsw7MgYWwgaGFjZXIgcHVzaCBhIHRvZG9zIGxvcyBzdWJtw7NkdWxvcyBuZWNlc2FyaW9zIgorCisjOiB0cmFuc3BvcnQuYzoxMzQ1IHRyYW5zcG9ydC1oZWxwZXIuYzo2NTcKK21zZ2lkICJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAib3BlcmFjacOzbiBubyBzb3BvcnRhZGEgcG9yIHByb3RvY29sbyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxIHRyYW5zcG9ydC1oZWxwZXIuYzo5MAorbXNnaWQgImZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiCittc2dzdHIgImVzY3JpdHVyYSB0b3RhbCBhbCBoZWxwZXIgcmVtb3RvIGZhbGzDsyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCByZW1vdGUgaGVscGVyIGZvciAnJXMnIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGVuY29udHJhciBoZWxwZXIgcmVtb3RvIHBhcmEgJyVzJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE2MCB0cmFuc3BvcnQtaGVscGVyLmM6NTcxCittc2dpZCAiY2FuJ3QgZHVwIGhlbHBlciBvdXRwdXQgZmQiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGR1cGxpY2FyIG91dHB1dCBkZSBmZCBkZWwgaGVscGVyIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmtub3duIG1hbmRhdG9yeSBjYXBhYmlsaXR5ICVzOyB0aGlzIHJlbW90ZSBoZWxwZXIgcHJvYmFibHkgbmVlZHMgbmV3ZXIgIgorInZlcnNpb24gb2YgR2l0IgorbXNnc3RyICIiCisiY2FwYWNpZGFkIG1hbmRhdG9yaWEgZGVzY29ub2NpZGEgJXM7IGVzdGUgaGVscGVyIHJlbW90byBwcm9iYWJsZW1lbnRlICIKKyJuZWNlc2l0YSB1bmEgbnVldmEgdmVyc2nDs24gZGUgR2l0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjE3Cittc2dpZCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IgorbXNnc3RyICJlc3RlIGhlbHBlciByZW1vdG8gZGViZXLDrWEgaW1wbGVtZW50YXIgY2FwYWNpZGFkIHJlZnNwZWMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyODQgdHJhbnNwb3J0LWhlbHBlci5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIKK21zZ3N0ciAiJXMgZGlqbyBpbmVzcGVyYWRhbWVudGU6ICclcyciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxzbyBsb2NrZWQgJXMiCittc2dzdHIgIiVzIHRhbWJpw6luIGJsb3F1ZcOzICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDkzCittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtaW1wb3J0IgorbXNnc3RyICJubyBzZSBwdWRvIGVqZWN1dGFyIGZhc3QtaW1wb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTE2Cittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWltcG9ydCIKK21zZ3N0ciAiZXJyb3IgYWwgZWplY3V0YXIgZmFzdC1pbXBvcnQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1NDUgdHJhbnNwb3J0LWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgbGEgcmVmZXJlbmNpYSAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIgorbXNnc3RyICJyZXNwdWVzdGEgcGFyYSBjb25lY3RhciBkZXNjb25vY2lkYTogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTIKK21zZ2lkICJzZXR0aW5nIHJlbW90ZSBzZXJ2aWNlIHBhdGggbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAiY29uZmlndXJhbmRvIHNlcnZpY2lvIGRlIHJ1dGEgcmVtb3RhIG5vIHNvcG9ydGFkbyBwb3IgZWwgcHJvdG9jb2xvIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjE0Cittc2dpZCAiaW52YWxpZCByZW1vdGUgc2VydmljZSBwYXRoIgorbXNnc3RyICJydXRhIGRlIHNlcnZpY2lvIHJlbW90byBpbnbDoWxpZGEiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY29ubmVjdCB0byBzdWJzZXJ2aWNlICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBjb25lY3RhciBhbCBzdWJzZXJ2aWNpbyAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBvay9lcnJvciwgaGVscGVyIHNhaWQgJyVzJyIKK21zZ3N0ciAic2UgZXNwZXJhYmEgb2svZXJyb3IsIGhlbHBlciBkaWpvICclcyciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyIHJlcG9ydGVkIHVuZXhwZWN0ZWQgc3RhdHVzIG9mICVzIgorbXNnc3RyICJoZWxwZXIgcmVwb3J0w7MgZXN0YWRvIGluZXNwZXJhZG8gZGUgJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgZHJ5LXJ1biIKK21zZ3N0ciAiaGVscGVyICVzIG5vIHNvcG9ydGEgZHJ5LXJ1biIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCIKK21zZ3N0ciAiaGVscGVyICVzIG5vIHNvcG9ydGEgLS1zaWduZWQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQ9aWYtYXNrZWQiCittc2dzdHIgImhlbHBlciAlcyBubyBzb3BvcnRhIC0tc2lnbmVkPWlmLWFza2VkIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIgorbXNnc3RyICJoZWxwZXIgJXMgbm8gc29wb3J0YSAtLWF0b21pYyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAncHVzaC1vcHRpb24nIgorbXNnc3RyICJoZWxwZXIgJXMgbm8gc29wb3J0YSAncHVzaC1vcHRpb24nIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTY1Cittc2dpZCAicmVtb3RlLWhlbHBlciBkb2Vzbid0IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiCittc2dzdHIgInJlbW90ZS1oZWxwZXIgbm8gc29wb3J0YSBwdXNoOyBzZSBuZWNlc2l0YSByZWZzcGVjIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTcwCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdmb3JjZSciCittc2dzdHIgImhlbHBlciAlcyBubyBzb3BvcnRhICdmb3JjZSciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDE3Cittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtZXhwb3J0IgorbXNnc3RyICJubyBzZSBwdWRvIGVqZWN1dGFyIGZhc3QtZXhwb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAyMgorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1leHBvcnQiCittc2dzdHIgImVycm9yIGFsIGVqZWN1dGFyIGZhc3QtZXhwb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTA0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgorIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iCittc2dzdHIgIiIKKyJObyBoYXkgcmVmcyBjb211bmVzIHkgbmluZ3VubyBlc3BlY2lmaWNhZG87IG5vIHNlIGhhY2UgbmFkYS5cbiIKKyJUYWwgdmV6IGRlYmVyw61hcyBlc3BlY2lmaWNhciB1biBicmFuY2ggY29tbyAnbWFzdGVyJy5cbiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHJlc3BvbnNlIGluIHJlZiBsaXN0OiAlcyIKK21zZ3N0ciAicmVzcHVlc3RhIG1hbGZvcm1hZGEgZW4gbGlzdGEgZGUgcmVmczogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQoJXMpIGZhaWxlZCIKK21zZ3N0ciAibGVlciglcykgZmFsbMOzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3cml0ZSglcykgZmFpbGVkIgorbXNnc3RyICJlc2NyaWJpciglcykgZmFsbMOzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIgorbXNnc3RyICJoaWxvICVzIGZhbGzDsyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGhyZWFkIGZhaWxlZCB0byBqb2luOiAlcyIKK21zZ3N0ciAiaGlsbyAlcyBmYWxsw7MgYWwgdW5pcnNlOiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNzEgdHJhbnNwb3J0LWhlbHBlci5jOjEzNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGE6ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBpbmljaWFyIGVsIGhpbG8gcGFyYSBjb3BpYXIgZGF0YTogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIHRvIHdhaXQiCittc2dzdHIgInByb2Nlc28gJXMgZmFsbMOzIGFsIGVzcGVyYXIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICJwcm9jZXNvICVzIGZhbGzDsyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MzQgdHJhbnNwb3J0LWhlbHBlci5jOjE0NDMKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgaW5pY2lhciBoaWxvIHBhcmEgY29waWFyIGRhdGEiCisKKyM6IHRyZWUtd2Fsay5jOjMyCittc2dpZCAidG9vLXNob3J0IHRyZWUgb2JqZWN0IgorbXNnc3RyICJvYmpldG8gZGUgw6FyYm9sIG11eSBjb3J0byIKKworIzogdHJlZS13YWxrLmM6MzgKK21zZ2lkICJtYWxmb3JtZWQgbW9kZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICJtb2RvIG1hbCBmb3JtYWRvIGVuIGxhIGVudHJhZGEgZGUgw6FyYm9sIgorCisjOiB0cmVlLXdhbGsuYzo0MgorbXNnaWQgImVtcHR5IGZpbGVuYW1lIGluIHRyZWUgZW50cnkiCittc2dzdHIgIm5vbWJyZSBkZSBhcmNoaXZvIHZhY8OtbyBlbiBsYSBlbnRyYWRhIGRlIMOhcmJvbCIKKworIzogdHJlZS13YWxrLmM6MTE3Cittc2dpZCAidG9vLXNob3J0IHRyZWUgZmlsZSIKK21zZ3N0ciAiYXJjaGl2byBkZSDDoXJib2wgbXV5IGNvcnRvIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiTG9zIGNhbWJpb3MgbG9jYWxlcyBkZSBsb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBzZXLDoW4gc29icmVzY3JpdG9zIHBvciAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUG9yIGZhdm9yIHJlYWxpemEgdW4gY29tbWl0IGNvbiBsb3MgY2FtYmlvcyBvIHVuIHN0YXNoIGFudGVzIGRlIGNhbWJpYXIgIgorInJhbWFzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJMb3MgY2FtYmlvcyBsb2NhbGVzIGRlIGxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNlcsOhbiBzb2JyZWVzY3JpdG9zIHBvciAiCisiY2hlY2tvdXQ6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJMb3MgY2FtYmlvcyBsb2NhbGVzIGRlIGxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNlcsOhbiBzb2JyZXNjcml0b3MgYWwgIgorImZ1c2lvbmFyOlxuIgorIiUlc1BvciBmYXZvciwgY29uZmlybWEgdHVzIGNhbWJpb3MgbyBhZ3XDoXJkYWxvcyBhbnRlcyBkZSBmdXNpb25hci4iCisKKyM6IHVucGFjay10cmVlcy5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisiTG9zIGNhbWJpb3MgbG9jYWxlcyBkZSBsb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBzZXLDoW4gc29icmVlc2NyaXRvcyBwb3IgIgorIm1lcmdlOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiTG9zIGNhbWJpb3MgbG9jYWxlcyBkZSBsb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBzZXLDoW4gc29icmVzY3JpdG9zIGFsICVzOlxuIgorIiUlc1BvciBmYXZvciwgY29uZmlybWEgdHVzIGNhbWJpb3MgbyBndcOhcmRhbG9zIGFudGVzIGRlICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJMb3MgY2FtYmlvcyBsb2NhbGVzIGRlIGxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNlcsOhbiBzb2JyZWVzY3JpdG9zIHBvciAlczpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVtOlxuIgorIiVzIgorbXNnc3RyICIiCisiQWwgYWN0dWFsaXphciBsb3Mgc2lndWllbnRlcyBkaXJlY3RvcmlvcyBzZSBwZXJkZXLDoW4gbG9zIGFyY2hpdm9zIHNpbiAiCisic2VndWltaWVudG8gZW4gZWxsb3M6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiTG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3Mgc2luIHNlZ3VpbWllbnRvIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvIHNlcsOhbiAiCisiZWxpbWluYWRvcyBhbCBhY3R1YWxpemFyIGVsIMOhcmJvbCBkZSB0cmFiYWpvOlxuIgorIiUlc1BvciBmYXZvciwgbXXDqXZlbG9zIG8gZWxpbcOtbmFsb3MgYW50ZXMgZGUgaW50ZXJjYW1iaWFyIHJhbWFzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJMb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8gZGVsIMOhcmJvbCBkZSB0cmFiYWpvIHNlcsOhbiAiCisiZWxpbWluYWRvc2FsIGFjdHVhbGl6YXIgZWwgw6FyYm9sIGRlIHRyYWJham86XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiTG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3Mgc2luIHNlZ3VpbWllbnRvIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvIHNlcsOhbiAiCisiZWxpbWluYWRvcyBhbCBmdXNpb25hcjpcbiIKKyIlJXNQb3IgZmF2b3IsIG11w6l2ZWxvcyBvIGVsaW3DrW5hbG9zIGFudGVzIGRlIGZ1c2lvbmFyLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJMb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8gZGUgw6FyYm9sIGRlIHRyYWJham8gc2Vyw6FuICIKKyJlbGltaW5hZG9zYWwgZnVzaW9uYXI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiTG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3Mgc2luIHNlZ3VpbWllbnRvIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvIHNlcsOhbiAiCisiZWxpbWluYWRvcyBhbCAlczpcbiIKKyIlJXNQb3IgZmF2b3IsIG11w6l2ZWxvcyBvIGVsaW3DrW5hbG9zIGFudGVzIGRlICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJMb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8gZW4gZWwgw6FyYm9sIGRlIHRyYWJham8gc2Vyw6FuICIKKyJlbGltaW5hZG9zIGFsIGVqZWN1dGFyICVzOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNpbiBzZWd1aW1pZW50byBlbiBlbCDDoXJib2wgZGUgdHJhYmFqbyBzZXLDoW4gIgorInNvYnJlc2NyaXRvcyBhbCBhY3R1YWxpemFyIGVsIMOhcmJvbCBkZSB0cmFiYWpvOlxuIgorIiUlc1BvciBmYXZvciwgbXXDqXZlbG9zIG8gZWxpbcOtbmFsb3MgYW50ZXMgZGUgaW50ZXJjYW1iaWFyIHJhbWFzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNpbiBzZWd1aW1pZW50byBkZSDDoXJib2wgZGUgdHJhYmFqbyBzZXLDoW4gIgorInNvYnJlc2NyaXRvcyBhbCBhY3R1YWxpemFyIGVsIMOhcmJvbCBkZSB0cmFiYWpvOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJMb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8gZW4gZWwgw6FyYm9sIGRlIHRyYWJham8gc2Vyw6FuICIKKyJzb2JyZXNjcml0b3MgYWwgZnVzaW9uYXI6XG4iCisiJSVzUG9yIGZhdm9yLCBtdcOpdmVsb3MgbyBlbGltw61uYWxvcyBhbnRlcyBkZSBmdXNpb25hci4iCisKKyM6IHVucGFjay10cmVlcy5jOjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNpbiBzZWd1aW1pZW50byBkZSDDoXJib2wgZGUgdHJhYmFqbyBzZXLDoW4gIgorInNvYnJlc2NyaXRvcyBhbCBmdXNpb25hcjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiTG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3Mgc2luIHNlZ3VpbWllbnRvIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvIHNlcsOhbiAiCisic29icmVzY3JpdG9zIGFsICVzOlxuIgorIiUlc1BvciBmYXZvciwgbXXDqXZlbG9zIG8gZWxpbcOtbmFsb3MgYW50ZXMgZGUgJXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJMb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBubyByYXN0cmVhZG9zIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvIHNlcsOhbiAiCisiZWxpbWluYWRvc3BvciAlczpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiIKK21zZ3N0ciAiRW50cmFkYSAnJXMnIHNlIHN1cGVycG9uZSBjb24gJyVzJy4gIE5vIHNlIHB1ZWRlbiB1bmlyLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHNwYXJzZSBjaGVja291dDogdGhlIGZvbGxvd2luZyBlbnRyaWVzIGFyZSBub3QgdXAgdG8gZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGFjdHVhbGl6YXIgZWwgc3BhcnNlIGNoZWNrb3V0OiBsYXMgc2lndWllbnRlcyBlbnRyYWRhcyBubyBlc3TDoW4gIgorImFjdHVhbGl6YWRhczpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIGRlbCDDoXJib2wgZGUgdHJhYmFqbyBzZXLDoW4gc29icmVzY3JpdG9zIHBvciBsYSAiCisiYWN0dWFsaXphY2nDs24gc3BhcnNlIGNoZWNrb3V0OlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgc3BhcnNlIGNoZWNrb3V0ICIKKyJ1cGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJMb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBkZWwgw6FyYm9sIGRlIHRyYWJham8gc2Vyw6FuIGVsaW1pbmFkb3MgcG9yIGxhICIKKyJhY3R1YWxpemFjacOzbiBzcGFyc2UgY2hlY2tvdXQ6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBzdWJtb2R1bGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJObyBzZSBwdWVkZSBhY3R1YWxpemFyIGxlIHN1Ym3Ds2R1bG86XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZ1xuIgorbXNnc3RyICJBYm9ydGFuZG9cbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MzE3Cittc2dpZCAiVXBkYXRpbmcgZmlsZXMiCittc2dzdHIgIkFjdHVhbGl6YW5kbyBhcmNoaXZvcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MzQ5Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgcGF0aHMgaGF2ZSBjb2xsaWRlZCAoZS5nLiBjYXNlLXNlbnNpdGl2ZSBwYXRoc1xuIgorIm9uIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtKSBhbmQgb25seSBvbmUgZnJvbSB0aGUgc2FtZVxuIgorImNvbGxpZGluZyBncm91cCBpcyBpbiB0aGUgd29ya2luZyB0cmVlOlxuIgorbXNnc3RyICIiCisibGFzIHNpZ3VpZW50ZXMgcnV0YXMgaGFuIGNvbGlzaW9uYWRvIChwLmUuIHJ1dGFzIGNvbiBjYXNlLXNlbnNpdGl2ZVxuIgorImVuIHVuIGZpbGVzeXN0ZW0gY2FzZS1pbnNlbnNpdGl2ZSkgeSBzb2xvIHVuYSBkZWwgZ3J1cG9cbiIKKyJjb2xpc2lvbmFuZG8gZXN0w6EgZW4gZWwgw6FyYm9sIGRlIHRyYWJham86XG4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0NDUKK21zZ2lkICJVcGRhdGluZyBpbmRleCBmbGFncyIKK21zZ3N0ciAiQWN0dWFsaXphbmRvIGZsYWdzIGRlbCBpbmRleCIKKworIzogdXJsbWF0Y2guYzoxNjMKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAibm9tYnJlIGRlIFVSTCBpbnbDoWxpZG8gb8Kgc3VmaWpvICc6Ly8nIGZhbHRhbnRlIgorCisjOiB1cmxtYXRjaC5jOjE4NyB1cmxtYXRjaC5jOjM0NiB1cmxtYXRjaC5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgInNlY3VlbmNpYSBkZSBlc2NhcGUgJVhYIGludsOhbGlkYSIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAiZmFsdGEgaG9zdCB5IGVsIGVzcXVlbWEgbm8gZXMgJ2ZpbGU6JyIKKworIzogdXJsbWF0Y2guYzoyMzIKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICJ1biAnYXJjaGl2bzonIFVSTCBwdWVkZSBubyB0ZW5lciB1biBuw7ptZXJvIGRlIHB1ZXJ0byIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICJjYXLDoWN0ZXIgaW52w6FsaWRvIGVuIGVsIG5vbWJyZSBkZWwgaG9zdCIKKworIzogdXJsbWF0Y2guYzoyOTIgdXJsbWF0Y2guYzozMDMKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJudW1lcm8gZGUgcHVlcnRvwqBpbnbDoWxpZG8iCisKKyM6IHVybG1hdGNoLmM6MzcxCittc2dpZCAiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIKK21zZ3N0ciAic2VnbWVudG8gZGUgcnV0YSAnLi4nIGludsOhbGlkbyIKKworIzogd2Fsa2VyLmM6MTcwCittc2dpZCAiRmV0Y2hpbmcgb2JqZWN0cyIKK21zZ3N0ciAiSGFjaWVuZG8gZmV0Y2ggYSBvYmpldG9zIgorCisjOiB3b3JrdHJlZS5jOjI1OSBidWlsdGluL2FtLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgbGVlciAnJXMnIgorCisjOiB3b3JrdHJlZS5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGF0IG1haW4gd29ya2luZyB0cmVlIGlzIG5vdCB0aGUgcmVwb3NpdG9yeSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyInJXMnIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvIHByaW5jaXBhbCBubyBlcyBlbCBkaXJlY3RvcmlvIGRlbCByZXBvc2l0b3JpbyIKKworIzogd29ya3RyZWUuYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgd29ya2luZyB0cmVlIGxvY2F0aW9uIgorbXNnc3RyICIiCisiYXJjaGl2byAnJXMnIG5vIGNvbnRpZW5lIHVuYSBydXRhIGFic29sdXRhIGEgbGEgdWJpY2FjacOzbiBkZWwgw6FyYm9sIGRlICIKKyJ0cmFiYWpvIgorCisjOiB3b3JrdHJlZS5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICInJXMnIG5vIGV4aXN0ZSIKKworIzogd29ya3RyZWUuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSAuZ2l0IGZpbGUsIGVycm9yIGNvZGUgJWQiCittc2dzdHIgIiclcycgbm8gZXMgdW4gYXJjaGl2byAuZ2l0LCBjw7NkaWdvIGRlIGVycm9yICVkIgorCisjOiB3b3JrdHJlZS5jOjM0MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IGJhY2sgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJyBubyBhcHVudGEgZGUgdnVlbHRhIGEgJyVzJyIKKworIzogd3JhcHBlci5jOjE4NiB3cmFwcGVyLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgIm5vIHNlIHB1ZG8gYWJyaXIgJyVzJyBwYXJhIGxlY3R1cmEgeSBlc2NyaXR1cmEiCisKKyM6IHdyYXBwZXIuYzozODcgd3JhcHBlci5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyciCittc2dzdHIgIm5vIGVzIHBvc2libGUgYWNjZWRlciAnJXMnIgorCisjOiB3cmFwcGVyLmM6NTk2Cittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJubyBlcyBwb3NpYmxlIG9idGVuZXIgZWwgZGlyZWN0b3JpbyBkZSB0cmFiYWpvIGFjdHVhbCIKKworIzogd3Qtc3RhdHVzLmM6MTU4Cittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICJSdXRhcyBubyBmdXNpb25hZGFzOiIKKworIzogd3Qtc3RhdHVzLmM6MTg3IHd0LXN0YXR1cy5jOjIxOQorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGFyY2hpdm8+Li4uXCIgcGFyYSBzYWNhciBkZWwgw6FyZWEgZGUgc3RhZ2UpIgorCisjOiB3dC1zdGF0dXMuYzoxOTAgd3Qtc3RhdHVzLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IHJlc3RvcmUgLS1zb3VyY2U9JXMgLS1zdGFnZWQgPGFyY2hpdm8+Li4uXCIgcGFyYSBzYWNhciBkZWwgw6FyZWEgIgorImRlIHN0YWdlKSIKKworIzogd3Qtc3RhdHVzLmM6MTkzIHd0LXN0YXR1cy5jOjIyNQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IHJtIC0tY2FjaGVkIDxhcmNoaXZvPi4uLlwiIHBhcmEgc2FjYXIgZGVsIMOhcmVhIGRlIHN0YWdlKSIKKworIzogd3Qtc3RhdHVzLmM6MTk3Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgICh1c2EgXCJnaXQgYWRkIDxhcmNoaXZvPi4uLlwiIHBhcmEgbWFyY2FyIHVuYSByZXNvbHVjacOzbikiCisKKyM6IHd0LXN0YXR1cy5jOjE5OSB3dC1zdGF0dXMuYzoyMDMKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKyIgICh1c2EgXCJnaXQgYWRkL3JtIDxhcmNoaXZvPi4uLlwiIGNvbW8gdW5hIGZvcm1hIGFwcm9waWFkYSBkZSBtYXJjYXIgbGEgIgorInJlc29sdWNpw7NuKSIKKworIzogd3Qtc3RhdHVzLmM6MjAxCittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKHVzYSBcImdpdCBybSA8ZmlsZT4uLi5cIiBwYXJhIG1hcmNhciBsYSByZXNvbHVjacOzbikiCisKKyM6IHd0LXN0YXR1cy5jOjIxMSB3dC1zdGF0dXMuYzoxMDc0Cittc2dpZCAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICJDYW1iaW9zIGEgc2VyIGNvbmZpcm1hZG9zOiIKKworIzogd3Qtc3RhdHVzLmM6MjM0IHd0LXN0YXR1cy5jOjEwODMKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIkNhbWJpb3Mgbm8gcmFzdHJlYWRvcyBwYXJhIGVsIGNvbW1pdDoiCisKKyM6IHd0LXN0YXR1cy5jOjIzOAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IGFkZCA8YXJjaGl2bz4uLi5cIiBwYXJhIGFjdHVhbGl6YXIgbG8gcXVlIHNlcsOhIGNvbmZpcm1hZG8pIgorCisjOiB3dC1zdGF0dXMuYzoyNDAKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCBhZGQvcm0gPGFyY2hpdm8+Li4uXCIgcGFyYSBhY3R1YWxpemFyIGEgbG8gcXVlIHNlIGxlIHZhIGEgaGFjZXIgIgorImNvbW1pdCkiCisKKyM6IHd0LXN0YXR1cy5jOjI0MQorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmVzdG9yZSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IHJlc3RvcmUgPGFyY2hpdm8+Li4uXCIgcGFyYSBkZXNjYXJ0YXIgbG9zIGNhbWJpb3MgZW4gZWwgIgorImRpcmVjdG9yaW8gZGUgdHJhYmFqbykiCisKKyM6IHd0LXN0YXR1cy5jOjI0MworbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorIiAgKGNvbmZpcm1hciBvIGRlc2NhcnRhciBlbCBjb250ZW5pZG8gc2luIHNlZ3VpbWllbnRvIG8gbW9kaWZpY2FkbyBlbiBsb3MgIgorInN1Yi1tw7NkdWxvcykiCisKKyM6IHd0LXN0YXR1cy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCAlcyA8YXJjaGl2bz4uLi5cIiBwYXJhIGluY2x1aXJsbyBhIGxvIHF1ZSBzZSBzZXLDoSBjb25maXJtYWRvKSIKKworIzogd3Qtc3RhdHVzLmM6MjY4Cittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAiYW1ib3MgYm9ycmFkb3M6IgorCisjOiB3dC1zdGF0dXMuYzoyNzAKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgImFncmVnYWRvIHBvciBub3NvdHJvczoiCisKKyM6IHd0LXN0YXR1cy5jOjI3MgorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgImJvcnJhZG9zIHBvciBlbGxvczoiCisKKyM6IHd0LXN0YXR1cy5jOjI3NAorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICJhZ3JlZ2FkbyBwb3IgZWxsb3M6IgorCisjOiB3dC1zdGF0dXMuYzoyNzYKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAiYm9ycmFkbyBwb3Igbm9zb3Ryb3M6IgorCisjOiB3dC1zdGF0dXMuYzoyNzgKK21zZ2lkICJib3RoIGFkZGVkOiIKK21zZ3N0ciAiYW1ib3MgYWdyZWdhZG9zOiIKKworIzogd3Qtc3RhdHVzLmM6MjgwCittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgImFtYm9zIG1vZGlmaWNhZG9zOiIKKworIzogd3Qtc3RhdHVzLmM6MjkwCittc2dpZCAibmV3IGZpbGU6IgorbXNnc3RyICJudWV2byBhcmNoaXZvOiIKKworIzogd3Qtc3RhdHVzLmM6MjkyCittc2dpZCAiY29waWVkOiIKK21zZ3N0ciAiY29waWFkbzoiCisKKyM6IHd0LXN0YXR1cy5jOjI5NAorbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICJib3JyYWRvOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk2Cittc2dpZCAibW9kaWZpZWQ6IgorbXNnc3RyICJtb2RpZmljYWRvOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk4Cittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgInJlbm9tYnJhZG86IgorCisjOiB3dC1zdGF0dXMuYzozMDAKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAiY2FtYmlvIGRlIHRpcG86IgorCisjOiB3dC1zdGF0dXMuYzozMDIKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAiZGVzY29ub2NpZG86IgorCisjOiB3dC1zdGF0dXMuYzozMDQKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgImRlcy1mdXNpb25hZG86IgorCisjOiB3dC1zdGF0dXMuYzozODQKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICJudWV2b3MgY29tbWl0cywgIgorCisjOiB3dC1zdGF0dXMuYzozODYKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgImNvbnRlbmlkbyBtb2RpZmljYWRvLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM4OAorbXNnaWQgInVudHJhY2tlZCBjb250ZW50LCAiCittc2dzdHIgImNvbnRlbmlkbyBubyByYXN0cmVhZG8sICIKKworIzogd3Qtc3RhdHVzLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJpZXMiCittc2dzdHJbMF0gIlR1IHN0YXNoIGFjdHVhbG1lbnRlIHRpZW5lICVkIGVudHJhZGEiCittc2dzdHJbMV0gIlR1IHN0YXNoIGFjdHVhbG1lbnRlIHRpZW5lICVkIGVudHJhZGFzIgorCisjOiB3dC1zdGF0dXMuYzo5MzgKK21zZ2lkICJTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKK21zZ3N0ciAiU3VibcOzZHVsb3MgY2FtYmlhZG9zIHBlcm8gbm8gYWN0dWFsaXphZG9zOiIKKworIzogd3Qtc3RhdHVzLmM6OTQwCittc2dpZCAiU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiU3VibcOzZHVsb3MgY2FtYmlhZG9zIGxpc3RvcyBwYXJhIHJlYWxpemFyIGNvbW1pdDoiCisKKyM6IHd0LXN0YXR1cy5jOjEwMjIKK21zZ2lkICIiCisiRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuXG4iCisiRXZlcnl0aGluZyBiZWxvdyBpdCB3aWxsIGJlIGlnbm9yZWQuIgorbXNnc3RyICIiCisiTm8gbW9kaWZpcXVlIG8gYm9ycmUgbGEgbMOtbmVhIGRlIGVuY2ltYS5cbiIKKyJUb2RvIGxvIHF1ZSBlc3RlIHBvciBhYmFqbyBzZXLDoSBlbGltaW5hZG8uIgorCisjOiB3dC1zdGF0dXMuYzoxMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjb21wdXRlIHRoZSBicmFuY2ggYWhlYWQvYmVoaW5kIHZhbHVlcy5cbiIKKyJZb3UgY2FuIHVzZSAnLS1uby1haGVhZC1iZWhpbmQnIHRvIGF2b2lkIHRoaXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJUb23DsyAlLjJmIHNlZ3VuZG9zIHBhcmEgY2FsY3VsYXIgbG9zIHZhbG9yZXMgYW50ZXJpb3IvcG9zdGVyaW9yIGRlbCBicmFuY2guXG4iCisiUHVlZGVzIHVzYXIgJy0tbm8tYWhlYWQtYmVoaW5kJyBwYXJhIGV2aXRhciBlc3RvLlxuIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ0Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICJUaWVuZXMgcnV0YXMgbm8gZnVzaW9uYWRhcy4iCisKKyM6IHd0LXN0YXR1cy5jOjExNDcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIgIChhcnJlZ2xhIGxvcyBjb25mbGljdG9zIHkgY29ycmUgXCJnaXQgY29tbWl0XCIiCisKKyM6IHd0LXN0YXR1cy5jOjExNDkKK21zZ2lkICIgICh1c2UgXCJnaXQgbWVyZ2UgLS1hYm9ydFwiIHRvIGFib3J0IHRoZSBtZXJnZSkiCittc2dzdHIgIiAgKHVzYSBcImdpdCBtZXJnZSAtLWFib3J0XCIgcGFyYSBhYm9ydGFyIGxhIGZ1c2lvbikiCisKKyM6IHd0LXN0YXR1cy5jOjExNTMKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgorbXNnc3RyICJUb2RvcyBsb3MgY29uZmxpY3RvcyByZXN1ZWx0b3MgcGVybyBzaWd1ZXMgZnVzaW9uYW5kby4iCisKKyM6IHd0LXN0YXR1cy5jOjExNTYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0XCIgdG8gY29uY2x1ZGUgbWVyZ2UpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgY29tbWl0XCIgcGFyYSBjb25jbHVpciBsYSBmdXNpw7NuKSIKKworIzogd3Qtc3RhdHVzLmM6MTE2NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAiRXN0w6FzIGVuIG1lZGlvIGRlIHVuYSBzZXNpw7NuIGFtLiIKKworIzogd3Qtc3RhdHVzLmM6MTE2OAorbXNnaWQgIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiRWwgcGFyY2hlIGFjdHVhbCBlc3TDoSB2YWPDrW8uIgorCisjOiB3dC1zdGF0dXMuYzoxMTcyCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoYXJyZWdsYSBsb3MgY29uZmxpY3RvcyB5IGx1ZWdvIGNvcnJlIFwiZ2l0IGFtIC0tY29udGludWVcIiIKKworIzogd3Qtc3RhdHVzLmM6MTE3NAorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgYW0gLS1za2lwXCIgcGFyYSBzYWx0YXIgZXN0ZSBwYXJjaGUpIgorCisjOiB3dC1zdGF0dXMuYzoxMTc2Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgYW0gLS1hYm9ydFwiIHBhcmEgcmVzdGF1cmFyIGxhIHJhbWEgb3JpZ2luYWwpIgorCisjOiB3dC1zdGF0dXMuYzoxMzA5Cittc2dpZCAiZ2l0LXJlYmFzZS10b2RvIGlzIG1pc3NpbmcuIgorbXNnc3RyICJnaXQtcmViYXNlLXRvZG8gbm8gZXN0w6EgcHJlc2VudGUuIgorCisjOiB3dC1zdGF0dXMuYzoxMzExCittc2dpZCAiTm8gY29tbWFuZHMgZG9uZS4iCittc2dzdHIgIk5vIHNlIHJlYWxpemFyb24gbG9zIGNvbWFuZG9zLiIKKworIzogd3Qtc3RhdHVzLmM6MTMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXN0IGNvbW1hbmQgZG9uZSAoJWQgY29tbWFuZCBkb25lKToiCittc2dpZF9wbHVyYWwgIkxhc3QgY29tbWFuZHMgZG9uZSAoJWQgY29tbWFuZHMgZG9uZSk6IgorbXNnc3RyWzBdICJFbCDDumx0aW1vIGNvbWFuZG8gcmVhbGl6YWRvICglZCBjb21hbmRvIHJlYWxpemFkbyk6IgorbXNnc3RyWzFdICJMb3Mgw7psdGltb3MgY29tYW5kb3MgcmVhbGl6YWRvcyAoJWQgY29tYW5kb3MgcmVhbGl6YWRvcyk6IgorCisjOiB3dC1zdGF0dXMuYzoxMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHNlZSBtb3JlIGluIGZpbGUgJXMpIgorbXNnc3RyICIgICh2ZXIgbcOhcyBlbiBlbCBhcmNoaXZvICVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTMzMAorbXNnaWQgIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iCittc2dzdHIgIk5vIHF1ZWRhbiBtw6FzIGNvbWFuZG9zLiIKKworIzogd3Qtc3RhdHVzLmM6MTMzMworIywgYy1mb3JtYXQKK21zZ2lkICJOZXh0IGNvbW1hbmQgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kKToiCittc2dpZF9wbHVyYWwgIk5leHQgY29tbWFuZHMgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kcyk6IgorbXNnc3RyWzBdICJTaWd1aWVudGUgY29tYW5kbyBhIHJlYWxpemFywqAoJWQgY29tYW5kbyByZXN0YW50ZSk6IgorbXNnc3RyWzFdICJTaWd1aWVudGUgY29tYW5kb3MgYSByZWFsaXphciAoJWQgY29tYW5kb3MgZmFsdGFudGVzKToiCisKKyM6IHd0LXN0YXR1cy5jOjEzNDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgdG8gdmlldyBhbmQgZWRpdCkiCittc2dzdHIgIiAgKHVzYSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiBwYXJhIHZlciB5IGVkaXRhcikiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIkVzdMOhcyBhcGxpY2FuZG8gdW4gcmViYXNlIGRlIGxhIHJhbWEgJyVzJyBlbiAnJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxMzU4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICJFc3TDoXMgYXBsaWNhbmRvIHVuIHJlYmFzZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNzEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoY29ycmlnZSBsb3MgY29uZmxpY3RvcyB5IGVqZWN1dGEgXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzMKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHVzYSBcImdpdCByZWJhc2UgLS1za2lwXCIgcGFyYSBvbWl0aXIgZXN0ZSBwYXJjaGUpIgorCisjOiB3dC1zdGF0dXMuYzoxMzc1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiBwYXJhIHZvbHZlciBhIHR1IHJhbWEgb3JpZ2luYWwpIgorCisjOiB3dC1zdGF0dXMuYzoxMzgyCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICh0b2RvcyBsb3MgY29uZmxpY3RvcyBjb3JyZWdpZG9zOiBlamVjdXRhIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJFc3TDoXMgZGl2aWRpZW5kbyB1biBjb21taXQgbWllbnRyYXMgYXBsaWNhcyB1biByZWJhc2UgZGUgbGEgcmFtYSAnJXMnIGVuICIKKyInJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTM5MQorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICJFc3TDoXMgZGl2aWRpZW5kbyB1biBjb21taXQgZHVyYW50ZSB1biByZWJhc2UuIgorCisjOiB3dC1zdGF0dXMuYzoxMzk0Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChVbmEgdmV6IHF1ZSB0dSBkaXJlY3RvcmlvIGRlIHRyYWJham8gZXN0w6kgbGltcGlvLCBlamVjdXRhIFwiZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisiRXN0w6FzIGVkaXRhbmRvIHVuIGNvbW1pdCBtaWVudHJhcyBzZSBhcGxpY2EgdW4gcmViYXNlIGRlIGxhIHJhbWEgJyVzJyBlbiAiCisiJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIkVzdMOhcyBlZGl0YW5kbyB1biBjb21taXQgZHVyYW50ZSB1biByZWJhc2UuIgorCisjOiB3dC1zdGF0dXMuYzoxNDA2Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgcGFyYSBlbm1lbmRhciBlbCBjb21taXQgYWN0dWFsKSIKKworIzogd3Qtc3RhdHVzLmM6MTQwOAorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIHVuYSB2ZXogcXVlIGVzdMOpcyBzYXRpc2ZlY2hvIGNvbiB0dXMgIgorImNhbWJpb3MpIgorCisjOiB3dC1zdGF0dXMuYzoxNDE5Cittc2dpZCAiQ2hlcnJ5LXBpY2sgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiQ2hlcnJ5LXBpY2sgZW4gcHJvZ3Jlc28gYWN0dWFsbWVudGUuIgorCisjOiB3dC1zdGF0dXMuYzoxNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIkVzdMOhcyByZWFsaXphbmRvIHVuIGNoZXJyeS1waWNraW5nIGVuIGVsIGNvbW1pdCAlcy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MjkKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoY29ycmlnZSBsb3MgY29uZmxpY3RvcyB5IGVqZWN1dGEgXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzMgorbXNnaWQgIiAgKHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIChlamVjdXRhIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiBwYXJhIGNvbnRpbnVhcikiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzUKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKHRvZG9zIGxvcyBjb25mbGljdG9zIGNvcnJlZ2lkb3M6IGVqZWN1dGEgXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzNworbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCIgcGFyYSBzYWx0YXIgZXN0ZSBwYXJjaGUpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM5Cittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHBhcmEgY2FuY2VsYXIgbGEgb3BlcmFjacOzbiBjaGVycnktcGljaykiCisKKyM6IHd0LXN0YXR1cy5jOjE0NDkKK21zZ2lkICJSZXZlcnQgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiUmV2aWVydGUgZWwgZXN0YWRvIGVuIHByb2dyZXNvIGFjdHVhbC4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIkVzdMOhcyByZXZpcnRpZW5kbyBlbCBjb21taXQgJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxNDU4Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChjb3JyaWdlIGxvcyBjb25mbGljdG9zIHkgZWplY3V0YSBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2MQorbXNnaWQgIiAgKHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIHRvIGNvbnRpbnVlKSIKK21zZ3N0ciAiICAoZWplY3V0YSBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIHBhcmEgY29udGludWFyKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2NAorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAodG9kb3MgbG9zIGNvbmZsaWN0b3MgY29ycmVnaWRvczogZWplY3V0YSBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2NgorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IHJldmVydCAtLXNraXBcIiBwYXJhIG9taXRpciBlc3RlIHBhcmNoZSkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjgKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIHJldmVydCBvcGVyYXRpb24pIgorbXNnc3RyICIgICh1c2EgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiBwYXJhIGNhbmNlbGFyIGxhIG9wZXJhY2nDs24gZGUgcmV2ZXJ0aXIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiRXN0w6FzIGFwbGljYW5kbyB1biBiaXNlY3QsIGNvbWVuemFuZG8gZW4gbGEgcmFtYSAnJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4MgorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgIkVzdMOhcyBhcGxpY2FuZG8gdW4gYmlzZWN0LiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4NQorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IGJpc2VjdCByZXNldFwiIHBhcmEgdm9sdmVyIGEgbGEgcmFtYSBvcmlnaW5hbCkiCisKKyM6IHd0LXN0YXR1cy5jOjE2OTQKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICJFbiBsYSByYW1hICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMQorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgInJlYmFzZSBpbnRlcmFjdGl2byBlbiBwcm9ncmVzbzsgZW4gIgorCisjOiB3dC1zdGF0dXMuYzoxNzAzCittc2dpZCAicmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAicmViYXNlIGVuIHByb2dyZXNvOyBlbiAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MTMKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICJBY3R1YWxtZW50ZSBubyBlc3TDoXMgZW4gbmluZ3VuYSByYW1hLiIKKworIzogd3Qtc3RhdHVzLmM6MTczMAorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICJDb25maXJtYWNpw7NuIGluaWNpYWwiCisKKyM6IHd0LXN0YXR1cy5jOjE3MzEKK21zZ2lkICJObyBjb21taXRzIHlldCIKK21zZ3N0ciAiTm8gaGF5IGNvbW1pdHMgdG9kYXbDrWEiCisKKyM6IHd0LXN0YXR1cy5jOjE3NDUKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIkFyY2hpdm9zIHNpbiBzZWd1aW1pZW50byIKKworIzogd3Qtc3RhdHVzLmM6MTc0NworbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgIkFyY2hpdm9zIGlnbm9yYWRvcyIKKworIzogd3Qtc3RhdHVzLmM6MTc1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisiVG9tw7MgJS4yZiBzZWd1bmRvcyBlbnVtZXJhciBsb3MgYXJjaGl2b3Mgbm8gcmFzdHJlYWRvcy4gJ3N0YXR1cyAtdW5vJ1xuIgorInB1ZWRlIGFjZWxlcmFybG8sIHBlcm8gdGllbmVzIHF1ZSBzZXIgY3VpZGFkb3NvIGRlIG5vIG9sdmlkYXIgYWdyZWdhclxuIgorIm51ZXZvcyBhcmNoaXZvcyB0w7ogbWlzbW8gKHZlYSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorCisjOiB3dC1zdGF0dXMuYzoxNzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIkFyY2hpdm9zIG5vIHJhc3RyZWFkb3Mgbm8gc29uIG1vc3RyYWRvcyAlcyIKKworIzogd3Qtc3RhdHVzLmM6MTc1OQorbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiAodXNhIGxhIG9wY2nDs24gLXUgcGFyYSBtb3N0cmFyIGxvcyBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8pIgorCisjOiB3dC1zdGF0dXMuYzoxNzY1Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiU2luIGNhbWJpb3MiCisKKyM6IHd0LXN0YXR1cy5jOjE3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIiIKKyJzaW4gY2FtYmlvcyBhZ3JlZ2Fkb3MgYWwgY29tbWl0ICh1c2EgXCJnaXQgYWRkXCIgeS9vIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgIm5vIHNlIGFncmVnYXJvbiBjYW1iaW9zIGFsIGNvbW1pdFxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIiIKKyJubyBoYXkgbmFkYSBhZ3JlZ2FkbyBhbCBjb21taXQgcGVybyBoYXkgYXJjaGl2b3Mgc2luIHNlZ3VpbWllbnRvIHByZXNlbnRlcyAiCisiKHVzYSBcImdpdCBhZGRcIiBwYXJhIGhhY2VybGVzIHNlZ3VpbWllbnRvKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICIiCisibm8gaGF5IG5hZGEgYWdyZWdhZG8gcGFyYSBjb25maXJtYXIsIHBlcm8gaGF5IGFyY2hpdm9zIHNpbiBzZWd1aW1pZW50byAiCisicHJlc2VudGVzXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iCittc2dzdHIgIiIKKyJubyBoYXkgbmFkYSBwYXJhIGNvbmZpcm1hciAoY3JlYS9jb3BpYSBhcmNoaXZvcyB5IHVzYSBcImdpdCBhZGRcIiBwYXJhICIKKyJoYWNlcmxlcyBzZWd1aW1pZW50bylcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc4NSB3dC1zdGF0dXMuYzoxNzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0XG4iCittc2dzdHIgIm5hZGEgcGFyYSBoYWNlciBjb21taXRcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKVxuIgorbXNnc3RyICIiCisibmFkYSBwYXJhIGhhY2VyIGNvbW1pdCAodXNhIC11IHBhcmEgbW9zdHJhciBsb3MgYXJjaGl2b3Mgbm8gcmFzdHJlYWRvcylcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuXG4iCittc2dzdHIgIm5hZGEgcGFyYSBoYWNlciBjb21taXQsIGVsIMOhcmJvbCBkZSB0cmFiYWpvIGVzdMOhIGxpbXBpb1xuIgorCisjOiB3dC1zdGF0dXMuYzoxOTA1Cittc2dpZCAiTm8gY29tbWl0cyB5ZXQgb24gIgorbXNnc3RyICJObyBoYXkgY29tbWl0cyB0b2RhdsOtYSBlbiAiCisKKyM6IHd0LXN0YXR1cy5jOjE5MDkKK21zZ2lkICJIRUFEIChubyBicmFuY2gpIgorbXNnc3RyICJIRUFEIChzaW4gcmFtYSkiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDAKK21zZ2lkICJkaWZmZXJlbnQiCittc2dzdHIgImRpZmVyZW50ZSIKKworIzogd3Qtc3RhdHVzLmM6MTk0MiB3dC1zdGF0dXMuYzoxOTUwCittc2dpZCAiYmVoaW5kICIKK21zZ3N0ciAiZGV0csOhcyAiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDUgd3Qtc3RhdHVzLmM6MTk0OAorbXNnaWQgImFoZWFkICIKK21zZ3N0ciAiYWRlbGFudGUgIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGFjdGlvbiBpcyBlLmcuICJwdWxsIHdpdGggcmViYXNlIgorIzogd3Qtc3RhdHVzLmM6MjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJubyBzZSBwdWVkZSAlczogVGllbmVzIGNhbWJpb3Mgc2luIG1hcmNhci4iCisKKyM6IHd0LXN0YXR1cy5jOjI0NzYKK21zZ2lkICJhZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgImFkaWNpb25hbG1lbnRlLCB0dSDDrW5kaWNlIGNvbnRpZW5lIGNhbWJpb3MgcXVlIG5vIGVzdMOhbiBlbiB1biBjb21taXQuIgorCisjOiB3dC1zdGF0dXMuYzoyNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAibm8gc2UgcHVlZGUgJXM6IFR1IMOtbmRpY2UgY29udGllbmUgY2FtYmlvcyBxdWUgbm8gZXN0w6FuIGVuIHVuIGNvbW1pdC4iCisKKyM6IGNvbXBhdC9wcmVjb21wb3NlX3V0ZjguYzo1OCBidWlsdGluL2Nsb25lLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGRlc3ZpbmN1bGFyICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbPG9wY2nDs24+XSBbLS1dIDxlc3BlY2lmaWNhY2nDs24tZGUtcnV0YT4uLi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAiZGlmZiBzdGF0dXMgaW5lc3BlcmFkbyAlYyIKKworIzogYnVpbHRpbi9hZGQuYzo5MyBidWlsdGluL2NvbW1pdC5jOjI4OAorbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiZmFsbMOzIGxhIGFjdHVhbGl6YWNpw7NuIGRlIGNhcnBldGFzIgorCisjOiBidWlsdGluL2FkZC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICJlbGltaW5hciAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc4Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIkNhbWJpb3MgZnVlcmEgZGVsIMOhcmVhIGRlIHN0YWdlIHRyYXMgcmVmcmVzY2FyIGVsIMOtbmRpY2U6IgorCisjOiBidWlsdGluL2FkZC5jOjI2NiBidWlsdGluL3Jldi1wYXJzZS5jOjg5OQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiTm8gc2UgcHVkbyBsZWVyIGVsIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJObyBzZSBwdWRvIGFicmlyICclcycgcGFyYSBlc2NyaXR1cmEuIgorCisjOiBidWlsdGluL2FkZC5jOjI4MQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZXNjcmliaXIgZWwgcGFyY2hlIgorCisjOiBidWlsdGluL2FkZC5jOjI4NAorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICJmYWxsw7MgbGEgZWRpY2nDs24gZGVsIHBhcmNoZSIKKworIzogYnVpbHRpbi9hZGQuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiTm8gc2UgcHVkbyBkZWZpbmlyICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg5Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICJQYXJjaGUgdmFjw61vLiBBYm9ydGFkby4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICJObyBzZSBwdWRvIGFwbGljYXIgJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzozMDIKK21zZ2lkICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCittc2dzdHIgIiIKKyJMYXMgc2lndWllbnRlcyBydXRhcyBzb24gaWdub3JhZGFzIHBvciB1bm8gZGUgdHVzIGFyY2hpdm9zIC5naXRpZ25vcmU6XG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIyIGJ1aWx0aW4vY2xlYW4uYzo5MTAgYnVpbHRpbi9mZXRjaC5jOjE2MyBidWlsdGluL212LmM6MTI0CisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU2IGJ1aWx0aW4vcHVsbC5jOjIwMyBidWlsdGluL3B1c2guYzo1NDgKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQyMSBidWlsdGluL3JtLmM6MjQyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY1Cittc2dpZCAiZHJ5IHJ1biIKK21zZ3N0ciAiZHJ5IHJ1biAoIGVqZWN1Y2nDs24gZW4gc2VjbykiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI1Cittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAic2VsZWNjacOzbiBpbnRlcmFjdGl2YSIKKworIzogYnVpbHRpbi9hZGQuYzozMjYgYnVpbHRpbi9jaGVja291dC5jOjE1MTEgYnVpbHRpbi9yZXNldC5jOjMwNworbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJlbGVnaXIgaHVua3MgZGUgZm9ybWEgaW50ZXJhY3RpdmEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI3Cittc2dpZCAiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IgorbXNnc3RyICJlZGl0YXIgZGlmZiBhY3R1YWwgeSBhcGxpY2FyIgorCisjOiBidWlsdGluL2FkZC5jOjMyOAorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAicGVybWl0aXIgYWdyZWdhciBjYXNvIGNvbnRyYXJpbyBpZ25vcmFyIGFyY2hpdm9zIgorCisjOiBidWlsdGluL2FkZC5jOjMyOQorbXNnaWQgInVwZGF0ZSB0cmFja2VkIGZpbGVzIgorbXNnc3RyICJhY3R1YWxpemFkbyBsYXMgY2FycGV0YXMgcmFzdHJlYWRhcyIKKworIzogYnVpbHRpbi9hZGQuYzozMzAKK21zZ2lkICJyZW5vcm1hbGl6ZSBFT0wgb2YgdHJhY2tlZCBmaWxlcyAoaW1wbGllcyAtdSkiCittc2dzdHIgInJlbm9ybWFsaXphciBFT0wgZGUgbG9zIGFyY2hpdm9zIHJhc3RyZWFkb3MgKGltcGxpY2EgLXUpIgorCisjOiBidWlsdGluL2FkZC5jOjMzMQorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAiZ3JhYmFyIHNvbG8gZWwgaGVjaG8gZGUgcXVlIGxhIHJ1dGEgc2Vyw6EgYWdyZWdhZGEgZGVzcHXDqXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMyCittc2dpZCAiYWRkIGNoYW5nZXMgZnJvbSBhbGwgdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJhZ3JlZ2FyIGxvcyBjYW1iaW9zIGRlIHRvZGFzIGxhcyBjYXJwZXRhcyBjb24geSBzaW4gc2VndWltaWVudG8iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM1Cittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgIiIKKyJpZ25vcmFyIHJ1dGFzIGVsaW1pbmFkYXMgZW4gZWwgw6FyYm9sIGRlIHRyYWJham8gKGxvIG1pc21vIHF1ZSAtLW5vLWFsbCkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM3Cittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJubyBhZ3JlZ2FyLCBzb2xvIGFjdHVhbGl6YXIgZWwgw61uZGljZSIKKworIzogYnVpbHRpbi9hZGQuYzozMzgKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICJzYWx0YXIgbGFzIGNhcnBldGFzIHF1ZSBubyBwdWVkZW4gc2VyIGFncmVnYWRhcyBhIGNhdXNhIGRlIGVycm9yZXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM5Cittc2dpZCAiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIgorbXNnc3RyICJjb21wcm9iYXIgc2kgLSBpbmNsdXNvIGxvcyBhcmNoaXZvcyBxdWUgZmFsdGFuIC0gc2UgaWdub3JhbiBlbiBkcnkgcnVuIgorCisjOiBidWlsdGluL2FkZC5jOjM0MSBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDQKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAic29icmVzY3JpYmlyIGVsIGJpdCBlamVjdXRhYmxlIGRlIGxvcyBhcmNoaXZvcyBsaXN0YWRvcyIKKworIzogYnVpbHRpbi9hZGQuYzozNDMKK21zZ2lkICJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiCittc2dzdHIgImF2aXNhciBjdWFuZG8gc2UgYWdyZWdhIHVuIHJlcG9zaXRvcmlvIGluY3J1c3RhZG8iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQ1Cittc2dpZCAiYmFja2VuZCBmb3IgYGdpdCBzdGFzaCAtcGAiCittc2dzdHIgImJhY2tlbmQgcGFyYSBgZ2l0IHN0YXNoIC1wYCIKKworIzogYnVpbHRpbi9hZGQuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSd2ZSBhZGRlZCBhbm90aGVyIGdpdCByZXBvc2l0b3J5IGluc2lkZSB5b3VyIGN1cnJlbnQgcmVwb3NpdG9yeS5cbiIKKyJDbG9uZXMgb2YgdGhlIG91dGVyIHJlcG9zaXRvcnkgd2lsbCBub3QgY29udGFpbiB0aGUgY29udGVudHMgb2ZcbiIKKyJ0aGUgZW1iZWRkZWQgcmVwb3NpdG9yeSBhbmQgd2lsbCBub3Qga25vdyBob3cgdG8gb2J0YWluIGl0LlxuIgorIklmIHlvdSBtZWFudCB0byBhZGQgYSBzdWJtb2R1bGUsIHVzZTpcbiIKKyJcbiIKKyJcdGdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisiSWYgeW91IGFkZGVkIHRoaXMgcGF0aCBieSBtaXN0YWtlLCB5b3UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZVxuIgorImluZGV4IHdpdGg6XG4iCisiXG4iCisiXHRnaXQgcm0gLS1jYWNoZWQgJXNcbiIKKyJcbiIKKyJTZWUgXCJnaXQgaGVscCBzdWJtb2R1bGVcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJTZSBoYSBhZ3JlZ2FkbyBvdHJvIHJlcG9zaXRvcmlvIGRlIGdpdCBkZW50cm8gZGVsIHJlcG9zaXRvcmlvIGFjdHVhbC5cbiIKKyJDbG9uZXMgZGVsIHJlcG9zaXRvcmlvIGV4dGVyaW9yIG5vIHRlbmRyw6FuIGVsIGNvbnRlbmlkbyBkZWwgXG4iCisicmVwb3NpdG9yaW8gZW1iZWJpZG8geSBubyBzYWJyw6FuIGNvbW8gb2J0ZW5lcmxhLlxuIgorIlNpIHF1ZXLDrWFzIGFncmVnYXIgdW4gc3VibcOzZHVsbywgdXNhOlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyJTaSBzZSBhZ3JlZ28gZXN0YSBydXRhIHBvciBlcnJvciwgcHVlZGVzIGVsaW1pbmFyIGRlc2RlIGVsIMOtbmRpY2UgXG4iCisidXNhbmRvOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiVmVhIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgcGFyYSBtw6FzIGluZm9ybWFjacOzbi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZyBlbWJlZGRlZCBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgImFncmVnYW5kbyByZXBvc2l0b3JpbyBlbWJlYmlkbzogJXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDEwCittc2dpZCAiIgorIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZElnbm9yZWRGaWxlIGZhbHNlXCIiCittc2dzdHIgIiIKKyJVc2EgLWYgc2kgcmVhbG1lbnRlIHF1aWVyZXMgYWdyZWdhcmxvcy5cbiIKKyJEZXNhY3RpdmEgZXN0ZSBtZW5zYWplIGVqZWN1dGFuZG9cbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZElnbm9yZWRGaWxlIGZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDE5Cittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiZmFsbMOzIGFsIGFncmVnYXIgYXJjaGl2b3MiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ3IGJ1aWx0aW4vY29tbWl0LmM6MzQ4Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSBlcyBpbmNvbXBhdGlibGUgY29uIC0taW50ZXJhY3RpdmUvLS1wYXRjaCIKKworIzogYnVpbHRpbi9hZGQuYzo0NjQKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWVkaXQiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGVzIGluY29tcGF0aWJsZSBjb24gLS1lZGl0IgorCisjOiBidWlsdGluL2FkZC5jOjQ3NgorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICItQSB5IC11IHNvbiBtdXR1YW1lbnRlIGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDc5Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAiT3BjacOzbiAtLWlnbm9yZS1taXNzaW5nIHNvbG8gcHVlZGUgc2VyIHVzYWRhIGp1bnRvIGEgLS1kcnktcnVuIgorCisjOiBidWlsdGluL2FkZC5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICItLWNobW9kIHBhcmFtICclcycgbXVzdCBiZSBlaXRoZXIgLXggb3IgK3giCittc2dzdHIgIkVsIHBhcsOhbWV0cm8gJyVzJyBwYXJhIC0tY2htb2QgZGViZSBzZXIgLXggw7MgK3giCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTAxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjc1IGJ1aWx0aW4vY29tbWl0LmM6MzU0CisjOiBidWlsdGluL3Jlc2V0LmM6MzI3IGJ1aWx0aW4vcm0uYzoyNzIgYnVpbHRpbi9zdGFzaC5jOjE1MDkKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGVzIGluY29tcGF0aWJsZSBjb24gYXJndW1lbnRvcyBkZSBwYXRoc3BlYyIKKworIzogYnVpbHRpbi9hZGQuYzo1MDggYnVpbHRpbi9jaGVja291dC5jOjE2ODcgYnVpbHRpbi9jb21taXQuYzozNjAKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzMgYnVpbHRpbi9ybS5jOjI3OCBidWlsdGluL3N0YXNoLmM6MTUxNQorbXNnaWQgIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWlyZXMgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCittc2dzdHIgIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWllcmUgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICJOYWRhIGVzcGVjaWZpY2FkbywgbmFkYSBhZ3JlZ2Fkby5cbiIKKworIzogYnVpbHRpbi9hZGQuYzo1MTQKK21zZ2lkICIiCisiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZEVtcHR5UGF0aHNwZWMgZmFsc2VcIiIKK21zZ3N0ciAiIgorIsK/VGFsIHZleiBxdWlzaXN0ZSBkZWNpciAnZ2l0IGFkZC4nP1xuIgorIkRlc2FjdGl2YSBlc3RlIG1lbnNhZ2UgZWplY3V0YW5kb1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkRW1wdHlQYXRoc3BlYyBmYWxzZVwiIgorCisjOiBidWlsdGluL2FtLmM6MzUyCittc2dpZCAiY291bGQgbm90IHBhcnNlIGF1dGhvciBzY3JpcHQiCittc2dzdHIgIm5vIHNlIHB1ZG8gYW5hbGl6YXIgZWwgc2NyaXB0IGRlbCBhdXRvciIKKworIzogYnVpbHRpbi9hbS5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICInJXMnIGZ1ZSBib3JyYWRvIHBvciBlbCBob29rIGRlIGFwcGx5cGF0Y2gtbXNnIgorCisjOiBidWlsdGluL2FtLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiTMOtbmVhIG1hbCBmb3JtYWRhOiAnJXMnLiIKKworIzogYnVpbHRpbi9hbS5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiRmFsbMOzIGFsIGNvcGlhciBub3RhcyBkZSAnJXMnIGEgJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjU0MgorbXNnaWQgImZzZWVrIGZhaWxlZCIKK21zZ3N0ciAiZmFsbCBkZSBmc2VlayIKKworIzogYnVpbHRpbi9hbS5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhbmFsaXphciBlbCBwYXJjaGUgJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjc5NQorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICJTb2xvIHVuIHBhcmNoZSBTdEdJVCBwdWVkZSBzZXIgYXBsaWNhZG8gZGUgdW5hIHZleiIKKworIzogYnVpbHRpbi9hbS5jOjg0MworbXNnaWQgImludmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICJ0aW1lc3RhbXAgaW52w6FsaWRvIgorCisjOiBidWlsdGluL2FtLmM6ODQ4IGJ1aWx0aW4vYW0uYzo4NjAKK21zZ2lkICJpbnZhbGlkIERhdGUgbGluZSIKK21zZ3N0ciAibMOtbmVhIERhdGUgaW52w6FsaWRhIgorCisjOiBidWlsdGluL2FtLmM6ODU1Cittc2dpZCAiaW52YWxpZCB0aW1lem9uZSBvZmZzZXQiCittc2dzdHIgIm9mZnNldCBkZSB6b25hIGhvcmFyaWEgaW52w6FsaWRvIgorCisjOiBidWlsdGluL2FtLmM6OTQ4Cittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICJGYWxsw7MgYWwgZGV0ZWN0YXIgZWwgZm9ybWF0byBkZWwgcGFyY2hlLiIKKworIzogYnVpbHRpbi9hbS5jOjk1MyBidWlsdGluL2Nsb25lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgImZhbGzDsyBhbCBjcmVhciBlbCBkaXJlY3RvcmlvICclcyciCisKKyM6IGJ1aWx0aW4vYW0uYzo5NTgKK21zZ2lkICJGYWlsZWQgdG8gc3BsaXQgcGF0Y2hlcy4iCittc2dzdHIgIkZhbGzDsyBhbCBkaXZpZGlyIHBhcmNoZXMuIgorCisjOiBidWlsdGluL2FtLmM6MTA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJXMgLS1jb250aW51ZVwiLiIKK21zZ3N0ciAiQ3VhbmRvIGhheWFzIHJlc3VlbHRvIGVzdGUgcHJvYmxlbWEsIGVqZWN1dGEgXCIlcyAtLWNvbnRpbnVlXCIuIgorCisjOiBidWlsdGluL2FtLmM6MTA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJXMgLS1za2lwXCIgaW5zdGVhZC4iCittc2dzdHIgIlNpIHByZWZpZXJlcyBzYWx0YXIgZXN0ZSBwYXJjaGUsIGVqZWN1dGEgXCIlcyAtLXNraXBcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJXMgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorIlBhcmEgcmVzdGF1cmFyIGxhIHJhbWEgb3JpZ2luYWwgeSBkZXRlbmVyIGVsIHBhcmNoYWRvLCBlamVjdXRhciBcIiVzIC0tYWJvcnQiCisiXCIuIgorCisjOiBidWlsdGluL2FtLmM6MTE3NAorbXNnaWQgIlBhdGNoIHNlbnQgd2l0aCBmb3JtYXQ9Zmxvd2VkOyBzcGFjZSBhdCB0aGUgZW5kIG9mIGxpbmVzIG1pZ2h0IGJlIGxvc3QuIgorbXNnc3RyICIiCisiUGFyY2hlIG1hbmRhZG8gY29uIGZvcm1hdG89Zmxvd2VkOyBlc3BhY2lvcyBhbCBmaW5hbCBkZSBsYXMgbMOtbmVhcyB0YWwgdmV6ICIKKyJkZXNhcGFyZXpjYW4uIgorCisjOiBidWlsdGluL2FtLmM6MTIwMgorbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiRWwgcGFyY2hlIGVzdMOhIHZhY8Otby4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYXV0aG9yIGxpbmUgaW4gY29tbWl0ICVzIgorbXNnc3RyICJmYWx0YSBsw61uZWEgYXV0b3IgZW4gY29tbWl0ICVzIgorCisjOiBidWlsdGluL2FtLmM6MTI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICUuKnMiCittc2dzdHIgInNhbmdyw61hIG5vIHbDoWxpZGE6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDg5Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorIlJlcG9zaXRvcmlvIGNhcmVjZSBkZSBsb3MgYmxvYnMgbmVjZXNhcmlvcyBwYXJhIHJldHJvY2VkZXIgZW4gdW5hIGZ1c2nDs24gZGUgIgorIjMtdsOtYXMuIgorCisjOiBidWlsdGluL2FtLmM6MTQ5MQorbXNnaWQgIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iCittc2dzdHIgIlVzYW5kbyBsYSBpbmZvcm1hY2nDs24gZGVsIMOtbmRpY2UgcGFyYSByZWNvbnN0cnVpciB1biDDoXJib2wgYmFzZS4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE1MTAKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisiwr9FZGl0YXN0ZSBlbCBwYXJjaGUgYSBtYW5vP1xuIgorIk5vIGFwbGljYSBhIGJsb2JzIGd1YXJkYWRvcyBlbiBzdSDDrW5kaWNlLiIKKworIzogYnVpbHRpbi9hbS5jOjE1MTYKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIlJldHJvY2VkaWVuZG8gcGFyYSBwYXJjaGFyIGJhc2UgeSBmdXNpw7NuIGRlIDMtdsOtYXMuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTQyCittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIKK21zZ3N0ciAiRmFsbMOzIGFsIGZ1c2lvbmFyIGVuIGxvcyBjYW1iaW9zLiIKKworIzogYnVpbHRpbi9hbS5jOjE1NzQKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICJhcGxpY2FuZG8gYSB1biBoaXN0b3JpYWwgdmFjw61vIgorCisjOiBidWlsdGluL2FtLmM6MTYyMSBidWlsdGluL2FtLmM6MTYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNvbnRpbnVhcjogJXMgbm8gZXhpc3RlLiIKKworIzogYnVpbHRpbi9hbS5jOjE2NDMKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgIkN1ZXJwbyBkZSBjb21taXQgZXM6IgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2FtLmM6MTY1MworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorbXNnc3RyICLCv0FwbGljYXI/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIKKworIzogYnVpbHRpbi9hbS5jOjE3MDAgYnVpbHRpbi9jb21taXQuYzozOTgKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBlc2NyaWJpciBlbiBlbCBhcmNoaXZvIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAiw41uZGljZSBzdWNpbzogbm8gc2UgcHVlZGUgYXBsaWNhciBwYXJjaGVzIChzdWNpbzogJXMpIgorCisjOiBidWlsdGluL2FtLmM6MTc0NCBidWlsdGluL2FtLmM6MTgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZzogJS4qcyIKK21zZ3N0ciAiQXBsaWNhbmRvOiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc2MQorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAiU2luIGNhbWJpb3MgLS0gcGFyY2hlIHlhIGFwbGljYWRvLiIKKworIzogYnVpbHRpbi9hbS5jOjE3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICVzICUuKnMiCittc2dzdHIgIkVsIHBhcmNoZSBmYWxsw7MgZW4gJXMgJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE3NzEKK21zZ2lkICJVc2UgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaD1kaWZmJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAiVXNlICdnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2g9ZGlmZicgcGFyYSB2ZXIgZWwgcGFyY2hlIGZhbGxpZG8iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODE1Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisiU2luIGNhbWJpb3MgLSDCv29sdmlkYXN0ZSB1c2FyICdnaXQgYWRkJz9cbiIKKyJTaSBubyBoYXkgbmFkYSBlbiBlbCDDoXJlYSBkZSBzdGFnZSwgbGFzIHBvc2liaWxpZGFkIGVzIHF1ZSBhbGdvIG1hc1xuIgorInlhIGhheWEgaW50cm9kdWNpZG8gZWwgbWlzbW8gY2FtYmlvOyB0YWwgdmV6IHF1aWVyYXMgb21pdGlyIGVzdGUgcGFyY2hlLiIKKworIzogYnVpbHRpbi9hbS5jOjE4MjIKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJZb3Ugc2hvdWxkICdnaXQgYWRkJyBlYWNoIGZpbGUgd2l0aCByZXNvbHZlZCBjb25mbGljdHMgdG8gbWFyayB0aGVtIGFzICIKKyJzdWNoLlxuIgorIllvdSBtaWdodCBydW4gYGdpdCBybWAgb24gYSBmaWxlIHRvIGFjY2VwdCBcImRlbGV0ZWQgYnkgdGhlbVwiIGZvciBpdC4iCittc2dzdHIgIiIKKyJUb2RhdsOtYSB0aWVuZXMgcnV0YXMgc2luIGZ1c2lvbmFyIGVuIHR1IMOtbmRpY2UuXG4iCisiRGViZXMgcmVhbGl6YXIgJ2dpdCBhZGQnIGNhZGEgYXJjaGl2byBjb24gY29uZmxpY3RvcyByZXN1ZWx0b3MgeSBtYXJjYXJsb3MgIgorImNvbW8gdGFsLlxuIgorIlNlIHB1ZWRlIGVqZWN1dGFyIGBnaXQgcm1gIGVuIGVsIGFyY2hpdm8gcGFyYSBhY2VwdGFyIFwiYm9ycmFkbyBwb3IgZWxsb3NcIiAiCisiZW4gw6lsLiIKKworIzogYnVpbHRpbi9hbS5jOjE5MjkgYnVpbHRpbi9hbS5jOjE5MzMgYnVpbHRpbi9hbS5jOjE5NDUgYnVpbHRpbi9yZXNldC5jOjM0NgorIzogYnVpbHRpbi9yZXNldC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICJObyBzZSBwdWRvIGFuYWxpemFyIGVsIG9iamV0byAnJXMnLiIKKworIzogYnVpbHRpbi9hbS5jOjE5ODEKK21zZ2lkICJmYWlsZWQgdG8gY2xlYW4gaW5kZXgiCittc2dzdHIgImZhbGzDsyBhbCBsaW1waWFyIGVsIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMDI1Cittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKyJQYXJlY2UgaGFiZXIgbW92aWRvIEhFQUQgZGVzZGUgZWwgw7psdGltbyBmYWxsw7MgJ2FtJy5cbiIKKyJObyByZWJvYmluYW5kbyBhIE9SSUdfSEVBRCIKKworIzogYnVpbHRpbi9hbS5jOjIxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICJWYWxvciBpbnbDoWxpZG8gcGFyYSAtLXBhdGNoLWZvcm1hdDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIC0tc2hvdy1jdXJyZW50LXBhdGNoOiAlcyIKK21zZ3N0ciAiVmFsb3IgaW52w6FsaWRvIHBhcmEgLS1zaG93LWN1cnJlbnQtcGF0Y2g6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICItLXNob3ctY3VycmVudC1wYXRjaD0lcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXNob3ctY3VycmVudC1wYXRjaD0lcyIKK21zZ3N0ciAiLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMgZXMgaW5jb21wYXRpYmxlIGNvbiAtLXNob3ctY3VycmVudC1wYXRjaD0lcyIKKworIzogYnVpbHRpbi9hbS5jOjIyMDcKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXSIKK21zZ3N0ciAiZ2l0IGFtIFs8b3BjaW9uZXM+XSBbKDxtYm94PiB8IDxEaXJlY3RvcmlvLWRlLWNvcnJlbz4pLi4uXSIKKworIzogYnVpbHRpbi9hbS5jOjIyMDgKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKK21zZ3N0ciAiZ2l0IGFtIFs8b3BjaW9uZXM+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorCisjOiBidWlsdGluL2FtLmM6MjIxNAorbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJlamVjdXRhciBkZSBtYW5lcmEgaW50ZXJhY3RpdmEiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE2Cittc2dpZCAiaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3AiCittc2dzdHIgIm9wY2nDs24gaGlzdMOzcmljYSAtLSBuby1vcCIKKworIzogYnVpbHRpbi9hbS5jOjIyMTgKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAicGVybWl0aXIgcmV0cm9jZXNvIGVuIGZ1c2nDs24gZGUgMy12w61hcyBzaSBlcyBuZWNlc2FyaW8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE5IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU4CisjOiBidWlsdGluL3JlcGFjay5jOjMwNCBidWlsdGluL3N0YXNoLmM6ODEyCittc2dpZCAiYmUgcXVpZXQiCittc2dzdHIgInNlciBzaWxlbmNpb3NvIgorCisjOiBidWlsdGluL2FtLmM6MjIyMQorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImFncmVnYXIgdW5hIGzDrW5lYSBcIkZpcm1hZG8tcG9yXCIgYWwgbWVuc2FqZSBkZWwgY29tbWl0IgorCisjOiBidWlsdGluL2FtLmM6MjIyNAorbXNnaWQgInJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpIgorbXNnc3RyICJyZWNvZGlmaWNhciBlbiB1dGY4IChkZWZhdWx0KSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjYKK21zZ2lkICJwYXNzIC1rIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJwYXNhciBmbGFnIC1rIGEgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjIyOAorbXNnaWQgInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInBhc2FyIGZsYWcgLWIgYSBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAicGFzYXIgZmxhZyAtbSBhIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIyMzIKK21zZ2lkICJwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgZm9yIG1ib3ggZm9ybWF0IgorbXNnc3RyICJwYXNhciBmbGFnIC0ta2VlcC1jciBhIGdpdC1tYWlsc3BsaXQgcGFyYSBmb3JtYXRvIG1ib3giCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM1Cittc2dpZCAiZG8gbm90IHBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudCBvZiBhbS5rZWVwY3IiCittc2dzdHIgIiIKKyJubyBwYXNhciBmbGFnIC0ta2VlcC1jciBhIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRpZW50ZW1lbnRlIGRlIGFtLmtlZXBjciIKKworIzogYnVpbHRpbi9hbS5jOjIyMzgKK21zZ2lkICJzdHJpcCBldmVyeXRoaW5nIGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUiCittc2dzdHIgImRlc2N1YnJpciB0b2RvIGFudGVzIGRlIHVuYSBsw61uZWEgZGUgdGlqZXJhcyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDAgYnVpbHRpbi9hbS5jOjIyNDMgYnVpbHRpbi9hbS5jOjIyNDYgYnVpbHRpbi9hbS5jOjIyNDkKKyM6IGJ1aWx0aW4vYW0uYzoyMjUyIGJ1aWx0aW4vYW0uYzoyMjU1IGJ1aWx0aW4vYW0uYzoyMjU4IGJ1aWx0aW4vYW0uYzoyMjYxCisjOiBidWlsdGluL2FtLmM6MjI2NworbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgInBhc2FybG8gYSB0cmF2w6lzIGRlIGdpdC1hcHBseSIKKworIzogYnVpbHRpbi9hbS5jOjIyNTcgYnVpbHRpbi9jb21taXQuYzoxMzkxIGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MAorIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczIGJ1aWx0aW4vZ3JlcC5jOjg3MSBidWlsdGluL21lcmdlLmM6MjUwCisjOiBidWlsdGluL3B1bGwuYzoxNDAgYnVpbHRpbi9wdWxsLmM6MTk5IGJ1aWx0aW4vcmViYXNlLmM6MTUwNQorIzogYnVpbHRpbi9yZXBhY2suYzozMTUgYnVpbHRpbi9yZXBhY2suYzozMTkgYnVpbHRpbi9yZXBhY2suYzozMjEKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAgYnVpbHRpbi9zaG93LXJlZi5jOjE3MiBidWlsdGluL3RhZy5jOjQwMworIzogcGFyc2Utb3B0aW9ucy5oOjE1NCBwYXJzZS1vcHRpb25zLmg6MTc1IHBhcnNlLW9wdGlvbnMuaDozMTYKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2FtLmM6MjI2MyBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTYgYnVpbHRpbi90YWcuYzo0MzcgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgImZvcm1hdG8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjY0Cittc2dpZCAiZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluIgorbXNnc3RyICJmb3JtYXRlYXIgZWwgcGFyY2hlKHMpIgorCisjOiBidWlsdGluL2FtLmM6MjI3MAorbXNnaWQgIm92ZXJyaWRlIGVycm9yIG1lc3NhZ2Ugd2hlbiBwYXRjaCBmYWlsdXJlIG9jY3VycyIKK21zZ3N0ciAic29icmVzY3JpYmlyIG1lbnNhamVzIGRlIGVycm9yIGN1YW5kbyBmYWxsb3MgZGUgcGFyY2hhZG8gb2N1cnJhbiIKKworIzogYnVpbHRpbi9hbS5jOjIyNzIKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICJjb250aW51YXIgYXBsaWNhbmRvIGxvcyBwYXJjaGVzIHRyYXMgcmVzb2x2ZXIgY29uZmxpY3RvcyIKKworIzogYnVpbHRpbi9hbS5jOjIyNzUKK21zZ2lkICJzeW5vbnltcyBmb3IgLS1jb250aW51ZSIKK21zZ3N0ciAic2luw7NuaW1vcyBwYXJhIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc4Cittc2dpZCAic2tpcCB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAic2FsdGFyIGVsIHBhcmNoZSBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjgxCittc2dpZCAicmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLiIKK21zZ3N0ciAicmVzdGF1cmFyIGxhIHJhbWEgb3JpZ2luYWwgeSBhYm9ydGFyIGxhIG9wZXJhY2nDs24gZGUgcGFyY2hhZG8uIgorCisjOiBidWlsdGluL2FtLmM6MjI4NAorbXNnaWQgImFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24gYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcy4iCittc2dzdHIgImFib3J0YXIgbGEgb3BlcmFjacOzbiBkZSBwYXJjaGFkbyBwZXJvIG1hbnRlbmVyIEhFQUQgZG9uZGUgZXN0w6EuIgorCisjOiBidWlsdGluL2FtLmM6MjI4OAorbXNnaWQgInNob3cgdGhlIHBhdGNoIGJlaW5nIGFwcGxpZWQiCittc2dzdHIgIm11ZXN0cmEgZWwgcGFyY2hlIHNpZW5kbyBhcGxpY2FkbyIKKworIzogYnVpbHRpbi9hbS5jOjIyOTMKK21zZ2lkICJsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUiCittc2dzdHIgIm1lbnRpciBzb2JyZSBsYSBmZWNoYSBkZWwgY29tbWl0dGVyIgorCisjOiBidWlsdGluL2FtLmM6MjI5NQorbXNnaWQgInVzZSBjdXJyZW50IHRpbWVzdGFtcCBmb3IgYXV0aG9yIGRhdGUiCittc2dzdHIgInVzYXIgZWwgdGltZXN0YW1wIGFjdHVhbCBwYXJhIGxhIGZlY2hhIGRlbCBhdXRvciIKKworIzogYnVpbHRpbi9hbS5jOjIyOTcgYnVpbHRpbi9jb21taXQtdHJlZS5jOjEyMCBidWlsdGluL2NvbW1pdC5jOjE1MTIKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODcgYnVpbHRpbi9wdWxsLmM6MTc0IGJ1aWx0aW4vcmViYXNlLmM6NTE3CisjOiBidWlsdGluL3JlYmFzZS5jOjE1NTYgYnVpbHRpbi9yZXZlcnQuYzoxMTcgYnVpbHRpbi90YWcuYzo0MTgKK21zZ2lkICJrZXktaWQiCittc2dzdHIgImtleS1pZCIKKworIzogYnVpbHRpbi9hbS5jOjIyOTggYnVpbHRpbi9yZWJhc2UuYzo1MTggYnVpbHRpbi9yZWJhc2UuYzoxNTU3Cittc2dpZCAiR1BHLXNpZ24gY29tbWl0cyIKK21zZ3N0ciAiQ29tbWl0cyBjb24gZmlybWEgR1BHIgorCisjOiBidWlsdGluL2FtLmM6MjMwMQorbXNnaWQgIihpbnRlcm5hbCB1c2UgZm9yIGdpdC1yZWJhc2UpIgorbXNnc3RyICIodXNvIGludGVybm8gcGFyYSBnaXQtcmViYXNlKSIKKworIzogYnVpbHRpbi9hbS5jOjIzMTkKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKyJMYSBvcGNpw7NuIC1iLy0tYmluYXJ5IGhhIGVzdGFkbyBkZXNoYWJpbGl0YWRhIHBvciBtdWNobyB0aWVtcG8sIHlcbiIKKyJzZXLDoSBlbGltaW5hZGEuIFBvciBmYXZvciBubyBsYSB1c2UgbcOhcy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzI2Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJmYWxsw7MgYWwgbGVlciBlbCDDrW5kaWNlIgorCisjOiBidWlsdGluL2FtLmM6MjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICVzIHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgImRpcmVjdG9yaW8gZGUgcmViYXNlIHByZXZpbyAlcyB0b2RhdsOtYSBleGlzdGUgZW4gZWwgbWJveCBkYWRvLiIKKworIzogYnVpbHRpbi9hbS5jOjIzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN0cmF5ICVzIGRpcmVjdG9yeSBmb3VuZC5cbiIKKyJVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlbW92ZSBpdC4iCittc2dzdHIgIiIKKyJEaXJlY3RvcmlvIGV4dHJhdmlhZG8gJXMgZW5jb250cmFkby5cbiIKKyJVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHBhcmEgYm9ycmFybG8uIgorCisjOiBidWlsdGluL2FtLmM6MjM3MQorbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgIk9wZXJhY2nDs24gZGUgcmVzb2x1Y2nDs24gbm8gZXN0w6EgZW4gcHJvZ3Jlc28sIG5vIHZhbW9zIGEgY29udGludWFyLiIKKworIzogYnVpbHRpbi9hbS5jOjIzODEKK21zZ2lkICJpbnRlcmFjdGl2ZSBtb2RlIHJlcXVpcmVzIHBhdGNoZXMgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAibW9kbyBpbnRlcmFjdGl2byByZXF1aWVyZSBwYXJjaGVzIGVuIGxhIGzDrW5lYSBkZSBjb21hbmRvIgorCisjOiBidWlsdGluL2FwcGx5LmM6OAorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbPG9wY2lvbmVzPl0gWzxwYXJjaGU+Li4uXSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciBlbCBhcmNoaXZvIGNvbXByaW1pZG8gJyVzJyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MjAKK21zZ2lkICJjb3VsZCBub3QgcmVkaXJlY3Qgb3V0cHV0IgorbXNnc3RyICJubyBzZSBwdWRvIGRpcmVjY2lvbmFyIGxhIHNhbGlkYSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogUmVtb3RlIHNpbiBVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IHNlIGVzcGVyYWJhIEFDSy9OQUssIHNlIG9idHV2byBmbHVzaCBwYWNrZXQiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjUKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlOiBlcnJvciBkZSBwcm90b2NvbG8iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY5Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlOiBzZSBlc3BlcmFiYSB1biBmbHVzaCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxiYWRfdGVybT4gPGdvb2RfdGVybT4iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxtYWxfdMOpcm1pbm8+IDxidWVuX3TDqXJtaW5vPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI0Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNQorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzxjb21taXQ+XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI2Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSBbLS1uby1sb2ddIDxzdGF0ZT4gPHJldmlzaW9uPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSBbLS1uby1sb2ddIDxlc3RhZG8+IDxyZXZpc2lvbj4gPGJ1ZW5fdGVybT4gIgorIjxtYWxfdGVybT4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNworbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2hlY2stYW5kLXNldC10ZXJtcyA8Y29tbWFuZD4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2hlY2stYW5kLXNldC10ZXJtcyA8Y29tYW5kbz4gPGJ1ZW5fdGVybT4gIgorIjxtYWxfdGVybT4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOAorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrIDxnb29kX3Rlcm0+IDxiYWRfdGVybT4gWzx0ZXJtPl0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrIDxidWVuX3Rlcm0+IDxtYWxfdGVybT4gWzx0ZXJtPl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOQorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMAorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtPiAtLXRlcm0te25ldyxiYWR9IgorIj08dGVybT5dWy0tbm8tY2hlY2tvdXRdIFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0w6lybWlubz4gLS10ZXJtLXtuZXcsIgorImJhZH09PHTDqXJtaW5vPl1bLS1uby1jaGVja291dF0gWzxtYWxvPiBbPGJ1ZW5vPi4uLl1dIFstLV0gWzxydXRhcz4uLi5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0ZXJtIgorbXNnc3RyICInJXMnIG5vIGVzIHVuIHTDqXJtaW5vIHbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnJXMnIGFzIGEgdGVybSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgdXNhciBlbCBjb21hbmRvIG5hdGl2byAnJXMnIGNvbW8gdW4gdMOpcm1pbm8iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSB0ZXJtICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNhbWJpYXIgZWwgc2lnbmlmaWNhZG8gZGVsIHTDqXJtaW5vICclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTEKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgInBvciBmYXZvciB1c2UgZG9zIHTDqXJtaW5vcyBkaWZlcmVudGVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTE4Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGhlIGZpbGUgQklTRUNUX1RFUk1TIgorbXNnc3RyICJubyBzZSBwdWRvIGFicmlyIGVsIGFyY2hpdm8gQklTRUNUX1RFUk1TIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLlxuIgorbXNnc3RyICJObyBlc3RhbW9zIGJpc2VjYW5kby5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyBubyBlcyB1biBjb21taXQgdsOhbGlkbyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICclcycuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisibm8gc2UgcHVkbyBoYWNlciBjaGVjayBvdXQgYWwgSEVBRCBvcmlnaW5hbCAnJXMnLiBJbnRlbnRhICdnaXQgYmlzZWN0IHJlc2V0ICIKKyI8Y29tbWl0PicuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJNYWwgYXJndW1lbnRvIGJpc2VjdF93cml0ZTogJXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZ2V0IHRoZSBvaWQgb2YgdGhlIHJldiAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBvYnRlbmVyIGVsIG9pZCBkZSBsYSByZXYgJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBvcGVuIHRoZSBmaWxlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gYWJyaXIgZWwgYXJjaGl2byAnJXMnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWFuZDogeW91J3JlIGN1cnJlbnRseSBpbiBhICVzLyVzIGJpc2VjdCIKK21zZ3N0ciAiQ29tYW5kbyBpbnbDoWxpZG86IGFjdHVhbG1lbnRlIHNlIGVuY3VlbnRyYSBlbiB1biBiaXNlY3QgJXMvJXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKyJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIgorbXNnc3RyICIiCisiVGllbmVzIHF1ZSBkYXIgYWwgbWVub3MgdW4gJXMgeSB1biAlcyByZXZpc2lvbi5cbiIKKyJTZSBwdWVkZSB2ZXIgXCJnaXQgYmlzZWN0ICVzXCIgeSBcImdpdCBiaXNlY3QgJXNcIiBwYXJhIGVzby4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyJUaWVuZXMgcXVlIGNvbWVuemFyIHBvciBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJEZXNwdcOpcyB0aWVuZXMgcXVlIGVudHJlZ2FyIGFsIG1lbm9zIHVuICVzIHkgdW5hIHJldmlzaW9uICVzLlxuIgorIlB1ZWRlcyB1c2FyIFwiZ2l0IGJpc2VjdCAlc1wiIHkgXCJnaXQgYmlzZWN0ICVzXCIgcGFyYSBlc28uIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJpc2VjdGluZyBvbmx5IHdpdGggYSAlcyBjb21taXQiCittc2dzdHIgImhhY2llbmRvIGJpc2VjdCBzb2xvIGNvbiB1biBjb21taXQgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMTgKK21zZ2lkICJBcmUgeW91IHN1cmUgW1kvbl0/ICIKK21zZ3N0ciAiwr9Fc3TDoXMgc2VndXJvIFtZL25dPyAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozNzkKK21zZ2lkICJubyB0ZXJtcyBkZWZpbmVkIgorbXNnc3RyICJubyBoYXkgdMOpcm1pbm9zIGRlZmluaWRvcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjdXJyZW50IHRlcm1zIGFyZSAlcyBmb3IgdGhlIG9sZCBzdGF0ZVxuIgorImFuZCAlcyBmb3IgdGhlIG5ldyBzdGF0ZS5cbiIKK21zZ3N0ciAiIgorIlR1cyB0w6lybWlub3MgYWN0dWFsZXMgc29uICVzIHBhcmEgZWwgZXN0YWRvIHZpZWpvXG4iCisieSAlcyBwYXJhIGVsIGVzdGFkbyBudWV2by5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM5MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIlN1cHBvcnRlZCBvcHRpb25zIGFyZTogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBhbmQgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKK21zZ3N0ciAiIgorImFyZ3VtZW50byBpbnbDoWxpZG8gJXMgcGFyYSAnZ2l0IGJpc2VjdCB0ZXJtcycuXG4iCisiTGFzIG9wY2lvbmVzIHNvcG9ydGFkYXMgc29uOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIHkgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgb3B0aW9uOiAnJXMnIgorbXNnc3RyICJvcGNpw7NuIGRlc2Nvbm9jaWRhOiAnJXMnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgcmV2aXNpb24iCittc2dzdHIgIiclcycgbm8gcGFyZWNlIHNlciB1bmEgcmV2aXNpw7NuIHbDoWxpZGEiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MTQKK21zZ2lkICJiYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIm1hbCBIRUFEIC0gTmVjZXNpdG8gdW4gSEVBRCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjaGVja2luZyBvdXQgJyVzJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCBzdGFydCA8dmFsaWQtYnJhbmNoPicuIgorbXNnc3RyICIiCisiZXJyb3IgYWwgaGFjZXIgY2hlY2tvdXQgJyVzJy4gSW50ZW50ZSAnZ2l0IGJpc2VjdCBzdGFydCA8cmFtYS12w6FsaWRhPicuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTUwCittc2dpZCAid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIKK21zZ3N0ciAibm8gc2UgYmlzZWNhcsOhIGVuIHVuIMOhcmJvbCBjb24gY2ctc2VlayIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MworbXNnaWQgImJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIm1hbCBIRUFEIC0gcmVmIHNpbWLDs2xpY28gZXh0cmHDsW8iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWY6ICclcyciCittc2dzdHIgInJlZiBpbnbDoWxpZG86ICclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzMKK21zZ2lkICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIgorbXNnc3RyICJyZWFsaXphICdnaXQgYmlzZWN0IG5leHQnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM1Cittc2dpZCAid3JpdGUgdGhlIHRlcm1zIHRvIC5naXQvQklTRUNUX1RFUk1TIgorbXNnc3RyICJlc2NyaWJlIGxvcyB0w6lybWlub3MgYSAuZ2l0L0JJU0VDVF9URVJNUyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNworbXNnaWQgImNsZWFudXAgdGhlIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAibGltcGlhciBlbCBlc3RhZG8gZGUgYmlzZWNjacOzbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzOQorbXNnaWQgImNoZWNrIGZvciBleHBlY3RlZCByZXZzIgorbXNnc3RyICJyZXZpc2FyIHBvciByZXZzIGVzcGVyYWRvcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MQorbXNnaWQgInJlc2V0IHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgInJlaW5pY2lhciBlbCBlc3RhZG8gZGUgYmlzZWN0IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQzCittc2dpZCAid3JpdGUgb3V0IHRoZSBiaXNlY3Rpb24gc3RhdGUgaW4gQklTRUNUX0xPRyIKK21zZ3N0ciAiZXNjcmliaXIgZWwgZXN0YWRvIGRlIGJpc2VjdCBlbiBCSVNFQ1RfTE9HIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ1Cittc2dpZCAiY2hlY2sgYW5kIHNldCB0ZXJtcyBpbiBhIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAicmV2aXNhciB5IGNvbmZpZ3VyYXIgbG9zIHRlcm1zIGVuIGVsIGVzdGFkbyBkZSBiaXNlY3QiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDcKK21zZ2lkICJjaGVjayB3aGV0aGVyIGJhZCBvciBnb29kIHRlcm1zIGV4aXN0IgorbXNnc3RyICJyZXZpc2FyIHNpIGV4aXN0ZW4gdMOpcm1pbm9zIG1hbG9zIG8gYnVlbm9zIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ5Cittc2dpZCAicHJpbnQgb3V0IHRoZSBiaXNlY3QgdGVybXMiCittc2dzdHIgImltcHJpbWlyIGxvcyB0ZXJtcyBkZWwgYmlzZWN0IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjUxCittc2dpZCAic3RhcnQgdGhlIGJpc2VjdCBzZXNzaW9uIgorbXNnc3RyICJjb21lbnphciBsYSBzZXNpw7NuIGRlIGJpc2VjdCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MworbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgImFjdHVhbGl6YSBCSVNFQ1RfSEVBRCBlbiBsdWdhciBkZSByZXZpc2FyIGVsIGNvbW1pdCBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTUKK21zZ2lkICJubyBsb2cgZm9yIEJJU0VDVF9XUklURSIKK21zZ3N0ciAibm8gaGF5IGxvZyBwYXJhIEJJU0VDVF9XUklURSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3MworbXNnaWQgIi0td3JpdGUtdGVybXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS13cml0ZS10ZXJtcyByZXF1aWVyZSBkb3MgYXJndW1lbnRvcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3NworbXNnaWQgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIHJlcXVpcmVzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgbm8gcmVxdWllcmUgYXJndW1lbnRvcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4NAorbXNnaWQgIi0tYmlzZWN0LXJlc2V0IHJlcXVpcmVzIGVpdGhlciBubyBhcmd1bWVudCBvciBhIGNvbW1pdCIKK21zZ3N0ciAiLS1iaXNlY3QtcmVzZXQgcmVxdWllcmUgdW4gY29tbWl0IG8gbmluZ8O6biBhcmd1bWVudG8iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODgKK21zZ2lkICItLWJpc2VjdC13cml0ZSByZXF1aXJlcyBlaXRoZXIgNCBvciA1IGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3Qtd3JpdGUgcmVxdWllcmUgZW50cmUgNCBvIDUgYXJndW1lbnRvcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY5NAorbXNnaWQgIi0tY2hlY2stYW5kLXNldC10ZXJtcyByZXF1aXJlcyAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgbm8gcmVxdWllcmUgYXJndW1lbnRvcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcwMAorbXNnaWQgIi0tYmlzZWN0LW5leHQtY2hlY2sgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtbmV4dC1jaGVjayByZXF1aWVyZSAyIG8gMyBhcmd1bWVudG9zIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NzA2Cittc2dpZCAiLS1iaXNlY3QtdGVybXMgcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50IgorbXNnc3RyICItLWJpc2VjdC10ZXJtcyByZXF1aWVyZSAwIG8gMSBhcmd1bWVudG9zIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzEKK21zZ2lkICJnaXQgYmxhbWUgWzxvcHRpb25zPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8ZmlsZT4iCittc2dzdHIgImdpdCBibGFtZSBbPG9wY2lvbmVzPl0gWzxvcGNpb25lcy1yZXY+XSBbPHJldmlzaW9uPl0gWy0tXSA8YXJjaGl2bz4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozNgorbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICI8cmV2LW9wdHM+IGVzdMOhbiBkb2N1bWVudGFkYXMgZW4gZ2l0LXJldi1saXN0KDEpIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGluZyBhIGNvbG9yOiAlcyIKK21zZ3N0ciAiZXNwZXJhbmRvIHVuIGNvbG9yOiAlcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjQxNgorbXNnaWQgIm11c3QgZW5kIHdpdGggYSBjb2xvciIKK21zZ3N0ciAidGllbmUgcXVlIHRlcm1pbmFyIGNvbiB1biBjb2xvciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yICclcycgaW4gY29sb3IuYmxhbWUucmVwZWF0ZWRMaW5lcyIKK21zZ3N0ciAiY29sb3IgaW52w6FsaWRvICclcycgZW4gY29sb3IuYmxhbWUucmVwZWF0ZWRMaW5lcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc0NworbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIGJsYW1lLmNvbG9yaW5nIgorbXNnc3RyICJ2YWxvciBpbnbDoWxpZG8gcGFyYSBibGFtZS5jb2xvcmluZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmluZCByZXZpc2lvbiAlcyB0byBpZ25vcmUiCittc2dzdHIgIm5vIHNlIHB1ZG8gZW5jb250cmFyIHJldmlzaW9uICVzIHBhcmEgaWdub3JhciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NAorbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgIk1vc3RyYXIgbGFzIGVudHJhZGFzIGJsYW1lIGNvbW8gbGFzIGVuY29udHJhbW9zLCBpbmNyZW1lbnRhbG1lbnRlIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ1Cittc2dpZCAiU2hvdyBibGFuayBTSEEtMSBmb3IgYm91bmRhcnkgY29tbWl0cyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiTW9zdHJhciBTSEEtMSBlbiBibGFuY28gcGFyYSBjb21taXRzIGV4dHJlbW9zIChEZWZhdWx0OiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ2Cittc2dpZCAiRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJObyB0cmF0YXIgY29tbWl0cyByYcOtY2VzIGNvbW8gZXh0cmVtb3MgKERlZmF1bHQ6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDcKK21zZ2lkICJTaG93IHdvcmsgY29zdCBzdGF0aXN0aWNzIgorbXNnc3RyICJNb3N0cmFyIGVzdGFkw61zdGljYXMgZGUgY29zdG8gZGUgdHJhYmFqbyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiRm9yemFyIGVsIHJlcG9ydGUgZGUgcHJvZ3Jlc28iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDkKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAiTW9zdHJhciBsYSBwdW50dWFjacOzbiBkZSBzYWxpZGEgZGUgbGFzIGVudHJhZGFzIGRlIGJsYW1lIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUwCittc2dpZCAiU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bykiCittc2dzdHIgIk1vc3RyYXIgbm9tYnJlIG9yaWdpbmFsIGRlbCBhcmNoaXZvIChEZWZhdWx0OiBhdXRvKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MQorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiTW9zdHJhciBuw7ptZXJvIGRlIGzDrW5lYSBvcmlnaW5hbCAoRGVmYXVsdDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MgorbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIk1vc3RyYXIgZW4gdW4gZm9ybWF0byBkaXNlw7FhZG8gcGFyYSBjb25zdW1vIGRlIG3DoXF1aW5hIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUzCittc2dpZCAiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICJNb3N0cmFyIGVuIGZvcm1hdG8gcG9yY2VsYW5hIGNvbiBpbmZvcm1hY2nDs24gZGUgY29tbWl0IHBvciBsw61uZWEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTQKK21zZ2lkICJVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgZ2l0LWFubm90YXRlIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJVc2FyIGVsIG1pc21vIG1vZG8gc2FsaWRhIGNvbW8gZ2l0LWFubm90YXRlIChEZWZhdWx0OiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU1Cittc2dpZCAiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJNb3N0cmFyIHRpbWVzdGFtcCBlbiBmb3JtYXRvIHJhdyAoRGVmYXVsdDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NgorbXNnaWQgIlNob3cgbG9uZyBjb21taXQgU0hBMSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiTW9zdHJhciBTSEExIGRlbCBjb21taXQgZW4gZm9ybWF0byBsYXJnbyAoRGVmYXVsdDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NworbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIlN1cHJpbWlyIG5vbWJyZSBkZWwgYXV0b3IgeSB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTgKK21zZ2lkICJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vc3RyYXIgZW4gY2FtYmlvIGVsIGVtYWlsIGRlbCBhdXRvciAoRGVmYXVsdDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1OQorbXNnaWQgIklnbm9yZSB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIgorbXNnc3RyICJJZ25vcmFyIGRpZmVyZW5jaWFzIGRlIGVzcGFjaW9zIGVuIGJsYW5jbyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MCBidWlsdGluL2xvZy5jOjE3MDIKK21zZ2lkICJyZXYiCittc2dzdHIgInJldiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MAorbXNnaWQgIklnbm9yZSA8cmV2PiB3aGVuIGJsYW1pbmciCittc2dzdHIgIklnbm9yYXIgPHJldj4gZHVyYW50ZSBlbCBibGFtZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MQorbXNnaWQgIklnbm9yZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4iCittc2dzdHIgIklnbm9yYXIgcmV2aXNpb25lcyBkZSA8YXJjaGl2bz4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjIKK21zZ2lkICJjb2xvciByZWR1bmRhbnQgbWV0YWRhdGEgZnJvbSBwcmV2aW91cyBsaW5lIGRpZmZlcmVudGx5IgorbXNnc3RyICJjb2xvcmVhciBtZXRhZGF0YSByZWR1bmRhbnRlIGRlIGzDrW5lYXMgcHJldmlhcyBkZSBtYW5lcmEgZGlmZXJlbnRlIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYzCittc2dpZCAiY29sb3IgbGluZXMgYnkgYWdlIgorbXNnc3RyICJjb2xvcmVhciBsw61uZWFzIHBvciBlZGFkIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY0Cittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICJPY3VwbyBtw6FzIGNpY2xvcyBwYXJhIGVuY29udHJhciBtZWpvcmFzIHJlc3VsdGFkb3MiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjUKK21zZ2lkICJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiCittc2dzdHIgIlVzZSByZXZpc2lvbmVzIGRlc2RlIDxhcmNoaXZvPiBlbiBsdWdhciBkZSBsbGFtYXIgZ2l0LXJldi1saXN0IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY2Cittc2dpZCAiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIKK21zZ3N0ciAiVXNhciBjb250ZW5pZG8gZGUgPGFyY2hpdm8+IGNvbW8gaW1hZ2VuIGZpbmFsIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY3IGJ1aWx0aW4vYmxhbWUuYzo4NjgKK21zZ2lkICJzY29yZSIKK21zZ3N0ciAicHVudGFqZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NworbXNnaWQgIkZpbmQgbGluZSBjb3BpZXMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIkVuY29udHJhciBjb3BpYXMgZGUgbMOtbmVhcyBlbnRyZSB5IGEgdHJhdsOpcyBkZSBhcmNoaXZvcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OAorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIkVuY29udHJhciBtb3ZpbWllbnRvcyBkZSBsw61uZWFzIGVudHJlIHkgYSB0cmF2w6lzIGRlIGFyY2hpdm9zIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAibixtIgorbXNnc3RyICJuLG0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjkKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiUHJvY2VzYXIgc29sbyBlbCByYW5nbyBkZSBsw61uZWFzIG4sbSwgY29udGFuZG8gZGVzZGUgMSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjkyMQorbXNnaWQgIi0tcHJvZ3Jlc3MgY2FuJ3QgYmUgdXNlZCB3aXRoIC0taW5jcmVtZW50YWwgb3IgcG9yY2VsYWluIGZvcm1hdHMiCittc2dzdHIgIi0tcHJvZ3Jlc3Mgbm8gcHVlZGUgc2VyIHVzYWRvIGNvbiAtLWluY3JlbWVudGFsIG8gZm9ybWF0b3MgcG9yY2VsYW5hIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBzdHJpbmcgaXMgdXNlZCB0byB0ZWxsIHVzIHRoZQorIy4gbWF4aW11bSBkaXNwbGF5IHdpZHRoIGZvciBhIHJlbGF0aXZlIHRpbWVzdGFtcCBpbgorIy4gImdpdCBibGFtZSIgb3V0cHV0LiAgRm9yIEMgbG9jYWxlLCAiNCB5ZWFycywgMTEKKyMuIG1vbnRocyBhZ28iLCB3aGljaCB0YWtlcyAyMiBwbGFjZXMsIGlzIHRoZSBsb25nZXN0CisjLiBhbW9uZyB2YXJpb3VzIGZvcm1zIG9mIHJlbGF0aXZlIHRpbWVzdGFtcHMsIGJ1dAorIy4geW91ciBsYW5ndWFnZSBtYXkgbmVlZCBtb3JlIG9yIGZld2VyIGRpc3BsYXkKKyMuIGNvbHVtbnMuCisjLgorIzogYnVpbHRpbi9ibGFtZS5jOjk3MgorbXNnaWQgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iCittc2dzdHIgImhhY2UgNCBhw7FvcywgMTEgbWVzZXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmUiCittc2dpZF9wbHVyYWwgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmVzIgorbXNnc3RyWzBdICJhcmNoaXZvICVzIHRpZW5lIHNvbG8gJWx1IGzDrW5lYSIKK21zZ3N0clsxXSAiYXJjaGl2byAlcyB0aWVuZSBzb2xvICVsdSBsw61uZWFzIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTEyNQorbXNnaWQgIkJsYW1pbmcgbGluZXMiCittc2dzdHIgIkJsYW1pbmcgYSBsw61uZWFzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI5Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3BjaW9uZXM+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMwCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLWxdIFstZl0gPGJyYW5jaC1uYW1lPiBbPHN0YXJ0LXBvaW50Pl0iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcGNpb25lcz5dIFstbF0gWy1mXSA8bm9tYnJlLWRlLXJhbWE+IFs8cHVudG8taW5pY2lhbD5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMxCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3BjaW9uZXM+XSBbLXJdICgtZCB8IC1EKSA8bm9tYnJlLWRlLXJhbWE+Li4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMyCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLW0gfCAtTSkgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3BjaW9uZXM+XSAoLW0gfCAtTSkgWzxyYW1hLXZpZWphPl0gPHJhbWEtbnVldmE+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMzCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLWMgfCAtQykgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3BjaW9uZXM+XSAoLWMgfCAtQykgWzxyYW1hLXZpZWphPl0gPHJhbWEtbnVldmE+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM0Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wY2lvbmVzPl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzUKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1mb3JtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3BjaW9uZXM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0b10iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorImJvcnJhbmRvIGxhIHJhbWEgJyVzJyBxdWUgaGEgc2lkbyBmdXNpb25hZGEgZW5cbiIKKyIgICAgICAgICAnJXMnLCBwZXJvIGHDum4gbm8gaGEgc2lkbyBmdXNpb25hZGEgYSBIRUFELiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgZXZlbiB0aG91Z2ggaXQgaXMgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisibm8gYm9ycmFuZG8gcmFtYSAnJXMnIHF1ZSB0b2RhdsOtYSBubyBoYSBzaWRvIGZ1c2lvbmFkYSBcbiIKKyJcdGEgJyVzJywgYXVucXVlIHNlIGZ1c2lvbmUgY29uIEhFQUQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgIk5vIHNlIHB1ZG8gZW5jb250cmFyIGVsIG9iamV0byBjb21taXQgcGFyYSAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgcnVuICdnaXQgYnJhbmNoIC1EICVzJy4iCittc2dzdHIgIiIKKyJMYSByYW1hICclcycgbm8gaGEgc2lkbyBmdXNpb25hZGEgY29tcGxldGFtZW50ZS5cbiIKKyJTaSBlc3TDoXMgc2VndXJvIGRlIHF1ZXJlciBib3JyYXJsYSwgZWplY3V0YSAnZ2l0IGJyYW5jaCAtRCAlcycuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4OQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIkZhbGzDsyBkZSBhY3R1YWxpemFjacOzbiBkZSBjb25maWctZmlsZSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjAKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgIm5vIHNlIHB1ZWRlIHVzYXItYSBjb24gLWQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI2Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICJObyBzZSBwdWRvIHJldmlzYXIgZWwgb2JqZXRvIGNvbW1pdCBwYXJhIEhFQUQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgYnJhbmNoICclcycgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYm9ycmFyIHJhbWEgJyVzJyBxdWUgY3VlbnRhIGNvbiBjaGVja291dCBlbiAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAicmFtYSBkZSByYXN0cmVvIHJlbW90byAnJXMnIG5vIGVuY29udHJhZGEuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJyYW1hICclcycgbm8gZW5jb250cmFkYS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRXJyb3IgYWwgZWxpbWluYXIgbGEgcmFtYSBkZSByYXN0cmVvIHJlbW90YSAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRXJyb3IgYWwgZWxpbWluYXIgbGEgcmFtYSAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZS10cmFja2luZyBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIkVsaW1pbmFkYSBsYSByYW1hIGRlIHJhc3RyZW8gcmVtb3RhICVzIChlcmEgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiRWxpbWluYWRhIGxhIHJhbWEgJXMgKGVyYSAlcykuLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQyOSBidWlsdGluL3RhZy5jOjYxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIm5vIGVzIHBvc2libGUgYW5hbGl6YXIgZWwgc3RyaW5nIGRlIGZvcm1hdG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDYwCittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAibm8gc2UgcHVkbyByZXNvbHZlciBIRUFEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEICglcykgcG9pbnRzIG91dHNpZGUgb2YgcmVmcy9oZWFkcy8iCittc2dzdHIgIkhFQUQgKCVzKSBhcHVudGEgZnVlcmEgZGUgcmVmcy9oZWFkcy8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyByZWJhc2VkIGF0ICVzIgorbXNnc3RyICJSYW1hICVzIGVzdMOhIHNpZW5kbyByZWJhc2FkYSBlbiAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIGJpc2VjdGVkIGF0ICVzIgorbXNnc3RyICJSYW1hICVzIGVzdMOhIHNpZW5kbyBiaXNlY2FkYSBlbiAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDIKK21zZ2lkICJjYW5ub3QgY29weSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNvcGlhciBsYSByYW1hIGFjdHVhbCBtaWVudHJhcyBubyBzZSBlc3TDoSBlbiBuaW5ndW5hLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDQKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAibm8gc2UgcHVlZGUgcmVub21icmFyIGxhIHJhbWEgYWN0dWFsIG1pZW50cmFzIG5vIHNlIGVzdMOhIGVuIG5pbmd1bmEuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICJOb21icmUgZGUgcmFtYSBpbnbDoWxpZG86ICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQyCittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIkNhbWJpbyBkZSBub21icmUgZGUgcmFtYSBmYWxsaWRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0NAorbXNnaWQgIkJyYW5jaCBjb3B5IGZhaWxlZCIKK21zZ3N0ciAiQ29waWFkbyBkZSByYW1hIGZhbGxpZG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYSBjb3B5IG9mIGEgbWlzbmFtZWQgYnJhbmNoICclcyciCittc2dzdHIgIkNvcGlhIGNyZWFkYSBkZSBsYSByYW1hIG1hbG5vbWJyYWRhICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICJSYW1hIG1hbCBsbGFtYWRhICclcycgcmVub21icmFkYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoIHJlbmFtZWQgdG8gJXMsIGJ1dCBIRUFEIGlzIG5vdCB1cGRhdGVkISIKK21zZ3N0ciAiwqFSYW1hIHJlbm9tYnJhZGEgYSAlcywgcGVybyBIRUFEIG5vIGVzdMOhIGFjdHVhbGl6YWRvISIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjYKK21zZ2lkICJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJMYSByYW1hIGVzdMOhIHJlbm9tYnJhZGEsIHBlcm8gZmFsbMOzIGxhIGFjdHVhbGl6YWNpw7NuIGRlbCBhcmNoaXZvIGRlICIKKyJjb25maWd1cmFjacOzbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjgKK21zZ2lkICJCcmFuY2ggaXMgY29waWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorIkxhIHJhbWEgZXN0w6EgY29waWFkYSwgcGVybyBmYWxsw7MgbGEgYWN0dWFsaXphY2nDs24gZGVsIGFyY2hpdm8gZGUgIgorImNvbmZpZ3VyYWNpw7NuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoXG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIHN0cmlwcGVkLlxuIgorbXNnc3RyICIiCisiUG9yIGZhdm9yLCBlZGl0YSBsYSBkZXNjcmlwY2nDs24gcGFyYSBsYSByYW1hXG4iCisiJXNcbiIKKyJMYXMgbMOtbmVhcyBxdWUgY29taWVuY2VuIGNvbiAnJWMnIHNlcsOhbiBlbGltaW5hZGFzLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9uZXMgZ2Vuw6lyaWNhcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjAKK21zZ2lkICJzaG93IGhhc2ggYW5kIHN1YmplY3QsIGdpdmUgdHdpY2UgZm9yIHVwc3RyZWFtIGJyYW5jaCIKK21zZ3N0ciAibW9zdHJhciBoYXNoIHkgdGVtYSwgZGFyIGRvcyB2ZWNlcyBwYXJhIHJhbWEgdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIxCittc2dpZCAic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIKK21zZ3N0ciAic3VwcmltaXIgbWVuc2FqZXMgaW5mb3JtYXRpdm9zIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJjb25maWd1cmFuZG8gbW9kbyB0cmFja2luZyAobWlyYXIgZ2l0LXB1bGwoMSkpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNAorbXNnaWQgImRvIG5vdCB1c2UiCittc2dzdHIgIm5vIHVzYXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI2IGJ1aWx0aW4vcmViYXNlLmM6NTEzCittc2dpZCAidXBzdHJlYW0iCittc2dzdHIgInVwc3RyZWFtIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNgorbXNnaWQgImNoYW5nZSB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAiY2FtYmlhciBpbmZvIGRlIHVwc3RyZWFtIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNworbXNnaWQgInVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICJkZXNjb25maWd1cmFuZG8gbGEgaW5mbyBkZSB1cHN0cmVhbSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjgKK21zZ2lkICJ1c2UgY29sb3JlZCBvdXRwdXQiCittc2dzdHIgInVzYXIgc2FsaWRhIGNvbiBjb2xvcmVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOQorbXNnaWQgImFjdCBvbiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgImFjdHVhciBlbiByYW1hcyBkZSB0cmFxdWVvIHJlbW90byIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzEgYnVpbHRpbi9icmFuY2guYzo2MzMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJtb3N0cmFyIHNvbG8gcmFtYXMgcXVlIGNvbnRpZW5lbiBlbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMyIGJ1aWx0aW4vYnJhbmNoLmM6NjM0Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAibW9zdHJhciBzb2xvIHJhbWFzIHF1ZSBubyBjb250aWVuZW4gZWwgY29tbWl0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzNworbXNnaWQgIlNwZWNpZmljIGdpdC1icmFuY2ggYWN0aW9uczoiCittc2dzdHIgIkFjY2lvbmVzIGVzcGVjw61maWNhcyBkZSBnaXQtYnJhbmNoOiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzgKK21zZ2lkICJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAibGlzdGFywqByYW1hcyBkZSByZW1vdGUtdHJhY2tpbmcgeSBsb2NhbGVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MAorbXNnaWQgImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIgorbXNnc3RyICJib3JyYXIgcmFtYXMgdG90YWxtZW50ZSBmdXNpb25hZGFzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MQorbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgImJvcnJhciByYW1hIChpbmNsdXNvIHNpIG5vIGVzdMOhIGZ1c2lvbmFkYSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQyCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgIm1vdmVyL3Jlbm9tYnJhciB1bmEgcmFtYSB5IHN1IHJlZmxvZyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDMKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJtb3Zlci9yZW5vbWJyYXIgdW5hIHJhbWEsIGluY2x1c28gc2kgZWwgZGVzdGlubyBleGlzdGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ0Cittc2dpZCAiY29weSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIKK21zZ3N0ciAiY29waWFyIHVuYSByYW1hIHkgc3UgcmVmbG9nIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NQorbXNnaWQgImNvcHkgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiY29waWFyIHVuYSByYW1hLCBpbmNsdXNvIHNpIGVsIG9iamV0aXZvIGV4aXN0ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDYKK21zZ2lkICJsaXN0IGJyYW5jaCBuYW1lcyIKK21zZ3N0ciAibGlzdGFyIG5vbWJyZXMgZGUgcmFtYXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ3Cittc2dpZCAic2hvdyBjdXJyZW50IGJyYW5jaCBuYW1lIgorbXNnc3RyICJtdWVzdHJhIGVsIG5vbWJyZSBkZSBicmFuY2ggYWN0dWFsIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0OAorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICJjcmVhIGVsIHJlZmxvZyBkZSBsYSByYW1hIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MAorbXNnaWQgImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICJlZGl0YSBsYSBkZXNjcmlwY2nDs24gZGUgbGEgcmFtYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTEKK21zZ2lkICJmb3JjZSBjcmVhdGlvbiwgbW92ZS9yZW5hbWUsIGRlbGV0aW9uIgorbXNnc3RyICJmdWVyemEgbGEgY3JlYWNpw7NuLG1vdmltaWVudG8vcmVub21icmFkbyxib3JyYWRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MgorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJtdWVzdHJhIHNvbG8gcmFtYXMgcXVlIGhhbiBzaWRvIGZ1c2lvbmFkYXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJtdWVzdHJhIHNvbG8gcmFtYXMgcXVlIG5vIGhhbiBzaWRvIGZ1c2lvbmFkYXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU0Cittc2dpZCAibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJtdWVzdHJhIGxhcyByYW1hcyBlbiBjb2x1bW5hcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTcgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MiBidWlsdGluL25vdGVzLmM6NDE1CisjOiBidWlsdGluL25vdGVzLmM6NDE4IGJ1aWx0aW4vbm90ZXMuYzo1ODEgYnVpbHRpbi9ub3Rlcy5jOjU4NAorIzogYnVpbHRpbi90YWcuYzo0MzMKK21zZ2lkICJvYmplY3QiCittc2dzdHIgIm9iamV0byIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTgKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgImltcHJpbWlyIHPDs2xvIGxhcyByYW1hcyBkZWwgb2JqZXRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY2MCBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ4IGJ1aWx0aW4vdGFnLmM6NDQwCittc2dpZCAic29ydGluZyBhbmQgZmlsdGVyaW5nIGFyZSBjYXNlIGluc2Vuc2l0aXZlIgorbXNnc3RyICJvcmRlbmFtaWVudG8geSBmaWx0cmFkbyBzb24gY2FzZS1pbnNlbnNpdGl2ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NjEgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOCBidWlsdGluL3RhZy5jOjQzOAorIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IgorbXNnc3RyICJmb3JtYXRvIHBhcmEgdXNhciBwYXJhIGVsIG91dHB1dCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2ODQgYnVpbHRpbi9jbG9uZS5jOjc4NQorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICLCoUhFQUQgbm8gZW5jb250cmFkbyBhYmFqbyBkZSByZWZzL2hlYWRzISIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MDgKK21zZ2lkICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIHkgLS12ZXJib3NlIHNvbiBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyMyBidWlsdGluL2JyYW5jaC5jOjc3NyBidWlsdGluL2JyYW5jaC5jOjc4NgorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJzZSBuZWNlc2l0YSBlbCBub21icmUgZGUgbGEgcmFtYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTMKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJObyBzZSBwdWVkZSBkYXIgZGVzY3JpcGNpw7NuIGFsIEhFQUQgZGVzYWNvcGxhZG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU4Cittc2dpZCAiY2Fubm90IGVkaXQgZGVzY3JpcHRpb24gb2YgbW9yZSB0aGFuIG9uZSBicmFuY2giCittc2dzdHIgIm5vIHNlIHB1ZWRlIGVkaXRhciBsYSBkZXNjcmlwY2nDs24gZGUgbcOhcyBkZSB1bmEgcmFtYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWl0IG9uIGJyYW5jaCAnJXMnIHlldC4iCittc2dzdHIgIkHDum4gbm8gaGF5IGNvbW1pdHMgZW4gbGEgcmFtYSAnJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gYnJhbmNoIG5hbWVkICclcycuIgorbXNnc3RyICJObyBoYXkgbmluZ3VuYSByYW1hIGxsYW1hZGEgJyVzJy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzgzCittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgZm9yIGEgY29weSBvcGVyYXRpb24iCittc2dzdHIgImRlbWFzaWFkYXMgcmFtYXMgcGFyYSB1bmEgb3BlcmFjacOzbiBkZSBjb3BpYWRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5MgorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgYSByZW5hbWUgb3BlcmF0aW9uIgorbXNnc3RyICJkZW1hc2lhZG9zIGFyZ3VtZW50b3MgcGFyYSB1bmEgb3BlcmFjacOzbiBkZSByZW5vbWJyYWRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5NworbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byBzZXQgbmV3IHVwc3RyZWFtIgorbXNnc3RyICJkZW1hc2lhZG9zIGFyZ3VtZW50b3MgcGFyYSBjb25maWd1cmFyIHVuIG51ZXZvIHVwc3RyZWFtIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyJubyBzZSBwdWRvIGNvbmZpZ3VyYXIgdXBzdHJlYW0gZGUgSEVBRCBhICVzIGN1YW5kbyBlc3RlIG5vIGFwdW50YSBhIG5pbmd1bmEgIgorInJhbWEuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwNCBidWlsdGluL2JyYW5jaC5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaCAnJXMnIgorbXNnc3RyICJubyBoYXkgdGFsIHJhbWEgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImxhIHJhbWEgJyVzJyBubyBleGlzdGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHVuc2V0IHVwc3RyZWFtIgorbXNnc3RyICJkZW1hc2lhZG9zIGFyZ3VtZW50b3MgcGFyYSBkZXNjb25maWd1cmFyIHVwc3RyZWFtIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNQorbXNnaWQgImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyJubyBzZSBwdWVkZSBkZXNjb25maWd1cmFyIHVwc3RyZWFtIGRlIEhFQUQgY3VhbmRvIGVzdGUgbm8gYXB1bnRhIGEgbmluZ3VuYSAiCisicmFtYS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiUmFtYSAnJXMnIG5vIHRpZW5lIGluZm9ybWFjacOzbiBkZSB1cHN0cmVhbSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDEKK21zZ2lkICIiCisiVGhlIC1hLCBhbmQgLXIsIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCB0YWtlIGEgYnJhbmNoIG5hbWUuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHVzZTogLWF8LXIgLS1saXN0IDxwYXR0ZXJuPj8iCittc2dzdHIgIiIKKyJMYXMgb3BjaW9uZXMgLWEsIHkgLXIsIGRlICdnaXQgYnJhbmNoJyBubyB0b21hbiB1biBub21icmUgZGUgcmFtYS5cbiIKKyLCv1F1aXNpc3RlIHVzYXI6IC1hfC1yIC0tbGlzdCA8cGF0csOzbj4/IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0NQorbXNnaWQgIiIKKyJ0aGUgJy0tc2V0LXVwc3RyZWFtJyBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gUGxlYXNlIHVzZSAnLS10cmFjaycgb3IgIgorIictLXNldC11cHN0cmVhbS10bycgaW5zdGVhZC4iCittc2dzdHIgIiIKKyJsYSBvcGNpw7NuICctLXNldC11cHN0cmVhbScgeWEgbm8gZXMgc29wb3J0YWRhLiBDb25zaWRlcmUgdXNhciAnLS10cmFjaycgbyAnLS0iCisic2V0LXVwc3RyZWFtLXRvJyBlbiBjYW1iaW8uIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE1IGJ1aWx0aW4vYnVuZGxlLmM6MjMKK21zZ2lkICJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxvcGNpb25lcz5dIDxmaWxlPiA8Z2l0LXJldi1saXN0IGFyZ3M+IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2IGJ1aWx0aW4vYnVuZGxlLmM6MjgKK21zZ2lkICJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmlsZT4iCittc2dzdHIgImdpdCBidW5kbGUgdmVyaWZ5IFs8b3BjaW9uZXM+XSA8YXJjaGl2bz4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTcgYnVpbHRpbi9idW5kbGUuYzozMworbXNnaWQgImdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iCittc2dzdHIgImdpdCBidW5kbGUgbGlzdC1oZWFkcyA8YXJjaGl2bz4gWzxub21icmUtZGUtcmVmPi4uLl0iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTggYnVpbHRpbi9idW5kbGUuYzozOAorbXNnaWQgImdpdCBidW5kbGUgdW5idW5kbGUgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxhcmNoaXZvPiBbPG5vbWJyZS1kZS1yZWY+Li4uXSIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2NiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNzUKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAibm8gbW9zdHJhciBtZWRpZG9yIGRlIHByb2dyZXNvIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM3NworbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgIm1vc3RyYXIgbWVkaWRvciBkZSBwcm9ncmVzbyIKKworIzogYnVpbHRpbi9idW5kbGUuYzo3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNzkKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIKK21zZ3N0ciAibW9zdHJhciBtZWRpZG9yIGRlIHByb2dyZXNvIGR1cmFudGUgbGEgZmFzZSBkZSBlc2NyaXR1cmEgZGUgb2JqZXRvIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjczIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4MgorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAic2ltaWxhciBhIC0tYWxsLXByb2dyZXNzIGN1YW5kbyBtZWRpZG9yIGRlIHByb2dyZXNvIGVzIG1vc3RyYWRvIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjkzCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAiU2UgbmVjZXNpdGEgdW4gcmVwb3NpdG9yaW8gcGFyYSBhZ3J1cGFyLiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxMDQKK21zZ2lkICJkbyBub3Qgc2hvdyBidW5kbGUgZGV0YWlscyIKK21zZ3N0ciAibm8gbW9zdHJhciBkZXRhbGxlcyBkZWwgYnVuZGxlIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBva2F5XG4iCittc2dzdHIgIiVzIGVzdMOhIGJpZW5cbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNjAKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iCittc2dzdHIgIlNlIG5lY2VzaXRhIHVuIHJlcG9zaXRvcmlvIHBhcmEgZGVzYWdydXBhci4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTY4NgorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgInNlciB2ZXJib3NvOyB0aWVuZSBxdWUgc2VyIGFncmVnYWRvIGFudGVzIGRlIHVuIHN1YmNvbWFuZG8iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTkwIGJ1aWx0aW4vcmVtb3RlLmM6MTcxNworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJTdWItY29tYW5kbyBkZXNjb25vY2lkbzogJXMiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTUKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgLSIKKyJwIHwgPHR5cGU+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD08cGF0aD5dIDxvYmplY3Q+IgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgLSIKKyJwIHwgPHRpcG8+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD08cnV0YT5dIDxvYmpldG8+IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTk2Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gWy0tdGV4dGNvbnYgfCAtLSIKKyJmaWx0ZXJzXSIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gWy0tdGV4dGNvbnYgfCAtLSIKKyJmaWx0ZXJzXSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYxNworbXNnaWQgIm9ubHkgb25lIGJhdGNoIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIgorbXNnc3RyICJzb2xvIHNlIHB1ZWRlIGVzcGVjaWZpY2FyIHVuYSBvcGNpw7NuIGJhdGNoIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM1Cittc2dpZCAiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorbXNnc3RyICI8dGlwbz4gcHVlZGUgc2VyOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNgorbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgIm1vc3RyYXIgZWwgdGlwbyBkZWwgb2JqZXRvIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM3Cittc2dpZCAic2hvdyBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAibW9zdHJhciBlbCB0YW1hw7FvIGRlbCBvYmpldG8iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzkKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgInNhbGlyIGNvbiBjZXJvIGN1YW5kbyBubyBoYXlhIGVycm9yIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQwCittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgInJlYWxpemFyIHByZXR0eS1wcmludCBkZWwgY29udGVuaWRvIGRlbCBvYmpldG8iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDIKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAicGFyYSBvYmpldG9zIGJsb2IsIGVqZWN1dGEgdGV4dGNvbnYgZW4gZWwgY29udGVuaWRvIGRlbCBvYmpldG8iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDQKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gZmlsdGVycyBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJwYXJhIG9iamV0b3MgYmxvYiwgZWplY3V0YSBmaWx0ZXJzIGVuIGVsIGNvbnRlbmlkbyBkZWwgb2JqZXRvIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ1IGdpdC1zdWJtb2R1bGUuc2g6MTAwMgorbXNnaWQgImJsb2IiCittc2dzdHIgImJsb2IiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDYKK21zZ2lkICJ1c2UgYSBzcGVjaWZpYyBwYXRoIGZvciAtLXRleHRjb252Ly0tZmlsdGVycyIKK21zZ3N0ciAidXNlIHVuYSBydXRhIGVzcGVjw61maWNhIHBhcmEgLS10ZXh0Y29udi8tLWZpbHRlcnMiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDgKK21zZ2lkICJhbGxvdyAtcyBhbmQgLXQgdG8gd29yayB3aXRoIGJyb2tlbi9jb3JydXB0IG9iamVjdHMiCittc2dzdHIgInBlcm1pdGEgLXMgeSAtdCBwYXJhIHRyYWJhamFyIGNvbiBvYmpldG9zIHJvdG9zIG8gY29ycnVwdG9zIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ5Cittc2dpZCAiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IgorbXNnc3RyICJzYWxpZGEgYnVmZmVyIC0tYmF0Y2giCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTEKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIm1vc3RyYXIgaW5mbyB5IGNvbnRlbnQgZGUgbG9zIG9iamV0b3MgYWxpbWVudGFkb3MgcG9yIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU1Cittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJtb3N0cmFyIGluZm8gZGUgbG9zIG9iamV0b3MgYWxpbWVudGFkb3MgcG9yIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU5Cittc2dpZCAiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIgorbXNnc3RyICIiCisic2VndWlyIGxvcyBlbmxhY2VzIHNpbWLDs2xpY29zIGVuIGVsIMOhcmJvbCAodXNhZG8gY29uIC0tYmF0Y2ggbyAtLWJhdGNoLWNoZWNrKSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MQorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgIm1vc3RyYXIgdG9kb3MgbG9zIG9iamV0b3MgY29uIC0tYmF0Y2ggbyAtLWJhdGNoLWNoZWNrIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYzCittc2dpZCAiZG8gbm90IG9yZGVyIC0tYmF0Y2gtYWxsLW9iamVjdHMgb3V0cHV0IgorbXNnc3RyICJubyBvcmRlbmFyIGVsIG91dHB1dCBkZSAtLWJhdGNoLWFsbC1vYmplY3RzIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMworbXNnaWQgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxwYXRobmFtZT4uLi4iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxub21icmUtZGUtcnV0YT4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjE0Cittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjEKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgInJlcG9ydGFyIHRvZG9zIGxvcyBhdHJpYnV0b3MgY29uZmlndXJhZG9zIGVuIGVsIGFyY2hpdm8iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIyCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgInVzZSAuZ2l0YXR0cmlidXRlcyBzb2xvIGRlc2RlIGVsIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjUgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMgorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICJsZWVyIG5vbWJyZXMgZGUgYXJjaGl2b3MgZGUgc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjI1IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjcKK21zZ2lkICJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAidGVybWluYXIgcmVnaXN0cm9zIGRlIGVudHJhZGEgeSBzYWxpZGEgY29uIHVuIGNhcsOhY3RlciBOVUwiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjEgYnVpbHRpbi9jaGVja291dC5jOjE0NjQgYnVpbHRpbi9nYy5jOjUzNworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5OQorbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAic3VwcmltaXIgZWwgcmVwb3J0ZSBkZSBwcm9ncmVzbyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOQorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICJtb3N0cmFyIHJ1dGFzIGRlIGVudHJhZGEgcXVlIG5vIGNvbmN1ZXJkYW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MzEKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAiaWdub3JhciBlbCDDrW5kaWNlIGN1YW5kbyBzZSByZXZpc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYzCittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZXNwZWNpZmljYXIgbG9zIG5vbWJyZXMgZGUgcnV0YXMgY29uIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY2Cittc2dpZCAiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iCittc2dzdHIgIi16IHPDs2xvIHRpZW5lIHNlbnRpZG8gY29uIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY4Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgInJ1dGEgbm8gZXNwZWNpZmljYWRhIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MgorbXNnaWQgIi0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorbXNnc3RyICItLXF1aWV0IHNvbG8gZXMgdsOhbGlkbyBjb24gdW4gbm9tYnJlIGRlIHJ1dGEgw7puaWNvIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3NAorbXNnaWQgImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIgorbXNnc3RyICJubyBzZSBwdWVkZSB0ZW5lciBhbWJvcyAtLXF1aWV0IHkgLS12ZXJib3NlIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3NworbXNnaWQgIi0tbm9uLW1hdGNoaW5nIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXZlcmJvc2UiCittc2dzdHIgIi0tbm9uLW1hdGNoaW5nIHPDs2xvIGVzIHbDoWxpZGEgY29uIC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OQorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcGNpb25lcz5dIDxjb250YWN0bz4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjE0Cittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgInRhbWJpw6luIGxlZXIgY29udGFjdG9zIGRlc2RlIHN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29udGFjdDogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYW5hbGl6YXIgZWwgY29udGFjdG86ICVzIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0OAorbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAiY29udGFjdG9zIG5vIGVzcGVjaWZpY2Fkb3MiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMzEKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3BjaW9uZXM+XSBbLS1dIFs8YXJjaGl2bz4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTQ4Cittc2dpZCAic3RhZ2Ugc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMyBvciBhbGwiCittc2dzdHIgInN0YWdlIHRpZW5lIHF1ZSBlc3RhciBlbnRyZSAxIHkgMyBvIGFsbCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICJyZXZpc2FyIHRvZG9zIGxvcyBhcmNoaXZvcyBlbiBlbCDDrW5kaWNlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY1Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICJmb3J6YXIgc29icmVlc2NyaXR1cmEgZGUgbG9zIGFyY2hpdm9zIGV4aXN0ZW50ZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjcKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICIiCisibm8gaGF5IGFkdmVydGVuY2lhcyBwYXJhIGxvcyBhcmNoaXZvcyBleGlzdGVudGVzIHkgbG9zIGFyY2hpdm9zIG5vIGVzdMOhbiBlbiAiCisiZWwgw61uZGljZSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2OQorbXNnaWQgImRvbid0IGNoZWNrb3V0IG5ldyBmaWxlcyIKK21zZ3N0ciAibm8gcmV2aXNhciBhcmNoaXZvcyBudWV2b3MiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzEKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAiYWN0dWFsaXphciBpbmZvcm1hY2nDs24gZGUgZXN0YWRvIGVuIGVsIGFyY2hpdm8gw61uZGljZSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGVlciBsaXN0YSBkZSBydXRhcyBkZXNkZSBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NworbXNnaWQgIndyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcyIKK21zZ3N0ciAiZXNjcmliaXIgZWwgY29udGVuaWRvIGVuIHVuIGFyY2hpdm8gdGVtcG9yYWwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzggYnVpbHRpbi9jb2x1bW4uYzozMQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDMKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDExIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjcyCittc2dpZCAic3RyaW5nIgorbXNnc3RyICJzdHJpbmciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzkKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICJjdWFuZG8gY3JlZSBhcmNoaXZvcywgYW50ZXBvbmVyIDxzdHJpbmc+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTgxCittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgImNvcGlhciBsb3MgYXJjaGl2b3MgZGVsIHN0YWdlIG5vbWJyYWRvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzEKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBbPG9wY2lvbmVzPl0gIDxyYW1hPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMyCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxvcGNpb25lcz5dIFs8cmFtYT5dIC0tIDxhcmNoaXZvPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3Cittc2dpZCAiZ2l0IHN3aXRjaCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIgorbXNnc3RyICJnaXQgc3dpdGNoIFs8b3BjaW9uZXM+XSBbPHJhbWE+XSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyCittc2dpZCAiZ2l0IHJlc3RvcmUgWzxvcHRpb25zPl0gWy0tc291cmNlPTxicmFuY2g+XSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCByZXN0b3JlIFs8b3BjaW9uZXM+XSBbLS1zb3VyY2U9PHJhbWE+XSAtLSA8YXJjaGl2bz4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzUgYnVpbHRpbi9jaGVja291dC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAicnV0YSAnJXMnIG5vIHRpZW5lIG51ZXN0cmEgdmVyc2nDs24iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcgYnVpbHRpbi9jaGVja291dC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJydXRhICclcycgbm8gdGllbmUgc3UgdmVyc2nDs24iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgYWxsIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAicnV0YSAnJXMnIG5vIHRpZW5lIHRvZGFzIGxhcyB2ZXJzaW9uZXMgbmVjZXNhcmlhcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgInJ1dGEgJyVzJyBubyB0aWVuZSB2ZXJzaW9uZXMgbmVjZXNhcmlhcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAicnV0YSAnJXMnOiBubyBzZSBwdWVkZSBmdXNpb25hciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiSW5jYXBheiBkZSBhZ3JlZ2FyIHJlc3VsdGFkb3MgZGUgZnVzacOzbiBhICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICJSZWNyZWFkbyAlZCBjb25mbGljdG8gZGUgbWVyZ2UiCittc2dzdHJbMV0gIlJlY3JlYWRvcyAlZCBjb25mbGljdG9zIGRlIG1lcmdlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tICVzIgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gJXMiCittc2dzdHJbMF0gIkFjdHVhbGl6YWRhICVkIHJ1dGEgcGFyYSAlcyIKK21zZ3N0clsxXSAiQWN0dWFsaXphZGFzICVkIHJ1dGFzIHBhcmEgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyWzBdICJBY3R1YWxpemFkYSAlZCBydXRhIGRlc2RlIGVsIGluZGV4IgorbXNnc3RyWzFdICJBY3R1YWxpemFkYXMgJWQgcnV0YXMgZGVzZGUgZWwgaW5kZXgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTIgYnVpbHRpbi9jaGVja291dC5jOjQxNSBidWlsdGluL2NoZWNrb3V0LmM6NDE4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiJyVzJyBubyBwdWVkZSBzZXIgdXNhZGEgY29uIHJ1dGFzIGFjdHVhbGl6YWRhcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyNSBidWlsdGluL2NoZWNrb3V0LmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJyVzJyBubyBwdWVkZSBzZXIgdXNhZG8gY29uICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYWN0dWFsaXphciBydXRhcyB5IGNhbWJpYXIgYSBsYSByYW1hICclcycgYWwgbWlzbW8gdGllbXBvLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZWl0aGVyICclcycgb3IgJyVzJyBpcyBzcGVjaWZpZWQiCittc2dzdHIgIm5pICclcycgbyAnJXMnIGVzdMOhbiBlc3BlY2lmaWNhZG9zIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbXVzdCBiZSB1c2VkIHdoZW4gJyVzJyBpcyBub3Qgc3BlY2lmaWVkIgorbXNnc3RyICInJXMnIHRpZW5lIHF1ZSBzZXIgdXNhZG8gY3VhbmRvICclcycgbm8gZXMgZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQ1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBvciAnJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiclcycgbyAnJXMnIG5vIHB1ZWRlIHNlciB1c2FkbyBjb24gJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MDkgYnVpbHRpbi9jaGVja291dC5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgaXMgdW5tZXJnZWQiCittc2dzdHIgInJ1dGEgJyVzJyBubyBlc3RhIGZ1c2lvbmFkYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY4NCBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjEwNgorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICJuZWNlc2l0YXMgcmVzb2x2ZXIgdHUgw61uZGljZSBhY3R1YWwgcHJpbWVybyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IGNvbnRpbnVlIHdpdGggc3RhZ2VkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyBmaWxlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZWRlIGNvbnRpbnVhciBjb24gbG9zIGNhbWJpb3MgZW4gc3RhZ2UgZW4gbG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3M6XG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuIG5vdCBkbyByZWZsb2cgZm9yICclcyc6ICVzXG4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIGhhY2VyIHJlZmxvZyBwYXJhICclcyc6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NzkKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCBlc3TDoSBhaG9yYSBlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4MyBidWlsdGluL2Nsb25lLmM6NzE3Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBIRUFEIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGFjdHVhbGl6YXIgIEhFQUQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiUmVpbmljaWFyIHJhbWEgJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICJZYSBlbiAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlJhbWEgcmVpbmljaWFkYSB5IGNhbWJpYWRhIGEgJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIkNhbWJpYWRvIGEgbnVldmEgcmFtYSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiQ2FtYmlhZG8gYSByYW1hICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk0OQorIywgYy1mb3JtYXQKK21zZ2lkICIgLi4uIGFuZCAlZCBtb3JlLlxuIgorbXNnc3RyICIgLi4uIHkgJWQgbcOhcy5cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorIlBlbGlncm86IGVzdMOhcyBzYWxpZW5kbyAlZCBjb21taXQgYXRyw6FzLCBubyBlc3TDoSBjb25lY3RhZG9cbiIKKyJhIG5pbmd1bmEgcmFtYTpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzFdICIiCisiUGVsaWdybzogZXN0w6FzIHNhbGllbmRvICVkIGNvbW1pdHMgYXRyw6FzLCBubyBlc3TDoSBjb25lY3RhZG9cbiIKKyJhIG5pbmd1bmEgcmFtYTpcbiIKKyJcbiIKKyIlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAiIgorIlNpIHF1aWVyZXMgY29uc2VydmFybG8gY3JlYW5kbyB1bmEgbnVldmEgcmFtYSwgZXN0ZSBlcyB1biBidWVuIG1vbWVudG9cbiIKKyJwYXJhIGhhY2VybG86XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG51ZXZvLW5vbWJyZS1kZS1yYW1hPiAlc1xuIgorIlxuIgorbXNnc3RyWzFdICIiCisiU2kgcXVpZXJlcyBjb25zZXJ2YXJsb3MgY3JlYW5kbyB1bmEgbnVldmEgcmFtYSwgZXN0ZSBlcyB1biBidWVuIG1vbWVudG9cbiIKKyJwYXJhIGhhY2VybG86XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5vbWJyZS1kZS1yYW1hPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwOQorbXNnaWQgImludGVybmFsIGVycm9yIGluIHJldmlzaW9uIHdhbGsiCittc2dzdHIgImVycm9yIGludGVybm8gZW4gY2FtaW5vIGRlIHJldmlzacOzbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTMKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAiTGEgcG9zaWNpw7NuIHByZXZpYSBkZSBIRUFEIGVyYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTMgYnVpbHRpbi9jaGVja291dC5jOjEzMTUKK21zZ2lkICJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJFc3TDoXMgZW4gdW5hIHJhbWEgcG9yIG5hY2VyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBjb3VsZCBiZSBib3RoIGEgbG9jYWwgZmlsZSBhbmQgYSB0cmFja2luZyBicmFuY2guXG4iCisiUGxlYXNlIHVzZSAtLSAoYW5kIG9wdGlvbmFsbHkgLS1uby1ndWVzcykgdG8gZGlzYW1iaWd1YXRlIgorbXNnc3RyICIiCisiJyVzJyBwdWVkZSBzZXIgdGFudG8gdW4gYXJjaGl2byBsb2NhbCBjb21vIHVuYSByYW1hIGRlIHJhc3RyZW8uXG4iCisiUG9yIGZhdm9yIHVzZSAtLSAoeSBvcGNpb25hbG1lbnRlIC0tbm8tZ3Vlc3MpIHBhcmEgZGVzYW1iaWd1YXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM1Cittc2dpZCAiIgorIklmIHlvdSBtZWFudCB0byBjaGVjayBvdXQgYSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIG9uLCBlLmcuICdvcmlnaW4nLFxuIgorInlvdSBjYW4gZG8gc28gYnkgZnVsbHkgcXVhbGlmeWluZyB0aGUgbmFtZSB3aXRoIHRoZSAtLXRyYWNrIG9wdGlvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luLzxuYW1lPlxuIgorIlxuIgorIklmIHlvdSdkIGxpa2UgdG8gYWx3YXlzIGhhdmUgY2hlY2tvdXRzIG9mIGFuIGFtYmlndW91cyA8bmFtZT4gcHJlZmVyXG4iCisib25lIHJlbW90ZSwgZS5nLiB0aGUgJ29yaWdpbicgcmVtb3RlLCBjb25zaWRlciBzZXR0aW5nXG4iCisiY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW4gaW4geW91ciBjb25maWcuIgorbXNnc3RyICIiCisiU2kgcXVlcsOtYXMgaGFjZXIgdW4gY2hlY2sgb3V0IGEgdW5hIHJhbWEgcmFzdHJlYWRhIHJlbW90YSwgY29tbyAnb3JpZ2luJyxcbiIKKyJwdWVkZXMgaGFjZXJsbyBwcm9wb3JjaW9uYW5kbyBlbCBub21icmUgY29tcGxldG8gY29uIGxhIG9wY2nDs24gLS10cmFjazpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luLzxub21icmU+XG4iCisiXG4iCisiU2kgcXVpc2llcmFzIHF1ZSBzaWVtcHJlIGxvcyBjaGVja291dHMgZGUgbm9tYnJlcyBhbWJpZ3VvcyBwcmVmaWVyYW4gdW5hICIKKyJyYW1hXG4iCisiZGUgbm9tYnJlIDxub21icmU+IHJlbW90YSwgY29tbyAnb3JpZ2luJywgY29uc2lkZXJhIGNvbmZpZ3VyYXJcbiIKKyJjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbiBlbiB0dSBjb25maWd1cmFjacOzbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbWF0Y2hlZCBtdWx0aXBsZSAoJWQpIHJlbW90ZSB0cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiJyVzJyBjb25jb3Jkw7MgY29uIG11bHRpcGxlcyAoJWQpIHJhbWFzIGRlIHJhc3RyZW8gcmVtb3RvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIxMQorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCIKK21zZ3N0ciAic29sbyB1bmEgcmVmZXJlbmNpYSBlc3BlcmFkYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iCittc2dzdHIgInNvbG8gdW5hIHJlZmVyZW5jaWEgZXNwZXJhZGEsICVkIGVudHJlZ2FkYXMuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI3NCBidWlsdGluL3dvcmt0cmVlLmM6MjgzIGJ1aWx0aW4vd29ya3RyZWUuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJyZWZlcmVuY2lhIGludsOhbGlkYTogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjg3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAibGEgcmVmZXJlbmNpYSBubyBlcyBuIMOhcmJvbDogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgdGFnICclcyciCittc2dzdHIgInNlIGVzcGVyYWJhIHVuIGJyYW5jaCwgc2Ugb2J0dXZvIHRhZyAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IHJlbW90ZSBicmFuY2ggJyVzJyIKK21zZ3N0ciAic2UgZXNwZXJhIHVuYSByYW1hLCBzZSBvYnR1dm8gdW5hIHJhbWEgcmVtb3RhICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgJyVzJyIKK21zZ3N0ciAic2UgZXNwZXJhYmEgYnJhbmNoLCBzZSBvYnV0byAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IGNvbW1pdCAnJXMnIgorbXNnc3RyICJzZSBlc3BlcmEgdW5hIHJhbWEsIHNlIG9idHV2byBjb21taXQgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNTYKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgbWVyZ2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IG1lcmdlIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZWRlIGNhbWJpYXIgZGUgYnJhbmNoIGR1cmFudGUgdW4gbWVyZ2VcbiIKKyJDb25zaWRlcmEgXCJnaXQgbWVyZ2UgLS1xdWl0XCIgbyBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzYwCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvblxuIgorIkNvbnNpZGVyIFwiZ2l0IGFtIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZWRlIGNhbWJpYXIgZGUgYnJhbmNoIGVuIG1lZGlvIGRlIHVuYSBzZXNpw7NuIGRlIGFtXG4iCisiQ29uc2lkZXJhIFwiZ2l0IGFtIC0tcXVpdFwiIG8gXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2NAorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSByZWJhc2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJlYmFzZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJubyBzZSBwdWVkZSBjYW1iaWFyIGRlIGJyYW5jaCBkdXJhbnRlIHVuIHJlYmFzZVxuIgorIkNvbnNpZGVyYSBcImdpdCByZWJhc2UgLS1xdWl0XCIgbyBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY4Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIGNoZXJyeS1waWNraW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisibm8gc2UgcHVlZGUgY2FtYmlhciBkZSBicmFuY2ggZHVyYW50ZSB1biBjaGVycnktcGlja1xuIgorIkNvbnNpZGVyYSBcImdpdCBjaGVycnktcGljayAtLXF1aXRcIiBvIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzIKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmV2ZXJ0aW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgcmV2ZXJ0IC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZWRlIGNhbWJpYXIgZGUgYnJhbmNoIGR1cmFudGUgdW4gcmV2ZXJ0XG4iCisiQ29uc2lkZXJhIFwiZ2l0IHJldmVydCAtLXF1aXRcIiBvIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzYKK21zZ2lkICJ5b3UgYXJlIHN3aXRjaGluZyBicmFuY2ggd2hpbGUgYmlzZWN0aW5nIgorbXNnc3RyICJlc3TDoXMgY2FtYmlhbmRvIHJhbWFzIGR1cmFudGUgdW4gYmlzZWN0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4MworbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICJydXRhcyBubyBwdWVkZW4gc2VyIHVzYWRhcyBjb24gY2FtYmlvcyBkZSByYW1hIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4NiBidWlsdGluL2NoZWNrb3V0LmM6MTM5MCBidWlsdGluL2NoZWNrb3V0LmM6MTM5NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICInJXMnIG5vIHB1ZWRlIHNlciB1c2FkbyBjb24gY2FtYmlvcyBkZSByYW1hcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzOTggYnVpbHRpbi9jaGVja291dC5jOjE0MDEgYnVpbHRpbi9jaGVja291dC5jOjE0MDQKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDA5IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIgorbXNnc3RyICInJXMnIG5vIHB1ZWRlIHNlciB1c2FkbyBjb24gJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgdGFrZSA8c3RhcnQtcG9pbnQ+IgorbXNnc3RyICInJXMnIG5vIHB1ZWRlIHRvbWFyIDxwdW50byBkZSBwYXJ0aWRhPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0ICclcyciCittc2dzdHIgIk5vIHNlIHB1ZWRlIGNhbWJpYXIgcmFtYSBhIHVuICclcycgc2luIGNvbW1pdHMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDI2Cittc2dpZCAibWlzc2luZyBicmFuY2ggb3IgY29tbWl0IGFyZ3VtZW50IgorbXNnc3RyICJmYWx0YSBicmFuY2ggbyBjb21taXQgY29tbyBhcmd1bWVudG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDY4IGJ1aWx0aW4vY2xvbmUuYzo5MSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjcyCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNSBidWlsdGluL2ZldGNoLmM6MTY3IGJ1aWx0aW4vbWVyZ2UuYzoyODYKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI3IGJ1aWx0aW4vcHVsbC5jOjExOCBidWlsdGluL3B1c2guYzo1NjMKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc0Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJmb3J6YXIgZWwgcmVwb3J0ZSBkZSBwcm9ncmVzbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjkKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAicmVhbGl6YXIgdW5hIGZ1c2nDs24gZGUgdHJlcyB2w61hcyBjb24gbGEgcmFtYSBudWV2YSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NzAgYnVpbHRpbi9sb2cuYzoxNjkwIHBhcnNlLW9wdGlvbnMuaDozMjIKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAiZXN0aWxvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ3MQorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgImNvbmZsaWN0byBkZSBlc3RpbG9zIChtZXJnZSBvIGRpZmYzKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODMgYnVpbHRpbi93b3JrdHJlZS5jOjQ5NgorbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAiZGVzYWNvcGxhciBIRUFEIGVuIGVsIGNvbW1pdCBub21icmFkbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODQKK21zZ2lkICJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAiY29uZmlndXJhciBpbmZvIGRlIHVwc3RyZWFtIHBhcmEgdW5hIHJhbWEgbnVldmEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg2Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgImZvcnphciBlbCBjaGVja291dCAoZGVzY2FydGFyIG1vZGlmaWNhY2lvbmVzIGxvY2FsZXMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4OAorbXNnaWQgIm5ldy1icmFuY2giCittc2dzdHIgIm51ZXZhLXJhbWEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg4Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICJudWV2YSByYW1hIG5vIGVtcGFyZW50YWRhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ5MCBidWlsdGluL21lcmdlLmM6Mjg5Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICJhY3R1YWxpemFyIGFyY2hpdm9zIGlnbm9yYWRvcyAoZGVmYXVsdCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDkzCittc2dpZCAiZG8gbm90IGNoZWNrIGlmIGFub3RoZXIgd29ya3RyZWUgaXMgaG9sZGluZyB0aGUgZ2l2ZW4gcmVmIgorbXNnc3RyICJubyByZXZpc2Ugc2kgb3RybyDDoXJib2wgZGUgdHJhYmFqbyBjb250aWVuZSBsYSByZWYgZW50cmVnYWRhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUwNgorbXNnaWQgImNoZWNrb3V0IG91ciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiaGFjZXIgY2hlY2tvdXQgYSAgbnVlc3RyYSB2ZXJzacOzbiBwYXJhIGFyY2hpdm9zIHNpbiBmdXNpb25hciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MDkKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiaGFjZXIgY2hlY2tvdXQgYSBzdSB2ZXJzacOzbiBwYXJhIGxvcyBhcmNoaXZvcyBzaW4gZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTEzCittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICJubyBsaW1pdGFyIHBhdGhzcGVjcyBhIGRpc3BlcnNhciBlbnRyYWRhcyBzb2xhbWVudGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTY1Cittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYiwgLUIgeSAtLW9ycGhhbiBzb24gbXV0dWFtZW50ZSBleGNsdXNpdmFzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU2OAorbXNnaWQgIi1wIGFuZCAtLW92ZXJsYXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLXAgeSAtLW92ZXJsYXkgc29uIG11dHVhbWVudGUgZXhjbHVzaXZhcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2MDUKK21zZ2lkICItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIi0tdHJhY2sgbmVjZXNpdGEgZWwgbm9tYnJlIGRlIHVuYSByYW1hIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYxMAorbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAiZmFsdGEgbm9tYnJlIGRlIHJhbWE7IHBydWViYSAtYiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gcmVzb2x2ZXIgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjU4Cittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgImVzcGVjaWZpY2FjacOzbiBkZSBydXRhIGludsOhbGlkYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBjb21taXQgYW5kIGEgYnJhbmNoICclcycgY2Fubm90IGJlIGNyZWF0ZWQgZnJvbSBpdCIKK21zZ3N0ciAiJyVzJyBubyBlcyB1biBjb21taXQgeSB1bmEgcmFtYSAnJXMnIG5vIHB1ZWRlIHNlciBjcmVhZGEgZGVzZGUgZXN0ZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIG5vIHRvbWEgdW4gYXJndW1lbnRvIGRlIHJ1dGEgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NzgKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWRldGFjaCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgZXMgaW5jb21wYXRpYmxlIGNvbiAtLWRldGFjaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2ODEgYnVpbHRpbi9yZXNldC5jOjMyNCBidWlsdGluL3N0YXNoLmM6MTUwNgorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGVzIGluY29tcGF0aWJsZSBjb24gLS1wYXRjaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2OTIKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSB5IC0tbWVyZ2Ugc29uIGluY29tcGF0aWJsZXMgY3VhbmRvXG4iCisic2UgcmV2aXNhIGZ1ZXJhIGRlbCDDrW5kaWNlLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2OTcKK21zZ2lkICJ5b3UgbXVzdCBzcGVjaWZ5IHBhdGgocykgdG8gcmVzdG9yZSIKK21zZ3N0ciAiZGViZXMgZXNwZWNpZmljYXIgcGF0aChzKSBwYXJhIHJlc3RhdXJhciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjMgYnVpbHRpbi9jaGVja291dC5jOjE3MjUgYnVpbHRpbi9jaGVja291dC5jOjE3NzQKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc2IGJ1aWx0aW4vY2xvbmUuYzoxMjEgYnVpbHRpbi9yZW1vdGUuYzoxNzAKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcyIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTIgYnVpbHRpbi93b3JrdHJlZS5jOjQ5NAorbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAicmFtYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjQKK21zZ2lkICJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAiY3JlYXIgeSBoYWNlciBjaGVja291dCBhIHVuYSBudWV2YSByYW1hIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyNgorbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgY2hlY2tvdXQgYSBicmFuY2giCittc2dzdHIgImNyZWFyL3JlaW5pY2lhciB5IGhhY2VyIGNoZWNrb3V0IGEgdW5hIHJhbWEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI3Cittc2dpZCAiY3JlYXRlIHJlZmxvZyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAiY3JlYXIgdW4gcmVmbG9nIHBhcmEgdW5hIG51ZXZhIHJhbWEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI5Cittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPicgKGRlZmF1bHQpIgorbXNnc3RyICJhZGl2aW5hciBzZWd1bmRhIG9wY2nDs24gJ2dpdCBjaGVja291dCA8bm8taGF5LXRhbC1yYW1hPicgKGRlZmF1bHQpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTczMAorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUgKGRlZmF1bHQpIgorbXNnc3RyICJ1c2FyIG1vZG8gb3ZlcmxheSAoZGVmYXVsdCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc1Cittc2dpZCAiY3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoIgorbXNnc3RyICJjcmVhciB5IGhhY2VyIHN3aXRjaCBhIHVuYSBudWV2YSByYW1hIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3NworbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgc3dpdGNoIHRvIGEgYnJhbmNoIgorbXNnc3RyICJjcmVhci9yZWluaWNpYXIgeSBoYWNlciBzd2l0Y2ggYSB1bmEgcmFtYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzkKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBzd2l0Y2ggPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgImFkaXZpbmFyIHNlZ3VuZGEgb3BjacOzbiAnZ2l0IGNoZWNrb3V0IDxuby1oYXktdGFsLXJhbWE+JyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3ODEKK21zZ2lkICJ0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMiCittc2dzdHIgImRlc2NhcnRhciBtb2RpZmljYWNpb25lcyBsb2NhbGVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMworbXNnaWQgIndoaWNoIHRyZWUtaXNoIHRvIGNoZWNrb3V0IGZyb20iCittc2dzdHIgImRlIHF1w6kgw6FyYm9sIGhhY2VyIGVsIGNoZWNrb3V0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxNQorbXNnaWQgInJlc3RvcmUgdGhlIGluZGV4IgorbXNnc3RyICJyZXN0YXVyYXIgZWwgaW5kZXgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODE3Cittc2dpZCAicmVzdG9yZSB0aGUgd29ya2luZyB0cmVlIChkZWZhdWx0KSIKK21zZ3N0ciAicmVzdGF1cmFyIGVsIMOhcmJvbCBkZSB0cmFiYWpvIChkZWZhdWx0KSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTkKK21zZ2lkICJpZ25vcmUgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiaWdub3JhciBlbnRyYWRhcyBubyBmdXNpb25hZGFzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgyMAorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUiCittc2dzdHIgInVzYXIgbW9kbyBvdmVybGF5IgorCisjOiBidWlsdGluL2NsZWFuLmM6MjgKK21zZ2lkICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHLDs24+XSBbLXggfCAtWF0gWy0tXSA8cnV0YXM+Li4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiQm9ycmFuZG8gJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICJTZXJhIGJvcnJhZG8gJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAiU2FsdGFuZG8gcmVwb3NpdG9yaW8gJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJTZSBzYWx0YXJhIHJlcG9zaXRvcmlvICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJmYWxsw7MgYWwgYm9ycmFyICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxzdGF0ICVzXG4iCittc2dzdHIgIm5vIHNlIHB1ZG8gbHN0YXQgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nXG4iCittc2dzdHIgIiIKKyJBeXVkYSByw6FwaWRhOlxuIgorIjEgICAgICAgICAgLSBzZWxlY2Npb25hIHVuIG9iamV0byBwb3IgbnVtZXJvXG4iCisiZm9vICAgICAgICAtIHNlbGVjY2lvbmEgdW4gb2JqZXRvIGJhc2FkbyBlbiB1biBwcmVmaWpvIMO6bmljb1xuIgorIiAgICAgICAgICAgLSAodmFjw61vKSBubyBlbGVnaXIgbmFkYVxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZ1xuIgorbXNnc3RyICIiCisiQXl1ZGEgcsOhcGlkYTpcbiIKKyIxICAgICAgICAgIC0gc2VsZWNjaW9uYSB1biBvYmpldG8gw7puaWNvXG4iCisiMy01ICAgICAgICAtIHNlbGVjY2lvbmEgdW4gcmFuZ28gZGUgb2JqZXRvc1xuIgorIjItMyw2LTkgICAgLSBzZWxlY2Npb25hIG3Dumx0aXBsZXMgcmFuZ29zXG4iCisiZm9vICAgICAgICAtIHNlbGVjY2lvbmEgdW4gb2JqZXRvIGJhc2FkbyBlbiB1biBwcmVmaWpvIMO6bmljb1xuIgorIi0uLi4gICAgICAgLSBkZS1zZWxlY2Npb25hciBvYmpldG9zIGVzcGVjaWZpY2Fkb3NcbiIKKyIqICAgICAgICAgIC0gZXNjb2dlciB0b2RvcyBsb3Mgb2JqZXRvc1xuIgorIiAgICAgICAgICAgLSAodmFjw61vKSB0ZXJtaW5hciBzZWxlY2Npw7NuXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTc1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT9cbiIKK21zZ3N0ciAiwr9BaGggKCVzKT9cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnB1dCBpZ25vcmUgcGF0dGVybnM+PiAiCittc2dzdHIgIklucHV0IGlnbm9yYSBsb3MgcGF0cm9uZXMgPj4gIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICJQRUxJR1JPOiBObyBzZSBwdWVkZSBlbmNvbnRyYXIgb2JqZXRvcyBxdWUgY29uY3VlcmRlbiBjb246ICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzIxCittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAiU2VsZWNjaW9uYXIgb2JqZXRvcyBwYXJhIGJvcnJhciIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBrZWVwIFt5L05dIGFzIGlzCisjOiBidWlsdGluL2NsZWFuLmM6NzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92ZSAlcyBbeS9OXT8gIgorbXNnc3RyICLCv0JvcnJhciAlcyBbeS9OXT8gIgorCisjOiBidWlsdGluL2NsZWFuLmM6Nzk1Cittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gY29tZW56YXIgbGEgbGltcGllemFcbiIKKyJmaWx0cmFyIHBvciBwYXRyw7NuICAgLSBleGNsdXllIG9iamV0b3MgZGVsIGJvcnJhZG8gXG4iCisiZWxlZ2lyIHBvciBuw7ptZXJvcyAgIC0gc2VsZWNjaW9uYSBvYmpldG9zIGEgc2VyIGJvcnJhZG9zIHBvciBudW1lcm9cbiIKKyJwcmVndW50YXIgY2FkYSB1bm8gICAgIC0gY29uZmlybWFyIGNhZGEgYm9ycmFkbyAoY29tbyBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHBhcmFyIGxpbXBpZXphXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIGVzdGEgdmVudGFuYVxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBheXVkYSBwYXJhIHNlbGVjY2nDs24gZGUgb3BjaW9uZXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MzEKK21zZ2lkICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIKK21zZ2lkX3BsdXJhbCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbXM6IgorbXNnc3RyWzBdICJTZSBlbGltaW5hcsOhIGVsIHNpZ3VpZW50ZSBvYmpldG86IgorbXNnc3RyWzFdICJTZSBlbGltaW5hcsOhbiBsb3Mgc2lndWllbnRlcyBvYmpldG9zOiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg0NworbXNnaWQgIk5vIG1vcmUgZmlsZXMgdG8gY2xlYW4sIGV4aXRpbmcuIgorbXNnc3RyICJObyBoYXkgbcOhcyBhcmNoaXZvcyBwYXJhIGxpbXBpYXIsIHNhbGllbmRvLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwOQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICJubyBpbXByaW1pciBub21icmVzIGRlIGFyY2hpdm9zIGJvcnJhZG9zIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTExCittc2dpZCAiZm9yY2UiCittc2dzdHIgImZvcnphciIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMgorbXNnaWQgImludGVyYWN0aXZlIGNsZWFuaW5nIgorbXNnc3RyICJsaW1waWV6YSBpbnRlcmFjdGl2YSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAiYm9ycmFyIGRpcmVjdG9yaW9zIGNvbXBsZXRvcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNSBidWlsdGluL2Rlc2NyaWJlLmM6NTYyIGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjQKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4OSBidWlsdGluL2xvZy5jOjE3NyBidWlsdGluL2xvZy5jOjE3OQorIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NyBidWlsdGluL25hbWUtcmV2LmM6NTI2IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjgKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJwYXR0ZXJuIgorbXNnc3RyICJwYXRyw7NuIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE2Cittc2dpZCAiYWRkIDxwYXR0ZXJuPiB0byBpZ25vcmUgcnVsZXMiCittc2dzdHIgImFncmVnYXIgPHBhdHLDs24+IHBhcmEgaWdub3JhciByZWdsYXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTcKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICJib3JyYXIgYXJjaGl2b3MgaWdub3JhZG9zLCB0YW1iacOpbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxOQorbXNnaWQgInJlbW92ZSBvbmx5IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgImJvcnJhciBzb2xvIGFyY2hpdm9zIGlnbm9yYWRvcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkzNworbXNnaWQgIi14IGFuZCAtWCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLXggeSAtWCBubyBwdWVkZW4gc2VyIHVzYWRhcyBqdW50YXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDEKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgY29uZmlndXJhZG8gY29tbyB0cnVlIHkgbmluZ3VubyAtaSwgLW4sIG5pIC1mIGVudHJlZ2Fkb3M7ICIKKyJyZWh1c2FuZG8gZWwgY2xlYW4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDQKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKyJyZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0IGVuIHRydWUgeSBuaW5ndW5vIC1pLCAtbiwgbmkgLWYgZW50cmVnYWRvczsgIgorInJlaHVzYW5kbyBlbCBjbGVhbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ1Cittc2dpZCAiZ2l0IGNsb25lIFs8b3B0aW9ucz5dIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgImdpdCBjbG9uZSBbPG9wY2lvbmVzPl0gWy0tXSA8cmVwbz4gWzxkaXJlY3RvcmlvPl0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MworbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICJubyBjcmVhciBjaGVja291dCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk0IGJ1aWx0aW4vY2xvbmUuYzo5NiBidWlsdGluL2luaXQtZGIuYzo0ODkKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgImNyZWFyIHVuIHJlcG9zaXRvcmlvIHZhY8OtbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgImNyZWFyIHVuIHJlcG9zaXRvcmlvIGVzcGVqbyAoaW1wbGljYSB2YWPDrW8pIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwCittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgImNsb25hciBkZSB1biByZXBvc2l0b3JpbyBsb2NhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMgorbXNnaWQgImRvbid0IHVzZSBsb2NhbCBoYXJkbGlua3MsIGFsd2F5cyBjb3B5IgorbXNnc3RyICJubyB1c2FyIGhhcmRsaW5rcywgc2llbXByZSBjb3BpYXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY29uZmlndXJhciBjb21vIHJlcG9zaXRvcmlvIGNvbXBhcnRpZG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJwYXRoc3BlYyIKK21zZ3N0ciAicGF0aHNwZWMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICJpbmljaWFsaXphciBzdWJtw7NkdWxvcyBlbiBlbCBjbG9uYWRvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEwCittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgY2xvbmVkIGluIHBhcmFsbGVsIgorbXNnc3RyICJudW1lcm8gZGUgc3VibcOzZHVsb3MgY2xvbmFkb3MgZW4gcGFyYWxlbG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTEgYnVpbHRpbi9pbml0LWRiLmM6NDg2Cittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICJkaXJlY3RvcmlvLXRlbXBsYXRlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEyIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NworbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgImRpcmVjdG9yaW8gZGVsIGN1YWwgbG9zIHRlbXBsYXRlcyBzZXLDoW4gdXNhZG9zIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE0IGJ1aWx0aW4vY2xvbmUuYzoxMTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDcKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTEyCittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgInJlcG9zaXRvcmlvIGRlIHJlZmVyZW5jaWEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE0Cittc2dpZCAidXNlIC0tcmVmZXJlbmNlIG9ubHkgd2hpbGUgY2xvbmluZyIKK21zZ3N0ciAidXNhLS1yZWZlcmVuY2UgIHNvbGFtZW50ZSBzaSBlc3TDoXMgY2xvbmFkbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOSBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ2CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDEgYnVpbHRpbi9yZXBhY2suYzozMjcKK21zZ2lkICJuYW1lIgorbXNnc3RyICJub21icmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjAKK21zZ2lkICJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iCittc2dzdHIgInVzZSA8bm9tYnJlPiBlbiBsdWdhciBkZSAnb3JpZ2luJyBwYXJhIHJhc3RyZWFyIHVwc3RyZWFtIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIyCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAiY2hlY2tvdXQgPHJhbWE+IGVuIGx1Z2FyIGRlIEhFQUQgcmVtb3RhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0Cittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAicnV0YSBwYXJhIGdpdC11cGxvYWQtcGFjayBlbiBlbCByZW1vdG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjUgYnVpbHRpbi9mZXRjaC5jOjE2OCBidWlsdGluL2dyZXAuYzo4MjgKKyM6IGJ1aWx0aW4vcHVsbC5jOjIwNworbXNnaWQgImRlcHRoIgorbXNnc3RyICJwcm9mdW5kaWRhZCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNgorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAiY3JlYXIgdW4gY2xvbiBzdXBlcmZpY2lhbCBwYXJhIGVzYSBwcm9mdW5kaWRhZCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNyBidWlsdGluL2ZldGNoLmM6MTcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzMAorbXNnaWQgInRpbWUiCittc2dzdHIgInRpZW1wbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOAorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgc2luY2UgYSBzcGVjaWZpYyB0aW1lIgorbXNnc3RyICJjcmVhciB1biBjbG9uIHN1cGVyZmljaWFsIGRlc2RlIGVsIHRpZW1wbyBlc3BlY8OtZmljbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOSBidWlsdGluL2ZldGNoLmM6MTcyIGJ1aWx0aW4vZmV0Y2guYzoxOTUKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MAorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICJyZXZpc2lvbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMCBidWlsdGluL2ZldGNoLmM6MTczCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSwgZXhjbHVkaW5nIHJldiIKK21zZ3N0ciAiYWhvbmRhbmRvIGhpc3RvcmlhIGRlIGNsb24gc3VwZXJmaWNpYWwsIGV4Y2x1eWVuZG8gcmV2IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDE5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyOAorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAiY2xvbmFyIHNvbG8gdW5hIHJhbWEsSEVBRCBvIC0tYnJhbmNoIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM0Cittc2dpZCAiZG9uJ3QgY2xvbmUgYW55IHRhZ3MsIGFuZCBtYWtlIGxhdGVyIGZldGNoZXMgbm90IHRvIGZvbGxvdyB0aGVtIgorbXNnc3RyICJubyBjbG9uYXIgbmluZ8O6biB0YWcsIHkgaGFjZXIgcXVlIGxvcyBzdWJzaWd1aWVudGVzIGZldGNoIG5vIGxvcyBzaWdhbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNgorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIGJlIHNoYWxsb3ciCittc2dzdHIgImN1YWxxdWllciBzdWJtw7NkdWxvIGNsb25hZG8gc2Vyw6Egc3VwZXJmaWNpYWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzcgYnVpbHRpbi9pbml0LWRiLmM6NDk1Cittc2dpZCAiZ2l0ZGlyIgorbXNnc3RyICJnaXRkaXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzggYnVpbHRpbi9pbml0LWRiLmM6NDk2Cittc2dpZCAic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAic2VwYXJhIGdpdCBkaXIgZGVsIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM5Cittc2dpZCAia2V5PXZhbHVlIgorbXNnc3RyICJsbGF2ZT12YWxvciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY29uZmlndXJhciBjb25maWcgZGVudHJvIGRlbCBudWV2byByZXBvc2l0b3JpbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MgorbXNnaWQgInNlcnZlci1zcGVjaWZpYyIKK21zZ3N0ciAiZXNwZWNpZmljby1kZS1zZXJ2aWRvciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgIm9wdGlvbiB0byB0cmFuc21pdCIKK21zZ3N0ciAib3BjacOzbiBwYXJhIHRyYXNtaXRpciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MyBidWlsdGluL2ZldGNoLmM6MTkxIGJ1aWx0aW4vcHVsbC5jOjIyMAorIzogYnVpbHRpbi9wdXNoLmM6NTc0Cittc2dpZCAidXNlIElQdjQgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgInNvbG8gdXNhciBkaXJlY2Npb25lcyBJUHY0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ1IGJ1aWx0aW4vZmV0Y2guYzoxOTMgYnVpbHRpbi9wdWxsLmM6MjIzCisjOiBidWlsdGluL3B1c2guYzo1NzYKK21zZ2lkICJ1c2UgSVB2NiBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAic29sbyB1c2FyIGRpcmVjY2lvbmVzIElQdjYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDkKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCB1c2UgdGhlaXIgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiY3VhbHF1aWVyIHN1Ym3Ds2R1bG8gY2xvbmFkbyB1c2Fyw6Egc3UgYnJhbmNoIGRlIHJhc3RyZW8gcmVtb3RvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTUxCittc2dpZCAiaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQgZmlsZSB0byBpbmNsdWRlIG9ubHkgZmlsZXMgYXQgcm9vdCIKK21zZ3N0ciAiIgorImluaWNpYWxpemFyIGFyY2hpdm8gc3BhcnNlLWNoZWNrb3V0IHBhcmEgaW5jbHVpciBzb2xvIGFyY2hpdm9zIGVuIGxhIHJhw616IgorCisjOiBidWlsdGluL2Nsb25lLmM6Mjg3Cittc2dpZCAiIgorIk5vIGRpcmVjdG9yeSBuYW1lIGNvdWxkIGJlIGd1ZXNzZWQuXG4iCisiUGxlYXNlIHNwZWNpZnkgYSBkaXJlY3Rvcnkgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZG8gYWRpdmluYXIgbmluZ8O6biBub21icmUgZGUgZGlyZWN0b3Jpby5cbiIKKyJQb3IgZmF2b3IgZXNwZWNpZmlxdWUgdW4gZGlyZWN0b3JpbyBlbiBsYSBsw61uZWEgZGUgY29tYW5kbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZvOiBDb3VsZCBub3QgYWRkIGFsdGVybmF0ZSBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiaW5mbzogTm8gc2UgcHVkbyBhZ3JlZ2FyIHVuIGFsdGVybm8gcGFyYSAnJXMnOiAlc1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIlcyBleGlzdGUgcGVybyBubyBlcyB1biBkaXJlY3RvcmlvIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGFydCBpdGVyYXRvciBvdmVyICclcyciCittc2dzdHIgImZhbGzDsyBhbCBpbmljaWFyIGVsIGl0ZXJhZG9yIHNvYnJlICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgImZhbGzDsyBhbCBjcmVhciBsaW5rICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgY29waWFyIGFyY2hpdm8gYSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBpdGVyYXRlIG92ZXIgJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGl0ZXJhciBzb2JyZSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgImhlY2hvLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTA4Cittc2dpZCAiIgorIkNsb25lIHN1Y2NlZWRlZCwgYnV0IGNoZWNrb3V0IGZhaWxlZC5cbiIKKyJZb3UgY2FuIGluc3BlY3Qgd2hhdCB3YXMgY2hlY2tlZCBvdXQgd2l0aCAnZ2l0IHN0YXR1cydcbiIKKyJhbmQgcmV0cnkgd2l0aCAnZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LydcbiIKK21zZ3N0ciAiIgorIkNsb25hZG8gZXhpdG9zbywgcGVybyBmYWxsw7MgZWwgY2hlY2tvdXQuXG4iCisiUHVlZGVzIGluc3BlY2Npb25hciBhIHF1w6kgc2UgaGl6byBjaGVja291dCBjb24gJ2dpdCBzdGF0dXMnXG4iCisieSB2b2x2ZXIgYSBpbnRlbnRhcmxvIGNvbiAnZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LydcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAiTm8gc2UgcHVkbyBlbmNvbnRyYXIgbGEgcmFtYSByZW1vdGEgJXMgcGFyYSBjbG9uYXIuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgJXMiCittc2dzdHIgImluY2FwYXogZGUgYWN0dWFsaXphciAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc1MworbXNnaWQgImZhaWxlZCB0byBpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiZmFsbMOzIGFsIGluaWNpYWxpemFyIHNwYXJzZS1jaGVja291dCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc3NgorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAiIgorInJlbW90byBIRUFEIHJlZmllcmUgYSB1biByZWYgaW5leGlzdGVudGUsIG5vIHNlIHB1ZWRlIGhhY2VyIGNoZWNrb3V0LlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODA3Cittc2dpZCAidW5hYmxlIHRvIGNoZWNrb3V0IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSByZWFsaXphciBjaGVja291dCBlbiBlbCDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGVzY3JpYmlyIHBhcsOhbWV0cm9zIGFsIGFyY2hpdm8gY29uZmlnIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTI1Cittc2dpZCAiY2Fubm90IHJlcGFjayB0byBjbGVhbiB1cCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgcmVlbXBhcXVldGFyIHBhcmEgbGltcGlhciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNworbXNnaWQgImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZGVzdmluY3VsYXIgYXJjaGl2b3MgYWx0ZXJub3MgdGVtcG9yYWxlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2NSBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NTAKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICJNdWNob3MgYXJndW1lbnRvcy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjkKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIlRpZW5lcyBxdWUgZXNwZWNpZmljYXIgdW4gcmVwb3NpdG9yaW8gcGFyYSBjbG9uYXIuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiTGFzIG9wY2lvbmVzIC0tYmFyZSB5IC0tb3JpZ2luICVzIHNvbiBpbmNvbXBhdGlibGVzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4NQorbXNnaWQgIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICItLWJhcmUgeSAtLXNlcGFyYXRlLWdpdC1kaXIgc29uIGluY29tcGF0aWJsZXMuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAicmVwb3NpdG9yaW8gJyVzJyBubyBleGlzdGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDA0IGJ1aWx0aW4vZmV0Y2guYzoxNzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAicHJvZnVuZGlkYWQgJXMgbm8gZXMgdW4gbnVtZXJvIHBvc2l0aXZvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAxNAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICJsYSBydXRhIGRlIGRlc3Rpbm8gJyVzJyB5YSBleGlzdGUgeSBubyBlcyB1biBkaXJlY3RvcmlvIHZhY8Otby4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiZGlyZWN0b3JpbyBkZSB0cmFiYWpvICclcycgeWEgZXhpc3RlLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMzkgYnVpbHRpbi9jbG9uZS5jOjEwNjAgYnVpbHRpbi9kaWZmdG9vbC5jOjI3MQorIzogYnVpbHRpbi9sb2cuYzoxODY2IGJ1aWx0aW4vd29ya3RyZWUuYzoyOTUgYnVpbHRpbi93b3JrdHJlZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciBkaXJlY3RvcmlvcyBwcmluY2lwYWxlcyBkZSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciB1biDDoXJib2wgZGUgdHJhYmFqbyAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAiQ2xvbmFuZG8gZW4gdW4gcmVwb3NpdG9yaW8gdmFjw61vICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAiQ2xvbmFuZG8gZW4gJyVzJy4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA5MAorbXNnaWQgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGJvdGggLS1yZWZlcmVuY2UgYW5kIC0tcmVmZXJlbmNlLWlmLSIKKyJhYmxlIgorbXNnc3RyICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgbm8gZXMgY29tcGF0aWJsZSBjb24gLS1yZWZlcmVuY2UgeSAtLXJlZmVyZW5jZS1pZi1hYmxlIGFsICIKKyJtaXNtbyB0aWVtcG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU0Cittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tZGVwdGggZXMgaWdub3JhZGEgZW4gY2xvbmFjaW9uZXMgbG9jYWxlczsgdXNhIGZpbGU6Ly8gbcOhcyBiaWVuLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTYKK21zZ2lkICItLXNoYWxsb3ctc2luY2UgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLXNoYWxsb3ctc2luY2UgZXMgaWdub3JhZG8gZW4gZWwgY2xvbiBsb2NhbDsgdXNlIGZpbGU6Ly8gLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTgKK21zZ2lkICItLXNoYWxsb3ctZXhjbHVkZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tc2hhbGxvdy1leGNsdWRlIGVzIGlnbm9yYWRvIGVuIGNsb25lcyBsb2NhbGVzOyB1c2UgZmlsZTovLy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTYwCittc2dpZCAiLS1maWx0ZXIgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLWZpbHRlciBlcyBpZ25vcmFkbyBlbiBjbG9uZXMgbG9jYWxlczsgdXNhIGZpbGU6Ly8gZW4gc3UgbHVnYXIuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2MworbXNnaWQgInNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGlnbm9yaW5nIC0tbG9jYWwiCittc2dzdHIgInJlcG9zaXRvcmlvIGZ1ZW50ZSBlcyBzdXBlcmZpY2lhbCwgaWdub3JhbmRvIC0tbG9jYWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTY4Cittc2dpZCAiLS1sb2NhbCBpcyBpZ25vcmVkIgorbXNnc3RyICItLWxvY2FsIGVzIGlnbm9yYWRvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0MyBidWlsdGluL2Nsb25lLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAiUmFtYSByZW1vdGEgJXMgbm8gZW5jb250cmFkYSBlbiB1cHN0cmVhbSAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNTQKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJQYXJlY2VzIGhhYmVyIGNsb25hZG8gdW4gcmVwb3NpdG9yaW8gc2luIGNvbnRlbmlkby4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MTAKK21zZ2lkICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29sdW1uIFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNworbXNnaWQgImxvb2t1cCBjb25maWcgdmFycyIKK21zZ3N0ciAicmV2aXNhIGxhcyB2YXJpYWJsZXMgZGUgY29uZmlndXJhY2lvbmVzIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI4IGJ1aWx0aW4vY29sdW1uLmM6MjkKK21zZ2lkICJsYXlvdXQgdG8gdXNlIgorbXNnc3RyICJjYXBhIGEgdXNhciIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIkFuY2hvIG3DoXhpbW8iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzEKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIGxlZnQgYm9yZGVyIgorbXNnc3RyICJSZWFsaXphbmRvIHBhZGRpbmcgZW4gZWwgYm9yZGUgaXpxdWllcmRvIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgIlJlYWxpemFuZG8gcGFkZGluZyBlbiBlbCBib3JkZSBkZXJlY2hvIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMzCittc2dpZCAiUGFkZGluZyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMiCittc2dzdHIgIlJlYWxpemFuZG8gcGFkZGluZyBlbnRyZSBjb2x1bW5hcyIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo1MQorbXNnaWQgIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb21tYW5kIGRlYmUgc2VyIGVsIHByaW1lciBhcmd1bWVudG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxOAorbXNnaWQgIiIKKyJnaXQgY29tbWl0LXRyZWUgWygtcCA8cGFyZW50PikuLi5dIFstU1s8a2V5aWQ+XV0gWygtbSA8bWVzc2FnZT4pLi4uXSBbKC1GICIKKyI8ZmlsZT4pLi4uXSA8dHJlZT4iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LXRyZWUgWygtcCA8cGFkcmU+KS4uLl0gWy1TWzxrZXlpZD5dXSBbKC1tIDxtZW5zYWplPikuLi5dIFsoLUYgIgorIjxhcmNoaXZvPikuLi5dIDzDoXJib2w+IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHBhcmVudCAlcyBpZ25vcmVkIgorbXNnc3RyICJwYWRyZSBkdXBsaWNhZG8gJXMgaWdub3JhZG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo1NiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTM2IGJ1aWx0aW4vbG9nLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICJubyBlcyB1biBub21icmUgZGUgb2JqZXRvIHbDoWxpZG8gJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZTogZmFsbMOzIGFsIGFicmlyICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZTogZmFsbMOzIGFsIGxlZXIgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIGNsb3NlICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZTogZmFsbMOzIGFsIGNlcnJhciAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICJwYWRyZSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExMgorbXNnaWQgImlkIG9mIGEgcGFyZW50IGNvbW1pdCBvYmplY3QiCittc2dzdHIgImlkIGRlbCBvYmpldG8gY29tbWl0IHBhZHJlIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE0IGJ1aWx0aW4vY29tbWl0LmM6MTUwMSBidWlsdGluL21lcmdlLmM6MjcxCisjOiBidWlsdGluL25vdGVzLmM6NDA5IGJ1aWx0aW4vbm90ZXMuYzo1NzUgYnVpbHRpbi9zdGFzaC5jOjE0NzcKKyM6IGJ1aWx0aW4vdGFnLmM6NDEyCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAibWVuc2FqZSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNSBidWlsdGluL2NvbW1pdC5jOjE1MDEKK21zZ2lkICJjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAibWVuc2FqZSBkZWwgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE4Cittc2dpZCAicmVhZCBjb21taXQgbG9nIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsZWVyIG1lbnNhamUgZGUgY29tbWl0IGRlc2RlIHVuIGFyY2hpdm8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMjEgYnVpbHRpbi9jb21taXQuYzoxNTEzIGJ1aWx0aW4vbWVyZ2UuYzoyODgKKyM6IGJ1aWx0aW4vcHVsbC5jOjE3NSBidWlsdGluL3JldmVydC5jOjExOAorbXNnaWQgIkdQRyBzaWduIGNvbW1pdCIKK21zZ3N0ciAiRmlybWFyIGNvbW1pdCBjb24gR1BHIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTMzCittc2dpZCAibXVzdCBnaXZlIGV4YWN0bHkgb25lIHRyZWUiCittc2dzdHIgInRpZW5lIHF1ZSBkYXIgZXhhY3RhbWVudGUgdW4gw6FyYm9sIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTQwCittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBmYWxsw7MgYWwgbGVlciIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MQorbXNnaWQgImdpdCBjb21taXQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgY29tbWl0IFs8b3BjaW9uZXM+XSBbLS1dIDxlc3BlY2lmaWNhY2nDs24tZGUtcnV0YT4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDYKK21zZ2lkICJnaXQgc3RhdHVzIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHN0YXR1cyBbPG9wY2lvbmVzPl0gWy0tXSA8ZXNwZWNpZmljYWNpw7NuLWRlLXJ1dGE+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUxCittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisiSGFzIHNvbGljaXRhZG8gdW4gYW1lbmQgZW4gdHUgY29tbWl0IG3DoXMgcmVjaWVudGUsIHBlcm8gaGFjZXJsbyBsbyBcbiIKKyJ2YWNpYXLDrWEuIFB1ZWRlcyByZXBldGlyIGVsIGNvbWFuZG8gY29uIC0tYWxvdy1lbXB0eSwgbyBwdWVkZXMgZWxpbWluYXJcbiIKKyJlbCBjb21taXQgY29tcGxldGFtZW50ZSBjb24gXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisiRWwgY2hlcnJ5LXBpY2sgYW50ZXJpb3IgYWhvcmEgZXN0w6EgdmFjw61vLCBwb3NpYmxlbWVudGUgcG9yIHVuIGNvbmZsaWN0byBkZSAiCisicmVzb2x1Y2nDs24uXG4iCisiU2kgZGVzZWFzIHJlYWxpemFyIHVuIGNvbW1pdCBkZSB0b2RhcyBtYW5lcmFzLCB1c2E6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzCittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgY2hlcnJ5LXBpY2sgLS1za2lwJ1xuIgorbXNnc3RyICJDYXNvIGNvbnRyYXJpbywgcG9yIGZhdm9yIHVzYSAnZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCdcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NgorbXNnaWQgIiIKKyJhbmQgdGhlbiB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCisiXG4iCisidG8gcmVzdW1lIGNoZXJyeS1waWNraW5nIHRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLXNraXBcbiIKKyJcbiIKK21zZ3N0ciAiIgorInkgbHVlZ28gdXNhOlxuIgorIlxuIgorIiAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCisiXG4iCisicGFyYSByZXN1bWlyIGVsIGNoZXJyeS1waWNrIGNvbiBsb3MgY29tbWl0cyBmYWx0YW50ZXMuXG4iCisiU2kgZGVzZWFzIHNhbHRhciBlbCBjb21taXQsIHVzYTpcbiIKKyJcbiIKKyIgICAgIGdpdCBjaGVycnktcGljayAtLXNraXBcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMTUKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgImZhbGzDsyBhbCBkZXNlbXBhcXVldGFyIG9iamV0byBkZWwgw6FyYm9sIEhFQUQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzUxCittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSBjb24gLWEgbm8gdGllbmUgc2VudGlkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzozNjQKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIk5vIGhheSBydXRhcyBjb24gLS1pbmNsdWRlLy0tb25seSBubyB0aWVuZSBzZW50aWRvLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNzYKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBjcmVhciB1biDDrW5kaWNlIHRlbXBvcmFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4NQorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgImFkaWNpw7NuIGludGVyYWN0aXZhIGZhbGxpZGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDAwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYWN0dWFsaXphciBlbCDDrW5kaWNlIHRlbXBvcmFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQwMgorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICJGYWxsw7MgYWwgYWN0dWFsaXphciBlbCBjYWNoZSBwcmluY2lwYWwgZGVsIMOhcmJvbCIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MjcgYnVpbHRpbi9jb21taXQuYzo0NTAgYnVpbHRpbi9jb21taXQuYzo0OTYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZXNjcmliaXIgYXJjaGl2byBuZXdfaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc5Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICJubyBzZSBwdWVkZSByZWFsaXphciB1biBjb21taXQgcGFyY2lhbCBkdXJhbnRlIHVuYSBmdXNpw7NuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0ODEKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIm5vIHNlIHB1ZWRlIHJlYWxpemFyIHVuIGNvbW1pdCBwYXJjaWFsIGR1cmFudGUgdW4gY2hlcnJ5LXBpY2suIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4OQorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciBlbCDDrW5kaWNlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUwOAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBlc2NyaWJpciBlbCDDrW5kaWNlIHRlbXBvcmFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICJjb21taXQgJyVzJyByZXF1aWVyZSBjYWJlY2VyYSBkZSBhdXRvciIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAiZWwgY29tbWl0ICclcycgdGllbmUgdW5hIGzDrW5lYSBkZSBhdXRvciBtYWwgZm9ybWFkYSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MjcKK21zZ2lkICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgorbXNnc3RyICJwYXLDoW1ldHJvIC0tYXV0aG9yIG1hbCBmb3JtYWRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY4MAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisibm8gZXMgcG9zaWJsZSBzZWxlY2Npb25hciB1biBjYXLDoWN0ZXIgZGUgY29tZW50YXJpbyBxdWUgbm8gZXMgdXNhZG9cbiIKKyJlbiBlbCBtZW5zYWplIGRlIGNvbW1pdCBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzE4IGJ1aWx0aW4vY29tbWl0LmM6NzUxIGJ1aWx0aW4vY29tbWl0LmM6MTA5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyByZXZpc2FyIGVsIGNvbW1pdCAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzAgYnVpbHRpbi9zaG9ydGxvZy5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIobGV5ZW5kbyBtZW5zYWplcyBkZSBsb2dzIGRlc2RlIHN0YW5kYXJkIGlucHV0KVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMgorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgbG9nIGRlc2RlIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgZWwgbG9nICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzY3IGJ1aWx0aW4vY29tbWl0LmM6NzgzCittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzc0Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzNAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgIm5vIHNlIHB1ZG8gZXNjcmliaXIgZWwgdGVtcGxhdGUgZGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiUGFyZWNlIHF1ZSBlc3TDoXMgaGFjaWVuZG8gdW4gY29tbWl0IGNvbiB1bmEgZnVzacOzbiBkZW50cm8uXG4iCisiU2kgZXN0byBubyBlcyBjb3JyZWN0bywgcG9yIGZhdm9yIGVsaW1pbmEgZWwgYXJjaGl2b1xuIgorIlx0JXNcbiIKKyJ5IHZ1ZWx2ZSBhIGludGVudGFyLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQYXJlY2UgcXVlIHB1ZWRlcyBlc3RhciBoYWNpZW5kbyB1biBjb21taXQgYSB1biBjaGVycnktcGljay5cbiIKKyJTaSBlc3RvIG5vIGVzIGNvcnJlY3RvLCBwb3IgZmF2b3IgZWxpbWluYSBlbCBhcmNoaXZvXG4iCisiXHQlc1xuIgorInkgdnVlbHZlIGEgaW50ZW50YXIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJQb3IgZmF2b3IgaW5ncmVzYSBlbCBtZW5zYWplIGRlbCBjb21taXQgcGFyYSB0dXMgY2FtYmlvcy4gTGFzXG4iCisiIGzDrW5lYXMgcXVlIGNvbWllbmNlbiBjb24gJyVjJyBzZXLDoW4gaWdub3JhZGFzLCB5IHVuIG1lbnNhamVcbiIKKyIgdmFjw61vIGFib3J0YSBlbCBjb21taXQuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiUG9yIGZhdm9yIGluZ3Jlc2EgZWwgbWVuc2FqZSBkZWwgY29tbWl0IHBhcmEgdHVzIGNhbWJpb3MuIExhc1xuIgorIiBsw61uZWFzIHF1ZSBjb21pZW5jZW4gY29uICclYycgc2Vyw6FuIGd1YXJkYWRhczsgcHVlZGUgZWxpbWluYXJsYXNcbiIKKyIgdXN0ZWQgbWlzbW8gc2kgbG8gZGVzZWEuXG4iCisiVW4gbWVuc2FqZSB2YWPDrW8gYWJvcnRhIGVsIGNvbW1pdC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNBdXRob3I6ICAgICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc0F1dG9yOiAgICAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXNGZWNoYTogICAgICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MjkKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgbGVlciBlbCDDrW5kaWNlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5NworbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICJFcnJvciBhbCBjb25zdHJ1aXIgbG9zIMOhcmJvbGVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMTEgYnVpbHRpbi90YWcuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICJQb3IgZmF2b3Igc3VtaW5pc3RyYSBlbCBtZW5zYWplIHVzYW5kbyBsYXMgb3BjaW9uZXMgLW0gbyAtRi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYXV0aG9yICclcycgaXMgbm90ICdOYW1lIDxlbWFpbD4nIGFuZCBtYXRjaGVzIG5vIGV4aXN0aW5nIGF1dGhvciIKK21zZ3N0ciAiIgorIi0tYXV0aG9yICclcycgbm8gZXN0w6EgZW4gZWwgZm9ybWF0byAnTmFtZSA8ZW1haWw+JyB5IG5vIGNvbmN1ZXJkYSBjb24gbmluZ8O6biAiCisiYXV0b3IgZXhpc3RlbnRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpZ25vcmVkIG1vZGUgJyVzJyIKK21zZ3N0ciAiTW9kbyBpZ25vcmFkbyBpbnbDoWxpZG8gJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDg3IGJ1aWx0aW4vY29tbWl0LmM6MTMyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgIk1vZG8gaW52w6FsaWRvIGRlIGxvcyBhcmNoaXZvcyBubyByYXN0cmVhZG9zICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEyNworbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1sb25nIHkgLXogc29uIGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3MQorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIlVzYXIgYW1ib3MgLS1yZXNldC1hdXRob3IgeSAtLWF1dGhvciBubyB0aWVuZSBzZW50aWRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODAKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAiTm8gdGllbmVzIG5hZGEgcXVlIGVubWVuZGFyLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgzCittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiRXN0w6FzIGVuIG1lZGlvIGRlIHVuYSBmdXNpw7NuIC0tIG5vIHB1ZWRlcyBlbm1lbmRhci4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIkVzdMOhIGVuIG1lZGlvIGRlIHVuIGNoZXJyeS1waWNrIC0tIG5vIHNlIHB1ZWRlIGVubWVuZGFyLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTg4Cittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiT3BjaW9uZXMgLS1zcXVhc2ggeSAtLWZpeHVwIG5vIHB1ZWRlbiBzZXIgdXNhZGFzIGp1bnRhcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk4Cittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIlNvbG8gdW5vIGRlIC1jLy1DLy1GLy0tZml4dXAgcHVlZGUgc2VyIHVzYWRvLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjAwCittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLiIKK21zZ3N0ciAiTGEgb3BjacOzbiAtbSBubyBwdWVkZSBzZXIgY29tYmluYWRhIGNvbiAtYy8tQy8tRi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIwOAorbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIi0tcmVzZXQtYXV0aG9yIHPDs2xvIHB1ZWRlIHNlciB1c2FkYSBjb24gLUMsIC1jIG8gLS1hbWVuZC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyNQorbXNnaWQgIk9ubHkgb25lIG9mIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiIgorIlNvbG8gdW5vIGRlIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIHB1ZWRlIHNlciB1c2Fkby4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRocyAnJXMgLi4uJyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgInBhdGhzICclcyAuLi4nIGNvbiAtYSBubyB0aWVuZSBzZW50aWRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjIgYnVpbHRpbi9jb21taXQuYzoxNTI0Cittc2dpZCAic2hvdyBzdGF0dXMgY29uY2lzZWx5IgorbXNnc3RyICJtb3N0cmFyIHN0YXR1cyBkZSBtYW5lcmEgY29uY2lzYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY0IGJ1aWx0aW4vY29tbWl0LmM6MTUyNgorbXNnaWQgInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIgorbXNnc3RyICJtb3N0cmFyIGluZm9ybWFjacOzbiBkZSBsYSByYW1hIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjYKK21zZ2lkICJzaG93IHN0YXNoIGluZm9ybWF0aW9uIgorbXNnc3RyICJtb3N0cmFyIGluZm9ybWFjacOzbiBkZWwgc3Rhc2giCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2OCBidWlsdGluL2NvbW1pdC5jOjE1MjgKK21zZ2lkICJjb21wdXRlIGZ1bGwgYWhlYWQvYmVoaW5kIHZhbHVlcyIKK21zZ3N0ciAiY2FsY3VsYXIgdG9kb3MgbG9zIHZhbG9yZXMgZGVsYW50ZS9hdHLDoXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MAorbXNnaWQgInZlcnNpb24iCittc2dzdHIgInZlcnNpb24iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MCBidWlsdGluL2NvbW1pdC5jOjE1MzAgYnVpbHRpbi9wdXNoLmM6NTQ5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjQzCittc2dpZCAibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiCittc2dzdHIgIm91dHB1dCBmb3JtYXRvLW1hcXVpbmEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MyBidWlsdGluL2NvbW1pdC5jOjE1MzIKK21zZ2lkICJzaG93IHN0YXR1cyBpbiBsb25nIGZvcm1hdCAoZGVmYXVsdCkiCittc2dzdHIgIm1vc3RyYXIgc3RhdHVzIGVuIGZvcm1hdG8gbGFyZ28gKGRlZmF1bHQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzYgYnVpbHRpbi9jb21taXQuYzoxNTM1Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgInRlcm1pbmFyIGVudHJhZGFzIGNvbiBOVUwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OCBidWlsdGluL2NvbW1pdC5jOjEzODIgYnVpbHRpbi9jb21taXQuYzoxNTM4CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTkgYnVpbHRpbi9yZWJhc2UuYzoxNTY5IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJtb2RlIgorbXNnc3RyICJtb2RvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzkgYnVpbHRpbi9jb21taXQuYzoxNTM4Cittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisibW9zdHJhciBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8sIG1vZG9zIG9wY2lvbmFsZXM6IGFsbCwgbm9ybWFsLCBuby4gIgorIihQcmVkZXRlcm1pbmFkbzogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgzCittc2dpZCAiIgorInNob3cgaWdub3JlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uIChEZWZhdWx0OiAiCisidHJhZGl0aW9uYWwpIgorbXNnc3RyICIiCisibW9zdHJhciBhcmNoaXZvcyBpZ25vcmFkb3MsIG1vZG9zIG9wY2lvbmFsZXM6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uICIKKyIoUHJlZGV0ZXJtaW5hZG86IHRyYWRpdGlvbmFsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg1IHBhcnNlLW9wdGlvbnMuaDoxOTIKK21zZ2lkICJ3aGVuIgorbXNnc3RyICJjdWFuZG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4NgorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorImlnbm9yYXIgY2FtYmlvcyBlbiBzdWJtw7NkdWxvcywgb3BjaW9uYWwgY3VhbmRvOiBhbGwsZGlydHksdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4OAorbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgImxpc3RhciBlbiBjb2x1bW5hcyBsb3MgYXJjaGl2b3Mgc2luIHNlZ3VpbWllbnRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODkKK21zZ2lkICJkbyBub3QgZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgIm5vIGRldGVjdGFyIHJlbm9tYnJhZG9zIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzOTEKK21zZ2lkICJkZXRlY3QgcmVuYW1lcywgb3B0aW9uYWxseSBzZXQgc2ltaWxhcml0eSBpbmRleCIKK21zZ3N0ciAiZGV0ZWN0YXIgcmVub21icmVzLCBvcGNpb25hbG1lbnRlIGNvbmZpZ3VyYXIgc2ltaWxhcmlkYWQgZGUgw61uZGljZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDExCittc2dpZCAiVW5zdXBwb3J0ZWQgY29tYmluYXRpb24gb2YgaWdub3JlZCBhbmQgdW50cmFja2VkLWZpbGVzIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorIkNvbWJpbmFjacOzbiBkZSBhcmd1bWVudG9zIGRlIGFyY2hpdm9zIGlnbm9yYWRvcyB5IG5vIHJhc3RyZWFkb3Mgbm8gc29wb3J0YWRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTQKK21zZ2lkICJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IgorbXNnc3RyICJzdXByaW1lIHN1bW1hcnkgdHJhcyB1biBjb21taXQgZXhpdG9zbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1Cittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJtb3N0cmFyIGRpZmYgZW4gZWwgdGVtcGxhdGUgZGVsIG1lbnNhamUgZGUgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTcKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICJPcGNpb25lcyBwYXJhIGVsIG1lbnNhamUgZGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk4IGJ1aWx0aW4vbWVyZ2UuYzoyNzUgYnVpbHRpbi90YWcuYzo0MTQKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsZWVyIG1lbnNhamUgZGVzZGUgdW4gYXJjaGl2byIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk5Cittc2dpZCAiYXV0aG9yIgorbXNnc3RyICJhdXRvciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk5Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgInNvYnJlc2NyaWJlIGVsIGF1dG9yIGRlbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMCBidWlsdGluL2djLmM6NTM4Cittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiZmVjaGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMAorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAic29icmVzY3JpYmUgbGEgZmVjaGEgZGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAyIGJ1aWx0aW4vY29tbWl0LmM6MTUwMyBidWlsdGluL2NvbW1pdC5jOjE1MDQKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNSBwYXJzZS1vcHRpb25zLmg6MzI4IHJlZi1maWx0ZXIuaDo5MgorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiY29uZmlybWFyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAicmV1c2FyIHkgZWRpdGFyIGVsIG1lbnNhamUgZGUgdW4gY29tbWl0IGVzcGVjaWZpY28iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMworbXNnaWQgInJldXNlIG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICJyZXVzYXIgZWwgbWVuc2FqZSBkZSB1biBjb21taXQgZXNwZWNpZmljbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA0Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorInVzYXIgbWVuc2FqZSBkZSBmb3JtYXRvIGF1dG9zcXVhc2jCoHBhcmEgYXJyZWdsYXIgZWwgY29tbWl0IGVzcGVjaWZpY2FkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA1Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gc3F1YXNoIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyJ1c2FyIGVsIG1lbnNhamUgZGUgZm9ybWF0byBhdXRvc3F1YXNoIHBhcmEgcmVhbGl6YXIgc3F1YXNoICBhbCBjb21taXQgIgorImVzcGVjaWZpY2FkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA2Cittc2dpZCAidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIKK21zZ3N0ciAiZWwgYXV0b3IgZGVsIGNvbW1pdCBzb3kgeW8gYWhvcmEgKHVzYWRvIGNvbiAtQy8tYy8tLWFtZW5kKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA3IGJ1aWx0aW4vbG9nLmM6MTYzNCBidWlsdGluL21lcmdlLmM6MjkwCisjOiBidWlsdGluL3B1bGwuYzoxNDQgYnVpbHRpbi9yZXZlcnQuYzoxMTAKK21zZ2lkICJhZGQgU2lnbmVkLW9mZi1ieToiCittc2dzdHIgImFncmVnYXIgU2lnbmVkLW9mZi1ieTogKGZpcm1hZG8gcG9yKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA4Cittc2dpZCAidXNlIHNwZWNpZmllZCB0ZW1wbGF0ZSBmaWxlIgorbXNnc3RyICJ1c2FyIGFyY2hpdm8gZGUgdGVtcGxhdGUgZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDkKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAiZm9yemFyIGxhIGVkaWNpw7NuIGRlbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMQorbXNnaWQgImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJpbmNsdWlyIHN0YXR1cyBlbiBlbCB0ZW1wbGF0ZSBkZWwgbWVuc2FqZSBkZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNgorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICJPcGNpb25lcyBwYXJhIGVsIGNvbnRlbmlkbyBkZWwgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTcKK21zZ2lkICJjb21taXQgYWxsIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgImNvbmZpcm1hciB0b2RvcyBsb3MgYXJjaGl2b3MgY2FtYmlhZG9zIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTgKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgImFncmVnYXIgYXJjaGl2b3MgZXNwZWPDrWZpY29zIGFsIMOtbmRpY2UgcGFyYSBjb25maXJtYXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxOQorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGZpbGVzIgorbXNnc3RyICJhZ3JlZ2FyIGFyY2hpdm9zIGludGVyYWN0aXZhbWVudGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMAorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgImFncmVnYXIgY2FtYmlvcyBpbnRlcmFjdGl2YW1lbnRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjEKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgInPDs2xvIGNvbmZpcm1hciBhcmNoaXZvcyBlc3BlY8OtZmljb3MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMgorbXNnaWQgImJ5cGFzcyBwcmUtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIgorbXNnc3RyICJldml0YXIgbG9zIGNhcHR1cmFkb3JlcyAoaG9va3MpIGRlIHByZS1jb21taXQgeSBjb21taXQtbXNnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjMKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICJtb3N0cmFyIGxvIHF1ZSBzZXLDrWEgaW5jbHVpZG8gZW4gZWwgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzYKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgImVubWVuZGFyIGNvbW1pdCBwcmV2aW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzNworbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAiZ2FuY2hvIGJ5cGFzcyBwb3N0IHJlZXNjcml0dXJhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NDQKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICJvayBhbCBncmFiYXIgdW4gY2FtYmlvIHZhY8OtbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTQ2Cittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAib2sgYWwgZ3JhYmFyIHVuIGNhbWJpbyBjb24gdW4gbWVuc2FqZSB2YWPDrW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICJBcmNoaXZvIE1FUkdFX0hFQUQgKCVzKSBjb3JydXB0byIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjI2Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTU9ERSIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIE1FUkdFX01PREUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciBlbCBtZW5zYWplIGRlIGNvbW1pdDogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJBYm9ydGFuZG8gY29tbWl0IGRlYmlkbyBxdWUgZWwgbWVuc2FqZSBlc3TDoSBlbiBibGFuY28uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY1NworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgIkFib3J0YW5kbyBjb21taXQ7IG5vIHNlIGhhIGVkaXRhZG8gZWwgbWVuc2FqZVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2OTEKK21zZ2lkICIiCisicmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBhbmQgcXVvdGEgaXNcbiIKKyJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgOi9cIiB0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorImVsIHJlcG9zaXRvcmlvIGhhIHNpZG8gYWN0dWFsaXphZG8sIHBlcm8gbm8gc2UgcHVkbyBlc2NyaWJpciBlbCBhcmNoaXZvXG4iCisibmV3X2luZGV4LiBWZXJpZmlxdWUgcXVlIGVsIGRpc2NvIG5vIGVzdGUgbGxlbm8geSBsYSBxdW90YSBubyBoYVxuIgorInNpZG8gc3VwZXJhZGEsIHkgbHVlZ28gXCJnaXQgcmVzdG9yZSAtLXNhdGVnZWQgOi9cIiBwYXJhIHJlY3VwZXJhci4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNworbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXSIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLXNoYWxsb3ddIFstLVtuby1dcHJvZ3Jlc3NdIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjIKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxkaXIgb2JqZXRvPl0gWy0tYXBwZW5kfC0tc3BsaXRdIFstLSIKKyJyZWFjaGFibGV8LS1zdGRpbi1wYWNrc3wtLXN0ZGluLWNvbW1pdHNdIFstLVtuby1dcHJvZ3Jlc3NdIDxvcGNpb25lcyBkZSAiCisic3BsaXQ+IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIG9iamVjdCBkaXJlY3RvcnkgbWF0Y2hpbmcgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZW50b25jcmFyIGVsIG9iamV0byBkaXJlY3RvcmlvIGNvbmNvcmRhbnRlIGNvbiAlcyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo2OCBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyNQorIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoyMTAgYnVpbHRpbi9mZXRjaC5jOjE3OSBidWlsdGluL2xvZy5jOjE2NTcKK21zZ2lkICJkaXIiCittc2dzdHIgImRpciIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo2OSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyNgorIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoyMTEKK21zZ2lkICJUaGUgb2JqZWN0IGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgZ3JhcGgiCittc2dzdHIgIkVsIGRpcmVjdG9yaW8gZGUgb2JqZXRvcyBwYXJhIGd1YXJkYXIgZWwgZ3LDoWZpY28iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NzEKK21zZ2lkICJpZiB0aGUgY29tbWl0LWdyYXBoIGlzIHNwbGl0LCBvbmx5IHZlcmlmeSB0aGUgdGlwIGZpbGUiCittc2dzdHIgInNpIGVsIGNvbW1pdC1ncmFwaCBlc3TDoSBjb3J0YWRvLCBzb2xvIHZlcmlmaWNhIGxhIHB1bnRhIGRlbCBhcmNoaXZvIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjk0IHQvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGNvbW1pdC1ncmFwaCAnJXMnIgorbXNnc3RyICJObyBzZSBwdWRvIGFicmlyIGNvbW1pdC1ncmFwaCAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyOAorbXNnaWQgInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiCittc2dzdHIgImNvbWVuemFyIGNhbWluYXRhIGVuIHRvZGFzIGxhcyByZWZzIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzMAorbXNnaWQgInNjYW4gcGFjay1pbmRleGVzIGxpc3RlZCBieSBzdGRpbiBmb3IgY29tbWl0cyIKK21zZ3N0ciAiZXNjYW5lYXIgcGFxdWV0ZSBkZSDDrW5kaWNlcyBwb3Igc3RkaW4gcG9yIGNvbW1pdHMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTMyCittc2dpZCAic3RhcnQgd2FsayBhdCBjb21taXRzIGxpc3RlZCBieSBzdGRpbiIKK21zZ3N0ciAiY29tZW56YXIgYSBjYW1pbmFyIGEgbG9zIGNvbW1pdHMgbGlzdGFkb3MgcG9yIHN0ZGluIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNAorbXNnaWQgImluY2x1ZGUgYWxsIGNvbW1pdHMgYWxyZWFkeSBpbiB0aGUgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgImluY2x5ZSB0b2RvcyBsb3MgY29tbWl0cyBxdWUgeWEgZXN0w6FuIGVuIGVsIGFyY2hpdm8gY29tbWl0LWdyYXBoIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNworbXNnaWQgImFsbG93IHdyaXRpbmcgYW4gaW5jcmVtZW50YWwgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgInBlcm1pdGlyIGVzY3JpYmlyIHVuIGFyY2hpdm8gY29tbWl0LWdyYXBoIGluY3JlbWVudGFsIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzOSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE0MworbXNnaWQgIm1heGltdW0gbnVtYmVyIG9mIGNvbW1pdHMgaW4gYSBub24tYmFzZSBzcGxpdCBjb21taXQtZ3JhcGgiCittc2dzdHIgIm3DoXhpbW8gbsO6bWVybyBkZSBjb21taXRzIGVuIHVuIGNvbW1pdC1ncmFwaCBzaW4gYmFzZSBjb3J0YWRhIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE0MQorbXNnaWQgIm1heGltdW0gcmF0aW8gYmV0d2VlbiB0d28gbGV2ZWxzIG9mIGEgc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICJyYWRpbyBtw6F4aW1vIGVudHJlIGRvcyBuaXZlbGVzIGRlIGNvcnRlIGRlIGNvbW1pdC1ncmFwaCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNTkKK21zZ2lkICJ1c2UgYXQgbW9zdCBvbmUgb2YgLS1yZWFjaGFibGUsIC0tc3RkaW4tY29tbWl0cywgb3IgLS1zdGRpbi1wYWNrcyIKK21zZ3N0ciAidXNlIGNvbW8gbcOheGltbyB1bm8gZGUgLS1yZWFjaGFibGUsIC0tc3RkaW4tY29tbWl0cywgbyAtLXN0ZGluLXBhY2tzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExCittc2dpZCAiZ2l0IGNvbmZpZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbmZpZyBbPG9wY2lvbmVzPl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTA0IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgLS10eXBlIGFyZ3VtZW50LCAlcyIKK21zZ3N0ciAiYXJndW1lbnRvIC0tdHlwZSBubyByZWNvbm9jaWRvLCAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMTYKK21zZ2lkICJvbmx5IG9uZSB0eXBlIGF0IGEgdGltZSIKK21zZ3N0ciAic29sbyB1biB0aXBvIGEgbGEgdmV6IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNQorbXNnaWQgIkNvbmZpZyBmaWxlIGxvY2F0aW9uIgorbXNnc3RyICJVYmljYWNpw7NuIGRlbCBhcmNoaXZvIGNvbmZpZ3VyYWNpw7NuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNgorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgInVzYXIgYXJjaGl2byBkZSBjb25maWcgZ2xvYmFsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNworbXNnaWQgInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiCittc2dzdHIgInVzYXIgYXJjaGl2byBkZSBjb25maWcgZGVsIHNpc3RlbWEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI4Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgInVzYXIgYXJjaGl2byBkZSBjb25maWcgZGVsIHJlcG9zaXRvcmlvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOQorbXNnaWQgInVzZSBwZXItd29ya3RyZWUgY29uZmlnIGZpbGUiCittc2dzdHIgInVzYXIgdW4gYXJjaGl2byBkZSBjb25maWcgcG9yIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMAorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAidXNhciBhcmNoaXZvIGNvbmZpZyBlc3BlY2lmaWNhZG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMxCittc2dpZCAiYmxvYi1pZCIKK21zZ3N0ciAiYmxvYi1pZCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzEKK21zZ2lkICJyZWFkIGNvbmZpZyBmcm9tIGdpdmVuIGJsb2Igb2JqZWN0IgorbXNnc3RyICJsZWVyIGNvbmZpZyBkZWwgb2JqZXRvIGJsb2Igc3VtaW5pc3RyYWRvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMgorbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAiQWNjacOzbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzMKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAib2J0ZW5lciB2YWxvcjogbm9tYnJlIFt2YWxvci1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM0Cittc2dpZCAiZ2V0IGFsbCB2YWx1ZXM6IGtleSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJvYnRlbmVyIHRvZG9zIGxvcyB2YWxvcmVzOiBsbGF2ZSBbdmFsb3Jlcy1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM1Cittc2dpZCAiZ2V0IHZhbHVlcyBmb3IgcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIm9idGVuZXIgdmFsb3JlcyBwYXJhIHVuYSByZWdleHA6IG5vbWJyZS1yZWdleCBbdmFsb3ItcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNgorbXNnaWQgImdldCB2YWx1ZSBzcGVjaWZpYyBmb3IgdGhlIFVSTDogc2VjdGlvblsudmFyXSBVUkwiCittc2dzdHIgIm9idGVuZXIgdmFsb3IgZXNwZWNpZmljbyBwYXJhIGVsIFVSTDogc2VjY2nDs25bLnZhcl0gVVJMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNworbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICIiCisicmVtcGxhemFyIHRvZGFzIGxhcyB2YXJpYWJsZXMgcXVlIGNvbmN1ZXJkZW46IG5vbWJyZSB2YWxvciBbdmFsb3JfcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOAorbXNnaWQgImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIKK21zZ3N0ciAiYWdyZWdhciBudWV2YSB2YXJpYWJsZTogbm9tYnJlIHZhbG9yIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOQorbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImJvcnJhciB1bmEgdmFyaWFibGUuIG5vbWJyZSBbdmFsb3ItcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MAorbXNnaWQgInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJib3JyYXIgdG9kYXMgbGFzIGNvbmN1cnJlbmNpYXM6IG5vbWJyZSBbdmFsb3ItcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MQorbXNnaWQgInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIKK21zZ3N0ciAicmVub21icmFyIHNlY2Npw7NuOiBub21icmUtdmllam8gbm9tYnJlLW51ZXZvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MgorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgImJvcnJhciB1bmEgc2VjY2nDs246IG5vbWJyZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDMKK21zZ2lkICJsaXN0IGFsbCIKK21zZ3N0ciAibGlzdGFyIHRvZG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ0Cittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgImFicmlyIGVsIGVkaXRvciIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDUKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAiZW5jb250cmFyIGVsIGNvbG9yIGNvbmZpZ3VyYWRvOiBzbG90IFtkZWZhdWx0XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDYKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAiZW5jb250cmFyIGxhcyBvcGNpb25lcyBkZWwgY29sb3I6IHNsb3QgW3N0ZG91dC1lcy10dHldIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NworbXNnaWQgIlR5cGUiCittc2dzdHIgIlRpcG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ4IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzozOAorbXNnaWQgInZhbHVlIGlzIGdpdmVuIHRoaXMgdHlwZSIKK21zZ3N0ciAiYWwgdmFsb3Igc2UgaGEgZGFkbyBlc3RlIHRpcG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ5Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICJ2YWxvciBlcyBcInRydWVcIiBvIFwiZmFsc2VcIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTAKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAidmFsb3IgZXMgdW4gbnVtZXJvIGRlY2ltYWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUxCittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICJ2YWxvciBlcyAtLWJvb2wgbyAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTIKK21zZ2lkICJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIgorbXNnc3RyICJ2YWxvciBlcyB1bmEgcnV0YSAoYXJjaGl2byBvIG5vbWJyZSBkZSBkaXJlY3RvcmlvKSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTMKK21zZ2lkICJ2YWx1ZSBpcyBhbiBleHBpcnkgZGF0ZSIKK21zZ3N0ciAidmFsb3IgZXMgdW5hIGZlY2hhIGRlIGV4cGlyYWNpw7NuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NAorbXNnaWQgIk90aGVyIgorbXNnc3RyICJPdHJvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NQorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAidGVybWluYXIgdmFsb3JlcyBjb24gdW4gYnl0ZSBOVUxMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NgorbXNnaWQgInNob3cgdmFyaWFibGUgbmFtZXMgb25seSIKK21zZ3N0ciAibW9zdHJhciBzb2xvIG5vbWJyZXMgZGUgdmFyaWFibGVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NworbXNnaWQgInJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzIG9uIGxvb2t1cCIKK21zZ3N0ciAicmVzcGV0YXIgZGlyZWN0aXZhcyBpbmNsdWRlIGVuIGxhIGLDunNxdWVkYSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTgKK21zZ2lkICJzaG93IG9yaWdpbiBvZiBjb25maWcgKGZpbGUsIHN0YW5kYXJkIGlucHV0LCBibG9iLCBjb21tYW5kIGxpbmUpIgorbXNnc3RyICJtb3N0cmFyIGVsIG9yaWdlbiBkZSBjb25maWd1cmFjacOzbiAoYXJjaGl2bywgc3RkaW4sIGJsb2IsIGNvbWFuZG8pIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OQorbXNnaWQgInNob3cgc2NvcGUgb2YgY29uZmlnICh3b3JrdHJlZSwgbG9jYWwsIGdsb2JhbCwgc3lzdGVtLCBjb21tYW5kKSIKK21zZ3N0ciAiIgorIm1vc3RyYXIgZWwgc2NvcGUgZGUgbGEgY29uZmlndXJhY2nDs24gKHdvcmt0cmVlLCBsb2NhbCwgZ2xvYmFsLCBzeXN0ZW0sICIKKyJjb21tYW5kKSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNjAgYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQwCittc2dpZCAidmFsdWUiCittc2dzdHIgInZhbG9yIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE2MAorbXNnaWQgIndpdGggLS1nZXQsIHVzZSBkZWZhdWx0IHZhbHVlIHdoZW4gbWlzc2luZyBlbnRyeSIKK21zZ3N0ciAiY29uIC0tZ2V0LCB1c2EgZWwgdmFsb3IgcG9yIGRlZmVjdG8gY3VhbmRvIGZhbHRhIHVuYSBlbnRyYWRhIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgJWQiCittc2dzdHIgIm7Dum1lcm8gZGUgYXJndW1lbnRvcyBpbnbDoWxpZG9zLCBkZWJlcsOtYW4gc2VyICVkIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgZnJvbSAlZCB0byAlZCIKK21zZ3N0ciAibsO6bWVybyBkZSBhcmd1bWVudG9zIGludsOhbGlkb3MsIGRlYmVyw61hbiBzZXIgZGUgJWQgYSAlZCIKKworIzogYnVpbHRpbi9jb25maWcuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgInBhdHLDs24gZGUgbGxhdmUgaW52w6FsaWRvOiAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZvcm1hdCBkZWZhdWx0IGNvbmZpZyB2YWx1ZTogJXMiCittc2dzdHIgImZhbGzDsyBhbCBmb3JtYXRlYXIgZWwgdmFsb3IgcG9yIGRlZmVjdG8gZGUgY29uZmlndXJhY2nDs246ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcGFyc2UgY29sb3IgJyVzJyIKK21zZ3N0ciAibm8gc2UgYW5hbGl6YXIgY29sb3IgJyVzJyIKKworIzogYnVpbHRpbi9jb25maWcuYzo0NTkKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBhbmFsaXphciBlbCB2YWxvciBwb3IgZGVmZWN0byBkZSBjb2xvciIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MTIgYnVpbHRpbi9jb25maWcuYzo3NjgKK21zZ2lkICJub3QgaW4gYSBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICJubyBlbiB1biBkaXJlY3RvcmlvIGdpdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MTUKK21zZ2lkICJ3cml0aW5nIHRvIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgImVzY3JpYmlyIGVuIHN0ZGluIG5vIGVzdMOhIHNvcG9ydGFkbyIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MTgKK21zZ2lkICJ3cml0aW5nIGNvbmZpZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJlc2NyaWJpciBibG9icyBkZSBjb25maWd1cmFjacOzbiBubyBlc3TDoSBzb3BvcnRhZG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiIKKyIjIEVzdGUgZXMgZWwgYXJjaGl2byBkZSBjb25maWd1cmFjacOzbiBkZSBHaXQgcG9yIHVzdWFyaW8uXG4iCisiW3VzZXJdXG4iCisiIyBQb3IgZmF2b3IsIGFkYXB0YSB5IGRlc2NvbWVudGEgbGFzIHNpZ3VpZW50ZXMgbMOtbmVhczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjI3Cittc2dpZCAib25seSBvbmUgY29uZmlnIGZpbGUgYXQgYSB0aW1lIgorbXNnc3RyICJzb2xvIHVuIGFyY2hpdm8gZGUgY29uZmlndXJhY2nDs24gYSBsYSB2ZXoiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjMyCittc2dpZCAiLS1sb2NhbCBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLWxvY2FsIHNvbG8gcHVlZG8gc2VyIHVzYWRvIGRlbnRybyBkZSB1biByZXBvc2l0b3JpbyIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MzUKK21zZ2lkICItLWJsb2IgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1ibG9iIHNvbG8gcHVlZGUgc2VyIHVzYWRvIGRlbnRybyBkZSB1biByZXBvc2l0b3JpbyIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NTUKK21zZ2lkICIkSE9NRSBub3Qgc2V0IgorbXNnc3RyICIkSE9NRSBubyBlc3TDoSBjb25maWd1cmFkbyIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NzkKK21zZ2lkICIiCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgorbXNnc3RyICIiCisiLS13b3JrdHJlZSBubyBwdWVkZSBzZXIgdXNhZG8gY29uIG11bHRpcGxlcyDDoXJib2xlcyBkZSB0cmFiYWpvIGEgbWVub3MgcXVlICIKKyJsYVxuIgorImV4dGVuc2nDs24gd29ya3RyZWVDb25maWcgZXN0w6kgaGFiaWxpdGFkYS4gUG9yIGZhdm9yIGxlYSBcIkNPTkZJR1VSQVRJT04gRklMRSIKKyJcIlxuIgorImVuIFwiZ2l0IGhlbHAgd29ya3RyZWVcIiBwYXJhIG3DoXMgZGV0YWxsZXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzE0Cittc2dpZCAiLS1nZXQtY29sb3IgYW5kIHZhcmlhYmxlIHR5cGUgYXJlIGluY29oZXJlbnQiCittc2dzdHIgIi0tZ2V0LWNvbG9yIHkgdGlwbyBkZSB2YXJpYWJsZSBpbmNvaGVyZW50ZSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTkKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICJzb2xvIHVuYSBhY2Npw7NuIGEgbGEgdmV6IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczMgorbXNnaWQgIi0tbmFtZS1vbmx5IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWxpc3Qgb3IgLS1nZXQtcmVnZXhwIgorbXNnc3RyICItLW5hbWUtb25seSBzb2xvIGVzIGFwbGljYWJsZSBwYXJhIC0tbGlzdCBvIC0tZ2V0LXJlZ2V4cCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzgKK21zZ2lkICIiCisiLS1zaG93LW9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwLCBhbmQgLS0iCisibGlzdCIKK21zZ3N0ciAiIgorIi0tc2hvdy1vcmlnaW4gc29sbyBlcyBhcGxpY2FibGUgcGFyYSAtLWdldCwgLS1nZXQtYWxsLCAtLWdldC1yZWdleHAsIHkgLS1saXN0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0NAorbXNnaWQgIi0tZGVmYXVsdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQiCittc2dzdHIgIi0tZGVmYXVsdCBzb2xvIGVzIGFwbGljYWJsZSBwYXJhIC0tZ2V0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyIGVsIGFyY2hpdm8gZGUgY29uZmlndXJhY2nDs24gJyVzJyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NjAKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGNvbmZpZyBmaWxlKHMpIgorbXNnc3RyICJlcnJvciBhbCBwcm9jZXNhciBhcmNoaXZvKHMpIGRlIGNvbmZpZ3VyYWNpw7NuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3MAorbXNnaWQgImVkaXRpbmcgc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiZWRpdGFyIHN0ZGluIG5vIGVzdMOhIHNvcG9ydGFkbyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzIKK21zZ2lkICJlZGl0aW5nIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgImVkaXRhciBibG9icyBubyBlc3TDoSBzb3BvcnRhZG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBjcmVhciBlbCBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNpw7NuICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IG92ZXJ3cml0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBhIHNpbmdsZSB2YWx1ZVxuIgorIiAgICAgICBVc2UgYSByZWdleHAsIC0tYWRkIG9yIC0tcmVwbGFjZS1hbGwgdG8gY2hhbmdlICVzLiIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZWRlIHNvYnJlc2NyaWJpciBtw7psdGlwbGVzIHZhbG9yZXMgY29uIHVuIMO6bmljbyB2YWxvclxuIgorIlx0VXNlIHVuYSByZWdleHAsIC0tYWRkIG8gLS1yZXBsYWNlLWFsbCBwYXJhIGNhbWJpYXIgJXMuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjg3MyBidWlsdGluL2NvbmZpZy5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHNlY3Rpb246ICVzIgorbXNnc3RyICJubyBleGlzdGUgbGEgc2VjY2nDs246ICVzIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5MAorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjEwMAorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAibW9zdHJhciB0YW1hw7FvcyBlbiBmb3JtYXRvIGxlZ2libGUgcGFyYSBodW1hbm8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNgorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8b3BjaW9uZXM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIC0tZGlydHkiCittc2dzdHIgImdpdCBkZXNjcmliZSBbPG9wY2lvbmVzPl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiaGVhZCIKK21zZ3N0ciAiaGVhZCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAibGlnaHR3ZWlnaHQiCittc2dzdHIgImxpZ2VybyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiYW5ub3RhdGVkIgorbXNnc3RyICJhbm90YWRvIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAidGFnIGFub3RhZG8gJXMgbm8gZGlzcG9uaWJsZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIgorbXNnc3RyICJ0YWcgYW5vdGFkbyAlcyBubyB0aWVuZSBub21icmUgZW1iZWJpZG8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAidGFnICclcycgZXMgcmVhbG1lbnRlICclcycgYXF1w60iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICJubyBoYXkgdGFnIHF1ZSBjb25jdWVyZGUgZXhhY3RhbWVudGUgY29uICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAiTm8gaGF5IGNvaW5jaWRlbmNpYSBleGFjdGEgZW4gcmVmcyBvIHRhZ3MsIGJ1c2NhbmRvIGVuIGRlc2NyaWJlXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgImLDunNxdWVkYSBmaW5hbGl6YWRhIGEgbGFzICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKyJObyBoYXkgdGFncyBhbm90YWRvcyBxdWUgcHVlZGFuIGRlc2NyaWJpciAnJXMnLlxuIgorIlNpbiBlbWJhcmdvLCBodWJpZXJvbiB0YWdzIG5vIGFub3RhZG9zOiBpbnRlbnRlIC0tdGFncy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorIk5pbmfDum4gdGFnIHB1ZWRlIGRlc2NyaWJpdCAnJXMnLlxuIgorIkludGVudGUgLS1hbHdheXMsIG8gY3JlZSBhbGd1bm9zIHRhZ3MuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICIlbHUgY29tbWl0cyBjcnV6YWRvc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorInNlIGVuY29udHLDsyBtw6FzIGRlICVpIHRhZ3M7IHNlIG1vc3Ryw7MgJWkgbcOhcyByZWNpZW50ZVxuIgorImZpbiBkZSBsYSBiw7pzcXVlZGEgZW4gJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJkZXNjcmliZSAlc1xuIgorbXNnc3RyICJkZXNjcmliZSAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICJOb21icmUgZGUgb2JqZXRvICVzIG5vIHbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbmVpdGhlciBhIGNvbW1pdCBub3IgYmxvYiIKK21zZ3N0ciAiJXMgbm8gZXMgdW4gY29tbWl0IG5pIHVuIGJsb2IiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTEKK21zZ2lkICJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IgorbXNnc3RyICJlbmNvbnRyYXIgZWwgdGFnIHF1ZSB2aWVuZSBkZXNwdcOpcyBkZWwgY29tbWl0IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUyCittc2dpZCAiZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVyciIKK21zZ3N0ciAiaGFjZXIgZGVidWcgYSBsYSBlc3RyYXRlZ2lhIGRlIGLDunNxdWVkYSBlbiBzdGRlcnIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTMKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAidXNlIGN1YWxxdWllciByZWYiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTQKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAidXNlIGN1YWxxdWllciB0YWcsIGluY2x1c28gbG9zIG5vIGFub3RhZG9zIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU1Cittc2dpZCAiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIKK21zZ3N0ciAic2llbXByZSB1c2FyIGZvcm1hdG8gbGFyZ28iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTYKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgInNvbG8gc2VndWlyIGVsIHByaW1lciBwYXRyw7NuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU5Cittc2dpZCAib25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyIKK21zZ3N0ciAic29sbyBtb3N0cmFyIGNvbmNvcmRhbmNpYXMgZXhhY3RhcyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2MQorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgImNvbnNpZGVyYXIgPG4+IHRhZ3MgbcOhcyByZWNpZW50ZXMgKGRlZmF1bHQ6MTApIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTYzCittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAic29sbyBjb25zaWRlcmFyIHRhZ3MgcXVlIGNvbmN1ZXJkZW4gY29uIDxwYXRyw7NuPiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2NQorbXNnaWQgImRvIG5vdCBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAibm8gY29uc2lkZXJhciB0YWdzIHF1ZSBjb25jdWVyZGVuIGNvbiA8cGF0csOzbj4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjcgYnVpbHRpbi9uYW1lLXJldi5jOjUzNQorbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAibW9zdHJhciBlbCBvYmpldG8gY29tbWl0IGFicmV2aWFkbyBjb21vIGZhbGxiYWNrIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY4IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NzEKK21zZ2lkICJtYXJrIgorbXNnc3RyICJtYXJjYSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2OQorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIKK21zZ3N0ciAiYWRqdW50YXIgPG1hcmNhPiBlbiBlbCDDoXJib2wgZGUgdHJhYmFqbyBzdWNpbyAoZGVmYXVsdDogXCItZGlydHlcIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NzIKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGJyb2tlbiB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWJyb2tlblwiKSIKK21zZ3N0ciAiYWRqdW50YXIgPG1hcmNhPiBlbiB1biDDoXJib2wgZGUgdHJhYmFqbyByb3RvIChkZWZhdWx0OiBcIi1icm9rZW5cIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1OTAKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiLS1sb25nIGVzIGluY29tcGF0aWJsZSBjb24gLS1hYmJyZXY9MCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYxOQorbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICJObyBzZSBlbmNvbnRyYXJvbiBub21icmVzLCBubyBzZSBwdWVkZSBkZXNjcmliaXIgbmFkYS4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NzAKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1kaXJ0eSBlcyBpbmNvbXBhdGlibGUgY29uIGNvbW1pdC1pc21vcyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY3MgorbXNnaWQgIi0tYnJva2VuIGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1icm9rZW4gZXMgaW5jb21wYXRpYmxlIGNvbiBjb21taXQtaXNtb3MiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICInJXMnOiBubyBlcyB1biBhcmNoaXZvIHJlZ3VsYXIgbyB1biBlbmxhY2Ugc2ltYsOzbGljbyIKKworIzogYnVpbHRpbi9kaWZmLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAib3BjacOzbiBpbnbDoWxpZGE6ICVzIgorCisjOiBidWlsdGluL2RpZmYuYzozNTAKK21zZ2lkICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiTm8gZXMgdW4gcmVwb3NpdG9yaW8gZ2l0IgorCisjOiBidWlsdGluL2RpZmYuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIm9iamV0byAnJXMnIGVudHJlZ2FkbyBubyBlcyB2w6FsaWRvLiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIm3DoXMgZGUgZG9zIGJsb2JzIGVudHJlZ2Fkb3M6ICclcyciCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmhhbmRsZWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJvYmpldG8gbm8gbWFuZWphZG8gJyVzJyBlbnRyZWdhZG8uIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAKK21zZ2lkICJnaXQgZGlmZnRvb2wgWzxvcHRpb25zPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBkaWZmdG9vbCBbPG9wY2lvbmVzPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxydXRhPi4uLl0iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkOiAlZCIKK21zZ3N0ciAiZmFsbMOzOiAlZCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgZWwgc3ltbGluayAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rIGZpbGUgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciBlbCBhcmNoaXZvIHN5bWxpbmsgJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIGZvciBzeW1saW5rICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgZWwgb2JqZXRvICVzIHBhcmEgZWwgc3ltbGluayAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjQxMworbXNnaWQgIiIKKyJjb21iaW5lZCBkaWZmIGZvcm1hdHMoJy1jJyBhbmQgJy0tY2MnKSBhcmUgbm90IHN1cHBvcnRlZCBpblxuIgorImRpcmVjdG9yeSBkaWZmIG1vZGUoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4iCittc2dzdHIgIiIKKyJmb3JtYXRvcyBjb21iaW5hZG9zIGRlIGRpZmYgKCctYycgeSAnLS1jYycpIG5vIHNvcG9ydGFkb3MgZW5cbiIKKyJtb2RvIGRpZmYgcGFyYSBkaXJlY3RvcmlvKCctZCcgeSAnLS1kaXItZGlmZicpLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJib3RoIGZpbGVzIG1vZGlmaWVkOiAnJXMnIGFuZCAnJXMnLiIKK21zZ3N0ciAiYW1ib3MgYXJjaGl2b3MgbW9kaWZpY2Fkb3M6ICclcycgeSAnJXMnLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNgorbXNnaWQgIndvcmtpbmcgdHJlZSBmaWxlIGhhcyBiZWVuIGxlZnQuIgorbXNnc3RyICJhcmNoaXZvIGRlbCDDoXJib2wgZGUgdHJhYmFqbyBoYSBzaWRvIGRlamFkby4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcG9yYXJ5IGZpbGVzIGV4aXN0IGluICclcycuIgorbXNnc3RyICJhcmNoaXZvIHRlbXBvcmFsIGV4aXN0ZSBlbiAnJXMnLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0OAorbXNnaWQgInlvdSBtYXkgd2FudCB0byBjbGVhbnVwIG9yIHJlY292ZXIgdGhlc2UuIgorbXNnc3RyICJ0YWwgdmV6IGRlc2VlcyBsaW1waWFyIG8gcmVjdXBlcmFyIGVzdG9zLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5NworbXNnaWQgInVzZSBgZGlmZi5ndWl0b29sYCBpbnN0ZWFkIG9mIGBkaWZmLnRvb2xgIgorbXNnc3RyICJ1c2UgYGRpZmYuZ3VpdG9vbGAgZW4gbHVnYXIgZGUgYGRpZmYudG9vbGAiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTkKK21zZ2lkICJwZXJmb3JtIGEgZnVsbC1kaXJlY3RvcnkgZGlmZiIKK21zZ3N0ciAicmVhbGl6YXIgdW4gZGlmZiBkZSB0b2RvIGVsIGRpcmVjdG9yaW8iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDEKK21zZ2lkICJkbyBub3QgcHJvbXB0IGJlZm9yZSBsYXVuY2hpbmcgYSBkaWZmIHRvb2wiCittc2dzdHIgIm5vIG1vc3RyYXIgYW50ZXMgZGUgbGFuemFyIHVuYSBoZXJyYW1pZW50YSBkZSBkaWZmIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA2Cittc2dpZCAidXNlIHN5bWxpbmtzIGluIGRpci1kaWZmIG1vZGUiCittc2dzdHIgInVzYXIgZW5sYWNlcyBzaW1iw7NsaWNvcyBlbiBtb2RvIGRpci1kaWZmIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA3Cittc2dpZCAidG9vbCIKK21zZ3N0ciAiaGVycmFtaWVudGEiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDgKK21zZ2lkICJ1c2UgdGhlIHNwZWNpZmllZCBkaWZmIHRvb2wiCittc2dzdHIgInVzYXIgbGEgaGVycmFtaWVudGEgZGUgZGlmZiBlc3BlY2lmaWNhZGEiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTAKK21zZ2lkICJwcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggYC0tdG9vbGAiCittc2dzdHIgIiIKKyJtb3N0cmFyIHVuYSBsaXN0YSBkZSBoZXJyYW1pZW50YXMgZGUgZGlmZiBxdWUgcHVlZGVuIHNlciB1c2FkYXMgY29uIGAtLXRvb2xgIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEzCittc2dpZCAiIgorIm1ha2UgJ2dpdC1kaWZmdG9vbCcgZXhpdCB3aGVuIGFuIGludm9rZWQgZGlmZiB0b29sIHJldHVybnMgYSBub24gLSB6ZXJvIGV4aXQgIgorImNvZGUiCittc2dzdHIgIiIKKyJoYWNlciBxdWUgJ2dpdC1kaWZmdG9vbCcgc2FsZ2EgY3VhbmRvIHVuYSBoZXJyYW1pZW50YSBkZSBkaWZmIHJldG9ybmUgdW4gIgorImPDs2RpZ28gZGUgc2FsaWRhIGRpc3RpbnRvIGRlIGNlcm8iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTYKK21zZ2lkICJzcGVjaWZ5IGEgY3VzdG9tIGNvbW1hbmQgZm9yIHZpZXdpbmcgZGlmZnMiCittc2dzdHIgImVzcGVjaWZpY2FyIHVuIGNvbWFuZG8gcGVyc29uYWxpemFkbyBwYXJhIHZlciBkaWZmcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxNworbXNnaWQgInBhc3NlZCB0byBgZGlmZmAiCittc2dzdHIgInBhc2FkbyBhIGBkaWZmYCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjczMgorbXNnaWQgImRpZmZ0b29sIHJlcXVpcmVzIHdvcmt0cmVlIG9yIC0tbm8taW5kZXgiCittc2dzdHIgImRpZmZ0b29sIHJlcXVpZXJlIHVuIMOhcmJvbCBkZSB0cmFiYWpvIG8gLS1uby1pbmRleCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjczOQorbXNnaWQgIi0tZGlyLWRpZmYgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiLS1kaXJ0eS1kaWZmIGVzIGluY29tcGF0aWJsZSBjb24gLS1uby1pbmRleCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc0MgorbXNnaWQgIi0tZ3VpLCAtLXRvb2wgYW5kIC0tZXh0Y21kIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tZ3VpLCAtLXRvb2wgeSAtLWV4dGNtZCBzb24gbXV0dWFtZW50ZSBleGNsdXNpdmFzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzUwCittc2dpZCAibm8gPHRvb2w+IGdpdmVuIGZvciAtLXRvb2w9PHRvb2w+IgorbXNnc3RyICJubyBzZSBoYSBwcm9wb3JjaW9uYWRvIDxoZXJyYW1pZW50YT4gcGFyYSAtLXRvb2w9PGhlcnJhbWllbnRhPiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1NworbXNnaWQgIm5vIDxjbWQ+IGdpdmVuIGZvciAtLWV4dGNtZD08Y21kPiIKK21zZ3N0ciAibm8gc2UgaGEgZW50cmVnYWRvIDxjb21hbmRvPiBwYXJhIC0tZXh0Y21kPTxjb21hbmRvPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYKK21zZ2lkICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3B0aW9ucz4gPGVudi12YXI+IgorbXNnc3RyICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3BjaW9uZXM+IDxlbnYtdmFyPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjM3IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgInR5cGUiCittc2dzdHIgInRpcG8iCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MQorbXNnaWQgImRlZmF1bHQgZm9yIGdpdF9lbnZfKiguLi4pIHRvIGZhbGwgYmFjayBvbiIKK21zZ3N0ciAiZGVmYXVsdCBwYXJhIGdpdF9lbnZfKiguLi4pIGVzIGhhY2VyIGZhbGxiYWNrIGVuIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NDMKK21zZ2lkICJiZSBxdWlldCBvbmx5IHVzZSBnaXRfZW52XyooKSB2YWx1ZSBhcyBleGl0IGNvZGUiCittc2dzdHIgInNlciBzaWxlbmNpb3NvIHNvbG8gdXNhciB2YWxvciBnaXRfZW52XyooKSBjb21vIGPDs2RpZ28gZGUgc2FsaWRhIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYSBib29sZWFuIHZhbHVlIHdpdGggYC0tdHlwZT1ib29sYCwgbm90IGAlc2AiCittc2dzdHIgIm9wY2nDs24gYC0tZGVmYXVsdCcgZXNwZXJhIHVuIHZhbG9yIGJvb2xlYW4gY29uIGAtLXR5cGU9Ym9vbGAsIG5vIGAlc2AiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYW4gdW5zaWduZWQgbG9uZyB2YWx1ZSB3aXRoIGAtLXR5cGU9dWxvbmdgLCBub3QgYCIKKyIlc2AiCittc2dzdHIgIiIKKyJvcGNpw7NuIGAtLWRlZmF1bHQnIGVzcGVyYSB1biB2YWxvciB1bnNpZ25lZCBsb25nIGNvbiBgLS10eXBlPXVsb25nYCwgbm8gYCVzYCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjI5Cittc2dpZCAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKK21zZ3N0ciAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjg1MworbXNnaWQgIkVycm9yOiBDYW5ub3QgZXhwb3J0IG5lc3RlZCB0YWdzIHVubGVzcyAtLW1hcmstdGFncyBpcyBzcGVjaWZpZWQuIgorbXNnc3RyICIiCisiRXJyb3I6IE5vIHNlIHB1ZWRlIGV4cG9ydGFyIGxvcyB0YWdzIGFuaWRhZG9zIGEgbWVub3MgcXVlIC0tbWFyay10YWdzIHNlYSAiCisiZXNwZWNpZmljYWRvLiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTIKK21zZ2lkICJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIgorbXNnc3RyICJtb3N0cmFyIHByb2dyZXNvIGRlc3B1w6lzIGRlIDxuPiBvYmpldG9zIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NAorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIKK21zZ3N0ciAic2VsZWNjaW9uYXIgZWwgbWFuZWpvIGRlIHRhZ3MgZmlybWFkb3MiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU3Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAic2VsZWNjaW9uYXIgZWwgbWFuZWpvIGRlIHRhZ3MgcXVlIHNvbiB0YWdzIGRlIG9iamV0b3MgZmlsdHJhZG9zIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MAorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBjb21taXQgbWVzc2FnZXMgaW4gYW4gYWx0ZXJuYXRlIGVuY29kaW5nIgorbXNnc3RyICJzZWxlY2Npb25hciBlbCBtYW5lam8gZGUgbWVuc2FqZXMgZGUgY29tbWl0IGVuIHVuIGVuY29kaW5nIGRpZmVyZW50ZSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjMKK21zZ2lkICJEdW1wIG1hcmtzIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAiVm9sY2FyIG1hcmNhcyBhIGVzdGUgYXJjaGl2byIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjUKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgIkltcG9ydGFyIG1hcmNhcyBkZSBlc3RlIGFyY2hpdm8iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY5Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAiSW1wb3J0YXIgbWFyY2FzIGRlIGVzdGUgYXJjaGl2byBzaSBleGlzdGUiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTcxCittc2dpZCAiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiCittc2dzdHIgIkZhbHNpZmljYXIgdW4gdGFnZ2VyIGN1YW5kbyBsZXMgZmFsdGEgdW5vIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3MworbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICJNb3N0cmFyIHRvZG8gZWwgw6FyYm9sIHBhcmEgY2FkYSBjb21taXQiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc1Cittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgIlVzZSBlbCBmZWF0dXJlIGRvbmUgcGFyYSB0ZXJtaW5hciBlbCBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc2Cittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICJTYWx0YXIgZWwgb3V0cHV0IGRlIGRhdGEgYmxvYiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzcgYnVpbHRpbi9sb2cuYzoxNzA1Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAicmVmc3BlYyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzgKK21zZ2lkICJBcHBseSByZWZzcGVjIHRvIGV4cG9ydGVkIHJlZnMiCittc2dzdHIgIkFwbGljYXIgcmVmc3BlYyBwYXJhIGxvcyByZWZzIGV4cG9ydGFkb3MiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc5Cittc2dpZCAiYW5vbnltaXplIG91dHB1dCIKK21zZ3N0ciAiYW5vbmltaXphciBsYSBzYWxpZGEiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTgxCittc2dpZCAiUmVmZXJlbmNlIHBhcmVudHMgd2hpY2ggYXJlIG5vdCBpbiBmYXN0LWV4cG9ydCBzdHJlYW0gYnkgb2JqZWN0IGlkIgorbXNnc3RyICIiCisiUGFkcmVzIGRlIGxhIHJlZmVyZW5jaWEgcXVlIG5vIGVzdGFuIGVuIGZhc3QtZXhwb3J0IHN0cmVhbSBwb3IgaWQgZGUgb2JqZXRvIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MworbXNnaWQgIlNob3cgb3JpZ2luYWwgb2JqZWN0IGlkcyBvZiBibG9icy9jb21taXRzIgorbXNnc3RyICJNb3N0cmFyIGlkcyBkZSBvYmpldG9zIG9yaWdpbmFsZXMgcGFyYSBibG9icy9jb21taXRzIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4NQorbXNnaWQgIkxhYmVsIHRhZ3Mgd2l0aCBtYXJrIGlkcyIKK21zZ3N0ciAiTWFyY2FyIHRhZ3MgY29uIGlkcyBkZSBtYXJrIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTIyMAorbXNnaWQgIkNhbm5vdCBwYXNzIGJvdGggLS1pbXBvcnQtbWFya3MgYW5kIC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cyIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcGFzYXIgYW1ib3MgLS1pbXBvcnQtbWFya3MgeSAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNAorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8b3BjaW9uZXM+XSBbPHJlcG9zaXRvcmlvPiBbPHJlZnNwZWM+Li4uXV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNQorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IgorbXNnc3RyICJnaXQgZmV0Y2ggWzxvcGNpb25lcz5dIDxncnVwbz4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNgorbXNnaWQgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wY2lvbmVzPl0gWyg8cmVwb3NpdG9yaW8+IHwgPGdydXBvPikuLi5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzcKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBmZXRjaCAtLWFsbCBbPG9wY2lvbmVzPl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTYKK21zZ2lkICJmZXRjaC5wYXJhbGxlbCBjYW5ub3QgYmUgbmVnYXRpdmUiCittc2dzdHIgImZldGNoLnBhcmFsbGVsIG5vIHB1ZWRlIHNlciBuZWdhdGl2byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzOSBidWlsdGluL3B1bGwuYzoxODQKK21zZ2lkICJmZXRjaCBmcm9tIGFsbCByZW1vdGVzIgorbXNnc3RyICJleHRyYWVyIGRlIHRvZG9zIGxvcyByZW1vdG9zIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQxIGJ1aWx0aW4vcHVsbC5jOjIyOAorbXNnaWQgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvZmV0Y2giCittc2dzdHIgImNvbmZpZ3VyYXIgdXBzdHJlYW0gcGFyYSBnaXQgcHVsbGwvZmV0Y2giCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMgYnVpbHRpbi9wdWxsLmM6MTg3Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICJhZGp1bnRhciBhIC5naXQvRkVUQ0hfSEVBRCBlbiBsdWdhciBkZSBzb2JyZXNjcmliaXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDUgYnVpbHRpbi9wdWxsLmM6MTkwCittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICJydXRhIHBhcmEgY2FyZ2FyIGVsIHBhcXVldGUgYWwgZmluYWwgZGVsIHJlbW90byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NgorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCByZWZlcmVuY2UiCittc2dzdHIgImZvcnphciBzb2JyZXNjcml0dXJhIGRlIHJlZmVyZW5jaWEgbG9jYWwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDgKK21zZ2lkICJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiCittc2dzdHIgImV4dHJhZXIgZGUgbcO6bHRpcGxlcyByZW1vdG9zIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUwIGJ1aWx0aW4vcHVsbC5jOjE5NAorbXNnaWQgImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgImV4dHJhZXIgdG9kb3MgbG9zIHRhZ3MgeSBvYmpldG9zIGFzb2NpYWRvcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MgorbXNnaWQgImRvIG5vdCBmZXRjaCBhbGwgdGFncyAoLS1uby10YWdzKSIKK21zZ3N0ciAibm8gZXh0cmFlciB0b2RvcyBsb3MgdGFncyAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIm7Dum1lcm8gZGUgc3VibcOzZHVsb3MgZXh0cmHDrWRvcyBlbiBwYXJhbGVsbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NiBidWlsdGluL3B1bGwuYzoxOTcKK21zZ2lkICJwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm8gbG9uZ2VyIG9uIHJlbW90ZSIKK21zZ3N0ciAibGltcGlhciByYW1hcyByZW1vdGFzIHJhc3RyZWFkYXMgcXVlIHlhIG5vIGVzdMOhbiBlbiBlbCByZW1vdG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTgKK21zZ2lkICJwcnVuZSBsb2NhbCB0YWdzIG5vIGxvbmdlciBvbiByZW1vdGUgYW5kIGNsb2JiZXIgY2hhbmdlZCB0YWdzIgorbXNnc3RyICIiCisibGltcGlhciB0YWdzIGxvY2FsZXMgcXVlIG5vIHNlIGVuY3VlbnRyYW4gZW4gZWwgcmVtb3RvIHkgZWxpbWluYXIgdGFncyAiCisiY2FtYmlhZG9zIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU5IGJ1aWx0aW4vZmV0Y2guYzoxODIgYnVpbHRpbi9wdWxsLmM6MTIxCittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICJlbiBkZW1hbmRhIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYwCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiY29udHJvbGFyIGV4dHJhY2Npw7NuIHJlY3Vyc2l2YSBkZSBzdWJtw7NkdWxvcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2NCBidWlsdGluL3B1bGwuYzoyMDUKK21zZ2lkICJrZWVwIGRvd25sb2FkZWQgcGFjayIKK21zZ3N0ciAibWFudGVuZXIgZWwgcGFxdWV0ZSBkZXNjYXJnYWRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY2Cittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgInBlcm1pdGlyIGFjdHVhbGl6YXIgbGEgcmVmIEhFQUQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjkgYnVpbHRpbi9mZXRjaC5jOjE3NSBidWlsdGluL3B1bGwuYzoyMDgKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIgorbXNnc3RyICJoaXN0b3JpYSBwcm9mdW5kYSBkZSB1biBjbG9uIHN1cGVyZmljaWFsIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcxCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyByZXBvc2l0b3J5IGJhc2VkIG9uIHRpbWUiCittc2dzdHIgImhpc3RvcmlhIHByb2Z1bmRhIGRlIHVuIHJlcG9zaXRvcmlvIHN1cGVyZmljaWFsIGJhc2FkbyBlbiB0aWVtcG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzcgYnVpbHRpbi9wdWxsLmM6MjExCittc2dpZCAiY29udmVydCB0byBhIGNvbXBsZXRlIHJlcG9zaXRvcnkiCittc2dzdHIgImNvbnZlcnRpciBhIHVuIHJlcG9zaXRvcmlvIGNvbXBsZXRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwCittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAiYW50ZXBvbmVyIGVzdG8gYSBzYWxpZGEgZGUgbGEgcnV0YSBkZWwgc3VibcOzZHVsbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MworbXNnaWQgIiIKKyJkZWZhdWx0IGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyAobG93ZXIgcHJpb3JpdHkgdGhhbiBjb25maWcgIgorImZpbGVzKSIKK21zZ3N0ciAiIgorImRlZmF1bHQgcGFyYSBleHRyYWNjacOzbiByZWN1cnNpdmEgZGUgc3VibcOzZHVsb3MgKG1lbm9yIHByaW9yaWRhZCBxdWUgIgorImFyY2hpdm9zIGRlIGNvbmZpZ3VyYWNpw7NuKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NyBidWlsdGluL3B1bGwuYzoyMTQKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgImFjZXB0YXIgcmVmcyBxdWUgYWN0dWFsaWNlbiAuZ2l0L3NoYWxsb3ciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODggYnVpbHRpbi9wdWxsLmM6MjE2Cittc2dpZCAicmVmbWFwIgorbXNnc3RyICJyZWZtYXAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODkgYnVpbHRpbi9wdWxsLmM6MjE3Cittc2dpZCAic3BlY2lmeSBmZXRjaCByZWZtYXAiCittc2dzdHIgImVzcGVjaWZpY2FyIGV4dHJhY2Npw7NuIGRlIHJlZm1hcCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5NgorbXNnaWQgInJlcG9ydCB0aGF0IHdlIGhhdmUgb25seSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRoaXMgb2JqZWN0IgorbXNnc3RyICJyZXBvcnRhIHF1ZSBzb2xvIHRlbmVtb3Mgb2JqZXRvcyBhbGNhbnphYmxlcyBkZSBlc3RlIG9iamV0byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5OQorbXNnaWQgInJ1biAnZ2MgLS1hdXRvJyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiZWplY3V0YXIgJ2djIC0tYXV0bycgdHJhcyBlbCBmZXRjaCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMSBidWlsdGluL3B1bGwuYzoyMjYKK21zZ2lkICJjaGVjayBmb3IgZm9yY2VkLXVwZGF0ZXMgb24gYWxsIHVwZGF0ZWQgYnJhbmNoZXMiCittc2dzdHIgInZlcmlmaWNhciB1cGRhdGVzIGZvcnphZG9zIGVuIHRvZG9zIGxvcyBicmFuY2ggYWN0dWFsaXphZG9zIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAzCittc2dpZCAid3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiZXNjcmliaXIgY29tbWl0LWdyYXBoIGx1ZWdvIGRlbCBmZXRjaCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUxMworbXNnaWQgIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIgorbXNnc3RyICJObyBzZSBwdWVkbyBlbmNvbnRyYXIgcmVmIHJlbW90YSBIRUFEIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZpZ3VyYXRpb24gZmV0Y2gub3V0cHV0IGNvbnRhaW5zIGludmFsaWQgdmFsdWUgJXMiCittc2dzdHIgImxhIGNvbmZpZ3VyYWNpw7NuIGZldGNoLm91dHB1dCBjb250aWVuZSBlbCB2YWxvciBpbnbDoWxpZG8gJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAib2JqZXRvICVzIG5vIGVuY29udHJhZG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTUKK21zZ2lkICJbdXAgdG8gZGF0ZV0iCittc2dzdHIgIlthY3R1YWxpemFkb10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NjggYnVpbHRpbi9mZXRjaC5jOjc4NCBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiW3JlY2hhemFkb10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NjkKK21zZ2lkICJjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgdHJhZXIgZW4gbGEgcmFtYSBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzkKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIlthY3R1YWxpemFjacOzbiBkZSB0YWddIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzgwIGJ1aWx0aW4vZmV0Y2guYzo4MTcgYnVpbHRpbi9mZXRjaC5jOjgzOQorIzogYnVpbHRpbi9mZXRjaC5jOjg1MQorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICJubyBzZSBwb3NpYmxlIGFjdHVhbGl6YXIgZWwgcmVmIGxvY2FsIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzg0Cittc2dpZCAid291bGQgY2xvYmJlciBleGlzdGluZyB0YWciCittc2dzdHIgInBvZHLDrWEgZ29scGVhciB0YWcgZXhpc3RlbnRlIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODA2Cittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICJbbnVldm8gdGFnXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwOQorbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW251ZXZhIHJhbWFdIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODEyCittc2dpZCAiW25ldyByZWZdIgorbXNnc3RyICJbbnVldmEgcmVmZXJlbmNpYV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICJhY3R1YWxpemFjacOzbiBmb3J6YWRhIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiYXZhbmNlIGxlbnRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODc3Cittc2dpZCAiIgorIkZldGNoIG5vcm1hbGx5IGluZGljYXRlcyB3aGljaCBicmFuY2hlcyBoYWQgYSBmb3JjZWQgdXBkYXRlLFxuIgorImJ1dCB0aGF0IGNoZWNrIGhhcyBiZWVuIGRpc2FibGVkLiBUbyByZS1lbmFibGUsIHVzZSAnLS1zaG93LWZvcmNlZC11cGRhdGVzJ1xuIgorImZsYWcgb3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIHRydWUnLiIKK21zZ3N0ciAiIgorIkZldGNoIG5vcm1hbG1lbnRlIGluY2lkYSBxdcOpIGJyYW5jaGVzIGhhbiB0ZW5pZG8gdW4gdXBkYXRlIGZvcnphZG8sXG4iCisicGVybyBlc2EgdmFsaWRhY2nDs24gaGEgc2lkbyBkZXNoYWJpbGl0YWRhLiBQYXJhIGFjdGl2YXJsYSBkZSBudWV2byB1c2UgJy0tIgorInNob3ctZm9yY2VkLXVwZGF0ZXMnXG4iCisibyBlamVjdXRlICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIHRydWUnLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gY2hlY2sgZm9yY2VkIHVwZGF0ZXMuIFlvdSBjYW4gdXNlXG4iCisiJy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcycgb3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzICIKKyJmYWxzZSdcbiIKKyIgdG8gYXZvaWQgdGhpcyBjaGVjay5cbiIKK21zZ3N0ciAiIgorIlRvbcOzICUuMmYgc2VndW5kb3MgdmFsaWRhciBsb3MgdXBkYXRlcyBmb3J6YWRvcy4gUHVlZGVzIHVzYXJcbiIKKyInLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJyBvIGVqZWN1dGFyICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzICIKKyJmYWxzZSdcbiIKKyJwYXJhIGV2aXRhciBlc3RhIHZhbGlkYWNpw7NuLlxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHNcbiIKK21zZ3N0ciAiJXMgbm8gZW52acOzIHRvZG9zIGxvcyBvYmpldG9zIG5lY2VzYXJpb3NcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk0MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWplY3QgJXMgYmVjYXVzZSBzaGFsbG93IHJvb3RzIGFyZSBub3QgYWxsb3dlZCB0byBiZSB1cGRhdGVkIgorbXNnc3RyICJyZWNoYXphZG8gJXMgcG9ycXVlIHJhw61jZXMgc3VwZXJmaWNpYWxlcyBubyBwdWVkZW4gc2VyIGFjdHVhbGl6YWRhcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMjYgYnVpbHRpbi9mZXRjaC5jOjExNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIkRlc2RlICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorImFsZ3Vub3MgcmVmcyBsb2NhbGVzIG5vIHB1ZGllcm9uIHNlciBhY3R1YWxpemFkb3M7IGludGVudGUgZWplY3V0YXJcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHBhcmEgZWxpbWluYXIgY3VhbHF1aWVyIHJhbWEgdmllamEgbyBjb25mbGljdGl2YSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIHNlIHBvbmRyw6EgY29sZ2FkbykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIHNlIGhhIGNvbGdhZG8pIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2NworbXNnaWQgIltkZWxldGVkXSIKK21zZ3N0ciAiW2VsaW1pbmFkb10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTExMgorbXNnaWQgIihub25lKSIKK21zZ3N0ciAiKG5hZGEpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIlJlaHVzYW5kbyBleHRyYWVyIGVuIGxhIHJhbWEgYWN0dWFsICVzIGRlIHVuIHJlcG9zaXRvcmlvIG5vIHZhY8OtbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiT3BjacOzbiBcIiVzXCIgdmFsb3IgXCIlc1wiIG5vIGVzIHbDoWxpZG8gcGFyYSAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICJPcGNpw7NuIFwiJXNcIiBlcyBpZ25vcmFkYSBwb3IgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MjEKK21zZ2lkICJtdWx0aXBsZSBicmFuY2hlcyBkZXRlY3RlZCwgaW5jb21wYXRpYmxlIHdpdGggLS1zZXQtdXBzdHJlYW0iCittc2dzdHIgIm3Dumx0aXBsZXMgcmFtYXMgZGV0ZWN0YWRhcywgaW5jb21wYXRpYmxlIGNvbiAtLXNldC11cHN0cmVhbSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzYKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAibm8gY29uZmlndXJhciB1cHN0cmVhbSBwYXJhIHVuYSByYW1hIGRlIHJhc3RyZW8gcmVtb3RvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzOAorbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSB0YWciCittc2dzdHIgIm5vIGNvbmZpZ3VyYXIgdXBzdHJlYW0gcGFyYSB1biB0YWcgcmVtb3RvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ0MAorbXNnaWQgInVua25vd24gYnJhbmNoIHR5cGUiCittc2dzdHIgInRpcG8gZGUgYnJhbmNoIGRlc2Nvbm9jaWRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ0MgorbXNnaWQgIiIKKyJubyBzb3VyY2UgYnJhbmNoIGZvdW5kLlxuIgorInlvdSBuZWVkIHRvIHNwZWNpZnkgZXhhY3RseSBvbmUgYnJhbmNoIHdpdGggdGhlIC0tc2V0LXVwc3RyZWFtIG9wdGlvbi4iCittc2dzdHIgIiIKKyJubyBzZSBlbmNvbnRyw7MgcmFtYSBmdWVudGUuXG4iCisidGllbmVzIHF1ZSBlc3BlY2lmaWNhciBleGFjdGFtZW50ZSB1bmEgcmFtYSBjb24gbGEgb3BjacOzbiAtLXNldC11cHN0cmVhbS4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTY4IGJ1aWx0aW4vZmV0Y2guYzoxNjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIkV4dHJheWVuZG8gJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NzggYnVpbHRpbi9mZXRjaC5jOjE2MzMgYnVpbHRpbi9yZW1vdGUuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICJObyBzZSBwdWRvIGV4dHJhZXIgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmZXRjaCAnJXMnIChleGl0IGNvZGU6ICVkKVxuIgorbXNnc3RyICJubyBzZSBwdWRvIGhhY2VyIGZldGNoIGEgJyVzJyAoY8OzZGlnbyBkZSBzYWxpZGE6ICVkKVxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY5MworbXNnaWQgIiIKKyJObyByZW1vdGUgcmVwb3NpdG9yeSBzcGVjaWZpZWQuICBQbGVhc2UsIHNwZWNpZnkgZWl0aGVyIGEgVVJMIG9yIGFcbiIKKyJyZW1vdGUgbmFtZSBmcm9tIHdoaWNoIG5ldyByZXZpc2lvbnMgc2hvdWxkIGJlIGZldGNoZWQuIgorbXNnc3RyICIiCisiTm8gaGF5IHJlcG9zaXRvcmlvIHJlbW90byBlc3BlY2lmaWNhZG8uIFBvciBmYXZvciwgZXNwZWNpZmlxdWUgdW4gVVJMIG8gdW5cbiIKKyJub21icmUgcmVtb3RvIGRlbCBjdWFsIGxhcyBudWV2YXMgcmV2aXNpb25lcyBkZWJlbiBzZXIgZXh0cmHDrWRhcy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzMwCittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAiVGllbmVzIHF1ZSBlc3BlY2lmaWNhciB1biBub21icmUgZGUgdGFnLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODAKK21zZ2lkICJOZWdhdGl2ZSBkZXB0aCBpbiAtLWRlZXBlbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJQcm9mdW5kaWRhZCBuZWdhdGl2YSBlbiAtLWRlZXBlbiBubyBzb3BvcnRhZGEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzgyCittc2dpZCAiLS1kZWVwZW4gYW5kIC0tZGVwdGggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1kZWVwZW4geSAtLWRlcHRoIHNvbiBtdXR1YW1lbnRlIGV4Y2x1c2l2YXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzg3Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi0tZGVwdGggeSAtLXVuc2hhbGxvdyBubyBwdWVkZW4gc2VyIHVzYWRhcyBqdW50YXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzg5Cittc2dpZCAiLS11bnNoYWxsb3cgb24gYSBjb21wbGV0ZSByZXBvc2l0b3J5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tdW5zaGFsbG93IG5vIHRpZW5lIHNlbnRpZG8gZW4gdW4gcmVwb3NpdG9yaW8gY29tcGxldG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODA1Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiCittc2dzdHIgImZldGNoIC0tYWxsIG5vIHRvbWEgdW4gYXJndW1lbnRvIGRlIHJlcG9zaXRvcmlvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwNworbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwgbm8gdGllbmUgc2VudGlkbyBjb24gcmVmc3BlY3MiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODE2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgIk5vIGV4aXN0ZSBlbCByZW1vdG8gbyBncnVwbyByZW1vdG86ICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgyMworbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiRXh0cmFlciB1biBncnVwbyB5IGVzcGVjaWZpY2FyIHVuIHJlZnNwZWNzIG5vIHRpZW5lIHNlbnRpZG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODQxCittc2dpZCAiIgorIi0tZmlsdGVyIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgcmVtb3RlIGNvbmZpZ3VyZWQgaW4gZXh0ZW5zaW9ucy4iCisicGFydGlhbGNsb25lIgorbXNnc3RyICIiCisiLS1maWx0ZXIgc29sbyBwdWVkZSBzZXIgdXNhZG8gY29uIGVsIHJlbW90byBjb25maWd1cmFkbyBlbiBleHRlbnNpb25zLiIKKyJwYXJ0aWFsQ2xvbmUiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjE4Cittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lbnNhamU+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8YXJjaGl2bz5dIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzEKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgInBvYmxhciBlbCBsb2cgY29uIG3DoXhpbW8gPG4+IGVudHJhZGFzIGRlbCBzaG9ybG9nIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzQKK21zZ2lkICJhbGlhcyBmb3IgLS1sb2cgKGRlcHJlY2F0ZWQpIgorbXNnc3RyICJhbGlhcyBwYXJhIC0tbG9nIChkZXByZWNhZG8pIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzcKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICJ0ZXh0byIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc4Cittc2dpZCAidXNlIDx0ZXh0PiBhcyBzdGFydCBvZiBtZXNzYWdlIgorbXNnc3RyICJ1c2UgPHRleHQ+IGNvbW8gY29taWVuem8gZGUgbWVuc2FqZSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc5Cittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgImFyY2hpdm8gZGVsIGN1YWwgbGVlciIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMAorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWzxvcGNpb25lcz5dIFs8cGF0csOzbj5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamVjdD5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZXRvPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTIKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbW1pdD5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMworbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjgKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAiY2l0ZSBsb3MgbWFyY2Fkb3JlcyBkZSBwb3NpY2nDs24gYWRlY3VhZGFtZW50ZSBwYXJhIGxvcyBzaGVsbHMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgImNpdGUgbG9zIG1hcmNhZG9yZXMgZGUgcG9zaWNpw7NuIGFkZWN1YWRhbWVudGUgcGFyYSBwZXJsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMyCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgImNpdGUgbG9zIG1hcmNhZG9yZXMgZGUgcG9zaWNpw7NuIGFkZWN1YWRhbWVudGUgcGFyYSBweXRob24iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAiY2l0ZSBsb3MgbWFyY2Fkb3JlcyBkZSBwb3NpY2nDs24gYWRlY3VhZGFtZW50ZSBwYXJhIFRjbCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNworbXNnaWQgInNob3cgb25seSA8bj4gbWF0Y2hlZCByZWZzIgorbXNnc3RyICJtb3N0cmFyIHNvbG8gPG4+IHJlZnMgZW5jb250cmFkYXMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzkgYnVpbHRpbi90YWcuYzo0MzkKK21zZ2lkICJyZXNwZWN0IGZvcm1hdCBjb2xvcnMiCittc2dzdHIgInJlc3BldGFyIGVsIGZvcm1hdG8gZGUgY29sb3JlcyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBwb2ludHMgYXQgdGhlIGdpdmVuIG9iamVjdCIKK21zZ3N0ciAibW9zdHJhciBzb2xvIHJlZnMgcXVlIGFwdW50ZW4gYWwgb2JqZXRvIGRhZG8iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDQKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJtb3N0cmFyIHNvbG8gcmVmcyBxdWUgc29uIGZ1c2lvbmFkYXMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDUKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAibW9zdHJhciBzb2xvIHJlZnMgcXVlIG5vIHNvbiBmdXNpb25hZGFzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ2Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAibW9zdHJhciBzb2xvIHJlZnMgcXVlIGNvbnRpZW5lbiBlbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDcKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJtb3N0cmFyIHNvbG8gcmVmcyBxdWUgbm8gY29udGllbmVuIGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjggYnVpbHRpbi9mc2NrLmM6MTQ3IGJ1aWx0aW4vZnNjay5jOjE0OAorbXNnaWQgInVua25vd24iCittc2dzdHIgImRlc2Nvbm9jaWRvIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiBlcnJvciBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+CisjOiBidWlsdGluL2ZzY2suYzoxMDAgYnVpbHRpbi9mc2NrLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGluICVzICVzOiAlcyIKK21zZ3N0ciAiZXJyb3IgZW4gJXMgJXM6ICVzIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiB3YXJuaW5nIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nIGluICVzICVzOiAlcyIKK21zZ3N0ciAicGVsaWdybyBlbiAlcyAlczogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE0MyBidWlsdGluL2ZzY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXMiCittc2dzdHIgImxpbmsgcm90byBkZSAlN3MgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE1NQorbXNnaWQgIndyb25nIG9iamVjdCB0eXBlIGluIGxpbmsiCittc2dzdHIgInRpcG8gZGUgb2JqZXRvIGVxdWl2b2NhZG8gZW4gbGluayIKKworIzogYnVpbHRpbi9mc2NrLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJicm9rZW4gbGluayBmcm9tICU3cyAlc1xuIgorIiAgICAgICAgICAgICAgdG8gJTdzICVzIgorbXNnc3RyICIiCisibGluayByb3RvIGRlICU3cyAlc1xuIgorIiAgICAgICAgICAgICAgYSAlN3MgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzICVzIgorbXNnc3RyICJmYWx0YW4gJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlYWNoYWJsZSAlcyAlcyIKK21zZ3N0ciAiaW5hbGNhbnphYmxlICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGFuZ2xpbmcgJXMgJXMiCittc2dzdHIgImFjdHVhbGl6YW5kbyAlcyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzM5Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsb3N0LWZvdW5kIgorbXNnc3RyICJubyBzZSBwdWRvIGNyZWFyIGxvc3QtZm91bmQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gZmluYWxpemFyICclcyciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyIKK21zZ3N0ciAiUmV2aXNhbmRvICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5ICglZCBvYmplY3RzKSIKK21zZ3N0ciAiVmVyaWZpY2FuZG8gY29uZWN0aXZpZGFkICglZCBvYmpldG9zKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzICVzIgorbXNnc3RyICJSZXZpc2FuZG8gJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyOQorbXNnaWQgImJyb2tlbiBsaW5rcyIKK21zZ3N0ciAibGlua3Mgcm90b3MiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJyb290ICVzIgorbXNnc3RyICJyYcOteiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZ2dlZCAlcyAlcyAoJXMpIGluICVzIgorbXNnc3RyICJ0YWcgJXMgJXMgKCVzKSBlbiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nIgorbXNnc3RyICIlczogb2JqZWN0byBjb3JydXB0byBvIGZhbHRhbnRlIgorCisjOiBidWlsdGluL2ZzY2suYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgcmVmbG9nIGVudHJ5ICVzIgorbXNnc3RyICIlczogcmVmZXJlbmNpYSBpbnbDoWxpZGEgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZWZsb2cgJXMtPiVzIgorbXNnc3RyICJSZXZpc2FuZG8gcmVmbG9nICVzLT4lcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciAlcyIKK21zZ3N0ciAiJXM6IHB1bnRlcm8gc2hhMSBpbnbDoWxpZG8gJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm90IGEgY29tbWl0IgorbXNnc3RyICIlczogbm8gZXMgdW4gY29tbWl0IgorCisjOiBidWlsdGluL2ZzY2suYzo2MDkKK21zZ2lkICJub3RpY2U6IE5vIGRlZmF1bHQgcmVmZXJlbmNlcyIKK21zZ3N0ciAiYXZpc286IE5vIGhheSByZWZlcmVuY2lhcyBwb3IgZGVmZWN0byIKKworIzogYnVpbHRpbi9mc2NrLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiJXM6IG9iamV0byBjb3JydXB0byBvIG5vIGVuY29udHJhZG86ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3VsZCBub3QgYmUgcGFyc2VkOiAlcyIKK21zZ3N0ciAiJXM6IG5vIHNlIHB1ZWRlIGFuYWxpemFyIG9iamV0bzogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY1NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc2hhMSBmaWxlOiAlcyIKK21zZ3N0ciAibWFsIHNoYTEgZGUgYXJjaGl2bzogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3MgorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcnkiCittc2dzdHIgIlJldmlzYW5kbyBkaXJlY3RvcmlvIGRlIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3NQorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIKK21zZ3N0ciAiUmV2aXNhbmRvIG9iamV0b3MgZGlyZWN0b3Jpb3MiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyBsaW5rIgorbXNnc3RyICJSZXZpc2FuZG8gbGluayAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6Njk1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICIlcyBpbnbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIKK21zZ3N0ciAiJXMgYXB1bnRhIGEgYWxnbyBleHRyYcOxbyAoJXMpIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRldGFjaGVkIEhFQUQgcG9pbnRzIGF0IG5vdGhpbmciCittc2dzdHIgIiVzOiBIRUFEIGRlc2Fjb3BsYWRvIGFwdW50YSBhIG5hZGEiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RpY2U6ICVzIHBvaW50cyB0byBhbiB1bmJvcm4gYnJhbmNoICglcykiCittc2dzdHIgImF2aXNvOiAlcyBhcHVudGEgYSB1biBicmFuY2ggbm8gbmFjaWRvICglcykiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyNAorbXNnaWQgIkNoZWNraW5nIGNhY2hlIHRyZWUiCittc2dzdHIgIlJldmlzYW5kbyBlbCBjYWNoZSB0cmVlIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyIGluIGNhY2hlLXRyZWUiCittc2dzdHIgIiVzOiBwdW50ZXJvIGludsOhbGlkbyBzaGExIGVuIGNhY2hlLXRyZWUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjczOAorbXNnaWQgIm5vbi10cmVlIGluIGNhY2hlLXRyZWUiCittc2dzdHIgIm5vbi10cmVlIGVuIGNhY2hlLXRyZWUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc2OQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs8b3BjaW9uZXM+XSBbPG9iamV0bz4uLi5dIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzUKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIm1vc3RyYXIgb2JqZXRvcyBpbGVnaWJsZXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NgorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAibW9zdHJhciBvYmpldG9zIGNvbGdhZG9zIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzcKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAicmVwb3J0YXIgdGFncyIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc4Cittc2dpZCAicmVwb3J0IHJvb3Qgbm9kZXMiCittc2dzdHIgInJlcG9ydGFyIG5vZG9zIHJhw616IgorCisjOiBidWlsdGluL2ZzY2suYzo3NzkKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAiaGFjZXIgb2JqZXRvcyDDrW5kaWNlcyBjYWJlemFzIGRlIG5vZG9zIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODAKK21zZ2lkICJtYWtlIHJlZmxvZ3MgaGVhZCBub2RlcyAoZGVmYXVsdCkiCittc2dzdHIgImhhY2VyIHJlZmxvZ3MgY2FiZXphIGRlIG5vZG9zIChkZWZhdWx0KSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgxCittc2dpZCAiYWxzbyBjb25zaWRlciBwYWNrcyBhbmQgYWx0ZXJuYXRlIG9iamVjdHMiCittc2dzdHIgInRhbWJpw6luIGNvbnNpZGVyYXIgcGFxdWV0ZXMgeSBvYmpldG9zIGFsdGVybm9zIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODIKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAicmV2aXNhciBzb2xvIGNvbmVjdGl2aWRhZCIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgzCittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICJoYWJpbGl0YXIgcmV2aXNpw7NuIG3DoXMgZXN0cmljdGEiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NQorbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICJlc2NyaWJpciBvYmpldG9zIGNvbGdhZG9zIGVuIC5naXQvbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg2IGJ1aWx0aW4vcHJ1bmUuYzoxMzIKK21zZ2lkICJzaG93IHByb2dyZXNzIgorbXNnc3RyICJtb3N0cmFyIHByb2dyZXNvIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODcKK21zZ2lkICJzaG93IHZlcmJvc2UgbmFtZXMgZm9yIHJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJtb3N0cmFyIG5vbWJyZXMgdmVyYm9zbyBwYXJhIG9iamV0b3MgYWxjYW56YWJsZXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg0NiBidWlsdGluL2luZGV4LXBhY2suYzoyMjUKK21zZ2lkICJDaGVja2luZyBvYmplY3RzIgorbXNnc3RyICJSZXZpc2FuZG8gb2JqZXRvcyIKKworIzogYnVpbHRpbi9mc2NrLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgbWlzc2luZyIKK21zZ3N0ciAiJXM6IG9iamV0byBmYWx0YW50ZSIKKworIzogYnVpbHRpbi9mc2NrLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyOiBleHBlY3RlZCBzaGExLCBnb3QgJyVzJyIKK21zZ3N0ciAicGFyw6FtZXRybyBpbnbDoWxpZG86IHNoYTEgZXNwZXJhZG8sIHNlIG9idHV2byAnJXMnIgorCisjOiBidWlsdGluL2djLmM6MzUKK21zZ2lkICJnaXQgZ2MgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBnYyBbPG9wY2lvbmVzPl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZnN0YXQgJXM6ICVzIgorbXNnc3RyICJGYWxsw7MgZWwgZnN0YXQgJXM6ICVzIgorCisjOiBidWlsdGluL2djLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAnJXMnIHZhbHVlICclcyciCittc2dzdHIgImZhbGzDsyBhbCBhbmFsaXphciAnJXMnIHZhbG9yICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzo0NzUgYnVpbHRpbi9pbml0LWRiLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBkZWZpbmlyICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzo0ODQgYnVpbHRpbi9ub3Rlcy5jOjI0MCBidWlsdGluL3RhZy5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBsYXN0IGdjIHJ1biByZXBvcnRlZCB0aGUgZm9sbG93aW5nLiBQbGVhc2UgY29ycmVjdCB0aGUgcm9vdCBjYXVzZVxuIgorImFuZCByZW1vdmUgJXMuXG4iCisiQXV0b21hdGljIGNsZWFudXAgd2lsbCBub3QgYmUgcGVyZm9ybWVkIHVudGlsIHRoZSBmaWxlIGlzIHJlbW92ZWQuXG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJFbCDDumx0aW1vIGdjIHJlcG9ydMOzIGxvIHNpZ3VpZW50ZS4gUG9yIGZhdm9yIGNvcnJpZ2UgbGEgY2F1c2FcbiIKKyJ5IGVsaW1pbmUgJXMuXG4iCisiTGltcGllemEgYXV0b23DoXRpY2Egbm8gc2UgcmVhbGl6YXLDoSBoYXN0YSBxdWUgZWwgYXJjaGl2byBzZWEgZWxpbWluYWRvLlxuIgorIlxuIgorIiVzIgorCisjOiBidWlsdGluL2djLmM6NTM5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgImxpbXBpYXIgb2JqZXRvcyBubyByZWZlcmVuY2lhZG9zIgorCisjOiBidWlsdGluL2djLmM6NTQxCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICJzZXIgbcOhcyBleGhhdXN0aXZvIChhdW1lbnRhciBydW50aW1lKSIKKworIzogYnVpbHRpbi9nYy5jOjU0MgorbXNnaWQgImVuYWJsZSBhdXRvLWdjIG1vZGUiCittc2dzdHIgImhhYmlsaXRhciBtb2RvIGF1dG8tZ2MiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDUKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAiZm9yemFyIGxhIGVqZWN1Y2nDs24gZGUgZ2MgaW5jbHVzbyBzaSBwdWVkZSBoYWJlciBvdHJvIGdjIGVqZWN1dMOhbmRvc2UiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDgKK21zZ2lkICJyZXBhY2sgYWxsIG90aGVyIHBhY2tzIGV4Y2VwdCB0aGUgbGFyZ2VzdCBwYWNrIgorbXNnc3RyICJyZWVtcGFxdWV0YXIgdG9kb3MgbG9zIG90cm9zIHBhcXVldGVzIGV4Y2VwdG8gZWwgcGFxdWV0ZSBtw6FzIGdyYW5kZSIKKworIzogYnVpbHRpbi9nYy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgZ2MubG9nZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICJmYWxsw7MgYWwgYW5hbGl6YXIgdmFsb3IgJXMgZGUgZ2MubG9nZXhwaXJpdHkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIHBydW5lIGV4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGFuYWxpemFyIHZhbG9yICVzIGRlIHBydW5lIGV4cGlyeSIKKworIzogYnVpbHRpbi9nYy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaW4gYmFja2dyb3VuZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiIgorIkF1dG8gZW1wYXF1ZXRhZG8gZGVsIHJlcG9zaXRvcmlvIGVuIHNlZ3VuZG8gcGxhbm8gcGFyYSB1biBwZXJmb3JtYW5jZSAiCisiw7NwdGltby5cbiIKKworIzogYnVpbHRpbi9nYy5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIkF1dG8gZW1wYXF1ZXRhZG8gZGVsIHJlcG9zaXRvcmlvIHBhcmEgcGVyZm9ybWFuY2Ugw7NwdGltby5cbiIKKworIzogYnVpbHRpbi9nYy5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIgorbXNnc3RyICJWZWEgXCJnaXQgaGVscCBnY1wiIHBhcmEgbGltcGllemEgbWFudWFsLlxuIgorCisjOiBidWlsdGluL2djLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnYyBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gbWFjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBpZiBub3QpIgorbXNnc3RyICIiCisiZ2MgeWEgZXN0w6EgZWplY3V0w6FuZG9zZSBlbiBsYSBtw6FxdWluYSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBzbyBubyAiCisiZXMgYXPDrSkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo2OTQKK21zZ2lkICIiCisiVGhlcmUgYXJlIHRvbyBtYW55IHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHM7IHJ1biAnZ2l0IHBydW5lJyB0byByZW1vdmUgdGhlbS4iCittc2dzdHIgIiIKKyJIYXkgbXVjaG9zIG9iamV0b3Mgc3VlbHRvcyBpbmFsY2FuemFibGVzOyBlamVjdXRlICdnaXQgcHJ1bmUnIHBhcmEgIgorImVsaW1pbmFybG9zLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MzAKK21zZ2lkICJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBncmVwIFs8b3BjaW9uZXM+XSBbLWVdIDxwYXRyw7NuPiBbPHJldj4uLi5dIFtbLS1dIDxydXRhPi4uLl0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXA6IGZhbGzDsyBhbCBjcmVhciBlbCBoaWxvOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkgZm9yICVzIgorbXNnc3RyICJuw7ptZXJvIGludsOhbGlkbyBkZSBoaWxvcyBlc3BlY2lmaWNhZG8gKCVkKSBwYXJhICVzIgorCisjLiBUUkFOU0xBVE9SUzogJXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24KKyMuIHZhcmlhYmxlIGZvciB0d2Vha2luZyB0aHJlYWRzLCBjdXJyZW50bHkKKyMuIGdyZXAudGhyZWFkcworIy4KKyM6IGJ1aWx0aW4vZ3JlcC5jOjI4NyBidWlsdGluL2luZGV4LXBhY2suYzoxNTM4IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MzEKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg1NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIgorbXNnc3RyICJubyBoYXkgc29wb3J0ZSBwYXJhIGhpbG9zLCBpZ25vcmFuZG8gJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ1MyBidWlsdGluL2dyZXAuYzo1NzggYnVpbHRpbi9ncmVwLmM6NjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBsZWVyIGVsICDDoXJib2wgKCVzKSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgcmVhbGl6YXIgZ3JlcCBkZWwgb2JqZXRvIGRlIHRpcG8gJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJzd2l0Y2ggYCVjJyBlc3BlcmEgdW4gdmFsb3IgbnVtw6lyaWNvIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDMKK21zZ2lkICJzZWFyY2ggaW4gaW5kZXggaW5zdGVhZCBvZiBpbiB0aGUgd29yayB0cmVlIgorbXNnc3RyICJidXNjYXIgZW4gZWwgw61uZGljZSBlbiBsdWdhciBkZWwgw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwNQorbXNnaWQgImZpbmQgaW4gY29udGVudHMgbm90IG1hbmFnZWQgYnkgZ2l0IgorbXNnc3RyICJlbmNvbnRyYXIgZW4gY29udGVuaWRvcyBubyBtYW5lamFkb3MgcG9yIGdpdCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODA3Cittc2dpZCAic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJidXNjYXIgZW4gYXJjaGl2b3MgcmFzdHJlYWRvcyB5IG5vIHJhc3RyZWFkb3MiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwOQorbXNnaWQgImlnbm9yZSBmaWxlcyBzcGVjaWZpZWQgdmlhICcuZ2l0aWdub3JlJyIKK21zZ3N0ciAiaWdub3JhciBhcmNoaXZvcyBlc3BlY2lmaWNhZG9zIHZpYSAnLmdpdGlnbm9yZSciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxMQorbXNnaWQgInJlY3Vyc2l2ZWx5IHNlYXJjaCBpbiBlYWNoIHN1Ym1vZHVsZSIKK21zZ3N0ciAiYsO6c3F1ZWRhIHJlY3Vyc2l2YSBlbiBjYWRhIHN1Ym3Ds2R1bG8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNAorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJtb3N0cmFyIGzDrW5lYXMgcXVlIG5vIGNvbmN1ZXJkYW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNgorbXNnaWQgImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciCittc2dzdHIgImLDunNxdWVkYSBpbnNlbnNpYmxlIGEgbWF5w7pzY3VsYXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxOAorbXNnaWQgIm1hdGNoIHBhdHRlcm5zIG9ubHkgYXQgd29yZCBib3VuZGFyaWVzIgorbXNnc3RyICJjb25jb3JkYXIgcGF0csOzbiBzb2xvIGEgbG9zIGzDrW1pdGVzIGRlIGxhcyBwYWxhYnJhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIwCittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAicHJvY2VzYXIgYXJjaGl2b3MgYmluYXJpb3MgY29tbyB0ZXh0byIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIyCittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICJubyBjb25jb3JkYXIgcGF0cm9uZXMgZW4gYXJjaGl2b3MgYmluYXJpb3MiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNQorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAicHJvY2VzYXIgYXJjaGl2b3MgYmluYXJpb3MgY29uIGZpbHRyb3MgdGV4dGNvbnYiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNworbXNnaWQgInNlYXJjaCBpbiBzdWJkaXJlY3RvcmllcyAoZGVmYXVsdCkiCittc2dzdHIgImJ1c2NhciBlbiBzdWJkaXJlY3RvcmlvcyAoZGVmYXVsdCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyOQorbXNnaWQgImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIKK21zZ3N0ciAiZGVzY2VuZGVyIGNvbW8gbcOheGltbyA8dmFsb3ItZGUtcHJvZnVuZGlhZD4gIG5pdmVsZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMworbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJ1c2FyIGV4cHJlc2lvbmVzIHJlZ3VsYXJlcyBQT1NJWCBleHRlbmRpZGFzIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzYKK21zZ2lkICJ1c2UgYmFzaWMgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyAoZGVmYXVsdCkiCittc2dzdHIgInVzYXIgZXhwcmVzaW9uZXMgcmVndWxhcmVzIFBPU0lYIChkZWZhdWx0KSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM5Cittc2dpZCAiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiCittc2dzdHIgImludGVycHJldGFyIHBhdHJvbmVzIGNvbW8gc3RyaW5ncyBhcnJlZ2xhZG9zIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDIKK21zZ2lkICJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgInVzYXIgZXhwcmVzaW9uZXMgcmVndWxhcmVzIGNvbXBhdGlibGVzIGNvbiBQZXJsIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDUKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAibW9zdHJhciBuw7ptZXJvcyBkZSBsw61uZWEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NgorbXNnaWQgInNob3cgY29sdW1uIG51bWJlciBvZiBmaXJzdCBtYXRjaCIKK21zZ3N0ciAibW9zdHJhciBlbCBuw7ptZXJvIGRlIGNvbHVtbmEgZGUgbGEgcHJpbWVyIGNvaW5jaWRlbmNpYSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ3Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIm5vIG1vc3RyYXIgbm9tYnJlcyBkZSBhcmNoaXZvIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDgKK21zZ2lkICJzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAibW9zdHJhciBub21icmVzIGRlIGFyY2hpdm8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgIm1vc3RyYXIgbm9tYnJlcyBkZSBhcmNoaXZvIHJlbGF0aXZvcyBhbCBkaXJlY3RvcmlvIHN1cGVyaW9yIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTIKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIm1vc3RyYXIgc29sbyBub21icmVzIGRlIGFyY2hpdm9zIGVuIGx1Z2FyIGRlIGzDrW5lYXMgZW5jb250cmFkYXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorbXNnc3RyICJzaW7Ds25pbW8gcGFyYSAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU3Cittc2dpZCAic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIgorbXNnc3RyICJtb3N0cmFyIHNvbG8gbG9zIG5vbWJyZXMgZGUgYXJjaGl2b3Mgc2luIGNvaW5jaWRlbmNpYXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1OQorbXNnaWQgInByaW50IE5VTCBhZnRlciBmaWxlbmFtZXMiCittc2dzdHIgImltcHJpbWlyIE5VTCBkZXNwdcOpcyBkZWwgbm9tYnJlIGRlIGFyY2hpdm8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MgorbXNnaWQgInNob3cgb25seSBtYXRjaGluZyBwYXJ0cyBvZiBhIGxpbmUiCittc2dzdHIgIm1vc3RyYXIgc29sbyBwYXJ0ZXMgcXVlIGNvbmN1ZXJkYW4gZGUgdW5hIGzDrW5lYSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY0Cittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAibW9zdHJhciBlbCBuw7ptZXJvIGRlIGNvbmNvcmRhbmNpYXMgZW4gbHVnYXIgZGUgbGFzIGzDrW5lYXMgY29uY29yZGFudGVzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjUKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAicmVzYWx0YXIgY29uY29yZGFuY2lhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY3Cittc2dpZCAicHJpbnQgZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMiCittc2dzdHIgImltcHJpbWlyIHVuYSBsw61uZWEgdmFjw61hIGVudHJlIGNvaW5jaWRlbmNpYXMgZGUgZGlmZXJlbnRlcyBhcmNoaXZvcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY5Cittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAiIgorIm1vc3RyYXIgZWwgbm9tYnJlIGRlIGFyY2hpdm8gc29sbyB1bmEgdmV6IHBhcmEgY29uY29yZGFuY2lhcyBlbiBlbCBtaXNtbyAiCisiYXJjaGl2byIKKworIzogYnVpbHRpbi9ncmVwLmM6ODcyCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIm1vc3RyYXIgPG4+IGzDrW5lYXMgZGUgY29udGV4dG8gYW50ZXMgeSBkZXNwdcOpcyBkZSBsYSBjb25jb3JkYW5jaWEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NQorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIm1vc3RyYXIgPG4+IGzDrW5lYXMgZGUgY29udGV4dG8gYW50ZXMgZGUgbGFzIGNvbmNvcmRhbmNpYXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NworbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAibW9zdHJhciA8bj4gbMOtbmVhcyBkZSBjb250ZXh0IGRlc3B1w6lzIGRlIGxhcyBjb25jb3JkYW5jaWFzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzkKK21zZ2lkICJ1c2UgPG4+IHdvcmtlciB0aHJlYWRzIgorbXNnc3RyICJ1c2FyIDxuPiBoaWxvcyBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODAKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICJhdGFqbyBwYXJhIC1DIE5VTSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgzCittc2dpZCAic2hvdyBhIGxpbmUgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAiIgorIm1vc3RyYXIgdW5hIGzDrW5lYSBjb24gZWwgbm9tYnJlIGRlIGxhIGZ1bmNpw7NuIGFudGVzIGRlIGxhcyBjb25jb3JkYW5jaWFzIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODUKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAibW9zdHJhciBsYSBmdW5jacOzbiBjaXJjdW5kYW50ZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg4Cittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgImxlZXIgcGF0cm9uZXMgZGVsIGFyY2hpdm8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MAorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiY29uY29yZGFyIDxwYXRyw7NuPiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkyCittc2dpZCAiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIKK21zZ3N0ciAiY29tYmluYXIgcGF0cm9uZXMgZXNwZWNpZmljYWRvcyBjb24gLWUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwNAorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICJpbmRpY2FyIGNvbmNvcmRhbmNpYSBjb24gZXhpdCBzdGF0dXMgc2luIG91dHB1dCIKKworIzogYnVpbHRpbi9ncmVwLmM6OTA2Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIKK21zZ3N0ciAiIgorIm1vc3RyYXIgc29sbyBjb25jb3JkYW5jaWFzIGNvbiBhcmNoaXZvcyBxdWUgY29uY3VlcmRhbiB0b2RvcyBsb3MgcGF0cm9uZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwOAorbXNnaWQgInNob3cgcGFyc2UgdHJlZSBmb3IgZ3JlcCBleHByZXNzaW9uIgorbXNnc3RyICJtb3N0cmFyIMOhcmJvbCBhbmFsaXphZG8gcGFyYSBsYSBleHByZXNpw7NuIGdyZXAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxMgorbXNnaWQgInBhZ2VyIgorbXNnc3RyICJwYWdpbmFkb3IiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxMgorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICJtb3N0cmFyIGFyY2hpdm9zIGNvbmNvcmRhbnRlcyBlbiBlbCBwYWdpbmFkb3IiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxNgorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAicGVybWl0aXIgZWwgbGxhbWFkbyBkZSBncmVwKDEpIChpZ25vcmFkbyBwb3IgZXN0YSBidWlsZCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk4MworbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4iCittc2dzdHIgIm5vIHNlIGhhIGVudHJlZ2FkbyBwYXRyw7NuIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDE5Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMiCittc2dzdHIgIi0tbm8taW5kZXggbyAtLXVudHJhY2tlZCBubyBzZSBwdWVkZSB1c2FyIGNvbiByZXZzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAibm8gc2UgcG9zaWJsZSByZXNvbHZlciByZXZpc2nDs246ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDU3Cittc2dpZCAiLS11bnRyYWNrZWQgbm90IHN1cHBvcnRlZCB3aXRoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIgorbXNnc3RyICItLXVudHJhY2tlZCBubyBlcyBzb3BvcnRhZGEgY29uIC0tcmVjdXJzZS1zdWJtb2R1bGVzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDYxCittc2dpZCAiaW52YWxpZCBvcHRpb24gY29tYmluYXRpb24sIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAiY29tYmluYWNpw7NuIGRlIG9wY2lvbmVzIGludsOhbGlkYSwgaWdub3JhbmRvIC0tdGhyZWFkcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2NCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NDcKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAibm8gc2Ugc29wb3J0YW4gaGlsb3MsIGlnbm9yYW5kbyAtLXRocmVhZHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSIKK21zZ3N0ciAibsO6bWVybyBpbnbDoWxpZG8gZGUgaGlsb3MgZXNwZWNpZmljYWRvICglZCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMDEKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBzb2xvIGZ1bmNpb25hIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTI3Cittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICItLWNhY2hlZCBvIC0tdW50cmFja2VkIG5vIHB1ZWRlbiBzZXIgdXNhZGFzIGNvbiAtLW5vLWluZGV4IgorCisjOiBidWlsdGluL2dyZXAuYzoxMTMzCittc2dpZCAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMiCittc2dzdHIgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIG5vIHB1ZWRlIHNlciB1c2FkYSBwYXJhIGNvbnRlbmlkbyByYXN0cmVhZG8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExNDEKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4iCittc2dzdHIgIi0tY2FjaGVkIHkgw6FyYm9sZXMgaGFuIHNpZG8gZW50cmVnYWRvcyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg1Cittc2dpZCAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGZpbGU+Li4uIgorbXNnc3RyICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dGlwbz5dIFstd10gWy0tcGF0aD08YXJjaGl2bz4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8YXJjaGl2bz4uLi4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4NgorbXNnaWQgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyIKK21zZ3N0ciAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTgKK21zZ2lkICJvYmplY3QgdHlwZSIKK21zZ3N0ciAidGlwbyBkZSBvYmpldG8iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJlc2NyaWJpciBlbCBvYmpldG8gZW4gbGEgYmFzZSBkZSBkYXRvcyBkZSBvYmpldG9zIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAxCittc2dpZCAicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iCittc2dzdHIgImxlZXIgZWwgb2JqZXRvIGRlIHN0ZGluIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAzCittc2dpZCAic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiCittc2dzdHIgImd1YXJkYXIgZWwgYXJjaGl2byBjb21vIGVzIHNpbiBmaWx0cm9zIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA0Cittc2dpZCAiIgorImp1c3QgaGFzaCBhbnkgcmFuZG9tIGdhcmJhZ2UgdG8gY3JlYXRlIGNvcnJ1cHQgb2JqZWN0cyBmb3IgZGVidWdnaW5nIEdpdCIKK21zZ3N0ciAiIgorInNvbG8gcmVhbGl6YXIgdW4gaGFzaCBhIGN1YWxxdWllciBiYXN1cmEgcmFuZG9tIHBhcmEgY3JlYXIgdW4gb2JqZXRvICIKKyJjb3JydXB0byBwYXJhIGhhY2VyIGRlYnVnZ2luZyBkZSBHdGkiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAicHJvY2VzYXIgZWwgYXJjaGl2byBjb21vIHNpIGZ1ZXJhIGRlIGVzdGEgcnV0YSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDYKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICJtb3N0cmFyIHRvZG9zIGxvcyBjb21hbmRvcyBkaXNwb25pYmxlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDcKK21zZ2lkICJleGNsdWRlIGd1aWRlcyIKK21zZ3N0ciAiZXhjbHVpciBsYXMgZ3VpYXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ4Cittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICJtb3N0cmFyIHVuYSBsaXN0YSBkZSBub2Npb25lcyB1dGlsZXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ5Cittc2dpZCAicHJpbnQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMiCittc2dzdHIgImltcHJpbWlyIHRvZG9zIGxvcyBub21icmVzIGRlIHZhcmlhYmxlcyBkZSBjb25maWd1cmFjacOzbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTEKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICJtb3N0cmFyIGxhIHBhZ2luYSBkZWwgbWFudWFsIgorCisjOiBidWlsdGluL2hlbHAuYzo1MgorbXNnaWQgInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIgorbXNnc3RyICJtb3N0cmFyIGxhIHBhZ2luYSBkZWwgbWFudWFsIGVuIHVuIG5hdmVnYWRvciB3ZWIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU0Cittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgIm1vc3RyYXIgbGEgcGFnaW5hIGRlIGluZm8iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU2Cittc2dpZCAicHJpbnQgY29tbWFuZCBkZXNjcmlwdGlvbiIKK21zZ3N0ciAiaW1wcmltaXIgZGVzY3JpcGNpw7NuIGRlbCBjb21hbmRvIgorCisjOiBidWlsdGluL2hlbHAuYzo2MQorbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iCittc2dzdHIgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21hbmRvPl0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICJmb3JtYXRvIGhlbHAgbm8gcmVjb25vY2lkbyAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDQKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICJGYWxsw7MgYWwgaW5pY2lhciBlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExNworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAiRmFsbMOzIGFsIGFuYWxpemFyIGxhIHZlcnNpw7NuIGRlIGVtYWNzY2xpZW50LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iCittc2dzdHIgImxhIHZlcnNpw7NuICclZCcgZGUgZW1hY3NjbGllbnQgZXMgbXV5IGFudGlndWEgKDwyMikuIgorCisjOiBidWlsdGluL2hlbHAuYzoxNDMgYnVpbHRpbi9oZWxwLmM6MTY1IGJ1aWx0aW4vaGVscC5jOjE3NSBidWlsdGluL2hlbHAuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWMgJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGVqZWN1dGFyICclcyciCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyc6IHJ1dGEgcGFyYSBlbCB2aXN1YWxpemFkb3IgZGVsIG1hbnVhbCBubyBzb3BvcnRhZGEuXG4iCisiUG9yIGZhdm9yIGNvbnNpZGVyZSB1c2FyICdtYW4uPGhlcnJhbWllbnRhLmNtZCcuIgorCisjOiBidWlsdGluL2hlbHAuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LnBhdGgnIGluc3RlYWQuIgorbXNnc3RyICIiCisiJyVzJzogY29tYW5kbyBubyBzb3BvcnRhZG8gcGFyYSBtYW4gdmlld2VyLlxuIgorIlBvciBmYXZvciBjb25zaWRlcmUgdXNhciAnbWFuLjxoZXJyYW1pZW50YT4ucGF0aC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICInJXMnOiB2aXN1YWxpemFkb3IgZGUgbWFuIGRlc2Nvbm9jaWRvLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzY3Cittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJuaW5nw7puIHZpc3VhbGl6YWRvciBkZSBtYW51YWwgcHJvY2VzbyBsYSBwZXRpY2nDs24iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM3NQorbXNnaWQgIm5vIGluZm8gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgIm5pbmfDum4gdmlzb3IgZGUgaW5mbyBtYW5lam8gbGEgcGV0aWNpw7NuIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzQgYnVpbHRpbi9oZWxwLmM6NDQ1IGdpdC5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFsaWFzZWQgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJyB0aWVuZSBlbCBhbGlhcyAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzo0NDggZ2l0LmM6MzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhbGlhcy4lcyBzdHJpbmc6ICVzIgorbXNnc3RyICJtYWwgYWxpYXMuJXMgc3RyaW5nOiAlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDc3IGJ1aWx0aW4vaGVscC5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMlcyIKK21zZ3N0ciAidXNvOiAlcyVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0OTEKK21zZ2lkICInZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiJ2dpdCBoZWxwIGNvbmZpZycgcGFyYSBtw6FzIGluZm9ybWFjacOzbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCB0eXBlIG1pc21hdGNoIGF0ICVzIgorbXNnc3RyICJlbCB0aXBvIGRlbCBvYmpldG8gbm8gY29uY3VlcmRhIGVuICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIG9iamVjdCAlcyIKK21zZ3N0ciAibm8gc2UgcmVjaWJpw7MgZWwgb2JqZXRvIGVzcGVyYWRvICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzOiBleHBlY3RlZCB0eXBlICVzLCBmb3VuZCAlcyIKK21zZ3N0ciAib2JqZXRvICVzOiB0aXBvIGVzcGVyYWRvICVzLCBlbmNvbnRyYWRvICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gIm5vIHNlIHB1ZWRlIGxsZW5hciAlZCBieXRlIgorbXNnc3RyWzFdICJubyBzZSBwdWVkZW4gbGxlbmFyICVkIGJ5dGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjgKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgIkVPRiB0ZW1wcmFubyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY5Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAibGVlciBlcnJvciBlbiBpbnB1dCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjgxCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgInNlIHVzYXJvbiBtw6FzIGJ5dGVzIGRlIGxvcyBkaXNwb25pYmxlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjg4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NjA2Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAicGFxdWV0ZSBtdXkgZ3JhbmRlIHBhcmEgbGEgZGVmaW5pY2nDs24gYWN0dWFsIGRlIG9mZl90IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTEgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjk1Cittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICJwYXF1ZXRlIGV4Y2VkZSBlbCBtw6F4aW1vIHRhbWHDsW8gcGVybWl0aWRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYWJyaXIgZWwgYXJjaGl2byBkZSBwYXF1ZXRlICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyNgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICJmaXJtYSBkZWwgcGFxdWV0ZSBubyBjb25jdWVyZGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIHZlcnNpb24gJTxQUkl1MzI+IHVuc3VwcG9ydGVkIgorbXNnc3RyICJ2ZXJzacOzbiBkZSBwYXF1ZXRlICU8UFJJdTMyPiBubyBzb3BvcnRhZGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKK21zZ3N0ciAicGFxdWV0ZSB0aWVuZSB1biBtYWwgb2JqZXRvIGVuIGVsIG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmxhdGUgcmV0dXJuZWQgJWQiCittc2dzdHIgImluZmxhdGUgZGV2b2x2acOzICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MTUKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICJ2YWxvciBkZSBvZmZzZXQgZGVzYm9yZGFkbyBwYXJhIGVsIG9iamV0byBiYXNlIGRlbHRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MjMKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBpcyBvdXQgb2YgYm91bmQiCittc2dzdHIgIm9mZnNldCBkZSBiYXNlIGRlbHRhIGVzdMOhIGZ1ZXJhIGRlIGzDrW1pdGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAidGlwbyBkZSBvYmpldG8gJWQgZGVzY29ub2NpZG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2MgorbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgIm5vIHNlIHB1ZWRlIHByb3BhZ2FyIGVsIHBhcXVldGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlIG1pc3NpbmciCittc2dpZF9wbHVyYWwgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGVzIG1pc3NpbmciCittc2dzdHJbMF0gImZpbmFsIHByZW1hdHVybyBkZSBhcmNoaXZvIGRlIHBhcXVldGUsICU8UFJJdU1BWD4gYnl0ZSBmYWx0YW50ZSIKK21zZ3N0clsxXSAiZmluYWwgcHJlbWF0dXJvIGRlIGFyY2hpdm8gZGUgcGFxdWV0ZSwgJTxQUkl1TUFYPiBieXRlcyBmYWx0YW50ZXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU5MAorbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICJpbmNvbnNpc3RlbmNpYSBzZXJpYSBlbiBpbmZsYXRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzUgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc2NQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgIsKhQ09MSVNJw5NOIERFIFRJUE8gU0hBMSBFTkNPTlRSQURBIENPTiAlcyAhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNTgKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjE4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICJubyBzZSBwb3NpYmxlIGxlZXIgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgaW5mbyAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciBsYSBpbmZvcm1hY2nDs24gZXhpc3RlbnRlIGRlbCBvYmpldG8gJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGxlZXIgZWwgb2JqZXRvIGV4aXN0ZW50ZSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvYiBvYmplY3QgJXMiCittc2dzdHIgIm9iamV0byBibG9iICVzIGludsOhbGlkbyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NgorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFja2VkIG9iamVjdCIKK21zZ3N0ciAiZXJyb3IgZGUgZnNjayBlbiBlbCBvYmpldG8gZW1wYXF1ZXRhZG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiTm8gdG9kb3MgbG9zIG9iamV0b3MgaGlqb3MgZGUgJXMgc29uIGFsY2FuemFibGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MjAgYnVpbHRpbi9pbmRleC1wYWNrLmM6OTUxCittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICJmYWxsw7MgYWwgYXBsaWNhciBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEyMQorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICJSZWNpYmllbmRvIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjEKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICJJbmRleGFuZG8gb2JqZXRvcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1NQorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAicGFxdWV0ZSBlc3TDoSBjb3Jyb21waWRvIChTSEExIG5vIGNvbmN1ZXJkYSkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjAKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGZzdGF0IGFsIGFyY2hpdm8gZGUgcGFxdWV0ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2MworbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAiZWwgcGFxdWV0ZSB0aWVuZSBiYXN1cmEgYWwgZmluYWwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNzUKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICJjb25mdXNpw7NuIG3DoXMgYWxsw6EgZGUgbGEgbG9jdXJhIGVuIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTk4Cittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAiUmVzb2x2aWVuZG8gZGVsdGFzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjA4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgY3JlYXIgaGlsbzogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNDkKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICJjb25mdXNpw7NuIG3DoXMgYWxsw6EgZGUgbGEgbG9jdXJhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0clswXSAiY29tcGxldGFkbyBjb24gJWQgb2JqZXRvIGxvY2FsIgorbXNnc3RyWzFdICJjb21wbGV0YWRvIGNvbiAlZCBvYmpldG9zIGxvY2FsZXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCB0YWlsIGNoZWNrc3VtIGZvciAlcyAoZGlzayBjb3JydXB0aW9uPykiCittc2dzdHIgIlRhaWwgY2hlY2tzdW0gcGFyYSAlcyBpbmVzcGVyYWRhICjCv2NvcnJ1cGNpw7NuIGRlIGRpc2NvPykiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gInBhcXVldGUgdGllbmUgJWQgZGVsdGEgc2luIHJlc29sdmVyIgorbXNnc3RyWzFdICJwYXF1ZXRlIHRpZW5lICVkIGRlbHRhcyBzaW4gcmVzb2x2ZXIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZGVzaW5mbGFyIGVsIG9iamV0byBhZGp1bnRvICglZCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgIm9iamV0byBsb2NhbCAlcyBlc3TDoSBjb3Jyb21waWRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDA2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIgorbXNnc3RyICJub21icmUgJyVzJyBkZSBhcmNoaXZvIGRlIHBhcXVldGUgbm8gdGVybWluYSBjb24gJy5wYWNrJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJXMgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBlc2NyaWJpciAlcyBlbiBlbCBhcmNoaXZvICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIHdyaXR0ZW4gJXMgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBjZXJyYXIgZXNjcml0byAlcyBlbiBhcmNoaXZvICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NjMKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAiZXJyb3IgbWllbnRyYXMgc2UgY2llcnJhIGVsIGFyY2hpdm8gcGFxdWV0ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ3NworbXNnaWQgImNhbm5vdCBzdG9yZSBwYWNrIGZpbGUiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGd1YXJkYXIgZWwgYXJjaGl2byBwYXF1ZXRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDg1Cittc2dpZCAiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGd1YXJkYXIgZWwgYXJjaGl2byDDrW5kaWNlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTI5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICJtYWwgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICJObyBzZSBwdWVkZSBhYnJpciBlbCBhcmNoaXZvIHBhcXVldGUgZXhpc3RlbnRlICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYWJyaXIgZWwgw61uZGljZSBkZWwgYXJjaGl2byBwYXF1ZXRlIHBhcmEgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJub24gZGVsdGE6ICVkIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAibm9uIGRlbHRhOiAlZCBvYmplY3RzIgorbXNnc3RyWzBdICJubyBkZWx0YTogJWQgb2JqZXRvIgorbXNnc3RyWzFdICJubyBkZWx0YTogJWQgb2JqZXRvcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICJsYXJnbyBkZSBjYWRlbmEgPSAlZDogJWx1IG9iamV0byIKK21zZ3N0clsxXSAibGFyZ28gZGUgY2FkZW5hID0gJWQ6ICVsdSBvYmpldG9zIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjkzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIk5vIHNlIHB1ZWRlIHJlZ3Jlc2FyIGEgY3dkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzQyIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NDUKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NjEgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgIm1hbCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4MQorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluIG5vIHB1ZWRlIHNlciB1c2FkYSBzaW4gLS1zdGRpbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4MworbXNnaWQgIi0tc3RkaW4gcmVxdWlyZXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1zdGRpbiByZXF1aWVyZSB1biByZXBvc2l0b3JpbyBnaXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3ODkKK21zZ2lkICItLXZlcmlmeSB3aXRoIG5vIHBhY2tmaWxlIG5hbWUgZ2l2ZW4iCittc2dzdHIgIi0tdmVyaWZ5IG5vIHJlY2liacOzIG5pbmfDum4gbm9tYnJlIGRlIGFyY2hpdm8gZGUgcGFxdWV0ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTgzNyBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTgyCittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrIG9iamVjdHMiCittc2dzdHIgImVycm9yIGRlIGZzY2sgZW4gb2JqZXRvcyBwYXF1ZXRlIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGRlZmluaXIgdGVtcGxhdGUgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYWJyaXIgZGlyZWN0b3JpbyAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciBsaW5rICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY3JlYXIgc3ltbGluayAnJXMnICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY29waWFyICclcycgYSAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAiaWdub3JhbmRvIHRlbXBsYXRlICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCBpbiAlcyIKK21zZ3N0ciAidGVtcGxhdGUgbm8gZW5jb250cmFkbyBlbiAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBmcm9tICclcyc6ICVzIgorbXNnc3RyICJubyBzZSBjb3BpYW4gdGVtcGxhdGVzIGRlICclcyc6ICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgIm5vIGVzIHBvc2libGUgbWFuZWphciBlbCB0aXBvIGRlIGFyY2hpdm8gJWQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbW92ZXIgJXMgYSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU0IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMgeWEgZXhpc3RlIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJSZWluaWNpYWxpemFkbyBlbCByZXBvc2l0b3JpbyBHaXQgY29tcGFydGlkbyBleGlzdGVudGUgZW4gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIlJlaW5pY2lhbGl6YWRvIGVsIHJlcG9zaXRvcmlvIEdpdCBleGlzdGVudGUgZW4gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiSW5pY2lhbGl6YWRvIHJlcG9zaXRvcmlvIEdpdCBjb21wYXJ0aWRvIHZhY8OtbyBlbiAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkluaWNpYWxpemFkbyByZXBvc2l0b3JpbyBHaXQgdmFjw61vIGVuICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDY4Cittc2dpZCAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZS1kaXJlY3Rvcnk+XSBbLS0iCisic2hhcmVkWz08cGVybWlzc2lvbnM+XV0gWzxkaXJlY3Rvcnk+XSIKK21zZ3N0ciAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTxkaXJlY3RvcmlvLXRlbXBsYXRlPl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc29zPl1dIFs8ZGlyZWN0b3Jpbz5dIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTEKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAicGVybWlzb3MiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MgorbXNnaWQgInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIKK21zZ3N0ciAiIgorImVzcGVjaWZpY2EgcXVlIGVsIHJlcG9zaXRvcmlvIGRlIGdpdCBzZXLDoSBjb21wYXJ0aWRvIGVudHJlIHZhcmlvcyB1c3VhcmlvcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTI5IGJ1aWx0aW4vaW5pdC1kYi5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgIm5vIHNlIHB1ZGUgY3JlYXIgZGlyZWN0b3JpbyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYXBsaWNhciBjaGRpciBhICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAiIgorIiVzIChvIC0td29yay10cmVlPTxkaXJlY3RvcmlvPikgbm8gc2UgcGVybWl0ZSBzaW4gZXNwZWNpZmljYXIgJXMgKG8gLS1naXQtIgorImRpcj08ZGlyZWN0b3Jpbz4pIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYWNjZWRlciBhbCDDoXJib2wgZGUgdHJhYmFqbyAnJXMnIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjE2Cittc2dpZCAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8dG9rZW4+Wyg9fDopPHZhbG9yPl0pLi4uXSBbPGFyY2hpdm8+Li4uXSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NQorbXNnaWQgImVkaXQgZmlsZXMgaW4gcGxhY2UiCittc2dzdHIgImVkaXRhciBhcmNoaXZvcyBlbiBlbCBsdWdhciIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NgorbXNnaWQgInRyaW0gZW1wdHkgdHJhaWxlcnMiCittc2dzdHIgImNvcnRhciB0cmFpbGVycyB2YWPDrW9zIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk5Cittc2dpZCAid2hlcmUgdG8gcGxhY2UgdGhlIG5ldyB0cmFpbGVyIgorbXNnc3RyICJkb25kZSBjb2xvY2FyIGVsIG51ZXZvIHRyYWlsZXIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAxCittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgImFjY2nDs24gaWYgdHJhaWxlciB5YSBleGlzdGUiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAzCittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgaXMgbWlzc2luZyIKK21zZ3N0ciAiYWNjacOzbiBzaSBmYWx0YSBlbCB0cmFpbGVyIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNQorbXNnaWQgIm91dHB1dCBvbmx5IHRoZSB0cmFpbGVycyIKK21zZ3N0ciAibW9zdHJhciBzb2xvIGxvcyB0cmFpbGVycyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDYKK21zZ2lkICJkbyBub3QgYXBwbHkgY29uZmlnIHJ1bGVzIgorbXNnc3RyICJubyBhcGxpY2FyIHJlZ2xhcyBkZSBjb25maWd1cmFjacOzbiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDcKK21zZ2lkICJqb2luIHdoaXRlc3BhY2UtY29udGludWVkIHZhbHVlcyIKK21zZ3N0ciAianVudGFyIHZhbG9yZXMgY29uIGVzcGFjaW9zIGVuIGJsYW5jbyBjb250aWd1b3MiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA4Cittc2dpZCAic2V0IHBhcnNpbmcgb3B0aW9ucyIKK21zZ3N0ciAiY29uZmlndXJhciBvcGNpb25lcyBkZSBhbsOhbGlzaXMiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEwCittc2dpZCAiZG8gbm90IHRyZWF0IC0tLSBzcGVjaWFsbHkiCittc2dzdHIgIm5vIHRyYXRhciAtLS0gZXNwZWNpYWxtZW50ZSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTEKK21zZ2lkICJ0cmFpbGVyIgorbXNnc3RyICJ0cmFpbGVyIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMgorbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICJ0cmFpbGVyKHMpIHBhcmEgYWdyZWdhciIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMjMKK21zZ2lkICItLXRyYWlsZXIgd2l0aCAtLW9ubHktaW5wdXQgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS10cmFpbGVyIGNvbiAtLW9ubHktaW5wdXQgbm8gdGllbmUgc2VudGlkbyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMzMKK21zZ2lkICJubyBpbnB1dCBmaWxlIGdpdmVuIGZvciBpbi1wbGFjZSBlZGl0aW5nIgorbXNnc3RyICJubyBzZSBlbnRyZWfDsyBhcmNoaXZvIGRlIGVudHJhZGEgcGFyYSBlZGljacOzbiBlbiBsdWdhciIKKworIzogYnVpbHRpbi9sb2cuYzo1NgorbXNnaWQgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBsb2cgWzxvcGNpb25lcz5dIFs8cmFuZ28tZGUtcmV2aXNpw7NuPl0gW1stLV0gPHJ1dGE+Li4uXSIKKworIzogYnVpbHRpbi9sb2cuYzo1NworbXNnaWQgImdpdCBzaG93IFs8b3B0aW9ucz5dIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgc2hvdyBbPG9wY2lvbmVzPl0gPG9iamV0bz4uLi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICJvcGNpw7NuIC0tZGVjb3JhdGUgaW52w6FsaWRhOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzQKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAibW9zdHJhciBmdWVudGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc1Cittc2dpZCAiVXNlIG1haWwgbWFwIGZpbGUiCittc2dzdHIgIlVzYXIgYXJjaGl2byBkZSBtYXBhIGRlIG1haWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc3Cittc2dpZCAib25seSBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJzb2xvIGRlY29yYXIgcmVmcyBxdWUgY29uY3VlcmRlbiBjb24gPHBhdHLDs24+IgorCisjOiBidWlsdGluL2xvZy5jOjE3OQorbXNnaWQgImRvIG5vdCBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJubyBkZWNvcmFyIHJlZnMgcXVlIGNvbmN1ZXJkZW4gY29uIDxwYXRyw7NuPiIKKworIzogYnVpbHRpbi9sb2cuYzoxODAKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICJvcGNpb25lcyBkZSBkZWNvcmFkbyIKKworIzogYnVpbHRpbi9sb2cuYzoxODMKK21zZ2lkICJQcm9jZXNzIGxpbmUgcmFuZ2UgbixtIGluIGZpbGUsIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiUHJvY2VzYXIgcmFuZ28gZGUgbMOtbmVhcyBuLG0gZW4gYXJjaGl2bywgY29udGFuZG8gZGVzZGUgMSIKKworIzogYnVpbHRpbi9sb2cuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICJTYWxpZGEgZmluYWw6ICVkICVzXG4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBzaG93ICVzOiBiYWQgZmlsZSIKK21zZ3N0ciAiZ2l0IHNob3cgJXM6IG1hbCBhcmNoaXZvIgorCisjOiBidWlsdGluL2xvZy5jOjU1MCBidWlsdGluL2xvZy5jOjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciBvYmpldG8gJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdHlwZTogJWQiCittc2dzdHIgInRpcG8gZGVzY29ub2NpZG86ICVkIgorCisjOiBidWlsdGluL2xvZy5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBjb3ZlciBmcm9tIGRlc2NyaXB0aW9uIG1vZGUiCittc2dzdHIgIiVzOiBtb2RvIGNvdmVyIGZyb20gZGVzY3JpcHRpb24gaW52w6FsaWRvIgorCisjOiBidWlsdGluL2xvZy5jOjgyMQorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgImZvcm1hdGUuaGVhZGVycy4gc2luIHZhbG9yIgorCisjOiBidWlsdGluL2xvZy5jOjkzNgorbXNnaWQgIm5hbWUgb2Ygb3V0cHV0IGRpcmVjdG9yeSBpcyB0b28gbG9uZyIKK21zZ3N0ciAibm9tYnJlIGRlbCBkaXJlY3RvcmlvIGRlIHNhbGlkYSBlcyBtdXkgbGFyZ28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFicmlyIGFyY2hpdm8gcGF0Y2ggJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTY5Cittc2dpZCAibmVlZCBleGFjdGx5IG9uZSByYW5nZSIKK21zZ3N0ciAibmVjZXNpdGEgZXhhY3RhbWVudGUgdW4gcmFuZ28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTc5Cittc2dpZCAibm90IGEgcmFuZ2UiCittc2dzdHIgIm5vIGVzIHVuIHJhbmdvIgorCisjOiBidWlsdGluL2xvZy5jOjExNDMKK21zZ2lkICJjb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IgorbXNnc3RyICJsZXRyYXMgZGUgcG9ydGFkYSBuZWNlc2l0YSBmb3JtYXRvIGVtYWlsIgorCisjOiBidWlsdGluL2xvZy5jOjExNDkKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGNvdmVyLWxldHRlciBmaWxlIgorbXNnc3RyICJmYWxsw7MgYWwgY3JlYXIgbG9zIGFyY2hpdm9zIGNvdmVyLWxldHRlciIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgImluc2FubyBpbi1yZXBseS10bzogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NQorbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHRpb25zPl0gWzxzaW5jZT4gfCA8cmV2aXNpb24tcmFuZ2U+XSIKK21zZ3N0ciAiZ2l0IGZvcm1hdC1wYXRjaCBbPG9wY2lvbmVzPl0gWzxkZXNkZT4gfCA8cmFuZ28tZGUtcmV2aXNpb25lcz5dIgorCisjOiBidWlsdGluL2xvZy5jOjEzMTMKK21zZ2lkICJ0d28gb3V0cHV0IGRpcmVjdG9yaWVzPyIKK21zZ3N0ciAiwr9kb3MgZGlyZWN0b3Jpb3MgZGUgc2FsaWRhPyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDI0IGJ1aWx0aW4vbG9nLmM6MjE5NyBidWlsdGluL2xvZy5jOjIxOTkgYnVpbHRpbi9sb2cuYzoyMjExCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWl0ICVzIgorbXNnc3RyICJjb21taXQgZGVzY29ub2NpZG8gJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzNCBidWlsdGluL3JlcGxhY2UuYzo1OCBidWlsdGluL3JlcGxhY2UuYzoyMDcKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmIgorbXNnc3RyICJmYWxsw7MgYWwgcmVzb2x2ZXIgJyVzJyBjb21vIHJlZiB2w6FsaWRhIgorCisjOiBidWlsdGluL2xvZy5jOjE0MzkKK21zZ2lkICJjb3VsZCBub3QgZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICJubyBzZSBwdWRvIGVuY29udHJhciB1bmEgYmFzZSBkZSBmdXNpw7NuIGV4YWN0YSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDQzCittc2dpZCAiIgorImZhaWxlZCB0byBnZXQgdXBzdHJlYW0sIGlmIHlvdSB3YW50IHRvIHJlY29yZCBiYXNlIGNvbW1pdCBhdXRvbWF0aWNhbGx5LFxuIgorInBsZWFzZSB1c2UgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byB0byB0cmFjayBhIHJlbW90ZSBicmFuY2guXG4iCisiT3IgeW91IGNvdWxkIHNwZWNpZnkgYmFzZSBjb21taXQgYnkgLS1iYXNlPTxiYXNlLWNvbW1pdC1pZD4gbWFudWFsbHkiCittc2dzdHIgIiIKKyJmYWxsw7MgYWwgY29uc2VndWlyIHVwc3RyZWFtLCBzaSBxdWllcmVzIGdyYWJhciB1biBjb21taXQgYmFzZSBkZSBtYW5lcmEgIgorImF1dG9tw6F0aWNhLFxuIgorInBvciBmYXZvciB1c2EgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBwYXJhIHJhc3RyZWFyIHVuYSByYW1hIHJlbW90YS5cbiIKKyJPIHB1ZWRlcyBlc3BlY2lmaWNhciB1biBjb21taXQgYmFzZSBtZWRpYW50ZSAtLWJhc2U9PGlkLWNvbW1pdC1iYXNlPiAiCisibWFudWFsbWVudGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2MworbXNnaWQgImZhaWxlZCB0byBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgImZhbGzDsyBhbCBlbmNvbnRyYXIgdW5hIGJhc2UgZGUgZnVzacOzbiBleGFjdGEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ3NAorbXNnaWQgImJhc2UgY29tbWl0IHNob3VsZCBiZSB0aGUgYW5jZXN0b3Igb2YgcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAiZWwgY29tbWl0IGJhc2UgZGViZSBzZXIgZWwgYW5jZXN0cm8gZGUgbGEgbGlzdGEgZGUgcmV2aXNpw7NuIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzgKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGRuJ3QgYmUgaW4gcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAiZWwgY29tbWl0IGJhc2Ugbm8gZGViZSBlc3RhciBlbiBsYSBsaXN0YSBkZSByZXZpc2nDs24iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzMQorbXNnaWQgImNhbm5vdCBnZXQgcGF0Y2ggaWQiCittc2dzdHIgIm5vIHNlIHB1ZWRlIG9idGVuZXIgaWQgZGUgcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU4MworbXNnaWQgImZhaWxlZCB0byBpbmZlciByYW5nZS1kaWZmIHJhbmdlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGluZmVyaXIgcmFuZ29zIHJhbmdlLWRpZmYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYyOQorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgInVzZSBbUEFUQ0ggbi9tXSBpbmNsdXNvIGNvbiB1biDDum5pY28gcGFyY2hlIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzIKK21zZ2lkICJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIKK21zZ3N0ciAidXNlIFtQQVRDSF0gaW5jbHVzbyBjb24gbcO6bHRpcGxlcyBwYXJjaGVzIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzYKK21zZ2lkICJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIKK21zZ3N0ciAibW9zdHJhciBwYXJjaGVzIGVuIHN0YW5kYXJkIG91dCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjM4Cittc2dpZCAiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiCittc2dzdHIgImdlbmVyYXIgbGV0cmEgZGUgY292ZXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MAorbXNnaWQgInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIKK21zZ3N0ciAiIgorInVzYXIgdW5hIHNlY3VlbmNpYSBzaW1wbGUgZGUgbsO6bWVyb3MgcGFyYSBzYWxpZGEgZGUgbm9tYnJlcyBkZSBhcmNoaXZvcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQxCittc2dpZCAic2Z4IgorbXNnc3RyICJzZngiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MgorbXNnaWQgInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIgorbXNnc3RyICJ1c2UgPHNmeD4gZW4gbHVnYXIgZGUgJy5wYXRjaCciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NAorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgImNvbWVuemFyIGEgbnVtZXJhciBsb3MgcGFyY2hlcyBkZXNkZSA8bj4gZW4gbHVnYXIgZGUgMSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ2Cittc2dpZCAibWFyayB0aGUgc2VyaWVzIGFzIE50aCByZS1yb2xsIgorbXNnc3RyICJtYXJjYXIgbGFzIHNlcmllcyBjb21vIE50aCByZS1yb2xsIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDgKK21zZ2lkICJVc2UgW1JGQyBQQVRDSF0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICJVc2UgW1JGQyBQQVRDSF0gZW4gbHVnYXIgZGUgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUxCittc2dpZCAiY292ZXItZnJvbS1kZXNjcmlwdGlvbi1tb2RlIgorbXNnc3RyICJtb2RvLWNvdmVyLWZyb20tZGVzY3JpcHRpb24iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1MgorbXNnaWQgImdlbmVyYXRlIHBhcnRzIG9mIGEgY292ZXIgbGV0dGVyIGJhc2VkIG9uIGEgYnJhbmNoJ3MgZGVzY3JpcHRpb24iCittc2dzdHIgIiIKKyJnZW5lcmEgcGFydGVzIGRlIHVuYSBjYXJ0YSBkZSBwcmVzZW50YWNpw7NuIGJhc2FkbyBlbiBsYSBkZXNjcmlwY2nDs24gZGUgbGEgIgorInJhbWEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NAorbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiVXNlIFs8cHJlZmlqbz5dIGVuIGx1Z2FyIGRlIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIKK21zZ3N0ciAiZ3VhcmRhciBhcmNoaXZvcyByZXN1bHRhbnRlcyBlbiA8ZGlyPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYwCittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgIm5vIGNvcnRhci9hZ3JlZ2FyIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MworbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgIm5vIG1vc3RyYXIgZGlmZnMgYmluYXJpb3MiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NQorbXNnaWQgIm91dHB1dCBhbGwtemVybyBoYXNoIGluIEZyb20gaGVhZGVyIgorbXNnc3RyICJzYWxpZGEgY29tbyBoYXNoIGRlIHRvZG9zLWNlcm9zIGVuIGxhIGNhYmVjZXJhIEZyb20iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NworbXNnaWQgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIKK21zZ3N0ciAibm8gaW5jbHV5YSB1biBwYXJjaGUgcXVlIGNvaW5jaWRhIGNvbiB1biBjb21taXQgZW4gdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2OQorbXNnaWQgInNob3cgcGF0Y2ggZm9ybWF0IGluc3RlYWQgb2YgZGVmYXVsdCAocGF0Y2ggKyBzdGF0KSIKK21zZ3N0ciAibW9zdHJhciBmb3JtYXRvIGRlIHBhcmNoZSBlbiBsdWdhciBkZWwgZGVmYXVsdCAocGFyY2hlICsgc3RhdCkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MQorbXNnaWQgIk1lc3NhZ2luZyIKK21zZ3N0ciAiTWVuc2FqZWFuZG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MgorbXNnaWQgImhlYWRlciIKK21zZ3N0ciAiY2FiZXphbCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjczCittc2dpZCAiYWRkIGVtYWlsIGhlYWRlciIKK21zZ3N0ciAiYWdyZWdhciBjYWJlY2VyYSBlbWFpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0IGJ1aWx0aW4vbG9nLmM6MTY3NgorbXNnaWQgImVtYWlsIgorbXNnc3RyICJlbWFpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0Cittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgImFncmVnYXIgY2FiZWNlcmEgVG86IgorCisjOiBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAiYWdyZWdhciBjYWJlY2VyYSBDYzoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3OAorbXNnaWQgImlkZW50IgorbXNnc3RyICJpZGVudCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc5Cittc2dpZCAic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIKK21zZ3N0ciAiIgorImNvbmZpZ3VyYXIgZGlyZWNjacOzbiBGcm9tIGEgPGlkZW50PiAoIG8gaWRlbnRpZGFkIGRlIGNvbW1pdHRlciBzaSBlc3TDoSAiCisiYXVzZW50ZSkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MQorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgImlkIGRlIG1lbnNhamUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MgorbXNnaWQgIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIKK21zZ3N0ciAiaGFjZXIgcHJpbWVyIG1haWwgdW5hIHJlc3B1ZXN0YSBhIDxpZCBkZSBtZW5zYWplPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgzIGJ1aWx0aW4vbG9nLmM6MTY4NgorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICJsw61taXRlIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODQKK21zZ2lkICJhdHRhY2ggdGhlIHBhdGNoIgorbXNnc3RyICJhZGp1bnRhciBlbCBwYXJjaGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NworbXNnaWQgImlubGluZSB0aGUgcGF0Y2giCittc2dzdHIgInBvbmVyIGVsIHBhcmNoZSBlbiBsw61uZWEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5MQorbXNnaWQgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIgorbXNnc3RyICJoYWJpbGl0YXIgaGlsb3MgZGUgbWVuc2FqZXMsIGVzdGlsb3M6IHN1cGVyZmljaWFsLCBwcm9mdW5kbyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkzCittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICJmaXJtYSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk0Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICJhZ3JlZ2FyIHVuYSBmaXJtYSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk1Cittc2dpZCAiYmFzZS1jb21taXQiCittc2dzdHIgImNvbW1pdC1iYXNlIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTYKK21zZ2lkICJhZGQgcHJlcmVxdWlzaXRlIHRyZWUgaW5mbyB0byB0aGUgcGF0Y2ggc2VyaWVzIgorbXNnc3RyICIiCisiYWdyZWdhciBpbmZvcm1hY2nDs24gZGUgw6FyYm9sIGRlIHJlcXVpc2l0b3MgcHJldmlvcyBhIGxhIHNlcmllIGRlIHBhcmNoZXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5OAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSBmcm9tIGEgZmlsZSIKK21zZ3N0ciAiYWdyZWdhciB1bmEgZmlybWEgZGUgdW4gYXJjaGl2byIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk5Cittc2dpZCAiZG9uJ3QgcHJpbnQgdGhlIHBhdGNoIGZpbGVuYW1lcyIKK21zZ3N0ciAibm8gbW9zdHJhciBsb3Mgbm9tYnJlcyBkZSBhcmNoaXZvcyBkZSBsb3MgcGFyY2hlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAxCittc2dpZCAic2hvdyBwcm9ncmVzcyB3aGlsZSBnZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgIm1vc3RyYXIgbWVkaWRvciBkZSBwcm9ncmVzbyBtaWVudHJhcyBzZSBnZW5lcmFuIGxvcyBwYXJjaGVzIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDMKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmV2PiBpbiBjb3ZlciBsZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICJtdWVzdHJhIGNhbWJpb3MgY29udHJhIDxyZXY+IGVuIGNvdmVyIGxldHRlciBvIGVuIHVuIHNvbG8gcGFyY2hlIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDYKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmVmc3BlYz4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAibXVlc3RyYSBjYW1iaW9zIGNvbnRyYSA8cmVmc3BlYz4gZW4gY292ZXIgbGV0dGVyIG8gZW4gdW4gc29sbyBwYXJjaGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwOAorbXNnaWQgInBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiCittc2dzdHIgInBvcmNlbnRhamUgcG9yIGVsIGN1YWwgbGEgY3JlYWNpw7NuIGVzIHBlc2FkYSIKKworIzogYnVpbHRpbi9sb2cuYzoxNzkyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJXMiCittc2dzdHIgImzDrW5lYSBkZSBpZGVudGlmaWNhY2nDs24gaW52w6FsaWRhOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxODA3Cittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1uIHkgLWsgc29uIG11dHVhbWVudGUgZXhjbHVzaXZhcyIKKworIzogYnVpbHRpbi9sb2cuYzoxODA5Cittc2dpZCAiLS1zdWJqZWN0LXByZWZpeC8tLXJmYyBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1zdWJqZWN0LXByZWZpeC8tLXJmYyB5IC1rIHNvbiBtdXR1YW1lbnRlIGV4Y2x1c2l2b3MiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxNworbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1vbmx5IG5vIHRpZW5lIHNlbnRpZG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxOQorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLXN0YXR1cyBubyB0aWVuZSBzZW50aWRvIgorCisjOiBidWlsdGluL2xvZy5jOjE4MjEKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tY2hlY2sgbm8gdGllbmUgc2VudGlkbyIKKworIzogYnVpbHRpbi9sb2cuYzoxODU0Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgIsK/c2FsaWRhIHN0YW5kYXJkLCBvIGRpcmVjdG9yaW8sIGN1YWw/IgorCisjOiBidWlsdGluL2xvZy5jOjE5NTgKK21zZ2lkICItLWludGVyZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIi0taW50ZXJkaWZmIHJlcXVpZXJlIC0tY292ZXItbGV0dGVyIG8gdW4gcGFyY2hlIMO6bmljbyIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYyCittc2dpZCAiSW50ZXJkaWZmOiIKK21zZ3N0ciAiSW50ZXJkaWZmOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVyZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIkludGVyZGlmZiBjb250cmEgdiVkOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTY5Cittc2dpZCAiLS1jcmVhdGlvbi1mYWN0b3IgcmVxdWlyZXMgLS1yYW5nZS1kaWZmIgorbXNnc3RyICItLWNyZWF0aW9uLWZhY3RvciByZXF1aWVyZSAtLXJhbmdlLWRpZmYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk3MworbXNnaWQgIi0tcmFuZ2UtZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIi0tcmFuZ2UtZGlmZiByZXF1aWVyZSAtLWNvdmVyLWxldHRlciBvIHBhcmNoZSDDum5pY28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk4MQorbXNnaWQgIlJhbmdlLWRpZmY6IgorbXNnc3RyICJSYW5nZS1kaWZmOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJhbmdlLWRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICJSYW5nZS1kaWZmIGNvbnRyYSB2JWQ6IgorCisjOiBidWlsdGluL2xvZy5jOjE5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciBsYSBmaXJtYSBkZWwgYXJjaGl2byAnJXMnIgorCisjOiBidWlsdGluL2xvZy5jOjIwMjkKK21zZ2lkICJHZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgIkdlbmVyYW5kbyBwYXJjaGVzIgorCisjOiBidWlsdGluL2xvZy5jOjIwNzMKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGNyZWFyIGxvcyBhcmNoaXZvcyBkZSBzYWxpZGEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjEzMgorbXNnaWQgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIgorbXNnc3RyICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGzDrW1pdGU+XV1dIgorCisjOiBidWlsdGluL2xvZy5jOjIxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIgorbXNnc3RyICIiCisiTm8gc2UgcHVkbyBlbmNvbnRyYXIgdW5hIHJhbWEgcmVtb3RhIHJhc3RyZWFkYSwgcG9yIGZhdm9yIGVzcGVjaWZpcXVlICIKKyI8dXBzdHJlYW0+IG1hbnVhbG1lbnRlLlxuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDcwCittc2dpZCAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgbHMtZmlsZXMgWzxvcGNpb25lcz5dIFs8YXJjaGl2bz4uLi5dIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI2Cittc2dpZCAiaWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGFncyIKK21zZ3N0ciAiaWRlbnRpZmlxdWUgZWwgZXN0YWRvIGRlbCBhcmNoaXZvIGNvbiB0YWdzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI4Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgInVzYXIgbGV0cmFzIG1pbsO6c2N1bGFzIHBhcmEgYXJjaGl2b3MgJ2FzdW1pZG9zIHNpbiBjYW1iaW9zJyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzMAorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2ZzbW9uaXRvciBjbGVhbicgZmlsZXMiCittc2dzdHIgInVzYXIgbGV0cmFzIG1pbsO6c2N1bGFzIHBhcmEgYXJjaGl2b3MgZGUgJ2ZzbW9uaXRvciBjbGVhbiciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzIKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAibW9zdHJhciBhcmNoaXZvcyBlbiBjYWNow6kgZW4gbGEgc2FsaWRhIChkZWZhdWx0KSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNAorbXNnaWQgInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJtb3N0cmFyIGFyY2hpdm9zIGJvcnJhZG9zIGVuIGxhIHNhbGlkYSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNgorbXNnaWQgInNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAibW9zdHJhciBhcmNoaXZvcyBtb2RpZmljYWRvcyBlbiBsYSBzYWxpZGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzgKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIm1vc3RyYXIgb3Ryb3MgYXJjaGl2b3MgZW4gbGEgc2FsaWRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQwCittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIm1vc3RyYXIgYXJjaGl2b3MgaWdub3JhZG9zIGVuIGxhIHNhbGlkYSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MworbXNnaWQgInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisibW9zdHJhciBjb250ZW5pZG8gZGUgbm9tYnJlcyBkZSBvYmpldG9zIGVuIGVsIMOhcmVhIGRlIHN0YWdlIGVuIGxhIHNhbGlkYSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NQorbXNnaWQgInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiCittc2dzdHIgIm1vc3RyYXIgYXJjaGl2b3MgZW4gZWwgZmlsZXN5c3RlbSBxdWUgbmVjZXNpdGFuIHNlciBib3JyYWRvcyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NworbXNnaWQgInNob3cgJ290aGVyJyBkaXJlY3RvcmllcycgbmFtZXMgb25seSIKK21zZ3N0ciAibW9zdHJhciBzb2xvIG5vbWJyZXMgZGUgJ2RpcmVjdG9yaW9zIG90cm9zJyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0OQorbXNnaWQgInNob3cgbGluZSBlbmRpbmdzIG9mIGZpbGVzIgorbXNnc3RyICJtb3N0cmFyIGZpbmFsZXMgZGUgbMOtbmVhIGRlIGFyY2hpdm9zIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTUxCittc2dpZCAiZG9uJ3Qgc2hvdyBlbXB0eSBkaXJlY3RvcmllcyIKK21zZ3N0ciAibm8gbW9zdHJhciBkaXJlY3RvcmlvcyB2YWPDrW9zIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU0Cittc2dpZCAic2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJtb3N0cmFyIGFyY2hpdm9zIG5vIGZ1c2lvbmFkb3MgZW4gbGEgc2FsaWRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU2Cittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIm1vc3RyYXIgaW5mb3JtYWNpw7NuIHJlc29sdmVyLWRlc2hhY2VyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU4Cittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICJzYWx0YXIgYXJjaGl2b3MgcXVlIGNvbmN1ZXJkZW4gY29uIGVsIHBhdHLDs24iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjEKK21zZ2lkICJleGNsdWRlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gPGZpbGU+IgorbXNnc3RyICJleGNsdWlyIHBhdHJvbmVzIGxlw61kb3MgZGUgPGFyY2hpdm8+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY0Cittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgIiIKKyJsZWVyIHBhdHJvbmVzIGRlIGV4Y2x1c2nDs24gZGUgbWFuZXJhIGFkaWNpb25hbCBwb3IgZGlyZWN0b3JpbyBlbiA8YXJjaGl2bz4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjYKK21zZ2lkICJhZGQgdGhlIHN0YW5kYXJkIGdpdCBleGNsdXNpb25zIgorbXNnc3RyICJhZ3JlZ2FyIGxhcyBleGNsdXNpb25lcyBzdGFuZGFyZCBkZSBnaXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzAKK21zZ2lkICJtYWtlIHRoZSBvdXRwdXQgcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAiaGFjZXIgbGEgc2FsaWRhIHJlbGF0aXZhIGFsIGRpcmVjdG9yaW8gcHJpbmNpcGFsIGRlbCBwcm95ZWN0byIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MworbXNnaWQgInJlY3Vyc2UgdGhyb3VnaCBzdWJtb2R1bGVzIgorbXNnc3RyICJyZWN1cnJpciBhIHRyYXbDqXMgZGUgc3VibcOzZHVsb3MiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzUKK21zZ2lkICJpZiBhbnkgPGZpbGU+IGlzIG5vdCBpbiB0aGUgaW5kZXgsIHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IiCittc2dzdHIgInNpIGN1YWxxdWllciA8YXJjaGl2bz4gbm8gZXN0w6EgZW4gZWwgw61uZGljZSwgdHJhdGFybG8gY29tbyB1biBlcnJvciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NgorbXNnaWQgInRyZWUtaXNoIgorbXNnc3RyICLDoXJib2wtaXNtbyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NworbXNnaWQgInByZXRlbmQgdGhhdCBwYXRocyByZW1vdmVkIHNpbmNlIDx0cmVlLWlzaD4gYXJlIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIiIKKyJmaW5naXIgcXVlIGxhcyBydXRhcyBoYW4gc2lkbyBib3JyYWRhcyB5YSBxdWUgdG9kYXbDrWEgaGF5IDzDoXJib2wtaXNtb3M+ICIKKyJwcmVzZW50ZXMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzkKK21zZ2lkICJzaG93IGRlYnVnZ2luZyBkYXRhIgorbXNnc3RyICJtb3N0cmFyIGRhdGEgZGUgZGVidWciCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6OQorbXNnaWQgIiIKKyJnaXQgbHMtcmVtb3RlIFstLWhlYWRzXSBbLS10YWdzXSBbLS1yZWZzXSBbLS11cGxvYWQtcGFjaz08ZXhlYz5dXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy1xIHwgLS1xdWlldF0gWy0tZXhpdC1jb2RlXSBbLS1nZXQtdXJsXVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstLXN5bXJlZl0gWzxyZXBvc2l0b3J5PiBbPHJlZnM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgbHMtcmVtb3RlIFstLWhlYWRzXSBbLS10YWdzXSBbLS1yZWZzXSBbLS11cGxvYWQtcGFjaz08ZXhlYz5dXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy1xIHwgLS1xdWlldF0gWy0tZXhpdC1jb2RlXSBbLS1nZXQtdXJsXVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstLXN5bXJlZl0gWzxyZXBvc2l0b3Jpbz4gWzxyZWZzPi4uLl1dIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjU5Cittc2dpZCAiZG8gbm90IHByaW50IHJlbW90ZSBVUkwiCittc2dzdHIgIm5vIG1vc3RyYXIgZWwgVVJMIHJlbW90byIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2MCBidWlsdGluL2xzLXJlbW90ZS5jOjYyIGJ1aWx0aW4vcmViYXNlLmM6MTU2MQorbXNnaWQgImV4ZWMiCittc2dzdHIgImVqZWN1dGFyIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYxIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjMKK21zZ2lkICJwYXRoIG9mIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIGhvc3QiCittc2dzdHIgInJ1dGEgZGUgZ2l0LXVwbG9hZC1wYWNrIGVuIGVsIGhvc3QgcmVtb3RvIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY1Cittc2dpZCAibGltaXQgdG8gdGFncyIKK21zZ3N0ciAibGltaXRhciBhIHRhZ3MiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjYKK21zZ2lkICJsaW1pdCB0byBoZWFkcyIKK21zZ3N0ciAibGltaXRhciBhIGhlYWRzIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY3Cittc2dpZCAiZG8gbm90IHNob3cgcGVlbGVkIHRhZ3MiCittc2dzdHIgIm5vIG1vc3RyYXIgdGFncyBwZWxhZG9zIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY5Cittc2dpZCAidGFrZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiBpbnRvIGFjY291bnQiCittc2dzdHIgInRvbWFyIHVybC48YmFzZT4uaW5zdGVhZE9mIGVuIGN1ZW50YSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3MgorbXNnaWQgImV4aXQgd2l0aCBleGl0IGNvZGUgMiBpZiBubyBtYXRjaGluZyByZWZzIGFyZSBmb3VuZCIKK21zZ3N0ciAic2FsaXIgY29uIGPDs2RpZ28gZGUgc2FsaWRhIDIgc2kgbm8gc2UgZW5jdWVudHJhbiByZWZzIHF1ZSBjb25jdWVyZGVuIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjc1Cittc2dpZCAic2hvdyB1bmRlcmx5aW5nIHJlZiBpbiBhZGRpdGlvbiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgYnkgaXQiCittc2dzdHIgIm1vc3RyYXIgcmVmIHN1YnlhY2VudGUgZW4gYWRpY2nDs24gYWwgb2JqZXRvIGFwdW50YWRvIHBvciDDqWwiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjMwCittc2dpZCAiZ2l0IGxzLXRyZWUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLXRyZWUgWzxvcGNpb25lcz5dIDzDoXJib2wtaXNtbz4gWzxydXRhPi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOAorbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAic29sbyBtb3N0cmFyIMOhcmJvbGVzIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzAKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgInJlY3VycmlyIGVuIHN1YsOhcmJvbGVzIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzIKK21zZ2lkICJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIgorbXNnc3RyICJtb3N0cmFyIMOhcmJvbGVzIGN1YW5kbyBzZSByZWN1cnJlIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJ0ZXJtaW5hciBlbnRyYWRhcyBjb24gYnl0ZSBOVUwiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNgorbXNnaWQgImluY2x1ZGUgb2JqZWN0IHNpemUiCittc2dzdHIgImluY2x1aXIgdGFtYcOxbyBkZSBvYmpldG8iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzOCBidWlsdGluL2xzLXRyZWUuYzoxNDAKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICJsaXN0YXIgc29sbyBub21icmVzIGRlIGFyY2hpdm9zIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDMKK21zZ2lkICJ1c2UgZnVsbCBwYXRoIG5hbWVzIgorbXNnc3RyICJ1c2FyIHJ1dGFzIGNvbXBsZXRhcyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQ1Cittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICIiCisibW9zdHJhciB0b2RvIGVsIMOhcmJvbDsgbm8gc29sbyBlbCBkaXJlY3RvcmlvIGFjdHVhbCAoaW1wbGljYSAtLWZ1bGwtbmFtZSkiCisKKyM6IGJ1aWx0aW4vbWFpbHNwbGl0LmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IG1ib3g6ICclcyciCittc2dzdHIgIm1ib3ggdmFjw61vOiAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6NTUKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IG1lcmdlIFs8b3BjaW9uZXM+XSBbPGNvbW1pdD4uLi5dIgorCisjOiBidWlsdGluL21lcmdlLmM6NTYKK21zZ2lkICJnaXQgbWVyZ2UgLS1hYm9ydCIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tYWJvcnQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NworbXNnaWQgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorbXNnc3RyICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExOQorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiY2FtYmlhciBgbScgcmVxdWllcmUgdW4gdmFsb3IiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAib3BjacOzbiBgJXMnIHJlcXVpZXJlIHVuIHZhbG9yIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIk5vIHNlIHB1ZG8gZW5jb250cmFyIGVzdHJhdGVnaWEgZGUgZnVzacOzbiAnJXMnLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkVzdHJhdGVnaWFzIGRpc3BvbmlibGVzIHNvbjoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkVzdHJhdGVnaWFzIHBlcnNvbmFsaXphZGFzIGRpc3BvbmlibGVzIHNvbjoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDUgYnVpbHRpbi9wdWxsLmM6MTMyCittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAibm8gbW9zdHJhciB1biBkaWZmc3RhdCBhbCBmaW5hbCBkZSBsYSBmdXNpw7NuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ4IGJ1aWx0aW4vcHVsbC5jOjEzNQorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAibW9zdHJhciB1biBkaWZmc3RhdCBhbCBmaW5hbCBkZSBsYSBmdXNpw7NuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ5IGJ1aWx0aW4vcHVsbC5jOjEzOAorbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIihzaW7Ds25pbW8gcGFyYSAtLXN0YXQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUxIGJ1aWx0aW4vcHVsbC5jOjE0MQorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorImFncmVnYXIgKGNvbW8gbcOheGltbyA8bj4pIGVudHJhZGFzIGRlbCBzaG9ydGxvZyBhbCBtZW5zYWplIGRlbCBjb21taXQgZGUgIgorImZ1c2nDs24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTQgYnVpbHRpbi9wdWxsLmM6MTQ3Cittc2dpZCAiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiCittc2dzdHIgImNyZWFyIHVuIGNvbW1pdCDDum5pY28gZW4gbHVnYXIgZGUgaGFjZXIgdW5hIGZ1c2nDs24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTYgYnVpbHRpbi9wdWxsLmM6MTUwCittc2dpZCAicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIgorbXNnc3RyICJyZWFsaXphciB1biBjb21taXQgc2kgbGEgZnVzacOzbiBlcyBleGl0b3NhIChkZWZhdWx0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1OCBidWlsdGluL3B1bGwuYzoxNTMKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgImVkaXRhciBtZW5zYWplIGFudGVzIGRlIHJlYWxpemFyIGNvbW1pdCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MAorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgInBlcm1pdGlyIGZhc3QtZm9yd2FycyAoZGVmYXVsdCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjIgYnVpbHRpbi9wdWxsLmM6MTYwCittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAiYWJvcnRhciBzaSBmYXN0LWZvcndhcmQgbm8gZXMgcG9zaWJsZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NiBidWlsdGluL3B1bGwuYzoxNjMKK21zZ2lkICJ2ZXJpZnkgdGhhdCB0aGUgbmFtZWQgY29tbWl0IGhhcyBhIHZhbGlkIEdQRyBzaWduYXR1cmUiCittc2dzdHIgInZlcmlmaWNhciBxdWUgZWwgY29tbWl0IG5vbWJyYWRvIHRpZW5lIHVuYSBmaXJtYSBHUEcgdsOhbGlkYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NyBidWlsdGluL25vdGVzLmM6Nzg3IGJ1aWx0aW4vcHVsbC5jOjE2NworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjAgYnVpbHRpbi9yZWJhc2UuYzoxNTc1IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgImVzdHJhdGVnaWEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjggYnVpbHRpbi9wdWxsLmM6MTY4Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIgorbXNnc3RyICJlc3RyYXRlZ2lhIGRlIGZ1c2nDs24gcGFyYSB1c2FyIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY5IGJ1aWx0aW4vcHVsbC5jOjE3MQorbXNnaWQgIm9wdGlvbj12YWx1ZSIKK21zZ3N0ciAib3BjacOzbj12YWxvciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3MCBidWlsdGluL3B1bGwuYzoxNzIKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJvcGNpw7NuIHBhcmEgbGEgZXN0cmF0ZWdpYSBkZSBmdXNpw7NuIHNlbGVjY2lvbmFkYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3MgorbXNnaWQgIm1lcmdlIGNvbW1pdCBtZXNzYWdlIChmb3IgYSBub24tZmFzdC1mb3J3YXJkIG1lcmdlKSIKK21zZ3N0ciAiZnVzaW9uYXIgbWVuc2FqZSBkZSBjb21taXQgKHBhcmEgdW5hIGZ1c2nDs24gbm8gZmFzdC1mb3J3YXJkKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3OQorbXNnaWQgImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICJhYm9ydGFyIGxhIGZ1c2nDs24gZW4gcHJvZ3Jlc28gYWN0dWFsIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgxCittc2dpZCAiLS1hYm9ydCBidXQgbGVhdmUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSBhbG9uZSIKK21zZ3N0ciAiLS1hYm9ydCBwZXJvIGRlamEgZWwgw61uZGljZSB5IGVsIMOhcmJvbCBkZSB0cmFiYWpvIHNvbG9zIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgzCittc2dpZCAiY29udGludWUgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgImNvbnRpbnVhciBsYSBmdXNpw7NuIGVuIHByb2dyZXNvIGFjdHVhbCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4NSBidWlsdGluL3B1bGwuYzoxNzkKK21zZ2lkICJhbGxvdyBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgInBlcm1pdGlyIGZ1c2lvbmFyIGhpc3RvcmlhcyBubyByZWxhY2lvbmFkYXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyOTEKK21zZ2lkICJieXBhc3MgcHJlLW1lcmdlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAiaGFjZXIgdW4gYnlwYXNzIGEgaG9va3MgcHJlLW1lcmdlLWNvbW1pdCB5IGNvbW1pdC1tc2ciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMDgKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAibm8gc2UgcHVkbyBlamVjdXRhciBzdGFzaC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTMKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgInN0YXNoIGZhbGzDsyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICJubyBlcyB1biBvYmpldG8gdsOhbGlkbzogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNDAgYnVpbHRpbi9tZXJnZS5jOjM1NworbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgImxlY3R1cmEgZGUgw6FyYm9sIGZhbGzDsyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM4NworbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKG5hZGEgcGFyYSBoYWNlciBzcXVhc2gpIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiQ29tbWl0IGRlIHNxdWFzaCAtLSBubyBhY3R1YWxpemFuZG8gSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiTm8gaGF5IG1lbnNhamUgZGUgZnVzacOzbiAtLSBubyBhY3R1YWxpemFuZG8gSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiclcycgbm8gYXB1bnRhIGEgbmluZ8O6biBjb21taXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiTWFsIHN0cmluZyBicmFuY2guJXMubWVyZ2VvcHRpb25zOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcwOAorbXNnaWQgIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgIk5vIG1hbmVqYW5kbyBuYWRhIG3DoXMgcXVlIGZ1c2nDs24gZGUgZG9zIGhlYWRzLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICJPcGNpw7NuIGRlc2Nvbm9jaWRhIHBhcmEgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBlc2NyaWJpciAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIk5vIHNlIHB1ZWRvIGxlZXIgZGUgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyJObyBzZSByZWFsaXphIGNvbW1pdCBkZSBsYSBmdXNpw7NuOyB1c2UgJ2dpdCBjb21taXQnIHBhcmEgY29tcGxldGFyIGxhICIKKyJmdXNpw7NuLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBvciBmYXZvciBpbmdyZXNlIHVuIG1lbnNhamUgZGUgY29tbWl0IHF1ZSBleHBsaXF1ZSBwb3IgcXXDqSBlcyBuZWNlc2FyaWEgIgorImVzdGEgZnVzacOzbixcbiIKKyJlc3BlY2lhbG1lbnRlIHNpIGVzdG8gZnVzaW9uYSB1biB1cHN0cmVhbSBhY3R1YWxpemFkbyBlbiB1bmEgcmFtYSBkZSAiCisidMOzcGljby5cbiIKKyJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwOQorbXNnaWQgIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIlVuIG1lbnNhamUgdmFjw61vIGFib3J0YSBlbCBjb21taXQuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJMw61uZWFzIGNvbWVuemFuZG8gY29uICclYycgc2Vyw6FuIGlnbm9yYWRhcywgeSB1biBtZW5zYWplIHZhY8OtbyBhYm9ydGFcbiIKKyIgZWwgY29tbWl0LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODY1Cittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICJNZW5zYWplIGRlIGNvbW1pdCB2YWPDrW8uIgorCisjOiBidWlsdGluL21lcmdlLmM6ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAiTWFyYXZpbGxvc28uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorIkZ1c2nDs24gYXV0b23DoXRpY2EgZmFsbMOzOyBhcnJlZ2xlIGxvcyBjb25mbGljdG9zIHkgbHVlZ28gcmVhbGljZSB1biBjb21taXQgIgorImNvbiBlbCByZXN1bHRhZG8uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODAKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5vIHJhbWEgYWN0dWFsLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4MgorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTm8gaGF5IHJlbW90byBwYXJhIGxhIHJhbWEgYWN0dWFsLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4NAorbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiUG9yIGRlZmVjdG8sIG5vIGhheSB1biB1cHN0cmVhbSAgZGVmaW5pZG8gcGFyYSBsYSByYW1hIGFjdHVhbC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAiTm8gaGF5IHJhbWEgZGUgcmFzdHJlbyByZW1vdG8gcGFyYSAlcyBkZSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIHZhbHVlICclcycgaW4gZW52aXJvbm1lbnQgJyVzJyIKK21zZ3N0ciAiVmFsb3IgZXJyw7NuZW8gJyVzJyBlbiBlbCBlbnRvcm5vICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIGluICVzOiAlcyIKK21zZ3N0ciAibmFkYSBxdWUgcG9kYW1vcyBmdXNpb25hciBlbiAlczogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTgzCittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIm5hZGEgcXVlIHBvZGFtb3MgZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjg2Cittc2dpZCAiLS1hYm9ydCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1hYm9ydCBubyBlc3BlcmEgYXJndW1lbnRvcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTAKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIk5vIGhheSB1bmEgZnVzacOzbiBwYXJhIGFib3J0YXIgKGZhbHRhIE1FUkdFX0hFQUQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5OQorbXNnaWQgIi0tcXVpdCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1xdWl0IG5vIGVzcGVyYSBhcmd1bWVudG9zIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMxMgorbXNnaWQgIi0tY29udGludWUgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tY29udGludWUgbm8gZXNwZXJhIGFyZ3VtZW50b3MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzE2Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgaW4gcHJvZ3Jlc3MgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICJObyBoYXkgZnVzacOzbiBlbiBwcm9ncmVzbyAoZmFsdGEgTUVSR0VfSEVBRCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzMgorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJObyBoYXMgY29uY2x1aWRvIGxhIGZ1c2nDs24gKGV4aXN0ZSBNRVJHRV9IRUFEKS5cbiIKKyJQb3IgZmF2b3IsIHJlYWxpemEgdW4gY29tbWl0IGNvbiBsb3MgY2FtYmlvcyBhbnRlcyBkZSBmdXNpb25hci4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM5Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIk5vIGhhcyBjb25jbHVpZG8gZWwgY2hlcnJ5LXBpY2sgKGV4aXN0ZSBDSEVSUllfUElDS19IRUFEKS5cbiIKKyJQb3IgZmF2b3IsIHJlYWxpemEgdW4gY29tbWl0IGNvbiBsb3MgY2FtYmlvcyBhbnRlcyBkZSBmdXNpb25hci4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzQyCittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICJObyBoYXMgY29uY2x1aWRvIGVsIGNoZXJyeS1waWNrIChleGlzdGUgQ0hFUlJZX1BJQ0tfSEVBRCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1NgorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorbXNnc3RyICJObyBzZSBwdWVkZSBjb21iaW5hciAtLXNxdWFzaCBjb24gLS1uby1mZi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzU4Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1jb21taXQuIgorbXNnc3RyICJObyBzZSBwdWVkZSBjb21iaW5hciAtLXNxdWFzaCBjb24gLS1jb21taXQuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM3NAorbXNnaWQgIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIgorbXNnc3RyICIiCisiTm8gaGF5IGNvbW1pdCBlc3BlY2lmaWNhZG8geSBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBubyBlc3TDoSBjb25maWd1cmFkby4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkxCittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgIkNvbW1pdCBhcGxhc3RhZG8gZGVudHJvIGRlIHVuIGhlYWQgdmFjw61vIG5vIGVzIHNvcG9ydGFkbyB0b2RhdsOtYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTMKK21zZ2lkICJOb24tZmFzdC1mb3J3YXJkIGNvbW1pdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGludG8gYW4gZW1wdHkgaGVhZCIKK21zZ3N0ciAiQ29tbWl0IG5vIGZhc3QtZm9yd2FyZCBubyB0aWVuZSBzZW50aWRvIGRlbnRybyBkZSB1biBoZWFkIHZhY8OtbyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSBuYWRhIHF1ZSBwb2RhbW9zIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQwMAorbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIlNvbG8gc2UgcHVlZGUgZnVzaW9uYXIgZXhhY3RhbWVudGUgdW4gY29tbWl0IGVuIHVuIGhlYWQgdmFjw61vIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ4MQorbXNnaWQgInJlZnVzaW5nIHRvIG1lcmdlIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgInJlaHVzYW5kbyBmdXNpb25hciBoaXN0b3JpYXMgbm8gcmVsYWNpb25hZGFzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ5MAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4iCittc2dzdHIgIllhIGVzdMOhIGFjdHVhbGl6YWRvLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgIkFjdHVhbGl6YW5kbyAlcy4uJXNcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iCittc2dzdHIgIkludGVudGFuZG8gZnVzacOzbiBlbiDDrW5kaWNlIHJlYWxtZW50ZSB0cml2aWFsLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIk5vcC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NzQKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIFllZWFoISIKK21zZ3N0ciAiWWEgZXN0w6EgYWN0dWFsaXphZG8uIMKhT2gsIHllYWFoaCEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTgwCittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICJObyBlcyBwb3NpYmxlIGhhY2VyIGZhc3QtZm9yd2FyZCwgYWJvcnRhbmRvLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDMgYnVpbHRpbi9tZXJnZS5jOjE2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIlJlYm9iaW5hbmRvIGVsIMOhcmJvbCBhIG9yaWdpbmFsLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICJJbnRlbnRhbmRvIGVzdHJhdGVnaWEgZGUgZnVzacOzbiAlcy4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiTmluZ3VuYSBlc3RyYXRlZ2lhIGRlIGZ1c2nDs24gbWFuZWrDsyBsYSBmdXNpw7NuLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAiRnVzaW9uYXIgY29uIGVzdHJhdGVnaWEgJXMgZmFsbMOzLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIKK21zZ3N0ciAiVXNhbmRvIGVsICVzIHBhcmEgcHJlcGFyYXIgcmVzb2x1Y2nDs24gYSBtYW5vLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisiRnVzacOzbiBhdXRvbcOhdGljYSBmdWUgYmllbjsgZGV0ZW5pZGEgYW50ZXMgZGVsIGNvbW1pdCBjb21vIHNlIHNvbGljaXTDs1xuIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMworbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSAtLW9jdG9wdXMgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSAtLW9jdG9wdXMgPGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM0Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzUKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8cmVmPiBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTUzCittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICJtb3N0cmFyIHRvZG9zIGxvcyBhbmNlc3Ryb3MgY29tdW5lcyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU1Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICJlbmNvbnRyYXIgYW5jZXN0cm9zIHBhcmEgdW5hIMO6bmljYSBmdXNpw7NuIGRlIG4tdsOtYXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NworbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICJsaXN0YXIgcmV2cyBubyBhbGNhbnphYmxlcyBkZXNkZSBvdHJvcyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU5Cittc2dpZCAiaXMgdGhlIGZpcnN0IG9uZSBhbmNlc3RvciBvZiB0aGUgb3RoZXI/IgorbXNnc3RyICLCv2VzIGVsIHByaW1lciBhbmNlc3RybyBkZWwgb3Rybz8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE2MQorbXNnaWQgImZpbmQgd2hlcmUgPGNvbW1pdD4gZm9ya2VkIGZyb20gcmVmbG9nIG9mIDxyZWY+IgorbXNnc3RyICJlbmNvbnRyYXIgZG9uZGUgPGNvbW1pdD4gZm9yasOzIGRlbCByZWZsb2cgZGUgPHJlZj4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjkKK21zZ2lkICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcHRpb25zPl0gWy1MIDxuYW1lMT4gWy1MIDxvcmlnPiBbLUwgPG5hbWUyPl1dXSA8ZmlsZTE+ICIKKyI8b3JpZy1maWxlPiA8ZmlsZTI+IgorbXNnc3RyICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcGNpb25lcz5dIFstTCA8bm9tYnJlMT4gWy1MIDxvcmlnZW4+IFstTCA8bm9tYnJlMj5dXV0gIgorIjxhcmNoaXZvMT4gPGFyY2hpdm8tb3JpZ2VuPiA8YXJjaGl2bzI+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNQorbXNnaWQgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIm1hbmRhciByZXN1bHRhZG9zIGEgc3RhbmRhcmQgb3V0cHV0IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNgorbXNnaWQgInVzZSBhIGRpZmYzIGJhc2VkIG1lcmdlIgorbXNnc3RyICJ1c2FyIHVuIGZ1c2nDs24gYmFzYWRhIGVuIGRpZmYzIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNworbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAicG9yIGNvbmZsaWN0b3MsIHVzYXIgbnVlc3RyYSB2ZXJzacOzbiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAicG9yIGNvbmZsaWN0b3MsIHVzYXIgbGEgdmVyc2nDs24gZGUgZWxsb3MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQxCittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIGEgdW5pb24gdmVyc2lvbiIKK21zZ3N0ciAicG9yIGNvbmZsaWN0b3MsIHVzYXIgdW5hIHZlcnNpw7NuIGRlIHVuacOzbiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAicG9yIGNvbmZsaWN0b3MsIHVzYXIgZWwgdGFtYcOxbyBkZSBlc3RlIG1hcmNhZG9yIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAibm8gYWR2ZXJ0aXIgc29icmUgY29uZmxpY3RvcyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDcKK21zZ2lkICJzZXQgbGFiZWxzIGZvciBmaWxlMS9vcmlnLWZpbGUvZmlsZTIiCittc2dzdHIgImNvbmZpZ3VyYXIgbGFiZWxzIHBhcmEgYXJjaGl2bzEvb3JpZy1hcmNoaXZvL2FyY2hpdm8yIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uICVzIgorbXNnc3RyICJvcGNpw7NuICVzIGRlc2Nvbm9jaWRhIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhbmFsaXphciBlbCBvYmpldG8gJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiBJZ25vcmluZyAlcy4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiBJZ25vcmluZyAlcy4iCittc2dzdHJbMF0gIm5vIHNlIHB1ZWRlIG1hbmVqYXIgbcOhcyBkZSAlZCBiYXNlLiBJZ25vcmFuZG8gJXMuIgorbXNnc3RyWzFdICJubyBzZSBwdWVkZSBtYW5lamFyIG3DoXMgZGUgJWQgYmFzZXMuIElnbm9yYW5kbyAlcy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NjUKK21zZ2lkICJub3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJubyBtYW5lamFuZG8gbmFkYSBkaXN0aW50byBhIGZ1c2lvbmVzIGRlIGRvcyBoZWFkcy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzQgYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSByZWYgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyByZXNvbHZlciByZWYgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXNcbiIKK21zZ3N0ciAiRnVzaW9uYW5kbyAlcyBjb24gJXNcbiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NgorbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU0Cittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgImlucHV0IGVzIHRlcm1pbmFkYSBjb24gTlVMIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NSBidWlsdGluL3dyaXRlLXRyZWUuYzoyNgorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAicGVybWl0aXIgb2JqZXRvcyBmYWx0YW50ZXMiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU2Cittc2dpZCAiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIgorbXNnc3RyICJwZXJtaXRpciBsYSBjcmVhY2nDs24gZGUgbcOhcyBkZSB1biDDoXJib2wiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjkKK21zZ2lkICIiCisiZ2l0IG11bHRpLXBhY2staW5kZXggWzxvcHRpb25zPl0gKHdyaXRlfHZlcmlmeXxleHBpcmV8cmVwYWNrIC0tYmF0Y2gtIgorInNpemU9PHNpemU+KSIKK21zZ3N0ciAiIgorImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8b3B0aW9ucz5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTx0YW1hw7FvPikiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI2Cittc2dpZCAib2JqZWN0IGRpcmVjdG9yeSBjb250YWluaW5nIHNldCBvZiBwYWNrZmlsZSBhbmQgcGFjay1pbmRleCBwYWlycyIKK21zZ3N0ciAib2JqZXRvIGRpcmVjdG9yaW8gY29udGVuaWVuZG8gY29uanVudG9zIGRlIHBhcmVzIHBhY2tmaWxlIHkgcGFjay1pbmRleCIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjkKK21zZ2lkICIiCisiZHVyaW5nIHJlcGFjaywgY29sbGVjdCBwYWNrLWZpbGVzIG9mIHNtYWxsZXIgc2l6ZSBpbnRvIGEgYmF0Y2ggdGhhdCBpcyAiCisibGFyZ2VyIHRoYW4gdGhpcyBzaXplIgorbXNnc3RyICIiCisiZHVyYW50ZSBlbCByZXBhY2ssIHJlY29sZWN0YXIgbG9zIHBhY2stZmlsZXMgZGUgdGFtYcOxbyBtZW5vciBlbiB1biBiYXRjaCBxdWUgIgorImVzIG3DoXMgZ3JhbmRlIHF1ZSBlc3RlIHRhbWHDsW8iCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjUwIGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NjcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgIm11Y2hvcyBhcmd1bWVudG9zIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo2MAorbXNnaWQgIi0tYmF0Y2gtc2l6ZSBvcHRpb24gaXMgb25seSBmb3IgJ3JlcGFjaycgc3ViY29tbWFuZCIKK21zZ3N0ciAib3BjacOzbiAtLWJhdGNoLXNpemUgZXMgc29sbyBwYXJhIGVsIHN1YmNvbWFuZG8gJ3JlcGFjayciCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAic3ViY29tYW5kbyBkZXNjb25vY2lkbzogJXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOAorbXNnaWQgImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICJnaXQgbXYgWzxvcGNpb25lcz5dIDxmdWVudGU+Li4uIDxkZXN0aW5vPiIKKworIzogYnVpbHRpbi9tdi5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBpcyBpbiBpbmRleCBhbmQgbm8gc3VibW9kdWxlPyIKK21zZ3N0ciAiwr9EaXJlY3RvcmlvICVzIGVzdMOhIGVuIGVsIMOtbmRpY2UgeSBubyBoYXkgc3VibcOzZHVsbz8iCisKKyM6IGJ1aWx0aW4vbXYuYzo4NQorbXNnaWQgIlBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisiUG9yIGZhdm9yIGFncmVnYSBlbCBzdGFnZSBkZSB0dXMgY2FtYmlvcyBhIC5naXRtb2R1bGVzIG8gcmVhbGl6YSB1biBzdGFzaCAiCisicGFyYSBwcm9jZWRlciIKKworIzogYnVpbHRpbi9tdi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICIlLipzIGVzdMOhIGVuIGVsIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjUKK21zZ2lkICJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgImZvcnphciBtb3Zlci9yZW5vbWJyYXIgaW5jbHVzbyBzaSBlbCBvYmpldGl2byBleGlzdGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjcKK21zZ2lkICJza2lwIG1vdmUvcmVuYW1lIGVycm9ycyIKK21zZ3N0ciAic2FsdGFyIGVycm9yZXMgZGUgbW92ZXIvcmVub21icmFyIgorCisjOiBidWlsdGluL212LmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICJkZXN0aW5vICclcycgbm8gZXMgdW4gZGlyZWN0b3JpbyIKKworIzogYnVpbHRpbi9tdi5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgIlJldmlzYW5kbyBjYW1iaW8gZGUgbm9tYnJlIGRlICclcycgYSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxODQKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICJtYWxhIGZ1ZW50ZSIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIm5vIHNlIHB1ZGUgbW92ZXIgdW4gZGlyZWN0b3JpbyBlbiBzw60gbWlzbW8iCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTAKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICJubyBzZSBwdWVkZSBtb3ZlciB1biBkaXJlY3RvcmlvIGRlbnRybyBkZSB1biBhcmNoaXZvIgorCisjOiBidWlsdGluL212LmM6MTk5Cittc2dpZCAic291cmNlIGRpcmVjdG9yeSBpcyBlbXB0eSIKK21zZ3N0ciAiZGlyZWN0b3JpbyBkZSBmdWVudGUgZXN0w6EgdmFjw61vIgorCisjOiBidWlsdGluL212LmM6MjI0Cittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAibm8gc2UgZW5jdWVudHJhIGJham8gY29udHJvbCBkZSB2ZXJzacOzbiIKKworIzogYnVpbHRpbi9tdi5jOjIyNworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAiZGVzdGlubyBleGlzdGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcndyaXRpbmcgJyVzJyIKK21zZ3N0ciAic29icmVzY3JpYmllbmRvICclcyciCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzgKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICJObyBzZSBwdWVkZSBzb2JyZXNjcmliaXIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDEKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgIm3Dumx0aXBsZXMgZnVlbnRlcyBwYXJhIGVsIG1pc21vIG9iamV0aXZvIgorCisjOiBidWlsdGluL212LmM6MjQzCittc2dpZCAiZGVzdGluYXRpb24gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJlbCBkaXJlY3RvcmlvIGRlIGRlc3Rpbm8gbm8gZXhpc3RlIgorCisjOiBidWlsdGluL212LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIlcywgZnVlbnRlPSVzLCBkZXN0aW5vPSVzIgorCisjOiBidWlsdGluL212LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIlJlbm9tYnJhbmRvICVzIGEgJXNcbiIKKworIzogYnVpbHRpbi9tdi5jOjI3NyBidWlsdGluL3JlbW90ZS5jOjc4MSBidWlsdGluL3JlcGFjay5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAicmVub21icmFuZG8gJyVzJyBmYWxsw7MiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9wY2lvbmVzPl0gPGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjYKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1hbGwiCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9wY2lvbmVzPl0gLS1hbGwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjcKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8b3BjaW9uZXM+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI0Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICJpbXByaW1pciBzw7NsbyBub21icmVzIChzaW4gU0hBLTEpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI1Cittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICJzw7NsbyB1c2FyIHRhZ3MgcGFyYSBub21icmFyIGNvbW1pdHMiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjcKK21zZ2lkICJvbmx5IHVzZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAic29sbyB1c2FyIHJlZnMgcXVlIGNvbmN1ZXJkZW4gY29uIDxwYXRyw7NuPiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUyOQorbXNnaWQgImlnbm9yZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiaWdub3JhciByZWZzIHF1ZSBjb25jdWVyZGVuIGNvbiA8cGF0csOzbj4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzEKK21zZ2lkICJsaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzIgorbXNnc3RyICJsaXN0YXIgdG9kb3MgbG9zIGNvbW1pdHMgYWxjYW56YWJsZXMgZGVzZGUgdG9kYXMgbGFzIHJlZmVyZW5jaWFzIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTMyCittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICJsZWVyIGRlc2RlIHN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTMzCittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIgorbXNnc3RyICJwZXJtaXRpciBpbXByaW1pciBub21icmVzIGB1bmRlZmluZWRgIChwcmVkZXRlcm1pbmFkbykiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzkKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAiZGVzcmVmZXJlbmNpYXIgdGFncyBlbiBsYSBlbnRyYWRhICh1c28gaW50ZXJubykiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcmVuY2lhLWRlLW5vdGFzPl0gW2xpc3QgWzxvYmpldG8+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+ICIKKyJ8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyZW5jaWEtZGUtbm90YXM+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tICIKKyI8bWVuc2FqZT4gfCAtRiA8YXJjaGl2bz4gfCAoLWMgfCAtQykgPG9iamV0bz5dIFs8b2JqZXRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXJlbmNpYS1kZS1ub3Rhcz5dIGNvcHkgWy1mXSA8b2JqZXRvLW9yaWdlbj4gPG9iamV0by0iCisiZGVzdGlubz4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICIKKyIoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcmVuY2lhLWRlLW5vdGFzPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPG1lbnNhamU+ICIKKyJ8IC1GIDxhcmNoaXZvPiB8ICgtYyB8IC1DKSA8b2JqZXRvPl0gWzxvYmpldG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyZW5jaWEtZGUtbm90YXM+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamV0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzMKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyZW5jaWEtZGUtbm90YXM+XSBzaG93IFs8b2JqZXRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXJlbmNpYS1kZSBub3Rhcz5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPGVzdHJhdGVnaWE+XSAiCisiPHJlZmVyZW5jaWEtZGUtbm90YXM+IgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyZW5jaWEtZGUtbm90YXM+XSByZW1vdmUgWzxvYmpldG8+Li4uXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcHJ1bmUgWy1uXSBbLXZdIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcmVuY2lhLWRlLW5vdGFzPl0gcHJ1bmUgWy1uXSBbLXZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzkKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcmVuY2lhLWRlLW5vdGFzPl0gZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0Cittc2dpZCAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgW2xpc3QgWzxvYmpldG8+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OQorbXNnaWQgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFkZCBbPG9wY2lvbmVzPl0gWzxvYmpldG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgWzxvcGNpb25lcz5dIDxvYmpldG8tb3JpZ2VuPiA8b2JqZXRvLWRlc3Rpbm8+IgorCisjOiBidWlsdGluL25vdGVzLmM6NTUKK21zZ2lkICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+XS4uLiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPG9iamV0by1vcmlnZW4+IDxvYmpldG8tZGVzdGlubz5dLi4uIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAKK21zZ2lkICJnaXQgbm90ZXMgYXBwZW5kIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhcHBlbmQgWzxvcGNpb25lcz5dIFs8b2JqZXRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NQorbXNnaWQgImdpdCBub3RlcyBlZGl0IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBlZGl0IFs8b2JqZXRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MAorbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBzaG93IFs8b2JqZXRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NQorbXNnaWQgImdpdCBub3RlcyBtZXJnZSBbPG9wdGlvbnM+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIFs8b3BjaW9uZXM+XSA8cmVmZXJlbmNpYS1kZS1ub3Rhcz4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc3Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgyCittc2dpZCAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZXRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NworbXNnaWQgImdpdCBub3RlcyBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHBydW5lIFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkyCittc2dpZCAiZ2l0IG5vdGVzIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6OTcKK21zZ2lkICJXcml0ZS9lZGl0IHRoZSBub3RlcyBmb3IgdGhlIGZvbGxvd2luZyBvYmplY3Q6IgorbXNnc3RyICJFc2NyaWJlL2VkaXRhIGxhcyBub3RhcyBwYXJhIGxvcyBzaWd1aWVudGVzIG9iamV0b3M6IgorCisjOiBidWlsdGluL25vdGVzLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJpbmNhcGF6IGRlIGluaWNpYXIgJ3Nob3cnIHBhcmEgZWwgb2JqZXRvICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnc2hvdycgb3V0cHV0IgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgc2FsaWRhIGRlICdzaG93JyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgImZhbGzDsyBsYSBmaW5hbGl6YWNpw7NuIGRlICdzaG93JyBwYXJhIGVsIG9iamV0byAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTk3Cittc2dpZCAicGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICJwb3IgZmF2b3Igc3VtaW5pc3RyYXIgbG9zIGNvbnRlbmlkb3MgZGUgbm90YSB1c2FuZG8gbGEgb3BjacOzbiAtbSBvIC1GIgorCisjOiBidWlsdGluL25vdGVzLmM6MjA2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICJpbmNhcGF6IGRlIGVzY3JpYmlyIGVsIG9iamV0byBkZSBub3RhIgorCisjOiBidWlsdGluL25vdGVzLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBub3RlIGNvbnRlbnRzIGhhdmUgYmVlbiBsZWZ0IGluICVzIgorbXNnc3RyICJsb3MgY29udGVuaWRvcyBkZSBub3RhIGhhbiBzaWRvIGRlamFkb3MgZW4gJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNDIgYnVpbHRpbi90YWcuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGFicmlyIG8gbGVlciAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYzIGJ1aWx0aW4vbm90ZXMuYzozMTMgYnVpbHRpbi9ub3Rlcy5jOjMxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjM4MyBidWlsdGluL25vdGVzLmM6NDM4IGJ1aWx0aW4vbm90ZXMuYzo1MjYKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzEgYnVpbHRpbi9ub3Rlcy5jOjYxMCBidWlsdGluL25vdGVzLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJmYWxsw7MgYWwgcmVzb2x2ZXIgJyVzJyBjb21vIHJlZiB2w6FsaWRhLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgImZhbGzDsyBhbCBsZWVyIG9iamV0byAnJXMnLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iCittc2dzdHIgIm5vIHNlIHB1ZWRlIGxlZXIgbGEgZGF0YSBkZSBsYSBub3RhIGRlIHVuIG9iamV0byBuby1ibG9iICclcycuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAibMOtbmVhIGRlIGVudHJhZGEgbWFsIGZvcm1hZGE6ICclcycuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgY29waWFyIG5vdGFzIGRlICclcycgYSAnJXMnIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGZpcnN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBnaXQKKyMuIG5vdGVzIGNvbW1hbmQ6ICdhZGQnLCAnbWVyZ2UnLCAncmVtb3ZlJywgZXRjLgorIy4KKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gJXMgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICJyZWNoYXphbmRvICVzIG5vdGFzIGVuICVzIChmdWVyYSBkZSByZWZzL25vdGVzLykiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNzYgYnVpbHRpbi9ub3Rlcy5jOjQzMSBidWlsdGluL25vdGVzLmM6NTA5CisjOiBidWlsdGluL25vdGVzLmM6NTIxIGJ1aWx0aW4vbm90ZXMuYzo1OTggYnVpbHRpbi9ub3Rlcy5jOjY2NQorIzogYnVpbHRpbi9ub3Rlcy5jOjgxNSBidWlsdGluL25vdGVzLmM6OTYzIGJ1aWx0aW4vbm90ZXMuYzo5ODUKK21zZ2lkICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorbXNnc3RyICJkZW1hc2lhZG9zIHBhcsOhbWV0cm9zIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzg5IGJ1aWx0aW4vbm90ZXMuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIKK21zZ3N0ciAibm8gc2UgZW5jb250cmFyb24gbm90YXMgcGFyYSBvYmpldG8gJXMuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEwIGJ1aWx0aW4vbm90ZXMuYzo1NzYKK21zZ2lkICJub3RlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIgorbXNnc3RyICJjb250ZW5pZG9zIGRlIGxhIG5vdGEgY29tbyBjYWRlbmEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTMgYnVpbHRpbi9ub3Rlcy5jOjU3OQorbXNnaWQgIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIgorbXNnc3RyICJjb250ZW5pZG9zIGRlIGxhIG5vdGEgZW4gdW4gYXJjaGl2byIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxNiBidWlsdGluL25vdGVzLmM6NTgyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICJyZXV0aWxpemFyIHkgZWRpdGFyIGVsIG9iamV0byBkZSBub3RhIGVzcGVjaWZpY2FkYSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxOSBidWlsdGluL25vdGVzLmM6NTg1Cittc2dpZCAicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICJyZXV0aWxpemFyIGVsIG9iamV0byBkZSBub3RhIGVzcGVjaWZpY2FkbyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyMiBidWlsdGluL25vdGVzLmM6NTg4Cittc2dpZCAiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIgorbXNnc3RyICJwZXJtaXRpciBhbG1hY2VuYXIgbm90YSB2YWPDrWEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MjMgYnVpbHRpbi9ub3Rlcy5jOjQ5NgorbXNnaWQgInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgInJlZW1wbGF6YXIgbm90YXMgZXhpc3RlbnRlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGFncmVnYXIgbm90YXMuIFNlIGVuY29udHLDsyBub3RhcyBleGlzdGVudGVzIHBhcmEgb2JqZXRvICVzLiBVc2UgIgorIictZicgcGFyYSBzb2JyZXNjcmliaXIgbGFzIG5vdGFzIGV4aXN0ZW50ZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjMgYnVpbHRpbi9ub3Rlcy5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIlNvYnJlc2NyaWJpZW5kbyBub3RhcyBleGlzdGVudGVzIHBhcmEgb2JqZXRvICVzXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NzUgYnVpbHRpbi9ub3Rlcy5jOjYzNyBidWlsdGluL25vdGVzLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIG5vdGUgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICJSZW1vdmllbmRvIG5vdGEgcGFyYSBvYmpldG8gJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5NworbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICJsZWVyIG9iamV0b3MgZGVzZGUgc3RkaW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTkKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAiY2FyZ2FyIGNvbmZpZ3VyYWNpw7NuIGRlIHJlZXNjcml0dXJhIHBhcmEgPGNvbWFuZG8+IChpbXBsaWNhIC0tc3RkaW4pIgorCisjOiBidWlsdGluL25vdGVzLmM6NTE3Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICJtdXkgcG9jb3MgcGFyw6FtZXRyb3MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgY29waWFyIG5vdGFzLiBTZSBlbmNvbnRyw7Mgbm90YXMgZXhpc3RlbnRlcyBwYXJhIGVsIG9iamV0byAlcy4gIgorIlVzZSAnLWYnIHBhcmEgc29icmVzY3JpYmlyIGxhcyBub3RlcyBleGlzdGVudGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICJmYWx0YW4gbm90YXMgZW4gbGEgZnVlbnRlIGRlbCBvYmpldG8gJXMuIE5vIHNlIHB1ZWRlIGNvcGlhci4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtbS8tRi8tYy8tQyBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGZvciB0aGUgJ2VkaXQnIHN1YmNvbW1hbmQuXG4iCisiUGxlYXNlIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW5zdGVhZC5cbiIKK21zZ3N0ciAiIgorIkxhcyBvcGNpb25lcyAtbS8tRi8tYy8tQyBoYW4gc2lkbyBkZXByZWNhZGFzIHBvciBlbCBzdWJjb21hbmRvICdlZGl0Jy5cbiIKKyJQb3IgZmF2b3IgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBlbiBjYW1iaW8uXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OTgKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICJmYWxsw7MgYWwgYm9ycmFyIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAwCittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICJmYWxsw7MgYWwgYm9ycmFyIHJlZiBOT1RFU19NRVJHRV9SRUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDIKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICdnaXQgbm90ZXMgbWVyZ2UnIHdvcmt0cmVlIgorbXNnc3RyICJubyBzZSBwdWRvIGVsaW1pbmFyIGVsIMOhcmJvbCBkZSB0cmFiYWpvICdnaXQgbm90ZXMgbWVyZ2UnIgorCisjOiBidWlsdGluL25vdGVzLmM6NzIyCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiCittc2dzdHIgImZhbGzDsyBhbCBsZWVyIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI0Cittc2dpZCAiY291bGQgbm90IGZpbmQgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iCittc2dzdHIgIm5vIHNlIHB1ZG8gZW5jb250cmFyIGNvbW1pdCBkZSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyNgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAibm8gc2UgcHVkbyBhbmFsaXphciBjb21taXQgZGUgTk9URVNfTUVSR0VfUEFSVElBTC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MzkKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgImZhbGzDsyBhbCByZXNvbHZlciBOT1RFU19NRVJHRV9SRUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NDIKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgbm90ZXMgbWVyZ2UiCittc2dzdHIgImZhbGzDsyBhbCBmaW5hbGl6YXIgbGFzIG5vdGFzIGRlIGZ1c2nDs24iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub3RlcyBtZXJnZSBzdHJhdGVneSAlcyIKK21zZ3N0ciAiZXN0cmF0ZWdpYSBkZSBmdXNpw7NuIGRlIG5vdGFzICVzIGRlc2Nvbm9jaWRhIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg0Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJPcGNpb25lcyBnZW5lcmFsZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODYKK21zZ2lkICJNZXJnZSBvcHRpb25zIgorbXNnc3RyICJPcGNpb25lcyBkZSBmdXNpw7NuIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg4Cittc2dpZCAiIgorInJlc29sdmUgbm90ZXMgY29uZmxpY3RzIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKK21zZ3N0ciAiIgorInJlc29sdmVyIGNvbmZsaWN0b3MgZGUgbm90YXMgdXNhbmRvIGxhIGVzdHJhdGVnaWEgZW50cmVnYWRhcyAobWFudWFsL291cnMvIgorInRoZWlycy91bmlvbi9jYXRfc29ydF91bmlxKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MAorbXNnaWQgIkNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIlJlYWxpemFuZG8gY29tbWl0IGEgbGFzIG5vdGFzIG5vIGZ1c2lvbmFkYXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTIKK21zZ2lkICJmaW5hbGl6ZSBub3RlcyBtZXJnZSBieSBjb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICIiCisiZmluYWxpemFyIGZ1c2nDs24gZGUgbm90YXMgcmVhbGl6YW5kbyB1biBjb21taXQgZGUgbGFzIG5vdGFzIG5vIGZ1c2lvbmFkYXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTQKK21zZ2lkICJBYm9ydGluZyBub3RlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICJBYm9ydGFuZG8gbm90YXMgZGUgcmVzb2x1Y2nDs24gZGUgZnVzacOzbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NgorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICJhYm9ydGFyIG5vdGFzIGRlIGZ1c2nDs24iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MDcKK21zZ2lkICJjYW5ub3QgbWl4IC0tY29tbWl0LCAtLWFib3J0IG9yIC1zLy0tc3RyYXRlZ3kiCittc2dzdHIgIm5vIHNlIHB1ZWRlbiBtZXpjbGFyIC0tY29tbWl0LCAtLWFib3J0IMOzIC1zLy0tc3RyYXRlZ3kiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTIKK21zZ2lkICJtdXN0IHNwZWNpZnkgYSBub3RlcyByZWYgdG8gbWVyZ2UiCittc2dzdHIgImRlYmUgZXNwZWNpZmljYXIgdW5hIHJlZiBkZSBub3RhcyBhIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL25vdGVzLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gLXMvLS1zdHJhdGVneTogJXMiCittc2dzdHIgIi0tc3RyYXRlZ3kvLXMgZGVzY29ub2NpZGE6ICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgImEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICJ1bmEgZnVzacOzbiBkZSBub3RhcyBlbiAlcyB5YSBlc3TDoSBlbiBwcm9ncmVzbyBlbiAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RvcmUgbGluayB0byBjdXJyZW50IG5vdGVzIHJlZiAoJXMpIgorbXNnc3RyICJmYWxsw7MgYWwgZ3VhcmRhciB1biBsaW5rIHBhcmEgZWwgcmVmIGRlIG5vdGFzIGFjdHVhbCAoJXMpIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdXRvbWF0aWMgbm90ZXMgbWVyZ2UgZmFpbGVkLiBGaXggY29uZmxpY3RzIGluICVzIGFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICIKKyInZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0Jywgb3IgYWJvcnQgdGhlIG1lcmdlIHdpdGggJ2dpdCBub3RlcyBtZXJnZSAtLSIKKyJhYm9ydCcuXG4iCittc2dzdHIgIiIKKyJGdXNpw7NuIGF1dG9tw6F0aWNhIGRlIG5vdGFzIGZhbGzDsy4gQXJyZWdsZSBjb25mbGljdG9zIGVuICVzIHkgcmVhbGljZSB1biAiCisiY29tbWl0IGNvbiBlbCByZXN1bHRhZG8gJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG8gYWJvcnRlIGxhIGZ1c2nDs24gY29uICIKKyInZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODk3IGJ1aWx0aW4vdGFnLmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJGYWxsw7MgYWwgcmVzb2x2ZXIgJyVzJyBjb21vIHVuYSByZWYgdsOhbGlkYS4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgIkVsIG9iamV0byAlcyBubyB0aWVuZSBub3Rhc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTEyCittc2dpZCAiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIgorbXNnc3RyICJpbnRlbnRhciBlbGltaW5hciB1bmEgbm90YSBubyBleGlzdGVudGUgbm8gZXMgdW4gZXJyb3IiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MTUKK21zZ2lkICJyZWFkIG9iamVjdCBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGVlciBub21icmVzIGRlIG9iamV0b3MgZGUgc3RhbmRhcmQgaW5wdXQiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTQgYnVpbHRpbi9wcnVuZS5jOjEzMCBidWlsdGluL3dvcmt0cmVlLmM6MTY0Cittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICJubyBlbGltaW5hciwgc29sbyBtb3N0cmFyIgorCisjOiBidWlsdGluL25vdGVzLmM6OTU1Cittc2dpZCAicmVwb3J0IHBydW5lZCBub3RlcyIKK21zZ3N0ciAicmVwb3J0YXIgbm90YXMgcmVjb3J0YWRhcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OAorbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAicmVmZXJlbmNpYS1kZS1ub3RhcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OQorbXNnaWQgInVzZSBub3RlcyBmcm9tIDxub3Rlcy1yZWY+IgorbXNnc3RyICJ1c2FyIG5vdGFzIGRlc2RlIDxyZWZlcmVuY2lhLWRlLW5vdGFzPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEwMzQgYnVpbHRpbi9zdGFzaC5jOjE2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAic3ViY29tYW5kbyBkZXNjb25vY2lkbzogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTIKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+Li4uXSBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcGNpb25lcz4uLi5dIFs8IDxsaXN0YS1kZS1yZWY+IHwgPCA8bGlzdGEtZGUtIgorIm9iamV0b3M+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1MworbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs8b3B0aW9ucz4uLi5dIDxiYXNlLW5hbWU+IFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9wY2lvbmVzPi4uLl0gPG5vbWJyZS1iYXNlPiBbPCA8bGlzdGEtZGUtcmVmcz4gfCA8IDxsaXN0YS0iCisiZGUtb2JqZXRvcz5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIgorbXNnc3RyICJtYWwgcGFxdWV0ZSBkZSBvYmpldG8gQ1JDIHBhcmEgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGFja2VkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgIm9iamV0byBlbXBhcXVldGFkbyBjb3JydXB0byBwYXJhICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgZGVsdGEgZGV0ZWN0ZWQgZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAiZGVsdGEgcmVjdXJzaXZvIGVuY29udHJhZG8gcGFyYSBvYmpldG8gJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9yZGVyZWQgJXUgb2JqZWN0cywgZXhwZWN0ZWQgJTxQUkl1MzI+IgorbXNnc3RyICIldSBvYmpldG9zIG9yZGVuYWRvcywgZXNwZXJhZG9zICU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5NzIKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIHBhY2tzIGFyZSBzcGxpdCBkdWUgdG8gcGFjay5wYWNrU2l6ZUxpbWl0IgorbXNnc3RyICIiCisiZGVzaGFiaWxpdGFuZG8gZXNjcml0dXJhIGJpdG1hcCwgcGFxdWV0ZXMgc29uIGRpdmlkaWRvcyBkZWJpZG8gYSBwYWNrLiIKKyJwYWNrU2l6ZUxpbWl0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk4NQorbXNnaWQgIldyaXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiRXNjcmliaWVuZG8gb2JqZXRvcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDQ2IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXMiCittc2dzdHIgImZhbGzDsyBhbCBpbmljaWFyICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvdGUgJTxQUkl1MzI+IG9iamVjdHMgd2hpbGUgZXhwZWN0aW5nICU8UFJJdTMyPiIKK21zZ3N0ciAiJTxQUkl1MzI+IG9iamV0b3MgZXNjcml0b3MgbWllbnRyYXMgc2UgZXNwZXJhYmFuICU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMjk3Cittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgIiIKKyJkZXNoYWJpbGl0YW5kbyBlc2NyaXR1cmEgYml0bWFwLCB5YSBxdWUgYWxndW5vcyBvYmpldG9zIG5vIGVzdMOhbiBzaWVuZG8gIgorImVtcGFxdWV0YWRvcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG92ZXJmbG93IGluIHBhY2sgZm9yICVzIgorbXNnc3RyICJvdmVyZmxvdyBkZSBvZmZzZXQgZW4gbGEgYmFzZSBkZSBkZWx0YSBlbiBwYXF1ZXRlIHBhcmEgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTczMworIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdXQgb2YgYm91bmQgZm9yICVzIgorbXNnc3RyICJvdXRib3VuZCBkZSBvZmZzZXQgZW4gbGEgYmFzZSBkZSBkZWx0YSBwYXJhICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwMDQKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICJDb250YW5kbyBvYmpldG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdCBoZWFkZXIgb2YgJXMiCittc2dzdHIgImluY2FwYXogZGUgYW5hbGl6YXIgaGVhZGVyIGRlbCBvYmpldG8gJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjIxOSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyMzUKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgIm9iamV0byAlcyBubyBwdWVkZSBzZXIgbGXDrWRvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyMjIgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpbmNvbnNpc3RlbnQgb2JqZWN0IGxlbmd0aCAoJTxQUkl1TUFYPiB2cyAlPFBSSXVNQVg+KSIKK21zZ3N0ciAiIgorIm9iamV0byAlcyBpbmNvbnNpc3RlbnRlIGNvbiBlbCBsYXJnbyBkZWwgb2JqZXRvICglPFBSSXVNQVg+IHZzICU8UFJJdU1BWD4pIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyNTkKK21zZ2lkICJzdWJvcHRpbWFsIHBhY2sgLSBvdXQgb2YgbWVtb3J5IgorbXNnc3RyICJzdWJvcHRpbWFsIHBhY2sgLSBmdWVyYSBkZSBtZW1vcmlhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsdGEgY29tcHJlc3Npb24gdXNpbmcgdXAgdG8gJWQgdGhyZWFkcyIKK21zZ3N0ciAiQ29tcHJlc2nDs24gZGVsdGEgdXNhbmRvIGhhc3RhICVkIGhpbG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhY2sgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0YWcgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZW1wYXF1ZXRhciBvYmpldG9zIGFsY2FuemFibGVzIGRlc2RlIHRhZyAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODAxCittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiQ29tcHJpbWllbmRvIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjgwNworbXNnaWQgImluY29uc2lzdGVuY3kgd2l0aCBkZWx0YSBjb3VudCIKK21zZ3N0ciAiaW5jb25zaXN0ZW5jaWEgY29uIGxhIGN1ZW50YSBkZSBkZWx0YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBlZGdlIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisic2UgZXNwc2VyYWJhIElEIGRlIG9iamV0byBhbCBib3JkZSwgc2Ugb2J0dXZvIGJhc3VyYTpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorInNlIGVzcGVyYWJhIElEIGRlIG9iamV0bywgc2Ugb2J0dXZvIGJhc3V0YTpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTkyCittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICJ2YWxvciBpbnbDoWxpZG8gcGFyYSAtLW1pc3NpbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA1MSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTkKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4IgorbXNnc3RyICJubyBzZSBwdWVkZSBhYnJpciDDrW5kaWNlIGRlIHBhcXVldGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0IGF0ICVzIGNvdWxkIG5vdCBiZSBleGFtaW5lZCIKK21zZ3N0ciAib2JqZXRvIHBlcmRpZG8gZW4gJXMgbm8gcHVkbyBzZXIgZXhhbWluYWRvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNjcKK21zZ2lkICJ1bmFibGUgdG8gZm9yY2UgbG9vc2Ugb2JqZWN0IgorbXNnc3RyICJpbmNhcGF6IGRlIGZvcnphciB1biBvYmpldG8gcGVyZGlkbyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJldiAnJXMnIgorbXNnc3RyICJubyBlcyB1bmEgcmV2ICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gJyVzJyIKK21zZ3N0ciAibWFsYSByZXZpc2nDs24gJyVzJyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg4Cittc2dpZCAidW5hYmxlIHRvIGFkZCByZWNlbnQgb2JqZWN0cyIKK21zZ3N0ciAiaW5jYXBheiBkZSBhw7FhZGlyIG9iamV0b3MgcmVjaWVudGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIKK21zZ3N0ciAidmVyc2nDs24gZGUgw61uZGljZSBubyBzb3BvcnRhZGEgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICJtYWxhIHZlcnNpw7NuIGRlbCDDrW5kaWNlICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4MworbXNnaWQgIjx2ZXJzaW9uPlssPG9mZnNldD5dIgorbXNnc3RyICI8dmVyc2nDs24+Wyw8b2Zmc2V0Pl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4NAorbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgIiIKKyJlc2NyaWJpciBlbCDDrW5kaWNlIGRlIHBhcXVldGUgZW4gbGEgdmVyc2nDs24gZGUgZm9ybWF0byBpZHggZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODcKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlIgorbXNnc3RyICJ0YW1hw7FvIG3DoXhpbW8gZGUgY2FkYSBwYXF1ZXRlIHJlc3VsdGFudGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4OQorbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAiaWdub3JhciBvYmpldG9zIHByZXN0YWRvcyBkZSBvdHJvcyBhbG1hY2VuZXMgZGUgb2JqZXRvcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzkxCittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJpZ25vcmFyIG9iamV0b3MgcGFxdWV0ZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzkzCittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgb2JqZWN0cyIKK21zZ3N0ciAibGltaXRhciB2ZW50YW5hIGRlIHBhcXVldGUgcG9yIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5NQorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgImxpbWl0YXIgdmVudGFuYSBkZSBwYXF1ZXRlIHBvciBtZW1vcmlhIGVuIGFkaWNpw7NuIGEgbMOtbWl0ZSBkZSBvYmpldG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTcKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAibG9uZ2l0dWQgbcOheGltYSBkZSBjYWRlbmEgZGVsdGEgcGVybWl0aWRhIGVuIGVsIHBhcXVldGUgcmVzdWx0YW50ZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk5Cittc2dpZCAicmV1c2UgZXhpc3RpbmcgZGVsdGFzIgorbXNnc3RyICJyZXVzYXIgZGVsdGFzIGV4aXN0ZW50ZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwMQorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgInJldXRpbGl6YXIgb2JqZXRvcyBleGlzdGVudGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDMKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgInVzYXIgb2JqZXRvcyBPRlNfREVMVEEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNQorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgInVzYXIgaGlsb3MgY3VhbmRvIHNlIGJ1c3F1ZSBwYXJhIG1lam9yZXMgY29uY29yZGFuY2lhcyBkZSBkZWx0YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA3Cittc2dpZCAiZG8gbm90IGNyZWF0ZSBhbiBlbXB0eSBwYWNrIG91dHB1dCIKK21zZ3N0ciAibm8gY3JlYXIgdW4gcGFxdWV0ZSByZXN1bHRhbnRlIHZhY8OtbyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA5Cittc2dpZCAicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGVlciBhcmd1bWVudG9zIGRlIHJldmlzacOzbiBkZSBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDExCittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgImxpbWl0YXIgbG9zIG9iamV0b3MgYSBhcXVlbGxvcyBxdWUgbm8gaGFuIHNpZG8gZW1wYXF1ZXRhZG9zIHRvZGF2w61hIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTQKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAiaW5jbHVpciBvYmpldG9zIGFsY2FuemFibGVzIHBvciBjdWFscXVpZXIgcmVmZXJlbmNpYSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDE3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICJpbmNsdWlyIG9iamV0b3MgcmVmZXJpZG9zIHBvciBlbnRyYWRhcyBkZSByZWZsb2ciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgImluY2x1aXIgb2JqZXRvcyByZWZlcmlkb3MgcG9yIGVsIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMworbXNnaWQgIm91dHB1dCBwYWNrIHRvIHN0ZG91dCIKK21zZ3N0ciAibW9zdHJhciBwYXF1ZXRlIGVuIHN0ZG91dCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI1Cittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICJpbmNsdWlyIG9iamV0b3MgdGFnIHF1ZSByZWZpZXJlbiBhIG9iamV0b3MgYSBzZXIgZW1wYXF1ZXRhZG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjcKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIm1hbnRlbmVyIG9iamV0b3MgaW5hbGNhbnphYmxlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI5Cittc2dpZCAicGFjayBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJlbXBhcXVldGFyIG9iamV0b3Mgc3VlbHRvcyBpbmFsY2FuemFibGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzEKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZGVzZW1wYXF1ZXRhciBvYmpldG9zIGluYWxjYW56YWJsZXMgbcOhcyBudWV2b3MgcXVlIDx0aWVtcG8+IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzQKK21zZ2lkICJ1c2UgdGhlIHNwYXJzZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIgorbXNnc3RyICJ1c2FyIGVsIGFsZ29yaXRtbyBzcGFyc2UgcmVhY2hhYmlsaXR5IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzYKK21zZ2lkICJjcmVhdGUgdGhpbiBwYWNrcyIKK21zZ3N0ciAiY3JlYXIgcGFxdWV0ZXMgZGVsZ2Fkb3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzOAorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICJjcmVhciBwYXF1ZXRlcyBhZGVjdWFkb3MgcGFyYSBmZXRjaGVzIHN1cGVyZmljaWFsZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0MAorbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgImlnbm9yYXIgcGFxdWV0ZXMgcXVlIHRpZW5lbiB1biBhcmNoaXZvIC5rZWVwIGFjb21wYcOxYW50ZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQyCittc2dpZCAiaWdub3JlIHRoaXMgcGFjayIKK21zZ3N0ciAiaWdub3JhciBlc3RlIHBhcXVldGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0NAorbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgIm5pdmVsIGRlIGNvbXByZXNpw7NuIGRlbCBwYXF1ZXRlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDYKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAibm8gb2N1bHRhciBjb21taXRzIHBvciBpbmplcnRvcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQ4Cittc2dpZCAidXNlIGEgYml0bWFwIGluZGV4IGlmIGF2YWlsYWJsZSB0byBzcGVlZCB1cCBjb3VudGluZyBvYmplY3RzIgorbXNnc3RyICIiCisidXNhciB1biDDrW5kaWNlIGJpdG1hcCBzaSBlc3TDoSBkaXNwb25pYmxlIHBhcmEgYWNlbGVyYXIgbGEgY3VlbnRhIGRlIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1MAorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgImVzY3JpYmlyIHVuIMOtbmRpY2UgZGUgYml0bWFwIGp1bnRvIGFsIMOtbmRpY2UgZGUgcGFxdWV0ZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDU0Cittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggaWYgcG9zc2libGUiCittc2dzdHIgImVzY3JpYmlyIHVuIMOtbmRpY2UgZGUgYml0bWFwIHNpIGVzIHBvc2libGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1OAorbXNnaWQgImhhbmRsaW5nIGZvciBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgIm1hbmVqbyBkZSBvYmpldG9zIHBlcmRpZG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NjEKK21zZ2lkICJkbyBub3QgcGFjayBvYmplY3RzIGluIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZW1wYXF1ZXRhciBvYmpldG9zIGVuIHBhY2tmaWxlcyBwcm9taXNvcmVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NjMKK21zZ2lkICJyZXNwZWN0IGlzbGFuZHMgZHVyaW5nIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICJyZXNwZXRhciBpc2xhcyBkdXJhbnRlIGxhIGNvbXByZXNpw7NuIGRlbHRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgY2hhaW4gZGVwdGggJWQgaXMgdG9vIGRlZXAsIGZvcmNpbmcgJWQiCittc2dzdHIgInByb2Z1bmRpZGFkIGRlIGNhZGVuYSBkZSBkZWx0YSAlZCBlcyBtdXkgcHJvZnVuZGEsIGZvcnphbmRvICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjay5kZWx0YUNhY2hlTGltaXQgaXMgdG9vIGhpZ2gsIGZvcmNpbmcgJWQiCittc2dzdHIgInBhY2suZGVsdGFDYWNoZUxpbWl0IGVzIG11eSBncmFuZGUsIGZvcnphbmRvICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NTEKK21zZ2lkICItLW1heC1wYWNrLXNpemUgY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYSBwYWNrIGZvciB0cmFuc2ZlciIKK21zZ3N0ciAiIgorIi0tbWF4LXBhY2stc2l6ZSBubyBwdWVkZSBzZXIgdXNhZG8gcGFyYSBjb25zdHJ1aXIgdW4gcGFxdWV0ZSBwYXJhICIKKyJ0cmFuc2ZlcmVuY2lhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NTMKK21zZ2lkICJtaW5pbXVtIHBhY2sgc2l6ZSBsaW1pdCBpcyAxIE1pQiIKK21zZ3N0ciAidGFtYcOxbyBtw61uaW1vIGRlbCBwYXF1ZXRlIGVzIDEgTWlCIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NTgKK21zZ2lkICItLXRoaW4gY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYW4gaW5kZXhhYmxlIHBhY2siCittc2dzdHIgIi0tdGhpbiBubyBwdWVkZSBzZXIgdXNhZG8gcGFyYSBjb25zdHJ1aXIgdW4gcGFxdWV0ZSBpbmRleGFibGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU2MQorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLS11bnBhY2stdW5yZWFjaGFibGUgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1rZWVwLXVucmVhY2hhYmxlIHkgLS11bnBhY2stdW5yZWFjaGFibGUgc29uIGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU2NworbXNnaWQgImNhbm5vdCB1c2UgLS1maWx0ZXIgd2l0aG91dCAtLXN0ZG91dCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgdXNhci0tZmlsdGVyIHNpbiAtLXN0ZG91dCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNjI3Cittc2dpZCAiRW51bWVyYXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiRW51bWVyYW5kbyBvYmpldG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvdGFsICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgcmV1c2VkICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgcGFjay0iCisicmV1c2VkICU8UFJJdTMyPiIKK21zZ3N0ciAiIgorIlRvdGFsICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgcmV1c2FkbyAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHBhY2stIgorInJldXNhZG8gJTxQUkl1MzI+IgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjgKK21zZ2lkICJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcGFjay1yZWZzIFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAiZW1wYXF1ZXRhciB0b2RvIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE3Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgInJlY29ydGFyIHJlZnMgcGVyZGlkb3MgKGRlZmF1bHQpIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjkKK21zZ2lkICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCittc2dzdHIgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo0MgorbXNnaWQgIlJlbW92aW5nIGR1cGxpY2F0ZSBvYmplY3RzIgorbXNnc3RyICJSZW1vdmllbmRvIG9iamV0b3MgZHVwbGljYWRvcyIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEyCittc2dpZCAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1wcm9ncmVzc10gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1wcm9ncmVzc10gWy0tZXhwaXJlIDx0aWVtcG8+XSBbLS1dIFs8aGVhZD4uLi5dIgorCisjOiBidWlsdGluL3BydW5lLmM6MTMxCittc2dpZCAicmVwb3J0IHBydW5lZCBvYmplY3RzIgorbXNnc3RyICJyZXBvcnRhciBvYmpldG9zIHJlY29ydGFkb3MiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZXhwaXJhciBvYmpldG9zIG3DoXMgdmllam9zIGEgPHRpZW1wbz4iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzYKK21zZ2lkICJsaW1pdCB0cmF2ZXJzYWwgdG8gb2JqZWN0cyBvdXRzaWRlIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAibGltaXRhciBlbCByZWNvcnJpZG8gYSBvYmpldG9zIGZ1ZXJhIGRlIGxvcyBwYXF1ZXRlcyBkZWwgcHJvbWlzb3IiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxNTAKK21zZ2lkICJjYW5ub3QgcHJ1bmUgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgIm5vIHNlIHB1ZWRlIHJlY29ydGFyIGVuIHVuIHJlcG9zaXRvcmlvIGRlIG9iamV0b3MtcHJlY2lvc29zIgorCisjOiBidWlsdGluL3B1bGwuYzo0NSBidWlsdGluL3B1bGwuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIlZhbG9yIGludsOhbGlkbyBwYXJhICVzOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NjcKK21zZ2lkICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBwdWxsIFs8b3BjaW9uZXM+XSBbPHJlcG9zaXRvcmlvPiBbPGVzcGVjaWZpY2FjacOzbi1kZS1yZWZlcmVuY2lhPi4uLl1dIgorCisjOiBidWlsdGluL3B1bGwuYzoxMjIKK21zZ2lkICJjb250cm9sIGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiY29udHJvbCBkZSBmZXRjaCByZWN1cnNpdm8gZW4gc3VibcOzZHVsb3MiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjEyNgorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBtZXJnaW5nIgorbXNnc3RyICJPcGNpb25lcyByZWxhY2lvbmFkYXMgYSBmdXNpw7NuIgorCisjOiBidWlsdGluL3B1bGwuYzoxMjkKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgImluY29ycG9yYXIgY2FtYmlvcyBwb3IgcmViYXNlIGVuIGx1Z2FyIGRlIGZ1c2nDs24iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE1NyBidWlsdGluL3JlYmFzZS5jOjQ3MSBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAicGVybWl0aXIgZmFzdC1mb3J3YXJkIgorCisjOiBidWlsdGluL3B1bGwuYzoxNjYKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIHJlYmFzZSIKK21zZ3N0ciAiZWplY3V0YXIgYXV0b23DoXRpY2FtZW50ZSBzdGFzaC9zdGFzaCBwb3AgYW50ZXMgeSBkZXNwdcOpcyBkZSByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE4MgorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyIKK21zZ3N0ciAiT3BjaW9uZXMgcmVsYWNpb25hZGFzIGEgZmV0Y2giCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE5MgorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giCittc2dzdHIgImZvcnphciBzb2JyZXNjcml0dXJhIGRlIGxhIHJhbWEgbG9jYWwiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIwMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIHB1bGxlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAibsO6bWVybyBkZSBzdWJtw7NkdWxvcyBxdWUgcmVhbGl6YW4gcHVsbCBlbiBwYXJhbGVsbyIKKworIzogYnVpbHRpbi9wdWxsLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICJWYWxvciBpbnbDoWxpZG8gcGFyYSBwdWxsLmZmOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI2Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0ICIKKyJmZXRjaGVkLiIKK21zZ3N0ciAiTm8gaGF5IGNhbmRpZGF0byBwYXJhIHJlYmFzYXIgZW50cmUgbGFzIHJlZnMgcXVlIGhhcyBiYWphZG8gY29uIGZldGNoLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI4Cittc2dpZCAiIgorIlRoZXJlIGFyZSBubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJObyBoYXkgY2FuZGlkYXRvcyBwYXJhIGZ1c2lvbmFyIGVudHJlIGxhcyByZWZzIHF1ZSBoYXMgYmFqYWRvIGNvbiBmZXRjaC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyOQorbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIiIKKyJHZW5lcmFsbWVudGUgZXN0byBzaWduaWZpY2EgcXVlIGhhcyBwcm92ZcOtZG8gdW4gd2lsZGNhcmQgZGUgcmVmc3BlYyBxdWUgbm8gIgorInRpZW5lXG4iCisiY29uY29yZGFuY2lhIGVuIGVsIGZpbmFsIHJlbW90by4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKyJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICIiCisiU2UgaGEgc29saWNpdGFkbyB1biBwdWxsIGRlbCByZW1vdG8gJyVzJywgcGVybyBubyBzZSBoYSBlc3BlY2lmaWNhZG9cbiIKKyJ1bmEgcmFtYS4gUG9ycXVlIGVzdGUgbm8gZXMgZWwgcmVtb3RvIGNvbmZpZ3VyYWRvIHBvciBkZWZhdWx0XG4iCisicGFyYSB0dSByYW1hIGFjdHVhbCwgdGllbmVzIHF1ZSBlc3BlY2lmaWNhciB1bmEgcmFtYSBlbiBsYSBsw61uZWEgZGUgY29tYW5kby4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNyBidWlsdGluL3JlYmFzZS5jOjE0MDkgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3MworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgIk5vIHRlIGVuY3VlbnRyYXMgYWN0dWFsbWVudGUgZW4gbGEgcmFtYS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOSBidWlsdGluL3B1bGwuYzo0NTQgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIlBvciBmYXZvciBlc3BlY2lmaWNhIGEgcXXDqSByYW1hIHF1aWVyZXMgcmViYXNhci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MSBidWlsdGluL3B1bGwuYzo0NTYgZ2l0LXBhcnNlLXJlbW90ZS5zaDo4MgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKK21zZ3N0ciAiUG9yIGZhdm9yIGVzcGVjaWZpY2EgYSBxdcOpIHJhbWEgcXVpZXJlcyBmdXNpb25hci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MiBidWlsdGluL3B1bGwuYzo0NTcKK21zZ2lkICJTZWUgZ2l0LXB1bGwoMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICJWZXIgZ2l0LXB1bGwoMSkgcGFyYSBkZXRhbGxlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NCBidWlsdGluL3B1bGwuYzo0NTAgYnVpbHRpbi9wdWxsLmM6NDU5CisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NAorbXNnaWQgIjxyZW1vdGU+IgorbXNnc3RyICI8cmVtb3RvPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ0IGJ1aWx0aW4vcHVsbC5jOjQ1OSBidWlsdGluL3B1bGwuYzo0NjQKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6NjUKK21zZ2lkICI8YnJhbmNoPiIKK21zZ3N0ciAiPHJhbWE+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NTIgYnVpbHRpbi9yZWJhc2UuYzoxNDA3IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzUKK21zZ2lkICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTm8gaGF5IGluZm9ybWFjacOzbiBkZSByYXN0cmVvIHBhcmEgbGEgcmFtYSBhY3R1YWwuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NjEgZ2l0LXBhcnNlLXJlbW90ZS5zaDo5NQorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDoiCittc2dzdHIgIiIKKyJTaSBkZXNlYXMgY29uZmlndXJhciBlbCByYXN0cmVvIGRlIGluZm9ybWFjacOzbiBwYXJhIGVzdGEgcmFtYSwgcHVlZGVzICIKKyJoYWNlcmxvIGNvbjoiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIlR1IGNvbmZpZ3VyYWNpw7NuIGVzcGVjaWZpY2EgZnVzaW9uYXIgY29uIGxhIHJlZiAnJXMnXG4iCisiZGUgdHUgcmVtb3RvLCBwZXJvIG5vIHNlIHB1ZG8gaGFjZXIgZmV0Y2ggYSBlc2EgcmVmLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgY29tbWl0ICVzIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGFjY2VkZXIgYWwgY29tbWl0ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo4NTcKK21zZ2lkICJpZ25vcmluZyAtLXZlcmlmeS1zaWduYXR1cmVzIGZvciByZWJhc2UiCittc2dzdHIgImlnbm9yYW5kbyAtLXZlcmlmeS1zaWduYXR1cmVzIHBhcmEgcmViYXNlIgorCisjOiBidWlsdGluL3B1bGwuYzo5MTIKK21zZ2lkICItLVtuby1dYXV0b3N0YXNoIG9wdGlvbiBpcyBvbmx5IHZhbGlkIHdpdGggLS1yZWJhc2UuIgorbXNnc3RyICJMYSBvcGNpw7NuIC0tW25vLV1hdXRvc3Rhc2ggc8OzbG8gZXMgdsOhbGlkYSBjb24gLS1yZWJhc2UuIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICJBY3R1YWxpemFuZG8gdW5hIHJhbWEgbm8gbmF0YSBjb24gY2FtYmlvcyBhZ3JlZ2Fkb3MgYWwgw61uZGljZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyNAorbXNnaWQgInB1bGwgd2l0aCByZWJhc2UiCittc2dzdHIgInB1bGwgY29uIHJlYmFzZSIKKworIzogYnVpbHRpbi9wdWxsLmM6OTI1Cittc2dpZCAicGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAicG9yIGZhdm9yIHJlYWxpemEgdW4gY29tbWl0IG8gdW4gc3Rhc2ggY29uIGVsbG9zLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorImZldGNoIGFjdHVhbGl6w7MgZWwgaGVhZCBkZSBsYSByYW1hIGFjdHVhbC5cbiIKKyJyZWFsaXphbmRvIGZhc3QtZm9yd2FyZCBhbCDDoXJib2wgZGUgdHJhYmFqb1xuIgorImRlc2RlIGNvbW1pdCAlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIm91dHB1dCwgcnVuXG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisidG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJObyBzZSBwdWVkZSByZWFsaXphciBmYXN0LWZvcndhcmQgZW4gdHUgw6FyYm9sIGRlIHRyYWJham8uXG4iCisiVHJhcyBhc2VndXJhcnNlIHF1ZSBoYSBndWFyZGFkbyB0b2RvIGxvIHByZWNpYWRvIGRlIGxhIHNhbGlkYSBkZVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyIsZWplY3V0ZVxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInBhcmEgcmVjdXBlcmFyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTcxCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIGZ1c2lvbmFyIG3Dumx0aXBsZXMgcmFtYXMgZW4gdW4gaGVhZCB2YWPDrW8uIgorCisjOiBidWlsdGluL3B1bGwuYzo5NzUKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIgorbXNnc3RyICJObyBzZSBwdWVkZSByZWJhc2FyIGVuIG3Dumx0aXBsZXMgcmFtYXMuIgorCisjOiBidWlsdGluL3B1bGwuYzo5ODIKK21zZ2lkICJjYW5ub3QgcmViYXNlIHdpdGggbG9jYWxseSByZWNvcmRlZCBzdWJtb2R1bGUgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZWRlIHJlYmFzYXIgY29uIG1vZGlmaWNhY2lvbmVzIGRlIHN1Ym3Ds2R1bG9zIGdyYWJhZGFzIGxvY2FsbWVudGUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE5Cittc2dpZCAiZ2l0IHB1c2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgcHVzaCBbPG9wY2lvbmVzPl0gWzxyZXBvc2l0b3Jpbz4gWzxlc3BlY2lmaWNhY2lvbmVzLWRlLXJlZmVyZW5jaWE+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjExMgorbXNnaWQgInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIKK21zZ3N0ciAidGFxdWlncmFmw61hIGRlIHRhZyBzaW4gPHRhZz4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyMgorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICItLWRlbGV0ZSBzb2xvIGFjZXB0YSBjb21vIG9iamV0aXZvcyBub21icmVzIGRlIHJlZiBwbGFub3MiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE2OAorbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKyJcbiIKKyJQYXJhIGVsZWdpciBzaSBsYSBvcGNpw7NuIGVzIHBlcm1hbmVudGUsIG1pcmEgcHVzaC5kZWZhdWx0IGVuICdnaXQgaGVscCAiCisiY29uZmlnJy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGRvZXMgbm90IG1hdGNoXG4iCisidGhlIG5hbWUgb2YgeW91ciBjdXJyZW50IGJyYW5jaC4gIFRvIHB1c2ggdG8gdGhlIHVwc3RyZWFtIGJyYW5jaFxuIgorIm9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiVG8gcHVzaCB0byB0aGUgYnJhbmNoIG9mIHRoZSBzYW1lIG5hbWUgb24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkxhIHJhbWEgdXBzdHJlYW0gZGUgdHUgcmFtYSBhY3R1YWwgbm8gY29uY3VlcmRhXG4iCisiY29uIGVsIG5vbWJyZSBkZSB0dSByYW1hIGFjdHVhbC4gUGFyYSBoYWNlciB1biBwdXNoIGEgbGEgcmFtYSB1cHN0cmVhbVxuIgorImVuIGVsIHJlbW90bywgZWplY3V0YVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiUGFyYSBoYWNlciB1biBwdXNoIGEgbGEgcmFtYSBkZWwgbWlzbW8gbm9tYnJlIGVuIGVsIHJlbW90bywgZWplY3V0YVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCittc2dzdHIgIiIKKyJBY3R1YWxtZW50ZSBubyBlc3TDoXMgZW4gdW5hIHJhbWEuXG4iCisiUGFyYSBoYWNlciB1biBwdXNoIGEgbGEgaGlzdG9yaWEgcXVlIGxsZXZhIGFsIGVzdGFkbyBhY3R1YWxcbiIKKyIoSEVBRCBkZXNhY29wbGFkbyksIHVzZVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggJXMgSEVBRDo8bm9tYnJlLWRlLXJhbWEtcmVtb3RhPlxuIgorCisjOiBidWlsdGluL3B1c2guYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgIiIKKyJMYSByYW1hIGFjdHVhbCAlcyBubyB0aWVuZSB1bmEgcmFtYSB1cHN0cmVhbS5cbiIKKyJQYXJhIHJlYWxpemFyIHVuIHB1c2ggZGUgbGEgcmFtYSBhY3R1YWwgeSBjb25maWd1cmFyIGVsIHJlbW90byBjb21vICIKKyJ1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBtdWx0aXBsZSB1cHN0cmVhbSBicmFuY2hlcywgcmVmdXNpbmcgdG8gcHVzaC4iCittc2dzdHIgIkxhIHJhbWEgYWN0dWFsICVzIHRpZW5lIG3Dumx0aXBsZXMgcmFtYXMgdXBzdHJlYW0sIHJlY2hhemFuZG8gZWwgcHVzaC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisiRXN0w6FzIGhhY2llbmRvIHVuIHB1c2ggYWwgcmVtb3RvICclcycsIGVsIGN1YWwgbm8gZXMgZWwgdXBzdHJlYW0gZGVcbiIKKyJsYSByYW1hIGFjdHVhbCAnJXMnLCBzaW4gZGVjaXJtZSBxdcOpIHBvbmVyIGVuIGVsIHB1c2hcbiIKKyJwYXJhIGFjdHVhbGl6YXIgZW4gcXXDqSByYW1hIGRlIHJlbW90by4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3MAorbXNnaWQgIiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisiTm8gc2UgZXNwZWNpZmljw7MgbmluZ8O6biByZWZzcGVjcyBwYXJhIGhhY2VyIHB1c2gsIHkgcHVzaC5kZWZhdWx0IGVzIFwibmFkYVwiLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjc3Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKyJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBJbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuXG4iCisiJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiQWN0dWFsaXphY2lvbmVzIGZ1ZXJvbiByZWNoYXphZGFzIHBvcnF1ZSBsYSBwdW50YSBkZSB0dSByYW1hIGFjdHVhbCBlc3TDoVxuIgorImRldHLDoXMgZGUgc3UgY29udHJhcGFydGUgcmVtb3RhLiBJbnRlZ3JhIGxvcyBjYW1iaW9zIHJlbW90b3MgKGVzIGRlY2lyXG4iCisiJ2dpdCBwdWxsIC4uLicpIGFudGVzIGRlIGhhY2VyIHB1c2ggZGUgbnVldm8uXG4iCisiTWlyYSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBlbiAnZ2l0IHB1c2ggLS1oZWxwJyBwYXJhIG3DoXMgZGV0YWxsZXMuIgorCisjOiBidWlsdGluL3B1c2guYzoyODMKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJBY3R1YWxpemFjaW9uZXMgZnVlcm9uIHJlY2hhemFkYXMgcG9ycXVlIHVuYSBwdW50YSBkZSByYW1hIGVuIGVsIHB1c2ggZXN0w6EgXG4iCisiZGV0csOhcyBkZSBzdSBjb250cmFwYXJ0ZSByZW1vdGEuIFZlcmlmaXF1ZSBlc3RhIHJhbWEgZSBpbnRlZ3JlIGxvcyBjYW1iaW9zICIKKyJyZW1vdG9zXG4iCisiKGVqZW0uICdnaXQgcHVsbCAuLi4nKSBhbnRlcyBkZSB2b2x2ZXIgYSBoYWNlciBwdXNoLlxuIgorIlZlYSBsYXMgJ05vdGVzIGFib3V0IGZhc3QtZm9yd2FyZHMnIGVuICdnaXQgcHVzaCAtLWhlbHAnIHBhcmEgbcOhcyBkZXRhbGxlcy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4OQorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgcmVtb3RlIGNvbnRhaW5zIHdvcmsgdGhhdCB5b3UgZG9cbiIKKyJub3QgaGF2ZSBsb2NhbGx5LiBUaGlzIGlzIHVzdWFsbHkgY2F1c2VkIGJ5IGFub3RoZXIgcmVwb3NpdG9yeSBwdXNoaW5nXG4iCisidG8gdGhlIHNhbWUgcmVmLiBZb3UgbWF5IHdhbnQgdG8gZmlyc3QgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuLCAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJBY3R1YWxpemFjaW9uZXMgZnVlcm9uIHJlY2hhemFkYXMgcG9ycXVlIGVsIHJlbW90byBjb250aWVuZSB0cmFiYWpvIHF1ZVxuIgorIm5vIGV4aXN0ZSBsb2NhbG1lbnRlLiBFc3RvIGVzIGNhdXNhZG8gdXN1YWxtZW50ZSBwb3Igb3RybyByZXBvc2l0b3JpbyBcbiIKKyJyZWFsaXphbmRvIHB1c2ggYSBsYSBtaXNtYSByZWYuIFF1aXrDoXMgcXVpZXJhIGludGVncmFyIHByaW1lcm8gbG9zIGNhbWJpb3NcbiIKKyJyZW1vdG9zIChlai4gJ2dpdCBwdWxsIC4uLicpIGFudGVzIGRlIHZvbHZlciBhIGhhY2VyIHB1c2guXG4iCisiVmVhICdOb3RlcyBhYm91dCBmYXN0LWZvcndhcmRzMCBlbiAnZ2l0IHB1c2ggLS1oZWxwJyBwYXJhIGRldGFsbGVzLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk2Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAiIgorIkFjdHVhbGl6YWNpb25lcyBmdWVyb24gcmVjaGF6YWRhcyBwb3JxdWUgZWwgdGFnIHlhIGV4aXN0ZSBlbiBlbCByZW1vdG8uIgorCisjOiBidWlsdGluL3B1c2guYzoyOTkKK21zZ2lkICIiCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGFjdHVhbGl6YXIgdW4gcmVmIHJlbW90byBxdWUgYXB1bnRhIGEgdW4gb2JqZXRvIG5vLWNvbW1pdCxcbiIKKyJvIGFjdHVhbGl6YXIgdW4gcmVmIHJlbW90byBwYXJhIGhhY2VyIHF1ZSAgYXB1bnRlIGEgdW4gb2JqZXRvIG5vLWNvbW1pdCxcbiIKKyJzaW4gdXNhciBsYSBvcGNpw7NuICctLWZvcmNlJy5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgdG8gJXNcbiIKK21zZ3N0ciAiSGFjaWVuZG8gcHVzaCBhICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGVsIHB1c2ggZGUgYWxndW5hcyByZWZlcmVuY2lhcyBhICclcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MgorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgInJlcG9zaXRvcmlvIgorCisjOiBidWlsdGluL3B1c2guYzo1NDMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjQKK21zZ2lkICJwdXNoIGFsbCByZWZzIgorbXNnc3RyICJyZWFsaXphciBwdXNoIGEgdG9kYXMgbGFzIHJlZnMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NCBidWlsdGluL3NlbmQtcGFjay5jOjE2NgorbXNnaWQgIm1pcnJvciBhbGwgcmVmcyIKK21zZ3N0ciAicmVhbGl6YXIgbWlycm9yIGEgdG9kYXMgbGFzIHJlZnMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NgorbXNnaWQgImRlbGV0ZSByZWZzIgorbXNnc3RyICJib3JyYXIgcmVmcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ3Cittc2dpZCAicHVzaCB0YWdzIChjYW4ndCBiZSB1c2VkIHdpdGggLS1hbGwgb3IgLS1taXJyb3IpIgorbXNnc3RyICJyZWFsaXphciBwdXNoIGEgdGFncyAobm8gcHVlZGUgc2VyIHVzYWRvIGNvbiAtLWFsbCBvIC0tbWlycm9yKSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY3Cittc2dpZCAiZm9yY2UgdXBkYXRlcyIKK21zZ3N0ciAiZm9yemFyIGFjdHVhbGl6YWNpb25lcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgxCittc2dpZCAiPHJlZm5hbWU+OjxleHBlY3Q+IgorbXNnc3RyICI8cmVmbmFtZT46PGV4cGVjdD4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MyBidWlsdGluL3NlbmQtcGFjay5jOjE4MgorbXNnaWQgInJlcXVpcmUgb2xkIHZhbHVlIG9mIHJlZiB0byBiZSBhdCB0aGlzIHZhbHVlIgorbXNnc3RyICJyZXF1aWVyZSBoYWJlciB2YWxvciB2aWVqbyBkZSByZWYgZW4gZXN0ZSB2YWxvciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU2Cittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJjb250cm9sYXIgcHVzaCByZWN1cnNpdm8gZGUgc3VibcOzZHVsb3MiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OCBidWlsdGluL3NlbmQtcGFjay5jOjE3NQorbXNnaWQgInVzZSB0aGluIHBhY2siCittc2dzdHIgInVzYXIgZW1wYXF1ZXRhZG8gZGVsZ2FkbyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU5IGJ1aWx0aW4vcHVzaC5jOjU2MCBidWlsdGluL3NlbmQtcGFjay5jOjE2MQorIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjIKK21zZ2lkICJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIKK21zZ3N0ciAicmVjaWJpciBwcm9ncmFtYSBkZSBwYXF1ZXRlIgorCisjOiBidWlsdGluL3B1c2guYzo1NjEKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL3N0YXR1cyIKK21zZ3N0ciAiY29uZmlndXJhciB1cHN0cmVhbSBwYXJhIGdpdCBwdWxsbC9zdGF0dXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NAorbXNnaWQgInBydW5lIGxvY2FsbHkgcmVtb3ZlZCByZWZzIgorbXNnc3RyICJyZWNvcnRhbmRvIHJlZnMgZWxpbWluYWRhcyBsb2NhbG1lbnRlIgorCisjOiBidWlsdGluL3B1c2guYzo1NjYKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAiaGFjZXIgdW4gYnlwYXNzIGFsIGhvb2sgcHJlLXB1c2giCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NworbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAicmVhbGl6YXIgcHVzaCBkZSB0YWdzIGZhbHRhbnRlcyBwZXJvIHJlbGV2YW50ZXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MCBidWlsdGluL3NlbmQtcGFjay5jOjE2OQorbXNnaWQgIkdQRyBzaWduIHRoZSBwdXNoIgorbXNnc3RyICJGaXJtYXIgY29uIEdQRyBlbCBwdXNoIgorCisjOiBidWlsdGluL3B1c2guYzo1NzIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzYKK21zZ2lkICJyZXF1ZXN0IGF0b21pYyB0cmFuc2FjdGlvbiBvbiByZW1vdGUgc2lkZSIKK21zZ3N0ciAic29saWNpdGFyIHRyYW5zYWNjacOzbiBhdMOzbWljYSBlbiBlbCBsYWRvIHJlbW90byIKKworIzogYnVpbHRpbi9wdXNoLmM6NTkwCittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIi0tZGVsZXRlIGVzIGluY29tcGF0aWJsZSBjb24gLS1hbGwsIC0tbWlycm9yIHkgLS10YWdzIgorCisjOiBidWlsdGluL3B1c2guYzo1OTIKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiLS1kZWxldGUgbm8gdGllbmUgc2VudGlkbyBzaW4gbmluZ3VuYSByZWZlcmVuY2lhIgorCisjOiBidWlsdGluL3B1c2guYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAibWFsIHJlcG9zaXRvcmlvICclcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMworbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisiTm8gc2UgaGEgY29uZmlndXJhZG8gdW4gZGVzdGlubyBwYXJhIGVsIHB1c2guXG4iCisiUHVlZGVzIG8gZXNwZWNpZmljYXIgdW5hIFVSTCBkZXNkZSBsYSBsw61uZWEgZGUgY29tYW5kb3MgbyBjb25maWd1cmFyIHVuICIKKyJyZXBvc2l0b3JpbyByZW1vdG8gdXNhbmRvXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxub21icmU+IDx1cmw+XG4iCisiXG4iCisieSBsdWVnbyBoYWNpZW5kbyBwdXNoIGFsIG5vbWJyZSBkZWwgcmVtb3RvXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxub21icmU+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYyOAorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgeSAtLXRhZ3Mgc29uIGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzMAorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tYWxsIG5vIHB1ZWRlIHNlciBjb21iaW5hZGEgY29uIHJlZnNwZWNzIgorCisjOiBidWlsdGluL3B1c2guYzo2MzQKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbWlycm9yIHkgLS10YWdzIHNvbiBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3B1c2guYzo2MzYKK21zZ2lkICItLW1pcnJvciBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLW1pcnJvciBubyBwdWVkZSBzZXIgY29tYmluYWRvIGNvbiByZWZzcGVjcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM5Cittc2dpZCAiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIHkgLS1taXJyb3Igc29uIGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjY0MworbXNnaWQgInB1c2ggb3B0aW9ucyBtdXN0IG5vdCBoYXZlIG5ldyBsaW5lIGNoYXJhY3RlcnMiCittc2dzdHIgIm9wY2lvbmVzIGRlIHB1c2ggbm8gcHVlZGVuIHRlbmVyIGNhcmFjdGVyZXMgZGUgbMOtbmVhIG51ZXZhIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo4Cittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPG9sZC1iYXNlPi4uPG9sZC10aXA+IDxuZXctYmFzZT4uLjxuZXctdGlwPiIKK21zZ3N0ciAiIgorImdpdCByYW5nZS1kaWZmIFs8b3BjaW9uZXM+XSA8YmFzZS12aWVqYT4uLjxwdW50YS12aWVqYT4gPGJhc2UtbnVldmE+Li48cHVudGEtIgorIm51ZXZhPiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OQorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtdGlwPi4uLjxuZXctdGlwPiIKK21zZ3N0ciAiZ2l0IHJhbmdlLWRpZmYgWzxvcGNpb25lcz5dIDxwdW50YS12aWVqYT4uLi48cHVudGEtbnVldmE+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoxMAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxiYXNlPiA8b2xkLXRpcD4gPG5ldy10aXA+IgorbXNnc3RyICJnaXQgcmFuZ2UtZGlmZiBbPG9wY2lvbmVzPl0gPGJhc2U+IDxwdW50YS12aWVqYT4gPHB1bnRhLW51ZXZhPiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjIKK21zZ2lkICJQZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIgorbXNnc3RyICJQb3JjZW50YWplIHBvciBlbCBjdWFsIGxhIGNyZWFjacOzbiBlcyBwZXNhZGEiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI0Cittc2dpZCAidXNlIHNpbXBsZSBkaWZmIGNvbG9ycyIKK21zZ3N0ciAidXNhciBjb2xvcmVzIHNpbXBsZXMgZGUgZGlmZiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjYKK21zZ2lkICJub3RlcyIKK21zZ3N0ciAibm90YXMiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAicGFzc2VkIHRvICdnaXQgbG9nJyIKK21zZ3N0ciAicGFzYWRvIGEgJ2dpdCBsb2cnIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo1MCBidWlsdGluL3JhbmdlLWRpZmYuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyAuLiBpbiByYW5nZTogJyVzJyIKK21zZ3N0ciAibm8gLi4gZW4gcmFuZ286ICclcyciCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjY0Cittc2dpZCAic2luZ2xlIGFyZyBmb3JtYXQgbXVzdCBiZSBzeW1tZXRyaWMgcmFuZ2UiCittc2dzdHIgImFyZ3VtZW50byDDum5pY28gZGUgZm9ybWF0byBkZWJlIHNlciB1biByYW5nbyBzaW3DqXRyaWNvIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo3OQorbXNnaWQgIm5lZWQgdHdvIGNvbW1pdCByYW5nZXMiCittc2dzdHIgInNlIG5lY2VzaXRhbiBkb3MgcmFuZ29zIGRlIGNvbW1pdHMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6NDEKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLSIKKyJwcmVmaXg9PHByZWZpam8+KSBbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tIgorInNwYXJzZS1jaGVja291dF0gWy0taW5kZXgtb3V0cHV0PTxhcmNoaXZvPl0gKC0tZW1wdHkgfCA8w6FyYm9sLWlzbW8xPiBbPMOhcmJvbC0iCisiaXNtbzI+IFs8w6FyYm9sLWlzbW8zPl1dKSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjQKK21zZ2lkICJ3cml0ZSByZXN1bHRpbmcgaW5kZXggdG8gPGZpbGU+IgorbXNnc3RyICJlc2NyaWJpciDDrW5kaWNlIHJlc3VsdGFudGUgZW4gPGFyY2hpdm8+IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICJzb2xvIHZhY2lhciBlbCDDrW5kaWNlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyOQorbXNnaWQgIk1lcmdpbmciCittc2dzdHIgIkZ1c2lvbmFuZG8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMxCittc2dpZCAicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIKK21zZ3N0ciAicmVhbGl6YXIgdW4gbWVyZ2UgZW4gYWRpY2nDs24gYSB1bmEgbGVjdHVyYSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzMKK21zZ2lkICIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiCittc2dzdHIgImZ1c2nDs24gZGUgMy12w61hcyBzaSBubyBzZSByZXF1aWVyZSBuaW5ndW5hIGZ1c2nDs24gYSBuaXZlbCBkZSBhcmNoaXZvIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgIjMtd2F5IG1lcmdlIGluIHByZXNlbmNlIG9mIGFkZHMgYW5kIHJlbW92ZXMiCittc2dzdHIgImZ1c2nDs24gZW4gMy12w61hcyBlbiBwcmVzZW5jaWEgZGUgYWRpY2lvbmVzIHkgcmVtb2Npb25lcyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzcKK21zZ2lkICJzYW1lIGFzIC1tLCBidXQgZGlzY2FyZCB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJpZ3VhbCBxdWUgLW0sIHBlcm8gZGVzY2FydGEgZW50cmFkYXMgc2luIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOAorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiPHN1YmRpcmVjdG9yaW8+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzkKK21zZ2lkICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAibGVhIGVsIMOhcmJvbCBlbiBlbCDDrW5kaWNlIGJham8gPHN1YmRpcmVjdG9yaW8+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDIKK21zZ2lkICJ1cGRhdGUgd29ya2luZyB0cmVlIHdpdGggbWVyZ2UgcmVzdWx0IgorbXNnc3RyICJhY3R1YWxpemEgZWwgw6FyYm9sIGRlIHRyYWJham8gY29uIGVsIHJlc3VsdGFkbyBkZSBsYSBmdXNpw7NuIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiZ2l0aWdub3JlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAicGVybWl0aXIgc29icmVzY3JpdHVyYSBkZSBhcmNoaXZvcyBleHBsw61jaXRhbWVudGUgaWdub3JhZG9zIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OAorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAibm8gcmV2aXNhciBlbCDDoXJib2wgZGUgdHJhYmFqbyB0cmFzIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OQorbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAibm8gYWN0dWFsaXphciBlbCDDrW5kaWNlIG8gZWwgw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTUxCittc2dpZCAic2tpcCBhcHBseWluZyBzcGFyc2UgY2hlY2tvdXQgZmlsdGVyIgorbXNnc3RyICJzYWx0YXIgYXBsaWNhZG8gZGUgZmlsdHJvIGRlIHNwYXJzZSBjaGVja291dCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTMKK21zZ2lkICJkZWJ1ZyB1bnBhY2stdHJlZXMiCittc2dzdHIgImRlYnVnIGRlIMOhcmJvbGVzLWRlc2VtcGFjYWRvcyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTcKK21zZ2lkICJzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcyIKK21zZ3N0ciAic3VwcmltaXIgbWVuc2FqZXMgZGUgZmVlZGJhY2siCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTg4Cittc2dpZCAiWW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIk5lY2VzaXRhcyByZXNvbHZlciB0dSDDrW5kaWNlIGFjdHVhbCBwcmltZXJvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMyCittc2dpZCAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT4gfCAtLWtlZXAtYmFzZV0gIgorIls8dXBzdHJlYW0+IFs8YnJhbmNoPl1dIgorbXNnc3RyICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcGNpb25lc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT4gfCAtLWtlZXAtYmFzZV0gIgorIls8dXBzdHJlYW0+IFs8YnJhbmNoPl1dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM0Cittc2dpZCAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dIC0tcm9vdCBbPGJyYW5jaD5dIgorbXNnc3RyICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcGNpb25lc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dIC0tcm9vdFs8cmFtYT5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2Cittc2dpZCAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorbXNnc3RyICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc1IGJ1aWx0aW4vcmViYXNlLmM6MTk5IGJ1aWx0aW4vcmViYXNlLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAibGlzdGEgZGUgcGVuZGllbnRlcyBpbnV0aWxpemFibGU6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGNyZWFyIGFyY2hpdm8gdGVtcG9yYWwgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6Mjk4Cittc2dpZCAiY291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIm5vIHNlIHB1ZG8gbWFyY2FyIGNvbW8gaW50ZXJhY3Rpdm8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzUyCittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIHRvZG8gbGlzdCIKK21zZ3N0ciAibm8gc2UgcHVkbyBnZW5lcmFyIGxpc3RhIGRlIHBlbmRpZW50ZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzkxCittc2dpZCAiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iCittc2dzdHIgInVuIGNvbW1pdCBiYXNlIHRpZW5lIHF1ZSBzZXIgcHJvdmlzdG8gY29uIC0tdXBzdHJlYW0gbyAtLW9udG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDYxCittc2dpZCAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzQgYnVpbHRpbi9yZWJhc2UuYzoxNTUwCittc2dpZCAiKERFUFJFQ0FURUQpIGtlZXAgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAiKERFUFJFQ0FETykgbWFudGVuZXIgY29tbWl0cyB2YWPDrW9zIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3OCBidWlsdGluL3JldmVydC5jOjEyOAorbXNnaWQgImFsbG93IGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAicGVybWl0aXIgY29tbWl0cyBjb24gbWVuc2FqZXMgdmFjw61vcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODAKK21zZ2lkICJyZWJhc2UgbWVyZ2UgY29tbWl0cyIKK21zZ3N0ciAicmViYXNhbmRvIGNvbW1pdHMgZGUgZnVzacOzbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODIKK21zZ2lkICJrZWVwIG9yaWdpbmFsIGJyYW5jaCBwb2ludHMgb2YgY291c2lucyIKK21zZ3N0ciAibWFudGVuZXIgcHVudG9zIG9yaWdpbmFsZXMgZGUgbGEgcmFtYSBkZSBzdXMgcHJpbW9zIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NAorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgIm1vdmVyIGNvbW1pdHMgcXVlIGNvbWllbnphbiBjb24gc3F1YXNoIS9maXh1cCEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg1Cittc2dpZCAic2lnbiBjb21taXRzIgorbXNnc3RyICJmaXJtYXIgY29tbWl0cyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODcgYnVpbHRpbi9yZWJhc2UuYzoxNDkwCittc2dpZCAiZGlzcGxheSBhIGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAibW9zdHJhciB1biBkaWZmc3RhdCBkZSBsbyBxdWUgY2FtYmnDsyBlbiB1cHN0cmVhbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODkKK21zZ2lkICJjb250aW51ZSByZWJhc2UiCittc2dzdHIgImNvbnRpbnVhciByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkxCittc2dpZCAic2tpcCBjb21taXQiCittc2dzdHIgInNhbHRhciBjb21taXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkyCittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJlZGl0YXIgbGEgbGlzdGEgZGUgcGVuZGllbnRlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTQKK21zZ2lkICJzaG93IHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICJtb3N0cmFyIGVsIHBhcmNoZSBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk3Cittc2dpZCAic2hvcnRlbiBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgImlkcyBkZSBjb21taXRzIGNvcnRvcyBlbiBsYSBsaXN0YSBkZSBwZW5kaWVudGVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5OQorbXNnaWQgImV4cGFuZCBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgImV4cGFuZGlyIGlkcyBkZSBjb21taXRzIGVuIGxhIGxpc3RhIGRlIHBlbmRpZW50ZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAxCittc2dpZCAiY2hlY2sgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAicmV2aXNhciBsYSBsaXN0YSBkZSBwZW5kaWVudGVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMworbXNnaWQgInJlYXJyYW5nZSBmaXh1cC9zcXVhc2ggbGluZXMiCittc2dzdHIgInJlb3JnYW5pemFyIGzDrW5lYXMgZml4dXAvc3F1YXNoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwNQorbXNnaWQgImluc2VydCBleGVjIGNvbW1hbmRzIGluIHRvZG8gbGlzdCIKK21zZ3N0ciAiaW5zZXJ0YXIgY29tYW5kbyBleGVjIGVuIGxhIGxpc3RhIGRlIHBlbmRpZW50ZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA2Cittc2dpZCAib250byIKK21zZ3N0ciAiaGFjaWEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA5Cittc2dpZCAicmVzdHJpY3QtcmV2aXNpb24iCittc2dzdHIgInJlc3RyaWN0LXJldmlzaW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwOQorbXNnaWQgInJlc3RyaWN0IHJldmlzaW9uIgorbXNnc3RyICJyZXN0cmluZ2lyIHJldmlzaW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxMQorbXNnaWQgInNxdWFzaC1vbnRvIgorbXNnc3RyICJzcXVhc2gtb250byIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTIKK21zZ2lkICJzcXVhc2ggb250byIKK21zZ3N0ciAic3F1YXNoIGhhY2lhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNAorbXNnaWQgInRoZSB1cHN0cmVhbSBjb21taXQiCittc2dzdHIgImVsIGNvbW1pdCBkZSB1cHN0cmVhbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJoZWFkLW5hbWUiCittc2dzdHIgImhlYWQtbmFtZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJoZWFkIG5hbWUiCittc2dzdHIgIm5vbWJyZSBkZSBoZWFkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMQorbXNnaWQgInJlYmFzZSBzdHJhdGVneSIKK21zZ3N0ciAiZXN0cmF0ZWdpYSBkZSByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIyCittc2dpZCAic3RyYXRlZ3ktb3B0cyIKK21zZ3N0ciAic3RyYXRlZ3ktb3B0cyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjMKK21zZ2lkICJzdHJhdGVneSBvcHRpb25zIgorbXNnc3RyICJvcGNpb25lcyBkZSBlc3RyYXRlZ2lhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNAorbXNnaWQgInN3aXRjaC10byIKK21zZ3N0ciAiY2FtYmlhciBhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNQorbXNnaWQgInRoZSBicmFuY2ggb3IgY29tbWl0IHRvIGNoZWNrb3V0IgorbXNnc3RyICJsYSByYW1hIG8gY29tbWl0IHBhcmEgaGFjZXIgY2hlY2tvdXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI2Cittc2dpZCAib250by1uYW1lIgorbXNnc3RyICJoYWNpYS1ub21icmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI2Cittc2dpZCAib250byBuYW1lIgorbXNnc3RyICJoYWNpYSBub21icmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI3Cittc2dpZCAiY21kIgorbXNnc3RyICJjbWQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI3Cittc2dpZCAidGhlIGNvbW1hbmQgdG8gcnVuIgorbXNnc3RyICJlbCBjb21hbmRvIHBhcmEgZWplY3V0YXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTMwIGJ1aWx0aW4vcmViYXNlLmM6MTU4NAorbXNnaWQgImF1dG9tYXRpY2FsbHkgcmUtc2NoZWR1bGUgYW55IGBleGVjYCB0aGF0IGZhaWxzIgorbXNnc3RyICJyZXByb2dyYW1hciBhdXRvbWF0aWNhbWVudGUgY3VhbHF1aWVyIGBleGVjYCBxdWUgZmFsbGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTQ2Cittc2dpZCAiLS1bbm8tXXJlYmFzZS1jb3VzaW5zIGhhcyBubyBlZmZlY3Qgd2l0aG91dCAtLXJlYmFzZS1tZXJnZXMiCittc2dzdHIgIi0tW25vLV1yZWJhc2UtY291c2lucyBubyB0aWVuZSBlZmVjdG8gc2luIC0tcmViYXNlLW1lcmdlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICIlcyByZXF1aWVyZSB1biByZWJhc2UgaW50ZXJhY3Rpdm8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgJ29udG8nOiAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGNvbnNlZ3VpciAnb250byc6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjI3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3JpZy1oZWFkOiAnJXMnIgorbXNnc3RyICJvcmlnLWhlYWQgaW52w6FsaWRvOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBpbnZhbGlkIGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlOiAnJXMnIgorbXNnc3RyICJpZ25vcmFuZG8gaW52w6FsaWRvIGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjcyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJObyBzZSBwdWRvIGxlZXIgJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICVzIgorbXNnc3RyICJObyBzZSBwdWVkZSBndWFyZGFyICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjg1MworbXNnaWQgImNvdWxkIG5vdCBkZXRlcm1pbmUgSEVBRCByZXZpc2lvbiIKK21zZ3N0ciAibm8gc2UgcHVkbyBkZXRlcm1pbmFyIHJldmlzacOzbiBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjk3NiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEKK21zZ2lkICIiCisiUmVzb2x2ZSBhbGwgY29uZmxpY3RzIG1hbnVhbGx5LCBtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgd2l0aFxuIgorIlwiZ2l0IGFkZC9ybSA8Y29uZmxpY3RlZF9maWxlcz5cIiwgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJZb3UgY2FuIGluc3RlYWQgc2tpcCB0aGlzIGNvbW1pdDogcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIi5cbiIKKyJUbyBhYm9ydCBhbmQgZ2V0IGJhY2sgdG8gdGhlIHN0YXRlIGJlZm9yZSBcImdpdCByZWJhc2VcIiwgcnVuIFwiZ2l0IHJlYmFzZSAtLSIKKyJhYm9ydFwiLiIKK21zZ3N0ciAiIgorIlJlc3VlbHZhIHRvZG9zIGxvcyBjb25mbGljdG9zIG1hbnVhbG1lbnRlIHlhIHNlYSBjb24gXG4iCisiXCJnaXQgYWRkL3JtIDxhcmNoaXZvX2NvbmZsaWN0aXZvPlwiLCBsdWVnbyBlamVjdXRlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorIlwiLlxuIgorIlNpIHByZWZpZXJlcyBzYWx0YXIgZXN0ZSBwYXJjaGUsIGVqZWN1dGEgXCJnaXQgcmViYXNlIC0tc2tpcFwiIC5cbiIKKyJQYXJhIGFib3J0YXIgeSByZWdyZXNhciBhbCBlc3RhZG8gcHJldmlvIGFsIFwiZ2l0IHJlYmFzZVwiLCBlamVjdXRhIFwiZ2l0ICIKKyJyZWJhc2UgLS1hYm9ydFwiLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJnaXQgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgcHJlcGFyaW5nIHRoZSBwYXRjaGVzIHRvIHJlcGxheVxuIgorInRoZXNlIHJldmlzaW9uczpcbiIKKyJcbiIKKyIgICAgJXNcbiIKKyJcbiIKKyJBcyBhIHJlc3VsdCwgZ2l0IGNhbm5vdCByZWJhc2UgdGhlbS4iCittc2dzdHIgIiIKKyJcbiIKKyJnaXQgZW5jb250csOzIHVuIGVycm9yIG1pZW50cmFzIHByZXBhcmFiYSBsb3MgcGFyY2hlcyBwYXJhIHJlcGxpY2FyXG4iCisiZXNhcyByZXZpc2lvbmVzOlxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIkNvbW8gcmVzdWx0YWRvLCBnaXQgbm8gcHVlZGUgaGFjZXIgcmViYXNlIGNvbiBlbGxvcy4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5yZWNvZ25pemVkIGVtcHR5IHR5cGUgJyVzJzsgdmFsaWQgdmFsdWVzIGFyZSBcImRyb3BcIiwgXCJrZWVwXCIsIGFuZCBcImFzayIKKyJcIi4iCittc2dzdHIgIiIKKyJ0aXBvICclcycgdmFjw61vIHkgZGVzY29ub2NpZG87IHZhbG9yZXMgdsOhbGlkb3Mgc29uIFwiZHJvcFwiLCBcImtlZXBcIiwgeSAiCisiXCJhc2tcIi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXNcbiIKKyJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuXG4iCisiU2VlIGdpdC1yZWJhc2UoMSkgZm9yIGRldGFpbHMuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxicmFuY2g+J1xuIgorIlxuIgorbXNnc3RyICIiCisiJXNcbiIKKyJQb3IgZmF2b3IgZXNwZWNpZmljYSBjb250cmEgcXXDqSByYW1hIGRlc2VhcyBoYWNlciBlbCByZWJhc2UuXG4iCisiVmVyIGdpdC1yZWJhc2UoMSkgcGFyYSBkZXRhbGxlcy5cbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAnPHJhbWE+J1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJTaSBxdWllcmVzIGNvbmZpZ3VyYXIgaW5mb3JtYWNpw7NuIGRlIHJhc3RyZW8gcHVlZGVzIGhhY2VybG8gY29uOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxyYW1hPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDcKK21zZ2lkICJleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICJjb21hbmRvcyBleGVjIG5vIHB1ZWRlbiBjb250ZW5lciBuZXdsaW5lcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDUxCittc2dpZCAiZW1wdHkgZXhlYyBjb21tYW5kIgorbXNnc3RyICJjb21hbmRvIGV4ZWMgdmFjw61vIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODEKK21zZ2lkICJyZWJhc2Ugb250byBnaXZlbiBicmFuY2ggaW5zdGVhZCBvZiB1cHN0cmVhbSIKK21zZ3N0ciAiaGFjaWVuZG8gcmViYXNlIGhhY2lhIHJhbWEgZGFkYSBlbiBsdWdhciBkZSB1cHN0cmVhbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDgzCittc2dpZCAidXNlIHRoZSBtZXJnZS1iYXNlIG9mIHVwc3RyZWFtIGFuZCBicmFuY2ggYXMgdGhlIGN1cnJlbnQgYmFzZSIKK21zZ3N0ciAidXNhciBsYSBiYXNlIGRlIGZ1c2nDs24gZGUgdXBzdHJlYW0geSBsYSByYW1hIGNvbW8gYmFzZSBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4NQorbXNnaWQgImFsbG93IHByZS1yZWJhc2UgaG9vayB0byBydW4iCittc2dzdHIgInBlcm1pdGlyIGVqZWN1dGFyIGhvb2sgcHJlLXJlYmFzZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg3Cittc2dpZCAiYmUgcXVpZXQuIGltcGxpZXMgLS1uby1zdGF0IgorbXNnc3RyICJzZXIgc2lsZW5jaW9zbyBpbXBsaWNhIC0tbm8tc3RhdCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDkzCittc2dpZCAiZG8gbm90IHNob3cgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICJubyBtb3N0cmFyIHVuIGRpZmZzdGF0IGRlIGxvIHF1ZSBjYW1iacOzIGVuIHVwc3RyZWFtIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTYKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5OiBsaW5lIHRvIGVhY2ggY29tbWl0IgorbXNnc3RyICJhZ3JlZ2FyIHVuYSBsw61uZWEgXCJGaXJtYWRvLXBvclwiIGFsIG1lbnNhamUgZGUgY2FkYSBjb21taXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5OCBidWlsdGluL3JlYmFzZS5jOjE1MDIgYnVpbHRpbi9yZWJhc2UuYzoxNTA0Cittc2dpZCAicGFzc2VkIHRvICdnaXQgYW0nIgorbXNnc3RyICJwYXNhZG8gYSAnZ2l0IGFtJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTA2IGJ1aWx0aW4vcmViYXNlLmM6MTUwOAorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFwcGx5JyIKK21zZ3N0ciAicGFzYWRvIGEgJ2dpdC1hcHBseSciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxMCBidWlsdGluL3JlYmFzZS5jOjE1MTMKK21zZ2lkICJjaGVycnktcGljayBhbGwgY29tbWl0cywgZXZlbiBpZiB1bmNoYW5nZWQiCittc2dzdHIgImNoZXJyeS1waWNrIHRvZG9zIGxvcyBjb21taXRzLCBpbmNsdXNvIHNpIG5vIGhhbiBjYW1iaWFkbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTE1Cittc2dpZCAiY29udGludWUiCittc2dzdHIgImNvbnRpbnVhciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTE4Cittc2dpZCAic2tpcCBjdXJyZW50IHBhdGNoIGFuZCBjb250aW51ZSIKK21zZ3N0ciAic2FsdGFyIGVsIHBhcmNoZSB5IGNvbnRpbnVhciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTIwCittc2dpZCAiYWJvcnQgYW5kIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIgorbXNnc3RyICJhYm9ydGEgeSByZXZpc2EgbGEgcmFtYSBvcmlnaW5hbCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTIzCittc2dpZCAiYWJvcnQgYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcyIKK21zZ3N0ciAiYWJvcnRhIHBlcm8gbWFudGllbmUgSEVBRCBkb25kZSBlc3TDoSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTI0Cittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IGR1cmluZyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UiCittc2dzdHIgImVkaXRhciBsYSBsaXN0YSBkZSBwZW5kaWVudGVzIGR1cmFudGUgZWwgcmViYXNlIGludGVyYWN0aXZvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjcKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBmaWxlIGJlaW5nIGFwcGxpZWQgb3IgbWVyZ2VkIgorbXNnc3RyICJtdWVzdHJhIGVsIGFyY2hpdm8gcGFyY2hlIHNpZW5kbyBhcGxpY2FkbyBvIGZ1c2lvbmFkbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTMwCittc2dpZCAidXNlIGFwcGx5IHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICJ1c2FyIGVzdHJhdGVnaWFzIGRlIGFwcGx5IHBhcmEgZWwgcmViYXNlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzQKK21zZ2lkICJ1c2UgbWVyZ2luZyBzdHJhdGVnaWVzIHRvIHJlYmFzZSIKK21zZ3N0ciAidXNhciBlc3RyYXRlZ2lhcyBkZSBmdXNpw7NuIHBhcmEgZWwgcmViYXNlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzgKK21zZ2lkICJsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbGlzdCBvZiBjb21taXRzIHRvIHJlYmFzZSIKK21zZ3N0ciAicGVybWl0aXIgYWwgdXN1YXJpbyBlZGl0YXIgbGEgbGlzdGEgZGUgY29tbWl0cyBwYXJhIHJlYmFzYXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU0MgorbXNnaWQgIihERVBSRUNBVEVEKSB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbSIKK21zZ3N0ciAiKERFUFJFQ0FETykgaW50ZW50YXIgcmVjcmVhciBtZXJnZXMgZW4gbHVnYXIgZGUgaWdub3JhcmxvcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTQ3Cittc2dpZCAiaG93IHRvIGhhbmRsZSBjb21taXRzIHRoYXQgYmVjb21lIGVtcHR5IgorbXNnc3RyICJjb21vIG1hbmVqYXIgY29tbWl0cyBxdWUgc2UgdnVlbHZlbiB2YWPDrW9zIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NTQKK21zZ2lkICJtb3ZlIGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHNxdWFzaCEvZml4dXAhIHVuZGVyIC1pIgorbXNnc3RyICJtb3ZlciBjb21taXRzIHF1ZSBjb21pZW56YW4gY29uIHNxdWFzaCEvZml4dXAhIGJham8gLWkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2MAorbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIiCittc2dzdHIgImVqZWN1dGFyIGF1dG9tw6F0aWNhbWVudGUgc3Rhc2gvc3Rhc2ggcG9wIGFudGVzIHkgZGVzcHXDqXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2MgorbXNnaWQgImFkZCBleGVjIGxpbmVzIGFmdGVyIGVhY2ggY29tbWl0IG9mIHRoZSBlZGl0YWJsZSBsaXN0IgorbXNnc3RyICJhZ3JlZ2FyIGzDrW5lYXMgZXhlYyB0cmFzIGNhZGEgYWNvbW1pdCBkZSBsYSBsaXN0YSBlZGl0YWJsZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTY2Cittc2dpZCAiYWxsb3cgcmViYXNpbmcgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICJwZXJtaXRpciByZWJhc2UgY29tbWl0cyBjb24gbWVuc2FqZXMgdmFjw61vcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTcwCittc2dpZCAidHJ5IHRvIHJlYmFzZSBtZXJnZXMgaW5zdGVhZCBvZiBza2lwcGluZyB0aGVtIgorbXNnc3RyICJpbnRlbnRhciBmdXNpb25lcyBwb3IgcmViYXNlIGVuIGx1Z2FyIGRlIHNhbHRhcmxhcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTczCittc2dpZCAidXNlICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcgdG8gcmVmaW5lIHVwc3RyZWFtIgorbXNnc3RyICJ1c2UgJ21lcmdlLWJhc2UgLS1mb3JrLXBvaW50JyBwYXJhIHJlZmluYXIgdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3NQorbXNnaWQgInVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInVzYXIgbGEgZXN0cmF0ZWdpYSBkZSBtZXJnZSBkYWRhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzcgYnVpbHRpbi9yZXZlcnQuYzoxMTUKK21zZ2lkICJvcHRpb24iCittc2dzdHIgIm9wY2nDs24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3OAorbXNnaWQgInBhc3MgdGhlIGFyZ3VtZW50IHRocm91Z2ggdG8gdGhlIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJwYXNhciBlbCBhcmd1bWVudG8gcGFyYSBsYSBlc3RyYXRlZ2lhIGRlIGZ1c2nDs24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU4MQorbXNnaWQgInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiCittc2dzdHIgImhhY2VyIHJlYmFzZSBhIHRvZG9zIGxvcyBjb21taXRzIGFsY2FuemFibGVzIGhhc3RhIGxhIHJhw616KHJhw61jZXMpIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1OTgKK21zZ2lkICIiCisidGhlIHJlYmFzZS51c2VCdWlsdGluIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCFcbiIKKyJTZWUgaXRzIGVudHJ5IGluICdnaXQgaGVscCBjb25maWcnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorImVsIHNvcG9ydGUgcGFyYSByZWJhc2UudXNlQnVpbHRpbiBoYSBzaWRvIGVsaW1pbmFkbyFcbiIKKyJWZWEgc3UgZW50cmFkYSBlbiAnZ2l0IGhlbHAgY29uZmlnJyBwYXJhIGRldGFsbGVzLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjA0Cittc2dpZCAiSXQgbG9va3MgbGlrZSAnZ2l0IGFtJyBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIlBhcmVjZSBxdWUgJ2dpdCBhbScgZXN0w6EgZW4gcHJvZ3Jlc28uIE5vIHNlIHB1ZWRlIHJlYmFzYXIuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NDUKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyBpcyBkZXByZWNhdGVkLiBVc2UgLS1yZWJhc2UtbWVyZ2VzIGluc3RlYWQuIgorbXNnc3RyICIiCisiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyBlc3TDoSBkZXByZWNhZG8uIFVzZSAtLXJlYmFzZS1tZXJnZXMgZW4gc3UgbHVnYXIuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTAKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tb250byciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNvbWJpbmFyICctLWtlZXAtYmFzZScgY29uICctLW9udG8nIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTIKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tcm9vdCciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNvbWJpbmFyICctLWtlZXAtYmFzZScgY29uICctLXJvb3QnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTYKK21zZ2lkICJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IgorbXNnc3RyICLCv05vIGhheSByZWJhc2UgZW4gcHJvZ3Jlc28/IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NjAKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIiIKKyJMYSBhY2Npw7NuIC0tZWRpdC10b2RvIHPDs2xvIHB1ZWRlIHNlciB1c2FkYSBhbCByZWJhc2FyIGludGVyYWN0aXZhbWVudGUuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2ODMKK21zZ2lkICJDYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJObyBzZSBwdWVkZSBsZWVyIGVsIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY5NQorbXNnaWQgIiIKKyJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKyJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKK21zZ3N0ciAiIgorIlRpZW5lcyBxdWUgZWRpdGFyIHRvZG9zIGxvcyBjb25mbGljdG9zIGRlIGZ1c2nDs24geSBsdWVnb1xuIgorIm1hcmNhcmxvcyBjb21vIHJlc3VlbHRvcyB1c2FuZG8gZ2l0IGFkZCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzE0Cittc2dpZCAiY291bGQgbm90IGRpc2NhcmQgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBkZXNjYXJ0YXIgbG9zIGNhbWJpb3MgZGVsIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1vdmUgYmFjayB0byAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgcmVncmVzYXIgYSAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAlcyBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JXNcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQlc1xuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuXG4iCittc2dzdHIgIiIKKyJQYXJlY2UgcXVlIHlhIGhheSB1biBkaXJlY3RvcmlvICVzLCB5XG4iCisibWUgcHJlZ3VudG8gc2kgZXN0w6FzIGVuIG1lZGlvIGRlIG90cm8gcmViYXNlLiBTaSBlc2UgZXMgZWwgXG4iCisiY2FzbywgcG9yIGZhdm9yIGludGVudGFcbiIKKyJcdCVzXG4iCisiU2kgbm8gZXMgZWwgY2FzbywgcG9yIGZhdm9yXG4iCisiXHQlc1xuIgorInkgZWplY8O6dGFtZSBudWV2YW1lbnRlLiBNZSBlc3RveSBkZXRlbmllbmRvIGVuIGNhc28gZGUgcXVlIHRlbmdhc1xuIgorImFsZ28gZGUgdmFsb3IgYWjDrS5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODA2Cittc2dpZCAic3dpdGNoIGBDJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJzd2l0Y2ggYEMnIGVzcGVyYSB1biB2YWxvciBudW3DqXJpY28iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg0NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG1vZGU6ICVzIgorbXNnc3RyICJNb2RvIGRlc2Nvbm9jaWRvOiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODY5Cittc2dpZCAiLS1zdHJhdGVneSByZXF1aXJlcyAtLW1lcmdlIG9yIC0taW50ZXJhY3RpdmUiCittc2dzdHIgIi0tc3RyYXRlZ3kgcmVxdWllcmUgLS1tZXJnZSBvIC0taW50ZXJhY3RpdmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5OQorbXNnaWQgImNhbm5vdCBjb21iaW5lIGFwcGx5IG9wdGlvbnMgd2l0aCBtZXJnZSBvcHRpb25zIgorbXNnc3RyICJubyBzZSBwdWVkZW4gY29tYmluYXIgb3BjaW9uZXMgZGUgYXBwbHkgY29uIG9wY2lvbmVzIGRlIG1lcmdlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biByZWJhc2UgYmFja2VuZDogJXMiCittc2dzdHIgIkJhY2tlbmQgZGUgcmViYXNlIGRlc2Nvbm9jaWRvOiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTM3Cittc2dpZCAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIHJlcXVpcmVzIC0tZXhlYyBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMgcmVxdWllcmUgLS1leGVjIG8gLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTU3Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBjb21iaW5hciAnLS1wcmVzZXJ2ZS1tZXJnZXMnIGNvbiAnLS1yZWJhc2UtbWVyZ2VzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTYxCittc2dpZCAiIgorImVycm9yOiBjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyciCittc2dzdHIgIiIKKyJlcnJvcjogbm8gc2UgcHVlZGUgY29tYmluYXIgJy0tcHJlc2VydmUtbWVyZ2VzJyBjb24gJy0tcmVzY2hlZHVsZS1mYWlsZWQtIgorImV4ZWMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJXMnIgorbXNnc3RyICJ1cHN0cmVhbSBpbnbDoWxpZG8gJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTkxCittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBuZXcgcm9vdCBjb21taXQiCittc2dzdHIgIk5vIHNlIHB1ZG8gY3JlYXIgY29tbWl0IHJhw616IG51ZXZvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIHdpdGggYnJhbmNoIgorbXNnc3RyICInJXMnOiBuZWNlc2l0YSBleGFjdGFtZW50ZSB1bmEgYmFzZSBkZSBmdXNpw7NuIGNvbiByYW1hIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIgorbXNnc3RyICInJXMnOiBuZWNlc2l0YSBleGFjdGFtZW50ZSB1bmEgYmFzZSBkZSBmdXNpw7NuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQgJyVzJyIKK21zZ3N0ciAiTm8gYXB1bnRhIGEgdW4gY29tbWl0IHbDoWxpZG8gJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaC9jb21taXQgJyVzJyIKK21zZ3N0ciAiZmF0YWw6IG5vIGV4aXN0ZSBsYSByYW1hL2NvbW1pdDogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDYyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZWY6ICVzIgorbXNnc3RyICJObyBleGlzdGUgcmVmOiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDczCittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCB0byBhIHJldmlzaW9uIgorbXNnc3RyICJObyBzZSBwdWRvIHJlc29sdmVyIEhFQUQgYSB1bmEgcmV2aXNpw7NuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTEKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICJObyBzZSBwdWVkZSBlamVjdXRhciBhdXRvc3Rhc2giCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHN0YXNoIHJlc3BvbnNlOiAnJXMnIgorbXNnc3RyICJSZXNwdWVzdGEgZGUgc3Rhc2ggaW5lc3BlcmFkYTogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciAnJXMnIgorbXNnc3RyICJObyBzZSBwdWRvIGNyZWFyIGVsIGRpcmVjdG9yaW8gcGFyYSAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICVzXG4iCittc2dzdHIgIkF1dG9zdGFzaCBjcmVhZG86ICVzXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyNgorbXNnaWQgImNvdWxkIG5vdCByZXNldCAtLWhhcmQiCittc2dzdHIgIm5vIHNlIHB1ZG8gcmVzZXQgLS1oYXJkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMzUKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJQb3IgZmF2b3IsIGNvbmbDrXJtYWxvcyBvIGd1w6FyZGFsb3MuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN3aXRjaCB0byAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjYW1iaWFyIGEgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE4MAorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkhFQUQgZXN0w6EgYWN0dWFsaXphZG8uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZS5cbiIKK21zZ3N0ciAiTGEgcmFtYSBhY3R1YWwgJXMgZXN0w6EgYWN0dWFsaXphZGEuXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE5MAorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCittc2dzdHIgIkhFQUQgZXN0w6EgYWN0dWFsaXphZG8sIHJlYmFzZSBmb3J6YWRvLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuXG4iCittc2dzdHIgIlJhbWEgYWN0dWFsICVzIGVzdMOhIGFjdHVhbGl6YWRhLCByZWJhc2UgZm9yemFkby5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjAwCittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIkVsIGhvb2sgcHJlLXJlYmFzZSByZWNoYXrDsyBlbCByZWJhc2UuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyB0byAlczpcbiIKK21zZ3N0ciAiQ2FtYmlvcyBhICVzOlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIgorbXNnc3RyICJDYW1iaW9zIGRlc2RlICVzIGEgJXM6XG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi5cbiIKK21zZ3N0ciAiIgorIkVuIHByaW1lciBsdWdhciwgcmVib2JpbmFuZG8gSEVBRCBwYXJhIGRlc3B1w6lzIHJlcHJvZHVjaXIgdHVzIGNhbWJpb3MgZW5jaW1hICIKKyJkZSDDqXN0YS4uLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyNDQKK21zZ2lkICJDb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIk5vIHNlIHB1ZWRlIGRlc2Fjb3BsYXIgSEVBRCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICVzIHRvICVzLlxuIgorbXNnc3RyICJBdmFuY2UgcsOhcGlkbyBkZSAlcyBhICVzLlxuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjMzCittc2dpZCAiZ2l0IHJlY2VpdmUtcGFjayA8Z2l0LWRpcj4iCittc2dzdHIgImdpdCByZWNlaXZlLXBhY2sgPGdpdC1kaXI+IgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjgyMQorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2ggaW4gYSBub24tYmFyZSByZXBvc2l0b3J5XG4iCisiaXMgZGVuaWVkLCBiZWNhdXNlIGl0IHdpbGwgbWFrZSB0aGUgaW5kZXggYW5kIHdvcmsgdHJlZSBpbmNvbnNpc3RlbnRcbiIKKyJ3aXRoIHdoYXQgeW91IHB1c2hlZCwgYW5kIHdpbGwgcmVxdWlyZSAnZ2l0IHJlc2V0IC0taGFyZCcgdG8gbWF0Y2hcbiIKKyJ0aGUgd29yayB0cmVlIHRvIEhFQUQuXG4iCisiXG4iCisiWW91IGNhbiBzZXQgdGhlICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlXG4iCisidG8gJ2lnbm9yZScgb3IgJ3dhcm4nIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBwdXNoaW5nIGludG9cbiIKKyJpdHMgY3VycmVudCBicmFuY2g7IGhvd2V2ZXIsIHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIHVubGVzcyB5b3VcbiIKKyJhcnJhbmdlZCB0byB1cGRhdGUgaXRzIHdvcmsgdHJlZSB0byBtYXRjaCB3aGF0IHlvdSBwdXNoZWQgaW4gc29tZVxuIgorIm90aGVyIHdheS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgc3RpbGwga2VlcCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIsIHNldFxuIgorIidyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorIlBvciBkZWZlY3RvLCBhY3R1YWxpemFyIGxhIHJhbWEgYWN0dWFsIGVuIHVuIHJlcG9zaXRvcmlvIG5vIHZhY8Otb1xuIgorImVzdMOhIGRlbmVnYWRvLCBwb3JxdWUgZXNvIGhhcsOtYSBlbCDDrW5kaWNlIHkgZWwgw6FyYm9sIGRlIHRyYWJham8gIgorImluY29uc2lzdGVudGVzXG4iCisiY29uIGxvIHF1ZSB5YSBzZSBoYSBoZWNobyBwdXNoLCB5IHJlcXVlcmlyw61hICdnaXQgcmVzZXQgLS1oYXJkJyBwYXJhICIKKyJhcnJlZ2xhclxuIgorImVsIMOhcmJvbCBkZSB0cmFiYWpvIGNvbiBIRUFELlxuIgorIlxuIgorIlB1ZWRlcyBjb25maWd1cmFyIGxhIHZhcmlhYmxlIGRlIGNvbmZpZ3VyYWNpw7NuICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJ1xuIgorIlwiaWdub3JlXCIgbyBcIndhcm5cIiBlbiBlbCByZXBvc2l0b3JpbyByZW1vdG8gcGFyYSBwZXJtaXRpclxuIgorInN1IHJhbWEgYWN0dWFsOyBTaW4gZW1iYXJnbywgZXN0byBubyBzZSByZWNvbWllbmRhIGEgbWVub3MgcXVlIHTDulxuIgorInRlIGhheWFzIG9yZ2FuaXphZG8gcGFyYSBhY3R1YWxpemFyIHN1IMOhcmJvbCBkZSB0cmFiYWpvIHBhcmEgcXVlIGNvaW5jaWRhICIKKyJjb24gbG8gcXVlXG4iCisiZW52aWFyw6FzIGNvbiBlbCBwdXNoIGRlIG90cmEgbWFuZXJhLlxuIgorIlxuIgorIlBhcmEgc3VwcmltaXIgZXN0ZSBtZW5zYWplIHkgbWFudGVuZXIgZWwgY29tcG9ydGFtaWVudG8gcHJlZGV0ZXJtaW5hZG8sXG4iCisiY29uZmlndXJhICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBhICdyZWZ1c2UnLiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4NDEKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGRlbmllZCwgYmVjYXVzZSB0aGUgbmV4dFxuIgorIidnaXQgY2xvbmUnIHdvbid0IHJlc3VsdCBpbiBhbnkgZmlsZSBjaGVja2VkIG91dCwgY2F1c2luZyBjb25mdXNpb24uXG4iCisiXG4iCisiWW91IGNhbiBzZXQgJ3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG9cbiIKKyInd2Fybicgb3IgJ2lnbm9yZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IGRlbGV0aW5nIHRoZVxuIgorImN1cnJlbnQgYnJhbmNoLCB3aXRoIG9yIHdpdGhvdXQgYSB3YXJuaW5nIG1lc3NhZ2UuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorIlBvciBkZWZlY3RvLCBib3JyYXIgbGEgcmFtYSBhY3R1YWwgZXN0w6EgcHJvaGliaWRvLCBwb3JxdWUgZWwgc2lndWllbnRlXG4iCisiJ2dpdCBjbG9uZScgbm8gcmVzdWx0YXJhIGVuIG5pbmfDum4gYXJjaGl2byByZXZpc2FkbywgY2F1c2FuZG8gY29uZnVzacOzbi5cbiIKKyJcbiIKKyJTZSBwdWVkZSBjb25maWd1cmFyIGxhIHZhcmlhYmxlICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBhICd3YXJuJyBvICIKKyInaWdub3JlJ1xuIgorImVuIGVsIHJlcG9zaXRvcmlvIHJlbW90byBwYXJhIHBlcm1pdGlyIGJvcnJhciBsYSByYW1hIGFjdHVhbC5cbiIKKyJjb24gbyBzaW4gbWVuc2FqZSBkZSBhZHZlcnRlbmNpYS5cbiIKKyJcbiIKKyJQYXJhIHN1cHJpbWlyIGVzdGUgbWVuc2FqZSwgcHVlZGVzIGNvbmZpZ3VyYXJsbyBlbiAncmVmdXNlJy4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTkzOAorbXNnaWQgInF1aWV0IgorbXNnc3RyICJ0cmFucXVpbG8iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MgorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIgorbXNnc3RyICJTZSB0aWVuZSBxdWUgZXNwZWNpZmljYXIgdW4gZGlyZWN0b3Jpby4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0aW1lPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT08dGllbXBvPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aWVtcG8+XSBbLS0iCisicmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gWy0tYWxsXSAiCisiPHJlZnM+Li4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjIyCittc2dpZCAiIgorImdpdCByZWZsb2cgZGVsZXRlIFstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSAiCisiPHJlZnM+Li4uIgorbXNnc3RyICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8cmVmcz4uLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjUKK21zZ2lkICJnaXQgcmVmbG9nIGV4aXN0cyA8cmVmPiIKK21zZ3N0ciAiZ2l0IHJlZmxvZyBleGlzdGUgPHJlZj4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NTY4IGJ1aWx0aW4vcmVmbG9nLmM6NTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIG5vIGVzIHVuYSBtYXJjYSBkZSB0aWVtcG8gdsOhbGlkYSIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyByZWFjaGFibGUgb2JqZWN0cy4uLiIKK21zZ3N0ciAiTWFyY2FuZG8gb2JqZWN0b3MgYWxjYW56YWJsZXMuLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyBub3doZXJlISIKK21zZ3N0ciAiwqElcyBhcHVudGEgYSBuaW5nw7puIGxhZG8hIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY5NgorbXNnaWQgIm5vIHJlZmxvZyBzcGVjaWZpZWQgdG8gZGVsZXRlIgorbXNnc3RyICJubyByZWZsb2cgZXNwZWNpZmljYWRvIHBhcmEgYm9ycmFyIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSByZWZsb2c6ICVzIgorbXNnc3RyICJubyBlcyB1bmEgcmVmbG9nOiAlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVmbG9nIGZvciAnJXMnIgorbXNnc3RyICJubyByZWZsb2cgcGFyYSAnJXMnIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZiBmb3JtYXQ6ICVzIgorbXNnc3RyICJmb3JtYXRvIGludsOhbGlkbzogJXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzY1Cittc2dpZCAiZ2l0IHJlZmxvZyBbIHNob3cgfCBleHBpcmUgfCBkZWxldGUgfCBleGlzdHMgXSIKK21zZ3N0ciAiZ2l0IHJlZmxvZyBbIHNob3cgfCBleHBpcmUgfCBkZWxldGUgfCBleGlzdHMgXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNworbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4Cittc2dpZCAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPHJhbWE+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxub21icmU+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5IGJ1aWx0aW4vcmVtb3RlLmM6MzkKK21zZ2lkICJnaXQgcmVtb3RlIHJlbmFtZSA8b2xkPiA8bmV3PiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW5hbWUgPHZpZWpvPiA8bnVldm8+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NDQKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDxub21icmU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIxIGJ1aWx0aW4vcmVtb3RlLmM6NDkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDxub21icmU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8cmFtYT4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIyCittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPG5vbWJyZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjMKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5vbWJyZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjQKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncnVwbz4gfCA8cmVtb3RvPikuLi5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI1Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5vbWJyZT4gPHJhbWE+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI2IGJ1aWx0aW4vcmVtb3RlLmM6NzUKK21zZ2lkICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxub21icmU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI3IGJ1aWx0aW4vcmVtb3RlLmM6ODAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+IFs8b2xkdXJsPl0iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bm9tYnJlPiA8bnVldm8tdXJsPiBbPHZpZWpvLXVybD5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI4IGJ1aWx0aW4vcmVtb3RlLmM6ODEKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5vbWJyZT4gPG51ZXZvLXVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjkgYnVpbHRpbi9yZW1vdGUuYzo4MgorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bm9tYnJlPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozNAorbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBhZGQgWzxvcGNpb25lcz5dIDxub21icmU+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bm9tYnJlPiA8cmFtYT4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTUKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxub21icmU+IDxyYW1hPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MAorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2hvdyBbPG9wY2lvbmVzPl0gPG5vbWJyZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjUKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wY2lvbmVzPl0gPG5vbWJyZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzAKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcGNpb25lcz5dIFs8Z3J1cG8+IHwgPHJlbW90bz5dLi4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICJBY3R1YWxpemFuZG8gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorIlVzYXIgLS1taXJyb3IgZXMgcGVsaWdyb3NvIHkgZXN0w6EgZGVzYXByb2JhZG87XG4iCisiXHQgdXNhIG3DoXMgYmllbiAtLW1pcnJvcj1mZXRjaCBvIC0tbWlycm9yPXB1c2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnRvIG1pcnJvciBkZXNjb25vY2lkbzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY0Cittc2dpZCAiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIKK21zZ3N0ciAicmVhbGl6YXIgZmV0Y2ggYSBsYXMgcmFtYXMgcmVtb3RhcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjYKK21zZ2lkICJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIgorbXNnc3RyICJpbXBvcnRhciB0b2RvcyBsb3MgdGFncyB5IG9iamV0b3MgYXNvY2lhZG9zIGN1YW5kbyByZWFsaXphIGVsIGZldGNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2OQorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAibyBubyByZWFsemlhciBmZXRjaCBhIG5pbmfDum4gdGFnICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MQorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgInJhbWEocykgcGFyYSByYXN0cmVhciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzIKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICJyYW1hIG1hc3RlciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzQKK21zZ2lkICJzZXQgdXAgcmVtb3RlIGFzIGEgbWlycm9yIHRvIHB1c2ggdG8gb3IgZmV0Y2ggZnJvbSIKK21zZ3N0ciAiIgorImNvbmZpZ3VyYXIgcmVtb3RlIGNvbW8gbWlycm9yIHBhcmEgcmVhbGl6YXIgcHVzaCBvIGRlc2RlIGVsIGN1YWwgcmVhbGl6YXIgIgorImZldGNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NgorbXNnaWQgInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiCittc2dzdHIgImVzcGVjaWZpY2FyIHVuYSByYW1hIG1hc3RlciBubyB0aWVuZSBzZW50aWRvIGNvbiAtLW1pcnJvciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODgKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICJlc3BlY2lmaWNhciByYW1hcyBwYXJhIHJhc3RyZWFyIHNvbG8gdGllbmUgc2VudGlkbyBjb24gZmV0Y2ggbWlycm9ycyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTUgYnVpbHRpbi9yZW1vdGUuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAicmVtb3RvICVzIHlhIGV4aXN0ZS4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk5IGJ1aWx0aW4vcmVtb3RlLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiclcycgbm8gZXMgdW4gbm9tYnJlIHJlbW90byB2w6FsaWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgbWFzdGVyICclcyciCittc2dzdHIgIk5vIHNlIHB1ZG8gY29uZmlndXJhciBtYXN0ZXIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgIk5vIHNlIHB1ZG8gcmVhbGl6YXIgZWwgZmV0Y2ggYWwgbWFwYSBwYXJhIHJlZnNwZWMgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDUzIGJ1aWx0aW4vcmVtb3RlLmM6NDYxCittc2dpZCAiKG1hdGNoaW5nKSIKK21zZ3N0ciAiKGNvbmNvcmRhbmRvKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NjUKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAiKGVsaW1pbmFyKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGNvbmZpZ3VyYXIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAlcyBjb25maWd1cmF0aW9uIHJlbW90ZS5wdXNoRGVmYXVsdCBpbjpcbiIKKyJcdCVzOiVkXG4iCisibm93IG5hbWVzIHRoZSBub24tZXhpc3RlbnQgcmVtb3RlICclcyciCittc2dzdHIgIiIKKyJMYSBjb25maWd1cmFjacOzbiAlcyByZW1vdGUucHVzaERlZmF1bHQgZW46XG4iCisiXHQlczolZFxuIgorImFob3JhIG5vbWJyYSBhbCByZW1vdG8gaW5leGlzdGVudGUgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2ODkgYnVpbHRpbi9yZW1vdGUuYzo4MzIgYnVpbHRpbi9yZW1vdGUuYzo5NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICclcyciCittc2dzdHIgIk5vIGV4aXN0ZSBlbCByZW1vdG8gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIk5vIHNlIHB1ZG8gcmVub21icmFyIGxhIHNlY2Npw7NuIGRlIGNvbmZpZ3VyYWNpw7NuICclcycgYSAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlZnNwZWNcbiIKKyJcdCVzXG4iCisiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iCittc2dzdHIgIiIKKyJObyBzZSBhY3R1YWxpemFuIHJlZnNwZWMgZGUgZmV0Y2ggbm8gcHJlZGV0ZXJtaW5hZGFcbiIKKyJcdCVzXG4iCisiXHRQb3IgZmF2b3IgYWN0dWFsaWNlIGxhIGNvbmZpZ3VyYWNpw7NuIG1hbnVhbG1lbnRlIHNpIGVzIG5lY2VzYXJpby4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJib3JyYW5kbyAnJXMnIGZhbGzDsyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImNyZWFuZG8gJyVzJyBmYWxsw7MiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODc2Cittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIiIKKyJOb3RhOiBVbmEgcmFtYSBmdWVyYSBkZSBsYSBqZXJhcnF1w61hIHJlZnMvcmVtb3Rlcy8gbm8gZnVlIGVsaW1pbmFkYTtcbiIKKyJwYXJhIGJvcnJhcmxhLCB1c2U6IgorbXNnc3RyWzFdICIiCisiTm90YTogQWxndW5hcyByYW1hcyBmdWVyYSBkZSBsYSBqZXJhcnF1w61hIHJlZnMvcmVtb3Rlcy8gbm8gZnVlcm9uICIKKyJlbGltaW5hZGFzO1xuIgorInBhcmEgYm9ycmFybGFzLCB1c2U6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciCittc2dzdHIgIk5vIHNlIHB1ZG8gYm9ycmFyIGxhIHNlY2Npw7NuIGRlIGNvbmZpZ3VyYWNpw7NuICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIKK21zZ3N0ciAiIG51ZXZvIChzaWd1aWVudGUgZmV0Y2ggc2UgZ3VhcmRhcsOhIGVuIHJlbW90ZXMvJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5NgorbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIgcmFzdHJlYWRhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5OAorbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIgdmllam8gKCB1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHBhcmEgZWxpbWluYXIpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDAKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICJpbnbDoWxpZG8gYnJhbmNoLiVzLm1lcmdlOyBubyBzZSBwdWVkZSByZWJhc2FyIGVuID4gMSByYW1hIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5IG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJyZWJhc2EgaW50ZXJhY3RpdmFtZW50ZSBlbiByZW1vdG8gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgKHdpdGggbWVyZ2VzKSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAicmViYXNhIGludGVyYWN0aXZhbWVudGUgKGNvbiBmdXNpb25lcykgZW4gcmVtb3RvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAicmViYXNhIHNvYnJlIGVsIHJlbW90byAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiBzZSBmdXNpb25hIGNvbiByZW1vdG8gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgImZ1c2lvbmEgY29uIHJlbW90byAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtKnMgICAgYW5kIHdpdGggcmVtb3RlICVzXG4iCittc2dzdHIgIiUtKnMgeSBjb24gZWwgcmVtb3RvICVzXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEwOAorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAiY3JlYXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTExMQorbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAiYm9ycmFyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTUKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICJhY3R1YWxpemFkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE4Cittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAicHVlZGUgcmVhbGl6YXIgZmFzdC1mb3J3YXJkIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjEKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAiZGVzYWN0dWFsaXphZG8gbG9jYWwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyBmdWVyemEgYSAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyBwdWJsaWNhIGEgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyBmdWVyemEgYSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgcHVibGljYSBhICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDYKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAibm8gY29uc3VsdGFyIHJlbW90b3MiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAiKiByZW1vdG8gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiAgVVJMICBwYXJhIG9idGVuZXI6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzUgYnVpbHRpbi9yZW1vdGUuYzoxMjUxIGJ1aWx0aW4vcmVtb3RlLmM6MTM5MAorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIoc2luIFVSTCkiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gJzonIHNob3VsZCBhbGlnbgorIy4gd2l0aCB0aGUgb25lIGluICIgRmV0Y2ggVVJMOiAlcyIKKyMuIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI0OSBidWlsdGluL3JlbW90ZS5jOjEyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIgIFVSTCBwYXJhIHB1YmxpY2FyOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjUzIGJ1aWx0aW4vcmVtb3RlLmM6MTI1NSBidWlsdGluL3JlbW90ZS5jOjEyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaDogJXMiCittc2dzdHIgIiAgUmFtYSBIRUFEOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjUzCittc2dpZCAiKG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiKG5vIGNvbnN1bHRhZG8pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTUKK21zZ2lkICIodW5rbm93bikiCittc2dzdHIgIihkZXNjb25vY2lkbykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIiCisiICBIRUFEIGVuIHJhbWEgKCBIRUFEIHJlbW90byBlcyBhbWJpZ3VvLCBwdWVkZSBzZXIgdW5vIGRlIGxvcyBzaWd1aWVudGVzKTpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAgUmFtYSByZW1vdGE6JXMiCittc2dzdHJbMV0gIiAgUmFtYXMgcmVtb3RhczolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc0IGJ1aWx0aW4vcmVtb3RlLmM6MTMwMAorbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiIChlc3RhZG8gbm8gY29uc3VsdGFkbykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI4MworbXNnaWQgIiAgTG9jYWwgYnJhbmNoIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnc3RyWzBdICIgIFJhbWEgbG9jYWwgY29uZmlndXJhZGEgcGFyYSAnZ2l0IHB1bGwnOiIKK21zZ3N0clsxXSAiICBSYW1hcyBsb2NhbGVzIGNvbmZpZ3VyYWRhcyBwYXJhICdnaXQgcHVsbCc6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTEKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIgIExhcyByZWZlcmVuY2lhcyBsb2NhbGVzIHNlcsOhbiByZWZsZWphZGFzIHBvciAnZ2l0IHB1c2gnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAgUmVmZXJlbmNpYSBsb2NhbCBjb25maWd1cmFkYSBwYXJhICdnaXQgcHVzaCclczoiCittc2dzdHJbMV0gIiAgUmVmZXJlbmNpYXMgbG9jYWxlcyBjb25maWd1cmFkYXMgcGFyYSAnZ2l0IHB1c2gnJXM6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMTgKK21zZ2lkICJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiCittc2dzdHIgImNvbmZpZ3VyYXIgcmVmcy9yZW1vdGVzLzxub21icmU+L0hFQUQgZGUgYWN1ZXJkbyBhbCByZW1vdG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyMAorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgImJvcnJhciByZWZzL3JlbW90b3MvPG5vbWJyZT4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzM1Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZGV0ZXJtaW5hciBlbCBIRUFEIHJlbW90byIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzM3Cittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIk3Dumx0aXBsZXMgcmFtYXMgSEVBRCByZW1vdGFzLiBQb3IgZmF2b3IgZXNjb2phIHVuYSBleHBsw61jaXRhbWVudGUgY29uOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIk5vIHNlIHB1ZG8gYm9ycmFyICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAiTm8gZXMgdW4gcmVmIHbDoWxpZG86ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICJObyBzZSBwdWRvIGNvbmZpZ3VyYXIgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgwqElcyBzZXLDoSBjb2xnYWRvISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiIMKhJXMgaGEgc2lkbyBjb2xnYWRvISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgIlJlY29ydGFuZG8gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM4NworIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICJVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3dvdWxkIHBydW5lXSAlcyIKK21zZ3N0ciAiICogW2VqZWN1dGFyw6EgcHJ1bmVdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3BydW5lZF0gJXMiCittc2dzdHIgIiAqIFtwcnVuZSByZWFsaXphZG9dICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTEKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJyZWNvcnRhciByZW1vdG9zIHRyYXMgcmVhbGl6YXIgZmV0Y2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUxNCBidWlsdGluL3JlbW90ZS5jOjE1NjggYnVpbHRpbi9yZW1vdGUuYzoxNjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIk5vIGV4aXN0ZSBlbCByZW1vdG8gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTMwCittc2dpZCAiYWRkIGJyYW5jaCIKK21zZ3N0ciAiYWdyZWdhciByYW1hIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzcKK21zZ2lkICJubyByZW1vdGUgc3BlY2lmaWVkIgorbXNnc3RyICJubyBoYXkgcmVtb3RvcyBlc3BlY2lmaWNhZG9zIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NTQKK21zZ2lkICJxdWVyeSBwdXNoIFVSTHMgcmF0aGVyIHRoYW4gZmV0Y2ggVVJMcyIKK21zZ3N0ciAiY29uc3VsdGFyIFVSTHMgZGUgcHVzaCBlbiBsdWdhciBkZSBVUkxzIGRlIGZldGNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NTYKK21zZ2lkICJyZXR1cm4gYWxsIFVSTHMiCittc2dzdHIgInJldG9ybmFyIHRvZG9zIGxvcyBVUkxzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gVVJMcyBjb25maWd1cmVkIGZvciByZW1vdGUgJyVzJyIKK21zZ3N0ciAibm8gaGF5IFVSTHMgY29uZmlndXJhZG9zIHBhcmEgcmVtb3RvICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxMAorbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICJtYW5pcHVsYXIgVVJMcyBkZSBwdXNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MTIKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICJhZ3JlZ2FyIFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjE0Cittc2dpZCAiZGVsZXRlIFVSTHMiCittc2dzdHIgImJvcnJhciBVUkxzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MjEKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tYWRkIC0tZGVsZXRlIG5vIHRpZW5lIHNlbnRpZG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgIlBhdHLDs24gZGUgVVJMIHZpZWpvIGludsOhbGlkbzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgIk5vIHNlIGVuY29udHLDsyBVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NzAKK21zZ2lkICJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiCittc2dzdHIgIk5vIGJvcnJhcsOhIHRvZG9zIGxvcyBVUkxzIGRlIG5vLXB1c2giCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMKK21zZ2lkICJnaXQgcmVwYWNrIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmVwYWNrIFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOAorbXNnaWQgIiIKKyJJbmNyZW1lbnRhbCByZXBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBiaXRtYXAgaW5kZXhlcy4gIFVzZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9yIGRpc2FibGUgdGhlIHBhY2sud3JpdGViaXRtYXBzIGNvbmZpZ3VyYXRpb24uIgorbXNnc3RyICIiCisiUmUgZW1wYXF1ZXRhZG9zIGluY3JlbWVudGFsZXMgc29uIGluY29tcGF0aWJsZXMgY29uIMOtbmRpY2VzIGJpdG1hcC4gVXNlIFxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG8gZGVzaGFiaWxpdGUgbGEgY29uZmlndXJhY2nDs24gcGFjay53cml0ZWJpdG1hcHMuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE5MQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGluaWNpYXIgcGFjay1vYmplY3RzIHBhcmEgcmVlbXBhcXVldGFyIG9iamV0b3MgcHJvbWlzb3JlcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMzAgYnVpbHRpbi9yZXBhY2suYzo0MTYKK21zZ2lkICJyZXBhY2s6IEV4cGVjdGluZyBmdWxsIGhleCBvYmplY3QgSUQgbGluZXMgb25seSBmcm9tIHBhY2stb2JqZWN0cy4iCittc2dzdHIgIiIKKyJyZXBhY2s6IEVzcGVyYW5kbyBsw61uZWFzIGRlIElEIGRlIG9iamV0byBlbiBmdWxsIGhleCBzb2xvIGRlc2RlIHBhY2stb2JqZWN0cy4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjU0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgIiIKKyJubyBzZSBwdWVkZSBmaW5hbGl6YXIgcGFjay1vYmplY3RzIHBhcmEgcmVlbXBhcXVldGFyIG9iamV0b3MgcHJvbWlzb3JlcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTIKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAiZW1wYXF1ZXRhciB0b2RvIGVuIHVuIMO6bmljbyBwYXF1ZXRlIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NAorbXNnaWQgInNhbWUgYXMgLWEsIGFuZCB0dXJuIHVucmVhY2hhYmxlIG9iamVjdHMgbG9vc2UiCittc2dzdHIgImxvIG1pc21vIHF1ZSAtYSwgeSBwaWVyZGUgb2JqZXRvcyBpbmFjY2VzaWJsZXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk3Cittc2dpZCAicmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkIgorbXNnc3RyICJlbGltaW5hciBwYXF1ZXRlcyByZWR1bmRhbnRlcywgeSBlamVjdXRhciBnaXQtcHJ1bmUtcGFja2VkIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5OQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJwYXNhciAtLW5vLXJldXNlLWRlbHRhIGEgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDEKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgInBhc2FyIC0tbm8tcmV1c2Utb2JqZWN0IGEgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDMKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgIm5vIGVqZWN1dGFyIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA2Cittc2dpZCAicGFzcyAtLWxvY2FsIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgInBhc2FyIC0tbG9jYWwgYSBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwOAorbXNnaWQgIndyaXRlIGJpdG1hcCBpbmRleCIKK21zZ3N0ciAiZXNjcmliaXIgdW4gw61uZGljZSBkZSBiaXRtYXAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzEwCittc2dpZCAicGFzcyAtLWRlbHRhLWlzbGFuZHMgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFzYXIgLS1kZWx0YS1pc2xhbmRzIGEgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTEKK21zZ2lkICJhcHByb3hpZGF0ZSIKK21zZ3N0ciAiYXByb3hpbWUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzEyCittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAiY29uIC1BLCBubyBwZXJkZXIgb2JqZXRvcyBtw6FzIGFudGlndW9zIHF1ZSBlc3RlIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNAorbXNnaWQgIndpdGggLWEsIHJlcGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJjb24gLWEsIHJlIGVtcGFxdWV0YXIgb2JqZXRvcyBpbmFsY2FuemFibGVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNgorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAidGFtYcOxbyBkZSBsYSB2ZW50YW5hIHVzYWRvIHBhcmEgbGEgY29tcHJlc2nDs24gZGVsdGEiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE3IGJ1aWx0aW4vcmVwYWNrLmM6MzIzCittc2dpZCAiYnl0ZXMiCittc2dzdHIgImJ5dGVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxOAorbXNnaWQgInNhbWUgYXMgdGhlIGFib3ZlLCBidXQgbGltaXQgbWVtb3J5IHNpemUgaW5zdGVhZCBvZiBlbnRyaWVzIGNvdW50IgorbXNnc3RyICIiCisibG8gbWlzbW8gcXVlIGFycmliYSwgcGVybyBsaW1pdGEgZWwgdGFtYcOxbyBkZSBtZW1vcmlhIGVuIGx1Z2FyIGRlIGNvbnRhciAiCisiZW50cmFkYXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzIwCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIgorbXNnc3RyICJsaW1pdGEgbGEgcHJvZnVuZGlkYWQgbcOheGltYSBkZWwgZGVsdGEiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzIyCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIgorbXNnc3RyICJsaW1pdGEgZWwgbsO6bWVybyBtw6F4aW1vIGRlIGhpbG9zIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICJ0YW1hw7FvIG3DoXhpbW8gZGUgY2FkYSBwYXF1ZXRlIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNgorbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICJyZS1lbXBhcXVldGFyIG9iamV0b3MgZW4gcGFxdWV0ZXMgbWFyY2Fkb3MgY29uIC5rZWVwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyOAorbXNnaWQgImRvIG5vdCByZXBhY2sgdGhpcyBwYWNrIgorbXNnc3RyICJubyByZWVtcGFxdWV0YXIgZXN0ZSBwYXF1ZXRlIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMzOAorbXNnaWQgImNhbm5vdCBkZWxldGUgcGFja3MgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgIm5vIHNlIHB1ZWRlbiBib3JyYXIgcGFxdWV0ZXMgZW4gdW4gcmVwb3NpdG9yaW8gZGUgb2JqZXRvcy1wcmVjaW9zb3MiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzQyCittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtQSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUgeSAtQSBzb24gaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0MjUKK21zZ2lkICJOb3RoaW5nIG5ldyB0byBwYWNrLiIKK21zZ3N0ciAiTmFkYSBudWV2byBwYXJhIGVtcGFxdWV0YXIuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogU29tZSBwYWNrcyBpbiB1c2UgaGF2ZSBiZWVuIHJlbmFtZWQgYnlcbiIKKyJXQVJOSU5HOiBwcmVmaXhpbmcgb2xkLSB0byB0aGVpciBuYW1lLCBpbiBvcmRlciB0b1xuIgorIldBUk5JTkc6IHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGVcbiIKKyJXQVJOSU5HOiBmaWxlLiAgQnV0IHRoZSBvcGVyYXRpb24gZmFpbGVkLCBhbmQgdGhlXG4iCisiV0FSTklORzogYXR0ZW1wdCB0byByZW5hbWUgdGhlbSBiYWNrIHRvIHRoZWlyXG4iCisiV0FSTklORzogb3JpZ2luYWwgbmFtZXMgYWxzbyBmYWlsZWQuXG4iCisiV0FSTklORzogUGxlYXNlIHJlbmFtZSB0aGVtIGluICVzIG1hbnVhbGx5OlxuIgorbXNnc3RyICIiCisiV0FSTklORzogQWxndW5vcyBwYWNrcyBlbiB1c28gaGFuIHNpZG8gcmVub21icmFkb3NcbiIKKyJXQVJOSU5HOiBhZ3JlZ2FuZG8gZWwgcHJlZmlqbyBvbGQtIGEgc3VzIG5vbWJyZXMscGFyYVxuIgorIldBUk5JTkc6IHJlZW1wbGF6YXJsb3MgY29uIGxhIG51ZXZhIHZlcnNpw7NuIGRlbFxuIgorIldBUk5JTkc6IGFyY2hpdm8uIFBlcm8gbGEgb3BlcmFjacOzbiBmYWxsw7MsIHkgZWwgaW50ZW50b1xuIgorIldBUk5JTkc6IGRlIHJlbm9tYnJhcmxvcyBhIHN1cyBub21icmVzIG9yaWdpbmFsZXNcbiIKKyJXQVJOSU5HOiB0YW1iacOpbiBmYWxsw7MuXG4iCisiV0FSTklORzogUG9yIGZhdm9yIHJlbm9tYnJhbG9zIGVuICVzIG1hbnVhbG1lbnRlOlxuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICclcyciCittc2dzdHIgImZhbGzDsyBhbCBlbGltaW5hciclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIDxvYmpldG8+IDxyZW1wbGF6bz4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxvYmpldG8+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNAorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYWRyZT4uLi5dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI2Cittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCByZXBsYWNlIC1kIDxvYmpldG8+Li4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNworbXNnaWQgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXRvPl0gWy1sIFs8cGF0csOzbj5dXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgcmVwbGFjZSBmb3JtYXQgJyVzJ1xuIgorInZhbGlkIGZvcm1hdHMgYXJlICdzaG9ydCcsICdtZWRpdW0nIGFuZCAnbG9uZyciCittc2dzdHIgIiIKKyJmb3JtYXRvIGRlIHJlZW1wbGF6byBpbnbDoWxpZG8gJyVzJ1xuIgorImZvcm1hdG9zIHbDoWxpZG9zIHNvbiAnc2hvcnQnLCAnbWVkaXVtJyB5ICdsb25nJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgcmVmICclcycgbm90IGZvdW5kIgorbXNnc3RyICJyYW1hIGRlIHJlZW1wbGF6byAnJXMnIG5vIGVuY29udHJhZGEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlcGxhY2UgcmVmICclcyciCittc2dzdHIgIkJvcnJhZGFzIHJlcGxhY2UgcmVmcyAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYgbmFtZSIKK21zZ3N0ciAiJyVzJyBubyBlcyB1biBub21icmUgZGUgcmVmIHbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJyZWYgZGUgcmVlbXBsYXpvICclcycgeWEgZXhpc3RlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk9iamVjdHMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlLlxuIgorIiclcycgcG9pbnRzIHRvIGEgcmVwbGFjZWQgb2JqZWN0IG9mIHR5cGUgJyVzJ1xuIgorIndoaWxlICclcycgcG9pbnRzIHRvIGEgcmVwbGFjZW1lbnQgb2JqZWN0IG9mIHR5cGUgJyVzJy4iCittc2dzdHIgIiIKKyJPYmpldG8gZGViZSBzZXIgZGVsIG1pc21vIHRpcG8uXG4iCisiJyVzJyBwdW50b3MgcGFyYSB1biBvYmpldG8gcmVlbXBsYXphZG8gZGUgdGlwbyAnJXMnXG4iCisibWllbnRyYXMgJyVzJyBwdW50b3MgcGFyYSB1biByZWVtcGxhem8gZGUgdGlwbyBkZSBvYmpldG8gJyVzJy4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhYnJpciAlcyBwYXJhIGVzY3JpdHVyYSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQyCittc2dpZCAiY2F0LWZpbGUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAiY2F0LWZpbGUgcmVwb3J0w7MgdW4gZmFsbG8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhYnJpciAlcyBwYXJhIGxlY3R1cmEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3MgorbXNnaWQgInVuYWJsZSB0byBzcGF3biBta3RyZWUiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZ2VuZXJhciBta3RyZWUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3NgorbXNnaWQgInVuYWJsZSB0byByZWFkIGZyb20gbWt0cmVlIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGxlZXIgZGUgbWt0cmVlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODUKK21zZ2lkICJta3RyZWUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAibWt0cmVlIHJlcG9ydMOzIHVuIGVycm9yIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODkKK21zZ2lkICJta3RyZWUgZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0IG5hbWUiCittc2dzdHIgIm1rdHJlZSBubyBkZXZvbHZpw7MgdW4gbm9tYnJlIGRlIG9iamV0byIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmc3RhdCAlcyIKK21zZ3N0ciAiaW5jYXBheiBkZSBjb3JyZXIgZnN0YXQgJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMwMworbXNnaWQgInVuYWJsZSB0byB3cml0ZSBvYmplY3QgdG8gZGF0YWJhc2UiCittc2dzdHIgImluY2FwYXogZGUgZXNjcmliaXIgZWwgb2JqZXRvIGVuIGxhIGJhc2UgZGUgZGF0b3MiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyMiBidWlsdGluL3JlcGxhY2UuYzozNzggYnVpbHRpbi9yZXBsYWNlLmM6NDI0CisjOiBidWlsdGluL3JlcGxhY2UuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcyciCittc2dzdHIgIm5vbWJyZSBkZSBvYmpldG8gbm8gdsOhbGlkbzogJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgb2JqZWN0IHR5cGUgZm9yICVzIgorbXNnc3RyICJubyBlcyBvYnRlbmVyIHRpcG8gZGUgb2JqZXRvIHBhcmEgJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM0MgorbXNnaWQgImVkaXRpbmcgb2JqZWN0IGZpbGUgZmFpbGVkIgorbXNnc3RyICJlZGljacOzbiBkZSBhcmNoaXZvIGRlIG9iamV0byBmYWxsw7MiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICJudWV2byBvYmpldG8gZXMgaWd1YWwgYWwgYW50aWd1bzogJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyBhcyBhIGNvbW1pdCIKK21zZ3N0ciAibm8gc2UgcHVkbyBhbmFsaXphciAlcyBjb21vIHVuIGNvbW1pdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAibWFsIG1lcmdldGFnIGVuIGNvbW1pdCAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICJtZXJnZXRhZyBtYWwgZm9ybWFkbyBlbiBjb21taXQgJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcmlnaW5hbCBjb21taXQgJyVzJyBjb250YWlucyBtZXJnZXRhZyAnJXMnIHRoYXQgaXMgZGlzY2FyZGVkOyB1c2UgLS1lZGl0ICIKKyJpbnN0ZWFkIG9mIC0tZ3JhZnQiCittc2dzdHIgIiIKKyJjb21taXQgb3JpZ2luYWwgJyVzJyBjb250aWVuZSB1biBtZXJnZXRhZyAnJXMnIHF1ZSBlcyBkZXNjYXJ0YWRvOyB1c2UgLS1lZGl0ICIKKyJlbiBsdWdhciBkZSAtLWdyYWZ0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG9yaWdpbmFsIGNvbW1pdCAnJXMnIGhhcyBhIGdwZyBzaWduYXR1cmUiCittc2dzdHIgImVsIGNvbW1pdCBvcmlnaW5hbCAnJXMnIHRpZW5lIHVuYSBmaXJtYSBncGciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ3MAorbXNnaWQgInRoZSBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSByZXBsYWNlbWVudCBjb21taXQhIgorbXNnc3RyICJsYSBmaXJtYSBzZXLDoSBlbGltaW5hZGEgZW4gZWwgY29tbWl0IGRlIHJlZW1wbGF6byEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBlc2NyaWJpciBlbCBjb21taXQgZGUgcmVlbXBsYXpvOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JhZnQgZm9yICclcycgdW5uZWNlc3NhcnkiCittc2dzdHIgImdyYWZ0IHBhcmEgJyVzJyBpbm5lY2VzYXJpbyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBjb21taXQgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmU6ICclcyciCittc2dzdHIgIm51ZXZvIGNvbW1pdCBlcyBsZSBtaXNtbyBxdWUgZWwgYW50aWd1bzogJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY29udmVydCB0aGUgZm9sbG93aW5nIGdyYWZ0KHMpOlxuIgorIiVzIgorbXNnc3RyICIiCisibm8gc2UgcHVkbyBjb252ZXJ0aXIgZWwgc2lndWllbnRlIGdyYWZ0KHMpOlxuIgorIiVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDgKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAibGlzdGFyIHJlcGxhY2UgcmVmcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ5Cittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAiYm9ycmFyIHJlcGxhY2UgcmVmcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUwCittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgImVkaXRhciBvYmpldG8gZXhpc3RlbnRlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTEKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICJjYW1iaWFyIHVuIHBhZHJlIGRlIGNvbW1pdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUyCittc2dpZCAiY29udmVydCBleGlzdGluZyBncmFmdCBmaWxlIgorbXNnc3RyICJjb252ZXJ0aXIgYXJjaGl2byBncmFmdCBleGlzdGVudGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MworbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgInJlZW1wbGF6YXIgZWwgcmVmIHNpIGVzdGUgZXhpc3RlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTUKK21zZ2lkICJkbyBub3QgcHJldHR5LXByaW50IGNvbnRlbnRzIGZvciAtLWVkaXQiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGltcHJpbWlyIGNvbnRlbmlkb3MgcGFyYSAtLWVkaXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NgorbXNnaWQgInVzZSB0aGlzIGZvcm1hdCIKK21zZ3N0ciAidXNhciBlc3RlIGZvcm1hdG8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU2OQorbXNnaWQgIi0tZm9ybWF0IGNhbm5vdCBiZSB1c2VkIHdoZW4gbm90IGxpc3RpbmciCittc2dzdHIgIi0tZm9ybWF0IG5vIHB1ZWRlIHNlciB1c2FkbyBjdWFuZG8gbm8gc2UgaGFjZSBsaXN0aW5nIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NzcKK21zZ2lkICItZiBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gd3JpdGluZyBhIHJlcGxhY2VtZW50IgorbXNnc3RyICItZiBzb2xvIHRpZW5lIHNlbnRpZG8gY3VhbmRvIHNlIGVzY3JpYmUgdW4gcmVlbXBsYXpvIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODEKK21zZ2lkICItLXJhdyBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1lZGl0IgorbXNnc3RyICItLXJhdyBzb2xvIHRpZW5lIHNlbnRpZG8gY29uIC0tZWRpdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTg3Cittc2dpZCAiLWQgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICItZCBuZWNlc2l0YSBhbCBtZW5vcyB1biBhcmd1bWVudG8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU5MworbXNnaWQgImJhZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICJtYWwgbsO6bWVybyBkZSBhcmd1bWVudG9zIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1OTkKK21zZ2lkICItZSBuZWVkcyBleGFjdGx5IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWUgbmVjZXNpdGEgZXhhY3RhbWVudGUgdW4gYXJndW1lbnRvIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MDUKK21zZ2lkICItZyBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1nIG5lY2VzaXRhIGFsIG1lbm9zIHVuIGFyZ3VtZW50byIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjExCittc2dpZCAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgdGFrZXMgbm8gYXJndW1lbnQiCittc2dzdHIgIi0tY29udmVydC1ncmFmdC1maWxlIG5vIHRvbWEgYXJndW1lbnRvcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjE3Cittc2dpZCAib25seSBvbmUgcGF0dGVybiBjYW4gYmUgZ2l2ZW4gd2l0aCAtbCIKK21zZ3N0ciAic29sbyBzZSBwdWVkZSBkYXIgdW4gcGF0csOzbiBjb24gLWwiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTMKK21zZ2lkICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorbXNnc3RyICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cnV0YT4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjYwCittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgInJlZ2lzdHJhciByZXNvbHVjaW9uZXMgbGltcGlhcyBlbiBlbCDDrW5kaWNlIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjc5Cittc2dpZCAiJ2dpdCByZXJlcmUgZm9yZ2V0JyB3aXRob3V0IHBhdGhzIGlzIGRlcHJlY2F0ZWQiCittc2dzdHIgIidnaXQgcmVyZXJlIGZvcmdldCcgc2luIHJ1dGFzIGVzdMOhIGRlcHJlY2FkbyIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgZm9yICclcyciCittc2dzdHIgIm5vIGVzIHBvc2libGUgZ2VuZXJhciBkaWZmIHBhcmEgJyVzJyIKKworIzogYnVpbHRpbi9yZXNldC5jOjMyCittc2dpZCAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKK21zZ3N0ciAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gWzzDoXJib2wtaXNtbz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAiIgorImdpdCByZXNldCBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs8dHJlZS1pc2g+XSIKK21zZ3N0ciAiIgorImdpdCByZXNldCBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs8w6FyYm9sLWlzbW8+XSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1Cittc2dpZCAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRoc3BlYz4uLi5dIgorbXNnc3RyICJnaXQgcmVzZXQgLS1wYXRjaCBbPMOhcmJvbC1pc21vPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1peGVkIgorbXNnc3RyICJtZXpjbGFkbyIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAic29mdCIKK21zZ3N0ciAic3VhdmUiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImhhcmQiCittc2dzdHIgImR1cm8iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1lcmdlIgorbXNnc3RyICJmdXNpb25hciIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAia2VlcCIKK21zZ3N0ciAibWFudGVuZXIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4MgorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICJObyBoYXkgdW4gSEVBRCB2w6FsaWRvLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjg0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiRmFsbMOzIGFsIGVuY29udHJhciBlbCBIRUFEIGRlbCDDoXJib2wuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIkZhbGzDsyBhbCBlbmNvbnRyYXIgw6FyYm9sIGRlICVzLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBRCBlc3TDoSBhaG9yYSBlbiAlcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICJObyBzZSBwdWVkZSByZWFsemlhciB1biByZXNldCAlcyAgZW4gbWVkaW8gZGUgdW5hIGZ1c2nDs24uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk0IGJ1aWx0aW4vc3Rhc2guYzo1MjAgYnVpbHRpbi9zdGFzaC5jOjU5NQorIzogYnVpbHRpbi9zdGFzaC5jOjYxOQorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgInNlciBzaWxlbmNpb3NvLCBzb2xvIHJlcG9ydGFyIGVycm9yZXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTYKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAicmVpbmljaWFyIEhFQUQgZSBpbmRleCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NworbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAicmVpbmljaWFyIHNvbG8gSEVBRCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5OSBidWlsdGluL3Jlc2V0LmM6MzAxCittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAicmVpbmljaWFyIEhFQUQsIMOtbmRpY2UgeSDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwMworbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAicmVpbmljaWFyIEhFQUQgcGVybyBtYW50ZW5lciBjYW1iaW9zIGxvY2FsZXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDkKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAiIgorImdyYWJhciBzb2xvIGVsIGhlY2hvIGRlIHF1ZSBsYXMgcnV0YXMgZWxpbWluYWRhcyBzZXLDoW4gYWdyZWdhZGFzIGRlc3B1w6lzIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZXZpc2lvbi4iCittc2dzdHIgIkZhbGzDsyBhbCByZXNvbHZlciAnJXMnIGNvbW8gdW5hIHJldmlzacOzbiB2w6FsaWRhLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIkZhbGzDsyBhbCByZXNvbHZlciAnJXMnIGNvbW8gdW4gw6FyYm9sIHbDoWxpZG8uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzYwCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICItLXBhdGNoIGVzIGluY29tcGF0aWJsZSBjb24gLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tbWl4ZWQgY29uIHJ1dGFzIGhhIHNpZG8gZGVwcmVjYWRvOyB1c2UgJ2dpdCByZXNldCAtLSA8cnV0YXM+JyBlbiBjYW1iaW8uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgaGFjZXIgdW4gcmVzZXQgJXMgY29uIHJ1dGFzLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJXMgcmVzZXQgbm8gZXN0w6EgcGVybWl0aWRvIGVuIHVuIHJlcG9zaXRvcmlvIHZhY8OtbyIKKworIzogYnVpbHRpbi9yZXNldC5jOjM5MQorbXNnaWQgIi1OIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLW1peGVkIgorbXNnc3RyICItTiBzw7NsbyBwdWVkZSBzZXIgdXNhZGEgY29uIC0tbWl4ZWQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MTIKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAiQ2FtYmlvcyBmdWVyYSBkZWwgw6FyZWEgZGUgc3RhZ2UgdHJhcyBlbCByZXNldDoiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0LiAgWW91IGNhblxuIgorInVzZSAnLS1xdWlldCcgdG8gYXZvaWQgdGhpcy4gIFNldCB0aGUgY29uZmlnIHNldHRpbmcgcmVzZXQucXVpZXQgdG8gdHJ1ZVxuIgorInRvIG1ha2UgdGhpcyB0aGUgZGVmYXVsdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlRvbcOzICUuMmYgc2VndW5kb3MgZW4gZW51bWVyYXIgY2FtYmlvcyBmdWVyYSBkZSBzdGFnZSB0cmFzIGVsIHJlaW5pY2lvLiAgIgorIlB1ZWRlc1xuIgorInVzYXIgJy0tcXVpZXQnIHBhcmEgZXZpdGFyIGVzdG8uICBDb25maWd1cmEgbGEgb3BjacOzbiByZXNldC5xdWlldCBhIHRydWVcbiIKKyJwYXJhIHZvbHZlcmxvIGVuIGVsIGRlZmF1bHQuXG4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIHJlaW5pY2lhciBlbCDDrW5kaWNlIGEgbGEgcmV2aXNpw7NuICclcycuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDI5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZXNjcmliaXIgdW4gbnVldm8gYXJjaGl2byDDrW5kaWNlLiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ5OQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGFuZCAtLW1pc3NpbmciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNvbWJpbmFyIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIHkgLS1taXNzaW5nIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NTYwCittc2dpZCAib2JqZWN0IGZpbHRlcmluZyByZXF1aXJlcyAtLW9iamVjdHMiCittc2dzdHIgImZpbHRyYWRvIGRlIG9iamV0b3MgcmVxdWllcmUgLS1vYmplY3RzIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NjEwCittc2dpZCAicmV2LWxpc3QgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5IG9mIG5vdGVzIgorbXNnc3RyICJyZXYtbGlzdCBubyBzb3BvcnRhIG1vc3RyYXIgbm90YXMiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo2MTUKK21zZ2lkICJtYXJrZWQgY291bnRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1vYmplY3RzIgorbXNnc3RyICJjb250ZW8gZGUgbWFyY2FzIGVzIGluY29tcGF0aWJsZSBjb24gLS1vYmplY3RzIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQwOAorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3BjaW9uZXM+XSAtLSBbPGFyZ3M+Li4uXSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTMKK21zZ2lkICJrZWVwIHRoZSBgLS1gIHBhc3NlZCBhcyBhbiBhcmciCittc2dzdHIgIm1hbnRlbmVyIGVsIGAtLWAgcGFzYWRvIGNvbW8gdW4gYXJnIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxNQorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAiZGV0ZW5lciBhbsOhbGlzaXMgdHJhcyBlbCBwcmltZXIgYXJndW1lbnRvIHF1ZSBubyBlcyBvcGNpw7NuIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxOAorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgInNhbGlkYSBlbiBmb3JtdWxhcmlvIGxhcmdvIGRlIGF0YXNjbyIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1NTEKK21zZ2lkICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcGNpb25lcz5dIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcGNpb25lcz5dIFs8YXJnPi4uLl1cbiIKKyJcbiIKKyJFamVjdXRlIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgcGFyYSBtw6FzIGluZm9ybWFjacOzbiBzb2JyZSBlbCBwcmltZXIgIgorInVzby4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQKK21zZ2lkICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJldmVydCBbPG9wY2lvbmVzPl0gPGNvbW1pdC1pc2g+Li4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjI1Cittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCByZXZlcnQgPHN1YmNvbWFuZG8+IgorCisjOiBidWlsdGluL3JldmVydC5jOjMwCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIFs8b3BjaW9uZXM+XSA8Y29tbWl0LWlzaD4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzEKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbWFuZG8+IgorCisjOiBidWlsdGluL3JldmVydC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8iCittc2dzdHIgIm9wY2nDs24gYCVzJyBlc3BlcmEgdW4gdmFsb3IgbnVtw6lyaWNvIG1heW9yIGEgY2VybyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJXM6ICVzIG5vIHB1ZWRlIHNlciB1c2FkbyBjb24gJXMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAyCittc2dpZCAiZW5kIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAiZmluYWxpemFyIHNlY3VlbmNpYSByZXZlcnQgbyBjaGVycnktcGljayIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDMKK21zZ2lkICJyZXN1bWUgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJyZXN1bWlyIHNlY3VlbmNpYSByZXZlcnQgbyBjaGVycnktcGljayIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDQKK21zZ2lkICJjYW5jZWwgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJjYW5jZWxhciBzZWN1ZW5jaWEgcmV2ZXJ0IG8gY2hlcnJ5LXBpY2siCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA1Cittc2dpZCAic2tpcCBjdXJyZW50IGNvbW1pdCBhbmQgY29udGludWUiCittc2dzdHIgInNhbHRhciBlbCBjb21taXQgYWN0dWFsIHkgY29udGludWFyIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICJubyByZWFsaXphciBjb21taXQgZGUgZm9ybWEgYXV0b23DoXRpY2EiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA4Cittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImVkaXRhciBlbCBtZW5zYWplIGRlIGNvbW1pdCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTEKK21zZ2lkICJwYXJlbnQtbnVtYmVyIgorbXNnc3RyICJuw7ptZXJvLWRlLXBhZHJlIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMgorbXNnaWQgInNlbGVjdCBtYWlubGluZSBwYXJlbnQiCittc2dzdHIgInNlbGVjY2lvbmFyIGVsIHBhZHJlIHByaW5jaXBhbCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTQKK21zZ2lkICJtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiZXN0cmF0ZWdpYSBkZSBmdXNpw7NuIgorCisjOiBidWlsdGluL3JldmVydC5jOjExNgorbXNnaWQgIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIm9wY2nDs24gcGFyYSBlc3RyYXRlZ2lhIGRlIGZ1c2nDs24iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI1Cittc2dpZCAiYXBwZW5kIGNvbW1pdCBuYW1lIgorbXNnc3RyICJhZGp1bnRhciBlbCBub21icmUgZGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjcKK21zZ2lkICJwcmVzZXJ2ZSBpbml0aWFsbHkgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAicHJlc2VydmFyIGNvbW1pdHMgaW5pY2lhbGVzIHZhY8Otb3MiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI5Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIm1hbnRlbmVyIGNvbW1pdHMgcmVkdW5kYW50ZXMsIHZhY8Otb3MiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjMyCittc2dpZCAicmV2ZXJ0IGZhaWxlZCIKK21zZ3N0ciAiZmFsbMOzIGFsIHJldmVydGlyIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0NQorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAiY2hlcnJ5LXBpY2sgZmFsbMOzIgorCisjOiBidWlsdGluL3JtLmM6MTkKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBbPG9wY2lvbmVzPl0gWy0tXSA8YXJjaGl2bz4uLi4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyMDcKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorImVsIHNpZ3VpZW50ZSBhcmNoaXZvIHRpZW5lIGNvbnRlbmlkbyBlbiBzdGFnZSBkaWZlcmVudGUgYWwgYXJjaGl2b1xuIgorInkgYSBIRUFEOiIKK21zZ3N0clsxXSAiIgorImxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHRpZW5lbiBjb250ZW5pZG8gZGlmZXJlbnRlIGEgbG9zIG1pc21vc1xuIgorInkgYSBIRUFEOiIKKworIzogYnVpbHRpbi9ybS5jOjIxMgorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKHVzYSAtZiBwYXJhIGZvcnphciBzdSBlbGltaW5hY2nDs24pIgorCisjOiBidWlsdGluL3JtLmM6MjE2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ3N0clswXSAiZWwgc2lndWllbnRlIGFyY2hpdm8gdGllbmUgY2FtYmlvcyBlbiBzdGFnZSBlbiBlbCDDrW5kaWNlOiIKK21zZ3N0clsxXSAibG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3MgdGllbmVuIGNhbWJpb3MgZW4gc3RhZ2UgZW4gZWwgw61uZGljZToiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjAgYnVpbHRpbi9ybS5jOjIyOQorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKHVzYSAtLWNhY2hlZCBwYXJhIGNvbnNlcnZhciBlbCBhcmNoaXZvLCBvIC1mIHBhcmEgZm9yemFyIHN1IGVsaW1pbmFjacOzbikiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjYKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dzdHJbMF0gImVsIHNpZ3VpZW50ZSBhcmNoaXZvIHRpZW5lIG1vZGlmaWNhY2lvbmVzIGxvY2FsZXM6IgorbXNnc3RyWzFdICJsb3Mgc2lndWllbnRlcyBhcmNoaXZvcyB0aWVuZW4gbW9kaWZpY2FjaW9uZXMgbG9jYWxlczoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDMKK21zZ2lkICJkbyBub3QgbGlzdCByZW1vdmVkIGZpbGVzIgorbXNnc3RyICJubyBsaXN0YXIgYXJjaGl2b3MgZWxpbWluYWRvIgorCisjOiBidWlsdGluL3JtLmM6MjQ0Cittc2dpZCAib25seSByZW1vdmUgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgInNvbG8gZWxpbWluYXIgZGVsIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDUKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAic29icmVzY3JpYmlyIGVsIGNoZWNrIGRlIGFjdHVhbGl6YWRvIgorCisjOiBidWlsdGluL3JtLmM6MjQ2Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgInBlcm1pdGlyIGVsaW1pbmFyIGRlIGZvcm1hIHJlY3Vyc2l2YSIKKworIzogYnVpbHRpbi9ybS5jOjI0OAorbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICJzYWxpciBjb24gZXN0YWRvIGNlcm8gaW5jbHVzbyBzaSBuYWRhIGNvaW5jaWRlIgorCisjOiBidWlsdGluL3JtLmM6MjgyCittc2dpZCAiTm8gcGF0aHNwZWMgd2FzIGdpdmVuLiBXaGljaCBmaWxlcyBzaG91bGQgSSByZW1vdmU/IgorbXNnc3RyICJTZSBlbnRyZWfDsyB1biBudWV2byBwYXRoc3BlYy4gwr9RdcOpIGFyY2hpdm9zIGRlYmVyw61hIGVsaW1pbmFyPyIKKworIzogYnVpbHRpbi9ybS5jOjMwNQorbXNnaWQgInBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisicG9yIGZhdm9yIGFncmVnYSBlbCBzdGFnZSBkZSB0dXMgY2FtYmlvcyBhIC5naXRtb2R1bGVzIG8gcmVhbGl6YSB1biBzdGFzaCAiCisicGFyYSBwcm9jZWRlciIKKworIzogYnVpbHRpbi9ybS5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICJubyBlbGltaW5hbmRvICclcycgZGUgbWFuZXJhIHJlY3Vyc2l2YSBzaW4gLXIiCisKKyM6IGJ1aWx0aW4vcm0uYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJnaXQgcm06IG5vIGVzIHBvc2libGUgZWxpbWluYXIgJXMiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MjAKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiAiCisiWzxyZWY+Li4uXVxuIgorIiAgLS1hbGwgeSBlc3BlY2lmaWNhY2lvbmVzIDxyZWY+IGV4cGzDrWNpdGFzIHNvbiBtdXR1YW1lbnRlIGV4Y2x1c2l2YXMuIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MworbXNnaWQgInJlbW90ZSBuYW1lIgorbXNnc3RyICJub21icmUgcmVtb3RvIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NworbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICJ1c2FyIHByb3RvY29sbyBSUEMgc2luIGVzdGFkbyIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzgKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGVlciByZWZzIGRlIHN0ZGluIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OQorbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgIm1vc3RyYXIgc3RhdHVzIGRlbCByZW1vdGUgaGVscGVyIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTQKK21zZ2lkICJnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzaG9ydGxvZyBbPG9wY2lvbmVzPl0gWzxyYW5nby1kZS1yZXZpc2nDs24+XSBbWy0tXSA8cnV0YT4uLi5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTUKK21zZ2lkICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3Jsb2cgWzxvcGNpb25lcz5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY0Cittc2dpZCAiR3JvdXAgYnkgY29tbWl0dGVyIHJhdGhlciB0aGFuIGF1dGhvciIKK21zZ3N0ciAiQWdydXBhciBwb3IgY29tbWl0dGVyIGVuIGx1Z2FyIGRlIGF1dG9yIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY2Cittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICJvcmRlbmFyIHNhbGlkYSBkZSBhY3VlcmRvIGFsIG7Dum1lcm8gZGUgY29tbWl0cyBwb3IgYXV0b3IiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjgKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAiU3VwcmltaXIgZGVzY3JpcGNpw7NuIGRlIGNvbW1pdHMsIHNvbG8gcHJvdmVlciBjdWVudGEgZGUgY29tbWl0cyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgIk1vc3RyYXIgbGEgZGlyZWNjacOzbiBkZSBjb3JyZW8gZGUgY2FkYSBhdXRvciIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MQorbXNnaWQgIjx3PlssPGkxPlssPGkyPl1dIgorbXNnc3RyICI8dz5bLDxpMT5bLDxpMj5dXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MgorbXNnaWQgIkxpbmV3cmFwIG91dHB1dCIKK21zZ3N0ciAiU2FsaWRhIGRlIGzDrW5lYSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjMwMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBnaXZlbiBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgImRlbWFzaWFkb3MgYXJndW1lbnRvcyBkYWRvcyBmdWVyYSBkZWwgcmVwb3NpdG9yaW8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxMworbXNnaWQgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTcKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWY+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIKK21zZ3N0clswXSAiaWdub3JhbmRvICVzOyBubyBzZSBwdWVkZSBtYW5lamFyIG3DoXMgZGUgJWQgcmVmIgorbXNnc3RyWzFdICJpZ25vcmFuZG8gJXM7IG5vIHNlIHB1ZWRlIG1hbmVqYXIgbcOhcyBkZSAlZCByZWZzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG1hdGNoaW5nIHJlZnMgd2l0aCAlcyIKK21zZ3N0ciAibm8gaGF5IHJlZnMgcXVlIGNvbmN1ZXJkZW4gY29uICVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ1Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICJtb3N0cmFyIHJhbWFzIGxvY2FsZXMgeSBkZSByYXN0cmVvIHJlbW90byIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NworbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJtb3N0cmFyIHJhbWFzIGRlIHJhc3RyZW8gcmVtb3RvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ5Cittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpZW5kbyBhIGxhIHJhbWEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTEKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAibW9zdHJhciA8bj4gY29tbWl0cyBtw6FzIHRyYXMgZW5jb250cmFyIGVsIGFuY2VzdHJvIGNvbcO6biIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MworbXNnaWQgInN5bm9ueW0gdG8gbW9yZT0tMSIKK21zZ3N0ciAic2luw7NuaW1vIGRlIG3DoXM9LTEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTQKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAic3VwcmltaXIgc3RyaW5ncyBkZSBub21icmUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTYKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiaW5jbHVpciBsYSByYW1hIGFjdHVhbCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1OAorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAibm9tYnJhciBjb21taXRzIGNvbiBzdXMgbm9tYnJlcyBkZSBvYmpldG8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjAKK21zZ2lkICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIgorbXNnc3RyICJtb3N0cmFyIGJhc2VzIGRlIGZ1c2nDs24gcG9zaWJsZXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjIKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICJtb3N0cmFyIHJlZnMgaW5hbGNhbnphYmxlcyBwb3IgbmluZ8O6biBvdHJvIHJlZiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NAorbXNnaWQgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIKK21zZ3N0ciAibW9zdHJhciBjb21taXRzIGVuIG9yZGVuIHRvcG9sw7NnaWNvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY3Cittc2dpZCAic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giCittc2dzdHIgIm1vc3RyYXIgc29sbyBjb21taXRzIHF1ZSBubyBlc3TDoW4gZW4gbGEgcHJpbWVyYSByYW1hIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY5Cittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICJtb3N0cmFyIGZ1c2lvbmVzIGFsY2FuemFibGVzIHNvbG8gcG9yIHVuYSBwdW50YSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MQorbXNnaWQgInRvcG9sb2dpY2FsbHkgc29ydCwgbWFpbnRhaW5pbmcgZGF0ZSBvcmRlciB3aGVyZSBwb3NzaWJsZSIKK21zZ3N0ciAib3JkZW4gdG9wb2zDs2dpY28sIG1hbnRlbmllbmRvIGVsIG9yZGVuIGRlIGZlY2hhcyBkb25kZSBzZWEgcG9zaWJsZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw8YmFzZT5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc1Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgIm1vc3RyYXIgPG4+IGVudHJhZGFzIG3DoXMgcmVjaWVudGVzIGRlIHJlZi1sb2cgY29tZW56YW5kbyBkZXNkZSBsYSBiYXNlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzExCittc2dpZCAiIgorIi0tcmVmbG9nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQgb3IgLS1tZXJnZS1iYXNlIgorbXNnc3RyICIiCisiLS1yZWZsb2cgbm8gZXMgY29tcGF0aWJsZSBjb24gLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvIC0tbWVyZ2UtYmFzZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczNQorbXNnaWQgIm5vIGJyYW5jaGVzIGdpdmVuLCBhbmQgSEVBRCBpcyBub3QgdmFsaWQiCittc2dzdHIgIm5vIHNlIGRpZXJvbiByYW1hcywgeSBlbCBIRUFEIG5vIGVzIHbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MzgKK21zZ2lkICItLXJlZmxvZyBvcHRpb24gbmVlZHMgb25lIGJyYW5jaCBuYW1lIgorbXNnc3RyICJvcGNpw7NuIC0tcmVmbG9nIG5lY2VzaXRhIHVuIG5vbWJyZSBkZSByYW1hIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgJWQgZW50cnkgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ2lkX3BsdXJhbCAib25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dzdHJbMF0gInNvbG8gJWQgZW50cmFkYSBwdWVkZSBzZXIgbW9zdHJhZGEgYSBsYSB2ZXouIgorbXNnc3RyWzFdICJzb2xvICVkIGVudHJhZGFzIHB1ZWRlbiBzZXIgbW9zdHJhZGFzIGEgbGEgdmV6LiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZiAlcyIKK21zZ3N0ciAibm8gZXhpc3RlIGVsIHJlZiAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXYuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXZzLiIKK21zZ3N0clswXSAibm8gc2UgcHVlZGUgbWFuZWphciBtw6FzIGRlICVkIHJldi4iCittc2dzdHJbMV0gIm5vIHNlIHB1ZWRlIG1hbmVqYXIgbcOhcyBkZSAlZCByZXZzLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiclcycgbm8gZXMgdW5hIHJlZiB2w6FsaWRhLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmluZCBjb21taXQgJXMgKCVzKSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZW5jb250cmFyIGVsIGNvbW1pdCAlcyAoJXMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTIKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXRyw7NuPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMworbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXRyw7NuPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjIKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICJzb2xvIG1vc3RyYXIgdGFncyAocHVlZGUgc2VyIGNvbWJpbmFkbyBjb24gaGVhZHMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYzCittc2dpZCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIKK21zZ3N0ciAic29sbyBtb3N0cmFyIGhlYWRzIChwdWVkZSBzZXIgY29tYmluYWRvIGNvbiB0YWdzKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NAorbXNnaWQgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgcmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiCittc2dzdHIgInJldmlzYXIgcmVmZXJlbmNpYXMgbcOhcyBlc3RyaWN0YW1lbnRlLCByZXF1aWVyZSBydXRhIGRlIHJlZiBleGFjdGEiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjcgYnVpbHRpbi9zaG93LXJlZi5jOjE2OQorbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIKK21zZ3N0ciAibW9zdHJhciBsYSByZWZlcmVuY2lhIGRlIEhFQUQsIGluY2x1c28gc2kgc2UgZmlsdHJhcmEiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzEKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAidGFncyBkZSBkZWZlcmVuY2lhIGVuIElEcyBkZSBvYmpldG8iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzMKK21zZ2lkICJvbmx5IHNob3cgU0hBMSBoYXNoIHVzaW5nIDxuPiBkaWdpdHMiCittc2dzdHIgInNvbG8gbW9zdHJhciBoYXNoIFNIQTEgdXNhbmRvIDxuPiBkw61naXRvcyIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3NworbXNnaWQgImRvIG5vdCBwcmludCByZXN1bHRzIHRvIHN0ZG91dCAodXNlZnVsIHdpdGggLS12ZXJpZnkpIgorbXNnc3RyICJubyBtb3N0cmFyIHJlc3VsdGFkb3MgZW4gc3Rkb3V0ICjDunRpbCBjb24gLS12ZXJpZnkpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAibW9zdHJhciByZWZzIGRlIHN0ZGluIHF1ZSBubyBlc3TDoW4gZW4gZWwgcmVwb3NpdG9yaW8gbG9jYWwiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjEKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGFkZHxkaXNhYmxlKSA8b3B0aW9ucz4iCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgKGluaXR8bGlzdHxzZXR8YWRkfGRpc2FibGUpIDxvcGNpb25lcz4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NjQKK21zZ2lkICJ0aGlzIHdvcmt0cmVlIGlzIG5vdCBzcGFyc2UgKHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBub3QgZXhpc3QpIgorbXNnc3RyICIiCisiZXN0ZSDDoXJib2wgZGUgdHJhYmFqbyBubyB0aWVuZSBzcGFyc2UgKGFyY2hpdm8gc3BhcmVzZS1jaGVja291dCB0YWwgdmV6IG5vICIKKyJleGlzdGUpIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIyNQorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciBzcGFyc2UtY2hlY2tvdXQgZmlsZSIKK21zZ3N0ciAiZmFsbMOzIGFsIGNyZWFyIGRpcmVjdG9yaW8gcGFyYSBlbCBhcmNoaXZvIHNwYXJzZS1jaGVja291dCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyNjYKK21zZ2lkICJmYWlsZWQgdG8gc2V0IGV4dGVuc2lvbnMud29ya3RyZWVDb25maWcgc2V0dGluZyIKK21zZ3N0ciAiZmFsbMOzIGFsIGNvbmZpZ3VyYXIgb3BjacOzbiBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI4MworbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCBbLS1jb25lXSIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IFstLWNvbmVdIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjMwMgorbXNnaWQgImluaXRpYWxpemUgdGhlIHNwYXJzZS1jaGVja291dCBpbiBjb25lIG1vZGUiCittc2dzdHIgImluaWNpYWxpemEgZWwgc3BhcnNlLWNoZWNrb3V0IGVuIG1vZG8gY29ubyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozMDgKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiaW5pY2lhbGl6YXIgc3BhcnNlLWNoZWNrb3V0IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgYWJyaXIgJyVzJyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG5vcm1hbGl6ZSBwYXRoICVzIgorbXNnc3RyICJubyBzZSBwdWRvIG5vcm1hbGl6YXIgbGEgcnV0YSAlcyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0MTAKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChzZXR8YWRkKSAoLS1zdGRpbiB8IDxwYXR0ZXJucz4pIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IChzZXR8YWRkKSAoLS1zdGRpbiB8IDxwYXRyb25lcz4pIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5xdW90ZSBDLXN0eWxlIHN0cmluZyAnJXMnIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGRlcXVvdGUgcGFyYSBsYSBjYWRlbmEgZGUgZXN0aWxvIEMgJyVzJyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0ODkgYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1MTMKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBleGlzdGluZyBzcGFyc2UtY2hlY2tvdXQgcGF0dGVybnMiCittc2dzdHIgIm5vIHNlIHB1ZG8gY2FyZ2FyIHBhdHJvbmVzIGRlIHNwYXJzZS1jaGVja291dCBleGlzdGVudGVzIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjU1OAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBzdGFuZGFyZCBpbiIKK21zZ3N0ciAibGVlciBwYXRyb25lcyBkZSBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1NjQKK21zZ2lkICJzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICJjb25maWd1cmFyIHBhdHJvbmVzIGRlIHNwYXJzZS1jaGVja291dCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1ODEKK21zZ2lkICJkaXNhYmxlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiZGVzaGFiaWxpdGFyIHNwYXJzZS1jaGVja291dCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1OTMKK21zZ2lkICJlcnJvciB3aGlsZSByZWZyZXNoaW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJlcnJvciBhbCByZWZyZXNjYXIgZGlyZWN0b3JpbyBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjIgYnVpbHRpbi9zdGFzaC5jOjM4Cittc2dpZCAiZ2l0IHN0YXNoIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBzdGFzaCBsaXN0IFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIzIGJ1aWx0aW4vc3Rhc2guYzo0MworbXNnaWQgImdpdCBzdGFzaCBzaG93IFs8b3B0aW9ucz5dIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHNob3cgWzxvcGNpb25lcz5dIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI0IGJ1aWx0aW4vc3Rhc2guYzo0OAorbXNnaWQgImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNQorbXNnaWQgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNiBidWlsdGluL3N0YXNoLmM6NjMKK21zZ2lkICJnaXQgc3Rhc2ggYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBicmFuY2ggPG5vbWJyZS1yYW1hPiBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNyBidWlsdGluL3N0YXNoLmM6NjgKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI4Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdXVxuIgorIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lbnNhamU+XVxuIgorIiAgICAgICAgICBbLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGFyY2hpdm8+IFstLXBhdGhzcGVjLWZpbGUtbnVsXV1cbiIKKyIgICAgICAgICAgWy0tXSBbPHBhdGhzcGVjPi4uLl1dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MzIgYnVpbHRpbi9zdGFzaC5jOjg1Cittc2dpZCAiIgorImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPG1lc3NhZ2U+XSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPG1lbnNhamU+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUzCittc2dpZCAiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU4Cittc2dpZCAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3MworbXNnaWQgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IgorbXNnc3RyICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWVuc2FqZT5dIFstcXwtLXF1aWV0XSA8Y29tbWl0PiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjc4Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVuc2FqZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICInJXMnIG5vIGVzIHVuIGNvbW1pdCBlc3RpbG8gc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDolcyIKK21zZ3N0ciAiU2UgZXNwZWNpZmljYXJvbiBkZW1hc2lhZGFzIHJldmlzaW9uZXM6ICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTYyIGdpdC1sZWdhY3ktc3Rhc2guc2g6NTQ5Cittc2dpZCAiTm8gc3Rhc2ggZW50cmllcyBmb3VuZC4iCittc2dzdHIgIk5vIHNlIGVuY29udHJhcm9uIGVudHJhZGFzIGRlIHN0YXNoLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiVzIG5vIGVzIHVuYSByZWZlcmVuY2lhIHbDoWxpZGEiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMjUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3NQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIGNvbiBwYXLDoW1ldHJvcyBubyBlc3TDoSBpbXBsZW1lbnRhZG8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MDQKK21zZ2lkICJjYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFwbGljYXIgdW4gc3Rhc2ggZW4gbWVkaW8gZGUgdW4gbWVyZ2UiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIGRpZmYgJXNeIS4iCittc2dzdHIgIm5vIHNlIHB1ZG8gZ2VuZXJhciBkaWZmICVzXiEuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDIyCittc2dpZCAiY29uZmxpY3RzIGluIGluZGV4LlRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICJjb25mbGljdG9zIGVuIMOtbmRpY2UuIEludGVudGUgc2luIC0taW5kZXguIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDI4Cittc2dpZCAiY291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZ3VhcmRhciBlbCDDrW5kaWNlIGRlbCDDoXJib2wiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MzcKK21zZ2lkICJjb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCIKK21zZ3N0ciAibm8gc2UgcHVlZGVuIHJlc3RhdXJhciBhcmNoaXZvcyBubyByYXN0cmVhZG9zIGRlIGxhIGVudHJhZGEgc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzIgorbXNnc3RyICJGdXNpb25hbmRvICVzIGNvbiAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ2MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjY4MQorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAiRWwgw61uZGljZSBubyBmdWUgc2FjYWRvIGRlIHN0YXNoLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUyMiBidWlsdGluL3N0YXNoLmM6NjIxCittc2dpZCAiYXR0ZW1wdCB0byByZWNyZWF0ZSB0aGUgaW5kZXgiCittc2dzdHIgImludGVudG8gZGUgcmVjcmVhciBlbCBpbmRleCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICVzICglcykiCittc2dzdHIgIkJvdGFkbyAlcyAoJXMpIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJXM6IE5vIHNlIHB1ZG8gYm9ycmFyIGVudHJhZGEgc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIiclcycgbm8gZXMgdW5hIHJlZmVyZW5jaWEgc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MzMgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2OTUKK21zZ2lkICJUaGUgc3Rhc2ggZW50cnkgaXMga2VwdCBpbiBjYXNlIHlvdSBuZWVkIGl0IGFnYWluLiIKK21zZ3N0ciAiTGEgZW50cmFkYSBkZSBzdGFzaCBzZSBndWFyZMOzIGVuIGNhc28gZGUgc2VyIG5lY2VzYXJpbyBudWV2YW1lbnRlLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjY1NiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcxMworbXNnaWQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiTm8gc2UgZXNwZWNpZmljw7MgZWwgbm9tYnJlIGRlIGxhIHJhbWEiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3OTYgYnVpbHRpbi9zdGFzaC5jOjgzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICVzIHdpdGggJXMiCittc2dzdHIgIk5vIHNlIHB1ZWRlIGFjdHVhbGl6YXIgJXMgY29uICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODE0IGJ1aWx0aW4vc3Rhc2guYzoxNDc4IGJ1aWx0aW4vc3Rhc2guYzoxNTQzCittc2dpZCAic3Rhc2ggbWVzc2FnZSIKK21zZ3N0ciAibWVuc2FqZSBkZSBzdGFzaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgyNAorbXNnaWQgIlwiZ2l0IHN0YXNoIHN0b3JlXCIgcmVxdWlyZXMgb25lIDxjb21taXQ+IGFyZ3VtZW50IgorbXNnc3RyICJcImdpdCBzdGFzaCBzdG9yZVwiIHJlcXVpZXJlIHVuIGFyZ3VtZW50byA8Y29tbWl0PiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEwNDkgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTgKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICJTaW4gY2FtYmlvcyBzZWxlY2Npb25hZG9zIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE0OSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE1MAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICJBw7puIG5vIHRpZW5lcyB1biBjb21taXQgaW5pY2lhbCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNzYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNjUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZ3VhcmRhciBlbCBlc3RhZG8gYWN0dWFsIGRlbCDDrW5kaWNlIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE4NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE4MAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIk5vIHNlIHB1ZWRlbiBndWFyZGFyIGxvcyBhcmNoaXZvcyBubyByYXN0cmVhZG9zIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE5NiBidWlsdGluL3N0YXNoLmM6MTIwNSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIwMQorIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTQKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZ3VhcmRhciBlbCBlc3RhZG8gYWN0dWFsIGRlbCDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyMzMgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMzQKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZ3JhYmFyIGVsIGVzdGFkbyBkZWwgw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjgyIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzM4Cittc2dpZCAiQ2FuJ3QgdXNlIC0tcGF0Y2ggYW5kIC0taW5jbHVkZS11bnRyYWNrZWQgb3IgLS1hbGwgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgdXNhciAtLXBhdGNoIHkgLS1pbmNsdWRlLXVudHJhY2tlZCBvIC0tYWxsIGFsIG1pc21vIHRpZW1wbyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOTgKK21zZ2lkICJEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/IgorbXNnc3RyICLCv09sdmlkYXN0ZSAnZ2l0IGFkZCc/IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMxMyBnaXQtbGVnYWN5LXN0YXNoLnNoOjM0NgorbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAiTm8gaGF5IGNhbWJpb3MgbG9jYWxlcyBwYXJhIGd1YXJkYXIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzIwIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzUxCittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIk5vIHNlIHB1ZWRlIGluaWNpYWxpemFyIHN0YXNoIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMzNSBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1NQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZ3VhcmRhciBlbCBlc3RhZG8gYWN0dWFsIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJXMiCittc2dzdHIgIkRpcmVjdG9yaW8gZGUgdHJhYmFqbyBndWFyZGFkbyB5IGVzdGFkbyBkZSDDrW5kaWNlICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQzMCBnaXQtbGVnYWN5LXN0YXNoLnNoOjM4NQorbXNnaWQgIkNhbm5vdCByZW1vdmUgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAiTm8gc2UgcHVlZGVuIGVsaW1pbmFyIGNhbWJpb3MgZGVsIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2OSBidWlsdGluL3N0YXNoLmM6MTUzNAorbXNnaWQgImtlZXAgaW5kZXgiCittc2dzdHIgIm1hbnRlbmVyIGluZGV4IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3MSBidWlsdGluL3N0YXNoLmM6MTUzNgorbXNnaWQgInN0YXNoIGluIHBhdGNoIG1vZGUiCittc2dzdHIgInN0YXNoIGVuIG1vZG8gcGF0Y2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDcyIGJ1aWx0aW4vc3Rhc2guYzoxNTM3Cittc2dpZCAicXVpZXQgbW9kZSIKK21zZ3N0ciAibW9kbyB0cmFucXVpbG8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDc0IGJ1aWx0aW4vc3Rhc2guYzoxNTM5Cittc2dpZCAiaW5jbHVkZSB1bnRyYWNrZWQgZmlsZXMgaW4gc3Rhc2giCittc2dzdHIgImluY2x1aXIgYXJjaGl2b3Mgc2luIHNlZ3VpbWllbnRvIGVuIHN0YXNoIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3NiBidWlsdGluL3N0YXNoLmM6MTU0MQorbXNnaWQgImluY2x1ZGUgaWdub3JlIGZpbGVzIgorbXNnc3RyICJpbmNsdWlyIGFyY2hpdm9zIGlnbm9yYWRvcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4ZWMgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZWplY3V0YXIgJXMiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM3Cittc2dpZCAic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIgorbXNnc3RyICIiCisic2FsdGFyIHkgYm9ycmFyIHRvZGFzIGxhcyBsw61uZWFzIHF1ZSBjb21pZW56YW4gY29uIHVuIGNhcsOhY3RlciBkZSBjb21lbnRhcmlvIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzo0MAorbXNnaWQgInByZXBlbmQgY29tbWVudCBjaGFyYWN0ZXIgYW5kIHNwYWNlIHRvIGVhY2ggbGluZSIKK21zZ3N0ciAiYW50ZXBvbmVyIGNhcsOhY3RlciBkZSBjb21lbnRhcmlvIHkgZXNwYWNpbyBhIGNhZGEgbMOtbmVhIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0aW5nIGEgZnVsbCByZWYgbmFtZSwgZ290ICVzIgorbXNnc3RyICJTZSBlc3BlcmFiYSB1biBub21icmUgZGUgcmVmIGNvbXBsZXRvLCBzZSBvYnR1dm8gJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NAorbXNnaWQgInN1Ym1vZHVsZS0taGVscGVyIHByaW50LWRlZmF1bHQtcmVtb3RlIHRha2VzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAic3Vib21kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUgbm8gdG9tYSBhcmd1bWVudG9zIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgcXVpdGFyIHVuIGNvbXBvbmVudGUgZGVsIHVybCAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDEwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk1Cittc2dpZCAiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAiYW5jaG8gYWx0ZXJuYXRpdm8gcGFyYSBydXRhcyByZWxhdGl2YXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MTUKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTxydXRhPl0gWzxydXRhPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NzIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYzMAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcycgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgIk5vIHNlIGVuY29udHLDsyB1cmwgcGFyYSBsYSBydXRhIGRlbCBzdWJtw7NkdWxvICclcycgZW4gLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyVzJ1xuIgorbXNnc3RyICJFbnRyYW5kbyAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyBmb3IgJXNcbiIKKyIuIgorbXNnc3RyICIiCisicnVuX2NvbW1hbmQgZGV2b2x2acOzIGVzdGFkbyBuby1jZXJvIHBhcmEgJXNcbiIKKyIuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgd2hpbGUgcmVjdXJzaW5nIGluIHRoZSBuZXN0ZWQgIgorInN1Ym1vZHVsZXMgb2YgJXNcbiIKKyIuIgorbXNnc3RyICIiCisicnVuX2NvbW1hbmQgZGV2b2x2acOzIGVzdGFkbyBuby1jZXJvIG1pZW50cmFzIGN1cnNhYmEgZW4gbG9zIHN1Ym3Ds2R1bG9zICIKKyJhbmlkYWRvcyBkZSAlc1xuIgorIi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NjUKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2YgZW50ZXJpbmcgZWFjaCBzdWJtb2R1bGUgY29tbWFuZCIKK21zZ3N0ciAiU3VwcmltZSBsYSBzYWxpZGEgYWwgaW5pY2lhbGl6YXIgY2FkYSBjb21hbmRvIGRlIHN1Ym3Ds2R1bG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NjcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNjMKK21zZ2lkICJSZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgIlJlY3Vyc2FyIGVuIHN1Ym3Ds2R1bG9zIGFuaWRhZG9zIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTcyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWy0tXSA8Y29tbWFuZD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBmb3JlYWNoIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gPGNvbWFuZG8+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgbG9vayB1cCBjb25maWd1cmF0aW9uICclcycuIEFzc3VtaW5nIHRoaXMgcmVwb3NpdG9yeSBpcyBpdHMgb3duICIKKyJhdXRob3JpdGF0aXZlIHVwc3RyZWFtLiIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZG8gZW5jb250cmFyIGNvbmZpZ3VyYWNpw7NuICclcycuIEFzdW1pZW5kbyBxdWUgZXN0ZSByZXBvc2l0b3JpbyBlcyAiCisic3UgcHJvcGlvIHVwc3RyZWFtIGF1dG9yaXRhdGl2by4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiRmFsbMOzIGFsIHJlZ2lzdHJhciBlbCB1cmwgcGFyYSBsYSBydXRhIGRlbCBzdWJtw7NkdWxvICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSByZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiU3VibcOzZHVsbyAnJXMnICglcykgcmVnaXN0cmFkbyBwYXJhIHJ1dGEgJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGNvbW1hbmQgdXBkYXRlIG1vZGUgc3VnZ2VzdGVkIGZvciBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICIiCisicGVsaWdybzogbW9kbyBkZSBhY3R1YWxpemFjacOzbiBkZSBjb21hbmRvcyBzdWdlcmlkbyBwYXJhIGVsIHN1Ym3Ds2R1bG8gJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorIkVycm9yIGFsIHJlZ2lzdHJhciBlbCBtb2RvIGRlIGFjdHVhbGl6YWNpw7NuIHBhcmEgbGEgcnV0YSBkZWwgc3VibcOzZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzEwCittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IGZvciBpbml0aWFsaXppbmcgYSBzdWJtb2R1bGUiCittc2dzdHIgIlN1cHJpbWUgbGEgc2FsaWRhIHBhcmEgaW5pY2lhbGl6YXIgdW4gc3VibcOzZHVsbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8b3B0aW9ucz5dIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPG9wY2lvbmVzPl0gWzxwYXRoPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3ODkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICIiCisibm8gc2UgaGEgZW5jb250cmFkbyBtYXBlbyBkZSBzdWJtw7NkdWxvcyBlbiAuZ2l0bW9kdWxlcyBwYXJhIGxhIHJ1dGEgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHJlZiBpbnNpZGUgdGhlIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJubyBwdWRvIHJlc29sdmVyIHJlZiBkZSBIRUFEIGRlbnRybyBkZWwgc3VibcOzZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODY0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgImZhbGzDsyBhbCByZWN1cnNhciBlbiBlbCBzdWJtw7NkdWxvICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTkKK21zZ2lkICJTdXBwcmVzcyBzdWJtb2R1bGUgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAiU3VwcmltaXIgb3V0cHV0IGRlbCBlc3RhZG8gZGVsIHN1Ym3Ds2R1bG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODkKK21zZ2lkICIiCisiVXNlIGNvbW1pdCBzdG9yZWQgaW4gdGhlIGluZGV4IGluc3RlYWQgb2YgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIHN1Ym1vZHVsZSAiCisiSEVBRCIKK21zZ3N0ciAiIgorIlVzYXIgZWwgY29tbWl0IGd1YXJkYWRvIGVuIGVsIMOtbmRpY2UgZW4gbHVnYXIgZGVsIGd1YXJkYWRvIGVuIGVsIHN1Ym3Ds2R1bG8gIgorIkhFQUQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4OTAKK21zZ2lkICJyZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgInJlY3Vyc2FyIGVuIHN1Ym3Ds2R1bG9zIGFuaWRhZG9zIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODk1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHJ1dGE+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkxOQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHJ1dGE+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJyVzJ1xuIgorbXNnc3RyICJTaW5jcm9uaXphbmRvIHVybCBkZWwgc3VibcOzZHVsbyBwYXJhICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgcmVnaXN0cmFyIGVsIHVybCBwYXJhIGxhIHJ1dGEgZGVsIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGdldCB0aGUgZGVmYXVsdCByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJlcnJvciBhbCBjb25zZWd1aXIgZWwgcmVtb3RvIHBvciBkZWZlY3RvIHBhcmEgZWwgc3VibcOzZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgImVycm9yIGFsIGFjdHVhbGl6YXIgZWwgcmVtb3RvIHBhcmEgZWwgc3VibcOzZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA2MQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBzeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwiCittc2dzdHIgIlN1cHJpbWUgbGEgc2FsaWRhIGRlbCB1cmwgZGVsIHN1Ym3Ds2R1bG8gcXVlIHNlIHNpbmNyb25pemEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDY4Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs8cnV0YT5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGEgLmdpdCBkaXJlY3RvcnkgKHVzZSAncm0gLXJmJyBpZiB5b3UgIgorInJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorIkVsIMOhcmJvbCBkZSB0cmFiYWpvIGRlbCBzdWJtw7NkdWxvICclcycgY29udGllbmUgdW4gZGlyZWN0b3JpbyAuZ2l0ICh1c2UgJ3JtIC0iCisicmYnIHNpIHJlYWxtZW50ZSBxdWllcmVzIGVsaW1pbmFybG8gaW5jbHV5ZW5kbyB0b2RvIGVuIHN1IGhpc3RvcmlhKSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkICIKKyJ0aGVtIgorbXNnc3RyICIiCisiRWwgw6FyYm9sIGRlIHRyYWJham8gZGVsIHN1Ym3Ds2R1bG8gJyVzJyBjb250aWVuZSBtb2RpZmljYWNpb25lcyBsb2NhbGVzOyB1c2EgIgorIictZicgcGFyYSBkZXNjYXJ0YXJsYXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIKK21zZ3N0ciAiRGlyZWN0b3JpbyAnJXMnIGxpbXBpYWRvXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgc3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnXG4iCittc2dzdHIgIk5vIHNlIHB1ZG8gZWxpbWluYXIgZWwgw6FyYm9sIGRlIHRyYWJham8gZGVsIHN1Ym3Ds2R1bG8gJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGVtcHR5IHN1Ym1vZHVsZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gY3JlYXIgZGlyZWN0b3JpbyB2YWPDrW8gZGUgc3VibcOzZHVsbyAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIgorbXNnc3RyICJTdWJtw7NkdWxvICclcycgKCVzKSBubyByZWdpc3RyYWRvIHBhcmEgcnV0YSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjAwCittc2dpZCAiUmVtb3ZlIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWVzIGV2ZW4gaWYgdGhleSBjb250YWluIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIiIKKyJSZW1vdmVyIMOhcmJvbGVzIGRlIHRyYWJham8gZGUgc3VibcOzZHVsb3MgaW5jbHVzbyBzaSBjb250aWVuZW4gY2FtYmlvcyBsb2NhbGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIwMQorbXNnaWQgIlVucmVnaXN0ZXIgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgIlF1aXRhciB0b2RvcyBsb3Mgc3VibcOzZHVsb3MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjA2Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8cGF0aD4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8cnV0YT4uLi5dXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMjAKK21zZ2lkICJVc2UgJy0tYWxsJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGVpbml0aWFsaXplIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICJVc2EgJy0tYWxsJyBzaSByZWFsbWVudGUgcXVpZXJlcyBkZXMtaW5pY2lhbGl6YXIgdG9kb3MgbG9zIHN1Ym3Ds2R1bG9zIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTI4OQorbXNnaWQgIiIKKyJBbiBhbHRlcm5hdGUgY29tcHV0ZWQgZnJvbSBhIHN1cGVycHJvamVjdCdzIGFsdGVybmF0ZSBpcyBpbnZhbGlkLlxuIgorIlRvIGFsbG93IEdpdCB0byBjbG9uZSB3aXRob3V0IGFuIGFsdGVybmF0ZSBpbiBzdWNoIGEgY2FzZSwgc2V0XG4iCisic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgdG8gJ2luZm8nIG9yLCBlcXVpdmFsZW50bHksIGNsb25lIHdpdGhcbiIKKyInLS1yZWZlcmVuY2UtaWYtYWJsZScgaW5zdGVhZCBvZiAnLS1yZWZlcmVuY2UnLiIKK21zZ3N0ciAiIgorIlVuYSBhbHRlcm5hdGl2YSBjYWxjdWxhZGEgYSBwYXJ0aXIgZGUgbGEgYWx0ZXJuYXRpdmEgZGUgdW4gc3VwZXJwcm95ZWN0byBubyAiCisiZXMgdsOhbGlkYS5cbiIKKyJQYXJhIHBlcm1pdGlyIHF1ZSBHaXQgY2xvbmUgc2luIHVuYSBhbHRlcm5hdGl2YSBlbiBlc2UgY2FzbywgZXN0YWJsZXpjYVxuIgorInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGEgJ2luZm8nIG8sIGRlIG1hbmVyYSBlcXVpdmFsZW50ZSwgY2xvbmFyICIKKyJjb25cbiIKKyInLS1yZWZlcmVuY2UtaWYtYWJsZScgZW4gbHVnYXIgZGUgJy0tcmVmZXJlbmNlJy4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzI4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBhZGQgYWx0ZXJuYXRlOiAlcyIKK21zZ3N0ciAic3VibcOzZHVsbyAnJXMnIG5vIHB1ZWRlIGFncmVnYXIgYWx0ZXJubzogJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJWYWxvciAnJXMnIHBhcmEgc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgbm8gZXMgcmVjb25vY2lkbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJWYWxvciAnJXMnIHBhcmEgc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIG5vIGVzIHJlY29ub2NpZG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk4Cittc2dpZCAid2hlcmUgdGhlIG5ldyBzdWJtb2R1bGUgd2lsbCBiZSBjbG9uZWQgdG8iCittc2dzdHIgImEgZG9uZGUgZWwgbnVldm8gc3VibcOzZHVsbyBzZXLDoSBjbG9uYWRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwMQorbXNnaWQgIm5hbWUgb2YgdGhlIG5ldyBzdWJtb2R1bGUiCittc2dzdHIgIm5vbWJyZSBkZWwgbnVldm8gc3VibcOzZHVsbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDQKK21zZ2lkICJ1cmwgd2hlcmUgdG8gY2xvbmUgdGhlIHN1Ym1vZHVsZSBmcm9tIgorbXNnc3RyICJ1cmwgZGUgZMOzbmRlIGNsb25hciBlbCBzdWJtw7NkdWxvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxMgorbXNnaWQgImRlcHRoIGZvciBzaGFsbG93IGNsb25lcyIKK21zZ3N0ciAicHJvZnVuZGlkYWQgcGFyYSBjbG9uZXMgc3VwZXJmaWNpYWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MjQKK21zZ2lkICJmb3JjZSBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICJmb3J6YXIgZWwgcHJvY2VzbyBkZSBjbG9uYWRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxNyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyNgorbXNnaWQgImRpc2FsbG93IGNsb25pbmcgaW50byBub24tZW1wdHkgZGlyZWN0b3J5IgorbXNnc3RyICJubyBwZXJtaXRpciBjbG9uYXIgZW4gZGlyZWN0b3Jpb3Mgbm8gdmFjw61vcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MjQKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD08cGF0aD5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxyZXBvc2l0b3J5Pl0gWy0tbmFtZSA8bmFtZT5dIFstLWRlcHRoIDxkZXB0aD5dIFstLXNpbmdsZS1icmFuY2hdIC0tdXJsICIKKyI8dXJsPiAtLXBhdGggPHBhdGg+IgorbXNnc3RyICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD08cnV0YT5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxyZXBvc2l0b3Jpbz5dIFstLW5hbWUgPG5vbWJyZT5dIFstLWRlcHRoIDxwcm9mdW5kaWRhZD5dIFstLXNpbmdsZS1icmFuY2hdIC0tIgorInVybCA8dXJsPiAtLXBhdGggPHJ1dGE+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBjcmVhdGUvdXNlICclcycgaW4gYW5vdGhlciBzdWJtb2R1bGUncyBnaXQgZGlyIgorbXNnc3RyICJyZWNoYXphbmRvIGNyZWFyL3VzYXIgJyVzJyBlbiBlbCBkaXJlY3RvcmlvIGRlIGdpdCBkZSBvdHJvIHN1Ym3Ds2R1bG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiY2xvbiBkZSAnJXMnIGVuIGxhIHJ1dGEgZGUgc3VibcOzZHVsbyAnJXMnIGZhbGzDsyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlyZWN0b3J5IG5vdCBlbXB0eTogJyVzJyIKK21zZ3N0ciAiZGlyZWN0b3JpbyBubyBlc3TDoSB2YWPDrW86ICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgc3VibW9kdWxlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBvYnRlbmVyIGVsIGRpcmVjdG9yaW8gZGUgc3VibcOzZHVsbyBwYXJhICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiTW9kbyBkZSBhY3R1YWxpemFjacOzbiBpbnbDoWxpZG8gJyVzJyBwYXJhIHJ1dGEgZGUgc3VibcOzZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgY29uZmlndXJlZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorIk1vZG8gZGUgYWN0dWFsaXphY2nDs24gaW52w6FsaWRvICclcycgY29uZmlndXJhZG8gcGFyYSBydXRhIGRlIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyVzJyBub3QgaW5pdGlhbGl6ZWQiCittc2dzdHIgIlJ1dGEgZGUgc3VibcOzZHVsbyAnJXMnIG5vIGluaWNpYWxpemFkYSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MjEKK21zZ2lkICJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAiwr9UYWwgdmV6IHF1aWVyZXMgdXNhciAndXBkYXRlIC0taW5pdCc/IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyB1bm1lcmdlZCBzdWJtb2R1bGUgJXMiCittc2dzdHIgIlNhbHRhbmRvIHN1Ym3Ds2R1bG8gJXMgbm8gZnVzaW9uYWRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiU2FsdGFuZG8gc3VibcOzZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJy4gUmV0cnkgc2NoZWR1bGVkIgorbXNnc3RyICJGYWxsw7MgYWwgY2xvbmFyICclcycuIFJlaW50ZW50byBwcm9ncmFtYWRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJyBhIHNlY29uZCB0aW1lLCBhYm9ydGluZyIKK21zZ3N0ciAiRmFsbMOzIGFsIGNsb25hciAnJXMnIHVuYSBzZWd1bmRhIHZleiwgYWJvcnRhbmRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwMyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE0OQorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJydXRhIGhhY2lhIGVsIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwNgorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlLCBhY3Jvc3MgbmVzdGVkIHN1Ym1vZHVsZSBib3VuZGFyaWVzIgorbXNnc3RyICIiCisicnV0YSBoYWNpYSBlbCDDoXJib2wgZGUgdHJhYmFqbywgYSB0cmF2w6lzIGRlIGV4dHJlbW9zIGRlIHN1Ym3Ds2R1bG9zIGFuaWRhZG9zIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMAorbXNnaWQgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiCittc2dzdHIgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG8gbm9uZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTYKK21zZ2lkICJDcmVhdGUgYSBzaGFsbG93IGNsb25lIHRydW5jYXRlZCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXZpc2lvbnMiCittc2dzdHIgIkNyZWEgdW4gY2xvbiBzdXBlcmZpY2lhbCB0cnVuY2FkbyBhbCBuw7ptZXJvIGVzcGVjaWZpY2FkbyBkZSByZXZpc2nDs24iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE5Cittc2dpZCAicGFyYWxsZWwgam9icyIKK21zZ3N0ciAidHJhYmFqb3MgcGFyYWxlbG9zIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyMQorbXNnaWQgIndoZXRoZXIgdGhlIGluaXRpYWwgY2xvbmUgc2hvdWxkIGZvbGxvdyB0aGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiIKK21zZ3N0ciAic2kgZWwgY2xvbiBpbmljaWFsIGRlYmUgc2VndWlyIGxhIHJlY29tZW5kYWNpw7NuIHN1cGVyZmljaWFsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyMgorbXNnaWQgImRvbid0IHByaW50IGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgIm5vIG1vc3RyYXIgZWwgcHJvZ3Jlc28gZGUgY2xvbmFkbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MzMKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cnV0YT5dIFs8cnV0YT4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk0NgorbXNnaWQgImJhZCB2YWx1ZSBmb3IgdXBkYXRlIHBhcmFtZXRlciIKK21zZ3N0ciAibWFsIHZhbG9yIHBhcmEgcGFyw6FtZXRybyB1cGRhdGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0IGJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0ICIKKyJ0aGUgc3VwZXJwcm9qZWN0IGlzIG5vdCBvbiBhbnkgYnJhbmNoIgorbXNnc3RyICIiCisiUmFtYSBkZSBzdWJtw7NkdWxvICglcykgY29uZmlndXJhZGEgcGFyYSBoZXJlZGFyIHJhbWEgZGVsIHN1cGVycHJveWVjdG8sIHBlcm8gIgorImVsIHN1cGVycHJveWVjdG8gbm8gZXN0w6EgZW4gbmluZ3VuYSByYW1hIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjExNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGEgcmVwb3NpdG9yeSBoYW5kbGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGNvbnNlZ3VpciB1biBoYW5kbGUgcGFyYSBlbCBzdWJtw7NkdWxvICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTUwCittc2dpZCAicmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMiCittc2dzdHIgInJlY3VycmlyIGEgc3VibcOzZHVsb3MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTU2Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wY2lvbmVzPl0gWzxwYXRoPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjEyCittc2dpZCAiY2hlY2sgaWYgaXQgaXMgc2FmZSB0byB3cml0ZSB0byB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAicmV2aXNhciBpcyBlcyBzZWd1cm8gZXNjcmliaXIgZWwgYXJjaGl2byAuZ2l0bW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMTUKK21zZ2lkICJ1bnNldCB0aGUgY29uZmlnIGluIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICJkZXNjb25maWd1cmEgbGEgb3BjacOzbiBlbiBlbGFyY2hpdm8gLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjIwCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA8bmFtZT4gWzx2YWx1ZT5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIDxub21icmU+IFs8dmFsb3I+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMjEKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5vbWJyZT4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjIyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyNDEgZ2l0LXN1Ym1vZHVsZS5zaDoxNzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpcyBpbiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisicG9yIGZhdm9yIGFzZWfDunJhdGUgcXVlIGVsIGFyY2hpdm8gLmdpdG1vZHVsZXMgZXN0w6EgZW4gZWwgw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjkxIGdpdC5jOjQzMyBnaXQuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lc24ndCBzdXBwb3J0IC0tc3VwZXItcHJlZml4IgorbXNnc3RyICIlcyBubyBzb3BvcnRhIC0tc3VwZXItcHJlZml4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI5NworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHN1Ym1vZHVsZS0taGVscGVyIHN1YmNvbW1hbmQiCittc2dzdHIgIiclcycgbm8gZXMgdW4gY29tYW5kbyBzdWJtb2R1bGUtLWhlbHBlciB2w6FsaWRvIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjgKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIDxuYW1lPiBbPHJlZj5dIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIFs8b3BjaW9uZXM+XSA8bm9tYnJlPiBbPHJlZmVyZW5jaWE+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxub21icmU+IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwCittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAic3VwcmltaXIgbWVuc2FqZXMgZGUgZXJyb3IgcGFyYSByZWZzIG5vIHNpbWLDs2xpY29zIChkZXNhY29wbGFkb3MpIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiZWxpbWluYXIgcmVmZXJlbmNpYSBzaW1iw7NsaWNhIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICJzYWxpZGEgZGUgcmVmZXJlbmNpYSBtw6FzIGNvcnRhIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiIKK21zZ3N0ciAicmF6w7NuIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICJyYXrDs24gZGUgbGEgYWN0dWFsaXphY2nDs24iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjUKK21zZ2lkICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl1cbiIKKyJcdFx0PHRhZ25hbWU+IFs8aGVhZD5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxhcmNoaXZvPl1cbiIKKyJcdFx0PG5vbWJyZS10YWc+IFs8aGVhZD5dIgorCisjOiBidWlsdGluL3RhZy5jOjI3Cittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLWQgPG5vbWJyZS1kZS10YWc+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjI4Cittc2dpZCAiIgorImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLW5vLWNvbnRhaW5zIDxjb21taXQ+XSBbLS0iCisicG9pbnRzLWF0IDxvYmplY3Q+XVxuIgorIlx0XHRbLS1mb3JtYXQ9PGZvcm1hdD5dIFstLVtuby1dbWVyZ2VkIFs8Y29tbWl0Pl1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPGNvbW1pdD5dIFstLSIKKyJwb2ludHMtYXQgPG9iamV0bz5dXG4iCisiXHRcdFstLWZvcm1hdD08Zm9ybWF0bz5dIFstLVtuby1dbWVyZ2VkIFs8Y29tbWl0Pl1dIFs8cGF0csOzbj4uLi5dIgorCisjOiBidWlsdGluL3RhZy5jOjMwCittc2dpZCAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdG8+XSA8bm9tYnJlLWRlLXRhZz4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAidGFnICclcycgbm8gZW5jb250cmFkby4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiRXRpcXVldGEgJyVzJyBlbGltaW5hZGEgKGVyYSAlcylcbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiRXNjcmliZSB1biBtZW5zYWplIHBhcmEgbGEgdGFnOlxuIgorIiAgJXNcbiIKKyJMYXMgbMOtbmVhcyBxdWUgY29taWVuemFuIGNvbiAnJWMnIHNlcsOhbiBpZ25vcmFkYXMuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3UgIgorIndhbnQgdG8uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFc2NyaWJlIHVuIG1lbnNhamUgcGFyYSBsYSB0YWc6XG4iCisiICAlc1xuIgorIkxhcyBsw61uZWFzIHF1ZSBjb21pZW56YW4gY29uICclYycgc2Vyw6FuIGNvbnNlcnZhZGFzOyBwdWVkZXMgZWxpbWluYXJsYXMgcG9yICIKKyJ0aSBtaXNtbyBzaSBxdWllcmVzIGhhY2VybG8uXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTk4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAiaW5jYXBheiBkZSBmaXJtYXIgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjIwMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAiaW5jYXBheiBkZSBlc2NyaWJpciBlbCBhcmNoaXZvIGRlIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIGNyZWF0ZWQgYSBuZXN0ZWQgdGFnLiBUaGUgb2JqZWN0IHJlZmVycmVkIHRvIGJ5IHlvdXIgbmV3IHRhZyBpc1xuIgorImFscmVhZHkgYSB0YWcuIElmIHlvdSBtZWFudCB0byB0YWcgdGhlIG9iamVjdCB0aGF0IGl0IHBvaW50cyB0bywgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKK21zZ3N0ciAiIgorIkhhcyBjcmVhZG8gdW4gdGFnIGFuaWRhZG8uIEVsIG9iamV0byByZWZlcmlkbyBwb3IgZWwgbnVldm8gdGFnIHlhXG4iCisiZXMgdW4gdGFnLiBTaSBxdWlzaXN0ZSBoYWNlciBlbCB0YWcgYWwgb2JqZXRvIHF1ZSBhcHVudGEsIHVzYTpcbiIKKyJcbiIKKyJcdGdpdCB0YWcgLWYgJXMgJXNee30iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjMyCittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAidGlwbyBkZSBvYmpldG8gZXJyw7NuZW8uIgorCisjOiBidWlsdGluL3RhZy5jOjI4NAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAiwr9TaW4gbWVuc2FqZSBkZSB0YWc/IgorCisjOiBidWlsdGluL3RhZy5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgdGFnIG1lc3NhZ2UgaGFzIGJlZW4gbGVmdCBpbiAlc1xuIgorbXNnc3RyICJFbCBtZW5zYWplIGRlbCB0YWcgaGEgc2lkbyBkZWphZG8gZW4gJXNcbiIKKworIzogYnVpbHRpbi90YWcuYzo0MDIKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAibGlzdGFyIG5vbWJyZXMgZGUgdGFncyIKKworIzogYnVpbHRpbi90YWcuYzo0MDQKK21zZ2lkICJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiaW1wcmltaXIgPG4+IGzDrW5lYXMgZGUgY2FkYSBtZW5zYWplIGRlIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0MDYKK21zZ2lkICJkZWxldGUgdGFncyIKK21zZ3N0ciAiZWxpbWluYXIgdGFncyIKKworIzogYnVpbHRpbi90YWcuYzo0MDcKK21zZ2lkICJ2ZXJpZnkgdGFncyIKK21zZ3N0ciAidmVyaWZpY2FyIHRhZ3MiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA5Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbmVzIGRlIGNyZWFjacOzbiBkZSB0YWdzIgorCisjOiBidWlsdGluL3RhZy5jOjQxMQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAidGFncyBhbm90YWRhcyBuZWNlc2l0YW4gdW4gbWVuc2FqZSIKKworIzogYnVpbHRpbi90YWcuYzo0MTMKK21zZ2lkICJ0YWcgbWVzc2FnZSIKK21zZ3N0ciAibWVuc2FqZSBkZSB0YWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE1Cittc2dpZCAiZm9yY2UgZWRpdCBvZiB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiZm9yemFyIGxhIGVkaWNpw7NuIGRlbCBtZW5zYWplIGRlIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0MTYKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICJ0YWcgYW5vdGFkbyB5IGZpcm1hZG8gY29uIEdQRyIKKworIzogYnVpbHRpbi90YWcuYzo0MTkKK21zZ2lkICJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJ1c2FyIG90cmEgY2xhdmUgcGFyYSBmaXJtYXIgZWwgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjQyMAorbXNnaWQgInJlcGxhY2UgdGhlIHRhZyBpZiBleGlzdHMiCittc2dzdHIgInJlbXBsYXphciB0YWcgc2kgZXhpc3RlIgorCisjOiBidWlsdGluL3RhZy5jOjQyMSBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjkKK21zZ2lkICJjcmVhdGUgYSByZWZsb2ciCittc2dzdHIgImNyZWFyIHVuIHJlZmxvZyIKKworIzogYnVpbHRpbi90YWcuYzo0MjMKK21zZ2lkICJUYWcgbGlzdGluZyBvcHRpb25zIgorbXNnc3RyICJPcGNpb25lcyBkZSBsaXN0YWRvIGRlIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0MjQKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgIm1vc3RyYXIgbGlzdGEgZGUgdGFncyBlbiBjb2x1bW5hcyIKKworIzogYnVpbHRpbi90YWcuYzo0MjUgYnVpbHRpbi90YWcuYzo0MjcKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIm1vc3RyYXIgc29sbyB0YWdzIHF1ZSBjb250aWVuZW4gZWwgY29tbWl0IgorCisjOiBidWlsdGluL3RhZy5jOjQyNiBidWlsdGluL3RhZy5jOjQyOAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAibW9zdHJhciBzb2xvIHRhZ3MgcXVlIG5vIGNvbnRpZW5lbiBlbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI5Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAic8OzbG8gaW1wcmltaXIgbGFzIHRhZ3MgcXVlIGVzdMOhbiBmdXNpb25hZGFzIgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJzw7NsbyBpbXByaW1pciBsYXMgdGFncyBxdWUgbm8gZXN0w6FuIGZ1c2lvbmFkYXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDM0Cittc2dpZCAicHJpbnQgb25seSB0YWdzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgInPDs2xvIGltcHJpbWlyIHRhZ3MgZGUgZWwgb2JqZXRvIgorCisjOiBidWlsdGluL3RhZy5jOjQ4MgorbXNnaWQgIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiB5IC1uIHNvbiBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJvcGNpw7NuIC1uIHNvbG8gZXMgcGVybWl0aWRhIGVuIG1vZG8gbGlzdGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA2Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAib3BjacOzbiAtLWNvbnRhaW5zIHNvbG8gZXMgcGVybWl0aWRvIGVuIG1vZG8gbGlzdGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA4Cittc2dpZCAiLS1uby1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAib3BjacOzbiAtLW5vLWNvbnRhaW5zIHNvbG8gZXMgcGVybWl0aWRhIGVuIG1vZG8gbGlzdGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEwCittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIm9wY2nDs24gLS1wb2ludHMtYXQgc29sbyBlcyBwZXJtaXRpZGEgZW4gbW9kbyBsaXN0YSIKKworIzogYnVpbHRpbi90YWcuYzo1MTIKK21zZ2lkICItLW1lcmdlZCBhbmQgLS1uby1tZXJnZWQgb3B0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAib3BjaW9uZXMgLS1tZXJnZWQgeSAtLW5vLW1lcmdlZCAgc29sbyBlc3TDoW4gcGVybWl0aWRhcyBlbiBtb2RvIGxpc3RhIgorCisjOiBidWlsdGluL3RhZy5jOjUyMworbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAic8OzbG8gc2UgcGVybWl0ZSB1bmEgZGUgbGFzIG9wY2lvbmVzLCAtbSDDsyAtRi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQyCittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICJkZW1hc2lhZG9zIHBhcsOhbWV0cm9zIgorCisjOiBidWlsdGluL3RhZy5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRhZyBuYW1lLiIKK21zZ3N0ciAiJyVzJyBubyBlcyB1biBub21icmUgZGUgdGFnIHbDoWxpZG8uIgorCisjOiBidWlsdGluL3RhZy5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiZWwgdGFnICclcycgeWEgZXhpc3RlIgorCisjOiBidWlsdGluL3RhZy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIkV0aXF1ZXRhICclcycgYWN0dWFsaXphZGEgKGVyYSAlcylcbiIKKworIzogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjUwMgorbXNnaWQgIlVucGFja2luZyBvYmplY3RzIgorbXNnc3RyICJEZXNlbXBhcXVldGFuZG8gb2JqZXRvcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGNyZWFyIGRpcmVjdG9yaW8gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGNyZWFyIGVsIGFyY2hpdm8gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGVsaW1pbmFyIGVsIGFyY2hpdm8gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE1IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJmYWxsw7MgYWwgZWxpbWluYXIgZGlyZWN0b3JpbyAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGVzdGluZyBtdGltZSBpbiAnJXMnICIKK21zZ3N0ciAiUHJvYmFuZG8gbXRpbWUgZW4gJyVzJyAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTU0Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGZpbGUiCittc2dzdHIgImluZm8gZGUgZXN0YWRvIGRlbCBkaXJlY3RvcmlvIG5vIGNhbWJpYSB0cmFzIGFncmVnYXIgdW4gbnVldm8gYXJjaGl2byIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNjcKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiaW5mbyBkZSBlc3RhZG8gZGVsIGRpcmVjdG9yaW8gbm8gY2FtYmlhIHRyYXMgYWdyZWdhciB1biBudWV2byBkaXJlY3RvcmlvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE4MAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciB1cGRhdGluZyBhIGZpbGUiCittc2dzdHIgImluZm8gZGUgZXN0YWRvIGRlbCBkaXJlY3RvcmlvIGNhbWJpYSB0cmFzIGFjdHVhbGl6YXIgdW4gYXJjaGl2byIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxOTEKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgYWRkaW5nIGEgZmlsZSBpbnNpZGUgc3ViZGlyZWN0b3J5IgorbXNnc3RyICIiCisiaW5mbyBkZSBlc3RhZG8gZGVsIGRpcmVjdG9yaW8gY2FtYmlhIHRyYXMgYWdyZWdhciB1biBhcmNoaXZvIGRlbnRybyBkZWwgIgorInN1YmRpcmVjdG9yaW8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjAyCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBmaWxlIgorbXNnc3RyICJpbmZvIGRlIGVzdGFkbyBkZWwgZGlyZWN0b3JpbyBubyBjYW1iaWEgdHJhcyBib3JyYXIgdW4gYXJjaGl2byIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTUKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiaW5mbyBkZSBlc3RhZG8gZGVsIGRpcmVjdG9yaW8gbm8gY2FtYmlhIHRyYXMgYm9ycmFyIHVuIGRpcmVjdG9yaW8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIyCittc2dpZCAiIE9LIgorbXNnc3RyICIgT0siCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTkxCittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgdXBkYXRlLWluZGV4IFs8b3BjaW9uZXM+XSBbLS1dIFs8YXJjaGl2bz4uLi5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NAorbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAiIgorImNvbnRpbnVhciByZWZyZXNoIChBY3R1YWxpemFjacOzbikgaW5jbHVzbyBjdWFuZG8gZWwgw61uZGljZSBuZWNlc2l0YSAiCisiYWN0dWFsaXphY2nDs24iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc3Cittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgInJlZnJlc2g6IGlnbm9yYSBzdWJtw7NkdWxvcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODAKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAibm8gaWdub3JhciBhcmNoaXZvcyBudWV2b3MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgyCittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgInBlcm1pdGlyIHF1ZSBhcmNoaXZvcyByZW1wbGFjZW4gZGlyZWN0b3Jpb3MgeSB2aWNlLXZlcnNhIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NAorbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImF2aXNhciBkZSBhcmNoaXZvcyBmYWx0YW5kbyBlbiBlbCDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODYKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiZWplY3V0YXIgcmVmcmVzaCBpbmNsdXNvIHNpIGVsIMOtbmRpY2UgY29udGllbmUgZW50cmFkYXMgc2luIGNhbWJpb3MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg5Cittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICJyZWZyZXNoIGluZm9ybWFjacOzbiBkZSBlc3RhZG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkzCittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICJjb21vIC0tcmVmcmVzaCwgcGVybyBpZ25vcmEgY29uZmlndXJhY2nDs24gYXNzdW1lLXVuY2hhbmdlZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTcKK21zZ2lkICI8bW9kZT4sPG9iamVjdD4sPHBhdGg+IgorbXNnc3RyICI8bW9kbz4sPG9iamV0bz4sPHJ1dGE+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiYWdyZWdhciBsYSBlbnRyYWRhIGVzcGVjaWZpY2FkYSBhbCDDrW5kaWNlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDgKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwibm90IGNoYW5naW5nXCIiCittc2dzdHIgIm1hcmNhciBhcmNoaXZvcyBjb21vIFwibm90IGNoYW5naW5nXCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxMQorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAibGltcGlhciBiaXQgYXNzdW1lZC11bmNoYW5nZWQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgIm1hcmNhciBhcmNoaXZvcyBjb21vIFwiaW5kZXgtb25seVwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTcKK21zZ2lkICJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIKK21zZ3N0ciAibGltcGlhciBiaXQgc2tpcC13b3JrdHJlZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIwCittc2dpZCAiZG8gbm90IHRvdWNoIGluZGV4LW9ubHkgZW50cmllcyIKK21zZ3N0ciAibm8gdG9jYXIgZW50cmFkYXMgaW5kZXgtb25seSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIyCittc2dpZCAiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKyJhZ3JlZ2FyIHNvbG8gYWwgw61uZGljZTsgbm8gYWdyZWdhciBjb250ZW5pZG8gYSBsYSBiYXNlIGRlIGRhdG9zIGRlIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyNAorbXNnaWQgInJlbW92ZSBuYW1lZCBwYXRocyBldmVuIGlmIHByZXNlbnQgaW4gd29ya3RyZWUiCittc2dzdHIgIiIKKyJlbGltaW5hciBydXRhcyBub21icmFkYXMgaW5jbHVzbyBzaSBlc3TDoW4gcHJlc2VudGVzIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjYKK21zZ2lkICJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiCittc2dzdHIgImNvbiAtLXN0ZGluOiBsYXMgbMOtbmVhcyBkZSBlbnRyYWRhIHNvbiB0ZXJtaW5hZGFzIGNvbiBieXRlcyBudWxvcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI4Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIHRvIGJlIHVwZGF0ZWQgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGVlciBsYSBsaXN0YSBkZSBydXRhcyBwYXJhIHNlciBhY3R1YWxpemFkYSBkZXNkZSBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDMyCittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgImFncmVnYXIgZW50cmFkYXMgZGUgc3RhbmRhcmQgaW5wdXQgYWwgw61uZGljZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDM2Cittc2dpZCAicmVwb3B1bGF0ZSBzdGFnZXMgIzIgYW5kICMzIGZvciB0aGUgbGlzdGVkIHBhdGhzIgorbXNnc3RyICJyZXBvYmxhciBzdGFnZXMgIzIgeSAjMyBwYXJhIGxhcyBydXRhcyBsaXN0YWRhcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQwCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgInNvbG8gYWN0dWFsaXphciBlbnRyYWRhcyBxdWUgZGlmaWVyZW4gZGUgSEVBRCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ0Cittc2dpZCAiaWdub3JlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiaWdub3JhciBhcmNoaXZvcyBmYWx0YW50ZXMgZW4gZWwgw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NworbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAicmVwb3J0YXIgYWNjaW9uZXMgcG9yIHN0YW5kYXJkIG91dHB1dCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ5Cittc2dpZCAiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiCittc2dzdHIgIihwYXJhIHBvcmNlbGFuYXMpIG9sdmlkYXIgY29uZmxpY3RvcyBzaW4gcmVzb2x2ZXIgZ3VhcmRhZG9zIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTMKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAiZXNjcmliaXIgw61uZGljZSBlbiBlc3RlIGZvcm1hdG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICJhY3RpdmFyIG8gZGVzYWN0aXZhciDDrW5kaWNlIGRpdmlkaWRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTcKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgImhhYmlsaXRhciBvIGRlc2hhYmlsaXRhciBjYWNow6kgbm8gcmFzdHJlYWRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTkKK21zZ2lkICJ0ZXN0IGlmIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAicHJvYmFyIHNpIGVsIGZpbGVzeXN0ZW0gc29wb3J0YSBjYWNow6kgbm8gcmFzdHJlYWRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjEKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiaGFiaWxpdGFyIGNhY2jDqSBubyByYXN0cmVhZG8gc2luIHByb2JhciBlbCBmaWxlc3lzdGVtIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjMKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGluZGV4IGV2ZW4gaWYgaXMgbm90IGZsYWdnZWQgYXMgY2hhbmdlZCIKK21zZ3N0ciAiZXNjcmliaXIgZWwgw61uZGljZSBpbmNsdXNvIHNpIG5vIGVzdMOhIG1hcmNhZG8gY29tbyBjYW1iaWFkbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY1Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgZmlsZSBzeXN0ZW0gbW9uaXRvciIKK21zZ3N0ciAiYWN0aXZhciBvIGRlc2FjdGl2YXIgbW9uaXRvciBkZSBzaXN0ZW1hIGRlIGFyY2hpdm9zIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjcKK21zZ2lkICJtYXJrIGZpbGVzIGFzIGZzbW9uaXRvciB2YWxpZCIKK21zZ3N0ciAibWFyY2FyIGFyY2hpdm9zIGNvbW8gdsOhbGlkb3MgcGFyYSBmc21vbml0b3IiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA3MAorbXNnaWQgImNsZWFyIGZzbW9uaXRvciB2YWxpZCBiaXQiCittc2dzdHIgImxpbXBpYSBlbCBiaXQgZGUgdmFsaWRhY2nDs24gZnNtb25pdG9yIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNzMKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJlbmFibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggZXN0w6EgY29uZmlndXJhZG8gZW4gZmFsc2U7IHJlbXXDqXZlbG8gbyBjw6FtYmlhbG8sIHNpICIKKyJyZWFsbWVudGUgcXVpZXJlcyBoYWJpbGl0YXIgZWwgw61uZGljZSBwYXJ0aWRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExODIKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggZXN0w6EgY29uZmlndXJhZG8gZW4gdHJ1ZTsgcmVtdcOpdmVsbyBvIGPDoW1iaWFsbywgc2kgcmVhbG1lbnRlICIKKyJxdWllcmVzIGRlc2hhYmlsaXRhciBlbCDDrW5kaWNlIHBhcnRpZG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE5NAorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGRpc2FibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgZXN0w6EgY29uZmlndXJhZG8gZW4gdHJ1ZTsgcmVtdcOpdmVsbyBvIGPDoW1iaWFsbywgc2kgIgorInJlYWxtZW50ZSBxdWllcmVzIGRlc2hhYmlsaXRhciBlbCBjaGFjaMOpIG5vIHJhc3RyZWFkbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk4Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJDYWNow6kgbm8gcmFzdHJlYWRvIGRlc2hhYmlsaXRhZG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIwNgorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBlbmFibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgZXN0w6EgY29uZmlndXJhZG8gZW4gZmFsc2U7IHJlbXXDqXZlbG8gbyBjw6FtYmlhbG8sIHNpICIKKyJyZWFsbWVudGUgcXVpZXJlcyBoYWJpbGl0YXIgZWwgY2FjaMOpIG5vIHJhc3RyZWFkbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICJDYWNow6kgbm8gcmFzdHJlYWRvIGhhYmlsaXRhZG8gcGFyYSAnJXMnIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMTgKK21zZ2lkICJjb3JlLmZzbW9uaXRvciBpcyB1bnNldDsgc2V0IGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBlbmFibGUgZnNtb25pdG9yIgorbXNnc3RyICIiCisiY29yZS5mc21vbml0b3Igbm8gZXN0w6EgY29uZmlndXJhZG87IGFjdMOtdmFsbyBzaSByZWFsbWVudGUgcXVpZXJlcyBoYWJpbGl0YXIgIgorImZzbW9uaXRvciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjIyCittc2dpZCAiZnNtb25pdG9yIGVuYWJsZWQiCittc2dzdHIgImZzbW9uaXRvciBhY3RpdmFkbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjI1Cittc2dpZCAiIgorImNvcmUuZnNtb25pdG9yIGlzIHNldDsgcmVtb3ZlIGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBkaXNhYmxlIGZzbW9uaXRvciIKK21zZ3N0ciAiIgorImNvcmUuZnNtb25pdG9yIGVzdMOhIGNvbmZpZ3VyYWRvOyByZW11w6l2ZWxvIHNpIHJlYWxtZW50ZSBxdWllcmVzIGRlc2hhYmlsaXRhciAiCisiZWwgZnNtb25pdG9yIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjkKK21zZ2lkICJmc21vbml0b3IgZGlzYWJsZWQiCittc2dzdHIgImZzbW9uaXRvciBkZXNhY3RpdmFkbyIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8b3BjaW9uZXM+XSAtZCA8bm9tYnJlLXJlZmVyZW5jaWE+IFs8dmFsb3ItYW50ZXJpb3I+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICIiCisiZ2l0IHVwZGF0ZS1yZWYgWzxvcGNpb25lcz5dIDxub21icmUtcmVmZXJlbmNpYT4gPHZhbG9yLW51ZXZvPiBbPHZhbG9yLSIKKyJhbnRlcmlvcj5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMgorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxvcGNpb25lcz5dIC0tc3RkaW4gWy16XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY0Cittc2dpZCAiZGVsZXRlIHRoZSByZWZlcmVuY2UiCittc2dzdHIgImVsaW1pbmFyIGxhIHJlZmVyZW5jaWEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInVwZGF0ZSA8cmVmbmFtZT4gbm90IHRoZSBvbmUgaXQgcG9pbnRzIHRvIgorbXNnc3RyICJhY3R1YWxpemEgPHJlZm5hbWU+IG5vIGEgbG8gcXVlIGFwdW50YSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIKK21zZ3N0ciAic3RkaW4gdGllbmUgYXJndW1lbnRvcyB0ZXJtaW5hZG9zIGVuIE5VTCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgImxlZSBhY3R1YWxpemFjaW9uZXMgZGUgc3RkaW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6NworbXNnaWQgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorbXNnc3RyICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNQorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgImFjdHVhbGl6YSBsb3MgYXJjaGl2b3MgaW5mbyBkZXNkZSBjZXJvIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MTEKK21zZ2lkICJnaXQgdXBsb2FkLXBhY2sgWzxvcHRpb25zPl0gPGRpcj4iCittc2dzdHIgImdpdCB1cGxvYWQtcGFjayBbPG9wY2lvbmVzPl0gPGRpcmVjdG9yaW8+IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjMgdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE3Cittc2dpZCAicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIgorbXNnc3RyICJzYWxlIGRlc3B1w6lzIGRlIHVuIGludGVyY2FtYmlvIHBldGljacOzbi9yZXNwdWVzdGEgw7puaWNvIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjUKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGluaXRpYWwgcmVmIGFkdmVydGlzZW1lbnQiCittc2dzdHIgInNhbGlyIGlubWVkaWF0YW1lbnRlIHRyYXMgZWwgYW51bmNpbyBpbmljaWFsIGRlIHJlZiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI3Cittc2dpZCAiZG8gbm90IHRyeSA8ZGlyZWN0b3J5Pi8uZ2l0LyBpZiA8ZGlyZWN0b3J5PiBpcyBubyBHaXQgZGlyZWN0b3J5IgorbXNnc3RyICJubyBpbnRlbnRlIDxkaXJlY3RvcmlvPi8uZ2l0LyBzaSA8ZGlyZWN0b3Jpbz4gbm8gZXMgdW4gZGlyZWN0b3JpbyBHaXQiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyOQorbXNnaWQgImludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5IgorbXNnc3RyICJpbnRlcnJ1bXBpciB0cmFuc2ZlcmVuY2lhIHRyYXMgPG4+IHNlZ3VuZG9zIGRlIGluYWN0aXZpZGFkIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxOQorbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY4Cittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICJpbXByaW1pciBjb250ZW5pZG8gZGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjkgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzcKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgIm11ZXN0cmEgbGEgc2FsaWRhIGRlIHN0YXR1cyBncGcgZW4gZm9ybWF0byByYXciCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NQorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFxdWV0ZT4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NQorbXNnaWQgInZlcmJvc2UiCittc2dzdHIgInZlcmJvc28iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NworbXNnaWQgInNob3cgc3RhdGlzdGljcyBvbmx5IgorbXNnc3RyICJzb2xvIG1vc3RyYXIgZXN0YWTDrXN0aWNhcyIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MTgKK21zZ2lkICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXRvPl0gPHRhZz4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM2Cittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICJpbXByaW1pciBjb250ZW5pZG8gZGVsIHRhZyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE3Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gWzxjb21taXQtaXNoPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBhZGQgWzxvcGNpb25lcz5dIDxydXRhPiBbPGNvbW1pdC1pc2g+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE4Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE5Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxvcHRpb25zPl0gPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbG9jayBbPG9wY2lvbmVzPl0gPHJ1dGE+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjAKK21zZ2lkICJnaXQgd29ya3RyZWUgbW92ZSA8d29ya3RyZWU+IDxuZXctcGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBtb3ZlIDx3b3JrdHJlZT4gPG51ZXZhLXJ1dGE+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjEKK21zZ2lkICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wY2lvbmVzPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMgorbXNnaWQgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHRpb25zPl0gPHdvcmt0cmVlPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPG9wY2lvbmVzPl0gPHdvcmt0cmVlPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzCittc2dpZCAiZ2l0IHdvcmt0cmVlIHVubG9jayA8cGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSB1bmxvY2sgPHJ1dGE+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjAgYnVpbHRpbi93b3JrdHJlZS5jOjg5MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlICclcyciCittc2dzdHIgImZhbGzDsyBhbCBib3JyYXIgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogbm90IGEgdmFsaWQgZGlyZWN0b3J5IgorbXNnc3RyICJSZW1vdmllbmRvIGVsIHdvcmt0cmVlcy8lczogbm8gZXMgdW4gZGlyZWN0b3JpbyB2w6FsaWRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiUmVtb3ZpZW5kbyB3b3JrdHJlZXMvJXM6IGFyY2hpdm8gZ2l0ZGlyIG5vIGV4aXN0ZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkwIGJ1aWx0aW4vd29ya3RyZWUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHVuYWJsZSB0byByZWFkIGdpdGRpciBmaWxlICglcykiCittc2dzdHIgIlJlbW92aWVuZG8gd29ya3RyZWVzLyVzOiBubyBlcyBwb3NpYmxlIGxlZXIgZWwgYXJjaGl2byBnaXRkaXIgKCVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBzaG9ydCByZWFkIChleHBlY3RlZCAlPFBSSXVNQVg+IGJ5dGVzLCByZWFkICIKKyIlPFBSSXVNQVg+KSIKK21zZ3N0ciAiIgorIlJlbW92aWVuZG8gw6FyYm9sZXMgZGUgdHJhYmFqby8lczogbGVjdHVyYSBjb3J0YSAoc2UgZXNwZXJhbiAlPFBSSXVNQVg+ICIKKyJieXRlcywgJTxQUkl1TUFYPiBsZcOtZG9zKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgIlJlbW92aWVuZG8gd29ya3RyZWVzLyVzOiBhcmNoaXZvIGdpdGRpciBpbnbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICIiCisiUmVtb3ZpZW5kbyB3b3JrdHJlZXMvJXM6IGFyY2hpdm8gZ2l0ZGlyIGFwdW50YSBhIHVuYSB1YmljYWNpw7NuIG5vIGV4aXN0ZW50ZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAicmVwb3J0YSDDoXJib2xlcyBkZSB0cmFiYWpvIHJlY29ydGFkb3MiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNjcKK21zZ2lkICJleHBpcmUgd29ya2luZyB0cmVlcyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZXhwaXJhciDDoXJib2xlcyBkZSB0cmFiYWpvIG3DoXMgdmllam9zIGEgPHRpZW1wbz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJyVzJyB5YSBleGlzdGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlLWFkZCB3b3JrdHJlZSAnJXMnIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIHZvbHZlciBhIGFncmVnYXIgZWwgw6FyYm9sICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBsb2NrZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYgLWYnIHRvIG92ZXJyaWRlLCBvciAndW5sb2NrJyBhbmQgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIiclcycgZXMgdW4gw6FyYm9sIGRlIHRyYWJham8gZmFsdGFudGUgcGVybyBibG9xdWVhZG87XG4iCisidXNhICdhZGQgLWYgLWYnIHBhcmEgc29icmVlc2NyaWJpciwgbyAndW5sb2NrJyB5ICdwcnVuZScgbyAncmVtb3ZlJyBwYXJhICIKKyJsaW1waWFyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgYWxyZWFkeSByZWdpc3RlcmVkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mJyB0byBvdmVycmlkZSwgb3IgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIiclcycgZXMgdW4gw6FyYm9sIGRlIHRyYWJham8gZmFsdGFudGUgcGVybyB5YSByZWdpc3RyYWRvO1xuIgorInVzYSAnYWRkIC1mJyBwYXJhIHNvYnJlZXNjcmliaXIsIG8gJ3BydW5lJyBvICdyZW1vdmUnIHBhcmEgbGltcGlhciIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGNyZWFyIGRpcmVjdG9yaW8gZGUgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzMiBidWlsdGluL3dvcmt0cmVlLmM6NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAobmV3IGJyYW5jaCAnJXMnKSIKK21zZ3N0ciAiUHJlcGFyYW5kbyDDoXJib2wgZGUgdHJhYmFqbyAobnVldmEgcmFtYSAnJXMnKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKHJlc2V0dGluZyBicmFuY2ggJyVzJzsgd2FzIGF0ICVzKSIKK21zZ3N0ciAiUHJlcGFyYW5kbyDDoXJib2wgZGUgdHJhYmFqbyAocmVpbmljaWFuZG8gcmFtYSAnJXMnOyBlc3RhYmEgZW4gJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoY2hlY2tpbmcgb3V0ICclcycpIgorbXNnc3RyICJQcmVwYXJhbmRvIMOhcmJvbCBkZSB0cmFiYWpvIChoYWNpZW5kbyBjaGVja291dCBhICclcycpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoZGV0YWNoZWQgSEVBRCAlcykiCittc2dzdHIgIlByZXBhcmFuZG8gw6FyYm9sIGRlIHRyYWJham8gKEhFQUQgZGVzYWNvcGxhZG8gJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDkwCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICIiCisiaGFjZXIgY2hlY2tvdXQgYSA8cmFtYT4gaW5jbHVzbyBzaSB5YSBoYSBoZWNobyBjaGVja291dCBlbiBvdHJvIMOhcmJvbCBkZSAiCisidHJhYmFqbyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5MworbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgImNyZWFyIHVuYSBudWV2YSByYW1hIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk1Cittc2dpZCAiY3JlYXRlIG9yIHJlc2V0IGEgYnJhbmNoIgorbXNnc3RyICJjcmVhciBvIHJlc3RhYmxlY2VyIHVuYSByYW1hIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk3Cittc2dpZCAicG9wdWxhdGUgdGhlIG5ldyB3b3JraW5nIHRyZWUiCittc2dzdHIgInBvcHVsYXIgZWwgbnVldm8gw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTgKK21zZ2lkICJrZWVwIHRoZSBuZXcgd29ya2luZyB0cmVlIGxvY2tlZCIKK21zZ3N0ciAibWFudGVuZXIgZWwgbnVldm8gw6FyYm9sIGRlIHRyYWJham8gYmxvcXVlYWRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAxCittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtYnJhbmNoKDEpKSIKK21zZ3N0ciAiY29uZmlndXJhbmRvIG1vZG8gdHJhY2tpbmcgKG1pcmFyIGdpdC1icmFuY2goMSkpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA0Cittc2dpZCAidHJ5IHRvIG1hdGNoIHRoZSBuZXcgYnJhbmNoIG5hbWUgd2l0aCBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJpbnRlbnRhciBlbXBhcmVqYXIgZWwgbnVldm8gbm9tYnJlIGRlIHJhbWEgY29uIHVuYSByYW1hIGRlIHJhc3RyZW8gcmVtb3RvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTEyCittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWIsIC1CLCB5IC0tZGV0YWNoIHNvbiBtdXR1YW1lbnRlIGV4Y2x1c2l2YXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1NzMKK21zZ2lkICItLVtuby1ddHJhY2sgY2FuIG9ubHkgYmUgdXNlZCBpZiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCIKK21zZ3N0ciAiLS1bbm8tXXRyYWNrIHNvbG8gcHVlZGUgc2VyIHVzYWRvIHNpIHVuYSBudWV2YSByYW1hIGVzIGNyZWFkYSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY3MworbXNnaWQgInJlYXNvbiBmb3IgbG9ja2luZyIKK21zZ3N0ciAicmF6w7NuIHBhcmEgYmxvcXVlYXIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2ODUgYnVpbHRpbi93b3JrdHJlZS5jOjcxOCBidWlsdGluL3dvcmt0cmVlLmM6NzkyCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIG5vIGVzIHVuIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njg3IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjAKK21zZ2lkICJUaGUgbWFpbiB3b3JraW5nIHRyZWUgY2Fubm90IGJlIGxvY2tlZCBvciB1bmxvY2tlZCIKK21zZ3N0ciAiRWwgw6FyYm9sIGRlIHRyYWJham8gcHJpbmNpcGFsIG5vIHB1ZWRlIHNlciBibG9xdWVhZG8gbmkgZGVzYmxvcXVlYWRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQsIHJlYXNvbjogJXMiCittc2dzdHIgIiclcycgeWEgZXN0w6EgYmxvcXVlYWRvOyByYXrDs246ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiCittc2dzdHIgIiclcycgeWEgZXN0w6EgYmxvcXVlYWRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiJyVzJyBubyBlc3TDoSBibG9xdWVhZG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NjMKK21zZ2lkICJ3b3JraW5nIHRyZWVzIGNvbnRhaW5pbmcgc3VibW9kdWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVtb3ZlZCIKK21zZ3N0ciAiIgorIsOhcmJvbGVzIGRlIHRyYWJham8gY29udGVuaWVuZG8gc3VibcOzZHVsb3Mgbm8gcHVlZGUgc2VyIG1vdmlkb3MgbyBlbGltaW5hZG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzEKK21zZ2lkICJmb3JjZSBtb3ZlIGV2ZW4gaWYgd29ya3RyZWUgaXMgZGlydHkgb3IgbG9ja2VkIgorbXNnc3RyICJmb3J6YXIgbW92ZSBpbmNsdXNvIHNpIGVsIMOhcmJvbCBkZSB0cmFiYWpvIGVzdMOhIHN1Y2lvIG8gYmxvcXVlYWRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzk0IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIGVzIHVuIMOhcmJvbCBkZSB0cmFiYWpvIHByaW5jaXBhbCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmlndXJlIG91dCBkZXN0aW5hdGlvbiBuYW1lIGZyb20gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBkZXNjdWJyaXIgZWwgbm9tYnJlIGRlIGRlc3Rpbm8gZGUgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YXJnZXQgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiZWwgb2JqZXRpdm8gJyVzJyB5YSBleGlzdGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJubyBzZSBwdWVkZSBtb3ZlciB1biDDoXJib2wgZGUgdHJhYmFqbyBibG9xdWVhZG8sIG1vdGl2byBkZWwgYmxvcXVlbzogJXNcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHBhcmEgc29icmVlc2NyaWJpciBvIGRlc2Jsb3F1ZWFyIHByaW1lcm8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTUKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisibm8gc2UgcHVlZGUgbW92ZXIgdW4gw6FyYm9sIGRlIHRyYWJham8gYmxvcXVlYWRvO1xuIgorInVzZSAnbW92ZSAtZiAtZicgcGFyYSBzb2JyZWVzY3JpYmlyIG8gZGVzYmxvcXVlYXIgcHJpbWVybyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgxOAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IG1vdmUgd29ya2luZyB0cmVlOiAlcyIKK21zZ3N0ciAiZmFsbMOzIHZhbGlkYWNpw7NuLCBubyBzZSBwdWVkZSBtb3ZlciBlbCDDoXJib2wgZGUgdHJhYmFqbzogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG1vdmUgJyVzJyB0byAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgbW92ZXIgJyVzJyBhICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGVqZWN1dGFyICdnaXQgc3RhdHVzJyBlbiAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY29udGFpbnMgbW9kaWZpZWQgb3IgdW50cmFja2VkIGZpbGVzLCB1c2UgLS1mb3JjZSB0byBkZWxldGUgaXQiCittc2dzdHIgIiIKKyInJXMnIGNvbnRpZW5lIGFyY2hpdm9zIG5vIHJhc3RyZWFkb3MgbyBtb2RpZmljYWRvcywgdXNlIC0tZm9yY2UgcGFyYSBib3JyYXJsbyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICJubyBzZSBwdWRvIGVqZWN1dGFyICdnaXQgc3RhdHVzJyBlbiAnJXMnLCBjw7NkaWdvICVkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTAzCittc2dpZCAiZm9yY2UgcmVtb3ZhbCBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiZm9yemFyIHJlbW9jacOzbiBpbmNsdXNvIHNpIGVsIMOhcmJvbCBkZSB0cmFiYWpvIGVzdMOhIHN1Y2lvIG8gYmxvcXVlYWRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZWRlbiBlbGltaW5hciDDoXJib2wgZGUgdHJhYmFqbyBibG9xdWVhZG8sIHJhesOzbiBkZWwgYmxvcXVlbzogJXNcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgcGFyYSBzb2JyZWVzY3JpYmlyIG8gZGVzYmxvcXVlYXIgcHJpbWVybyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkyOAorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisibm8gc2UgcHVlZGVuIGVsaW1pbmFyIMOhcmJvbCBkZSB0cmFiYWpvIGJsb3F1ZWFkbztcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgcGFyYSBzb2JyZWVzY3JpYmlyIG8gZGVzYmxvcXVlYXIgcHJpbWVybyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IHJlbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICJmYWxsw7MgdmFsaWRhY2nDs24sIG5vIHNlIHB1ZWRlIGVsaW1pbmFyIMOhcmJvbCBkZSB0cmFiYWpvOiAlcyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MTUKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaWpvPi9dIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOAorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiPHByZWZpam8+LyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjkKK21zZ2lkICJ3cml0ZSB0cmVlIG9iamVjdCBmb3IgYSBzdWJkaXJlY3RvcnkgPHByZWZpeD4iCittc2dzdHIgImVzY3JpYmlyIG9iamV0byBkZSAgw6FyYm9sIHBhcmEgdW4gc3ViZGlyZWN0b3JpbyA8cHJlZmlqbz4iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjMxCittc2dpZCAib25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyIKK21zZ3N0ciAic8OzbG8gw7p0aWwgcGFyYSBkZXB1cmFyIgorCisjOiBmYXN0LWltcG9ydC5jOjMxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgJ21hcmsnIGNvbW1hbmQsIGdvdCAlcyIKK21zZ3N0ciAiU2UgZXNwZXJhYmEgY29tYW5kbyAnbWFyaycsIHNlIG9idHV2byAlcyIKKworIzogZmFzdC1pbXBvcnQuYzozMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICd0bycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICJTZSBlc3BlcmFiYSBjb21hbmRvICd0bycsIHNlIG9idHV2byAlcyIKKworIzogZmFzdC1pbXBvcnQuYzozMjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZlYXR1cmUgJyVzJyBmb3JiaWRkZW4gaW4gaW5wdXQgd2l0aG91dCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIKK21zZ3N0ciAiY2FyYWN0ZXLDrXN0aWNhICclcycgcHJvaGliaWRhIGVuIGlucHV0IHNpbiAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGVybWlzc2lvbnMgb24geW91ciBzb2NrZXQgZGlyZWN0b3J5IGFyZSB0b28gbG9vc2U7IG90aGVyXG4iCisidXNlcnMgbWF5IGJlIGFibGUgdG8gcmVhZCB5b3VyIGNhY2hlZCBjcmVkZW50aWFscy4gQ29uc2lkZXIgcnVubmluZzpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCittc2dzdHIgIiIKKyJMb3MgcGVybWlzb3MgZW4gdHUgZGlyZWN0b3JpbyBkZSBzb2NrZXQgc29uIGRlbWFzaWFkbyBmbG9qb3M7IG90cm9zXG4iCisidXN1YXJpb3MgcHVlZGVuIGxlZXIgc3VzIGNyZWRlbmNpYWxlcyBhbG1hY2VuYWRhcyBlbiBjYWNow6kuIENvbnNpZGVyYSAiCisiZWplY3V0YXI6XG4iCisiXG4iCisiXHRjaG1vZCAwNzAwICVzIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyNzIKK21zZ2lkICJwcmludCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8gc3RkZXJyIgorbXNnc3RyICJtb3N0cmFyIG1lbnNhamVzIGRlIGRlYnVnIGVuIHN0ZGVyciIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgbm90IG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgImNvbW1pdCAlcyBubyBlc3TDoSBtYXJjYWRvIGNvbW8gYWxjYW56YWJsZSIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE2MgorbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgbWFya2VkIHJlYWNoYWJsZSIKK21zZ3N0ciAiZGVtYXNpYWRvcyBjb21taXRzIG1hcmNhZG9zIGNvbW8gYWxjYW56YWJsZXMiCisKKyM6IHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzo3Cittc2dpZCAidGVzdC10b29sIHNlcnZlLXYyIFs8b3B0aW9ucz5dIgorbXNnc3RyICJ0ZXN0LXRvb2wgc2VydmUtdjIgWzxvcGNpb25lcz5dIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTkKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGFkdmVydGlzaW5nIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAic2FsaXIgaW5tZWRpYXRhbWVudGUgdHJhcyBhbnVuY2lhciBjYXBhY2lkYWRlcyIKKworIzogZ2l0LmM6MjcKK21zZ2lkICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8cGF0aD5dIFstYyA8bmFtZT49PHZhbHVlPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PHBhdGg+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PHBhdGg+XSBbLS13b3JrLXRyZWU9PHBhdGg+XSBbLS1uYW1lc3BhY2U9PG5hbWU+XVxuIgorIiAgICAgICAgICAgPGNvbW1hbmQ+IFs8YXJncz5dIgorbXNnc3RyICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8cnV0YT5dIFstYyA8bm9tYnJlPj08dmFsb3I+XVxuIgorIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08cnV0YT5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLXBhdGhdXG4iCisiICAgICAgICAgICBbLXAgfCAtLXBhZ2luYXRlIHwgLVAgfCAtLW5vLXBhZ2VyXSBbLS1uby1yZXBsYWNlLW9iamVjdHNdIFstLSIKKyJiYXJlXVxuIgorIiAgICAgICAgICAgWy0tZ2l0LWRpcj08cnV0YT5dIFstLXdvcmstdHJlZT08cnV0YT5dIFstLW5hbWVzcGFjZT08bm9tYnJlPl1cbiIKKyIgICAgICAgICAgIDxjb21hbmRvPiBbPGFyZ3M+XSIKKworIzogZ2l0LmM6MzQKK21zZ2lkICIiCisiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJ0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCBvciBjb25jZXB0LlxuIgorIlNlZSAnZ2l0IGhlbHAgZ2l0JyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS4iCittc2dzdHIgIiIKKyInZ2l0IGhlbHAgLWEnIHkgJ2dpdCBoZWxwIC1nJyBsaXN0YW4gbG9zIHN1YmNvbWFuZG9zIGRpc3BvbmlibGVzIHkgYWxndW5hc1xuIgorImd1w61hcyBkZSBjb25jZXB0by4gQ29uc3VsdGUgJ2dpdCBoZWxwIDxjb21tYW5kPicgbyAnZ2l0IGhlbHAgPGNvbmNlcHRvPidcbiIKKyJwYXJhIGxlZXIgc29icmUgdW4gc3ViY29tYW5kbyBvIGNvbmNlcHRvIGVzcGVjw61maWNvLlxuIgorIk1pcmEgJ2dpdCBoZWxwIGdpdCcgcGFyYSB1bmEgdmlzdGEgZ2VuZXJhbCBkZWwgc2lzdGVtYS4iCisKKyM6IGdpdC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tZ2l0LWRpclxuIgorbXNnc3RyICJubyBzZSBlbnRyZWfDsyBkaXJlY3RvcmlvIHBhcmEgLS1naXQtZGlyXG4iCisKKyM6IGdpdC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlXG4iCittc2dzdHIgIm5vIHNlIGVudHJlZ8OzIG5hbWVzcGFjZSBwYXJhIC0tbmFtZXNwYWNlXG4iCisKKyM6IGdpdC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgIm5vIHNlIGVudHJlZ8OzIGRpcmVjdG9yaW8gcGFyYSAtLXdvcmstdHJlZVxuIgorCisjOiBnaXQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJlZml4IGdpdmVuIGZvciAtLXN1cGVyLXByZWZpeFxuIgorbXNnc3RyICJubyBzZSBlbnRyZWfDsyBwcmVmaWpvIHBhcmEgLS1zdXBlci1wcmVmaXhcbiIKKworIzogZ2l0LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi1jIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIHN0cmluZ1xuIgorbXNnc3RyICItYyBlc3BlcmEgdW4gc3RyaW5nIGRlIGNvbmZpZ3VyYWNpw7NuXG4iCisKKyM6IGdpdC5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC1DXG4iCittc2dzdHIgIm5vIHNlIGVudHJlZ8OzIGRpcmVjdG9yaW8gcGFyYSAtQ1xuIgorCisjOiBnaXQuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgIm9wY2nDs24gJXMgZGVzY29ub2NpZGFcbiIKKworIzogZ2l0LmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIgorbXNnc3RyICJhbCBleHBhbmRpciBlbCBhbGlhcyAnJXMnOiclcyciCisKKyM6IGdpdC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYWxpYXMgJyVzJyBjaGFuZ2VzIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiIKKyJZb3UgY2FuIHVzZSAnIWdpdCcgaW4gdGhlIGFsaWFzIHRvIGRvIHRoaXMiCittc2dzdHIgIiIKKyJhbGlhcyAnJXMnIGNhbWJpYSBsYXMgdmFyaWFibGVzIGRlIGVudG9ybm8uXG4iCisiUHVlZGVzIHVzYXIgJyFnaXQnIGVuIGVsIGFsaWFzIHBhcmEgaGFjZXIgZXN0byIKKworIzogZ2l0LmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGFsaWFzIGZvciAlcyIKK21zZ3N0ciAiYWxpYXMgdmFjw61vIHBhcmEgJXMiCisKKyM6IGdpdC5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgYWxpYXM6ICVzIgorbXNnc3RyICJhbGlhcyByZWN1cnNpdm86ICVzIgorCisjOiBnaXQuYzo0NTkKK21zZ2lkICJ3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiZXJyb3IgZGUgZXNjcml0dXJhIGVuIHN0YW5kYXJkIG91dHB1dCIKKworIzogZ2l0LmM6NDYxCittc2dpZCAidW5rbm93biB3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiZXJyb3IgZGVzY29ub2NpZG8gZGUgZXNjcml0dXJhIGVuIHN0YW5kYXJkIG91dHB1dCIKKworIzogZ2l0LmM6NDYzCittc2dpZCAiY2xvc2UgZmFpbGVkIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiY2llcnJlIGZhbGzDsyBlbiBzdGFuZGFyZCBvdXRwdXQiCisKKyM6IGdpdC5jOjc5MworIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBsb29wIGRldGVjdGVkOiBleHBhbnNpb24gb2YgJyVzJyBkb2VzIG5vdCB0ZXJtaW5hdGU6JXMiCittc2dzdHIgImJ1Y2xlIGRlIGFsaWFzIGRldGVjdGFkbzogZXhwYW5zacOzbiBkZSAnJXMnIG5vIHRlcm1pbmE6ICVzIgorCisjOiBnaXQuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSAlcyBhcyBhIGJ1aWx0aW4iCittc2dzdHIgIm5vIHNlIHB1ZWRlIG1hbmVqYXIgJXMgY29tbyB1biBidWlsdGluIgorCisjOiBnaXQuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVzYWdlOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisidXNvOiAlc1xuIgorIlxuIgorIlxuIgorIlxuIgorCisjOiBnaXQuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwYW5zaW9uIG9mIGFsaWFzICclcycgZmFpbGVkOyAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kXG4iCittc2dzdHIgImV4cGFuc2nDs24gZGVsIGFsaWFzICclcycgZmFsbMOzOyAnJXMnIG5vIGVzIHVuIGNvbWFuZG8gZGUgZ2l0XG4iCisKKyM6IGdpdC5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuIGNvbW1hbmQgJyVzJzogJXNcbiIKK21zZ3N0ciAiZmFsbMOzIGFsIGVqZWN1dGFyIGNvbWFuZG8gJyVzJzogJXNcbiIKKworIzogaHR0cC5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZSBmb3IgaHR0cC5wb3N0YnVmZmVyOyBkZWZhdWx0aW5nIHRvICVkIgorbXNnc3RyICJ2YWxvciBuZWdhdGl2byBwYXJhIGh0dHAucG9zdGJ1ZmZlcjsgcG9uaWVuZG8gZWwgZGVmYXVsdCBhICVkIgorCisjOiBodHRwLmM6Mzk5Cittc2dpZCAiRGVsZWdhdGlvbiBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4yMi4wIgorbXNnc3RyICJEZWxlZ2FjacOzbiBkZSBjb250cm9sIG5vIGVzIHNvcG9ydGFkYSBjb24gY1VSTCA8IDcuMjIuMCIKKworIzogaHR0cC5jOjQwOAorbXNnaWQgIlB1YmxpYyBrZXkgcGlubmluZyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiRmlqYWNpw7NuIGRlIGxsYXZlIHDDumJsaWNhIG5vIGVzIHNvcG9ydGFkYSBjb24gY1VSTCA8IDcuNDQuMCIKKworIzogaHR0cC5jOjg3NgorbXNnaWQgIkNVUkxTU0xPUFRfTk9fUkVWT0tFIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy40NC4wIgorbXNnc3RyICJDVVJMU1NMT1BUX05PX1JFVk9LRSBubyBzb3BvcnRhZG8gY29uIGNVUkwgPCA3LjQ0LjAiCisKKyM6IGh0dHAuYzo5NDkKK21zZ2lkICJQcm90b2NvbCByZXN0cmljdGlvbnMgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjE5LjQiCittc2dzdHIgIlJlc3RyaWNjacOzbiBkZSBwcm90b2NvbG8gbm8gc29wb3J0YWRhIGNvbiBjVVJMIDwgNy4xOS40IgorCisjOiBodHRwLmM6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbnN1cHBvcnRlZCBTU0wgYmFja2VuZCAnJXMnLiBTdXBwb3J0ZWQgU1NMIGJhY2tlbmRzOiIKK21zZ3N0ciAiQmFja2VuZCBTU0wgbm8gc29wb3J0YWRvICclcycuIEJhY2tlbmRzIFNTTCBzb3BvcnRhZG9zOiIKKworIzogaHR0cC5jOjEwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBjVVJMIHdhcyBidWlsdCB3aXRob3V0IFNTTCBiYWNrZW5kcyIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZG8gY29uZmlndXJhciBiYWNrZW5kIFNTTCBhICclcyc6IGNVUkwgZnVlIGNvbnN0cnVpZG8gc2luIGJhY2tlbmRzICIKKyJTU0wiCisKKyM6IGh0dHAuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogYWxyZWFkeSBzZXQiCittc2dzdHIgIk5vIHNlIHB1ZG8gY29uZmlndXJhciBiYWNrZW5kIFNTTCBwYXJhICclcyc6IHlhIGNvbmZpZ3VyYWRvIgorCisjOiBodHRwLmM6MTk2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIHVwZGF0ZSB1cmwgYmFzZSBmcm9tIHJlZGlyZWN0aW9uOlxuIgorIiAgYXNrZWQgZm9yOiAlc1xuIgorIiAgIHJlZGlyZWN0OiAlcyIKK21zZ3N0ciAiIgorIm5vIHB1ZWRlIGFjdHVhbGl6YXIgbGEgYmFzZSBkZSB1cmwgZGUgbGEgcmVkaXJlY2Npw7NuOlxuIgorIiAgcHJlZ3VudGFiYSBwb3I6ICVzXG4iCisiICAgcmVkaXJlY2Npb25hbWllbnRvOiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBxdW90aW5nIGluIHB1c2gtb3B0aW9uIHZhbHVlOiAnJXMnIgorbXNnc3RyICJxdW90aW5nIGludsOhbGlkbyBlbiB2YWxvciBkZSBwdXNoLW9wdGlvbjogJyVzJyIKKworIzogcmVtb3RlLWN1cmwuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNpbmZvL3JlZnMgbm90IHZhbGlkOiBpcyB0aGlzIGEgZ2l0IHJlcG9zaXRvcnk/IgorbXNnc3RyICIlc2luZm8vcmVmcyBubyBlcyB2w6FsaWRvOiDCv2VzIGVzdGUgdW4gcmVwb3NpdG9yaW8gZ2l0PyIKKworIzogcmVtb3RlLWN1cmwuYzozNjQKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZXhwZWN0ZWQgc2VydmljZSwgZ290IGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiIgorInJlc3B1ZXN0YSBkZSBzZXJ2aWRvciBpbnbDoWxpZGE7IHNlIGVzcGVyYWJhIHNlcnZpY2lvLCBzZSBvYnR1dm8gdW4gZmx1c2ggIgorInBhY2tldCIKKworIzogcmVtb3RlLWN1cmwuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGdvdCAnJXMnIgorbXNnc3RyICJyZXNwdWVzdGEgZGUgc2Vydmlkb3IgaW52w6FsaWRhOyBzZSBvYnR1dm8gJyVzJyIKKworIzogcmVtb3RlLWN1cmwuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAicmVwb3NpdG9yaW8gJyVzJyBubyBlbmNvbnRyYWRvIgorCisjOiByZW1vdGUtY3VybC5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yICclcyciCittc2dzdHIgIkF1dGVudGljYWNpw7NuIGZhbGzDsyBwYXJhICclcyciCisKKyM6IHJlbW90ZS1jdXJsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYWNjZWRlciAnJXMnOiVzIgorCisjOiByZW1vdGUtY3VybC5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyB0byAlcyIKK21zZ3N0ciAicmVkaXJpZ2llbmRvIGEgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6NTkzCittc2dpZCAic2hvdWxkbid0IGhhdmUgRU9GIHdoZW4gbm90IGdlbnRsZSBvbiBFT0YiCittc2dzdHIgIm5vIGRlYmVyw61hIHRlbmVyIEVPRiBjdWFuZG8gbm8gZXMgZ2VudGlsIGVuIEVPRiIKKworIzogcmVtb3RlLWN1cmwuYzo2NzMKK21zZ2lkICJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiCittc2dzdHIgIiIKKyJubyBlcyBwb3NpYmxlIHJlYm9iaW5hciBycGMgcG9zdCBkYXRhIC0gaW50ZW50YSBpbmNyZW1lbnRhbmRvIGh0dHAucG9zdEJ1ZmZlciIKKworIzogcmVtb3RlLWN1cmwuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUlBDIGZhaWxlZDsgJXMiCittc2dzdHIgIlJQQyBmYWxsw7M7ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjc3MworbXNnaWQgImNhbm5vdCBoYW5kbGUgcHVzaGVzIHRoaXMgYmlnIgorbXNnc3RyICJubyBzZSBwdWVkZSBtYW5lamFyIHB1c2hlcyB0YW4gZ3JhbmRlcyIKKworIzogcmVtb3RlLWN1cmwuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBkZWZsYXRlIGVycm9yICVkIgorbXNnc3RyICJubyBzZSBwdWVkZSBkZXNpbmZsYXIgZWwgcmVxdWVzdDsgemxpYiBkZWZsYXRlIGVycm9yICVkIgorCisjOiByZW1vdGUtY3VybC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGVuZCBlcnJvciAlZCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZGVzaW5mbGFyIGVsIHJlcXVlc3Q7IHpsaWIgZW5kIGVycm9yICVkIgorCisjOiByZW1vdGUtY3VybC5jOjEwMjMKK21zZ2lkICJkdW1iIGh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjYXBhYmlsaXRpZXMiCittc2dzdHIgImR1bXAgaHR0cCB0cmFuc3BvcnQgbm8gc29wb3J0YSBjYXBhY2lkYWRlcyBzdXBlcmZpY2lhbGVzIgorCisjOiByZW1vdGUtY3VybC5jOjEwMzgKK21zZ2lkICJmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJmZXRjaCBmYWxsw7MuIgorCisjOiByZW1vdGUtY3VybC5jOjEwODYKK21zZ2lkICJjYW5ub3QgZmV0Y2ggYnkgc2hhMSBvdmVyIHNtYXJ0IGh0dHAiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGhhY2VyIGZldGNoIHBvciBzaGExIHNvYnJlIHNtYXJ0IGh0dHAiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTEzMCByZW1vdGUtY3VybC5jOjExMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAnJXMnIgorbXNnc3RyICJlcnJvciBkZSBwcm90b2NvbG86IHNlIGVzcGVyYWJhIHNoYS9yZWYsIHNlIG9idHV2byAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjExNDggcmVtb3RlLWN1cmwuYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiCittc2dzdHIgImh0dHAgdHJhbnNwb3J0IG5vIHNvcG9ydGEgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE4NAorbXNnaWQgImdpdC1odHRwLXB1c2ggZmFpbGVkIgorbXNnc3RyICJnaXQtaHR0cC1wdXNoIGZhbGzDsyIKKworIzogcmVtb3RlLWN1cmwuYzoxMzY5Cittc2dpZCAicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPHJlbW90ZT4gWzx1cmw+XSIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IHVzbzogZ2l0IHJlbW90ZS1jdXJsIDxyZW1vdGU+IFs8dXJsPl0iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwMQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybDogZXJyb3IgbGV5ZW5kbyBjb21tYW5kIHN0cmVhbSBkZSBnaXQiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwOAorbXNnaWQgInJlbW90ZS1jdXJsOiBmZXRjaCBhdHRlbXB0ZWQgd2l0aG91dCBhIGxvY2FsIHJlcG8iCittc2dzdHIgInJlbW90ZS1jdXJsOiBmZXRjaCBpbnRlbnRhZG8gc2luIHVuIHJlcG9zaXRvcmlvIGxvY2FsIgorCisjOiByZW1vdGUtY3VybC5jOjE0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLWN1cmw6IHVua25vd24gY29tbWFuZCAnJXMnIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybDogY29tYW5kbyAnJXMnIGRlc2Nvbm9jaWRvIGRlIGdpdCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODUKK21zZ2lkICJhcmdzIgorbXNnc3RyICJhcmdzIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NgorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgImZpbHRyYWRvIGRlIG9iamV0byIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE4MworbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICJmZWNoYSBkZSBleHBpcmFjacOzbiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE5NworbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAibm8tb3AgKGNvbXBhdGliaWxpZGFkIGNvbiB2ZXJzaW9uZXMgYW50ZXJpb3JlcykiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMDkKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgInNlciBtw6FzIHZlcmJvc28iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTEKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICJzZXIgbcOhcyBkaXNjcmV0byIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxNworbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICJ1c2EgPG4+IGTDrWdpdG9zIHBhcmEgbW9zdHJhciBTSEEtMXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICJjw7NtbyBxdWl0YXIgZXNwYWNpb3MgeSAjY29tZW50YXJpb3MgZGUgbWVuc2FqZXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzcKK21zZ2lkICJyZWFkIHBhdGhzcGVjIGZyb20gZmlsZSIKK21zZ3N0ciAibGVlciBwYXRoc3BlYyBkZSBhcmNoaXZvIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM4Cittc2dpZCAiIgorIndpdGggLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHBhdGhzcGVjIGVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICIiCisiY29uIC0tcGF0aHNwZWMtZnJvbS1maWxlLCBlbGVtZW50b3MgZGUgcGF0aHNwZWMgc29uIHNlcGFyYWRvcyBjb24gY2FyYWN0ZXIgIgorIk5VTCIKKworIzogcmVmLWZpbHRlci5oOjEwMQorbXNnaWQgImtleSIKK21zZ3N0ciAiY2xhdmUiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgIm5vbWJyZSBkZWwgY2FtcG8gcG9yIGVsIGN1w6FsIG9yZGVuYXIiCisKKyM6IHJlcmVyZS5oOjQ0Cittc2dpZCAidXBkYXRlIHRoZSBpbmRleCB3aXRoIHJldXNlZCBjb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlIgorbXNnc3RyICIiCisiYWN0dWFsaXphciBlbCDDrW5kaWNlIGNvbiBsYSByZXNvbHVjacOzbiBkZSBjb25mbGljdG9zIHJldXRpbGl6YWRhIHNpIGVzICIKKyJwb3NpYmxlIgorCisjOiB3dC1zdGF0dXMuaDo2NworbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICJIRUFEIGRlc2Fjb3BsYWRhIGVuICIKKworIzogd3Qtc3RhdHVzLmg6NjgKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICJIRUFEIGRlc2Fjb3BsYWRhIGRlICIKKworIzogY29tbWFuZC1saXN0Lmg6NTAKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkFncmVnYSBjb250ZW5pZG8gZGUgY2FycGV0YXMgYWwgw61uZGljZSIKKworIzogY29tbWFuZC1saXN0Lmg6NTEKK21zZ2lkICJBcHBseSBhIHNlcmllcyBvZiBwYXRjaGVzIGZyb20gYSBtYWlsYm94IgorbXNnc3RyICJBcGxpY2FyIHVuYSBzZXJpZSBkZSBwYXJjaGVzIGRlIHVuIG1haWxib3giCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUyCittc2dpZCAiQW5ub3RhdGUgZmlsZSBsaW5lcyB3aXRoIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiQW5vdGFyIGzDrW5lYXMgZGUgYXJjaGl2byBjb24gaW5mb3JtYWNpw7NuIGRlIGNvbW1pdCIKKworIzogY29tbWFuZC1saXN0Lmg6NTMKK21zZ2lkICJBcHBseSBhIHBhdGNoIHRvIGZpbGVzIGFuZC9vciB0byB0aGUgaW5kZXgiCittc2dzdHIgIkFwbGljYXIgdW4gcGFyY2hlIGEgYXJjaGl2b3MgeS9vICBlbCDDrW5kaWNlIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NAorbXNnaWQgIkltcG9ydCBhIEdOVSBBcmNoIHJlcG9zaXRvcnkgaW50byBHaXQiCittc2dzdHIgIkltcG9ydGFyIHVuIHJlcG9zaXRvcmlvIEdOVSBBcmNoIGVuIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6NTUKK21zZ2lkICJDcmVhdGUgYW4gYXJjaGl2ZSBvZiBmaWxlcyBmcm9tIGEgbmFtZWQgdHJlZSIKK21zZ3N0ciAiQ3JlYXIgdW4gYXJjaGl2byBvIGFyY2hpdm9zIGRlIHVuIMOhcmJvbCBub21icmFkbyIKKworIzogY29tbWFuZC1saXN0Lmg6NTYKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICJVc2UgbGEgYsO6c3F1ZWRhIGJpbmFyaWEgcGFyYSBlbmNvbnRyYXIgZWwgY29tbWl0IHF1ZSBpbnRyb2R1am8gZWwgYnVnIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NworbXNnaWQgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIKK21zZ3N0ciAiIgorIk1vc3RyYXIgcXXDqSByZXZpc2nDs24geSBhdXRvciBtb2RpZmljYXJvbiBhbCDDumx0aW1vIGNhZGEgbMOtbmVhIGRlIHVuIGFyY2hpdm8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU4Cittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgIkxpc3RhLCBjcmVhLCBvIGJvcnJhIHJhbWFzIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OQorbXNnaWQgIk1vdmUgb2JqZWN0cyBhbmQgcmVmcyBieSBhcmNoaXZlIgorbXNnc3RyICJNb3ZlciBvYmpldG9zIHkgcmVmZXJlbmNpYXMgcG9yIGFyY2hpdm8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYwCittc2dpZCAiUHJvdmlkZSBjb250ZW50IG9yIHR5cGUgYW5kIHNpemUgaW5mb3JtYXRpb24gZm9yIHJlcG9zaXRvcnkgb2JqZWN0cyIKK21zZ3N0ciAiIgorIlByb3ZlZXIgY29udGVuaWRvIG8gdGlwbyB5IHRhbWHDsW8gZGUgaW5mb3JtYWNpw7NuIHBhcmEgb2JqZXRvcyBkZSByZXBvc2l0b3JpbyIKKworIzogY29tbWFuZC1saXN0Lmg6NjEKK21zZ2lkICJEaXNwbGF5IGdpdGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24iCittc2dzdHIgIk1vc3RyYXIgaW5mb3JtYWNpw7NuIGRlIGdpdGF0dHJpYnV0ZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYyCittc2dpZCAiRGVidWcgZ2l0aWdub3JlIC8gZXhjbHVkZSBmaWxlcyIKK21zZ3N0ciAiRGVidWcgYSBnaXRpZ25vcmUgLyBleGNsdWlyIGFyY2hpdm9zIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MworbXNnaWQgIlNob3cgY2Fub25pY2FsIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMgb2YgY29udGFjdHMiCittc2dzdHIgIk1vc3RyYXIgbm9tYnJlcyBjYW7Ds25pY29zIHkgZGlyZWNjaW9uZXMgZGUgY29ycmVvIGRlIGNvbnRhY3RvcyIKKworIzogY29tbWFuZC1saXN0Lmg6NjQKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIkNhbWJpYSByYW1hcyBvIHJlc3RhdXJhIGxvcyBhcmNoaXZvcyBkZSB0dSDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogY29tbWFuZC1saXN0Lmg6NjUKK21zZ2lkICJDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIkNvcGlhciBhcmNoaXZvcyBkZWwgw61uZGljZSBhbCDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogY29tbWFuZC1saXN0Lmg6NjYKK21zZ2lkICJFbnN1cmVzIHRoYXQgYSByZWZlcmVuY2UgbmFtZSBpcyB3ZWxsIGZvcm1lZCIKK21zZ3N0ciAiQXNlZ3VyYSBxdWUgdW4gbm9tYnJlIGRlIHJlZmVyZW5jaWEgZXN0w6kgYmllbiBmb3JtYWRvIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NworbXNnaWQgIkZpbmQgY29tbWl0cyB5ZXQgdG8gYmUgYXBwbGllZCB0byB1cHN0cmVhbSIKK21zZ3N0ciAiRW5jdWVudHJhIGNvbW1pdHMgcXVlIGZhbHRhbiBhcGxpY2FyIGVuIHVwc3RyZWFtIgorCisjOiBjb21tYW5kLWxpc3QuaDo2OAorbXNnaWQgIkFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICJBcGxpY2EgbG9zIGNhbWJpb3MgaW50cm9kdWNpZG9zIHBvciBhbGd1bm9zIGNvbW1pdHMgZXhpc3RlbnRlcyIKKworIzogY29tbWFuZC1saXN0Lmg6NjkKK21zZ2lkICJHcmFwaGljYWwgYWx0ZXJuYXRpdmUgdG8gZ2l0LWNvbW1pdCIKK21zZ3N0ciAiT3BjacOzbiBncsOhZmljYSBhIGdpdC1jb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcwCittc2dpZCAiUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIlJlbXVldmUgYXJjaGl2b3MgZGVsIMOhcmJvbCBkZSB0cmFiYWpvIG5vIHJhc3RyZWFkb3MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcxCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICJDbG9uYSB1biByZXBvc2l0b3JpbyBkZW50cm8gZGUgdW4gbnVldm8gZGlyZWN0b3JpbyIKKworIzogY29tbWFuZC1saXN0Lmg6NzIKK21zZ2lkICJEaXNwbGF5IGRhdGEgaW4gY29sdW1ucyIKK21zZ3N0ciAiTW9zdHJhciBkYXRhIGVuIGNvbHVtbmFzIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MworbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJHcmFiYSBsb3MgY2FtYmlvcyBlbiB0dSByZXBvc2l0b3JpbyIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIkVzY3JpYmUgeSB2ZXJpZmljYSBsb3MgYXJjaGl2b3MgZGUgR2l0IGNvbW1pdC1ncmFwaCIKKworIzogY29tbWFuZC1saXN0Lmg6NzUKK21zZ2lkICJDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiQ3JlYSB1biBudWV2byBvYmpldG8gY29tbWl0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgIkNvbmZpZ3VyYXIgcmVwb3NpdG9yaW8gdSBvcGNpb25lcyBnbG9iYWxlcyIKKworIzogY29tbWFuZC1saXN0Lmg6NzcKK21zZ2lkICJDb3VudCB1bnBhY2tlZCBudW1iZXIgb2Ygb2JqZWN0cyBhbmQgdGhlaXIgZGlzayBjb25zdW1wdGlvbiIKK21zZ3N0ciAiQ29udGFyIG7Dum1lcm8gZGUgb2JqZXRvcyBubyBlbXBhcXVldGFkb3MgeSBzdSBjb25zdW1vIGVuIGRpc2NvIgorCisjOiBjb21tYW5kLWxpc3QuaDo3OAorbXNnaWQgIlJldHJpZXZlIGFuZCBzdG9yZSB1c2VyIGNyZWRlbnRpYWxzIgorbXNnc3RyICJPYnRlbmVyIHkgZ3VhcmRhciBjcmVkZW5jaWFsZXMgZGUgdXN1YXJpbyIKKworIzogY29tbWFuZC1saXN0Lmg6NzkKK21zZ2lkICJIZWxwZXIgdG8gdGVtcG9yYXJpbHkgc3RvcmUgcGFzc3dvcmRzIGluIG1lbW9yeSIKK21zZ3N0ciAiQXV4aWxpYXIgcGFyYSBhbG1hY2VuYXIgdGVtcG9yYWxtZW50ZSBjbGF2ZXMgZW4gbWVtb3JpYSIKKworIzogY29tbWFuZC1saXN0Lmg6ODAKK21zZ2lkICJIZWxwZXIgdG8gc3RvcmUgY3JlZGVudGlhbHMgb24gZGlzayIKK21zZ3N0ciAiQXV4aWxpYXIgcGFyYSBndWFyZGFyIGNyZWRlbmNpYWxlcyBlbiBkaXNjbyIKKworIzogY29tbWFuZC1saXN0Lmg6ODEKK21zZ2lkICJFeHBvcnQgYSBzaW5nbGUgY29tbWl0IHRvIGEgQ1ZTIGNoZWNrb3V0IgorbXNnc3RyICJFeHBvcnRhIHVuIGNvbW1pdCDDum5pY28gYSBDVlMgY2hlY2tvdXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgyCittc2dpZCAiU2FsdmFnZSB5b3VyIGRhdGEgb3V0IG9mIGFub3RoZXIgU0NNIHBlb3BsZSBsb3ZlIHRvIGhhdGUiCittc2dzdHIgIlNhbHZhIHR1cyBkYXRvcyBkZSBvdHJvIFNDTSBxdWUgbGEgZ2VudGUgYWRvcmEgb2RpYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgzCittc2dpZCAiQSBDVlMgc2VydmVyIGVtdWxhdG9yIGZvciBHaXQiCittc2dzdHIgIlVuIHNlcnZpZG9yIGVtdWxhZG9yIGRlIENWUyBwYXJhIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODQKK21zZ2lkICJBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHaXQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJVbiBzZXJ2aWRvciByZWFsbWVudGUgc2ltcGxlIHBhcmEgcmVwb3NpdG9yaW9zIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODUKK21zZ2lkICJHaXZlIGFuIG9iamVjdCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgYmFzZWQgb24gYW4gYXZhaWxhYmxlIHJlZiIKK21zZ3N0ciAiIgorIkRhciBhIHVuIG9iamV0byB1biBub21icmUgbGVnaWJsZSBwb3IgaHVtYW5vcyBiYXNhZG8gZW4gdW5hIHJlZmVyZW5jaWEgIgorImRpc3BvbmlibGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg2Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiTXVlc3RyYSBsb3MgY2FtYmlvcyBlbnRyZSBjb21taXRzLCBjb21taXQgeSDDoXJib2wgZGUgdHJhYmFqbywgZXRjIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NworbXNnaWQgIkNvbXBhcmVzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCIKK21zZ3N0ciAiQ29tcGFyYSBhcmNoaXZvcyBkZWwgw6FyYm9sIGRlIHRyYWJham8geSBkZWwgw61uZGljZSIKKworIzogY29tbWFuZC1saXN0Lmg6ODgKK21zZ2lkICJDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4IgorbXNnc3RyICJDb21wYXJhIHVuIMOhcmJvbCBjb24gZWwgw6FyYm9sIGRlIHRyYWJham8gbyDDrW5kaWNlIgorCisjOiBjb21tYW5kLWxpc3QuaDo4OQorbXNnaWQgIkNvbXBhcmVzIHRoZSBjb250ZW50IGFuZCBtb2RlIG9mIGJsb2JzIGZvdW5kIHZpYSB0d28gdHJlZSBvYmplY3RzIgorbXNnc3RyICIiCisiQ29tcGFyYSBlbCBjb250ZW5pZG8geSBlbCBtb2RvIGRlIGJsb2JzIGVuY29udHJhZG9zIGEgdHJhdsOpcyBkZSBkb3Mgb2JqZXRvcyAiCisiZGUgw6FyYm9sIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAiTW9zdHJhciBjYW1iaW9zIHVzYW5kbyBoZXJyYW1pZW50YXMgZGUgZGlmZiBjb211bmVzIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MQorbXNnaWQgIkdpdCBkYXRhIGV4cG9ydGVyIgorbXNnc3RyICJFeHBvcnRhZG9yIGRlIGRhdGEgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo5MgorbXNnaWQgIkJhY2tlbmQgZm9yIGZhc3QgR2l0IGRhdGEgaW1wb3J0ZXJzIgorbXNnc3RyICJCYWNrZW5kIHBhcmEgaW1wb3J0YWRvcmVzIGRlIGRhdGEgZGUgR2l0IHLDoXBpZG9zIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MworbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIkRlc2NhcmdhIG9iamV0b3MgeSByZWZlcmVuY2lhcyBkZSBvdHJvIHJlcG9zaXRvcmlvIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJEZXNjYXJnYSBvYmpldG9zIGZhbHRhbnRlcyBkZSBvdHJvIHJlcG9zaXRvcmlvIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NQorbXNnaWQgIlJld3JpdGUgYnJhbmNoZXMiCittc2dzdHIgIlJlZXNjcmliaXIgcmFtYXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk2Cittc2dpZCAiUHJvZHVjZSBhIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJQcm9kdWNlIHVuIG1lbnNhamUgZGUgY29tbWl0IHBhcmEgZnVzacOzbiIKKworIzogY29tbWFuZC1saXN0Lmg6OTcKK21zZ2lkICJPdXRwdXQgaW5mb3JtYXRpb24gb24gZWFjaCByZWYiCittc2dzdHIgIkluZm9ybWFjacOzbiBkZSBvdXRwdXQgZW4gY2FkYSByZWYiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk4Cittc2dpZCAiUHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwgc3VibWlzc2lvbiIKK21zZ3N0ciAiUHJlcGFyYSBwYXJjaGVzIHBhcmEgc2VyIGVudmlhZG9zIHBvciBlLW1haWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk5Cittc2dpZCAiVmVyaWZpZXMgdGhlIGNvbm5lY3Rpdml0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlIgorbXNnc3RyICIiCisiVmVyaWZpY2EgbGEgY29uZWN0aXZpZGFkIHkgZGlzcG9uaWJpbGlkYWQgZGUgbG9zIG9iamV0b3MgZW4gbGEgYmFzZSBkZSBkYXRvcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTAwCittc2dpZCAiQ2xlYW51cCB1bm5lY2Vzc2FyeSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIkxpbXBpYSBhcmNoaXZvcyBpbm5lY2VzYXJpb3MgeSBvcHRpbWl6YSBlbCByZXBvc2l0b3JpbyBsb2NhbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTAxCittc2dpZCAiRXh0cmFjdCBjb21taXQgSUQgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgdXNpbmcgZ2l0LWFyY2hpdmUiCittc2dzdHIgIkV4dHJhZSBlbCBJRCBkZSBjb21taXQgZGUgdW4gYXJjaGl2byBjcmVhZG8gdXNhbmRvIGdpdC1hcmNoaXZlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDIKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIkltcHJpbWUgbGFzIGzDrW5lYXMgcXVlIGNvbmN1ZXJkYW4gY29uIGVsIHBhdHJvbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTAzCittc2dpZCAiQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdCIKK21zZ3N0ciAiVW5hIGludGVyZmF6IGdyw6FmaWNhIHBvcnTDoXRpbCBwYXJhIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA0Cittc2dpZCAiQ29tcHV0ZSBvYmplY3QgSUQgYW5kIG9wdGlvbmFsbHkgY3JlYXRlcyBhIGJsb2IgZnJvbSBhIGZpbGUiCittc2dzdHIgIkNvbXB1dGEgSUQgZGUgb2JqZXRvIHksIG9wY2lvbmFsbWVudGUsIGNyZWEgdW4gYmxvYiBkZSB1biBhcmNoaXZvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDUKK21zZ2lkICJEaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gYWJvdXQgR2l0IgorbXNnc3RyICJNb3N0cmFyIGluZm9ybWFjacOzbiBzb2JyZSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNgorbXNnaWQgIlNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdpdCBvdmVyIEhUVFAiCittc2dzdHIgIkltcGxlbWVudGFjacOzbiBkZSBsYWRvIGRlIHNlcnZpZG9yIGRlIEdpdCBwb3IgSFRUUCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA3Cittc2dpZCAiRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUCIKK21zZ3N0ciAiRGVzY2FyZ2EgZGUgdW4gcmVwb3NpdG9yaW8gR2l0IHJlbW90byB2w61hIEhUVFAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOAorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEhUVFAvREFWIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiRW1wdWphIG9iamV0b3MgcG9yIEhUVFAvREFWIGEgb3RybyByZXBvc2l0b3JpbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTA5Cittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBmcm9tIHN0ZGluIHRvIGFuIElNQVAgZm9sZGVyIgorbXNnc3RyICJFbnZpYXIgdW5hIGNvbGVjY2nDs24gZGUgcGFyY2hlcyBkZSBzdGRpbiBhIHVuYSBjYXJwZXRhIElNQVAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIkNvbnN0dXllIHVuIGFyY2hpdm8gZGUgw61uZGljZSBwYXJhIHVuIGFyY2hpdm8gZW1wYXF1ZXRhZG8gZXhpc3RlbnRlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTEKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAiQ3JlYSB1biByZXBvc2l0b3JpbyBkZSBHaXQgdmFjw61vIG8gcmVpbmljaWEgZWwgcXVlIHlhIGV4aXN0ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTEyCittc2dpZCAiSW5zdGFudGx5IGJyb3dzZSB5b3VyIHdvcmtpbmcgcmVwb3NpdG9yeSBpbiBnaXR3ZWIiCittc2dzdHIgIkJ1c2NhciBpbnN0YW50w6FuZWFtZW50ZSB0dSByZXBvc2l0b3JpbyBkZSB0cmFiYWpvIGVuIGdpdHdlYiIKKworIzogY29tbWFuZC1saXN0Lmg6MTEzCittc2dpZCAiQWRkIG9yIHBhcnNlIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gaW4gY29tbWl0IG1lc3NhZ2VzIgorbXNnc3RyICJBZ3JlZ2FyIG8gYW5hbGl6YXIgaW5mb3JtYWNpw7NuIGVzdHJ1Y3R1cmFkYSBlbiBtZW5zYWplcyBkZSBjb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNAorbXNnaWQgIlRoZSBHaXQgcmVwb3NpdG9yeSBicm93c2VyIgorbXNnc3RyICJFbCBuYXZlZ2Fkb3IgZGUgcmVwb3NpdG9yaW8gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTUKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJNdWVzdHJhIGxvcyBsb2dzIGRlIGxvcyBjb21taXRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTYKK21zZ2lkICJTaG93IGluZm9ybWF0aW9uIGFib3V0IGZpbGVzIGluIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiTXVlc3RyYSBpbmZvcm1hY2nDs24gc29icmUgYXJjaGl2b3MgaW4gZWwgw61uZGljZSB5IGVsIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTcKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiTGlzdGEgcmVmZXJlbmNpYXMgZW4gdW4gcmVwb3NpdG9yaW8gcmVtb3RvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTgKK21zZ2lkICJMaXN0IHRoZSBjb250ZW50cyBvZiBhIHRyZWUgb2JqZWN0IgorbXNnc3RyICJMaXN0YSBsb3MgY29udGVuaWRvcyBkZSB1biBvYmpldG8gw6FyYm9sIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTkKK21zZ2lkICJFeHRyYWN0cyBwYXRjaCBhbmQgYXV0aG9yc2hpcCBmcm9tIGEgc2luZ2xlIGUtbWFpbCBtZXNzYWdlIgorbXNnc3RyICJFeHRyYWVyIHBhcmNoZSB5IGF1dG9yw61hIGRlIHVuIMO6bmljbyBtZW5zYWplIGRlIGUtbWFpbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTIwCittc2dpZCAiU2ltcGxlIFVOSVggbWJveCBzcGxpdHRlciBwcm9ncmFtIgorbXNnc3RyICJQcm9ncmFtYSBkaXZpc29yIGRlIG1ib3ggc2ltcGxlIGRlIFVOSVgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMQorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICJKdW50YSBkb3MgbyBtw6FzIGhpc3RvcmlhbGVzIGRlIGRlc2Fycm9sbG8ganVudG9zIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjIKK21zZ2lkICJGaW5kIGFzIGdvb2QgY29tbW9uIGFuY2VzdG9ycyBhcyBwb3NzaWJsZSBmb3IgYSBtZXJnZSIKK21zZ3N0ciAiRW5jdWVudHJhIHVuIGFuY2VzdHJvIGNvbcO6biBidWVubyBwYXJhIHVuYSBwb3NpYmxlIGZ1c2nDs24iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMworbXNnaWQgIlJ1biBhIHRocmVlLXdheSBmaWxlIG1lcmdlIgorbXNnc3RyICJFamVjdXRhIHVuYSBmdXNpw7NuIGRlIHRyZXMgdsOtYXMgZW4gdW4gYXJjaGl2byIKKworIzogY29tbWFuZC1saXN0Lmg6MTI0Cittc2dpZCAiUnVuIGEgbWVyZ2UgZm9yIGZpbGVzIG5lZWRpbmcgbWVyZ2luZyIKK21zZ3N0ciAiRWplY3V0YSB1bmEgZnVzacOzbiBwYXJhIGFyY2hpdm9zIHF1ZSBsYSBuZWNlc2l0YW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNQorbXNnaWQgIlRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCBnaXQtbWVyZ2UtaW5kZXgiCittc2dzdHIgIkVsIHByb2dyYW1hIGRlIGF5dWRhIGVzdMOhbmRhciBwYXJhIHVzYXIgY29uIGdpdC1tZXJnZS1pbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI2Cittc2dpZCAiUnVuIG1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb24gdG9vbHMgdG8gcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMiCittc2dzdHIgIiIKKyJFamVjdXRhIGxhcyBoZXJyYW1pZW50YXMgZGUgZnVzacOzbiBkZSByZXNvbHVjacOzbiBkZSBjb25mbGljdG9zIHBhcmEgcmVzb2x2ZXIgIgorImNvbmZsaWN0b3MgZGUgZnVzacOzbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI3Cittc2dpZCAiU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleCIKK21zZ3N0ciAiTW9zdHJhciBmdXNpw7NuIGRlIHRyZXMgdsOtYXMgc2luIHRvY2FyIGVsIMOtbmRpY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgbXVsdGktcGFjay1pbmRleGVzIgorbXNnc3RyICJFc2NyaWJlIHkgdmVyaWZpY2EgYXJjaGl2b3MgbXVsdGktcGFjay1pbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI5Cittc2dpZCAiQ3JlYXRlcyBhIHRhZyBvYmplY3QiCittc2dzdHIgIkNyZWEgdW4gb2JqZXRvIHRhZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTMwCittc2dpZCAiQnVpbGQgYSB0cmVlLW9iamVjdCBmcm9tIGxzLXRyZWUgZm9ybWF0dGVkIHRleHQiCittc2dzdHIgIkNvbnN0cnVpciB1biBvYmpldG8gw6FyYm9sIGRlIHVuIHRleHRvIGVuIGZvcm1hdG8gbHMtdHJlZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTMxCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICJNdWV2ZSBvIGNhbWJpYSBlbCBub21icmUgYSBhcmNoaXZvcywgZGlyZWN0b3Jpb3MgbyBlbmxhY2VzIHNpbWLDs2xpY29zIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzIKK21zZ2lkICJGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzIgorbXNnc3RyICJFbmNvbnRyYXIgbm9tYnJlcyBzaW1iw7NsaWNvcyBwYXJhIHJldnMgZGFkb3MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMworbXNnaWQgIkFkZCBvciBpbnNwZWN0IG9iamVjdCBub3RlcyIKK21zZ3N0ciAiQWdyZWdhIG8gaW5zcGVjY2lvbmEgb2JqZXRvcyBub3RhIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzQKK21zZ2lkICJJbXBvcnQgZnJvbSBhbmQgc3VibWl0IHRvIFBlcmZvcmNlIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAiSW1wb3J0YXIgZGVzZGUgeSBlbnZpYXIgYSByZXBvc2l0b3Jpb3MgUGVyZm9yY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNQorbXNnaWQgIkNyZWF0ZSBhIHBhY2tlZCBhcmNoaXZlIG9mIG9iamVjdHMiCittc2dzdHIgIkNyZWEgdW4gYXJjaGl2byBkZSBvYmpldG9zIGVtcGFxdWV0YWRvcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTM2Cittc2dpZCAiRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcyIKK21zZ3N0ciAiRW5jdWVudHJhIGFyY2hpdm9zIGVtcGFxdWV0YWRvcyBkZSBtYW5lcmEgcmVkdW5kYW50ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM3Cittc2dpZCAiUGFjayBoZWFkcyBhbmQgdGFncyBmb3IgZWZmaWNpZW50IHJlcG9zaXRvcnkgYWNjZXNzIgorbXNnc3RyICJFbXBhcXVldGEgaGVhZHMgeSB0YWdzIHBhcmEgdW4gYWNjZXNvIGVmaWNpZW50ZSBhbCByZXBvc2l0b3JpbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTM4Cittc2dpZCAiUm91dGluZXMgdG8gaGVscCBwYXJzaW5nIHJlbW90ZSByZXBvc2l0b3J5IGFjY2VzcyBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisiUnV0aW5hcyBwYXJhIGF5dWRhciBhIGFuYWxpemFyIGxvcyBwYXLDoW1ldHJvcyBkZSBhY2Nlc28gZGVsIHJlcG9zaXRvcmlvICIKKyJyZW1vdG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOQorbXNnaWQgIkNvbXB1dGUgdW5pcXVlIElEIGZvciBhIHBhdGNoIgorbXNnc3RyICJDYWxjdWxhciBJRCDDum5pY28gcGFyYSB1biBwYXJjaGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MAorbXNnaWQgIlBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiTGltcGlhIHRvZG9zIGxvcyBvYmpldG9zIG5vIGFsY2FuemFibGVzIGRlIGxhIGJhc2UgZGUgZGF0b3MgZGUgb2JqZXRvcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTQxCittc2dpZCAiUmVtb3ZlIGV4dHJhIG9iamVjdHMgdGhhdCBhcmUgYWxyZWFkeSBpbiBwYWNrIGZpbGVzIgorbXNnc3RyICJSZW1vdmVyIG9iamV0b3MgZXh0cmEgcXVlIHlhIGVzdMOhbiBlbiBhcmNoaXZvcyBlbXBhcXVldGFkb3MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MgorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiUmVhbGl6YSB1biBmZXRjaCBlIGludGVncmEgY29uIG90cm8gcmVwb3NpdG9yaW8gbyByYW1hIGxvY2FsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDMKK21zZ2lkICJVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgIkFjdHVhbGl6YSByZWZlcmVuY2lhcyByZW1vdGFzIGp1bnRvIGNvbiBzdXMgb2JqZXRvcyBhc29jaWFkb3MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NAorbXNnaWQgIkFwcGxpZXMgYSBxdWlsdCBwYXRjaHNldCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiQXBsaWNhIHVuIHBhcmNoZSBxdWlsdCBlbiBsYSByYW1hIGFjdHVhbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ1Cittc2dpZCAiQ29tcGFyZSB0d28gY29tbWl0IHJhbmdlcyAoZS5nLiB0d28gdmVyc2lvbnMgb2YgYSBicmFuY2gpIgorbXNnc3RyICJDb21wYXJhIGRvcyByYW5nb3MgZGUgY29tbWl0cyAocG9yIGVqZW1wbG8gZG9zIHZlcnNpb25zIGRlIHVuIGJyYW5jaCkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NgorbXNnaWQgIlJlYWRzIHRyZWUgaW5mb3JtYXRpb24gaW50byB0aGUgaW5kZXgiCittc2dzdHIgIkxlZSBpbmZvcm1hY2nDs24gZGVsIMOhYm9sIGVuIGVsIMOtbmRpY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NworbXNnaWQgIlJlYXBwbHkgY29tbWl0cyBvbiB0b3Agb2YgYW5vdGhlciBiYXNlIHRpcCIKK21zZ3N0ciAiVnVlbHZlIGEgYXBsaWNhciBjb21taXRzIGVuIGxhIHB1bnRhIGRlIG90cmEgcmFtYSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ4Cittc2dpZCAiUmVjZWl2ZSB3aGF0IGlzIHB1c2hlZCBpbnRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJSZWNpYmlyIGxvIHF1ZSBlcyBlbXB1amFkbyBlbiBlbCByZXNwb3NpdG9yaW8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OQorbXNnaWQgIk1hbmFnZSByZWZsb2cgaW5mb3JtYXRpb24iCittc2dzdHIgIkdlc3Rpb25hciBpbmZvcm1hY2nDs24gZGUgcmVmbG9nIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTAKK21zZ2lkICJNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJHZXN0aW9uYSB1biBjb25qdW50byBkZSByZXBvc2l0b3Jpb3MgcmFzdHJlYWRvcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTUxCittc2dpZCAiUGFjayB1bnBhY2tlZCBvYmplY3RzIGluIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiRW1wYXF1ZXRhciBvYmpldG9zIG5vIGVtcGFxdWV0YWRvcyBlbiB1biByZXBvc2l0b3JpbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTUyCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgcmVmcyB0byByZXBsYWNlIG9iamVjdHMiCittc2dzdHIgIkNyZWEsIGxpc3RhLCBib3JyYSByZWZlcmVuY2lhcyBwYXJhIHJlZW1wbGF6YXIgb2JqZXRvcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTUzCittc2dpZCAiR2VuZXJhdGVzIGEgc3VtbWFyeSBvZiBwZW5kaW5nIGNoYW5nZXMiCittc2dzdHIgIkdlbmVyYSB1biByZXN1bWVuIGRlIGNhbWJpb3MgcGVuZGllbnRlcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTU0Cittc2dpZCAiUmV1c2UgcmVjb3JkZWQgcmVzb2x1dGlvbiBvZiBjb25mbGljdGVkIG1lcmdlcyIKK21zZ3N0ciAiUmV1dGlsaXphciBsYSByZXNvbHVjacOzbiByZWdpc3RyYWRhIGRlIGZ1c2lvbmVzIGNvbmZsaWN0aXZhcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTU1Cittc2dpZCAiUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUiCittc2dzdHIgIlJlaW5pY2lhIGVsIEhFQUQgYWN0dWFsIGEgdW4gZXN0YWRvIGVzcGVjaWZpY28iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NgorbXNnaWQgIlJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICJSZXN0YXVyYXIgYXJjaGl2b3MgZGUgw6FyYm9sZXMgZGUgdHJhYmFqbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTU3Cittc2dpZCAiUmV2ZXJ0IHNvbWUgZXhpc3RpbmcgY29tbWl0cyIKK21zZ3N0ciAiUmV2aWVydGUgYWxndW5vcyBjb21taXRzIGV4aXN0ZW50ZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OAorbXNnaWQgIkxpc3RzIGNvbW1pdCBvYmplY3RzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiTGlzdGEgb2JqZXRvcyBjb21taXQgZW4gb3JkZW4gY3Jvbm9sw7NnaWNvIGludmVyc28iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OQorbXNnaWQgIlBpY2sgb3V0IGFuZCBtYXNzYWdlIHBhcmFtZXRlcnMiCittc2dzdHIgIlNlbGVjY2lvbmFyIHkgbWFzYWplYXIgbG9zIHBhcsOhbWV0cm9zIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjAKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiQm9ycmEgYXJjaGl2b3MgZGVsIMOhcmJvbCBkZSB0cmFiYWpvIHkgZGVsIMOtbmRpY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MQorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgYXMgZW1haWxzIgorbXNnc3RyICJFbnbDrWEgdW5hIGNvbGVjY2nDs24gZGUgcGFyY2hlcyBjb21vIGUtbWFpbHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MgorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEdpdCBwcm90b2NvbCB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIkVtcHVqYXIgb2JqZXRvcyBwb3IgcHJvdG9jb2xvIEdpdCBhIG90cm8gcmVwb3NpdG9yaW8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MworbXNnaWQgIlJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdpdC1vbmx5IFNTSCBhY2Nlc3MiCittc2dzdHIgIlNoZWxsIGRlIGluaWNpbyBkZSBzZXNpw7NuIHJlc3RyaW5naWRvIHBhcmEgYWNjZXNvIFNTSCBleGNsdXNpdm8gZGUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjQKK21zZ2lkICJTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dCIKK21zZ3N0ciAiUmVzdW1pciBsYSBzYWxpZGEgJ2dpdCBsb2cnIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjUKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiTXVlc3RyYSB2YXJpb3MgdGlwb3MgZGUgb2JqZXRvcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTY2Cittc2dpZCAiU2hvdyBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cyIKK21zZ3N0ciAiTW9zdHJhciByYW1hcyB5IHN1cyBjb21taXRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjcKK21zZ2lkICJTaG93IHBhY2tlZCBhcmNoaXZlIGluZGV4IgorbXNnc3RyICJNb3N0cmFyIGVsIMOtbmRpY2UgZGUgYXJjaGl2byBlbXBhcXVldGFkbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTY4Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiTGlzdGFyIHJlZmVyZW5jaWFzIGVuIGVsIHJlcG9zaXRvcmlvIGxvY2FsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjkKK21zZ2lkICJHaXQncyBpMThuIHNldHVwIGNvZGUgZm9yIHNoZWxsIHNjcmlwdHMiCittc2dzdHIgIkVsIGPDs2RpZ28gZGUgY29uZmlndXJhY2nDs24gaTE4biBkZSBHaXQgcGFyYSBzY3JpcHRzIGRlIHNoZWxsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzAKK21zZ2lkICJDb21tb24gR2l0IHNoZWxsIHNjcmlwdCBzZXR1cCBjb2RlIgorbXNnc3RyICJDw7NkaWdvIGRlIGNvbmZpZ3VyYWNpw7NuIGRlIHNjcmlwdCBkZSBzaGVsbCBjb23Dum4gZGUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzEKK21zZ2lkICJJbml0aWFsaXplIGFuZCBtb2RpZnkgdGhlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiSW5pY2lhbGl6YSB5IG1vZGlmaWNhIGVsIHNwYXJzZS1jaGVja291dCIKKworIzogY29tbWFuZC1saXN0Lmg6MTcyCittc2dpZCAiU3Rhc2ggdGhlIGNoYW5nZXMgaW4gYSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeSBhd2F5IgorbXNnc3RyICIiCisiUG9uZXIgZW4gdW4gc3Rhc2ggbG9zIGNhbWJpb3MgZW4gdW4gZGlyZWN0b3JpbyBkZSB0cmFiYWpvIHN1Y2lvIGRlIHRvZGFzICIKKyJtYW5lcmFzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzMKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgc3RhZ2luZyBhcmVhIgorbXNnc3RyICJBZ3JlZ2EgY29udGVuaWRvcyBkZSB1biBhcmNoaXZvIGFsIMOhcmVhIGRlIHN0YWdpbmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NAorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgIk11ZXN0cmEgZWwgZXN0YWRvIGRlbCDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTc1Cittc2dpZCAiUmVtb3ZlIHVubmVjZXNzYXJ5IHdoaXRlc3BhY2UiCittc2dzdHIgIkVsaW1pbmFyIGVsIGVzcGFjaW8gZW4gYmxhbmNvIGlubmVjZXNhcmlvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzYKK21zZ2lkICJJbml0aWFsaXplLCB1cGRhdGUgb3IgaW5zcGVjdCBzdWJtb2R1bGVzIgorbXNnc3RyICJJbmljaWFsaXphLCBhY3R1YWxpemEgbyBpbnNwZWNjaW9uYSBzdWJtw7NkdWxvcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTc3Cittc2dpZCAiQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhbmQgR2l0IgorbXNnc3RyICJPcGVyYWNpw7NuIGJpZGlyZWNjaW9uYWwgZW50cmUgdW4gcmVwb3NpdG9yaW8gU3VidmVyc2lvbiB5IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc4Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIgorbXNnc3RyICJDYW1iaWFyIGJyYW5jaGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzkKK21zZ2lkICJSZWFkLCBtb2RpZnkgYW5kIGRlbGV0ZSBzeW1ib2xpYyByZWZzIgorbXNnc3RyICJMZWUsIG1vZGlmaWNhIHkgYm9ycmEgcmVmZXJlbmNpYXMgc2ltYsOzbGljYXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MAorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIG9yIHZlcmlmeSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHIgorbXNnc3RyICJDcmVhLCBsaXN0YSwgYm9ycmEgbyB2ZXJpZmljYSB1biB0YWcgZGUgb2JqZXRvIGZpcm1hZG8gY29uIEdQRyIKKworIzogY29tbWFuZC1saXN0Lmg6MTgxCittc2dpZCAiQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIHdpdGggYSBibG9iJ3MgY29udGVudHMiCittc2dzdHIgIkNyZWEgdW4gYXJjaGl2byB0ZW1wb3JhbCBjb24gY29udGVuaWRvcyBkZSB1biBibG9iIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODIKK21zZ2lkICJVbnBhY2sgb2JqZWN0cyBmcm9tIGEgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIkRlc2VtcGFxdWV0YSBvYmpldG9zIGRlIHVuIGFyY2hpdm8gZW1wYXF1ZXRhZG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MworbXNnaWQgIlJlZ2lzdGVyIGZpbGUgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byB0aGUgaW5kZXgiCittc2dzdHIgIlJlZ2lzdHJhIGNvbnRlbmlkb3MgZGUgYXJjaGl2b3MgZW4gZWwgw6FyYm9sIGRlIHRyYWJham8gYWwgw61uZGljZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg0Cittc2dpZCAiVXBkYXRlIHRoZSBvYmplY3QgbmFtZSBzdG9yZWQgaW4gYSByZWYgc2FmZWx5IgorbXNnc3RyICIiCisiQWN0dWFsaXphIGVsIG5vbWJyZSBkZWwgb2JqZXRvIGFsbWFjZW5hZG8gZW4gdW5hIHJlZmVyZW5jaWEgZGUgZm9ybWEgc2VndXJhIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODUKK21zZ2lkICJVcGRhdGUgYXV4aWxpYXJ5IGluZm8gZmlsZSB0byBoZWxwIGR1bWIgc2VydmVycyIKK21zZ3N0ciAiIgorIkFjdHVhbGl6YSBlbCBhcmNoaXZvIGRlIGluZm9ybWFjacOzbiBhdXhpbGlhciBwYXJhIGF5dWRhciBhIGxvcyBzZXJ2aWRvcmVzICIKKyJkdW1iIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODYKK21zZ2lkICJTZW5kIGFyY2hpdmUgYmFjayB0byBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAiRW52aWFyIGFyY2hpdm8gYSBnaXQtYXJjaGl2ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg3Cittc2dpZCAiU2VuZCBvYmplY3RzIHBhY2tlZCBiYWNrIHRvIGdpdC1mZXRjaC1wYWNrIgorbXNnc3RyICJFbnZpYXIgb2JqZXRvcyBlbXBhcXVldGFkb3MgYSBnaXQtZmV0Y2gtcGFjayIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiU2hvdyBhIEdpdCBsb2dpY2FsIHZhcmlhYmxlIgorbXNnc3RyICJNb3N0cmFyIHVuYSB2YXJpYWJsZSBsw7NnaWNhIGRlIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg5Cittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgY29tbWl0cyIKK21zZ3N0ciAiVmVyaWZpY2FyIGZpcm1hIEdQRyBkZSBjb21taXRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTAKK21zZ2lkICJWYWxpZGF0ZSBwYWNrZWQgR2l0IGFyY2hpdmUgZmlsZXMiCittc2dzdHIgIlZhbGlkYSBhcmNoaXZvcyBHaXQgZW1wYXF1ZXRhZG9zIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTEKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiB0YWdzIgorbXNnc3RyICJWZXJpZmljYSBsYSBmaXJtYSBHUEcgZGUgZXRpcXVldGFzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTIKK21zZ2lkICJHaXQgd2ViIGludGVyZmFjZSAod2ViIGZyb250ZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMpIgorbXNnc3RyICJJbnRlcmZheiB3ZWIgR2l0IChpbnRlcmZheiB3ZWIgcGFyYSByZXBvc2l0b3Jpb3MgR2l0KSIKKworIzogY29tbWFuZC1saXN0Lmg6MTkzCittc2dpZCAiU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIgorbXNnc3RyICJNdWVzdHJhIGxvZ3MgY29uIGxhcyBkaWZlcmVuY2lhcyBxdWUgY2FkYSBjb21taXQgaW50cm9kdWNlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTQKK21zZ2lkICJNYW5hZ2UgbXVsdGlwbGUgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiR2VzdGlvbmEgbcO6bHRpcGxlcyDDoXJib2xlcyBkZSB0cmFiYWpvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTUKK21zZ2lkICJDcmVhdGUgYSB0cmVlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICJDcmVhIHVuIG9iamV0byDDoXJib2wgZGVsIMOtbmRpY2UgYWN0dWFsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTYKK21zZ2lkICJEZWZpbmluZyBhdHRyaWJ1dGVzIHBlciBwYXRoIgorbXNnc3RyICJEZWZpbmllbmRvIGF0cmlidXRvcyBwb3IgcnV0YSIKKworIzogY29tbWFuZC1saXN0Lmg6MTk3Cittc2dpZCAiR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zIgorbXNnc3RyICJJbnRlcmZheiB5IGNvbnZlbmNpb25lcyBkZSBsw61uZWEgZGUgY29tYW5kb3MgZGUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTgKK21zZ2lkICJBIEdpdCBjb3JlIHR1dG9yaWFsIGZvciBkZXZlbG9wZXJzIgorbXNnc3RyICJVbiB0dXRvcmlhbCBiw6FzaWNvIGRlIEdpdCBwYXJhIGRlc2Fycm9sbGFkb3JlcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTk5Cittc2dpZCAiR2l0IGZvciBDVlMgdXNlcnMiCittc2dzdHIgIkdpdCBwYXJhIHVzdWFyaW9zIENWUyIKKworIzogY29tbWFuZC1saXN0Lmg6MjAwCittc2dpZCAiVHdlYWtpbmcgZGlmZiBvdXRwdXQiCittc2dzdHIgIkFmaW5hciBsYSBzYWxpZGEgZGUgZGlmZiIKKworIzogY29tbWFuZC1saXN0Lmg6MjAxCittc2dpZCAiQSB1c2VmdWwgbWluaW11bSBzZXQgb2YgY29tbWFuZHMgZm9yIEV2ZXJ5ZGF5IEdpdCIKK21zZ3N0ciAiVW4gY29uanVudG8gbcOtbmltbyDDunRpbCBkZSBjb21hbmRvcyBkaWFyaW9zIGRlIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjAyCittc2dpZCAiQSBHaXQgR2xvc3NhcnkiCittc2dzdHIgIlVuIEdsb3NhcmlvIGRlIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjAzCittc2dpZCAiSG9va3MgdXNlZCBieSBHaXQiCittc2dzdHIgIkhvb2tzIHV0aWxpemFkb3MgcG9yIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA0Cittc2dpZCAiU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZSIKK21zZ3N0ciAiRXNwZWNpZmljYSBkZSBmb3JtYSBpbnRlbmNpb25hbCBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8gYSBpZ25vcmFyIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDUKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAiRGVmaW5pZW5kbyBsYXMgcHJvcGllZGFkZXMgZGVsIHN1Ym3Ds2R1bG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNgorbXNnaWQgIkdpdCBuYW1lc3BhY2VzIgorbXNnc3RyICJOYW1lc3BhY2VzIGRlIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA3Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICJEaXNwb3NpY2nDs24gZGVsIHJlcG9zaXRvcmlvIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA4Cittc2dpZCAiU3BlY2lmeWluZyByZXZpc2lvbnMgYW5kIHJhbmdlcyBmb3IgR2l0IgorbXNnc3RyICJFc3BlY2lmaWNhbmRvIHJldmlzaW9uZXMgeSByYW5nb3MgcGFyYSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOQorbXNnaWQgIk1vdW50aW5nIG9uZSByZXBvc2l0b3J5IGluc2lkZSBhbm90aGVyIgorbXNnc3RyICJNb250YW5kbyB1biByZXBvc2l0b3JpbyBkZW50cm8gZGUgb3RybyIKKworIzogY29tbWFuZC1saXN0Lmg6MjEwCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0OiBwYXJ0IHR3byIKK21zZ3N0ciAiVW4gdHV0b3JpYWwgZGUgaW50cm9kdWNjacOzbiBhIEdpdDogcGFydGUgZG9zIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTEKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQiCittc2dzdHIgIlVuIHR1dG9yaWFsIGRlIGludHJvZHVjY2nDs24gcGFyYSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMgorbXNnaWQgIkFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cyB3aXRoIEdpdCIKK21zZ3N0ciAiVW5hIHZpc2nDs24gZ2VuZXJhbCBkZSBmbHVqb3MgZGUgdHJhYmFqbyByZWNvbWVuZGFkb3MgY29uIEdpdCIKKworIzogZ2l0LWJpc2VjdC5zaDo1NAorbXNnaWQgIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorbXNnc3RyICJEZWJlcyBpbmljaWFyIGNvbiBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjYwCittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICLCv1F1aWVyZXMgcXVlIGxvIGhhZ2EgcG9yIHRpIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICJNYWxhIGVudHJhZGEgcmV2OiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGJpc2VjdGVkX2hlYWQiCittc2dzdHIgIk1hbGEgZW50cmFkYSByZXY6ICRiaXNlY3RlZF9oZWFkIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAiTWFsYSBlbnRyYWRhIHJldjogJHJldiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIHNvbG8gcHVlZGUgdG9tYXIgdW4gYXJndW1lbnRvLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMDkKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJOaW5nw7puIGxvZ2ZpbGUgcHJvcG9yY2lvbmFkbyIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICRmaWxlIGZvciByZXBsYXlpbmciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGxlZXIgJGZpbGUgcGFyYSByZXByb2R1Y2lyIgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMgorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiPz8gwr9EZSBxdcOpIGVzdMOhcyBoYWJsYW5kbz8iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQxCittc2dpZCAiYmlzZWN0IHJ1biBmYWlsZWQ6IG5vIGNvbW1hbmQgcHJvdmlkZWQuIgorbXNnc3RyICJiaXNlY3QgZmFsbMOzOiBubyBzZSBwcm92ZXnDsyBjb21hbmRvLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgImVqZWN1dGFuZG8gJGNvbW1hbmQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgIiIKKyJiaXNlY3QgZmFsbMOzOlxuIgorImPDs2RpZ28gZGUgc2FsaWRhICRyZXMgZGUgJyRjb21tYW5kJyBlcyA8MCBvID49MTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJiaXNlY3Qgbm8gcHVlZGUgc2VndWlyIGNvbnRpbnVhbmRvIgorCisjOiBnaXQtYmlzZWN0LnNoOjI4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyJiaXNlY3QgZmFsbMOzOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBzYWxpw7MgY29uIGPDs2RpZ28gZGUgZXJyb3IgJHJlcyIKKworIzogZ2l0LWJpc2VjdC5zaDoyOTIKK21zZ2lkICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCittc2dzdHIgImJpc2VjdCBleGl0b3NvIgorCisjOiBnaXQtYmlzZWN0LnNoOjMwMAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiTm8gZXN0YW1vcyBiaXNlY2FuZG8uIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICIiCisiRXJyb3I6IFR1cyBjYW1iaW9zIGxvY2FsZXMgZGUgbG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3Mgc2Vyw6FuIHNvYnJlc2NyaXRvcyBwb3IgIgorImxhIGZ1c2nDs24iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIkZ1c2nDs24gYXV0b21hdGl6YWRhIG5vIGZ1bmNpb27Dsy4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYyCittc2dpZCAiU2hvdWxkIG5vdCBiZSBkb2luZyBhbiBvY3RvcHVzLiIKK21zZ3N0ciAiTm8gZGViZXLDrWEgaGFjZXIgdW4gcHVscG8uIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiTm8gZXMgcG9zaWJsZSBlbmNvbnRyYXIgY29tbWl0IGNvbcO6biBjb24gJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3NworIywgc2gtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICJZYSBhY3R1YWxpemFkbyBjb24gJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHRvOiAkcHJldHR5X25hbWUiCittc2dzdHIgIlJlYWxpemFuZG8gZmFzdC1mb3J3YXJkIGE6ICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6OTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIkludGVudGFuZG8gZnVzacOzbiBzaW1wbGUgY29uICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6MTAyCittc2dpZCAiU2ltcGxlIG1lcmdlIGRpZCBub3Qgd29yaywgdHJ5aW5nIGF1dG9tYXRpYyBtZXJnZS4iCittc2dzdHIgIkZ1c2nDs24gc2ltcGxlIG5vIGZ1bmNpb27DsywgaW50ZW50YW5kbyBmdXNpw7NuIGF1dG9tw6F0aWNhLiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZWxpbWluYXIgZWwgw61uZGljZSB0ZW1wb3JhbCAobm8gcHVlZGUgc3VjZWRlcikiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIk5vIHNlIHB1ZWRlIGFjdHVhbGl6YXIgJHJlZl9zdGFzaCBjb24gJHdfY29tbWl0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCittc2dzdHIgImVycm9yOiBvcGNpw7NuIGRlc2Nvbm9jaWRhIHBhcmEgJ3N0YXNoIHB1cyc6ICRvcHRpb24iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJHN0YXNoX21zZyIKK21zZ3N0ciAiRGlyZWN0b3JpbyBkZSB0cmFiYWpvIGd1YXJkYWRvIHkgZXN0YWRvIGRlIMOtbmRpY2UgJHN0YXNoX21zZyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICJvcGNpw7NuIGRlc2Nvbm9jaWRhOiAkb3B0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiU2UgZXNwZWNpZmljYXJvbiBkZW1hc2lhZGFzIHJldmlzaW9uZXM6ICRSRVYiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZSBubyBlcyB1bmEgcmVmZXJlbmNpYSB2w6FsaWRhIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyRhcmdzJyBubyBlcyB1biBjb21taXQgZXN0aWxvIHN0YXNoIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIickYXJncycgbm8gZXMgdW5hIHJlZmVyZW5jaWEgc3Rhc2giCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjE4Cittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgImluY2FwYXogZGUgcmVmcmVzY2FyIGVsIMOtbmRpY2UiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjIyCittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJObyBzZSBwdWVkZSBhcGxpY2FyIHVuIHN0YXNoIGVuIG1lZGlvIGRlIHVuYSBmdXNpw7NuIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYzMAorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIkNvbmZsaWN0b3MgZW4gw61uZGljZS4gSW50ZW50ZSBzaW4gLS1pbmRleC4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMyCittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZ3VhcmRhciBlbCDDrW5kaWNlIGRlbCDDoXJib2wiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjQxCittc2dpZCAiQ291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2ggZW50cnkiCittc2dzdHIgIk5vIHNlIHB1ZWRlbiByZXN0YXVyYXIgYXJjaGl2b3Mgbm8gcmFzdHJlYWRvcyBkZSBsYSBlbnRyYWRhIHN0YXNoIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY2NgorbXNnaWQgIkNhbm5vdCB1bnN0YWdlIG1vZGlmaWVkIGZpbGVzIgorbXNnc3RyICJObyBzZSBwdWVkZSBzYWNhciBkZSBzdGFnZSBhcmNoaXZvcyBtb2RpZmljYWRvcyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgIkJvdGFkbyAke1JFVn0gKCRzKSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiR7UkVWfTogTm8gc2UgcHVkbyBib3JyYXIgZW50cmFkYSBzdGFzaCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3OTIKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIihQYXJhIHJlc3RhdXJhcmxvcywgZXNjcmliZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMDMKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIkxhIHJ1dGEgcmVsYXRpdmEgc8OzbG8gc2UgcHVlZGUgdXNhciBkZXNkZSBlbCBuaXZlbCBzdXBlcmlvciBkZWwgw6FyYm9sIGRlICIKKyJ0cmFiYWpvIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMworIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAicmVwbyBVUkw6ICckcmVwbycgZGViZSBzZXIgYWJzb2x1dGEgbyBpbmljaWFyIGNvbiAuL3wuLi8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjMyCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiJyRzbV9wYXRoJyB5YSBleGlzdGUgZW4gZWwgw61uZGljZSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IGFuZCBpcyBub3QgYSBzdWJtb2R1bGUiCittc2dzdHIgIickc21fcGF0aCcgeWEgZXhpc3RlIGVuIGVsIMOtbmRpY2UgeSBubyBlcyB1biBzdWJtw7NkdWxvIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0MgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0IgorbXNnc3RyICInJHNtX3BhdGgnIG5vIHRpZW5lIHVuIGNvbW1pdCBjaGVja2VkIG91dCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICckc21fcGF0aCcgdG8gdGhlIGluZGV4IgorbXNnc3RyICJBZ3JlZ2FuZG8gZWwgcmVwb3NpdG9yaW8gZXhpc3RlbnRlIGVuICckc21fcGF0aCcgYWwgw61uZGljZSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICInJHNtX3BhdGgnIHlhIGV4aXN0ZSB5IG5vIGVzIHVuIHJlcG9zaXRvcmlvIGdpdCB2w6FsaWRvIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4MworIywgc2gtZm9ybWF0Cittc2dpZCAiQSBnaXQgZGlyZWN0b3J5IGZvciAnJHNtX25hbWUnIGlzIGZvdW5kIGxvY2FsbHkgd2l0aCByZW1vdGUocyk6IgorbXNnc3RyICIiCisiU2UgZW5jb250csOzIGxvY2FsbWVudGUgdW4gZGlyZWN0b3JpbyBnaXQgcGFyYSAnJHNtX25hbWUnIGNvbiBlbChsb3MpICIKKyJyZW1vdG8ocyk6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbVxuIgorIiAgJHJlYWxyZXBvXG4iCisidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgIgorInJlcG9cbiIKKyJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyAiCisib3B0aW9uLiIKK21zZ3N0ciAiIgorIlNpIHF1aWVyZSByZXVzYXIgZXN0ZSBkaXJlY3RvcmlvIGdpdCBsb2NhbCBlbiBsdWdhciBkZSBjbG9uYXIgbnVldmFtZW50ZSBkZVxuIgorIiAgJHJlYWxyZXBvXG4iCisidXNhIGxhIG9wY2nDs24gJy0tZm9yY2UnLiBTaSBlbCBkaXJlY3RvcmlvIGdpdCBsb2NhbCBubyBlcyBlbCByZXBvc2l0b3JpbyAiCisiY29ycmVjdG9cbiIKKyJvIG5vIGVzdMOhcyBzZWd1cm8gZGUgbG8gcXVlIGVzdG8gc2lnbmlmaWNhLCBlc2NvZ2Ugb3RybyBub21icmUgY29uIGxhIG9wY2nDs24gIgorIictLW5hbWUnLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgIlJlYWN0aXZhciBkaXJlY3RvcmlvIGdpdCBsb2NhbCBwYXJhIGVsIHN1Ym3Ds2R1bG8gJyRzbV9uYW1lJy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzAzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIk5vIGVzIHBvc2libGUgaGFjZXIgY2hlY2tvdXQgYWwgc3VibcOzZHVsbyAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiRmFsbMOzIGFsIGFncmVnYXIgZWwgc3VibcOzZHVsbyAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMxNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJGYWxsw7MgYWwgcmVnaXN0cmFyIGVsIHN1Ym3Ds2R1bG8gJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJObyBzZSBwdWRvIGVuY29udHJhciBsYSByZXZpc2nDs24gYWN0dWFsIGVuIGxhIHJ1dGEgZGUgc3VibcOzZHVsbyAiCisiJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiTm8gZXMgcG9zaWJsZSByZWFsaXphciBmZXRjaCBlbiBsYSBydXRhIGRlIHN1Ym3Ds2R1bG8gJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gZmluZCBjdXJyZW50ICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAiCisiJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorIk5vIGVzIHBvc2libGUgZW5jb250cmFyIHJldmlzacOzbiBhY3R1YWwgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IGVuIGxhIHJ1dGEgIgorImRlIHN1Ym3Ds2R1bG8gICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjIzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOyB0cnlpbmcgdG8gZGlyZWN0bHkgZmV0Y2ggIgorIiRzaGExOiIKK21zZ3N0ciAiIgorIk5vIGVzIHBvc2libGUgcmVhbGl6YXIgZmV0Y2ggZW4gbGEgcnV0YSBkZSBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnOyAiCisiaW50ZW50YW5kbyBoYWNlciB1biBmZXRjaCBkaXJlY3RvICRzaGExOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJGZXRjaGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnLCBidXQgaXQgZGlkIG5vdCBjb250YWluICRzaGExLiAiCisiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iCittc2dzdHIgIiIKKyJGZXRjaCByZWFsaXphZG8gZW4gcnV0YSBkZSBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnLCBwZXJvIG5vIGNvbnRlbsOtYSAkc2hhMS4gIgorIkZldGNoIGRpcmVjdG8gZGVsIGNvbW1pdCBmYWxsw7MuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIk5vIGVzIHBvc2libGUgcmV2aXNhciAnJHNoYTEnIGVuIGxhIHJ1dGEgZGUgc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICJSdXRhIGRlIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCc6IGNoZWNrIG91dCByZWFsaXphZG8gYSAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiTm8gc2UgcG9zaWJsZSBlamVjdXRhciByZWJhc2UgYSAnJHNoYTEnIGVuIGxhIHJ1dGEgZGUgc3VibcOzZHVsbyAiCisiJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIlJ1dGEgZGUgc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJzogcmViYXNhZGEgZW4gJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJJbmNhcGF6IGRlIGZ1c2lvbmFyICckc2hhMScgZW4gbGEgcnV0YSBkZWwgc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBtZXJnZWQgaW4gJyRzaGExJyIKK21zZ3N0ciAiUnV0YSBkZSBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnOiBmdXNpb25hZGEgZW4gJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBvZiAnJGNvbW1hbmQgJHNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorIkZhbGzDsyBsYSBlamVjdWNpw7NuICBkZSAgJyRjb21tYW5kICRzaGExJyBlbiBsYSBydXRhIGRlIHN1Ym3Ds2R1bG8gIgorIickZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY1NAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6ICckY29tbWFuZCAkc2hhMSciCittc2dzdHIgIlJ1dGEgZGUgc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2ODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIkZhbGzDsyBhbCByZWN1cnJpciBlbiBsYSBydXRhIGRlIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODk2Cittc2dpZCAiVGhlIC0tY2FjaGVkIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSAtLWZpbGVzIG9wdGlvbiIKK21zZ3N0ciAiTGEgb3BjacOzbiAtLWNhY2hlZCBubyBwdWVkZSBzZXIgdXNhZGEgY29uIGxhIG9wY2nDs24gLS1maWxlcyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgbW9kZSAkbW9kX2RzdCIKK21zZ3N0ciAibW9kbyAkbW9kX2RzdCBpbmVzcGVyYWRvIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk2OAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgIEFkdmVydGVuY2lhOiAkZGlzcGxheV9uYW1lIG5vIGNvbnRpZW5lIGVsIGNvbW1pdCAkc2hhMV9zcmMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiAgQWR2ZXJ0ZW5jaWE6ICRkaXNwbGF5X25hbWUgbm8gY29udGllbmUgZWwgY29tbWl0ICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiIgorIiAgQWR2ZXJ0ZW5jaWE6ICRkaXNwbGF5X25hbWUgbm8gY29udGllbmUgbG9zIGNvbW1pdHMgJHNoYTFfc3JjIHkgJHNoYTFfZHN0IgorCisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTZWUgZ2l0LSR7Y21kfSgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIlbDqWFzZSBnaXQtJHtjbWR9KDEpIHBhcmEgbcOhcyBkZXRhbGxlcy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDkKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC4iCittc2dzdHIgIkF1dG9zdGFzaCBhcGxpY2Fkby4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAkc3Rhc2hfc2hhMSIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYWxtYWNlbmFyICRzdGFzaF9zaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2luZyAoJG5ld19jb3VudC8kdG90YWwpIgorbXNnc3RyICJSZWJhc2FuZG8gKCRuZXdfY291bnQvJHRvdGFsKSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIwNworbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNlIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdFxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisieCwgZXhlYyA8Y29tbWl0PiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJDb21hbmRvczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNhciBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2FyIGNvbW1pdCwgcGVybyBlZGl0YXIgZWwgbWVuc2FqZSBkZSBjb21taXRcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNhciBjb21taXQsIHBlcm8gcGFyYXIgcGFyYSB1biBhbWVuZFxuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzYXIgY29tbWl0LCBwZXJvIGZ1c2lvbmFybG8gZW4gZWwgY29tbWl0IHByZXZpb1xuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gY29tbyBcInNxdWFzaFwiLCBwZXJvIGRlc2NhcnRhIGVsIG1lbnNhamUgZGVsIGxvZyBkZSAiCisiZXN0ZSBjb21taXRcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gZWplY3V0YSBjb21hbmRvICggZWwgcmVzdG8gZGUgbGEgbMOtbmVhKSB1c2FuZG8gdW4gc2hlbGxcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gZWxpbWluYXIgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IHBvbmVyIGxhYmVsIGFsIEhFQUQgYWN0dWFsIGNvbiB1biBub21icmVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVpbmljaWFyIEhFQUQgYSBlbCBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWEgdW4gY29tbWl0IGRlIGZ1c2nDs24gdXNhbmRvIGVsIG1lbnNhamUgb3JpZ2luYWwgZGVcbiIKKyIuICAgICAgIGZ1c2nDs24gKG8gbGEgbMOtbmVhIGRlIG9uZWxpbmUsIHNpIG5vIHNlIGVzcGVjaWZpY2EgdW4gbWVuc2FqZVxuIgorIi4gICAgICAgZGUgY29tbWl0KS4gVXNlIC1jIDxjb21taXQ+IHBhcmEgcmVlc2NyaWJpciBlbCBtZW5zYWplIGRlbCBjb21taXQuXG4iCisiXG4iCisiRXN0YXMgbMOtbmVhcyBwdWVkZW4gc2VyIHJlb3JkZW5hZGFzOyBzb24gZWplY3V0YWRhcyBkZXNkZSBhcnJpYmEgaGFjaWEgIgorImFiYWpvLlxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJQdWVkZXMgZW5tZW5kYXIgZWwgY29tbWl0IGFob3JhLCBjb25cbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIlVuYSB2ZXogcXVlIGVzdMOpcyBzYXRpc2ZlY2hvIGNvbiBsb3MgY2FtYmlvcywgZWplY3V0YVxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Mjk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkc2hhMTogbm90IGEgY29tbWl0IHRoYXQgY2FuIGJlIHBpY2tlZCIKK21zZ3N0ciAiJHNoYTE6IG5vIGVzIHVuIGNvbW1pdCBxdWUgcHVlZGEgc2VyIGNvZ2lkbyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjMzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21taXQgbmFtZTogJHNoYTEiCittc2dzdHIgIk5vbWJyZSBkZSBjb21taXQgaW52w6FsaWRvOiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjM2NAorbXNnaWQgIkNhbm5vdCB3cml0ZSBjdXJyZW50IGNvbW1pdCdzIHJlcGxhY2VtZW50IHNoYTEiCittc2dzdHIgIk5vIHNlIHB1ZWRlIGVzY3JpYmlyIGVsIHJlbXBsYXpvIHNoYTEgZGVsIGNvbW1pdCBhY3R1YWwiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAiQXZhbmNlIHLDoXBpZG8gYSAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcmVhbGl6YXIgYXZhbmNlIHLDoXBpZG8gYSAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG1vdmUgSEVBRCB0byAkZmlyc3RfcGFyZW50IgorbXNnc3RyICJObyBzZSBwdWVkZSBtb3ZlciBIRUFEIGEgJGZpcnN0X3BhcmVudCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gc3F1YXNoIGEgbWVyZ2U6ICRzaGExIgorbXNnc3RyICJSZWh1c2FuZG8gYSBlamVjdXRhciBzcXVhc2ggZW4gZnVzacOzbjogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCittc2dzdHIgIkVycm9yIHJlaGFjaWVuZG8gZnVzacOzbiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBpY2sgJHNoYTEiCittc2dzdHIgIk5vIHNlIHB1ZG8gY29nZXIgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMke259OiIKK21zZ3N0ciAiRXN0ZSBlcyBlbCBtZW5zYWplIGRlbCBjb21taXQgIyR7bn06IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyR7bn0gd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiRWwgbWVuc2FqZSBkZWwgY29tbWl0ICAjJHtufSBzZXLDoSBpZ25vcmFkbzoiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0ODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0LiIKK21zZ2lkX3BsdXJhbCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXRzLiIKK21zZ3N0clswXSAiRXN0YSBlcyB1bmEgY29tYmluYWNpw7NuIGRlICRjb3VudCBjb21taXQuIgorbXNnc3RyWzFdICJFc3RhIGVzIGxhIGNvbWJpbmFjacOzbiBkZSAkY291bnQgY29tbWl0cy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB3cml0ZSAkZml4dXBfbXNnIgorbXNnc3RyICJObyBzZSBwdWVkZSBlc2NyaWJpciAkZml4dXBfbXNnIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk1Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cy4iCittc2dzdHIgIkVzdG8gZXMgdW5hIGNvbWJpbmFjacOzbiBkZSAyIGNvbW1pdHMuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTM2IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1NzkKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1ODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAkc2hhMS4uLiAkcmVzdCIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYXBsaWNhciAkc2hhMS4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhbWVuZCBjb21taXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBpY2tpbmcgJHNoYTEuLi4gJHJlc3RcbiIKKyJUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9va1xuIgorImZhaWxlZC4gSWYgdGhlIHByZS1jb21taXQgaG9vayBmYWlsZWQsIHlvdSBtYXkgbmVlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSAiCisiYmVmb3JlXG4iCisieW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZG8gY29ycmVnaXIgY29tbWl0IGRlc3B1w6lzIGRlIHNlbGVjY2lvbmFyIGV4aXRvc2FtZW50ZSAkc2hhMSAuLi4gIgorIiRyZXN0XG4iCisiRXN0byBlcyBwcm9iYWJsZW1lbnRlIGRlYmlkbyBhIHVuIG1lbnNhamUgZGUgY29tbWl0IHZhY8OtbywgbyBlbCBob29rIHByZS0iCisiY29tbWl0XG4iCisiaGEgZmFsbGFkby4gU2kgZWwgaG9vayBwcmUtY29tbWl0IGZhbGzDsywgZXMgcG9zaWJsZSBxdWUgZGViYXMgcmVzb2x2ZXIgZWwgIgorInByb2JsZW1hIGFudGVzXG4iCisiZGUgcXVlIHNlYSBjYXBheiBkZSByZWZvcm11bGFyIGVsIGNvbW1pdC4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJHNoYTFfYWJicmV2Li4uICRyZXN0IgorbXNnc3RyICJEZXRlbmlkbyBlbiAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAnJHNxdWFzaF9zdHlsZScgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgJyRzcXVhc2hfc3R5bGUnIHNpbiB1biBjb21taXQgcHJldmlvIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmc6ICRyZXN0IgorbXNnc3RyICJFamVjdXRhbmRvOiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIGZhaWxlZDogJHJlc3QiCittc2dzdHIgIkVqZWN1Y2nDs24gZmFsbGlkYTogJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTMKK21zZ2lkICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAieSBoaXpvIGNhbWJpb3MgYWwgw61uZGljZSB5L28gYWwgw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTUKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiUHVlZGVzIGNvcnJlZ2lyIGVsIHByb2JsZW1hIHkgZW50b25jZXMgZWplY3V0YXJcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIy4gVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gc3VjY2VlZGVkOiAkcmVzdFxuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJMYSBlamVjdWNpw7NuIHR1dm8gw6l4aXRvOiAkcmVzdFxuIgorIlBlcm8gZGVqw7MgY2FtYmlvcyBlbiBlbCDDrW5kaWNlIHkvbyBlbiBlbCDDoXJib2wgZGUgdHJhYmFqb1xuIgorIlJlYWxpemEgdW4gY29tbWl0IG8gc3Rhc2ggY29uIGxvcyBjYW1iaW9zIHksIGEgY29udGludWFjacOzbiwgZWplY3V0YVxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzE5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1hbmQ6ICRjb21tYW5kICRzaGExICRyZXN0IgorbXNnc3RyICJDb21hbmRvIGRlc2Nvbm9jaWRvOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcyMAorbXNnaWQgIlBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICJQb3IgZmF2b3IsIGNvcnJpZ2UgZXN0byB1c2FuZG8gJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc1NQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCittc2dzdHIgIiRoZWFkX25hbWUgcmViYXNhZG8geSBhY3R1YWxpemFkbyBzYXRpc2ZhY3RvcmlhbWVudGUuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEyCittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIgorbXNnc3RyICJObyBzZSBwdWRvIGVsaW1pbmFyIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZVxuIgorInNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJUaWVuZXMgY2FtYmlvcyBlbiBlbCDDoXJlYSBkZSBzdGFnZSBkZSB0dSDDoXJib2wgZGUgdHJhYmFqby5cbiIKKyJTaSBlc3RvcyBjYW1iaW9zIGVzdMOhbiBkZXN0aW5hZG9zIGEgXG4iCisic2VyIGFwbGFzdGFkb3MgZW4gZWwgY29tbWl0IHByZXZpbywgZWplY3V0YTpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIlNpIGVzdG9zIGVzdMOhbiBkZXN0aW5hZG9zIGEgaXIgZW4gdW4gbnVldm8gY29tbWl0LCBlamVjdXRhOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkVuIGFtYm9zIGNhc29zLCBjdWFuZG8gdGVybWluZXMsIGNvbnRpbnVlIGNvbjpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM0Cittc2dpZCAiRXJyb3IgdHJ5aW5nIHRvIGZpbmQgdGhlIGF1dGhvciBpZGVudGl0eSB0byBhbWVuZCBjb21taXQiCittc2dzdHIgIiIKKyJFcnJvciB0cmF0YW5kbyBkZSBlbmNvbnRyYXIgbGEgaWRlbnRpZGFkIGRlbCBhdXRvciBwYXJhIHJlbWVkaWFyIGVsIGNvbW1pdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgzOQorbXNnaWQgIiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisiVGllbmVzIGNhbWJpb3Mgc2luIGNvbmZpcm1hciBlbiB0dSDDoXJib2wgZGUgdHJhYmFqby4gUG9yIGZhdm9yLCBjb25mw61ybWFsb3NcbiIKKyJwcmltZXJvIHkgZW50b25jZXMgZWplY3V0YSAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBkZSBudWV2by4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0OAorbXNnaWQgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJObyBzZSBwdWRvIHJlYWxpemFyIGVsIGNvbW1pdCBjb24gbG9zIGNhbWJpb3MgZW4gZWwgw6FyZWEgZGUgc3RhZ2UuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODc5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NjUKK21zZ2lkICJDb3VsZCBub3QgZXhlY3V0ZSBlZGl0b3IiCittc2dzdHIgIk5vIHNlIHB1ZG8gZWplY3V0YXIgZWwgZWRpdG9yIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKK21zZ3N0ciAiTm8gc2UgcHVkbyBhY3R1YWxpemFyIGVsIMOhcmJvbCBkZSB0cmFiYWpvIGEgJHN3aXRjaF90byIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwNworbXNnaWQgIk5vIEhFQUQ/IgorbXNnc3RyICLCv1NpbiBIRUFEPyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJHN0YXRlX2RpciIKK21zZ3N0ciAiTm8gc2UgcHVkbyBjcmVhciAkc3RhdGVfZGlyIHRlbXBvcmFsbWVudGUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MTEKK21zZ2lkICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAiTm8gc2UgcHVkbyBtYXJjYXIgY29tbyBpbnRlcmFjdGl2byIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0MworIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmRzKSIKK21zZ3N0clswXSAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBlbiAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbWFuZG8pIgorbXNnc3RyWzFdICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIGVuICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tYW5kb3MpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTU1Cittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgIlRlbmdhIGVuIGN1ZW50YSBxdWUgbG9zIGNvbW1pdHMgdmFjw61vcyBlc3TDoW4gY29tZW50YWRvcyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk5NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTAwMgorbXNnaWQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorbXNnc3RyICJObyBzZSBwdWVkZSBpbmljaWFsaXphciBsb3MgY29tbWl0cyByZWVzY3JpdG9zIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6ODkgZ2l0LXNoLXNldHVwLnNoOjk0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJGRhc2hsZXNzICRVU0FHRSIKK21zZ3N0ciAidXNvOiAkZGFzaGxlc3MgJFVTQUdFIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgY2hkaXIgdG8gJGNkdXAsIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgYXBsaWNhciBjaGRpciBhICRjZHVwLCBlbCBuaXZlbCBtw6F4aW1vIGRlbCDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIwMCBnaXQtc2gtc2V0dXAuc2g6MjA3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogJHByb2dyYW1fbmFtZSBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiZmF0YWw6ICRwcm9ncmFtX25hbWUgbm8gcHVlZGUgc2VyIHVzYWRvIHNpbiB1biDDoXJib2wgZGUgdHJhYmFqby4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGFwbGljYXIgcmViYXNlOiBUaWVuZXMgY2FtYmlvcyBxdWUgbm8gZXN0w6FuIGVuIGVsIMOhcmVhIGRlIHN0YWdlLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNAorbXNnaWQgIkNhbm5vdCByZXdyaXRlIGJyYW5jaGVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIHJlZXNjcmliaXIgbGFzIHJhbWFzOiBUaWVuZXMgY2FtYmlvcyBxdWUgbm8gZXN0w6FuIGVuIGVsIMOhcmVhIGRlICIKKyJzdGFnZS4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjcKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJObyBzZSBwdWVkZSBhcGxpY2FyIHB1bGwgY29uIHJlYmFzZTogVGllbmVzIGNhbWJpb3MgcXVlIG5vIGVzdMOhbiBlbiBlbCDDoXJlYSAiCisiZGUgc3RhZ2UuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIk5vIHNlIHB1ZWRlICRhY3Rpb246IFRpZW5lcyBjYW1iaW9zIHF1ZSBubyBlc3TDoW4gZW4gZWwgw6FyZWEgZGUgc3RhZ2UuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQzCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGhhY2VyIHJlYmFzZTogVHUgw61uZGljZSBjb250aWVuZSBjYW1iaW9zIHF1ZSBubyBlc3TDoW4gZW4gdW4gIgorImNvbW1pdC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDYKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGhhY2VyIHB1bGwgY29uIHJlYmFzZTogVHUgw61uZGljZSBjb250aWVuZSBjYW1iaW9zIHF1ZSBubyBlc3TDoW4gIgorImVuIHVuIGNvbW1pdC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICJObyBzZSBwdWVkZSAkYWN0aW9uOiBFbCDDrW5kaWNlIGNvbnRpZW5lIGNhbWJpb3Mgc2luIGNvbmZpcm1hci4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTMKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIkFkaWNpb25hbG1lbnRlLCB0dSDDrW5kaWNlIGNvbnRpZW5lIGNhbWJpb3MgcXVlIG5vIGVzdMOhbiBlbiB1biBjb21taXQuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MzczCittc2dpZCAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiIgorIk5lY2VzaXRhcyBlamVjdXRhciBlc3RlIGNvbWFuZG8gZGVzZGUgZWwgbml2ZWwgc3VwZXJpb3IgZGUgdHUgw6FyYm9sIGRlICIKKyJ0cmFiYWpvLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3OAorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgYWJzb2x1dGUgcGF0aCBvZiBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICJJbmNhcGF6IGRlIGRldGVybWluYXIgbGEgcnV0YSBhYnNvbHV0YSBkZWwgZGlyZWN0b3JpbyBnaXQiCisKKyMuIFRSQU5TTEFUT1JTOiB5b3UgY2FuIGFkanVzdCB0aGlzIHRvIGFsaWduICJnaXQgYWRkIC1pIiBzdGF0dXMgbWVudQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJTEycyAlMTJzICVzIgorbXNnc3RyICIlMTJzICUxMnMgJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInRvdWNoZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ0b3VjaGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gInRvdWNoIGhlY2hvIGEgJWQgcnV0YVxuIgorbXNnc3RyWzFdICJ0b3VjaCBoZWNobyBhICVkIHJ1dGFzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1MworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy4iCittc2dzdHIgIiIKKyJTaSBlbCBwYXJjaGUgYXBsaWNhIGxpbXBpYW1lbnRlLCBlbCBodW5rIGVkaXRhZG8gc2VyYSBtYXJjYWRvXG4iCisiaW5tZWRpYXRhbWVudGUgcGFyYSBlbCDDoXJlYSBkZSBzdGFnZS4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1NgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3Rhc2hpbmcuIgorbXNnc3RyICIiCisiU2kgZWwgcGFyY2hlIGFwbGljYSBsaW1waWFtZW50ZSwgZWwgaHVuayBlZGl0YWRvIHNlcmEgbWFyY2Fkb1xuIgorImlubWVkaWF0YW1lbnRlIHBhcmEgYXBsaWNhciBzdGFzaC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1OQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgdW5zdGFnaW5nLiIKK21zZ3N0ciAiIgorIlNpIGVsIHBhcmNoZSBhcGxpY2EgbGltcGlhbWVudGUsIGVsIGh1bmsgZWRpdGFkbyBzZXJhIG1hcmNhZG9cbiIKKyJpbm1lZGlhdGFtZW50ZSBwYXJhIHNhY2FyIGRlbCDDoXJlYSBkZSBzdGFnZS4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzEKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgYXBwbHlpbmcuIgorbXNnc3RyICIiCisiU2kgZWwgcGFyY2hlIGFwbGljYSBkZSBmb3JtYSBsaW1waWEsIGVsIGh1bmsgZWRpdGFkbyBzZXJhIG1hcmNhZG8gXG4iCisiaW5tZWRpYXRhbWVudGUgcGFyYSBhcGxpY2FyLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc0Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBkaXNjYXJkaW5nLiIKK21zZ3N0ciAiIgorIlNpIGVsIHBhcmNoZSBhcGxpY2EgZGUgZm9ybWEgbGltcGlhLCBlbCBodW5rIGVkaXRhZG8gc2VyYSBtYXJjYWRvXG4iCisiaW5tZWRpYXRhbWVudGUgcGFyYSBkZXNjYXJ0ZS4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgImZhbGzDsyBhbCBhYnJpciBlbCBhcmNoaXZvIGRlIGFkaWNpw7NuIGRlbCBodW5rIHBhcmEgZXNjcml0dXJhOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJXMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisiLS0tXG4iCisiUGFyYSBlbGltaW5hciAnJXMnIGzDrW5lYXMsIGhhZ2EgZGUgZWxsYXMgbMOtbmVhcyAgJyAnICAoY29udGV4dG8pLlxuIgorIlBhcmEgZWxpbWluYXIgJyVzJyBsw61uZWFzLCBiw7NycmVsYXMuXG4iCisiTGluZWFzIGNvbWVuemFuZG8gY29uICAlcyBzZXLDoW4gZWxpbWluYWRhcy5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTQwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciByZWFkaW5nOiAlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGFicmlyIGVsIGFyY2hpdm8gZGUgZWRpY2nDs24gZGVsIGh1bmsgcGFyYSBsZWN0dXJhOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjQ4Cittc2dpZCAiIgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGFwbGljYXIgc3RhZ2UgYSBlc3RlIGh1bmtcbiIKKyJuIC0gbm8gYXBsaWNhciBzdGFnZSBhIGVzdGUgaHVua1xuIgorInEgLSBxdWl0OyBubyBhcGxpY2FyIHN0YWdlIGEgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcmVzdGFudGVzXG4iCisiYSAtIGFwbGljYXIgc3RhZ2UgYSBlc3RlIGh1bmsgeSBhIHRvZG9zIGxvcyBwb3N0ZXJpb3JlcyBlbiBlbCBhcmNoaXZvIFxuIgorImQgLSBubyBhcGxpY2FyIHN0YWdlIGEgZXN0ZSBodW5rIG8gYSBuaW5ndW5vIGRlIGxvcyBwb3N0ZXJpb3JlcyBlbiBlc3RlICIKKyJhcmNoaXZvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNTQKK21zZ2lkICIiCisieSAtIHN0YXNoIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFzaCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYXBsaWNhciBzdGFzaCBhIGVzdGUgaHVua1xuIgorIm4gLSBubyBhcGxpY2FyIHN0YXNoIGEgZXN0ZSBodW5rXG4iCisicSAtIHF1aXQ7IG5vIGFwbGljYXIgc3Rhc2ggYSBlc3RlIGh1bmsgbyBhIG5pbmd1bm8gZGUgbG9zIHJlc3RhbnRlc1xuIgorImEgLSBhcGxpY2FyIHN0YXNoIGEgZXN0ZSBodW5rIHkgYSB0b2RvcyBsb3MgcG9zdGVyaW9yZXMgZW4gZWwgYXJjaGl2b1xuIgorImQgLSBubyBhcGxpY2FyIHN0YXNoIGEgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcG9zdGVyaW9yZXMgZW4gZWwgYXJjaGl2byIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjYwCittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBzYWNhciBkZXNkZSBodW5rIGRlbCDDoXJlYSBkZSBzdGFnZVxuIgorIm4gLSBubyBzYWNhciBlc3RlIGh1bmsgZGVsIGFyZWEgZGUgc3RhZ2VcbiIKKyJxIC0gcXVpdDsgbm8gc2FjYXIgZGVsIGFyZWEgZGUgc3RhZ2UgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcmVzdGFudGVzXG4iCisiYSAtIHNhY2FyIGRlbCBhcmVhIGRlIHN0YWdlIGVzdGUgaHVuayB5IHRvZG9zIGxvcyBwb3N0ZXJpb3JlcyBlbiBlbCBhcmNoaXZvXG4iCisiZCAtIG5vIHNhY2FyIGRlbCBhcmVhIGRlIHN0YWdlIGVzdGUgaHVuayBvIG5pbmd1bm8gZGUgbG9zIHBvc3RlcmlvcmVzIGVuIGVsICIKKyJhcmNoaXZvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNjYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYXBsaWNhciBlc3RlIGh1bmsgYWwgw61uZGljZVxuIgorIm4gLSBubyBhcGxpY2FyIGVzdGUgaHVuayBhbCDDrW5kaWNlXG4iCisicSAtIHF1aXQ7IG5vIGFwbGljYXIgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcmVzdGFudGVzXG4iCisiYSAtIGFwbGljYXIgZXN0ZSBodW5rIHkgdG9kb3MgbG9zIHBvc3RlcmlvcmVzIGVuIGVsIGFyY2hpdm9cbiIKKyJkIC0gbm8gYXBsaWNhciBlc3RlIGh1bmtvIG5pbmd1bm8gZGUgbG9zIHBvc3RlcmlvcmVzIGVuIGVsIGFyY2hpdm8iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyOTAKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBkZXNjYXJ0YXIgZXN0ZSBodW5rIGRlbCDDoXJib2wgZGUgdHJhYmFqb1xuIgorIm4gLSBubyBkZXNjYXJ0YXIgZXN0ZSBodW5rIGRlbCDDoXJib2wgZGUgdHJhYmFqb1xuIgorInEgLSBxdWl0OyBubyBkZXNjYXJ0YXIgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcXVlIHJlc3RhbnRlc1xuIgorImEgLSBkZXNjYXJ0YXIgZXN0ZSBodW5rIHkgdG9kb3MgbG9zIHBvc3RlcmlvcmVzIGVuIGVzdGUgYXJjaGl2b1xuIgorImQgLSBubyBkZXNjYXJ0YXIgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcG9zdGVyaW9yZXMgZW4gZWwgYXJjaGl2byIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjc4Cittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBkZXNjYXJ0YXIgZXN0ZSBodW5rIGRlbCDDrW5kaWNlIHkgZWwgw6FyYm9sIGRlIHRyYWJham9cbiIKKyJuIC0gbm8gZGVzY2FydGFyIGVzdGUgaHVuayBkZWwgw61uZGljZSBuaSBlbCDDoXJib2wgZGUgdHJhYmFqb1xuIgorInEgLSBxdWl0OyBubyBkZXNjYXJ0YXIgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcXVlIHF1ZWRhblxuIgorImEgLSBkZXNjYXJ0YXIgZXN0ZSBodW5rIHkgdG9kb3MgbG9zIHBvc3RlcmlvcmVzIGVuIGVzdGUgYXJjaGl2b1xuIgorImQgLSBubyBkZXNjYXJ0YXIgZXN0ZSBodW5rIG8gbmluZ3VubyBwb3N0ZXJpb3IgZW4gZWwgYXJjaGl2byIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjg0Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYXBsaWNhciBlc3RlIGh1bmsgYWwgw61uZGljZSB5IGFsIMOhcmJvbCBkZSB0cmFiYWpvXG4iCisibiAtIG5vIGFwbGljYXIgZXN0ZSBodW5rIGFsIMOtbmRpY2UgeSBhbCDDoXJib2wgZGUgdHJhYmFqb1xuIgorInEgLSBxdWl0OyAgbm8gYXBsaWNhciBlc3RlIGh1bmsgbyBuaW5ndW5vIGRlIGxvcyByZXN0YW50ZXNcbiIKKyJhIC0gYXBsaWNhciBlc3RlIGh1bmsgeSB0b2RvcyBsb3MgcG9zdGVyaW9yZXMgZW4gZWwgYXJjaGl2b1xuIgorImQgLSBubyBhcGxpY2FyIGVzdGUgaHVuayBvIG5pbmd1bm8gZGUgbG9zIHNpZ3VpZW50ZXMgZW4gZXN0ZSBhcmNoaXZvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyOTYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYXBsaWNhciBlc3RlIGh1bmsgYWwgw61uZGljZSB5IGFsIMOhcmJvbCBkZSB0cmFiYWpvXG4iCisibiAtIG5vIGFwbGljYXIgZXN0ZSBodW5rIGFsIMOtbmRpY2UgeSBhbCDDoXJib2wgZGUgdHJhYmFqb1xuIgorInEgLSBxdWl0OyAgbm8gYXBsaWNhciBlc3RlIGh1bmsgbyBuaW5ndW5vIGRlIGxvcyByZXN0YW50ZXNcbiIKKyJhIC0gYXBsaWNhciBlc3RlIGh1bmsgeSB0b2RvcyBsb3MgcG9zdGVyaW9yZXMgZW4gZWwgYXJjaGl2b1xuIgorImQgLSBubyBhcGxpY2FyIGVzdGUgaHVuayBvIG5pbmd1bm8gZGUgbG9zIHNpZ3VpZW50ZXMgZW4gZXN0ZSBhcmNoaXZvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMTEKK21zZ2lkICIiCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJnIC0gc2VsZWNjaW9uYSB1biBodW5rIGEgZG9uZGUgaXJcbiIKKyIvIC0gYnVzY2FyIHVuIGh1bmsgcXVlIGNvbmN1ZXJkZSBlbCAgcmVnZXhcbiIKKyJqIC0gZGVqYXIgZXN0ZSBodW5rIHBvciBkZWZpbmlyLCB2ZXIgc2lndWllbnRlIGh1bmsgcG9yIGRlZmluaXJcbiIKKyJKIC0gZGVqYXIgZXN0ZSBodW5rIHBvciBkZWZpbmlyLCB2ZXIgc2lndWllbnRlIGh1bmtcbiIKKyJrIC0gZGVqYXIgZXN0ZSBodW5rIHBvciBkZWZpbmlyLCB2ZXIgaHVuayBwcmV2aW8gcG9yIGRlZmluaXJcbiIKKyJLIC0gZGVqYXIgZXN0ZSBodW5rIHBvciBkZWZpbmlyLCB2ZXIgaHVuayBwcmV2aW9cbiIKKyJzIC0gZGl2aWRpciBlbCAgaHVuayBhY3R1YWwgZW4gaHVua3MgbcOhcyBwZXF1ZcOxb3NcbiIKKyJlIC0gZWRpdGFyIG1hbnVhbG1lbnRlIGVsIGh1bmsgYWN0dWFsXG4iCisiPyAtIGltcHJpbWlyIGF5dWRhXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MgorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIgorbXNnc3RyICLCoUxvcyBodW5rcyBzZWxlY2Npb25hZG9zIG5vIGFwbGljYW4gYWwgw61uZGljZSFcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzU3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlc1xuIgorbXNnc3RyICJpZ25vcmFuZG8gbG8gbm8gZnVzaW9uYWRvOiAlc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/QXBsaWNhciBjYW1iaW8gZGUgbW9kbyBwYXJhIGVsIMOhcmJvbCBkZSB0cmFiYWpvIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/QXBsaWNhciBib3JyYWRvIGFsIMOhcmJvbCBkZSB0cmFiYWpvIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLCv0FwbGljYXIgZXN0ZSBodW5rIGFsIMOhcmJvbCBkZSB0cmFiYWpvIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3MAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG9cbiIKK21zZ3N0ciAiTm8gaGF5IG3DoXMgcGVkYXpvcyBwYXJhIGVsIGlyXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU4OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJ1xuIgorbXNnc3RyICJOdW1lcm8gaW52w6FsaWRvOiAnJXMnXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU5MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS5cbiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLlxuIgorbXNnc3RyWzBdICJMbyBzaWVudG8sIHNvbG8gJWQgaHVuayBkaXNwb25pYmxlLlxuIgorbXNnc3RyWzFdICJMbyBzaWVudG8sIHNvbG8gJWQgaHVua3MgZGlzcG9uaWJsZXMuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYxOQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaFxuIgorbXNnc3RyICJObyBoYXkgbcOhcyBwZWRhem9zIHBhcmEgYnVzY2FyXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYzNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAlczogJXNcbiIKK21zZ3N0ciAiUmVnZXhwIHBhcmEgbGEgYsO6c3F1ZWRhIG1hbCBmb3JtYWRvICVzOiAlc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NDYKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm5cbiIKK21zZ3N0ciAiTm8gaGF5IGh1bmtzIHF1ZSBjb25jdWVyZGVuIGNvbiBlbCBwYXRyw7NuIGVudHJlZ2Fkby5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjU4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY4MAorbXNnaWQgIk5vIHByZXZpb3VzIGh1bmtcbiIKK21zZ3N0ciAiTm8gZWwgYW50ZXJpb3IgaHVua1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjg2Cittc2dpZCAiTm8gbmV4dCBodW5rXG4iCittc2dzdHIgIk5vIGVsIHNpZ3VpZW50ZSBodW5rXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5MgorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIlBlcmTDs24sIG5vIHNlIHB1ZWRlIGRpdmlkaXIgZXN0ZSBwZWRhem9cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjk4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVuay5cbiIKK21zZ2lkX3BsdXJhbCAiU3BsaXQgaW50byAlZCBodW5rcy5cbiIKK21zZ3N0clswXSAiQ29ydGFyIGVuICVkIGh1bmsuXG4iCittc2dzdHJbMV0gIkNvcnRhciBlbiAgJWQgaHVua3MuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcwOAorbXNnaWQgIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmtcbiIKK21zZ3N0ciAiUGVyZMOzbiwgbm8gc2UgcHVlZGUgZWRpdGFyIGVzdGUgcGVkYXpvXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2UgZG8gbm90IHRyYW5zbGF0ZSB0aGUgY29tbWFuZCBuYW1lcworIy4gJ3N0YXR1cycsICd1cGRhdGUnLCAncmV2ZXJ0JywgZXRjLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzczCittc2dpZCAiIgorInN0YXR1cyAgICAgICAgLSBzaG93IHBhdGhzIHdpdGggY2hhbmdlc1xuIgorInVwZGF0ZSAgICAgICAgLSBhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXNcbiIKKyJyZXZlcnQgICAgICAgIC0gcmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb25cbiIKKyJwYXRjaCAgICAgICAgIC0gcGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5XG4iCisiZGlmZiAgICAgICAgICAtIHZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4XG4iCisiYWRkIHVudHJhY2tlZCAtIGFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgIgorImNoYW5nZXNcbiIKK21zZ3N0ciAiIgorInN0YXR1cyAgICAgICAgLSBtdWVzdHJhIGxhcyBydXRhcyBjb24gY2FtYmlvc1xuIgorInVwZGF0ZSAgICAgICAgLSBhZ3JlZ2EgZWwgZXN0YWRvIGRlbCDDoXJib2wgZGUgdHJhYmFqbyBhbCBzZXQgZGUgY2FtYmlvcyBlbiAiCisiZWwgw6FyZWEgZGUgc3RhZ2VcbiIKKyJyZXZlcnQgICAgICAgIC0gcmV2aWVydGUgbG9zIGNhbWJpb3MgZW4gZWwgw6FyZWEgZGUgc3RhZ2UgZGUgcmVncmVzbyBhIGxhICIKKyJ2ZXJzacOzbiBIRUFEXG4iCisicGF0Y2ggICAgICAgICAtIHNlbGVjY2lvbmEgbG9zIGh1bmtzIHkgYWN0dWFsaXphIGRlIGZvcm1hIHNlbGVjdGl2YVxuIgorImRpZmYgICAgICAgICAgLSBtaXJhciBsYSBkaWZmIGVudHJlIEhFQUQgeSBlbCDDrW5kaWNlXG4iCisiYWRkIHVudHJhY2tlZCAtIGFncmVnYSBjb250ZW5pZG9zIGRlIGFyY2hpdm9zIG5vIHJhc3RyZWFkb3MgYWwgZ3J1cG8gZGUgIgorImNhbWJpb3MgZGVsIGFyZWEgZGUgc3RhZ2VcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzkwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5NQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgwNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgxNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNQorbXNnaWQgIm1pc3NpbmcgLS0iCittc2dzdHIgImZhbHRhIC0tIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5rbm93biAtLXBhdGNoIG1vZGU6ICVzIgorbXNnc3RyICJtb2RvIC0tcGF0Y2ggZGVzY29ub2NpZG86ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMsIGV4cGVjdGluZyAtLSIKK21zZ3N0ciAiYXJndW1lbnRvIGludsOhbGlkbyAlcywgc2UgZXNwZXJhYmEgLS0iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM4Cittc2dpZCAibG9jYWwgem9uZSBkaWZmZXJzIGZyb20gR01UIGJ5IGEgbm9uLW1pbnV0ZSBpbnRlcnZhbFxuIgorbXNnc3RyICJsYSB6b25hIGxvY2FsIGRpZmllcmUgZGUgR01UIHBvciB1biBpbnRlcnZhbG8gZGUgY2VybyBtaW51dG9zXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ1IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUxCittc2dpZCAibG9jYWwgdGltZSBvZmZzZXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDI0IGhvdXJzXG4iCittc2dzdHIgImVsIG9mZnNldCBkZWwgdGllbXBvIGxvY2FsIGVzIG1heW9yIG8gaWd1YWwgYSAyNCBob3Jhc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjIyMyBnaXQtc2VuZC1lbWFpbC5wZXJsOjIyOQorbXNnaWQgInRoZSBlZGl0b3IgZXhpdGVkIHVuY2xlYW5seSwgYWJvcnRpbmcgZXZlcnl0aGluZyIKK21zZ3N0ciAiZWwgZWRpdG9yIHNlIGNlcnJvIGluYXByb3BpYWRhbWVudGUsIGFib3J0YW5kbyB0b2RvIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMxMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBjb250YWlucyBhbiBpbnRlcm1lZGlhdGUgdmVyc2lvbiBvZiB0aGUgZW1haWwgeW91IHdlcmUgY29tcG9zaW5nLlxuIgorbXNnc3RyICIiCisiJyVzJyBjb250aWVuZSB1bmEgdmVyc2nDs24gaW50ZXJtZWRpYSBkZWwgY29ycmVvIHF1ZSBzZSBlc3RhYmEgZ2VuZXJhbmRvLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMxNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICInJXMuZmluYWwnIGNvbnRhaW5zIHRoZSBjb21wb3NlZCBlbWFpbC5cbiIKK21zZ3N0ciAiJyVzLmZpbmFsJyBjb250aWVuZSBlbCBlbWFpbCBnZW5lcmFkby5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0MDgKK21zZ2lkICItLWR1bXAtYWxpYXNlcyBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBvcHRpb25zXG4iCittc2dzdHIgIi0tZHVtcC1hbGlhc2VzIG5vIGVzIGNvbXBhdGlibGUgY29uIG90cmFzIG9wY2lvbmVzLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4MSBnaXQtc2VuZC1lbWFpbC5wZXJsOjY4MworbXNnaWQgIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIGVqZWN1dGFyIGdpdCBmb3JtYXQtcGF0Y2ggZGVzZGUgZnVlcmEgZGVsIHJlcG9zaXRvcmlvLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4NAorbXNnaWQgIiIKKyJgYmF0Y2gtc2l6ZWAgYW5kIGByZWxvZ2luYCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciAodmlhIGNvbW1hbmQtbGluZSBvciAiCisiY29uZmlndXJhdGlvbiBvcHRpb24pXG4iCittc2dzdHIgIiIKKyJgYmF0Y2gtc2l6ZWAgeSBgcmVsb2dpbmAgZGViZW4gc2VyIGVzcGVjaWZpY2Fkb3MganVudG9zICh2aWEgbGEgbMOtbmVhIGRlICIKKyJjb21hbmRvIG8gcG9yIG9wY2nDs24gZGUgY29uZmlndXJhY2nDs24pXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1zdXBwcmVzcy1jYyBmaWVsZDogJyVzJ1xuIgorbXNnc3RyICJDYW1wbyAtLXN1cHByZXNzLWNjIGRlc2Nvbm9jaWRvOiAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTI4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1jb25maXJtIHNldHRpbmc6ICclcydcbiIKK21zZ3N0ciAiQ29uZmlndXJhY2nDs24gLS1jb25maXJtIGRlc2Nvbm9jaWRhOiAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGFsaWFzIHdpdGggcXVvdGVzIGlzIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgInBlbGlncm86IGFsaWFzIGRlIHNlbmRtYWlsICBjb24gY29taWxsYXMgbm8gZXMgc29wb3J0YWRvOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgOmluY2x1ZGU6YCBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICJwZWxpZ3JvOiBgOmluY2x1ZGU6YCBubyBzb3BvcnRhZG86ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTYwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGAvZmlsZWAgb3IgYHxwaXBlYCByZWRpcmVjdGlvbiBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICJhZHZlcnRlbmNpYTogcmVkaXJlY2Npw7NuIGAvZmlsZWAgbyBgfHBpcGVgIG5vIHNvcG9ydGFkYSA6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGxpbmUgaXMgbm90IHJlY29nbml6ZWQ6ICVzXG4iCittc2dzdHIgImFkdmVydGVuY2lhOiBsw61uZWEgc2VuZG1haWwgbm8gcmVjb25vY2lkYTogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NDkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgJyVzJyBleGlzdHMgYnV0IGl0IGNvdWxkIGFsc28gYmUgdGhlIHJhbmdlIG9mIGNvbW1pdHNcbiIKKyJ0byBwcm9kdWNlIHBhdGNoZXMgZm9yLiAgUGxlYXNlIGRpc2FtYmlndWF0ZSBieS4uLlxuIgorIlxuIgorIiAgICAqIFNheWluZyBcIi4vJXNcIiBpZiB5b3UgbWVhbiBhIGZpbGU7IG9yXG4iCisiICAgICogR2l2aW5nIC0tZm9ybWF0LXBhdGNoIG9wdGlvbiBpZiB5b3UgbWVhbiBhIHJhbmdlLlxuIgorbXNnc3RyICIiCisiQXJjaGl2byAnJXMnIGV4aXN0ZSBwZXJvIHBvZHLDrWEgc2VyIGVsIHJhbmdvIGRlIGNvbW1pdHMgXG4iCisicGFyYSBwcm9kdWNpciBsb3MgcGFyY2hlcy4gIFBvciBmYXZvciBlbGltaW5hIGxhIGFtYmlnw7xlZGFkLi4uXG4iCisiXG4iCisiICAgICogRGljaWVuZG8gXCIuLyVzXCIgc2kgc2UgcXVpZXJlIGRlY2lyIHVuIGFyY2hpdm87IG9cbiIKKyIgICAgKiBBZ3JlZ2FuZG8gbGEgb3BjacOzbiAtLWZvcm1hdC1wYXRjaCBzaSBzZSBxdWllcmUgZGVjaXIgdW4gcmFuZ28uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjcwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuZGlyICVzOiAlcyIKK21zZ3N0ciAiRmFsbMOzIGFsIGFicmlyIGRpcmVjdG9yaW8gJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY5NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiZmF0YWw6ICVzOiAlc1xuIgorIndhcm5pbmc6IG5vIHBhdGNoZXMgd2VyZSBzZW50XG4iCittc2dzdHIgIiIKKyJmYXRhbDogJXM6ICVzXG4iCisicGVsaWdybzogbm8gc2UgbWFuZGFyb24gcGFyY2hlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcwNQorbXNnaWQgIiIKKyJcbiIKKyJObyBwYXRjaCBmaWxlcyBzcGVjaWZpZWQhXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJObyBzZSBlc3BlY2lmaWNhcm9uIHBhcmNoZXMhXG4iCisiXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk5vIHN1YmplY3QgbGluZSBpbiAlcz8iCittc2dzdHIgIsK/Tm8gaGF5IGzDrW5lYSBkZSBzdWJqZWN0IGVuICVzPyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gZm9yIHdyaXRpbmcgJXM6ICVzIgorbXNnc3RyICJGYWxsw7MgYWwgYWJyaXIgcGFyYSBlc2NyaXR1cmEgJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjczOQorbXNnaWQgIiIKKyJMaW5lcyBiZWdpbm5pbmcgaW4gXCJHSVQ6XCIgd2lsbCBiZSByZW1vdmVkLlxuIgorIkNvbnNpZGVyIGluY2x1ZGluZyBhbiBvdmVyYWxsIGRpZmZzdGF0IG9yIHRhYmxlIG9mIGNvbnRlbnRzXG4iCisiZm9yIHRoZSBwYXRjaCB5b3UgYXJlIHdyaXRpbmcuXG4iCisiXG4iCisiQ2xlYXIgdGhlIGJvZHkgY29udGVudCBpZiB5b3UgZG9uJ3Qgd2lzaCB0byBzZW5kIGEgc3VtbWFyeS5cbiIKK21zZ3N0ciAiIgorIkxpbmVhcyBxdWUgY29taWVuemFuIGVuIFwiR0lUOlwiIHNlcsOhbiBlbGltaW5hZGFzLlxuIgorIkNvbnNpZGVyZSBpbmNsdWlyIHVuIGRpZmZzdGF0IGdsb2JhbCBvIHVuYSB0YWJsYSBkZSBjb250ZW5pZG9zXG4iCisicGFyYSBlbCBwYXJjaGUgcXVlIGVzdMOhcyBlc2NyaWJpZW5kby5cbiIKKyJcbiIKKyJMaW1waWFyIGVsIGNvbnRlbmlkbyBkZSBib2R5IHNpIG5vIGRlc2VhcyBtYW5kYXIgdW4gcmVzdW1lbi5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXM6ICVzIgorbXNnc3RyICJGYWxsw7MgYWwgYWJyaXIgJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc4MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlcy5maW5hbDogJXMiCittc2dzdHIgIkZhbGzDsyBhbCBhYnJpciAlcy5maW5hbDogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODIzCittc2dpZCAiU3VtbWFyeSBlbWFpbCBpcyBlbXB0eSwgc2tpcHBpbmcgaXRcbiIKK21zZ3N0ciAiQXJjaGl2byBkZSByZXN1bWVuIGVzdMOhIHZhY8Otbywgc2FsdGFuZG8gYWwgc2lndWllbnRlXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCBbeS9OXSBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1c2UgPCVzPiBbeS9OXT8gIgorbXNnc3RyICLCv0VzdMOhcyBzZWd1cm8gZGUgcXVlIGRlc2VhcyB1c2FyIDwlcz4gW3kvTl0/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTMKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgOGJpdCwgYnV0IGRvIG5vdCBkZWNsYXJlIGEgQ29udGVudC1UcmFuc2Zlci0iCisiRW5jb2RpbmcuXG4iCittc2dzdHIgIiIKKyJMb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBzb24gOGJpdCwgcGVybyBubyBkZWNsYXJhbiB1biBDb250ZW50LVRyYW5zZmVyLSIKKyJFbmNvZGluZy5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTgKK21zZ2lkICJXaGljaCA4Yml0IGVuY29kaW5nIHNob3VsZCBJIGRlY2xhcmUgW1VURi04XT8gIgorbXNnc3RyICLCv1F1ZSBjb2RpZmljYWNpw7NuIGRlIDhiaXQgZGViZXLDrWEgZGVjbGFyYXIgW1VURi04XT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkyNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuIgorIlx0JXNcbiIKKyJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgIgorIndhbnQgdG8gc2VuZC5cbiIKK21zZ3N0ciAiIgorIlJlaHVzYW5kbyBtYW5kYXIgZWwgcGFyY2hlIHBvcnF1ZVxuIgorIlx0JXNcbiIKKyJ0aWVuZSBlbCB0ZW1wbGF0ZSAgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gQWdyZWdhIC0tZm9yY2Ugc2kgcmVhbG1lbnRlIGxvICIKKyJkZXNlYXMgbWFuZGFyLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk0NQorbXNnaWQgIlRvIHdob20gc2hvdWxkIHRoZSBlbWFpbHMgYmUgc2VudCAoaWYgYW55b25lKT8iCittc2dzdHIgIsK/QSBxdWllbiBzZSBkZWJlbiBtYW5kYXIgbG9zIGNvcnJlb3MgKHNpIGV4aXN0ZSk/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYXRhbDogYWxpYXMgJyVzJyBleHBhbmRzIHRvIGl0c2VsZlxuIgorbXNnc3RyICJmYXRhbDogYWxpYXMgJyVzJyBzZSBleHBhbmRlIGEgc2kgbWlzbW9cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NzUKK21zZ2lkICJNZXNzYWdlLUlEIHRvIGJlIHVzZWQgYXMgSW4tUmVwbHktVG8gZm9yIHRoZSBmaXJzdCBlbWFpbCAoaWYgYW55KT8gIgorbXNnc3RyICIiCisiwr9RdcOpIGlkIGRlIG1lbnNhamUgc2Vyw6EgdXNhZG8gY29tbyBFbi1SZXNwdWVzdGEtUGFyYSBlbiBlbCBwcmltZXIgZW1haWwgKHNpICIKKyJleGlzdGUgYWxndW5vKT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwMzMgZ2l0LXNlbmQtZW1haWwucGVybDoxMDQxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmFibGUgdG8gZXh0cmFjdCBhIHZhbGlkIGFkZHJlc3MgZnJvbTogJXNcbiIKK21zZ3N0ciAiZXJyb3I6IG5vIGVzIHBvc2libGUgZXh0cmFlciB1bmEgZGlyZWNjacOzbiB2w6FsaWRhIGRlICVzXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbcV0gW2RdIFtlXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDQ1Cittc2dpZCAiV2hhdCB0byBkbyB3aXRoIHRoaXMgYWRkcmVzcz8gKFtxXXVpdHxbZF1yb3B8W2VdZGl0KTogIgorbXNnc3RyICLCv1F1ZSBoYWNlciBjb24gZXN0YSBkaXJlY2Npw7NuPyAoW3Fdc2FsaXJ8W2RdYm90YXJ8W2VdZGl0YXIpOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM2MgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJDQSBwYXRoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiUnV0YSBDQSBcIiVzXCIgbm8gZXhpc3RlIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NDUKK21zZ2lkICIiCisiICAgIFRoZSBDYyBsaXN0IGFib3ZlIGhhcyBiZWVuIGV4cGFuZGVkIGJ5IGFkZGl0aW9uYWxcbiIKKyIgICAgYWRkcmVzc2VzIGZvdW5kIGluIHRoZSBwYXRjaCBjb21taXQgbWVzc2FnZS4gQnkgZGVmYXVsdFxuIgorIiAgICBzZW5kLWVtYWlsIHByb21wdHMgYmVmb3JlIHNlbmRpbmcgd2hlbmV2ZXIgdGhpcyBvY2N1cnMuXG4iCisiICAgIFRoaXMgYmVoYXZpb3IgaXMgY29udHJvbGxlZCBieSB0aGUgc2VuZGVtYWlsLmNvbmZpcm1cbiIKKyIgICAgY29uZmlndXJhdGlvbiBzZXR0aW5nLlxuIgorIlxuIgorIiAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgcnVuICdnaXQgc2VuZC1lbWFpbCAtLWhlbHAnLlxuIgorIiAgICBUbyByZXRhaW4gdGhlIGN1cnJlbnQgYmVoYXZpb3IsIGJ1dCBzcXVlbGNoIHRoaXMgbWVzc2FnZSxcbiIKKyIgICAgcnVuICdnaXQgY29uZmlnIC0tZ2xvYmFsIHNlbmRlbWFpbC5jb25maXJtIGF1dG8nLlxuIgorIlxuIgorbXNnc3RyICIiCisiICAgIExhIGxpc3RhIENjIGhhIHNpZG8gZXhwYW5kaWRhIHBvciBkaXJlY2Npb25lcyBhZGljaW9uYWxlc1xuIgorIiAgICBlbmNvbnRyYWRhcyBlbiBlbCBtZW5zYWplIGRlIGNvbW1pdCBwYXJjaGFkby4uIFBvciBkZWZlY3RvXG4iCisiICAgIHNlbmQtZW1haWwgc2UgbXVlc3RyYSBhbnRlcyBkZSBtYW5kYXIgY3VhbHF1aWVyIGNhZGEgdmV6IHF1ZSBlc3RvICIKKyJzdWNlZGUuXG4iCisiICAgIEVzdGUgY29tcG9ydGFtaWVudG8gaXMgY29udHJvbGFkbyBwb3IgZWwgdmFsb3IgZGUgY29uZmlndXJhY2nDs24gIgorInNlbmRlbWFpbC5jb25maXJtLlxuIgorIlxuIgorIiAgICBQYXJhIG3DoXMgaW5mb3JtYWNpw7NuLCBlamVjdXRhICdnaXQgc2VuZC1lbWFpbCAtLWhlbHAnLlxuIgorIiAgICBQYXJhIG1hbnRlbmVyIGVsIGNvbXBvcnRhbWllbnRvIGFjdHVhbCwgcGVybyBldml0YXIgZXN0ZSBtZW5zYWplLFxuIgorIiAgICBlamVjdXRhICdnaXQgY29uZmlnIC0tZ2xvYmFsIHNlbmRlbWFpbC5jb25maXJtIGF1dG8nLlxuIgorIlxuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldIFtuXSBbZV0gW3FdIFthXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDYwCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsPyAoW3ldZXN8W25db3xbZV1kaXR8W3FddWl0fFthXWxsKTogIgorbXNnc3RyICLCv01hbmRhciBlc3RlIGVtYWlsPyAoW3ldc2l8fFtuXW98W2VdZWRpdGFyfFtxXXNhbGlyfFthXXRvZG8pOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ2MworbXNnaWQgIlNlbmQgdGhpcyBlbWFpbCByZXBseSByZXF1aXJlZCIKK21zZ3N0ciAiTmVjZXNpdGFzIG1hbmRhciBlc3RhIHJlc3B1ZXN0YSBkZSBlbWFpbCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDkxCittc2dpZCAiVGhlIHJlcXVpcmVkIFNNVFAgc2VydmVyIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkLiIKK21zZ3N0ciAiRWwgc2Vydmlkb3IgU01UUCBubyBlc3RhIGRlZmluaWRvIGFkZWN1YWRhbWVudGUuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1RBUlRUTFMhICVzIgorbXNnc3RyICLCoUVsIHNlcnZpZG9yIG5vIHNvcG9ydGEgU1RBUlRUTFMhICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDMgZ2l0LXNlbmQtZW1haWwucGVybDoxNTQ3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNUQVJUVExTIGZhaWxlZCEgJXMiCittc2dzdHIgIsKhRmFsbMOzIFNUQVJUVExTISAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTU2Cittc2dpZCAiVW5hYmxlIHRvIGluaXRpYWxpemUgU01UUCBwcm9wZXJseS4gQ2hlY2sgY29uZmlnIGFuZCB1c2UgLS1zbXRwLWRlYnVnLiIKK21zZ3N0ciAiIgorIk5vIGVzIHBvc2libGUgaW5pY2lhbGl6YXIgU01UUCBhZGVjdWFkYW1lbnRlLiBWZXJpZmljYXIgY29uZmlnIHkgdXNhciAtLS0iCisic210cC1kZWJ1Zy4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gc2VuZCAlc1xuIgorbXNnc3RyICJGYWxsw7MgYWwgZW52aWFyICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEcnktU2VudCAlc1xuIgorbXNnc3RyICJEcnktU2VudCAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VudCAlc1xuIgorbXNnc3RyICJFbnZpYWRvICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIkRyeS1PSy4gTG9nIHNheXM6XG4iCittc2dzdHIgIkRyeS1PSy4gTG9nIGRpY2U6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIk9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiT0suIExvZyBkaWNlOlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1OTEKK21zZ2lkICJSZXN1bHQ6ICIKK21zZ3N0ciAiUmVzdWx0YWRvOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU5NAorbXNnaWQgIlJlc3VsdDogT0tcbiIKK21zZ3N0ciAiUmVzdWx0YWRvOiBPS1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2MTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBhYnJpciBlbCBhcmNoaXZvICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NTkgZ2l0LXNlbmQtZW1haWwucGVybDoxNjc5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihtYm94KSBBZ3JlZ2FuZG8gY2M6ICVzIGRlIGzDrW5lYSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgQWdyZWdhbmRvIHBhcmE6ICVzIGRlIGxhIGzDrW5lYSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobm9uLW1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG5vbi1tYm94KSBBZ3JlZ2FuZG8gY2M6ICVzIGRlIGxhIGzDrW5lYSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTc1MworIywgcGVybC1mb3JtYXQKK21zZ2lkICIoYm9keSkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIoYm9keSkgQWdyZWdhbmRvIGNjOiAlcyBkZSBsYSBsw61uZWEgJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NjQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBDb3VsZCBub3QgZXhlY3V0ZSAnJXMnIgorbXNnc3RyICIoJXMpIG5vIHNlIHB1ZG8gZWplY3V0YXIgJyVzJyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODcxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQWRkaW5nICVzOiAlcyBmcm9tOiAnJXMnXG4iCittc2dzdHIgIiglcykgQWdyZWdhbmRvICVzOiAlcyBkZTogJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBmYWlsZWQgdG8gY2xvc2UgcGlwZSB0byAnJXMnIgorbXNnc3RyICIoJXMpIGZhbGzDsyBhbCBjZXJyYXIgZWwgcGlwZSBwYXJhICclcyciCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkwNQorbXNnaWQgImNhbm5vdCBzZW5kIG1lc3NhZ2UgYXMgN2JpdCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbWFuZGFyIG1lbnNhamUgY29tbyA3Yml0IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MTMKK21zZ2lkICJpbnZhbGlkIHRyYW5zZmVyIGVuY29kaW5nIgorbXNnc3RyICJjb2RpZmljYWNpw7NuIGRlIHRyYW5zZmVyZW5jaWEgaW52w6FsaWRhIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NTQgZ2l0LXNlbmQtZW1haWwucGVybDoyMDA2IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjAxNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlczogJXNcbiIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBhYnJpciAlczogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTU3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBjb250YWlucyBhIGxpbmUgbG9uZ2VyIHRoYW4gOTk4IGNoYXJhY3RlcnMiCittc2dzdHIgIiVzOiBlbCBwYXJjaGUgY29udGllbmUgdW5hIGzDrW5lYSBjb24gbcOhcyBkZSA5OTggY2FyYWN0ZXJlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nICVzIHdpdGggYmFja3VwIHN1ZmZpeCAnJXMnLlxuIgorbXNnc3RyICJTYWx0YW5kbyAlcyBjb24gZWwgc3VmaWpvIGRlIGJhY2t1cCAnJXMnLlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk3OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAlcz8gW3l8Tl06ICIKK21zZ3N0ciAiwr9SZWFsbWVudGUgZGVzZWFzIG1hbmRhciAlcz9beXxOXTogIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4sYSxxLGQlcyw/XT8gIgorI34gbXNnc3RyICLCv0NhbWJpbyBkZSBtb2RvIGRlIHN0YWdlIFt5LG4sYSxxLGQlcyw/XT8gIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4sYSxxLGQlcyw/XT8gIgorI34gbXNnc3RyICLCv0FwbGljYXIgc3RhZ2UgYWwgYm9ycmFkbyBbeSxuLGEscSxkJXMsP10/ICIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixhLHEsZCVzLD9dPyAiCisjfiBtc2dzdHIgIsK/QXBsaWNhciBzdGFnZSBhIGVzdGUgaHVuayBbeSxuLGEscSxkJXMsP10/ICIKKworI34gbXNnaWQgIiIKKyN+ICJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorI34gIm1hcmtlZCBmb3Igc3RhZ2luZy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlNpIGVsIHBhcmNoZSBhcGxpY2EgbGltcGlhbWVudGUsIGVsIGh1bmsgZWRpdGFkbyBzZXJhIG1hcmNhZG9cbiIKKyN+ICJpbm1lZGlhdGFtZW50ZSBwYXJhIGVsIMOhcmVhIGRlIHN0YWdlLlxuIgorCisjfiBtc2dpZCAiIgorI34gInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyN+ICJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorI34gInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyN+ICJhIC0gc3RhZ2UgdGhpcyBhbmQgYWxsIHRoZSByZW1haW5pbmcgaHVua3NcbiIKKyN+ICJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBub3IgYW55IG9mIHRoZSByZW1haW5pbmcgaHVua3NcbiIKKyN+IG1zZ3N0ciAiIgorI34gInkgLSBhcGxpY2FyIHN0YWdlIGEgZXN0ZSBodW5rXG4iCisjfiAibiAtIG5vIGFwbGljYXIgc3RhZ2UgYSBlc3RlIGh1bmtcbiIKKyN+ICJxIC0gcXVpdDsgbm8gYXBsaWNhciBzdGFnZSBhIGVzdGUgaHVuayBvIG5pbmd1bm8gZGUgbG9zIHJlc3RhbnRlc1xuIgorI34gImEgLSBhcGxpY2FyIHN0YWdlIGEgZXN0ZSBodW5rIHkgYSB0b2RvcyBsb3MgcG9zdGVyaW9yZXMgZW4gZWwgYXJjaGl2byBcbiIKKyN+ICJkIC0gbm8gYXBsaWNhciBzdGFnZSBhIGVzdGUgaHVuayBvIGEgbmluZ3VubyBkZSBsb3MgcG9zdGVyaW9yZXMgZW4gZXN0ZSAiCisjfiAiYXJjaGl2b1xuIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJy4iCisjfiBtc2dzdHIgIm5vIHNlIHB1ZG8gY29waWFyICclcycgYSAnJXMnLiIKKworI34gbXNnaWQgIm1hbGZvcm1lZCBpZGVudCBsaW5lIgorI34gbXNnc3RyICJsw61uZWEgZGUgZW50cmFkYSBtYWwgZm9ybWFkYSIKKworI34gbXNnaWQgImNvcnJ1cHRlZCBhdXRob3Igd2l0aG91dCBkYXRlIGluZm9ybWF0aW9uIgorI34gbXNnc3RyICJhdXRvciBjb3JydXB0byBzaW4gaW5mb3JtYWNpw7NuIGRlIGZlY2hhIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJS4qcyciCisjfiBtc2dzdHIgIm5vIHNlIHB1ZWRlIGFuYWxpemFyICclLipzJyIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJjb3VsZCBub3QgY2hlY2tvdXQgJXMiCisjfiBtc2dzdHIgIm5vIHNlIHB1ZWRlIGhhY2VyIGNoZWNrb3V0IGEgJXMiCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiZmlsZW5hbWUgaW4gdHJlZSBlbnRyeSBjb250YWlucyBiYWNrc2xhc2g6ICclcyciCisjfiBtc2dzdHIgIm5vbWJyZSBkZSBhcmNoaXZvIGVuIGVsIMOhcmJvbCBjb250aWVuZSB1biBiYWNrc2xhc2g6ICclcyciCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKKyN+IG1zZ3N0ciAiVXNhIC1mIHNpIHJlYWxtZW50ZSBxdWllcmVzIGFncmVnYXJsb3MuXG4iCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCisjfiBtc2dzdHIgIsK/VGFsIHZleiBxdWlzbyBkZWNpciAnZ2l0IGFkZCAuJz9cbiIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJwYWNrZmlsZSBpcyBpbnZhbGlkOiAlcyIKKyN+IG1zZ3N0ciAicGFja2ZpbGUgZXMgaW52w6FsaWRvOiAlcyIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJ1bmFibGUgdG8gb3BlbiBwYWNrZmlsZSBmb3IgcmV1c2U6ICVzIgorI34gbXNnc3RyICJubyBlcyBwb3NpYmxlIGFicmlyIHBhY2tmaWxlIHBhcmEgcmV1c2FyOiAlcyIKKworI34gbXNnaWQgInVuYWJsZSB0byBzZWVrIGluIHJldXNlZCBwYWNrZmlsZSIKKyN+IG1zZ3N0ciAibm8gZXMgcG9zaWJsZSBidXNjYXIgZW4gbG9zIHBhY2tmaWxlIHJldXNhZG9zIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIHJlYWQgZnJvbSByZXVzZWQgcGFja2ZpbGUiCisjfiBtc2dzdHIgIm5vIGVzIHBvc2libGUgbGVlciBkZSBwYWNrZmlsZSByZXVzYWRvIgorCisjfiBtc2dpZCAibm8gSEVBRD8iCisjfiBtc2dzdHIgIsK/U2luIEhFQUQ/IgorCisjfiBtc2dpZCAibWFrZSBjb21taXR0ZXIgZGF0ZSBtYXRjaCBhdXRob3IgZGF0ZSIKKyN+IG1zZ3N0ciAiaGFjZXIgcXVlIGxhIGZlY2hhIGRlbCBjb21taXQgY29uY3VlcmRlIGNvbiBsYSBmZWNoYSBkZSBhdXRvcsOtYSIKKworI34gbXNnaWQgImlnbm9yZSBhdXRob3IgZGF0ZSBhbmQgdXNlIGN1cnJlbnQgZGF0ZSIKKyN+IG1zZ3N0ciAiaWdub3JhciBsYSBmZWNoYSBkZWwgYXV0b3IgeSB1c2FyIGxhIGZlY2hhIGFjdHVhbCIKKworI34gbXNnaWQgInN5bm9ueW0gb2YgLS1yZXNldC1hdXRob3ItZGF0ZSIKKyN+IG1zZ3N0ciAic2luw7NuaW1vIHBhcmEgLS1yZXNldC1hdXRob3ItZGF0ZSIKKworI34gbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UiCisjfiBtc2dzdHIgImlnbm9yYXIgY2FtYmlvcyBlbiBlc3BhY2lvcyBlbiBibGFuY28iCisKKyN+IG1zZ2lkICJwcmVzZXJ2ZSBlbXB0eSBjb21taXRzIGR1cmluZyByZWJhc2UiCisjfiBtc2dzdHIgInByZXNlcnZhciBjb21taXRzIHZhY8Otb3MgZHVyYW50ZSBlbCByZWJhc2UiCisKKyN+IG1zZ2lkICJjYW5ub3QgY29tYmluZSAtLXVzZS1iaXRtYXAtaW5kZXggd2l0aCBvYmplY3QgZmlsdGVyaW5nIgorI34gbXNnc3RyICJubyBzZSBwdWVkZSBjb21iaW5hciAtLXVzZS1iaXRtYXAtaW5kZXggY29uIG9iamV0b3MgZGUgZmlsdHJhZG8iCisKKyMsIHNoLWZvcm1hdAorI34gbXNnaWQgIiIKKyN+ICJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorI34gIiRzbV9wYXRoXG4iCisjfiAiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorI34gbXNnc3RyICIiCisjfiAiTGEgc2lndWllbnRlIHJ1dGEgZXMgaWdub3JhZGEgcG9yIHVubyBkZSB0dXMgYXJjaGl2b3MgLmdpdGlnbm9yZTpcbiIKKyN+ICIkc21fcGF0aFxuIgorI34gIlVzYSAtZiBzaSBlbiB2ZXJkYWQgcXVpZXJlcyBhZ3JlZ2FybG8uIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgInVuYWJsZSB0byBnZXQgdHJlZSBmb3IgJXMiCisjfiBtc2dzdHIgIm5vIHNlIHB1ZG8gb2J0ZW5lciDDoXJib2wgcGFyYSAlcyIKKworI34gbXNnaWQgIlVzZSBhbiBleHBlcmltZW50YWwgaGV1cmlzdGljIHRvIGltcHJvdmUgZGlmZnMiCisjfiBtc2dzdHIgIlVzYXIgdW4gaGV1csOtc3RpY28gZXhwZXJpbWVudGFsIHBhcmEgbWVqb3JhciBsb3MgZGlmZnMiCisKKyN+IG1zZ2lkICJnaXQgY29tbWl0LWdyYXBoIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIgorI34gbXNnc3RyICJnaXQgY29tbWl0LWdyYXBoIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIgorCisjfiBtc2dpZCAiZ2l0IGNvbW1pdC1ncmFwaCByZWFkIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIgorI34gbXNnc3RyICJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCisKKyN+IG1zZ2lkICJ1bmtub3duIGNvcmUudW50cmFja2VkQ2FjaGUgdmFsdWUgJyVzJzsgdXNpbmcgJ2tlZXAnIGRlZmF1bHQgdmFsdWUiCisjfiBtc2dzdHIgIiIKKyN+ICJ2YWxvciBjb3JlLnVudHJhY2tlZENhY2hlICclcycgZGVzY29ub2NpZG87IHVzYW5kbyAna2VlcCcgY29tbyB2YWxvciBwb3IgIgorI34gImRlZmVjdG8iCisKKyN+IG1zZ2lkICJjYW5ub3QgY2hhbmdlIHBhcnRpYWwgY2xvbmUgcHJvbWlzb3IgcmVtb3RlIgorI34gbXNnc3RyICJubyBzZSBwdWVkZSBjYW1iaWFyIHVuIGNsb24gcGFyY2lhbCByZW1vdG8gcHJvbWlzb3IiCisKKyN+IG1zZ2lkICJlcnJvciBidWlsZGluZyB0cmVlcyIKKyN+IG1zZ3N0ciAiZXJyb3IgY29uc3RydXllbmRvIMOhcmJvbGVzIgorCisjfiBtc2dpZCAiaW52YWxpZCBkYXRlIGZvcm1hdCAnJXMnIGluICclcyciCisjfiBtc2dzdHIgImZvcm1hdG8gZGUgZmVjaGEgaW52w6FsaWRvICclcycgZW4gJyVzJyIKKworI34gbXNnaWQgIndyaXRpbmcgcm9vdCBjb21taXQiCisjfiBtc2dzdHIgImVzY3JpYmllbmRvIGNvbW1pdCByYcOteiIKKworI34gbXNnaWQgInN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXMgbWF5IGJlIGxvc3Q6ICVzIgorI34gbXNnc3RyICIiCisjfiAiY2FtYmlvcyBlbiBlbCDDoXJlYSBkZSBzdGFnZSBlbiBlbCBzaWd1aWVudGUgYXJjaGl2byBwdWVkZW4gc2VyIHBlcmRpZG9zOiAiCisjfiAiJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyN+ICJwYXJ0aWFsQ2xvbmUiCisjfiBtc2dzdHIgIiIKKyN+ICItLWZpbHRlciBzb2xvIHB1ZWRlIHNlciB1c2FkbyBjb24gZWwgcmVtb3RvIGNvbmZpZ3VyYWRvIGVuIGV4dGVuc2lvbnMuIgorI34gInBhcnRpYWxDbG9uZSIKKworI34gbXNnaWQgInZlcmlmeSBjb21taXQtbXNnIGhvb2siCisjfiBtc2dzdHIgInZlcmlmaWNhciBlbCBob29rIGNvbW1pdC1tc2ciCisKKyN+IG1zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1yZWJhc2UtbWVyZ2VzJyB3aXRoICctLXN0cmF0ZWd5LW9wdGlvbiciCisjfiBtc2dzdHIgIm5vIHNlIHB1ZWRlIGNvbWJpbmFyICctLXJlYmFzZS1tZXJnZXMnIGNvbiAnLS1zdHJhdGVneS1vcHRpb24nIgorCisjfiBtc2dpZCAiaW52YWxpZCBzcGFyc2UgdmFsdWUgJyVzJyIKKyN+IG1zZ3N0ciAidmFsb3IgZGlzcGVyc28gaW52w6FsaWRvOiAnJXMnIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2Fja19kZXRhaWxlZCIKKyN+IG1zZ3N0ciAiRWwgc2Vydmlkb3Igc29wb3J0YSB1bHRpX2Fja19kZXRhaWxlZCIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBuby1kb25lIgorI34gbXNnc3RyICJFbCBzZXJ2aWRvciBzb3BvcnRhIG5vLWRvbmUiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlfYWNrIgorI34gbXNnc3RyICJFbCBzZXJ2aWRvciBzb3BvcnRhIG11bHRpX2FjayIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBzaWRlLWJhbmQtNjRrIgorI34gbXNnc3RyICJFbCBzZXJ2aWRvciBzb3BvcnRhIHNpZGUtYmFuZC02NGsiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kIgorI34gbXNnc3RyICJFbCBzZXJ2aWRvciBzb3BvcnRhIHNpZGUtYmFuZCIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBhbGxvdy10aXAtc2hhMS1pbi13YW50IgorI34gbXNnc3RyICJFbCBzZXJ2aWRvciBzb3BvcnRhIGFsbG93LXRpcC1zaGExLWluLXdhbnQiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgYWxsb3ctcmVhY2hhYmxlLXNoYTEtaW4td2FudCIKKyN+IG1zZ3N0ciAiRWwgc2Vydmlkb3Igc29wb3J0YSBhbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50IgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIG9mcy1kZWx0YSIKKyN+IG1zZ3N0ciAiRWwgc2Vydmlkb3Igc29wb3J0YSBvZnMtZGVsdGEiCisKKyN+IG1zZ2lkICIoSEVBRCBkZXRhY2hlZCBhdCAlcykiCisjfiBtc2dzdHIgIihIRUFEIGRlc2Fjb3BsYWRvIGVuICVzKSIKKworI34gbXNnaWQgIihIRUFEIGRldGFjaGVkIGZyb20gJXMpIgorI34gbXNnc3RyICIoSEVBRCBkZXNhY29wbGFkbyBkZSAlcykiCisKKyN+IG1zZ2lkICJDaGVja2luZyBvdXQgZmlsZXMiCisjfiBtc2dzdHIgIlJldmlzYW5kbyBhcmNoaXZvcyIKKworI34gbXNnaWQgImNhbm5vdCBiZSBpbnRlcmFjdGl2ZSB3aXRob3V0IHN0ZGluIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiIKKyN+IG1zZ3N0ciAibm8gc2UgcHVlZGUgc2VyIGludGVyYWN0aXZvIHNpbiBzdGRpbiBjb25lY3RhZG8gYSB1biB0ZXJtaW5hbC4iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gc3RhdCAlc1xuIgorI34gbXNnc3RyICJmYWxsw7MgYWwgYW5hbGl6YXIgJXNcbiIKKworI34gbXNnaWQgIiIKKyN+ICJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisjfiAiXG4iCisjfiAiICAgIGdpdCByZXNldFxuIgorI34gIlxuIgorI34gIlRoZW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHdpbGwgcmVzdW1lIGNoZXJyeS1waWNraW5nXG4iCisjfiAidGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorI34gbXNnc3RyICIiCisjfiAiU2kgcXVpZXJlIHNhbHRhciBlc3RlIGNvbW1pdCwgdXNlOlxuIgorI34gIlxuIgorI34gIiAgICBnaXQgcmVzZXRcbiIKKyN+ICJcbiIKKyN+ICJMdWVnbyBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgY29udGludWFyYSBlbCBjaGVycnktcGlja2luZ1xuIgorI34gInBhcmEgbG9zIGNvbW1pdHMgcmVzdGFudGVzLlxuIgorCisjfiBtc2dpZCAidW5yZWNvZ25pemVkIHZlcmI6ICVzIgorI34gbXNnc3RyICJ2ZXJibyBubyByZWNvbm9jaWRvOiAlcyIKKworI34gbXNnaWQgImhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorI34gbXNnc3RyICJ2ZXJzacOzbiBkZSBoYXNoICVYIG5vIGNvbmN1ZXJkYSBjb24gdmVyc2nDs24gJVgiCisKKyN+IG1zZ2lkICJvcHRpb24gJyVzJyByZXF1aXJlcyBhIHZhbHVlIgorI34gbXNnc3RyICJvcGNpw7NuICclcycgcmVxdWllcmUgdW4gdmFsb3IiCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgdHJhbnNmb3JtIHRoZSB0b2RvIGxpc3QiCisjfiBtc2dzdHIgIm5vIHNlIHB1ZG8gdHJhbnNmb3JtYXIgbGlzdGEgZGUgcGVuZGllbnRlcyIKKworI34gbXNnaWQgImRlZmF1bHQiCisjfiBtc2dzdHIgImRlZmF1bHQiCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorI34gbXNnc3RyICJObyBzZSBwdWRvIGNyZWFyIGVsIGRpcmVjdG9yaW8gJyVzJyIKKworI34gbXNnaWQgImFsbG93IHJlcmVyZSB0byB1cGRhdGUgaW5kZXggd2l0aCByZXNvbHZlZCBjb25mbGljdCIKKyN+IG1zZ3N0ciAicGVybWl0aXIgcmVyZXJlIGFjdHVhbGl6YXIgaW5kZXggY29uIGNvbmZsaWN0b3MgcmVzdWVsdG9zIgorCisjfiBtc2dpZCAiY291bGQgbm90IG9wZW4gJXMiCisjfiBtc2dzdHIgIm5vIHNlIHB1ZG8gYWJyaXIgJXMiCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgbW92ZSBiYWNrIHRvICRoZWFkX25hbWUiCisjfiBtc2dzdHIgIk5vIHNlIHB1ZWRlIHJlZ3Jlc2FyIGEgJGhlYWRfbmFtZSIKKworI34gbXNnaWQgIiIKKyN+ICJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAkc3RhdGVfZGlyX2Jhc2UgZGlyZWN0b3J5LCBhbmRcbiIKKyN+ICJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorI34gImNhc2UsIHBsZWFzZSB0cnlcbiIKKyN+ICJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyN+ICJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisjfiAiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorI34gImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisjfiAidmFsdWFibGUgdGhlcmUuIgorI34gbXNnc3RyICIiCisjfiAiUGFyZWNlIHF1ZSB5YSBoYXkgdW4gZGlyZWN0b3JpbyAkc3RhdGVfZGlyX2Jhc2UsIHlcbiIKKyN+ICJtZSBwcmVndW50byBzaSBlc3TDoSBlbiBtZWRpbyBkZSBvdHJvIHJlYmFzZS4gU2kgZXNlIGVzIGVsIFxuIgorI34gImNhc28sIHBvciBmYXZvciBpbnRlbnRlXG4iCisjfiAiXHQkY21kX2xpdmVfcmViYXNlXG4iCisjfiAiU2kgbm8gZXMgZWwgY2FzbywgcG9yIGZhdm9yXG4iCisjfiAiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorI34gInkgZWplY8O6dGVtZSBudWV2YW1lbnRlLiAgTWUgZXN0b3kgZGV0ZW5pZW5kbyBlbiBjYXNvIGRlIHF1ZSB0ZW5nYVxuIgorI34gImFsZ28gZGUgdmFsb3IgYWjDrS4iCisKKyN+IG1zZ2lkICIiCisjfiAiZmF0YWw6IGNhbm5vdCBjb21iaW5lIGFtIG9wdGlvbnMgd2l0aCBlaXRoZXIgaW50ZXJhY3RpdmUgb3IgbWVyZ2Ugb3B0aW9ucyIKKyN+IG1zZ3N0ciAiIgorI34gImZhdGFsOiBubyBzZSBwdWVkZSBjb21iaW5hciBvcGNpb25lcyBhbSBjb24gb3BjaW9uZXMgaW50ZXJhY3RpdmFzIG8gZGUgIgorI34gIm1lcmdlIgorCisjfiBtc2dpZCAiZmF0YWw6IGNhbm5vdCBjb21iaW5lICctLXNpZ25vZmYnIHdpdGggJy0tcHJlc2VydmUtbWVyZ2VzJyIKKyN+IG1zZ3N0ciAiZmF0YWw6IG5vIHNlIHB1ZWRlIGNvbWJpbmFyICctLXNpZ25vZmYnIGNvbiAnLS1wcmVzZXJ2ZS1tZXJnZXMnIgorCisjfiBtc2dpZCAiZmF0YWw6IGNhbm5vdCBjb21iaW5lICctLXByZXNlcnZlLW1lcmdlcycgd2l0aCAnLS1yZWJhc2UtbWVyZ2VzJyIKKyN+IG1zZ3N0ciAiIgorI34gImZhdGFsOiBubyBzZSBwdWVkZSBjb21iaW5hciAnLS1wcmVzZXJ2ZS1tZXJnZXMnIGNvbiAnLS1yZWJhc2UtbWVyZ2VzJyIKKworI34gbXNnaWQgImZhdGFsOiBjYW5ub3QgY29tYmluZSAnLS1yZWJhc2UtbWVyZ2VzJyB3aXRoICctLXN0cmF0ZWd5LW9wdGlvbiciCisjfiBtc2dzdHIgIiIKKyN+ICJmYXRhbDogbm8gc2UgcHVlZGUgY29tYmluYXIgJy0tcmViYXNlLW1lcmdlcycgY29uICctLXN0cmF0ZWd5LW9wdGlvbiciCisKKyN+IG1zZ2lkICJmYXRhbDogY2Fubm90IGNvbWJpbmUgJy0tcmViYXNlLW1lcmdlcycgd2l0aCAnLS1zdHJhdGVneSciCisjfiBtc2dzdHIgImZhdGFsOiBubyBzZSBwdWVkZSBjb21iaW5hciAnLS1yZWJhc2UtbWVyZ2VzJyBjb24gJy0tc3RyYXRlZ3knIgorCisjfiBtc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJHVwc3RyZWFtX25hbWUnIgorI34gbXNnc3RyICJ1cHN0cmVhbSBpbnbDoWxpZG8gJyR1cHN0cmVhbV9uYW1lJyIKKworI34gbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIG1lcmdlIGJhc2VzIgorI34gbXNnc3RyICIkb250b19uYW1lOiBoYXkgbcOhcyBkZSB1bmEgYmFzZSBkZSBmdXNpw7NuIgorCisjfiBtc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgaXMgbm8gbWVyZ2UgYmFzZSIKKyN+IG1zZ3N0ciAiJG9udG9fbmFtZTogbm8gaGF5IGJhc2UgZGUgZnVzacOzbiIKKworI34gbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0OiAkb250b19uYW1lIgorI34gbXNnc3RyICJObyBhcHVudGEgYSB1biBjb21taXQgdsOhbGlkbzogJG9udG9fbmFtZSIKKworI34gbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaC9jb21taXQgJyRicmFuY2hfbmFtZSciCisjfiBtc2dzdHIgImZhdGFsOiBubyBleGlzdGUgbGEgcmFtYS9jb21taXQ6ICckYnJhbmNoX25hbWUnIgorCisjfiBtc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICRzdGFzaF9hYmJyZXYiCisjfiBtc2dzdHIgIkF1dG9zdGFzaCBjcmVhZG86ICRzdGFzaF9hYmJyZXYiCisKKyN+IG1zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZS4iCisjfiBtc2dzdHIgIkxhIHJhbWEgYWN0dWFsICRicmFuY2hfbmFtZSBlc3TDoSBhY3R1YWxpemFkYS4iCisKKyN+IG1zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCisjfiBtc2dzdHIgIlJhbWEgYWN0dWFsICRicmFuY2hfbmFtZSBlc3TDoSBhY3R1YWxpemFkYSwgcmViYXNlIGZvcnphZG8uIgorCisjfiBtc2dpZCAiQ2hhbmdlcyB0byAkb250bzoiCisjfiBtc2dzdHIgIkNhbWJpb3MgaGFjaWEgJG9udG86IgorCisjfiBtc2dpZCAiQ2hhbmdlcyBmcm9tICRtYiB0byAkb250bzoiCisjfiBtc2dzdHIgIkNhbWJpb3MgZGVzZGUgJG1iIGEgJG9udG86IgorCisjfiBtc2dpZCAiRmFzdC1mb3J3YXJkZWQgJGJyYW5jaF9uYW1lIHRvICRvbnRvX25hbWUuIgorI34gbXNnc3RyICJBdmFuY2UgcsOhcGlkbyBkZSAkYnJhbmNoX25hbWUgYSAkb250b19uYW1lLiIKKworI34gbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKKyN+IG1zZ3N0ciAiIgorI34gIkVuIHByaW1lciBsdWdhciwgcmVib2JpbmFuZG8gSEVBRCBwYXJhIGRlc3B1w6lzIHJlcHJvZHVjaXIgdHVzIGNhbWJpb3MgIgorI34gImVuY2ltYSBkZSDDqXN0YS4uLiIKKworI34gbXNnaWQgImlnbm9yaW5nIHVua25vd24gY29sb3ItbW92ZWQtd3MgbW9kZSAnJXMnIgorI34gbXNnc3RyICJpZ25vcmFuZG8gbW9kbyBkZXNjb25vY2lkbyBjb2xvci1tb3ZlZC13cyAnJXMnIgorCisjfiBtc2dpZCAib25seSAndHJlZTowJyBpcyBzdXBwb3J0ZWQiCisjfiBtc2dzdHIgInNvbG8gJ3RyZWU6MCcgZXMgc29wb3J0YWRvIgorCisjfiBtc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXMgYW5kICVzIHRvICVzIGluc3RlYWQiCisjfiBtc2dzdHIgIlJlbm9tYnJhbmRvICVzIGEgJXMgeSAlcyBhICVzIG3DoXMgYmllbiIKKworI34gbXNnaWQgIkFkZGluZyBtZXJnZWQgJXMiCisjfiBtc2dzdHIgIkFncmVnYXIgJXMgZnVzaW9uYWRvIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgZXJyb3IiCisjfiBtc2dzdHIgIkVycm9yIGludGVybm8iCisKKyN+IG1zZ2lkICJtYWlubGluZSB3YXMgc3BlY2lmaWVkIGJ1dCBjb21taXQgJXMgaXMgbm90IGEgbWVyZ2UuIgorI34gbXNnc3RyICJsw61uZWEgcHJpbmNpcGFsIGVzcGVjaWZpY2FkYSBwZXJvIGVsIGNvbW1pdCAlcyBubyBlcyB1bmEgZnVzacOzbi4iCisKKyN+IG1zZ2lkICJ1bmFibGUgdG8gd3JpdGUgc2hhMSBmaWxlbmFtZSAlcyIKKyN+IG1zZ3N0ciAiaW5jYXBheiBkZSBlc2NyaWJpciBlbCBub21icmUgZGUgYXJjaGl2byBzaGExICVzIgorCisjfiBtc2dpZCAiY2Fubm90IHJlYWQgc2hhMV9maWxlIGZvciAlcyIKKyN+IG1zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciBzaGExX2ZpbGUgcGFyYSAlcyIKKworI34gbXNnaWQgIiIKKyN+ICJlcnJvcjogY2Fubm90IGNvbWJpbmUgaW50ZXJhY3RpdmUgb3B0aW9ucyAoLS1pbnRlcmFjdGl2ZSwgLS1leGVjLCAtLSIKKyN+ICJyZWJhc2UtbWVyZ2VzLCAtLXByZXNlcnZlLW1lcmdlcywgLS1rZWVwLWVtcHR5LCAtLXJvb3QgKyAtLW9udG8pIHdpdGggYW0gIgorI34gIm9wdGlvbnMgKCVzKSIKKyN+IG1zZ3N0ciAiIgorI34gImVycm9yOiBubyBzZSBwdWVkZSBjb21iaW5hciBvcGNpb25lcyBpbnRlcmFjdGl2YXMgKC0taW50ZXJhY3RpdmUsIC0tZXhlYywgIgorI34gIi0tcmViYXNlLW1lcmdlcywgLS1wcmVzZXJ2ZS1tZXJnZXMsIC0ta2VlcC1lbXB0eSwgLS1yb290ICsgLS1vbnRvKSBjb24gIgorI34gIm9wY2lvbmVzICglcykiCisKKyN+IG1zZ2lkICIiCisjfiAiZXJyb3I6IGNhbm5vdCBjb21iaW5lIG1lcmdlIG9wdGlvbnMgKC0tbWVyZ2UsIC0tc3RyYXRlZ3ksIC0tc3RyYXRlZ3ktIgorI34gIm9wdGlvbikgd2l0aCBhbSBvcHRpb25zICglcykiCisjfiBtc2dzdHIgIiIKKyN+ICJlcnJvcjogbm8gc2UgcHVlZGUgY29tYmluYXIgb3BjaW9uZXMgZGUgbWVyZ2UgKC0tbWVyZ2UsIC0tc3RyYXRlZ3ksIC0tIgorI34gInN0cmF0ZWd5LW9wdGlvbikgY29uIG9wY2lvbmVzIGRlIGFtICglcykiCisKKyN+IG1zZ2lkICJ1bnJlY29nbmlzZWQgb3B0aW9uOiAnJGFyZyciCisjfiBtc2dzdHIgIm9wY2nDs24gbm8gcmVjb25vY2lkYTogJyRhcmcnIgorCisjfiBtc2dpZCAiJyRpbnZhbGlkJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCisjfiBtc2dzdHIgIickaW52YWxpZCcgbm8gZXMgdW4gY29tbWl0IHbDoWxpZG8iCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgcGFyc2UgJyVzJyAobG9va2luZyBmb3IgJyVzJykiCisjfiBtc2dzdHIgIm5vIHNlIHB1ZG8gY29uZmlndXJhciAnJXMnIChidXNjYW5kbyAnJXMnKSIKKworI34gbXNnaWQgImRlcHJlY2F0ZWQgc3lub255bSBmb3IgLS1jcmVhdGUtcmVmbG9nIgorI34gbXNnc3RyICJzaW7Ds25pbW8gZGVwcmVjYWRvIHBhcmEgLS1jcmVhdGUtcmVmbG9nIgorCisjfiBtc2dpZCAiQ2FuJ3Qgc3RhdCAlcyIKKyN+IG1zZ3N0ciAiTm8gc2UgcHVlZGUgZGVmaW5pciAlcyIKKworI34gbXNnaWQgImFib3J0IHJlYmFzZSIKKyN+IG1zZ3N0ciAiYWJvcnRhciByZWJhc2UiCisKKyN+IG1zZ2lkICJtYWtlIHJlYmFzZSBzY3JpcHQiCisjfiBtc2dzdHIgImdlbmVyYXIgc2NyaXB0IGRlIHJlYmFzZSIKKworI34gbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAlcyIKKyN+IG1zZ3N0ciAiTm8gZXhpc3RlIGVsIHJlbW90bzogJXMiCisKKyN+IG1zZ2lkICJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUiCisjfiBtc2dzdHIgIm5vIHNlIHB1ZWRlIG1vdmVyIHVuIMOhcmJvbCBkZSB0cmFiYWpvIGVuY2VycmFkbyIKKworI34gbXNnaWQgImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlIgorI34gbXNnc3RyICJubyBzZSBwdWVkZSBlbGltaW5hciDDoXJib2wgZGUgdHJhYmFqbyBlbmNlcnJhZG8iCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiXHRIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorI34gIlxuIgorI34gIlx0IgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiXHRDb21vIHNlYSwgc2kgcXVpZXJlcyBib3JyYXIgdG9kbywgZWwgcmViYXNlIHNlcsOhIGFib3J0YWRvLlxuIgorI34gIlxuIgorI34gIlx0IgorCisjfiBtc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBtZXJnZSAoZGlydHk6ICVzKSIKKyN+IG1zZ3N0ciAiw41uZGljZSBzdWNpbzogbm8gc2UgcHVlZGUgZnVzaW9uYXIgKHN1Y2lvOiAlcykiCisKKyN+IG1zZ2lkICIoKy8tKXgiCisjfiBtc2dzdHIgIigrLy0peCIKKworI34gbXNnaWQgIjxjb21tYW5kPiIKKyN+IG1zZ3N0ciAiPGNvbWFuZG8+IgorCisjfiBtc2dpZCAicHVzaHxmZXRjaCIKKyN+IG1zZ3N0ciAicHVzaHxmZXRjaCIKKworI34gbXNnaWQgIndbLGkxWyxpMl1dIgorI34gbXNnc3RyICJ3WyxpMVssaTJdXSIKKworI34gbXNnaWQgIkVudGVyaW5nICckZGlzcGxheXBhdGgnIgorI34gbXNnc3RyICJFbnRyYW5kbyBhICckZGlzcGxheXBhdGgnIgorCisjfiBtc2dpZCAiU3RvcHBpbmcgYXQgJyRkaXNwbGF5cGF0aCc7IHNjcmlwdCByZXR1cm5lZCBub24temVybyBzdGF0dXMuIgorI34gbXNnc3RyICIiCisjfiAiRGV0ZW5pZW5kbyBlbiAnJGRpc3BsYXlwYXRoJzsgc2NyaXB0IGRldm9sdmnDsyB1biBzdGF0dXMgZGlzdGludG8gZGUgY2Vyby4iCisKKyN+IG1zZ2lkICJFdmVyeWRheSBHaXQgV2l0aCAyMCBDb21tYW5kcyBPciBTbyIKKyN+IG1zZ3N0ciAiR2l0IGRpYXJpbyBjb24gMjAgY29tYW5kb3MgbyBhbGdvIGFzw60iCisKKyN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorI34gbXNnc3RyICJObyBzZSBwdWRvIGFicmlyICclcycgcGFyYSBlc2NyaXR1cmEiCisKKyN+IG1zZ2lkICIiCisjfiAidW5leHBlY3RlZCAxc3QgbGluZSBvZiBzcXVhc2ggbWVzc2FnZTpcbiIKKyN+ICJcbiIKKyN+ICJcdCUuKnMiCisjfiBtc2dzdHIgIiIKKyN+ICIxcmEgbMOtbmVhIGRlbCBtZW5zYWplIHNxdWFzaCBubyBlc3BlcmFkYTpcbiIKKyN+ICJcbiIKKyN+ICJcdCUuKnMiCisKKyN+IG1zZ2lkICIiCisjfiAiaW52YWxpZCAxc3QgbGluZSBvZiBzcXVhc2ggbWVzc2FnZTpcbiIKKyN+ICJcbiIKKyN+ICJcdCUuKnMiCisjfiBtc2dzdHIgIiIKKyN+ICIxcmEgbMOtbmVhIGRlbCBtZW5zYWplIHNxdWFzaCBpbnbDoWxpZGE6XG4iCisjfiAiXG4iCisjfiAiXHQlLipzIgorCisjfiBtc2dpZCAiQlVHOiByZXR1cm5lZCBwYXRoIHN0cmluZyBkb2Vzbid0IG1hdGNoIGN3ZD8iCisjfiBtc2dzdHIgIkJVRzogc3RyaW5nIGRlIHJ1dGEgcmVjaWJpZG8gbm8gY29uY3VlcmRhIGNvbiBjd2Q/IgorCisjfiBtc2dpZCAiRXJyb3IgaW4gb2JqZWN0IgorI34gbXNnc3RyICJFcnJvciBlbiBlbCBvYmpldG8iCisKKyN+IG1zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290IEVPRiIKKyN+IG1zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IHNlIGVzcGVyYWJhIEFDSy9OQUssIHNlIG9idHV2byBFT0YiCisKKyN+IG1zZ2lkICJpbnZhbGlkIGZpbHRlci1zcGVjIGV4cHJlc3Npb24gJyVzJyIKKyN+IG1zZ3N0ciAiZXhwcmVzacOzbiBmaWx0ZXItc3BlYyBpbnbDoWxpZGEgJyVzJyIKKworI34gbXNnaWQgIlRoZSBjb3B5IG9mIHRoZSBwYXRjaCB0aGF0IGZhaWxlZCBpcyBmb3VuZCBpbjogJXMiCisjfiBtc2dzdHIgIkxhIGNvcGlhIGRlbCBwYXJjaGUgcXVlIGZhbGxpZG8gc2UgZW5jdWVudHJhIGVuOiAlcyIKKworI34gbXNnaWQgInBhdGhzcGVjIGFuZCAtLWFsbCBhcmUgaW5jb21wYXRpYmxlIgorI34gbXNnc3RyICJwYXRoc3BlYyB5IC0tYWxsIHNvbiBpbmNvbXBhdGlibGVzIgorCisjfiBtc2dpZCAiU3VibW9kdWxlICckbmFtZScgKCR1cmwpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJGRpc3BsYXlwYXRoJyIKKyN+IG1zZ3N0ciAiIgorI34gIkFudWxhZG8gZWwgcmVnaXN0cm8gZGVsIHN1Ym3Ds2R1bG8gJyRuYW1lJyAoJHVybCkgcGFyYSBsYSBydXRhICIKKyN+ICInJGRpc3BsYXlwYXRoJyIKKworI34gbXNnaWQgIlRvL0NjL0JjYyBmaWVsZHMgYXJlIG5vdCBpbnRlcnByZXRlZCB5ZXQsIHRoZXkgaGF2ZSBiZWVuIGlnbm9yZWRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIkNhbXBvcyBQYXJhL0NjL0JjYyBubyBoYW4gc2lkbyBpbnRlcnByZXRhZG9zIHRvZGF2w61hLCBoYW4gc2lkbyBpZ25vcmFkb3NcbiIKKworI34gbXNnaWQgIiIKKyN+ICJlbXB0eSBzdHJpbmdzIGFzIHBhdGhzcGVjcyB3aWxsIGJlIG1hZGUgaW52YWxpZCBpbiB1cGNvbWluZyByZWxlYXNlcy4gIgorI34gInBsZWFzZSB1c2UgLiBpbnN0ZWFkIGlmIHlvdSBtZWFudCB0byBtYXRjaCBhbGwgcGF0aHMiCisjfiBtc2dzdHIgIiIKKyN+ICJsb3Mgc3RyaW5ncyB2YWPDrW9zIGNvbW8gcGF0aHNwZWNzIHNlcsOhbiBpbnbDoWxpZGFzIGVuIGxhcyBwcsOzeGltYXMgIgorI34gInZlcnNpb25lcy4gcG9yIGZhdm9yIHVzZSAuIHNpIHF1ZXLDrWEgaGFjZXIgY29pbmNpZGlyIHRvZGFzIGxhcyBydXRhcyIKKworI34gbXNnaWQgImNvdWxkIG5vdCB0cnVuY2F0ZSAnJXMnIgorI34gbXNnc3RyICJubyBzZSBwdWRvIHRydW5jYXIgJyVzJyIKKworI34gbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAlcyIKKyN+IG1zZ3N0ciAibm8gc2UgcHVkbyBjZXJyYXIgJXMiCisKKyN+IG1zZ2lkICJDb3BpZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorI34gbXNnc3RyICJDb3BpYWRhIHVuYSByYW1hIG1hbCBsbGFtYWRhICclcycgYWZ1ZXJhIgorCisjfiBtc2dpZCAiaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBjcmVhdGUgJ0hFQUQnIG1hbnVhbGx5IgorI34gbXNnc3RyICJObyB0aWVuZSBzZW50aWRvIGNyZWFyICdIRUFEJyBtYW51YWxtZW50ZSIKKworI34gbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGNsb25lICVzIgorI34gbXNnc3RyICJObyBzZSBzYWJlIGNvbW8gY2xvbmFyICVzIgorCisjfiBtc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gZmV0Y2ggZnJvbSAlcyIKKyN+IG1zZ3N0ciAiTm8gc2Ugc2FiZSBjb21vIGV4dHJhZXIgZGUgJXMiCisKKyN+IG1zZ2lkICInJHRlcm0nIGlzIG5vdCBhIHZhbGlkIHRlcm0iCisjfiBtc2dzdHIgIickdGVybScgbm8gZXMgdW4gdMOpcm1pbm8gdsOhbGlkbyIKKworI34gbXNnaWQgIiIKKyN+ICJlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBzYXZlJzogJG9wdGlvblxuIgorI34gIiAgICAgICBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICckb3B0aW9uJyIKKyN+IG1zZ3N0ciAiIgorI34gImVycm9yOiBvcGNpw7NuIGRlc2Nvbm9jaWRhIHBhcmEgJ3N0YXNoIHNhdmUnOiAkb3B0aW9uXG4iCisjfiAiICAgICAgIEVzdG8gcHJvdmVlIHVuIG1lbnNhamUgLCB1c2UgZ2l0IHN0YXNoIHNhdmUgLS0gJyRvcHRpb24nIgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorI34gbXNnc3RyICJGYWxsw7MgYWwgcmVjdXJyaXIgZW4gbGEgcnV0YSBkZSBzdWJtw7NkdWxvICckc21fcGF0aCciCisKKyN+IG1zZ2lkICIlJSh0cmFpbGVycykgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCisjfiBtc2dzdHIgIiUlKHRyYWlsZXJzKSBubyB0b21hIGFyZ3VtZW50b3MiCisKKyN+IG1zZ2lkICJzdWJtb2R1bGUgdXBkYXRlIHN0cmF0ZWd5IG5vdCBzdXBwb3J0ZWQgZm9yIHN1Ym1vZHVsZSAnJXMnIgorI34gbXNnc3RyICIiCisjfiAiZXN0cmF0ZWdpYSBkZSBhY3R1YWxpemFjacOzbiBkZSBzdWJtw7NkdWxvIG5vIHNvcG9ydGFkYSBwYXJhIHN1Ym3Ds2R1bG8gJyVzJyIKKworI34gbXNnaWQgImNoYW5nZSB1cHN0cmVhbSBpbmZvIgorI34gbXNnc3RyICJjYW1iaWUgaW5mbyBkZSB1cHN0cmVhbSIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJJZiB5b3Ugd2FudGVkIHRvIG1ha2UgJyVzJyB0cmFjayAnJXMnLCBkbyB0aGlzOlxuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiU2kgcXVlcsOtYXMgaGFjZXIgcXVlICclcycgcmFzdHJlZSAnJXMnLCBoYXogZXN0bzpcbiIKKyN+ICJcbiIKKworI34gbXNnaWQgImJhc2VuYW1lIgorI34gbXNnc3RyICJub21icmUgYmFzZSIKKworI34gbXNnaWQgIiIKKyN+ICJXYXJuaW5nOiB0aGUgU0hBLTEgaXMgbWlzc2luZyBvciBpc24ndCBhIGNvbW1pdCBpbiB0aGUgZm9sbG93aW5nIGxpbmU6XG4iCisjfiAiIC0gJGxpbmUiCisjfiBtc2dzdHIgIiIKKyN+ICJQZWxpZ3JvOiBmYWx0YSBlbCBTSEEtMSBvIG5vIGVzIHVuIGNvbW1pdCBlbiBsYSBzaWd1aWVudGUgbMOtbmVhOlxuIgorI34gIiAtICRsaW5lIgorCisjfiBtc2dpZCAiIgorI34gIldhcm5pbmc6IHRoZSBjb21tYW5kIGlzbid0IHJlY29nbml6ZWQgaW4gdGhlIGZvbGxvd2luZyBsaW5lOlxuIgorI34gIiAtICRsaW5lIgorI34gbXNnc3RyICIiCisjfiAiUGVsaWdybzogZWwgY29tYW5kbyBubyBlcyByZWNvbm9jaWRvIGVuIGxhIHNpZ3VpZW50ZSBsw61uZWE6XG4iCisjfiAiIC0gJGxpbmUiCisKKyN+IG1zZ2lkICJPciB5b3UgY2FuIGFib3J0IHRoZSByZWJhc2Ugd2l0aCAnZ2l0IHJlYmFzZSAtLWFib3J0Jy4iCisjfiBtc2dzdHIgIk8gcHVlZGVzIGFib3J0YXIgZWwgcmViYXNhbWllbnRvIGNvbiAnZ2l0IHJlYmFzZSAtLWFib3J0Jy4iCmRpZmYgLS1naXQgYS9wby9mci5wbyBiL3BvL2ZyLnBvCmluZGV4IDBhZmYxODYuLjMxNGZmMzcgMTAwNjQ0Ci0tLSBhL3BvL2ZyLnBvCisrKyBiL3BvL2ZyLnBvCkBAIC0xLDI2MDQgKzEsMjUwMTYgQEAKLSMgdHJhbnNsYXRpb24gb2YgZnIucG8gdG8gRnJlbmNoCi0jIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgdG8gRnJlbmNoLgotIyBDb3B5cmlnaHQgKEMpIDIwMDggU2hhd24gUGVhcmNlLCBldCBhbC4KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdCBwYWNrYWdlLgorIyBGcmVuY2ggdHJhbnNsYXRpb25zIGZvciBHaXQuCisjIENvcHlyaWdodCAoQykgMjAxOSBKZWFuLU5vw6tsIEF2aWxhIDxqbi5hdmlsYUBmcmVlLmZyPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjIEplYW4tTm/Dq2wgQXZpbGEgPGpuLmF2aWxhQGZyZWUuZnI+LCAyMDEzLTIwMTkuCisjIFPDqWJhc3RpZW4gSGVsbGV1IDxmbGFzaGNvZGVAZmxhc2h0dXgub3JnPiwgMjAxMy4KICMKLSMgQ2hyaXN0aWFuIENvdWRlciA8Y2hyaXNjb29sQHR1eGZhbWlseS5vcmc+LCAyMDA4LgotIyBBbGV4YW5kcmUgQm91cmdldCA8YWxleGFuZHJlLmJvdXJnZXRAc2F2b2lyZmFpcmVsaW51eC5jb20+LCAyMDA4LgorIyBGcmVuY2ggdHJhbnNsYXRpb25zIG9mIGNvbW1vbiBHaXQgd29yZHMgdXNlZCBpbiB0aGlzIGZpbGU6CisjCisjICAgRW5nbGlzaCAgICAgICAgICB8ICBGcmVuY2gKKyMgICAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAzLXdheSBtZXJnZSAgICAgIHwgIGZ1c2lvbiDDoCAzIHBvaW50cworIyAgICNOTiAgICAgICAgICAgICAgfCAgbsKwTk4KKyMgICBhIGNvbW1pdCAgICAgICAgIHwgIHVuIGNvbW1pdAorIyAgIGJhY2t3YXJkICAgICAgICAgfAorIyAgICAgY29tcGF0aWJpbGl0eSAgfCAgcsOpdHJvY29tcGF0aWJpbGl0w6kKKyMgICBiYXJlIHJlcG9zaXRvcnkgIHwgIGTDqXDDtHQgbnUKKyMgICBiaXNlY3QgICAgICAgICAgIHwgIGJpc3NlY3Rpb24KKyMgICBibG9iICAgICAgICAgICAgIHwgIGJsb2IKKyMgICBidWcgICAgICAgICAgICAgIHwgIGJvZ3VlCisjICAgYnVuZGxlICAgICAgICAgICB8ICBjb2xpcworIyAgIGJ5cGFzcyAgICAgICAgICAgfCAgw6l2aXRlciBkJ3V0aWxpc2VyCisjICAgdG8gY2hlY2tvdXQgICAgICB8ICBleHRyYWlyZQorIyAgIGNoZXJyeS1waWNrICAgICAgfCAgcGljb3JlcgorIyAgIHRvIGNvbW1pdCAgICAgICAgfCAgdmFsaWRlcgorIyAgIGNvbW1pdC1pc2ggICAgICAgfCAgY29tbWl0IG91IGFwcGFyZW50w6kKKyMgICBjb25maWcgZmlsZSAgICAgIHwgIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbgorIyAgIGRhbmdsaW5nICAgICAgICAgfCAgZW4gc3VzcGVucworIyAgIHRvIGRlYnVnICAgICAgICAgfCAgZMOpYm9ndWVyCisjICAgZGVidWdnaW5nICAgICAgICB8ICBkw6lib2dhZ2UKKyMgICB0byBkZWZsYXRlICAgICAgIHwgIGNvbXByZXNzZXIKKyMgICBlbWFpbCAgICAgICAgICAgIHwgIGNvdXJyaWVsCisjICAgZW50cnkgICAgICAgICAgICB8ICDDqWzDqW1lbnQKKyMgICBmYW5vdXQgICAgICAgICAgIHwgIGRpc3BlcnNpb24KKyMgICBmYXN0LWZvcndhcmQgICAgIHwgIGF2YW5jZSByYXBpZGUKKyMgICBmYXN0LWZvcndhcmRlZCAgIHwgIG1pcyDDoCBqb3VyIGVuIGF2YW5jZSByYXBpZGUKKyMgICB0byBmZXRjaCAgICAgICAgIHwgIHJhcGF0cmllcgorIyAgIGZpeCBjb25mbGljdHMgICAgfCAgcsOpZ2xleiBsZXMgY29uZmxpdHMKKyMgICB0byBmb3JtYXQgICAgICAgIHwgIGZvcm1hdGVyCisjICAgZ2xvYiAgICAgICAgICAgICB8ICBnbG9iCisjICAgaGFzaCAgICAgICAgICAgICB8ICBoYWNoYWdlCisjICAgSEVBRCAgICAgICAgICAgICB8ICBIRUFEIChnZW5yZSBmw6ltaW5pbikKKyMgICBob29rICAgICAgICAgICAgIHwgIGNyb2NoZXQKKyMgICBodW5rICAgICAgICAgICAgIHwgIHNlY3Rpb24KKyMgICB0byBpbmZsYXRlICAgICAgIHwgIGTDqWNvbXByZXNzZXIKKyMgICB0byBsaXN0ICAgICAgICAgIHwgIGFmZmljaGVyCisjICAgbWFwcGluZyAgICAgICAgICB8ICBtaXNlIGVuIGNvcnJlc3BvbmRhbmNlCisjICAgbWVyZ2UgICAgICAgICAgICB8ICBmdXNpb24KKyMgICBwYWNrICAgICAgICAgICAgIHwgIHBhcXVldAorIyAgIHBhdGNoZXMgICAgICAgICAgfCAgcGF0Y2hzCisjICAgcGF0dGVybiAgICAgICAgICB8ICBtb3RpZgorIyAgIHRvIHBydW5lICAgICAgICAgfCAgw6lsaW1pbmVyCisjICAgdG8gcHVzaCAgICAgICAgICB8ICBwb3Vzc2VyCisjICAgdG8gcmViYXNlICAgICAgICB8ICByZWJhc2VyCisjICAgdHJhaWxlcnMgICAgICAgICB8ICBsaWduZXMgdGVybWluYWxlcworIyAgIHJlcG9zaXRvcnkgICAgICAgfCAgZMOpcMO0dAorIyAgIHJlbW90ZSAgICAgICAgICAgfCAgZGlzdGFudGUgKG91IHNlcnZldXIgZGlzdGFudCkKKyMgICByZXZpc2lvbiAgICAgICAgIHwgIHLDqXZpc2lvbgorIyAgIHNoYWxsb3cgICAgICAgICAgfCAgc3VwZXJmaWNpZWwKKyMgICBzaGVsbCAgICAgICAgICAgIHwgIGludGVycHLDqXRldXIgZGUgY29tbWFuZGVzCisjICAgc3Rhc2ggICAgICAgICAgICB8ICByZW1pc2FnZQorIyAgIHRvIHN0YXNoICAgICAgICAgfCAgcmVtaXNlcgorIyAgIHRhZyAgICAgICAgICAgICAgfCAgw6l0aXF1ZXR0ZQorIyAgIHRlbXBsYXRlICAgICAgICAgfCAgbW9kw6hsZQorIyAgIHRocmVhZCAgICAgICAgICAgfCAgZmlsCisjICAgdG8gdHJhY2sgICAgICAgICB8ICBzdWl2cmUKKyMgICB0cmVlICAgICAgICAgICAgIHwgIGFyYnJlCisjICAgdHJlZS1pc2ggICAgICAgICB8ICBhcmJyZSBvdSBhcHBhcmVudMOpCisjICAgdG8gdW5zdGFnZSAgICAgICB8ICBkw6lzaW5kZXhlcgorIyAgIHVwc3RyZWFtICAgICAgICAgfCAgYW1vbnQKKyMgICB2aWV3ZXIgICAgICAgICAgIHwgIHZpc3VhbGlzZXVyCisjICAgd29ya3RyZWUgLyAgICAgICB8CisjICAgd29yayhpbmcpIHRyZWUgICB8ICBjb3BpZSBkZSB0cmF2YWlsCisjCiBtc2dpZCAiIgogbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBmclxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMS0yNiAxNTo0Ny0wODAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wMi0wMiAxMjo1OSswMTAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBDaHJpc3RpYW4gQ291ZGVyIDxjaHJpc2Nvb2xAdHV4ZmFtaWx5Lm9yZz5cbiIKLSJMYW5ndWFnZS1UZWFtOiBGcmVuY2hcbiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDIwLTAzLTExIDE1OjI2KzA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDIwLTAzLTExIDIxOjAzKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEPDqWRyaWMgTWFsYXJkIDxjLm1hbGFyZC1naXRAdmFsZHVuLm5ldD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBKZWFuLU5vw6tsIEF2aWxhIDxqbi5hdmlsYUBmcmVlLmZyPlxuIgorIkxhbmd1YWdlOiBmclxuIgogIk1JTUUtVmVyc2lvbjogMS4wXG4iCiAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCiAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlgtR2VuZXJhdG9yOiBLQmFiZWwgMS4xMS40XG4iCi0iUGx1cmFsLUZvcm1zOiAgbnBsdXJhbHM9MjsgcGx1cmFsPShuID4gMSk7XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9bjw9MSA/MCA6IDE7XG4iCisiWC1HZW5lcmF0b3I6IFBvZWRpdCAyLjIuM1xuIgogCi0jOiBnaXQtZ3VpLnNoOjQxIGdpdC1ndWkuc2g6NzkzIGdpdC1ndWkuc2g6ODA3IGdpdC1ndWkuc2g6ODIwIGdpdC1ndWkuc2g6OTAzCi0jOiBnaXQtZ3VpLnNoOjkyMgotbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgotbXNnc3RyICJnaXQtZ3VpOiBlcnJldXIgZmF0YWxlIgorIzogYWRkLWludGVyYWN0aXZlLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpPyIKK21zZ3N0ciAiSGVpbiAoJXMpwqA/IgogCi0jOiBnaXQtZ3VpLnNoOjc0MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgotbXNnc3RyICJQb2xpY2UgaW52YWxpZGUgc3DDqWNpZmnDqWUgZGFucyAlcyA6IgorIzogYWRkLWludGVyYWN0aXZlLmM6NTIxIGFkZC1pbnRlcmFjdGl2ZS5jOjgyMiBzZXF1ZW5jZXIuYzozMTI0CisjOiBzZXF1ZW5jZXIuYzozNTYyIGJ1aWx0aW4vcmViYXNlLmM6ODc1IGJ1aWx0aW4vcmViYXNlLmM6MTY4NworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDg2IGJ1aWx0aW4vcmViYXNlLmM6MjEzMAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbCdpbmRleCIKIAotIzogZ2l0LWd1aS5zaDo3NzkKLW1zZ2lkICJNYWluIEZvbnQiCi1tc2dzdHIgIlBvbGljZSBwcmluY2lwYWxlIgorIzogYWRkLWludGVyYWN0aXZlLmM6NTc2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjY5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI5NAorbXNnaWQgImJpbmFyeSIKK21zZ3N0ciAiYmluYWlyZSIKIAotIzogZ2l0LWd1aS5zaDo3ODAKLW1zZ2lkICJEaWZmL0NvbnNvbGUgRm9udCIKLW1zZ3N0ciAiUG9saWNlIGRpZmYvY29uc29sZSIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYzNCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI3OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMzIKK21zZ2lkICJub3RoaW5nIgorbXNnc3RyICJyaWVuIgogCi0jOiBnaXQtZ3VpLnNoOjc5NAotbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGdpdCBkYW5zIFBBVEguIgorIzogYWRkLWludGVyYWN0aXZlLmM6NjM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzE0CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMyOQorbXNnaWQgInVuY2hhbmdlZCIKK21zZ3N0ciAiaW5jaGFuZ8OpIgogCi0jOiBnaXQtZ3VpLnNoOjgyMQotbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIHBhcnNlciBsYSB2ZXJzaW9uIGRlIEdpdCA6IgorIzogYWRkLWludGVyYWN0aXZlLmM6NjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjQzCittc2dpZCAiVXBkYXRlIgorbXNnc3RyICJNaXNlIMOgIGpvdXIiCiAKLSM6IGdpdC1ndWkuc2g6ODM5Ci0jLCB0Y2wtZm9ybWF0CisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2ODkgYWRkLWludGVyYWN0aXZlLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGFnZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnaW5kZXhlciAnJXMnIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTUgYWRkLWludGVyYWN0aXZlLmM6ODg0IHNlcXVlbmNlci5jOjMzMTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODk5Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsJ2luZGV4IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInVwZGF0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ1cGRhdGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIGNoZW1pbiBtaXMgw6Agam91clxuIgorbXNnc3RyWzFdICIlZCBjaGVtaW5zIG1pcyDDoCBqb3VyXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcxNiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY3OAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAibm90ZTogJXMgaXMgdW50cmFja2VkIG5vdy5cbiIKK21zZ3N0ciAibm90ZcKgOiAlcyBuJ2VzdCBwbHVzIHN1aXZpIMOgIHByw6lzZW50LlxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3MjEgYXBwbHkuYzo0MTEwIGJ1aWx0aW4vY2hlY2tvdXQuYzoyODEKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIG1ha2VfY2FjaGVfZW50cnkgcG91ciBsZSBjaGVtaW4gJyVzJyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzUxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjU1Cittc2dpZCAiUmV2ZXJ0IgorbXNnc3RyICJJbnZlcnNlciIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzY3Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIEhFQURee3RyZWV9IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgSEVBRF57dHJlZX0iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjgwNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzMQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAicmV2ZXJ0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJyZXZlcnRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIlZCBjaGVtaW4gaW52ZXJzw6lcbiIKK21zZ3N0clsxXSAiJWQgY2hlbWlucyBpbnZlcnPDqXNcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODU2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVudHJhY2tlZCBmaWxlcy5cbiIKK21zZ3N0ciAiQXVjdW4gRmljaGllciBub24gc3VpdmkuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg2MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY4OQorbXNnaWQgIkFkZCB1bnRyYWNrZWQiCittc2dzdHIgIkFqb3V0ZXIgdW4gZmljaGllciBub24tc3VpdmkiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg4NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyNQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiYWRkZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJhZGRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIlZCBjaGVtaW4gYWpvdXTDqVxuIgorbXNnc3RyWzFdICIlZCBjaGVtaW5zIGFqb3V0w6lzXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkxNworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXMiCittc2dzdHIgImZpY2hpZXIgbm9uLWZ1c2lvbm7DqSBpZ25vcsOpwqA6ICVzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MjkgYWRkLXBhdGNoLmM6MTY3NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAiU2V1bHMgZGVzIGZpY2hpZXJzIGJpbmFpcmVzIG9udCBjaGFuZ8OpLlxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MzEgYWRkLXBhdGNoLmM6MTY3MyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY2hhbmdlcy5cbiIKK21zZ3N0ciAiQXVjdW5lIG1vZGlmaWNhdGlvbi5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3NgorbXNnaWQgIlBhdGNoIHVwZGF0ZSIKK21zZ3N0ciAiTWlzZSDDoCBqb3VyIHBhciBwYXRjaCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTc0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc1NAorbXNnaWQgIlJldmlldyBkaWZmIgorbXNnc3RyICJSw6l2aXNlciBsYSBkaWZmw6lyZW5jZSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwMgorbXNnaWQgInNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgY2hlbWlucyBjb21wcmVuYW50IGRlcyBtb2RpZmljYXRpb25zIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA0Cittc2dpZCAiYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICIiCisiYWpvdXRlciBsJ8OpdGF0IGRlIGwnYXJicmUgZGUgdHJhdmFpbCDDoCBsJ2Vuc2VtYmxlIGRlcyBtb2RpZmljYXRpb25zIGluZGV4w6llcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNgorbXNnaWQgInJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uIgorbXNnc3RyICJyZXRvdXJuZXIgbCdlbnNlbWJsZSBkZSBtb2RpZmljYXRpb25zIGluZGV4w6llcyDDoCBsYSB2ZXJzaW9uIEhFQUQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDgKK21zZ2lkICJwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHkiCittc2dzdHIgInPDqWxlY3Rpb24gZXQgbWlzZSDDoCBqb3VyIGluZGl2aWR1ZWxsZSBkZXMgc2VjdGlvbnMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTAKK21zZ2lkICJ2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAidmlzdWFsaXNlciBsZXMgZGlmZnMgZW50cmUgSEVBRCBldCBsJ2luZGV4IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEyCittc2dpZCAiYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICIiCisiYWpvdXRlciBsZSBjb250ZW51IGRlcyBmaWNoaWVycyBub24tc3VpdmlzIMOgIGwnZW5zZW1ibGUgZGVzIG1vZGlmaWNhdGlvbnMgIgorImluZGV4w6llcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAyMCBhZGQtaW50ZXJhY3RpdmUuYzoxMDY5Cittc2dpZCAiUHJvbXB0IGhlbHA6IgorbXNnc3RyICJBaWRlwqA6IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDIyCittc2dpZCAic2VsZWN0IGEgc2luZ2xlIGl0ZW0iCittc2dzdHIgInPDqWxlY3Rpb25uZXIgdW4gc2V1bCDDqWzDqW1lbnQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMjQKK21zZ2lkICJzZWxlY3QgYSByYW5nZSBvZiBpdGVtcyIKK21zZ3N0ciAic8OpbGVjdGlvbm5lciB1bmUgcGxhZ2UgZCfDqWzDqW1lbnRzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI2Cittc2dpZCAic2VsZWN0IG11bHRpcGxlIHJhbmdlcyIKK21zZ3N0ciAic8OpbGVjdGlvbm5lciBwbHVzaWV1cnMgcGxhZ2VzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI4IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNzMKK21zZ2lkICJzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4IgorbXNnc3RyICJzw6lsZWN0aW9ubmVyIHVuIMOpbMOpbWVudCBiYXPDqSBzdXIgdW5lIHByw6lmaXhlIHVuaXF1ZSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAzMAorbXNnaWQgInVuc2VsZWN0IHNwZWNpZmllZCBpdGVtcyIKK21zZ3N0ciAiZMOpc8OpbGVjdGlvbm5lciBsZXMgw6lsw6ltZW50cyBzcMOpY2lmacOpcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAzMgorbXNnaWQgImNob29zZSBhbGwgaXRlbXMiCittc2dzdHIgImNob2lzaXIgdG91cyBsZXMgw6lsw6ltZW50cyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAzNAorbXNnaWQgIihlbXB0eSkgZmluaXNoIHNlbGVjdGluZyIKK21zZ3N0ciAiKHZpZGUpIGFycsOqdGVyIGRlIHPDqWxlY3Rpb25uZXIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNzEKK21zZ2lkICJzZWxlY3QgYSBudW1iZXJlZCBpdGVtIgorbXNnc3RyICJzw6lsZWN0aW9ubmVyIHVuIMOpbMOpbWVudCBwYXIgc29uIG51bcOpcm8iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNzUKK21zZ2lkICIoZW1wdHkpIHNlbGVjdCBub3RoaW5nIgorbXNnc3RyICIodmlkZSkgbmUgcmllbiBzw6lsZWN0aW9ubmVyIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDgzIGJ1aWx0aW4vY2xlYW4uYzo4MjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODUxCittc2dpZCAiKioqIENvbW1hbmRzICoqKiIKK21zZ3N0ciAiKioqIENvbW1hbmRlcyAqKioiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwODQgYnVpbHRpbi9jbGVhbi5jOjgyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NDgKK21zZ2lkICJXaGF0IG5vdyIKK21zZ3N0ciAiRXQgbWFpbnRlbmFudCA/IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAic3RhZ2VkIgorbXNnc3RyICJpbmRleMOpIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAidW5zdGFnZWQiCittc2dzdHIgIm5vbi1pbmRleMOpIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGFwcGx5LmM6NDk2NyBhcHBseS5jOjQ5NzAgYnVpbHRpbi9hbS5jOjIyNTEKKyM6IGJ1aWx0aW4vYW0uYzoyMjU0IGJ1aWx0aW4vY2xvbmUuYzoxMjMgYnVpbHRpbi9mZXRjaC5jOjE0NAorIzogYnVpbHRpbi9tZXJnZS5jOjI3NCBidWlsdGluL3B1bGwuYzoxODkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTcKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTAyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA1CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE0OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInBhdGgiCittc2dzdHIgImNoZW1pbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTE0MworbXNnaWQgImNvdWxkIG5vdCByZWZyZXNoIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHJhZnJhw65jaGlyIGwnaW5kZXgiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExNTcgYnVpbHRpbi9jbGVhbi5jOjc4NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnllLlxuIgorbXNnc3RyICJBdSByZXZvaXIuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjMzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkluZGV4ZXIgbGUgY2hhbmdlbWVudCBkZSBtb2RlIFt5LG4scSxhLGQlcyw/XcKgPyAiCisKKyM6IGFkZC1wYXRjaC5jOjM0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkluZGV4ZXIgbGEgc3VwcHJlc3Npb24gW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogYWRkLXBhdGNoLmM6MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMwCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkluZGV4ZXIgY2V0dGUgc2VjdGlvbiBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBhZGQtcGF0Y2guYzozNwogbXNnaWQgIiIKLSJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKLSJcbiIKLSIlcyBjbGFpbXMgaXQgaXMgdmVyc2lvbiAnJXMnLlxuIgotIlxuIgotIiVzIHJlcXVpcmVzIGF0IGxlYXN0IEdpdCAxLjUuMCBvciBsYXRlci5cbiIKLSJcbiIKLSJBc3N1bWUgJyVzJyBpcyB2ZXJzaW9uIDEuNS4wP1xuIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorInN0YWdpbmcuIgogbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBkZSBkw6l0ZXJtaW5lciBsYSB2ZXJzaW9uIGRlIEdpdC5cbiIKLSJcbiIKLSIlcyBhZmZpcm1lIHF1J2lsIHMnYWdpdCBkZSBsYSB2ZXJzaW9uICclcycuXG4iCi0iXG4iCi0iJXMgbsOpY2Vzc2l0ZSBhdSBtb2lucyBHaXQgMS41LjAuXG4iCi0iXG4iCi0iUGV1dC1vbiBjb25zaWTDqXJlciBxdWUgJyVzJyBlc3QgZW4gdmVyc2lvbiAxLjUuMCA/XG4iCisiU2kgbGUgcGF0Y2ggcydhcHBsaXF1ZSBwcm9wcmVtZW50LCBsYSBzZWN0aW9uIMOpZGl0w6llIHNlcmEgaW1tw6lkaWF0ZW1lbnQgIgorIm1hcnF1w6llIGNvbW1lIGluZGV4w6llLiIKIAotIzogZ2l0LWd1aS5zaDoxMTI4Ci1tc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgcsOpcGVydG9pcmUgZ2l0IDoiCi0KLSM6IGdpdC1ndWkuc2g6MTE0NgotbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCi1tc2dzdHIgIkltcG9zc2libGUgZCdhbGxlciDDoCBsYSByYWNpbmUgZHUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCA6IgotCi0jOiBnaXQtZ3VpLnNoOjExNTQKLW1zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCi1tc2dzdHIgIkltcG9zc2libGUgZCd1dGlsaXNlciB1biBkw6lww7R0IG51IChiYXJlKSA6IgotCi0jOiBnaXQtZ3VpLnNoOjExNjIKLW1zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAiQXVjdW4gcsOpcGVydG9pcmUgZGUgdHJhdmFpbCIKLQotIzogZ2l0LWd1aS5zaDoxMzM0IGxpYi9jaGVja291dF9vcC50Y2w6MzA2Ci1tc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKLW1zZ3N0ciAiUmFmcmHDrmNoaXNzZW1lbnQgZHUgc3RhdHV0IGRlcyBmaWNoaWVycy4uLiIKLQotIzogZ2l0LWd1aS5zaDoxMzkwCi1tc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKLW1zZ3N0ciAiUmVjaGVyY2hlIGRlIGZpY2hpZXJzIG1vZGlmacOpcy4uLiIKLQotIzogZ2l0LWd1aS5zaDoxNDU0Ci1tc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKLW1zZ3N0ciAiTGFuY2VtZW50IGRlIGwnYWN0aW9uIGRlIHByw6lwYXJhdGlvbiBkdSBtZXNzYWdlIGRlIGNvbW1pdC4uLiIKLQotIzogZ2l0LWd1aS5zaDoxNDcxCi1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAiQ29tbWl0IHJlZnVzw6kgcGFyIGwnYWN0aW9uIGRlIHByw6lwYXJhdGlvbiBkdSBtZXNzYWdlIGRlIGNvbW1pdC4iCi0KLSM6IGdpdC1ndWkuc2g6MTYyOSBsaWIvYnJvd3Nlci50Y2w6MjQ2Ci1tc2dpZCAiUmVhZHkuIgotbXNnc3RyICJQcsOqdC4iCi0KLSM6IGdpdC1ndWkuc2g6MTc4NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRpc3BsYXlpbmcgb25seSAlcyBvZiAlcyBmaWxlcy4iCi1tc2dzdHIgIkFmZmljaGUgc2V1bGVtZW50ICVzIGZpY2hpZXJzIHN1ciAlcy4iCi0KLSM6IGdpdC1ndWkuc2g6MTkxMwotbXNnaWQgIlVubW9kaWZpZWQiCi1tc2dzdHIgIk5vbiBtb2RpZmnDqSIKLQotIzogZ2l0LWd1aS5zaDoxOTE1Ci1tc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIk1vZGlmacOpLCBwYXMgaW5kZXjDqSIKLQotIzogZ2l0LWd1aS5zaDoxOTE2IGdpdC1ndWkuc2g6MTkyNAotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICJJbmRleMOpIgotCi0jOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1Ci1tc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIlBvcnRpb25zIGluZGV4w6llcyIKLQotIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgotbXNnc3RyICJJbmRleMOpcywgbWFucXVhbnQiCi0KLSM6IGdpdC1ndWkuc2g6MTkyMAotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICJMZSB0eXBlIGRlIGZpY2hpZXIgYSBjaGFuZ8OpLCBub24gaW5kZXjDqSIKLQotIzogZ2l0LWd1aS5zaDoxOTIxCi1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIHN0YWdlZCIKLW1zZ3N0ciAiTGUgdHlwZSBkZSBmaWNoaWVyIGEgY2hhbmfDqSwgaW5kZXjDqSIKLQotIzogZ2l0LWd1aS5zaDoxOTIzCi1tc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICJOb24gdmVyc2lvbm7DqSwgbm9uIGluZGV4w6kiCi0KLSM6IGdpdC1ndWkuc2g6MTkyOAotbXNnaWQgIk1pc3NpbmciCi1tc2dzdHIgIk1hbnF1YW50IgotCi0jOiBnaXQtZ3VpLnNoOjE5MjkKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCi1tc2dzdHIgIkluZGV4w6kgcG91ciBzdXBwcmVzc2lvbiIKLQotIzogZ2l0LWd1aS5zaDoxOTMwCi1tc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgotbXNnc3RyICJJbmRleMOpIHBvdXIgc3VwcHJlc3Npb24sIHRvdWpvdXJzIHByw6lzZW50IgotCi0jOiBnaXQtZ3VpLnNoOjE5MzIgZ2l0LWd1aS5zaDoxOTMzIGdpdC1ndWkuc2g6MTkzNCBnaXQtZ3VpLnNoOjE5MzUKLSM6IGdpdC1ndWkuc2g6MTkzNiBnaXQtZ3VpLnNoOjE5MzcKLW1zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgotbXNnc3RyICJOw6ljZXNzaXRlIGxhIHLDqXNvbHV0aW9uIGQndW5lIGZ1c2lvbiIKLQotIzogZ2l0LWd1aS5zaDoxOTcyCi1tc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAiTGFuY2VtZW50IGRlIGdpdGsuLi4gdW4gaW5zdGFudC4uLiIKLQotIzogZ2l0LWd1aS5zaDoxOTg0Ci1tc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCi1tc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBnaXRrIGRhbnMgUEFUSC4iCi0KLSM6IGdpdC1ndWkuc2g6MjA0MwotbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0IGd1aSBpbiBQQVRIIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgZ2l0IGd1aSBkYW5zIFBBVEgiCi0KLSM6IGdpdC1ndWkuc2g6MjQ1NSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2Ci1tc2dpZCAiUmVwb3NpdG9yeSIKLW1zZ3N0ciAiRMOpcMO0dCIKLQotIzogZ2l0LWd1aS5zaDoyNDU2Ci1tc2dpZCAiRWRpdCIKLW1zZ3N0ciAiw4lkaXRpb24iCi0KLSM6IGdpdC1ndWkuc2g6MjQ1OCBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCi1tc2dpZCAiQnJhbmNoIgotbXNnc3RyICJCcmFuY2hlIgotCi0jOiBnaXQtZ3VpLnNoOjI0NjEgbGliL2Nob29zZV9yZXYudGNsOjU0OAotbXNnaWQgIkNvbW1pdEBAbm91biIKLW1zZ3N0ciAiQ29tbWl0IgotCi0jOiBnaXQtZ3VpLnNoOjI0NjQgbGliL21lcmdlLnRjbDoxMjEgbGliL21lcmdlLnRjbDoxNTAgbGliL21lcmdlLnRjbDoxNjgKLW1zZ2lkICJNZXJnZSIKLW1zZ3N0ciAiRnVzaW9ubmVyIgotCi0jOiBnaXQtZ3VpLnNoOjI0NjUgbGliL2Nob29zZV9yZXYudGNsOjU1NwotbXNnaWQgIlJlbW90ZSIKLW1zZ3N0ciAiRMOpcMO0dCBkaXN0YW50IgotCi0jOiBnaXQtZ3VpLnNoOjI0NjgKLW1zZ2lkICJUb29scyIKLW1zZ3N0ciAiT3V0aWxzIgotCi0jOiBnaXQtZ3VpLnNoOjI0NzcKLW1zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKLW1zZ3N0ciAiRXhwbG9yZXIgbGEgY29waWUgZGUgdHJhdmFpbCIKLQotIzogZ2l0LWd1aS5zaDoyNDgzCi1tc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCi1tc2dzdHIgIk5hdmlndWVyIGRhbnMgbGEgYnJhbmNoZSBjb3VyYW50ZSIKLQotIzogZ2l0LWd1aS5zaDoyNDg3Ci1tc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKLW1zZ3N0ciAiTmF2aWd1ZXIgZGFucyBsYSBicmFuY2hlLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI0OTIKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgotbXNnc3RyICJWaXN1YWxpc2VyIGwnaGlzdG9yaXF1ZSBkZSBsYSBicmFuY2hlIGNvdXJhbnRlIgotCi0jOiBnaXQtZ3VpLnNoOjI0OTYKLW1zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgotbXNnc3RyICJWb2lyIGwnaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIGJyYW5jaGVzIgotCi0jOiBnaXQtZ3VpLnNoOjI1MDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKLW1zZ3N0ciAiUGFyY291cmlyIGwnYXJib3Jlc2NlbmNlIGRlICVzIgotCi0jOiBnaXQtZ3VpLnNoOjI1MDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgotbXNnc3RyICJWb2lyIGwnaGlzdG9yaXF1ZSBkZSBsYSBicmFuY2hlIDogJXMiCi0KLSM6IGdpdC1ndWkuc2g6MjUxMCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKLW1zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgotbXNnc3RyICJTdGF0aXN0aXF1ZXMgZHUgZMOpcMO0dCIKLQotIzogZ2l0LWd1aS5zaDoyNTEzIGxpYi9kYXRhYmFzZS50Y2w6MzQKLW1zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKLW1zZ3N0ciAiQ29tcHJpbWVyIGxlIGTDqXDDtHQiCi0KLSM6IGdpdC1ndWkuc2g6MjUxNgotbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKLW1zZ3N0ciAiVsOpcmlmaWVyIGxlIGTDqXDDtHQiCi0KLSM6IGdpdC1ndWkuc2g6MjUyMyBnaXQtZ3VpLnNoOjI1MjcgZ2l0LWd1aS5zaDoyNTMxIGxpYi9zaG9ydGN1dC50Y2w6OAotIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCi1tc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKLW1zZ3N0ciAiQ3LDqWVyIHVuZSBpY8O0bmUgc3VyIGxlIGJ1cmVhdSIKLQotIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCi1tc2dpZCAiUXVpdCIKLW1zZ3N0ciAiUXVpdHRlciIKLQotIzogZ2l0LWd1aS5zaDoyNTQ3Ci1tc2dpZCAiVW5kbyIKLW1zZ3N0ciAiRMOpZmFpcmUiCi0KLSM6IGdpdC1ndWkuc2g6MjU1MAotbXNnaWQgIlJlZG8iCi1tc2dzdHIgIlJlZmFpcmUiCi0KLSM6IGdpdC1ndWkuc2g6MjU1NCBnaXQtZ3VpLnNoOjMxMDkKLW1zZ2lkICJDdXQiCi1tc2dzdHIgIkNvdXBlciIKLQotIzogZ2l0LWd1aS5zaDoyNTU3IGdpdC1ndWkuc2g6MzExMiBnaXQtZ3VpLnNoOjMxODYgZ2l0LWd1aS5zaDozMjU5Ci0jOiBsaWIvY29uc29sZS50Y2w6NjkKLW1zZ2lkICJDb3B5IgotbXNnc3RyICJDb3BpZXIiCi0KLSM6IGdpdC1ndWkuc2g6MjU2MCBnaXQtZ3VpLnNoOjMxMTUKLW1zZ2lkICJQYXN0ZSIKLW1zZ3N0ciAiQ29sbGVyIgotCi0jOiBnaXQtZ3VpLnNoOjI1NjMgZ2l0LWd1aS5zaDozMTE4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOAotbXNnaWQgIkRlbGV0ZSIKLW1zZ3N0ciAiU3VwcHJpbWVyIgotCi0jOiBnaXQtZ3VpLnNoOjI1NjcgZ2l0LWd1aS5zaDozMTIyIGdpdC1ndWkuc2g6MzI2MyBsaWIvY29uc29sZS50Y2w6NzEKLW1zZ2lkICJTZWxlY3QgQWxsIgotbXNnc3RyICJUb3V0IHPDqWxlY3Rpb25uZXIiCi0KLSM6IGdpdC1ndWkuc2g6MjU3NgotbXNnaWQgIkNyZWF0ZS4uLiIKLW1zZ3N0ciAiQ3LDqWVyLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1ODIKLW1zZ2lkICJDaGVja291dC4uLiIKLW1zZ3N0ciAiQ2hhcmdlciAoY2hlY2tvdXQpLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1ODgKLW1zZ2lkICJSZW5hbWUuLi4iCi1tc2dzdHIgIlJlbm9tbWVyLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1OTMKLW1zZ2lkICJEZWxldGUuLi4iCi1tc2dzdHIgIlN1cHByaW1lci4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNTk4Ci1tc2dpZCAiUmVzZXQuLi4iCi1tc2dzdHIgIlLDqWluaXRpYWxpc2VyLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI2MDgKLW1zZ2lkICJEb25lIgotbXNnc3RyICJFZmZlY3R1w6kiCi0KLSM6IGdpdC1ndWkuc2g6MjYxMAotbXNnaWQgIkNvbW1pdEBAdmVyYiIKLW1zZ3N0ciAiQ29tbWl0ZXJAQHZlcmIiCi0KLSM6IGdpdC1ndWkuc2g6MjYxOSBnaXQtZ3VpLnNoOjMwNTAKLW1zZ2lkICJOZXcgQ29tbWl0IgotbXNnc3RyICJOb3V2ZWF1IGNvbW1pdCIKLQotIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzA1NwotbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgotbXNnc3RyICJDb3JyaWdlciBkZXJuaWVyIGNvbW1pdCIKLQotIzogZ2l0LWd1aS5zaDoyNjM3IGdpdC1ndWkuc2g6MzAxMSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjk5Ci1tc2dpZCAiUmVzY2FuIgotbXNnc3RyICJSZWNoYXJnZXIgbW9kaWZzLiIKLQotIzogZ2l0LWd1aS5zaDoyNjQzCi1tc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgotbXNnc3RyICJJbmRleGVyIgotCi0jOiBnaXQtZ3VpLnNoOjI2NDkKLW1zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKLW1zZ3N0ciAiSW5kZXhlciB0b3V0ZXMgbW9kaWZpY2F0aW9ucyIKLQotIzogZ2l0LWd1aS5zaDoyNjU1Ci1tc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKLW1zZ3N0ciAiRMOpc2luZGV4ZXIiCi0KLSM6IGdpdC1ndWkuc2g6MjY2MSBsaWIvaW5kZXgudGNsOjQxMgotbXNnaWQgIlJldmVydCBDaGFuZ2VzIgotbXNnc3RyICJBbm51bGVyIGxlcyBtb2RpZmljYXRpb25zIgotCi0jOiBnaXQtZ3VpLnNoOjI2NjkgZ2l0LWd1aS5zaDozMzEwIGdpdC1ndWkuc2g6MzM0MQotbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgotbXNnc3RyICJNb250cmVyIG1vaW5zIGRlIGNvbnRleHRlIgotCi0jOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQotbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgotbXNnc3RyICJNb250cmVyIHBsdXMgZGUgY29udGV4dGUiCi0KLSM6IGdpdC1ndWkuc2g6MjY4MCBnaXQtZ3VpLnNoOjMwMjQgZ2l0LWd1aS5zaDozMTMzCi1tc2dpZCAiU2lnbiBPZmYiCi1tc2dzdHIgIlNpZ25lciIKLQotIzogZ2l0LWd1aS5zaDoyNjk2Ci1tc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCi1tc2dzdHIgIkZ1c2lvbiBsb2NhbGUuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjcwMQotbXNnaWQgIkFib3J0IE1lcmdlLi4uIgotbXNnc3RyICJBYmFuZG9ubmVyIGZ1c2lvbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzEzIGdpdC1ndWkuc2g6Mjc0MQotbXNnaWQgIkFkZC4uLiIKLW1zZ3N0ciAiQWpvdXRlci4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzE3Ci1tc2dpZCAiUHVzaC4uLiIKLW1zZ3N0ciAiUG91c3Nlci4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzIxCi1tc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKLW1zZ3N0ciAiU3VwcHJpbWVyIGJyYW5jaGUuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjczMSBnaXQtZ3VpLnNoOjMyOTIKLW1zZ2lkICJPcHRpb25zLi4uIgotbXNnc3RyICJPcHRpb25zLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3NDIKLW1zZ2lkICJSZW1vdmUuLi4iCi1tc2dzdHIgIlN1cHByaW1lci4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzUxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKLW1zZ2lkICJIZWxwIgotbXNnc3RyICJBaWRlIgotCi0jOiBnaXQtZ3VpLnNoOjI3NTUgZ2l0LWd1aS5zaDoyNzU5IGxpYi9hYm91dC50Y2w6MTQKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFib3V0ICVzIgotbXNnc3RyICLDgCBwcm9wb3MgZGUgJXMiCi0KLSM6IGdpdC1ndWkuc2g6Mjc4MwotbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgotbXNnc3RyICJEb2N1bWVudGF0aW9uIGVuIGxpZ25lIgotCi0jOiBnaXQtZ3VpLnNoOjI3ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2Ci1tc2dpZCAiU2hvdyBTU0ggS2V5IgotbXNnc3RyICJNb250cmVyIGxhIGNsw6kgU1NIIgotCi0jOiBnaXQtZ3VpLnNoOjI4OTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKLW1zZ3N0ciAiIgotImVycmV1ciBmYXRhbGUgOiBwYXMgZCdpbmZvcyBzdXIgbGUgY2hlbWluICVzIDogRmljaGllciBvdSByw6lwZXJ0b2lyZSAiCi0iaW5leGlzdGFudCIKLQotIzogZ2l0LWd1aS5zaDoyOTI2Ci1tc2dpZCAiQ3VycmVudCBCcmFuY2g6IgotbXNnc3RyICJCcmFuY2hlIGNvdXJhbnRlIDoiCi0KLSM6IGdpdC1ndWkuc2g6Mjk0NwotbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCi1tc2dzdHIgIk1vZGlmcy4gaW5kZXjDqWVzIChwb3VyIGNvbW1pdCkiCi0KLSM6IGdpdC1ndWkuc2g6Mjk2NwotbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCi1tc2dzdHIgIk1vZGlmcy4gbm9uIGluZGV4w6llcyIKLQotIzogZ2l0LWd1aS5zaDozMDE3Ci1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKLW1zZ3N0ciAiSW5kZXhlciBtb2RpZnMuIgotCi0jOiBnaXQtZ3VpLnNoOjMwMzYgbGliL3RyYW5zcG9ydC50Y2w6MTA0IGxpYi90cmFuc3BvcnQudGNsOjE5MwotbXNnaWQgIlB1c2giCi1tc2dzdHIgIlBvdXNzZXIiCi0KLSM6IGdpdC1ndWkuc2g6MzA3MQotbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBpbml0aWFsIDoiCi0KLSM6IGdpdC1ndWkuc2g6MzA3MgotbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBjb3JyaWfDqSA6IgotCi0jOiBnaXQtZ3VpLnNoOjMwNzMKLW1zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBpbml0aWFsIGNvcnJpZ8OpIDoiCi0KLSM6IGdpdC1ndWkuc2g6MzA3NAotbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBkZSBmdXNpb24gY29ycmlnw6kgOiIKLQotIzogZ2l0LWd1aS5zaDozMDc1Ci1tc2dpZCAiTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBkZSBmdXNpb24gOiIKLQotIzogZ2l0LWd1aS5zaDozMDc2Ci1tc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCA6IgotCi0jOiBnaXQtZ3VpLnNoOjMxMjUgZ2l0LWd1aS5zaDozMjY3IGxpYi9jb25zb2xlLnRjbDo3MwotbXNnaWQgIkNvcHkgQWxsIgotbXNnc3RyICJDb3BpZXIgdG91dCIKLQotIzogZ2l0LWd1aS5zaDozMTQ5IGxpYi9ibGFtZS50Y2w6MTA0Ci1tc2dpZCAiRmlsZToiCi1tc2dzdHIgIkZpY2hpZXIgOiIKLQotIzogZ2l0LWd1aS5zaDozMjU1Ci1tc2dpZCAiUmVmcmVzaCIKLW1zZ3N0ciAiUmFmcmHDrmNoaXIiCi0KLSM6IGdpdC1ndWkuc2g6MzI3NgotbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKLW1zZ3N0ciAiRGltaW51ZXIgbGEgcG9saWNlIgotCi0jOiBnaXQtZ3VpLnNoOjMyODAKLW1zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCi1tc2dzdHIgIkFncmFuZGlyIGxhIHBvbGljZSIKLQotIzogZ2l0LWd1aS5zaDozMjg4IGxpYi9ibGFtZS50Y2w6MjgxCi1tc2dpZCAiRW5jb2RpbmciCi1tc2dzdHIgIkNvZGFnZSBkZXMgY2FyYWN0w6hyZXMiCi0KLSM6IGdpdC1ndWkuc2g6MzI5OQotbXNnaWQgIkFwcGx5L1JldmVyc2UgSHVuayIKLW1zZ3N0ciAiQXBwbGlxdWVyL0ludmVyc2VyIHNlY3Rpb24iCi0KLSM6IGdpdC1ndWkuc2g6MzMwNAotbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKLW1zZ3N0ciAiQXBwbGlxdWVyL0ludmVyc2VyIGxhIGxpZ25lIgotCi0jOiBnaXQtZ3VpLnNoOjMzMjMKLW1zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKLW1zZ3N0ciAiTGFuY2VyIGwnb3V0aWwgZGUgZnVzaW9uIgotCi0jOiBnaXQtZ3VpLnNoOjMzMjgKLW1zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCi1tc2dzdHIgIlV0aWxpc2VyIGxhIHZlcnNpb24gZGlzdGFudGUiCi0KLSM6IGdpdC1ndWkuc2g6MzMzMgotbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgotbXNnc3RyICJVdGlsaXNlciBsYSB2ZXJzaW9uIGxvY2FsZSIKLQotIzogZ2l0LWd1aS5zaDozMzM2Ci1tc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCi1tc2dzdHIgIlJldmVuaXIgw6AgbGEgdmVyc2lvbiBkZSBiYXNlIgotCi0jOiBnaXQtZ3VpLnNoOjMzNTQKLW1zZ2lkICJWaXN1YWxpemUgVGhlc2UgQ2hhbmdlcyBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJWb2lyIGxlcyBjaGFuZ21lbnRzIGRhbnMgbGUgc291cy1tb2R1bGUiCi0KLSM6IGdpdC1ndWkuc2g6MzM1OAotbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgIlZvaXIgbCdoaXN0b3JpcXVlIGRlIGxhIGJyYW5jaGUgY291cmFudGUgZHUgc291cy1tb2R1bGUiCi0KLSM6IGdpdC1ndWkuc2g6MzM2MgotbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiVm9pciBsJ2hpc3RvcmlxdWUgZGUgdG91dGVzIGxlcyBicmFuY2hlcyBkdSBzb3VzLW1vZHVsZSIKLQotIzogZ2l0LWd1aS5zaDozMzY3Ci1tc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJEw6ltYXJyZXIgZ2l0IGd1aSBkYW5zIGxlIHNvdXMtbW9kdWxlIgotCi0jOiBnaXQtZ3VpLnNoOjMzODkKLW1zZ2lkICJVbnN0YWdlIEh1bmsgRnJvbSBDb21taXQiCi1tc2dzdHIgIkTDqXNpbmRleGVyIGxhIHNlY3Rpb24iCi0KLSM6IGdpdC1ndWkuc2g6MzM5MQotbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCi1tc2dzdHIgIkTDqXNpbmRleGVyIGxhIGxpZ25lIGR1IGNvbW1pdCIKLQotIzogZ2l0LWd1aS5zaDozMzkzCi1tc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgotbXNnc3RyICJEw6lzaW5kZXhlciBsYSBsaWduZSIKLQotIzogZ2l0LWd1aS5zaDozMzk2Ci1tc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgotbXNnc3RyICJJbmRleGVyIGxhIHNlY3Rpb24iCi0KLSM6IGdpdC1ndWkuc2g6MzM5OAotbXNnaWQgIlN0YWdlIExpbmVzIEZvciBDb21taXQiCi1tc2dzdHIgIkluZGV4ZXIgbGVzIGxpZ25lcyIKLQotIzogZ2l0LWd1aS5zaDozNDAwCi1tc2dpZCAiU3RhZ2UgTGluZSBGb3IgQ29tbWl0IgotbXNnc3RyICJJbmRleGVyIGxhIGxpZ25lIgotCi0jOiBnaXQtZ3VpLnNoOjM0MjQKLW1zZ2lkICJJbml0aWFsaXppbmcuLi4iCi1tc2dzdHIgIkluaXRpYWxpc2F0aW9uLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjM1NDEKLSMsIHRjbC1mb3JtYXQKKyM6IGFkZC1wYXRjaC5jOjQwCiBtc2dpZCAiIgotIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIGluZGV4ZXIgY2V0dGUgc2VjdGlvblxuIgorIm4gLSBuZSBwYXMgaW5kZXhlciBjZXR0ZSBzZWN0aW9uXG4iCisicSAtIHF1aXR0ZXLCoDsgbmUgcGFzIGluZGV4ZXIgY2V0dGUgc2VjdGlvbiBuaSBsZXMgYXV0cmVzIHJlc3RhbnRlc1xuIgorImEgLSBpbmRleGVyIGNldHRlIHNlY3Rpb24gZXQgdG91dGVzIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllclxuIgorImQgLSBuZSBwYXMgaW5kZXhlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllclxuIgorCisjOiBhZGQtcGF0Y2guYzo1NCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJSZW1pc2VyIGxlIGNoYW5nZW1lbnQgZGUgbW9kZSBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBhZGQtcGF0Y2guYzo1NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzQKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJSZW1pc2VyIGxhIHN1cHByZXNzaW9uIFt5LG4scSxhLGQlcyw/XcKgPyAiCisKKyM6IGFkZC1wYXRjaC5jOjU2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJSZW1pc2VyIGNldHRlIHNlY3Rpb24gW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogYWRkLXBhdGNoLmM6NTgKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisic3Rhc2hpbmcuIgorbXNnc3RyICIiCisiU2kgbGUgcGF0Y2ggcydhcHBsaXF1ZSBwcm9wcmVtZW50LCBsYSBzZWN0aW9uIMOpZGl0w6llIHNlcmEgaW1tw6lkaWF0ZW1lbnQgIgorIm1hcnF1w6llIGNvbW1lIHJlbWlzw6llLiIKKworIzogYWRkLXBhdGNoLmM6NjEKK21zZ2lkICIiCisieSAtIHN0YXNoIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFzaCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkgLSByZW1pc2VyIGNldHRlIHNlY3Rpb25cbiIKKyJuIC0gbmUgcGFzIHJlbWlzZXIgY2V0dGUgc2VjdGlvblxuIgorInEgLSBxdWl0dGVywqA7IG5lIHBhcyByZW1pc2VyIGNldHRlIHNlY3Rpb24gbmkgbGVzIGF1dHJlcyByZXN0YW50ZXNcbiIKKyJhIC0gcmVtaXNlciBjZXR0ZSBzZWN0aW9uIGV0IHRvdXRlcyBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXJcbiIKKyJkIC0gbmUgcGFzIHJlbWlzZXIgY2V0dGUgc2VjdGlvbiBuaSBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXJcbiIKKworIzogYWRkLXBhdGNoLmM6NzcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJEw6lzaW5kZXhlciBsZSBjaGFuZ2VtZW50IGRlIG1vZGUgW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogYWRkLXBhdGNoLmM6NzggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM5CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJEw6lzaW5kZXhlciBsYSBzdXBwcmVzc2lvbiBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBhZGQtcGF0Y2guYzo3OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDAKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJEw6lzaW5kZXhlciBjZXR0ZSBzZWN0aW9uIFt5LG4scSxhLGQlcyw/XcKgPyAiCisKKyM6IGFkZC1wYXRjaC5jOjgxCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorInVuc3RhZ2luZy4iCittc2dzdHIgIiIKKyJTaSBsZSBwYXRjaCBzJ2FwcGxpcXVlIHByb3ByZW1lbnQsIGxhIHNlY3Rpb24gw6lkaXTDqWUgc2VyYSBpbW3DqWRpYXRlbWVudCAiCisibWFycXXDqWUgY29tbWUgZGVzaW5kZXjDqWUuIgorCisjOiBhZGQtcGF0Y2guYzo4NAorbXNnaWQgIiIKKyJ5IC0gdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHVuc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkgLSBkw6lzaW5kZXhlciBjZXR0ZSBzZWN0aW9uXG4iCisibiAtIG5lIHBhcyBkw6lzaW5kZXhlciBjZXR0ZSBzZWN0aW9uXG4iCisicSAtIHF1aXR0ZXLCoDsgbmUgcGFzIGTDqXNpbmRleGVyIGNldHRlIHNlY3Rpb24gbmkgbGVzIGF1dHJlcyByZXN0YW50ZXNcbiIKKyJhIC0gZMOpc2luZGV4ZXIgY2V0dGUgc2VjdGlvbiBldCB0b3V0ZXMgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyXG4iCisiZCAtIG5lIHBhcyBkw6lzaW5kZXhlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllclxuIgorCisjOiBhZGQtcGF0Y2guYzo5OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcHBsaXF1ZXIgbGUgY2hhbmdlbWVudCBkZSBtb2RlIMOgIGwnaW5kZXggW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogYWRkLXBhdGNoLmM6MTAwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwcGxpcXVlciBsYSBzdXBwcmVzc2lvbiDDoCBsJ2luZGV4IFt5LG4scSxhLGQlcyw/XcKgPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBwbGlxdWVyIGNldHRlIHNlY3Rpb24gw6AgbCdpbmRleCBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBhZGQtcGF0Y2guYzoxMDMgYWRkLXBhdGNoLmM6MTY4IGFkZC1wYXRjaC5jOjIxMQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJhcHBseWluZy4iCittc2dzdHIgIiIKKyJTaSBsZSBwYXRjaCBzJ2FwcGxpcXVlIHByb3ByZW1lbnQsIGxhIHNlY3Rpb24gw6lkaXTDqWUgc2VyYSBpbW3DqWRpYXRlbWVudCAiCisibWFycXXDqWUgY29tbWUgYXBwbGlxdcOpZS4iCisKKyM6IGFkZC1wYXRjaC5jOjEwNgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uXG4iCisibiAtIG5lIHBhcyBhcHBsaXF1ZXIgY2V0dGUgc2VjdGlvblxuIgorInEgLSBxdWl0dGVywqA7IG5lIHBhcyBhcHBsaXF1ZXIgY2V0dGUgc2VjdGlvbiBuaSBsZXMgYXV0cmVzIHJlc3RhbnRlc1xuIgorImEgLSBhcHBsaXF1ZXIgY2V0dGUgc2VjdGlvbiBldCB0b3V0ZXMgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyXG4iCisiZCAtIG5lIHBhcyBhcHBsaXF1ZXIgY2V0dGUgc2VjdGlvbiBuaSBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXJcbiIKKworIzogYWRkLXBhdGNoLmM6MTIxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYzCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFiYW5kb25uZXIgbGUgY2hhbmdlbWVudCBkZSBtb2RlIGRhbnMgbCdhcmJyZSBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjQKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQWJhbmRvbm5lciBsYSBzdXBwcmVzc2lvbiBkYW5zIGwnYXJicmUgW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogYWRkLXBhdGNoLmM6MTIzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1MAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBYmFuZG9ubmVyIGNldHRlIHNlY3Rpb24gZGFucyBsJ2FyYnJlIFt5LG4scSxhLGQlcyw/XcKgPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyNSBhZGQtcGF0Y2guYzoxNDcgYWRkLXBhdGNoLmM6MTkwCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorImRpc2NhcmRpbmcuIgorbXNnc3RyICIiCisiU2kgbGUgcGF0Y2ggcydhcHBsaXF1ZSBwcm9wcmVtZW50LCBsYSBzZWN0aW9uIMOpZGl0w6llIHNlcmEgaW1tw6lkaWF0ZW1lbnQgIgorIm1hcnF1w6llIGNvbW1lIMOpbGltaW7DqWUuIgorCisjOiBhZGQtcGF0Y2guYzoxMjggYWRkLXBhdGNoLmM6MTkzCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkgLSBzdXBwcmltZXIgY2V0dGUgc2VjdGlvblxuIgorIm4gLSBuZSBwYXMgc3VwcHJpbWVyIGNldHRlIHNlY3Rpb25cbiIKKyJxIC0gcXVpdHRlcsKgOyBuZSBwYXMgc3VwcHJpbWVyIGNldHRlIHNlY3Rpb24gbmkgbGVzIGF1dHJlcyByZXN0YW50ZXNcbiIKKyJhIC0gc3VwcHJpbWVyIGNldHRlIHNlY3Rpb24gZXQgdG91dGVzIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllclxuIgorImQgLSBuZSBwYXMgc3VwcHJpbWVyIGNldHRlIHNlY3Rpb24gbmkgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyXG4iCisKKyM6IGFkZC1wYXRjaC5jOjE0MyBhZGQtcGF0Y2guYzoxODYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUzCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisiQWJhbmRvbm5lciBsZSBjaGFuZ2VtZW50IGRlIG1vZGUgZGFucyBsJ2luZGV4IGV0IGwnYXJicmUgW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogYWRkLXBhdGNoLmM6MTQ0IGFkZC1wYXRjaC5jOjE4NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTQKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFiYW5kb25uZXIgbGEgc3VwcHJlc3Npb24gZGUgbCdpbmRleCBldCBkZSBsJ2FyYnJlIFt5LG4scSxhLGQlcyw/XcKgPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE0NSBhZGQtcGF0Y2guYzoxODggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIlN1cHByaW1lciBsYSBzZWN0aW9uIGRhbnMgbCdpbmRleCBldCBsJ2FyYnJlIGRlIHRyYXZhaWwgW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogYWRkLXBhdGNoLmM6MTUwCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIMOpbGltaW5lciBjZXR0ZSBzZWN0aW9uIGRlIGwnaW5kZXggZXQgZGUgbCdhcmJyZSBkZSB0cmF2YWlsXG4iCisibiAtIG5lIHBhcyDDqWxpbWluZXIgY2V0dGUgc2VjdGlvblxuIgorInEgLSBxdWl0dGVywqA7IG5lIHBhcyDDqWxpbWluZXIgY2V0dGUgc2VjdGlvbiBuaSBsZXMgYXV0cmVzIHJlc3RhbnRlc1xuIgorImEgLSDDqWxpbWluZXIgY2V0dGUgc2VjdGlvbiBldCB0b3V0ZXMgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyXG4iCisiZCAtIG5lIHBhcyDDqWxpbWluZXIgY2V0dGUgc2VjdGlvbiBuaSBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXJcbiIKKworIzogYWRkLXBhdGNoLmM6MTY0IGFkZC1wYXRjaC5jOjIwNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIkFwcGxpcXVlciBsZSBjaGFuZ2VtZW50IGRlIG1vZGUgZGFucyBsJ2luZGV4IGV0IGwnYXJicmUgZGUgdHJhdmFpbCBbeSxuLHEsYSxkIgorIiVzLD9dwqA/ICIKKworIzogYWRkLXBhdGNoLmM6MTY1IGFkZC1wYXRjaC5jOjIwOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTkKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIkFwcGxpcXVlciBsYSBzdXBwcmVzc2lvbiBkYW5zIGwnaW5kZXggZXQgbCdhcmJyZSBkZSB0cmF2YWlsIFt5LG4scSxhLGQiCisiJXMsP13CoD8gIgorCisjOiBhZGQtcGF0Y2guYzoxNjYgYWRkLXBhdGNoLmM6MjA5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIkFwcGxpcXVlciBsYSBzZWN0aW9uIMOgIGwnaW5kZXggZXQgbCdhcmJyZSBkZSB0cmF2YWlsIFt5LG4scSxhLGQlcyw/XcKgPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE3MQorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gYXBwbGlxdWVyIGNldHRlIHNlY3Rpb24gw6AgbCdpbmRleCBldCDDoCBsJ2FyYnJlIGRlIHRyYXZhaWxcbiIKKyJuIC0gbmUgcGFzIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uXG4iCisicSAtIHF1aXR0ZXLCoDsgbmUgcGFzIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBhdXRyZXMgcmVzdGFudGVzXG4iCisiYSAtIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uIGV0IHRvdXRlcyBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXJcbiIKKyJkIC0gbmUgcGFzIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllclxuIgorCisjOiBhZGQtcGF0Y2guYzoyMTQKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkgLSBhcHBsaXF1ZXIgY2V0dGUgc2VjdGlvbiDDoCBsJ2FyYnJlIGRlIHRyYXZhaWxcbiIKKyJuIC0gbmUgcGFzIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uXG4iCisicSAtIHF1aXR0ZXLCoDsgbmUgcGFzIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBhdXRyZXMgcmVzdGFudGVzXG4iCisiYSAtIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uIGV0IHRvdXRlcyBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXJcbiIKKyJkIC0gbmUgcGFzIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllclxuIgorCisjOiBhZGQtcGF0Y2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGwnZW50w6p0ZSBkZSBzZWN0aW9uICclLipzJyIKKworIzogYWRkLXBhdGNoLmM6MzM3IGFkZC1wYXRjaC5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBodW5rIGhlYWRlciAnJS4qcyciCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsJ2VudMOqdGUgY29sb3LDqSBkZSBzZWN0aW9uICclLipzJyIKKworIzogYWRkLXBhdGNoLmM6Mzk1Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGRpZmYiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsYSBkaWZmIgorCisjOiBhZGQtcGF0Y2guYzo0MTQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBkaWZmIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGEgZGlmZiBjb2xvcsOpZSIKKworIzogYWRkLXBhdGNoLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJyVzJyIKK21zZ3N0ciAiw6ljaGVjIHBvdXIgbGFuY2VyICclcyciCisKKyM6IGFkZC1wYXRjaC5jOjU4NworbXNnaWQgIm1pc21hdGNoZWQgb3V0cHV0IGZyb20gaW50ZXJhY3RpdmUuZGlmZkZpbHRlciIKK21zZ3N0ciAic29ydGllIHNhbnMgY29ycmVzcG9uZGFuY2UgZGVwdWlzIGludGVyYWN0aXZlLmRpZmZGaWx0ZXIiCisKKyM6IGFkZC1wYXRjaC5jOjU4OAorbXNnaWQgIiIKKyJZb3VyIGZpbHRlciBtdXN0IG1haW50YWluIGEgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZVxuIgorImJldHdlZW4gaXRzIGlucHV0IGFuZCBvdXRwdXQgbGluZXMuIgorbXNnc3RyICIiCisiVm90cmUgZmlsdHJlIGRvaXQgbWFpbnRlbmlyIHVuZSBjb3JyZXNwb25kYW5jZSB1bi1wb3VyLXVuXG4iCisiZW50cmUgbGVzIGxpZ25lcyBlbiBlbnRyw6llIGV0IGVuIHNvcnRpZS4iCisKKyM6IGFkZC1wYXRjaC5jOjc2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgY29udGV4dCBsaW5lICMlZCBpblxuIgorIiUuKnMiCittc2dzdHIgIiIKKyJsaWduZSBkZSBjb250ZXh0ZSBhdHRlbmR1ZSAjJWQgZGFuc1xuIgorIiUuKnMiCisKKyM6IGFkZC1wYXRjaC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaHVua3MgZG8gbm90IG92ZXJsYXA6XG4iCisiJS4qc1xuIgorIlx0ZG9lcyBub3QgZW5kIHdpdGg6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorImxlcyBzZWN0aW9ucyBuZSBzZSByZWNvdXZyZW50IHBhc8KgOlxuIgorIiUuKnNcbiIKKyJcdG5lIHNlIHRlcm1pbmUgcGFzIHBhcsKgOlxuIgorIiUuKnMiCisKKyM6IGFkZC1wYXRjaC5jOjEwNTIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTEyCittc2dpZCAiTWFudWFsIGh1bmsgZWRpdCBtb2RlIC0tIHNlZSBib3R0b20gZm9yIGEgcXVpY2sgZ3VpZGUuXG4iCittc2dzdHIgIiIKKyJNb2RlIGQnw6lkaXRpb24gbWFudWVsbGUgZGUgc2VjdGlvbiAtLSB2b2lyIGNpLWRlc3NvdXMgcG91ciB1biBndWlkZSByYXBpZGUuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjEwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlYyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKyItLS1cbiIKKyJQb3VyIMOpbGltaW5lciBsZXMgbGlnbmVzICclYycsIHJlbmRlei1sZXMgJyAnIChjb250ZXh0ZSkuXG4iCisiUG91ciDDqWxpbWluZXIgbGVzIGxpZ25lcyAnJWMnLCBlZmZhY2V6LWxlcy5cbiIKKyJMZXMgbGlnbmVzIGNvbW1lbsOnYW50IHBhciAlYyBzZXJvbnQgw6lsaW1pbsOpZXMuXG4iCisKKyMuIFRSQU5TTEFUT1JTOiAnaXQnIHJlZmVycyB0byB0aGUgcGF0Y2ggbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBtZXNzYWdlcy4KKyM6IGFkZC1wYXRjaC5jOjEwNzAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTI2Cittc2dpZCAiIgorIklmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlIGdpdmVuIGFuIG9wcG9ydHVuaXR5IHRvXG4iCisiZWRpdCBhZ2Fpbi4gIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgcmVtb3ZlZCwgdGhlbiB0aGUgZWRpdCBpc1xuIgorImFib3J0ZWQgYW5kIHRoZSBodW5rIGlzIGxlZnQgdW5jaGFuZ2VkLlxuIgorbXNnc3RyICIiCisiU2kgw6dhIG5lIHMnYXBwbGlxdWUgcGFzIHByb3ByZW1lbnQsIHZvdXMgYXVyZXogbGEgcG9zc2liaWxpdMOpIGRlXG4iCisibCfDqWRpdGVyIMOgIG5vdXZlYXUuIFNpIHRvdXRlcyBsZXMgbGlnbmVzIGRlIGxhIHNlY3Rpb24gc29udCBzdXBwcmltw6llcyxcbiIKKyJhbG9ycyBsJ8OpZGl0aW9uIHNlcmEgYWJhbmRvbm7DqWUgZXQgbGEgc2VjdGlvbiBjb25zZXJ2w6llLlxuIgorCisjOiBhZGQtcGF0Y2guYzoxMTAzCittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdlbnTDqnRlIGRlIHNlY3Rpb24iCisKKyM6IGFkZC1wYXRjaC5jOjExNDgKK21zZ2lkICInZ2l0IGFwcGx5IC0tY2FjaGVkJyBmYWlsZWQiCittc2dzdHIgIidnaXQgYXBwbHkgLS1jYWNoZWQnIGEgw6ljaG91w6kiCisKKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjLgorIy4gVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKyMuIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgdGhhdCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjOiBhZGQtcGF0Y2guYzoxMjE4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIzOQorbXNnaWQgIiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/ICIKK21zZ3N0ciAiIgorIlZvdHJlIHNlY3Rpb24gw6lkaXTDqWUgbmUgcydhcHBsaXF1ZSBwYXMuIEwnw6lkaXRlciDDoCBub3V2ZWF1IChcIm5vXCIgIgorImwnw6lsaW1pbmXCoCEpIFt5fG5dwqA/ICIKKworIzogYWRkLXBhdGNoLmM6MTI2MQorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4ISIKK21zZ3N0ciAiTGVzIHNlY3Rpb25zIHPDqWxlY3Rpb25uw6llcyBuZSBzJ2FwcGxpcXVlIHBhcyDDoCBsJ2luZGV4wqAhIgorCisjOiBhZGQtcGF0Y2guYzoxMjYyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MworbXNnaWQgIkFwcGx5IHRoZW0gdG8gdGhlIHdvcmt0cmVlIGFueXdheT8gIgorbXNnc3RyICJMZXMgYXBwbGlxdWVyIHF1YW5kIG3Dqm1lIMOgIGwnYXJicmUgZGUgdHJhdmFpbMKgPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyNjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQ2Cittc2dpZCAiTm90aGluZyB3YXMgYXBwbGllZC5cbiIKK21zZ3N0ciAiUmllbiBuJ2Egw6l0w6kgYXBwbGlxdcOpLlxuIgorCisjOiBhZGQtcGF0Y2guYzoxMzI2Cittc2dpZCAiIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiaiAtIGxhaXNzZXIgY2V0dGUgc2VjdGlvbiBub24gZMOpY2lkw6llIGV0IGFsbGVyIMOgIGxhIHN1aXZhbnRlIG5vbi1kw6ljaWTDqWVcbiIKKyJKIC0gbGFpc3NlciBjZXR0ZSBzZWN0aW9uIG5vbiBkw6ljaWTDqWUgZXQgYWxsZXIgw6AgbGEgc3VpdmFudGVcbiIKKyJrIC0gbGFpc3NlciBjZXR0ZSBzZWN0aW9uIG5vbiBkw6ljaWTDqWUgZXQgYWxsZXIgw6AgbGEgcHLDqWPDqWRlbnRlIG5vbi1kw6ljaWTDqWVcbiIKKyJLIC0gbGFpc3NlciBjZXR0ZSBzZWN0aW9uIG5vbiBkw6ljaWTDqWUgZXQgYWxsZXIgw6AgbGEgcHLDqWPDqWRlbnRlXG4iCisiZyAtIHPDqWxlY3Rpb25uZXIgdW5lIHNlY3Rpb24gZXQgcyd5IHJlbmRyZVxuIgorIi8gLSByZWNoZXJjaGVyIHVuZSBzZWN0aW9uIGNvcnJlc3BvbmRhbnQgw6AgdW5lIHJlZ2V4IGRvbm7DqWVcbiIKKyJzIC0gZMOpY291cGVyIGxhIHNlY3Rpb24gZW4gc2VjdGlvbnMgcGx1cyBwZXRpdGVzXG4iCisiZSAtIMOpZGl0ZXIgbWFudWVsbGVtZW50IGxhIHNlY3Rpb24gYWN0dWVsbGVcbiIKKyI/IC0gYWZmaWNoZXIgbCdhaWRlXG4iCisKKyM6IGFkZC1wYXRjaC5jOjE0NDcgYWRkLXBhdGNoLmM6MTQ1NworbXNnaWQgIk5vIHByZXZpb3VzIGh1bmsiCittc2dzdHIgIlBhcyBkZSBzZWN0aW9uIHByw6ljw6lkZW50ZSIKKworIzogYWRkLXBhdGNoLmM6MTQ1MiBhZGQtcGF0Y2guYzoxNDYyCittc2dpZCAiTm8gbmV4dCBodW5rIgorbXNnc3RyICJQYXMgZGUgc2VjdGlvbiBzdWl2YW50ZSIKKworIzogYWRkLXBhdGNoLmM6MTQ2OAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG8iCittc2dzdHIgIkF1Y3VuZSBhdXRyZSBzZWN0aW9uIMOgIGF0dGVpbmRyZSIKKworIzogYWRkLXBhdGNoLmM6MTQ3OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzcKK21zZ2lkICJnbyB0byB3aGljaCBodW5rICg8cmV0PiB0byBzZWUgbW9yZSk/ICIKK21zZ3N0ciAiYWxsZXIgw6AgcXVlbGxlIHNlY3Rpb24gKDxyZXQ+IHBvdXIgdm9pciBwbHVzKcKgPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE0ODAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc5Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuaz8gIgorbXNnc3RyICJhbGxlciDDoCBxdWVsbGUgc2VjdGlvbsKgPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXI6ICclcyciCittc2dzdHIgIk51bcOpcm8gaW52YWxpZGUgOiAnJXMnIgorCisjOiBhZGQtcGF0Y2guYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLiIKK21zZ3N0clswXSAiRMOpc29sw6ksICVkIHNldWxlIHNlY3Rpb24gZGlzcG9uaWJsZS4iCittc2dzdHJbMV0gIkTDqXNvbMOpLCBTZXVsZW1lbnQgJWQgc2VjdGlvbnMgZGlzcG9uaWJsZXMuIgorCisjOiBhZGQtcGF0Y2guYzoxNTA1Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoIgorbXNnc3RyICJhdWN1bmUgYXV0cmUgc2VjdGlvbiDDoCByZWNoZXJjaGVyIgorCisjOiBhZGQtcGF0Y2guYzoxNTExIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYyMworbXNnaWQgInNlYXJjaCBmb3IgcmVnZXg/ICIKK21zZ3N0ciAicmVjaGVyY2hlciBsYSByZWdleMKgPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzIgorbXNnc3RyICJSZWdleCBkZSByZWNoZXJjaGUgbWFsZm9ybcOpZSAlc8KgOiAlcyIKKworIzogYWRkLXBhdGNoLmM6MTU0MworbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybiIKK21zZ3N0ciAiQXVjdW5lIHNlY3Rpb24gbmUgY29ycmVzcG9uZCBhdSBtb3RpZiBkb25uw6kiCisKKyM6IGFkZC1wYXRjaC5jOjE1NTAKK21zZ2lkICJTb3JyeSwgY2Fubm90IHNwbGl0IHRoaXMgaHVuayIKK21zZ3N0ciAiRMOpc29sw6ksIGltcG9zc2libGUgZGUgZMOpY291cGVyIGNldHRlIHNlY3Rpb24iCisKKyM6IGFkZC1wYXRjaC5jOjE1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rcy4iCittc2dzdHIgIkTDqWNvdXDDqWUgZW4gJWQgc2VjdGlvbnMuIgorCisjOiBhZGQtcGF0Y2guYzoxNTU4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVuayIKK21zZ3N0ciAiRMOpc29sw6ksIGltcG9zc2libGUgZCfDqWRpdGVyIGNldHRlIHNlY3Rpb24iCisKKyM6IGFkZC1wYXRjaC5jOjE2MDkKK21zZ2lkICInZ2l0IGFwcGx5JyBmYWlsZWQiCittc2dzdHIgIidnaXQgYXBwbHknIGEgw6ljaG91w6kiCisKKyM6IGFkdmljZS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIlc2hpbnQ6ICUuKnMlc1xuIgorbXNnc3RyICIlc2FzdHVjZTogJS4qcyVzXG4iCisKKyM6IGFkdmljZS5jOjE2OAorbXNnaWQgIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBwaWNvcmVyIGNhciB2b3VzIGF2ZXogZGVzIGZpY2hpZXJzIG5vbiBmdXNpb25uw6lzLiIKKworIzogYWR2aWNlLmM6MTcwCittc2dpZCAiQ29tbWl0dGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIkltcG9zc2libGUgZGUgdmFsaWRlciBjYXIgdm91cyBhdmV6IGRlcyBmaWNoaWVycyBub24gZnVzaW9ubsOpcy4iCisKKyM6IGFkdmljZS5jOjE3MgorbXNnaWQgIk1lcmdpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGZ1c2lvbm5lciBjYXIgdm91cyBhdmV6IGRlcyBmaWNoaWVycyBub24gZnVzaW9ubsOpcy4iCisKKyM6IGFkdmljZS5jOjE3NAorbXNnaWQgIlB1bGxpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRpcmVyIGNhciB2b3VzIGF2ZXogZGVzIGZpY2hpZXJzIG5vbiBmdXNpb25uw6lzLiIKKworIzogYWR2aWNlLmM6MTc2Cittc2dpZCAiUmV2ZXJ0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2FubnVsZXIgY2FyIHZvdXMgYXZleiBkZXMgZmljaGllcnMgbm9uIGZ1c2lvbm7DqXMuIgorCisjOiBhZHZpY2UuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSXQgaXMgbm90IHBvc3NpYmxlIHRvICVzIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIlcyBuJ2VzdCBwYXMgcG9zc2libGUgY2FyIHZvdXMgYXZleiBkZXMgZmljaGllcnMgbm9uIGZ1c2lvbm7DqXMuIgorCisjOiBhZHZpY2UuYzoxODYKK21zZ2lkICIiCisiRml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIgorbXNnc3RyICIiCisiQ29ycmlnZXotbGVzIHB1aXMgbGFuY2V6ICdnaXQgYWRkL3JtIDxmaWNoaWVyPidcbiIKKyJzaSBuw6ljZXNzYWlyZSBwb3VyIG1hcnF1ZXIgbGEgcsOpc29sdXRpb24gZXQgdmFsaWRlci4iCisKKyM6IGFkdmljZS5jOjE5NAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiBhbiB1bnJlc29sdmVkIGNvbmZsaWN0LiIKK21zZ3N0ciAiQWJhbmRvbiDDoCBjYXVzZSBkZSBjb25mbGl0IG5vbiByw6lzb2x1LiIKKworIzogYWR2aWNlLmM6MTk5IGJ1aWx0aW4vbWVyZ2UuYzoxMzM1Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICJWb3VzIG4nYXZleiBwYXMgdGVybWluw6kgdm90cmUgZnVzaW9uIChNRVJHRV9IRUFEIGV4aXN0ZSkuIgorCisjOiBhZHZpY2UuYzoyMDEKK21zZ2lkICJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIG1lcmdpbmcuIgorbXNnc3RyICJWZXVpbGxleiB2YWxpZGVyIHZvcyBjaGFuZ2VtZW50cyBhdmFudCBkZSBmdXNpb25uZXIuIgorCisjOiBhZHZpY2UuYzoyMDIKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iCittc2dzdHIgIkFiYW5kb24gw6AgY2F1c2UgZCd1bmUgZnVzaW9uIG5vbiB0ZXJtaW7DqWUuIgorCisjOiBhZHZpY2UuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IHN3aXRjaGluZyB0byAnJXMnLlxuIgogIlxuIgotIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgotImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgotImJ5ICVzOlxuIgorIllvdSBhcmUgaW4gJ2RldGFjaGVkIEhFQUQnIHN0YXRlLiBZb3UgY2FuIGxvb2sgYXJvdW5kLCBtYWtlIGV4cGVyaW1lbnRhbFxuIgorImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKKyJzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgc3dpdGNoaW5nIGJhY2sgdG8gYSBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCB0byByZXRhaW4gY29tbWl0cyB5b3UgY3JlYXRlLCB5b3UgbWF5XG4iCisiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWMgd2l0aCB0aGUgc3dpdGNoIGNvbW1hbmQuIEV4YW1wbGU6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jIDxuZXctYnJhbmNoLW5hbWU+XG4iCisiXG4iCisiT3IgdW5kbyB0aGlzIG9wZXJhdGlvbiB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtXG4iCisiXG4iCisiVHVybiBvZmYgdGhpcyBhZHZpY2UgYnkgc2V0dGluZyBjb25maWcgdmFyaWFibGUgYWR2aWNlLmRldGFjaGVkSGVhZCB0byAiCisiZmFsc2VcbiIKICJcbiIKIG1zZ3N0ciAiIgotIkRlcyBwcm9ibMOobWVzIGQnZW52aXJvbm5lbWVudCBzb250IHBvc3NpYmxlcy5cbiIKKyJOb3RlwqA6IGJhc2N1bGVtZW50IHN1ciAnJXMnLlxuIgogIlxuIgotIkxlcyB2YXJpYWJsZXMgZCdlbnZpcm9ubmVtZW50IHN1aXZhbnRlcyBzZXJvbnRcbiIKLSJwcm9iYWJsZW1lbnQgaWdub3LDqWVzIHBhciB0b3VzIGxlc1xuIgotInNvdXMtcHJvY2Vzc3VzIGRlIEdpdCBsYW5jw6lzIHBhciAlc1xuIgorIlZvdXMgw6p0ZXMgZGFucyBsJ8OpdGF0IMKrwqBIRUFEIGTDqXRhY2jDqWXCoMK7LiBWb3VzIHBvdXZleiB2aXNpdGVyLCBmYWlyZSBkZXMgIgorIm1vZGlmaWNhdGlvbnNcbiIKKyJleHDDqXJpbWVudGFsZXMgZXQgbGVzIHZhbGlkZXIuIElsIHZvdXMgc3VmZml0IGRlIGZhaXJlIHVuIGF1dHJlIGJhc2N1bGVtZW50ICIKKyJwb3VyXG4iCisiYWJhbmRvbm5lciBsZXMgY29tbWl0cyBxdWUgdm91cyBmYWl0ZXMgZGFucyBjZXQgw6l0YXQgc2FucyBpbXBhY3RlciBsZXMgIgorImF1dHJlcyBicmFuY2hlc1xuIgorIlxuIgorIlNpIHZvdXMgdm91bGV6IGNyw6llciB1bmUgbm91dmVsbGUgYnJhbmNoZSBwb3VyIGNvbnNlcnZlciBsZXMgY29tbWl0cyBxdWUgIgorInZvdXMgY3LDqWV6LFxuIgorImlsIHZvdXMgc3VmZml0IGQndXRpbGlzZXIgbCdvcHRpb24gLWMgZGUgbGEgY29tbWFuZGUgc3dpdGNoIGNvbW1lIGNlY2nCoDpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPG5vbS1kZS1sYS1ub3V2ZWxsZS1icmFuY2hlPlxuIgorIlxuIgorIk91IGFubnVsZXIgY2V0dGUgb3DDqXJhdGlvbiBhdmVjwqA6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyJEw6lzYWN0aXZleiBjZSBjb25zZWlsIGVuIHJlbnNlaWduYW50IGxhIHZhcmlhYmxlIGRlIGNvbmZpZ3VyYXRpb24gYWR2aWNlLiIKKyJkZXRhY2hlZEhlYWQgw6AgZmFsc2VcbiIKICJcbiIKIAotIzogZ2l0LWd1aS5zaDozNTcwCisjOiBhbGlhcy5jOjUwCittc2dpZCAiY21kbGluZSBlbmRzIHdpdGggXFwiCittc2dzdHIgImNtZGxpbmUgc2UgdGVybWluZSBwYXIgXFwiCisKKyM6IGFsaWFzLmM6NTEKK21zZ2lkICJ1bmNsb3NlZCBxdW90ZSIKK21zZ3N0ciAiY2l0YXRpb24gbm9uIGZlcm3DqWUiCisKKyM6IGFwcGx5LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciCittc2dzdHIgIm9wdGlvbiBkJ2VzcGFjZSBub24gcmVjb25udWUgJyVzJyIKKworIzogYXBwbHkuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIm9wdGlvbiBkJ2lnbm9yYW5jZSBkJ2VzcGFjZSBub24gcmVjb25udWUgJyVzJyIKKworIzogYXBwbHkuYzoxMzUKK21zZ2lkICItLXJlamVjdCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1yZWplY3QgZXQgLS0zd2F5IG5lIHBldXZlbnQgcGFzIMOqdHJlIHV0aWxpc8OpcyBlbnNlbWJsZS4iCisKKyM6IGFwcGx5LmM6MTM3Cittc2dpZCAiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tY2FjaGVkIGV0IC0tM3dheSBuZSBwZXV2ZW50IHBhcyDDqnRyZSB1dGlsaXPDqXMgZW5zZW1ibGUuIgorCisjOiBhcHBseS5jOjE0MAorbXNnaWQgIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS0zd2F5IGhvcnMgZCd1biBkw6lww7R0IgorCisjOiBhcHBseS5jOjE1MQorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0taW5kZXggaG9ycyBkJ3VuIGTDqXDDtHQiCisKKyM6IGFwcGx5LmM6MTU0Cittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tY2FjaGVkIGhvcnMgZCd1biBkw6lww7R0IgorCisjOiBhcHBseS5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHByw6lwYXJlciBsYSByZWdleHAgZCdob3JvZGF0YWdlICVzIgorCisjOiBhcHBseS5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgInJlZ2V4ZWMgYSByZXRvdXJuw6kgJWQgcG91ciBsJ2VudHLDqWUgOiAlcyIKKworIzogYXBwbHkuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAibm9tIGRlIGZpY2hpZXIgZHUgcGF0Y2ggaW50cm91dmFibGUgw6AgbGEgbGlnbmUgJWQiCisKKyM6IGFwcGx5LmM6OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseSA6IG1hdXZhaXMgZm9ybWF0IGRlIGdpdC1kaWZmIC0gL2Rldi9udWxsIGF0dGVuZHUsICVzIHRyb3V2w6kgw6AgbGEgIgorImxpZ25lICVkIgorCisjOiBhcHBseS5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseSA6IG1hdXZhaXMgZm9ybWF0IGRlIGdpdC1kaWZmIC0gbm91dmVhdSBub20gZGUgZmljaGllciBpbmNvbnNpc3RhbnQgIgorIsOgIGxhIGxpZ25lICVkIgorCisjOiBhcHBseS5jOjkyOQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseSA6IG1hdXZhaXMgZm9ybWF0IGRlIGdpdC1kaWZmIC0gYW5jaWVuIG5vbSBkZSBmaWNoaWVyIGluY29uc2lzdGFudCAiCisiw6AgbGEgbGlnbmUgJWQiCisKKyM6IGFwcGx5LmM6OTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHkgOiBtYXV2YWlzIGZvcm1hdCBkZSBnaXQtZGlmZiAtIC9kZXYvbnVsbCBhdHRlbmR1IMOgIGxhIGxpZ25lICVkIgorCisjOiBhcHBseS5jOjk2MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgb24gbGluZSAlZDogJXMiCittc2dzdHIgIm1vZGUgaW52YWxpZGUgZGFucyBsYSBsaWduZSAlZMKgOiAlcyIKKworIzogYXBwbHkuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgImluY29uc2lzdGVudCBoZWFkZXIgbGluZXMgJWQgYW5kICVkIgorbXNnc3RyICJsaWduZXMgZCdlbnTDqnRlIGluY29uc2lzdGFudGVzICVkIGV0ICVkIgorCisjOiBhcHBseS5jOjEzNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAiIgorImluZm9ybWF0aW9uIGRlIG5vbSBkZSBmaWNoaWVyIG1hbnF1YW50ZSBkYW5zIGwnZW4tdMOqdGUgZGUgZ2l0IGRpZmYgbG9ycyBkZSAiCisibGEgc3VwcHJlc3Npb24gZGUgJWQgY29tcG9zYW50IGRlIHByw6lmaXhlIGRlIGNoZW1pbiAobGlnbmUgJWQpIgorbXNnc3RyWzFdICIiCisiaW5mb3JtYXRpb24gZGUgbm9tIGRlIGZpY2hpZXIgbWFucXVhbnRlIGRhbnMgbCdlbi10w6p0ZSBkZSBnaXQgZGlmZiBsb3JzIGRlICIKKyJsYSBzdXBwcmVzc2lvbiBkZSAlZCBjb21wb3NhbnRzIGRlIHByw6lmaXhlIGRlIGNoZW1pbiAobGlnbmUgJWQpIgorCisjOiBhcHBseS5jOjEzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIChsaW5lICVkKSIKK21zZ3N0ciAiIgorImluZm9ybWF0aW9uIGRlIG5vbSBkZSBmaWNoaWVyIG1hbnF1YW50ZSBkYW5zIGwnZW4tdMOqdGUgZGUgZ2l0IGRpZmYgKGxpZ25lICVkKSIKKworIzogYXBwbHkuYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAicmVjb21wdGFnZSA6IGxpZ25lIGluYXR0ZW5kdWUgOiAlLipzIgorCisjOiBhcHBseS5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiZnJhZ21lbnQgZGUgcGF0Y2ggc2FucyBlbi10w6p0ZSDDoCBsYSBsaWduZSAlZCA6ICUuKnMiCisKKyM6IGFwcGx5LmM6MTc1MworbXNnaWQgIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJsZSBub3V2ZWF1IGZpY2hpZXIgZMOpcGVuZCBkZSBjb250ZW51cyBhbmNpZW5zIgorCisjOiBhcHBseS5jOjE3NTUKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJsZSBmaWNoaWVyIHN1cHByaW3DqSBhIGVuY29yZSBkdSBjb250ZW51IgorCisjOiBhcHBseS5jOjE3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJwYXRjaCBjb3Jyb21wdSDDoCBsYSBsaWduZSAlZCIKKworIzogYXBwbHkuYzoxODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJsZSBub3V2ZWF1IGZpY2hpZXIgJXMgZMOpcGVuZCBkZSBjb250ZW51cyBhbmNpZW5zIgorCisjOiBhcHBseS5jOjE4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAibGUgZmljaGllciBzdXBwcmltw6kgJXMgYSBlbmNvcmUgZHUgY29udGVudSIKKworIzogYXBwbHkuYzoxODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIioqIHdhcm5pbmc6IGZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiCittc2dzdHIgIioqIGF0dGVudGlvbiA6IGxlIGZpY2hpZXIgJXMgZGV2aWVudCB2aWRlIG1haXMgbidlc3QgcGFzIHN1cHByaW3DqSIKKworIzogYXBwbHkuYzoxOTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgInBhdGNoIGJpbmFpcmUgY29ycm9tcHUgw6AgbGEgbGlnbmUgJWQgOiAlLipzIgorCisjOiBhcHBseS5jOjIwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJwYXRjaCBiaW5haXJlIG5vbiByZWNvbm51IMOgIGxhIGxpZ25lICVkIgorCisjOiBhcHBseS5jOjIxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIKK21zZ3N0ciAicGF0Y2ggdG90YWxlbWVudCBpbmNvbXByw6loZW5zaWJsZSDDoCBsYSBsaWduZSAlZCIKKworIzogYXBwbHkuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImxlY3R1cmUgZHUgbGllbiBzeW1ib2xpcXVlICVzIGltcG9zc2libGUiCisKKyM6IGFwcGx5LmM6MjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBvciByZWFkICVzIgorbXNnc3RyICJvdXZlcnR1cmUgb3UgbGVjdHVyZSBkZSAlcyBpbXBvc3NpYmxlIgorCisjOiBhcHBseS5jOjI5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydCBvZiBsaW5lOiAnJWMnIgorbXNnc3RyICJkw6lidXQgZGUgbGlnbmUgaW52YWxpZGUgOiAnJWMnIgorCisjOiBhcHBseS5jOjMwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICJMYSBzZWN0aW9uIG7CsCVkIGEgcsOpdXNzaSDDoCBsYSBsaWduZSAlZCAob2Zmc2V0ICVkIGxpZ25lKS4iCittc2dzdHJbMV0gIkxhIHNlY3Rpb24gbsKwJWQgYSByw6l1c3NpIMOgIGxhIGxpZ25lICVkIChvZmZzZXQgJWQgbGlnbmVzKS4iCisKKyM6IGFwcGx5LmM6MzA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICJDb250ZXh0ZSByw6lkdWl0IMOgICglbGQvJWxkKSBwb3VyIGFwcGxpcXVlciBsZSBmcmFnbWVudCDDoCBsYSBsaWduZSAlZCIKKworIzogYXBwbHkuYzozMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyJwZW5kYW50IGxhIHJlY2hlcmNoZSBkZSA6XG4iCisiJS4qcyIKKworIzogYXBwbHkuYzozMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgImRvbm7DqWVzIGRlIHBhdGNoIGJpbmFpcmUgbWFucXVhbnRlcyBwb3VyICclcyciCisKKyM6IGFwcGx5LmM6MzEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmV2ZXJzZS1hcHBseSBhIGJpbmFyeSBwYXRjaCB3aXRob3V0IHRoZSByZXZlcnNlIGh1bmsgdG8gJyVzJyIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZCdhcHBsaXF1ZXIgbCdpbnZlcnNlIGQndW4gcGF0Y2ggYmluYWlyZSDDoCAnJXMnIHNhbnMgbGEgc2VjdGlvbiAiCisiaW52ZXJzZSIKKworIzogYXBwbHkuYzozMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhcHBseSBiaW5hcnkgcGF0Y2ggdG8gJyVzJyB3aXRob3V0IGZ1bGwgaW5kZXggbGluZSIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZCdhcHBsaXF1ZXIgdW4gcGF0Y2ggYmluYWlyZSDDoCAnJXMnIHNhbnMgbGEgbGlnbmUgY29tcGzDqHRlIGQnaW5kZXgiCisKKyM6IGFwcGx5LmM6MzE2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIHBhdGNoIGFwcGxpZXMgdG8gJyVzJyAoJXMpLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBjb250ZW50cy4iCittc2dzdHIgIiIKKyJsZSBwYXRjaCBzJ2FwcGxpcXVlIMOgICclcycgKCVzKSwgY2UgcXVpIG5lIGNvcnJlc3BvbmQgcGFzIGF1IGNvbnRlbnUgYWN0dWVsLiIKKworIzogYXBwbHkuYzozMTcxCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBwYXRjaCBhcHBsaWVzIHRvIGFuIGVtcHR5ICclcycgYnV0IGl0IGlzIG5vdCBlbXB0eSIKK21zZ3N0ciAibGUgcGF0Y2ggcydhcHBsaXF1ZSDDoCB1biAnJXMnIHZpZGUgbWFpcyBjZSBuJ2VzdCBwYXMgdmlkZSIKKworIzogYXBwbHkuYzozMTg5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBuZWNlc3NhcnkgcG9zdGltYWdlICVzIGZvciAnJXMnIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICJsJ2ltYWdlIHBvc3TDqXJpZXVyZSBuw6ljZXNzYWlyZSAlcyBwb3VyICclcycgbmUgcGV1dCBwYXMgw6p0cmUgbHVlIgorCisjOiBhcHBseS5jOjMyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgImxlIHBhdGNoIGJpbmFpcmUgbmUgcydhcHBsaXF1ZSBwYXIgY29ycmVjdGVtZW50IMOgICclcyciCisKKyM6IGFwcGx5LmM6MzIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKK21zZ3N0ciAiIgorImxlIHBhdGNoIGJpbmFpcmUgc3VyICclcycgY3LDqWUgdW4gcsOpc3VsdGF0IGluY29ycmVjdCAoJXMgYXR0ZW5kdSwgbWFpcyAlcyAiCisidHJvdXbDqSkiCisKKyM6IGFwcGx5LmM6MzIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIKK21zZ3N0ciAibGUgcGF0Y2ggYSDDqWNob3XDqSA6ICVzOiVsZCIKKworIzogYXBwbHkuYzozMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAiZXh0cmFjdGlvbiBkZSAlcyBpbXBvc3NpYmxlIgorCisjOiBhcHBseS5jOjM0MDUgYXBwbHkuYzozNDE2IGFwcGx5LmM6MzQ2MiBtaWR4LmM6NjEgc2V0dXAuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXMiCittc2dzdHIgIsOpY2hlYyBkZSBsYSBsZWN0dXJlIGRlICVzIgorCisjOiBhcHBseS5jOjM0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBmcm9tICclcycgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAibGVjdHVyZSBkZXB1aXMgJyVzJyBhdS1kZWzDoCBkJ3VuIGxpZW4gc3ltYm9saXF1ZSIKKworIzogYXBwbHkuYzozNDQyIGFwcGx5LmM6MzY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAibGUgY2hlbWluICVzIGEgw6l0w6kgcmVub21tw6kvc3VwcHJpbcOpIgorCisjOiBhcHBseS5jOjM1MjggYXBwbHkuYzozNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiJXMgOiBuJ2V4aXN0ZSBwYXMgZGFucyBsJ2luZGV4IgorCisjOiBhcHBseS5jOjM1MzcgYXBwbHkuYzozNzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXMgOiBuZSBjb3JyZXNwb25kIHBhcyDDoCBsJ2luZGV4IgorCisjOiBhcHBseS5jOjM1NzIKK21zZ2lkICJyZXBvc2l0b3J5IGxhY2tzIHRoZSBuZWNlc3NhcnkgYmxvYiB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisibGUgZMOpcMO0dCBuJ2EgcGFzIGxlcyBibG9icyBuw6ljZXNzYWlyZXMgcG91ciB1biByZXRvdXIgw6AgdW5lIGZ1c2lvbiDDoCAzICIKKyJwb2ludHMuIgorCisjOiBhcHBseS5jOjM1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHRocmVlLXdheSBtZXJnZS4uLlxuIgorbXNnc3RyICJSZXRvdXIgw6AgdW5lIGZ1c2lvbiDDoCAzIHBvaW50c+KAplxuIgorCisjOiBhcHBseS5jOjM1OTEgYXBwbHkuYzozNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsZSBjb250ZW51IGFjdHVlbCBkZSAnJXMnIgorCisjOiBhcHBseS5jOjM2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZhbGwgYmFjayBvbiB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiw4ljaGVjIGR1IHJldG91ciDDoCB1bmUgZnVzaW9uIMOgIDMgcG9pbnRz4oCmXG4iCisKKyM6IGFwcGx5LmM6MzYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgd2l0aCBjb25mbGljdHMuXG4iCittc2dzdHIgIlBhdGNoICVzIGFwcGxpcXXDqSBhdmVjIGRlcyBjb25mbGl0cy5cbiIKKworIzogYXBwbHkuYzozNjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICJQYXRjaCAlcyBhcHBsaXF1w6kgcHJvcHJlbWVudC5cbiIKKworIzogYXBwbHkuYzozNjUyCittc2dpZCAicmVtb3ZhbCBwYXRjaCBsZWF2ZXMgZmlsZSBjb250ZW50cyIKK21zZ3N0ciAibGUgcGF0Y2ggZGUgc3VwcHJlc3Npb24gbGFpc3NlIHVuIGNvbnRlbnUgZGFucyBsZSBmaWNoaWVyIgorCisjOiBhcHBseS5jOjM3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiVzIDogdHlwZSBlcnJvbsOpIgorCisjOiBhcHBseS5jOjM3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvIgorbXNnc3RyICIlcyBlc3QgZGUgdHlwZSAlbywgbWFpcyAlbyBhdHRlbmR1IgorCisjOiBhcHBseS5jOjM4NzggYXBwbHkuYzozODgwIHJlYWQtY2FjaGUuYzo4MzAgcmVhZC1jYWNoZS5jOjg1NgorIzogcmVhZC1jYWNoZS5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXRoICclcyciCittc2dzdHIgImNoZW1pbiBpbnZhbGlkZSAnJXMnIgorCisjOiBhcHBseS5jOjM5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IgorbXNnc3RyICIlcyA6IGV4aXN0ZSBkw6lqw6AgZGFucyBsJ2luZGV4IgorCisjOiBhcHBseS5jOjM5MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlcyA6IGV4aXN0ZSBkw6lqw6AgZGFucyBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBhcHBseS5jOjM5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICJsZSBub3V2ZWF1IG1vZGUgKCVvKSBkZSAlcyBuZSBjb3JyZXNwb25kIHBhcyDDoCBsJ2FuY2llbiBtb2RlICglbykiCisKKyM6IGFwcGx5LmM6Mzk2NAorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykgb2YgJXMiCittc2dzdHIgIiIKKyJsZSBub3V2ZWF1IG1vZGUgKCVvKSBkZSAlcyBuZSBjb3JyZXNwb25kIHBhcyDDoCBsJ2FuY2llbiBtb2RlICglbykgZGUgJXMiCisKKyM6IGFwcGx5LmM6Mzk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAibGUgZmljaGllciBhZmZlY3TDqSAnJXMnIGVzdCBhdS1kZWzDoCBkJ3VuIGxpZW4gc3ltYm9saXF1ZSIKKworIzogYXBwbHkuYzozOTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiJXMgOiBsZSBwYXRjaCBuZSBzJ2FwcGxpcXVlIHBhcyIKKworIzogYXBwbHkuYzo0MDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHBhdGNoICVzLi4uIgorbXNnc3RyICJWw6lyaWZpY2F0aW9uIGR1IHBhdGNoICVzLi4uIgorCisjOiBhcHBseS5jOjQwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorImwnaW5mb3JtYXRpb24gc2hhMSBlc3QgbWFucXVhbnRlIG91IGludXRpbGlzYWJsZSBwb3VyIGxlIHNvdXMtbW9kdWxlICVzIgorCisjOiBhcHBseS5jOjQxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9kZSBjaGFuZ2UgZm9yICVzLCB3aGljaCBpcyBub3QgaW4gY3VycmVudCBIRUFEIgorbXNnc3RyICJsZSBtb2RlIGNoYW5nZSBwb3VyICVzLCBxdWkgbidlc3QgcGFzIGRhbnMgbGEgSEVBRCBhY3R1ZWxsZSIKKworIzogYXBwbHkuYzo0MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzICglcykuIgorbXNnc3RyICJsJ2luZm9ybWF0aW9uIGRlIHNoYTEgZXN0IG1hbnF1YW50ZSBvdSBpbnV0aWxpc2FibGUgKCVzKS4iCisKKyM6IGFwcGx5LmM6NDExNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2Fqb3V0ZXIgJXMgw6AgbCdpbmRleCB0ZW1wb3JhaXJlIgorCisjOiBhcHBseS5jOjQxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRlbXBvcmFyeSBpbmRleCB0byAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbCdpbmRleCB0ZW1wb3JhaXJlIGRhbnMgJXMiCisKKyM6IGFwcGx5LmM6NDI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiCittc2dzdHIgInN1cHByZXNzaW9uIGRlICVzIGRhbnMgbCdpbmRleCBpbXBvc3NpYmxlIgorCisjOiBhcHBseS5jOjQyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICJwYXRjaCBjb3Jyb21wdSBwb3VyIGxlIHNvdXMtbW9kdWxlICVzIgorCisjOiBhcHBseS5jOjQzMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgInN0YXQgZHUgZmljaGllciBub3V2ZWxsZW1lbnQgY3LDqcOpICclcycgaW1wb3NzaWJsZSIKKworIzogYXBwbHkuYzo0MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICIiCisiY3LDqWF0aW9uIGR1IG1hZ2FzaW4gZGUgc3RvY2thZ2UgcG91ciBsZSBmaWNoaWVyIG5vdXZlbGxlbWVudCBjcsOpw6kgJXMgIgorImltcG9zc2libGUiCisKKyM6IGFwcGx5LmM6NDMxNiBhcHBseS5jOjQ0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiCittc2dzdHIgImFqb3V0IGRlIGwnw6lsw6ltZW50IGRlIGNhY2hlICVzIGltcG9zc2libGUiCisKKyM6IGFwcGx5LmM6NDM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnw6ljcml0dXJlIGRhbnMgJyVzJyIKKworIzogYXBwbHkuYzo0MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICJmZXJtZXR1cmUgZHUgZmljaGllciAnJXMnIgorCisjOiBhcHBseS5jOjQ0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICLDqWNyaXR1cmUgZHUgZmljaGllciAnJXMnIG1vZGUgJW8gaW1wb3NzaWJsZSIKKworIzogYXBwbHkuYzo0NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIlBhdGNoICVzIGFwcGxpcXXDqSBwcm9wcmVtZW50LiIKKworIzogYXBwbHkuYzo0NTM5Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgImVycmV1ciBpbnRlcm5lIgorCisjOiBhcHBseS5jOjQ1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0Li4uIgorbXNnaWRfcGx1cmFsICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3RzLi4uIgorbXNnc3RyWzBdICJBcHBsaWNhdGlvbiBkdSBwYXRjaCAlJXMgYXZlYyAlZCByZWpldC4uLiIKK21zZ3N0clsxXSAiQXBwbGljYXRpb24gZHUgcGF0Y2ggJSVzIGF2ZWMgJWQgcmVqZXRzLi4uIgorCisjOiBhcHBseS5jOjQ1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICJ0cm9uY2F0dXJlIGR1IG5vbSBkZSBmaWNoaWVyIC5yZWogZW4gJS4qcy5yZWoiCisKKyM6IGFwcGx5LmM6NDU2MSBidWlsdGluL2ZldGNoLmM6OTAxIGJ1aWx0aW4vZmV0Y2guYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyICVzIgorCisjOiBhcHBseS5jOjQ1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAiU2VjdGlvbiBuwrAlZCBhcHBsaXF1w6llIHByb3ByZW1lbnQuIgorCisjOiBhcHBseS5jOjQ1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICJTZWN0aW9uIG7CsCVkIHJlamV0w6llLiIKKworIzogYXBwbHkuYzo0Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgcGF0Y2ggJyVzJy4iCittc2dzdHIgIkNoZW1pbiAnJXMnIG5vbiB0cmFpdMOpLiIKKworIzogYXBwbHkuYzo0NzA2Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICJlbnRyw6llIG5vbiByZWNvbm51ZSIKKworIzogYXBwbHkuYzo0NzI2Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAibGVjdHVyZSBkdSBmaWNoaWVyIGQnaW5kZXggaW1wb3NzaWJsZSIKKworIzogYXBwbHkuYzo0ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgIm91dmVydHVyZSBpbXBvc3NpYmxlIGR1IHBhdGNoICclcyfCoDolcyIKKworIzogYXBwbHkuYzo0OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIiVkIGVycmV1ciBkJ2VzcGFjZSBpZ25vcsOpZSIKK21zZ3N0clsxXSAiJWQgZXJyZXVycyBkJ2VzcGFjZSBpZ25vcsOpZXMiCisKKyM6IGFwcGx5LmM6NDkxNiBhcHBseS5jOjQ5MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQgbGlnbmUgYSBham91dMOpIGRlcyBlcnJldXJzIGQnZXNwYWNlLiIKK21zZ3N0clsxXSAiJWQgbGlnbmVzIG9udCBham91dMOpIGRlcyBlcnJldXJzIGQnZXNwYWNlLiIKKworIzogYXBwbHkuYzo0OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIGxpZ25lIGFqb3V0w6llIGFwcsOocyBjb3JyZWN0aW9uIGRlcyBlcnJldXJzIGQnZXNwYWNlLiIKK21zZ3N0clsxXSAiJWQgbGlnbmVzIGFqb3V0w6llcyBhcHLDqHMgY29ycmVjdGlvbiBkZXMgZXJyZXVycyBkJ2VzcGFjZS4iCisKKyM6IGFwcGx5LmM6NDk0MCBidWlsdGluL2FkZC5jOjYxMiBidWlsdGluL212LmM6MzAxIGJ1aWx0aW4vcm0uYzo0MDYKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIkltcG9zc2libGUgZCfDqWNyaXJlIGxlIG5vdXZlYXUgZmljaGllciBkJ2luZGV4IgorCisjOiBhcHBseS5jOjQ5NjgKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJuZSBwYXMgYXBwbGlxdWVyIGxlcyBtb2RpZmljYXRpb25zIHF1aSBjb3JyZXNwb25kZW50IGF1IGNoZW1pbiBkb25uw6kiCisKKyM6IGFwcGx5LmM6NDk3MQorbXNnaWQgImFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgImFwcGxpcXVlciBsZXMgbW9kaWZpY2F0aW9ucyBxdWkgY29ycmVzcG9uZGVudCBhdSBjaGVtaW4gZG9ubsOpIgorCisjOiBhcHBseS5jOjQ5NzMgYnVpbHRpbi9hbS5jOjIyNjAKK21zZ2lkICJudW0iCittc2dzdHIgIm51bSIKKworIzogYXBwbHkuYzo0OTc0Cittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgInN1cHByaW1lciA8bnVtPiBiYXJyZXMgb2JsaXF1ZXMgZGVzIGNoZW1pbnMgdHJhZGl0aW9ubmVscyBkZSBkaWZmIgorCisjOiBhcHBseS5jOjQ5NzcKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICJpZ25vcmVyIGxlcyBhZGRpdGlvbnMgcsOpYWxpc8OpZXMgcGFyIGxlIHBhdGNoIgorCisjOiBhcHBseS5jOjQ5NzkKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiCittc2dzdHIgImF1IGxpZXUgZCdhcHBsaXF1ZXIgbGUgcGF0Y2gsIGFmZmljaGVyIGxlIGRpZmZzdGF0IGRlIGwnZW50csOpZSIKKworIzogYXBwbHkuYzo0OTgzCittc2dpZCAic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAiIgorImFmZmljaGVyIGxlIG5vbWJyZSBkZSBsaWduZXMgYWpvdXTDqWVzIGV0IHN1cHByaW3DqWVzIGVuIG5vdGF0aW9uIGTDqWNpbWFsZSIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiYXUgbGlldSBkJ2FwcGxpcXVlciBsZSBwYXRjaCwgYWZmaWNoZXIgdW4gcsOpc3Vtw6kgZGUgbCdlbnRyw6llIgorCisjOiBhcHBseS5jOjQ5ODcKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIgorbXNnc3RyICJhdSBsaWV1IGQnYXBwbGlxdWVyIGxlIHBhdGNoLCB2b2lyIHNpIGxlIHBhdGNoIGVzdCBhcHBsaWNhYmxlIgorCisjOiBhcHBseS5jOjQ5ODkKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgInMnYXNzdXJlciBxdWUgbGUgcGF0Y2ggZXN0IGFwcGxpY2FibGUgc3VyIGwnaW5kZXggYWN0dWVsIgorCisjOiBhcHBseS5jOjQ5OTEKK21zZ2lkICJtYXJrIG5ldyBmaWxlcyB3aXRoIGBnaXQgYWRkIC0taW50ZW50LXRvLWFkZGAiCittc2dzdHIgIm1hcnF1ZXIgbGVzIG5vdXZlYXV4IGZpY2hpZXJzIGBnaXQgYWRkIC0taW50ZW50LXRvLWFkZGAiCisKKyM6IGFwcGx5LmM6NDk5MworbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJhcHBsaXF1ZXIgbGVzIHBhdGNoIHNhbnMgdG91Y2hlciDDoCBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBhcHBseS5jOjQ5OTUKK21zZ2lkICJhY2NlcHQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgb3V0c2lkZSB0aGUgd29ya2luZyBhcmVhIgorbXNnc3RyICJhY2NlcHRlciB1biBwYXRjaCBxdWkgdG91Y2hlIGhvcnMgZGUgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYXBwbHkuYzo0OTk4Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgImFwcGxpcXVlciBhdXNzaSBsZSBwYXRjaCAow6AgdXRpbGlzZXIgYXZlYyAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorCisjOiBhcHBseS5jOjUwMDAKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICJ0ZW50ZXIgdW5lIGZ1c2lvbiDDoCAzIHBvaW50cyBzaSBsZSBwYXRjaCBuZSBzJ2FwcGxpcXVlIHBhcyBwcm9wcmVtZW50IgorCisjOiBhcHBseS5jOjUwMDIKK21zZ2lkICJidWlsZCBhIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiBlbWJlZGRlZCBpbmRleCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorImNvbnN0cnVpcmUgdW4gaW5kZXggdGVtcG9yYWlyZSBmb25kw6kgc3VyIGwnaW5mb3JtYXRpb24gZGUgbCdpbmRleCBlbWJhcnF1w6kiCisKKyM6IGFwcGx5LmM6NTAwNSBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTczIGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjQKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAibGVzIGNoZW1pbnMgc29udCBzw6lwYXLDqXMgcGFyIHVuIGNhcmFjdMOocmUgTlVMIgorCisjOiBhcHBseS5jOjUwMDcKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgInMnYXNzdXJlciBkJ2F1IG1vaW5zIDxuPiBsaWduZXMgZGUgY29ycmVzcG9uZGFuY2UgZGUgY29udGV4dGUiCisKKyM6IGFwcGx5LmM6NTAwOCBidWlsdGluL2FtLmM6MjIzOSBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk4CisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMCBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDU3IGJ1aWx0aW4vcmViYXNlLmM6MTUwOAorbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAiYWN0aW9uIgorCisjOiBhcHBseS5jOjUwMDkKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAiIgorImTDqXRlY3RlciBkZXMgbGlnbmVzIG5vdXZlbGxlcyBvdSBtb2RpZmnDqWVzIHF1aSBjb250aWVubmVudCBkZXMgZXJyZXVycyAiCisiZCdlc3BhY2UiCisKKyM6IGFwcGx5LmM6NTAxMiBhcHBseS5jOjUwMTUKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICJpZ25vcmVyIGRlcyBtb2RpZmljYXRpb25zIGQnZXNwYWNlIGxvcnMgZGUgbGEgcmVjaGVyY2hlIGRlIGNvbnRleHRlIgorCisjOiBhcHBseS5jOjUwMTgKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAiYXBwbGlxdWVyIGxlIHBhdGNoIGVuIHNlbnMgaW52ZXJzZSIKKworIzogYXBwbHkuYzo1MDIwCittc2dpZCAiZG9uJ3QgZXhwZWN0IGF0IGxlYXN0IG9uZSBsaW5lIG9mIGNvbnRleHQiCittc2dzdHIgIm5lIHBhcyBzJ2F0dGVuZHJlIMOgIGF1IG1vaW5zIHVuZSBsaWduZSBkZSBjb250ZXh0ZSIKKworIzogYXBwbHkuYzo1MDIyCittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgImxhaXNzZXIgbGVzIHNlY3Rpb25zIHJlamV0w6llcyBkYW5zIGxlcyBmaWNoaWVycyAqLnJlaiBjb3JyZXNwb25kYW50cyIKKworIzogYXBwbHkuYzo1MDI0Cittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgImFjY2VwdGVyIGxlcyByZWNvdXZyZW1lbnRzIGRlIHNlY3Rpb25zIgorCisjOiBhcHBseS5jOjUwMjUgYnVpbHRpbi9hZGQuYzozMjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMgorIzogYnVpbHRpbi9jb21taXQuYzoxMzYwIGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk4IGJ1aWx0aW4vZnNjay5jOjc3NAorIzogYnVpbHRpbi9sb2cuYzoyMTY2IGJ1aWx0aW4vbXYuYzoxMjMgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICJtb2RlIHZlcmJldXgiCisKKyM6IGFwcGx5LmM6NTAyNworbXNnaWQgInRvbGVyYXRlIGluY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgbmV3LWxpbmUgYXQgdGhlIGVuZCBvZiBmaWxlIgorbXNnc3RyICIiCisidG9sw6lyZXIgZGVzIGVycmV1cnMgZGUgZMOpdGVjdGlvbiBkZSByZXRvdXJzIGNoYXJpb3QgbWFucXVhbnRzIGVuIGZpbiBkZSAiCisiZmljaGllciIKKworIzogYXBwbHkuYzo1MDMwCittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICJuZSBwYXMgc2UgZmllciBhdSBjb21wdGUgZGUgbGlnbmVzIGRhbnMgbGVzIGVuLXTDqnRlcyBkZSBzZWN0aW9uIgorCisjOiBhcHBseS5jOjUwMzIgYnVpbHRpbi9hbS5jOjIyNDgKK21zZ2lkICJyb290IgorbXNnc3RyICJyYWNpbmUiCisKKyM6IGFwcGx5LmM6NTAzMworbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgInByw6lmaXhlciB0b3VzIGxlcyBub21zIGRlIGZpY2hpZXIgYXZlYyA8cm9vdD4iCisKKyM6IGFyY2hpdmUuYzoxNAorbXNnaWQgImdpdCBhcmNoaXZlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBhcmNoaXZlIFs8b3B0aW9ucz5dIDxhcmJyZSBvdSBhcHBhcmVudMOpPiBbPGNoZW1pbj4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTUKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjE2Cittc2dpZCAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPGTDqXDDtHQ+IFstLWV4ZWMgPGNvbW1hbmRlPl0gWzxvcHRpb25zPl0gPGFyYnJlIG91ICIKKyJhcHBhcmVudMOpPiBbPGNoZW1pbj4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTcKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8ZMOpcMO0dD4gWy0tZXhlYyA8Y29tbWFuZGU+XSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzozNzIgYnVpbHRpbi9hZGQuYzoxODEgYnVpbHRpbi9hZGQuYzo1ODggYnVpbHRpbi9ybS5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGZpY2hpZXIiCisKKyM6IGFyY2hpdmUuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWY6ICUuKnMiCittc2dzdHIgInLDqWbDqXJlbmNlIGluZXhpc3RhbnRlwqA6ICUuKnMiCisKKyM6IGFyY2hpdmUuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICVzIgorbXNnc3RyICJub20gZCdvYmpldCBpbnZhbGlkZSA6ICVzIgorCisjOiBhcmNoaXZlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHRyZWUgb2JqZWN0OiAlcyIKK21zZ3N0ciAib2JqZXQgYXJicmUgaW52YWxpZGXCoDogJXMiCisKKyM6IGFyY2hpdmUuYzo0MjYKK21zZ2lkICJjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVudHJhY2tlZCIKK21zZ3N0ciAibCdhcmJyZSBkZSB0cmF2YWlsIGFjdHVlbCBlc3Qgbm9uLXN1aXZpIgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiZm10IgorbXNnc3RyICJmbXQiCisKKyM6IGFyY2hpdmUuYzo0NTcKK21zZ2lkICJhcmNoaXZlIGZvcm1hdCIKK21zZ3N0ciAiZm9ybWF0IGQnYXJjaGl2ZSIKKworIzogYXJjaGl2ZS5jOjQ1OCBidWlsdGluL2xvZy5jOjE2NTMKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgInByw6lmaXhlIgorCisjOiBhcmNoaXZlLmM6NDU5Cittc2dpZCAicHJlcGVuZCBwcmVmaXggdG8gZWFjaCBwYXRobmFtZSBpbiB0aGUgYXJjaGl2ZSIKK21zZ3N0ciAicHLDqWZpeGVyIGNoYXF1ZSBjaGVtaW4gZGUgZmljaGllciBkYW5zIGwnYXJjaGl2ZSIKKworIzogYXJjaGl2ZS5jOjQ2MCBidWlsdGluL2JsYW1lLmM6ODYxIGJ1aWx0aW4vYmxhbWUuYzo4NjUgYnVpbHRpbi9ibGFtZS5jOjg2NgorIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNyBidWlsdGluL2NvbmZpZy5jOjEzMCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjQgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjggYnVpbHRpbi9ncmVwLmM6ODg3CisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjAgYnVpbHRpbi9scy1maWxlcy5jOjU2MworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMiBidWlsdGluL25vdGVzLmM6NTc4IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIzCisjOiBwYXJzZS1vcHRpb25zLmg6MTkwCittc2dpZCAiZmlsZSIKK21zZ3N0ciAiZmljaGllciIKKworIzogYXJjaGl2ZS5jOjQ2MSBidWlsdGluL2FyY2hpdmUuYzo5MAorbXNnaWQgIndyaXRlIHRoZSBhcmNoaXZlIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAiw6ljcmlyZSBsJ2FyY2hpdmUgZGFucyBjZSBmaWNoaWVyIgorCisjOiBhcmNoaXZlLmM6NDYzCittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAibGlyZSAuZ2l0YXR0cmlidXRlcyBkYW5zIGxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwiCisKKyM6IGFyY2hpdmUuYzo0NjQKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICJhZmZpY2hlciBsZXMgZmljaGllcnMgYXJjaGl2w6lzIHN1ciBzdGRlcnIiCisKKyM6IGFyY2hpdmUuYzo0NjUKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICJzdG9ja2FnZSBzZXVsZW1lbnQiCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgImNvbXByZXNzaW9uIHJhcGlkZSIKKworIzogYXJjaGl2ZS5jOjQ3NAorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAiY29tcHJlc3Npb24gZWZmaWNhY2UiCisKKyM6IGFyY2hpdmUuYzo0NzcKK21zZ2lkICJsaXN0IHN1cHBvcnRlZCBhcmNoaXZlIGZvcm1hdHMiCittc2dzdHIgImFmZmljaGVyIGxlcyBmb3JtYXRzIGQnYXJjaGl2ZSBzdXBwb3J0w6lzIgorCisjOiBhcmNoaXZlLmM6NDc5IGJ1aWx0aW4vYXJjaGl2ZS5jOjkxIGJ1aWx0aW4vY2xvbmUuYzoxMTMgYnVpbHRpbi9jbG9uZS5jOjExNgorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTEKK21zZ2lkICJyZXBvIgorbXNnc3RyICJkw6lww7R0IgorCisjOiBhcmNoaXZlLmM6NDgwIGJ1aWx0aW4vYXJjaGl2ZS5jOjkyCittc2dpZCAicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iCittc2dzdHIgInLDqWN1cMOpcmVyIGwnYXJjaGl2ZSBkZXB1aXMgbGUgZMOpcMO0dCBkaXN0YW50IDxkw6lww7R0PiIKKworIzogYXJjaGl2ZS5jOjQ4MSBidWlsdGluL2FyY2hpdmUuYzo5MyBidWlsdGluL2RpZmZ0b29sLmM6NzE1CisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAiY29tbWFuZGUiCisKKyM6IGFyY2hpdmUuYzo0ODIgYnVpbHRpbi9hcmNoaXZlLmM6OTQKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgImNoZW1pbiB2ZXJzIGxhIGNvbW1hbmRlIGRpc3RhbnRlIGdpdC11cGxvYWQtYXJjaGl2ZSIKKworIzogYXJjaGl2ZS5jOjQ4OQorbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICJPcHRpb24gLS1yZW1vdGUgaW5hdHRlbmR1ZSIKKworIzogYXJjaGl2ZS5jOjQ5MQorbXNnaWQgIk9wdGlvbiAtLWV4ZWMgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tcmVtb3RlIgorbXNnc3RyICJMJ29wdGlvbiAtLWV4ZWMgbmUgcGV1dCDDqnRyZSB1dGlsaXPDqWUgcXUnZW4gY29tcGzDqW1lbnQgZGUgLS1yZW1vdGUiCisKKyM6IGFyY2hpdmUuYzo0OTMKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLW91dHB1dCIKK21zZ3N0ciAiT3B0aW9uIC0tb3V0cHV0IGluYXR0ZW5kdWUiCisKKyM6IGFyY2hpdmUuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBhcmNoaXZlIGZvcm1hdCAnJXMnIgorbXNnc3RyICJGb3JtYXQgZCdhcmNoaXZlIGluY29ubnUgJyVzJyIKKworIzogYXJjaGl2ZS5jOjUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJBcmd1bWVudCBub3Qgc3VwcG9ydGVkIGZvciBmb3JtYXQgJyVzJzogLSVkIgorbXNnc3RyICJBcmd1bWVudCBub24gc3VwcG9ydMOpIHBvdXIgbGUgZm9ybWF0ICclcyfCoDogLSVkIgorCisjOiBhcmNoaXZlLXRhci5jOjEyNSBhcmNoaXZlLXppcC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyZWFtIGJsb2IgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgdHJhbnNtZXR0cmUgbGUgYmxvYiAlcyBlbiBmbHV4IgorCisjOiBhcmNoaXZlLXRhci5jOjI2NiBhcmNoaXZlLXppcC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBmaWxlIG1vZGU6IDAlbyAoU0hBMTogJXMpIgorbXNnc3RyICJtb2RlIGRlIGZpY2hpZXIgbm9uIHN1cHBvcnTDqcKgOjAlbyAoU0hBMTogJXMpIgorCisjOiBhcmNoaXZlLXRhci5jOjI5MyBhcmNoaXZlLXppcC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlICVzIgorCisjOiBhcmNoaXZlLXRhci5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJyVzJyBmaWx0ZXIiCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpbWFycmVyIGxlIGZpbHRyZSAnJXMnIgorCisjOiBhcmNoaXZlLXRhci5jOjQ2OAorbXNnaWQgInVuYWJsZSB0byByZWRpcmVjdCBkZXNjcmlwdG9yIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHJlZGlyaWdlciB1biBkZXNjcmlwdGV1ciIKKworIzogYXJjaGl2ZS10YXIuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWx0ZXIgcmVwb3J0ZWQgZXJyb3IiCittc2dzdHIgImxlIGZpbHRyZSAnJXMnIGEgcmV0b3VybsOpIHVuZSBlcnJldXIiCisKKyM6IGFyY2hpdmUtemlwLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggaXMgbm90IHZhbGlkIFVURi04OiAlcyIKK21zZ3N0ciAibGUgY2hlbWluIG4nZXN0IHBhcyBjb2TDqSBlbiBVVEYtOCB2YWxpZGXCoDogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICJsZSBjaGVtaW4gZXN0IHRyb3AgbG9uZyAoJWQgY2FyYWN0w6hyZXMsIFNIQTHCoDogJXMpwqA6ICVzIgorCisjOiBhcmNoaXZlLXppcC5jOjQ4MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlIGVycm9yICglZCkiCittc2dzdHIgImVycmV1ciBkZSBjb21wcmVzc2lvbiAoJWQpIgorCisjOiBhcmNoaXZlLXppcC5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lc3RhbXAgdG9vIGxhcmdlIGZvciB0aGlzIHN5c3RlbTogJTxQUkl1TUFYPiIKK21zZ3N0ciAibCdob3JvZGF0YWdlIGVzdCB0cm9wIGdyYW5kIHBvdXIgY2Ugc3lzdMOobWXCoDogJTxQUkl1TUFYPiIKKworIzogYXR0ci5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lIgorbXNnc3RyICIlLipzIG4nZXN0IHBhcyB1biBub20gdmFsaWRlIGQnYXR0cmlidXQiCisKKyM6IGF0dHIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbm90IGFsbG93ZWQ6ICVzOiVkIgorbXNnc3RyICIlcyBub24gcGVybWlzIDogJXMgOiAlZCIKKworIzogYXR0ci5jOjQwOQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorIkxlcyBtb3RpZnMgZGUgbsOpZ2F0aW9uIHNvbnQgaWdub3LDqXMgZGFucyBsZXMgYXR0cmlidXRzIGdpdFxuIgorIlV0aWxpc2V6ICdcXCEnIHBvdXIgdW4gcG9pbnQgZCdleGNsYW1hdGlvbiBsaXR0w6lyYWwuIgorCisjOiBiaXNlY3QuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkbHkgcXVvdGVkIGNvbnRlbnQgaW4gZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAiQ29udGVudSBtYWwgY2l0w6kgZGFucyBsZSBmaWNoaWVyICclcyfCoDogJXMiCisKKyM6IGJpc2VjdC5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhXG4iCittc2dzdHIgIkltcG9zc2libGUgZGUgcG91c3NlciBsYSBiaXNzZWN0aW9uIHBsdXMgbG9pbsKgIVxuIgorCisjOiBiaXNlY3QuYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgY29tbWl0IG5hbWUgJXMiCittc2dzdHIgIiVzIG4nZXN0IHBhcyB1biBub20gZGUgY29tbWl0IHZhbGlkZSIKKworIzogYmlzZWN0LmM6NzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBiYWQuXG4iCisiVGhpcyBtZWFucyB0aGUgYnVnIGhhcyBiZWVuIGZpeGVkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyJMYSBiYXNlIGRlIGZ1c2lvbiAlcyBlc3QgbWF1dmFpc2UuXG4iCisiQ2VsYSBzaWduaWZpZSBxdWUgbGUgYm9ndWUgw6l0w6kgY29ycmlnw6kgZW50cmUgJXMgZXQgWyVzXS5cbiIKKworIzogYmlzZWN0LmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBuZXcuXG4iCisiVGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyJMYSBiYXNlIGRlIGZ1c2lvbiAlcyBlc3Qgbm91dmVsbGUuXG4iCisiTGEgcHJvcHJpw6l0w6kgYSBjaGFuZ8OpIGVudHJlICVzIGV0IFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIkxhIGJhc2UgZGUgZnVzaW9uICVzIGVzdCAlcy5cbiIKKyJDZWNpIHNpZ25pZmllIHF1ZSBsZSBwcmVtaWVyIGNvbW1pdCAnJXMnIGVzdCBlbnRyZSAlcyBldCBbJXNdLlxuIgorCisjOiBiaXNlY3QuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNvbWUgJXMgcmV2cyBhcmUgbm90IGFuY2VzdG9ycyBvZiB0aGUgJXMgcmV2LlxuIgorImdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLlxuIgorIk1heWJlIHlvdSBtaXN0b29rICVzIGFuZCAlcyByZXZzP1xuIgorbXNnc3RyICIiCisiQ2VydGFpbmVzIHLDqXZpc2lvbiAlcyBuZSBzb250IHBhcyBhbmPDqnRyZXMgZGUgbGEgcsOpdmlzaW9uICVzLlxuIgorImdpdCBiaXNlY3QgbmUgcGV1dCBwYXMgZm9uY3Rpb25uZXIgY29ycmVjdGVtZW50IGRhbnMgY2UgY2FzLlxuIgorIlBldXQtw6p0cmUgbGVzIHLDqXZpc2lvbnMgJXMgZXQgJXMgbmUgc29udC1lbGxlcyBwYXMgbGVzIGJvbm5lc8KgP1xuIgorCisjOiBiaXNlY3QuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBtZXJnZSBiYXNlIGJldHdlZW4gJXMgYW5kIFslc10gbXVzdCBiZSBza2lwcGVkLlxuIgorIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCAlcyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgJXMuXG4iCisiV2UgY29udGludWUgYW55d2F5LiIKK21zZ3N0ciAiIgorIkxhIGJhc2UgZGUgZnVzaW9uIGVudHJlICVzIGV0IFslc10gZG9pdCDDqnRyZSDDqXZpdMOpZS5cbiIKKyJPbiBuZSBwZXV0IGRvbmMgcGFzIMOqdHJlIGNlcnRhaW4gcXVlIGxlIHByZW1pZXIgY29tbWl0ICVzIHNlIHRyb3V2ZSBlbnRyZSAlcyAiCisiZXQgJXMuXG4iCisiT24gY29udGludWUgdG91dCBkZSBtw6ptZS4iCisKKyM6IGJpc2VjdC5jOjg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6IGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZFxuIgorbXNnc3RyICJCaXNzZWN0aW9uwqA6IHVuZSBiYXNlIGRlIGZ1c2lvbiBkb2l0IMOqdHJlIHRlc3TDqWVcbiIKKworIzogYmlzZWN0LmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgImEgJXMgcmV2aXNpb24gaXMgbmVlZGVkIgorbXNnc3RyICJ1bmUgcsOpdmlzaW9uICVzIGVzdCBuw6ljZXNzYWlyZSIKKworIzogYmlzZWN0LmM6OTIwIGJ1aWx0aW4vbm90ZXMuYzoxNzcgYnVpbHRpbi90YWcuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIGZpY2hpZXIgJyVzJyIKKworIzogYmlzZWN0LmM6OTY2IGJ1aWx0aW4vbWVyZ2UuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgZmljaGllciAnJXMnIgorCisjOiBiaXNlY3QuYzo5OTcKK21zZ2lkICJyZWFkaW5nIGJpc2VjdCByZWZzIGZhaWxlZCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxlcyByw6lmw6lyZW5jZXMgZGUgYmlzc2VjdGlvbiIKKworIzogYmlzZWN0LmM6MTAxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB3YXMgYm90aCAlcyBhbmQgJXNcbiIKK21zZ3N0ciAiJXMgw6l0YWl0IMOgIGxhIGZvaXMgJXMgZXQgJXNcbiIKKworIzogYmlzZWN0LmM6MTAyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGVzdGFibGUgY29tbWl0IGZvdW5kLlxuIgorIk1heWJlIHlvdSBzdGFydGVkIHdpdGggYmFkIHBhdGggcGFyYW1ldGVycz9cbiIKK21zZ3N0ciAiIgorIkF1Y3VuIGNvbW1pdCB0ZXN0YWJsZSBuJ2Egw6l0w6kgdHJvdXbDqVxuIgorIlBldXQtw6p0cmUgYXZlei12b3VzIGTDqW1hcnLDqSBhdmVjIHVuIG1hdXZhaXMgcGFyYW3DqHRyZSBkZSBjaGVtaW7CoD9cbiIKKworIzogYmlzZWN0LmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICIocm91Z2hseSAlZCBzdGVwKSIKK21zZ2lkX3BsdXJhbCAiKHJvdWdobHkgJWQgc3RlcHMpIgorbXNnc3RyWzBdICIow6AgcGV1IHByw6hzICVkIMOpdGFwZSkiCittc2dzdHJbMV0gIijDoCBwZXUgcHLDqHMgJWQgw6l0YXBlcykiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgbGFzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggIihyb3VnaGx5ICVkCisjLiBzdGVwcykiIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJpc2VjdC5jOjEwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICJCaXNzZWN0aW9uwqA6ICVkIHLDqXZpc2lvbiDDoCB0ZXN0ZXIgYXByw6hzIGNlY2kgJXNcbiIKK21zZ3N0clsxXSAiQmlzc2VjdGlvbsKgOiAlZCByw6l2aXNpb25zIMOgIHRlc3RlciBhcHLDqHMgY2VjaSAlc1xuIgorCisjOiBibGFtZS5jOjI3MDAKK21zZ2lkICItLWNvbnRlbnRzIGFuZCAtLXJldmVyc2UgZG8gbm90IGJsZW5kIHdlbGwuIgorbXNnc3RyICItLWNvbnRlbnRzIGV0IC0tcmV2ZXJzZSBuZSBmb250IHBhcyBib24gbcOpbmFnZS4iCisKKyM6IGJsYW1lLmM6MjcxNAorbXNnaWQgImNhbm5vdCB1c2UgLS1jb250ZW50cyB3aXRoIGZpbmFsIGNvbW1pdCBvYmplY3QgbmFtZSIKK21zZ3N0ciAib24gbmUgcGV1dCBwYXMgdXRpbGlzZXIgLS1jb250ZW50cyBhdmVjIHVuIG5vbSBkJ29iamV0IGNvbW1pdCBmaW5hbCIKKworIzogYmxhbWUuYzoyNzM1Cittc2dpZCAiLS1yZXZlcnNlIGFuZCAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHNwZWNpZmllZCBsYXRlc3QgY29tbWl0IgorbXNnc3RyICIiCisiLS1yZXZlcnNlIGV0IC0tZmlyc3QtcGFyZW50IGVuc2VtYmxlIG7DqWNlc3NpdGVudCBsYSBzcMOpY2lmaWNhdGlvbiBkJ3VuICIKKyJkZXJuaWVyIGNvbW1pdCIKKworIzogYmxhbWUuYzoyNzQ0IGJ1bmRsZS5jOjE2NyByZWYtZmlsdGVyLmM6MjIwMyByZW1vdGUuYzoxOTQyIHNlcXVlbmNlci5jOjIwMDYKKyM6IHNlcXVlbmNlci5jOjQzNTggc3VibW9kdWxlLmM6ODQ3IGJ1aWx0aW4vY29tbWl0LmM6MTA0NSBidWlsdGluL2xvZy5jOjM4OAorIzogYnVpbHRpbi9sb2cuYzo5OTEgYnVpbHRpbi9sb2cuYzoxNTIwIGJ1aWx0aW4vbG9nLmM6MTkyNSBidWlsdGluL2xvZy5jOjIyMTUKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0MTIgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MAorIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE5MgorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgcHLDqXBhcmF0aW9uIGR1IHBhcmNvdXJzIGRlcyByw6l2aXNpb25zIgorCisjOiBibGFtZS5jOjI3NjIKK21zZ2lkICIiCisiLS1yZXZlcnNlIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgcmFuZ2UgYWxvbmcgZmlyc3QtcGFyZW50IGNoYWluIgorbXNnc3RyICIiCisiLS1yZXZlcnNlIC0tZmlyc3QtcGFyZW50IGVuc2VtYmxlIG7DqWNlc3NpdGVudCB1bmUgcG9ydMOpZSBhdmVjIGxhIGNoYcOubmUgZGUgIgorInByZW1pZXIgcGFyZW50IgorCisjOiBibGFtZS5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBwYXRoICVzIGluICVzIgorbXNnc3RyICJwYXMgZGUgY2hlbWluICVzIGRhbnMgJXMiCisKKyM6IGJsYW1lLmM6Mjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgYmxvYiAlcyAgcG91ciBsZSBjaGVtaW4gJXMiCisKKyM6IGJyYW5jaC5jOjUzCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKICJcbiIKLSJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCi0iVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgorIkFmdGVyIGZpeGluZyB0aGUgZXJyb3IgY2F1c2UgeW91IG1heSB0cnkgdG8gZml4IHVwXG4iCisidGhlIHJlbW90ZSB0cmFja2luZyBpbmZvcm1hdGlvbiBieSBpbnZva2luZ1xuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIi4iCiBtc2dzdHIgIiIKICJcbiIKLSJDZWNpIGVzdCBkw7sgw6AgdW4gcHJvYmzDqG1lIGNvbm51IGF2ZWNcbiIKLSJsZSBiaW5haXJlIFRjbCBkaXN0cmlidcOpIHBhciBDeWd3aW4uIgorIkFwcsOocyBjb3JyZWN0aW9uIGRlIGxhIGNhdXNlIGRlIGwnZXJyZXVyLCB2b3VzIHBvdXZleiBlc3NheWVyIGRlIGNvcnJpZ2VyXG4iCisibCdpbmZvcm1hdGlvbiBkZSBzdWl2aSBkaXN0YW50IGVuIGludm9xdWFudFxuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIi4iCiAKLSM6IGdpdC1ndWkuc2g6MzU3NQotIywgdGNsLWZvcm1hdAorIzogYnJhbmNoLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIgorbXNnc3RyICJMYSBicmFuY2hlICVzIG5lIHBldXQgcGFzIMOqdHJlIHNhIHByb3ByZSBicmFuY2hlIGFtb250LiIKKworIzogYnJhbmNoLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiTGEgYnJhbmNoZSAnJXMnIGVzdCBwYXJhbcOpdHLDqWUgcG91ciBzdWl2cmUgbGEgYnJhbmNoZSBkaXN0YW50ZSAnJXMnIGRlICclcycgIgorImVuIHJlYmFzYW50LiIKKworIzogYnJhbmNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycuIgorbXNnc3RyICIiCisiTGEgYnJhbmNoZSAnJXMnIGVzdCBwYXJhbcOpdHLDqWUgcG91ciBzdWl2cmUgbGEgYnJhbmNoZSBkaXN0YW50ZSAnJXMnIGRlcHVpcyAiCisiJyVzJy4iCisKKyM6IGJyYW5jaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJMYSBicmFuY2hlICclcycgZXN0IHBhcmFtw6l0csOpZSBwb3VyIHN1aXZyZSBsYSBicmFuY2hlIGxvY2FsZSAnJSdzIGVuICIKKyJyZWJhc2FudC4iCisKKyM6IGJyYW5jaC5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJy4iCittc2dzdHIgIkxhIGJyYW5jaGUgJyVzJyBlc3QgcGFyYW3DqXRyw6llIHBvdXIgc3VpdnJlIGxhIGJyYW5jaGUgbG9jYWxlICclcycuIgorCisjOiBicmFuY2guYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJMYSBicmFuY2hlICclcycgZXN0IHBhcmFtw6l0csOpZSBwb3VyIHN1aXZyZSBsYSByw6lmw6lyZW5jZSBkaXN0YW50ZSAnJXMnIGVuICIKKyJyZWJhc2FudC4iCisKKyM6IGJyYW5jaC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnLiIKK21zZ3N0ciAiTGEgYnJhbmNoZSAnJXMnIGVzdCBwYXJhbcOpdHLDqWUgcG91ciBzdWl2cmUgbGEgcsOpZsOpcmVuY2UgZGlzdGFudGUgJyVzJy4iCisKKyM6IGJyYW5jaC5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiTGEgYnJhbmNoZSAnJXMnIGVzdCBwYXJhbcOpdHLDqWUgcG91ciBzdWl2cmUgbGEgcsOpZsOpcmVuY2UgbG9jYWxlICclcycgZW4gIgorInJlYmFzYW50LiIKKworIzogYnJhbmNoLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJy4iCittc2dzdHIgIkxhIGJyYW5jaGUgJyVzJyBlc3QgcGFyYW3DqXRyw6llIHBvdXIgc3VpdnJlIGxhIHLDqWbDqXJlbmNlIGxvY2FsZSAnJXMnLiIKKworIzogYnJhbmNoLmM6MTE5Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIHVwc3RyZWFtIGJyYW5jaCBjb25maWd1cmF0aW9uIgorbXNnc3RyICLDiWNoZWMgZGUgbCfDqWNyaXR1cmUgZGUgbGEgY29uZmlndXJhdGlvbiBkZSBicmFuY2hlIGFtb250IgorCisjOiBicmFuY2guYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAiUGFzIGRlIHN1aXZpIDogaW5mb3JtYXRpb24gYW1iaWd1w6sgcG91ciBsYSByw6lmw6lyZW5jZSAlcyIKKworIzogYnJhbmNoLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgYnJhbmNoIG5hbWUuIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBub20gZGUgYnJhbmNoZSB2YWxpZGUuIgorCisjOiBicmFuY2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIlVuZSBicmFuY2hlIG5vbW3DqWUgJyVzJyBleGlzdGUgZMOpasOgLiIKKworIzogYnJhbmNoLmM6MjEzCittc2dpZCAiQ2Fubm90IGZvcmNlIHVwZGF0ZSB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGZvcmNlciBsYSBtaXNlIMOgIGpvdXIgZGUgbGEgYnJhbmNoZSBjb3VyYW50ZS4iCisKKyM6IGJyYW5jaC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50ICclcycgaXMgbm90IGEgYnJhbmNoLiIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZGUgcGFyYW3DqXRyZXIgbGUgc3VpdmkgZGUgYnJhbmNoZSA7IGxlIHBvaW50IGRlIGTDqXBhcnQgJyVzJyBuJ2VzdCAiCisicGFzIHVuZSBicmFuY2hlLiIKKworIzogYnJhbmNoLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSByZXF1ZXN0ZWQgdXBzdHJlYW0gYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImxhIGJyYW5jaGUgYW1vbnQgZGVtYW5kw6llICclcycgbidleGlzdGUgcGFzIgorCisjOiBicmFuY2guYzoyMzcKIG1zZ2lkICIiCiAiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyBvbiBiYXNpbmcgeW91ciB3b3JrIG9uIGFuIHVwc3RyZWFtXG4iCisiYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXQgdGhlIHJlbW90ZSwgeW91IG1heSBuZWVkIHRvXG4iCisicnVuIFwiZ2l0IGZldGNoXCIgdG8gcmV0cmlldmUgaXQuXG4iCiAiXG4iCi0iQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgotImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgotInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCi0ifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyB0byBwdXNoIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggdGhhdFxuIgorIndpbGwgdHJhY2sgaXRzIHJlbW90ZSBjb3VudGVycGFydCwgeW91IG1heSB3YW50IHRvIHVzZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB0byBzZXQgdGhlIHVwc3RyZWFtIGNvbmZpZyBhcyB5b3UgcHVzaC4iCiBtc2dzdHIgIiIKICJcbiIKKyJTaSB2b3VzIGNvbXB0ZXogYmFzZXIgdm90cmUgdHJhdmFpbCBzdXIgdW5lIGJyYW5jaGVcbiIKKyJhbW9udCBxdWkgZXhpc3RlIGTDqWrDoCBzdXIgbGUgc2VydmV1ciBkaXN0YW50LCB2b3VzIHBvdXZlelxuIgorImxhbmNlciBcImdpdCBmZXRjaFwiIHBvdXIgbGEgcsOpY3Vww6lyZXIuXG4iCiAiXG4iCi0iVW4gYm9uIHJlbXBsYWNlbWVudCBwb3VyICVzXG4iCi0iZXN0IGRlIG1ldHRyZSBsZXMgdmFsZXVycyBwb3VyICd1c2VyLm5hbWUnIChub21cbiIKLSJkZSBsJ3V0aWxpc2F0ZXVyKSBldCAndXNlci5lbWFpbCcgKGFkZHJlc3NlIGVtYWlsXG4iCi0iZGUgbCd1dGlsaXNhdGV1cikgZGFucyB2b3RyZSBmaWNoaWVyICd+Ly5naXRjb25maWcnLlxuIgorIlNpIHZvdXMgY29tcHRleiBwb3Vzc2VyIHVuZSBub3V2ZWxsZSBicmFuY2hlIGxvY2FsZSBxdWkgc3VpdnJhXG4iCisic2EganVtZWxsZSBkaXN0YW50ZSwgdm91cyBwb3V2ZXogdXRpbGlzZXIgXCJnaXQgcHVzaCAtdVwiXG4iCisicG91ciBwYXJhbcOpdHJlciBsZSBzdWl2aSBkaXN0YW50IGVuIG3Dqm1lIHRlbXBzIHF1ZSB2b3VzIHBvdXNzZXouIgogCi0jOiBsaWIvYWJvdXQudGNsOjI2Ci1tc2dpZCAiZ2l0LWd1aSAtIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBHaXQuIgotbXNnc3RyICJnaXQtZ3VpIC0gdW5lIGludGVyZmFjZSBncmFwaGlxdWUgdXRpbGlzYXRldXIgcG91ciBHaXQiCisjOiBicmFuY2guYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJOb20gZCdvYmpldCBpbnZhbGlkZSA6ICclcycuIgogCi0jOiBsaWIvYmxhbWUudGNsOjcyCi1tc2dpZCAiRmlsZSBWaWV3ZXIiCi1tc2dzdHIgIlZpc2lvbm5ldXIgZGUgZmljaGllciIKKyM6IGJyYW5jaC5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJOb20gZCdvYmpldCBhbWJpZ3UgOiAnJXMnLiIKIAotIzogbGliL2JsYW1lLnRjbDo3OAotbXNnaWQgIkNvbW1pdDoiCi1tc2dzdHIgIkNvbW1pdCA6IgorIzogYnJhbmNoLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIlBvaW50IGQnZW1icmFuY2hlbWVudCBpbnZhbGlkZSA6ICclcycuIgogCi0jOiBsaWIvYmxhbWUudGNsOjI3MQotbXNnaWQgIkNvcHkgQ29tbWl0IgotbXNnc3RyICJDb3BpZXIgY29tbWl0IgorIzogYnJhbmNoLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICInJXMnIGVzdCBkw6lqw6AgZXh0cmFpdCBkYW5zICclcyciCiAKLSM6IGxpYi9ibGFtZS50Y2w6Mjc1Ci1tc2dpZCAiRmluZCBUZXh0Li4uIgotbXNnc3RyICJDaGVyY2hlciB0ZXh0ZS4uLiIKKyM6IGJyYW5jaC5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIG9mIHdvcmtpbmcgdHJlZSAlcyBpcyBub3QgdXBkYXRlZCIKK21zZ3N0ciAibGEgSEVBRCBkZSBsYSBjb3BpZSBkZSB0cmF2YWlsICVzIG4nZXN0IHBhcyBtaXNlIMOgIGpvdXIiCiAKLSM6IGxpYi9ibGFtZS50Y2w6Mjg0Ci1tc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKLW1zZ3N0ciAiTGFuY2VyIGxhIGTDqXRlY3Rpb24gYXBwcm9mb25kaWUgZGVzIGNvcGllcyIKKyM6IGJ1bmRsZS5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgbG9vayBsaWtlIGEgdjIgYnVuZGxlIGZpbGUiCittc2dzdHIgIiclcycgbmUgc2VtYmxlIHBhcyDDqnRyZSB1biBmaWNoaWVyIGJ1bmRsZSB2MiIKIAotIzogbGliL2JsYW1lLnRjbDoyODgKLW1zZ2lkICJTaG93IEhpc3RvcnkgQ29udGV4dCIKLW1zZ3N0ciAiTW9udHJlciBsJ2hpc3RvcmlxdWUiCisjOiBidW5kbGUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgImVuLXTDqnRlIG5vbiByZWNvbm51IDogJXMlcyAoJWQpIgogCi0jOiBsaWIvYmxhbWUudGNsOjI5MQotbXNnaWQgIkJsYW1lIFBhcmVudCBDb21taXQiCi1tc2dzdHIgIkJsw6JtZXIgbGUgY29tbWl0IHBhcmVudCIKKyM6IGJ1bmRsZS5jOjkwIHJlcmVyZS5jOjQ4MCByZXJlcmUuYzo2OTAgc2VxdWVuY2VyLmM6MjI1OCBzZXF1ZW5jZXIuYzozMDE2CisjOiBidWlsdGluL2NvbW1pdC5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyICclcyciCiAKLSM6IGxpYi9ibGFtZS50Y2w6NDUwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVhZGluZyAlcy4uLiIKLW1zZ3N0ciAiTGVjdHVyZSBkZSAlcy4uLiIKKyM6IGJ1bmRsZS5jOjE0MworbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICJMZSBkw6lww7R0IG5lIGRpc3Bvc2UgcGFzIGRlcyBjb21taXRzIHByw6lyZXF1aXMgc3VpdmFudHMgOiIKIAotIzogbGliL2JsYW1lLnRjbDo1NTcKLW1zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKLW1zZ3N0ciAiQ2hhcmdlbWVudCBkZXMgYW5ub3RhdGlvbnMgZGUgc3VpdmkgZGVzIGNvcGllcy9kw6lwbGFjZW1lbnRzLi4uIgorIzogYnVuZGxlLmM6MTQ2Cittc2dpZCAibmVlZCBhIHJlcG9zaXRvcnkgdG8gdmVyaWZ5IGEgYnVuZGxlIgorbXNnc3RyICJsYSB2w6lyaWZpY2F0aW9uIGQndW4gY29saXMgcmVxdWllcnQgdW4gZMOpcMO0dCIKIAotIzogbGliL2JsYW1lLnRjbDo1NzcKLW1zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCi1tc2dzdHIgImxpZ25lcyBhbm5vdMOpZXMiCisjOiBidW5kbGUuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIkxlIGNvbGlzIGNvbnRpZW50IGNldHRlIHLDqWbDqXJlbmNlIDoiCittc2dzdHJbMV0gIkxlIGNvbGlzIGNvbnRpZW50IGNlcyAlZCByw6lmw6lyZW5jZXMgOiIKIAotIzogbGliL2JsYW1lLnRjbDo3NjkKLW1zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgotbXNnc3RyICJDaGFyZ2VtZW50IGRlcyBhbm5vdGF0aW9ucyBkJ2VtcGxhY2VtZW50IG9yaWdpbmFsIgorIzogYnVuZGxlLmM6MjA0Cittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIkxlIGNvbGlzIGVucmVnaXN0cmUgbCdoaXN0b3JpcXVlIGNvbXBsZXQuIgogCi0jOiBsaWIvYmxhbWUudGNsOjc3MgotbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgotbXNnc3RyICJBbm5vdGF0aW9uIHRlcm1pbsOpZS4iCisjOiBidW5kbGUuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIkxlIGNvbGlzIGV4aWdlIGNldHRlIHLDqWbDqXJlbmNlIDoiCittc2dzdHJbMV0gIkxlIGNvbGlzIGV4aWdlIGNlcyAlZCByw6lmw6lyZW5jZXMgOiIKIAotIzogbGliL2JsYW1lLnRjbDo4MDIKLW1zZ2lkICJCdXN5IgotbXNnc3RyICJPY2N1cMOpIgorIzogYnVuZGxlLmM6MjczCittc2dpZCAidW5hYmxlIHRvIGR1cCBidW5kbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBkdXBsaXF1ZXIgbGUgZGVzY3JpcHRldXIgZGUgbGlhc3NlIgogCi0jOiBsaWIvYmxhbWUudGNsOjgwMwotbXNnaWQgIkFubm90YXRpb24gcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcuIgotbXNnc3RyICJBbm5vdGF0aW9uIGVuIGNvdXJzIGQnZXjDqWN1dGlvbi4iCisjOiBidW5kbGUuYzoyODAKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNyw6llciBkZXMgb2JqZXRzIGdyb3Vww6lzIgogCi0jOiBsaWIvYmxhbWUudGNsOjg0MgotbXNnaWQgIlJ1bm5pbmcgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uLi4iCi1tc2dzdHIgIlJlY2hlcmNoZSBkZSBjb3BpZSBhcHByb2ZvbmRpZSBlbiBjb3Vycy4uLiIKKyM6IGJ1bmRsZS5jOjI5MQorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICJsZXMgb2JqZXRzIGdyb3Vww6lzIG9udCBkaXNwYXJ1IgogCi0jOiBsaWIvYmxhbWUudGNsOjkxMAotbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKLW1zZ3N0ciAiQ2hhcmdlbWVudCBkZXMgYW5ub3RhdGlvbnMuLi4iCisjOiBidW5kbGUuYzozMzMKK21zZ2lkICJyZXYtbGlzdCBkaWVkIgorbXNnc3RyICJyZXYtbGlzdCBhIGRpc3BhcnUiCiAKLSM6IGxpYi9ibGFtZS50Y2w6OTYzCi1tc2dpZCAiQXV0aG9yOiIKLW1zZ3N0ciAiQXV0ZXVyIDoiCisjOiBidW5kbGUuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiCittc2dzdHIgImxhIHLDqWbDqXJlbmNlICclcycgZXN0IGV4Y2x1ZSBwYXIgbGVzIG9wdGlvbnMgZGUgcmV2LWxpc3QiCiAKLSM6IGxpYi9ibGFtZS50Y2w6OTY3Ci1tc2dpZCAiQ29tbWl0dGVyOiIKLW1zZ3N0ciAiQ29tbWl0ZXVyIDoiCisjOiBidW5kbGUuYzo0NjEgYnVpbHRpbi9sb2cuYzoyMDMgYnVpbHRpbi9sb2cuYzoxODE0IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnQgbm9uIHJlY29ubnUgOiAlcyIKIAotIzogbGliL2JsYW1lLnRjbDo5NzIKLW1zZ2lkICJPcmlnaW5hbCBGaWxlOiIKLW1zZ3N0ciAiRmljaGllciBvcmlnaW5hbCA6IgorIzogYnVuZGxlLmM6NDY5Cittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgIlJlZnVzIGRlIGNyw6llciB1biBjb2xpcyB2aWRlLiIKIAotIzogbGliL2JsYW1lLnRjbDoxMDIwCi1tc2dpZCAiQ2Fubm90IGZpbmQgSEVBRCBjb21taXQ6IgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgY29tbWl0IEhFQUQgOiIKKyM6IGJ1bmRsZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyICclcyciCiAKLSM6IGxpYi9ibGFtZS50Y2w6MTA3NQotbXNnaWQgIkNhbm5vdCBmaW5kIHBhcmVudCBjb21taXQ6IgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgY29tbWl0IHBhcmVudCA6IgorIzogYnVuZGxlLmM6NTA0Cittc2dpZCAiaW5kZXgtcGFjayBkaWVkIgorbXNnc3RyICJsJ2luZGV4IGRlIGdyb3VwZSBhIGRpc3BhcnUiCiAKLSM6IGxpYi9ibGFtZS50Y2w6MTA5MAotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkJ2FmZmljaGVyIGxlIHBhcmVudCIKKyM6IGNvbG9yLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgIlZhbGV1ciBpbnZhbGlkZSBkZSBjb3VsZXVyIDogJS4qcyIKIAotIzogbGliL2JsYW1lLnRjbDoxMDkxIGxpYi9kaWZmLnRjbDozMjAKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgotbXNnc3RyICJFcnJldXIgbG9ycyBkdSBjaGFyZ2VtZW50IGRlcyBkaWZmw6lyZW5jZXMgOiIKKyM6IGNvbW1pdC5jOjUxIHNlcXVlbmNlci5jOjI3MTkgYnVpbHRpbi9hbS5jOjM1OSBidWlsdGluL2FtLmM6NDAzCisjOiBidWlsdGluL2FtLmM6MTM3MSBidWlsdGluL2FtLmM6MjAxNCBidWlsdGluL3JlcGxhY2UuYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgJXMiCiAKLSM6IGxpYi9ibGFtZS50Y2w6MTIzMQotbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgotbXNnc3RyICLDgCBsJ29yaWdpbmUgcGFyIDoiCisjOiBjb21taXQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICIlcyAlcyBuJ2VzdCBwYXMgdW4gY29tbWl0ICEiCiAKLSM6IGxpYi9ibGFtZS50Y2w6MTIzNwotbXNnaWQgIkluIEZpbGU6IgotbXNnc3RyICJEYW5zIGxlIGZpY2hpZXIgOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjQyCi1tc2dpZCAiQ29waWVkIE9yIE1vdmVkIEhlcmUgQnk6IgotbXNnc3RyICJDb3Bpw6kgb3UgZMOpcGxhY8OpIGljaSBwYXIgOiIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTQgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTkKLW1zZ2lkICJDaGVja291dCBCcmFuY2giCi1tc2dzdHIgIkNoYXJnZXIgbGEgYnJhbmNoZSAoY2hlY2tvdXQpIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyMwotbXNnaWQgIkNoZWNrb3V0IgotbXNnc3RyICJDaGFyZ2VyIChjaGVja291dCkiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI3IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjMyIGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMCBsaWIvYnJvd3Nlci50Y2w6MjgyCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OSBsaWIvY2hvb3NlX2ZvbnQudGNsOjQzIGxpYi9tZXJnZS50Y2w6MTcyCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjUgbGliL3JlbW90ZV9hZGQudGNsOjMyIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDIKLSM6IGxpYi90b29sc19kbGcudGNsOjQwIGxpYi90b29sc19kbGcudGNsOjIwNCBsaWIvdG9vbHNfZGxnLnRjbDozNTIKLSM6IGxpYi90cmFuc3BvcnQudGNsOjEwOAotbXNnaWQgIkNhbmNlbCIKLW1zZ3N0ciAiQW5udWxlciIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzIgbGliL2Jyb3dzZXIudGNsOjI4NyBsaWIvdG9vbHNfZGxnLnRjbDozMjgKLW1zZ2lkICJSZXZpc2lvbiIKLW1zZ3N0ciAiUsOpdmlzaW9uIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkgbGliL29wdGlvbi50Y2w6MjgwCi1tc2dpZCAiT3B0aW9ucyIKLW1zZ3N0ciAiT3B0aW9ucyIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzkgbGliL2JyYW5jaF9jcmVhdGUudGNsOjkyCi1tc2dpZCAiRmV0Y2ggVHJhY2tpbmcgQnJhbmNoIgotbXNnc3RyICJSw6ljdXDDqXJlciBsYSBicmFuY2hlIGRlIHN1aXZpIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0NAotbXNnaWQgIkRldGFjaCBGcm9tIExvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiRMOpdGFjaGVyIGRlIGxhIGJyYW5jaGUgbG9jYWxlIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjIKLW1zZ2lkICJDcmVhdGUgQnJhbmNoIgotbXNnc3RyICJDcsOpZXIgdW5lIGJyYW5jaGUiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyNwotbXNnaWQgIkNyZWF0ZSBOZXcgQnJhbmNoIgotbXNnc3RyICJDcsOpZXIgdW5lIG5vdXZlbGxlIGJyYW5jaGUiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MQotbXNnaWQgIkNyZWF0ZSIKLW1zZ3N0ciAiQ3LDqWVyIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDAKLW1zZ2lkICJCcmFuY2ggTmFtZSIKLW1zZ3N0ciAiTm9tIGRlIGJyYW5jaGUiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MyBsaWIvcmVtb3RlX2FkZC50Y2w6MzkgbGliL3Rvb2xzX2RsZy50Y2w6NTAKLW1zZ2lkICJOYW1lOiIKLW1zZ3N0ciAiTm9tIDoiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo1OAotbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaCBOYW1lIgotbXNnc3RyICJUcm91dmVyIG5vbSBkZSBicmFuY2hlIGRlIHN1aXZpIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKLW1zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKLW1zZ3N0ciAiUsOpdmlzaW9uIGluaXRpYWxlIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzIKLW1zZ2lkICJVcGRhdGUgRXhpc3RpbmcgQnJhbmNoOiIKLW1zZ3N0ciAiTWV0dHJlIMOgIGpvdXIgdW5lIGJyYW5jaGUgZXhpc3RhbnRlIDoiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQotbXNnaWQgIk5vIgotbXNnc3RyICJOb24iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAotbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgotbXNnc3RyICJNaXNlIMOgIGpvdXIgcmVjdGlsaWduZSBzZXVsZW1lbnQgKGZhc3QtZm9yd2FyZCkiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MQotbXNnaWQgIlJlc2V0IgotbXNnc3RyICJSw6lpbml0aWFsaXNlciIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Ci1tc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCi1tc2dzdHIgIkNoYXJnZXIgKGNoZWNrb3V0KSBhcHLDqHMgY3LDqWF0aW9uIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTMxCi1tc2dpZCAiUGxlYXNlIHNlbGVjdCBhIHRyYWNraW5nIGJyYW5jaC4iCi1tc2dzdHIgIkNob2lzaXNzZXogdW5lIGJyYW5jaGUgZGUgc3VpdmkiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIkxhIGJyYW5jaGUgZGUgc3VpdmkgJXMgbidlc3QgcGFzIHVuZSBicmFuY2hlIGRhbnMgbGUgZMOpcMO0dCBkaXN0YW50LiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1MyBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6ODYKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIgotbXNnc3RyICJGb3Vybmlzc2V6IHVuIG5vbSBkZSBicmFuY2hlLiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTA2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCi1tc2dzdHIgIiclcycgbidlc3QgcGFzIHVuIG5vbSBkZSBicmFuY2hlIGFjY2VwdGFibGUuIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTUKLW1zZ2lkICJEZWxldGUgQnJhbmNoIgotbXNnc3RyICJTdXBwcmltZXIgYnJhbmNoZSIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjIwCi1tc2dpZCAiRGVsZXRlIExvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiU3VwcHJpbWVyIGJyYW5jaGUgbG9jYWxlIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzcKLW1zZ2lkICJMb2NhbCBCcmFuY2hlcyIKLW1zZ3N0ciAiQnJhbmNoZXMgbG9jYWxlcyIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUyCi1tc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCi1tc2dzdHIgIlN1cHByaW1lciBzZXVsZW1lbnQgc2kgZnVzaW9ubsOpZSBkYW5zIDoiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1NCBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExOQotbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKLW1zZ3N0ciAiVG91am91cnMgKG5lIHBhcyB2w6lyaWZpZXIgbGVzIGZ1c2lvbnMpIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgotbXNnc3RyICJMZXMgYnJhbmNoZXMgc3VpdmFudGVzIG5lIHNvbnQgcGFzIGNvbXBsw6h0ZW1lbnQgZnVzaW9ubsOpZXMgZGFucyAlcyA6IgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE3CisjOiBjb21taXQuYzoxOTMKIG1zZ2lkICIiCi0iUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKKyJTdXBwb3J0IGZvciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaXMgZGVwcmVjYXRlZFxuIgorImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgR2l0IHZlcnNpb24uXG4iCiAiXG4iCi0iRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCisiUGxlYXNlIHVzZSBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyJ0byBjb252ZXJ0IHRoZSBncmFmdHMgaW50byByZXBsYWNlIHJlZnMuXG4iCisiXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIiIKIG1zZ3N0ciAiIgotIklsIGVzdCBkaWZmaWNpbGUgZGUgcsOpY3Vww6lyZXIgZGVzIGJyYW5jaGVzIHN1cHByaW3DqWVzLlxuIgorIkxlIHN1cHBvcnQgZGUgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIGVzdCBkw6ljb25zZWlsbMOpXG4iCisiZXQgc2VyYSBzdXBwcmltw6kgZGFucyB1bmUgdmVyc2lvbiBmdXR1cmUgZGUgR2l0LlxuIgogIlxuIgotIlN1cHByaW1lciBsZXMgYnJhbmNoZXMgc8OpbGVjdGlvbm7DqWVzID8iCisiVmV1aWxsZXogdXRpbGlzZXIgXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiXG4iCisicG91ciBjb252ZXJ0aXIgbGVzIGdyYWZ0cyBlbiByw6lmw6lyZW5jZSBkZSByZW1wbGFjZW1lbnQuXG4iCisiXG4iCisiU3VwcHJpbWV6IGNlIG1lc3NhZ2UgZW4gbGFuw6dhbnRcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIiIKIAotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE0MQotIywgdGNsLWZvcm1hdAorIzogY29tbWl0LmM6MTE1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlLCBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICJMYSB2YWxpZGF0aW9uICVzIGEgdW5lIHNpZ25hdHVyZSBHUEcgbm9uIGZpYWJsZSwgcHLDqXRlbmR1bWVudCBwYXIgJXMuIgorCisjOiBjb21taXQuYzoxMTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBiYWQgR1BHIHNpZ25hdHVyZSBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICJMYSB2YWxpZGF0aW9uICVzIGEgdW5lIG1hdXZhaXNlIHNpZ25hdHVyZSBHUEcgcHLDqXRlbmR1bWVudCBwYXIgJXMuIgorCisjOiBjb21taXQuYzoxMTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZS4iCittc2dzdHIgIkxhIHZhbGlkYXRpb24gJXMgbidhIHBhcyBkZSBzaWduYXR1cmUgR1BHLiIKKworIzogY29tbWl0LmM6MTE2MworIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIGJ5ICVzXG4iCittc2dzdHIgIkxhIHZhbGlkYXRpb24gJXMgYSB1bmUgc2lnbmF0dXJlIEdQRyBjb3JyZWN0ZSBwYXIgJXNcbiIKKworIzogY29tbWl0LmM6MTQxNwogbXNnaWQgIiIKLSJGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaGVzOlxuIgotIiVzIgorIldhcm5pbmc6IGNvbW1pdCBtZXNzYWdlIGRpZCBub3QgY29uZm9ybSB0byBVVEYtOC5cbiIKKyJZb3UgbWF5IHdhbnQgdG8gYW1lbmQgaXQgYWZ0ZXIgZml4aW5nIHRoZSBtZXNzYWdlLCBvciBzZXQgdGhlIGNvbmZpZ1xuIgorInZhcmlhYmxlIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gdGhlIGVuY29kaW5nIHlvdXIgcHJvamVjdCB1c2VzLlxuIgogbXNnc3RyICIiCi0iTGEgc3VwcHJlc3Npb24gZGVzIGJyYW5jaGVzIHN1aXZhbnRlcyBhIMOpY2hvdcOpIDpcbiIKKyJBdmVydGlzc2VtZW50wqA6IGxlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiBuZSBzZSBjb25mb3JtZSBwYXMgw6AgVVRGLTguXG4iCisiVm91cyBzb3VoYWl0ZXogcGV1dC3DqnRyZSBsZSBtb2RpZmllciBhcHLDqHMgY29ycmVjdGlvbiBkdSBtZXNzYWdlIG91IHLDqWdsZXIgIgorImxhXG4iCisidmFyaWFibGUgZGUgY29uZmlndXJhdGlvbiBpMThuLmNvbW1pdGVuY29kaW5nIMOgIGwnZW5jb2RhZ2UgdXRpbGlzw6kgcGFyIHZvdHJlICIKKyJwcm9qZXQuXG4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMgorbXNnaWQgImNvbW1pdC1ncmFwaCBmaWxlIGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAibGUgZ3JhcGhlIGRlIGNvbW1pdCBlc3QgdHJvcCBwZXRpdCIKKworIzogY29tbWl0LWdyYXBoLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBzaWduYXR1cmUgJVggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlICVYIgorbXNnc3RyICIiCisibGEgc2lnbmF0dXJlIGR1IGdyYXBoZSBkZSBjb21taXQgJVggbmUgY29ycmVzcG9uZCBwYXMgw6AgbGEgc2lnbmF0dXJlICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAibGEgdmVyc2lvbiAlWCBkdSBncmFwaGUgZGUgY29tbWl0IG5lIGNvcnJlc3BvbmQgcGFzIMOgIGxhIHZlcnNpb24gJVgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgIiIKKyJsJ2VtcHJlaW50ZSBkZSBsYSB2ZXJzaW9uICVYIGR1IGdyYXBoZSBkZSBjb21taXQgbmUgY29ycmVzcG9uZCBwYXMgw6AgbGEgIgorInZlcnNpb24gJVgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIyNgorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBsb29rdXAgdGFibGUgZW50cnkgbWlzc2luZzsgZmlsZSBtYXkgYmUgaW5jb21wbGV0ZSIKK21zZ3N0ciAiIgorImVudHLDqWUgZGUgdGFibGUgZGUgY29uc3VsdGF0aW9uIGRlIG1vcmNlYXV4IGRlIGdyYXBoZSBkZSBjb21taXRlIG1hbnF1YW50ZcKgOyAiCisibGUgZmljaGllciBlc3QgcGV1dCDDqnRyZSBpbmNvbXBsZXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaW1wcm9wZXIgY2h1bmsgb2Zmc2V0ICUwOHglMDh4IgorbXNnc3RyICJkw6ljYWxhZ2UgZGUgYmxvYyAlMDh4JTA4eCBkdSBncmFwaGUgZGUgY29tbWl0IGluYWTDqXF1YXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggY2h1bmsgaWQgJTA4eCBhcHBlYXJzIG11bHRpcGxlIHRpbWVzIgorbXNnc3RyICJsJ2lkIGRlIGJsb2MgZGUgZ3JhcGhlIGRlIGNvbW1pdCAlMDh4IGFwcGFyYcOudCBkZXMgbXVsdGlwbGVzIGZvaXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM0MworbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgbm8gYmFzZSBncmFwaHMgY2h1bmsiCittc2dzdHIgImxlIGdyYXBoZSBkZSBjb21taXQgbidhIHBhcyBkZSBzZWN0aW9uIGRlIGdyYXBoZXMgZGUgYmFzZSIKKworIzogY29tbWl0LWdyYXBoLmM6MzUzCittc2dpZCAiY29tbWl0LWdyYXBoIGNoYWluIGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJsYSBjaGHDrm5lIGRlIGdyYXBoZSBkZSBjb21taXQgbmUgY29ycmVzcG9uZCBwYXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdC1ncmFwaCBjaGFpbjogbGluZSAnJXMnIG5vdCBhIGhhc2giCittc2dzdHIgIiIKKyJjaGHDrm5lIGRlIGdyYXBoZSBkZSBjb21taXQgaW52YWxpZGXCoDogbGEgbGlnbmUgJyVzJyBuJ2VzdCBwYXMgdW5lIGVtcHJlaW50ZSIKKworIzogY29tbWl0LWdyYXBoLmM6NDI1Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgYWxsIGNvbW1pdC1ncmFwaCBmaWxlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB0cm91dmVyIHRvdXMgbGVzIGZpY2hpZXJzIGR1IGdyYXBoZSBkZSBjb21taXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU1OCBjb21taXQtZ3JhcGguYzo2MTgKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBwb3NpdGlvbi4gY29tbWl0LWdyYXBoIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICIiCisicG9zaXRpb24gZGUgY29tbWl0IGludmFsaWRlLiBMZSBncmFwaGUgZGUgY29tbWl0IGVzdCB2cmFpc2VtYmxhYmxlbWVudCAiCisiY29ycm9tcHUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgdHJvdXZlciBsZSBjb21taXQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjg1MiBidWlsdGluL2FtLmM6MTI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgY29tbWl0ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDExIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHR5cGUgb2Ygb2JqZWN0ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb2J0ZW5pciBsZSB0eXBlIGRlIGwnb2JqZXQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNDMKK21zZ2lkICJMb2FkaW5nIGtub3duIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJMZWN0dXJlIGRlcyBjb21taXRzIGNvbm51cyBkYW5zIHVuIGdyYXBoZSBkZSBjb21taXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNjAKK21zZ2lkICJFeHBhbmRpbmcgcmVhY2hhYmxlIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJFeHBhbnNpb24gZGVzIGNvbW1pdHMgam9pZ25hYmxlcyBkYW5zIHVuIGdyYXBoZSBkZSBjb21taXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNzkKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJTdXBwcmVzc2lvbiBsZXMgbWFycXVlcyBkZSBjb21taXQgZGFucyBsZSBncmFwaGUgZGUgY29tbWl0cyIKKworIzogY29tbWl0LWdyYXBoLmM6MTA5OAorbXNnaWQgIkNvbXB1dGluZyBjb21taXQgZ3JhcGggZ2VuZXJhdGlvbiBudW1iZXJzIgorbXNnc3RyICJDYWxjdWwgZGVzIGNoaWZmcmVzIGRlIGfDqW7DqXJhdGlvbiBkdSBncmFwaGUgZGUgY29tbWl0cyIKKworIzogY29tbWl0LWdyYXBoLmM6MTE3MworIywgYy1mb3JtYXQKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrcyIKK21zZ3N0clswXSAiUmVjaGVyY2hlIGRlIGNvbW1pdHMgcG91ciB1biBncmFwaGUgZGUgY29tbWl0cyBkYW5zICVkIHBhcXVldCIKK21zZ3N0clsxXSAiUmVjaGVyY2hlIGRlIGNvbW1pdHMgcG91ciB1biBncmFwaGUgZGUgY29tbWl0cyBkYW5zICVkIHBhcXVldHMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgYWRkaW5nIHBhY2sgJXMiCittc2dzdHIgImVycmV1ciDDoCBsJ2Fqb3V0IGR1IHBhY2tldCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBvcGVuaW5nIGluZGV4IGZvciAlcyIKK21zZ3N0ciAiZXJyZXVyIMOgIGwnb3V2ZXJ0dXJlIGRlIGwnaW5kZXggcG91ciAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBmcm9tICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWZzIgorbXNnc3RyWzBdICJSZWNoZXJjaGUgZGUgY29tbWl0cyBwb3VyIHVuIGdyYXBoZSBkZSBjb21taXRzIGRlcHVpcyAlZCByw6lmIgorbXNnc3RyWzFdICJSZWNoZXJjaGUgZGUgY29tbWl0cyBwb3VyIHVuIGdyYXBoZSBkZSBjb21taXRzIGRlcHVpcyAlZCByw6lmcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBvYmplY3QgaWQ6ICVzIgorbXNnc3RyICJpZGVudGlmaWFudCBkJ29iamV0IGNvbW1pdCBpbnZhbGlkZSA6ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjQ5Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggYW1vbmcgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIiIKKyJSZWNoZXJjaGUgZGUgY29tbWl0cyBwb3VyIHVuIGdyYXBoZSBkZSBjb21taXRzIHBhcm1pIGxlcyBvYmpldHMgZW1wYXF1ZXTDqXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNjQKK21zZ2lkICJDb3VudGluZyBkaXN0aW5jdCBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiQ29tcHRhZ2UgZGVzIGNvbW1pdHMgZGlzdGluY3RzIGRhbnMgdW4gZ3JhcGhlIGRlIGNvbW1pdCIKKworIzogY29tbWl0LWdyYXBoLmM6MTI5NAorbXNnaWQgIkZpbmRpbmcgZXh0cmEgZWRnZXMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJSZWNoZXJjaGUgZCdhcsOqdGVzIHN1cHBsw6ltZW50YWlyZXMgZGFucyB1biBncmFwaGUgZGUgY29tbWl0cyIKKworIzogY29tbWl0LWdyYXBoLmM6MTM0MAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb3JyZWN0IG51bWJlciBvZiBiYXNlIGdyYXBoIGlkcyIKK21zZ3N0ciAiw6ljaGVjIMOgIGwnw6ljcml0dXJlIGxlIG5vbWJyZSBjb3JyZWN0IGQnaWQgZGUgYmFzZSBkZSBmdXNpb24iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNzMgbWlkeC5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlcyByw6lwZXJ0b2lyZXMgZGUgcHJlbWllciBuaXZlYXUgZGUgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzODUgYnVpbHRpbi9pbmRleC1wYWNrLmM6MzA2IGJ1aWx0aW4vcmVwYWNrLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgJyVzJyIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzcyIKK21zZ2lkX3BsdXJhbCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3NlcyIKK21zZ3N0clswXSAiw4ljcml0dXJlIGxlIGdyYXBoZSBkZSBjb21taXRzIGVuICVkIHBhc3NlIgorbXNnc3RyWzFdICLDiWNyaXR1cmUgbGUgZ3JhcGhlIGRlIGNvbW1pdHMgZW4gJWQgcGFzc2VzIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDg2Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gY29tbWl0LWdyYXBoIGNoYWluIGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgbGUgZmljaGllciBkZSBncmFwaGUgZGUgY29tbWl0IgorCisjOiBjb21taXQtZ3JhcGguYzoxNDk4Cittc2dpZCAiZmFpbGVkIHRvIHJlbmFtZSBiYXNlIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICLDqWNoZWMgZHUgcmVub21tYWdlIGR1IGZpY2hpZXIgZGUgZ3JhcGhlIGRlIGNvbW1pdHMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE1MTgKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIHRlbXBvcmFyeSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZW5vbW1lciBsZSBmaWNoaWVyIHRlbXBvcmFpcmUgZGUgZ3JhcGhlIGRlIGNvbW1pdHMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2MzEKK21zZ2lkICJTY2FubmluZyBtZXJnZWQgY29tbWl0cyIKK21zZ3N0ciAiQW5hbHlzZSBkZXMgY29tbWl0cyBkZSBmdXNpb24iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkdXBsaWNhdGUgY29tbWl0IGlkICVzIgorbXNnc3RyICJpZCBkZSBjb21taXQgJXMgZHVwbGlxdcOpIGluYXR0ZW5kdSIKKworIzogY29tbWl0LWdyYXBoLmM6MTY2NQorbXNnaWQgIk1lcmdpbmcgY29tbWl0LWdyYXBoIgorbXNnc3RyICJmdXNpb24gZHUgZ3JhcGhlIGRlIGNvbW1pdHMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIGNvbW1pdCBncmFwaCBmb3JtYXQgY2Fubm90IHdyaXRlICVkIGNvbW1pdHMiCittc2dzdHIgImxlIGdyYXBoZSBkZSBjb21taXRzIG5lIHBldXQgcGFzIMOpY3JpcmUgJWQgY29tbWl0cyIKKworIzogY29tbWl0LWdyYXBoLmM6MTg1NQorbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgdG8gd3JpdGUgZ3JhcGgiCittc2dzdHIgInRyb3AgZGUgY29tbWl0cyBwb3VyIMOpY3JpcmUgdW4gZ3JhcGhlIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTQ0Cittc2dpZCAidGhlIGNvbW1pdC1ncmFwaCBmaWxlIGhhcyBpbmNvcnJlY3QgY2hlY2tzdW0gYW5kIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICIiCisibGUgZ3JhcGhlIGRlIGNvbW1pdCBhIHVuZSBzb21tZSBkZSBjb250csO0bGUgaW5jb3JyZWN0ZSBldCBlc3QgIgorInZyYWlzZW1ibGFibGVtZW50IGNvcnJvbXB1IgorCisjOiBjb21taXQtZ3JhcGguYzoxOTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IE9JRCBvcmRlcjogJXMgdGhlbiAlcyIKK21zZ3N0ciAibGUgZ3JhcGhlIGRlIGNvbW1pdCBhIHVuIG9yZHJlIGQnT0lEIGluY29ycmVjdMKgOiAlcyBwdWlzICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTY0IGNvbW1pdC1ncmFwaC5jOjE5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgZmFub3V0IHZhbHVlOiBmYW5vdXRbJWRdID0gJXUgIT0gJXUiCittc2dzdHIgIiIKKyJsZSBncmFwaGUgZGUgY29tbWl0IGEgdW5lIHZhbGV1ciBkZSBkaXNwZXJzaW9uIGluY29ycmVjdGUgOiBkaXNwZXJzaW9uWyVkXSA9ICIKKyIldSAhPSAldSIKKworIzogY29tbWl0LWdyYXBoLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gY29tbWl0LWdyYXBoIgorbXNnc3RyICLDqWNoZWMgZGUgbCdhbmFseXNlIGxlIGNvbW1pdCAlcyBkZXB1aXMgbGUgZ3JhcGhlIGRlIGNvbW1pdHMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5ODkKK21zZ2lkICJWZXJpZnlpbmcgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIlZlcmlmaWNhdGlvbiBkZXMgY29tbWl0cyBkYW5zIGxlIGdyYXBoZSBkZSBjb21taXRzIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBjb21taXQgJXMgZnJvbSBvYmplY3QgZGF0YWJhc2UgZm9yIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorIsOpY2hlYyBkZSBsJ2FuYWx5c2UgZHUgY29tbWl0ICVzIGRlcHVpcyBsYSBiYXNlIGRlIGRvbm7DqWVzIGQnb2JqZXRzIHBvdXIgbGUgIgorImdyYXBoZSBkZSBjb21taXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiIgorImwnT0lEIGRlIGwnYXJicmUgcmFjaW5lIHBvdXIgbGUgY29tbWl0ICVzIGRhbnMgbGUgZ3JhcGhlIGRlIGNvbW1pdCBlc3QgJXMgIT0gIgogIiVzIgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjIyCi1tc2dpZCAiUmVuYW1lIEJyYW5jaCIKLW1zZ3N0ciAiUmVub21tZXIgYnJhbmNoZSIKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBsaXN0IGZvciBjb21taXQgJXMgaXMgdG9vIGxvbmciCittc2dzdHIgIiIKKyJsYSBsaXN0ZSBkZXMgcGFyZW50cyBkdSBncmFwaGUgZGUgY29tbWl0IHBvdXIgbGUgY29tbWl0ICVzIGVzdCB0cm9wIGxvbmd1ZSIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjI2Ci1tc2dpZCAiUmVuYW1lIgotbXNnc3RyICJSZW5vbW1lciIKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBmb3IgJXMgaXMgJXMgIT0gJXMiCittc2dzdHIgImxlIHBhcmVudCBkdSBncmFwaGUgZGUgY29tbWl0IHBvdXIgJXMgZXN0ICVzICE9ICVzIgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzYKLW1zZ2lkICJCcmFuY2g6IgotbXNnc3RyICJCcmFuY2hlIDoiCisjOiBjb21taXQtZ3JhcGguYzoyMDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIHRlcm1pbmF0ZXMgZWFybHkiCittc2dzdHIgIiIKKyJsYSBsaXN0ZSBkZSBwYXJlbnRzIGR1IGdyYXBoZSBkZSBjb21taXQgcG91ciBsZSBjb21taXQgJXMgc2UgdGVybWluZSB0cm9wIHTDtHQiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozOQotbXNnaWQgIk5ldyBOYW1lOiIKLW1zZ3N0ciAiTm91dmVhdSBub20gOiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjc1Ci1tc2dpZCAiUGxlYXNlIHNlbGVjdCBhIGJyYW5jaCB0byByZW5hbWUuIgotbXNnc3RyICJNZXJjaSBkZSBzw6lsZWN0aW9ubmVyIHVuZSBicmFuY2hlIMOgIHJlbm9tbWVyLiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MjAyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJMYSBicmFuY2hlICclcycgZXhpc3RlIGTDqWrDoC4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgotbXNnc3RyICLDiWNoZWMgcG91ciByZW5vbW1lciAnJXMnLiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjE3Ci1tc2dpZCAiU3RhcnRpbmcuLi4iCi1tc2dzdHIgIkxhbmNlbWVudC4uLiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI2Ci1tc2dpZCAiRmlsZSBCcm93c2VyIgotbXNnc3RyICJWaXNpb25uZXVyIGRlIGZpY2hpZXIiCi0KLSM6IGxpYi9icm93c2VyLnRjbDoxMjYgbGliL2Jyb3dzZXIudGNsOjE0MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvYWRpbmcgJXMuLi4iCi1tc2dzdHIgIkNoYXJnZW1lbnQgZGUgJXMuLi4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoxODcKLW1zZ2lkICJbVXAgVG8gUGFyZW50XSIKLW1zZ3N0ciAiW0p1c3F1J2F1IHBhcmVudF0iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNjcgbGliL2Jyb3dzZXIudGNsOjI3MwotbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCi1tc2dzdHIgIk5hdmlndWVyIGRhbnMgbGVzIGZpY2hpZXJzIGRlIGxlIGJyYW5jaGUiCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNzggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTgKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk3Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjgKLW1zZ2lkICJCcm93c2UiCi1tc2dzdHIgIk5hdmlndWVyIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKLW1zZ3N0ciAiUsOpY3Vww6lyYXRpb24gZGUgJXMgw6AgcGFydGlyIGRlICVzIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgImZhdGFsOiBDYW5ub3QgcmVzb2x2ZSAlcyIKLW1zZ3N0ciAiZXJyZXVyIGZhdGFsZSA6IEltcG9zc2libGUgZGUgcsOpc291ZHJlICVzIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQotIzogbGliL3NzaGtleS50Y2w6NTMKLW1zZ2lkICJDbG9zZSIKLW1zZ3N0ciAiRmVybWVyIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKLW1zZ3N0ciAiTGEgYnJhbmNoZSAnJXMnIG4nZXhpc3RlIHBhcy4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTk0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBzaW1wbGlmaWVkIGdpdC1wdWxsIGZvciAnJXMnLiIKLW1zZ3N0ciAiw4ljaGVjIGRlIGxhIGNvbmZpZ3VyYXRpb24gc2ltcGxpZmnDqWUgZGUgZ2l0LXB1bGwgcG91ciAnJXMnLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjkKLSMsIHRjbC1mb3JtYXQKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNDcKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgotIlxuIgotIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCi0iQSBtZXJnZSBpcyByZXF1aXJlZC4iCisiY29tbWl0LWdyYXBoIGhhcyBnZW5lcmF0aW9uIG51bWJlciB6ZXJvIGZvciBjb21taXQgJXMsIGJ1dCBub24temVybyBlbHNld2hlcmUiCiBtc2dzdHIgIiIKLSJMYSBicmFuY2hlICclcycgZXhpc3RlIGTDqWrDoC5cbiIKLSJcbiIKLSJJbXBvc3NpYmxlIGRlIGZhaXJlIHVuZSBhdmFuY2UgcmFwaWRlIChmYXN0IGZvcndhcmQpIHZlcnMgJXMuXG4iCi0iVW5lIGZ1c2lvbiBlc3QgbsOpY2Vzc2FpcmUuIgorImxlIGdyYXBoZSBkZSBjb21taXQgYSB1biBudW3DqXJvIGRlIGfDqW7DqXJhdGlvbiBudWwgcG91ciBsZSBjb21taXQgJXMsIG1haXMgIgorIm5vbi1udWwgYWlsbGV1cnMiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiTGEgc3RyYXTDqWdpZSBkZSBmdXNpb24gJyVzJyBuJ2VzdCBwYXMgc3VwcG9ydMOpZS4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKLW1zZ3N0ciAiTGEgbWlzZSDDoCBqb3VyIGRlICclcycgYSDDqWNob3XDqS4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjc0Ci1tc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgotbXNnc3RyICJMJ2luZGV4IChzdGFnaW5nIGFyZWEpIGVzdCBkw6lqw6AgdmVycm91aWxsw6kuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI4OQorIzogY29tbWl0LWdyYXBoLmM6MjA1MQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyJjb21taXQtZ3JhcGggaGFzIG5vbi16ZXJvIGdlbmVyYXRpb24gbnVtYmVyIGZvciBjb21taXQgJXMsIGJ1dCB6ZXJvIGVsc2V3aGVyZSIKIG1zZ3N0ciAiIgotIkwnw6l0YXQgbG9ycyBkZSBsYSBkZXJuacOocmUgc3luY2hyb25pc2F0aW9uIG5lIGNvcnJlc3BvbmQgcGx1cyDDoCBsJ8OpdGF0IGR1ICIKLSJkw6lww7R0LlxuIgotIlxuIgotIlVuIGF1dHJlIHByb2dyYW1tZSBHaXQgYSBtb2RpZmnDqSBjZSBkw6lww7R0IGRlcHVpcyBsYSBkZXJuacOocmUgIgotInN5bmNocm9uaXNhdGlvbi4gVW5lIHJlc3luY2hyb25pc2F0aW9uIGRvaXQgw6p0cmUgZWZmZWN0dcOpZSBhdmFudCBkZSBwb3V2b2lyICIKLSJtb2RpZmllciBsYSBicmFuY2hlIGNvdXJhbnRlLlxuIgotIlxuIgotIkNlbGEgdmEgw6p0cmUgZmFpdCB0b3V0IGRlIHN1aXRlIGF1dG9tYXRpcXVlbWVudC5cbiIKKyJsZSBncmFwaGUgZGUgY29tbWl0IGEgdW4gbnVtw6lybyBkZSBnw6luw6lyYXRpb24gbm9uLW51bCBwb3VyIGxlIGNvbW1pdCAlcywgIgorIm1haXMgbnVsIGFpbGxldXJzIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvICclcycuLi4iCi1tc2dzdHIgIk1pc2Ugw6Agam91ciBkdSByw6lwZXJ0b2lyZSBjb3VyYW50IGF2ZWMgJyVzJy4uLiIKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGdlbmVyYXRpb24gZm9yIGNvbW1pdCAlcyBpcyAldSAhPSAldSIKK21zZ3N0ciAibGEgZ8OpbsOpcmF0aW9uIGR1IGdyYXBoZSBkZSBjb21taXQgcG91ciBsZSBjb21taXQgJXMgZXN0ICV1ICE9ICV1IgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgotbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgotbXNnc3RyICJmaWNoaWVycyBjaGFyZ8OpcyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorIzogY29tbWl0LWdyYXBoLmM6MjA3MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgZGF0ZSBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlPFBSSXVNQVg+ICE9ICU8UFJJdU1BWD4iCiBtc2dzdHIgIiIKLSJDaGFyZ2VtZW50IGRlICclcycgYWJhbmRvbm7DqSAoaWwgZXN0IG7DqWNlc3NhaXJlIGRlIGZ1c2lvbm5lciBkZXMgZmljaGllcnMpLiIKKyJsYSBkYXRlIGRlIHZhbGlkYXRpb24gcG91ciBsZSBjb21taXQgJXMgZGFucyBsZSBncmFwaGUgZGUgY29tbWl0IGVzdCAiCisiJTxQUkl1TUFYPiAhPSAlPFBSSXVNQVg+IgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NwotbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgotbXNnc3RyICJJbCBlc3QgbsOpY2Vzc2FpcmUgZGUgZnVzaW9ubmVyIGRlcyBmaWNoaWVycy4iCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgInBsdXMgZGUgbcOpbW9pcmUiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzgxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU3RheWluZyBvbiBicmFuY2ggJyVzJy4iCi1tc2dzdHIgIkxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwgcmVzdGUgc3VyIGxhIGJyYW5jaGUgJyVzJy4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDUyCisjOiBjb25maWcuYzoxMjQKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIllvdSBhcmUgbm8gbG9uZ2VyIG9uIGEgbG9jYWwgYnJhbmNoLlxuIgotIlxuIgotIklmIHlvdSB3YW50ZWQgdG8gYmUgb24gYSBicmFuY2gsIGNyZWF0ZSBvbmUgbm93IHN0YXJ0aW5nIGZyb20gJ1RoaXMgRGV0YWNoZWQgIgotIkNoZWNrb3V0Jy4iCisiZXhjZWVkZWQgbWF4aW11bSBpbmNsdWRlIGRlcHRoICglZCkgd2hpbGUgaW5jbHVkaW5nXG4iCisiXHQlc1xuIgorImZyb21cbiIKKyJcdCVzXG4iCisiVGhpcyBtaWdodCBiZSBkdWUgdG8gY2lyY3VsYXIgaW5jbHVkZXMuIgogbXNnc3RyICIiCi0iVm91cyBuJ8OqdGVzIHBsdXMgc3VyIHVuZSBicmFuY2hlIGxvY2FsZS5cbiIKLSJcbiIKLSJTaSB2b3VzIHZvdWxpZXogw6p0cmUgc3VyIHVuZSBicmFuY2hlLCBjcsOpZXotZW4gdW5lIG1haW50ZW5hbnQgZW4gcGFydGFudCBkZSAiCi0iJ0NldCBlbXBydW50IGTDqXRhY2jDqScuIgorInByb2ZvbmRldXIgZCdpbmNsdXNpb24gbWF4aW11bSAoJWQpIGTDqXBhc3PDqWUgw6AgbCdpbmNsdXNpb24gZGVcbiIKKyJcdCVzXG4iCisiZGVwdWlzXG4iCisiXHQlc1xuIgorInBvc3NpYmlsaXTDqSBkJ2luY2x1c2lvbnMgbXVsdGlwbGVzLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDMgbGliL2NoZWNrb3V0X29wLnRjbDo1MDcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDaGVja2VkIG91dCAnJXMnLiIKLW1zZ3N0ciAiJyVzJyBjaGFyZ8OpLiIKKyM6IGNvbmZpZy5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhwYW5kIGluY2x1ZGUgcGF0aCAnJXMnIgorbXNnc3RyICJleHBhbnNpb24gaW1wb3NzaWJsZSBkdSBjaGVtaW4gZCdpbmNsdXNpb24gJyVzJyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgotbXNnc3RyICJSw6lpbml0aWFsaXNlciAnJXMnIMOgICclcycgdmEgZmFpcmUgcGVyZHJlIGxlcyBjb21taXRzIHN1aXZhbnRzIDoiCisjOiBjb25maWcuYzoxNTEKK21zZ2lkICJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZXMgbXVzdCBjb21lIGZyb20gZmlsZXMiCittc2dzdHIgImxlcyBpbmNsdXNpb25zIGRlIGNvbmZpZ3VyYXRpb24gcmVsYXRpdmVzIGRvaXZlbnQgdmVuaXIgZGUgZmljaGllcnMiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Ci1tc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKLW1zZ3N0ciAiUsOpY3Vww6lyZXIgbGVzIGNvbW1pdHMgcGVyZHVzIG5lIHNlcmEgcGV1dCDDqnRyZSBwYXMgZmFjaWxlLiIKKyM6IGNvbmZpZy5jOjE5NworbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAiIgorImxlcyBjb25kaXRpb25zIGQnaW5jbHVzaW9uIGRlIGNvbmZpZ3VyYXRpb24gcmVsYXRpdmUgZG9pdmVudCB2ZW5pciBkZSAiCisiZmljaGllcnMiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXQgJyVzJz8iCi1tc2dzdHIgIlLDqWluaXRpYWxpc2VyICclcycgPyIKKyM6IGNvbmZpZy5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiBhIHNlY3Rpb246ICVzIgorbXNnc3RyICJsYSBjbMOpIG5lIGNvbnRpZW50IHBhcyBkZSBzZWN0aW9uOiAlcyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjcgbGliL21lcmdlLnRjbDoxNjQgbGliL3Rvb2xzX2RsZy50Y2w6MzQzCi1tc2dpZCAiVmlzdWFsaXplIgotbXNnc3RyICJWaXN1YWxpc2VyIgorIzogY29uZmlnLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImtleSBkb2VzIG5vdCBjb250YWluIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJsYSBjbMOpIG5lIGNvbnRpZW50IHBhcyBkZSBub20gZGUgdmFyaWFibGXCoDogJXMiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1Ci0jLCB0Y2wtZm9ybWF0CisjOiBjb25maWcuYzo0MDYgc2VxdWVuY2VyLmM6MjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleTogJXMiCittc2dzdHIgImNsw6kgaW52YWxpZGXCoDogJXMiCisKKyM6IGNvbmZpZy5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIgorbXNnc3RyICJjbMOpIGludmFsaWRlIChyZXRvdXIgY2hhcmlvdCnCoDogJXMiCisKKyM6IGNvbmZpZy5jOjQ0OCBjb25maWcuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29uZmlnIHBhcmFtZXRlcjogJXMiCittc2dzdHIgInBhcmFtw6h0cmUgZGUgY29uZmlndXJhdGlvbiBtYWwgZm9ybcOpOiAlcyIKKworIzogY29uZmlnLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGZvcm1hdCBpbiAlcyIKK21zZ3N0ciAiZm9ybWF0YWdlIG1hbCBmb3Jtw6kgZGFucyAlcyIKKworIzogY29uZmlnLmM6ODIxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBibG9iICVzIgorbXNnc3RyICJsaWduZSAlZCBkZSBjb25maWcgaW5jb3JyZWN0ZSBkYW5zIGxlIGJsb2IgJXMiCisKKyM6IGNvbmZpZy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gZmlsZSAlcyIKK21zZ3N0ciAibGlnbmUgJWQgZGUgY29uZmlnIGluY29ycmVjdGUgZGFucyBsZSBmaWNoaWVyICVzIgorCisjOiBjb25maWcuYzo4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsaWduZSAlZCBkZSBjb25maWcgaW5jb3JyZWN0ZSBkYW5zIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogY29uZmlnLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdWJtb2R1bGUtYmxvYiAlcyIKK21zZ3N0ciAibGlnbmUgJWQgZGUgY29uZmlnIGluY29ycmVjdGUgZGFucyBsZSBibG9iIGRlIHNvdXMtbW9kdWxlICVzIgorCisjOiBjb25maWcuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIKK21zZ3N0ciAibGlnbmUgJWQgZGUgY29uZmlnIGluY29ycmVjdGUgZGFucyBsYSBsaWduZSBkZSBjb21tYW5kZSAlcyIKKworIzogY29uZmlnLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiAlcyIKK21zZ3N0ciAibGlnbmUgJWQgZGUgY29uZmlnIGluY29ycmVjdGUgZGFucyAlcyIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAib3V0IG9mIHJhbmdlIgorbXNnc3RyICJob3JzIHBsYWdlIgorCisjOiBjb25maWcuYzo5NzgKK21zZ2lkICJpbnZhbGlkIHVuaXQiCittc2dzdHIgInVuaXTDqSBpbnZhbGlkZSIKKworIzogY29uZmlnLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAidmFsZXVyIG51bcOpcmlxdWUgZGUgY29uZmlndXJhdGlvbiBpbnZhbGlkZSAnJXMnIHBvdXIgJyVzJ8KgOiAlcyIKKworIzogY29uZmlnLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGJsb2IgJXM6ICVzIgorbXNnc3RyICIiCisidmFsZXVyIG51bcOpcmlxdWUgZGUgY29uZmlndXJhdGlvbiBpbmNvcnJlY3RlICclcycgcG91ciAnJXMnIGRhbnMgbGUgYmxvYiAiCisiJXPCoDogJXMiCisKKyM6IGNvbmZpZy5jOjEwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gZmlsZSAlczogJXMiCittc2dzdHIgIiIKKyJ2YWxldXIgbnVtw6lyaXF1ZSBkZSBjb25maWd1cmF0aW9uIGluY29ycmVjdGUgJyVzJyBwb3VyICclcycgZGFucyBsZSBmaWNoaWVyICIKKyIlc8KgOiAlcyIKKworIzogY29uZmlnLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogJXMiCittc2dzdHIgIiIKKyJ2YWxldXIgbnVtw6lyaXF1ZSBkZSBjb25maWd1cmF0aW9uIGluY29ycmVjdGUgJyVzJyBwb3VyICclcycgZGFucyBsJ2VudHLDqWUgIgorInN0YW5kYXJkwqA6ICVzIgorCisjOiBjb25maWcuYzoxMDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN1Ym1vZHVsZS1ibG9iICVzOiAlcyIKK21zZ3N0ciAiIgorInZhbGV1ciBudW3DqXJpcXVlIGRlIGNvbmZpZ3VyYXRpb24gaW5jb3JyZWN0ZSAnJXMnIHBvdXIgJyVzJyBkYW5zIGxlIGJsb2IgZGUgIgorInNvdXMtbW9kdWxlICVzwqA6ICVzIgorCisjOiBjb25maWcuYzoxMDEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiCittc2dzdHIgIiIKKyJ2YWxldXIgbnVtw6lyaXF1ZSBkZSBjb25maWd1cmF0aW9uIGluY29ycmVjdGUgJyVzJyBwb3VyICclcycgZGFucyBsYSBsaWduZSBkZSAiCisiY29tbWFuZGUgJXPCoDogJXMiCisKKyM6IGNvbmZpZy5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXM6ICVzIgorbXNnc3RyICIiCisidmFsZXVyIG51bcOpcmlxdWUgZGUgY29uZmlndXJhdGlvbiBpbmNvcnJlY3RlICclcycgcG91ciAnJXMnIGRhbnMgJXPCoDogJXMiCisKKyM6IGNvbmZpZy5jOjExMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpdGVuZHJlIGxlIHLDqXBlcnRvaXJlIHV0aWxpc2F0ZXVyIGRhbnMgOiAnJXMnIgorCisjOiBjb25maWcuYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIHBvdXIgJyVzJyBuJ2VzdCBwYXMgdW4gaG9yb2RhdGFnZSB2YWxpZGUiCisKKyM6IGNvbmZpZy5jOjEyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJicmV2IGxlbmd0aCBvdXQgb2YgcmFuZ2U6ICVkIgorbXNnc3RyICJsb25ndWV1ciBkJ2FiYnJldiBob3JzIHBsYWdlwqA6ICVkIgorCisjOiBjb25maWcuYzoxMjIyIGNvbmZpZy5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIm5pdmVhdSBkZSBjb21wcmVzc2lvbiB6bGliIGluY29ycmVjdCAlZCIKKworIzogY29uZmlnLmM6MTMyNQorbXNnaWQgImNvcmUuY29tbWVudENoYXIgc2hvdWxkIG9ubHkgYmUgb25lIGNoYXJhY3RlciIKK21zZ3N0ciAiY29yZS5jb21tZW50Q2hhciBuZSBkZXZyYWl0IMOqdHJlIHF1J3VuIHVuaXF1ZSBjYXJhY3TDqHJlIgorCisjOiBjb25maWcuYzoxMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIKK21zZ3N0ciAibW9kZSBpbnZhbGlkZSBwb3VyIGxhIGNyw6lhdGlvbiBkJ29iamV0IDogJXMiCisKKyM6IGNvbmZpZy5jOjE0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAidmFsZXVyIG1hbCBmb3Jtw6llIHBvdXIgJXMiCisKKyM6IGNvbmZpZy5jOjE0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgInZhbGV1ciBtYWwgZm9ybcOpZSBwb3VyICVzwqA6ICVzIgorCisjOiBjb25maWcuYzoxNDU3Cittc2dpZCAibXVzdCBiZSBvbmUgb2Ygbm90aGluZywgbWF0Y2hpbmcsIHNpbXBsZSwgdXBzdHJlYW0gb3IgY3VycmVudCIKK21zZ3N0ciAiZG9pdCDDqnRyZSBwYXJtaSBub3RoaW5nLCBtYXRjaGluZywgc2ltcGxlLCB1cHN0cmVhbSBvdSBjdXJyZW50IgorCisjOiBjb25maWcuYzoxNTE4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjayBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAibml2ZWF1IGRlIGNvbXByZXNzaW9uIGR1IHBhcXVldCAlZCIKKworIzogY29uZmlnLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBjb25maWcgYmxvYiBvYmplY3QgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjaGFyZ2VyIGwnb2JqZXQgYmxvYiBkZSBjb25maWcgJyVzJyIKKworIzogY29uZmlnLmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGJsb2IiCittc2dzdHIgImxhIHLDqWbDqXJlbmNlICclcycgbmUgcG9pbnRlIHBhcyBzdXIgdW4gYmxvYiIKKworIzogY29uZmlnLmM6MTY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBjb25maWcgYmxvYiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSBsZSBibG9iIGRlIGNvbmZpZyAnJXMnIgorCisjOiBjb25maWcuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnYW5hbHlzZSBkZSAlcyIKKworIzogY29uZmlnLmM6MTc0MworbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICJsZWN0dXJlIGRlIGxhIGNvbmZpZ3VyYXRpb24gZGUgbGlnbmUgZGUgY29tbWFuZGUgaW1wb3NzaWJsZSIKKworIzogY29uZmlnLmM6MjA5NworbXNnaWQgInVua25vd24gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyIKK21zZ3N0ciAiZXJyZXVyIGluY29ubnVlIHBlbmRhbnQgbGEgbGVjdHVyZSBkZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbiIKKworIzogY29uZmlnLmM6MjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICIlcyBpbnZhbGlkZSA6ICclcyciCisKKyM6IGNvbmZpZy5jOjIzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIHZhbHVlICclZCcgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwIgorbXNnc3RyICIiCisibGEgdmFsZXVyICclZCcgZGUgc3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIGRldnJhaXQgc2Ugc2l0dWVyIGVudHJlIDAgZXQgIgorIjEwMCIKKworIzogY29uZmlnLmM6MjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyVzJyBmcm9tIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgJyVzJyBkZXB1aXMgbGUgY29uZmlndXJhdGlvbiBlbiBsaWduZSBkZSBjb21tYW5kZSIKKworIzogY29uZmlnLmM6MjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIHZhcmlhYmxlICclcycgaW4gZmlsZSAnJXMnIGF0IGxpbmUgJWQiCittc2dzdHIgIiIKKyJ2YXJpYWJsZSBkZSBjb25maWd1cmF0aW9uICclcycgaW5jb3JyZWN0ZSBkYW5zIGxlIGZpY2hpZXIgJyVzJyDDoCBsYSBsaWduZSAlZCIKKworIzogY29uZmlnLmM6MjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZSAnJXMnIgorbXNnc3RyICJub20gZGUgc2VjdGlvbiBpbnZhbGlkZSAnJXMnIgorCisjOiBjb25maWcuYzoyNDczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgIiVzIGEgZGVzIHZhbGV1cnMgbXVsdGlwbGVzIgorCisjOiBjb25maWcuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gJXMiCisKKyM6IGNvbmZpZy5jOjI3NTQgY29uZmlnLmM6MzA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB2ZXJyb3VpbGxlciBsZSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gJXMiCisKKyM6IGNvbmZpZy5jOjI3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyAlcyIKK21zZ3N0ciAib3V2ZXJ0dXJlIGRlICVzIgorCisjOiBjb25maWcuYzoyODAwIGJ1aWx0aW4vY29uZmlnLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0dGVybjogJXMiCittc2dzdHIgIm1vdGlmIGludmFsaWRlIDogJXMiCisKKyM6IGNvbmZpZy5jOjI4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAiZmljaGllciBkZSBjb25maWd1cmF0aW9uIGludmFsaWRlICVzIgorCisjOiBjb25maWcuYzoyODM4IGNvbmZpZy5jOjMwOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnN0YXQgb24gJXMgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgZnN0YXQgc3VyICVzIgorCisjOiBjb25maWcuYzoyODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgcsOpYWxpc2VyIHVuIG1hcCBkZSAnJXMnIgorCisjOiBjb25maWcuYzoyODU4IGNvbmZpZy5jOjMwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2htb2Qgb24gJXMgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgY2htb2Qgc3VyICVzIgorCisjOiBjb25maWcuYzoyOTQzIGNvbmZpZy5jOjMxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gJXMiCisKKyM6IGNvbmZpZy5jOjI5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIHRvICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgcsOpZ2xlciAnJXMnIMOgICclcyciCisKKyM6IGNvbmZpZy5jOjI5NzkgYnVpbHRpbi9yZW1vdGUuYzo2NTUgYnVpbHRpbi9yZW1vdGUuYzo4NDkgYnVpbHRpbi9yZW1vdGUuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVuc2V0ICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpc2luaXRpYWxpc2VyICclcyciCisKKyM6IGNvbmZpZy5jOjMwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWU6ICVzIgorbXNnc3RyICJub20gZGUgc2VjdGlvbiBpbnZhbGlkZcKgOiAlcyIKKworIzogY29uZmlnLmM6MzIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIHZhbHVlIGZvciAnJXMnIgorbXNnc3RyICJ2YWxldXIgbWFucXVhbnRlIHBvdXIgJyVzJyIKKworIzogY29ubmVjdC5jOjYxCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1cG9uIGluaXRpYWwgY29udGFjdCIKK21zZ3N0ciAibCdow7R0ZSBkaXN0YW50IGEgZmVybcOpIGxhIGNvbm5leGlvbiBsb3JzIGR1IGNvbnRhY3QgaW5pdGlhbCIKKworIzogY29ubmVjdC5jOjYzCiBtc2dpZCAiIgotIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCisiQ291bGQgbm90IHJlYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS5cbiIKICJcbiIKLSJUaGlzIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG9ubHkgcGFydGlhbGx5IHN3aXRjaGVkLiAgV2Ugc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgIgotInlvdXIgZmlsZXMsIGJ1dCBmYWlsZWQgdG8gdXBkYXRlIGFuIGludGVybmFsIEdpdCBmaWxlLlxuIgotIlxuIgotIlRoaXMgc2hvdWxkIG5vdCBoYXZlIG9jY3VycmVkLiAgJXMgd2lsbCBub3cgY2xvc2UgYW5kIGdpdmUgdXAuIgorIlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzIHJpZ2h0c1xuIgorImFuZCB0aGUgcmVwb3NpdG9yeSBleGlzdHMuIgogbXNnc3RyICIiCi0iTGUgY2hhbmdlbWVudCBkZSBsYSBicmFuY2hlIGNvdXJhbnRlIGEgw6ljaG91w6kuXG4iCisiSW1wb3NzaWJsZSBkZSBsaXJlIGxlIGTDqXDDtHQgZGlzdGFudC5cbiIKICJcbiIKLSJMZSByw6lwZXJ0b2lyZSBjb3VyYW50IG4nZXN0IHF1ZSBwYXJ0aWVsbGVtZW50IG1vZGlmacOpLiBMZXMgZmljaGllcnMgb250IMOpdMOpICIKLSJtaXMgw6Agam91ciBhdmVjIHN1Y2PDqHMsIG1haXMgbGEgbWlzZSDDoCBqb3VyIGQndW4gZmljaGllciBpbnRlcm5lIMOgIEdpdCBhICIKLSLDqWNob3XDqWUuXG4iCi0iXG4iCi0iQ2VsYSBuJ2F1cmFpdCBwYXMgZMO7IHNlIHByb2R1aXJlLiAlcyB2YSBhYmFuZG9ubmVyIGV0IHNlIHRlcm1pbmVyLiIKKyJWZXVpbGxleiB2w6lyaWZpZXIgcXVlIHZvdXMgYXZleiBsZXMgZHJvaXRzIGQnYWNjw6hzXG4iCisiZXQgcXVlIGxlIGTDqXDDtHQgZXhpc3RlLiIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDozOQotbXNnaWQgIlNlbGVjdCIKLW1zZ3N0ciAiU8OpbGVjdGlvbm5lciIKKyM6IGNvbm5lY3QuYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0ICclcyciCittc2dzdHIgIkxlIHNlcnZldXIgbmUgc3VwcG9ydGUgcGFzICclcyciCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NTMKLW1zZ2lkICJGb250IEZhbWlseSIKLW1zZ3N0ciAiRmFtaWxsZXMgZGUgcG9saWNlcyIKKyM6IGNvbm5lY3QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBmZWF0dXJlICclcyciCittc2dzdHIgIkxlIHNlcnZldXIgbmUgc3VwcG9ydGUgcGFzIGxhIGZvbmN0aW9ubmFsaXTDqSAnJXMnIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjc0Ci1tc2dpZCAiRm9udCBTaXplIgotbXNnc3RyICJUYWlsbGUgZGUgcG9saWNlIgorIzogY29ubmVjdC5jOjExNAorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAidmlkYWdlIGF0dGVuZHUgYXByw6hzIGxlcyBjYXBhY2l0w6lzIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjkxCi1tc2dpZCAiRm9udCBFeGFtcGxlIgotbXNnc3RyICJFeGVtcGxlIGRlIHBvbGljZSIKKyM6IGNvbm5lY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgY2FwYWJpbGl0aWVzIGFmdGVyIGZpcnN0IGxpbmUgJyVzJyIKK21zZ3N0ciAiY2FwYWNpdMOpcyBpZ25vcsOpZXMgYXByw6hzIGxhIHByZW1pw6hyZSBsaWduZSAnJXMnIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwMworIzogY29ubmVjdC5jOjI1MgorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkIGNhcGFiaWxpdGllc157fSIKK21zZ3N0ciAiZXJyZXVyIGRlIHByb3RvY29sZcKgOiBjYXBhYmlsaXRpZXNee30gaW5hdHRlbmR1IgorCisjOiBjb25uZWN0LmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGFsbG93IHNoYS0xLCBnb3QgJyVzJyIKK21zZ3N0ciAiZXJyZXVyIGRlIHByb3RvY29sZcKgOiBzaGFsbG93IHNoYS0xIGF0dGVuZHUsICclcycgdHJvdXbDqSIKKworIzogY29ubmVjdC5jOjI3NQorbXNnaWQgInJlcG9zaXRvcnkgb24gdGhlIG90aGVyIGVuZCBjYW5ub3QgYmUgc2hhbGxvdyIKK21zZ3N0ciAibGUgZMOpcMO0dCBkaXN0YW50IG5lIHBldXQgcGFzIMOqdHJlIHN1cGVyZmljaWVsIgorCisjOiBjb25uZWN0LmM6MzEzCittc2dpZCAiaW52YWxpZCBwYWNrZXQiCittc2dzdHIgInBhcXVldCBpbnZhbGlkZSIKKworIzogY29ubmVjdC5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCAnJXMnIgorbXNnc3RyICJlcnJldXIgZGUgcHJvdG9jb2xlwqA6ICclcycgYXR0ZW5kdSIKKworIzogY29ubmVjdC5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxzLXJlZnMgcmVzcG9uc2U6ICVzIgorbXNnc3RyICJyw6lwb25zZSDDoCBscy1yZWYgaW52YWxpZGUgOiAlcyIKKworIzogY29ubmVjdC5jOjQ0NQorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIHJlZiBsaXN0aW5nIgorbXNnc3RyICJ2aWRhZ2UgYXR0ZW5kdSBhcHLDqHMgbGUgbGlzdGFnZSBkZSByw6lmw6lyZW5jZXMiCisKKyM6IGNvbm5lY3QuYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgJyVzJyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJsZSBwcm90b2NvbGUgJyVzJyBuJ2VzdCBwYXMgc3VwcG9ydMOpIgorCisjOiBjb25uZWN0LmM6NTk1Cittc2dpZCAidW5hYmxlIHRvIHNldCBTT19LRUVQQUxJVkUgb24gc29ja2V0IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHBvc2l0aW9ubmVyIFNPX0tFRVBBTElWRSBzdXIgbGEgc29ja2V0IgorCisjOiBjb25uZWN0LmM6NjM1IGNvbm5lY3QuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9va2luZyB1cCAlcyAuLi4gIgorbXNnc3RyICJSZWNoZXJjaGUgZGUgJXPigKYgIgorCisjOiBjb25uZWN0LmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHJlY2hlcmNoZXIgJXMgKHBvcnQgJXMpICglcykiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkxvb2tpbmcgdXAgJXMgLi4uICIKKyM6IGNvbm5lY3QuYzo2NDMgY29ubmVjdC5jOjcxNAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVGhpcyBpcyBleGFtcGxlIHRleHQuXG4iCi0iSWYgeW91IGxpa2UgdGhpcyB0ZXh0LCBpdCBjYW4gYmUgeW91ciBmb250LiIKKyJkb25lLlxuIgorIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCiBtc2dzdHIgIiIKLSJDZWNpIGVzdCB1biB0ZXh0ZSBkJ2V4ZW1wbGUuXG4iCi0iU2kgdm91cyBhaW1leiBjZSB0ZXh0ZSwgdm91cyBwb3V2ZXogY2hvaXNpciBjZXR0ZSBwb2xpY2UuIgorImZhaXQuXG4iCisiQ29ubmV4aW9uIMOgICVzIChwb3J0ICVzKeKApiAiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjgKLW1zZ2lkICJHaXQgR3VpIgotbXNnc3RyICJHaXQgR3VpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg2Ci1tc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgotbXNnc3RyICJDcsOpZXIgbm91dmVhdSBkw6lww7R0IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzCi1tc2dpZCAiTmV3Li4uIgotbXNnc3RyICJOb3V2ZWF1Li4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MQotbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgIkNsb25lciB1biBkw6lww7R0IGV4aXN0YW50IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNgotbXNnaWQgIkNsb25lLi4uIgotbXNnc3RyICJDbG9uZXIuLi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNgotbXNnaWQgIk9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiT3V2cmlyIHVuIGTDqXDDtHQgZXhpc3RhbnQiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE5Ci1tc2dpZCAiT3Blbi4uLiIKLW1zZ3N0ciAiT3V2cmlyLi4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzMgotbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCi1tc2dzdHIgIkTDqXDDtHRzIHLDqWNlbW1lbnQgdXRpbGlzw6lzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzOAotbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgotbXNnc3RyICJPdXZyaXIgdW4gZMOpcMO0dCByw6ljZW50IDoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzA2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzEzCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgIkxhIGNyw6lhdGlvbiBkdSBkw6lww7R0ICVzIGEgw6ljaG91w6kgOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTEKLW1zZ2lkICJEaXJlY3Rvcnk6IgotbXNnc3RyICJSw6lwZXJ0b2lyZSA6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQyMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1MAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDUyCi1tc2dpZCAiR2l0IFJlcG9zaXRvcnkiCi1tc2dzdHIgIkTDqXDDtHQgR2l0IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIkxlIHLDqXBlcnRvaXJlICVzIGV4aXN0ZSBkw6lqw6AuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ1MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZpbGUgJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJMZSBmaWNoaWVyICVzIGV4aXN0ZSBkw6lqw6AuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NgotbXNnaWQgIkNsb25lIgotbXNnc3RyICJDbG9uZXIiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc5Ci1tc2dpZCAiU291cmNlIExvY2F0aW9uOiIKLW1zZ3N0ciAiRW1wbGFjZW1lbnQgc291cmNlIDoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkwCi1tc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCi1tc2dzdHIgIlLDqXBlcnRvaXJlIGNpYmxlIDoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAyCi1tc2dpZCAiQ2xvbmUgVHlwZToiCi1tc2dzdHIgIlR5cGUgZGUgY2xvbmFnZSA6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwOAotbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKLW1zZ3N0ciAiU3RhbmRhcmQgKHJhcGlkZSwgc2VtaS1yZWRvbmRhbnQsIGxpZW5zIGR1cnMpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxNAotbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKLW1zZ3N0ciAiQ29waWUgY29tcGzDqHRlIChwbHVzIGxlbnQsIHNhdXZlZ2FyZGUgcmVkb25kYW50ZSkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTIwCi1tc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCi1tc2dzdHIgIlBhcnRhZ8OpIChsZSBwbHVzIHJhcGlkZSwgbm9uIHJlY29tbWFuZMOpLCBwYXMgZGUgc2F1dmVnYXJkZSkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTU2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjAzCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc0OSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxOQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDU4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIKLW1zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdW4gZMOpcMO0dCBHaXQuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5MgotbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKLW1zZ3N0ciAiU3RhbmRhcmQgbidlc3QgZGlzcG9uaWJsZSBxdWUgcG91ciB1biBkw6lww7R0IGxvY2FsLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTYKLW1zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgotbXNnc3RyICJQYXJ0YWfDqSBuJ2VzdCBkaXNwb25pYmxlIHF1ZSBwb3VyIHVuIGTDqXDDtHQgbG9jYWwuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiTCdlbXBsYWNlbWVudCAlcyBleGlzdGUgZMOpasOgLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjgKLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKLW1zZ3N0ciAiTGEgY29uZmlndXJhdGlvbiBkZSBsJ29yaWdpbmUgYSDDqWNob3XDqS4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQwCi1tc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiRMOpY29tcHRlIGRlcyBvYmpldHMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQxCi1tc2dpZCAiYnVja2V0cyIKLW1zZ3N0ciAicGFuaWVycyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCi1tc2dzdHIgIkltcG9zc2libGUgZGUgY29waWVyICdvYmplY3RzL2luZm8vYWx0ZXJuYXRlcycgOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgotbXNnc3RyICJJbCBuJ3kgYSByaWVuIMOgIGNsb25lciBkZXB1aXMgJXMuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjkKLW1zZ2lkICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iCi1tc2dzdHIgIkxhIGJyYW5jaGUgJ21hc3RlcicgbidhIHBhcyDDqXTDqSBpbml0aWFsaXPDqWUuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxNgotbXNnaWQgIkhhcmRsaW5rcyBhcmUgdW5hdmFpbGFibGUuICBGYWxsaW5nIGJhY2sgdG8gY29weWluZy4iCi1tc2dzdHIgIiIKLSJMZXMgbGllbnMgZHVycyBuZSBzb250IHBhcyBzdXBwb3J0w6lzLiBVbmUgY29waWUgc2VyYSBlZmZlY3R1w6llIMOgIGxhIHBsYWNlLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MjgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDbG9uaW5nIGZyb20gJXMiCi1tc2dzdHIgIkNsb25hZ2UgZGVwdWlzICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1OQotbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiQ29waWUgZGVzIG9iamV0cyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NjAKLW1zZ2lkICJLaUIiCi1tc2dzdHIgIktpQiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNvcGllciBsJ29iamV0IDogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk0Ci1tc2dpZCAiTGlua2luZyBvYmplY3RzIgotbXNnc3RyICJMaWFpc29uIGRlcyBvYmpldHMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk1Ci1tc2dpZCAib2JqZWN0cyIKLW1zZ3N0ciAib2JqZXRzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgwMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgotbXNnc3RyICJJbXBvc3NpYmxlIGNyw6llciB1biBsaWVuIGR1ciBwb3VyIGwnb2JqZXQgOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NTgKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggYnJhbmNoZXMgYW5kIG9iamVjdHMuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgotbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBsZXMgYnJhbmNoZXMgZXQgb2JqZXRzLiBWb2lyIGxhIHNvcnRpZSBjb25zb2xlIHBvdXIgIgotInBsdXMgZGUgZMOpdGFpbHMuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg2OQotbXNnaWQgIkNhbm5vdCBmZXRjaCB0YWdzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiIgotIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbGVzIG1hcnF1ZXMgKHRhZ3MpLiBWb2lyIGxhIHNvcnRpZSBjb25zb2xlIHBvdXIgcGx1cyAiCi0iZGUgZMOpdGFpbHMuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg5MwotbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIiIKLSJJbXBvc3NpYmxlIGRlIGTDqXRlcm1pbmVyIEhFQUQuIFZvaXIgbGEgc29ydGllIGNvbnNvbGUgcG91ciBwbHVzIGRlIGTDqXRhaWxzLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY2xlYW51cCAlcyIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSBuZXR0b3llciAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDgKLW1zZ2lkICJDbG9uZSBmYWlsZWQuIgotbXNnc3RyICJMZSBjbG9uYWdlIGEgw6ljaG91w6kuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNQotbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKLW1zZ3N0ciAiQXVjdW5lIGJyYW5jaGUgcGFyIGTDqWZhdXQgbidhIMOpdMOpIG9idGVudWUuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgJXMgY29tbWUgY29tbWl0LiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzgKLW1zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAiQ3LDqWF0aW9uIGR1IHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM5IGxpYi9pbmRleC50Y2w6NjcgbGliL2luZGV4LnRjbDoxMzAKLSM6IGxpYi9pbmRleC50Y2w6MTk4Ci1tc2dpZCAiZmlsZXMiCi1tc2dzdHIgImZpY2hpZXJzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2OAotbXNnaWQgIkluaXRpYWwgZmlsZSBjaGVja291dCBmYWlsZWQuIgotbXNnc3RyICJMZSBjaGFyZ2VtZW50IGluaXRpYWwgZHUgZmljaGllciBhIMOpY2hvdcOpLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDExCi1tc2dpZCAiT3BlbiIKLW1zZ3N0ciAiT3V2cmlyIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjEKLW1zZ2lkICJSZXBvc2l0b3J5OiIKLW1zZ3N0ciAiRMOpcMO0dCA6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkJ291dnJpciBsZSBkw6lww7R0ICVzIDoiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MwotbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCi1tc2dzdHIgIkNldCBlbXBydW50IGTDqXRhY2jDqSIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjYwCi1tc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCi1tc2dzdHIgIkV4cHJlc3Npb24gZGUgcsOpdmlzaW9uIDoiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NAotbXNnaWQgIkxvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiQnJhbmNoZSBsb2NhbGUiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3OQotbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKLW1zZ3N0ciAiQnJhbmNoZSBkZSBzdWl2aSIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjg0IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzgKLW1zZ2lkICJUYWciCi1tc2dzdHIgIk1hcnF1ZSAodGFnKSIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjMxNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgcmV2aXNpb246ICVzIgotbXNnc3RyICJSw6l2aXNpb24gaW52YWxpZGUgOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjMzOAotbXNnaWQgIk5vIHJldmlzaW9uIHNlbGVjdGVkLiIKLW1zZ3N0ciAiUGFzIGRlIHLDqXZpc2lvbiBzw6lsZWN0aW9ubsOpZS4iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDYKLW1zZ2lkICJSZXZpc2lvbiBleHByZXNzaW9uIGlzIGVtcHR5LiIKLW1zZ3N0ciAiTCdleHByZXNzaW9uIGRlIHLDqXZpc2lvbiBlc3QgdmlkZS4iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzEKLW1zZ2lkICJVcGRhdGVkIgotbXNnc3RyICJNaXNlIMOgIGpvdXI6IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTU5Ci1tc2dpZCAiVVJMIgotbXNnc3RyICJVUkwiCi0KLSM6IGxpYi9jb21taXQudGNsOjkKKyM6IGNvbm5lY3QuYzo2NjUgY29ubmVjdC5jOjc0MgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKLSJcbiIKLSJZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgIgotInRvIGFtZW5kLlxuIgorInVuYWJsZSB0byBjb25uZWN0IHRvICVzOlxuIgorIiVzIgogbXNnc3RyICIiCi0iSWwgbid5IGEgcmllbiDDoCBjb3JyaWdlci5cbiIKLSJcbiIKLSJWb3VzIGFsbGV6IGNyw6llciBsZSBjb21taXQgaW5pdGlhbC4gSWwgbid5IGEgcGFzIGRlIGNvbW1pdCBhdmFudCBjZWx1aS1jaSDDoCAiCi0iY29ycmlnZXIuXG4iCisiaW1wb3NzaWJsZSBkZSBzZSBjb25uZWN0ZXIgw6AgJXPCoDpcbiIKKyIlcyIKIAotIzogbGliL2NvbW1pdC50Y2w6MTgKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCisjOiBjb25uZWN0LmM6NjcxIGNvbm5lY3QuYzo3NDgKK21zZ2lkICJkb25lLiIKK21zZ3N0ciAiZmFpdC4iCisKKyM6IGNvbm5lY3QuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZWNoZXJjaGVyICVzICglcykiCisKKyM6IGNvbm5lY3QuYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwb3J0ICVzIgorbXNnc3RyICJwb3J0IGluY29ubnUgJXMiCisKKyM6IGNvbm5lY3QuYzo4NDUgY29ubmVjdC5jOjExNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBob3N0bmFtZSAnJXMnIGJsb2NrZWQiCittc2dzdHIgIm5vbSBkJ2jDtHRlIMOpdHJhbmdlICclcycgYmxvcXXDqSIKKworIzogY29ubmVjdC5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBvcnQgJyVzJyBibG9ja2VkIgorbXNnc3RyICJwb3J0IMOpdHJhbmdlICclcycgYmxvcXXDqSIKKworIzogY29ubmVjdC5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhcnQgcHJveHkgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpbWFycmVyIHVuIHByb3h5ICVzIgorCisjOiBjb25uZWN0LmM6OTI4Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQ7IHNlZSAnZ2l0IGhlbHAgcHVsbCcgZm9yIHZhbGlkIHVybCBzeW50YXgiCittc2dzdHIgIiIKKyJhdWN1biBjaGVtaW4gc3DDqWNpZmnDqcKgOyByw6lmw6lyZXotdm91cyDDoCAnZ2l0IGhlbHAgcHVsbCcgcG91ciB1bmUgc3ludGF4ZSAiCisiZCdVUkwgdmFsaWRlIgorCisjOiBjb25uZWN0LmM6MTEyMworbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTQiCittc2dzdHIgImxhIHZhcmlhbnRlIHNzaCAnc2ltcGxlJyBuZSBzdXBwb3J0ZSBwYXMgLTQiCisKKyM6IGNvbm5lY3QuYzoxMTM1Cittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNiIKK21zZ3N0ciAibGEgdmFyaWFudGUgc3NoICdzaW1wbGUnIG5lIHN1cHBvcnRlIHBhcyAtNiIKKworIzogY29ubmVjdC5jOjExNTIKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgcG9ydCIKK21zZ3N0ciAibGEgdmFyaWFudGUgc3NoICdzaW1wbGUnIG5lIHN1cHBvcnRlIHBhcyBkZSBzcMOpY2lmaWVyIGxlIHBvcnQiCisKKyM6IGNvbm5lY3QuYzoxMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcGF0aG5hbWUgJyVzJyBibG9ja2VkIgorbXNnc3RyICJjaGVtaW4gw6l0cmFuZ2UgJyVzJyBibG9xdcOpIgorCisjOiBjb25uZWN0LmM6MTMxMQorbXNnaWQgInVuYWJsZSB0byBmb3JrIgorbXNnc3RyICJmb3JrIGltcG9zc2libGUiCisKKyM6IGNvbm5lY3RlZC5jOjk4IGJ1aWx0aW4vZnNjay5jOjIwOCBidWlsdGluL3BydW5lLmM6NDMKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkiCittc2dzdHIgIlbDqXJpZmljYXRpb24gZGUgbGEgY29ubmVjdGl2aXTDqSIKKworIzogY29ubmVjdGVkLmM6MTEwCittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsYW5jZXIgJ2dpdCByZXYtbGlzdCciCisKKyM6IGNvbm5lY3RlZC5jOjEzMAorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgZGFucyBsYSByZXYtbGlzdCIKKworIzogY29ubmVjdGVkLmM6MTM3Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgImltcG9zc2libGUgZGUgZmVybWVyIGwnZW50csOpZSBzdGFuZGFyZCBkdSByZXYtbGlzdCIKKworIzogY29udmVydC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIgorbXNnc3RyICJjcmxmX2FjdGlvbiBpbGzDqWdhbCAlZCIKKworIzogY29udmVydC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJDUkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzIgorbXNnc3RyICJMZXMgQ1JMRiBzZXJhaWVudCByZW1wbGFjw6lzIHBhciBkZXMgTEYgZGFucyAlcyIKKworIzogY29udmVydC5jOjIwOQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCi0iXG4iCi0iWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKLSJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgotImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCisiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCiBtc2dzdHIgIiIKLSJJbXBvc3NpYmxlIGRlIGNvcnJpZ2VyIHBlbmRhbnQgdW5lIGZ1c2lvbi5cbiIKLSJcbiIKLSJWb3VzIMOqdGVzIGFjdHVlbGxlbWVudCBhdSBtaWxpZXUgZCd1bmUgZnVzaW9uIHF1aSBuJ2EgcGFzIMOpdMOpIGNvbXBsw6h0ZW1lbnQgIgotInRlcm1pbsOpZS4gVm91cyBuZSBwb3V2ZXogcGFzIGNvcnJpZ2VyIGxlIGNvbW1pdCBwcsOpY8OpZGVudCBzYXVmIHNpIHZvdXMgIgotImFiYW5kb25uZXogbGEgZnVzaW9uIGNvdXJhbnRlLlxuIgorIkxlcyBDUkxGIHNlcm9udCByZW1wbGFjw6lzIHBhciBkZXMgTEYgZGFucyAlcy5cbiIKKyJMZSBmaWNoaWVyIGNvbnNlcnZlcmEgc2VzIGZpbnMgZGUgbGlnbmUgZCdvcmlnaW5lIGRhbnMgdm90cmUgY29waWUgZGUgdHJhdmFpbCIKIAotIzogbGliL2NvbW1pdC50Y2w6NDgKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCi1tc2dzdHIgIkVycmV1ciBsb3JzIGR1IGNoYXJnZW1lbnQgZGVzIGRvbm7DqWVzIGRlIGNvbW1pdCBwb3VyIGNvcnJlY3Rpb24gOiIKKyM6IGNvbnZlcnQuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcyIKK21zZ3N0ciAiTGVzIExGIHNlcmFpZW50IHJlbXBsYWPDqXMgcGFyIGRlcyBDUkxGIGRhbnMgJXMiCiAKLSM6IGxpYi9jb21taXQudGNsOjc1Ci1tc2dpZCAiVW5hYmxlIHRvIG9idGFpbiB5b3VyIGlkZW50aXR5OiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkJ29idGVuaXIgdm90cmUgaWRlbnRpdMOpIDoiCi0KLSM6IGxpYi9jb21taXQudGNsOjgwCi1tc2dpZCAiSW52YWxpZCBHSVRfQ09NTUlUVEVSX0lERU5UOiIKLW1zZ3N0ciAiR0lUX0NPTU1JVFRFUl9JREVOVCBpbnZhbGlkZSA6IgotCi0jOiBsaWIvY29tbWl0LnRjbDoxMjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJ3YXJuaW5nOiBUY2wgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyAnJXMnLiIKLW1zZ3N0ciAiYXR0ZW50aW9uIDogVGNsIG5lIHN1cHBvcnRlIHBhcyBsZSBjb2RhZ2UgJyVzJy4iCi0KLSM6IGxpYi9jb21taXQudGNsOjE0OQorIzogY29udmVydC5jOjIxOQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorIkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgogbXNnc3RyICIiCi0iTCfDqXRhdCBsb3JzIGRlIGxhIGRlcm5pw6hyZSBzeW5jaHJvbmlzYXRpb24gbmUgY29ycmVzcG9uZCBwbHVzIMOgIGwnw6l0YXQgZHUgIgotImTDqXDDtHQuXG4iCi0iXG4iCi0iVW4gYXV0cmUgcHJvZ3JhbW1lIEdpdCBhIG1vZGlmacOpIGNlIGTDqXDDtHQgZGVwdWlzIGxhIGRlcm5pw6hyZSAiCi0ic3luY2hyb25pc2F0aW9uLiBVbmUgcmVzeW5zaHJvbmlzYXRpb24gZG9pdCDDqnRyZSBlZmZlY3R1w6llIGF2YW50IGRlIHBvdXZvaXIgIgotImNyw6llciB1biBub3V2ZWF1IGNvbW1pdC5cbiIKLSJcbiIKLSJDZWxhIHZhIMOqdHJlIGZhaXQgdG91dCBkZSBzdWl0ZSBhdXRvbWF0aXF1ZW1lbnQuXG4iCisiTGVzIExGIHNlcm9udCByZW1wbGFjw6lzIHBhciBkZXMgQ1JMRiBkYW5zICVzLlxuIgorIkxlIGZpY2hpZXIgY29uc2VydmVyYSBzZXMgZmlucyBkZSBsaWduZSBkJ29yaWdpbmUgZGFucyB2b3RyZSBjb3BpZSBkZSB0cmF2YWlsIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxNzIKLSMsIHRjbC1mb3JtYXQKKyM6IGNvbnZlcnQuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHByb2hpYml0ZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICJBdWN1biBCT00gbidlc3QgcGVybWlzIGRhbnMgJyVzJyBzJ2lsIGVzdCBlbmNvZMOpIGNvbW1lICVzIgorCisjOiBjb252ZXJ0LmM6MjkxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgotIlxuIgotIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4gIFlvdSBtdXN0IHJlc29sdmUgdGhlbSBhbmQgc3RhZ2UgdGhlIGZpbGUgIgotImJlZm9yZSBjb21taXR0aW5nLlxuIgorIlRoZSBmaWxlICclcycgY29udGFpbnMgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSUuKnMgYXMgIgorIndvcmtpbmctdHJlZS1lbmNvZGluZy4iCiBtc2dzdHIgIiIKLSJEZXMgZmljaGllcnMgbm9uIGZ1c2lvbm7DqXMgbmUgcGV1dmVudCDDqnRyZSBjb21taXTDqXMuXG4iCi0iXG4iCi0iTGUgZmljaGllciAlcyBhIGRlcyBjb25mbGljdHMgZGUgZnVzaW9uLiBWb3VzIGRldmV6IGxlcyByw6lzb3VkcmUgZXQgcHLDqS0iCi0iY29tbWl0ZXIgbGUgZmljaGllciBhdmFudCBkZSBwb3V2b2lyIGNvbW1pdGVyLlxuIgorIkxlIGZpY2hpZXIgJyVzJyBjb250aWVudCB1biBtYXJxdWV1ciBkJ29yZHJlIGQnb2N0ZXRzIChCT00pLiBWZXVpbGxleiAiCisidXRpbGlzZXIgVVRGLSUuKnMgY29tbWUgZW5jb2RhZ2UgZCdhcmJyZSBkZSB0cmF2YWlsLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTgwCi0jLCB0Y2wtZm9ybWF0CisjOiBjb252ZXJ0LmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyByZXF1aXJlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIlVuIEJPTSBlc3Qgb2JsaWdhdG9pcmUgZGFucyAnJXMnIHMnaWwgZXN0IGVuY29kw6kgY29tbWUgJXMiCisKKyM6IGNvbnZlcnQuYzozMDYKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKLSJcbiIKLSJGaWxlICVzIGNhbm5vdCBiZSBjb21taXR0ZWQgYnkgdGhpcyBwcm9ncmFtLlxuIgorIlRoZSBmaWxlICclcycgaXMgbWlzc2luZyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJXNCRSBvciBVVEYtIgorIiVzTEUgKGRlcGVuZGluZyBvbiB0aGUgYnl0ZSBvcmRlcikgYXMgd29ya2luZy10cmVlLWVuY29kaW5nLiIKIG1zZ3N0ciAiIgotIlVuIMOpdGF0IGRlIGZpY2hpZXIgaW5jb25udSAlcyBhIMOpdMOpIGTDqXRlY3TDqS5cbiIKLSJcbiIKLSJMZSBmaWNoaWVyICVzIG5lIHBldXQgcGFzIMOqdHJlIGNvbW1pdMOpIHBhciBjZSBwcm9ncmFtbWUuXG4iCisiSWwgbWFucXVlIHVuIG1hcnF1ZXVyIGQnb3JkcmUgZCdvY3RldHMgKEJPTSkgYXUgZmljaGllciAnJXMnLiBWZXVpbGxleiAiCisidXRpbGlzZXIgVVRGLSVzQkUgb3UgVVRGLSVzTEUgKHNlbG9uIGwnb3JkcmUgZMOpc2lyw6kpIGNvbW1lIGVuY29kYWdlIGQnYXJicmUgIgorImRlIHRyYXZhaWwuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODgKKyM6IGNvbnZlcnQuYzo0MTkgY29udmVydC5jOjQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZW5jb2RlICclcycgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnZW5jb2RhZ2UgZGUgJyVzJyBkZSAlcyB2ZXJzICVzIgorCisjOiBjb252ZXJ0LmM6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVuY29kaW5nICclcycgZnJvbSAlcyB0byAlcyBhbmQgYmFjayBpcyBub3QgdGhlIHNhbWUiCittc2dzdHIgIiIKKyJlbmNvZGVyICclcycgZGVwdWlzICVzIHZlcnMgJXMgcHVpcyBpbnZlcnNlbWVudCBuZSBwcm9kdWl0IHBhcyBsZSBtw6ptZSAiCisiY29udGVudSIKKworIzogY29udmVydC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayB0byBydW4gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgZm9ya2VyIHBvdXIgbGFuY2VyIGxlIGZpbHRyZSBleHRlcm5lICclcyciCisKKyM6IGNvbnZlcnQuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZlZWQgdGhlIGlucHV0IHRvIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGZvdXJuaXIgbCdlbnRyw6llIGF1IGZpbHRyZSBleHRlcm5lICclcyciCisKKyM6IGNvbnZlcnQuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkICVkIgorbXNnc3RyICJsZSBmaWx0cmUgZXh0ZXJuZSAnJXMnIGEgw6ljaG91w6kgJWQiCisKKyM6IGNvbnZlcnQuYzo3MzAgY29udmVydC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIGZyb20gZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICJsYSBsZWN0dXJlIGRlcHVpcyBsZSBmaWx0cmUgZXh0ZXJuZSAnJXMnIGEgw6ljaG91w6kiCisKKyM6IGNvbnZlcnQuYzo3MzYgY29udmVydC5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgImxlIGZpbHRyZSBleHRlcm5lICclcycgYSDDqWNob3XDqSIKKworIzogY29udmVydC5jOjgzOQorbXNnaWQgInVuZXhwZWN0ZWQgZmlsdGVyIHR5cGUiCittc2dzdHIgInR5cGUgZGUgZmlsdHJlIGluYXR0ZW5kdSIKKworIzogY29udmVydC5jOjg1MAorbXNnaWQgInBhdGggbmFtZSB0b28gbG9uZyBmb3IgZXh0ZXJuYWwgZmlsdGVyIgorbXNnc3RyICJub20gZGUgY2hlbWluIHRyb3AgbG9uZyBwb3VyIHVuIGZpbHRyZSBleHRlcm5lIgorCisjOiBjb252ZXJ0LmM6OTI0CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorImV4dGVybmFsIGZpbHRlciAnJXMnIGlzIG5vdCBhdmFpbGFibGUgYW55bW9yZSBhbHRob3VnaCBub3QgYWxsIHBhdGhzIGhhdmUgIgorImJlZW4gZmlsdGVyZWQiCiBtc2dzdHIgIiIKLSJQYXMgZGUgbW9kaWZpY2F0aW9uIMOgIGNvbW1pdGVyLlxuIgotIlxuIgotIlZvdXMgZGV2ZXogaW5kZXhlciBhdSBtb2lucyAxIGZpY2hpZXIgYXZhbnQgZGUgcG91dm9pciBjb21taXRlci5cbiIKKyJsZSBmaWx0cmUgZXh0ZXJuZSAnJXMnIG4nZXN0IHBsdXMgZGlzcG9uaWJsZSBiaWVuIHF1ZSB0b3VzIGxlcyBjaGVtaW5zICIKKyJuJ2FpZW50IHBhcyDDqXTDqSBmaWx0csOpcyIKIAotIzogbGliL2NvbW1pdC50Y2w6MjAzCisjOiBjb252ZXJ0LmM6MTIyMworbXNnaWQgInRydWUvZmFsc2UgYXJlIG5vIHZhbGlkIHdvcmtpbmctdHJlZS1lbmNvZGluZ3MiCittc2dzdHIgInRydWUvZmFsc2UgbmUgc29udCBwYXMgZGVzIGVuY29kYWdlcyBkJ2FyYnJlIGRlIHRyYXZhaWwgdmFsaWRlcyIKKworIzogY29udmVydC5jOjE0MTEgY29udmVydC5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiJXPCoDogbGUgZmlsdHJlIGNsZWFuICclcycgYSDDqWNob3XDqSIKKworIzogY29udmVydC5jOjE0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHNtdWRnZSBmaWx0ZXIgJXMgZmFpbGVkIgorbXNnc3RyICIlc8KgOiBsZSBmaWx0cmUgc211ZGdlICclcycgYSDDqWNob3XDqSIKKworIzogZGF0ZS5jOjEzOAorbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgImRhbnMgbGUgZnV0dXIiCisKKyM6IGRhdGUuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBzZWNvbmQgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICJpbCB5IGEgJTxQUkl1TUFYPiBzZWNvbmRlIgorbXNnc3RyWzFdICJpbCB5IGEgJTxQUkl1TUFYPiBzZWNvbmRlcyIKKworIzogZGF0ZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbWludXRlcyBhZ28iCittc2dzdHJbMF0gImlsIHkgYSAlPFBSSXVNQVg+IG1pbnV0ZSIKK21zZ3N0clsxXSAiaWwgeSBhICU8UFJJdU1BWD4gbWludXRlcyIKKworIzogZGF0ZS5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGhvdXIgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IGhvdXJzIGFnbyIKK21zZ3N0clswXSAiaWwgeSBhICU8UFJJdU1BWD4gaGV1cmUiCittc2dzdHJbMV0gImlsIHkgYSAlPFBSSXVNQVg+IGhldXJlcyIKKworIzogZGF0ZS5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gZGF5cyBhZ28iCittc2dzdHJbMF0gImlsIHkgYSAlPFBSSXVNQVg+IGpvdXIiCittc2dzdHJbMV0gImlsIHkgYSAlPFBSSXVNQVg+IGpvdXJzIgorCisjOiBkYXRlLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gd2Vla3MgYWdvIgorbXNnc3RyWzBdICJpbCB5IGEgJTxQUkl1TUFYPiBzZW1haW5lIgorbXNnc3RyWzFdICJpbCB5IGEgJTxQUkl1TUFYPiBzZW1haW5lcyIKKworIzogZGF0ZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICJpbCB5IGEgJTxQUkl1TUFYPiBtb2lzIgorbXNnc3RyWzFdICJpbCB5IGEgJTxQUkl1TUFYPiBtb2lzIgorCisjOiBkYXRlLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4geWVhciIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiBhbiIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBhbnMiCisKKyMuIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiCisjOiBkYXRlLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiaWwgeSBhICVzIGV0ICU8UFJJdU1BWD4gbW9pcyIKK21zZ3N0clsxXSAiaWwgeSBhICVzIGV0ICU8UFJJdU1BWD4gbW9pcyIKKworIzogZGF0ZS5jOjE5NyBkYXRlLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4geWVhciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMgYWdvIgorbXNnc3RyWzBdICJpbCB5IGEgJTxQUkl1TUFYPiBhbiIKK21zZ3N0clsxXSAiaWwgeSBhICU8UFJJdU1BWD4gYW5zIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MjcyCittc2dpZCAiUHJvcGFnYXRpbmcgaXNsYW5kIG1hcmtzIgorbXNnc3RyICJQcm9wYWdhdGlvbiBkZXMgbWFycXVlcyBkJ8OubG90cyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdHJlZSBvYmplY3QgJXMiCittc2dzdHIgIm9iamV0IGFyYnJlIGludmFsaWRlICVzIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIGlzbGFuZCByZWdleCBmb3IgJyVzJzogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY2hhcmdlciBsYSByZWdleCDDrmxlIHBvdXIgJyVzJ8KgOiAlcyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpc2xhbmQgcmVnZXggZnJvbSBjb25maWcgaGFzIHRvbyBtYW55IGNhcHR1cmUgZ3JvdXBzIChtYXg9JWQpIgorbXNnc3RyICIiCisibCdleHByZXNzaW9uIHJhdGlvbm5lbGxlIGRlcHVpcyBsYSBjb25maWd1cmF0aW9uIGEgdHJvcCBkZSBncm91cGVzIGRlICIKKyJjYXB0dXJlIChtYXg9JWQpIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtlZCAlZCBpc2xhbmRzLCBkb25lLlxuIgorbXNnc3RyICJNYXJxdWFnZSBkZSAlZCDDrmxvdHMsIGZhaXQuXG4iCisKKyM6IGRpZmZjb3JlLW9yZGVyLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsZSBmaWNoaWVyIGRlIGNvbW1hbmRlICclcyciCisKKyM6IGRpZmZjb3JlLXJlbmFtZS5jOjU0MworbXNnaWQgIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICJEw6l0ZWN0aW9uIGRlIHJlbm9tbWFnZSBpbmV4YWN0IGVuIGNvdXJzIgorCisjOiBkaWZmLW5vLWluZGV4LmM6MjM4Cittc2dpZCAiZ2l0IGRpZmYgLS1uby1pbmRleCBbPG9wdGlvbnM+XSA8cGF0aD4gPHBhdGg+IgorbXNnc3RyICJnaXQgZGlmZiAtLW5vLWluZGV4IFs8b3B0aW9ucz5dIDxjaGVtaW4+IDxjaGVtaW4+IgorCisjOiBkaWZmLW5vLWluZGV4LmM6MjYzCiBtc2dpZCAiIgotIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKLSJcbiIKLSJBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuIgotIlxuIgotIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKLSItIFNlY29uZCBsaW5lOiBCbGFua1xuIgotIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKKyJOb3QgYSBnaXQgcmVwb3NpdG9yeS4gVXNlIC0tbm8taW5kZXggdG8gY29tcGFyZSB0d28gcGF0aHMgb3V0c2lkZSBhIHdvcmtpbmcgIgorInRyZWUiCiBtc2dzdHIgIiIKLSJNZXJjaSBkZSBmb3VybmlyIHVuIG1lc3NhZ2UgZGUgY29tbWl0LlxuIgotIlxuIgotIlVuIGJvbiBtZXNzYWdlIGRlIGNvbW1pdCBhIGxlIGZvcm1hdCBzdWl2YW50IDpcbiIKLSJcbiIKLSItIFByZW1pw6hyZSBsaWduZSA6IGTDqWNyaXJlIGVuIHVuZSBwaHJhc2UgY2UgcXVlIHZvdXMgYXZleiBmYWl0LlxuIgotIi0gRGV1eGnDqG1lIGxpZ25lIDogcmllbi5cbiIKLSItIExpZ25lcyBzdWl2YW50ZXMgOiBEw6ljcmlyZSBwb3VycXVvaSBjZXMgbW9kaWZpY2F0aW9ucyBzb250IGJvbm5lcy5cbiIKKyJQYXMgdW4gZMOpcMO0dCBnaXQuIFV0aWxpc2V6IC0tbm8taW5kZXggcG91ciBjb21wYXJlciBkZXV4IGNoZW1pbnMgaG9ycyBkJ3VuICIKKyJhcmJyZSBkZSB0cmF2YWlsIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMzQKLW1zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKLW1zZ3N0ciAiTGFuY2VtZW50IGRlIGwnYWN0aW9uIGQnYXZhbnQtY29tbWl0Li4uIgorIzogZGlmZi5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJXMnXG4iCittc2dzdHIgIiIKKyIgIEltcG9zc2libGUgZCdhbmFseXNlciBsZSBwb3VyY2VudGFnZSBkZSBtb2RpZmljYXRpb24gZGUgZGlyc3RhdCAnJXMnXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI0OQotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgotbXNnc3RyICJDb21taXQgcmVmdXPDqSBwYXIgbCdhY3Rpb24gZCdhdmFudC1jb21taXQuIgorIzogZGlmZi5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIFBhcmFtw6h0cmUgZGlyc3RhdCBpbmNvbm51ICclcydcbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MjcyCi1tc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCi1tc2dzdHIgIkxhbmNlbWVudCBkZSBsJ2FjdGlvbiBcIm1lc3NhZ2UgZGUgY29tbWl0XCIuLi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjI4NwotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgotbXNnc3RyICJDb21taXQgcmVmdXPDqSBwYXIgbCdhY3Rpb24gXCJtZXNzYWdlIGRlIGNvbW1pdFwiLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzAwCi1tc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgotbXNnc3RyICJDb21taXQgZGVzIG1vZGlmaWNhdGlvbnMuLi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjMxNgotbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAid3JpdGUtdHJlZSBhIMOpY2hvdcOpIDoiCi0KLSM6IGxpYi9jb21taXQudGNsOjMxNyBsaWIvY29tbWl0LnRjbDozNjEgbGliL2NvbW1pdC50Y2w6MzgyCi1tc2dpZCAiQ29tbWl0IGZhaWxlZC4iCi1tc2dzdHIgIkxlIGNvbW1pdCBhIMOpY2hvdcOpLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzM0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ29tbWl0ICVzIGFwcGVhcnMgdG8gYmUgY29ycnVwdCIKLW1zZ3N0ciAiTGUgY29tbWl0ICVzIHNlbWJsZSDDqnRyZSBjb3Jyb21wdSIKLQotIzogbGliL2NvbW1pdC50Y2w6MzM5CisjOiBkaWZmLmM6Mjk2CiBtc2dpZCAiIgotIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgotIlxuIgotIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCi0iXG4iCi0iQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorImNvbG9yIG1vdmVkIHNldHRpbmcgbXVzdCBiZSBvbmUgb2YgJ25vJywgJ2RlZmF1bHQnLCAnYmxvY2tzJywgJ3plYnJhJywgIgorIidkaW1tZWQtemVicmEnLCAncGxhaW4nIgogbXNnc3RyICIiCi0iUGFzIGRlIG1vZGlmaWNhdGlvbiDDoCBjb21taXRlci5cbiIKLSJcbiIKLSJBdWN1biBmaWNoaWVyIG4nYSDDqXTDqSBtb2RpZmnDqSBwYXIgY2UgY29tbWl0IGV0IGlsIG5lIHMnYWdpdCBwYXMgZCd1biBjb21taXQgIgotImRlIGZ1c2lvbi5cbiIKLSJcbiIKLSJVbmUgcmVzeW5jaHJvbmlzYXRpb24gdmEgw6p0cmUgbGFuY8OpZSB0b3V0IGRlIHN1aXRlIGF1dG9tYXRpcXVlbWVudC5cbiIKKyJsZSBwYXJhbcOodHJlIGRlIGNvdWxldXIgZGUgZMOpcGxhY2VtZW50IGRvaXQgw6p0cmUgcGFybWkgJ25vJywgJ2RlZmF1bHQnLCAiCisiJ2Jsb2NrcycsICd6ZWJyYScsICdkaW1tZWRfemVicmEnIG91ICdwbGFpbiciCiAKLSM6IGxpYi9jb21taXQudGNsOjM0NgotbXNnaWQgIk5vIGNoYW5nZXMgdG8gY29tbWl0LiIKLW1zZ3N0ciAiUGFzIGRlIG1vZGlmaWNhdGlvbnMgw6AgY29tbWl0ZXIuIgotCi0jOiBsaWIvY29tbWl0LnRjbDozNjAKLW1zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgotbXNnc3RyICJjb21taXQtdHJlZSBhIMOpY2hvdcOpIDoiCi0KLSM6IGxpYi9jb21taXQudGNsOjM4MQotbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKLW1zZ3N0ciAidXBkYXRlLXJlZiBhIMOpY2hvdcOpIDoiCi0KLSM6IGxpYi9jb21taXQudGNsOjQ2OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKLW1zZ3N0ciAiQ29tbWl0ICVzIGNyw6nDqSA6ICVzIgotCi0jOiBsaWIvY29uc29sZS50Y2w6NTkKLW1zZ2lkICJXb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uIgotbXNnc3RyICJUcmF2YWlsIGVuIGNvdXJzLi4uIG1lcmNpIGRlIHBhdGllbnRlci4uLiIKLQotIzogbGliL2NvbnNvbGUudGNsOjE4NgotbXNnaWQgIlN1Y2Nlc3MiCi1tc2dzdHIgIlN1Y2PDqHMiCi0KLSM6IGxpYi9jb25zb2xlLnRjbDoyMDAKLW1zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCi1tc2dzdHIgIkVycmV1ciA6IMOpY2hlYyBkZSBsYSBjb21tYW5kZSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0MwotbXNnaWQgIk51bWJlciBvZiBsb29zZSBvYmplY3RzIgotbXNnc3RyICJOb21icmUgZCdvYmpldHMgZW4gZmljaGllciBwYXJ0aWN1bGllciIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NAotbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBsb29zZSBvYmplY3RzIgotbXNnc3RyICJFc3BhY2UgZGlzcXVlIHV0aWxpc8OpIHBhciBsZXMgZmljaGllcnMgcGFydGljdWxpZXJzIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ1Ci1tc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICJOb21icmUgZCdvYmpldHMgZW1wYXF1ZXTDqXMiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDYKLW1zZ2lkICJOdW1iZXIgb2YgcGFja3MiCi1tc2dzdHIgIk5vbWJyZSBkZSBwYXF1ZXRzIGQnb2JqZXRzIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ3Ci1tc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICJFc3BhY2UgZGlzcXVlIHV0aWxpc8OpIHBhciBsZXMgb2JqZXRzIGVtcGFxdWV0w6lzIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ4Ci1tc2dpZCAiUGFja2VkIG9iamVjdHMgd2FpdGluZyBmb3IgcHJ1bmluZyIKLW1zZ3N0ciAiT2JqZXRzIGVtcGFxdWV0w6lzIGF0dGVuZGFudCBkJ8OqdHJlIHN1cHByaW3DqXMiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDkKLW1zZ2lkICJHYXJiYWdlIGZpbGVzIgotbXNnc3RyICJGaWNoaWVycyBwb3ViZWxsZSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo3MgotbXNnaWQgIkNvbXByZXNzaW5nIHRoZSBvYmplY3QgZGF0YWJhc2UiCi1tc2dzdHIgIkNvbXByZXNzaW9uIGRlIGxhIGJhc2UgZGVzIG9iamV0cyIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo4MwotbXNnaWQgIlZlcmlmeWluZyB0aGUgb2JqZWN0IGRhdGFiYXNlIHdpdGggZnNjay1vYmplY3RzIgotbXNnc3RyICJWw6lyaWZpY2F0aW9uIGRlIGxhIGJhc2UgZGVzIG9iamV0cyBhdmVjIGZzY2stb2JqZWN0cyIKLQotIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKLSMsIHRjbC1mb3JtYXQKKyM6IGRpZmYuYzozMjQKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKLSJcbiIKLSJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKLSJ0aGUgZGF0YWJhc2UuXG4iCi0iXG4iCi0iQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCisidW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcycsIHBvc3NpYmxlIHZhbHVlcyBhcmUgJ2lnbm9yZS1zcGFjZS1jaGFuZ2UnLCAiCisiJ2lnbm9yZS1zcGFjZS1hdC1lb2wnLCAnaWdub3JlLWFsbC1zcGFjZScsICdhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UnIgogbXNnc3RyICIiCi0iQ2UgZMOpcMO0dCBjb21wcmVuZCBhY3R1ZWxsZW1lbnQgZW52aXJvbiAlaSBvYmpldHMgYXlhbnQgbGV1ciBmaWNoaWVyICIKLSJwYXJ0aWN1bGllci5cbiIKLSJcbiIKLSJQb3VyIGNvbnNlcnZlciB1bmUgcGVyZm9ybWFuY2Ugb3B0aW1hbGUsIGlsIGVzdCBmb3J0ZW1lbnQgcmVjb21tYW5kw6kgZGUgIgotImNvbXByaW1lciBsYSBiYXNlIGRlIGRvbm7DqWUuXG4iCi0iXG4iCi0iQ29tcHJpbWVyIGxhIGJhc2UgbWFpbnRlbmFudCA/IgorIm1vZGUgdW5rbm93biBjb2xvci1tb3ZlZC13cyBpbmNvbm51ICclcycsIGxlcyB2YWxldXJzIHBvc3NpYmxlcyBzb250ICdpZ25vcmUtIgorInNwYWNlLWNoYW5nZScsICdpZ25vcmUtc3BhY2UtYXQtZW9sJywgJ2lnbm9yZS1hbGwtc3BhY2UnLCAnYWxsb3ctaW5kZW50YXRpb24tIgorImNoYW5nZSciCiAKLSM6IGxpYi9kYXRlLnRjbDoyNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgZGF0ZSBmcm9tIEdpdDogJXMiCi1tc2dzdHIgIkRhdGUgaW52YWxpZGUgZGUgR2l0IDogJXMiCi0KLSM6IGxpYi9kaWZmLnRjbDo2NAotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjMzMgogbXNnaWQgIiIKLSJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKLSJcbiIKLSIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKLSJcbiIKLSJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCAiCi0idGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKLSJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlICIKLSJ0aGUgc2FtZSBzdGF0ZS4iCisiY29sb3ItbW92ZWQtd3M6IGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciAiCisid2hpdGVzcGFjZSBtb2RlcyIKIG1zZ3N0ciAiIgotIkF1Y3VuZSBkaWZmw6lyZW5jZSBkw6l0ZWN0w6llLlxuIgotIlxuIgotIiVzIG5lIGNvbXBvcnRlIGF1Y3VuZSBtb2RpZmljYXRpb24uXG4iCi0iXG4iCi0iTGEgZGF0ZSBkZSBtb2RpZmljYXRpb24gZGUgY2UgZmljaGllciBhIMOpdMOpIG1pc2Ugw6Agam91ciBwYXIgdW5lIGF1dHJlICIKLSJhcHBsaWNhdGlvbiwgbWFpcyBsZSBjb250ZW51IGR1IGZpY2hpZXIgbidhIHBhcyBjaGFuZ8OpLlxuIgotIlxuIgotIlVuZSByZXN5bmNocm9uaXNhdGlvbiB2YSDDqnRyZSBsYW5jw6llIGF1dG9tYXRpcXVlbWVudCBwb3VyIHRyb3V2ZXIgZCdhdXRyZXMgIgotImZpY2hpZXJzIHF1aSBwb3VycmFpZW50IHNlIHRyb3V2ZXIgZGFucyBsZSBtw6ptZSDDqXRhdC4iCisiY29sb3ItbW92ZWQtd3PCoDogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIG5lIHBldXQgcGFzIMOqdHJlIGNvbWJpbsOpIGF2ZWMgIgorImQnYXV0cmVzIG1vZGVzIGQnZXNwYWNlIgogCi0jOiBsaWIvZGlmZi50Y2w6MTA0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgotbXNnc3RyICJDaGFyZ2VtZW50IGRlcyBkaWZmw6lyZW5jZXMgZGUgJXMuLi4iCisjOiBkaWZmLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdmFsdWUgZm9yICdkaWZmLnN1Ym1vZHVsZScgY29uZmlnIHZhcmlhYmxlOiAnJXMnIgorbXNnc3RyICIiCisiVmFsZXVyIGluY29ubnVlIHBvdXIgbGEgdmFyaWFibGUgZGUgY29uZmlndXJhdGlvbiAnZGlmZi5zdWJtb2R1bGUnIDogJyVzJyIKIAotIzogbGliL2RpZmYudGNsOjEyNQorIzogZGlmZi5jOjQ2NQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTE9DQUw6IGRlbGV0ZWRcbiIKLSJSRU1PVEU6XG4iCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKKyIlcyIKIG1zZ3N0ciAiIgotIkxPQ0FMIDogc3VwcHJpbcOpXG4iCi0iRElTVEFOVCA6XG4iCisiRXJyZXVycyBkYW5zIGxhIHZhcmlhYmxlIGRlIGNvbmZpZ3VyYXRpb24gJ2RpZmYuZGlyc3RhdCcgOlxuIgorIiVzIgogCi0jOiBsaWIvZGlmZi50Y2w6MTMwCisjOiBkaWZmLmM6NDIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICJsJ2FwcGxpY2F0aW9uIGRlIGRpZmYgZXh0ZXJuZSBhIGRpc3BhcnUsIGFycsOqdCDDoCAlcyIKKworIzogZGlmZi5jOjQ1NDcKK21zZ2lkICItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayBhbmQgLXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgZXQgLXMgc29udCBtdXR1ZWxsZW1lbnQgZXhjbHVzaWZzIgorCisjOiBkaWZmLmM6NDU1MAorbXNnaWQgIi1HLCAtUyBhbmQgLS1maW5kLW9iamVjdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItRywgLVMgZXQgLS1maW5kLW9iamVjdCBzb250IG11dHVlbGxlbWVudCBleGNsdXNpZnMiCisKKyM6IGRpZmYuYzo0NjI4Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIi0tZm9sbG93IGEgYmVzb2luIGQndW5lIHNww6ljaWZpY2F0aW9uIGRlIGNoZW1pbiB1bmlxdWUiCisKKyM6IGRpZmYuYzo0Njc2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1zdGF0IHZhbHVlOiAlcyIKK21zZ3N0ciAidmFsZXVyIGludmFsaWRlIGRlIC0tc3RhdMKgOiAlcyIKKworIzogZGlmZi5jOjQ2ODEgZGlmZi5jOjQ2ODYgZGlmZi5jOjQ2OTEgZGlmZi5jOjQ2OTYgZGlmZi5jOjUyMDkKKyM6IHBhcnNlLW9wdGlvbnMuYzoxOTcgcGFyc2Utb3B0aW9ucy5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICIlcyBhdHRlbmQgdW5lIHZhbGV1ciBudW3DqXJpcXVlIgorCisjOiBkaWZmLmM6NDcxMworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iUkVNT1RFOiBkZWxldGVkXG4iCi0iTE9DQUw6XG4iCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgogbXNnc3RyICIiCi0iRElTVEFOVCA6IHN1cHByaW3DqVxuIgotIkxPQ0FMIDpcbiIKKyJJbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgcGFyYW3DqHRyZSBkZSBsJ29wdGlvbiAtLWRpcnN0YXQvLVggOlxuIgorIiVzIgogCi0jOiBsaWIvZGlmZi50Y2w6MTM3Ci1tc2dpZCAiTE9DQUw6XG4iCi1tc2dzdHIgIkxPQ0FMIDpcbiIKKyM6IGRpZmYuYzo0Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY2hhbmdlIGNsYXNzICclYycgaW4gLS1kaWZmLWZpbHRlcj0lcyIKK21zZ3N0ciAiY2xhc3NlIGRlIG1vZGlmaWNhdGlvbiBpbmNvbm51ZSAnJWMnIGRhbnMgLS1kaWZmLWZpbGV0ZXI9JXMiCiAKLSM6IGxpYi9kaWZmLnRjbDoxNDAKLW1zZ2lkICJSRU1PVEU6XG4iCi1tc2dzdHIgIkRJU1RBTlQgOlxuIgorIzogZGlmZi5jOjQ4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBhZnRlciB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIKK21zZ3N0ciAidmFsZXVyIGluY29ubnVlIGFwcsOocyB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIKIAotIzogbGliL2RpZmYudGNsOjIwMiBsaWIvZGlmZi50Y2w6MzE5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCi1tc2dzdHIgIkltcG9zc2libGUgZCdhZmZpY2hlciAlcyIKKyM6IGRpZmYuYzo0ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgcsOpc291ZHJlICclcyciCiAKLSM6IGxpYi9kaWZmLnRjbDoyMDMKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgotbXNnc3RyICJFcnJldXIgbG9ycyBkdSBjaGFyZ2VtZW50IGR1IGZpY2hpZXIgOiIKKyM6IGRpZmYuYzo0ODg2IGRpZmYuYzo0ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgPG4+LzxtPiBmb3JtIgorbXNnc3RyICJmb3JtZSA8bj4vPG0+IGF0dGVuZHVlIHBhciAlcyIKIAotIzogbGliL2RpZmYudGNsOjIxMAotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKLW1zZ3N0ciAiRMOpcMO0dCBHaXQgKHNvdXMgcHJvamV0KSIKKyM6IGRpZmYuYzo0OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBjaGFyYWN0ZXIsIGdvdCAnJXMnIgorbXNnc3RyICJjYXJhY3TDqHJlIGF0dGVuZHUgcGFyICVzLCAnJXMnIHRyb3V2w6kiCiAKLSM6IGxpYi9kaWZmLnRjbDoyMjIKLW1zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCi1tc2dzdHIgIiogRmljaGllciBiaW5haXJlIChwYXMgZCdhcHBlcsOndSBkdSBjb250ZW51KS4iCisjOiBkaWZmLmM6NDkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS1jb2xvci1tb3ZlZCBhcmd1bWVudDogJXMiCittc2dzdHIgIm1hdXZhaXMgYXJndW1lbnQgLS1jb2xvci1tb3ZlZMKgOiAlcyIKIAotIzogbGliL2RpZmYudGNsOjIyNwotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjQ5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlICclcycgaW4gLS1jb2xvci1tb3ZlZC13cyIKK21zZ3N0ciAibW9kZSBpbnZhbGlkZSAnJXMnIGRhbnMgLS1jb2xvci1tb3ZlZC13cyIKKworIzogZGlmZi5jOjQ5ODQKIG1zZ2lkICIiCi0iKiBVbnRyYWNrZWQgZmlsZSBpcyAlZCBieXRlcy5cbiIKLSIqIFNob3dpbmcgb25seSBmaXJzdCAlZCBieXRlcy5cbiIKKyJvcHRpb24gZGlmZi1hbGdvcml0aG0gYWNjZXB0cyBcIm15ZXJzXCIsIFwibWluaW1hbFwiLCBcInBhdGllbmNlXCIgYW5kICIKKyJcImhpc3RvZ3JhbVwiIgogbXNnc3RyICIiCi0iKiBMZSBmaWNoaWVyIG5vbiBzdWl2aSBmYWl0ICVkIG9jdGV0cy5cbiIKLSIqIFNldWxzIGxlcyAlZCBwcmVtaWVycyBvY3RldHMgc29udCBtb250csOpcy5cbiIKKyJsJ29wdGlvbiBkaWZmLWFsZ29yaXRobSBhY2NlcHQgXCJteWVyc1wiLCBcIm1pbmltYWxcIiwgXCJwYXRpZW5jZVwiIGV0ICIKKyJcImhpc3RvZ3JhbVwiIgogCi0jOiBsaWIvZGlmZi50Y2w6MjMzCi0jLCB0Y2wtZm9ybWF0CisjOiBkaWZmLmM6NTAyMCBkaWZmLmM6NTA0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50IHRvICVzIgorbXNnc3RyICJhcmd1bWVudCBpbnZhbGlkZSBwb3VyICVzIgorCisjOiBkaWZmLmM6NTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnYW5hbHlzZSBkdSBwYXJhbcOodHJlIGRlIGwnb3B0aW9uIC0tc3VibW9kdWxlIDogJyVzJyIKKworIzogZGlmZi5jOjUyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0td29yZC1kaWZmIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAibWF1dmFpcyBhcmd1bWVudCBwb3VyIC0td29yZC1kaWZmwqA6ICVzIgorCisjOiBkaWZmLmM6NTI1NworbXNnaWQgIkRpZmYgb3V0cHV0IGZvcm1hdCBvcHRpb25zIgorbXNnc3RyICJPcHRpb25zIGRlIGZvcm1hdCBkZSBzb3J0aWUgZGUgZGlmZiIKKworIzogZGlmZi5jOjUyNTkgZGlmZi5jOjUyNjUKK21zZ2lkICJnZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAiZ8OpbsOpcmVyIGxhIHJ1c3RpbmUiCisKKyM6IGRpZmYuYzo1MjYyIGJ1aWx0aW4vbG9nLmM6MTczCittc2dpZCAic3VwcHJlc3MgZGlmZiBvdXRwdXQiCittc2dzdHIgInN1cHByaW1lciBsYSBzb3J0aWUgZGVzIGRpZmbDqXJlbmNlcyIKKworIzogZGlmZi5jOjUyNjcgZGlmZi5jOjUzODEgZGlmZi5jOjUzODgKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZGlmZi5jOjUyNjggZGlmZi5jOjUyNzEKK21zZ2lkICJnZW5lcmF0ZSBkaWZmcyB3aXRoIDxuPiBsaW5lcyBjb250ZXh0IgorbXNnc3RyICJnw6luw6lyZXIgbGVzIGRpZmZzIGF2ZWMgPG4+IGxpZ25lcyBkZSBjb250ZXh0ZSIKKworIzogZGlmZi5jOjUyNzMKK21zZ2lkICJnZW5lcmF0ZSB0aGUgZGlmZiBpbiByYXcgZm9ybWF0IgorbXNnc3RyICJnw6luw6lyZXIgbGUgZGlmZiBlbiBmb3JtYXQgYnJ1dCIKKworIzogZGlmZi5jOjUyNzYKK21zZ2lkICJzeW5vbnltIGZvciAnLXAgLS1yYXcnIgorbXNnc3RyICJzeW5vbnltZSBkZSAnLXAgLS1yYXcnIgorCisjOiBkaWZmLmM6NTI4MAorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXN0YXQnIgorbXNnc3RyICJzeW5vbnltZSBkZSAnLXAgLS1zdGF0JyIKKworIzogZGlmZi5jOjUyODQKK21zZ2lkICJtYWNoaW5lIGZyaWVuZGx5IC0tc3RhdCIKK21zZ3N0ciAiLS1zdGF0IHBvdXIgdHJhaXRlbWVudCBhdXRvbWF0aXF1ZSIKKworIzogZGlmZi5jOjUyODcKK21zZ2lkICJvdXRwdXQgb25seSB0aGUgbGFzdCBsaW5lIG9mIC0tc3RhdCIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxhIGRlcm5pw6hyZSBsaWduZSBkZSAtLXN0YXQiCisKKyM6IGRpZmYuYzo1Mjg5IGRpZmYuYzo1Mjk3Cittc2dpZCAiPHBhcmFtMSxwYXJhbTI+Li4uIgorbXNnc3RyICI8cGFyYW0xLHBhcmFtMj4uLi4iCisKKyM6IGRpZmYuYzo1MjkwCittc2dpZCAiIgorIm91dHB1dCB0aGUgZGlzdHJpYnV0aW9uIG9mIHJlbGF0aXZlIGFtb3VudCBvZiBjaGFuZ2VzIGZvciBlYWNoIHN1Yi1kaXJlY3RvcnkiCittc2dzdHIgIiIKKyJhZmZpY2hlciBsYSBkaXN0cmlidXRpb24gZGVzIHF1YW50aXTDqXMgZGUgbW9kaWZpY2F0aW9ucyByZWxhdGl2ZXMgcG91ciAiCisiY2hhcXVlIHNvdXMtcsOpcGVydG9pcmUiCisKKyM6IGRpZmYuYzo1Mjk0Cittc2dpZCAic3lub255bSBmb3IgLS1kaXJzdGF0PWN1bXVsYXRpdmUiCittc2dzdHIgInN5bm9ueW1lIHBvdXIgLS1kaXJzdGF0PWN1bXVsYXRpdmUiCisKKyM6IGRpZmYuYzo1Mjk4Cittc2dpZCAic3lub255bSBmb3IgLS1kaXJzdGF0PWZpbGVzLHBhcmFtMSxwYXJhbTIuLi4iCittc2dzdHIgInN5bm9ueW1lIHBvdXIgLS1kaXJzdGF0PWZpbGVzLHBhcmFtMSxwYXJhbTIuLi4iCisKKyM6IGRpZmYuYzo1MzAyCittc2dpZCAid2FybiBpZiBjaGFuZ2VzIGludHJvZHVjZSBjb25mbGljdCBtYXJrZXJzIG9yIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICIiCisiYXZlcnRpciBzaSBsZXMgbW9kaWZpY2F0aW9ucyBpbnRyb2R1aXNlbnQgZGVzIG1hcnF1ZXVycyBkZSBjb25mbGl0IG91IGRlcyAiCisiZXJyZXVycyBkJ2VzcGFjZSIKKworIzogZGlmZi5jOjUzMDUKK21zZ2lkICJjb25kZW5zZWQgc3VtbWFyeSBzdWNoIGFzIGNyZWF0aW9ucywgcmVuYW1lcyBhbmQgbW9kZSBjaGFuZ2VzIgorbXNnc3RyICIiCisicsOpc3Vtw6kgc3VjY2luY3QgdGVsIHF1ZSBsZXMgY3LDqWF0aW9ucywgbGVzIHJlbm9tbWFnZXMgZXQgbGVzIG1vZGlmaWNhdGlvbnMgIgorImRlIG1vZGUiCisKKyM6IGRpZmYuYzo1MzA4Cittc2dpZCAic2hvdyBvbmx5IG5hbWVzIG9mIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgIm4nYWZmaWNoZXIgcXVlIGxlcyBub21zIGRlIGZpY2hpZXJzIG1vZGlmacOpcyIKKworIzogZGlmZi5jOjUzMTEKK21zZ2lkICJzaG93IG9ubHkgbmFtZXMgYW5kIHN0YXR1cyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJuJ2FmZmljaGVyIHF1ZSBsZXMgbm9tcyBldCBsZXMgc3RhdHVzIGRlcyBmaWNoaWVycyBtb2RpZmnDqXMiCisKKyM6IGRpZmYuYzo1MzEzCittc2dpZCAiPHdpZHRoPlssPG5hbWUtd2lkdGg+Wyw8Y291bnQ+XV0iCittc2dzdHIgIjxsYXJnZXVyPlssPGxhcmdldXItZGUtbm9tPlssPGNvbXB0ZT5dXSIKKworIzogZGlmZi5jOjUzMTQKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCIKK21zZ3N0ciAiZ8OpbsOpcmVyIHVuIGRpZmZzdGF0IgorCisjOiBkaWZmLmM6NTMxNiBkaWZmLmM6NTMxOSBkaWZmLmM6NTMyMgorbXNnaWQgIjx3aWR0aD4iCittc2dzdHIgIjxsYXJnZXVyPiIKKworIzogZGlmZi5jOjUzMTcKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gd2lkdGgiCittc2dzdHIgImfDqW7DqXJlciB1biBkaWZmc3RhdCBhdmVjIGxhIGxhcmdldXIgaW5kaXF1w6llIgorCisjOiBkaWZmLmM6NTMyMAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiBuYW1lIHdpZHRoIgorbXNnc3RyICJnw6luZXJlciB1biBkaWZmc3RhdCBhdmVjIGxhIGxhcmdldXIgZGUgbm9tIGluZGlxdcOpZSIKKworIzogZGlmZi5jOjUzMjMKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gZ3JhcGggd2lkdGgiCittc2dzdHIgImfDqW5lcmVyIHVuIGRpZmZzdGF0IGF2ZWMgbGEgbGFyZ2V1ciBkZSBncmFwaGUgaW5kaXF1w6llIgorCisjOiBkaWZmLmM6NTMyNQorbXNnaWQgIjxjb3VudD4iCittc2dzdHIgIjxjb21wdGU+IgorCisjOiBkaWZmLmM6NTMyNgorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggbGltaXRlZCBsaW5lcyIKK21zZ3N0ciAiZ8OpbsOpcmVyIHVuIGRpZmZzdGF0IGF2ZWMgZGVzIGxpZ25lcyBsaW1pdMOpZXMiCisKKyM6IGRpZmYuYzo1MzI5Cittc2dpZCAiZ2VuZXJhdGUgY29tcGFjdCBzdW1tYXJ5IGluIGRpZmZzdGF0IgorbXNnc3RyICJnw6luw6lyZXIgdW5lIHLDqXN1bcOpIGNvbXBhY3QgZGFucyBsZSBkaWZmc3RhdCIKKworIzogZGlmZi5jOjUzMzIKK21zZ2lkICJvdXRwdXQgYSBiaW5hcnkgZGlmZiB0aGF0IGNhbiBiZSBhcHBsaWVkIgorbXNnc3RyICJwcm9kdWlyZSB1biBkaWZmIGJpbmFpcmUgcXVpIHBldXQgw6p0cmUgYXBwbGlxdcOpIgorCisjOiBkaWZmLmM6NTMzNQorbXNnaWQgInNob3cgZnVsbCBwcmUtIGFuZCBwb3N0LWltYWdlIG9iamVjdCBuYW1lcyBvbiB0aGUgXCJpbmRleFwiIGxpbmVzIgorbXNnc3RyICIiCisiYWZmaWNoZXIgbGVzIG5vbXMgY29tcGxldHMgZGVzIG9iamV0cyBwcmUtIGV0IHBvc3QtaW1hZ2Ugc3VyIGxlcyBsaWduZXMgIgorIlwiaW5kZXhcIiIKKworIzogZGlmZi5jOjUzMzcKK21zZ2lkICJzaG93IGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAiYWZmaWNoZXIgdW4gZGlmZiBjb2xvcsOpIgorCisjOiBkaWZmLmM6NTMzOAorbXNnaWQgIjxraW5kPiIKK21zZ3N0ciAiPHNvcnRlPiIKKworIzogZGlmZi5jOjUzMzkKK21zZ2lkICIiCisiaGlnaGxpZ2h0IHdoaXRlc3BhY2UgZXJyb3JzIGluIHRoZSAnY29udGV4dCcsICdvbGQnIG9yICduZXcnIGxpbmVzIGluIHRoZSAiCisiZGlmZiIKK21zZ3N0ciAiIgorInN1cmxpZ25lciBsZXMgZXJyZXVycyBkJ2VzcGFjZSBkYW5zIGxlcyBsaWduZXMgJ2NvbnRleHRlJywgJ2FuY2llbicsICIKKyInbm91dmVhdScgZGFucyBsZSBkaWZmIgorCisjOiBkaWZmLmM6NTM0MgorbXNnaWQgIiIKKyJkbyBub3QgbXVuZ2UgcGF0aG5hbWVzIGFuZCB1c2UgTlVMcyBhcyBvdXRwdXQgZmllbGQgdGVybWluYXRvcnMgaW4gLS1yYXcgb3IgIgorIi0tbnVtc3RhdCIKK21zZ3N0ciAiIgorIm5lIHBhcyBjb21wcmVzc2VyIGxlcyBjaGVtaW5zIGV0IHV0aWxpc2VyIGRlcyBOVUxzIGNvbW1lIHRlcm1pbmF0ZXVycyBkZSAiCisiY2hhbXBzIGRhbnMgLS1yYXcgb3UgLS1udW1zdGF0IgorCisjOiBkaWZmLmM6NTM0NSBkaWZmLmM6NTM0OCBkaWZmLmM6NTM1MSBkaWZmLmM6NTQ1NworbXNnaWQgIjxwcmVmaXg+IgorbXNnc3RyICI8cHLDqWZpeGU+IgorCisjOiBkaWZmLmM6NTM0NgorbXNnaWQgInNob3cgdGhlIGdpdmVuIHNvdXJjZSBwcmVmaXggaW5zdGVhZCBvZiBcImEvXCIiCittc2dzdHIgImFmZmljaGVyIGxlIHByw6lmaXhlIGRlIHNvdXJjZSBpbmRpcXXDqSBhdSBsaWV1IGRlIFwiYS9cIiIKKworIzogZGlmZi5jOjUzNDkKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBwcmVmaXggaW5zdGVhZCBvZiBcImIvXCIiCittc2dzdHIgImFmZmljaGVyIGxlIHByw6lmaXhlIGRlIGRlc3RpbmF0aW9uIGluZGlxdcOpIGF1IGxpZXUgZGUgXCJiL1wiIgorCisjOiBkaWZmLmM6NTM1MgorbXNnaWQgInByZXBlbmQgYW4gYWRkaXRpb25hbCBwcmVmaXggdG8gZXZlcnkgbGluZSBvZiBvdXRwdXQiCittc2dzdHIgInByw6lmaXhlciB0b3V0ZXMgbGVzIGxpZ25lcyBlbiBzb3J0aWUgYXZlYyBsYSBjaGHDrm5lIGluZGlxdcOpZSIKKworIzogZGlmZi5jOjUzNTUKK21zZ2lkICJkbyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeCIKK21zZ3N0ciAibidhZmZpY2hlciBhdWN1biBwcsOpZml4ZSwgbmkgZGUgc291cmNlLCBuaSBkZSBkZXN0aW5hdGlvbiIKKworIzogZGlmZi5jOjUzNTgKK21zZ2lkICJzaG93IGNvbnRleHQgYmV0d2VlbiBkaWZmIGh1bmtzIHVwIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGxpbmVzIgorbXNnc3RyICIiCisiYWZmaWNoZXIgbGUgY29udGV4dGUgZW50cmUgbGVzIHNlY3Rpb25zIMOgIGNvbmN1cnJlbmNlIGR1IG5vbWJyZSBkZSBsaWduZSAiCisiaW5kaXF1w6kiCisKKyM6IGRpZmYuYzo1MzYyIGRpZmYuYzo1MzY3IGRpZmYuYzo1MzcyCittc2dpZCAiPGNoYXI+IgorbXNnc3RyICI8Y2FyYWN0w6hyZT4iCisKKyM6IGRpZmYuYzo1MzYzCittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGEgbmV3IGxpbmUgaW5zdGVhZCBvZiAnKyciCittc2dzdHIgInNww6ljaWZpZXIgbGUgY2FyYWN0w6hyZSBwb3VyIGluZGlxdWVyIHVuZSBub3V2ZWxsZSBsaWduZSBhdSBsaWV1IGRlICcrJyIKKworIzogZGlmZi5jOjUzNjgKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYW4gb2xkIGxpbmUgaW5zdGVhZCBvZiAnLSciCittc2dzdHIgInNww6ljaWZpZXIgbGUgY2FyYWN0w6hyZSBwb3VyIGluZGlxdWVyIHVuZSBhbmNpZW5uZSBsaWduZSBhdSBsaWV1IGRlICctJyIKKworIzogZGlmZi5jOjUzNzMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBjb250ZXh0IGluc3RlYWQgb2YgJyAnIgorbXNnc3RyICIiCisic3DDqWNpZmllciBsZSBjYXJhY3TDqHJlIHBvdXIgaW5kaXF1ZXIgdW5lIGxpZ25lIGRlIGNvbnRleHRlIGF1IGxpZXUgZGUgJyAnIgorCisjOiBkaWZmLmM6NTM3NgorbXNnaWQgIkRpZmYgcmVuYW1lIG9wdGlvbnMiCittc2dzdHIgIk9wdGlvbnMgZGUgcmVub21tYWdlIGRlIGRpZmYiCisKKyM6IGRpZmYuYzo1Mzc3Cittc2dpZCAiPG4+Wy88bT5dIgorbXNnc3RyICI8bj5bLzxtPl0iCisKKyM6IGRpZmYuYzo1Mzc4Cittc2dpZCAiYnJlYWsgY29tcGxldGUgcmV3cml0ZSBjaGFuZ2VzIGludG8gcGFpcnMgb2YgZGVsZXRlIGFuZCBjcmVhdGUiCittc2dzdHIgIiIKKyJjYXNzZXIgbGVzIG1vZGlmaWNhdGlvbnMgZCd1bmUgcsOpw6ljcmlyZSBjb21wbMOodGUgZW4gcGFpcmVzIGRlIHN1cHByZXNzaW9uIGV0ICIKKyJjcsOpYXRpb24iCisKKyM6IGRpZmYuYzo1MzgyCittc2dpZCAiZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgImTDqXRlY3RlciBsZXMgcmVub21tYWdlcyIKKworIzogZGlmZi5jOjUzODYKK21zZ2lkICJvbWl0IHRoZSBwcmVpbWFnZSBmb3IgZGVsZXRlcyIKK21zZ3N0ciAic3VwcHJpbWVyIGxhIHByw6ktaW1hZ2UgcG91ciBsZXMgc3VwcHJlc3Npb25zIgorCisjOiBkaWZmLmM6NTM4OQorbXNnaWQgImRldGVjdCBjb3BpZXMiCittc2dzdHIgImTDqXRlY3RlciBsZXMgY29waWVzIgorCisjOiBkaWZmLmM6NTM5MworbXNnaWQgInVzZSB1bm1vZGlmaWVkIGZpbGVzIGFzIHNvdXJjZSB0byBmaW5kIGNvcGllcyIKK21zZ3N0ciAiIgorInV0aWxpc2VyIGxlcyBmaWNoaWVycyBub24tbW9kaWZpw6lzIGNvbW1lIHNvdXJjZXMgcG91ciB0cm91dmVyIGRlcyBjb3BpZXMiCisKKyM6IGRpZmYuYzo1Mzk1Cittc2dpZCAiZGlzYWJsZSByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICJkw6lzYWN0aXZlciBsYSBkw6l0ZWN0aW9uIGRlIHJlbm9tbWFnZSIKKworIzogZGlmZi5jOjUzOTgKK21zZ2lkICJ1c2UgZW1wdHkgYmxvYnMgYXMgcmVuYW1lIHNvdXJjZSIKK21zZ3N0ciAidXRpbGlzZXIgZGVzIGJsb2JzIHZpZGVzIGNvbW1lIHNvdXJjZSBkZSByZW5vbW1hZ2UiCisKKyM6IGRpZmYuYzo1NDAwCittc2dpZCAiY29udGludWUgbGlzdGluZyB0aGUgaGlzdG9yeSBvZiBhIGZpbGUgYmV5b25kIHJlbmFtZXMiCittc2dzdHIgImNvbnRpbnVlciDDoCBhZmZpY2hlciBsJ2hpc3RvcmlxdWUgZCd1biBmaWNoaWVyIGF1IGRlbMOgIGRlcyByZW5vbW1hZ2VzIgorCisjOiBkaWZmLmM6NTQwMworbXNnaWQgIiIKKyJwcmV2ZW50IHJlbmFtZS9jb3B5IGRldGVjdGlvbiBpZiB0aGUgbnVtYmVyIG9mIHJlbmFtZS9jb3B5IHRhcmdldHMgZXhjZWVkcyAiCisiZ2l2ZW4gbGltaXQiCittc2dzdHIgIiIKKyJlbXDDqmNoZXIgbGEgZMOpdGVjdGlvbiBkZSByZW5vbW1hZ2UvY29waWUgc2kgbGUgbm9tYnJlIGRlIGNpYmxlcyBkZSByZW5vbW1hZ2UvIgorImNvcGllIGV4Y8OoZGUgbGEgbGltaXRlIGluZGlxdcOpZSIKKworIzogZGlmZi5jOjU0MDUKK21zZ2lkICJEaWZmIGFsZ29yaXRobSBvcHRpb25zIgorbXNnc3RyICJPcHRpb25zIGRlIGwnYWxnb3JpdGhtZSBkZSBkaWZmIgorCisjOiBkaWZmLmM6NTQwNworbXNnaWQgInByb2R1Y2UgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGRpZmYiCittc2dzdHIgInByb2R1aXJlIGxlIGRpZmYgbGUgcGx1cyBwZXRpdCBwb3NzaWJsZSIKKworIzogZGlmZi5jOjU0MTAKK21zZ2lkICJpZ25vcmUgd2hpdGVzcGFjZSB3aGVuIGNvbXBhcmluZyBsaW5lcyIKK21zZ3N0ciAiaWdub3JlciBsZXMgZXNwYWNlcyBsb3JzIGRlIGxhIGNvbXBhcmFpc29uIGRlIGxpZ25lIgorCisjOiBkaWZmLmM6NTQxMworbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZXNwYWNlIgorbXNnc3RyICJpZ25vcmVyIGRlcyBtb2RpZmljYXRpb25zIGR1IG5vbWJyZSBkJ2VzcGFjZXMiCisKKyM6IGRpZmYuYzo1NDE2Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSBhdCBFT0wiCittc2dzdHIgImlnbm9yZXIgZGVzIG1vZGlmaWNhdGlvbnMgZCdlc3BhY2UgZW4gZmluIGRlIGxpZ25lIgorCisjOiBkaWZmLmM6NTQxOQorbXNnaWQgImlnbm9yZSBjYXJyaWVyLXJldHVybiBhdCB0aGUgZW5kIG9mIGxpbmUiCittc2dzdHIgImlnbm9yZSBsZSByZXRvdXIgY2hhcmlvdCBlbiBmaW4gZGUgbGlnbmUiCisKKyM6IGRpZmYuYzo1NDIyCittc2dpZCAiaWdub3JlIGNoYW5nZXMgd2hvc2UgbGluZXMgYXJlIGFsbCBibGFuayIKK21zZ3N0ciAiaWdub3JlciBsZXMgbW9kaWZpY2F0aW9ucyBkb250IGxlcyBsaWduZXMgc29udCB2aWRlcyIKKworIzogZGlmZi5jOjU0MjUKK21zZ2lkICJoZXVyaXN0aWMgdG8gc2hpZnQgZGlmZiBodW5rIGJvdW5kYXJpZXMgZm9yIGVhc3kgcmVhZGluZyIKK21zZ3N0ciAiIgorImhldXJpc3RpcXVlIHF1aSBkw6lwbGFjZSBsZXMgbGltaXRlcyBkZSBzZWN0aW9ucyBkZSBkaWZmIHBvdXIgZmFjaWxpdGVyIGxhICIKKyJsZWN0dXJlIgorCisjOiBkaWZmLmM6NTQyOAorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwicGF0aWVuY2UgZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiZ8OpbsOpcmVyIHVuIGRpZmYgZW4gdXRpbGlzYW50IGwnYWxnb3JpdGhtZSBkZSBkaWZmw6lyZW5jZSBcInBhdGllbmNlXCIiCisKKyM6IGRpZmYuYzo1NDMyCittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJoaXN0b2dyYW0gZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiIgorImfDqW7DqXJlciB1biBkaWZmIGVuIHV0aWxpc2FudCBsJ2FsZ29yaXRobWUgZGUgZGlmZsOpcmVuY2UgXCJoaXN0b2dyYW1tZVwiIgorCisjOiBkaWZmLmM6NTQzNAorbXNnaWQgIjxhbGdvcml0aG0+IgorbXNnc3RyICI8YWxnb3JpdGhtZT4iCisKKyM6IGRpZmYuYzo1NDM1Cittc2dpZCAiY2hvb3NlIGEgZGlmZiBhbGdvcml0aG0iCittc2dzdHIgImNob2lzaXIgdW4gYWxnb3JpdGhtZSBkZSBkaWZmw6lyZW5jZSIKKworIzogZGlmZi5jOjU0MzcKK21zZ2lkICI8dGV4dD4iCittc2dzdHIgIjx0ZXh0ZT4iCisKKyM6IGRpZmYuYzo1NDM4Cittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJhbmNob3JlZCBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICJnw6luw6lyZXIgdW4gZGlmZiBlbiB1dGlsaXNhbnQgbCdhbGdvcml0aG1lIGRlIGRpZmbDqXJlbmNlIFwiYW5jcsOpXCIiCisKKyM6IGRpZmYuYzo1NDQwIGRpZmYuYzo1NDQ5IGRpZmYuYzo1NDUyCittc2dpZCAiPG1vZGU+IgorbXNnc3RyICI8bW9kZT4iCisKKyM6IGRpZmYuYzo1NDQxCittc2dpZCAic2hvdyB3b3JkIGRpZmYsIHVzaW5nIDxtb2RlPiB0byBkZWxpbWl0IGNoYW5nZWQgd29yZHMiCittc2dzdHIgIiIKKyJhZmZpY2hlciBkZXMgZGlmZsOpcmVuY2VzIHBhciBtb3QsIGVuIHV0aWxpc2FudCA8bW9kZT4gcG91ciBkw6lsaW1pdGVyIGxlcyAiCisibW90cyBtb2RpZmnDqXMiCisKKyM6IGRpZmYuYzo1NDQzIGRpZmYuYzo1NDQ2IGRpZmYuYzo1NDkxCittc2dpZCAiPHJlZ2V4PiIKK21zZ3N0ciAiPHJlZ2V4PiIKKworIzogZGlmZi5jOjU0NDQKK21zZ2lkICJ1c2UgPHJlZ2V4PiB0byBkZWNpZGUgd2hhdCBhIHdvcmQgaXMiCittc2dzdHIgInV0aWxpc2VyIDxyZWdleD4gcG91ciBkw6ljaWRlciBjZSBxdSdlc3QgdW4gbW90IgorCisjOiBkaWZmLmM6NTQ0NworbXNnaWQgImVxdWl2YWxlbnQgdG8gLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9PHJlZ2V4PiIKK21zZ3N0ciAiw6lxdWl2YWxlbnQgw6AgLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9PHJlZ2V4PiIKKworIzogZGlmZi5jOjU0NTAKK21zZ2lkICJtb3ZlZCBsaW5lcyBvZiBjb2RlIGFyZSBjb2xvcmVkIGRpZmZlcmVudGx5IgorbXNnc3RyICJsZXMgbGlnbmVzIGTDqXBsYWPDqWVzIHNvbnQgY29sb3LDqWVzIGRpZmbDqXJlbW1lbnQiCisKKyM6IGRpZmYuYzo1NDUzCittc2dpZCAiaG93IHdoaXRlIHNwYWNlcyBhcmUgaWdub3JlZCBpbiAtLWNvbG9yLW1vdmVkIgorbXNnc3RyICJjb21tZW50IGxlcyBlc3BhY2VzIHNvbnQgaWdub3LDqXMgZGFucyAtLWNvbG9yLW1vdmVkIgorCisjOiBkaWZmLmM6NTQ1NgorbXNnaWQgIk90aGVyIGRpZmYgb3B0aW9ucyIKK21zZ3N0ciAiQXV0cmVzIG9wdGlvbnMgZGlmZiIKKworIzogZGlmZi5jOjU0NTgKK21zZ2lkICJ3aGVuIHJ1biBmcm9tIHN1YmRpciwgZXhjbHVkZSBjaGFuZ2VzIG91dHNpZGUgYW5kIHNob3cgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgIiIKKyJsYW5jw6kgZGVwdWlzIHVuIHNvdXMtcsOpcGVydG9pcmUsIGV4Y2x1cmUgbGVzIG1vZGlmaWNhdGlvbnMgZW4gZGVob3JzIGV0ICIKKyJhZmZpY2hlciBsZXMgY2hlbWlucyByZWxhdGlmcyIKKworIzogZGlmZi5jOjU0NjIKK21zZ2lkICJ0cmVhdCBhbGwgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAidHJhaXRlciBsZXMgZmljaGllcnMgY29tbWUgdGV4dGUiCisKKyM6IGRpZmYuYzo1NDY0Cittc2dpZCAic3dhcCB0d28gaW5wdXRzLCByZXZlcnNlIHRoZSBkaWZmIgorbXNnc3RyICLDqWNoYW5nZXIgbGVzIGVudHLDqWVzLCBpbnZlcnNlciBsZSBkaWZmIgorCisjOiBkaWZmLmM6NTQ2NgorbXNnaWQgImV4aXQgd2l0aCAxIGlmIHRoZXJlIHdlcmUgZGlmZmVyZW5jZXMsIDAgb3RoZXJ3aXNlIgorbXNnc3RyICJzb3J0aXIgdW4gY29kZSBkJ2VycmV1ciAxIHMnaWwgeSBhdmFpdCBkZSBkaWZmw6lyZW5jZXMsIDAgc2lub24iCisKKyM6IGRpZmYuYzo1NDY4Cittc2dpZCAiZGlzYWJsZSBhbGwgb3V0cHV0IG9mIHRoZSBwcm9ncmFtIgorbXNnc3RyICJkw6lzYWN0aXZlciB0b3VzIGxlcyBhZmZpY2hhZ2VzIGR1IHByb2dyYW1tZSIKKworIzogZGlmZi5jOjU0NzAKK21zZ2lkICJhbGxvdyBhbiBleHRlcm5hbCBkaWZmIGhlbHBlciB0byBiZSBleGVjdXRlZCIKK21zZ3N0ciAiYXV0b3Jpc2VyIGwnZXjDqWN1dGlvbiBkJ3VuIGFzc2lzdGFudCBleHRlcm5lIGRlIGRpZmYiCisKKyM6IGRpZmYuYzo1NDcyCittc2dpZCAicnVuIGV4dGVybmFsIHRleHQgY29udmVyc2lvbiBmaWx0ZXJzIHdoZW4gY29tcGFyaW5nIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAiIgorImxhbmNlciBsZXMgZmlsdHJlcyBleHRlcm5lcyBkZSBjb252ZXJzaW9uIGVuIHRleHRlIGxvcnMgZGUgbGEgY29tcGFyYWlzb24gZGUgIgorImZpY2hpZXJzIGJpbmFpcmVzIgorCisjOiBkaWZmLmM6NTQ3NAorbXNnaWQgIjx3aGVuPiIKK21zZ3N0ciAiPHF1YW5kPiIKKworIzogZGlmZi5jOjU0NzUKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzIGluIHRoZSBkaWZmIGdlbmVyYXRpb24iCittc2dzdHIgIiIKKyJpZ25vcmVyIGxlcyBtb2RpZmljYXRpb25zIGRhbnMgbGVzIHNvdXMtbW9kdWxlcyBsb3JzIGRlIGxhIGfDqW7DqXJhdGlvbiBkZSBkaWZmIgorCisjOiBkaWZmLmM6NTQ3OAorbXNnaWQgIjxmb3JtYXQ+IgorbXNnc3RyICI8Zm9ybWF0PiIKKworIzogZGlmZi5jOjU0NzkKK21zZ2lkICJzcGVjaWZ5IGhvdyBkaWZmZXJlbmNlcyBpbiBzdWJtb2R1bGVzIGFyZSBzaG93biIKK21zZ3N0ciAic3DDqWNpZmllciBjb21tZW50IGxlcyBkaWZmw6lyZW5jZXMgZGFucyBsZXMgc291cy1tb2R1bGVzIHNvbnQgYWZmaWNow6llcyIKKworIzogZGlmZi5jOjU0ODMKK21zZ2lkICJoaWRlICdnaXQgYWRkIC1OJyBlbnRyaWVzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJtYXNxdWVyIGxlcyBlbnRyw6llcyAnZ2l0IGFkZCAtTicgZGUgbCdpbmRleCIKKworIzogZGlmZi5jOjU0ODYKK21zZ2lkICJ0cmVhdCAnZ2l0IGFkZCAtTicgZW50cmllcyBhcyByZWFsIGluIHRoZSBpbmRleCIKK21zZ3N0ciAidHJhaXRlciBsZXMgZW50csOpZXMgJ2dpdCBhZGQgLU4nIGNvbW1lIHLDqWVsbGVzIGRhbnMgbCdpbmRleCIKKworIzogZGlmZi5jOjU0ODgKK21zZ2lkICI8c3RyaW5nPiIKK21zZ3N0ciAiPGNoYcOubmU+IgorCisjOiBkaWZmLmM6NTQ4OQorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInN0cmluZyIKK21zZ3N0ciAiIgorInJlY2hlcmNoZXIgbGVzIGRpZmbDqXJlbmNlcyBxdWkgbW9kaWZpZW50IGxlIG5vbWJyZSBkJ29jY3VycmVuY2VzIGRlIGxhICIKKyJjaGHDrm5lIHNww6ljaWZpw6llIgorCisjOiBkaWZmLmM6NTQ5MgorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInJlZ2V4IgorbXNnc3RyICIiCisicmVjaGVyY2hlciBsZXMgZGlmZsOpcmVuY2VzIHF1aSBtb2RpZmllbnQgbGUgbm9tYnJlIGQnb2NjdXJyZW5jZXMgZGUgbGEgcmVnZXggIgorInNww6ljaWZpw6llIgorCisjOiBkaWZmLmM6NTQ5NQorbXNnaWQgInNob3cgYWxsIGNoYW5nZXMgaW4gdGhlIGNoYW5nZXNldCB3aXRoIC1TIG9yIC1HIgorbXNnc3RyICIiCisiYWZmaWNoZXIgdG91dGVzIGxlcyBtb2RpZmljYXRpb25zIGRhbnMgbCdlbnNlbWJsZSBkZSBtb2RpZmljYXRpb25zIGF2ZWMgLVMgIgorIm91IC1HIgorCisjOiBkaWZmLmM6NTQ5OAorbXNnaWQgInRyZWF0IDxzdHJpbmc+IGluIC1TIGFzIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorInRyYWl0ZXIgPGNoYcOubmU+IGRhbnMgLVMgY29tbWUgdW5lIGV4cHJlc3Npb24gcmF0aW9ubmVsbGUgUE9TSVggw6l0ZW5kdWUiCisKKyM6IGRpZmYuYzo1NTAxCittc2dpZCAiY29udHJvbCB0aGUgb3JkZXIgaW4gd2hpY2ggZmlsZXMgYXBwZWFyIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImNvbnRyw7RsZXIgbCdvcmRyZSBkYW5zIGxlcXVlbCBsZXMgZmljaGllcnMgYXBwYXJhaXNzZW50IGRhbnMgbGEgc29ydGllIgorCisjOiBkaWZmLmM6NTUwMgorbXNnaWQgIjxvYmplY3QtaWQ+IgorbXNnc3RyICI8aWQtb2JqZXQ+IgorCisjOiBkaWZmLmM6NTUwMworbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorIm9iamVjdCIKK21zZ3N0ciAiIgorInJlY2hlcmNoZXIgbGVzIGRpZmbDqXJlbmNlcyBxdWkgbW9kaWZpZW50IGxlIG5vbWJyZSBkJ29jY3VycmVuY2VzIGRlIGwnb2JqZXQgIgorImluZGlxdcOpIgorCisjOiBkaWZmLmM6NTUwNQorbXNnaWQgIlsoQXxDfER8TXxSfFR8VXxYfEIpLi4uWypdXSIKK21zZ3N0ciAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorCisjOiBkaWZmLmM6NTUwNgorbXNnaWQgInNlbGVjdCBmaWxlcyBieSBkaWZmIHR5cGUiCittc2dzdHIgInPDqWxlY3Rpb25uZXIgbGVzIGZpY2hpZXJzIHBhciB0eXBlcyBkZSBkaWZmIgorCisjOiBkaWZmLmM6NTUwOAorbXNnaWQgIjxmaWxlPiIKK21zZ3N0ciAiPGZpY2hpZXI+IgorCisjOiBkaWZmLmM6NTUwOQorbXNnaWQgIk91dHB1dCB0byBhIHNwZWNpZmljIGZpbGUiCittc2dzdHIgIlNvcnRpZSB2ZXJzIHVuIGZpY2hpZXIgc3DDqWNpZmnDqSIKKworIzogZGlmZi5jOjYxNjQKK21zZ2lkICJpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24gd2FzIHNraXBwZWQgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAiIgorImTDqXRlY3Rpb24gZGUgcmVub21tYWdlIGluZXhhY3QgYW5udWzDqWUgw6AgY2F1c2UgZCd1biB0cm9wIGdyYW5kIG5vbWJyZSBkZSAiCisiZmljaGllcnMuIgorCisjOiBkaWZmLmM6NjE2NworbXNnaWQgIm9ubHkgZm91bmQgY29waWVzIGZyb20gbW9kaWZpZWQgcGF0aHMgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAiIgorInJlY2hlcmNoZSB1bmlxdWVtZW50IGRlcyBjb3BpZXMgcGFyIG1vZGlmaWNhdGlvbiBkZSBjaGVtaW4gw6AgY2F1c2UgZCd1biB0cm9wICIKKyJncmFuZCBub21icmUgZGUgZmljaGllcnMuIgorCisjOiBkaWZmLmM6NjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IG1heSB3YW50IHRvIHNldCB5b3VyICVzIHZhcmlhYmxlIHRvIGF0IGxlYXN0ICVkIGFuZCByZXRyeSB0aGUgY29tbWFuZC4iCittc2dzdHIgIiIKKyJ2b3VzIHNvdWhhaXRleiBwZXV0LcOqdHJlIHLDqWdsZXIgbGEgdmFyaWFibGUgJXMgw6AgYXUgbW9pbnMgJWQgZXQgcsOpZXNzYXllciBsZSAiCisiY29tbWFuZGUuIgorCisjOiBkaXIuYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdCIKK21zZ3N0ciAiIgorImxlIHNww6ljaWZpY2F0ZXVyIGRlIGNoZW1pbiAnJXMnIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gZmljaGllciBjb25udSBkZSBnaXQiCisKKyM6IGRpci5jOjY5NSBkaXIuYzo3MjQgZGlyLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICJtb3RpZiBub24gcmVjb25udcKgOiAnJXMnIgorCisjOiBkaXIuYzo3NTQgZGlyLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICJtb3RpZiBuw6lnYXRpZiBub24gcmVjb25udcKgOiAnJXMnIgorCisjOiBkaXIuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgaGF2ZSBpc3N1ZXM6IHBhdHRlcm4gJyVzJyBpcyByZXBlYXRlZCIKK21zZ3N0ciAiIgorInZvdHJlIGZpY2hpZXIgZCdleHRyYWN0aW9uIHBhcnRpZWxsZSBwb3VycmFpdCBwcsOpc2VudGVyIGRlcyBwcm9ibMOobWVzwqA6IGxlICIKKyJtb3RpZiAnJXMnIGVzdCByw6lww6l0w6kiCisKKyM6IGRpci5jOjc5NgorbXNnaWQgImRpc2FibGluZyBjb25lIHBhdHRlcm4gbWF0Y2hpbmciCittc2dzdHIgImTDqXNhY3RpdmF0aW9uIGRlIGxhIGNvcnJlc3BvbmRhbmNlIGRlIG1vdGlmIGRlIGNvbmUiCisKKyM6IGRpci5jOjExNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZCd1dGlsaXNlciAlcyBjb21tZSBmaWNoaWVyIGQnZXhjbHVzaW9uIgorCisjOiBkaXIuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyIGxlIHLDqXBlcnRvaXJlICclcyciCisKKyM6IGRpci5jOjI0NzkKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IGtlcm5lbCBuYW1lIGFuZCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiZWNoZWMgZGUgbCdvYnRlbnRpb24gZCdpbmZvcm1hdGlvbiBkZSBrZXJuZWwiCisKKyM6IGRpci5jOjI2MDMKK21zZ2lkICJ1bnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24iCittc2dzdHIgIkxlIGNhY2hlIG5vbiBzdWl2aSBlc3QgZMOpc2FjdGl2w6kgc3VyIGNlIHN5c3TDqG1lIG91IHN1ciBjZXQgZW5kcm9pdCIKKworIzogZGlyLmM6MzQwNworIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQgaW4gcmVwbyAlcyIKK21zZ3N0ciAiZmljaGllciBkJ2luZGV4IGNvcnJvbXB1IGRhbnMgbGUgZMOpcMO0dCAlcyIKKworIzogZGlyLmM6MzQ1MiBkaXIuYzozNDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZXMgcsOpcGVydG9pcmVzIHBvdXIgJXMiCisKKyM6IGRpci5jOjM0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1pZ3JhdGUgZ2l0IGRpcmVjdG9yeSBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBtaWdyZXIgbGUgcsOpcGVydG9pcmUgZ2l0IGRlICclcycgdmVycyAnJXMnIgorCisjOiBlZGl0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiBXYWl0aW5nIGZvciB5b3VyIGVkaXRvciB0byBjbG9zZSB0aGUgZmlsZS4uLiVjIgorbXNnc3RyICIiCisic3VnZ2VzdGlvbsKgOiBlbiBhdHRlbnRlIGRlIGxhIGZlcm1ldHVyZSBkdSBmaWNoaWVyIHBhciB2b3RyZSDDqWRpdGV1ciBkZSAiCisidGV4dGXigKYlYyIKKworIzogZW50cnkuYzoxNzgKK21zZ2lkICJGaWx0ZXJpbmcgY29udGVudCIKK21zZ3N0ciAiRmlsdHJhZ2UgZHUgY29udGVudSIKKworIzogZW50cnkuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHN0YXQgbGUgZmljaGllciAnJXMnIgorCisjOiBlbnZpcm9ubWVudC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2l0IG5hbWVzcGFjZSBwYXRoIFwiJXNcIiIKK21zZ3N0ciAiRXNwYWNlcyBkZSBub20gZGUgR2l0IFwiJXNcIiIKKworIzogZW52aXJvbm1lbnQuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBHSVRfRElSIHRvICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgcsOpZ2xlciBHSVRfRElSIMOgICclcyciCisKKyM6IGV4ZWMtY21kLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3MgdG8gcnVuICVzIgorbXNnc3RyICJ0cm9wIGQnYXJndW1lbnRzIHBvdXIgbGFuY2VyICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTUwCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2sgOiBsaXN0ZSBzdXBlcmZpY2llbGxlIGF0dGVuZHVlIgorCisjOiBmZXRjaC1wYWNrLmM6MTUzCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIGEgZmx1c2ggcGFja2V0IGFmdGVyIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiIgorImdpdCBmZXRjaC1wYWNrIDogcGFxdWV0IGRlIHZpZGFnZSBhdHRlbmR1IGFwcsOocyB1bmUgbGlzdGUgc3VwZXJmaWNpZWxsZSIKKworIzogZmV0Y2gtcGFjay5jOjE2NAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrIDogQUNLL05BQ0sgYXR0ZW5kdSwgcGFxdWV0IGRlIG5ldHRveWFnZSByZcOndSIKKworIzogZmV0Y2gtcGFjay5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290ICclcyciCittc2dzdHIgImdpdCBmZXRjaC1wYWNrIDogQUNLL05BQ0sgYXR0ZW5kdSwgJyVzJyByZcOndSIKKworIzogZmV0Y2gtcGFjay5jOjE5NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0byByZW1vdGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIHN1ciB1biBkaXN0YW50IgorCisjOiBmZXRjaC1wYWNrLmM6MjU3Cittc2dpZCAiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpcmVzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAiLS1zdGF0ZWxlc3MtcnBjIG7DqWNlc3NpdGUgbXVsdGlfYWNrX2RldGFpbGVkIgorCisjOiBmZXRjaC1wYWNrLmM6MzU2IGZldGNoLXBhY2suYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAibGlnbmUgZGUgc3VwZXJmaWNpZWwgaW52YWxpZGXCoDogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjIgZmV0Y2gtcGFjay5jOjEzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1bnNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgImxpZ25lIGRlIGZpbiBkZSBzdXBlcmZpY2llbCBpbnZhbGlkZSA6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY0IGZldGNoLXBhY2suYzoxMzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJvYmpldCBub24gdHJvdXbDqcKgOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NyBmZXRjaC1wYWNrLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICJFcnJldXIgZGFucyBsJ29iamV0wqA6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY5IGZldGNoLXBhY2suYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNoYWxsb3cgZm91bmQ6ICVzIgorbXNnc3RyICJQYXMgZGUgc3VwZXJmaWNpZWwgdHJvdXbDqcKgOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM3MiBmZXRjaC1wYWNrLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBzaGFsbG93L3Vuc2hhbGxvdywgZ290ICVzIgorbXNnc3RyICJzdXBlcmZpY2llbC9ub24gc3VwZXJmaWNpZWwgYXR0ZW5kdSwgJXMgdHJvdXbDqSIKKworIzogZmV0Y2gtcGFjay5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgJWQgJXMiCittc2dzdHIgInLDqXBvbnNlICVzICVkICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0ICVzIgorbXNnc3RyICJjb21taXQgaW52YWxpZGUgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0NjIKK21zZ2lkICJnaXZpbmcgdXAiCittc2dzdHIgImFiYW5kb24iCisKKyM6IGZldGNoLXBhY2suYzo0NzUgcHJvZ3Jlc3MuYzozMjMKK21zZ2lkICJkb25lIgorbXNnc3RyICJmYWl0IgorCisjOiBmZXRjaC1wYWNrLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAoJWQpICVzIgorbXNnc3RyICIlcyB0cm91dsOpICglZCkgJXMiCisKKyM6IGZldGNoLXBhY2suYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyAlcyBhcyBjb21wbGV0ZSIKK21zZ3N0ciAiTWFycXVhZ2UgZGUgJXMgY29tbWUgdGVybWluw6kiCisKKyM6IGZldGNoLXBhY2suYzo3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxyZWFkeSBoYXZlICVzICglcykiCittc2dzdHIgIiVzIGTDqWrDoCBwb3Nzw6lkw6kgKCVzKSIKKworIzogZmV0Y2gtcGFjay5jOjgxOAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJmZXRjaC1wYWNrwqA6IGltcG9zc2libGUgZGUgZHVwbGlxdWVyIGxlIGTDqW11bHRpcGxleGV1ciBsYXTDqXJhbCIKKworIzogZmV0Y2gtcGFjay5jOjgyNgorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgImVycmV1ciBkZSBwcm90b2NvbGXCoDogbWF1dmFpcyBlbnTDqnRlIGRlIHBhcXVldCIKKworIzogZmV0Y2gtcGFjay5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgJXMiCittc2dzdHIgImZldGNoLXBhY2sgOiBpbXBvc3NpYmxlIGRlIGR1cGxpcXVlciAlcyIKKworIzogZmV0Y2gtcGFjay5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjkxOAorbXNnaWQgImVycm9yIGluIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgImVycmV1ciBkYW5zIGxlIGTDqW11bHRpcGxleGVyIGxhdMOpcmFsIgorCisjOiBmZXRjaC1wYWNrLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uIGlzICUuKnMiCittc2dzdHIgIkxhIHZlcnNpb24gZHUgc2VydmV1ciBlc3QgJS4qcyIKKworIzogZmV0Y2gtcGFjay5jOjk3MCBmZXRjaC1wYWNrLmM6OTc2IGZldGNoLXBhY2suYzo5NzkgZmV0Y2gtcGFjay5jOjk4NQorIzogZmV0Y2gtcGFjay5jOjk4OSBmZXRjaC1wYWNrLmM6OTkzIGZldGNoLXBhY2suYzo5OTcgZmV0Y2gtcGFjay5jOjEwMDEKKyM6IGZldGNoLXBhY2suYzoxMDA1IGZldGNoLXBhY2suYzoxMDA5IGZldGNoLXBhY2suYzoxMDEzIGZldGNoLXBhY2suYzoxMDE3CisjOiBmZXRjaC1wYWNrLmM6MTAyMyBmZXRjaC1wYWNrLmM6MTAyOSBmZXRjaC1wYWNrLmM6MTAzNCBmZXRjaC1wYWNrLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgJXMiCittc2dzdHIgIkxlIHNlcnZldXIgc3VwcG9ydGUgJXMiCisKKyM6IGZldGNoLXBhY2suYzo5NzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiCittc2dzdHIgIkxlIHNlcnZldXIgbmUgc3VwcG9ydGUgbGVzIGNsaWVudHMgc3VwZXJmaWNpZWxzIgorCisjOiBmZXRjaC1wYWNrLmM6MTAzMgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1zaW5jZSIKK21zZ3N0ciAiTGUgcmVjZXZldXIgbmUgZ8OocmUgcGFzIC0tc2hhbGxvdy1zaW5jZSIKKworIzogZmV0Y2gtcGFjay5jOjEwMzcKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIKK21zZ3N0ciAiTGUgcmVjZXZldXIgbmUgZ8OocmUgcGFzIC0tc2hhbGxvdy1leGNsdWRlIgorCisjOiBmZXRjaC1wYWNrLmM6MTA0MQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIgorbXNnc3RyICJMZSByZWNldmV1ciBuZSBnw6hyZSBwYXMgLS1kZWVwZW4iCisKKyM6IGZldGNoLXBhY2suYzoxMDU4Cittc2dpZCAibm8gY29tbW9uIGNvbW1pdHMiCittc2dzdHIgInBhcyBkZSBjb21taXQgY29tbXVuIgorCisjOiBmZXRjaC1wYWNrLmM6MTA3MCBmZXRjaC1wYWNrLmM6MTUzNgorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFja8KgOiDDqWNoZWMgZGUgbGUgcsOpY3Vww6lyYXRpb24uIgorCisjOiBmZXRjaC1wYWNrLmM6MTIwOQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgcmVxdWVzdHMiCittc2dzdHIgIkxlIHNlcnZldXIgbmUgc3VwcG9ydGUgbGVzIHJlcXXDqnRlcyBzdXBlcmZpY2llbGxlcyIKKworIzogZmV0Y2gtcGFjay5jOjEyMTYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgZmlsdGVyIgorbXNnc3RyICJMZSBzZXJ2ZXVyIHN1cHBvcnRlIGZpbHRlciIKKworIzogZmV0Y2gtcGFjay5jOjEyMzkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVxdWVzdCB0byByZW1vdGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxhIHJlcXXDqnRlIHN1ciBsZSBkaXN0YW50IgorCisjOiBmZXRjaC1wYWNrLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIHNlY3Rpb24gaGVhZGVyICclcyciCittc2dzdHIgImVycmV1ciDDoCBsYSBsZWN0dXJlIGRlIGwnZW50w6p0ZSBkZSBzZWN0aW9uICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciCittc2dzdHIgIiclcycgYXR0ZW5kdSwgJyVzJyByZcOndSIKKworIzogZmV0Y2gtcGFjay5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBhY2tub3dsZWRnbWVudCBsaW5lOiAnJXMnIgorbXNnc3RyICJsaWduZSBkJ2FjcXVpdHRlbWVudCBpbmF0dGVuZHVlwqA6ICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxMzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgYWNrczogJWQiCittc2dzdHIgImVycmV1ciBsb3JzIGR1IHRyYWl0ZW1lbnQgZGVzIGFjcXVpdHRlbWVudHPCoDogJWQiCisKKyM6IGZldGNoLXBhY2suYzoxMzE4Cittc2dpZCAiZXhwZWN0ZWQgcGFja2ZpbGUgdG8gYmUgc2VudCBhZnRlciAncmVhZHknIgorbXNnc3RyICJmaWNoaWVyIHBhcXVldCBhdHRlbmR1IMOgIGVudm95ZXIgYXByw6hzICdyZWFkeSciCisKKyM6IGZldGNoLXBhY2suYzoxMzIwCittc2dpZCAiZXhwZWN0ZWQgbm8gb3RoZXIgc2VjdGlvbnMgdG8gYmUgc2VudCBhZnRlciBubyAncmVhZHknIgorbXNnc3RyICJhdWN1bmUgYXV0cmUgc2VjdGlvbiBhdHRlbmR1ZSDDoCBlbnZveWVyIGFwcsOocyBhYnNlbmNlIGRlICdyZWFkeSciCisKKyM6IGZldGNoLXBhY2suYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIKK21zZ3N0ciAiZXJyZXVyIGxvcnMgZHUgdHJhaXRlbWVudCBkZSBsJ2luZm9ybWF0aW9uIGRlIHN1cGVyZmljaWFsaXTDqcKgOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgd2FudGVkLXJlZiwgZ290ICclcyciCittc2dzdHIgIndhbnRlZC1yZWYgYXR0ZW5kdSwgJyVzJyB0cm91dsOpIgorCisjOiBmZXRjaC1wYWNrLmM6MTQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIHdhbnRlZC1yZWY6ICclcyciCittc2dzdHIgIndhbnRlZC1yZWYgaW5hdHRlbmR1wqA6ICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgd2FudGVkIHJlZnM6ICVkIgorbXNnc3RyICJlcnJldXIgbG9ycyBkdSB0cmFpdGVtZW50IGRlcyByw6lmw6lyZW5jZXMgdm91bHVlc8KgOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE3NjIKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAicGFzIGRlIEhFQUQgZGlzdGFudGUgY29ycmVzcG9uZGFudGUiCisKKyM6IGZldGNoLXBhY2suYzoxNzg1IGJ1aWx0aW4vY2xvbmUuYzo2ODkKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAibGUgc2VydmV1ciBkaXN0YW50IG4nYSBwYXMgZW52b3nDqSB0b3VzIGxlcyBvYmpldHMgbsOpY2Vzc2FpcmVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlbW90ZSByZWYgJXMiCittc2dzdHIgInLDqWbDqXJlbmNlIGRpc3RhbnRlIGluY29ubnVlICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3QgYWxsb3cgcmVxdWVzdCBmb3IgdW5hZHZlcnRpc2VkIG9iamVjdCAlcyIKK21zZ3N0ciAiTGUgc2VydmV1ciBuJ2F1dG9yaXNlIHBhcyBkZSByZXF1w6p0ZSBwb3VyIGwnb2JqZXQgJXMgbm9uIGFubm9uY8OpIgorCisjOiBncGctaW50ZXJmYWNlLmM6NDA4Cittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGcgbidhIHBhcyBwdSBzaWduZXIgbGVzIGRvbm7DqWVzIgorCisjOiBncGctaW50ZXJmYWNlLmM6NDM0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgdW4gZmljaGllciB0ZW1wb3JhaXJlIgorCisjOiBncGctaW50ZXJmYWNlLmM6NDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsYSBzaWduYXR1cmUgZMOpdGFjaMOpZSBkYW5zICclcyciCisKKyM6IGdyYXBoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JlIGludmFsaWQgY29sb3IgJyUuKnMnIGluIGxvZy5ncmFwaENvbG9ycyIKK21zZ3N0ciAiY291bGV1ciBpbnZhbGlkZSAnJS4qcycgaWdub3LDqWUgZGFucyBsb2cuZ3JhcGhDb2xvcnMiCisKKyM6IGdyZXAuYzo2NjgKK21zZ2lkICIiCisiZ2l2ZW4gcGF0dGVybiBjb250YWlucyBOVUxMIGJ5dGUgKHZpYSAtZiA8ZmlsZT4pLiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkICIKKyJ3aXRoIC1QIHVuZGVyIFBDUkUgdjIiCittc2dzdHIgIiIKKyJsZSBtb3RpZiBmb3VybmkgY29udGllbnQgZGVzIG9jdGV0cyBOVUwgKHZpYSAtZiA8ZmljaGllcj4pLiBDZSBuJ2VzdCAiCisic3VwcG9ydMOpIHF1J2F2ZWMgLVAgYXZlYyBQQ1JFIHYyIgorCisjOiBncmVwLmM6MjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJyVzJyA6IGxlY3R1cmUgZGUgJXMgaW1wb3NzaWJsZSIKKworIzogZ3JlcC5jOjIxNDUgc2V0dXAuYzoxNjYgYnVpbHRpbi9jbG9uZS5jOjQxMSBidWlsdGluL2RpZmYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICLDqWNoZWMgZHUgc3RhdCBkZSAnJXMnIgorCisjOiBncmVwLmM6MjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkIgorbXNnc3RyICInJXMnIDogbGVjdHVyZSB0cm9ucXXDqWUiCisKKyM6IGhlbHAuYzoyMworbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICJkw6ltYXJyZXIgdW5lIHpvbmUgZGUgdHJhdmFpbCAodm9pciBhdXNzacKgOiBnaXQgaGVscCB0dXRvcmlhbCkiCisKKyM6IGhlbHAuYzoyNAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICIiCisidHJhdmFpbGxlciBzdXIgbGEgbW9kaWZpY2F0aW9uIGFjdHVlbGxlICh2b2lyIGF1c3NpwqA6IGdpdCBoZWxwIHJldmlzaW9ucykiCisKKyM6IGhlbHAuYzoyNQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAiZXhhbWluZXIgbCdoaXN0b3JpcXVlIGV0IGwnw6l0YXQgKHZvaXIgYXVzc2nCoDogZ2l0IGhlbHAgcmV2aXNpb25zKSIKKworIzogaGVscC5jOjI2Cittc2dpZCAiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIKK21zZ3N0ciAiYWdyYW5kaXIsIG1hcnF1ZXIgZXQgbW9kaWZpZXIgdm90cmUgaGlzdG9yaXF1ZSIKKworIzogaGVscC5jOjI3Cittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICJjb2xsYWJvcmVyICh2b2lyIGF1c3NpwqA6IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGhlbHAuYzozMQorbXNnaWQgIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIgorbXNnc3RyICJDb21tYW5kZXMgUG9yY2VsYWluZSBQcmluY2lwYWxlcyIKKworIzogaGVscC5jOjMyCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICJDb21tYW5kZXMgQXV4aWxpYWlyZXMgLyBNYW5pcHVsYXRldXJzIgorCisjOiBoZWxwLmM6MzMKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIgorbXNnc3RyICJDb21tYW5kZXMgQXV4aWxpYWlyZXMgLyBJbnRlcnJvZ2F0ZXVycyIKKworIzogaGVscC5jOjM0Cittc2dpZCAiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiCittc2dzdHIgIkludGVyYWN0aW9uIGF2ZWMgZCdhdXRyZXMgZMOpdmVsb3BwZXVycyIKKworIzogaGVscC5jOjM1Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICJDb21tYW5kZXMgYmFzLW5pdmVhdSAvIE1hbmlwdWxhdGV1cnMiCisKKyM6IGhlbHAuYzozNgorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIkNvbW1hbmRlcyBiYXMgbml2ZWF1IC8gSW50ZXJyb2dhdGV1cnMiCisKKyM6IGhlbHAuYzozNworbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIFN5bmNpbmcgUmVwb3NpdG9yaWVzIgorbXNnc3RyICJDb21tYW5kZXMgYmFzIG5pdmVhdSAvIFN5bmNocm9uaXNhdGlvbiBkZSBkw6lww7R0cyIKKworIzogaGVscC5jOjM4Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJuYWwgSGVscGVycyIKK21zZ3N0ciAiQ29tbWFuZGVzIGJhcyBuaXZlYXUgLyBBc3Npc3RhbnRzIGludGVybmVzIgorCisjOiBoZWxwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiY29tbWFuZGVzIGdpdCBkaXNwb25pYmxlcyBkYW5zICclcyciCisKKyM6IGhlbHAuYzozMDUKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgImNvbW1hbmRlcyBnaXQgZGlzcG9uaWJsZXMgZGVwdWlzIHVuIGF1dHJlIGVuZHJvaXQgZGUgdm90cmUgJFBBVEgiCisKKyM6IGhlbHAuYzozMTQKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIkNpLWRlc3NvdXMgbGVzIGNvbW1hbmRlcyBHaXQgaGFiaXR1ZWxsZXMgZGFucyBkaXZlcnNlcyBzaXR1YXRpb25zwqA6IgorCisjOiBoZWxwLmM6MzYzIGdpdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciCittc2dzdHIgInR5cGUgZGUgbGlzdGUgZGUgY29tbWFuZGVzIG5vbiBzdXBwb3J0w6kgJyVzJyIKKworIzogaGVscC5jOjQwMworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6IgorbXNnc3RyICJMZXMgZ3VpZGVzIEdpdCBwb3B1bGFpcmVzIHNvbnQgOiIKKworIzogaGVscC5jOjUxMgorbXNnaWQgIlNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyB0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCIKK21zZ3N0ciAiIgorIlLDqWbDqXJlei12b3VzIMOgICdnaXQgaGVscCA8Y29tbWFuZGU+JyBwb3VyIGRlcyBpbmZvcm1hdGlvbnMgc3VyIHVuZSBzb3VzLSIKKyJjb21tYW5kZSBzcMOpY2lmaXF1ZSIKKworIzogaGVscC5jOjUxNworbXNnaWQgIkV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICJDb21tYW5kZXMgZXh0ZXJuZXMiCisKKyM6IGhlbHAuYzo1MzIKK21zZ2lkICJDb21tYW5kIGFsaWFzZXMiCittc2dzdHIgIkFsaWFzIGRlIGNvbW1hbmRlIgorCisjOiBoZWxwLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGFwcGVhcnMgdG8gYmUgYSBnaXQgY29tbWFuZCwgYnV0IHdlIHdlcmUgbm90XG4iCisiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIKK21zZ3N0ciAiIgorIiclcycgc2VtYmxlIMOqdHJlIHVuZSBjb21tYW5kZSBnaXQsIG1haXMgZWxsZSBuJ2EgcGFzIHB1XG4iCisiw6p0cmUgZXjDqWN1dMOpZS4gUGV1dC3DqnRyZSBnaXQtJXMgZXN0LWVsbGUgY2Fzc8OpZSA/IgorCisjOiBoZWxwLmM6NjU1Cittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgIkFoZW0uIFZvdHJlIHN5c3TDqG1lIG4naW5kaXF1ZSBhdWN1bmUgY29tbWFuZGUgR2l0LiIKKworIzogaGVscC5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICIiCisiQVRURU5USU9OIDogdm91cyBhdmV6IGludm9xdcOpIHVuZSBjb21tYW5kZSBHaXQgbm9tbcOpZSAnJXMnIHF1aSBuJ2V4aXN0ZSBwYXMuIgorCisjOiBoZWxwLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgIkNvbnRpbnVvbnMgZW4gc3VwcG9zYW50IHF1ZSB2b3VzIGF2ZXogdm91bHUgZGlyZSAnJXMnLiIKKworIzogaGVscC5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIGluICUwLjFmIHNlY29uZHMsIGFzc3VtaW5nIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICIiCisiQ29udGludW9ucyBkYW5zICUwLjFmIHNlY29uZGVzIGVuIHN1cHBvc2FudCBxdWUgdm91cyBhdmV6IHZvdWx1IGRpcmUgJyVzJy4iCisKKyM6IGhlbHAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiZ2l0IDogJyVzJyBuJ2VzdCBwYXMgdW5lIGNvbW1hbmRlIGdpdC4gVm9pciAnZ2l0IC0taGVscCcuIgorCisjOiBoZWxwLmM6Njk5CiBtc2dpZCAiIgogIlxuIgotIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgotIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmRzIGFyZSIKK21zZ3N0clswXSAiIgorIlxuIgorIkxhIGNvbW1hbmRlIGxhIHBsdXMgcmVzc2VtYmxhbnRlIGVzdCIKK21zZ3N0clsxXSAiIgorIlxuIgorIkxlcyBjb21tYW5kZXMgbGVzIHBsdXMgcmVzc2VtYmxhbnRlcyBzb250IgorCisjOiBoZWxwLmM6NzE0Cittc2dpZCAiZ2l0IHZlcnNpb24gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorCisjOiBoZWxwLmM6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIlczogJXMgLSAlcyIKKworIzogaGVscC5jOjc4NworbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgorIlxuIgorIlZvdWxpZXotdm91cyBkaXJlIGNlbGEgPyIKK21zZ3N0clsxXSAiIgorIlxuIgorIlZvdWxpZXotdm91cyBkaXJlIHVuIGRlIGNldXgtbMOgID8iCisKKyM6IGlkZW50LmM6MzQ5Cittc2dpZCAiIgorIlxuIgorIioqKiBQbGVhc2UgdGVsbCBtZSB3aG8geW91IGFyZS5cbiIKKyJcbiIKKyJSdW5cbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisidG8gc2V0IHlvdXIgYWNjb3VudCdzIGRlZmF1bHQgaWRlbnRpdHkuXG4iCisiT21pdCAtLWdsb2JhbCB0byBzZXQgdGhlIGlkZW50aXR5IG9ubHkgaW4gdGhpcyByZXBvc2l0b3J5LlxuIgorIlxuIgogbXNnc3RyICIiCiAiXG4iCi0iKiBGaWNoaWVyIHN1aXZpIHJhY2NvdXJjaXMgaWNpIGRlICVzLlxuIgotIiogUG91ciB2b2lyIGxlIGZpY2hpZXIgZW50aWVyLCB1dGlsaXNleiB1biDDqWRpdGV1ciBleHRlcm5lLlxuIgorIioqKiBWZXVpbGxleiBtZSBkaXJlIHF1aSB2b3VzIMOqdGVzLlxuIgorIlxuIgorIkxhbmNlelxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwiVm91c0BleGVtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIlZvdHJlIE5vbVwiXG4iCisiXG4iCisicG91ciByw6lnbGVyIGwnaWRlbnRpdMOpIHBhciBkw6lmYXV0IGRlIHZvdHJlIGNvbXB0ZS5cbiIKKyLDiWxpbWluZXogLS1nbG9iYWwgcG91ciBuZSBmYWlyZSBsZXMgcsOpZ2xhZ2VzIHF1ZSBkYW5zIGNlIGTDqXDDtHQuXG4iCisiXG4iCiAKLSM6IGxpYi9kaWZmLnRjbDo0ODIKLW1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKLW1zZ3N0ciAiw4ljaGVjIGxvcnMgZGUgbGEgZMOpc2luZGV4YXRpb24gZGUgbGEgc2VjdGlvbiBzw6lsZWN0aW9ubsOpZS4iCisjOiBpZGVudC5jOjM3OQorbXNnaWQgIm5vIGVtYWlsIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiCittc2dzdHIgImF1Y3VuIGNvdXJyaWVsIGZvdXJuaSBldCBsJ2F1dG8tZMOpdGVjdGlvbiBlc3QgZMOpc2FjdGl2w6llIgogCi0jOiBsaWIvZGlmZi50Y2w6NDg5Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICLDiWNoZWMgbG9ycyBkZSBsJ2luZGV4YXRpb24gZGUgbGEgc2VjdGlvbi4iCisjOiBpZGVudC5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgZW1haWwgYWRkcmVzcyAoZ290ICclcycpIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqXRlY3RlciBhdXRvbWF0aXF1ZW1lbnQgbCdhZHJlc3NlICgnJXMnIHRyb3V2w6kpIgogCi0jOiBsaWIvZGlmZi50Y2w6NTY4Ci1tc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCi1tc2dzdHIgIsOJY2hlYyBsb3JzIGRlIGxhIGTDqXNpbmRleGF0aW9uIGRlIGxhIGxpZ25lIHPDqWxlY3Rpb25uw6llLiIKKyM6IGlkZW50LmM6NDAxCittc2dpZCAibm8gbmFtZSB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICJhdWN1biBub20gZm91cm5pIGV0IGwnYXV0by1kw6l0ZWN0aW9uIGVzdCBkw6lzYWN0aXbDqWUiCiAKLSM6IGxpYi9kaWZmLnRjbDo1NzYKLW1zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCi1tc2dzdHIgIsOJY2hlYyBsb3JzIGRlIGwnaW5kZXhhdGlvbiBkZSBsYSBsaWduZS4iCisjOiBpZGVudC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgbmFtZSAoZ290ICclcycpIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqXRlY3RlciBhdXRvbWF0aXF1ZW1lbnQgbGUgbm9tICgnJXMnIHRyb3V2w6kpIgogCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ0MwotbXNnaWQgIkRlZmF1bHQiCi1tc2dzdHIgIkTDqWZhdXQiCisjOiBpZGVudC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBpZGVudCBuYW1lIChmb3IgPCVzPikgbm90IGFsbG93ZWQiCittc2dzdHIgIm5vbSBkJ2lkZW50aWZpYW50IHZpZGUgKHBvdXIgPCVzPikgbm9uIHBlcm1pcyIKIAotIzogbGliL2VuY29kaW5nLnRjbDo0NDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTeXN0ZW0gKCVzKSIKLW1zZ3N0ciAiU3lzdMOobWUgKCVzKSIKKyM6IGlkZW50LmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIgorbXNnc3RyICJsZSBub20gbidlc3QgY29uc3RpdHXDqSBxdWUgZGUgY2FyYWN0w6hyZXMgaW50ZXJkaXRzwqA6ICVzIgogCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ1OSBsaWIvZW5jb2RpbmcudGNsOjQ2NQotbXNnaWQgIk90aGVyIgotbXNnc3RyICJBdXRyZSIKKyM6IGlkZW50LmM6NDM2IGJ1aWx0aW4vY29tbWl0LmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICJmb3JtYXQgZGUgZGF0ZSBpbnZhbGlkZSA6ICVzIgogCi0jOiBsaWIvZXJyb3IudGNsOjIwIGxpYi9lcnJvci50Y2w6MTE0Ci1tc2dpZCAiZXJyb3IiCi1tc2dzdHIgImVycmV1ciIKLQotIzogbGliL2Vycm9yLnRjbDozNgotbXNnaWQgIndhcm5pbmciCi1tc2dzdHIgImF0dGVudGlvbiIKLQotIzogbGliL2Vycm9yLnRjbDo5NAotbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCi1tc2dzdHIgIlZvdXMgZGV2ZXogY29ycmlnZXIgbGVzIGVycmV1cnMgc3VpdmFudGVzIGF2YW50IGRlIHBvdXZvaXIgY29tbWl0ZXIuIgotCi0jOiBsaWIvaW5kZXgudGNsOjYKLW1zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCi1tc2dzdHIgIkltcG9zc2libGUgZGUgZMOpdmVycm91aWxsZXIgbCdpbmRleC4iCi0KLSM6IGxpYi9pbmRleC50Y2w6MTUKLW1zZ2lkICJJbmRleCBFcnJvciIKLW1zZ3N0ciAiRXJyZXVyIGRlIGwnaW5kZXgiCi0KLSM6IGxpYi9pbmRleC50Y2w6MTcKLW1zZ2lkICIiCi0iVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCi0icmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKKyM6IGxpc3Qtb2JqZWN0cy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJlbnRyeSAnJXMnIGluIHRyZWUgJXMgaGFzIHRyZWUgbW9kZSwgYnV0IGlzIG5vdCBhIHRyZWUiCiBtc2dzdHIgIiIKLSLDiWNoZWMgZGUgbGEgbWlzZSDDoCBqb3VyIGRlIGwnaW5kZXguIFVuZSByZXN5bmNocm9uaXNhdGlvbiB2YSDDqnRyZSBsYW5jw6llICIKLSJhdXRvbWF0aXF1ZW1lbnQuIgorImwnZW50csOpZSAnJXMnIGRhbnMgbCdhcmJyZSAlcyBhIHVuIG1vZGUgZCdhcmJyZSwgbWFpcyBuJ2VzdCBwYXMgdW4gYXJicmUiCiAKLSM6IGxpYi9pbmRleC50Y2w6MjgKLW1zZ2lkICJDb250aW51ZSIKLW1zZ3N0ciAiQ29udGludWVyIgorIzogbGlzdC1vYmplY3RzLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgYmxvYiBtb2RlLCBidXQgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAiIgorImwnZW50csOpZSAnJXMnIGRhbnMgbCdhcmJyZSAlcyBhIHVuIG1vZGUgZGUgYmxvYiwgbWFpcyBuJ2VzdCBwYXMgdW4gYmxvYiIKIAotIzogbGliL2luZGV4LnRjbDozMQotbXNnaWQgIlVubG9jayBJbmRleCIKLW1zZ3N0ciAiRMOpdmVycm91aWxsZXIgbCdpbmRleCIKKyM6IGxpc3Qtb2JqZWN0cy5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCByb290IHRyZWUgZm9yIGNvbW1pdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjaGFyZ2VyIGwnYXJicmUgcmFjaW5lIHBvdXIgbGUgY29tbWl0ICVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjI4OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKLW1zZ3N0ciAiRMOpc2luZGV4YXRpb24gZGUgOiAlcyIKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBzcGFyc2UgYmxvYiBpbiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWNjw6lkZXIgYXUgYmxvYiBjbGFpcnNlbcOpIGRhbnMgJyVzJyIKIAotIzogbGliL2luZGV4LnRjbDozMjgKLW1zZ2lkICJSZWFkeSB0byBjb21taXQuIgotbXNnc3RyICJQcsOqdCDDoCDDqnRyZSBjb21taXTDqS4iCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBzcGFyc2UgZmlsdGVyIGRhdGEgaW4gJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsYSBkb25uw6llIGRlIGZpbHRyZSBjbGFpcnNlbcOpIGRhbnMgJXMiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzQxCi0jLCB0Y2wtZm9ybWF0CisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo1OAorbXNnaWQgImV4cGVjdGVkICd0cmVlOjxkZXB0aD4nIgorbXNnc3RyICJhdHRlbmR1wqA6ICd0cmVlOjxwcm9mb25kZXVyPiciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjczCittc2dpZCAic3BhcnNlOnBhdGggZmlsdGVycyBzdXBwb3J0IGhhcyBiZWVuIGRyb3BwZWQiCittc2dzdHIgInNwYXJzZcKgOiBsZSBzdXBwb3J0IGRlcyBmaWx0cmVzIGRlIGNoZW1pbiBhIMOpdMOpIGFiYW5kb25uw6kiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsdGVyLXNwZWMgJyVzJyIKK21zZ3N0ciAic3DDqWNpZmljYXRldXIgZGUgZmlsdHJlIGludmFsaWRlICclcyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtdXN0IGVzY2FwZSBjaGFyIGluIHN1Yi1maWx0ZXItc3BlYzogJyVjJyIKK21zZ3N0ciAiIgorImxlIGNhcmFjdMOocmUgZG9pdCDDqnRyZSDDqWNoYXBww6kgZGFucyBsZSBzcMOpY2lmaWNhdGV1ciBkZSBzb3VzLWZpbHRyZcKgOiAnJWMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxNDQKK21zZ2lkICJleHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgY29tYmluZToiCittc2dzdHIgInF1ZWxxdWUgY2hvc2UgYXR0ZW5kdSBhcHLDqHMgY29tYmluZcKgOiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MjI2Cittc2dpZCAibXVsdGlwbGUgZmlsdGVyLXNwZWNzIGNhbm5vdCBiZSBjb21iaW5lZCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb21iaW5lciBkZXMgc3DDqWNpZmljYXRldXJzIG11bHRpcGxlcyBkZSBmaWx0cmUiCisKKyM6IGxvY2tmaWxlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMuXG4iCisiXG4iCisiQW5vdGhlciBnaXQgcHJvY2VzcyBzZWVtcyB0byBiZSBydW5uaW5nIGluIHRoaXMgcmVwb3NpdG9yeSwgZS5nLlxuIgorImFuIGVkaXRvciBvcGVuZWQgYnkgJ2dpdCBjb21taXQnLiBQbGVhc2UgbWFrZSBzdXJlIGFsbCBwcm9jZXNzZXNcbiIKKyJhcmUgdGVybWluYXRlZCB0aGVuIHRyeSBhZ2Fpbi4gSWYgaXQgc3RpbGwgZmFpbHMsIGEgZ2l0IHByb2Nlc3NcbiIKKyJtYXkgaGF2ZSBjcmFzaGVkIGluIHRoaXMgcmVwb3NpdG9yeSBlYXJsaWVyOlxuIgorInJlbW92ZSB0aGUgZmlsZSBtYW51YWxseSB0byBjb250aW51ZS4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGNyw6llciAnJXMubG9jayfCoDogJXMuXG4iCisiXG4iCisiSWwgc2VtYmxlIHF1J3VuIGF1dHJlIHByb2Nlc3N1cyBnaXQgZXN0IGTDqWrDoCBsYW5jw6kgZGFucyBjZSBkw6lww7R0LFxuIgorInBhciBleGVtcGxlIHVuIMOpZGl0ZXVyIG91dmVydCBwYXIgJ2dpdCBjb21taXQnLiBWZXVpbGxleiB2b3VzIGFzc3VyZXJcbiIKKyJxdWUgdG91cyBsZXMgcHJvY2Vzc3VzIHNvbnQgdGVybWluw6lzIGV0IHLDqWVzc2F5ZXouIFNpIGwnw6ljaGVjIHBlcnNpc3RlLFxuIgorInVuIHByb2Nlc3N1cyBnaXQgcGV1dCBhdm9pciBwbGFudMOpwqA6XG4iCisic3VwcHJpbWV6IGxlIGZpY2hpZXIgbWFudWVsbGVtZW50IHBvdXIgcG91cnN1aXZyZS4iCisKKyM6IGxvY2tmaWxlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjcsOpZXIgJyVzLmxvY2snwqA6ICVzIgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgY2FjaGUiCisKKyM6IG1lcmdlLmM6MTA3IHJlcmVyZS5jOjcyMCBidWlsdGluL2FtLmM6MTg3OSBidWlsdGluL2FtLmM6MTkxMworIzogYnVpbHRpbi9jaGVja291dC5jOjU0MSBidWlsdGluL2NoZWNrb3V0LmM6ODAwIGJ1aWx0aW4vY2xvbmUuYzo4MTAKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNjUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIG5vdXZlYXUgZmljaGllciBkJ2luZGV4IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTYKK21zZ2lkICIoYmFkIGNvbW1pdClcbiIKK21zZ3N0ciAiKG1hdXZhaXMgY29tbWl0KVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICLDqWNoZWMgZGUgYWRkaW5mb19jYWNoZSBwb3VyIGxlIGNoZW1pbiAnJXMnwqA7IGFiYW5kb24gZGUgbGEgZnVzaW9uLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIHRvIHJlZnJlc2ggZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICLDqWNoZWMgZGUgYWRkaW5mb19jYWNoZSBwb3VyIGxlIGNoZW1pbiAnJXMnwqA7IGFiYW5kb24gZGUgbGEgZnVzaW9uLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIGNoZW1pbiAnJXMnICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAiU3VwcHJlc3Npb24gZGUgJXMgcG91ciBmYWlyZSBkZSBsYSBwbGFjZSBwb3VyIGxlIHNvdXMtcsOpcGVydG9pcmVcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODk5IG1lcmdlLXJlY3Vyc2l2ZS5jOjkxOAorbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIjogcGV1dC3DqnRyZSB1biBjb25mbGl0IEQvRiA/IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICJyZWZ1cyBkZSBwZXJkcmUgbGUgZmljaGllciBub24gc3VpdmkgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTQ5IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGwnb2JqZXQgJXMgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciCittc2dzdHIgImJsb2IgYXR0ZW5kdSBwb3VyICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAiw6ljaGVjIMOgIGwnb3V2ZXJ0dXJlIGRlICclcyfCoDogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnOiAlcyIKK21zZ3N0ciAiw6ljaGVjIMOgIGxhIGNyw6lhdGlvbiBkdSBsaWVuIHN5bWJvbGlxdWUgJyVzJ8KgOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgIm5lIHNhaXQgcGFzIHRyYWl0ZXIgJTA2byAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBjaGVja2VkIG91dCkiCittc2dzdHIgIsOJY2hlYyBkZSBsYSBmdXNpb24gZHUgc291cy1tb2R1bGUgJXMgKG5vbiBleHRyYWl0KSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIG5vdCBwcmVzZW50KSIKK21zZ3N0ciAiw4ljaGVjIGRlIGZ1c2lvbiBkdSBzb3VzLW1vZHVsZSAlcyAoY29tbWl0cyBub24gcHLDqXNlbnRzKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIGRvbid0IGZvbGxvdyBtZXJnZS1iYXNlKSIKK21zZ3N0ciAiIgorIsOJY2hlYyBkZSBsYSBmdXNpb24gZHUgc291cy1tb2R1bGUgJXMgKGxlcyBjb21taXRzIG5lIGRlc2NlbmRlbnQgcGFzIGRlIGxhICIKKyJiYXNlIGRlIGZ1c2lvbikiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMTMgbWVyZ2UtcmVjdXJzaXZlLmM6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIHRvIHRoZSBmb2xsb3dpbmcgY29tbWl0OiIKK21zZ3N0ciAiQXZhbmNlIHJhcGlkZSBkdSBzb3VzLW1vZHVsZSAlcyBhdSBjb21taXQgc3VpdmFudMKgOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxNiBtZXJnZS1yZWN1cnNpdmUuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMiCittc2dzdHIgIkF2YW5jZSByYXBpZGUgZHUgc291cy1tb2R1bGUgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobWVyZ2UgZm9sbG93aW5nIGNvbW1pdHMgbm90IGZvdW5kKSIKK21zZ3N0ciAiIgorIsOJY2hlYyBkZSBmdXNpb24gZHUgc291cy1tb2R1bGUgJXMgKGZ1c2lvbiBzdWl2YW50IGxlcyBjb21taXRzIG5vbiB0cm91dsOpZSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGZhc3QtZm9yd2FyZCkiCittc2dzdHIgIsOJY2hlYyBkZSBmdXNpb24gZHUgc291cy1tb2R1bGUgJXMgKHBhcyBlbiBhdmFuY2UgcmFwaWRlKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1NgorbXNnaWQgIkZvdW5kIGEgcG9zc2libGUgbWVyZ2UgcmVzb2x1dGlvbiBmb3IgdGhlIHN1Ym1vZHVsZTpcbiIKK21zZ3N0ciAiUsOpc29sdXRpb24gcG9zc2libGUgZGUgZnVzaW9uIHRyb3V2w6llIHBvdXIgbGUgc291cy1tb2R1bGXCoDpcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgdGhpcyBpcyBjb3JyZWN0IHNpbXBseSBhZGQgaXQgdG8gdGhlIGluZGV4IGZvciBleGFtcGxlXG4iCisiYnkgdXNpbmc6XG4iCisiXG4iCisiICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcbiIKKyJcbiIKKyJ3aGljaCB3aWxsIGFjY2VwdCB0aGlzIHN1Z2dlc3Rpb24uXG4iCittc2dzdHIgIiIKKyJTaSBjJ2VzdCBjb3JyZWN0LCBham91dGV6IGxlIHNpbXBsZW1lbnQgw6AgbCdpbmRleFxuIgorImVuIHV0aWxpc2FudCBwYXIgZXhlbXBsZcKgOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisicXVpIGFjY2VwdGVyYSBjZXR0ZSBzdWdnZXN0aW9uLlxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG11bHRpcGxlIG1lcmdlcyBmb3VuZCkiCittc2dzdHIgIsOJY2hlYyBkZSBmdXNpb24gZHUgc291cy1tb2R1bGUgJXMgKHBsdXNpZXVycyBmdXNpb25zIHRyb3V2w6llcykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNDEKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAiw4ljaGVjIMOgIGwnZXjDqWN1dGlvbiBkZSBsYSBmdXNpb24gaW50ZXJuZSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYWpvdXRlciAlcyDDoCBsYSBiYXNlIGRlIGRvbm7DqWVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAiRnVzaW9uIGF1dG9tYXRpcXVlIGRlICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyB3cml0aW5nIHRvICVzIGluc3RlYWQuIgorbXNnc3RyICIiCisiRXJyZXVywqA6IHJlZnVzIGRlIHBlcmRyZSBsZSBmaWNoaWVyIG5vbiBzdWl2aSAlc8KgOyDDqWNyaXR1cmUgZGFucyAlcyDDoCBsYSAiCisicGxhY2UuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZS4iCittc2dzdHIgIiIKKyJDT05GTElUICglcy9zdXBwcmVzc2lvbikgOiAlcyBzdXBwcmltw6kgZGFucyAlcyBldCAlcyBkYW5zICVzLiBWZXJzaW9uICVzIGRlICIKKyIlcyBsYWlzc8OpZSBkYW5zIGwnYXJicmUuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZS4iCittc2dzdHIgIiIKKyJDT05GTElUICglcy9zdXBwcmVzc2lvbikgOiAlcyBzdXBwcmltw6kgZGFucyAlcyBldCAlcyDDoCAlcyBkYW5zICVzLiBWZXJzaW9uICIKKyIlcyBkZSAlcyBsYWlzc8OpZSBkYW5zIGwnYXJicmUuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJDT05GTElUICglcy9zdXBwcmVzc2lvbikgOiAlcyBzdXBwcmltw6kgZGFucyAlcyBldCAlcyBkYW5zICVzLiBWZXJzaW9uICVzIGRlICIKKyIlcyBsYWlzc8OpZSBkYW5zIGwnYXJicmUgZGFucyBsZSBmaWNoaWVyICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisiQ09ORkxJVCAoJXMvc3VwcHJlc3Npb24pIDogJXMgc3VwcHJpbcOpIGRhbnMgJXMgZXQgJXMgw6AgJXMgZGFucyAlcy4gVmVyc2lvbiAiCisiJXMgZGUgJXMgbGFpc3PDqWUgZGFucyBsJ2FyYnJlIGRhbnMgbGUgZmljaGllciAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjYKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgInJlbm9tbWFnZSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUyNgorbXNnaWQgInJlbmFtZWQiCittc2dzdHIgInJlbm9tbcOpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTc3IG1lcmdlLXJlY3Vyc2l2ZS5jOjI0NzIgbWVyZ2UtcmVjdXJzaXZlLmM6MzExNworIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgJXMiCittc2dzdHIgIlJlZnVzIGRlIHBlcmRyZSBsZSBmaWNoaWVyIG1vZGlmacOpICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXMsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gdGhlIHdheS4iCittc2dzdHIgIlJlZnVzIGRlIHBlcmRyZSBsZSBmaWNoaWVyIG5vbiBzdWl2aSAlcywgbcOqbWUgcydpbCBnw6puZS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAgQWRkZWQgJXMgaW4gJXMiCittc2dzdHIgIiIKKyJDT05GTElUIChyZW5vbW1hZ2UvYWpvdXQpIDogUmVub21tYWdlIGRlICVzLT4lcyBkYW5zICVzLiAlcyBham91dMOpIGRhbnMgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVzIGVzdCB1biByw6lwZXJ0b2lyZSBkYW5zICVzIGFqb3V0w6kgcGx1dMO0dCBjb21tZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY4MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiUmVmdXMgZGUgcGVyZHJlIGxlIGZpY2hpZXIgbm9uIHN1aXZpICVzIDsgYWpvdXQgY29tbWUgJXMgw6AgbGEgcGxhY2UiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lIFwiJXMiCisiXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAiIgorIkNPTkZMSVQgKHJlbm9tbWFnZS9yZW5vbW1hZ2UpIDogUmVub21tYWdlIGRlIFwiJXNcIi0+XCIlc1wiIGRhbnMgbGEgYnJhbmNoZSAiCisiXCIlc1wiIGV0IHJlbm9tbWFnZSBcIiVzXCItPlwiJXNcIiBkYW5zIFwiJXNcIiVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzEzCittc2dpZCAiIChsZWZ0IHVucmVzb2x2ZWQpIgorbXNnc3RyICIgKGxhaXNzw6kgbm9uIHLDqXNvbHUpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSVQgKHJlbm9tbWFnZS9yZW5vbW1hZ2UpIDogcmVub21tYWdlICclcyctPiclcycgZGFucyAlcy4gUmVub21tYWdlICclcyctIgorIj4nJXMnIGRhbnMgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChkaXJlY3RvcnkgcmVuYW1lIHNwbGl0KTogVW5jbGVhciB3aGVyZSB0byBwbGFjZSAlcyBiZWNhdXNlICIKKyJkaXJlY3RvcnkgJXMgd2FzIHJlbmFtZWQgdG8gbXVsdGlwbGUgb3RoZXIgZGlyZWN0b3JpZXMsIHdpdGggbm8gZGVzdGluYXRpb24gIgorImdldHRpbmcgYSBtYWpvcml0eSBvZiB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisiQ09ORkxJVCAocmVub21tYWdlIGRlIHLDqXBlcnRvaXJlIGNvdXDDqSnCoDogbGEgcGxhY2UgZGUgJXMgbidlc3QgcGFzIGNsYWlyZSAiCisicGFyY2UgcXVlIGxlIHLDqXBlcnRvaXJlICVzIGEgw6l0w6kgcmVub21tw6kgZW4gcGx1c2lldXJzIGF1dHJlcyByw6lwZXJ0b2lyZXMsICIKKyJzYW5zIGF1Y3VuZSBkZXN0aW5hdGlvbiByw6ljdXDDqXJhbnQgbGEgbWFqb3JpdMOpIGRlcyBmaWNoaWVycy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogRXhpc3RpbmcgZmlsZS9kaXIgYXQgJXMgaW4gdGhlIHdheSBvZiAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZShzKSBwdXR0aW5nIHRoZSBmb2xsb3dpbmcgcGF0aChzKSB0aGVyZTogJXMuIgorbXNnc3RyICIiCisiQ09ORkxJVCAocmVub21tYWdlIGltcGxpY2l0ZSBkZSByw6lwZXJ0b2lyZSnCoDogbGUgcsOpcGVydG9pcmUvZmljaGllciAlcyBnw6puZSAiCisiZGVzIHJlbm9tbWFnZXMgaW1wbGljaXRlcyBkZSByw6lwZXJ0b2lyZSBkw6lwbGHDp2FudCBsZXMgY2hlbWlucyBzdWl2YW50c8KgOiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogQ2Fubm90IG1hcCBtb3JlIHRoYW4gb25lIHBhdGggdG8gJXM7ICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lcyB0cmllZCB0byBwdXQgdGhlc2UgcGF0aHMgdGhlcmU6ICVzIgorbXNnc3RyICIiCisiQ09ORkxJVCAocmVub21tYWdlIGltcGxpY2l0ZSBkZSByw6lwZXJ0b2lyZSnCoDogaW1wb3NzaWJsZSBkZSB0cmFuc2Zvcm1lciAiCisicGx1c2lldXJzIGNoZW1pbnMgc3VyICVzwqA7IGxlcyBjaGVtaW5zIGNvbmNlcm7DqXMgc29udMKgOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgZGlyZWN0b3J5ICVzLT4lcyBpbiAlcy4gUmVuYW1lIGRpcmVjdG9yeSAlcy0iCisiPiVzIGluICVzIgorbXNnc3RyICIiCisiQ09ORkxJVCAocmVub21tYWdlL3Jlbm9tbWFnZSkgOiByZW5vbW1hZ2UgZHUgcsOpcGVydG9pcmUgJXMtPiVzIGRhbnMgJXMuICIKKyJSZW5vbW1hZ2UgZGUgcsOpcGVydG9pcmUgJXMtPiVzIGRhbnMgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nICVzIC0+ICVzIHJlbmFtZSB0byAlcywgYmVjYXVzZSAlcyBpdHNlbGYgd2FzICIKKyJyZW5hbWVkLiIKK21zZ3N0ciAiIgorIkFWRVJUSVNTRU1FTlTCoDogbmUgcmVub21tZSBwYXMgJXMtPiVzIGRhbnMgJXMsIHBhcmNlIHF1ZSAlcyBsdWktbcOqbWUgYSDDqXTDqSAiCisicmVub21tw6kuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyOTYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGwnb2JqZXQgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgImwnb2JqZXQgJXMgbidlc3QgcGFzIHVuIGJsb2IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMjgKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgIm1vZGlmaWNhdGlvbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyOAorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICJtb2RpZmnDqSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA0MAorbXNnaWQgImNvbnRlbnQiCittc2dzdHIgImNvbnRlbnUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwNDQKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICJham91dC9ham91dCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA2NworIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIiVzIHNhdXTDqSAoZnVzaW9uIGlkZW50aXF1ZSDDoCBsJ2V4aXN0YW50KSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA4OSBnaXQtc3VibW9kdWxlLnNoOjEwMDMKK21zZ2lkICJzdWJtb2R1bGUiCittc2dzdHIgInNvdXMtbW9kdWxlIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJDT05GTElUICglcykgOiBDb25mbGl0IGRlIGZ1c2lvbiBkYW5zICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICJBam91dCBwbHV0w7R0IGNvbW1lICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzOyAiCisibW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorIkNoZW1pbiBtaXMgw6Agam91csKgOiAlcyBham91dMOpIGRhbnMgJXMgZGFucyB1biByw6lwZXJ0b2lyZSBxdWkgYSDDqXTDqSByZW5vbW3DqSAiCisiZW4gJXPCoDsgZMOpcGxhY8OpIGRhbnMgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkICIKKyJpbiAlcywgc3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iCittc2dzdHIgIiIKKyJDT05GTElUIChsb2NhbGlzYXRpb24gZGUgZmljaGllcinCoDogJXMgYWpvdXTDqSBkYW5zICVzIGRhbnMgdW4gcsOpcGVydG9pcmUgcXVpICIKKyJhIMOpdMOpIHJlbm9tbcOpIGRhbnMgJXMsIGNlIHF1aSBzdWdnw6hyZSBxdSdpbCBkZXZyYWl0IHBldXQtw6p0cmUgw6p0cmUgZMOpcGxhY8OpICIKKyJ2ZXJzICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIxMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAiCisiJXM7IG1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKyJDaGVtaW4gbWlzIMOgIGpvdXLCoDogJXMgcmVub21tw6kgZW4gJXMgZGFucyAlcywgZGFucyB1biByw6lwZXJ0b2lyZSBxdWkgYSDDqXTDqSAiCisicmVub21tw6kgZW4gJXPCoDsgZMOpcGxhY8OpIGRhbnMgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0ICIKKyJ3YXMgcmVuYW1lZCBpbiAlcywgc3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iCittc2dzdHIgIiIKKyJDT05GTElUIChsb2NhbGlzYXRpb24gZGUgZmljaGllcinCoDogJXMgcmVub21tw6kgZW4gJXMgZGFucyAlcywgZGFucyB1biAiCisicsOpcGVydG9pcmUgcXVpIGEgw6l0w6kgcmVub21tw6kgZGFucyAlcywgY2UgcXVpIHN1Z2fDqHJlIHF1J2lsIGRldnJhaXQgcGV1dC3DqnRyZSAiCisiw6p0cmUgZMOpcGxhY8OpIHZlcnMgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIgorbXNnc3RyICJTdXBwcmVzc2lvbiBkZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM1MAorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICJmaWNoaWVyL3LDqXBlcnRvaXJlIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzU1Cittc2dpZCAiZGlyZWN0b3J5L2ZpbGUiCittc2dzdHIgInLDqXBlcnRvaXJlL2ZpY2hpZXIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiBBZGRpbmcgJXMgYXMgJXMiCittc2dzdHIgIiIKKyJDT05GTElUICglcykgOiBJbCB5IGEgdW4gcsOpcGVydG9pcmUgbm9tbcOpICVzIGRhbnMgJXMuIEFqb3V0IGRlICVzIGNvbW1lICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzcxCisjLCBjLWZvcm1hdAogbXNnaWQgIkFkZGluZyAlcyIKIG1zZ3N0ciAiQWpvdXQgZGUgJXMiCiAKLSM6IGxpYi9pbmRleC50Y2w6Mzk4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCi1tc2dzdHIgIkFubnVsZXIgbGVzIG1vZGlmaWNhdGlvbnMgZGFucyBsZSBmaWNoaWVyICVzID8gIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoYWRkL2FkZCk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJDT05GTElUIChham91dC9ham91dCnCoDogQ29uZmxpdCBkZSBmdXNpb24gZGFucyAlcyIKIAotIzogbGliL2luZGV4LnRjbDo0MDAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCi1tc2dzdHIgIkFubnVsZXIgbGVzIG1vZGlmaWNhdGlvbnMgZGFucyBjZXMgJWkgZmljaGllcnMgPyIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MjQKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUhIgorbXNnc3RyICJEw6lqw6Agw6Agam91ciAhIgogCi0jOiBsaWIvaW5kZXgudGNsOjQwOAotbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKLW1zZ3N0ciAiIgotIlRvdXRlcyBsZXMgbW9kaWZpY2F0aW9ucyBub24taW5kZXjDqWVzIHNlcm9udCBkw6lmaW5pdGl2ZW1lbnQgcGVyZHVlcyBwYXIgIgotImwnYW5udWxhdGlvbi4iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDMzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGZ1c2lvbiBkZXMgYXJicmVzICVzIGV0ICVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjQxMQotbXNnaWQgIkRvIE5vdGhpbmciCi1tc2dzdHIgIk5lIHJpZW4gZmFpcmUiCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTM3Cittc2dpZCAiTWVyZ2luZzoiCittc2dzdHIgIkZ1c2lvbiA6IgogCi0jOiBsaWIvaW5kZXgudGNsOjQyOQotbXNnaWQgIlJldmVydGluZyBzZWxlY3RlZCBmaWxlcyIKLW1zZ3N0ciAiQW5udWxlciBtb2RpZmljYXRpb25zIGRhbnMgZmljaGllcnMgc2VsZWN0aW9ubsOpcyIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIKK21zZ2lkX3BsdXJhbCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiCittc2dzdHJbMF0gIiV1IGFuY8OqdHJlIGNvbW11biB0cm91dsOpIDoiCittc2dzdHJbMV0gIiV1IGFuY8OqdHJlcyBjb21tdW5zIHRyb3V2w6lzIDoiCiAKLSM6IGxpYi9pbmRleC50Y2w6NDMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0aW5nICVzIgotbXNnc3RyICJBbm51bGF0aW9uIGRlcyBtb2RpZmljYXRpb25zIGRhbnMgJXMiCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjAwCittc2dpZCAibWVyZ2UgcmV0dXJuZWQgbm8gY29tbWl0IgorbXNnc3RyICJsYSBmdXNpb24gbidhIHBhcyByZXRvdXJuw6kgZGUgY29tbWl0IgogCi0jOiBsaWIvbWVyZ2UudGNsOjEzCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjU5CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDYW5ub3QgbWVyZ2Ugd2hpbGUgYW1lbmRpbmcuXG4iCi0iXG4iCi0iWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhbnkgdHlwZSBvZiBtZXJnZS5cbiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIgICVzIgogbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBkZSBmdXNpb25uZXIgcGVuZGFudCB1bmUgY29ycmVjdGlvbi5cbiIKLSJcbiIKLSJWb3VzIGRldmV6IGZpbmlyIGRlIGNvcnJpZ2VyIGNlIGNvbW1pdCBhdmFudCBkZSBsYW5jZXIgdW5lIHF1ZWxjb25xdWUgIgotImZ1c2lvbi5cbiIKKyJWb3MgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIGF1eCBmaWNoaWVycyBzdWl2YW50cyBzZXJhaWVudCDDqWNyYXPDqWVzIHBhciBsYSAiCisiZnVzaW9uwqA6XG4iCisiICAlcyIKIAotIzogbGliL21lcmdlLnRjbDoyNworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIkltcG9zc2libGUgZCdhbmFseXNlciBsJ29iamV0ICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM3NzQgYnVpbHRpbi9tZXJnZS5jOjY5NyBidWlsdGluL21lcmdlLmM6ODc3Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ8OpY3JpcmUgbCdpbmRleC4iCisKKyM6IG1pZHguYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIgorbXNnc3RyICJsZSBmaWNoaWVyIGQnaW5kZXggbXVsdGktcGFxdWV0ICVzIGVzdCB0cm9wIHBldGl0IgorCisjOiBtaWR4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBzaWduYXR1cmUgMHglMDh4IGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgIiIKKyJsYSBzaWduYXR1cmUgZGUgbCdpbmRleCBtdWx0aS1wYXF1ZXQgMHglMDh4IG5lIGNvcnJlc3BvbmQgcGFzIMOgIGxhIHNpZ25hdHVyZSAiCisiMHglMDh4IgorCisjOiBtaWR4LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCB2ZXJzaW9uICVkIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJsYSB2ZXJzaW9uIGQnaW5kZXggbXVsdGktcGFxdWV0ICVkIG4nZXN0IHBhcyByZWNvbm51ZSIKKworIzogbWlkeC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggdmVyc2lvbiAldSBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAibGEgdmVyc2lvbiAldSBkdSBjb25kZW5zw6kgbmUgY29ycmVzcG9uZCBwYXMiCisKKyM6IG1pZHguYzoxMDgKK21zZ2lkICJpbnZhbGlkIGNodW5rIG9mZnNldCAodG9vIGxhcmdlKSIKK21zZ3N0ciAiZMOpY2FsYWdlIGRlIHNlY3Rpb24gaW52YWxpZGUgKHRyb3AgZ3JhbmQpIgorCisjOiBtaWR4LmM6MTMyCittc2dpZCAidGVybWluYXRpbmcgbXVsdGktcGFjay1pbmRleCBjaHVuayBpZCBhcHBlYXJzIGVhcmxpZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiIgorImlkZW50aWZpYW50IGRlIHRlcm1pbmFpc29uIGRlIHRyb27Dp29uIGQnaW5kZXggbXVsdGktcGFxdWV0IHRlcm1pbmFudCAiCisiYXBwYXJhw650IHBsdXMgdMO0dCBxdSdhdHRlbmR1IgorCisjOiBtaWR4LmM6MTQ1Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIHBhY2stbmFtZSBjaHVuayIKK21zZ3N0ciAiaW5kZXggbXVsdGktcGFxdWV0IG1hbnF1ZSBkZSB0cm9uw6dvbiBkZSBub20gZGUgcGFxdWV0IgorCisjOiBtaWR4LmM6MTQ3Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBmYW5vdXQgY2h1bmsiCittc2dzdHIgImluZGV4IG11bHRpLXBhcXVldCBtYW5xdWUgZGUgdHJvbsOnb24gZGUgZCfDqXRhbGVtZW50IE9JRCByZXF1aXMiCisKKyM6IG1pZHguYzoxNDkKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGxvb2t1cCBjaHVuayIKK21zZ3N0ciAiaW5kZXggbXVsdGktcGFxdWV0IG1hbnF1ZSBkZSB0cm9uw6dvbiBkZSByZWNoZXJjaGUgT0lEIgorCisjOiBtaWR4LmM6MTUxCittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBvZmZzZXRzIGNodW5rIgorbXNnc3RyICJpbmRleCBtdWx0aS1wYXF1ZXQgbWFucXVlIGRlIHRyb27Dp29uIGRlIGTDqWNhbGFnZSBkJ29iamV0IgorCisjOiBtaWR4LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggcGFjayBuYW1lcyBvdXQgb2Ygb3JkZXI6ICclcycgYmVmb3JlICclcyciCittc2dzdHIgIiIKKyJpbmRleCBtdWx0aS1wYXF1ZXQgbGVzIG5vbXMgZGUgcGFxdWV0cyBzb250IGVuIGTDqXNvcmRyZcKgOiAnJXMnIGF2YW50ICclcyciCisKKyM6IG1pZHguYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2staW50LWlkOiAldSAoJXUgdG90YWwgcGFja3MpIgorbXNnc3RyICJtYXV2YWlzIHBhY2staW50LWlkwqA6ICV1ICgldSBwYXF1ZXRzIGF1IHRvdGFsKSIKKworIzogbWlkeC5jOjI2MAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc3RvcmVzIGEgNjQtYml0IG9mZnNldCwgYnV0IG9mZl90IGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAiIgorIm11bHRpLXBhY2staW5kZXggc3RvY2sgdW4gZMOpY2FsYWdlIGVuIDY0LWJpdCwgbWFpcyBvZmZfdCBlc3QgdHJvcCBwZXRpdCIKKworIzogbWlkeC5jOjI4OAorbXNnaWQgImVycm9yIHByZXBhcmluZyBwYWNrZmlsZSBmcm9tIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgImVycmV1ciDDoCBsYSBwcsOpcGFyYXRpb24gZHUgZmljaGllciBwYXF1ZXQgZGVwdWlzIHVuIGluZGV4IG11bHRpLXBhcXVldCIKKworIzogbWlkeC5jOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWRkIHBhY2tmaWxlICclcyciCittc2dzdHIgIsOpY2hlYyBkZSBsJ2Fqb3V0IGR1IGZpY2hpZXIgcGFxdWV0ICclcyciCisKKyM6IG1pZHguYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGFjay1pbmRleCAnJXMnIgorbXNnc3RyICLDqWNoZWMgw6AgbCdvdXZlcnR1cmUgZHUgZmljaGllciBwYXF1ZXQgJyVzJyIKKworIzogbWlkeC5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9jYXRlIG9iamVjdCAlZCBpbiBwYWNrZmlsZSIKK21zZ3N0ciAiw6ljaGVjIGRlIGxvY2FsaXNhdGlvbiBkZSBsJ29iamV0ICVkIGRhbnMgbGUgZmljaGllciBwYXF1ZXQiCisKKyM6IG1pZHguYzo4NDIKK21zZ2lkICJBZGRpbmcgcGFja2ZpbGVzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIkFqb3V0IGRlIGZpY2hpZXJzIHBhcXVldCDDoCB1biBpbmRleCBtdWx0aS1wYXF1ZXQiCisKKyM6IG1pZHguYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCBzZWUgcGFjay1maWxlICVzIHRvIGRyb3AiCittc2dzdHIgImZpY2hpZXIgcGFxdWV0IMOgIMOpbGltaW5lciAlcyBub24gdHJvdXbDqSIKKworIzogbWlkeC5jOjk3MworbXNnaWQgIldyaXRpbmcgY2h1bmtzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIsOJY3JpdHVyZSBkZXMgc2VjdGlvbnMgZGFucyBsJ2luZGV4IG11bHRpLXBhcXVldCIKKworIzogbWlkeC5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiCittc2dzdHIgIsOpY2hlYyBkdSBuZXR0b3lhZ2UgZGUgbCdpbmRleCBkZSBtdWx0aS1wYXF1ZXQgw6AgJXMiCisKKyM6IG1pZHguYzoxMTA4Cittc2dpZCAiTG9va2luZyBmb3IgcmVmZXJlbmNlZCBwYWNrZmlsZXMiCittc2dzdHIgIlJlY2hlcmNoZSBkZSBmaWNoaWVycyBwYXF1ZXRzIHLDqWbDqXJlbmPDqXMiCisKKyM6IG1pZHguYzoxMTIzCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYSBtZXJnZSBjYW4gYmUgcGVyZm9ybWVkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorIm9pZCBmYW5vdXQgb3V0IG9mIG9yZGVyOiBmYW5vdXRbJWRdID0gJTxQUkl4MzI+ID4gJTxQUkl4MzI+ID0gZmFub3V0WyVkXSIKIG1zZ3N0ciAiIgotIkwnw6l0YXQgbG9ycyBkZSBsYSBkZXJuacOocmUgc3luY2hyb25pc2F0aW9uIG5lIGNvcnJlc3BvbmQgcGx1cyDDoCBsJ8OpdGF0IGR1ICIKLSJkw6lww7R0LlxuIgotIlxuIgotIlVuIGF1dHJlIHByb2dyYW1tZSBHaXQgYSBtb2RpZmnDqSBjZSBkw6lww7R0IGRlcHVpcyBsYSBkZXJuacOocmUgIgotInN5bmNocm9uaXNhdGlvbi4gVW5lIHJlc3luY2hyb25pc2F0aW9uIGRvaXQgw6p0cmUgZWZmZWN0dcOpZSBhdmFudCBkZSBwb3V2b2lyICIKLSJmdXNpb25uZXIgZGUgbm91dmVhdS5cbiIKLSJcbiIKLSJDZWxhIHZhIMOqdHJlIGZhaXQgdG91dCBkZSBzdWl0ZSBhdXRvbWF0aXF1ZW1lbnRcbiIKKyLDqXRhbGVtZW50IG9pZCBlbiBkw6lzb3JkcmXCoDogw6l0YWxlbWVudFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSAiCisiw6l0YWxlbWVudFslZF0iCiAKLSM6IGxpYi9tZXJnZS50Y2w6NDUKLSMsIHRjbC1mb3JtYXQKKyM6IG1pZHguYzoxMTI4Cittc2dpZCAiVmVyaWZ5aW5nIE9JRCBvcmRlciBpbiBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJWw6lyaWZpY2F0aW9uIGRlIGwnb3JkcmUgZGVzIE9JRCBkYW5zIGwnaW5kZXggbXVsdGktcGFxdWV0IgorCisjOiBtaWR4LmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICJvaWQgbG9va3VwIG91dCBvZiBvcmRlcjogb2lkWyVkXSA9ICVzID49ICVzID0gb2lkWyVkXSIKK21zZ3N0ciAicmVjaGVyY2hlIGQnb2lkIGVuIGTDqXNvcmRyZcKgOiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorCisjOiBtaWR4LmM6MTE1NworbXNnaWQgIlNvcnRpbmcgb2JqZWN0cyBieSBwYWNrZmlsZSIKK21zZ3N0ciAiQ2xhc3NlbWVudCBkZXMgb2JqZXRzIHBhciBmaWNoaWVyIHBhcXVldCIKKworIzogbWlkeC5jOjExNjQKK21zZ2lkICJWZXJpZnlpbmcgb2JqZWN0IG9mZnNldHMiCittc2dzdHIgIlbDqXJpZmljYXRpb24gZGVzIGTDqWNhbGFnZXMgZGVzIG9iamV0cyIKKworIzogbWlkeC5jOjExODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgcGFjayBlbnRyeSBmb3Igb2lkWyVkXSA9ICVzIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgbGVjdHVyZSBkZSBsJ8OpbMOpbWVudCBkZSBjYWNoZSBwb3VyIG9pZFslZF0gPSAlcyIKKworIzogbWlkeC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgcGFjay1pbmRleCBmb3IgcGFja2ZpbGUgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsZSBmaWNoaWVyIHBhcXVldCAlcyIKKworIzogbWlkeC5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb3JyZWN0IG9iamVjdCBvZmZzZXQgZm9yIG9pZFslZF0gPSAlczogJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKK21zZ3N0ciAiZMOpY2FsYWdlIGQnb2JqZXQgaW5jb3JyZWN0IHBvdXIgb2lkWyVkXSA9ICVzwqA6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCisKKyM6IG1pZHguYzoxMjIwCittc2dpZCAiQ291bnRpbmcgcmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICJDb21wdGFnZSBkZXMgb2JqZXRzIHLDqWbDqXJlbmPDqXMiCisKKyM6IG1pZHguYzoxMjMwCittc2dpZCAiRmluZGluZyBhbmQgZGVsZXRpbmcgdW5yZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAiUmVjaGVyY2hlIGV0IGVmZmFjZW1lbnQgZGVzIGZpY2hpZXJzIHBhcXVldHMgbm9uLXLDqWbDqXJlbmPDqXMiCisKKyM6IG1pZHguYzoxMzg4Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6ltYXJyZXIgbGUgZ3JvdXBlbWVudCBkJ29iamV0cyIKKworIzogbWlkeC5jOjE0MDcKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBmaW5pciBsZSBncm91cGVtZW50IGQnb2JqZXRzIgorCisjOiBuYW1lLWhhc2guYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsYXp5X2RpciB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZSBmaWwgbGF6eV9kaXIgOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIGZpbCBsYXp5X25hbWUgOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGpvaW5kcmUgbGUgZmlsIGxhenlfbmFtZSA6ICVzIgorCisjOiBub3Rlcy1tZXJnZS5jOjI3NworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKLSJcbiIKLSJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCi0iXG4iCi0iWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCi0ibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBwcmV2aW91cyBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIHVzZSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHRvICIKKyJjb21taXQvYWJvcnQgdGhlIHByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgbm90ZXMgbWVyZ2UuIgogbXNnc3RyICIiCi0iVm91cyDDqnRlcyBhdSBtaWxpZXUgZCd1bmUgZnVzaW9uIGNvbmZsaWN0dWVsbGUuXG4iCi0iXG4iCi0iTGUgZmljaGllciAlcyBhIGRlcyBjb25mbGljdHMgZGUgZnVzaW9uLlxuIgotIlxuIgotIlZvdXMgZGV2ZXogbGVzIHLDqXNvdWRyZSwgcHVpcyBpbmRleGVyIGxlIGZpY2hpZXIsIGV0IGVuZmluIGNvbW1pdGVyIHBvdXIgIgotInRlcm1pbmVyIGxhIGZ1c2lvbiBjb3VyYW50ZS4gU2V1bGVtZW50IMOgIGNlIG1vbWVudCBsw6Agc2VyYS10LWlsIHBvc3NpYmxlICIKLSJkJ2VmZmVjdHVlciB1bmUgbm91dmVsbGUgZnVzaW9uLlxuIgorIlZvdXMgbidhdmV6IHBhcyB0ZXJtaW7DqSB2b3RyZSBwcsOpY8OpZGVudGUgZnVzaW9uIGRlIG5vdGVzICglcyBleGlzdGUpLlxuIgorIlZldWlsbGV6IHV0aWxpc2VyICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG91ICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcgIgorInBvdXIgdmFsaWRlci9hYmFuZG9ubmVyIGxhIGZ1c2lvbiBlbiBjb3VycyBhdmFudCBkJ2VuIGTDqW1hcnJlciB1bmUgbm91dmVsbGUuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjU1Ci0jLCB0Y2wtZm9ybWF0CisjOiBub3Rlcy1tZXJnZS5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuIgorbXNnc3RyICJWb3VzIG4nYXZleiBwYXMgdGVybWluw6kgdm90cmUgZnVzaW9uIGRlIG5vdGVzICglcyBleGlzdGUpLiIKKworIzogbm90ZXMtdXRpbHMuYzo0NgorbXNnaWQgIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB2YWxpZGVyIHVuIGFyYnJlIGRlIG5vdGVzIG5vbiBpbml0aWFsaXPDqS9yw6lmw6lyZW5jw6kiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiTWF1dmFpc2UgdmFsZXVyIGRlIG5vdGVzLnJld3JpdGVNb2RlIDogJyVzJyIKKworIzogbm90ZXMtdXRpbHMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIlJlZnVzIGRlIHLDqcOpY3JpcmUgZGVzIG5vdGVzIGRhbnMgJXMgKGhvcnMgZGUgcmVmcy9ub3Rlcy8pIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mCisjLiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMKKyMuIGl0cyB2YWx1ZS4KKyMuCisjOiBub3Rlcy11dGlscy5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIk1hdXZhaXNlIHZhbGV1ciBkZSAlcyA6ICclcyciCisKKyM6IG9iamVjdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUgXCIlc1wiIgorbXNnc3RyICJ0eXBlIGQnb2JqZXQgaW52YWxpZGUgXCIlc1wiIgorCisjOiBvYmplY3QuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIGEgJXMsIG5vdCBhICVzIgorbXNnc3RyICJsJ29iamV0ICVzIGVzdCBkZSB0eXBlICVzLCBwYXMgZGUgdHlwZSAlcyIKKworIzogb2JqZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBoYXMgdW5rbm93biB0eXBlIGlkICVkIgorbXNnc3RyICJsJ29iamV0ICVzIGEgdW4gaWQgZGUgdHlwZSBpbmNvbm51ICVkIgorCisjOiBvYmplY3QuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdDogJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsJ29iamV0IDogJXMiCisKKyM6IG9iamVjdC5jOjI2NiBvYmplY3QuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCAlcyIKK21zZ3N0ciAiaW5jb2jDqXJlbmNlIGRlIGhhY2hhZ2UgJXMiCisKKyM6IHBhY2tmaWxlLmM6NjI5Cittc2dpZCAib2Zmc2V0IGJlZm9yZSBlbmQgb2YgcGFja2ZpbGUgKGJyb2tlbiAuaWR4PykiCittc2dzdHIgIm9mZnNldCBhdmFudCBsYSBmaW4gZHUgZmljaGllciBwYXF1ZXQgKC5pZHggY2Fzc8OpwqA/KSIKKworIzogcGFja2ZpbGUuYzoxODk5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZWZvcmUgc3RhcnQgb2YgcGFjayBpbmRleCBmb3IgJXMgKGNvcnJ1cHQgaW5kZXg/KSIKK21zZ3N0ciAib2Zmc2V0IGF2YW50IGxlIGTDqWJ1dCBkZSBsJ2luZGV4IGRlIHBhcXVldCBwb3VyICVzIChpbmRleCBjb3Jyb21wdcKgPykiCisKKyM6IHBhY2tmaWxlLmM6MTkwMworIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmV5b25kIGVuZCBvZiBwYWNrIGluZGV4IGZvciAlcyAodHJ1bmNhdGVkIGluZGV4PykiCittc2dzdHIgIiIKKyJvZmZzZXQgYXUgZGVsw6AgZGUgbGEgZmluIGRlIGwnaW5kZXggZGUgcGFxdWV0IHBvdXIgJXMgKGluZGV4IHRyb25xdcOpwqA/KSIKKworIzogcGFjay1iaXRtYXAuYzo4MDAgcGFjay1iaXRtYXAuYzo4MDYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgc2l6ZSBvZiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBsYSB0YWlsbGUgZGUgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICIlcyBhIGJlc29pbiBkJ3VuZSB2YWxldXIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAlcyIKK21zZ3N0ciAiJXMgZXN0IGluY29tcGF0aWJsZSBhdmVjICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBpbmNvbXBhdGlibGUgd2l0aCBzb21ldGhpbmcgZWxzZSIKK21zZ3N0ciAiJXMgZXN0IGluY29tcGF0aWJsZSBhdmVjIHRvdXRlIGF1dHJlIG9wdGlvbiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkyIHBhcnNlLW9wdGlvbnMuYzo5NiBwYXJzZS1vcHRpb25zLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRha2VzIG5vIHZhbHVlIgorbXNnc3RyICIlcyBuJ2FjY2VwdGUgYXVjdW5lIHZhbGV1ciIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzbid0IGF2YWlsYWJsZSIKK21zZ3N0ciAiJXMgbidlc3QgcGFzIGRpc3BvbmlibGUiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIHdpdGggYW4gb3B0aW9uYWwgay9tL2cgc3VmZml4IgorbXNnc3RyICIlcyBhdHRlbmQgdW5lIHZhbGV1ciBlbnRpw6hyZSBub24gbsOpZ2F0aXZlIGF2ZWMgdW5lIHN1ZmZpeGUgay9tL2ciCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIG9wdGlvbjogJXMgKGNvdWxkIGJlIC0tJXMlcyBvciAtLSVzJXMpIgorbXNnc3RyICJvcHRpb24gYW1iaWfDvGXCoDogJXMgKGRldnJhaXQgw6p0cmUgLS0lcyVzIG91IC0tJXMlcykiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo0MjAgcGFyc2Utb3B0aW9ucy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgeW91IG1lYW4gYC0tJXNgICh3aXRoIHR3byBkYXNoZXMpPyIKK21zZ3N0ciAidm91bGllei12b3VzIGRpcmUgYC0tJXNgIChhdmVjIGRldXggc2lnbmVzIG1vaW5zKT8iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gYCVzJyIKK21zZ3N0ciAib3B0aW9uIGluY29ubnVlIMKrwqAlc8KgwrsiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzd2l0Y2ggYCVjJyIKK21zZ3N0ciAiYmFzY3VsZSBpbmNvbm51ZSDCq8KgJWPCoMK7IgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm9uLWFzY2lpIG9wdGlvbiBpbiBzdHJpbmc6IGAlcyciCittc2dzdHIgIm9wdGlvbiBub24tYXNjaWkgaW5jb25udWUgZGFucyBsYSBjaGHDrm5lwqA6ICclcyciCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4ODUKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgInVzYWdlIDogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBwYXJzZS1vcHRpb25zLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICAgb3UgOiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJXMiCittc2dzdHIgIiAgICAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk1MgorbXNnaWQgIi1OVU0iCittc2dzdHIgIi1OVU0iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgb2YgLS0lcyIKK21zZ3N0ciAiYWxpYXMgcG91ciAtLSVzIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MjAgcGFyc2Utb3B0aW9ucy1jYi5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgImwnb3B0aW9uICclcycgYXR0ZW5kIHVuZSB2YWxldXIgbnVtw6lyaXF1ZSIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBleHBpcmF0aW9uIGRhdGUgJyVzJyIKK21zZ3N0ciAiZGF0ZSBkJ2V4cGlyYXRpb24gbWFsZm9ybcOpZcKgOiAnJXMnIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBcImFsd2F5c1wiLCBcImF1dG9cIiwgb3IgXCJuZXZlclwiIgorbXNnc3RyICJsJ29wdGlvbiAnJXMnIGF0dGVuZCBcImFsd2F5c1wiLCBcImF1dG9cIiBvdSBcIm5ldmVyXCIiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoxMzAgcGFyc2Utb3B0aW9ucy1jYi5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAibm9tIGQnb2JqZXQgbWFsZm9ybcOpICclcyciCisKKyM6IHBhdGguYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgIkltcG9zc2libGUgZGUgcmVuZHJlICVzIGluc2NyaXB0aWJsZSBwb3VyIGxlIGdyb3VwZSIKKworIzogcGF0aHNwZWMuYzoxMzAKK21zZ2lkICJFc2NhcGUgY2hhcmFjdGVyICdcXCcgbm90IGFsbG93ZWQgYXMgbGFzdCBjaGFyYWN0ZXIgaW4gYXR0ciB2YWx1ZSIKK21zZ3N0ciAiIgorIkxlIGNhcmFjdMOocmUgZCfDqWNoYXBwZW1lbnQgJ1xcXFwnIGludGVyZGl0IGNvbW1lIGRlcm5pZXIgY2FyYWN0w6hyZSBkYW5zIHVuZSAiCisidmFsZXVyIGQnYXR0cmlidXQiCisKKyM6IHBhdGhzcGVjLmM6MTQ4Cittc2dpZCAiT25seSBvbmUgJ2F0dHI6JyBzcGVjaWZpY2F0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJVbmUgc2V1bGUgc3DDqWNpZmljYXRpb24gJ2F0dHI6JyBlc3QgYXV0b3Jpc8OpZS4iCisKKyM6IHBhdGhzcGVjLmM6MTUxCittc2dpZCAiYXR0ciBzcGVjIG11c3Qgbm90IGJlIGVtcHR5IgorbXNnc3RyICJ1biBzcMOpY2lmaWNhdGV1ciBkJ2F0dHJpYnV0IG5lIHBldXQgcGFzIMOqdHJlIHZpZGUiCisKKyM6IHBhdGhzcGVjLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIG5hbWUgJXMiCittc2dzdHIgIm5vbSBkJ2F0dHJpYnV0IGludmFsaWRlICVzIgorCisjOiBwYXRoc3BlYy5jOjI1OQorbXNnaWQgImdsb2JhbCAnZ2xvYicgYW5kICdub2dsb2InIHBhdGhzcGVjIHNldHRpbmdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKyJsZXMgcsOpZ2xhZ2VzIGRlIHNww6ljaWZpY2F0ZXVycyBkZSBjaGVtaW4gZ8OpbsOpcmF1eCAnZ2xvYicgZXQgJ25vZ2xvYicgc29udCAiCisiaW5jb21wYXRpYmxlcyIKKworIzogcGF0aHNwZWMuYzoyNjYKIG1zZ2lkICIiCi0iWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhbmdlLlxuIgotIlxuIgotIkZpbGUgJXMgaXMgbW9kaWZpZWQuXG4iCi0iXG4iCi0iWW91IHNob3VsZCBjb21wbGV0ZSB0aGUgY3VycmVudCBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGEgbWVyZ2UuICBEb2luZyBzbyAiCi0id2lsbCBoZWxwIHlvdSBhYm9ydCBhIGZhaWxlZCBtZXJnZSwgc2hvdWxkIHRoZSBuZWVkIGFyaXNlLlxuIgorImdsb2JhbCAnbGl0ZXJhbCcgcGF0aHNwZWMgc2V0dGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgZ2xvYmFsICIKKyJwYXRoc3BlYyBzZXR0aW5ncyIKIG1zZ3N0ciAiIgotIlZvdXMgw6p0ZXMgYXUgbWlsaWV1IGQndW5lIG1vZGlmaWNhdGlvbi5cbiIKLSJcbiIKLSJMZSBmaWNoaWVyICVzIGEgw6l0w6kgbW9kaWZpw6kuXG4iCi0iXG4iCi0iVm91cyBkZXZyaWV6IHRlcm1pbmVyIGxlIGNvbW1pdCBjb3VyYW50IGF2YW50IGRlIGxhbmNlciB1bmUgZnVzaW9uLiBFbiAiCi0iZmFpc2FpdCBjb21tZSBjZWxhLCB2b3VzIMOpdml0ZXJleiBkZSBkZXZvaXIgw6l2ZW50dWVsbGVtZW50IGFiYW5kb25uZXIgdW5lICIKLSJmdXNpb24gYXlhbnQgw6ljaG91w6kuXG4iCisibGUgcsOpZ2xhZ2UgZ2xvYmFsIGRlIHNww6ljaWZpY2F0ZXVyIGRlIGNoZW1pbiAnbGl0ZXJhbCcgZXN0IGluY29tcGF0aWJsZSBhdmVjICIKKyJ0b3VzIGxlcyBhdXRyZXMgcsOpZ2xhZ2VzIGdsb2JhdXggZGUgc3DDqWNpZmljYXRldXIgZGUgY2hlbWluIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEwNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIG9mICVzIgotbXNnc3RyICIlcyBkZSAlcyIKKyM6IHBhdGhzcGVjLmM6MzA2Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICJwYXJhbcOodHJlIGludmFsaWRlIHBvdXIgbGUgc3DDqWNpZmljYXRldXIgbWFnaXF1ZSBkZSBjaGVtaW4gJ3ByZWZpeCciCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTIwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2luZyAlcyBhbmQgJXMuLi4iCi1tc2dzdHIgIkZ1c2lvbiBkZSAlcyBldCAlcy4uLiIKKyM6IHBhdGhzcGVjLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIkxhIHNww6ljaWZpY2F0aW9uIG1hZ2lxdWUgZGUgY2hlbWluICclLipzJyBlc3QgaW52YWxpZGUgZGFucyAnJXMnIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEzMQotbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgotbXNnc3RyICJMYSBmdXNpb24gcydlc3QgZmFpdGUgYXZlYyBzdWNjw6hzLiIKKyM6IHBhdGhzcGVjLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAiJyknIG1hbnF1YW50ZSDDoCBsYSBmaW4gZHUgc3DDqWNpZmljYXRldXIgbWFnaXF1ZSBkZSBjaGVtaW4gZGFucyAnJXMnIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEzMwotbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgotbXNnc3RyICJMYSBmdXNpb24gYSBlY2hvdcOpLiBJbCBlc3QgbsOpY2Vzc2FpcmUgZGUgcsOpc291ZHJlIGxlcyBjb25mbGl0cy4iCisjOiBwYXRoc3BlYy5jOjM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmltcGxlbWVudGVkIHBhdGhzcGVjIG1hZ2ljICclYycgaW4gJyVzJyIKK21zZ3N0ciAiU3DDqWNpZmljYXRldXIgbWFnaXF1ZSAnJWMnIG5vbiBpbXBsw6ltZW50w6kgZGFucyAnJXMnIgogCi0jOiBsaWIvbWVyZ2UudGNsOjE1OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1lcmdlIEludG8gJXMiCi1tc2dzdHIgIkZ1c2lvbiBkYW5zICVzIgorIzogcGF0aHNwZWMuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICdsaXRlcmFsJyBhbmQgJ2dsb2InIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiVzIDogJ2xpdGVyYWwnIGV0ICdnbG9iJyBzb250IGluY29tcGF0aWJsZXMiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTc3Ci1tc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCi1tc2dzdHIgIlLDqXZpc2lvbiDDoCBmdXNpb25uZXIiCisjOiBwYXRoc3BlYy5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkgYXQgJyVzJyIKK21zZ3N0ciAiJXMgOiAnJXMnIGVzdCBob3JzIGR1IGTDqXDDtHQgw6AgJyVzJyIKIAotIzogbGliL21lcmdlLnRjbDoyMTIKKyM6IHBhdGhzcGVjLmM6NTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgKG1uZW1vbmljOiAnJWMnKSIKK21zZ3N0ciAiJyVzJyAobW7DqW1vbmlxdWXCoDogJyVjJykiCisKKyM6IHBhdGhzcGVjLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiIKKyIlcyA6IGxlIHNww6ljaWZpY2F0ZXVyIG1hZ2lxdWUgZGUgY2hlbWluIG4nZXN0IHBhcyBzdXBwb3J0w6kgcGFyIGNldHRlICIKKyJjb21tYW5kZSA6ICVzIgorCisjOiBwYXRoc3BlYy5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgImxlIGNoZW1pbiAnJXMnIGVzdCBhdS1kZWzDoCBkJ3VuIGxpZW4gc3ltYm9saXF1ZSIKKworIzogcGF0aHNwZWMuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBpcyBiYWRseSBxdW90ZWQ6ICVzIgorbXNnc3RyICJsYSBsaWduZSBlc3QgbWFsIGNpdMOpZcKgOiAlcyIKKworIzogcGt0LWxpbmUuYzo5MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIHBhcXVldCBkZSB2aWRhZ2UiCisKKyM6IHBrdC1saW5lLmM6OTkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZGVsaW0gcGFja2V0IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSBwYXF1ZXQgZGUgZMOpbGltaXRhdGlvbiIKKworIzogcGt0LWxpbmUuYzoxMDYKK21zZ2lkICJmbHVzaCBwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbCfDqWNyaXR1cmUgZHUgdmlkYWdlIGRlIHBhcXVldCIKKworIzogcGt0LWxpbmUuYzoxNDYgcGt0LWxpbmUuYzoyMzIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiCittc2dzdHIgImVycmV1ciBkZSBwcm90b2NvbGXCoDogbGlnbmUgaW1wb3NzaWJsZW1lbnQgdHJvcCBsb25ndWUiCisKKyM6IHBrdC1saW5lLmM6MTYyIHBrdC1saW5lLmM6MTY0Cittc2dpZCAicGFja2V0IHdyaXRlIHdpdGggZm9ybWF0IGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnw6ljcml0dXJlIGQndW4gcGFxdWV0IGF2ZWMgZm9ybWF0IgorCisjOiBwa3QtbGluZS5jOjE5NgorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQgLSBkYXRhIGV4Y2VlZHMgbWF4IHBhY2tldCBzaXplIgorbXNnc3RyICIiCisiw6ljaGVjIGRlIGwnw6ljcml0dXJlIGQndW4gcGFxdWV0wqDigJEgbGVzIGRvbm7DqWVzIGTDqXBhc3NlbnQgbGEgdGFpbGxlIG1heGltYWxlICIKKyJkJ3VuIHBhcXVldCIKKworIzogcGt0LWxpbmUuYzoyMDMgcGt0LWxpbmUuYzoyMTAKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbCfDqWNyaXR1cmUgZCd1biBwYXF1ZXQiCisKKyM6IHBrdC1saW5lLmM6Mjk1Cittc2dpZCAicmVhZCBlcnJvciIKK21zZ3N0ciAiZXJyZXVyIGRlIGxlY3R1cmUiCisKKyM6IHBrdC1saW5lLmM6MzAzCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiCittc2dzdHIgIkwnaMO0dGUgZGlzdGFudCBhIGZlcm3DqSBsYSBjb25uZXhpb24gZGUgbWFuacOocmUgaW5hdHRlbmR1ZSIKKworIzogcGt0LWxpbmUuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCBjaGFyYWN0ZXI6ICUuNHMiCittc2dzdHIgImVycmV1ciBkZSBwcm90b2NvbGXCoDogbWF1dmFpcyBjYXJhY3TDqHJlIGRlIGxvbmd1ZXVyIGRlIGxpZ25lwqA6ICUuNHMiCisKKyM6IHBrdC1saW5lLmM6MzQxIHBrdC1saW5lLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggJWQiCittc2dzdHIgImVycmV1ciBkZSBwcm90b2NvbGXCoDogbWF1dmFpc2UgbG9uZ3VldXIgZGUgbGlnbmUgJWQiCisKKyM6IHBrdC1saW5lLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgImVycmV1ciBkaXN0YW50ZSA6ICVzIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTE5Cittc2dpZCAiUmVmcmVzaGluZyBpbmRleCIKK21zZ3N0ciAiUmFmcmHDrmNoaXNzZW1lbnQgZGUgbCdpbmRleCIKKworIzogcHJlbG9hZC1pbmRleC5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZGVkIGxzdGF0OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgbGUgbHN0YXQgZW4gZmlsIDogJXMiCisKKyM6IHByZXR0eS5jOjk4MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsZSBmb3JtYXQgLS1wcmV0dHkiCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjIzCittc2dpZCAiUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJEw6lww7R0IGRpc3RhbnQgc2FucyBVUkwiCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21pc29yIHJlbW90ZSBuYW1lIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgInVuIG5vbSBkZSBwcm9tZXR0ZXVyIGRpc3RhbnQgbmUgcGV1dCBwYXMgY29tbWVuY2VyIHBhciAnLyfCoDogJXMiCisKKyM6IHJhbmdlLWRpZmYuYzo3NQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBgbG9nYCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBkw6ltYXJyZXIgYGxvZ2AiCisKKyM6IHJhbmdlLWRpZmYuYzo3NworbXNnaWQgImNvdWxkIG5vdCByZWFkIGBsb2dgIG91dHB1dCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxhIHNvcnRpZSBkZSBgbG9nYCIKKworIzogcmFuZ2UtZGlmZi5jOjk2IHNlcXVlbmNlci5jOjUwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgY29tbWl0ICclcyciCisKKyM6IHJhbmdlLWRpZmYuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGdpdCBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdlbnTDqnRlIGdpdCAnJS4qcyciCisKKyM6IHJhbmdlLWRpZmYuYzoyODUKK21zZ2lkICJmYWlsZWQgdG8gZ2VuZXJhdGUgZGlmZiIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIGfDqW7DqXJhdGlvbiBkZSBkaWZmIgorCisjOiByYW5nZS1kaWZmLmM6NTE4IHJhbmdlLWRpZmYuYzo1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGxvZyBmb3IgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxlIGpvdXJuYWwgcG91ciAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IGFkZCBmaWxlIGFsaWFzICclcycgKCclcycgYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgpIgorbXNnc3RyICJwYXMgZCdham91dCBkJ2FsaWFzIGRlIGZpY2hpZXIgJyVzJyjCq8KgJXPCoMK7IGV4aXN0ZSBkw6lqw6AgZGFucyBsJ2luZGV4KSIKKworIzogcmVhZC1jYWNoZS5jOjY5NgorbXNnaWQgImNhbm5vdCBjcmVhdGUgYW4gZW1wdHkgYmxvYiBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciB1biBibG9iIHZpZGUgZGFucyBsYSBiYXNlIGRlIGRvbm7DqWUgZCdvYmpldHMiCisKKyM6IHJlYWQtY2FjaGUuYzo3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbiBvbmx5IGFkZCByZWd1bGFyIGZpbGVzLCBzeW1ib2xpYyBsaW5rcyBvciBnaXQtZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKyIlc8KgOiBuZSBwZXV0IGFqb3V0ZXIgcXVlIGRlcyBmaWNoaWVycyBub3JtYXV4LCBkZXMgbGllbnMgc3ltYm9saXF1ZXMgb3UgZGVzICIKKyJyw6lwZXJ0b2lyZXMgZ2l0IgorCisjOiByZWFkLWNhY2hlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAiJyVzJyBuJ2EgcGFzIGRlIGNvbW1pdCBleHRyYWl0IgorCisjOiByZWFkLWNhY2hlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBpbmRleCBmaWxlICclcyciCittc2dzdHIgImluZGV4YXRpb24gZHUgZmljaGllciAnJXMnIGltcG9zc2libGUiCisKKyM6IHJlYWQtY2FjaGUuYzo3OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCAnJXMnIHRvIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWpvdXRlciAnJXMnIMOgIGwnaW5kZXgiCisKKyM6IHJlYWQtY2FjaGUuYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAiZnN0YXQgZGUgJyVzJyBpbXBvc3NpYmxlIgorCisjOiByZWFkLWNhY2hlLmM6MTMzMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFwcGVhcnMgYXMgYm90aCBhIGZpbGUgYW5kIGFzIGEgZGlyZWN0b3J5IgorbXNnc3RyICInJXMnIGV4aXN0ZSDDoCBsYSBmb2lzIGNvbW1lIHVuIGZpY2hpZXIgZXQgdW4gcsOpcGVydG9pcmUiCisKKyM6IHJlYWQtY2FjaGUuYzoxNTM2Cittc2dpZCAiUmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiUmFmcmHDrmNoaXIgbCdpbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjE2NTEKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKLSJcbiIKLSJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuXG4iCisiaW5kZXgudmVyc2lvbiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgogbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBkJ2FiYW5kb25uZXIgZW4gY291cnMgZGUgY29ycmVjdGlvbi5cbiIKLSJcbiIKLSJWb3VzIGRldmV6IGZpbmlyIGRlIGNvcnJpZ2VyIGNlIGNvbW1pdC5cbiIKKyJ2ZXJzaW9uIGQnaW5kZXggcmVuc2VpZ27DqWUsIG1haXMgbGEgdmFsZXVyIGVzdCBpbnZhbGlkZS5cbiIKKyJVdGlsaXNhdGlvbiBkZSBsYSB2ZXJzaW9uICVpIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIyMgorIzogcmVhZC1jYWNoZS5jOjE2NjEKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkFib3J0IG1lcmdlP1xuIgotIlxuIgotIkFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgotIlxuIgotIkNvbnRpbnVlIHdpdGggYWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2U/IgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCiBtc2dzdHIgIiIKLSJBYmFuZG9ubmVyIGxhIGZ1c2lvbiA/XG4iCi0iXG4iCi0iQWJhbmRvbm5lciBsYSBmdXNpb24gY291cmFudGUgZW50cmFpbmVyYSBsYSBwZXJ0ZSBkZSBUT1VURVMgbGVzICIKLSJtb2RpZmljYXRpb25zIG5vbiBjb21taXTDqWVzLlxuIgotIlxuIgotIkFiYW5kb25uZXIgcXVhbmQgbcOqbWUgbGEgZnVzaW9uIGNvdXJhbnRlID8iCisiR0lUX0lOREVYX1ZFUlNJT04gZXN0IHJlbnNlaWduw6ksIG1haXMgbGEgdmFsZXVyIGVzdCBpbnZhbGlkZS5cbiIKKyJVdGlsaXNhdGlvbiBkZSBsYSB2ZXJzaW9uICVpIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIyOAorIzogcmVhZC1jYWNoZS5jOjE3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgInNpZ25hdHVyZSBpbmNvcnJlY3RlIDB4JTA4eCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJWQiCittc2dzdHIgIm1hdXZhaXNlIHZlcnNpb24gZCdpbmRleCAlZCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjkKK21zZ2lkICJiYWQgaW5kZXggZmlsZSBzaGExIHNpZ25hdHVyZSIKK21zZ3N0ciAibWF1dmFpc2Ugc2lnbmF0dXJlIHNoYTEgZCdpbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjE3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggdXNlcyAlLjRzIGV4dGVuc2lvbiwgd2hpY2ggd2UgZG8gbm90IHVuZGVyc3RhbmQiCittc2dzdHIgImwnaW5kZXggdXRpbGlzZSBsJ2V4dGVuc2lvbiAlLjRzIHF1aSBuJ2VzdCBwYXMgY29tcHJpc2UiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzYxCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICUuNHMgZXh0ZW5zaW9uIgorbXNnc3RyICJleHRlbnNpb24gJS40cyBpZ25vcsOpZSIKKworIzogcmVhZC1jYWNoZS5jOjE3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbmRleCBlbnRyeSBmb3JtYXQgMHglMDh4IgorbXNnc3RyICJmb3JtYXQgZCdlbnRyw6llIGQnaW5kZXggaW5jb25udSAweCUwOHgiCisKKyM6IHJlYWQtY2FjaGUuYzoxODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBuYW1lIGZpZWxkIGluIHRoZSBpbmRleCwgbmVhciBwYXRoICclcyciCittc2dzdHIgImNoYW1wIGRlIG5vbSBtYWxmb3Jtw6kgZGFucyBsJ2luZGV4LCBwcsOocyBkdSBjaGVtaW4gJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjE4NzEKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBpbiBpbmRleCIKK21zZ3N0ciAiZW50csOpZXMgZGUgcHLDqXBhcmF0aW9uIG5vbiBvcmRvbm7DqWVzIGRhbnMgbCdpbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjE4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgc3RhZ2UgZW50cmllcyBmb3IgbWVyZ2VkIGZpbGUgJyVzJyIKK21zZ3N0ciAiZW50csOpZXMgbXVsdGlwbGVzIGRlIHByw6lwYXJhdGlvbiBwb3VyIGxlIGZpY2hpZXIgZnVzaW9ubsOpICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzoxODc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGZvciAnJXMnIgorbXNnc3RyICJlbnRyw6llcyBkZSBwcsOpcGFyYXRpb24gbm9uIG9yZG9ubsOpZXMgcG91ciAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MTk4MyByZWFkLWNhY2hlLmM6MjI3MSByZXJlcmUuYzo1NjUgcmVyZXJlLmM6NTk5IHJlcmVyZS5jOjExMTEKKyM6IHN1Ym1vZHVsZS5jOjE2MTkgYnVpbHRpbi9hZGQuYzo1MzIgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxODEKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NzAgYnVpbHRpbi9jaGVja291dC5jOjY1NiBidWlsdGluL2NsZWFuLmM6OTY3CisjOiBidWlsdGluL2NvbW1pdC5jOjM2NyBidWlsdGluL2RpZmYtdHJlZS5jOjEyMCBidWlsdGluL2dyZXAuYzo0ODUKKyM6IGJ1aWx0aW4vbXYuYzoxNDUgYnVpbHRpbi9yZXNldC5jOjI0NiBidWlsdGluL3JtLmM6MjkwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzMyCittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICJmaWNoaWVyIGQnaW5kZXggY29ycm9tcHUiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIGZpbCBsb2FkX2NhY2hlX2VudHJpZXMgOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgam9pbmRyZSBsZSBmaWwgbG9hZF9jYWNoX2VudHJpZXMgOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgb3BlbiBmYWlsZWQiCittc2dzdHIgIiVzwqA6IGwnb3V2ZXJ0dXJlIGR1IGZpY2hpZXIgZCdpbmRleCBhIMOpY2hvdcOpIgorCisjOiByZWFkLWNhY2hlLmM6MjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHN0YXQgdGhlIG9wZW4gaW5kZXgiCittc2dzdHIgIiVzwqA6IGltcG9zc2libGUgZGUgZmFpcmUgdW4gc3RhdCBzdXIgbCdpbmRleCBvdXZlcnQiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiJXPCoDogZmljaGllciBkJ2luZGV4IHBsdXMgcGV0aXQgcXUnYXR0ZW5kdSIKKworIzogcmVhZC1jYWNoZS5jOjIxODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuYWJsZSB0byBtYXAgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXPCoDogaW1wb3NzaWJsZSBkZSBtYXBwZXIgbGUgZmljaGllciBkJ2luZGV4IgorCisjOiByZWFkLWNhY2hlLmM6MjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZSBmaWwgbG9hZF9pbmRleF9leHRlbnNpb25zIDogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGpvaW5kcmUgbGUgZmlsIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyA6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI4MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZnJlc2hlbiBzaGFyZWQgaW5kZXggJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByYWZyYcOuY2hpciBsJ2luZGV4IHBhcnRhZ8OpICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzoyMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiCittc2dzdHIgImluZGV4IGNhc3PDqSwgJXMgYXR0ZW5kdSBkYW5zICVzLCAlcyBvYnRlbnUiCisKKyM6IHJlYWQtY2FjaGUuYzozMDI2IHN0cmJ1Zi5jOjExNjAgd3JhcHBlci5jOjYyMiBidWlsdGluL21lcmdlLmM6MTEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmZXJtZXIgJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjMxMjkgc2VxdWVuY2VyLmM6MjM0MyBzZXF1ZW5jZXIuYzozOTU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgInN0YXQgaW1wb3NzaWJsZSBkZSAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MzE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBnaXQgZGlyOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciBsZSByw6lwZXJ0b2lyZSBnaXTCoDogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bmxpbms6ICVzIgorbXNnc3RyICLDqWNoZWMgbG9ycyBkZSBsJ3VubGlua8KgOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpeCBwZXJtaXNzaW9uIGJpdHMgb24gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6lnbGVyIGxlcyBiaXRzIGRlIGRyb2l0IGRlICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzozMzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgZHJvcCB0byBzdGFnZSAjMCIKK21zZ3N0ciAiJXMgOiBpbXBvc3NpYmxlIGRlIHJldmVuaXIgw6AgbCfDqXRhcGUgMCIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTEKIG1zZ2lkICIiCi0iUmVzZXQgY2hhbmdlcz9cbiIKLSJcbiIKLSJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCi0iXG4iCi0iQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCisiWW91IGNhbiBmaXggdGhpcyB3aXRoICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS0iCisiY29udGludWUnLlxuIgorIk9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLlxuIgogbXNnc3RyICIiCi0iUsOpaW5pdGlhbGlzZXIgbGVzIG1vZGlmaWNhdGlvbnMgP1xuIgotIlxuIgotIlLDqWluaXRpYWxpc2VyIGxlcyBtb2RpZmljYXRpb25zIHZhIGZhaXJlIHBlcmRyZSBUT1VURVMgbGVzIG1vZGlmaWNhdGlvbnMgbm9uICIKLSJjb21taXTDqWVzLlxuIgotIlxuIgotIlLDqWluaXRpYWxpc2VyIHF1YW5kIG3Dqm1lIGxlcyBtb2RpZmljYXRpb25zIGNvdXJhbnRlcyA/IgorIlZvdXMgcG91dmV6IGNvcnJpZ2VyIGNlY2kgYXZlYyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgcHVpcyBsYW5jZXogJ2dpdCAiCisicmViYXNlIC0tY29udGludWUnLlxuIgorIk91IHZvdXMgcG91dmV6IGFiYW5kb25uZXIgbGUgcmViYXNhZ2UgYXZlYyAnZ2l0IHJlYmFzZSAtLWFib3J0Jy5cbiIKIAotIzogbGliL21lcmdlLnRjbDoyMzkKLW1zZ2lkICJBYm9ydGluZyIKLW1zZ3N0ciAiQWJhbmRvbiIKLQotIzogbGliL21lcmdlLnRjbDoyMzkKLW1zZ2lkICJmaWxlcyByZXNldCIKLW1zZ3N0ciAiZmljaGllcnMgcsOpaW5pdGlhbGlzw6lzIgotCi0jOiBsaWIvbWVyZ2UudGNsOjI2NwotbXNnaWQgIkFib3J0IGZhaWxlZC4iCi1tc2dzdHIgIkwnYWJhbmRvbiBhIMOpY2hvdcOpLiIKLQotIzogbGliL21lcmdlLnRjbDoyNjkKLW1zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCi1tc2dzdHIgIkFiYW5kb24gdGVtaW7DqS4gUHLDqnQuIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo4Ci1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKLW1zZ3N0ciAiRm9yY2VyIGxhIHLDqXNvbHV0aW9uIMOgIGxhIHZlcnNpb24gZGUgYmFzZSA/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo5Ci1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCi1tc2dzdHIgIkZvcmNlciBsYSByw6lzb2x1dGlvbiDDoCBjZXR0ZSBicmFuY2hlID8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCi1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKLW1zZ3N0ciAiRm9yY2VyIGxhIHLDqXNvbHV0aW9uIMOgIGwnYXV0cmUgYnJhbmNoZSA/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNAotIywgdGNsLWZvcm1hdAorIzogcmViYXNlLWludGVyYWN0aXZlLmM6MzMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIk5vdGUgdGhhdCB0aGUgZGlmZiBzaG93cyBvbmx5IGNvbmZsaWN0aW5nIGNoYW5nZXMuXG4iCi0iXG4iCi0iJXMgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiIKLSJcbiIKLSJUaGlzIG9wZXJhdGlvbiBjYW4gYmUgdW5kb25lIG9ubHkgYnkgcmVzdGFydGluZyB0aGUgbWVyZ2UuIgorInVucmVjb2duaXplZCBzZXR0aW5nICVzIGZvciBvcHRpb24gcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suIElnbm9yaW5nLiIKIG1zZ3N0ciAiIgotIk5vdGVyIHF1ZSBsZSBkaWZmIG5lIG1vbnRyZSBxdWUgbGVzIG1vZGlmaWNhdGlvbnMgZW4gY29uZmxpdC5cbiIKLSJcbiIKLSIlcyBzZXJhIMOpY3Jhc8OpLlxuIgotIlxuIgotIkNldHRlIG9ww6lyYXRpb24gbmUgcGV1dCDDqnRyZSBpbnZlcnPDqWUgcXUnZW4gcmVsYW7Dp2FudCBsYSBmdXNpb24uIgorInBhcmFtw6h0cmUgbm9uIHJlY29ubnUgJXMgcG91ciBsJ29wdGlvbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3LDqS4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmlsZSAlcyBzZWVtcyB0byBoYXZlIHVucmVzb2x2ZWQgY29uZmxpY3RzLCBzdGlsbCBzdGFnZT8iCi1tc2dzdHIgIiIKLSJMZSBmaWNoaWVyICVzIHNlbWJsZSBhdm9pciBkZXMgY29uZmxpdHMgbm9uIHLDqXNvbHVzLCBpbmRleGVyIHF1YW5kIG3Dqm1lID8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWRkaW5nIHJlc29sdXRpb24gZm9yICVzIgotbXNnc3RyICJBam91dGVyIHVuZSByw6lzb2x1dGlvbiBwb3VyICVzIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDEKLW1zZ2lkICJDYW5ub3QgcmVzb2x2ZSBkZWxldGlvbiBvciBsaW5rIGNvbmZsaWN0cyB1c2luZyBhIHRvb2wiCi1tc2dzdHIgIiIKLSJJbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSBsYSBzdXBwcmVzc2lvbiBvdSBkZSByZWxpZXIgZGVzIGNvbmZsaXRzIGVuIHV0aWxpc2FudCAiCi0idW4gb3V0aWwiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0NgotbXNnaWQgIkNvbmZsaWN0IGZpbGUgZG9lcyBub3QgZXhpc3QiCi1tc2dzdHIgIkxlIGZpY2hpZXIgZW4gY29uZmxpdCBuJ2V4aXN0ZSBwYXMuIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKLW1zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdW4gb3V0aWwgZ3JhcGhpcXVlIHBvdXIgZnVzaW9ubmVyIGRlcyBmaWNoaWVycy4iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjI2OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuc3VwcG9ydGVkIG1lcmdlIHRvb2wgJyVzJyIKLW1zZ3N0ciAiT3V0aWwgZGUgZnVzaW9uICclcycgbm9uIHN1cHBvcnTDqSIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MzAzCi1tc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCi1tc2dzdHIgIkwnb3V0aWwgZGUgZnVzaW9uIHRvdXJuZSBkw6lqw6AsIGZhdXQtaWwgbGUgdGVybWluZXIgPyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MzIzCi0jLCB0Y2wtZm9ybWF0CisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo0MgogbXNnaWQgIiIKLSJFcnJvciByZXRyaWV2aW5nIHZlcnNpb25zOlxuIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21tYW5kPiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJiLCBicmVhayA9IHN0b3AgaGVyZSAoY29udGludWUgcmViYXNlIGxhdGVyIHdpdGggJ2dpdCByZWJhc2UgLS1jb250aW51ZScpXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLlxuIgorbXNnc3RyICIiCisiXG4iCisiQ29tbWFuZGVzwqA6XG4iCisiIHAsIHBpY2sgPGNvbW1pdD4gPSB1dGlsaXNlciBsZSBjb21taXRcbiIKKyIgciwgcmV3b3JkIDxjb21taXQ+ID0gdXRpbGlzZXIgbGUgY29tbWl0LCBtYWlzIHJlZm9ybXVsZXIgc29uIG1lc3NhZ2VcbiIKKyIgZSwgZWRpdCA8Y29tbWl0PiA9IHV0aWxpc2VyIGxlIGNvbW1pdCwgbWFpcyBzJ2FycsOqdGVyIHBvdXIgbGUgbW9kaWZpZXJcbiIKKyIgcywgc3F1YXNoIDxjb21taXQ+ID0gdXRpbGlzZXIgbGUgY29tbWl0LCBtYWlzIGxlIGZ1c2lvbm5lciBhdmVjIGxlICIKKyJwcsOpY8OpZGVudFxuIgorIiBmLCBmaXh1cCA8Y29tbWl0PiA9IGNvbW1lIFwic3F1YXNoXCIsIG1haXMgZW4gw6lsaW1pbmFudCBzb24gbWVzc2FnZVxuIgorIiB4LCBleGVjIDxjb21taXQ+ID0gbGFuY2VyIGxhIGNvbW1hbmRlIChyZXN0ZSBkZSBsYSBsaWduZSkgZGFucyB1biBzaGVsbFxuIgorIiBiLCBicmVhayA9IHMnYXJyw6p0ZXIgaWNpIChvbiBwZXV0IGNvbnRpbnVlciBlbnN1aXRlIGF2ZWMgJ2dpdCByZWJhc2UgLS0iCisiY29udGludWUnKVxuIgorIiBkLCBkcm9wIDxjb21taXQ+ID0gc3VwcHJpbWVyIGxlIGNvbW1pdFxuIgorIiBsLCBsYWJlbCA8bGFiZWw+ID0gw6l0aXF1ZXRlciBsYSBIRUFEIGNvdXJhbnRlIGF2ZWMgdW4gbm9tXG4iCisiIHQsIHJlc2V0IDxsYWJlbD4gPSByw6lpbml0aWFsaXNlciBIRUFEIMOgIGxhYmVsXG4iCisiIG0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDx1bmlsaWduZT5dXG4iCisiICAgICAgICAgY3LDqWVyIHVuIGNvbW1pdCBkZSBmdXNpb24gdXRpbGlzYW50IGxlIG1lc3NhZ2UgZGUgZnVzaW9uIG9yaWdpbmFsXG4iCisiICAgICAgICAgKG91IGwndW5pbGlnbmUsIHNpIGF1Y3VuIGNvbW1pdCBkZSBmdXNpb24gbidhIMOpdMOpIHNww6ljaWZpw6kpLlxuIgorIiAgICAgICAgIFV0aWxpc2V6IC1jIDxjb21taXQ+IHBvdXIgcmVmb3JtdWxlciBsZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24uXG4iCisiXG4iCisiVm91cyBwb3V2ZXogcsOpb3Jkb25uZXIgY2VzIGxpZ25lc8KgOyBlbGxlcyBzb250IGV4w6ljdXTDqWVzIGRlIGhhdXQgZW4gYmFzLlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kcykiCittc2dzdHJbMF0gIlJlYmFzYWdlIGRlICVzIHN1ciAlcyAoJWQgY29tbWFuZGUpIgorbXNnc3RyWzFdICJSZWJhc2FnZSBkZSAlcyBzdXIgJXMgKCVkIGNvbW1hbmRlcykiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjcyIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMjgKK21zZ2lkICIiCisiXG4iCisiRG8gbm90IHJlbW92ZSBhbnkgbGluZS4gVXNlICdkcm9wJyBleHBsaWNpdGx5IHRvIHJlbW92ZSBhIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk5lIHN1cHByaW1leiBhdWN1bmUgbGlnbmUuIFV0aWxpc2V6ICdkcm9wJyBleHBsaWNpdGVtZW50IHBvdXIgc3VwcHJpbWVyIHVuICIKKyJjb21taXQuXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc1IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMzIKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTaSB2b3VzIMOpbGltaW5leiB1bmUgbGlnbmUgaWNpLCBMRSBDT01NSVQgQ09SUkVTUE9OREFOVCBTRVJBIFBFUkRVLlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4MSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODcxCittc2dpZCAiIgorIlxuIgorIllvdSBhcmUgZWRpdGluZyB0aGUgdG9kbyBmaWxlIG9mIGFuIG9uZ29pbmcgaW50ZXJhY3RpdmUgcmViYXNlLlxuIgorIlRvIGNvbnRpbnVlIHJlYmFzZSBhZnRlciBlZGl0aW5nLCBydW46XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiVm91cyDDqnRlcyBlbiB0cmFpbiBkJ8OpZGl0ZXIgbGUgZmljaGllciB0b2RvIGQndW4gcmViYXNhZ2UgaW50ZXJhY3RpZiBlbiAiCisiY291cnMuXG4iCisiUG91ciBjb250aW51ZXIgbGUgcmViYXNhZ2UgYXByw6hzIMOpZGl0aW9uLCBsYW5jZXrCoDpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjg2IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDgKK21zZ2lkICIiCisiXG4iCisiSG93ZXZlciwgaWYgeW91IHJlbW92ZSBldmVyeXRoaW5nLCB0aGUgcmViYXNlIHdpbGwgYmUgYWJvcnRlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkNlcGVuZGFudCwgc2kgdm91cyBlZmZhY2V6IHRvdXQsIGxlIHJlYmFzYWdlIHNlcmEgYW5udWzDqS5cbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTEwIHJlcmVyZS5jOjQ4NSByZXJlcmUuYzo2OTIgc2VxdWVuY2VyLmM6MzQ0NAorIzogc2VxdWVuY2VyLmM6MzQ3MCBzZXF1ZW5jZXIuYzo1MTI1IGJ1aWx0aW4vZnNjay5jOjM0NiBidWlsdGluL3JlYmFzZS5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgJyVzJyIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTE2IGJ1aWx0aW4vcmViYXNlLmM6MTg0IGJ1aWx0aW4vcmViYXNlLmM6MjEwCisjOiBidWlsdGluL3JlYmFzZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlICclcycuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LlxuIgorIkRyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOlxuIgorbXNnc3RyICIiCisiQXR0ZW50aW9uwqA6IGNlcnRhaW5zIGNvbW1pdHMgb250IHB1IMOqdHJlIGFjY2lkZW50ZWxsZW1lbnQgc3VwcHJpbcOpcy5cbiIKKyJDb21taXRzIHN1cHByaW3DqXMgKGR1IHBsdXMgamV1bmUgYXUgcGx1cyB2aWV1eCnCoDpcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSBcImRyb3BcIiB0byBleHBsaWNpdGx5IHJlbW92ZSBhIGNvbW1pdC5cbiIKKyJcbiIKKyJVc2UgJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2YgIgorIndhcm5pbmdzLlxuIgorIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBvdXIgw6l2aXRlciBjZSBtZXNzYWdlLCB1dGlsaXNleiBcImRyb3BcIiBwb3VyIHN1cHByaW1lciBleHBsaWNpdGVtZW50IHVuICIKKyJjb21taXQuXG4iCisiXG4iCisiVXRpbGlzZXogJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHBvdXIgY2hhbmdlciBsZSBuaXZlYXUgIgorImQnYXZlcnRpc3NlbWVudHMuXG4iCisiTGVzIGNvbXBvcnRlbWVudHMgZGlzcG9uaWJsZXMgc29udMKgOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuIgorIlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoyMzMgcmViYXNlLWludGVyYWN0aXZlLmM6MjM4IHNlcXVlbmNlci5jOjIyNjIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTcwIGJ1aWx0aW4vcmViYXNlLmM6MTk1IGJ1aWx0aW4vcmViYXNlLmM6MjIxCisjOiBidWlsdGluL3JlYmFzZS5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnLiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlICclcycuIgorCisjOiByZWZzLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgb2JqZWN0ISIKK21zZ3N0ciAiJXMgbmUgcG9pbnRlIHBhcyBzdXIgdW4gb2JqZXQgdmFsaWRlISIKKworIzogcmVmcy5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMiCittc2dzdHIgInN5bXJlZiBwZW5kYW50ICVzIGlnbm9yw6kiCisKKyM6IHJlZnMuYzo2NjkgcmVmLWZpbHRlci5jOjIwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIKK21zZ3N0ciAicsOpZiBjYXNzw6kgJXMgaWdub3LDqSIKKworIzogcmVmcy5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciAnJXMnIGVuIMOpY3JpdHVyZcKgOiAlcyIKKworIzogcmVmcy5jOjgxNCByZWZzLmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGEgcsOpZiAnJXMnIgorCisjOiByZWZzLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJsYSByw6lmw6lyZW5jZSAnJXMnIGV4aXN0ZSBkw6lqw6AiCisKKyM6IHJlZnMuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciCittc2dzdHIgImlkIGQnb2JqZXQgaW5hdHRlbmR1IHBlbmRhbnQgbCfDqWNyaXR1cmUgZGUgJyVzJyIKKworIzogcmVmcy5jOjgzMyBzZXF1ZW5jZXIuYzo0MDcgc2VxdWVuY2VyLmM6MjcwMSBzZXF1ZW5jZXIuYzoyOTA1CisjOiBzZXF1ZW5jZXIuYzoyOTE5IHNlcXVlbmNlci5jOjMxNzcgc2VxdWVuY2VyLmM6NTAzNiBzdHJidWYuYzoxMTU3CisjOiB3cmFwcGVyLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBkYW5zICclcyciCisKKyM6IHJlZnMuYzo4NjAgc3RyYnVmLmM6MTE1NSB3cmFwcGVyLmM6MTg4IHdyYXBwZXIuYzozNTggYnVpbHRpbi9hbS5jOjcxOQorIzogYnVpbHRpbi9yZWJhc2UuYzoxMDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgJyVzJyBlbiDDqWNyaXR1cmUiCisKKyM6IHJlZnMuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiBkZWxldGluZyAnJXMnIgorbXNnc3RyICJpZCBkJ29iamV0IGluYXR0ZW5kdSBwZW5kYW50IGxhIHN1cHByZXNzaW9uIGRlICclcyciCisKKyM6IHJlZnMuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgaGFzIGdhcCBhZnRlciAlcyIKK21zZ3N0ciAibGUgam91cm5hbCBwb3VyIGxhIHLDqWYgJXMgY29udGllbnQgdW4gdHJvdSBhcHLDqHMgJXMiCisKKyM6IHJlZnMuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIHVuZXhwZWN0ZWRseSBlbmRlZCBvbiAlcyIKK21zZ3N0ciAibGUgam91cm5hbCBwb3VyIGxhIHLDqWYgJXMgcydhcnLDqnRlIGRlIG1hbmnDqHJlIGluYXR0ZW5kdWUgc3VyICVzIgorCisjOiByZWZzLmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICVzIGlzIGVtcHR5IgorbXNnc3RyICJsZSBqb3VybmFsIHBvdXIgbGEgcsOpZiAlcyBlc3QgdmlkZSIKKworIzogcmVmcy5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gdXBkYXRlIHJlZiB3aXRoIGJhZCBuYW1lICclcyciCittc2dzdHIgInJlZnVzIGRlIG1ldHRyZSDDoCBqb3VyIHVuZSByw6lmIGF2ZWMgdW4gbm9tIGNhc3PDqSAnJXMnIgorCisjOiByZWZzLmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cGRhdGVfcmVmIGZhaWxlZCBmb3IgcmVmICclcyc6ICVzIgorbXNnc3RyICLDqWNoZWMgZGUgdXBkYXRlX3JlZiBwb3VyIGxhIHLDqWYgJyVzJ8KgOiAlcyIKKworIzogcmVmcy5jOjIwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgdXBkYXRlcyBmb3IgcmVmICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgIm1pc2VzIMOgIGpvdXIgbXVsdGlwbGVzIHBvdXIgbGEgcsOpZiAnJXMnIG5vbiBwZXJtaXNlcyIKKworIzogcmVmcy5jOjIwNTUKK21zZ2lkICJyZWYgdXBkYXRlcyBmb3JiaWRkZW4gaW5zaWRlIHF1YXJhbnRpbmUgZW52aXJvbm1lbnQiCittc2dzdHIgIm1pc2VzIMOgIGpvdXIgZGVzIHLDqWbDqXJlbmNlcyBpbnRlcmRpdGVzIGVuIGVudmlyb25uZW1lbnQgZGUgcXVhcmFudGFpbmUiCisKKyM6IHJlZnMuYzoyMTUxIHJlZnMuYzoyMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIiclcycgZXhpc3RlwqA7IGltcG9zc2libGUgZGUgY3LDqWVyICclcyciCisKKyM6IHJlZnMuYzoyMTU3IHJlZnMuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB0cmFpdGVyICclcycgZXQgJyVzJyBlbiBtw6ptZSB0ZW1wcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIHJlZmVyZW5jZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbGEgcsOpZsOpcmVuY2UgJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNDcgcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NDEKKyM6IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbGEgcsOpZsOpcmVuY2UgJXPCoDogJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNTAgcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbGVzIHLDqWbDqXJlbmNlc8KgOiAlcyIKKworIzogcmVmc3BlYy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZnNwZWMgJyVzJyIKK21zZ3N0ciAic3DDqWNpZmljYXRldXIgZGUgcsOpZmVyZW5jZSBpbnZhbGlkZcKgOiAnJXMnIgorCisjIMOgIHByaW9yaSBvbiBwYXJsZSBkJ3VuZSBicmFuY2hlIGljaQorIzogcmVmLWZpbHRlci5jOjQyIHd0LXN0YXR1cy5jOjE5MzgKK21zZ2lkICJnb25lIgorbXNnc3RyICJkaXNwYXJ1ZSIKKworIzogcmVmLWZpbHRlci5jOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkIgorbXNnc3RyICJlbiBhdmFuY2UgZGUgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJiZWhpbmQgJWQiCittc2dzdHIgImVuIHJldGFyZCBkZSAlZCIKKworIzogcmVmLWZpbHRlci5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWQiCittc2dzdHIgImVuIGF2YW5jZSBkZSAlZCwgZW4gcmV0YXJkIGRlICVkIgorCisjOiByZWYtZmlsdGVyLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoY29sb3I6PGNvbG9yPikiCittc2dzdHIgImZvcm1hdCBhdHRlbmR1wqA6ICUlKGNvbG9yOjxjb3VsZXVyPikiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiCittc2dzdHIgImNvdWxldXIgbm9uIHJlY29ubnVlIDogJSUoY29sb3I6JXMpIgorCisjOiByZWYtZmlsdGVyLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpsc3RyaXA9JXMiCittc2dzdHIgIlZhbGV1ciBlbnRpw6hyZSBhdHRlbmR1ZSByZWZuYW1lOmxzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6cnN0cmlwPSVzIgorbXNnc3RyICJWYWxldXIgZW50acOocmUgYXR0ZW5kdWUgcmVmbmFtZTpyc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKCVzKSBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50ICUlKCVzKSBub24gcmVjb25udcKgOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShvYmplY3R0eXBlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUob2JqZWN0dHlwZSkgbidhY2NlcHRlIHBhcyBkJ2FyZ3VtZW50IgorCisjOiByZWYtZmlsdGVyLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RzaXplKSBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50ICUlKG9iamVjdHNpemUpIG5vbiByZWNvbm51IDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoZGVsdGFiYXNlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoZGVsdGFiYXNlKSBuJ2FjY2VwdGUgcGFzIGQnYXJndW1lbnQiCisKKyM6IHJlZi1maWx0ZXIuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoYm9keSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGJvZHkpIG4nYWNjZXB0ZSBwYXMgZCdhcmd1bWVudCIKKworIzogcmVmLWZpbHRlci5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlJShzdWJqZWN0KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoc3ViamVjdCkgbidhY2NlcHRlIHBhcyBkJ2FyZ3VtZW50IgorCisjOiByZWYtZmlsdGVyLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gJSUodHJhaWxlcnMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnQgJSUodHJhaWxlcnMpIGluY29ubnXCoDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgY29udGVudHM6bGluZXM9JXMiCittc2dzdHIgInZhbGV1ciBwb3NpdGl2ZSBhdHRlbmR1ZSBjb250ZW50czpsaW5lcz0lcyIKKworIzogcmVmLWZpbHRlci5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoY29udGVudHMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnQgJSUoY29udGVudHMpIG5vbiByZWNvbm51IDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgb2JqZWN0bmFtZTpzaG9ydD0lcyIKK21zZ3N0ciAidmFsZXVyIHBvc2l0aXZlIGF0dGVuZHVlIG9iamVjdG5hbWU6c2hvcnQ9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdG5hbWUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnQgJSUob2JqZWN0bmFtZSkgbm9uIHJlY29ubnUgOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCittc2dzdHIgImZvcm1hdCBhdHRlbmR1wqA6ICUlKGFsaWduOjxsYXJnZXVyPiw8cG9zaXRpb24+KSIKKworIzogcmVmLWZpbHRlci5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcG9zaXRpb246JXMiCittc2dzdHIgInBvc2l0aW9uIG5vbiByZWNvbm51ZcKgOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2lkdGg6JXMiCittc2dzdHIgImxhcmdldXIgbm9uIHJlY29ubnVlwqA6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmd1bWVudCAlJShhbGlnbikgbm9uIHJlY29ubnUgOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB3aWR0aCBleHBlY3RlZCB3aXRoIHRoZSAlJShhbGlnbikgYXRvbSIKK21zZ3N0ciAidmFsZXVyIHBvc2l0aXZlIGF0dGVuZHVlIGF2ZWMgbCdhdG9tZSAlJShhbGlnbikiCisKKyM6IHJlZi1maWx0ZXIuYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGlmKSBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50ICUlKGlmKSBub24gcmVjb25udcKgOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAibm9tIGRlIGNoYW1wIG1hbGZvcm3DqSAlLipzIgorCisjOiByZWYtZmlsdGVyLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAibm9tIGRlIGNoYW1wIGluY29ubnUgOiAlLipzIgorCisjOiByZWYtZmlsdGVyLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSwgYnV0IHRoZSBmaWVsZCAnJS4qcycgcmVxdWlyZXMgYWNjZXNzIHRvIG9iamVjdCBkYXRhIgorbXNnc3RyICIiCisicGFzIHVuIGTDqXDDtHQgZ2l0LCBtYWlzIGxlIGNoYW1wICclLipzJyBuw6ljZXNzaXRlIGwnYWNjw6hzIGF1eCBkb25uw6llcyBkJ29iamV0IgorCisjOiByZWYtZmlsdGVyLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoaWYpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0wqA6IGF0b21lICUlKGlmKSB1dGlsaXPDqSBzYW5zIHVuIGF0b21lICUlKHRoZW4pIgorCisjOiByZWYtZmlsdGVyLmM6Nzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgImZvcm1hdMKgOiBhdG9tZSAlJSh0aGVuKSB1dGlsaXPDqSBzYW5zIHVuIGF0b21lICUlKGlmKSIKKworIzogcmVmLWZpbHRlci5jOjc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAiZm9ybWF0wqA6IGF0b21lICUlKHRoZW4pIHV0aWxpc8OpIHBsdXMgZCd1bmUgZm9pcyIKKworIzogcmVmLWZpbHRlci5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBhZnRlciAlJShlbHNlKSIKK21zZ3N0ciAiZm9ybWF0OiBhdG9tZSAlJSh0aGVuKSB1dGlsaXPDqSBhcHLDqHMgJSUoZWxzZSkiCisKKyM6IHJlZi1maWx0ZXIuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0wqA6IGF0b21lICUlKGVsc2UpIHV0aWxpc8OpIHNhbnMgdW4gYXRvbWUgJSUoaWYpIgorCisjOiByZWYtZmlsdGVyLmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICJmb3JtYXTCoDogYXRvbWUgJSUoZWxzZSkgdXRpbGlzw6kgc2FucyB1biBhdG9tZSAlJSh0aGVuKSIKKworIzogcmVmLWZpbHRlci5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAiZm9ybWF0wqA6IGF0b21lICUlKGVsc2UpIHV0aWxpc8OpIHBsdXMgZCd1bmUgZm9pcyIKKworIzogcmVmLWZpbHRlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSB1c2VkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBhdG9tIgorbXNnc3RyICJmb3JtYXTCoDogYXRvbWUgJSUoZW5kKSB1dGlsaXPDqSBzYW5zIGF0b21lIGNvcnJlc3BvbmRhbnQiCisKKyM6IHJlZi1maWx0ZXIuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgIkNoYcOubmUgZGUgZm9ybWF0YWdlIG1hbCBmb3Jtw6llICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIHJlYmFzaW5nICVzIgorbXNnc3RyICJhdWN1bmUgYnJhbmNoZSwgcmViYXNhZ2UgZGUgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgcmViYXNpbmcgZGV0YWNoZWQgSEVBRCAlcyIKK21zZ3N0ciAiYXVjdW5lIGJyYW5jaGUsIHJlYmFzYWdlIGRlIGxhIEhFQUQgZMOpdGFjaMOpZSAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcyIKK21zZ3N0ciAiYXVjdW5lIGJyYW5jaGUsIGJpc2VjdCBhIGTDqW1hcnLDqSBzdXIgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTA0Cittc2dpZCAibm8gYnJhbmNoIgorbXNnc3RyICJhdWN1bmUgYnJhbmNoZSIKKworIzogcmVmLWZpbHRlci5jOjE1NDAgcmVmLWZpbHRlci5jOjE3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBvYmplY3QgJXMgZm9yICVzIgorbXNnc3RyICJvYmpldCBtYW5xdWFudCAlcyBwb3VyICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXJzZV9vYmplY3RfYnVmZmVyIGZhaWxlZCBvbiAlcyBmb3IgJXMiCittc2dzdHIgIsOpY2hlYyBkZSBwYXJzZV9vYmplY3RfYnVmZmVyIHN1ciAlcyBwb3VyICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IGF0ICclcyciCittc2dzdHIgIm9iamV0IG1hbGZvcm3DqSDDoCAnJXMnIgorCisjOiByZWYtZmlsdGVyLmM6MjA5MworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSAlcyIKK21zZ3N0ciAicsOpZiBhdmVjIHVuIG5vbSBjYXNzw6kgJXMgaWdub3LDqSIKKworIzogcmVmLWZpbHRlci5jOjIzODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gbWlzc2luZyIKK21zZ3N0ciAiZm9ybWF0OiBhdG9tZSAlJShlbmQpIG1hbnF1YW50IgorCisjOiByZWYtZmlsdGVyLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW1lcmdlZCIKK21zZ3N0ciAibCdvcHRpb24gwqvCoCVzwqDCuyBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgLS1tZXJnZWQiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8tbWVyZ2VkIgorbXNnc3RyICJsJ29wdGlvbiDCq8KgJXPCoMK7IGVzdCBpbmNvbXBhdGlibGUgYXZlYyAtLW5vLW1lcmdlZCIKKworIzogcmVmLWZpbHRlci5jOjI1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICJub20gZCdvYmpldCBtYWxmb3Jtw6kgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIG11c3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgImwnb3B0aW9uICclcycgZG9pdCBwb2ludGVyIHN1ciB1biBjb21taXQiCisKKyM6IHJlbW90ZS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICIiCisidW4gcmFjY291cmNpIGRlIGNvbmZpZ3VyYXRpb24gZGUgZGlzdGFudCBuZSBwZXV0IHBhcyBjb21tZW5jZXIgcGFyICcvJ8KgOiAlcyIKKworIzogcmVtb3RlLmM6NDE0Cittc2dpZCAibW9yZSB0aGFuIG9uZSByZWNlaXZlcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0IgorbXNnc3RyICJwbHVzIGQndW4gcmVjZWl2ZXBhY2sgZm91cm5pcywgdXRpbGlzYXRpb24gZHUgcHJlbWllciIKKworIzogcmVtb3RlLmM6NDIyCittc2dpZCAibW9yZSB0aGFuIG9uZSB1cGxvYWRwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgInBsdXMgZCd1biB1cGxvYWRwYWNrIGZvdXJuaXMsIHV0aWxpc2F0aW9uIGR1IHByZW1pZXIiCisKKyM6IHJlbW90ZS5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYm90aCAlcyBhbmQgJXMgdG8gJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgw6AgbGEgZm9pcyAlcyBldCAlcyBwb3VyICVzIgorCisjOiByZW1vdGUuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMgc3VpdCBoYWJpdHVlbGxlbWVudCAlcywgcGFzICVzIgorCisjOiByZW1vdGUuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlcyBzdWl0IMOgIGxhIGZvaXMgJXMgZXQgJXMiCisKKyM6IHJlbW90ZS5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgJyVzJyBvZiBwYXR0ZXJuIGhhZCBubyAnKiciCittc2dzdHIgImxhIGNsw6kgJyVzJyBkdSBtb2TDqGxlIG4nYSBwYXMgZGUgJyonIgorCisjOiByZW1vdGUuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsdWUgJyVzJyBvZiBwYXR0ZXJuIGhhcyBubyAnKiciCittc2dzdHIgImxhIHZhbGV1ciAnJXMnIGR1IG1vZMOobGUgbidhIHBhcyBkZSAnKiciCisKKyM6IHJlbW90ZS5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgZG9lcyBub3QgbWF0Y2ggYW55IgorbXNnc3RyICIiCisibGUgc3DDqWNpZmljYXRldXIgZGUgcsOpZsOpcmVuY2Ugc291cmNlICVzIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW5lIHLDqWbDqXJlbmNlIgorCisjOiByZW1vdGUuYzoxMDA5CisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAiIgorImxlIHNww6ljaWZpY2F0ZXVyIGRlIHLDqWbDqXJlbmNlIHNvdXJjZSAlcyBjb3JyZXNwb25kIMOgIHBsdXMgZCd1bmUgcsOpZsOpcmVuY2UiCisKKyMuIFRSQU5TTEFUT1JTOiAibWF0Y2hlcyAnJXMnJSIgaXMgdGhlIDxkc3Q+IHBhcnQgb2YgImdpdCBwdXNoCisjLiA8cmVtb3RlPiA8c3JjPjo8ZHN0PiIgcHVzaCwgYW5kICJiZWluZyBwdXNoZWQgKCclcycpIiBpcworIy4gdGhlIDxzcmM+LgorIy4KKyM6IHJlbW90ZS5jOjEwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXN0aW5hdGlvbiB5b3UgcHJvdmlkZWQgaXMgbm90IGEgZnVsbCByZWZuYW1lIChpLmUuLFxuIgorInN0YXJ0aW5nIHdpdGggXCJyZWZzL1wiKS4gV2UgdHJpZWQgdG8gZ3Vlc3Mgd2hhdCB5b3UgbWVhbnQgYnk6XG4iCisiXG4iCisiLSBMb29raW5nIGZvciBhIHJlZiB0aGF0IG1hdGNoZXMgJyVzJyBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiLSBDaGVja2luZyBpZiB0aGUgPHNyYz4gYmVpbmcgcHVzaGVkICgnJXMnKVxuIgorIiAgaXMgYSByZWYgaW4gXCJyZWZzL3toZWFkcyx0YWdzfS9cIi4gSWYgc28gd2UgYWRkIGEgY29ycmVzcG9uZGluZ1xuIgorIiAgcmVmcy97aGVhZHMsdGFnc30vIHByZWZpeCBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiXG4iCisiTmVpdGhlciB3b3JrZWQsIHNvIHdlIGdhdmUgdXAuIFlvdSBtdXN0IGZ1bGx5IHF1YWxpZnkgdGhlIHJlZi4iCittc2dzdHIgIiIKKyJMYSBkZXN0aW5hdGlvbiBxdWUgdm91cyBhdmV6IGZvdXJuaWUgbidlc3QgcGFzIHVuIG5vbSBkZSByw6lmw6lyZW5jZSBjb21wbMOodGVcbiIKKyIoYydlc3Qtw6AtZGlyZSBjb21tZW7Dp2FudCBwYXIgXCJyZWYvXCIpLiBFc3NhaSBkJ2FwcHJveGltYXRpb24gcGFywqA6XG4iCisiXG4iCisiLSBSZWNoZXJjaGUgZCd1bmUgcsOpZsOpcmVuY2UgcXVpIGNvcnJlc3BvbmQgw6AgJyVzJyBzdXIgbGUgc2VydmV1ciBkaXN0YW50LlxuIgorIi0gVsOpcmlmaWNhdGlvbiBzaSBsYSA8c291cmNlPiBlbiBjb3VycyBkZSBwb3Vzc8OpZSAoJyVzJylcbiIKKyIgIGVzdCB1bmUgcsOpZsOpcmVuY2UgZGFucyBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBTaSBvdWksIGFqb3V0IGR1IHByw6lmaXhlXG4iCisiICByZWZzL3toZWFkcyx0YWdzfS8gY29ycmVzcG9uZGFudCBkdSBjw7R0w6kgZGlzdGFudC5cbiIKKyJcbiIKKyJBdWN1bmUgbidhIGZvbmN0aW9ubsOpLCBkb25jIGFiYW5kb24uIFZldWlsbGV6IHNww6ljaWZpZXIgdW5lIHLDqWbDqXJlbmNlICIKKyJ0b3RhbGVtZW50IHF1YWxpZmnDqWUuIgorCisjOiByZW1vdGUuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGNvbW1pdCBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL2hlYWRzLyVzJz8iCittc2dzdHIgIiIKKyJsYSBwYXJ0aWUgPHNvdXJjZT4gZHUgc3DDqWNpZmljYXRldXIgZGUgcsOpZsOpcmVuY2UgZXN0IHVuIG9iamV0IGNvbW1pdC5cbiIKKyJTb3VoYWl0aWV6LXZvdXMgY3LDqWVyIHVuZSBub3V2ZWxsZSBicmFuY2hlIGVuIHBvdXNzYW50IHN1clxuIgorIiclczpyZWZzL2hlYWRzLyVzJ8KgPyIKKworIzogcmVtb3RlLmM6MTA0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0YWcgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgdGFnIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyJsYSBwYXJ0aWUgPHNvdXJjZT4gZHUgc3DDqWNpZmljYXRldXIgZGUgcsOpZsOpcmVuY2UgZXN0IHVuIG9iamV0IMOpdGlxdWV0dGUuXG4iCisiU291aGFpdGllei12b3VzIGNyw6llciB1bmUgbm91dmVsbGUgw6l0aXF1ZXR0ZSBlbiBwb3Vzc2FudCBzdXJcbiIKKyInJXM6cmVmcy90YWdzLyVzJ8KgPyIKKworIzogcmVtb3RlLmM6MTA1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IHRyZWUgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorImxhIHBhcnRpZSA8c291cmNlPiBkdSBzcMOpY2lmaWNhdGV1ciBkZSByw6lmw6lyZW5jZSBlc3QgdW4gb2JqZXQgYXJicmUuXG4iCisiU291aGFpdGllei12b3VzIGNyw6llciB1biBub3V2ZWwgYXJicmUgZW4gcG91c3NhbnQgc3VyXG4iCisiJyVzOnJlZnMvdGFncy8lcyfCoD8iCisKKyM6IHJlbW90ZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgYmxvYiBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyBibG9iIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyJsYSBwYXJ0aWUgPHNvdXJjZT4gZHUgc3DDqWNpZmljYXRldXIgZGUgcsOpZsOpcmVuY2UgZXN0IHVuIG9iamV0IGJsb2IuXG4iCisiU291aGFpdGllei12b3VzIGNyw6llciB1biBub3V2ZWF1IGJsb2IgZW4gcG91c3NhbnQgc3VyXG4iCisiJyVzOnJlZnMvdGFncy8lcyfCoD8iCisKKyM6IHJlbW90ZS5jOjEwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGJyYW5jaCIKK21zZ3N0ciAiJyVzJyBuZSBwZXV0IHBhcyDDqnRyZSByw6lzb2x1ZSBjb21tZSB1bmUgYnJhbmNoZSIKKworIzogcmVtb3RlLmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVsZXRlICclcyc6IHJlbW90ZSByZWYgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgInN1cHByZXNzaW9uIGQgJyVzJyBpbXBvc3NpYmxlwqA6IGxhIHLDqWbDqXJlbmNlIGRpc3RhbnRlIG4nZXhpc3RlIHBhcyIKKworIzogcmVtb3RlLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgIiIKKyJsZSBzcMOpY2lmaWNhdGV1ciBkZSByw6lmw6lyZW5jZSBkc3QgJXMgY29ycmVzcG9uZCDDoCBwbHVzIGQndW4gc3DDqWNpZmljYXRldXIgZGUgIgorInLDqWbDqXJlbmNlcyIKKworIzogcmVtb3RlLmM6MTEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmICVzIHJlY2VpdmVzIGZyb20gbW9yZSB0aGFuIG9uZSBzcmMiCittc2dzdHIgImxlIHNww6ljaWZpY2F0ZXVyIGRlIHLDqWbDqXJlbmNlIGRzdCAlcyByZcOnb2l0IGRlcHVpcyBwbHVzIGQndW5lIHNvdXJjZSIKKworIzogcmVtb3RlLmM6MTYyOCByZW1vdGUuYzoxNzI5Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBRCBuZSBwb2ludGUgcGFzIHN1ciB1bmUgYnJhbmNoZSIKKworIzogcmVtb3RlLmM6MTYzNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAicGFzIGRlIGJyYW5jaGUgJyVzJyIKKworIzogcmVtb3RlLmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAiYXVjdW5lIGJyYW5jaGUgYW1vbnQgY29uZmlndXLDqWUgcG91ciBsYSBicmFuY2hlICclcyciCisKKyM6IHJlbW90ZS5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgImxhIGJyYW5jaGUgYW1vbnQgJyVzJyBuJ2VzdCBwYXMgc3RvY2vDqWUgY29tbWUgYnJhbmNoZSBkZSBzdWl2aSIKKworIzogcmVtb3RlLmM6MTY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIGRlc3RpbmF0aW9uICclcycgb24gcmVtb3RlICclcycgaGFzIG5vIGxvY2FsIHRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorImxhIGRlc3RpbmF0aW9uIGRlIHBvdXNzw6llICclcycgc3VyIGxlIHNlcnZldXIgZGlzdGFudCAnJXMnIG4nYSBwYXMgZGUgIgorImJyYW5jaGUgbG9jYWxlIGRlIHN1aXZpIgorCisjOiByZW1vdGUuYzoxNjczCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciCittc2dzdHIgImxhIGJyYW5jaGUgJyVzJyBuJ2EgYXVjdW5lIGJyYW5jaGUgZGlzdGFudGUgZGUgcG91c3PDqWUiCisKKyM6IHJlbW90ZS5jOjE2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICJsZXMgcsOpZsOpcmVuY2VzIGRlIHNwZWMgcG91ciAnJXMnIG4naW5jbHVlbnQgcGFzICclcyciCisKKyM6IHJlbW90ZS5jOjE2OTYKK21zZ2lkICJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiCittc2dzdHIgImxhIHBvdXNzw6llIG4nYSBwYXMgZGUgZGVzdGluYXRpb24gKHB1c2guZGVmYXVsdCB2YXV0ICdub3RoaW5nJykiCisKKyM6IHJlbW90ZS5jOjE3MTgKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSAnc2ltcGxlJyBwdXNoIHRvIGEgc2luZ2xlIGRlc3RpbmF0aW9uIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgdW5lIHBvdXNzw6llICdzaW1wbGUnIHBvdXIgdW5lIGRlc3RpbmF0aW9uIHVuaXF1ZSIKKworIzogcmVtb3RlLmM6MTg0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgdHJvdXZlciBsYSByw6lmw6lyZW5jZSBkaXN0YW50ZSAlcyIKKworIzogcmVtb3RlLmM6MTg1NworIywgYy1mb3JtYXQKK21zZ2lkICIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiCittc2dzdHIgIiogUsOpZsOpcmVuY2UgYml6YXJyZSAnJXMnIGlnbm9yw6llIGxvY2FsZW1lbnQiCisKKyM6IHJlbW90ZS5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICJWb3RyZSBicmFuY2hlIGVzdCBiYXPDqWUgc3VyICclcycsIG1haXMgbGEgYnJhbmNoZSBhbW9udCBhIGRpc3BhcnUuXG4iCisKKyM6IHJlbW90ZS5jOjIwMjQKK21zZ2lkICIgICh1c2UgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB0byBmaXh1cClcbiIKK21zZ3N0ciAiICAodXRpbGlzZXogXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiBwb3VyIGNvcnJpZ2VyKVxuIgorCisjOiByZW1vdGUuYzoyMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIHVwIHRvIGRhdGUgd2l0aCAnJXMnLlxuIgorbXNnc3RyICJWb3RyZSBicmFuY2hlIGVzdCDDoCBqb3VyIGF2ZWMgJyVzJy5cbiIKKworIzogcmVtb3RlLmM6MjAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBhbmQgJyVzJyByZWZlciB0byBkaWZmZXJlbnQgY29tbWl0cy5cbiIKK21zZ3N0ciAiVm90cmUgYnJhbmNoZSBldCAnJXMnIGZvbnQgcsOpZsOpcmVuY2Ugw6AgZGVzIGNvbW1pdHMgZGlmZsOpcmVudHMuXG4iCisKKyM6IHJlbW90ZS5jOjIwMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiJXNcIiBmb3IgZGV0YWlscylcbiIKK21zZ3N0ciAiICAodXRpbGlzZXogXCIlc1wiIHBvdXIgcGx1cyBkZSBkw6l0YWlscylcbiIKKworIzogcmVtb3RlLmM6MjAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICJWb3RyZSBicmFuY2hlIGVzdCBlbiBhdmFuY2Ugc3VyICclcycgZGUgJWQgY29tbWl0LlxuIgorbXNnc3RyWzFdICJWb3RyZSBicmFuY2hlIGVzdCBlbiBhdmFuY2Ugc3VyICclcycgZGUgJWQgY29tbWl0cy5cbiIKKworIzogcmVtb3RlLmM6MjA0NAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IHB1c2hcIiBwb3VyIHB1YmxpZXIgdm9zIGNvbW1pdHMgbG9jYXV4KVxuIgorCisjOiByZW1vdGUuYzoyMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKKyJWb3RyZSBicmFuY2hlIGVzdCBlbiByZXRhcmQgc3VyICclcycgZGUgJWQgY29tbWl0LCBldCBwZXV0IMOqdHJlIG1pc2Ugw6Agam91ciAiCisiZW4gYXZhbmNlIHJhcGlkZS5cbiIKK21zZ3N0clsxXSAiIgorIlZvdHJlIGJyYW5jaGUgZXN0IGVuIHJldGFyZCBzdXIgJyVzJyBkZSAlZCBjb21taXRzLCBldCBwZXV0IMOqdHJlIG1pc2Ugw6Agam91ciAiCisiZW4gYXZhbmNlIHJhcGlkZS5cbiIKKworIzogcmVtb3RlLmM6MjA1NQorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gdXBkYXRlIHlvdXIgbG9jYWwgYnJhbmNoKVxuIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCBwdWxsXCIgcG91ciBtZXR0cmUgw6Agam91ciB2b3RyZSBicmFuY2hlIGxvY2FsZSlcbiIKKworIzogcmVtb3RlLmM6MjA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKKyJWb3RyZSBicmFuY2hlIGV0ICclcycgb250IGRpdmVyZ8OpLFxuIgorImV0IG9udCAlZCBldCAlZCBjb21taXQgZGlmZsOpcmVudCBjaGFjdW5lIHJlc3BlY3RpdmVtZW50LlxuIgorbXNnc3RyWzFdICIiCisiVm90cmUgYnJhbmNoZSBldCAnJXMnIG9udCBkaXZlcmfDqSxcbiIKKyJldCBvbnQgJWQgZXQgJWQgY29tbWl0cyBkaWZmw6lyZW50cyBjaGFjdW5lIHJlc3BlY3RpdmVtZW50LlxuIgorCisjOiByZW1vdGUuYzoyMDY4Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIiCisiICAodXRpbGlzZXogXCJnaXQgcHVsbFwiIHBvdXIgZnVzaW9ubmVyIGxhIGJyYW5jaGUgZGlzdGFudGUgZGFucyBsYSB2w7R0cmUpXG4iCisKKyM6IHJlbW90ZS5jOjIyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGV4cGVjdGVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsZSBub20gYXR0ZW5kdSBkJ29iamV0ICclcyciCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcGxhY2UgcmVmIG5hbWU6ICVzIgorbXNnc3RyICJtYXV2YWlzZSByw6lmw6lyZW5jZXMgZGUgcmVtcGxhY2VtZW50IDogJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAicsOpZsOpcmVuY2UgZGUgcmVtcGxhY2VtZW50IGR1cGxpcXXDqWXCoDogJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSBkZXB0aCB0b28gaGlnaCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICJwcm9mb25kZXVyIGRlIHJlbXBsYWNlbWVudCB0cm9wIGdyYW5kZSBwb3VyIGwnb2JqZXQgJXMiCisKKyM6IHJlcmVyZS5jOjIxNyByZXJlcmUuYzoyMjYgcmVyZXJlLmM6MjI5Cittc2dpZCAiY29ycnVwdCBNRVJHRV9SUiIKK21zZ3N0ciAiTUVSR0VfUlIgY29ycm9tcHUiCisKKyM6IHJlcmVyZS5jOjI2NCByZXJlcmUuYzoyNjkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVyZXJlIHJlY29yZCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbCdlbnJlZ2lzdHJlbWVudCByZXJlcmUiCisKKyM6IHJlcmVyZS5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICclcycgKCVzKSIKK21zZ3N0ciAiaWwgeSBhIGV1IGRlcyBlcnJldXJzIMOgIGwnw6ljcml0dXJlIGRlICclcycgKCVzKSIKKworIzogcmVyZXJlLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmbHVzaCAnJXMnIgorbXNnc3RyICLDqWNoZWMgZHUgZmx1c2ggZGUgJyVzJyIKKworIzogcmVyZXJlLmM6NTAzIHJlcmVyZS5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbmZsaWN0IGh1bmtzIGluICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsYSBzZWN0aW9uIGVuIGNvbmZsaXQgZGFucyAnJXMnIgorCisjOiByZXJlcmUuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIHV0aW1lKCkgc3VyICclcyciCisKKyM6IHJlcmVyZS5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cml0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbCfDqWNyaXR1cmUgZGUgJyVzJyIKKworIzogcmVyZXJlLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICInJXMnIGluZGV4w6kgZW4gdXRpbGlzYW50IGxhIHLDqXNvbHV0aW9uIHByw6ktZXhpc3RhbnRlLiIKKworIzogcmVyZXJlLmM6NzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHJlc29sdXRpb24gZm9yICclcycuIgorbXNnc3RyICJSw6lzb2x1dGlvbiBlbnJlZ2lzdHLDqWUgcG91ciAnJXMnLiIKKworIzogcmVyZXJlLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc29sdmVkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIiclcycgcsOpc29sdSBlbiB1dGlsaXNhbnQgbGEgcsOpc29sdXRpb24gcHLDqS1leGlzdGFudGUuIgorCisjOiByZXJlcmUuYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayBzdHJheSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqWxpZXIgJyVzJyBxdWkgZXN0IGVycmFudCIKKworIzogcmVyZXJlLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICJQcsOpLWltYWdlIGVucmVnaXN0csOpZSBwb3VyICclcyciCisKKyM6IHJlcmVyZS5jOjg4MSBzdWJtb2R1bGUuYzoyMDc4IGJ1aWx0aW4vbG9nLmM6MTg3MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgbGUgcsOpcGVydG9pcmUgJyVzJyIKKworIzogcmVyZXJlLmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIGNvbmZsaWN0ZWQgc3RhdGUgaW4gJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIG1pc2Ugw6Agam91ciBkZSBsJ8OpdGF0IGVuIGNvbmZsaXQgZGFucyAnJXMnIgorCisjOiByZXJlcmUuYzoxMDY4IHJlcmVyZS5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIgorbXNnc3RyICJBdWN1bmUgcsOpc29sdXRpb24gZW5yZWdpc3Ryw6llIHBvdXIgJyVzJyIKKworIzogcmVyZXJlLmM6MTA3NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpbGllciAnJXMnIgorCisjOiByZXJlcmUuYzoxMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIlByw6ktaW1hZ2UgbWlzZSDDoCBqb3VyIHBvdXIgJyVzJyIKKworIzogcmVyZXJlLmM6MTA5NgorIywgYy1mb3JtYXQKK21zZ2lkICJGb3Jnb3QgcmVzb2x1dGlvbiBmb3IgJyVzJ1xuIgorbXNnc3RyICJSw6lzb2x1dGlvbiAgcG91ciAnJXMnIG91Ymxpw6llXG4iCisKKyM6IHJlcmVyZS5jOjExOTkKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiByci1jYWNoZSBkaXJlY3RvcnkiCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgbGUgcsOpcGVydG9pcmUgcnItY2FjaGUiCisKKyM6IHJldmlzaW9uLmM6MjQ5NworbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgInZvdHJlIGJyYW5jaGUgYWN0dWVsbGUgc2VtYmxlIGNhc3PDqWUiCisKKyM6IHJldmlzaW9uLmM6MjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycgZG9lcyBub3QgaGF2ZSBhbnkgY29tbWl0cyB5ZXQiCittc2dzdHIgInZvdHJlIGJyYW5jaGUgYWN0dWVsbGUgJyVzJyBuZSBjb250aWVudCBlbmNvcmUgYXVjdW4gY29tbWl0IgorCisjOiByZXZpc2lvbi5jOjI3MDgKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAiLS1maXJzdC1wYXJlbnQgZXN0IGluY29tcGF0aWJsZSBhdmVjIC0tYmlzZWN0IgorCisjOiByZXZpc2lvbi5jOjI3MTIKK21zZ2lkICItTCBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBkaWZmIGZvcm1hdHMgYmVzaWRlcyAtcCBhbmQgLXMiCittc2dzdHIgIi1MIG5lIHN1cHBvcnRlIHBhcyBlbmNvcmUgbGVzIGZvcm1hdHMgZGUgZGlmZiBhdXRyZXMgcXVlIC1wIGV0IC1zIgorCisjOiBydW4tY29tbWFuZC5jOjc2MworbXNnaWQgIm9wZW4gL2Rldi9udWxsIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnb3V2ZXJ0dXJlIGRlIC9kZXYvbnVsbCIKKworIzogcnVuLWNvbW1hbmQuYzoxMjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYXN5bmMgdGhyZWFkOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgdW4gZmlsIGFzeW5jaHJvbmUgOiAlcyIKKworIzogcnVuLWNvbW1hbmQuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJyVzJyBob29rIHdhcyBpZ25vcmVkIGJlY2F1c2UgaXQncyBub3Qgc2V0IGFzIGV4ZWN1dGFibGUuXG4iCisiWW91IGNhbiBkaXNhYmxlIHRoaXMgd2FybmluZyB3aXRoIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAuIgorbXNnc3RyICIiCisiTGUgY3JvY2hldCAnJXMnIGEgw6l0w6kgaWdub3LDqSBwYXJjZSBxdSdpbCBuJ2VzdCBwYXMgbWFycXXDqSBjb21tZSBleMOpY3V0YWJsZS5cbiIKKyJWb3VzIHBvdXZleiBkw6lzYWN0aXZlciBjZXQgYXZlcnRpc3NlbWVudCBhdmVjIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayAiCisiZmFsc2VgLiIKKworIzogc2VuZC1wYWNrLmM6MTQ0Cittc2dpZCAidW5leHBlY3RlZCBmbHVzaCBwYWNrZXQgd2hpbGUgcmVhZGluZyByZW1vdGUgdW5wYWNrIHN0YXR1cyIKK21zZ3N0ciAiIgorInBhcXVldCBkZSBuZXR0b3lhZ2UgaW5hdHRlbmR1IHBlbmRhbnQgbGEgbGVjdHVyZSBkZSBsJ8OpdGF0IGRlIGTDqXBhcXVldGFnZSAiCisiZGlzdGFudCIKKworIzogc2VuZC1wYWNrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSByZW1vdGUgdW5wYWNrIHN0YXR1czogJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsJ8OpdGF0IGRlIGTDqXBhcXVldGFnZSBkaXN0YW50wqA6ICVzIgorCisjOiBzZW5kLXBhY2suYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIHVucGFjayBmYWlsZWQ6ICVzIgorbXNnc3RyICJsZSBkw6lwYXF1ZXRhZ2UgYSDDqWNob3XDqcKgOiAlcyIKKworIzogc2VuZC1wYWNrLmM6MzA5Cittc2dpZCAiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiCittc2dzdHIgImltcG9zc2libGUgZGUgc2lnbmVyIGxlIGNlcnRpZmljYXQgZGUgcG91c3PDqWUiCisKKyM6IHNlbmQtcGFjay5jOjQyMworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAiTGUgcmVjZXZldXIgbmUgZ8OocmUgcGFzIGxlcyBwb3Vzc8OpZXMgYXZlYyAtLXNpZ25lZCIKKworIzogc2VuZC1wYWNrLmM6NDI1Cittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tIgorInNpZ25lZCBwdXNoIgorbXNnc3RyICIiCisicGFzIGQnZW52b2kgZGUgY2VydGlmaWNhdCBkZSBwb3Vzc8OpZSBjYXIgbGUgcmVjZXZldXIgbmUgZ8OocmUgcGFzIGxlcyAiCisicG91c3PDqWVzIGF2ZWMgLS1zaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQzNworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMgcHVzaCIKK21zZ3N0ciAiTGUgcmVjZXZldXIgbmUgZ8OocmUgcGFzIGxlcyBwb3Vzc8OpZXMgYXZlYyAtLWF0b21pYyIKKworIzogc2VuZC1wYWNrLmM6NDQyCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBwdXNoIG9wdGlvbnMiCittc2dzdHIgIkxlIHJlY2V2ZXVyIG5lIGfDqHJlIHBhcyBsZXMgb3B0aW9ucyBkZSBwb3Vzc8OpZXMiCisKKyM6IHNlcXVlbmNlci5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSAnJXMnIgorbXNnc3RyICJtb2RlIGRlIG5ldHRveWFnZSBpbnZhbGlkZSBkZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24gJyVzJyIKKworIzogc2VxdWVuY2VyLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzE1IGJ1aWx0aW4vcmViYXNlLmM6Nzg1IGJ1aWx0aW4vcmViYXNlLmM6MTc1MCBidWlsdGluL3JtLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzI1Cittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICJyZXZlcnQiCisKKyM6IHNlcXVlbmNlci5jOjMyNworbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICJjaGVycnktcGljayIKKworIzogc2VxdWVuY2VyLmM6MzI5Cittc2dpZCAicmViYXNlIgorbXNnc3RyICJyZWJhc2UiCisKKyM6IHNlcXVlbmNlci5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGFjdGlvbjogJWQiCittc2dzdHIgImFjdGlvbiBpbmNvbm51ZcKgOiAlZCIKKworIzogc2VxdWVuY2VyLmM6Mzg5Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKyJhcHLDqHMgcsOpc29sdXRpb24gZGVzIGNvbmZsaXRzLCBtYXJxdWV6IGxlcyBjaGVtaW5zIGNvcnJpZ8Opc1xuIgorImF2ZWMgJ2dpdCBhZGQgPGNoZW1pbnM+JyBvdSAnZ2l0IHJtIDxjaGVtaW5zPiciCisKKyM6IHNlcXVlbmNlci5jOjM5MgorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisiYXByw6hzIHLDqXNvbHV0aW9uIGRlcyBjb25mbGl0cywgbWFycXVleiBsZXMgY2hlbWlucyBjb3JyaWfDqXNcbiIKKyJhdmVjICdnaXQgYWRkIDxjaGVtaW5zPicgb3UgJ2dpdCBybSA8Y2hlbWlucz4nXG4iCisicHVpcyB2YWxpZGV6IGxlIHLDqXN1bHRhdCBhdmVjICdnaXQgY29tbWl0JyIKKworIzogc2VxdWVuY2VyLmM6NDA1IHNlcXVlbmNlci5jOjI5MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB2ZXJyb3VpbGxlciAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGVvbCB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsYSBmaW4gZGUgbGlnbmUgZGFucyAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTcgc2VxdWVuY2VyLmM6MjcwNiBzZXF1ZW5jZXIuYzoyOTA3IHNlcXVlbmNlci5jOjI5MjEKKyM6IHNlcXVlbmNlci5jOjMxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcyciCittc2dzdHIgIsOpY2hlYyBsb3JzIGRlIGxhIGZpbmFsaXNhdGlvbiBkZSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0NDAgc2VxdWVuY2VyLmM6MTYxMyBzZXF1ZW5jZXIuYzoyNzI2IHNlcXVlbmNlci5jOjMxNjcKKyM6IHNlcXVlbmNlci5jOjMyNzYgYnVpbHRpbi9hbS5jOjI0OSBidWlsdGluL2NvbW1pdC5jOjc4NyBidWlsdGluL21lcmdlLmM6MTEyMAorIzogYnVpbHRpbi9yZWJhc2UuYzo1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXMuIgorbXNnc3RyICJ2b3MgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIHNlcmFpZW50IMOpY3Jhc8OpZXMgcGFyICVzLiIKKworIzogc2VxdWVuY2VyLmM6NDcwCittc2dpZCAiY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICJ2YWxpZGV6IHZvcyBtb2RpZmljYXRpb25zIG91IGxlcyByZW1pc2VyIHBvdXIgY29udGludWVyLiIKKworIzogc2VxdWVuY2VyLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiVzwqA6IGF2YW5jZSByYXBpZGUiCisKKyM6IHNlcXVlbmNlci5jOjU0MSBidWlsdGluL3RhZy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiTW9kZSBkZSBuZXR0b3lhZ2UgaW52YWxpZGUgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiLCAiY2hlcnJ5LXBpY2siIG9yCisjLiAicmViYXNlIi4KKyMuCisjOiBzZXF1ZW5jZXIuYzo2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IEltcG9zc2libGUgZCfDqWNyaXJlIGxlIG5vdXZlYXUgZmljaGllciBpbmRleCIKKworIzogc2VxdWVuY2VyLmM6NjUyCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIG1ldHRyZSDDoCBqb3VyIGwnYXJicmUgZGUgY2FjaGUiCisKKyM6IHNlcXVlbmNlci5jOjY2NgorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSBsZSBjb21taXQgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGtleSBwcmVzZW50IGluICclLipzJyIKK21zZ3N0ciAiYXVjdW5lIGNsw6kgcHLDqXNlbnRlIGRhbnMgJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlcXVvdGUgdmFsdWUgb2YgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6ljb3RlciBsYSB2YWxldXIgZGUgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6Nzk0IHdyYXBwZXIuYzoxOTAgd3JhcHBlci5jOjM2MCBidWlsdGluL2FtLmM6NzEwCisjOiBidWlsdGluL2FtLmM6ODAyIGJ1aWx0aW4vbWVyZ2UuYzoxMTE3IGJ1aWx0aW4vcmViYXNlLmM6MTA3MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyICclcycgZW4gbGVjdHVyZSIKKworIzogc2VxdWVuY2VyLmM6ODA0Cittc2dpZCAiJ0dJVF9BVVRIT1JfTkFNRScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfTkFNRScgZMOpasOgIGZvdXJuaSIKKworIzogc2VxdWVuY2VyLmM6ODA5Cittc2dpZCAiJ0dJVF9BVVRIT1JfRU1BSUwnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIidHSVRfQVVUSE9SX0VNQUlMJyBkw6lqw6AgZm91cm5pIgorCisjOiBzZXF1ZW5jZXIuYzo4MTQKK21zZ2lkICInR0lUX0FVVEhPUl9EQVRFJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICInR0lUX0FVVEhPUl9EQVRFJyBkw6lqw6AgZm91cm5pIgorCisjOiBzZXF1ZW5jZXIuYzo4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YXJpYWJsZSAnJXMnIgorbXNnc3RyICJ2YXJpYWJsZSBpbmNvbm51ZSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo4MjMKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX05BTUUnIgorbXNnc3RyICInR0lUX0FVVEhPUl9OQU1FJyBtYW5xdWFudCIKKworIzogc2VxdWVuY2VyLmM6ODI1Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9FTUFJTCciCittc2dzdHIgIidHSVRfQVVUSE9SX0VNQUlMJyBtYW5xdWFudCIKKworIzogc2VxdWVuY2VyLmM6ODI3Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9EQVRFJyIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfREFURScgbWFucXVhbnQiCisKKyM6IHNlcXVlbmNlci5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWVcbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZSBzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisiVm91cyBhdmV6IGRlcyBtb2RpZmljYXRpb25zIGluZGV4w6llcyBkYW5zIHZvdHJlIGNvcGllIGRlIHRyYXZhaWwuXG4iCisiU2kgZWxsZXMgZGV2YWllbnQgw6p0cmUgYWpvdXTDqWVzIGRhbnMgbGUgY29tbWl0IHByw6ljw6lkZW50LCBsYW5jZXrCoDpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIlNpIGVsbGVzIGRldmFpZW50IGFsbGVyIGRhbnMgdW4gbm91dmVhdSBjb21taXQsIGxhbmNlesKgOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIkRhbnMgbGVzIGRldXggY2FzLCB1bmUgZm9pcyBmaW5pLCBjb250aW51ZXogYXZlY8KgOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjExNDgKK21zZ2lkICIncHJlcGFyZS1jb21taXQtbXNnJyBob29rIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGR1IGNyb2NoZXQgJ3ByZXBhcmUtY29tbWl0LW1zZyciCisKKyM6IHNlcXVlbmNlci5jOjExNTQKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5LiBSdW4gdGhlXG4iCisiZm9sbG93aW5nIGNvbW1hbmQgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHlvdXIgZWRpdG9yIHRvIGVkaXRcbiIKKyJ5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyJWb3RyZSBub20gZXQgdm90cmUgYWRyZXNzZSBjb3VycmllbCBvbnQgw6l0w6kgY29uZmlndXLDqXMgYXV0b21hdGlxdWVtZW50IGVuICIKKyJzZVxuIgorImZvbmRhbnQgc3VyIHZvdHJlIG5vbSBkJ3V0aWxpc2F0ZXVyIGV0IGxlIG5vbSBkZSB2b3RyZSBtYWNoaW5lLiBWZXVpbGxleiBcbiIKKyJ2w6lyaWZpZXIgcXUnaWxzIHNvbnQgY29ycmVjdHMuIFZvdXMgcG91dmV6IHN1cHByaW1lciBjZSBtZXNzYWdlIGVuIGxlcyBcbiIKKyJwYXJhbcOpdHJhbnQgZXhwbGljaXRlbWVudC4gTGFuY2V6IGxlcyBjb21tYW5kZXMgc3VpdmFudGVzIGV0IHN1aXZleiBsZXNcbiIKKyJpbnN0cnVjdGlvbnMgZGFucyB2b3RyZSDDqWRpdGV1ciBwb3VyIMOpZGl0ZXIgdm90cmUgZmljaGllciBkZSAiCisiY29uZmlndXJhdGlvbsKgOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFwcsOocyBjZWNpLCB2b3VzIHBvdXZleiBjb3JyaWdlciBsJ2lkZW50aXTDqSB1dGlsaXPDqWUgcG91ciBjZXR0ZSB2YWxpZGF0aW9uICIKKyJhdmVjIDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjExNjcKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyJWb3RyZSBub20gZXQgdm90cmUgYWRyZXNzZSBjb3VycmllbCBvbnQgw6l0w6kgY29uZmlndXLDqXMgYXV0b21hdGlxdWVtZW50IGVuIHNlICIKKyJmb25kYW50XG4iCisic3VyIHZvdHJlIG5vbSBkJ3V0aWxpc2F0ZXVyIGV0IGxlIG5vbSBkZSB2b3RyZSBtYWNoaW5lLiBWZXVpbGxleiB2w6lyaWZpZXIgIgorInF1J2lscyBzb250IGNvcnJlY3RzLlxuIgorIlZvdXMgcG91dmV6IHN1cHByaW1lciBjZSBtZXNzYWdlIGVuIGxlcyBwYXJhbcOpdHJhbnQgZXhwbGljaXRlbWVudCA6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiVm90cmUgTm9tXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHZvdXNAZXhlbXBsZS5jb21cbiIKKyJcbiIKKyJBcHLDqHMgY2VjaSwgdm91cyBwb3V2ZXogY29ycmlnZXIgbCdpZGVudGl0w6kgdXRpbGlzw6llIHBvdXIgY2UgY29tbWl0IGF2ZWMgOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTIwOQorbXNnaWQgImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgImltcG9zc2libGUgZGUgcmV0cm91dmVyIGxlIGNvbW1pdCBub3V2ZWxsZW1lbnQgY3LDqcOpIgorCisjOiBzZXF1ZW5jZXIuYzoxMjExCittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgY29tbWl0IG5vdXZlbGxlbWVudCBjcsOpw6kiCisKKyM6IHNlcXVlbmNlci5jOjEyNTcKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBIRUFEIGFmdGVyIGNyZWF0aW5nIGNvbW1pdCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgSEVBRCBhcHLDqHMgY3LDqWF0aW9uIGR1IGNvbW1pdCIKKworIzogc2VxdWVuY2VyLmM6MTI1OQorbXNnaWQgImRldGFjaGVkIEhFQUQiCittc2dzdHIgIkhFQUQgZMOpdGFjaMOpZSIKKworIzogc2VxdWVuY2VyLmM6MTI2MworbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIgKGNvbW1pdCByYWNpbmUpIgorCisjOiBzZXF1ZW5jZXIuYzoxMjg0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxMjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiSEVBRCAlcyBuJ2VzdCBwYXMgdW4gY29tbWl0ICEiCisKKyM6IHNlcXVlbmNlci5jOjEyOTAgc2VxdWVuY2VyLmM6MTM2NCBidWlsdGluL2NvbW1pdC5jOjE1NzQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsZSBjb21taXQgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTM0MiBzZXF1ZW5jZXIuYzoxOTY4Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCBhdXRob3IiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsJ2F1dGV1ciBkdSBjb21taXQiCisKKyM6IHNlcXVlbmNlci5jOjEzNTMgYnVpbHRpbi9hbS5jOjE1NjYgYnVpbHRpbi9tZXJnZS5jOjY4NworbXNnaWQgImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiCittc2dzdHIgImdpdCB3cml0ZS10cmVlIGEgw6ljaG91w6kgw6Agw6ljcmlyZSB1biBhcmJyZSIKKworIzogc2VxdWVuY2VyLmM6MTM4NiBzZXF1ZW5jZXIuYzoxNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbW1pdCBtZXNzYWdlIGZyb20gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiBkZSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxNDEzIGJ1aWx0aW4vYW0uYzoxNTg4IGJ1aWx0aW4vY29tbWl0LmM6MTY3MyBidWlsdGluL21lcmdlLmM6ODg2CisjOiBidWlsdGluL21lcmdlLmM6OTExCittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgIsOpY2hlYyBkZSBsJ8OpY3JpdHVyZSBkZSBsJ29iamV0IGNvbW1pdCIKKworIzogc2VxdWVuY2VyLmM6MTQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgY29tbWl0ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgY29tbWl0IHBhcmVudCAlcyIKKworIzogc2VxdWVuY2VyLmM6MTU2MiBzZXF1ZW5jZXIuYzoxNjczCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZDogJWQiCittc2dzdHIgImNvbW1hbmRlIGluY29ubnVlwqA6ICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxNjIwIHNlcXVlbmNlci5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICVkIGNvbW1pdHMuIgorbXNnc3RyICJDZWNpIGVzdCBsYSBjb21iaW5haXNvbiBkZSAlZCBjb21taXRzLiIKKworIzogc2VxdWVuY2VyLmM6MTYzMAorbXNnaWQgIm5lZWQgYSBIRUFEIHRvIGZpeHVwIgorbXNnc3RyICJ1bmUgSEVBRCBlc3QgbsOpY2Vzc2FpcmUgw6AgbGEgY29ycmVjdGlvbiIKKworIzogc2VxdWVuY2VyLmM6MTYzMiBzZXF1ZW5jZXIuYzozMjEyCittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsaXJlIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE2MzQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEJ3MgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24gZGUgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTY0NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk2Cittc2dpZCAiVGhpcyBpcyB0aGUgMXN0IGNvbW1pdCBtZXNzYWdlOiIKK21zZ3N0ciAiQ2VjaSBlc3QgbGUgcHJlbWllciBtZXNzYWdlIGRlIHZhbGlkYXRpb27CoDoiCisKKyM6IHNlcXVlbmNlci5jOjE2NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2Ugb2YgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24gZGUgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyVkOiIKK21zZ3N0ciAiQ2VjaSBlc3QgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIG51bcOpcm8gJWTCoDoiCisKKyM6IHNlcXVlbmNlci5jOjE2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJMZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24gJWQgc2VyYSBpZ25vcsOpwqA6IgorCisjOiBzZXF1ZW5jZXIuYzoxNzU2Cittc2dpZCAieW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAidm90cmUgZmljaGllciBkJ2luZGV4IG4nZXN0IHBhcyBmdXNpb25uw6kuIgorCisjOiBzZXF1ZW5jZXIuYzoxNzYzCittc2dpZCAiY2Fubm90IGZpeHVwIHJvb3QgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqXBhcmVyIGxlIGNvbW1pdCByYWNpbmUiCisKKyM6IHNlcXVlbmNlci5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICJsZSBjb21taXQgJXMgZXN0IHVuZSBmdXNpb24gbWFpcyBsJ29wdGlvbiAtbSBuJ2EgcGFzIMOpdMOpIHNww6ljaWZpw6llLiIKKworIzogc2VxdWVuY2VyLmM6MTc5MCBzZXF1ZW5jZXIuYzoxNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAibGUgY29tbWl0ICVzIG4nYSBwYXMgZGUgcGFyZW50ICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxODA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb2J0ZW5pciB1biBtZXNzYWdlIGRlIHZhbGlkYXRpb24gcG91ciAlcyIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlIGEgInRvZG8iIGNvbW1hbmQgbGlrZQorIy4gInJldmVydCIgb3IgInBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMS4KKyM6IHNlcXVlbmNlci5jOjE4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIlcyA6IGltcG9zc2libGUgZCdhbmFseXNlciBsZSBjb21taXQgcGFyZW50ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgJyVzJyB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHJlbm9tbWVyICclcycgZW4gJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTk0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5udWxlciAlcy4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6MTk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhcHBsaXF1ZXIgJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHJvcHBpbmcgJXMgJXMgLS0gcGF0Y2ggY29udGVudHMgYWxyZWFkeSB1cHN0cmVhbVxuIgorbXNnc3RyICJhYmFuZG9uIGRlICVzICVzIC0tIGxlIGNvbnRlbnUgZGUgbGEgcnVzdGluZSBkw6lqw6AgZW4gYW1vbnRcbiIKKworIzogc2VxdWVuY2VyLmM6MjAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzIDogw6ljaGVjIMOgIGxhIGxlY3R1cmUgZGUgbCdpbmRleCIKKworIzogc2VxdWVuY2VyLmM6MjAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzIDogw6ljaGVjIGR1IHJhZnJhw65jaGlzc2VtZW50IGRlIGwnaW5kZXgiCisKKyM6IHNlcXVlbmNlci5jOjIxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgYWNjZXB0IGFyZ3VtZW50czogJyVzJyIKK21zZ3N0ciAiJXMgbidhY2NlcHRlIHBhcyBkJ2FyZ3VtZW50wqA6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjIxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhcmd1bWVudHMgZm9yICVzIgorbXNnc3RyICJhcmd1bWVudCBtYW5xdWFudCBwb3VyICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgImxpZ25lICVkIGludmFsaWRlwqA6ICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjIyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyBpbXBvc3NpYmxlIGF2ZWMgbGUgY29tbWl0IHByw6ljw6lkZW50IgorCisjOiBzZXF1ZW5jZXIuYzoyMjk4Cittc2dpZCAiY2FuY2VsbGluZyBhIGNoZXJyeSBwaWNraW5nIGluIHByb2dyZXNzIgorbXNnc3RyICJhbm51bGF0aW9uIGQndW4gcGljb3JhZ2UgZW4gY291cnMiCisKKyM6IHNlcXVlbmNlci5jOjIzMDUKK21zZ2lkICJjYW5jZWxsaW5nIGEgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJhbm51bGF0aW9uIGQndW4gcmV0b3VyIGVuIGNvdXJzIgorCisjOiBzZXF1ZW5jZXIuYzoyMzQ5Cittc2dpZCAicGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgInZldWlsbGV6IGNvcnJpZ2VyIGNlY2kgZW4gdXRpbGlzYW50ICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCisKKyM6IHNlcXVlbmNlci5jOjIzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICclcyciCittc2dzdHIgImZldWlsbGUgZCdpbnN0cnVjdGlvbiBpbnV0aWxpc2FibGXCoDogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjM1NgorbXNnaWQgIm5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAiYXVjdW4gY29tbWl0IGFuYWx5c8OpLiIKKworIzogc2VxdWVuY2VyLmM6MjM2NworbXNnaWQgImNhbm5vdCBjaGVycnktcGljayBkdXJpbmcgYSByZXZlcnQuIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHBpY29yZXIgcGVuZGFudCBsJ2FubnVsYXRpb24gZCd1biBjb21taXQuIgorCisjOiBzZXF1ZW5jZXIuYzoyMzY5Cittc2dpZCAiY2Fubm90IHJldmVydCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgImltcG9zc2libGUgZCdhbm51bGVyIHVuIGNvbW1pdCBwZW5kYW50IHVuIHBpY29yYWdlLiIKKworIzogc2VxdWVuY2VyLmM6MjQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgInZhbGV1ciBpbnZhbGlkZSBwb3VyICVzwqA6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyNTQwCittc2dpZCAidW51c2FibGUgc3F1YXNoLW9udG8iCittc2dzdHIgIlwiw6ljcmFzZS1zdXJcIiBpbnV0aWxpc2FibGUiCisKKyM6IHNlcXVlbmNlci5jOjI1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICclcyciCittc2dzdHIgImZldWlsbGUgZCdvcHRpb25zIG1hbGZvcm3DqWXCoDogJXMiCisKKyM6IHNlcXVlbmNlci5jOjI2NDQgc2VxdWVuY2VyLmM6NDM2MQorbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICJsJ2Vuc2VtYmxlIGRlIGNvbW1pdHMgc3DDqWNpZmnDqSBlc3QgdmlkZSIKKworIzogc2VxdWVuY2VyLmM6MjY2MAorbXNnaWQgInJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJ1biByZXRvdXIgZXN0IGTDqWrDoCBlbiBjb3VycyIKKworIzogc2VxdWVuY2VyLmM6MjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnkgXCJnaXQgcmV2ZXJ0ICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICJlc3NheWV6IFwiZ2l0IHJldmVydCAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKKworIzogc2VxdWVuY2VyLmM6MjY2NQorbXNnaWQgImNoZXJyeS1waWNrIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgInVuIHBpY29yYWdlIGVzdCBkw6lqw6AgZW4gY291cnMiCisKKyM6IHNlcXVlbmNlci5jOjI2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICJlc3NheWV6IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorCisjOiBzZXF1ZW5jZXIuYzoyNjgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgc2VxdWVuY2VyIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZSByw6lwZXJ0b2lyZSBkZSBzw6lxdWVuY2V1ciAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyNjk2Cittc2dpZCAiY291bGQgbm90IGxvY2sgSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB2ZXJyb3VpbGxlciBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU2IHNlcXVlbmNlci5jOjQwOTkKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImF1Y3VuIHBpY29yYWdlIG91IHJldG91ciBlbiBjb3VycyIKKworIzogc2VxdWVuY2VyLmM6Mjc1OCBzZXF1ZW5jZXIuYzoyNzY5Cittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6Mjc2MCBzZXF1ZW5jZXIuYzoyODA0Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgImltcG9zc2libGUgZCdhYmFuZG9ubmVyIGRlcHVpcyB1bmUgYnJhbmNoZSBub24gZW5jb3JlIGNyw6nDqWUiCisKKyM6IHNlcXVlbmNlci5jOjI3OTAgYnVpbHRpbi9ncmVwLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6Mjc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlICclcyfCoDogJXMiCisKKyM6IHNlcXVlbmNlci5jOjI3OTMKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICJmaW4gZGUgZmljaGllciBpbmF0dGVuZHVlIgorCisjOiBzZXF1ZW5jZXIuYzoyNzk5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAibGUgZmljaGllciBIRUFEIGRlIHByw6lwYXJhdGlvbiBkZSBwaWNvcmFnZSAnJXMnIGVzdCBjb3Jyb21wdSIKKworIzogc2VxdWVuY2VyLmM6MjgxMAorbXNnaWQgIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRC4gTm90IHJld2luZGluZywgY2hlY2sgeW91ciBIRUFEISIKK21zZ3N0ciAiIgorIlZvdXMgc2VtYmxleiBhdm9pciBkw6lwbGFjw6kgbGEgSEVBRC4gUGFzIGRlIHJlbWJvYmluYWdlLCB2w6lyaWZpZXogdm90cmUgSEVBRMKgISIKKworIzogc2VxdWVuY2VyLmM6Mjg1MQorbXNnaWQgIm5vIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiUGFzIGRlIHJldG91ciBlbiBjb3VycyA/IgorCisjOiBzZXF1ZW5jZXIuYzoyODU5Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImF1Y3VuIHBpY29yYWdlIGVuIGNvdXJzIgorCisjOiBzZXF1ZW5jZXIuYzoyODY5Cittc2dpZCAiZmFpbGVkIHRvIHNraXAgdGhlIGNvbW1pdCIKK21zZ3N0ciAiw6ljaGVjIGR1IHNhdXQgZGUgY29tbWl0IgorCisjOiBzZXF1ZW5jZXIuYzoyODc2Cittc2dpZCAidGhlcmUgaXMgbm90aGluZyB0byBza2lwIgorbXNnc3RyICJpbCBuJ3kgYSByaWVuIMOgIHNhdXRlciIKKworIzogc2VxdWVuY2VyLmM6Mjg3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaGF2ZSB5b3UgY29tbWl0dGVkIGFscmVhZHk/XG4iCisidHJ5IFwiZ2l0ICVzIC0tY29udGludWVcIiIKK21zZ3N0ciAiIgorIkF2ZXotdm91cyBkw6lqw6AgdmFsaWTDqcKgP1xuIgorImVzc2F5ZXogXCJnaXQgJXMgLWNvbnRpbnVlXCIiCisKKyM6IHNlcXVlbmNlci5jOjMwMDMgc2VxdWVuY2VyLmM6NDAxMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIG1ldHRyZSDDoCBqb3VyICVzIgorCisjOiBzZXF1ZW5jZXIuYzozMDQyIHNlcXVlbmNlci5jOjM5OTEKK21zZ2lkICJjYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MzA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY29weSAnJXMnIHRvICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY29waWVyICclcycgdmVycyAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisiVm91cyBwb3V2ZXogY29ycmlnZXIgbGUgY29tbWl0IG1haW50ZW5hbnQsIGF2ZWNcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorImFwcsOocyBhdm9pciByw6lhbGlzw6kgdm9zIG1vZGlmaWNhdGlvbnMsIGxhbmNlelxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjMwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICVzLi4uICUuKnMiCittc2dzdHIgImltcG9zc2libGUgZCdhcHBsaXF1ZXIgJXMuLi4gJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MzA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWVyZ2UgJS4qcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBmdXNpb25uZXIgJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MzA5OCBzZXF1ZW5jZXIuYzozMTAyIGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNvcGllciAnJXMnIHZlcnMgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzEyOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIGZhaWxlZDogJXNcbiIKKyIlc1lvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiw6ljaGVjIGQnZXjDqWN1dGlvbsKgOiAlc1xuIgorIiVzVm91cyBwb3V2ZXogY29ycmlnZXIgbGUgcHJvYmzDqG1lLCBwdWlzIGxhbmNlclxuIgorIlxuIgorImdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMTM1Cittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKK21zZ3N0ciAiZXQgYSBtaXMgw6Agam91ciBsJ2luZGV4IG91IGwnYXJicmUgZGUgdHJhdmFpbFxuIgorCisjOiBzZXF1ZW5jZXIuYzozMTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gc3VjY2VlZGVkOiAlc1xuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkwnZXjDqWN1dGlvbiBhIHLDqXVzc2nCoDogJXNcbiIKKyJtYWlzIGEgbGFpc3PDqSBkZXMgbW9kaWZpY2F0aW9ucyBkYW5zIGwnaW5kZXggb3UgbGEgY29waWUgZGUgdHJhdmFpbFxuIgorIlZhbGlkZXogb3UgcmVtaXNleiB2b3MgbW9kaWZpY2F0aW9uLCBwdWlzIGxhbmNlelxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBsYWJlbCBuYW1lOiAnJS4qcyciCittc2dzdHIgIm5vbSBkZSBsYWJlbCBpbGzDqWdhbCAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjMyNTYKK21zZ2lkICJ3cml0aW5nIGZha2Ugcm9vdCBjb21taXQiCittc2dzdHIgIsOpY3JpdHVyZSBkJ3VuIGNvbW1pdCByYWNpbmUgYmlkb24iCisKKyM6IHNlcXVlbmNlci5jOjMyNjEKK21zZ2lkICJ3cml0aW5nIHNxdWFzaC1vbnRvIgorbXNnc3RyICLDqWNyaXR1cmUgZGUgJ8OpY3Jhc2VyLXN1ciciCisKKyM6IHNlcXVlbmNlci5jOjMyOTkgYnVpbHRpbi9yZWJhc2UuYzo4ODAgYnVpbHRpbi9yZWJhc2UuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB0cm91dmVyIGwnYXJicmUgZGUgJXMiCisKKyM6IHNlcXVlbmNlci5jOjMzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzM3NQorbXNnaWQgImNhbm5vdCBtZXJnZSB3aXRob3V0IGEgY3VycmVudCByZXZpc2lvbiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmdXNpb25uZXIgYXZlYyB1bmUgcsOpdmlzaW9uIGNvdXJhbnRlIgorCisjOiBzZXF1ZW5jZXIuYzozMzk3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJS4qcyciCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjM0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBtZXJnZTogJyUuKnMnIgorbXNnc3RyICJyaWVuIMOgIGZ1c2lvbm5lcsKgOiAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjM0MTgKK21zZ2lkICJvY3RvcHVzIG1lcmdlIGNhbm5vdCBiZSBleGVjdXRlZCBvbiB0b3Agb2YgYSBbbmV3IHJvb3RdIgorbXNnc3RyICIiCisidW5lIGZ1c2lvbiBvY3RvcHVzIG5lIHBldXQgcGFzIMOqdHJlIGV4w6ljdXTDqWUgcGFyIGRlc3N1cyB1bmUgbm91dmVsbGUgcmFjaW5lIgorCisjOiBzZXF1ZW5jZXIuYzozNDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgY29tbWl0IG1lc3NhZ2Ugb2YgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiBkZSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBldmVuIGF0dGVtcHQgdG8gbWVyZ2UgJyUuKnMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHNldWxlbWVudCBlc3NheWVyIGRlIGZ1c2lvbm5lciAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjM2MTAKK21zZ2lkICJtZXJnZTogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJmdXNpb27CoDogSW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgbm91dmVhdSBmaWNoaWVyIGluZGV4IgorCisjOiBzZXF1ZW5jZXIuYzozNjc5IGJ1aWx0aW4vcmViYXNlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLlxuIgorbXNnc3RyICJBdXRvcmVtaXNhZ2UgYXBwbGlxdcOpLlxuIgorCisjOiBzZXF1ZW5jZXIuYzozNjkxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzdG9ja2VyICVzIgorCisjOiBzZXF1ZW5jZXIuYzozNjk0IGJ1aWx0aW4vcmViYXNlLmM6NzUzIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuXG4iCisiWW91ciBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBzdGFzaC5cbiIKKyJZb3UgY2FuIHJ1biBcImdpdCBzdGFzaCBwb3BcIiBvciBcImdpdCBzdGFzaCBkcm9wXCIgYXQgYW55IHRpbWUuXG4iCittc2dzdHIgIiIKKyJMJ2FwcGxpY2F0aW9uIGRlIGwnYXV0b3JlbWlzYWdlIGEgcHJvdm9xdcOpIGRlcyBjb25mbGl0c1xuIgorIlZvcyAgbW9kaWZpY2F0aW9ucyBzb250IMOgIGwnYWJyaSBkYW5zIGxhIHJlbWlzZS5cbiIKKyJWb3VzIHBvdXZleiBsYW5jZXIgXCJnaXQgc3Rhc2ggcG9wXCIgb3UgXCJnaXQgc3Rhc2ggZHJvcFwiIMOgIHRvdXQgbW9tZW50LlxuIgorCisjOiBzZXF1ZW5jZXIuYzozNzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSB2YWxpZCBPSUQiCittc2dzdHIgIiVzIG4nZXN0IHBhcyB1biBPSUQgdmFsaWRlIgorCisjOiBzZXF1ZW5jZXIuYzozNzYwIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NzkKK21zZ2lkICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIkltcG9zc2libGUgZGUgZMOpdGFjaGVyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjM3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCBIRUFEXG4iCittc2dzdHIgImFycsOqdCDDoCBIRUFEXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAlc1xuIgorbXNnc3RyICJBcnLDqnTDqSDDoCAlc1xuIgorCisjOiBzZXF1ZW5jZXIuYzozNzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZXhlY3V0ZSB0aGUgdG9kbyBjb21tYW5kXG4iCisiXG4iCisiICAgICUuKnNcbiIKKyJJdCBoYXMgYmVlbiByZXNjaGVkdWxlZDsgVG8gZWRpdCB0aGUgY29tbWFuZCBiZWZvcmUgY29udGludWluZywgcGxlYXNlXG4iCisiZWRpdCB0aGUgdG9kbyBsaXN0IGZpcnN0OlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tZWRpdC10b2RvXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkJ2V4w6ljdXRlciBsYSBjb21tYW5kZVxuIgorIlxuIgorIiAgICAlLipzXG4iCisiRWxsZSBhIMOpdMOpIHJlcHJvZ3JhbW3DqWXCoDsgcG91ciDDqWRpdGVyIGxhIGNvbW1hbmRlIGF2YW50IGRlIHBvdXJzdWl2cmUsXG4iCisidmV1aWxsZXogw6lkaXRlciBsYSBsaXN0ZSBkZSBjb21tYW5kZXMgZW4gcHJlbWllcsKgOlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tZWRpdC10b2RvXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzozODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXMuLi4gICUuKnNcbiIKK21zZ3N0ciAiYXJyw6p0IMOgICVzLi4uICUuKnNcbiIKKworIzogc2VxdWVuY2VyLmM6Mzk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQgJWQiCittc2dzdHIgImNvbW1hbmRlIGluY29ubnVlICVkIgorCisjOiBzZXF1ZW5jZXIuYzozOTk5Cittc2dpZCAiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgb3JpZy1oZWFkIgorCisjOiBzZXF1ZW5jZXIuYzo0MDA0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ29udG8nIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgJ29udG8nIgorCisjOiBzZXF1ZW5jZXIuYzo0MDE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgSEVBRCB0byAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciBIRUFEIHN1ciAlcyIKKworIzogc2VxdWVuY2VyLmM6NDExMQorbXNnaWQgImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHJlYmFzZXLCoDogdm91cyBhdmV6IGRlcyBtb2RpZmljYXRpb25zIG5vbiBpbmRleMOpZXMuIgorCisjOiBzZXF1ZW5jZXIuYzo0MTIwCittc2dpZCAiY2Fubm90IGFtZW5kIG5vbi1leGlzdGluZyBjb21taXQiCittc2dzdHIgImltcG9zc2libGUgZGUgY29ycmlnZXIgdW4gY29tbWl0IG5vbi1leGlzdGFudCIKKworIzogc2VxdWVuY2VyLmM6NDEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbGU6ICclcyciCittc2dzdHIgImZpY2hpZXIgaW52YWxpZGXCoDogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbnRlbnRzOiAnJXMnIgorbXNnc3RyICJjb250ZW51IGludmFsaWRlIDogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDEyNworbXNnaWQgIiIKKyJcbiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UsIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAiIgorIlxuIgorIlZvdXMgYXZleiBkZXMgbW9kaWZpY2F0aW9ucyBub24gdmFsaWTDqWVzIGRhbnMgdm90cmUgY29waWUgZGUgdHJhdmFpbC5cbiIKKyJWZXVpbGxleiBsZXMgdmFsaWRlciBkJ2Fib3JkLCBwdWlzIHJlbGFuY2VyICdnaXQgcmViYXNlIC0tY29udGludWUnLiIKKworIzogc2VxdWVuY2VyLmM6NDE2MyBzZXF1ZW5jZXIuYzo0MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBmaWxlOiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSBmaWNoaWVywqA6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQyMTcKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgImltcG9zc2libGUgZGUgc3VwcHJpbWVyIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IHNlcXVlbmNlci5jOjQyMjQKK21zZ2lkICJjb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB2YWxpZGVyIGxlcyBtb2RpZmljYXRpb25zIGluZGV4w6llcy4iCisKKyM6IHNlcXVlbmNlci5jOjQzMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbid0IGNoZXJyeS1waWNrIGEgJXMiCittc2dzdHIgIiVzIDogaW1wb3NzaWJsZSBkZSBwaWNvcmVyIHVuICVzIgorCisjOiBzZXF1ZW5jZXIuYzo0MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBiYWQgcmV2aXNpb24iCittc2dzdHIgIiVzIDogbWF1dmFpc2UgcsOpdmlzaW9uIgorCisjOiBzZXF1ZW5jZXIuYzo0Mzc3Cittc2dpZCAiY2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5udWxlciBlbiB0YW50IHF1ZSBjb21taXQgaW5pdGlhbCIKKworIzogc2VxdWVuY2VyLmM6NDg0NgorbXNnaWQgIm1ha2Vfc2NyaXB0OiB1bmhhbmRsZWQgb3B0aW9ucyIKK21zZ3N0ciAibWFrZV9zY3JpcHTCoDogb3B0aW9ucyBub24gZ8OpcsOpZXMiCisKKyM6IHNlcXVlbmNlci5jOjQ4NDkKK21zZ2lkICJtYWtlX3NjcmlwdDogZXJyb3IgcHJlcGFyaW5nIHJldmlzaW9ucyIKK21zZ3N0ciAibWFrZV9zY3JpcHTCoDogZXJyZXVyIGxvcnMgZGUgbGEgcHLDqXBhcmF0aW9uIGRlcyByw6l2aXNpb25zIgorCisjOiBzZXF1ZW5jZXIuYzo1MDgzIHNlcXVlbmNlci5jOjUxMDAKK21zZ2lkICJub3RoaW5nIHRvIGRvIgorbXNnc3RyICJyaWVuIMOgIGZhaXJlIgorCisjOiBzZXF1ZW5jZXIuYzo1MTE5Cittc2dpZCAiY291bGQgbm90IHNraXAgdW5uZWNlc3NhcnkgcGljayBjb21tYW5kcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8Opdml0ZXIgbGVzIGNvbW1hbmRlcyBkZSBwaWNvcmFnZSBub24gbsOpY2Vzc2FpcmVzIgorCisjOiBzZXF1ZW5jZXIuYzo1MjEzCittc2dpZCAidGhlIHNjcmlwdCB3YXMgYWxyZWFkeSByZWFycmFuZ2VkLiIKK21zZ3N0ciAibGUgc2NyaXB0IGEgZMOpasOgIMOpdMOpIHLDqWFycmFuZ8OpLiIKKworIzogc2V0dXAuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkgYXQgJyVzJyIKK21zZ3N0ciAiJyVzJyBlc3QgaG9ycyBkdSBkw6lww7R0IMOgICclcyciCisKKyM6IHNldHVwLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogbm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICdnaXQgPGNvbW1hbmQ+IC0tIDxwYXRoPi4uLicgdG8gc3BlY2lmeSBwYXRocyB0aGF0IGRvIG5vdCBleGlzdCBsb2NhbGx5LiIKK21zZ3N0ciAiIgorIiVzwqA6IGNlIGNoZW1pbiBuJ2V4aXN0ZSBwYXMgZGFucyBsYSBjb3BpZSBkZSB0cmF2YWlsLlxuIgorIlV0aWxpc2V6ICdnaXQgPGNvbW1hbmRlPiAtLSA8Y2hlbWluPi4uLicgcG91ciBzcMOpY2lmaWVyIGRlcyBjaGVtaW5zIHF1aSAiCisibidleGlzdGVudCBwYXMgbG9jYWxlbWVudC4iCisKKyM6IHNldHVwLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogdW5rbm93biByZXZpc2lvbiBvciBwYXRoIG5vdCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorImFyZ3VtZW50ICclcycgYW1iaWd1wqA6IHLDqXZpc2lvbiBpbmNvbm51ZSBvdSBjaGVtaW4gaW5leGlzdGFudC5cbiIKKyJVdGlsaXNleiAnLS0nIHBvdXIgc8OpcGFyZXIgbGVzIGNoZW1pbnMgZGVzIHLDqXZpc2lvbnMsIGNvbW1lIGNlY2nCoDpcbiIKKyInZ2l0IDxjb21tYW5kZT4gWzxyw6l2aXNpb24+Li4uXSAtLSBbPGNoZW1pbj4uLi5dJyIKKworIzogc2V0dXAuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICclcycgbXVzdCBjb21lIGJlZm9yZSBub24tb3B0aW9uIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorImwnb3B0aW9uICclcycgZG9pdCDDqnRyZSBwcsOpc2VudGUgYXZhbnQgbGVzIGFyZ3VtZW50cyBxdWkgbmUgc29udCBwYXMgZGVzICIKKyJvcHRpb25zIgorCisjOiBzZXR1cC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisiYXJndW1lbnQgJyVzJyBhbWJpZ3XCoDogcsOpdmlzaW9uIGV0IGNoZW1pbiBzcMOpY2lmacOpcy5cbiIKKyJVdGlsaXNleiAnLS0nIHBvdXIgc8OpcGFyZXIgbGVzIGNoZW1pbnMgZGVzIHLDqXZpc2lvbnMsIGNvbW1lIGNlY2nCoDpcbiIKKyInZ2l0IDxjb21tYW5kZT4gWzxyw6l2aXNpb24+Li4uXSAtLSBbPGNoZW1pbj4uLi5dJyIKKworIzogc2V0dXAuYzo0MDkKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHVwIHdvcmsgdHJlZSB1c2luZyBpbnZhbGlkIGNvbmZpZyIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgbWV0dHJlIGVuIHBsYWNlIGxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwgZW4gdXRpbGlzYW50IHVuZSAiCisiY29uZmlndXJhdGlvbiBpbnZhbGlkZSIKKworIzogc2V0dXAuYzo0MTMKK21zZ2lkICJ0aGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIKK21zZ3N0ciAiQ2V0dGUgb3DDqXJhdGlvbiBkb2l0IMOqdHJlIGVmZmVjdHXDqWUgZGFucyB1biBhcmJyZSBkZSB0cmF2YWlsIgorCisjOiBzZXR1cC5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCBnaXQgcmVwbyB2ZXJzaW9uIDw9ICVkLCBmb3VuZCAlZCIKK21zZ3N0ciAiVmVyc2lvbiBhdHRlbmR1ZSBkdSBkw6lww7R0IGdpdCA8PSAlZCwgJWQgdHJvdXbDqWUiCisKKyM6IHNldHVwLmM6NTY3Cittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICJleHRlbnNpb25zIGRlIGTDqXDDtHQgaW5jb25udWVzIHRyb3V2w6llc8KgOiIKKworIzogc2V0dXAuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyAnJXMnIgorbXNnc3RyICJlcnJldXIgw6AgbCdvdXZlcnR1cmUgZGUgJyVzJyIKKworIzogc2V0dXAuYzo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGxhcmdlIHRvIGJlIGEgLmdpdCBmaWxlOiAnJXMnIgorbXNnc3RyICJ0cm9wIGdyb3MgcG91ciDDqnRyZSB1bmUgZmljaGllciAuZ2l0wqA6ICclcyciCisKKyM6IHNldHVwLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgJXMiCittc2dzdHIgImVycmV1ciDDoCBsYSBsZWN0dXJlIGRlICVzIgorCisjOiBzZXR1cC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGdpdGZpbGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAiZm9ybWF0IGRlIGZpY2hpZXIgZ2l0IGludmFsaWRlIDogJXMiCisKKyM6IHNldHVwLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHBhdGggaW4gZ2l0ZmlsZTogJXMiCittc2dzdHIgImF1Y3VuIGNoZW1pbiBkYW5zIGxlIGZpY2hpZXIgZ2l0wqA6ICVzIgorCisjOiBzZXR1cC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgImNlIG4nZXN0IHBhcyB1biBkw6lww7R0IGdpdMKgOiAlcyIKKworIzogc2V0dXAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyQlcycgdG9vIGJpZyIKK21zZ3N0ciAiJyQlcycgdHJvcCBncm9zIgorCisjOiBzZXR1cC5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJyVzJyIKK21zZ3N0ciAiY2Ugbidlc3QgcGFzIHVuIGTDqXDDtHQgZ2l0IDogJyVzJyIKKworIzogc2V0dXAuYzo3Mzggc2V0dXAuYzo3NDAgc2V0dXAuYzo3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgc2UgZMOpcGxhY2VyIHZlcnMgbGUgcsOpcGVydG9pcmUgKGNoZGlyKSAnJXMnIgorCisjOiBzZXR1cC5jOjc0MyBzZXR1cC5jOjc5OSBzZXR1cC5jOjgwOSBzZXR1cC5jOjg0OCBzZXR1cC5jOjg1NgorbXNnaWQgImNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHJldmVuaXIgYXUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBjb3VyYW50IgorCisjOiBzZXR1cC5jOjg3MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJSpzJXMlcyciCittc2dzdHIgIsOpY2hlYyBkdSBzdGF0IGRlICclKnMlcyVzJyIKKworIzogc2V0dXAuYzoxMTA4Cittc2dpZCAiVW5hYmxlIHRvIHJlYWQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2FjY8OpZGVyIGF1IHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwgY291cmFudCIKKworIzogc2V0dXAuYzoxMTE3IHNldHVwLmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hhbmdlIHRvICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgbW9kaWZpZXIgZW4gJyVzJyIKKworIzogc2V0dXAuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIgorbXNnc3RyICJuaSBjZWNpIG5pIGF1Y3VuIGRlIHNlcyByw6lwZXJ0b2lyZXMgcGFyZW50cyBuJ2VzdCB1biBkw6lww7R0IGdpdMKgOiAlcyIKKworIzogc2V0dXAuYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IHBhcmVudCB1cCB0byBtb3VudCBwb2ludCAlcylcbiIKKyJTdG9wcGluZyBhdCBmaWxlc3lzdGVtIGJvdW5kYXJ5IChHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNIG5vdCBzZXQpLiIKK21zZ3N0ciAiIgorIm5pIGNlY2kgbmkgYXVjdW4gZGUgc2VzIHLDqXBlcnRvaXJlcyBwYXJlbnRzIChqdXNxdSdhdSBwb2ludCBkZSBtb250YWdlICVzKSAiCisibidlc3QgdW4gZMOpcMO0dCBnaXRcbiIKKyJBcnLDqnQgw6AgbGEgbGltaXRlIGR1IHN5c3TDqG1lIGRlIGZpY2hpZXJzIChHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNICIKKyJuJ2VzdCBwYXMgZMOpZmluaSkuIgorCisjOiBzZXR1cC5jOjEyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgKDAlLjNvKS5cbiIKKyJUaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKyJwcm9ibMOobWUgYXZlYyBsYSB2YWxldXIgZGUgY29yZS5zaGFyZWRSZXBvc2l0b3J5ICgwJS4zbykuXG4iCisiTGUgcHJvcHJpw6l0YWlyZSBkZXMgZmljaGllcnMgZG9pdCB0b3Vqb3VycyBhdm9pciBsZXMgZHJvaXRzIGVuIGxlY3R1cmUgZXQgIgorIsOpY3JpdHVyZS4iCisKKyM6IHNldHVwLmM6MTI4OQorbXNnaWQgIm9wZW4gL2Rldi9udWxsIG9yIGR1cCBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSBsJ291dmVydHVyZSBvdSBhdSBkdXAgZGUgL2Rldi9udWxsIgorCisjOiBzZXR1cC5jOjEzMDQKK21zZ2lkICJmb3JrIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIGJpZnVyY2F0aW9uIgorCisjOiBzZXR1cC5jOjEzMDkKK21zZ2lkICJzZXRzaWQgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZHUgc2V0c2lkIgorCisjOiBzaGExLWZpbGUuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdDsgY2hlY2sgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKK21zZ3N0ciAiIgorImxlIHLDqXBlcnRvaXJlIG9iamV0ICVzIG4nZXhpc3RlIHBhc8KgOyB2w6lyaWZpZXogLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKKworIzogc2hhMS1maWxlLmM6NTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgYWx0ZXJuYXRlIG9iamVjdCBwYXRoOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBub3JtYWxpc2VyIGxlIGNoZW1pbiBkJ29iamV0IGFsdGVybmF0aWbCoDogJXMiCisKKyM6IHNoYTEtZmlsZS5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWdub3JpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIiVzwqA6IG1hZ2FzaW5zIGQnb2JqZXRzIGFsdGVybmF0aWZzIGlnbm9yw6lzLCByw6ljdXJzaW9uIHRyb3AgcHJvZm9uZGUiCisKKyM6IHNoYTEtZmlsZS5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIG9iamVjdCBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIG5vcm1hbGlzZXIgbGUgcsOpcGVydG9pcmUgZCdvYmpldMKgOiAlcyIKKworIzogc2hhMS1maWxlLmM6NjI1Cittc2dpZCAidW5hYmxlIHRvIGZkb3BlbiBhbHRlcm5hdGVzIGxvY2tmaWxlIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyIChmZG9wZW4pIGxlIGZpY2hpZXIgdmVycm91IGRlcyBhbHRlcm5hdGl2ZXMiCisKKyM6IHNoYTEtZmlsZS5jOjY0MworbXNnaWQgInVuYWJsZSB0byByZWFkIGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAibGVjdHVyZSBkdSBmaWNoaWVyIGQnYWx0ZXJuYXRpdmVzIGltcG9zc2libGUiCisKKyM6IHNoYTEtZmlsZS5jOjY1MAorbXNnaWQgInVuYWJsZSB0byBtb3ZlIG5ldyBhbHRlcm5hdGVzIGZpbGUgaW50byBwbGFjZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBkw6lwbGFjZXIgbGUgbm91dmVhdSBmaWNoaWVyIGQnYWx0ZXJuYXRpdmUiCisKKyM6IHNoYTEtZmlsZS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImxlIGNoZW1pbiAnJXMnIG4nZXhpc3RlIHBhcyIKKworIzogc2hhMS1maWxlLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgYXMgYSBsaW5rZWQgY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIgorbXNnc3RyICIiCisiZXh0cmFpcmUgbGUgZMOpcMO0dCBkZSByw6lmw6lyZW5jZSAnJXMnIGNvbW1lIHVuZSBleHRyYWN0aW9uIGxpw6llIG4nZXN0IHBhcyAiCisiZW5jb3JlIHN1cHBvcnTDqS4iCisKKyM6IHNoYTEtZmlsZS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJsZSBkw6lww7R0IGRlIHLDqWbDqXJlbmNlICclcycgbidlc3QgcGFzIHVuIGTDqXDDtHQgbG9jYWwuIgorCisjOiBzaGExLWZpbGUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBzaGFsbG93IgorbXNnc3RyICJsZSBkw6lww7R0IGRlIHLDqWbDqXJlbmNlICclcycgZXN0IHN1cGVyZmljaWVsIgorCisjOiBzaGExLWZpbGUuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICJsZSBkw6lww7R0IGRlIHLDqWbDqXJlbmNlICclcycgZXN0IGdyZWZmw6kiCisKKyM6IHNoYTEtZmlsZS5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgd2hpbGUgcGFyc2luZyBhbHRlcm5hdGUgcmVmczogJXMiCittc2dzdHIgImxpZ25lIGludmFsaWRlIHBlbmRhbnQgbCdhbmFseXNlIGRlcyByZWZzIGFsdGVybmF0aXZlc8KgOiAlcyIKKworIzogc2hhMS1maWxlLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAiZXNzYWkgZGUgbW1hcCAlPFBSSXVNQVg+IGF1IGRlbMOgIGRlIGxhIGxpbWl0ZSAlPFBSSXVNQVg+IgorCisjOiBzaGExLWZpbGUuYzo5NjQKK21zZ2lkICJtbWFwIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIG1tYXAiCisKKyM6IHNoYTEtZmlsZS5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGZpbGUgJXMgaXMgZW1wdHkiCittc2dzdHIgImxlIGZpY2hpZXIgb2JqZXQgJXMgZXN0IHZpZGUiCisKKyM6IHNoYTEtZmlsZS5jOjEyNjMgc2hhMS1maWxlLmM6MjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICJvYmpldCBsaWJyZSBjb3Jyb21wdSAnJXMnIgorCisjOiBzaGExLWZpbGUuYzoxMjY1IHNoYTEtZmlsZS5jOjI0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2FyYmFnZSBhdCBlbmQgb2YgbG9vc2Ugb2JqZWN0ICclcyciCittc2dzdHIgImRvbm7DqWVzIGluY29ycmVjdGVzIMOgIGxhIGZpbiBkZSBsJ29iamV0IGxpYnJlICclcyciCisKKyM6IHNoYTEtZmlsZS5jOjEzMDcKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIgorbXNnc3RyICJ0eXBlIGQnb2JqZXQgaW52YWxpZGUiCisKKyM6IHNoYTEtZmlsZS5jOjEzOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBkw6lwYXF1ZXRlciBsJ2VudMOqdGUgJXMgYXZlYyAtLWFsbG93LXVua25vdy10eXBlIgorCisjOiBzaGExLWZpbGUuYzoxMzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqXBhcXVldGVyIGwnZW50w6p0ZSAlcyIKKworIzogc2hhMS1maWxlLmM6MTQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsJ2VudMOqdGUgJXMgYXZlYyAtLWFsbG93LXVua25vdy10eXBlIgorCisjOiBzaGExLWZpbGUuYzoxNDAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsJ2VudMOqdGUgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbCdvYmpldCAlcyIKKworIzogc2hhMS1maWxlLmM6MTYzMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlbWVudCAlcyBub3QgZm91bmQgZm9yICVzIgorbXNnc3RyICJyZW1wbGFjZW1lbnQgJXMgbm9uIHRyb3V2w6kgcG91ciAlcyIKKworIzogc2hhMS1maWxlLmM6MTYzNworIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAibCdvYmpldCBsaWJyZSAlcyAoc3RvY2vDqSBkYW5zICVzKSBlc3QgY29ycm9tcHUiCisKKyM6IHNoYTEtZmlsZS5jOjE2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2VkIG9iamVjdCAlcyAoc3RvcmVkIGluICVzKSBpcyBjb3JydXB0IgorbXNnc3RyICJsJ29iamV0IGVtcGFxdWV0w6kgJXMgKHN0b2Nrw6kgZGFucyAlcykgZXN0IGNvcnJvbXB1IgorCisjOiBzaGExLWZpbGUuYzoxNzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSBmaWNoaWVyICVzIgorCisjOiBzaGExLWZpbGUuYzoxNzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgcGVybWlzc2lvbiB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqWdsZXIgbGVzIGRyb2l0cyBkZSAnJXMnIgorCisjOiBzaGExLWZpbGUuYzoxNzYwCittc2dpZCAiZmlsZSB3cml0ZSBlcnJvciIKK21zZ3N0ciAiZXJyZXVyIGQnw6ljcml0dXJlIGQndW4gZmljaGllciIKKworIzogc2hhMS1maWxlLmM6MTc4MAorbXNnaWQgImVycm9yIHdoZW4gY2xvc2luZyBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAiZXJyZXVyIGVuIGZlcm1ldHVyZSBkdSBmaWNoaWVyIGQnb2JqZXQgZXNzZXVsw6kiCisKKyM6IHNoYTEtZmlsZS5jOjE4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zdWZmaWNpZW50IHBlcm1pc3Npb24gZm9yIGFkZGluZyBhbiBvYmplY3QgdG8gcmVwb3NpdG9yeSBkYXRhYmFzZSAlcyIKK21zZ3N0ciAiIgorImRyb2l0cyBpbnN1ZmZpc2FudHMgcG91ciBham91dGVyIHVuIG9iamV0IMOgIGxhIGJhc2UgZGUgZG9ubsOpZXMgJXMgZHUgZMOpcMO0dCIKKworIzogc2hhMS1maWxlLmM6MTg0NworbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIHVuIGZpY2hpZXIgdGVtcG9yYWlyZSIKKworIzogc2hhMS1maWxlLmM6MTg3MQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgZmljaGllciBkJ29iamV0IGVzc2V1bMOpIgorCisjOiBzaGExLWZpbGUuYzoxODc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIG5ldyBvYmplY3QgJXMgKCVkKSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb21wcmVzc2VyIGxlIG5vdXZlbCBvYmpldCAlcyAoJWQpIgorCisjOiBzaGExLWZpbGUuYzoxODgxCisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGVFbmQgb24gb2JqZWN0ICVzIGZhaWxlZCAoJWQpIgorbXNnc3RyICLDqWNoZWMgZGUgZGVmbGF0ZUVuZCBzdXIgbCdvYmpldCAlcyAoJWQpIgorCisjOiBzaGExLWZpbGUuYzoxODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZ1c2VkIGJ5IHVuc3RhYmxlIG9iamVjdCBzb3VyY2UgZGF0YSBmb3IgJXMiCittc2dzdHIgImRvbm7DqWVzIGRlIHNvdXJjZSBkJ29iamV0IGluc3RhYmxlIHBvdXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE4OTUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB1dGltZSgpIG9uICVzIgorbXNnc3RyICLDqWNoZWMgZGUgdXRpbWUoKSBzdXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGwnb2JqZXQgcG91ciAlcyIKKworIzogc2hhMS1maWxlLmM6MjAxMQorbXNnaWQgImNvcnJ1cHQgY29tbWl0IgorbXNnc3RyICJjb21taXQgY29ycm9tcHUiCisKKyM6IHNoYTEtZmlsZS5jOjIwMTkKK21zZ2lkICJjb3JydXB0IHRhZyIKK21zZ3N0ciAiw6l0aXF1ZXR0ZSBjb3Jyb21wdWUiCisKKyM6IHNoYTEtZmlsZS5jOjIxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBlcnJvciB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAiZXJyZXVyIGRlIGxlY3R1cmUgw6AgbCdpbmRleGF0aW9uIGRlICVzIgorCisjOiBzaGExLWZpbGUuYzoyMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IHJlYWQgd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgImxlY3R1cmUgdHJvbnF1w6llIHBlbmRhbnQgbCdpbmRleGF0aW9uIGRlICVzIgorCisjOiBzaGExLWZpbGUuYzoyMTk1IHNoYTEtZmlsZS5jOjIyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIKK21zZ3N0ciAiJXPCoDogw6ljaGVjIGRlIGwnaW5zZXJ0aW9uIGRhbnMgbGEgYmFzZSBkZSBkb25uw6llcyIKKworIzogc2hhMS1maWxlLmM6MjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5zdXBwb3J0ZWQgZmlsZSB0eXBlIgorbXNnc3RyICIlc8KgOiB0eXBlIGRlIGZpY2hpZXIgbm9uIHN1cHBvcnTDqSIKKworIzogc2hhMS1maWxlLmM6MjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCBvYmplY3QiCittc2dzdHIgIiVzIG4nZXN0IHBhcyB1biBvYmpldCB2YWxpZGUiCisKKyM6IHNoYTEtZmlsZS5jOjIyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiVzIG4nZXN0IHBhcyB1biBvYmpldCAnJXMnIHZhbGlkZSIKKworIzogc2hhMS1maWxlLmM6MjI2NCBidWlsdGluL2luZGV4LXBhY2suYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0NTQgc2hhMS1maWxlLmM6MjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIG1pc21hdGNoIGZvciAlcyAoZXhwZWN0ZWQgJXMpIgorbXNnc3RyICJpbmNvaMOpcmVuY2UgZGUgaGFjaGFnZSBwb3VyICVzICglcyBhdHRlbmR1KSIKKworIzogc2hhMS1maWxlLmM6MjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBtbWFwICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDgzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgaGVhZGVyIG9mICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqXBhcXVldGVyIGwnZW50w6p0ZSBkZSAlcyIKKworIzogc2hhMS1maWxlLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgaGVhZGVyIG9mICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdlbnTDqnRlIGRlICVzIgorCisjOiBzaGExLWZpbGUuYzoyNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgY29udGVudHMgb2YgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpcGFxdWV0ZXIgbGUgY29udGVudSBkZSAlcyIKKworIzogc2hhMS1uYW1lLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IFNIQTEgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJsZSBTSEExIGNvdXJ0ICVzIGVzdCBhbWJpZ3UiCisKKyM6IHNoYTEtbmFtZS5jOjQ5NworbXNnaWQgIlRoZSBjYW5kaWRhdGVzIGFyZToiCittc2dzdHIgIkxlcyBjYW5kaWRhdHMgc29udMKgOiIKKworIzogc2hhMS1uYW1lLmM6Nzk2Cittc2dpZCAiIgorIkdpdCBub3JtYWxseSBuZXZlciBjcmVhdGVzIGEgcmVmIHRoYXQgZW5kcyB3aXRoIDQwIGhleCBjaGFyYWN0ZXJzXG4iCisiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorIm1heSBiZSBjcmVhdGVkIGJ5IG1pc3Rha2UuIEZvciBleGFtcGxlLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorIkdpdCBuZSBjcsOpZSBub3JtYWxlbWVudCBqYW1haXMgZGUgcsOpZsOpcmVuY2UgcXVpIHNlIHRlcm1pbmUgcGFyIDQwXG4iCisiY2FyYWN0w6hyZXMgaGV4YSBjYXIgZWxsZSBzZXJhaXQgaWdub3LDqWUgc2kgdm91cyBzcMOpY2lmaWV6IGp1c3RlXG4iCisiNDAtaGV4YS4gQ2VzIHLDqWbDqXJlbmNlcyBwZXV2ZW50IMOqdHJlIGNyw6nDqWVzIHBhciBlcnJldXIuIFBhciBleGVtcGxlLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJvw7kgXCIkYnJcIiBlc3QgZCd1bmUgbWFuacOocmUgb3UgZCd1bmUgYXV0cmUgdmlkZSBldCB1bmUgcsOpZsOpcmVuY2UgNDAtaGV4YSAiCisiZXN0IGNyw6nDqWUuXG4iCisiVmV1aWxsZXogZXhhbWluZXIgY2VzIHLDqWbDqXJlbmNlcyBldCBwZXV0LcOqdHJlIGxlcyBzdXBwcmltZXIuIETDqXNhY3RpdmV6IGNlICIKKyJtZXNzYWdlXG4iCisiZW4gbGFuw6dhbnQgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIgorCisjOiBzaGExLW5hbWUuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciAnJS4qcycgb25seSBnb2VzIGJhY2sgdG8gJXMiCittc2dzdHIgImxlIGpvdXJuYWwgZGUgJyUuKnMnIG5lIHJlbW9udGUgcXUnw6AgJXMiCisKKyM6IHNoYTEtbmFtZS5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICclLipzJyBvbmx5IGhhcyAlZCBlbnRyaWVzIgorbXNnc3RyICJsZSBqb3VybmFsIGRlICclLipzJyBuJ2EgcXVlICVkIGVudHLDqWVzIgorCisjOiBzaGExLW5hbWUuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBleGlzdHMgb24gZGlzaywgYnV0IG5vdCBpbiAnJS4qcyciCittc2dzdHIgImxlIGNoZW1pbiAnJXMnIGV4aXN0ZSBzdXIgbGUgZGlzcXVlLCBtYWlzIHBhcyBkYW5zICclLipzJyIKKworIzogc2hhMS1uYW1lLmM6MTY5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicGF0aCAnJXMnIGV4aXN0cywgYnV0IG5vdCAnJXMnXG4iCisiaGludDogRGlkIHlvdSBtZWFuICclLipzOiVzJyBha2EgJyUuKnM6Li8lcyc/IgorbXNnc3RyICIiCisibGUgY2hlbWluICclcycgZXhpc3RlLCBtYWlzIHBhcyAnJXMnXG4iCisiY29uc2VpbMKgOiBwZXV0LcOqdHJlIHZvdWxpZXotdm91cyBkaXJlICclLipzOiVzJywgc29pdCAnJS4qczouLyVzJyIKKworIzogc2hhMS1uYW1lLmM6MTcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QgaW4gJyUuKnMnIgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBuJ2V4aXN0ZSBwYXMgZG5hcyAnJS4qcyciCisKKyM6IHNoYTEtbmFtZS5jOjE3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInBhdGggJyVzJyBpcyBpbiB0aGUgaW5kZXgsIGJ1dCBub3QgYXQgc3RhZ2UgJWRcbiIKKyJoaW50OiBEaWQgeW91IG1lYW4gJzolZDolcyc/IgorbXNnc3RyICIiCisibGUgY2hlbWluICclcycgZXN0IGRhbnMgbCdpbmRleCwgbWFpcyBwYXMgw6AgbCfDqXRhcGUgJWRcbiIKKyJjb25zZWlswqA6IHZvdXMgdm91bGlleiBwZXV0LcOqdHJlIGRpcmUgJzolZDolcyfCoD8iCisKKyM6IHNoYTEtbmFtZS5jOjE3NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInBhdGggJyVzJyBpcyBpbiB0aGUgaW5kZXgsIGJ1dCBub3QgJyVzJ1xuIgorImhpbnQ6IERpZCB5b3UgbWVhbiAnOiVkOiVzJyBha2EgJzolZDouLyVzJz8iCittc2dzdHIgIiIKKyJsZSBjaGVtaW4gJyVzJyBlc3QgZGFucyBsJ2luZGV4LCBtYWlzIHBhcyAnJXMnXG4iCisiY29uc2VpbMKgOiBwZXV0LcOqdHJlIHZvdWxpZXotdm91cyBkaXJlICc6JWQ6JXMnLCBzb2l0ICclZDouLyVzJyIKKworIzogc2hhMS1uYW1lLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gdGhlIGluZGV4IgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBleGlzdGUgc3VyIGxlIGRpc3F1ZSwgbWFpcyBwYXMgZGFucyBsJ2luZGV4IgorCisjOiBzaGExLW5hbWUuYzoxNzU4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCAobmVpdGhlciBvbiBkaXNrIG5vciBpbiB0aGUgaW5kZXgpIgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBuJ2V4aXN0ZSBwYXMgKG5pIHN1ciBsZSBkaXNxdWUsIG5pIGRhbnMgbCdpbmRleCkiCisKKyM6IHNoYTEtbmFtZS5jOjE3NzEKK21zZ2lkICJyZWxhdGl2ZSBwYXRoIHN5bnRheCBjYW4ndCBiZSB1c2VkIG91dHNpZGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisibGEgc3ludGF4ZSBkZSBjaGVtaW4gcmVsYXRpZiBuZSBwZXV0IHBhcyDDqnRyZSB1dGlsaXPDqWUgaG9ycyBkZSBsJ2FyYnJlIGRlICIKKyJ0cmF2YWlsIgorCisjOiBzaGExLW5hbWUuYzoxOTA5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IG5hbWUgJyUuKnMnLiIKK21zZ3N0ciAibm9tIGQnb2JqZXQgaW52YWxpZGUgOiAnJS4qcycuIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIiCittc2dzdHIgIiV1LiUyLjJ1IEdpbyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEdpQi9zIgorbXNnc3RyICIldS4lMi4ydSBHaW8vcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlCisjOiBzdHJidWYuYzo4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCIgorbXNnc3RyICIldS4lMi4ydSBNaW8iCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgTWlvL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZQorIzogc3RyYnVmLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQiIKK21zZ3N0ciAiJXUuJTIuMnUgS2lvIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCL3MiCittc2dzdHIgIiV1LiUyLjJ1IEtpby9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZQorIzogc3RyYnVmLmM6ODY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzIgorbXNnc3RyWzBdICIldSBvY3RldCIKK21zZ3N0clsxXSAiJXUgb2N0ZXRzIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg2NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlL3MiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzL3MiCittc2dzdHJbMF0gIiV1IG9jdGV0L3MiCittc2dzdHJbMV0gIiV1IG9jdGV0cy9zIgorCisjOiBzdHJidWYuYzoxMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBlZGl0ICclcyciCittc2dzdHIgImltcG9zc2libGUgZCfDqWRpdGVyICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjExNCBzdWJtb2R1bGUuYzoxNDMKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAiIgorIk1vZGlmaWNhdGlvbiBpbXBvc3NpYmxlIGRlIC5naXRtb2R1bGVzIG5vbiBmdXNpb25uw6ksIHLDqXNvbHZleiBsZXMgY29uZmxpdHMgIgorImQnYWJvcmQiCisKKyM6IHN1Ym1vZHVsZS5jOjExOCBzdWJtb2R1bGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgdW5lIHNlY3Rpb24gb8O5IHBhdGg9JXMgZGFucyAuZ2l0bW9kdWxlcyIKKworIyBpY2kgJXMgZXN0IHVuIGNoZW1pbgorIzogc3VibW9kdWxlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsJ8OpbMOpbWVudCBkZSAuZ2l0bW9kdWxlcyBwb3VyICVzIgorCisjOiBzdWJtb2R1bGUuYzoxNjUKK21zZ2lkICJzdGFnaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgbWlzZSBlbiBpbmRleCBkdSAuZ2l0bW9kdWxlcyBtaXMgw6Agam91ciIKKworIzogc3VibW9kdWxlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJkYW5zIGxlIHNvdXMtbW9kdWxlICclcycgbm9uIHBvcHVsw6kiCisKKyM6IHN1Ym1vZHVsZS5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRoc3BlYyAnJXMnIGlzIGluIHN1Ym1vZHVsZSAnJS4qcyciCittc2dzdHIgIkxlIGNoZW1pbiAnJXMnIGVzdCBkYW5zIGxlIHNvdXMtbW9kdWxlICclLipzJyIKKworIzogc3VibW9kdWxlLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLWlnbm9yZS1zdWJtb2R1bGVzIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAibWF1dmFpcyBhcmd1bWVudCAtLWlnbm9yZS1zdWJtb2R1bGVzwqA6ICVzIgorCisjOiBzdWJtb2R1bGUuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSBpbiBjb21taXQgJXMgYXQgcGF0aDogJyVzJyBjb2xsaWRlcyB3aXRoIGEgc3VibW9kdWxlIG5hbWVkIHRoZSAiCisic2FtZS4gU2tpcHBpbmcgaXQuIgorbXNnc3RyICIiCisiTGUgc291cy1tb2R1bGUgZGFucyBsZSBjb21taXQgJXMgYXUgY2hlbWluwqA6ICclcycgZW50cmUgZW4gY29sbGlzaW9uIGF2ZWMgdW4gIgorInNvdXMtbW9kdWxlIGR1IG3Dqm1lIG5vbS4gSWdub3LDqS4iCisKKyM6IHN1Ym1vZHVsZS5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZW50cnkgJyVzJyAoJXMpIGlzIGEgJXMsIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAibCdlbnRyw6llIGRlIHNvdXMtbW9kdWxlICclcycgKCVzKSBlc3QgdW4gJXMsIHBhcyB1biBjb21taXQiCisKKyM6IHN1Ym1vZHVsZS5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0IDxjb21taXRzPiAtLW5vdCAtLXJlbW90ZXMgLW4gMScgY29tbWFuZCBpbiAiCisic3VibW9kdWxlICVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSBsYW5jZXIgbGEgY29tbWFuZGUgJ2dpdCByZXYtbGlzdCA8Y29tbWl0cz4gLS1ub3QgLS1yZW1vdGVzIC1uICIKKyIxJyBkYW5zIGxlIHNvdXMtbW9kdWxlICVzIgorCisjOiBzdWJtb2R1bGUuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInByb2Nlc3MgZm9yIHN1Ym1vZHVsZSAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibGUgcHJvY2Vzc3VzIHBvdXIgbGUgc291cy1tb2R1bGUgJyVzJyBhIMOpY2hvdcOpIgorCisjOiBzdWJtb2R1bGUuYzoxMTQ3IGJ1aWx0aW4vYnJhbmNoLmM6NjgwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDQ1Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIsOJY2hlYyBkZSByw6lzb2x1dGlvbiBkZSBIRUFEIGNvbW1lIHLDqWbDqXJlbmNlIHZhbGlkZS4iCisKKyM6IHN1Ym1vZHVsZS5jOjExNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICJQb3Vzc8OpZSBkdSBzb3VzLW1vZHVsZSAnJXMnXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjExNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHB1c2ggc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBwb3Vzc2VyIGxlIHNvdXMtbW9kdWxlICclcydcbiIKKworIzogc3VibW9kdWxlLmM6MTQ1MworIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyBzdWJtb2R1bGUgJXMlc1xuIgorbXNnc3RyICJSw6ljdXDDqXJhdGlvbiBkdSBzb3VzLW1vZHVsZSAlcyVzXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjE0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFjY2VzcyBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYWNjw6lkZXIgYXUgc291cy1tb2R1bGUgJyVzJ1xuIgorCisjOiBzdWJtb2R1bGUuYzoxNjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvcnMgZHVyaW5nIHN1Ym1vZHVsZSBmZXRjaDpcbiIKICIlcyIKIG1zZ3N0ciAiIgotIkVycmV1ciBsb3JzIGRlIGxhIHLDqWN1cMOpcmF0aW9uIGRlcyB2ZXJzaW9ucyA6XG4iCisiRXJyZXVycyBwZW5kYW50IGxhIHLDqWN1cMOpcmF0aW9uIGR1IHNvdXMtbW9kdWxlwqA6XG4iCiAiJXMiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM0MwotIywgdGNsLWZvcm1hdAorIzogc3VibW9kdWxlLmM6MTY2MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG5vdCByZWNvZ25pemVkIGFzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIiclcycgbidlc3QgcGFzIHJlY29ubnUgY29tbWUgZMOpcMO0dCBnaXQiCisKKyM6IHN1Ym1vZHVsZS5jOjE2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj0yJyBpbiBzdWJtb2R1bGUgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGFuY2VyICdnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTInIGRhbnMgbGUgc291cy1tb2R1bGUgJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49MicgZmFpbGVkIGluIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49MicgYSDDqWNob3XDqSBkYW5zIGxlIHNvdXMtbW9kdWxlICVzIgorCisjOiBzdWJtb2R1bGUuYzoxODAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpbWFycmVyICdnaXQgc3RhdHVzJyBkYW5zIGxlIHNvdXMtbW9kdWxlICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjE4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgbGFuY2VyICdnaXQgc3RhdHVzJyBkYW5zIGxlIHNvdXMtbW9kdWxlICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjE4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVuc2V0IGNvcmUud29ya3RyZWUgc2V0dGluZyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6lzYWN0aXZlciBjb3JlLndvcmt0cmVlIGRhbnMgbGUgc291cy1tb2R1bGUgJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTg1NSBzdWJtb2R1bGUuYzoyMTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgInLDqWN1cnNpb24gaW1wb3NzaWJsZSBkYW5zIGxlIHNvdXMtbW9kdWxlICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjE4NzYKK21zZ2lkICJjb3VsZCBub3QgcmVzZXQgc3VibW9kdWxlIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqWluaXRpYWxpc2VyIGwnaW5kZXggZHUgc291cy1tb2R1bGUiCisKKyM6IHN1Ym1vZHVsZS5jOjE5MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgaGFzIGRpcnR5IGluZGV4IgorbXNnc3RyICJsZSBzb3VzLW1vZHVsZSAnJXMnIGEgdW4gaW5kZXggc2FsZSIKKworIzogc3VibW9kdWxlLmM6MTk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyBjb3VsZCBub3QgYmUgdXBkYXRlZC4iCittc2dzdHIgImxlIHNvdXMtbW9kdWxlICclcycgbidhIHBhcyBwdSDDqnRyZSBtaXMgw6Agam91ci4iCisKKyM6IHN1Ym1vZHVsZS5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGdpdCBkaXIgJyVzJyBpcyBpbnNpZGUgZ2l0IGRpciAnJS4qcyciCittc2dzdHIgIiIKKyJsZSByw6lwZXJ0b2lyZSBnaXQgZHUgc291cy1tb2R1bGUgJyVzJyBlc3Qgw6AgbCdpbnTDqXJpZXVyIGR1IHLDqXBlcnRvaXJlIGdpdCAiCisiJyUuKnMnIgorCisjOiBzdWJtb2R1bGUuYzoyMDU5CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCi0iXG4iCi0iJXMiCisicmVsb2NhdGVfZ2l0ZGlyIGZvciBzdWJtb2R1bGUgJyVzJyB3aXRoIG1vcmUgdGhhbiBvbmUgd29ya3RyZWUgbm90IHN1cHBvcnRlZCIKIG1zZ3N0ciAiIgotIkltcG9zc2libGUgZGUgbGFuY2VyIGwnb3V0aWwgZGUgZnVzaW9uIDpcbiIKLSJcbiIKLSIlcyIKKyJyZWxvY2F0ZV9naXRkaXIgcG91ciBsZSBzb3VzLW1vZHVsZSAnJXMnIGF2ZWMgcGx1cyBkJ3VuIGFyYnJlIGRlIHRyYXZhaWwgIgorIm4nZXN0IHBhcyBzdXBwb3J0w6kiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM0NwotbXNnaWQgIlJ1bm5pbmcgbWVyZ2UgdG9vbC4uLiIKLW1zZ3N0ciAiTGFuY2VtZW50IGRlIGwnb3V0aWwgZGUgZnVzaW9uLi4uIgorIzogc3VibW9kdWxlLmM6MjA3MSBzdWJtb2R1bGUuYzoyMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgbmFtZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgdHJvdXZlIGxlIG5vbSBwb3VyIGxlIHNvdXMtbW9kdWxlICclcyciCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM3NSBsaWIvbWVyZ2V0b29sLnRjbDozODMKLW1zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCi1tc2dzdHIgIkwnb3V0aWwgZGUgZnVzaW9uIGEgw6ljaG91w6kuIgorIzogc3VibW9kdWxlLmM6MjA3NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBtb3ZlICclcycgaW50byBhbiBleGlzdGluZyBnaXQgZGlyIgorbXNnc3RyICJyZWZ1cyBkZSBkw6lwbGFjZXIgJyVzJyBkYW5zIHVuZSByw6lwZXJ0b2lyZSBnaXQgZXhpc3RhbnQiCiAKLSM6IGxpYi9vcHRpb24udGNsOjExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKLW1zZ3N0ciAiQ29kYWdlIGdsb2JhbCAnJXMnIGludmFsaWRlIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgcmVwbyBlbmNvZGluZyAnJXMnIgotbXNnc3RyICJDb2RhZ2UgZGUgZMOpcMO0dCAnJXMnIGludmFsaWRlIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMTcKLW1zZ2lkICJSZXN0b3JlIERlZmF1bHRzIgotbXNnc3RyICJSZW1ldHRyZSBsZXMgdmFsZXVycyBwYXIgZMOpZmF1dCIKLQotIzogbGliL29wdGlvbi50Y2w6MTIxCi1tc2dpZCAiU2F2ZSIKLW1zZ3N0ciAiU2F1dmVnYXJkZXIiCi0KLSM6IGxpYi9vcHRpb24udGNsOjEzMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIFJlcG9zaXRvcnkiCi1tc2dzdHIgIkTDqXDDtHQgOiAlcyIKLQotIzogbGliL29wdGlvbi50Y2w6MTMyCi1tc2dpZCAiR2xvYmFsIChBbGwgUmVwb3NpdG9yaWVzKSIKLW1zZ3N0ciAiR2xvYmFsZXMgKHRvdXMgbGVzIGTDqXDDtHRzKSIKLQotIzogbGliL29wdGlvbi50Y2w6MTM4Ci1tc2dpZCAiVXNlciBOYW1lIgotbXNnc3RyICJOb20gZCd1dGlsaXNhdGV1ciIKLQotIzogbGliL29wdGlvbi50Y2w6MTM5Ci1tc2dpZCAiRW1haWwgQWRkcmVzcyIKLW1zZ3N0ciAiQWRyZXNzZSBlbWFpbCIKLQotIzogbGliL29wdGlvbi50Y2w6MTQxCi1tc2dpZCAiU3VtbWFyaXplIE1lcmdlIENvbW1pdHMiCi1tc2dzdHIgIlLDqXN1bWVyIGxlcyBjb21taXRzIGRlIGZ1c2lvbiIKLQotIzogbGliL29wdGlvbi50Y2w6MTQyCi1tc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgotbXNnc3RyICJGdXNpb24gYmF2YXJkZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTQzCi1tc2dpZCAiU2hvdyBEaWZmc3RhdCBBZnRlciBNZXJnZSIKLW1zZ3N0ciAiTW9udHJlciBzdGF0aXN0aXF1ZXMgZGUgZGlmZiBhcHLDqHMgZnVzaW9uIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDQKLW1zZ2lkICJVc2UgTWVyZ2UgVG9vbCIKLW1zZ3N0ciAiVXRpbGlzZXIgb3V0aWwgZGUgZnVzaW9uIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDYKLW1zZ2lkICJUcnVzdCBGaWxlIE1vZGlmaWNhdGlvbiBUaW1lc3RhbXBzIgotbXNnc3RyICJGYWlyZSBjb25maWFuY2UgYXV4IGRhdGVzIGRlIG1vZGlmaWNhdGlvbiBkZSBmaWNoaWVycyAiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0NwotbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKLW1zZ3N0ciAiUHVyZ2VyIGxlcyBicmFuY2hlcyBkZSBzdWl2aSBwZW5kYW50IGxhIHLDqWN1cMOpcmF0aW9uIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDgKLW1zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2hlcyIKLW1zZ3N0ciAiRmFpcmUgY29ycmVzcG9uZHJlIGxlcyBicmFuY2hlcyBkZSBzdWl2aSIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ5Ci1tc2dpZCAiQmxhbWUgQ29weSBPbmx5IE9uIENoYW5nZWQgRmlsZXMiCi1tc2dzdHIgIkFubm90ZXIgbGVzIGNvcGllcyBzZXVsZW1lbnQgc3VyIGZpY2hpZXJzIG1vZGlmacOpcyIKLQotIzogbGliL29wdGlvbi50Y2w6MTUwCi1tc2dpZCAiTWluaW11bSBMZXR0ZXJzIFRvIEJsYW1lIENvcHkgT24iCi1tc2dzdHIgIk1pbmltdW0gZGUgY2FyYXTDqHJlcyBwb3VyIGFubm90ZXIgdW5lIGNvcGllIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTEKLW1zZ2lkICJCbGFtZSBIaXN0b3J5IENvbnRleHQgUmFkaXVzIChkYXlzKSIKLW1zZ3N0ciAiRGlzdGFuY2UgZGUgYmzDom1lIGRhbnMgbCdoaXN0b3JpcXVlIChqb3VycykiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MgotbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCi1tc2dzdHIgIk5vbWJyZSBkZSBsaWduZXMgZGUgY29udGV4dGUgZGFucyBsZXMgZGlmZnMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MwotbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCi1tc2dzdHIgIkxhcmdldXIgZHUgdGV4dGUgZGUgbWVzc2FnZSBkZSBjb21taXQiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1NAotbXNnaWQgIk5ldyBCcmFuY2ggTmFtZSBUZW1wbGF0ZSIKLW1zZ3N0ciAiTm91dmVhdSBtb2TDqGxlIGRlIG5vbSBkZSBicmFuY2hlIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTUKLW1zZ2lkICJEZWZhdWx0IEZpbGUgQ29udGVudHMgRW5jb2RpbmciCi1tc2dzdHIgIkNvZGFnZSBkdSBjb250ZW51IGRlcyBmaWNoaWVycyBwYXIgZMOpZmF1dCIKLQotIzogbGliL29wdGlvbi50Y2w6MjAzCi1tc2dpZCAiQ2hhbmdlIgotbXNnc3RyICJNb2RpZmllciIKLQotIzogbGliL29wdGlvbi50Y2w6MjMwCi1tc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCi1tc2dzdHIgIkRpY3Rpb25uYWlyZSBkJ29ydGhvZ3JhcGhlIDoiCi0KLSM6IGxpYi9vcHRpb24udGNsOjI1NAotbXNnaWQgIkNoYW5nZSBGb250IgotbXNnc3RyICJNb2RpZmllciBsZXMgcG9saWNlcyIKLQotIzogbGliL29wdGlvbi50Y2w6MjU4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hvb3NlICVzIgotbXNnc3RyICJDaG9pc2lyICVzIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyNjQKLW1zZ2lkICJwdC4iCi1tc2dzdHIgInB0LiIKLQotIzogbGliL29wdGlvbi50Y2w6Mjc4Ci1tc2dpZCAiUHJlZmVyZW5jZXMiCi1tc2dzdHIgIlByw6lmw6lyZW5jZXMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjMxNAotbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCi1tc2dzdHIgIkxhIHNhdXZlZ2FyZGUgY29tcGzDqHRlIGRlcyBvcHRpb25zIGEgw6ljaG91w6kgOiIKLQotIzogbGliL3JlbW90ZS50Y2w6MTYzCi1tc2dpZCAiUmVtb3ZlIFJlbW90ZSIKLW1zZ3N0ciAiU3VwcHJpbWVyIHVuIGTDqXDDtHQgZGlzdGFudCIKLQotIzogbGliL3JlbW90ZS50Y2w6MTY4Ci1tc2dpZCAiUHJ1bmUgZnJvbSIKLW1zZ3N0ciAiUHVyZ2VyIGRlIgotCi0jOiBsaWIvcmVtb3RlLnRjbDoxNzMKLW1zZ2lkICJGZXRjaCBmcm9tIgotbXNnc3RyICJSw6ljdXDDqXJlciBkZSIKLQotIzogbGliL3JlbW90ZS50Y2w6MjE1Ci1tc2dpZCAiUHVzaCB0byIKLW1zZ3N0ciAiUG91c3NlciB2ZXJzIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTkKLW1zZ2lkICJBZGQgUmVtb3RlIgotbXNnc3RyICJBam91dGVyIHVuIGTDqXDDtHQgZGlzdGFudCIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjI0Ci1tc2dpZCAiQWRkIE5ldyBSZW1vdGUiCi1tc2dzdHIgIkFqb3V0ZXIgdW4gbm91dmVhdSBkw6lww7R0IGRpc3RhbnQiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyOCBsaWIvdG9vbHNfZGxnLnRjbDozNgotbXNnaWQgIkFkZCIKLW1zZ3N0ciAiQWpvdXRlciIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjM3Ci1tc2dpZCAiUmVtb3RlIERldGFpbHMiCi1tc2dzdHIgIkTDqXRhaWxzIGRlcyBkw6lww7R0cyBkaXN0YW50cyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjUwCi1tc2dpZCAiTG9jYXRpb246IgotbXNnc3RyICJFbXBsYWNlbWVudCA6IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjIKLW1zZ2lkICJGdXJ0aGVyIEFjdGlvbiIKLW1zZ3N0ciAiQWN0aW9uIHN1cHBsw6ltZW50YWlyZSIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjY1Ci1tc2dpZCAiRmV0Y2ggSW1tZWRpYXRlbHkiCi1tc2dzdHIgIlLDqWN1cMOpcmVyIGltbcOpZGlhdGVtZW50IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzEKLW1zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgotbXNnc3RyICJJbml0aWFsaXNlciB1biBkw6lww7R0IGRpc3RhbnQgZXQgcG91c3NlciIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjc3Ci1tc2dpZCAiRG8gTm90aGluZyBFbHNlIE5vdyIKLW1zZ3N0ciAiTmUgcmllbiBmYWlyZSBkJ2F1dHJlIG1haW50ZW5hbnQiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMDEKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgcmVtb3RlIG5hbWUuIgotbXNnc3RyICJNZXJjaSBkZSBmb3VybmlyIHVuIG5vbSBkZSBkw6lww7R0IGRpc3RhbnQuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTE0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCi1tc2dzdHIgIiclcycgbidlc3QgcGFzIHVuIG5vbSBkZSBkw6lww7R0IGRpc3RhbnQgYWNjZXB0YWJsZS4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gYWRkIHJlbW90ZSAnJXMnIG9mIGxvY2F0aW9uICclcycuIgotbXNnc3RyICLDiWNoZWMgZGUgbCdham91dCBkdSBkw6lww7R0IGRpc3RhbnQgJyVzJyDDoCBsJ2VtcGxhY2VtZW50ICclcycuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMzIGxpYi90cmFuc3BvcnQudGNsOjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmZXRjaCAlcyIKLW1zZ3N0ciAicsOpY3Vww6lyZXIgJXMiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyB0aGUgJXMiCi1tc2dzdHIgIlLDqWN1cMOpcmF0aW9uIGRlICVzIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKLW1zZ3N0ciAiUGFzIGRlIG3DqXRob2RlIGNvbm51ZSBwb3VyIGluaXRpYWxpc2VyIGxlIGTDqXDDtHQgw6AgbCdlbXBsYWNlbWVudCAnJXMnLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MyBsaWIvdHJhbnNwb3J0LnRjbDoyNSBsaWIvdHJhbnNwb3J0LnRjbDo2MwotIzogbGliL3RyYW5zcG9ydC50Y2w6ODEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJwdXNoICVzIgotbXNnc3RyICJwb3Vzc2VyICVzIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTY0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2V0dGluZyB1cCB0aGUgJXMgKGF0ICVzKSIKLW1zZ3N0ciAiTWlzZSBlbiBwbGFjZSBkZSAlcyAow6AgJXMpIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKLW1zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgotbXNnc3RyICJTdXBwcmltZXIgdW5lIGJyYW5jaGUgw6AgZGlzdGFuY2UiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDcKLW1zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCi1tc2dzdHIgIkTDqXDDtHQgc291cmNlIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjUwIGxpYi90cmFuc3BvcnQudGNsOjEzNAotbXNnaWQgIlJlbW90ZToiCi1tc2dzdHIgIkJyYW5jaGUgZGlzdGFudGUgOiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo2NiBsaWIvdHJhbnNwb3J0LnRjbDoxNDkKLW1zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgotbXNnc3RyICJFbXBsYWNlbWVudCBhcmJpdHJhaXJlIDoiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6ODQKLW1zZ2lkICJCcmFuY2hlcyIKLW1zZ3N0ciAiQnJhbmNoZXMiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTA5Ci1tc2dpZCAiRGVsZXRlIE9ubHkgSWYiCi1tc2dzdHIgIlN1cHByaW1lciBzZXVsZW1lbnQgc2kiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTExCi1tc2dpZCAiTWVyZ2VkIEludG86IgotbXNnc3RyICJGdXNpb25uw6kgZGFucyA6IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MgotbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKLW1zZ3N0ciAiVW5lIGJyYW5jaGUgZXN0IG7DqWNlc3NhaXJlIHBvdXIgJ0Z1c2lvbm7DqSBkYW5zJy4iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg0Ci0jLCB0Y2wtZm9ybWF0CisjOiBzdWJtb2R1bGUuYzoyMDgyCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKLSJcbiIKLSIgLSAlcyIKKyJNaWdyYXRpbmcgZ2l0IGRpcmVjdG9yeSBvZiAnJXMlcycgZnJvbVxuIgorIiclcycgdG9cbiIKKyInJXMnXG4iCiBtc2dzdHIgIiIKLSJMZXMgYnJhbmNoZXMgc3VpdmFudGVzIG5lIHNvbnQgcGFzIGNvbXBsw6h0ZW1lbnQgZnVzaW9ubsOpZXMgZGFucyAlcyA6XG4iCi0iXG4iCi0iIC0gJXMiCisiTWlncmF0aW9uIGR1IHLDqXBlcnRvaXJlIGdpdCBkZSAnJXMlcycgZGVwdWlzXG4iCisiJyVzJyBzdXJcbiIKKyInJXMnXG4iCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg5Ci0jLCB0Y2wtZm9ybWF0CisjOiBzdWJtb2R1bGUuYzoyMjA5Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGxzLWZpbGVzIGluIC4uIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqW1hcnJlciBscy1maWxlcyBkYW5zIC4uIgorCisjOiBzdWJtb2R1bGUuYzoyMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImxzLXRyZWUgcmV0dXJuZWQgdW5leHBlY3RlZCByZXR1cm4gY29kZSAlZCIKK21zZ3N0ciAibHMtdHJlZSBhIHJlbnZvecOpIHVuIGNvZGUgZGUgcmV0b3VyIGluYXR0ZW5kdSAlZCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBzdXNwaWNpb3VzIHN1Ym1vZHVsZSBuYW1lOiAlcyIKK21zZ3N0ciAibm9tIGRlIHNvdXMtbW9kdWxlIHN1c3BpY2lldXggJXMgaWdub3LDqSIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjMwMworbXNnaWQgIm5lZ2F0aXZlIHZhbHVlcyBub3QgYWxsb3dlZCBmb3Igc3VibW9kdWxlLmZldGNoam9icyIKK21zZ3N0ciAibGVzIHZhbGV1cnMgbsOpZ2F0aXZlcyBuZSBzb250IHBhcyBwZXJtaXNlcyBwb3VyIHN1Ym1vZHVsZS5mZXRjaEpvYnMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJyVzJyB3aGljaCBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorIiclcycgaWdub3LDqSBldCBxdWkgcGV1dCDDqnRyZSBpbnRlcnByw6l0w6kgY29tbWUgdW5lIG9wdGlvbiBkZSBsaWduZSBkZSAiCisiY29tbWFuZGXCoDogJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgIlZhbGV1ciBpbnZhbGlkZSBwb3VyICVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgbWV0dHJlIMOgIGpvdXIgbCfDqWzDqW1lbnQgJXMgZGUgLmdpdG1vZHVsZXMiCisKKyM6IHRyYWlsZXIuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSBsYSBjb21tYW5kZSB0cmFpbGVyICclcyciCisKKyM6IHRyYWlsZXIuYzo0ODUgdHJhaWxlci5jOjQ5MCB0cmFpbGVyLmM6NDk1IHRyYWlsZXIuYzo1NDkgdHJhaWxlci5jOjU1MworIzogdHJhaWxlci5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICJ2YWxldXIgaW5jb25udWUgJyVzJyBwb3VyIGxhIGNsw6kgJyVzJyIKKworIzogdHJhaWxlci5jOjUzOSB0cmFpbGVyLmM6NTQ0IGJ1aWx0aW4vcmVtb3RlLmM6Mjk4IGJ1aWx0aW4vcmVtb3RlLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgInBsdXMgZCd1biAlcyIKKworIzogdHJhaWxlci5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIgorbXNnc3RyICJzeW1ib2xlIHZpZGUgZGFucyBsYSBsaWduZSBkZSBmaW4gJyUuKnMnIgorCisjOiB0cmFpbGVyLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxlIGZpY2hpZXIgZCdlbnRyw6llICclcyciCisKKyM6IHRyYWlsZXIuYzo3NTMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogdHJhaWxlci5jOjEwMTEgd3JhcHBlci5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAlcyIKK21zZ3N0ciAic3RhdCBpbXBvc3NpYmxlIGRlICVzIgorCisjOiB0cmFpbGVyLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAiJXMgbidlc3QgcGFzIHVuIGZpY2hpZXIgcsOpZ3VsaWVyIgorCisjOiB0cmFpbGVyLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCB3cml0YWJsZSBieSB1c2VyIgorbXNnc3RyICJsZSBmaWNoaWVyICVzIG4nZXN0IHBhcyBpbnNjcmlwdGlibGUgcGFyIGwndXRpbGlzYXRldXIiCisKKyM6IHRyYWlsZXIuYzoxMDI3Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIHVuIGZpY2hpZXIgdGVtcG9yYWlyZSIKKworIzogdHJhaWxlci5jOjEwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSB0ZW1wb3JhcnkgZmlsZSB0byAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZW5vbW1lciB1biBmaWNoaWVyIHRlbXBvcmFpcmUgZW4gJXMiCisKKyM6IHRyYW5zcG9ydC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBzZXQgdXBzdHJlYW0gb2YgJyVzJyB0byAnJXMnIG9mICclcydcbiIKK21zZ3N0ciAiUG9zaXRpb25uZXJhaXQgbGEgYnJhbmNoZSBhbW9udCBkZSAnJXMnIHN1ciAnJXMnIGRlICclcydcbiIKKworIzogdHJhbnNwb3J0LmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGJ1bmRsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGEgbGlhc3NlICclcyciCisKKyM6IHRyYW5zcG9ydC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQ6IGludmFsaWQgZGVwdGggb3B0aW9uICclcyciCittc2dzdHIgInRyYW5zcG9ydMKgOiBvcHRpb24gZGUgcHJvZm9uZGV1ciBpbnZhbGlkZSAnJXMnIgorCisjOiB0cmFuc3BvcnQuYzoyNjYKK21zZ2lkICJzZWUgcHJvdG9jb2wudmVyc2lvbiBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBkZXRhaWxzIgorbXNnc3RyICJ2b2lyIHByb3RvY29sLnZlcnNpb24gZGFucyAnZ2l0IGhlbHAgY29uZmlnJyBwb3VyIHBsdXMgZCdpbmZvcm1hdGlvbiIKKworIzogdHJhbnNwb3J0LmM6MjY3Cittc2dpZCAic2VydmVyIG9wdGlvbnMgcmVxdWlyZSBwcm90b2NvbCB2ZXJzaW9uIDIgb3IgbGF0ZXIiCittc2dzdHIgImxlcyBvcHRpb25zIGRlIHNlcnZldXIgZXhpZ2VudCB1bmUgdmVyc2lvbiAyIG91IHN1cMOpcmlldXJlIgorCisjOiB0cmFuc3BvcnQuYzo2MzIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgdHJhbnNwb3J0LmNvbG9yLiogY29uZmlnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGEgY29uZmlndXJhdGlvbiB0cmFuc3BvcnQuY29sb3IuKiIKKworIzogdHJhbnNwb3J0LmM6NzA1Cittc2dpZCAic3VwcG9ydCBmb3IgcHJvdG9jb2wgdjIgbm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAibGUgc3VwcG9ydCBkdSBwcm90b2NvbGUgdjIgbidlc3QgcGFzIGVuY29yZSBpbXBsYW50w6kiCisKKyM6IHRyYW5zcG9ydC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGZvciBjb25maWcgJyVzJzogJXMiCittc2dzdHIgInZhbGV1ciBpbmNvbm51ZSBwb3VyIGxhIGNvbmZpZyAnJXMnwqA6ICVzIgorCisjOiB0cmFuc3BvcnQuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0ICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgInRyYW5zcG9ydCAnJXMnIG5vbiBwZXJtaXMiCisKKyM6IHRyYW5zcG9ydC5jOjk0OQorbXNnaWQgImdpdC1vdmVyLXJzeW5jIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiCittc2dzdHIgImdpdC1vdmVyLXJzeW5jIG4nZXN0IHBsdXMgc3VwcG9ydMOpIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ0CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKLSJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKKyJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKKyJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIKIG1zZ3N0ciAiIgotIlVuIG91IHBsdXNpZXVycyBkZXMgdGVzdHMgZGUgZnVzaW9uIG9udCDDqWNob3XDqSBwYXJjZSBxdWUgdm91cyBuJ2F2ZXogcGFzICIKLSJyw6ljdXDDqXLDqSBsZXMgY29tbWl0cyBuw6ljZXNzYWlyZXMuIEVzc2F5ZXogZGUgcsOpY3Vww6lyZXIgw6AgcGFydGlyIGRlICVzICIKLSJkJ2Fib3JkLiIKKyJMZXMgY2hlbWlucyBzdWl2YW50cyBkZSBzb3VzLW1vZHVsZSBjb250aWVubmVudCBkZXMgbW9kaWZpY2F0aW9uc1xuIgorInF1aSBuZSBwZXV2ZW50IMOqdHJlIHRyb3V2w6llcyBzdXIgYXVjdW4gZGlzdGFudMKgOlxuIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNwotbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKLW1zZ3N0ciAiTWVyY2kgZGUgc8OpbGVjdGlvbm5lciB1bmUgb3UgcGx1c2lldXJzIGJyYW5jaGVzIMOgIHN1cHByaW1lci4iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKLW1zZ3N0ciAiU3VwcHJlc3Npb24gZGVzIGJyYW5jaGVzIGRlICVzIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MgotbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgotbXNnc3RyICJBdWN1biBkw6lww7R0IG4nZXN0IHPDqWxlY3Rpb25uw6kuIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNjYW5uaW5nICVzLi4uIgotbXNnc3RyICJTeW5jaHJvbmlzYXRpb24gZGUgJXMuLi4iCi0KLSM6IGxpYi9zZWFyY2gudGNsOjIxCi1tc2dpZCAiRmluZDoiCi1tc2dzdHIgIkNoZXJjaGVyIDoiCi0KLSM6IGxpYi9zZWFyY2gudGNsOjIzCi1tc2dpZCAiTmV4dCIKLW1zZ3N0ciAiU3VpdmFudCIKLQotIzogbGliL3NlYXJjaC50Y2w6MjQKLW1zZ2lkICJQcmV2IgotbXNnc3RyICJQcsOpY8OpZGVudCIKLQotIzogbGliL3NlYXJjaC50Y2w6MjUKLW1zZ2lkICJDYXNlLVNlbnNpdGl2ZSIKLW1zZ3N0ciAiU2Vuc2libGUgw6AgbGEgY2Fzc2UiCi0KLSM6IGxpYi9zaG9ydGN1dC50Y2w6MjEgbGliL3Nob3J0Y3V0LnRjbDo2MgotbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCi1tc2dzdHIgIkltcG9zc2libGUgZCfDqWNyaXJlIGxlIHJhY2NvdXJjaSA6IgotCi0jOiBsaWIvc2hvcnRjdXQudGNsOjEzNwotbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkJ8OpY3JpcmUgbCdpY8O0bmUgOiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiVsOpcmlmaWNhdGV1ciBkJ29ydGhvZ3JhcGhlIG5vbiBzdXBwb3J0w6kiCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQotbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgotbXNnc3RyICJMYSB2w6lyaWZpY2F0aW9uIGQnb3J0aG9ncmFwaGUgbidlc3QgcGFzIGRpc3BvbmlibGUiCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAotbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKLW1zZ3N0ciAiQ29uZmlndXJhdGlvbiBkZSB2w6lyaWZpY2F0aW9uIGQnb3J0aG9ncmFwaGUgaW52YWxpZGUiCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydGluZyBkaWN0aW9uYXJ5IHRvICVzLiIKLW1zZ3N0ciAiUsOpaW5pdGlhbGlzYXRpb24gZHUgZGljdGlvbm5haXJlIMOgICVzLiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjczCi1tc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKLW1zZ3N0ciAiTGEgdsOpcmlmaWNhdGlvbiBkJ29ydGhvZ3JhcGhlIGEgw6ljaG91w6kgc2lsZW5jaWV1c2VtZW50IGF1IGTDqW1hcnJhZ2UiCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAotbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJWw6lyaWZpY2F0ZXVyIGQnb3J0aG9ncmFwaGUgbm9uIHJlY29ubnUiCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDoxODYKLW1zZ2lkICJObyBTdWdnZXN0aW9ucyIKLW1zZ3N0ciAiQXVjdW5lIHN1Z2dlc3Rpb24iCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKLW1zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgIkVPRiBpbmF0dGVuZHVlIGVudm95w6llIHBhciBsZSB2w6lyaWZpY2F0ZXVyIGQnb3J0aG9ncmFwaGUiCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKLW1zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKLW1zZ3N0ciAiTGUgdsOpcmlmaWNhdGV1ciBkJ29ydGhvZ3JhcGhlIGEgw6ljaG91w6kiCi0KLSM6IGxpYi9zc2hrZXkudGNsOjMxCi1tc2dpZCAiTm8ga2V5cyBmb3VuZC4iCi1tc2dzdHIgIkF1Y3VuZSBjbMOpIHRyb3V2w6llLiIKLQotIzogbGliL3NzaGtleS50Y2w6MzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgotbXNnc3RyICJDbMOpIHB1YmxpcXVlIHRyb3V2w6llIGRhbnMgOiAlcyIKLQotIzogbGliL3NzaGtleS50Y2w6NDAKLW1zZ2lkICJHZW5lcmF0ZSBLZXkiCi1tc2dzdHIgIkfDqW7DqXJlciB1bmUgY2zDqSIKLQotIzogbGliL3NzaGtleS50Y2w6NTYKLW1zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKLW1zZ3N0ciAiQ29waWVyIGRhbnMgbGUgcHJlc3NlLXBhcGllciIKLQotIzogbGliL3NzaGtleS50Y2w6NzAKLW1zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKLW1zZ3N0ciAiVm90cmUgY2zDqSBwdWJsaXF1ZSBPcGVuU1NIIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo3OAotbXNnaWQgIkdlbmVyYXRpbmcuLi4iCi1tc2dzdHIgIkfDqW7DqXJhdGlvbi4uLiIKLQotIzogbGliL3NzaGtleS50Y2w6ODQKLSMsIHRjbC1mb3JtYXQKKyM6IHRyYW5zcG9ydC5jOjEwNDgKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuIgogIlxuIgotIiVzIgotbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBkZSBsYW5jZXIgc3NoLWtleWdlbiA6XG4iCisiUGxlYXNlIHRyeVxuIgogIlxuIgotIiVzIgotCi0jOiBsaWIvc3Noa2V5LnRjbDoxMTEKLW1zZ2lkICJHZW5lcmF0aW9uIGZhaWxlZC4iCi1tc2dzdHIgIkxhIGfDqW7DqXJhdGlvbiBhIMOpY2hvdcOpLiIKLQotIzogbGliL3NzaGtleS50Y2w6MTE4Ci1tc2dpZCAiR2VuZXJhdGlvbiBzdWNjZWVkZWQsIGJ1dCBubyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAiTGEgZ8OpbsOpcmF0aW9uIGEgcsOpdXNzaSwgbWFpcyBhdWN1bmUgY2zDqSBuJ2Egw6l0w6kgdHJvdXbDqWUuIgotCi0jOiBsaWIvc3Noa2V5LnRjbDoxMjEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJZb3VyIGtleSBpcyBpbjogJXMiCi1tc2dzdHIgIlZvdHJlIGNsw6kgZXN0IGRhbnMgOiAlcyIKLQotIzogbGliL3N0YXR1c19iYXIudGNsOjgzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKLW1zZ3N0ciAiJXMgLi4uICUqaSBkZSAlKmkgJXMgKCUzaSUlKSIKLQotIzogbGliL3Rvb2xzLnRjbDo3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKLW1zZ3N0ciAiTGFuY2VyICVzIG7DqWNlc3NpdGUgcXUndW4gZmljaGllciBzb2l0IHPDqWxlY3Rpb25uw6kuIgotCi0jOiBsaWIvdG9vbHMudGNsOjkwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCi1tc2dzdHIgIsOKdGVzLXZvdXMgc8O7ciBkZSB2b3Vsb2lyIGxhbmNlciAlcyA/IgotCi0jOiBsaWIvdG9vbHMudGNsOjExMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2w6ICVzIgotbXNnc3RyICJPdXRpbCA6ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjExMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmc6ICVzIgotbXNnc3RyICJMYW5jZW1lbnQgZGUgOiAlcyIKLQotIzogbGliL3Rvb2xzLnRjbDoxNDkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIgotbXNnc3RyICJMJ291dGlsIGEgdGVybWluw6kgYXZlYyBzdWNjw6hzIDogJXMiCi0KLSM6IGxpYi90b29scy50Y2w6MTUxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCBmYWlsZWQ6ICVzIgotbXNnc3RyICJMJ291dGlsIGEgw6ljaG91w6kgOiAlcyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjIKLW1zZ2lkICJBZGQgVG9vbCIKLW1zZ3N0ciAiQWpvdXRlciB1biBvdXRpbCIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjgKLW1zZ2lkICJBZGQgTmV3IFRvb2wgQ29tbWFuZCIKLW1zZ3N0ciAiQWpvdXRlciB1bmUgbm91dmVsbGUgY29tbWFuZGUgZCdvdXRpbCIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzMKLW1zZ2lkICJBZGQgZ2xvYmFsbHkiCi1tc2dzdHIgIkFqb3V0ZXIgZ2xvYmFsZW1lbnQiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjQ1Ci1tc2dpZCAiVG9vbCBEZXRhaWxzIgotbXNnc3RyICJEw6l0YWlscyBzdXIgbCdvdXRpbCIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NDgKLW1zZ2lkICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiIKLW1zZ3N0ciAiVXRpbGlzZXIgbGVzIHPDqXBhcmF0ZXVycyAnLycgcG91ciBjcsOpZXIgdW4gYXJicmUgZGUgc291cy1tZW51cyA6IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo2MQotbXNnaWQgIkNvbW1hbmQ6IgotbXNnc3RyICJDb21tYW5kZSA6IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo3NAotbXNnaWQgIlNob3cgYSBkaWFsb2cgYmVmb3JlIHJ1bm5pbmciCi1tc2dzdHIgIk1vbnRyZXIgdW5lIGJvw650ZSBkZSBkaWFsb2d1ZSBhdmFudCBsZSBsYW5jZW1lbnQiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjgwCi1tc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJvciBjZCB0byB0aGUgcGF0aCBhbmQgdXNlXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorInRvIHB1c2ggdGhlbSB0byBhIHJlbW90ZS5cbiIKKyJcbiIKIG1zZ3N0ciAiIgotIkRlbWFuZGVyIMOgIGwndXRpbGlzYXRldXIgZGUgc8OpbGVjdGlvbm5lciB1bmUgcsOpdmlzaW9uIChjaGFuZ2UgJFJFVklTSU9OKSIKKyJcbiIKKyJWZXVpbGxleiBlc3NheWVyXG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJvdSBiaWVuIGNoYW5nZXogZGUgcsOpcGVydG9pcmUgZXQgdXRpbGlzZXpcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisicG91ciBsZXMgcG91c3NlciB2ZXJzIHVuIHNlcnZldXIgZGlzdGFudC5cbiIKKyJcbiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6ODUKLW1zZ2lkICJBc2sgdGhlIHVzZXIgZm9yIGFkZGl0aW9uYWwgYXJndW1lbnRzIChzZXRzICRBUkdTKSIKLW1zZ3N0ciAiRGVtYW5kZXIgw6AgbCd1dGlsaXNhdGV1ciBkZXMgYXJndW1lbnRzIHN1cHBsw6ltZW50YWlyZXMgKGNoYW5nZSAkQVJHUykiCisjOiB0cmFuc3BvcnQuYzoxMDU2Cittc2dpZCAiQWJvcnRpbmcuIgorbXNnc3RyICJBYmFuZG9uLiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6OTIKLW1zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCi1tc2dzdHIgIk5lIHBhcyBtb250cmVyIGxhIGZlbsOqdHJlIGRlIHNvcnRpZSBkZXMgY29tbWFuZGVzIgorIzogdHJhbnNwb3J0LmM6MTIwMQorbXNnaWQgImZhaWxlZCB0byBwdXNoIGFsbCBuZWVkZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIHBvdXNzw6llIGRlIHRvdXMgbGVzIHNvdXMtbW9kdWxlcyBuw6ljZXNzYWlyZXMiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjk3Ci1tc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKLW1zZ3N0ciAiTGFuY2VyIHNldWxlbWVudCBzaSB1biBkaWZmIGVzdCBzw6lsZWN0aW9ubsOpICgkRklMRU5BTUUgbm9uIHZpZGUpIgorIzogdHJhbnNwb3J0LmM6MTM0NSB0cmFuc3BvcnQtaGVscGVyLmM6NjU3Cittc2dpZCAib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgIm9wdGlvbiBub24gc3VwcG9ydMOpZSBwYXIgbGUgcHJvdG9jb2xlIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjEKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgbmFtZSBmb3IgdGhlIHRvb2wuIgotbXNnc3RyICJNZXJjaSBkZSBmb3VybmlyIHVuIG5vbSBwb3VyIGwnb3V0aWwuIgorIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxIHRyYW5zcG9ydC1oZWxwZXIuYzo5MAorbXNnaWQgImZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSBsJ8OpY3JpdHVyZSB0b3RhbGUgc3VyIGwnYXNzaXN0YW50IGRpc3RhbnQiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjEyOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIkwnb3V0aWwgJyVzJyBleGlzdGUgZMOpasOgLiIKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgcmVtb3RlIGhlbHBlciBmb3IgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIHVuIGFzc2lzdGFudCBkaXN0YW50IHBvdXIgJyVzJyIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTUxCi0jLCB0Y2wtZm9ybWF0CisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTYwIHRyYW5zcG9ydC1oZWxwZXIuYzo1NzEKK21zZ2lkICJjYW4ndCBkdXAgaGVscGVyIG91dHB1dCBmZCIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgZHVwbGlxdWVyIGxlIGRlc2NyaXB0ZXVyIGRlIGZsdXggZGUgc29ydGllIGRlIGwnYXNzaXN0YW50IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjExCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDb3VsZCBub3QgYWRkIHRvb2w6XG4iCisidW5rbm93biBtYW5kYXRvcnkgY2FwYWJpbGl0eSAlczsgdGhpcyByZW1vdGUgaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyICIKKyJ2ZXJzaW9uIG9mIEdpdCIKK21zZ3N0ciAiIgorImNhcGFjaXTDqSBvYmxpZ2F0b2lyZSBpbmNvbm51ZSAlc8KgOyBjZXQgYXNzaXN0YW50IGRpc3RhbnQgcmVxdWllcnQgIgorInByb2JhYmxlbWVudCB1bmUgdW5lIG5vdXZlbGxlIHZlcnNpb24gZGUgR2l0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjE3Cittc2dpZCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IgorbXNnc3RyICJjZXQgYXNzaXN0YW50IGRpc3RhbnQgZGV2cmFpdCBzdXBwb3J0ZXIgbGEgY2FwYWNpdMOpIHJlZnNwZWMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyODQgdHJhbnNwb3J0LWhlbHBlci5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIKK21zZ3N0ciAiJXMgYSBkaXQgZGUgbWFuacOocmUgaW5hdHRlbmR1ZcKgOiAnJXMnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsc28gbG9ja2VkICVzIgorbXNnc3RyICIlcyBhIGF1c3NpIHZlcnJvdWlsbMOpICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDkzCittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtaW1wb3J0IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxhbmNlciBmYXN0LWltcG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjUxNgorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1pbXBvcnQiCittc2dzdHIgImVycmV1ciBhdSBsYW5jZW1lbnQgZGUgZmFzdC1pbXBvcnQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1NDUgdHJhbnNwb3J0LWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGEgcsOpZiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIgorbXNnc3RyICJyw6lwb25zZSBpbmNvbm51ZSDDoCBjb25uZWN0wqA6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEyCittc2dpZCAic2V0dGluZyByZW1vdGUgc2VydmljZSBwYXRoIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgIiIKKyJsYSBzcMOpY2lmaWNhdGlvbiBkdSBjaGVtaW4gZGUgc2VydmljZSBkaXN0YW50IG4nZXN0IHBhcyBzdXBwb3J0w6llIHBhciBsZSAiCisicHJvdG9jb2xlIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjE0Cittc2dpZCAiaW52YWxpZCByZW1vdGUgc2VydmljZSBwYXRoIgorbXNnc3RyICJjaGVtaW4gZGUgc2VydmljZSBkaXN0YW50IGludmFsaWRlIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNvbm5lY3QgdG8gc3Vic2VydmljZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzZSBjb25uZWN0ZXIgYXUgc291cy1zZXJ2aWNlICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIG9rL2Vycm9yLCBoZWxwZXIgc2FpZCAnJXMnIgorbXNnc3RyICJvay9lcnJvciBhdHRlbmR1LCBsJ2Fzc2lzdGFudCBhIGRpdCAnJXMnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciByZXBvcnRlZCB1bmV4cGVjdGVkIHN0YXR1cyBvZiAlcyIKK21zZ3N0ciAibCdhc3Npc3RhbnQgYSByZW52b3nDqSB1biBzdGF0dXQgZGUgcmV0b3VyIGluYXR0ZW5kdSAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCBkcnktcnVuIgorbXNnc3RyICJsJ2Fzc2lzdGFudCAlcyBuZSBnw6hyZSBwYXMgZHJ5LXJ1biIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCIKK21zZ3N0ciAibCdhc3Npc3RhbnQgJXMgbmUgZ8OocmUgcGFzIC0tc2lnbmVkIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkPWlmLWFza2VkIgorbXNnc3RyICJsJ2Fzc2lzdGFudCAlcyBuZSBnw6hyZSBwYXMgLS1zaWduZWQ9aWYtYXNrZWQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMiCittc2dzdHIgImwnYXNzaXN0YW50ICVzIG5lIGfDqHJlIHBhcyAtLWF0b21pYyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAncHVzaC1vcHRpb24nIgorbXNnc3RyICJsJ2Fzc2lzdGFudCAlcyBuZSBnw6hyZSBwYXMgJ3B1c2gtb3B0aW9uJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk2NQorbXNnaWQgInJlbW90ZS1oZWxwZXIgZG9lc24ndCBzdXBwb3J0IHB1c2g7IHJlZnNwZWMgbmVlZGVkIgorbXNnc3RyICIiCisibCdhc3Npc3RhbnQgJXMgbmUgZ8OocmUgcGFzIHB1c2jCoDsgdW4gc3DDqWNpZmljYXRldXIgZGUgcsOpZsOpcmVuY2UgZXN0ICIKKyJuw6ljZXNzYWlyZSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAnZm9yY2UnIgorbXNnc3RyICJsJ2Fzc2lzdGFudCAlcyBuZSBnw6hyZSBwYXMgJ2ZvcmNlJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwMTcKK21zZ2lkICJjb3VsZG4ndCBydW4gZmFzdC1leHBvcnQiCittc2dzdHIgImltcG9zc2libGUgZGUgbGFuY2VyIGZhc3QtZXhwb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAyMgorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1leHBvcnQiCittc2dzdHIgImVycmV1ciBhdSBsYW5jZW1lbnQgZGUgZmFzdC1leHBvcnQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyByZWZzIGluIGNvbW1vbiBhbmQgbm9uZSBzcGVjaWZpZWQ7IGRvaW5nIG5vdGhpbmcuXG4iCisiUGVyaGFwcyB5b3Ugc2hvdWxkIHNwZWNpZnkgYSBicmFuY2ggc3VjaCBhcyAnbWFzdGVyJy5cbiIKK21zZ3N0ciAiIgorIkF1Y3VuZSByw6lmw6lyZW5jZSBlbiBjb21tdW4gZXQgYXVjdW5lIHNww6ljZmnDqWXCoDsgcmllbiDDoCBmYWlyZS5cbiIKKyJWb3VzIGRldnJpZXogcGV1dC3DqnRyZSBzcMOpY2lmaWVyIHVuZSBicmFuY2hlIHRlbGxlIHF1ZSAnbWFzdGVyJy5cbiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHJlc3BvbnNlIGluIHJlZiBsaXN0OiAlcyIKK21zZ3N0ciAicsOpcG9uc2UgbWFsZm9ybcOpZSBkYW5zIGxlIGxpc3RlIGRlIHLDqWZzwqA6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkKCVzKSBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSByZWFkKCVzKSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGUoJXMpIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIHdyaXRlKCVzKSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGhyZWFkIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGR1IGZpbCBkJ2V4w6ljdXRpb24gJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiCittc2dzdHIgIsOpY2hlYyBkZSBqb25jdGlvbiBkdSBmaWwgZCdleMOpY3V0aW9uICVzwqA6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM3MSB0cmFuc3BvcnQtaGVscGVyLmM6MTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YTogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpbWFycmVyIGxlIGZpbCBkJ2V4w6ljdXRpb24gcG91ciBjb3BpZXIgbGVzIGRvbm7DqWVzwqA6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCB0byB3YWl0IgorbXNnc3RyICLDqWNoZWMgZHUgcHJvY2Vzc3VzICVzIHBvdXIgbCdhdHRlbnRlIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGR1IHByb2Nlc3N1cyAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MzQgdHJhbnNwb3J0LWhlbHBlci5jOjE0NDMKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBkw6ltYXJyZXIgbGUgZmlsIGQnZXjDqWN1dGlvbiBwb3VyIGNvcGllciBsZXMgZG9ubsOpZXMiCisKKyM6IHRyZWUtd2Fsay5jOjMyCittc2dpZCAidG9vLXNob3J0IHRyZWUgb2JqZWN0IgorbXNnc3RyICJvYmpldCBhcmJyZSB0cm9wIGNvdXJ0IgorCisjOiB0cmVlLXdhbGsuYzozOAorbXNnaWQgIm1hbGZvcm1lZCBtb2RlIGluIHRyZWUgZW50cnkiCittc2dzdHIgIm1vZGUgaW52YWxpZGUgZGFucyBsJ2VudHLDqWUgZCdhcmJyZSIKKworIzogdHJlZS13YWxrLmM6NDIKK21zZ2lkICJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICJub20gZGUgZmljaGllciB2aWRlIGRhbnMgdW5lIGVudHLDqWUgZGUgbCdhcmJyZSIKKworIzogdHJlZS13YWxrLmM6MTE3Cittc2dpZCAidG9vLXNob3J0IHRyZWUgZmlsZSIKK21zZ3N0ciAiZmljaGllciBhcmJyZSB0cm9wIGNvdXJ0IgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiVm9zIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyBhdXggZmljaGllcnMgc3VpdmFudHMgc2VyYWllbnQgw6ljcmFzw6llcyBwYXIgIgorImwnZXh0cmFjdGlvbsKgOlxuIgorIiUlc1ZldWlsbGV6IHZhbGlkZXIgb3UgcmVtaXNlciB2b3MgbW9kaWZpY2F0aW9ucyBhdmFudCBkZSBiYXNjdWxlciBkZSAiCisiYnJhbmNoZS4iCisKKyM6IHVucGFjay10cmVlcy5jOjExMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiVm9zIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyBhdXggZmljaGllcnMgc3VpdmFudHMgc2VyYWllbnQgw6ljcmFzw6llcyBwYXIgIgorImwnZXh0cmFjdGlvbsKgOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiVm9zIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyBhdXggZmljaGllcnMgc3VpdmFudHMgc2VyYWllbnQgw6ljcmFzw6llcyBwYXIgbGEgIgorImZ1c2lvbsKgOlxuIgorIiUlc1ZldWlsbGV6IHZhbGlkZXIgb3UgcmVtaXNlciB2b3MgbW9kaWZpY2F0aW9ucyBhdmFudCBsYSBmdXNpb24uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIlZvcyBtb2RpZmljYXRpb25zIGxvY2FsZXMgYXV4IGZpY2hpZXJzIHN1aXZhbnRzIHNlcmFpZW50IMOpY3Jhc8OpZXMgcGFyIGxhICIKKyJmdXNpb27CoDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIlZvcyBtb2RpZmljYXRpb25zIGxvY2FsZXMgYXV4IGZpY2hpZXJzIHN1aXZhbnRzIHNlcmFpZW50IMOpY3Jhc8OpZXMgcGFyICVzwqA6XG4iCisiJSVzVmV1aWxsZXogdmFsaWRlciBvdSByZW1pc2VyIHZvcyBtb2RpZmljYXRpb25zIGF2YW50ICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJWb3MgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIGF1eCBmaWNoaWVycyBzdWl2YW50cyBzZXJhaWVudCDDqWNyYXPDqWVzIHBhciAlc8KgOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIHRoZW06XG4iCiAiJXMiCiBtc2dzdHIgIiIKLSJJbXBvc3NpYmxlIGQnYWpvdXRlciBsJ291dGlsIDpcbiIKKyJMYSBtaXNlIMOgIGpvdXIgZGVzIHLDqXBlcnRvaXJlcyBzdWl2YW50cyBlZmZhY2VyYWl0IGxlcyBmaWNoaWVycyBub24gc3VpdmlzICIKKyJjb250ZW51c8KgOlxuIgogIiVzIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTAKLW1zZ2lkICJSZW1vdmUgVG9vbCIKLW1zZ3N0ciAiU3VwcHJpbWVyIGwnb3V0aWwiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjE5NgotbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgotbXNnc3RyICJTdXBwcmltZXIgZGVzIGNvbW1hbmRlcyBkJ291dGlsIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMDAKLW1zZ2lkICJSZW1vdmUiCi1tc2dzdHIgIlN1cHByaW1lciIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjM2Ci1tc2dpZCAiKEJsdWUgZGVub3RlcyByZXBvc2l0b3J5LWxvY2FsIHRvb2xzKSIKLW1zZ3N0ciAiKExlIGJsZXUgaW5kaXF1ZSBkZXMgb3V0aWxzIGxvY2F1eCBhdSBkw6lww7R0KSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6Mjk3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVuIENvbW1hbmQ6ICVzIgotbXNnc3RyICJMYW5jZXIgY29tbWFuZGUgOiAlcyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzExCi1tc2dpZCAiQXJndW1lbnRzIgotbXNnc3RyICJBcmd1bWVudHMiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjM0OAotbXNnaWQgIk9LIgotbXNnc3RyICJPSyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gJXMiCi1tc2dzdHIgIlLDqWN1cMOpcmF0aW9uIGRlcyBkZXJuacOocmVzIG1vZGlmaWNhdGlvbnMgZGUgJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjE4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAicmVtb3RlIHBydW5lICVzIgotbXNnc3RyICJwdXJnZXIgw6AgZGlzdGFuY2UgJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjE5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gJXMiCi1tc2dzdHIgIk5ldHRveWVyIGxlcyBicmFuY2hlcyBkZSBzdWl2aSBzdXBwcmltw6llcyBkZSAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQdXNoaW5nIGNoYW5nZXMgdG8gJXMiCi1tc2dzdHIgIkxlcyBtb2RpZmljYXRpb25zIHNvbnQgcG91c3PDqWVzIHZlcnMgJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjY0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWlycm9yaW5nIHRvICVzIgotbXNnc3RyICJEdXBsaXF1ZXIgZGFucyAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6ODIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQdXNoaW5nICVzICVzIHRvICVzIgotbXNnc3RyICJQb3Vzc2UgJXMgJXMgdmVycyAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTAwCi1tc2dpZCAiUHVzaCBCcmFuY2hlcyIKLW1zZ3N0ciAiUG91c3NlciBicmFuY2hlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTE0Ci1tc2dpZCAiU291cmNlIEJyYW5jaGVzIgotbXNnc3RyICJCcmFuY2hlcyBzb3VyY2UiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjEzMQotbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCi1tc2dzdHIgIkTDqXDDtHQgZGUgZGVzdGluYXRpb24iCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjE2OQotbXNnaWQgIlRyYW5zZmVyIE9wdGlvbnMiCi1tc2dzdHIgIk9wdGlvbnMgZGUgdHJhbnNmZXJ0IgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzEKLW1zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKKyM6IHVucGFjay10cmVlcy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgogbXNnc3RyICIiCi0iRm9yY2VyIGwnw6ljcmFzZW1lbnQgZCd1bmUgYnJhbmNoZSBleGlzdGFudGUgKHBldXQgc3VwcHJpbWVyIGRlcyAiCisiTGVzIGZpY2hpZXJzIHN1aXZhbnRzIG5vbiBzdWl2aXMgZGUgbGEgY29waWUgZGUgdHJhdmFpbCBzZXJhaWVudCBlZmZhY8OpcyBwYXIgIgorImwnZXh0cmFjdGlvbsKgOlxuIgorIiUlc1ZldWlsbGV6IHJlbm9tbWVyIG91IGVmZmFjZXIgY2VzIGZpY2hpZXJzIGF2YW50IGRlIGJhc2N1bGVyIGRlIGJyYW5jaGUuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkxlcyBmaWNoaWVycyBzdWl2YW50cyBub24gc3VpdmlzIHNlcmFpZW50IGVmZmFjw6lzIHBhciBsJ2V4dHJhY3Rpb27CoDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJMZXMgZmljaGllcnMgc3VpdmFudHMgbm9uIHN1aXZpcyBkZSBsYSBjb3BpZSBkZSB0cmF2YWlsIHNlcmFpZW50IGVmZmFjw6lzIHBhciAiCisibGEgZnVzaW9uwqA6XG4iCisiJSVzVmV1aWxsZXogcmVub21tZXIgb3UgZWZmYWNlciBjZXMgZmljaGllcnMgYXZhbnQgbGEgZnVzaW9uLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJMZXMgZmljaGllcnMgc3VpdmFudHMgbm9uIHN1aXZpcyBzZXJhaWVudCBlZmZhY8OpcyBwYXIgbGEgZnVzaW9uwqA6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiTGVzIGZpY2hpZXJzIHN1aXZhbnRzIG5vbiBzdWl2aXMgZGUgbGEgY29waWUgZGUgdHJhdmFpbCBzZXJhaWVudCBlZmZhY8OpcyBwYXIgIgorIiVzwqA6XG4iCisiJSVzVmV1aWxsZXogcmVub21tZXIgb3UgZWZmYWNlciBjZXMgZmljaGllcnMgYXZhbnQgJXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkxlcyBmaWNoaWVycyBzdWl2YW50cyBub24gc3VpdmlzIHNlcmFpZW50IGVmZmFjw6lzIHBhciAlc8KgOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkxlcyBmaWNoaWVycyBzdWl2YW50cyBub24gc3VpdmlzIGRlIGxhIGNvcGllIGRlIHRyYXZhaWwgc2VyYWllbnQgw6ljcmFzw6lzIHBhciAiCisibCdleHRyYWN0aW9uwqA6XG4iCisiJSVzVmV1aWxsZXogcmVub21tZXIgb3UgZWZmYWNlciBjZXMgZmljaGllcnMgYXZhbnQgZGUgYmFzY3VsZXIgZGUgYnJhbmNoZS4iCisKKyM6IHVucGFjay10cmVlcy5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJMZXMgZmljaGllcnMgc3VpdmFudHMgbm9uIHN1aXZpcyBzZXJhaWVudCDDqWNyYXPDqXMgcGFyIGwnZXh0cmFjdGlvbsKgOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJMZXMgZmljaGllcnMgc3VpdmFudHMgbm9uIHN1aXZpcyBkZSBsYSBjb3BpZSBkZSB0cmF2YWlsIHNlcmFpZW50IGVmZmFjw6lzIHBhciAiCisibGEgZnVzaW9uwqA6XG4iCisiJSVzVmV1aWxsZXogcmVub21tZXIgb3UgZWZmYWNlciBjZXMgZmljaGllcnMgYXZhbnQgbGEgZnVzaW9uLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisiTGVzIGZpY2hpZXJzIHN1aXZhbnRzIG5vbiBzdWl2aXMgc2VyYWllbnQgw6ljcmFzw6lzIHBhciBsYSBmdXNpb27CoDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiTGVzIGZpY2hpZXJzIHN1aXZhbnRzIG5vbiBzdWl2aXMgZGUgbGEgY29waWUgZGUgdHJhdmFpbCBzZXJhaWVudCDDqWNyYXPDqXMgcGFyICIKKyIlc8KgOlxuIgorIiUlc1ZldWlsbGV6IHJlbm9tbWVyIG91IGVmZmFjZXIgY2VzIGZpY2hpZXJzIGF2YW50ICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiTGVzIGZpY2hpZXJzIHN1aXZhbnRzIG5vbiBzdWl2aXMgc2VyYWllbnQgw6ljcmFzw6lzIHBhciAlc8KgOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudHJ5ICclcycgb3ZlcmxhcHMgd2l0aCAnJXMnLiAgQ2Fubm90IGJpbmQuIgorbXNnc3RyICJMJ2VudHLDqWUgJyVzJyBzdXJjaGFyZ2UgYXZlYyAnJXMnLiBBZmZlY3RhdGlvbiBpbXBvc3NpYmxlLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHNwYXJzZSBjaGVja291dDogdGhlIGZvbGxvd2luZyBlbnRyaWVzIGFyZSBub3QgdXAgdG8gZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIk1pc2Ugw6Agam91ciBkJ2V4dHJhY3Rpb24gY3JldXNlIGltcG9zc2libGXCoDogbGVzIGVudHLDqWVzIHN1aXZhbnRlcyBuZSBzb250ICIKKyJwYXMgw6Agam91csKgOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiTGVzIGZpY2hpZXJzIHN1aXZhbnRzIGRlIGxhIGNvcGllIGRlIHRyYXZhaWwgc2VyYWllbnQgw6ljcmFzw6lzIHBhciBsYSBtaXNlIMOgICIKKyJqb3VyIHBhciBsJ2V4dHJhY3Rpb24gY3JldXNlwqA6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkxlcyBmaWNoaWVycyBzdWl2YW50cyBkZSBsYSBjb3BpZSBkZSB0cmF2YWlsIHNlcmFpZW50IHN1cHByaW3DqXMgcGFyIGxhIG1pc2UgIgorIsOgIGpvdXIgcGFyIGV4dHJhY3Rpb24gY3JldXNlwqA6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBzdWJtb2R1bGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJNaXNlIMOgIGpvdXIgaW1wb3NzaWJsZSBwb3VyIGxlIHNvdXMtbW9kdWxlwqA6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZ1xuIgorbXNnc3RyICJBYmFuZG9uXG4iCisKKyM6IHVucGFjay10cmVlcy5jOjMxNworbXNnaWQgIlVwZGF0aW5nIGZpbGVzIgorbXNnc3RyICJNaXNlIMOgIGpvdXIgZGVzIGZpY2hpZXJzIgorCisjOiB1bnBhY2stdHJlZXMuYzozNDkKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBwYXRocyBoYXZlIGNvbGxpZGVkIChlLmcuIGNhc2Utc2Vuc2l0aXZlIHBhdGhzXG4iCisib24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pIGFuZCBvbmx5IG9uZSBmcm9tIHRoZSBzYW1lXG4iCisiY29sbGlkaW5nIGdyb3VwIGlzIGluIHRoZSB3b3JraW5nIHRyZWU6XG4iCittc2dzdHIgIiIKKyJMZXMgY2hlbWlucyBzdWl2YW50cyBzb250IGVuIGNvbGxpc2lvbiAocGFyIGV4ZW1wbGUgcGFyIGRlcyBjaGVtaW5zXG4iCisic2Vuc2libGVzIMOgIGxhIGNhc3NlIGRhbnMgdW5lIHN5c3TDqG1lIGRlIGZpY2hpZXIgaW5zZW5zaWJsZSkgZXQgdW5cbiIKKyJzZXVsIGR1IGdyb3VwZSBlbiBjb2xsaXNpb24gZXN0IGRhbnMgbCdhcmJyZSBkZSB0cmF2YWlswqA6XG4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0NDUKK21zZ2lkICJVcGRhdGluZyBpbmRleCBmbGFncyIKK21zZ3N0ciAiTWlzZSDDoCBqb3VyIGRlcyBkcmFwZWF1eCBkZSBsJ2luZGV4IgorCisjOiB1cmxtYXRjaC5jOjE2MworbXNnaWQgImludmFsaWQgVVJMIHNjaGVtZSBuYW1lIG9yIG1pc3NpbmcgJzovLycgc3VmZml4IgorbXNnc3RyICJub20gZGUgc2Now6ltYSBkJ1VSTCBpbnZhbGlkZSBvdSBzdWZmaXhlICc6Ly8nIG1hbnF1YW50IgorCisjOiB1cmxtYXRjaC5jOjE4NyB1cmxtYXRjaC5jOjM0NiB1cmxtYXRjaC5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgInPDqXF1ZW5jZSBkJ8OpY2hhcHBlbWVudCAlWFggaW52YWxpZGUiCisKKyM6IHVybG1hdGNoLmM6MjE1Cittc2dpZCAibWlzc2luZyBob3N0IGFuZCBzY2hlbWUgaXMgbm90ICdmaWxlOiciCittc2dzdHIgImjDtHRlIG1hbnF1YW50IGV0IGxlIHNjaMOpbWEgbidlc3QgcGFzICdmaWxlOiciCisKKyM6IHVybG1hdGNoLmM6MjMyCittc2dpZCAiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIKK21zZ3N0ciAidW5lIFVSTCAnZmlsZTonIG5lIHBldXQgcGFzIGNvbnRlbmlyIGRlIG51bcOpcm8gZGUgcG9ydCIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICJjYXJhY3TDqHJlcyBpbnZhbGlkZXMgZGFucyBsZSBub20gZCdow7R0ZSIKKworIzogdXJsbWF0Y2guYzoyOTIgdXJsbWF0Y2guYzozMDMKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJudW3DqXJvIGRlIHBvcnQgaW52YWxpZGUiCisKKyM6IHVybG1hdGNoLmM6MzcxCittc2dpZCAiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIKK21zZ3N0ciAic2VnbWVudCBkZSBjaGVtaW4gJy4uJyBpbnZhbGlkZSIKKworIzogd2Fsa2VyLmM6MTcwCittc2dpZCAiRmV0Y2hpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUsOpY3Vww6lyYXRpb24gZGVzIG9iamV0cyIKKworIzogd29ya3RyZWUuYzoyNTkgYnVpbHRpbi9hbS5jOjIwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIGxlY3R1cmUgZGUgJyVzJyIKKworIzogd29ya3RyZWUuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhdCBtYWluIHdvcmtpbmcgdHJlZSBpcyBub3QgdGhlIHJlcG9zaXRvcnkgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiJyVzJyBkYW5zIGwnYXJicmUgZGUgdHJhdmFpbCBwcmluY2lwYWwgbidlc3QgcGFzIGxlIHLDqXBlcnRvaXJlIGRlIGTDqXDDtHQiCisKKyM6IHdvcmt0cmVlLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsZSBkb2VzIG5vdCBjb250YWluIGFic29sdXRlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZSBsb2NhdGlvbiIKK21zZ3N0ciAiIgorImxlIGZpY2hpZXIgJyVzJyBuZSBjb250aWVudCBwYXMgZGUgY2hlbWluIGFic29sdSDDoCBsJ2VtcGxhY2VtZW50IGRlIGwnYXJicmUgIgorImRlIHRyYXZhaWwiCisKKyM6IHdvcmt0cmVlLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiclcycgbidleGlzdGUgcGFzIgorCisjOiB3b3JrdHJlZS5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIC5naXQgZmlsZSwgZXJyb3IgY29kZSAlZCIKK21zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdW4gZmljaGllciAuZ2l0LCBjb2RlIGQnZXJyZXVyICVkIgorCisjOiB3b3JrdHJlZS5jOjM0MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IGJhY2sgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJyBuZSBwb2ludGUgcGFzIGVuIHJldG91ciBzdXIgJyVzJyIKKworIzogd3JhcHBlci5jOjE4NiB3cmFwcGVyLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgJyVzJyBlbiBsZWN0dXJlL8OpY3JpdHVyZSIKKworIzogd3JhcHBlci5jOjM4NyB3cmFwcGVyLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FjY8OpZGVyIMOgICclcyciCisKKyM6IHdyYXBwZXIuYzo1OTYKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImltcG9zc2libGUgZCdhY2PDqWRlciBhdSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIGNvdXJhbnQiCisKKyM6IHd0LXN0YXR1cy5jOjE1OAorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiQ2hlbWlucyBub24gZnVzaW9ubsOpcyA6IgorCisjOiB3dC1zdGF0dXMuYzoxODcgd3Qtc3RhdHVzLmM6MjE5Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpY2hpZXI+Li4uXCIgcG91ciBkw6lzaW5kZXhlcikiCisKKyM6IHd0LXN0YXR1cy5jOjE5MCB3dC1zdGF0dXMuYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc3RvcmUgLS1zb3VyY2U9JXMgLS1zdGFnZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKyIgICh1dGlsaXNleiBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWNoaWVyPi4uLlwiIHBvdXIgIgorImTDqXNpbmRleGVyKSIKKworIzogd3Qtc3RhdHVzLmM6MTkzIHd0LXN0YXR1cy5jOjIyNQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAodXRpbGlzZXogXCJnaXQgcm0gLS1jYWNoZWQgPGZpY2hpZXI+Li4uXCIgcG91ciBkw6lzaW5kZXhlcikiCisKKyM6IHd0LXN0YXR1cy5jOjE5NworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAodXRpbGlzZXogXCJnaXQgYWRkIDxmaWNoaWVyPi4uLlwiIHBvdXIgbWFycXVlciBjb21tZSByw6lzb2x1KSIKKworIzogd3Qtc3RhdHVzLmM6MTk5IHd0LXN0YXR1cy5jOjIwMworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorIiAgKHV0aWxpc2V6IFwiZ2l0IGFkZC9ybSA8ZmljaGllcj4uLi5cIiBzaSBuw6ljZXNzYWlyZSBwb3VyIG1hcnF1ZXIgY29tbWUgIgorInLDqXNvbHUpIgorCisjOiB3dC1zdGF0dXMuYzoyMDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAodXRpbGlzZXogXCJnaXQgcm0gPGZpY2hpZXI+Li4uXCIgcG91ciBtYXJxdWVyIGNvbW1lIHLDqXNvbHUpIgorCisjOiB3dC1zdGF0dXMuYzoyMTEgd3Qtc3RhdHVzLmM6MTA3NAorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiTW9kaWZpY2F0aW9ucyBxdWkgc2Vyb250IHZhbGlkw6llcyA6IgorCisjOiB3dC1zdGF0dXMuYzoyMzQgd3Qtc3RhdHVzLmM6MTA4MworbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAiTW9kaWZpY2F0aW9ucyBxdWkgbmUgc2Vyb250IHBhcyB2YWxpZMOpZXMgOiIKKworIzogd3Qtc3RhdHVzLmM6MjM4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgICh1dGlsaXNleiBcImdpdCBhZGQgPGZpY2hpZXI+Li4uXCIgcG91ciBtZXR0cmUgw6Agam91ciBjZSBxdWkgc2VyYSB2YWxpZMOpKSIKKworIzogd3Qtc3RhdHVzLmM6MjQwCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgICh1dGlsaXNleiBcImdpdCBhZGQvcm0gPGZpY2hpZXI+Li4uXCIgcG91ciBtZXR0cmUgw6Agam91ciBjZSBxdWkgc2VyYSAiCisidmFsaWTDqSkiCisKKyM6IHd0LXN0YXR1cy5jOjI0MQorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmVzdG9yZSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisiICAodXRpbGlzZXogXCJnaXQgcmVzdG9yZSA8ZmljaGllcj4uLi5cIiBwb3VyIGFubnVsZXIgbGVzIG1vZGlmaWNhdGlvbnMgZGFucyAiCisibGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCkiCisKKyM6IHd0LXN0YXR1cy5jOjI0MworbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorIiAgKHZhbGlkZXIgb3UgYW5udWxlciBsZSBjb250ZW51IG5vbiBzdWl2aSBvdSBtb2RpZmnDqSBkYW5zIGxlcyBzb3VzLW1vZHVsZXMpIgorCisjOiB3dC1zdGF0dXMuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgICh1dGlsaXNleiBcImdpdCAlcyA8ZmljaGllcj4uLi5cIiBwb3VyIGluY2x1cmUgZGFucyBjZSBxdWkgc2VyYSB2YWxpZMOpKSIKKworIzogd3Qtc3RhdHVzLmM6MjY4Cittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAic3VwcHJpbcOpIGRlcyBkZXV4IGPDtHTDqXMgOiIKKworIzogd3Qtc3RhdHVzLmM6MjcwCittc2dpZCAiYWRkZWQgYnkgdXM6IgorbXNnc3RyICJham91dMOpIHBhciBub3VzIDoiCisKKyM6IHd0LXN0YXR1cy5jOjI3MgorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgInN1cHByaW3DqSBwYXIgZXV4IDoiCisKKyM6IHd0LXN0YXR1cy5jOjI3NAorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICJham91dMOpIHBhciBldXggOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc2Cittc2dpZCAiZGVsZXRlZCBieSB1czoiCittc2dzdHIgInN1cHByaW3DqSBwYXIgbm91cyA6IgorCisjOiB3dC1zdGF0dXMuYzoyNzgKK21zZ2lkICJib3RoIGFkZGVkOiIKK21zZ3N0ciAiYWpvdXTDqSBkZSBkZXV4IGPDtHTDqXMgOiIKKworIzogd3Qtc3RhdHVzLmM6MjgwCittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgIm1vZGlmacOpIGRlcyBkZXV4IGPDtHTDqXMgOiIKKworIzogd3Qtc3RhdHVzLmM6MjkwCittc2dpZCAibmV3IGZpbGU6IgorbXNnc3RyICJub3V2ZWF1IGZpY2hpZXLCoDoiCisKKyM6IHd0LXN0YXR1cy5jOjI5MgorbXNnaWQgImNvcGllZDoiCittc2dzdHIgImNvcGnDqcKgOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk0Cittc2dpZCAiZGVsZXRlZDoiCittc2dzdHIgInN1cHByaW3DqcKgOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk2Cittc2dpZCAibW9kaWZpZWQ6IgorbXNnc3RyICJtb2RpZmnDqcKgOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk4Cittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgInJlbm9tbcOpwqA6IgorCisjOiB3dC1zdGF0dXMuYzozMDAKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAibW9kaWYuIHR5cGXCoDoiCisKKyM6IHd0LXN0YXR1cy5jOjMwMgorbXNnaWQgInVua25vd246IgorbXNnc3RyICJpbmNvbm51wqA6IgorCisjOiB3dC1zdGF0dXMuYzozMDQKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgIm5vbiBmdXNpb25uw6nCoDoiCisKKyM6IHd0LXN0YXR1cy5jOjM4NAorbXNnaWQgIm5ldyBjb21taXRzLCAiCittc2dzdHIgIm5vdXZlYXV4IGNvbW1pdHMsICIKKworIzogd3Qtc3RhdHVzLmM6Mzg2Cittc2dpZCAibW9kaWZpZWQgY29udGVudCwgIgorbXNnc3RyICJjb250ZW51IG1vZGlmacOpLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM4OAorbXNnaWQgInVudHJhY2tlZCBjb250ZW50LCAiCittc2dzdHIgImNvbnRlbnUgbm9uIHN1aXZpLCAiCisKKyM6IHd0LXN0YXR1cy5jOjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cnkiCittc2dpZF9wbHVyYWwgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyaWVzIgorbXNnc3RyWzBdICJWb3RyZSByZW1pc2FnZSBjb250aWVudCBhY3R1ZWxsZW1lbnQgJWQgZW50csOpZSIKK21zZ3N0clsxXSAiVm90cmUgcmVtaXNhZ2UgY29udGllbnQgYWN0dWVsbGVtZW50ICVkIGVudHLDqWVzIgorCisjOiB3dC1zdGF0dXMuYzo5MzgKK21zZ2lkICJTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKK21zZ3N0ciAiU291cy1tb2R1bGVzIG1vZGlmacOpcyBtYWlzIG5vbiBtaXMgw6Agam91ciA6IgorCisjOiB3dC1zdGF0dXMuYzo5NDAKK21zZ2lkICJTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICJDaGFuZ2VtZW50cyBkdSBzb3VzLW1vZHVsZSDDoCB2YWxpZGVyIDoiCisKKyM6IHd0LXN0YXR1cy5jOjEwMjIKK21zZ2lkICIiCisiRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuXG4iCisiRXZlcnl0aGluZyBiZWxvdyBpdCB3aWxsIGJlIGlnbm9yZWQuIgorbXNnc3RyICIiCisiTmUgdG91Y2hleiBwYXMgw6AgbGEgbGlnbmUgY2ktZGVzc3VzLlxuIgorIlRvdXQgY2UgcXVpIHN1aXQgc2VyYSDDqWxpbWluw6kuIgorCisjOiB3dC1zdGF0dXMuYzoxMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjb21wdXRlIHRoZSBicmFuY2ggYWhlYWQvYmVoaW5kIHZhbHVlcy5cbiIKKyJZb3UgY2FuIHVzZSAnLS1uby1haGVhZC1iZWhpbmQnIHRvIGF2b2lkIHRoaXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlLjJmIHNlY29uZGVzIG9udCDDqXTDqSBuw6ljZXNzYWlyZXMgcG91ciBjYWxjdWxlciBsZXMgdmFsZXVycyBkJ2F2YW5jZS9yZXRhcmQgIgorImRlIGxhIGJyYW5jaGUuXG4iCisiVm91cyBwb3V2ZXogdXRpbGlzZXIgJy0tbm8tYWhlYWQtYmVoaW5kJyBwb3VyIMOpdml0ZXIgY2VjaS5cbiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NAorbXNnaWQgIllvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLiIKK21zZ3N0ciAiVm91cyBhdmV6IGRlcyBjaGVtaW5zIG5vbiBmdXNpb25uw6lzLiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiAgKHLDqWdsZXogbGVzIGNvbmZsaXRzIHB1aXMgbGFuY2V6IFwiZ2l0IGNvbW1pdFwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTE0OQorbXNnaWQgIiAgKHVzZSBcImdpdCBtZXJnZSAtLWFib3J0XCIgdG8gYWJvcnQgdGhlIG1lcmdlKSIKK21zZ3N0ciAiICAodXRpbGlzZXogXCJnaXQgbWVyZ2UgLS1hYm9ydFwiIHBvdXIgYW5udWxlciBsYSBmdXNpb24pIgorCisjOiB3dC1zdGF0dXMuYzoxMTUzCittc2dpZCAiQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLiIKK21zZ3N0ciAiVG91cyBsZXMgY29uZmxpdHMgc29udCByw6lnbMOpcyBtYWlzIGxhIGZ1c2lvbiBuJ2VzdCBwYXMgdGVybWluw6llLiIKKworIzogd3Qtc3RhdHVzLmM6MTE1NgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IGNvbW1pdFwiIHBvdXIgdGVybWluZXIgbGEgZnVzaW9uKSIKKworIzogd3Qtc3RhdHVzLmM6MTE2NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAiVm91cyDDqnRlcyBhdSBtaWxpZXUgZCd1bmUgc2Vzc2lvbiBhbS4iCisKKyM6IHd0LXN0YXR1cy5jOjExNjgKK21zZ2lkICJUaGUgY3VycmVudCBwYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgIkxlIHBhdGNoIGFjdHVlbCBlc3QgdmlkZS4iCisKKyM6IHd0LXN0YXR1cy5jOjExNzIKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChyw6lnbGV6IGxlcyBjb25mbGl0cyBwdWlzIGxhbmNleiBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTc0Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IGFtIC0tc2tpcFwiIHBvdXIgc2F1dGVyIGNlIHBhdGNoKSIKKworIzogd3Qtc3RhdHVzLmM6MTE3NgorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAodXRpbGlzZXogXCJnaXQgYW0gLS1hYm9ydFwiIHBvdXIgcmVzdGF1cmVyIGxhIGJyYW5jaGUgZCdvcmlnaW5lKSIKKworIzogd3Qtc3RhdHVzLmM6MTMwOQorbXNnaWQgImdpdC1yZWJhc2UtdG9kbyBpcyBtaXNzaW5nLiIKK21zZ3N0ciAiZ2l0LXJlYmFzZS10b2RvIGVzdCBtYW5xdWFudC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMTEKK21zZ2lkICJObyBjb21tYW5kcyBkb25lLiIKK21zZ3N0ciAiQXVjdW5lIGNvbW1hbmRlIHLDqWFsaXPDqWUuIgorCisjOiB3dC1zdGF0dXMuYzoxMzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhc3QgY29tbWFuZCBkb25lICglZCBjb21tYW5kIGRvbmUpOiIKK21zZ2lkX3BsdXJhbCAiTGFzdCBjb21tYW5kcyBkb25lICglZCBjb21tYW5kcyBkb25lKToiCittc2dzdHJbMF0gIkRlcm5pw6hyZSBjb21tYW5kZSBlZmZlY3R1w6llICglZCBjb21tYW5kZSBlZmZlY3R1w6llKcKgOiIKK21zZ3N0clsxXSAiRGVybmnDqHJlcyBjb21tYW5kZXMgZWZmZWN0dcOpZXMgKCVkIGNvbW1hbmRlcyBlZmZlY3R1w6llcynCoDoiCisKKyM6IHd0LXN0YXR1cy5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAoc2VlIG1vcmUgaW4gZmlsZSAlcykiCittc2dzdHIgIiAgKHZvaXIgcGx1cyBkYW5zIGxlIGZpY2hpZXIgJXMpIgorCisjOiB3dC1zdGF0dXMuYzoxMzMwCittc2dpZCAiTm8gY29tbWFuZHMgcmVtYWluaW5nLiIKK21zZ3N0ciAiQXVjdW5lIGNvbW1hbmRlIHJlc3RhbnRlLiIKKworIzogd3Qtc3RhdHVzLmM6MTMzMworIywgYy1mb3JtYXQKK21zZ2lkICJOZXh0IGNvbW1hbmQgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kKToiCittc2dpZF9wbHVyYWwgIk5leHQgY29tbWFuZHMgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kcyk6IgorbXNnc3RyWzBdICJQcm9jaGFpbmUgY29tbWFuZGUgw6AgZWZmZWN0dWVyICglZCBjb21tYW5kZSByZXN0YW50ZSnCoDoiCittc2dzdHJbMV0gIlByb2NoYWluZXMgY29tbWFuZGVzIMOgIGVmZmVjdHVlciAoJWQgY29tbWFuZGVzIHJlc3RhbnRlcynCoDoiCisKKyM6IHd0LXN0YXR1cy5jOjEzNDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgdG8gdmlldyBhbmQgZWRpdCkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHBvdXIgdm9pciBldCDDqWRpdGVyKSIKKworIzogd3Qtc3RhdHVzLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiVm91cyDDqnRlcyBlbiB0cmFpbiBkZSByZWJhc2VyIGxhIGJyYW5jaGUgJyVzJyBzdXIgJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNTgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgIlZvdXMgw6p0ZXMgZW4gdHJhaW4gZGUgcmViYXNlci4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNzEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAocsOpZ2xleiBsZXMgY29uZmxpdHMgcHVpcyBsYW5jZXogXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzMKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IHJlYmFzZSAtLXNraXBcIiBwb3VyIHNhdXRlciBjZSBwYXRjaCkiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzUKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiB0byBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgcG91ciBleHRyYWlyZSBsYSBicmFuY2hlIGQnb3JpZ2luZSkiCisKKyM6IHd0LXN0YXR1cy5jOjEzODIKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHRvdXMgbGVzIGNvbmZsaXRzIHNvbnQgcsOpZ2zDqXMgOiBsYW5jZXogXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIlZvdXMgw6p0ZXMgYWN0dWVsbGVtZW50IGVuIHRyYWluIGRlIGZyYWN0aW9ubmVyIHVuIGNvbW1pdCBwZW5kYW50IHVuIHJlYmFzYWdlICIKKyJkZSBsYSBicmFuY2hlICclcycgc3VyICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxMzkxCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIiIKKyJWb3VzIMOqdGVzIGFjdHVlbGxlbWVudCBlbiB0cmFpbiBkZSBmcmFjdGlvbm5lciB1biBjb21taXQgcGVuZGFudCB1biByZWJhc2FnZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEzOTQKK21zZ2lkICIgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKFVuZSBmb2lzIGxhIGNvcGllIGRlIHRyYXZhaWwgbmV0dG95w6llLCBsYW5jZXogXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIlZvdXMgw6p0ZXMgYWN0dWVsbGVtZW50IGVuIHRyYWluIGQnw6lkaXRlciB1biBjb21taXQgcGVuZGFudCB1biByZWJhc2FnZSBkZSBsYSAiCisiYnJhbmNoZSAnJXMnIHN1ciAnJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTQwMworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAiIgorIlZvdXMgw6p0ZXMgYWN0dWVsbGVtZW50IGVuIHRyYWluIGQnw6lkaXRlciB1biBjb21taXQgcGVuZGFudCB1biByZWJhc2FnZS4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCBjb21taXQgLS1hbWVuZFwiIHBvdXIgY29ycmlnZXIgbGUgY29tbWl0IGFjdHVlbCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0MDgKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCittc2dzdHIgIiIKKyIgICh1dGlsaXNleiBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIHF1YW5kIHZvdXMgYXZleiBlZmZlY3R1w6kgdG91dGVzIHZvcyAiCiAibW9kaWZpY2F0aW9ucykiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE3NQotbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgotbXNnc3RyICJVdGlsaXNlciBkZXMgcGV0aXRzIHBhcXVldHMgKHBvdXIgbGVzIGNvbm5leGlvbnMgbGVudGVzKSIKKyM6IHd0LXN0YXR1cy5jOjE0MTkKK21zZ2lkICJDaGVycnktcGljayBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICJQaWNvcmFnZSBlbiBjb3Vycy4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE3OQotbXNnaWQgIkluY2x1ZGUgdGFncyIKLW1zZ3N0ciAiSW5jbHVyZSBsZXMgbWFycXVlcyAodGFncykiCisjOiB3dC1zdGF0dXMuYzoxNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIlZvdXMgw6p0ZXMgYWN0dWVsbGVtZW50IGVuIHRyYWluIGRlIHBpY29yZXIgbGUgY29tbWl0ICVzLiIKIAotI34gbXNnaWQgIkNhbm5vdCB1c2UgZnVubnkgLmdpdCBkaXJlY3Rvcnk6IgotI34gbXNnc3RyICJJbXBvc3NpYmxlIGQndXRpbGlzZXIgbGUgcsOpcGVydG9pcmUgLmdpdDoiCisjOiB3dC1zdGF0dXMuYzoxNDI5Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHLDqWdsZXogbGVzIGNvbmZsaXRzIHB1aXMgbGFuY2V6IFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCiAKLSN+IG1zZ2lkICJQcmVmZXJlbmNlcy4uLiIKLSN+IG1zZ3N0ciAiUHLDqWbDqXJlbmNlcy4uLiIKKyM6IHd0LXN0YXR1cy5jOjE0MzIKK21zZ2lkICIgIChydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHRvIGNvbnRpbnVlKSIKK21zZ3N0ciAiICAobGFuY2V6IFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiBwb3VyIGNvbnRpbnVlcikiCiAKLSN+IG1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIHRlc3QuKSIKLSN+IG1zZ3N0ciAiVG91am91cnMgKE5lIHBhcyBmYWlyZSBkZSB0ZXN0IGRlIGZ1c2lvbi4pIgorIzogd3Qtc3RhdHVzLmM6MTQzNQorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAodG91cyBsZXMgY29uZmxpdHMgc29udCByw6lnbMOpcyA6IGxhbmNleiBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM3Cittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFwiIHBvdXIgc2F1dGVyIGNlIHBhdGNoKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzOQorbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgcG91ciBhbm51bGVyIGxlIHBpY29yYWdlKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ0OQorbXNnaWQgIlJldmVydCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICJSw6l0YWJsaXNzZW1lbnQgZW4gY291cnMuIgorCisjOiB3dC1zdGF0dXMuYzoxNDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJldmVydGluZyBjb21taXQgJXMuIgorbXNnc3RyICJWb3VzIMOqdGVzIGFjdHVlbGxlbWVudCBlbiB0cmFpbiBkZSByw6l0YWJsaXIgbGUgY29tbWl0ICVzLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ1OAorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAocsOpZ2xleiBsZXMgY29uZmxpdHMgcHVpcyBsYW5jZXogXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjEKK21zZ2lkICIgIChydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIiB0byBjb250aW51ZSkiCittc2dzdHIgIiAgKGxhbmNleiBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIHBvdXIgY29udGludWVyKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2NAorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAodG91cyBsZXMgY29uZmxpdHMgc29udCByw6lnbMOpcyA6IGxhbmNleiBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2NgorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAodXRpbGlzZXogXCJnaXQgcmV2ZXJ0IC0tc2tpcFwiIHBvdXIgc2F1dGVyIGNlIHBhdGNoKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2OAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IHJldmVydCAtLWFib3J0XCIgcG91ciBhbm51bGVyIGxlIHLDqXRhYmxpc3NlbWVudCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLCBzdGFydGVkIGZyb20gYnJhbmNoICclcycuIgorbXNnc3RyICJWb3VzIMOqdGVzIGVuIGNvdXJzIGRlIGJpc3NlY3Rpb24sIGRlcHVpcyBsYSBicmFuY2hlICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxNDgyCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLiIKK21zZ3N0ciAiVm91cyDDqnRlcyBlbiBjb3VycyBkZSBiaXNzZWN0aW9uLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4NQorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAodXRpbGlzZXogXCJnaXQgYmlzZWN0IHJlc2V0XCIgcG91ciByZXZlbmlyIMOgIGxhIGJyYW5jaGUgZCdvcmlnaW5lKSIKKworIzogd3Qtc3RhdHVzLmM6MTY5NAorbXNnaWQgIk9uIGJyYW5jaCAiCittc2dzdHIgIlN1ciBsYSBicmFuY2hlICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMQorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgInJlYmFzYWdlIGludGVyYWN0aWYgZW4gY291cnMgOyBzdXIgIgorCisjOiB3dC1zdGF0dXMuYzoxNzAzCittc2dpZCAicmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAicmViYXNhZ2UgZW4gY291cnMgOyBzdXIgIgorCisjOiB3dC1zdGF0dXMuYzoxNzEzCittc2dpZCAiTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiQWN0dWVsbGVtZW50IHN1ciBhdWN1biBicmFuY2hlLiIKKworIzogd3Qtc3RhdHVzLmM6MTczMAorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICJWYWxpZGF0aW9uIGluaXRpYWxlIgorCisjOiB3dC1zdGF0dXMuYzoxNzMxCittc2dpZCAiTm8gY29tbWl0cyB5ZXQiCittc2dzdHIgIkF1Y3VuIGNvbW1pdCIKKworIzogd3Qtc3RhdHVzLmM6MTc0NQorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiRmljaGllcnMgbm9uIHN1aXZpcyIKKworIzogd3Qtc3RhdHVzLmM6MTc0NworbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgIkZpY2hpZXJzIGlnbm9yw6lzIgorCisjOiB3dC1zdGF0dXMuYzoxNzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW50cmFja2VkIGZpbGVzLiAnc3RhdHVzIC11bm8nXG4iCisibWF5IHNwZWVkIGl0IHVwLCBidXQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZm9yZ2V0IHRvIGFkZFxuIgorIm5ldyBmaWxlcyB5b3Vyc2VsZiAoc2VlICdnaXQgaGVscCBzdGF0dXMnKS4iCittc2dzdHIgIiIKKyJMJ8OpbnVtw6lyYXRpb24gZGVzIGZpY2hpZXJzIG5vbiBzdWl2aXMgYSBkdXLDqSAlLjJmIHNlY29uZGVzLiAnc3RhdHVzIC11bm8nXG4iCisicGV1dCBsJ2FjY8OpbMOpcmVyLCBtYWlzIHZvdXMgZGV2ZXogYWxvcnMgZmFpcmUgYXR0ZW50aW9uIMOgIG5lIHBhc1xuIgorIm91YmxpZXIgZCdham91dGVyIGxlcyBub3V2ZWF1eCBmaWNoaWVycyBwYXIgdm91cy1tw6ptZSAodm9pciAnZ2l0IGhlbHAgIgorInN0YXR1cycpLiIKKworIzogd3Qtc3RhdHVzLmM6MTc1NworIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICJGaWNoaWVycyBub24gc3VpdmlzIG5vbiBhZmZpY2jDqXMlcyIKKworIzogd3Qtc3RhdHVzLmM6MTc1OQorbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiAodXRpbGlzZXogLXUgcG91ciBhZmZpY2hlciBsZXMgZmljaGllcnMgbm9uIHN1aXZpcykiCisKKyM6IHd0LXN0YXR1cy5jOjE3NjUKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICJBdWN1bmUgbW9kaWZpY2F0aW9uIgorCisjOiB3dC1zdGF0dXMuYzoxNzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICIiCisiYXVjdW5lIG1vZGlmaWNhdGlvbiBuJ2Egw6l0w6kgYWpvdXTDqWUgw6AgbGEgdmFsaWRhdGlvbiAodXRpbGlzZXogXCJnaXQgYWRkXCIgb3UgIgorIlwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgImF1Y3VuZSBtb2RpZmljYXRpb24gYWpvdXTDqWUgw6AgbGEgdmFsaWRhdGlvblxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIiIKKyJhdWN1bmUgbW9kaWZpY2F0aW9uIGFqb3V0w6llIMOgIGxhIHZhbGlkYXRpb24gbWFpcyBkZXMgZmljaGllcnMgbm9uIHN1aXZpcyAiCisic29udCBwcsOpc2VudHMgKHV0aWxpc2V6IFwiZ2l0IGFkZFwiIHBvdXIgbGVzIHN1aXZyZSlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAiIgorImF1Y3VuZSBtb2RpZmljYXRpb24gYWpvdXTDqWUgw6AgbGEgdmFsaWRhdGlvbiBtYWlzIGRlcyBmaWNoaWVycyBub24gc3VpdmlzICIKKyJzb250IHByw6lzZW50c1xuIgorCisjOiB3dC1zdGF0dXMuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0IChjcmVhdGUvY29weSBmaWxlcyBhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIgorbXNnc3RyICIiCisicmllbiDDoCB2YWxpZGVyIChjcsOpZXovY29waWV6IGRlcyBmaWNoaWVycyBldCB1dGlsaXNleiBcImdpdCBhZGRcIiBwb3VyIGxlcyAiCisic3VpdnJlKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzg1IHd0LXN0YXR1cy5jOjE3OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXRcbiIKK21zZ3N0ciAicmllbiDDoCB2YWxpZGVyXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAicmllbiDDoCB2YWxpZGVyICh1dGlsaXNleiAtdSBwb3VyIGFmZmljaGVyIGxlcyBmaWNoaWVycyBub24gc3VpdmlzKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW5cbiIKK21zZ3N0ciAicmllbiDDoCB2YWxpZGVyLCBsYSBjb3BpZSBkZSB0cmF2YWlsIGVzdCBwcm9wcmVcbiIKKworIzogd3Qtc3RhdHVzLmM6MTkwNQorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IG9uICIKK21zZ3N0ciAiRW5jb3JlIGF1Y3VuIGNvbW1pdCBzdXIgIgorCisjOiB3dC1zdGF0dXMuYzoxOTA5Cittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRCAoYXVjdW5lIGJyYW5jaGUpIgorCisjOiB3dC1zdGF0dXMuYzoxOTQwCittc2dpZCAiZGlmZmVyZW50IgorbXNnc3RyICJkaWZmw6lyZW50IgorCisjOiB3dC1zdGF0dXMuYzoxOTQyIHd0LXN0YXR1cy5jOjE5NTAKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICJkZXJyacOocmUgIgorCisjOiB3dC1zdGF0dXMuYzoxOTQ1IHd0LXN0YXR1cy5jOjE5NDgKK21zZ2lkICJhaGVhZCAiCittc2dzdHIgImRldmFudCAiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgYWN0aW9uIGlzIGUuZy4gInB1bGwgd2l0aCByZWJhc2UiCisjOiB3dC1zdGF0dXMuYzoyNDcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIkltcG9zc2libGUgZGUgJXPCoDogdm91cyBhdmV6IGRlcyBtb2RpZmljYXRpb25zIG5vbiBpbmRleMOpZXMuIgorCisjOiB3dC1zdGF0dXMuYzoyNDc2Cittc2dpZCAiYWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICJkZSBwbHVzLCB2b3RyZSBpbmRleCBjb250aWVudCBkZXMgbW9kaWZpY2F0aW9ucyBub24gdmFsaWTDqWVzLiIKKworIzogd3Qtc3RhdHVzLmM6MjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJXM6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiVzIGltcG9zc2libGXCoDogdm90cmUgaW5kZXggY29udGllbnQgZGVzIG1vZGlmaWNhdGlvbnMgbm9uIHZhbGlkw6llcy4iCisKKyM6IGNvbXBhdC9wcmVjb21wb3NlX3V0ZjguYzo1OCBidWlsdGluL2Nsb25lLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAiw6ljaGVjIHBvdXIgZMOpbGllciAnJXMnIgorCisjOiBidWlsdGluL2FkZC5jOjI2Cittc2dpZCAiZ2l0IGFkZCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBhZGQgWzxvcHRpb25zPl0gWy0tXSA8Y2hlbWluPi4uLiIKKworIzogYnVpbHRpbi9hZGQuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICLDqXRhdCBkZSBkaWZmIGluYXR0ZW5kdSAlYyIKKworIzogYnVpbHRpbi9hZGQuYzo5MyBidWlsdGluL2NvbW1pdC5jOjI4OAorbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIG1pc2Ugw6Agam91ciBkZXMgZmljaGllcnMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgInN1cHByZXNzaW9uIGRlICclcydcbiIKKworIzogYnVpbHRpbi9hZGQuYzoxNzgKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAiTW9kaWZpY2F0aW9ucyBub24gaW5kZXjDqWVzIGFwcsOocyByYWZyYcOuY2hpc3NlbWVudCBkZSBsJ2luZGV4IDoiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY2IGJ1aWx0aW4vcmV2LXBhcnNlLmM6ODk5Cittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgbCdpbmRleCIKKworIzogYnVpbHRpbi9hZGQuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIkltcG9zc2libGUgZCdvdXZyaXIgJyVzJyBlbiDDqWNyaXR1cmUuIgorCisjOiBidWlsdGluL2FkZC5jOjI4MQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgcGF0Y2giCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg0Cittc2dpZCAiZWRpdGluZyBwYXRjaCBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSBsJ8OpZGl0aW9uIGR1IHBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJTdGF0IGRlICclcycgaW1wb3NzaWJsZSIKKworIzogYnVpbHRpbi9hZGQuYzoyODkKK21zZ2lkICJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iCittc2dzdHIgIlBhdGNoIHZpZGUuIEFiYW5kb24uIgorCisjOiBidWlsdGluL2FkZC5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2FwcGxpcXVlciAnJXMnIgorCisjOiBidWlsdGluL2FkZC5jOjMwMgorbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAiIgorIkxlcyBjaGVtaW5zIHN1aXZhbnRzIHNvbnQgaWdub3LDqXMgcGFyIHVuIGRlIHZvcyBmaWNoaWVycyAuZ2l0aWdub3JlIDpcbiIKKworIzogYnVpbHRpbi9hZGQuYzozMjIgYnVpbHRpbi9jbGVhbi5jOjkxMCBidWlsdGluL2ZldGNoLmM6MTYzIGJ1aWx0aW4vbXYuYzoxMjQKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTYgYnVpbHRpbi9wdWxsLmM6MjAzIGJ1aWx0aW4vcHVzaC5jOjU0OAorIzogYnVpbHRpbi9yZW1vdGUuYzoxNDIxIGJ1aWx0aW4vcm0uYzoyNDIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjUKK21zZ2lkICJkcnkgcnVuIgorbXNnc3RyICJzaW11bGVyIGwnYWN0aW9uIgorCisjOiBidWlsdGluL2FkZC5jOjMyNQorbXNnaWQgImludGVyYWN0aXZlIHBpY2tpbmciCittc2dzdHIgInPDqWxlY3Rpb24gaW50ZXJhY3RpdmUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTExIGJ1aWx0aW4vcmVzZXQuYzozMDcKK21zZ2lkICJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIKK21zZ3N0ciAic8OpbGVjdGlvbiBpbnRlcmFjdGl2ZSBkZXMgc2VjdGlvbnMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI3Cittc2dpZCAiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IgorbXNnc3RyICLDqWRpdGlvbiBkdSBkaWZmIGFjdHVlbCBldCBhcHBsaWNhdGlvbiIKKworIzogYnVpbHRpbi9hZGQuYzozMjgKK21zZ2lkICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiCittc2dzdHIgInBlcm1ldHRyZSBsJ2Fqb3V0IGRlIGZpY2hpZXJzIGlnbm9yw6lzIgorCisjOiBidWlsdGluL2FkZC5jOjMyOQorbXNnaWQgInVwZGF0ZSB0cmFja2VkIGZpbGVzIgorbXNnc3RyICJtZXR0cmUgw6Agam91ciBsZXMgZmljaGllcnMgc3VpdmlzIgorCisjOiBidWlsdGluL2FkZC5jOjMzMAorbXNnaWQgInJlbm9ybWFsaXplIEVPTCBvZiB0cmFja2VkIGZpbGVzIChpbXBsaWVzIC11KSIKK21zZ3N0ciAiIgorInJlbm9ybWFsaXNlciBsZXMgZmlucyBkZSBsaWduZXMgKEVPTCkgZGVzIGZpY2hpZXJzIHN1aXZpcyAoaW1wbGlxdWUgLXUpIgorCisjOiBidWlsdGluL2FkZC5jOjMzMQorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAiZW5yZWdpc3RyZXIgc2V1bGVtZW50IGxlIGZhaXQgcXVlIGxlIGNoZW1pbiBzZXJhIGFqb3V0w6kgcGx1cyB0YXJkIgorCisjOiBidWlsdGluL2FkZC5jOjMzMgorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiYWpvdXRlciBsZXMgbW9kaWZpY2F0aW9ucyBkZSB0b3VzIGxlcyBmaWNoaWVycyBzdWl2aXMgZXQgbm9uIHN1aXZpcyIKKworIzogYnVpbHRpbi9hZGQuYzozMzUKK21zZ2lkICJpZ25vcmUgcGF0aHMgcmVtb3ZlZCBpbiB0aGUgd29ya2luZyB0cmVlIChzYW1lIGFzIC0tbm8tYWxsKSIKK21zZ3N0ciAiIgorImlnbm9yZXIgbGVzIGNoZW1pbnMgZWZmYWPDqXMgZGFucyBsYSBjb3BpZSBkZSB0cmF2YWlsIChpZGVudGlxdWUgw6AgLS1uby1hbGwpIgorCisjOiBidWlsdGluL2FkZC5jOjMzNworbXNnaWQgImRvbid0IGFkZCwgb25seSByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAibmUgcGFzIGFqb3V0ZXIsIGp1c3RlIHJhZnJhw65jaGlyIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM4Cittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAiIgorInNhdXRlciBzZXVsZW1lbnQgbGVzIGZpY2hpZXJzIHF1aSBuZSBwZXV2ZW50IHBhcyDDqnRyZSBham91dMOpcyBkdSBmYWl0ICIKKyJkJ2VycmV1cnMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM5Cittc2dpZCAiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIgorbXNnc3RyICJ2w6lyaWZpZXIgc2kgZGVzIGZpY2hpZXJzIC0gbcOqbWUgbWFucXVhbnRzIC0gc29udCBpZ25vcsOpcywgw6AgdmlkZSIKKworIzogYnVpbHRpbi9hZGQuYzozNDEgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA0Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgIm91dHJlcGFzc2VyIGxlIGJpdCBleMOpY3V0YWJsZSBwb3VyIGxlcyBmaWNoaWVycyBsaXN0w6lzIgorCisjOiBidWlsdGluL2FkZC5jOjM0MworbXNnaWQgIndhcm4gd2hlbiBhZGRpbmcgYW4gZW1iZWRkZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiYXZlcnRpciBsb3JzIGRlIGwnYWpvdXQgZCd1biBkw6lww7R0IGVtYmFycXXDqSIKKworIzogYnVpbHRpbi9hZGQuYzozNDUKK21zZ2lkICJiYWNrZW5kIGZvciBgZ2l0IHN0YXNoIC1wYCIKK21zZ3N0ciAiYmFja2VuZCBwb3VyIGBnaXQgc3Rhc2ggLXBgIgorCisjOiBidWlsdGluL2FkZC5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91J3ZlIGFkZGVkIGFub3RoZXIgZ2l0IHJlcG9zaXRvcnkgaW5zaWRlIHlvdXIgY3VycmVudCByZXBvc2l0b3J5LlxuIgorIkNsb25lcyBvZiB0aGUgb3V0ZXIgcmVwb3NpdG9yeSB3aWxsIG5vdCBjb250YWluIHRoZSBjb250ZW50cyBvZlxuIgorInRoZSBlbWJlZGRlZCByZXBvc2l0b3J5IGFuZCB3aWxsIG5vdCBrbm93IGhvdyB0byBvYnRhaW4gaXQuXG4iCisiSWYgeW91IG1lYW50IHRvIGFkZCBhIHN1Ym1vZHVsZSwgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyJJZiB5b3UgYWRkZWQgdGhpcyBwYXRoIGJ5IG1pc3Rha2UsIHlvdSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhlXG4iCisiaW5kZXggd2l0aDpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIlNlZSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIlZvdXMgYXZleiBham91dMOpIHVuIGF1dHJlIGTDqXDDtHQgZ2l0IGRhbnMgdm90cmUgZMOpcMO0dCBhY3R1ZWwuXG4iCisiTGVzIGNsb25lcyBkdSBkw6lww7R0IGNvbnRlbmV1ciBuZSBjb250aWVuZHJvbnMgcGFzIGxlIGNvbnRlbnVcbiIKKyJkdSBkw6lww7R0IGVtYmFycXXDqSBldCBuZSBzYXVyb250IHBhcyBjb21tZW50IGwnb2J0ZW5pci5cbiIKKyJTaSB2b3VzIHZvdWxpZXogYWpvdXRlciB1biBzb3VzLW1vZHVsZSwgdXRpbGlzZXrCoDpcbiIKKyJcbiIKKyJcdGdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisiU2kgdm91cyBhdmV6IGFqb3V0w6kgY2UgY2hlbWluIHBhciBlcnJldXIsIHZvdXMgcG91dmV6IGxlXG4iCisic3VwcHJpbWVyIGRlIGwnaW5kZXggYXZlY8KgOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiUsOpZsOpcmV6LXZvdXMgw6AgXCJnaXQgaGVscCBzdWJtb2R1bGVcIiBwb3VyIHBsdXMgZCdpbmZvcm1hdGlvbi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZyBlbWJlZGRlZCBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgImTDqXDDtHQgZ2l0IGVtYmFycXXDqSBham91dMOpwqA6ICVzIgorCisjOiBidWlsdGluL2FkZC5jOjQxMAorbXNnaWQgIiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5hZGRJZ25vcmVkRmlsZSBmYWxzZVwiIgorbXNnc3RyICIiCisiVXRpbGlzZXogLWYgc2kgdm91cyB2b3VsZXogdnJhaW1lbnQgbGVzIGFqb3V0ZXIuXG4iCisiw4lsaW1pbmV6IGNlIG1lc3NhZ2UgZW4gbGFuw6dhbnRcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZElnbm9yZWRGaWxlIGZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDE5Cittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnYWpvdXQgZGUgZmljaGllcnMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ3IGJ1aWx0aW4vY29tbWl0LmM6MzQ4Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjQ2NAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgZXN0IGluY29tcGF0aWJsZSBhdmVjIC0tZWRpdCIKKworIzogYnVpbHRpbi9hZGQuYzo0NzYKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLUEgZXQgLXUgc29udCBtdXR1ZWxsZW1lbnQgaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9hZGQuYzo0NzkKK21zZ2lkICJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIgorbXNnc3RyICIiCisiTCdvcHRpb24gLS1pZ25vcmUtbWlzc2luZyBuZSBwZXV0IMOqdHJlIHV0aWxpc8OpZSBxdSdlbiBjb21wbMOpbWVudCBkZSAtLWRyeS1ydW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tY2htb2QgcGFyYW0gJyVzJyBtdXN0IGJlIGVpdGhlciAteCBvciAreCIKK21zZ3N0ciAiTGUgcGFyYW3DqHRyZSAnJXMnIGRlIC0tY2htb2QgZG9pdCDDqnRyZSBzb2l0IC14IHNvaXQgK3giCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTAxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjc1IGJ1aWx0aW4vY29tbWl0LmM6MzU0CisjOiBidWlsdGluL3Jlc2V0LmM6MzI3IGJ1aWx0aW4vcm0uYzoyNzIgYnVpbHRpbi9zdGFzaC5jOjE1MDkKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGVzdCBpbmNvbXBhdGlibGUgYXZlYyBwYXRoc3BlYyBhcmd1bWVudHMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTA4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjg3IGJ1aWx0aW4vY29tbWl0LmM6MzYwCisjOiBidWlsdGluL3Jlc2V0LmM6MzMzIGJ1aWx0aW4vcm0uYzoyNzggYnVpbHRpbi9zdGFzaC5jOjE1MTUKK21zZ2lkICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorbXNnc3RyICItLXBhdGhzcGVjLWZpbGUtbnVsIG7DqWNlc3NpdGUgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICJSaWVuIGRlIHNww6ljaWZpw6ksIHJpZW4gbidhIMOpdMOpIGFqb3V0w6kuXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTE0Cittc2dpZCAiIgorIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5hZGRFbXB0eVBhdGhzcGVjIGZhbHNlXCIiCittc2dzdHIgIiIKKyJQZXV0LcOqdHJlIGF2ZXotdm91cyB2b3VsdSBkaXJlICdnaXQgYWRkIC4nwqA/XG4iCisiw4lsaW1pbmV6IGNlIG1lc3NhZ2UgZW4gbGFuw6dhbnRcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZEVtcHR5UGF0aHNwZWMgZmFsc2VcIiIKKworIzogYnVpbHRpbi9hbS5jOjM1MgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBhdXRob3Igc2NyaXB0IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdhdXRldXIgZHUgc2NyaXB0IgorCisjOiBidWlsdGluL2FtLmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgIiclcycgYSDDqXTDqSBlZmZhY8OpIHBhciBsZSBjcm9jaGV0IGFwcGx5cGF0Y2gtbXNnIgorCisjOiBidWlsdGluL2FtLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiTGlnbmUgZW4gZW50csOpZSBtYWxmb3Jtw6llIDogJyVzJy4iCisKKyM6IGJ1aWx0aW4vYW0uYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIkltcG9zc2libGUgZGUgY29waWVyIGxlcyBub3RlcyBkZSAnJXMnIHZlcnMgJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjU0MgorbXNnaWQgImZzZWVrIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGZzZWVrIgorCisjOiBidWlsdGluL2FtLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXRjaCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgcGF0Y2ggJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjc5NQorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICJTZXVsZW1lbnQgdW5lIHPDqXJpZSBkZSBwYXRjaHMgU3RHSVQgcGV1dCDDqnRyZSBhcHBsaXF1w6llIMOgIGxhIGZvaXMiCisKKyM6IGJ1aWx0aW4vYW0uYzo4NDMKK21zZ2lkICJpbnZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiaG9yb2RhdGFnZSBpbnZhbGlkZSIKKworIzogYnVpbHRpbi9hbS5jOjg0OCBidWlsdGluL2FtLmM6ODYwCittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgImxpZ25lIGRlIERhdGUgaW52YWxpZGUiCisKKyM6IGJ1aWx0aW4vYW0uYzo4NTUKK21zZ2lkICJpbnZhbGlkIHRpbWV6b25lIG9mZnNldCIKK21zZ3N0ciAiZMOpY2FsYWdlIGhvcmFpcmUgaW52YWxpZGUiCisKKyM6IGJ1aWx0aW4vYW0uYzo5NDgKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgIsOJY2hlYyBkZSBkw6l0ZWN0aW9uIGR1IGZvcm1hdCBkdSBwYXRjaC4iCisKKyM6IGJ1aWx0aW4vYW0uYzo5NTMgYnVpbHRpbi9jbG9uZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgY3LDqWF0aW9uIGR1IHLDqXBlcnRvaXJlICclcyciCisKKyM6IGJ1aWx0aW4vYW0uYzo5NTgKK21zZ2lkICJGYWlsZWQgdG8gc3BsaXQgcGF0Y2hlcy4iCittc2dzdHIgIsOJY2hlYyBkZSBkw6ljb3VwYWdlIGRlcyBwYXRjaHMuIgorCisjOiBidWlsdGluL2FtLmM6MTA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJXMgLS1jb250aW51ZVwiLiIKK21zZ3N0ciAiUXVhbmQgdm91cyBhdmV6IHLDqXNvbHUgY2UgcHJvYmzDqG1lLCBsYW5jZXogXCIlcyAtLWNvbnRpbnVlXCIuIgorCisjOiBidWlsdGluL2FtLmM6MTA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJXMgLS1za2lwXCIgaW5zdGVhZC4iCittc2dzdHIgIlNpIHZvdXMgcHLDqWbDqXJleiBwbHV0w7R0IHNhdXRlciBjZSBwYXRjaCwgbGFuY2V6IFwiJXMgLS1za2lwXCIuIgorCisjOiBidWlsdGluL2FtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iCittc2dzdHIgIiIKKyJQb3VyIHJlc3RhdXJlciBsYSBicmFuY2hlIG9yaWdpbmFsZSBldCBhcnLDqnRlciBkZSBwYXRjaGVyLCBsYW5jZXogXCIlcyAtLSIKKyJhYm9ydFwiLiIKKworIzogYnVpbHRpbi9hbS5jOjExNzQKK21zZ2lkICJQYXRjaCBzZW50IHdpdGggZm9ybWF0PWZsb3dlZDsgc3BhY2UgYXQgdGhlIGVuZCBvZiBsaW5lcyBtaWdodCBiZSBsb3N0LiIKK21zZ3N0ciAiIgorIlJ1c3RpbmUgZW52b3nDqWUgYXZlYyBmb3JtYXQ9Zmxvd2VkwqA7IGxlcyBlc3BhY2VzIGVuIGZpbiBkZSBsaWduZSBwZXV2ZW50ICIKKyLDqnRyZSBwZXJkdXMuIgorCisjOiBidWlsdGluL2FtLmM6MTIwMgorbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiTGUgcGF0Y2ggYWN0dWVsIGVzdCB2aWRlLiIKKworIzogYnVpbHRpbi9hbS5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhdXRob3IgbGluZSBpbiBjb21taXQgJXMiCittc2dzdHIgImxpZ25lIGQnYXV0ZXVyIG1hbnF1YW50ZSBkYW5zIGxlIGNvbW1pdCAlcyIKKworIzogYnVpbHRpbi9hbS5jOjEyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlLipzIgorbXNnc3RyICJsaWduZSBkJ2lkZW50aWZpY2F0aW9uIGludmFsaWRlIDogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE0ODkKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisiTGUgZMOpcMO0dCBuJ2EgcGFzIGxlcyBibG9icyBuw6ljZXNzYWlyZXMgcG91ciB1biByZXRvdXIgw6AgdW5lIGZ1c2lvbiDDoCAzICIKKyJwb2ludHMuIgorCisjOiBidWlsdGluL2FtLmM6MTQ5MQorbXNnaWQgIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iCittc2dzdHIgIiIKKyJVdGlsaXNhdGlvbiBkZSBsJ2luZm9ybWF0aW9uIGRlIGwnaW5kZXggcG91ciByZWNvbnN0cnVpcmUgdW4gYXJicmUgZGUgYmFzZS4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE1MTAKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisiQXZlei12b3VzIMOpZGl0w6kgbGUgcGF0Y2ggw6AgbGEgbWFpbiA/XG4iCisiSWwgbmUgcydhcHBsaXF1ZSBwYXMgYXV4IGJsb2JzIGVucmVnaXN0csOpcyBkYW5zIHNvbiBpbmRleC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTE2Cittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICJSZXRvdXIgw6AgdW4gcGF0Y2ggZGUgbGEgYmFzZSBldCBmdXNpb24gw6AgMyBwb2ludHMuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTQyCittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIKK21zZ3N0ciAiw4ljaGVjIGQnaW50w6lncmF0aW9uIGRlcyBtb2RpZmljYXRpb25zLiIKKworIzogYnVpbHRpbi9hbS5jOjE1NzQKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICJhcHBsaWNhdGlvbiDDoCB1biBoaXN0b3JpcXVlIHZpZGUiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjIxIGJ1aWx0aW4vYW0uYzoxNjI1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN1bWU6ICVzIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb250aW51ZXIgOiAlcyBuJ2V4aXN0ZSBwYXMuIgorCisjOiBidWlsdGluL2FtLmM6MTY0MworbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAiTGUgY29ycHMgZGUgbGEgdmFsaWRhdGlvbiBlc3QgOiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisjLiBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyMuIGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9hbS5jOjE2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIKK21zZ3N0ciAiQXBwbGlxdWVyID8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbMKgOiAiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzAwIGJ1aWx0aW4vY29tbWl0LmM6Mzk4Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGluZGV4IGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIGZpY2hpZXIgZCdpbmRleCIKKworIzogYnVpbHRpbi9hbS5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJXMpIgorbXNnc3RyICJJbmRleCBzYWxlIDogaW1wb3NzaWJsZSBkJ2FwcGxpcXVlciBkZXMgcGF0Y2hzIChzYWxlcyA6ICVzKSIKKworIzogYnVpbHRpbi9hbS5jOjE3NDQgYnVpbHRpbi9hbS5jOjE4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICUuKnMiCittc2dzdHIgIkFwcGxpY2F0aW9uIGRlICAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc2MQorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAiUGFzIGRlIGNoYW5nZW1lbnQgLS0gUGF0Y2ggZMOpasOgIGFwcGxpcXXDqS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGNoIGZhaWxlZCBhdCAlcyAlLipzIgorbXNnc3RyICJsZSBwYXRjaCBhIMOpY2hvdcOpIMOgICVzICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzcxCittc2dpZCAiVXNlICdnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2g9ZGlmZicgdG8gc2VlIHRoZSBmYWlsZWQgcGF0Y2giCittc2dzdHIgIlV0aWxpc2V6ICdnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2g9ZGlmZicgcG91ciB2aXN1YWxpc2VyIGxlIHBhdGNoIGVuIMOpY2hlYyIKKworIzogYnVpbHRpbi9hbS5jOjE4MTUKK21zZ2lkICIiCisiTm8gY2hhbmdlcyAtIGRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/XG4iCisiSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlXG4iCisiYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZXM7IHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyBwYXRjaC4iCittc2dzdHIgIiIKKyJBdWN1biBjaGFuZ2VtZW50IC0gYXZlei12b3VzIG91Ymxpw6kgZCd1dGlsaXNlciAnZ2l0IGFkZCcgP1xuIgorIlMnaWwgbid5IGEgcGx1cyByaWVuIMOgIGluZGV4ZXIsIGlsIHNlIHBldXQgcXUnYXV0cmUgY2hvc2UgYWl0IGTDqWrDoFxuIgorImludHJvZHVpdCBsZXMgbcOqbWVzIGNoYW5nZW1lbnRzIDsgdm91cyBwb3VycmlleiBhdm9pciBlbnZpZSBkZSBzYXV0ZXIgY2UgIgorInBhdGNoLiIKKworIzogYnVpbHRpbi9hbS5jOjE4MjIKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJZb3Ugc2hvdWxkICdnaXQgYWRkJyBlYWNoIGZpbGUgd2l0aCByZXNvbHZlZCBjb25mbGljdHMgdG8gbWFyayB0aGVtIGFzICIKKyJzdWNoLlxuIgorIllvdSBtaWdodCBydW4gYGdpdCBybWAgb24gYSBmaWxlIHRvIGFjY2VwdCBcImRlbGV0ZWQgYnkgdGhlbVwiIGZvciBpdC4iCittc2dzdHIgIiIKKyJWb3VzIGF2ZXogZW5jb3JlIGRlcyBjaGVtaW4gbm9uLWZ1c2lvbm7DqXMgZGFucyB2b3RyZSBpbmRleC5cbiIKKyJWb3VzIGRldnJpZXogbGFuY2VyICdnaXQgYWRkJyBzdXIgY2hhcXVlIGNvbmZsaXQgcsOpc29sdSBwb3VyIGxlcyBtYXJxdWVyICIKKyJjb21tZSB0ZWwuXG4iCisiVm91cyBwb3V2ZXogbGFuY2VyICdnaXQgcm0nIHN1ciB1biBmaWNoaWVyIFwic3VwcHJpbcOpIHBhciBldXhcIiBwb3VyICIKKyJhY2NlcHRlciBzb24gw6l0YXQuIgorCisjOiBidWlsdGluL2FtLmM6MTkyOSBidWlsdGluL2FtLmM6MTkzMyBidWlsdGluL2FtLmM6MTk0NSBidWlsdGluL3Jlc2V0LmM6MzQ2CisjOiBidWlsdGluL3Jlc2V0LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIkltcG9zc2libGUgZCdhbmFseXNlciBsJ29iamV0ICclcycuIgorCisjOiBidWlsdGluL2FtLmM6MTk4MQorbXNnaWQgImZhaWxlZCB0byBjbGVhbiBpbmRleCIKK21zZ3N0ciAiw6ljaGVjIGR1IG5ldHRveWFnZSBkZSBsJ2luZGV4IgorCisjOiBidWlsdGluL2FtLmM6MjAyNQorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICIiCisiVm91cyBzZW1ibGV6IGF2b2lyIGTDqXBsYWPDqSBsYSBIRUFEIGRlcHVpcyBsZSBkZXJuaWVyIMOpY2hlYyBkZSAnYW0nLlxuIgorIlBhcyBkZSByZXRvdXIgw6AgT1JJR19IRUFEIgorCisjOiBidWlsdGluL2FtLmM6MjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXBhdGNoLWZvcm1hdDogJXMiCittc2dzdHIgIlZhbGV1ciBpbnZhbGlkZSBwb3VyIC0tcGF0Y2gtZm9ybWF0IDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIC0tc2hvdy1jdXJyZW50LXBhdGNoOiAlcyIKK21zZ3N0ciAiVmFsZXVyIGludmFsaWRlIHBvdXIgLS1zaG93LWN1cnJlbnQtcGF0Y2ggOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjIxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMiCittc2dzdHIgIi0tc2hvdy1jdXJyZW50LXBhdGNoPSVzIGVzdCBpbmNvbXBhdGlibGUgYXZlYyAtLXNob3ctY3VycmVudC1wYXRjaD0lcyIKKworIzogYnVpbHRpbi9hbS5jOjIyMDcKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXSIKK21zZ3N0ciAiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA4Cittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCittc2dzdHIgImdpdCBhbSBbPG9wdGlvbnM+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorCisjOiBidWlsdGluL2FtLmM6MjIxNAorbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJleMOpY3V0aW9uIGludGVyYWN0aXZlIgorCisjOiBidWlsdGluL2FtLmM6MjIxNgorbXNnaWQgImhpc3RvcmljYWwgb3B0aW9uIC0tIG5vLW9wIgorbXNnc3RyICJvcHRpb24gaGlzdG9yaXF1ZSAtLSBuby1vcCIKKworIzogYnVpbHRpbi9hbS5jOjIyMTgKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAicGVybWV0dHJlIGRlIHJldmVuaXIgw6AgdW5lIGZ1c2lvbiDDoCAzIHBvaW50cyBzaSBuw6ljZXNzYWlyZSIKKworIzogYnVpbHRpbi9hbS5jOjIyMTkgYnVpbHRpbi9pbml0LWRiLmM6NDk0IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTgKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA0IGJ1aWx0aW4vc3Rhc2guYzo4MTIKK21zZ2lkICJiZSBxdWlldCIKK21zZ3N0ciAiw6p0cmUgc2lsZW5jaWV1eCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjEKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJham91dGVyIHVuZSBsaWduZSBTaWduZWQtb2ZmLWJ5IGF1IG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9hbS5jOjIyMjQKK21zZ2lkICJyZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KSIKK21zZ3N0ciAicmVjb2RlciBlbiB1dGYtOCAocGFyIGTDqWZhdXQpIgorCisjOiBidWlsdGluL2FtLmM6MjIyNgorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInBhc3NlciBsJ29wdGlvbiAtayDDoCBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI4Cittc2dpZCAicGFzcyAtYiBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAicGFzc2VyIGwnb3B0aW9uIC1iIMOgIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIyMzAKK21zZ2lkICJwYXNzIC1tIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJwYXNzZXIgbCdvcHRpb24gLW0gw6AgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjIzMgorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgInBhc3NlciBsJ29wdGlvbiAtLWtlZXAtY3Igw6AgZ2l0LW1haWxzcGxpdCBmcG91ciBsZSBmb3JtYXQgbWJveCIKKworIzogYnVpbHRpbi9hbS5jOjIyMzUKK21zZ2lkICJkbyBub3QgcGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGluZGVwZW5kZW50IG9mIGFtLmtlZXBjciIKK21zZ3N0ciAiIgorIm5lIHBhcyBwYXNzZXIgbCdvcHRpb24gLS1rZWVwLWNyIMOgIGdpdC1tYWlsc3BsaXQgaW5kw6lwZW5kYW1tZW50IGRlIGFtLmtlZXBjciIKKworIzogYnVpbHRpbi9hbS5jOjIyMzgKK21zZ2lkICJzdHJpcCBldmVyeXRoaW5nIGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUiCittc2dzdHIgInJldGlyZXIgdG91dCBsZSBjb250ZW51IGF2YW50IGxhIGxpZ25lIGRlcyBjaXNlYXV4IgorCisjOiBidWlsdGluL2FtLmM6MjI0MCBidWlsdGluL2FtLmM6MjI0MyBidWlsdGluL2FtLmM6MjI0NiBidWlsdGluL2FtLmM6MjI0OQorIzogYnVpbHRpbi9hbS5jOjIyNTIgYnVpbHRpbi9hbS5jOjIyNTUgYnVpbHRpbi9hbS5jOjIyNTggYnVpbHRpbi9hbS5jOjIyNjEKKyM6IGJ1aWx0aW4vYW0uYzoyMjY3Cittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAibGUgcGFzc2VyIGp1c3F1J8OgIGdpdC1hcHBseSIKKworIzogYnVpbHRpbi9hbS5jOjIyNTcgYnVpbHRpbi9jb21taXQuYzoxMzkxIGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MAorIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczIGJ1aWx0aW4vZ3JlcC5jOjg3MSBidWlsdGluL21lcmdlLmM6MjUwCisjOiBidWlsdGluL3B1bGwuYzoxNDAgYnVpbHRpbi9wdWxsLmM6MTk5IGJ1aWx0aW4vcmViYXNlLmM6MTUwNQorIzogYnVpbHRpbi9yZXBhY2suYzozMTUgYnVpbHRpbi9yZXBhY2suYzozMTkgYnVpbHRpbi9yZXBhY2suYzozMjEKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAgYnVpbHRpbi9zaG93LXJlZi5jOjE3MiBidWlsdGluL3RhZy5jOjQwMworIzogcGFyc2Utb3B0aW9ucy5oOjE1NCBwYXJzZS1vcHRpb25zLmg6MTc1IHBhcnNlLW9wdGlvbnMuaDozMTYKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2FtLmM6MjI2MyBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTYgYnVpbHRpbi90YWcuYzo0MzcgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgImZvcm1hdCIKKworIzogYnVpbHRpbi9hbS5jOjIyNjQKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgImZvcm1hdCBkZSBwcsOpc2VudGF0aW9uIGRlcyBwYXRjaHMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjcwCittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICJzdXJjaGFyZ2VyIGxlIG1lc3NhZ2UgZCdlcnJldXIgbG9ycyBkJ3VuIMOpY2hlYyBkJ2FwcGxpY2F0aW9uIGRlIHBhdGNoIgorCisjOiBidWlsdGluL2FtLmM6MjI3MgorbXNnaWQgImNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QiCittc2dzdHIgImNvbnRpbnVlciDDoCBhcHBsaXF1ZXIgbGVzIHBhdGNocyBhcHLDqHMgcsOpc29sdXRpb24gZCd1biBjb25mbGl0IgorCisjOiBidWlsdGluL2FtLmM6MjI3NQorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICJzeW5vbnltZXMgZGUgLS1jb250aW51ZSIKKworIzogYnVpbHRpbi9hbS5jOjIyNzgKK21zZ2lkICJza2lwIHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICJzYXV0ZXIgbGUgcGF0Y2ggY291cmFudCIKKworIzogYnVpbHRpbi9hbS5jOjIyODEKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICIiCisicmVzdGF1cmVyIGxhIGJyYW5jaGUgb3JpZ2luYWxlIGV0IGFiYW5kb25uZXIgbGVzIGFwcGxpY2F0aW9ucyBkZSBwYXRjaC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg0Cittc2dpZCAiYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbiBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzLiIKK21zZ3N0ciAiYWJhbmRvbm5lIGwnb3DDqXJhdGlvbiBkZSBwYXRjaCBtYWlzIGdhcmRlIEhFQUQgb8O5IGlsIGVzdC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg4Cittc2dpZCAic2hvdyB0aGUgcGF0Y2ggYmVpbmcgYXBwbGllZCIKK21zZ3N0ciAiYWZmaWNoZXIgbGUgcGF0Y2ggZW4gY291cnMgZCdhcHBsaWNhdGlvbiIKKworIzogYnVpbHRpbi9hbS5jOjIyOTMKK21zZ2lkICJsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUiCittc2dzdHIgIm1lbnRpciBzdXIgbGEgZGF0ZSBkZSB2YWxpZGF0aW9uIgorCisjOiBidWlsdGluL2FtLmM6MjI5NQorbXNnaWQgInVzZSBjdXJyZW50IHRpbWVzdGFtcCBmb3IgYXV0aG9yIGRhdGUiCittc2dzdHIgInV0aWxpc2VyIGwnaG9yb2RhdGFnZSBhY3R1ZWwgcG91ciBsYSBkYXRlIGQnYXV0ZXVyIgorCisjOiBidWlsdGluL2FtLmM6MjI5NyBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIwIGJ1aWx0aW4vY29tbWl0LmM6MTUxMgorIzogYnVpbHRpbi9tZXJnZS5jOjI4NyBidWlsdGluL3B1bGwuYzoxNzQgYnVpbHRpbi9yZWJhc2UuYzo1MTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NiBidWlsdGluL3JldmVydC5jOjExNyBidWlsdGluL3RhZy5jOjQxOAorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAiaWQtY2zDqSIKKworIzogYnVpbHRpbi9hbS5jOjIyOTggYnVpbHRpbi9yZWJhc2UuYzo1MTggYnVpbHRpbi9yZWJhc2UuYzoxNTU3Cittc2dpZCAiR1BHLXNpZ24gY29tbWl0cyIKK21zZ3N0ciAic2lnbmVyIGxlcyBjb21taXRzIGF2ZWMgR1BHIgorCisjOiBidWlsdGluL2FtLmM6MjMwMQorbXNnaWQgIihpbnRlcm5hbCB1c2UgZm9yIGdpdC1yZWJhc2UpIgorbXNnc3RyICIodXRpbGlzYXRpb24gaW50ZXJuZSBwb3VyIGdpdC1yZWJhc2UpIgorCisjOiBidWlsdGluL2FtLmM6MjMxOQorbXNnaWQgIiIKKyJUaGUgLWIvLS1iaW5hcnkgb3B0aW9uIGhhcyBiZWVuIGEgbm8tb3AgZm9yIGxvbmcgdGltZSwgYW5kXG4iCisiaXQgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdCBhbnltb3JlLiIKK21zZ3N0ciAiIgorIkwnb3B0aW9uIC1iLy0tYmluYXJ5IG5lIGZhaXQgcGx1cyByaWVuIGRlcHVpcyBsb25ndGVtcHMsXG4iCisiZXQgZWxsZSBzZXJhIHN1cHByaW3DqWUuIFZldWlsbGV6IG5lIHBsdXMgbCd1dGlsaXNlci4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzI2Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICLDqWNoZWMgw6AgbGEgbGVjdHVyZSBkZSBsJ2luZGV4IgorCisjOiBidWlsdGluL2FtLmM6MjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICVzIHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgIiIKKyJsZSByw6lwZXJ0b2lyZSBwcsOpY8OpZGVudCBkZSByZWJhc2FnZSAlcyBleGlzdGUgdG91am91cnMgbWFpcyBtYm94IGRvbm7DqWUuIgorCisjOiBidWlsdGluL2FtLmM6MjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3RyYXkgJXMgZGlyZWN0b3J5IGZvdW5kLlxuIgorIlVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIKK21zZ3N0ciAiIgorIlLDqXBlcnRvaXJlIGFiYW5kb25uw6kgJXMgdHJvdXbDqS5cbiIKKyJVdGlsaXNleiBcImdpdCBhbSAtLWFib3J0XCIgcG91ciBsZSBzdXBwcmltZXIuIgorCisjOiBidWlsdGluL2FtLmM6MjM3MQorbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgIiIKKyJQYXMgZGUgcsOpc29sdXRpb24gZGUgbCdvcMOpcmF0aW9uIGVuIGNvdXJzLCBub3VzIG5lIHNvbW1lcyBwYXMgZGFucyB1bmUgIgorInJlcHJpc2UuIgorCisjOiBidWlsdGluL2FtLmM6MjM4MQorbXNnaWQgImludGVyYWN0aXZlIG1vZGUgcmVxdWlyZXMgcGF0Y2hlcyBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICJsZSBtb2RlIGludGVyYWN0aWYgcmVxdWllcnQgZGVzIHJ1c3RpbmVzIHN1ciBsYSBsaWduZSBkZSBjb21tYW5kZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjgKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICJjcsOpYXRpb24gaW1wb3NzaWJsZSBkdSBmaWNoaWVyIGQnYXJjaGl2ZSAnJXMnIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgImltcG9zc2libGUgZGUgcmVkaXJpZ2VyIGxhIHNvcnRpZSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2ZSA6IETDqXDDtHQgZGlzdGFudCBzYW5zIFVSTCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjEKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSA6IEFDSy9OQUNLIGF0dGVuZHUsIHBhcXVldCBkZSBuZXR0b3lhZ2UgcmXDp3UiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2ZSA6IE5BQ0sgJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY1Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICJnaXQgYXJjaGl2ZSA6IGVycmV1ciBkZSBwcm90b2NvbGUiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY5Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlIDogdmlkYWdlIGF0dGVuZHUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMgorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdCAtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPGJhZF90ZXJtPiA8Z29vZF90ZXJtPiIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPHRlcm1lLXBvdXItbWF1dmFpcz4gPHRlcm1lLXBvdXItYm9uPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI0Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNQorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzxjb21taXQ+XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI2Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSBbLS1uby1sb2ddIDxzdGF0ZT4gPHJldmlzaW9uPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSBbLS1uby1sb2ddIDzDqXRhdD4gPHLDqXZpc2lvbj4gPHRlcm1lLXBvdXItIgorImJvbj4gPHRlcm1lLXBvdXItbWF1dmFpcz4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNworbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2hlY2stYW5kLXNldC10ZXJtcyA8Y29tbWFuZD4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2hlY2stYW5kLXNldC10ZXJtcyA8Y29tbWFuZGU+IDx0ZXJtZS1wb3VyLWJvbj4gIgorIjx0ZXJtZS1wb3VyLW1hdXZhaXM+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjgKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA8Z29vZF90ZXJtPiA8YmFkX3Rlcm0+IFs8dGVybT5dIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPHRlcm1lLXBvdXItYm9uPiA8dGVybWUtcG91ci1tYXV2YWlzPiAiCisiWzx0ZXJtPl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOQorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMAorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtPiAtLXRlcm0te25ldyxiYWR9IgorIj08dGVybT5dWy0tbm8tY2hlY2tvdXRdIFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtZT4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PHRlcm1lPl1bLS1uby1jaGVja291dF0gWzxtYXV2YWlzPiBbPGJvbj4uLi5dXSBbLS1dIFs8Y2hlbWlucz4uLi5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0ZXJtIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biB0ZXJtZSB2YWxpZGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnJXMnIGFzIGEgdGVybSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ3V0aWxpc2VyIGxhIGNvbW1hbmRlIGluY2x1c2UgJyVzJyBjb21tZSB0ZXJtZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIHRlcm0gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBtb2RpZmllciBsYSBzaWduaWZpY2F0aW9uIGR1IHRlcm1lICclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTEKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgInZldWlsbGV6IHV0aWxpc2VyIGRldXggdGVybWVzIGRpZmbDqXJlbnRzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTE4Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGhlIGZpbGUgQklTRUNUX1RFUk1TIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyIGxlIGZpY2hpZXIgQklTRUNUX1RFUk1TIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLlxuIgorbXNnc3RyICJQYXMgZGUgYmlzc2VjdGlvbiBlbiBjb3Vycy5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdW4gY29tbWl0IHZhbGlkZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICclcycuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisiw4ljaGVjIGQnZXh0cmFjdGlvbiBkZSBsYSBIRUFEIGQnb3JpZ2luZSAnJXMnLiBFc3NheWV6ICdnaXQgYmlzZWN0IHJlc2V0ICIKKyI8Y29tbWl0PicuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJNYXV2YWlzIGFyZ3VtZW50IHBvdXIgYmlzZWN0X3dyaXRlwqA6ICVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGdldCB0aGUgb2lkIG9mIHRoZSByZXYgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ29idGVuaXIgbCdvaWQgZGUgbGEgcsOpdmlzaW9uICclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3Qgb3BlbiB0aGUgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyIGxlIGZpY2hpZXIgJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAlcy8lcyBiaXNlY3QiCittc2dzdHIgIkNvbW1hbmRlIGludmFsaWRlwqA6IHZvdXMgw6p0ZXMgYWN0dWVsbGVtZW50IGRhbnMgdW5lIGJpc3NlY3Rpb24gJXMvJXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKyJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIgorbXNnc3RyICIiCisiVm91cyBkZXZleiBtZSBkb25uZXIgYXUgbW9pbnMgdW5lIHLDqXZpc2lvbiAlcyBldCB1bmUgcsOpdmlzaW9uICVzLlxuIgorIlZvdXMgcG91dmV6IHV0aWxpc2VyIFwiZ2l0IGJpc2VjdCAlc1wiIGV0IFwiZ2l0IGJpc2VjdCAlc1wiIHBvdXIgY2VsYS4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyJWb3VzIGRldmV6IGTDqW1hcnJlciBhdmVjIFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIlB1aXMgdm91cyBkZXZleiBtZSBkb25uZXIgYXUgbW9pbnMgdW5lIHLDqXZpc2lvbiAlcyBldCB1bmUgcsOpdmlzaW9uICVzLlxuIgorIlZvdXMgcG91dmV6IHV0aWxpc2VyIFwiZ2l0IGJpc2VjdCAlc1wiIGV0IFwiZ2l0IGJpc2VjdCAlc1wiIHBvdXIgY2VsYS4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzZWN0aW5nIG9ubHkgd2l0aCBhICVzIGNvbW1pdCIKK21zZ3N0ciAiQXR0ZW50aW9uIDogYmlzc2VjdGlvbiBhdmVjIHNldWxlbWVudCB1bmUgdmFsaWRhdGlvbiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMxOAorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICJDb25maXJtZXotdm91cyBbWS9uXSA/ICIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM3OQorbXNnaWQgIm5vIHRlcm1zIGRlZmluZWQiCittc2dzdHIgImF1Y3VuIHRlcm1lIGTDqWZpbmkiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY3VycmVudCB0ZXJtcyBhcmUgJXMgZm9yIHRoZSBvbGQgc3RhdGVcbiIKKyJhbmQgJXMgZm9yIHRoZSBuZXcgc3RhdGUuXG4iCittc2dzdHIgIiIKKyJWb3MgdGVybWVzIGFjdHVlbHMgc29udCAlcyBwb3VyIGwnw6l0YXQgYW5jaWVuXG4iCisiZXQgJXMgcG91ciBsZSBub3V2ZWwgw6l0YXQuXG4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgYXJndW1lbnQgJXMgZm9yICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6IC0tdGVybS1nb29kfC0tdGVybS1vbGQgYW5kIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCittc2dzdHIgIiIKKyJhcmd1bWVudCBpbnZhbGlkZSAlcyBwb3VyICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJMZXMgb3B0aW9ucyBzdXBwb3J0w6llcyBzb250wqA6IC0tdGVybS1nb29kfC0tdGVybS1vbGQgZXQgLS10ZXJtLWJhZHwtLXRlcm0tIgorIm5ldy4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIG9wdGlvbjogJyVzJyIKK21zZ3N0ciAib3B0aW9uIG5vbiByZWNvbm51ZcKgOiAlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICInJXMnIG5lIHNlbWJsZSDDqnRyZSB1bmUgcsOpdmlzaW9uIHZhbGlkZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUxNAorbXNnaWQgImJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAibWF1dmFpc2UgSEVBRCAtIGonYWkgYmVzb2luIGQndW5lIEhFQUQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hlY2tpbmcgb3V0ICclcycgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3Qgc3RhcnQgPHZhbGlkLWJyYW5jaD4nLiIKK21zZ3N0ciAiIgorIkwnZXh0cmFjdGlvbiBkZSAnJXMnIGEgw6ljaG91w6kuIEVzc2F5ZXogJ2dpdCBiaXNlY3Qgc3RhcnQgPGJyYW5jaGUtdmFsaWRlPicuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTUwCittc2dpZCAid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIKK21zZ3N0ciAicmVmdXMgZGUgYmlzc2VjdGVyIHN1ciB1biBhcmJyZSAnY2ctc2Vla2VkJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MworbXNnaWQgImJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIm1hdXZhaXNlIEhFQUQgLSByw6lmw6lyZW5jZSBzeW1ib2xpcXVlIGRvdXRldXNlIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmOiAnJXMnIgorbXNnc3RyICJyw6lmZXJlbmNlIGludmFsaWRlwqA6ICclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzMKK21zZ2lkICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIgorbXNnc3RyICJlZmZlY3R1ZXIgJ2dpdCBiaXNlY3QgbmV4dCciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzUKK21zZ2lkICJ3cml0ZSB0aGUgdGVybXMgdG8gLmdpdC9CSVNFQ1RfVEVSTVMiCittc2dzdHIgIsOpY3JpcmUgbGVzIHRlcm1lcyBkYW5zIC5naXQvQklTRUNUX1RFUk1TIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM3Cittc2dpZCAiY2xlYW51cCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICJ2w6lyaWZpZXIgbCfDqXRhdCBkZSBsYSBiaXNzZWN0aW9uIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM5Cittc2dpZCAiY2hlY2sgZm9yIGV4cGVjdGVkIHJldnMiCittc2dzdHIgInbDqXJpZmllciBzaSBkZXMgcsOpdmlzaW9ucyBzb250IGF0dGVuZHVlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MQorbXNnaWQgInJlc2V0IHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgInLDqWluaXRpYWxpc2VyIGwnw6l0YXQgZGUgbGEgYmlzc2VjdGlvbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MworbXNnaWQgIndyaXRlIG91dCB0aGUgYmlzZWN0aW9uIHN0YXRlIGluIEJJU0VDVF9MT0ciCittc2dzdHIgIsOpY3JpcmUgbCfDqXRhdCBkZSBsYSBiaXNzZWN0aW9uIGRhbnMgQklTRUNUX0xPRyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NQorbXNnaWQgImNoZWNrIGFuZCBzZXQgdGVybXMgaW4gYSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgInbDqXJpZmllciBldCByw6lnbGVyIGxlcyB0ZXJtZXMgZGFucyB1biDDqXRhdCBkZSBsYSBiaXNzZWN0aW9uIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ3Cittc2dpZCAiY2hlY2sgd2hldGhlciBiYWQgb3IgZ29vZCB0ZXJtcyBleGlzdCIKK21zZ3N0ciAidsOpcmlmaWVyIHNpIGxlcyB0ZXJtZXMgYm9ucyBvdSBtYXV2YWlzIGV4aXN0ZW50IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ5Cittc2dpZCAicHJpbnQgb3V0IHRoZSBiaXNlY3QgdGVybXMiCittc2dzdHIgImFmZmljaGVyIGxlcyB0ZXJtZXMgZGUgYmlzc2VjdGlvbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MQorbXNnaWQgInN0YXJ0IHRoZSBiaXNlY3Qgc2Vzc2lvbiIKK21zZ3N0ciAiZMOpbWFycmVyIHVuZSBzZXNzaW9uIGRlIGJpc3NlY3Rpb24iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTMKK21zZ2lkICJ1cGRhdGUgQklTRUNUX0hFQUQgaW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IgorbXNnc3RyICJtZXR0cmUgw6Agam91ciBCSVNFQ1RfSEVBRCBhdSBsaWV1IGQnZXh0cmFpcmUgbGUgY29tbWl0IGFjdHVlbCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1NQorbXNnaWQgIm5vIGxvZyBmb3IgQklTRUNUX1dSSVRFIgorbXNnc3RyICJwYXMgZGUgam91cm5hbCBwb3VyIEJJU0VDVF9XUklURSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3MworbXNnaWQgIi0td3JpdGUtdGVybXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS13cml0ZS10ZXJtcyBleGlnZSBkZXV4IGFyZ3VtZW50cyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3NworbXNnaWQgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIHJlcXVpcmVzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgbmUgc3VwcG9ydGUgYXVjdW4gYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODQKK21zZ2lkICItLWJpc2VjdC1yZXNldCByZXF1aXJlcyBlaXRoZXIgbm8gYXJndW1lbnQgb3IgYSBjb21taXQiCittc2dzdHIgIi0tYmlzZWN0LXJlc2V0IHN1cHBvcnRlIHNvaXQgYXVjdW4gYXJndW1lbnQsIHNvaXQgdW4gY29tbWl0IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg4Cittc2dpZCAiLS1iaXNlY3Qtd3JpdGUgcmVxdWlyZXMgZWl0aGVyIDQgb3IgNSBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LXdyaXRlIHN1cHBvcnRlIHNvaXQgNCBhcmd1bWVudHMsIHNvaXQgNSBhcmd1bWVudHMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTQKK21zZ2lkICItLWNoZWNrLWFuZC1zZXQtdGVybXMgcmVxdWlyZXMgMyBhcmd1bWVudHMiCittc2dzdHIgIi0tY2hlY2stYW5kLXNldC10ZXJtcyBleGlnZSAzIGFyZ3VtZW50cyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcwMAorbXNnaWQgIi0tYmlzZWN0LW5leHQtY2hlY2sgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtbmV4dC1jaGVjayBleGlnZSAyIG91IDMgYXJndW1lbnRzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NzA2Cittc2dpZCAiLS1iaXNlY3QtdGVybXMgcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50IgorbXNnc3RyICItLWJpc2VjdC10ZXJtcyBleGlnZSAwIG91IDEgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMQorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJsYW1lIFs8b3B0aW9ucz5dIFs8cmV2LW9wdHM+XSBbPHJldj5dIFstLV0gPGZpY2hpZXI+IgorCisjOiBidWlsdGluL2JsYW1lLmM6MzYKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAiPG9wdGlvbnMtZGUtcsOpdmlzaW9uPiBzb250IGRvY3VtZW50w6lzIGRhbnMgZ2l0LXJldi1saXN0KDEpIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGluZyBhIGNvbG9yOiAlcyIKK21zZ3N0ciAiY291bGV1ciBhdHRlbmR1ZcKgOiAlcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjQxNgorbXNnaWQgIm11c3QgZW5kIHdpdGggYSBjb2xvciIKK21zZ3N0ciAiZG9pdCBmaW5pciBhdmVjIHVuZSBjb3VsZXVyIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgJyVzJyBpbiBjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVzIgorbXNnc3RyICJjb3VsZXVyIGludmFsaWRlICclcycgZGFucyBjb2xvci5ibGFtZS5yZXBlYXRlZGxpbmVzIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzQ3Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgYmxhbWUuY29sb3JpbmciCittc2dzdHIgInZhbGV1ciBpbnZhbGlkZSBwb3VyIGJsYW1lLmNvbG9yaW5nIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIHJldmlzaW9uICVzIHRvIGlnbm9yZSIKK21zZ3N0ciAicsOpZsOpcmVuY2Ugw6AgaWdub3JlciAlcyBpbnRyb3V2YWJsZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NAorbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgIiIKKyJNb250cmVyIGxlcyDDqWzDqW1lbnRzIGRlIGJsw6JtZSBhdSBmdXIgZXQgw6AgbWVzdXJlIGRlIGxldXIgZMOpY291dmVydGUsIGRlICIKKyJtYW5pw6hyZSBpbmNyw6ltZW50YWxlIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ1Cittc2dpZCAiU2hvdyBibGFuayBTSEEtMSBmb3IgYm91bmRhcnkgY29tbWl0cyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiTW9udHJlciB1biBTSEEtMSBibGFuYyBwb3VyIGxlcyBjb21taXRzIGRlIGxpbWl0ZSAoRMOpZmF1dCA6IGTDqXNhY3RpdsOpKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NgorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorIk5lIHBhcyB0cmFpdGVyIGxlcyBjb21taXRzIHJhY2luZSBjb21tZSBkZXMgbGltaXRlcyAoRMOpZmF1dCA6IGTDqXNhY3RpdsOpKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIk1vbnRyZXIgbGVzIHN0YXRpc3RpcXVlcyBkZSBjb8O7dCBkJ2FjdGl2aXTDqSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiRm9yY2VyIGwnYWZmaWNoYWdlIGRlIGwnw6l0YXQgZCdhdmFuY2VtZW50IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ5Cittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIk1vbnRyZXIgbGUgc2NvcmUgZGUgc29ydGllIHBvdXIgbGVzIMOpbMOpbWVudHMgZGUgYmzDom1lIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUwCittc2dpZCAiU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bykiCittc2dzdHIgIk1vbnRyZXIgbGVzIG5vbXMgZGUgZmljaGllciBvcmlnaW5hdXggKETDqWZhdXQgOiBhdXRvKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MQorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiTW9udHJlciBsZXMgbnVtw6lyb3MgZGUgbGlnbmVzIG9yaWdpbmF1eCAoRMOpZmF1dCA6IGTDqXNhY3RpdsOpKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MgorbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIkFmZmljaGVyIGRhbnMgdW4gZm9ybWF0IHByb3BpY2Ugw6AgbGEgY29uc29tbWF0aW9uIHBhciBtYWNoaW5lIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUzCittc2dpZCAiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICJBZmZpY2hlciBlbiBmb3JtYXQgcG9yY2VsYWluZSBhdmVjIGwnaW5mb3JtYXRpb24gZGUgY29tbWl0IHBhciBsaWduZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NAorbXNnaWQgIlVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBnaXQtYW5ub3RhdGUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIlV0aWxpc2VyIGxlIG3Dqm1lIG1vZGUgZGUgc29ydGllIHF1ZSBnaXQtYW5ub3RhdGUgKETDqWZhdXQgOiBkw6lzYWN0aXbDqSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTUKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkFmZmljaGVyIGxlcyBob3JvZGF0YWdlcyBicnV0cyAoRMOpZmF1dCA6IGTDqXNhY3RpdsOpKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NgorbXNnaWQgIlNob3cgbG9uZyBjb21taXQgU0hBMSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIGxvbmdzIFNIQTEgZGUgY29tbWl0cyAoRMOpZmF1dCA6IGTDqXNhY3RpdsOpKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NworbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIlN1cHByaW1lciBsZSBub20gZGUgbCdhdXRldXIgZXQgbCdob3JvZGF0YWdlIChEw6lmYXV0IDogZMOpc2FjdGl2w6kpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU4Cittc2dpZCAiU2hvdyBhdXRob3IgZW1haWwgaW5zdGVhZCBvZiBuYW1lIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJBZmZpY2hlciBsZSBjb3VycmllbCBkZSBsJ2F1dGV1ciBhdSBsaWV1IGR1IG5vbSAoRMOpZmF1dCA6IGTDqXNhY3RpdsOpKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1OQorbXNnaWQgIklnbm9yZSB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIgorbXNnc3RyICJJZ25vcmVyIGxlcyBkaWZmw6lyZW5jZXMgZCdlc3BhY2UiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjAgYnVpbHRpbi9sb2cuYzoxNzAyCittc2dpZCAicmV2IgorbXNnc3RyICJyw6l2IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYwCittc2dpZCAiSWdub3JlIDxyZXY+IHdoZW4gYmxhbWluZyIKK21zZ3N0ciAiaWdub3JlIDxyZXY+IHBlbmRhbnQgbGUgYmzDom1lIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYxCittc2dpZCAiSWdub3JlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiIKK21zZ3N0ciAiaWdub3JlciBsZXMgcsOpdmlzaW9ucyBsaXN0w6llcyBkYW5zIDxmaWNoaWVyPiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MgorbXNnaWQgImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiCittc2dzdHIgIiIKKyJjb2xvcmVyIGRpZmbDqXJlbW1lbnQgbGVzIG3DqXRhZG9ubsOpZXMgcmVkb25kYW50ZXMgYXZlYyBsYSBsaWduZSBwcsOpY8OpZGVudGUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjMKK21zZ2lkICJjb2xvciBsaW5lcyBieSBhZ2UiCittc2dzdHIgImNvbG9yaWVyIGxlcyBsaWduZXMgcGFyIMOiZ2UiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjQKK21zZ2lkICJTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCBiZXR0ZXIgbWF0Y2giCittc2dzdHIgIiIKKyJEw6lwZW5zZXIgZGVzIGN5Y2xlcyBzdXBwbMOpbWVudGFpcmVzIHBvdXIgdHJvdXZlciB1bmUgbWVpbGxldXJlIGNvcnJlc3BvbmRhbmNlIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY1Cittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICIiCisiVXRpbGlzZXIgbGVzIHLDqXZpc2lvbnMgZHUgZmljaGllciA8ZmljaGllcj4gYXUgbGlldSBkJ2FwcGVsZXIgZ2l0LXJldi1saXN0IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY2Cittc2dpZCAiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIKK21zZ3N0ciAiVXRpbGlzZXIgbGUgY29udGVudSBkZSA8ZmljaGllcj4gY29tbWUgaW1hZ2UgZmluYWxlIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY3IGJ1aWx0aW4vYmxhbWUuYzo4NjgKK21zZ2lkICJzY29yZSIKK21zZ3N0ciAic2NvcmUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjcKK21zZ2lkICJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJUcm91dmVyIGxlcyBjb3BpZXMgZGUgbGlnbmUgZGFucyBldCBlbnRyZSBsZXMgZmljaGllcnMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjgKK21zZ2lkICJGaW5kIGxpbmUgbW92ZW1lbnRzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJUcm91dmVyIGxlcyBtb3V2ZW1lbnRzIGRlIGxpZ25lIGRhbnMgZXQgZW50cmUgbGVzIGZpY2hpZXJzIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAibixtIgorbXNnc3RyICJuLG0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjkKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiIgorIlRyYWl0ZXIgc2V1bGVtZW50IGwnaW50ZXJ2YWxsZSBkZSBsaWduZSBuLG0gZW4gY29tbWVuw6dhbnQgbGUgY29tcHRlIMOgIDEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo5MjEKK21zZ2lkICItLXByb2dyZXNzIGNhbid0IGJlIHVzZWQgd2l0aCAtLWluY3JlbWVudGFsIG9yIHBvcmNlbGFpbiBmb3JtYXRzIgorbXNnc3RyICIiCisiLS1wcm9ncmVzcyBuZSBwZXV0IHBhcyDDqnRyZSB1dGlsaXPDqSBhdmVjIC0taW5jcmVtZW50YWwgb3UgbGVzIGZvcm1hdHMgIgorInBvcmNlbGFpbmUiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlCisjLiBtYXhpbXVtIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluCisjLiAiZ2l0IGJsYW1lIiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMQorIy4gbW9udGhzIGFnbyIsIHdoaWNoIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QKKyMuIGFtb25nIHZhcmlvdXMgZm9ybXMgb2YgcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0CisjLiB5b3VyIGxhbmd1YWdlIG1heSBuZWVkIG1vcmUgb3IgZmV3ZXIgZGlzcGxheQorIy4gY29sdW1ucy4KKyMuCisjOiBidWlsdGluL2JsYW1lLmM6OTcyCittc2dpZCAiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIKK21zZ3N0ciAiaWwgeSBhIDEwIGFucyBldCAxMSBtb2lzIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lIgorbXNnaWRfcGx1cmFsICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIKK21zZ3N0clswXSAibGUgZmljaGllciAlcyBuJ2EgcXUnJWx1IGxpZ25lIgorbXNnc3RyWzFdICJsZSBmaWNoaWVyICVzIG4nYSBxdWUgJWx1IGxpZ25lcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjExMjUKK21zZ2lkICJCbGFtaW5nIGxpbmVzIgorbXNnc3RyICJBc3NpZ25hdGlvbiBkZSBibMOibWUgYXV4IGxpZ25lcyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyOQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMwCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLWxdIFstZl0gPGJyYW5jaC1uYW1lPiBbPHN0YXJ0LXBvaW50Pl0iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcHRpb25zXSBbLWxdIFstZl0gPG5vbS1kZS1icmFuY2hlPiBbPHBvaW50LWRlLWTDqXBhcnQ+XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaC1uYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8bm9tLWRlLWJyYW5jaGU+Li4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMyCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLW0gfCAtTSkgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICIiCisiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLW0gfCAtTSkgWzxhbmNpZW5uZS1icmFuY2hlPl0gPG5vdXZlbGxlLWJyYW5jaGU+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMzCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLWMgfCAtQykgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICIiCisiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLWMgfCAtQykgWzxhbmNpZW5uZS1icmFuY2hlPl0gPG5vdXZlbGxlLWJyYW5jaGU+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM0Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozNQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorInN1cHByZXNzaW9uIGRlIGxhIGJyYW5jaGUgJyVzJyBxdWkgYSDDqXTDqSBmdXNpb25uw6llIGRhbnNcbiIKKyIgICAgICAgICAnJXMnLCBtYWlzIHBhcyBkYW5zIEhFQUQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyJicmFuY2hlICclcycgbm9uIHN1cHByaW3DqWUgY2FyIGVsbGUgbidhIHBhcyDDqXTDqSBmdXNpb25uw6llIGRhbnNcbiIKKyIgICAgICAgICAnJXMnLCBtw6ptZSBzaSBlbGxlIGVzdCBmdXNpb25uw6llIGRhbnMgSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSByZWNoZXJjaGVyIGwnb2JqZXQgY29tbWl0IHBvdXIgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisiTGEgYnJhbmNoZSAnJXMnIG4nZXN0IHBhcyB0b3RhbGVtZW50IGZ1c2lvbm7DqWUuXG4iCisiU2kgdm91cyBzb3VoYWl0ZXogcsOpZWxsZW1lbnQgbGEgc3VwcHJpbWVyLCBsYW5jZXogJ2dpdCBicmFuY2ggLUQgJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODkKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICLDiWNoZWMgZGUgbGEgbWlzZSDDoCBqb3VyIGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjAKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgImltcG9zc2libGUgZCd1dGlsaXNlciAtYSBhdmVjIC1kIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNgorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSByZWNoZXJjaGVyIGwnb2JqZXQgY29tbWl0IHBvdXIgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSBicmFuY2ggJyVzJyBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsYSBicmFuY2hlICclcycgZXh0cmFpdGUgZGFucyAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiYnJhbmNoZSBkZSBzdWl2aSAnJXMnIG5vbiB0cm91dsOpZS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgImJyYW5jaGUgJyVzJyBub24gdHJvdXbDqWUuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGxhIHN1cHByZXNzaW9uIGRlIGxhIGJyYW5jaGUgZGUgc3VpdmkgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGxhIHN1cHByZXNzaW9uIGRlIGxhIGJyYW5jaGUgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJCcmFuY2hlIGRlIHN1aXZpICVzIHN1cHByaW3DqWUgKHByw6ljw6lkZW1tZW50ICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIkJyYW5jaGUgJXMgc3VwcHJpbcOpZSAocHLDqWPDqWRlbW1lbnQgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQyOSBidWlsdGluL3RhZy5jOjYxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCBzdHJpbmciCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsYSBjaGHDrm5lIGRlIGZvcm1hdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjAKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSBIRUFEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEICglcykgcG9pbnRzIG91dHNpZGUgb2YgcmVmcy9oZWFkcy8iCittc2dzdHIgIkhFQUQgKCVzKSBwb2ludGUgaG9ycyBkZSByZWZzL2hlYWRzLyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIHJlYmFzZWQgYXQgJXMiCittc2dzdHIgIkxhIGJyYW5jaGUgJXMgZXN0IGVuIGNvdXJzIGRlIHJlYmFzYWdlIHN1ciAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIGJpc2VjdGVkIGF0ICVzIgorbXNnc3RyICJMYSBicmFuY2hlICVzIGVzdCBlbiBjb3VycyBkZSBiaXNzZWN0aW9uIHN1ciAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDIKK21zZ2lkICJjYW5ub3QgY29weSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgImltcG9zc2libGUgZGUgY29waWVyIGxhIGJyYW5jaGUgYWN0dWVsbGUsIGlsIG4neSBlbiBhIHBhcy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTA0Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgImltcG9zc2libGUgZGUgcmVub21tZXIgbGEgYnJhbmNoZSBhY3R1ZWxsZSwgaWwgbid5IGVuIGEgcGFzLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAiTm9tIGRlIGJyYW5jaGUgaW52YWxpZGUgOiAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0MgorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICLDiWNoZWMgZGUgcmVub21tYWdlIGRlIGxhIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ0Cittc2dpZCAiQnJhbmNoIGNvcHkgZmFpbGVkIgorbXNnc3RyICLDiWNoZWMgZGUgY29waWUgZGUgbGEgYnJhbmNoZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhIGNvcHkgb2YgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyIKK21zZ3N0ciAiQ3LDqWF0aW9uIGQndW5lIGNvcGllIGQndW5lIGJyYW5jaGUgbWFsIG5vbW3DqWUgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgIlJlbm9tbWFnZSBkJ3VuZSBicmFuY2hlIG1hbCBub21tw6llICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIkxhIGJyYW5jaGUgYSDDqXTDqSByZW5vbW3DqWUgZW4gJXMsIG1haXMgSEVBRCBuJ2VzdCBwYXMgbWlzZSDDoCBqb3VyICEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY2Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisiTGEgYnJhbmNoZSBlc3QgcmVub21tw6llLCBtYWlzIGxhIG1pc2Ugw6Agam91ciBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gYSAiCisiw6ljaG91w6kiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY4Cittc2dpZCAiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJMYSBicmFuY2hlIGVzdCBjb3Bpw6llLCBtYWlzIGxhIG1pc2Ugw6Agam91ciBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gYSAiCisiw6ljaG91w6kiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2hcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgc3RyaXBwZWQuXG4iCittc2dzdHIgIiIKKyJWZXVpbGxleiDDqWRpdGVyIGxhIGRlc2NyaXB0aW9uIGRlIGxhIGJyYW5jaGVcbiIKKyIgICVzXG4iCisiTGVzIGxpZ25lcyBjb21tZW7Dp2FudCBwYXIgJyVjJyBzZXJvbnQgaWdub3LDqWVzLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBnw6luw6lyaXF1ZXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIwCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgImFmZmljaGVyIGxlIGhhY2hhZ2UgZXQgbGUgc3VqZXQsIGRvdWJsw6kgcG91ciBsYSBicmFuY2hlIGFtb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMQorbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgInN1cHByaW1lciBsZXMgbWVzc2FnZXMgZCdpbmZvcm1hdGlvbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjIKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIKK21zZ3N0ciAicsOpZ2xlciBsZSBtb2RlIGRlIHN1aXZpICh2b2lyIGdpdC1wdWxsKDEpKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjQKK21zZ2lkICJkbyBub3QgdXNlIgorbXNnc3RyICJuZSBwYXMgdXRpbGlzZXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI2IGJ1aWx0aW4vcmViYXNlLmM6NTEzCittc2dpZCAidXBzdHJlYW0iCittc2dzdHIgImFtb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNgorbXNnaWQgImNoYW5nZSB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAibW9kaWZpZXIgbCdpbmZvcm1hdGlvbiBhbW9udCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjcKK21zZ2lkICJ1bnNldCB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAiZMOpc2FjdGl2ZXIgbCdpbmZvcm1hdGlvbiBhbW9udCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjgKK21zZ2lkICJ1c2UgY29sb3JlZCBvdXRwdXQiCittc2dzdHIgInV0aWxpc2VyIGxhIGNvbG9yYXRpb24gZGFucyBsYSBzb3J0aWUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI5Cittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiYWdpciBzdXIgbGVzIGJyYW5jaGVzIGRlIHN1aXZpIGRpc3RhbnRlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzEgYnVpbHRpbi9icmFuY2guYzo2MzMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIGJyYW5jaGVzIHF1aSBjb250aWVubmVudCBsZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMyIGJ1aWx0aW4vYnJhbmNoLmM6NjM0Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyBicmFuY2hlcyBxdWkgbmUgY29udGllbm5lbnQgcGFzIGxlIGNvbW1pdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzcKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICJBY3Rpb25zIHNww6ljaWZpcXVlcyDDoCBnaXQtYnJhbmNoIDoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM4Cittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgImFmZmljaGVyIMOgIGxhIGZvaXMgbGVzIGJyYW5jaGVzIGRlIHN1aXZpIGV0IGxlcyBicmFuY2hlcyBsb2NhbGVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MAorbXNnaWQgImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIgorbXNnc3RyICJzdXBwcmltZXIgdW5lIGJyYW5jaGUgdG90YWxlbWVudCBmdXNpb25uw6llIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MQorbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgInN1cHByaW1lciB1bmUgYnJhbmNoZSAobcOqbWUgbm9uIGZ1c2lvbm7DqWUpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MgorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJkw6lwbGFjZXIvcmVub21tZXIgdW5lIGJyYW5jaGUgZXQgc29uIHJlZmxvZyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDMKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJkw6lwbGFjZXIvcmVub21tZXIgdW5lIGJyYW5jaGUsIG3Dqm1lIHNpIGxhIGNpYmxlIGV4aXN0ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDQKK21zZ2lkICJjb3B5IGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJjb3BpZXIgdW5lIGJyYW5jaGUgZXQgc29uIHJlZmxvZyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDUKK21zZ2lkICJjb3B5IGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgImNvcGllciB1bmUgYnJhbmNoZSwgbcOqbWUgc2kgbGEgY2libGUgZXhpc3RlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NgorbXNnaWQgImxpc3QgYnJhbmNoIG5hbWVzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgbm9tcyBkZXMgYnJhbmNoZXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ3Cittc2dpZCAic2hvdyBjdXJyZW50IGJyYW5jaCBuYW1lIgorbXNnc3RyICJhZmZpY2hlciBsZSBub20gZGUgbGEgYnJhbmNoZSBjb3VyYW50ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDgKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAiY3LDqWVyIGxlIHJlZmxvZyBkZSBsYSBicmFuY2hlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MAorbXNnaWQgImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICLDqWRpdGVyIGxhIGRlc2NyaXB0aW9uIGRlIGxhIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUxCittc2dpZCAiZm9yY2UgY3JlYXRpb24sIG1vdmUvcmVuYW1lLCBkZWxldGlvbiIKK21zZ3N0ciAiZm9yY2VyIGxhIGNyw6lhdGlvbiwgbGUgZMOpcGxhY2VtZW50L3Jlbm9tbWFnZSwgb3UgbGEgc3VwcHJlc3Npb24iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUyCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgYnJhbmNoZXMgcXVpIHNvbnQgZnVzaW9ubsOpZXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIGJyYW5jaGVzIHF1aSBuZSBzb250IHBhcyBmdXNpb25uw6llcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTQKK21zZ2lkICJsaXN0IGJyYW5jaGVzIGluIGNvbHVtbnMiCittc2dzdHIgImFmZmljaGVyIGxlcyBicmFuY2hlcyBlbiBjb2xvbm5lcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTcgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MiBidWlsdGluL25vdGVzLmM6NDE1CisjOiBidWlsdGluL25vdGVzLmM6NDE4IGJ1aWx0aW4vbm90ZXMuYzo1ODEgYnVpbHRpbi9ub3Rlcy5jOjU4NAorIzogYnVpbHRpbi90YWcuYzo0MzMKK21zZ2lkICJvYmplY3QiCittc2dzdHIgIm9iamV0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1OAorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyBicmFuY2hlcyBkZSBsJ29iamV0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY2MCBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ4IGJ1aWx0aW4vdGFnLmM6NDQwCittc2dpZCAic29ydGluZyBhbmQgZmlsdGVyaW5nIGFyZSBjYXNlIGluc2Vuc2l0aXZlIgorbXNnc3RyICJsZSB0cmkgZXQgbGUgZmlsdHJhZ2Ugc29udCBub24tc2Vuc2libGVzIMOgIGxhIGNhc3NlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4IGJ1aWx0aW4vdGFnLmM6NDM4CisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozOAorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgImZvcm1hdCDDoCB1dGlsaXNlciBwb3VyIGxhIHNvcnRpZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2ODQgYnVpbHRpbi9jbG9uZS5jOjc4NQorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICJIRUFEIG5vbiB0cm91dsOpZSBzb3VzIHJlZnMvaGVhZHMgISIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MDgKK21zZ2lkICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIGV0IC0tdmVyYm9zZSBzb250IGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzIzIGJ1aWx0aW4vYnJhbmNoLmM6Nzc3IGJ1aWx0aW4vYnJhbmNoLmM6Nzg2Cittc2dpZCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgImxlIG5vbSBkZSBicmFuY2hlIGVzdCByZXF1aXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzUzCittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6ljcmlyZSB1bmUgSEVBRCBkw6l0YWNow6llIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OAorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6lkaXRlciBsYSBkZXNjcmlwdGlvbiBkZSBwbHVzIGQndW5lIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIgorbXNnc3RyICJBdWN1biBjb21taXQgc3VyIGxhIGJyYW5jaGUgJyVzJy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIKK21zZ3N0ciAiQXVjdW5lIGJyYW5jaGUgbm9tbcOpZSAnJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3ODMKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyBmb3IgYSBjb3B5IG9wZXJhdGlvbiIKK21zZ3N0ciAidHJvcCBkZSBicmFuY2hlcyBwb3VyIHVuZSBvcMOpcmF0aW9uIGRlIGNvcGllIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5MgorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgYSByZW5hbWUgb3BlcmF0aW9uIgorbXNnc3RyICJ0cm9wIGQnYXJndW1lbnRzIHBvdXIgdW5lIG9ww6lyYXRpb24gZGUgcmVub21tYWdlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5NworbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byBzZXQgbmV3IHVwc3RyZWFtIgorbXNnc3RyICJ0cm9wIGQnYXJndW1lbnRzIHBvdXIgc3DDqWNpZmllciB1bmUgYnJhbmNoZSBhbW9udCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSBzcMOpY2lmaWVyIHVuZSBicmFuY2hlIGFtb250IGRlIEhFQUQgcGFyICVzIHF1aSBuZSBwb2ludGUgc3VyICIKKyJhdWN1bmUgYnJhbmNoZS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODA0IGJ1aWx0aW4vYnJhbmNoLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoICclcyciCittc2dzdHIgInBhcyBkZSBicmFuY2hlICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODA4CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJsYSBicmFuY2hlICclcycgbidleGlzdGUgcGFzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAidHJvcCBkJ2FyZ3VtZW50cyBwb3VyIGTDqXNhY3RpdmVyIHVuIGFtb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNQorbXNnaWQgImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIGTDqXNhY3RpdmVyIHVuZSBicmFuY2hlIGFtb250IGRlIEhFQUQgcXVhbmQgZWxsZSBuZSBwb2ludGUgc3VyICIKKyJhdWN1bmUgYnJhbmNoZS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTGEgYnJhbmNoZSAnJXMnIG4nYSBhdWN1bmUgaW5mb3JtYXRpb24gZGUgYnJhbmNoZSBhbW9udCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDEKK21zZ2lkICIiCisiVGhlIC1hLCBhbmQgLXIsIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCB0YWtlIGEgYnJhbmNoIG5hbWUuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHVzZTogLWF8LXIgLS1saXN0IDxwYXR0ZXJuPj8iCittc2dzdHIgIiIKKyJMZXMgb3B0aW9ucyAtYSBldCAtciBkZSAnZ2l0IGJyYW5jaCcgbidvbnQgcGFzIGRlIHNlbnMgYXZlYyB1biBub20gZGUgIgorImJyYW5jaGUuXG4iCisiVm91bGllei12b3VzIHBsdXTDtHQgZGlyZSAtYXwtciAtLWxpc3QgPG1vdGlmPsKgPyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDUKK21zZ2lkICIiCisidGhlICctLXNldC11cHN0cmVhbScgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgJy0tdHJhY2snIG9yICIKKyInLS1zZXQtdXBzdHJlYW0tdG8nIGluc3RlYWQuIgorbXNnc3RyICIiCisibCdvcHRpb24gJy0tc2V0LXVwc3RyZWFtJyBlc3Qgb2Jzb2zDqHRlLiBVdGlsaXNleiAnLS10cmFjaycgb3UgJy0tc2V0LSIKKyJ1cHN0cmVhbS10bycgw6AgbGEgcGxhY2UuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE1IGJ1aWx0aW4vYnVuZGxlLmM6MjMKK21zZ2lkICJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxvcHRpb25zPl0gPGZpY2hpZXI+IDxhcmdzIGdpdC1yZXYtbGlzdD4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYgYnVpbHRpbi9idW5kbGUuYzoyOAorbXNnaWQgImdpdCBidW5kbGUgdmVyaWZ5IFs8b3B0aW9ucz5dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzxvcHRpb25zPl0gPGZpY2hpZXI+IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE3IGJ1aWx0aW4vYnVuZGxlLmM6MzMKK21zZ2lkICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpY2hpZXI+IFs8bm9tLWRlLXJlZj4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE4IGJ1aWx0aW4vYnVuZGxlLmM6MzgKK21zZ2lkICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8ZmljaGllcj4gWzxub20tZGUtcmVmPi4uLl0iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzc1Cittc2dpZCAiZG8gbm90IHNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgIm5lIHBhcyBhZmZpY2hlciBsYSBiYXJyZSBkZSBwcm9ncmVzc2lvbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2OCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNzcKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJhZmZpY2hlciBsYSBiYXJyZSBkZSBwcm9ncmVzc2lvbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNzkKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIKK21zZ3N0ciAiYWZmaWNoZXIgbGEgYmFycmUgZGUgcHJvZ3Jlc3Npb24gZHVyYW50IGxhIHBoYXNlIGQnw6ljcml0ZSBkZXMgb2JqZXRzIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjczIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4MgorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAic2ltaWxhaXJlIMOgIC0tYWxsLXByb2dyZXNzIHF1YW5kIGxhIGJhcnJlIGRlIHByb2dyZXNzaW9uIGVzdCBhZmZpY2jDqWUiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6OTMKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICJMYSBjcsOpYXRpb24gZCd1biBjb2xpcyByZXF1aWVydCB1biBkw6lww7R0LiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxMDQKK21zZ2lkICJkbyBub3Qgc2hvdyBidW5kbGUgZGV0YWlscyIKK21zZ3N0ciAibmUgcGFzIGFmZmljaGVyIGxlcyBkw6l0YWlscyBkdSBjb2xpcyIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIlcyBlc3QgY29ycmVjdFxuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2MAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAiTGUgZMOpcGFxdWV0YWdlIGQndW4gY29saXMgcmVxdWllcnQgdW4gZMOpcMO0dC4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTY4NgorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgIsOqdHJlIHZlcmJldXggOiBkb2l0IMOqdHJlIHBsYWPDqSBhdmFudCB1bmUgc291cy1jb21tYW5kZSIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzoxNzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIlNvdXMtY29tbWFuZGUgaW5jb25udWUgOiAlcyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NQorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8dHlwZT4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxwYXRoPl0gPG9iamVjdD4iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vdy10eXBlXSB8IC1zIFstLWFsbG93LXVua25vdy10eXBlXSB8IC1lIHwgLXAgIgorInwgPHR5cGU+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD08Y2hlbWluPl0gPG9iamV0PiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NgorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MTcKK21zZ2lkICJvbmx5IG9uZSBiYXRjaCBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAidW5lIHNldWxlIG9wdGlvbiBkZSB0cmFpdGVtZW50IG5lIHBldXQgw6p0cmUgc3DDqWNpZmnDqWUgw6AgbGEgZm9pcyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNQorbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiPHR5cGU+IHBldXQgw6p0cmUgOiBibG9iLCB0cmVlLCBjb21taXQgb3UgdGFnIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM2Cittc2dpZCAic2hvdyBvYmplY3QgdHlwZSIKK21zZ3N0ciAiYWZmaWNoZXIgbGUgdHlwZSBkZSBsJ29iamV0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM3Cittc2dpZCAic2hvdyBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiYWZmaWNoZXIgbGEgdGFpbGxlIGRlIGwnb2JqZXQiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzkKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgInNvcnRpciBhdmVjIHVuIGNvZGUgZCdlcnJldXIgbnVsIHF1YW5kIGlsIG4neSBhIGF1Y3VuZSBlcnJldXIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDAKK21zZ2lkICJwcmV0dHktcHJpbnQgb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiYWZmaWNoZXIgYXZlYyBtaXNlIGVuIGZvcm1lIGxlIGNvbnRlbnUgZGUgbCdvYmpldCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MgorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biB0ZXh0Y29udiBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJwb3VyIGxlcyBvYmpldHMgYmxvYiwgbGFuY2VyIHRleHRjb252IHN1ciBsZSBjb250ZW51IGRlIGwnb2JqZXQiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDQKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gZmlsdGVycyBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJwb3VyIGxlcyBvYmpldHMgYmxvYiwgbGFuY2VyIGxlcyBmaWx0cmVzIHN1ciBsZSBjb250ZW51IGRlIGwnb2JqZXQiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDUgZ2l0LXN1Ym1vZHVsZS5zaDoxMDAyCittc2dpZCAiYmxvYiIKK21zZ3N0ciAiYmxvYiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NgorbXNnaWQgInVzZSBhIHNwZWNpZmljIHBhdGggZm9yIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorbXNnc3RyICJ1dGlsaXNlciB1biBjaGVtaW4gc3DDqWNpZmlxdWUgcG91ciAtLXRleHRjb252Ly0tZmlsdGVycyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0OAorbXNnaWQgImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIKK21zZ3N0ciAiYXV0b3Jpc2VyIC1zIGV0IC10IMOgIHRyYXZhaWxsZXIgc3VyIGRlcyBvYmpldHMgY2Fzc8Opcy9jb3Jyb21wdXMiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDkKK21zZ2lkICJidWZmZXIgLS1iYXRjaCBvdXRwdXQiCittc2dzdHIgImJ1ZmZlcmlzZXIgbGEgc29ydGllIGRlIC0tYmF0Y2giCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTEKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKyJhZmZpY2hlciBsJ2luZm9ybWF0aW9uIGV0IGxlIGNvbnRlbnUgZGVzIG9iamV0cyBwYXNzw6lzIGVuIGVudHLDqWUgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTUKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImFmZmljaGVyIGwnaW5mb3JtYXRpb24gZGVzIG9iamV0cyBwYXNzw6lzIGVuIGVudHLDqWUgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTkKK21zZ2lkICJmb2xsb3cgaW4tdHJlZSBzeW1saW5rcyAodXNlZCB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjaykiCittc2dzdHIgIiIKKyJzdWl2cmUgbGVzIGxpZW5zIHN5bWJvbGlxdWUgaW50ZXJuZXMgw6AgbGEgY29waWUgZGUgdHJhdmFpbCAodXRpbGlzw6kgYXZlYyAtLSIKKyJiYXRjaCBvdSAtLWJhdGNoLWNoZWNrKSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MQorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgIm1vbnRyZXIgdG91cyBsZXMgb2JqZXRzIGF2ZWMgLS1iYXRjaCBvdSAtLWJhdGNoLWNoZWNrIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYzCittc2dpZCAiZG8gbm90IG9yZGVyIC0tYmF0Y2gtYWxsLW9iamVjdHMgb3V0cHV0IgorbXNnc3RyICJuZSBwYXMgb3Jkb25uZXIgbGEgc29ydGllIGRlIC0tYmF0Y2gtYWxsLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjEzCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPGNoZW1pbj4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjE0Cittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjEKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgImFmZmljaGVyIHRvdXMgbGVzIGF0dHJpYnV0cyBhc3NvY2nDqXMgYXUgZmljaGllciIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjIKK21zZ2lkICJ1c2UgLmdpdGF0dHJpYnV0ZXMgb25seSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAidXRpbGlzZXIgLmdpdGF0dHJpYnV0ZXMgc2V1bGVtZW50IGRlcHVpcyBsJ2luZGV4IgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI1IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDIKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGlyZSBsZXMgbm9tcyBkZSBmaWNoaWVyIGRlcHVpcyBsJ2VudHLDqWUgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjI1IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjcKK21zZ2lkICJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorInRlcm1pbmVyIGxlcyBlbnJlZ2lzdHJlbWVudHMgZW4gZW50csOpZSBldCBlbiBzb3J0aWUgcGFyIHVuIGNhcmFjdMOocmUgTlVMIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDY0IGJ1aWx0aW4vZ2MuYzo1MzcKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTkKK21zZ2lkICJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgInN1cHByaW1lciBsJ8OpdGF0IGQnYXZhbmNlbWVudCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOQorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgY2hlbWlucyBlbiBlbnRyw6llIHF1aSBuZSBjb3JyZXNwb25kZW50IHBhcyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzozMQorbXNnaWQgImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIgorbXNnc3RyICJpZ25vcmVyIGwnaW5kZXggcGVuZGFudCBsYSB2w6lyaWZpY2F0aW9uIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MworbXNnaWQgImNhbm5vdCBzcGVjaWZ5IHBhdGhuYW1lcyB3aXRoIC0tc3RkaW4iCittc2dzdHIgImltcG9zc2libGUgZGUgc3DDqWNpZmllciBsZXMgY2hlbWlucyBhdmVjIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY2Cittc2dpZCAiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iCittc2dzdHIgIi16IG4nYSBkZSBzZW5zIHF1J2F2ZWMgbCdvcHRpb24gLS1zdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjgKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZCIKK21zZ3N0ciAiYXVjdW4gY2hlbWluIHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTcyCittc2dpZCAiLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCittc2dzdHIgIi0tcXVpZXQgbidlc3QgdmFsaWRlIHF1J2F2ZWMgdW4gc2V1bCBjaGVtaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc0Cittc2dpZCAiY2Fubm90IGhhdmUgYm90aCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UiCittc2dzdHIgImltcG9zc2libGUgZCdhdm9pciAtLXF1aWV0IGV0IC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzcKK21zZ2lkICItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIgorbXNnc3RyICItLW5vbi1tYXRjaGluZyBuJ2VzdCB2YWxpZGUgcXUnYXZlYyAtLXZlcmJvc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjkKK21zZ2lkICJnaXQgY2hlY2stbWFpbG1hcCBbPG9wdGlvbnM+XSA8Y29udGFjdD4uLi4iCittc2dzdHIgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MTQKK21zZ2lkICJhbHNvIHJlYWQgY29udGFjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGlyZSBhdXNzaSBsZXMgY29udGFjdHMgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgY29udGFjdCA6ICVzIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0OAorbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAiYXVjdW4gY29udGFjdCBzcMOpY2lmacOpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTMxCittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBjaGVja291dC1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmljaGllcj4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTQ4Cittc2dpZCAic3RhZ2Ugc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMyBvciBhbGwiCittc2dzdHIgInN0YWdlIGRvaXQgdmFsb2lyIGVudHJlIDEgZXQgMywgb3UgYWxsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY0Cittc2dpZCAiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiCittc2dzdHIgImV4dHJhaXJlIHRvdXMgbGVzIGZpY2hpZXJzIHByw6lzZW50cyBkYW5zIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjUKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMiCittc2dzdHIgImZvcmNlciBsJ8OpY3Jhc2VtZW50IGRlcyBmaWNoaWVycyBleGlzdGFudHMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjcKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICIiCisicGFzIGQnYXZlcnRpc3NlbWVudCBwb3VyIGxlcyBmaWNoaWVycyBleGlzdGFudHMgZXQgbGVzIGZpY2hpZXJzIGFic2VudHMgZGUgIgorImwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjkKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgIm5lIHBhcyBleHRyYWlyZSBsZXMgbm91dmVhdXggZmljaGllcnMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzEKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAibWV0dHJlIMOgIGpvdXIgbCdpbmZvcm1hdGlvbiBkZSBzdGF0IGRhbnMgbGUgZmljaGllciBkJ2luZGV4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc1Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsaXJlIGxhIGxpc3RlIGRlcyBjaGVtaW5zIGRlcHVpcyBsJ2VudHLDqWUgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzcKK21zZ2lkICJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiCittc2dzdHIgIsOpY3JpcmUgbGUgY29udGVudSBkYW5zIGRlcyBmaWNoaWVycyB0ZW1wb3JhaXJlcyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3OCBidWlsdGluL2NvbHVtbi5jOjMxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwMCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwMworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTEgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDkKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NzIKK21zZ2lkICJzdHJpbmciCittc2dzdHIgImNoYcOubmUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzkKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICJsb3JzIGRlIGxhIGNyw6lhdGlvbiBkZSBmaWNoaWVycywgcHLDqWZpeGVyIHBhciA8Y2hhw65uZT4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODEKK21zZ2lkICJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIKK21zZ3N0ciAiY29waWVyIGxlcyBmaWNoaWVycyBkZXB1aXMgbCdpbmRleCBub21tw6kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMQorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIDxicmFuY2hlPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMyCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gWzxicmFuY2hlPl0gLS0gPGZpY2hpZXI+Li4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzcKK21zZ2lkICJnaXQgc3dpdGNoIFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0iCittc2dzdHIgImdpdCBzd2l0Y2ggWzxvcHRpb25zPl0gPGJyYW5jaGU+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIKK21zZ2lkICJnaXQgcmVzdG9yZSBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PGJyYW5jaD5dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc3RvcmUgWzxvcHRpb25zPl0gWy0tc291cmNlPTxicmFuY2hlPl0gPGZpY2hpZXI+Li4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc1IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgImxlIGNoZW1pbiAnJXMnIG4nYSBwYXMgbm90cmUgdmVyc2lvbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NyBidWlsdGluL2NoZWNrb3V0LmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgImxlIGNoZW1pbiAnJXMnIG4nYSBwYXMgbGV1ciB2ZXJzaW9uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgImxlIGNoZW1pbiAnJXMnIG4nYSBhdWN1bmUgZGVzIHZlcnNpb25zIG7DqWNlc3NhaXJlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgImxlIGNoZW1pbiAnJXMnIG4nYSBwYXMgbGVzIHZlcnNpb25zIG7DqWNlc3NhaXJlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAiY2hlbWluICclcycgOiBpbXBvc3NpYmxlIGRlIGZ1c2lvbm5lciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2Fqb3V0ZXIgbGUgcsOpc3VsdGF0IGRlIGZ1c2lvbiBwb3VyICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICIlZCBjb25mbGl0IGR1IGZ1c2lvbiByZWNyw6nDqSIKK21zZ3N0clsxXSAiJWQgY29uZmxpdHMgZHUgZnVzaW9uIHJlY3LDqcOpcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkICVkIHBhdGggZnJvbSAlcyIKK21zZ2lkX3BsdXJhbCAiVXBkYXRlZCAlZCBwYXRocyBmcm9tICVzIgorbXNnc3RyWzBdICIlZCBjaGVtaW4gbWlzIMOgIGpvdXIgZGVwdWlzICVzIgorbXNnc3RyWzFdICIlZCBjaGVtaW5zIG1pcyDDoCBqb3VyIGRlcHVpcyAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkICVkIHBhdGggZnJvbSB0aGUgaW5kZXgiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSB0aGUgaW5kZXgiCittc2dzdHJbMF0gIiVkIGNoZW1pbiBtaXMgw6Agam91ciBkZXB1aXMgbCdpbmRleCIKK21zZ3N0clsxXSAiJWQgY2hlbWlucyBtaXMgw6Agam91ciBkZXB1aXMgbCdpbmRleCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQxMiBidWlsdGluL2NoZWNrb3V0LmM6NDE1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTgKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIgorbXNnc3RyICInJXMnIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIGF2ZWMgZGVzIG1pc2VzIMOgIGpvdXIgZGUgY2hlbWlucyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyNSBidWlsdGluL2NoZWNrb3V0LmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJyVzJyBuZSBwZXV0IHBhcyDDqnRyZSB1dGlsaXPDqSBhdmVjICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZGUgbWV0dHJlIMOgIGpvdXIgbGVzIGNoZW1pbnMgZXQgYmFzY3VsZXIgc3VyIGxhIGJyYW5jaGUgJyVzJyBlbiAiCisibcOqbWUgdGVtcHMuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5laXRoZXIgJyVzJyBvciAnJXMnIGlzIHNwZWNpZmllZCIKK21zZ3N0ciAibmkgJyVzJywgbmkgJyVzJyBzcMOpY2lmacOpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbXVzdCBiZSB1c2VkIHdoZW4gJyVzJyBpcyBub3Qgc3BlY2lmaWVkIgorbXNnc3RyICInJXMnIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIHF1YW5kICclcycgbidlc3QgcGFzIHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NDUgYnVpbHRpbi9jaGVja291dC5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG9yICclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJyVzJyBvdSAnJXMnIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIGF2ZWMgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MDkgYnVpbHRpbi9jaGVja291dC5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgaXMgdW5tZXJnZWQiCittc2dzdHIgImxlIGNoZW1pbiAnJXMnIG4nZXN0IHBhcyBmdXNpb25uw6kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2ODQgYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoxMDYKK21zZ2lkICJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAidm91cyBkZXZleiBkJ2Fib3JkIHLDqXNvdWRyZSB2b3RyZSBpbmRleCBjb3VyYW50IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgY29udGludWUgd2l0aCBzdGFnZWQgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIGZpbGVzOlxuIgorIiVzIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSBjb250aW51ZXIgYXZlYyBkZXMgbW9kaWZpY2F0aW9ucyBpbmRleMOpZXMgZGFucyBsZXMgZmljaGllcnMgIgorInN1aXZhbnRzIDpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBmYWlyZSB1biByZWZsb2cgcG91ciAnJXMnwqA6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NzkKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCBlc3QgbWFpbnRlbmFudCBzdXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODMgYnVpbHRpbi9jbG9uZS5jOjcxNworbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciBIRUFEIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlJlbWlzZSDDoCB6w6lybyBkZSBsYSBicmFuY2hlICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAiRMOpasOgIHN1ciAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIkJhc2N1bGVtZW50IGV0IHJlbWlzZSDDoCB6w6lybyBkZSBsYSBicmFuY2hlICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NiBidWlsdGluL2NoZWNrb3V0LmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJCYXNjdWxlbWVudCBzdXIgbGEgbm91dmVsbGUgYnJhbmNoZSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiQmFzY3VsZW1lbnQgc3VyIGxhIGJyYW5jaGUgJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4gZXQgJWQgZW4gcGx1cy5cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorIkF0dGVudGlvbiA6IHZvdXMgYWJhbmRvbm5leiAlZCBjb21taXQsIG5vbiBjb25uZWN0w6kgw6BcbiIKKyJ1bmUgYnJhbmNoZSA6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clsxXSAiIgorIkF0dGVudGlvbiA6IHZvdXMgYWJhbmRvbm5leiAlZCBjb21taXRzLCBub24gY29ubmVjdMOpcyDDoFxuIgorInVuZSBicmFuY2hlIDpcbiIKKyJcbiIKKyIlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAiIgorIlNpIHZvdXMgc291aGFpdGV6IGxlIGdhcmRlciBlbiBjcsOpYW50IHVuZSBub3V2ZWxsZSBicmFuY2hlLCBjJ2VzdCBsZSBib24gIgorIm1vbWVudFxuIgorInBvdXIgbGUgZmFpcmUgYXZlYyA6XG4iCisiXG4iCisiZ2l0IGJyYW5jaCA8bm91dmVsbGUtYnJhbmNoZT4gJXNcbiIKKyJcbiIKK21zZ3N0clsxXSAiIgorIlNpIHZvdXMgc291aGFpdGV6IGxlcyBnYXJkZXIgZW4gY3LDqWFudCB1bmUgbm91dmVsbGUgYnJhbmNoZSwgYydlc3QgbGUgYm9uICIKKyJtb21lbnRcbiIKKyJwb3VyIGxlIGZhaXJlIGF2ZWMgOlxuIgorIlxuIgorImdpdCBicmFuY2ggPG5vdXZlbGxlLWJyYW5jaGU+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA5Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAiZXJyZXVyIGludGVybmUgbG9ycyBkdSBwYXJjb3VycyBkZXMgcsOpdmlzaW9ucyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTMKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAiTGEgcG9zaXRpb24gcHLDqWPDqWRlbnRlIGRlIEhFQUQgw6l0YWl0IHN1ciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTMgYnVpbHRpbi9jaGVja291dC5jOjEzMTUKK21zZ2lkICJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJWb3VzIMOqdGVzIHN1ciB1bmUgYnJhbmNoZSBxdWkgZG9pdCBlbmNvcmUgbmHDrnRyZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgY291bGQgYmUgYm90aCBhIGxvY2FsIGZpbGUgYW5kIGEgdHJhY2tpbmcgYnJhbmNoLlxuIgorIlBsZWFzZSB1c2UgLS0gKGFuZCBvcHRpb25hbGx5IC0tbm8tZ3Vlc3MpIHRvIGRpc2FtYmlndWF0ZSIKK21zZ3N0ciAiIgorIiclcycgcG91cnJhaXQgw6p0cmUgdW4gZmljaGllciBsb2NhbCBvdSB1biBicmFuY2hlIGRlIHN1aXZpLlxuIgorIlZldWlsbGV6IHV0aWxpc2VyIC0tIChldCAtLW5vLWd1ZXNzIGVuIGZhY3VsdGF0aWYpIHBvdXIgbGVzIGRpc3Rpbmd1ZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM1Cittc2dpZCAiIgorIklmIHlvdSBtZWFudCB0byBjaGVjayBvdXQgYSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIG9uLCBlLmcuICdvcmlnaW4nLFxuIgorInlvdSBjYW4gZG8gc28gYnkgZnVsbHkgcXVhbGlmeWluZyB0aGUgbmFtZSB3aXRoIHRoZSAtLXRyYWNrIG9wdGlvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luLzxuYW1lPlxuIgorIlxuIgorIklmIHlvdSdkIGxpa2UgdG8gYWx3YXlzIGhhdmUgY2hlY2tvdXRzIG9mIGFuIGFtYmlndW91cyA8bmFtZT4gcHJlZmVyXG4iCisib25lIHJlbW90ZSwgZS5nLiB0aGUgJ29yaWdpbicgcmVtb3RlLCBjb25zaWRlciBzZXR0aW5nXG4iCisiY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW4gaW4geW91ciBjb25maWcuIgorbXNnc3RyICIiCisiU2kgdm91cyBzb3VoYWl0aWV6IGV4dHJhaXJlIHVuZSBicmFuY2hlIGRlIHN1aXZpIGRpc3RhbnQgc3VyICdvcmlnaW4nLFxuIgorInBhciBleGVtcGxlLCBxdWFsaWZpZXotbGEgY29tcGzDqHRlbWVudCBhdmVjIGwnb3B0aW9uIC0tdHJhY2vCoDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luLzxub20+XG4iCisiXG4iCisiU2kgdm91cyBzb3VoYWl0ZXogcHJpdmlsw6lnaWVyIHVuIGRpc3RhbnQgcGFydGljdWxpZXIgbG9yc3F1ZSA8bm9tPiBlc3RcbiIKKyJhbWJpZ3UsIHZvdXMgcG91dmV6IHBvc2l0aW9ubmVyIGNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIGRhbnNcbiIKKyJ2b3RyZSBjb25maWcuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG1hdGNoZWQgbXVsdGlwbGUgKCVkKSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIiclcycgY29ycmVzcG9uZCDDoCBwbHVzaWV1cnMgKCVkKSBicmFuY2hlcyBkZSBzdWl2aSDDoCBkaXN0YW5jZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMTEKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQiCittc2dzdHIgInVuZSBzZXVsZSByw6lmw6lyZW5jZSBhdHRlbmR1ZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iCittc2dzdHIgInVuZSBzZXVsZSByw6lmw6lyZW5jZSBhdHRlbmR1ZSwgJWQgZm91cm5pZXMuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI3NCBidWlsdGluL3dvcmt0cmVlLmM6MjgzIGJ1aWx0aW4vd29ya3RyZWUuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJyw6lmw6lyZW5jZSBpbnZhbGlkZSA6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI4NyBidWlsdGluL2NoZWNrb3V0LmM6MTY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiCittc2dzdHIgImxhIHLDqWbDqXJlbmNlIG4nZXN0IHBhcyB1biBhcmJyZSA6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IHRhZyAnJXMnIgorbXNnc3RyICJicmFuY2hlIGF0dGVuZHVlLCBtYWlzIMOpdGlxdWV0dGUgJyVzJyByZcOndWUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM2CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgcmVtb3RlIGJyYW5jaCAnJXMnIgorbXNnc3RyICJ1bmUgYnJhbmNoZSBlc3QgYXR0ZW5kdWUsIG1haXMgdW5lIGJyYW5jaGUgZGlzdGFudGUgJyVzJyBhIMOpdMOpIHJlw6d1ZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzcgYnVpbHRpbi9jaGVja291dC5jOjEzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCAnJXMnIgorbXNnc3RyICJ1bmUgYnJhbmNoZSBlc3QgYXR0ZW5kdWUsIG1haXMgJyVzJyBhIMOpdMOpIHJlw6d1ZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCBjb21taXQgJyVzJyIKK21zZ3N0ciAidW5lIGJyYW5jaGUgZXN0IGF0dGVuZHVlLCBtYWlzIHVuIGNvbW1pdCAnJXMnIGEgw6l0w6kgcmXDp3UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzU2Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIG1lcmdpbmdcbiIKKyJDb25zaWRlciBcImdpdCBtZXJnZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIGJhc2N1bGVyIGRlIGJyYW5jaGUgcGVuZGFudCB1bmUgZnVzaW9uXG4iCisiRW52aXNhZ2V6IFwiZ2l0IG1lcmdlIC0tcXVpdFwiIG91IFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjAKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uXG4iCisiQ29uc2lkZXIgXCJnaXQgYW0gLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSBiYXNjdWxlciBkZSBicmFuY2hlIHBlbmRhbnQgdW5lIHNlc3Npb24gYW1cbiIKKyJFbnZpc2FnZXogXCJnaXQgYW0gLS1xdWl0XCIgb3UgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2NAorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSByZWJhc2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJlYmFzZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIGJhc2N1bGVyIGRlIGJyYW5jaGUgcGVuZGFudCB1biByZWJhc2FnZVxuIgorIkVudmlzYWdleiBcImdpdCByZWJhc2UgLS1xdWl0XCIgb3UgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2OAorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSBjaGVycnktcGlja2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgYmFzY3VsZXIgZGUgYnJhbmNoZSBwZW5kYW50IHVuIHBpY29yYWdlXG4iCisiRW52aXNhZ2V6IFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIG91IFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzIKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmV2ZXJ0aW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgcmV2ZXJ0IC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgYmFzY3VsZXIgZGUgYnJhbmNoZSBwZW5kYW50IHVuIHJldG91clxuIgorIkVudmlzYWdleiBcImdpdCByZXZlcnQgLS1xdWl0XCIgb3UgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM3NgorbXNnaWQgInlvdSBhcmUgc3dpdGNoaW5nIGJyYW5jaCB3aGlsZSBiaXNlY3RpbmciCittc2dzdHIgIlZvdXMgYmFzY3VsZXogZGUgYnJhbmNoZSBlbiBjb3VycyBkZSBiaXNzZWN0aW9uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4MworbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQndXRpbGlzZXIgZGVzIGNoZW1pbnMgYXZlYyB1biBiYXNjdWxlbWVudCBkZSBicmFuY2hlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODYgYnVpbHRpbi9jaGVja291dC5jOjEzOTAgYnVpbHRpbi9jaGVja291dC5jOjEzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiJyVzJyBuZSBwZXV0IHBhcyDDqnRyZSB1dGlsaXPDqSBhdmVjIHVuIGJhc2N1bGVtZW50IGRlIGJyYW5jaGVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5OCBidWlsdGluL2NoZWNrb3V0LmM6MTQwMSBidWlsdGluL2NoZWNrb3V0LmM6MTQwNAorIzogYnVpbHRpbi9jaGVja291dC5jOjE0MDkgYnVpbHRpbi9jaGVja291dC5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIiclcycgbmUgcGV1dCBwYXMgw6p0cmUgdXRpbGlzw6kgYXZlYyAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQxMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCB0YWtlIDxzdGFydC1wb2ludD4iCittc2dzdHIgIiclcycgbidhY2NlcHRlIHBhcyA8cG9pbnQtZGUtZMOpcGFydD4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGJhc2N1bGVyIGRlIGJyYW5jaGUgdmVycyAnJXMnIHF1aSBuJ2VzdCBwYXMgdW4gY29tbWl0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQyNgorbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG9yIGNvbW1pdCBhcmd1bWVudCIKK21zZ3N0ciAiYXJndW1lbnQgZGUgYnJhbmNoZSBvdSBkZSBjb21taXQgbWFucXVhbnQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDY4IGJ1aWx0aW4vY2xvbmUuYzo5MSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjcyCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNSBidWlsdGluL2ZldGNoLmM6MTY3IGJ1aWx0aW4vbWVyZ2UuYzoyODYKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI3IGJ1aWx0aW4vcHVsbC5jOjExOCBidWlsdGluL3B1c2guYzo1NjMKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc0Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJmb3JjZXIgbCdhZmZpY2hhZ2UgZGUgbCfDqXRhdCBkJ2F2YW5jZW1lbnQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDY5Cittc2dpZCAicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giCittc2dzdHIgImVmZmVjdHVlciB1bmUgZnVzaW9uIMOgIDMgcG9pbnRzIGF2ZWMgbGEgbm91dmVsbGUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NzAgYnVpbHRpbi9sb2cuYzoxNjkwIHBhcnNlLW9wdGlvbnMuaDozMjIKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAic3R5bGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDcxCittc2dpZCAiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIKK21zZ3N0ciAic3R5bGUgZGUgY29uZmxpdCAobWVyZ2UgKGZ1c2lvbikgb3UgZGlmZjMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MyBidWlsdGluL3dvcmt0cmVlLmM6NDk2Cittc2dpZCAiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICJkw6l0YWNoZXIgbGEgSEVBRCBhdSBjb21taXQgbm9tbcOpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4NAorbXNnaWQgInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICJwYXJhbcOpdHJlciBsZXMgY29vcmRvbm7DqWVzIGRlIGJyYW5jaGUgYW1vbnQgcG91ciB1bmUgbm91dmVsbGUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODYKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAiZm9yY2VyIGwnZXh0cmFjdGlvbiAobGFpc3NlciB0b21iZXIgbGVzIG1vZGlmaWNhdGlvbnMgbG9jYWxlcykiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg4Cittc2dpZCAibmV3LWJyYW5jaCIKK21zZ3N0ciAibm91dmVsbGUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODgKK21zZ2lkICJuZXcgdW5wYXJlbnRlZCBicmFuY2giCittc2dzdHIgIm5vdXZlbGxlIGJyYW5jaGUgc2FucyBwYXJlbnQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDkwIGJ1aWx0aW4vbWVyZ2UuYzoyODkKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgIm1ldHRyZSDDoCBqb3VyIGxlcyBmaWNoaWVycyBpZ25vcsOpcyAocGFyIGTDqWZhdXQpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ5MworbXNnaWQgImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIKK21zZ3N0ciAiIgorIm5lIHBhcyB2w6lyaWZpZXIgc2kgdW5lIGF1dHJlIGNvcGllIGRlIHRyYXZhaWwgY29udGllbnQgbGUgcsOpZsOpcmVuY2UgZm91cm5pZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MDYKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgImV4dHJhaXJlIG5vdHJlIHZlcnNpb24gcG91ciBsZXMgZmljaGllcnMgbm9uIGZ1c2lvbm7DqXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTA5Cittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgImV4dHJhaXJlIGxldXIgdmVyc2lvbiBwb3VyIGxlcyBmaWNoaWVycyBub24gZnVzaW9ubsOpcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MTMKK21zZ2lkICJkbyBub3QgbGltaXQgcGF0aHNwZWNzIHRvIHNwYXJzZSBlbnRyaWVzIG9ubHkiCittc2dzdHIgIm5lIHBhcyBsaW1pdGVyIGxlcyBzcMOpY2lmaWNhdGV1cnMgZGUgY2hlbWlucyBhdXggc2V1bHMgw6lsw6ltZW50cyBjcmV1eCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NjUKK21zZ2lkICItYiwgLUIgYW5kIC0tb3JwaGFuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1iLCAtQiBldCAtLW9ycGhhbiBzb250IG11dHVlbGxlbWVudCBleGNsdXNpZnMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTY4Cittc2dpZCAiLXAgYW5kIC0tb3ZlcmxheSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItcCBldCAtLW92ZXJsYXkgc29udCBtdXR1ZWxsZW1lbnQgZXhjbHVzaWZzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYwNQorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS10cmFjayByZXF1aWVydCB1biBub20gZGUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2MTAKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIm5vbSBkZSBicmFuY2hlIG1hbnF1YW50IDsgZXNzYXlleiAtYiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgcsOpc291ZHJlICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY1OAorbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICJzcMOpY2lmaWNhdGlvbiBkZSBjaGVtaW4gaW52YWxpZGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIiIKKyInJXMnIG4nZXN0IHBhcyB1biBjb21taXQgZXQgdW5lIGJyYW5jaGUgJyVzJyBuZSBwZXV0IHBhcyBlbiDDqnRyZSBjcsOpw6llIGRlcHVpcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIG4nYWNjZXB0ZSBwYXMgdW4gYXJndW1lbnQgZGUgY2hlbWluICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjc4Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1kZXRhY2giCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGVzdCBpbmNvbXBhdGlibGUgYXZlYyAtLWRldGFjaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2ODEgYnVpbHRpbi9yZXNldC5jOjMyNCBidWlsdGluL3N0YXNoLmM6MTUwNgorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGVzdCBpbmNvbXBhdGlibGUgYXZlYyAtLXBhdGNoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY5MgorbXNnaWQgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGV0IC0tbWVyZ2Ugc29udCBpbmNvbXBhdGlibGVzIGxvcnNcbiIKKyJkZSBsJ2V4dHJhY3Rpb24gZGUgbCdpbmRleC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjk3Cittc2dpZCAieW91IG11c3Qgc3BlY2lmeSBwYXRoKHMpIHRvIHJlc3RvcmUiCittc2dzdHIgIlZvdXMgZGV2ZXogc3DDqWNpZmllciB1biBvdSBkZXMgY2hlbWlucyDDoCByZXN0YXVyZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI1IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3NiBidWlsdGluL2Nsb25lLmM6MTIxIGJ1aWx0aW4vcmVtb3RlLmM6MTcwCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MiBidWlsdGluL3dvcmt0cmVlLmM6NDkyIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTQKK21zZ2lkICJicmFuY2giCittc2dzdHIgImJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI0Cittc2dpZCAiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giCittc2dzdHIgImNyw6llciBldCBleHRyYWlyZSB1bmUgbm91dmVsbGUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjYKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIGNoZWNrb3V0IGEgYnJhbmNoIgorbXNnc3RyICJjcsOpZXIvcsOpaW5pdGlhbGlzZXIgZXQgZXh0cmFpcmUgdW5lIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI3Cittc2dpZCAiY3JlYXRlIHJlZmxvZyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAiY3LDqWVyIHVuIHJlZmxvZyBwb3VyIHVuZSBub3V2ZWxsZSBicmFuY2hlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyOQorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorImVzc2F5ZXIgZCdpbnRlcnByw6l0ZXIgJ2dpdCBjaGVja291dCA8YnJhbmNoZS1pbmV4aXN0YW50ZT4nIChwYXIgZMOpZmF1dCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzMwCittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSAoZGVmYXVsdCkiCittc2dzdHIgInV0aWxpc2VyIGxlIG1vZGUgZGUgc3VwZXJwb3NpdGlvbiAoZMOpZmF1dCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc1Cittc2dpZCAiY3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoIgorbXNnc3RyICJjcsOpZXIgZXQgYmFzY3VsZXIgc3VyIHVuZSBub3V2ZWxsZSBicmFuY2hlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3NworbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgc3dpdGNoIHRvIGEgYnJhbmNoIgorbXNnc3RyICJjcsOpZXIvcsOpaW5pdGlhbGlzZXIgZXQgYmFzY3VsZXIgc3VyIHVuZSBicmFuY2hlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3OQorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IHN3aXRjaCA8bm8tc3VjaC1icmFuY2g+JyIKK21zZ3N0ciAiaW50ZXJwcsOpdGVyICdnaXQgc3dpdGNoIDxicmFuY2hlLWluZXhpc3RhbnRlPiciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzgxCittc2dpZCAidGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zIgorbXNnc3RyICJsYWlzc2VyIHRvbWJlciBsZXMgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMworbXNnaWQgIndoaWNoIHRyZWUtaXNoIHRvIGNoZWNrb3V0IGZyb20iCittc2dzdHIgImRlIHF1ZWwgPGFyYnJlLWVzcXVlPiBmYWlyZSBsJ2V4dHJhY3Rpb24iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODE1Cittc2dpZCAicmVzdG9yZSB0aGUgaW5kZXgiCittc2dzdHIgInJlc3RhdXJlciBsJ2luZGV4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxNworbXNnaWQgInJlc3RvcmUgdGhlIHdvcmtpbmcgdHJlZSAoZGVmYXVsdCkiCittc2dzdHIgInJlc3RhdXJlciBsJ2FyYnJlIGRlIHRyYXZhaWwgKHBhciBkw6lmYXV0KSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTkKK21zZ2lkICJpZ25vcmUgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiaWdub3JlciBsZXMgZW50csOpZXMgbm9uLWZ1c2lvbm7DqWVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgyMAorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUiCittc2dzdHIgInV0aWxpc2VyIGxlIG1vZGUgZGUgc3VwZXJwb3NpdGlvbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjI4Cittc2dpZCAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxtb3RpZj5dIFsteCB8IC1YXSBbLS1dIDxjaGVtaW5zPi4uLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIlN1cHByZXNzaW9uIGRlICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMworIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiU3VwcHJpbWVyYWl0ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIklnbm9yZSBsZSBkw6lww7R0ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBza2lwIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAiSWdub3JlcmFpdCBsZSBkw6lww7R0ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgc3VwcHJlc3Npb24gZGUgJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbHN0YXQgJXNcbiIKK21zZ3N0ciAibHN0YXQgZGUgJXMgaW1wb3NzaWJsZVxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbVxuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmdcbiIKK21zZ3N0ciAiIgorIkFpZGUgZW4gbGlnbmUgOlxuIgorIjEgICAgICAgICAgIC0gc8OpbGVjdGlvbm5lciB1biDDqWzDqW1lbnQgbnVtw6lyb3TDqVxuIgorImZvbyAgICAgICAgIC0gc8OpbGVjdGlvbm5lciB1biDDqWzDqW1lbnQgcGFyIHVuIHByw6lmaXhlIHVuaXF1ZVxuIgorIiAgICAgICAgICAgIC0gKHZpZGUpIG5lIHJpZW4gc8OpbGVjdGlvbm5lclxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZ1xuIgorbXNnc3RyICIiCisiQWlkZSBlbiBsaWduZSA6XG4iCisiMSAgICAgICAgICAtIHPDqWxlY3Rpb25uZXIgdW4gc2V1bCDDqWzDqW1lbnRcbiIKKyIzLTUgICAgICAgIC0gc8OpbGVjdGlvbm5lciB1bmUgcGxhZ2UgZCfDqWzDqW1lbnRzXG4iCisiMi0zLDYtOSAgICAtIHPDqWxlY3Rpb25uZXIgcGx1c2lldXJzIHBsYWdlc1xuIgorImZvbyAgICAgICAgLSBzw6lsZWN0aW9ubmVyIHVuIMOpbMOpbWVudCBwYXIgdW4gcHLDqWZpeGUgdW5pcXVlXG4iCisiLS4uLiAgICAgICAtIGTDqXPDqWxlY3Rpb25uZXIgbGVzIMOpbMOpbWVudHMgc3DDqWNpZmnDqXNcbiIKKyIqICAgICAgICAgIC0gY2hvaXNpciB0b3VzIGxlcyDDqWzDqW1lbnRzXG4iCisiICAgICAgICAgICAtICh2aWRlKSB0ZXJtaW5lciBsYSBzw6lsZWN0aW9uXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTc1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT9cbiIKK21zZ3N0ciAiSGVpbiAoJXMpwqA/XG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIgorbXNnc3RyICJFbnRyZXogbGVzIG1vdGlmcyDDoCBpZ25vcmVyPj4gIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICJBVFRFTlRJT04gOiBJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGVzIMOpbMOpbWVudHMgY29ycmVzcG9uZGFudCDDoCA6ICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzIxCittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAiU8OpbGVjdGlvbm5lciBsZXMgw6lsw6ltZW50cyDDoCBzdXBwcmltZXIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiU3VwcHJpbWVyICVzIFt5L05dID8gIgorCisjOiBidWlsdGluL2NsZWFuLmM6Nzk1Cittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gZMOpbWFycmVyIGxlIG5ldHRveWFnZVxuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdXJlIGRlcyDDqWzDqW1lbnRzIHBhciBtb3RpZlxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzw6lsZWN0aW9ubmVyIGxlcyDDqWzDqW1lbnRzIMOgIHN1cHByaW1lciBwYXIgbnVtw6lyb3NcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0gY29uZmlybWVyIGNoYXF1ZSBzdXBwcmVzc2lvbiAoY29tbWUgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBhcnLDqnRlciBsZSBuZXR0b3lhZ2VcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gY2V0IMOpY3JhblxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBhaWRlIHBvdXIgbGEgc8OpbGVjdGlvbiBlbiBsaWduZSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzMQorbXNnaWQgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IgorbXNnaWRfcGx1cmFsICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiCittc2dzdHJbMF0gIlN1cHByaW1lcmFpdCBsJ8OpbMOpbWVudCBzdWl2YW50IDoiCittc2dzdHJbMV0gIlN1cHByaW1lcmFpdCBsZXMgw6lsw6ltZW50cyBzdWl2YW50cyA6IgorCisjOiBidWlsdGluL2NsZWFuLmM6ODQ3Cittc2dpZCAiTm8gbW9yZSBmaWxlcyB0byBjbGVhbiwgZXhpdGluZy4iCittc2dzdHIgIlBsdXMgZGUgZmljaGllciDDoCBuZXR0b3llciwgc29ydGllLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwOQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICJuZSBwYXMgYWZmaWNoZXIgbGVzIG5vbXMgZGVzIGZpY2hpZXJzIHN1cHByaW3DqXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTEKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAiZm9yY2VyIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTEyCittc2dpZCAiaW50ZXJhY3RpdmUgY2xlYW5pbmciCittc2dzdHIgIm5ldHRveWFnZSBpbnRlcmFjdGlmIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE0Cittc2dpZCAicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIgorbXNnc3RyICJzdXBwcmltZXIgbGVzIHLDqXBlcnRvaXJlcyBlbnRpZXJzIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjIgYnVpbHRpbi9kZXNjcmliZS5jOjU2NAorIzogYnVpbHRpbi9ncmVwLmM6ODg5IGJ1aWx0aW4vbG9nLmM6MTc3IGJ1aWx0aW4vbG9nLmM6MTc5CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjYgYnVpbHRpbi9uYW1lLXJldi5jOjUyOAorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgIm1vdGlmIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE2Cittc2dpZCAiYWRkIDxwYXR0ZXJuPiB0byBpZ25vcmUgcnVsZXMiCittc2dzdHIgImFqb3V0ZXIgPG1vdGlmPiBhdXggcsOoZ2xlcyBpZ25vcmUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTcKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICJzdXBwcmltZXIgbGVzIGZpY2hpZXJzIGlnbm9yw6lzLCBhdXNzaSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxOQorbXNnaWQgInJlbW92ZSBvbmx5IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgInN1cHByaW1lciBzZXVsZW1lbnQgbGVzIGZpY2hpZXJzIGlnbm9yw6lzIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTM3Cittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIteCBldCAtWCBuZSBwZXV2ZW50IHBhcyDDqnRyZSB1dGlsaXPDqXMgZW5zZW1ibGUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDEKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgcG9zaXRpb25uw6kgw6AgdHJ1ZSBldCBuaSAtaSwgLW4gb3UgLWYgZm91cm5pIDsgcmVmdXMgZGUgIgorIm5ldHRveWVyIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTQ0Cittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0cyB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyAiCisicmVmdXNpbmcgdG8gY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugw6AgdHJ1ZSBwYXIgZMOpZmF1dCBldCBuaSAtaSwgLW4gb3UgLWYgZm91cm5pIDsgcmVmdXMgZGUgIgorIm5ldHRveWVyIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDUKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs8b3B0aW9ucz5dIFstLV0gPGTDqXDDtHQ+IFs8csOpcGVydG9pcmU+XSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkzCittc2dpZCAiZG9uJ3QgY3JlYXRlIGEgY2hlY2tvdXQiCittc2dzdHIgIm5lIHBhcyBjcsOpZXIgZCdleHRyYWN0aW9uIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQgYnVpbHRpbi9jbG9uZS5jOjk2IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4OQorbXNnaWQgImNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY3LDqWVyIHVuIGTDqXDDtHQgbnUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OAorbXNnaWQgImNyZWF0ZSBhIG1pcnJvciByZXBvc2l0b3J5IChpbXBsaWVzIGJhcmUpIgorbXNnc3RyICJjcsOpZXIgdW4gZMOpcMO0dCBtaXJvaXIgKGltcGxpcXVlIGTDqXDDtHQgbnUpIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwCittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgInBvdXIgY2xvbmVyIGRlcHVpcyB1biBkw6lww7R0IGxvY2FsIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyCittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgIm5lIHBhcyB1dGlsaXNlciBkZSBsaWVucyBkdXJzIGxvY2F1eCwgdG91am91cnMgY29waWVyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA0Cittc2dpZCAic2V0dXAgYXMgc2hhcmVkIHJlcG9zaXRvcnkiCittc2dzdHIgInLDqWdsZXIgY29tbWUgZMOpcMO0dCBwYXJ0YWfDqSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgInBhdGhzcGVjIgorbXNnc3RyICJzcMOpY2lmaWNhdGV1ciBkZSBjaGVtaW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICJpbml0aWFsaXNlciBsZXMgc291cy1tb2R1bGVzIGRhbnMgbGUgY2xvbmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIm5vbWJyZSBkZSBzb3VzLW1vZHVsZXMgY2xvbsOpcyBlbiBwYXJhbGzDqGxlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTExIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NgorbXNnaWQgInRlbXBsYXRlLWRpcmVjdG9yeSIKK21zZ3N0ciAicsOpcGVydG9pcmUtbW9kw6hsZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMiBidWlsdGluL2luaXQtZGIuYzo0ODcKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICJyw6lwZXJ0b2lyZSBkZXB1aXMgbGVxdWVsIGxlcyBtb2TDqGxlcyB2b250IMOqdHJlIHV0aWxpc8OpcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNCBidWlsdGluL2Nsb25lLmM6MTE2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA3CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMgorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICJkw6lww7R0IGRlIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxNAorbXNnaWQgInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciCittc2dzdHIgInV0aWxpc2VyIHNldWxlbWVudCAtLXJlZmVyZW5jZSBwb3VyIGNsb25lciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOSBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ2CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDEgYnVpbHRpbi9yZXBhY2suYzozMjcKK21zZ2lkICJuYW1lIgorbXNnc3RyICJub20iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjAKK21zZ2lkICJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iCittc2dzdHIgInV0aWxpc2VyIDxub20+IGF1IGxpZXUgZGUgJ29yaWdpbicgcG91ciBzdWl2cmUgbGEgYnJhbmNoZSBhbW9udCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMgorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgImV4dHJhaXJlIDxicmFuY2hlPiBhdSBsaWV1IGRlIGxhIEhFQUQgZHUgcsOpcGVydG9pcmUgZGlzdGFudCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNAorbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgImNoZW1pbiB2ZXJzIGdpdC11cGxvYWQtcGFjayBzdXIgbGUgc2VydmV1ciBkaXN0YW50IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI1IGJ1aWx0aW4vZmV0Y2guYzoxNjggYnVpbHRpbi9ncmVwLmM6ODI4CisjOiBidWlsdGluL3B1bGwuYzoyMDcKK21zZ2lkICJkZXB0aCIKK21zZ3N0ciAicHJvZm9uZGV1ciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNgorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAiY3LDqWVyIHVuIGNsb25lIHN1cGVyZmljaWVsIGRlIGNldHRlIHByb2ZvbmRldXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjcgYnVpbHRpbi9mZXRjaC5jOjE3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzAKK21zZ2lkICJ0aW1lIgorbXNnc3RyICJoZXVyZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOAorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgc2luY2UgYSBzcGVjaWZpYyB0aW1lIgorbXNnc3RyICJjcsOpZXIgdW4gY2xvbmUgc3VwZXJmaWNpZWwgZGVwdWlzIHVuZSBkYXRlIHNww6ljaWZpcXVlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI5IGJ1aWx0aW4vZmV0Y2guYzoxNzIgYnVpbHRpbi9mZXRjaC5jOjE5NQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNDgwCittc2dpZCAicmV2aXNpb24iCittc2dzdHIgInLDqXZpc2lvbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMCBidWlsdGluL2ZldGNoLmM6MTczCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSwgZXhjbHVkaW5nIHJldiIKK21zZ3N0ciAiIgorImFwcHJvZm9uZGlyIGwnaGlzdG9yaXF1ZSBkJ3VuIGNsb25lIHN1cGVyZmljaWVsIGVuIGV4Y2x1YW50IHVuZSByw6l2aXNpb24iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTI4Cittc2dpZCAiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIgorbXNnc3RyICJjbG9uZXIgc2V1bGVtZW50IHVuZSBicmFuY2hlLCBIRUFEIG91IC0tYnJhbmNoIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM0Cittc2dpZCAiZG9uJ3QgY2xvbmUgYW55IHRhZ3MsIGFuZCBtYWtlIGxhdGVyIGZldGNoZXMgbm90IHRvIGZvbGxvdyB0aGVtIgorbXNnc3RyICIiCisibmUgcGFzIGNsb25lciBsZXMgdGFncyBldCBpbmRpcXVlciBhdXggcsOpY3Vww6lyYXRpb25zIGZ1dHVyZXMgZGUgbmUgcGFzIGxlICIKKyJmYWlyZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNgorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIGJlIHNoYWxsb3ciCittc2dzdHIgInRvdXMgbGVzIHNvdXMtbW9kdWxlcyBjbG9uw6lzIHNlcm9udCBzdXBlcmZpY2llbHMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzcgYnVpbHRpbi9pbml0LWRiLmM6NDk1Cittc2dpZCAiZ2l0ZGlyIgorbXNnc3RyICJnaXRkaXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzggYnVpbHRpbi9pbml0LWRiLmM6NDk2Cittc2dpZCAic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAic8OpcGFyZXIgbGUgcsOpcGVydG9pcmUgZ2l0IGRlIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzkKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgImNsw6k9dmFsZXVyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQwCittc2dpZCAic2V0IGNvbmZpZyBpbnNpZGUgdGhlIG5ldyByZXBvc2l0b3J5IgorbXNnc3RyICJyw6lnbGVyIGxhIGNvbmZpZ3VyYXRpb24gZGFucyBsZSBub3V2ZWF1IGTDqXDDtHQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJzZXJ2ZXItc3BlY2lmaWMiCittc2dzdHIgInNww6ljaWZpcXVlIGF1IHNlcnZldXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzMKK21zZ2lkICJvcHRpb24gdG8gdHJhbnNtaXQiCittc2dzdHIgIm9wdGlvbiDDoCB0cmFuc21ldHRyZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MyBidWlsdGluL2ZldGNoLmM6MTkxIGJ1aWx0aW4vcHVsbC5jOjIyMAorIzogYnVpbHRpbi9wdXNoLmM6NTc0Cittc2dpZCAidXNlIElQdjQgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgIm4ndXRpbGlzZXIgcXVlIGRlcyBhZHJlc3NlcyBJUHY0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ1IGJ1aWx0aW4vZmV0Y2guYzoxOTMgYnVpbHRpbi9wdWxsLmM6MjIzCisjOiBidWlsdGluL3B1c2guYzo1NzYKK21zZ2lkICJ1c2UgSVB2NiBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAibid1dGlsaXNlciBxdWUgZGVzIGFkcmVzc2VzIElQdjYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDkKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCB1c2UgdGhlaXIgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorInRvdXMgbGVzIHNvdXMtbW9kdWxlcyBjbG9uw6lzIHV0aWxpc2Vyb250IGxldXIgYnJhbmNoZSBkZSBzdWl2aSDDoCBkaXN0YW5jZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE1MQorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgdG8gaW5jbHVkZSBvbmx5IGZpbGVzIGF0IHJvb3QiCittc2dzdHIgIiIKKyJpbml0aWFsaXNlciBsZSBmaWNoaWVyIGQnZXh0cmFjdGlvbiBwYXJ0aWVsbGUgcG91ciBuJ2luY2x1cmUgcXVlIGxlcyAiCisiZmljaGllcnMgw6AgbGEgcmFjaW5lIgorCisjOiBidWlsdGluL2Nsb25lLmM6Mjg3Cittc2dpZCAiIgorIk5vIGRpcmVjdG9yeSBuYW1lIGNvdWxkIGJlIGd1ZXNzZWQuXG4iCisiUGxlYXNlIHNwZWNpZnkgYSBkaXJlY3Rvcnkgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiIgorIkF1Y3VuIG5vbSBkZSByw6lwZXJ0b2lyZSBuJ2EgcHUgw6p0cmUgZGV2aW7DqVxuIgorIlZldWlsbGV6IHNww6ljaWZpZXIgdW4gcsOpcGVydG9pcmUgZGFucyBsYSBsaWduZSBkZSBjb21tYW5kZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZvOiBDb3VsZCBub3QgYWRkIGFsdGVybmF0ZSBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiaW5mb8KgOiBpbXBvc3NpYmxlIGQnYWpvdXRlciB1bmUgYWx0ZXJuYXRpdmUgcG91ciAnJXMnwqA6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzIGV4aXN0ZSBldCBuJ2VzdCBwYXMgdW4gcsOpcGVydG9pcmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXJ0IGl0ZXJhdG9yIG92ZXIgJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGR1IGTDqW1hcnJhZ2UgdW4gaXTDqXJhdGV1ciBzdXIgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIGNyw6lhdGlvbiBkdSBsaWVuICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgY29waWUgdmVycyAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBpdGVyYXRlIG92ZXIgJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnaXTDqXJhdGlvbiBzdXIgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICJmYWl0LlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTA4Cittc2dpZCAiIgorIkNsb25lIHN1Y2NlZWRlZCwgYnV0IGNoZWNrb3V0IGZhaWxlZC5cbiIKKyJZb3UgY2FuIGluc3BlY3Qgd2hhdCB3YXMgY2hlY2tlZCBvdXQgd2l0aCAnZ2l0IHN0YXR1cydcbiIKKyJhbmQgcmV0cnkgd2l0aCAnZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LydcbiIKK21zZ3N0ciAiIgorIkxlIGNsb25lIGEgcsOpdXNzaSwgbWFpcyBsJ2V4dHJhY3Rpb24gYSDDqWNob3XDqS5cbiIKKyJWb3VzIHBvdXZleiBpbnNwZWN0ZXIgY2UgcXVpIGEgw6l0w6kgZXh0cmFpdCBhdmVjICdnaXQgc3RhdHVzJ1xuIgorImV0IHLDqWVzc2F5ZXIgYXZlYyAnZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LydcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxhIGJyYW5jaGUgZGlzdGFudGUgJyVzJyDDoCBjbG9uZXIuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbWV0dHJlIMOgIGpvdXIgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NTMKK21zZ2lkICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgIsOpY2hlYyBsb3JzIGRlIGwnaW5pdGlhbGlzYXRpb24gbCdleHRyYWN0aW9uIHBhcnRpZWxsZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc3NgorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAiIgorImxhIEhFQUQgZGlzdGFudGUgcsOpZsOocmUgw6AgdW5lIHLDqWbDqXJlbmNlIG5vbiBleGlzdGFudGUsIGltcG9zc2libGUgZGUgIgorImwnZXh0cmFpcmUuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MDcKK21zZ2lkICJ1bmFibGUgdG8gY2hlY2tvdXQgd29ya2luZyB0cmVlIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnZXh0cmFpcmUgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsZXMgcGFyYW3DqHRyZXMgZGFucyBsZSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjUKK21zZ2lkICJjYW5ub3QgcmVwYWNrIHRvIGNsZWFuIHVwIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHJlbWJhbGxlciBwb3VyIG5ldHRveWVyIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTI3Cittc2dpZCAiY2Fubm90IHVubGluayB0ZW1wb3JhcnkgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqWxpZXIgbGUgZmljaGllciB0ZW1wb3JhaXJlIGFsdGVybmF0ZXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjUgYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTUwCittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzLiIKK21zZ3N0ciAiVHJvcCBkJ2FyZ3VtZW50cy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjkKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIlZvdXMgZGV2ZXogc3DDqWNpZmllciB1biBkw6lww7R0IMOgIGNsb25lci4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJsZXMgb3B0aW9ucyAtLWJhcmUgZXQgLS1vcmlnaW4gJXMgc29udCBpbmNvbXBhdGlibGVzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4NQorbXNnaWQgIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICItLWJhcmUgZXQgLS1zZXBhcmF0ZS1naXQtZGlyIHNvbnQgaW5jb21wYXRpYmxlcy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJsZSBkw6lww7R0ICclcycgbidleGlzdGUgcGFzIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwNCBidWlsdGluL2ZldGNoLmM6MTc5NgorIywgYy1mb3JtYXQKK21zZ2lkICJkZXB0aCAlcyBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgImxhIHByb2ZvbmRldXIgJXMgbidlc3QgcGFzIHVuIGVudGllciBwb3NpdGlmIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAxNAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisibGUgY2hlbWluIGRlIGRlc3RpbmF0aW9uICclcycgZXhpc3RlIGTDqWrDoCBldCBuJ2VzdCBwYXMgdW4gcsOpcGVydG9pcmUgdmlkZS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAibGEgY29waWUgZGUgdHJhdmFpbCAnJXMnIGV4aXN0ZSBkw6lqw6AuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAzOSBidWlsdGluL2Nsb25lLmM6MTA2MCBidWlsdGluL2RpZmZ0b29sLmM6MjcxCisjOiBidWlsdGluL2xvZy5jOjE4NjYgYnVpbHRpbi93b3JrdHJlZS5jOjI5NSBidWlsdGluL3dvcmt0cmVlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZXMgcsOpcGVydG9pcmVzIGRlIHByZW1pZXIgbml2ZWF1IGRhbnMgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIHLDqXBlcnRvaXJlIGRlIGxhIGNvcGllIGRlIHRyYXZhaWwgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnJXMnLi4uXG4iCittc2dzdHIgIkNsb25hZ2UgZGFucyBsZSBkw6lww7R0IG51ICclcydcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAiQ2xvbmFnZSBkYW5zICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwOTAKK21zZ2lkICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBib3RoIC0tcmVmZXJlbmNlIGFuZCAtLXJlZmVyZW5jZS1pZi0iCisiYWJsZSIKK21zZ3N0ciAiIgorImNsb25lIC0tcmVjdXJzaXZlIG4nZXN0IHBhcyBjb21wYXRpYmxlIGF2ZWMgw6AgbGEgZm9pcyAtLXJlZmVyZW5jZSBldCAtLSIKKyJyZWZlcmVuY2UtaWYtYWJsZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTQKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tZGVwdGggZXN0IGlnbm9yw6kgZGFucyBsZXMgY2xvbmVzIGxvY2F1eCA6IHV0aWxpc2V6IHBsdXTDtHQgXCJmaWxlOi8vXCIuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1NgorbXNnaWQgIi0tc2hhbGxvdy1zaW5jZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLXNoYWxsb3ctc2luY2UgZXN0IGlnbm9yw6kgZGFucyBsZXMgY2xvbmVzIGxvY2F1eCA6IHV0aWxpc2V6IHBsdXTDtHQgXCJmaWxlOi8vIgorIlwiLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTgKK21zZ2lkICItLXNoYWxsb3ctZXhjbHVkZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLXNoYWxsb3ctZXhjbHVkZSBlc3QgaWdub3LDqSBkYW5zIGxlcyBjbG9uZXMgbG9jYXV4IDogdXRpbGlzZXogcGx1dMO0dCAiCisiXCJmaWxlOi8vXCIuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2MAorbXNnaWQgIi0tZmlsdGVyIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1maWx0ZXIgZXN0IGlnbm9yw6kgZGFucyBsZXMgY2xvbmVzIGxvY2F1eCA7IHV0aWxpc2V6IHBsdXTDtHQgZmlsZTovLyAuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2MworbXNnaWQgInNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGlnbm9yaW5nIC0tbG9jYWwiCittc2dzdHIgImxlIGTDqXDDtHQgc291cmNlIGVzdCBzdXBlcmZpY2llbCwgb3B0aW9uIC0tbG9jYWwgaWdub3LDqWUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTY4Cittc2dpZCAiLS1sb2NhbCBpcyBpZ25vcmVkIgorbXNnc3RyICItLWxvY2FsIGVzdCBpZ25vcsOpIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0MyBidWlsdGluL2Nsb25lLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAiTGEgYnJhbmNoZSBkaXN0YW50ZSAlcyBuJ2EgcGFzIMOpdMOpIHRyb3V2w6llIGRhbnMgbGUgZMOpcMO0dCBhbW9udCAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNTQKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJWb3VzIHNlbWJsZXogYXZvaXIgY2xvbsOpIHVuIGTDqXDDtHQgdmlkZS4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MTAKK21zZ2lkICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICJyZWNoZXJjaGVyIGxlcyB2YXJpYWJsZXMgZGUgY29uZmlndXJhdGlvbiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyOCBidWlsdGluL2NvbHVtbi5jOjI5Cittc2dpZCAibGF5b3V0IHRvIHVzZSIKK21zZ3N0ciAibWlzZSBlbiBwYWdlIMOgIHV0aWxpc2VyIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMwCittc2dpZCAiTWF4aW11bSB3aWR0aCIKK21zZ3N0ciAiTGFyZ2V1ciBtYXhpbWFsZSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIlJlbXBsaXNzYWdlIGQnZXNwYWNlIHN1ciBsYSBib3JkdXJlIGdhdWNoZSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMgorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICJSZW1wbGlzc2FnZSBkJ2VzcGFjZSBzdXIgbGUgY8O0dMOpIGRyb2l0IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMzCittc2dpZCAiUGFkZGluZyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMiCittc2dzdHIgIlJlbXBsaXNzYWdlIGQnZXNwYWNlIGVudHJlIGxlcyBjb2xvbm5lcyIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo1MQorbXNnaWQgIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb21tYW5kIGRvaXQgw6p0cmUgbGUgcHJlbWllciBhcmd1bWVudCIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjE4Cittc2dpZCAiIgorImdpdCBjb21taXQtdHJlZSBbKC1wIDxwYXJlbnQ+KS4uLl0gWy1TWzxrZXlpZD5dXSBbKC1tIDxtZXNzYWdlPikuLi5dIFsoLUYgIgorIjxmaWxlPikuLi5dIDx0cmVlPiIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtdHJlZSBbKC1wIDxwYXJlbnQ+KS4uLl0gWy1TWzxpZGNsw6k+XV0gWygtbSA8bWVzc2FnZT4pLi4uXSBbKC1GICIKKyI8ZmljaGllcj4pLi4uXSA8YXJicmU+IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHBhcmVudCAlcyBpZ25vcmVkIgorbXNnc3RyICJsZSBwYXJlbnQgZHVwbGlxdcOpICVzIGVzdCBpZ25vcsOpIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6NTYgYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzNiBidWlsdGluL2xvZy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAibm9tIGQnb2JqZXQgaW52YWxpZGUgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZcKgOiDDqWNoZWMgw6AgbCdvdXZlcnR1cmUgZGUgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlwqA6IMOpY2hlYyBkZSBsYSBsZWN0dXJlIGRlICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBjbG9zZSAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWXCoDogw6ljaGVjIGRlIGxhIGZlcm1ldHVyZSBkZSAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICJwYXJlbnQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTIKK21zZ2lkICJpZCBvZiBhIHBhcmVudCBjb21taXQgb2JqZWN0IgorbXNnc3RyICJpZCBkJ3VuIG9iamV0IGNvbW1pdCBwYXJlbnQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTQgYnVpbHRpbi9jb21taXQuYzoxNTAxIGJ1aWx0aW4vbWVyZ2UuYzoyNzEKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDkgYnVpbHRpbi9ub3Rlcy5jOjU3NSBidWlsdGluL3N0YXNoLmM6MTQ3NworIzogYnVpbHRpbi90YWcuYzo0MTIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICJtZXNzYWdlIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE1IGJ1aWx0aW4vY29tbWl0LmM6MTUwMQorbXNnaWQgImNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJtZXNzYWdlIGRlIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTgKK21zZ2lkICJyZWFkIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgImxpcmUgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIGRlcHVpcyB1biBmaWNoaWVyIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIxIGJ1aWx0aW4vY29tbWl0LmM6MTUxMyBidWlsdGluL21lcmdlLmM6Mjg4CisjOiBidWlsdGluL3B1bGwuYzoxNzUgYnVpbHRpbi9yZXZlcnQuYzoxMTgKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgInNpZ25lciBsYSB2YWxpZGF0aW9uIGF2ZWMgR1BHIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTMzCittc2dpZCAibXVzdCBnaXZlIGV4YWN0bHkgb25lIHRyZWUiCittc2dzdHIgImV4YWN0ZW1lbnQgdW4gYXJicmUgb2JsaWdhdG9pcmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxNDAKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWXCoDogw6ljaGVjIGRlIGxhIGxlY3R1cmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDEKK21zZ2lkICJnaXQgY29tbWl0IFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxzcMOpY2lmaWNhdGlvbi1kZS1jaGVtaW4+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2Cittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBzdGF0dXMgWzxvcHRpb25zPl0gWy0tXSA8c3DDqWNpZmljYXRpb24tZGUtY2hlbWluPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MQorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gYW1lbmQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2VcbiIKKyJpdCBlbXB0eS4gWW91IGNhbiByZXBlYXQgeW91ciBjb21tYW5kIHdpdGggLS1hbGxvdy1lbXB0eSwgb3IgeW91IGNhblxuIgorInJlbW92ZSB0aGUgY29tbWl0IGVudGlyZWx5IHdpdGggXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKK21zZ3N0ciAiIgorIlZvdXMgYXZleiBkZW1hbmTDqSBkZSBjb3JyaWdlciBsZSBjb21taXQgbGUgcGx1cyByw6ljZW50LCBtYWlzIGxlIGZhaXJlIGxlICIKKyJyZW5kcmFpdFxuIgorInZpZGUuIFZvdXMgcG91dmV6IHLDqXDDqXRlciB2b3RyZSBjb21tYW5kZSBhdmVjIC0tYWxsb3ctZW1wdHksIG91IHZvdXMgcG91dmV6XG4iCisic3VwcHJpbWVyIGNvbXBsw6h0ZW1lbnQgbGUgY29tbWl0IGF2ZWMgXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisiTGUgcGljb3JhZ2UgcHLDqWPDqWRlbnQgZXN0IMOgIHByw6lzZW50IHZpZGUsIHZyYWlzZW1ibGFibGVtZW50IGTDuyDDoCB1bmUgIgorInLDqXNvbHV0aW9uIGRlIGNvbmZsaXQuXG4iCisiU2kgdm91cyBzb3VoYWl0ZXogdG91dCBkZSBtw6ptZSBsZSB2YWxpZGVyLCB1dGlsaXNleiA6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzCittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgY2hlcnJ5LXBpY2sgLS1za2lwJ1xuIgorbXNnc3RyICJTaW5vbiwgdmV1aWxsZXogdXRpbGlzZXIgJ2dpdCBjaGVycnktcGljayAtLXNraXAnXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjYKK21zZ2lkICIiCisiYW5kIHRoZW4gdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorInRvIHJlc3VtZSBjaGVycnktcGlja2luZyB0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCittc2dzdHIgIiIKKyJ1dGlsaXNleiBlbnN1aXRlwqA6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCisiXG4iCisicG91ciBjb250aW51ZXIgbGUgcGljb3JhZ2UgZGVzIGNvbW1pdHMgcmVzdGFudHMuXG4iCisiU2kgdm91cyBzb3VoYWl0ZXogc2F1dGVyIGNlIGNvbW1pdCwgdXRpbGlzZXrCoDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcHBlZFxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMxNQorbXNnaWQgImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIKK21zZ3N0ciAiw6ljaGVjIGR1IGTDqXBhcXVldGFnZSBkZSBsJ29iamV0IGFyYnJlIEhFQUQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzUxCittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSBhdmVjIGwnb3B0aW9uIC1hIG4nYSBwYXMgZGUgc2VucyIKKworIzogYnVpbHRpbi9jb21taXQuYzozNjQKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIkF1Y3VuIGNoZW1pbiBhdmVjIGxlcyBvcHRpb25zIC0taW5jbHVkZS8tLW9ubHkgbidhIHBhcyBkZSBzZW5zLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNzYKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgbCdpbmRleCB0ZW1wb3JhaXJlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4NQorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSBsJ2Fqb3V0IGludGVyYWN0aWYiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDAwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgImltcG9zc2libGUgZGUgbWV0dHJlIMOgIGpvdXIgbCdpbmRleCB0ZW1wb3JhaXJlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQwMgorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIG1ldHRyZSDDoCBqb3VyIGwnYXJicmUgZGUgY2FjaGUgcHJpbmNpcGFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQyNyBidWlsdGluL2NvbW1pdC5jOjQ1MCBidWlsdGluL2NvbW1pdC5jOjQ5NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgZmljaGllciBuZXdfaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc5Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGZhaXJlIHVuZSB2YWxpZGF0aW9uIHBhcnRpZWxsZSBwZW5kYW50IHVuZSBmdXNpb24uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4MQorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmYWlyZSB1bmUgdmFsaWRhdGlvbiBwYXJ0aWVsbGUgcGVuZGFudCB1biBwaWNvcmFnZS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDg5Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbCdpbmRleCIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MDgKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIGZpY2hpZXIgZCdpbmRleCB0ZW1wb3JhaXJlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICJlbnTDqnRlIGQnYXV0ZXVyIG1hbnF1YW50IGRhbnMgbGUgY29tbWl0ICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGhhcyBtYWxmb3JtZWQgYXV0aG9yIGxpbmUiCittc2dzdHIgImxlIGNvbW1pdCAnJXMnIGEgdW5lIGxpZ25lIGQnYXV0ZXVyIG1hbGZvcm3DqWUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjI3Cittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAicGFyYW3DqHRyZSAtLWF1dGhvciBtYWwgZm9ybcOpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY4MAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSBzw6lsZWN0aW9ubmVyIHVuIGNhcmFjdMOocmUgZGUgY29tbWVudGFpcmVcbiIKKyJxdWkgbidlc3QgcGFzIHV0aWxpc8OpIGRhbnMgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIGFjdHVlbCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MTggYnVpbHRpbi9jb21taXQuYzo3NTEgYnVpbHRpbi9jb21taXQuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHJlY2hlcmNoZXIgbGUgY29tbWl0ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMCBidWlsdGluL3Nob3J0bG9nLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIihsZWN0dXJlIGR1IG1lc3NhZ2UgZGUgam91cm5hbCBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkKVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMgorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgam91cm5hbCBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgZmljaGllciBkZSBqb3VybmFsICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzY3IGJ1aWx0aW4vY29tbWl0LmM6NzgzCittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzc0Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzNAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIG1vZMOobGUgZGUgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJJbCBzZW1ibGUgcXVlIHZvdXMgdmFsaWRpZXogdW5lIGZ1c2lvbi5cbiIKKyJTaSBjZSBuJ2VzdCBwYXMgbGUgY2FzLCB2ZXVpbGxleiBzdXBwcmltZXIgbGUgZmljaGllclxuIgorIlx0JXNcbiIKKyJldCBlc3NheWV6IMOgIG5vdXZlYXUuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIklsIHNlbWJsZSBxdWUgdm91cyB2YWxpZGlleiB1biBwaWNvcmFnZS5cbiIKKyJTaSBjZSBuJ2VzdCBwYXMgbGUgY2FzLCB2ZXVpbGxleiBzdXBwcmltZXIgbGUgZmljaGllclxuIgorIlx0JXNcbiIKKyJldCBlc3NheWV6IMOgIG5vdXZlYXUuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJWZXVpbGxleiBzYWlzaXIgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIHBvdXIgdm9zIG1vZGlmaWNhdGlvbnMuIExlcyBsaWduZXNcbiIKKyJjb21tZW7Dp2FudCBwYXIgJyVjJyBzZXJvbnQgaWdub3LDqWVzLCBldCB1biBtZXNzYWdlIHZpZGUgYWJhbmRvbm5lIGxhICIKKyJ2YWxpZGF0aW9uLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIlZldWlsbGV6IHNhaXNpciBsZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24gcG91ciB2b3MgbW9kaWZpY2F0aW9ucy4gTGVzIGxpZ25lc1xuIgorImNvbW1lbsOnYW50IHBhciAnJWMnIHNlcm9udCBjb25zZXJ2w6llcyA7IHZvdXMgcG91dmV6IGxlcyBzdXBwcmltZXIgdm91cy1tw6ptZVxuIgorInNpIHZvdXMgbGUgc291aGFpdGV6LiBVbiBtZXNzYWdlIHZpZGUgYWJhbmRvbm5lIGxhIHZhbGlkYXRpb24uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXNBdXRldXIgOiAgICAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXNEYXRlIDogICAgICAgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXNWYWxpZGF0ZXVyIDogJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTI5Cittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgIkltcG9zc2libGUgZGUgbGlyZSBsJ2luZGV4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5NworbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSBjb25zdHJ1Y3Rpb24gZGVzIGFyYnJlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDExIGJ1aWx0aW4vdGFnLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAiVmV1aWxsZXogZm91cm5pciBsZSBtZXNzYWdlIGVuIHV0aWxpc2FudCBsJ29wdGlvbiAtbSBvdSAtRi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYXV0aG9yICclcycgaXMgbm90ICdOYW1lIDxlbWFpbD4nIGFuZCBtYXRjaGVzIG5vIGV4aXN0aW5nIGF1dGhvciIKK21zZ3N0ciAiIgorIi0tYXV0aG9yICclcycgbidlc3QgcGFzIGRlIGxhIGZvcm1lICdOb20gPGVtYWlsPicgbmkgbmUgY29ycmVzcG9uZCDDoCBhdWN1biAiCisiYXV0ZXVyIGV4aXN0YW50IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpZ25vcmVkIG1vZGUgJyVzJyIKK21zZ3N0ciAiTW9kZSBkZSBmaWNoaWVyIGlnbm9yw6kgaW52YWxpZGUgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDg3IGJ1aWx0aW4vY29tbWl0LmM6MTMyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgIk1vZGUgZGUgZmljaGllciBub24gc3VpdmkgaW52YWxpZGUgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTI3Cittc2dpZCAiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWxvbmcgZXQgLXogc29udCBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzEKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJMJ3V0aWxpc2F0aW9uIHNpbXVsdGFuw6llIGRlIC0tcmVzZXQtYXV0aG9yIGV0IC0tYXV0aG9yIG4nYSBwYXMgZGUgc2VucyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgwCittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgIklsIG4neSBhIHJpZW4gw6AgY29ycmlnZXIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODMKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJWb3VzIMOqdGVzIGVuIHBsZWluZSBmdXNpb24gLS0gaW1wb3NzaWJsZSBkZSBjb3JyaWdlciAoYW1lbmQpLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTg1Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hlcnJ5LXBpY2sgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiVm91cyDDqnRlcyBlbiBwbGVpbiBwaWNvcmFnZSAtLSBpbXBvc3NpYmxlIGRlIGNvcnJpZ2VyIChhbWVuZCkuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODgKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICJMZXMgb3B0aW9ucyAtLXNxdWFzaCBldCAtLWZpeHVwIG5lIHBldXZlbnQgcGFzIMOqdHJlIHV0aWxpc8OpZXMgZW5zZW1ibGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5OAorbXNnaWQgIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIgorbXNnc3RyICJVbmUgc2V1bGUgb3B0aW9uIHBhcm1pIC1jLy1DLy1GLy0tZml4dXAgcGV1dCDDqnRyZSB1dGlsaXPDqWUuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDAKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYuIgorbXNnc3RyICJMJ29wdGlvbiAtbSBuZSBwZXV0IHBhcyDDqnRyZSBjb21iaW7DqWUgYXZlYyAtYy8tQy8tRi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIwOAorbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIi0tcmVzZXQtYXV0aG9yIG5lIHBldXQgw6p0cmUgdXRpbGlzw6kgcXUnYXZlYyAtQywgLWMgb3UgLS1hbWVuZC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyNQorbXNnaWQgIk9ubHkgb25lIG9mIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiIgorIlVuZSBzZXVsZSBvcHRpb24gcGFybWkgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggcGV1dCAiCisiw6p0cmUgdXRpbGlzw6llLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzICclcyAuLi4nIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiZGVzIGNoZW1pbnMgJyVzIC4uLicgYXZlYyBsJ29wdGlvbiAtYSBuJ2EgcGFzIGRlIHNlbnMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MiBidWlsdGluL2NvbW1pdC5jOjE1MjQKK21zZ2lkICJzaG93IHN0YXR1cyBjb25jaXNlbHkiCittc2dzdHIgImFmZmljaGVyIGwnw6l0YXQgYXZlYyBjb25jaXNpb24iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NCBidWlsdGluL2NvbW1pdC5jOjE1MjYKK21zZ2lkICJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiYWZmaWNoZXIgbCdpbmZvcm1hdGlvbiBkZSBicmFuY2hlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjYKK21zZ2lkICJzaG93IHN0YXNoIGluZm9ybWF0aW9uIgorbXNnc3RyICJhZmZpY2hlciBsJ2luZm9ybWF0aW9uIGRlIHJlbWlzYWdlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjggYnVpbHRpbi9jb21taXQuYzoxNTI4Cittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgImNhbGN1bGUgbGVzIHZhbGV1cnMgY29tcGzDqHRlcyBlbiBhdmFuY2UvZW4gcmV0YXJkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzAKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzaW9uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzAgYnVpbHRpbi9jb21taXQuYzoxNTMwIGJ1aWx0aW4vcHVzaC5jOjU0OQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY0MworbXNnaWQgIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IgorbXNnc3RyICJzb3J0aWUgcG91ciB0cmFpdGVtZW50IGF1dG9tYXRpcXVlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzMgYnVpbHRpbi9jb21taXQuYzoxNTMyCittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICJhZmZpY2hlciBsJ8OpdGF0IGVuIGZvcm1hdCBsb25nIChwYXIgZMOpZmF1dCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3NiBidWlsdGluL2NvbW1pdC5jOjE1MzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAidGVybWluZXIgbGVzIMOpbMOpbWVudHMgcGFyIE5VTCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc4IGJ1aWx0aW4vY29tbWl0LmM6MTM4MiBidWlsdGluL2NvbW1pdC5jOjE1MzgKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTUzIGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU2CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1OSBidWlsdGluL3JlYmFzZS5jOjE1NjkgcGFyc2Utb3B0aW9ucy5oOjMzNgorbXNnaWQgIm1vZGUiCittc2dzdHIgIm1vZGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OSBidWlsdGluL2NvbW1pdC5jOjE1MzgKK21zZ2lkICJzaG93IHVudHJhY2tlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IGFsbCwgbm9ybWFsLCBuby4gKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKyJhZmZpY2hlciBsZXMgZmljaGllcnMgbm9uIHN1aXZpcywgXCJtb2RlXCIgZmFjdWx0YXRpZiA6IGFsbCAodG91cyksIG5vcm1hbCwgIgorIm5vLiAoRMOpZmF1dCA6IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MworbXNnaWQgIiIKKyJzaG93IGlnbm9yZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAoRGVmYXVsdDogIgorInRyYWRpdGlvbmFsKSIKK21zZ3N0ciAiIgorImFmZmljaGVyIGxlcyBmaWNoaWVycyBpZ25vcsOpcywgXCJtb2RlXCIgZmFjdWx0YXRpZiA6IHRyYWRpdGlvbmFsICIKKyIodHJhZGl0aW9ubmVsKSwgbWF0Y2hpbmcgKGNvcnJlc3BvbmRhbnQpLCBuby4gKETDqWZhdXTCoDogdHJhZGl0aW9uYWwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODUgcGFyc2Utb3B0aW9ucy5oOjE5MgorbXNnaWQgIndoZW4iCittc2dzdHIgInF1YW5kIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODYKK21zZ2lkICIiCisiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcywgb3B0aW9uYWwgd2hlbjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKyJpZ25vcmVyIGxlcyBtb2RpZmljYXRpb25zIGRhbnMgbGVzIHNvdXMtbW9kdWxlcywgXCJxdWFuZFwiIGZhY3VsdGF0aWYgOiBhbGwgIgorIih0b3VzKSwgZGlydHkgKHNhbGUpLCB1bnRyYWNrZWQgKG5vbiBzdWl2aSkuIChEw6lmYXV0IDogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg4Cittc2dpZCAibGlzdCB1bnRyYWNrZWQgZmlsZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGZpY2hpZXJzIG5vbiBzdWl2aXMgZW4gY29sb25uZXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4OQorbXNnaWQgImRvIG5vdCBkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAibmUgcGFzIGTDqXRlY3RlciBsZXMgcmVub21tYWdlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzkxCittc2dpZCAiZGV0ZWN0IHJlbmFtZXMsIG9wdGlvbmFsbHkgc2V0IHNpbWlsYXJpdHkgaW5kZXgiCittc2dzdHIgIiIKKyJkw6l0ZWN0ZXIgbGVzIHJlbm9tbWFnZXMsIGVuIHNww6ljaWZpYW50IG9wdGlvbm5lbGxlbWVudCBsZSBmYWN0ZXVyIGRlICIKKyJzaW1pbGFyaXTDqSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDExCittc2dpZCAiVW5zdXBwb3J0ZWQgY29tYmluYXRpb24gb2YgaWdub3JlZCBhbmQgdW50cmFja2VkLWZpbGVzIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorIkNvbWJpbmFpc29uIG5vbiBzdXBwb3J0w6llIGQnYXJndW1lbnRzIHN1ciBsZXMgZmljaGllcnMgaWdub3LDqXMgZXQgbm9uLXN1aXZpcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk0Cittc2dpZCAic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIKK21zZ3N0ciAic3VwcHJpbWVyIGxlIHLDqXN1bcOpIGFwcsOocyB1bmUgdmFsaWRhdGlvbiByw6l1c3NpZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1Cittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJhZmZpY2hlciBsZXMgZGlmZiBkYW5zIGxlIG1vZMOobGUgZGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTcKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICJPcHRpb25zIGR1IG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk4IGJ1aWx0aW4vbWVyZ2UuYzoyNzUgYnVpbHRpbi90YWcuYzo0MTQKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsaXJlIGxlIG1lc3NhZ2UgZGVwdWlzIHVuIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorbXNnaWQgImF1dGhvciIKK21zZ3N0ciAiYXV0ZXVyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTkKK21zZ2lkICJvdmVycmlkZSBhdXRob3IgZm9yIGNvbW1pdCIKK21zZ3N0ciAicmVtcGxhY2VyIGwnYXV0ZXVyIHBvdXIgbGEgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAwIGJ1aWx0aW4vZ2MuYzo1MzgKK21zZ2lkICJkYXRlIgorbXNnc3RyICJkYXRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgInJlbXBsYWNlciBsYSBkYXRlIHBvdXIgbGEgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAyIGJ1aWx0aW4vY29tbWl0LmM6MTUwMyBidWlsdGluL2NvbW1pdC5jOjE1MDQKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNSBwYXJzZS1vcHRpb25zLmg6MzI4IHJlZi1maWx0ZXIuaDo5MgorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAicsOpdXRpbGlzZXIgZXQgw6lkaXRlciBsZSBtZXNzYWdlIGR1IGNvbW1pdCBzcMOpY2lmacOpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDMKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAicsOpdXRpbGlzZXIgbGUgbWVzc2FnZSBkdSBjb21taXQgc3DDqWNpZmnDqSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA0Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorInV0aWxpc2VyIHVuIG1lc3NhZ2UgYXUgZm9ybWF0IGF1dG9zcXVhc2ggcG91ciBjb3JyaWdlciBsZSBjb21taXQgc3DDqWNpZmnDqSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA1Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gc3F1YXNoIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyJ1dGlsaXNlciB1biBtZXNzYWdlIGF1IGZvcm1hdCBhdXRvc3F1YXNoIHBvdXIgY29tcHJlc3NlciBsZSBjb21taXQgc3DDqWNpZmnDqSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA2Cittc2dpZCAidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIKK21zZ3N0ciAiIgorIsOgIHByw6lzZW50IGplIHN1aXMgbCdhdXRldXIgZGUgbGEgdmFsaWRhdGlvbiAodXRpbGlzw6kgYXZlYyAtQy8tYy8tLWFtZW5kKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA3IGJ1aWx0aW4vbG9nLmM6MTYzNCBidWlsdGluL21lcmdlLmM6MjkwCisjOiBidWlsdGluL3B1bGwuYzoxNDQgYnVpbHRpbi9yZXZlcnQuYzoxMTAKK21zZ2lkICJhZGQgU2lnbmVkLW9mZi1ieToiCittc2dzdHIgImFqb3V0ZXIgdW5lIGVudHLDqWUgU2lnbmVkLW9mZi1ieSA6IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDgKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgInV0aWxpc2VyIGxlIGZpY2hpZXIgZGUgbW9kw6hsZSBzcMOpY2lmacOpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDkKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAiZm9yY2VyIGwnw6lkaXRpb24gZHUgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTEKK21zZ2lkICJpbmNsdWRlIHN0YXR1cyBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiaW5jbHVyZSBsJ8OpdGF0IGRhbnMgbGUgbW9kw6hsZSBkZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNgorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICJWYWxpZGVyIGxlcyBvcHRpb25zIGRlcyBjb250ZW51cyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE3Cittc2dpZCAiY29tbWl0IGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJ2YWxpZGVyIHRvdXMgbGVzIGZpY2hpZXJzIG1vZGlmacOpcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE4Cittc2dpZCAiYWRkIHNwZWNpZmllZCBmaWxlcyB0byBpbmRleCBmb3IgY29tbWl0IgorbXNnc3RyICJham91dGVyIGxlcyBmaWNoaWVycyBzcMOpY2lmacOpcyDDoCBsJ2luZGV4IHBvdXIgbGEgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE5Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgZmlsZXMiCittc2dzdHIgImFqb3V0ZXIgZGVzIGZpY2hpZXJzIGVuIG1vZGUgaW50ZXJhY3RpZiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIwCittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAiYWpvdXRlciBsZXMgbW9kaWZpY2F0aW9ucyBlbiBtb2RlIGludGVyYWN0aWYiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMQorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAidmFsaWRlciBzZXVsZW1lbnQgbGVzIGZpY2hpZXJzIHNww6ljaWZpw6lzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjIKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAiw6l2aXRlciBkJ3V0aWxpc2VyIGxlcyBjcm9jaGV0cyBwcmUtY29tbWl0IGV0IGNvbW1pdC1tc2ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMworbXNnaWQgInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiCittc2dzdHIgImFmZmljaGVyIGNlIHF1aSBzZXJhaXQgdmFsaWTDqSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM2Cittc2dpZCAiYW1lbmQgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICJjb3JyaWdlciBsYSB2YWxpZGF0aW9uIHByw6ljw6lkZW50ZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM3Cittc2dpZCAiYnlwYXNzIHBvc3QtcmV3cml0ZSBob29rIgorbXNnc3RyICLDqXZpdGVyIGQndXRpbGlzZXIgbGUgY3JvY2hldCBwb3N0LXJld3JpdGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU0NAorbXNnaWQgIm9rIHRvIHJlY29yZCBhbiBlbXB0eSBjaGFuZ2UiCittc2dzdHIgImFjY2VwdGVyIGQnZW5yZWdpc3RyZXIgdW5lIG1vZGlmaWNhdGlvbiB2aWRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NDYKK21zZ2lkICJvayB0byByZWNvcmQgYSBjaGFuZ2Ugd2l0aCBhbiBlbXB0eSBtZXNzYWdlIgorbXNnc3RyICJhY2NlcHRlciBkJ2VucmVnaXN0cmVyIHVuZSBtb2RpZmljYXRpb24gYXZlYyB1biBtZXNzYWdlIHZpZGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICJGaWNoaWVyIE1FUkdFX0hFQUQgY29ycm9tcHUgKCVzKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjI2Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTU9ERSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIE1FUkdFX01PREUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24gOiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iCittc2dzdHIgIkFiYW5kb24gZGUgbGEgdmFsaWRhdGlvbiBkw7sgw6AgdW4gbWVzc2FnZSBkZSB2YWxpZGF0aW9uIHZpZGUuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY1NworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgIkFiYW5kb24gZGUgbGEgdmFsaWRhdGlvbiA7IHZvdXMgbidhdmV6IHBhcyDDqWRpdMOpIGxlIG1lc3NhZ2VcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjkxCittc2dpZCAiIgorInJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgYW5kIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDovXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJsZSBkw6lww7R0IGEgw6l0w6kgbWlzIMOgIGpvdXIsIG1haXMgaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgZmljaGllclxuIgorIm5ld19pbmRleC4gVsOpcmlmaWV6IHF1ZSBsZSBkaXNxdWUgbidlc3QgcGFzIHBsZWluIG91IHF1ZSBsZSBxdW90YVxuIgorIm4nYSBwYXMgw6l0w6kgZMOpcGFzc8OpLCBwdWlzIGxhbmNleiBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDovXCIgcG91ciByw6lwYXJlci4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNworbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXSIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLXNoYWxsb3ddIFstLVtuby1dcHJvZ3Jlc3NdIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjIKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxyw6lwZXJ0b2lyZS1kJ29iamV0Pl0gWy0tYXBwZW5kfC0tIgorInNwbGl0XSBbLS1yZWFjaGFibGV8LS1zdGRpbi1wYWNrc3wtLXN0ZGluLWNvbW1pdHNdIFstLXxuby1dcHJvZ3Jlc3NdICIKKyI8b3B0aW9ucyBkZSBkaXZpc2lvbj4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmQgb2JqZWN0IGRpcmVjdG9yeSBtYXRjaGluZyAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlIHLDqXBlcnRvaXJlIG9iamV0IGNvcnJlc3BvbmRhbnQgw6AgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NjggYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMjUKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjEwIGJ1aWx0aW4vZmV0Y2guYzoxNzkgYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAiZGlyIgorbXNnc3RyICJyw6lwZXJ0b2lyZSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo2OSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyNgorIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoyMTEKK21zZ2lkICJUaGUgb2JqZWN0IGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgZ3JhcGgiCittc2dzdHIgIkxlIHLDqXBlcnRvaXJlIGQnb2JqZXQgb8O5IHN0b2NrZXIgbGUgZ3JhcGhlIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjcxCittc2dpZCAiaWYgdGhlIGNvbW1pdC1ncmFwaCBpcyBzcGxpdCwgb25seSB2ZXJpZnkgdGhlIHRpcCBmaWxlIgorbXNnc3RyICIiCisic2kgbGUgZ3JhcGhlIGRlIGNvbW1pdCBlc3QgZGl2aXPDqSwgdsOpcmlmaWVyIHNldWxlbWVudCBsZSBmaWNoaWVyIHNvbW1ldCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo5NCB0L2hlbHBlci90ZXN0LXJlYWQtZ3JhcGguYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBjb21taXQtZ3JhcGggJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciBsZSBncmFwaGUgZGUgY29tbWl0ICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTI4Cittc2dpZCAic3RhcnQgd2FsayBhdCBhbGwgcmVmcyIKK21zZ3N0ciAiY29tbWVuY2VyIGxlIHBhcmNvdXJzIMOgIHRvdXRlcyBsZXMgcsOpZnMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTMwCittc2dpZCAic2NhbiBwYWNrLWluZGV4ZXMgbGlzdGVkIGJ5IHN0ZGluIGZvciBjb21taXRzIgorbXNnc3RyICJzY2FubmVyIGxlcyBpbmRleCBjb21wYWN0w6lzIGxpc3TDqXMgc3VyIHN0ZGluIMOgIGxhIHJlY2hlcmNoZSBkZSBjb21taXRzIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzMgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgImNvbW1lbmNlciBsZSBwYXJjb3VycyBhdXggY29tbWl0cyBsaXN0w6lzIHN1ciBzdGRpbiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzQKK21zZ2lkICJpbmNsdWRlIGFsbCBjb21taXRzIGFscmVhZHkgaW4gdGhlIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICIiCisiaW5jbHVyZSB0b3VzIGxlcyBjb21taXRzIGTDqWrDoCBwcsOpc2VudHMgZGFucyBsZSBmaWNoaWVyIGRlIGdyYXBoZSBkZSBjb21taXRzIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNworbXNnaWQgImFsbG93IHdyaXRpbmcgYW4gaW5jcmVtZW50YWwgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgInBlcm1ldHRyZSBkJ8OpY3JpcmUgdW4gZmljaGllciBpbmNyw6ltZW50YWwgZGUgZ3JhcGhlIGRlIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzkgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNDMKK21zZ2lkICJtYXhpbXVtIG51bWJlciBvZiBjb21taXRzIGluIGEgbm9uLWJhc2Ugc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisibGUgbm9tYnJlIG1heGltdW0gZGUgY29tbWl0cyBkYW5zIHVuIGdyYXBoZSBkZSBjb21taXQgZGl2aXPDqSBwYXMgZGUgYmFzZSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNDEKK21zZ2lkICJtYXhpbXVtIHJhdGlvIGJldHdlZW4gdHdvIGxldmVscyBvZiBhIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAicmFwcG9ydCBtYXhpbXVtIGVudHJlIGRldXggbml2ZWF1eCBkJ3VuIGdyYXBoZSBkZSBjb21taXQgZGl2aXPDqSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNTkKK21zZ2lkICJ1c2UgYXQgbW9zdCBvbmUgb2YgLS1yZWFjaGFibGUsIC0tc3RkaW4tY29tbWl0cywgb3IgLS1zdGRpbi1wYWNrcyIKK21zZ3N0ciAidXRpbGlzZXogdW4gc2V1bCBwYXJtaSAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzIG91IC0tc3RkaW4tcGFja3MiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTEKK21zZ2lkICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEwNCBidWlsdGluL2Vudi0taGVscGVyLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIC0tdHlwZSBhcmd1bWVudCwgJXMiCittc2dzdHIgImFyZ3VtZW50IC0tdHlwZSBub24gcmVjb25udSwgJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTE2Cittc2dpZCAib25seSBvbmUgdHlwZSBhdCBhIHRpbWUiCittc2dzdHIgInF1J3VuIHNldWwgdHlwZSDDoCBsYSBmb2lzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNQorbXNnaWQgIkNvbmZpZyBmaWxlIGxvY2F0aW9uIgorbXNnc3RyICJFbXBsYWNlbWVudCBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI2Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAidXRpbGlzZXIgbGVzIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBnbG9iYWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI3Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAidXRpbGlzZXIgbGUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIGR1IHN5c3TDqG1lIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOAorbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1dGlsaXNlciBsZSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gZHUgZMOpcMO0dCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjkKK21zZ2lkICJ1c2UgcGVyLXdvcmt0cmVlIGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1dGlsaXNlciB1biBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gcGFyIGFyYnJlIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAidXNlIGdpdmVuIGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1dGlsaXNlciBsZSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gc3DDqWNpZmnDqSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzEKK21zZ2lkICJibG9iLWlkIgorbXNnc3RyICJibG9iLWlkIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgInJlYWQgY29uZmlnIGZyb20gZ2l2ZW4gYmxvYiBvYmplY3QiCittc2dzdHIgImxpcmUgbGEgY29uZmlndXJhdGlvbiBkZXB1aXMgbCdvYmpldCBibG9iIGZvdXJuaSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzIKK21zZ2lkICJBY3Rpb24iCittc2dzdHIgIkFjdGlvbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzMKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAib2J0ZW5pciBsYSB2YWxldXIgOiBub20gW3JlZ2V4LWRlLXZhbGV1cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM0Cittc2dpZCAiZ2V0IGFsbCB2YWx1ZXM6IGtleSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJvYnRlbmlyIHRvdXRlcyBsZXMgdmFsZXVycyA6IGNsw6kgW3JlZ2V4LWRlLXZhbGV1cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM1Cittc2dpZCAiZ2V0IHZhbHVlcyBmb3IgcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIm9idGVuaXIgbGVzIHZhbGV1ciBwb3VyIGxhIHJlZ2V4cCA6IHJlZ2V4LWRlLW5vbSBbcmVnZXgtZGUtdmFsZXVyXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzYKK21zZ2lkICJnZXQgdmFsdWUgc3BlY2lmaWMgZm9yIHRoZSBVUkw6IHNlY3Rpb25bLnZhcl0gVVJMIgorbXNnc3RyICJvYnRlbmlyIGxhIHZhbGV1ciBzcMOpY2lmaXF1ZSBwb3VyIGwnVVJMIDogc2VjdGlvblsudmFyXSBVUkwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM3Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgIiIKKyJyZW1wbGFjZXIgdG91dGVzIGxlcyB2YXJpYWJsZXMgY29ycmVzcG9uZGFudCA6IG5vbSB2YWxldXIgW3JlZ2V4LWRlLXZhbGV1cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM4Cittc2dpZCAiYWRkIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIgorbXNnc3RyICJham91dGVyIHVuZSBub3V2ZWxsZSB2YXJpYWJsZSA6IG5vbSB2YWxldXIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM5Cittc2dpZCAicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAic3VwcHJpbWVyIHVuZSB2YXJpYWJsZSA6IG5vbSBbcmVnZXgtZGUtdmFsZXVyXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDAKK21zZ2lkICJyZW1vdmUgYWxsIG1hdGNoZXM6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAic3VwcHJpbWVyIHRvdXRlcyBsZXMgY29ycmVzcG9uZGFuY2VzIG5vbSBbcmVnZXgtZGUtdmFsZXVyXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDEKK21zZ2lkICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiCittc2dzdHIgInJlbm9tbWVyIHVuZSBzZWN0aW9uIDogYW5jaWVuLW5vbSBub3V2ZWF1LW5vbSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDIKK21zZ2lkICJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIgorbXNnc3RyICJzdXBwcmltZXIgdW5lIHNlY3Rpb24gOiBub20iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQzCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgImFmZmljaGVyIHRvdXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ0Cittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgIm91dnJpciB1biDDqWRpdGV1ciIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDUKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAidHJvdXZlciBsYSBjb3VsZXVyIGNvbmZpZ3Vyw6llIDogc2xvdCBbcGFyIGTDqWZhdXRdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NgorbXNnaWQgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IHNsb3QgW3N0ZG91dC1pcy10dHldIgorbXNnc3RyICJ0cm91dmVyIGxlIHLDqWdsYWdlIGRlIGxhIGNvdWxldXIgOiBzbG90IFtzdGRvdXQtZXN0LXR0eV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ3Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVHlwZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDggYnVpbHRpbi9lbnYtLWhlbHBlci5jOjM4Cittc2dpZCAidmFsdWUgaXMgZ2l2ZW4gdGhpcyB0eXBlIgorbXNnc3RyICJjZSB0eXBlIGVzdCBhc3NpZ27DqSDDoCBsYSB2YWxldXIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ5Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICJsYSB2YWxldXIgZXN0IFwidHJ1ZVwiICh2cmFpKSBvdSBcImZhbHNlXCIgKGZhdXgpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MAorbXNnaWQgInZhbHVlIGlzIGRlY2ltYWwgbnVtYmVyIgorbXNnc3RyICJsYSB2YWxldXIgZXN0IHVuIG5vbWJyZSBkw6ljaW1hbCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTEKK21zZ2lkICJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiCittc2dzdHIgImxhIHZhbGV1ciBlc3QgLS1ib29sIG91IC0taW50IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MgorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgImxhIHZhbGV1ciBlc3QgdW4gY2hlbWluICh2ZXJzIHVuIGZpY2hpZXIgb3UgdW4gcsOpcGVydG9pcmUpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MworbXNnaWQgInZhbHVlIGlzIGFuIGV4cGlyeSBkYXRlIgorbXNnc3RyICJsYSB2YWxldXIgZXN0IHVuZSBkYXRlIGQnZXhwaXJhdGlvbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTQKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAiQXV0cmUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU1Cittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJ0ZXJtaW5lciBsZXMgdmFsZXVycyBhdmVjIHVuIGNhcmFjdMOocmUgTlVMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NgorbXNnaWQgInNob3cgdmFyaWFibGUgbmFtZXMgb25seSIKK21zZ3N0ciAibidhZmZpY2hlciBxdWUgbGVzIG5vbXMgZGUgdmFyaWFibGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU3Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICJyZXNwZWN0ZXIgbGVzIGRpcmVjdGl2ZXMgZCdpbmNsdXNpb24gbG9ycyBkZSBsYSByZWNoZXJjaGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU4Cittc2dpZCAic2hvdyBvcmlnaW4gb2YgY29uZmlnIChmaWxlLCBzdGFuZGFyZCBpbnB1dCwgYmxvYiwgY29tbWFuZCBsaW5lKSIKK21zZ3N0ciAiIgorImFmZmljaGVyIGwnb3JpZ2luZSBkZSBsYSBjb25maWd1cmF0aW9uIChmaWNoaWVyLCBlbnRyw6llIHN0YW5kYXJkLCBibG9iLCAiCisibGlnbmUgZGUgY29tbWFuZGUpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OQorbXNnaWQgInNob3cgc2NvcGUgb2YgY29uZmlnICh3b3JrdHJlZSwgbG9jYWwsIGdsb2JhbCwgc3lzdGVtLCBjb21tYW5kKSIKK21zZ3N0ciAiIgorImFmZmljaGVyIGxhIHBvcnTDqWUgZGUgY29uZmlndXJhdGlvbiAoYXJicmUgZGUgdHJhdmFpbCwgbG9jYWwsIGdsb2JhbCwgIgorInN5c3TDqG1lLCBjb21tYW5kZSkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTYwIGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MAorbXNnaWQgInZhbHVlIgorbXNnc3RyICJ2YWxldXIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTYwCittc2dpZCAid2l0aCAtLWdldCwgdXNlIGRlZmF1bHQgdmFsdWUgd2hlbiBtaXNzaW5nIGVudHJ5IgorbXNnc3RyICJhdmVjIC0tZ2V0LCB1dGlsaXNlciBsZSB2YWxldXIgcGFyIGTDqWZhdXQgcXVhbmQgbCdlbnRyw6llIG4nZXhpc3RlIHBhcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlICVkIgorbXNnc3RyICJtYXV2YWlzIG5vbWJyZSBkJ2FyZ3VtZW50cywgZGV2cmFpdCDDqnRyZSAlZCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlIGZyb20gJWQgdG8gJWQiCittc2dzdHIgIm1hdXZhaXMgbm9tYnJlIGQnYXJndW1lbnRzLCBkZXZyYWl0IMOqdHJlIGVudHJlICVkIGV0ICVkIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAibW90aWYgZGUgY2zDqSBpbnZhbGlkZcKgOiAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZvcm1hdCBkZWZhdWx0IGNvbmZpZyB2YWx1ZTogJXMiCittc2dzdHIgIsOpY2hlYyBkdSBmb3JtYXRhZ2UgZGUgbGEgdmFsZXVyIGRlIGNvbmZpZyBwYXIgZMOpZmF1dMKgOiAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGNvbG9yICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsYSBjb3VsZXVyICclcyciCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDU5Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGRlZmF1bHQgY29sb3IgdmFsdWUiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsYSB2YWxldXIgZGUgY291bGV1ciBwYXIgZMOpZmF1dCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MTIgYnVpbHRpbi9jb25maWcuYzo3NjgKK21zZ2lkICJub3QgaW4gYSBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICJwYXMgZGFucyB1biByw6lwZXJ0b2lyZSBnaXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTE1Cittc2dpZCAid3JpdGluZyB0byBzdGRpbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJsJ8OpY3JpdHVyZSBzdXIgc3RkaW4gbidlc3QgcGFzIHN1cHBvcnTDqWUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTE4Cittc2dpZCAid3JpdGluZyBjb25maWcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAibCfDqWNyaXR1cmUgZGUgYmxvYiBkZSBjb25maWd1cmF0aW9uIG4nZXN0IHBhcyBzdXBwb3J0w6llPCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiMgVGhpcyBpcyBHaXQncyBwZXItdXNlciBjb25maWd1cmF0aW9uIGZpbGUuXG4iCisiW3VzZXJdXG4iCisiIyBQbGVhc2UgYWRhcHQgYW5kIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKK21zZ3N0ciAiIgorIiMgQ2VjaSBlc3QgbGUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIHBlcnNvbm5lbCBkZSBHaXQuXG4iCisiW3VzZXJdXG4iCisiIyBWZXVpbGxleiBhZGFwdGVyIGV0IGTDqWNvbW1lbnRlciBsZXMgbGlnbmVzIHN1aXZhbnRlc8KgOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MjcKK21zZ2lkICJvbmx5IG9uZSBjb25maWcgZmlsZSBhdCBhIHRpbWUiCittc2dzdHIgInVuIHNldWwgZmljaGllciBkZSBjb25maWd1cmF0aW9uIMOgIGxhIGZvaXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjMyCittc2dpZCAiLS1sb2NhbCBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLWxvY2FsIG5lIHBldXQgw6p0cmUgdXRpbGlzw6kgcXUnw6AgbCdpbnTDqXJpZXVyIGQndW4gZMOpcMO0dCBnaXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjM1Cittc2dpZCAiLS1ibG9iIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tYmxvYiBuZSBwZXV0IMOqdHJlIHV0aWxpc8OpIHF1J8OgIGwnaW50w6lyaWV1ciBkJ3VuIGTDqXDDtHQgZ2l0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1NQorbXNnaWQgIiRIT01FIG5vdCBzZXQiCittc2dzdHIgIiRIT01FIG4nZXN0IHBhcyBkw6lmaW5pIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY3OQorbXNnaWQgIiIKKyItLXdvcmt0cmVlIGNhbm5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgd29ya2luZyB0cmVlcyB1bmxlc3MgdGhlIGNvbmZpZ1xuIgorImV4dGVuc2lvbiB3b3JrdHJlZUNvbmZpZyBpcyBlbmFibGVkLiBQbGVhc2UgcmVhZCBcIkNPTkZJR1VSQVRJT04gRklMRVwiXG4iCisic2VjdGlvbiBpbiBcImdpdCBoZWxwIHdvcmt0cmVlXCIgZm9yIGRldGFpbHMiCittc2dzdHIgIiIKKyItLXdvcmt0cmVlIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIGF2ZWMgZGVzIGFyYnJlcyBkZSB0cmF2YWlsIG11bHRpcGxlc1xuIgorIsOgIG1vaW5zIHF1ZSBsJ2V4dGVuc2lvbiB3b3JrdHJlZUNvbmZpZyBzb2l0IGNvbmZpZ3Vyw6kuIFZldWlsbGV6IGxpcmVcbiIKKyJsYSBzZWN0aW9uIFwiQ09ORklHVVJBVElPTiBGSUxFXCIgZGUgXCJnaXQgaGVscCB3b3JrdHJlZVwiIHBvdXIgcGx1cyBkZSAiCisiZMOpdGFpbHMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzE0Cittc2dpZCAiLS1nZXQtY29sb3IgYW5kIHZhcmlhYmxlIHR5cGUgYXJlIGluY29oZXJlbnQiCittc2dzdHIgIi0tZ2V0LWNvbG9yIGV0IGxlIHR5cGUgZGUgbGEgdmFyaWFibGUgc29udCBpbmNvaMOpcmVudHMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzE5Cittc2dpZCAib25seSBvbmUgYWN0aW9uIGF0IGEgdGltZSIKK21zZ3N0ciAidW5lIHNldWxlIGFjdGlvbiDDoCBsYSBmb2lzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczMgorbXNnaWQgIi0tbmFtZS1vbmx5IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWxpc3Qgb3IgLS1nZXQtcmVnZXhwIgorbXNnc3RyICItLW5hbWUtb25seSBuJ2VzdCBhcHBsaWNhYmxlIHF1J2F2ZWMgLS1saXN0IG91IC0tZ2V0LXJlZ2V4cCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzgKK21zZ2lkICIiCisiLS1zaG93LW9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwLCBhbmQgLS0iCisibGlzdCIKK21zZ3N0ciAiIgorIi0tc2hvdy1vcmlnaW4gbidlc3QgYXBwbGljYWJsZSBxdSdhdmVjIC0tZ2V0LCAtLWdldC1hbGwsIC0tZ2V0LXJlZ2V4cCBvdSAtLSIKKyJsaXN0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0NAorbXNnaWQgIi0tZGVmYXVsdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQiCittc2dzdHIgIi0tZGVmYXVsdCBuJ2VzdCBhcHBsaWNhYmxlIHF1J2F2ZWMgLS1nZXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbmZpZyBmaWxlICclcyciCittc2dzdHIgImxlY3R1cmUgZHUgZmljaGllciBkZSBjb25maWd1cmF0aW9uICclcycgaW1wb3NzaWJsZSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NjAKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGNvbmZpZyBmaWxlKHMpIgorbXNnc3RyICJlcnJldXIgbG9ycyBkdSB0cmFpdGVtZW50IGRlIGZpY2hpZXIocykgZGUgY29uZmlndXJhdGlvbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzAKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgImwnw6lkaXRpb24gZGUgc3RkaW4gbidlc3QgcGFzIHN1cHBvcnTDqWUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzcyCittc2dpZCAiZWRpdGluZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJsJ8OpZGl0aW9uIGRlIGJsb2JzIG4nZXN0IHBhcyBzdXBwb3J0w6llIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAiY3LDqWF0aW9uIGltcG9zc2libGUgZHUgZmljaGllciBkZSBjb25maWd1cmF0aW9uICclcyciCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3Qgb3ZlcndyaXRlIG11bHRpcGxlIHZhbHVlcyB3aXRoIGEgc2luZ2xlIHZhbHVlXG4iCisiICAgICAgIFVzZSBhIHJlZ2V4cCwgLS1hZGQgb3IgLS1yZXBsYWNlLWFsbCB0byBjaGFuZ2UgJXMuIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSBzdXJjaGFyZ2VyIGRlcyB2YWxldXJzIG11bHRpcGxlcyBhdmVjIHVuZSBzZXVsZSB2YWxldXJcbiIKKyIgICAgICAgVXRpbGlzZXogdW5lIHJlZ2V4cCwgLS1hZGQgb3UgLS1yZXBsYWNlLWFsbCBwb3VyIG1vZGlmaWVyICVzLiIKKworIzogYnVpbHRpbi9jb25maWcuYzo4NzMgYnVpbHRpbi9jb25maWcuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBzZWN0aW9uOiAlcyIKK21zZ3N0ciAic2VjdGlvbiBpbmV4aXN0YW50ZcKgOiAlcyIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTAKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorbXNnc3RyICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzoxMDAKK21zZ2lkICJwcmludCBzaXplcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtYXQiCittc2dzdHIgImFmZmljaGUgbGVzIHRhaWxsZXMgZGFucyB1biBmb3JtYXQgaHVtYWluZW1lbnQgbGlzaWJsZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI2Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIFs8Y29tbWl0LWlzaD4uLi5dIgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gPGNvbW1pdCBvdSBhcHBhcmVudMOpPioiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiaGVhZCIKK21zZ3N0ciAidMOqdGUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICJsw6lnZXIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImFubm90YXRlZCIKK21zZ3N0ciAiYW5ub3TDqSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgImwnw6l0aXF1ZXR0ZSBhbm5vdMOpZSAlcyBuJ2VzdCBwYXMgZGlzcG9uaWJsZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIgorbXNnc3RyICJsJ8OpdGlxdWV0dGUgYW5ub3TDqWUgJXMgbidhIHBhcyBkZSBub20gZW1iYXJxdcOpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgImwnw6l0aXF1ZXR0ZSAnJXMnIGVzdCBlbiBmYWl0ICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICJhdWN1bmUgw6l0aXF1ZXR0ZSBuZSBjb3JyZXNwb25kIHBhcmZhaXRlbWVudCDDoCAnJXMnIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGV4YWN0IG1hdGNoIG9uIHJlZnMgb3IgdGFncywgc2VhcmNoaW5nIHRvIGRlc2NyaWJlXG4iCittc2dzdHIgIiIKKyJQYXMgZGUgY29ycmVzcG9uZGFuY2UgZXhhY3RlIHN1ciBkZXMgcsOpZnMgb3UgZGVzIMOpdGlxdWV0dGVzLCByZWNoZXJjaGUgcGFyICIKKyJkZXNjcmliZVxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICJyZWNoZXJjaGUgdGVybWluw6llIMOgICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKyJBdWN1bmUgw6l0aXF1ZXR0ZSBhbm5vdMOpZSBuZSBwZXV0IGTDqWNyaXJlICclcycuXG4iCisiQ2VwZW5kYW50LCBpbCBleGlzdGUgZGVzIMOpdGlxdWV0dGVzIG5vbi1hbm5vdMOpZXMgOiBlc3NheWV6IGF2ZWMgLS10YWdzLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgorbXNnc3RyICIiCisiQXVjdW5lIMOpdGlxdWV0dGUgbmUgcGV1dCBkw6ljcmlyZSAnJXMnLlxuIgorIkVzc2F5ZXogLS1hbHdheXMsIG91IGNyw6lleiBkZXMgw6l0aXF1ZXR0ZXMuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICIlbHUgY29tbWl0cyBwYXJjb3VydXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKyJwbHVzIGRlICVpIMOpdGlxdWV0dGVzIG9udCDDqXTDqSB0cm91dsOpZXM7IHNldWxlcyBsZXMgJWkgcGx1cyByw6ljZW50ZXMgc29udCAiCisiYWZmaWNow6llc1xuIgorImFiYW5kb24gZGUgbGEgcmVjaGVyY2hlIMOgICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAiZMOpY3JpcmUgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiJXMgbidlc3QgcGFzIHVuIG5vbSBkJ29iamV0IHZhbGlkZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBuZWl0aGVyIGEgY29tbWl0IG5vciBibG9iIgorbXNnc3RyICIlcyBuJ2VzdCBuaSB1biBjb21taXQgbmkgdW4gYmxvYiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MQorbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgInJlY2hlcmNoZXIgbCfDqXRpcXVldHRlIHF1aSBzdWl0IGxlIGNvbW1pdCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MgorbXNnaWQgImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiCittc2dzdHIgImTDqWJvZ3VlciBsYSBzdHJhdMOpZ2llIGRlIHJlY2hlcmNoZSBzdXIgc3RkZXJyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUzCittc2dpZCAidXNlIGFueSByZWYiCittc2dzdHIgInV0aWxpc2VyIG4naW1wb3J0ZSBxdWVsbGUgcsOpZsOpcmVuY2UiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTQKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAidXRpbGlzZXIgbidpbXBvcnRlIHF1ZWxsZSDDqXRpcXVldHRlLCBtw6ptZSBub24tYW5ub3TDqWUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTUKK21zZ2lkICJhbHdheXMgdXNlIGxvbmcgZm9ybWF0IgorbXNnc3RyICJ0b3Vqb3VycyB1dGlsaXNlciBsZSBmb3JtYXQgbG9uZyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NgorbXNnaWQgIm9ubHkgZm9sbG93IGZpcnN0IHBhcmVudCIKK21zZ3N0ciAibmUgc3VpdnJlIHF1ZSBsZSBwcmVtaWVyIHBhcmVudCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1OQorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgIm4nYWZmaWNoZXIgcXVlIGxlcyBjb3JyZXNwb25kYW5jZXMgZXhhY3RlcyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2MQorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgIiIKKyJjb25zaWTDqXJlciB1bmlxdWVtZW50IGxlcyA8bj4gw6l0aXF1ZXR0ZXMgbGUgcGx1cyByw6ljZW50ZXMgKGTDqWZhdXQgOiAxMCkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjMKK21zZ2lkICJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJuZSBjb25zaWTDqXJlciBxdWUgbGVzIMOpdGlxdWV0dGVzIGNvcnJlc3BvbmRhbnQgw6AgPG1vdGlmPiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2NQorbXNnaWQgImRvIG5vdCBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAibmUgcGFzIGNvbnNpZMOpcmVyIGxlcyDDqXRpcXVldHRlcyBjb3JyZXNwb25kYW50IMOgIDxtb3RpZj4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjcgYnVpbHRpbi9uYW1lLXJldi5jOjUzNQorbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG9iamV0cyBjb21taXRzIGFicsOpZ8OpcyBlbiBkZXJuaWVyIHJlY291cnMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjggYnVpbHRpbi9kZXNjcmliZS5jOjU3MQorbXNnaWQgIm1hcmsiCittc2dzdHIgIm1hcnF1ZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2OQorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIKK21zZ3N0ciAiYWpvdXRlciA8bWFycXVlPiBzaSBsYSBjb3BpZSBkZSB0cmF2YWlsIGVzdCBzYWxlIChkw6lmYXV0IDogXCItZGlydHlcIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NzIKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGJyb2tlbiB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWJyb2tlblwiKSIKK21zZ3N0ciAiIgorImFqb3V0ZXIgPG1hcnF1ZT4gc2kgbGEgY29waWUgZGUgdHJhdmFpbCBlc3QgY2Fzc8OpZSAoZMOpZmF1dCA6IFwiLWJyb2tlblwiKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU5MAorbXNnaWQgIi0tbG9uZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFiYnJldj0wIgorbXNnc3RyICItLWxvbmcgZXQgLS1hYmJyZXY9MCBzb250IGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MTkKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAiYXVjdW4gbm9tIHRyb3V2w6ksIGltcG9zc2libGUgZGUgZMOpY3JpcmUgcXVvaSBxdWUgY2Ugc29pdC4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NzAKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1kaXJ0eSBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgbGEgc3DDqWNpZmljYXRpb24gZGUgY29tbWl0cyBvdSBhc3NpbWlsw6lzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjcyCittc2dpZCAiLS1icm9rZW4gaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWJyb2tlbiBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgbGVzIGNvbW1pdHMgb3UgYXNzaW1pbMOpcyIKKworIzogYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiCittc2dzdHIgIiclcycgOiBuJ2VzdCBwYXMgdW4gZmljaGllciByw6lndWxpZXIgbmkgdW4gbGllbiBzeW1ib2xpcXVlIgorCisjOiBidWlsdGluL2RpZmYuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcHRpb246ICVzIgorbXNnc3RyICJvcHRpb24gaW52YWxpZGUgOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzUwCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIkNlIG4nZXN0IHBhcyB1biBkw6lww7R0IGdpdCAhIgorCisjOiBidWlsdGluL2RpZmYuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIm9iamV0IHNww6ljaWZpw6kgJyVzJyBpbnZhbGlkZS4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIgorbXNnc3RyICJwbHVzIGRlIGRldXggYmxvYnMgc3DDqWNpZmnDqXMgOiAnJXMnIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAib2JqZXQgbm9uIGfDqXLDqSAnJXMnIHNww6ljaWZpw6kuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAKK21zZ2lkICJnaXQgZGlmZnRvb2wgWzxvcHRpb25zPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBkaWZmdG9vbCBbPG9wdGlvbnM+XSBbPGNvbW1pdD4gWzxjb21taXQ+XV0gWy0tXSBbPGNoZW1pbj4uLi5dIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZDogJWQiCittc2dzdHIgIsOpY2hlYyA6ICVkIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImxlY3R1cmUgZHUgbGllbiBzeW1ib2xpcXVlICVzIGltcG9zc2libGUiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayBmaWxlICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgZmljaGllciBzeW1saW5rICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyBmb3Igc3ltbGluayAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsaXJlIGwnb2JqZXQgJXMgcG91ciBsZSBzeW1saW5rICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NDEzCittc2dpZCAiIgorImNvbWJpbmVkIGRpZmYgZm9ybWF0cygnLWMnIGFuZCAnLS1jYycpIGFyZSBub3Qgc3VwcG9ydGVkIGluXG4iCisiZGlyZWN0b3J5IGRpZmYgbW9kZSgnLWQnIGFuZCAnLS1kaXItZGlmZicpLiIKK21zZ3N0ciAiIgorImxlcyBmb3JtYXRzIGRlIGRpZmYgY29tYmluw6lzICgnLWMnIGV0ICctLWNjJykgbmUgc29udCBwYXMgc3VwcG9ydMOpc1xuIgorImRhbnMgbGUgbW9kZSBkZSBkaWZmIGRlIHLDqXBlcnRvaXJlICgnLWQnIGV0ICctLWRpci1kaWZmJykuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJvdGggZmlsZXMgbW9kaWZpZWQ6ICclcycgYW5kICclcycuIgorbXNnc3RyICJsZXMgZGV1eCBmaWNoaWVycyBzb250IG1vZGlmacOpc8KgOiAnJXMnIGV0ICclcycuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjM2Cittc2dpZCAid29ya2luZyB0cmVlIGZpbGUgaGFzIGJlZW4gbGVmdC4iCittc2dzdHIgImxlIGZpY2hpZXIgZGFucyBsJ2FyYnJlIGRlIHRyYXZhaWwgYSDDqXTDqSBsYWlzc8OpLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wb3JhcnkgZmlsZXMgZXhpc3QgaW4gJyVzJy4iCittc2dzdHIgImRlcyBmaWNoaWVycyB0ZW1wb3JhaXJlcyBleGlzdGVudCBkYW5zICclcycuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjQ4Cittc2dpZCAieW91IG1heSB3YW50IHRvIGNsZWFudXAgb3IgcmVjb3ZlciB0aGVzZS4iCittc2dzdHIgInZvdXMgcG91cnJpZXogc291aGFpdGVyIGxlcyBuZXR0b3llciBvdSBsZXMgcsOpY3Vww6lyZXIuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njk3Cittc2dpZCAidXNlIGBkaWZmLmd1aXRvb2xgIGluc3RlYWQgb2YgYGRpZmYudG9vbGAiCittc2dzdHIgInV0aWxpc2VyIGBkaWZmLmd1aXRvb2xgIGF1IGxpZXUgZGUgYGRpZmYudG9vbGAiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTkKK21zZ2lkICJwZXJmb3JtIGEgZnVsbC1kaXJlY3RvcnkgZGlmZiIKK21zZ3N0ciAicsOpYWxpc2UgdW4gZGlmZiBkZSByw6lwZXJ0b2lyZSBjb21wbGV0IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzAxCittc2dpZCAiZG8gbm90IHByb21wdCBiZWZvcmUgbGF1bmNoaW5nIGEgZGlmZiB0b29sIgorbXNnc3RyICJuZSBwYXMgY29uZmlybWVyIGF2YW50IGRlIGxhbmNlciBsJ291dGlsIGRlIGRpZmYiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDYKK21zZ2lkICJ1c2Ugc3ltbGlua3MgaW4gZGlyLWRpZmYgbW9kZSIKK21zZ3N0ciAidXRpbGlzZXIgbGVzIGxpZW5zIHN5bWJvbGlxdWVzIGVuIG1vZGUgZGUgZGlmZiBkZSByw6lwZXJ0b2lyZSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNworbXNnaWQgInRvb2wiCittc2dzdHIgIm91dGlsIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA4Cittc2dpZCAidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIgorbXNnc3RyICJ1dGlsaXNlciBsJ291dGlsIGRlIGRpZmYgc3DDqWNpZmnDqSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxMAorbXNnaWQgInByaW50IGEgbGlzdCBvZiBkaWZmIHRvb2xzIHRoYXQgbWF5IGJlIHVzZWQgd2l0aCBgLS10b29sYCIKK21zZ3N0ciAiYWZmaWNoZXIgdW5lIGxpc3RlIGRlcyBvdXRpbHMgZGUgZGlmZiB1dGlsaXNhYmxlcyBhdmVjIGAtLXRvb2xgIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEzCittc2dpZCAiIgorIm1ha2UgJ2dpdC1kaWZmdG9vbCcgZXhpdCB3aGVuIGFuIGludm9rZWQgZGlmZiB0b29sIHJldHVybnMgYSBub24gLSB6ZXJvIGV4aXQgIgorImNvZGUiCittc2dzdHIgIiIKKyJwcm92b3F1ZSBsYSBmaW4gZGUgJ2dpdC1kaWZmdG9vbCcgc2kgbCdvdXRpbCBkZSBkaWZmIGludm9xdcOpIHJlbnZvaWUgdW4gY29kZSAiCisibm9uLW51bCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxNgorbXNnaWQgInNwZWNpZnkgYSBjdXN0b20gY29tbWFuZCBmb3Igdmlld2luZyBkaWZmcyIKK21zZ3N0ciAic3DDqWNpZmllciB1bmUgY29tbWFuZGUgcGVyc29ubmFsaXPDqWUgcG91ciB2aXN1YWxpc2VyIGxlcyBkaWZmw6lyZW5jZXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTcKK21zZ2lkICJwYXNzZWQgdG8gYGRpZmZgIgorbXNnc3RyICJwYXNzw6kgw6AgYGRpZmZgIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzMyCittc2dpZCAiZGlmZnRvb2wgcmVxdWlyZXMgd29ya3RyZWUgb3IgLS1uby1pbmRleCIKK21zZ3N0ciAiZGlmZnRvb2wgZXhpZ2UgdW4gYXJicmUgZGUgdHJhdmFpbCBvdSAtLW5vLWluZGV4IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzM5Cittc2dpZCAiLS1kaXItZGlmZiBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICItLWRpci1kaWZmIGVzdCBpbmNvbXBhdGlibGUgYXZlYyAtLW5vLWluZGV4IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzQyCittc2dpZCAiLS1ndWksIC0tdG9vbCBhbmQgLS1leHRjbWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1ndWksIC0tdG9vbCBldCAtLWV4dGNtZCBzb250IG11dHVlbGxlbWVudCBleGNsdXNpZnMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NTAKK21zZ2lkICJubyA8dG9vbD4gZ2l2ZW4gZm9yIC0tdG9vbD08dG9vbD4iCittc2dzdHIgInBhcyBkJzxvdXRpbD4gc3DDqWNpZmnDqSBwb3VyIC0tdG9vbD08b3V0aWw+IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzU3Cittc2dpZCAibm8gPGNtZD4gZ2l2ZW4gZm9yIC0tZXh0Y21kPTxjbWQ+IgorbXNnc3RyICJwYXMgZGUgPGNvbW1hbmRlPiBzcMOpY2lmacOpIHBvdXIgLS1leHRjbWQ9PGNvbW1hbmRlPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYKK21zZ2lkICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3B0aW9ucz4gPGVudi12YXI+IgorbXNnc3RyICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3B0aW9ucz4gPHZhciBkJ2Vudj4iCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzozNyBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTgKK21zZ2lkICJ0eXBlIgorbXNnc3RyICJ0eXBlIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NDEKK21zZ2lkICJkZWZhdWx0IGZvciBnaXRfZW52XyooLi4uKSB0byBmYWxsIGJhY2sgb24iCittc2dzdHIgInZhbGV1ciBwYXIgZMOpZmF1dCBwb3VyIGdpdF9lbnZfKiguLi4pIGVuIGNhcyBkJ2Fic2VuY2UiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MworbXNnaWQgImJlIHF1aWV0IG9ubHkgdXNlIGdpdF9lbnZfKigpIHZhbHVlIGFzIGV4aXQgY29kZSIKK21zZ3N0ciAiIgorIm1vZGUgc2lsZW5jaWV1eCBuJ3V0aWxpc2FudCBsYSB2YWxldXIgZGUgZ2l0X2Vudl8qKCkgcXVlIHBvdXIgbGUgY29kZSBkZSAiCisic29ydGllIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYSBib29sZWFuIHZhbHVlIHdpdGggYC0tdHlwZT1ib29sYCwgbm90IGAlc2AiCittc2dzdHIgIiIKKyJsJ29wdGlvbiBgLS1kZWZhdWx0YCBhdHRlbmQgdW5lIHZhbGV1ciBib29sw6llbm5lIGF2ZWMgYC0tdHlwZT1ib29sYCwgcGFzIGAlc2AiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYW4gdW5zaWduZWQgbG9uZyB2YWx1ZSB3aXRoIGAtLXR5cGU9dWxvbmdgLCBub3QgYCIKKyIlc2AiCittc2dzdHIgIiIKKyJsJ29wdGlvbiBgLS1kZWZhdWx0YCBhdHRlbmQgdW5lIHZhbGV1ciBlbnRpZXIgbG9uZyBub24gc2lnbsOpIGF2ZWMgYC0tIgorInR5cGU9dWxvbmdgLCBwYXMgYCVzYCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjI5Cittc2dpZCAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKK21zZ3N0ciAiZ2l0IGZhc3QtZXhwb3J0IFtvcHRpb25zLWRlLWxpc3RlLWRlLXLDqXZpc2lvbnNdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6ODUzCittc2dpZCAiRXJyb3I6IENhbm5vdCBleHBvcnQgbmVzdGVkIHRhZ3MgdW5sZXNzIC0tbWFyay10YWdzIGlzIHNwZWNpZmllZC4iCittc2dzdHIgIiIKKyJFcnJldXLCoDogaW1wb3NzaWJsZSBkJ2V4cG9ydGVyIGRlcyDDqXRpcXVldHRlcyBpbWJyaXF1w6llcyDDoCBtb2lucyBxdWUgLS1tYXJrLSIKKyJ0YWdzIG5lIHNvaXQgc3DDqWNpZmnDqS4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTUyCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAiYWZmaWNoZXIgbGEgcHJvZ3Jlc3Npb24gYXByw6hzIDxuPiBvYmpldHMiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU0Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHNpZ25lZCB0YWdzIgorbXNnc3RyICJzw6lsZWN0aW9ubmVyIGxhIGdlc3Rpb24gZGVzIMOpdGlxdWV0dGVzIHNpZ27DqWVzIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NworbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgIiIKKyJzw6lsZWN0aW9ubmVyIGxhIGdlc3Rpb24gZGVzIMOpdGlxdWV0dGVzIHF1aSBwb2ludGVudCBzdXIgZGVzIG9iamV0cyBmaWx0csOpcyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjAKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgY29tbWl0IG1lc3NhZ2VzIGluIGFuIGFsdGVybmF0ZSBlbmNvZGluZyIKK21zZ3N0ciAiIgorInPDqWxlY3Rpb25uZXIgbGEgZ2VzdGlvbiBkZXMgbWVzc2FnZXMgZGUgdmFsaWRhdGlvbiBkYW5zIHVuIGVuY29kYWdlICIKKyJhbHRlcm5hdGlmIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MworbXNnaWQgIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJFbnJlZ2lzdHJlciBsZXMgbWFycXVlcyBkYW5zIGNlIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY1Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICJpbXBvcnRlciBsZXMgbWFycXVlcyBkZXB1aXMgY2UgZmljaGllciIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjkKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUgaWYgaXQgZXhpc3RzIgorbXNnc3RyICJpbXBvcnRlciBsZXMgbWFycXVlcyBkZXB1aXMgY2UgZmljaGllciBzJ2lsIGV4aXN0ZSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzEKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAiZmFsc2lmaWVyIHVuIGF1dGV1ciBkJ8OpdGlxdWV0dGUgc2kgbCfDqXRpcXVldHRlIG4nZW4gcHLDqXNlbnRlIHBhcyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzMKK21zZ2lkICJPdXRwdXQgZnVsbCB0cmVlIGZvciBlYWNoIGNvbW1pdCIKK21zZ3N0ciAiQWZmaWNoZXIgbCdhcmJyZSBjb21wbGV0IHBvdXIgY2hhcXVlIGNvbW1pdCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzUKK21zZ2lkICJVc2UgdGhlIGRvbmUgZmVhdHVyZSB0byB0ZXJtaW5hdGUgdGhlIHN0cmVhbSIKK21zZ3N0ciAiVXRpbGlzZXIgbGEgZm9uY3Rpb24gXCJkb25lXCIgcG91ciB0ZXJtaW5lciBsZSBmbHV4IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NgorbXNnaWQgIlNraXAgb3V0cHV0IG9mIGJsb2IgZGF0YSIKK21zZ3N0ciAiU2F1dGVyIGwnYWZmaWNoYWdlIGRlIGRvbm7DqWVzIGRlIGJsb2IiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc3IGJ1aWx0aW4vbG9nLmM6MTcwNQorbXNnaWQgInJlZnNwZWMiCittc2dzdHIgInNww6ljaWZpY2F0ZXVyIGRlIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OAorbXNnaWQgIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIKK21zZ3N0ciAiQXBwbGlxdWVyIGxlIHNww6ljaWZpY2F0ZXVyIGRlIHLDqWbDqXJlbmNlIGF1eCByw6lmw6lyZW5jZXMgZXhwb3J0w6llcyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzkKK21zZ2lkICJhbm9ueW1pemUgb3V0cHV0IgorbXNnc3RyICJhbm9ueW1pc2UgbGEgc29ydGllIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MQorbXNnaWQgIlJlZmVyZW5jZSBwYXJlbnRzIHdoaWNoIGFyZSBub3QgaW4gZmFzdC1leHBvcnQgc3RyZWFtIGJ5IG9iamVjdCBpZCIKK21zZ3N0ciAiIgorImxlcyBwYXJlbnRzIHLDqWbDqXJlbmNlcyBxdWkgbmUgc29udCBwYXMgZGFucyBsZSBmbHV4IGQnZXhwb3J0IHJhcGlkZSBwYXIgaWQgIgorImQnb2JqZXQiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTgzCittc2dpZCAiU2hvdyBvcmlnaW5hbCBvYmplY3QgaWRzIG9mIGJsb2JzL2NvbW1pdHMiCittc2dzdHIgIkFmZmljaGVyIGxlcyBpZHMgZCdvYmpldCBvcmlnaW5hdXggZGVzIGJsb2JzL2NvbW1pdHMiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTg1Cittc2dpZCAiTGFiZWwgdGFncyB3aXRoIG1hcmsgaWRzIgorbXNnc3RyICJNYXJxdWVyIGxlcyDDqXRpcXVldHRlcyBhdmVjIGRlcyBpZHMgZGUgbWFycXVlIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTIyMAorbXNnaWQgIkNhbm5vdCBwYXNzIGJvdGggLS1pbXBvcnQtbWFya3MgYW5kIC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cyIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZCd1dGlsaXNlciDDoCBsYSBmb2lzIC0taW1wb3J0LW1hcmtzIGV0IC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM0Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxkw6lww7R0PiBbPHNww6ljaWZpY2F0aW9uLWRlLXLDqWbDqXJlbmNlPi4uLl1dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzUKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cGU+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MzYKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8ZMOpcMO0dD4gfCA8Z3JvdXBlPikuLi5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzcKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNgorbXNnaWQgImZldGNoLnBhcmFsbGVsIGNhbm5vdCBiZSBuZWdhdGl2ZSIKK21zZ3N0ciAiZmV0Y2gucGFyYWxsZWwgbmUgcGV1dCBwYXMgw6p0cmUgbsOpZ2F0aWYiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzkgYnVpbHRpbi9wdWxsLmM6MTg0Cittc2dpZCAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAicsOpY3Vww6lyZXIgZGVwdWlzIHRvdXMgbGVzIGTDqXDDtHRzIGRpc3RhbnRzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQxIGJ1aWx0aW4vcHVsbC5jOjIyOAorbXNnaWQgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvZmV0Y2giCittc2dzdHIgImTDqWZpbmlyIGxhIGJyYW5jaGUgYW1vbnQgcG91ciBnaXQgcHVsbC9mZXRjaCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MyBidWlsdGluL3B1bGwuYzoxODcKK21zZ2lkICJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciCittc2dzdHIgImFqb3V0ZXIgw6AgLmdpdC9GRVRDSF9IRUFEIGF1IGxpZXUgZGUgbCfDqWNyYXNlciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NSBidWlsdGluL3B1bGwuYzoxOTAKK21zZ2lkICJwYXRoIHRvIHVwbG9hZCBwYWNrIG9uIHJlbW90ZSBlbmQiCittc2dzdHIgImNoZW1pbiB2ZXJzIGxlcXVlbCB0w6lsw6ljaGFyZ2VyIGxlIHBhcXVldCBzdXIgbGUgcG9zdGUgZGlzdGFudCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NgorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCByZWZlcmVuY2UiCittc2dzdHIgImZvcmNlciBsJ8OpY3Jhc2VtZW50IGRlIGxhIGJyYW5jaGUgbG9jYWxlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ4Cittc2dpZCAiZmV0Y2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIgorbXNnc3RyICJyw6ljdXDDqXJlciBkZXB1aXMgcGx1c2lldXJzIGTDqXDDtHRzIGRpc3RhbnRzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUwIGJ1aWx0aW4vcHVsbC5jOjE5NAorbXNnaWQgImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgInLDqWN1cMOpcmVyIHRvdXRlcyBsZXMgw6l0aXF1ZXR0ZXMgZXQgbGV1cnMgb2JqZXRzIGFzc29jacOpcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MgorbXNnaWQgImRvIG5vdCBmZXRjaCBhbGwgdGFncyAoLS1uby10YWdzKSIKK21zZ3N0ciAibmUgcGFzIHLDqWN1cMOpcmVyIHRvdXRlcyBsZXMgw6l0aXF1ZXR0ZXMgKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTQKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBmZXRjaGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICJub21icmUgZGUgc291cy1tb2R1bGVzIHLDqWN1cMOpcsOpcyBlbiBwYXJhbGzDqGxlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2IGJ1aWx0aW4vcHVsbC5jOjE5NworbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICIiCisiw6lsaW1pbmVyIGxlcyBicmFuY2hlcyBkZSBzdWl2aSBkaXN0YW50IHNpIGxhIGJyYW5jaGUgbidleGlzdGUgcGx1cyBkYW5zIGxlICIKKyJkw6lww7R0IGRpc3RhbnQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTgKK21zZ2lkICJwcnVuZSBsb2NhbCB0YWdzIG5vIGxvbmdlciBvbiByZW1vdGUgYW5kIGNsb2JiZXIgY2hhbmdlZCB0YWdzIgorbXNnc3RyICIiCisiw6lsaW1pbmVyIGxlcyDDqXRpcXVldHRlcyBsb2NhbGVzIHF1aSBvbnQgZGlzcGFydSBkdSBkw6lww7R0IGRpc3RhbnQgZXQgcXVpICIKKyJlbmNvbWJyZW50IGxlcyDDqXRpcXVldHRlcyBtb2RpZmnDqWVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU5IGJ1aWx0aW4vZmV0Y2guYzoxODIgYnVpbHRpbi9wdWxsLmM6MTIxCittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICLDoCBsYSBkZW1hbmRlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYwCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiY29udHLDtGxlciBsYSByw6ljdXDDqXJhdGlvbiByw6ljdXJzaXZlIGRhbnMgbGVzIHNvdXMtbW9kdWxlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2NCBidWlsdGluL3B1bGwuYzoyMDUKK21zZ2lkICJrZWVwIGRvd25sb2FkZWQgcGFjayIKK21zZ3N0ciAiY29uc2VydmVyIGxlIHBhcXVldCB0w6lsw6ljaGFyZ8OpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY2Cittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgInBlcm1ldHRyZSBsYSBtaXNlIMOgIGpvdXIgZGUgbGEgcsOpZsOpcmVuY2UgSEVBRCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2OSBidWlsdGluL2ZldGNoLmM6MTc1IGJ1aWx0aW4vcHVsbC5jOjIwOAorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiCittc2dzdHIgImFwcHJvZm9uZGlyIGwnaGlzdG9yaXF1ZSBkJ3VuIGNsb25lIHN1cGVyZmljaWVsIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcxCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyByZXBvc2l0b3J5IGJhc2VkIG9uIHRpbWUiCittc2dzdHIgImFwcHJvZm9uZGlyIGwnaGlzdG9yaXF1ZSBkJ3VuIGNsb25lIHN1cGVyZmljaWVsIGVuIGZvbmN0aW9uIGQndW5lIGRhdGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzcgYnVpbHRpbi9wdWxsLmM6MjExCittc2dpZCAiY29udmVydCB0byBhIGNvbXBsZXRlIHJlcG9zaXRvcnkiCittc2dzdHIgImNvbnZlcnRpciBlbiB1biBkw6lww7R0IGNvbXBsZXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODAKK21zZ2lkICJwcmVwZW5kIHRoaXMgdG8gc3VibW9kdWxlIHBhdGggb3V0cHV0IgorbXNnc3RyICJwcsOpZml4ZXIgY2VjaSDDoCBsYSBzb3J0aWUgZHUgY2hlbWluIGR1IHNvdXMtbW9kdWxlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgzCittc2dpZCAiIgorImRlZmF1bHQgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIChsb3dlciBwcmlvcml0eSB0aGFuIGNvbmZpZyAiCisiZmlsZXMpIgorbXNnc3RyICIiCisicGFyIGTDqWZhdXQgcG91ciBsYSByw6ljdXDDqXJhdGlvbiByw6ljdXJzaXZlIGRlIHNvdXMtbW9kdWxlcyAocHJpb3JpdMOpIHBsdXMgIgorImJhc3NlIHF1ZSBsZXMgZmljaGllcnMgZGUgY29uZmlnKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NyBidWlsdGluL3B1bGwuYzoyMTQKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgImFjY2VwdGVyIGxlcyByw6lmw6lyZW5jZXMgcXVpIG1ldHRlbnQgw6Agam91ciAuZ2l0L3NoYWxsb3ciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODggYnVpbHRpbi9wdWxsLmM6MjE2Cittc2dpZCAicmVmbWFwIgorbXNnc3RyICJjb3JyZXNwb25kYW5jZSBkZSByw6lmw6lyZW5jZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OSBidWlsdGluL3B1bGwuYzoyMTcKK21zZ2lkICJzcGVjaWZ5IGZldGNoIHJlZm1hcCIKK21zZ3N0ciAic3DDqWNpZmllciB1bmUgY29ycmVzcG9uZGFuY2UgZGUgcsOpZsOpcmVuY2UgcG91ciBsYSByw6ljdXDDqXJhdGlvbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5NgorbXNnaWQgInJlcG9ydCB0aGF0IHdlIGhhdmUgb25seSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRoaXMgb2JqZWN0IgorbXNnc3RyICJyYXBwb3J0ZSBxdWUgbm91cyBuJ2F2b25zIHF1ZSBkZXMgb2JqZXRzIGpvaWduYWJsZXMgZGVwdWlzIGNldCBvYmpldCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5OQorbXNnaWQgInJ1biAnZ2MgLS1hdXRvJyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAibGFuY2VyICdnYyAtLWF1dG8nIGFwcsOocyBsYSByw6ljdXDDqXJhdGlvbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMSBidWlsdGluL3B1bGwuYzoyMjYKK21zZ2lkICJjaGVjayBmb3IgZm9yY2VkLXVwZGF0ZXMgb24gYWxsIHVwZGF0ZWQgYnJhbmNoZXMiCittc2dzdHIgInbDqXJpZmllciBsZXMgbWlzZXMgw6Agam91ciBmb3Jjw6llcyBzdXIgdG91dGVzIGxlcyBicmFuY2hlcyBtaXNlcyDDoCBqb3VyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAzCittc2dpZCAid3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiw6ljcmlyZSBsZSBncmFwaGUgZGUgY29tbWl0cyBhcHLDqHMgbGUgcmFwYXRyaWVtZW50IgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEzCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgImltcG9zc2libGUgZGUgdHJvdXZlciBsYSByw6lmw6lyZW5jZSBIRUFEIGRpc3RhbnRlIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZpZ3VyYXRpb24gZmV0Y2gub3V0cHV0IGNvbnRhaW5zIGludmFsaWQgdmFsdWUgJXMiCittc2dzdHIgIiIKKyJsZSBwYXJhbcOodHJlIGRlIGNvbmZpZ3VyYXRpb24gZmV0Y2gub3V0cHV0IGNvbnRpZW50IHVuZSB2YWxldXIgaW52YWxpZGUgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAib2JqZXQgJXMgbm9uIHRyb3V2w6kiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTUKK21zZ2lkICJbdXAgdG8gZGF0ZV0iCittc2dzdHIgIlvDoCBqb3VyXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2OCBidWlsdGluL2ZldGNoLmM6Nzg0IGJ1aWx0aW4vZmV0Y2guYzo4NTYKK21zZ2lkICJbcmVqZWN0ZWRdIgorbXNnc3RyICJbcmVqZXTDqV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NjkKK21zZ2lkICJjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBkYW5zIGxhIGJyYW5jaGUgYWN0dWVsbGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzkKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIlttaXNlIMOgIGpvdXIgZGUgbCfDqXRpcXVldHRlXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4MCBidWlsdGluL2ZldGNoLmM6ODE3IGJ1aWx0aW4vZmV0Y2guYzo4MzkKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciBsYSByw6lmw6lyZW5jZSBsb2NhbGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODQKK21zZ2lkICJ3b3VsZCBjbG9iYmVyIGV4aXN0aW5nIHRhZyIKK21zZ3N0ciAiw6ljcmFzZXJhaXQgbCfDqXRpcXVldHRlIGV4aXN0YW50ZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwNgorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW25vdXZlbGxlIMOpdGlxdWV0dGVdIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODA5Cittc2dpZCAiW25ldyBicmFuY2hdIgorbXNnc3RyICJbbm91dmVsbGUgYnJhbmNoZV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MTIKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIltub3V2ZWxsZSByw6lmw6lyZW5jZV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICJtaXNlIMOgIGpvdXIgZm9yY8OpZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg1NgorbXNnaWQgIm5vbi1mYXN0LWZvcndhcmQiCittc2dzdHIgInBhcyBlbiBhdmFuY2UgcmFwaWRlIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODc3Cittc2dpZCAiIgorIkZldGNoIG5vcm1hbGx5IGluZGljYXRlcyB3aGljaCBicmFuY2hlcyBoYWQgYSBmb3JjZWQgdXBkYXRlLFxuIgorImJ1dCB0aGF0IGNoZWNrIGhhcyBiZWVuIGRpc2FibGVkLiBUbyByZS1lbmFibGUsIHVzZSAnLS1zaG93LWZvcmNlZC11cGRhdGVzJ1xuIgorImZsYWcgb3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIHRydWUnLiIKK21zZ3N0ciAiIgorIkZldGNoIGluZGlxdWUgbm9ybWFsZW1lbnQgcXVlbGxlcyBicmFuY2hlcyBvbnQgc3ViaSB1bmUgbWlzZSDDoCBqb3VyIGZvcmPDqWUsXG4iCisibWFpcyBjZWNpIGEgw6l0w6kgZMOpc2FjdGl2w6kuIFBvdXIgcsOpLWFjdGl2ZXIsIHV0aWxpc2V6IGxlIGRyYXBlYXVcbiIKKyInLS1zaG93LWZvcmNlZC11cGRhdGUnIG91IGxhbmNleiAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGNoZWNrIGZvcmNlZCB1cGRhdGVzLiBZb3UgY2FuIHVzZVxuIgorIictLW5vLXNob3ctZm9yY2VkLXVwZGF0ZXMnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyAiCisiZmFsc2UnXG4iCisiIHRvIGF2b2lkIHRoaXMgY2hlY2suXG4iCittc2dzdHIgIiIKKyIlLjJmIHNlY29uZGVzIG9udCDDqXTDqSBuw6ljZXNzYWlyZXMgcG91ciB2w6lyaWZpZXIgbGVzIG1pc2VzIMOgIGpvdXIgZm9yY8OpZXMuXG4iCisiVm91cyBwb3V2ZXogdXRpbGlzZXIgJy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlJyBvdSBsYW5jZXJcbiIKKyInZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyBmYWxzZScgcG91ciDDqXZpdGVyIGNlY2kuXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIlcyBuJ2EgcGFzIGVudm95w6kgdG91cyBsZXMgb2JqZXRzIG7DqWNlc3NhaXJlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTQxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgIiIKKyIlcyByZWpldMOpIHBhcmNlIHF1ZSBsZXMgcmFjaW5lcyBzdXBlcmZpY2llbGxlcyBuZSBzb250IHBhcyBtaXNlcyDDoCBqb3VyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAyNiBidWlsdGluL2ZldGNoLmM6MTE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAiRGVwdWlzICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorImRlcyByw6lmw6lyZW5jZXMgbG9jYWxlcyBuJ29udCBwYXMgcHUgw6p0cmUgbWlzZXMgw6Agam91ciA7IGVzc2F5ZXogZGUgbGFuY2VyXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyBwb3VyIHN1cHByaW1lciBkZXMgYnJhbmNoZXMgYW5jaWVubmVzIGVuIGNvbmZsaXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyBzZXJhIGVuIHN1c3BlbnMpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyBlc3QgZGV2ZW51IGVuIHN1c3BlbnMpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2NworbXNnaWQgIltkZWxldGVkXSIKK21zZ3N0ciAiW3N1cHByaW3DqV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTExMgorbXNnaWQgIihub25lKSIKK21zZ3N0ciAiKGF1Y3VuKGUpKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyBvZiBub24tYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJSZWZ1cyBkZSByw6ljdXDDqXJlciBkYW5zIGxhIGJyYW5jaGUgY291cmFudCAlcyBkJ3VuIGTDqXDDtHQgbm9uIG51IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIHZhbHVlIFwiJXNcIiBpcyBub3QgdmFsaWQgZm9yICVzIgorbXNnc3RyICJMYSB2YWxldXIgXCIlMiRzXCIgZGUgbCdvcHRpb24gXCIlMSRzXCIgZXN0IGludmFsaWRlIHBvdXIgJTMkcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICJMJ29wdGlvbiBcIiVzXCIgZXN0IGlnbm9yw6llIHBvdXIgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MjEKK21zZ2lkICJtdWx0aXBsZSBicmFuY2hlcyBkZXRlY3RlZCwgaW5jb21wYXRpYmxlIHdpdGggLS1zZXQtdXBzdHJlYW0iCittc2dzdHIgImJyYW5jaGVzIG11bHRpcGxlcyBkw6l0ZWN0w6llcywgaW1jb21wYXRpYmxlIGF2ZWMgLS1zZXQtdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDM2Cittc2dpZCAibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgImTDqXDDtHQgYW1vbnQgbm9uIGTDqWZpbmkgcG91ciBsYSBicmFuY2hlIGRlIHN1aXZpIMOgIGRpc3RhbmNlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzOAorbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSB0YWciCittc2dzdHIgImTDqXDDtHQgYW1vbnQgbm9uIGTDqWZpbmkgcG91ciBsJ8OpdGlxdWV0dGUgZGlzdGFudGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDQwCittc2dpZCAidW5rbm93biBicmFuY2ggdHlwZSIKK21zZ3N0ciAidHlwZSBkZSBicmFuY2hlIGluY29ubnUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDQyCittc2dpZCAiIgorIm5vIHNvdXJjZSBicmFuY2ggZm91bmQuXG4iCisieW91IG5lZWQgdG8gc3BlY2lmeSBleGFjdGx5IG9uZSBicmFuY2ggd2l0aCB0aGUgLS1zZXQtdXBzdHJlYW0gb3B0aW9uLiIKK21zZ3N0ciAiIgorIkF1Y3VuZSBicmFuY2hlIHNvdXJjZSB0cm91dsOpZS5cbiIKKyJWb3VzIGRldmV6IHNww6ljaWZpZXIgZXhhY3RlbWVudCB1bmUgYnJhbmNoZSBhdmVjIGwnb3B0aW9uIC0tc2V0LXVwc3RyZWFtLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NjggYnVpbHRpbi9mZXRjaC5jOjE2MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiUsOpY3Vww6lyYXRpb24gZGUgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NzggYnVpbHRpbi9mZXRjaC5jOjE2MzMgYnVpbHRpbi9yZW1vdGUuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHLDqWN1cMOpcmVyICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmV0Y2ggJyVzJyAoZXhpdCBjb2RlOiAlZClcbiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciAnJXMnIChjb2RlIGRlIHNvcnRpZcKgOiAlZClcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2OTMKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIkF1Y3VuIGTDqXDDtHQgZGlzdGFudCBzcMOpY2lmacOpLiBWZXVpbGxleiBzcMOpY2lmaWVyIHVuZSBVUkwgb3UgdW4gbm9tXG4iCisiZGlzdGFudCBkZXB1aXMgbGVzcXVlbHMgbGVzIG5vdXZlbGxlcyByw6l2aXNpb25zIGRldnJhaWVudCDDqnRyZSByw6ljdXDDqXLDqWVzLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MzAKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICJWb3VzIGRldmV6IHNww6ljaWZpZXIgdW4gbm9tIGQnw6l0aXF1ZXR0ZS4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzgwCittc2dpZCAiTmVnYXRpdmUgZGVwdGggaW4gLS1kZWVwZW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiVW5lIHByb2ZvbmRldXIgbsOpZ2F0aXZlIGRhbnMgLS1kZWVwZW4gbidlc3QgcGFzIHN1cHBvcnTDqWUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzgyCittc2dpZCAiLS1kZWVwZW4gYW5kIC0tZGVwdGggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1kZWVwZW4gZXQgLS1kZXB0aCBzb250IG11dHVlbGxlbWVudCBleGNsdXNpZnMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzg3Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi0tZGVwdGggZXQgLS11bnNoYWxsb3cgbmUgcGV1dmVudCBwYXMgw6p0cmUgdXRpbGlzw6lzIGVuc2VtYmxlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc4OQorbXNnaWQgIi0tdW5zaGFsbG93IG9uIGEgY29tcGxldGUgcmVwb3NpdG9yeSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLXVuc2hhbGxvdyBzdXIgdW4gZMOpcMO0dCBjb21wbGV0IG4nYSBwYXMgZGUgc2VucyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MDUKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwgbidhY2NlcHRlIHBhcyBkJ2FyZ3VtZW50IGRlIGTDqXDDtHQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODA3Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJmZXRjaCAtLWFsbCBuJ2EgcGFzIGRlIHNlbnMgYXZlYyBkZXMgc3DDqWNpZmljYXRpb25zIGRlIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICJkaXN0YW50IG91IGdyb3VwZSBkaXN0YW50IGluZXhpc3RhbnQgOiAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MjMKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKyJMYSByw6ljdXDDqXJhdGlvbiBkJ3VuIGdyb3VwZSBldCBsZXMgc3DDqWNpZmljYXRpb25zIGRlIHLDqWbDqXJlbmNlIG4nb250IHBhcyBkZSAiCisic2VucyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NDEKK21zZ2lkICIiCisiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyJwYXJ0aWFsY2xvbmUiCittc2dzdHIgIiIKKyItLWZpbHRlciBuZSBwZXV0IMOqdHJlIHV0aWxpc8OpIHF1J2F2ZWMgbGUgZMOpcMO0dCBkaXN0YW50IGNvbmZpZ3Vyw6kgZGFucyAiCisiZXh0ZW5zaW9ucy5wYXJ0aWFsQ2xvbmUiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjE4Cittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8ZmljaGllcj5dIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzEKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgInBldXBsZXIgbGUgam91cm5hbCBhdmVjIGF1IHBsdXMgPG4+IMOpbMOpbWVudHMgZGVwdWlzIGxlIGpvdXJuYWwgY291cnQiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NAorbXNnaWQgImFsaWFzIGZvciAtLWxvZyAoZGVwcmVjYXRlZCkiCittc2dzdHIgImFsaWFzIHBvdXIgLS1sb2cgKG9ic29sw6h0ZSkiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NworbXNnaWQgInRleHQiCittc2dzdHIgInRleHRlIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzgKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgInV0aWxpc2VyIDx0ZXh0ZT4gY29tbWUgZMOpYnV0IGRlIG1lc3NhZ2UiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3OQorbXNnaWQgImZpbGUgdG8gcmVhZCBmcm9tIgorbXNnc3RyICJmaWNoaWVyIGQnb8O5IGxpcmUiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFs8b3B0aW9ucz5dIFs8cGF0dGVybj5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFs8b3B0aW9ucz5dIFs8bW90aWY+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMQorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamV0Pl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTIKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbW1pdD5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMworbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjgKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAiw6ljaGFwcGVyIGxlcyBjaGFtcHMgcsOpc2VydsOpcyBwb3VyIGxlcyBpbnRlcnByw6l0ZXVycyBkZSBjb21tYW5kZXMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgIsOpY2hhcHBlciBsZXMgY2hhbXBzIHLDqXNlcnbDqXMgcG91ciBwZXJsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMyCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgIsOpY2hhcHBlciBsZXMgY2hhbXBzIHLDqXNlcnbDqXMgcG91ciBweXRob24iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAiw6ljaGFwcGVyIGxlcyBjaGFtcHMgcsOpc2VydsOpcyBwb3VyIGNvbXBhdGliaWxpdMOpIGF2ZWMgVGNsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM3Cittc2dpZCAic2hvdyBvbmx5IDxuPiBtYXRjaGVkIHJlZnMiCittc2dzdHIgIm4nYWZmaWNoZXIgcXVlIDxuPiByw6lmw6lyZW5jZXMgY29ycmVzcG9uZGFudCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOSBidWlsdGluL3RhZy5jOjQzOQorbXNnaWQgInJlc3BlY3QgZm9ybWF0IGNvbG9ycyIKK21zZ3N0ciAicmVzcGVjdGVyIGxlcyBjb3VsZXVycyBkZSBmb3JtYXRhZ2UiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggcG9pbnRzIGF0IHRoZSBnaXZlbiBvYmplY3QiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgcsOpZsOpcmVuY2VzIHBvaW50YW50IHN1ciBsJ29iamV0IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ0Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyByw6lmw6lyZW5jZXMgcXVpIHNvbnQgZnVzaW9ubsOpZXMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDUKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyByw6lmw6lyZW5jZXMgcXVpIG5lIHNvbnQgcGFzIGZ1c2lvbm7DqWVzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ2Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyByw6lmw6lyZW5jZXMgcXVpIGNvbnRpZW5uZW50IGxlIGNvbW1pdCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NworbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgcsOpZsOpcmVuY2VzIHF1aSBuZSBjb250aWVubmVudCBwYXMgbGUgY29tbWl0IgorCisjOiBidWlsdGluL2ZzY2suYzo2OCBidWlsdGluL2ZzY2suYzoxNDcgYnVpbHRpbi9mc2NrLmM6MTQ4Cittc2dpZCAidW5rbm93biIKK21zZ3N0ciAiaW5jb25udSIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTAwIGJ1aWx0aW4vZnNjay5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiAlcyAlczogJXMiCittc2dzdHIgImVycmV1ciBkYW5zIGwnb2JqZXQgJXMgJXPCoDogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIHdhcm5pbmcgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmcgaW4gJXMgJXM6ICVzIgorbXNnc3RyICJhdmVydGlzc2VtZW50IGRhbnMgbCdvYmpldCAlcyAlc8KgOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MTQzIGJ1aWx0aW4vZnNjay5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJicm9rZW4gbGluayBmcm9tICU3cyAlcyIKK21zZ3N0ciAibGllbiBjYXNzw6kgZGFucyBsJ29iamV0ICU3cyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MTU1Cittc2dpZCAid3Jvbmcgb2JqZWN0IHR5cGUgaW4gbGluayIKK21zZ3N0ciAidHlwZSBkJ29iamV0IGluY29ubnUgZGFucyBsZSBsaWVuIgorCisjOiBidWlsdGluL2ZzY2suYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImJyb2tlbiBsaW5rIGZyb20gJTdzICVzXG4iCisiICAgICAgICAgICAgICB0byAlN3MgJXMiCittc2dzdHIgIiIKKyJsaWVuIGNhc3PDqSBkZXB1aXMgJTdzICVzXG4iCisiICAgICAgICAgICAgIHZlcnMgJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyAlcyIKK21zZ3N0ciAib2JqZXQgJXMgbWFucXVhbnQgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlYWNoYWJsZSAlcyAlcyIKK21zZ3N0ciAib2JqZXQgJXMgaW5hdHRlaWduYWJsZSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImRhbmdsaW5nICVzICVzIgorbXNnc3RyICJvYmpldCAlcyBmYW50w7RtZSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzM5Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsb3N0LWZvdW5kIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZSBmaWNoaWVyIGxvc3QtZm91bmQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgZmluaXIgJyVzJyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIgorbXNnc3RyICJWw6lyaWZpY2F0aW9uIGRlIGwnb2JqZXQgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkgKCVkIG9iamVjdHMpIgorbXNnc3RyICJWw6lyaWZpY2F0aW9uIGRlIGxhIGNvbm5lY3Rpdml0w6kgKCVkIG9iamV0cykiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyAlcyIKK21zZ3N0ciAiVsOpcmlmaWNhdGlvbiBkZSBsJ29iamV0ICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0MjkKK21zZ2lkICJicm9rZW4gbGlua3MiCittc2dzdHIgImxpZW5zIGNhc3PDqXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJyb290ICVzIgorbXNnc3RyICJyYWNpbmUgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWdnZWQgJXMgJXMgKCVzKSBpbiAlcyIKK21zZ3N0ciAiw6l0aXF1ZXRhZ2UgZGUgbCdvYmpldCAlcyAlcyAoJXMpIGRhbnMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZyIKK21zZ3N0ciAiJXPCoDogb2JqZXQgY29ycm9tcHUgb3UgbWFucXVhbnQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCByZWZsb2cgZW50cnkgJXMiCittc2dzdHIgIiVzwqA6IGVudHLDqWUgJXMgZGUgam91cm5hbCBkZSByw6lmw6lyZW5jZXMgaW52YWxpZGUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZWZsb2cgJXMtPiVzIgorbXNnc3RyICJWw6lyaWZpY2F0aW9uIGR1IGpvdXJuYWwgZGUgcsOpZmVyZW5jZXMgJXMtPiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciAlcyIKK21zZ3N0ciAiJXPCoDogcG9pbnRldXIgZGUgc2hhMSBpbnZhbGlkZSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSBjb21taXQiCittc2dzdHIgImwnb2JqZXQgJXMgbidlc3QgcGFzIHVuIGNvbW1pdCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjA5Cittc2dpZCAibm90aWNlOiBObyBkZWZhdWx0IHJlZmVyZW5jZXMiCittc2dzdHIgIk5vdGXCoDogcGFzIGRlIHLDqWbDqXJlbmNlIHBhciBkw6lmYXV0IgorCisjOiBidWlsdGluL2ZzY2suYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3Npbmc6ICVzIgorbXNnc3RyICIlc8KgOiBvYmpldCBjb3Jyb21wdSBvdSBtYW5xdWFudMKgOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY291bGQgbm90IGJlIHBhcnNlZDogJXMiCittc2dzdHIgIiVzwqA6IGltcG9zc2libGUgZCdhbmFseXNlcsKgOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaGExIGZpbGU6ICVzIgorbXNnc3RyICJtYXV2YWlzIGZpY2hpZXIgZGUgc2hhMcKgOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjcyCittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yeSIKK21zZ3N0ciAiVsOpcmlmaWNhdGlvbiBkdSByw6lwZXJ0b2lyZSBkJ29iamV0IgorCisjOiBidWlsdGluL2ZzY2suYzo2NzUKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgIlbDqXJpZmljYXRpb24gZGVzIHLDqXBlcnRvaXJlcyBkJ29iamV0IgorCisjOiBidWlsdGluL2ZzY2suYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMgbGluayIKK21zZ3N0ciAiVsOpcmlmaWNhdGlvbiBkdSBsaWVuICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2OTUgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMiCittc2dzdHIgIiVzIGludmFsaWRlIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIHRvIHNvbWV0aGluZyBzdHJhbmdlICglcykiCittc2dzdHIgIiVzIHBvaW50ZSBzdXIgcXVlbHF1ZSBjaG9zZSBiaXphcnJlICglcykiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZGV0YWNoZWQgSEVBRCBwb2ludHMgYXQgbm90aGluZyIKK21zZ3N0ciAiJXPCoDogbGEgSEVBRCBkw6l0YWNow6llIG5lIHBvaW50ZSBzdXIgcmllbiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGljZTogJXMgcG9pbnRzIHRvIGFuIHVuYm9ybiBicmFuY2ggKCVzKSIKK21zZ3N0ciAibm90ZcKgOiAlcyBwb2ludGUgc3VyIHVuZSBicmFuY2hlIG5vbi1uw6llICglcykiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyNAorbXNnaWQgIkNoZWNraW5nIGNhY2hlIHRyZWUiCittc2dzdHIgIlbDqXJpZmljYXRpb24gZGUgbCdhcmJyZSBjYWNoZSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciBpbiBjYWNoZS10cmVlIgorbXNnc3RyICIlc8KgOiBwb2ludGVyIHNoYTEgaW52YWxpZGUgZGFucyBsJ2FyYnJlIGRlIGNhY2hlIgorCisjOiBidWlsdGluL2ZzY2suYzo3MzgKK21zZ2lkICJub24tdHJlZSBpbiBjYWNoZS10cmVlIgorbXNnc3RyICJub24tYXJicmUgZGFucyBsJ2FyYnJlIGRlIGNhY2hlIgorCisjOiBidWlsdGluL2ZzY2suYzo3NjkKK21zZ2lkICJnaXQgZnNjayBbPG9wdGlvbnM+XSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgZnNjayBbPG9wdGlvbnM+XSBbPG9iamV0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NQorbXNnaWQgInNob3cgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG9iamV0cyBpbmFjY2Vzc2libGVzIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzYKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgImFmZmljaGVyIGxlcyBvYmpldHMgZW4gc3VzcGVucyIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc3Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgImFmZmljaGVyIGxlcyDDqXRpcXVldHRlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc4Cittc2dpZCAicmVwb3J0IHJvb3Qgbm9kZXMiCittc2dzdHIgInNpZ25hbGVyIGxlcyBuxZN1ZHMgcmFjaW5lcyIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc5Cittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgImNvbnNpZMOpcmVyIGxlcyBvYmpldHMgZGUgbCdpbmRleCBjb21tZSBuxZN1ZHMgdMOqdGUiCisKKyMgdHJhbnNsYXRlZCBmcm9tIG1hbiBwYWdlCisjOiBidWlsdGluL2ZzY2suYzo3ODAKK21zZ2lkICJtYWtlIHJlZmxvZ3MgaGVhZCBub2RlcyAoZGVmYXVsdCkiCittc2dzdHIgImNvbnNpZMOpcmVyIGxlcyByZWZsb2dzIGNvbW1lIG7Fk3VkcyB0w6p0ZSAocGFyIGTDqWZhdXQpIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODEKK21zZ2lkICJhbHNvIGNvbnNpZGVyIHBhY2tzIGFuZCBhbHRlcm5hdGUgb2JqZWN0cyIKK21zZ3N0ciAiaW5zcGVjdGVyIGF1c3NpIGxlcyBvYmpldHMgcGFjayBldCBhbHRlcm5hdGlmcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgyCittc2dpZCAiY2hlY2sgb25seSBjb25uZWN0aXZpdHkiCittc2dzdHIgIm5lIHbDqXJpZmllciBxdWUgbGEgY29ubmVjdGl2aXTDqSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgzCittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICJhY3RpdmVyIHVuZSB2w6lyaWZpY2F0aW9uIHBsdXMgc3RyaWN0IgorCisjOiBidWlsdGluL2ZzY2suYzo3ODUKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAiw6ljcmlyZSBsZXMgb2JqZXRzIGVuIHN1c3BlbnMgZGFucyAuZ2l0L2xvc3QtZm91bmQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NiBidWlsdGluL3BydW5lLmM6MTMyCittc2dpZCAic2hvdyBwcm9ncmVzcyIKK21zZ3N0ciAiYWZmaWNoZXIgbGEgcHJvZ3Jlc3Npb24iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NworbXNnaWQgInNob3cgdmVyYm9zZSBuYW1lcyBmb3IgcmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImFmZmljaGVyIGxlcyBub21zIMOpdGVuZHVzIHBvdXIgbGVzIG9iamV0cyBpbmFjY2Vzc2libGVzIgorCisjOiBidWlsdGluL2ZzY2suYzo4NDYgYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI1Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiVsOpcmlmaWNhdGlvbiBkZXMgb2JqZXRzIgorCisjOiBidWlsdGluL2ZzY2suYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBtaXNzaW5nIgorbXNnc3RyICIlc8KgOiBvYmpldCBtYW5xdWFudCIKKworIzogYnVpbHRpbi9mc2NrLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyOiBleHBlY3RlZCBzaGExLCBnb3QgJyVzJyIKK21zZ3N0ciAicGFyYW3DqHRyZSBpbnZhbGlkZcKgOiBzaGEtMSBhdHRlbmR1LCAnJXMnIHRyb3V2w6kiCisKKyM6IGJ1aWx0aW4vZ2MuYzozNQorbXNnaWQgImdpdCBnYyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorCisjOiBidWlsdGluL2djLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZzdGF0ICVzOiAlcyIKK21zZ3N0ciAiw4ljaGVjIGR1IHN0YXQgZGUgJXPCoDogJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlICclcycgdmFsdWUgJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnYW5hbHlzZSBkZSAnJXMnIHZhbGV1ciAnJXMnIgorCisjOiBidWlsdGluL2djLmM6NDc1IGJ1aWx0aW4vaW5pdC1kYi5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgZmFpcmUgdW4gc3RhdCBkZSAnJXMnIgorCisjOiBidWlsdGluL2djLmM6NDg0IGJ1aWx0aW4vbm90ZXMuYzoyNDAgYnVpbHRpbi90YWcuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBsYXN0IGdjIHJ1biByZXBvcnRlZCB0aGUgZm9sbG93aW5nLiBQbGVhc2UgY29ycmVjdCB0aGUgcm9vdCBjYXVzZVxuIgorImFuZCByZW1vdmUgJXMuXG4iCisiQXV0b21hdGljIGNsZWFudXAgd2lsbCBub3QgYmUgcGVyZm9ybWVkIHVudGlsIHRoZSBmaWxlIGlzIHJlbW92ZWQuXG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJMZSBkZXJuaWVyIGxhbmNlbWVudCBkZSBnYyBhIHJhcHBvcnTDqSBsJ2VycmV1ciBzdWl2YW50ZS4gVmV1aWxsZXogY29ycmlnZXJcbiIKKyJsYSBjYXVzZSBldCBzdXBwcmltZXIgJXMuXG4iCisiTGUgbmV0dG95YWdlIGF1dG9tYXRpcXVlIG4nYXVyYSBwYXMgbGlldSBqdXNxdSfDoCBjZSBxdWUgbGUgZmljaGllciBzb2l0ICIKKyJzdXBwcmltw6kuXG4iCisiXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1MzkKK21zZ2lkICJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAiw6lsaW1pbmVyIGxlcyBvYmpldHMgbm9uIHLDqWbDqXJlbmPDqXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDEKK21zZ2lkICJiZSBtb3JlIHRob3JvdWdoIChpbmNyZWFzZWQgcnVudGltZSkiCittc2dzdHIgIsOqdHJlIHBsdXMgY29uc2NpZW5jaWV1eCAoZHVyw6llIGRlIHRyYWl0ZW1lbnQgYWxsb25nw6llKSIKKworIzogYnVpbHRpbi9nYy5jOjU0MgorbXNnaWQgImVuYWJsZSBhdXRvLWdjIG1vZGUiCittc2dzdHIgImFjdGl2ZXIgbGUgbW9kZSBhdXRvLWdjIgorCisjOiBidWlsdGluL2djLmM6NTQ1Cittc2dpZCAiZm9yY2UgcnVubmluZyBnYyBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGdjIHJ1bm5pbmciCittc2dzdHIgIiIKKyJmb3JjZXIgbGUgbGFuY2VtZW50IGR1IHJhbWFzc2UtbWlldHRlcyBtw6ptZSBzaSB1biBhdXRyZSByYW1hc3NlLW1pZXR0ZXMgIgorInRvdXJuZSBkw6lqw6AiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDgKK21zZ2lkICJyZXBhY2sgYWxsIG90aGVyIHBhY2tzIGV4Y2VwdCB0aGUgbGFyZ2VzdCBwYWNrIgorbXNnc3RyICJyZWNvbXBhY3RlciB0b3VzIGxlcyBhdXRyZXMgcGFxdWV0cyBleGNlcHTDqSBsZSBwbHVzIGdyb3MgcGFxdWV0IgorCisjOiBidWlsdGluL2djLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBnYy5sb2dleHBpcnkgdmFsdWUgJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBnYy5sb2dleHBpcnkgJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIHBydW5lIGV4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxhIHZhbGV1ciBkJ2V4cGlyYXRpb24gZCfDqWxhZ2FnZSAlcyIKKworIzogYnVpbHRpbi9nYy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaW4gYmFja2dyb3VuZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiIgorIkNvbXByZXNzaW9uIGF1dG9tYXRpcXVlIGR1IGTDqXDDtHQgZW4gdMOiY2hlIGRlIGZvbmQgcG91ciBvcHRpbWlzZXIgbGVzICIKKyJwZXJmb3JtYW5jZXMuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICJDb21wcmVzc2lvbiBkdSBkw6lww7R0IHBvdXIgb3B0aW1pc2VyIGxlcyBwZXJmb3JtYW5jZXMuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIKK21zZ3N0ciAiVm9pciBcImdpdCBoZWxwIGdjXCIgcG91ciB0b3V0ZSBpbmZvcm1hdGlvbiBzdXIgbGUgbmV0dG95YWdlIG1hbnVlbC5cbiIKKworIzogYnVpbHRpbi9nYy5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2MgaXMgYWxyZWFkeSBydW5uaW5nIG9uIG1hY2hpbmUgJyVzJyBwaWQgJTxQUkl1TUFYPiAodXNlIC0tZm9yY2UgaWYgbm90KSIKK21zZ3N0ciAiIgorInVuIHJhbWFzc2UtbWlldHRlcyBlc3QgZMOpasOgIGVuIGNvdXJzIHN1ciBsYSBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gIgorIih1dGlsaXNleiAtLWZvcmNlIHNpIGNlIG4nZXN0IHBhcyBsZSBjYXMpIgorCisjOiBidWlsdGluL2djLmM6Njk0Cittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgorbXNnc3RyICIiCisiSWwgeSBhIHRyb3AgZCdvYmpldHMgc2V1bHMgaW5hY2Nlc3NpYmxlcyA7IGxhbmNleiAnZ2l0IHBydW5lJyBwb3VyIGxlcyAiCisic3VwcHJpbWVyLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MzAKK21zZ2lkICJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBncmVwIFs8b3B0aW9ucz5dIFstZV0gPG1vdGlmPiBbPHLDqXZpc2lvbj4uLi5dIFtbLS1dIDxjaGVtaW4+Li4uXSIKKworIzogYnVpbHRpbi9ncmVwLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiZ3JlcCA6IMOpY2hlYyBkZSBjcsOpYXRpb24gZHUgZmlsOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkgZm9yICVzIgorbXNnc3RyICJub21icmUgZGUgZmlscyBzcMOpY2lmacOpIGludmFsaWRlICglZCkgcG91ciAlcyIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGlzIHRoZSBjb25maWd1cmF0aW9uCisjLiB2YXJpYWJsZSBmb3IgdHdlYWtpbmcgdGhyZWFkcywgY3VycmVudGx5CisjLiBncmVwLnRocmVhZHMKKyMuCisjOiBidWlsdGluL2dyZXAuYzoyODcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzOCBidWlsdGluL2luZGV4LXBhY2suYzoxNzMxCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAicGFzIGRlIHN1cHBvcnQgZGVzIGZpbHMsIGlnbm9yZSAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NDUzIGJ1aWx0aW4vZ3JlcC5jOjU3OCBidWlsdGluL2dyZXAuYzo2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbCdhcmJyZSAoJXMpIgorCisjOiBidWlsdGluL2dyZXAuYzo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmYWlyZSB1biBncmVwIHN1ciB1biBvYmpldCBkZSB0eXBlICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAibCdvcHRpb24gJyVjJyBhdHRlbmQgdW5lIHZhbGV1ciBudW3DqXJpcXVlIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDMKK21zZ2lkICJzZWFyY2ggaW4gaW5kZXggaW5zdGVhZCBvZiBpbiB0aGUgd29yayB0cmVlIgorbXNnc3RyICJyZWNoZXJjaGVyIGRhbnMgbCdpbmRleCBwbHV0w7R0IHF1ZSBkYW5zIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwNQorbXNnaWQgImZpbmQgaW4gY29udGVudHMgbm90IG1hbmFnZWQgYnkgZ2l0IgorbXNnc3RyICJyZWNoZXJjaGVyIGRhbnMgbGVzIGNvbnRlbnVzIG5vbiBnw6lyw6lzIHBhciBnaXQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwNworbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAicmVjaGVyY2hlciBkYW5zIGxlcyBmaWNoaWVycyBzdWl2aXMgZXQgbm9uLXN1aXZpcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODA5Cittc2dpZCAiaWdub3JlIGZpbGVzIHNwZWNpZmllZCB2aWEgJy5naXRpZ25vcmUnIgorbXNnc3RyICJpZ25vcmVyIGxlcyBmaWNoaWVycyBzcMOpY2lmacOpcyB2aWEgJy5naXRpZ25vcmUnIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTEKK21zZ2lkICJyZWN1cnNpdmVseSBzZWFyY2ggaW4gZWFjaCBzdWJtb2R1bGUiCittc2dzdHIgInJlY2hlcmNoZXIgcsOpY3Vyc2l2ZW1lbnQgZGFucyBjaGFxdWUgc291cy1tb2R1bGUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNAorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgbGlnbmVzIHF1aSBuZSBjb3JyZXNwb25kZW50IHBhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE2Cittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAiY29ycmVzcG9uZGFuY2UgaW5zZW5zaWJsZSDDoCBsYSBjYXNzZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE4Cittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgInJlY2hlcmNoZXIgbGVzIG1vdGlmcyBhdXggc8OpcGFyYXRldXJzIGRlIG1vdHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMAorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgInRyYWl0ZXIgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIGNvbW1lIHRleHRlIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjIKK21zZ2lkICJkb24ndCBtYXRjaCBwYXR0ZXJucyBpbiBiaW5hcnkgZmlsZXMiCittc2dzdHIgIm5lIHBhcyBjaGVyY2hlciBsZXMgbW90aWZzIGRhbnMgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjUKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyB3aXRoIHRleHRjb252IGZpbHRlcnMiCittc2dzdHIgInRyYWl0ZXIgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIGF2ZWMgbGVzIGZpbHRyZXMgdGV4dGNvbnYiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNworbXNnaWQgInNlYXJjaCBpbiBzdWJkaXJlY3RvcmllcyAoZGVmYXVsdCkiCittc2dzdHIgInJlY2hlcmNoZXIgZGFucyBsZXMgc291cy1yw6lwZXJ0b2lyZXMgKGTDqWZhdXQpIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjkKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgImRlc2NlbmRyZSBhdSBwbHVzIGRlIDxwcm9mb25kZXVyPiBkYW5zIGwnYXJib3Jlc2NlbmNlIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzMKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAidXRpbGlzZXIgZGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyDDqXRlbmR1ZXMgUE9TSVgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNgorbXNnaWQgInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIKK21zZ3N0ciAidXRpbGlzZXIgZGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBiYXNpcXVlcyBQT1NJWCAocGFyIGTDqWZhdXQpIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzkKK21zZ2lkICJpbnRlcnByZXQgcGF0dGVybnMgYXMgZml4ZWQgc3RyaW5ncyIKK21zZ3N0ciAiaW50ZXJwcsOpdGVyIGxlcyBtb3RpZnMgY29tbWUgZGUgY2hhw65uZXMgZml4ZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0MgorbXNnaWQgInVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAidXRpbGlzZXIgZGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBjb21wYXRpYmxlcyBhdmVjIFBlcmwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NQorbXNnaWQgInNob3cgbGluZSBudW1iZXJzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgbnVtw6lyb3MgZGUgbGlnbmUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NgorbXNnaWQgInNob3cgY29sdW1uIG51bWJlciBvZiBmaXJzdCBtYXRjaCIKK21zZ3N0ciAiYWZmaWNoZXIgbGUgbnVtw6lybyBkZSBjb2xvbm5lIGRlIGxhIHByZW1pw6hyZSBjb3JyZXNwb25kYW5jZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ3Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIm5lIHBhcyBwYXMgYWZmaWNoZXIgbGVzIG5vbXMgZGUgZmljaGllciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ4Cittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgImFmZmljaGVyIGxlcyBub21zIGRlIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgImFmZmljaGVyIGxlcyBub21zIGRlIGZpY2hpZXJzIHJlbGF0aXZlbWVudCBhdSByw6lwZXJ0b2lyZSBkZSBiYXNlIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTIKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIm4nYWZmaWNoZXIgcXVlIGxlcyBub21zIGRlIGZpY2hpZXJzIGF1IGxpZXUgZGVzIGxpZ25lcyBjb3JyZXNwb25kYW50IgorCisjOiBidWlsdGluL2dyZXAuYzo4NTQKK21zZ2lkICJzeW5vbnltIGZvciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKK21zZ3N0ciAic3lub255bWUgcG91ciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU3Cittc2dpZCAic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIgorbXNnc3RyICJuJ2FmZmljaGVyIHF1ZSBsZXMgbm9tcyBkZXMgZmljaGllcnMgc2FucyBjb3JyZXNwb25kYW5jZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU5Cittc2dpZCAicHJpbnQgTlVMIGFmdGVyIGZpbGVuYW1lcyIKK21zZ3N0ciAiaW1wcmltZXIgdW5lIGNhcmFjdMOocmUgTlVMIGFwcsOocyBsZSBub21zIGRlIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MgorbXNnaWQgInNob3cgb25seSBtYXRjaGluZyBwYXJ0cyBvZiBhIGxpbmUiCittc2dzdHIgIm4nYWZmaWNoZXIgcXVlIGxlcyBwYXJ0aWVzIGNvcnJlc3BvbmRhbnRlcyBkJ3VuZSBsaWduZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY0Cittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAiYWZmaWNoZXIgbGUgbm9tYnJlIGRlIGNvcnJlc3BvbmRhbmNlcyBhdSBsaWV1IGRlcyBsaWduZXMgY29ycmVzcG9uZGFudCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY1Cittc2dpZCAiaGlnaGxpZ2h0IG1hdGNoZXMiCittc2dzdHIgIm1ldHRyZSBlbiDDqXZpZGVuY2UgbGVzIGNvcnJlc3BvbmRhbmNlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY3Cittc2dpZCAicHJpbnQgZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMiCittc2dzdHIgIiIKKyJpbXByaW1lciB1bmUgbGlnbmUgdmlkZSBlbnRyZSBsZXMgY29ycmVzcG9uZGFuY2VzIGRlIGZpY2hpZXJzIGRpZmbDqXJlbnRzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjkKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICIiCisiYWZmaWNoZXIgbGUgbm9tIGRlIGZpY2hpZXIgdW5lIGZvaXMgYXUgZGVzc3VzIGRlcyBjb3JyZXNwb25kYW5jZXMgZHUgbcOqbWUgIgorImZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3MgorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICJhZmZpY2hlciA8bj4gbGlnbmVzIGRlIGNvbnRleHRlIGF2YW50IGV0IGFwcsOocyBsZXMgY29ycmVzcG9uZGFuY2VzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzUKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICJhZmZpY2hlciA8bj4gbGlnbmVzIGRlIGNvbnRleHRlIGF2YW50IGxlcyBjb3JyZXNwb25kYW5jZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NworbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAiYWZmaWNoZXIgPG4+IGxpZ25lcyBkZSBjb250ZXh0ZSBhcHLDqHMgbGVzIGNvcnJlc3BvbmRhbmNlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc5Cittc2dpZCAidXNlIDxuPiB3b3JrZXIgdGhyZWFkcyIKK21zZ3N0ciAidXRpbGlzZXIgPG4+IGZpbHMgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgwCittc2dpZCAic2hvcnRjdXQgZm9yIC1DIE5VTSIKK21zZ3N0ciAicmFjY291cmNpIHBvdXIgLUMgTlVNIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODMKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICIiCisiYWZmaWNoZXIgdW5lIGxpZ25lIGF2ZWMgbGUgbm9tIGRlIGxhIGZvbmN0aW9uIGF2YW50IGxlcyBjb3JyZXNwb25kYW5jZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4NQorbXNnaWQgInNob3cgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIgorbXNnc3RyICJhZmZpY2hlciBsYSBmb25jdGlvbiBjb250ZW5hbnRlIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODgKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIKK21zZ3N0ciAibGlyZSBsZXMgbW90aWZzIGRlcHVpcyBmaWNoaWVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTAKK21zZ2lkICJtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgInJlY2hlcmNoZXIgPG1vdGlmPiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkyCittc2dpZCAiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIKK21zZ3N0ciAiY29tYmluZXIgbGVzIG1vdGlmcyBzcMOpY2lmacOpcyBwYXIgLWUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwNAorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICIiCisiaW5kaXF1ZXIgZGVzIGNvcnJlc3BvbmRhbmNlcyBhdmVjIGxlIGNvZGUgZGUgc29ydGllIG1haXMgc2FucyByaWVuIGFmZmljaGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDYKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hlcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2ggYWxsIHBhdHRlcm5zIgorbXNnc3RyICIiCisibidhZmZpY2hlciBxdWUgbGVzIGNvcnJlc3BvbmRhbmNlcyBkZSBmaWNoaWVycyBxdWkgY29ycmVzcG9uZGVudCDDoCB0b3VzIGxlcyAiCisibW90aWZzIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDgKK21zZ2lkICJzaG93IHBhcnNlIHRyZWUgZm9yIGdyZXAgZXhwcmVzc2lvbiIKK21zZ3N0ciAiYWZmaWNoZXIgbCdhcmJyZSBkJ2FuYWx5c2UgcG91ciBsZSBtb3RpZiBncmVwIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTIKK21zZ2lkICJwYWdlciIKK21zZ3N0ciAicGFnaW5ldXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxMgorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICJhZmZpY2hlciBsZXMgZmljaGllcnMgY29ycmVzcG9uZGFudCBkYW5zIGxlIHBhZ2luZXVyIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTYKK21zZ2lkICJhbGxvdyBjYWxsaW5nIG9mIGdyZXAoMSkgKGlnbm9yZWQgYnkgdGhpcyBidWlsZCkiCittc2dzdHIgInBlcm1ldHRyZSBsJ2FwcGVsIGRlIGdyZXAoMSkgKGlnbm9yw6kgcGFyIGNlIGJ1aWxkKSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTgzCittc2dpZCAibm8gcGF0dGVybiBnaXZlbiIKK21zZ3N0ciAiYXVjdW4gbW90aWYgZm91cm5pIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDE5Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMiCittc2dzdHIgIiIKKyItLW5vLWluZGV4IG91IC0tdW50cmFja2VkIG5lIHBldXZlbnQgcGFzIMOqdHJlIHV0aWxpc8OpcyBhdmVjIGRlcyByw6l2aXNpb25zIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgbGEgcsOpdmlzaW9uwqA6ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDU3Cittc2dpZCAiLS11bnRyYWNrZWQgbm90IHN1cHBvcnRlZCB3aXRoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIgorbXNnc3RyICItLXVudHJhY2tlZCBub24gc3VwcG9ydMOpZSBhdmVjIC0tcmVjdXJzZS1zdWJtb2R1bGVzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDYxCittc2dpZCAiaW52YWxpZCBvcHRpb24gY29tYmluYXRpb24sIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAib3B0aW9uIGRlIGNvbWJpbmFpc29uIGludmFsaWRlLCBpZ25vcmUgLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY0IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU0NworbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICJwYXMgZGUgc3VwcG9ydCBkZXMgZmlscywgaWdub3JlIC0tdGhyZWFkcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2NyBidWlsdGluL2luZGV4LXBhY2suYzoxNTM1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg1MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIgorbXNnc3RyICJub21icmUgZGUgZmlscyBzcMOpY2lmacOpIGludmFsaWRlICglZCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMDEKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBuZSBmb25jdGlvbm5lIHF1ZSBzdXIgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEyNworbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiLS1jYWNoZWQgb3UgLS11bnRyYWNrZWQgbmUgcGV1dmVudCBwYXMgw6p0cmUgdXRpbGlzw6lzIGF2ZWMgLS1uby1pbmRleCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEzMworbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzIgorbXNnc3RyICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBuZSBwZXV0IHBhcyDDqnRyZSB1dGlsaXPDqSBhdmVjIGR1IGNvbnRlbnUgc3VpdmkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExNDEKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4iCittc2dzdHIgIi0tY2FjaGVkIGV0IGRlcyBhcmJyZXMgc29udCBmb3VybmlzIGVuIG3Dqm1lIHRlbXBzIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODUKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0eXBlPl0gWy13XSBbLS1wYXRoPTxmaWNoaWVyPiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dICIKKyJbLS1dIDxmaWNoaWVyPi4uLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg2Cittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICJ0eXBlIGQnb2JqZXQiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLDqWNyaXJlIGwnb2JqZXQgZGFucyBsYSBiYXNlIGRlIGRvbm7DqWUgZCdvYmpldHMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDEKK21zZ2lkICJyZWFkIHRoZSBvYmplY3QgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGlyZSBsJ29iamV0IGRlcHVpcyBsJ2VudHLDqWUgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDMKK21zZ2lkICJzdG9yZSBmaWxlIGFzIGlzIHdpdGhvdXQgZmlsdGVycyIKK21zZ3N0ciAic3RvY2tlciBsZSBmaWNoaWVyIHRlbCBxdWVsIHNhbnMgZmlsdHJhZ2UiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDQKK21zZ2lkICIiCisianVzdCBoYXNoIGFueSByYW5kb20gZ2FyYmFnZSB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgR2l0IgorbXNnc3RyICIiCisianVzdGUgaGFzaGVyIG4naW1wb3J0ZSBxdWVsIGNvbnRlbnUgcG91ciBjcsOpZXIgZGVzIG9iamV0cyBjb3Jyb21wdXMgcG91ciAiCisiZGVidWdnZXIgR2l0IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1Cittc2dpZCAicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiCittc2dzdHIgInRyYWl0ZXIgbGUgZmljaGllciBjb21tZSBzJ2lsIHZlbmFpdCBkZSBjZSBjaGVtaW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2Cittc2dpZCAicHJpbnQgYWxsIGF2YWlsYWJsZSBjb21tYW5kcyIKK21zZ3N0ciAiYWZmaWNoZXIgdG91dGVzIGxlcyBjb21tYW5kZXMgZGlzcG9uaWJsZXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3Cittc2dpZCAiZXhjbHVkZSBndWlkZXMiCittc2dzdHIgImV4Y2x1cmUgbGVzIGd1aWRlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDgKK21zZ2lkICJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiCittc2dzdHIgImFmZmljaGVyIHVuZSBsaXN0ZSBkZSBndWlkZXMgdXRpbGVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0OQorbXNnaWQgInByaW50IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIgorbXNnc3RyICJhZmZpY2hlciB0b3VzIGxlcyBub21zIGRlIHZhcmlhYmxlcyBkZSBjb25maWd1cmF0aW9uIgorCisjOiBidWlsdGluL2hlbHAuYzo1MQorbXNnaWQgInNob3cgbWFuIHBhZ2UiCittc2dzdHIgImFmZmljaGVyIGxhIHBhZ2UgZGUgbWFudWVsIgorCisjOiBidWlsdGluL2hlbHAuYzo1MgorbXNnaWQgInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIgorbXNnc3RyICJhZmZpY2hlciBsZSBtYW51ZWwgZGFucyB1biBuYXZpZ2F0ZXVyIHdlYiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTQKK21zZ2lkICJzaG93IGluZm8gcGFnZSIKK21zZ3N0ciAiYWZmaWNoZXIgbGEgcGFnZSBpbmZvIgorCisjOiBidWlsdGluL2hlbHAuYzo1NgorbXNnaWQgInByaW50IGNvbW1hbmQgZGVzY3JpcHRpb24iCittc2dzdHIgImFmZmljaGVyIGxhIGRlc2NyaXB0aW9uIGRlIGxhIGNvbW1hbmRlIgorCisjOiBidWlsdGluL2hlbHAuYzo2MQorbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iCittc2dzdHIgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kZT5dIgorCisjOiBidWlsdGluL2hlbHAuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVscCBmb3JtYXQgJyVzJyIKK21zZ3N0ciAiZm9ybWF0IGQnYWlkZSBub24gcmVjb25udSAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDQKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICLDqWNoZWMgZGUgZMOpbWFycmFnZSBkJ2VtYWNzY2xpZW50LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTE3Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICLDqWNoZWMgZCdhbmFseXNlIGRlIGxhIHZlcnNpb24gZCdlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICJsYSB2ZXJzaW9uIGQnZW1hY3NjbGllbnQgJyVkJyBlc3QgdHJvcCBhbmNpZW5uZSAoPDIyKS4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjE0MyBidWlsdGluL2hlbHAuYzoxNjUgYnVpbHRpbi9oZWxwLmM6MTc1IGJ1aWx0aW4vaGVscC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnIgorbXNnc3RyICLDqWNoZWMgZGUgbCdleMOpY3V0aW9uIGRlICclcyciCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcycgOiBjaGVtaW4gcG91ciBsJ3V0aWxpdGFpcmUgZGUgdmlzdWFsaXNhdGlvbiBkZSBtYW51ZWwgbm9uIHN1cHBvcnTDqS5cbiIKKyJWZXVpbGxleiB1dGlsaXNlciBwbHV0w7R0ICdtYW4uPG91dGlsPi5jbWQnLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcycgOiBjaGVtaW4gcG91ciBsJ3V0aWxpdGFpcmUgZGUgdmlzdWFsaXNhdGlvbiBkZSBtYW51ZWwgc3VwcG9ydMOpLlxuIgorIlZldWlsbGV6IHV0aWxpc2VyIHBsdXTDtHQgJ21hbi48b3V0aWw+LmNtZCcuIgorCisjOiBidWlsdGluL2hlbHAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAiJyVzJyA6IHZpc3VhbGlzZXVyIGRlIG1hbnVlbCBpbmNvbm51LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzY3Cittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJhdWN1biB2aXN1YWxpc2V1ciBkZSBtYW51ZWwgbidhIHByaXMgZW4gY2hhcmdlIGxhIGRlbWFuZGUiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM3NQorbXNnaWQgIm5vIGluZm8gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImF1Y3VuIHZpc3VhbGlzZXVyIGRlICdpbmZvJyBuJ2EgcHJpcyBlbiBjaGFyZ2UgbGEgZGVtYW5kZSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDM0IGJ1aWx0aW4vaGVscC5jOjQ0NSBnaXQuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbGlhc2VkIHRvICclcyciCittc2dzdHIgIiclcycgZXN0IHVuIGFsaWFzIGRlICclcyciCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0OCBnaXQuYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGFsaWFzLiVzIHN0cmluZzogJXMiCittc2dzdHIgIk1hdXZhaXMgY2hhw65uZSBhbGlhcy4lc8KgOiAlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDc3IGJ1aWx0aW4vaGVscC5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMlcyIKK21zZ3N0ciAidXNhZ2UgOiAlcyVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0OTEKK21zZ2lkICInZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiJ2dpdCBoZWxwIGNvbmZpZycgcG91ciBwbHVzIGQnaW5mb3JtYXRpb24iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAidHlwZSBkJ29iamV0IG5vbiBjb3JyZXNwb25kYW50IMOgICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIG9iamVjdCAlcyIKK21zZ3N0ciAib2JqZXQgYXR0ZW5kdSBub24gcmXDp3UgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXM6IGV4cGVjdGVkIHR5cGUgJXMsIGZvdW5kICVzIgorbXNnc3RyICJvYmpldCAlcyA6IHR5cGUgYXR0ZW5kdSAlcywgcmXDp3UgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAiaW1wb3NzaWJsZSBkZSByZW1wbGlyICVkIG9jdGV0IgorbXNnc3RyWzFdICJpbXBvc3NpYmxlIGRlIHJlbXBsaXIgJWQgb2N0ZXRzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjgKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgImZpbiBkZSBmaWNoaWVyIHByw6ltYXR1csOpZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY5Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAiZXJyZXVyIGRlIGxlY3R1cmUgc3VyIGwnZW50csOpZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjgxCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgInBsdXMgZCdvY3RldHMgdXRpbGlzw6lzIHF1ZSBkaXNwb25pYmxlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjg4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NjA2Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAibGUgcGFxdWV0IGVzdCB0cm9wIGdyYW5kIHBvdXIgbGEgZMOpZmluaXRpb24gYWN0dWVsbGUgZGUgb2ZmX3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5MSBidWlsdGluL3VucGFjay1vYmplY3RzLmM6OTUKK21zZ2lkICJwYWNrIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUiCittc2dzdHIgImxlIHBhcXVldCBkw6lwYXNzZSBsYSB0YWlsbGUgbWF4aW1hbGUgcGVybWlzZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhY2tmaWxlICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgbGUgZmljaGllciBwYXF1ZXQgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI2Cittc2dpZCAicGFjayBzaWduYXR1cmUgbWlzbWF0Y2giCittc2dzdHIgImxhIHNpZ25hdHVyZSBkdSBwYXF1ZXQgbmUgY29ycmVzcG9uZCBwYXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIHZlcnNpb24gJTxQUkl1MzI+IHVuc3VwcG9ydGVkIgorbXNnc3RyICJsYSB2ZXJzaW9uIGRlIHBhcXVldCAlPFBSSXUzMj4gbm9uIHN1cHBvcnTDqWUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKK21zZ3N0ciAibGUgcGFxdWV0IGEgdW4gbWF1dmFpcyBvYmpldCDDoCBsJ29mZnNldCAlPFBSSXVNQVg+wqA6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAibGEgZMOpY29tcHJlc3Npb24gKGluZmxhdGUpIGEgcmV0b3VybsOpICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MTUKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICJkw6lwYXNzZW1lbnQgZGUgbGEgdmFsZXVyIGQnb2Zmc2V0IHBvdXIgbCdvYmpldCBkZWx0YSBkZSBiYXNlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MjMKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBpcyBvdXQgb2YgYm91bmQiCittc2dzdHIgImwnb2JqZXQgZGVsdGEgZGUgYmFzZSBlc3QgaG9ycyBsaW1pdGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICJ0eXBlIGQnb2JqZXQgaW5jb25udSAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTYyCittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIChwcmVhZCkgbGUgZmljaGllciBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlIG1pc3NpbmciCittc2dpZF9wbHVyYWwgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGVzIG1pc3NpbmciCittc2dzdHJbMF0gImZpbiBwcsOpbWF0dXLDqWUgZHUgZmljaGllciBwYXF1ZXQsICU8UFJJdU1BWD4gb2N0ZXQgbHUiCittc2dzdHJbMV0gImZpbiBwcsOpbWF0dXLDqWUgZHUgZmljaGllciBwYXF1ZXQsICU8UFJJdU1BWD4gb2N0ZXRzIGx1cyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTkwCittc2dpZCAic2VyaW91cyBpbmZsYXRlIGluY29uc2lzdGVuY3kiCittc2dzdHIgImdyYXZlIGluY29ow6lyZW5jZSBkYW5zIGxhIGTDqWNvbXByZXNzaW9uIChpbmZsYXRlKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0MSBidWlsdGluL2luZGV4LXBhY2suYzo3NjUKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwNCBidWlsdGluL2luZGV4LXBhY2suYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICJDT0xMSVNJT04gU0hBMSBUUk9VVsOJRSBBVkVDICVzICEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1OAorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCBpbmZvICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbCdpbmZvcm1hdGlvbiBleGlzdGFudGUgZGUgbCdvYmpldCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGwnb2JqZXQgZXhpc3RhbnQgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICJvYmpldCBibG9iIGludmFsaWRlICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjcgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ2Cittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrZWQgb2JqZWN0IgorbXNnc3RyICJlcnJldXIgZGUgZnNjayBkYW5zIGwnb2JqZXQgZW1wYXF1ZXTDqSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhbGwgY2hpbGQgb2JqZWN0cyBvZiAlcyBhcmUgcmVhY2hhYmxlIgorbXNnc3RyICJUb3VzIGxlcyBvYmpldHMgZW5mYW50cyBkZSAlcyBuZSBzb250IHBhcyBhY2Nlc3NpYmxlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTIwIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk1MQorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAiw6ljaGVjIGQnYXBwbGljYXRpb24gZHUgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjEKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUsOpY2VwdGlvbiBkJ29iamV0cyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEyMQorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIkluZGV4YXRpb24gZCdvYmpldHMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTUKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgImxlIHBhcXVldCBlc3QgY29ycm9tcHUgKFNIQTEgbmUgY29ycmVzcG9uZCBwYXMpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTYwCittc2dpZCAiY2Fubm90IGZzdGF0IHBhY2tmaWxlIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb2J0ZW5pciBsZSBzdGF0dXQgKGZzdGF0KSBkdSBmaWNoaWVyIHBhcXVldCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2MworbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAibGUgcGFxdWV0IGVzdCBpbnZhbGlkZSDDoCBsYSBmaW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNzUKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICJjb25mdXNpb24gZXh0csOqbWUgZGFucyBwYXJzZV9wYWNrX29iamVjdHMoKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE5OAorbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIlLDqXNvbHV0aW9uIGRlcyBkZWx0YXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMDggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgbGUgZmlsIDogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNDkKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICJjb25mdXNpb24gZXh0csOqbWUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3RzIgorbXNnc3RyWzBdICJjb21wbMOpdMOpIGF2ZWMgJWQgb2JqZXQgbG9jYWwiCittc2dzdHJbMV0gImNvbXBsw6l0w6kgYXZlYyAlZCBvYmpldHMgbG9jYXV4IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICIiCisiU29tbWUgZGUgY29udHLDtGxlIGRlIGZpbiBpbmF0dGVuZHVlIHBvdXIgJXMgKGNvcnJ1cHRpb24gc3VyIGxlIGRpc3F1ZSA/KSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAibGUgcGFxdWV0IGEgJWQgZGVsdGEgbm9uIHLDqXNvbHUiCittc2dzdHJbMV0gImxlIHBhcXVldCBhICVkIGRlbHRhcyBub24gcsOpc29sdXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgImltcG9zc2libGUgZGUgY29tcHJlc3NlciBsJ29iamV0IGFqb3V0w6kgKCVkKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAibCdvYmpldCBsb2NhbCAlcyBlc3QgY29ycm9tcHUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgImxlIG5vbSBkZSBmaWNoaWVyIHBhcXVldCAnJXMnIG5lIHNlIHRlcm1pbmUgcGFzIHBhciAnLnBhY2snIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAlcyBmaWxlICclcyciCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIGZpY2hpZXIgJXMgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiAlcyBmaWxlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgZmVybWVyIGxlIGZpY2hpZXIgJXMgw6ljcml0ICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NjMKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAiZXJyZXVyIGVuIGZlcm1ldHVyZSBkdSBmaWNoaWVyIHBhcXVldCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ3NworbXNnaWQgImNhbm5vdCBzdG9yZSBwYWNrIGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZGUgc3RvY2tlciBsZSBmaWNoaWVyIHBhcXVldCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ4NQorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHN0b2NrZXIgbGUgZmljaGllciBkJ2luZGV4IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTI5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICJtYXV2YWlzIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGZpbGUgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ291dnJpciBsZSBmaWNoaWVyIHBhcXVldCBleGlzdGFudCAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIkltcG9zc2libGUgZCdvdXZyaXIgbGUgZmljaGllciBwYXF1ZXQgZCdpbmRleCBleGlzdGFudCBwb3VyICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAicGFzIHVuIGRlbHRhIDogJWQgb2JqZXQiCittc2dzdHJbMV0gInBhcyB1biBkZWx0YSA6ICVkIG9iamV0cyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICJsb25ndWV1ciBjaGHDrm7DqWUgPSAlZCA6ICVsdSBvYmpldCIKK21zZ3N0clsxXSAibG9uZ3VldXIgY2hhw65uw6llID0gJWQgOiAlbHUgb2JqZXRzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjkzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIkltcG9zc2libGUgZGUgcmV2ZW5pciBhdSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIGNvdXJhbnQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NDIgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc0NQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc2MSBidWlsdGluL2luZGV4LXBhY2suYzoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAibWF1dmFpcyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4MQorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIHNhbnMgLS1zdGRpbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4MworbXNnaWQgIi0tc3RkaW4gcmVxdWlyZXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1zdGRpbiByZXF1aWVydCB1biBkw6lww7R0IGdpdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4OQorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiLS12ZXJpZnkgc2FucyBub20gZGUgZmljaGllciBwYXF1ZXQgZG9ubsOpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODM3IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1ODIKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2sgb2JqZWN0cyIKK21zZ3N0ciAiZXJyZXVyIGRlIGZzY2sgZGFucyBsZXMgb2JqZXRzIHBhcXVldHMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgZmFpcmUgdW4gc3RhdCBkdSBtb2TDqGxlICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgbGUgcsOpcGVydG9pcmUgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsZSBsaWVuICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgdW4gbGllbiBzeW1ib2xpcXVlIGRlICclcycgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNvcGllciAnJXMnIHZlcnMgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdGVtcGxhdGUgJXMiCittc2dzdHIgIm1vZMOobGUgJXMgaWdub3LDqSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgaW4gJXMiCittc2dzdHIgIm1vZMOobGVzIG5vbiB0cm91dsOpcyBkYW5zICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIGZyb20gJyVzJzogJXMiCittc2dzdHIgInBhcyBkZSBjb3BpZSBkZXMgbW9kw6hsZXMgZGVwdWlzICclcyfCoDogJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaGFuZGxlIGZpbGUgdHlwZSAlZCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB0cmFpdGVyIGxlIGZpY2hpZXIgZGUgdHlwZSAlZCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqXBsYWNlciAlcyB2ZXJzICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNTQgYnVpbHRpbi9pbml0LWRiLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIlcyBleGlzdGUgZMOpasOgIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJEw6lww7R0IEdpdCBleGlzdGFudCBwYXJ0YWfDqSByw6lpbml0aWFsaXPDqSBkYW5zICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJEw6lww7R0IEdpdCBleGlzdGFudCByw6lpbml0aWFsaXPDqSBkYW5zICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkTDqXDDtHQgR2l0IHZpZGUgcGFydGFnw6kgaW5pdGlhbGlzw6kgZGFucyAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkTDqXDDtHQgR2l0IHZpZGUgaW5pdGlhbGlzw6kgZGFucyAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ2OAorbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08csOpcGVydG9pcmUtbW9kw6hsZT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPHLDqXBlcnRvaXJlPl0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MQorbXNnaWQgInBlcm1pc3Npb25zIgorbXNnc3RyICJwZXJtaXNzaW9ucyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkyCittc2dpZCAic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIgorbXNnc3RyICJzcMOpY2lmaWVyIHF1ZSBsZSBkw6lww7R0IGdpdCBzZXJhIHBhcnRhZ8OpIGVudHJlIHBsdXNpZXVycyB1dGlsaXNhdGV1cnMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyOSBidWlsdGluL2luaXQtZGIuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZSByw6lwZXJ0b2lyZSAobWtkaXIpICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHNlIGTDqXBsYWNlciB2ZXJzIGxlIHLDqXBlcnRvaXJlIChjaGRpcikgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIiCisiJXMgKG91IC0td29yay10cmVlPTxyw6lwZXJ0b2lyZT4pIG4nZXN0IHBhcyBhdXRvcmlzw6kgc2FucyBzcMOpY2lmaWVyICVzIChvdSAtLSIKKyJnaXQtZGlyPTxyw6lwZXJ0b2lyZT4pIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2FjY8OpZGVyIMOgIGwnYXJicmUgZGUgdHJhdmFpbCAnJXMnIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjE2Cittc2dpZCAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8c3ltYm9sZT5bKD18Oik8dmFsZXVyPl0pLi4uXSBbPGZpY2hpZXI+Li4uXSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NQorbXNnaWQgImVkaXQgZmlsZXMgaW4gcGxhY2UiCittc2dzdHIgIsOpZGl0ZXIgbGVzIGZpY2hpZXJzIHN1ciBwbGFjZSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NgorbXNnaWQgInRyaW0gZW1wdHkgdHJhaWxlcnMiCittc2dzdHIgIsOpbGltaW5lciBsZXMgbGlnbmVzIGRlIGZpbiB2aWRlcyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OQorbXNnaWQgIndoZXJlIHRvIHBsYWNlIHRoZSBuZXcgdHJhaWxlciIKK21zZ3N0ciAib8O5IHBsYWNlciBsZXMgbm91dmVsbGVzIGxpZ25lcyB0ZXJtaW5hbGVzIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMQorbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJhY3Rpb24gc2kgbGVzIGxpZ25lcyB0ZXJtaW5hbGVzIGV4aXN0ZW50IGTDqWrDoCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDMKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBpcyBtaXNzaW5nIgorbXNnc3RyICJhY3Rpb24gc2kgbGVzIGxpZ25lcyB0ZXJtaW5hbGVzIG1hbnF1ZW50IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNQorbXNnaWQgIm91dHB1dCBvbmx5IHRoZSB0cmFpbGVycyIKK21zZ3N0ciAiw6lsaW1pbmVyIGxlcyBsaWduZXMgdGVybWluYWxlcyB2aWRlcyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDYKK21zZ2lkICJkbyBub3QgYXBwbHkgY29uZmlnIHJ1bGVzIgorbXNnc3RyICJuZSBwYXMgYXBwbGlxdWVyIGxlcyByw6hnbGVzIGRlIGxhIGNvbmZpZ3VyYXRpb24iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA3Cittc2dpZCAiam9pbiB3aGl0ZXNwYWNlLWNvbnRpbnVlZCB2YWx1ZXMiCittc2dzdHIgImpvaW5kcmUgbGVzIHZhbGV1cnMgY29udGludcOpZXMgYXZlYyBkZXMgY2FyYWN0w6hyZXMgYmxhbmNzIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwOAorbXNnaWQgInNldCBwYXJzaW5nIG9wdGlvbnMiCittc2dzdHIgInBhcmFtw6h0cmVzIGQnYW5hbHlzZSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTAKK21zZ2lkICJkbyBub3QgdHJlYXQgLS0tIHNwZWNpYWxseSIKK21zZ3N0ciAibmUgcGFzIHRyYWl0ZXIgc3DDqWNpYWxlbWVudCAtLS0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTExCittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAibGlnbmUgZGUgZmluIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMgorbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICJsaWduZShzKSBkZSBmaW4gw6AgYWpvdXRlciIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMjMKK21zZ2lkICItLXRyYWlsZXIgd2l0aCAtLW9ubHktaW5wdXQgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS10cmFpbGVyIG4nYSBhdWN1bmUgc2lnbmlmaWNhdGlvbiBhdmVjIC0tb25seS1pbnB1dCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMzMKK21zZ2lkICJubyBpbnB1dCBmaWxlIGdpdmVuIGZvciBpbi1wbGFjZSBlZGl0aW5nIgorbXNnc3RyICJhdWN1biBmaWNoaWVyIGVuIGVudHLDqWUgcG91ciBsJ8OpZGl0b24gc3VyIHBsYWNlIgorCisjOiBidWlsdGluL2xvZy5jOjU2Cittc2dpZCAiZ2l0IGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxvZyBbPG9wdGlvbnM+XSBbPHBsYWdlIGRlIHLDqXZpc2lvbnM+XSBbWy0tXSA8Y2hlbWluPi4uLl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTcKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzxvcHRpb25zPl0gPG9iamV0Pi4uLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLWRlY29yYXRlIG9wdGlvbjogJXMiCittc2dzdHIgIm9wdGlvbiAtLWRlY29yYXRlIGludmFsaWRlIDogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc0Cittc2dpZCAic2hvdyBzb3VyY2UiCittc2dzdHIgImFmZmljaGVyIGxhIHNvdXJjZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNzUKK21zZ2lkICJVc2UgbWFpbCBtYXAgZmlsZSIKK21zZ3N0ciAiVXRpbGlzZXIgbGUgZmljaGllciBkZSBjb3JyZXNwb25kYW5jZSBkZSBtYWlsIgorCisjOiBidWlsdGluL2xvZy5jOjE3NworbXNnaWQgIm9ubHkgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiZMOpY29yZXIgc2V1bGVtZW50IGxlcyByw6lmw6lyZW5jZXMgY29ycmVzcG9uZGFudCDDoCA8bW90aWY+IgorCisjOiBidWlsdGluL2xvZy5jOjE3OQorbXNnaWQgImRvIG5vdCBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJuZSBwYXMgZMOpY29yZXIgbGVzIHLDqWbDqXJlbmNlcyBjb3JyZXNwb25kYW50IMOgIDxtb3RpZj4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwCittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAiZMOpY29yZXIgbGVzIG9wdGlvbnMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgzCittc2dpZCAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIiIKKyJUcmFpdGVyIHNldWxlbWVudCBsJ2ludGVydmFsbGUgZGUgbGlnbmVzIG4sbSBkdSBmaWNoaWVyIGVuIGNvbW1lbsOnYW50IGxlICIKKyJjb21wdGUgw6AgMSIKKworIzogYnVpbHRpbi9sb2cuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICJTb3J0aWUgZmluYWxlIDogJWQgJXNcbiIKKworIzogYnVpbHRpbi9sb2cuYzo1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHNob3cgJXM6IGJhZCBmaWxlIgorbXNnc3RyICJnaXQgc2hvdyAlcyA6IGZpY2hpZXIgaW5jb3JyZWN0IgorCisjOiBidWlsdGluL2xvZy5jOjU1MCBidWlsdGluL2xvZy5jOjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsJ29iamV0ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHR5cGU6ICVkIgorbXNnc3RyICJ0eXBlIGluY29ubnUgOiAlZCIKKworIzogYnVpbHRpbi9sb2cuYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgY292ZXIgZnJvbSBkZXNjcmlwdGlvbiBtb2RlIgorbXNnc3RyICIlc8KgOiBjb3V2ZXJ0dXJlIGludmFsaWRlIHBvdXIgbGUgbW9kZSBkZSBkZXNjcmlwdGlvbiIKKworIzogYnVpbHRpbi9sb2cuYzo4MjEKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyBzYW5zIHZhbGV1ciIKKworIzogYnVpbHRpbi9sb2cuYzo5MzYKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgImxlIG5vbSBkdSByw6lwZXJ0b2lyZSBkZSBzb3J0aWUgZXN0IHRyb3AgbG9uZyIKKworIzogYnVpbHRpbi9sb2cuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciBsZSBmaWNoaWVyIGNvcnJlY3RpZiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo5NjkKK21zZ2lkICJuZWVkIGV4YWN0bHkgb25lIHJhbmdlIgorbXNnc3RyICJleGFjdGVtZW50IHVuZSBwbGFnZSBuw6ljZXNzYWlyZSIKKworIzogYnVpbHRpbi9sb2cuYzo5NzkKK21zZ2lkICJub3QgYSByYW5nZSIKK21zZ3N0ciAiY2VjaSBuJ2VzdCBwYXMgdW5lIHBsYWdlIgorCisjOiBidWlsdGluL2xvZy5jOjExNDMKK21zZ2lkICJjb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IgorbXNnc3RyICJsYSBsZXR0cmUgZGUgbW90aXZhdGlvbiBkb2l0IMOqdHJlIGF1IGZvcm1hdCBjb3VycmllbCIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQ5Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBjb3Zlci1sZXR0ZXIgZmlsZSIKK21zZ3N0ciAiw6ljaGVjIGRlIGNyw6lhdGlvbiBkdSBmaWNoaWVyIGRlIGxldHRyZSBkZSBtb3RpdmF0aW9uIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAiaW4tcmVwbHktdG8gYWJlcnJhbnQgOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU1Cittc2dpZCAiZ2l0IGZvcm1hdC1wYXRjaCBbPG9wdGlvbnM+XSBbPHNpbmNlPiB8IDxyZXZpc2lvbi1yYW5nZT5dIgorbXNnc3RyICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8ZGVwdWlzPiB8IDxwbGFnZSBkZSByw6l2aXNpb25zPl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMxMworbXNnaWQgInR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICJkZXV4IHLDqXBlcnRvaXJlcyBkZSBzb3J0aWXCoD8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQyNCBidWlsdGluL2xvZy5jOjIxOTcgYnVpbHRpbi9sb2cuYzoyMTk5IGJ1aWx0aW4vbG9nLmM6MjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAiY29tbWl0IGluY29ubnUgJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzNCBidWlsdGluL3JlcGxhY2UuYzo1OCBidWlsdGluL3JlcGxhY2UuYzoyMDcKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmIgorbXNnc3RyICLDqWNoZWMgw6AgcsOpc291ZHJlICclcycgY29tbWUgdW5lIHLDqWbDqXJlbmNlIHZhbGlkZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDM5Cittc2dpZCAiY291bGQgbm90IGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB0cm91dmVyIGxhIGJhc2UgZGUgZnVzaW9uIGV4YWN0ZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDQzCittc2dpZCAiIgorImZhaWxlZCB0byBnZXQgdXBzdHJlYW0sIGlmIHlvdSB3YW50IHRvIHJlY29yZCBiYXNlIGNvbW1pdCBhdXRvbWF0aWNhbGx5LFxuIgorInBsZWFzZSB1c2UgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byB0byB0cmFjayBhIHJlbW90ZSBicmFuY2guXG4iCisiT3IgeW91IGNvdWxkIHNwZWNpZnkgYmFzZSBjb21taXQgYnkgLS1iYXNlPTxiYXNlLWNvbW1pdC1pZD4gbWFudWFsbHkiCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIHLDqWN1cMOpcmVyIGwnYW1vbnQsIHNpIHZvdXMgdm91bGV6IGVucmVnaXN0cmVyIGxlIGNvbW1pdCBkZSAiCisiYmFzZSBhdXRvbWF0aXF1ZW1lbnQsXG4iCisidmV1aWxsZXogdXRpbGlzZXIgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBwb3VyIHN1aXZyZSB1bmUgYnJhbmNoZSAiCisiZGlzdGFudGUuXG4iCisiT3Ugdm91cyBwb3V2ZXogc3DDqWNpZmllciBsZSBjb21taXQgZGUgYmFzZSBwYXIgLS1iYXNlPTxpZC1kdS1jb21taXQtZGUtYmFzZT4gIgorIm1hbnVlbGxlbWVudCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDYzCittc2dpZCAiZmFpbGVkIHRvIGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIKK21zZ3N0ciAiw6ljaGVjIMOgIHRyb3V2ZXIgbGEgYmFzZSBkZSBmdXNpb24gZXhhY3RlIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzQKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGQgYmUgdGhlIGFuY2VzdG9yIG9mIHJldmlzaW9uIGxpc3QiCittc2dzdHIgImxlIGNvbW1pdCBkZSBiYXNlIGRldnJhaXQgw6p0cmUgbCdhbmPDqnRyZSBkZSBsYSBsaXN0ZSBkZSByw6l2aXNpb25zIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzgKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGRuJ3QgYmUgaW4gcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAibGUgY29tbWl0IGRlIGJhc2UgbmUgZGV2cmFpdCBwYXMgZmFpcmUgcGFydGllIGRlIGxhIGxpc3RlIGRlIHLDqXZpc2lvbnMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzMQorbXNnaWQgImNhbm5vdCBnZXQgcGF0Y2ggaWQiCittc2dzdHIgImltcG9zc2libGUgZCdvYnRlbmlyIGwnaWQgZHUgcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU4MworbXNnaWQgImZhaWxlZCB0byBpbmZlciByYW5nZS1kaWZmIHJhbmdlcyIKK21zZ3N0ciAiw6ljaGVjIGQnaW5mw6lyZW5jZSBkJ2ludGVydmFsbGVzIGRlIGRpZmbDqXJlbmNlIGQnaW50ZXJ2YWxsZXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYyOQorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgInV0aWxpc2VyIFtQQVRDSCBuL21dIG3Dqm1lIGF2ZWMgdW4gcGF0Y2ggdW5pcXVlIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzIKK21zZ2lkICJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIKK21zZ3N0ciAidXRpbGlzZXIgW1BBVENIXSBtw6ptZSBhdmVjIGRlcyBwYXRjaHMgbXVsdGlwbGVzIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzYKK21zZ2lkICJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIHBhdGNocyBzdXIgbGEgc29ydGllIHN0YW5kYXJkIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzgKK21zZ2lkICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIKK21zZ3N0ciAiZ8OpbsOpcmVyIHVuZSBsZXR0cmUgZGUgbW90aXZhdGlvbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQwCittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICIiCisidXRpbGlzZXIgdW5lIHPDqXF1ZW5jZSBzaW1wbGUgZGUgbm9tYnJlcyBwb3VyIGxlcyBub20gZGVzIGZpY2hpZXJzIGRlIHNvcnRpZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQxCittc2dpZCAic2Z4IgorbXNnc3RyICJzZngiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MgorbXNnaWQgInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIgorbXNnc3RyICJ1dGlsaXNlciA8c2Z4PiBhdSBsaWV1IGRlICcucGF0Y2gnIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDQKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICJkw6ltYXJyZXIgbGEgbnVtw6lyb3RhdGlvbiBkZXMgcGF0Y2hzIMOgIDxuPiBhdSBsaWV1IGRlIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NgorbXNnaWQgIm1hcmsgdGhlIHNlcmllcyBhcyBOdGggcmUtcm9sbCIKK21zZ3N0ciAibWFycXVlciBsYSBzw6lyaWUgY29tbWUgdW5lIE5pw6htZSByw6nDqWRpdGlvbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ4Cittc2dpZCAiVXNlIFtSRkMgUEFUQ0hdIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAidXRpbGlzZXIgW1JGQyBQQVRDSF0gYXUgbGlldSBkZSBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTEKK21zZ2lkICJjb3Zlci1mcm9tLWRlc2NyaXB0aW9uLW1vZGUiCittc2dzdHIgImNvdmVyLWZyb20tZGVzY3JpcHRpb24tbW9kZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUyCittc2dpZCAiZ2VuZXJhdGUgcGFydHMgb2YgYSBjb3ZlciBsZXR0ZXIgYmFzZWQgb24gYSBicmFuY2gncyBkZXNjcmlwdGlvbiIKK21zZ3N0ciAiIgorImfDqW7DqXJlciBkZXMgcGFydGllcyBkZSBsYSBsZXR0cmUgZCdpbnRyb2R1Y3Rpb24gw6AgcGFydGlyIGRlIGxhIGRlc2NyaXB0aW9uICIKKyJkZSBsYSBicmFuY2hlIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTQKK21zZ2lkICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgInV0aWxpc2VyIFs8cHLDqWZpeGU+XSBhdSBsaWV1IGRlIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIKK21zZ3N0ciAic3RvY2tlciBsZXMgZmljaGllcnMgcsOpc3VsdGF0cyBkYW5zIDxyw6lwZXJ0b2lyZT4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MAorbXNnaWQgImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIgorbXNnc3RyICJuZSBwYXMgcmV0aXJlci9ham91dGVyIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MworbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgIm5lIHBhcyBpbXByaW1lciBsZXMgZGlmZnMgYmluYWlyZXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NQorbXNnaWQgIm91dHB1dCBhbGwtemVybyBoYXNoIGluIEZyb20gaGVhZGVyIgorbXNnc3RyICLDqWNyaXJlIHVuZSBlbXByZWludGUgw6AgesOpcm8gZGFucyBsJ2VudMOqdGUgRnJvbSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY3Cittc2dpZCAiZG9uJ3QgaW5jbHVkZSBhIHBhdGNoIG1hdGNoaW5nIGEgY29tbWl0IHVwc3RyZWFtIgorbXNnc3RyICJuZSBwYXMgaW5jbHVyZSB1biBwYXRjaCBjb3JyZXNwb25kYW50IMOgIHVuIGNvbW1pdCBhbW9udCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY5Cittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICJhZmZpY2hlciBsZSBmb3JtYXQgZHUgcGF0Y2ggYXUgbGlldSBkdSBkw6lmYXV0IChwYXRjaCArIHN0YXQpIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzEKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIkNvbW11bmljYXRpb24iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MgorbXNnaWQgImhlYWRlciIKK21zZ3N0ciAiZW4tdMOqdGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MworbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgImFqb3V0ZXIgbCdlbi10w6p0ZSBkZSBjb3VycmllbCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0IGJ1aWx0aW4vbG9nLmM6MTY3NgorbXNnaWQgImVtYWlsIgorbXNnc3RyICJjb3VycmllbCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0Cittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgImFqb3V0ZXIgbCdlbi10w6p0ZSBcIlRvOlwiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAiYWpvdXRlciBsJ2VuLXTDqnRlIFwiQ2M6XCIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3OAorbXNnaWQgImlkZW50IgorbXNnc3RyICJpZGVudCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc5Cittc2dpZCAic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIKK21zZ3N0ciAiIgorInJlbnNlaWduZXIgbCdhZHJlc3NlIEZyb20gw6AgPGlkZW50PiAob3Ugw6AgbCdpZGVudCBkdSB2YWxpZGF0ZXVyIHNpIGFic2VudCkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MQorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgImlkLW1lc3NhZ2UiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MgorbXNnaWQgIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIKK21zZ3N0ciAicsOpcG9uZHJlIGRhbnMgbGUgcHJlbWllciBtZXNzYWdlIMOgIDxpZC1tZXNzYWdlPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgzIGJ1aWx0aW4vbG9nLmM6MTY4NgorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICJsaW1pdGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NAorbXNnaWQgImF0dGFjaCB0aGUgcGF0Y2giCittc2dzdHIgImF0dGFjaGVyIGxlIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODcKK21zZ2lkICJpbmxpbmUgdGhlIHBhdGNoIgorbXNnc3RyICJwYXRjaCDDoCBsJ2ludMOpcmlldXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5MQorbXNnaWQgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIgorbXNnc3RyICIiCisiYWN0aXZlciBsJ2VuZmlsYWdlIGRlIG1lc3NhZ2UsIHN0eWxlcyA6IHNoYWxsb3cgKHN1cGVyZmljaWVsKSwgZGVlcCAocHJvZm9uZCkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5MworbXNnaWQgInNpZ25hdHVyZSIKK21zZ3N0ciAic2lnbmF0dXJlIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTQKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUiCittc2dzdHIgImFqb3V0ZXIgdW5lIHNpZ25hdHVyZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk1Cittc2dpZCAiYmFzZS1jb21taXQiCittc2dzdHIgImNvbW1pdC1kZS1iYXNlIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTYKK21zZ2lkICJhZGQgcHJlcmVxdWlzaXRlIHRyZWUgaW5mbyB0byB0aGUgcGF0Y2ggc2VyaWVzIgorbXNnc3RyICJBam91dGVyIHVuIGFyYnJlIHByw6lyZXF1aXMgw6AgbGEgc8OpcmllIGRlIHBhdGNocyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk4Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIgorbXNnc3RyICJham91dGVyIHVuZSBzaWduYXR1cmUgZGVwdWlzIHVuIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5OQorbXNnaWQgImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiCittc2dzdHIgIm5lIHBhcyBhZmZpY2hlciBsZXMgbm9tcyBkZSBmaWNoaWVycyBkZXMgcGF0Y2hzIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDEKK21zZ2lkICJzaG93IHByb2dyZXNzIHdoaWxlIGdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAiIgorImFmZmljaGVyIGxhIGJhcnJlIGRlIHByb2dyZXNzaW9uIGR1cmFudCBsYSBwaGFzZSBkZSBnw6luw6lyYXRpb24gZGVzIHBhdGNocyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAzCittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJldj4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorImFmZmljaGVyIGxlcyBtb2RpZmljYXRpb25zIHBhciByYXBwb3J0IMOgIDxyw6l2PiBkYW5zIGxhIHByZW1pw6hyZSBwYWdlIG91IHVuZSAiCisicnVzdGluZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA2Cittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJlZnNwZWM+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKyJhZmZpY2hlciBsZXMgbW9kaWZpY2F0aW9ucyBwYXIgcmFwcG9ydCDDoCA8cmVmc3BlYz4gZGFucyBsYSBwcmVtacOocmUgcGFnZSBvdSAiCisidW5lIHJ1c3RpbmUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwOAorbXNnaWQgInBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiCittc2dzdHIgInBvdXJjZW50YWdlIHBhciBsZXF1ZWwgbGEgY3LDqWF0aW9uIGVzdCBwb25kw6lyw6llIgorCisjOiBidWlsdGluL2xvZy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAibGlnbmUgZCdpZGVudGlmaWNhdGlvbiBpbnZhbGlkZSA6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE4MDcKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLW4gZXQgLWsgc29udCBtdXR1ZWxsZW1lbnQgZXhjbHVzaWZzIgorCisjOiBidWlsdGluL2xvZy5jOjE4MDkKK21zZ2lkICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIGV0IC1rIHNvbnQgbXV0dWVsbGVtZW50IGV4Y2x1c2lmcyIKKworIzogYnVpbHRpbi9sb2cuYzoxODE3Cittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHkgbidhIHBhcyBkZSBzZW5zIgorCisjOiBidWlsdGluL2xvZy5jOjE4MTkKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1zdGF0dXMgbidhIHBhcyBkZSBzZW5zIgorCisjOiBidWlsdGluL2xvZy5jOjE4MjEKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tY2hlY2sgbidhIHBhcyBkZSBzZW5zIgorCisjOiBidWlsdGluL2xvZy5jOjE4NTQKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAic29ydGllIHN0YW5kYXJkLCBvdSByw6lwZXJ0b2lyZSwgbGVxdWVsID8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk1OAorbXNnaWQgIi0taW50ZXJkaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiLS1pbnRlcmRpZmYgcmVxdWllcnQgLS1jb3Zlci1sZXR0ZXIgb3UgdW5lIHJ1c3RpbmUgdW5pcXVlIgorCisjOiBidWlsdGluL2xvZy5jOjE5NjIKK21zZ2lkICJJbnRlcmRpZmY6IgorbXNnc3RyICJJbnRlcmRpZmbCoDoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlcmRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICJJbnRlcmRpZmYgY29udHJlIHYlZMKgOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTY5Cittc2dpZCAiLS1jcmVhdGlvbi1mYWN0b3IgcmVxdWlyZXMgLS1yYW5nZS1kaWZmIgorbXNnc3RyICItLWNyZWF0aW9uLWZhY3RvciByZXF1aWVydCAtLXJhbmdlLWRpZmYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk3MworbXNnaWQgIi0tcmFuZ2UtZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIi0tcmFuZ2UtZGlmZiByZXF1aWVydCAtLWNvdmVyLWxldHRlciBvdSB1bmUgcnVzdGluZSB1bmlxdWUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk4MQorbXNnaWQgIlJhbmdlLWRpZmY6IgorbXNnc3RyICJEaWZmLWludGVydmFsbGXCoDoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSYW5nZS1kaWZmIGFnYWluc3QgdiVkOiIKK21zZ3N0ciAiRGlmZi1pbnRlcnZhbGxlIGNvbnRyZSB2JWTCoDoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk5MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzaWduYXR1cmUgZmlsZSAnJXMnIgorbXNnc3RyICJsZWN0dXJlIGR1IGZpY2hpZXIgZGUgc2lnbmF0dXJlICclcycgaW1wb3NzaWJsZSIKKworIzogYnVpbHRpbi9sb2cuYzoyMDI5Cittc2dpZCAiR2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICJHw6luw6lyYXRpb24gZGVzIHBhdGNocyIKKworIzogYnVpbHRpbi9sb2cuYzoyMDczCittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiCittc2dzdHIgIsOpY2hlYyBkZSBjcsOpYXRpb24gZGVzIGZpY2hpZXJzIGVuIHNvcnRpZSIKKworIzogYnVpbHRpbi9sb2cuYzoyMTMyCittc2dpZCAiZ2l0IGNoZXJyeSBbLXZdIFs8dXBzdHJlYW0+IFs8aGVhZD4gWzxsaW1pdD5dXV0iCittc2dzdHIgImdpdCBjaGVycnkgWy12XSBbPGJyYW5jaGVfYW1vbnQ+IFs8aGVhZD4gWzxsaW1pdGU+XV1dIgorCisjOiBidWlsdGluL2xvZy5jOjIxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSB0cm91dmVyIHVuZSBicmFuY2hlIGRpc3RhbnRlIHN1aXZpZSwgbWVyY2kgZGUgc3DDqWNpZmllciAiCisiPGJyYW5jaGVfYW1vbnQ+IG1hbnVlbGxlbWVudC5cbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ3MAorbXNnaWQgImdpdCBscy1maWxlcyBbPG9wdGlvbnM+XSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmljaGllcj4uLi5dIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI2Cittc2dpZCAiaWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGFncyIKK21zZ3N0ciAiaWRlbnRpZmllciBsJ8OpdGF0IGRlIGZpY2hpZXIgYXZlYyBsZXMgw6l0aXF1ZXR0ZXMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjgKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdhc3N1bWUgdW5jaGFuZ2VkJyBmaWxlcyIKK21zZ3N0ciAidXRpbGlzZXIgZGVzIG1pbnVzY3VsZXMgcG91ciBsZXMgZmljaGllcnMgJ2Fzc3Vtw6lzIGluY2hhbmfDqXMnIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMwCittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnZnNtb25pdG9yIGNsZWFuJyBmaWxlcyIKK21zZ3N0ciAidXRpbGlzZXIgZGVzIG1pbnVzY3VsZXMgcG91ciBsZXMgZmljaGllcnMgJ2ZzbW9uaXRvciBjbGVhbiciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzIKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGZpY2hpZXJzIG1pcyBlbiBjYWNoZSBkYW5zIGxhIHNvcnRpZSAoZMOpZmF1dCkiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzQKK21zZ2lkICJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGZpY2hpZXJzIHN1cHByaW3DqXMgZGFucyBsYSBzb3J0aWUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzYKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImFmZmljaGVyIGxlcyBmaWNoaWVycyBtb2RpZmnDqXMgZGFucyBsYSBzb3J0aWUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzgKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImFmZmljaGVyIGxlcyBhdXRyZXMgZmljaGllcnMgZGFucyBsYSBzb3J0aWUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDAKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGZpY2hpZXJzIGlnbm9yw6lzIGRhbnMgbGEgc29ydGllIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQzCittc2dpZCAic2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImFmZmljaGVyIGxlcyBub20gZGVzIG9iamV0cyBpbmRleMOpcyBkYW5zIGxhIHNvcnRpZSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NQorbXNnaWQgInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiCittc2dzdHIgIiIKKyJhZmZpY2hlciBsZXMgZmljaGllcnMgZHUgc3lzdMOobWUgZGUgZmljaGllcnMgcXVpIG9udCBiZXNvaW4gZCfDqnRyZSBzdXBwcmltw6lzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ3Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIG5vbXMgZGVzIHLDqXBlcnRvaXJlcyAnb3RoZXInIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ5Cittc2dpZCAic2hvdyBsaW5lIGVuZGluZ3Mgb2YgZmlsZXMiCittc2dzdHIgImFmZmljaGVyIGxlcyBmaW5zIGRlIGxpZ25lcyBkZXMgZmljaGllcnMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTEKK21zZ2lkICJkb24ndCBzaG93IGVtcHR5IGRpcmVjdG9yaWVzIgorbXNnc3RyICJuZSBwYXMgYWZmaWNoZXIgbGVzIHLDqXBlcnRvaXJlcyB2aWRlcyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGZpY2hpZXJzIG5vbiBmdXNpb25uw6lzIGRhbnMgbGEgc29ydGllIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU2Cittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgImFmZmljaGVyIGwnaW5mb3JtYXRpb24gcmVzb2x2LXVuZG8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTgKK21zZ2lkICJza2lwIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4iCittc2dzdHIgInNhdXRlciBsZXMgZmljaGllcnMgY29ycmVzcG9uZGFudCBhdSBtb3RpZiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2MQorbXNnaWQgImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iCittc2dzdHIgImxlcyBtb3RpZnMgZCdleGNsdXNpb24gc29udCBsdXMgZGVwdWlzIDxmaWNoaWVyPiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NAorbXNnaWQgInJlYWQgYWRkaXRpb25hbCBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUgcGF0dGVybnMgaW4gPGZpbGU+IgorbXNnc3RyICJsaXJlIGRlcyBtb3RpZnMgZCdleGNsdXNpb24gYWRkaXRpb25uZWxzIHBhciByw6lwZXJ0b2lyZSBkYW5zIDxmaWNoaWVyPiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NgorbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgImFqb3V0ZXIgbGVzIGV4Y2x1c2lvbnMgZ2l0IHN0YW5kYXJkIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTcwCittc2dpZCAibWFrZSB0aGUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHRvcCBkaXJlY3RvcnkiCittc2dzdHIgImFmZmljaGVyIGVuIHJlbGF0aWYgcGFyIHJhcHBvcnQgYXUgcsOpcGVydG9pcmUgcmFjaW5lIGR1IHByb2pldCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MworbXNnaWQgInJlY3Vyc2UgdGhyb3VnaCBzdWJtb2R1bGVzIgorbXNnc3RyICJwYXJjb3VyaXIgcsOpY3Vyc2l2ZW1lbnQgbGVzIHNvdXMtbW9kdWxlcyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NQorbXNnaWQgImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIKK21zZ3N0ciAic2kgdW4gPGZpY2hpZXI+IG4nZXN0IHBhcyBkYW5zIGwnaW5kZXgsIHRyYWl0ZXIgY2VsYSBjb21tZSB1bmUgZXJyZXVyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc2Cittc2dpZCAidHJlZS1pc2giCittc2dzdHIgImFyYnJlIG91IGFwcGFyZW50w6kiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzcKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICIiCisiY29uc2lkw6lyZXIgcXVlIGxlcyBjaGVtaW5zIHN1cHByaW3DqXMgZGVwdWlzIDxhcmJyZSBvdSBhcHBhcmVudMOpPiBzb250ICIKKyJ0b3Vqb3VycyBwcsOpc2VudHMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzkKK21zZ2lkICJzaG93IGRlYnVnZ2luZyBkYXRhIgorbXNnc3RyICJhZmZpY2hlciBsZXMgZG9ubsOpZXMgZGUgZMOpYm9nYWdlIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjkKK21zZ2lkICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8ZMOpcMO0dD4gWzxyw6lmw6lyZW5jZXM+Li4uXV0iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAibmUgcGFzIGFmZmljaGVyIGxlcyBVUkwgZGlzdGFudGVzIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjIgYnVpbHRpbi9yZWJhc2UuYzoxNTYxCittc2dpZCAiZXhlYyIKK21zZ3N0ciAiZXjDqWN1dGFibGUiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjEgYnVpbHRpbi9scy1yZW1vdGUuYzo2MworbXNnaWQgInBhdGggb2YgZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUgaG9zdCIKK21zZ3N0ciAiY2hlbWluIHZlcnMgZ2l0LXVwbG9hZC1wYWNrIHN1ciBsZSBzZXJ2ZXVyIGRpc3RhbnQiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjUKK21zZ2lkICJsaW1pdCB0byB0YWdzIgorbXNnc3RyICJsaW1pdGVyIGF1eCDDqXRpcXVldHRlcyIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NgorbXNnaWQgImxpbWl0IHRvIGhlYWRzIgorbXNnc3RyICJsaW1pdGVyIGF1eCBoZWFkcyIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NworbXNnaWQgImRvIG5vdCBzaG93IHBlZWxlZCB0YWdzIgorbXNnc3RyICJuZSBwYXMgYWZmaWNoZXIgbGVzIMOpdGlxdWV0dGVzIHBlbMOpZXMiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjkKK21zZ2lkICJ0YWtlIHVybC48YmFzZT4uaW5zdGVhZE9mIGludG8gYWNjb3VudCIKK21zZ3N0ciAicHJlbmRyZSBlbiBjb21wdGUgdXJsLjxiYXNlPi5pbnN0ZWFkT2YiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzIKK21zZ2lkICJleGl0IHdpdGggZXhpdCBjb2RlIDIgaWYgbm8gbWF0Y2hpbmcgcmVmcyBhcmUgZm91bmQiCittc2dzdHIgIiIKKyJzb3J0aXIgYXZlYyB1biBjb2RlIGQnZXJyZXVyIDIgc2kgYXVjdW5lIGNvcnJlc3BvbmRhbmNlIGRlIHLDqWbDqXJlbmNlIG4nZXN0ICIKKyJ0cm91dsOpZSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3NQorbXNnaWQgInNob3cgdW5kZXJseWluZyByZWYgaW4gYWRkaXRpb24gdG8gdGhlIG9iamVjdCBwb2ludGVkIGJ5IGl0IgorbXNnc3RyICJhZmZpY2hlciBsYSByw6lmIHNvdXMtamFjZW50ZSBlbiBwbHVzIGRlIGwnb2JqZXQgcG9pbnTDqSBwYXIgZWxsZSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MzAKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8YXJicmUgb3UgYXBwYXJlbnTDqT4gWzxjaGVtaW4+Li4uXSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI4Cittc2dpZCAib25seSBzaG93IHRyZWVzIgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIGFyYnJlcyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMwCittc2dpZCAicmVjdXJzZSBpbnRvIHN1YnRyZWVzIgorbXNnc3RyICJwYXJjb3VyaXIgbGVzIHNvdXMtYXJicmVzIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzIKK21zZ2lkICJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIgorbXNnc3RyICJhZmZpY2hlciBsZXMgYXJicmVzIGVuIGxlcyBwYXJjb3VyYW50IgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJ0ZXJtaW5lciBsZXMgw6lsw6ltZW50cyBhdmVjIHVuIG9jdGV0IE5VTCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM2Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiaW5jbHVyZSBsYSB0YWlsbGUgZCdvYmpldCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM4IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MAorbXNnaWQgImxpc3Qgb25seSBmaWxlbmFtZXMiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgbm9tcyBkZSBmaWNoaWVycyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQzCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAidXRpbGlzZXIgbGVzIG5vbXMgZGUgY2hlbWlucyBjb21wbGV0cyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQ1Cittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICIiCisiYWZmaWNoZXIgbCdhcmJyZSBlbnRpZXIgOyBwYXMgc2V1bGVtZW50IGxlIHLDqXBlcnRvaXJlIGNvdXJhbnQgKGltcGxpcXVlIC0tIgorImZ1bGwtbmFtZSkiCisKKyM6IGJ1aWx0aW4vbWFpbHNwbGl0LmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IG1ib3g6ICclcyciCittc2dzdHIgIm1ib3ggdmlkZcKgOiAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6NTUKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIFs8Y29tbWl0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NgorbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU3Cittc2dpZCAiZ2l0IG1lcmdlIC0tY29udGludWUiCittc2dzdHIgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE5Cittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJsZSBjb21tdXRhdGV1ciBgbScgYSBiZXNvaW4gZCd1bmUgdmFsZXVyIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgImxlIGNvbW11dGF0ZXVyICclcycgYSBiZXNvaW4gZCd1bmUgdmFsZXVyIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBsYSBzdHJhdMOpZ2llIGRlIGZ1c2lvbiAnJXMnLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkxlcyBzdHJhdMOpZ2llcyBkaXNwb25pYmxlcyBzb250IDoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkxlcyBzdHJhdMOpZ2llcyBwZXJzb25uYWxpc8OpZXMgc29udCA6IgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ1IGJ1aWx0aW4vcHVsbC5jOjEzMgorbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIm5lIHBhcyBhZmZpY2hlciB1biBkaWZmc3RhdCDDoCBsYSBmaW4gZGUgbGEgZnVzaW9uIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ4IGJ1aWx0aW4vcHVsbC5jOjEzNQorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAiYWZmaWNoZXIgdW4gZGlmZnN0YXQgw6AgbGEgZmluIGRlIGxhIGZ1c2lvbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0OSBidWlsdGluL3B1bGwuYzoxMzgKK21zZ2lkICIoc3lub255bSB0byAtLXN0YXQpIgorbXNnc3RyICIoc3lub255bWUgZGUgLS1zdGF0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1MSBidWlsdGluL3B1bGwuYzoxNDEKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyJham91dGVyIChhdSBwbHVzIDxuPikgw6lsw6ltZW50cyBkdSBqb3VybmFsIGNvdXJ0IGF1IG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiBkZSAiCisibGEgZnVzaW9uIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU0IGJ1aWx0aW4vcHVsbC5jOjE0NworbXNnaWQgImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIgorbXNnc3RyICJjcsOpZXIgdW5lIHZhbGlkYXRpb24gdW5pcXVlIGF1IGxpZXUgZGUgZmFpcmUgdW5lIGZ1c2lvbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NiBidWlsdGluL3B1bGwuYzoxNTAKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgImVmZmVjdHVlciB1bmUgdmFsaWRhdGlvbiBzaSBsYSBmdXNpb24gcsOpdXNzaXQgKGTDqWZhdXQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU4IGJ1aWx0aW4vcHVsbC5jOjE1MworbXNnaWQgImVkaXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyIKK21zZ3N0ciAiw6lkaXRlciBsZSBtZXNzYWdlIGF2YW50IGxhIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjAKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIgorbXNnc3RyICJhdXRvcmlzZXIgbCdhdmFuY2UgcmFwaWRlIChkw6lmYXV0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MiBidWlsdGluL3B1bGwuYzoxNjAKK21zZ2lkICJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIgorbXNnc3RyICJhYmFuZG9ubmVyIHNpIGwnYXZhbmNlIHJhcGlkZSBuJ2VzdCBwYXMgcG9zc2libGUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjYgYnVpbHRpbi9wdWxsLmM6MTYzCittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICJ2w6lyaWZpZXIgcXVlIGxlIGNvbW1pdCBub21tw6kgYSB1bmUgc2lnbmF0dXJlIEdQRyB2YWxpZGUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjcgYnVpbHRpbi9ub3Rlcy5jOjc4NyBidWlsdGluL3B1bGwuYzoxNjcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIwIGJ1aWx0aW4vcmViYXNlLmM6MTU3NSBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICJzdHJhdMOpZ2llIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY4IGJ1aWx0aW4vcHVsbC5jOjE2OAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAic3RyYXTDqWdpZSBkZSBmdXNpb24gw6AgdXRpbGlzZXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjkgYnVpbHRpbi9wdWxsLmM6MTcxCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICJvcHRpb249dmFsZXVyIgorCisjOiBidWlsdGluL21lcmdlLmM6MjcwIGJ1aWx0aW4vcHVsbC5jOjE3MgorbXNnaWQgIm9wdGlvbiBmb3Igc2VsZWN0ZWQgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIm9wdGlvbiBwb3VyIGxhIHN0cmF0w6lnaWUgZGUgZnVzaW9uIHPDqWxlY3Rpb25uw6llIgorCisjOiBidWlsdGluL21lcmdlLmM6MjcyCittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICIiCisibWVzc2FnZSBkZSB2YWxpZGF0aW9uIGRlIGxhIGZ1c2lvbiAocG91ciB1bmUgZnVzaW9uIHNhbnMgYXZhbmNlIHJhcGlkZSkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzkKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiYWJhbmRvbm5lciBsYSBmdXNpb24gZW4gY291cnMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODEKK21zZ2lkICItLWFib3J0IGJ1dCBsZWF2ZSBpbmRleCBhbmQgd29ya2luZyB0cmVlIGFsb25lIgorbXNnc3RyICItLWFib3J0IG1haXMgbGFpc3NlciBsJ2luZGV4IGV0IGwnYXJicmUgZGUgdHJhdmFpbCBpbmNoYW5nw6lzIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgzCittc2dpZCAiY29udGludWUgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgImNvbnRpbnVlciBsYSBmdXNpb24gZW4gY291cnMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODUgYnVpbHRpbi9wdWxsLmM6MTc5Cittc2dpZCAiYWxsb3cgbWVyZ2luZyB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJwZXJtZXR0cmUgbGEgZnVzaW9uIGQnaGlzdG9yaXF1ZXMgc2FucyByYXBwb3J0IgorCisjOiBidWlsdGluL21lcmdlLmM6MjkxCittc2dpZCAiYnlwYXNzIHByZS1tZXJnZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgIm5lIHBhcyB1dGlsaXNlciBsZXMgY3JvY2hldHMgcHJlLW1lcmdlLWNvbW1pdCBldCBjb21taXQtbXNnIgorCisjOiBidWlsdGluL21lcmdlLmM6MzA4Cittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgImltcG9zc2libGUgZGUgbGFuY2VyIGxlIHJlbWlzYWdlLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxMworbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGR1IHJlbWlzYWdlIgorCisjOiBidWlsdGluL21lcmdlLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgInBhcyB1biBvYmpldCB2YWxpZGUgOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM0MCBidWlsdGluL21lcmdlLmM6MzU3Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAicmVhZC10cmVlIGEgw6ljaG91w6kiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozODcKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiIChyaWVuIMOgIGNvbXByZXNzZXIpIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiVmFsaWRhdGlvbiBjb21wcmVzc8OpZSAtLSBIRUFEIG5vbiBtaXNlIMOgIGpvdXJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIlBhcyBkZSBtZXNzYWdlIGRlIGZ1c2lvbiAtLSBwYXMgZGUgbWlzZSDDoCBqb3VyIGRlIEhFQURcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICInJXMnIG5lIHBvaW50ZSBwYXMgc3VyIHVuIGNvbW1pdCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBzdHJpbmc6ICVzIgorbXNnc3RyICJNYXV2YWlzZSBjaGHDrm5lIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcwOAorbXNnaWQgIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgIkltcG9zc2libGUgZGUgZ8OpcmVyIGF1dHJlIGNob3NlIHF1ZSBsYSBmdXNpb24gZGUgZGV1eCB0w6p0ZXMuIgorCisjOiBidWlsdGluL21lcmdlLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCittc2dzdHIgIk9wdGlvbnMgaW5jb25udWUgcG91ciBtZXJnZS1yZWN1cnNpdmUgOiAtWCVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgZGVwdWlzICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIgorbXNnc3RyICIiCisiUGFzIGRlIHZhbGlkYXRpb24gZGUgbGEgZnVzaW9uIDsgdXRpbGlzZXogJ2dpdCBjb21taXQnIHBvdXIgdGVybWluZXIgbGEgIgorImZ1c2lvbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwNAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCittc2dzdHIgIiIKKyJWZXVpbGxleiBlbnRyZXIgdW4gbWVzc2FnZSBkZSB2YWxpZGF0aW9uIHBvdXIgZXhwbGlxdWVyIGVuIHF1b2kgY2V0dGUgZnVzaW9uICIKKyJlc3RcbiIKKyJuw6ljZXNzYWlyZSwgc3VydG91dCBzaSBjZWxhIGZ1c2lvbm5lIHVuZSBicmFuY2hlIGFtb250IG1pc2Ugw6Agam91ciBkYW5zIHVuZSAiCisiYnJhbmNoZSBkZSBzdWpldC5cbiIKKyJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwOQorbXNnaWQgIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIlVuIG1lc3NhZ2UgdmlkZSBhYmFuZG9ubmUgbGEgdmFsaWRhdGlvbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkxlcyBsaWduZXMgY29tbWVuw6dhbnQgcGFyICclYycgc2Vyb250IGlnbm9yw6llcywgZXQgdW4gbWVzc2FnZSB2aWRlXG4iCisiYWJhbmRvbm5lIGxhIHZhbGlkYXRpb24uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NjUKK21zZ2lkICJFbXB0eSBjb21taXQgbWVzc2FnZS4iCittc2dzdHIgIk1lc3NhZ2UgZGUgdmFsaWRhdGlvbiB2aWRlLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIk1lcnZlaWxsZXV4LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iCittc2dzdHIgIiIKKyJMYSBmdXNpb24gYXV0b21hdGlxdWUgYSDDqWNob3XDqSA7IHLDqWdsZXogbGVzIGNvbmZsaXRzIGV0IHZhbGlkZXogbGUgIgorInLDqXN1bHRhdC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4MAorbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiUGFzIGRlIGJyYW5jaGUgY291cmFudGUuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTgyCittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJQYXMgZGUgYnJhbmNoZSBkaXN0YW50ZSBwb3VyIGxhIGJyYW5jaGUgY291cmFudGUuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg0Cittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJQYXMgZGUgYnJhbmNoZSBhbW9udCBwYXIgZMOpZmF1dCBkw6lmaW5pZSBwb3VyIGxhIGJyYW5jaGUgY291cmFudGUuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgIlBhcyBkZSBicmFuY2hlIGRlIHN1aXZpIHBvdXIgJXMgZGVwdWlzICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgdmFsdWUgJyVzJyBpbiBlbnZpcm9ubWVudCAnJXMnIgorbXNnc3RyICJNYXV2YWlzZSB2YWxldXIgJyVzJyBkYW5zIGwnZW52aXJvbm5lbWVudCAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSBpbiAlczogJXMiCittc2dzdHIgInBhcyBwb3NzaWJsZSBkZSBmdXNpb25uZXIgY2VjaSBkYW5zICVzwqA6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE4MworbXNnaWQgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICJwYXMgcG9zc2libGUgZGUgZnVzaW9ubmVyIGNlY2kiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjg2Cittc2dpZCAiLS1hYm9ydCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1hYm9ydCBuJ2FjY2VwdGUgcGFzIGQnYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjkwCittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICJJbCBuJ3kgYSBwYXMgZGUgZnVzaW9uIMOgIGFiYW5kb25uZXIgKE1FUkdFX0hFQUQgbWFucXVhbnQpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTkKK21zZ2lkICItLXF1aXQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tcXVpdCBuJ2FjY2VwdGUgcGFzIGQnYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzEyCittc2dpZCAiLS1jb250aW51ZSBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1jb250aW51ZSBuZSBzdXBwb3J0ZSBhdWN1biBhcmd1bWVudCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTYKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIklsIG4neSBhIHBhcyBkZSBmdXNpb24gZW4gY291cnMgKE1FUkdFX0hFQUQgbWFucXVhbnQpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzIKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiVm91cyBuJ2F2ZXogcGFzIHRlcm1pbsOpIHZvdHJlIGZ1c2lvbiAoTUVSR0VfSEVBRCBleGlzdGUpLlxuIgorIlZldWlsbGV6IHZhbGlkZXIgdm9zIG1vZGlmaWNhdGlvbnMgYXZhbnQgZGUgcG91dm9pciBmdXNpb25uZXIuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzOQorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJWb3VzIG4nYXZleiBwYXMgdGVybWluw6kgdm90cmUgcGljb3JhZ2UgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RlKS5cbiIKKyJWZXVpbGxleiB2YWxpZGVyIHZvcyBtb2RpZmljYXRpb25zIGF2YW50IGRlIHBvdXZvaXIgZnVzaW9ubmVyLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNDIKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIlZvdXMgbidhdmV6IHBhcyB0ZXJtaW7DqSB2b3RyZSBwaWNvcmFnZSAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdGUpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTYKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiVm91cyBuZSBwb3V2ZXogcGFzIGNvbWJpbmVyIC0tc3F1YXNoIGF2ZWMgLS1uby1mZi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzU4Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1jb21taXQuIgorbXNnc3RyICJWb3VzIG5lIHBvdXZleiBwYXMgY29tYmluZXIgLS1zcXVhc2ggYXZlYyAtLWNvbW1pdC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzc0Cittc2dpZCAiTm8gY29tbWl0IHNwZWNpZmllZCBhbmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm90IHNldC4iCittc2dzdHIgIiIKKyJQYXMgZGUgdmFsaWRhdGlvbiBzcMOpY2lmacOpZSBldCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBuJ2VzdCBwYXMgZMOpZmluaS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkxCittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgIkxhIHZhbGlkYXRpb24gY29tcHJlc3PDqWUgdmVycyB1bmUgdMOqdGUgdmlkZSBuJ2VzdCBwYXMgZW5jb3JlIHN1cHBvcnTDqWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkzCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIlVuZSB2YWxpZGF0aW9uIHNhbnMgYXZhbmNlIHJhcGlkZSBuJ2EgcGFzIGRlIHNlbnMgZGFucyB1bmUgdMOqdGUgdmlkZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSBwYXMgcG9zc2libGUgZGUgZnVzaW9ubmVyIGNlY2kiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDAwCittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorIlBvc3NpYmxlIGRlIGZ1c2lvbm5lciBleGFjdGVtZW50IHVuZSBzZXVsZSB2YWxpZGF0aW9uIGRhbnMgdW5lIHTDqnRlIHZpZGUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDgxCittc2dpZCAicmVmdXNpbmcgdG8gbWVyZ2UgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAicmVmdXMgZGUgZnVzaW9ubmVyIGRlcyBoaXN0b3JpcXVlcyBzYW5zIHJlbGF0aW9uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ5MAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkTDqWrDoCDDoCBqb3VyLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgIk1pc2Ugw6Agam91ciAlcy4uJXNcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iCittc2dzdHIgIkVzc2FpIGRlIGZ1c2lvbiB2cmFpbWVudCB0cml2aWFsZSBkYW5zIGwnaW5kZXguLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAiTm9uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU3NAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4gWWVlYWghIgorbXNnc3RyICJEw6lqw6Agw6Agam91ci4gT3VhaXPCoCEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTgwCittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICJQYXMgcG9zc2libGUgZCdhdmFuY2VyIHJhcGlkZW1lbnQsIGFiYW5kb24uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwMyBidWlsdGluL21lcmdlLmM6MTY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIKK21zZ3N0ciAiUmV0b3VyIGRlIGwnYXJicmUgw6AgbCdvcmlnaW5hbC4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAiRXNzYWkgZGUgbGEgc3RyYXTDqWdpZSBkZSBmdXNpb24gJXMuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIkF1Y3VuZSBzdHJhdMOpZ2llIGRlIGZ1c2lvbiBuJ2EgcHJpcyBlbiBjaGFyZ2UgbGEgZnVzaW9uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAiTGEgZnVzaW9uIGF2ZWMgbGEgc3RyYXTDqWdpZSAlcyBhIMOpY2hvdcOpLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIKK21zZ3N0ciAiVXRpbGlzYXRpb24gZGUgJXMgcG91ciBwcsOpcGFyZXIgbGEgcsOpc29sdXRpb24gw6AgbGEgbWFpbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAiIgorIkxhIGZ1c2lvbiBhdXRvbWF0aXF1ZSBhIHLDqXVzc2kgOyBzdG9wcMOpZSBhdmFudCBsYSB2YWxpZGF0aW9uIGNvbW1lIGRlbWFuZMOpXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMyCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMzCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzQKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDx2YWxpZGF0aW9uPi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzUKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDx2YWxpZGF0aW9uPiA8dmFsaWRhdGlvbj4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM2Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8csOpZsOpcmVuY2U+IFs8dmFsaWRhdGlvbj5dIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTMKK21zZ2lkICJvdXRwdXQgYWxsIGNvbW1vbiBhbmNlc3RvcnMiCittc2dzdHIgImFmZmljaGVyIHRvdXMgbGVzIGFuY8OqdHJlcyBjb21tdW5zIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTUKK21zZ2lkICJmaW5kIGFuY2VzdG9ycyBmb3IgYSBzaW5nbGUgbi13YXkgbWVyZ2UiCittc2dzdHIgInRyb3V2ZXIgbGVzIGFuY8OqdHJlcyBwb3VyIHVuZSBmdXNpb24gc2ltcGxlIMOgIG4gcG9pbnRzIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTcKK21zZ2lkICJsaXN0IHJldnMgbm90IHJlYWNoYWJsZSBmcm9tIG90aGVycyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIHLDqXZpc2lvbnMgaW5hY2Nlc3NpYmxlcyBkZXB1aXMgbGVzIGF1dHJlcyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU5Cittc2dpZCAiaXMgdGhlIGZpcnN0IG9uZSBhbmNlc3RvciBvZiB0aGUgb3RoZXI/IgorbXNnc3RyICJlc3QgbGUgcHJlbWllciBhbmPDqnRyZSBkZSBsJ2F1dHJlID8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE2MQorbXNnaWQgImZpbmQgd2hlcmUgPGNvbW1pdD4gZm9ya2VkIGZyb20gcmVmbG9nIG9mIDxyZWY+IgorbXNnc3RyICJ0cm91dmVyIG/DuSA8dmFsaWRhdGlvbj4gYSBkaXZlcmfDqSBkdSByZWZsb2cgZGUgPHLDqWbDqXJlbmNlPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6OQorbXNnaWQgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPG9wdGlvbnM+XSBbLUwgPG5hbWUxPiBbLUwgPG9yaWc+IFstTCA8bmFtZTI+XV1dIDxmaWxlMT4gIgorIjxvcmlnLWZpbGU+IDxmaWxlMj4iCittc2dzdHIgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPG9wdGlvbnM+XSBbLUwgPG5vbTE+IFstTCA8b3JpZz4gWy1MIDxub20yPl1dXSA8ZmljaGllcjE+ICIKKyI8ZmljaGllci1vcmlnPiA8ZmljaGllcjI+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNQorbXNnaWQgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgImVudm95ZXIgbGVzIHLDqXN1bHRhdHMgc3VyIGxhIHNvcnRpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzYKK21zZ2lkICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIKK21zZ3N0ciAidXRpbGlzZXIgdW5lIGZ1c2lvbiBiYXPDqWUgc3VyIGRpZmYzIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNworbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAicG91ciBsZXMgY29uZmxpdHMsIHV0aWxpc2VyIG5vdHJlIHZlcnNpb24gKG91cikiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM5Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgInBvdXIgbGVzIGNvbmZsaXRzLCB1dGlsaXNlciBsZXVyIHZlcnNpb24gKHRoZWlyKSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDEKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIgorbXNnc3RyICJwb3VyIGxlcyBjb25mbGl0cywgdXRpbGlzZXIgbCdlbnNlbWJsZSBkZXMgdmVyc2lvbnMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ0Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoaXMgbWFya2VyIHNpemUiCittc2dzdHIgInBvdXIgbGVzIGNvbmZsaXRzLCB1dGlsaXNlciBjZXR0ZSB0YWlsbGUgZGUgbWFycXVldXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ1Cittc2dpZCAiZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzIgorbXNnc3RyICJuZSBwYXMgYXZlcnRpciDDoCBwcm9wb3MgZGVzIGNvbmZsaXRzIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NworbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIKK21zZ3N0ciAiZMOpZmluaXIgbGVzIGxhYmVscyBwb3VyIGZpY2hpZXIxL2ZpY2hpZXItb3JpZy9maWNoaWVyMiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiAlcyIKK21zZ3N0ciAib3B0aW9uIGluY29ubnVlICVzIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGwnb2JqZXQgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiBJZ25vcmluZyAlcy4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiBJZ25vcmluZyAlcy4iCittc2dzdHJbMF0gImltcG9zc2libGUgZGUgZ8OpcmVyIHBsdXMgZGUgJWQgYmFzZS4gJXMgaWdub3LDqS4iCittc2dzdHJbMV0gImltcG9zc2libGUgZGUgZ8OpcmVyIHBsdXMgZGUgJWQgYmFzZXMuICVzIGlnbm9yw6kuIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjY1Cittc2dpZCAibm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBnw6lyZXIgYXV0cmUgY2hvc2UgcXVlIGxhIGZ1c2lvbiBkZSBkZXV4IHTDqnRlcy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzQgYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSByZWYgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgbGEgcsOpZsOpcmVuY2UgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXNcbiIKK21zZ3N0ciAiRnVzaW9uIGRlICVzIGF2ZWMgJXNcbiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NgorbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU0Cittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgImwnZW50csOpZSBzZSB0ZXJtaW5lIHBhciBOVUwiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU1IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI2Cittc2dpZCAiYWxsb3cgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICJhdXRvcmlzZXIgbGVzIG9iamV0cyBtYW5xdWFudHMiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU2Cittc2dpZCAiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIgorbXNnc3RyICJhdXRvcmlzZXIgbGEgY3LDqWF0aW9uIGRlIHBsdXMgZCd1biBhcmJyZSIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6OQorbXNnaWQgIiIKKyJnaXQgbXVsdGktcGFjay1pbmRleCBbPG9wdGlvbnM+XSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC0iCisic2l6ZT08c2l6ZT4pIgorbXNnc3RyICIiCisiZ2l0IG11bHRpLXBhY2staW5kZXggWzxvcHRpb25zPl0gKHdyaXRlfHZlcmlmeXxleHBpcmV8cmVwYWNrIC0tYmF0Y2gtIgorInNpemU9PHRhaWxsZT4pIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNgorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiCittc2dzdHIgIiIKKyJyw6lwZXJ0b2lyZSBvYmpldCBjb250ZW5hbnQgdW4gZW5zZW1ibGUgZGUgcGFpcmVzIGRlIGZpY2hpZXJzIHBhcXVldCBldCAiCisiZCdpbmRleCBkZSBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI5Cittc2dpZCAiIgorImR1cmluZyByZXBhY2ssIGNvbGxlY3QgcGFjay1maWxlcyBvZiBzbWFsbGVyIHNpemUgaW50byBhIGJhdGNoIHRoYXQgaXMgIgorImxhcmdlciB0aGFuIHRoaXMgc2l6ZSIKK21zZ3N0ciAiIgorInBlbmRhbnQgbGUgcmVwYXF1ZXRhZ2UsIGNvbGxlY3RlciBsZXMgZmljaGllcnMgcGFxdWV0IGRlIHBsdXMgcGV0aXRlIHRhaWxsZSAiCisiZGFucyB1biBsb3QgcGx1cyBncmFuZCBxdWUgY2V0dGUgdGFpbGxlIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo1MCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjY3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICJ0cm9wIGQnYXJndW1lbnRzIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo2MAorbXNnaWQgIi0tYmF0Y2gtc2l6ZSBvcHRpb24gaXMgb25seSBmb3IgJ3JlcGFjaycgc3ViY29tbWFuZCIKK21zZ3N0ciAibCdvcHRpb24gLS1iYXRjaC1zaXplIG5lIHNlcnQgcXVlIHBvdXIgbGEgc291cy1jb21tYW5kZSAncmVwYWNrJyIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJzb3VzLWNvbW1hbmRlIG5vbiByZWNvbm51ZSA6ICVzIgorCisjOiBidWlsdGluL212LmM6MTgKK21zZ2lkICJnaXQgbXYgWzxvcHRpb25zPl0gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIKK21zZ3N0ciAiZ2l0IG12IFs8b3B0aW9ucz5dIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCisKKyM6IGJ1aWx0aW4vbXYuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgIkxlIHLDqXBlcnRvaXJlICVzIGVzdCBkYW5zIGwnaW5kZXggZXQgcG91cnRhbnQgYXVjdW4gc291cy1tb2R1bGUgPyIKKworIzogYnVpbHRpbi9tdi5jOjg1Cittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJWZXVpbGxleiBpbmRleGVyIHZvcyBtb2RpZmljYXRpb25zIGRlIC5naXRtb2R1bGVzIG91IGxlcyByZW1pc2VyIHBvdXIgIgorImNvbnRpbnVlciIKKworIzogYnVpbHRpbi9tdi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICIlLipzIGVzdCBkYW5zIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjUKK21zZ2lkICJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgImZvcmNlciBsZSBkw6lwbGFjZW1lbnQvcmVub21tYWdlIG3Dqm1lIHNpIGxhIGNpYmxlIGV4aXN0ZSIKKworIzogYnVpbHRpbi9tdi5jOjEyNworbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICJzYXV0ZXIgbGVzIGVycmV1cnMgZGUgZMOpcGxhY2VtZW50L3Jlbm9tbWFnZSIKKworIzogYnVpbHRpbi9tdi5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAibGEgZGVzdGluYXRpb24gJyVzJyBuJ2VzdCBwYXMgdW4gcsOpcGVydG9pcmUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICJWw6lyaWZpY2F0aW9uIGR1IHJlbm9tbWFnZSBkZSAnJXMnIGVuICclcydcbiIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgIm1hdXZhaXNlIHNvdXJjZSIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpcGxhY2VyIHVuIHLDqXBlcnRvaXJlIGRhbnMgbHVpLW3Dqm1lIgorCisjOiBidWlsdGluL212LmM6MTkwCittc2dpZCAiY2Fubm90IG1vdmUgZGlyZWN0b3J5IG92ZXIgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBkw6lwbGFjZXIgdW4gcsOpcGVydG9pcmUgc3VyIHVuIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTkKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICJsZSByw6lwZXJ0b2lyZSBzb3VyY2UgZXN0IHZpZGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjQKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICJwYXMgc291cyBsZSBjb250csO0bGUgZGUgdmVyc2lvbiIKKworIzogYnVpbHRpbi9tdi5jOjIyNworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAibGEgZGVzdGluYXRpb24gZXhpc3RlIgorCisjOiBidWlsdGluL212LmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgIsOpY3Jhc2VtZW50IGRlICclcyciCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzgKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnw6ljcmFzZXIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDEKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgIm11bHRpcGxlcyBzb3VyY2VzIHBvdXIgbGEgbcOqbWUgZGVzdGluYXRpb24iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDMKK21zZ2lkICJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImxlIHLDqXBlcnRvaXJlIGRlIGRlc3RpbmF0aW9uIG4nZXhpc3RlIHBhcyIKKworIzogYnVpbHRpbi9tdi5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAiUmVub21tYWdlIGRlICVzIGVuICVzXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzcgYnVpbHRpbi9yZW1vdGUuYzo3ODEgYnVpbHRpbi9yZXBhY2suYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImxlIHJlbm9tbWFnZSBkZSAnJXMnIGEgw6ljaG91w6kiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSA8dmFsaWRhdGlvbj4uLi4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjYKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1hbGwiCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NworbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLXN0ZGluIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUyNAorbXNnaWQgInByaW50IG9ubHkgbmFtZXMgKG5vIFNIQS0xKSIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyBub21zIChwYXMgZGUgU0hBLTEpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI1Cittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICJ1dGlsaXNlciBzZXVsZW1lbnQgbGVzIMOpdGlxdWV0dGVzIHBvdXIgbm9tbWVyIGxlcyB2YWxpZGF0aW9ucyIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUyNworbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJ1dGlsaXNlciBzZXVsZW1lbnQgbGVzIHLDqWbDqXJlbmNlcyBjb3JyZXNwb25kYW50IMOgIDxtb3RpZj4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjkKK21zZ2lkICJpZ25vcmUgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgImlnbm9yZXIgbGVzIHLDqWbDqXJlbmNlcyBjb3JyZXNwb25kYW50IMOgIDxtb3RpZj4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzEKK21zZ2lkICJsaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzIgorbXNnc3RyICIiCisiYWZmaWNoZXIgdG91dGVzIGxlcyB2YWxpZGF0aW9ucyBhY2Nlc3NpYmxlcyBkZXB1aXMgdG91dGVzIGxlcyByw6lmw6lyZW5jZXMiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzIKK21zZ2lkICJyZWFkIGZyb20gc3RkaW4iCittc2dzdHIgImxpcmUgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUzMworbXNnaWQgImFsbG93IHRvIHByaW50IGB1bmRlZmluZWRgIG5hbWVzIChkZWZhdWx0KSIKK21zZ3N0ciAiYXV0b3Jpc2VyIGwnYWZmaWNoYWdlIGRlcyBub21zIGBub24gZMOpZmluaXNgIChwYXIgZMOpZmF1dCkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzkKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAiZMOpcsOpZsOpcmVuY2VyIGxlcyDDqXRpcXVldHRlcyBlbiBlbnRyw6llICh1c2FnZSBpbnRlcm5lKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHLDqWbDqXJlbmNlcy1ub3Rlcz5dIFtsaXN0IFs8b2JqZWN0Pl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjkKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiAiCisifCAoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxyw6lmw6lyZW5jZXMtbm90ZXM+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtZXNzYWdlPiAiCisifCAtRiA8ZmljaGllcj4gfCAoLWMgfCAtQykgPG9iamV0Pl0gWzxvYmpldD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzAKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHLDqWbDqXJlbmNlcy1ub3Rlcz5dIGNvcHkgWy1mXSA8ZGVwdWlzLW9iamV0PiA8dmVycy1vYmpldD4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICIKKyIoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxyw6lmw6lyZW5jZXMtbm90ZXM+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bWVzc2FnZT4gfCAtIgorIkYgPGZpY2hpZXI+IHwgKC1jIHwgLUMpIDxvYmpldD5dIFs8b2JqZXQ+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8csOpZsOpcmVuY2VzLW5vdGVzPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmpldD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzMKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHLDqWbDqXJlbmNlcy1ub3Rlcz5dIHNob3cgWzxvYmpldD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHLDqWbDqXJlbmNlcy1ub3Rlcz5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0w6lnaWU+IF0gIgorIjxyw6lmw6lyZW5jZXMtbm90ZXM+IgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHLDqWbDqXJlbmNlcy1ub3Rlcz5dIHJlbW92ZSBbPG9iamV0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHBydW5lIFstbl0gWy12XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8csOpZsOpcmVuY2Utbm90ZXM+XSBwcnVuZSBbLW5dIFstdl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHLDqWbDqXJlbmNlcy1ub3Rlcz5dIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NAorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZXQ+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OQorbXNnaWQgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFkZCBbPG9wdGlvbnM+XSBbPG9iamV0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NAorbXNnaWQgImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxkZXB1aXMtb2JqZXQ+IDx2ZXJzLW9iamV0PiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxkZXB1aXMtb2JqZXQ+IDx2ZXJzLW9iamV0Pl0uLi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MAorbXNnaWQgImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamV0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NQorbXNnaWQgImdpdCBub3RlcyBlZGl0IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBlZGl0IFs8b2JqZXQ+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwCittc2dpZCAiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHNob3cgWzxvYmpldD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzLXJlZj4iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSBbPG9wdGlvbnM+XSA8csOpZsOpcmVuY2VzLW5vdGVzPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHRpb25zPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgyCittc2dpZCAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZXQ+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3Cittc2dpZCAiZ2l0IG5vdGVzIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MgorbXNnaWQgImdpdCBub3RlcyBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3Cittc2dpZCAiV3JpdGUvZWRpdCB0aGUgbm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgb2JqZWN0OiIKK21zZ3N0ciAiw4ljcmlyZS/DqWRpdGVyIGxlcyBub3RlcyBwb3VyIGwnb2JqZXQgc3VpdmFudMKgOiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBkw6ltYXJyZXIgJ3Nob3cnIHBvdXIgbCdvYmpldCAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ3Nob3cnIG91dHB1dCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxhIHNvcnRpZSBkZSAnc2hvdyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGZpbmlyICdzaG93JyBwb3VyIGwnb2JqZXQgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE5NworbXNnaWQgInBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAidmV1aWxsZXogZm91cm5pciBsZSBjb250ZW51IGRlIGxhIG5vdGUgZW4gdXRpbGlzYW50IGwnb3B0aW9uIC1tIG91IC1GIgorCisjOiBidWlsdGluL25vdGVzLmM6MjA2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsJ29iamV0IG5vdGUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG5vdGUgY29udGVudHMgaGF2ZSBiZWVuIGxlZnQgaW4gJXMiCittc2dzdHIgImxlIGNvbnRlbnUgZGUgbGEgbm90ZSBhIMOpdMOpIGxhaXNzw6kgZGFucyAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI0MiBidWlsdGluL3RhZy5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgb3UgbGlyZSAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYzIGJ1aWx0aW4vbm90ZXMuYzozMTMgYnVpbHRpbi9ub3Rlcy5jOjMxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjM4MyBidWlsdGluL25vdGVzLmM6NDM4IGJ1aWx0aW4vbm90ZXMuYzo1MjYKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzEgYnVpbHRpbi9ub3Rlcy5jOjYxMCBidWlsdGluL25vdGVzLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSAnJXMnIGNvbW1lIHVuZSByw6lmw6lyZW5jZSB2YWxpZGUuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGwnb2JqZXQgJyVzJy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgbm90ZSBkYXRhIGZyb20gbm9uLWJsb2Igb2JqZWN0ICclcycuIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGVzIGluZm9ybWF0aW9ucyBkZSBub3RlIGQndW4gb2JqZXQgbm9uLWJsb2IgJyVzJy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICJsaWduZSBlbiBlbnRyw6llIG1hbGZvcm3DqWUgOiAnJXMnLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb3BpZXIgbGVzIG5vdGVzIGRlICclcycgdmVycyAnJXMnIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGZpcnN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBnaXQKKyMuIG5vdGVzIGNvbW1hbmQ6ICdhZGQnLCAnbWVyZ2UnLCAncmVtb3ZlJywgZXRjLgorIy4KKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gJXMgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICJSZWZ1cyBkZSBmYWlyZSAlcyBzdXIgZGVzIG5vdGVzIGRhbnMgJXMgKGhvcnMgZGUgcmVmcy9ub3Rlcy8pIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzc2IGJ1aWx0aW4vbm90ZXMuYzo0MzEgYnVpbHRpbi9ub3Rlcy5jOjUwOQorIzogYnVpbHRpbi9ub3Rlcy5jOjUyMSBidWlsdGluL25vdGVzLmM6NTk4IGJ1aWx0aW4vbm90ZXMuYzo2NjUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTUgYnVpbHRpbi9ub3Rlcy5jOjk2MyBidWlsdGluL25vdGVzLmM6OTg1Cittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAidHJvcCBkZSBwYXJhbcOodHJlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4OSBidWlsdGluL25vdGVzLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgInBhcyBkZSBub3RlIHRyb3V2w6llIHBvdXIgbCdvYmpldCAlcy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTAgYnVpbHRpbi9ub3Rlcy5jOjU3NgorbXNnaWQgIm5vdGUgY29udGVudHMgYXMgYSBzdHJpbmciCittc2dzdHIgImNvbnRlbnUgZGUgbGEgbm90ZSBzb3VzIGZvcm1lIGRlIGNoYcOubmUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTMgYnVpbHRpbi9ub3Rlcy5jOjU3OQorbXNnaWQgIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIgorbXNnc3RyICJjb250ZW51IGRlIGxhIG5vdGUgZGFucyB1biBmaWNoaWVyIgorCisjOiBidWlsdGluL25vdGVzLmM6NDE2IGJ1aWx0aW4vbm90ZXMuYzo1ODIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgInLDqXV0aWxpc2VyIGV0IMOpZGl0ZXIgbCdvYmpldCBkZSBub3RlIHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTkgYnVpbHRpbi9ub3Rlcy5jOjU4NQorbXNnaWQgInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAicsOpdXRpbGlzZXIgbCdvYmpldCBkZSBub3RlIHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MjIgYnVpbHRpbi9ub3Rlcy5jOjU4OAorbXNnaWQgImFsbG93IHN0b3JpbmcgZW1wdHkgbm90ZSIKK21zZ3N0ciAicGVybWV0dHJlIGRlIHN0b2NrZXIgdW5lIG5vdGUgdmlkZSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyMyBidWlsdGluL25vdGVzLmM6NDk2Cittc2dpZCAicmVwbGFjZSBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAicmVtcGxhY2VyIGxlcyBub3RlcyBleGlzdGFudGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkJ2Fqb3V0ZXIgZGVzIG5vdGVzLiBEZXMgbm90ZXMgb250IMOpdMOpIHRyb3V2w6llcyBwb3VyIGwnb2JqZXQgJXMuICIKKyJVdGlsaXNleiAnLWYnIHBvdXIgw6ljcmFzZXIgbGVzIG5vdGVzIGV4aXN0YW50ZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjMgYnVpbHRpbi9ub3Rlcy5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIsOJY3Jhc2VtZW50IGRlcyBub3RlcyBleGlzdGFudGVzIHBvdXIgbCdvYmpldCAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDc1IGJ1aWx0aW4vbm90ZXMuYzo2MzcgYnVpbHRpbi9ub3Rlcy5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiU3VwcHJlc3Npb24gZGUgbGEgbm90ZSBwb3VyIGwnb2JqZXQgJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5NworbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICJsaXJlIGxlcyBvYmpldHMgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5OQorbXNnaWQgImxvYWQgcmV3cml0aW5nIGNvbmZpZyBmb3IgPGNvbW1hbmQ+IChpbXBsaWVzIC0tc3RkaW4pIgorbXNnc3RyICIiCisiY2hhcmdlciBsYSBjb25maWd1cmF0aW9uIGRlIHLDqcOpY3JpdHVyZSBwb3VyIDxjb21tYW5kZT4gKGltcGxpcXVlIC0tc3RkaW4pIgorCisjOiBidWlsdGluL25vdGVzLmM6NTE3Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICJwYXMgYXNzZXogZGUgcGFyYW3DqHRyZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSBjb3BpZXIgZGVzIG5vdGVzLiBEZXMgbm90ZXMgb250IMOpdMOpIHRyb3V2w6llcyBwb3VyIGwnb2JqZXQgJXMuICIKKyJVdGlsaXNleiAnLWYnIHBvdXIgw6ljcmFzZXIgbGVzIG5vdGVzIGV4aXN0YW50ZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgIm5vdGVzIG1hbnF1YW50ZXMgc3VyIGwnb2JqZXQgc291cmNlICVzLiBJbXBvc3NpYmxlIGRlIGNvcGllci4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtbS8tRi8tYy8tQyBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGZvciB0aGUgJ2VkaXQnIHN1YmNvbW1hbmQuXG4iCisiUGxlYXNlIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW5zdGVhZC5cbiIKK21zZ3N0ciAiIgorIkxlcyBvcHRpb25zIC1tLy1GLy1jLy1DIHNvbnQgb2Jzb2zDqHRlcyBwb3VyIGxhIHNvdXMtY29tbWFuZGUgJ2VkaXQnLlxuIgorIlZldWlsbGV6IHV0aWxpc2VyICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyDDoCBsYSBwbGFjZS5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY5OAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiCittc2dzdHIgIsOpY2hlYyBkZSBsYSBzdXBwcmVzc2lvbiBkZSBsYSByw6lmw6lyZW5jZSBOT1RFU19NRVJHRV9QQVJUSUFMIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAwCittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgc3VwcHJlc3Npb24gZGUgbGEgcsOpZsOpcmVuY2UgTk9URVNfTUVSR0VfUkVGIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAyCittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnZ2l0IG5vdGVzIG1lcmdlJyB3b3JrdHJlZSIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIHN1cHByZXNzaW9uIGRlIGxhIGNvcGllIGRlIHRyYXZhaWwgJ2dpdCBub3RlcyBtZXJnZSciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjIKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIGxlY3R1cmUgZGUgbGEgcsOpZsOpcmVuY2UgTk9URVNfTUVSR0VfUEFSVElBTCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyNAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgY29tbWl0IGRlIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgY29tbWl0IGRlIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzM5Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgcsOpc29sdXRpb24gZGUgTk9URVNfTUVSR0VfUkVGIgorCisjOiBidWlsdGluL25vdGVzLmM6NzQyCittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplIG5vdGVzIG1lcmdlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGZpbmFsaXNlciBsYSBmdXNpb24gZGUgbm90ZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub3RlcyBtZXJnZSBzdHJhdGVneSAlcyIKK21zZ3N0ciAic3RyYXTDqWdpZSBkZSBmdXNpb24gZGUgbm90ZXMgaW5jb25udWUgJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODQKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIk9wdGlvbnMgZ8OpbsOpcmFsZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODYKK21zZ2lkICJNZXJnZSBvcHRpb25zIgorbXNnc3RyICJPcHRpb25zIGRlIGZ1c2lvbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4OAorbXNnaWQgIiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCittc2dzdHIgIiIKKyJyw6lzb3VkcmUgbGVzIGNvbmZsaXRzIGRlIG5vdGVzIGVuIHV0aWxpc2FudCBsYSBzdHJhdMOpZ2llIGRvbm7DqWUgKG1hbnVhbC9vdXJzLyIKKyJ0aGVpcnMvdW5pb24vY2F0X3NvcnRfdW5pcSkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTAKK21zZ2lkICJDb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICJWYWxpZGF0aW9uIGRlcyBub3RlcyBub24gZnVzaW9ubsOpZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTIKK21zZ2lkICJmaW5hbGl6ZSBub3RlcyBtZXJnZSBieSBjb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICJmaW5hbGlzZXIgbGEgZnVzaW9uIGRlIG5vdGVzIGVuIHZhbGlkYW50IGxlcyBub3RlcyBub24gZnVzaW9ubsOpZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTQKK21zZ2lkICJBYm9ydGluZyBub3RlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICJBYmFuZG9uIGRlIGxhIHLDqXNvbHV0aW9uIGRlIGZ1c2lvbiBkZXMgbm90ZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTYKK21zZ2lkICJhYm9ydCBub3RlcyBtZXJnZSIKK21zZ3N0ciAiYWJhbmRvbm5lciBsYSBmdXNpb24gZGUgbm90ZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MDcKK21zZ2lkICJjYW5ub3QgbWl4IC0tY29tbWl0LCAtLWFib3J0IG9yIC1zLy0tc3RyYXRlZ3kiCittc2dzdHIgIi0tY29tbWl0LCAtLWFib3J0IGV0IC1zLy0tc3RyYXRlZ3kgc29udCBtdXR1ZWxsZW1lbnQgaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgxMgorbXNnaWQgIm11c3Qgc3BlY2lmeSBhIG5vdGVzIHJlZiB0byBtZXJnZSIKK21zZ3N0ciAidm91cyBkZXZleiBzcMOpY2lmaWVyIHVuZSByw6lmw6lyZW5jZSBkZSBub3RlcyDDoCBmdXNpb25uZXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAtcy8tLXN0cmF0ZWd5OiAlcyIKK21zZ3N0ciAiLXMvLS1zdHJhdGVneSBpbmNvbm51wqA6ICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgImEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICJ1bmUgZnVzaW9uIGRlIG5vdGVzIGRhbnMgJXMgZXN0IGTDqWrDoCBlbiBjb3VycyBhdmVjICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdG9yZSBsaW5rIHRvIGN1cnJlbnQgbm90ZXMgcmVmICglcykiCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIHN0b2NrZXIgbGUgbGllbiB2ZXJzIGxhIHLDqWbDqXJlbmNlIGFjdHVlbGxlIGF1eCBub3RlcyAoJXMpIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdXRvbWF0aWMgbm90ZXMgbWVyZ2UgZmFpbGVkLiBGaXggY29uZmxpY3RzIGluICVzIGFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICIKKyInZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0Jywgb3IgYWJvcnQgdGhlIG1lcmdlIHdpdGggJ2dpdCBub3RlcyBtZXJnZSAtLSIKKyJhYm9ydCcuXG4iCittc2dzdHIgIiIKKyJMYSBmdXNpb24gYXV0b21hdGlxdWUgZGVzIG5vdGVzIGEgw6ljaG91w6kuIENvcnJpZ2V6IGxlcyBjb25mbGl0cyBkYW5zICVzIGV0ICIKKyJ2YWxpZGV6IGxlIHLDqXN1bHRhdCBhdmVjICdnaXQgbm90ZXMgbWVyZ2VzIC0tY29tbWl0Jywgb3UgYWJhbmRvbm5leiBsYSAiCisiZnVzaW9uIGF2ZWMgJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0Jy5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5NyBidWlsdGluL3RhZy5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgJyVzJyBjb21tZSB1bmUgcsOpZsOpcmVuY2UgdmFsaWRlLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAiTCdvYmpldCAlcyBuJ2EgcGFzIGRlIG5vdGVcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxMgorbXNnaWQgImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIKK21zZ3N0ciAiIgorImxhIHRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuZSBub3RlIG5vbiBleGlzdGFudGUgbidlc3QgcGFzIHVuZSBlcnJldXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MTUKK21zZ2lkICJyZWFkIG9iamVjdCBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGlyZSBsZXMgbm9tcyBkJ29iamV0IGRlcHVpcyBsJ2VudHLDqWUgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTQgYnVpbHRpbi9wcnVuZS5jOjEzMCBidWlsdGluL3dvcmt0cmVlLmM6MTY0Cittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICJuZSBwYXMgc3VwcHJpbWVyLCBhZmZpY2hlciBzZXVsZW1lbnQiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTUKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG5vdGVzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgbm90ZXMgw6lsaW1pbsOpZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTgKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgInLDqWbDqXJlbmNlcy1ub3RlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OQorbXNnaWQgInVzZSBub3RlcyBmcm9tIDxub3Rlcy1yZWY+IgorbXNnc3RyICJ1dGlsaXNlciBsZXMgbm90ZXMgZGVwdWlzIDxyw6lmw6lyZW5jZXMtbm90ZXM+IgorCisjOiBidWlsdGluL25vdGVzLmM6MTAzNCBidWlsdGluL3N0YXNoLmM6MTY0MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJzb3VzLWNvbW1hbmRlIGluY29ubnVlIDogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTIKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+Li4uXSBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgW29wdGlvbnMuLi5dIFs8IDxsaXN0ZS1yw6lmw6lyZW5jZXM+IHwgPCA8bGlzdGUtIgorIm9iamV0cz5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUzCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIFtvcHRpb25zLi4uXSBiYXNlLW5hbWUgWzwgPGxpc3RlLXLDqWbDqXJlbmNlcz4gfCA8IDxsaXN0ZS0iCisib2JqZXRzPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrZWQgb2JqZWN0IENSQyBmb3IgJXMiCittc2dzdHIgIm1hdXZhaXMgQ1JDIGQnb2JqZXQgZW1wYXF1ZXTDqSBwb3VyICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhY2tlZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICJvYmpldCBlbXBhcXVldMOpIGNvcnJvbXB1IHBvdXIgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBkZWx0YSBkZXRlY3RlZCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICJkZWx0YSByw6ljdXJzaWYgZMOpdGVjdMOpIHBvdXIgbCdvYmpldCAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAib3JkZXJlZCAldSBvYmplY3RzLCBleHBlY3RlZCAlPFBSSXUzMj4iCittc2dzdHIgIiV1IG9iamV0cyBjb21tYW5kw6lzLCAlPFBSSXUzMj4gYXR0ZW5kdXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTcyCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBwYWNrcyBhcmUgc3BsaXQgZHVlIHRvIHBhY2sucGFja1NpemVMaW1pdCIKK21zZ3N0ciAiIgorImTDqXNhY3RpdmF0aW9uIGRlIGwnw6ljcml0dXJlIGVuIGJpdG1hcCwgbGVzIGZpY2hpZXJzIHBhcXVldHMgc29udCBzY2luZMOpcyDDoCAiCisiY2F1c2UgZGUgcGFjay5wYWNrU2l6ZUxpbWl0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk4NQorbXNnaWQgIldyaXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiw4ljcml0dXJlIGRlcyBvYmpldHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTA0NiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICLDqWNoZWMgZHUgc3RhdCBkZSAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb3RlICU8UFJJdTMyPiBvYmplY3RzIHdoaWxlIGV4cGVjdGluZyAlPFBSSXUzMj4iCittc2dzdHIgIiU8UFJJdTMyPiBvYmpldHMgw6ljcml0cywgJTxQUkl1MzI+IGF0dGVuZHVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEyOTcKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIGFzIHNvbWUgb2JqZWN0cyBhcmUgbm90IGJlaW5nIHBhY2tlZCIKK21zZ3N0ciAiIgorImTDqXNhY3RpdmF0aW9uIGRlIGwnw6ljcml0dXJlIGVuIGJpdG1hcCBjYXIgY2VydGFpbnMgb2JqZXRzIG5lIHNvbnQgcGFzICIKKyJjb21wcmVzc8OpcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG92ZXJmbG93IGluIHBhY2sgZm9yICVzIgorbXNnc3RyICJkw6lwYXNzZW1lbnQgZGUgZMOpY2FsYWdlIGRlIGJhc2UgZGUgZGVsdGEgcG91ciAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG91dCBvZiBib3VuZCBmb3IgJXMiCittc2dzdHIgImTDqWNhbGFnZSBkZSBiYXNlIGRlIGRlbHRhIGVzdCBob3JzIGxpbWl0ZSBwb3VyICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwMDQKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICJEw6ljb21wdGUgZGVzIG9iamV0cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3QgaGVhZGVyIG9mICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdlbnTDqnRlIGQnb2JqZXQgZGUgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjIxOSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyMzUKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgImwnb2JqZXQgJXMgbmUgcGV1dCDDqnRyZSBsdSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjIyIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGggKCU8UFJJdU1BWD4gdnMgJTxQUkl1TUFYPikiCittc2dzdHIgIiIKKyJvYmpldCAlcyBsb25ndWV1ciBkZSBsJ29iamV0IGluY29uc2lzdGFudGUgKCU8UFJJdU1BWD4gY29udHJlICU8UFJJdU1BWD4pIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyNTkKK21zZ2lkICJzdWJvcHRpbWFsIHBhY2sgLSBvdXQgb2YgbWVtb3J5IgorbXNnc3RyICJwYXF1ZXQgc291cy1vcHRpbWFsIC0gbcOpbW9pcmUgaW5zdWZmaXNhbnRlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsdGEgY29tcHJlc3Npb24gdXNpbmcgdXAgdG8gJWQgdGhyZWFkcyIKK21zZ3N0ciAiQ29tcHJlc3Npb24gcGFyIGRlbHRhIGVuIHV0aWxpc2FudCBqdXNxdSfDoCAlZCBmaWxzIGQnZXjDqWN1dGlvbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYWNrIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGFnICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnZW1wYXF1ZXRlciBsZXMgb2JqZXRzIGpvaWduYWJsZXMgZGVwdWlzIGwnw6l0aXF1ZXR0ZSAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODAxCittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiQ29tcHJlc3Npb24gZGVzIG9iamV0cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODA3Cittc2dpZCAiaW5jb25zaXN0ZW5jeSB3aXRoIGRlbHRhIGNvdW50IgorbXNnc3RyICJpbmNvbnNpc3RhbmNlIGRhbnMgbGUgY29tcHRlIGRlIGRlbHRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIGVkZ2Ugb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCittc2dzdHIgIiIKKyJJRCBkJ29iamV0IGRlIGJvcmQgYXR0ZW5kdSwgcmXDp3UgZGVzIGRvbm7DqWVzIGlsbGlzaWJsZXPCoDpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorIklEIGQnb2JqZXQgYXR0ZW5kdSwgcmXDp3UgZGVzIGRvbm7DqWVzIGlsbGlzaWJsZXPCoDpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTkyCittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICJ2YWxldXIgaW52YWxpZGUgcG91ciAtLW1pc3NpbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA1MSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTkKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyIGwnaW5kZXggZGUgcGFxdWV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0IGF0ICVzIGNvdWxkIG5vdCBiZSBleGFtaW5lZCIKK21zZ3N0ciAibCdvYmpldCBsaWJyZSDDoCAlcyBuJ2EgcGFzIHB1IMOqdHJlIGV4YW1pbsOpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNjcKK21zZ2lkICJ1bmFibGUgdG8gZm9yY2UgbG9vc2Ugb2JqZWN0IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGZvcmNlciBsJ29iamV0IGxpYnJlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmV2ICclcyciCittc2dzdHIgIiclcycgbidlc3QgcGFzIHVuZSByw6l2aXNpb24iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gJyVzJyIKK21zZ3N0ciAibWF1dmFpc2UgcsOpdmlzaW9uICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4OAorbXNnaWQgInVuYWJsZSB0byBhZGQgcmVjZW50IG9iamVjdHMiCittc2dzdHIgImltcG9zc2libGUgZCdham91dGVyIGxlcyBvYmpldHMgcsOpY2VudHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIgorbXNnc3RyICJ2ZXJzaW9uIGQnaW5kZXggbm9uIHN1cHBvcnTDqWUgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICJtYXV2YWlzZSB2ZXJzaW9uIGQnaW5kZXggJyVzJyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzgzCittc2dpZCAiPHZlcnNpb24+Wyw8b2Zmc2V0Pl0iCittc2dzdHIgIjx2ZXJzaW9uPlssPGTDqWNhbGFnZT5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODQKK21zZ2lkICJ3cml0ZSB0aGUgcGFjayBpbmRleCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgaWR4IGZvcm1hdCB2ZXJzaW9uIgorbXNnc3RyICIiCisiw6ljcmlyZSBsZSBmaWNoaWVyIGQnaW5kZXggZHUgcGFxdWV0IGRhbnMgbGUgZm9ybWF0IGQnaW5kZXggZGUgdmVyc2lvbiAiCisic3DDqWNpZmnDqSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg3Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAidGFpbGxlIG1heGltdW0gZGUgY2hhcXVlIGZpY2hpZXIgcGFxdWV0IGVuIHNvcnRpZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg5Cittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICJpZ25vcmVyIGxlcyBvYmpldHMgZW1wcnVudMOpcyDDoCB1biBhdXRyZSBtYWdhc2luIGQnb2JqZXRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTEKK21zZ2lkICJpZ25vcmUgcGFja2VkIG9iamVjdHMiCittc2dzdHIgImlnbm9yZXIgbGVzIG9iamV0cyBlbXBhcXVldMOpcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzkzCittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgb2JqZWN0cyIKK21zZ3N0ciAibGltaXRlciBsYSBmZW7DqnRyZSBkJ2VtcGFxdWV0YWdlIHBhciBvYmpldHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5NQorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgIiIKKyJsaW1pdGVyIGxhIGZlbsOqdHJlIGQnZW1wYXF1ZXRhZ2UgcGFyIG3DqW1vaXJlIGVuIHBsdXMgZGUgbGEgbGltaXRlIGQnb2JqZXRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTcKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAiIgorImxvbmd1ZXVyIG1heGltdW0gZGUgbGEgY2hhw65uZSBkZSBkZWx0YSBhdXRvcmlzw6llIGRhbnMgbGUgcGFxdWV0IHLDqXN1bHRhbnQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5OQorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAicsOpdXRpbGlzZXIgbGVzIGRlbHRhcyBleGlzdGFudHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwMQorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgInLDqXV0aWxpc2VyIGxlcyBvYmpldHMgZXhpc3RhbnRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDMKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgInV0aWxpc2VyIGxlcyBvYmpldHMgT0ZTX0RFTFRBIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDUKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICIiCisidXRpbGlzZXIgZGVzIGZpbHMgbG9ycyBkZSBsYSByZWNoZXJjaGUgcG91ciB1bmUgbWVpbGxldXJlIGNvcnJlc3BvbmRhbmNlIGRlcyAiCisiZGVsdGFzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDcKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICJuZSBwYXMgY3LDqWVyIHVuIHBhcXVldCB2aWRlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDkKK21zZ2lkICJyZWFkIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsaXJlIGxlcyBwYXJhbcOodHJlcyBkZSByw6l2aXNpb24gZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDExCittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgImxpbWl0ZXIgbGVzIG9iamV0cyDDoCBjZXV4IHF1aSBuZSBzb250IHBhcyBlbmNvcmUgZW1wYXF1ZXTDqXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQxNAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWFjaGFibGUgZnJvbSBhbnkgcmVmZXJlbmNlIgorbXNnc3RyICJpbmNsdXJlIGxlcyBvYmpldHMgYWNjZXNzaWJsZXMgZGVwdWlzIHRvdXRlIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiCittc2dzdHIgImluY2x1cmUgbGVzIG9iamV0cyByw6lmw6lyZW5jw6lzIHBhciBsZXMgw6lsw6ltZW50cyBkZSByZWZsb2ciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgImluY2x1cmUgbGVzIG9iamV0cyByw6lmw6lyZW5jw6lzIHBhciBsJ2luZGV4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjMKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgImFmZmljaGVyIGwnZW1wYXF1ZXRhZ2Ugc3VyIGxhIHNvcnRpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI1Cittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICJpbmNsdXJlIGxlcyBvYmpldHMgZCfDqXRpcXVldHRlcyBxdWkgcsOpZsOocmVudCDDoCBkZXMgb2JqZXRzIMOgIGVtcGFxdWV0ZXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyNworbXNnaWQgImtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiZ2FyZGVyIGxlcyBvYmpldHMgaW5hY2Nlc3NpYmxlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI5Cittc2dpZCAicGFjayBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJlbXBhcXVldGVyIGxlcyBvYmpldHMgaW5hY2Nlc3NpYmxlcyBkw6l0YWNow6lzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzEKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZMOpcGFxdWV0ZXIgbGVzIG9iamV0cyBpbmFjY2Vzc2libGVzIHBsdXMgcsOpY2VudHMgcXVlIDxoZXVyZT4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzNAorbXNnaWQgInVzZSB0aGUgc3BhcnNlIHJlYWNoYWJpbGl0eSBhbGdvcml0aG0iCittc2dzdHIgInV0aWxpc2VyIGwnYWxnb3JpdGhtZSBkZSBqb2lnbmFiaWxpdMOpIGNyZXVzZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDM2Cittc2dpZCAiY3JlYXRlIHRoaW4gcGFja3MiCittc2dzdHIgImNyw6llciBkZXMgcGFxdWV0cyBsw6lnZXJzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzgKK21zZ2lkICJjcmVhdGUgcGFja3Mgc3VpdGFibGUgZm9yIHNoYWxsb3cgZmV0Y2hlcyIKK21zZ3N0ciAiY3LDqWVyIGRlcyBwYXF1ZXRzIHBlcm1ldHRhbnQgZGVzIHLDqWN1cMOpcmF0aW9ucyBzdXBlcmZpY2llbGxlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQwCittc2dpZCAiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIKK21zZ3N0ciAiaWdub3JlciBsZXMgcGFxdWV0cyBxdWkgb250IHVuIGZpY2hpZXIgLmtlZXAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0MgorbXNnaWQgImlnbm9yZSB0aGlzIHBhY2siCittc2dzdHIgImlnbm9yZXIgY2UgcGFxdWV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDQKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICJuaXZlYXUgZGUgY29tcHJlc3Npb24gZHUgcGFxdWV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDYKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAibmUgcGFzIGNhY2hlciBsZXMgdmFsaWRhdGlvbnMgcGFyIGdyZWZmZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0OAorbXNnaWQgInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorInV0aWxpc2VyIHVuIGluZGV4IGVuIGJpdG1hcCBzaSBkaXNwb25pYmxlIHBvdXIgYWNjw6lsZXJlciBsZSBkw6ljb21wdGUgZGVzICIKKyJvYmpldHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1MAorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgIsOpY3JpcmUgdW4gaW5kZXggZW4gYml0bWFwIGFzc29jacOpIMOgIGwnaW5kZXggZGUgcGFxdWV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NTQKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCBpZiBwb3NzaWJsZSIKK21zZ3N0ciAiw6ljcmlyZSB1biBpbmRleCBkZSBiaXRtYXAgc2kgcG9zc2libGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1OAorbXNnaWQgImhhbmRsaW5nIGZvciBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgImdlc3Rpb24gZGVzIG9iamV0cyBtYW5xdWFudHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ2MQorbXNnaWQgImRvIG5vdCBwYWNrIG9iamVjdHMgaW4gcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICJuZSBwYXMgZW1wYXF1ZXRlciBsZXMgb2JqZXRzIGRhbnMgbGVzIGZpY2hpZXJzIHBhcXVldHMgcHJvbWV0dGV1cnMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ2MworbXNnaWQgInJlc3BlY3QgaXNsYW5kcyBkdXJpbmcgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgInJlc3BlY3RlciBsZXMgw65sb3RzIHBlbmRhbnQgbGEgY29tcHJlc3Npb24gZGVzIGRlbHRhcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGNoYWluIGRlcHRoICVkIGlzIHRvbyBkZWVwLCBmb3JjaW5nICVkIgorbXNnc3RyICJsYSBwcm9mb25kZXVyICVkIGRlIGNoYcOubmUgZGUgZGVsdGEgZXN0IHRyb3AgZ3JhbmRlLCBmb3Jjw6llIMOgICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjay5kZWx0YUNhY2hlTGltaXQgaXMgdG9vIGhpZ2gsIGZvcmNpbmcgJWQiCittc2dzdHIgInBhY2suZGVsdGFDYWNoZUxpbWl0IGVzdCB0cm9wIGdyYW5kLCBmb3Jjw6kgw6AgJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU1MQorbXNnaWQgIi0tbWF4LXBhY2stc2l6ZSBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhIHBhY2sgZm9yIHRyYW5zZmVyIgorbXNnc3RyICIiCisiLS1tYXgtcGFjay1zaXplIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIHBvdXIgY29uc3RydWlyZSB1biBwYXF1ZXQgw6AgIgorInRyYW5zZsOpcmVyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NTMKK21zZ2lkICJtaW5pbXVtIHBhY2sgc2l6ZSBsaW1pdCBpcyAxIE1pQiIKK21zZ3N0ciAibGEgdGFpbGxlIGxpbWl0ZSBtaW5pbWFsZSBkJ3VuIHBhcXVldCBlc3QgMSBNaUIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU1OAorbXNnaWQgIi0tdGhpbiBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhbiBpbmRleGFibGUgcGFjayIKK21zZ3N0ciAiLS10aGluIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIHBvdXIgY29uc3RydWlyZSB1biBwYXF1ZXQgaW5kZXhhYmxlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NjEKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC0tdW5wYWNrLXVucmVhY2hhYmxlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSBldCAtLXVucGFjay11bnJlYWNoYWJsZSBzb250IGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU2NworbXNnaWQgImNhbm5vdCB1c2UgLS1maWx0ZXIgd2l0aG91dCAtLXN0ZG91dCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ3V0aWxpc2VyIC0tZmlsdGVyIHNhbnMgLS1zdGRvdXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzYyNworbXNnaWQgIkVudW1lcmF0aW5nIG9iamVjdHMiCittc2dzdHIgIsOJbnVtw6lyYXRpb24gZGVzIG9iamV0cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUb3RhbCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHJldXNlZCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHBhY2stIgorInJldXNlZCAlPFBSSXUzMj4iCittc2dzdHIgIiIKKyJUb3RhbCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHLDqXV0aWxpc8OpcyAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksICIKKyJyw6l1dGlsaXPDqXMgZHUgcGFjayAlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6OAorbXNnaWQgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTYKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmciCittc2dzdHIgImVtcGFxdWV0ZXIgdG91dCIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNworbXNnaWQgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIgorbXNnc3RyICLDqWxpbWluZXIgbGVzIHLDqWbDqXJlbmNlcyBwZXJkdWVzIChkw6lmYXV0KSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo5Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDIKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAiU3VwcHJlc3Npb24gZGVzIG9iamV0cyBkdXBsaXF1w6lzIgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPGhldXJlPl0gWy0tXSBbPGhlYWQ+4oCmXSIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzMQorbXNnaWQgInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG9iamV0cyDDqWxpbWluw6lzIgorCisjOiBidWlsdGluL3BydW5lLmM6MTM0Cittc2dpZCAiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgImZhaXJlIGV4cGlyZXIgbGVzIG9iamV0cyBwbHVzIHZpZXV4IHF1ZSA8aGV1cmU+IgorCisjOiBidWlsdGluL3BydW5lLmM6MTM2Cittc2dpZCAibGltaXQgdHJhdmVyc2FsIHRvIG9iamVjdHMgb3V0c2lkZSBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgImxpbWl0ZXIgbGEgdHJhdmVyc8OpZSBhdXggb2JqZXRzIGhvcnMgZGVzIGZpY2hpZXJzIHBhcXVldHMgcHJvbWV0dGV1cnMiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxNTAKK21zZ2lkICJjYW5ub3QgcHJ1bmUgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgImltcG9zc2libGUgZGUgbmV0dG95ZXIgZGFucyB1biBkw6lww7R0IGQnb2JqZXRzIHByw6ljaWV1eCIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUgYnVpbHRpbi9wdWxsLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJWYWxldXIgaW52YWxpZGUgcG91ciAlcyA6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo2NworbXNnaWQgImdpdCBwdWxsIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPGTDqXDDtHQ+IFs8c3DDqWNpZmljYXRpb24tZGUtcsOpZsOpcmVuY2U+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjEyMgorbXNnaWQgImNvbnRyb2wgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJjb250csO0bGVyIGxhIHLDqWN1cMOpcmF0aW9uIHLDqWN1cnNpdmUgZGFucyBsZXMgc291cy1tb2R1bGVzIgorCisjOiBidWlsdGluL3B1bGwuYzoxMjYKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gbWVyZ2luZyIKK21zZ3N0ciAiT3B0aW9ucyByZWxhdGl2ZXMgw6AgbGEgZnVzaW9uIgorCisjOiBidWlsdGluL3B1bGwuYzoxMjkKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgImluY29ycG9yZXIgbGVzIG1vZGlmaWNhdGlvbnMgZW4gcmViYXNhbnQgcGx1dMO0dCBxdSdlbiBmdXNpb25uYW50IgorCisjOiBidWlsdGluL3B1bGwuYzoxNTcgYnVpbHRpbi9yZWJhc2UuYzo0NzEgYnVpbHRpbi9yZXZlcnQuYzoxMjYKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgImF1dG9yaXNlciBsJ2F2YW5jZSByYXBpZGUiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2NgorbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIgcmViYXNlIgorbXNnc3RyICJyZW1pc2VyIGF2YW50IGV0IHLDqWFwcGxpcXVlciBhcHLDqHMgbGUgcmViYXNhZ2UgYXV0b21hdGlxdWVtZW50IgorCisjOiBidWlsdGluL3B1bGwuYzoxODIKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmciCittc2dzdHIgIk9wdGlvbnMgcmVsYXRpdmVzIGF1IHJhcGF0cmllbWVudCIKKworIzogYnVpbHRpbi9wdWxsLmM6MTkyCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiZm9yY2VyIGwnw6ljcmFzZW1lbnQgZGUgbGEgYnJhbmNoZSBsb2NhbGUiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIwMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIHB1bGxlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAibm9tYnJlIGRlIHNvdXMtbW9kdWxlcyB0aXLDqXMgZW4gcGFyYWxsw6hsZSIKKworIzogYnVpbHRpbi9wdWxsLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICJWYWxldXIgaW52YWxpZGUgcG91ciBwdWxsLmZmIDogJXMiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyNgorbXNnaWQgIiIKKyJUaGVyZSBpcyBubyBjYW5kaWRhdGUgZm9yIHJlYmFzaW5nIGFnYWluc3QgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCAiCisiZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJJbCBuJ3kgYSBwYXMgZGUgY2FuZGlkYXRlIHN1ciBsYXF1ZWxsZSByZWJhc2VyIHBhcm1pIGxlcyByw6lmw6lyZW5jZXMgcXVlIHZvdXMgIgorInZlbmV6IGRlIHLDqWN1cMOpcmVyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI4Cittc2dpZCAiIgorIlRoZXJlIGFyZSBubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJJbCBuJ3kgYSBwYXMgZGUgY2FuZGlkYXRlIGF2ZWMgbGFxdWVsbGUgZnVzaW9ubmVyIHBhcm1pIGxlcyByw6lmw6lyZW5jZXMgcXVlICIKKyJ2b3VzIHZlbmV6IGRlIHLDqWN1cMOpcmVyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI5Cittc2dpZCAiIgorIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKyJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKK21zZ3N0ciAiIgorIkfDqW7DqXJhbGVtZW50LCBjZWxhIHNpZ25pZmllIHF1ZSB2b3VzIGF2ZXogaW5kaXF1w6kgdW4gc3DDqWNpZmljYXRldXJcbiIKKyJkZSByw6lmw6lyZW5jZSBqb2tlciBxdWkgbidhIHBhcyBldSBkZSBjb3JyZXNwb25kYW5jZSBzdXIgbGUgc2VydmV1ciBkaXN0YW50LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIiIKKyJWb3VzIGF2ZXogZGVtYW5kw6kgZGUgdGlyZXIgZGVwdWlzIGxlIGTDqXDDtHQgZGlzdGFudCAnJXMnLCBtYWlzIHNhbnMgaW5kaXF1ZXJcbiIKKyJsYSBicmFuY2hlLiBDb21tZSBjZSBuJ2VzdCBwYXMgbGUgZMOpcMO0dCBkaXN0YW50IHBhciBkw6lmYXV0IGRhbnMgbGEgIgorImNvbmZpZ3VyYXRpb25cbiIKKyJwb3VyIGxhIGJyYW5jaGUgYWN0dWVsbGUsIHZvdXMgZGV2ZXogc3DDqWNpZmllciBsYSBicmFuY2hlIGF2ZWMgbGEgY29tbWFuZGUuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzcgYnVpbHRpbi9yZWJhc2UuYzoxNDA5IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzMKK21zZ2lkICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIgorbXNnc3RyICJWb3VzIG4nw6p0ZXMgYWN0dWVsbGVtZW50IHN1ciBhdWN1bmUgYnJhbmNoZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOSBidWlsdGluL3B1bGwuYzo0NTQgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIlZldWlsbGV6IHNww6ljaWZpZXIgc3VyIHF1ZWxsZSBicmFuY2hlIHZvdXMgc291aGFpdGVyIHJlYmFzZXIuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDEgYnVpbHRpbi9wdWxsLmM6NDU2IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODIKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iCittc2dzdHIgIlZldWlsbGV6IHNww6ljaWZpZXIgdW5lIGJyYW5jaGUgYXZlYyBsYXF1ZWxsZSBmdXNpb25uZXIuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDIgYnVpbHRpbi9wdWxsLmM6NDU3Cittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiUsOpZsOpcmV6LXZvdXMgw6AgZ2l0LXB1bGwoMSkgcG91ciBkZSBwbHVzIGFtcGxlcyBkw6l0YWlscy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NCBidWlsdGluL3B1bGwuYzo0NTAgYnVpbHRpbi9wdWxsLmM6NDU5CisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NAorbXNnaWQgIjxyZW1vdGU+IgorbXNnc3RyICI8ZGlzdGFudD4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NCBidWlsdGluL3B1bGwuYzo0NTkgYnVpbHRpbi9wdWxsLmM6NDY0CisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjY1Cittc2dpZCAiPGJyYW5jaD4iCittc2dzdHIgIjxicmFuY2hlPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcmViYXNlLmM6MTQwNyBnaXQtcGFyc2UtcmVtb3RlLnNoOjc1Cittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIlBhcyBkJ2luZm9ybWF0aW9uIGRlIHN1aXZpIGRpc3RhbnQgcG91ciBsYSBicmFuY2hlIGFjdHVlbGxlLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDYxIGdpdC1wYXJzZS1yZW1vdGUuc2g6OTUKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6IgorbXNnc3RyICIiCisiU2kgdm91cyBzb3VoYWl0ZXogaW5kaXF1ZXIgbCdpbmZvcm1hdGlvbiBkZSBzdWl2aSBkaXN0YW50IHBvdXIgY2V0dGUgIgorImJyYW5jaGUsIHZvdXMgcG91dmV6IGxlIGZhaXJlIGF2ZWPCoDoiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIlZvdHJlIGluZm9ybWF0aW9uIGRlIGNvbmZpZ3VyYXRpb24gaW5kaXF1ZSBkZSBmdXNpb25uZXIgYXZlYyBsYSByw6lmw6lyZW5jZSAiCisiJyVzJ1xuIgorImR1IHNlcnZldXIgZGlzdGFudCwgbWFpcyBjZXR0ZSByw6lmw6lyZW5jZSBuJ2EgcGFzIMOpdMOpIHLDqWN1cMOpcsOpZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIGNvbW1pdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FjY8OpZGVyIGxlIGNvbW1pdCAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODU3Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICItLXZlcmlmeS1zaWduYXR1cmVzIGVzdCBpZ25vcsOpIHBvdXIgdW4gcmViYXNhZ2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkxMgorbXNnaWQgIi0tW25vLV1hdXRvc3Rhc2ggb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXJlYmFzZS4iCittc2dzdHIgImwnb3B0aW9uIC0tW25vLV1hdXRvc3Rhc2ggbidlc3QgdmFsaWRlIHF1J2F2ZWMgLS1yZWJhc2UuIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiTWlzZSDDoCBqb3VyIGQndW5lIGJyYW5jaGUgbm9uIGVuY29yZSBjcsOpw6llIGF2ZWMgbGVzIGNoYW5nZW1lbnRzIGFqb3V0w6lzIGRhbnMgIgorImwnaW5kZXguIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjQKK21zZ2lkICJwdWxsIHdpdGggcmViYXNlIgorbXNnc3RyICJ0aXJlciBhdmVjIHVuIHJlYmFzYWdlIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjUKK21zZ2lkICJwbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJ2ZXVpbGxleiBsZXMgdmFsaWRlciBvdSBsZXMgcmVtaXNlci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKyJmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorImNvbW1pdCAlcy4iCittc2dzdHIgIiIKKyJsYSByw6ljdXDDqXJhdGlvbiBhIG1pcyDDoCBqb3VyIGxhIHTDqnRlIGRlIGxhIGJyYW5jaGUgYWN0dWVsbGUuXG4iCisiYXZhbmNlIHJhcGlkZSBkZSB2b3RyZSBjb3BpZSBkZSB0cmF2YWlsXG4iCisiZGVwdWlzIGxlIGNvbW1pdCAlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIm91dHB1dCwgcnVuXG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisidG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJBdmFuY2UgcmFwaWRlIGRlIHZvdHJlIGFyYnJlIGRlIHRyYXZhaWwgaW1wb3NzaWJsZS5cbiIKKyJBcHLDqHMgYXZvaXIgdsOpcmlmacOpIHF1ZSB0b3V0ZSBtb2RpZmljYXRpb24gcHLDqWNpZXVzZSBhIMOpdMOpIHNhdXZlZ2FyZMOpZSBhdmVjXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorImxhbmNlelxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInBvdXIgcsOpZ8OpbsOpcmVyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTcxCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIkltcG9zc2libGUgZGUgZnVzaW9ubmVyIGRlIG11bHRpcGxlcyBicmFuY2hlcyBzdXIgdW5lIHTDqnRlIHZpZGUuIgorCisjOiBidWlsdGluL3B1bGwuYzo5NzUKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHJlYmFzZXIgc3VyIGRlIG11bHRpcGxlcyBicmFuY2hlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk4MgorbXNnaWQgImNhbm5vdCByZWJhc2Ugd2l0aCBsb2NhbGx5IHJlY29yZGVkIHN1Ym1vZHVsZSBtb2RpZmljYXRpb25zIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSByZWJhc2VyIGF2ZWMgZGVzIG1vZGlmaWNhdGlvbnMgZGUgc291cy1tb2R1bGVzIGVucmVnaXN0csOpZXMgIgorImxvY2FsZW1lbnQiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE5Cittc2dpZCAiZ2l0IHB1c2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8ZMOpcMO0dD4gWzxzcMOpY2lmaWNhdGlvbi1kZS1yw6lmw6lyZW5jZT4uLi5dXSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTEyCittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICJyYWNjb3VyY2kgZCfDqXRpcXVldHRlIHNhbnMgPMOpdGlxdWV0dGU+IgorCisjOiBidWlsdGluL3B1c2guYzoxMjIKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUgYWNjZXB0ZSBzZXVsZW1lbnQgZGVzIG5vbXMgZW50aWVycyBkZSByw6lmw6lyZW5jZXMgY2libGVzIgorCisjOiBidWlsdGluL3B1c2guYzoxNjgKK21zZ2lkICIiCisiXG4iCisiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksIHNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIgorbXNnc3RyICIiCisiXG4iCisiUG91ciBjaG9pc2lyIGwnb3B0aW9uIGRlIG1hbmnDqHJlIHBlcm1hbmVudGUsIHZvaXIgcHVzaC5kZWZhdWx0IGRhbnMgJ2dpdCAiCisiaGVscCBjb25maWcnLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRFxuIgorIiVzIgorbXNnc3RyICIiCisiTGEgYnJhbmNoZSBhbW9udCBkZSB2b3RyZSBicmFuY2hlIGNvdXJhbnRlIG5lIGNvcnJlc3BvbmQgcGFzXG4iCisiYXUgbm9tIGRlIHZvdHJlIGJyYW5jaGUgY291cmFudGUuICBQb3VyIHBvdXNzZXIgdmVycyBsYSBicmFuY2hlIGFtb250XG4iCisic3VyIGxlIHNlcnZldXIgZGlzdGFudCwgdXRpbGlzZXpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlBvdXIgcG91c3NlciB2ZXJzIGxhIGJyYW5jaGUgZHUgbcOqbWUgbm9tIHN1ciBsZSBzZXJ2ZXVyIGRpc3RhbnQsIHV0aWxpc2V6XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAiIgorIlZvdXMgbifDqnRlcyBhY3R1ZWxsZW1lbnQgc3VyIGF1Y3VuZSBicmFuY2hlLlxuIgorIlBvdXIgcG91c3NlciBsJ2hpc3RvcmlxdWUgbWVuYW50IMOgIGwnw6l0YXQgYWN0dWVsIChIRUFEIGTDqXRhY2jDqWUpLFxuIgorInV0aWxpc2V6XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5vbS1kZS1sYS1icmFuY2hlLWFtb250PlxuIgorCisjOiBidWlsdGluL3B1c2guYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgIiIKKyJMYSBicmFuY2hlIGNvdXJhbnRlICVzIG4nYSBwYXMgZGUgYnJhbmNoZSBhbW9udC5cbiIKKyJQb3VyIHBvdXNzZXIgbGEgYnJhbmNoZSBjb3VyYW50ZSBldCBkw6lmaW5pciBsYSBkaXN0YW50ZSBjb21tZSBhbW9udCwgIgorInV0aWxpc2V6XG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jaGUgY291cmFudGUgJXMgYSBkZSBtdWx0aXBsZXMgYnJhbmNoZXMgYW1vbnQsIGltcG9zc2libGUgZGUgcG91c3Nlci4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisiVm91cyDDqnRlcyBlbiB0cmFpbiBkZSBwb3Vzc2VyIHZlcnMgbGEgYnJhbmNoZSBkaXN0YW50ZSAnJXMnLCBxdWkgbidlc3RcbiIKKyJwYXMgdW5lIGJyYW5jaGUgYW1vbnQgZGUgdm90cmUgYnJhbmNoZSBjb3VyYW50ZSAnJXMnLCBzYW5zIG1lIGRpcmVcbiIKKyJxdW9pIHBvdXNzZXIgcG91ciBtZXR0cmUgw6Agam91ciBxdWVsbGUgYnJhbmNoZSBhbW9udC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3MAorbXNnaWQgIiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisiVm91cyBuJ2F2ZXogcGFzIHNww6ljaWZpw6kgZGUgc3DDqWNpZmljYXRpb25zIGRlIHLDqWbDqXJlbmNlIMOgIHBvdXNzZXIsIGV0IHB1c2guIgorImRlZmF1bHQgZXN0IFwibm90aGluZ1wiLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjc3Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKyJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBJbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuXG4iCisiJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiTGVzIG1pc2VzIMOgIGpvdXIgb250IMOpdMOpIHJlamV0w6llcyBjYXIgbGEgcG9pbnRlIGRlIGxhIGJyYW5jaGUgY291cmFudGUgZXN0ICIKKyJkZXJyacOocmVcbiIKKyJzb24gaG9tb2xvZ3VlIGRpc3RhbnQuIEludMOpZ3JleiBsZXMgY2hhbmdlbWVudHMgZGlzdGFudHMgKHBhciBleGVtcGxlICdnaXQgIgorInB1bGwgLi4uJylcbiIKKyJhdmFudCBkZSBwb3Vzc2VyIMOgIG5vdXZlYXUuXG4iCisiVm9pciBsYSAnTm90ZSDDoCBwcm9wb3MgZGVzIGF2YW5jZXMgcmFwaWRlcycgZGFucyAnZ2l0IHB1c2ggLS1oZWxwJyBwb3VyIHBsdXMgIgorImQnaW5mb3JtYXRpb24uIgorCisjOiBidWlsdGluL3B1c2guYzoyODMKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJMZXMgbWlzZXMgw6Agam91ciBvbnQgw6l0w6kgcmVqZXTDqWVzIGNhciBsYSBwb2ludGUgZGUgbGEgYnJhbmNoZSBjb3VyYW50ZSBlc3QgIgorImRlcnJpw6hyZVxuIgorInNvbiBob21vbG9ndWUgZGlzdGFudC4gRXh0cmF5ZXogY2V0dGUgYnJhbmNoZSBldCBpbnTDqWdyZXogbGVzIGNoYW5nZW1lbnRzICIKKyJkaXN0YW50c1xuIgorIihwYXIgZXhlbXBsZSAnZ2l0IHB1bGwgLi4uJykgYXZhbnQgZGUgcG91c3NlciDDoCBub3V2ZWF1LlxuIgorIlZvaXIgbGEgJ05vdGUgw6AgcHJvcG9zIGRlcyBhdmFuY2VzIHJhcGlkZXMnIGRhbnMgJ2dpdCBwdXNoIC0taGVscCcgcG91ciBwbHVzICIKKyJkJ2luZm9ybWF0aW9uLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg5Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkxlcyBtaXNlcyDDoCBqb3VyIG9udCDDqXTDqSByZWpldMOpZXMgY2FyIGxhIGJyYW5jaGUgZGlzdGFudGUgY29udGllbnQgZHUgIgorInRyYXZhaWwgcXVlXG4iCisidm91cyBuJ2F2ZXogcGFzIGVuIGxvY2FsLiBDZWNpIGVzdCBnw6luw6lyYWxlbWVudCBjYXVzw6kgcGFyIHVuIGF1dHJlIGTDqXDDtHQgIgorInBvdXNzw6lcbiIKKyJ2ZXJzIGxhIG3Dqm1lIHLDqWbDqXJlbmNlLiBWb3VzIHBvdXJyaWV6IGludMOpZ3JlciBkJ2Fib3JkIGxlcyBjaGFuZ2VtZW50cyAiCisiZGlzdGFudHNcbiIKKyIocGFyIGV4ZW1wbGUgJ2dpdCBwdWxsIC4uLicpIGF2YW50IGRlIHBvdXNzZXIgw6Agbm91dmVhdS5cbiIKKyJWb2lyIGxhICdOb3RlIMOgIHByb3BvcyBkZXMgYXZhbmNlcyByYXBpZGVzJyBkYW5zICdnaXQgcHVzaCAtLWhlbHAnIHBvdXIgcGx1cyAiCisiZCdpbmZvcm1hdGlvbi4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5NgorbXNnaWQgIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0YWcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlbW90ZS4iCittc2dzdHIgIiIKKyJMZXMgbWlzZXMgw6Agam91ciBvbnQgw6l0w6kgcmVqZXTDqWVzIGNhciBsJ8OpdGlxdWV0dGUgZXhpc3RlIGTDqWrDoCBkYW5zIGxhICIKKyJicmFuY2hlIGRpc3RhbnRlLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk5Cittc2dpZCAiIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgIiIKKyJWb3VzIG5lIHBvdXZleiBwYXMgbWV0dHJlIMOgIGpvdXIgdW5lIHLDqWbDqXJlbmNlIGRpc3RhbnRlIHF1aSBwb2ludGUgc3VyIHVuICIKKyJvYmpldCBxdWlcbiIKKyJuJ2VzdCBwYXMgdW4gY29tbWl0LCBvdSBtZXR0cmUgw6Agam91ciB1bmUgcsOpZsOpcmVuY2UgZGlzdGFudGUgcG91ciBsYSBmYWlyZSAiCisicG9pbnRlclxuIgorInZlcnMgdW4gb2JqZXQgcXVpIG4nZXN0IHBhcyB1biBjb21taXQsIHNhbnMgdXRpbGlzZXIgbCdvcHRpb24gJy0tZm9yY2UnLlxuIgorCisjOiBidWlsdGluL3B1c2guYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICJQb3Vzc8OpZSB2ZXJzICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBwb3Vzc2VyIGRlcyByw6lmw6lyZW5jZXMgdmVycyAnJXMnIgorCisjOiBidWlsdGluL3B1c2guYzo1NDIKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICJkw6lww7R0IgorCisjOiBidWlsdGluL3B1c2guYzo1NDMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjQKK21zZ2lkICJwdXNoIGFsbCByZWZzIgorbXNnc3RyICJwb3Vzc2VyIHRvdXRlcyBsZXMgcsOpZsOpcmVuY2VzIgorCisjOiBidWlsdGluL3B1c2guYzo1NDQgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjYKK21zZ2lkICJtaXJyb3IgYWxsIHJlZnMiCittc2dzdHIgInJlZmzDqXRlciB0b3V0ZXMgbGVzIHLDqWbDqXJlbmNlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ2Cittc2dpZCAiZGVsZXRlIHJlZnMiCittc2dzdHIgInN1cHByaW1lciBsZXMgcsOpZsOpcmVuY2VzIgorCisjOiBidWlsdGluL3B1c2guYzo1NDcKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgIiIKKyJwb3Vzc2VyIGxlcyDDqXRpcXVldHRlcyAobmUgcGV1dCBwYXMgw6p0cmUgdXRpbGlzw6kgYXZlYyAtLWFsbCBvdSAtLW1pcnJvcikiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MCBidWlsdGluL3NlbmQtcGFjay5jOjE2NworbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgImZvcmNlciBsZXMgbWlzZXMgw6Agam91ciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgxCittc2dpZCAiPHJlZm5hbWU+OjxleHBlY3Q+IgorbXNnc3RyICI8bm9tLWRlLXJlZj46PGF0dGVuZHU+IgorCisjOiBidWlsdGluL3B1c2guYzo1NTMgYnVpbHRpbi9zZW5kLXBhY2suYzoxODIKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAiZXhpZ2VyIHF1ZSBsJ2FuY2llbm5lIHZhbGV1ciBkZSBsYSByw6lmw6lyZW5jZSBzb2l0IMOgIGNldHRlIHZhbGV1ciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU2Cittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJjb250csO0bGVyIGxhIHBvdXNzw6llIHLDqWN1cnNpdmUgZGVzIHNvdXMtbW9kdWxlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU4IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAidXRpbGlzZXIgdW4gZW1wYXF1ZXRhZ2UgbMOpZ2VyIgorCisjOiBidWlsdGluL3B1c2guYzo1NTkgYnVpbHRpbi9wdXNoLmM6NTYwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYxCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgInJlY2VpdmUgcGFjayBwcm9ncmFtIgorbXNnc3RyICJyZWNldm9pciBsZSBwcm9ncmFtbWUgZCdlbXBhcXVldGFnZSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYxCittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgImTDqWZpbmlyIGxhIGJyYW5jaGUgYW1vbnQgcG91ciBnaXQgcHVsbC9zdGF0dXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NAorbXNnaWQgInBydW5lIGxvY2FsbHkgcmVtb3ZlZCByZWZzIgorbXNnc3RyICLDqWxpbWluZXIgbGVzIHLDqWbDqXJlbmNlcyBsb2NhbGVzIHN1cHByaW3DqWVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NjYKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAiw6l2aXRlciBkJ3V0aWxpc2VyIGxlIGNyb2NoZXQgcHJlLXB1c2giCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NworbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAicG91c3NlciBsZXMgw6l0aXF1ZXR0ZXMgbWFucXVhbnRlcyBtYWlzIHBlcnRpbmVudGVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NzAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjkKK21zZ2lkICJHUEcgc2lnbiB0aGUgcHVzaCIKK21zZ3N0ciAic2lnbmVyIGxhIHBvdXNzw6llIGF2ZWMgR1BHIgorCisjOiBidWlsdGluL3B1c2guYzo1NzIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzYKK21zZ2lkICJyZXF1ZXN0IGF0b21pYyB0cmFuc2FjdGlvbiBvbiByZW1vdGUgc2lkZSIKK21zZ3N0ciAiZGVtYW5kZSB1bmUgdHJhbnNhY3Rpb24gYXRvbWlxdWUgc3VyIGxlIHNlcnZldXIgZGlzdGFudCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTkwCittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIi0tZGVsZXRlIGVzdCBpbmNvbXBhdGlibGUgYXZlYyAtLWFsbCwgLS1taXJyb3IgZXQgLS10YWdzIgorCisjOiBidWlsdGluL3B1c2guYzo1OTIKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiLS1kZWxldGUgbidhIHBhcyBkZSBzZW5zIHNhbnMgYXVjdW5lIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL3B1c2guYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAibWF1dmFpcyBkw6lww7R0ICclcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMworbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisiUGFzIGRlIGRlc3RpbmF0aW9uIHBvdXIgcG91c3Nlci5cbiIKKyJTcMOpY2lmaWV6IHVuZSBVUkwgZGVwdWlzIGxhIGxpZ25lIGRlIGNvbW1hbmRlIG91IGNvbmZpZ3VyZXogdW4gZMOpcMO0dCBkaXN0YW50ICIKKyJlbiB1dGlsaXNhbnRcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5vbT4gPHVybD5cbiIKKyJcbiIKKyJldCBwb3Vzc2V6IGFsb3JzIGVuIHV0aWxpc2FudCBsZSBkw6lww7R0IGRpc3RhbnRcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5vbT5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjI4Cittc2dpZCAiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCBldCAtLXRhZ3Mgc29udCBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3B1c2guYzo2MzAKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLWFsbCBuZSBwZXV0IHBhcyDDqnRyZSBjb21iaW7DqSBhdmVjIGRlcyBzcMOpY2lmaWNhdGlvbnMgZGUgcsOpZsOpcmVuY2UiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzNAorbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1taXJyb3IgZXQgLS10YWdzIHNvbnQgaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM2Cittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1taXJyb3IgbmUgcGV1dCBwYXMgw6p0cmUgY29tYmluw6kgYXZlYyBkZXMgc3DDqWNpZmljYXRpb25zIGRlIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL3B1c2guYzo2MzkKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgZXQgLS1taXJyb3Igc29udCBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3B1c2guYzo2NDMKK21zZ2lkICJwdXNoIG9wdGlvbnMgbXVzdCBub3QgaGF2ZSBuZXcgbGluZSBjaGFyYWN0ZXJzIgorbXNnc3RyICIiCisibGVzIG9wdGlvbnMgZGUgcG91c3PDqWUgbmUgcGV1dmVudCBwYXMgY29udGVuaXIgZGUgY2FyYWN0w6hyZXMgZGUgbm91dmVsbGUgIgorImxpZ25lIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo4Cittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPG9sZC1iYXNlPi4uPG9sZC10aXA+IDxuZXctYmFzZT4uLjxuZXctdGlwPiIKK21zZ3N0ciAiIgorImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxhbmNpZW5uZS1iYXNlPi4uPGFuY2llbi1zb21tZXQ+IDxub3V2ZWxsZS1iYXNlPi4uIgorIjxub3V2ZWF1LXNvbW1ldD4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjkKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLXRpcD4uLi48bmV3LXRpcD4iCittc2dzdHIgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxhbmNpZW4tc29tbWV0Pi4uLjxub3V2ZWF1LXNvbW1ldD4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjEwCittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPGJhc2U+IDxvbGQtdGlwPiA8bmV3LXRpcD4iCittc2dzdHIgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxiYXNlPiA8YW5jaWVuLXNvbW1ldD4gPG5vdXZlYXUtc29tbWV0PiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjIKK21zZ2lkICJQZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIgorbXNnc3RyICJQb3VyY2VudGFnZSBwYXIgbGVxdWVsIGxhIGNyw6lhdGlvbiBlc3QgcG9uZMOpcsOpZSIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjQKK21zZ2lkICJ1c2Ugc2ltcGxlIGRpZmYgY29sb3JzIgorbXNnc3RyICJ1dGlsaXNlciBkZXMgY291bGV1cnMgZGUgZGlmZiBzaW1wbGVzIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyNgorbXNnaWQgIm5vdGVzIgorbXNnc3RyICJub3RlcyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjYKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBsb2cnIgorbXNnc3RyICJwYXNzw6kgw6AgJ2dpdCBsb2cnIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo1MCBidWlsdGluL3JhbmdlLWRpZmYuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyAuLiBpbiByYW5nZTogJyVzJyIKK21zZ3N0ciAicGFzIGRlIC4uIGRhbnMgbGEgcGxhZ2XCoDogJyVzJyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NjQKK21zZ2lkICJzaW5nbGUgYXJnIGZvcm1hdCBtdXN0IGJlIHN5bW1ldHJpYyByYW5nZSIKK21zZ3N0ciAidW4gZm9ybWF0IGQnYXJndW1lbnQgdW5pcXVlIGRvaXQgw6p0cmUgdW5lIHBsYWdlIHN5bcOpdHJpcXVlIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo3OQorbXNnaWQgIm5lZWQgdHdvIGNvbW1pdCByYW5nZXMiCittc2dzdHIgInBsYWdlIGVudHJlIGRldXggY29tbWl0cyByZXF1aXNlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjQxCittc2dpZCAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4PikgIgorIlstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLSIKKyJpbmRleC1vdXRwdXQ9PGZpbGU+XSAoLS1lbXB0eSB8IDx0cmVlLWlzaDE+IFs8dHJlZS1pc2gyPiBbPHRyZWUtaXNoMz5dXSkiCittc2dzdHIgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS0iCisicHJlZml4PTxwcsOpZml4ZT4pIFstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby0iCisic3BhcnNlLWNoZWNrb3V0XSBbLS1pbmRleC1vdXRwdXQ9PGZpY2hpZXI+XSAoLS1lbXB0eSB8IDxhcmJyZSBvdSBhcHBhcmVudMOpICIKKyIxPiBbPGFyYnJlIG91IGFwcGFyZW50w6kgMj4gWzxhcmJyZSBvdSBhcHBhcmVudMOpIDM+XV0pIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNAorbXNnaWQgIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iCittc2dzdHIgIsOpY3JpcmUgbCdpbmRleCByw6lzdWx0YW50IGRhbnMgPGZpY2hpZXI+IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICJqdXN0ZSB2aWRlciBsJ2luZGV4IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyOQorbXNnaWQgIk1lcmdpbmciCittc2dzdHIgIkZ1c2lvbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzEKK21zZ2lkICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIgorbXNnc3RyICJlZmZlY3R1ZXIgdW5lIGZ1c2lvbiBlbiBwbHVzIGQndW5lIGxlY3R1cmUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMzCittc2dpZCAiMy13YXkgbWVyZ2UgaWYgbm8gZmlsZSBsZXZlbCBtZXJnaW5nIHJlcXVpcmVkIgorbXNnc3RyICJmdXNpb24gw6AgMyBwb2ludHMgc2kgYXVjdW5lIGZ1c2lvbiBkZSBuaXZlYXUgZmljaGllciBuJ2VzdCByZXF1aXNlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgIjMtd2F5IG1lcmdlIGluIHByZXNlbmNlIG9mIGFkZHMgYW5kIHJlbW92ZXMiCittc2dzdHIgImZ1c2lvbiDDoCAzIHBvaW50cyBlbiBwcsOpc2VuY2UgZCdham91dHMgZXQgc3VwcHJlc3Npb25zIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgImNvbW1lIC1tLCBtYWlzIGFubnVsZSBsZXMgw6lsw6ltZW50cyBub24gZnVzaW9ubsOpcyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzgKK21zZ2lkICI8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIjxzb3VzLXLDqXBlcnRvaXJlPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM5Cittc2dpZCAicmVhZCB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB1bmRlciA8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgImxpcmUgbCdhcmJyZSBkYW5zIGwnaW5kZXggZGFucyA8c291cy1yw6lwZXJ0b2lyZT4vIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0MgorbXNnaWQgInVwZGF0ZSB3b3JraW5nIHRyZWUgd2l0aCBtZXJnZSByZXN1bHQiCittc2dzdHIgIm1ldHRyZSDDoCBqb3VyIGxhIGNvcGllIGRlIHRyYXZhaWwgYXZlYyBsZSByw6lzdWx0YXQgZGUgbGEgZnVzaW9uIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiZ2l0aWdub3JlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAiYXV0b3Jpc2VyIGV4cGxpY2l0ZW1lbnQgbGVzIGZpY2hpZXJzIGlnbm9yw6lzIMOgIMOqdHJlIMOpY3Jhc8OpcyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDgKK21zZ2lkICJkb24ndCBjaGVjayB0aGUgd29ya2luZyB0cmVlIGFmdGVyIG1lcmdpbmciCittc2dzdHIgIm5lIHBhcyB2w6lyaWZpZXIgbGEgY29waWUgZGUgdHJhdmFpbCBhcHLDqHMgbGEgZnVzaW9uIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OQorbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAibmUgcGFzIG1ldHRyZSDDoCBqb3VyIGwnaW5kZXggb3UgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTEKK21zZ2lkICJza2lwIGFwcGx5aW5nIHNwYXJzZSBjaGVja291dCBmaWx0ZXIiCittc2dzdHIgInNhdXRlciBsJ2FwcGxpY2F0aW9uIGR1IGZpbHRyZSBkJ2V4dHJhY3Rpb24gY3JldXNlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MworbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAiZMOpYm9ndWVyIHVucGFjay10cmVlcyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTcKK21zZ2lkICJzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcyIKK21zZ3N0ciAic3VwcHJpbWVyIGxlcyBtZXNzYWdlcyBkJ2luZm9ybWF0aW9uIGRlIHN1aXZpIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE4OAorbXNnaWQgIllvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICJWb3VzIGRldmV6IGQnYWJvcmQgcsOpc291ZHJlIHZvdHJlIGluZGV4IGNvdXJhbnQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPiB8IC0ta2VlcC1iYXNlXSAiCisiWzx1cHN0cmVhbT4gWzxicmFuY2g+XV0iCittc2dzdHIgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5vdXZlbGxlLWJhc2U+IHwgLS1rZWVwLSIKKyJiYXNlXSBbPGFtb250PiBbPGJyYW5jaGU+XV0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPl0gLS1yb290IFs8YnJhbmNoPl0iCittc2dzdHIgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5vdXZlbGxlLWJhc2U+XSAtLXJvb3QgIgorIls8YnJhbmNoZT5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2Cittc2dpZCAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorbXNnc3RyICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc1IGJ1aWx0aW4vcmViYXNlLmM6MTk5IGJ1aWx0aW4vcmViYXNlLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAibGlzdGUgw6AgZmFpcmUgaW51dGlsaXNhYmxlwqA6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciB1biBmaWNoaWVyIHRlbXBvcmFpcmUgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6Mjk4Cittc2dpZCAiY291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgImltcG9zc2libGUgZGUgbWFycXVlciBjb21tZSBpbnRlcmFjdGlmIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM1MgorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSB0b2RvIGxpc3QiCittc2dzdHIgImltcG9zc2libGUgZGUgZ8OpbsOpcmVyIGxhIGxpc3RlIMOgLWZhaXJlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM5MQorbXNnaWQgImEgYmFzZSBjb21taXQgbXVzdCBiZSBwcm92aWRlZCB3aXRoIC0tdXBzdHJlYW0gb3IgLS1vbnRvIgorbXNnc3RyICJ1biBjb21taXQgZGUgYmFzZSBkb2l0IMOqdHJlIGZvdXJuaSBhdmVjIC0tdXBzdHJlYW0gb3UgLS1vbnRvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ2MQorbXNnaWQgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSBbPG9wdGlvbnM+XSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzQgYnVpbHRpbi9yZWJhc2UuYzoxNTUwCittc2dpZCAiKERFUFJFQ0FURUQpIGtlZXAgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAiKE9CU09Mw4hURSkgZ2FyZGVyIGxlcyB2YWxpZGF0aW9ucyB2aWRlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzggYnVpbHRpbi9yZXZlcnQuYzoxMjgKK21zZ2lkICJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgImF1dG9yaXNlciBsZXMgdmFsaWRhdGlvbnMgYXZlYyBkZXMgbWVzc2FnZXMgdmlkZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgwCittc2dpZCAicmViYXNlIG1lcmdlIGNvbW1pdHMiCittc2dzdHIgInJlYmFzZXIgbGVzIGNvbW1pdHMgZGUgZnVzaW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4MgorbXNnaWQgImtlZXAgb3JpZ2luYWwgYnJhbmNoIHBvaW50cyBvZiBjb3VzaW5zIgorbXNnc3RyICJjb25zZXJ2ZXIgbGVzIHBvaW50cyBkZSBicmFuY2hlbWVudCBkZSBjb3VzaW5zIG9yaWdpbmF1eCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODQKK21zZ2lkICJtb3ZlIGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHNxdWFzaCEvZml4dXAhIgorbXNnc3RyICJkw6lwbGFjZXIgbGVzIGNvbW1pdHMgcXVpIGNvbW1lbmNlbnQgcGFyIHNxdWFzaCEvZml4dXAhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NQorbXNnaWQgInNpZ24gY29tbWl0cyIKK21zZ3N0ciAic2lnbmVyIGxlcyBjb21taXRzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NyBidWlsdGluL3JlYmFzZS5jOjE0OTAKK21zZ2lkICJkaXNwbGF5IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICJhZmZpY2hlciB1biBkaWZmc3RhdCBkZSBjZSBxdWkgYSBjaGFuZ8OpIGVuIGFtb250IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4OQorbXNnaWQgImNvbnRpbnVlIHJlYmFzZSIKK21zZ3N0ciAiY29udGludWVyIGxlIHJlYmFzYWdlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MQorbXNnaWQgInNraXAgY29tbWl0IgorbXNnc3RyICJzYXV0ZXIgbGUgY29tbWl0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MgorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiw6lkaXRlciBsYSBsaXN0ZSDDoC1mYWlyZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTQKK21zZ2lkICJzaG93IHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICJhZmZpY2hlciBsZSBwYXRjaCBjb3VyYW50IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NworbXNnaWQgInNob3J0ZW4gY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJyYWNjb3VyY2lyIGxlcyBpZGVudGlmaWFudHMgZGUgY29tbWl0cyBkYW5zIGxhIGxpc3RlIMOgLWZhaXJlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5OQorbXNnaWQgImV4cGFuZCBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgIsOpdGVuZHJlIGxlcyBpZGVudGlmaWFudHMgZGUgY29tbWl0IGRhbnMgbGEgbGlzdGUgw6AtZmFpcmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAxCittc2dpZCAiY2hlY2sgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAidsOpcmlmaWVyIGxhIGxpc3RlIMOgLWZhaXJlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMworbXNnaWQgInJlYXJyYW5nZSBmaXh1cC9zcXVhc2ggbGluZXMiCittc2dzdHIgInLDqWFycmFuZ2VyIGxlcyBsaWduZXMgZml4dXAvc3F1YXNoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwNQorbXNnaWQgImluc2VydCBleGVjIGNvbW1hbmRzIGluIHRvZG8gbGlzdCIKK21zZ3N0ciAiaW5zw6lyZXIgbGVzIGNvbW1hbmRlcyBleGVjIGRhbnMgbGEgbGlzdGUgw6AtZmFpcmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA2Cittc2dpZCAib250byIKK21zZ3N0ciAic3VyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwOQorbXNnaWQgInJlc3RyaWN0LXJldmlzaW9uIgorbXNnc3RyICJyZXN0cmljdC1yZXZpc2lvbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDkKK21zZ2lkICJyZXN0cmljdCByZXZpc2lvbiIKK21zZ3N0ciAicmVzdHJlaW5kcmUgbGEgcsOpdmlzaW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxMQorbXNnaWQgInNxdWFzaC1vbnRvIgorbXNnc3RyICLDqWNyYXNlci1zdXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTEyCittc2dpZCAic3F1YXNoIG9udG8iCittc2dzdHIgIsOpY3Jhc2VyIHN1ciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTQKK21zZ2lkICJ0aGUgdXBzdHJlYW0gY29tbWl0IgorbXNnc3RyICJsZSBjb21taXQgYW1vbnQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE2Cittc2dpZCAiaGVhZC1uYW1lIgorbXNnc3RyICJub20gZHUgaGVhZCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJoZWFkIG5hbWUiCittc2dzdHIgIm5vbSBkdSBoZWFkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMQorbXNnaWQgInJlYmFzZSBzdHJhdGVneSIKK21zZ3N0ciAic3RyYXTDqWdpZSBkZSByZWJhc2FnZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjIKK21zZ2lkICJzdHJhdGVneS1vcHRzIgorbXNnc3RyICJvcHRpb25zIGRlIHN0cmF0w6lnaWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIzCittc2dpZCAic3RyYXRlZ3kgb3B0aW9ucyIKK21zZ3N0ciAib3B0aW9ucyBkZSBzdHJhdMOpZ2llIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNAorbXNnaWQgInN3aXRjaC10byIKK21zZ3N0ciAic3dpdGNoLXRvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNQorbXNnaWQgInRoZSBicmFuY2ggb3IgY29tbWl0IHRvIGNoZWNrb3V0IgorbXNnc3RyICJsYSBicmFuY2hlIG91IGxlIGNvbW1pdCDDoCBleHRyYWlyZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjYKK21zZ2lkICJvbnRvLW5hbWUiCittc2dzdHIgInN1ci1sZS1ub20iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI2Cittc2dpZCAib250byBuYW1lIgorbXNnc3RyICJzdXIgbGUgbm9tIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNworbXNnaWQgImNtZCIKK21zZ3N0ciAiY21kIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNworbXNnaWQgInRoZSBjb21tYW5kIHRvIHJ1biIKK21zZ3N0ciAibGEgY29tbWFuZGUgw6AgbGFuY2VyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUzMCBidWlsdGluL3JlYmFzZS5jOjE1ODQKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHJlLXNjaGVkdWxlIGFueSBgZXhlY2AgdGhhdCBmYWlscyIKK21zZ3N0ciAicmUtcGxhbmlmaWVyIGF1dG9tYXRpcXVlbWVudCB0b3V0IGBleGVjYCBxdWkgw6ljaG91ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1NDYKK21zZ2lkICItLVtuby1dcmViYXNlLWNvdXNpbnMgaGFzIG5vIGVmZmVjdCB3aXRob3V0IC0tcmViYXNlLW1lcmdlcyIKK21zZ3N0ciAiLS1bbm8tXXJlYmFzZS1jb3VzaW5zIG4nYSBhdWN1biBlZmZldCBzYW5zIC0tcmViYXNlLW1lcmdlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICIlcyByZXF1aWVydCB1biByZWJhc2FnZSBpbnRlcmFjdGlmIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0ICdvbnRvJzogJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FjY8OpZGVyICdvbnRvJyA6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjI3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3JpZy1oZWFkOiAnJXMnIgorbXNnc3RyICJvcmlnLWhlYWQgaW52YWxpZGXCoDogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgaW52YWxpZCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogJyVzJyIKK21zZ3N0ciAiYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUgaW52YWxpZGUgaWdub3LDqcKgOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjcyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHN0b2NrZXIgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODUzCittc2dpZCAiY291bGQgbm90IGRldGVybWluZSBIRUFEIHJldmlzaW9uIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqXRlcm1pbmVyIGxhIHLDqXZpc2lvbiBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjk3NiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEKK21zZ2lkICIiCisiUmVzb2x2ZSBhbGwgY29uZmxpY3RzIG1hbnVhbGx5LCBtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgd2l0aFxuIgorIlwiZ2l0IGFkZC9ybSA8Y29uZmxpY3RlZF9maWxlcz5cIiwgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJZb3UgY2FuIGluc3RlYWQgc2tpcCB0aGlzIGNvbW1pdDogcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIi5cbiIKKyJUbyBhYm9ydCBhbmQgZ2V0IGJhY2sgdG8gdGhlIHN0YXRlIGJlZm9yZSBcImdpdCByZWJhc2VcIiwgcnVuIFwiZ2l0IHJlYmFzZSAtLSIKKyJhYm9ydFwiLiIKK21zZ3N0ciAiIgorIlLDqXNvbHZleiB0b3VzIGxlcyBjb25mbGl0cyBtYW51ZWxsZW1lbnQsIG1hcnF1ZXotbGVzIGNvbW1lIHLDqXNvbHVzIGF2ZWNcbiIKKyJcImdpdCBhZGQvcm0gPGZpY2hpZXIgZW4gY29uZmxpdD5cIiwgcHVpcyBsYW5jZXogXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJTaSB2b3VzIHByw6lmw6lyZXogc2F1dGVyIGNlIGNvbW1pdCwgbGFuY2V6IFwiZ2l0IHJlYmFzZSAtLXNraXBcIi4gUG91ciAiCisiYXJyw6p0ZXJcbiIKKyJldCByZXZlbmlyIMOgIGwnw6l0YXQgYW50w6lyaWV1ciDDoCBsYSBjb21tYW5kZSwgbGFuY2V6IFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorImdpdCBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSBwcmVwYXJpbmcgdGhlIHBhdGNoZXMgdG8gcmVwbGF5XG4iCisidGhlc2UgcmV2aXNpb25zOlxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIkFzIGEgcmVzdWx0LCBnaXQgY2Fubm90IHJlYmFzZSB0aGVtLiIKK21zZ3N0ciAiIgorIlxuIgorImdpdCBhIHJlbmNvbnRyw6kgdW5lIGVycmV1ciBsb3JzIGRlIGxhIHByw6lwYXJhdGlvbiBkZXMgY29ycmVjdGlmc1xuIgorInBvdXIgcmVqb3VlciBjZXMgcsOpdmlzaW9uc8KgOiBcbiIKKyJcbiIKKyIgICAgJXNcbiIKKyJcbiIKKyJSw6lzdWx0YXQsIGdpdCBuZSBwZXV0IHBhcyBsZXMgcmViYXNlci4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5yZWNvZ25pemVkIGVtcHR5IHR5cGUgJyVzJzsgdmFsaWQgdmFsdWVzIGFyZSBcImRyb3BcIiwgXCJrZWVwXCIsIGFuZCBcImFzayIKKyJcIi4iCittc2dzdHIgIiIKKyJ0eXBlIHZpZGUgbm9uIGNvbm51ICclcyfCoDsgbGVzIHZhbGV1cnMgdmFsaWRlcyBzb250IFwiZHJvcFwiIChhYmFuZG9ubmVyKSwgIgorIlwia2VlcFwiIChnYXJkZXIpIGV0IFwiYXNrXCIgKGRlbWFuZGVyKS4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXNcbiIKKyJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuXG4iCisiU2VlIGdpdC1yZWJhc2UoMSkgZm9yIGRldGFpbHMuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxicmFuY2g+J1xuIgorIlxuIgorbXNnc3RyICIiCisiJXNcbiIKKyJWZXVpbGxleiBzcMOpY2lmaWVyIHN1ciBxdWVsbGUgYnJhbmNoZSB2b3VzIHNvdWhhaXRlciByZWJhc2VyLlxuIgorIlZvaXIgZ2l0LXJlYmFzZSgxKSBwb3VyIHBsdXMgZGUgZMOpdGFpbHMuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxicmFuY2hlPidcbiIKKyJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiU2kgdm91cyBzb3VoYWl0ZXogaW5kaXF1ZXIgbCdpbmZvcm1hdGlvbiBkZSBzdWl2aSBkaXN0YW50IHBvdXIgY2V0dGUgIgorImJyYW5jaGUsIHZvdXMgcG91dmV6IGxlIGZhaXJlIGF2ZWPCoDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoZT4gJXNcbiIKKyJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ3Cittc2dpZCAiZXhlYyBjb21tYW5kcyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAibGVzIGNvbW1hbmRlcyBleGVjIG5lIHBldXQgcGFzIGNvbnRlbmlyIGRlIHJldG91ciDDoCBsYSBsaWduZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDUxCittc2dpZCAiZW1wdHkgZXhlYyBjb21tYW5kIgorbXNnc3RyICJjb21tYW5kZSBleGVjIHZpZGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MQorbXNnaWQgInJlYmFzZSBvbnRvIGdpdmVuIGJyYW5jaCBpbnN0ZWFkIG9mIHVwc3RyZWFtIgorbXNnc3RyICJyZWJhc2VyIHN1ciBsYSBicmFuY2hlICVzIGF1IGxpZXUgZGUgbGEgYnJhbmNoZSBhbW9udCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDgzCittc2dpZCAidXNlIHRoZSBtZXJnZS1iYXNlIG9mIHVwc3RyZWFtIGFuZCBicmFuY2ggYXMgdGhlIGN1cnJlbnQgYmFzZSIKK21zZ3N0ciAiIgorInV0aWxpc2VyIGxhIGJhc2UgZGUgZnVzaW9uIGRlIGwnYW1vbnQgZXQgbGEgYnJhbmNoZSBjb21tZSBiYXNlIGFjdHVlbGxlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODUKK21zZ2lkICJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIgorbXNnc3RyICJwZXJtZXR0cmUgbGUgbGFuY2VtZW50IGR1IGNyb2NoZXQgcHJlLXJlYmFzZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg3Cittc2dpZCAiYmUgcXVpZXQuIGltcGxpZXMgLS1uby1zdGF0IgorbXNnc3RyICLDqnRyZSBzaWxlbmNpZXV4LiBpbXBsaXF1ZSAtLW5vLXN0YXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MworbXNnaWQgImRvIG5vdCBzaG93IGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAibmUgcGFzIGFmZmljaGVyIHVuIGRpZmZzdGF0IGRlIGNlIHF1aSBhIGNoYW5nw6kgZW4gYW1vbnQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5NgorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnk6IGxpbmUgdG8gZWFjaCBjb21taXQiCittc2dzdHIgImFqb3V0ZXIgdW5lIGxpZ25lIFNpZ25lZC1vZmYtYnkgw6AgY2hhcXVlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDk4IGJ1aWx0aW4vcmViYXNlLmM6MTUwMiBidWlsdGluL3JlYmFzZS5jOjE1MDQKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBhbSciCittc2dzdHIgInBhc3PDqSBqdXNxdSfDoCAnZ2l0IGFtJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTA2IGJ1aWx0aW4vcmViYXNlLmM6MTUwOAorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFwcGx5JyIKK21zZ3N0ciAicGFzc8OpIGp1c3F1J8OgIGdpdC1hcHBseSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTEwIGJ1aWx0aW4vcmViYXNlLmM6MTUxMworbXNnaWQgImNoZXJyeS1waWNrIGFsbCBjb21taXRzLCBldmVuIGlmIHVuY2hhbmdlZCIKK21zZ3N0ciAicGljb3JlciB0b3VzIGxlcyBjb21taXRzLCBtw6ptZSBzYW5zIG1vZGlmaWFudCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTE1Cittc2dpZCAiY29udGludWUiCittc2dzdHIgImNvbnRpbnVlciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTE4Cittc2dpZCAic2tpcCBjdXJyZW50IHBhdGNoIGFuZCBjb250aW51ZSIKK21zZ3N0ciAic2F1dGVyIGxlIHBhdGNoIGNvdXJhbnQgZXQgY29udGludWVyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjAKK21zZ2lkICJhYm9ydCBhbmQgY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2giCittc2dzdHIgImFiYW5kb25uZXIgZXQgZXh0cmFpcmUgbGEgYnJhbmNoZSBkJ29yaWdpbmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyMworbXNnaWQgImFib3J0IGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMiCittc2dzdHIgImFiYW5kb25uZSBtYWlzIGdhcmRlIEhFQUQgb8O5IGlsIGVzdCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTI0Cittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IGR1cmluZyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UiCittc2dzdHIgIsOpZGl0ZXIgbGEgbGlzdGUgw6AgZmFpcmUgbG9ycyBkJ3VuIHJlYmFzYWdlIGludGVyYWN0aWYiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNworbXNnaWQgInNob3cgdGhlIHBhdGNoIGZpbGUgYmVpbmcgYXBwbGllZCBvciBtZXJnZWQiCittc2dzdHIgImFmZmljaGVyIGxlIHBhdGNoIGVuIGNvdXJzIGQnYXBwbGljYXRpb24gb3UgZGUgZnVzaW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzAKK21zZ2lkICJ1c2UgYXBwbHkgc3RyYXRlZ2llcyB0byByZWJhc2UiCittc2dzdHIgInV0aWxpc2VyIGRlcyBzdHJhdMOpZ2llcyBkJ2FwcGxpY2F0aW9uIHBvdXIgcmViYXNlciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTM0Cittc2dpZCAidXNlIG1lcmdpbmcgc3RyYXRlZ2llcyB0byByZWJhc2UiCittc2dzdHIgInV0aWxpc2VyIGRlcyBzdHJhdMOpZ2llcyBkZSBmdXNpb24gcG91ciByZWJhc2VyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzgKK21zZ2lkICJsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbGlzdCBvZiBjb21taXRzIHRvIHJlYmFzZSIKK21zZ3N0ciAibGFpc3NlciBsJ3V0aWxpc2F0ZXVyIMOpZGl0ZXIgbGEgbGlzdGUgZGVzIGNvbW1pdHMgw6AgcmViYXNlciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTQyCittc2dpZCAiKERFUFJFQ0FURUQpIHRyeSB0byByZWNyZWF0ZSBtZXJnZXMgaW5zdGVhZCBvZiBpZ25vcmluZyB0aGVtIgorbXNnc3RyICIoRMOJQ09OU0VJTEzDiSkgZXNzYXllciBkZSByZWNyw6llciBsZXMgZnVzaW9ucyBhdSBsaWV1IGRlIGxlcyBpZ25vcmVyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NDcKK21zZ2lkICJob3cgdG8gaGFuZGxlIGNvbW1pdHMgdGhhdCBiZWNvbWUgZW1wdHkiCittc2dzdHIgImNvbW1lbnQgZ8OpcmVyIGxlcyBjb21taXRzIHF1aSBkZXZpZW5uZW50IHZpZGVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NTQKK21zZ2lkICJtb3ZlIGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHNxdWFzaCEvZml4dXAhIHVuZGVyIC1pIgorbXNnc3RyICJkw6lwbGFjZSBsZXMgY29tbWl0cyBxdWkgY29tbWVuY2VudCBwYXIgc3F1YXNoIS9maXh1cCEgc291cyAtaSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTYwCittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciIKK21zZ3N0ciAicmVtaXNlciBldCByw6lhcHBsaXF1ZXIgYXV0b21hdGlxdWVtZW50IGF2YW50IGV0IGFwcsOocyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTYyCittc2dpZCAiYWRkIGV4ZWMgbGluZXMgYWZ0ZXIgZWFjaCBjb21taXQgb2YgdGhlIGVkaXRhYmxlIGxpc3QiCittc2dzdHIgImFqb3V0ZXIgbGVzIGxpZ25lcyBleGVjIGFwcsOocyBjaGFxdWUgY29tbWl0IGRlIGxhIGxpc3RlIMOpZGl0YWJsZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTY2Cittc2dpZCAiYWxsb3cgcmViYXNpbmcgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICJhdXRvcmlzZXIgbGVzIGNvbW1pdHMgZGUgcmViYXNhZ2UgYXZlYyBkZXMgbWVzc2FnZXMgdmlkZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3MAorbXNnaWQgInRyeSB0byByZWJhc2UgbWVyZ2VzIGluc3RlYWQgb2Ygc2tpcHBpbmcgdGhlbSIKK21zZ3N0ciAiZXNzYXllciBkZSByZWJhc2VyIGxlcyBmdXNpb25zIGF1IGxpZXUgZGUgbGVzIGdhcmRlciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTczCittc2dpZCAidXNlICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcgdG8gcmVmaW5lIHVwc3RyZWFtIgorbXNnc3RyICJ1dGlsaXNlciAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIHBvdXIgcmFmZmluZXIgbCdhbW9udCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTc1Cittc2dpZCAidXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAidXRpbGlzZXIgbGEgc3RyYXTDqWdpZSBkZSBmdXNpb24gaW5kaXF1w6llIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzcgYnVpbHRpbi9yZXZlcnQuYzoxMTUKK21zZ2lkICJvcHRpb24iCittc2dzdHIgIm9wdGlvbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTc4Cittc2dpZCAicGFzcyB0aGUgYXJndW1lbnQgdGhyb3VnaCB0byB0aGUgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInBhc3NlciBsZXMgYXJndW1lbnRzIGp1c3F1J8OgIGxhIHN0cmF0w6lnaWUgZGUgZnVzaW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1ODEKK21zZ2lkICJyZWJhc2UgYWxsIHJlYWNoYWJsZSBjb21taXRzIHVwIHRvIHRoZSByb290KHMpIgorbXNnc3RyICJyZWJhc2VyIHRvdXMgbGVzIG9iamV0cyBpbmF0dGVpZ25hYmxlcyBkZXB1aXMgbGVzIHJhY2luZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU5OAorbXNnaWQgIiIKKyJ0aGUgcmViYXNlLnVzZUJ1aWx0aW4gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkIVxuIgorIlNlZSBpdHMgZW50cnkgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisibGVzIHN1cHBvcnQgZGUgcmViYXNlLnVzZUJ1aWx0aW4gYSDDqXTDqSBzdXBwcmltw6kgIVxuIgorIlZvaXIgc29uIGVudHLDqWUgZGFucyAnZ2l0IGhlbHAgY29uZmlnJyBwb3VyIHBsdXMgZGUgZMOpdGFpbHMuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDQKK21zZ2lkICJJdCBsb29rcyBsaWtlICdnaXQgYW0nIGlzIGluIHByb2dyZXNzLiBDYW5ub3QgcmViYXNlLiIKK21zZ3N0ciAiSWwgc2VtYmxlIHF1ZSAnZ2l0LWFtJyBzb2l0IGVuIGNvdXJzLiBJbXBvc3NpYmxlIGRlIHJlYmFzZXIuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NDUKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyBpcyBkZXByZWNhdGVkLiBVc2UgLS1yZWJhc2UtbWVyZ2VzIGluc3RlYWQuIgorbXNnc3RyICIiCisiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyBlc3QgZMOpY29uc2VpbGzDqS4gVXRpbGlzZXogLS1yZWJhc2UtbWVyZ2VzIMOgIGxhICIKKyJwbGFjZS4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1MAorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1vbnRvJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb21iaW5lciAnLS1rZWVwLWJhc2UnIGF2ZWMgJy0tb250byciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1MgorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1yb290JyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb21iaW5lciAnLS1rZWVwLWJhc2UnIGF2ZWMgJy0tcm9vdCciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1NgorbXNnaWQgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCittc2dzdHIgIlBhcyBkZSByZWJhc2FnZSBlbiBjb3VycyA/IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NjAKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIiIKKyJMJ2FjdGlvbiAtLWVkaXQtdG9kbyBwZXV0IHNldWxlbWVudCDDqnRyZSB1dGlsaXPDqWUgbG9ycyBkJ3VuIHJlYmFzYWdlICIKKyJpbnRlcmFjdGlmLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjgzCittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsaXJlIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY5NQorbXNnaWQgIiIKKyJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKyJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKK21zZ3N0ciAiIgorIlZvdXMgZGV2ZXogw6lkaXRlciB0b3VzIGxlcyBjb25mbGl0cyBkZSBmdXNpb24gZXRcbiIKKyJsZXMgbWFycXVlciBjb21tZSByw6lzb2x1cyBhdmVjIGdpdCBhZGQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTcxNAorbXNnaWQgImNvdWxkIG5vdCBkaXNjYXJkIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgc3VwcHJpbWVyIGxlcyBjaGFuZ2VtZW50cyBkZSBsJ2FyYnJlIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTczMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbW92ZSBiYWNrIHRvICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHJldmVuaXIgw6AgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJXMgZGlyZWN0b3J5LCBhbmRcbiIKKyJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorImNhc2UsIHBsZWFzZSB0cnlcbiIKKyJcdCVzXG4iCisiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZVxuIgorIlx0JXNcbiIKKyJhbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZ1xuIgorInZhbHVhYmxlIHRoZXJlLlxuIgorbXNnc3RyICIiCisiSWwgc2VtYmxlIHF1J2lsIHkgYWl0IGTDqWrDoCB1biByw6lwZXJ0b2lyZSAlcywgZXQgamUgbWUgZGVtYW5kZVxuIgorInNpIHVuIGF1dHJlIHJlYmFzYWdlIG4nZXN0IHBhcyBkw6lqw6AgZW4gY291cnMuIFNpIGMnZXN0IGxlIGNhcyxcbiIKKyJlc3NheWV6XG4iCisiXHQlc1xuIgorIlNpbm9uLCBlc3NheWV6XG4iCisiXHQlc1xuIgorInB1aXMgcmVsYW5jZXotbW9pIMOgIG5vdXZlYXUuICBKZSBtJ2FycsOqdGUgYXUgY2FzIG/DuSB2b3VzIGF1cmlleiBxdWVscXVlICIKKyJjaG9zZVxuIgorImQnaW1wb3J0YW50IGljaS5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODA2Cittc2dpZCAic3dpdGNoIGBDJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJsJ29wdGlvbiBgQycgYXR0ZW5kIHVuIHZhbGV1ciBudW3DqXJpcXVlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBtb2RlOiAlcyIKK21zZ3N0ciAibW9kZSBpbmNvbm51wqA6ICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NjkKK21zZ2lkICItLXN0cmF0ZWd5IHJlcXVpcmVzIC0tbWVyZ2Ugb3IgLS1pbnRlcmFjdGl2ZSIKK21zZ3N0ciAiLS1zdHJhdGVneSByZXF1aWVydCAtLW1lcmdlIG91IC0taW50ZXJhY3RpdmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5OQorbXNnaWQgImNhbm5vdCBjb21iaW5lIGFwcGx5IG9wdGlvbnMgd2l0aCBtZXJnZSBvcHRpb25zIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSBjb21iaW5lciBsZXMgb3B0aW9ucyBkJ2FwcGxpY2F0aW9uIGF2ZWMgbGVzIG9wdGlvbnMgZGUgZnVzaW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biByZWJhc2UgYmFja2VuZDogJXMiCittc2dzdHIgImJhY2tlbmQgZGUgcmViYXNhZ2UgaW5jb25udSA6ICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MzcKK21zZ2lkICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMgcmVxdWlyZXMgLS1leGVjIG9yIC0taW50ZXJhY3RpdmUiCittc2dzdHIgIi0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyByZXF1aWVydCAtLWV4ZWMgb3UgLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTU3Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNvbWJpbmVyICctLXByZXNlcnZlLW1lcmdlcycgYXZlYyAnLS1yZWJhc2UtbWVyZ2VzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTYxCittc2dpZCAiIgorImVycm9yOiBjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyciCittc2dzdHIgIiIKKyJlcnJldXLCoDogaW1wb3NzaWJsZSBkZSBjb21iaW5lciAnLS1wcmVzZXJ2ZS1tZXJnZXMnIGF2ZWMgJy0tcmVzY2hlZHVsZS0iCisiZmFpbGVkLWV4ZWMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJXMnIgorbXNnc3RyICJhbW9udCBpbnZhbGlkZSAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5OTEKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIG5ldyByb290IGNvbW1pdCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjcsOpZXIgdW4gbm91dmVhdSBjb21taXQgcmFjaW5lIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIHdpdGggYnJhbmNoIgorbXNnc3RyICInJXMnOiBleGFjdGVtZW50IHVuZSBiYXNlIGRlIGZ1c2lvbiBuw6ljZXNzYWlyZSBhdmVjIHVuZSBicmFuY2hlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIgorbXNnc3RyICInJXMnOiBleGFjdGVtZW50IHVuZSBiYXNlIGRlIGZ1c2lvbiBuw6ljZXNzYWlyZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0ICclcyciCittc2dzdHIgIm5lIHBvaW50ZSBwYXMgc3VyIHVuZSB2YWxpZGF0aW9uIHZhbGlkZSA6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2gvY29tbWl0ICclcyciCittc2dzdHIgImZhdGFsIDogcGFzIGRlIGJyYW5jaGUgb3UgY29tbWl0ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA2MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVmOiAlcyIKK21zZ3N0ciAiUsOpZsOpcmVuY2UgaW5leGlzdGFudGXCoDogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA3MworbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgdG8gYSByZXZpc2lvbiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgbGUgY29tbWl0IEhFQUQgdmVycyB1biByw6l2aXNpb24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjExMQorbXNnaWQgIkNhbm5vdCBhdXRvc3Rhc2giCittc2dzdHIgIkF1dG9yZW1pc2FnZSBpbXBvc3NpYmxlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCBzdGFzaCByZXNwb25zZTogJyVzJyIKK21zZ3N0ciAicsOpcG9uc2UgZGUgcmVtaXNhZ2UgaW5hdHRlbmR1ZcKgOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIkltcG9zc2libGUgZGUgY3LDqWVyIGxlIHLDqXBlcnRvaXJlIHBvdXIgJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYXV0b3N0YXNoOiAlc1xuIgorbXNnc3RyICJBdXRvcmVtaXNhZ2UgY3LDqcOpIDogJXNcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTI2Cittc2dpZCAiY291bGQgbm90IHJlc2V0IC0taGFyZCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6lpbml0aWFsaXNlciAtLWhhcmQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEzNQorbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIlZldWlsbGV6IGxlcyB2YWxpZGVyIG91IGxlcyByZW1pc2VyLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzd2l0Y2ggdG8gJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgYmFzY3VsZXIgdmVycyAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTgwCittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLiIKK21zZ3N0ciAiSEVBRCBlc3Qgw6Agam91ci4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAlcyBpcyB1cCB0byBkYXRlLlxuIgorbXNnc3RyICJMYSBicmFuY2hlIGNvdXJhbnRlICVzIGVzdCDDoCBqb3VyLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxOTAKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICJIRUFEIGVzdCDDoCBqb3VyLCByZWJhc2FnZSBmb3Jjw6kuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC5cbiIKK21zZ3N0ciAiTGEgYnJhbmNoZSBjb3VyYW50ZSAlcyBlc3Qgw6Agam91ciwgcmViYXNhZ2UgZm9yY8OpLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMDAKK21zZ2lkICJUaGUgcHJlLXJlYmFzZSBob29rIHJlZnVzZWQgdG8gcmViYXNlLiIKK21zZ3N0ciAiTGUgY3JvY2hldCBwcmUtcmViYXNlIGEgcmVmdXPDqSBkZSByZWJhc2VyLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgdG8gJXM6XG4iCittc2dzdHIgIkNoYW5nZW1lbnRzIHZlcnMgJXMgOlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIgorbXNnc3RyICJDaGFuZ2VtZW50cyBkZSAlcyBzdXIgJXMgOlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uXG4iCittc2dzdHIgIiIKKyJSZW1ib2JpbmFnZSBwcsOpYWxhYmxlIGRlIGhlYWQgcG91ciBwb3V2b2lyIHJlam91ZXIgdm90cmUgdHJhdmFpbCBwYXItIgorImRlc3N1cy4uLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyNDQKK21zZ2lkICJDb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIkltcG9zc2libGUgZGUgZMOpdGFjaGVyIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAlcyB0byAlcy5cbiIKK21zZ3N0ciAiQXZhbmNlIHJhcGlkZSBkZSAlcyBzdXIgJXMuXG4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MzMKK21zZ2lkICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKK21zZ3N0ciAiZ2l0IHJlY2VpdmUtcGFjayA8csOpcGVydG9pcmUtZ2l0PiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4MjEKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeVxuIgorImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisid2l0aCB3aGF0IHlvdSBwdXNoZWQsIGFuZCB3aWxsIHJlcXVpcmUgJ2dpdCByZXNldCAtLWhhcmQnIHRvIG1hdGNoXG4iCisidGhlIHdvcmsgdHJlZSB0byBIRUFELlxuIgorIlxuIgorIllvdSBjYW4gc2V0IHRoZSAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvXG4iCisiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWVcbiIKKyJvdGhlciB3YXkuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXRcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyJQYXIgZMOpZmF1dCwgbWV0dHJlIMOgIGpvdXIgbGEgYnJhbmNoZSBhY3R1ZWxsZSBkYW5zIHVuIGTDqXDDtHQgbm9uLW51XG4iCisiZXN0IHLDqWZ1c8OpIHBhcmNlIHF1ZSBjZWxhIHJlbmRyYWl0IGwnaW5kZXggZXQgbGEgY29waWUgZGUgdHJhdmFpbFxuIgorImluY29uc2lzdGFudHMgYXZlYyBjZSBxdWUgdm91cyBhdmV6IHBvdXNzw6kgZXQgbsOpY2Vzc2l0ZXJhaXRcbiIKKyInZ2l0IHJlc2V0IC0taGFyZCcgcG91ciByw6lhbGlnbmVyIGxhIGNvcGllIGRlIHRyYXZhaWwgYXZlYyBIRUFELlxuIgorIlxuIgorIlZvdXMgcG91dmV6IHLDqWdsZXIgwqvCoHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2jCoMK7IMOgICdpZ25vcmUnIG91XG4iCisiJ3dhcm4nIGRhbnMgbGUgZMOpcMO0dCBkaXN0YW50IHBvdXIgcGVybWV0dHJlIGxhIHBvdXNzw6llIGRhbnMgbGFcbiIKKyJicmFuY2hlIGFjdHVlbGxlwqA7IGNlcGVuZGFudCwgY2Ugbidlc3QgcGFzIHJlY29tbWFuZMOpIMOgIG1vaW5zIHF1ZVxuIgorInZvdXMgYXlleiBkw6lqw6AgbWlzIMOgIGpvdXIgc2EgY29waWUgZGUgdHJhdmFpbCBwYXIgdW5lIG1veWVuIGTDqXRvdXJuw6lcbiIKKyJwb3VyIGNvcnJlc3BvbmRyZSDDoCBjZSBxdWUgdm91cyBhdmV6IHBvdXNzw6kuXG4iCisiXG4iCisiUG91ciDDqWxpbWluZXIgY2UgbWVzc2FnZSBldCBjb25zZXJ2ZXIgbGUgY29tcG9ydGVtZW50IHBhciBkw6lmYXV0LFxuIgorInLDqWdsZXogwqvCoHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2jCoMK7IMOgICdyZWZ1c2UnLiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4NDEKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGRlbmllZCwgYmVjYXVzZSB0aGUgbmV4dFxuIgorIidnaXQgY2xvbmUnIHdvbid0IHJlc3VsdCBpbiBhbnkgZmlsZSBjaGVja2VkIG91dCwgY2F1c2luZyBjb25mdXNpb24uXG4iCisiXG4iCisiWW91IGNhbiBzZXQgJ3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG9cbiIKKyInd2Fybicgb3IgJ2lnbm9yZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IGRlbGV0aW5nIHRoZVxuIgorImN1cnJlbnQgYnJhbmNoLCB3aXRoIG9yIHdpdGhvdXQgYSB3YXJuaW5nIG1lc3NhZ2UuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorIlBhciBkw6lmYXV0LCBzdXBwcmltZXIgbGEgYnJhbmNoZSBhY3R1ZWxsZSBlc3QgcmVmdXPDqSBwYXJjZSBxdWUgbGVcbiIKKyJwcm9jaGFpbiAnZ2l0IGNsb25lJyBuJ2V4dHJhaXJhIGF1Y3VuIGZpY2hpZXIgZXQgY2F1c2VyIGRlIGxhIGNvbmZ1c2lvbi5cbiIKKyJcbiIKKyJWb3VzIHBvdXZleiByw6lnbGVyIMKrwqByZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50wqDCuyDDoCAnd2Fybicgb3UgJ2lnbm9yZSdcbiIKKyJkYW5zIGxlIGTDqXDDtHQgZGlzdGFudCBwb3VyIHBlcm1ldHRyZSBsYSBzdXBwcmVzc2lvbiBsYSBicmFuY2hlIGFjdHVlbGxlXG4iCisiYXZlYyBvdSBzYW5zIG1lc3NhZ2UgZCdhdmVydGlzc2VtZW50LlxuIgorIlxuIgorIlBvdXIgw6lsaW1pbmVyIGNlIG1lc3NhZ2UsIHLDqWdsZXotbGUgw6AgJ3JlZnVzZScuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5MzgKK21zZ2lkICJxdWlldCIKK21zZ3N0ciAicXVpZXQiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MgorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIgorbXNnc3RyICJWb3VzIGRldmV6IHNww6ljaWZpZXIgdW4gcsOpcGVydG9pcmUuIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjE3Cittc2dpZCAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT08dGltZT5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT5dIFstLSIKKyJyZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGxdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9PGRhdGU+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PGRhdGU+XSBbLS0iCisicmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gWy0tYWxsXSAiCisiPHLDqWZlcmVuY2VzPi4uLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoyMgorbXNnaWQgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorImdpdCByZWZsb2cgZGVsZXRlIFstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSAiCisiPHLDqWbDqXJlbmNlcz4uLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjUKK21zZ2lkICJnaXQgcmVmbG9nIGV4aXN0cyA8cmVmPiIKK21zZ3N0ciAiZ2l0IHJlZmxvZyBleGlzdHMgPHLDqWbDqXJlbmNlPiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo1NjggYnVpbHRpbi9yZWZsb2cuYzo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIiclcycgbidlc3QgcGFzIHVuIGhvcm9kYXRhZ2UgdmFsaWRlIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nIHJlYWNoYWJsZSBvYmplY3RzLi4uIgorbXNnc3RyICJNYXJxdWFnZSBkZXMgb2JqZXRzIGluYWNjZXNzaWJsZXMuLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyBub3doZXJlISIKK21zZ3N0ciAiJXMgbmUgcG9pbnRlIG51bGxlIHBhcnTCoCEiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6Njk2Cittc2dpZCAibm8gcmVmbG9nIHNwZWNpZmllZCB0byBkZWxldGUiCittc2dzdHIgInBhcyBkZSBqb3VybmFsIGRlIHLDqWbDqXJlbmNlcyDDoCBzdXBwcmltZXIgc3DDqWNpZmnDqSIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmVmbG9nOiAlcyIKK21zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdW4gam91cm5hbCBkZSByw6lmw6lyZW5jZXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlZmxvZyBmb3IgJyVzJyIKK21zZ3N0ciAicGFzIGRlIGpvdXJuYWwgZGUgcsOpZsOpcmVuY2VzIHBvdXIgJyVzJyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWYgZm9ybWF0OiAlcyIKK21zZ3N0ciAiZm9ybWF0IGRlIHLDqWbDqXJlbmNlIGludmFsaWRlwqA6ICVzIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc2NQorbXNnaWQgImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iCittc2dzdHIgImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOAorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2hlPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bm9tPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOSBidWlsdGluL3JlbW90ZS5jOjM5Cittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgImdpdCByZW1vdGUgcmVuYW1lIDxhbmNpZW5uZT4gPG5vdXZlbGxlPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMCBidWlsdGluL3JlbW90ZS5jOjQ0Cittc2dpZCAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbW92ZSA8bm9tPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMSBidWlsdGluL3JlbW90ZS5jOjQ5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bm9tPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaGU+KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMgorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxub20+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzCittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxub20+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0Cittc2dpZCAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3JvdXA+IHwgPHJlbW90ZT4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3JvdXBlPiB8ICIKKyI8ZGlzdGFudGU+KS4uLl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjUKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bm9tPiA8YnJhbmNoZT4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjYgYnVpbHRpbi9yZW1vdGUuYzo3NQorbXNnaWQgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5vbT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjcgYnVpbHRpbi9yZW1vdGUuYzo4MAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxub20+IDxub3V2ZWxsZS1VUkw+IFs8YW5jaWVubmUtVVJMPl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjggYnVpbHRpbi9yZW1vdGUuYzo4MQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtZT4gPG5ld3VybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bm9tPiA8bm91dmVsbGUtVVJMPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOSBidWlsdGluL3JlbW90ZS5jOjgyCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxub20+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjM0Cittc2dpZCAiZ2l0IHJlbW90ZSBhZGQgWzxvcHRpb25zPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bm9tPiA8VVJMPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5vbT4gPGJyYW5jaGU+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU1Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bm9tPiA8YnJhbmNoZT4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjAKK21zZ2lkICJnaXQgcmVtb3RlIHNob3cgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNob3cgWzxvcHRpb25zPl0gPG5vbT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjUKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bm9tPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MAorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwZT4gfCA8ZGlzdGFudGU+XS4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAiTWlzZSDDoCBqb3VyIGRlICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMQorbXNnaWQgIiIKKyItLW1pcnJvciBpcyBkYW5nZXJvdXMgYW5kIGRlcHJlY2F0ZWQ7IHBsZWFzZVxuIgorIlx0IHVzZSAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoIGluc3RlYWQiCittc2dzdHIgIiIKKyItLW1pcnJvciBlc3QgZGFuZ2VyZXV4IGV0IG9ic29sw6h0ZSA7IG1lcmNpXG4iCisiXHQgZCd1dGlsaXNlciAtLW1pcnJvcj1mZXRjaCBvdSAtLW1pcnJvcj1wdXNoIMOgIGxhIHBsYWNlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50IG1pcm9pciBpbmNvbm51IDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY0Cittc2dpZCAiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIKK21zZ3N0ciAicmFwYXRyaWVyIGxlcyBicmFuY2hlcyBkaXN0YW50ZXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2Cittc2dpZCAiaW1wb3J0IGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMgd2hlbiBmZXRjaGluZyIKK21zZ3N0ciAiIgorImltcG9ydGVyIHRvdXRlcyBsZXMgw6l0aXF1ZXR0ZXMgZXQgbGVzIG9iamV0cyBhc3NvY2nDqXMgbG9ycyBkdSByYXBhdHJpZW1lbnQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY5Cittc2dpZCAib3IgZG8gbm90IGZldGNoIGFueSB0YWcgYXQgYWxsICgtLW5vLXRhZ3MpIgorbXNnc3RyICJvdSBuZSByYXBhdHJpZXIgYXVjdW5lIMOpdGlxdWV0dGUgKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcxCittc2dpZCAiYnJhbmNoKGVzKSB0byB0cmFjayIKK21zZ3N0ciAiYnJhbmNoZShzKSDDoCBzdWl2cmUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcyCittc2dpZCAibWFzdGVyIGJyYW5jaCIKK21zZ3N0ciAiYnJhbmNoZSBtYcOudHJlc3NlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3NAorbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICIiCisicGFyYW3DqXRyZXIgbGEgZGlzdGFudGUgY29tbWUgbWlyb2lyIHBvdXIgcG91c3NlciBvdSBwb3VyIHJhcGF0cmllciBkZXB1aXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg2Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAic3DDqWNpZmllciB1bmUgYnJhbmNoZSBtYcOudHJlc3NlIG4nYSBwYXMgZGUgc2VucyBhdmVjIC0tbWlycm9yIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4OAorbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgIiIKKyJzcMOpY2lmaWVyIGxlcyBicmFuY2hlcyDDoCBzdWl2cmUgbidhIGRlIHNlbnMgcXUnYXZlYyBkZXMgbWlyb2lycyBkZSAiCisicmFwYXRyaWVtZW50IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5NSBidWlsdGluL3JlbW90ZS5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJsYSBkaXN0YW50ZSAlcyBleGlzdGUgZMOpasOgLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTkgYnVpbHRpbi9yZW1vdGUuYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIKK21zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdW4gbm9tIHZhbGlkZSBkZSBkaXN0YW50ZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHBhcmFtw6l0cmVyIGxhIG1hw650cmVzc2UgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGQnb2J0ZW5pciB1bmUgY29ycmVzcG9uZGFuY2UgZGlzdGFudGUgcG91ciBsYSBzcMOpY2lmaWNhdGlvbiBkZSAiCisicsOpZsOpcmVuY2UgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDUzIGJ1aWx0aW4vcmVtb3RlLmM6NDYxCittc2dpZCAiKG1hdGNoaW5nKSIKK21zZ3N0ciAiKGNvcnJlc3BvbmQpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ2NQorbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICIoc3VwcHJpbWVyKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYXNzaWduZXIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAlcyBjb25maWd1cmF0aW9uIHJlbW90ZS5wdXNoRGVmYXVsdCBpbjpcbiIKKyJcdCVzOiVkXG4iCisibm93IG5hbWVzIHRoZSBub24tZXhpc3RlbnQgcmVtb3RlICclcyciCittc2dzdHIgIiIKKyJMYSBjb25maWd1cmF0aW9uICVzIHJlbW90ZS5wdXNoRGVmYXVsdCBkYW5zwqA6XG4iCisiXHQlcyVkXG4iCisibm9tbWUgw6AgcHLDqXNlbnQgbGUgZGlzdGFudCBpbmV4aXN0YW50ICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njg5IGJ1aWx0aW4vcmVtb3RlLmM6ODMyIGJ1aWx0aW4vcmVtb3RlLmM6OTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAnJXMnIgorbXNnc3RyICJQYXMgZGUgc2VydmV1ciByZW1vdGXCoDogJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIkltcG9zc2libGUgZGUgcmVub21tZXIgbGEgc2VjdGlvbiBkZSBjb25maWd1cmF0aW9uICclcycgZW4gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisiUGFzIGRlIG1pc2Ugw6Agam91ciBkdSByZWZzcGVjIGRlIHJhcGF0cmllbWVudCBxdWkgbidlc3QgcGFzIHBhciBkw6lmYXV0XG4iCisiXHQlc1xuIgorIlx0VmV1aWxsZXogbWV0dHJlIMOgIGpvdXIgbGEgY29uZmlndXJhdGlvbiBtYW51ZWxsZW1lbnQgc2kgbsOpY2Vzc2FpcmUuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjc2NgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIHN1cHByZXNzaW9uIGRlICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgY3LDqWF0aW9uIGRlICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODc2Cittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIiIKKyJOb3RlIDogVW5lIGJyYW5jaGUgZW4gZGVob3JzIGRlIHJlZnMvcmVtb3Rlcy8gbidhIHBhcyDDqXTDqSBzdXBwcmltw6llIDtcbiIKKyJwb3VyIGxhIHN1cHByaW1lciwgdXRpbGlzZXogOiIKK21zZ3N0clsxXSAiIgorIk5vdGUgOiBQbHVzaWV1cnMgYnJhbmNoZXMgZW4gZGVob3JzIGRlIHJlZnMvcmVtb3Rlcy8gbidvbnQgcGFzIMOpdMOpICIKKyJzdXBwcmltw6llcyA7XG4iCisicG91ciBsZXMgc3VwcHJpbWVyLCB1dGlsaXNleiA6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciCittc2dzdHIgIkltcG9zc2libGUgZGUgc3VwcHJpbWVyIGxhIHNlY3Rpb24gZGUgY29uZmlndXJhdGlvbiAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5MworIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiBub3V2ZWF1IChsZSBwcm9jaGFpbiByYXBhdHJpZW1lbnQgKGZldGNoKSBzdG9ja2VyYSBkYW5zIHJlbW90ZXMvJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5NgorbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIgc3VpdmkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTk4Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiBkw6lwYXNzw6kgKHV0aWxpc2V6ICdnaXQgcmVtb3RlIHBydW5lJyBwb3VyIHN1cHByaW1lcikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwMAorbXNnaWQgIiA/Pz8iCittc2dzdHIgIiA/Pz8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgImJyYW5jaC4lcy5tZXJnZSBpbnZhbGlkZSA7IG5lIHBldXQgcGFzIHJlYmFzZXIgc3VyIHBsdXMgZCd1bmUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAicmViYXNlIGRlIG1hbmnDqHJlIGludGVyYWN0aXZlIHN1ciBsYSBkaXN0YW50ZSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSAod2l0aCBtZXJnZXMpIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJyZWJhc2UgZGUgbWFuacOocmUgaW50ZXJhY3RpdmUgKGF2ZWMgZnVzaW9ucykgc3VyIGxhIGRpc3RhbnRlICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAicmViYXNlIHN1ciBsYSBkaXN0YW50ZSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiBmdXNpb25uZSBhdmVjIGxhIGRpc3RhbnRlICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICJmdXNpb25uZSBhdmVjIGxhIGRpc3RhbnRlICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS0qcyAgICBhbmQgd2l0aCByZW1vdGUgJXNcbiIKK21zZ3N0ciAiJS0qcyAgICBldCBhdmVjIGxhIGRpc3RhbnRlICVzXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEwOAorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAiY3LDqWVyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTEKK21zZ2lkICJkZWxldGUiCittc2dzdHIgInN1cHByaW1lciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE1Cittc2dpZCAidXAgdG8gZGF0ZSIKK21zZ3N0ciAiw6Agam91ciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE4Cittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAicGV1dCDDqnRyZSBtaXMgw6Agam91ciBlbiBhdmFuY2UgcmFwaWRlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjEKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAibGUgbG9jYWwgbidlc3QgcGFzIMOgIGpvdXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyBmb3JjZSB2ZXJzICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIHBvdXNzZSB2ZXJzICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgZm9yY2UgdmVycyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgcG91c3NlIHZlcnMgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwNgorbXNnaWQgImRvIG5vdCBxdWVyeSByZW1vdGVzIgorbXNnc3RyICJuZSBwYXMgaW50ZXJyb2dlciBsZXMgZGlzdGFudGVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiogZGlzdGFudGUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiAgVVJMIGRlIHJhcGF0cmllbWVudCA6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzUgYnVpbHRpbi9yZW1vdGUuYzoxMjUxIGJ1aWx0aW4vcmVtb3RlLmM6MTM5MAorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIocGFzIGQnVVJMKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiAnOicgc2hvdWxkIGFsaWduCisjLiB3aXRoIHRoZSBvbmUgaW4gIiBGZXRjaCBVUkw6ICVzIgorIy4gdHJhbnNsYXRpb24uCisjLgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQ5IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAgVVJMIHB1c2ggOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjUzIGJ1aWx0aW4vcmVtb3RlLmM6MTI1NSBidWlsdGluL3JlbW90ZS5jOjEyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaDogJXMiCittc2dzdHIgIiAgQnJhbmNoZSBIRUFEIDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MworbXNnaWQgIihub3QgcXVlcmllZCkiCittc2dzdHIgIihub24gZGVtYW5kw6kpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTUKK21zZ2lkICIodW5rbm93bikiCittc2dzdHIgIihpbmNvbm51KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiIKKyIgIEJyYW5jaGUgSEVBRCAobGEgSEVBRCBkaXN0YW50ZSBlc3QgYW1iaWd1w6ssIHBldXQgw6p0cmUgbCd1bmUgZGVzICIKKyJzdWl2YW50ZXMpIDpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAgQnJhbmNoZSBkaXN0YW50ZSA6JXMiCittc2dzdHJbMV0gIiAgQnJhbmNoZXMgZGlzdGFudGVzIDolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc0IGJ1aWx0aW4vcmVtb3RlLmM6MTMwMAorbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiICjDqXRhdCBub24gZGVtYW5kw6kpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODMKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiICBCcmFuY2hlIGxvY2FsZSBjb25maWd1csOpZSBwb3VyICdnaXQgcHVsbCcgOiIKK21zZ3N0clsxXSAiICBCcmFuY2hlcyBsb2NhbGVzIGNvbmZpZ3Vyw6llcyBwb3VyICdnaXQgcHVsbCcgOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjkxCittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiICBMZXMgcsOpZsOpcmVuY2VzIGxvY2FsZXMgc2Vyb250IHJlZmzDqXTDqWVzIHBhciAnZ2l0IHB1c2gnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAgUsOpZsOpcmVuY2UgbG9jYWxlIGNvbmZpZ3Vyw6llIHBvdXIgJ2dpdCBwdXNoJyVzIDoiCittc2dzdHJbMV0gIiAgUsOpZsOpcmVuY2VzIGxvY2FsZXMgY29uZmlndXLDqWVzIHBvdXIgJ2dpdCBwdXNoJyVzIDoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxOAorbXNnaWQgInNldCByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQgYWNjb3JkaW5nIHRvIHJlbW90ZSIKK21zZ3N0ciAiZMOpZmluaXIgcmVmcy9yZW1vdGVzLzxub20+L0hFQUQgc2Vsb24gbGEgZGlzdGFudGUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyMAorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgInN1cHByaW1lciByZWZzL3JlbW90ZXMvPG5vbT4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzM1Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6l0ZXJtaW5lciBsYSBIRUFEIGRpc3RhbnRlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMzcKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiIgorIklsIHkgYSBkZSBtdWx0aXBsZXMgYnJhbmNoZXMgSEVBRCBkaXN0YW50ZXMuIFZldWlsbGV6IGVuIGNob2lzaXIgdW5lICIKKyJleHBsaWNpdGVtZW50IGF2ZWMgOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgc3VwcHJpbWVyICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAiUsOpZsOpcmVuY2Ugbm9uIHZhbGlkZSA6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHBhcmFtw6l0cmVyICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIHNlIHJldHJvdXZlcmEgZW4gc3VzcGVucyAhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMgc2UgcmV0cm91dmUgZW4gc3VzcGVucyAhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAiw4lsaW1pbmF0aW9uIGRlICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAiVVJMIDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQwMworIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIgKiBbc2VyYWl0IMOpbGltaW7DqV0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQwNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiICogW8OpbGltaW7DqV0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ1MQorbXNnaWQgInBydW5lIHJlbW90ZXMgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgIsOpbGltaW5lciBsZXMgZGlzdGFudHMgYXByw6hzIGxlIHJhcGF0cmllbWVudCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTE0IGJ1aWx0aW4vcmVtb3RlLmM6MTU2OCBidWlsdGluL3JlbW90ZS5jOjE2MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAiUGFzIGRlIHNlcnZldXIgcmVtb3RlICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzMAorbXNnaWQgImFkZCBicmFuY2giCittc2dzdHIgImFqb3V0ZXIgdW5lIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNworbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgInBhcyBkZSBzZXJ2ZXVyIGRpc3RhbnQgc3DDqWNpZmnDqSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTU0Cittc2dpZCAicXVlcnkgcHVzaCBVUkxzIHJhdGhlciB0aGFuIGZldGNoIFVSTHMiCittc2dzdHIgImludGVycm9nZXIgbGVzIFVSTHMgZGUgcG91c3PDqWUgcGx1dMO0dCBxdWUgbGVzIFVSTHMgZGUgcsOpY3Vww6lyYXRpb24iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU1NgorbXNnaWQgInJldHVybiBhbGwgVVJMcyIKK21zZ3N0ciAicmV0b3VybmVyIHRvdXRlcyBsZXMgVVJMcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIFVSTHMgY29uZmlndXJlZCBmb3IgcmVtb3RlICclcyciCittc2dzdHIgImF1Y3VuZSBVUkwgY29uZmlndXLDqWUgcG91ciBsZSBkw6lww7R0IGRpc3RhbnQgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjEwCittc2dpZCAibWFuaXB1bGF0ZSBwdXNoIFVSTHMiCittc2dzdHIgIm1hbmlwdWxlciBsZXMgVVJMcyBwdXNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MTIKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICJham91dGVyIHVuZSBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxNAorbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICJzdXBwcmltZXIgZGVzIFVSTHMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYyMQorbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1hZGQgLS1kZWxldGUgbidhIGF1Y3VuIHNlbnMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgIk1vdGlmIGQnVVJMIGFuY2llbiBpbnZhbGlkZSA6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIgorbXNnc3RyICJQYXMgZCdVUkwgdHJvdXbDqWUgOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjcwCittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICJQYXMgZGUgc3VwcHJlc3Npb24gZGUgdG91dGVzIGxlcyBVUkxzIG5vbi1wdXNoIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIzCittc2dpZCAiZ2l0IHJlcGFjayBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHJlcGFjayBbPG9wdGlvbnM+XSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOAorbXNnaWQgIiIKKyJJbmNyZW1lbnRhbCByZXBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBiaXRtYXAgaW5kZXhlcy4gIFVzZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9yIGRpc2FibGUgdGhlIHBhY2sud3JpdGViaXRtYXBzIGNvbmZpZ3VyYXRpb24uIgorbXNnc3RyICIiCisiTGVzIHJlcGFxdWV0YWdlcyBpbmNyw6ltZW50YXV4IHNvbnQgaW5jb21wYXRpYmxlcyBhdmVjIGxlcyBpbmRleCBiaXRtYXAuICIKKyJVdGlsaXNlelxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG91IGTDqXNhY3RpdmV6IGxlIHBhcmFtw6h0cmUgcGFjay53cml0ZWJpdG1hcHMuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE5MQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgIiIKKyJuZSBwYXMgZMOpbWFycmVyIHBhY2stb2JqZWN0cyBwb3VyIHLDqS1lbXBhcXVldGVyIGxlcyBvYmplY3RzIGRlIHByb21ldHRldXIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMwIGJ1aWx0aW4vcmVwYWNrLmM6NDE2Cittc2dpZCAicmVwYWNrOiBFeHBlY3RpbmcgZnVsbCBoZXggb2JqZWN0IElEIGxpbmVzIG9ubHkgZnJvbSBwYWNrLW9iamVjdHMuIgorbXNnc3RyICIiCisicmVwYWNrwqA6IGF0dGVudGUgZGUgbGlnbmVzIGQnSWQgZCdvYmpldHMgZW4gaGV4YSBjb21wbGV0IHNldWxlbWVudCBkZXB1aXMgIgorImxlcyBvYmplY3RzIGRlIHBhcXVldC4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjU0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIHRlcm1pbmVyIHBhY2stb2JqZWN0cyAgcG91ciByw6ktZW1wYXF1ZXRlciBsZXMgb2JqZXRzIGRlICIKKyJwcm9tZXR0ZXVyIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5MgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICJlbXBhcXVldGVyIHRvdXQgZGFucyB1biBzZXVsIHBhcXVldCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTQKK21zZ2lkICJzYW1lIGFzIC1hLCBhbmQgdHVybiB1bnJlYWNoYWJsZSBvYmplY3RzIGxvb3NlIgorbXNnc3RyICJpZGVudGlxdWUgw6AgLWEgZXQgdHJhbnNmb3JtZXIgbGVzIG9iamV0cyBpbmFjY2Vzc2libGVzIGVuIHN1c3BlbnMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk3Cittc2dpZCAicmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkIgorbXNnc3RyICJzdXBwcmltZXIgbGVzIHBhcXVldHMgcmVkb25kYW50cyBldCBsYW5jZXIgZ2l0LXBydW5lLXBhY2tlZCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTkKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFzc2VyIC0tbm8tcmV1c2UtZGVsdGEgw6AgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDEKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgInBhc3NlciAtLW5vLXJldXNlLW9iamVjdCDDoCBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwMworbXNnaWQgImRvIG5vdCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKK21zZ3N0ciAibmUgcGFzIGxhbmNlciBnaXQgdXBkYXRlLXNlcnZlci1pbmZvIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwNgorbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJwYXNzZXIgLS1sb2NhbCDDoCBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwOAorbXNnaWQgIndyaXRlIGJpdG1hcCBpbmRleCIKK21zZ3N0ciAiw6ljcmlyZSB1biBpbmRleCBlbiBiaXRtYXAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzEwCittc2dpZCAicGFzcyAtLWRlbHRhLWlzbGFuZHMgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFzc2VyIC0tZGVsdGEtaXNsYW5kcyDDoCBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMQorbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICJkYXRlIGFwcHJveGltYXRpdmUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzEyCittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAiYXZlYyAtQSwgbmUgcGFzIHN1c3BlbmRyZSBsZXMgb2JqZXRzIHBsdXMgdmlldXggcXVlIGNlbHVpLWNpIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNAorbXNnaWQgIndpdGggLWEsIHJlcGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJhdmVjIC1hLCByZXBhcXXDqXRpc2VyIGxlcyBvYmpldHMgaW5hY2Nlc3NpYmxlcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTYKK21zZ2lkICJzaXplIG9mIHRoZSB3aW5kb3cgdXNlZCBmb3IgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgInRhaWxsZSBkZSBsYSBmZW7DqnRyZSB1dGlsaXPDqWUgcG91ciBsYSBjb21wcmVzc2lvbiBkZXMgZGVsdGFzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNyBidWlsdGluL3JlcGFjay5jOjMyMworbXNnaWQgImJ5dGVzIgorbXNnc3RyICJvY3RldHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE4Cittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgIiIKKyJpZGVtIGNpLWRlc3N1cywgbWFpcyBsaW1pdGVyIGxhIHRhaWxsZSBtw6ltb2lyZSBhdSBsaWV1IGR1IG5vbWJyZSBkJ8OpbMOpbWVudHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzIwCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIgorbXNnc3RyICJsaW1pdGUgbGEgcHJvZm9uZGV1ciBtYXhpbWFsZSBkZXMgZGVsdGFzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMgorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyIKK21zZ3N0ciAibGltaXRlIGxlIG5vbWJyZSBtYXhpbWFsIGRlIGZpbHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI0Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggcGFja2ZpbGUiCittc2dzdHIgInRhaWxsZSBtYXhpbXVtIGRlIGNoYXF1ZSBmaWNoaWVyIHBhcXVldCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjYKK21zZ2lkICJyZXBhY2sgb2JqZWN0cyBpbiBwYWNrcyBtYXJrZWQgd2l0aCAua2VlcCIKK21zZ3N0ciAicsOpZW1wYXF1ZXRlciBsZXMgb2JqZXRzIGRhbnMgZGVzIHBhcXVldHMgbWFycXXDqXMgYXZlYyAua2VlcCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjgKK21zZ2lkICJkbyBub3QgcmVwYWNrIHRoaXMgcGFjayIKK21zZ3N0ciAibmUgcGFzIHJlbXBhcXVldGVyIGNlIHBhcXVldCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMzgKK21zZ2lkICJjYW5ub3QgZGVsZXRlIHBhY2tzIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsZXMgcGFxdWV0cyBkYW5zIHVuIGTDqXDDtHQgZCdvYmpldHMgcHLDqWNpZXV4IgorCisjOiBidWlsdGluL3JlcGFjay5jOjM0MgorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLUEgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1rZWVwLXVucmVhY2hhYmxlIGV0IC1BIHNvbnQgaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0MjUKK21zZ2lkICJOb3RoaW5nIG5ldyB0byBwYWNrLiIKK21zZ3N0ciAiUmllbiBkZSBuZXVmIMOgIGVtcGFxdWV0ZXIuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogU29tZSBwYWNrcyBpbiB1c2UgaGF2ZSBiZWVuIHJlbmFtZWQgYnlcbiIKKyJXQVJOSU5HOiBwcmVmaXhpbmcgb2xkLSB0byB0aGVpciBuYW1lLCBpbiBvcmRlciB0b1xuIgorIldBUk5JTkc6IHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGVcbiIKKyJXQVJOSU5HOiBmaWxlLiAgQnV0IHRoZSBvcGVyYXRpb24gZmFpbGVkLCBhbmQgdGhlXG4iCisiV0FSTklORzogYXR0ZW1wdCB0byByZW5hbWUgdGhlbSBiYWNrIHRvIHRoZWlyXG4iCisiV0FSTklORzogb3JpZ2luYWwgbmFtZXMgYWxzbyBmYWlsZWQuXG4iCisiV0FSTklORzogUGxlYXNlIHJlbmFtZSB0aGVtIGluICVzIG1hbnVhbGx5OlxuIgorbXNnc3RyICIiCisiQUxFUlRFwqA6IGNlcnRhaW5zIHBhcXVldHMgdXRpbGlzw6lzIG9udCDDqXTDqSByZW5vbW3DqXNcbiIKKyJBTEVSVEXCoDogZW4gbGVzIHByw6lmaXhhbnQgcGFyIG9sZC0sIGRlIG1hbmnDqHJlIMOgXG4iCisiQUxFUlRFwqA6IGxlcyByZW1wbGFjZXIgcGFyIHVuZSBub3V2ZWxsZSB2ZXJzaW9uIGRlXG4iCisiQUxFUlRFwqA6IGZpY2hpZXIuIE1haXMgbCdvcMOpcmF0aW9uIGEgw6ljaG91w6kgZXQgbGFcbiIKKyJBTEVSVEXCoDogdGVudGF0aXZlIGRlIHJlbm9tbWFnZSBlbiBzZW5zIGludmVyc2UgYVxuIgorIkFMRVJURcKgOiBhdXNzaSDDqWNob3XDqS5cbiIKKyJBTEVSVEXCoDogVmV1aWxsZXogbGVzIHJlbm9tbWVyIG1hbnVlbGxlbWVudCBkYW5zICVzIDpcbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnJXMnIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgc3VwcHJlc3Npb24gZGUgJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPG9iamV0PiA8cmVtcGxhY2VtZW50PiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjMKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamV0PiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjYKK21zZ2lkICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgLWQgPG9iamV0Pi4uLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcKK21zZ2lkICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFstbCBbPHBhdHRlcm4+XV0iCittc2dzdHIgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8bW90aWY+XV0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIHJlcGxhY2UgZm9ybWF0ICclcydcbiIKKyJ2YWxpZCBmb3JtYXRzIGFyZSAnc2hvcnQnLCAnbWVkaXVtJyBhbmQgJ2xvbmcnIgorbXNnc3RyICIiCisiZm9ybWF0IGRlIHJlbXBsYWNlbWVudCBpbnZhbGlkZSAnJXMnXG4iCisibGVzIGZvcm1hdHMgdmFsaWRlcyBzb250ICdzaG9ydCcsICdtZWRpdW0nIGV0ICdsb25nJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgcmVmICclcycgbm90IGZvdW5kIgorbXNnc3RyICJyw6lmIGRlIHJlbXBsYWNlbWVudCAnJXMnIG5vbiB0cm91dsOpZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVwbGFjZSByZWYgJyVzJyIKK21zZ3N0ciAiUsOpZsOpcmVuY2UgZGUgcmVtcGxhY2VtZW50ICclcycgc3VwcHJpbcOpZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVmIG5hbWUiCittc2dzdHIgIiclcycgbidlc3QgcGFzIHVuIG5vbSB2YWxpZGUgZGUgcsOpZsOpcmVuY2UiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJsYSByw6lmw6lyZW5jZSBkZSByZW1wbGFjZW1lbnQgJyVzJyBleGlzdGUgZMOpasOgIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk9iamVjdHMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlLlxuIgorIiclcycgcG9pbnRzIHRvIGEgcmVwbGFjZWQgb2JqZWN0IG9mIHR5cGUgJyVzJ1xuIgorIndoaWxlICclcycgcG9pbnRzIHRvIGEgcmVwbGFjZW1lbnQgb2JqZWN0IG9mIHR5cGUgJyVzJy4iCittc2dzdHIgIiIKKyJMZXMgb2JqZXRzIGRvaXZlbnQgw6p0cmUgZHUgbcOqbWUgdHlwZS5cbiIKKyInJXMnIHBvaW50ZSBzdXIgdW4gb2JqZXQgcmVtcGxhY8OpIGRlIHR5cGUgJyVzJyB0YW5kaXMgcXVlXG4iCisiJyVzJyBwb2ludGUgc3VyIHVuIG9iamV0IHJlbXBsYcOnYW50IGRlIHR5cGUgJyVzJy4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciAlcyBlbiDDqWNyaXR1cmUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0MgorbXNnaWQgImNhdC1maWxlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgImNhdC1maWxlIGEgcmV0b3VybsOpIHVuIMOpY2hlYyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyICVzIGVuIMOpY3JpdHVyZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcyCittc2dpZCAidW5hYmxlIHRvIHNwYXduIG1rdHJlZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGwnYXJicmUgKCVzKSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjc2Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgZnJvbSBta3RyZWUiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBkZXB1aSBta3RyZWUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4NQorbXNnaWQgIm1rdHJlZSByZXBvcnRlZCBmYWlsdXJlIgorbXNnc3RyICJta3RyZWUgYSDDqWNob3XDqSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjg5Cittc2dpZCAibWt0cmVlIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdCBuYW1lIgorbXNnc3RyICJta3RyZWUgbidhIHBhcyByZXRvdXJuw6kgZGUgbm9tIGQnb2JqZXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZnN0YXQgJXMiCittc2dzdHIgImZzdGF0IGRlICVzIGltcG9zc2libGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMwMworbXNnaWQgInVuYWJsZSB0byB3cml0ZSBvYmplY3QgdG8gZGF0YWJhc2UiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGwnb2JqZXQgZGFucyBsYSBiYXNlIGRlIGRvbm7DqWVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjIgYnVpbHRpbi9yZXBsYWNlLmM6Mzc4IGJ1aWx0aW4vcmVwbGFjZS5jOjQyNAorIzogYnVpbHRpbi9yZXBsYWNlLmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICJub20gZCdvYmpldCBpbnZhbGlkZSA6ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IG9iamVjdCB0eXBlIGZvciAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ29idGVuaXIgbGUgdHlwZSBkZSBsJ29iamV0IHBvdXIgJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM0MgorbXNnaWQgImVkaXRpbmcgb2JqZWN0IGZpbGUgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbCfDqWRpdGlvbiBkdSBmaWNoaWVyIGQnb2JqZXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICJsZSBub3V2ZWwgb2JqZXQgZXN0IGlkZW50aXF1ZSDDoCBsJ2FuY2llbsKgOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIGFzIGEgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgJXMgY29tbWUgY29tbWl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICJtYXV2YWlzZSDDqXRpcXVldHRlIGRlIGZ1c2lvbiBkYW5zIGxlIGNvbW1pdCAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICLDqXRpcXVldHRlIGRlIGZ1c2lvbiBtYWxmb3Jtw6llIGRhbnMgbGUgY29tbWl0ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICIiCisibGUgY29tbWl0IG9yaWdpbmFsICclcycgY29udGllbnQgbCfDqXRpcXVldHRlIGRlIGZ1c2lvbiAnJXMnIHF1aSBhIGRpc3BhcnUgOyAiCisidXRpbGlzZXogLS1lZGl0IGF1IGxpZXUgZGUgLS1ncmFmdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBvcmlnaW5hbCBjb21taXQgJyVzJyBoYXMgYSBncGcgc2lnbmF0dXJlIgorbXNnc3RyICJsZSBjb21taXQgb3JpZ2luYWwgJyVzJyBjb250aWVudCB1bmUgc2lnbmF0dXJlIEdQRyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDcwCittc2dpZCAidGhlIHNpZ25hdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHJlcGxhY2VtZW50IGNvbW1pdCEiCittc2dzdHIgImxhIHNpZ25hdHVyZSBzZXJhIMOpbGltaW7DqWUgZGFucyBsYSB2YWxpZGF0aW9uIGRlIHJlbXBsYWNlbWVudCAhIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHJlcGxhY2VtZW50IGNvbW1pdCBmb3I6ICclcyciCittc2dzdHIgIkltcG9zc2libGUgZCfDqWNyaXJlIGxlIGNvbW1pdCBkZSByZW1wbGFjZW1lbnQgcG91ciAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JhZnQgZm9yICclcycgdW5uZWNlc3NhcnkiCittc2dzdHIgImdyYWZ0IHBvdXIgJyVzJyBub24gbsOpY2Vzc2FpcmUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgY29tbWl0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICJsZSBub3V2ZWF1IGNvbW1pdCBlc3QgaWRlbnRpcXVlIMOgIGwnYW5jaWVuwqA6ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNvbnZlcnQgdGhlIGZvbGxvd2luZyBncmFmdChzKTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgY29udmVydGlyIGxhKGxlcykgZ3JlZmZlKHMpIHN1aXZhbnRlKHMpIDpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ4Cittc2dpZCAibGlzdCByZXBsYWNlIHJlZnMiCittc2dzdHIgImFmZmljaGVyIGxlcyByw6lmw6lyZW5jZXMgZGUgcmVtcGxhY2VtZW50IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDkKK21zZ2lkICJkZWxldGUgcmVwbGFjZSByZWZzIgorbXNnc3RyICJzdXBwcmltZXIgbGVzIHLDqWbDqXJlbmNlcyBkZSByZW1wbGFjZW1lbnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MAorbXNnaWQgImVkaXQgZXhpc3Rpbmcgb2JqZWN0IgorbXNnc3RyICLDqWRpdGVyIGwnb2JqZXQgZXhpc3RhbnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MQorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgIk1vZGlmaWVyIGxlcyBwYXJlbnRzIGQndW4gY29tbWl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTIKK21zZ2lkICJjb252ZXJ0IGV4aXN0aW5nIGdyYWZ0IGZpbGUiCittc2dzdHIgImNvbnZlcnRpciBsZSBmaWNoaWVyIGRlIGdyZWZmZSBleGlzdGFudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUzCittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAicmVtcGxhY2VyIGxhIHLDqWbDqXJlbmNlIHNpIGVsbGUgZXhpc3RlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTUKK21zZ2lkICJkbyBub3QgcHJldHR5LXByaW50IGNvbnRlbnRzIGZvciAtLWVkaXQiCittc2dzdHIgImFmZmljaGVyIHNhbnMgbWlzZSBlbiBmb3JtZSBwb3VyIC0tZWRpdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU2Cittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICJ1dGlsaXNlciBjZSBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU2OQorbXNnaWQgIi0tZm9ybWF0IGNhbm5vdCBiZSB1c2VkIHdoZW4gbm90IGxpc3RpbmciCittc2dzdHIgIi0tZm9ybWF0IG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIHNhbnMgbGlzdGVyIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NzcKK21zZ2lkICItZiBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gd3JpdGluZyBhIHJlcGxhY2VtZW50IgorbXNnc3RyICItZiBuJ2EgZGUgc2VucyBxdSdlbiDDqWNyaXZhbnQgdW4gcmVtcGxhY2VtZW50IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODEKK21zZ2lkICItLXJhdyBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1lZGl0IgorbXNnc3RyICItLXJhdyBuJ2EgZGUgc2VucyBxdSdhdmVjIGwnb3B0aW9uIC0tZWRpdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTg3Cittc2dpZCAiLWQgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICItZCByZXF1aWVydCBhdSBtb2lucyB1biBhcmd1bWVudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTkzCittc2dpZCAiYmFkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgIm1hdXZhaXMgbm9tYnJlIGQnYXJndW1lbnRzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1OTkKK21zZ2lkICItZSBuZWVkcyBleGFjdGx5IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWUgcmVxdWllcnQgdW4gc2V1bCBhcmd1bWVudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjA1Cittc2dpZCAiLWcgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICItZyByZXF1aWVydCBhdSBtb2lucyB1biBhcmd1bWVudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjExCittc2dpZCAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgdGFrZXMgbm8gYXJndW1lbnQiCittc2dzdHIgIi0tY29udmVydC1ncmFmdC1maWxlIG5lIHN1cHBvcnRlIGF1Y3VuIGFyZ3VtZW50IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTcKK21zZ2lkICJvbmx5IG9uZSBwYXR0ZXJuIGNhbiBiZSBnaXZlbiB3aXRoIC1sIgorbXNnc3RyICItbCBuJ2FjY2VwdGUgcXUndW4gbW90aWZzIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjEzCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBhdGg+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKK21zZ3N0ciAiIgorImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxjaGVtaW4+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo2MAorbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICJlbnJlZ2lzdHJlciBkZXMgcsOpc29sdXRpb25zIHByb3ByZXMgZGFucyBsJ2luZGV4IgorCisjOiBidWlsdGluL3JlcmVyZS5jOjc5Cittc2dpZCAiJ2dpdCByZXJlcmUgZm9yZ2V0JyB3aXRob3V0IHBhdGhzIGlzIGRlcHJlY2F0ZWQiCittc2dzdHIgIidnaXQgcmVyZXJlIGZvcmdldCcgc2FucyBjaGVtaW4gZXN0IG9ic29sw6h0ZSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgZm9yICclcyciCittc2dzdHIgIsOpY2hlYyBkZSBsYSBnw6luw6lyYXRpb24gZGUgZGlmZiBwb3VyICclcyciCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMgorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCittc2dzdHIgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgImdpdCByZXNldCBbLXFdIFs8dHJlZS1pc2g+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVzZXQgWy1xXSBbPGFyYnJlIG91IGFwcGFyZW50w6k+XSBbLS1dIDxzcMOpY2lmaWNhdGV1ci1kZS1jaGVtaW4+Li4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstcV0gWy0tcGF0aHNwZWMtZnJvbS1maWxlIFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWzx0cmVlLWlzaD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstcV0gWy0tcGF0aHNwZWMtZnJvbS1maWxlIFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWzxhcmJyZS1lc3F1ZT5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0iCittc2dzdHIgImdpdCByZXNldCAtLXBhdGNoIFs8YXJicmUtZXNxdWU+XSBbLS1dIFs8c3DDqWMuLWRlLWNoZW1pbj4uLi5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAibWl4ZWQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgInNvZnQiCittc2dzdHIgInNvZnQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImhhcmQiCittc2dzdHIgImhhcmQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1lcmdlIgorbXNnc3RyICJtZXJnZSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAia2VlcCIKK21zZ3N0ciAia2VlcCIKKworIzogYnVpbHRpbi9yZXNldC5jOjgyCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIlZvdXMgbidhdmV6IHBhcyB1bmUgSEVBRCB2YWxpZGUuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbCdhcmJyZSBwb3VyIEhFQUQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBsJ2FyYnJlIHBvdXIgJXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJIRUFEIGVzdCBtYWludGVuYW50IMOgICVzIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgIkltcG9zc2libGUgZGUgZmFpcmUgdW4gXCJyZXNldCAlc1wiIGF1IG1pbGlldSBkJ3VuZSBmdXNpb24uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk0IGJ1aWx0aW4vc3Rhc2guYzo1MjAgYnVpbHRpbi9zdGFzaC5jOjU5NQorIzogYnVpbHRpbi9zdGFzaC5jOjYxOQorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgIsOqdHJlIHNpbGVuY2lldXgsIGFmZmljaGVyIHNldWxlbWVudCBsZXMgZXJyZXVycyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NgorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICJyw6lpbml0aWFsaXNlciBIRUFEIGV0IGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTcKK21zZ2lkICJyZXNldCBvbmx5IEhFQUQiCittc2dzdHIgInLDqWluaXRpYWxpc2VyIHNldWxlbWVudCBIRUFEIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk5IGJ1aWx0aW4vcmVzZXQuYzozMDEKK21zZ2lkICJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIgorbXNnc3RyICJyw6lpbml0aWFsaXNlciBIRUFELCBsJ2luZGV4IGV0IGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDMKK21zZ2lkICJyZXNldCBIRUFEIGJ1dCBrZWVwIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgInLDqWluaXRpYWxpc2VyIEhFQUQgbWFpcyBnYXJkZXIgbGVzIGNoYW5nZW1lbnRzIGxvY2F1eCIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwOQorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICIiCisiZW5yZWdpc3RyZXIgc2V1bGVtZW50IGxlIGZhaXQgcXVlIGxlcyBjaGVtaW5zIGVmZmFjw6lzIHNlcm9udCBham91dMOpcyBwbHVzICIKKyJ0YXJkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZXZpc2lvbi4iCittc2dzdHIgIsOJY2hlYyBkZSByw6lzb2x1dGlvbiBkZSAnJXMnIGNvbW1lIHVuZSByw6l2aXNpb24gdmFsaWRlLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIsOJY2hlYyBkZSByw6lzb2x1dGlvbiBkZSAnJXMnIGNvbW1lIHVuIGFyYnJlIHZhbGlkZS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjAKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2ggZXN0IGluY29tcGF0aWJsZSBhdmVjIC0te2hhcmQsbWl4ZWQsc29mdH0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzAKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLW1peGVkIGF2ZWMgZGVzIGNoZW1pbnMgZXN0IG9ic29sw6h0ZSA7IHV0aWxpc2V6ICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgw6AgbGEgIgorInBsYWNlLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIkltcG9zc2libGUgZGUgZmFpcmUgdW4gXCIlcyByZXNldFwiIGF2ZWMgZGVzIGNoZW1pbnMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJMZSBcIiVzIHJlc2V0XCIgbidlc3QgcGFzIHBlcm1pcyBkYW5zIHVuIGTDqXDDtHQgbnUiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozOTEKK21zZ2lkICItTiBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1taXhlZCIKK21zZ3N0ciAiLU4gbmUgcGV1dCDDqnRyZSB1dGlsaXPDqSBxdSdhdmVjIC0tbWl4ZWQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MTIKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAiTW9kaWZpY2F0aW9ucyBub24gaW5kZXjDqWVzIGFwcsOocyByZXNldCA6IgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldC4gIFlvdSBjYW5cbiIKKyJ1c2UgJy0tcXVpZXQnIHRvIGF2b2lkIHRoaXMuICBTZXQgdGhlIGNvbmZpZyBzZXR0aW5nIHJlc2V0LnF1aWV0IHRvIHRydWVcbiIKKyJ0byBtYWtlIHRoaXMgdGhlIGRlZmF1bHQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJMZXMgbW9kaWZpY2F0aW9ucyBub24taW5kZXjDqWVzIG9udCBwcmlzICUuMmYgc2Vjb25kZXMgw6Agw6ludW3DqXJlciBhcHLDqHMgIgorInJlc2V0LlxuIgorIlZvdXMgcG91dmV6IHV0aWxpc2VyICctLXF1aWV0JyBwb3VyIMOpdml0ZXIgY2UgbWVzc2FnZS4gUsOpZ2xleiBsZSBwYXJhbcOodHJlICIKKyJkZVxuIgorImNvbmZpZyByZXNldC5xdWlldCDDoCB0cnVlIHBvdXIgYXZvaXIgY2UgY29tcG9ydGVtZW50IGVuIHBlcm1hbmVuY2UuXG4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIkltcG9zc2libGUgZGUgcsOpaW5pdGlhbGlzZXIgbGUgZmljaGllciBkJ2luZGV4IMOgIGxhIHLDqXZpc2lvbiAnJXMnLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyOQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIkltcG9zc2libGUgZCfDqWNyaXJlIGxlIG5vdXZlYXUgZmljaGllciBkJ2luZGV4LiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ5OQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGFuZCAtLW1pc3NpbmciCittc2dzdHIgImltcG9zc2libGUgZGUgY29tYmluZXIgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgZXQgLS1taXNzaW5nIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NTYwCittc2dpZCAib2JqZWN0IGZpbHRlcmluZyByZXF1aXJlcyAtLW9iamVjdHMiCittc2dzdHIgImxlIGZpbHRyYWdlIGQnb2JqZXQgZXhpZ2UgLS1vYmplY3RzIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NjEwCittc2dpZCAicmV2LWxpc3QgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5IG9mIG5vdGVzIgorbXNnc3RyICJyZXYtbGlzdCBuZSBzdXBwb3J0ZSBsJ2FmZmljaGFnZSBkZXMgbm90ZXMiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo2MTUKK21zZ2lkICJtYXJrZWQgY291bnRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1vYmplY3RzIgorbXNnc3RyICJsZSBjb21wdGFnZSBtYXJxdcOpIGVzdCBpbmNvbXBhdGlibGUgYXZlYyAtLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDA4Cittc2dpZCAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dIgorbXNnc3RyICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmd1bWVudHM+Li4uXSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTMKK21zZ2lkICJrZWVwIHRoZSBgLS1gIHBhc3NlZCBhcyBhbiBhcmciCittc2dzdHIgImdhcmRlciBsZSBgLS1gIHBhc3PDqSBlbiBhcmd1bWVudCIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTUKK21zZ2lkICJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiCittc2dzdHIgImFycsOqdCBkZSBsJ2FuYWx5c2UgYXByw6hzIGxlIHByZW1pZXIgYXJndW1lbnQgcXVpIG4nZXN0IHBhcyB1bmUgb3B0aW9uIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxOAorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgInNvcnRpZSBlbiBmb3JtZSBsb25ndWUgZml4w6llIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjU1MQorbXNnaWQgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCisiXG4iCisiUnVuIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IHVzYWdlLiIKK21zZ3N0ciAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3VtZW50cz4uLi5dXG4iCisiICAgb3UgOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmd1bWVudD4uLi5dXG4iCisiICAgb3UgOiBnaXQgcmV2LXBhcnNlIFtvcHRpb25zXSBbPGFyZ3VtZW50Pi4uLl1cbiIKKyJcbiIKKyJMYW5jZXogXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBwb3VyIHBsdXMgZCdpbmZvcm1hdGlvbiBzdXIgIgorImwndXRpbGlzYXRpb24gcHJpbmNpcGFsZS4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQKK21zZ2lkICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJldmVydCBbPG9wdGlvbnM+XSA8Y29tbWl0IG91IGFwcGFyZW50w6k+Li4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjI1Cittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCByZXZlcnQgPHNvdXMtY29tbWFuZGU+IgorCisjOiBidWlsdGluL3JldmVydC5jOjMwCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQgb3UgYXBwYXJlbnTDqT4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzEKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPHNvdXMtY29tbWFuZGU+IgorCisjOiBidWlsdGluL3JldmVydC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8iCittc2dzdHIgImwnb3B0aW9uICclcycgYXR0ZW5kIHVuIG5vbWJyZSBzdXDDqXJpZXVyIMOgIHrDqXJvIgorCisjOiBidWlsdGluL3JldmVydC5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIlcyA6ICVzIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIGF2ZWMgJXMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAyCittc2dpZCAiZW5kIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAibWV0dHJlIGZpbiBhdSByZXRvdXIgb3UgcGljb3JhZ2UiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAicmVwcmVuZHJlIGxlIHJldG91ciBvdSBwaWNvcmFnZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDQKK21zZ2lkICJjYW5jZWwgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJhbm51bGVyIGxlIHJldG91ciBvdSBwaWNvcmFnZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJza2lwIGN1cnJlbnQgY29tbWl0IGFuZCBjb250aW51ZSIKK21zZ3N0ciAic2F1dGVyIGxlIGNvbW1pdCBjb3VyYW50IGV0IGNvbnRpbnVlciIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDcKK21zZ2lkICJkb24ndCBhdXRvbWF0aWNhbGx5IGNvbW1pdCIKK21zZ3N0ciAibmUgcGFzIHZhbGlkZXIgYXV0b21hdGlxdWVtZW50IgorCisjOiBidWlsdGluL3JldmVydC5jOjEwOAorbXNnaWQgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLDqWRpdGVyIGxlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTEKK21zZ2lkICJwYXJlbnQtbnVtYmVyIgorbXNnc3RyICJudW3DqXJvLWRlLXBhcmVudCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJzZWxlY3QgbWFpbmxpbmUgcGFyZW50IgorbXNnc3RyICJzw6lsZWN0aW9ubmVyIGxlIHBhcmVudCBwcmluY2lwYWwiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInN0cmF0w6lnaWUgZGUgZnVzaW9uIgorCisjOiBidWlsdGluL3JldmVydC5jOjExNgorbXNnaWQgIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIm9wdGlvbiBwb3VyIGxhIHN0cmF0w6lnaWUgZGUgZnVzaW9uIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNQorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAiYWpvdXRlciBsZSBub20gZGUgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjcKK21zZ2lkICJwcmVzZXJ2ZSBpbml0aWFsbHkgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAicHLDqXNlcnZlciBsZXMgdmFsaWRhdGlvbnMgdmlkZXMgaW5pdGlhbGVtZW50IgorCisjOiBidWlsdGluL3JldmVydC5jOjEyOQorbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICJnYXJkZXIgbGVzIHZhbGlkYXRpb25zIHJlZG9uZGFudGVzLCB2aWRlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzIKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJyZXZlcnQgYSDDqWNob3XDqSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNDUKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgImxlIHBpY29yYWdlIGEgw6ljaG91w6kiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOQorbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJtIFs8b3B0aW9ucz5dIFstLV0gPGZpY2hpZXI+Li4uIgorCisjOiBidWlsdGluL3JtLmM6MjA3Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dpZF9wbHVyYWwgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dzdHJbMF0gIiIKKyJsZSBmaWNoaWVyIHN1aXZhbnQgYSBkdSBjb250ZW51IGluZGV4w6kgZGlmZsOpcmVudFxuIgorImR1IGZpY2hpZXIgZXQgZGUgSEVBRCA6IgorbXNnc3RyWzFdICIiCisibGVzIGZpY2hpZXJzIHN1aXZhbnRzIG9udCBkdSBjb250ZW51IGluZGV4w6kgZGlmZsOpcmVudFxuIgorImR1IGZpY2hpZXIgZXQgZGUgSEVBRCA6IgorCisjOiBidWlsdGluL3JtLmM6MjEyCittc2dpZCAiIgorIlxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIodXRpbGlzZXogLWYgcG91ciBmb3JjZXIgbGEgc3VwcHJlc3Npb24pIgorCisjOiBidWlsdGluL3JtLmM6MjE2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ3N0clswXSAibGUgZmljaGllciBzdWl2YW50IGEgZGVzIGNoYW5nZW1lbnRzIGluZGV4w6lzIDoiCittc2dzdHJbMV0gImxlcyBmaWNoaWVycyBzdWl2YW50cyBvbnQgZGVzIGNoYW5nZW1lbnRzIGluZGV4w6lzIDoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjAgYnVpbHRpbi9ybS5jOjIyOQorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKHV0aWxpc2V6IC0tY2FjaGVkIHBvdXIgZ2FyZGVyIGxlIGZpY2hpZXIsIG91IC1mIHBvdXIgZm9yY2VyIGxhIHN1cHByZXNzaW9uKSIKKworIzogYnVpbHRpbi9ybS5jOjIyNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ3N0clswXSAibGUgZmljaGllciBzdWl2YW50IGEgZGVzIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyA6IgorbXNnc3RyWzFdICJsZXMgZmljaGllcnMgc3VpdmFudHMgb250IGRlcyBtb2RpZmljYXRpb25zIGxvY2FsZXMgOiIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgIm5lIHBhcyBhZmZpY2hlciBsZXMgZmljaGllcnMgc3VwcHJpbcOpcyIKKworIzogYnVpbHRpbi9ybS5jOjI0NAorbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJzdXBwcmltZXIgc2V1bGVtZW50IGRlIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDUKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAib3V0cmVwYXNzZXIgbGEgdsOpcmlmaWNhdGlvbiBkZXMgZmljaGllcnMgw6Agam91ciIKKworIzogYnVpbHRpbi9ybS5jOjI0NgorbXNnaWQgImFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIgorbXNnc3RyICJhdXRvcmlzZXIgbGEgc3VwcHJlc3Npb24gcsOpY3Vyc2l2ZSIKKworIzogYnVpbHRpbi9ybS5jOjI0OAorbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICJzb3J0aXIgYXZlYyB1biDDqXRhdCB6w6lybyBtw6ptZSBzaSByaWVuIG5lIGNvcnJlc3BvbmRhaXQiCisKKyM6IGJ1aWx0aW4vcm0uYzoyODIKK21zZ2lkICJObyBwYXRoc3BlYyB3YXMgZ2l2ZW4uIFdoaWNoIGZpbGVzIHNob3VsZCBJIHJlbW92ZT8iCittc2dzdHIgIkF1Y3VuIHNww6ljaWZpY2F0ZXVyIGRlIGNoZW1pbiBmb3VybmkuIFF1ZWwgZmljaGllciBkb2l0IMOqdHJlIHN1cHByaW3DqcKgPyIKKworIzogYnVpbHRpbi9ybS5jOjMwNQorbXNnaWQgInBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisidmV1aWxsZXogaW5kZXhlciB2b3MgbW9kaWZpY2F0aW9ucyBkZSAuZ2l0bW9kdWxlcyBvdSBsZXMgcmVtaXNlciBwb3VyICIKKyJjb250aW51ZXIiCisKKyM6IGJ1aWx0aW4vcm0uYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAicGFzIGRlIHN1cHByZXNzaW9uIHLDqWN1cnNpdmUgZGUgJyVzJyBzYW5zIC1yIgorCisjOiBidWlsdGluL3JtLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJtIDogaW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgJXMiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MjAKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPGjDtHRlPjpdPHLDqXBlcnRvaXJlPiAiCisiWzxyw6lmw6lyZW5jZT4uLi5dXG4iCisiICAtLWFsbCBldCBsYSBzcMOpY2lmaWNhdGlvbiBleHBsaWNpdGUgZGUgPHLDqWbDqXJlbmNlPiBzb250IG11dHVlbGxlbWVudCAiCisiZXhjbHVzaWZzLiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjMKK21zZ2lkICJyZW1vdGUgbmFtZSIKK21zZ3N0ciAibm9tIGRpc3RhbnQiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc3Cittc2dpZCAidXNlIHN0YXRlbGVzcyBSUEMgcHJvdG9jb2wiCittc2dzdHIgInV0aWxpc2VyIHVuIHByb3RvY29sZSBSUEMgc2FucyDDqXRhdCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzgKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGlyZSBsZXMgcsOpZsOpcmVuY2VzIGRlcHVpcyBsJ2VudHLDqWUgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc5Cittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG1lc3NhZ2VzIGR1IGdyZWZmb24gZGUgcHJvdG9jb2xlIGRpc3RhbnQiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNAorbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8aW50ZXJ2YWxsZS1yw6l2aXNpb25zPl0gW1stLV0gPGNoZW1pbj4uLi5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTUKK21zZ2lkICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY0Cittc2dpZCAiR3JvdXAgYnkgY29tbWl0dGVyIHJhdGhlciB0aGFuIGF1dGhvciIKK21zZ3N0ciAiR3JvdXBlciBwYXIgdmFsaWRhdGV1ciBwbHV0w7R0IHF1ZSBwYXIgYXV0ZXVyIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY2Cittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICJ0cmllciBsYSBzb3J0aWUgc3VyIGxlIG5vbWJyZSBkZSB2YWxpZGF0aW9ucyBwYXIgYXV0ZXVyIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY4Cittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgIiIKKyJTdXBwcmltZXIgbGVzIGRlc2NyaXB0aW9ucyBkZSB2YWxpZGF0aW9uLCBmb3Vybml0IHNldWxlbWVudCBsZSBub21icmUgZGUgIgorInZhbGlkYXRpb25zIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcwCittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAiQWZmaWNoZXIgbCdhZHJlc3NlIGNvdXJyaWVsIGRlIGNoYXF1ZSBhdXRldXIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzEKK21zZ2lkICI8dz5bLDxpMT5bLDxpMj5dXSIKK21zZ3N0ciAiPHc+Wyw8aTE+Wyw8aTI+XV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzIKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgIkNvdXBlciBsZXMgbGlnbmVzIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MzAxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGdpdmVuIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAidHJvcCBkJ2FyZ3VtZW50cyBmb3VybmlzIGhvcnMgZCd1biBkw6lww7R0IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTMKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstcnwtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08cXVhbmQ+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8csOpdj4gfCA8Z2xvYj4pLi4uXSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjE3Cittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8csOpZsOpcmVuY2U+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIKK21zZ3N0clswXSAiJXMgaWdub3LDqTsgaW1wb3NzaWJsZSBkZSBnw6lyZXIgcGx1cyBkZSAlZCByw6lmw6lyZW5jZSIKK21zZ3N0clsxXSAiJXMgaWdub3LDqTsgaW1wb3NzaWJsZSBkZSBnw6lyZXIgcGx1cyBkZSAlZCByw6lmw6lyZW5jZXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbWF0Y2hpbmcgcmVmcyB3aXRoICVzIgorbXNnc3RyICJhdWN1bmUgcsOpZsOpcmVuY2UgY29ycmVzcG9uZCDDoCAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGJyYW5jaGVzIGRlIHN1aXZpIGRpc3RhbnRlcyBldCBsZXMgYnJhbmNoZXMgbG9jYWxlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NworbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgYnJhbmNoZXMgZGUgc3VpdmkgZGlzdGFudGVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ5Cittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAiY291bGV1ciAnKiErLScgY29ycmVzcG9uZGFudCDDoCBsYSBicmFuY2hlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUxCittc2dpZCAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiCittc2dzdHIgImFmZmljaGVyIDxuPiB2YWxpZGF0aW9ucyBkZSBwbHVzIGFwcsOocyBsJ2FuY8OqdHJlIGNvbW11biIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MworbXNnaWQgInN5bm9ueW0gdG8gbW9yZT0tMSIKK21zZ3N0ciAic3lub255bWUgZGUgbW9yZT0tMSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NAorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICJzdXBwcmltZXIgbGVzIGNoYcOubmVzIGRlIG5vbW1hZ2UiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTYKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiaW5jbHVyZSBsYSBicmFuY2hlIGNvdXJhbnRlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU4Cittc2dpZCAibmFtZSBjb21taXRzIHdpdGggdGhlaXIgb2JqZWN0IG5hbWVzIgorbXNnc3RyICJub21tZXIgbGVzIHZhbGlkYXRpb25zIGF2ZWMgbGV1cnMgbm9tcyBkJ29iamV0IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYwCittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGJhc2VzIHBvc3NpYmxlcyBkZSBmdXNpb24iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjIKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICJhZmZpY2hlciBsZXMgcsOpZsOpcmVuY2VzIGluYWNjZXNzaWJsZXMgZGVwdWlzIHRvdXRlIGF1dHJlIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY0Cittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICJhZmZpY2hlciBsZXMgdmFsaWRhdGlvbnMgZGFucyBsJ29yZHJlIHRvcG9sb2dpcXVlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY3Cittc2dpZCAic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giCittc2dzdHIgIiIKKyJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIHZhbGlkYXRpb25zIHF1aSBuZSBzb250IHBhcyBzdXIgbGEgcHJlbWnDqHJlIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjkKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgImFmZmljaGVyIGxlcyBmdXNpb25zIGFjY2Vzc2libGVzIGRlcHVpcyB1bmUgc2V1bGUgcG9pbnRlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcxCittc2dpZCAidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyIHdoZXJlIHBvc3NpYmxlIgorbXNnc3RyICJ0cmkgdG9wb2xvZ2lxdWUsIG1haW50ZW5hbnQgbCdvcmRyZSBwYXIgZGF0ZSBzaSBwb3NzaWJsZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw8YmFzZT5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc1Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgIiIKKyJhZmZpY2hlciBsZXMgPG4+IHBsdXMgcsOpY2VudHMgw6lsw6ltZW50cyBkZSByZWYtbG9nIGVuIGNvbW1lbsOnYW50IMOgIGxhIGJhc2UiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MTEKK21zZ2lkICIiCisiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvciAtLW1lcmdlLWJhc2UiCittc2dzdHIgIiIKKyItLXJlZmxvZyBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGFudCBldCAtLW1lcmdlLSIKKyJiYXNlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM1Cittc2dpZCAibm8gYnJhbmNoZXMgZ2l2ZW4sIGFuZCBIRUFEIGlzIG5vdCB2YWxpZCIKK21zZ3N0ciAiYXVjdW5lIGJyYW5jaGUgc3DDqWNpZmnDqWUsIGV0IEhFQUQgZXN0IGludmFsaWRlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM4Cittc2dpZCAiLS1yZWZsb2cgb3B0aW9uIG5lZWRzIG9uZSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS1yZWZsb2cgcmVxdWllcnQgdW4gbm9tIGRlIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSAlZCBlbnRyeSBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnaWRfcGx1cmFsICJvbmx5ICVkIGVudHJpZXMgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ3N0clswXSAiJWQgZW50csOpZSBzZXVsZW1lbnQgbmUgcGV1dCDDqnRyZSBtb250csOpZSBlbiBtw6ptZSB0ZW1wcy4iCittc2dzdHJbMV0gIiVkIGVudHLDqWVzIHNldWxlbWVudCBuZSBwZXV2ZW50IMOqdHJlIG1vbnRyw6llIGVuIG3Dqm1lIHRlbXBzLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZiAlcyIKK21zZ3N0ciAicsOpZsOpcmVuY2UgaW5leGlzdGFudGUgJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2LiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2cy4iCittc2dzdHJbMF0gImltcG9zc2libGUgZGUgZ8OpcmVyIHBsdXMgZGUgJWQgcsOpdmlzaW9uLiIKK21zZ3N0clsxXSAiaW1wb3NzaWJsZSBkZSBnw6lyZXIgcGx1cyBkZSAlZCByw6l2aXNpb25zLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiclcycgbidlc3QgcGFzIHVuZSByw6lmw6lyZW5jZSB2YWxpZGUuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIGNvbW1pdCAlcyAoJXMpIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgY29tbWl0ICVzICglcykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMgorbXNnaWQgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPG1vdGlmPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMworbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxtb3RpZj5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYyCittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyDDqXRpcXVldHRlcyAocGV1dCDDqnRyZSBjb21iaW7DqSBhdmVjIGhlYWRzKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MworbXNnaWQgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgdMOqdGVzIChwZXV0IMOqdHJlIGNvbWJpbsOpIGF2ZWMgdGFncykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjQKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICIiCisidsOpcmlmaWNhdGlvbiBkZSByw6lmw6lyZW5jZSBwbHVzIHN0cmljdGUsIG7DqWNlc3NpdGUgdW4gY2hlbWluIGRlIHLDqWbDqXJlbmNlICIKKyJleGFjdCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NyBidWlsdGluL3Nob3ctcmVmLmM6MTY5Cittc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IgorbXNnc3RyICJhZmZpY2hlciBsYSByw6lmw6lyZW5jZSBIRUFELCBtw6ptZSBzaSBlbGxlIHNlcmFpdCBmaWx0csOpZSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIgorbXNnc3RyICJkw6lyw6lmw6lyZW5jZXIgbGVzIMOpdGlxdWV0dGVzIGVuIElEcyBkJ29iamV0IgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTczCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGUgaGFjaGFnZSBTSEExIGVuIHV0aWxpc2FudCA8bj4gY2hpZmZyZXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzcKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVzdWx0cyB0byBzdGRvdXQgKHVzZWZ1bCB3aXRoIC0tdmVyaWZ5KSIKK21zZ3N0ciAiIgorIm5lIHBhcyBhZmZpY2hlciBsZXMgcsOpc3VsdGF0cyBzdXIgbGEgc29ydGllIHN0YW5kYXJkIChwcmF0aXF1ZSBhdmVjIC0tdmVyaWZ5KSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInNob3cgcmVmcyBmcm9tIHN0ZGluIHRoYXQgYXJlbid0IGluIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJhZmZpY2hlciBsZXMgcsOpZsOpcmVuY2VzIGRlIGwnZW50csOpZSBzdGFuZGFyZCBxdWkgbmUgc29udCBwYXMgZGFucyBsZSBkw6lww7R0ICIKKyJsb2NhbCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMQorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgKGluaXR8bGlzdHxzZXR8YWRkfGRpc2FibGUpIDxvcHRpb25zPiIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxhZGR8ZGlzYWJsZSkgPG9wdGlvbnM+IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjY0Cittc2dpZCAidGhpcyB3b3JrdHJlZSBpcyBub3Qgc3BhcnNlIChzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgbm90IGV4aXN0KSIKK21zZ3N0ciAiIgorImNldCBhcmJyZSBkZSB0cmF2YWlsIG4nZXN0IHBhcyBwYXJ0aWVsIChsZSBmaWNoaWVyIHNwYXJzZS1jaGVja291dCBwb3VycmFpdCAiCisibmUgcGFzIGV4aXN0ZXIpIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIyNQorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciBzcGFyc2UtY2hlY2tvdXQgZmlsZSIKK21zZ3N0ciAiIgorIsOpY2hlYyBkZSBsYSBjcsOpYXRpb24gZHUgcsOpcGVydG9pcmUgcG91ciBsZSBmaWNoaWVyIGQnZXh0cmFjdGlvbiBwYXJ0aWVsbGUiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjY2Cittc2dpZCAiZmFpbGVkIHRvIHNldCBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIHNldHRpbmciCittc2dzdHIgIsOpY2hlYyBkZSBwYXJhbcOpdHJhZ2UgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyODMKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCBbLS1jb25lXSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozMDIKK21zZ2lkICJpbml0aWFsaXplIHRoZSBzcGFyc2UtY2hlY2tvdXQgaW4gY29uZSBtb2RlIgorbXNnc3RyICJpbml0aWFsaXNlciBsJ2V4dHJhY3Rpb24gcGFydGllbGxlIGVuIG1vZGUgY29uZSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozMDgKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiaW5pdGlhbGlzZXIgbCdleHRyYWN0aW9uIHBhcnRpZWxsZSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiw6ljaGVjIMOgIGwnb3V2ZXJ0dXJlIGRlICclcyciCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBub3JtYWxpemUgcGF0aCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBub3JtYWxpc2VyIGxlIGNoZW1pbiAnJXMnIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjQxMAorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgKHNldHxhZGQpICgtLXN0ZGluIHwgPHBhdHRlcm5zPikiCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgKHNldHxhZGQpICgtLXN0ZGluIHwgPG1vdGlmcz4pIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5xdW90ZSBDLXN0eWxlIHN0cmluZyAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqWNvdGVyIGxhIGNoYcOubmUgZW4gc3R5bGUgQyAnJXMnIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjQ4OSBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjUxMworbXNnaWQgInVuYWJsZSB0byBsb2FkIGV4aXN0aW5nIHNwYXJzZS1jaGVja291dCBwYXR0ZXJucyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjaGFyZ2VyIGxlcyBtb3RpZnMgZGUgbCdleHRyYWN0aW9uIHBhcnRpZWxsZSBleGlzdGFudHMiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTU4Cittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIHN0YW5kYXJkIGluIgorbXNnc3RyICJsaXJlIGxlcyBtb3RpZnMgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1NjQKK21zZ2lkICJzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICJpbmRpcXVlciBsZXMgbW90aWZzIGRlIGwnZXh0cmFjdGlvbiBwYXJ0aWVsbGUiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTgxCittc2dpZCAiZGlzYWJsZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgImTDqXNhY3RpdmVyIGQnZXh0cmFjdGlvbiBwYXJ0aWVsbGUiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTkzCittc2dpZCAiZXJyb3Igd2hpbGUgcmVmcmVzaGluZyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiZXJyZXVyIGxvcnMgZHUgcmFmcmHDrmNoaXNzZW1lbnQgZHUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyIGJ1aWx0aW4vc3Rhc2guYzozOAorbXNnaWQgImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgc3Rhc2ggbGlzdCBbPG9wdGlvbnM+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIzIGJ1aWx0aW4vc3Rhc2guYzo0MworbXNnaWQgImdpdCBzdGFzaCBzaG93IFs8b3B0aW9ucz5dIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHNob3cgWzxvcHRpb25zPl0gWzxyZW1pc2U+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI0IGJ1aWx0aW4vc3Rhc2guYzo0OAorbXNnaWQgImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHJlbWlzZT5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjUKK21zZ2lkICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxyZW1pc2U+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI2IGJ1aWx0aW4vc3Rhc2guYzo2MworbXNnaWQgImdpdCBzdGFzaCBicmFuY2ggPGJyYW5jaG5hbWU+IFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGJyYW5jaCA8bm9tLWRlLWJyYW5jaGU+IFs8cmVtaXNlPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNyBidWlsdGluL3N0YXNoLmM6NjgKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI4Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdXVxuIgorIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XVxuIgorIiAgICAgICAgICBbLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpY2hpZXI+IFstLXBhdGhzcGVjLWZpbGUtbnVsXV1cbiIKKyIgICAgICAgICAgWy0tXSBbPHNww6ljaWZpY2F0ZXVyLWRlLWNoZW1pbj4uLi5dXSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjMyIGJ1aWx0aW4vc3Rhc2guYzo4NQorbXNnaWQgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZXNzYWdlPl0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZXNzYWdlPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MworbXNnaWQgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHJlbWlzZT5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTgKK21zZ2lkICJnaXQgc3Rhc2ggYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8cmVtaXNlPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3MworbXNnaWQgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IgorbXNnc3RyICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dIFstcXwtLXF1aWV0XSA8cmVtaXNlPiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjc4Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxzcMOpY2lmaWNhdGV1ci1kZS1jaGVtaW4+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdW5lIHZhbGlkYXRpb24gZGUgdHlwZSByZW1pc2FnZSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiVzIgorbXNnc3RyICJUcm9wIGRlIHLDqXZpc2lvbnMgc3DDqWNpZmnDqWVzIDogJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNjIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NDkKK21zZ2lkICJObyBzdGFzaCBlbnRyaWVzIGZvdW5kLiIKK21zZ3N0ciAiQXVjdW5lIGVudHLDqWUgZGUgcmVtaXNhZ2UgdHJvdXbDqWUuIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJXMgbidlc3QgcGFzIHVuZSByw6lmw6lyZW5jZSB2YWxpZGUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMjUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3NQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIGF2ZWMgZGVzIHBhcmFtw6h0cmVzIG4nZXN0IHBhcyBpbXBsw6ltZW50w6kiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MDQKK21zZ2lkICJjYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgImltcG9zc2libGUgZCdhcHBsaXF1ZXIgdW4gcmVtaXNhZ2UgZW4gY291cnMgZGUgZnVzaW9uIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSBkaWZmICVzXiEuIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGfDqW7DqXJlciAlc14hLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyMgorbXNnaWQgImNvbmZsaWN0cyBpbiBpbmRleC5Ucnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiY29uZmxpdHMgZGFucyBsJ2luZGV4LiBFc3NheWV6IHNhbnMgLS1pbmRleC4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjgKK21zZ2lkICJjb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHNhdXZlZ2FyZGVyIGwnYXJicmUgZCdpbmRleCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQzNworbXNnaWQgImNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHJlc3RhdXJlciBsZXMgZmljaGllcnMgbm9uLXN1aXZpcyBkZXB1aXMgbGUgcmVtaXNhZ2UiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzIgorbXNnc3RyICJGdXNpb24gZGUgJXMgYXZlYyAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ2MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjY4MQorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAiTCdpbmRleCBuJ2EgcGFzIMOpdMOpIHNvcnRpIGRlIHJlbWlzZS4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MjIgYnVpbHRpbi9zdGFzaC5jOjYyMQorbXNnaWQgImF0dGVtcHQgdG8gcmVjcmVhdGUgdGhlIGluZGV4IgorbXNnc3RyICJ0ZW50YXRpdmUgZGUgcmVjcsOpZXIgbCdpbmRleCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICVzICglcykiCittc2dzdHIgIiVzIHN1cHByaW3DqSAoJXMpIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJXPCoDogSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbCfDqWzDqW1lbnQgZGUgc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIiclcycgbidlc3QgcGFzIHVuZSByw6lmw6lyZW5jZSBkZSByZW1pc2FnZSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjYzMyBnaXQtbGVnYWN5LXN0YXNoLnNoOjY5NQorbXNnaWQgIlRoZSBzdGFzaCBlbnRyeSBpcyBrZXB0IGluIGNhc2UgeW91IG5lZWQgaXQgYWdhaW4uIgorbXNnc3RyICIiCisiTCdlbnRyw6llIGRlIHJlbWlzYWdlIGVzdCBjb25zZXJ2w6llIGF1IGNhcyBvw7kgdm91cyBlbiBhdXJpZXogZW5jb3JlIGJlc29pbi4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2NTYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MTMKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIkF1Y3VuZSBicmFuY2hlIHNww6ljaWZpw6llIgorCisjOiBidWlsdGluL3N0YXNoLmM6Nzk2IGJ1aWx0aW4vc3Rhc2guYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAlcyB3aXRoICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIG1ldHRyZSDDoCBqb3VyICVzIGF2ZWMgJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo4MTQgYnVpbHRpbi9zdGFzaC5jOjE0NzggYnVpbHRpbi9zdGFzaC5jOjE1NDMKK21zZ2lkICJzdGFzaCBtZXNzYWdlIgorbXNnc3RyICJtZXNzYWdlIHBvdXIgbGUgcmVtaXNhZ2UiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo4MjQKK21zZ2lkICJcImdpdCBzdGFzaCBzdG9yZVwiIHJlcXVpcmVzIG9uZSA8Y29tbWl0PiBhcmd1bWVudCIKK21zZ3N0ciAiXCJnaXQgc3Rhc2ggc3RvcmVcIiBleGlnZSB1biBhcmd1bWVudCA8Y29tbWl0PiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEwNDkgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTgKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICJBdWN1biBjaGFuZ2VtZW50IHPDqWxlY3Rpb25uw6kiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTQ5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MTUwCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIlZvdXMgbidhdmV6IHBhcyBlbmNvcmUgbGEgdmFsaWRhdGlvbiBpbml0aWFsZSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNzYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNjUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzYXV2ZXIgbCfDqXRhdCBjb3VyYW50IGRlIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTg1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MTgwCittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzYXV2ZXIgbGVzIGZpY2hpZXJzIG5vbi1zdWl2aXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTk2IGJ1aWx0aW4vc3Rhc2guYzoxMjA1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjAxCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxNAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHNhdXZlciBsJ8OpdGF0IGNvdXJhbnQgZGUgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyMzMgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMzQKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2VucmVnaXN0cmVyIGwnw6l0YXQgZGUgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyODIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMzgKK21zZ2lkICJDYW4ndCB1c2UgLS1wYXRjaCBhbmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkJ3V0aWxpc2VyIC0tcGF0Y2ggZXQgLS1pbmNsdWRlLXVudHJhY2tlZCBvdSAtLWFsbCBlbiBtw6ptZSB0ZW1wcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOTgKK21zZ2lkICJEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/IgorbXNnc3RyICJWb3VzIGF2ZXogc8O7cmVtZW50IG91Ymxpw6kgJ2dpdCBhZGQnID8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzEzIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzQ2Cittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICJQYXMgZGUgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIMOgIHNhdXZlciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMjAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTEKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2luaXRpYWxpc2VyIGxlIHJlbWlzYWdlIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMzNSBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1NQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzYXV2ZXIgbCfDqXRhdCBjb3VyYW50IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJXMiCittc2dzdHIgIkFyYnJlIGRlIHRyYXZhaWwgZXQgw6l0YXQgZGUgbCdpbmRleCBzYXV2ZWdhcmTDqXMgZGFucyAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0MzAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozODUKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgc3VwcHJpbWVyIGxlcyBjaGFuZ2VtZW50cyBkZSBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2OSBidWlsdGluL3N0YXNoLmM6MTUzNAorbXNnaWQgImtlZXAgaW5kZXgiCittc2dzdHIgImNvbnNlcnZlciBsJ2luZGV4IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3MSBidWlsdGluL3N0YXNoLmM6MTUzNgorbXNnaWQgInN0YXNoIGluIHBhdGNoIG1vZGUiCittc2dzdHIgInJlbWlzZXIgdW5lIG1vZGUgcnVzdGluZSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NzIgYnVpbHRpbi9zdGFzaC5jOjE1MzcKK21zZ2lkICJxdWlldCBtb2RlIgorbXNnc3RyICJtb2RlIHNpbGVuY2lldXgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDc0IGJ1aWx0aW4vc3Rhc2guYzoxNTM5Cittc2dpZCAiaW5jbHVkZSB1bnRyYWNrZWQgZmlsZXMgaW4gc3Rhc2giCittc2dzdHIgImluY2x1cmUgbGVzIGZpY2hpZXJzIG5vbiBzdWl2aXMgZGFucyBsYSByZW1pc2UiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDc2IGJ1aWx0aW4vc3Rhc2guYzoxNTQxCittc2dpZCAiaW5jbHVkZSBpZ25vcmUgZmlsZXMiCittc2dzdHIgImluY2x1cmUgbGVzIGZpY2hpZXJzIGlnbm9yw6lzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhlYyAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2V4w6ljdXRlciAlcyIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTgKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE5Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MzcKK21zZ2lkICJza2lwIGFuZCByZW1vdmUgYWxsIGxpbmVzIHN0YXJ0aW5nIHdpdGggY29tbWVudCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKyJzYXV0ZXIgZXQgc3VwcHJpbWVyIHRvdXRlcyBsZXMgbGlnbmVzIGNvbW1lbsOnYW50IHBhciBsZSBjYXJhY3TDqHJlIGRlICIKKyJjb21tZW50YWlyZSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6NDAKK21zZ2lkICJwcmVwZW5kIGNvbW1lbnQgY2hhcmFjdGVyIGFuZCBzcGFjZSB0byBlYWNoIGxpbmUiCittc2dzdHIgImFqb3V0ZXIgZGV2YW50IGNoYXF1ZSBsaWduZSBsZSBjYXJhY3TDqHJlIGRlIGNvbW1lbnRhaXJlIGV0IHVuIGVzcGFjZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGluZyBhIGZ1bGwgcmVmIG5hbWUsIGdvdCAlcyIKK21zZ3N0ciAiTm9tIGRlIHLDqWbDqXJlbmNlIGNvbXBsZXQgYXR0ZW5kdSwgJXMgb2J0ZW51IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjQKK21zZ2lkICJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSB0YWtlcyBubyBhcmd1bWVudHMiCittc2dzdHIgInN1Ym1vZHVsZS0taGVscGVyICBwcmludC1kZWZhdWx0LXJlbW90ZSBuJ2FjY2VwdGUgYXVjdW4gYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHN1cHByaW1lciB1biBjb21wb3NhbnQgZGUgbCdVUkwgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxMCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NQorbXNnaWQgImFsdGVybmF0aXZlIGFuY2hvciBmb3IgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgImFuY3JlIGFsdGVybmF0aXZlIHBvdXIgbGVzIGNoZW1pbnMgcmVsYXRpZnMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MTUKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTxjaGVtaW4+XSBbPGNoZW1pbj4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICJVUkwgbm9uIHRyb3V2w6llIHBvdXIgbGUgY2hlbWluIGRlIHNvdXMtbW9kdWxlICclcycgZGFucyAuZ2l0bW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRlcmluZyAnJXMnXG4iCittc2dzdHIgIkVudHLDqWUgZGFucyAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyBmb3IgJXNcbiIKKyIuIgorbXNnc3RyICIiCisicnVuX2NvbW1hbmQgYSByZXRvdXJuw6kgdW4gc3RhdHV0IG5vbi1udWwgcG91ciAlc1xuIgorIi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyB3aGlsZSByZWN1cnNpbmcgaW4gdGhlIG5lc3RlZCAiCisic3VibW9kdWxlcyBvZiAlc1xuIgorIi4iCittc2dzdHIgIiIKKyJydW5fY29tbWFuZCBhIHJldG91cm7DqSB1biBzdGF0dXQgbm9uLW51bCBwZW5kYW50IGxhIHLDqWN1cnNpb24gZGFucyBsZXMgc291cy0iCisibW9kdWxlcyBpbmNsdXMgZGUgJXNcbiIKKyIuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY1Cittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IG9mIGVudGVyaW5nIGVhY2ggc3VibW9kdWxlIGNvbW1hbmQiCittc2dzdHIgIiIKKyJTdXBwcmltZXIgbGEgc29ydGllIGxvcnMgZGUgbCdlbnRyw6llIGRhbnMgY2hhcXVlIGNvbW1hbmRlIGRlIHNvdXMtbW9kdWxlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDYzCittc2dpZCAiUmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzIgorbXNnc3RyICJQYXJjb3VyaXIgcsOpY3Vyc2l2ZW1lbnQgbGVzIHNvdXMtbW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU3MgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBmb3JlYWNoIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gPGNvbW1hbmQ+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDxjb21tYW5kZT4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBsb29rIHVwIGNvbmZpZ3VyYXRpb24gJyVzJy4gQXNzdW1pbmcgdGhpcyByZXBvc2l0b3J5IGlzIGl0cyBvd24gIgorImF1dGhvcml0YXRpdmUgdXBzdHJlYW0uIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSB0cm91dmVyIGxhIGNvbmZpZ3VyYXRpb24gJyVzJy4gQ2UgZMOpcMO0dCBlc3QgY29uc2lkw6lyw6kgY29tbWUgIgorInNvbiBwcm9wcmUgYW1vbnQgZCdhdXRvcml0w6kuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIsOJY2hlYyBkJ2VucmVnaXN0cmVtZW50IGRlIGwnVVJMIHBvdXIgbGUgY2hlbWluIGRlIHNvdXMtbW9kdWxlICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSByZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiU291cy1tb2R1bGUgJyVzJyAoJXMpIGVucmVnaXN0csOpIHBvdXIgbGUgY2hlbWluICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBjb21tYW5kIHVwZGF0ZSBtb2RlIHN1Z2dlc3RlZCBmb3Igc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAiIgorImF0dGVudGlvbsKgOiBub3VzIHZvdXMgc3VnZ8Opcm9ucyBkZSBzcMOpY2lmaWVyIHVuZSBjb21tYW5kZSBkZSBtb2RlIGRlIG1pc2Ugw6AgIgorImpvdXIgcG91ciBsZSBzb3VzLW1vZHVsZSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisiw4ljaGVjIGQnZW5yZWdpc3RyZW1lbnQgZHUgbW9kZSBkZSBtaXNlIMOgIGpvdXIgcG91ciBsZSBjaGVtaW4gZGUgc291cy1tb2R1bGUgIgorIiclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTAKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiU3VwcHJpbWVyIGxhIHNvcnRpZSBsb3JzIGRlIGwnaW5pdGlhbGlzYXRpb24gZCd1biBzb3VzLW1vZHVsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8b3B0aW9ucz5dIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPG9wdGlvbnM+XSBbPGNoZW1pbj5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Nzg5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorIlBhcyBkZSBtaXNlIGVuIGNvcnJlc3BvbmRhbmNlIGR1IHNvdXMtbW9kdWxlIHRyb3V2w6kgZGFucyAuZ2l0bW9kdWxlcyBwb3VyIGxlICIKKyJjaGVtaW4gJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHJlZiBpbnNpZGUgdGhlIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSBIRUFEIGRhbnMgbGUgc291cy1tb2R1bGUgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg2NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAzMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJyw6ljdXJzaW9uIGltcG9zc2libGUgZGFucyBsZSBzb3VzLW1vZHVsZSAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODg4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTk5Cittc2dpZCAiU3VwcHJlc3Mgc3VibW9kdWxlIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgInN1cHByaW1lciBsYSBzb3J0aWUgZCfDqXRhdCBkdSBzb3VzLW1vZHVsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4OQorbXNnaWQgIiIKKyJVc2UgY29tbWl0IHN0b3JlZCBpbiB0aGUgaW5kZXggaW5zdGVhZCBvZiB0aGUgb25lIHN0b3JlZCBpbiB0aGUgc3VibW9kdWxlICIKKyJIRUFEIgorbXNnc3RyICIiCisiVXRpbGlzZXIgbGUgY29tbWl0IHN0b2Nrw6kgZGFucyBsJ2luZGV4IGF1IGxpZXUgZGUgY2VsdWkgc3RvY2vDqSBkYW5zIGxhIEhFQUQgIgorImR1IHNvdXMtbW9kdWxlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODkwCittc2dpZCAicmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzIgorbXNnc3RyICJwYXJjb3VyaXIgcsOpY3Vyc2l2ZW1lbnQgbGVzIHNvdXMtbW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg5NQorbXNnaWQgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzxjaGVtaW4+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkxOQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIDxub20+IDxjaGVtaW4+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJyVzJ1xuIgorbXNnc3RyICJTeW5jaHJvbmlzYXRpb24gZGUgbCdVUkwgc291cy1tb2R1bGUgcG91ciAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGQnZW5yZWdpc3RyZW1lbnQgZGUgbCdVUkwgcG91ciBsZSBjaGVtaW4gZGUgc291cy1tb2R1bGUgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGdldCB0aGUgZGVmYXVsdCByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLDqWNoZWMgZCdvYnRlbnRpb24gZHUgZMOpcMO0dCBkaXN0YW50IHBhciBkw6lmYXV0IHBvdXIgbGUgc291cy1tb2R1bGUgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLDqWNoZWMgZGUgbWlzZSDDoCBqb3VyIGR1IGTDqXDDtHQgZGlzdGFudCBwb3VyIGxlIHNvdXMtbW9kdWxlICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDYxCittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IG9mIHN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCIKK21zZ3N0ciAiIgorIlN1cHByaW1lciBsYSBzb3J0aWUgbG9ycyBkZSBsYSBzeW5jaHJvbmlzYXRpb24gZGUgbCdVUkwgZCd1biBzb3VzLW1vZHVsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNjgKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzxjaGVtaW4+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91ICIKKyJyZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyJMJ2FyYnJlIGRlIHRyYXZhaWwgZHUgc291cy1tb2R1bGUgJyVzJyBjb250aWVudCB1biByw6lwZXJ0b2lyZSAuZ2l0ICh1dGlsaXNleiAiCisiJ3JtIC1yZicgc2kgdm91cyB2b3VsZXogdnJhaW1lbnQgbGUgc3VwcHJpbWVyIGVuIGluY2x1YW50IHRvdXQgc29uICIKKyJoaXN0b3JpcXVlKSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkICIKKyJ0aGVtIgorbXNnc3RyICIiCisiTCdhcmJyZSBkZSB0cmF2YWlsIGR1IHNvdXMtbW9kdWxlICclcycgY29udGllbnQgZGVzIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyA7ICIKKyJ1dGlsaXNleiAnLWYnIHBvdXIgbGVzIGFubnVsZXIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIKK21zZ3N0ciAiUsOpcGVydG9pcmUgJyVzJyBuZXR0b3nDqVxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsJ2FyYnJlIGRlIHRyYXZhaWwgZHUgc291cy1tb2R1bGUgJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGVtcHR5IHN1Ym1vZHVsZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIHLDqXBlcnRvaXJlIHZpZGUgZHUgc291cy1tb2R1bGUgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiU291cy1tb2R1bGUgJyVzJyAoJXMpIG5vbiBlbnJlZ2lzdHLDqSBwb3VyIGxlIGNoZW1pbiAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjAwCittc2dpZCAiUmVtb3ZlIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWVzIGV2ZW4gaWYgdGhleSBjb250YWluIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIiIKKyLDiWxpbWluZXIgbGVzIGFyYnJlcyBkZSB0cmF2YWlsIGRlcyBzb3VzLW1vZHVsZXMgbcOqbWUgcydpbHMgY29udGllbm5lbnQgZGVzICIKKyJtb2RpZmljYXRpb25zIGxvY2FsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjAxCittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiRMOpc2VucmVnaXN0cmVyIHRvdXMgbGVzIHNvdXMtbW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMDYKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzxwYXRoPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzxjaGVtaW4+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjIwCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorIlV0aWxpc2V6ICctLWFsbCcgc2kgdm91cyB2b3VsZXogdnJhaW1lbnQgcsOpaW5pdGlhbGlzZXIgdG91cyBsZXMgc291cy1tb2R1bGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTI4OQorbXNnaWQgIiIKKyJBbiBhbHRlcm5hdGUgY29tcHV0ZWQgZnJvbSBhIHN1cGVycHJvamVjdCdzIGFsdGVybmF0ZSBpcyBpbnZhbGlkLlxuIgorIlRvIGFsbG93IEdpdCB0byBjbG9uZSB3aXRob3V0IGFuIGFsdGVybmF0ZSBpbiBzdWNoIGEgY2FzZSwgc2V0XG4iCisic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgdG8gJ2luZm8nIG9yLCBlcXVpdmFsZW50bHksIGNsb25lIHdpdGhcbiIKKyInLS1yZWZlcmVuY2UtaWYtYWJsZScgaW5zdGVhZCBvZiAnLS1yZWZlcmVuY2UnLiIKK21zZ3N0ciAiIgorIlVuZSBhbHRlcm5hdGl2ZSBjYWxjdWzDqWUgZGVwdWlzIGwnYWx0ZXJuYXRpdmUgZHUgc3VwZXItcHJvamV0IGVzdCBpbnZhbGlkZS5cbiIKKyJQb3VyIHBlcm1ldHRyZSDDoCBHaXQgZGUgY2xvbmVyIHNhbnMgYWx0ZXJuYXRpdmUgZGFucyB1biB0ZWwgY2FzLCByw6lnbGV6XG4iCisic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgw6AgJ2luZm8nLCBvdSBkZSBtYW5pw6hyZSDDqXF1aXZhbGVudGUsXG4iCisiY2xvbmV6IGF2ZWMgJy0tcmVmZXJlbmNlLWlmLWFibGUnIGF1IGxpZXUgZGUgJy0tcmVmZXJlbmNlJy4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzI4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBhZGQgYWx0ZXJuYXRlOiAlcyIKK21zZ3N0ciAibGUgc291cy1tb2R1bGUgJyVzJyBuZSBwZXV0IHBhcyBham91dGVyIGQnYWx0ZXJuYXRpdmXCoDogJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICIiCisiTGEgdmFsZXVyICclcycgcG91ciBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBuJ2VzdCBwYXMgcmVjb25udWUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAiTGEgdmFsZXVyICclcycgcG91ciBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24gbidlc3QgcGFzIHJlY29ubnVlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5OAorbXNnaWQgIndoZXJlIHRoZSBuZXcgc3VibW9kdWxlIHdpbGwgYmUgY2xvbmVkIHRvIgorbXNnc3RyICJlbXBsYWNlbWVudCBvw7kgbGUgc291cy1tb2R1bGUgc2VyYSBjbG9uw6kiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAxCittc2dpZCAibmFtZSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSIKK21zZ3N0ciAibm9tIGR1IG5vdXZlYXUgc291cy1tb2R1bGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA0Cittc2dpZCAidXJsIHdoZXJlIHRvIGNsb25lIHRoZSBzdWJtb2R1bGUgZnJvbSIKK21zZ3N0ciAiVVJMIGRlcHVpcyBsYXF1ZWxsZSBjbG9uZXIgbGUgc291cy1tb2R1bGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDEyCittc2dpZCAiZGVwdGggZm9yIHNoYWxsb3cgY2xvbmVzIgorbXNnc3RyICJwcm9mb25kZXVyIGRlIGwnaGlzdG9yaXF1ZSBkZXMgY2xvbmVzIHN1cGVyZmljaWVscyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MjQKK21zZ2lkICJmb3JjZSBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICJmb3JjZXIgbCdhZmZpY2hhZ2UgZGUgbGEgcHJvZ3Jlc3Npb24gZHUgY2xvbmFnZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MjYKK21zZ2lkICJkaXNhbGxvdyBjbG9uaW5nIGludG8gbm9uLWVtcHR5IGRpcmVjdG9yeSIKK21zZ3N0ciAiaW50ZXJkaXJlIGRlIGNsb25lciBkYW5zIHVuIHLDqXBlcnRvaXJlIG5vbi12aWRlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQyNAorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxuYW1lPl0gWy0tZGVwdGggPGRlcHRoPl0gWy0tc2luZ2xlLWJyYW5jaF0gLS11cmwgIgorIjx1cmw+IC0tcGF0aCA8cGF0aD4iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxjaGVtaW4+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8ZMOpcMO0dD5dIFstLW5hbWUgPG5vbT5dIFstLWRlcHRoIDxwcm9mb25kZXVyPl0gWy0tc2luZ2xlLWJyYW5jaF0gLS11cmwgPHVybD4gIgorIi0tcGF0aCA8Y2hlbWluPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gY3JlYXRlL3VzZSAnJXMnIGluIGFub3RoZXIgc3VibW9kdWxlJ3MgZ2l0IGRpciIKK21zZ3N0ciAiIgorInJlZnVzIGRlIGNyw6llci91dGlsaXNlciAnJXMnIGRhbnMgdW4gcsOpcGVydG9pcmUgZ2l0IGQndW4gYXV0cmUgc291cy1tb2R1bGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiTGUgY2xvbmFnZSBkZSAnJXMnIGRhbnMgbGUgY2hlbWluIGRlIHNvdXMtbW9kdWxlICclcycgYSDDqWNob3XDqSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlyZWN0b3J5IG5vdCBlbXB0eTogJyVzJyIKK21zZ3N0ciAibGUgcsOpcGVydG9pcmUgbidlc3QgcGFzIHZpZGUgOiAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIHLDqXBlcnRvaXJlIGRlIHNvdXMtbW9kdWxlIHBvdXIgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJtb2RlIGRlIG1pc2Ugw6Agam91ciAnJXMnIGludmFsaWRlIHBvdXIgbGUgY2hlbWluIGRlIHNvdXMtbW9kdWxlICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisiTW9kZSBkZSBtaXNlIMOgIGpvdXIgJyVzJ2ludmFsaWRlIGNvbmZpZ3Vyw6kgcG91ciBsZSBjaGVtaW4gZGUgc291cy1tb2R1bGUgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyVzJyBub3QgaW5pdGlhbGl6ZWQiCittc2dzdHIgIkxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJXMnIG4nZXN0IHBhcyBpbml0aWFsaXPDqSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MjEKK21zZ2lkICJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAiVm91cyB2b3VkcmlleiBzw7tyZW1lbnQgdXRpbGlzZXIgJ3VwZGF0ZSAtLWluaXQnwqA/IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyB1bm1lcmdlZCBzdWJtb2R1bGUgJXMiCittc2dzdHIgIlNvdXMtbW9kdWxlIG5vbiBmdXNpb25uw6kgJXMgbm9uIHRyYWl0w6kiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJTb3VzLW1vZHVsZSAnJXMnIG5vbiB0cmFpdMOpIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJy4gUmV0cnkgc2NoZWR1bGVkIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNsb25lciAnJXMnLiBSw6llc3NhaSBwcsOpdnUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnIGEgc2Vjb25kIHRpbWUsIGFib3J0aW5nIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNsb25lciAnJXMnIHBvdXIgbGEgc2Vjb25kZSBmb2lzLCBhYmFuZG9uIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwMyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE0OQorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJjaGVtaW4gZGFucyBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwNgorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlLCBhY3Jvc3MgbmVzdGVkIHN1Ym1vZHVsZSBib3VuZGFyaWVzIgorbXNnc3RyICIiCisiY2hlbWluIGRhbnMgbGEgY29waWUgZGUgdHJhdmFpbCwgdHJhdmVyc2FudCBsZXMgZnJvbnRpw6hyZXMgZGUgc291cy1tb2R1bGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMAorbXNnaWQgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiCittc2dzdHIgInZhbGV1cnMgcG9zc2libGVzwqA6IHJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG91IG5vbmUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE2Cittc2dpZCAiQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSB0cnVuY2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zIgorbXNnc3RyICJDcsOpZXIgdW4gY2xvbmUgc3VwZXJmaWNpZWwgdHJvbnF1w6kgYXUgbm9tYnJlIGRlIHLDqXZpc2lvbnMgc3DDqWNpZmnDqSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTkKK21zZ2lkICJwYXJhbGxlbCBqb2JzIgorbXNnc3RyICJqb2JzIHBhcmFsbMOobGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyMQorbXNnaWQgIndoZXRoZXIgdGhlIGluaXRpYWwgY2xvbmUgc2hvdWxkIGZvbGxvdyB0aGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiIKK21zZ3N0ciAic3DDqWNpZmllIHNpIGxlIGNsb25hZ2UgaW5pdGlhbCBkb2l0IMOqdHJlIGF1c3NpIHN1cGVyZmljaWVsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyMgorbXNnaWQgImRvbid0IHByaW50IGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgIm5lIHBhcyBhZmZpY2hlciBsYSBwcm9ncmVzc2lvbiBkdSBjbG9uYWdlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkzMworbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciB1cGRhdGUtY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciB1cGRhdGUtY2xvbmUgWy0tcHJlZml4PTxjaGVtaW4+XSBbPGNoZW1pbj4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk0NgorbXNnaWQgImJhZCB2YWx1ZSBmb3IgdXBkYXRlIHBhcmFtZXRlciIKK21zZ3N0ciAidmFsZXVyIGludmFsaWRlIHBvdXIgbGEgbWlzZSDDoCBqb3VyIGR1IHBhcmFtw6h0cmUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0IGJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0ICIKKyJ0aGUgc3VwZXJwcm9qZWN0IGlzIG5vdCBvbiBhbnkgYnJhbmNoIgorbXNnc3RyICIiCisibGEgYnJhbmNoZSBkdSBzb3VzLW1vZHVsZSAlcyBlc3QgY29uZmlndXLDqWUgcG91ciBow6lyaXRlciBkZSBsYSBicmFuY2hlIGR1ICIKKyJzdXBlcnByb2pldCwgbWFpcyBsZSBzdXBlcnByb2pldCBuJ2VzdCBzdXIgYXVjdW5lIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgYSByZXBvc2l0b3J5IGhhbmRsZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgdHJvdXZlciB1bmUgcG9pZ27DqWUgZGUgZMOpcMO0dCBwb3VyIGxlIHNvdXMtbW9kdWxlICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTUwCittc2dpZCAicmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMiCittc2dzdHIgInBhcmNvdXJpciByw6ljdXJzaXZlbWVudCBsZXMgc291cy1tb2R1bGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE1NgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBhYnNvcmItZ2l0LWRpcnMgWzxvcHRpb25zPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBlbWJlZC1naXQtZGlyIFs8b3B0aW9ucz5dIFs8Y2hlbWluPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjEyCittc2dpZCAiY2hlY2sgaWYgaXQgaXMgc2FmZSB0byB3cml0ZSB0byB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAidsOpcmlmaWVyIHNpIMOpY3JpcmUgZGFucyBsZSBmaWNoaWVyIC5naXRtb2R1bGVzIGVzdCBzdXIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjE1Cittc2dpZCAidW5zZXQgdGhlIGNvbmZpZyBpbiB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAiZMOpc2FjdGl2ZXIgbGEgY29uZmlndXJhdGlvbiBkYW5zIGxlIGZpY2hpZXIgLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjIwCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA8bmFtZT4gWzx2YWx1ZT5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIG5hbWUgWzx2YWxldXI+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMjEKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5vbT4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjIyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyNDEgZ2l0LXN1Ym1vZHVsZS5zaDoxNzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpcyBpbiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisidmV1aWxsZXogdm91cyBhc3N1cmVyIHF1ZSBsZSBmaWNoaWVyIC5naXRtb2R1bGVzIGVzdCBkYW5zIGwnYXJicmUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyOTEgZ2l0LmM6NDMzIGdpdC5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2Vzbid0IHN1cHBvcnQgLS1zdXBlci1wcmVmaXgiCittc2dzdHIgIiVzIG5lIGfDqHJlIHBhcyAtLXN1cGVyLXByZWZpeCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBzdWJtb2R1bGUtLWhlbHBlciBzdWJjb21tYW5kIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1bmUgc291cy1jb21tYW5kZSB2YWxpZGUgZGUgc3VibW9kdWxlLS1oZWxwZXIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OAorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gbm9tIFs8csOpZsOpcmVuY2U+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxub20+IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwCittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAiIgorInN1cHByaW1lciBsZSBtZXNzYWdlIGQnZXJyZXVyIHBvdXIgdW5lIHLDqWbDqXJlbmNlIG5vbiBzeW1ib2xpcXVlIChkw6l0YWNow6llKSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MQorbXNnaWQgImRlbGV0ZSBzeW1ib2xpYyByZWYiCittc2dzdHIgInN1cHByaW1lciBsYSByw6lmw6lyZW5jZSBzeW1ib2xpcXVlIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICJyYWNjb3VyY2lyIGwnYWZmaWNoYWdlIGRlIGxhIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiIKK21zZ3N0ciAicmFpc29uIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICJyYWlzb24gZGUgbGEgbWlzZSDDoCBqb3VyIgorCisjOiBidWlsdGluL3RhZy5jOjI1Cittc2dpZCAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dXG4iCisiXHRcdDx0YWduYW1lPiBbPGhlYWQ+XSIKK21zZ3N0ciAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8aWQtY2zDqT5dIFstZl0gWy1tIDxtZXNzYWdlPiB8IC1GIDxmaWNoaWVyPl1cbiIKKyJcdFx0PG5vbS3DqXRpcXVldHRlPiBbPGhlYWQ+XSIKKworIzogYnVpbHRpbi90YWcuYzoyNworbXNnaWQgImdpdCB0YWcgLWQgPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC1kIDxub23DqXRpcXVldHRlPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzoyOAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0gWy0tIgorInBvaW50cy1hdCA8b2JqZWN0Pl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLW5vLWNvbnRhaW5zIDxjb21taXQ+XSBbLS0iCisicG9pbnRzLWF0IDxvYmpldD5dXG4iCisiXHRcdFstLWZvcm1hdD08Zm9ybWF0Pl0gWy0tW25vLV1tZXJnZWQgWzxjb21taXQ+XV0gWzxtb3RpZj4uLi5dIgorCisjOiBidWlsdGluL3RhZy5jOjMwCittc2dpZCAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDxub23DqXRpcXVldHRlPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICLDqXRpcXVldHRlICclcycgbm9uIHRyb3V2w6llLiIKKworIzogYnVpbHRpbi90YWcuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICLDiXRpcXVldHRlICclcycgc3VwcHJpbcOpZSAoZWxsZSDDqXRhaXQgc3VyICVzKVxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLDiWNyaXZleiB1biBtZXNzYWdlIHBvdXIgbCfDqXRpcXVldHRlIDpcbiIKKyIgICVzXG4iCisiTGVzIGxpZ25lcyBjb21tZW7Dp2FudCBwYXIgJyVjJyBzZXJvbnQgaWdub3LDqWVzLlxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91ICIKKyJ3YW50IHRvLlxuIgorbXNnc3RyICIiCisiXG4iCisiw4ljcml2ZXogdW4gbWVzc2FnZSBwb3VyIGwnw6l0aXF1ZXR0ZSA6XG4iCisiICAlc1xuIgorIkxlcyBsaWduZXMgY29tbWVuw6dhbnQgcGFyICclYycgc2Vyb250IGdhcmTDqWVzIDsgdm91cyBwb3V2ZXogbGVzIHJldGlyZXIgdm91cy0iCisibcOqbWUgc2kgdm91cyBsZSBzb3VoYWl0ZXouXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTk4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzaWduZXIgbCfDqXRpcXVldHRlIgorCisjOiBidWlsdGluL3RhZy5jOjIwMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgZmljaGllciBkJ8OpdGlxdWV0dGVzIgorCisjOiBidWlsdGluL3RhZy5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgY3JlYXRlZCBhIG5lc3RlZCB0YWcuIFRoZSBvYmplY3QgcmVmZXJyZWQgdG8gYnkgeW91ciBuZXcgdGFnIGlzXG4iCisiYWxyZWFkeSBhIHRhZy4gSWYgeW91IG1lYW50IHRvIHRhZyB0aGUgb2JqZWN0IHRoYXQgaXQgcG9pbnRzIHRvLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgdGFnIC1mICVzICVzXnt9IgorbXNnc3RyICIiCisiVm91cyBhdmV6IGNyw6nDqSB1bmUgw6l0aXF1ZXR0ZSBuaWNow6llLiBMJ29iamV0IHBvaW50w6kgcGFyIHZvdHJlIG5vdXZlbGxlICIKKyLDqXRpcXVldHRlXG4iCisiZXN0IGTDqWrDoCB1bmUgw6l0aXF1ZXR0ZS4gU2kgdm91cyB2b3VsaWV6IMOpdGlxdWV0ZXIgbCdvYmpldCBwb2ludMOpLCAiCisidXRpbGlzZXrCoDpcbiIKKyJcbiIKKyJcdGdpdCB0YWcgLWYgJXMgJXNee30iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjMyCittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAibWF1dmFpcyB0eXBlIGQnb2JqZXQuIgorCisjOiBidWlsdGluL3RhZy5jOjI4NAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAicGFzIGRlIG1lc3NhZ2UgcG91ciBsJ8OpdGlxdWV0dGUgPyIKKworIzogYnVpbHRpbi90YWcuYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiTGUgbWVzc2FnZSBwb3VyIGwnw6l0aXF1ZXR0ZSBhIMOpdMOpIGxhaXNzw6kgZGFucyAlc1xuIgorCisjOiBidWlsdGluL3RhZy5jOjQwMgorbXNnaWQgImxpc3QgdGFnIG5hbWVzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgbm9tcyBkZXMgw6l0aXF1ZXR0ZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA0Cittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgImFmZmljaGUgPG4+IGxpZ25lcyBkZSBjaGFxdWUgbWVzc2FnZSBkJ8OpdGlxdWV0dGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA2Cittc2dpZCAiZGVsZXRlIHRhZ3MiCittc2dzdHIgInN1cHByaW1lciBkZXMgw6l0aXF1ZXR0ZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA3Cittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgInbDqXJpZmllciBkZXMgw6l0aXF1ZXR0ZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA5Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIk9wdGlvbnMgZGUgY3LDqWF0aW9uIGRlIGwnw6l0aXF1ZXR0ZSIKKworIzogYnVpbHRpbi90YWcuYzo0MTEKK21zZ2lkICJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiCittc2dzdHIgIsOpdGlxdWV0dGUgYW5ub3TDqWUsIG7DqWNlc3NpdGUgdW4gbWVzc2FnZSIKKworIzogYnVpbHRpbi90YWcuYzo0MTMKK21zZ2lkICJ0YWcgbWVzc2FnZSIKK21zZ3N0ciAibWVzc2FnZSBwb3VyIGwnw6l0aXF1ZXR0ZSIKKworIzogYnVpbHRpbi90YWcuYzo0MTUKK21zZ2lkICJmb3JjZSBlZGl0IG9mIHRhZyBtZXNzYWdlIgorbXNnc3RyICJmb3JjZXIgbCfDqWRpdGlvbiBkdSBtZXNzYWdlIGQnw6l0aXF1ZXRhZ2UiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE2Cittc2dpZCAiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIKK21zZ3N0ciAiw6l0aXF1ZXR0ZSBhbm5vdMOpZSBldCBzaWduw6llIGF2ZWMgR1BHIgorCisjOiBidWlsdGluL3RhZy5jOjQxOQorbXNnaWQgInVzZSBhbm90aGVyIGtleSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgInV0aWxpc2VyIHVuZSBhdXRyZSBjbMOpIHBvdXIgc2lnbmVyIGwnw6l0aXF1ZXR0ZSIKKworIzogYnVpbHRpbi90YWcuYzo0MjAKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICJyZW1wbGFjZXIgbCfDqXRpcXVldHRlIHNpIGVsbGUgZXhpc3RlIgorCisjOiBidWlsdGluL3RhZy5jOjQyMSBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjkKK21zZ2lkICJjcmVhdGUgYSByZWZsb2ciCittc2dzdHIgImNyw6llciB1biByZWZsb2ciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIzCittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBkJ2FmZmljaGFnZSBkZXMgw6l0aXF1ZXR0ZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI0Cittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICJhZmZpY2hlciBsYSBsaXN0ZSBkZXMgw6l0aXF1ZXR0ZXMgc291cyBmb3JtZSBkZSBjb2xvbm5lcyIKKworIzogYnVpbHRpbi90YWcuYzo0MjUgYnVpbHRpbi90YWcuYzo0MjcKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgw6l0aXF1ZXR0ZXMgcXVpIGNvbnRpZW5uZW50IGxhIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI2IGJ1aWx0aW4vdGFnLmM6NDI4Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIMOpdGlxdWV0dGVzIHF1aSBuZSBjb250aWVubmVudCBwYXMgbGEgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi90YWcuYzo0MjkKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIMOpdGlxdWV0dGVzIHF1aSBzb250IGZ1c2lvbm7DqWVzIgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIMOpdGlxdWV0dGVzIHF1aSBuZSBzb250IHBhcyBmdXNpb25uw6llcyIKKworIzogYnVpbHRpbi90YWcuYzo0MzQKK21zZ2lkICJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyDDqXRpcXVldHRlcyBkZSBsJ29iamV0IgorCisjOiBidWlsdGluL3RhZy5jOjQ4MgorbXNnaWQgIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiBldCAtbiBzb250IGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA0Cittc2dpZCAiLW4gb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgImwnb3B0aW9uIC1uIGVzdCBhdXRvcmlzw6llIHNldWxlbWVudCBlbiBtb2RlIGRlIGxpc3RlIgorCisjOiBidWlsdGluL3RhZy5jOjUwNgorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgImwnb3B0aW9uIC0tY29udGFpbnMgZXN0IGF1dG9yaXPDqWUgc2V1bGVtZW50IGVuIG1vZGUgZGUgbGlzdGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA4Cittc2dpZCAiLS1uby1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAibCdvcHRpb24gLS1jb250YWlucyBlc3QgYXV0b3Jpc8OpZSBzZXVsZW1lbnQgZW4gbW9kZSBsaXN0ZSIKKworIzogYnVpbHRpbi90YWcuYzo1MTAKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAibCdvcHRpb24gLS1wb2ludHMtYXQgZXN0IGF1dG9yaXPDqWUgc2V1bGVtZW50IGVuIG1vZGUgbGlzdGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEyCittc2dpZCAiLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIiIKKyJsZXMgb3B0aW9ucyAtLW1lcmdlZCBldCAtLW5vLW1lcmdlZCBuZSBzb250IGF1dG9yaXPDqWVzIHF1J2VuIG1vZGUgbGlzdGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTIzCittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJ1bmUgc2V1bGUgb3B0aW9uIC1GIG91IC1tIGVzdCBhdXRvcmlzw6llLiIKKworIzogYnVpbHRpbi90YWcuYzo1NDIKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgInRyb3AgZGUgcGFyYW3DqHRyZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBub20gZCfDqXRpcXVldHRlIHZhbGlkZS4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJsJ8OpdGlxdWV0dGUgJyVzJyBleGlzdGUgZMOpasOgIgorCisjOiBidWlsdGluL3RhZy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIsOJdGlxdWV0dGUgJyVzJyBtaXNlIMOgIGpvdXIgKGVsbGUgw6l0YWl0IHN1ciAlcylcbiIKKworIzogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjUwMgorbXNnaWQgIlVucGFja2luZyBvYmplY3RzIgorbXNnc3RyICJEw6lwYXF1ZXRhZ2UgZGVzIG9iamV0cyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIGNyw6lhdGlvbiBkdSByw6lwZXJ0b2lyZSAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgY3LDqWF0aW9uIGR1IGZpY2hpZXIgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIHN1cHByZXNzaW9uIGR1IGZpY2hpZXIgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE1IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgc3VwcHJlc3Npb24gZHUgcsOpcGVydG9pcmUgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRlc3RpbmcgbXRpbWUgaW4gJyVzJyAiCittc2dzdHIgIlRlc3QgZHUgbXRpbWUgZGFucyAnJXMnICIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNTQKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZmlsZSIKK21zZ3N0ciAiIgorImwnaW5mb3JtYXRpb24gZGUgc3RhdCBkdSByw6lwZXJ0b2lyZSBuZSBjaGFuZ2UgcGFzIGFwcsOocyBham91dCBkJ3VuIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTY3Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImwnaW5mb3JtYXRpb24gZGUgc3RhdCBkdSByw6lwZXJ0b2lyZSBuZSBjaGFuZ2UgcGFzIGFwcsOocyBham91dCBkJ3VuIHLDqXBlcnRvaXJlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE4MAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciB1cGRhdGluZyBhIGZpbGUiCittc2dzdHIgIiIKKyJsJ2luZm9ybWF0aW9uIGRlIHN0YXQgZHUgcsOpcGVydG9pcmUgY2hhbmdlIGFwcsOocyBtaXNlIMOgIGpvdXIgZCd1biBmaWNoaWVyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5MQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciBhZGRpbmcgYSBmaWxlIGluc2lkZSBzdWJkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJsJ2luZm9ybWF0aW9uIGRlIHN0YXQgZHUgcsOpcGVydG9pcmUgY2hhbmdlIGFwcsOocyBsJ2Fqb3V0IGQndW4gZmljaGllciBkYW5zICIKKyJ1biBzb3VzLXLDqXBlcnRvaXJlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIwMgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZmlsZSIKK21zZ3N0ciAiIgorImwnaW5mb3JtYXRpb24gZGUgc3RhdCBkdSByw6lwZXJ0b2lyZSBuZSBjaGFuZ2UgcGFzIGFwcsOocyBsYSBzdXBwcmVzc2lvbiBkJ3VuICIKKyJmaWNoaWVyPCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTUKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImwnaW5mb3JtYXRpb24gZGUgc3RhdCBkdSByw6lwZXJ0b2lyZSBuZSBjaGFuZ2UgcGFzIGFwcsOocyBsYSBzdXBwcmVzc2lvbiBkJ3VuICIKKyJyw6lwZXJ0b2lyZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMjIKK21zZ2lkICIgT0siCittc2dzdHIgIiBPSyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo1OTEKK21zZ2lkICJnaXQgdXBkYXRlLWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCB1cGRhdGUtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpY2hpZXI+Li4uXSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzQKK21zZ2lkICJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiCittc2dzdHIgImNvbnRpbnVlciBkZSByYWZyYcOuY2hpciBtw6ptZSBzaSBsJ2luZGV4IGEgYmVzb2luIGQndW5lIG1pc2Ugw6Agam91ciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzcKK21zZ2lkICJyZWZyZXNoOiBpZ25vcmUgc3VibW9kdWxlcyIKK21zZ3N0ciAicmFmcmHDrmNoaXIgOiBpZ25vcmVyIGxlcyBzb3VzLW1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgwCittc2dpZCAiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiCittc2dzdHIgIm5lIHBhcyBpZ25vcmVyIGxlcyBub3V2ZWF1eCBmaWNoaWVycyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODIKK21zZ2lkICJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIKK21zZ3N0ciAibGFpc3NlciBsZXMgZmljaGllcnMgcmVtcGxhY2VyIGRlcyByw6lwZXJ0b2lyZXMgZXQgdmljZS12ZXJzYSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODQKK21zZ2lkICJub3RpY2UgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICJhdmlzZXIgZGVzIGZpY2hpZXJzIG1hbnF1YW50cyBkYW5zIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg2Cittc2dpZCAicmVmcmVzaCBldmVuIGlmIGluZGV4IGNvbnRhaW5zIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgInJhZnJhw65jaGlyIG3Dqm1lIHNpIGwnaW5kZXggY29udGllbnQgZGVzIMOpbMOpbWVudHMgbm9uIGZ1c2lvbm7DqXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg5Cittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICJyYWZyYcOuY2hpciBsJ2luZm9ybWF0aW9uIGRlIHN0YXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkzCittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICJjb21tZSAtLXJlZnJlc2gsIG1haXMgZW4gaWdub3JhbnQgbCdvcHRpb24gYXNzdW1lLXVuY2hhbmdlZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTcKK21zZ2lkICI8bW9kZT4sPG9iamVjdD4sPHBhdGg+IgorbXNnc3RyICI8bW9kZT4sIDxvYmpldD4sIDxjaGVtaW4+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiYWpvdXRlciBsJ8OpbMOpbWVudCBzcMOpY2lmacOpIGRhbnMgbCdpbmRleCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA4Cittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICJtYXJxdWVyIGxlcyBmaWNoaWVycyBjb21tZSBcIm5vbiBjaGFuZ2VhbnRzXCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxMQorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAibWV0dHJlIMOgIHrDqXJvIGxlIGJpdCBzdXBwb3PDqS1ub24tbW9kaWZpw6kiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgIm1hcnF1ZXIgbGVzIGZpY2hpZXJzIGNvbW1lIFwiaW5kZXggc2V1bGVtZW50XCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNworbXNnaWQgImNsZWFyIHNraXAtd29ya3RyZWUgYml0IgorbXNnc3RyICJtZXR0cmUgw6AgesOpcm8gbGUgYml0IHNhdXRlci1sYS1jb3BpZS1kZSB0cmF2YWlsIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjAKK21zZ2lkICJkbyBub3QgdG91Y2ggaW5kZXgtb25seSBlbnRyaWVzIgorbXNnc3RyICJuZSBwYXMgdG91Y2hlciBhdXggZW50csOpZXMgcmVzdHJlaW50ZXMgw6AgbCdpbmRleCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIyCittc2dpZCAiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKyJham91dGVyIHNldWxlbWVudCDDoCBsJ2luZGV4IDsgbmUgcGFzIGFqb3V0ZXIgbGUgY29udGVudSBkYW5zIGxhIGJhc2UgZGUgIgorImRvbm7DqWVzIGRlcyBvYmpldHMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyNAorbXNnaWQgInJlbW92ZSBuYW1lZCBwYXRocyBldmVuIGlmIHByZXNlbnQgaW4gd29ya3RyZWUiCittc2dzdHIgIiIKKyJzdXBwcmltZXIgbGVzIGNoZW1pbnMgbm9tbcOpcyBtw6ptZSBzJ2lscyBzb250IHByw6lzZW50cyBkYW5zIGxhIGNvcGllIGRlICIKKyJ0cmF2YWlsIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjYKK21zZ2lkICJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiCittc2dzdHIgImF2ZWMgLS1zdGRpbiA6IGxlcyBsaWduZXMgZW4gZW50csOpZSBzb250IHRlcm1pbsOpZXMgcGFyIGRlcyBvY3RldHMgbnVscyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI4Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIHRvIGJlIHVwZGF0ZWQgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGlyZSBsYSBsaXN0ZSBkZXMgY2hlbWlucyDDoCBtZXR0cmUgw6Agam91ciBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzIKK21zZ2lkICJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiYWpvdXRlciBsZXMgw6lsw6ltZW50cyBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkIMOgIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzNgorbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAicmVwZXVwbGVyIGxlcyDDqXRhcGVzIG7CsDIgZXQgbsKwMyBwb3VyIGxlcyBjaGVtaW5zIGxpc3TDqXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0MAorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICJtZXR0cmUgw6Agam91ciBzZXVsZW1lbnQgbGVzIMOpbMOpbWVudHMgcXVpIGRpZmbDqHJlbnQgZGUgSEVBRCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ0Cittc2dpZCAiaWdub3JlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiaWdub3JlciBsZXMgZmljaGllcnMgbWFucXVhbnRzIGRhbnMgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ3Cittc2dpZCAicmVwb3J0IGFjdGlvbnMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJhZmZpY2hlciBsZXMgYWN0aW9ucyBzdXIgbGEgc29ydGllIHN0YW5kYXJkIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDkKK21zZ2lkICIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIKK21zZ3N0ciAiKHBvdXIgcG9yY2VsYWluZXMpIG91YmxpZXIgbGVzIGNvbmZsaXRzIHNhdXbDqXMgZXQgbm9uIHLDqXNvbHVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTMKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAiw6ljcmlyZSBsJ2luZGV4IGRhbnMgY2UgZm9ybWF0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTUKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiYWN0aXZlciBvdSBkw6lzYWN0aXZlciBsJ2luZGV4IGRpdmlzw6kiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1NworbXNnaWQgImVuYWJsZS9kaXNhYmxlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiYWN0aXZlciBvdSBkw6lzYWN0aXZlciBsZSBjYWNoZSBkZSBub24tc3VpdmlzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTkKK21zZ2lkICJ0ZXN0IGlmIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAidGVzdGVyIHNpIGxlIHN5c3TDqG1lIGRlIGZpY2hpZXIgc3VwcG9ydGUgbGUgY2FjaGUgZGUgbm9uLXN1aXZpcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDYxCittc2dpZCAiZW5hYmxlIHVudHJhY2tlZCBjYWNoZSB3aXRob3V0IHRlc3RpbmcgdGhlIGZpbGVzeXN0ZW0iCittc2dzdHIgImFjdGl2ZXIgbGUgY2FjaGUgZGUgbm9uLXN1aXZpcyBzYW5zIHRlc3RlciBsZSBzeXN0w6htZSBkZSBmaWNoaWVyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjMKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGluZGV4IGV2ZW4gaWYgaXMgbm90IGZsYWdnZWQgYXMgY2hhbmdlZCIKK21zZ3N0ciAiw6ljcmlyZSBsJ2luZGV4IG3Dqm1lIHMnaWwgbidlc3QgcGFzIG1hcnF1w6kgY29tbWUgbW9kaWZpw6kiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIGZpbGUgc3lzdGVtIG1vbml0b3IiCittc2dzdHIgIiIKKyJhY3RpdmVyIG91IGTDqXNhY3RpdmVyIGxhIHN1cnZlaWxsYW5jZSBkdSBzeXN0w6htZSBkZSBmaWNoaWVyIChmc21vbml0b3IpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjcKK21zZ2lkICJtYXJrIGZpbGVzIGFzIGZzbW9uaXRvciB2YWxpZCIKK21zZ3N0ciAibWFycXVlciBsZXMgZmljaGllcnMgY29tbWUgdmFsaWRlcyBwb3VyIGZzbW9uaXRvciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDcwCittc2dpZCAiY2xlYXIgZnNtb25pdG9yIHZhbGlkIGJpdCIKK21zZ3N0ciAiZWZmYWNlciBsZSBiaXQgZGUgdmFsaWRpdMOpIGZzbW9uaXRvciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTczCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZW5hYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IGVzdCByw6lnbMOpIMOgIGZhbHNlwqA7IHN1cHByaW1lei1sZSBvdSBjaGFuZ2V6LWxlIHNpIHZvdXMgIgorInNvdWhhaXRleiB2cmFpbWVudCBhY3RpdmVyIGwnaW5kZXggY291cMOpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExODIKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggZXN0IHLDqWdsw6kgw6AgdnJhacKgOyBzdXBwcmltZXotbGUgb3UgY2hhbmdlei1sZSBzaSB2b3VzICIKKyJzb3VoYWl0ZXogdnJhaW1lbnQgZMOpc2FjdGl2ZXIgbCdpbmRleCBjb3Vww6kiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE5NAorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGRpc2FibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgZXN0IHLDqWdsw6kgw6AgdHJ1ZcKgOyBzdXBwcmltZXotbGUgb3UgY2hhbmdlei1sZSBzaSB2b3VzICIKKyJzb3VoYWl0ZXogdnJhaW1lbnQgZMOpc2FjdGl2ZXIgbGUgY2FjaGUgZGVzIGZpY2hpZXJzIG5vbi1zdWl2aXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE5OAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAiTGUgY2FjaGUgbm9uIHN1aXZpIGVzdCBkw6lzYWN0aXbDqSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjA2Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGVuYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBlc3QgcsOpZ2zDqSDDoCBmYWxzZcKgOyBzdXBwcmltZXotbGUgb3UgY2hhbmdlei1sZSBzaSB2b3VzICIKKyJzb3VoYWl0ZXogdnJhaW1lbnQgYWN0aXZlciBsZSBjYWNoZSBkZXMgZmljaGllcnMgbm9uLXN1aXZpcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICJMZSBjYWNoZSBub24gc3VpdmkgZXN0IGFjdGl2w6kgcG91ciAnJXMnIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMTgKK21zZ2lkICJjb3JlLmZzbW9uaXRvciBpcyB1bnNldDsgc2V0IGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBlbmFibGUgZnNtb25pdG9yIgorbXNnc3RyICIiCisiY29yZS5mc21vbml0b3IgZXN0IHLDqWdsw6kgw6AgZmFsc2XCoDsgY2hhbmdlei1sZSBzaSB2b3VzIHNvdWhhaXRleiB2cmFpbWVudCAiCisiYWN0aXZlciBsYSBzdXJ2ZWlsbGFuY2UgZHUgc3lzdMOobWUgZGUgZmljaGllcnMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyMgorbXNnaWQgImZzbW9uaXRvciBlbmFibGVkIgorbXNnc3RyICJmc21vbml0b3IgYWN0aXbDqSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjI1Cittc2dpZCAiIgorImNvcmUuZnNtb25pdG9yIGlzIHNldDsgcmVtb3ZlIGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBkaXNhYmxlIGZzbW9uaXRvciIKK21zZ3N0ciAiIgorImNvcmUuZnNtb25pdG9yIGVzdCByw6lnbMOpIMOgIHRydWXCoDsgc3VwcHJpbWV6LWxlIG91IGNoYW5nZXotbGUgc2kgdm91cyAiCisic291aGFpdGV6IHZyYWltZW50IGTDqXNhY3RpdmVyIGxhIHN1cnZlaWxsYW5jZSBkdSBzeXN0w6htZSBkZSBmaWNoaWVycyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjI5Cittc2dpZCAiZnNtb25pdG9yIGRpc2FibGVkIgorbXNnc3RyICJmc21vbml0b3IgZMOpc2FjdGl2w6kiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEwCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8bm9tLXLDqWbDqXJlbmNlPiBbPGFuY2llbm5lLXZhbGV1cj5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMQorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dICAgIDxyZWZuYW1lPiA8bmV3LXZhbD4gWzxvbGQtdmFsPl0iCittc2dzdHIgIiIKKyJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8bm9tLXLDqWbDqXJlbmNlPiA8bm91dmVsbGUtdmFsZXVyPiBbPGFuY2llbm5lLSIKKyJ2YWxldXI+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTIKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtLXN0ZGluIFstel0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY0Cittc2dpZCAiZGVsZXRlIHRoZSByZWZlcmVuY2UiCittc2dzdHIgInN1cHByaW1lciBsYSByw6lmw6lyZW5jZSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY2Cittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgIm1ldHRyZSDDoCBqb3VyIDxub21yw6lmw6lyZW5jZT4gZXQgbm9uIGxhIHLDqWbDqXJlbmNlIHBvaW50w6llIHBhciBsdWkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NworbXNnaWQgInN0ZGluIGhhcyBOVUwtdGVybWluYXRlZCBhcmd1bWVudHMiCittc2dzdHIgImwnZW50csOpZSBzdGFuZGFyZCBhIGRlcyBhcmd1bWVudHMgcXVpIHNlIHRlcm1pbmVudCBwYXIgTlVMIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjgKK21zZ2lkICJyZWFkIHVwZGF0ZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGlyZSBsZXMgbWlzZXMgw6Agam91ciBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjcKK21zZ2lkICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6MTUKK21zZ2lkICJ1cGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoIgorbXNnc3RyICJtZXR0cmUgw6Agam91ciBsZXMgZmljaGllcnMgZCdpbmZvcm1hdGlvbiDDoCBwYXJ0aXIgZGUgesOpcm8iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoxMQorbXNnaWQgImdpdCB1cGxvYWQtcGFjayBbPG9wdGlvbnM+XSA8ZGlyPiIKK21zZ3N0ciAiZ2l0IHVwbG9hZC1wYWNrIFs8b3B0aW9ucz5dIDxyw6lwZXJ0b2lyZT4iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyMyB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTcKK21zZ2lkICJxdWl0IGFmdGVyIGEgc2luZ2xlIHJlcXVlc3QvcmVzcG9uc2UgZXhjaGFuZ2UiCittc2dzdHIgInF1aXR0ZXIgYXByw6hzIHVuIHVuaXF1ZSDDqWNoYW5nZSByZXF1w6p0ZS9yw6lwb25zZSIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI1Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBpbml0aWFsIHJlZiBhZHZlcnRpc2VtZW50IgorbXNnc3RyICJTb3J0aXIgaW1tw6lkaWF0ZW1lbnQgYXByw6hzIGwnYW5ub25jZSBpbml0aWFsZSBkZXMgcsOpZsOpcmVuY2VzIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjcKK21zZ2lkICJkbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJuZXMgcGFzIGVzc2F5ZXIgPHLDqXBlcnRvaXJlPi8uZ2l0LyBzaSA8csOpcGVydG9pcmU+IG4nZXN0IHBhcyB1biByw6lwZXJ0b2lyZSAiCisiR2l0IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjkKK21zZ2lkICJpbnRlcnJ1cHQgdHJhbnNmZXIgYWZ0ZXIgPG4+IHNlY29uZHMgb2YgaW5hY3Rpdml0eSIKK21zZ3N0ciAiaW50ZXJyb21wcmUgbGUgdHJhbnNmZXJ0IGFwcsOocyA8bj4gc2Vjb25kZXMgZCdpbmFjdGl2aXTDqSIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6MTkKK21zZ2lkICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo2OAorbXNnaWQgInByaW50IGNvbW1pdCBjb250ZW50cyIKK21zZ3N0ciAiYWZmaWNoZXIgbGUgY29udGVudSBkdSBjb21taXQiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY5IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM3Cittc2dpZCAicHJpbnQgcmF3IGdwZyBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICJhZmZpY2hlciBsZXMgbWVzc2FnZXMgYnJ1dHMgZGUgZ3BnIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NTUKK21zZ2lkICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjUKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICJ2ZXJiZXV4IgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjcKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyBzdGF0aXN0aXF1ZXMiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjE4Cittc2dpZCAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWc+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD08Zm9ybWF0Pl0gPMOpdGlxdWV0dGU+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozNgorbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAiYWZmaWNoZXIgbGUgY29udGVudSBkZSBsJ8OpdGlxdWV0dGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNworbXNnaWQgImdpdCB3b3JrdHJlZSBhZGQgWzxvcHRpb25zPl0gPHBhdGg+IFs8Y29tbWl0LWlzaD5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxjaGVtaW4+IFs8Y29tbWl0Pl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOAorbXNnaWQgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgbGlzdCBbPG9wdGlvbnM+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE5Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxvcHRpb25zPl0gPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbG9jayBbPG9wdGlvbnM+XSA8Y2hlbWluPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIwCittc2dpZCAiZ2l0IHdvcmt0cmVlIG1vdmUgPHdvcmt0cmVlPiA8bmV3LXBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbW92ZSA8YXJicmUtZGUtdHJhdmFpbD4gPG5vdXZlYXUtY2hlbWluPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIxCittc2dpZCAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHRpb25zPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMgorbXNnaWQgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHRpb25zPl0gPHdvcmt0cmVlPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPG9wdGlvbnM+XSA8YXJicmUtZGUtdHJhdmFpbD4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMworbXNnaWQgImdpdCB3b3JrdHJlZSB1bmxvY2sgPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgdW5sb2NrIDxjaGVtaW4+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjAgYnVpbHRpbi93b3JrdHJlZS5jOjg5MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlICclcyciCittc2dzdHIgIsOpY2hlYyBkZSBsYSBzdXBwcmVzc2lvbiBkZSAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBub3QgYSB2YWxpZCBkaXJlY3RvcnkiCittc2dzdHIgIlN1cHByZXNzaW9uIGRlIHdvcmt0cmVlcy8lc8KgOiByw6lwZXJ0b2lyZSBpbnZhbGlkZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlN1cHByZXNzaW9uIGRlIHdvcmt0cmVlcy8lc8KgOiBsZSBmaWNoaWVyIGdpdGRpciBuJ2V4aXN0ZSBwYXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MCBidWlsdGluL3dvcmt0cmVlLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICIiCisiU3VwcHJlc3Npb24gZGUgd29ya3RyZWVzLyVzwqA6IMOpY2hlYyBkZSBsYSBsZWN0dXJlIGR1IGZpY2hpZXIgZ2l0ZGlyICglcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlJlbW92aW5nIHdvcmt0cmVlcy8lczogc2hvcnQgcmVhZCAoZXhwZWN0ZWQgJTxQUkl1TUFYPiBieXRlcywgcmVhZCAiCisiJTxQUkl1TUFYPikiCittc2dzdHIgIiIKKyJTdXBwcmVzc2lvbiBkZSB3b3JrdHJlZXMvJXM6IGxlY3R1cmUgdHJvcCBjb3VydGUgKCAlPFBSSXVNQVg+IG9jdGV0cyAiCisiYXR0ZW5kdXMsICU8UFJJdU1BWD4gb2N0ZXRzIGx1cykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICJTdXBwcmVzc2lvbiBkZSB3b3JrdHJlZXMvJXPCoDogZmljaGllciBnaXRkaXIgaW52YWxpZGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICIiCisiU3VwcHJlc3Npb24gZGUgd29ya3RyZWVzLyVzwqA6IGxlIGZpY2hpZXIgZ2l0ZGlyIHBvaW50IHN1ciB1biBlbmRyb2l0ICIKKyJpbmV4aXN0YW50IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY1Cittc2dpZCAicmVwb3J0IHBydW5lZCB3b3JraW5nIHRyZWVzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgYXJicmVzIGRlIHRyYXZhaWwgw6lsaW1pbsOpcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NworbXNnaWQgImV4cGlyZSB3b3JraW5nIHRyZWVzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICJmYWlyZSBleHBpcmVyIGxlcyBhcmJyZXMgZGUgdHJhdmFpbCBwbHVzIHZpZXV4IHF1ZSA8dGVtcHM+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiclcycgZXhpc3RlIGTDqWrDoCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmUtYWRkIHdvcmt0cmVlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgcsOpLWFqb3V0ZXIgbCdhcmJyZSBkZSB0cmF2YWlsICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBsb2NrZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYgLWYnIHRvIG92ZXJyaWRlLCBvciAndW5sb2NrJyBhbmQgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIiclcycgZXN0IHVuIGFyYnJlIGRlIHRyYXZhaWwgbWFucXVhbnQgbWFpcyB2ZXJyb3VpbGzDqcKgO1xuIgorInV0aWxpc2V6ICdhZGQgLWYgLWYnIHBvdXIgcGFzc2VyIG91dHJlLCBvdSAndW5sb2NrJyBldCAncHJ1bmUnIG91ICdyZW1vdmUnICIKKyJwb3VyIGNvcnJpZ2VyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgYWxyZWFkeSByZWdpc3RlcmVkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mJyB0byBvdmVycmlkZSwgb3IgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIiclcycgZXN0IHVuIGFyYnJlIGRlIHRyYXZhaWwgbWFucXVhbnQgbWFpcyBkw6lqw6AgZW5yZWdpc3Ryw6nCoDtcbiIKKyJ1dGlsaXNleiAnYWRkIC1mJyBwb3VyIHBhc3NlciBvdXRyZSwgb3UgJ3BydW5lJyBvdSAncmVtb3ZlJyBwb3VyIGNvcnJpZ2VyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IG9mICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIHLDqXBlcnRvaXJlIGRlICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzIgYnVpbHRpbi93b3JrdHJlZS5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKG5ldyBicmFuY2ggJyVzJykiCittc2dzdHIgIlByw6lwYXJhdGlvbiBkZSBsJ2FyYnJlIGRlIHRyYXZhaWwgKG5vdXZlbGxlIGJyYW5jaGUgJyVzJykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChyZXNldHRpbmcgYnJhbmNoICclcyc7IHdhcyBhdCAlcykiCittc2dzdHIgIiIKKyJQcsOpcGFyYXRpb24gZGUgbCdhcmJyZSBkZSB0cmF2YWlsIChyw6lpbml0aWFsaXNhdGlvbiBkZSBsYSBicmFuY2hlICclcyfCoDsgIgorInByw6ljw6lkZW1tZW50IHN1ciAlcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChjaGVja2luZyBvdXQgJyVzJykiCittc2dzdHIgIlByw6lwYXJhdGlvbiBkZSBsJ2FyYnJlIGRlIHRyYXZhaWwgKGV4dHJhY3Rpb24gZGUgJyVzJykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChkZXRhY2hlZCBIRUFEICVzKSIKK21zZ3N0ciAiUHLDqXBhcmF0aW9uIGRlIGwnYXJicmUgZGUgdHJhdmFpbCAoSEVBRCBkw6l0YWNow6llICVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5MAorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGV2ZW4gaWYgYWxyZWFkeSBjaGVja2VkIG91dCBpbiBvdGhlciB3b3JrdHJlZSIKK21zZ3N0ciAiIgorImV4dHJhaXJlIGxhIDxicmFuY2hlPiBtw6ptZSBzaSBlbGxlIGVzdCBkw6lqw6AgZXh0cmFpdGUgZGFucyB1bmUgYXV0cmUgY29waWUgZGUgIgorInRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTMKK21zZ2lkICJjcmVhdGUgYSBuZXcgYnJhbmNoIgorbXNnc3RyICJjcsOpZXIgdW5lIG5vdXZlbGxlIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTUKK21zZ2lkICJjcmVhdGUgb3IgcmVzZXQgYSBicmFuY2giCittc2dzdHIgImNyw6llciBvdSByw6lpbml0aWFsaXNlciB1bmUgYnJhbmNoZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5NworbXNnaWQgInBvcHVsYXRlIHRoZSBuZXcgd29ya2luZyB0cmVlIgorbXNnc3RyICJyZW1wbGlzc2FnZSBkZSBsYSBub3V2ZWxsZSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk4Cittc2dpZCAia2VlcCB0aGUgbmV3IHdvcmtpbmcgdHJlZSBsb2NrZWQiCittc2dzdHIgImNvbnNlcnZlciBsZSB2ZXJyb3Ugc3VyIGxlIG5vdXZlbCBhcmJyZSBkZSB0cmF2YWlsIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAxCittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtYnJhbmNoKDEpKSIKK21zZ3N0ciAicsOpZ2xlciBsZSBtb2RlIGRlIHN1aXZpICh2b2lyIGdpdC1icmFuY2goMSkpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA0Cittc2dpZCAidHJ5IHRvIG1hdGNoIHRoZSBuZXcgYnJhbmNoIG5hbWUgd2l0aCBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgImVzc2F5ZXIgZGUgbm9tbWVyIGxhIG5vdXZlbGxlIGJyYW5jaGUgY29tbWUgbGEgYnJhbmNoZSBhbW9udCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUxMgorbXNnaWQgIi1iLCAtQiwgYW5kIC0tZGV0YWNoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1iLCAtQiBldCAtLWRldGFjaCBzb250IG11dHVlbGxlbWVudCBleGNsdXNpZnMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1NzMKK21zZ2lkICItLVtuby1ddHJhY2sgY2FuIG9ubHkgYmUgdXNlZCBpZiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCIKK21zZ3N0ciAiIgorIi0tW25vLV10cmFjayBuZSBwZXV0IMOqdHJlIHV0aWxpc8OpIHF1J8OgIGxhIGNyw6lhdGlvbiBkJ3VuZSBub3V2ZWxsZSBicmFuY2hlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjczCittc2dpZCAicmVhc29uIGZvciBsb2NraW5nIgorbXNnc3RyICJyYWlzb24gZHUgdmVycm91aWxsYWdlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njg1IGJ1aWx0aW4vd29ya3RyZWUuYzo3MTggYnVpbHRpbi93b3JrdHJlZS5jOjc5MgorIzogYnVpbHRpbi93b3JrdHJlZS5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdW5lIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2ODcgYnVpbHRpbi93b3JrdHJlZS5jOjcyMAorbXNnaWQgIlRoZSBtYWluIHdvcmtpbmcgdHJlZSBjYW5ub3QgYmUgbG9ja2VkIG9yIHVubG9ja2VkIgorbXNnc3RyICIiCisiTGEgY29waWUgZGUgdHJhdmFpbCBwcmluY2lwYWxlIG5lIHBldXQgcGFzIMOqdHJlIHZlcnJvdWlsbMOpZSBvdSBkw6l2ZXJyb3VpbGzDqWUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCwgcmVhc29uOiAlcyIKK21zZ3N0ciAiJyVzJyBlc3QgZMOpasOgIHZlcnJvdWlsbMOpLCBjYXIgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkIgorbXNnc3RyICInJXMnIGVzdCBkw6lqw6AgdmVycm91aWxsw6kiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgbG9ja2VkIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB2ZXJyb3VpbGzDqSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc2MworbXNnaWQgIndvcmtpbmcgdHJlZXMgY29udGFpbmluZyBzdWJtb2R1bGVzIGNhbm5vdCBiZSBtb3ZlZCBvciByZW1vdmVkIgorbXNnc3RyICIiCisibGVzIGFyYnJlcyBkZSB0cmF2YWlsIGNvbnRlbmFudCBkZXMgc291cy1tb2R1bGVzIG5lIHBldXZlbnQgcGFzIMOqdHJlICIKKyJkw6lwbGFjw6lzIG91IHN1cHByaW3DqXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzEKK21zZ2lkICJmb3JjZSBtb3ZlIGV2ZW4gaWYgd29ya3RyZWUgaXMgZGlydHkgb3IgbG9ja2VkIgorbXNnc3RyICIiCisiZm9yY2VyIGxlIGTDqXBsYWNlbWVudCBtw6ptZSBzaSBsJ2FyYnJlIGRlIHRyYXZhaWwgZXN0IHNhbGUgb3UgdmVycm91aWxsw6kiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTQgYnVpbHRpbi93b3JrdHJlZS5jOjkyMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGEgbWFpbiB3b3JraW5nIHRyZWUiCittc2dzdHIgIiclcycgZXN0IHVuIGFyYnJlIGRlIHRyYXZhaWwgcHJpbmNpcGFsIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaWd1cmUgb3V0IGRlc3RpbmF0aW9uIG5hbWUgZnJvbSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgbm9tIGRlIGxhIGRlc3RpbmF0aW9uIMOgIHBhcnRpciBkZSAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInRhcmdldCAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJsYSBjaWJsZSAnJXMnIGV4aXN0ZSBkw6lqw6AiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIGTDqXBsYWNlciB1biBhcmJyZSBkZSB0cmF2YWlsIHZlcnJvdWlsbMOpLCByYWlzb24gZHUgIgorInZlcnJvdWlsbGFnZcKgOiAlc1xuIgorInV0aWxpc2V6ICdtb3ZlIC1mIC1mJyBwb3VyIG91dHJlcGFzc2VyIG91IGTDqXZlcnJvdWlsbGVyIGF2YW50IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODE1Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgZMOpcGxhY2VyIHVuIGFyYnJlIGRlIHRyYXZhaWwgdmVycm91aWxsw6k7XG4iCisidXRpbGlzZXogJ21vdmUgLWYgLWYnIHBvdXIgb3V0cmVwYXNzZXIgb3UgZMOpdmVycm91aWxsZXIgYXZhbnQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCBtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgImxhIHZhbGlkYXRpb24gYSDDqWNob3XDqSwgaW1wb3NzaWJsZSBkZSBkw6lwbGFjZXIgbCdhcmJyZSBkZSB0cmF2YWlswqA6ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBtb3ZlICclcycgdG8gJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGF1IGTDqXBsYWNlbWVudCBkZSAnJXMnIHZlcnMgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnIgorbXNnc3RyICLDqWNoZWMgZHUgbGFuY2VtZW50IGRlICdnaXQgc3RhdHVzJyBzdXIgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNvbnRhaW5zIG1vZGlmaWVkIG9yIHVudHJhY2tlZCBmaWxlcywgdXNlIC0tZm9yY2UgdG8gZGVsZXRlIGl0IgorbXNnc3RyICIiCisiJyVzJyBjb250aWVudCBkZXMgZmljaGllcnMgbW9kaWZpw6lzIG91IG5vbi1zdWl2aXMsIHV0aWxpc2V6IC0tZm9yY2UgcG91ciBsZSAiCisic3VwcHJpbWVyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJ2dpdCBzdGF0dXMnIG9uICclcycsIGNvZGUgJWQiCittc2dzdHIgImltcG9zc2libGUgZGUgbGFuY2VyICdnaXQgc3RhdHVzJyBzdXIgJyVzJywgY29kZSAlZCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkwMworbXNnaWQgImZvcmNlIHJlbW92YWwgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgIiIKKyJmb3JjZXIgbGEgc3VwcHJlc3Npb24gbcOqbWUgc2kgbCdhcmJyZSBkZSB0cmF2YWlsIGVzdCBzYWxlIG91IHZlcnJvdWlsbMOpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgc3VwcHJpbWVyIHVuIGFyYnJlIGRlIHRyYXZhaWwgdmVycm91aWxsw6ksIHJhaXNvbiBkdSAiCisidmVycm91aWxsYWdlwqA6ICVzXG4iCisidXRpbGlzZXogJ21vdmUgLWYgLWYnIHBvdXIgb3V0cmVwYXNzZXIgb3UgZMOpdmVycm91aWxsZXIgYXZhbnQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjgKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWU7XG4iCisidXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgc3VwcHJpbWVyIHVuIGFyYnJlIGRlIHRyYXZhaWwgdmVycm91aWxsw6k7XG4iCisidXRpbGlzZXogJ21vdmUgLWYgLWYnIHBvdXIgb3V0cmVwYXNzZXIgb3UgZMOpdmVycm91aWxsZXIgYXZhbnQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCByZW1vdmUgd29ya2luZyB0cmVlOiAlcyIKK21zZ3N0ciAiIgorImxhIHZhbGlkYXRpb24gYSDDqWNob3XDqSwgaW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbCdhcmJyZSBkZSB0cmF2YWlswqA6ICVzIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoxNQorbXNnaWQgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByw6lmaXhlPi9dIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOAorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiPHByw6lmaXhlPi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI5Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICLDqWNyaXJlIGwnb2JqZXQgYXJicmUgcG91ciB1biBzb3VzLXLDqXBlcnRvaXJlIDxwcsOpZml4ZT4iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjMxCittc2dpZCAib25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyIKK21zZ3N0ciAic2V1bGVtZW50IHV0aWxlIHBvdXIgbGUgZMOpYm9nYWdlIgorCisjOiBmYXN0LWltcG9ydC5jOjMxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgJ21hcmsnIGNvbW1hbmQsIGdvdCAlcyIKK21zZ3N0ciAiY29tbWFuZGUgJ21hcmsnIGF0dGVuZHVlLCAlcyB0cm91dsOpIgorCisjOiBmYXN0LWltcG9ydC5jOjMxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgJ3RvJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgImNvbW1hbmRlICd0bycgYXR0ZW5kdWUsICVzIHRyb3V2w6kiCisKKyM6IGZhc3QtaW1wb3J0LmM6MzI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJmZWF0dXJlICclcycgZm9yYmlkZGVuIGluIGlucHV0IHdpdGhvdXQgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMiCittc2dzdHIgIiIKKyJsYSBmb25jdGlvbm5hbGl0w6kgJyVzJyBlc3QgaW50ZXJkaXRlIGVuIGVudHLDqWUgc2FucyAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGVybWlzc2lvbnMgb24geW91ciBzb2NrZXQgZGlyZWN0b3J5IGFyZSB0b28gbG9vc2U7IG90aGVyXG4iCisidXNlcnMgbWF5IGJlIGFibGUgdG8gcmVhZCB5b3VyIGNhY2hlZCBjcmVkZW50aWFscy4gQ29uc2lkZXIgcnVubmluZzpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCittc2dzdHIgIiIKKyJMZXMgcGVybWlzc2lvbnMgZGUgdm90cmUgcsOpcGVydG9pcmUgZGUgc29ja2V0IHNvbnQgdHJvcCBwZXJtaXNzaXZlc8KgO1xuIgorImxlcyBhdXRyZXMgdXRpbGlzYXRldXJzIHBvdXJyYWllbnQgbGlyZSB2b3MgaWRlbnRpZmlhbnRzIHNlY3JldHMuIExhbmNlesKgOlxuIgorIlxuIgorIiAgICBjaG1vZCAwNzAwICVzIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyNzIKK21zZ2lkICJwcmludCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8gc3RkZXJyIgorbXNnc3RyICJhZmZpY2hlciBsZXMgbWVzc2FnZXMgZGUgZGVidWcgc3VyIHN0ZGVyciIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgbm90IG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgImxlIGNvbW1pdCAlcyBuJ2VzdCBwYXMgbWFycXXDqSBqb2lnbmFibGUiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNjIKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgInRyb3AgZGUgY29tbWl0cyBtYXJxdcOpcyBqb2lnbmFibGVzIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6NworbXNnaWQgInRlc3QtdG9vbCBzZXJ2ZS12MiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAidGVzdC10b29sIHNlcnZlLXYyIFs8b3B0aW9ucz5dIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTkKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGFkdmVydGlzaW5nIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAic29ydGlyIGltbcOpZGlhdGVtZW50IGFwcsOocyBsJ2Fubm9uY2UgZGVzIGNhcGFjaXTDqXMiCisKKyM6IGdpdC5jOjI3Cittc2dpZCAiIgorImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPHBhdGg+XSBbLWMgPG5hbWU+PTx2YWx1ZT5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTxwYXRoPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tcGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tIgorImJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPTxwYXRoPl0gWy0td29yay10cmVlPTxwYXRoPl0gWy0tbmFtZXNwYWNlPTxuYW1lPl1cbiIKKyIgICAgICAgICAgIDxjb21tYW5kPiBbPGFyZ3M+XSIKK21zZ3N0ciAiIgorImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPGNoZW1pbj5dIFstYyA8bm9tPj08dmFsZXVyPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PGNoZW1pbj5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLSIKKyJwYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PGNoZW1pbj5dIFstLXdvcmstdHJlZT08Y2hlbWluPl0gWy0tbmFtZXNwYWNlPTxub20+XVxuIgorIiAgICAgICAgICAgPGNvbW1hbmRlPiBbPGFyZ3M+XSIKKworIzogZ2l0LmM6MzQKK21zZ2lkICIiCisiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJ0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCBvciBjb25jZXB0LlxuIgorIlNlZSAnZ2l0IGhlbHAgZ2l0JyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS4iCittc2dzdHIgIiIKKyInZ2l0IGhlbHAgLWEnIGV0ICdnaXQgaGVscCAtZycgbGlzdGVudCBsZXMgc291cy1jb21tYW5kZXMgZGlzcG9uaWJsZXMgZXRcbiIKKyJxdWVscXVlcyBjb25jZXB0cy4gVm9pciAnZ2l0IGhlbHAgPGNvbW1hbmRlPicgb3UgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJwb3VyIGVuIGxpcmUgcGx1cyDDoCBwcm9wb3MgZCd1bmUgY29tbWFuZGUgc3DDqWNpZmlxdWUgb3UgZCd1biBjb25jZXB0LlxuIgorIlZvaXIgJ2dpdCBoZWxwIGdpdCcgcG91ciB1biBzdXJ2b2wgZHUgc3lzdMOobWUuIgorCisjOiBnaXQuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLWdpdC1kaXJcbiIKK21zZ3N0ciAiYXVjdW4gcsOpcGVydG9pcmUgZm91cm5pIHBvdXIgLS1naXQtZGlyXG4iCisKKyM6IGdpdC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlXG4iCittc2dzdHIgImF1Y3VuIGVzcGFjZSBkZSBub20gZm91cm5pdCBwb3VyIC0tbmFtZXNwYWNlXG4iCisKKyM6IGdpdC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgImF1Y3VuIHLDqXBlcnRvaXJlIGZvdXJuaSBwb3VyIC0td29yay10cmVlXG4iCisKKyM6IGdpdC5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcmVmaXggZ2l2ZW4gZm9yIC0tc3VwZXItcHJlZml4XG4iCittc2dzdHIgImF1Y3VuIHByw6lmaXhlIGZvdXJuaSBwb3VyIC0tc3VwZXItcHJlZml4XG4iCisKKyM6IGdpdC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICItYyBleHBlY3RzIGEgY29uZmlndXJhdGlvbiBzdHJpbmdcbiIKK21zZ3N0ciAiLWMgcmVxdWllcnQgdW5lIGNoYcOubmUgZGUgY29uZmlndXJhdGlvblxuIgorCisjOiBnaXQuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtQ1xuIgorbXNnc3RyICJhdWN1biByw6lwZXJ0b2lyZSBmb3VybmkgcG91ciAtQ1xuIgorCisjOiBnaXQuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgIm9wdGlvbiBpbmNvbm51ZcKgOiAlc1xuIgorCisjOiBnaXQuYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZXhwYW5kaW5nIGFsaWFzICclcyc6ICclcyciCittc2dzdHIgImxvcnMgZGUgbCdleHBhbnNpb24gZGUgbCdhbGlhcyAnJXMnwqA6ICclcyciCisKKyM6IGdpdC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYWxpYXMgJyVzJyBjaGFuZ2VzIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiIKKyJZb3UgY2FuIHVzZSAnIWdpdCcgaW4gdGhlIGFsaWFzIHRvIGRvIHRoaXMiCittc2dzdHIgIiIKKyJsJ2FsaWFzICclcycgbW9kaWZpZSBsZXMgdmFyaWFibGVzIGQnZW52aXJvbm5lbWVudC5cbiIKKyJWb3VzIHBvdXZleiB1dGlsaXNlciAnIWdpdCcgZGFucyBsJ2FsaWFzIHBvdXIgbGUgZmFpcmUiCisKKyM6IGdpdC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBhbGlhcyBmb3IgJXMiCittc2dzdHIgImFsaWFzIHZpZGUgcG91ciAlcyIKKworIzogZ2l0LmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBhbGlhczogJXMiCittc2dzdHIgImFsaWFzIHJlY3Vyc2lmwqA6ICVzIgorCisjOiBnaXQuYzo0NTkKK21zZ2lkICJ3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiw6ljaGVjIGQnw6ljcml0dXJlIHN1ciBsYSBzb3J0aWUgc3RhbmRhcmQiCisKKyM6IGdpdC5jOjQ2MQorbXNnaWQgInVua25vd24gd3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIsOpY2hlYyBpbmNvbm51IGQnw6ljcml0dXJlIHN1ciBsYSBzb3J0aWUgc3RhbmRhcmQiCisKKyM6IGdpdC5jOjQ2MworbXNnaWQgImNsb3NlIGZhaWxlZCBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIsOpY2hlYyBkZSBmZXJtZXR1cmUgZGUgbGEgc29ydGllIHN0YW5kYXJkIgorCisjOiBnaXQuYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgbG9vcCBkZXRlY3RlZDogZXhwYW5zaW9uIG9mICclcycgZG9lcyBub3QgdGVybWluYXRlOiVzIgorbXNnc3RyICJib3VjbGUgZCdhbGlhcyBkw6l0ZWN0w6llwqA6IGwnZXhwYW5zaW9uIGRlICclcycgbmUgZmluaXQgamFtYWlzwqA6ICVzIgorCisjOiBnaXQuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSAlcyBhcyBhIGJ1aWx0aW4iCittc2dzdHIgImltcG9zc2libGUgZCd1dGlsaXNlciAlcyBjb21tZSB1bmUgZm9uY3Rpb24gaW50w6lncsOpZSIKKworIzogZ2l0LmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1c2FnZTogJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorInVzYWdlIDogJXNcbiIKKyJcbiIKKworIzogZ2l0LmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGFuc2lvbiBvZiBhbGlhcyAnJXMnIGZhaWxlZDsgJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZFxuIgorbXNnc3RyICIiCisibCdleHBhbnNpb24gZGUgbCdhbGlhcyAnJXMnIGEgw6ljaG91w6nCoDogJyVzJyBuJ2VzdCBwYXMgdW5lIGNvbW1hbmRlIGdpdFxuIgorCisjOiBnaXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iCittc2dzdHIgIsOpY2hlYyBhdSBsYW5jZW1lbnQgZGUgbGEgY29tbWFuZGUgJyVzJ8KgOiAlc1xuIgorCisjOiBodHRwLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5lZ2F0aXZlIHZhbHVlIGZvciBodHRwLnBvc3RidWZmZXI7IGRlZmF1bHRpbmcgdG8gJWQiCittc2dzdHIgIiIKKyJ2YWxldXIgbsOpZ2F0aXZlIHBvdXIgaHR0cC5wb3N0YnVmZmVyIDsgdXRpbGlzYXRpb24gZGUgbGEgdmFsZXVyIHBhciBkw6lmYXV0ICVkIgorCisjOiBodHRwLmM6Mzk5Cittc2dpZCAiRGVsZWdhdGlvbiBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4yMi4wIgorbXNnc3RyICJMYSBkw6lsw6lnYXRpb24gZGUgY29tbWFuZGUgbidlc3QgcGFzIHN1cHBvcnTDqSBhdmVjIGN1UkwgPCA3LjIyLjAiCisKKyM6IGh0dHAuYzo0MDgKK21zZ2lkICJQdWJsaWMga2V5IHBpbm5pbmcgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIkwnw6lwaW5nbGFnZSBkZSBjbMOpIHB1YmxpcXVlIG4nZXN0IHBhcyBzdXBwb3J0w6kgYXZlYyBjdVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6ODc2Cittc2dpZCAiQ1VSTFNTTE9QVF9OT19SRVZPS0Ugbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIkNVUkxTU0xPUFRfTk9fUkVNT1ZFIG4nZXN0IHBhcyBzdXBwb3J0w6kgYXZlYyBjdVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6OTQ5Cittc2dpZCAiUHJvdG9jb2wgcmVzdHJpY3Rpb25zIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4xOS40IgorbXNnc3RyICJMZXMgcmVzdHJpY3Rpb25zIGRlIHByb3RvY29sZSBuZSBzb250IHBhcyBzdXBwb3J0w6lzIGF2ZWMgY3VSTCA8IDcuMTkuNCIKKworIzogaHR0cC5jOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgU1NMIGJhY2tlbmQgJyVzJy4gU3VwcG9ydGVkIFNTTCBiYWNrZW5kczoiCittc2dzdHIgIkRvcnNhbGUgU1NMICclcycgbm9uIHN1cHBvcnTDqWUuIERvcnNhbGVzIFNTTCBzdXBwb3J0w6llc8KgOiIKKworIzogaHR0cC5jOjEwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBjVVJMIHdhcyBidWlsdCB3aXRob3V0IFNTTCBiYWNrZW5kcyIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZGUgcsOpZ2xlciBsYSBkb3JzYWxlIFNTTCDDoCAnJXMnwqA6IGNVUkwgYSDDqXTDqSBjb25zdHJ1aXQgc2FucyAiCisiZG9yc2FsZSBTU0wiCisKKyM6IGh0dHAuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogYWxyZWFkeSBzZXQiCittc2dzdHIgIkltcG9zc2libGUgZGUgc3DDqWNpZmllciBsZSBkb3JzYWwgU1NMIMOgICclcyfCoDogZMOpasOgIHNww6ljaWZpw6kiCisKKyM6IGh0dHAuYzoxOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gdXBkYXRlIHVybCBiYXNlIGZyb20gcmVkaXJlY3Rpb246XG4iCisiICBhc2tlZCBmb3I6ICVzXG4iCisiICAgcmVkaXJlY3Q6ICVzIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciBsYSBiYXNlIGRlIGwndXJsIGRlcHVpcyBsYSByZWRpcmVjdGlvbsKgOlxuIgorIiAgICAgIGRlbWFuZMOpwqA6ICVzXG4iCisiICByZWRpcmVjdGlvbsKgOiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBxdW90aW5nIGluIHB1c2gtb3B0aW9uIHZhbHVlOiAnJXMnIgorbXNnc3RyICJjaXRhdGlvbiBpbnZhbGlkZSBkYW5zIGxhIHZhbGV1ciBwdXNoLW9wdGlvbsKgOiAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlc2luZm8vcmVmcyBub3QgdmFsaWQ6IGlzIHRoaXMgYSBnaXQgcmVwb3NpdG9yeT8iCittc2dzdHIgIiVzaW5mby9yZWZzIG4nZXN0IHBhcyB2YWxpZGUgOiBlc3QtY2UgYmllbiB1biBkw6lww7R0IGdpdMKgPyIKKworIzogcmVtb3RlLWN1cmwuYzozNjQKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZXhwZWN0ZWQgc2VydmljZSwgZ290IGZsdXNoIHBhY2tldCIKK21zZ3N0ciAicsOpcG9uc2UgZHUgc2VydmV1ciBpbnZhbGlkZcKgOyBzZXJ2aWNlIGF0dGVuZHUsIHBhcXVldCBkZSB2aWRhZ2UgcmXDp3UiCisKKyM6IHJlbW90ZS1jdXJsLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VydmVyIHJlc3BvbnNlOyBnb3QgJyVzJyIKK21zZ3N0ciAicsOpcG9uc2UgZHUgc2VydmV1ciBpbnZhbGlkZcKgOyAnJXMnIHJlw6d1IgorCisjOiByZW1vdGUtY3VybC5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgbm90IGZvdW5kIgorbXNnc3RyICJkw6lww7R0ICclcycgbm9uIHRyb3V2w6kiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiw4ljaGVjIGQnYXV0aGVudGlmaWNhdGlvbiBwb3VyICclcyciCisKKyM6IHJlbW90ZS1jdXJsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhY2PDqWRlciDDoCAnJXMnwqA6ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyB0byAlcyIKK21zZ3N0ciAicmVkaXJlY3Rpb24gdmVycyAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo1OTMKK21zZ2lkICJzaG91bGRuJ3QgaGF2ZSBFT0Ygd2hlbiBub3QgZ2VudGxlIG9uIEVPRiIKK21zZ3N0ciAibmUgZGV2cmFpdCBwYXMgcmVjZXZvaXIgT0VGIHF1YW5kIG9uIG4nZXN0IHBhcyBnZW50aWwgc3VyIEVPRiIKKworIzogcmVtb3RlLWN1cmwuYzo2NzMKK21zZ2lkICJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIHJlbWJvYmluZXIgbGUgZG9ubsOpZXMgcG9zdCBycGMgLSBlc3NheWVyIGQnYXVnbWVudGVyIGh0dHAuIgorInBvc3RCdWZmZXIiCisKKyM6IHJlbW90ZS1jdXJsLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJQQyBmYWlsZWQ7ICVzIgorbXNnc3RyICLDqWNoZWMgUlBDwqA7ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjc3MworbXNnaWQgImNhbm5vdCBoYW5kbGUgcHVzaGVzIHRoaXMgYmlnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGfDqXJlciBkZXMgcG91c3PDqWVzIGF1c3NpIGdyb3NzZXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZGVmbGF0ZSBlcnJvciAlZCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb21wcmVzc2VyIGxhIHJlcXXDqnRlwqA7IGVycmV1ciBkZSBjb21wcmVzc2lvbiB6bGliICVkIgorCisjOiByZW1vdGUtY3VybC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGVuZCBlcnJvciAlZCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb21wcmVzc2VyIGxhIHJlcXXDqnRlwqA7IGVycmV1ciBkZSBmaW4gemxpYiAlZCIKKworIzogcmVtb3RlLWN1cmwuYzoxMDIzCittc2dpZCAiZHVtYiBodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2FwYWJpbGl0aWVzIgorbXNnc3RyICJsZSBwcm90b2NvbGUgaHR0cCBpZGlvdCBuZSBzdXBwb3J0ZSBsYSBjYXBhY2l0w6kgc3VwZXJmaWNpZWxsZSIKKworIzogcmVtb3RlLWN1cmwuYzoxMDM4Cittc2dpZCAiZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiw6ljaGVjIGR1IHLDqWN1cMOpcmF0aW9uLiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDg2Cittc2dpZCAiY2Fubm90IGZldGNoIGJ5IHNoYTEgb3ZlciBzbWFydCBodHRwIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqWN1cMOpcmVyIHBhciBzaGExIHN1ciBodHRwIGludGVsbGlnZW50IgorCisjOiByZW1vdGUtY3VybC5jOjExMzAgcmVtb3RlLWN1cmwuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAiZXJyZXVyIGRlIHByb3RvY29sZcKgOiBzaGEvcmVmIGF0dGVuZHUsICclcycgdHJvdXbDqSIKKworIzogcmVtb3RlLWN1cmwuYzoxMTQ4IHJlbW90ZS1jdXJsLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0ICVzIgorbXNnc3RyICJsZSB0cmFuc3BvcnQgaHR0cCBuZSBzdXBwb3J0ZSBwYXMgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE4NAorbXNnaWQgImdpdC1odHRwLXB1c2ggZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgZ2l0LWh0dHAtcHVzaCIKKworIzogcmVtb3RlLWN1cmwuYzoxMzY5Cittc2dpZCAicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPHJlbW90ZT4gWzx1cmw+XSIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPGRpc3RhbnQ+IFs8dXJsPl0iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwMQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybMKgOiBlcnJldXIgZGUgbGVjdHVyZSBkdSBmbHV4IGRlIGNvbW1hbmRlIGRlcHVpcyBnaXQiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwOAorbXNnaWQgInJlbW90ZS1jdXJsOiBmZXRjaCBhdHRlbXB0ZWQgd2l0aG91dCBhIGxvY2FsIHJlcG8iCittc2dzdHIgInJlbW90ZS1jdXJswqA6IHLDqWN1cMOpcmF0aW9uIHRlbnTDqWUgc2FucyBkw6lww7R0IGxvY2FsIgorCisjOiByZW1vdGUtY3VybC5jOjE0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLWN1cmw6IHVua25vd24gY29tbWFuZCAnJXMnIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybMKgOiBjb21tYW5kZSBpbmNvbm51ZSAnJXMnIGRlcHVpcyBnaXQiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oOjg1Cittc2dpZCAiYXJncyIKK21zZ3N0ciAiYXJncyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODYKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICJmaWx0cmFnZSBkJ29iamV0IgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTgzCittc2dpZCAiZXhwaXJ5LWRhdGUiCittc2dzdHIgImRhdGUtZCdleHBpcmF0aW9uIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTk3Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICJzYW5zIGFjdGlvbiAocsOpdHJvY29tcGF0aWJpbGl0w6kpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzA5Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICLDqnRyZSBwbHVzIHZlcmJldXgiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTEKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICLDqnRyZSBwbHVzIHNpbGVuY2lldXgiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTcKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAidXRpbGlzZXIgPG4+IGNoaWZmcmVzIHBvdXIgYWZmaWNoZXIgbGVzIFNIQS0xcyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzNgorbXNnaWQgImhvdyB0byBzdHJpcCBzcGFjZXMgYW5kICNjb21tZW50cyBmcm9tIG1lc3NhZ2UiCittc2dzdHIgImNvbW1lbnQgw6lsaW1pbmVyIGxlcyBlc3BhY2VzIGV0IGxlcyBjb21tZW50YWlyZXMgIyBkdSBtZXNzYWdlIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM3Cittc2dpZCAicmVhZCBwYXRoc3BlYyBmcm9tIGZpbGUiCittc2dzdHIgImxpcmUgbGVzIHNww6ljaWZpY2F0ZXVycyBkZSBmaWNoaWVyIGRlcHVpcyBmaWNoaWVyIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM4Cittc2dpZCAiIgorIndpdGggLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHBhdGhzcGVjIGVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICIiCisiYXZlYyAtLXBhdGhzcGVjLWZyb20tZmlsZSwgbGVzIHNww6ljaWZpY2F0ZXVycyBkZSBjaGVtaW4gc29udCBzw6lwYXLDqXMgcGFyIHVuICIKKyJjYXJhY3TDqHJlIE5VTCIKKworIzogcmVmLWZpbHRlci5oOjEwMQorbXNnaWQgImtleSIKK21zZ3N0ciAiY2zDqSIKKworIzogcmVmLWZpbHRlci5oOjEwMQorbXNnaWQgImZpZWxkIG5hbWUgdG8gc29ydCBvbiIKK21zZ3N0ciAibm9tIGR1IGNoYW1wIHNlcnZhbnQgw6AgdHJpZXIiCisKKyM6IHJlcmVyZS5oOjQ0Cittc2dpZCAidXBkYXRlIHRoZSBpbmRleCB3aXRoIHJldXNlZCBjb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlIgorbXNnc3RyICIiCisibWV0IMOgIGpvdXIgbCdpbmRleCBhdmVjIGxlcyByw6lzb2x1dGlvbnMgZGUgY29uZmxpdCByw6l1dGlsaXPDqWVzIHNpIHBvc3NpYmxlIgorCisjOiB3dC1zdGF0dXMuaDo2NworbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICJIRUFEIGTDqXRhY2jDqWUgc3VyICIKKworIzogd3Qtc3RhdHVzLmg6NjgKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICJIRUFEIGTDqXRhY2jDqWUgZGVwdWlzICIKKworIzogY29tbWFuZC1saXN0Lmg6NTAKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkFqb3V0ZXIgbGUgY29udGVudSBkZSBmaWNoaWVycyBkYW5zIGwnaW5kZXgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUxCittc2dpZCAiQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBmcm9tIGEgbWFpbGJveCIKK21zZ3N0ciAiQXBwbGlxdWVyIHVuZSBzw6lyaWUgZGUgcGF0Y2hzIGRlcHVpcyB1bmUgYm/DrnRlIG1haWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUyCittc2dpZCAiQW5ub3RhdGUgZmlsZSBsaW5lcyB3aXRoIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiQW5ub3RlciBsZXMgbGlnbmVzIGR1IGZpY2hpZXIgYXZlYyBsJ2luZm9ybWF0aW9uIGRlIGNvbW1pdCIKKworIzogY29tbWFuZC1saXN0Lmg6NTMKK21zZ2lkICJBcHBseSBhIHBhdGNoIHRvIGZpbGVzIGFuZC9vciB0byB0aGUgaW5kZXgiCittc2dzdHIgIkFwcGxpcXVlciB1bmUgcGF0Y2ggw6AgZGVzIGZpY2hpZXJzIG91IMOgIGwnaW5kZXgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU0Cittc2dpZCAiSW1wb3J0IGEgR05VIEFyY2ggcmVwb3NpdG9yeSBpbnRvIEdpdCIKK21zZ3N0ciAiSW1wb3J0ZXIgZGFucyBHaXQgdW4gZMOpcMO0dCBHTlUgQXJjaCIKKworIzogY29tbWFuZC1saXN0Lmg6NTUKK21zZ2lkICJDcmVhdGUgYW4gYXJjaGl2ZSBvZiBmaWxlcyBmcm9tIGEgbmFtZWQgdHJlZSIKK21zZ3N0ciAiQ3LDqWVyIHVuZSBhcmNoaXZlIGRlcyBmaWNoaWVycyBkZXB1aXMgdW4gYXJicmUgbm9tbcOpIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NgorbXNnaWQgIlVzZSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgYSBidWciCittc2dzdHIgIlRyb3V2ZXIgcGFyIHJlY2hlcmNoZSBiaW5haXJlIGxhIG1vZGlmaWNhdGlvbiBxdWkgYSBpbnRyb2R1aXQgdW4gYm9ndWUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU3Cittc2dpZCAiU2hvdyB3aGF0IHJldmlzaW9uIGFuZCBhdXRob3IgbGFzdCBtb2RpZmllZCBlYWNoIGxpbmUgb2YgYSBmaWxlIgorbXNnc3RyICIiCisiTW9udHJlciBsYSByw6l2aXNpb24gZXQgbCdhdXRldXIgcXVpIG9udCBtb2RpZmnDqSBlbiBkZXJuaWVyIGNoYXF1ZSBsaWduZSBkJ3VuICIKKyJmaWNoaWVyIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OAorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICJMaXN0ZXIsIGNyw6llciBvdSBzdXBwcmltZXIgZGVzIGJyYW5jaGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OQorbXNnaWQgIk1vdmUgb2JqZWN0cyBhbmQgcmVmcyBieSBhcmNoaXZlIgorbXNnc3RyICJEw6lwbGFjZXIgbGVzIG9iamV0cyBldCByw6lmw6lyZW5jZXMgcGFyIGFyY2hpdmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYwCittc2dpZCAiUHJvdmlkZSBjb250ZW50IG9yIHR5cGUgYW5kIHNpemUgaW5mb3JtYXRpb24gZm9yIHJlcG9zaXRvcnkgb2JqZWN0cyIKK21zZ3N0ciAiIgorIkZvdXJuaXIgbGVzIGNvbnRlbnUgb3UgbCdpbmZvcm1hdGlvbiBkZSB0eXBlIGV0IHRhaWxsZSBwb3VyIGxlcyBvYmpldHMgZHUgIgorImTDqXDDtHQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYxCittc2dpZCAiRGlzcGxheSBnaXRhdHRyaWJ1dGVzIGluZm9ybWF0aW9uIgorbXNnc3RyICJBZmZpY2hlciBsZXMgaW5mb3JtYXRpb25zIGdpdGF0dHJpYnV0ZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYyCittc2dpZCAiRGVidWcgZ2l0aWdub3JlIC8gZXhjbHVkZSBmaWxlcyIKK21zZ3N0ciAiRMOpYm9ndWVyIGdpdGlnbm9yZSAvIGxlcyBmaWNoaWVycyBkJ2V4Y2x1c2lvbiIKKworIzogY29tbWFuZC1saXN0Lmg6NjMKK21zZ2lkICJTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzIgorbXNnc3RyICJBZmZpY2hlciBsZXMgbm9tcyBjYW5vbmlxdWVzIGV0IGxlcyBhZHJlc3NlcyBjb3VycmllbCBkZXMgY29udGFjdHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY0Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIG9yIHJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICJCYXNjdWxlciBkZSBicmFuY2hlIG91IHJlc3RhdXJlciBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NQorbXNnaWQgIkNvcHkgZmlsZXMgZnJvbSB0aGUgaW5kZXggdG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiQ29waWVyIGxlcyBmaWNoaWVycyBkZXB1aXMgbCdpbmRleCBkYW5zIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY2Cittc2dpZCAiRW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIG5hbWUgaXMgd2VsbCBmb3JtZWQiCittc2dzdHIgIkFzc3VyZSBxdSd1biBub20gZGUgcsOpZsOpcmVuY2UgZXN0IGJpZW4gZm9ybcOpIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NworbXNnaWQgIkZpbmQgY29tbWl0cyB5ZXQgdG8gYmUgYXBwbGllZCB0byB1cHN0cmVhbSIKK21zZ3N0ciAiVHJvdXZlciBsZXMgY29tbWl0cyDDoCBhcHBsaXF1ZXIgZW4gYW1vbnQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY4Cittc2dpZCAiQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIkFwcGxpcXVlciBsZXMgbW9kaWZpY2F0aW9ucyBpbnRyb2R1aXRlcyBwYXIgZGVzIGNvbW1pdHMgZXhpc3RhbnRzIgorCisjOiBjb21tYW5kLWxpc3QuaDo2OQorbXNnaWQgIkdyYXBoaWNhbCBhbHRlcm5hdGl2ZSB0byBnaXQtY29tbWl0IgorbXNnc3RyICJBbHRlcm5hdGl2ZSBncmFwaGlxdWUgw6AgZ2l0LWNvbW1pdCIKKworIzogY29tbWFuZC1saXN0Lmg6NzAKK21zZ2lkICJSZW1vdmUgdW50cmFja2VkIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiU3VwcHJpbWVyIGxlcyBmaWNoaWVycyBub24tc3VpdmlzIGRlIGwnYXJicmUgZGUgdHJhdmFpbCIKKworIzogY29tbWFuZC1saXN0Lmg6NzEKK21zZ2lkICJDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIkNsb25lciB1biBkw6lww7R0IGRhbnMgdW4gbm91dmVhdSByw6lwZXJ0b2lyZSIKKworIzogY29tbWFuZC1saXN0Lmg6NzIKK21zZ2lkICJEaXNwbGF5IGRhdGEgaW4gY29sdW1ucyIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIGRvbm7DqWVzIGVuIGNvbG9ubmVzIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MworbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJFbnJlZ2lzdHJlciBsZXMgbW9kaWZpY2F0aW9ucyBkYW5zIGxlIGTDqXDDtHQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc0Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBHaXQgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICLDiWNyaXJlIGV0IHbDqXJpZmllciBsZXMgZmljaGllcnMgZGUgZ3JhcGhlIGRlIGNvbW1pdCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc1Cittc2dpZCAiQ3JlYXRlIGEgbmV3IGNvbW1pdCBvYmplY3QiCittc2dzdHIgIkNyw6llciB1biBub3V2ZWwgb2JqZXQgY29tbWl0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgInZvaXIgZXQgcsOpZ2xlciBsZXMgb3B0aW9ucyBnbG9iYWxlcyBvdSBkZSBkw6lww7R0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NworbXNnaWQgIkNvdW50IHVucGFja2VkIG51bWJlciBvZiBvYmplY3RzIGFuZCB0aGVpciBkaXNrIGNvbnN1bXB0aW9uIgorbXNnc3RyICIiCisiQ29tcHRlciBsZSBub21icmUgZCdvYmpldHMgbm9uLWVtcGFxdWV0w6lzIGV0IGxldXIgY29uc29tbWF0aW9uIGQnZXNwYWNlICIKKyJkaXNxdWUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc4Cittc2dpZCAiUmV0cmlldmUgYW5kIHN0b3JlIHVzZXIgY3JlZGVudGlhbHMiCittc2dzdHIgIlLDqWN1cMOpcmVyIGV0IHNhdXZlZ2FyZGVyIGxlcyBjZXJ0aWZpY2F0cyBkJ3V0aWxpc2F0ZXVyIgorCisjOiBjb21tYW5kLWxpc3QuaDo3OQorbXNnaWQgIkhlbHBlciB0byB0ZW1wb3JhcmlseSBzdG9yZSBwYXNzd29yZHMgaW4gbWVtb3J5IgorbXNnc3RyICJBc3Npc3RhbnQgcG91ciBtYWludGVuaXIgdGVtcG9yYWlyZW1lbnQgZW4gbcOpbW9pcmUgbGVzIG1vdHMgZGUgcGFzc2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgwCittc2dpZCAiSGVscGVyIHRvIHN0b3JlIGNyZWRlbnRpYWxzIG9uIGRpc2siCittc2dzdHIgIkFzc2lzdGFudCBwb3VyIHNhdXZlZ2FyZGVyIGxlcyBjZXJ0aWZpY2F0cyBzdXIgZGlzcXVlIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MQorbXNnaWQgIkV4cG9ydCBhIHNpbmdsZSBjb21taXQgdG8gYSBDVlMgY2hlY2tvdXQiCittc2dzdHIgIkV4cG9ydGVyIHVuIGNvbW1pdCB1bmlxdWUgZW4gZXh0cmFjdGlvbiBDVlMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgyCittc2dpZCAiU2FsdmFnZSB5b3VyIGRhdGEgb3V0IG9mIGFub3RoZXIgU0NNIHBlb3BsZSBsb3ZlIHRvIGhhdGUiCittc2dzdHIgIlNhdXZlciB2b3MgZG9ubsOpZXMgZGVwdWlzIHVuIGF1dHJlIFNDTSBxdSdvbiBhaW1lIMOgIGhhw69yIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MworbXNnaWQgIkEgQ1ZTIHNlcnZlciBlbXVsYXRvciBmb3IgR2l0IgorbXNnc3RyICJVbiDDqW11bGF0ZXVyIGRlIHNlcnZldXIgQ1ZTIHBvdXIgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo4NAorbXNnaWQgIkEgcmVhbGx5IHNpbXBsZSBzZXJ2ZXIgZm9yIEdpdCByZXBvc2l0b3JpZXMiCittc2dzdHIgIlVuIHNlcnZldXIgdnJhaW1lbnQgc2ltcGxlIHBvdXIgbGVzIGTDqXDDtHRzIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODUKK21zZ2lkICJHaXZlIGFuIG9iamVjdCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgYmFzZWQgb24gYW4gYXZhaWxhYmxlIHJlZiIKK21zZ3N0ciAiIgorIkJhcHRpc2VyIHVuIG9iamV0IGF2ZWMgdW4gbm9tIGxpc2libGUgw6AgcGFydGlyIGQndW5lIHLDqWbDqXJlbmNlIGRpc3BvbmlibGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg2Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiIgorIkFmZmljaGVyIGxlcyBjaGFuZ2VtZW50cyBlbnRyZSBsZXMgdmFsaWRhdGlvbnMsIGVudHJlIHZhbGlkYXRpb24gZXQgY29waWUgZGUgIgorInRyYXZhaWwsIGV0YyIKKworIzogY29tbWFuZC1saXN0Lmg6ODcKK21zZ2lkICJDb21wYXJlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgiCittc2dzdHIgIkNvbXBhcmUgZGVzIGZpY2hpZXJzIGRlIGwnYXJicmUgZGUgdHJhdmFpbCBldCBkZSBsJ2luZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDo4OAorbXNnaWQgIkNvbXBhcmUgYSB0cmVlIHRvIHRoZSB3b3JraW5nIHRyZWUgb3IgaW5kZXgiCittc2dzdHIgIkNvbXBhcmVyIHVuIGFyYnJlIGF2ZWMgbCdhcmJyZSBkZSB0cmF2YWlsIG91IGwnaW5kZXgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg5Cittc2dpZCAiQ29tcGFyZXMgdGhlIGNvbnRlbnQgYW5kIG1vZGUgb2YgYmxvYnMgZm91bmQgdmlhIHR3byB0cmVlIG9iamVjdHMiCittc2dzdHIgIkNvbXBhcmUgbGUgY29udGVudSBldCBsYSBtb2RlIGRlcyBibG9icyB0cm91dsOpcyB2aWEgZGV1eCBvYmpldHMgYXJicmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkwCittc2dpZCAiU2hvdyBjaGFuZ2VzIHVzaW5nIGNvbW1vbiBkaWZmIHRvb2xzIgorbXNnc3RyICJBZmZpY2hlciBsZXMgbW9kaWZpY2F0aW9ucyBlbiB1dGlsaXNhbnQgbGVzIG91dGlscyBoYWJpdHVlbCBkZSBkaWZmIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MQorbXNnaWQgIkdpdCBkYXRhIGV4cG9ydGVyIgorbXNnc3RyICJFeHBvcnRldXIgZGUgZG9ubsOpZXMgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo5MgorbXNnaWQgIkJhY2tlbmQgZm9yIGZhc3QgR2l0IGRhdGEgaW1wb3J0ZXJzIgorbXNnc3RyICJNb3RldXIgcG91ciBsZXMgaW1wb3J0YXRldXJzIHJhcGlkZXMgZGUgZG9ubsOpZXMgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo5MworbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIlTDqWzDqWNoYXJnZXIgbGVzIG9iamV0cyBldCByw6lmw6lyZW5jZXMgZGVwdWlzIHVuIGF1dHJlIGTDqXDDtHQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk0Cittc2dpZCAiUmVjZWl2ZSBtaXNzaW5nIG9iamVjdHMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIlTDqWzDqWNoYXJnZXIgbGVzIG9iamV0cyBtYW5xdWFudHMgZGVwdWlzIHVuIGF1dHJlIGTDqXDDtHQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk1Cittc2dpZCAiUmV3cml0ZSBicmFuY2hlcyIKK21zZ3N0ciAiUsOpw6ljcmlyZSBsZXMgYnJhbmNoZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk2Cittc2dpZCAiUHJvZHVjZSBhIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJQcm9kdWlyZSB1biBtZXNzYWdlIGRlIHZhbGlkYXRpb24gZGUgZnVzaW9uIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NworbXNnaWQgIk91dHB1dCBpbmZvcm1hdGlvbiBvbiBlYWNoIHJlZiIKK21zZ3N0ciAiQWZmaWNoZXIgbCdpbmZvcm1hdGlvbiBkZSBjaGFxdWUgcsOpZsOpcmVuY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk4Cittc2dpZCAiUHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwgc3VibWlzc2lvbiIKK21zZ3N0ciAiUHLDqXBhcmVyIGxlcyBwYXRjaHMgcG91ciBzb3VtaXNzaW9uIHBhciBjb3VycmllbCIKKworIzogY29tbWFuZC1saXN0Lmg6OTkKK21zZ2lkICJWZXJpZmllcyB0aGUgY29ubmVjdGl2aXR5IGFuZCB2YWxpZGl0eSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgZGF0YWJhc2UiCittc2dzdHIgIiIKKyJWw6lyaWZpZXIgbGEgY29ubmVjdGl2aXTDqSBldCBsYSB2YWxpZGl0w6kgZGVzIG9iamV0cyBkYW5zIGxhIGJhc2UgZGUgZG9ubsOpZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMAorbXNnaWQgIkNsZWFudXAgdW5uZWNlc3NhcnkgZmlsZXMgYW5kIG9wdGltaXplIHRoZSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJFZmZhY2VyIGxlcyBmaWNoaWVycyBub24tbsOpY2Vzc2FpcmVzIGV0IG9wdGltaXNlciBsZSBkw6lww7R0IGxvY2FsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDEKK21zZ2lkICJFeHRyYWN0IGNvbW1pdCBJRCBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCB1c2luZyBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAiRXh0cmFpcmUgbCdJRCBkdSBjb21taXQgZGVwdWlzIHVuZSBhcmNoaXZlIGNyw6nDqWUgcGFyIGdpdC1hcmNoaXZlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDIKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIkFmZmljaGVyIGxlcyBsaWduZXMgY29ycmVzcG9uZGFudCDDoCB1biBtb3RpZiIKKworIzogY29tbWFuZC1saXN0Lmg6MTAzCittc2dpZCAiQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdCIKK21zZ3N0ciAiVW5lIGludGVyZmFjZSBncmFwaGlxdWUgcG9ydGFibGUgcG91ciBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNAorbXNnaWQgIkNvbXB1dGUgb2JqZWN0IElEIGFuZCBvcHRpb25hbGx5IGNyZWF0ZXMgYSBibG9iIGZyb20gYSBmaWxlIgorbXNnc3RyICIiCisiQ2FsY3VsZXIgbCdJRCBkJ29iamV0IGV0IGNyw6llciBvcHRpb25uZWxsZW1lbnQgdW4gYmxvYiBkZXB1aXMgdW4gZmljaGllciIKKworIzogY29tbWFuZC1saXN0Lmg6MTA1Cittc2dpZCAiRGlzcGxheSBoZWxwIGluZm9ybWF0aW9uIGFib3V0IEdpdCIKK21zZ3N0ciAiQWZmaWNoZXIgbCdpbmZvcm1hdGlvbiBkJ2FpZGUgw6AgcHJvcG9zIGRlIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA2Cittc2dpZCAiU2VydmVyIHNpZGUgaW1wbGVtZW50YXRpb24gb2YgR2l0IG92ZXIgSFRUUCIKK21zZ3N0ciAiSW1wbGFudGF0aW9uIGPDtHTDqSBzZXJ2ZXVyIGRlIEdpdCBzdXIgSFRUUCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA3Cittc2dpZCAiRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUCIKK21zZ3N0ciAiVMOpbMOpY2hhcmdlciBkZXB1aXMgdW4gZMOpcMO0dCBHaXQgZGlzdGFudCB2aWEgSFRUUCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA4Cittc2dpZCAiUHVzaCBvYmplY3RzIG92ZXIgSFRUUC9EQVYgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJQb3Vzc2VyIGxlcyBvYmpldHMgc3VyIHVuIGF1dHJlIGTDqXDDtHQgdmlhIEhUVFAvREFWIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDkKK21zZ2lkICJTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGZyb20gc3RkaW4gdG8gYW4gSU1BUCBmb2xkZXIiCittc2dzdHIgIkVudm95ZXIgdW4gZW5zZW1ibGUgZGUgcGF0Y2hzIGRlcHVpcyBzdGRpbiB2ZXJzIHVuIHLDqXBlcnRvaXJlIElNQVAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIiIKKyJDb25zdHJ1aXJlIHVuIGZpY2hpZXIgZCdpbmRleCBwYWNrIGRlcHVpcyB1bmUgYXJjaGl2ZSBjb21wYWN0w6llIGV4aXN0YW50ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTExCittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIkNyw6llciB1biBkw6lww7R0IEdpdCB2aWRlIG91IHLDqWluaXRpYWxpc2VyIHVuIGV4aXN0YW50IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTIKK21zZ2lkICJJbnN0YW50bHkgYnJvd3NlIHlvdXIgd29ya2luZyByZXBvc2l0b3J5IGluIGdpdHdlYiIKK21zZ3N0ciAiTmF2aWd1ZXIgaW5zdGFudGFuw6ltZW50IHZvdHJlIGTDqXDDtHQgZGUgdHJhdmFpbCBkYW5zIGdpdHdlYiIKKworIzogY29tbWFuZC1saXN0Lmg6MTEzCittc2dpZCAiQWRkIG9yIHBhcnNlIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gaW4gY29tbWl0IG1lc3NhZ2VzIgorbXNnc3RyICIiCisiQWpvdXRlciBvdSBhbmFseXNlciBsJ2luZm9ybWF0aW9uIHN0cnVjdHVyw6llIGRhbnMgbGVzIG1lc3NhZ2VzIGRlIHZhbGlkYXRpb24iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNAorbXNnaWQgIlRoZSBHaXQgcmVwb3NpdG9yeSBicm93c2VyIgorbXNnc3RyICJMZSBuYXZpZ2F0ZXVyIGRlIGTDqXDDtHQgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTUKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJBZmZpY2hlciBsJ2hpc3RvcmlxdWUgZGVzIHZhbGlkYXRpb25zIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTYKK21zZ2lkICJTaG93IGluZm9ybWF0aW9uIGFib3V0IGZpbGVzIGluIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIkFmZmljaGVyIGwnaW5mb3JtYXRpb24gw6AgcHJvcG9zIGRlcyBmaWNoaWVycyBkYW5zIGwnaW5kZXggb3UgbCdhcmJyZSBkZSAiCisidHJhdmFpbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE3Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkiCittc2dzdHIgIkxpc3RlciBsZXMgcsOpZsOpcmVuY2VzIGRhbnMgdW4gZMOpcMO0dCBkaXN0YW50IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTgKK21zZ2lkICJMaXN0IHRoZSBjb250ZW50cyBvZiBhIHRyZWUgb2JqZWN0IgorbXNnc3RyICJBZmZpY2hlciBsZSBjb250ZW51IGQndW4gb2JqZXQgYXJicmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOQorbXNnaWQgIkV4dHJhY3RzIHBhdGNoIGFuZCBhdXRob3JzaGlwIGZyb20gYSBzaW5nbGUgZS1tYWlsIG1lc3NhZ2UiCittc2dzdHIgIiIKKyJFeHRyYWlyZSBsZSBwYXRjaCBldCBsJ2luZm9ybWF0aW9uIGRlIGQnYXV0ZXVyIGRlcHVpcyB1biBzaW1wbGUgbWVzc2FnZSBkZSAiCisiY291cnJpZWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMAorbXNnaWQgIlNpbXBsZSBVTklYIG1ib3ggc3BsaXR0ZXIgcHJvZ3JhbSIKK21zZ3N0ciAiUHJvZ3JhbW1lIHNpbXBsZSBkZSBkw6ljb3VwYWdlIGRlIG1ib3ggVU5JWCIKKworIzogY29tbWFuZC1saXN0Lmg6MTIxCittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgIkZ1c2lvbm5lciBkZXV4IG91IHBsdXNpZXVycyBoaXN0b3JpcXVlcyBkZSBkw6l2ZWxvcHBlbWVudCBlbnNlbWJsZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTIyCittc2dpZCAiRmluZCBhcyBnb29kIGNvbW1vbiBhbmNlc3RvcnMgYXMgcG9zc2libGUgZm9yIGEgbWVyZ2UiCittc2dzdHIgIlRyb3V2ZXIgdW4gYW5jw6p0cmUgYXVzc2kgYm9uIHF1ZSBwb3NzaWJsZSBwb3VyIHVuZSBmdXNpb24iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMworbXNnaWQgIlJ1biBhIHRocmVlLXdheSBmaWxlIG1lcmdlIgorbXNnc3RyICJMYW5jZXIgdW5lIGZ1c2lvbiDDoCAzIHBvaW50cyIKKworIzogY29tbWFuZC1saXN0Lmg6MTI0Cittc2dpZCAiUnVuIGEgbWVyZ2UgZm9yIGZpbGVzIG5lZWRpbmcgbWVyZ2luZyIKK21zZ3N0ciAiTGFuY2VyIHVuZSBmdXNpb24gw6AgMyBwb2ludHMgcG91ciBsZXMgZmljaGllcnMgw6AgZnVzaW9ubmVyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjUKK21zZ2lkICJUaGUgc3RhbmRhcmQgaGVscGVyIHByb2dyYW0gdG8gdXNlIHdpdGggZ2l0LW1lcmdlLWluZGV4IgorbXNnc3RyICJMZSBwcm9ncmFtbWUgYXNzaXN0YW50IHN0YW5kYXJkIMOgIHV0aWxpc2VyIGF2ZWMgZ2l0LW1lcmdlLWluZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjYKK21zZ2lkICJSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0ciAiIgorIkxhbmNlciBsZXMgb3V0aWxzIGRlIHLDqXNvbHV0aW9uIGRlIGNvbmZsaXQgZGUgZnVzaW9uIHBvdXIgcsOpc291ZHJlIGxlcyAiCisiY29uZmxpdHMgZGUgZnVzaW9uIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjcKK21zZ2lkICJTaG93IHRocmVlLXdheSBtZXJnZSB3aXRob3V0IHRvdWNoaW5nIGluZGV4IgorbXNnc3RyICJBZmZpY2hlciBsYSBmdXNpb24gw6AgdHJvaXMgcG9pbnRzIHNhbnMgbW9kaWZpZXIgbCdpbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI4Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBtdWx0aS1wYWNrLWluZGV4ZXMiCittc2dzdHIgIsOJY3JpcmUgZXQgdsOpcmlmaWVyIGxlcyBpbmRleCBtdWx0aS1wYXF1ZXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOQorbXNnaWQgIkNyZWF0ZXMgYSB0YWcgb2JqZWN0IgorbXNnc3RyICJDcsOpZXIgdW4gb2JqZXQgw6l0aXF1ZXR0ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTMwCittc2dpZCAiQnVpbGQgYSB0cmVlLW9iamVjdCBmcm9tIGxzLXRyZWUgZm9ybWF0dGVkIHRleHQiCittc2dzdHIgIkNvbnN0cnVpcmUgdW4gb2JqZXQgYXJicmUgZGVwdWlzIHVuZSB0ZXh0ZSBmb3JtYXTDqSBjb21tZSBscy10cmVlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzEKK21zZ2lkICJNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsiCittc2dzdHIgIkTDqXBsYWNlciBvdSByZW5vbW1lciB1biBmaWNoaWVyLCB1biByw6lwZXJ0b2lyZSwgb3UgdW4gbGllbiBzeW1ib2xpcXVlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzIKK21zZ2lkICJGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzIgorbXNnc3RyICJUcm91dmVyIGxlcyBub21zIHN5bWJvbGlxdWVzIHBvdXIgZGVzIHLDqXZpc2lvbnMgZG9ubsOpZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMworbXNnaWQgIkFkZCBvciBpbnNwZWN0IG9iamVjdCBub3RlcyIKK21zZ3N0ciAiQWpvdXRlciBvdSBpbnNwZWN0ZXIgbGVzIG5vdGVzIGQndW4gb2JqZXRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzQKK21zZ2lkICJJbXBvcnQgZnJvbSBhbmQgc3VibWl0IHRvIFBlcmZvcmNlIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAiSW1wb3J0ZXIgZXQgc291bWV0dHJlIMOgIGRlcyBkw6lww7R0IFBlcmZvcmNlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzUKK21zZ2lkICJDcmVhdGUgYSBwYWNrZWQgYXJjaGl2ZSBvZiBvYmplY3RzIgorbXNnc3RyICJDcsOpZXIgdW5lIGFyY2hpdmUgY29tcGFjdMOpZSBkJ29iamV0cyIKKworIzogY29tbWFuZC1saXN0Lmg6MTM2Cittc2dpZCAiRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcyIKK21zZ3N0ciAiVHJvdXZlciBsZXMgZmljaGllcnMgcGFjayByZWRvbmRhbnRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzcKK21zZ2lkICJQYWNrIGhlYWRzIGFuZCB0YWdzIGZvciBlZmZpY2llbnQgcmVwb3NpdG9yeSBhY2Nlc3MiCittc2dzdHIgIkVtcGFxdWV0ZXIgbGVzIHTDqnRlcyBldCBsZXMgw6l0aXF1ZXR0ZXMgcG91ciB1biBhY2PDqHMgZWZmaWNhY2UgYXUgZMOpcMO0dCIKKworIzogY29tbWFuZC1saXN0Lmg6MTM4Cittc2dpZCAiUm91dGluZXMgdG8gaGVscCBwYXJzaW5nIHJlbW90ZSByZXBvc2l0b3J5IGFjY2VzcyBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisiUm91dGluZXMgcG91ciBhaWRlciDDoCBhbmFseXNlciBsZXMgcGFyYW3DqHRyZXMgZCdhY2PDqHMgYXV4IGTDqXDDtHRzIGRpc3RhbnRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzkKK21zZ2lkICJDb21wdXRlIHVuaXF1ZSBJRCBmb3IgYSBwYXRjaCIKK21zZ3N0ciAiQ2FsY3VsZXIgbCdJRCB1bmlxdWUgZCd1biBwYXRjaCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQwCittc2dpZCAiUHJ1bmUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisiw4lsaW1pbmVyIGxlcyBvYmpldHMgaW5hdHRlaWduYWJsZXMgZGVwdWlzIGxhIGJhc2UgZGUgZG9ubsOpZXMgZGVzIG9iamV0cyIKKworIzogY29tbWFuZC1saXN0Lmg6MTQxCittc2dpZCAiUmVtb3ZlIGV4dHJhIG9iamVjdHMgdGhhdCBhcmUgYWxyZWFkeSBpbiBwYWNrIGZpbGVzIgorbXNnc3RyICLDiWxpbWluZXIgbGVzIG9iamV0cyBxdWkgc29udCBkw6lqw6AgcHLDqXNlbnRzIGRhbnMgbGVzIGZpY2hpZXJzIHBhY2siCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MgorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiUmFwYXRyaWVyIGV0IGludMOpZ3JlciB1biBhdXRyZSBkw6lww7R0IG91IHVuZSBicmFuY2hlIGxvY2FsZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQzCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJNZXR0cmUgw6Agam91ciBsZXMgcsOpZsOpcmVuY2VzIGRpc3RhbnRlcyBhaW5zaSBxdWUgbGVzIG9iamV0cyBhc3NvY2nDqXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NAorbXNnaWQgIkFwcGxpZXMgYSBxdWlsdCBwYXRjaHNldCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiQXBwbGlxdWVyIHVuIHBhdGNoc2V0IHF1aWx0IHN1ciBsYSBicmFuY2hlIGNvdXJhbnRlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDUKK21zZ2lkICJDb21wYXJlIHR3byBjb21taXQgcmFuZ2VzIChlLmcuIHR3byB2ZXJzaW9ucyBvZiBhIGJyYW5jaCkiCittc2dzdHIgIiIKKyJDb21wYXJlciBkZXV4IHBsYWdlcyBkZSBjb21taXRzIChwYXIgZXhlbXBsZSBkZXV4IHZlcnNpb25zIGQndW5lIGJyYW5jaGUpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDYKK21zZ2lkICJSZWFkcyB0cmVlIGluZm9ybWF0aW9uIGludG8gdGhlIGluZGV4IgorbXNnc3RyICJMaXJlIGwnaW5mb3JtYXRpb24gZCdhcmJyZSBkYW5zIGwnaW5kZXgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NworbXNnaWQgIlJlYXBwbHkgY29tbWl0cyBvbiB0b3Agb2YgYW5vdGhlciBiYXNlIHRpcCIKK21zZ3N0ciAiUsOpYXBwbGljYXRpb24gZGVzIGNvbW1pdHMgc3VyIGxlIHNvbW1ldCBkZSBsJ2F1dHJlIGJhc2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OAorbXNnaWQgIlJlY2VpdmUgd2hhdCBpcyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVjZXZvaXIgY2UgcXVpIGVzdCBwb3Vzc8OpIGRhbnMgbGUgZMOpcMO0dCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ5Cittc2dpZCAiTWFuYWdlIHJlZmxvZyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiR8OpcmVyIGwnaW5mb3JtYXRpb24gZGUgcmVmbG9nIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTAKK21zZ2lkICJNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJHw6lyZXIgdW4gZW5zZW1ibGUgZGUgZMOpcMO0dHMgc3VpdmlzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTEKK21zZ2lkICJQYWNrIHVucGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5IgorbXNnc3RyICJFbXBhcXVldGVyIGxlcyBvYmpldHMgbm9uLWVtcGFxdWV0w6lzIGQndW4gZMOpcMO0dCIKKworIzogY29tbWFuZC1saXN0Lmg6MTUyCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgcmVmcyB0byByZXBsYWNlIG9iamVjdHMiCittc2dzdHIgIkNyw6llciwgbGlzdGVyLCBzdXBwcmltZXIgZGVzIHLDqWbDqXJlbmNlIHBvdXIgcmVtcGxhY2VyIGRlcyBvYmpldHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MworbXNnaWQgIkdlbmVyYXRlcyBhIHN1bW1hcnkgb2YgcGVuZGluZyBjaGFuZ2VzIgorbXNnc3RyICJHw6luw6lyZXIgdW5lIHLDqXN1bcOpIGRlcyBtb2RpZmljYXRpb25zIGVuIGF0dGVudGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTQKK21zZ2lkICJSZXVzZSByZWNvcmRlZCByZXNvbHV0aW9uIG9mIGNvbmZsaWN0ZWQgbWVyZ2VzIgorbXNnc3RyICJSw6l1dGlsaXNlciB1bmUgcsOpc29sdXRpb24gZW5yZWdpc3Ryw6llIGRlIGZ1c2lvbnMgY29uZmxpY3R1ZWxsZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NQorbXNnaWQgIlJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlIgorbXNnc3RyICJSw6lpbml0aWFsaXNlciBsYSBIRUFEIGNvdXJhbnRlIMOgIGwnw6l0YXQgc3DDqWNpZmnDqSIKKworIzogY29tbWFuZC1saXN0Lmg6MTU2Cittc2dpZCAiUmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgInJlc3RhdXJlciBsZXMgZmljaGllcnMgbCdhcmJyZSBkZSB0cmF2YWlsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTcKK21zZ2lkICJSZXZlcnQgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICJJbnZlcnNlciBkZXMgY29tbWl0cyBleGlzdGFudHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OAorbXNnaWQgIkxpc3RzIGNvbW1pdCBvYmplY3RzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIG9iamV0cyBjb21taXQgZGFucyBsJ29yZHJlIGNocm9ub2xvZ2lxdWUgaW52ZXJzZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTU5Cittc2dpZCAiUGljayBvdXQgYW5kIG1hc3NhZ2UgcGFyYW1ldGVycyIKK21zZ3N0ciAiQW5hbHlzZXIgZXQgcHLDqXBhcmVyIGxlcyBwYXJhbcOodHJlcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTYwCittc2dpZCAiUmVtb3ZlIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIlN1cHByaW1lciBkZXMgZmljaGllcnMgZGUgbGEgY29waWUgZGUgdHJhdmFpbCBldCBkZSBsJ2luZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjEKK21zZ2lkICJTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGFzIGVtYWlscyIKK21zZ3N0ciAiRW52b3llciB1biBlbnNlbWJsZSBkZSBwYXRjaHMgY29tbWUgY291cnJpZWxzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjIKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBHaXQgcHJvdG9jb2wgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJQb3Vzc2VyIGxlcyBvYmpldHMgc3VyIHVuIGF1dHJlIGTDqXDDtHQgdmlhIGxlIHByb3RvY29sZSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MworbXNnaWQgIlJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdpdC1vbmx5IFNTSCBhY2Nlc3MiCittc2dzdHIgInNoZWxsIGRlIGxvZ2luIHJlc3RyZWludCBwb3VyIHVuIGFjY8OocyBTU0ggdmVycyBHaXQgc2V1bGVtZW50IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjQKK21zZ2lkICJTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dCIKK21zZ3N0ciAiUsOpc3VtZXIgbGEgc29ydGllIGRlICdnaXQgbG9nJyIKKworIzogY29tbWFuZC1saXN0Lmg6MTY1Cittc2dpZCAiU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMiCittc2dzdHIgIkFmZmljaGVyIGRpZmbDqXJlbnRzIHR5cGVzIGQnb2JqZXRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjYKK21zZ2lkICJTaG93IGJyYW5jaGVzIGFuZCB0aGVpciBjb21taXRzIgorbXNnc3RyICJBZmZpY2hlciBsZXMgYnJhbmNoZXMgZXQgbGV1cnMgY29tbWl0cyIKKworIzogY29tbWFuZC1saXN0Lmg6MTY3Cittc2dpZCAiU2hvdyBwYWNrZWQgYXJjaGl2ZSBpbmRleCIKK21zZ3N0ciAiQWZmaWNoZXIgbCdpbmRleCBkZSBsJ2FyY2hpdmUgZW1wYXF1ZXTDqWUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OAorbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIkxpc3RlciBsZXMgcsOpZsOpcmVuY2VzIGR1IGTDqXDDtHQgbG9jYWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OQorbXNnaWQgIkdpdCdzIGkxOG4gc2V0dXAgY29kZSBmb3Igc2hlbGwgc2NyaXB0cyIKK21zZ3N0ciAiTGUgY29kZSBkJ2luaXRpYWxpc2F0aW9uIGkxOG4gcG91ciBsZXMgc2NyaXB0cyBzaGVsbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTcwCittc2dpZCAiQ29tbW9uIEdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZSIKK21zZ3N0ciAiTGUgY29kZSBkJ2luaXRpYWxpc2F0aW9uIGNvbW11biBhdXggc2NyaXB0cyBzaGVsbCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MQorbXNnaWQgIkluaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJJbml0aWFsaXNlciBldCBtb2RpZmllciBsJ2V4dHJhY3Rpb24gcGFydGllbGxlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzIKK21zZ2lkICJTdGFzaCB0aGUgY2hhbmdlcyBpbiBhIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGF3YXkiCittc2dzdHIgIlJlbWlzZXIgbGVzIG1vZGlmaWNhdGlvbnMgZCd1biByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIHNhbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MworbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBzdGFnaW5nIGFyZWEiCittc2dzdHIgIkFqb3V0ZXIgbGUgY29udGVudSBkZSBmaWNoaWVycyDDoCBsJ2luZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzQKK21zZ2lkICJTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzIgorbXNnc3RyICJBZmZpY2hlciBsJ8OpdGF0IGRlIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NQorbXNnaWQgIlJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIgorbXNnc3RyICJSZXRpcmVyIGxlcyBlc3BhY2VzIGludXRpbGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzYKK21zZ2lkICJJbml0aWFsaXplLCB1cGRhdGUgb3IgaW5zcGVjdCBzdWJtb2R1bGVzIgorbXNnc3RyICJJbml0aWFsaXNlciwgbWV0dHJlIMOgIGpvdXIgZXQgaW5zcGVjdGVyIGxlcyBzb3VzLW1vZHVsZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NworbXNnaWQgIkJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYW5kIEdpdCIKK21zZ3N0ciAiT3DDqXJhdGlvbiBCaWRpcmVjdGlvbm5lbGxlcyBlbnRyZSB1biBkw6lww7R0IFN1YnZlcnNpb24gZXQgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzgKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMiCittc2dzdHIgIkJhc2N1bGVyIGRlIGJyYW5jaGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3OQorbXNnaWQgIlJlYWQsIG1vZGlmeSBhbmQgZGVsZXRlIHN5bWJvbGljIHJlZnMiCittc2dzdHIgIkxpcmUsIG1vZGlmaWVyIGV0IHN1cHByaW1lciBsZXMgcsOpZsOpcmVuY2VzIHN5bWJvbGlxdWVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODAKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAiIgorIkNyw6llciwgbGlzdGVyLCBzdXBwcmltZXIgb3UgdsOpcmlmaWVyIHVuIG9iamV0IGQnw6l0aXF1ZXR0ZSBzaWduw6kgYXZlYyBHUEciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MQorbXNnaWQgIkNyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGEgYmxvYidzIGNvbnRlbnRzIgorbXNnc3RyICJDcsOpZXIgdW4gZmljaGllciB0ZW1wb3JhaXJlIGF2ZWMgbGUgY29udGVudSBkJ3VuIGJsb2IiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MgorbXNnaWQgIlVucGFjayBvYmplY3RzIGZyb20gYSBwYWNrZWQgYXJjaGl2ZSIKK21zZ3N0ciAiRMOpcGFxdWV0ZXIgbGVzIG9iamV0cyBkZXB1aXMgdW5lIGFyY2hpdmUgZW1wYXF1ZXTDqWUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MworbXNnaWQgIlJlZ2lzdGVyIGZpbGUgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byB0aGUgaW5kZXgiCittc2dzdHIgIkVucmVnaXN0cmVyIGxlIGNvbnRlbnUgZCd1biBmaWNoaWVyIGRlIGwnYXJicmUgZGUgdHJhdmFpbCBkYW5zIGwnaW5kZXgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NAorbXNnaWQgIlVwZGF0ZSB0aGUgb2JqZWN0IG5hbWUgc3RvcmVkIGluIGEgcmVmIHNhZmVseSIKK21zZ3N0ciAiIgorIk1ldHRyZSDDoCBqb3VyIGxlIG5vbSBkJ29iamV0IHN0b2Nrw6kgZGFucyB1bmUgcsOpZsOpcmVuY2UgZW4gdG91dGUgc8OpY3VyaXTDqSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg1Cittc2dpZCAiVXBkYXRlIGF1eGlsaWFyeSBpbmZvIGZpbGUgdG8gaGVscCBkdW1iIHNlcnZlcnMiCittc2dzdHIgIiIKKyJNZXR0cmUgw6Agam91ciBsZSBmaWNoaWVyIGQnaW5mb3JtYXRpb25zIGF1eGlsaWFpcmVzIHBvdXIgYWlkZXIgbGVzIHNlcnZldXJzICIKKyJpZGlvdHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NgorbXNnaWQgIlNlbmQgYXJjaGl2ZSBiYWNrIHRvIGdpdC1hcmNoaXZlIgorbXNnc3RyICJSZW52b3llciB1bmUgYXJjaGl2ZSBkYW5zIGdpdC1hcmNoaXZlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODcKK21zZ2lkICJTZW5kIG9iamVjdHMgcGFja2VkIGJhY2sgdG8gZ2l0LWZldGNoLXBhY2siCittc2dzdHIgIlJlbnZveWVyIGRlcyBvYmpldHMgZW1wYXF1ZXTDqXMgZGFucyBnaXQtZmV0Y2gtcGFjayIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiU2hvdyBhIEdpdCBsb2dpY2FsIHZhcmlhYmxlIgorbXNnc3RyICJBZmZpY2hlciB1biB2YXJpYWJsZSBsb2dpcXVlIGRlIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg5Cittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgY29tbWl0cyIKK21zZ3N0ciAiVsOpcmlmaWVyIGxhIHNpZ25hdHVyZSBHUEcgZGUgY29tbWl0cyIKKworIzogY29tbWFuZC1saXN0Lmg6MTkwCittc2dpZCAiVmFsaWRhdGUgcGFja2VkIEdpdCBhcmNoaXZlIGZpbGVzIgorbXNnc3RyICJWYWxpZGVyIGRlcyBmaWNoaWVycyBkJ2FyY2hpdmUgR2l0IGVtcGFxdWV0w6lzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTEKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiB0YWdzIgorbXNnc3RyICJWw6lyaWZpZXIgbGEgc2lnbmF0dXJlIEdQRyBkJ8OpdGlxdWV0dGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTIKK21zZ2lkICJHaXQgd2ViIGludGVyZmFjZSAod2ViIGZyb250ZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMpIgorbXNnc3RyICJJbnRlcmZhY2Ugd2ViIGRlIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTkzCittc2dpZCAiU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIgorbXNnc3RyICJBZmZpY2hlciBsZXMgam91cm5hdXggYXZlYyBsYSBkaWZmw6lyZW5jZSBxdWUgY2hhcXVlIGNvbW1pdCBpbnRyb2R1aXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NAorbXNnaWQgIk1hbmFnZSBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIgorbXNnc3RyICJHw6hyZSBkZSBhcmJyZXMgZGUgdHJhdmFpbCBtdWx0aXBsZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NQorbXNnaWQgIkNyZWF0ZSBhIHRyZWUgb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgIkNyw6llciB1biBvYmpldCBhcmJyZSBkZXB1aXMgbCdpbmRleCBjb3VyYW50IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTYKK21zZ2lkICJEZWZpbmluZyBhdHRyaWJ1dGVzIHBlciBwYXRoIgorbXNnc3RyICJEw6lmaW5pdGlvbiBkZXMgYXR0cmlidXRzIHBhciBjaGVtaW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NworbXNnaWQgIkdpdCBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGFuZCBjb252ZW50aW9ucyIKK21zZ3N0ciAiaW50ZXJmYWNlIGVuIGxpZ25lIGRlIGNvbW1hbmRlIGV0IGNvbnZlbnRpb25zIGRlIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTk4Cittc2dpZCAiQSBHaXQgY29yZSB0dXRvcmlhbCBmb3IgZGV2ZWxvcGVycyIKK21zZ3N0ciAiVHV0b3JpZWwgZHUgY8WTdXIgZGUgR2l0IHBvdXIgbGVzIGTDqXZlbG9wcGV1cnMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OQorbXNnaWQgIkdpdCBmb3IgQ1ZTIHVzZXJzIgorbXNnc3RyICJHaXQgcG91ciBsZXMgdXRpbGlzYXRldXJzIGRlIENWUyIKKworIzogY29tbWFuZC1saXN0Lmg6MjAwCittc2dpZCAiVHdlYWtpbmcgZGlmZiBvdXRwdXQiCittc2dzdHIgIkJpZG91aWxsYWdlIGRlIGxhIHNvcnRpZSBkaWZmIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDEKK21zZ2lkICJBIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcyBmb3IgRXZlcnlkYXkgR2l0IgorbXNnc3RyICJVbiBlbnNlbWJsZSBtaW5pbWFsIHV0aWxlIGRlcyBjb21tYW5kZXMgZGUgR2l0IHBvdXIgdG91cyBsZXMgam91cnMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMgorbXNnaWQgIkEgR2l0IEdsb3NzYXJ5IgorbXNnc3RyICJVbiBnbG9zc2FpcmUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDMKK21zZ2lkICJIb29rcyB1c2VkIGJ5IEdpdCIKK21zZ3N0ciAiQ3JvY2hldHMgdXRpbGlzw6lzIHBhciBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNAorbXNnaWQgIlNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUiCittc2dzdHIgIlNww6ljaWZpZSBsZXMgZmljaGllcnMgbm9uLXN1aXZpcyDDoCBpZ25vcmVyIGludGVudGlvbm5lbGxlbWVudCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA1Cittc2dpZCAiRGVmaW5pbmcgc3VibW9kdWxlIHByb3BlcnRpZXMiCittc2dzdHIgIkTDqWZpbml0aW9uIGRlcyBwcm9wcmnDqXTDqXMgZGUgc291cy1tb2R1bGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNgorbXNnaWQgIkdpdCBuYW1lc3BhY2VzIgorbXNnc3RyICJFc3BhY2VzIGRlIG5vbSBkZSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNworbXNnaWQgIkdpdCBSZXBvc2l0b3J5IExheW91dCIKK21zZ3N0ciAiRGlzcG9zaXRpb24gZCd1biBkw6lww7R0IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA4Cittc2dpZCAiU3BlY2lmeWluZyByZXZpc2lvbnMgYW5kIHJhbmdlcyBmb3IgR2l0IgorbXNnc3RyICJTcMOpY2lmaWNhdGlvbiBkZXMgcsOpdmlzaW9ucyBldCBwb3J0w6llcyBwb3VyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA5Cittc2dpZCAiTW91bnRpbmcgb25lIHJlcG9zaXRvcnkgaW5zaWRlIGFub3RoZXIiCittc2dzdHIgIk1vbnRhZ2UgZCd1biBkw6lww7R0IGRhbnMgdW4gYXV0cmUgZMOpcMO0dCIKKworIzogY29tbWFuZC1saXN0Lmg6MjEwCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0OiBwYXJ0IHR3byIKK21zZ3N0ciAiVW5lIGludHJvZHVjdGlvbiBwcmF0aXF1ZSDDoCBHaXTCoDogZGV1eGnDqG1lIHBhcnRpZSIKKworIzogY29tbWFuZC1saXN0Lmg6MjExCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0IgorbXNnc3RyICJVbmUgaW50cm9kdWN0aW9uIHByYXRpcXVlIMOgIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjEyCittc2dpZCAiQW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQgd29ya2Zsb3dzIHdpdGggR2l0IgorbXNnc3RyICJVbiBhcGVyw6d1IGRlcyBmbHV4IGRlIHRyYXZhaWwgcmVjb21tYW5kw6lzIGF2ZWMgR2l0IgorCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgIlZvdXMgZGV2ZXogZMOpbWFycmVyIGF2ZWMgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDo2MAorbXNnaWQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIKK21zZ3N0ciAiU291aGFpdGV6LXZvdXMgcXVlIGplIGxlIGZhc3NlIHBvdXIgdm91cyBbWS9uXSA/ICIKKworIzogZ2l0LWJpc2VjdC5zaDoxMDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIk1hdXZhaXNlIHLDqXZpc2lvbiBlbiBlbnRyw6llIDogJGFyZyIKKworIzogZ2l0LWJpc2VjdC5zaDoxMjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRiaXNlY3RlZF9oZWFkIgorbXNnc3RyICJNYXV2YWlzZSByw6l2aXNpb24gZW4gZW50csOpZSA6ICRiaXNlY3RlZF9oZWFkIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAiTWF1dmFpc2UgcsOpdmlzaW9uIGVuIGVudHLDqWUgOiAkcmV2IgorCisjOiBnaXQtYmlzZWN0LnNoOjEzOQorIywgc2gtZm9ybWF0Cittc2dpZCAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgbidhY2NlcHRlIHF1J3VuIHNldWwgYXJndW1lbnQuIgorCisjOiBnaXQtYmlzZWN0LnNoOjIwOQorbXNnaWQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iCittc2dzdHIgIlBhcyBkZSBmaWNoaWVyIGRlIGxvZyBkb25uw6kiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgJGZpbGUgcG91ciByZWpvdWVyIgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMgorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiPz8gZGUgcXVvaSBwYXJsZXotdm91cyA/IgorCisjOiBnaXQtYmlzZWN0LnNoOjI0MQorbXNnaWQgImJpc2VjdCBydW4gZmFpbGVkOiBubyBjb21tYW5kIHByb3ZpZGVkLiIKK21zZ3N0ciAibGEgYmlzc2VjdGlvbiBhIMOpY2hvdcOpwqA6IGF1Y3VuZSBjb21tYW5kZSBmb3VybmllLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgImxhbmNlbWVudCBkZSAkY29tbWFuZCIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyJleGl0IGNvZGUgJHJlcyBmcm9tICckY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIKK21zZ3N0ciAiIgorImxhIGJpc3NlY3Rpb24gYSDDqWNob3XDqSA6XG4iCisibGUgY29kZSByZXRvdXIgJHJlcyBkZSAnJGNvbW1hbmQnIGVzdCA8IDAgb3UgPj0gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJsYSBiaXNzZWN0aW9uIG5lIHBldXQgcGx1cyBjb250aW51ZXIiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjg1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHJlcyIKK21zZ3N0ciAiIgorImxhIGJpc3NlY3Rpb24gYSDDqWNob3XDqSA6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIGEgcmV0b3VybsOpIGxlIGNvZGUgZXJyZXVyICRyZXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjkyCittc2dpZCAiYmlzZWN0IHJ1biBzdWNjZXNzIgorbXNnc3RyICJzdWNjw6hzIGRlIGxhIGJpc3NlY3Rpb24iCisKKyM6IGdpdC1iaXNlY3Quc2g6MzAwCittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICJQYXMgZGUgYmlzc2VjdGlvbiBlbiBjb3Vycy4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjQ2Cittc2dpZCAiIgorIkVycm9yOiBZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisibWVyZ2UiCittc2dzdHIgIiIKKyJFcnJldXLCoDogdm9zIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyBhdXggZmljaGllcnMgc3VpdmFudHMgc2VyYWllbnQgw6ljcmFzw6llcyAiCisicGFyIGxhIGZ1c2lvbiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjEKK21zZ2lkICJBdXRvbWF0ZWQgbWVyZ2UgZGlkIG5vdCB3b3JrLiIKK21zZ3N0ciAiTGEgZnVzaW9uIGF1dG9tYXRpcXVlIGEgw6ljaG91w6kuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MgorbXNnaWQgIlNob3VsZCBub3QgYmUgZG9pbmcgYW4gb2N0b3B1cy4iCittc2dzdHIgIkwnT2N0b3B1cyBuZSBkZXZyYWl0IHBhcyBhcnJpdmVyLiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGNvbW1vbiBjb21taXQgd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciB1biBjb21taXQgY29tbXVuIGF2ZWMgJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3NworIywgc2gtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICJEw6lqw6Agw6Agam91ciBhdmVjICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyB0bzogJHByZXR0eV9uYW1lIgorbXNnc3RyICJNaXNlIMOgIGpvdXIgZW4gYXZhbmNlIHJhcGlkZSBzdXIgJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo5NworIywgc2gtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiRXNzYWkgZGUgZnVzaW9uIHNpbXBsZSBhdmVjICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6MTAyCittc2dpZCAiU2ltcGxlIG1lcmdlIGRpZCBub3Qgd29yaywgdHJ5aW5nIGF1dG9tYXRpYyBtZXJnZS4iCittc2dzdHIgIkxhIGZ1c2lvbiBzaW1wbGUgYSDDqWNob3XDqSwgZXNzYWkgYXZlYyBsYSBmdXNpb24gYXV0b21hdGlxdWUuIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIyMQorbXNnaWQgIkNhbm5vdCByZW1vdmUgdGVtcG9yYXJ5IGluZGV4IChjYW4ndCBoYXBwZW4pIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsJ2luZGV4IHRlbXBvcmFpcmUgKG5lIHBldXQgcGFzIHNlIHByb2R1aXJlKSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyNzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJHJlZl9zdGFzaCB3aXRoICR3X2NvbW1pdCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciAkcmVmX3N0YXNoIGF2ZWMgJHdfY29tbWl0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCittc2dzdHIgImVycmV1csKgOiBvcHRpb24gaW5jb25udWUgcG91ciAnc3Rhc2ggcHVzaCfCoDogJG9wdGlvbiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAkc3Rhc2hfbXNnIgorbXNnc3RyICJDb3BpZSBkZSB0cmF2YWlsIGV0IMOpdGF0IGRlIGwnaW5kZXggc2F1dmVnYXJkw6lzIGRhbnMgJHN0YXNoX21zZyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICJvcHRpb24gaW5jb25udWXCoDogJG9wdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6ICRSRVYiCittc2dzdHIgIlRyb3AgZGUgcsOpdmlzaW9ucyBzcMOpY2lmacOpZXMgOiAkUkVWIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiRyZWZlcmVuY2Ugbidlc3QgcGFzIHVuZSByw6lmw6lyZW5jZSB2YWxpZGUiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICInJGFyZ3MnIG4nZXN0IHBhcyB1bmUgdmFsaWRhdGlvbiBkZSB0eXBlIHJlbWlzYWdlIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIickYXJncycgbidlc3QgcGFzIHVuZSByw6lmw6lyZW5jZSBkZSByZW1pc2FnZSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MTgKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByYWZyYcOuY2hpciBsJ2luZGV4IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYyMgorbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2FwcGxpcXVlciB1biByZW1pc2FnZSBlbiBjb3VycyBkZSBmdXNpb24iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMwCittc2dpZCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiQ29uZmxpdHMgZGFucyBsJ2luZGV4LiBFc3NheWV6IHNhbnMgLS1pbmRleC4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMyCittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzYXV2ZWdhcmRlciBsJ2FyYnJlIGQnaW5kZXgiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjQxCittc2dpZCAiQ291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2ggZW50cnkiCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIHJlc3RhdXJlciBsZXMgZmljaGllcnMgbm9uLXN1aXZpcyBkZXB1aXMgbCdlbnRyw6llIGRlIHJlbWlzYWdlIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY2NgorbXNnaWQgIkNhbm5vdCB1bnN0YWdlIG1vZGlmaWVkIGZpbGVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqXNpbmRleGVyIGxlcyBmaWNoaWVycyBtb2RpZmnDqXMiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICIke1JFVn0gc3VwcHJpbcOpICgkcykiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIke1JFVn06IEltcG9zc2libGUgZGUgc3VwcHJpbWVyIGwnZW50csOpZSBkZSBzdGFzaCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3OTIKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIihQb3VyIGxlcyByZXN0YXVyZXIgdGFwZXogXCJnaXQgc3Rhc2ggYXBwbHlcIikiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjAzCittc2dpZCAiUmVsYXRpdmUgcGF0aCBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKyJVbiBjaGVtaW4gcmVsYXRpZiBuZSBwZXV0IMOqdHJlIHV0aWxpc8OpIHF1ZSBkZXB1aXMgbGEgcmFjaW5lIGRlIGxhIGNvcGllIGRlICIKKyJ0cmF2YWlsIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMworIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAiTCdVUkwgZGUgZMOpcMO0dCAnJHJlcG8nIGRvaXQgw6p0cmUgYWJzb2x1IG91IGNvbW1lbmNlciBwYXIgLi98Li4vIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzMgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIickc21fcGF0aCcgZXhpc3RlIGTDqWrDoCBkYW5zIGwnaW5kZXgiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjM1CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCBhbmQgaXMgbm90IGEgc3VibW9kdWxlIgorbXNnc3RyICInJHNtX3BhdGgnIGV4aXN0ZSBkw6lqw6AgZGFucyBsJ2luZGV4IGV0IG4nZXN0IHBhcyB1biBzb3VzLW1vZHVsZSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAiJyRzbV9wYXRoJyBuJ2EgcGFzIGRlIGNvbW1pdCBleHRyYWl0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MworIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkFqb3V0IGR1IGTDqXDDtHQgZXhpc3RhbnQgw6AgJyRzbV9wYXRoJyBkYW5zIGwnaW5kZXgiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYSB2YWxpZCBnaXQgcmVwbyIKK21zZ3N0ciAiJyRzbV9wYXRoJyBleGlzdGUgZMOpasOgIGV0IG4nZXN0IHBhcyB1biBkw6lww7R0IGdpdCB2YWxpZGUiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBIGdpdCBkaXJlY3RvcnkgZm9yICckc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCittc2dzdHIgIiIKKyJVbiByw6lwZXJ0b2lyZSBnaXQgcG91ciAnJHNtX25hbWUnIGVzdCB0cm91dsOpIGVuIGxvY2FsIGF2ZWMgbGUocykgc2VydmV1cihzKSAiCisiZGlzdGFudChzKSA6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbVxuIgorIiAgJHJlYWxyZXBvXG4iCisidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgIgorInJlcG9cbiIKKyJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyAiCisib3B0aW9uLiIKK21zZ3N0ciAiIgorIlNpIHZvdXMgdm91bGV6IHLDqXV0aWxpc2VyIGNlIHLDqXBlcnRvaXJlIGxvY2FsIGdpdCBhdSBsaWV1IGRlIGxlIHJlY2xvbmVyICIKKyJkZXB1aXNcbiIKKyIgICRyZWFscmVwb1xuIgorInV0aWxpc2V6IGwnb3B0aW9uICctLWZvcmNlJy4gU2kgbGUgcsOpcGVydG9pcmUgbG9jYWwgZ2l0IG4nZXN0IHBhcyBsZSBkw6lww7R0ICIKKyJjb3JyZWN0XG4iCisib3Ugc2kgY2VjaSBuJ2VzdCBwYXMgY2xhaXIsIGNob2lzaXNzZXogdW4gYXV0cmUgbm9tIGF2ZWMgbCdvcHRpb24gJy0tbmFtZScuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnJHNtX25hbWUnLiIKK21zZ3N0ciAiUsOpYWN0aXZhdGlvbiBkdSByw6lwZXJ0b2lyZSBnaXQgbG9jYWwgcG91ciBsZSBzb3VzLW1vZHVsZSAnJHNtX25hbWUnLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2V4dHJhaXJlIGxlIHNvdXMtbW9kdWxlICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICLDiWNoZWMgZCdham91dCBkdSBzb3VzLW1vZHVsZSAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMxNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICLDiWNoZWMgZCdlbnJlZ2lzdHJlbWVudCBkdSBzb3VzLW1vZHVsZSAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZGUgdHJvdXZlciBsYSByw6l2aXNpb24gY291cmFudGUgZGFucyBsZSBjaGVtaW4gZGUgc291cy1tb2R1bGUgIgorIickZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIkltcG9zc2libGUgZGUgcmFwYXRyaWVyIGRhbnMgbGUgY2hlbWluIGRlIHNvdXMtbW9kdWxlICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZpbmQgY3VycmVudCAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0gcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggIgorIickc21fcGF0aCciCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGEgcsOpdmlzaW9uIGNvdXJhbnRlICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSBkYW5zIGxlICIKKyJjaGVtaW4gZGUgc291cy1tb2R1bGUgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc7IHRyeWluZyB0byBkaXJlY3RseSBmZXRjaCAiCisiJHNoYTE6IgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSByYXBhdHJpZXIgZGFucyBsZSBjaGVtaW4gZGUgc291cy1tb2R1bGUgJyRkaXNwbGF5cGF0aCfCoDsgZXNzYWkgIgorImRlIHJhcGF0cmllbWVudCBkaXJlY3QgZGUgJHNoYTHCoDoiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjI5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRmV0Y2hlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJywgYnV0IGl0IGRpZCBub3QgY29udGFpbiAkc2hhMS4gIgorIkRpcmVjdCBmZXRjaGluZyBvZiB0aGF0IGNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICIiCisiQ2hlbWluIGRlIHNvdXMtbW9kdWxlICckZGlzcGxheXBhdGgnIHLDqWN1cMOpcsOpLCBtYWlzIGlsIG5lIGNvbnRlbmFpdCBwYXMgIgorIiRzaGExLiBMYSByw6ljdXDDqXJhdGlvbiBkaXJlY3RlIGRlIGNlIGNvbW1pdCBhIMOpY2hvdcOpLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkJ2V4dHJhaXJlICckc2hhMScgZGFucyBsZSBjaGVtaW4gZGUgc291cy1tb2R1bGUgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAiQ2hlbWluIGRlIHNvdXMtbW9kdWxlICckZGlzcGxheXBhdGgnIDogJyRzaGExJyBleHRyYWl0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSByZWJhc2VyICckc2hhMScgZGFucyBsZSBjaGVtaW4gZGUgc291cy1tb2R1bGUgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIkNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJGRpc3BsYXlwYXRoJyA6IHJlYmFzw6kgZGFucyAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0NworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGZ1c2lvbm5lciAnJHNoYTEnIGRhbnMgbGUgY2hlbWluIGRlIHNvdXMtbW9kdWxlICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0OAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICJDaGVtaW4gZGUgc291cy1tb2R1bGUgJyRkaXNwbGF5cGF0aCcgOiBmdXNpb25uw6kgZGFucyAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY1MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiTCdleMOpY3V0aW9uIGRlICckY29tbWFuZCAkc2hhMScgYSDDqWNob3XDqSBkYW5zIGxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAiCisiJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjU0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKK21zZ3N0ciAiQ2hlbWluIGRlIHNvdXMtbW9kdWxlICckZGlzcGxheXBhdGgnIDogJyRjb21tYW5kICRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2ODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIsOJY2hlYyBkZSBwYXJjb3VycyBkYW5zIGxlIGNoZW1pbiBkdSBzb3VzLW1vZHVsZSAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTYKK21zZ2lkICJUaGUgLS1jYWNoZWQgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC0tZmlsZXMgb3B0aW9uIgorbXNnc3RyICJMJ29wdGlvbiAtLWNhY2hlZCBuZSBwZXV0IHBhcyDDqnRyZSB1dGlsaXPDqWUgYXZlYyBsJ29wdGlvbiAtLWZpbGVzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk0OAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICJtb2RlICRtb2RfZHN0IGluYXR0ZW5kdSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX3NyYyIKK21zZ3N0ciAiICBBdHRlbnRpb24gOiAkZGlzcGxheV9uYW1lIG5lIGNvbnRpZW50IHBhcyBsYSB2YWxpZGF0aW9uICRzaGExX3NyYyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX2RzdCIKK21zZ3N0ciAiICBBdHRlbnRpb24gOiAkZGlzcGxheV9uYW1lIG5lIGNvbnRpZW50IHBhcyBsYSB2YWxpZGF0aW9uICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiIgorIiAgQXR0ZW50aW9uIDogJGRpc3BsYXlfbmFtZSBuZSBjb250aWVudCBwYXMgbGVzIHZhbGlkYXRpb25zICRzaGExX3NyYyBldCAiCisiJHNoYTFfZHN0IgorCisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTZWUgZ2l0LSR7Y21kfSgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIlLDqWbDqXJlei12b3VzIMOgIGdpdC0ke2NtZH0oMSkgcG91ciBkZSBwbHVzIGFtcGxlcyBkw6l0YWlscy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDkKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC4iCittc2dzdHIgIkF1dG9yZW1pc2FnZSBhcHBsaXF1w6kuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgIkltcG9zc2libGUgZGUgc3RvY2tlciAkc3Rhc2hfc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNpbmcgKCRuZXdfY291bnQvJHRvdGFsKSIKK21zZ3N0ciAiUmViYXNhZ2UgKCRuZXdfY291bnQvJHRvdGFsKSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIwNworbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNlIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdFxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisieCwgZXhlYyA8Y29tbWl0PiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJDb21tYW5kZXPCoDpcbiIKKyIgcCwgcGljayA8Y29tbWl0PiA9IHV0aWxpc2VyIGxlIGNvbW1pdFxuIgorIiByLCByZXdvcmQgPGNvbW1pdD4gPSB1dGlsaXNlciBsZSBjb21taXQsIG1haXMgcmVmb3JtdWxlciBzb24gbWVzc2FnZVxuIgorIiBlLCBlZGl0IDxjb21taXQ+ID0gdXRpbGlzZXIgbGUgY29tbWl0LCBtYWlzIHMnYXJyw6p0ZXIgcG91ciBsZSBtb2RpZmllclxuIgorIiBzLCBzcXVhc2ggPGNvbW1pdD4gPSB1dGlsaXNlciBsZSBjb21taXQsIG1haXMgbGUgZnVzaW9ubmVyIGF2ZWMgbGUgIgorInByw6ljw6lkZW50XG4iCisiIGYsIGZpeHVwIDxjb21taXQ+ID0gY29tbWUgXCJzcXVhc2hcIiwgbWFpcyBlbiDDqWxpbWluYW50IHNvbiBtZXNzYWdlXG4iCisiIHgsIGV4ZWMgPGNvbW1pdD4gPSBsYW5jZXIgbGEgY29tbWFuZGUgKHJlc3RlIGRlIGxhIGxpZ25lKSBkYW5zIHVuIHNoZWxsXG4iCisiIGQsIGRyb3AgPGNvbW1pdD4gPSBzdXBwcmltZXIgbGUgY29tbWl0XG4iCisiIGwsIGxhYmVsIDxsYWJlbD4gPSDDqXRpcXVldGVyIGxhIEhFQUQgY291cmFudGUgYXZlYyB1biBub21cbiIKKyIgdCwgcmVzZXQgPGxhYmVsPiA9IHLDqWluaXRpYWxpc2VyIEhFQUQgw6AgbGFiZWxcbiIKKyIgbSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPHVuaWxpZ25lPl1cbiIKKyIgICAgICAgICBjcsOpZXIgdW4gY29tbWl0IGRlIGZ1c2lvbiB1dGlsaXNhbnQgbGUgbWVzc2FnZSBkZSBmdXNpb24gb3JpZ2luYWxcbiIKKyIgICAgICAgICAob3UgbCd1bmlsaWduZSwgc2kgYXVjdW4gY29tbWl0IGRlIGZ1c2lvbiBuJ2Egw6l0w6kgc3DDqWNpZmnDqSkuXG4iCisiICAgICAgICAgVXRpbGlzZXogLWMgPGNvbW1pdD4gcG91ciByZWZvcm11bGVyIGxlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbi5cbiIKKyJcbiIKKyJWb3VzIHBvdXZleiByw6lvcmRvbm5lciBjZXMgbGlnbmVzwqA7IGVsbGVzIHNvbnQgZXjDqWN1dMOpZXMgZGUgaGF1dCBlbiBiYXMuXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyNzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIlZvdXMgcG91dmV6IGNvcnJpZ2VyIGxlIGNvbW1pdCBtYWludGVuYW50LCBhdmVjXG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJhcHLDqHMgYXZvaXIgcsOpYWxpc8OpIHZvcyBtb2RpZmljYXRpb25zLCBsYW5jZXpcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjI5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHNoYTE6IG5vdCBhIGNvbW1pdCB0aGF0IGNhbiBiZSBwaWNrZWQiCittc2dzdHIgIiRzaGExIG4nZXN0IHBhcyB1biBjb21taXQgcXVpIHBldXQgw6p0cmUgcGljb3JlciIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjMzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21taXQgbmFtZTogJHNoYTEiCittc2dzdHIgIk5vbSBkZSBjb21taXQgaW52YWxpZGXCoDogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozNjQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHNhdXZlciBsZSBzaGExIGR1IHJlbXBsYcOnYW50IGR1IGNvbW1pdCBlbiBjb3VycyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICJBdmFuY2UgcmFwaWRlIHN1ciAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAiQXZhbmNlIHJhcGlkZSBpbXBvc3NpYmxlIHN1ciAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG1vdmUgSEVBRCB0byAkZmlyc3RfcGFyZW50IgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqXBsYWNlciBIRUFEIHN1ciAkZmlyc3RfcGFyZW50IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBzcXVhc2ggYSBtZXJnZTogJHNoYTEiCittc2dzdHIgIlJlZnVzIGQnw6ljcmFzZXIgdW4gY29tbWl0IGRlIGZ1c2lvbjogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGxhIHLDqWFwcGxpY2F0aW9uIGRlIGxhIGZ1c2lvbiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBpY2sgJHNoYTEiCittc2dzdHIgIkltcG9zc2libGUgZGUgcGljb3JlciAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ2NworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyR7bn06IgorbXNnc3RyICJDZWNpIGVzdCBsZSAke259acOobWUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uwqA6IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyR7bn0gd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiTGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uICR7bn0gc2VyYSBpZ25vcsOpwqA6IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdC4iCittc2dpZF9wbHVyYWwgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0cy4iCittc2dzdHJbMF0gIkNlY2kgZXN0IGxhIGNvbWJpbmFpc29uIGRlICRjb3VudCBjb21taXQuIgorbXNnc3RyWzFdICJDZWNpIGVzdCBsYSBjb21iaW5haXNvbiBkZSAkY291bnQgY29tbWl0cy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB3cml0ZSAkZml4dXBfbXNnIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnw6ljcmlyZSAkZml4dXBfbXNnIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk1Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cy4iCittc2dzdHIgIkNlY2kgZXN0IGxhIGNvbWJpbmFpc29uIGRlIDIgY29tbWl0cy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1MzYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU3OQorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICRzaGExLi4uICRyZXN0IgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYXBwbGlxdWVyICRzaGExLi4uICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFtZW5kIGNvbW1pdCBhZnRlciBzdWNjZXNzZnVsbHkgcGlja2luZyAkc2hhMS4uLiAkcmVzdFxuIgorIlRoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlLCBvciB0aGUgcHJlLWNvbW1pdCBob29rXG4iCisiZmFpbGVkLiBJZiB0aGUgcHJlLWNvbW1pdCBob29rIGZhaWxlZCwgeW91IG1heSBuZWVkIHRvIHJlc29sdmUgdGhlIGlzc3VlICIKKyJiZWZvcmVcbiIKKyJ5b3UgYXJlIGFibGUgdG8gcmV3b3JkIHRoZSBjb21taXQuIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSBjb3JyaWdlciBsZSBjb21taXQgYXByw6hzIGF2b2lyIHLDqXVzc2kgw6AgcGljb3JlciAkc2hhMS4uLiAiCisiJHJlc3RcbiIKKyJDJ2VzdCBwcm9iYWJsZW1lbnQgZMO7IMOgIHVuIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiB2aWRlIG91IGxlIGNyb2NoZXQgcHJlLSIKKyJjb21taXRcbiIKKyJhIMOpY2hvdcOpLiBTaSBsZSBjcm9jaGV0IHByZS1jb21taXQgYSDDqWNob3XDqSwgdm91cyBkZXZleiBwZXV0LcOqdHJlIHLDqXNvdWRyZSAiCisibGVcbiIKKyJwcm9ibMOobWUgYXZhbnQgZGUgcG91dm9pciByZWZvcm11bGVyIGxlIG1lc3NhZ2UgZHUgY29tbWl0LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCittc2dzdHIgIkFycsOqdMOpIMOgICRzaGExX2FiYnJldi4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICckc3F1YXNoX3N0eWxlJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICInJHNxdWFzaF9zdHlsZScgaW1wb3NzaWJsZSBhdmVjIGxlIGNvbW1pdCBwcsOpY8OpZGVudCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY4MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nOiAkcmVzdCIKK21zZ3N0ciAiRXjDqWN1dGlvbsKgOiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIGZhaWxlZDogJHJlc3QiCittc2dzdHIgIkwnZXjDqWN1dGlvbiBhIMOpY2hvdcOpwqA6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkzCittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgImV0IGEgbWlzIMOgIGpvdXIgbCdpbmRleCBvdSBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Njk1Cittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIlZvdXMgcG91dmV6IGNvcnJpZ2VyIGxlIHByb2Jsw6htZSwgcHVpcyBsYW5jZXJcbiIKKyJcbiIKKyJnaXQgcmViYXNlIC0tY29udGludWUiCisKKyMuIFRSQU5TTEFUT1JTOiBhZnRlciB0aGVzZSBsaW5lcyBpcyBhIGNvbW1hbmQgdG8gYmUgaXNzdWVkIGJ5IHRoZSB1c2VyCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRXhlY3V0aW9uIHN1Y2NlZWRlZDogJHJlc3RcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiTCdleMOpY3V0aW9uIGEgcsOpdXNzacKgOiAkcmVzdFxuIgorIm1haXMgYSBsYWlzc8OpIGRlcyBtb2RpZmljYXRpb25zIGRhbnMgbCdpbmRleCBvdSBsYSBjb3BpZSBkZSB0cmF2YWlsXG4iCisiVmFsaWRleiBvdSByZW1pc2V6IHZvcyBtb2RpZmljYXRpb24sIHB1aXMgbGFuY2V6XG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWFuZDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCittc2dzdHIgIkNvbW1hbmRlIGluY29ubnVlwqA6ICRjb21tYW5kICRzaGExICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzIwCittc2dpZCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgIlZldWlsbGV6IGNvcnJpZ2VyIGNlY2kgZW4gdXRpbGlzYW50ICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkICRoZWFkX25hbWUuIgorbXNnc3RyICJSZWJhc2FnZSBldCBtaXNlIMOgIGpvdXIgZGUgJGhlYWRfbmFtZSBhdmVjIHN1Y2PDqHMuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEyCittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBDSEVSUllfUElDS19IRUFEIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmVcbiIKKyJzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisiVm91cyBhdmV6IGRlcyBtb2RpZmljYXRpb25zIGluZGV4w6llcyBkYW5zIHZvdHJlIGNvcGllIGRlIHRyYXZhaWwuXG4iCisiU2kgY2VzIG1vZGlmaWNhdGlvbnMgZGV2YWllbnQgw6p0cmUgYWpvdXTDqWVzXG4iCisiZGFucyBsZSBjb21taXQgcHLDqWPDqWRlbnQsIGxhbmNlesKgOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiU2kgZWxsZXMgZGV2YWllbnQgYWxsZXIgZGFucyB1biBub3V2ZWF1IGNvbW1pdCwgbGFuY2V6wqA6XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiRGFucyBsZXMgZGV1eCBjYXMsIHVuZSBmb2lzIGZpbmksIGNvbnRpbnVleiBhdmVjwqA6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgzNAorbXNnaWQgIkVycm9yIHRyeWluZyB0byBmaW5kIHRoZSBhdXRob3IgaWRlbnRpdHkgdG8gYW1lbmQgY29tbWl0IgorbXNnc3RyICIiCisiRXJyZXVyIGxvcnMgZGUgbGEgcmVjaGVyY2hlIGRlIGwnaWRlbnRpdMOpIGRlIGwnYXV0ZXVyIHBvdXIgY29ycmlnZXIgbGUgY29tbWl0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM5Cittc2dpZCAiIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJWb3VzIGF2ZXogZGVzIG1vZGlmaWNhdGlvbnMgbm9uIHZhbGlkw6llcyBkYW5zIHZvdHJlIGNvcGllIGRlIHRyYXZhaWwuXG4iCisiVmV1aWxsZXogbGVzIHZhbGlkZXIgZCdhYm9yZCwgcHVpcyByZWxhbmNlciAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0OAorbXNnaWQgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHZhbGlkZXIgbGVzIG1vZGlmaWNhdGlvbnMgaW5kZXjDqWVzLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg3OSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTY1Cittc2dpZCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxhbmNlciBsJ8OpZGl0ZXVyIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2V4dHJhaXJlICRzd2l0Y2hfdG8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDcKK21zZ2lkICJObyBIRUFEPyIKK21zZ3N0ciAiUGFzIGRlIEhFQUTCoD8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICRzdGF0ZV9kaXIiCittc2dzdHIgIkltcG9zc2libGUgZGUgY3LDqWVyIHVuIHLDqXBlcnRvaXJlIHRlbXBvcmFpcmUgJHN0YXRlX2RpciIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkxMQorbXNnaWQgIkNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIG1hcnF1ZXIgY29tbWUgaW50ZXJhY3RpZiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0MworIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmRzKSIKK21zZ3N0clswXSAiUmViYXNhZ2UgZGUgJHNob3J0cmV2aXNpb25zIHN1ciAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmRlKSIKK21zZ3N0clsxXSAiUmViYXNhZ2UgZGUgJHNob3J0cmV2aXNpb25zIHN1ciAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmRlcykiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NTUKK21zZ2lkICJOb3RlIHRoYXQgZW1wdHkgY29tbWl0cyBhcmUgY29tbWVudGVkIG91dCIKK21zZ3N0ciAiVmV1aWxsZXogbm90ZXIgcXVlIGxlcyBjb21taXRzIHZpZGVzIHNvbnQgZW4gY29tbWVudGFpcmUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5OTcgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEwMDIKK21zZ2lkICJDb3VsZCBub3QgaW5pdCByZXdyaXR0ZW4gY29tbWl0cyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2luaXRpYWxpc2VyIGxlcyBjb21taXRzIHLDqcOpY3JpdHMiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDo4OSBnaXQtc2gtc2V0dXAuc2g6OTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVzYWdlOiAkZGFzaGxlc3MgJFVTQUdFIgorbXNnc3RyICJ1c2FnZcKgOiAkZGFzaGxlc3MgJFVTQUdFIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgY2hkaXIgdG8gJGNkdXAsIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSBzZSBwbGFjZXIgZGFucyBsZSByw6lwZXJ0b2lyZSAkY2R1cCwgbGEgcmFjaW5lIGRlIGxhIGNvcGllIGRlICIKKyJ0cmF2YWlsIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjAwIGdpdC1zaC1zZXR1cC5zaDoyMDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiAkcHJvZ3JhbV9uYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICJmYXRhbMKgOiAkcHJvZ3JhbV9uYW1lIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIHNhbnMgY29waWUgZGUgdHJhdmFpbC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSByZWJhc2VywqA6IHZvdXMgYXZleiBkZXMgbW9kaWZpY2F0aW9ucyBub24gaW5kZXjDqWVzLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNAorbXNnaWQgIkNhbm5vdCByZXdyaXRlIGJyYW5jaGVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZGUgcsOpw6ljcmlyZSBsZXMgYnJhbmNoZXPCoDogdm91cyBhdmV6IGRlcyBtb2RpZmljYXRpb25zIG5vbiAiCisiaW5kZXjDqWVzLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNworbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgdGlyZXIgYXZlYyByZWJhc2FnZS4gVm91cyBhdmV6IGRlcyBtb2RpZmljYXRpb25zIG5vbiBpbmRleMOpZXMuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiRhY3Rpb24gZXN0IGltcG9zc2libGXCoDogdm91cyBhdmV6IGRlcyBtb2RpZmljYXRpb25zIG5vbiBpbmRleMOpZXMuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQzCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZGUgcmViYXNlcsKgOiB2b3RyZSBpbmRleCBjb250aWVudCBkZXMgbW9kaWZpY2F0aW9ucyBub24gdmFsaWTDqWVzLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0NgorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSB0aXJlciBhdmVjIHJlYmFzYWdlwqA6IHZvdHJlIGluZGV4IGNvbnRpZW50IGRlcyBtb2RpZmljYXRpb25zICIKKyJub24gdmFsaWTDqWVzLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICRhY3Rpb246IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyIkYWN0aW9uIGVzdCBpbXBvc3NpYmxlwqA6IHZvdHJlIGluZGV4IGNvbnRpZW50IGRlcyBtb2RpZmljYXRpb25zIG5vbiB2YWxpZMOpZXMuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjUzCittc2dpZCAiQWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICJEZSBwbHVzLCB2b3RyZSBpbmRleCBjb250aWVudCBkZXMgbW9kaWZpY2F0aW9ucyBub24gdmFsaWTDqWVzLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3MworbXNnaWQgIllvdSBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIiIKKyJWb3VzIGRldmV6IGxhbmNlciBjZXR0ZSBjb21tYW5kZSBkZXB1aXMgbGEgcmFjaW5lIGRlIHZvdHJlIGNvcGllIGRlIHRyYXZhaWwuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6Mzc4Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIkltcG9zc2libGUgZGUgZMOpdGVybWluZXIgbGUgY2hlbWluIGFic29sdSBkdSByw6lwZXJ0b2lyZSBnaXQiCisKKyMuIFRSQU5TTEFUT1JTOiB5b3UgY2FuIGFkanVzdCB0aGlzIHRvIGFsaWduICJnaXQgYWRkIC1pIiBzdGF0dXMgbWVudQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJTEycyAlMTJzICVzIgorbXNnc3RyICIlMTJzICVzMTJzICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ0b3VjaGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidG91Y2hlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIlZCBjaGVtaW4gdG91Y2jDqVxuIgorbXNnc3RyWzFdICIlZCBjaGVtaW5zIHRvdWNow6lzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1MworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy4iCittc2dzdHIgIiIKKyJTaSBsZSBwYXRjaCBzJ2FwcGxpcXVlIHByb3ByZW1lbnQsIGxhIHNlY3Rpb24gw6lkaXTDqWUgc2VyYVxuIgorImltbcOpZGlhdGVtZW50IG1hcnF1w6llIGNvbW1lIGluZGV4w6llLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDU2Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFzaGluZy4iCittc2dzdHIgIiIKKyJTaSBsZSBwYXRjaCBzJ2FwcGxpcXVlIHByb3ByZW1lbnQsIGxhIHNlY3Rpb24gw6lkaXTDqWUgc2VyYVxuIgorImltbcOpZGlhdGVtZW50IG1hcnF1w6llIGNvbW1lIHJlbWlzw6llLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDU5Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciB1bnN0YWdpbmcuIgorbXNnc3RyICIiCisiU2kgbGUgcGF0Y2ggcydhcHBsaXF1ZSBwcm9wcmVtZW50LCBsYSBzZWN0aW9uIMOpZGl0w6llIHNlcmFcbiIKKyJpbW3DqWRpYXRlbWVudCBtYXJxdcOpZSBjb21tZSBkZXNpbmRleMOpZS4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzEKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgYXBwbHlpbmcuIgorbXNnc3RyICIiCisiU2kgbGUgcGF0Y2ggcydhcHBsaXF1ZSBwcm9wcmVtZW50LCBsYSBzZWN0aW9uIMOpZGl0w6llIHNlcmFcbiIKKyJpbW3DqWRpYXRlbWVudCBtYXJxdcOpZSBjb21tZSBhcHBsaXF1w6llLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc0Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBkaXNjYXJkaW5nLiIKK21zZ3N0ciAiIgorIlNpIGxlIHBhdGNoIHMnYXBwbGlxdWUgcHJvcHJlbWVudCwgbGEgc2VjdGlvbiDDqWRpdMOpZSBzZXJhXG4iCisiaW1tw6lkaWF0ZW1lbnQgbWFycXXDqWUgY29tbWUgw6lsaW1pbsOpZS4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgbGUgZmljaGllciBkJ8OpZGl0aW9uIGRlIHNlY3Rpb24gZW4gw6ljcml0dXJlwqA6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlcyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKyItLS1cbiIKKyJQb3VyIMOpbGltaW5lciBsZXMgbGlnbmVzICclcycsIHJlbmRlei1sZXMgJyAnIChjb250ZXh0ZSkuXG4iCisiUG91ciDDqWxpbWluZXIgbGVzIGxpZ25lcyAnJXMnLCBlZmZhY2V6LWxlcy5cbiIKKyJMZXMgbGlnbmVzIGNvbW1lbsOnYW50IHBhciAlcyBzZXJvbnQgw6lsaW1pbsOpZXMuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTE0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3IgcmVhZGluZzogJXMiCittc2dzdHIgIsOpY2hlYyBkZSBsJ291dmVydHVyZSBkdSBmaWNoaWVyIGQnw6lkaXRpb24gZGUgc2VjdGlvbiBlbiBsZWN0dXJlwqA6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNDgKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gaW5kZXhlciBjZXR0ZSBzZWN0aW9uXG4iCisibiAtIG5lIHBhcyBpbmRleGVyIGNldHRlIHNlY3Rpb25cbiIKKyJxIC0gcXVpdHRlcsKgOyBuZSBwYXMgaW5kZXhlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBhdXRyZXMgcmVzdGFudGVzXG4iCisiYSAtIGluZGV4ZXIgY2V0dGUgc2VjdGlvbiBldCB0b3V0ZXMgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyXG4iCisiZCAtIG5lIHBhcyBpbmRleGVyIGNldHRlIHNlY3Rpb24gbmkgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNTQKK21zZ2lkICIiCisieSAtIHN0YXNoIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFzaCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gcmVtaXNlciBjZXR0ZSBzZWN0aW9uXG4iCisibiAtIG5lIHBhcyByZW1pc2VyIGNldHRlIHNlY3Rpb25cbiIKKyJxIC0gcXVpdHRlcsKgOyBuZSBwYXMgcmVtaXNlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBhdXRyZXMgcmVzdGFudGVzXG4iCisiYSAtIHJlbWlzZXIgY2V0dGUgc2VjdGlvbiBldCB0b3V0ZXMgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyXG4iCisiZCAtIG5lIHBhcyByZW1pc2VyIGNldHRlIHNlY3Rpb24gbmkgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNjAKK21zZ2lkICIiCisieSAtIHVuc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSB1bnN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGTDqXNpbmRleGVyIGNldHRlIHNlY3Rpb25cbiIKKyJuIC0gbmUgcGFzIGTDqXNpbmRleGVyIGNldHRlIHNlY3Rpb25cbiIKKyJxIC0gcXVpdHRlcsKgOyBuZSBwYXMgZMOpc2luZGV4ZXIgY2V0dGUgc2VjdGlvbiBuaSBsZXMgYXV0cmVzIHJlc3RhbnRlc1xuIgorImEgLSBkw6lzaW5kZXhlciBjZXR0ZSBzZWN0aW9uIGV0IHRvdXRlcyBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXJcbiIKKyJkIC0gbmUgcGFzIGTDqXNpbmRleGVyIGNldHRlIHNlY3Rpb24gbmkgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNjYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYXBwbGlxdWVyIGNldHRlIHNlY3Rpb25cbiIKKyJuIC0gbmUgcGFzIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uXG4iCisicSAtIHF1aXR0ZXLCoDsgbmUgcGFzIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBhdXRyZXMgcmVzdGFudGVzXG4iCisiYSAtIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uIGV0IHRvdXRlcyBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXJcbiIKKyJkIC0gbmUgcGFzIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllciIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5MAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIHN1cHByaW1lciBjZXR0ZSBzZWN0aW9uXG4iCisibiAtIG5lIHBhcyBzdXBwcmltZXIgY2V0dGUgc2VjdGlvblxuIgorInEgLSBxdWl0dGVywqA7IG5lIHBhcyBzdXBwcmltZXIgY2V0dGUgc2VjdGlvbiBuaSBsZXMgYXV0cmVzIHJlc3RhbnRlc1xuIgorImEgLSBzdXBwcmltZXIgY2V0dGUgc2VjdGlvbiBldCB0b3V0ZXMgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyXG4iCisiZCAtIG5lIHBhcyBzdXBwcmltZXIgY2V0dGUgc2VjdGlvbiBuaSBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3OAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gw6lsaW1pbmVyIGNldHRlIHNlY3Rpb24gZGUgbCdpbmRleCBldCBkZSBsJ2FyYnJlIGRlIHRyYXZhaWxcbiIKKyJuIC0gbmUgcGFzIMOpbGltaW5lciBjZXR0ZSBzZWN0aW9uXG4iCisicSAtIHF1aXR0ZXLCoDsgbmUgcGFzIMOpbGltaW5lciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBhdXRyZXMgcmVzdGFudGVzXG4iCisiYSAtIMOpbGltaW5lciBjZXR0ZSBzZWN0aW9uIGV0IHRvdXRlcyBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXJcbiIKKyJkIC0gbmUgcGFzIMOpbGltaW5lciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllciIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjg0Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYXBwbGlxdWVyIGNldHRlIHNlY3Rpb24gw6AgbCdpbmRleCBldCDDoCBsJ2FyYnJlIGRlIHRyYXZhaWxcbiIKKyJuIC0gbmUgcGFzIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uXG4iCisicSAtIHF1aXR0ZXLCoDsgbmUgcGFzIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBhdXRyZXMgcmVzdGFudGVzXG4iCisiYSAtIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uIGV0IHRvdXRlcyBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXJcbiIKKyJkIC0gbmUgcGFzIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllciIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjk2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGFwcGxpcXVlciBjZXR0ZSBzZWN0aW9uIMOgIGwnYXJicmUgZGUgdHJhdmFpbFxuIgorIm4gLSBuZSBwYXMgYXBwbGlxdWVyIGNldHRlIHNlY3Rpb25cbiIKKyJxIC0gcXVpdHRlcsKgOyBuZSBwYXMgYXBwbGlxdWVyIGNldHRlIHNlY3Rpb24gbmkgbGVzIGF1dHJlcyByZXN0YW50ZXNcbiIKKyJhIC0gYXBwbGlxdWVyIGNldHRlIHNlY3Rpb24gZXQgdG91dGVzIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllclxuIgorImQgLSBuZSBwYXMgYXBwbGlxdWVyIGNldHRlIHNlY3Rpb24gbmkgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMTEKK21zZ2lkICIiCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJnIC0gc2VsZWN0aW9ubmVyIHVuZSBzZWN0aW9uIGV0IHMneSByZW5kcmVcbiIKKyIvIC0gcmVjaGVyY2hlciB1bmUgc2VjdGlvbiBjb3JyZXNwb25kYW50IMOgIHVuZSByZWdleCBkb25uw6llXG4iCisiaiAtIGxhaXNzZXIgY2V0dGUgc2VjdGlvbiBub24gZMOpY2lkw6llIGV0IGFsbGVyIMOgIGxhIHN1aXZhbnRlIG5vbi1kw6ljaWTDqWVcbiIKKyJKIC0gbGFpc3NlciBjZXR0ZSBzZWN0aW9uIG5vbiBkw6ljaWTDqWUgZXQgYWxsZXIgw6AgbGEgc3VpdmFudGVcbiIKKyJrIC0gbGFpc3NlciBjZXR0ZSBzZWN0aW9uIG5vbiBkw6ljaWTDqWUgZXQgYWxsZXIgw6AgbGEgcHLDqWPDqWRlbnRlIG5vbi1kw6ljaWTDqWVcbiIKKyJLIC0gbGFpc3NlciBjZXR0ZSBzZWN0aW9uIG5vbiBkw6ljaWTDqWUgZXQgYWxsZXIgw6AgbGEgcHLDqWPDqWRlbnRlXG4iCisicyAtIGTDqWNvdXBlciBsYSBzZWN0aW9uIGVuIHNlY3Rpb25zIHBsdXMgcGV0aXRlc1xuIgorImUgLSDDqWRpdGVyIG1hbnVlbGxlbWVudCBsYSBzZWN0aW9uIGFjdHVlbGxlXG4iCisiPyAtIGFmZmljaGVyIGwnYWlkZVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDIKK21zZ2lkICJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCFcbiIKK21zZ3N0ciAiTGVzIHNlY3Rpb25zIHPDqWxlY3Rpb25uw6llcyBuZSBzJ2FwcGxpcXVlIHBhcyDDoCBsJ2luZGV4wqAhXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXNcbiIKK21zZ3N0ciAiZmljaGllciBub24tZnVzaW9ubsOpIGlnbm9yw6nCoDogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisiQXBwbGlxdWVyIGxlIGNoYW5nZW1lbnQgZGUgbW9kZSBkYW5zIGwnYXJicmUgZGUgdHJhdmFpbCBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwcGxpcXVlciBsYSBzdXBwcmVzc2lvbiBkYW5zIGwnYXJicmUgZGUgdHJhdmFpbCBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcHBsaXF1ZXIgbGEgc2VjdGlvbiDDoCBsJ2FyYnJlIGRlIHRyYXZhaWwgW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTcwCittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290b1xuIgorbXNnc3RyICJBdWN1bmUgYXV0cmUgc2VjdGlvbiDDoCBhdHRlaW5kcmVcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTg4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnXG4iCittc2dzdHIgIk5vbWJyZSBpbnZhbGlkZSA6ICclcydcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTkzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLlxuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuXG4iCittc2dzdHJbMF0gIkTDqXNvbMOpLCAlZCBzZXVsZSBzZWN0aW9uIGRpc3BvbmlibGUuXG4iCittc2dzdHJbMV0gIkTDqXNvbMOpLCBTZXVsZW1lbnQgJWQgc2VjdGlvbnMgZGlzcG9uaWJsZXMuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYxOQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaFxuIgorbXNnc3RyICJhdWN1bmUgYXV0cmUgc2VjdGlvbiDDoCByZWNoZXJjaGVyXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYzNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAlczogJXNcbiIKK21zZ3N0ciAiUmVnZXggZGUgcmVjaGVyY2hlIG1hbGZvcm3DqWUgJXPCoDogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjQ2Cittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iCittc2dzdHIgIkF1Y3VuZSBzZWN0aW9uIG5lIGNvcnJlc3BvbmQgYXUgbW90aWYgZG9ubsOpXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY1OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODAKK21zZ2lkICJObyBwcmV2aW91cyBodW5rXG4iCittc2dzdHIgIlBhcyBkZSBzZWN0aW9uIHByw6ljw6lkZW50ZVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjg2Cittc2dpZCAiTm8gbmV4dCBodW5rXG4iCittc2dzdHIgIlBhcyBkZSBzZWN0aW9uIHN1aXZhbnRlXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5MgorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIkTDqXNvbMOpLCBpbXBvc3NpYmxlIGRlIGTDqWNvdXBlciBjZXR0ZSBzZWN0aW9uXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmsuXG4iCittc2dpZF9wbHVyYWwgIlNwbGl0IGludG8gJWQgaHVua3MuXG4iCittc2dzdHJbMF0gIkTDqWNvdXDDqWUgZW4gJWQgc2VjdGlvbi5cbiIKK21zZ3N0clsxXSAiRMOpY291cMOpZSBlbiAlZCBzZWN0aW9ucy5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzA4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICJEw6lzb2zDqSwgaW1wb3NzaWJsZSBkJ8OpZGl0ZXIgY2V0dGUgc2VjdGlvblxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGRvIG5vdCB0cmFuc2xhdGUgdGhlIGNvbW1hbmQgbmFtZXMKKyMuICdzdGF0dXMnLCAndXBkYXRlJywgJ3JldmVydCcsIGV0Yy4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc3MworbXNnaWQgIiIKKyJzdGF0dXMgICAgICAgIC0gc2hvdyBwYXRocyB3aXRoIGNoYW5nZXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzXG4iCisicmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uXG4iCisicGF0Y2ggICAgICAgICAtIHBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseVxuIgorImRpZmYgICAgICAgICAgLSB2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleFxuIgorImFkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mICIKKyJjaGFuZ2VzXG4iCittc2dzdHIgIiIKKyJzdGF0dXMgICAgICAgIC0gbW9udHJlciBsZXMgY2hlbWlucyBtb2RpZmnDqXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWpvdXRlciBsJ8OpdGF0IGRlIGwnYXJicmUgZGUgdHJhdmFpbCBhdXggbW9kaWZpY2F0aW9ucyDDoCAiCisiaW5kZXhlclxuIgorInJldmVydCAgICAgICAgLSBmYWlyZSByZXZlbmlyIGxlcyBtb2RpZmljYXRpb25zIMOgIGluZGV4ZXIgw6AgbGEgdmVyc2lvbiBIRUFEXG4iCisicGF0Y2ggICAgICAgICAtIHPDqWxlY3Rpb25uZXIgbGVzIHNlY3Rpb25zIGV0IG1ldHRyZSDDoCBqb3VyIHPDqWxlY3RpdmVtZW50XG4iCisiZGlmZiAgICAgICAgICAtIHZpc3VhbGlzZXIgbGVzIGRpZmYgZW50cmUgSEVBRCBldCBsJ2luZGV4XG4iCisiYWRkIHVudHJhY2tlZCAtIGFqb3V0ZXIgbGVzIGZpY2hpZXJzIG5vbi1zdWl2aXMgYXV4IG1vZGlmaWNhdGlvbnMgw6AgaW5kZXhlclxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODI1Cittc2dpZCAibWlzc2luZyAtLSIKK21zZ3N0ciAiLS0gbWFucXVhbnQiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC0tcGF0Y2ggbW9kZTogJXMiCittc2dzdHIgIm1vZGUgZGUgLS1wYXRjaCBpbmNvbm51wqA6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMsIGV4cGVjdGluZyAtLSIKK21zZ3N0ciAiYXJndW1lbnQgaW52YWxpZGUgJXMsIC0tIGF0dGVuZHUiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM4Cittc2dpZCAibG9jYWwgem9uZSBkaWZmZXJzIGZyb20gR01UIGJ5IGEgbm9uLW1pbnV0ZSBpbnRlcnZhbFxuIgorbXNnc3RyICIiCisibGEgem9uZSBsb2NhbGUgZGlmZsOocmUgZHUgR01UIHBhciB1biBpbnRlcnZhbGxlIHN1cMOpcmlldXIgw6AgdW5lIG1pbnV0ZVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MQorbXNnaWQgImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIgorbXNnc3RyICJsZSBkw6ljYWxhZ2UgZGUgdGVtcHMgbG9jYWwgZXN0IHBsdXMgZ3JhbmQgb3Ugw6lnYWwgw6AgMjQgaGV1cmVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjIzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MjI5Cittc2dpZCAidGhlIGVkaXRvciBleGl0ZWQgdW5jbGVhbmx5LCBhYm9ydGluZyBldmVyeXRoaW5nIgorbXNnc3RyICJsJ8OpZGl0ZXVyIGVzdCBzb3J0aSBlbiBlcnJldXIsIGFiYW5kb24gdG90YWwiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzEwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvbnRhaW5zIGFuIGludGVybWVkaWF0ZSB2ZXJzaW9uIG9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iCittc2dzdHIgIiIKKyInJXMnIGNvbnRpZW50IHVuZSB2ZXJzaW9uIGludGVybcOpZGlhaXJlIGR1IGNvdXJyaWVsIHF1ZSB2b3VzIGNvbXBvc2llei5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJyVzLmZpbmFsJyBjb250YWlucyB0aGUgY29tcG9zZWQgZW1haWwuXG4iCittc2dzdHIgIiclcy5maW5hbCcgY29udGllbnQgbGUgY291cnJpZWwgY29tcG9zw6kuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDA4Cittc2dpZCAiLS1kdW1wLWFsaWFzZXMgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgb3B0aW9uc1xuIgorbXNnc3RyICItLWR1bXAtYWxpYXNlcyBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgZCdhdXRyZXMgb3B0aW9uc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4MSBnaXQtc2VuZC1lbWFpbC5wZXJsOjY4MworbXNnaWQgIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iCittc2dzdHIgIkxhbmNlbWVudCBkZSBnaXQgZm9ybWF0LXBhdGNoIGltcG9zc2libGUgw6AgbCdleHTDqXJpZXVyIGQndW4gZMOpcMO0dFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4NAorbXNnaWQgIiIKKyJgYmF0Y2gtc2l6ZWAgYW5kIGByZWxvZ2luYCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciAodmlhIGNvbW1hbmQtbGluZSBvciAiCisiY29uZmlndXJhdGlvbiBvcHRpb24pXG4iCittc2dzdHIgIiIKKyJgYmF0Y2gtc2l6ZWAgZXQgYHJlbG9naW5gIGRvaXZlbnQgw6p0cmUgc3DDqWNpZmnDqXMgZW5zZW1ibGVzICh2aWEgbGEgbGlnbmUgZGUgIgorImNvbW1hbmRlIG91IGRlcyBvcHRpb25zIGRlIGNvbmZpZ3VyYXRpb24pXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1zdXBwcmVzcy1jYyBmaWVsZDogJyVzJ1xuIgorbXNnc3RyICJDaGFtcCBkZSAtLXN1cHByZXNzLWNjIGluY29ubnXCoDogJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tY29uZmlybSBzZXR0aW5nOiAnJXMnXG4iCittc2dzdHIgIlBhcmFtw6h0cmUgZGUgLS1jb25maXJtIGluY29ubnXCoDogJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU1NgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBhbGlhcyB3aXRoIHF1b3RlcyBpcyBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisiYXR0ZW50aW9uwqA6IGxlcyBndWlsbGVtZXRzIG5lIHNvbnQgcGFzIHN1cHBvcnTDqXMgZGFucyBhbGlhcyBzZW5kbWFpbMKgOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgOmluY2x1ZGU6YCBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICJhdHRlbnRpb27CoDogYDppbmNsdWRlOmAgbidlc3QgcGFzIHN1cHBvcnTDqcKgOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgL2ZpbGVgIG9yIGB8cGlwZWAgcmVkaXJlY3Rpb24gbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiIgorImF0dGVudGlvbsKgOiBsZXMgcmVkaXJlY3Rpb25zIGAvZmlsZWAgb3UgYHxwaXBlYCBuZSBzb250IHBhcyBzdXBwb3J0w6llc8KgOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBsaW5lIGlzIG5vdCByZWNvZ25pemVkOiAlc1xuIgorbXNnc3RyICJhdHRlbnRpb27CoDogbGlnbmUgc2VuZG1haWwgbm9uIHJlY29ubnVlwqA6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjQ5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlICclcycgZXhpc3RzIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIHRoZSByYW5nZSBvZiBjb21taXRzXG4iCisidG8gcHJvZHVjZSBwYXRjaGVzIGZvci4gIFBsZWFzZSBkaXNhbWJpZ3VhdGUgYnkuLi5cbiIKKyJcbiIKKyIgICAgKiBTYXlpbmcgXCIuLyVzXCIgaWYgeW91IG1lYW4gYSBmaWxlOyBvclxuIgorIiAgICAqIEdpdmluZyAtLWZvcm1hdC1wYXRjaCBvcHRpb24gaWYgeW91IG1lYW4gYSByYW5nZS5cbiIKK21zZ3N0ciAiIgorIkxlIGZpY2hpZXIgJyVzJyBleGlzdGUgbWFpcyBjZSBwb3VycmFpdCBhdXNzaSDDqnRyZSBsYSBwbGFnZSBkZSBjb21tbWl0c1xuIgorInBvdXIgbGVxdWVsIGxlcyBwYXRjaGVzIHNvbnQgw6AgcHJvZHVpcmUuIFZldWlsbGV6IHByw6ljaXNlci4uLlxuIgorIlxuIgorIiAgICAqIGVuIGluZGlxdWFudCBcIi4vJXNcIiBzaSB2b3VzIGTDqXNpZ25leiB1biBmaWNoaWVyLCBvdVxuIgorIiAgICAqIGVuIGZvdXJuaXNzYW50IGwnb3B0aW9uIC0tZm9ybWF0LXBhdGNoIHBvdXIgdW5lIHBsYWdlLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbmRpciAlczogJXMiCittc2dzdHIgIsOJY2hlYyDDoCBsJ291dmVydHVyZSBkdSByw6lwZXJ0b2lyZSAlc8KgOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2OTQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorImZhdGFsOiAlczogJXNcbiIKKyJ3YXJuaW5nOiBubyBwYXRjaGVzIHdlcmUgc2VudFxuIgorbXNnc3RyICIiCisiZmF0YWzCoDogJXPCoDogJXNcbiIKKyJhdHRlbnRpb27CoDogYXVjdW4gcGF0Y2ggZW52b3nDqVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcwNQorbXNnaWQgIiIKKyJcbiIKKyJObyBwYXRjaCBmaWxlcyBzcGVjaWZpZWQhXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBdWN1biBmaWNoaWVyIHBhdGNoIHNww6ljaWZpw6nCoCFcbiIKKyJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTm8gc3ViamVjdCBsaW5lIGluICVzPyIKK21zZ3N0ciAiTGlnbmUgZGUgc3VqZXQgbm9uIHRyb3V2w6llIGRhbnMgJXMgPyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gZm9yIHdyaXRpbmcgJXM6ICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnb3V2cmlyICVzIGVuIMOpY3JpdHVyZcKgOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MzkKK21zZ2lkICIiCisiTGluZXMgYmVnaW5uaW5nIGluIFwiR0lUOlwiIHdpbGwgYmUgcmVtb3ZlZC5cbiIKKyJDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50c1xuIgorImZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLlxuIgorIlxuIgorIkNsZWFyIHRoZSBib2R5IGNvbnRlbnQgaWYgeW91IGRvbid0IHdpc2ggdG8gc2VuZCBhIHN1bW1hcnkuXG4iCittc2dzdHIgIiIKKyJMZXMgbGlnbmVzIGNvbW1lbsOnYW50IHBhciBcIkdJVDpcIiBzZXJvbnQgc3VwcHJpbcOpZXMuXG4iCisiRW52aXNhZ2V6IGQnaW5jbHVyZSB1biBkaWZmc3RhdCBnbG9iYWwgb3UgdW5lIHRhYmxlIGRlcyBtYXRpw6hyZXNcbiIKKyJwb3VyIGxlIHBhdGNoIHF1ZSB2b3VzIMOqdGVzIGVuIHRyYWluIGQnw6ljcmlyZS5cbiIKKyJcbiIKKyJFZmZhY2V6IGxlIGNvcnBzIHNpIHZvdXMgbmUgc291aGFpdGV6IHBhcyBlbnZveWVyIHVuIHLDqXN1bcOpLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlczogJXMiCittc2dzdHIgIsOJY2hlYyDDoCBsJ291dmVydHVyZSBkZSAlc8KgOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3ODAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXMuZmluYWw6ICVzIgorbXNnc3RyICLDiWNoZWMgw6AgbCdvdXZlcnR1cmUgZGUgJXMuZmluYWzCoDogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODIzCittc2dpZCAiU3VtbWFyeSBlbWFpbCBpcyBlbXB0eSwgc2tpcHBpbmcgaXRcbiIKK21zZ3N0ciAiTGUgY291cnJpZWwgZGUgcsOpc3Vtw6kgw6l0YW50IHZpZGUsIGlsIGEgw6l0w6kgaWdub3LDqVxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgW3kvTl0gYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdXNlIDwlcz4gW3kvTl0/ICIKK21zZ3N0ciAiw4p0ZXMtdm91cyBzdXIgZGUgdm91bG9pciB1dGlsaXNlciA8JXM+IFt5L05dwqA/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTMKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgOGJpdCwgYnV0IGRvIG5vdCBkZWNsYXJlIGEgQ29udGVudC1UcmFuc2Zlci0iCisiRW5jb2RpbmcuXG4iCittc2dzdHIgIiIKKyJMZXMgZmljaGllcnMgc3VpdmFudHMgc29udCA4Yml0IG1haXMgbmUgZMOpY2xhcmVudCBwYXMgZGUgY2hhbXBzIENvbnRlbnQtIgorIlRyYW5zZmVyLUVuY29kaW5nLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxOAorbXNnaWQgIldoaWNoIDhiaXQgZW5jb2Rpbmcgc2hvdWxkIEkgZGVjbGFyZSBbVVRGLThdPyAiCittc2dzdHIgIlF1ZWwgZW5jb2RhZ2UgOGJpdCBkb2l0IMOqdHJlIGTDqWNsYXLDqSBbVVRGOF3CoD8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkyNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuIgorIlx0JXNcbiIKKyJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgIgorIndhbnQgdG8gc2VuZC5cbiIKK21zZ3N0ciAiIgorIkVudm9pIHJlZnVzw6kgcGFyY2UgcXVlIGxlIHBhdGNoXG4iCisiXHQlc1xuIgorImEgdW4gc3VqZXQgbW9kw6hsZSAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiBQYXNzZXogLS1mb3JjZSBpcyB2b3VzIHNvdWhhaXRleiAiCisidnJhaW1lbnQgZW52b3llci5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NDUKK21zZ2lkICJUbyB3aG9tIHNob3VsZCB0aGUgZW1haWxzIGJlIHNlbnQgKGlmIGFueW9uZSk/IgorbXNnc3RyICLDgCBxdWkgbGVzIGNvdXJyaWVscyBkb2l2ZW50LWlscyDDqnRyZSBlbnZvecOpcyAocydpbCB5IGVuIGEpwqA/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYXRhbDogYWxpYXMgJyVzJyBleHBhbmRzIHRvIGl0c2VsZlxuIgorbXNnc3RyICJmYXRhbMKgOiBsJ2FsaWFzICclcycgc2UgZMOpdmVsb3BwZSBlbiBsdWktbcOqbWVcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NzUKK21zZ2lkICJNZXNzYWdlLUlEIHRvIGJlIHVzZWQgYXMgSW4tUmVwbHktVG8gZm9yIHRoZSBmaXJzdCBlbWFpbCAoaWYgYW55KT8gIgorbXNnc3RyICIiCisiTWVzc2FnZS1JRCDDoCB1dGlsaXNlciBjb21tZSBJbi1SZXBseS1UbyBwb3VyIGxlIHByZW1pZXIgY291cnJpZWwgKHMnaWwgeSBlbiAiCisiYSnCoD8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwMzMgZ2l0LXNlbmQtZW1haWwucGVybDoxMDQxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmFibGUgdG8gZXh0cmFjdCBhIHZhbGlkIGFkZHJlc3MgZnJvbTogJXNcbiIKK21zZ3N0ciAiZXJyZXVywqA6IGltcG9zc2libGUgZCdleHRyYWlyZSB1bmUgYWRyZXNzZSB2YWxpZGUgZGVwdWlzwqA6ICVzXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbcV0gW2RdIFtlXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDQ1Cittc2dpZCAiV2hhdCB0byBkbyB3aXRoIHRoaXMgYWRkcmVzcz8gKFtxXXVpdHxbZF1yb3B8W2VdZGl0KTogIgorbXNnc3RyICJRdWUgZmFpcmUgZGUgY2V0dGUgYWRyZXNzZSA/IChbcV11aXR0ZXJ8W2Rdw6lsYWlzc2VyfFtlXWRpdGVyKTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzNjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQ0EgcGF0aCBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImxlIGNoZW1pbiB2ZXJzIGxhIENBIFwiJXNcIiBuJ2V4aXN0ZSBwYXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ0NQorbXNnaWQgIiIKKyIgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbFxuIgorIiAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0XG4iCisiICAgIHNlbmQtZW1haWwgcHJvbXB0cyBiZWZvcmUgc2VuZGluZyB3aGVuZXZlciB0aGlzIG9jY3Vycy5cbiIKKyIgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybVxuIgorIiAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4iCisiXG4iCisiICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLFxuIgorIiAgICBydW4gJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCittc2dzdHIgIiIKKyIgICBMYSBsaXN0ZSBDQyBjaS1kZXNzdXMgYSDDqXTDqSDDqXRlbmR1ZSBhdmVjIGRlcyBhZHJlc3Nlc1xuIgorIiAgIHN1cHBsw6ltZW50YWlyZXMgdHJvdXbDqWVzIGRhbnMgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uLlxuIgorIiAgIFBhciBkw6lmYXV0IGRhbnMgY2UgY2FzLCBzZW5kLWVtYWlsIGRlbWFuZGUgY29uZmlybWF0aW9uIGF2YW50IGVudm9pLlxuIgorIiAgIENlIGNvbXBvcnRlbWVudCBlc3QgZ8OpcsOpIHBhciBsZSBwYXJhbcOodHJlIGRlIGNvbmZpZ3VyYXRpb25cbiIKKyIgICBzZW5kZW1haWwuY29uZmlybS5cbiIKKyJcbiIKKyIgICBQb3VyIHRvdXQgaW5mb3JtYXRpb24gY29tcGzDqW1lbnRhaXJlLCBsYW5jZXogJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgUG91ciBjb25zZXJ2ZXIgbGUgY29tcG9ydGVtZW50IGFjdHVlbCwgbWFpcyDDqWxpbWluZXIgY2UgbWVzc2FnZSxcbiIKKyIgICBsYW5jZXogJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0gW25dIFtlXSBbcV0gW2FdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjAKK21zZ2lkICJTZW5kIHRoaXMgZW1haWw/IChbeV1lc3xbbl1vfFtlXWRpdHxbcV11aXR8W2FdbGwpOiAiCittc2dzdHIgIkVudm95ZXIgY2UgY291cnJpZWzCoD8gKFt5XWVzfFtuXW98W2VdZGl0fFtxXXVpdHxbYV1sbCnCoDogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjMKK21zZ2lkICJTZW5kIHRoaXMgZW1haWwgcmVwbHkgcmVxdWlyZWQiCittc2dzdHIgIlVuZSByw6lwb25zZSBlc3QgbsOpY2Vzc2FpcmUiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ5MQorbXNnaWQgIlRoZSByZXF1aXJlZCBTTVRQIHNlcnZlciBpcyBub3QgcHJvcGVybHkgZGVmaW5lZC4iCittc2dzdHIgIkxlIHNlcnZldXIgU01UUCBuw6ljZXNzYWlyZSBuJ2VzdCBwYXMgZMOpZmluaSBjb3JyZWN0ZW1lbnQuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1RBUlRUTFMhICVzIgorbXNnc3RyICJMZSBzZXJ2ZXVyIG5lIHN1cHBvcnRlIHBhcyBTVEFSVFRMU8KgISAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTQzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTVEFSVFRMUyBmYWlsZWQhICVzIgorbXNnc3RyICLDqWNoZWMgZGUgU1RBUlRUTFPCoCEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU1NgorbXNnaWQgIlVuYWJsZSB0byBpbml0aWFsaXplIFNNVFAgcHJvcGVybHkuIENoZWNrIGNvbmZpZyBhbmQgdXNlIC0tc210cC1kZWJ1Zy4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGQnaW5pdGlhbGlzZXIgU01UUC4gVsOpcmlmaWV6IGxhIGNvbmZpZ3VyYXRpb24gZXQgdXRpbGlzZXogLS1zbXRwLSIKKyJkZWJ1Zy4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gc2VuZCAlc1xuIgorbXNnc3RyICLDqWNoZWMgZGUgbCdlbnZvaSBkZSAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRHJ5LVNlbnQgJXNcbiIKK21zZ3N0ciAiRW52b2kgc2ltdWzDqSBkZSAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VudCAlc1xuIgorbXNnc3RyICIlcyBlbnZvecOpXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIkRyeS1PSy4gTG9nIHNheXM6XG4iCittc2dzdHIgIlNpbXVsYXRpb24gT0suIExlIGpvdXJuYWwgaW5kaXF1ZcKgOlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJPSy4gTG9nIHNheXM6XG4iCittc2dzdHIgIk9LLiBMZSBqb3VybmFsIGluZGlxdWXCoDpcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTkxCittc2dpZCAiUmVzdWx0OiAiCittc2dzdHIgIlLDqXN1bHRhdMKgOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU5NAorbXNnaWQgIlJlc3VsdDogT0tcbiIKK21zZ3N0ciAiUsOpc3VsdGF0wqA6IE9LXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTYxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIGZpbGUgJXMiCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgbGUgZmljaGllciAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjU5IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY3OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgQWpvdXQgZGUgY2M6ICVzIGRlcHVpcyBsYSBsaWduZSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgQWpvdXQgZGUgdG86ICVzIGRlcHVpcyBsYSBsaWduZSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobm9uLW1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG5vbi1tYm94KSBBam91dCBkZSBjYzogJXMgZGVwdWlzIGxhIGxpZ25lICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihib2R5KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihjb3JwcykgQWpvdXQgZGUgY2M6ICVzIGRlcHVpcyBsYSBsaWduZSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg2NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIENvdWxkIG5vdCBleGVjdXRlICclcyciCittc2dzdHIgIiglcykgSW1wb3NzaWJsZSBkJ2V4w6ljdXRlciAnJXMnIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIKK21zZ3N0ciAiKCVzKSBBam91dCBkZSAlc8KgOiAlcyBkZXB1aXPCoDogJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBmYWlsZWQgdG8gY2xvc2UgcGlwZSB0byAnJXMnIgorbXNnc3RyICIoJXMpIMOpY2hlYyBkZSBsYSBmZXJtZXR1cmUgZHUgcGlwZSB2ZXJzICclcyciCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkwNQorbXNnaWQgImNhbm5vdCBzZW5kIG1lc3NhZ2UgYXMgN2JpdCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2Vudm95ZXIgdW4gbWVzc2FnZSBjb21tZSA3Yml0IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MTMKK21zZ2lkICJpbnZhbGlkIHRyYW5zZmVyIGVuY29kaW5nIgorbXNnc3RyICJjb2RhZ2UgZGUgdHJhbnNmZXJ0IGludmFsaWRlIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NTQgZ2l0LXNlbmQtZW1haWwucGVybDoyMDA2IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjAxNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciAlc8KgOiVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlc8KgOiBsZSBwYXRjaCBjb250aWVudCB1bmUgbGlnbmUgcGx1cyBsb25ndWUgcXVlIDk5OCBjYXJhY3TDqHJlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nICVzIHdpdGggYmFja3VwIHN1ZmZpeCAnJXMnLlxuIgorbXNnc3RyICIlcyBzYXV0w6kgYXZlYyB1biBzdWZmaXggZGUgc2F1dmVnYXJkZSAnJXMnLlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk3OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAlcz8gW3l8Tl06ICIKK21zZ3N0ciAiU291aGFpdGV6LXZvdXMgcsOpZWxsZW1lbnQgZW52b3llciAlc8KgP1t5fE5dwqA6ICIKZGlmZiAtLWdpdCBhL3BvL2dpdC5wb3QgYi9wby9naXQucG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZDJlMmIKLS0tIC9kZXYvbnVsbAorKysgYi9wby9naXQucG90CkBAIC0wLDAgKzEsMjI5MzIgQEAKKyMgU09NRSBERVNDUklQVElWRSBUSVRMRS4KKyMgQ29weXJpZ2h0IChDKSBZRUFSIFRIRSBQQUNLQUdFJ1MgQ09QWVJJR0hUIEhPTERFUgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgUEFDS0FHRSBwYWNrYWdlLgorIyBGSVJTVCBBVVRIT1IgPEVNQUlMQEFERFJFU1M+LCBZRUFSLgorIworIywgZnV6enkKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IFBBQ0tBR0UgVkVSU0lPTlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDIwLTAzLTExIDE1OjI2KzA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiBZRUFSLU1PLURBIEhPOk1JK1pPTkVcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEZVTEwgTkFNRSA8RU1BSUxAQUREUkVTUz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPlxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1DSEFSU0VUXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9SU5URUdFUjsgcGx1cmFsPUVYUFJFU1NJT047XG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT8iCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NTIxIGFkZC1pbnRlcmFjdGl2ZS5jOjgyMiBzZXF1ZW5jZXIuYzozMTI0CisjOiBzZXF1ZW5jZXIuYzozNTYyIGJ1aWx0aW4vcmViYXNlLmM6ODc1IGJ1aWx0aW4vcmViYXNlLmM6MTY4NworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDg2IGJ1aWx0aW4vcmViYXNlLmM6MjEzMAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjU3NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI2OQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyOTQKK21zZ2lkICJiaW5hcnkiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjM0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjc4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMzMgorbXNnaWQgIm5vdGhpbmciCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzE0CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMyOQorbXNnaWQgInVuY2hhbmdlZCIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NzIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NDMKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6Njg5IGFkZC1pbnRlcmFjdGl2ZS5jOjg3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhZ2UgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTUgYWRkLWludGVyYWN0aXZlLmM6ODg0IHNlcXVlbmNlci5jOjMzMTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODk5Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY5OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyOAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAidXBkYXRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInVwZGF0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcxNiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY3OAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAibm90ZTogJXMgaXMgdW50cmFja2VkIG5vdy5cbiIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3MjEgYXBwbHkuYzo0MTEwIGJ1aWx0aW4vY2hlY2tvdXQuYzoyODEKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NTUKK21zZ2lkICJSZXZlcnQiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzY3Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIEhFQURee3RyZWV9IgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjgwNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzMQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAicmV2ZXJ0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJyZXZlcnRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODU2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVudHJhY2tlZCBmaWxlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4NjAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2ODkKK21zZ2lkICJBZGQgdW50cmFja2VkIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg4NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyNQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiYWRkZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJhZGRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MjkgYWRkLXBhdGNoLmM6MTY3NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MzEgYWRkLXBhdGNoLmM6MTY3MyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY2hhbmdlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzc2Cittc2dpZCAiUGF0Y2ggdXBkYXRlIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk3NCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NTQKK21zZ2lkICJSZXZpZXcgZGlmZiIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDAyCittc2dpZCAic2hvdyBwYXRocyB3aXRoIGNoYW5nZXMiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNAorbXNnaWQgImFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA2Cittc2dpZCAicmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwOAorbXNnaWQgInBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseSIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEwCittc2dpZCAidmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAxMgorbXNnaWQgImFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDIwIGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjkKK21zZ2lkICJQcm9tcHQgaGVscDoiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAyMgorbXNnaWQgInNlbGVjdCBhIHNpbmdsZSBpdGVtIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMjQKK21zZ2lkICJzZWxlY3QgYSByYW5nZSBvZiBpdGVtcyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI2Cittc2dpZCAic2VsZWN0IG11bHRpcGxlIHJhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI4IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNzMKK21zZ2lkICJzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4IgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMzAKK21zZ2lkICJ1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXMiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAzMgorbXNnaWQgImNob29zZSBhbGwgaXRlbXMiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAzNAorbXNnaWQgIihlbXB0eSkgZmluaXNoIHNlbGVjdGluZyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDcxCittc2dpZCAic2VsZWN0IGEgbnVtYmVyZWQgaXRlbSIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDc1Cittc2dpZCAiKGVtcHR5KSBzZWxlY3Qgbm90aGluZyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDgzIGJ1aWx0aW4vY2xlYW4uYzo4MjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODUxCittc2dpZCAiKioqIENvbW1hbmRzICoqKiIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDg0IGJ1aWx0aW4vY2xlYW4uYzo4MjMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODQ4Cittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTEzNiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInN0YWdlZCIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAidW5zdGFnZWQiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTEzNiBhcHBseS5jOjQ5NjcgYXBwbHkuYzo0OTcwIGJ1aWx0aW4vYW0uYzoyMjUxCisjOiBidWlsdGluL2FtLmM6MjI1NCBidWlsdGluL2Nsb25lLmM6MTIzIGJ1aWx0aW4vZmV0Y2guYzoxNDQKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzQgYnVpbHRpbi9wdWxsLmM6MTg5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MDkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk3CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwMiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwNQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJwYXRoIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExNDMKK21zZ2lkICJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTU3IGJ1aWx0aW4vY2xlYW4uYzo3ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJ5ZS5cbiIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzozMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjM0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMwCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MzcKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisic3RhZ2luZy4iCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6NDAKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzo1NCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjU1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6NTYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6NTgKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisic3Rhc2hpbmcuIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjYxCittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6NzcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjc4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzOQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzo3OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDAKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjgxCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorInVuc3RhZ2luZy4iCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6ODQKK21zZ2lkICIiCisieSAtIHVuc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSB1bnN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6OTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQzCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMDAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMDEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTAzIGFkZC1wYXRjaC5jOjE2OCBhZGQtcGF0Y2guYzoyMTEKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisiYXBwbHlpbmcuIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjEwNgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjEyMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MworIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjEyMiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDkKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjEyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMjUgYWRkLXBhdGNoLmM6MTQ3IGFkZC1wYXRjaC5jOjE5MAorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJkaXNjYXJkaW5nLiIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMjggYWRkLXBhdGNoLmM6MTkzCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxNDMgYWRkLXBhdGNoLmM6MTg2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1MworIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxNDQgYWRkLXBhdGNoLmM6MTg3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxNDUgYWRkLXBhdGNoLmM6MTg4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTUwCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjE2NCBhZGQtcGF0Y2guYzoyMDcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTY1IGFkZC1wYXRjaC5jOjIwOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTkKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxNjYgYWRkLXBhdGNoLmM6MjA5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxNzEKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjIxNAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjMzNyBhZGQtcGF0Y2guYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgaHVuayBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjM5NQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBkaWZmIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjQxNAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGRpZmYiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzo1ODcKK21zZ2lkICJtaXNtYXRjaGVkIG91dHB1dCBmcm9tIGludGVyYWN0aXZlLmRpZmZGaWx0ZXIiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6NTg4Cittc2dpZCAiIgorIllvdXIgZmlsdGVyIG11c3QgbWFpbnRhaW4gYSBvbmUtdG8tb25lIGNvcnJlc3BvbmRlbmNlXG4iCisiYmV0d2VlbiBpdHMgaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4iCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6NzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBjb250ZXh0IGxpbmUgIyVkIGluXG4iCisiJS4qcyIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImh1bmtzIGRvIG5vdCBvdmVybGFwOlxuIgorIiUuKnNcbiIKKyJcdGRvZXMgbm90IGVuZCB3aXRoOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTA1MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTIKK21zZ2lkICJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgYSBxdWljayBndWlkZS5cbiIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclYycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJWMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAnaXQnIHJlZmVycyB0byB0aGUgcGF0Y2ggbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBtZXNzYWdlcy4KKyM6IGFkZC1wYXRjaC5jOjEwNzAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTI2Cittc2dpZCAiIgorIklmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlIGdpdmVuIGFuIG9wcG9ydHVuaXR5IHRvXG4iCisiZWRpdCBhZ2Fpbi4gIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgcmVtb3ZlZCwgdGhlbiB0aGUgZWRpdCBpc1xuIgorImFib3J0ZWQgYW5kIHRoZSBodW5rIGlzIGxlZnQgdW5jaGFuZ2VkLlxuIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjExMDMKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTE0OAorbXNnaWQgIidnaXQgYXBwbHkgLS1jYWNoZWQnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIy4KKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIzogYWRkLXBhdGNoLmM6MTIxOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyMzkKK21zZ2lkICIiCisiWW91ciBlZGl0ZWQgaHVuayBkb2VzIG5vdCBhcHBseS4gRWRpdCBhZ2FpbiAoc2F5aW5nIFwibm9cIiBkaXNjYXJkcyEpIFt5L25dPyAiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTI2MQorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4ISIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMjYyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MworbXNnaWQgIkFwcGx5IHRoZW0gdG8gdGhlIHdvcmt0cmVlIGFueXdheT8gIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjEyNjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQ2Cittc2dpZCAiTm90aGluZyB3YXMgYXBwbGllZC5cbiIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMzI2Cittc2dpZCAiIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjE0NDcgYWRkLXBhdGNoLmM6MTQ1NworbXNnaWQgIk5vIHByZXZpb3VzIGh1bmsiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTQ1MiBhZGQtcGF0Y2guYzoxNDYyCittc2dpZCAiTm8gbmV4dCBodW5rIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjE0NjgKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjE0NzkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc3Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuayAoPHJldD4gdG8gc2VlIG1vcmUpPyAiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTQ4MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzkKK21zZ2lkICJnbyB0byB3aGljaCBodW5rPyAiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGFkZC1wYXRjaC5jOjE1MDUKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBzZWFyY2giCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTUxMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MjMKK21zZ2lkICJzZWFyY2ggZm9yIHJlZ2V4PyAiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAlczogJXMiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTU0MworbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybiIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxNTUwCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmsiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmtzLiIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxNTU4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVuayIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxNjA5Cittc2dpZCAiJ2dpdCBhcHBseScgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGFkdmljZS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIlc2hpbnQ6ICUuKnMlc1xuIgorbXNnc3RyICIiCisKKyM6IGFkdmljZS5jOjE2OAorbXNnaWQgIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBhZHZpY2UuYzoxNzAKK21zZ2lkICJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBhZHZpY2UuYzoxNzIKK21zZ2lkICJNZXJnaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBhZHZpY2UuYzoxNzQKK21zZ2lkICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBhZHZpY2UuYzoxNzYKK21zZ2lkICJSZXZlcnRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisKKyM6IGFkdmljZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJJdCBpcyBub3QgcG9zc2libGUgdG8gJXMgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKworIzogYWR2aWNlLmM6MTg2Cittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKK21zZ3N0ciAiIgorCisjOiBhZHZpY2UuYzoxOTQKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgYW4gdW5yZXNvbHZlZCBjb25mbGljdC4iCittc2dzdHIgIiIKKworIzogYWR2aWNlLmM6MTk5IGJ1aWx0aW4vbWVyZ2UuYzoxMzM1Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICIiCisKKyM6IGFkdmljZS5jOjIwMQorbXNnaWQgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgbWVyZ2luZy4iCittc2dzdHIgIiIKKworIzogYWR2aWNlLmM6MjAyCittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIHVuZmluaXNoZWQgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGFkdmljZS5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogc3dpdGNoaW5nIHRvICclcycuXG4iCisiXG4iCisiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisiY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpc1xuIgorInN0YXRlIHdpdGhvdXQgaW1wYWN0aW5nIGFueSBicmFuY2hlcyBieSBzd2l0Y2hpbmcgYmFjayB0byBhIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKyJkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYyB3aXRoIHRoZSBzd2l0Y2ggY29tbWFuZC4gRXhhbXBsZTpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPG5ldy1icmFuY2gtbmFtZT5cbiIKKyJcbiIKKyJPciB1bmRvIHRoaXMgb3BlcmF0aW9uIHdpdGg6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyJUdXJuIG9mZiB0aGlzIGFkdmljZSBieSBzZXR0aW5nIGNvbmZpZyB2YXJpYWJsZSBhZHZpY2UuZGV0YWNoZWRIZWFkIHRvICIKKyJmYWxzZVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGFsaWFzLmM6NTAKK21zZ2lkICJjbWRsaW5lIGVuZHMgd2l0aCBcXCIKK21zZ3N0ciAiIgorCisjOiBhbGlhcy5jOjUxCittc2dpZCAidW5jbG9zZWQgcXVvdGUiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjEzNQorbXNnaWQgIi0tcmVqZWN0IGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MTM3Cittc2dpZCAiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoxNDAKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoxNTEKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MTU0Cittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjk2MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgb24gbGluZSAlZDogJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgImluY29uc2lzdGVudCBoZWFkZXIgbGluZXMgJWQgYW5kICVkIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MTM3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYXBwbHkuYzoxMzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiAobGluZSAlZCkiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjE3NTMKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjE3NTUKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoxODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MTgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MTgzMQorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MTk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MjAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoyMTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjMwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYXBwbHkuYzozMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXZlcnNlLWFwcGx5IGEgYmluYXJ5IHBhdGNoIHdpdGhvdXQgdGhlIHJldmVyc2UgaHVuayB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MzE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYXBwbHkgYmluYXJ5IHBhdGNoIHRvICclcycgd2l0aG91dCBmdWxsIGluZGV4IGxpbmUiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgcGF0Y2ggYXBwbGllcyB0byAnJXMnICglcyksIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IGNvbnRlbnRzLiIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjMxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHBhdGNoIGFwcGxpZXMgdG8gYW4gZW1wdHkgJyVzJyBidXQgaXQgaXMgbm90IGVtcHR5IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MzE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbmVjZXNzYXJ5IHBvc3RpbWFnZSAlcyBmb3IgJyVzJyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjMyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozMjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCB0byAnJXMnIGNyZWF0ZXMgaW5jb3JyZWN0IHJlc3VsdCAoZXhwZWN0aW5nICVzLCBnb3QgJXMpIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MzIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjMzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MzQwNSBhcHBseS5jOjM0MTYgYXBwbHkuYzozNDYyIG1pZHguYzo2MSBzZXR1cC5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBmcm9tICclcycgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM0NDIgYXBwbHkuYzozNjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MzUyOCBhcHBseS5jOjM3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MzUzNyBhcHBseS5jOjM3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MzU3MgorbXNnaWQgInJlcG9zaXRvcnkgbGFja3MgdGhlIG5lY2Vzc2FyeSBibG9iIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhbGxpbmcgYmFjayB0byB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM1OTEgYXBwbHkuYzozNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmYWxsIGJhY2sgb24gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozNjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyB3aXRoIGNvbmZsaWN0cy5cbiIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIGNsZWFubHkuXG4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozNjUyCittc2dpZCAicmVtb3ZhbCBwYXRjaCBsZWF2ZXMgZmlsZSBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozNzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM4NzggYXBwbHkuYzozODgwIHJlYWQtY2FjaGUuYzo4MzAgcmVhZC1jYWNoZS5jOjg1NgorIzogcmVhZC1jYWNoZS5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM5MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6Mzk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozOTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM5ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWZmZWN0ZWQgZmlsZSAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozOTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0MDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGUgY2hhbmdlIGZvciAlcywgd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgKCVzKS4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhZGQgJXMgdG8gdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdGVtcG9yYXJ5IGluZGV4IHRvICVzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQzMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDMxNiBhcHBseS5jOjQ0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDM2MworIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDUzOQorbXNnaWQgImludGVybmFsIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBhcHBseS5jOjQ1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDU2MSBidWlsdGluL2ZldGNoLmM6OTAxIGJ1aWx0aW4vZmV0Y2guYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgcGF0Y2ggJyVzJy4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0NzA2Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDcyNgorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBhcHBseS5jOjQ5MTYgYXBwbHkuYzo0OTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBhcHBseS5jOjQ5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGFwcGx5LmM6NDk0MCBidWlsdGluL2FkZC5jOjYxMiBidWlsdGluL212LmM6MzAxIGJ1aWx0aW4vcm0uYzo0MDYKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTY4Cittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5NzEKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk3MyBidWlsdGluL2FtLmM6MjI2MAorbXNnaWQgIm51bSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5NzQKK21zZ2lkICJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5NzcKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk3OQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5ODMKK21zZ2lkICJzaG93IG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk4NQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTg3Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5ODkKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTkxCittc2dpZCAibWFyayBuZXcgZmlsZXMgd2l0aCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk5MworbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk5NQorbXNnaWQgImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTk4Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo1MDAwCittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMDIKK21zZ2lkICJidWlsZCBhIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiBlbWJlZGRlZCBpbmRleCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMDUgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MyBidWlsdGluL2xzLWZpbGVzLmM6NTI0Cittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo1MDA3Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NTAwOCBidWlsdGluL2FtLmM6MjIzOSBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk4CisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMCBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDU3IGJ1aWx0aW4vcmViYXNlLmM6MTUwOAorbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMDkKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMTIgYXBwbHkuYzo1MDE1Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMTgKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMjAKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMjIKK21zZ2lkICJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMjQKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMjUgYnVpbHRpbi9hZGQuYzozMjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMgorIzogYnVpbHRpbi9jb21taXQuYzoxMzYwIGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk4IGJ1aWx0aW4vZnNjay5jOjc3NAorIzogYnVpbHRpbi9sb2cuYzoyMTY2IGJ1aWx0aW4vbXYuYzoxMjMgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NTAyNworbXNnaWQgInRvbGVyYXRlIGluY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgbmV3LWxpbmUgYXQgdGhlIGVuZCBvZiBmaWxlIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NTAzMAorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMzIgYnVpbHRpbi9hbS5jOjIyNDgKK21zZ2lkICJyb290IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NTAzMworbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6MTUKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjE2Cittc2dpZCAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzoxNworbXNnaWQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjM3MiBidWlsdGluL2FkZC5jOjE4MSBidWlsdGluL2FkZC5jOjU4OCBidWlsdGluL3JtLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZjogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHRyZWUgb2JqZWN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImZtdCIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ1OCBidWlsdGluL2xvZy5jOjE2NTMKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ1OQorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ2MCBidWlsdGluL2JsYW1lLmM6ODYxIGJ1aWx0aW4vYmxhbWUuYzo4NjUgYnVpbHRpbi9ibGFtZS5jOjg2NgorIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNyBidWlsdGluL2NvbmZpZy5jOjEzMCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjQgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjggYnVpbHRpbi9ncmVwLmM6ODg3CisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjAgYnVpbHRpbi9scy1maWxlcy5jOjU2MworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMiBidWlsdGluL25vdGVzLmM6NTc4IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIzCisjOiBwYXJzZS1vcHRpb25zLmg6MTkwCittc2dpZCAiZmlsZSIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDYxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0NjMKK21zZ2lkICJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0NjQKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0NjUKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ3NAorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDc3Cittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0NzkgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9jbG9uZS5jOjExMyBidWlsdGluL2Nsb25lLmM6MTE2CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMQorbXNnaWQgInJlcG8iCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ4MCBidWlsdGluL2FyY2hpdmUuYzo5MgorbXNnaWQgInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0ODEgYnVpbHRpbi9hcmNoaXZlLmM6OTMgYnVpbHRpbi9kaWZmdG9vbC5jOjcxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQ5OAorbXNnaWQgImNvbW1hbmQiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ4MiBidWlsdGluL2FyY2hpdmUuYzo5NAorbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDg5Cittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1yZW1vdGUiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ5MQorbXNnaWQgIk9wdGlvbiAtLWV4ZWMgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0OTMKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLW91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS10YXIuYzoxMjUgYXJjaGl2ZS16aXAuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmVhbSBibG9iICVzIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjY2IGFyY2hpdmUtemlwLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS10YXIuYzoyOTMgYXJjaGl2ZS16aXAuYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXMiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS10YXIuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICclcycgZmlsdGVyIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY4Cittc2dpZCAidW5hYmxlIHRvIHJlZGlyZWN0IGRlc2NyaXB0b3IiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS10YXIuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWx0ZXIgcmVwb3J0ZWQgZXJyb3IiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS16aXAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCBpcyBub3QgdmFsaWQgVVRGLTg6ICVzIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUtemlwLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUtemlwLmM6NDgwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMxIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGUgZXJyb3IgKCVkKSIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLXppcC5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lc3RhbXAgdG9vIGxhcmdlIGZvciB0aGlzIHN5c3RlbTogJTxQUkl1TUFYPiIKK21zZ3N0ciAiIgorCisjOiBhdHRyLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWUiCittc2dzdHIgIiIKKworIzogYXR0ci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBub3QgYWxsb3dlZDogJXM6JWQiCittc2dzdHIgIiIKKworIzogYXR0ci5jOjQwOQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkbHkgcXVvdGVkIGNvbnRlbnQgaW4gZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICIiCisKKyM6IGJpc2VjdC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBjb21taXQgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIGJhZC5cbiIKKyJUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIG5ldy5cbiIKKyJUaGUgcHJvcGVydHkgaGFzIGNoYW5nZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo3ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzICVzLlxuIgorIlRoaXMgbWVhbnMgdGhlIGZpcnN0ICclcycgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKworIzogYmlzZWN0LmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTb21lICVzIHJldnMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlICVzIHJldi5cbiIKKyJnaXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS5cbiIKKyJNYXliZSB5b3UgbWlzdG9vayAlcyBhbmQgJXMgcmV2cz9cbiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBtZXJnZSBiYXNlIGJldHdlZW4gJXMgYW5kIFslc10gbXVzdCBiZSBza2lwcGVkLlxuIgorIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCAlcyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgJXMuXG4iCisiV2UgY29udGludWUgYW55d2F5LiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSAlcyByZXZpc2lvbiBpcyBuZWVkZWQiCittc2dzdHIgIiIKKworIzogYmlzZWN0LmM6OTIwIGJ1aWx0aW4vbm90ZXMuYzoxNzcgYnVpbHRpbi90YWcuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYmlzZWN0LmM6OTY2IGJ1aWx0aW4vbWVyZ2UuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJpc2VjdC5jOjk5NworbXNnaWQgInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJpc2VjdC5jOjEwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgd2FzIGJvdGggJXMgYW5kICVzXG4iCittc2dzdHIgIiIKKworIzogYmlzZWN0LmM6MTAyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGVzdGFibGUgY29tbWl0IGZvdW5kLlxuIgorIk1heWJlIHlvdSBzdGFydGVkIHdpdGggYmFkIHBhdGggcGFyYW1ldGVycz9cbiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzoxMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIihyb3VnaGx5ICVkIHN0ZXApIgorbXNnaWRfcGx1cmFsICIocm91Z2hseSAlZCBzdGVwcykiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGxhc3QgJXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoICIocm91Z2hseSAlZAorIy4gc3RlcHMpIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBiaXNlY3QuYzoxMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogJWQgcmV2aXNpb24gbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIKK21zZ2lkX3BsdXJhbCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJsYW1lLmM6MjcwMAorbXNnaWQgIi0tY29udGVudHMgYW5kIC0tcmV2ZXJzZSBkbyBub3QgYmxlbmQgd2VsbC4iCittc2dzdHIgIiIKKworIzogYmxhbWUuYzoyNzE0Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbnRlbnRzIHdpdGggZmluYWwgY29tbWl0IG9iamVjdCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJsYW1lLmM6MjczNQorbXNnaWQgIi0tcmV2ZXJzZSBhbmQgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSBzcGVjaWZpZWQgbGF0ZXN0IGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBibGFtZS5jOjI3NDQgYnVuZGxlLmM6MTY3IHJlZi1maWx0ZXIuYzoyMjAzIHJlbW90ZS5jOjE5NDIgc2VxdWVuY2VyLmM6MjAwNgorIzogc2VxdWVuY2VyLmM6NDM1OCBzdWJtb2R1bGUuYzo4NDcgYnVpbHRpbi9jb21taXQuYzoxMDQ1IGJ1aWx0aW4vbG9nLmM6Mzg4CisjOiBidWlsdGluL2xvZy5jOjk5MSBidWlsdGluL2xvZy5jOjE1MjAgYnVpbHRpbi9sb2cuYzoxOTI1IGJ1aWx0aW4vbG9nLmM6MjIxNQorIzogYnVpbHRpbi9tZXJnZS5jOjQxMiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkwCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTkyCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYmxhbWUuYzoyNzYyCittc2dpZCAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHJhbmdlIGFsb25nIGZpcnN0LXBhcmVudCBjaGFpbiIKK21zZ3N0ciAiIgorCisjOiBibGFtZS5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBwYXRoICVzIGluICVzIgorbXNnc3RyICIiCisKKyM6IGJsYW1lLmM6Mjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJBZnRlciBmaXhpbmcgdGhlIGVycm9yIGNhdXNlIHlvdSBtYXkgdHJ5IHRvIGZpeCB1cFxuIgorInRoZSByZW1vdGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYnkgaW52b2tpbmdcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjExOQorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkEgYnJhbmNoIG5hbWVkICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjIxMworbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSByZXF1ZXN0ZWQgdXBzdHJlYW0gYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MjM3Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgb24gYmFzaW5nIHlvdXIgd29yayBvbiBhbiB1cHN0cmVhbVxuIgorImJyYW5jaCB0aGF0IGFscmVhZHkgZXhpc3RzIGF0IHRoZSByZW1vdGUsIHlvdSBtYXkgbmVlZCB0b1xuIgorInJ1biBcImdpdCBmZXRjaFwiIHRvIHJldHJpZXZlIGl0LlxuIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVzaCBvdXQgYSBuZXcgbG9jYWwgYnJhbmNoIHRoYXRcbiIKKyJ3aWxsIHRyYWNrIGl0cyByZW1vdGUgY291bnRlcnBhcnQsIHlvdSBtYXkgd2FudCB0byB1c2VcbiIKKyJcImdpdCBwdXNoIC11XCIgdG8gc2V0IHRoZSB1cHN0cmVhbSBjb25maWcgYXMgeW91IHB1c2guIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIG9mIHdvcmtpbmcgdHJlZSAlcyBpcyBub3QgdXBkYXRlZCIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzo5MCByZXJlcmUuYzo0ODAgcmVyZXJlLmM6NjkwIHNlcXVlbmNlci5jOjIyNTggc2VxdWVuY2VyLmM6MzAxNgorIzogYnVpbHRpbi9jb21taXQuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzoxNDMKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzoxNDYKK21zZ2lkICJuZWVkIGEgcmVwb3NpdG9yeSB0byB2ZXJpZnkgYSBidW5kbGUiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVuZGxlLmM6MjA0Cittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVuZGxlLmM6MjczCittc2dpZCAidW5hYmxlIHRvIGR1cCBidW5kbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzoyODAKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjI5MQorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjMzMworbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjQ2MSBidWlsdGluL2xvZy5jOjIwMyBidWlsdGluL2xvZy5jOjE4MTQgYnVpbHRpbi9zaG9ydGxvZy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjQ2OQorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6NTA0Cittc2dpZCAiaW5kZXgtcGFjayBkaWVkIgorbXNnc3RyICIiCisKKyM6IGNvbG9yLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgIiIKKworIzogY29tbWl0LmM6NTEgc2VxdWVuY2VyLmM6MjcxOSBidWlsdGluL2FtLmM6MzU5IGJ1aWx0aW4vYW0uYzo0MDMKKyM6IGJ1aWx0aW4vYW0uYzoxMzcxIGJ1aWx0aW4vYW0uYzoyMDE0IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiIgorCisjOiBjb21taXQuYzoxOTMKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIGlzIGRlcHJlY2F0ZWRcbiIKKyJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIEdpdCB2ZXJzaW9uLlxuIgorIlxuIgorIlBsZWFzZSB1c2UgXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiXG4iCisidG8gY29udmVydCB0aGUgZ3JhZnRzIGludG8gcmVwbGFjZSByZWZzLlxuIgorIlxuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCittc2dzdHIgIiIKKworIzogY29tbWl0LmM6MTE1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlLCBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC5jOjExNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIiIKKworIzogY29tbWl0LmM6MTE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC5jOjExNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSBieSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC5jOjE0MTcKK21zZ2lkICIiCisiV2FybmluZzogY29tbWl0IG1lc3NhZ2UgZGlkIG5vdCBjb25mb3JtIHRvIFVURi04LlxuIgorIllvdSBtYXkgd2FudCB0byBhbWVuZCBpdCBhZnRlciBmaXhpbmcgdGhlIG1lc3NhZ2UsIG9yIHNldCB0aGUgY29uZmlnXG4iCisidmFyaWFibGUgaTE4bi5jb21taXRlbmNvZGluZyB0byB0aGUgZW5jb2RpbmcgeW91ciBwcm9qZWN0IHVzZXMuXG4iCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTIyCittc2dpZCAiY29tbWl0LWdyYXBoIGZpbGUgaXMgdG9vIHNtYWxsIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggc2lnbmF0dXJlICVYIGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAlWCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIyNgorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBsb29rdXAgdGFibGUgZW50cnkgbWlzc2luZzsgZmlsZSBtYXkgYmUgaW5jb21wbGV0ZSIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGltcHJvcGVyIGNodW5rIG9mZnNldCAlMDh4JTA4eCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGlkICUwOHggYXBwZWFycyBtdWx0aXBsZSB0aW1lcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzozNDMKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIG5vIGJhc2UgZ3JhcGhzIGNodW5rIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM1MworbXNnaWQgImNvbW1pdC1ncmFwaCBjaGFpbiBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQtZ3JhcGggY2hhaW46IGxpbmUgJyVzJyBub3QgYSBoYXNoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjQyNQorbXNnaWQgInVuYWJsZSB0byBmaW5kIGFsbCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6NTU4IGNvbW1pdC1ncmFwaC5jOjYxOAorbXNnaWQgImludmFsaWQgY29tbWl0IHBvc2l0aW9uLiBjb21taXQtZ3JhcGggaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzo4NTIgYnVpbHRpbi9hbS5jOjEyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDExIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHR5cGUgb2Ygb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNDMKK21zZ2lkICJMb2FkaW5nIGtub3duIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNjAKK21zZ2lkICJFeHBhbmRpbmcgcmVhY2hhYmxlIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNzkKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwOTgKK21zZ2lkICJDb21wdXRpbmcgY29tbWl0IGdyYXBoIGdlbmVyYXRpb24gbnVtYmVycyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2siCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2tzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBhZGRpbmcgcGFjayAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgaW5kZXggZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgb2JqZWN0IGlkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjQ5Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggYW1vbmcgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTI2NAorbXNnaWQgIkNvdW50aW5nIGRpc3RpbmN0IGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyOTQKK21zZ2lkICJGaW5kaW5nIGV4dHJhIGVkZ2VzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzQwCittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvcnJlY3QgbnVtYmVyIG9mIGJhc2UgZ3JhcGggaWRzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNzMgbWlkeC5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTM4NSBidWlsdGluL2luZGV4LXBhY2suYzozMDYgYnVpbHRpbi9yZXBhY2suYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3MiCittc2dpZF9wbHVyYWwgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDg2Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gY29tbWl0LWdyYXBoIGNoYWluIGZpbGUiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ5OAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgYmFzZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxNTE4Cittc2dpZCAiZmFpbGVkIHRvIHJlbmFtZSB0ZW1wb3JhcnkgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTYzMQorbXNnaWQgIlNjYW5uaW5nIG1lcmdlZCBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkdXBsaWNhdGUgY29tbWl0IGlkICVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NjUKK21zZ2lkICJNZXJnaW5nIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBjb21taXQgZ3JhcGggZm9ybWF0IGNhbm5vdCB3cml0ZSAlZCBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4NTUKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIHRvIHdyaXRlIGdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NDQKK21zZ2lkICJ0aGUgY29tbWl0LWdyYXBoIGZpbGUgaGFzIGluY29ycmVjdCBjaGVja3N1bSBhbmQgaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTk1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBPSUQgb3JkZXI6ICVzIHRoZW4gJXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTk2NCBjb21taXQtZ3JhcGguYzoxOTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IGZhbm91dCB2YWx1ZTogZmFub3V0WyVkXSA9ICV1ICE9ICV1IgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTg5Cittc2dpZCAiVmVyaWZ5aW5nIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIG9iamVjdCBkYXRhYmFzZSBmb3IgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIGlzIHRvbyBsb25nIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBmb3IgJXMgaXMgJXMgIT0gJXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MjA0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyB0ZXJtaW5hdGVzIGVhcmx5IgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgZ2VuZXJhdGlvbiBudW1iZXIgemVybyBmb3IgY29tbWl0ICVzLCBidXQgbm9uLXplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgbm9uLXplcm8gZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGNvbW1pdCAlcywgYnV0IHplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGdlbmVyYXRpb24gZm9yIGNvbW1pdCAlcyBpcyAldSAhPSAldSIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCBkYXRlIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKK21zZ3N0ciAiIgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGNlZWRlZCBtYXhpbXVtIGluY2x1ZGUgZGVwdGggKCVkKSB3aGlsZSBpbmNsdWRpbmdcbiIKKyJcdCVzXG4iCisiZnJvbVxuIgorIlx0JXNcbiIKKyJUaGlzIG1pZ2h0IGJlIGR1ZSB0byBjaXJjdWxhciBpbmNsdWRlcy4iCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBleHBhbmQgaW5jbHVkZSBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTUxCittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjE5NworbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gdmFyaWFibGUgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6NDA2IHNlcXVlbmNlci5jOjI0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjQ0OCBjb25maWcuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29uZmlnIHBhcmFtZXRlcjogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGZvcm1hdCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGJsb2IgJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdWJtb2R1bGUtYmxvYiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgIm91dCBvZiByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo5NzgKK21zZ2lkICJpbnZhbGlkIHVuaXQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gYmxvYiAlczogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBmaWxlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN0YW5kYXJkIGlucHV0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxMDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN1Ym1vZHVsZS1ibG9iICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxMDEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhwYW5kIHVzZXIgZGlyIGluOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjExMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmb3IgJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJhYmJyZXYgbGVuZ3RoIG91dCBvZiByYW5nZTogJWQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTIyMiBjb25maWcuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB6bGliIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjEzMjUKK21zZ2lkICJjb3JlLmNvbW1lbnRDaGFyIHNob3VsZCBvbmx5IGJlIG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjE0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTQ1NworbXNnaWQgIm11c3QgYmUgb25lIG9mIG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsIHVwc3RyZWFtIG9yIGN1cnJlbnQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTUxOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBjb25maWcgYmxvYiBvYmplY3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgYmxvYiIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIGNvbmZpZyBibG9iICclcyciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTc0MworbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjIwOTcKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjIzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIHZhbHVlICclZCcgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjIzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjIzNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyNDczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyNzU0IGNvbmZpZy5jOjMwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6Mjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI4MDAgYnVpbHRpbi9jb25maWcuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyODI1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjgzOCBjb25maWcuYzozMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgImZzdGF0IG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICclcyciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6Mjg1OCBjb25maWcuYzozMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNobW9kIG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyOTQzIGNvbmZpZy5jOjMxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6Mjk3OSBidWlsdGluL3JlbW90ZS5jOjY1NSBidWlsdGluL3JlbW90ZS5jOjg0OSBidWlsdGluL3JlbW90ZS5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzozMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzozMjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgdmFsdWUgZm9yICclcyciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjYxCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1cG9uIGluaXRpYWwgY29udGFjdCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NjMKK21zZ2lkICIiCisiQ291bGQgbm90IHJlYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS5cbiIKKyJcbiIKKyJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHNcbiIKKyJhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLiIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBmZWF0dXJlICclcyciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjExNAorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGNhcGFiaWxpdGllcyBhZnRlciBmaXJzdCBsaW5lICclcyciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjI1MgorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkIGNhcGFiaWxpdGllc157fSIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGFsbG93IHNoYS0xLCBnb3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6Mjc1Cittc2dpZCAicmVwb3NpdG9yeSBvbiB0aGUgb3RoZXIgZW5kIGNhbm5vdCBiZSBzaGFsbG93IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzozMTMKK21zZ2lkICJpbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkICclcyciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxzLXJlZnMgcmVzcG9uc2U6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo0NDUKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciByZWYgbGlzdGluZyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sICclcycgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NTk1Cittc2dpZCAidW5hYmxlIHRvIHNldCBTT19LRUVQQUxJVkUgb24gc29ja2V0IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo2MzUgY29ubmVjdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29raW5nIHVwICVzIC4uLiAiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCAlcyAocG9ydCAlcykgKCVzKSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJMb29raW5nIHVwICVzIC4uLiAiCisjOiBjb25uZWN0LmM6NjQzIGNvbm5lY3QuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmUuXG4iCisiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NjY1IGNvbm5lY3QuYzo3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byBjb25uZWN0IHRvICVzOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCisjOiBjb25uZWN0LmM6NjcxIGNvbm5lY3QuYzo3NDgKK21zZ2lkICJkb25lLiIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzICglcykiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHBvcnQgJXMiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjg0NSBjb25uZWN0LmM6MTE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIGhvc3RuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcG9ydCAnJXMnIGJsb2NrZWQiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhcnQgcHJveHkgJXMiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjkyOAorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkOyBzZWUgJ2dpdCBoZWxwIHB1bGwnIGZvciB2YWxpZCB1cmwgc3ludGF4IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoxMTIzCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTEzNQorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjExNTIKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgcG9ydCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBhdGhuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTMxMQorbXNnaWQgInVuYWJsZSB0byBmb3JrIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3RlZC5jOjk4IGJ1aWx0aW4vZnNjay5jOjIwOCBidWlsdGluL3BydW5lLmM6NDMKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkiCittc2dzdHIgIiIKKworIzogY29ubmVjdGVkLmM6MTEwCittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0ZWQuYzoxMzAKK21zZ2lkICJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3QiCittc2dzdHIgIiIKKworIzogY29ubmVjdGVkLmM6MTM3Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1JMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDUkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMuXG4iCisiVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcHJvaGliaXRlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBjb250YWlucyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJS4qcyBhcyAiCisid29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyByZXF1aXJlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBpcyBtaXNzaW5nIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lc0JFIG9yIFVURi0iCisiJXNMRSAoZGVwZW5kaW5nIG9uIHRoZSBieXRlIG9yZGVyKSBhcyB3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo0MTkgY29udmVydC5jOjQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZW5jb2RlICclcycgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVuY29kaW5nICclcycgZnJvbSAlcyB0byAlcyBhbmQgYmFjayBpcyBub3QgdGhlIHNhbWUiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayB0byBydW4gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmVlZCB0aGUgaW5wdXQgdG8gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQgJWQiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjczMCBjb252ZXJ0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZnJvbSBleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjczNiBjb252ZXJ0LmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6ODM5Cittc2dpZCAidW5leHBlY3RlZCBmaWx0ZXIgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6ODUwCittc2dpZCAicGF0aCBuYW1lIHRvbyBsb25nIGZvciBleHRlcm5hbCBmaWx0ZXIiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXh0ZXJuYWwgZmlsdGVyICclcycgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGFsdGhvdWdoIG5vdCBhbGwgcGF0aHMgaGF2ZSAiCisiYmVlbiBmaWx0ZXJlZCIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MTIyMworbXNnaWQgInRydWUvZmFsc2UgYXJlIG5vIHZhbGlkIHdvcmtpbmctdHJlZS1lbmNvZGluZ3MiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjE0MTEgY29udmVydC5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MTQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogc211ZGdlIGZpbHRlciAlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGF0ZS5jOjEzOAorbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgIiIKKworIzogZGF0ZS5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbWludXRlIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRhdGUuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBob3VycyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBkYXlzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRhdGUuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB3ZWVrcyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4geWVhciIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyMuIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiCisjOiBkYXRlLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRhdGUuYzoxOTcgZGF0ZS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyNzIKK21zZ2lkICJQcm9wYWdhdGluZyBpc2xhbmQgbWFya3MiCittc2dzdHIgIiIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdHJlZSBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogZGVsdGEtaXNsYW5kcy5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBpc2xhbmQgcmVnZXggZm9yICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaXNsYW5kIHJlZ2V4IGZyb20gY29uZmlnIGhhcyB0b28gbWFueSBjYXB0dXJlIGdyb3VwcyAobWF4PSVkKSIKK21zZ3N0ciAiIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtlZCAlZCBpc2xhbmRzLCBkb25lLlxuIgorbXNnc3RyICIiCisKKyM6IGRpZmZjb3JlLW9yZGVyLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciCittc2dzdHIgIiIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTQzCittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIiIKKworIzogZGlmZi1uby1pbmRleC5jOjIzOAorbXNnaWQgImdpdCBkaWZmIC0tbm8taW5kZXggWzxvcHRpb25zPl0gPHBhdGg+IDxwYXRoPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLW5vLWluZGV4LmM6MjYzCittc2dpZCAiIgorIk5vdCBhIGdpdCByZXBvc2l0b3J5LiBVc2UgLS1uby1pbmRleCB0byBjb21wYXJlIHR3byBwYXRocyBvdXRzaWRlIGEgd29ya2luZyAiCisidHJlZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgVW5rbm93biBkaXJzdGF0IHBhcmFtZXRlciAnJXMnXG4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjI5NgorbXNnaWQgIiIKKyJjb2xvciBtb3ZlZCBzZXR0aW5nIG11c3QgYmUgb25lIG9mICdubycsICdkZWZhdWx0JywgJ2Jsb2NrcycsICd6ZWJyYScsICIKKyInZGltbWVkLXplYnJhJywgJ3BsYWluJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmtub3duIGNvbG9yLW1vdmVkLXdzIG1vZGUgJyVzJywgcG9zc2libGUgdmFsdWVzIGFyZSAnaWdub3JlLXNwYWNlLWNoYW5nZScsICIKKyInaWdub3JlLXNwYWNlLWF0LWVvbCcsICdpZ25vcmUtYWxsLXNwYWNlJywgJ2FsbG93LWluZGVudGF0aW9uLWNoYW5nZSciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjMzMgorbXNnaWQgIiIKKyJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyICIKKyJ3aGl0ZXNwYWNlIG1vZGVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0NTQ3Cittc2dpZCAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ1NTAKK21zZ2lkICItRywgLVMgYW5kIC0tZmluZC1vYmplY3QgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDYyOAorbXNnaWQgIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0Njc2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1zdGF0IHZhbHVlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDY4MSBkaWZmLmM6NDY4NiBkaWZmLmM6NDY5MSBkaWZmLmM6NDY5NiBkaWZmLmM6NTIwOQorIzogcGFyc2Utb3B0aW9ucy5jOjE5NyBwYXJzZS1vcHRpb25zLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNoYW5nZSBjbGFzcyAnJWMnIGluIC0tZGlmZi1maWx0ZXI9JXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBhZnRlciB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0ODg2IGRpZmYuYzo0ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgPG4+LzxtPiBmb3JtIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBjaGFyYWN0ZXIsIGdvdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLWNvbG9yLW1vdmVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgJyVzJyBpbiAtLWNvbG9yLW1vdmVkLXdzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0OTg0Cittc2dpZCAiIgorIm9wdGlvbiBkaWZmLWFsZ29yaXRobSBhY2NlcHRzIFwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2VcIiBhbmQgIgorIlwiaGlzdG9ncmFtXCIiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUwMjAgZGlmZi5jOjUwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS13b3JkLWRpZmYgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MjU3Cittc2dpZCAiRGlmZiBvdXRwdXQgZm9ybWF0IG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyNTkgZGlmZi5jOjUyNjUKK21zZ2lkICJnZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI2MiBidWlsdGluL2xvZy5jOjE3MworbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MjY3IGRpZmYuYzo1MzgxIGRpZmYuYzo1Mzg4Cittc2dpZCAiPG4+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MjY4IGRpZmYuYzo1MjcxCittc2dpZCAiZ2VuZXJhdGUgZGlmZnMgd2l0aCA8bj4gbGluZXMgY29udGV4dCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI3MworbXNnaWQgImdlbmVyYXRlIHRoZSBkaWZmIGluIHJhdyBmb3JtYXQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyNzYKK21zZ2lkICJzeW5vbnltIGZvciAnLXAgLS1yYXcnIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MjgwCittc2dpZCAic3lub255bSBmb3IgJy1wIC0tc3RhdCciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyODQKK21zZ2lkICJtYWNoaW5lIGZyaWVuZGx5IC0tc3RhdCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI4NworbXNnaWQgIm91dHB1dCBvbmx5IHRoZSBsYXN0IGxpbmUgb2YgLS1zdGF0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mjg5IGRpZmYuYzo1Mjk3Cittc2dpZCAiPHBhcmFtMSxwYXJhbTI+Li4uIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MjkwCittc2dpZCAiIgorIm91dHB1dCB0aGUgZGlzdHJpYnV0aW9uIG9mIHJlbGF0aXZlIGFtb3VudCBvZiBjaGFuZ2VzIGZvciBlYWNoIHN1Yi1kaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyOTQKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI5OAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1maWxlcyxwYXJhbTEscGFyYW0yLi4uIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzAyCittc2dpZCAid2FybiBpZiBjaGFuZ2VzIGludHJvZHVjZSBjb25mbGljdCBtYXJrZXJzIG9yIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzA1Cittc2dpZCAiY29uZGVuc2VkIHN1bW1hcnkgc3VjaCBhcyBjcmVhdGlvbnMsIHJlbmFtZXMgYW5kIG1vZGUgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMwOAorbXNnaWQgInNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzExCittc2dpZCAic2hvdyBvbmx5IG5hbWVzIGFuZCBzdGF0dXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMxMworbXNnaWQgIjx3aWR0aD5bLDxuYW1lLXdpZHRoPlssPGNvdW50Pl1dIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzE0Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMTYgZGlmZi5jOjUzMTkgZGlmZi5jOjUzMjIKK21zZ2lkICI8d2lkdGg+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzE3Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIHdpZHRoIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzIwCittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIG5hbWUgd2lkdGgiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMjMKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gZ3JhcGggd2lkdGgiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMjUKK21zZ2lkICI8Y291bnQ+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzI2Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBsaW1pdGVkIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzI5Cittc2dpZCAiZ2VuZXJhdGUgY29tcGFjdCBzdW1tYXJ5IGluIGRpZmZzdGF0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzMyCittc2dpZCAib3V0cHV0IGEgYmluYXJ5IGRpZmYgdGhhdCBjYW4gYmUgYXBwbGllZCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMzNQorbXNnaWQgInNob3cgZnVsbCBwcmUtIGFuZCBwb3N0LWltYWdlIG9iamVjdCBuYW1lcyBvbiB0aGUgXCJpbmRleFwiIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzM3Cittc2dpZCAic2hvdyBjb2xvcmVkIGRpZmYiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMzgKK21zZ2lkICI8a2luZD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMzkKK21zZ2lkICIiCisiaGlnaGxpZ2h0IHdoaXRlc3BhY2UgZXJyb3JzIGluIHRoZSAnY29udGV4dCcsICdvbGQnIG9yICduZXcnIGxpbmVzIGluIHRoZSAiCisiZGlmZiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM0MgorbXNnaWQgIiIKKyJkbyBub3QgbXVuZ2UgcGF0aG5hbWVzIGFuZCB1c2UgTlVMcyBhcyBvdXRwdXQgZmllbGQgdGVybWluYXRvcnMgaW4gLS1yYXcgb3IgIgorIi0tbnVtc3RhdCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM0NSBkaWZmLmM6NTM0OCBkaWZmLmM6NTM1MSBkaWZmLmM6NTQ1NworbXNnaWQgIjxwcmVmaXg+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzQ2Cittc2dpZCAic2hvdyB0aGUgZ2l2ZW4gc291cmNlIHByZWZpeCBpbnN0ZWFkIG9mIFwiYS9cIiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM0OQorbXNnaWQgInNob3cgdGhlIGdpdmVuIGRlc3RpbmF0aW9uIHByZWZpeCBpbnN0ZWFkIG9mIFwiYi9cIiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM1MgorbXNnaWQgInByZXBlbmQgYW4gYWRkaXRpb25hbCBwcmVmaXggdG8gZXZlcnkgbGluZSBvZiBvdXRwdXQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNTUKK21zZ2lkICJkbyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM1OAorbXNnaWQgInNob3cgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbGluZXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNjIgZGlmZi5jOjUzNjcgZGlmZi5jOjUzNzIKK21zZ2lkICI8Y2hhcj4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNjMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBuZXcgbGluZSBpbnN0ZWFkIG9mICcrJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM2OAorbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhbiBvbGQgbGluZSBpbnN0ZWFkIG9mICctJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM3MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIGNvbnRleHQgaW5zdGVhZCBvZiAnICciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNzYKK21zZ2lkICJEaWZmIHJlbmFtZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mzc3Cittc2dpZCAiPG4+Wy88bT5dIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mzc4Cittc2dpZCAiYnJlYWsgY29tcGxldGUgcmV3cml0ZSBjaGFuZ2VzIGludG8gcGFpcnMgb2YgZGVsZXRlIGFuZCBjcmVhdGUiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzODIKK21zZ2lkICJkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM4NgorbXNnaWQgIm9taXQgdGhlIHByZWltYWdlIGZvciBkZWxldGVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mzg5Cittc2dpZCAiZGV0ZWN0IGNvcGllcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM5MworbXNnaWQgInVzZSB1bm1vZGlmaWVkIGZpbGVzIGFzIHNvdXJjZSB0byBmaW5kIGNvcGllcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM5NQorbXNnaWQgImRpc2FibGUgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM5OAorbXNnaWQgInVzZSBlbXB0eSBibG9icyBhcyByZW5hbWUgc291cmNlIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDAwCittc2dpZCAiY29udGludWUgbGlzdGluZyB0aGUgaGlzdG9yeSBvZiBhIGZpbGUgYmV5b25kIHJlbmFtZXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MDMKK21zZ2lkICIiCisicHJldmVudCByZW5hbWUvY29weSBkZXRlY3Rpb24gaWYgdGhlIG51bWJlciBvZiByZW5hbWUvY29weSB0YXJnZXRzIGV4Y2VlZHMgIgorImdpdmVuIGxpbWl0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDA1Cittc2dpZCAiRGlmZiBhbGdvcml0aG0gb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQwNworbXNnaWQgInByb2R1Y2UgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGRpZmYiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MTAKK21zZ2lkICJpZ25vcmUgd2hpdGVzcGFjZSB3aGVuIGNvbXBhcmluZyBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQxMworbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZXNwYWNlIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDE2Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSBhdCBFT0wiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MTkKK21zZ2lkICJpZ25vcmUgY2Fycmllci1yZXR1cm4gYXQgdGhlIGVuZCBvZiBsaW5lIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDIyCittc2dpZCAiaWdub3JlIGNoYW5nZXMgd2hvc2UgbGluZXMgYXJlIGFsbCBibGFuayIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQyNQorbXNnaWQgImhldXJpc3RpYyB0byBzaGlmdCBkaWZmIGh1bmsgYm91bmRhcmllcyBmb3IgZWFzeSByZWFkaW5nIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDI4Cittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJwYXRpZW5jZSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDMyCittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJoaXN0b2dyYW0gZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQzNAorbXNnaWQgIjxhbGdvcml0aG0+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDM1Cittc2dpZCAiY2hvb3NlIGEgZGlmZiBhbGdvcml0aG0iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MzcKK21zZ2lkICI8dGV4dD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MzgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImFuY2hvcmVkIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDAgZGlmZi5jOjU0NDkgZGlmZi5jOjU0NTIKK21zZ2lkICI8bW9kZT4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDEKK21zZ2lkICJzaG93IHdvcmQgZGlmZiwgdXNpbmcgPG1vZGU+IHRvIGRlbGltaXQgY2hhbmdlZCB3b3JkcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ0MyBkaWZmLmM6NTQ0NiBkaWZmLmM6NTQ5MQorbXNnaWQgIjxyZWdleD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDQKK21zZ2lkICJ1c2UgPHJlZ2V4PiB0byBkZWNpZGUgd2hhdCBhIHdvcmQgaXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDcKK21zZ2lkICJlcXVpdmFsZW50IHRvIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxyZWdleD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NTAKK21zZ2lkICJtb3ZlZCBsaW5lcyBvZiBjb2RlIGFyZSBjb2xvcmVkIGRpZmZlcmVudGx5IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDUzCittc2dpZCAiaG93IHdoaXRlIHNwYWNlcyBhcmUgaWdub3JlZCBpbiAtLWNvbG9yLW1vdmVkIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDU2Cittc2dpZCAiT3RoZXIgZGlmZiBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDU4Cittc2dpZCAid2hlbiBydW4gZnJvbSBzdWJkaXIsIGV4Y2x1ZGUgY2hhbmdlcyBvdXRzaWRlIGFuZCBzaG93IHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDYyCittc2dpZCAidHJlYXQgYWxsIGZpbGVzIGFzIHRleHQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NjQKK21zZ2lkICJzd2FwIHR3byBpbnB1dHMsIHJldmVyc2UgdGhlIGRpZmYiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NjYKK21zZ2lkICJleGl0IHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzLCAwIG90aGVyd2lzZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ2OAorbXNnaWQgImRpc2FibGUgYWxsIG91dHB1dCBvZiB0aGUgcHJvZ3JhbSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ3MAorbXNnaWQgImFsbG93IGFuIGV4dGVybmFsIGRpZmYgaGVscGVyIHRvIGJlIGV4ZWN1dGVkIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDcyCittc2dpZCAicnVuIGV4dGVybmFsIHRleHQgY29udmVyc2lvbiBmaWx0ZXJzIHdoZW4gY29tcGFyaW5nIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ3NAorbXNnaWQgIjx3aGVuPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ3NQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgaW4gdGhlIGRpZmYgZ2VuZXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ3OAorbXNnaWQgIjxmb3JtYXQ+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDc5Cittc2dpZCAic3BlY2lmeSBob3cgZGlmZmVyZW5jZXMgaW4gc3VibW9kdWxlcyBhcmUgc2hvd24iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0ODMKK21zZ2lkICJoaWRlICdnaXQgYWRkIC1OJyBlbnRyaWVzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDg2Cittc2dpZCAidHJlYXQgJ2dpdCBhZGQgLU4nIGVudHJpZXMgYXMgcmVhbCBpbiB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0ODgKK21zZ2lkICI8c3RyaW5nPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ4OQorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInN0cmluZyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ5MgorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInJlZ2V4IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDk1Cittc2dpZCAic2hvdyBhbGwgY2hhbmdlcyBpbiB0aGUgY2hhbmdlc2V0IHdpdGggLVMgb3IgLUciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0OTgKK21zZ2lkICJ0cmVhdCA8c3RyaW5nPiBpbiAtUyBhcyBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU1MDEKK21zZ2lkICJjb250cm9sIHRoZSBvcmRlciBpbiB3aGljaCBmaWxlcyBhcHBlYXIgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTUwMgorbXNnaWQgIjxvYmplY3QtaWQ+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTAzCittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisib2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTA1Cittc2dpZCAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTA2Cittc2dpZCAic2VsZWN0IGZpbGVzIGJ5IGRpZmYgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTUwOAorbXNnaWQgIjxmaWxlPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTUwOQorbXNnaWQgIk91dHB1dCB0byBhIHNwZWNpZmljIGZpbGUiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjYxNjQKK21zZ2lkICJpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24gd2FzIHNraXBwZWQgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NjE2NworbXNnaWQgIm9ubHkgZm91bmQgY29waWVzIGZyb20gbW9kaWZpZWQgcGF0aHMgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IG1heSB3YW50IHRvIHNldCB5b3VyICVzIHZhcmlhYmxlIHRvIGF0IGxlYXN0ICVkIGFuZCByZXRyeSB0aGUgY29tbWFuZC4iCittc2dzdHIgIiIKKworIzogZGlyLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQiCittc2dzdHIgIiIKKworIzogZGlyLmM6Njk1IGRpci5jOjcyNCBkaXIuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBhdHRlcm46ICclcyciCittc2dzdHIgIiIKKworIzogZGlyLmM6NzU0IGRpci5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgbmVnYXRpdmUgcGF0dGVybjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBkaXIuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgaGF2ZSBpc3N1ZXM6IHBhdHRlcm4gJyVzJyBpcyByZXBlYXRlZCIKK21zZ3N0ciAiIgorCisjOiBkaXIuYzo3OTYKK21zZ2lkICJkaXNhYmxpbmcgY29uZSBwYXR0ZXJuIG1hdGNoaW5nIgorbXNnc3RyICIiCisKKyM6IGRpci5jOjExNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiCittc2dzdHIgIiIKKworIzogZGlyLmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBkaXIuYzoyNDc5Cittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogZGlyLmM6MjYwMworbXNnaWQgInVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbSBvciBsb2NhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBkaXIuYzozNDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCBpbiByZXBvICVzIgorbXNnc3RyICIiCisKKyM6IGRpci5jOjM0NTIgZGlyLmM6MzQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBkaXIuYzozNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtaWdyYXRlIGdpdCBkaXJlY3RvcnkgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIzogZWRpdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGludDogV2FpdGluZyBmb3IgeW91ciBlZGl0b3IgdG8gY2xvc2UgdGhlIGZpbGUuLi4lYyIKK21zZ3N0ciAiIgorCisjOiBlbnRyeS5jOjE3OAorbXNnaWQgIkZpbHRlcmluZyBjb250ZW50IgorbXNnc3RyICIiCisKKyM6IGVudHJ5LmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0IGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBlbnZpcm9ubWVudC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2l0IG5hbWVzcGFjZSBwYXRoIFwiJXNcIiIKK21zZ3N0ciAiIgorCisjOiBlbnZpcm9ubWVudC5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0IEdJVF9ESVIgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBleGVjLWNtZC5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmdzIHRvIHJ1biAlcyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTUwCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTUzCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIGEgZmx1c2ggcGFja2V0IGFmdGVyIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTY0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTk1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRvIHJlbW90ZSIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MjU3Cittc2dpZCAiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpcmVzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MzU2IGZldGNoLXBhY2suYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MzYyIGZldGNoLXBhY2suYzoxMzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdW5zaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzozNjQgZmV0Y2gtcGFjay5jOjEzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjM2NyBmZXRjaC1wYWNrLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzozNjkgZmV0Y2gtcGFjay5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2hhbGxvdyBmb3VuZDogJXMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjM3MiBmZXRjaC1wYWNrLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBzaGFsbG93L3Vuc2hhbGxvdywgZ290ICVzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICVkICVzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjQ2MgorbXNnaWQgImdpdmluZyB1cCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6NDc1IHByb2dyZXNzLmM6MzIzCittc2dpZCAiZG9uZSIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAoJWQpICVzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyAlcyBhcyBjb21wbGV0ZSIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6NzU0CisjLCBjLWZvcm1hdAorbXNnaWQgImFscmVhZHkgaGF2ZSAlcyAoJXMpIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzo4MTgKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6ODI2Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBwYWNrIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiAlcyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6OTE4Cittc2dpZCAiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uIGlzICUuKnMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjk3MCBmZXRjaC1wYWNrLmM6OTc2IGZldGNoLXBhY2suYzo5NzkgZmV0Y2gtcGFjay5jOjk4NQorIzogZmV0Y2gtcGFjay5jOjk4OSBmZXRjaC1wYWNrLmM6OTkzIGZldGNoLXBhY2suYzo5OTcgZmV0Y2gtcGFjay5jOjEwMDEKKyM6IGZldGNoLXBhY2suYzoxMDA1IGZldGNoLXBhY2suYzoxMDA5IGZldGNoLXBhY2suYzoxMDEzIGZldGNoLXBhY2suYzoxMDE3CisjOiBmZXRjaC1wYWNrLmM6MTAyMyBmZXRjaC1wYWNrLmM6MTAyOSBmZXRjaC1wYWNrLmM6MTAzNCBmZXRjaC1wYWNrLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgJXMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjk3MgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2xpZW50cyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTAzMgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1zaW5jZSIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTAzNworbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1leGNsdWRlIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMDQxCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1kZWVwZW4iCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEwNTgKK21zZ2lkICJubyBjb21tb24gY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTA3MCBmZXRjaC1wYWNrLmM6MTUzNgorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMjA5Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXF1ZXN0cyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTIxNgorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBmaWx0ZXIiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEyMzkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVxdWVzdCB0byByZW1vdGUiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBzZWN0aW9uIGhlYWRlciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBhY2tub3dsZWRnbWVudCBsaW5lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgYWNrczogJWQiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEzMTgKK21zZ2lkICJleHBlY3RlZCBwYWNrZmlsZSB0byBiZSBzZW50IGFmdGVyICdyZWFkeSciCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEzMjAKK21zZ2lkICJleHBlY3RlZCBubyBvdGhlciBzZWN0aW9ucyB0byBiZSBzZW50IGFmdGVyIG5vICdyZWFkeSciCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBzaGFsbG93IGluZm86ICVkIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxNDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHdhbnRlZC1yZWYsIGdvdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgd2FudGVkLXJlZjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHdhbnRlZCByZWZzOiAlZCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTc2MgorbXNnaWQgIm5vIG1hdGNoaW5nIHJlbW90ZSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxNzg1IGJ1aWx0aW4vY2xvbmUuYzo2ODkKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlbW90ZSByZWYgJXMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IGFsbG93IHJlcXVlc3QgZm9yIHVuYWR2ZXJ0aXNlZCBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogZ3BnLWludGVyZmFjZS5jOjQwOAorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAiIgorCisjOiBncGctaW50ZXJmYWNlLmM6NDM0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBncGctaW50ZXJmYWNlLmM6NDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGdyYXBoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JlIGludmFsaWQgY29sb3IgJyUuKnMnIGluIGxvZy5ncmFwaENvbG9ycyIKK21zZ3N0ciAiIgorCisjOiBncmVwLmM6NjY4Cittc2dpZCAiIgorImdpdmVuIHBhdHRlcm4gY29udGFpbnMgTlVMTCBieXRlICh2aWEgLWYgPGZpbGU+KS4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCAiCisid2l0aCAtUCB1bmRlciBQQ1JFIHYyIgorbXNnc3RyICIiCisKKyM6IGdyZXAuYzoyMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICIiCisKKyM6IGdyZXAuYzoyMTQ1IHNldHVwLmM6MTY2IGJ1aWx0aW4vY2xvbmUuYzo0MTEgYnVpbHRpbi9kaWZmLmM6ODIKKyM6IGJ1aWx0aW4vcm0uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBncmVwLmM6MjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyMworbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyNAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyNQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MjYKK21zZ2lkICJncm93LCBtYXJrIGFuZCB0d2VhayB5b3VyIGNvbW1vbiBoaXN0b3J5IgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyNworbXNnaWQgImNvbGxhYm9yYXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzEKK21zZ2lkICJNYWluIFBvcmNlbGFpbiBDb21tYW5kcyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzIKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjMzCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzQKK21zZ2lkICJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzUKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjM2Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzcKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBTeW5jaW5nIFJlcG9zaXRvcmllcyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzgKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcm5hbCBIZWxwZXJzIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaWxhYmxlIGdpdCBjb21tYW5kcyBpbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzozMDUKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgIiIKKworIzogaGVscC5jOjMxNAorbXNnaWQgIlRoZXNlIGFyZSBjb21tb24gR2l0IGNvbW1hbmRzIHVzZWQgaW4gdmFyaW91cyBzaXR1YXRpb25zOiIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzYzIGdpdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciCittc2dzdHIgIiIKKworIzogaGVscC5jOjQwMworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6IgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzo1MTIKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgdG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQiCittc2dzdHIgIiIKKworIzogaGVscC5jOjUxNworbXNnaWQgIkV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzo1MzIKK21zZ2lkICJDb21tYW5kIGFsaWFzZXMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKworIzogaGVscC5jOjY1NQorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgIiIKKworIzogaGVscC5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIGluICUwLjFmIHNlY29uZHMsIGFzc3VtaW5nIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6Njk5Cittc2dpZCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZCBpcyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZHMgYXJlIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogaGVscC5jOjcxNAorbXNnaWQgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIC0gJXMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjc4NworbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGlkZW50LmM6MzQ5Cittc2dpZCAiIgorIlxuIgorIioqKiBQbGVhc2UgdGVsbCBtZSB3aG8geW91IGFyZS5cbiIKKyJcbiIKKyJSdW5cbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisidG8gc2V0IHlvdXIgYWNjb3VudCdzIGRlZmF1bHQgaWRlbnRpdHkuXG4iCisiT21pdCAtLWdsb2JhbCB0byBzZXQgdGhlIGlkZW50aXR5IG9ubHkgaW4gdGhpcyByZXBvc2l0b3J5LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGlkZW50LmM6Mzc5Cittc2dpZCAibm8gZW1haWwgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAiIgorCisjOiBpZGVudC5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgZW1haWwgYWRkcmVzcyAoZ290ICclcycpIgorbXNnc3RyICIiCisKKyM6IGlkZW50LmM6NDAxCittc2dpZCAibm8gbmFtZSB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICIiCisKKyM6IGlkZW50LmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBuYW1lIChnb3QgJyVzJykiCittc2dzdHIgIiIKKworIzogaWRlbnQuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgaWRlbnQgbmFtZSAoZm9yIDwlcz4pIG5vdCBhbGxvd2VkIgorbXNnc3RyICIiCisKKyM6IGlkZW50LmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIgorbXNnc3RyICIiCisKKyM6IGlkZW50LmM6NDM2IGJ1aWx0aW4vY29tbWl0LmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJlbnRyeSAnJXMnIGluIHRyZWUgJXMgaGFzIHRyZWUgbW9kZSwgYnV0IGlzIG5vdCBhIHRyZWUiCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgYmxvYiBtb2RlLCBidXQgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvYWQgcm9vdCB0cmVlIGZvciBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIHNwYXJzZSBibG9iIGluICclcyciCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugc3BhcnNlIGZpbHRlciBkYXRhIGluICVzIgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjU4Cittc2dpZCAiZXhwZWN0ZWQgJ3RyZWU6PGRlcHRoPiciCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NzMKK21zZ2lkICJzcGFyc2U6cGF0aCBmaWx0ZXJzIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbHRlci1zcGVjICclcyciCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11c3QgZXNjYXBlIGNoYXIgaW4gc3ViLWZpbHRlci1zcGVjOiAnJWMnIgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjE0NAorbXNnaWQgImV4cGVjdGVkIHNvbWV0aGluZyBhZnRlciBjb21iaW5lOiIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoyMjYKK21zZ2lkICJtdWx0aXBsZSBmaWx0ZXItc3BlY3MgY2Fubm90IGJlIGNvbWJpbmVkIgorbXNnc3RyICIiCisKKyM6IGxvY2tmaWxlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMuXG4iCisiXG4iCisiQW5vdGhlciBnaXQgcHJvY2VzcyBzZWVtcyB0byBiZSBydW5uaW5nIGluIHRoaXMgcmVwb3NpdG9yeSwgZS5nLlxuIgorImFuIGVkaXRvciBvcGVuZWQgYnkgJ2dpdCBjb21taXQnLiBQbGVhc2UgbWFrZSBzdXJlIGFsbCBwcm9jZXNzZXNcbiIKKyJhcmUgdGVybWluYXRlZCB0aGVuIHRyeSBhZ2Fpbi4gSWYgaXQgc3RpbGwgZmFpbHMsIGEgZ2l0IHByb2Nlc3NcbiIKKyJtYXkgaGF2ZSBjcmFzaGVkIGluIHRoaXMgcmVwb3NpdG9yeSBlYXJsaWVyOlxuIgorInJlbW92ZSB0aGUgZmlsZSBtYW51YWxseSB0byBjb250aW51ZS4iCittc2dzdHIgIiIKKworIzogbG9ja2ZpbGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLmM6NDEKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgY2FjaGUiCittc2dzdHIgIiIKKworIzogbWVyZ2UuYzoxMDcgcmVyZXJlLmM6NzIwIGJ1aWx0aW4vYW0uYzoxODc5IGJ1aWx0aW4vYW0uYzoxOTEzCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTQxIGJ1aWx0aW4vY2hlY2tvdXQuYzo4MDAgYnVpbHRpbi9jbG9uZS5jOjgxMAorIzogYnVpbHRpbi9zdGFzaC5jOjI2NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTYKK21zZ2lkICIoYmFkIGNvbW1pdClcbiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRfY2FjaGVpbmZvIGZhaWxlZCB0byByZWZyZXNoIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4OTkgbWVyZ2UtcmVjdXJzaXZlLmM6OTE4Cittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk0OSBidWlsdGluL2NhdC1maWxlLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBjaGVja2VkIG91dCkiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIG5vdCBwcmVzZW50KSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgZG9uJ3QgZm9sbG93IG1lcmdlLWJhc2UpIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMTMgbWVyZ2UtcmVjdXJzaXZlLmM6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIHRvIHRoZSBmb2xsb3dpbmcgY29tbWl0OiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjE2IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG1lcmdlIGZvbGxvd2luZyBjb21taXRzIG5vdCBmb3VuZCkiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChub3QgZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjU2Cittc2dpZCAiRm91bmQgYSBwb3NzaWJsZSBtZXJnZSByZXNvbHV0aW9uIGZvciB0aGUgc3VibW9kdWxlOlxuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHRoaXMgaXMgY29ycmVjdCBzaW1wbHkgYWRkIGl0IHRvIHRoZSBpbmRleCBmb3IgZXhhbXBsZVxuIgorImJ5IHVzaW5nOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisid2hpY2ggd2lsbCBhY2NlcHQgdGhpcyBzdWdnZXN0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobXVsdGlwbGUgbWVyZ2VzIGZvdW5kKSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzQxCittc2dpZCAiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IFJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IHdyaXRpbmcgdG8gJXMgaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjYKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUyNgorbXNnaWQgInJlbmFtZWQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU3NyBtZXJnZS1yZWN1cnNpdmUuYzoyNDcyIG1lcmdlLXJlY3Vyc2l2ZS5jOjMxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gIEFkZGVkICVzIGluICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY4MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBcIiVzXCItPlwiJXNcIiBpbiBicmFuY2ggXCIlc1wiIHJlbmFtZSBcIiVzIgorIlwiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcxMworbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZGlyZWN0b3J5IHJlbmFtZSBzcGxpdCk6IFVuY2xlYXIgd2hlcmUgdG8gcGxhY2UgJXMgYmVjYXVzZSAiCisiZGlyZWN0b3J5ICVzIHdhcyByZW5hbWVkIHRvIG11bHRpcGxlIG90aGVyIGRpcmVjdG9yaWVzLCB3aXRoIG5vIGRlc3RpbmF0aW9uICIKKyJnZXR0aW5nIGEgbWFqb3JpdHkgb2YgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IEV4aXN0aW5nIGZpbGUvZGlyIGF0ICVzIGluIHRoZSB3YXkgb2YgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWUocykgcHV0dGluZyB0aGUgZm9sbG93aW5nIHBhdGgocykgdGhlcmU6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IENhbm5vdCBtYXAgbW9yZSB0aGFuIG9uZSBwYXRoIHRvICVzOyAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZXMgdHJpZWQgdG8gcHV0IHRoZXNlIHBhdGhzIHRoZXJlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiBSZW5hbWUgZGlyZWN0b3J5ICVzLSIKKyI+JXMgaW4gJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjQzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogQXZvaWRpbmcgYXBwbHlpbmcgJXMgLT4gJXMgcmVuYW1lIHRvICVzLCBiZWNhdXNlICVzIGl0c2VsZiB3YXMgIgorInJlbmFtZWQuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyOAorbXNnaWQgIm1vZGlmeSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDI4Cittc2dpZCAibW9kaWZpZWQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA0MAorbXNnaWQgImNvbnRlbnQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA0NAorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA2NworIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA4OSBnaXQtc3VibW9kdWxlLnNoOjEwMDMKK21zZ2lkICJzdWJtb2R1bGUiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhdGggdXBkYXRlZDogJXMgYWRkZWQgaW4gJXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gJXM7ICIKKyJtb3ZpbmcgaXQgdG8gJXMuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgYWRkZWQgaW4gJXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgIgorImluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICIKKyIlczsgbW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0ICIKKyJ3YXMgcmVuYW1lZCBpbiAlcywgc3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzMyNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzUwCittc2dpZCAiZmlsZS9kaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM1NQorbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiBBZGRpbmcgJXMgYXMgJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoYWRkL2FkZCk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MjQKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUhIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1MzcKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzYwMAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIgICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM3NzQgYnVpbHRpbi9tZXJnZS5jOjY5NyBidWlsdGluL21lcmdlLmM6ODc3Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBmaWxlICVzIGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBzaWduYXR1cmUgMHglMDh4IGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggdmVyc2lvbiAlZCBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCB2ZXJzaW9uICV1IGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMDgKK21zZ2lkICJpbnZhbGlkIGNodW5rIG9mZnNldCAodG9vIGxhcmdlKSIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTMyCittc2dpZCAidGVybWluYXRpbmcgbXVsdGktcGFjay1pbmRleCBjaHVuayBpZCBhcHBlYXJzIGVhcmxpZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTQ1Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIHBhY2stbmFtZSBjaHVuayIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTQ3Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBmYW5vdXQgY2h1bmsiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjE0OQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgbG9va3VwIGNodW5rIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxNTEKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgb2JqZWN0IG9mZnNldHMgY2h1bmsiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHBhY2sgbmFtZXMgb3V0IG9mIG9yZGVyOiAnJXMnIGJlZm9yZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2staW50LWlkOiAldSAoJXUgdG90YWwgcGFja3MpIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoyNjAKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHN0b3JlcyBhIDY0LWJpdCBvZmZzZXQsIGJ1dCBvZmZfdCBpcyB0b28gc21hbGwiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjI4OAorbXNnaWQgImVycm9yIHByZXBhcmluZyBwYWNrZmlsZSBmcm9tIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWRkIHBhY2tmaWxlICclcyciCittc2dzdHIgIiIKKworIzogbWlkeC5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwYWNrLWluZGV4ICclcyciCittc2dzdHIgIiIKKworIzogbWlkeC5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9jYXRlIG9iamVjdCAlZCBpbiBwYWNrZmlsZSIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6ODQyCittc2dpZCAiQWRkaW5nIHBhY2tmaWxlcyB0byBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCBzZWUgcGFjay1maWxlICVzIHRvIGRyb3AiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjk3MworbXNnaWQgIldyaXRpbmcgY2h1bmtzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjExMDgKK21zZ2lkICJMb29raW5nIGZvciByZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisib2lkIGZhbm91dCBvdXQgb2Ygb3JkZXI6IGZhbm91dFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSBmYW5vdXRbJWRdIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMTI4Cittc2dpZCAiVmVyaWZ5aW5nIE9JRCBvcmRlciBpbiBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9pZCBsb29rdXAgb3V0IG9mIG9yZGVyOiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMTU3Cittc2dpZCAiU29ydGluZyBvYmplY3RzIGJ5IHBhY2tmaWxlIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMTY0Cittc2dpZCAiVmVyaWZ5aW5nIG9iamVjdCBvZmZzZXRzIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMTgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2sgZW50cnkgZm9yIG9pZFslZF0gPSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrLWluZGV4IGZvciBwYWNrZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvcnJlY3Qgb2JqZWN0IG9mZnNldCBmb3Igb2lkWyVkXSA9ICVzOiAlPFBSSXg2ND4gIT0gJTxQUkl4NjQ+IgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMjIwCittc2dpZCAiQ291bnRpbmcgcmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMjMwCittc2dpZCAiRmluZGluZyBhbmQgZGVsZXRpbmcgdW5yZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTM4OAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjE0MDcKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBuYW1lLWhhc2guYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsYXp5X2RpciB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5hbWUtaGFzaC5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5hbWUtaGFzaC5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsYXp5X25hbWUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBub3Rlcy1tZXJnZS5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIHByZXZpb3VzIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLlxuIgorIlBsZWFzZSwgdXNlICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG9yICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcgdG8gIgorImNvbW1pdC9hYm9ydCB0aGUgcHJldmlvdXMgbWVyZ2UgYmVmb3JlIHlvdSBzdGFydCBhIG5ldyBub3RlcyBtZXJnZS4iCittc2dzdHIgIiIKKworIzogbm90ZXMtbWVyZ2UuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLiIKK21zZ3N0ciAiIgorCisjOiBub3Rlcy11dGlscy5jOjQ2Cittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICIiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBub3Rlcy11dGlscy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mCisjLiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMKKyMuIGl0cyB2YWx1ZS4KKyMuCisjOiBub3Rlcy11dGlscy5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIiIKKworIzogb2JqZWN0LmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSBcIiVzXCIiCittc2dzdHIgIiIKKworIzogb2JqZWN0LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBhICVzLCBub3QgYSAlcyIKK21zZ3N0ciAiIgorCisjOiBvYmplY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGhhcyB1bmtub3duIHR5cGUgaWQgJWQiCittc2dzdHIgIiIKKworIzogb2JqZWN0LmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IG9iamVjdC5jOjI2NiBvYmplY3QuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCAlcyIKK21zZ3N0ciAiIgorCisjOiBwYWNrZmlsZS5jOjYyOQorbXNnaWQgIm9mZnNldCBiZWZvcmUgZW5kIG9mIHBhY2tmaWxlIChicm9rZW4gLmlkeD8pIgorbXNnc3RyICIiCisKKyM6IHBhY2tmaWxlLmM6MTg5OQorIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmVmb3JlIHN0YXJ0IG9mIHBhY2sgaW5kZXggZm9yICVzIChjb3JydXB0IGluZGV4PykiCittc2dzdHIgIiIKKworIzogcGFja2ZpbGUuYzoxOTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZXlvbmQgZW5kIG9mIHBhY2sgaW5kZXggZm9yICVzICh0cnVuY2F0ZWQgaW5kZXg/KSIKK21zZ3N0ciAiIgorCisjOiBwYWNrLWJpdG1hcC5jOjgwMCBwYWNrLWJpdG1hcC5jOjgwNiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBzaXplIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBpbmNvbXBhdGlibGUgd2l0aCBzb21ldGhpbmcgZWxzZSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTIgcGFyc2Utb3B0aW9ucy5jOjk2IHBhcnNlLW9wdGlvbnMuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGFrZXMgbm8gdmFsdWUiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzbid0IGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB3aXRoIGFuIG9wdGlvbmFsIGsvbS9nIHN1ZmZpeCIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyBvcHRpb246ICVzIChjb3VsZCBiZSAtLSVzJXMgb3IgLS0lcyVzKSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NDIwIHBhcnNlLW9wdGlvbnMuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIHlvdSBtZWFuIGAtLSVzYCAod2l0aCB0d28gZGFzaGVzKT8iCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiBgJXMnIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzd2l0Y2ggYCVjJyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm9uLWFzY2lpIG9wdGlvbiBpbiBzdHJpbmc6IGAlcyciCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg4NQorbXNnaWQgIi4uLiIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uIGhlcmUgc2hvdWxkIGFsaWduIHdpdGggdGhlCisjLiBvbmUgaW4gInVzYWdlOiAlcyIgdHJhbnNsYXRpb24uCisjLgorIzogcGFyc2Utb3B0aW9ucy5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICIgICBvcjogJXMiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJXMiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk1MgorbXNnaWQgIi1OVU0iCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBvZiAtLSVzIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoyMCBwYXJzZS1vcHRpb25zLWNiLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGV4cGlyYXRpb24gZGF0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIFwiYWx3YXlzXCIsIFwiYXV0b1wiLCBvciBcIm5ldmVyXCIiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjEzMCBwYXJzZS1vcHRpb25zLWNiLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHBhdGguYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzoxMzAKK21zZ2lkICJFc2NhcGUgY2hhcmFjdGVyICdcXCcgbm90IGFsbG93ZWQgYXMgbGFzdCBjaGFyYWN0ZXIgaW4gYXR0ciB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBwYXRoc3BlYy5jOjE0OAorbXNnaWQgIk9ubHkgb25lICdhdHRyOicgc3BlY2lmaWNhdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiIgorCisjOiBwYXRoc3BlYy5jOjE1MQorbXNnaWQgImF0dHIgc3BlYyBtdXN0IG5vdCBiZSBlbXB0eSIKK21zZ3N0ciAiIgorCisjOiBwYXRoc3BlYy5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6MjU5Cittc2dpZCAiZ2xvYmFsICdnbG9iJyBhbmQgJ25vZ2xvYicgcGF0aHNwZWMgc2V0dGluZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBwYXRoc3BlYy5jOjI2NgorbXNnaWQgIiIKKyJnbG9iYWwgJ2xpdGVyYWwnIHBhdGhzcGVjIHNldHRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIGdsb2JhbCAiCisicGF0aHNwZWMgc2V0dGluZ3MiCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzozMDYKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgcGF0aHNwZWMgbWFnaWMgJ3ByZWZpeCciCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXRoc3BlYyBtYWdpYyAnJS4qcycgaW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBwYXRoc3BlYy5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcpJyBhdCB0aGUgZW5kIG9mIHBhdGhzcGVjIG1hZ2ljIGluICclcyciCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICdsaXRlcmFsJyBhbmQgJ2dsb2InIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IGF0ICclcyciCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzo1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyAobW5lbW9uaWM6ICclYycpIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgaXMgYmFkbHkgcXVvdGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjk5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGRlbGltIHBhY2tldCIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjEwNgorbXNnaWQgImZsdXNoIHBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzoxNDYgcGt0LWxpbmUuYzoyMzIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzoxNjIgcGt0LWxpbmUuYzoxNjQKK21zZ2lkICJwYWNrZXQgd3JpdGUgd2l0aCBmb3JtYXQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MTk2Cittc2dpZCAicGFja2V0IHdyaXRlIGZhaWxlZCAtIGRhdGEgZXhjZWVkcyBtYXggcGFja2V0IHNpemUiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzoyMDMgcGt0LWxpbmUuYzoyMTAKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6Mjk1Cittc2dpZCAicmVhZCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjMwMworbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5IgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggY2hhcmFjdGVyOiAlLjRzIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MzQxIHBrdC1saW5lLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggJWQiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTE5Cittc2dpZCAiUmVmcmVzaGluZyBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHByZXR0eS5jOjk4MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgIiIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6MjMKK21zZ2lkICJSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgIiIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbWlzb3IgcmVtb3RlIG5hbWUgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIKK21zZ3N0ciAiIgorCisjOiByYW5nZS1kaWZmLmM6NzUKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgYGxvZ2AiCittc2dzdHIgIiIKKworIzogcmFuZ2UtZGlmZi5jOjc3Cittc2dpZCAiY291bGQgbm90IHJlYWQgYGxvZ2Agb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IHJhbmdlLWRpZmYuYzo5NiBzZXF1ZW5jZXIuYzo1MDIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByYW5nZS1kaWZmLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBnaXQgaGVhZGVyICclLipzJyIKK21zZ3N0ciAiIgorCisjOiByYW5nZS1kaWZmLmM6Mjg1Cittc2dpZCAiZmFpbGVkIHRvIGdlbmVyYXRlIGRpZmYiCittc2dzdHIgIiIKKworIzogcmFuZ2UtZGlmZi5jOjUxOCByYW5nZS1kaWZmLmM6NTIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBsb2cgZm9yICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBhZGQgZmlsZSBhbGlhcyAnJXMnICgnJXMnIGFscmVhZHkgZXhpc3RzIGluIGluZGV4KSIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6Njk2Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBhbiBlbXB0eSBibG9iIGluIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjcxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuIG9ubHkgYWRkIHJlZ3VsYXIgZmlsZXMsIHN5bWJvbGljIGxpbmtzIG9yIGdpdC1kaXJlY3RvcmllcyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBpbmRleCBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkICclcycgdG8gaW5kZXgiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXBwZWFycyBhcyBib3RoIGEgZmlsZSBhbmQgYXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE1MzYKK21zZ2lkICJSZWZyZXNoIGluZGV4IgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbmRleC52ZXJzaW9uIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJWQiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE3MjkKK21zZ2lkICJiYWQgaW5kZXggZmlsZSBzaGExIHNpZ25hdHVyZSIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCB1c2VzICUuNHMgZXh0ZW5zaW9uLCB3aGljaCB3ZSBkbyBub3QgdW5kZXJzdGFuZCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTc2MQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlLjRzIGV4dGVuc2lvbiIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGluZGV4IGVudHJ5IGZvcm1hdCAweCUwOHgiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG5hbWUgZmllbGQgaW4gdGhlIGluZGV4LCBuZWFyIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTg3MQorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGluIGluZGV4IgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHN0YWdlIGVudHJpZXMgZm9yIG1lcmdlZCBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgZm9yICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE5ODMgcmVhZC1jYWNoZS5jOjIyNzEgcmVyZXJlLmM6NTY1IHJlcmVyZS5jOjU5OSByZXJlcmUuYzoxMTExCisjOiBzdWJtb2R1bGUuYzoxNjE5IGJ1aWx0aW4vYWRkLmM6NTMyIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTgxCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDcwIGJ1aWx0aW4vY2hlY2tvdXQuYzo2NTYgYnVpbHRpbi9jbGVhbi5jOjk2NworIzogYnVpbHRpbi9jb21taXQuYzozNjcgYnVpbHRpbi9kaWZmLXRyZWUuYzoxMjAgYnVpbHRpbi9ncmVwLmM6NDg1CisjOiBidWlsdGluL212LmM6MTQ1IGJ1aWx0aW4vcmVzZXQuYzoyNDYgYnVpbHRpbi9ybS5jOjI5MAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjMzMgorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIG9wZW4gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgc3RhdCB0aGUgb3BlbiBpbmRleCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW5kZXggZmlsZSBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIxODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuYWJsZSB0byBtYXAgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmcmVzaGVuIHNoYXJlZCBpbmRleCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjMwMjYgc3RyYnVmLmM6MTE2MCB3cmFwcGVyLmM6NjIyIGJ1aWx0aW4vbWVyZ2UuYzoxMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzozMTI5IHNlcXVlbmNlci5jOjIzNDMgc2VxdWVuY2VyLmM6Mzk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzozMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIGdpdCBkaXI6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzozMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bmxpbms6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzozMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaXggcGVybWlzc2lvbiBiaXRzIG9uICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjMzMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBkcm9wIHRvIHN0YWdlICMwIgorbXNnc3RyICIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjExCittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoaXMgd2l0aCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlJy5cbiIKKyJPciB5b3UgY2FuIGFib3J0IHRoZSByZWJhc2Ugd2l0aCAnZ2l0IHJlYmFzZSAtLWFib3J0Jy5cbiIKK21zZ3N0ciAiIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzozMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5yZWNvZ25pemVkIHNldHRpbmcgJXMgZm9yIG9wdGlvbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JpbmcuIgorbXNnc3RyICIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjQyCittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21tYW5kPiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJiLCBicmVhayA9IHN0b3AgaGVyZSAoY29udGludWUgcmViYXNlIGxhdGVyIHdpdGggJ2dpdCByZWJhc2UgLS1jb250aW51ZScpXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLlxuIgorbXNnc3RyICIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmRzKSIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjcyIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMjgKK21zZ2lkICIiCisiXG4iCisiRG8gbm90IHJlbW92ZSBhbnkgbGluZS4gVXNlICdkcm9wJyBleHBsaWNpdGx5IHRvIHJlbW92ZSBhIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo3NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjMyCittc2dpZCAiIgorIlxuIgorIklmIHlvdSByZW1vdmUgYSBsaW5lIGhlcmUgVEhBVCBDT01NSVQgV0lMTCBCRSBMT1NULlxuIgorbXNnc3RyICIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjgxIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzEKK21zZ2lkICIiCisiXG4iCisiWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuXG4iCisiVG8gY29udGludWUgcmViYXNlIGFmdGVyIGVkaXRpbmcsIHJ1bjpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6ODYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0OAorbXNnaWQgIiIKKyJcbiIKKyJIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjExMCByZXJlcmUuYzo0ODUgcmVyZXJlLmM6NjkyIHNlcXVlbmNlci5jOjM0NDQKKyM6IHNlcXVlbmNlci5jOjM0NzAgc2VxdWVuY2VyLmM6NTEyNSBidWlsdGluL2ZzY2suYzozNDYgYnVpbHRpbi9yZWJhc2UuYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlICclcyciCittc2dzdHIgIiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTE2IGJ1aWx0aW4vcmViYXNlLmM6MTg0IGJ1aWx0aW4vcmViYXNlLmM6MjEwCisjOiBidWlsdGluL3JlYmFzZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iCittc2dzdHIgIiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS5cbiIKKyJEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKTpcbiIKK21zZ3N0ciAiIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIGF2b2lkIHRoaXMgbWVzc2FnZSwgdXNlIFwiZHJvcFwiIHRvIGV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LlxuIgorIlxuIgorIlVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiAiCisid2FybmluZ3MuXG4iCisiVGhlIHBvc3NpYmxlIGJlaGF2aW91cnMgYXJlOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjIzMyByZWJhc2UtaW50ZXJhY3RpdmUuYzoyMzggc2VxdWVuY2VyLmM6MjI2MgorIzogYnVpbHRpbi9yZWJhc2UuYzoxNzAgYnVpbHRpbi9yZWJhc2UuYzoxOTUgYnVpbHRpbi9yZWJhc2UuYzoyMjEKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcycuIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QhIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgZGFuZ2xpbmcgc3ltcmVmICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo2NjkgcmVmLWZpbHRlci5jOjIwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6ODA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo4MTQgcmVmcy5jOjg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciCittc2dzdHIgIiIKKworIzogcmVmcy5jOjgzMyBzZXF1ZW5jZXIuYzo0MDcgc2VxdWVuY2VyLmM6MjcwMSBzZXF1ZW5jZXIuYzoyOTA1CisjOiBzZXF1ZW5jZXIuYzoyOTE5IHNlcXVlbmNlci5jOjMxNzcgc2VxdWVuY2VyLmM6NTAzNiBzdHJidWYuYzoxMTU3CisjOiB3cmFwcGVyLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo4NjAgc3RyYnVmLmM6MTE1NSB3cmFwcGVyLmM6MTg4IHdyYXBwZXIuYzozNTggYnVpbHRpbi9hbS5jOjcxOQorIzogYnVpbHRpbi9yZWJhc2UuYzoxMDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgIiIKKworIzogcmVmcy5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG9iamVjdCBJRCB3aGVuIGRlbGV0aW5nICclcyciCittc2dzdHIgIiIKKworIzogcmVmcy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyBoYXMgZ2FwIGFmdGVyICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIHVuZXhwZWN0ZWRseSBlbmRlZCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICVzIGlzIGVtcHR5IgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIHVwZGF0ZSByZWYgd2l0aCBiYWQgbmFtZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVwZGF0ZV9yZWYgZmFpbGVkIGZvciByZWYgJyVzJzogJXMiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjIwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgdXBkYXRlcyBmb3IgcmVmICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjIwNTUKK21zZ2lkICJyZWYgdXBkYXRlcyBmb3JiaWRkZW4gaW5zaWRlIHF1YXJhbnRpbmUgZW52aXJvbm1lbnQiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjIxNTEgcmVmcy5jOjIxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6MjE1NyByZWZzLmM6MjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcHJvY2VzcyAnJXMnIGFuZCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIiIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIHJlZmVyZW5jZSAlcyIKK21zZ3N0ciAiIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjQ3IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTQxCisjOiByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZSAlczogJXMiCittc2dzdHIgIiIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI1MCByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnNwZWMuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZzcGVjICclcyciCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjQyIHd0LXN0YXR1cy5jOjE5MzgKK21zZ2lkICJnb25lIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo0MworIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmVoaW5kICVkIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCwgYmVoaW5kICVkIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShjb2xvcjo8Y29sb3I+KSIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBjb2xvcjogJSUoY29sb3I6JXMpIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOmxzdHJpcD0lcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpyc3RyaXA9JXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoJXMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKG9iamVjdHR5cGUpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdHNpemUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGRlbHRhYmFzZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJShib2R5KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKHN1YmplY3QpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAlJSh0cmFpbGVycykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgY29udGVudHM6bGluZXM9JXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoY29udGVudHMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIG9iamVjdG5hbWU6c2hvcnQ9JXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0bmFtZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShhbGlnbjo8d2lkdGg+LDxwb3NpdGlvbj4pIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBvc2l0aW9uOiVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdpZHRoOiVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGFsaWduKSBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB3aWR0aCBleHBlY3RlZCB3aXRoIHRoZSAlJShhbGlnbikgYXRvbSIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShpZikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnksIGJ1dCB0aGUgZmllbGQgJyUuKnMnIHJlcXVpcmVzIGFjY2VzcyB0byBvYmplY3QgZGF0YSIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoaWYpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6Nzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIGFmdGVyICUlKGVsc2UpIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSB1c2VkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBhdG9tIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIHJlYmFzaW5nIGRldGFjaGVkIEhFQUQgJXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MTUwNAorbXNnaWQgIm5vIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MTU0MCByZWYtZmlsdGVyLmM6MTc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWlsZWQgb24gJXMgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MjA5MworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSBtaXNzaW5nIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8tbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBtdXN0IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjQxNAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgcmVjZWl2ZXBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzo0MjIKK21zZ2lkICJtb3JlIHRoYW4gb25lIHVwbG9hZHBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1c3VhbGx5IHRyYWNrcyAlcywgbm90ICVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjYyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImtleSAnJXMnIG9mIHBhdHRlcm4gaGFkIG5vICcqJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsdWUgJyVzJyBvZiBwYXR0ZXJuIGhhcyBubyAnKiciCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTAwOQorIywgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICJtYXRjaGVzICclcyclIiBpcyB0aGUgPGRzdD4gcGFydCBvZiAiZ2l0IHB1c2gKKyMuIDxyZW1vdGU+IDxzcmM+Ojxkc3Q+IiBwdXNoLCBhbmQgImJlaW5nIHB1c2hlZCAoJyVzJykiIGlzCisjLiB0aGUgPHNyYz4uCisjLgorIzogcmVtb3RlLmM6MTAyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRlc3RpbmF0aW9uIHlvdSBwcm92aWRlZCBpcyBub3QgYSBmdWxsIHJlZm5hbWUgKGkuZS4sXG4iCisic3RhcnRpbmcgd2l0aCBcInJlZnMvXCIpLiBXZSB0cmllZCB0byBndWVzcyB3aGF0IHlvdSBtZWFudCBieTpcbiIKKyJcbiIKKyItIExvb2tpbmcgZm9yIGEgcmVmIHRoYXQgbWF0Y2hlcyAnJXMnIG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyItIENoZWNraW5nIGlmIHRoZSA8c3JjPiBiZWluZyBwdXNoZWQgKCclcycpXG4iCisiICBpcyBhIHJlZiBpbiBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBJZiBzbyB3ZSBhZGQgYSBjb3JyZXNwb25kaW5nXG4iCisiICByZWZzL3toZWFkcyx0YWdzfS8gcHJlZml4IG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyJcbiIKKyJOZWl0aGVyIHdvcmtlZCwgc28gd2UgZ2F2ZSB1cC4gWW91IG11c3QgZnVsbHkgcXVhbGlmeSB0aGUgcmVmLiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGNvbW1pdCBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL2hlYWRzLyVzJz8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTA0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0YWcgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgdGFnIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTA1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IHRyZWUgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGJsb2Igb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgYmxvYiBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjEwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMTA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWxldGUgJyVzJzogcmVtb3RlIHJlZiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWYgJXMgcmVjZWl2ZXMgZnJvbSBtb3JlIHRoYW4gb25lIHNyYyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxNjI4IHJlbW90ZS5jOjE3MjkKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjE2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjE2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTY3MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjE2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjE2OTYKK21zZ2lkICJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTcxOAorbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTg0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgJXMiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTg1NworIywgYy1mb3JtYXQKK21zZ2lkICIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MjAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiYXNlZCBvbiAnJXMnLCBidXQgdGhlIHVwc3RyZWFtIGlzIGdvbmUuXG4iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MjAyNAorbXNnaWQgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAgdG8gZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MjAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBhbmQgJyVzJyByZWZlciB0byBkaWZmZXJlbnQgY29tbWl0cy5cbiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoyMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcIiVzXCIgZm9yIGRldGFpbHMpXG4iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MjAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogcmVtb3RlLmM6MjA0NAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MjA0NworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogcmVtb3RlLmM6MjA1NQorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gdXBkYXRlIHlvdXIgbG9jYWwgYnJhbmNoKVxuIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjIwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogcmVtb3RlLmM6MjA2OAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycylcbiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoyMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBleHBlY3RlZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcGxhY2UgcmVmIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgZGVwdGggdG9vIGhpZ2ggZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzoyMTcgcmVyZXJlLmM6MjI2IHJlcmVyZS5jOjIyOQorbXNnaWQgImNvcnJ1cHQgTUVSR0VfUlIiCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6MjY0IHJlcmVyZS5jOjI2OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXJlcmUgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICclcycgKCVzKSIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZsdXNoICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6NTAzIHJlcmVyZS5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbmZsaWN0IGh1bmtzIGluICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB1dGltZSgpIG9uICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjc1MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNvcmRlZCByZXNvbHV0aW9uIGZvciAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzb2x2ZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayBzdHJheSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNvcmRlZCBwcmVpbWFnZSBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo4ODEgc3VibW9kdWxlLmM6MjA3OCBidWlsdGluL2xvZy5jOjE4NzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDU0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIGNvbmZsaWN0ZWQgc3RhdGUgaW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzoxMDY4IHJlcmVyZS5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjEwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjEwODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCBwcmVpbWFnZSBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzoxMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvcmdvdCByZXNvbHV0aW9uIGZvciAnJXMnXG4iCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6MTE5OQorbXNnaWQgInVuYWJsZSB0byBvcGVuIHJyLWNhY2hlIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiByZXZpc2lvbi5jOjI0OTcKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoIGFwcGVhcnMgdG8gYmUgYnJva2VuIgorbXNnc3RyICIiCisKKyM6IHJldmlzaW9uLmM6MjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycgZG9lcyBub3QgaGF2ZSBhbnkgY29tbWl0cyB5ZXQiCittc2dzdHIgIiIKKworIzogcmV2aXNpb24uYzoyNzA4Cittc2dpZCAiLS1maXJzdC1wYXJlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1iaXNlY3QiCittc2dzdHIgIiIKKworIzogcmV2aXNpb24uYzoyNzEyCittc2dpZCAiLUwgZG9lcyBub3QgeWV0IHN1cHBvcnQgZGlmZiBmb3JtYXRzIGJlc2lkZXMgLXAgYW5kIC1zIgorbXNnc3RyICIiCisKKyM6IHJ1bi1jb21tYW5kLmM6NzYzCittc2dpZCAib3BlbiAvZGV2L251bGwgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHJ1bi1jb21tYW5kLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFzeW5jIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogcnVuLWNvbW1hbmQuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJyVzJyBob29rIHdhcyBpZ25vcmVkIGJlY2F1c2UgaXQncyBub3Qgc2V0IGFzIGV4ZWN1dGFibGUuXG4iCisiWW91IGNhbiBkaXNhYmxlIHRoaXMgd2FybmluZyB3aXRoIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAuIgorbXNnc3RyICIiCisKKyM6IHNlbmQtcGFjay5jOjE0NAorbXNnaWQgInVuZXhwZWN0ZWQgZmx1c2ggcGFja2V0IHdoaWxlIHJlYWRpbmcgcmVtb3RlIHVucGFjayBzdGF0dXMiCittc2dzdHIgIiIKKworIzogc2VuZC1wYWNrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSByZW1vdGUgdW5wYWNrIHN0YXR1czogJXMiCittc2dzdHIgIiIKKworIzogc2VuZC1wYWNrLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSB1bnBhY2sgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZW5kLXBhY2suYzozMDkKK21zZ2lkICJmYWlsZWQgdG8gc2lnbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSIKK21zZ3N0ciAiIgorCisjOiBzZW5kLXBhY2suYzo0MjMKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIHB1c2giCittc2dzdHIgIiIKKworIzogc2VuZC1wYWNrLmM6NDI1Cittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tIgorInNpZ25lZCBwdXNoIgorbXNnc3RyICIiCisKKyM6IHNlbmQtcGFjay5jOjQzNworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMgcHVzaCIKK21zZ3N0ciAiIgorCisjOiBzZW5kLXBhY2suYzo0NDIKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IHB1c2ggb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgbWVzc2FnZSBjbGVhbnVwIG1vZGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMxNSBidWlsdGluL3JlYmFzZS5jOjc4NSBidWlsdGluL3JlYmFzZS5jOjE3NTAgYnVpbHRpbi9ybS5jOjM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzI1Cittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMyNworbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMyOQorbXNnaWQgInJlYmFzZSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBhY3Rpb246ICVkIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM4OQorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM5MgorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQwNSBzZXF1ZW5jZXIuYzoyOTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb2NrICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBlb2wgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MTcgc2VxdWVuY2VyLmM6MjcwNiBzZXF1ZW5jZXIuYzoyOTA3IHNlcXVlbmNlci5jOjI5MjEKKyM6IHNlcXVlbmNlci5jOjMxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDQwIHNlcXVlbmNlci5jOjE2MTMgc2VxdWVuY2VyLmM6MjcyNiBzZXF1ZW5jZXIuYzozMTY3CisjOiBzZXF1ZW5jZXIuYzozMjc2IGJ1aWx0aW4vYW0uYzoyNDkgYnVpbHRpbi9jb21taXQuYzo3ODcgYnVpbHRpbi9tZXJnZS5jOjExMjAKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlcy4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDcwCittc2dpZCAiY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFzdC1mb3J3YXJkIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjU0MSBidWlsdGluL3RhZy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiwgImNoZXJyeS1waWNrIiBvcgorIy4gInJlYmFzZSIuCisjLgorIzogc2VxdWVuY2VyLmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NjUyCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjY2NgorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBrZXkgcHJlc2VudCBpbiAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZXF1b3RlIHZhbHVlIG9mICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Nzk0IHdyYXBwZXIuYzoxOTAgd3JhcHBlci5jOjM2MCBidWlsdGluL2FtLmM6NzEwCisjOiBidWlsdGluL2FtLmM6ODAyIGJ1aWx0aW4vbWVyZ2UuYzoxMTE3IGJ1aWx0aW4vcmViYXNlLmM6MTA3MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjgwNAorbXNnaWQgIidHSVRfQVVUSE9SX05BTUUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODA5Cittc2dpZCAiJ0dJVF9BVVRIT1JfRU1BSUwnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODE0Cittc2dpZCAiJ0dJVF9BVVRIT1JfREFURScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YXJpYWJsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjgyMworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfTkFNRSciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODI1Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9FTUFJTCciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODI3Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9EQVRFJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInlvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmUgc3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMTQ4Cittc2dpZCAiJ3ByZXBhcmUtY29tbWl0LW1zZycgaG9vayBmYWlsZWQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTE1NAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMTY3Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEyMDkKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEyMTEKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTI1NworbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEyNTkKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEyNjMKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMjg0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTI5MCBzZXF1ZW5jZXIuYzoxMzY0IGJ1aWx0aW4vY29tbWl0LmM6MTU3NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMzQyIHNlcXVlbmNlci5jOjE5NjgKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0IGF1dGhvciIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMzUzIGJ1aWx0aW4vYW0uYzoxNTY2IGJ1aWx0aW4vbWVyZ2UuYzo2ODcKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEzODYgc2VxdWVuY2VyLmM6MTQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb21taXQgbWVzc2FnZSBmcm9tICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTQxMyBidWlsdGluL2FtLmM6MTU4OCBidWlsdGluL2NvbW1pdC5jOjE2NzMgYnVpbHRpbi9tZXJnZS5jOjg4NgorIzogYnVpbHRpbi9tZXJnZS5jOjkxMQorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE1NjIgc2VxdWVuY2VyLmM6MTY3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQ6ICVkIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE2MjAgc2VxdWVuY2VyLmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJWQgY29tbWl0cy4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTYzMAorbXNnaWQgIm5lZWQgYSBIRUFEIHRvIGZpeHVwIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE2MzIgc2VxdWVuY2VyLmM6MzIxMgorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTYzNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQncyBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE2NDcgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5NgorbXNnaWQgIlRoaXMgaXMgdGhlIDFzdCBjb21taXQgbWVzc2FnZToiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTY1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZSBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMlZDoiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyVkIHdpbGwgYmUgc2tpcHBlZDoiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTc1NgorbXNnaWQgInlvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTc2MworbXNnaWQgImNhbm5vdCBmaXh1cCByb290IGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNzkwIHNlcXVlbmNlci5jOjE3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGRvZXMgbm90IGhhdmUgcGFyZW50ICVkIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE4MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlIGEgInRvZG8iIGNvbW1hbmQgbGlrZQorIy4gInJldmVydCIgb3IgInBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMS4KKyM6IHNlcXVlbmNlci5jOjE4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTk0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHJvcHBpbmcgJXMgJXMgLS0gcGF0Y2ggY29udGVudHMgYWxyZWFkeSB1cHN0cmVhbVxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjIwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IGFjY2VwdCBhcmd1bWVudHM6ICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50cyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMjE0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAnJXMnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjI5OAorbXNnaWQgImNhbmNlbGxpbmcgYSBjaGVycnkgcGlja2luZyBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMzA1Cittc2dpZCAiY2FuY2VsbGluZyBhIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMzQ5Cittc2dpZCAicGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMzU2Cittc2dpZCAibm8gY29tbWl0cyBwYXJzZWQuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjIzNjcKK21zZ2lkICJjYW5ub3QgY2hlcnJ5LXBpY2sgZHVyaW5nIGEgcmV2ZXJ0LiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMzY5Cittc2dpZCAiY2Fubm90IHJldmVydCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjU0MAorbXNnaWQgInVudXNhYmxlIHNxdWFzaC1vbnRvIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjY0NCBzZXF1ZW5jZXIuYzo0MzYxCittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjY2MAorbXNnaWQgInJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IHJldmVydCAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNjY1Cittc2dpZCAiY2hlcnJ5LXBpY2sgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNjgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgc2VxdWVuY2VyIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI2OTYKK21zZ2lkICJjb3VsZCBub3QgbG9jayBIRUFEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI3NTYgc2VxdWVuY2VyLmM6NDA5OQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU4IHNlcXVlbmNlci5jOjI3NjkKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI3NjAgc2VxdWVuY2VyLmM6MjgwNAorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI3OTAgYnVpbHRpbi9ncmVwLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mjc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNzkzCittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNzk5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyODEwCittc2dpZCAiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFELiBOb3QgcmV3aW5kaW5nLCBjaGVjayB5b3VyIEhFQUQhIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI4NTEKK21zZ2lkICJubyByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mjg1OQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIGluIHByb2dyZXNzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI4NjkKK21zZ2lkICJmYWlsZWQgdG8gc2tpcCB0aGUgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI4NzYKK21zZ2lkICJ0aGVyZSBpcyBub3RoaW5nIHRvIHNraXAiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mjg3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaGF2ZSB5b3UgY29tbWl0dGVkIGFscmVhZHk/XG4iCisidHJ5IFwiZ2l0ICVzIC0tY29udGludWVcIiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMDAzIHNlcXVlbmNlci5jOjQwMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMDQyIHNlcXVlbmNlci5jOjM5OTEKK21zZ2lkICJjYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzA3NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJXMuLi4gJS4qcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtZXJnZSAlLipzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMwOTggc2VxdWVuY2VyLmM6MzEwMiBidWlsdGluL2RpZmZ0b29sLmM6NjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gZmFpbGVkOiAlc1xuIgorIiVzWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzEzNQorbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIHN1Y2NlZWRlZDogJXNcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGxhYmVsIG5hbWU6ICclLipzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMjU2Cittc2dpZCAid3JpdGluZyBmYWtlIHJvb3QgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMyNjEKK21zZ2lkICJ3cml0aW5nIHNxdWFzaC1vbnRvIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMyOTkgYnVpbHRpbi9yZWJhc2UuYzo4ODAgYnVpbHRpbi9yZWJhc2UuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzM3NQorbXNnaWQgImNhbm5vdCBtZXJnZSB3aXRob3V0IGEgY3VycmVudCByZXZpc2lvbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMzk3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIG1lcmdlOiAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzQxOAorbXNnaWQgIm9jdG9wdXMgbWVyZ2UgY2Fubm90IGJlIGV4ZWN1dGVkIG9uIHRvcCBvZiBhIFtuZXcgcm9vdF0iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIG9mICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXZlbiBhdHRlbXB0IHRvIG1lcmdlICclLipzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNjEwCittc2dpZCAibWVyZ2U6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNjc5IGJ1aWx0aW4vcmViYXNlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLlxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0b3JlICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM2OTQgYnVpbHRpbi9yZWJhc2UuYzo3NTMgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKyJZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLlxuIgorIllvdSBjYW4gcnVuIFwiZ2l0IHN0YXNoIHBvcFwiIG9yIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdCBhbnkgdGltZS5cbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSB2YWxpZCBPSUQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzc2MCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Nzc5Cittc2dpZCAiY291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCBIRUFEXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzc3NworIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzc4NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGV4ZWN1dGUgdGhlIHRvZG8gY29tbWFuZFxuIgorIlxuIgorIiAgICAlLipzXG4iCisiSXQgaGFzIGJlZW4gcmVzY2hlZHVsZWQ7IFRvIGVkaXQgdGhlIGNvbW1hbmQgYmVmb3JlIGNvbnRpbnVpbmcsIHBsZWFzZVxuIgorImVkaXQgdGhlIHRvZG8gbGlzdCBmaXJzdDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXMuLi4gICUuKnNcbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozOTQwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZCAlZCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozOTk5Cittc2dpZCAiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQwMDQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnb250byciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlIEhFQUQgdG8gJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDExMQorbXNnaWQgImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQxMjAKK21zZ2lkICJjYW5ub3QgYW1lbmQgbm9uLWV4aXN0aW5nIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29udGVudHM6ICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDEyNworbXNnaWQgIiIKKyJcbiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UsIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MTYzIHNlcXVlbmNlci5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGZpbGU6ICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDIxNworbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MjI0Cittc2dpZCAiY291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDMzOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBiYWQgcmV2aXNpb24iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDM3NworbXNnaWQgImNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0ODQ2Cittc2dpZCAibWFrZV9zY3JpcHQ6IHVuaGFuZGxlZCBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ4NDkKK21zZ2lkICJtYWtlX3NjcmlwdDogZXJyb3IgcHJlcGFyaW5nIHJldmlzaW9ucyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo1MDgzIHNlcXVlbmNlci5jOjUxMDAKK21zZ2lkICJub3RoaW5nIHRvIGRvIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjUxMTkKK21zZ2lkICJjb3VsZCBub3Qgc2tpcCB1bm5lY2Vzc2FyeSBwaWNrIGNvbW1hbmRzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjUyMTMKK21zZ2lkICJ0aGUgc2NyaXB0IHdhcyBhbHJlYWR5IHJlYXJyYW5nZWQuIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IGF0ICclcyciCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBubyBzdWNoIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJ2dpdCA8Y29tbWFuZD4gLS0gPHBhdGg+Li4uJyB0byBzcGVjaWZ5IHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGxvY2FsbHkuIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogdW5rbm93biByZXZpc2lvbiBvciBwYXRoIG5vdCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gJyVzJyBtdXN0IGNvbWUgYmVmb3JlIG5vbi1vcHRpb24gYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWVcbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKworIzogc2V0dXAuYzo0MDkKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHVwIHdvcmsgdHJlZSB1c2luZyBpbnZhbGlkIGNvbmZpZyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjQxMworbXNnaWQgInRoaXMgb3BlcmF0aW9uIG11c3QgYmUgcnVuIGluIGEgd29yayB0cmVlIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6NTY3Cittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbGFyZ2UgdG8gYmUgYSAuZ2l0IGZpbGU6ICclcyciCittc2dzdHIgIiIKKworIzogc2V0dXAuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGdpdGZpbGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBwYXRoIGluIGdpdGZpbGU6ICVzIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICInJCVzJyB0b28gYmlnIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6NzM4IHNldHVwLmM6NzQwIHNldHVwLmM6NzcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6NzQzIHNldHVwLmM6Nzk5IHNldHVwLmM6ODA5IHNldHVwLmM6ODQ4IHNldHVwLmM6ODU2Cittc2dpZCAiY2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIiIKKworIzogc2V0dXAuYzo4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyUqcyVzJXMnIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6MTEwOAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoxMTE3IHNldHVwLmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hhbmdlIHRvICclcyciCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisiU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS4iCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoxMjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwcm9ibGVtIHdpdGggY29yZS5zaGFyZWRSZXBvc2l0b3J5IGZpbGVtb2RlIHZhbHVlICgwJS4zbykuXG4iCisiVGhlIG93bmVyIG9mIGZpbGVzIG11c3QgYWx3YXlzIGhhdmUgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMuIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6MTI4OQorbXNnaWQgIm9wZW4gL2Rldi9udWxsIG9yIGR1cCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoxMzA0Cittc2dpZCAiZm9yayBmYWlsZWQiCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoxMzA5Cittc2dpZCAic2V0c2lkIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdDsgY2hlY2sgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG5vcm1hbGl6ZSBhbHRlcm5hdGUgb2JqZWN0IHBhdGg6ICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWdub3JpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgb2JqZWN0IGRpcmVjdG9yeTogJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NjI1Cittc2dpZCAidW5hYmxlIHRvIGZkb3BlbiBhbHRlcm5hdGVzIGxvY2tmaWxlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjY0MworbXNnaWQgInVuYWJsZSB0byByZWFkIGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo2NTAKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSBuZXcgYWx0ZXJuYXRlcyBmaWxlIGludG8gcGxhY2UiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBhcyBhIGxpbmtlZCBjaGVja291dCBpcyBub3Qgc3VwcG9ydGVkIHlldC4iCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgc2hhbGxvdyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgd2hpbGUgcGFyc2luZyBhbHRlcm5hdGUgcmVmczogJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo5NjQKK21zZ2lkICJtbWFwIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBmaWxlICVzIGlzIGVtcHR5IgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjEyNjMgc2hhMS1maWxlLmM6MjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjEyNjUgc2hhMS1maWxlLmM6MjQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJnYXJiYWdlIGF0IGVuZCBvZiBsb29zZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMzA3Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMzkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNDAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNDAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTYyOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTYzMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlbWVudCAlcyBub3QgZm91bmQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZWQgb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgcGVybWlzc2lvbiB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE3NjAKK21zZ2lkICJmaWxlIHdyaXRlIGVycm9yIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE3ODAKK21zZ2lkICJlcnJvciB3aGVuIGNsb3NpbmcgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgYWRkaW5nIGFuIG9iamVjdCB0byByZXBvc2l0b3J5IGRhdGFiYXNlICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE4NDcKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE4NzEKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTg3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBuZXcgb2JqZWN0ICVzICglZCkiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTg4MQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlRW5kIG9uIG9iamVjdCAlcyBmYWlsZWQgKCVkKSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZ1c2VkIGJ5IHVuc3RhYmxlIG9iamVjdCBzb3VyY2UgZGF0YSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTg5NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTk3MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjIwMTEKK21zZ2lkICJjb3JydXB0IGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyMDE5Cittc2dpZCAiY29ycnVwdCB0YWciCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MjExOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIGVycm9yIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjIxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgcmVhZCB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyMTk1IHNoYTEtZmlsZS5jOjIyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyMjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnN1cHBvcnRlZCBmaWxlIHR5cGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCBvYmplY3QiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MjIzNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyMjY0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyNDU0IHNoYTEtZmlsZS5jOjI1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCBmb3IgJXMgKGV4cGVjdGVkICVzKSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjI0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayBoZWFkZXIgb2YgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgaGVhZGVyIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjI1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayBjb250ZW50cyBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLW5hbWUuYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgU0hBMSAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIiIKKworIzogc2hhMS1uYW1lLmM6NDk3Cittc2dpZCAiVGhlIGNhbmRpZGF0ZXMgYXJlOiIKK21zZ3N0ciAiIgorCisjOiBzaGExLW5hbWUuYzo3OTYKK21zZ2lkICIiCisiR2l0IG5vcm1hbGx5IG5ldmVyIGNyZWF0ZXMgYSByZWYgdGhhdCBlbmRzIHdpdGggNDAgaGV4IGNoYXJhY3RlcnNcbiIKKyJiZWNhdXNlIGl0IHdpbGwgYmUgaWdub3JlZCB3aGVuIHlvdSBqdXN0IHNwZWNpZnkgNDAtaGV4LiBUaGVzZSByZWZzXG4iCisibWF5IGJlIGNyZWF0ZWQgYnkgbWlzdGFrZS4gRm9yIGV4YW1wbGUsXG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorIlxuIgorIndoZXJlIFwiJGJyXCIgaXMgc29tZWhvdyBlbXB0eSBhbmQgYSA0MC1oZXggcmVmIGlzIGNyZWF0ZWQuIFBsZWFzZVxuIgorImV4YW1pbmUgdGhlc2UgcmVmcyBhbmQgbWF5YmUgZGVsZXRlIHRoZW0uIFR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieVxuIgorInJ1bm5pbmcgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIgorbXNnc3RyICIiCisKKyM6IHNoYTEtbmFtZS5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICclLipzJyBvbmx5IGdvZXMgYmFjayB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLW5hbWUuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciAnJS4qcycgb25seSBoYXMgJWQgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLW5hbWUuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBleGlzdHMgb24gZGlzaywgYnV0IG5vdCBpbiAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2hhMS1uYW1lLmM6MTY5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicGF0aCAnJXMnIGV4aXN0cywgYnV0IG5vdCAnJXMnXG4iCisiaGludDogRGlkIHlvdSBtZWFuICclLipzOiVzJyBha2EgJyUuKnM6Li8lcyc/IgorbXNnc3RyICIiCisKKyM6IHNoYTEtbmFtZS5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IGluICclLipzJyIKK21zZ3N0ciAiIgorCisjOiBzaGExLW5hbWUuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXRoICclcycgaXMgaW4gdGhlIGluZGV4LCBidXQgbm90IGF0IHN0YWdlICVkXG4iCisiaGludDogRGlkIHlvdSBtZWFuICc6JWQ6JXMnPyIKK21zZ3N0ciAiIgorCisjOiBzaGExLW5hbWUuYzoxNzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXRoICclcycgaXMgaW4gdGhlIGluZGV4LCBidXQgbm90ICclcydcbiIKKyJoaW50OiBEaWQgeW91IG1lYW4gJzolZDolcycgYWthICc6JWQ6Li8lcyc/IgorbXNnc3RyICIiCisKKyM6IHNoYTEtbmFtZS5jOjE3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGV4aXN0cyBvbiBkaXNrLCBidXQgbm90IGluIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBzaGExLW5hbWUuYzoxNzU4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCAobmVpdGhlciBvbiBkaXNrIG5vciBpbiB0aGUgaW5kZXgpIgorbXNnc3RyICIiCisKKyM6IHNoYTEtbmFtZS5jOjE3NzEKK21zZ2lkICJyZWxhdGl2ZSBwYXRoIHN5bnRheCBjYW4ndCBiZSB1c2VkIG91dHNpZGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtbmFtZS5jOjE5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgbmFtZSAnJS4qcycuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZQorIzogc3RyYnVmLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEdpQiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCL3MiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlCisjOiBzdHJidWYuYzo4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIvcyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBLaUIiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQi9zIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlCisjOiBzdHJidWYuYzo4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiJXUgYnl0ZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg2NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlL3MiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzL3MiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBzdHJidWYuYzoxMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBlZGl0ICclcyciCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTE0IHN1Ym1vZHVsZS5jOjE0MworbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdW5tZXJnZWQgLmdpdG1vZHVsZXMsIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIGZpcnN0IgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjExOCBzdWJtb2R1bGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIC5naXRtb2R1bGVzIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxNjUKK21zZ2lkICJzdGFnaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJpbiB1bnBvcHVsYXRlZCBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzozNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0aHNwZWMgJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS1pZ25vcmUtc3VibW9kdWxlcyBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgaW4gY29tbWl0ICVzIGF0IHBhdGg6ICclcycgY29sbGlkZXMgd2l0aCBhIHN1Ym1vZHVsZSBuYW1lZCB0aGUgIgorInNhbWUuIFNraXBwaW5nIGl0LiIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGVudHJ5ICclcycgKCVzKSBpcyBhICVzLCBub3QgYSBjb21taXQiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QgPGNvbW1pdHM+IC0tbm90IC0tcmVtb3RlcyAtbiAxJyBjb21tYW5kIGluICIKKyJzdWJtb2R1bGUgJXMiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9jZXNzIGZvciBzdWJtb2R1bGUgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTE0NyBidWlsdGluL2JyYW5jaC5jOjY4MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjA0NQorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjExNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjExNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHB1c2ggc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxNDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIHN1Ym1vZHVsZSAlcyVzXG4iCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYWNjZXNzIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTYzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3JzIGR1cmluZyBzdWJtb2R1bGUgZmV0Y2g6XG4iCisiJXMiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTY2MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG5vdCByZWNvZ25pemVkIGFzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTInIGluIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxNzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIidnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTInIGZhaWxlZCBpbiBzdWJtb2R1bGUgJXMiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjE4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdW5zZXQgY29yZS53b3JrdHJlZSBzZXR0aW5nIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjE4NTUgc3VibW9kdWxlLmM6MjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjE4NzYKK21zZ2lkICJjb3VsZCBub3QgcmVzZXQgc3VibW9kdWxlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjE5MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgaGFzIGRpcnR5IGluZGV4IgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjE5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgY291bGQgbm90IGJlIHVwZGF0ZWQuIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGdpdCBkaXIgJyVzJyBpcyBpbnNpZGUgZ2l0IGRpciAnJS4qcyciCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MjA1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicmVsb2NhdGVfZ2l0ZGlyIGZvciBzdWJtb2R1bGUgJyVzJyB3aXRoIG1vcmUgdGhhbiBvbmUgd29ya3RyZWUgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoyMDcxIHN1Ym1vZHVsZS5jOjIxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBuYW1lIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoyMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG1vdmUgJyVzJyBpbnRvIGFuIGV4aXN0aW5nIGdpdCBkaXIiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MjA4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTWlncmF0aW5nIGdpdCBkaXJlY3Rvcnkgb2YgJyVzJXMnIGZyb21cbiIKKyInJXMnIHRvXG4iCisiJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjIyMDkKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgbHMtZmlsZXMgaW4gLi4iCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJscy10cmVlIHJldHVybmVkIHVuZXhwZWN0ZWQgcmV0dXJuIGNvZGUgJWQiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBzdXNwaWNpb3VzIHN1Ym1vZHVsZSBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MzAzCittc2dpZCAibmVnYXRpdmUgdmFsdWVzIG5vdCBhbGxvd2VkIGZvciBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJyVzJyB3aGljaCBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSAuZ2l0bW9kdWxlcyBlbnRyeSAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFpbGVyLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgdHJhaWxlciBjb21tYW5kICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzo0ODUgdHJhaWxlci5jOjQ5MCB0cmFpbGVyLmM6NDk1IHRyYWlsZXIuYzo1NDkgdHJhaWxlci5jOjU1MworIzogdHJhaWxlci5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzo1MzkgdHJhaWxlci5jOjU0NCBidWlsdGluL3JlbW90ZS5jOjI5OCBidWlsdGluL3JlbW90ZS5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgdHJhaWxlciB0b2tlbiBpbiB0cmFpbGVyICclLipzJyIKK21zZ3N0ciAiIgorCisjOiB0cmFpbGVyLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiB0cmFpbGVyLmM6NzUzCittc2dpZCAiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiIgorCisjOiB0cmFpbGVyLmM6MTAxMSB3cmFwcGVyLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IGEgcmVndWxhciBmaWxlIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IHdyaXRhYmxlIGJ5IHVzZXIiCittc2dzdHIgIiIKKworIzogdHJhaWxlci5jOjEwMjcKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAiIgorCisjOiB0cmFpbGVyLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBzZXQgdXBzdHJlYW0gb2YgJyVzJyB0byAnJXMnIG9mICclcydcbiIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgYnVuZGxlICclcyciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzoyNjYKK21zZ2lkICJzZWUgcHJvdG9jb2wudmVyc2lvbiBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBkZXRhaWxzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjI2NworbXNnaWQgInNlcnZlciBvcHRpb25zIHJlcXVpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGxhdGVyIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjYzMgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSB0cmFuc3BvcnQuY29sb3IuKiBjb25maWciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6NzA1Cittc2dpZCAic3VwcG9ydCBmb3IgcHJvdG9jb2wgdjIgbm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBmb3IgY29uZmlnICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzo5NDkKK21zZ2lkICJnaXQtb3Zlci1yc3luYyBpcyBubyBsb25nZXIgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgc3VibW9kdWxlIHBhdGhzIGNvbnRhaW4gY2hhbmdlcyB0aGF0IGNhblxuIgorIm5vdCBiZSBmb3VuZCBvbiBhbnkgcmVtb3RlOlxuIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBsZWFzZSB0cnlcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisidG8gcHVzaCB0aGVtIHRvIGEgcmVtb3RlLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjEwNTYKK21zZ2lkICJBYm9ydGluZy4iCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6MTIwMQorbXNnaWQgImZhaWxlZCB0byBwdXNoIGFsbCBuZWVkZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzoxMzQ1IHRyYW5zcG9ydC1oZWxwZXIuYzo2NTcKK21zZ2lkICJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEgdHJhbnNwb3J0LWhlbHBlci5jOjkwCittc2dpZCAiZnVsbCB3cml0ZSB0byByZW1vdGUgaGVscGVyIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIHJlbW90ZSBoZWxwZXIgZm9yICclcyciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE2MCB0cmFuc3BvcnQtaGVscGVyLmM6NTcxCittc2dpZCAiY2FuJ3QgZHVwIGhlbHBlciBvdXRwdXQgZmQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBtYW5kYXRvcnkgY2FwYWJpbGl0eSAlczsgdGhpcyByZW1vdGUgaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyICIKKyJ2ZXJzaW9uIG9mIEdpdCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjE3Cittc2dpZCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyODQgdHJhbnNwb3J0LWhlbHBlci5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsc28gbG9ja2VkICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0OTMKK21zZ2lkICJjb3VsZG4ndCBydW4gZmFzdC1pbXBvcnQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjUxNgorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1pbXBvcnQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU0NSB0cmFuc3BvcnQtaGVscGVyLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTIKK21zZ2lkICJzZXR0aW5nIHJlbW90ZSBzZXJ2aWNlIHBhdGggbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjE0Cittc2dpZCAiaW52YWxpZCByZW1vdGUgc2VydmljZSBwYXRoIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY29ubmVjdCB0byBzdWJzZXJ2aWNlICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgcmVwb3J0ZWQgdW5leHBlY3RlZCBzdGF0dXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCBkcnktcnVuIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZD1pZi1hc2tlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ3B1c2gtb3B0aW9uJyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTY1Cittc2dpZCAicmVtb3RlLWhlbHBlciBkb2Vzbid0IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAnZm9yY2UnIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDE3Cittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtZXhwb3J0IgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDIyCittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWV4cG9ydCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTA0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgorIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHJlc3BvbnNlIGluIHJlZiBsaXN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkKCVzKSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGUoJXMpIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNzEgdHJhbnNwb3J0LWhlbHBlci5jOjEzNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGE6ICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIHRvIHdhaXQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MzQgdHJhbnNwb3J0LWhlbHBlci5jOjE0NDMKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIKK21zZ3N0ciAiIgorCisjOiB0cmVlLXdhbGsuYzozMgorbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiB0cmVlLXdhbGsuYzozOAorbXNnaWQgIm1hbGZvcm1lZCBtb2RlIGluIHRyZWUgZW50cnkiCittc2dzdHIgIiIKKworIzogdHJlZS13YWxrLmM6NDIKK21zZ2lkICJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICIiCisKKyM6IHRyZWUtd2Fsay5jOjExNworbXNnaWQgInRvby1zaG9ydCB0cmVlIGZpbGUiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVtOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50cnkgJyVzJyBvdmVybGFwcyB3aXRoICclcycuICBDYW5ub3QgYmluZC4iCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHNwYXJzZSBjaGVja291dDogdGhlIGZvbGxvd2luZyBlbnRyaWVzIGFyZSBub3QgdXAgdG8gZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3VibW9kdWxlOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZ1xuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjMxNworbXNnaWQgIlVwZGF0aW5nIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjM0OQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHBhdGhzIGhhdmUgY29sbGlkZWQgKGUuZy4gY2FzZS1zZW5zaXRpdmUgcGF0aHNcbiIKKyJvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSkgYW5kIG9ubHkgb25lIGZyb20gdGhlIHNhbWVcbiIKKyJjb2xsaWRpbmcgZ3JvdXAgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZTpcbiIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDQ1Cittc2dpZCAiVXBkYXRpbmcgaW5kZXggZmxhZ3MiCittc2dzdHIgIiIKKworIzogdXJsbWF0Y2guYzoxNjMKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAiIgorCisjOiB1cmxtYXRjaC5jOjE4NyB1cmxtYXRjaC5jOjM0NiB1cmxtYXRjaC5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgIiIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAiIgorCisjOiB1cmxtYXRjaC5jOjIzMgorbXNnaWQgImEgJ2ZpbGU6JyBVUkwgbWF5IG5vdCBoYXZlIGEgcG9ydCBudW1iZXIiCittc2dzdHIgIiIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICIiCisKKyM6IHVybG1hdGNoLmM6MjkyIHVybG1hdGNoLmM6MzAzCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiIgorCisjOiB1cmxtYXRjaC5jOjM3MQorbXNnaWQgImludmFsaWQgJy4uJyBwYXRoIHNlZ21lbnQiCittc2dzdHIgIiIKKworIzogd2Fsa2VyLmM6MTcwCittc2dpZCAiRmV0Y2hpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiB3b3JrdHJlZS5jOjI1OSBidWlsdGluL2FtLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHdvcmt0cmVlLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXQgbWFpbiB3b3JraW5nIHRyZWUgaXMgbm90IHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiB3b3JrdHJlZS5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbGUgZG9lcyBub3QgY29udGFpbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB3b3JraW5nIHRyZWUgbG9jYXRpb24iCittc2dzdHIgIiIKKworIzogd29ya3RyZWUuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiB3b3JrdHJlZS5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIC5naXQgZmlsZSwgZXJyb3IgY29kZSAlZCIKK21zZ3N0ciAiIgorCisjOiB3b3JrdHJlZS5jOjM0MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IGJhY2sgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiB3cmFwcGVyLmM6MTg2IHdyYXBwZXIuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyIKK21zZ3N0ciAiIgorCisjOiB3cmFwcGVyLmM6Mzg3IHdyYXBwZXIuYzo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnIgorbXNnc3RyICIiCisKKyM6IHdyYXBwZXIuYzo1OTYKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTU4Cittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE4NyB3dC1zdGF0dXMuYzoyMTkKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxOTAgd3Qtc3RhdHVzLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE5MyB3dC1zdGF0dXMuYzoyMjUKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTk3Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE5OSB3dC1zdGF0dXMuYzoyMDMKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjAxCittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjExIHd0LXN0YXR1cy5jOjEwNzQKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjM0IHd0LXN0YXR1cy5jOjEwODMKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjM4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjQwCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjQxCittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZXN0b3JlIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjQzCittc2dpZCAiICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNjgKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI3MAorbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNzIKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI3NAorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI3NgorbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI3OAorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI4MAorbXNnaWQgImJvdGggbW9kaWZpZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI5MAorbXNnaWQgIm5ldyBmaWxlOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyOTIKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI5NAorbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI5NgorbXNnaWQgIm1vZGlmaWVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyOTgKK21zZ2lkICJyZW5hbWVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzozMDAKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzozMDIKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzozMDQKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Mzg0Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzozODYKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Mzg4Cittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJ5IgorbXNnaWRfcGx1cmFsICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cmllcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHd0LXN0YXR1cy5jOjkzOAorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjk0MAorbXNnaWQgIlN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTAyMgorbXNnaWQgIiIKKyJEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS5cbiIKKyJFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTExNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gY29tcHV0ZSB0aGUgYnJhbmNoIGFoZWFkL2JlaGluZCB2YWx1ZXMuXG4iCisiWW91IGNhbiB1c2UgJy0tbm8tYWhlYWQtYmVoaW5kJyB0byBhdm9pZCB0aGlzLlxuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExNDQKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE0OQorbXNnaWQgIiAgKHVzZSBcImdpdCBtZXJnZSAtLWFib3J0XCIgdG8gYWJvcnQgdGhlIG1lcmdlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMTUzCittc2dpZCAiQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMTU2Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdFwiIHRvIGNvbmNsdWRlIG1lcmdlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMTY1Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExNjgKK21zZ2lkICJUaGUgY3VycmVudCBwYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE3MgorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE3NAorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExNzYKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTMwOQorbXNnaWQgImdpdC1yZWJhc2UtdG9kbyBpcyBtaXNzaW5nLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMzExCittc2dpZCAiTm8gY29tbWFuZHMgZG9uZS4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXN0IGNvbW1hbmQgZG9uZSAoJWQgY29tbWFuZCBkb25lKToiCittc2dpZF9wbHVyYWwgIkxhc3QgY29tbWFuZHMgZG9uZSAoJWQgY29tbWFuZHMgZG9uZSk6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogd3Qtc3RhdHVzLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMzMwCittc2dpZCAiTm8gY29tbWFuZHMgcmVtYWluaW5nLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5leHQgY29tbWFuZCB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmQpOiIKK21zZ2lkX3BsdXJhbCAiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiB3dC1zdGF0dXMuYzoxMzQxCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTM1OAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMzcxCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTM3MworbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMzc1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEzODIKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTM4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTEKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMzk0Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0MDMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQwNgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQwOAorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDE5Cittc2dpZCAiQ2hlcnJ5LXBpY2sgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQyOQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzIKK21zZ2lkICIgIChydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHRvIGNvbnRpbnVlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDM1Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQzNworbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzkKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDQ5Cittc2dpZCAiUmV2ZXJ0IGN1cnJlbnRseSBpbiBwcm9ncmVzcy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZXZlcnRpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDU4Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjEKK21zZ2lkICIgIChydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIiB0byBjb250aW51ZSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQ2NAorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDY2Cittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjgKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIHJldmVydCBvcGVyYXRpb24pIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLCBzdGFydGVkIGZyb20gYnJhbmNoICclcycuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0ODIKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0ODUKK21zZ2lkICIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTY5NAorbXNnaWQgIk9uIGJyYW5jaCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTcwMQorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTcwMworbXNnaWQgInJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTcxMworbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTczMAorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3MzEKK21zZ2lkICJObyBjb21taXRzIHlldCIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ1Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NDcKK21zZ2lkICJJZ25vcmVkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICdzdGF0dXMgLXVubydcbiIKKyJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkXG4iCisibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc1OQorbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc2NQorbXNnaWQgIk5vIGNoYW5nZXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc3MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlIFwiZ2l0IGFkZFwiIGFuZC9vciBcImdpdCBjb21taXQgLWFcIilcbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50ICh1c2UgXCJnaXQgYWRkXCIgdG8gIgorInRyYWNrKVxuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50XG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzg1IHd0LXN0YXR1cy5jOjE3OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXRcbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpXG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuXG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTkwNQorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IG9uICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxOTA5Cittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxOTQwCittc2dpZCAiZGlmZmVyZW50IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDIgd3Qtc3RhdHVzLmM6MTk1MAorbXNnaWQgImJlaGluZCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTk0NSB3dC1zdGF0dXMuYzoxOTQ4Cittc2dpZCAiYWhlYWQgIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgYWN0aW9uIGlzIGUuZy4gInB1bGwgd2l0aCByZWJhc2UiCisjOiB3dC1zdGF0dXMuYzoyNDcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjQ3NgorbXNnaWQgImFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBjb21wYXQvcHJlY29tcG9zZV91dGY4LmM6NTggYnVpbHRpbi9jbG9uZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyNgorbXNnaWQgImdpdCBhZGQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjkzIGJ1aWx0aW4vY29tbWl0LmM6Mjg4Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoxNzgKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI2NiBidWlsdGluL3Jldi1wYXJzZS5jOjg5OQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI4MQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI4NAorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyODkKK21zZ2lkICJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMDIKK21zZ2lkICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMjIgYnVpbHRpbi9jbGVhbi5jOjkxMCBidWlsdGluL2ZldGNoLmM6MTYzIGJ1aWx0aW4vbXYuYzoxMjQKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTYgYnVpbHRpbi9wdWxsLmM6MjAzIGJ1aWx0aW4vcHVzaC5jOjU0OAorIzogYnVpbHRpbi9yZW1vdGUuYzoxNDIxIGJ1aWx0aW4vcm0uYzoyNDIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjUKK21zZ2lkICJkcnkgcnVuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI1Cittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMyNiBidWlsdGluL2NoZWNrb3V0LmM6MTUxMSBidWlsdGluL3Jlc2V0LmM6MzA3Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMjcKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMjgKK21zZ2lkICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMjkKK21zZ2lkICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMzMAorbXNnaWQgInJlbm9ybWFsaXplIEVPTCBvZiB0cmFja2VkIGZpbGVzIChpbXBsaWVzIC11KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMzMQorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMzMgorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMzNQorbXNnaWQgImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM3Cittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM4Cittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMzOQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM0MSBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDQKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM0MworbXNnaWQgIndhcm4gd2hlbiBhZGRpbmcgYW4gZW1iZWRkZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM0NQorbXNnaWQgImJhY2tlbmQgZm9yIGBnaXQgc3Rhc2ggLXBgIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIklmIHlvdSBhZGRlZCB0aGlzIHBhdGggYnkgbWlzdGFrZSwgeW91IGNhbiByZW1vdmUgaXQgZnJvbSB0aGVcbiIKKyJpbmRleCB3aXRoOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2VlIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZyBlbWJlZGRlZCBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MTAKK21zZ2lkICIiCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKKyJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkSWdub3JlZEZpbGUgZmFsc2VcIiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQxOQorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0NDcgYnVpbHRpbi9jb21taXQuYzozNDgKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0NjQKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWVkaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0NzYKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQ3OQorbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1jaG1vZCBwYXJhbSAnJXMnIG11c3QgYmUgZWl0aGVyIC14IG9yICt4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTAxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjc1IGJ1aWx0aW4vY29tbWl0LmM6MzU0CisjOiBidWlsdGluL3Jlc2V0LmM6MzI3IGJ1aWx0aW4vcm0uYzoyNzIgYnVpbHRpbi9zdGFzaC5jOjE1MDkKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo1MDggYnVpbHRpbi9jaGVja291dC5jOjE2ODcgYnVpbHRpbi9jb21taXQuYzozNjAKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzMgYnVpbHRpbi9ybS5jOjI3OCBidWlsdGluL3N0YXNoLmM6MTUxNQorbXNnaWQgIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWlyZXMgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo1MTQKK21zZ2lkICIiCisiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZEVtcHR5UGF0aHNwZWMgZmFsc2VcIiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MzUyCittc2dpZCAiY291bGQgbm90IHBhcnNlIGF1dGhvciBzY3JpcHQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjU0MgorbXNnaWQgImZzZWVrIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXRjaCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzo3OTUKK21zZ2lkICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6ODQzCittc2dpZCAiaW52YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjg0OCBidWlsdGluL2FtLmM6ODYwCittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjg1NQorbXNnaWQgImludmFsaWQgdGltZXpvbmUgb2Zmc2V0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzo5NDgKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjk1MyBidWlsdGluL2Nsb25lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjk1OAorbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJXMgLS1jb250aW51ZVwiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJXMgLS1za2lwXCIgaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjEwOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIlcyAtLWFib3J0XCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTc0Cittc2dpZCAiUGF0Y2ggc2VudCB3aXRoIGZvcm1hdD1mbG93ZWQ7IHNwYWNlIGF0IHRoZSBlbmQgb2YgbGluZXMgbWlnaHQgYmUgbG9zdC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjEyMDIKK21zZ2lkICJQYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhdXRob3IgbGluZSBpbiBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjEyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlLipzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDg5Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTQ5MQorbXNnaWQgIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE1MTAKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTE2Cittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTQyCittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTU3NAorbXNnaWQgImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE2MjEgYnVpbHRpbi9hbS5jOjE2MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3VtZTogJXMgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjQzCittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE3MDAgYnVpbHRpbi9jb21taXQuYzozOTgKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAlcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE3NDQgYnVpbHRpbi9hbS5jOjE4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICUuKnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE3NjEKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICVzICUuKnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE3NzEKK21zZ2lkICJVc2UgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaD1kaWZmJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTgxNQorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTgyMgorbXNnaWQgIiIKKyJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4LlxuIgorIllvdSBzaG91bGQgJ2dpdCBhZGQnIGVhY2ggZmlsZSB3aXRoIHJlc29sdmVkIGNvbmZsaWN0cyB0byBtYXJrIHRoZW0gYXMgIgorInN1Y2guXG4iCisiWW91IG1pZ2h0IHJ1biBgZ2l0IHJtYCBvbiBhIGZpbGUgdG8gYWNjZXB0IFwiZGVsZXRlZCBieSB0aGVtXCIgZm9yIGl0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTkyOSBidWlsdGluL2FtLmM6MTkzMyBidWlsdGluL2FtLmM6MTk0NSBidWlsdGluL3Jlc2V0LmM6MzQ2CisjOiBidWlsdGluL3Jlc2V0LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE5ODEKK21zZ2lkICJmYWlsZWQgdG8gY2xlYW4gaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIwMjUKK21zZ2lkICIiCisiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFEIHNpbmNlIHRoZSBsYXN0ICdhbScgZmFpbHVyZS5cbiIKKyJOb3QgcmV3aW5kaW5nIHRvIE9SSUdfSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXBhdGNoLWZvcm1hdDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1zaG93LWN1cnJlbnQtcGF0Y2g6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2hvdy1jdXJyZW50LXBhdGNoPSVzIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tc2hvdy1jdXJyZW50LXBhdGNoPSVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA3Cittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyMDgKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIxNAorbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE2Cittc2dpZCAiaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3AiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyMTgKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIxOSBidWlsdGluL2luaXQtZGIuYzo0OTQgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1OAorIzogYnVpbHRpbi9yZXBhY2suYzozMDQgYnVpbHRpbi9zdGFzaC5jOjgxMgorbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIxCittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIyNAorbXNnaWQgInJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI2Cittc2dpZCAicGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIyOAorbXNnaWQgInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzAKK21zZ2lkICJwYXNzIC1tIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMyCittc2dpZCAicGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGZvciBtYm94IGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIzNQorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM4Cittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQwIGJ1aWx0aW4vYW0uYzoyMjQzIGJ1aWx0aW4vYW0uYzoyMjQ2IGJ1aWx0aW4vYW0uYzoyMjQ5CisjOiBidWlsdGluL2FtLmM6MjI1MiBidWlsdGluL2FtLmM6MjI1NSBidWlsdGluL2FtLmM6MjI1OCBidWlsdGluL2FtLmM6MjI2MQorIzogYnVpbHRpbi9hbS5jOjIyNjcKK21zZ2lkICJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjU3IGJ1aWx0aW4vY29tbWl0LmM6MTM5MSBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzAKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MyBidWlsdGluL2dyZXAuYzo4NzEgYnVpbHRpbi9tZXJnZS5jOjI1MAorIzogYnVpbHRpbi9wdWxsLmM6MTQwIGJ1aWx0aW4vcHVsbC5jOjE5OSBidWlsdGluL3JlYmFzZS5jOjE1MDUKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE1IGJ1aWx0aW4vcmVwYWNrLmM6MzE5IGJ1aWx0aW4vcmVwYWNrLmM6MzIxCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUwIGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzIgYnVpbHRpbi90YWcuYzo0MDMKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNTQgcGFyc2Utb3B0aW9ucy5oOjE3NSBwYXJzZS1vcHRpb25zLmg6MzE2Cittc2dpZCAibiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI2MyBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTYgYnVpbHRpbi90YWcuYzo0MzcgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyNjQKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyNzAKK21zZ2lkICJvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyNzIKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc1Cittc2dpZCAic3lub255bXMgZm9yIC0tY29udGludWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyNzgKK21zZ2lkICJza2lwIHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjgxCittc2dpZCAicmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI4NAorbXNnaWQgImFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24gYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyODgKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBiZWluZyBhcHBsaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjkzCittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk1Cittc2dpZCAidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI5NyBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIwIGJ1aWx0aW4vY29tbWl0LmM6MTUxMgorIzogYnVpbHRpbi9tZXJnZS5jOjI4NyBidWlsdGluL3B1bGwuYzoxNzQgYnVpbHRpbi9yZWJhc2UuYzo1MTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NiBidWlsdGluL3JldmVydC5jOjExNyBidWlsdGluL3RhZy5jOjQxOAorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI5OCBidWlsdGluL3JlYmFzZS5jOjUxOCBidWlsdGluL3JlYmFzZS5jOjE1NTcKK21zZ2lkICJHUEctc2lnbiBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzAxCittc2dpZCAiKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIzMTkKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjYKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzcxCittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjM4MQorbXNnaWQgImludGVyYWN0aXZlIG1vZGUgcmVxdWlyZXMgcGF0Y2hlcyBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4Cittc2dpZCAiZ2l0IGFwcGx5IFs8b3B0aW9ucz5dIFs8cGF0Y2g+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzozNworbXNnaWQgImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjEKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY1Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY5Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxiYWRfdGVybT4gPGdvb2RfdGVybT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI0Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNQorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNgorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA8c3RhdGU+IDxyZXZpc2lvbj4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI3Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxjb21tYW5kPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjgKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA8Z29vZF90ZXJtPiA8YmFkX3Rlcm0+IFs8dGVybT5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOQorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMwCittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1zdGFydCBbLS10ZXJtLXtvbGQsZ29vZH09PHRlcm0+IC0tdGVybS17bmV3LGJhZH0iCisiPTx0ZXJtPl1bLS1uby1jaGVja291dF0gWzxiYWQ+IFs8Z29vZD4uLi5dXSBbLS1dIFs8cGF0aHM+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0ZXJtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnJXMnIGFzIGEgdGVybSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgdGVybSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTEKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExOAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRoZSBmaWxlIEJJU0VDVF9URVJNUyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICclcycuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBnZXQgdGhlIG9pZCBvZiB0aGUgcmV2ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBvcGVuIHRoZSBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAlcy8lcyBiaXNlY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJpc2VjdGluZyBvbmx5IHdpdGggYSAlcyBjb21taXQiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMxOAorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozNzkKK21zZ2lkICJubyB0ZXJtcyBkZWZpbmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY3VycmVudCB0ZXJtcyBhcmUgJXMgZm9yIHRoZSBvbGQgc3RhdGVcbiIKKyJhbmQgJXMgZm9yIHRoZSBuZXcgc3RhdGUuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM5MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIlN1cHBvcnRlZCBvcHRpb25zIGFyZTogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBhbmQgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBvcHRpb246ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MTQKK21zZ2lkICJiYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjaGVja2luZyBvdXQgJyVzJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCBzdGFydCA8dmFsaWQtYnJhbmNoPicuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NTAKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gY2ctc2VlaydlZCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NTMKK21zZ2lkICJiYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWY6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMworbXNnaWQgInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNQorbXNnaWQgIndyaXRlIHRoZSB0ZXJtcyB0byAuZ2l0L0JJU0VDVF9URVJNUyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM3Cittc2dpZCAiY2xlYW51cCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzkKK21zZ2lkICJjaGVjayBmb3IgZXhwZWN0ZWQgcmV2cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQxCittc2dpZCAicmVzZXQgdGhlIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQzCittc2dpZCAid3JpdGUgb3V0IHRoZSBiaXNlY3Rpb24gc3RhdGUgaW4gQklTRUNUX0xPRyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ1Cittc2dpZCAiY2hlY2sgYW5kIHNldCB0ZXJtcyBpbiBhIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ3Cittc2dpZCAiY2hlY2sgd2hldGhlciBiYWQgb3IgZ29vZCB0ZXJtcyBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ5Cittc2dpZCAicHJpbnQgb3V0IHRoZSBiaXNlY3QgdGVybXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MQorbXNnaWQgInN0YXJ0IHRoZSBiaXNlY3Qgc2Vzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjUzCittc2dpZCAidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjU1Cittc2dpZCAibm8gbG9nIGZvciBCSVNFQ1RfV1JJVEUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3MworbXNnaWQgIi0td3JpdGUtdGVybXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njc3Cittc2dpZCAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgcmVxdWlyZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODQKK21zZ2lkICItLWJpc2VjdC1yZXNldCByZXF1aXJlcyBlaXRoZXIgbm8gYXJndW1lbnQgb3IgYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4OAorbXNnaWQgIi0tYmlzZWN0LXdyaXRlIHJlcXVpcmVzIGVpdGhlciA0IG9yIDUgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTQKK21zZ2lkICItLWNoZWNrLWFuZC1zZXQtdGVybXMgcmVxdWlyZXMgMyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcwMAorbXNnaWQgIi0tYmlzZWN0LW5leHQtY2hlY2sgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NzA2Cittc2dpZCAiLS1iaXNlY3QtdGVybXMgcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMQorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzYKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGluZyBhIGNvbG9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDE2Cittc2dpZCAibXVzdCBlbmQgd2l0aCBhIGNvbG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciAnJXMnIGluIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc0NworbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIGJsYW1lLmNvbG9yaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgcmV2aXNpb24gJXMgdG8gaWdub3JlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDQKK21zZ2lkICJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDUKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDYKK21zZ2lkICJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ5Cittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MAorbXNnaWQgIlNob3cgb3JpZ2luYWwgZmlsZW5hbWUgKERlZmF1bHQ6IGF1dG8pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTEKK21zZ2lkICJTaG93IG9yaWdpbmFsIGxpbmVudW1iZXIgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MgorbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MworbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU0Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU1Cittc2dpZCAiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTYKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NworbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1OAorbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU5Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MCBidWlsdGluL2xvZy5jOjE3MDIKK21zZ2lkICJyZXYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MAorbXNnaWQgIklnbm9yZSA8cmV2PiB3aGVuIGJsYW1pbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MQorbXNnaWQgIklnbm9yZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MgorbXNnaWQgImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MworbXNnaWQgImNvbG9yIGxpbmVzIGJ5IGFnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY0Cittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjUKK21zZ2lkICJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NgorbXNnaWQgIlVzZSA8ZmlsZT4ncyBjb250ZW50cyBhcyB0aGUgZmluYWwgaW1hZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NyBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAic2NvcmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NworbXNnaWQgIkZpbmQgbGluZSBjb3BpZXMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OAorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIm4sbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAiUHJvY2VzcyBvbmx5IGxpbmUgcmFuZ2UgbixtLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjkyMQorbXNnaWQgIi0tcHJvZ3Jlc3MgY2FuJ3QgYmUgdXNlZCB3aXRoIC0taW5jcmVtZW50YWwgb3IgcG9yY2VsYWluIGZvcm1hdHMiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUKKyMuIG1heGltdW0gZGlzcGxheSB3aWR0aCBmb3IgYSByZWxhdGl2ZSB0aW1lc3RhbXAgaW4KKyMuICJnaXQgYmxhbWUiIG91dHB1dC4gIEZvciBDIGxvY2FsZSwgIjQgeWVhcnMsIDExCisjLiBtb250aHMgYWdvIiwgd2hpY2ggdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdAorIy4gYW1vbmcgdmFyaW91cyBmb3JtcyBvZiByZWxhdGl2ZSB0aW1lc3RhbXBzLCBidXQKKyMuIHlvdXIgbGFuZ3VhZ2UgbWF5IG5lZWQgbW9yZSBvciBmZXdlciBkaXNwbGF5CisjLiBjb2x1bW5zLgorIy4KKyM6IGJ1aWx0aW4vYmxhbWUuYzo5NzIKK21zZ2lkICI0IHllYXJzLCAxMSBtb250aHMgYWdvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmUiCittc2dpZF9wbHVyYWwgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjExMjUKK21zZ2lkICJCbGFtaW5nIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjkKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzEKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstcl0gKC1kIHwgLUQpIDxicmFuY2gtbmFtZT4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMgorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMzCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLWMgfCAtQykgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzUKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1mb3JtYXRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4OQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjAKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjYKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSBicmFuY2ggJyVzJyBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQyOSBidWlsdGluL3RhZy5jOjYxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjAKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgKCVzKSBwb2ludHMgb3V0c2lkZSBvZiByZWZzL2hlYWRzLyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgcmViYXNlZCBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgYmlzZWN0ZWQgYXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDIKK21zZ2lkICJjYW5ub3QgY29weSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDQKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQyCittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDQKK21zZ2lkICJCcmFuY2ggY29weSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhIGNvcHkgb2YgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY2Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY4Cittc2dpZCAiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaFxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBzdHJpcHBlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMAorbXNnaWQgInNob3cgaGFzaCBhbmQgc3ViamVjdCwgZ2l2ZSB0d2ljZSBmb3IgdXBzdHJlYW0gYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIxCittc2dpZCAic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI0Cittc2dpZCAiZG8gbm90IHVzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNiBidWlsdGluL3JlYmFzZS5jOjUxMworbXNnaWQgInVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI2Cittc2dpZCAiY2hhbmdlIHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI3Cittc2dpZCAidW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjgKK21zZ2lkICJ1c2UgY29sb3JlZCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjkKK21zZ2lkICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMxIGJ1aWx0aW4vYnJhbmNoLmM6NjMzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMiBidWlsdGluL2JyYW5jaC5jOjYzNAorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzcKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM4Cittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDAKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MQorbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDIKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MworbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDQKK21zZ2lkICJjb3B5IGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ1Cittc2dpZCAiY29weSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ2Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IGN1cnJlbnQgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDgKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MAorbXNnaWQgImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUxCittc2dpZCAiZm9yY2UgY3JlYXRpb24sIG1vdmUvcmVuYW1lLCBkZWxldGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MgorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU0Cittc2dpZCAibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU3IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIgYnVpbHRpbi9ub3Rlcy5jOjQxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQxOCBidWlsdGluL25vdGVzLmM6NTgxIGJ1aWx0aW4vbm90ZXMuYzo1ODQKKyM6IGJ1aWx0aW4vdGFnLmM6NDMzCittc2dpZCAib2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU4Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYwIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDggYnVpbHRpbi90YWcuYzo0NDAKK21zZ2lkICJzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgYXJlIGNhc2UgaW5zZW5zaXRpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NjEgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOCBidWlsdGluL3RhZy5jOjQzOAorIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Njg0IGJ1aWx0aW4vY2xvbmUuYzo3ODUKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcwOAorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyMyBidWlsdGluL2JyYW5jaC5jOjc3NyBidWlsdGluL2JyYW5jaC5jOjc4NgorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzUzCittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OAorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4MworbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIGNvcHkgb3BlcmF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzkyCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDQgYnVpbHRpbi9icmFuY2guYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNQorbXNnaWQgImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQxCittc2dpZCAiIgorIlRoZSAtYSwgYW5kIC1yLCBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgdGFrZSBhIGJyYW5jaCBuYW1lLlxuIgorIkRpZCB5b3UgbWVhbiB0byB1c2U6IC1hfC1yIC0tbGlzdCA8cGF0dGVybj4/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ1Cittc2dpZCAiIgorInRoZSAnLS1zZXQtdXBzdHJlYW0nIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBQbGVhc2UgdXNlICctLXRyYWNrJyBvciAiCisiJy0tc2V0LXVwc3RyZWFtLXRvJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE1IGJ1aWx0aW4vYnVuZGxlLmM6MjMKK21zZ2lkICJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2IGJ1aWx0aW4vYnVuZGxlLmM6MjgKK21zZ2lkICJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmlsZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNyBidWlsdGluL2J1bmRsZS5jOjMzCittc2dpZCAiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE4IGJ1aWx0aW4vYnVuZGxlLmM6MzgKK21zZ2lkICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM3NQorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzc3Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM3OQorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzgyCittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6OTMKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTA0Cittc2dpZCAiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTY4NgorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzoxNzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NQorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8dHlwZT4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxwYXRoPl0gPG9iamVjdD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NgorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYxNworbXNnaWQgIm9ubHkgb25lIGJhdGNoIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzUKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNgorbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNworbXNnaWQgInNob3cgb2JqZWN0IHNpemUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzOQorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQwCittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MgorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biB0ZXh0Y29udiBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDQKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gZmlsdGVycyBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDUgZ2l0LXN1Ym1vZHVsZS5zaDoxMDAyCittc2dpZCAiYmxvYiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ2Cittc2dpZCAidXNlIGEgc3BlY2lmaWMgcGF0aCBmb3IgLS10ZXh0Y29udi8tLWZpbHRlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0OAorbXNnaWQgImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ5Cittc2dpZCAiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTEKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1NQorbXNnaWQgInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU5Cittc2dpZCAiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjEKK21zZ2lkICJzaG93IGFsbCBvYmplY3RzIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjMKK21zZ2lkICJkbyBub3Qgb3JkZXIgLS1iYXRjaC1hbGwtb2JqZWN0cyBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTMKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjE0Cittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMgorbXNnaWQgInVzZSAuZ2l0YXR0cmlidXRlcyBvbmx5IGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjUgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMgorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjI1IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjcKK21zZ2lkICJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDY0IGJ1aWx0aW4vZ2MuYzo1MzcKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTkKK21zZ2lkICJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOQorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MzEKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MworbXNnaWQgImNhbm5vdCBzcGVjaWZ5IHBhdGhuYW1lcyB3aXRoIC0tc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjYKK21zZ2lkICIteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2OAorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTcyCittc2dpZCAiLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzQKK21zZ2lkICJjYW5ub3QgaGF2ZSBib3RoIC0tcXVpZXQgYW5kIC0tdmVyYm9zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3NworbXNnaWQgIi0tbm9uLW1hdGNoaW5nIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXZlcmJvc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OQorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoxNAorbXNnaWQgImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb250YWN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0OAorbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTMxCittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE0OAorbXNnaWQgInN0YWdlIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDMgb3IgYWxsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjQKK21zZ2lkICJjaGVjayBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY1Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjcKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjkKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MQorbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzUKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NworbXNnaWQgIndyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc4IGJ1aWx0aW4vY29sdW1uLmM6MzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAzCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxMSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwOQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY3MgorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc5Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTgxCittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMxCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIDxicmFuY2g+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMgorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzcKK21zZ2lkICJnaXQgc3dpdGNoIFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyCittc2dpZCAiZ2l0IHJlc3RvcmUgWzxvcHRpb25zPl0gWy0tc291cmNlPTxicmFuY2g+XSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NSBidWlsdGluL2NoZWNrb3V0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcgYnVpbHRpbi9jaGVja291dC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgYWxsIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJzogY2Fubm90IG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdHMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tICVzIgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gJXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tIHRoZSBpbmRleCIKK21zZ2lkX3BsdXJhbCAiVXBkYXRlZCAlZCBwYXRocyBmcm9tIHRoZSBpbmRleCIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTIgYnVpbHRpbi9jaGVja291dC5jOjQxNSBidWlsdGluL2NoZWNrb3V0LmM6NDE4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDI1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibmVpdGhlciAnJXMnIG9yICclcycgaXMgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtdXN0IGJlIHVzZWQgd2hlbiAnJXMnIGlzIG5vdCBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0NSBidWlsdGluL2NoZWNrb3V0LmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgb3IgJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MDkgYnVpbHRpbi9jaGVja291dC5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgaXMgdW5tZXJnZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY4NCBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjEwNgorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBjb250aW51ZSB3aXRoIHN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODc5Cittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4MyBidWlsdGluL2Nsb25lLmM6NzE3Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NiBidWlsdGluL2NoZWNrb3V0LmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgaXQgYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ2lkX3BsdXJhbCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDkKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDEzCittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTMgYnVpbHRpbi9jaGVja291dC5jOjEzMTUKK21zZ2lkICJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvdWxkIGJlIGJvdGggYSBsb2NhbCBmaWxlIGFuZCBhIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJQbGVhc2UgdXNlIC0tIChhbmQgb3B0aW9uYWxseSAtLW5vLWd1ZXNzKSB0byBkaXNhbWJpZ3VhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzUKK21zZ2lkICIiCisiSWYgeW91IG1lYW50IHRvIGNoZWNrIG91dCBhIHJlbW90ZSB0cmFja2luZyBicmFuY2ggb24sIGUuZy4gJ29yaWdpbicsXG4iCisieW91IGNhbiBkbyBzbyBieSBmdWxseSBxdWFsaWZ5aW5nIHRoZSBuYW1lIHdpdGggdGhlIC0tdHJhY2sgb3B0aW9uOlxuIgorIlxuIgorIiAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4vPG5hbWU+XG4iCisiXG4iCisiSWYgeW91J2QgbGlrZSB0byBhbHdheXMgaGF2ZSBjaGVja291dHMgb2YgYW4gYW1iaWd1b3VzIDxuYW1lPiBwcmVmZXJcbiIKKyJvbmUgcmVtb3RlLCBlLmcuIHRoZSAnb3JpZ2luJyByZW1vdGUsIGNvbnNpZGVyIHNldHRpbmdcbiIKKyJjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbiBpbiB5b3VyIGNvbmZpZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtYXRjaGVkIG11bHRpcGxlICglZCkgcmVtb3RlIHRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjExCittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCwgJWQgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjc0IGJ1aWx0aW4vd29ya3RyZWUuYzoyODMgYnVpbHRpbi93b3JrdHJlZS5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyODcgYnVpbHRpbi9jaGVja291dC5jOjE2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgdGFnICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCByZW1vdGUgYnJhbmNoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzcgYnVpbHRpbi9jaGVja291dC5jOjEzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgY29tbWl0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNTYKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgbWVyZ2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IG1lcmdlIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2MAorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb25cbiIKKyJDb25zaWRlciBcImdpdCBhbSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjQKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZWJhc2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY4Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIGNoZXJyeS1waWNraW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzcyCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJldmVydGluZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJldmVydCAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzYKK21zZ2lkICJ5b3UgYXJlIHN3aXRjaGluZyBicmFuY2ggd2hpbGUgYmlzZWN0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgzCittc2dpZCAicGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODYgYnVpbHRpbi9jaGVja291dC5jOjEzOTAgYnVpbHRpbi9jaGVja291dC5jOjEzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5OCBidWlsdGluL2NoZWNrb3V0LmM6MTQwMSBidWlsdGluL2NoZWNrb3V0LmM6MTQwNAorIzogYnVpbHRpbi9jaGVja291dC5jOjE0MDkgYnVpbHRpbi9jaGVja291dC5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgdGFrZSA8c3RhcnQtcG9pbnQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDI2Cittc2dpZCAibWlzc2luZyBicmFuY2ggb3IgY29tbWl0IGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDY4IGJ1aWx0aW4vY2xvbmUuYzo5MSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjcyCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNSBidWlsdGluL2ZldGNoLmM6MTY3IGJ1aWx0aW4vbWVyZ2UuYzoyODYKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI3IGJ1aWx0aW4vcHVsbC5jOjExOCBidWlsdGluL3B1c2guYzo1NjMKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc0Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDY5Cittc2dpZCAicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NzAgYnVpbHRpbi9sb2cuYzoxNjkwIHBhcnNlLW9wdGlvbnMuaDozMjIKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ3MQorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODMgYnVpbHRpbi93b3JrdHJlZS5jOjQ5NgorbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4NAorbXNnaWQgInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg2Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODgKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg4Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDkwIGJ1aWx0aW4vbWVyZ2UuYzoyODkKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0OTMKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MDYKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MDkKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUxMworbXNnaWQgImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU2NQorbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU2OAorbXNnaWQgIi1wIGFuZCAtLW92ZXJsYXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYwNQorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYxMAorbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY1OAorbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjc4Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1kZXRhY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2ODEgYnVpbHRpbi9yZXNldC5jOjMyNCBidWlsdGluL3N0YXNoLmM6MTUwNgorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2OTIKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2OTcKK21zZ2lkICJ5b3UgbXVzdCBzcGVjaWZ5IHBhdGgocykgdG8gcmVzdG9yZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyMyBidWlsdGluL2NoZWNrb3V0LmM6MTcyNSBidWlsdGluL2NoZWNrb3V0LmM6MTc3NAorIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzYgYnVpbHRpbi9jbG9uZS5jOjEyMSBidWlsdGluL3JlbW90ZS5jOjE3MAorIzogYnVpbHRpbi9yZW1vdGUuYzoxNzIgYnVpbHRpbi93b3JrdHJlZS5jOjQ5MiBidWlsdGluL3dvcmt0cmVlLmM6NDk0Cittc2dpZCAiYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI0Cittc2dpZCAiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjYKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIGNoZWNrb3V0IGEgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI3Cittc2dpZCAiY3JlYXRlIHJlZmxvZyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyOQorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTczMAorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc1Cittc2dpZCAiY3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBzd2l0Y2ggdG8gYSBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzkKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBzd2l0Y2ggPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3ODEKK21zZ2lkICJ0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTMKK21zZ2lkICJ3aGljaCB0cmVlLWlzaCB0byBjaGVja291dCBmcm9tIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODE1Cittc2dpZCAicmVzdG9yZSB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTcKK21zZ2lkICJyZXN0b3JlIHRoZSB3b3JraW5nIHRyZWUgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODE5Cittc2dpZCAiaWdub3JlIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MjAKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOAorbXNnaWQgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbHN0YXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbVxuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmdcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTc1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT9cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MjEKK21zZ2lkICJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6Nzk1Cittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzMQorbXNnaWQgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IgorbXNnaWRfcGx1cmFsICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODQ3Cittc2dpZCAiTm8gbW9yZSBmaWxlcyB0byBjbGVhbiwgZXhpdGluZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwOQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTEKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTEyCittc2dpZCAiaW50ZXJhY3RpdmUgY2xlYW5pbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjIgYnVpbHRpbi9kZXNjcmliZS5jOjU2NAorIzogYnVpbHRpbi9ncmVwLmM6ODg5IGJ1aWx0aW4vbG9nLmM6MTc3IGJ1aWx0aW4vbG9nLmM6MTc5CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjYgYnVpbHRpbi9uYW1lLXJldi5jOjUyOAorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNgorbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTcKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTkKK21zZ2lkICJyZW1vdmUgb25seSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzcKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0MQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTQ0Cittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0cyB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyAiCisicmVmdXNpbmcgdG8gY2xlYW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ1Cittc2dpZCAiZ2l0IGNsb25lIFs8b3B0aW9ucz5dIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkzCittc2dpZCAiZG9uJ3QgY3JlYXRlIGEgY2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk0IGJ1aWx0aW4vY2xvbmUuYzo5NiBidWlsdGluL2luaXQtZGIuYzo0ODkKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMAorbXNnaWQgInRvIGNsb25lIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDIKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA0Cittc2dpZCAic2V0dXAgYXMgc2hhcmVkIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgInBhdGhzcGVjIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMSBidWlsdGluL2luaXQtZGIuYzo0ODYKK21zZ2lkICJ0ZW1wbGF0ZS1kaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMiBidWlsdGluL2luaXQtZGIuYzo0ODcKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTQgYnVpbHRpbi9jbG9uZS5jOjExNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTIKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxNAorbXNnaWQgInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOSBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ2CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDEgYnVpbHRpbi9yZXBhY2suYzozMjcKK21zZ2lkICJuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjAKK21zZ2lkICJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMgorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNAorbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNSBidWlsdGluL2ZldGNoLmM6MTY4IGJ1aWx0aW4vZ3JlcC5jOjgyOAorIzogYnVpbHRpbi9wdWxsLmM6MjA3Cittc2dpZCAiZGVwdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNgorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI3IGJ1aWx0aW4vZmV0Y2guYzoxNzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDMwCittc2dpZCAidGltZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOSBidWlsdGluL2ZldGNoLmM6MTcyIGJ1aWx0aW4vZmV0Y2guYzoxOTUKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MAorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzAgYnVpbHRpbi9mZXRjaC5jOjE3MworbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUsIGV4Y2x1ZGluZyByZXYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MjgKK21zZ2lkICJjbG9uZSBvbmx5IG9uZSBicmFuY2gsIEhFQUQgb3IgLS1icmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNAorbXNnaWQgImRvbid0IGNsb25lIGFueSB0YWdzLCBhbmQgbWFrZSBsYXRlciBmZXRjaGVzIG5vdCB0byBmb2xsb3cgdGhlbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM2Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgYmUgc2hhbGxvdyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM4IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NgorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOQorbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQwCittc2dpZCAic2V0IGNvbmZpZyBpbnNpZGUgdGhlIG5ldyByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJzZXJ2ZXItc3BlY2lmaWMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgIm9wdGlvbiB0byB0cmFuc21pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQzIGJ1aWx0aW4vZmV0Y2guYzoxOTEgYnVpbHRpbi9wdWxsLmM6MjIwCisjOiBidWlsdGluL3B1c2guYzo1NzQKK21zZ2lkICJ1c2UgSVB2NCBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ1IGJ1aWx0aW4vZmV0Y2guYzoxOTMgYnVpbHRpbi9wdWxsLmM6MjIzCisjOiBidWlsdGluL3B1c2guYzo1NzYKK21zZ2lkICJ1c2UgSVB2NiBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ5Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgdXNlIHRoZWlyIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE1MQorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgdG8gaW5jbHVkZSBvbmx5IGZpbGVzIGF0IHJvb3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI4NworbXNnaWQgIiIKKyJObyBkaXJlY3RvcnkgbmFtZSBjb3VsZCBiZSBndWVzc2VkLlxuIgorIlBsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZvOiBDb3VsZCBub3QgYWRkIGFsdGVybmF0ZSBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXJ0IGl0ZXJhdG9yIG92ZXIgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGluayAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGl0ZXJhdGUgb3ZlciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTA4Cittc2dpZCAiIgorIkNsb25lIHN1Y2NlZWRlZCwgYnV0IGNoZWNrb3V0IGZhaWxlZC5cbiIKKyJZb3UgY2FuIGluc3BlY3Qgd2hhdCB3YXMgY2hlY2tlZCBvdXQgd2l0aCAnZ2l0IHN0YXR1cydcbiIKKyJhbmQgcmV0cnkgd2l0aCAnZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzUzCittc2dpZCAiZmFpbGVkIHRvIGluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NzYKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwNworbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjUKK21zZ2lkICJjYW5ub3QgcmVwYWNrIHRvIGNsZWFuIHVwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjcKK21zZ2lkICJjYW5ub3QgdW5saW5rIHRlbXBvcmFyeSBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2NSBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NTAKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjkKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4MgorIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4NQorbXNnaWQgIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDA0IGJ1aWx0aW4vZmV0Y2guYzoxNzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAxNAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAzOSBidWlsdGluL2Nsb25lLmM6MTA2MCBidWlsdGluL2RpZmZ0b29sLmM6MjcxCisjOiBidWlsdGluL2xvZy5jOjE4NjYgYnVpbHRpbi93b3JrdHJlZS5jOjI5NSBidWlsdGluL3dvcmt0cmVlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwOTAKK21zZ2lkICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBib3RoIC0tcmVmZXJlbmNlIGFuZCAtLXJlZmVyZW5jZS1pZi0iCisiYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1NAorbXNnaWQgIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU2Cittc2dpZCAiLS1zaGFsbG93LXNpbmNlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1OAorbXNnaWQgIi0tc2hhbGxvdy1leGNsdWRlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2MAorbXNnaWQgIi0tZmlsdGVyIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2MworbXNnaWQgInNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGlnbm9yaW5nIC0tbG9jYWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjgKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNDMgYnVpbHRpbi9jbG9uZS5jOjEyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNTQKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MTAKK21zZ2lkICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjcKK21zZ2lkICJsb29rdXAgY29uZmlnIHZhcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyOCBidWlsdGluL2NvbHVtbi5jOjI5Cittc2dpZCAibGF5b3V0IHRvIHVzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMwCittc2dpZCAiTWF4aW11bSB3aWR0aCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMxCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMworbXNnaWQgIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjE4Cittc2dpZCAiIgorImdpdCBjb21taXQtdHJlZSBbKC1wIDxwYXJlbnQ+KS4uLl0gWy1TWzxrZXlpZD5dXSBbKC1tIDxtZXNzYWdlPikuLi5dIFsoLUYgIgorIjxmaWxlPikuLi5dIDx0cmVlPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHBhcmVudCAlcyBpZ25vcmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo1NiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTM2IGJ1aWx0aW4vbG9nLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gY2xvc2UgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTIKK21zZ2lkICJpZCBvZiBhIHBhcmVudCBjb21taXQgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTQgYnVpbHRpbi9jb21taXQuYzoxNTAxIGJ1aWx0aW4vbWVyZ2UuYzoyNzEKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDkgYnVpbHRpbi9ub3Rlcy5jOjU3NSBidWlsdGluL3N0YXNoLmM6MTQ3NworIzogYnVpbHRpbi90YWcuYzo0MTIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTUgYnVpbHRpbi9jb21taXQuYzoxNTAxCittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExOAorbXNnaWQgInJlYWQgY29tbWl0IGxvZyBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIxIGJ1aWx0aW4vY29tbWl0LmM6MTUxMyBidWlsdGluL21lcmdlLmM6Mjg4CisjOiBidWlsdGluL3B1bGwuYzoxNzUgYnVpbHRpbi9yZXZlcnQuYzoxMTgKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzMworbXNnaWQgIm11c3QgZ2l2ZSBleGFjdGx5IG9uZSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxNDAKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDEKK21zZ2lkICJnaXQgY29tbWl0IFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2Cittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MQorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gYW1lbmQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2VcbiIKKyJpdCBlbXB0eS4gWW91IGNhbiByZXBlYXQgeW91ciBjb21tYW5kIHdpdGggLS1hbGxvdy1lbXB0eSwgb3IgeW91IGNhblxuIgorInJlbW92ZSB0aGUgY29tbWl0IGVudGlyZWx5IHdpdGggXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU2Cittc2dpZCAiIgorIlRoZSBwcmV2aW91cyBjaGVycnktcGljayBpcyBub3cgZW1wdHksIHBvc3NpYmx5IGR1ZSB0byBjb25mbGljdCByZXNvbHV0aW9uLlxuIgorIklmIHlvdSB3aXNoIHRvIGNvbW1pdCBpdCBhbnl3YXksIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MworbXNnaWQgIk90aGVyd2lzZSwgcGxlYXNlIHVzZSAnZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCdcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY2Cittc2dpZCAiIgorImFuZCB0aGVuIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcbiIKKyJcbiIKKyJ0byByZXN1bWUgY2hlcnJ5LXBpY2tpbmcgdGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorIklmIHlvdSB3aXNoIHRvIHNraXAgdGhpcyBjb21taXQsIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzE1Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzUxCittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY0Cittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzc2Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzozODUKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDAwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MDIKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQyNyBidWlsdGluL2NvbW1pdC5jOjQ1MCBidWlsdGluL2NvbW1pdC5jOjQ5NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ3OQorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4MQorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4OQorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUwOAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGhhcyBtYWxmb3JtZWQgYXV0aG9yIGxpbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MjcKK21zZ2lkICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjgwCittc2dpZCAiIgorInVuYWJsZSB0byBzZWxlY3QgYSBjb21tZW50IGNoYXJhY3RlciB0aGF0IGlzIG5vdCB1c2VkXG4iCisiaW4gdGhlIGN1cnJlbnQgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MTggYnVpbHRpbi9jb21taXQuYzo3NTEgYnVpbHRpbi9jb21taXQuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMwIGJ1aWx0aW4vc2hvcnRsb2cuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMgorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NjcgYnVpbHRpbi9jb21taXQuYzo3ODMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzc0Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODM0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgY2hlcnJ5LXBpY2suXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIgorIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNBdXRob3I6ICAgICUuKnMgPCUuKnM+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MjkKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5NworbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAxMSBidWlsdGluL3RhZy5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYXV0aG9yICclcycgaXMgbm90ICdOYW1lIDxlbWFpbD4nIGFuZCBtYXRjaGVzIG5vIGV4aXN0aW5nIGF1dGhvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpZ25vcmVkIG1vZGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODcgYnVpbHRpbi9jb21taXQuYzoxMzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMjcKK21zZ2lkICItLWxvbmcgYW5kIC16IGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTcxCittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODAKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODMKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTg4Cittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTgKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDAKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIwOAorbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjI1Cittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRocyAnJXMgLi4uJyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYyIGJ1aWx0aW4vY29tbWl0LmM6MTUyNAorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjQgYnVpbHRpbi9jb21taXQuYzoxNTI2Cittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY2Cittc2dpZCAic2hvdyBzdGFzaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjggYnVpbHRpbi9jb21taXQuYzoxNTI4Cittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzcwCittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzAgYnVpbHRpbi9jb21taXQuYzoxNTMwIGJ1aWx0aW4vcHVzaC5jOjU0OQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY0MworbXNnaWQgIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MyBidWlsdGluL2NvbW1pdC5jOjE1MzIKK21zZ2lkICJzaG93IHN0YXR1cyBpbiBsb25nIGZvcm1hdCAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc2IGJ1aWx0aW4vY29tbWl0LmM6MTUzNQorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OCBidWlsdGluL2NvbW1pdC5jOjEzODIgYnVpbHRpbi9jb21taXQuYzoxNTM4CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTkgYnVpbHRpbi9yZWJhc2UuYzoxNTY5IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OSBidWlsdGluL2NvbW1pdC5jOjE1MzgKK21zZ2lkICJzaG93IHVudHJhY2tlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IGFsbCwgbm9ybWFsLCBuby4gKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgzCittc2dpZCAiIgorInNob3cgaWdub3JlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uIChEZWZhdWx0OiAiCisidHJhZGl0aW9uYWwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4NSBwYXJzZS1vcHRpb25zLmg6MTkyCittc2dpZCAid2hlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODYKK21zZ2lkICIiCisiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcywgb3B0aW9uYWwgd2hlbjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg4Cittc2dpZCAibGlzdCB1bnRyYWNrZWQgZmlsZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODkKK21zZ2lkICJkbyBub3QgZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzkxCittc2dpZCAiZGV0ZWN0IHJlbmFtZXMsIG9wdGlvbmFsbHkgc2V0IHNpbWlsYXJpdHkgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDExCittc2dpZCAiVW5zdXBwb3J0ZWQgY29tYmluYXRpb24gb2YgaWdub3JlZCBhbmQgdW50cmFja2VkLWZpbGVzIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTQKK21zZ2lkICJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NQorbXNnaWQgInNob3cgZGlmZiBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTcKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OCBidWlsdGluL21lcmdlLmM6Mjc1IGJ1aWx0aW4vdGFnLmM6NDE0Cittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTkKK21zZ2lkICJhdXRob3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk5Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAwIGJ1aWx0aW4vZ2MuYzo1MzgKK21zZ2lkICJkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMAorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDIgYnVpbHRpbi9jb21taXQuYzoxNTAzIGJ1aWx0aW4vY29tbWl0LmM6MTUwNAorIzogYnVpbHRpbi9jb21taXQuYzoxNTA1IHBhcnNlLW9wdGlvbnMuaDozMjggcmVmLWZpbHRlci5oOjkyCittc2dpZCAiY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMgorbXNnaWQgInJldXNlIGFuZCBlZGl0IG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMworbXNnaWQgInJldXNlIG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNAorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIGZpeHVwIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA1Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gc3F1YXNoIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA2Cittc2dpZCAidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDcgYnVpbHRpbi9sb2cuYzoxNjM0IGJ1aWx0aW4vbWVyZ2UuYzoyOTAKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0NCBidWlsdGluL3JldmVydC5jOjExMAorbXNnaWQgImFkZCBTaWduZWQtb2ZmLWJ5OiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDgKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA5Cittc2dpZCAiZm9yY2UgZWRpdCBvZiBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTExCittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE2Cittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE3Cittc2dpZCAiY29tbWl0IGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxOAorbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTkKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjAKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMQorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjIKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjMKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzNgorbXNnaWQgImFtZW5kIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzcKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTQ0Cittc2dpZCAib2sgdG8gcmVjb3JkIGFuIGVtcHR5IGNoYW5nZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NDYKK21zZ2lkICJvayB0byByZWNvcmQgYSBjaGFuZ2Ugd2l0aCBhbiBlbXB0eSBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYyNgorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY5MQorbXNnaWQgIiIKKyJyZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNworbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjIKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmQgb2JqZWN0IGRpcmVjdG9yeSBtYXRjaGluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjY4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTI1CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIxMCBidWlsdGluL2ZldGNoLmM6MTc5IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgImRpciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjY5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTI2CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIxMQorbXNnaWQgIlRoZSBvYmplY3QgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBncmFwaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjcxCittc2dpZCAiaWYgdGhlIGNvbW1pdC1ncmFwaCBpcyBzcGxpdCwgb25seSB2ZXJpZnkgdGhlIHRpcCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6OTQgdC9oZWxwZXIvdGVzdC1yZWFkLWdyYXBoLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gY29tbWl0LWdyYXBoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMjgKK21zZ2lkICJzdGFydCB3YWxrIGF0IGFsbCByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTMwCittc2dpZCAic2NhbiBwYWNrLWluZGV4ZXMgbGlzdGVkIGJ5IHN0ZGluIGZvciBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTMyCittc2dpZCAic3RhcnQgd2FsayBhdCBjb21taXRzIGxpc3RlZCBieSBzdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNAorbXNnaWQgImluY2x1ZGUgYWxsIGNvbW1pdHMgYWxyZWFkeSBpbiB0aGUgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzcKK21zZ2lkICJhbGxvdyB3cml0aW5nIGFuIGluY3JlbWVudGFsIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTQzCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE0MQorbXNnaWQgIm1heGltdW0gcmF0aW8gYmV0d2VlbiB0d28gbGV2ZWxzIG9mIGEgc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTU5Cittc2dpZCAidXNlIGF0IG1vc3Qgb25lIG9mIC0tcmVhY2hhYmxlLCAtLXN0ZGluLWNvbW1pdHMsIG9yIC0tc3RkaW4tcGFja3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMQorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMDQgYnVpbHRpbi9lbnYtLWhlbHBlci5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAtLXR5cGUgYXJndW1lbnQsICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTE2Cittc2dpZCAib25seSBvbmUgdHlwZSBhdCBhIHRpbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjUKK21zZ2lkICJDb25maWcgZmlsZSBsb2NhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNgorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjcKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI4Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjkKK21zZ2lkICJ1c2UgcGVyLXdvcmt0cmVlIGNvbmZpZyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAidXNlIGdpdmVuIGNvbmZpZyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMxCittc2dpZCAiYmxvYi1pZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgInJlYWQgY29uZmlnIGZyb20gZ2l2ZW4gYmxvYiBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzIKK21zZ2lkICJBY3Rpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzMKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNAorbXNnaWQgImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNQorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM2Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNworbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM4Cittc2dpZCAiYWRkIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM5Cittc2dpZCAicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MAorbXNnaWQgInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQxCittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQyCittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MworbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ0Cittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDUKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NgorbXNnaWQgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IHNsb3QgW3N0ZG91dC1pcy10dHldIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ3Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OCBidWlsdGluL2Vudi0taGVscGVyLmM6MzgKK21zZ2lkICJ2YWx1ZSBpcyBnaXZlbiB0aGlzIHR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDkKK21zZ2lkICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTAKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MQorbXNnaWQgInZhbHVlIGlzIC0tYm9vbCBvciAtLWludCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MgorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTMKK21zZ2lkICJ2YWx1ZSBpcyBhbiBleHBpcnkgZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NAorbXNnaWQgIk90aGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU1Cittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU2Cittc2dpZCAic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU3Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU4Cittc2dpZCAic2hvdyBvcmlnaW4gb2YgY29uZmlnIChmaWxlLCBzdGFuZGFyZCBpbnB1dCwgYmxvYiwgY29tbWFuZCBsaW5lKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OQorbXNnaWQgInNob3cgc2NvcGUgb2YgY29uZmlnICh3b3JrdHJlZSwgbG9jYWwsIGdsb2JhbCwgc3lzdGVtLCBjb21tYW5kKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE2MCBidWlsdGluL2Vudi0taGVscGVyLmM6NDAKK21zZ2lkICJ2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE2MAorbXNnaWQgIndpdGggLS1nZXQsIHVzZSBkZWZhdWx0IHZhbHVlIHdoZW4gbWlzc2luZyBlbnRyeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlIGZyb20gJWQgdG8gJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZvcm1hdCBkZWZhdWx0IGNvbmZpZyB2YWx1ZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGNvbG9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo0NTkKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUxMiBidWlsdGluL2NvbmZpZy5jOjc2OAorbXNnaWQgIm5vdCBpbiBhIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MTUKK21zZ2lkICJ3cml0aW5nIHRvIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MTgKK21zZ2lkICJ3cml0aW5nIGNvbmZpZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MjcKK21zZ2lkICJvbmx5IG9uZSBjb25maWcgZmlsZSBhdCBhIHRpbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MzIKK21zZ2lkICItLWxvY2FsIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MzUKK21zZ2lkICItLWJsb2IgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1NQorbXNnaWQgIiRIT01FIG5vdCBzZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NzkKK21zZ2lkICIiCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzE0Cittc2dpZCAiLS1nZXQtY29sb3IgYW5kIHZhcmlhYmxlIHR5cGUgYXJlIGluY29oZXJlbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTkKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzMyCittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzgKK21zZ2lkICIiCisiLS1zaG93LW9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwLCBhbmQgLS0iCisibGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0NAorbXNnaWQgIi0tZGVmYXVsdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29uZmlnIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2MAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzAKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzIKK21zZ2lkICJlZGl0aW5nIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBvdmVyd3JpdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGggYSBzaW5nbGUgdmFsdWVcbiIKKyIgICAgICAgVXNlIGEgcmVnZXhwLCAtLWFkZCBvciAtLXJlcGxhY2UtYWxsIHRvIGNoYW5nZSAlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo4NzMgYnVpbHRpbi9jb25maWcuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBzZWN0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5MAorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6MTAwCittc2dpZCAicHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNgorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gLS1kaXJ0eSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjIKK21zZ2lkICJoZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImFubm90YXRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJkZXNjcmliZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBuZWl0aGVyIGEgY29tbWl0IG5vciBibG9iIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTEKK21zZ2lkICJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTIKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTMKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU0Cittc2dpZCAidXNlIGFueSB0YWcsIGV2ZW4gdW5hbm5vdGF0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NQorbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NgorbXNnaWQgIm9ubHkgZm9sbG93IGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU5Cittc2dpZCAib25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTYxCittc2dpZCAiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTYzCittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY1Cittc2dpZCAiZG8gbm90IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjcgYnVpbHRpbi9uYW1lLXJldi5jOjUzNQorbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY4IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NzEKK21zZ2lkICJtYXJrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjkKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU3MgorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gYnJva2VuIHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItYnJva2VuXCIpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1OTAKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjE5Cittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY3MAorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NzIKK21zZ2lkICItLWJyb2tlbiBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmYuYzozNTAKK21zZ2lkICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmYuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwCittc2dpZCAiZ2l0IGRpZmZ0b29sIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkOiAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMgZm9yIHN5bWxpbmsgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjQxMworbXNnaWQgIiIKKyJjb21iaW5lZCBkaWZmIGZvcm1hdHMoJy1jJyBhbmQgJy0tY2MnKSBhcmUgbm90IHN1cHBvcnRlZCBpblxuIgorImRpcmVjdG9yeSBkaWZmIG1vZGUoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJib3RoIGZpbGVzIG1vZGlmaWVkOiAnJXMnIGFuZCAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjM2Cittc2dpZCAid29ya2luZyB0cmVlIGZpbGUgaGFzIGJlZW4gbGVmdC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wb3JhcnkgZmlsZXMgZXhpc3QgaW4gJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0OAorbXNnaWQgInlvdSBtYXkgd2FudCB0byBjbGVhbnVwIG9yIHJlY292ZXIgdGhlc2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTcKK21zZ2lkICJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njk5Cittc2dpZCAicGVyZm9ybSBhIGZ1bGwtZGlyZWN0b3J5IGRpZmYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwMQorbXNnaWQgImRvIG5vdCBwcm9tcHQgYmVmb3JlIGxhdW5jaGluZyBhIGRpZmYgdG9vbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA2Cittc2dpZCAidXNlIHN5bWxpbmtzIGluIGRpci1kaWZmIG1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNworbXNnaWQgInRvb2wiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwOAorbXNnaWQgInVzZSB0aGUgc3BlY2lmaWVkIGRpZmYgdG9vbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEwCittc2dpZCAicHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTMKK21zZ2lkICIiCisibWFrZSAnZ2l0LWRpZmZ0b29sJyBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbiAtIHplcm8gZXhpdCAiCisiY29kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE2Cittc2dpZCAic3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTcKK21zZ2lkICJwYXNzZWQgdG8gYGRpZmZgIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzIKK21zZ2lkICJkaWZmdG9vbCByZXF1aXJlcyB3b3JrdHJlZSBvciAtLW5vLWluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzkKK21zZ2lkICItLWRpci1kaWZmIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc0MgorbXNnaWQgIi0tZ3VpLCAtLXRvb2wgYW5kIC0tZXh0Y21kIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1MAorbXNnaWQgIm5vIDx0b29sPiBnaXZlbiBmb3IgLS10b29sPTx0b29sPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzU3Cittc2dpZCAibm8gPGNtZD4gZ2l2ZW4gZm9yIC0tZXh0Y21kPTxjbWQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2Cittc2dpZCAiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPG9wdGlvbnM+IDxlbnYtdmFyPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6MzcgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAidHlwZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NDEKK21zZ2lkICJkZWZhdWx0IGZvciBnaXRfZW52XyooLi4uKSB0byBmYWxsIGJhY2sgb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQzCittc2dpZCAiYmUgcXVpZXQgb25seSB1c2UgZ2l0X2Vudl8qKCkgdmFsdWUgYXMgZXhpdCBjb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYC0tZGVmYXVsdCcgZXhwZWN0cyBhIGJvb2xlYW4gdmFsdWUgd2l0aCBgLS10eXBlPWJvb2xgLCBub3QgYCVzYCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGFuIHVuc2lnbmVkIGxvbmcgdmFsdWUgd2l0aCBgLS10eXBlPXVsb25nYCwgbm90IGAiCisiJXNgIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyOQorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjg1MworbXNnaWQgIkVycm9yOiBDYW5ub3QgZXhwb3J0IG5lc3RlZCB0YWdzIHVubGVzcyAtLW1hcmstdGFncyBpcyBzcGVjaWZpZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTUyCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NAorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NworbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjAKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgY29tbWl0IG1lc3NhZ2VzIGluIGFuIGFsdGVybmF0ZSBlbmNvZGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MworbXNnaWQgIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY1Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY5Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3MQorbXNnaWQgIkZha2UgYSB0YWdnZXIgd2hlbiB0YWdzIGxhY2sgb25lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTczCittc2dpZCAiT3V0cHV0IGZ1bGwgdHJlZSBmb3IgZWFjaCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzUKK21zZ2lkICJVc2UgdGhlIGRvbmUgZmVhdHVyZSB0byB0ZXJtaW5hdGUgdGhlIHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NgorbXNnaWQgIlNraXAgb3V0cHV0IG9mIGJsb2IgZGF0YSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NyBidWlsdGluL2xvZy5jOjE3MDUKK21zZ2lkICJyZWZzcGVjIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc4Cittc2dpZCAiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc5Cittc2dpZCAiYW5vbnltaXplIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MQorbXNnaWQgIlJlZmVyZW5jZSBwYXJlbnRzIHdoaWNoIGFyZSBub3QgaW4gZmFzdC1leHBvcnQgc3RyZWFtIGJ5IG9iamVjdCBpZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MworbXNnaWQgIlNob3cgb3JpZ2luYWwgb2JqZWN0IGlkcyBvZiBibG9icy9jb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTg1Cittc2dpZCAiTGFiZWwgdGFncyB3aXRoIG1hcmsgaWRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMjIwCittc2dpZCAiQ2Fubm90IHBhc3MgYm90aCAtLWltcG9ydC1tYXJrcyBhbmQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNAorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzUKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzYKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzcKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNgorbXNnaWQgImZldGNoLnBhcmFsbGVsIGNhbm5vdCBiZSBuZWdhdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM5IGJ1aWx0aW4vcHVsbC5jOjE4NAorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MSBidWlsdGluL3B1bGwuYzoyMjgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL2ZldGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMgYnVpbHRpbi9wdWxsLmM6MTg3Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDUgYnVpbHRpbi9wdWxsLmM6MTkwCittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDYKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDgKK21zZ2lkICJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MCBidWlsdGluL3B1bGwuYzoxOTQKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTIKK21zZ2lkICJkbyBub3QgZmV0Y2ggYWxsIHRhZ3MgKC0tbm8tdGFncykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NiBidWlsdGluL3B1bGwuYzoxOTcKK21zZ2lkICJwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm8gbG9uZ2VyIG9uIHJlbW90ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4Cittc2dpZCAicHJ1bmUgbG9jYWwgdGFncyBubyBsb25nZXIgb24gcmVtb3RlIGFuZCBjbG9iYmVyIGNoYW5nZWQgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU5IGJ1aWx0aW4vZmV0Y2guYzoxODIgYnVpbHRpbi9wdWxsLmM6MTIxCittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjAKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9wdWxsLmM6MjA1Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2NgorbXNnaWQgImFsbG93IHVwZGF0aW5nIG9mIEhFQUQgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjkgYnVpbHRpbi9mZXRjaC5jOjE3NSBidWlsdGluL3B1bGwuYzoyMDgKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzEKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IHJlcG9zaXRvcnkgYmFzZWQgb24gdGltZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3IGJ1aWx0aW4vcHVsbC5jOjIxMQorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODAKK21zZ2lkICJwcmVwZW5kIHRoaXMgdG8gc3VibW9kdWxlIHBhdGggb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODMKK21zZ2lkICIiCisiZGVmYXVsdCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKGxvd2VyIHByaW9yaXR5IHRoYW4gY29uZmlnICIKKyJmaWxlcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NyBidWlsdGluL3B1bGwuYzoyMTQKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OCBidWlsdGluL3B1bGwuYzoyMTYKK21zZ2lkICJyZWZtYXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OSBidWlsdGluL3B1bGwuYzoyMTcKK21zZ2lkICJzcGVjaWZ5IGZldGNoIHJlZm1hcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk2Cittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5OQorbXNnaWQgInJ1biAnZ2MgLS1hdXRvJyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAxIGJ1aWx0aW4vcHVsbC5jOjIyNgorbXNnaWQgImNoZWNrIGZvciBmb3JjZWQtdXBkYXRlcyBvbiBhbGwgdXBkYXRlZCBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAzCittc2dpZCAid3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEzCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWd1cmF0aW9uIGZldGNoLm91dHB1dCBjb250YWlucyBpbnZhbGlkIHZhbHVlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzU1Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NjggYnVpbHRpbi9mZXRjaC5jOjc4NCBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY5Cittc2dpZCAiY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc3OQorbXNnaWQgIlt0YWcgdXBkYXRlXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzgwIGJ1aWx0aW4vZmV0Y2guYzo4MTcgYnVpbHRpbi9mZXRjaC5jOjgzOQorIzogYnVpbHRpbi9mZXRjaC5jOjg1MQorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODQKK21zZ2lkICJ3b3VsZCBjbG9iYmVyIGV4aXN0aW5nIHRhZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODA2Cittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDkKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMgorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODc3Cittc2dpZCAiIgorIkZldGNoIG5vcm1hbGx5IGluZGljYXRlcyB3aGljaCBicmFuY2hlcyBoYWQgYSBmb3JjZWQgdXBkYXRlLFxuIgorImJ1dCB0aGF0IGNoZWNrIGhhcyBiZWVuIGRpc2FibGVkLiBUbyByZS1lbmFibGUsIHVzZSAnLS1zaG93LWZvcmNlZC11cGRhdGVzJ1xuIgorImZsYWcgb3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIHRydWUnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjaGVjayBmb3JjZWQgdXBkYXRlcy4gWW91IGNhbiB1c2VcbiIKKyInLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgIgorImZhbHNlJ1xuIgorIiB0byBhdm9pZCB0aGlzIGNoZWNrLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVqZWN0ICVzIGJlY2F1c2Ugc2hhbGxvdyByb290cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgdXBkYXRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAyNiBidWlsdGluL2ZldGNoLmM6MTE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTY3Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTExMgorbXNnaWQgIihub25lKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MjEKK21zZ2lkICJtdWx0aXBsZSBicmFuY2hlcyBkZXRlY3RlZCwgaW5jb21wYXRpYmxlIHdpdGggLS1zZXQtdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzYKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzOAorbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSB0YWciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NDAKK21zZ2lkICJ1bmtub3duIGJyYW5jaCB0eXBlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDQyCittc2dpZCAiIgorIm5vIHNvdXJjZSBicmFuY2ggZm91bmQuXG4iCisieW91IG5lZWQgdG8gc3BlY2lmeSBleGFjdGx5IG9uZSBicmFuY2ggd2l0aCB0aGUgLS1zZXQtdXBzdHJlYW0gb3B0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2OCBidWlsdGluL2ZldGNoLmM6MTYzMQorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTc4IGJ1aWx0aW4vZmV0Y2guYzoxNjMzIGJ1aWx0aW4vcmVtb3RlLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmV0Y2ggJyVzJyAoZXhpdCBjb2RlOiAlZClcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY5MworbXNnaWQgIiIKKyJObyByZW1vdGUgcmVwb3NpdG9yeSBzcGVjaWZpZWQuICBQbGVhc2UsIHNwZWNpZnkgZWl0aGVyIGEgVVJMIG9yIGFcbiIKKyJyZW1vdGUgbmFtZSBmcm9tIHdoaWNoIG5ldyByZXZpc2lvbnMgc2hvdWxkIGJlIGZldGNoZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzMwCittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc4MAorbXNnaWQgIk5lZ2F0aXZlIGRlcHRoIGluIC0tZGVlcGVuIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODIKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzg3Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODkKK21zZ2lkICItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwNQorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODA3Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODE2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MjMKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NDEKK21zZ2lkICIiCisiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyJwYXJ0aWFsY2xvbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTgKK21zZ2lkICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzEKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc0Cittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzcKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3OAorbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzkKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTIKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMworbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM3Cittc2dpZCAic2hvdyBvbmx5IDxuPiBtYXRjaGVkIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOSBidWlsdGluL3RhZy5jOjQzOQorbXNnaWQgInJlc3BlY3QgZm9ybWF0IGNvbG9ycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQyCittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIHBvaW50cyBhdCB0aGUgZ2l2ZW4gb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDQKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDUKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ2Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ3Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2OCBidWlsdGluL2ZzY2suYzoxNDcgYnVpbHRpbi9mc2NrLmM6MTQ4Cittc2dpZCAidW5rbm93biIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiBlcnJvciBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+CisjOiBidWlsdGluL2ZzY2suYzoxMDAgYnVpbHRpbi9mc2NrLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGluICVzICVzOiAlcyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiB3YXJuaW5nIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nIGluICVzICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzoxNDMgYnVpbHRpbi9mc2NrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBsaW5rIGZyb20gJTdzICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE1NQorbXNnaWQgIndyb25nIG9iamVjdCB0eXBlIGluIGxpbmsiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJicm9rZW4gbGluayBmcm9tICU3cyAlc1xuIgorIiAgICAgICAgICAgICAgdG8gJTdzICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlYWNoYWJsZSAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGFuZ2xpbmcgJXMgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MzM5Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsb3N0LWZvdW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkgKCVkIG9iamVjdHMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo0MjkKK21zZ2lkICJicm9rZW4gbGlua3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJvb3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZ2dlZCAlcyAlcyAoJXMpIGluICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgcmVmbG9nIGVudHJ5ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZWZsb2cgJXMtPiVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjA5Cittc2dpZCAibm90aWNlOiBObyBkZWZhdWx0IHJlZmVyZW5jZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3VsZCBub3QgYmUgcGFyc2VkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNoYTEgZmlsZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjcyCittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzUKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIGxpbmsiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6Njk1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRldGFjaGVkIEhFQUQgcG9pbnRzIGF0IG5vdGhpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGljZTogJXMgcG9pbnRzIHRvIGFuIHVuYm9ybiBicmFuY2ggKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjQKK21zZ2lkICJDaGVja2luZyBjYWNoZSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MzgKK21zZ2lkICJub24tdHJlZSBpbiBjYWNoZS10cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc2OQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc1Cittc2dpZCAic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NgorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzcKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzgKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzkKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODAKK21zZ2lkICJtYWtlIHJlZmxvZ3MgaGVhZCBub2RlcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgxCittc2dpZCAiYWxzbyBjb25zaWRlciBwYWNrcyBhbmQgYWx0ZXJuYXRlIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgyCittc2dpZCAiY2hlY2sgb25seSBjb25uZWN0aXZpdHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgzCittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NQorbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NiBidWlsdGluL3BydW5lLmM6MTMyCittc2dpZCAic2hvdyBwcm9ncmVzcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODcKK21zZ2lkICJzaG93IHZlcmJvc2UgbmFtZXMgZm9yIHJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg0NiBidWlsdGluL2luZGV4LXBhY2suYzoyMjUKK21zZ2lkICJDaGVja2luZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IG1pc3NpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyOiBleHBlY3RlZCBzaGExLCBnb3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6MzUKK21zZ2lkICJnaXQgZ2MgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmc3RhdCAlczogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJyVzJyB2YWx1ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0NzUgYnVpbHRpbi9pbml0LWRiLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NDg0IGJ1aWx0aW4vbm90ZXMuYzoyNDAgYnVpbHRpbi90YWcuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbGFzdCBnYyBydW4gcmVwb3J0ZWQgdGhlIGZvbGxvd2luZy4gUGxlYXNlIGNvcnJlY3QgdGhlIHJvb3QgY2F1c2VcbiIKKyJhbmQgcmVtb3ZlICVzLlxuIgorIkF1dG9tYXRpYyBjbGVhbnVwIHdpbGwgbm90IGJlIHBlcmZvcm1lZCB1bnRpbCB0aGUgZmlsZSBpcyByZW1vdmVkLlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1MzkKK21zZ2lkICJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NTQxCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDUKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NTQ4Cittc2dpZCAicmVwYWNrIGFsbCBvdGhlciBwYWNrcyBleGNlcHQgdGhlIGxhcmdlc3QgcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBnYy5sb2dleHBpcnkgdmFsdWUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgcHJ1bmUgZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGluIGJhY2tncm91bmQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjY5NAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzozMAorbXNnaWQgImdpdCBncmVwIFs8b3B0aW9ucz5dIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIGZvciAlcyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24KKyMuIHZhcmlhYmxlIGZvciB0d2Vha2luZyB0aHJlYWRzLCBjdXJyZW50bHkKKyMuIGdyZXAudGhyZWFkcworIy4KKyM6IGJ1aWx0aW4vZ3JlcC5jOjI4NyBidWlsdGluL2luZGV4LXBhY2suYzoxNTM4IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MzEKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg1NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ1MyBidWlsdGluL2dyZXAuYzo1NzggYnVpbHRpbi9ncmVwLmM6NjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDMKK21zZ2lkICJzZWFyY2ggaW4gaW5kZXggaW5zdGVhZCBvZiBpbiB0aGUgd29yayB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwNQorbXNnaWQgImZpbmQgaW4gY29udGVudHMgbm90IG1hbmFnZWQgYnkgZ2l0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwNworbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDkKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODExCittc2dpZCAicmVjdXJzaXZlbHkgc2VhcmNoIGluIGVhY2ggc3VibW9kdWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNAorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNgorbXNnaWQgImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE4Cittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIwCittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjIKK21zZ2lkICJkb24ndCBtYXRjaCBwYXR0ZXJucyBpbiBiaW5hcnkgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI1Cittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgd2l0aCB0ZXh0Y29udiBmaWx0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNworbXNnaWQgInNlYXJjaCBpbiBzdWJkaXJlY3RvcmllcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI5Cittc2dpZCAiZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4gbGV2ZWxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMworbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNgorbXNnaWQgInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzkKK21zZ2lkICJpbnRlcnByZXQgcGF0dGVybnMgYXMgZml4ZWQgc3RyaW5ncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDIKK21zZ2lkICJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ1Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ2Cittc2dpZCAic2hvdyBjb2x1bW4gbnVtYmVyIG9mIGZpcnN0IG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NworbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0OAorbXNnaWQgInNob3cgZmlsZW5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODUyCittc2dpZCAic2hvdyBvbmx5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NworbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTkKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MgorbXNnaWQgInNob3cgb25seSBtYXRjaGluZyBwYXJ0cyBvZiBhIGxpbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY0Cittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjUKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjcKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjkKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3MgorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NQorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc3Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3OQorbXNnaWQgInVzZSA8bj4gd29ya2VyIHRocmVhZHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgwCittc2dpZCAic2hvcnRjdXQgZm9yIC1DIE5VTSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODMKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4NQorbXNnaWQgInNob3cgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4OAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MAorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTIKK21zZ2lkICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwNAorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwNgorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTA4Cittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTEyCittc2dpZCAicGFnZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTEyCittc2dpZCAic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTE2Cittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk4MworbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAxOQorbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgcmV2aXNpb246ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNTcKK21zZ2lkICItLXVudHJhY2tlZCBub3Qgc3VwcG9ydGVkIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2MQorbXNnaWQgImludmFsaWQgb3B0aW9uIGNvbWJpbmF0aW9uLCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2NCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NDcKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODUxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEwMQorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTI3Cittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzMKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTQxCittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4NQorbXNnaWQgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0eXBlPl0gWy13XSBbLS1wYXRoPTxmaWxlPiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dICIKKyJbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODYKK21zZ2lkICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAib2JqZWN0IHR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk5Cittc2dpZCAid3JpdGUgdGhlIG9iamVjdCBpbnRvIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMQorbXNnaWQgInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDMKK21zZ2lkICJzdG9yZSBmaWxlIGFzIGlzIHdpdGhvdXQgZmlsdGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA0Cittc2dpZCAiIgorImp1c3QgaGFzaCBhbnkgcmFuZG9tIGdhcmJhZ2UgdG8gY3JlYXRlIGNvcnJ1cHQgb2JqZWN0cyBmb3IgZGVidWdnaW5nIEdpdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1Cittc2dpZCAicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDYKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3Cittc2dpZCAiZXhjbHVkZSBndWlkZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDgKK21zZ2lkICJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkKK21zZ2lkICJwcmludCBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo1MQorbXNnaWQgInNob3cgbWFuIHBhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTIKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo1NAorbXNnaWQgInNob3cgaW5mbyBwYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU2Cittc2dpZCAicHJpbnQgY29tbWFuZCBkZXNjcmlwdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo2MQorbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA0Cittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzoxMTcKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZW1hY3NjbGllbnQgdmVyc2lvbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTQzIGJ1aWx0aW4vaGVscC5jOjE2NSBidWlsdGluL2hlbHAuYzoxNzUgYnVpbHRpbi9oZWxwLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBwYXRoIGZvciB1bnN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5jbWQnIGluc3RlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogY21kIGZvciBzdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzY3Cittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM3NQorbXNnaWQgIm5vIGluZm8gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDM0IGJ1aWx0aW4vaGVscC5jOjQ0NSBnaXQuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbGlhc2VkIHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ4IGdpdC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo0NzcgYnVpbHRpbi9oZWxwLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ5MQorbXNnaWQgIidnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzOiBleHBlY3RlZCB0eXBlICVzLCBmb3VuZCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjgKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY5Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODEKK21zZ2lkICJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo2MDYKK21zZ2lkICJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5MSBidWlsdGluL3VucGFjay1vYmplY3RzLmM6OTUKK21zZ2lkICJwYWNrIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhY2tmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI2Cittc2dpZCAicGFjayBzaWduYXR1cmUgbWlzbWF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICU8UFJJdU1BWD46ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUxNQorbXNnaWQgIm9mZnNldCB2YWx1ZSBvdmVyZmxvdyBmb3IgZGVsdGEgYmFzZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIzCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2MgorbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU5MAorbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczNSBidWlsdGluL2luZGV4LXBhY2suYzo3NDEgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzY1CisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDQgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNTgKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjE4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgaW5mbyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyNyBidWlsdGluL2luZGV4LXBhY2suYzo4NDYKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2tlZCBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhbGwgY2hpbGQgb2JqZWN0cyBvZiAlcyBhcmUgcmVhY2hhYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjkyMCBidWlsdGluL2luZGV4LXBhY2suYzo5NTEKK21zZ2lkICJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEyMQorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjEKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTUKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2MAorbXNnaWQgImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTYzCittc2dpZCAicGFjayBoYXMganVuayBhdCB0aGUgZW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNzUKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExOTgKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMDggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjQ5Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCB0YWlsIGNoZWNrc3VtIGZvciAlcyAoZGlzayBjb3JydXB0aW9uPykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDA2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSB3cml0dGVuICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDYzCittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ3NworbXNnaWQgImNhbm5vdCBzdG9yZSBwYWNrIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ4NQorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MjkgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODYyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJub24gZGVsdGE6ICVkIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAibm9uIGRlbHRhOiAlZCBvYmplY3RzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY5MworbXNnaWQgIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NDIgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc0NQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc2MSBidWlsdGluL2luZGV4LXBhY2suYzoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzgxCittc2dpZCAiLS1maXgtdGhpbiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IC0tc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4MworbXNnaWQgIi0tc3RkaW4gcmVxdWlyZXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzg5Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4MzcgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjU4MgorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFjayBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kIGluICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgZnJvbSAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NCBidWlsdGluL2luaXQtZGIuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0NjgKK21zZ2lkICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPGRpcmVjdG9yeT5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MQorbXNnaWQgInBlcm1pc3Npb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MgorbXNnaWQgInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MjkgYnVpbHRpbi9pbml0LWRiLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTYKK21zZ2lkICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgIgorIjx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTUKK21zZ2lkICJlZGl0IGZpbGVzIGluIHBsYWNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTYKK21zZ2lkICJ0cmltIGVtcHR5IHRyYWlsZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTkKK21zZ2lkICJ3aGVyZSB0byBwbGFjZSB0aGUgbmV3IHRyYWlsZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDEKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMworbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGlzIG1pc3NpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDUKK21zZ2lkICJvdXRwdXQgb25seSB0aGUgdHJhaWxlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDYKK21zZ2lkICJkbyBub3QgYXBwbHkgY29uZmlnIHJ1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA3Cittc2dpZCAiam9pbiB3aGl0ZXNwYWNlLWNvbnRpbnVlZCB2YWx1ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDgKK21zZ2lkICJzZXQgcGFyc2luZyBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEwCittc2dpZCAiZG8gbm90IHRyZWF0IC0tLSBzcGVjaWFsbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTEKK21zZ2lkICJ0cmFpbGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEyCittc2dpZCAidHJhaWxlcihzKSB0byBhZGQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMjMKK21zZ2lkICItLXRyYWlsZXIgd2l0aCAtLW9ubHktaW5wdXQgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEzMworbXNnaWQgIm5vIGlucHV0IGZpbGUgZ2l2ZW4gZm9yIGluLXBsYWNlIGVkaXRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo1NgorbXNnaWQgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo1NworbXNnaWQgImdpdCBzaG93IFs8b3B0aW9ucz5dIDxvYmplY3Q+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc0Cittc2dpZCAic2hvdyBzb3VyY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzUKK21zZ2lkICJVc2UgbWFpbCBtYXAgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE3NworbXNnaWQgIm9ubHkgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE3OQorbXNnaWQgImRvIG5vdCBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwCittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4MworbXNnaWQgIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmFsIG91dHB1dDogJWQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo1NTAgYnVpbHRpbi9sb2cuYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdHlwZTogJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgY292ZXIgZnJvbSBkZXNjcmlwdGlvbiBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODIxCittc2dpZCAiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjkzNgorbXNnaWQgIm5hbWUgb2Ygb3V0cHV0IGRpcmVjdG9yeSBpcyB0b28gbG9uZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjk1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTY5Cittc2dpZCAibmVlZCBleGFjdGx5IG9uZSByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjk3OQorbXNnaWQgIm5vdCBhIHJhbmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0MworbXNnaWQgImNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQ5Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBjb3Zlci1sZXR0ZXIgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTUKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzEzCittc2dpZCAidHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDI0IGJ1aWx0aW4vbG9nLmM6MjE5NyBidWlsdGluL2xvZy5jOjIxOTkgYnVpbHRpbi9sb2cuYzoyMjExCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzNCBidWlsdGluL3JlcGxhY2UuYzo1OCBidWlsdGluL3JlcGxhY2UuYzoyMDcKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzOQorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDQzCittc2dpZCAiIgorImZhaWxlZCB0byBnZXQgdXBzdHJlYW0sIGlmIHlvdSB3YW50IHRvIHJlY29yZCBiYXNlIGNvbW1pdCBhdXRvbWF0aWNhbGx5LFxuIgorInBsZWFzZSB1c2UgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byB0byB0cmFjayBhIHJlbW90ZSBicmFuY2guXG4iCisiT3IgeW91IGNvdWxkIHNwZWNpZnkgYmFzZSBjb21taXQgYnkgLS1iYXNlPTxiYXNlLWNvbW1pdC1pZD4gbWFudWFsbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDYzCittc2dpZCAiZmFpbGVkIHRvIGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzQKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGQgYmUgdGhlIGFuY2VzdG9yIG9mIHJldmlzaW9uIGxpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc4Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkbid0IGJlIGluIHJldmlzaW9uIGxpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTMxCittc2dpZCAiY2Fubm90IGdldCBwYXRjaCBpZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE1ODMKK21zZ2lkICJmYWlsZWQgdG8gaW5mZXIgcmFuZ2UtZGlmZiByYW5nZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjI5Cittc2dpZCAidXNlIFtQQVRDSCBuL21dIGV2ZW4gd2l0aCBhIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzIKK21zZ2lkICJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzYKK21zZ2lkICJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzgKK21zZ2lkICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDAKK21zZ2lkICJ1c2Ugc2ltcGxlIG51bWJlciBzZXF1ZW5jZSBmb3Igb3V0cHV0IGZpbGUgbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQxCittc2dpZCAic2Z4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MgorbXNnaWQgInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NAorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ2Cittc2dpZCAibWFyayB0aGUgc2VyaWVzIGFzIE50aCByZS1yb2xsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0OAorbXNnaWQgIlVzZSBbUkZDIFBBVENIXSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUxCittc2dpZCAiY292ZXItZnJvbS1kZXNjcmlwdGlvbi1tb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1MgorbXNnaWQgImdlbmVyYXRlIHBhcnRzIG9mIGEgY292ZXIgbGV0dGVyIGJhc2VkIG9uIGEgYnJhbmNoJ3MgZGVzY3JpcHRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjU0Cittc2dpZCAiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjAKK21zZ2lkICJkb24ndCBzdHJpcC9hZGQgW1BBVENIXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjMKK21zZ2lkICJkb24ndCBvdXRwdXQgYmluYXJ5IGRpZmZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NQorbXNnaWQgIm91dHB1dCBhbGwtemVybyBoYXNoIGluIEZyb20gaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NworbXNnaWQgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjkKK21zZ2lkICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjcxCittc2dpZCAiTWVzc2FnaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MgorbXNnaWQgImhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzMKK21zZ2lkICJhZGQgZW1haWwgaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NCBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJlbWFpbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzQKK21zZ2lkICJhZGQgVG86IGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzgKK21zZ2lkICJpZGVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzkKK21zZ2lkICJzZXQgRnJvbSBhZGRyZXNzIHRvIDxpZGVudD4gKG9yIGNvbW1pdHRlciBpZGVudCBpZiBhYnNlbnQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MQorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgyCittc2dpZCAibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MyBidWlsdGluL2xvZy5jOjE2ODYKK21zZ2lkICJib3VuZGFyeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODQKK21zZ2lkICJhdHRhY2ggdGhlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NworbXNnaWQgImlubGluZSB0aGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkxCittc2dpZCAiZW5hYmxlIG1lc3NhZ2UgdGhyZWFkaW5nLCBzdHlsZXM6IHNoYWxsb3csIGRlZXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkzCittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTUKK21zZ2lkICJiYXNlLWNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTYKK21zZ2lkICJhZGQgcHJlcmVxdWlzaXRlIHRyZWUgaW5mbyB0byB0aGUgcGF0Y2ggc2VyaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5OAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSBmcm9tIGEgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTkKK21zZ2lkICJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMQorbXNnaWQgInNob3cgcHJvZ3Jlc3Mgd2hpbGUgZ2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMworbXNnaWQgInNob3cgY2hhbmdlcyBhZ2FpbnN0IDxyZXY+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA2Cittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJlZnNwZWM+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA4Cittc2dpZCAicGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4MDcKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4MDkKK21zZ2lkICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxNworbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODE5Cittc2dpZCAiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgyMQorbXNnaWQgIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4NTQKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE5NTgKK21zZ2lkICItLWludGVyZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYyCittc2dpZCAiSW50ZXJkaWZmOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJkaWZmIGFnYWluc3QgdiVkOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE5NjkKK21zZ2lkICItLWNyZWF0aW9uLWZhY3RvciByZXF1aXJlcyAtLXJhbmdlLWRpZmYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTczCittc2dpZCAiLS1yYW5nZS1kaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE5ODEKK21zZ2lkICJSYW5nZS1kaWZmOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmFuZ2UtZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoyMDI5Cittc2dpZCAiR2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjA3MworbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjEzMgorbXNnaWQgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ3MAorbXNnaWQgImdpdCBscy1maWxlcyBbPG9wdGlvbnM+XSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI2Cittc2dpZCAiaWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI4Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzMAorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2ZzbW9uaXRvciBjbGVhbicgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzMgorbXNnaWQgInNob3cgY2FjaGVkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzQKK21zZ2lkICJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM2Cittc2dpZCAic2hvdyBtb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzgKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MAorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDMKK21zZ2lkICJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ1Cittc2dpZCAic2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ3Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDkKK21zZ2lkICJzaG93IGxpbmUgZW5kaW5ncyBvZiBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTUxCittc2dpZCAiZG9uJ3Qgc2hvdyBlbXB0eSBkaXJlY3RvcmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU0Cittc2dpZCAic2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTYKK21zZ2lkICJzaG93IHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU4Cittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjEKK21zZ2lkICJleGNsdWRlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gPGZpbGU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjQKK21zZ2lkICJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY2Cittc2dpZCAiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTcwCittc2dpZCAibWFrZSB0aGUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHRvcCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MworbXNnaWQgInJlY3Vyc2UgdGhyb3VnaCBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzUKK21zZ2lkICJpZiBhbnkgPGZpbGU+IGlzIG5vdCBpbiB0aGUgaW5kZXgsIHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NgorbXNnaWQgInRyZWUtaXNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzcKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzkKK21zZ2lkICJzaG93IGRlYnVnZ2luZyBkYXRhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6OQorbXNnaWQgIiIKKyJnaXQgbHMtcmVtb3RlIFstLWhlYWRzXSBbLS10YWdzXSBbLS1yZWZzXSBbLS11cGxvYWQtcGFjaz08ZXhlYz5dXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy1xIHwgLS1xdWlldF0gWy0tZXhpdC1jb2RlXSBbLS1nZXQtdXJsXVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstLXN5bXJlZl0gWzxyZXBvc2l0b3J5PiBbPHJlZnM+Li4uXV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo1OQorbXNnaWQgImRvIG5vdCBwcmludCByZW1vdGUgVVJMIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAgYnVpbHRpbi9scy1yZW1vdGUuYzo2MiBidWlsdGluL3JlYmFzZS5jOjE1NjEKK21zZ2lkICJleGVjIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjEgYnVpbHRpbi9scy1yZW1vdGUuYzo2MworbXNnaWQgInBhdGggb2YgZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUgaG9zdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY1Cittc2dpZCAibGltaXQgdG8gdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY2Cittc2dpZCAibGltaXQgdG8gaGVhZHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NworbXNnaWQgImRvIG5vdCBzaG93IHBlZWxlZCB0YWdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjkKK21zZ2lkICJ0YWtlIHVybC48YmFzZT4uaW5zdGVhZE9mIGludG8gYWNjb3VudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjcyCittc2dpZCAiZXhpdCB3aXRoIGV4aXQgY29kZSAyIGlmIG5vIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzUKK21zZ2lkICJzaG93IHVuZGVybHlpbmcgcmVmIGluIGFkZGl0aW9uIHRvIHRoZSBvYmplY3QgcG9pbnRlZCBieSBpdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzozMAorbXNnaWQgImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI4Cittc2dpZCAib25seSBzaG93IHRyZWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMAorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzIKK21zZ2lkICJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNQorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM2Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzggYnVpbHRpbi9scy10cmVlLmM6MTQwCittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDMKK21zZ2lkICJ1c2UgZnVsbCBwYXRoIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0NQorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21haWxzcGxpdC5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBtYm94OiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NQorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NgorbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NworbXNnaWQgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTkKK21zZ2lkICJzd2l0Y2ggYG0nIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ1IGJ1aWx0aW4vcHVsbC5jOjEzMgorbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0OCBidWlsdGluL3B1bGwuYzoxMzUKK21zZ2lkICJzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0OSBidWlsdGluL3B1bGwuYzoxMzgKK21zZ2lkICIoc3lub255bSB0byAtLXN0YXQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTEgYnVpbHRpbi9wdWxsLmM6MTQxCittc2dpZCAiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTQgYnVpbHRpbi9wdWxsLmM6MTQ3Cittc2dpZCAiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NiBidWlsdGluL3B1bGwuYzoxNTAKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1OCBidWlsdGluL3B1bGwuYzoxNTMKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MAorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MiBidWlsdGluL3B1bGwuYzoxNjAKK21zZ2lkICJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjYgYnVpbHRpbi9wdWxsLmM6MTYzCittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjcgYnVpbHRpbi9ub3Rlcy5jOjc4NyBidWlsdGluL3B1bGwuYzoxNjcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIwIGJ1aWx0aW4vcmViYXNlLmM6MTU3NSBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjggYnVpbHRpbi9wdWxsLmM6MTY4Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjkgYnVpbHRpbi9wdWxsLmM6MTcxCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzAgYnVpbHRpbi9wdWxsLmM6MTcyCittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjcyCittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzkKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgxCittc2dpZCAiLS1hYm9ydCBidXQgbGVhdmUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSBhbG9uZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgzCittc2dpZCAiY29udGludWUgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4NSBidWlsdGluL3B1bGwuYzoxNzkKK21zZ2lkICJhbGxvdyBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI5MQorbXNnaWQgImJ5cGFzcyBwcmUtbWVyZ2UtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMDgKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzEzCittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzQwIGJ1aWx0aW4vbWVyZ2UuYzozNTcKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozODcKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBzdHJpbmc6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MDgKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA5Cittc2dpZCAiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NjUKK21zZ2lkICJFbXB0eSBjb21taXQgbWVzc2FnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk0MQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODAKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4MgorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg0Cittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgdmFsdWUgJyVzJyBpbiBlbnZpcm9ubWVudCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIGluICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE4MworbXNnaWQgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjg2Cittc2dpZCAiLS1hYm9ydCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5MAorbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIHRvIGFib3J0IChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5OQorbXNnaWQgIi0tcXVpdCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMxMgorbXNnaWQgIi0tY29udGludWUgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTYKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzIKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM5Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM0MgorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1NgorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzU4Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1jb21taXQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzc0Cittc2dpZCAiTm8gY29tbWl0IHNwZWNpZmllZCBhbmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm90IHNldC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTEKK21zZ2lkICJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5MworbXNnaWQgIk5vbi1mYXN0LWZvcndhcmQgY29tbWl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW50byBhbiBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MDAKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDgxCittc2dpZCAicmVmdXNpbmcgdG8gbWVyZ2UgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ5MAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU3NAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4gWWVlYWghIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTgwCittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjAzIGJ1aWx0aW4vbWVyZ2UuYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzIKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM0Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzYKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTMKK21zZ2lkICJvdXRwdXQgYWxsIGNvbW1vbiBhbmNlc3RvcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU1Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NworbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1OQorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNjEKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo5Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiAiCisiPG9yaWctZmlsZT4gPGZpbGUyPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNQorbXNnaWQgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzYKK21zZ2lkICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNworbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozOQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQxCittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIGEgdW5pb24gdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NAorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGlzIG1hcmtlciBzaXplIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ1Cittc2dpZCAiZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ3Cittc2dpZCAic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZy1maWxlL2ZpbGUyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiBJZ25vcmluZyAlcy4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiBJZ25vcmluZyAlcy4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjY1Cittc2dpZCAibm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjc0IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgcmVmICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21rdHJlZS5jOjY2Cittc2dpZCAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NAorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU1IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI2Cittc2dpZCAiYWxsb3cgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU2Cittc2dpZCAiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjkKK21zZ2lkICIiCisiZ2l0IG11bHRpLXBhY2staW5kZXggWzxvcHRpb25zPl0gKHdyaXRlfHZlcmlmeXxleHBpcmV8cmVwYWNrIC0tYmF0Y2gtIgorInNpemU9PHNpemU+KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNgorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjkKK21zZ2lkICIiCisiZHVyaW5nIHJlcGFjaywgY29sbGVjdCBwYWNrLWZpbGVzIG9mIHNtYWxsZXIgc2l6ZSBpbnRvIGEgYmF0Y2ggdGhhdCBpcyAiCisibGFyZ2VyIHRoYW4gdGhpcyBzaXplIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjUwIGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NjcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjAKK21zZ2lkICItLWJhdGNoLXNpemUgb3B0aW9uIGlzIG9ubHkgZm9yICdyZXBhY2snIHN1YmNvbW1hbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOAorbXNnaWQgImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjg1Cittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjUKK21zZ2lkICJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjEyNworbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gJyVzJyBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjE5MAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjE5OQorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIyNAorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIyNworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIzOAorbXNnaWQgIkNhbm5vdCBvdmVyd3JpdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjI0MQorbXNnaWQgIm11bHRpcGxlIHNvdXJjZXMgZm9yIHRoZSBzYW1lIHRhcmdldCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MjQzCittc2dpZCAiZGVzdGluYXRpb24gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzcgYnVpbHRpbi9yZW1vdGUuYzo3ODEgYnVpbHRpbi9yZXBhY2suYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NQorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY2Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjcKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI0Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjUKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUyNworbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjkKK21zZ2lkICJpZ25vcmUgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUzMQorbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUzMgorbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTMzCittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzkKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjkKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiAiCisifCAoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gY29weSBbLWZdIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxCittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgIgorIigtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzIKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMworbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSByZW1vdmUgWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW5dIFstdl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZ2V0LXJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQKK21zZ2lkICJnaXQgbm90ZXMgW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5Cittc2dpZCAiZ2l0IG5vdGVzIGFkZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NAorbXNnaWQgImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwCittc2dpZCAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NQorbXNnaWQgImdpdCBub3RlcyBlZGl0IFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwCittc2dpZCAiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzLXJlZj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MgorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODcKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkyCittc2dpZCAiZ2l0IG5vdGVzIGdldC1yZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3Cittc2dpZCAiV3JpdGUvZWRpdCB0aGUgbm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgb2JqZWN0OiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnc2hvdycgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxOTcKK21zZ2lkICJwbGVhc2Ugc3VwcGx5IHRoZSBub3RlIGNvbnRlbnRzIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwNgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBub3RlIGNvbnRlbnRzIGhhdmUgYmVlbiBsZWZ0IGluICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNDIgYnVpbHRpbi90YWcuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjMgYnVpbHRpbi9ub3Rlcy5jOjMxMyBidWlsdGluL25vdGVzLmM6MzE1CisjOiBidWlsdGluL25vdGVzLmM6MzgzIGJ1aWx0aW4vbm90ZXMuYzo0MzggYnVpbHRpbi9ub3Rlcy5jOjUyNgorIzogYnVpbHRpbi9ub3Rlcy5jOjUzMSBidWlsdGluL25vdGVzLmM6NjEwIGJ1aWx0aW4vbm90ZXMuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGZpcnN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBnaXQKKyMuIG5vdGVzIGNvbW1hbmQ6ICdhZGQnLCAnbWVyZ2UnLCAncmVtb3ZlJywgZXRjLgorIy4KKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gJXMgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNzYgYnVpbHRpbi9ub3Rlcy5jOjQzMSBidWlsdGluL25vdGVzLmM6NTA5CisjOiBidWlsdGluL25vdGVzLmM6NTIxIGJ1aWx0aW4vbm90ZXMuYzo1OTggYnVpbHRpbi9ub3Rlcy5jOjY2NQorIzogYnVpbHRpbi9ub3Rlcy5jOjgxNSBidWlsdGluL25vdGVzLmM6OTYzIGJ1aWx0aW4vbm90ZXMuYzo5ODUKK21zZ2lkICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODkgYnVpbHRpbi9ub3Rlcy5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTAgYnVpbHRpbi9ub3Rlcy5jOjU3NgorbXNnaWQgIm5vdGUgY29udGVudHMgYXMgYSBzdHJpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMyBidWlsdGluL25vdGVzLmM6NTc5Cittc2dpZCAibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxNiBidWlsdGluL25vdGVzLmM6NTgyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTkgYnVpbHRpbi9ub3Rlcy5jOjU4NQorbXNnaWQgInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDIyIGJ1aWx0aW4vbm90ZXMuYzo1ODgKK21zZ2lkICJhbGxvdyBzdG9yaW5nIGVtcHR5IG5vdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyMyBidWlsdGluL25vdGVzLmM6NDk2Cittc2dpZCAicmVwbGFjZSBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjMgYnVpbHRpbi9ub3Rlcy5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3NSBidWlsdGluL25vdGVzLmM6NjM3IGJ1aWx0aW4vbm90ZXMuYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5NworbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTkKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTE3Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKyJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OTgKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDAKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwMgorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJ2dpdCBub3RlcyBtZXJnZScgd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyMgorbXNnaWQgImZhaWxlZCB0byByZWFkIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MzkKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc0MgorbXNnaWQgImZhaWxlZCB0byBmaW5hbGl6ZSBub3RlcyBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm90ZXMgbWVyZ2Ugc3RyYXRlZ3kgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NAorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg2Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg4Cittc2dpZCAiIgorInJlc29sdmUgbm90ZXMgY29uZmxpY3RzIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzkwCittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzkyCittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzk0Cittc2dpZCAiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzk2Cittc2dpZCAiYWJvcnQgbm90ZXMgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgwNworbXNnaWQgImNhbm5vdCBtaXggLS1jb21taXQsIC0tYWJvcnQgb3IgLXMvLS1zdHJhdGVneSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODEyCittc2dpZCAibXVzdCBzcGVjaWZ5IGEgbm90ZXMgcmVmIHRvIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAtcy8tLXN0cmF0ZWd5OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgImEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0b3JlIGxpbmsgdG8gY3VycmVudCBub3RlcyByZWYgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdXRvbWF0aWMgbm90ZXMgbWVyZ2UgZmFpbGVkLiBGaXggY29uZmxpY3RzIGluICVzIGFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICIKKyInZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0Jywgb3IgYWJvcnQgdGhlIG1lcmdlIHdpdGggJ2dpdCBub3RlcyBtZXJnZSAtLSIKKyJhYm9ydCcuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5NyBidWlsdGluL3RhZy5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MTIKK21zZ2lkICJhdHRlbXB0IHRvIHJlbW92ZSBub24tZXhpc3RlbnQgbm90ZSBpcyBub3QgYW4gZXJyb3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxNQorbXNnaWQgInJlYWQgb2JqZWN0IG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTQgYnVpbHRpbi9wcnVuZS5jOjEzMCBidWlsdGluL3dvcmt0cmVlLmM6MTY0Cittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTUKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTgKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OQorbXNnaWQgInVzZSBub3RlcyBmcm9tIDxub3Rlcy1yZWY+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDM0IGJ1aWx0aW4vc3Rhc2guYzoxNjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1MgorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3B0aW9ucz4uLi5dIFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTMKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9wdGlvbnM+Li4uXSA8YmFzZS1uYW1lPiBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGFja2VkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGRlbHRhIGRldGVjdGVkIGZvciBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAib3JkZXJlZCAldSBvYmplY3RzLCBleHBlY3RlZCAlPFBSSXUzMj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5NzIKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIHBhY2tzIGFyZSBzcGxpdCBkdWUgdG8gcGFjay5wYWNrU2l6ZUxpbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTg1Cittc2dpZCAiV3JpdGluZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTA0NiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm90ZSAlPFBSSXUzMj4gb2JqZWN0cyB3aGlsZSBleHBlY3RpbmcgJTxQUkl1MzI+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTI5NworbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTcyNAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdmVyZmxvdyBpbiBwYWNrIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3V0IG9mIGJvdW5kIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwMDQKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0IGhlYWRlciBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyMTkgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjM1CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjIyMiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGluY29uc2lzdGVudCBvYmplY3QgbGVuZ3RoICglPFBSSXVNQVg+IHZzICU8UFJJdU1BWD4pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI1OQorbXNnaWQgInN1Ym9wdGltYWwgcGFjayAtIG91dCBvZiBtZW1vcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbHRhIGNvbXByZXNzaW9uIHVzaW5nIHVwIHRvICVkIHRocmVhZHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYWNrIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGFnICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjgwMQorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODA3Cittc2dpZCAiaW5jb25zaXN0ZW5jeSB3aXRoIGRlbHRhIGNvdW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgZWRnZSBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjk5MgorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIC0tbWlzc2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwNTEgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTU5Cittc2dpZCAiY2Fubm90IG9wZW4gcGFjayBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0IGF0ICVzIGNvdWxkIG5vdCBiZSBleGFtaW5lZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNjcKK21zZ2lkICJ1bmFibGUgdG8gZm9yY2UgbG9vc2Ugb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSByZXYgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg4Cittc2dpZCAidW5hYmxlIHRvIGFkZCByZWNlbnQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODMKK21zZ2lkICI8dmVyc2lvbj5bLDxvZmZzZXQ+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODQKK21zZ2lkICJ3cml0ZSB0aGUgcGFjayBpbmRleCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgaWR4IGZvcm1hdCB2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4NworbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg5Cittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5MQorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTMKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5NQorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk3Cittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk5Cittc2dpZCAicmV1c2UgZXhpc3RpbmcgZGVsdGFzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwMQorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDAzCittc2dpZCAidXNlIE9GU19ERUxUQSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNQorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA3Cittc2dpZCAiZG8gbm90IGNyZWF0ZSBhbiBlbXB0eSBwYWNrIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDkKK21zZ2lkICJyZWFkIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQxMQorbXNnaWQgImxpbWl0IHRoZSBvYmplY3RzIHRvIHRob3NlIHRoYXQgYXJlIG5vdCB5ZXQgcGFja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQxNAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWFjaGFibGUgZnJvbSBhbnkgcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQxNworbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCBieSByZWZsb2cgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjAKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgdG8gYnkgdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMworbXNnaWQgIm91dHB1dCBwYWNrIHRvIHN0ZG91dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjUKK21zZ2lkICJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI3Cittc2dpZCAia2VlcCB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyOQorbXNnaWQgInBhY2sgbG9vc2UgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzEKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzQKK21zZ2lkICJ1c2UgdGhlIHNwYXJzZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzNgorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzOAorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0MAorbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQyCittc2dpZCAiaWdub3JlIHRoaXMgcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDQKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0NgorbXNnaWQgImRvIG5vdCBoaWRlIGNvbW1pdHMgYnkgZ3JhZnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0OAorbXNnaWQgInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NTAKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1NAorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IGlmIHBvc3NpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1OAorbXNnaWQgImhhbmRsaW5nIGZvciBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDYxCittc2dpZCAiZG8gbm90IHBhY2sgb2JqZWN0cyBpbiBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDYzCittc2dpZCAicmVzcGVjdCBpc2xhbmRzIGR1cmluZyBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgY2hhaW4gZGVwdGggJWQgaXMgdG9vIGRlZXAsIGZvcmNpbmcgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDk3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2suZGVsdGFDYWNoZUxpbWl0IGlzIHRvbyBoaWdoLCBmb3JjaW5nICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU1MQorbXNnaWQgIi0tbWF4LXBhY2stc2l6ZSBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhIHBhY2sgZm9yIHRyYW5zZmVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU1MworbXNnaWQgIm1pbmltdW0gcGFjayBzaXplIGxpbWl0IGlzIDEgTWlCIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU1OAorbXNnaWQgIi0tdGhpbiBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhbiBpbmRleGFibGUgcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NjEKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC0tdW5wYWNrLXVucmVhY2hhYmxlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTY3Cittc2dpZCAiY2Fubm90IHVzZSAtLWZpbHRlciB3aXRob3V0IC0tc3Rkb3V0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzYyNworbXNnaWQgIkVudW1lcmF0aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUb3RhbCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHJldXNlZCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHBhY2stIgorInJldXNlZCAlPFBSSXUzMj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzo4Cittc2dpZCAiZ2l0IHBhY2stcmVmcyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE2Cittc2dpZCAicGFjayBldmVyeXRoaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTcKK21zZ2lkICJwcnVuZSBsb29zZSByZWZzIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjkKK21zZ2lkICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo0MgorbXNnaWQgIlJlbW92aW5nIGR1cGxpY2F0ZSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMgorbXNnaWQgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSA8dGltZT5dIFstLV0gWzxoZWFkPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzMQorbXNnaWQgInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BydW5lLmM6MTM0Cittc2dpZCAiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNgorbXNnaWQgImxpbWl0IHRyYXZlcnNhbCB0byBvYmplY3RzIG91dHNpZGUgcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxNTAKK21zZ2lkICJjYW5ub3QgcHJ1bmUgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUgYnVpbHRpbi9wdWxsLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjY3Cittc2dpZCAiZ2l0IHB1bGwgWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6MTIyCittc2dpZCAiY29udHJvbCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6MTI2Cittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6MTI5Cittc2dpZCAiaW5jb3Jwb3JhdGUgY2hhbmdlcyBieSByZWJhc2luZyByYXRoZXIgdGhhbiBtZXJnaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE1NyBidWlsdGluL3JlYmFzZS5jOjQ3MSBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzoxNjYKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIHJlYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzoxODIKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6MTkyCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzoyMDAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBwdWxsZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyNgorbXNnaWQgIiIKKyJUaGVyZSBpcyBubyBjYW5kaWRhdGUgZm9yIHJlYmFzaW5nIGFnYWluc3QgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCAiCisiZmV0Y2hlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI4Cittc2dpZCAiIgorIlRoZXJlIGFyZSBubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI5Cittc2dpZCAiIgorIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKyJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBwdWxsIGZyb20gdGhlIHJlbW90ZSAnJXMnLCBidXQgZGlkIG5vdCBzcGVjaWZ5XG4iCisiYSBicmFuY2guIEJlY2F1c2UgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQgY29uZmlndXJlZCByZW1vdGVcbiIKKyJmb3IgeW91ciBjdXJyZW50IGJyYW5jaCwgeW91IG11c3Qgc3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzcgYnVpbHRpbi9yZWJhc2UuYzoxNDA5IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzMKK21zZ2lkICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOSBidWlsdGluL3B1bGwuYzo0NTQgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQxIGJ1aWx0aW4vcHVsbC5jOjQ1NiBnaXQtcGFyc2UtcmVtb3RlLnNoOjgyCittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIG1lcmdlIHdpdGguIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MiBidWlsdGluL3B1bGwuYzo0NTcKK21zZ2lkICJTZWUgZ2l0LXB1bGwoMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NCBidWlsdGluL3B1bGwuYzo0NTAgYnVpbHRpbi9wdWxsLmM6NDU5CisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NAorbXNnaWQgIjxyZW1vdGU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NCBidWlsdGluL3B1bGwuYzo0NTkgYnVpbHRpbi9wdWxsLmM6NDY0CisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjY1Cittc2dpZCAiPGJyYW5jaD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcmViYXNlLmM6MTQwNyBnaXQtcGFyc2UtcmVtb3RlLnNoOjc1Cittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDYxIGdpdC1wYXJzZS1yZW1vdGUuc2g6OTUKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODU3Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkxMgorbXNnaWQgIi0tW25vLV1hdXRvc3Rhc2ggb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXJlYmFzZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTIwCittc2dpZCAiVXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjQKK21zZ2lkICJwdWxsIHdpdGggcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyNQorbXNnaWQgInBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk3MQorbXNnaWQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk3NQorbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTgyCittc2dpZCAiY2Fubm90IHJlYmFzZSB3aXRoIGxvY2FsbHkgcmVjb3JkZWQgc3VibW9kdWxlIG1vZGlmaWNhdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTkKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxMTIKK21zZ2lkICJ0YWcgc2hvcnRoYW5kIHdpdGhvdXQgPHRhZz4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTIyCittc2dpZCAiLS1kZWxldGUgb25seSBhY2NlcHRzIHBsYWluIHRhcmdldCByZWYgbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTY4Cittc2dpZCAiIgorIlxuIgorIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCBzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEXG4iCisiJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3MAorbXNnaWQgIiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3NworbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gSW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLlxuIgorIidnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyODMKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg5Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyOTYKK21zZ2lkICJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGFnIGFscmVhZHkgZXhpc3RzIGluIHRoZSByZW1vdGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5OQorbXNnaWQgIiIKKyJZb3UgY2Fubm90IHVwZGF0ZSBhIHJlbW90ZSByZWYgdGhhdCBwb2ludHMgYXQgYSBub24tY29tbWl0IG9iamVjdCxcbiIKKyJvciB1cGRhdGUgYSByZW1vdGUgcmVmIHRvIG1ha2UgaXQgcG9pbnQgYXQgYSBub24tY29tbWl0IG9iamVjdCxcbiIKKyJ3aXRob3V0IHVzaW5nIHRoZSAnLS1mb3JjZScgb3B0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MgorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQzIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY0Cittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NDQgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjYKK21zZ2lkICJtaXJyb3IgYWxsIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ2Cittc2dpZCAiZGVsZXRlIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ3Cittc2dpZCAicHVzaCB0YWdzIChjYW4ndCBiZSB1c2VkIHdpdGggLS1hbGwgb3IgLS1taXJyb3IpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MCBidWlsdGluL3NlbmQtcGFjay5jOjE2NworbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgxCittc2dpZCAiPHJlZm5hbWU+OjxleHBlY3Q+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MyBidWlsdGluL3NlbmQtcGFjay5jOjE4MgorbXNnaWQgInJlcXVpcmUgb2xkIHZhbHVlIG9mIHJlZiB0byBiZSBhdCB0aGlzIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NgorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIHB1c2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NTggYnVpbHRpbi9zZW5kLXBhY2suYzoxNzUKK21zZ2lkICJ1c2UgdGhpbiBwYWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OSBidWlsdGluL3B1c2guYzo1NjAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjEKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYyCittc2dpZCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYxCittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY0Cittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY2Cittc2dpZCAiYnlwYXNzIHByZS1wdXNoIGhvb2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY3Cittc2dpZCAicHVzaCBtaXNzaW5nIGJ1dCByZWxldmFudCB0YWdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MCBidWlsdGluL3NlbmQtcGFjay5jOjE2OQorbXNnaWQgIkdQRyBzaWduIHRoZSBwdXNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MiBidWlsdGluL3NlbmQtcGFjay5jOjE3NgorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU5MAorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU5MgorbXNnaWQgIi0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IGFueSByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMworbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYyOAorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo2MzAKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzNAorbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo2MzYKK21zZ2lkICItLW1pcnJvciBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzOQorbXNnaWQgIi0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjY0MworbXNnaWQgInB1c2ggb3B0aW9ucyBtdXN0IG5vdCBoYXZlIG5ldyBsaW5lIGNoYXJhY3RlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtYmFzZT4uLjxvbGQtdGlwPiA8bmV3LWJhc2U+Li48bmV3LXRpcD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OQorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtdGlwPi4uLjxuZXctdGlwPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoxMAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxiYXNlPiA8b2xkLXRpcD4gPG5ldy10aXA+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjIyCittc2dpZCAiUGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyNAorbXNnaWQgInVzZSBzaW1wbGUgZGlmZiBjb2xvcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjYKK21zZ2lkICJub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyNgorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGxvZyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NTAgYnVpbHRpbi9yYW5nZS1kaWZmLmM6NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gLi4gaW4gcmFuZ2U6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NjQKK21zZ2lkICJzaW5nbGUgYXJnIGZvcm1hdCBtdXN0IGJlIHN5bW1ldHJpYyByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo3OQorbXNnaWQgIm5lZWQgdHdvIGNvbW1pdCByYW5nZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzo0MQorbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI5Cittc2dpZCAiTWVyZ2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMQorbXNnaWQgInBlcmZvcm0gYSBtZXJnZSBpbiBhZGRpdGlvbiB0byBhIHJlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzMKK21zZ2lkICIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzUKK21zZ2lkICIzLXdheSBtZXJnZSBpbiBwcmVzZW5jZSBvZiBhZGRzIGFuZCByZW1vdmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM3Cittc2dpZCAic2FtZSBhcyAtbSwgYnV0IGRpc2NhcmQgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOAorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOQorbXNnaWQgInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQyCittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OAorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OQorbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MQorbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MworbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1NworbXNnaWQgInN1cHByZXNzIGZlZWRiYWNrIG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTg4Cittc2dpZCAiWW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozMgorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+IHwgLS1rZWVwLWJhc2VdICIKKyJbPHVwc3RyZWFtPiBbPGJyYW5jaD5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM0Cittc2dpZCAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dIC0tcm9vdCBbPGJyYW5jaD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzYKK21zZ2lkICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzUgYnVpbHRpbi9yZWJhc2UuYzoxOTkgYnVpbHRpbi9yZWJhc2UuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgdG9kbyBsaXN0OiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6Mjk4Cittc2dpZCAiY291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNTIKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgdG9kbyBsaXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzkxCittc2dpZCAiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NjEKK21zZ2lkICJnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NCBidWlsdGluL3JlYmFzZS5jOjE1NTAKK21zZ2lkICIoREVQUkVDQVRFRCkga2VlcCBlbXB0eSBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc4IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI4Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgwCittc2dpZCAicmViYXNlIG1lcmdlIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODIKK21zZ2lkICJrZWVwIG9yaWdpbmFsIGJyYW5jaCBwb2ludHMgb2YgY291c2lucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NAorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODUKK21zZ2lkICJzaWduIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODcgYnVpbHRpbi9yZWJhc2UuYzoxNDkwCittc2dpZCAiZGlzcGxheSBhIGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4OQorbXNnaWQgImNvbnRpbnVlIHJlYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MQorbXNnaWQgInNraXAgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkyCittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk0Cittc2dpZCAic2hvdyB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NworbXNnaWQgInNob3J0ZW4gY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk5Cittc2dpZCAiZXhwYW5kIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMQorbXNnaWQgImNoZWNrIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDMKK21zZ2lkICJyZWFycmFuZ2UgZml4dXAvc3F1YXNoIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA1Cittc2dpZCAiaW5zZXJ0IGV4ZWMgY29tbWFuZHMgaW4gdG9kbyBsaXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA2Cittc2dpZCAib250byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwOQorbXNnaWQgInJlc3RyaWN0LXJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA5Cittc2dpZCAicmVzdHJpY3QgcmV2aXNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTEKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxMgorbXNnaWQgInNxdWFzaCBvbnRvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE0Cittc2dpZCAidGhlIHVwc3RyZWFtIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNgorbXNnaWQgImhlYWQtbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNgorbXNnaWQgImhlYWQgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMQorbXNnaWQgInJlYmFzZSBzdHJhdGVneSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMgorbXNnaWQgInN0cmF0ZWd5LW9wdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjMKK21zZ2lkICJzdHJhdGVneSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI0Cittc2dpZCAic3dpdGNoLXRvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI1Cittc2dpZCAidGhlIGJyYW5jaCBvciBjb21taXQgdG8gY2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjYKK21zZ2lkICJvbnRvLW5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjYKK21zZ2lkICJvbnRvIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjcKK21zZ2lkICJjbWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjcKK21zZ2lkICJ0aGUgY29tbWFuZCB0byBydW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MzAgYnVpbHRpbi9yZWJhc2UuYzoxNTg0Cittc2dpZCAiYXV0b21hdGljYWxseSByZS1zY2hlZHVsZSBhbnkgYGV4ZWNgIHRoYXQgZmFpbHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1NDYKK21zZ2lkICItLVtuby1dcmViYXNlLWNvdXNpbnMgaGFzIG5vIGVmZmVjdCB3aXRob3V0IC0tcmViYXNlLW1lcmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCAnb250byc6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcmlnLWhlYWQ6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgaW52YWxpZCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjcyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjg1MworbXNnaWQgImNvdWxkIG5vdCBkZXRlcm1pbmUgSEVBRCByZXZpc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjk3NiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEKK21zZ2lkICIiCisiUmVzb2x2ZSBhbGwgY29uZmxpY3RzIG1hbnVhbGx5LCBtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgd2l0aFxuIgorIlwiZ2l0IGFkZC9ybSA8Y29uZmxpY3RlZF9maWxlcz5cIiwgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJZb3UgY2FuIGluc3RlYWQgc2tpcCB0aGlzIGNvbW1pdDogcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIi5cbiIKKyJUbyBhYm9ydCBhbmQgZ2V0IGJhY2sgdG8gdGhlIHN0YXRlIGJlZm9yZSBcImdpdCByZWJhc2VcIiwgcnVuIFwiZ2l0IHJlYmFzZSAtLSIKKyJhYm9ydFwiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorImdpdCBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSBwcmVwYXJpbmcgdGhlIHBhdGNoZXMgdG8gcmVwbGF5XG4iCisidGhlc2UgcmV2aXNpb25zOlxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIkFzIGEgcmVzdWx0LCBnaXQgY2Fubm90IHJlYmFzZSB0aGVtLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVucmVjb2duaXplZCBlbXB0eSB0eXBlICclcyc7IHZhbGlkIHZhbHVlcyBhcmUgXCJkcm9wXCIsIFwia2VlcFwiLCBhbmQgXCJhc2siCisiXCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXNcbiIKKyJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuXG4iCisiU2VlIGdpdC1yZWJhc2UoMSkgZm9yIGRldGFpbHMuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxicmFuY2g+J1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMvPGJyYW5jaD4gJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDcKK21zZ2lkICJleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MQorbXNnaWQgImVtcHR5IGV4ZWMgY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODEKK21zZ2lkICJyZWJhc2Ugb250byBnaXZlbiBicmFuY2ggaW5zdGVhZCBvZiB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODMKK21zZ2lkICJ1c2UgdGhlIG1lcmdlLWJhc2Ugb2YgdXBzdHJlYW0gYW5kIGJyYW5jaCBhcyB0aGUgY3VycmVudCBiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4NQorbXNnaWQgImFsbG93IHByZS1yZWJhc2UgaG9vayB0byBydW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg3Cittc2dpZCAiYmUgcXVpZXQuIGltcGxpZXMgLS1uby1zdGF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MworbXNnaWQgImRvIG5vdCBzaG93IGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTYKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5OiBsaW5lIHRvIGVhY2ggY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5OCBidWlsdGluL3JlYmFzZS5jOjE1MDIgYnVpbHRpbi9yZWJhc2UuYzoxNTA0Cittc2dpZCAicGFzc2VkIHRvICdnaXQgYW0nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwNiBidWlsdGluL3JlYmFzZS5jOjE1MDgKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBhcHBseSciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTEwIGJ1aWx0aW4vcmViYXNlLmM6MTUxMworbXNnaWQgImNoZXJyeS1waWNrIGFsbCBjb21taXRzLCBldmVuIGlmIHVuY2hhbmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTUKK21zZ2lkICJjb250aW51ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTgKK21zZ2lkICJza2lwIGN1cnJlbnQgcGF0Y2ggYW5kIGNvbnRpbnVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyMAorbXNnaWQgImFib3J0IGFuZCBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjMKK21zZ2lkICJhYm9ydCBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCBkdXJpbmcgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNworbXNnaWQgInNob3cgdGhlIHBhdGNoIGZpbGUgYmVpbmcgYXBwbGllZCBvciBtZXJnZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTMwCittc2dpZCAidXNlIGFwcGx5IHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzNAorbXNnaWQgInVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzOAorbXNnaWQgImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU0MgorbXNnaWQgIihERVBSRUNBVEVEKSB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NDcKK21zZ2lkICJob3cgdG8gaGFuZGxlIGNvbW1pdHMgdGhhdCBiZWNvbWUgZW1wdHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTU0Cittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISB1bmRlciAtaSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NjAKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2MgorbXNnaWQgImFkZCBleGVjIGxpbmVzIGFmdGVyIGVhY2ggY29tbWl0IG9mIHRoZSBlZGl0YWJsZSBsaXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2NgorbXNnaWQgImFsbG93IHJlYmFzaW5nIGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzAKK21zZ2lkICJ0cnkgdG8gcmViYXNlIG1lcmdlcyBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTczCittc2dpZCAidXNlICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcgdG8gcmVmaW5lIHVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3NQorbXNnaWQgInVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTc3IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE1Cittc2dpZCAib3B0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3OAorbXNnaWQgInBhc3MgdGhlIGFyZ3VtZW50IHRocm91Z2ggdG8gdGhlIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU4MQorbXNnaWQgInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTk4Cittc2dpZCAiIgorInRoZSByZWJhc2UudXNlQnVpbHRpbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQhXG4iCisiU2VlIGl0cyBlbnRyeSBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjA0Cittc2dpZCAiSXQgbG9va3MgbGlrZSAnZ2l0IGFtJyBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjQ1Cittc2dpZCAiIgorImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgaXMgZGVwcmVjYXRlZC4gVXNlIC0tcmViYXNlLW1lcmdlcyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTAKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tb250byciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjUyCittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0ta2VlcC1iYXNlJyB3aXRoICctLXJvb3QnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1NgorbXNnaWQgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjYwCittc2dpZCAiVGhlIC0tZWRpdC10b2RvIGFjdGlvbiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnRlcmFjdGl2ZSByZWJhc2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY4MworbXNnaWQgIkNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjk1Cittc2dpZCAiIgorIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlblxuIgorIm1hcmsgdGhlbSBhcyByZXNvbHZlZCB1c2luZyBnaXQgYWRkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTcxNAorbXNnaWQgImNvdWxkIG5vdCBkaXNjYXJkIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAlcyBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JXNcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQlc1xuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODA2Cittc2dpZCAic3dpdGNoIGBDJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg0NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG1vZGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg2OQorbXNnaWQgIi0tc3RyYXRlZ3kgcmVxdWlyZXMgLS1tZXJnZSBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5OQorbXNnaWQgImNhbm5vdCBjb21iaW5lIGFwcGx5IG9wdGlvbnMgd2l0aCBtZXJnZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHJlYmFzZSBiYWNrZW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MzcKK21zZ2lkICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMgcmVxdWlyZXMgLS1leGVjIG9yIC0taW50ZXJhY3RpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTU3Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk2MQorbXNnaWQgIiIKKyJlcnJvcjogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk4NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTkxCittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBuZXcgcm9vdCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSB3aXRoIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjAyOAorIywgYy1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2gvY29tbWl0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDYyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZWY6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA3MworbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgdG8gYSByZXZpc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTEKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHN0YXNoIHJlc3BvbnNlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTI2Cittc2dpZCAiY291bGQgbm90IHJlc2V0IC0taGFyZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMzUKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3dpdGNoIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE4MAorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTkwCittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMDAKK21zZ2lkICJUaGUgcHJlLXJlYmFzZSBob29rIHJlZnVzZWQgdG8gcmViYXNlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyB0byAlczpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyNDQKK21zZ2lkICJDb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICVzIHRvICVzLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MzMKK21zZ2lkICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjgyMQorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2ggaW4gYSBub24tYmFyZSByZXBvc2l0b3J5XG4iCisiaXMgZGVuaWVkLCBiZWNhdXNlIGl0IHdpbGwgbWFrZSB0aGUgaW5kZXggYW5kIHdvcmsgdHJlZSBpbmNvbnNpc3RlbnRcbiIKKyJ3aXRoIHdoYXQgeW91IHB1c2hlZCwgYW5kIHdpbGwgcmVxdWlyZSAnZ2l0IHJlc2V0IC0taGFyZCcgdG8gbWF0Y2hcbiIKKyJ0aGUgd29yayB0cmVlIHRvIEhFQUQuXG4iCisiXG4iCisiWW91IGNhbiBzZXQgdGhlICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlXG4iCisidG8gJ2lnbm9yZScgb3IgJ3dhcm4nIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBwdXNoaW5nIGludG9cbiIKKyJpdHMgY3VycmVudCBicmFuY2g7IGhvd2V2ZXIsIHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIHVubGVzcyB5b3VcbiIKKyJhcnJhbmdlZCB0byB1cGRhdGUgaXRzIHdvcmsgdHJlZSB0byBtYXRjaCB3aGF0IHlvdSBwdXNoZWQgaW4gc29tZVxuIgorIm90aGVyIHdheS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgc3RpbGwga2VlcCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIsIHNldFxuIgorIidyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjg0MQorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCBkZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggaXMgZGVuaWVkLCBiZWNhdXNlIHRoZSBuZXh0XG4iCisiJ2dpdCBjbG9uZScgd29uJ3QgcmVzdWx0IGluIGFueSBmaWxlIGNoZWNrZWQgb3V0LCBjYXVzaW5nIGNvbmZ1c2lvbi5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0b1xuIgorIid3YXJuJyBvciAnaWdub3JlJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgZGVsZXRpbmcgdGhlXG4iCisiY3VycmVudCBicmFuY2gsIHdpdGggb3Igd2l0aG91dCBhIHdhcm5pbmcgbWVzc2FnZS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSwgeW91IGNhbiBzZXQgaXQgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTkzOAorbXNnaWQgInF1aWV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MgorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0aW1lPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjIyCittc2dpZCAiIgorImdpdCByZWZsb2cgZGVsZXRlIFstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSAiCisiPHJlZnM+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjUKK21zZ2lkICJnaXQgcmVmbG9nIGV4aXN0cyA8cmVmPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU2OCBidWlsdGluL3JlZmxvZy5jOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nIHJlYWNoYWJsZSBvYmplY3RzLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyBub3doZXJlISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY5NgorbXNnaWQgIm5vIHJlZmxvZyBzcGVjaWZpZWQgdG8gZGVsZXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJlZmxvZzogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVmbG9nIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmIGZvcm1hdDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NjUKK21zZ2lkICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOAorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkgYnVpbHRpbi9yZW1vdGUuYzozOQorbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjAgYnVpbHRpbi9yZW1vdGUuYzo0NAorbXNnaWQgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIxIGJ1aWx0aW4vcmVtb3RlLmM6NDkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzCittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0Cittc2dpZCAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3JvdXA+IHwgPHJlbW90ZT4pLi4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI1Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNiBidWlsdGluL3JlbW90ZS5jOjc1Cittc2dpZCAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjcgYnVpbHRpbi9yZW1vdGUuYzo4MAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI4IGJ1aWx0aW4vcmVtb3RlLmM6ODEKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjkgYnVpbHRpbi9yZW1vdGUuYzo4MgorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozNAorbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTUKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MAorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NQorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzAKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjQKK21zZ2lkICJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2Cittc2dpZCAiaW1wb3J0IGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMgd2hlbiBmZXRjaGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2OQorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MQorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzIKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTc0Cittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODYKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg4Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5NSBidWlsdGluL3JlbW90ZS5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk5IGJ1aWx0aW4vcmVtb3RlLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDUzIGJ1aWx0aW4vcmVtb3RlLmM6NDYxCittc2dpZCAiKG1hdGNoaW5nKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ2NQorbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlICVzIGNvbmZpZ3VyYXRpb24gcmVtb3RlLnB1c2hEZWZhdWx0IGluOlxuIgorIlx0JXM6JWRcbiIKKyJub3cgbmFtZXMgdGhlIG5vbi1leGlzdGVudCByZW1vdGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY4OSBidWlsdGluL3JlbW90ZS5jOjgzMiBidWlsdGluL3JlbW90ZS5jOjk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVuYW1lIGNvbmZpZyBzZWN0aW9uICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlZnNwZWNcbiIKKyJcdCVzXG4iCisiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4NzYKK21zZ2lkICIiCisiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSBpdCwgdXNlOiIKK21zZ2lkX3BsdXJhbCAiIgorIk5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgdGhlbSwgdXNlOiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5MworIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OTYKK21zZ2lkICIgdHJhY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5OAorbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwMAorbXNnaWQgIiA/Pz8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYnJhbmNoLiVzLm1lcmdlOyBjYW5ub3QgcmViYXNlIG9udG8gPiAxIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5IG9udG8gcmVtb3RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgKHdpdGggbWVyZ2VzKSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlLSpzICAgIGFuZCB3aXRoIHJlbW90ZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEwOAorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTEKK21zZ2lkICJkZWxldGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE1Cittc2dpZCAidXAgdG8gZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTgKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyMQorbXNnaWQgImxvY2FsIG91dCBvZiBkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDYKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmV0Y2ggVVJMOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzUgYnVpbHRpbi9yZW1vdGUuYzoxMjUxIGJ1aWx0aW4vcmVtb3RlLmM6MTM5MAorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gJzonIHNob3VsZCBhbGlnbgorIy4gd2l0aCB0aGUgb25lIGluICIgRmV0Y2ggVVJMOiAlcyIKKyMuIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI0OSBidWlsdGluL3JlbW90ZS5jOjEyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MyBidWlsdGluL3JlbW90ZS5jOjEyNTUgYnVpbHRpbi9yZW1vdGUuYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MworbXNnaWQgIihub3QgcXVlcmllZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU1Cittc2dpZCAiKHVua25vd24pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc0IGJ1aWx0aW4vcmVtb3RlLmM6MTMwMAorbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODMKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5MQorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzE4Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyMAorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzM1Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMzcKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NgorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ1MQorbXNnaWQgInBydW5lIHJlbW90ZXMgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTE0IGJ1aWx0aW4vcmVtb3RlLmM6MTU2OCBidWlsdGluL3JlbW90ZS5jOjE2MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzAKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNworbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTU0Cittc2dpZCAicXVlcnkgcHVzaCBVUkxzIHJhdGhlciB0aGFuIGZldGNoIFVSTHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTU2Cittc2dpZCAicmV0dXJuIGFsbCBVUkxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBVUkxzIGNvbmZpZ3VyZWQgZm9yIHJlbW90ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxMAorbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxMgorbXNnaWQgImFkZCBVUkwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjE0Cittc2dpZCAiZGVsZXRlIFVSTHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjIxCittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NzAKK21zZ2lkICJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOAorbXNnaWQgIiIKKyJJbmNyZW1lbnRhbCByZXBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBiaXRtYXAgaW5kZXhlcy4gIFVzZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9yIGRpc2FibGUgdGhlIHBhY2sud3JpdGViaXRtYXBzIGNvbmZpZ3VyYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTkxCittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIzMCBidWlsdGluL3JlcGFjay5jOjQxNgorbXNnaWQgInJlcGFjazogRXhwZWN0aW5nIGZ1bGwgaGV4IG9iamVjdCBJRCBsaW5lcyBvbmx5IGZyb20gcGFjay1vYmplY3RzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI1NAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjkyCittc2dpZCAicGFjayBldmVyeXRoaW5nIGluIGEgc2luZ2xlIHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTQKK21zZ2lkICJzYW1lIGFzIC1hLCBhbmQgdHVybiB1bnJlYWNoYWJsZSBvYmplY3RzIGxvb3NlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk3Cittc2dpZCAicmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk5Cittc2dpZCAicGFzcyAtLW5vLXJldXNlLWRlbHRhIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDEKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDMKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDYKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwOAorbXNnaWQgIndyaXRlIGJpdG1hcCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMAorbXNnaWQgInBhc3MgLS1kZWx0YS1pc2xhbmRzIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTEKK21zZ2lkICJhcHByb3hpZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMgorbXNnaWQgIndpdGggLUEsIGRvIG5vdCBsb29zZW4gb2JqZWN0cyBvbGRlciB0aGFuIHRoaXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTQKK21zZ2lkICJ3aXRoIC1hLCByZXBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNgorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNyBidWlsdGluL3JlcGFjay5jOjMyMworbXNnaWQgImJ5dGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE4Cittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjAKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjIKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjQKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNgorbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI4Cittc2dpZCAiZG8gbm90IHJlcGFjayB0aGlzIHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMzgKK21zZ2lkICJjYW5ub3QgZGVsZXRlIHBhY2tzIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzQyCittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtQSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDI1Cittc2dpZCAiTm90aGluZyBuZXcgdG8gcGFjay4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFNvbWUgcGFja3MgaW4gdXNlIGhhdmUgYmVlbiByZW5hbWVkIGJ5XG4iCisiV0FSTklORzogcHJlZml4aW5nIG9sZC0gdG8gdGhlaXIgbmFtZSwgaW4gb3JkZXIgdG9cbiIKKyJXQVJOSU5HOiByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlXG4iCisiV0FSTklORzogZmlsZS4gIEJ1dCB0aGUgb3BlcmF0aW9uIGZhaWxlZCwgYW5kIHRoZVxuIgorIldBUk5JTkc6IGF0dGVtcHQgdG8gcmVuYW1lIHRoZW0gYmFjayB0byB0aGVpclxuIgorIldBUk5JTkc6IG9yaWdpbmFsIG5hbWVzIGFsc28gZmFpbGVkLlxuIgorIldBUk5JTkc6IFBsZWFzZSByZW5hbWUgdGhlbSBpbiAlcyBtYW51YWxseTpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjMKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNAorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNgorbXNnaWQgImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIHJlcGxhY2UgZm9ybWF0ICclcydcbiIKKyJ2YWxpZCBmb3JtYXRzIGFyZSAnc2hvcnQnLCAnbWVkaXVtJyBhbmQgJ2xvbmcnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZXBsYWNlIHJlZiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZiBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4iCisiJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlZCBvYmplY3Qgb2YgdHlwZSAnJXMnXG4iCisid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgdHlwZSAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQyCittc2dpZCAiY2F0LWZpbGUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcyCittc2dpZCAidW5hYmxlIHRvIHNwYXduIG1rdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNzYKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIG1rdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODUKK21zZ2lkICJta3RyZWUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODkKK21zZ2lkICJta3RyZWUgZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0IG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmc3RhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMDMKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgb2JqZWN0IHRvIGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyMiBidWlsdGluL3JlcGxhY2UuYzozNzggYnVpbHRpbi9yZXBsYWNlLmM6NDI0CisjOiBidWlsdGluL3JlcGxhY2UuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgb2JqZWN0IHR5cGUgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM0MgorbXNnaWQgImVkaXRpbmcgb2JqZWN0IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMgYXMgYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgb3JpZ2luYWwgY29tbWl0ICclcycgaGFzIGEgZ3BnIHNpZ25hdHVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NzAKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHJlcGxhY2VtZW50IGNvbW1pdCBmb3I6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImdyYWZ0IGZvciAnJXMnIHVubmVjZXNzYXJ5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgY29tbWl0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNvbnZlcnQgdGhlIGZvbGxvd2luZyBncmFmdChzKTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDgKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDkKK21zZ2lkICJkZWxldGUgcmVwbGFjZSByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MAorbXNnaWQgImVkaXQgZXhpc3Rpbmcgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MQorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUyCittc2dpZCAiY29udmVydCBleGlzdGluZyBncmFmdCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MworbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU1Cittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NgorbXNnaWQgInVzZSB0aGlzIGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NjkKK21zZ2lkICItLWZvcm1hdCBjYW5ub3QgYmUgdXNlZCB3aGVuIG5vdCBsaXN0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU3NworbXNnaWQgIi1mIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB3cml0aW5nIGEgcmVwbGFjZW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTgxCittc2dpZCAiLS1yYXcgb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODcKK21zZ2lkICItZCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTkzCittc2dpZCAiYmFkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk5Cittc2dpZCAiLWUgbmVlZHMgZXhhY3RseSBvbmUgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjA1Cittc2dpZCAiLWcgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxMQorbXNnaWQgIi0tY29udmVydC1ncmFmdC1maWxlIHRha2VzIG5vIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxNworbXNnaWQgIm9ubHkgb25lIHBhdHRlcm4gY2FuIGJlIGdpdmVuIHdpdGggLWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMworbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxwYXRoPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo2MAorbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NzkKK21zZ2lkICInZ2l0IHJlcmVyZSBmb3JnZXQnIHdpdGhvdXQgcGF0aHMgaXMgZGVwcmVjYXRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjExMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZiBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgImdpdCByZXNldCBbLXFdIFs8dHJlZS1pc2g+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAiIgorImdpdCByZXNldCBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs8dHJlZS1pc2g+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWl4ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAic29mdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJoYXJkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImtlZXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjgyCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjg0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NCBidWlsdGluL3N0YXNoLmM6NTIwIGJ1aWx0aW4vc3Rhc2guYzo1OTUKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MTkKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTYKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk3Cittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTkgYnVpbHRpbi9yZXNldC5jOjMwMQorbXNnaWQgInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwMworbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA5Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCByZW1vdmVkIHBhdGhzIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmV2aXNpb24uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHRyZWUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjAKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozOTEKK21zZ2lkICItTiBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1taXhlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQuICBZb3UgY2FuXG4iCisidXNlICctLXF1aWV0JyB0byBhdm9pZCB0aGlzLiAgU2V0IHRoZSBjb25maWcgc2V0dGluZyByZXNldC5xdWlldCB0byB0cnVlXG4iCisidG8gbWFrZSB0aGlzIHRoZSBkZWZhdWx0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyOQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ5OQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGFuZCAtLW1pc3NpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjU2MAorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmcgcmVxdWlyZXMgLS1vYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo2MTAKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjYxNQorbXNnaWQgIm1hcmtlZCBjb3VudGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MDgKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTMKK21zZ2lkICJrZWVwIHRoZSBgLS1gIHBhc3NlZCBhcyBhbiBhcmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTUKK21zZ2lkICJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTgKK21zZ2lkICJvdXRwdXQgaW4gc3R1Y2sgbG9uZyBmb3JtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NTUxCittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmc+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3B0aW9ucz5dIFs8YXJnPi4uLl1cbiIKKyJcbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQKK21zZ2lkICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjI1Cittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMAorbXNnaWQgImdpdCBjaGVycnktcGljayBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMQorbXNnaWQgImdpdCBjaGVycnktcGljayA8c3ViY29tbWFuZD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDIKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJza2lwIGN1cnJlbnQgY29tbWl0IGFuZCBjb250aW51ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA4Cittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTEKK21zZ2lkICJwYXJlbnQtbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEyCittc2dpZCAic2VsZWN0IG1haW5saW5lIHBhcmVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE2Cittc2dpZCAib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNQorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNworbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI5Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzIKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQ1Cittc2dpZCAiY2hlcnJ5LXBpY2sgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOQorbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MjA3Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dpZF9wbHVyYWwgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3JtLmM6MjEyCittc2dpZCAiIgorIlxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjIxNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3JtLmM6MjIwIGJ1aWx0aW4vcm0uYzoyMjkKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MjI2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjI0NAorbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDUKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MjQ2Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjI0OAorbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyODIKK21zZ2lkICJObyBwYXRoc3BlYyB3YXMgZ2l2ZW4uIFdoaWNoIGZpbGVzIHNob3VsZCBJIHJlbW92ZT8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjMwNQorbXNnaWQgInBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjIwCittc2dpZCAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiAiCisiWzxyZWY+Li4uXVxuIgorIiAgLS1hbGwgYW5kIGV4cGxpY2l0IDxyZWY+IHNwZWNpZmljYXRpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjMKK21zZ2lkICJyZW1vdGUgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NworbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc4Cittc2dpZCAicmVhZCByZWZzIGZyb20gc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzkKK21zZ2lkICJwcmludCBzdGF0dXMgZnJvbSByZW1vdGUgaGVscGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNAorbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTUKK21zZ2lkICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjQKK21zZ2lkICJHcm91cCBieSBjb21taXR0ZXIgcmF0aGVyIHRoYW4gYXV0aG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjYKK21zZ2lkICJzb3J0IG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBjb21taXRzIHBlciBhdXRob3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2OAorbXNnaWQgIlN1cHByZXNzIGNvbW1pdCBkZXNjcmlwdGlvbnMsIG9ubHkgcHJvdmlkZXMgY29tbWl0IGNvdW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzAKK21zZ2lkICJTaG93IHRoZSBlbWFpbCBhZGRyZXNzIG9mIGVhY2ggYXV0aG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzEKK21zZ2lkICI8dz5bLDxpMT5bLDxpMj5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcyCittc2dpZCAiTGluZXdyYXAgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDEKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZ2l2ZW4gb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxMworbXNnaWQgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTcKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbWF0Y2hpbmcgcmVmcyB3aXRoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDUKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NworbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDkKK21zZ2lkICJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTEKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUzCittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTQKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU2Cittc2dpZCAiaW5jbHVkZSB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1OAorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYwCittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYyCittc2dpZCAic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY0Cittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjcKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY5Cittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzEKK21zZ2lkICJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgd2hlcmUgcG9zc2libGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc1Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjcxMQorbXNnaWQgIiIKKyItLXJlZmxvZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50IG9yIC0tbWVyZ2UtYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM1Cittc2dpZCAibm8gYnJhbmNoZXMgZ2l2ZW4sIGFuZCBIRUFEIGlzIG5vdCB2YWxpZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM4Cittc2dpZCAiLS1yZWZsb2cgb3B0aW9uIG5lZWRzIG9uZSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgJWQgZW50cnkgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ2lkX3BsdXJhbCAib25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2LiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2cy4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIGNvbW1pdCAlcyAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMgorbXNnaWQgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMworbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MgorbXNnaWQgIm9ubHkgc2hvdyB0YWdzIChjYW4gYmUgY29tYmluZWQgd2l0aCBoZWFkcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MworbXNnaWQgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NAorbXNnaWQgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgcmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NyBidWlsdGluL3Nob3ctcmVmLmM6MTY5Cittc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzEKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTczCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzcKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVzdWx0cyB0byBzdGRvdXQgKHVzZWZ1bCB3aXRoIC0tdmVyaWZ5KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIxCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxhZGR8ZGlzYWJsZSkgPG9wdGlvbnM+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NjQKK21zZ2lkICJ0aGlzIHdvcmt0cmVlIGlzIG5vdCBzcGFyc2UgKHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBub3QgZXhpc3QpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjI1Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yIHNwYXJzZS1jaGVja291dCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjY2Cittc2dpZCAiZmFpbGVkIHRvIHNldCBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIHNldHRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyODMKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozMDIKK21zZ2lkICJpbml0aWFsaXplIHRoZSBzcGFyc2UtY2hlY2tvdXQgaW4gY29uZSBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzA4Cittc2dpZCAiaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgbm9ybWFsaXplIHBhdGggJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0MTAKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChzZXR8YWRkKSAoLS1zdGRpbiB8IDxwYXR0ZXJucz4pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDM1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnF1b3RlIEMtc3R5bGUgc3RyaW5nICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0ODkgYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1MTMKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBleGlzdGluZyBzcGFyc2UtY2hlY2tvdXQgcGF0dGVybnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1NTgKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gc3RhbmRhcmQgaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1NjQKK21zZ2lkICJzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTgxCittc2dpZCAiZGlzYWJsZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1OTMKK21zZ2lkICJlcnJvciB3aGlsZSByZWZyZXNoaW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMiBidWlsdGluL3N0YXNoLmM6MzgKK21zZ2lkICJnaXQgc3Rhc2ggbGlzdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjMgYnVpbHRpbi9zdGFzaC5jOjQzCittc2dpZCAiZ2l0IHN0YXNoIHNob3cgWzxvcHRpb25zPl0gWzxzdGFzaD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNCBidWlsdGluL3N0YXNoLmM6NDgKK21zZ2lkICJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNQorbXNnaWQgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI2IGJ1aWx0aW4vc3Rhc2guYzo2MworbXNnaWQgImdpdCBzdGFzaCBicmFuY2ggPGJyYW5jaG5hbWU+IFs8c3Rhc2g+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjcgYnVpbHRpbi9zdGFzaC5jOjY4Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyOAorbXNnaWQgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XVxuIgorIiAgICAgICAgICBbLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+IFstLXBhdGhzcGVjLWZpbGUtbnVsXV1cbiIKKyIgICAgICAgICAgWy0tXSBbPHBhdGhzcGVjPi4uLl1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzozMiBidWlsdGluL3N0YXNoLmM6ODUKK21zZ2lkICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8bWVzc2FnZT5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MworbXNnaWQgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU4Cittc2dpZCAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3MworbXNnaWQgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3OAorbXNnaWQgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XVxuIgorIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDolcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTYyIGdpdC1sZWdhY3ktc3Rhc2guc2g6NTQ5Cittc2dpZCAiTm8gc3Rhc2ggZW50cmllcyBmb3VuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyNSBnaXQtbGVnYWN5LXN0YXNoLnNoOjc1Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MDQKK21zZ2lkICJjYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgZGlmZiAlc14hLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDIyCittc2dpZCAiY29uZmxpY3RzIGluIGluZGV4LlRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjgKK21zZ2lkICJjb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MzcKK21zZ2lkICJjb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgd2l0aCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDYxIGdpdC1sZWdhY3ktc3Rhc2guc2g6NjgxCittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MjIgYnVpbHRpbi9zdGFzaC5jOjYyMQorbXNnaWQgImF0dGVtcHQgdG8gcmVjcmVhdGUgdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAlcyAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjYzMyBnaXQtbGVnYWN5LXN0YXNoLnNoOjY5NQorbXNnaWQgIlRoZSBzdGFzaCBlbnRyeSBpcyBrZXB0IGluIGNhc2UgeW91IG5lZWQgaXQgYWdhaW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2NTYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MTMKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjc5NiBidWlsdGluL3N0YXNoLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJXMgd2l0aCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODE0IGJ1aWx0aW4vc3Rhc2guYzoxNDc4IGJ1aWx0aW4vc3Rhc2guYzoxNTQzCittc2dpZCAic3Rhc2ggbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODI0Cittc2dpZCAiXCJnaXQgc3Rhc2ggc3RvcmVcIiByZXF1aXJlcyBvbmUgPGNvbW1pdD4gYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEwNDkgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTgKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTQ5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MTUwCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNzYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNjUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE4NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE4MAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExOTYgYnVpbHRpbi9zdGFzaC5jOjEyMDUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMDEKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjE0Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyMzMgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMzQKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI4MiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMzOAorbXNnaWQgIkNhbid0IHVzZSAtLXBhdGNoIGFuZCAtLWluY2x1ZGUtdW50cmFja2VkIG9yIC0tYWxsIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOTgKK21zZ2lkICJEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzEzIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzQ2Cittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzIwIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzUxCittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMzUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDMwIGdpdC1sZWdhY3ktc3Rhc2guc2g6Mzg1Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDY5IGJ1aWx0aW4vc3Rhc2guYzoxNTM0Cittc2dpZCAia2VlcCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3MSBidWlsdGluL3N0YXNoLmM6MTUzNgorbXNnaWQgInN0YXNoIGluIHBhdGNoIG1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NzIgYnVpbHRpbi9zdGFzaC5jOjE1MzcKK21zZ2lkICJxdWlldCBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDc0IGJ1aWx0aW4vc3Rhc2guYzoxNTM5Cittc2dpZCAiaW5jbHVkZSB1bnRyYWNrZWQgZmlsZXMgaW4gc3Rhc2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NzYgYnVpbHRpbi9zdGFzaC5jOjE1NDEKK21zZ2lkICJpbmNsdWRlIGlnbm9yZSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhlYyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOAorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE5Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzozNworbXNnaWQgInNraXAgYW5kIHJlbW92ZSBhbGwgbGluZXMgc3RhcnRpbmcgd2l0aCBjb21tZW50IGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzo0MAorbXNnaWQgInByZXBlbmQgY29tbWVudCBjaGFyYWN0ZXIgYW5kIHNwYWNlIHRvIGVhY2ggbGluZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0aW5nIGEgZnVsbCByZWYgbmFtZSwgZ290ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NAorbXNnaWQgInN1Ym1vZHVsZS0taGVscGVyIHByaW50LWRlZmF1bHQtcmVtb3RlIHRha2VzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDEwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk1Cittc2dpZCAiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjMwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVybCBmb3VuZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgZm9yICVzXG4iCisiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgd2hpbGUgcmVjdXJzaW5nIGluIHRoZSBuZXN0ZWQgIgorInN1Ym1vZHVsZXMgb2YgJXNcbiIKKyIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NjUKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2YgZW50ZXJpbmcgZWFjaCBzdWJtb2R1bGUgY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDYzCittc2dpZCAiUmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NzIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDxjb21tYW5kPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgbG9vayB1cCBjb25maWd1cmF0aW9uICclcycuIEFzc3VtaW5nIHRoaXMgcmVwb3NpdG9yeSBpcyBpdHMgb3duICIKKyJhdXRob3JpdGF0aXZlIHVwc3RyZWFtLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogY29tbWFuZCB1cGRhdGUgbW9kZSBzdWdnZXN0ZWQgZm9yIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxMAorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBmb3IgaW5pdGlhbGl6aW5nIGEgc3VibW9kdWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTUKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPG9wdGlvbnM+XSBbPHBhdGg+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Nzg5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgcmVmIGluc2lkZSB0aGUgc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg2NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAzMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTkKK21zZ2lkICJTdXBwcmVzcyBzdWJtb2R1bGUgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODg5Cittc2dpZCAiIgorIlVzZSBjb21taXQgc3RvcmVkIGluIHRoZSBpbmRleCBpbnN0ZWFkIG9mIHRoZSBvbmUgc3RvcmVkIGluIHRoZSBzdWJtb2R1bGUgIgorIkhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg5MAorbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODk1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTE5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHBhdGg+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNjEKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDY4Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91ICIKKyJyZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkICIKKyJ0aGVtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZW1wdHkgc3VibW9kdWxlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMDAKK21zZ2lkICJSZW1vdmUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZXMgZXZlbiBpZiB0aGV5IGNvbnRhaW4gbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIwMQorbXNnaWQgIlVucmVnaXN0ZXIgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMDYKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzxwYXRoPi4uLl1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjIwCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTI4OQorbXNnaWQgIiIKKyJBbiBhbHRlcm5hdGUgY29tcHV0ZWQgZnJvbSBhIHN1cGVycHJvamVjdCdzIGFsdGVybmF0ZSBpcyBpbnZhbGlkLlxuIgorIlRvIGFsbG93IEdpdCB0byBjbG9uZSB3aXRob3V0IGFuIGFsdGVybmF0ZSBpbiBzdWNoIGEgY2FzZSwgc2V0XG4iCisic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgdG8gJ2luZm8nIG9yLCBlcXVpdmFsZW50bHksIGNsb25lIHdpdGhcbiIKKyInLS1yZWZlcmVuY2UtaWYtYWJsZScgaW5zdGVhZCBvZiAnLS1yZWZlcmVuY2UnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMyOCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBjYW5ub3QgYWRkIGFsdGVybmF0ZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgaXMgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk4Cittc2dpZCAid2hlcmUgdGhlIG5ldyBzdWJtb2R1bGUgd2lsbCBiZSBjbG9uZWQgdG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDEKK21zZ2lkICJuYW1lIG9mIHRoZSBuZXcgc3VibW9kdWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA0Cittc2dpZCAidXJsIHdoZXJlIHRvIGNsb25lIHRoZSBzdWJtb2R1bGUgZnJvbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxMgorbXNnaWQgImRlcHRoIGZvciBzaGFsbG93IGNsb25lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxNSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyNAorbXNnaWQgImZvcmNlIGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MjYKK21zZ2lkICJkaXNhbGxvdyBjbG9uaW5nIGludG8gbm9uLWVtcHR5IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQyNAorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxuYW1lPl0gWy0tZGVwdGggPGRlcHRoPl0gWy0tc2luZ2xlLWJyYW5jaF0gLS11cmwgIgorIjx1cmw+IC0tcGF0aCA8cGF0aD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gY3JlYXRlL3VzZSAnJXMnIGluIGFub3RoZXIgc3VibW9kdWxlJ3MgZ2l0IGRpciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9uZSBvZiAnJXMnIGludG8gc3VibW9kdWxlIHBhdGggJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlyZWN0b3J5IG5vdCBlbXB0eTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICclcycgbm90IGluaXRpYWxpemVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjIxCittc2dpZCAiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgdW5tZXJnZWQgc3VibW9kdWxlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnLiBSZXRyeSBzY2hlZHVsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNsb25lICclcycgYSBzZWNvbmQgdGltZSwgYWJvcnRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDMgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNDkKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwNgorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlLCBhY3Jvc3MgbmVzdGVkIHN1Ym1vZHVsZSBib3VuZGFyaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTEwCittc2dpZCAicmViYXNlLCBtZXJnZSwgY2hlY2tvdXQgb3Igbm9uZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxNgorbXNnaWQgIkNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgdHJ1bmNhdGVkIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldmlzaW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxOQorbXNnaWQgInBhcmFsbGVsIGpvYnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MjEKK21zZ2lkICJ3aGV0aGVyIHRoZSBpbml0aWFsIGNsb25lIHNob3VsZCBmb2xsb3cgdGhlIHNoYWxsb3cgcmVjb21tZW5kYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MjIKK21zZ2lkICJkb24ndCBwcmludCBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTMzCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZS1jbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk0NgorbXNnaWQgImJhZCB2YWx1ZSBmb3IgdXBkYXRlIHBhcmFtZXRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlICglcykgYnJhbmNoIGNvbmZpZ3VyZWQgdG8gaW5oZXJpdCBicmFuY2ggZnJvbSBzdXBlcnByb2plY3QsIGJ1dCAiCisidGhlIHN1cGVycHJvamVjdCBpcyBub3Qgb24gYW55IGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjExNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGEgcmVwb3NpdG9yeSBoYW5kbGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTUwCittc2dpZCAicmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNTYKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgYWJzb3JiLWdpdC1kaXJzIFs8b3B0aW9ucz5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjEyCittc2dpZCAiY2hlY2sgaWYgaXQgaXMgc2FmZSB0byB3cml0ZSB0byB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIxNQorbXNnaWQgInVuc2V0IHRoZSBjb25maWcgaW4gdGhlIC5naXRtb2R1bGVzIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMjAKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIDxuYW1lPiBbPHZhbHVlPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMjEKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjIyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI0MSBnaXQtc3VibW9kdWxlLnNoOjE3NAorIywgc2gtZm9ybWF0Cittc2dpZCAicGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGlzIGluIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyOTEgZ2l0LmM6NDMzIGdpdC5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2Vzbid0IHN1cHBvcnQgLS1zdXBlci1wcmVmaXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBzdWJtb2R1bGUtLWhlbHBlciBzdWJjb21tYW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OAorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwCittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIG9mIHRoZSB1cGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyNQorbXNnaWQgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XVxuIgorIlx0XHQ8dGFnbmFtZT4gWzxoZWFkPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyNworbXNnaWQgImdpdCB0YWcgLWQgPHRhZ25hbWU+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjgKK21zZ2lkICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPGNvbW1pdD5dIFstLSIKKyJwb2ludHMtYXQgPG9iamVjdD5dXG4iCisiXHRcdFstLWZvcm1hdD08Zm9ybWF0Pl0gWy0tW25vLV1tZXJnZWQgWzxjb21taXQ+XV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzozMAorbXNnaWQgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnbmFtZT4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjE5OAorbXNnaWQgInVuYWJsZSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyMDAKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIGNyZWF0ZWQgYSBuZXN0ZWQgdGFnLiBUaGUgb2JqZWN0IHJlZmVycmVkIHRvIGJ5IHlvdXIgbmV3IHRhZyBpc1xuIgorImFscmVhZHkgYSB0YWcuIElmIHlvdSBtZWFudCB0byB0YWcgdGhlIG9iamVjdCB0aGF0IGl0IHBvaW50cyB0bywgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIzMgorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyODQKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQwMgorbXNnaWQgImxpc3QgdGFnIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA0Cittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MDYKK21zZ2lkICJkZWxldGUgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQwNworbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA5Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MTEKK21zZ2lkICJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MTMKK21zZ2lkICJ0YWcgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQxNQorbXNnaWQgImZvcmNlIGVkaXQgb2YgdGFnIG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MTYKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE5Cittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQyMAorbXNnaWQgInJlcGxhY2UgdGhlIHRhZyBpZiBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MjEgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY5Cittc2dpZCAiY3JlYXRlIGEgcmVmbG9nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIzCittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQyNAorbXNnaWQgInNob3cgdGFnIGxpc3QgaW4gY29sdW1ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQyNSBidWlsdGluL3RhZy5jOjQyNworbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQyNiBidWlsdGluL3RhZy5jOjQyOAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQyOQorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MzAKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQzNAorbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDgyCittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1MDQKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUwNgorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1MDgKK21zZ2lkICItLW5vLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEwCittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1MTIKK21zZ2lkICItLW1lcmdlZCBhbmQgLS1uby1tZXJnZWQgb3B0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUyMworbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU0MgorbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRhZyBuYW1lLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjUwMgorbXNnaWQgIlVucGFja2luZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNSBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJUZXN0aW5nIG10aW1lIGluICclcycgIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTU0Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNjcKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTgwCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIHVwZGF0aW5nIGEgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5MQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciBhZGRpbmcgYSBmaWxlIGluc2lkZSBzdWJkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDIKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTUKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIyMgorbXNnaWQgIiBPSyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjU5MQorbXNnaWQgImdpdCB1cGRhdGUtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NAorbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NworbXNnaWQgInJlZnJlc2g6IGlnbm9yZSBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgwCittc2dpZCAiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODIKK21zZ2lkICJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NAorbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODYKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4OQorbXNnaWQgInJlZnJlc2ggc3RhdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5MworbXNnaWQgImxpa2UgLS1yZWZyZXNoLCBidXQgaWdub3JlIGFzc3VtZS11bmNoYW5nZWQgc2V0dGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NworbXNnaWQgIjxtb2RlPiw8b2JqZWN0Piw8cGF0aD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTgKK21zZ2lkICJhZGQgdGhlIHNwZWNpZmllZCBlbnRyeSB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA4Cittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxMQorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTQKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwiaW5kZXgtb25seVwiIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNworbXNnaWQgImNsZWFyIHNraXAtd29ya3RyZWUgYml0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMAorbXNnaWQgImRvIG5vdCB0b3VjaCBpbmRleC1vbmx5IGVudHJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIyCittc2dpZCAiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI0Cittc2dpZCAicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjYKK21zZ2lkICJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI4Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIHRvIGJlIHVwZGF0ZWQgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzIKK21zZ2lkICJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzYKK21zZ2lkICJyZXBvcHVsYXRlIHN0YWdlcyAjMiBhbmQgIzMgZm9yIHRoZSBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQwCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ0Cittc2dpZCAiaWdub3JlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDcKK21zZ2lkICJyZXBvcnQgYWN0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ5Cittc2dpZCAiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDUzCittc2dpZCAid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU1Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU3Cittc2dpZCAiZW5hYmxlL2Rpc2FibGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1OQorbXNnaWQgInRlc3QgaWYgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2MQorbXNnaWQgImVuYWJsZSB1bnRyYWNrZWQgY2FjaGUgd2l0aG91dCB0ZXN0aW5nIHRoZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2MworbXNnaWQgIndyaXRlIG91dCB0aGUgaW5kZXggZXZlbiBpZiBpcyBub3QgZmxhZ2dlZCBhcyBjaGFuZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIGZpbGUgc3lzdGVtIG1vbml0b3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY3Cittc2dpZCAibWFyayBmaWxlcyBhcyBmc21vbml0b3IgdmFsaWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDcwCittc2dpZCAiY2xlYXIgZnNtb25pdG9yIHZhbGlkIGJpdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNzMKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJlbmFibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTgyCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE5NAorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGRpc2FibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTgKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjA2Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGVuYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZW5hYmxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMTgKK21zZ2lkICJjb3JlLmZzbW9uaXRvciBpcyB1bnNldDsgc2V0IGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBlbmFibGUgZnNtb25pdG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyMgorbXNnaWQgImZzbW9uaXRvciBlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyNQorbXNnaWQgIiIKKyJjb3JlLmZzbW9uaXRvciBpcyBzZXQ7IHJlbW92ZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjI5Cittc2dpZCAiZnNtb25pdG9yIGRpc2FibGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEwCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gICAgPHJlZm5hbWU+IDxuZXctdmFsPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMgorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjQKK21zZ2lkICJkZWxldGUgdGhlIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjYKK21zZ2lkICJ1cGRhdGUgPHJlZm5hbWU+IG5vdCB0aGUgb25lIGl0IHBvaW50cyB0byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjcKK21zZ2lkICJzdGRpbiBoYXMgTlVMLXRlcm1pbmF0ZWQgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OAorbXNnaWQgInJlYWQgdXBkYXRlcyBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6NworbXNnaWQgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6MTUKK21zZ2lkICJ1cGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoxMQorbXNnaWQgImdpdCB1cGxvYWQtcGFjayBbPG9wdGlvbnM+XSA8ZGlyPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjMgdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE3Cittc2dpZCAicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyNQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjcKK21zZ2lkICJkbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI5Cittc2dpZCAiaW50ZXJydXB0IHRyYW5zZmVyIGFmdGVyIDxuPiBzZWNvbmRzIG9mIGluYWN0aXZpdHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6MTkKK21zZ2lkICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY4Cittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY5IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM3Cittc2dpZCAicHJpbnQgcmF3IGdwZyBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NQorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY1Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjcKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxOAorbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozNgorbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTcKK21zZ2lkICJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxwYXRoPiBbPGNvbW1pdC1pc2g+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTgKK21zZ2lkICJnaXQgd29ya3RyZWUgbGlzdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTkKK21zZ2lkICJnaXQgd29ya3RyZWUgbG9jayBbPG9wdGlvbnM+XSA8cGF0aD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIwCittc2dpZCAiZ2l0IHdvcmt0cmVlIG1vdmUgPHdvcmt0cmVlPiA8bmV3LXBhdGg+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMQorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjIKK21zZ2lkICJnaXQgd29ya3RyZWUgcmVtb3ZlIFs8b3B0aW9ucz5dIDx3b3JrdHJlZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzCittc2dpZCAiZ2l0IHdvcmt0cmVlIHVubG9jayA8cGF0aD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjYwIGJ1aWx0aW4vd29ya3RyZWUuYzo4OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTAgYnVpbHRpbi93b3JrdHJlZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHNob3J0IHJlYWQgKGV4cGVjdGVkICU8UFJJdU1BWD4gYnl0ZXMsIHJlYWQgIgorIiU8UFJJdU1BWD4pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNjUKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIHdvcmtpbmcgdHJlZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NworbXNnaWQgImV4cGlyZSB3b3JraW5nIHRyZWVzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZS1hZGQgd29ya3RyZWUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgbG9ja2VkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mIC1mJyB0byBvdmVycmlkZSwgb3IgJ3VubG9jaycgYW5kICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGFscmVhZHkgcmVnaXN0ZXJlZCB3b3JrdHJlZTtcbiIKKyJ1c2UgJ2FkZCAtZicgdG8gb3ZlcnJpZGUsIG9yICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzIgYnVpbHRpbi93b3JrdHJlZS5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKG5ldyBicmFuY2ggJyVzJykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKHJlc2V0dGluZyBicmFuY2ggJyVzJzsgd2FzIGF0ICVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoY2hlY2tpbmcgb3V0ICclcycpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChkZXRhY2hlZCBIRUFEICVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDkwCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTMKK21zZ2lkICJjcmVhdGUgYSBuZXcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTUKK21zZ2lkICJjcmVhdGUgb3IgcmVzZXQgYSBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5NworbXNnaWQgInBvcHVsYXRlIHRoZSBuZXcgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTgKK21zZ2lkICJrZWVwIHRoZSBuZXcgd29ya2luZyB0cmVlIGxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAxCittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtYnJhbmNoKDEpKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA0Cittc2dpZCAidHJ5IHRvIG1hdGNoIHRoZSBuZXcgYnJhbmNoIG5hbWUgd2l0aCBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUxMgorbXNnaWQgIi1iLCAtQiwgYW5kIC0tZGV0YWNoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjU3MworbXNnaWQgIi0tW25vLV10cmFjayBjYW4gb25seSBiZSB1c2VkIGlmIGEgbmV3IGJyYW5jaCBpcyBjcmVhdGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NzMKK21zZ2lkICJyZWFzb24gZm9yIGxvY2tpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4NSBidWlsdGluL3dvcmt0cmVlLmM6NzE4IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTIKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4NyBidWlsdGluL3dvcmt0cmVlLmM6NzIwCittc2dpZCAiVGhlIG1haW4gd29ya2luZyB0cmVlIGNhbm5vdCBiZSBsb2NrZWQgb3IgdW5sb2NrZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkLCByZWFzb246ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzYzCittc2dpZCAid29ya2luZyB0cmVlcyBjb250YWluaW5nIHN1Ym1vZHVsZXMgY2Fubm90IGJlIG1vdmVkIG9yIHJlbW92ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc3MQorbXNnaWQgImZvcmNlIG1vdmUgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5NCBidWlsdGluL3dvcmt0cmVlLmM6OTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYSBtYWluIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaWd1cmUgb3V0IGRlc3RpbmF0aW9uIG5hbWUgZnJvbSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFyZ2V0ICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXNcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODE1Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODE4CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG1vdmUgJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY29udGFpbnMgbW9kaWZpZWQgb3IgdW50cmFja2VkIGZpbGVzLCB1c2UgLS1mb3JjZSB0byBkZWxldGUgaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MDMKK21zZ2lkICJmb3JjZSByZW1vdmFsIGV2ZW4gaWYgd29ya3RyZWUgaXMgZGlydHkgb3IgbG9ja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXNcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjgKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWU7XG4iCisidXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgcmVtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MTUKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOAorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOQorbXNnaWQgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMQorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgIiIKKworIzogZmFzdC1pbXBvcnQuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICdtYXJrJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgIiIKKworIzogZmFzdC1pbXBvcnQuYzozMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICd0bycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICIiCisKKyM6IGZhc3QtaW1wb3J0LmM6MzI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJmZWF0dXJlICclcycgZm9yYmlkZGVuIGluIGlucHV0IHdpdGhvdXQgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMiCittc2dzdHIgIiIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGVybWlzc2lvbnMgb24geW91ciBzb2NrZXQgZGlyZWN0b3J5IGFyZSB0b28gbG9vc2U7IG90aGVyXG4iCisidXNlcnMgbWF5IGJlIGFibGUgdG8gcmVhZCB5b3VyIGNhY2hlZCBjcmVkZW50aWFscy4gQ29uc2lkZXIgcnVubmluZzpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCittc2dzdHIgIiIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjcyCittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAiIgorCisjOiB0L2hlbHBlci90ZXN0LXJlYWNoLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBpcyBub3QgbWFya2VkIHJlYWNoYWJsZSIKK21zZ3N0ciAiIgorCisjOiB0L2hlbHBlci90ZXN0LXJlYWNoLmM6MTYyCittc2dpZCAidG9vIG1hbnkgY29tbWl0cyBtYXJrZWQgcmVhY2hhYmxlIgorbXNnc3RyICIiCisKKyM6IHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzo3Cittc2dpZCAidGVzdC10b29sIHNlcnZlLXYyIFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzoxOQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWR2ZXJ0aXNpbmcgY2FwYWJpbGl0aWVzIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjI3Cittc2dpZCAiIgorImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPHBhdGg+XSBbLWMgPG5hbWU+PTx2YWx1ZT5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTxwYXRoPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tcGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tIgorImJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPTxwYXRoPl0gWy0td29yay10cmVlPTxwYXRoPl0gWy0tbmFtZXNwYWNlPTxuYW1lPl1cbiIKKyIgICAgICAgICAgIDxjb21tYW5kPiBbPGFyZ3M+XSIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzozNAorbXNnaWQgIiIKKyInZ2l0IGhlbHAgLWEnIGFuZCAnZ2l0IGhlbHAgLWcnIGxpc3QgYXZhaWxhYmxlIHN1YmNvbW1hbmRzIGFuZCBzb21lXG4iCisiY29uY2VwdCBndWlkZXMuIFNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyBvciAnZ2l0IGhlbHAgPGNvbmNlcHQ+J1xuIgorInRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIG9yIGNvbmNlcHQuXG4iCisiU2VlICdnaXQgaGVscCBnaXQnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLWdpdC1kaXJcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbmFtZXNwYWNlIGdpdmVuIGZvciAtLW5hbWVzcGFjZVxuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByZWZpeCBnaXZlbiBmb3IgLS1zdXBlci1wcmVmaXhcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLWMgZXhwZWN0cyBhIGNvbmZpZ3VyYXRpb24gc3RyaW5nXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLUNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYWxpYXMgJyVzJyBjaGFuZ2VzIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiIKKyJZb3UgY2FuIHVzZSAnIWdpdCcgaW4gdGhlIGFsaWFzIHRvIGRvIHRoaXMiCittc2dzdHIgIiIKKworIzogZ2l0LmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGFsaWFzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGFsaWFzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo0NTkKK21zZ2lkICJ3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo0NjEKK21zZ2lkICJ1bmtub3duIHdyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjQ2MworbXNnaWQgImNsb3NlIGZhaWxlZCBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogZ2l0LmM6NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIGxvb3AgZGV0ZWN0ZWQ6IGV4cGFuc2lvbiBvZiAnJXMnIGRvZXMgbm90IHRlcm1pbmF0ZTolcyIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSAlcyBhcyBhIGJ1aWx0aW4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1c2FnZTogJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwYW5zaW9uIG9mIGFsaWFzICclcycgZmFpbGVkOyAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gY29tbWFuZCAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibmVnYXRpdmUgdmFsdWUgZm9yIGh0dHAucG9zdGJ1ZmZlcjsgZGVmYXVsdGluZyB0byAlZCIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6Mzk5Cittc2dpZCAiRGVsZWdhdGlvbiBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4yMi4wIgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzo0MDgKK21zZ2lkICJQdWJsaWMga2V5IHBpbm5pbmcgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIiIKKworIzogaHR0cC5jOjg3NgorbXNnaWQgIkNVUkxTU0xPUFRfTk9fUkVWT0tFIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy40NC4wIgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzo5NDkKK21zZ2lkICJQcm90b2NvbCByZXN0cmljdGlvbnMgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjE5LjQiCittc2dzdHIgIiIKKworIzogaHR0cC5jOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgU1NMIGJhY2tlbmQgJyVzJy4gU3VwcG9ydGVkIFNTTCBiYWNrZW5kczoiCittc2dzdHIgIiIKKworIzogaHR0cC5jOjEwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBjVVJMIHdhcyBidWlsdCB3aXRob3V0IFNTTCBiYWNrZW5kcyIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6MTA5NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGFscmVhZHkgc2V0IgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzoxOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gdXBkYXRlIHVybCBiYXNlIGZyb20gcmVkaXJlY3Rpb246XG4iCisiICBhc2tlZCBmb3I6ICVzXG4iCisiICAgcmVkaXJlY3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcXVvdGluZyBpbiBwdXNoLW9wdGlvbiB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlc2luZm8vcmVmcyBub3QgdmFsaWQ6IGlzIHRoaXMgYSBnaXQgcmVwb3NpdG9yeT8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzozNjQKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZXhwZWN0ZWQgc2VydmljZSwgZ290IGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZ290ICclcyciCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yICclcyciCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjU5MworbXNnaWQgInNob3VsZG4ndCBoYXZlIEVPRiB3aGVuIG5vdCBnZW50bGUgb24gRU9GIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6NjczCittc2dpZCAidW5hYmxlIHRvIHJld2luZCBycGMgcG9zdCBkYXRhIC0gdHJ5IGluY3JlYXNpbmcgaHR0cC5wb3N0QnVmZmVyIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJQQyBmYWlsZWQ7ICVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6NzczCittc2dpZCAiY2Fubm90IGhhbmRsZSBwdXNoZXMgdGhpcyBiaWciCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBkZWZsYXRlIGVycm9yICVkIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZW5kIGVycm9yICVkIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTAyMworbXNnaWQgImR1bWIgaHR0cCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNhcGFiaWxpdGllcyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjEwMzgKK21zZ2lkICJmZXRjaCBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTA4NgorbXNnaWQgImNhbm5vdCBmZXRjaCBieSBzaGExIG92ZXIgc21hcnQgaHR0cCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjExMzAgcmVtb3RlLWN1cmwuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjExNDggcmVtb3RlLWN1cmwuYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxMTg0Cittc2dpZCAiZ2l0LWh0dHAtcHVzaCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxMzY5Cittc2dpZCAicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPHJlbW90ZT4gWzx1cmw+XSIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjE0MDEKK21zZ2lkICJyZW1vdGUtY3VybDogZXJyb3IgcmVhZGluZyBjb21tYW5kIHN0cmVhbSBmcm9tIGdpdCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjE0MDgKK21zZ2lkICJyZW1vdGUtY3VybDogZmV0Y2ggYXR0ZW1wdGVkIHdpdGhvdXQgYSBsb2NhbCByZXBvIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtY3VybDogdW5rbm93biBjb21tYW5kICclcycgZnJvbSBnaXQiCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODUKK21zZ2lkICJhcmdzIgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oOjg2Cittc2dpZCAib2JqZWN0IGZpbHRlcmluZyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTgzCittc2dpZCAiZXhwaXJ5LWRhdGUiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE5NworbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzA5Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTEKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTcKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM2Cittc2dpZCAiaG93IHRvIHN0cmlwIHNwYWNlcyBhbmQgI2NvbW1lbnRzIGZyb20gbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM3Cittc2dpZCAicmVhZCBwYXRoc3BlYyBmcm9tIGZpbGUiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzOAorbXNnaWQgIiIKKyJ3aXRoIC0tcGF0aHNwZWMtZnJvbS1maWxlLCBwYXRoc3BlYyBlbGVtZW50cyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmg6MTAxCittc2dpZCAia2V5IgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgIiIKKworIzogcmVyZXJlLmg6NDQKK21zZ2lkICJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmg6NjcKK21zZ2lkICJIRUFEIGRldGFjaGVkIGF0ICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuaDo2OAorbXNnaWQgIkhFQUQgZGV0YWNoZWQgZnJvbSAiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NTAKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NTEKK21zZ2lkICJBcHBseSBhIHNlcmllcyBvZiBwYXRjaGVzIGZyb20gYSBtYWlsYm94IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUyCittc2dpZCAiQW5ub3RhdGUgZmlsZSBsaW5lcyB3aXRoIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MworbXNnaWQgIkFwcGx5IGEgcGF0Y2ggdG8gZmlsZXMgYW5kL29yIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NAorbXNnaWQgIkltcG9ydCBhIEdOVSBBcmNoIHJlcG9zaXRvcnkgaW50byBHaXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NTUKK21zZ2lkICJDcmVhdGUgYW4gYXJjaGl2ZSBvZiBmaWxlcyBmcm9tIGEgbmFtZWQgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NgorbXNnaWQgIlVzZSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgYSBidWciCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NTcKK21zZ2lkICJTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NTgKK21zZ2lkICJMaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OQorbXNnaWQgIk1vdmUgb2JqZWN0cyBhbmQgcmVmcyBieSBhcmNoaXZlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYwCittc2dpZCAiUHJvdmlkZSBjb250ZW50IG9yIHR5cGUgYW5kIHNpemUgaW5mb3JtYXRpb24gZm9yIHJlcG9zaXRvcnkgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MQorbXNnaWQgIkRpc3BsYXkgZ2l0YXR0cmlidXRlcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MgorbXNnaWQgIkRlYnVnIGdpdGlnbm9yZSAvIGV4Y2x1ZGUgZmlsZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NjMKK21zZ2lkICJTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY0Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIG9yIHJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY1Cittc2dpZCAiQ29weSBmaWxlcyBmcm9tIHRoZSBpbmRleCB0byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY2Cittc2dpZCAiRW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIG5hbWUgaXMgd2VsbCBmb3JtZWQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NjcKK21zZ2lkICJGaW5kIGNvbW1pdHMgeWV0IHRvIGJlIGFwcGxpZWQgdG8gdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NjgKK21zZ2lkICJBcHBseSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IHNvbWUgZXhpc3RpbmcgY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo2OQorbXNnaWQgIkdyYXBoaWNhbCBhbHRlcm5hdGl2ZSB0byBnaXQtY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcwCittc2dpZCAiUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NzEKK21zZ2lkICJDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NzIKK21zZ2lkICJEaXNwbGF5IGRhdGEgaW4gY29sdW1ucyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MworbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc0Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBHaXQgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc1Cittc2dpZCAiQ3JlYXRlIGEgbmV3IGNvbW1pdCBvYmplY3QiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NzYKK21zZ2lkICJHZXQgYW5kIHNldCByZXBvc2l0b3J5IG9yIGdsb2JhbCBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc3Cittc2dpZCAiQ291bnQgdW5wYWNrZWQgbnVtYmVyIG9mIG9iamVjdHMgYW5kIHRoZWlyIGRpc2sgY29uc3VtcHRpb24iCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NzgKK21zZ2lkICJSZXRyaWV2ZSBhbmQgc3RvcmUgdXNlciBjcmVkZW50aWFscyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo3OQorbXNnaWQgIkhlbHBlciB0byB0ZW1wb3JhcmlseSBzdG9yZSBwYXNzd29yZHMgaW4gbWVtb3J5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgwCittc2dpZCAiSGVscGVyIHRvIHN0b3JlIGNyZWRlbnRpYWxzIG9uIGRpc2siCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6ODEKK21zZ2lkICJFeHBvcnQgYSBzaW5nbGUgY29tbWl0IHRvIGEgQ1ZTIGNoZWNrb3V0IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgyCittc2dpZCAiU2FsdmFnZSB5b3VyIGRhdGEgb3V0IG9mIGFub3RoZXIgU0NNIHBlb3BsZSBsb3ZlIHRvIGhhdGUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6ODMKK21zZ2lkICJBIENWUyBzZXJ2ZXIgZW11bGF0b3IgZm9yIEdpdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NAorbXNnaWQgIkEgcmVhbGx5IHNpbXBsZSBzZXJ2ZXIgZm9yIEdpdCByZXBvc2l0b3JpZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6ODUKK21zZ2lkICJHaXZlIGFuIG9iamVjdCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgYmFzZWQgb24gYW4gYXZhaWxhYmxlIHJlZiIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NgorbXNnaWQgIlNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6ODcKK21zZ2lkICJDb21wYXJlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6ODgKK21zZ2lkICJDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg5Cittc2dpZCAiQ29tcGFyZXMgdGhlIGNvbnRlbnQgYW5kIG1vZGUgb2YgYmxvYnMgZm91bmQgdmlhIHR3byB0cmVlIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6OTAKK21zZ2lkICJTaG93IGNoYW5nZXMgdXNpbmcgY29tbW9uIGRpZmYgdG9vbHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6OTEKK21zZ2lkICJHaXQgZGF0YSBleHBvcnRlciIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MgorbXNnaWQgIkJhY2tlbmQgZm9yIGZhc3QgR2l0IGRhdGEgaW1wb3J0ZXJzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkzCittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk1Cittc2dpZCAiUmV3cml0ZSBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NgorbXNnaWQgIlByb2R1Y2UgYSBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NworbXNnaWQgIk91dHB1dCBpbmZvcm1hdGlvbiBvbiBlYWNoIHJlZiIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo5OAorbXNnaWQgIlByZXBhcmUgcGF0Y2hlcyBmb3IgZS1tYWlsIHN1Ym1pc3Npb24iCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6OTkKK21zZ2lkICJWZXJpZmllcyB0aGUgY29ubmVjdGl2aXR5IGFuZCB2YWxpZGl0eSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTAwCittc2dpZCAiQ2xlYW51cCB1bm5lY2Vzc2FyeSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTAxCittc2dpZCAiRXh0cmFjdCBjb21taXQgSUQgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgdXNpbmcgZ2l0LWFyY2hpdmUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTAyCittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMworbXNnaWQgIkEgcG9ydGFibGUgZ3JhcGhpY2FsIGludGVyZmFjZSB0byBHaXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTA0Cittc2dpZCAiQ29tcHV0ZSBvYmplY3QgSUQgYW5kIG9wdGlvbmFsbHkgY3JlYXRlcyBhIGJsb2IgZnJvbSBhIGZpbGUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTA1Cittc2dpZCAiRGlzcGxheSBoZWxwIGluZm9ybWF0aW9uIGFib3V0IEdpdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDYKK21zZ2lkICJTZXJ2ZXIgc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBHaXQgb3ZlciBIVFRQIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNworbXNnaWQgIkRvd25sb2FkIGZyb20gYSByZW1vdGUgR2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTA4Cittc2dpZCAiUHVzaCBvYmplY3RzIG92ZXIgSFRUUC9EQVYgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOQorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgZnJvbSBzdGRpbiB0byBhbiBJTUFQIGZvbGRlciIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTAKK21zZ2lkICJCdWlsZCBwYWNrIGluZGV4IGZpbGUgZm9yIGFuIGV4aXN0aW5nIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMQorbXNnaWQgIkNyZWF0ZSBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeSBvciByZWluaXRpYWxpemUgYW4gZXhpc3Rpbmcgb25lIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMgorbXNnaWQgIkluc3RhbnRseSBicm93c2UgeW91ciB3b3JraW5nIHJlcG9zaXRvcnkgaW4gZ2l0d2ViIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMworbXNnaWQgIkFkZCBvciBwYXJzZSBzdHJ1Y3R1cmVkIGluZm9ybWF0aW9uIGluIGNvbW1pdCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTQKK21zZ2lkICJUaGUgR2l0IHJlcG9zaXRvcnkgYnJvd3NlciIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTUKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNgorbXNnaWQgIlNob3cgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNworbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIHJlbW90ZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOAorbXNnaWQgIkxpc3QgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTE5Cittc2dpZCAiRXh0cmFjdHMgcGF0Y2ggYW5kIGF1dGhvcnNoaXAgZnJvbSBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjAKK21zZ2lkICJTaW1wbGUgVU5JWCBtYm94IHNwbGl0dGVyIHByb2dyYW0iCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTIxCittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTIyCittc2dpZCAiRmluZCBhcyBnb29kIGNvbW1vbiBhbmNlc3RvcnMgYXMgcG9zc2libGUgZm9yIGEgbWVyZ2UiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTIzCittc2dpZCAiUnVuIGEgdGhyZWUtd2F5IGZpbGUgbWVyZ2UiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI0Cittc2dpZCAiUnVuIGEgbWVyZ2UgZm9yIGZpbGVzIG5lZWRpbmcgbWVyZ2luZyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjUKK21zZ2lkICJUaGUgc3RhbmRhcmQgaGVscGVyIHByb2dyYW0gdG8gdXNlIHdpdGggZ2l0LW1lcmdlLWluZGV4IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNgorbXNnaWQgIlJ1biBtZXJnZSBjb25mbGljdCByZXNvbHV0aW9uIHRvb2xzIHRvIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNworbXNnaWQgIlNob3cgdGhyZWUtd2F5IG1lcmdlIHdpdGhvdXQgdG91Y2hpbmcgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI4Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBtdWx0aS1wYWNrLWluZGV4ZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI5Cittc2dpZCAiQ3JlYXRlcyBhIHRhZyBvYmplY3QiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTMwCittc2dpZCAiQnVpbGQgYSB0cmVlLW9iamVjdCBmcm9tIGxzLXRyZWUgZm9ybWF0dGVkIHRleHQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTMxCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMgorbXNnaWQgIkZpbmQgc3ltYm9saWMgbmFtZXMgZm9yIGdpdmVuIHJldnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTMzCittc2dpZCAiQWRkIG9yIGluc3BlY3Qgb2JqZWN0IG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNAorbXNnaWQgIkltcG9ydCBmcm9tIGFuZCBzdWJtaXQgdG8gUGVyZm9yY2UgcmVwb3NpdG9yaWVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNQorbXNnaWQgIkNyZWF0ZSBhIHBhY2tlZCBhcmNoaXZlIG9mIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM2Cittc2dpZCAiRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzcKK21zZ2lkICJQYWNrIGhlYWRzIGFuZCB0YWdzIGZvciBlZmZpY2llbnQgcmVwb3NpdG9yeSBhY2Nlc3MiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM4Cittc2dpZCAiUm91dGluZXMgdG8gaGVscCBwYXJzaW5nIHJlbW90ZSByZXBvc2l0b3J5IGFjY2VzcyBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOQorbXNnaWQgIkNvbXB1dGUgdW5pcXVlIElEIGZvciBhIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MAorbXNnaWQgIlBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDEKK21zZ2lkICJSZW1vdmUgZXh0cmEgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGluIHBhY2sgZmlsZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQyCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgaW50ZWdyYXRlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MworbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDQKK21zZ2lkICJBcHBsaWVzIGEgcXVpbHQgcGF0Y2hzZXQgb250byB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ1Cittc2dpZCAiQ29tcGFyZSB0d28gY29tbWl0IHJhbmdlcyAoZS5nLiB0d28gdmVyc2lvbnMgb2YgYSBicmFuY2gpIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NgorbXNnaWQgIlJlYWRzIHRyZWUgaW5mb3JtYXRpb24gaW50byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ3Cittc2dpZCAiUmVhcHBseSBjb21taXRzIG9uIHRvcCBvZiBhbm90aGVyIGJhc2UgdGlwIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OAorbXNnaWQgIlJlY2VpdmUgd2hhdCBpcyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDkKK21zZ2lkICJNYW5hZ2UgcmVmbG9nIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MAorbXNnaWQgIk1hbmFnZSBzZXQgb2YgdHJhY2tlZCByZXBvc2l0b3JpZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTUxCittc2dpZCAiUGFjayB1bnBhY2tlZCBvYmplY3RzIGluIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTIKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSByZWZzIHRvIHJlcGxhY2Ugb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTMKK21zZ2lkICJHZW5lcmF0ZXMgYSBzdW1tYXJ5IG9mIHBlbmRpbmcgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTQKK21zZ2lkICJSZXVzZSByZWNvcmRlZCByZXNvbHV0aW9uIG9mIGNvbmZsaWN0ZWQgbWVyZ2VzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NQorbXNnaWQgIlJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NgorbXNnaWQgIlJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NworbXNnaWQgIlJldmVydCBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTU4Cittc2dpZCAiTGlzdHMgY29tbWl0IG9iamVjdHMgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OQorbXNnaWQgIlBpY2sgb3V0IGFuZCBtYXNzYWdlIHBhcmFtZXRlcnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTYwCittc2dpZCAiUmVtb3ZlIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTYxCittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBhcyBlbWFpbHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTYyCittc2dpZCAiUHVzaCBvYmplY3RzIG92ZXIgR2l0IHByb3RvY29sIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjMKK21zZ2lkICJSZXN0cmljdGVkIGxvZ2luIHNoZWxsIGZvciBHaXQtb25seSBTU0ggYWNjZXNzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NAorbXNnaWQgIlN1bW1hcml6ZSAnZ2l0IGxvZycgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NQorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NgorbXNnaWQgIlNob3cgYnJhbmNoZXMgYW5kIHRoZWlyIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY3Cittc2dpZCAiU2hvdyBwYWNrZWQgYXJjaGl2ZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjgKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OQorbXNnaWQgIkdpdCdzIGkxOG4gc2V0dXAgY29kZSBmb3Igc2hlbGwgc2NyaXB0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzAKK21zZ2lkICJDb21tb24gR2l0IHNoZWxsIHNjcmlwdCBzZXR1cCBjb2RlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MQorbXNnaWQgIkluaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MgorbXNnaWQgIlN0YXNoIHRoZSBjaGFuZ2VzIGluIGEgZGlydHkgd29ya2luZyBkaXJlY3RvcnkgYXdheSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzMKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgc3RhZ2luZyBhcmVhIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NAorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc1Cittc2dpZCAiUmVtb3ZlIHVubmVjZXNzYXJ5IHdoaXRlc3BhY2UiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc2Cittc2dpZCAiSW5pdGlhbGl6ZSwgdXBkYXRlIG9yIGluc3BlY3Qgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzcKK21zZ2lkICJCaWRpcmVjdGlvbmFsIG9wZXJhdGlvbiBiZXR3ZWVuIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IGFuZCBHaXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc4Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3OQorbXNnaWQgIlJlYWQsIG1vZGlmeSBhbmQgZGVsZXRlIHN5bWJvbGljIHJlZnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgwCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgxCittc2dpZCAiQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIHdpdGggYSBibG9iJ3MgY29udGVudHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgyCittc2dpZCAiVW5wYWNrIG9iamVjdHMgZnJvbSBhIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MworbXNnaWQgIlJlZ2lzdGVyIGZpbGUgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg0Cittc2dpZCAiVXBkYXRlIHRoZSBvYmplY3QgbmFtZSBzdG9yZWQgaW4gYSByZWYgc2FmZWx5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NQorbXNnaWQgIlVwZGF0ZSBhdXhpbGlhcnkgaW5mbyBmaWxlIHRvIGhlbHAgZHVtYiBzZXJ2ZXJzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NgorbXNnaWQgIlNlbmQgYXJjaGl2ZSBiYWNrIHRvIGdpdC1hcmNoaXZlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NworbXNnaWQgIlNlbmQgb2JqZWN0cyBwYWNrZWQgYmFjayB0byBnaXQtZmV0Y2gtcGFjayIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODgKK21zZ2lkICJTaG93IGEgR2l0IGxvZ2ljYWwgdmFyaWFibGUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg5Cittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTAKK21zZ2lkICJWYWxpZGF0ZSBwYWNrZWQgR2l0IGFyY2hpdmUgZmlsZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTkxCittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgdGFncyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTIKK21zZ2lkICJHaXQgd2ViIGludGVyZmFjZSAod2ViIGZyb250ZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMpIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MworbXNnaWQgIlNob3cgbG9ncyB3aXRoIGRpZmZlcmVuY2UgZWFjaCBjb21taXQgaW50cm9kdWNlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTQKK21zZ2lkICJNYW5hZ2UgbXVsdGlwbGUgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTUKK21zZ2lkICJDcmVhdGUgYSB0cmVlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NgorbXNnaWQgIkRlZmluaW5nIGF0dHJpYnV0ZXMgcGVyIHBhdGgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk3Cittc2dpZCAiR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OAorbXNnaWQgIkEgR2l0IGNvcmUgdHV0b3JpYWwgZm9yIGRldmVsb3BlcnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk5Cittc2dpZCAiR2l0IGZvciBDVlMgdXNlcnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MjAwCittc2dpZCAiVHdlYWtpbmcgZGlmZiBvdXRwdXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MjAxCittc2dpZCAiQSB1c2VmdWwgbWluaW11bSBzZXQgb2YgY29tbWFuZHMgZm9yIEV2ZXJ5ZGF5IEdpdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDIKK21zZ2lkICJBIEdpdCBHbG9zc2FyeSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDMKK21zZ2lkICJIb29rcyB1c2VkIGJ5IEdpdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDQKK21zZ2lkICJTcGVjaWZpZXMgaW50ZW50aW9uYWxseSB1bnRyYWNrZWQgZmlsZXMgdG8gaWdub3JlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNQorbXNnaWQgIkRlZmluaW5nIHN1Ym1vZHVsZSBwcm9wZXJ0aWVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNgorbXNnaWQgIkdpdCBuYW1lc3BhY2VzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNworbXNnaWQgIkdpdCBSZXBvc2l0b3J5IExheW91dCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDgKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MjA5Cittc2dpZCAiTW91bnRpbmcgb25lIHJlcG9zaXRvcnkgaW5zaWRlIGFub3RoZXIiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MjEwCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0OiBwYXJ0IHR3byIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTEKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MjEyCittc2dpZCAiQW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQgd29ya2Zsb3dzIHdpdGggR2l0IgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTQKK21zZ2lkICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6NjAKK21zZ2lkICJEbyB5b3Ugd2FudCBtZSB0byBkbyBpdCBmb3IgeW91IFtZL25dPyAiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRiaXNlY3RlZF9oZWFkIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkcmV2IgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTM5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIGNhbiB0YWtlIG9ubHkgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjIwOQorbXNnaWQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICRmaWxlIGZvciByZXBsYXlpbmciCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMzIKK21zZ2lkICI/PyB3aGF0IGFyZSB5b3UgdGFsa2luZyBhYm91dD8iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDEKK21zZ2lkICJiaXNlY3QgcnVuIGZhaWxlZDogbm8gY29tbWFuZCBwcm92aWRlZC4iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyJleGl0IGNvZGUgJHJlcyBmcm9tICckY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjg1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHJlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjMwMAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICIiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjIKK21zZ2lkICJTaG91bGQgbm90IGJlIGRvaW5nIGFuIG9jdG9wdXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjb21tb24gY29tbWl0IHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICIiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjc3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUgd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyB0bzogJHByZXR0eV9uYW1lIgorbXNnc3RyICIiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjk3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUcnlpbmcgc2ltcGxlIG1lcmdlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICIiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjEwMgorbXNnaWQgIlNpbXBsZSBtZXJnZSBkaWQgbm90IHdvcmssIHRyeWluZyBhdXRvbWF0aWMgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjIxCittc2dpZCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyNzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJHJlZl9zdGFzaCB3aXRoICR3X2NvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAkc3Rhc2hfbXNnIgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJG9wdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjE4Cittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MjIKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzAKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMyCittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY0MQorbXNnaWQgIkNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIGVudHJ5IgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjY2Cittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3OTIKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMDMKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMworIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzMgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IGFuZCBpcyBub3QgYSBzdWJtb2R1bGUiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MworIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBIGdpdCBkaXJlY3RvcnkgZm9yICckc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb21cbiIKKyIgICRyZWFscmVwb1xuIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0ICIKKyJyZXBvXG4iCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorIm9wdGlvbi4iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMxNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICIKKyInJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjIzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOyB0cnlpbmcgdG8gZGlyZWN0bHkgZmV0Y2ggIgorIiRzaGExOiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyOQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkZldGNoZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcsIGJ1dCBpdCBkaWQgbm90IGNvbnRhaW4gJHNoYTEuICIKKyJEaXJlY3QgZmV0Y2hpbmcgb2YgdGhhdCBjb21taXQgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0NworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBtZXJnZWQgaW4gJyRzaGExJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY1MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjU0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgbW9kZSAkbW9kX2RzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk2OAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTZWUgZ2l0LSR7Y21kfSgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEwOQorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNpbmcgKCRuZXdfY291bnQvJHRvdGFsKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjA3Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjI5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHNoYTE6IG5vdCBhIGNvbW1pdCB0aGF0IGNhbiBiZSBwaWNrZWQiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjMzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21taXQgbmFtZTogJHNoYTEiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjM2NAorbXNnaWQgIkNhbm5vdCB3cml0ZSBjdXJyZW50IGNvbW1pdCdzIHJlcGxhY2VtZW50IHNoYTEiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG1vdmUgSEVBRCB0byAkZmlyc3RfcGFyZW50IgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiAkc2hhMSIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWRvaW5nIG1lcmdlICRzaGExIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwaWNrICRzaGExIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMke259OiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyR7bn0gd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdC4iCittc2dpZF9wbHVyYWwgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0cy4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgJGZpeHVwX21zZyIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk1Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cy4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjUzNiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTc5CisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTgyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJHNoYTEuLi4gJHJlc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhbWVuZCBjb21taXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBpY2tpbmcgJHNoYTEuLi4gJHJlc3RcbiIKKyJUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9va1xuIgorImZhaWxlZC4gSWYgdGhlIHByZS1jb21taXQgaG9vayBmYWlsZWQsIHlvdSBtYXkgbmVlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSAiCisiYmVmb3JlXG4iCisieW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICRzaGExX2FiYnJldi4uLiAkcmVzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJyRzcXVhc2hfc3R5bGUnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY4MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nOiAkcmVzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gZmFpbGVkOiAkcmVzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkzCittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5NQorbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gc3VjY2VlZGVkOiAkcmVzdFxuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21tYW5kOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzIwCittc2dpZCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc1NQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxMgorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmVcbiIKKyJzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzQKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM5Cittc2dpZCAiIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0NCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ4Cittc2dpZCAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg3OSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTY1Cittc2dpZCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjaGVja291dCAkc3dpdGNoX3RvIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDcKK21zZ2lkICJObyBIRUFEPyIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAkc3RhdGVfZGlyIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MTEKK21zZ2lkICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZHMpIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk1NQorbXNnaWQgIk5vdGUgdGhhdCBlbXB0eSBjb21taXRzIGFyZSBjb21tZW50ZWQgb3V0IgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5OTcgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEwMDIKK21zZ2lkICJDb3VsZCBub3QgaW5pdCByZXdyaXR0ZW4gY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6ODkgZ2l0LXNoLXNldHVwLnNoOjk0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJGRhc2hsZXNzICRVU0FHRSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgY2hkaXIgdG8gJGNkdXAsIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMDAgZ2l0LXNoLXNldHVwLnNoOjIwNworIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6ICRwcm9ncmFtX25hbWUgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyMQorbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjQKK21zZ2lkICJDYW5ub3QgcmV3cml0ZSBicmFuY2hlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNworbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0MworbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0NgorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTMKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3MworbXNnaWQgIllvdSBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3OAorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgYWJzb2x1dGUgcGF0aCBvZiBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiB5b3UgY2FuIGFkanVzdCB0aGlzIHRvIGFsaWduICJnaXQgYWRkIC1pIiBzdGF0dXMgbWVudQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJTEycyAlMTJzICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInRvdWNoZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ0b3VjaGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTMKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YWdpbmcuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1NgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3Rhc2hpbmcuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1OQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgdW5zdGFnaW5nLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDcxCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzcKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGFwcGx5aW5nLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzQKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGRpc2NhcmRpbmcuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJXMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTE0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3IgcmVhZGluZzogJXMiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjQ4Cittc2dpZCAiIgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI1NAorbXNnaWQgIiIKKyJ5IC0gc3Rhc2ggdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YXNoIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNjAKK21zZ2lkICIiCisieSAtIHVuc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSB1bnN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjkwCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjc4Cittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyODQKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyOTYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzExCittc2dpZCAiIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MgorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTcwCittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290b1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU4OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU5MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS5cbiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLlxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjE5Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjM2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY0NgorbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVyblxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY1OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODAKK21zZ2lkICJObyBwcmV2aW91cyBodW5rXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjY3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY4NgorbXNnaWQgIk5vIG5leHQgaHVua1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5MgorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjk4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVuay5cbiIKK21zZ2lkX3BsdXJhbCAiU3BsaXQgaW50byAlZCBodW5rcy5cbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcwOAorbXNnaWQgIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmtcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGRvIG5vdCB0cmFuc2xhdGUgdGhlIGNvbW1hbmQgbmFtZXMKKyMuICdzdGF0dXMnLCAndXBkYXRlJywgJ3JldmVydCcsIGV0Yy4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc3MworbXNnaWQgIiIKKyJzdGF0dXMgICAgICAgIC0gc2hvdyBwYXRocyB3aXRoIGNoYW5nZXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzXG4iCisicmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uXG4iCisicGF0Y2ggICAgICAgICAtIHBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseVxuIgorImRpZmYgICAgICAgICAgLSB2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleFxuIgorImFkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mICIKKyJjaGFuZ2VzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzkwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5NQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgwNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgxNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNQorbXNnaWQgIm1pc3NpbmcgLS0iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODIxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVua25vd24gLS1wYXRjaCBtb2RlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMsIGV4cGVjdGluZyAtLSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzOAorbXNnaWQgImxvY2FsIHpvbmUgZGlmZmVycyBmcm9tIEdNVCBieSBhIG5vbi1taW51dGUgaW50ZXJ2YWxcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MQorbXNnaWQgImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjIzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MjI5Cittc2dpZCAidGhlIGVkaXRvciBleGl0ZWQgdW5jbGVhbmx5LCBhYm9ydGluZyBldmVyeXRoaW5nIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzEwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvbnRhaW5zIGFuIGludGVybWVkaWF0ZSB2ZXJzaW9uIG9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJyVzLmZpbmFsJyBjb250YWlucyB0aGUgY29tcG9zZWQgZW1haWwuXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0MDgKK21zZ2lkICItLWR1bXAtYWxpYXNlcyBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBvcHRpb25zXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0ODEgZ2l0LXNlbmQtZW1haWwucGVybDo2ODMKK21zZ2lkICJDYW5ub3QgcnVuIGdpdCBmb3JtYXQtcGF0Y2ggZnJvbSBvdXRzaWRlIGEgcmVwb3NpdG9yeVxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDg0Cittc2dpZCAiIgorImBiYXRjaC1zaXplYCBhbmQgYHJlbG9naW5gIG11c3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyICh2aWEgY29tbWFuZC1saW5lIG9yICIKKyJjb25maWd1cmF0aW9uIG9wdGlvbilcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ5NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tc3VwcHJlc3MtY2MgZmllbGQ6ICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tY29uZmlybSBzZXR0aW5nOiAnJXMnXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgYWxpYXMgd2l0aCBxdW90ZXMgaXMgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgOmluY2x1ZGU6YCBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTYwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGAvZmlsZWAgb3IgYHxwaXBlYCByZWRpcmVjdGlvbiBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGxpbmUgaXMgbm90IHJlY29nbml6ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NDkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgJyVzJyBleGlzdHMgYnV0IGl0IGNvdWxkIGFsc28gYmUgdGhlIHJhbmdlIG9mIGNvbW1pdHNcbiIKKyJ0byBwcm9kdWNlIHBhdGNoZXMgZm9yLiAgUGxlYXNlIGRpc2FtYmlndWF0ZSBieS4uLlxuIgorIlxuIgorIiAgICAqIFNheWluZyBcIi4vJXNcIiBpZiB5b3UgbWVhbiBhIGZpbGU7IG9yXG4iCisiICAgICogR2l2aW5nIC0tZm9ybWF0LXBhdGNoIG9wdGlvbiBpZiB5b3UgbWVhbiBhIHJhbmdlLlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjcwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuZGlyICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY5NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiZmF0YWw6ICVzOiAlc1xuIgorIndhcm5pbmc6IG5vIHBhdGNoZXMgd2VyZSBzZW50XG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MDUKK21zZ2lkICIiCisiXG4iCisiTm8gcGF0Y2ggZmlsZXMgc3BlY2lmaWVkIVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk5vIHN1YmplY3QgbGluZSBpbiAlcz8iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gZm9yIHdyaXRpbmcgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzM5Cittc2dpZCAiIgorIkxpbmVzIGJlZ2lubmluZyBpbiBcIkdJVDpcIiB3aWxsIGJlIHJlbW92ZWQuXG4iCisiQ29uc2lkZXIgaW5jbHVkaW5nIGFuIG92ZXJhbGwgZGlmZnN0YXQgb3IgdGFibGUgb2YgY29udGVudHNcbiIKKyJmb3IgdGhlIHBhdGNoIHlvdSBhcmUgd3JpdGluZy5cbiIKKyJcbiIKKyJDbGVhciB0aGUgYm9keSBjb250ZW50IGlmIHlvdSBkb24ndCB3aXNoIHRvIHNlbmQgYSBzdW1tYXJ5LlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc4MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlcy5maW5hbDogJXMiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4MjMKK21zZ2lkICJTdW1tYXJ5IGVtYWlsIGlzIGVtcHR5LCBza2lwcGluZyBpdFxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCBbeS9OXSBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1c2UgPCVzPiBbeS9OXT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTEzCittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIDhiaXQsIGJ1dCBkbyBub3QgZGVjbGFyZSBhIENvbnRlbnQtVHJhbnNmZXItIgorIkVuY29kaW5nLlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTE4Cittc2dpZCAiV2hpY2ggOGJpdCBlbmNvZGluZyBzaG91bGQgSSBkZWNsYXJlIFtVVEYtOF0/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkyNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuIgorIlx0JXNcbiIKKyJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgIgorIndhbnQgdG8gc2VuZC5cbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk0NQorbXNnaWQgIlRvIHdob20gc2hvdWxkIHRoZSBlbWFpbHMgYmUgc2VudCAoaWYgYW55b25lKT8iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmF0YWw6IGFsaWFzICclcycgZXhwYW5kcyB0byBpdHNlbGZcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk3NQorbXNnaWQgIk1lc3NhZ2UtSUQgdG8gYmUgdXNlZCBhcyBJbi1SZXBseS1UbyBmb3IgdGhlIGZpcnN0IGVtYWlsIChpZiBhbnkpPyAiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDMzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJlcnJvcjogdW5hYmxlIHRvIGV4dHJhY3QgYSB2YWxpZCBhZGRyZXNzIGZyb206ICVzXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtxXSBbZF0gW2VdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwNDUKK21zZ2lkICJXaGF0IHRvIGRvIHdpdGggdGhpcyBhZGRyZXNzPyAoW3FddWl0fFtkXXJvcHxbZV1kaXQpOiAiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzYyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkNBIHBhdGggXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ0NQorbXNnaWQgIiIKKyIgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbFxuIgorIiAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0XG4iCisiICAgIHNlbmQtZW1haWwgcHJvbXB0cyBiZWZvcmUgc2VuZGluZyB3aGVuZXZlciB0aGlzIG9jY3Vycy5cbiIKKyIgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybVxuIgorIiAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4iCisiXG4iCisiICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLFxuIgorIiAgICBydW4gJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSBbbl0gW2VdIFtxXSBbYV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ2MAorbXNnaWQgIlNlbmQgdGhpcyBlbWFpbD8gKFt5XWVzfFtuXW98W2VdZGl0fFtxXXVpdHxbYV1sbCk6ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjMKK21zZ2lkICJTZW5kIHRoaXMgZW1haWwgcmVwbHkgcmVxdWlyZWQiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDkxCittc2dpZCAiVGhlIHJlcXVpcmVkIFNNVFAgc2VydmVyIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1RBUlRUTFMhICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0MyBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU1RBUlRUTFMgZmFpbGVkISAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NTYKK21zZ2lkICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTTVRQIHByb3Blcmx5LiBDaGVjayBjb25maWcgYW5kIHVzZSAtLXNtdHAtZGVidWcuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gc2VuZCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEcnktU2VudCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZW50ICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc5Cittc2dpZCAiRHJ5LU9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJPSy4gTG9nIHNheXM6XG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTkxCittc2dpZCAiUmVzdWx0OiAiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTk0Cittc2dpZCAiUmVzdWx0OiBPS1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTYxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjU5IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY3OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobm9uLW1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3NTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKGJvZHkpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NjQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBDb3VsZCBub3QgZXhlY3V0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg3MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIEFkZGluZyAlczogJXMgZnJvbTogJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg3NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIGZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICclcyciCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTA1Cittc2dpZCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkxMworbXNnaWQgImludmFsaWQgdHJhbnNmZXIgZW5jb2RpbmciCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTU0IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjAwNiBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwMTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTU3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBjb250YWlucyBhIGxpbmUgbG9uZ2VyIHRoYW4gOTk4IGNoYXJhY3RlcnMiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nICVzIHdpdGggYmFja3VwIHN1ZmZpeCAnJXMnLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCAiW3l8Tl0iIGFzIGlzLgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTc4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBzZW5kICVzPyBbeXxOXTogIgorbXNnc3RyICIiCmRpZmYgLS1naXQgYS9wby9pcy5wbyBiL3BvL2lzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YjM0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9wby9pcy5wbwpAQCAtMCwwICsxLDEwMyBAQAorIyBJY2VsYW5kaWMgdHJhbnNsYXRpb25zIGZvciBHaXQuCisjIENvcHlyaWdodCAoQykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbiA8YXZhcmFiQGdtYWlsLmNvbT4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEdpdCBwYWNrYWdlLgorIyDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbiA8YXZhcmFiQGdtYWlsLmNvbT4sIDIwMTAuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHaXRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNi0wNi0xNyAxODo1NSswMDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wNi0xNyAxOToxNyswMDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBWYXNjbyBBbG1laWRhIDx2YXNjb21hbG1laWRhQHNhcG8ucHQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJMYW5ndWFnZTogaXNcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLUdlbmVyYXRvcjogUG9lZGl0IDEuOC41XG4iCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LmM6NQorbXNnaWQgIlNlZSAnZ2l0IGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLiIKK21zZ3N0ciAiU2rDoSAnZ2l0IGhlbHAgU0tJUFVOJyB0aWwgYcOwIHNqw6EgaGrDoWxwIGZ5cmlyIHRpbHRla25hIHNraXB1bi4iCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LmM6MTAKK21zZ2lkICJURVNUOiBBIEMgdGVzdCBzdHJpbmciCittc2dzdHIgIlRJTFJBVU46IEMgdGlscmF1bmFzdHJlbmd1ciIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCisjOiB0L3QwMjAwL3Rlc3QuYzoxMworIywgYy1mb3JtYXQKK21zZ2lkICJURVNUOiBBIEMgdGVzdCBzdHJpbmcgJXMiCittc2dzdHIgIlRJTFJBVU46IEMgdGlscmF1bmFzdHJlbmd1ciAlcyIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCisjOiB0L3QwMjAwL3Rlc3QuYzoxNgorIywgYy1mb3JtYXQKK21zZ2lkICJURVNUOiBIZWxsbyBXb3JsZCEiCittc2dzdHIgIlRJTFJBVU46IEhhbGzDsyBIZWltdXIhIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4KKyM6IHQvdDAyMDAvdGVzdC5jOjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRFU1Q6IE9sZCBFbmdsaXNoIFJ1bmVzIgorbXNnc3RyICJUSUxSQVVOOiDhmrvhm5Yg4Zqz4Zq54Zqr4ZqmIOGapuGaq+GbjyDhmrvhm5Yg4ZuS4Zqi4Zue4ZuWIOGaqeGaviDhmqbhmqvhm5cg4Zua4Zqq4Zq+4Zue4ZuWIOGavuGaqeGaseGapuGaueGbluGaquGaseGbnuGaouGblyDhmrnhm4HhmqYg4Zqm4ZqqIOGaueGbluGbpeGaqyIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCisjOiB0L3QwMjAwL3Rlc3QuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICJURVNUOiDigJhzaW5nbGXigJkgYW5kIOKAnGRvdWJsZeKAnSBxdW90ZXMiCittc2dzdHIgIlRJTFJBVU46IOKAmmVpbmZhbGRhcuKAmCBvZyDigJ50dsO2ZmFsZGFy4oCcIGfDpnNhbGFwcGlyIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4KKyM6IHQvdDAyMDAvdGVzdC5zaDo4Cittc2dpZCAiVEVTVDogQSBTaGVsbCB0ZXN0IHN0cmluZyIKK21zZ3N0ciAiVElMUkFVTjogU2tlbGphcnRpbHJhdW5hc3RyZW5ndXIiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LnNoOjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICJURVNUOiBBIFNoZWxsIHRlc3QgJHZhcmlhYmxlIgorbXNnc3RyICJUSUxSQVVOOiBTa2VsamFydGlscmF1bmFzdHJlbmd1ciBtZcOwIGJyZXl0dW5uaSAkdmFyaWFibGUiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LnBlcmw6OAorbXNnaWQgIlRFU1Q6IEEgUGVybCB0ZXN0IHN0cmluZyIKK21zZ3N0ciAiVElMUkFVTjogUGVybCB0aWxyYXVuYXN0cmVuZ3VyIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4KKyM6IHQvdDAyMDAvdGVzdC5wZXJsOjExCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlRFU1Q6IEEgUGVybCB0ZXN0IHZhcmlhYmxlICVzIgorbXNnc3RyICJUSUxSQVVOOiBQZXJsIHRpbHJhdW5hc3RyZW5ndXIgbWXDsCBicmV5dHVubmkgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkVuZHVyZ2Vyw7BpIEdpdCBsaW5kIMOtICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJFbmR1cmdlcsOwaSBHaXQgbGluZCDDrSAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJCasOzIHRpbCB0w7NtYSBzYW1laWdpbmxlZ2EgR2l0IGxpbmQgw60gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJCasOzIHRpbCB0w7NtYSBHaXQgbGluZCDDrSAlcyVzXG4iCisKKyN+IG1zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIgorI34gbXNnc3RyICJFbmR1cmdlcsOwaSIKKworI34gbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorI34gbXNnc3RyICJCasOzIHRpbCB0w7NtYSIKKworI34gbXNnaWQgIiBzaGFyZWQiCisjfiBtc2dzdHIgIiBzYW1laWdpbmxlZ2EiCmRpZmYgLS1naXQgYS9wby9pdC5wbyBiL3BvL2l0LnBvCmluZGV4IDFiZDhiOGUuLmU5ZjU5NmIgMTAwNjQ0Ci0tLSBhL3BvL2l0LnBvCisrKyBiL3BvL2l0LnBvCkBAIC0xLDI1OTEgKzEsMjU1NjAgQEAKLSMgVHJhbnNsYXRpb24gb2YgZ2l0LWd1aSB0byBJdGFsaWFuCi0jIENvcHlyaWdodCAoQykgMjAwNyBTaGF3biBQZWFyY2UKLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdC1ndWkgcGFja2FnZS4KLSMgUGFvbG8gQ2lhcnJvY2NoaSA8cGFvbG8uY2lhcnJvY2NoaUBnbWFpbC5jb20+LCAyMDA3Ci0jIE1pY2hlbGUgQmFsbGFiaW8gPGJhcnJhX2N1ZGFAa2F0YW1haWwuY29tPiwgMjAwNy4KKyMgSXRhbGlhbiB0cmFuc2xhdGlvbnMgZm9yIEdpdC4KKyMgQ29weXJpZ2h0IChDKSAyMDEyIE1hcmNvIFBhb2xvbmUgPG1hcmNvcGFvbG9uZUBnbWFpbC5jb20+CisjIENvcHlyaWdodCDCqSAyMDE4LTIwMTkgQWxlc3NhbmRybyBNZW50aSA8YWxlc3NhbmRyby5tZW50aUBhbGVzc2FuZHJvbWVudGkuaXQ+CisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KICMKLSMKKyMgVGhhbmtzIHRvIHRoZSBmb3JtZXIgdHJhbnNsYXRvcnMsIE1hcmNvIFBhb2xvbmUgPG1hcmNvcGFvbG9uZSBBVCBnbWFpbC5jb20+CisjIGFuZCBTdGVmYW5vIExhdHRhcmluaSA8c3RlZmFuby5sYXR0YXJpbmkgQVQgZ21haWwuY29tPiwgZm9yIHRoZWlyCisjIGNvbnRyaWJ1dGlvbnMuCisjIEFsZXNzYW5kcm8gTWVudGkgPGFsZXNzYW5kcm8ubWVudGlAYWxlc3NhbmRyb21lbnRpLml0PiwgMjAxOSwgMjAyMC4KIG1zZ2lkICIiCiBtc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWlcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDEtMjYgMTU6NDctMDgwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDEtMjggMTA6MDQrMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogTWljaGVsZSBCYWxsYWJpbyA8YmFycmFfY3VkYUBrYXRhbWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogSXRhbGlhbiA8dHBAbGlzdHMubGludXguaXQ+XG4iCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHaXRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAyMC0wMy0xMSAxNToyNiswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAyMC0wMy0xMiAwNzo1MiswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBbGVzc2FuZHJvIE1lbnRpIDxhbGVzc2FuZHJvLm1lbnRpQGFsZXNzYW5kcm9tZW50aS5pdD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBJdGFsaWFuIDw+XG4iCisiTGFuZ3VhZ2U6IGl0XG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisiWC1HZW5lcmF0b3I6IExva2FsaXplIDE5LjEyLjNcbiIKIAotIzogZ2l0LWd1aS5zaDo0MSBnaXQtZ3VpLnNoOjc5MyBnaXQtZ3VpLnNoOjgwNyBnaXQtZ3VpLnNoOjgyMCBnaXQtZ3VpLnNoOjkwMwotIzogZ2l0LWd1aS5zaDo5MjIKLW1zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKLW1zZ3N0ciAiZ2l0LWd1aTogZXJyb3JlIGdyYXZlIgorIzogYWRkLWludGVyYWN0aXZlLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpPyIKK21zZ3N0ciAiRWggKCVzKT8iCiAKLSM6IGdpdC1ndWkuc2g6NzQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCi1tc2dzdHIgIkNhcmF0dGVyaSBub24gdmFsaWRpIHNwZWNpZmljYXRpIGluICVzOiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjUyMSBhZGQtaW50ZXJhY3RpdmUuYzo4MjIgc2VxdWVuY2VyLmM6MzEyNAorIzogc2VxdWVuY2VyLmM6MzU2MiBidWlsdGluL3JlYmFzZS5jOjg3NSBidWlsdGluL3JlYmFzZS5jOjE2ODcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA4NiBidWlsdGluL3JlYmFzZS5jOjIxMzAKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBsJ2luZGljZSIKIAotIzogZ2l0LWd1aS5zaDo3NzkKLW1zZ2lkICJNYWluIEZvbnQiCi1tc2dzdHIgIkNhcmF0dGVyaSBwcmluY2lwYWxpIgorIzogYWRkLWludGVyYWN0aXZlLmM6NTc2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjY5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI5NAorbXNnaWQgImJpbmFyeSIKK21zZ3N0ciAiYmluYXJpbyIKIAotIzogZ2l0LWd1aS5zaDo3ODAKLW1zZ2lkICJEaWZmL0NvbnNvbGUgRm9udCIKLW1zZ3N0ciAiQ2FyYXR0ZXJpIHBlciBjb25mcm9udGkgZSB0ZXJtaW5hbGUiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2MzQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNzgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzMyCittc2dpZCAibm90aGluZyIKK21zZ3N0ciAibm9uIGZhcmUgbnVsbGEiCiAKLSM6IGdpdC1ndWkuc2g6Nzk0Ci1tc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgotbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIGdpdCBuZWwgUEFUSCIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYzNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMxNAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMjkKK21zZ2lkICJ1bmNoYW5nZWQiCittc2dzdHIgIm5vbiBtb2RpZmljYXRvIgogCi0jOiBnaXQtZ3VpLnNoOjgyMQotbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgotbXNnc3RyICJJbXBvc3NpYmlsZSBkZXRlcm1pbmFyZSBsYSB2ZXJzaW9uZSBkaSBHaXQ6IgorIzogYWRkLWludGVyYWN0aXZlLmM6NjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjQzCittc2dpZCAiVXBkYXRlIgorbXNnc3RyICJBZ2dpb3JuYSIKIAotIzogZ2l0LWd1aS5zaDo4MzkKLSMsIHRjbC1mb3JtYXQKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY4OSBhZGQtaW50ZXJhY3RpdmUuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YWdlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2l1bmdlcmUgJyVzJyBhbGwnYXJlYSBkaSBzdGFnaW5nIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTUgYWRkLWludGVyYWN0aXZlLmM6ODg0IHNlcXVlbmNlci5jOjMzMTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODk5Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBsJ2luZGljZSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6Njk4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJ1cGRhdGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidXBkYXRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICJhZ2dpb3JuYXRvICVkIHBlcmNvcnNvXG4iCittc2dzdHJbMV0gImFnZ2lvcm5hdGkgJWQgcGVyY29yc2lcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzE2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njc4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJub3RlOiAlcyBpcyB1bnRyYWNrZWQgbm93LlxuIgorbXNnc3RyICJub3RhOiAlcyBvcmEgbm9uIMOoIHRyYWNjaWF0by5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzIxIGFwcGx5LmM6NDExMCBidWlsdGluL2NoZWNrb3V0LmM6MjgxCisjOiBidWlsdGluL3Jlc2V0LmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIm1ha2VfY2FjaGVfZW50cnkgbm9uIHJpdXNjaXRvIHBlciBpbCBwZXJjb3JzbyAnJXMnIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NTUKK21zZ2lkICJSZXZlcnQiCittc2dzdHIgIkVzZWd1aSBpbCByZXZlcnQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjc2NworbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBIRUFEXnt0cmVlfSIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYW5hbGl6emFyZSBIRUFEXnt0cmVlfSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjMxCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJyZXZlcnRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInJldmVydGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gInJpcHJpc3RpbmF0byAlZCBwZXJjb3Jzb1xuIgorbXNnc3RyWzFdICJyaXByaXN0aW5hdGkgJWQgcGVyY29yc2lcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODU2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVudHJhY2tlZCBmaWxlcy5cbiIKK21zZ3N0ciAiTmVzc3VuIGZpbGUgbm9uIHRyYWNjaWF0by5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODYwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njg5Cittc2dpZCAiQWRkIHVudHJhY2tlZCIKK21zZ3N0ciAiQWdnaXVuZ2kgZmlsZSBub24gdHJhY2NpYXRpIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgImFkZGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAiYWRkZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiYWdnaXVudG8gJWQgcGVyY29yc29cbiIKK21zZ3N0clsxXSAiYWdnaXVudGkgJWQgcGVyY29yc2lcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlcyIKK21zZ3N0ciAiaWdub3JvIGNpw7IgY2hlIG5vbiDDqCBzdGF0byBzb3R0b3Bvc3RvIGEgbWVyZ2U6ICVzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MjkgYWRkLXBhdGNoLmM6MTY3NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAiU29ubyBzdGF0aSBtb2RpZmljYXRpIHNvbG8gZmlsZSBiaW5hcmkuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkzMSBhZGQtcGF0Y2guYzoxNjczIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjaGFuZ2VzLlxuIgorbXNnc3RyICJOZXNzdW5hIG1vZGlmaWNhLlxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzc2Cittc2dpZCAiUGF0Y2ggdXBkYXRlIgorbXNnc3RyICJBZ2dpb3JuYW1lbnRvIHBhdGNoIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5NzQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzU0Cittc2dpZCAiUmV2aWV3IGRpZmYiCittc2dzdHIgIlJpdmVkaSBkaWZmIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDAyCittc2dpZCAic2hvdyBwYXRocyB3aXRoIGNoYW5nZXMiCittc2dzdHIgInZpc3VhbGl6emEgaSBwZXJjb3JzaSBtb2RpZmljYXRpIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA0Cittc2dpZCAiYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICIiCisiYWdnaXVuZ2kgbG8gc3RhdG8gZGFsbCdhbGJlcm8gZGkgbGF2b3JvIGFsbCdpbnNpZW1lIGRlbGxlIG1vZGlmaWNoZSAiCisibmVsbCdhcmVhIGRpIHN0YWdpbmciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDYKK21zZ2lkICJyZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvbiIKK21zZ3N0ciAiIgorInJpcHJpc3RpbmEgbCdpbnNpZW1lIGRlbGxlIG1vZGlmaWNoZSBuZWxsJ2FyZWEgZGkgc3RhZ2luZyBhbGxhIHZlcnNpb25lIEhFQUQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDgKK21zZ2lkICJwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHkiCittc2dzdHIgIiIKKyJzZWxlemlvbmEgZ2xpIGh1bmsgaW4gbW9kYWxpdMOgIGludGVyYXR0aXZhIGVkIGVzZWd1aSBsJ2FnZ2lvcm5hbWVudG8gaW4gbW9kbyAiCisic2VsZXR0aXZvIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEwCittc2dpZCAidmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgInZpc3VhbGl6emEgaWwgZGlmZiBmcmEgSEVBRCBlIGwnaW5kaWNlIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEyCittc2dpZCAiYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICIiCisiYWdnaXVuZ2kgaSBjb250ZW51dGkgZGVpIGZpbGUgbm9uIHRyYWNjaWF0aSBhbGwnaW5zaWVtZSBkZWxsZSBtb2RpZmljaGUgIgorIm5lbGwnYXJlYSBkaSBzdGFnaW5nIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDIwIGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjkKK21zZ2lkICJQcm9tcHQgaGVscDoiCittc2dzdHIgIkd1aWRhIHByb21wdDoiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMjIKK21zZ2lkICJzZWxlY3QgYSBzaW5nbGUgaXRlbSIKK21zZ3N0ciAic2VsZXppb25hIHVuIHNpbmdvbG8gZWxlbWVudG8iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMjQKK21zZ2lkICJzZWxlY3QgYSByYW5nZSBvZiBpdGVtcyIKK21zZ3N0ciAic2VsZXppb25hIHVuIGludGVydmFsbG8gZGkgZWxlbWVudGkiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMjYKK21zZ2lkICJzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzIgorbXNnc3RyICJzZWxlemlvbmEgcGnDuSBpbnRlcnZhbGxpIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI4IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNzMKK21zZ2lkICJzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4IgorbXNnc3RyICJzZWxlemlvbmEgdW4gZWxlbWVudG8gYmFzYW5kb3RpIHN1IHVuIHByZWZpc3NvIHVuaXZvY28iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMzAKK21zZ2lkICJ1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXMiCittc2dzdHIgImRlc2VsZXppb25hIGdsaSBlbGVtZW50aSBzcGVjaWZpY2F0aSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAzMgorbXNnaWQgImNob29zZSBhbGwgaXRlbXMiCittc2dzdHIgInNlbGV6aW9uYSB0dXR0aSBnbGkgZWxlbWVudGkiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMzQKK21zZ2lkICIoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIih2dW90bykgdGVybWluYSBsYSBzZWxlemlvbmUiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNzEKK21zZ2lkICJzZWxlY3QgYSBudW1iZXJlZCBpdGVtIgorbXNnc3RyICJzZWxlemlvbmEgdW4gZWxlbWVudG8gbnVtZXJhdG8iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNzUKK21zZ2lkICIoZW1wdHkpIHNlbGVjdCBub3RoaW5nIgorbXNnc3RyICIodnVvdG8pIG5vbiBzZWxlemlvbmFyZSBudWxsYSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA4MyBidWlsdGluL2NsZWFuLmM6ODIyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg1MQorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiBDb21hbmRpICoqKiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA4NCBidWlsdGluL2NsZWFuLmM6ODIzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg0OAorbXNnaWQgIldoYXQgbm93IgorbXNnc3RyICJDb3NhIGZhY2NpbyBvcmEiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMzYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJzdGFnZWQiCittc2dzdHIgIm5lbGwnYXJlYSBkaSBzdGFnaW5nIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAidW5zdGFnZWQiCittc2dzdHIgInJpbW9zc28gZGFsbCdhcmVhIGRpIHN0YWdpbmciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMzYgYXBwbHkuYzo0OTY3IGFwcGx5LmM6NDk3MCBidWlsdGluL2FtLmM6MjI1MQorIzogYnVpbHRpbi9hbS5jOjIyNTQgYnVpbHRpbi9jbG9uZS5jOjEyMyBidWlsdGluL2ZldGNoLmM6MTQ0CisjOiBidWlsdGluL21lcmdlLmM6Mjc0IGJ1aWx0aW4vcHVsbC5jOjE4OSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDA5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDUKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTQ4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAicGF0aCIKK21zZ3N0ciAicGVyY29yc28iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExNDMKK21zZ2lkICJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYWdnaW9ybmFyZSBsJ2luZGljZSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTE1NyBidWlsdGluL2NsZWFuLmM6Nzg3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJCeWUuXG4iCittc2dzdHIgIkNpYW8uXG4iCisKKyM6IGFkZC1wYXRjaC5jOjMzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIk1vZGlmaWNhIG1vZG8gc3RhZ2UgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjM0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkVsaW1pbmF6aW9uZSBzdGFnZSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMwCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkVzZWd1aXJlIGxvIHN0YWdlIGRpIHF1ZXN0J2h1bmsgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjM3CiBtc2dpZCAiIgotIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgotIlxuIgotIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCi0iXG4iCi0iJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgotIlxuIgotIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisic3RhZ2luZy4iCiBtc2dzdHIgIiIKLSJMYSB2ZXJzaW9uZSBkaSBHaXQgbm9uIHB1w7IgZXNzZXJlIGRldGVybWluYXRhLlxuIgotIlxuIgotIiVzIHJpcG9ydGEgY2hlIGxhIHZlcnNpb25lIMOoICclcycuXG4iCi0iXG4iCi0iJXMgcmljaGllZGUgYWxtZW5vIEdpdCAxLjUuMCBvIHN1cGVyaW9yZS5cbiIKLSJcbiIKLSJBc3N1bWVyZSBjaGUgJyVzJyBzaWEgYWxsYSB2ZXJzaW9uZSAxLjUuMD9cbiIKKyJTZSBsYSBwYXRjaCB2aWVuZSBhcHBsaWNhdGEgc2VuemEgcHJvYmxlbWksIGwnaHVuayBtb2RpZmljYXRvIHNhcsOgICIKKyJjb250cmFzc2VnbmF0byBpbW1lZGlhdGFtZW50ZSBwZXIgbCdhZ2dpdW50YSBhbGwnYXJlYSBkaSBzdGFnaW5nLiIKIAotIzogZ2l0LWd1aS5zaDoxMTI4Ci1tc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgotbXNnc3RyICJOb24gdHJvdm8gbGEgZGlyZWN0b3J5IGRpIGdpdDogIgotCi0jOiBnaXQtZ3VpLnNoOjExNDYKLW1zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgotbXNnc3RyICJJbXBvc3NpYmlsZSBzcG9zdGFyc2kgc3VsbGEgZGlyZWN0b3J5IHByaW5jaXBhbGUgZGVsIHByb2dldHRvOiIKLQotIzogZ2l0LWd1aS5zaDoxMTU0Ci1tc2dpZCAiQ2Fubm90IHVzZSBiYXJlIHJlcG9zaXRvcnk6IgotbXNnc3RyICJJbXBvc3NpYmlsZSB1c2FyZSB1biBhcmNoaXZpbyBzZW56YSBkaXJlY3RvcnkgZGkgbGF2b3JvOiIKLQotIzogZ2l0LWd1aS5zaDoxMTYyCi1tc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCi1tc2dzdHIgIk5lc3N1bmEgZGlyZWN0b3J5IGRpIGxhdm9ybyIKLQotIzogZ2l0LWd1aS5zaDoxMzM0IGxpYi9jaGVja291dF9vcC50Y2w6MzA2Ci1tc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKLW1zZ3N0ciAiQ29udHJvbGxvIGRlbGxvIHN0YXRvIGRlaSBmaWxlIGluIGNvcnNvLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjEzOTAKLW1zZ2lkICJTY2FubmluZyBmb3IgbW9kaWZpZWQgZmlsZXMgLi4uIgotbXNnc3RyICJSaWNlcmNhIGRpIGZpbGUgbW9kaWZpY2F0aSBpbiBjb3Jzby4uLiIKLQotIzogZ2l0LWd1aS5zaDoxNDU0Ci1tc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKLW1zZ3N0ciAiQXZ2aW8gcHJlcGFyZS1jb21taXQtbXNnIGhvb2suLi4iCi0KLSM6IGdpdC1ndWkuc2g6MTQ3MQotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCi1tc2dzdHIgIlJldmlzaW9uZSByaWZpdXRhdGEgZGFsIHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKLQotIzogZ2l0LWd1aS5zaDoxNjI5IGxpYi9icm93c2VyLnRjbDoyNDYKLW1zZ2lkICJSZWFkeS4iCi1tc2dzdHIgIlByb250by4iCi0KLSM6IGdpdC1ndWkuc2g6MTc4NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRpc3BsYXlpbmcgb25seSAlcyBvZiAlcyBmaWxlcy4iCi1tc2dzdHIgIlNhcmFubm8gbW9zdHJhdGkgc29sbyAlcyBmaWxlIHN1ICVzLiIKLQotIzogZ2l0LWd1aS5zaDoxOTEzCi1tc2dpZCAiVW5tb2RpZmllZCIKLW1zZ3N0ciAiTm9uIG1vZGlmaWNhdG8iCi0KLSM6IGdpdC1ndWkuc2g6MTkxNQotbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICJNb2RpZmljYXRvLCBub24gcHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjE5MTYgZ2l0LWd1aS5zaDoxOTI0Ci1tc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIlByZXBhcmF0byBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKLQotIzogZ2l0LWd1aS5zaDoxOTE3IGdpdC1ndWkuc2g6MTkyNQotbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICJQYXJ0aSBwcmVwYXJhdGUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MTkxOCBnaXQtZ3VpLnNoOjE5MjYKLW1zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyIKLW1zZ3N0ciAiUHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lLCBtYW5jYW50ZSIKLQotIzogZ2l0LWd1aS5zaDoxOTIwCi1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIlRpcG8gZGkgZmlsZSBtb2RpZmljYXRvLCBub24gcHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjE5MjEKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgotbXNnc3RyICJUaXBvIGRpIGZpbGUgbW9kaWZpY2F0bywgcHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjE5MjMKLW1zZ2lkICJVbnRyYWNrZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIk5vbiB0cmFjY2lhdG8sIG5vbiBwcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MTkyOAotbXNnaWQgIk1pc3NpbmciCi1tc2dzdHIgIk1hbmNhbnRlIgotCi0jOiBnaXQtZ3VpLnNoOjE5MjkKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCi1tc2dzdHIgIlByZXBhcmF0byBwZXIgbGEgcmltb3ppb25lIgotCi0jOiBnaXQtZ3VpLnNoOjE5MzAKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCi1tc2dzdHIgIlByZXBhcmF0byBhbGxhIHJpbW96aW9uZSwgYW5jb3JhIHByZXNlbnRlIgotCi0jOiBnaXQtZ3VpLnNoOjE5MzIgZ2l0LWd1aS5zaDoxOTMzIGdpdC1ndWkuc2g6MTkzNCBnaXQtZ3VpLnNoOjE5MzUKLSM6IGdpdC1ndWkuc2g6MTkzNiBnaXQtZ3VpLnNoOjE5MzcKLW1zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgotbXNnc3RyICJSaWNoaWVkZSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIgotCi0jOiBnaXQtZ3VpLnNoOjE5NzIKLW1zZ2lkICJTdGFydGluZyBnaXRrLi4uIHBsZWFzZSB3YWl0Li4uIgotbXNnc3RyICJBdnZpbyBkaSBnaXRrLi4uIGF0dGVuZGVyZS4uLiIKLQotIzogZ2l0LWd1aS5zaDoxOTg0Ci1tc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCi1tc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgZ2l0ayBuZWwgUEFUSCIKLQotIzogZ2l0LWd1aS5zaDoyMDQzCi1tc2dpZCAiQ291bGRuJ3QgZmluZCBnaXQgZ3VpIGluIFBBVEgiCi1tc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgZ2l0IGd1aSBuZWwgUEFUSCIKLQotIzogZ2l0LWd1aS5zaDoyNDU1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKLW1zZ2lkICJSZXBvc2l0b3J5IgotbXNnc3RyICJBcmNoaXZpbyIKLQotIzogZ2l0LWd1aS5zaDoyNDU2Ci1tc2dpZCAiRWRpdCIKLW1zZ3N0ciAiTW9kaWZpY2EiCi0KLSM6IGdpdC1ndWkuc2g6MjQ1OCBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCi1tc2dpZCAiQnJhbmNoIgotbXNnc3RyICJSYW1vIgotCi0jOiBnaXQtZ3VpLnNoOjI0NjEgbGliL2Nob29zZV9yZXYudGNsOjU0OAotbXNnaWQgIkNvbW1pdEBAbm91biIKLW1zZ3N0ciAiUmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjI0NjQgbGliL21lcmdlLnRjbDoxMjEgbGliL21lcmdlLnRjbDoxNTAgbGliL21lcmdlLnRjbDoxNjgKLW1zZ2lkICJNZXJnZSIKLW1zZ3N0ciAiRnVzaW9uZSAoTWVyZ2UpIgotCi0jOiBnaXQtZ3VpLnNoOjI0NjUgbGliL2Nob29zZV9yZXYudGNsOjU1NwotbXNnaWQgIlJlbW90ZSIKLW1zZ3N0ciAiUmVtb3RvIgotCi0jOiBnaXQtZ3VpLnNoOjI0NjgKLW1zZ2lkICJUb29scyIKLW1zZ3N0ciAiQWNjZXNzb3JpIgotCi0jOiBnaXQtZ3VpLnNoOjI0NzcKLW1zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKLW1zZ3N0ciAiRXNwbG9yYSBjb3BpYSBkaSBsYXZvcm8iCi0KLSM6IGdpdC1ndWkuc2g6MjQ4MwotbXNnaWQgIkJyb3dzZSBDdXJyZW50IEJyYW5jaCdzIEZpbGVzIgotbXNnc3RyICJFc3Bsb3JhIGkgZmlsZSBkZWwgcmFtbyBhdHR1YWxlIgotCi0jOiBnaXQtZ3VpLnNoOjI0ODcKLW1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzLi4uIgotbXNnc3RyICJFc3Bsb3JhIGkgZmlsZSBkZWwgcmFtby4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNDkyCi1tc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKLW1zZ3N0ciAiVmlzdWFsaXp6YSBsYSBjcm9ub2xvZ2lhIGRlbCByYW1vIGF0dHVhbGUiCi0KLSM6IGdpdC1ndWkuc2g6MjQ5NgotbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCi1tc2dzdHIgIlZpc3VhbGl6emEgbGEgY3Jvbm9sb2dpYSBkaSB0dXR0aSBpIHJhbWkiCi0KLSM6IGdpdC1ndWkuc2g6MjUwMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgotbXNnc3RyICJFc3Bsb3JhIGkgZmlsZSBkaSAlcyIKLQotIzogZ2l0LWd1aS5zaDoyNTA1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKLW1zZ3N0ciAiVmlzdWFsaXp6YSBsYSBjcm9ub2xvZ2lhIGRpICVzIgotCi0jOiBnaXQtZ3VpLnNoOjI1MTAgbGliL2RhdGFiYXNlLnRjbDoyNyBsaWIvZGF0YWJhc2UudGNsOjY3Ci1tc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKLW1zZ3N0ciAiU3RhdGlzdGljaGUgZGVsbCdhcmNoaXZpbyIKLQotIzogZ2l0LWd1aS5zaDoyNTEzIGxpYi9kYXRhYmFzZS50Y2w6MzQKLW1zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKLW1zZ3N0ciAiQ29tcHJpbWkgbCdhcmNoaXZpbyIKLQotIzogZ2l0LWd1aS5zaDoyNTE2Ci1tc2dpZCAiVmVyaWZ5IERhdGFiYXNlIgotbXNnc3RyICJWZXJpZmljYSBsJ2FyY2hpdmlvIgotCi0jOiBnaXQtZ3VpLnNoOjI1MjMgZ2l0LWd1aS5zaDoyNTI3IGdpdC1ndWkuc2g6MjUzMSBsaWIvc2hvcnRjdXQudGNsOjgKLSM6IGxpYi9zaG9ydGN1dC50Y2w6NDAgbGliL3Nob3J0Y3V0LnRjbDo3MgotbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCi1tc2dzdHIgIkNyZWEgaWNvbmEgZGVza3RvcCIKLQotIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCi1tc2dpZCAiUXVpdCIKLW1zZ3N0ciAiRXNjaSIKLQotIzogZ2l0LWd1aS5zaDoyNTQ3Ci1tc2dpZCAiVW5kbyIKLW1zZ3N0ciAiQW5udWxsYSIKLQotIzogZ2l0LWd1aS5zaDoyNTUwCi1tc2dpZCAiUmVkbyIKLW1zZ3N0ciAiUmlwZXRpIgotCi0jOiBnaXQtZ3VpLnNoOjI1NTQgZ2l0LWd1aS5zaDozMTA5Ci1tc2dpZCAiQ3V0IgotbXNnc3RyICJUYWdsaWEiCi0KLSM6IGdpdC1ndWkuc2g6MjU1NyBnaXQtZ3VpLnNoOjMxMTIgZ2l0LWd1aS5zaDozMTg2IGdpdC1ndWkuc2g6MzI1OQotIzogbGliL2NvbnNvbGUudGNsOjY5Ci1tc2dpZCAiQ29weSIKLW1zZ3N0ciAiQ29waWEiCi0KLSM6IGdpdC1ndWkuc2g6MjU2MCBnaXQtZ3VpLnNoOjMxMTUKLW1zZ2lkICJQYXN0ZSIKLW1zZ3N0ciAiSW5jb2xsYSIKLQotIzogZ2l0LWd1aS5zaDoyNTYzIGdpdC1ndWkuc2g6MzExOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjYKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzgKLW1zZ2lkICJEZWxldGUiCi1tc2dzdHIgIkVsaW1pbmEiCi0KLSM6IGdpdC1ndWkuc2g6MjU2NyBnaXQtZ3VpLnNoOjMxMjIgZ2l0LWd1aS5zaDozMjYzIGxpYi9jb25zb2xlLnRjbDo3MQotbXNnaWQgIlNlbGVjdCBBbGwiCi1tc2dzdHIgIlNlbGV6aW9uYSB0dXR0byIKLQotIzogZ2l0LWd1aS5zaDoyNTc2Ci1tc2dpZCAiQ3JlYXRlLi4uIgotbXNnc3RyICJDcmVhLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1ODIKLW1zZ2lkICJDaGVja291dC4uLiIKLW1zZ3N0ciAiQXR0aXZhLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1ODgKLW1zZ2lkICJSZW5hbWUuLi4iCi1tc2dzdHIgIlJpbm9taW5hIgotCi0jOiBnaXQtZ3VpLnNoOjI1OTMKLW1zZ2lkICJEZWxldGUuLi4iCi1tc2dzdHIgIkVsaW1pbmEuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjU5OAotbXNnaWQgIlJlc2V0Li4uIgotbXNnc3RyICJSaXByaXN0aW5hLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI2MDgKLW1zZ2lkICJEb25lIgotbXNnc3RyICJGYXR0byIKLQotIzogZ2l0LWd1aS5zaDoyNjEwCi1tc2dpZCAiQ29tbWl0QEB2ZXJiIgotbXNnc3RyICJOdW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MjYxOSBnaXQtZ3VpLnNoOjMwNTAKLW1zZ2lkICJOZXcgQ29tbWl0IgotbXNnc3RyICJOdW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MjYyNyBnaXQtZ3VpLnNoOjMwNTcKLW1zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKLW1zZ3N0ciAiQ29ycmVnZ2kgbCd1bHRpbWEgcmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjI2MzcgZ2l0LWd1aS5zaDozMDExIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6OTkKLW1zZ2lkICJSZXNjYW4iCi1tc2dzdHIgIkFuYWxpenphIG51b3ZhbWVudGUiCi0KLSM6IGdpdC1ndWkuc2g6MjY0MwotbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKLW1zZ3N0ciAiUHJlcGFyYSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKLQotIzogZ2l0LWd1aS5zaDoyNjQ5Ci1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCi1tc2dzdHIgIlByZXBhcmEgaSBmaWxlIG1vZGlmaWNhdGkgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MjY1NQotbXNnaWQgIlVuc3RhZ2UgRnJvbSBDb21taXQiCi1tc2dzdHIgIkFubnVsbGEgcHJlcGFyYXppb25lIgotCi0jOiBnaXQtZ3VpLnNoOjI2NjEgbGliL2luZGV4LnRjbDo0MTIKLW1zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKLW1zZ3N0ciAiQW5udWxsYSBtb2RpZmljaGUiCi0KLSM6IGdpdC1ndWkuc2g6MjY2OSBnaXQtZ3VpLnNoOjMzMTAgZ2l0LWd1aS5zaDozMzQxCi1tc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCi1tc2dzdHIgIk1vc3RyYSBtZW5vIGNvbnRlc3RvIgotCi0jOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQotbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgotbXNnc3RyICJNb3N0cmEgcGnDuSBjb250ZXN0byIKLQotIzogZ2l0LWd1aS5zaDoyNjgwIGdpdC1ndWkuc2g6MzAyNCBnaXQtZ3VpLnNoOjMxMzMKLW1zZ2lkICJTaWduIE9mZiIKLW1zZ3N0ciAiU2lnbiBPZmYiCi0KLSM6IGdpdC1ndWkuc2g6MjY5NgotbXNnaWQgIkxvY2FsIE1lcmdlLi4uIgotbXNnc3RyICJGdXNpb25lIGxvY2FsZS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzAxCi1tc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCi1tc2dzdHIgIkludGVycm9tcGkgZnVzaW9uZS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzEzIGdpdC1ndWkuc2g6Mjc0MQotbXNnaWQgIkFkZC4uLiIKLW1zZ3N0ciAiQWdnaXVuZ2kuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjcxNwotbXNnaWQgIlB1c2guLi4iCi1tc2dzdHIgIlByb3BhZ2EuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjcyMQotbXNnaWQgIkRlbGV0ZSBCcmFuY2guLi4iCi1tc2dzdHIgIkVsaW1pbmEgcmFtby4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzMxIGdpdC1ndWkuc2g6MzI5MgotbXNnaWQgIk9wdGlvbnMuLi4iCi1tc2dzdHIgIk9wemlvbmkuLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjc0MgotbXNnaWQgIlJlbW92ZS4uLiIKLW1zZ3N0ciAiUmltdW92aS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzUxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKLW1zZ2lkICJIZWxwIgotbXNnc3RyICJBaXV0byIKLQotIzogZ2l0LWd1aS5zaDoyNzU1IGdpdC1ndWkuc2g6Mjc1OSBsaWIvYWJvdXQudGNsOjE0Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBYm91dCAlcyIKLW1zZ3N0ciAiSW5mb3JtYXppb25pIHN1ICVzIgotCi0jOiBnaXQtZ3VpLnNoOjI3ODMKLW1zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKLW1zZ3N0ciAiRG9jdW1lbnRhemlvbmUgc3VsIHdlYiIKLQotIzogZ2l0LWd1aS5zaDoyNzg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NgotbXNnaWQgIlNob3cgU1NIIEtleSIKLW1zZ3N0ciAiTW9zdHJhIGNoYXZlIFNTSCIKLQotIzogZ2l0LWd1aS5zaDoyODkzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiZmF0YWw6IGNhbm5vdCBzdGF0IHBhdGggJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCi1tc2dzdHIgIiIKLSJlcnJvcmUgZ3JhdmU6IGltcG9zc2liaWxlIGVmZmV0dHVhcmUgbG8gc3RhdCBkZWwgcGF0aCAlczogZmlsZSBvIGRpcmVjdG9yeSAiCi0ibm9uIHRyb3ZhdGEiCi0KLSM6IGdpdC1ndWkuc2g6MjkyNgotbXNnaWQgIkN1cnJlbnQgQnJhbmNoOiIKLW1zZ3N0ciAiUmFtbyBhdHR1YWxlOiIKLQotIzogZ2l0LWd1aS5zaDoyOTQ3Ci1tc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKLW1zZ3N0ciAiTW9kaWZpY2hlIHByZXBhcmF0ZSAoc2FyYW5ubyBuZWxsYSBudW92YSByZXZpc2lvbmUpIgotCi0jOiBnaXQtZ3VpLnNoOjI5NjcKLW1zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIgotbXNnc3RyICJNb2RpZmljaGUgbm9uIHByZXBhcmF0ZSIKLQotIzogZ2l0LWd1aS5zaDozMDE3Ci1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKLW1zZ3N0ciAiUHJlcGFyYSBtb2RpZmljYXRpIgotCi0jOiBnaXQtZ3VpLnNoOjMwMzYgbGliL3RyYW5zcG9ydC50Y2w6MTA0IGxpYi90cmFuc3BvcnQudGNsOjE5MwotbXNnaWQgIlB1c2giCi1tc2dzdHIgIlByb3BhZ2EgKFB1c2gpIgotCi0jOiBnaXQtZ3VpLnNoOjMwNzEKLW1zZ2lkICJJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiTWVzc2FnZ2lvIGRpIHJldmlzaW9uZSBpbml6aWFsZToiCi0KLSM6IGdpdC1ndWkuc2g6MzA3MgotbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdnaW8gZGkgcmV2aXNpb25lIGNvcnJldHRvOiIKLQotIzogZ2l0LWd1aS5zaDozMDczCi1tc2dpZCAiQW1lbmRlZCBJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiTWVzc2FnZ2lvIGluaXppYWxlIGRpIHJldmlzaW9uZSBjb3JyZXR0bzoiCi0KLSM6IGdpdC1ndWkuc2g6MzA3NAotbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdnaW8gZGkgZnVzaW9uZSBjb3JyZXR0bzoiCi0KLSM6IGdpdC1ndWkuc2g6MzA3NQotbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiTWVzc2FnZ2lvIGRpIGZ1c2lvbmU6IgotCi0jOiBnaXQtZ3VpLnNoOjMwNzYKLW1zZ2lkICJDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIk1lc3NhZ2dpbyBkaSByZXZpc2lvbmU6IgotCi0jOiBnaXQtZ3VpLnNoOjMxMjUgZ2l0LWd1aS5zaDozMjY3IGxpYi9jb25zb2xlLnRjbDo3MwotbXNnaWQgIkNvcHkgQWxsIgotbXNnc3RyICJDb3BpYSB0dXR0byIKLQotIzogZ2l0LWd1aS5zaDozMTQ5IGxpYi9ibGFtZS50Y2w6MTA0Ci1tc2dpZCAiRmlsZToiCi1tc2dzdHIgIkZpbGU6IgotCi0jOiBnaXQtZ3VpLnNoOjMyNTUKLW1zZ2lkICJSZWZyZXNoIgotbXNnc3RyICJSaW5mcmVzY2EiCi0KLSM6IGdpdC1ndWkuc2g6MzI3NgotbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKLW1zZ3N0ciAiRGltaW51aXNjaSBkaW1lbnNpb25lIGNhcmF0dGVyaSIKLQotIzogZ2l0LWd1aS5zaDozMjgwCi1tc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICJBdW1lbnRhIGRpbWVuc2lvbmUgY2FyYXR0ZXJpIgotCi0jOiBnaXQtZ3VpLnNoOjMyODggbGliL2JsYW1lLnRjbDoyODEKLW1zZ2lkICJFbmNvZGluZyIKLW1zZ3N0ciAiQ29kaWZpY2EiCi0KLSM6IGdpdC1ndWkuc2g6MzI5OQotbXNnaWQgIkFwcGx5L1JldmVyc2UgSHVuayIKLW1zZ3N0ciAiQXBwbGljYS9JbnZlcnRpIHNlemlvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MzMwNAotbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKLW1zZ3N0ciAiQXBwbGljYS9JbnZlcnRpIHJpZ2EiCi0KLSM6IGdpdC1ndWkuc2g6MzMyMwotbXNnaWQgIlJ1biBNZXJnZSBUb29sIgotbXNnc3RyICJBdnZpYSBwcm9ncmFtbWEgZXN0ZXJubyBwZXIgbGEgcmlzb2x1emlvbmUgZGVpIGNvbmZsaXR0aSIKLQotIzogZ2l0LWd1aS5zaDozMzI4Ci1tc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgotbXNnc3RyICJVc2EgdmVyc2lvbmUgcmVtb3RhIgotCi0jOiBnaXQtZ3VpLnNoOjMzMzIKLW1zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKLW1zZ3N0ciAiVXNhIHZlcnNpb25lIGxvY2FsZSIKLQotIzogZ2l0LWd1aS5zaDozMzM2Ci1tc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCi1tc2dzdHIgIlJpdG9ybmEgYWxsYSByZXZpc2lvbmUgY29tdW5lIgotCi0jOiBnaXQtZ3VpLnNoOjMzNTQKLW1zZ2lkICJWaXN1YWxpemUgVGhlc2UgQ2hhbmdlcyBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJWaXN1YWxpenphIHF1ZXN0ZSBtb2RpZmljaGUgbmVsIHNvdHRvbW9kdWxvIgotCi0jOiBnaXQtZ3VpLnNoOjMzNTgKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJWaXN1YWxpenphIGxhIGNyb25vbG9naWEgZGVsIHJhbW8gYXR0dWFsZSBuZWwgc290dG9tb2R1bG8iCi0KLSM6IGdpdC1ndWkuc2g6MzM2MgotbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiVmlzdWFsaXp6YSBsYSBjcm9ub2xvZ2lhIGRpIHR1dHRpIGkgcmFtaSBuZWwgc290dG9tb2R1bG8iCi0KLSM6IGdpdC1ndWkuc2g6MzM2NwotbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiQXZ2aWEgZ2l0IGd1aSBuZWwgc290dG9tb2R1bG8iCi0KLSM6IGdpdC1ndWkuc2g6MzM4OQotbXNnaWQgIlVuc3RhZ2UgSHVuayBGcm9tIENvbW1pdCIKLW1zZ3N0ciAiQW5udWxsYSBwcmVwYXJhemlvbmUgZGVsbGEgc2V6aW9uZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKLQotIzogZ2l0LWd1aS5zaDozMzkxCi1tc2dpZCAiVW5zdGFnZSBMaW5lcyBGcm9tIENvbW1pdCIKLW1zZ3N0ciAiQW5udWxsYSBwcmVwYXJhemlvbmUgZGVsbGUgbGluZWUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MzM5MwotbXNnaWQgIlVuc3RhZ2UgTGluZSBGcm9tIENvbW1pdCIKLW1zZ3N0ciAiQW5udWxsYSBwcmVwYXJhemlvbmUgZGVsbGEgbGluZWEgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MzM5NgotbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKLW1zZ3N0ciAiUHJlcGFyYSBzZXppb25lIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjMzOTgKLW1zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgotbXNnc3RyICJQcmVwYXJhIGxpbmVlIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjM0MDAKLW1zZ2lkICJTdGFnZSBMaW5lIEZvciBDb21taXQiCi1tc2dzdHIgIlByZXBhcmEgbGluZWEgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MzQyNAotbXNnaWQgIkluaXRpYWxpemluZy4uLiIKLW1zZ3N0ciAiSW5pemlhbGl6emF6aW9uZS4uLiIKLQotIzogZ2l0LWd1aS5zaDozNTQxCi0jLCB0Y2wtZm9ybWF0CisjOiBhZGQtcGF0Y2guYzo0MAogbXNnaWQgIiIKLSJQb3NzaWJsZSBlbnZpcm9ubWVudCBpc3N1ZXMgZXhpc3QuXG4iCi0iXG4iCi0iVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHByb2JhYmx5XG4iCi0iZ29pbmcgdG8gYmUgaWdub3JlZCBieSBhbnkgR2l0IHN1YnByb2Nlc3MgcnVuXG4iCi0iYnkgJXM6XG4iCi0iXG4iCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKIG1zZ3N0ciAiIgotIlBvc3NpYmlsaSBwcm9ibGVtaSBjb24gbGUgdmFyaWFiaWxpIGQnYW1iaWVudGUuXG4iCi0iXG4iCi0iTGUgc2VndWVudGkgdmFyaWFiaWxpIGQnYW1iaWVudGUgc2FyYW5ubyBwcm9iYWJpbG1lbnRlXG4iCi0iaWdub3JhdGUgZGEgdHV0dGkgaSBzb3R0b3Byb2Nlc3NpIGRpIEdpdCBhdnZpYXRpXG4iCi0iZGEgJXM6XG4iCi0iXG4iCisieSAtIGFnZ2l1bmdpIHF1ZXN0J2h1bmsgYWxsJ2FyZWEgZGkgc3RhZ2luZ1xuIgorIm4gLSBub24gYWdnaXVuZ2VyZSBxdWVzdCdodW5rIGFsbCdhcmVhIGRpIHN0YWdpbmdcbiIKKyJxIC0gZXNjaTsgbm9uIGFnZ2l1bmdlcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSByaW1hbmVudGkgYWxsJ2FyZWEgZGkgIgorInN0YWdpbmdcbiIKKyJhIC0gYWdnaXVuZ2kgcXVlc3QnaHVuayBlIHR1dHRpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlIGFsbCdhcmVhIGRpICIKKyJzdGFnaW5nXG4iCisiZCAtIG5vbiBhZ2dpdW5nZXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZSBhbGwnYXJlYSBkaSAiCisic3RhZ2luZ1xuIgogCi0jOiBnaXQtZ3VpLnNoOjM1NzAKKyM6IGFkZC1wYXRjaC5jOjU0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMworIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIk1vZGlmaWNhIG1vZG8gc3Rhc2ggW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjU1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkVsaW1pbmF6aW9uZSBzdGFzaCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NTYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkVzZWd1aXJlIGxvIHN0YXNoIGRpIHF1ZXN0J2h1bmsgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjU4CiBtc2dpZCAiIgotIlxuIgotIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKLSJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisic3Rhc2hpbmcuIgogbXNnc3RyICIiCi0iXG4iCi0iQ2nDsiDDqCBkb3Z1dG8gYSB1biBwcm9ibGVtYSBjb25vc2NpdXRvXG4iCi0iY2F1c2F0byBkYWxsJ2VzZWd1aWJpbGUgVGNsIGRpc3RyaWJ1aXRvIGRhIEN5Z3dpbi4iCisiU2UgbGEgcGF0Y2ggdmllbmUgYXBwbGljYXRhIHNlbnphIHByb2JsZW1pLCBsJ2h1bmsgbW9kaWZpY2F0byBzYXLDoCAiCisiY29udHJhc3NlZ25hdG8gaW1tZWRpYXRhbWVudGUgcGVyIGxvIHN0YXNoLiIKIAotIzogZ2l0LWd1aS5zaDozNTc1Ci0jLCB0Y2wtZm9ybWF0CisjOiBhZGQtcGF0Y2guYzo2MQogbXNnaWQgIiIKLSJcbiIKLSJcbiIKLSJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCi0iaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCi0idXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKLSJ+Ly5naXRjb25maWcgZmlsZS5cbiIKKyJ5IC0gc3Rhc2ggdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YXNoIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgogbXNnc3RyICIiCi0iXG4iCi0iXG4iCi0iVW5hIGJ1b25hIGFsdGVybmF0aXZhIGEgJXNcbiIKLSJjb25zaXN0ZSBuZWxsJ2Fzc2VnbmFyZSB2YWxvcmkgYWxsZSB2YXJpYWJpbGkgZGkgY29uZmlndXJhemlvbmVcbiIKLSJ1c2VyLm5hbWUgZSB1c2VyLmVtYWlsIG5lbCB0dW8gZmlsZSB+Ly5naXRjb25maWcgcGVyc29uYWxlLlxuIgorInkgLSBlc2VndWkgbG8gc3Rhc2ggZGkgcXVlc3QnaHVua1xuIgorIm4gLSBub24gZXNlZ3VpcmUgbG8gc3Rhc2ggZGkgcXVlc3QnaHVua1xuIgorInEgLSBlc2NpOyBub24gZXNlZ3VpcmUgbG8gc3Rhc2ggZGkgcXVlc3QnaHVuayBuw6kgZGkgcXVlbGxpIHJpbWFuZW50aVxuIgorImEgLSBlc2VndWkgbG8gc3Rhc2ggZGkgcXVlc3QnaHVuayBlIGRpIHR1dHRpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlXG4iCisiZCAtIG5vbiBlc2VndWlyZSBsbyBzdGFzaCBuw6kgZGkgcXVlc3QnaHVuayBuw6kgZGkgcXVlbGxpIHN1Y2Nlc3NpdmkgbmVsIGZpbGVcbiIKIAotIzogbGliL2Fib3V0LnRjbDoyNgotbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKLW1zZ3N0ciAiZ2l0LWd1aSAtIHVuJ2ludGVyZmFjY2lhIGdyYWZpY2EgcGVyIEdpdC4iCisjOiBhZGQtcGF0Y2guYzo3NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIlJpbW96aW9uZSBtb2RpZmljYSBtb2RvIGRhbGwnYXJlYSBkaSBzdGFnaW5nIFt5LG4scSxhLGQlcyw/XT8gIgogCi0jOiBsaWIvYmxhbWUudGNsOjcyCi1tc2dpZCAiRmlsZSBWaWV3ZXIiCi1tc2dzdHIgIk1vc3RyYSBmaWxlIgorIzogYWRkLXBhdGNoLmM6NzggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM5CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJSaW1vemlvbmUgZWxpbWluYXppb25lIGRhbGwnYXJlYSBkaSBzdGFnaW5nIFt5LG4scSxhLGQlcyw/XT8gIgogCi0jOiBsaWIvYmxhbWUudGNsOjc4Ci1tc2dpZCAiQ29tbWl0OiIKLW1zZ3N0ciAiUmV2aXNpb25lOiIKKyM6IGFkZC1wYXRjaC5jOjc5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIlJpbXVvdmVyZSBxdWVzdCdodW5rIGRhbGwnYXJlYSBkaSBzdGFnaW5nIFt5LG4scSxhLGQlcyw/XT8gIgogCi0jOiBsaWIvYmxhbWUudGNsOjI3MQotbXNnaWQgIkNvcHkgQ29tbWl0IgotbXNnc3RyICJDb3BpYSByZXZpc2lvbmUiCi0KLSM6IGxpYi9ibGFtZS50Y2w6Mjc1Ci1tc2dpZCAiRmluZCBUZXh0Li4uIgotbXNnc3RyICJUcm92YSB0ZXN0by4uLiIKLQotIzogbGliL2JsYW1lLnRjbDoyODQKLW1zZ2lkICJEbyBGdWxsIENvcHkgRGV0ZWN0aW9uIgotbXNnc3RyICJSaWNlcmNhIGFjY3VyYXRhIGRlbGxlIGNvcGllIgotCi0jOiBsaWIvYmxhbWUudGNsOjI4OAotbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgotbXNnc3RyICJNb3N0cmEgY29udGVzdG8gbmVsbGEgY3Jvbm9sb2dpYSIKLQotIzogbGliL2JsYW1lLnRjbDoyOTEKLW1zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgotbXNnc3RyICJBbm5vdGEgbGEgcmV2aXNpb25lIHByZWNlZGVudGUiCi0KLSM6IGxpYi9ibGFtZS50Y2w6NDUwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVhZGluZyAlcy4uLiIKLW1zZ3N0ciAiTGV0dHVyYSBkaSAlcy4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo1NTcKLW1zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKLW1zZ3N0ciAiQ2FyaWNhbWVudG8gYW5ub3RhemlvbmkgcGVyIGNvcGllL3Nwb3N0YW1lbnRpLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjU3NwotbXNnaWQgImxpbmVzIGFubm90YXRlZCIKLW1zZ3N0ciAibGluZWUgYW5ub3RhdGUiCi0KLSM6IGxpYi9ibGFtZS50Y2w6NzY5Ci1tc2dpZCAiTG9hZGluZyBvcmlnaW5hbCBsb2NhdGlvbiBhbm5vdGF0aW9ucy4uLiIKLW1zZ3N0ciAiQ2FyaWNhbWVudG8gYW5ub3RhemlvbmkgcGVyIHBvc2l6aW9uZSBvcmlnaW5hcmlhLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjc3MgotbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgotbXNnc3RyICJBbm5vdGF6aW9uZSBjb21wbGV0YXRhLiIKLQotIzogbGliL2JsYW1lLnRjbDo4MDIKLW1zZ2lkICJCdXN5IgotbXNnc3RyICJPY2N1cGF0byIKLQotIzogbGliL2JsYW1lLnRjbDo4MDMKLW1zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKLW1zZ3N0ciAiSWwgcHJvY2Vzc28gZGkgYW5ub3RhemlvbmUgw6ggZ2nDoCBpbiBjb3Jzby4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODQyCi1tc2dpZCAiUnVubmluZyB0aG9yb3VnaCBjb3B5IGRldGVjdGlvbi4uLiIKLW1zZ3N0ciAiUmljZXJjYSBhY2N1cmF0YSBkZWxsZSBjb3BpZSBpbiBjb3Jzby4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo5MTAKLW1zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCi1tc2dzdHIgIkNhcmljYW1lbnRvIGFubm90YXppb25pLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjk2MwotbXNnaWQgIkF1dGhvcjoiCi1tc2dzdHIgIkF1dG9yZToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6OTY3Ci1tc2dpZCAiQ29tbWl0dGVyOiIKLW1zZ3N0ciAiUmV2aXNpb25lIGNyZWF0YSBkYToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6OTcyCi1tc2dpZCAiT3JpZ2luYWwgRmlsZToiCi1tc2dzdHIgIkZpbGUgb3JpZ2luYXJpbzoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTAyMAotbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBsYSByZXZpc2lvbmUgSEVBRDoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTA3NQotbXNnaWQgIkNhbm5vdCBmaW5kIHBhcmVudCBjb21taXQ6IgotbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIGxhIHJldmlzaW9uZSBwcmVjZWRlbnRlOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDkwCi1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgotbXNnc3RyICJJbXBvc3NpYmlsZSB2aXN1YWxpenphcmUgbGEgcmV2aXNpb25lIHByZWNlZGVudGUiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTA5MSBsaWIvZGlmZi50Y2w6MzIwCi1tc2dpZCAiRXJyb3IgbG9hZGluZyBkaWZmOiIKLW1zZ3N0ciAiRXJyb3JlIG5lbCBjYXJpY2FtZW50byBkZWxsZSBkaWZmZXJlbnplOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjMxCi1tc2dpZCAiT3JpZ2luYWxseSBCeToiCi1tc2dzdHIgIkluIG9yaWdpbmUgZGE6IgotCi0jOiBsaWIvYmxhbWUudGNsOjEyMzcKLW1zZ2lkICJJbiBGaWxlOiIKLW1zZ3N0ciAiTmVsIGZpbGU6IgotCi0jOiBsaWIvYmxhbWUudGNsOjEyNDIKLW1zZ2lkICJDb3BpZWQgT3IgTW92ZWQgSGVyZSBCeToiCi1tc2dzdHIgIkNvcGlhdG8gbyBzcG9zdGF0byBxdWkgZGE6IgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoxNCBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoxOQotbXNnaWQgIkNoZWNrb3V0IEJyYW5jaCIKLW1zZ3N0ciAiQXR0aXZhIHJhbW8iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjIzCi1tc2dpZCAiQ2hlY2tvdXQiCi1tc2dzdHIgIkF0dGl2YSIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjcgbGliL2JyYW5jaF9jcmVhdGUudGNsOjM1Ci0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzIgbGliL2JyYW5jaF9yZW5hbWUudGNsOjMwIGxpYi9icm93c2VyLnRjbDoyODIKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTc5IGxpYi9jaG9vc2VfZm9udC50Y2w6NDMgbGliL21lcmdlLnRjbDoxNzIKLSM6IGxpYi9vcHRpb24udGNsOjEyNSBsaWIvcmVtb3RlX2FkZC50Y2w6MzIgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MgotIzogbGliL3Rvb2xzX2RsZy50Y2w6NDAgbGliL3Rvb2xzX2RsZy50Y2w6MjA0IGxpYi90b29sc19kbGcudGNsOjM1MgotIzogbGliL3RyYW5zcG9ydC50Y2w6MTA4Ci1tc2dpZCAiQ2FuY2VsIgotbXNnc3RyICJBbm51bGxhIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6Mjg3IGxpYi90b29sc19kbGcudGNsOjMyOAotbXNnaWQgIlJldmlzaW9uIgotbXNnc3RyICJSZXZpc2lvbmUiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM2IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2OSBsaWIvb3B0aW9uLnRjbDoyODAKLW1zZ2lkICJPcHRpb25zIgotbXNnc3RyICJPcHppb25pIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTIKLW1zZ2lkICJGZXRjaCBUcmFja2luZyBCcmFuY2giCi1tc2dzdHIgIlJlY3VwZXJhIGR1cGxpY2F0byBsb2NhbGUgZGkgcmFtbyByZW1vdG8iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ0Ci1tc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgotbXNnc3RyICJTdGFjY2EgZGEgcmFtbyBsb2NhbGUiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMgotbXNnaWQgIkNyZWF0ZSBCcmFuY2giCi1tc2dzdHIgIkNyZWEgcmFtbyIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI3Ci1tc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCi1tc2dzdHIgIkNyZWEgbnVvdm8gcmFtbyIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgxCi1tc2dpZCAiQ3JlYXRlIgotbXNnc3RyICJDcmVhIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDAKLW1zZ2lkICJCcmFuY2ggTmFtZSIKLW1zZ3N0ciAiTm9tZSBkZWwgcmFtbyIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQzIGxpYi9yZW1vdGVfYWRkLnRjbDozOSBsaWIvdG9vbHNfZGxnLnRjbDo1MAotbXNnaWQgIk5hbWU6IgotbXNnc3RyICJOb21lOiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjU4Ci1tc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoIE5hbWUiCi1tc2dzdHIgIkFwcGFpYSBub21lIGRlbCBkdXBsaWNhdG8gbG9jYWxlIGRpIHJhbW8gcmVtb3RvIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKLW1zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKLW1zZ3N0ciAiUmV2aXNpb25lIGluaXppYWxlIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzIKLW1zZ2lkICJVcGRhdGUgRXhpc3RpbmcgQnJhbmNoOiIKLW1zZ3N0ciAiQWdnaW9ybmEgcmFtbyBlc2lzdGVudGU6IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzUKLW1zZ2lkICJObyIKLW1zZ3N0ciAiTm8iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAotbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgotbXNnc3RyICJTb2xvIGZhc3QgZm9yd2FyZCIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTcxCi1tc2dpZCAiUmVzZXQiCi1tc2dzdHIgIlJpcHJpc3RpbmEiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5NwotbXNnaWQgIkNoZWNrb3V0IEFmdGVyIENyZWF0aW9uIgotbXNnc3RyICJBdHRpdmEgZG9wbyBsYSBjcmVhemlvbmUiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzEKLW1zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKLW1zZ3N0ciAiU2NlZ2xpZXJlIHVuIGR1cGxpY2F0byBsb2NhbGUgZGkgcmFtbyByZW1vdG8iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIiIKLSJJbCBkdXBsaWNhdG8gbG9jYWxlIGRlbCByYW1vIHJlbW90byAlcyBub24gw6ggdW4gcmFtbyBuZWxsJ2FyY2hpdmlvIHJlbW90by4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTMgbGliL2JyYW5jaF9yZW5hbWUudGNsOjg2Ci1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKLW1zZ3N0ciAiSW5zZXJpcmUgdW4gbm9tZSBwZXIgaWwgcmFtby4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIgotbXNnc3RyICInJXMnIG5vbiDDqCB1dGlsaXp6YWJpbGUgY29tZSBub21lIGRpIHJhbW8uIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTUKLW1zZ2lkICJEZWxldGUgQnJhbmNoIgotbXNnc3RyICJFbGltaW5hIHJhbW8iCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMAotbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCi1tc2dzdHIgIkVsaW1pbmEgcmFtbyBsb2NhbGUiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozNwotbXNnaWQgIkxvY2FsIEJyYW5jaGVzIgotbXNnc3RyICJSYW1pIGxvY2FsaSIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUyCi1tc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCi1tc2dzdHIgIkNhbmNlbGxhIHNvbG8gc2UgZnVzbyBjb24gdW4gYWx0cm8gcmFtbyIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Ci1tc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgotbXNnc3RyICJTZW1wcmUgKG5vbiB2ZXJpZmljYXJlIGxlIGZ1c2lvbmkpIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgotbXNnc3RyICJJIHJhbWkgc2VndWVudGkgbm9uIHNvbm8gc3RhdGkgZnVzaSBjb21wbGV0YW1lbnRlIGluICVzOiIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjExNSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNworIzogYWRkLXBhdGNoLmM6ODEKIG1zZ2lkICIiCi0iUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKLSJcbiIKLSJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJ1bnN0YWdpbmcuIgogbXNnc3RyICIiCi0iUmlwcmlzdGluYXJlIHJhbWkgY2FuY2VsbGF0aSDDqCBkaWZmaWNpbGUuXG4iCi0iXG4iCi0iQ2FuY2VsbGFyZSBpIHJhbWkgc2VsZXppb25hdGk/IgorIlNlIGxhIHBhdGNoIHZpZW5lIGFwcGxpY2F0YSBzZW56YSBwcm9ibGVtaSwgbCdodW5rIG1vZGlmaWNhdG8gc2Fyw6AgIgorImNvbnRyYXNzZWduYXRvIGltbWVkaWF0YW1lbnRlIHBlciBsYSByaW1vemlvbmUgZGFsbCdhcmVhIGRpIHN0YWdpbmcuIgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCi0jLCB0Y2wtZm9ybWF0CisjOiBhZGQtcGF0Y2guYzo4NAogbXNnaWQgIiIKLSJGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaGVzOlxuIgotIiVzIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgY2FuY2VsbGFyZSBpIHJhbWk6XG4iCi0iJXMiCisieSAtIHJpbXVvdmkgcXVlc3QnaHVuayBkYWxsJ2FyZWEgZGkgc3RhZ2luZ1xuIgorIm4gLSBub24gcmltdW92ZXJlIHF1ZXN0J2h1bmsgZGFsbCdhcmVhIGRpIHN0YWdpbmdcbiIKKyJxIC0gZXNjaTsgbm9uIHJpbXVvdmVyZSBuw6kgcXVlc3QnaHVuayBuw6kgcXVlbGxpIHJpbWFuZW50aSBkYWxsJ2FyZWEgZGkgIgorInN0YWdpbmdcbiIKKyJhIC0gcmltdW92aSBxdWVzdCdodW5rIGUgdHV0dGkgcXVlbGxpIHN1Y2Nlc3NpdmkgbmVsIGZpbGUgZGFsbCdhcmVhIGRpICIKKyJzdGFnaW5nXG4iCisiZCAtIG5vbiByaW11b3ZlcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlIGRhbGwnYXJlYSBkaSAiCisic3RhZ2luZ1xuIgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjIyCi1tc2dpZCAiUmVuYW1lIEJyYW5jaCIKLW1zZ3N0ciAiUmlub21pbmEgcmFtbyIKKyM6IGFkZC1wYXRjaC5jOjk5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MworIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwcGxpY2FyZSBsYSBtb2RpZmljYSBtb2RvIGFsbCdpbmRpY2UgW3ksbixxLGEsZCVzLD9dPyAiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyNgotbXNnaWQgIlJlbmFtZSIKLW1zZ3N0ciAiUmlub21pbmEiCisjOiBhZGQtcGF0Y2guYzoxMDAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBwbGljYXJlIGwnZWxpbWluYXppb25lIGFsbCdpbmRpY2UgW3ksbixxLGEsZCVzLD9dPyAiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozNgotbXNnaWQgIkJyYW5jaDoiCi1tc2dzdHIgIlJhbW86IgorIzogYWRkLXBhdGNoLmM6MTAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcHBsaWNhcmUgcXVlc3QnaHVuayBhbGwnaW5kaWNlIFt5LG4scSxhLGQlcyw/XT8gIgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzkKLW1zZ2lkICJOZXcgTmFtZToiCi1tc2dzdHIgIk51b3ZvIE5vbWU6IgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NzUKLW1zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCi1tc2dzdHIgIlNjZWdsaWVyZSB1biByYW1vIGRhIHJpbm9taW5hcmUuIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIklsIHJhbW8gJyVzJyBlc2lzdGUgZ2nDoC4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgotbXNnc3RyICJJbXBvc3NpYmlsZSByaW5vbWluYXJlICclcycuIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTcKLW1zZ2lkICJTdGFydGluZy4uLiIKLW1zZ3N0ciAiQXZ2aW8gaW4gY29yc28uLi4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNgotbXNnaWQgIkZpbGUgQnJvd3NlciIKLW1zZ3N0ciAiRmlsZSBicm93c2VyIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTI2IGxpYi9icm93c2VyLnRjbDoxNDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2FkaW5nICVzLi4uIgotbXNnc3RyICJDYXJpY2FtZW50byAlcy4uLiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjE4NwotbXNnaWQgIltVcCBUbyBQYXJlbnRdIgotbXNnc3RyICJbRGlyZWN0b3J5IHN1cGVyaW9yZV0iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNjcgbGliL2Jyb3dzZXIudGNsOjI3MwotbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCi1tc2dzdHIgIkVzcGxvcmEgaSBmaWxlIGRlbCByYW1vIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk4Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI4Ci1tc2dpZCAiQnJvd3NlIgotbXNnc3RyICJFc3Bsb3JhIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKLW1zZ3N0ciAiUmVjdXBlcm8gJXMgZGEgJXMiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgotbXNnc3RyICJlcnJvcmUgZ3JhdmU6IGltcG9zc2liaWxlIHJpc29sdmVyZSAlcyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDYgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzEKLSM6IGxpYi9zc2hrZXkudGNsOjUzCi1tc2dpZCAiQ2xvc2UiCi1tc2dzdHIgIkNoaXVkaSIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCi1tc2dzdHIgIklsIHJhbW8gJyVzJyBub24gZXNpc3RlLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBjb25maWd1cmFyZSBnaXQtcHVsbCBzZW1wbGlmaWNhdG8gcGVyICclcycuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOQotIywgdGNsLWZvcm1hdAorIzogYWRkLXBhdGNoLmM6MTAzIGFkZC1wYXRjaC5jOjE2OCBhZGQtcGF0Y2guYzoyMTEKIG1zZ2lkICIiCi0iQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCi0iXG4iCi0iSXQgY2Fubm90IGZhc3QtZm9yd2FyZCB0byAlcy5cbiIKLSJBIG1lcmdlIGlzIHJlcXVpcmVkLiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJhcHBseWluZy4iCiBtc2dzdHIgIiIKLSJJbCByYW1vICclcycgZXNpc3RlIGdpw6AuXG4iCi0iXG4iCi0iTm9uIHB1w7IgZWZmZXR0dWFyZSB1biAnZmFzdC1mb3J3YXJkJyBhICVzLlxuIgotIkUnIG5lY2Vzc2FyaWEgdW5hIGZ1c2lvbmUuIgorIlNlIGxhIHBhdGNoIHZpZW5lIGFwcGxpY2F0YSBzZW56YSBwcm9ibGVtaSwgbCdodW5rIG1vZGlmaWNhdG8gc2Fyw6AgIgorImNvbnRyYXNzZWduYXRvIGltbWVkaWF0YW1lbnRlIHBlciBsJ2FwcGxpY2F6aW9uZS4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiTGEgc3RyYXRlZ2lhIGRpIGZ1c2lvbmUgJyVzJyBub24gw6ggc3VwcG9ydGF0YS4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgYWdnaW9ybmFyZSAnJXMnLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKLW1zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCi1tc2dzdHIgIiIKLSJMJ2FyZWEgZGkgcHJlcGFyYXppb25lIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIChpbmRpY2UpIMOoIGdpw6AgYmxvY2NhdGEuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI4OQorIzogYWRkLXBhdGNoLmM6MTA2CiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKIG1zZ3N0ciAiIgotIkwndWx0aW1vIHN0YXRvIGFuYWxpenphdG8gbm9uIGNvcnJpc3BvbmRlIGFsbG8gc3RhdG8gZGVsbCdhcmNoaXZpby5cbiIKLSJcbiIKLSJVbiBhbHRybyBwcm9ncmFtbWEgR2l0IGhhIG1vZGlmaWNhdG8gcXVlc3RvIGFyY2hpdmlvIGRhbGwndWx0aW1hIGFuYWxpc2kuICIKLSJCaXNvZ25hIGVmZmV0dHVhcmUgdW5hIG51b3ZhIGFuYWxpc2kgcHJpbWEgZGkgcG90ZXIgY2FtYmlhcmUgaWwgcmFtbyAiCi0iYXR0dWFsZS5cbiIKLSJcbiIKLSJMYSBudW92YSBhbmFsaXNpIGNvbWluY2Vyw6Agb3JhLlxuIgorInkgLSBhcHBsaWNhIHF1ZXN0J2h1bmsgYWxsJ2luZGljZVxuIgorIm4gLSBub24gYXBwbGljYXJlIHF1ZXN0J2h1bmsgYWxsJ2luZGljZVxuIgorInEgLSBlc2NpOyBub24gYXBwbGljYXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgcmltYW5lbnRpXG4iCisiYSAtIGFwcGxpY2EgcXVlc3QnaHVuayBlIHR1dHRpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlXG4iCisiZCAtIG5vbiBhcHBsaWNhcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlXG4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKLW1zZ3N0ciAiQWdnaW9ybmFtZW50byBkZWxsYSBkaXJlY3RvcnkgZGkgbGF2b3JvIGEgJyVzJyBpbiBjb3Jzby4uLiIKKyM6IGFkZC1wYXRjaC5jOjEyMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MworIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJTY2FydGFyZSBsZSBtb2RpZmljaGUgbW9kbyBkYWxsJ2FsYmVybyBkaSBsYXZvcm8gW3ksbixxLGEsZCVzLD9dPyAiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Ci1tc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCi1tc2dzdHIgImZpbGUgcHJlc2VudGkgbmVsbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyIKKyM6IGFkZC1wYXRjaC5jOjEyMiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDkKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJTY2FydGFyZSBsJ2VsaW1pbmF6aW9uZSBkYWxsJ2FsYmVybyBkaSBsYXZvcm8gW3ksbixxLGEsZCVzLD9dPyAiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKLW1zZ3N0ciAiQXR0aXZhemlvbmUgZGkgJyVzJyBmYWxsaXRhIChyaWNoaWVzdGEgdW5hIGZ1c2lvbmUgYSBsaXZlbGxvIGZpbGUpLiIKKyM6IGFkZC1wYXRjaC5jOjEyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiU2NhcnRhcmUgcXVlc3QnaHVuayBkYWxsJ2FsYmVybyBkaSBsYXZvcm8gW3ksbixxLGEsZCVzLD9dPyAiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc3Ci1tc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCi1tc2dzdHIgIkUnIHJpY2hpZXN0YSB1bmEgZnVzaW9uZSBhIGxpdmVsbG8gZmlsZS4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzgxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU3RheWluZyBvbiBicmFuY2ggJyVzJy4iCi1tc2dzdHIgIlNpIHJpbWFycsOgIHN1bCByYW1vICclcycuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgorIzogYWRkLXBhdGNoLmM6MTI1IGFkZC1wYXRjaC5jOjE0NyBhZGQtcGF0Y2guYzoxOTAKIG1zZ2lkICIiCi0iWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCi0iXG4iCi0iSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCi0iQ2hlY2tvdXQnLiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJkaXNjYXJkaW5nLiIKIG1zZ3N0ciAiIgotIk5vbiBzaSDDqCBwacO5IHN1IHVuIHJhbW8gbG9jYWxlXG4iCi0iXG4iCi0iU2Ugc2kgdnVvbGUgcmltYW5lcmUgc3UgdW4gcmFtbywgY3JlYXJuZSB1bm8gb3JhIGEgcGFydGlyZSBkYSAnUXVlc3RhICIKLSJyZXZpc2lvbmUgYXR0aXZhIHN0YWNjYXRhJy4iCisiU2UgbGEgcGF0Y2ggdmllbmUgYXBwbGljYXRhIHNlbnphIHByb2JsZW1pLCBsJ2h1bmsgbW9kaWZpY2F0byBzYXLDoCAiCisiY29udHJhc3NlZ25hdG8gaW1tZWRpYXRhbWVudGUgcGVyIGxhIHJpbW96aW9uZS4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCi1tc2dzdHIgIkF0dGl2YXppb25lIGRpICclcycgY29tcGxldGF0YS4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKLW1zZ3N0ciAiIgotIlJpcHJpc3RpbmFyZSAnJXMnIGEgJyVzJyBjb21wb3J0ZXLDoCBsYSBwZXJkaXRhIGRlbGxlIHNlZ3VlbnRpIHJldmlzaW9uaToiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Ci1tc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKLW1zZ3N0ciAiUmljb21wb3JyZSBsZSByZXZpc2lvbmkgcGVyZHV0ZSBwb3RyZWJiZSBub24gZXNzZXJlIHNlbXBsaWNlLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldCAnJXMnPyIKLW1zZ3N0ciAiUmlwcmlzdGluYXJlICclcyc/IgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKLW1zZ2lkICJWaXN1YWxpemUiCi1tc2dzdHIgIlZpc3VhbGl6emEiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1Ci0jLCB0Y2wtZm9ybWF0CisjOiBhZGQtcGF0Y2guYzoxMjggYWRkLXBhdGNoLmM6MTkzCiBtc2dpZCAiIgotIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCi0iXG4iCi0iVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKLSJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKLSJcbiIKLSJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCiBtc2dzdHIgIiIKLSJJbXBvc3NpYmlsZSBwcmVwYXJhcmUgaWwgcmFtbyBhdHR1YWxlLlxuIgotIlxuIgotIlF1ZXN0YSBkaXJlY3RvcnkgZGkgbGF2b3JvIMOoIHN0YXRhIGNvbnZlcnRpdGEgc29sbyBwYXJ6aWFsbWVudGUuIEkgZmlsZSBzb25vICIKLSJzdGF0aSBhZ2dpb3JuYXRpIGNvcnJldHRhbWVudGUsIG1hIGwnYWdnaW9ybmFtZW50byBkaSB1biBmaWxlIGRpIEdpdCBoYSAiCi0icHJvZG90dG8gZGVnbGkgZXJyb3JpLlxuIgotIlxuIgotIlF1ZXN0byBub24gc2FyZWJiZSBkb3Z1dG8gc3VjY2VkZXJlLiAgJXMgb3JhIHRlcm1pbmVyw6Agc2VuemEgYWx0cmUgYXppb25pLiIKKyJ5IC0gcmltdW92aSBxdWVzdCdodW5rIGRhbGwnYWxiZXJvIGRpIGxhdm9yb1xuIgorIm4gLSBub24gcmltdW92ZXJlIHF1ZXN0J2h1bmsgZGFsbCdhbGJlcm8gZGkgbGF2b3JvXG4iCisicSAtIGVzY2k7IG5vbiByaW11b3ZlcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSByaW1hbmVudGlcbiIKKyJhIC0gcmltdW92aSBxdWVzdCdodW5rIGUgdHV0dGkgcXVlbGxpIHN1Y2Nlc3NpdmkgbmVsIGZpbGVcbiIKKyJkIC0gbm9uIHJpbXVvdmVyZSBuw6kgcXVlc3QnaHVuayBuw6kgcXVlbGxpIHN1Y2Nlc3NpdmkgbmVsIGZpbGVcbiIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDozOQotbXNnaWQgIlNlbGVjdCIKLW1zZ3N0ciAiU2VsZXppb25hIgorIzogYWRkLXBhdGNoLmM6MTQzIGFkZC1wYXRjaC5jOjE4NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyJTY2FydGFyZSBsYSBtb2RpZmljYSBtb2RvIGRhbGwnaW5kaWNlIGUgZGFsbCdhbGJlcm8gZGkgbGF2b3JvIFt5LG4scSxhLGQiCisiJXMsP10/ICIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo1MwotbXNnaWQgIkZvbnQgRmFtaWx5IgotbXNnc3RyICJGYW1pZ2xpYSBkaSBjYXJhdHRlcmkiCisjOiBhZGQtcGF0Y2guYzoxNDQgYWRkLXBhdGNoLmM6MTg3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIlNjYXJ0YXJlIGwnZWxpbWluYXppb25lIGRhbGwnaW5kaWNlIGUgZGFsbCdhbGJlcm8gZGkgbGF2b3JvIFt5LG4scSxhLGQlcyw/XT8gIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjc0Ci1tc2dpZCAiRm9udCBTaXplIgotbXNnc3RyICJEaW1lbnNpb25lIGNhcmF0dGVyaSIKKyM6IGFkZC1wYXRjaC5jOjE0NSBhZGQtcGF0Y2guYzoxODggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIlNjYXJ0YXJlIHF1ZXN0J2h1bmsgZGFsbCdpbmRpY2UgZSBkYWxsJ2FsYmVybyBkaSBsYXZvcm8gW3ksbixxLGEsZCVzLD9dPyAiCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTEKLW1zZ2lkICJGb250IEV4YW1wbGUiCi1tc2dzdHIgIkVzZW1waW8gY2FyYXR0ZXJpIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwMworIzogYWRkLXBhdGNoLmM6MTUwCiBtc2dpZCAiIgotIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgotIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCiBtc2dzdHIgIiIKLSJRdWVzdG8gw6ggdW4gdGVzdG8gZCdlc2VtcGlvLlxuIgotIlNlIHRpIHBpYWNlIHF1ZXN0byB0ZXN0bywgc2NlZ2xpIHF1ZXN0byBjYXJhdHRlcmUuIgorInkgLSByaW11b3ZpIHF1ZXN0J2h1bmsgZGFsbCdpbmRpY2UgZSBkYWxsJ2FsYmVybyBkaSBsYXZvcm9cbiIKKyJuIC0gbm9uIHJpbXVvdmVyZSBxdWVzdCdodW5rIGRhbGwnaW5kaWNlIGUgZGFsbCdhbGJlcm8gZGkgbGF2b3JvXG4iCisicSAtIGVzY2k7IG5vbiByaW11b3ZlcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSByaW1hbmVudGlcbiIKKyJhIC0gcmltdW92aSBxdWVzdCdodW5rIGUgdHV0dGkgcXVlbGxpIHN1Y2Nlc3NpdmkgbmVsIGZpbGVcbiIKKyJkIC0gbm9uIHJpbXVvdmVyZSBuw6kgcXVlc3QnaHVuayBuw6kgcXVlbGxpIHN1Y2Nlc3NpdmkgbmVsIGZpbGVcbiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyOAotbXNnaWQgIkdpdCBHdWkiCi1tc2dzdHIgIkdpdCBHdWkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODYKLW1zZ2lkICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiCi1tc2dzdHIgIkNyZWEgbnVvdm8gYXJjaGl2aW8iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMKLW1zZ2lkICJOZXcuLi4iCi1tc2dzdHIgIk51b3ZvLi4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MQotbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgIkNsb25hIGFyY2hpdmlvIGVzaXN0ZW50ZSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDYKLW1zZ2lkICJDbG9uZS4uLiIKLW1zZ3N0ciAiQ2xvbmEuLi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNgotbXNnaWQgIk9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiQXByaSBhcmNoaXZpbyBlc2lzdGVudGUiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE5Ci1tc2dpZCAiT3Blbi4uLiIKLW1zZ3N0ciAiQXByaS4uLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzIKLW1zZ2lkICJSZWNlbnQgUmVwb3NpdG9yaWVzIgotbXNnc3RyICJBcmNoaXZpIHJlY2VudGkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTM4Ci1tc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCi1tc2dzdHIgIkFwcmkgYXJjaGl2aW8gcmVjZW50ZToiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzA2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzEzCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgIkltcG9zc2liaWxlIGNyZWFyZSBsJ2FyY2hpdmlvICVzOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTEKLW1zZ2lkICJEaXJlY3Rvcnk6IgotbXNnc3RyICJEaXJlY3Rvcnk6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQyMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1MAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDUyCi1tc2dpZCAiR2l0IFJlcG9zaXRvcnkiCi1tc2dzdHIgIkFyY2hpdmlvIEdpdCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJMYSBkaXJlY3RvcnkgJXMgZXNpc3RlIGdpw6AuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ1MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZpbGUgJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJJbCBmaWxlICVzIGVzaXN0ZSBnacOgLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjYKLW1zZ2lkICJDbG9uZSIKLW1zZ3N0ciAiQ2xvbmEiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc5Ci1tc2dpZCAiU291cmNlIExvY2F0aW9uOiIKLW1zZ3N0ciAiUG9zaXppb25lIHNvcmdlbnRlOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTAKLW1zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKLW1zZ3N0ciAiRGlyZWN0b3J5IGRpIGRlc3RpbmF6aW9uZToiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAyCi1tc2dpZCAiQ2xvbmUgVHlwZToiCi1tc2dzdHIgIlRpcG8gZGkgY2xvbmU6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwOAotbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKLW1zZ3N0ciAiU3RhbmRhcmQgKHZlbG9jZSwgc2VtaS1yaWRvbmRhbnRlLCBjb24gaGFyZGxpbmspIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxNAotbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKLW1zZ3N0ciAiQ29waWEgY29tcGxldGEgKHBpw7kgbGVudG8sIGJhY2t1cCByaWRvbmRhbnRlKSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjAKLW1zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKLW1zZ3N0ciAiU2hhcmVkIChpbCBwacO5IHZlbG9jZSwgbm9uIHJhY2NvbWFuZGF0bywgbmVzc3VuIGJhY2t1cCkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTU2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjAzCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc0OSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxOQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDU4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIKLW1zZ3N0ciAiJXMgbm9uIMOoIHVuIGFyY2hpdmlvIEdpdC4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkyCi1tc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgotbXNnc3RyICJTdGFuZGFyZCDDqCBkaXNwb25pYmlsZSBzb2xvIHBlciBhcmNoaXZpIGxvY2FsaS4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk2Ci1tc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKLW1zZ3N0ciAiU2hhcmVkIMOoIGRpc3BvbmliaWxlIHNvbG8gcGVyIGFyY2hpdmkgbG9jYWxpLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2NhdGlvbiAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIklsIGZpbGUvZGlyZWN0b3J5ICVzIGVzaXN0ZSBnacOgLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjgKLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgY29uZmlndXJhcmUgb3JpZ2luIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MAotbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCi1tc2dzdHIgIkNhbGNvbG8gb2dnZXR0aSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDEKLW1zZ2lkICJidWNrZXRzIgorIzogYWRkLXBhdGNoLmM6MTY0IGFkZC1wYXRjaC5jOjIwNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKIG1zZ3N0ciAiIgorIkFwcGxpY2FyZSBsYSBtb2RpZmljYSBtb2RvIGFsbCdpbmRpY2UgZSBhbGwnYWxiZXJvIGRpIGxhdm9ybyBbeSxuLHEsYSxkIgorIiVzLD9dPyAiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgotbXNnc3RyICJJbXBvc3NpYmlsZSBjb3BpYXJlIG9nZ2V0dGkvaW5mby9hbHRlcm5hdGU6ICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCi1tc2dzdHIgIk5pZW50ZSBkYSBjbG9uYXJlIGRhICVzLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTcKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI5Ci1tc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgotbXNnc3RyICJJbCByYW1vICdtYXN0ZXInIG5vbiDDqCBzdGF0byBpbml6aWFsaXp6YXRvLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MTYKLW1zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgotbXNnc3RyICJJbXBvc3NpYmlsZSB1dGlsaXp6YXJlIGdsaSBoYXJkbGluay4gU2kgcmljb3JyZXLDoCBhbGxhIGNvcGlhLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MjgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDbG9uaW5nIGZyb20gJXMiCi1tc2dzdHIgIkNsb25hemlvbmUgZGEgJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzU5Ci1tc2dpZCAiQ29weWluZyBvYmplY3RzIgotbXNnc3RyICJDb3BpYSBkZWdsaSBvZ2dldHRpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MAotbXNnaWQgIktpQiIKLW1zZ3N0ciAiS2lCIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCi1tc2dzdHIgIkltcG9zc2liaWxlIGNvcGlhcmUgb2dnZXR0bzogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk0Ci1tc2dpZCAiTGlua2luZyBvYmplY3RzIgotbXNnc3RyICJDb2xsZWdhbWVudG8gb2dnZXR0aSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTUKLW1zZ2lkICJvYmplY3RzIgotbXNnc3RyICJvZ2dldHRpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgwMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgotbXNnc3RyICJIYXJkbGluayBpbXBvc3NpYmlsZSBzdWxsJ29nZ2V0dG86ICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg1OAotbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCisjOiBhZGQtcGF0Y2guYzoxNjUgYWRkLXBhdGNoLmM6MjA4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgcmVjdXBlcmFyZSByYW1pIGUgb2dnZXR0aS4gQ29udHJvbGxhcmUgaSBkZXR0YWdsaSBmb3JuaXRpIGRhbGxhICIKLSJjb25zb2xlLiIKKyJBcHBsaWNhcmUgbCdlbGltaW5hemlvbmUgYWxsJ2luZGljZSBlIGFsbCdhbGJlcm8gZGkgbGF2b3JvIFt5LG4scSxhLGQlcyw/XT8gIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg2OQotbXNnaWQgIkNhbm5vdCBmZXRjaCB0YWdzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKKyM6IGFkZC1wYXRjaC5jOjE2NiBhZGQtcGF0Y2guYzoyMDkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYwCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBsZSBldGljaGV0dGUuIENvbnRyb2xsYXJlIGkgZGV0dGFnbGkgZm9ybml0aSBkYWxsYSAiCi0iY29uc29sZS4iCisiQXBwbGljYXJlIHF1ZXN0J2h1bmsgYWxsJ2luZGljZSBlIGFsbCdhbGJlcm8gZGkgbGF2b3JvIFt5LG4scSxhLGQlcyw/XT8gIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg5MwotbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCisjOiBhZGQtcGF0Y2guYzoxNzEKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgZGV0ZXJtaW5hcmUgSEVBRC4gQ29udHJvbGxhcmUgaSBkZXR0YWdsaSBmb3JuaXRpIGRhbGxhIGNvbnNvbGUuIgorInkgLSBhcHBsaWNhIHF1ZXN0J2h1bmsgYWxsJ2luZGljZSBlIGFsbCdhbGJlcm8gZGkgbGF2b3JvXG4iCisibiAtIG5vbiBhcHBsaWNhcmUgcXVlc3QnaHVuayBhbGwnaW5kaWNlIGUgYWxsJ2FsYmVybyBkaSBsYXZvcm9cbiIKKyJxIC0gZXNjaTsgbm9uIGFwcGxpY2FyZSBuw6kgcXVlc3QnaHVuayBuw6kgcXVlbGxpIHJpbWFuZW50aVxuIgorImEgLSBhcHBsaWNhIHF1ZXN0J2h1bmsgZSB0dXR0aSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZVxuIgorImQgLSBub24gYXBwbGljYXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZVxuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgotbXNnc3RyICJJbXBvc3NpYmlsZSByaXB1bGlyZSAlcyIKKyM6IGFkZC1wYXRjaC5jOjIxNAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIGFwcGxpY2EgcXVlc3QnaHVuayBhbGwnYWxiZXJvIGRpIGxhdm9yb1xuIgorIm4gLSBub24gYXBwbGljYXJlIHF1ZXN0J2h1bmsgYWxsJ2FsYmVybyBkaSBsYXZvcm9cbiIKKyJxIC0gZXNjaTsgbm9uIGFwcGxpY2FyZSBuw6kgcXVlc3QnaHVuayBuw6kgcXVlbGxpIHJpbWFuZW50aVxuIgorImEgLSBhcHBsaWNhIHF1ZXN0J2h1bmsgZSB0dXR0aSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZVxuIgorImQgLSBub24gYXBwbGljYXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZVxuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOAotbXNnaWQgIkNsb25lIGZhaWxlZC4iCi1tc2dzdHIgIkNsb25hemlvbmUgbm9uIHJpdXNjaXRhLiIKKyM6IGFkZC1wYXRjaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGwnaGVhZGVyIGh1bmsgJyUuKnMnIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNQotbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKLW1zZ3N0ciAiTm9uIMOoIHN0YXRvIHRyb3ZhdG8gdW4gcmFtbyBwcmVkZWZpbml0by4iCisjOiBhZGQtcGF0Y2guYzozMzcgYWRkLXBhdGNoLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ2hlYWRlciBodW5rIGNvbG9yYXRvICclLipzJyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCi1tc2dzdHIgIkltcG9zc2liaWxlIHJpc29sdmVyZSAlcyBjb21lIHVuYSByZXZpc2lvbmUuIgorIzogYWRkLXBhdGNoLmM6Mzk1Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGRpZmYiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgaWwgZGlmZiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzgKLW1zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAiQ3JlYXppb25lIGRpcmVjdG9yeSBkaSBsYXZvcm8iCisjOiBhZGQtcGF0Y2guYzo0MTQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBkaWZmIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGRpZmYgY29sb3JhdG8iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM5IGxpYi9pbmRleC50Y2w6NjcgbGliL2luZGV4LnRjbDoxMzAKLSM6IGxpYi9pbmRleC50Y2w6MTk4Ci1tc2dpZCAiZmlsZXMiCisjOiBhZGQtcGF0Y2guYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnJXMnIgorbXNnc3RyICJlc2VjdXppb25lIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBhZGQtcGF0Y2guYzo1ODcKK21zZ2lkICJtaXNtYXRjaGVkIG91dHB1dCBmcm9tIGludGVyYWN0aXZlLmRpZmZGaWx0ZXIiCittc2dzdHIgIm91dHB1dCBkaSBpbnRlcmFjdGl2ZS5kaWZmRmlsdGVyIG5vbiBjb3JyaXNwb25kZW50ZSIKKworIzogYWRkLXBhdGNoLmM6NTg4Cittc2dpZCAiIgorIllvdXIgZmlsdGVyIG11c3QgbWFpbnRhaW4gYSBvbmUtdG8tb25lIGNvcnJlc3BvbmRlbmNlXG4iCisiYmV0d2VlbiBpdHMgaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4iCittc2dzdHIgIiIKKyJJbCBmaWx0cm8gZGV2ZSBtYW50ZW5lcmUgdW5hIGNvcnJpc3BvbmRlbnphIHVubyBhIHVub1xuIgorImZyYSBsZSByaWdoZSBkaSBpbnB1dCBlIGRpIG91dHB1dC4iCisKKyM6IGFkZC1wYXRjaC5jOjc2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgY29udGV4dCBsaW5lICMlZCBpblxuIgorIiUuKnMiCittc2dzdHIgIiIKKyJhdHRlc2EgcmlnYSBjb250ZXN0byAlZCBpblxuIgorIiUuKnMiCisKKyM6IGFkZC1wYXRjaC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaHVua3MgZG8gbm90IG92ZXJsYXA6XG4iCisiJS4qc1xuIgorIlx0ZG9lcyBub3QgZW5kIHdpdGg6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorImdsaSBodW5rIG5vbiBzaSBzb3ZyYXBwb25nb25vOlxuIgorIiUuKnNcbiIKKyJcdG5vbiB0ZXJtaW5hIGNvbjpcbiIKKyIlLipzIgorCisjOiBhZGQtcGF0Y2guYzoxMDUyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMgorbXNnaWQgIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlLlxuIgorbXNnc3RyICIiCisiTW9kYWxpdMOgIG1hbnVhbGUgbW9kaWZpY2EgaHVudCAtIHZlZGkgbGEgZmluZSBkZWwgZmlsZSBwZXIgdW5hIGd1aWRhICIKKyJ2ZWxvY2UuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjEwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlYyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKyItLS1cbiIKKyJQZXIgcmltdW92ZXJlICclYycgcmlnaGUsIHJlbmRpbGUgcmlnaGUgJyAnIChjb250ZXN0bykuXG4iCisiUGVyIHJpbXVvdmVyZSAnJWMnIHJpZ2hlLCBlbGltaW5hbGUuXG4iCisiTGUgcmlnaGUgY2hlIGluaXppYW5vIGNvbiAlYyBzYXJhbm5vIHJpbW9zc2UuXG4iCisKKyMuIFRSQU5TTEFUT1JTOiAnaXQnIHJlZmVycyB0byB0aGUgcGF0Y2ggbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBtZXNzYWdlcy4KKyM6IGFkZC1wYXRjaC5jOjEwNzAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTI2Cittc2dpZCAiIgorIklmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlIGdpdmVuIGFuIG9wcG9ydHVuaXR5IHRvXG4iCisiZWRpdCBhZ2Fpbi4gIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgcmVtb3ZlZCwgdGhlbiB0aGUgZWRpdCBpc1xuIgorImFib3J0ZWQgYW5kIHRoZSBodW5rIGlzIGxlZnQgdW5jaGFuZ2VkLlxuIgorbXNnc3RyICIiCisiU2Ugbm9uIHB1w7IgZXNzZXJlIGFwcGxpY2F0YSBzZW56YSBwcm9ibGVtaSwgdGkgc2Fyw6AgZGF0YSBsYSBwb3NzaWJpbGl0w6BcbiIKKyJkaSBtb2RpZmljYXJsYSBkaSBudW92by4gU2UgdHV0dGUgbGUgcmlnaGUgZGVsbCdodW5rIHNhcmFubm8gc3RhdGVcbiIKKyJyaW1vc3NlLCBsYSBtb2RpZmljYSBzYXLDoCBpbnRlcnJvdHRhIGUgbCdodW5rIG5vbiBzYXLDoCBtb2RpZmljYXRvLlxuIgorCisjOiBhZGQtcGF0Y2guYzoxMTAzCittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGwnaGVhZGVyIGh1bmsiCisKKyM6IGFkZC1wYXRjaC5jOjExNDgKK21zZ2lkICInZ2l0IGFwcGx5IC0tY2FjaGVkJyBmYWlsZWQiCittc2dzdHIgIidnaXQgYXBwbHkgLS1jYWNoZWQnIG5vbiByaXVzY2l0byIKKworIy4gVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKyMuIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgdGhhdCBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4gQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKyMuIChzYXlpbmcgIm4iIGZvciAibm8iIGRpc2NhcmRzISkgaWYgdGhlIHRyYW5zbGF0aW9uCisjLiBvZiB0aGUgd29yZCAibm8iIGRvZXMgbm90IHN0YXJ0IHdpdGggbi4KKyMuCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIy4gQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKyMuIChzYXlpbmcgIm4iIGZvciAibm8iIGRpc2NhcmRzISkgaWYgdGhlIHRyYW5zbGF0aW9uCisjLiBvZiB0aGUgd29yZCAibm8iIGRvZXMgbm90IHN0YXJ0IHdpdGggbi4KKyM6IGFkZC1wYXRjaC5jOjEyMTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjM5Cittc2dpZCAiIgorIllvdXIgZWRpdGVkIGh1bmsgZG9lcyBub3QgYXBwbHkuIEVkaXQgYWdhaW4gKHNheWluZyBcIm5vXCIgZGlzY2FyZHMhKSBbeS9uXT8gIgorbXNnc3RyICIiCisiTCdodW5rIG1vZGlmaWNhdG8gbm9uIHB1w7IgZXNzZXJlIGFwcGxpY2F0byBzZW56YSBwcm9ibGVtaS4gTW9kaWZpY2FybG8gZGkgIgorIm51b3ZvIChzZSByaXNwb25kaSBcIm5vXCIsIHNhcsOgIGVsaW1pbmF0byEpIFt5L25dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyNjEKK21zZ2lkICJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCEiCittc2dzdHIgIkdsaSBodW5rIHNlbGV6aW9uYXRpIG5vbiBzaSBhcHBsaWNhbm8gc2VuemEgcHJvYmxlbWkgYWxsJ2luZGljZSEiCisKKyM6IGFkZC1wYXRjaC5jOjEyNjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQzCittc2dpZCAiQXBwbHkgdGhlbSB0byB0aGUgd29ya3RyZWUgYW55d2F5PyAiCittc2dzdHIgIlZ1b2kgY29tdW5xdWUgYXBwbGljYXJsaSBhbGwnYWxiZXJvIGRpIGxhdm9ybz8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjY5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0NgorbXNnaWQgIk5vdGhpbmcgd2FzIGFwcGxpZWQuXG4iCittc2dzdHIgIk5vbiDDqCBzdGF0byBhcHBsaWNhdG8gbnVsbGEuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjEzMjYKK21zZ2lkICIiCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJqIC0gbm9uIGRlY2lkZXJlIGluIG1lcml0byBhIHF1ZXN0J2h1bmssIHZhaSBhbCBzdWNjZXNzaXZvIGh1bmsgcGVyIGN1aSBub24gIgorIsOoIHN0YXRhIHByZXNhIHVuYSBkZWNpc2lvbmVcbiIKKyJKIC0gbm9uIGRlY2lkZXJlIGluIG1lcml0byBhIHF1ZXN0J2h1bmssIHZhaSBhbGwnaHVuayBzdWNjZXNzaXZvXG4iCisiayAtIG5vbiBkZWNpZGVyZSBpbiBtZXJpdG8gYSBxdWVzdCdodW5rLCB2YWkgYWwgcHJlY2VkZW50ZSBodW5rIHBlciBjdWkgbm9uICIKKyLDqCBzdGF0YSBwcmVzYSB1bmEgZGVjaXNpb25lXG4iCisiSyAtIG5vbiBkZWNpZGVyZSBpbiBtZXJpdG8gYSBxdWVzdCdodW5rLCB2YWkgYWxsJ2h1bmsgcHJlY2VkZW50ZVxuIgorImcgLSBzZWxlemlvbmEgdW4gaHVuayBhIGN1aSBhbmRhcmVcbiIKKyIvIC0gY2VyY2EgdW4gaHVuayBjb3JyaXNwb25kZW50ZSBhbGwnZXNwcmVzc2lvbmUgcmVnb2xhcmUgZGF0YVxuIgorInMgLSBzdWRkaXZpZGkgbCdodW5rIGNvcnJlbnRlIGluIGh1bmsgcGnDuSBwaWNjb2xpXG4iCisiZSAtIG1vZGlmaWNhIG1hbnVhbG1lbnRlIGwnaHVuayBjb3JyZW50ZVxuIgorIj8gLSBzdGFtcGEgdW5hIGd1aWRhXG4iCisKKyM6IGFkZC1wYXRjaC5jOjE0NDcgYWRkLXBhdGNoLmM6MTQ1NworbXNnaWQgIk5vIHByZXZpb3VzIGh1bmsiCittc2dzdHIgIk5lc3N1biBodW5rIHByZWNlZGVudGUiCisKKyM6IGFkZC1wYXRjaC5jOjE0NTIgYWRkLXBhdGNoLmM6MTQ2MgorbXNnaWQgIk5vIG5leHQgaHVuayIKK21zZ3N0ciAiTmVzc3VuIGh1bmsgc3VjY2Vzc2l2byIKKworIzogYWRkLXBhdGNoLmM6MTQ2OAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG8iCittc2dzdHIgIk5lc3N1biBhbHRybyBodW5rIGEgY3VpIGFuZGFyZSIKKworIzogYWRkLXBhdGNoLmM6MTQ3OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzcKK21zZ2lkICJnbyB0byB3aGljaCBodW5rICg8cmV0PiB0byBzZWUgbW9yZSk/ICIKK21zZ3N0ciAiYSBxdWFsZSBodW5rIGRlc2lkZXJpIGFuZGFyZSAocHJlbWkgPEludmlvPiBwZXIgdmVkZXJuZSBhbHRyaSk/ICIKKworIzogYWRkLXBhdGNoLmM6MTQ4MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzkKK21zZ2lkICJnbyB0byB3aGljaCBodW5rPyAiCittc2dzdHIgImEgcXVhbGUgaHVuayBkZXNpZGVyaSBhbmRhcmU/ICIKKworIzogYWRkLXBhdGNoLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJyIKK21zZ3N0ciAiTnVtZXJvIG5vbiB2YWxpZG86ICclcyciCisKKyM6IGFkZC1wYXRjaC5jOjE0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU29ycnksIG9ubHkgJWQgaHVuayBhdmFpbGFibGUuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuIgorbXNnc3RyWzBdICJNaSBkaXNwaWFjZSwgw6ggZGlzcG9uaWJpbGUgc29sbyAlZCBodW5rLiIKK21zZ3N0clsxXSAiTWkgZGlzcGlhY2UsIHNvbm8gZGlzcG9uaWJpbGkgc29sbyAlZCBodW5rLiIKKworIzogYWRkLXBhdGNoLmM6MTUwNQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaCIKK21zZ3N0ciAiTmVzc3VuIGFsdHJvIGh1bmsgaW4gY3VpIGVzZWd1aXJlIGxhIHJpY2VyY2EiCisKKyM6IGFkZC1wYXRjaC5jOjE1MTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjIzCittc2dpZCAic2VhcmNoIGZvciByZWdleD8gIgorbXNnc3RyICJjZXJjYXJlIHVuJ2VzcHJlc3Npb25lIHJlZ29sYXJlPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzIgorbXNnc3RyICJFc3ByZXNzaW9uZSByZWdvbGFyZSBkaSByaWNlcmNhICVzIG1hbGZvcm1hdGE6ICVzIgorCisjOiBhZGQtcGF0Y2guYzoxNTQzCittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuIgorbXNnc3RyICJOZXNzdW4gaHVuayBjb3JyaXNwb25kZSBhbCBwYXR0ZXJuIGZvcm5pdG8iCisKKyM6IGFkZC1wYXRjaC5jOjE1NTAKK21zZ2lkICJTb3JyeSwgY2Fubm90IHNwbGl0IHRoaXMgaHVuayIKK21zZ3N0ciAiTWkgZGlzcGlhY2UsIG5vbiBwb3NzbyBzdWRkaXZpZGVyZSBxdWVzdCdodW5rIgorCisjOiBhZGQtcGF0Y2guYzoxNTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVua3MuIgorbXNnc3RyICJTdWRkaXZpc28gaW4gJWQgaHVuay4iCisKKyM6IGFkZC1wYXRjaC5jOjE1NTgKK21zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rIgorbXNnc3RyICJNaSBkaXNwaWFjZSwgbm9uIHBvc3NvIG1vZGlmaWNhcmUgcXVlc3QnaHVuayIKKworIzogYWRkLXBhdGNoLmM6MTYwOQorbXNnaWQgIidnaXQgYXBwbHknIGZhaWxlZCIKK21zZ3N0ciAiJ2dpdCBhcHBseScgbm9uIHJpdXNjaXRvIgorCisjOiBhZHZpY2UuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNoaW50OiAlLipzJXNcbiIKK21zZ3N0ciAiJXNzdWdnZXJpbWVudG86ICUuKnMlc1xuIgorCisjOiBhZHZpY2UuYzoxNjgKK21zZ2lkICJDaGVycnktcGlja2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKyJJbCBjaGVycnkgcGlja2luZyBub24gw6ggcG9zc2liaWxlIHBlcmNow6kgY2kgc29ubyBmaWxlIGRpIGN1aSBub24gw6ggc3RhdG8gIgorImVzZWd1aXRvIGlsIG1lcmdlLiIKKworIzogYWR2aWNlLmM6MTcwCittc2dpZCAiQ29tbWl0dGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKyJJbCBjb21taXQgbm9uIMOoIHBvc3NpYmlsZSBwZXJjaMOpIGNpIHNvbm8gZmlsZSBkaSBjdWkgbm9uIMOoIHN0YXRvIGVzZWd1aXRvIGlsICIKKyJtZXJnZS4iCisKKyM6IGFkdmljZS5jOjE3MgorbXNnaWQgIk1lcmdpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiSWwgbWVyZ2Ugbm9uIMOoIHBvc3NpYmlsZSBwZXJjaMOpIGNpIHNvbm8gZmlsZSBkaSBjdWkgbm9uIMOoIHN0YXRvIGVzZWd1aXRvIGlsICIKKyJtZXJnZS4iCisKKyM6IGFkdmljZS5jOjE3NAorbXNnaWQgIlB1bGxpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiSWwgcHVsbCBub24gw6ggcG9zc2liaWxlIHBlcmNow6kgY2kgc29ubyBmaWxlIGRpIGN1aSBub24gw6ggc3RhdG8gZXNlZ3VpdG8gaWwgIgorIm1lcmdlLiIKKworIzogYWR2aWNlLmM6MTc2Cittc2dpZCAiUmV2ZXJ0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIklsIHJldmVydCBub24gw6ggcG9zc2liaWxlIHBlcmNow6kgY2kgc29ubyBmaWxlIGRpIGN1aSBub24gw6ggc3RhdG8gZXNlZ3VpdG8gaWwgIgorIm1lcmdlLiIKKworIzogYWR2aWNlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkl0IGlzIG5vdCBwb3NzaWJsZSB0byAlcyBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsICVzIHBlcmNow6kgY2kgc29ubyBmaWxlIGRpIGN1aSBub24gw6ggc3RhdG8gZXNlZ3VpdG8gIgorImlsIG1lcmdlLiIKKworIzogYWR2aWNlLmM6MTg2Cittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKK21zZ3N0ciAiIgorIkNvcnJlZ2dpbGkgbmVsbCdhbGJlcm8gZGkgbGF2b3JvLCBxdWluZGkgdXNhICdnaXQgYWRkL3JtIDxmaWxlPi4uLicgY29tZSAiCisiYXBwcm9wcmlhdG8gcGVyIHJpc29sdmVybGkgZWQgZXNlZ3VpIHVuIGNvbW1pdC4iCisKKyM6IGFkdmljZS5jOjE5NAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiBhbiB1bnJlc29sdmVkIGNvbmZsaWN0LiIKK21zZ3N0ciAiRXNjbyBhIGNhdXNhIGRpIHVuIGNvbmZsaXR0byBub24gcmlzb2x0by4iCisKKyM6IGFkdmljZS5jOjE5OSBidWlsdGluL21lcmdlLmM6MTMzNQorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiSWwgbWVyZ2Ugbm9uIMOoIHN0YXRvIGNvbmNsdXNvIChlc2lzdGUgTUVSR0VfSEVBRCkuIgorCisjOiBhZHZpY2UuYzoyMDEKK21zZ2lkICJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIG1lcmdpbmcuIgorbXNnc3RyICJFc2VndWkgaWwgY29tbWl0IGRlbGxlIG1vZGlmaWNoZSBwcmltYSBkaSBlc2VndWlyZSBpbCBtZXJnZS4iCisKKyM6IGFkdmljZS5jOjIwMgorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiB1bmZpbmlzaGVkIG1lcmdlLiIKK21zZ3N0ciAiRXNjbyBhIGNhdXNhIGRpIHVuIG1lcmdlIG5vbiB0ZXJtaW5hdG8uIgorCisjOiBhZHZpY2UuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IHN3aXRjaGluZyB0byAnJXMnLlxuIgorIlxuIgorIllvdSBhcmUgaW4gJ2RldGFjaGVkIEhFQUQnIHN0YXRlLiBZb3UgY2FuIGxvb2sgYXJvdW5kLCBtYWtlIGV4cGVyaW1lbnRhbFxuIgorImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKKyJzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgc3dpdGNoaW5nIGJhY2sgdG8gYSBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCB0byByZXRhaW4gY29tbWl0cyB5b3UgY3JlYXRlLCB5b3UgbWF5XG4iCisiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWMgd2l0aCB0aGUgc3dpdGNoIGNvbW1hbmQuIEV4YW1wbGU6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jIDxuZXctYnJhbmNoLW5hbWU+XG4iCisiXG4iCisiT3IgdW5kbyB0aGlzIG9wZXJhdGlvbiB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtXG4iCisiXG4iCisiVHVybiBvZmYgdGhpcyBhZHZpY2UgYnkgc2V0dGluZyBjb25maWcgdmFyaWFibGUgYWR2aWNlLmRldGFjaGVkSGVhZCB0byAiCisiZmFsc2VcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5vdGE6IGVzZWd1byBpbCBjaGVja291dCBkaSAnJXMnLlxuIgorIlxuIgorIlNlaSBuZWxsbyBzdGF0byAnSEVBRCBzY29sbGVnYXRvJy4gUHVvaSBkYXJlIHVuJ29jY2hpYXRhLCBhcHBvcnRhcmUgIgorIm1vZGlmaWNoZVxuIgorInNwZXJpbWVudGFsaSBlZCBlc2VndWlybmUgaWwgY29tbWl0LCBlIHB1b2kgc2NhcnRhcmUgcXVhbHVucXVlIGNvbW1pdCAiCisiZXNlZ3VpdG9cbiIKKyJpbiBxdWVzdG8gc3RhdG8gc2VuemEgY2hlIGNpw7IgYWJiaWEgYWxjdW5hIGluZmx1ZW56YSBzdWdsaSBhbHRyaSBicmFuY2ggIgorInRvcm5hbmRvXG4iCisic3UgdW4gYnJhbmNoLlxuIgorIlxuIgorIlNlIHZ1b2kgY3JlYXJlIHVuIG51b3ZvIGJyYW5jaCBwZXIgbWFudGVuZXJlIGkgY29tbWl0IGNyZWF0aSwgcHVvaSBmYXJsb1xuIgorIihvcmEgbyBpbiBzZWd1aXRvKSB1c2FuZG8gbCdvcHppb25lIC1jIGNvbiBpbCBjb21hbmRvIHN3aXRjaC4gQWQgZXNlbXBpbzpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPG5vbWUgbnVvdm8gYnJhbmNoPlxuIgorIlxuIgorIk9wcHVyZSBwdW9pIGFubnVsbGFyZSBxdWVzdCdvcGVyYXppb25lIGNvbjpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLVxuIgorIlxuIgorIkRpc2F0dGl2YSBxdWVzdG8gY29uc2lnbGlvIGltcG9zdGFuZG8gbGEgdmFyaWFiaWxlIGRpIGNvbmZpZ3VyYXppb25lXG4iCisiYWR2aWNlLmRldGFjaGVkSGVhZCBhIGZhbHNlXG4iCisiXG4iCisKKyM6IGFsaWFzLmM6NTAKK21zZ2lkICJjbWRsaW5lIGVuZHMgd2l0aCBcXCIKK21zZ3N0ciAibGEgcmlnYSBkaSBjb21hbmRvIHRlcm1pbmEgY29uIFxcIgorCisjOiBhbGlhcy5jOjUxCittc2dpZCAidW5jbG9zZWQgcXVvdGUiCittc2dzdHIgInZpcmdvbGV0dGUgbm9uIGNoaXVzZSIKKworIzogYXBwbHkuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAib3B6aW9uZSBzcGF6aSBiaWFuY2hpICclcycgbm9uIHJpY29ub3NjaXV0YSIKKworIzogYXBwbHkuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIm9wemlvbmUgaWdub3JhIHNwYXppIGJpYW5jaGkgJyVzJyBub24gcmljb25vc2NpdXRhIgorCisjOiBhcHBseS5jOjEzNQorbXNnaWQgIi0tcmVqZWN0IGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICItLXJlamVjdCBlIC0tM3dheSBub24gcG9zc29ubyBlc3NlcmUgdXNhdGkgaW5zaWVtZS4iCisKKyM6IGFwcGx5LmM6MTM3Cittc2dpZCAiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tY2FjaGVkIGUgLS0zd2F5IG5vbiBwb3Nzb25vIGVzc2VyZSB1c2F0aSBpbnNpZW1lLiIKKworIzogYXBwbHkuYzoxNDAKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tM3dheSBhbCBkaSBmdW9yaSBkaSB1biByZXBvc2l0b3J5IgorCisjOiBhcHBseS5jOjE1MQorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0taW5kZXggYWwgZGkgZnVvcmkgZGkgdW4gcmVwb3NpdG9yeSIKKworIzogYXBwbHkuYzoxNTQKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1jYWNoZWQgYWwgZGkgZnVvcmkgZGkgdW4gcmVwb3NpdG9yeSIKKworIzogYXBwbHkuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcHJlcGFyYXJlIGwnZXNwcmVzc2lvbmUgcmVnb2xhcmUgdGltZXN0YW1wICVzIgorCisjOiBhcHBseS5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgInJlZ2V4ZWMgaGEgcmVzdGl0dWl0byAlZCBwZXIgbCdpbnB1dDogJXMiCisKKyM6IGFwcGx5LmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgImltcG9zc2liaWxlIHRyb3ZhcmUgaWwgbm9tZSBkZWwgZmlsZSBuZWxsYSBwYXRjaCBhbGxhIHJpZ2EgJWQiCisKKyM6IGFwcGx5LmM6OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTogZ2l0LWRpZmYgZXJyYXRvIC0gYXR0ZXNvIC9kZXYvbnVsbCwgcmljZXZ1dG8gJXMgYWxsYSByaWdhICVkIgorCisjOiBhcHBseS5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTogZ2l0LWRpZmYgZXJyYXRvIC0gbnVvdm8gbm9tZSBkZWwgZmlsZSBpbmNvbnNpc3RlbnRlIGFsbGEgcmlnYSAlZCIKKworIzogYXBwbHkuYzo5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IGdpdC1kaWZmIGVycmF0byAtIHZlY2NoaW8gbm9tZSBkZWwgZmlsZSBpbmNvbnNpc3RlbnRlIGFsbGEgcmlnYSAlZCIKKworIzogYXBwbHkuYzo5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBnaXQtZGlmZiBlcnJhdG8gLSBhdHRlc28gL2Rldi9udWxsIGFsbGEgcmlnYSAlZCIKKworIzogYXBwbHkuYzo5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIG9uIGxpbmUgJWQ6ICVzIgorbXNnc3RyICJtb2RvIG5vbiB2YWxpZG8gYWxsYSByaWdhICVkOiAlcyIKKworIzogYXBwbHkuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgImluY29uc2lzdGVudCBoZWFkZXIgbGluZXMgJWQgYW5kICVkIgorbXNnc3RyICJyaWdoZSBkaSBpbnRlc3RhemlvbmUgJWQgZSAlZCBpbmNvbnNpc3RlbnRpIgorCisjOiBhcHBseS5jOjEzNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAiIgorImwnaW50ZXN0YXppb25lIGdpdCBkaWZmIG5vbiByaXBvcnRhIGxlIGluZm9ybWF6aW9uaSBzdWwgZmlsZSB1bmEgdm9sdGEgIgorInJpbW9zc28gJWQgY29tcG9uZW50ZSBpbml6aWFsZSBkZWwgcGVyY29yc28gKHJpZ2EgJWQpIgorbXNnc3RyWzFdICIiCisibCdpbnRlc3RhemlvbmUgZ2l0IGRpZmYgbm9uIHJpcG9ydGEgbGUgaW5mb3JtYXppb25pIHN1bCBmaWxlIHVuYSB2b2x0YSAiCisicmltb3NzaSAlZCBjb21wb25lbnRpIGluaXppYWxpIGRlbCBwZXJjb3JzbyAocmlnYSAlZCkiCisKKyM6IGFwcGx5LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gKGxpbmUgJWQpIgorbXNnc3RyICJsJ2ludGVzdGF6aW9uZSBnaXQgZGlmZiBub24gcmlwb3J0YSBsZSBpbmZvcm1hemlvbmkgc3VsIGZpbGUgKHJpZ2EgJWQpIgorCisjOiBhcHBseS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJyZWNvdW50OiByaWdhIGluYXR0ZXNhOiAlLipzIgorCisjOiBhcHBseS5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiZnJhbW1lbnRvIGRpIHBhdGNoIHNlbnphIGludGVzdGF6aW9uZSBhbGxhIHJpZ2EgJWQ6ICUuKnMiCisKKyM6IGFwcGx5LmM6MTc1MworbXNnaWQgIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJpbCBudW92byBmaWxlIGRpcGVuZGUgZGEgdmVjY2hpIGNvbnRlbnV0aSIKKworIzogYXBwbHkuYzoxNzU1Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiaWwgZmlsZSBlbGltaW5hdG8gaGEgYW5jb3JhIGRlaSBjb250ZW51dGkiCisKKyM6IGFwcGx5LmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgInBhdGNoIGNvcnJvdHRhIGFsbGEgcmlnYSAlZCIKKworIzogYXBwbHkuYzoxODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJpbCBudW92byBmaWxlICVzIGRpcGVuZGUgZGEgdmVjY2hpIGNvbnRlbnV0aSIKKworIzogYXBwbHkuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgImlsIGZpbGUgZWxpbWluYXRvICVzIGhhIGFuY29yYSBkZWkgY29udGVudXRpIgorCisjOiBhcHBseS5jOjE4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiKiogYXR0ZW56aW9uZTogaWwgZmlsZSAlcyBkaXZlbnRhIHZ1b3RvIG1hIG5vbiDDqCBlbGltaW5hdG8iCisKKyM6IGFwcGx5LmM6MTk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJwYXRjaCBiaW5hcmlhIGNvcnJvdHRhIGFsbGEgcmlnYSAlZDogJS4qcyIKKworIzogYXBwbHkuYzoyMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAicGF0Y2ggYmluYXJpYSBub24gcmljb25vc2NpdXRhIGFsbGEgcmlnYSAlZCIKKworIzogYXBwbHkuYzoyMTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgInBhdGNoIGNvbiBzb2xpIGNvbnRlbnV0aSBnYXJiYWdlIGFsbGEgcmlnYSAlZCIKKworIzogYXBwbHkuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgY29sbGVnYW1lbnRvIHNpbWJvbGljbyAlcyIKKworIzogYXBwbHkuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBvIGxlZ2dlcmUgJXMiCisKKyM6IGFwcGx5LmM6MjkzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgImluaXppbyBkZWxsYSByaWdhIG5vbiB2YWxpZG86ICclYyciCisKKyM6IGFwcGx5LmM6MzA1NworIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iCittc2dpZF9wbHVyYWwgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iCittc2dzdHJbMF0gIkFwcGxpY2F6aW9uZSBmcmFtbWVudG8gJWQgcml1c2NpdGEgYWxsYSByaWdhICVkIChvZmZzZXQ6ICVkIHJpZ2EpLiIKK21zZ3N0clsxXSAiQXBwbGljYXppb25lIGZyYW1tZW50byAlZCByaXVzY2l0YSBhbGxhIHJpZ2EgJWQgKG9mZnNldDogJWQgcmlnaGUpLiIKKworIzogYXBwbHkuYzozMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIkNvbnRlc3RvIHJpZG90dG8gYSAoJWxkLyVsZCkgcGVyIGFwcGxpY2FyZSBpbCBmcmFtbWVudG8gYWxsYSByaWdhICVkIgorCisjOiBhcHBseS5jOjMwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndoaWxlIHNlYXJjaGluZyBmb3I6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorImR1cmFudGUgbGEgcmljZXJjYSBkaTpcbiIKKyIlLipzIgorCisjOiBhcHBseS5jOjMwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAiZGF0aSBkZWxsYSBwYXRjaCBiaW5hcmlhIG1hbmNhbnRpIHBlciAnJXMnIgorCisjOiBhcHBseS5jOjMxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJldmVyc2UtYXBwbHkgYSBiaW5hcnkgcGF0Y2ggd2l0aG91dCB0aGUgcmV2ZXJzZSBodW5rIHRvICclcyciCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBhcHBsaWNhcmUgdW5hIHBhdGNoIGJpbmFyaWEgYWwgY29udHJhcmlvIHNlbnphIGwnaHVuayBjb250cmFyaW8gIgorInBlciAnJXMnIgorCisjOiBhcHBseS5jOjMxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFwcGx5IGJpbmFyeSBwYXRjaCB0byAnJXMnIHdpdGhvdXQgZnVsbCBpbmRleCBsaW5lIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgYXBwbGljYXJlIHVuYSBwYXRjaCBiaW5hcmlhIGEgJyVzJyBzZW56YSBsYSByaWdhIGQnaW5kaWNlICIKKyJjb21wbGV0YSIKKworIzogYXBwbHkuYzozMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgcGF0Y2ggYXBwbGllcyB0byAnJXMnICglcyksIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IGNvbnRlbnRzLiIKK21zZ3N0ciAiIgorImxhIHBhdGNoIHNpIGFwcGxpY2EgYSAnJXMnICglcyksIGNoZSBub24gY29ycmlzcG9uZGUgYWkgY29udGVudXRpIGNvcnJlbnRpICIKKyJkZWwgZmlsZS4iCisKKyM6IGFwcGx5LmM6MzE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcGF0Y2ggYXBwbGllcyB0byBhbiBlbXB0eSAnJXMnIGJ1dCBpdCBpcyBub3QgZW1wdHkiCittc2dzdHIgImxhIHBhdGNoIHNpIGFwcGxpY2EgYSB1biBmaWxlIHZ1b3RvICclcycgbWEgaWwgZmlsZSBub24gw6ggdnVvdG8iCisKKyM6IGFwcGx5LmM6MzE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbmVjZXNzYXJ5IHBvc3RpbWFnZSAlcyBmb3IgJyVzJyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBsYSBwb3N0aW1tYWdpbmUgJXMgbmVjZXNzYXJpYSBwZXIgJyVzJyIKKworIzogYXBwbHkuYzozMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICJsYSBwYXRjaCBiaW5hcmlhIG5vbiBzaSBhcHBsaWNhIGNvcnJldHRhbWVudGUgYSAnJXMnIgorCisjOiBhcHBseS5jOjMyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKyJsYSBwYXRjaCBiaW5hcmlhIHN1ICclcycgY3JlYSByaXN1bHRhdGkgbm9uIGNvcnJldHRpIChhdHRlc28gJXMsIHJpY2V2dXRvICVzKSIKKworIzogYXBwbHkuYzozMjMwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICJwYXRjaCBub24gcml1c2NpdGE6ICVzOiVsZCIKKworIzogYXBwbHkuYzozMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgY2hlY2tvdXQgZGkgJyVzJyIKKworIzogYXBwbHkuYzozNDA1IGFwcGx5LmM6MzQxNiBhcHBseS5jOjM0NjIgbWlkeC5jOjYxIHNldHVwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICJsZXR0dXJhIGRpICVzIG5vbiByaXVzY2l0YSIKKworIzogYXBwbHkuYzozNDEzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgImxldHR1cmEgZGkgJyVzJyBvbHRyZSB1biBjb2xsZWdhbWVudG8gc2ltYm9saWNvIgorCisjOiBhcHBseS5jOjM0NDIgYXBwbHkuYzozNjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIgorbXNnc3RyICJpbCBwZXJjb3JzbyAlcyDDqCBzdGF0byByaW5vbWluYXRvL2VsaW1pbmF0byIKKworIzogYXBwbHkuYzozNTI4IGFwcGx5LmM6MzcwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzOiBub24gZXNpc3RlIG5lbGwnaW5kaWNlIgorCisjOiBhcHBseS5jOjM1MzcgYXBwbHkuYzozNzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXM6IG5vbiBjb3JyaXNwb25kZSBhbGwnaW5kaWNlIgorCisjOiBhcHBseS5jOjM1NzIKK21zZ2lkICJyZXBvc2l0b3J5IGxhY2tzIHRoZSBuZWNlc3NhcnkgYmxvYiB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisiZGFsIHJlcG9zaXRvcnkgbWFuY2EgaWwgYmxvYiBuZWNlc3NhcmlvIHBlciByaXBpZWdhcmUgc3VsIG1lcmdlIGEgdHJlIHZpZS4iCisKKyM6IGFwcGx5LmM6MzU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIlJpcGllZ28gc3VsIG1lcmdlIGEgdHJlIHZpZS4uLlxuIgorCisjOiBhcHBseS5jOjM1OTEgYXBwbHkuYzozNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaSBjb250ZW51dGkgY29ycmVudGkgZGkgJyVzJyIKKworIzogYXBwbHkuYzozNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmYWxsIGJhY2sgb24gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIlJpcGllZ28gc3VsIG1lcmdlIGEgdHJlIHZpZSBub24gcml1c2NpdG8uLi5cbiIKKworIzogYXBwbHkuYzozNjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyB3aXRoIGNvbmZsaWN0cy5cbiIKK21zZ3N0ciAiUGF0Y2ggYXBwbGljYXRhIGEgJyVzJyBjb24gY29uZmxpdHRpLlxuIgorCisjOiBhcHBseS5jOjM2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIGNsZWFubHkuXG4iCittc2dzdHIgIlBhdGNoICclcycgYXBwbGljYXRhIGNvcnJldHRhbWVudGUuXG4iCisKKyM6IGFwcGx5LmM6MzY1MgorbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgImxhIHJpbW96aW9uZSBkZWxsYSBwYXRjaCBsYXNjaWEgY29udGVudXRpIGRlbCBmaWxlIgorCisjOiBhcHBseS5jOjM3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiVzOiB0aXBvIGVycmF0byIKKworIzogYXBwbHkuYzozNzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMgaGEgaWwgdGlwbyAlbywgYXR0ZXNvICVvIgorCisjOiBhcHBseS5jOjM4NzggYXBwbHkuYzozODgwIHJlYWQtY2FjaGUuYzo4MzAgcmVhZC1jYWNoZS5jOjg1NgorIzogcmVhZC1jYWNoZS5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXRoICclcyciCittc2dzdHIgInBlcmNvcnNvICclcycgbm9uIHZhbGlkbyIKKworIzogYXBwbHkuYzozOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IGVzaXN0ZSBnacOgIG5lbGwnaW5kaWNlIgorCisjOiBhcHBseS5jOjM5MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlczogZXNpc3RlIGdpw6AgbmVsbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyIKKworIzogYXBwbHkuYzozOTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSIKK21zZ3N0ciAiaWwgbnVvdm8gbW9kbyAoJW8pIGRpICVzIG5vbiBjb3JyaXNwb25kZSBhbCB2ZWNjaGlvIG1vZG8gKCVvKSIKKworIzogYXBwbHkuYzozOTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIKK21zZ3N0ciAiaWwgbnVvdm8gbW9kbyAoJW8pIGRpICVzIG5vbiBjb3JyaXNwb25kZSBhbCB2ZWNjaGlvIG1vZG8gKCVvKSBkaSAlcyIKKworIzogYXBwbHkuYzozOTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImFmZmVjdGVkIGZpbGUgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJpbCBmaWxlIGludGVyZXNzYXRvICclcycgc2kgdHJvdmEgb2x0cmUgdW4gY29sbGVnYW1lbnRvIHNpbWJvbGljbyIKKworIzogYXBwbHkuYzozOTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiJXM6IGxhIHBhdGNoIG5vbiBzaSBhcHBsaWNhIGNvcnJldHRhbWVudGUiCisKKyM6IGFwcGx5LmM6NDAwMworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBwYXRjaCAlcy4uLiIKK21zZ3N0ciAiQ29udHJvbGxvIGRlbGxhIHBhdGNoICVzIGluIGNvcnNvLi4uIgorCisjOiBhcHBseS5jOjQwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAibGUgaW5mb3JtYXppb25pIFNIQTEgcGVyIGlsIHNvdHRvbW9kdWxvICVzIHNvbm8gbWFuY2FudGkgbyBpbnV0aWxpIgorCisjOiBhcHBseS5jOjQxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9kZSBjaGFuZ2UgZm9yICVzLCB3aGljaCBpcyBub3QgaW4gY3VycmVudCBIRUFEIgorbXNnc3RyICJtb2RpZmljYSBtb2RvIHBlciAlcyBjaGUgbm9uIMOoIG5lbGwnSEVBRCBjb3JyZW50ZSIKKworIzogYXBwbHkuYzo0MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzICglcykuIgorbXNnc3RyICJsZSBpbmZvcm1hemlvbmkgU0hBMSBzb25vIG1hbmNhbnRpIG8gaW51dGlsaSAoJXMpLiIKKworIzogYXBwbHkuYzo0MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhZGQgJXMgdG8gdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmlsZSBhZ2dpdW5nZXJlICVzIGFsbCdpbmRpY2UgdGVtcG9yYW5lbyIKKworIzogYXBwbHkuYzo0MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggdG8gJXMiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGwnaW5kaWNlIHRlbXBvcmFuZW8gaW4gJXMiCisKKyM6IGFwcGx5LmM6NDI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiCittc2dzdHIgImltcG9zc2liaWxlIHJpbXVvdmVyZSAlcyBkYWxsJ2luZGljZSIKKworIzogYXBwbHkuYzo0Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAicGF0Y2ggY29ycm90dGEgcGVyIGlsIHNvdHRvbW9kdWxvICVzIgorCisjOiBhcHBseS5jOjQzMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGxvIHN0YXQgZGVsIGZpbGUgYXBwZW5hIGNyZWF0byAnJXMnIgorCisjOiBhcHBseS5jOjQzMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlIGZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBsJ2FyY2hpdmlvIGRpIGJhY2t1cCBwZXIgaWwgZmlsZSBhcHBlbmEgY3JlYXRvICVzIgorCisjOiBhcHBseS5jOjQzMTYgYXBwbHkuYzo0NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhZ2dpdW5nZXJlIGxhIHZvY2UgZGVsbGEgY2FjaGUgcGVyICVzIgorCisjOiBhcHBseS5jOjQzNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIHRvICclcyciCittc2dzdHIgInNjcml0dHVyYSBpbiAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYXBwbHkuYzo0MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICJjaGl1c3VyYSBkZWwgZmlsZSAnJXMnIGluIGNvcnNvIgorCisjOiBhcHBseS5jOjQ0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBmaWxlICclcycgY29uIG1vZG8gJW8iCisKKyM6IGFwcGx5LmM6NDUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICJQYXRjaCAlcyBhcHBsaWNhdGEgY29ycmV0dGFtZW50ZS4iCisKKyM6IGFwcGx5LmM6NDUzOQorbXNnaWQgImludGVybmFsIGVycm9yIgorbXNnc3RyICJlcnJvcmUgaW50ZXJubyIKKworIzogYXBwbHkuYzo0NTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAiQXBwbGljYXppb25lIGRlbGxhIHBhdGNoICUlcyBjb24gJWQgZnJhbW1lbnRvIHJlc3BpbnRvLi4uIgorbXNnc3RyWzFdICJBcHBsaWNhemlvbmUgZGVsbGEgcGF0Y2ggJSVzIGNvbiAlZCBmcmFtbWVudGkgcmVzcGludGkuLi4iCisKKyM6IGFwcGx5LmM6NDU1MworIywgYy1mb3JtYXQKK21zZ2lkICJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiCittc2dzdHIgIm5vbWUgZmlsZSAucmVqIHRyb25jYXRvIGEgJS4qcy5yZWoiCisKKyM6IGFwcGx5LmM6NDU2MSBidWlsdGluL2ZldGNoLmM6OTAxIGJ1aWx0aW4vZmV0Y2guYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgJXMiCisKKyM6IGFwcGx5LmM6NDU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICJGcmFtbWVudG8gJWQgYXBwbGljYXRvIGNvcnJldHRhbWVudGUuIgorCisjOiBhcHBseS5jOjQ1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICJGcmFtbWVudG8gJWQgcmVzcGludG8uIgorCisjOiBhcHBseS5jOjQ2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCBwYXRjaCAnJXMnLiIKK21zZ3N0ciAiUGF0Y2ggJyVzJyBpZ25vcmF0YS4iCisKKyM6IGFwcGx5LmM6NDcwNgorbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAiaW5wdXQgbm9uIHJpY29ub3NjaXV0byIKKworIzogYXBwbHkuYzo0NzI2Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBmaWxlIGluZGV4IgorCisjOiBhcHBseS5jOjQ4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGxhIHBhdGNoICclcyc6ICVzIgorCisjOiBhcHBseS5jOjQ5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAiJWQgZXJyb3JlIGRpIHNwYXppIGJpYW5jaGkgc29wcHJlc3NvIgorbXNnc3RyWzFdICIlZCBlcnJvcmkgZGkgc3BhemkgYmlhbmNoaSBzb3BwcmVzc2kiCisKKyM6IGFwcGx5LmM6NDkxNiBhcHBseS5jOjQ5MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQgcmlnYSBhZ2dpdW5nZSBlcnJvcmkgZGkgc3BhemkgYmlhbmNoaS4iCittc2dzdHJbMV0gIiVkIHJpZ2hlIGFnZ2l1bmdvbm8gZXJyb3JpIGRpIHNwYXppIGJpYW5jaGkuIgorCisjOiBhcHBseS5jOjQ5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQgcmlnYSBhcHBsaWNhdGEgZG9wbyBsYSBjb3JyZXppb25lIGRpIGVycm9yaSBkaSBzcGF6aSBiaWFuY2hpLiIKK21zZ3N0clsxXSAiJWQgcmlnaGUgYXBwbGljYXRlIGRvcG8gbGEgY29ycmV6aW9uZSBkaSBlcnJvcmkgZGkgc3BhemkgYmlhbmNoaS4iCisKKyM6IGFwcGx5LmM6NDk0MCBidWlsdGluL2FkZC5jOjYxMiBidWlsdGluL212LmM6MzAxIGJ1aWx0aW4vcm0uYzo0MDYKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIkltcG9zc2liaWxlIHNjcml2ZXJlIGlsIG51b3ZvIGZpbGUgaW5kZXgiCisKKyM6IGFwcGx5LmM6NDk2OAorbXNnaWQgImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgIm5vbiBhcHBsaWNhcmUgbGUgbW9kaWZpY2hlIGNvcnJpc3BvbmRlbnRpIGFsIHBlcmNvcnNvIHNwZWNpZmljYXRvIgorCisjOiBhcHBseS5jOjQ5NzEKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJhcHBsaWNhIGxlIG1vZGlmaWNoZSBjb3JyaXNwb25kZW50aSBhbCBwZXJjb3JzbyBzcGVjaWZpY2F0byIKKworIzogYXBwbHkuYzo0OTczIGJ1aWx0aW4vYW0uYzoyMjYwCittc2dpZCAibnVtIgorbXNnc3RyICJudW0iCisKKyM6IGFwcGx5LmM6NDk3NAorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICJyaW11b3ZpIDxudW0+IGJhcnJlIGluaXppYWxpIGRhaSBwZXJjb3JzaSBkaWZmIHRyYWRpemlvbmFsaSIKKworIzogYXBwbHkuYzo0OTc3Cittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAiaWdub3JhIGxlIGFnZ2l1bnRlIGNyZWF0ZSBkYWxsYSBwYXRjaCIKKworIzogYXBwbHkuYzo0OTc5Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICIiCisiaW52ZWNlIGRpIGFwcGxpY2FyZSBsYSBwYXRjaCwgdmlzdWFsaXp6YSBsJ291dHB1dCBkaSBkaWZmc3RhdCBwZXIgbCdpbnB1dCIKKworIzogYXBwbHkuYzo0OTgzCittc2dpZCAic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgaWwgbnVtZXJvIGRpIHJpZ2hlIGFnZ2l1bnRlIGVkIGVsaW1pbmF0ZSBpbiBub3RhemlvbmUgZGVjaW1hbGUiCisKKyM6IGFwcGx5LmM6NDk4NQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgImludmVjZSBkaSBhcHBsaWNhcmUgbGEgcGF0Y2gsIHZpc3VhbGl6emEgdW4gcmlhc3N1bnRvIHBlciBsJ2lucHV0IgorCisjOiBhcHBseS5jOjQ5ODcKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIgorbXNnc3RyICJpbnZlY2UgZGkgYXBwbGljYXJlIGxhIHBhdGNoLCB2ZXJpZmljYSBzZSBwdcOyIGVzc2VyZSBhcHBsaWNhdGEiCisKKyM6IGFwcGx5LmM6NDk4OQorbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAiYXNzaWN1cmEgY2hlIGxhIHBhdGNoIHNpYSBhcHBsaWNhYmlsZSBhbGwnaW5kaWNlIGNvcnJlbnRlIgorCisjOiBhcHBseS5jOjQ5OTEKK21zZ2lkICJtYXJrIG5ldyBmaWxlcyB3aXRoIGBnaXQgYWRkIC0taW50ZW50LXRvLWFkZGAiCittc2dzdHIgImNvbnRyYXNzZWduYSBpIG51b3ZpIGZpbGUgY29uIGBnaXQgYWRkIC0taW50ZW50LXRvLWFkZGAiCisKKyM6IGFwcGx5LmM6NDk5MworbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJhcHBsaWNhIHVuYSBwYXRjaCBzZW56YSBtb2RpZmljYXJlIGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYXBwbHkuYzo0OTk1Cittc2dpZCAiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIKK21zZ3N0ciAiIgorImFjY2V0dGEgdW5hIHBhdGNoIGNoZSBhcHBvcnRhIG1vZGlmaWNoZSBhbCBkaSBmdW9yaSBkZWxsJ2FyZWEgZGkgbGF2b3JvIgorCisjOiBhcHBseS5jOjQ5OTgKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAiYXBwbGljYSBhbmNoZSBsYSBwYXRjaCAoZGEgdXNhcmUgY29uIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCisKKyM6IGFwcGx5LmM6NTAwMAorbXNnaWQgImF0dGVtcHQgdGhyZWUtd2F5IG1lcmdlIGlmIGEgcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgInByb3ZhIHVuIG1lcmdlIGEgdHJlIHZpZSBzZSBsYSBwYXRjaCBub24gc2kgYXBwbGljYSBjb3JyZXR0YW1lbnRlIgorCisjOiBhcHBseS5jOjUwMDIKK21zZ2lkICJidWlsZCBhIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiBlbWJlZGRlZCBpbmRleCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiY29tcGlsYSB1biBpbmRleCB0ZW1wb3JhbmVvIGJhc2F0byBzdWxsZSBpbmZvcm1hemlvbmkgaW5kaWNlIGluY2x1c2UiCisKKyM6IGFwcGx5LmM6NTAwNSBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTczIGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjQKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiaSBwZXJjb3JzaSBzb25vIHNlcGFyYXRpIGNvbiB1biBjYXJhdHRlcmUgTlVMIgorCisjOiBhcHBseS5jOjUwMDcKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgImFzc2ljdXJhIGNoZSBhbG1lbm8gPG4+IHJpZ2hlIGRpIGNvbnRlc3RvIGNvcnJpc3BvbmRhbm8iCisKKyM6IGFwcGx5LmM6NTAwOCBidWlsdGluL2FtLmM6MjIzOSBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk4CisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMCBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDU3IGJ1aWx0aW4vcmViYXNlLmM6MTUwOAorbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAiYXppb25lIgorCisjOiBhcHBseS5jOjUwMDkKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAicmlsZXZhIHJpZ2hlIG51b3ZlIG8gbW9kaWZpY2F0ZSBjaGUgaGFubm8gZXJyb3JpIGRpIHNwYXppIGJpYW5jaGkiCisKKyM6IGFwcGx5LmM6NTAxMiBhcHBseS5jOjUwMTUKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICJpZ25vcmEgbW9kaWZpY2hlIGFnbGkgc3BhemkgYmlhbmNoaSBkdXJhbnRlIGxhIHJpY2VyY2EgZGVpIGNvbnRlc3RpIgorCisjOiBhcHBseS5jOjUwMTgKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAiYXBwbGljYSBsYSBwYXRjaCBpbiBtYW5pZXJhIGludmVyc2EiCisKKyM6IGFwcGx5LmM6NTAyMAorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICJub24gYXNwZXR0YXJlIGFsbWVubyB1bmEgcmlnYSBkaSBjb250ZXN0byIKKworIzogYXBwbHkuYzo1MDIyCittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgImxhc2NpYSBpIGZyYW1tZW50aSByZXNwaW50aSBuZWkgZmlsZSAqLnJlaiBjb3JyaXNwb25kZW50aSIKKworIzogYXBwbHkuYzo1MDI0Cittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgImNvbnNlbnRpIGxhIHNvdnJhcHBvc2l6aW9uZSBkZWkgZnJhbW1lbnRpIgorCisjOiBhcHBseS5jOjUwMjUgYnVpbHRpbi9hZGQuYzozMjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMgorIzogYnVpbHRpbi9jb21taXQuYzoxMzYwIGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk4IGJ1aWx0aW4vZnNjay5jOjc3NAorIzogYnVpbHRpbi9sb2cuYzoyMTY2IGJ1aWx0aW4vbXYuYzoxMjMgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICJ2aXN1YWxpenphIHVsdGVyaW9yaSBkZXR0YWdsaSIKKworIzogYXBwbHkuYzo1MDI3Cittc2dpZCAidG9sZXJhdGUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIGZpbGUiCittc2dzdHIgIiIKKyJ0b2xsZXJhIGNhcmF0dGVyZSBmaW5lIHJpZ2EgcmlsZXZhdG8gZXJyb25lYW1lbnRlIGNvbWUgbWFuY2FudGUgYWxsYSBmaW5lICIKKyJkZWwgZmlsZSIKKworIzogYXBwbHkuYzo1MDMwCittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICIiCisibm9uIGZhcmUgYWZmaWRhbWVudG8gc3VsIG51bWVybyBkaSByaWdoZSBuZWxsZSBpbnRlc3RhemlvbmkgZGVpIGZyYW1tZW50aSIKKworIzogYXBwbHkuYzo1MDMyIGJ1aWx0aW4vYW0uYzoyMjQ4Cittc2dpZCAicm9vdCIKK21zZ3N0ciAicmFkaWNlIgorCisjOiBhcHBseS5jOjUwMzMKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICJhbnRlcG9uaSA8cmFkaWNlPiBhIHR1dHRpIGkgbm9taSBmaWxlIgorCisjOiBhcmNoaXZlLmM6MTQKK21zZ2lkICJnaXQgYXJjaGl2ZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgYXJjaGl2ZSBbPG9wemlvbmk+XSA8YWxiZXJvPiBbPHBlcmNvcnNvPi4uLl0iCisKKyM6IGFyY2hpdmUuYzoxNQorbXNnaWQgImdpdCBhcmNoaXZlIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MTYKK21zZ2lkICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwb3NpdG9yeT4gWy0tZXhlYyA8Y29tYW5kbz5dIFs8b3B6aW9uaT5dIDxhbGJlcm8+ICIKKyJbPHBlcmNvcnNvPi4uLl0iCisKKyM6IGFyY2hpdmUuYzoxNworbXNnaWQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvc2l0b3J5PiBbLS1leGVjIDxjb21hbmRvPl0gLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MzcyIGJ1aWx0aW4vYWRkLmM6MTgxIGJ1aWx0aW4vYWRkLmM6NTg4IGJ1aWx0aW4vcm0uYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAibG8gc3BlY2lmaWNhdG9yZSBwZXJjb3JzbyAnJXMnIG5vbiBjb3JyaXNwb25kZSBhZCBhbGN1biBmaWxlIgorCisjOiBhcmNoaXZlLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmOiAlLipzIgorbXNnc3RyICJyaWZlcmltZW50byBub24gZXNpc3RlbnRlOiAlLipzIgorCisjOiBhcmNoaXZlLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAlcyIKK21zZ3N0ciAiJXMgbm9uIMOoIHVuIG5vbWUgb2dnZXR0byB2YWxpZG8iCisKKyM6IGFyY2hpdmUuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdHJlZSBvYmplY3Q6ICVzIgorbXNnc3RyICIlcyBub24gw6ggdW4gb2dnZXR0byBhbGJlcm8gdmFsaWRvIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgImxhIGRpcmVjdG9yeSBkaSBsYXZvcm8gY29ycmVudGUgbm9uIMOoIHRyYWNjaWF0YSIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImZtdCIKK21zZ3N0ciAiZm10IgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgImZvcm1hdG8gYXJjaGl2aW8iCisKKyM6IGFyY2hpdmUuYzo0NTggYnVpbHRpbi9sb2cuYzoxNjUzCittc2dpZCAicHJlZml4IgorbXNnc3RyICJwcmVmaXNzbyIKKworIzogYXJjaGl2ZS5jOjQ1OQorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgImFudGVwb25pIDxwcmVmaXNzbz4gYSBvZ25pIG5vbWUgcGVyY29yc28gbmVsbCdhcmNoaXZpbyIKKworIzogYXJjaGl2ZS5jOjQ2MCBidWlsdGluL2JsYW1lLmM6ODYxIGJ1aWx0aW4vYmxhbWUuYzo4NjUgYnVpbHRpbi9ibGFtZS5jOjg2NgorIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNyBidWlsdGluL2NvbmZpZy5jOjEzMCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjQgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjggYnVpbHRpbi9ncmVwLmM6ODg3CisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjAgYnVpbHRpbi9scy1maWxlcy5jOjU2MworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMiBidWlsdGluL25vdGVzLmM6NTc4IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIzCisjOiBwYXJzZS1vcHRpb25zLmg6MTkwCittc2dpZCAiZmlsZSIKIG1zZ3N0ciAiZmlsZSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjgKLW1zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKLW1zZ3N0ciAiQXR0aXZhemlvbmUgaW5pemlhbGUgbm9uIHJpdXNjaXRhLiIKKyM6IGFyY2hpdmUuYzo0NjEgYnVpbHRpbi9hcmNoaXZlLmM6OTAKK21zZ2lkICJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiCittc2dzdHIgInNjcml2aSBsJ2FyY2hpdmlvIGluIHF1ZXN0byBmaWxlIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTEKLW1zZ2lkICJPcGVuIgotbXNnc3RyICJBcHJpIgorIzogYXJjaGl2ZS5jOjQ2MworbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImxlZ2dpIGlsIGZpbGUgLmdpdGF0dHJpYnV0ZXMgbmVsbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDIxCi1tc2dpZCAiUmVwb3NpdG9yeToiCi1tc2dzdHIgIkFyY2hpdmlvOiIKKyM6IGFyY2hpdmUuYzo0NjQKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICJlbGVuY2EgaSBmaWxlIGFyY2hpdmlhdGkgc3VsbG8gc3RhbmRhcmQgZXJyb3IiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgotbXNnc3RyICJJbXBvc3NpYmlsZSBhY2NlZGVyZSBhbGwnYXJjaGl2aW8gJXM6IgorIzogYXJjaGl2ZS5jOjQ2NQorbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgInNhbHZhIHNvbGFtZW50ZSIKIAotIzogbGliL2Nob29zZV9yZXYudGNsOjUzCi1tc2dpZCAiVGhpcyBEZXRhY2hlZCBDaGVja291dCIKLW1zZ3N0ciAiUXVlc3RhIHJldmlzaW9uZSBhdHRpdmEgc3RhY2NhdGEiCisjOiBhcmNoaXZlLmM6NDY2Cittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICJjb21wcmltaSBwacO5IHZlbG9jZW1lbnRlIgogCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKLW1zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKLW1zZ3N0ciAiRXNwcmVzc2lvbmUgZGkgcmV2aXNpb25lOiIKKyM6IGFyY2hpdmUuYzo0NzQKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgImNvbXByaW1pIG1lZ2xpbyIKIAotIzogbGliL2Nob29zZV9yZXYudGNsOjc0Ci1tc2dpZCAiTG9jYWwgQnJhbmNoIgotbXNnc3RyICJSYW1vIGxvY2FsZSIKKyM6IGFyY2hpdmUuYzo0NzcKK21zZ2lkICJsaXN0IHN1cHBvcnRlZCBhcmNoaXZlIGZvcm1hdHMiCittc2dzdHIgImVsZW5jYSBpIGZvcm1hdGkgYXJjaGl2aW8gc3VwcG9ydGF0aSIKIAotIzogbGliL2Nob29zZV9yZXYudGNsOjc5Ci1tc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgotbXNnc3RyICJEdXBsaWNhdG8gbG9jYWxlIGRpIHJhbW8gcmVtb3RvIgorIzogYXJjaGl2ZS5jOjQ3OSBidWlsdGluL2FyY2hpdmUuYzo5MSBidWlsdGluL2Nsb25lLmM6MTEzIGJ1aWx0aW4vY2xvbmUuYzoxMTYKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTExCittc2dpZCAicmVwbyIKK21zZ3N0ciAicmVwb3NpdG9yeSIKIAotIzogbGliL2Nob29zZV9yZXYudGNsOjg0IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzgKLW1zZ2lkICJUYWciCi1tc2dzdHIgIkV0aWNoZXR0YSIKKyM6IGFyY2hpdmUuYzo0ODAgYnVpbHRpbi9hcmNoaXZlLmM6OTIKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAicmVjdXBlcmEgbCdhcmNoaXZpbyBkYWwgcmVwb3NpdG9yeSByZW1vdG8gPHJlcG9zaXRvcnk+IgogCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzE3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCByZXZpc2lvbjogJXMiCi1tc2dzdHIgIlJldmlzaW9uZSBub24gdmFsaWRhOiAlcyIKKyM6IGFyY2hpdmUuYzo0ODEgYnVpbHRpbi9hcmNoaXZlLmM6OTMgYnVpbHRpbi9kaWZmdG9vbC5jOjcxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQ5OAorbXNnaWQgImNvbW1hbmQiCittc2dzdHIgImNvbWFuZG8iCiAKLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMzgKLW1zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCi1tc2dzdHIgIk5lc3N1bmEgcmV2aXNpb25lIHNlbGV6aW9uYXRhLiIKKyM6IGFyY2hpdmUuYzo0ODIgYnVpbHRpbi9hcmNoaXZlLmM6OTQKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgInBlcmNvcnNvIGFsIGNvbWFuZG8gcmVtb3RvIGdpdC11cGxvYWQtYXJjaGl2ZSIKIAotIzogbGliL2Nob29zZV9yZXYudGNsOjM0NgotbXNnaWQgIlJldmlzaW9uIGV4cHJlc3Npb24gaXMgZW1wdHkuIgotbXNnc3RyICJMJ2VzcHJlc3Npb25lIGRpIHJldmlzaW9uZSDDqCB2dW90YS4iCisjOiBhcmNoaXZlLmM6NDg5Cittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1yZW1vdGUiCittc2dzdHIgIk9wemlvbmUgLS1yZW1vdGUgaW5hdHRlc2EiCiAKLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzEKLW1zZ2lkICJVcGRhdGVkIgotbXNnc3RyICJBZ2dpb3JuYXRvIgorIzogYXJjaGl2ZS5jOjQ5MQorbXNnaWQgIk9wdGlvbiAtLWV4ZWMgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tcmVtb3RlIgorbXNnc3RyICJMJ29wemlvbmUgLS1leGVjIHB1w7IgZXNzZXJlIHVzYXRhIHNvbG8gY29uIC0tcmVtb3RlIgogCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTU5Ci1tc2dpZCAiVVJMIgotbXNnc3RyICJVUkwiCisjOiBhcmNoaXZlLmM6NDkzCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIk9wemlvbmUgLS1vdXRwdXQgaW5hdHRlc2EiCiAKLSM6IGxpYi9jb21taXQudGNsOjkKKyM6IGFyY2hpdmUuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBhcmNoaXZlIGZvcm1hdCAnJXMnIgorbXNnc3RyICJGb3JtYXRvIGFyY2hpdmlvICclcycgc2Nvbm9zY2l1dG8iCisKKyM6IGFyY2hpdmUuYzo1MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXJndW1lbnQgbm90IHN1cHBvcnRlZCBmb3IgZm9ybWF0ICclcyc6IC0lZCIKK21zZ3N0ciAiQXJnb21lbnRvIG5vbiBzdXBwb3J0YXRvIHBlciBpbCBmb3JtYXRvICclcyc6IC0lZCIKKworIzogYXJjaGl2ZS10YXIuYzoxMjUgYXJjaGl2ZS16aXAuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmVhbSBibG9iICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBsbyBzdHJlYW1pbmcgZGVsIGJsb2IgJXMiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjY2IGFyY2hpdmUtemlwLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiCittc2dzdHIgIm1vZG8gZmlsZSBub24gc3VwcG9ydGF0bzogMCVvIChTSEExOiAlcykiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjkzIGFyY2hpdmUtemlwLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlICVzIgorCisjOiBhcmNoaXZlLXRhci5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJyVzJyBmaWx0ZXIiCittc2dzdHIgImltcG9zc2liaWxlIGF2dmlhcmUgaWwgZmlsdHJvICclcyciCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY4Cittc2dpZCAidW5hYmxlIHRvIHJlZGlyZWN0IGRlc2NyaXB0b3IiCittc2dzdHIgImltcG9zc2liaWxlIHJpZGlyZXppb25hcmUgaWwgZGVzY3JpdHRvcmUiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsdGVyIHJlcG9ydGVkIGVycm9yIgorbXNnc3RyICJpbCBmaWx0cm8gJyVzJyBoYSBzZWduYWxhdG8gdW4gZXJyb3JlIgorCisjOiBhcmNoaXZlLXppcC5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoIGlzIG5vdCB2YWxpZCBVVEYtODogJXMiCittc2dzdHIgImlsIHBlcmNvcnNvIG5vbiDDqCBjb2RpZmljYXRvIHZhbGlkYW1lbnRlIGluIFVURi04OiAlcyIKKworIzogYXJjaGl2ZS16aXAuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCB0b28gbG9uZyAoJWQgY2hhcnMsIFNIQTE6ICVzKTogJXMiCittc2dzdHIgInBlcmNvcnNvIHRyb3BwbyBsdW5nbyAoJWQgY2FyYXR0ZXJpLCBTSEExOiAlcyk6ICVzIgorCisjOiBhcmNoaXZlLXppcC5jOjQ4MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlIGVycm9yICglZCkiCittc2dzdHIgImVycm9yZSBkZWZsYXRlICglZCkiCisKKyM6IGFyY2hpdmUtemlwLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWVzdGFtcCB0b28gbGFyZ2UgZm9yIHRoaXMgc3lzdGVtOiAlPFBSSXVNQVg+IgorbXNnc3RyICJ0aW1lc3RhbXAgdHJvcHBvIGdyYW5kZSBwZXIgcXVlc3RvIHNpc3RlbWE6ICU8UFJJdU1BWD4iCisKKyM6IGF0dHIuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZSIKK21zZ3N0ciAiJS4qcyBub24gw6ggdW4gbm9tZSBhdHRyaWJ1dG8gdmFsaWRvIgorCisjOiBhdHRyLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG5vdCBhbGxvd2VkOiAlczolZCIKK21zZ3N0ciAiJXMgbm9uIGNvbnNlbnRpdG86ICVzOiVkIgorCisjOiBhdHRyLmM6NDA5CiBtc2dpZCAiIgotIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCi0iXG4iCi0iWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKLSJ0byBhbWVuZC5cbiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKIG1zZ3N0ciAiIgotIk5vbiBjJ8OoIG5pZW50ZSBkYSBjb3JyZWdnZXJlLlxuIgotIlxuIgotIlN0YWkgcGVyIGNyZWFyZSBsYSByZXZpc2lvbmUgaW5pemlhbGUuIE5vbiBlc2lzdGUgdW5hIHJldmlzaW9uZSBwcmVjZWRlbnRlICIKLSJkYSBjb3JyZWdnZXJlLlxuIgorIkkgcGF0dGVybiBuZWdhdGl2aSBzb25vIGlnbm9yYXRpIG5lZ2xpIGF0dHJpYnV0aSBnaXRcbiIKKyJVc2EgJ1xcIScgcGVyIHNwZWNpZmljYXJlIGxldHRlcmFsbWVudGUgdW4gcHVudG8gZXNjbGFtYXRpdm8gaW5pemlhbGUuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxOAorIzogYmlzZWN0LmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiCittc2dzdHIgIkNvbnRlbnV0byBtYWwgcmFjY2hpdXNvIGZyYSB2aXJnb2xldHRlIG5lbCBmaWxlICclcyc6ICVzIgorCisjOiBiaXNlY3QuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSB1bid1bHRlcmlvcmUgYmlzZXppb25lIVxuIgorCisjOiBiaXNlY3QuYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgY29tbWl0IG5hbWUgJXMiCittc2dzdHIgIiVzIG5vbiDDqCB1biBub21lIGNvbW1pdCB2YWxpZG8iCisKKyM6IGJpc2VjdC5jOjc3MAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCi0iXG4iCi0iWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKLSJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgotImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgogbXNnc3RyICIiCi0iTm9uIMOoIHBvc3NpYmlsZSBlZmZldHR1YXJlIHVuYSBjb3JyZXppb25lIGR1cmFudGUgdW5hIGZ1c2lvbmUuXG4iCi0iXG4iCi0iSW4gcXVlc3RvIG1vbWVudG8gc2kgc3RhIGVmZmV0dHVhbmRvIHVuYSBmdXNpb25lIGNoZSBub24gw6ggc3RhdGEgZGVsIHR1dHRvICIKLSJjb21wbGV0YXRhLiBOb24gcHVvaSBjb3JyZWdnZXJlIGxhIHJldmlzaW9uZSBwcmVjZWRlbnRlIGEgbWVubyBjaGUgcHJpbWEgdHUgIgotIm5vbiBpbnRlcnJvbXBhIGwnb3BlcmF6aW9uZSBkaSBmdXNpb25lIGluIGNvcnNvLlxuIgorIkxhIGJhc2UgZGVsIG1lcmdlICVzIG5vbiBmdW56aW9uYS5cbiIKKyJDacOyIHNpZ25pZmljYSBjaGUgaWwgYnVnIMOoIHN0YXRvIGNvcnJldHRvIGZyYSAlcyBlIFslc10uXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjQ4Ci1tc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgotbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBpbCBjYXJpY2FtZW50byBkZWkgZGF0aSBkZWxsYSByZXZpc2lvbmUgZGEgY29ycmVnZ2VyZToiCi0KLSM6IGxpYi9jb21taXQudGNsOjc1Ci1tc2dpZCAiVW5hYmxlIHRvIG9idGFpbiB5b3VyIGlkZW50aXR5OiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgb3R0ZW5lcmUgbGEgdHVhIGlkZW50aXTDoDoiCi0KLSM6IGxpYi9jb21taXQudGNsOjgwCi1tc2dpZCAiSW52YWxpZCBHSVRfQ09NTUlUVEVSX0lERU5UOiIKLW1zZ3N0ciAiR0lUX0NPTU1JVFRFUl9JREVOVCBub24gdmFsaWRhOiIKLQotIzogbGliL2NvbW1pdC50Y2w6MTI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCi1tc2dzdHIgImF0dGVuemlvbmU6IFRjbCBub24gc3VwcG9ydGEgbGEgY29kaWZpY2EgJyVzJy4iCi0KLSM6IGxpYi9jb21taXQudGNsOjE0OQorIzogYmlzZWN0LmM6Nzc1CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgbmV3LlxuIgorIlRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgogbXNnc3RyICIiCi0iTCd1bHRpbW8gc3RhdG8gYW5hbGl6emF0byBub24gY29ycmlzcG9uZGUgYWxsbyBzdGF0byBkZWxsJ2FyY2hpdmlvLlxuIgotIlxuIgotIlVuIGFsdHJvIHByb2dyYW1tYSBHaXQgaGEgbW9kaWZpY2F0byBxdWVzdG8gYXJjaGl2aW8gZGFsbCd1bHRpbWEgYW5hbGlzaS4gIgotIkJpc29nbmEgZWZmZXR0dWFyZSB1bmEgbnVvdmEgYW5hbGlzaSBwcmltYSBkaSBwb3RlciBjcmVhcmUgdW5hIG51b3ZhICIKLSJyZXZpc2lvbmUuXG4iCi0iXG4iCi0iTGEgbnVvdmEgYW5hbGlzaSBjb21pbmNlcsOgIG9yYS5cbiIKKyJMYSBiYXNlIGRlbCBtZXJnZSAlcyDDqCBudW92YS5cbiIKKyJMYSBwcm9wcmlldMOgIMOoIHN0YXRhIG1vZGlmaWNhdGEgZnJhICVzIGUgWyVzXS5cbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTcyCi0jLCB0Y2wtZm9ybWF0CisjOiBiaXNlY3QuYzo3ODAKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCi0iXG4iCi0iRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCi0iYmVmb3JlIGNvbW1pdHRpbmcuXG4iCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKIG1zZ3N0ciAiIgotIk5vbiDDqCBwb3NzaWJpbGUgY3JlYXJlIHVuYSByZXZpc2lvbmUgY29uIGZpbGUgbm9uIHNvdHRvcG9zdGkgYSBmdXNpb25lLlxuIgotIlxuIgotIklsIGZpbGUgJXMgcHJlc2VudGEgZGVpIGNvbmZsaXR0aS4gRGV2aSByaXNvbHZlcmxpIGUgcHJlcGFyYXJlIGlsIGZpbGUgcGVyICIKLSJjcmVhcmUgdW5hIG51b3ZhIHJldmlzaW9uZSBwcmltYSBkaSBlZmZldHR1YXJlIHF1ZXN0YSBhemlvbmUuXG4iCisiTGEgYmFzZSBkZWwgbWVyZ2UgJXMgw6ggJXMuXG4iCisiQ2nDsiBzaWduaWZpY2EgY2hlIGlsIHByaW1vIGNvbW1pdCAnJXMnIMOoIGZyYSAlcyBlIFslc10uXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE4MAotIywgdGNsLWZvcm1hdAorIzogYmlzZWN0LmM6Nzg4CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJVbmtub3duIGZpbGUgc3RhdGUgJXMgZGV0ZWN0ZWQuXG4iCi0iXG4iCi0iRmlsZSAlcyBjYW5ub3QgYmUgY29tbWl0dGVkIGJ5IHRoaXMgcHJvZ3JhbS5cbiIKKyJTb21lICVzIHJldnMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlICVzIHJldi5cbiIKKyJnaXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS5cbiIKKyJNYXliZSB5b3UgbWlzdG9vayAlcyBhbmQgJXMgcmV2cz9cbiIKIG1zZ3N0ciAiIgotIlN0YXRvIGRpIGZpbGUgJXMgc2Nvbm9zY2l1dG8uXG4iCi0iXG4iCi0iUXVlc3RvIHByb2dyYW1tYSBub24gcHXDsiBjcmVhcmUgdW5hIHJldmlzaW9uZSBjb250ZW5lbnRlIGlsIGZpbGUgJXMuXG4iCisiQWxjdW5lIHJldmlzaW9uaSAlcyBub24gc29ubyBhbnRlbmF0ZSBkZWxsYSByZXZpc2lvbmUgJXMuXG4iCisiZ2l0IGJpc2VjdCBub24gcHXDsiBmdW56aW9uYXJlIGNvcnJldHRhbWVudGUgaW4gcXVlc3RvIGNhc28uXG4iCisiRm9yc2UgaGFpIGNvbmZ1c28gbGUgcmV2aXNpb25pICVzIGNvbiBxdWVsbGUgJXM/XG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE4OAorIzogYmlzZWN0LmM6ODAxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorInRoZSBtZXJnZSBiYXNlIGJldHdlZW4gJXMgYW5kIFslc10gbXVzdCBiZSBza2lwcGVkLlxuIgorIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCAlcyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgJXMuXG4iCisiV2UgY29udGludWUgYW55d2F5LiIKIG1zZ3N0ciAiIgotIk5lc3N1bmEgbW9kaWZpY2EgcGVyIGxhIG51b3ZhIHJldmlzaW9uZS5cbiIKLSJcbiIKLSJEZXZpIHByZXBhcmFyZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSBhbG1lbm8gMSBmaWxlIHByaW1hIGRpIGVmZmV0dHVhcmUgIgotInF1ZXN0YSBvcGVyYXppb25lLlxuIgorImxhIGJhc2UgZGVsIG1lcmdlIGZyYSAlcyBlIFslc10gZGV2J2Vzc2VyZSBzYWx0YXRhLlxuIgorIk5vbiDDqCBwb3NzaWJpbGUgZXNzZXJlIHNpY3VyaSBjaGUgaWwgcHJpbW8gY29tbWl0ICVzIHNpYSBmcmEgJXMgZSAlcy5cbiIKKyJDb250aW51byBjb211bnF1ZS4iCiAKLSM6IGxpYi9jb21taXQudGNsOjIwMworIzogYmlzZWN0LmM6ODQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkXG4iCittc2dzdHIgIkJpc2V6aW9uZTogZGV2J2Vzc2VyZSB0ZXN0YXRhIHVuYSBiYXNlIGRlbCBtZXJnZVxuIgorCisjOiBiaXNlY3QuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSAlcyByZXZpc2lvbiBpcyBuZWVkZWQiCittc2dzdHIgIsOoIHJpY2hpZXN0YSB1bmEgcmV2aXNpb25lICVzIgorCisjOiBiaXNlY3QuYzo5MjAgYnVpbHRpbi9ub3Rlcy5jOjE3NyBidWlsdGluL3RhZy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlIGlsIGZpbGUgJyVzJyIKKworIzogYmlzZWN0LmM6OTY2IGJ1aWx0aW4vbWVyZ2UuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGlsIGZpbGUgJyVzJyIKKworIzogYmlzZWN0LmM6OTk3Cittc2dpZCAicmVhZGluZyBiaXNlY3QgcmVmcyBmYWlsZWQiCittc2dzdHIgImxldHR1cmEgcmlmZXJpbWVudGkgZGVsbGEgYmlzZXppb25lIG5vbiByaXVzY2l0YSIKKworIzogYmlzZWN0LmM6MTAxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB3YXMgYm90aCAlcyBhbmQgJXNcbiIKK21zZ3N0ciAiJXMgZXJhIHNpYSAlcyBzaWEgJXNcbiIKKworIzogYmlzZWN0LmM6MTAyOAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgotIlxuIgotIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCi0iXG4iCi0iLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgotIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCi0iLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgorIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKyJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iCiBtc2dzdHIgIiIKLSJCaXNvZ25hIGZvcm5pcmUgdW4gbWVzc2FnZ2lvIGRpIHJldmlzaW9uZS5cbiIKLSJcbiIKLSJVbiBidW9uIG1lc3NhZ2dpbyBkaSByZXZpc2lvbmUgaGEgaWwgc2VndWVudGUgZm9ybWF0bzpcbiIKLSJcbiIKLSItIFByaW1hIGxpbmVhOiBkZXNjcml2aSBpbiB1bmEgZnJhc2UgY2nDsiBjaGUgaGFpIGZhdHRvLlxuIgotIi0gU2Vjb25kYSBsaW5lYTogdnVvdGEuXG4iCi0iLSBUZXJ6YSBsaW5lYTogc3BpZWdhIGEgY29zYSBzZXJ2ZSBsYSB0dWEgbW9kaWZpY2EuXG4iCisiTmVzc3VuIGNvbW1pdCB0ZXN0YWJpbGUgdHJvdmF0by5cbiIKKyJGb3JzZSBoYWkgaW5pemlhdG8gaWwgcHJvY2VkaW1lbnRvIHNwZWNpZmljYW5kbyBwYXJhbWV0cmkgcGVyY29yc28gZXJyYXRpP1xuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMzQKLW1zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKLW1zZ3N0ciAiQXZ2aW8gcHJlLWNvbW1pdCBob29rLi4uIgorIzogYmlzZWN0LmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICIocm91Z2hseSAlZCBzdGVwKSIKK21zZ2lkX3BsdXJhbCAiKHJvdWdobHkgJWQgc3RlcHMpIgorbXNnc3RyWzBdICIoY2lyY2EgJWQgcGFzc28pIgorbXNnc3RyWzFdICIoY2lyY2EgJWQgcGFzc2kpIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyNDkKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKLW1zZ3N0ciAiUmV2aXNpb25lIHJpZml1dGF0YSBkYWwgcHJlLWNvbW1pdCBob29rLiIKKyMuIFRSQU5TTEFUT1JTOiB0aGUgbGFzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggIihyb3VnaGx5ICVkCisjLiBzdGVwcykiIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJpc2VjdC5jOjEwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICIiCisiQmlzZXppb25lIGluIGNvcnNvOiAlZCByZXZpc2lvbmUgcmltYW5lbnRlIGRhIHRlc3RhcmUgZG9wbyBxdWVzdGEgJXNcbiIKK21zZ3N0clsxXSAiIgorIkJpc2V6aW9uZSBpbiBjb3JzbzogJWQgcmV2aXNpb25pIHJpbWFuZW50aSBkYSB0ZXN0YXJlIGRvcG8gcXVlc3RhICVzXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI3MgotbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICJBdnZpbyBjb21taXQtbXNnIGhvb2suLi4iCisjOiBibGFtZS5jOjI3MDAKK21zZ2lkICItLWNvbnRlbnRzIGFuZCAtLXJldmVyc2UgZG8gbm90IGJsZW5kIHdlbGwuIgorbXNnc3RyICItLWNvbnRlbnRzIGUgLS1yZXZlcnNlIG5vbiBzb25vIGNvbXBhdGliaWxpLiIKIAotIzogbGliL2NvbW1pdC50Y2w6Mjg3Ci1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCi1tc2dzdHIgIlJldmlzaW9uZSByaWZpdXRhdGEgZGFsIGNvbW1pdC1tc2cgaG9vay4iCisjOiBibGFtZS5jOjI3MTQKK21zZ2lkICJjYW5ub3QgdXNlIC0tY29udGVudHMgd2l0aCBmaW5hbCBjb21taXQgb2JqZWN0IG5hbWUiCittc2dzdHIgImltcG9zc2liaWxlIHVzYXJlIC0tY29udGVudHMgY29uIGlsIG5vbWUgb2dnZXR0byBkZWwgY29tbWl0IGZpbmFsZSIKIAotIzogbGliL2NvbW1pdC50Y2w6MzAwCi1tc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgotbXNnc3RyICJBcmNoaXZpYXppb25lIG1vZGlmaWNoZS4uLiIKKyM6IGJsYW1lLmM6MjczNQorbXNnaWQgIi0tcmV2ZXJzZSBhbmQgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSBzcGVjaWZpZWQgbGF0ZXN0IGNvbW1pdCIKK21zZ3N0ciAiIgorImxlIG9wemlvbmkgLS1yZXZlcnNlIGUgLS1maXJzdC1wYXJlbnQgc2UgdXNhdGUgaW5zaWVtZSByaWNoaWVkb25vIGNoZSBzaWEgIgorInNwZWNpZmljYXRvIGwndWx0aW1vIGNvbW1pdCIKIAotIzogbGliL2NvbW1pdC50Y2w6MzE2Ci1tc2dpZCAid3JpdGUtdHJlZSBmYWlsZWQ6IgotbXNnc3RyICJ3cml0ZS10cmVlIG5vbiByaXVzY2l0bzoiCisjOiBibGFtZS5jOjI3NDQgYnVuZGxlLmM6MTY3IHJlZi1maWx0ZXIuYzoyMjAzIHJlbW90ZS5jOjE5NDIgc2VxdWVuY2VyLmM6MjAwNgorIzogc2VxdWVuY2VyLmM6NDM1OCBzdWJtb2R1bGUuYzo4NDcgYnVpbHRpbi9jb21taXQuYzoxMDQ1IGJ1aWx0aW4vbG9nLmM6Mzg4CisjOiBidWlsdGluL2xvZy5jOjk5MSBidWlsdGluL2xvZy5jOjE1MjAgYnVpbHRpbi9sb2cuYzoxOTI1IGJ1aWx0aW4vbG9nLmM6MjIxNQorIzogYnVpbHRpbi9tZXJnZS5jOjQxMiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkwCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTkyCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgImltcG9zdGF6aW9uZSBwZXJjb3JzbyByZXZpc2lvbmkgbm9uIHJpdXNjaXRhIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMTcgbGliL2NvbW1pdC50Y2w6MzYxIGxpYi9jb21taXQudGNsOjM4MgotbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBjcmVhcmUgdW5hIG51b3ZhIHJldmlzaW9uZS4iCi0KLSM6IGxpYi9jb21taXQudGNsOjMzNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCi1tc2dzdHIgIkxhIHJldmlzaW9uZSAlcyBzZW1icmEgZXNzZXJlIGRhbm5lZ2dpYXRhIgotCi0jOiBsaWIvY29tbWl0LnRjbDozMzkKKyM6IGJsYW1lLmM6Mjc2MgogbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJObyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGJ5IHRoaXMgY29tbWl0IGFuZCBpdCB3YXMgbm90IGEgbWVyZ2UgY29tbWl0LlxuIgotIlxuIgotIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyItLXJldmVyc2UgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSByYW5nZSBhbG9uZyBmaXJzdC1wYXJlbnQgY2hhaW4iCiBtc2dzdHIgIiIKLSJOZXNzdW5hIG1vZGlmaWNhIHBlciBsYSBudW92YSByZXZpc2lvbmUuXG4iCi0iXG4iCi0iUXVlc3RhIHJldmlzaW9uZSBub24gbW9kaWZpY2EgYWxjdW4gZmlsZSBlIG5vbiBlZmZldHR1YSBhbGN1bmEgZnVzaW9uZS5cbiIKLSJcbiIKLSJTaSBwcm9jZWRlcsOgIHN1Yml0byBhZCB1bmEgbnVvdmEgYW5hbGlzaS5cbiIKKyJsZSBvcHppb25pIC0tcmV2ZXJzZSBlIC0tZmlyc3QtcGFyZW50IHNlIHVzYXRlIGluc2llbWUgcmljaGllZG9ubyBjaGUgc2lhICIKKyJzcGVjaWZpY2F0byB1biBpbnRlcnZhbGxvIG5lbGxhIGNhdGVuYSBkZWwgcHJpbW8gY29tbWl0IGdlbml0b3JlIgogCi0jOiBsaWIvY29tbWl0LnRjbDozNDYKLW1zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCi1tc2dzdHIgIk5lc3N1bmEgbW9kaWZpY2EgcGVyIGxhIG51b3ZhIHJldmlzaW9uZS4iCisjOiBibGFtZS5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBwYXRoICVzIGluICVzIgorbXNnc3RyICJpbCBwZXJjb3JzbyAlcyBpbiAlcyBub24gZXNpc3RlIgogCi0jOiBsaWIvY29tbWl0LnRjbDozNjAKLW1zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgotbXNnc3RyICJjb21taXQtdHJlZSBub24gcml1c2NpdG86IgorIzogYmxhbWUuYzoyNzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGJsb2IgJXMgZm9yIHBhdGggJXMiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgYmxvYiAlcyBwZXIgaWwgcGVyY29yc28gJXMiCiAKLSM6IGxpYi9jb21taXQudGNsOjM4MQotbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKLW1zZ3N0ciAidXBkYXRlLXJlZiBub24gcml1c2NpdG86IgotCi0jOiBsaWIvY29tbWl0LnRjbDo0NjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCi1tc2dzdHIgIkNyZWF0YSByZXZpc2lvbmUgJXM6ICVzIgotCi0jOiBsaWIvY29uc29sZS50Y2w6NTkKLW1zZ2lkICJXb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uIgotbXNnc3RyICJFbGFib3JhemlvbmUgaW4gY29yc28uLi4gYXR0ZW5kZXJlLi4uIgotCi0jOiBsaWIvY29uc29sZS50Y2w6MTg2Ci1tc2dpZCAiU3VjY2VzcyIKLW1zZ3N0ciAiU3VjY2Vzc28iCi0KLSM6IGxpYi9jb25zb2xlLnRjbDoyMDAKLW1zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCi1tc2dzdHIgIkVycm9yZTogY29tYW5kbyBub24gcml1c2NpdG8iCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDMKLW1zZ2lkICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyIKLW1zZ3N0ciAiTnVtZXJvIGRpIG9nZ2V0dGkgc2xlZ2F0aSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NAotbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBsb29zZSBvYmplY3RzIgotbXNnc3RyICJTcGF6aW8gc3UgZGlzY28gdXRpbGl6emF0byBkYSBvZ2dldHRpIHNsZWdhdGkiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKLW1zZ2lkICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMiCi1tc2dzdHIgIk51bWVybyBkaSBvZ2dldHRpIGltcGFjY2hldHRhdGkiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDYKLW1zZ2lkICJOdW1iZXIgb2YgcGFja3MiCi1tc2dzdHIgIk51bWVybyBkaSBwYWNjaGV0dGkiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKLW1zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCi1tc2dzdHIgIlNwYXppbyBzdSBkaXNjbyB1dGlsaXp6YXRvIGRhIG9nZ2V0dGkgaW1wYWNjaGV0dGF0aSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0OAotbXNnaWQgIlBhY2tlZCBvYmplY3RzIHdhaXRpbmcgZm9yIHBydW5pbmciCi1tc2dzdHIgIk9nZ2V0dGkgaW1wYWNjaGV0dGF0aSBjaGUgYXR0ZW5kb25vIGxhIHBvdGF0dXJhIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ5Ci1tc2dpZCAiR2FyYmFnZSBmaWxlcyIKLW1zZ3N0ciAiRmlsZSBpbnV0aWxpIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjcyCi1tc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKLW1zZ3N0ciAiQ29tcHJlc3Npb25lIGRlbGwnYXJjaGl2aW8gaW4gY29yc28iCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKLW1zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKLW1zZ3N0ciAiVmVyaWZpY2EgZGVsbCdhcmNoaXZpbyBjb24gZnNjay1vYmplY3RzIGluIGNvcnNvIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjEwNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCi0iXG4iCi0iVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyAiCi0idGhlIGRhdGFiYXNlLlxuIgotIlxuIgotIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgotbXNnc3RyICIiCi0iUXVlc3RvIGFyY2hpdmlvIGF0dHVhbG1lbnRlIGhhIGNpcmNhICVpIG9nZ2V0dGkgc2xlZ2F0aS5cbiIKLSJcbiIKLSJQZXIgbWFudGVuZXJlIGJ1b25lIHByZXN0YXppb25pIHNpIHJhY2NvbWFuZGEgZGkgY29tcHJpbWVyZSBsJ2FyY2hpdmlvLlxuIgotIlxuIgotIkNvbXByaW1lcmUgbCdhcmNoaXZpbyBvcmE/IgotCi0jOiBsaWIvZGF0ZS50Y2w6MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgotbXNnc3RyICJHaXQgaGEgcmVzdGl0dWl0byB1bmEgZGF0YSBub24gdmFsaWRhOiAlcyIKLQotIzogbGliL2RpZmYudGNsOjY0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgotIlxuIgotIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgotIlxuIgotIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKLSJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgotIlxuIgotIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgotInRoZSBzYW1lIHN0YXRlLiIKLW1zZ3N0ciAiIgotIk5vbiBzb25vIHN0YXRlIHRyb3ZhdGUgZGlmZmVyZW56ZS5cbiIKLSJcbiIKLSIlcyBub24gaGEgbW9kaWZpY2hlLlxuIgotIlxuIgotIkxhIGRhdGEgZGkgbW9kaWZpY2EgZGkgcXVlc3RvIGZpbGUgw6ggc3RhdGEgY2FtYmlhdGEgZGEgdW4nYWx0cmEgIgotImFwcGxpY2F6aW9uZSwgbWEgaWwgY29udGVudXRvIGRlbCBmaWxlIMOoIHJpbWFzdG8gaW52YXJpYXRvLlxuIgotIlxuIgotIlNpIHByb2NlZGVyw6AgYXV0b21hdGljYW1lbnRlIGFkIHVuYSBudW92YSBhbmFsaXNpIHBlciB0cm92YXJlIGFsdHJpIGZpbGUgY2hlICIKLSJwb3RyZWJiZXJvIGF2ZXJlIGxvIHN0ZXNzbyBzdGF0by4iCi0KLSM6IGxpYi9kaWZmLnRjbDoxMDQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2FkaW5nIGRpZmYgb2YgJXMuLi4iCi1tc2dzdHIgIkNhcmljYW1lbnRvIGRlbGxlIGRpZmZlcmVuemUgZGkgJXMuLi4iCi0KLSM6IGxpYi9kaWZmLnRjbDoxMjUKLW1zZ2lkICIiCi0iTE9DQUw6IGRlbGV0ZWRcbiIKLSJSRU1PVEU6XG4iCi1tc2dzdHIgIiIKLSJMT0NBTEU6IGNhbmNlbGxhdG9cbiIKLSJSRU1PVE86XG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoxMzAKLW1zZ2lkICIiCi0iUkVNT1RFOiBkZWxldGVkXG4iCi0iTE9DQUw6XG4iCi1tc2dzdHIgIiIKLSJSRU1PVE86IGNhbmNlbGxhdG9cbiIKLSJMT0NBTEU6XG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoxMzcKLW1zZ2lkICJMT0NBTDpcbiIKLW1zZ3N0ciAiTE9DQUxFOlxuIgotCi0jOiBsaWIvZGlmZi50Y2w6MTQwCi1tc2dpZCAiUkVNT1RFOlxuIgotbXNnc3RyICJSRU1PVE86XG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoyMDIgbGliL2RpZmYudGNsOjMxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgotbXNnc3RyICJJbXBvc3NpYmlsZSB2aXN1YWxpenphcmUgJXMiCi0KLSM6IGxpYi9kaWZmLnRjbDoyMDMKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgotbXNnc3RyICJFcnJvcmUgbmVsIGNhcmljYW1lbnRvIGRlbCBmaWxlOiIKLQotIzogbGliL2RpZmYudGNsOjIxMAotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKLW1zZ3N0ciAiQXJjaGl2aW8gR2l0IChzb3R0b3Byb2dldHRvKSIKLQotIzogbGliL2RpZmYudGNsOjIyMgotbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKLW1zZ3N0ciAiKiBGaWxlIGJpbmFyaW8gKGlsIGNvbnRlbnV0byBub24gc2Fyw6AgbW9zdHJhdG8pLiIKLQotIzogbGliL2RpZmYudGNsOjIyNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgotIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgotbXNnc3RyICIiCi0iKiBJbCBmaWxlIG5vbiB0cmFjY2lhdG8gw6ggZGkgJWQgYnl0ZS5cbiIKLSIqIFNhcmFubm8gdmlzdWFsaXp6YXRpIHNvbG8gaSBwcmltaSAlZCBieXRlLlxuIgotCi0jOiBsaWIvZGlmZi50Y2w6MjMzCi0jLCB0Y2wtZm9ybWF0CisjOiBicmFuY2guYzo1MworIywgYy1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCi0iKiBVbnRyYWNrZWQgZmlsZSBjbGlwcGVkIGhlcmUgYnkgJXMuXG4iCi0iKiBUbyBzZWUgdGhlIGVudGlyZSBmaWxlLCB1c2UgYW4gZXh0ZXJuYWwgZWRpdG9yLlxuIgorIkFmdGVyIGZpeGluZyB0aGUgZXJyb3IgY2F1c2UgeW91IG1heSB0cnkgdG8gZml4IHVwXG4iCisidGhlIHJlbW90ZSB0cmFja2luZyBpbmZvcm1hdGlvbiBieSBpbnZva2luZ1xuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIi4iCiBtc2dzdHIgIiIKICJcbiIKLSIqICVzIG5vbiB2aXN1YWxpenphIGNvbXBsZXRhbWVudGUgcXVlc3RvIGZpbGUgbm9uIHRyYWNjaWF0by5cbiIKLSIqIFBlciB2aXN1YWxpenphcmUgaWwgZmlsZSBjb21wbGV0bywgdXNhcmUgdW4gcHJvZ3JhbW1hIGVzdGVybm8uXG4iCisiRG9wbyBhdmVyIGNvcnJldHRvIGwnZXJyb3JlIMOoIHBvc3NpYmlsZSBwcm92YXJlIGEgY29ycmVnZ2VyZVxuIgorImxlIGluZm9ybWF6aW9uaSBkaSB0cmFjY2lhbWVudG8gcmVtb3RvIGVzZWd1ZW5kb1xuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIi4iCiAKLSM6IGxpYi9kaWZmLnRjbDo0ODIKLW1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgcmltdW92ZXJlIGxhIHNlemlvbmUgc2NlbHRhIGRhbGxhIG51b3ZhIHJldmlzaW9uZS4iCisjOiBicmFuY2guYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3Qgc2V0dGluZyBicmFuY2ggJXMgYXMgaXRzIG93biB1cHN0cmVhbS4iCittc2dzdHIgIk5vbiBpbXBvc3RvIGlsIGJyYW5jaCAlcyBjb21lIHVwc3RyZWFtIGRpIHPDqSBzdGVzc28uIgogCi0jOiBsaWIvZGlmZi50Y2w6NDg5Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBwcmVwYXJhcmUgbGEgc2V6aW9uZSBzY2VsdGEgcGVyIHVuYSBudW92YSByZXZpc2lvbmUuIgorIzogYnJhbmNoLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiQnJhbmNoICclcycgaW1wb3N0YXRvIHBlciB0cmFjY2lhcmUgaWwgYnJhbmNoIHJlbW90byAnJXMnIGRhICclcycgdHJhbWl0ZSAiCisicmViYXNlLiIKIAotIzogbGliL2RpZmYudGNsOjU2OAotbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGxpbmUuIgotbXNnc3RyICJJbXBvc3NpYmlsZSByaW11b3ZlcmUgbGEgcmlnYSBzY2VsdGEgZGFsbGEgbnVvdmEgcmV2aXNpb25lLiIKKyM6IGJyYW5jaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnLiIKK21zZ3N0ciAiQnJhbmNoICclcycgaW1wb3N0YXRvIHBlciB0cmFjY2lhcmUgaWwgYnJhbmNoIHJlbW90byAnJXMnIGRhICclcycuIgogCi0jOiBsaWIvZGlmZi50Y2w6NTc2Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBwcmVwYXJhcmUgbGEgcmlnYSBzY2VsdGEgcGVyIHVuYSBudW92YSByZXZpc2lvbmUuIgorIzogYnJhbmNoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIkJyYW5jaCAnJXMnIGltcG9zdGF0byBwZXIgdHJhY2NpYXJlIGlsIGJyYW5jaCBsb2NhbGUgJyVzJyB0cmFtaXRlIHJlYmFzZS4iCiAKLSM6IGxpYi9lbmNvZGluZy50Y2w6NDQzCi1tc2dpZCAiRGVmYXVsdCIKLW1zZ3N0ciAiUHJlZGVmaW5pdG8iCisjOiBicmFuY2guYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycuIgorbXNnc3RyICJCcmFuY2ggJyVzJyBpbXBvc3RhdG8gcGVyIHRyYWNjaWFyZSBpbCBicmFuY2ggbG9jYWxlICclcycuIgogCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ0OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN5c3RlbSAoJXMpIgotbXNnc3RyICJDb2RpZmljYSBkaSBzaXN0ZW1hICglcykiCisjOiBicmFuY2guYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJCcmFuY2ggJyVzJyBpbXBvc3RhdG8gcGVyIHRyYWNjaWFyZSBpbCByaWZlcmltZW50byByZW1vdG8gJyVzJyB0cmFtaXRlICIKKyJyZWJhc2UuIgogCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ1OSBsaWIvZW5jb2RpbmcudGNsOjQ2NQorIzogYnJhbmNoLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycuIgorbXNnc3RyICJCcmFuY2ggJyVzJyBpbXBvc3RhdG8gcGVyIHRyYWNjaWFyZSBpbCByaWZlcmltZW50byByZW1vdG8gJyVzJy4iCisKKyM6IGJyYW5jaC5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiQnJhbmNoICclcycgaW1wb3N0YXRvIHBlciB0cmFjY2lhcmUgaWwgcmlmZXJpbWVudG8gbG9jYWxlICclcycgdHJhbWl0ZSAiCisicmViYXNlLiIKKworIzogYnJhbmNoLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJy4iCittc2dzdHIgIkJyYW5jaCAnJXMnIGltcG9zdGF0byBwZXIgdHJhY2NpYXJlIGlsIHJpZmVyaW1lbnRvIGxvY2FsZSAnJXMnLiIKKworIzogYnJhbmNoLmM6MTE5Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIHVwc3RyZWFtIGJyYW5jaCBjb25maWd1cmF0aW9uIgorbXNnc3RyICJJbXBvc3NpYmlsZSBzY3JpdmVyZSBsYSBjb25maWd1cmF6aW9uZSByZWxhdGl2YSBhbCBicmFuY2ggdXBzdHJlYW0iCisKKyM6IGJyYW5jaC5jOjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgdHJhY2tpbmc6IGFtYmlndW91cyBpbmZvcm1hdGlvbiBmb3IgcmVmICVzIgorbXNnc3RyICIiCisiSWwgdHJhY2NpYW1lbnRvIG5vbiBhdnZlcnLDoDogaW5mb3JtYXppb25pIGFtYmlndWUgcGVyIGlsIHJpZmVyaW1lbnRvICVzIgorCisjOiBicmFuY2guYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcycgbm9uIMOoIHVuIG5vbWUgYnJhbmNoIHZhbGlkby4iCisKKyM6IGJyYW5jaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiVW4gYnJhbmNoIGRlbm9taW5hdG8gJyVzJyBlc2lzdGUgZ2nDoC4iCisKKyM6IGJyYW5jaC5jOjIxMworbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgdW4gYWdnaW9ybmFtZW50byBmb3J6YXRvIGRlbCBicmFuY2ggY29ycmVudGUuIgorCisjOiBicmFuY2guYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBpbXBvc3RhcmUgbGUgaW5mb3JtYXppb25pIGRpIHRyYWNjaWFtZW50bzogaWwgcHVudG8gZGkgcGFydGVuemEgIgorIiclcycgbm9uIMOoIHVuIGJyYW5jaC4iCisKKyM6IGJyYW5jaC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJpbCBicmFuY2ggdXBzdHJlYW0gcmljaGllc3RvICclcycgbm9uIGVzaXN0ZSIKKworIzogYnJhbmNoLmM6MjM3Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgb24gYmFzaW5nIHlvdXIgd29yayBvbiBhbiB1cHN0cmVhbVxuIgorImJyYW5jaCB0aGF0IGFscmVhZHkgZXhpc3RzIGF0IHRoZSByZW1vdGUsIHlvdSBtYXkgbmVlZCB0b1xuIgorInJ1biBcImdpdCBmZXRjaFwiIHRvIHJldHJpZXZlIGl0LlxuIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVzaCBvdXQgYSBuZXcgbG9jYWwgYnJhbmNoIHRoYXRcbiIKKyJ3aWxsIHRyYWNrIGl0cyByZW1vdGUgY291bnRlcnBhcnQsIHlvdSBtYXkgd2FudCB0byB1c2VcbiIKKyJcImdpdCBwdXNoIC11XCIgdG8gc2V0IHRoZSB1cHN0cmVhbSBjb25maWcgYXMgeW91IHB1c2guIgorbXNnc3RyICIiCisiXG4iCisiU2UgcHJldmVkaSBkaSBiYXNhcmUgaWwgdHVvIGxhdm9ybyBzdSB1biBicmFuY2hcbiIKKyJ1cHN0cmVhbSBnacOgIGVzaXN0ZW50ZSwgcG90cmVzdGkgZG92ZXIgZXNlZ3VpcmVcbiIKKyJcImdpdCBmZXRjaFwiIHBlciByZWN1cGVyYXJsby5cbiIKKyJcbiIKKyJTZSBwcmV2ZWRpIGRpIGVzZWd1aXJlIGlsIHB1c2ggZGkgdW4gbnVvdm8gYnJhbmNoIGxvY2FsZVxuIgorImNoZSB0cmFjY2Vyw6AgbGEgc3VhIGNvbnRyb3BhcnRlIHJlbW90YSwgcG90cmVzdGkgdm9sZXJcbiIKKyJ1c2FyZSBcImdpdCBwdXNoIC11XCIgcGVyIGltcG9zdGFyZSBsYSBjb25maWd1cmF6aW9uZSBkZWxcbiIKKyJicmFuY2ggdXBzdHJlYW0gZHVyYW50ZSBpbCBwdXNoLiIKKworIzogYnJhbmNoLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAiTm9tZSBvZ2dldHRvIG5vbiB2YWxpZG86ICclcycuIgorCisjOiBicmFuY2guYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAiTm9tZSBvZ2dldHRvIGFtYmlndW86ICclcycuIgorCisjOiBicmFuY2guYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgYnJhbmNoIHBvaW50OiAnJXMnLiIKK21zZ3N0ciAiUHVudG8gZGkgYnJhbmNoIG5vbiB2YWxpZG86ICclcycuIgorCisjOiBicmFuY2guYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIklsIGNoZWNrb3V0IGRpICclcycgw6ggZ2nDoCBzdGF0byBlc2VndWl0byBpbiAnJXMnIgorCisjOiBicmFuY2guYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBvZiB3b3JraW5nIHRyZWUgJXMgaXMgbm90IHVwZGF0ZWQiCittc2dzdHIgIkwnSEVBRCBkZWxsJ2FsYmVybyBkaSBsYXZvcm8gJXMgbm9uIMOoIGFnZ2lvcm5hdG8iCisKKyM6IGJ1bmRsZS5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgbG9vayBsaWtlIGEgdjIgYnVuZGxlIGZpbGUiCittc2dzdHIgIiclcycgbm9uIHNlbWJyYSBlc3NlcmUgdW4gZmlsZSBidW5kbGUgdjIiCisKKyM6IGJ1bmRsZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAiaW50ZXN0YXppb25lIG5vbiByaWNvbm9zY2l1dGE6ICVzJXMgKCVkKSIKKworIzogYnVuZGxlLmM6OTAgcmVyZXJlLmM6NDgwIHJlcmVyZS5jOjY5MCBzZXF1ZW5jZXIuYzoyMjU4IHNlcXVlbmNlci5jOjMwMTYKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSAnJXMnIgorCisjOiBidW5kbGUuYzoxNDMKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiRGFsIHJlcG9zaXRvcnkgbWFuY2FubyBxdWVzdGkgY29tbWl0IHJpY2hpZXN0aSBjb21lIHByZXJlcXVpc2l0bzoiCisKKyM6IGJ1bmRsZS5jOjE0NgorbXNnaWQgIm5lZWQgYSByZXBvc2l0b3J5IHRvIHZlcmlmeSBhIGJ1bmRsZSIKK21zZ3N0ciAiw6ggbmVjZXNzYXJpbyB1biByZXBvc2l0b3J5IHBlciB2ZXJpZmljYXJlIHVuIGJ1bmRsZSIKKworIzogYnVuZGxlLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJJbCBidW5kbGUgY29udGllbmUgcXVlc3RvIHJpZmVyaW1lbnRvOiIKK21zZ3N0clsxXSAiSWwgYnVuZGxlIGNvbnRpZW5lIHF1ZXN0aSAlZCByaWZlcmltZW50aToiCisKKyM6IGJ1bmRsZS5jOjIwNAorbXNnaWQgIlRoZSBidW5kbGUgcmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkuIgorbXNnc3RyICJOZWwgYnVuZGxlIMOoIHJlZ2lzdHJhdGEgdW5hIGNyb25vbG9naWEgY29tcGxldGEuIgorCisjOiBidW5kbGUuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIklsIGJ1bmRsZSByaWNoaWVkZSBxdWVzdG8gcmlmZXJpbWVudG86IgorbXNnc3RyWzFdICJJbCBidW5kbGUgcmljaGllZGUgcXVlc3RpICVkIHJpZmVyaW1lbnRpOiIKKworIzogYnVuZGxlLmM6MjczCittc2dpZCAidW5hYmxlIHRvIGR1cCBidW5kbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZHVwbGljYXJlIGlsIGRlc2NyaXR0b3JlIGJ1bmRsZSIKKworIzogYnVuZGxlLmM6MjgwCittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYXZ2aWFyZSBwYWNrLW9iamVjdHMiCisKKyM6IGJ1bmRsZS5jOjI5MQorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICJjb21hbmRvIHBhY2stb2JqZWN0cyBtb3J0byIKKworIzogYnVuZGxlLmM6MzMzCittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAiY29tYW5kbyByZXYtbGlzdCBtb3J0byIKKworIzogYnVuZGxlLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICJpbCByaWZlcmltZW50byAnJXMnIMOoIGVzY2x1c28gZGFsbGUgb3B6aW9uaSBkaSByZXYtbGlzdCIKKworIzogYnVuZGxlLmM6NDYxIGJ1aWx0aW4vbG9nLmM6MjAzIGJ1aWx0aW4vbG9nLmM6MTgxNCBidWlsdGluL3Nob3J0bG9nLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ29tZW50byBub24gcmljb25vc2NpdXRvOiAlcyIKKworIzogYnVuZGxlLmM6NDY5Cittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgIk1pIHJpZml1dG8gZGkgY3JlYXJlIHVuIGJ1bmRsZSB2dW90by4iCisKKyM6IGJ1bmRsZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSAnJXMnIgorCisjOiBidW5kbGUuYzo1MDQKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgImNvbWFuZG8gaW5kZXgtcGFjayBtb3J0byIKKworIzogY29sb3IuYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciB2YWx1ZTogJS4qcyIKK21zZ3N0ciAidmFsb3JlIGNvbG9yZSBub24gdmFsaWRvOiAlLipzIgorCisjOiBjb21taXQuYzo1MSBzZXF1ZW5jZXIuYzoyNzE5IGJ1aWx0aW4vYW0uYzozNTkgYnVpbHRpbi9hbS5jOjQwMworIzogYnVpbHRpbi9hbS5jOjEzNzEgYnVpbHRpbi9hbS5jOjIwMTQgYnVpbHRpbi9yZXBsYWNlLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSAlcyIKKworIzogY29tbWl0LmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiJXMgJXMgbm9uIMOoIHVuIGNvbW1pdCEiCisKKyM6IGNvbW1pdC5jOjE5MworbXNnaWQgIiIKKyJTdXBwb3J0IGZvciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaXMgZGVwcmVjYXRlZFxuIgorImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgR2l0IHZlcnNpb24uXG4iCisiXG4iCisiUGxlYXNlIHVzZSBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyJ0byBjb252ZXJ0IHRoZSBncmFmdHMgaW50byByZXBsYWNlIHJlZnMuXG4iCisiXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIiIKK21zZ3N0ciAiIgorIklsIHN1cHBvcnRvIHBlciA8R0lUX0RJUj4vaW5mby9ncmFmdCDDqCBkZXByZWNhdG9cbiIKKyJlIHNhcsOgIHJpbW9zc28gaW4gdW5hIHZlcnNpb25lIGZ1dHVyYSBkaSBHaXQuXG4iCisiXG4iCisiVXNhIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIlxuIgorInBlciBjb252ZXJ0aXJlIGkgZ3JhZnQgaW4gcmVmIHNvc3RpdHV0aXZpLlxuIgorIlxuIgorIlBlciBkaXNhYmlsaXRhcmUgcXVlc3RvIG1lc3NhZ2dpbywgZXNlZ3VpXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCisKKyM6IGNvbW1pdC5jOjExNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSwgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiSWwgY29tbWl0ICVzIGhhIHVuYSBmaXJtYSBHUEcgbm9uIGFmZmlkYWJpbGUsIHByZXN1bWliaWxtZW50ZSBkaSAlcy4iCisKKyM6IGNvbW1pdC5jOjExNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIklsIGNvbW1pdCAlcyBoYSB1bmEgZmlybWEgR1BHIG5vbiB2YWxpZGEgcHJlc3VtaWJpbG1lbnRlIGRpICVzLiIKKworIzogY29tbWl0LmM6MTE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIgorbXNnc3RyICJJbCBjb21taXQgJXMgbm9uIGhhIHVuYSBmaXJtYSBHUEcuIgorCisjOiBjb21taXQuYzoxMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAiSWwgY29tbWl0ICVzIGhhIHVuYSBmaXJtYSBHUEcgdmFsaWRhIGRpICVzXG4iCisKKyM6IGNvbW1pdC5jOjE0MTcKK21zZ2lkICIiCisiV2FybmluZzogY29tbWl0IG1lc3NhZ2UgZGlkIG5vdCBjb25mb3JtIHRvIFVURi04LlxuIgorIllvdSBtYXkgd2FudCB0byBhbWVuZCBpdCBhZnRlciBmaXhpbmcgdGhlIG1lc3NhZ2UsIG9yIHNldCB0aGUgY29uZmlnXG4iCisidmFyaWFibGUgaTE4bi5jb21taXRlbmNvZGluZyB0byB0aGUgZW5jb2RpbmcgeW91ciBwcm9qZWN0IHVzZXMuXG4iCittc2dzdHIgIiIKKyJBdHRlbnppb25lOiBpbCBtZXNzYWdnaW8gZGkgY29tbWl0IG5vbiDDqCBjb25mb3JtZSBhbGxhIGNvZGlmaWNhIFVURi04LlxuIgorIlBvdHJlc3RpIHZvbGVybG8gbW9kaWZpY2FyZSBkb3BvIGF2ZXIgY29ycmV0dG8gaWwgbWVzc2FnZ2lvLCBvIGltcG9zdGFyZVxuIgorImxhIHZhcmlhYmlsZSBkaSBjb25maWd1cmF6aW9uZSBpMThuLmNvbW1pdGVuY29kaW5nIGFsbGEgY29kaWZpY2EgdXNhdGFcbiIKKyJkYWwgdHVvIHByb2dldHRvLlxuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjIKK21zZ2lkICJjb21taXQtZ3JhcGggZmlsZSBpcyB0b28gc21hbGwiCittc2dzdHIgImlsIGZpbGUgZ3JhZm8gZGVpIGNvbW1pdCAlcyDDqCB0cm9wcG8gcGljY29sbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBzaWduYXR1cmUgJVggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlICVYIgorbXNnc3RyICJsYSBmaXJtYSBkZWwgZ3JhZm8gZGVpIGNvbW1pdCAlWCBub24gY29ycmlzcG9uZGUgYWxsYSBmaXJtYSAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgImxhIHZlcnNpb25lIGRlbCBncmFmbyBkZWkgY29tbWl0ICVYIG5vbiBjb3JyaXNwb25kZSBhbGxhIHZlcnNpb25lICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICIiCisibGEgdmVyc2lvbmUgaGFzaCBkZWwgZ3JhZm8gZGVpIGNvbW1pdCAlWCBub24gY29ycmlzcG9uZGUgYWxsYSB2ZXJzaW9uZSAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MjI2Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGxvb2t1cCB0YWJsZSBlbnRyeSBtaXNzaW5nOyBmaWxlIG1heSBiZSBpbmNvbXBsZXRlIgorbXNnc3RyICIiCisidm9jZSBibG9jY28gZ3JhZm8gZGVpIGNvbW1pdCBtYW5jYW50ZSBuZWxsYSB0YWJlbGxhIGRpIHJpY2VyY2E7IGlsIGZpbGUgIgorInBvdHJlYmJlIG5vbiBlc3NlcmUgY29tcGxldG8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaW1wcm9wZXIgY2h1bmsgb2Zmc2V0ICUwOHglMDh4IgorbXNnc3RyICJvZmZzZXQgYmxvY2NvIGdyYWZvIGRlaSBjb21taXQgaW1wcm9wcmlvICUwOHglMDh4IgorCisjOiBjb21taXQtZ3JhcGguYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGlkICUwOHggYXBwZWFycyBtdWx0aXBsZSB0aW1lcyIKK21zZ3N0ciAibCdJRCBkZWwgYmxvY2NvIGdyYWZvIGRlaSBjb21taXQgJTA4eCBjb21wYXJlIHBpw7kgdm9sdGUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM0MworbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgbm8gYmFzZSBncmFwaHMgY2h1bmsiCittc2dzdHIgImlsIGdyYWZvIGRlaSBjb21taXQgbm9uIGhhIHVuIGJsb2NjbyBncmFmaSBkaSBiYXNlIgorCisjOiBjb21taXQtZ3JhcGguYzozNTMKK21zZ2lkICJjb21taXQtZ3JhcGggY2hhaW4gZG9lcyBub3QgbWF0Y2giCittc2dzdHIgImxhIGNhdGVuYSBkZWwgZ3JhZm8gZGVpIGNvbW1pdCBub24gY29ycmlzcG9uZGUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdC1ncmFwaCBjaGFpbjogbGluZSAnJXMnIG5vdCBhIGhhc2giCittc2dzdHIgImNhdGVuYSBncmFmbyBkZWkgY29tbWl0IG5vbiB2YWxpZGE6IGxhIHJpZ2EgJyVzJyBub24gw6ggdW4gaGFzaCIKKworIzogY29tbWl0LWdyYXBoLmM6NDI1Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgYWxsIGNvbW1pdC1ncmFwaCBmaWxlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdHJvdmFyZSB0dXR0aSBpIGZpbGUgZ3JhZm8gZGVpIGNvbW1pdCIKKworIzogY29tbWl0LWdyYXBoLmM6NTU4IGNvbW1pdC1ncmFwaC5jOjYxOAorbXNnaWQgImludmFsaWQgY29tbWl0IHBvc2l0aW9uLiBjb21taXQtZ3JhcGggaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgIiIKKyJwb3NpemlvbmUgY29tbWl0IG5vbiB2YWxpZGEuIElsIGdyYWZvIGRlaSBjb21taXQgw6ggcHJvYmFiaWxtZW50ZSBjb3Jyb3R0byIKKworIzogY29tbWl0LWdyYXBoLmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdHJvdmFyZSBpbCBjb21taXQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjg1MiBidWlsdGluL2FtLmM6MTI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGNvbW1pdCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTAxMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCB0eXBlIG9mIG9iamVjdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBpbCB0aXBvIGRlbGwnb2dnZXR0byAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTA0MworbXNnaWQgIkxvYWRpbmcga25vd24gY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIkNhcmljYW1lbnRvIGNvbW1pdCBub3RpIG5lbCBncmFmbyBkZWkgY29tbWl0IGluIGNvcnNvIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDYwCittc2dpZCAiRXhwYW5kaW5nIHJlYWNoYWJsZSBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiRXNwYW5zaW9uZSBkZWkgY29tbWl0IHJhZ2dpdW5naWJpbGkgbmVsIGdyYWZvIGRlaSBjb21taXQgaW4gY29yc28iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNzkKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJSaW1vemlvbmUgZGVpIGNvbnRyYXNzZWduaSBjb21taXQgbmVsIGdyYWZvIGRlaSBjb21taXQgaW4gY29yc28iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwOTgKK21zZ2lkICJDb21wdXRpbmcgY29tbWl0IGdyYXBoIGdlbmVyYXRpb24gbnVtYmVycyIKK21zZ3N0ciAiQ2FsY29sbyBudW1lcmkgZ2VuZXJhemlvbmUgZGVsIGdyYWZvIGRlaSBjb21taXQgaW4gY29yc28iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFjayIKK21zZ2lkX3BsdXJhbCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFja3MiCittc2dzdHJbMF0gIlJpY2VyY2EgZGVpIGNvbW1pdCBwZXIgaWwgZ3JhZm8gZGVpIGNvbW1pdCBpbiAlZCBwYWNrIGluIGNvcnNvIgorbXNnc3RyWzFdICJSaWNlcmNhIGRlaSBjb21taXQgcGVyIGlsIGdyYWZvIGRlaSBjb21taXQgaW4gJWQgcGFjayBpbiBjb3JzbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBhZGRpbmcgcGFjayAlcyIKK21zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbCdhZ2dpdW50YSBkZWwgcGFjayAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBvcGVuaW5nIGluZGV4IGZvciAlcyIKK21zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbCdhcGVydHVyYSBkZWxsJ2luZGljZSBwZXIgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmcyIKK21zZ3N0clswXSAiIgorIlJpY2VyY2EgZGVpIGNvbW1pdCBwZXIgaWwgZ3JhZm8gZGVpIGNvbW1pdCBkYSAlZCByaWZlcmltZW50byBpbiBjb3JzbyIKK21zZ3N0clsxXSAiIgorIlJpY2VyY2EgZGVpIGNvbW1pdCBwZXIgaWwgZ3JhZm8gZGVpIGNvbW1pdCBkYSAlZCByaWZlcmltZW50aSBpbiBjb3JzbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBvYmplY3QgaWQ6ICVzIgorbXNnc3RyICJJRCBvZ2dldHRvIGNvbW1pdCBub24gdmFsaWRvOiAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTI0OQorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGFtb25nIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICIiCisiUmljZXJjYSBkZWkgY29tbWl0IHBlciBpbCBncmFmbyBkZWkgY29tbWl0IGZyYSBnbGkgb2dnZXR0aSBuZWkgcGFjayBpbiBjb3JzbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTI2NAorbXNnaWQgIkNvdW50aW5nIGRpc3RpbmN0IGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJDb250ZWdnaW8gY29tbWl0IGRpc3RpbnRpIG5lbCBncmFmbyBkZWkgY29tbWl0IGluIGNvcnNvIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjk0Cittc2dpZCAiRmluZGluZyBleHRyYSBlZGdlcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIlJpY2VyY2EgZGVnbGkgYXJjaGkgYWdnaXVudGl2aSBuZWwgZ3JhZm8gZGVpIGNvbW1pdCBpbiBjb3JzbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTM0MAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb3JyZWN0IG51bWJlciBvZiBiYXNlIGdyYXBoIGlkcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgbnVtZXJvIGVzYXR0byBkZWdsaSBJRCBncmFmbyBkaSBiYXNlIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzczIG1pZHguYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgbGUgcHJpbWUgZGlyZWN0b3J5IGRpICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzg1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMwNiBidWlsdGluL3JlcGFjay5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSAnJXMnIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzIgorbXNnaWRfcGx1cmFsICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzc2VzIgorbXNnc3RyWzBdICJTY3JpdHR1cmEgaW4gJWQgcGFzc2FnZ2lvIGRlbCBncmFmbyBkZWkgY29tbWl0IGluIGNvcnNvIgorbXNnc3RyWzFdICJTY3JpdHR1cmEgaW4gJWQgcGFzc2FnZ2kgZGVsIGdyYWZvIGRlaSBjb21taXQgaW4gY29yc28iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0ODYKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBjb21taXQtZ3JhcGggY2hhaW4gZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGlsIGZpbGUgY2F0ZW5hIGdyYWZvIGRlaSBjb21taXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0OTgKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIGJhc2UgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIHJpZGVub21pbmFyZSBpbCBmaWxlIGRpIGJhc2UgZ3JhZm8gZGVpIGNvbW1pdCIKKworIzogY29tbWl0LWdyYXBoLmM6MTUxOAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgdGVtcG9yYXJ5IGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaWRlbm9taW5hcmUgaWwgZmlsZSB0ZW1wb3JhbmVvIGdyYWZvIGRlaSBjb21taXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2MzEKK21zZ2lkICJTY2FubmluZyBtZXJnZWQgY29tbWl0cyIKK21zZ3N0ciAiU2NhbnNpb25lIGRlaSBjb21taXQgc290dG9wb3N0aSBhIG1lcmdlIGluIGNvcnNvIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZHVwbGljYXRlIGNvbW1pdCBpZCAlcyIKK21zZ3N0ciAiSUQgY29tbWl0IGR1cGxpY2F0byBpbmF0dGVzbzogJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NjUKK21zZ2lkICJNZXJnaW5nIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiTWVyZ2UgZGVsIGdyYWZvIGRlaSBjb21taXQgaW4gY29yc28iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIGNvbW1pdCBncmFwaCBmb3JtYXQgY2Fubm90IHdyaXRlICVkIGNvbW1pdHMiCittc2dzdHIgIiIKKyJpbCBmb3JtYXRvIGRlbCBncmFmbyBkZWkgY29tbWl0IG5vbiBwdcOyIGVzc2VyZSB1c2F0byBwZXIgc2NyaXZlcmUgJWQgY29tbWl0IgorCisjOiBjb21taXQtZ3JhcGguYzoxODU1Cittc2dpZCAidG9vIG1hbnkgY29tbWl0cyB0byB3cml0ZSBncmFwaCIKK21zZ3N0ciAidHJvcHBpIGNvbW1pdCBkYSBzY3JpdmVyZSBuZWwgZ3JhZm8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NDQKK21zZ2lkICJ0aGUgY29tbWl0LWdyYXBoIGZpbGUgaGFzIGluY29ycmVjdCBjaGVja3N1bSBhbmQgaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgIiIKKyJpbCBmaWxlIGRlbCBncmFmbyBkZWkgY29tbWl0IGhhIHVuIGNoZWNrc3VtIG5vbiBjb3JyZXR0byBlIHByb2JhYmlsbWVudGUgw6ggIgorImNvcnJvdHRvIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IE9JRCBvcmRlcjogJXMgdGhlbiAlcyIKK21zZ3N0ciAiaWwgZ3JhZm8gZGVpIGNvbW1pdCBoYSB1biBvcmRpbmUgT0lEIG5vbiBjb3JyZXR0bzogJXMgc2VndWl0byBkYSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTk2NCBjb21taXQtZ3JhcGguYzoxOTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IGZhbm91dCB2YWx1ZTogZmFub3V0WyVkXSA9ICV1ICE9ICV1IgorbXNnc3RyICIiCisiaWwgZ3JhZm8gZGVpIGNvbW1pdCBoYSB1biB2YWxvcmUgZmFub3V0IG5vbiBjb3JyZXR0bzogZmFub3V0WyVkXSA9ICV1ICE9ICV1IgorCisjOiBjb21taXQtZ3JhcGguYzoxOTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBjb21taXQgJXMgZnJvbSBjb21taXQtZ3JhcGgiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgaWwgY29tbWl0ICVzIG5lbCBncmFmbyBkZWkgY29tbWl0IgorCisjOiBjb21taXQtZ3JhcGguYzoxOTg5Cittc2dpZCAiVmVyaWZ5aW5nIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJWZXJpZmljYSBkZWkgY29tbWl0IG5lbCBncmFmbyBkZWkgY29tbWl0IGluIGNvcnNvIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBjb21taXQgJXMgZnJvbSBvYmplY3QgZGF0YWJhc2UgZm9yIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIGFuYWxpenphcmUgaWwgY29tbWl0ICVzIGRhbCBkYXRhYmFzZSBvZ2dldHRpIHBlciBpbCBncmFmbyBkZWkgIgorImNvbW1pdCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJyb290IHRyZWUgT0lEIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICVzICE9ICVzIgorbXNnc3RyICIiCisibCdPSUQgZGVsbCdhbGJlcm8gcmFkaWNlIHBlciBpbCBjb21taXQgJXMgbmVsIGdyYWZvIGRlaSBjb21taXQgw6ggJXMgIT0gJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBsaXN0IGZvciBjb21taXQgJXMgaXMgdG9vIGxvbmciCittc2dzdHIgImwnZWxlbmNvIGdlbml0b3JpIG5lbCBncmFmbyBkZWkgY29tbWl0IHBlciBpbCBjb21taXQgJXMgw6ggdHJvcHBvIGx1bmdvIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgZm9yICVzIGlzICVzICE9ICVzIgorbXNnc3RyICJpbCBnZW5pdG9yZSBuZWwgZ3JhZm8gZGVpIGNvbW1pdCBwZXIgJXMgw6ggJXMgIT0gJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBsaXN0IGZvciBjb21taXQgJXMgdGVybWluYXRlcyBlYXJseSIKK21zZ3N0ciAiIgorImwnZWxlbmNvIGdlbml0b3JpIG5lbCBncmFmbyBkZWkgY29tbWl0IHBlciBpbCBjb21taXQgJXMgw6ggZmluaXRvIHByaW1hIGRlbCAiCisicHJldmlzdG8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgZ2VuZXJhdGlvbiBudW1iZXIgemVybyBmb3IgY29tbWl0ICVzLCBidXQgbm9uLXplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisiaWwgZ3JhZm8gZGVpIGNvbW1pdCBoYSB1biBudW1lcm8gZ2VuZXJhemlvbmUgemVybyBwZXIgaWwgY29tbWl0ICVzIG1hIG5vbiAiCisicGFyaSBhIHplcm8gcGVyIGdsaSBhbHRyaSIKKworIzogY29tbWl0LWdyYXBoLmM6MjA1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY29tbWl0LWdyYXBoIGhhcyBub24temVybyBnZW5lcmF0aW9uIG51bWJlciBmb3IgY29tbWl0ICVzLCBidXQgemVybyBlbHNld2hlcmUiCittc2dzdHIgIiIKKyJpbCBncmFmbyBkZWkgY29tbWl0IGhhIHVuIG51bWVybyBnZW5lcmF6aW9uZSBub24gcGFyaSBhIHplcm8gcGVyIGlsIGNvbW1pdCAiCisiJXMgbWEgcGFyaSBhIHplcm8gcGVyIGdsaSBhbHRyaSIKKworIzogY29tbWl0LWdyYXBoLmM6MjA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggZ2VuZXJhdGlvbiBmb3IgY29tbWl0ICVzIGlzICV1ICE9ICV1IgorbXNnc3RyICJpbCBudW1lcm8gZ2VuZXJhemlvbmUgbmVsIGdyYWZvIGRlaSBjb21taXQgcGVyIGlsIGNvbW1pdCAlcyDDqCAldSAhPSAldSIKKworIzogY29tbWl0LWdyYXBoLmM6MjA3MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgZGF0ZSBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlPFBSSXVNQVg+ICE9ICU8UFJJdU1BWD4iCittc2dzdHIgIiIKKyJsYSBkYXRhIHBlciBpbCBjb21taXQgJXMgbmVsIGdyYWZvIGRlaSBjb21taXQgw6ggJTxQUkl1TUFYPiAhPSAlPFBSSXVNQVg+IgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1lbW9yaWEgZXNhdXJpdGEiCisKKyM6IGNvbmZpZy5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhjZWVkZWQgbWF4aW11bSBpbmNsdWRlIGRlcHRoICglZCkgd2hpbGUgaW5jbHVkaW5nXG4iCisiXHQlc1xuIgorImZyb21cbiIKKyJcdCVzXG4iCisiVGhpcyBtaWdodCBiZSBkdWUgdG8gY2lyY3VsYXIgaW5jbHVkZXMuIgorbXNnc3RyICIiCisicHJvZm9uZGl0w6AgbWFzc2ltYSBkaSBpbmNsdXNpb25lICglZCkgc3VwZXJhdGEgZHVyYW50ZSBsJ2luY2x1c2lvbmUgZGlcbiIKKyJcdCVzXG4iCisiZGFcbiIKKyJcdCVzXG4iCisiQ2nDsiBwdcOyIGVzc2VyZSBkb3Z1dG8gYSBkZWxsZSBpbmNsdXNpb25pIGNpcmNvbGFyaS4iCisKKyM6IGNvbmZpZy5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhwYW5kIGluY2x1ZGUgcGF0aCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc3BhbmRlcmUgaWwgcGVyY29yc28gZGkgaW5jbHVzaW9uZSAnJXMnIgorCisjOiBjb25maWcuYzoxNTEKK21zZ2lkICJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZXMgbXVzdCBjb21lIGZyb20gZmlsZXMiCittc2dzdHIgImxlIGluY2x1c2lvbmkgY29uZmlndXJhemlvbmUgcmVsYXRpdmUgZGV2b25vIHByb3ZlbmlyZSBkYSBmaWxlIgorCisjOiBjb25maWcuYzoxOTcKK21zZ2lkICJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZSBjb25kaXRpb25hbHMgbXVzdCBjb21lIGZyb20gZmlsZXMiCittc2dzdHIgIiIKKyJpIGNvbmRpemlvbmFsaSBkaSBpbmNsdXNpb25lIGNvbmZpZ3VyYXppb25lIHJlbGF0aXZpIGRldm9ubyBwcm92ZW5pcmUgZGEgZmlsZSIKKworIzogY29uZmlnLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImtleSBkb2VzIG5vdCBjb250YWluIGEgc2VjdGlvbjogJXMiCittc2dzdHIgImxhIGNoaWF2ZSBub24gY29udGllbmUgdW5hIHNlemlvbmU6ICVzIgorCisjOiBjb25maWcuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gdmFyaWFibGUgbmFtZTogJXMiCittc2dzdHIgImxhIGNoaWF2ZSBub24gY29udGllbmUgdW4gbm9tZSB2YXJpYWJpbGU6ICVzIgorCisjOiBjb25maWcuYzo0MDYgc2VxdWVuY2VyLmM6MjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleTogJXMiCittc2dzdHIgImNoaWF2ZSBub24gdmFsaWRhOiAlcyIKKworIzogY29uZmlnLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IChuZXdsaW5lKTogJXMiCittc2dzdHIgImNoaWF2ZSBub24gdmFsaWRhIChudW92YSByaWdhKTogJXMiCisKKyM6IGNvbmZpZy5jOjQ0OCBjb25maWcuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29uZmlnIHBhcmFtZXRlcjogJXMiCittc2dzdHIgInBhcmFtZXRybyBjb25maWd1cmF6aW9uZSBmaXR0aXppbzogJXMiCisKKyM6IGNvbmZpZy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBmb3JtYXQgaW4gJXMiCittc2dzdHIgImZvcm1hdG8gZml0dGl6aW8gaW4gJXMiCisKKyM6IGNvbmZpZy5jOjgyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gYmxvYiAlcyIKK21zZ3N0ciAicmlnYSBjb25maWd1cmF6aW9uZSAlZCBlcnJhdGEgbmVsIGJsb2IgJXMiCisKKyM6IGNvbmZpZy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gZmlsZSAlcyIKK21zZ3N0ciAicmlnYSBjb25maWd1cmF6aW9uZSAlZCBlcnJhdGEgbmVsIGZpbGUgJXMiCisKKyM6IGNvbmZpZy5jOjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgInJpZ2EgY29uZmlndXJhemlvbmUgJWQgZXJyYXRhIG5lbGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiBjb25maWcuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN1Ym1vZHVsZS1ibG9iICVzIgorbXNnc3RyICJyaWdhIGNvbmZpZ3VyYXppb25lICVkIGVycmF0YSBuZWwgYmxvYiBzb3R0b21vZHVsbyAlcyIKKworIzogY29uZmlnLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBjb21tYW5kIGxpbmUgJXMiCittc2dzdHIgInJpZ2EgY29uZmlndXJhemlvbmUgJWQgZXJyYXRhIG5lbGxhIHJpZ2EgZGkgY29tYW5kbyAlcyIKKworIzogY29uZmlnLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiAlcyIKK21zZ3N0ciAicmlnYSBjb25maWd1cmF6aW9uZSAlZCBlcnJhdGEgaW4gJXMiCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgIm91dCBvZiByYW5nZSIKK21zZ3N0ciAiZnVvcmkgaW50ZXJ2YWxsbyIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAiaW52YWxpZCB1bml0IgorbXNnc3RyICJ1bml0w6Agbm9uIHZhbGlkYSIKKworIzogY29uZmlnLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAidmFsb3JlIGNvbmZpZ3VyYXppb25lIG51bWVyaWNvICclcycgZXJyYXRvIHBlciAnJXMnOiAlcyIKKworIzogY29uZmlnLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGJsb2IgJXM6ICVzIgorbXNnc3RyICJ2YWxvcmUgY29uZmlndXJhemlvbmUgbnVtZXJpY28gJyVzJyBlcnJhdG8gcGVyICclcycgbmVsIGJsb2IgJXM6ICVzIgorCisjOiBjb25maWcuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIgorbXNnc3RyICJ2YWxvcmUgY29uZmlndXJhemlvbmUgbnVtZXJpY28gJyVzJyBlcnJhdG8gcGVyICclcycgbmVsIGZpbGUgJXM6ICVzIgorCisjOiBjb25maWcuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN0YW5kYXJkIGlucHV0OiAlcyIKK21zZ3N0ciAiIgorInZhbG9yZSBjb25maWd1cmF6aW9uZSBudW1lcmljbyAnJXMnIGVycmF0byBwZXIgJyVzJyBuZWxsbyBzdGFuZGFyZCBpbnB1dDogJXMiCisKKyM6IGNvbmZpZy5jOjEwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6ICVzIgorbXNnc3RyICIiCisidmFsb3JlIGNvbmZpZ3VyYXppb25lIG51bWVyaWNvICclcycgZXJyYXRvIHBlciAnJXMnIG5lbCBibG9iIHNvdHRvbW9kdWxvICVzOiAiCisiJXMiCisKKyM6IGNvbmZpZy5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gY29tbWFuZCBsaW5lICVzOiAlcyIKK21zZ3N0ciAiIgorInZhbG9yZSBjb25maWd1cmF6aW9uZSBudW1lcmljbyAnJXMnIGVycmF0byBwZXIgJyVzJyBuZWxsYSByaWdhIGRpIGNvbWFuZG8gIgorIiVzOiAlcyIKKworIzogY29uZmlnLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgInZhbG9yZSBjb25maWd1cmF6aW9uZSBudW1lcmljbyAnJXMnIGVycmF0byBwZXIgJyVzJyBpbiAlczogJXMiCisKKyM6IGNvbmZpZy5jOjExMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAiZXNwYW5zaW9uZSBkaXJlY3RvcnkgdXRlbnRlIGluICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBjb25maWcuYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIHBlciAnJXMnIG5vbiDDqCB1biB0aW1lc3RhbXAgdmFsaWRvIgorCisjOiBjb25maWcuYzoxMjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYnJldiBsZW5ndGggb3V0IG9mIHJhbmdlOiAlZCIKK21zZ3N0ciAibHVuZ2hlenphIGFiYnJldmlhemlvbmUgZnVvcmkgaW50ZXJ2YWxsbzogJWQiCisKKyM6IGNvbmZpZy5jOjEyMjIgY29uZmlnLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAibGl2ZWxsbyBjb21wcmVzc2lvbmUgemxpYiAlZCBub24gdmFsaWRvIgorCisjOiBjb25maWcuYzoxMzI1Cittc2dpZCAiY29yZS5jb21tZW50Q2hhciBzaG91bGQgb25seSBiZSBvbmUgY2hhcmFjdGVyIgorbXNnc3RyICJjb3JlLmNvbW1lbnRDaGFyIGRvdnJlYmJlIGVzc2VyZSBjb21wb3N0byBkYSB1biBzb2xvIGNhcmF0dGVyZSIKKworIzogY29uZmlnLmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiCittc2dzdHIgIm1vZGFsaXTDoCBub24gdmFsaWRhIHBlciBsYSBjcmVhemlvbmUgZGkgdW4gb2dnZXR0bzogJXMiCisKKyM6IGNvbmZpZy5jOjE0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAidmFsb3JlIG1hbGZvcm1hdG8gcGVyICVzIgorCisjOiBjb25maWcuYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJ2YWxvcmUgbWFsZm9ybWF0byBwZXIgJXM6ICVzIgorCisjOiBjb25maWcuYzoxNDU3Cittc2dpZCAibXVzdCBiZSBvbmUgb2Ygbm90aGluZywgbWF0Y2hpbmcsIHNpbXBsZSwgdXBzdHJlYW0gb3IgY3VycmVudCIKK21zZ3N0ciAiZGV2J2Vzc2VyZSBub3RoaW5nLCBtYXRjaGluZywgc2ltcGxlLCB1cHN0cmVhbSBvIGN1cnJlbnQiCisKKyM6IGNvbmZpZy5jOjE1MTggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTQxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICJsaXZlbGxvIGNvbXByZXNzaW9uZSBwYWNrICVkIG5vbiB2YWxpZG8iCisKKyM6IGNvbmZpZy5jOjE2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvYWQgY29uZmlnIGJsb2Igb2JqZWN0ICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNhcmljYXJlIGwnb2dnZXR0byBibG9iIGNvbmZpZ3VyYXppb25lICclcyciCisKKyM6IGNvbmZpZy5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBibG9iIgorbXNnc3RyICJpbCByaWZlcmltZW50byAnJXMnIG5vbiBwdW50YSBhZCB1biBibG9iIgorCisjOiBjb25maWcuYzoxNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIGNvbmZpZyBibG9iICclcyciCittc2dzdHIgImltcG9zc2liaWxlIHJpc29sdmVyZSBpbCBibG9iIGNvbmZpZ3VyYXppb25lICclcyciCisKKyM6IGNvbmZpZy5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlICVzIgorbXNnc3RyICJhbmFsaXNpIGRpICVzIG5vbiByaXVzY2l0YSIKKworIzogY29uZmlnLmM6MTc0MworbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGxhIGNvbmZpZ3VyYXppb25lIGEgcmlnYSBkaSBjb21hbmRvIgorCisjOiBjb25maWcuYzoyMDk3Cittc2dpZCAidW5rbm93biBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIgorbXNnc3RyICIiCisic2kgw6ggdmVyaWZpY2F0byB1biBlcnJvcmUgaW1wcmV2aXN0byBkdXJhbnRlIGxhIGxldHR1cmEgZGVpIGZpbGUgZGkgIgorImNvbmZpZ3VyYXppb25lIgorCisjOiBjb25maWcuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgJXM6ICclcyciCittc2dzdHIgIiVzIG5vbiB2YWxpZG86ICclcyciCisKKyM6IGNvbmZpZy5jOjIzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIHZhbHVlICclZCcgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwIgorbXNnc3RyICIiCisiaWwgdmFsb3JlIHNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSAnJWQnIGRvdnJlYmJlIGVzc2VyZSBjb21wcmVzbyBmcmEgMCBlICIKKyIxMDAiCisKKyM6IGNvbmZpZy5jOjIzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlICclcycgZGFsbGEgY29uZmlndXJhemlvbmUgYSByaWdhIGRpIGNvbWFuZG8iCisKKyM6IGNvbmZpZy5jOjIzNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICJ2YXJpYWJpbGUgY29uZmlndXJhemlvbmUgJyVzJyBlcnJhdGEgbmVsIGZpbGUgJyVzJyBhbGxhIHJpZ2EgJWQiCisKKyM6IGNvbmZpZy5jOjI0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWUgJyVzJyIKK21zZ3N0ciAibm9tZSBzZXppb25lICclcycgbm9uIHZhbGlkbyIKKworIzogY29uZmlnLmM6MjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbXVsdGlwbGUgdmFsdWVzIgorbXNnc3RyICIlcyBoYSBwacO5IHZhbG9yaSIKKworIzogY29uZmlnLmM6MjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAic2NyaXR0dXJhIGRlbCBudW92byBmaWxlIGRpIGNvbmZpZ3VyYXppb25lICVzIG5vbiByaXVzY2l0YSIKKworIzogY29uZmlnLmM6Mjc1NCBjb25maWcuYzozMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb2NrIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBibG9jY2FyZSBpbCBmaWxlIGRpIGNvbmZpZ3VyYXppb25lICVzIgorCisjOiBjb25maWcuYzoyNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgJXMiCittc2dzdHIgImFwZXJ0dXJhIGRpICVzIGluIGNvcnNvIgorCisjOiBjb25maWcuYzoyODAwIGJ1aWx0aW4vY29uZmlnLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0dGVybjogJXMiCittc2dzdHIgInBhdHRlcm4gbm9uIHZhbGlkbzogJXMiCisKKyM6IGNvbmZpZy5jOjI4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAiZmlsZSBkaSBjb25maWd1cmF6aW9uZSAlcyBub24gdmFsaWRvIgorCisjOiBjb25maWcuYzoyODM4IGNvbmZpZy5jOjMwOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnN0YXQgb24gJXMgZmFpbGVkIgorbXNnc3RyICJmc3RhdCBkaSAlcyBub24gcml1c2NpdGEiCisKKyM6IGNvbmZpZy5jOjI4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1tYXAgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbW1hcCBzdSAnJXMnIgorCisjOiBjb25maWcuYzoyODU4IGNvbmZpZy5jOjMwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2htb2Qgb24gJXMgZmFpbGVkIgorbXNnc3RyICJlc2VjdXppb25lIGNobW9kIHN1ICVzIG5vbiByaXVzY2l0YSIKKworIzogY29uZmlnLmM6Mjk0MyBjb25maWcuYzozMTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSAlcyIKKworIzogY29uZmlnLmM6Mjk3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgaW1wb3N0YXJlICclcycgYSAnJXMnIgorCisjOiBjb25maWcuYzoyOTc5IGJ1aWx0aW4vcmVtb3RlLmM6NjU1IGJ1aWx0aW4vcmVtb3RlLmM6ODQ5IGJ1aWx0aW4vcmVtb3RlLmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1bnNldCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlbGltaW5hcmUgbCdpbXBvc3RhemlvbmUgZGkgJyVzJyIKKworIzogY29uZmlnLmM6MzA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZTogJXMiCittc2dzdHIgIm5vbWUgc2V6aW9uZSBub24gdmFsaWRvOiAlcyIKKworIzogY29uZmlnLmM6MzIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIHZhbHVlIGZvciAnJXMnIgorbXNnc3RyICJ2YWxvcmUgbWFuY2FudGUgcGVyICclcyciCisKKyM6IGNvbm5lY3QuYzo2MQorbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdXBvbiBpbml0aWFsIGNvbnRhY3QiCittc2dzdHIgIiIKKyJsYSBjb250cm9wYXJ0ZSByZW1vdGEgaGEgY2hpdXNvIGxhIGNvbm5lc3Npb25lIGR1cmFudGUgaWwgY29udGF0dG8gaW5pemlhbGUiCisKKyM6IGNvbm5lY3QuYzo2MworbXNnaWQgIiIKKyJDb3VsZCBub3QgcmVhZCBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LlxuIgorIlxuIgorIlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzIHJpZ2h0c1xuIgorImFuZCB0aGUgcmVwb3NpdG9yeSBleGlzdHMuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgbGVnZ2VyZSBkYWwgcmVwb3NpdG9yeSByZW1vdG8uXG4iCisiXG4iCisiQXNzaWN1cmF0aSBkaSBkaXNwb3JyZSBkZWkgcHJpdmlsZWdpIGQnYWNjZXNzbyBjb3JyZXR0aVxuIgorImUgY2hlIGlsIHJlcG9zaXRvcnkgZXNpc3RhLiIKKworIzogY29ubmVjdC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciBkb2Vzbid0IHN1cHBvcnQgJyVzJyIKK21zZ3N0ciAiaWwgc2VydmVyIG5vbiBzdXBwb3J0YSAnJXMnIgorCisjOiBjb25uZWN0LmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciBkb2Vzbid0IHN1cHBvcnQgZmVhdHVyZSAnJXMnIgorbXNnc3RyICJpbCBzZXJ2ZXIgbm9uIHN1cHBvcnRhIGxhIGZ1bnppb25hbGl0w6AgJyVzJyIKKworIzogY29ubmVjdC5jOjExNAorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAiYXR0ZXNvIGZsdXNoIGRvcG8gbGV0dHVyYSBmdW56aW9uYWxpdMOgIgorCisjOiBjb25uZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGNhcGFiaWxpdGllcyBhZnRlciBmaXJzdCBsaW5lICclcyciCittc2dzdHIgImlnbm9ybyBsZSBmdW56aW9uYWxpdMOgIGRvcG8gbGEgcHJpbWEgcmlnYSAnJXMnIgorCisjOiBjb25uZWN0LmM6MjUyCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgY2FwYWJpbGl0aWVzXnt9IgorbXNnc3RyICJlcnJvcmUgcHJvdG9jb2xsbzogY2FwYWJpbGl0aWVzXnt9IG5vbiBhdHRlc28iCisKKyM6IGNvbm5lY3QuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYWxsb3cgc2hhLTEsIGdvdCAnJXMnIgorbXNnc3RyICJlcnJvcmUgcHJvdG9jb2xsbzogYXR0ZXNvIFNIQTEgc2hhbGxvdywgcmljZXZ1dG8gJyVzJyIKKworIzogY29ubmVjdC5jOjI3NQorbXNnaWQgInJlcG9zaXRvcnkgb24gdGhlIG90aGVyIGVuZCBjYW5ub3QgYmUgc2hhbGxvdyIKK21zZ3N0ciAiaWwgcmVwb3NpdG9yeSBkZWxsYSBjb250cm9wYXJ0ZSBub24gcHXDsiBlc3NlcmUgc2hhbGxvdyIKKworIzogY29ubmVjdC5jOjMxMworbXNnaWQgImludmFsaWQgcGFja2V0IgorbXNnc3RyICJwYWNjaGV0dG8gbm9uIHZhbGlkbyIKKworIzogY29ubmVjdC5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCAnJXMnIgorbXNnc3RyICJlcnJvcmUgcHJvdG9jb2xsbzogJyVzJyBub24gYXR0ZXNvIgorCisjOiBjb25uZWN0LmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbHMtcmVmcyByZXNwb25zZTogJXMiCittc2dzdHIgInJpc3Bvc3RhIGxzLXJlZnMgbm9uIHZhbGlkYTogJXMiCisKKyM6IGNvbm5lY3QuYzo0NDUKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciByZWYgbGlzdGluZyIKK21zZ3N0ciAiYXR0ZXNvIGZsdXNoIGRvcG8gZWxlbmNvIHJlZiIKKworIzogY29ubmVjdC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCAnJXMnIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgImlsIHByb3RvY29sbG8gJyVzJyBub24gw6ggc3VwcG9ydGF0byIKKworIzogY29ubmVjdC5jOjU5NQorbXNnaWQgInVuYWJsZSB0byBzZXQgU09fS0VFUEFMSVZFIG9uIHNvY2tldCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgaW1wb3N0YXJlIFNPX0tFRVBBTElWRSBzdWwgc29ja2V0IgorCisjOiBjb25uZWN0LmM6NjM1IGNvbm5lY3QuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9va2luZyB1cCAlcyAuLi4gIgorbXNnc3RyICJSaXNvbHV6aW9uZSBkaSAlcyBpbiBjb3Jzby4uLiAiCisKKyM6IGNvbm5lY3QuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgJXMgKHBvcnQgJXMpICglcykiCittc2dzdHIgImltcG9zc2liaWxlIHJpc29sdmVyZSAlcyAocG9ydGEgJXMpICglcykiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkxvb2tpbmcgdXAgJXMgLi4uICIKKyM6IGNvbm5lY3QuYzo2NDMgY29ubmVjdC5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZG9uZS5cbiIKKyJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgorbXNnc3RyICIiCisiZmF0dG8uXG4iCisiQ29ubmVzc2lvbmUgYSAlcyAocG9ydGEgJXMpIGluIGNvcnNvLi4uICIKKworIzogY29ubmVjdC5jOjY2NSBjb25uZWN0LmM6NzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gY29ubmVjdCB0byAlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIGNvbGxlZ2Fyc2kgYSAlczpcbiIKKyIlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKKyM6IGNvbm5lY3QuYzo2NzEgY29ubmVjdC5jOjc0OAorbXNnaWQgImRvbmUuIgorbXNnc3RyICJmYXR0by4iCisKKyM6IGNvbm5lY3QuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmlzb2x2ZXJlICVzICglcykiCisKKyM6IGNvbm5lY3QuYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwb3J0ICVzIgorbXNnc3RyICJwb3J0YSAlcyBzY29ub3NjaXV0YSIKKworIzogY29ubmVjdC5jOjg0NSBjb25uZWN0LmM6MTE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIGhvc3RuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAibm9tZSBob3N0IHN0cmFubyAnJXMnIGJsb2NjYXRvIgorCisjOiBjb25uZWN0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcG9ydCAnJXMnIGJsb2NrZWQiCittc2dzdHIgInBvcnRhIHN0cmFuYSAnJXMnIGJsb2NjYXRhIgorCisjOiBjb25uZWN0LmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGFydCBwcm94eSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXZ2aWFyZSBpbCBwcm94eSAlcyIKKworIzogY29ubmVjdC5jOjkyOAorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkOyBzZWUgJ2dpdCBoZWxwIHB1bGwnIGZvciB2YWxpZCB1cmwgc3ludGF4IgorbXNnc3RyICIiCisibmVzc3VuIHBlcmNvcnNvIHNwZWNpZmljYXRvOyB2ZWRlcmUgJ2dpdCBoZWxwIHB1bGwnIHBlciBsZSBzaW50YXNzaSBVUkwgIgorInZhbGlkZSIKKworIzogY29ubmVjdC5jOjExMjMKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IC00IgorbXNnc3RyICJsYSB2YXJpYW50ZSBTU0ggJ3NpbXBsZScgbm9uIHN1cHBvcnRhIC00IgorCisjOiBjb25uZWN0LmM6MTEzNQorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiCittc2dzdHIgImxhIHZhcmlhbnRlIFNTSCAnc2ltcGxlJyBub24gc3VwcG9ydGEgLTYiCisKKyM6IGNvbm5lY3QuYzoxMTUyCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIHBvcnQiCittc2dzdHIgImxhIHZhcmlhbnRlIFNTSCAnc2ltcGxlJyBub24gc3VwcG9ydGEgbCdpbXBvc3RhemlvbmUgZGVsbGEgcG9ydGEiCisKKyM6IGNvbm5lY3QuYzoxMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcGF0aG5hbWUgJyVzJyBibG9ja2VkIgorbXNnc3RyICJwZXJjb3JzbyBzdHJhbm8gJyVzJyBibG9jY2F0byIKKworIzogY29ubmVjdC5jOjEzMTEKK21zZ2lkICJ1bmFibGUgdG8gZm9yayIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgZm9yayIKKworIzogY29ubmVjdGVkLmM6OTggYnVpbHRpbi9mc2NrLmM6MjA4IGJ1aWx0aW4vcHJ1bmUuYzo0MworbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAiQ29udHJvbGxvIGNvbm5lc3Npb25lIGluIGNvcnNvIgorCisjOiBjb25uZWN0ZWQuYzoxMTAKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSAnZ2l0LXJldi1saXN0JyIKKworIzogY29ubmVjdGVkLmM6MTMwCittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0IgorbXNnc3RyICJzY3JpdHR1cmEgbmVsbGEgcmV2LWxpc3Qgbm9uIHJpdXNjaXRhIgorCisjOiBjb25uZWN0ZWQuYzoxMzcKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbiIKK21zZ3N0ciAiY2hpdXN1cmEgc3RhbmRhcmQgaW5wdXQgZGVsbGEgcmV2LWxpc3Qgbm9uIHJpdXNjaXRhIgorCisjOiBjb252ZXJ0LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgY3JsZl9hY3Rpb24gJWQiCittc2dzdHIgImNybGZfYWN0aW9uICVkIGlsbGVjaXRhIgorCisjOiBjb252ZXJ0LmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNSTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMiCittc2dzdHIgIkNSTEYgc2FyZWJiZSBzb3N0aXR1aXRvIGRhIExGIGluICVzIgorCisjOiBjb252ZXJ0LmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDUkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMuXG4iCisiVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIkNSTEYgc2Fyw6Agc29zdGl0dWl0byBkYSBMRiBpbiAlcy5cbiIKKyJJbCBmaWxlIGF2csOgIGkgc3VvaSBmaW5lIHJpZ2Egb3JpZ2luYXJpIG5lbGxhIHByb3ByaWEgZGlyZWN0b3J5IGRpIGxhdm9ybyIKKworIzogY29udmVydC5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIgorbXNnc3RyICJMRiBzYXJlYmJlIHNvc3RpdHVpdG8gZGEgQ1JMRiBpbiAlcyIKKworIzogY29udmVydC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJMRiBzYXLDoCBzb3N0aXR1aXRvIGRhIENSTEYgaW4gJXMuXG4iCisiSWwgZmlsZSBhdnLDoCBpIHN1b2kgZmluZSByaWdhIG9yaWdpbmFyaSBuZWxsYSBwcm9wcmlhIGRpcmVjdG9yeSBkaSBsYXZvcm8iCisKKyM6IGNvbnZlcnQuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHByb2hpYml0ZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICJJbCBCT00gw6ggdmlldGF0byBpbiAnJXMnIHNlIGlsIGZpbGUgw6ggY29kaWZpY2F0byBjb21lICVzIgorCisjOiBjb252ZXJ0LmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lLipzIGFzICIKKyJ3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisiSWwgZmlsZSAnJXMnIGNvbnRpZW5lIHVuIGluZGljYXRvcmUgZGVsbCdvcmRpbmUgZGVpIGJ5dGUgKEJPTSkuIFVzYXJlIFVURi0iCisiJS4qcyBjb21lIGNvZGlmaWNhIGRlbGwnYWxiZXJvIGRpIGxhdm9yby4iCisKKyM6IGNvbnZlcnQuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHJlcXVpcmVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAiSWwgQk9NIMOoIHJpY2hpZXN0byBpbiAnJXMnIHNlIGlsIGZpbGUgw6ggY29kaWZpY2F0byBjb21lICVzIgorCisjOiBjb252ZXJ0LmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGlzIG1pc3NpbmcgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSVzQkUgb3IgVVRGLSIKKyIlc0xFIChkZXBlbmRpbmcgb24gdGhlIGJ5dGUgb3JkZXIpIGFzIHdvcmtpbmctdHJlZS1lbmNvZGluZy4iCittc2dzdHIgIiIKKyJOZWwgZmlsZSAnJXMnIG1hbmNhIHVuIGluZGljYXRvcmUgZGVsbCdvcmRpbmUgZGVpIGJ5dGUgKEJPTSkuIFVzYXJlIFVURi0lc0JFICIKKyJvIFVURi0lc0xFIChhIHNlY29uZGEgZGVsbCdvcmRpbmUgZGVpIGJ5dGUpIGNvbWUgY29kaWZpY2EgZGVsbCdhbGJlcm8gZGkgIgorImxhdm9yby4iCisKKyM6IGNvbnZlcnQuYzo0MTkgY29udmVydC5jOjQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZW5jb2RlICclcycgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAiY29udmVyc2lvbmUgZGVsbGEgY29kaWZpY2EgJyVzJyBkYSAlcyBhICVzIG5vbiByaXVzY2l0YSIKKworIzogY29udmVydC5jOjQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICJlbmNvZGluZyAnJXMnIGZyb20gJXMgdG8gJXMgYW5kIGJhY2sgaXMgbm90IHRoZSBzYW1lIgorbXNnc3RyICIiCisiaWwgcmlzdWx0YXRvIGRlbGxhIGNvZGlmaWNhIGRpICclcycgZGEgJXMgYSAlcyBlIHZpY2V2ZXJzYSBub24gw6ggbG8gc3Rlc3NvIgorCisjOiBjb252ZXJ0LmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmb3JrIHRvIHJ1biBleHRlcm5hbCBmaWx0ZXIgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgZm9yayBwZXIgZXNlZ3VpcmUgaWwgZmlsdHJvIGVzdGVybm8gJyVzJyIKKworIzogY29udmVydC5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmVlZCB0aGUgaW5wdXQgdG8gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGZvcm5pcmUgbCdpbnB1dCBhbCBmaWx0cm8gZXN0ZXJubyAnJXMnIgorCisjOiBjb252ZXJ0LmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCAlZCIKK21zZ3N0ciAiZXNlY3V6aW9uZSBkZWwgZmlsdHJvIGVzdGVybm8gJyVzJyBub24gcml1c2NpdGE6ICVkIgorCisjOiBjb252ZXJ0LmM6NzMwIGNvbnZlcnQuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBmcm9tIGV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibGV0dHVyYSBkYWwgZmlsdHJvIGVzdGVybm8gJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGNvbnZlcnQuYzo3MzYgY29udmVydC5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgImVzZWN1emlvbmUgZGVsIGZpbHRybyBlc3Rlcm5vICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBjb252ZXJ0LmM6ODM5Cittc2dpZCAidW5leHBlY3RlZCBmaWx0ZXIgdHlwZSIKK21zZ3N0ciAidGlwbyBmaWx0cm8gaW5hdHRlc28iCisKKyM6IGNvbnZlcnQuYzo4NTAKK21zZ2lkICJwYXRoIG5hbWUgdG9vIGxvbmcgZm9yIGV4dGVybmFsIGZpbHRlciIKK21zZ3N0ciAibm9tZSBwZXJjb3JzbyB0cm9wcG8gbHVuZ28gcGVyIGlsIGZpbHRybyBlc3Rlcm5vIgorCisjOiBjb252ZXJ0LmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHRlcm5hbCBmaWx0ZXIgJyVzJyBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUgYWx0aG91Z2ggbm90IGFsbCBwYXRocyBoYXZlICIKKyJiZWVuIGZpbHRlcmVkIgorbXNnc3RyICIiCisiaWwgZmlsdHJvIGVzdGVybm8gJyVzJyBub24gw6ggcGnDuSBkaXNwb25pYmlsZSBub25vc3RhbnRlIG5vbiB0dXR0aSBpIHBlcmNvcnNpICIKKyJzaWFubyBzdGF0aSBmaWx0cmF0aSIKKworIzogY29udmVydC5jOjEyMjMKK21zZ2lkICJ0cnVlL2ZhbHNlIGFyZSBubyB2YWxpZCB3b3JraW5nLXRyZWUtZW5jb2RpbmdzIgorbXNnc3RyICJ0cnVlL2ZhbHNlIG5vbiBzb25vIGNvZGlmaWNoZSBkZWxsJ2FsYmVybyBkaSBsYXZvcm8gdmFsaWRlIgorCisjOiBjb252ZXJ0LmM6MTQxMSBjb252ZXJ0LmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4gZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICIlczogZXNlY3V6aW9uZSBkZWwgZmlsdHJvIGNsZWFuICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBjb252ZXJ0LmM6MTQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogc211ZGdlIGZpbHRlciAlcyBmYWlsZWQiCittc2dzdHIgIiVzOiBlc2VjdXppb25lIGRlbCBmaWx0cm8gc211ZGdlICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBkYXRlLmM6MTM4Cittc2dpZCAiaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiaW4gZnV0dXJvIgorCisjOiBkYXRlLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiBzZWNvbmRvIGZhIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IHNlY29uZGkgZmEiCisKKyM6IGRhdGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtaW51dGUgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IG1pbnV0byBmYSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBtaW51dGkgZmEiCisKKyM6IGRhdGUuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBob3VycyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gb3JhIGZhIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IG9yZSBmYSIKKworIzogZGF0ZS5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gZGF5cyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gZ2lvcm5vIGZhIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IGdpb3JuaSBmYSIKKworIzogZGF0ZS5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHdlZWsgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHdlZWtzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiBzZXR0aW1hbmEgZmEiCittc2dzdHJbMV0gIiU8UFJJdU1BWD4gc2V0dGltYW5lIGZhIgorCisjOiBkYXRlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gbWVzZSBmYSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBtZXNpIGZhIgorCisjOiBkYXRlLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4geWVhciIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiBhbm5vIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IGFubmkiCisKKyMuIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiCisjOiBkYXRlLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiJXMsICU8UFJJdU1BWD4gbWVzZSBmYSIKK21zZ3N0clsxXSAiJXMsICU8UFJJdU1BWD4gbWVzaSBmYSIKKworIzogZGF0ZS5jOjE5NyBkYXRlLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4geWVhciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IGFubm8gZmEiCittc2dzdHJbMV0gIiU8UFJJdU1BWD4gYW5uaSBmYSIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI3MgorbXNnaWQgIlByb3BhZ2F0aW5nIGlzbGFuZCBtYXJrcyIKK21zZ3N0ciAiUHJvcGFnYXppb25lIGNvbnRyYXNzZWduaSBpc29sZSBpbiBjb3JzbyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdHJlZSBvYmplY3QgJXMiCittc2dzdHIgIm9nZ2V0dG8gYWxiZXJvICVzIG5vbiB2YWxpZG8iCisKKyM6IGRlbHRhLWlzbGFuZHMuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgaXNsYW5kIHJlZ2V4IGZvciAnJXMnOiAlcyIKK21zZ3N0ciAiIgorImNhcmljYW1lbnRvIGRlbGwnZXNwcmVzc2lvbmUgcmVnb2xhcmUgZGVsbCdpc29sYSBwZXIgJyVzJyBub24gcml1c2NpdG86ICVzIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlzbGFuZCByZWdleCBmcm9tIGNvbmZpZyBoYXMgdG9vIG1hbnkgY2FwdHVyZSBncm91cHMgKG1heD0lZCkiCittc2dzdHIgIiIKKyJsJ2VzcHJlc3Npb25lIHJlZ29sYXJlIGRlbGwnaXNvbGEgdHJhdHRhIGRhbGxhIGNvbmZpZ3VyYXppb25lIGhhIHRyb3BwaSAiCisiZ3J1cHBpIGNhdHR1cmEgKG1hc3NpbW89JWQpIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtlZCAlZCBpc2xhbmRzLCBkb25lLlxuIgorbXNnc3RyICJDb250cmFzc2VnbmF0ZSAlZCBpc29sZSwgZmF0dG8uXG4iCisKKyM6IGRpZmZjb3JlLW9yZGVyLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciCittc2dzdHIgImxldHR1cmEgZGVsbCdvcmRlcmZpbGUgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGRpZmZjb3JlLXJlbmFtZS5jOjU0MworbXNnaWQgIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICJSaWxldmFtZW50byByaWRlbm9taW5hemlvbmUgbm9uIGVzYXR0YSBpbiBjb3JzbyIKKworIzogZGlmZi1uby1pbmRleC5jOjIzOAorbXNnaWQgImdpdCBkaWZmIC0tbm8taW5kZXggWzxvcHRpb25zPl0gPHBhdGg+IDxwYXRoPiIKK21zZ3N0ciAiZ2l0IGRpZmYgLS1uby1pbmRleCBbPG9wemlvbmk+XSA8cGVyY29yc28+IDxwZXJjb3Jzbz4iCisKKyM6IGRpZmYtbm8taW5kZXguYzoyNjMKK21zZ2lkICIiCisiTm90IGEgZ2l0IHJlcG9zaXRvcnkuIFVzZSAtLW5vLWluZGV4IHRvIGNvbXBhcmUgdHdvIHBhdGhzIG91dHNpZGUgYSB3b3JraW5nICIKKyJ0cmVlIgorbXNnc3RyICIiCisiTm9uIMOoIHVuIHJlcG9zaXRvcnkgR2l0LiBVc2EgLS1uby1pbmRleCBwZXIgY29uZnJvbnRhcmUgZHVlIHBlcmNvcnNpIGFsIGRpICIKKyJmdW9yaSBkaSB1biBhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBkaWZmLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiIgorIiAgQW5hbGlzaSBkZWxsYSBwZXJjZW50dWFsZSBkaSBjdXRvZmYgc3RhdGlzdGljaGUgZGlyZWN0b3J5ICclcycgbm9uICIKKyJyaXVzY2l0YVxuIgorCisjOiBkaWZmLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgVW5rbm93biBkaXJzdGF0IHBhcmFtZXRlciAnJXMnXG4iCittc2dzdHIgIiAgUGFyYW1ldHJvIHN0YXRpc3RpY2hlIGRpcmVjdG9yeSAnJXMnIHNjb25vc2NpdXRvXG4iCisKKyM6IGRpZmYuYzoyOTYKK21zZ2lkICIiCisiY29sb3IgbW92ZWQgc2V0dGluZyBtdXN0IGJlIG9uZSBvZiAnbm8nLCAnZGVmYXVsdCcsICdibG9ja3MnLCAnemVicmEnLCAiCisiJ2RpbW1lZC16ZWJyYScsICdwbGFpbiciCittc2dzdHIgIiIKKyJsJ2ltcG9zdGF6aW9uZSBjb2xvcmUgcGVyIGZpbGUgc3Bvc3RhdGkgZGV2ZSBlc3NlcmUgJ25vJywgJ2RlZmF1bHQnLCAiCisiJ2Jsb2NrcycsICd6ZWJyYScsICdkaW1tZWQtemVicmEnLCAncGxhaW4nIgorCisjOiBkaWZmLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmtub3duIGNvbG9yLW1vdmVkLXdzIG1vZGUgJyVzJywgcG9zc2libGUgdmFsdWVzIGFyZSAnaWdub3JlLXNwYWNlLWNoYW5nZScsICIKKyInaWdub3JlLXNwYWNlLWF0LWVvbCcsICdpZ25vcmUtYWxsLXNwYWNlJywgJ2FsbG93LWluZGVudGF0aW9uLWNoYW5nZSciCittc2dzdHIgIiIKKyJtb2RhbGl0w6AgY29sb3ItbW92ZWQtd3MgJyVzJyBzY29ub3NjaXV0YSwgaSB2YWxvcmkgcG9zc2liaWxpIHNvbm8gJ2lnbm9yZS0iCisic3BhY2UtY2hhbmdlJywgJ2lnbm9yZS1zcGFjZS1hdC1lb2wnLCAnaWdub3JlLWFsbC1zcGFjZScsICdhbGxvdy1pbmRlbnRhdGlvbi0iCisiY2hhbmdlJyIKKworIzogZGlmZi5jOjMzMgorbXNnaWQgIiIKKyJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyICIKKyJ3aGl0ZXNwYWNlIG1vZGVzIgorbXNnc3RyICIiCisiY29sb3ItbW92ZWQtd3M6IGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBub24gcHXDsiBlc3NlcmUgY29tYmluYXRhIGNvbiBhbHRyZSAiCisibW9kYWxpdMOgIHNwYXppIGJpYW5jaGkiCisKKyM6IGRpZmYuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIiIKKyJWYWxvcmUgc2Nvbm9zY2l1dG8gcGVyIGxhIHZhcmlhYmlsZSBkaSBjb25maWd1cmF6aW9uZSAnZGlmZi5zdWJtb2R1bGUnOiAnJXMnIgorCisjOiBkaWZmLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3VuZCBlcnJvcnMgaW4gJ2RpZmYuZGlyc3RhdCcgY29uZmlnIHZhcmlhYmxlOlxuIgorIiVzIgorbXNnc3RyICIiCisiVHJvdmF0aSBlcnJvcmkgbmVsbGEgdmFyaWFiaWxlIGRpIGNvbmZpZ3VyYXppb25lICdkaWZmLmRpcnN0YXQnOlxuIgorIiVzIgorCisjOiBkaWZmLmM6NDIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICJwcm9jZXNzbyBlc3Rlcm5vIGRpZmYgbW9ydG8sIG1pIGZlcm1vIGEgJXMiCisKKyM6IGRpZmYuYzo0NTQ3Cittc2dpZCAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKKyJsZSBvcHppb25pIC0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtLWNoZWNrIGUgLXMgc29ubyBtdXR1YW1lbnRlIGVzY2x1c2l2ZSIKKworIzogZGlmZi5jOjQ1NTAKK21zZ2lkICItRywgLVMgYW5kIC0tZmluZC1vYmplY3QgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAibGUgb3B6aW9uaSAtRywgLVMgZSAtLWZpbmQtb2JqZWN0IHNvbm8gbXV0dWFtZW50ZSBlc2NsdXNpdmUiCisKKyM6IGRpZmYuYzo0NjI4Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIi0tZm9sbG93IHJpY2hpZWRlIGVzYXR0YW1lbnRlIHVubyBzcGVjaWZpY2F0b3JlIHBlcmNvcnNvIgorCisjOiBkaWZmLmM6NDY3NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tc3RhdCB2YWx1ZTogJXMiCittc2dzdHIgInZhbG9yZSBub24gdmFsaWRvIHBlciAtLXN0YXQ6ICVzIgorCisjOiBkaWZmLmM6NDY4MSBkaWZmLmM6NDY4NiBkaWZmLmM6NDY5MSBkaWZmLmM6NDY5NiBkaWZmLmM6NTIwOQorIzogcGFyc2Utb3B0aW9ucy5jOjE5NyBwYXJzZS1vcHRpb25zLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiVzIHJpY2hpZWRlIHVuIHZhbG9yZSBudW1lcmljbyIKKworIzogZGlmZi5jOjQ3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkFuYWxpc2kgZGVsIHBhcmFtZXRybyBkZWxsJ29wemlvbmUgLS1kaXJzdGF0Ly1YIG5vbiByaXVzY2l0YTpcbiIKKyIlcyIKKworIzogZGlmZi5jOjQ3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjaGFuZ2UgY2xhc3MgJyVjJyBpbiAtLWRpZmYtZmlsdGVyPSVzIgorbXNnc3RyICJjbGFzc2UgbW9kaWZpY2EgJyVjJyBzY29ub3NjaXV0YSBpbiAtLWRpZmYtZmlsdGVyPSVzIgorCisjOiBkaWZmLmM6NDgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGFmdGVyIHdzLWVycm9yLWhpZ2hsaWdodD0lLipzIgorbXNnc3RyICJ2YWxvcmUgc2Nvbm9zY2l1dG8gZG9wbyB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIKKworIzogZGlmZi5jOjQ4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmlzb2x2ZXJlICclcyciCisKKyM6IGRpZmYuYzo0ODg2IGRpZmYuYzo0ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgPG4+LzxtPiBmb3JtIgorbXNnc3RyICIlcyByaWNoaWVkZSBpbCBmb3JtYXRvIDxuPi88bT4iCisKKyM6IGRpZmYuYzo0OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBjaGFyYWN0ZXIsIGdvdCAnJXMnIgorbXNnc3RyICIlcyByaWNoaWVkZSB1biBjYXJhdHRlcmUsIHJpY2V2dXRvICclcyciCisKKyM6IGRpZmYuYzo0OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLWNvbG9yLW1vdmVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJnb21lbnRvIC0tY29sb3ItbW92ZWQgZXJyYXRvOiAlcyIKKworIzogZGlmZi5jOjQ5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlICclcycgaW4gLS1jb2xvci1tb3ZlZC13cyIKK21zZ3N0ciAibW9kbyBub24gdmFsaWRvICclcycgaW4gLS1jb2xvci1tb3ZlZC13cyIKKworIzogZGlmZi5jOjQ5ODQKK21zZ2lkICIiCisib3B0aW9uIGRpZmYtYWxnb3JpdGhtIGFjY2VwdHMgXCJteWVyc1wiLCBcIm1pbmltYWxcIiwgXCJwYXRpZW5jZVwiIGFuZCAiCisiXCJoaXN0b2dyYW1cIiIKK21zZ3N0ciAiIgorImwnb3B6aW9uZSBkaWZmLWFsZ29yaXRobSBhY2NldHRhIGkgdmFsb3JpIFwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2UiCisiXCIgZSBcImhpc3RvZ3JhbVwiIgorCisjOiBkaWZmLmM6NTAyMCBkaWZmLmM6NTA0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50IHRvICVzIgorbXNnc3RyICJhcmdvbWVudG8gbm9uIHZhbGlkbyBwZXIgJXMiCisKKyM6IGRpZmYuYzo1MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAtLXN1Ym1vZHVsZSBvcHRpb24gcGFyYW1ldGVyOiAnJXMnIgorbXNnc3RyICJhbmFsaXNpIGRlbCBwYXJhbWV0cm8gZGVsbCdvcHppb25lIC0tc3VibW9kdWxlIG5vbiByaXVzY2l0YTogJyVzJyIKKworIzogZGlmZi5jOjUyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0td29yZC1kaWZmIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJnb21lbnRvIC0td29yZC1kaWZmIGVycmF0bzogJXMiCisKKyM6IGRpZmYuYzo1MjU3Cittc2dpZCAiRGlmZiBvdXRwdXQgZm9ybWF0IG9wdGlvbnMiCittc2dzdHIgIk9wemlvbmkgZm9ybWF0byBvdXRwdXQgZGlmZiIKKworIzogZGlmZi5jOjUyNTkgZGlmZi5jOjUyNjUKK21zZ2lkICJnZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAiZ2VuZXJhIHBhdGNoIgorCisjOiBkaWZmLmM6NTI2MiBidWlsdGluL2xvZy5jOjE3MworbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICJub24gdmlzdWFsaXp6YXJlIGwnb3V0cHV0IGRlbCBkaWZmIgorCisjOiBkaWZmLmM6NTI2NyBkaWZmLmM6NTM4MSBkaWZmLmM6NTM4OAorbXNnaWQgIjxuPiIKK21zZ3N0ciAiPG4+IgorCisjOiBkaWZmLmM6NTI2OCBkaWZmLmM6NTI3MQorbXNnaWQgImdlbmVyYXRlIGRpZmZzIHdpdGggPG4+IGxpbmVzIGNvbnRleHQiCittc2dzdHIgImdlbmVyYSBkaWZmIGNvbiA8bj4gcmlnaGUgZGkgY29udGVzdG8iCisKKyM6IGRpZmYuYzo1MjczCittc2dpZCAiZ2VuZXJhdGUgdGhlIGRpZmYgaW4gcmF3IGZvcm1hdCIKK21zZ3N0ciAiZ2VuZXJhIGlsIGRpZmYgaW4gZm9ybWF0byBncmV6em8iCisKKyM6IGRpZmYuYzo1Mjc2Cittc2dpZCAic3lub255bSBmb3IgJy1wIC0tcmF3JyIKK21zZ3N0ciAic2lub25pbW8gZGkgJy1wIC0tcmF3JyIKKworIzogZGlmZi5jOjUyODAKK21zZ2lkICJzeW5vbnltIGZvciAnLXAgLS1zdGF0JyIKK21zZ3N0ciAic2lub25pbW8gZGkgJy1wIC0tc3RhdCciCisKKyM6IGRpZmYuYzo1Mjg0Cittc2dpZCAibWFjaGluZSBmcmllbmRseSAtLXN0YXQiCittc2dzdHIgIi0tc3RhdCBsZWdnaWJpbGUgZGEgdW5hIG1hY2NoaW5hIgorCisjOiBkaWZmLmM6NTI4NworbXNnaWQgIm91dHB1dCBvbmx5IHRoZSBsYXN0IGxpbmUgb2YgLS1zdGF0IgorbXNnc3RyICJlbWV0dGkgaW4gb3V0cHV0IHNvbG8gbCd1bHRpbWEgcmlnYSBkaSAtLXN0YXQiCisKKyM6IGRpZmYuYzo1Mjg5IGRpZmYuYzo1Mjk3Cittc2dpZCAiPHBhcmFtMSxwYXJhbTI+Li4uIgorbXNnc3RyICI8cGFyYW1ldHJvMSxwYXJhbWV0cm8yPi4uLiIKKworIzogZGlmZi5jOjUyOTAKK21zZ2lkICIiCisib3V0cHV0IHRoZSBkaXN0cmlidXRpb24gb2YgcmVsYXRpdmUgYW1vdW50IG9mIGNoYW5nZXMgZm9yIGVhY2ggc3ViLWRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImVtZXR0aSBpbiBvdXRwdXQgbGEgZGlzdHJpYnV6aW9uZSBkZWwgbnVtZXJvIGRpIG1vZGlmaWNoZSByZWxhdGl2byBhIG9nbmkgIgorInNvdHRvZGlyZWN0b3J5IgorCisjOiBkaWZmLmM6NTI5NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1jdW11bGF0aXZlIgorbXNnc3RyICJzaW5vbmltbyBkaSAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSIKKworIzogZGlmZi5jOjUyOTgKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9ZmlsZXMscGFyYW0xLHBhcmFtMi4uLiIKK21zZ3N0ciAic2lub25pbW8gZGkgLS1kaXJzdGF0PWZpbGVzLHBhcmFtZXRybzEscGFyYW1ldHJvMi4uLiIKKworIzogZGlmZi5jOjUzMDIKK21zZ2lkICJ3YXJuIGlmIGNoYW5nZXMgaW50cm9kdWNlIGNvbmZsaWN0IG1hcmtlcnMgb3Igd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgIiIKKyJhdnZpc2Egc2UgbGUgbW9kaWZpY2hlIGludHJvZHVjb25vIG1hcmNhdG9yaSBjb25mbGl0dG8gbyBlcnJvcmkgc3BhemkgYmlhbmNoaSIKKworIzogZGlmZi5jOjUzMDUKK21zZ2lkICJjb25kZW5zZWQgc3VtbWFyeSBzdWNoIGFzIGNyZWF0aW9ucywgcmVuYW1lcyBhbmQgbW9kZSBjaGFuZ2VzIgorbXNnc3RyICIiCisicmlhc3N1bnRvIGNvbmNpc28gKGFkIGVzLiBlbGVtZW50aSBjcmVhdGksIHJpZGVub21pbmF0aSBlIG1vZGlmaWNoZSBtb2RpKSIKKworIzogZGlmZi5jOjUzMDgKK21zZ2lkICJzaG93IG9ubHkgbmFtZXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAidmlzdWFsaXp6YSBzb2xvIGkgbm9taSBkZWkgZmlsZSBtb2RpZmljYXRpIgorCisjOiBkaWZmLmM6NTMxMQorbXNnaWQgInNob3cgb25seSBuYW1lcyBhbmQgc3RhdHVzIG9mIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgInZpc3VhbGl6emEgc29sbyBpIG5vbWkgZSBsbyBzdGF0byBkZWkgZmlsZSBtb2RpZmljYXRpIgorCisjOiBkaWZmLmM6NTMxMworbXNnaWQgIjx3aWR0aD5bLDxuYW1lLXdpZHRoPlssPGNvdW50Pl1dIgorbXNnc3RyICI8YW1waWV6emE+Wyw8YW1waWV6emEgbm9tZT5bLDxudW1lcm8+XV0iCisKKyM6IGRpZmYuYzo1MzE0Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQiCittc2dzdHIgImdlbmVyYSBkaWZmc3RhdCIKKworIzogZGlmZi5jOjUzMTYgZGlmZi5jOjUzMTkgZGlmZi5jOjUzMjIKK21zZ2lkICI8d2lkdGg+IgorbXNnc3RyICI8YW1waWV6emE+IgorCisjOiBkaWZmLmM6NTMxNworbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiB3aWR0aCIKK21zZ3N0ciAiZ2VuZXJhIGlsIGRpZmZzdGF0IGNvbiB1bidhbXBpZXp6YSBzcGVjaWZpY2F0YSIKKworIzogZGlmZi5jOjUzMjAKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gbmFtZSB3aWR0aCIKK21zZ3N0ciAiZ2VuZXJhIGlsIGRpZmZzdGF0IGNvbiB1bidhbXBpZXp6YSBub21pIHNwZWNpZmljYXRhIgorCisjOiBkaWZmLmM6NTMyMworbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiBncmFwaCB3aWR0aCIKK21zZ3N0ciAiZ2VuZXJhIGlsIGRpZmZzdGF0IGNvbiB1bidhbXBpZXp6YSBncmFmbyBzcGVjaWZpY2F0YSIKKworIzogZGlmZi5jOjUzMjUKK21zZ2lkICI8Y291bnQ+IgorbXNnc3RyICI8bnVtZXJvPiIKKworIzogZGlmZi5jOjUzMjYKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGxpbWl0ZWQgbGluZXMiCittc2dzdHIgImdlbmVyYSBpbCBkaWZmc3RhdCBjb24gcmlnaGUgbGltaXRhdGUiCisKKyM6IGRpZmYuYzo1MzI5Cittc2dpZCAiZ2VuZXJhdGUgY29tcGFjdCBzdW1tYXJ5IGluIGRpZmZzdGF0IgorbXNnc3RyICJnZW5lcmEgcmlhc3N1bnRvIGNvbmNpc28gbmVsIGRpZmZzdGF0IgorCisjOiBkaWZmLmM6NTMzMgorbXNnaWQgIm91dHB1dCBhIGJpbmFyeSBkaWZmIHRoYXQgY2FuIGJlIGFwcGxpZWQiCittc2dzdHIgInN0YW1wYSBpbiBvdXRwdXQgdW4gZGlmZiBiaW5hcmlvIGNoZSBwdcOyIGVzc2VyZSBhcHBsaWNhdG8iCisKKyM6IGRpZmYuYzo1MzM1Cittc2dpZCAic2hvdyBmdWxsIHByZS0gYW5kIHBvc3QtaW1hZ2Ugb2JqZWN0IG5hbWVzIG9uIHRoZSBcImluZGV4XCIgbGluZXMiCittc2dzdHIgInZpc3VhbGl6emEgaSBub21pIG9nZ2V0dG8gcHJlIGUgcG9zdCBpbW1hZ2luZSBuZWxsZSByaWdoZSBcImluZGljZVwiIgorCisjOiBkaWZmLmM6NTMzNworbXNnaWQgInNob3cgY29sb3JlZCBkaWZmIgorbXNnc3RyICJ2aXN1YWxpenphIGRpZmYgY29sb3JhdG8iCisKKyM6IGRpZmYuYzo1MzM4Cittc2dpZCAiPGtpbmQ+IgorbXNnc3RyICI8dGlwbz4iCisKKyM6IGRpZmYuYzo1MzM5Cittc2dpZCAiIgorImhpZ2hsaWdodCB3aGl0ZXNwYWNlIGVycm9ycyBpbiB0aGUgJ2NvbnRleHQnLCAnb2xkJyBvciAnbmV3JyBsaW5lcyBpbiB0aGUgIgorImRpZmYiCittc2dzdHIgIiIKKyJldmlkZW56aWEgZ2xpIGVycm9yaSBkaSBzcGF6aSBiaWFuY2hpIG5lbGxlIHJpZ2hlICdjb250ZXN0bycsICd2ZWNjaGllJyBvICIKKyInbnVvdmUnIG5lbCBkaWZmIgorCisjOiBkaWZmLmM6NTM0MgorbXNnaWQgIiIKKyJkbyBub3QgbXVuZ2UgcGF0aG5hbWVzIGFuZCB1c2UgTlVMcyBhcyBvdXRwdXQgZmllbGQgdGVybWluYXRvcnMgaW4gLS1yYXcgb3IgIgorIi0tbnVtc3RhdCIKK21zZ3N0ciAiIgorIm5vbiByaW11b3ZlcmUgaSBub21pIHBlcmNvcnNvIGUgdXNhcmUgY2FyYXR0ZXJpIE5VTCBjb21lIHRlcm1pbmF0b3JpIGNhbXBvICIKKyJpbiAtLXJhdyBvIC0tbnVtc3RhdCIKKworIzogZGlmZi5jOjUzNDUgZGlmZi5jOjUzNDggZGlmZi5jOjUzNTEgZGlmZi5jOjU0NTcKK21zZ2lkICI8cHJlZml4PiIKK21zZ3N0ciAiPHByZWZpc3NvPiIKKworIzogZGlmZi5jOjUzNDYKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBzb3VyY2UgcHJlZml4IGluc3RlYWQgb2YgXCJhL1wiIgorbXNnc3RyICJ2aXN1YWxpenphIGlsIHByZWZpc3NvIHNvcmdlbnRlIHNwZWNpZmljYXRvIGludmVjZSBkaSBcImEvXCIiCisKKyM6IGRpZmYuYzo1MzQ5Cittc2dpZCAic2hvdyB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gcHJlZml4IGluc3RlYWQgb2YgXCJiL1wiIgorbXNnc3RyICJ2aXN1YWxpenphIGlsIHByZWZpc3NvIGRlc3RpbmF6aW9uZSBzcGVjaWZpY2F0byBpbnZlY2UgZGkgXCJiL1wiIgorCisjOiBkaWZmLmM6NTM1MgorbXNnaWQgInByZXBlbmQgYW4gYWRkaXRpb25hbCBwcmVmaXggdG8gZXZlcnkgbGluZSBvZiBvdXRwdXQiCittc2dzdHIgImFudGVwb25pIHVuIHByZWZpc3NvIGFnZ2l1bnRpdm8gYWQgb2duaSByaWdhIGRlbGwnb3V0cHV0IgorCisjOiBkaWZmLmM6NTM1NQorbXNnaWQgImRvIG5vdCBzaG93IGFueSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcHJlZml4IgorbXNnc3RyICJub24gdmlzdWFsaXp6YXJlIGFsY3VuIHByZWZpc3NvIHNvcmdlbnRlIG8gZGVzdGluYXppb25lIgorCisjOiBkaWZmLmM6NTM1OAorbXNnaWQgInNob3cgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbGluZXMiCittc2dzdHIgIiIKKyJ2aXN1YWxpenphIGlsIGNvbnRlc3RvIHRyYSBnbGkgaHVuayBkZWwgZGlmZiBmaW5vIGFsIG51bWVybyBkaSByaWdoZSAiCisic3BlY2lmaWNhdG8iCisKKyM6IGRpZmYuYzo1MzYyIGRpZmYuYzo1MzY3IGRpZmYuYzo1MzcyCittc2dpZCAiPGNoYXI+IgorbXNnc3RyICI8Y2FyYXR0ZXJlPiIKKworIzogZGlmZi5jOjUzNjMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBuZXcgbGluZSBpbnN0ZWFkIG9mICcrJyIKK21zZ3N0ciAic3BlY2lmaWNhIGlsIGNhcmF0dGVyZSBjaGUgaW5kaWNhIHVuYSBudW92YSByaWdhIGFsIHBvc3RvIGRpICcrJyIKKworIzogZGlmZi5jOjUzNjgKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYW4gb2xkIGxpbmUgaW5zdGVhZCBvZiAnLSciCittc2dzdHIgInNwZWNpZmljYSBpbCBjYXJhdHRlcmUgY2hlIGluZGljYSB1bmEgdmVjY2hpYSByaWdhIGFsIHBvc3RvIGRpICctJyIKKworIzogZGlmZi5jOjUzNzMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBjb250ZXh0IGluc3RlYWQgb2YgJyAnIgorbXNnc3RyICJzcGVjaWZpY2EgaWwgY2FyYXR0ZXJlIGNoZSBpbmRpY2EgdW4gY29udGVzdG8gYWwgcG9zdG8gZGkgJyAnIgorCisjOiBkaWZmLmM6NTM3NgorbXNnaWQgIkRpZmYgcmVuYW1lIG9wdGlvbnMiCittc2dzdHIgIk9wemlvbmkgcmlub21pbmF6aW9uZSBkaWZmIgorCisjOiBkaWZmLmM6NTM3NworbXNnaWQgIjxuPlsvPG0+XSIKK21zZ3N0ciAiPG4+Wy88bT5dIgorCisjOiBkaWZmLmM6NTM3OAorbXNnaWQgImJyZWFrIGNvbXBsZXRlIHJld3JpdGUgY2hhbmdlcyBpbnRvIHBhaXJzIG9mIGRlbGV0ZSBhbmQgY3JlYXRlIgorbXNnc3RyICIiCisic3BlenphIG1vZGlmaWNoZSBkaSByaXNjcml0dHVyYSBjb21wbGV0YSBpbiBjb3BwaWUgZWxpbWluYXppb25lL2NyZWF6aW9uZSIKKworIzogZGlmZi5jOjUzODIKK21zZ2lkICJkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAicmlsZXZhIGxlIHJpZGVub21pbmF6aW9uaSIKKworIzogZGlmZi5jOjUzODYKK21zZ2lkICJvbWl0IHRoZSBwcmVpbWFnZSBmb3IgZGVsZXRlcyIKK21zZ3N0ciAib21ldHRpIGxhIHByZWltbWFnaW5lIHBlciBsZSBlbGltaW5hemlvbmkiCisKKyM6IGRpZmYuYzo1Mzg5Cittc2dpZCAiZGV0ZWN0IGNvcGllcyIKK21zZ3N0ciAicmlsZXZhIGxlIGNvcGllIgorCisjOiBkaWZmLmM6NTM5MworbXNnaWQgInVzZSB1bm1vZGlmaWVkIGZpbGVzIGFzIHNvdXJjZSB0byBmaW5kIGNvcGllcyIKK21zZ3N0ciAidXNhIGZpbGUgbm9uIG1vZGlmaWNhdGkgY29tZSBzb3JnZW50ZSBwZXIgdHJvdmFyZSBjb3BpZSIKKworIzogZGlmZi5jOjUzOTUKK21zZ2lkICJkaXNhYmxlIHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgImRpc2FiaWxpdGEgcmlsZXZhbWVudG8gcmlkZW5vbWluYXppb25lIgorCisjOiBkaWZmLmM6NTM5OAorbXNnaWQgInVzZSBlbXB0eSBibG9icyBhcyByZW5hbWUgc291cmNlIgorbXNnc3RyICJ1c2EgYmxvYiB2dW90aSBjb21lIHNvcmdlbnRlIHJpZGVub21pbmF6aW9uZSIKKworIzogZGlmZi5jOjU0MDAKK21zZ2lkICJjb250aW51ZSBsaXN0aW5nIHRoZSBoaXN0b3J5IG9mIGEgZmlsZSBiZXlvbmQgcmVuYW1lcyIKK21zZ3N0ciAiIgorImNvbnRpbnVhIGEgZWxlbmNhcmUgbGEgY3Jvbm9sb2dpYSBkaSB1biBmaWxlIGFsIGRpIGzDoCBkZWxsZSByaWRlbm9taW5hemlvbmkiCisKKyM6IGRpZmYuYzo1NDAzCittc2dpZCAiIgorInByZXZlbnQgcmVuYW1lL2NvcHkgZGV0ZWN0aW9uIGlmIHRoZSBudW1iZXIgb2YgcmVuYW1lL2NvcHkgdGFyZ2V0cyBleGNlZWRzICIKKyJnaXZlbiBsaW1pdCIKK21zZ3N0ciAiIgorImltcGVkaXNjaSBpbCByaWxldmFtZW50byByaWRlbm9taW5hemlvbmUvY29waWEgc2UgaWwgbnVtZXJvIGRlbGxlICIKKyJkZXN0aW5hemlvbmkgcmlkZW5vbWluYXppb25lL2NvcGlhIGVjY2VkZSBpbCBsaW1pdGUgc3BlY2lmaWNhdG8iCisKKyM6IGRpZmYuYzo1NDA1Cittc2dpZCAiRGlmZiBhbGdvcml0aG0gb3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSBhbGdvcml0bW8gZGlmZiIKKworIzogZGlmZi5jOjU0MDcKK21zZ2lkICJwcm9kdWNlIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBkaWZmIgorbXNnc3RyICJwcm9kdWNpIGlsIGRpZmYgcGnDuSBwaWNjb2xvIHBvc3NpYmlsZSIKKworIzogZGlmZi5jOjU0MTAKK21zZ2lkICJpZ25vcmUgd2hpdGVzcGFjZSB3aGVuIGNvbXBhcmluZyBsaW5lcyIKK21zZ3N0ciAiaWdub3JhIGdsaSBzcGF6aSBiaWFuY2hpIGR1cmFudGUgaWwgY29uZnJvbnRvIGRlbGxlIHJpZ2hlIgorCisjOiBkaWZmLmM6NTQxMworbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZXNwYWNlIgorbXNnc3RyICJpZ25vcmEgbGUgbW9kaWZpY2hlIGFsIG51bWVybyBkZWdsaSBzcGF6aSBiaWFuY2hpIgorCisjOiBkaWZmLmM6NTQxNgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgYXQgRU9MIgorbXNnc3RyICJpZ25vcmEgbW9kaWZpY2hlIGFnbGkgc3BhemkgYmlhbmNoaSBhIGZpbmUgcmlnYSIKKworIzogZGlmZi5jOjU0MTkKK21zZ2lkICJpZ25vcmUgY2Fycmllci1yZXR1cm4gYXQgdGhlIGVuZCBvZiBsaW5lIgorbXNnc3RyICJpZ25vcmEgY2FyYXR0ZXJlIHJpdG9ybm8gYSBjYXBvIGEgZmluZSByaWdhIgorCisjOiBkaWZmLmM6NTQyMgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHdob3NlIGxpbmVzIGFyZSBhbGwgYmxhbmsiCittc2dzdHIgImlnbm9yYSBtb2RpZmljaGUgY2hlIHJpZ3VhcmRhbm8gc29sbyByaWdoZSB2dW90ZSIKKworIzogZGlmZi5jOjU0MjUKK21zZ2lkICJoZXVyaXN0aWMgdG8gc2hpZnQgZGlmZiBodW5rIGJvdW5kYXJpZXMgZm9yIGVhc3kgcmVhZGluZyIKK21zZ3N0ciAiIgorImV1cmlzdGljYSBwZXIgc3Bvc3RhcmUgaSBsaW1pdGkgZGVnbGkgaHVuayBuZWwgZGlmZiBwZXIgdW5hIGxldHR1cmEgYWdldm9sZSIKKworIzogZGlmZi5jOjU0MjgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcInBhdGllbmNlIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgImdlbmVyYSBpbCBkaWZmIHVzYW5kbyBsJ2FsZ29yaXRtbyBcInBhdGllbmNlIGRpZmZcIiIKKworIzogZGlmZi5jOjU0MzIKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImhpc3RvZ3JhbSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICJnZW5lcmEgaWwgZGlmZiB1c2FuZG8gbCdhbGdvcml0bW8gXCJoaXN0b2dyYW0gZGlmZlwiIgorCisjOiBkaWZmLmM6NTQzNAorbXNnaWQgIjxhbGdvcml0aG0+IgorbXNnc3RyICI8YWxnb3JpdG1vPiIKKworIzogZGlmZi5jOjU0MzUKK21zZ2lkICJjaG9vc2UgYSBkaWZmIGFsZ29yaXRobSIKK21zZ3N0ciAic2VsZXppb25hIHVuIGFsZ29yaXRtbyBkaWZmIgorCisjOiBkaWZmLmM6NTQzNworbXNnaWQgIjx0ZXh0PiIKK21zZ3N0ciAiPHRlc3RvPiIKKworIzogZGlmZi5jOjU0MzgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImFuY2hvcmVkIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgImdlbmVyYSBpbCBkaWZmIHVzYW5kbyBsJ2FsZ29yaXRtbyBcImFuY2hvcmVkIGRpZmZcIiIKKworIzogZGlmZi5jOjU0NDAgZGlmZi5jOjU0NDkgZGlmZi5jOjU0NTIKK21zZ2lkICI8bW9kZT4iCittc2dzdHIgIjxtb2RhbGl0w6A+IgorCisjOiBkaWZmLmM6NTQ0MQorbXNnaWQgInNob3cgd29yZCBkaWZmLCB1c2luZyA8bW9kZT4gdG8gZGVsaW1pdCBjaGFuZ2VkIHdvcmRzIgorbXNnc3RyICIiCisidmlzdWFsaXp6YSBpbCBkaWZmIHBhcm9sYSBwZXIgcGFyb2xhIHVzYW5kbyA8bW9kYWxpdMOgPiBwZXIgZGVsaW1pdGFyZSBsZSAiCisicGFyb2xlIG1vZGlmaWNhdGUiCisKKyM6IGRpZmYuYzo1NDQzIGRpZmYuYzo1NDQ2IGRpZmYuYzo1NDkxCittc2dpZCAiPHJlZ2V4PiIKK21zZ3N0ciAiPGVzcHJlc3Npb25lIHJlZ29sYXJlPiIKKworIzogZGlmZi5jOjU0NDQKK21zZ2lkICJ1c2UgPHJlZ2V4PiB0byBkZWNpZGUgd2hhdCBhIHdvcmQgaXMiCittc2dzdHIgInVzYSA8ZXNwcmVzc2lvbmUgcmVnb2xhcmU+IHBlciBkZWNpZGVyZSBjb3NhIGNvc3RpdHVpc2NlIHVuYSBwYXJvbGEiCisKKyM6IGRpZmYuYzo1NDQ3Cittc2dpZCAiZXF1aXZhbGVudCB0byAtLXdvcmQtZGlmZj1jb2xvciAtLXdvcmQtZGlmZi1yZWdleD08cmVnZXg+IgorbXNnc3RyICIiCisiZXF1aXZhbGVudGUgZGkgLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9PGVzcHJlc3Npb25lIHJlZ29sYXJlPiIKKworIzogZGlmZi5jOjU0NTAKK21zZ2lkICJtb3ZlZCBsaW5lcyBvZiBjb2RlIGFyZSBjb2xvcmVkIGRpZmZlcmVudGx5IgorbXNnc3RyICJsZSByaWdoZSBkaSBjb2RpY2Ugc3Bvc3RhdGUgc29ubyBjb2xvcmF0ZSBpbiBtb2RvIGRpdmVyc28iCisKKyM6IGRpZmYuYzo1NDUzCittc2dpZCAiaG93IHdoaXRlIHNwYWNlcyBhcmUgaWdub3JlZCBpbiAtLWNvbG9yLW1vdmVkIgorbXNnc3RyICJtb2RvIGluIGN1aSBzb25vIGlnbm9yYXRpIGdsaSBzcGF6aSBiaWFuY2hpIGluIC0tY29sb3ItbW92ZWQiCisKKyM6IGRpZmYuYzo1NDU2Cittc2dpZCAiT3RoZXIgZGlmZiBvcHRpb25zIgorbXNnc3RyICJBbHRyZSBvcHppb25pIGRpZmYiCisKKyM6IGRpZmYuYzo1NDU4Cittc2dpZCAid2hlbiBydW4gZnJvbSBzdWJkaXIsIGV4Y2x1ZGUgY2hhbmdlcyBvdXRzaWRlIGFuZCBzaG93IHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICIiCisic2UgZXNlZ3VpdG8gZGEgdW5hIHNvdHRvZGlyZWN0b3J5LCBlc2NsdWRpIGxlIG1vZGlmaWNoZSBlc3Rlcm5lIGFkIGVzc2EgZSAiCisidmlzdWFsaXp6YSBpIHBlcmNvcnNpIHJlbGF0aXZpIgorCisjOiBkaWZmLmM6NTQ2MgorbXNnaWQgInRyZWF0IGFsbCBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICJ0cmF0dGEgdHV0dGkgaSBmaWxlIGNvbWUgc2UgZm9zc2VybyBkaSB0ZXN0byIKKworIzogZGlmZi5jOjU0NjQKK21zZ2lkICJzd2FwIHR3byBpbnB1dHMsIHJldmVyc2UgdGhlIGRpZmYiCittc2dzdHIgInNjYW1iaWEgaSBkdWUgaW5wdXQsIGdlbmVyYSB1biBkaWZmIGFsIGNvbnRyYXJpbyIKKworIzogZGlmZi5jOjU0NjYKK21zZ2lkICJleGl0IHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzLCAwIG90aGVyd2lzZSIKK21zZ3N0ciAiZXNjaSBjb24gY29kaWNlIDEgc2UgY2kgc29ubyBkaWZmZXJlbnplLCBjb24gMCBhbHRyaW1lbnRpIgorCisjOiBkaWZmLmM6NTQ2OAorbXNnaWQgImRpc2FibGUgYWxsIG91dHB1dCBvZiB0aGUgcHJvZ3JhbSIKK21zZ3N0ciAiZGlzYWJpbGl0YSBsJ2ludGVybyBvdXRwdXQgZGVsIHByb2dyYW1tYSIKKworIzogZGlmZi5jOjU0NzAKK21zZ2lkICJhbGxvdyBhbiBleHRlcm5hbCBkaWZmIGhlbHBlciB0byBiZSBleGVjdXRlZCIKK21zZ3N0ciAiY29uc2VudGkgbCdlc2VjdXppb25lIGRpIHVuIGhlbHBlciBkaWZmIGVzdGVybm8iCisKKyM6IGRpZmYuYzo1NDcyCittc2dpZCAicnVuIGV4dGVybmFsIHRleHQgY29udmVyc2lvbiBmaWx0ZXJzIHdoZW4gY29tcGFyaW5nIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAiIgorImVzZWd1aSBmaWx0cmkgZGkgY29udmVyc2lvbmUgaW4gdGVzdG8gZXN0ZXJuaSBxdWFuZG8gc2kgY29uZnJvbnRhbm8gZmlsZSAiCisiYmluYXJpIgorCisjOiBkaWZmLmM6NTQ3NAorbXNnaWQgIjx3aGVuPiIKK21zZ3N0ciAiPHF1YW5kbz4iCisKKyM6IGRpZmYuYzo1NDc1Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcyBpbiB0aGUgZGlmZiBnZW5lcmF0aW9uIgorbXNnc3RyICJpZ25vcmEgbGUgbW9kaWZpY2hlIGFpIHNvdHRvbW9kdWxpIGR1cmFudGUgbGEgZ2VuZXJhemlvbmUgZGVsIGRpZmYiCisKKyM6IGRpZmYuYzo1NDc4Cittc2dpZCAiPGZvcm1hdD4iCittc2dzdHIgIjxmb3JtYXRvPiIKKworIzogZGlmZi5jOjU0NzkKK21zZ2lkICJzcGVjaWZ5IGhvdyBkaWZmZXJlbmNlcyBpbiBzdWJtb2R1bGVzIGFyZSBzaG93biIKK21zZ3N0ciAic3BlY2lmaWNhIGNvbWUgdmVycmFubm8gdmlzdWFsaXp6YXRlIGxlIGRpZmZlcmVuemUgbmVpIHNvdHRvbW9kdWxpIgorCisjOiBkaWZmLmM6NTQ4MworbXNnaWQgImhpZGUgJ2dpdCBhZGQgLU4nIGVudHJpZXMgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIm5hc2NvbmRpIGxlIHZvY2kgJ2dpdCBhZGQgLU4nIG5lbGwnaW5kaWNlIgorCisjOiBkaWZmLmM6NTQ4NgorbXNnaWQgInRyZWF0ICdnaXQgYWRkIC1OJyBlbnRyaWVzIGFzIHJlYWwgaW4gdGhlIGluZGV4IgorbXNnc3RyICJ0cmF0dGEgbGUgdm9jaSAnZ2l0IGFkZCAtTicgY29tZSByZWFsaSBuZWxsJ2luZGljZSIKKworIzogZGlmZi5jOjU0ODgKK21zZ2lkICI8c3RyaW5nPiIKK21zZ3N0ciAiPHN0cmluZ2E+IgorCisjOiBkaWZmLmM6NTQ4OQorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInN0cmluZyIKK21zZ3N0ciAiIgorImNlcmNhIGRpZmZlcmVuemUgY2hlIG1vZGlmaWNhbm8gaWwgbnVtZXJvIGRpIG9jY29ycmVuemUgZGVsbGEgc3RyaW5nYSAiCisic3BlY2lmaWNhdGEiCisKKyM6IGRpZmYuYzo1NDkyCittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisicmVnZXgiCittc2dzdHIgIiIKKyJjZXJjYSBkaWZmZXJlbnplIGNoZSBtb2RpZmljYW5vIGlsIG51bWVybyBkaSBvY2NvcnJlbnplIGRlbGwnZXNwcmVzc2lvbmUgIgorInJlZ29sYXJlIHNwZWNpZmljYXRhIgorCisjOiBkaWZmLmM6NTQ5NQorbXNnaWQgInNob3cgYWxsIGNoYW5nZXMgaW4gdGhlIGNoYW5nZXNldCB3aXRoIC1TIG9yIC1HIgorbXNnc3RyICJ2aXN1YWxpenphIHR1dHRlIGxlIG1vZGlmaWNoZSBuZWwgY2hhbmdlc2V0IGNvbiAtUyBvIC1HIgorCisjOiBkaWZmLmM6NTQ5OAorbXNnaWQgInRyZWF0IDxzdHJpbmc+IGluIC1TIGFzIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorInRyYXR0YSBsYSA8c3RyaW5nYT4gbmVsbCdvcHppb25lIC1TIGNvbWUgdW4nZXNwcmVzc2lvbmUgcmVnb2xhcmUgUE9TSVggZXN0ZXNhIgorCisjOiBkaWZmLmM6NTUwMQorbXNnaWQgImNvbnRyb2wgdGhlIG9yZGVyIGluIHdoaWNoIGZpbGVzIGFwcGVhciBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJjb250cm9sbGEgbCdvcmRpbmUgY29uIGN1aSBpIGZpbGUgYXBwYXJpcmFubm8gbmVsbCdvdXRwdXQiCisKKyM6IGRpZmYuYzo1NTAyCittc2dpZCAiPG9iamVjdC1pZD4iCittc2dzdHIgIjxJRCBvZ2dldHRvPiIKKworIzogZGlmZi5jOjU1MDMKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJvYmplY3QiCittc2dzdHIgIiIKKyJjZXJjYSBkaWZmZXJlbnplIGNoZSBtb2RpZmljYW5vIGlsIG51bWVybyBkaSBvY2NvcnJlbnplIGRlbGwnb2dnZXR0byAiCisic3BlY2lmaWNhdG8iCisKKyM6IGRpZmYuYzo1NTA1Cittc2dpZCAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorbXNnc3RyICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCisKKyM6IGRpZmYuYzo1NTA2Cittc2dpZCAic2VsZWN0IGZpbGVzIGJ5IGRpZmYgdHlwZSIKK21zZ3N0ciAic2VsZXppb25hIGZpbGUgaW4gYmFzZSBhbCB0aXBvIGRpZmYiCisKKyM6IGRpZmYuYzo1NTA4Cittc2dpZCAiPGZpbGU+IgorbXNnc3RyICI8ZmlsZT4iCisKKyM6IGRpZmYuYzo1NTA5Cittc2dpZCAiT3V0cHV0IHRvIGEgc3BlY2lmaWMgZmlsZSIKK21zZ3N0ciAiU2FsdmEgbCdvdXRwdXQgaW4gdW4gZmlsZSBzcGVjaWZpY28iCisKKyM6IGRpZmYuYzo2MTY0Cittc2dpZCAiaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIHdhcyBza2lwcGVkIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgIiIKKyJpbCByaWxldmFtZW50byByaWRlbm9taW5hemlvbmUgbm9uIGVzYXR0YSDDqCBzdGF0byBvbWVzc28gcGVyIGxhIHByZXNlbnphIGRpICIKKyJ0cm9wcGkgZmlsZS4iCisKKyM6IGRpZmYuYzo2MTY3Cittc2dpZCAib25seSBmb3VuZCBjb3BpZXMgZnJvbSBtb2RpZmllZCBwYXRocyBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICIiCisidHJvdmF0ZSBzb2xvIGNvcGllIGRhaSBwZXJjb3JzaSBtb2RpZmljYXRpIHBlciBsYSBwcmVzZW56YSBkaSB0cm9wcGkgZmlsZS4iCisKKyM6IGRpZmYuYzo2MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgbWF5IHdhbnQgdG8gc2V0IHlvdXIgJXMgdmFyaWFibGUgdG8gYXQgbGVhc3QgJWQgYW5kIHJldHJ5IHRoZSBjb21tYW5kLiIKK21zZ3N0ciAiIgorInBvdHJlc3RpIHZvbGVyIGltcG9zdGFyZSBsYSB2YXJpYWJpbGUgJXMgYWQgYWxtZW5vICVkIGUgcmlwcm92YXJlIGFkICIKKyJlc2VndWlyZSBpbCBjb21hbmRvLiIKKworIzogZGlyLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQiCittc2dzdHIgIiIKKyJsbyBzcGVjaWZpY2F0b3JlIHBlcmNvcnNvICclcycgbm9uIGNvcnJpc3BvbmRlIGFkIGFsY3VuIGZpbGUgbm90byBhIGdpdCIKKworIzogZGlyLmM6Njk1IGRpci5jOjcyNCBkaXIuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBhdHRlcm46ICclcyciCittc2dzdHIgInBhdHRlcm4gbm9uIHJpY29ub3NjaXV0bzogJyVzJyIKKworIzogZGlyLmM6NzU0IGRpci5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgbmVnYXRpdmUgcGF0dGVybjogJyVzJyIKK21zZ3N0ciAicGF0dGVybiBuZWdhdGl2byBub24gcmljb25vc2NpdXRvOiAnJXMnIgorCisjOiBkaXIuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgaGF2ZSBpc3N1ZXM6IHBhdHRlcm4gJyVzJyBpcyByZXBlYXRlZCIKK21zZ3N0ciAiIgorImlsIGZpbGUgc3BhcnNlLWNoZWNrb3V0IHBvdHJlYmJlIGF2ZXJlIGRlaSBwcm9ibGVtaTogaWwgcGF0dGVybiAnJXMnIMOoICIKKyJyaXBldHV0byIKKworIzogZGlyLmM6Nzk2Cittc2dpZCAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIKK21zZ3N0ciAiZGlzYWJpbGl0byBpbCBwYXR0ZXJuIG1hdGNoaW5nIGRpIHRpcG8gY29uZSIKKworIzogZGlyLmM6MTE3MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdXNlICVzIGFzIGFuIGV4Y2x1ZGUgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdXNhcmUgJXMgY29tZSBmaWxlIGRpIGVzY2x1c2lvbmUiCisKKyM6IGRpci5jOjIxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gZGlyZWN0b3J5ICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBsYSBkaXJlY3RvcnkgJyVzJyIKKworIzogZGlyLmM6MjQ3OQorbXNnaWQgImZhaWxlZCB0byBnZXQga2VybmVsIG5hbWUgYW5kIGluZm9ybWF0aW9uIgorbXNnc3RyICJpbXBvc3NpYmlsZSBvdHRlbmVyZSBpbCBub21lIGUgbGUgaW5mb3JtYXppb25pIHN1bCBrZXJuZWwiCisKKyM6IGRpci5jOjI2MDMKK21zZ2lkICJ1bnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24iCittc2dzdHIgImxhIGNhY2hlIG5vbiB0cmFjY2lhdGEgw6ggZGlzYWJpbGl0YXRhIHN1IHF1ZXN0byBzaXN0ZW1hIG8gcGVyY29yc28iCisKKyM6IGRpci5jOjM0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IGluIHJlcG8gJXMiCittc2dzdHIgImZpbGUgaW5kZXggY29ycm90dG8gbmVsIHJlcG9zaXRvcnkgJXMiCisKKyM6IGRpci5jOjM0NTIgZGlyLmM6MzQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlIGxlIGRpcmVjdG9yeSBwZXIgJXMiCisKKyM6IGRpci5jOjM0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1pZ3JhdGUgZ2l0IGRpcmVjdG9yeSBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbWlncmFyZSBsYSBkaXJlY3RvcnkgZ2l0IGRhICclcycgYSAnJXMnIgorCisjOiBlZGl0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiBXYWl0aW5nIGZvciB5b3VyIGVkaXRvciB0byBjbG9zZSB0aGUgZmlsZS4uLiVjIgorbXNnc3RyICIiCisic3VnZ2VyaW1lbnRvOiBJbiBhdHRlc2EgZGVsbGEgY2hpdXN1cmEgZGVsIGZpbGUgZGEgcGFydGUgZGVsbCdlZGl0b3IuLi4lYyIKKworIzogZW50cnkuYzoxNzgKK21zZ2lkICJGaWx0ZXJpbmcgY29udGVudCIKK21zZ3N0ciAiRmlsdHJhZ2dpbyBjb250ZW51dG8gaW4gY29yc28iCisKKyM6IGVudHJ5LmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0IGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgc3RhdCBzdWwgZmlsZSAnJXMnIgorCisjOiBlbnZpcm9ubWVudC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2l0IG5hbWVzcGFjZSBwYXRoIFwiJXNcIiIKK21zZ3N0ciAicGVyY29yc28gc3BhemlvIGRlaSBub21pIGdpdCBcIiVzXCIgbm9uIHZhbGlkbyIKKworIzogZW52aXJvbm1lbnQuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBHSVRfRElSIHRvICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGltcG9zdGFyZSBHSVRfRElSIGEgJyVzJyIKKworIzogZXhlYy1jbWQuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJncyB0byBydW4gJXMiCittc2dzdHIgInRyb3BwaSBhcmdvbWVudGkgcGVyIGVzZWd1aXJlICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTUwCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IGF0dGVzYSBsaXN0YSBzaGFsbG93IgorCisjOiBmZXRjaC1wYWNrLmM6MTUzCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIGEgZmx1c2ggcGFja2V0IGFmdGVyIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IGF0dGVzbyBwYWNjaGV0dG8gZmx1c2ggZG9wbyBsaXN0YSBzaGFsbG93IgorCisjOiBmZXRjaC1wYWNrLmM6MTY0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IGF0dGVzaSBBQ0svTkFLLCByaWNldnV0byBwYWNjaGV0dG8gZmx1c2giCisKKyM6IGZldGNoLXBhY2suYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCAnJXMnIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogYXR0ZXNpIEFDSy9OQUssIHJpY2V2dXRvICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxOTUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdG8gcmVtb3RlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBzdWwgcmVtb3RvIgorCisjOiBmZXRjaC1wYWNrLmM6MjU3Cittc2dpZCAiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpcmVzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAiLS1zdGF0ZWxlc3MtcnBjIHJpY2hpZWRlIG11bHRpX2Fja19kZXRhaWxlZCIKKworIzogZmV0Y2gtcGFjay5jOjM1NiBmZXRjaC1wYWNrLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgInJpZ2Egc2hhbGxvdyBub24gdmFsaWRhOiAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MzYyIGZldGNoLXBhY2suYzoxMzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdW5zaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICJyaWdhIHVuc2hhbGxvdyBub24gdmFsaWRhOiAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MzY0IGZldGNoLXBhY2suYzoxMzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJvZ2dldHRvIG5vbiB0cm92YXRvOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NyBmZXRjaC1wYWNrLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICJlcnJvcmUgbmVsbCdvZ2dldHRvOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2OSBmZXRjaC1wYWNrLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaGFsbG93IGZvdW5kOiAlcyIKK21zZ3N0ciAibmVzc3VubyBzaGFsbG93IHRyb3ZhdG86ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzcyIGZldGNoLXBhY2suYzoxMzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHNoYWxsb3cvdW5zaGFsbG93LCBnb3QgJXMiCittc2dzdHIgImF0dGVzaSBzaGFsbG93L3Vuc2hhbGxvdywgcmljZXZ1dG8gJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICVkICVzIgorbXNnc3RyICJyaWNldnV0byAlcyAlZCAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCAlcyIKK21zZ3N0ciAiY29tbWl0IG5vbiB2YWxpZG86ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDYyCittc2dpZCAiZ2l2aW5nIHVwIgorbXNnc3RyICJzbWV0dG8gZGkgcHJvdmFyZSIKKworIzogZmV0Y2gtcGFjay5jOjQ3NSBwcm9ncmVzcy5jOjMyMworbXNnaWQgImRvbmUiCittc2dzdHIgImZhdHRvIgorCisjOiBmZXRjaC1wYWNrLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAoJWQpICVzIgorbXNnc3RyICJyaWNldnV0byAlcyAoJWQpICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgJXMgYXMgY29tcGxldGUiCittc2dzdHIgIkNvbnRyYXNzZWdubyAlcyBjb21lIGNvbXBsZXRvIgorCisjOiBmZXRjaC1wYWNrLmM6NzU0CisjLCBjLWZvcm1hdAorbXNnaWQgImFscmVhZHkgaGF2ZSAlcyAoJXMpIgorbXNnc3RyICJobyBnacOgICVzICglcykiCisKKyM6IGZldGNoLXBhY2suYzo4MTgKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiIgorImZldGNoLXBhY2s6IGltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGZvcmsgZGVsIGRlbXVsdGlwbGV4ZXIgZGVsbGEgYmFuZGEgIgorImxhdGVybGFlIgorCisjOiBmZXRjaC1wYWNrLmM6ODI2Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBwYWNrIGhlYWRlciIKK21zZ3N0ciAiZXJyb3JlIHByb3RvY29sbG86IGludGVzdGF6aW9uZSBwYWNrIG5vbiB2YWxpZGEiCisKKyM6IGZldGNoLXBhY2suYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIgorbXNnc3RyICJmZXRjaC1wYWNrOiBpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBmb3JrIGRpICVzIgorCisjOiBmZXRjaC1wYWNrLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGZhaWxlZCIKK21zZ3N0ciAiJXMgbm9uIHJpdXNjaXRvIgorCisjOiBmZXRjaC1wYWNrLmM6OTE4Cittc2dpZCAiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiZXJyb3JlIG5lbCBkZW11bHRpcGxleGVyIGRlbGxhIGJhbmRhIGxhdGVyYWxlIgorCisjOiBmZXRjaC1wYWNrLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uIGlzICUuKnMiCittc2dzdHIgIkxhIHZlcnNpb25lIGRlbCBzZXJ2ZXIgw6ggJS4qcyIKKworIzogZmV0Y2gtcGFjay5jOjk3MCBmZXRjaC1wYWNrLmM6OTc2IGZldGNoLXBhY2suYzo5NzkgZmV0Y2gtcGFjay5jOjk4NQorIzogZmV0Y2gtcGFjay5jOjk4OSBmZXRjaC1wYWNrLmM6OTkzIGZldGNoLXBhY2suYzo5OTcgZmV0Y2gtcGFjay5jOjEwMDEKKyM6IGZldGNoLXBhY2suYzoxMDA1IGZldGNoLXBhY2suYzoxMDA5IGZldGNoLXBhY2suYzoxMDEzIGZldGNoLXBhY2suYzoxMDE3CisjOiBmZXRjaC1wYWNrLmM6MTAyMyBmZXRjaC1wYWNrLmM6MTAyOSBmZXRjaC1wYWNrLmM6MTAzNCBmZXRjaC1wYWNrLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgJXMiCittc2dzdHIgIklsIHNlcnZlciBzdXBwb3J0YSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjk3MgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2xpZW50cyIKK21zZ3N0ciAiSWwgc2VydmVyIG5vbiBzdXBwb3J0YSBjbGllbnQgc2hhbGxvdyIKKworIzogZmV0Y2gtcGFjay5jOjEwMzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctc2luY2UiCittc2dzdHIgIklsIHNlcnZlciBub24gc3VwcG9ydGEgLS1zaGFsbG93LXNpbmNlIgorCisjOiBmZXRjaC1wYWNrLmM6MTAzNworbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1leGNsdWRlIgorbXNnc3RyICJJbCBzZXJ2ZXIgbm9uIHN1cHBvcnRhIC0tc2hhbGxvdy1leGNsdWRlIgorCisjOiBmZXRjaC1wYWNrLmM6MTA0MQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIgorbXNnc3RyICJJbCBzZXJ2ZXIgbm9uIHN1cHBvcnRhIC0tZGVlcGVuIgorCisjOiBmZXRjaC1wYWNrLmM6MTA1OAorbXNnaWQgIm5vIGNvbW1vbiBjb21taXRzIgorbXNnc3RyICJuZXNzdW4gY29tbWl0IGluIGNvbXVuZSIKKworIzogZmV0Y2gtcGFjay5jOjEwNzAgZmV0Y2gtcGFjay5jOjE1MzYKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IHJlY3VwZXJvIG5vbiByaXVzY2l0by4iCisKKyM6IGZldGNoLXBhY2suYzoxMjA5Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXF1ZXN0cyIKK21zZ3N0ciAiSWwgc2VydmVyIG5vbiBzdXBwb3J0YSBsZSByaWNoaWVzdGUgc2hhbGxvdyIKKworIzogZmV0Y2gtcGFjay5jOjEyMTYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgZmlsdGVyIgorbXNnc3RyICJJbCBzZXJ2ZXIgc3VwcG9ydGEgZmlsdGVyIgorCisjOiBmZXRjaC1wYWNrLmM6MTIzOQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXF1ZXN0IHRvIHJlbW90ZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgbGEgcmljaGllc3RhIHN1bCByZW1vdG8iCisKKyM6IGZldGNoLXBhY2suYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgc2VjdGlvbiBoZWFkZXIgJyVzJyIKK21zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbGEgbGV0dHVyYSBkZWxsJ2ludGVzdGF6aW9uZSBkaSBzZXppb25lICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciCittc2dzdHIgImF0dGVzbyAnJXMnLCByaWNldnV0byAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGFja25vd2xlZGdtZW50IGxpbmU6ICclcyciCittc2dzdHIgInJpZ2EgZGkgY29uZmVybWEgaW5hdHRlc2E6ICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxMzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgYWNrczogJWQiCittc2dzdHIgImVycm9yZSBkdXJhbnRlIGwnZWxhYm9yYXppb25lIGRlZ2xpIGFjazogJWQiCisKKyM6IGZldGNoLXBhY2suYzoxMzE4Cittc2dpZCAiZXhwZWN0ZWQgcGFja2ZpbGUgdG8gYmUgc2VudCBhZnRlciAncmVhZHknIgorbXNnc3RyICJjaSBzaSBhdHRlbmRldmEgY2hlIGlsIHBhY2tmaWxlIGZvc3NlIGludmlhdG8gZG9wbyAncmVhZHknIgorCisjOiBmZXRjaC1wYWNrLmM6MTMyMAorbXNnaWQgImV4cGVjdGVkIG5vIG90aGVyIHNlY3Rpb25zIHRvIGJlIHNlbnQgYWZ0ZXIgbm8gJ3JlYWR5JyIKK21zZ3N0ciAiIgorImNpIHNpIGF0dGVuZGV2YSBjaGUgbmVzc3VuJ2FsdHJhIHNlemlvbmUgZm9zc2UgaW52aWF0YSBpbiBhc3NlbnphIGRpICdyZWFkeSciCisKKyM6IGZldGNoLXBhY2suYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIKK21zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbCdlbGFib3JhemlvbmUgZGVsbGUgaW5mb3JtYXppb25pIHNoYWxsb3c6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCB3YW50ZWQtcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAiYXR0ZXNvIHdhbnRlZC1yZWYsIHJpY2V2dXRvICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgd2FudGVkLXJlZjogJyVzJyIKK21zZ3N0ciAid2FudGVkLXJlZiBpbmF0dGVzbzogJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyB3YW50ZWQgcmVmczogJWQiCittc2dzdHIgImVycm9yZSBkdXJhbnRlIGwnZWxhYm9yYXppb25lIGRlaSByaWZlcmltZW50aSBkZXNpZGVyYXRpOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE3NjIKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAibmVzc3VuIGhlYWQgcmVtb3RvIGNvcnJpc3BvbmRlbnRlIgorCisjOiBmZXRjaC1wYWNrLmM6MTc4NSBidWlsdGluL2Nsb25lLmM6Njg5Cittc2dpZCAicmVtb3RlIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHMiCittc2dzdHIgImlsIHJlbW90byBub24gaGEgaW52aWF0byB0dXR0aSBnbGkgb2dnZXR0aSBuZWNlc3NhcmkiCisKKyM6IGZldGNoLXBhY2suYzoxODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVtb3RlIHJlZiAlcyIKK21zZ3N0ciAicmlmZXJpbWVudG8gcmVtb3RvIG5vbiBlc2lzdGVudGU6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3QgYWxsb3cgcmVxdWVzdCBmb3IgdW5hZHZlcnRpc2VkIG9iamVjdCAlcyIKK21zZ3N0ciAiSWwgc2VydmVyIG5vbiBjb25zZW50ZSByaWNoaWVzdGUgcGVyIGwnb2dnZXR0byBub24gcHViYmxpY2l6emF0byAlcyIKKworIzogZ3BnLWludGVyZmFjZS5jOjQwOAorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAiZ3BnIG5vbiDDqCByaXVzY2l0byBhIGZpcm1hcmUgaSBkYXRpIgorCisjOiBncGctaW50ZXJmYWNlLmM6NDM0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlIGlsIGZpbGUgdGVtcG9yYW5lbyIKKworIzogZ3BnLWludGVyZmFjZS5jOjQzNworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJyIKK21zZ3N0ciAic2NyaXR0dXJhIGRlbGxhIGZpcm1hIHNlcGFyYXRhIGluICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBncmFwaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yZSBpbnZhbGlkIGNvbG9yICclLipzJyBpbiBsb2cuZ3JhcGhDb2xvcnMiCittc2dzdHIgImlnbm9ybyBpbCBjb2xvcmUgbm9uIHZhbGlkbyAnJS4qcycgaW4gbG9nLmdyYXBoQ29sb3JzIgorCisjOiBncmVwLmM6NjY4Cittc2dpZCAiIgorImdpdmVuIHBhdHRlcm4gY29udGFpbnMgTlVMTCBieXRlICh2aWEgLWYgPGZpbGU+KS4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCAiCisid2l0aCAtUCB1bmRlciBQQ1JFIHYyIgorbXNnc3RyICIiCisiaWwgcGF0dGVybiBmb3JuaXRvIChjb24gLWYgPGZpbGU+KSBjb250aWVuZSB1biBieXRlIE5VTEwuIENpw7Igw6ggc3VwcG9ydGF0byAiCisic29sbyBjb24gLVAgdXNhbmRvIFBDUkUgdjIiCisKKyM6IGdyZXAuYzoyMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICInJXMnOiBpbXBvc3NpYmlsZSBsZWdnZXJlICVzIgorCisjOiBncmVwLmM6MjE0NSBzZXR1cC5jOjE2NiBidWlsdGluL2Nsb25lLmM6NDExIGJ1aWx0aW4vZGlmZi5jOjgyCisjOiBidWlsdGluL3JtLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclcyciCittc2dzdHIgInN0YXQgZGkgJyVzJyBub24gcml1c2NpdG8iCisKKyM6IGdyZXAuYzoyMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQiCittc2dzdHIgIiclcyc6IGxldHR1cmEgdHJvcHBvIGJyZXZlIgorCisjOiBoZWxwLmM6MjMKK21zZ2lkICJzdGFydCBhIHdvcmtpbmcgYXJlYSAoc2VlIGFsc286IGdpdCBoZWxwIHR1dG9yaWFsKSIKK21zZ3N0ciAiY3JlYSB1bidhcmVhIGRpIGxhdm9ybyAodmVkaSBhbmNoZTogZ2l0IGhlbHAgdHV0b3JpYWwpIgorCisjOiBoZWxwLmM6MjQKK21zZ2lkICJ3b3JrIG9uIHRoZSBjdXJyZW50IGNoYW5nZSAoc2VlIGFsc286IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKK21zZ3N0ciAibGF2b3JhIHN1bGxlIG1vZGlmaWNoZSBjb3JyZW50aSAodmVkaSBhbmNoZTogZ2l0IGhlbHAgZXZlcnlkYXkpIgorCisjOiBoZWxwLmM6MjUKK21zZ2lkICJleGFtaW5lIHRoZSBoaXN0b3J5IGFuZCBzdGF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHJldmlzaW9ucykiCittc2dzdHIgImVzYW1pbmEgbGEgY3Jvbm9sb2dpYSBlIGxvIHN0YXRvICh2ZWRpIGFuY2hlOiBnaXQgaGVscCByZXZpc2lvbnMpIgorCisjOiBoZWxwLmM6MjYKK21zZ2lkICJncm93LCBtYXJrIGFuZCB0d2VhayB5b3VyIGNvbW1vbiBoaXN0b3J5IgorbXNnc3RyICJhdW1lbnRhLCBjb250cmFzc2VnbmEgZSBtZXR0aSBhIHB1bnRvIGxhIGNyb25vbG9naWEgY29tdW5lIgorCisjOiBoZWxwLmM6MjcKK21zZ2lkICJjb2xsYWJvcmF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHdvcmtmbG93cykiCittc2dzdHIgImNvbGxhYm9yYSAodmVkaSBhbmNoZTogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKKworIzogaGVscC5jOjMxCittc2dpZCAiTWFpbiBQb3JjZWxhaW4gQ29tbWFuZHMiCittc2dzdHIgIkNvbWFuZGkgcHJpbmNpcGFsaSBkaSBhbHRvIGxpdmVsbG8iCisKKyM6IGhlbHAuYzozMgorbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIE1hbmlwdWxhdG9ycyIKK21zZ3N0ciAiQ29tYW5kaSAvIG9wZXJhemlvbmkgZGkgbWFuaXBvbGF6aW9uZSBhdXNpbGlhcmkiCisKKyM6IGhlbHAuYzozMworbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIkNvbWFuZGkgLyBvcGVyYXppb25pIGRpIGludGVycm9nYXppb25lIGF1c2lsaWFyaSIKKworIzogaGVscC5jOjM0Cittc2dpZCAiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiCittc2dzdHIgIkludGVyYXppb25lIGNvbiBhbHRyaSIKKworIzogaGVscC5jOjM1Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICJDb21hbmRpIC8gb3BlcmF6aW9uaSBkaSBtYW5pcG9sYXppb25lIGRpIGJhc3NvIGxpdmVsbG8iCisKKyM6IGhlbHAuYzozNgorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIkNvbWFuZGkgLyBvcGVyYXppb25pIGRpIGludGVycm9nYXppb25lIGRpIGJhc3NvIGxpdmVsbG8iCisKKyM6IGhlbHAuYzozNworbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIFN5bmNpbmcgUmVwb3NpdG9yaWVzIgorbXNnc3RyICJDb21hbmRpIGRpIGJhc3NvIGxpdmVsbG8gLyBTaW5jcm9uaXp6YXppb25lIHJlcG9zaXRvcnkiCisKKyM6IGhlbHAuYzozOAorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVybmFsIEhlbHBlcnMiCittc2dzdHIgIkNvbWFuZGkgZGkgYmFzc28gbGl2ZWxsbyAvIEZ1bnppb25pIGhlbHBlciBpbnRlcm5lIgorCisjOiBoZWxwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiY29tYW5kaSBnaXQgZGlzcG9uaWJpbGkgaW4gJyVzJyIKKworIzogaGVscC5jOjMwNQorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAiY29tYW5kaSBnaXQgZGlzcG9uaWJpbGkgYWx0cm92ZSBuZWwgdHVvICRQQVRIIgorCisjOiBoZWxwLmM6MzE0Cittc2dpZCAiVGhlc2UgYXJlIGNvbW1vbiBHaXQgY29tbWFuZHMgdXNlZCBpbiB2YXJpb3VzIHNpdHVhdGlvbnM6IgorbXNnc3RyICJRdWVzdGkgc29ubyBpIGNvbWFuZGkgR2l0IGNvbXVuaSB1c2F0aSBpbiB2YXJpZSBzaXR1YXppb25pOiIKKworIzogaGVscC5jOjM2MyBnaXQuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBjb21tYW5kIGxpc3RpbmcgdHlwZSAnJXMnIgorbXNnc3RyICJ0aXBvIGVsZW5jbyBjb21hbmRpIG5vbiBzdXBwb3J0YXRvOiAnJXMnIgorCisjOiBoZWxwLmM6NDAzCittc2dpZCAiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZToiCittc2dzdHIgIkxlIGd1aWRlIEdpdCBjb211bmkgc29ubzoiCisKKyM6IGhlbHAuYzo1MTIKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgdG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQiCittc2dzdHIgIiIKKyJWZWRpICdnaXQgaGVscCA8Y29tYW5kbz4nIHBlciBzYXBlcm5lIGRpIHBpw7kgc3UgdW4gc290dG9jb21hbmRvIHNwZWNpZmljbyIKKworIzogaGVscC5jOjUxNworbXNnaWQgIkV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICJDb21hbmRpIGVzdGVybmkiCisKKyM6IGhlbHAuYzo1MzIKK21zZ2lkICJDb21tYW5kIGFsaWFzZXMiCittc2dzdHIgIkFsaWFzIGNvbWFuZGkiCisKKyM6IGhlbHAuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgorbXNnc3RyICIiCisiJyVzJyBzZW1icmEgZXNzZXJlIHVuIGNvbWFuZG8gZ2l0LCBtYSBub24gw6ggc3RhdG9cbiIKKyJwb3NzaWJpbGUgZXNlZ3VpcmxvLiBGb3JzZSBnaXQtJXMgw6ggY29ycm90dG8/IgorCisjOiBoZWxwLmM6NjU1Cittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgIk9oIG9oLiBJbCB0dW8gc2lzdGVtYSBub24gcmlwb3J0YSBhbGN1biBjb21hbmRvIEdpdC4iCisKKyM6IGhlbHAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiQVRURU5aSU9ORTogaGFpIGNoaWFtYXRvIHVuIGNvbWFuZG8gR2l0ICclcycgaW5lc2lzdGVudGUuIgorCisjOiBoZWxwLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgIkNvbnRpbnVvIGFzc3VtZW5kbyBjaGUgaW50ZW5kZXNzaSAnJXMnLiIKKworIzogaGVscC5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIGluICUwLjFmIHNlY29uZHMsIGFzc3VtaW5nIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICJDb250aW51byBmcmEgJTAuMWYgc2Vjb25kaSBhc3N1bWVuZG8gY2hlIGludGVuZGVzc2kgJyVzJy4iCisKKyM6IGhlbHAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiZ2l0OiAnJXMnIG5vbiDDqCB1biBjb21hbmRvIGdpdC4gVmVkaSAnZ2l0IC0taGVscCcuIgorCisjOiBoZWxwLmM6Njk5Cittc2dpZCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZCBpcyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZHMgYXJlIgorbXNnc3RyWzBdICIiCisiXG4iCisiSWwgY29tYW5kbyBtYWdnaW9ybWVudGUgc2ltaWxlIMOoIgorbXNnc3RyWzFdICIiCisiXG4iCisiSSBjb21hbmRpIG1hZ2dpb3JtZW50ZSBzaW1pbGkgc29ubyIKKworIzogaGVscC5jOjcxNAorbXNnaWQgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgdmVyc2lvbiBbPG9wemlvbmk+XSIKKworIzogaGVscC5jOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgLSAlcyIKK21zZ3N0ciAiJXM6ICVzIC0gJXMiCisKKyM6IGhlbHAuYzo3ODcKK21zZ2lkICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKKyJcbiIKKyJJbnRlbmRldmkgcXVlc3RvPyIKK21zZ3N0clsxXSAiIgorIlxuIgorIkludGVuZGV2aSB1bm8gZGkgcXVlc3RpPyIKKworIzogaWRlbnQuYzozNDkKK21zZ2lkICIiCisiXG4iCisiKioqIFBsZWFzZSB0ZWxsIG1lIHdobyB5b3UgYXJlLlxuIgorIlxuIgorIlJ1blxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyJcbiIKKyJ0byBzZXQgeW91ciBhY2NvdW50J3MgZGVmYXVsdCBpZGVudGl0eS5cbiIKKyJPbWl0IC0tZ2xvYmFsIHRvIHNldCB0aGUgaWRlbnRpdHkgb25seSBpbiB0aGlzIHJlcG9zaXRvcnkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKiogRGltbWkgY2hpIHNlaS5cbiIKKyJcbiIKKyJFc2VndWlcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInR1QGVzZW1waW8uY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiSWwgdHVvIG5vbWVcIlxuIgorIlxuIgorInBlciBpbXBvc3RhcmUgbCdpZGVudGl0w6AgcHJlZGVmaW5pdGEgZGVsIHR1byBhY2NvdW50LlxuIgorIk9tZXR0aSAtLWdsb2JhbCBwZXIgaW1wb3N0YXJlIGwnaWRlbnRpdMOgIHNvbG8gaW4gcXVlc3RvIHJlcG9zaXRvcnkuXG4iCisiXG4iCisKKyM6IGlkZW50LmM6Mzc5Cittc2dpZCAibm8gZW1haWwgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAiIgorIm5lc3N1biBpbmRpcml6em8gZS1tYWlsIHNwZWNpZmljYXRvIGUgcmlsZXZhbWVudG8gYXV0b21hdGljbyBkaXNhYmlsaXRhdG8iCisKKyM6IGlkZW50LmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBlbWFpbCBhZGRyZXNzIChnb3QgJyVzJykiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSByaWxldmFyZSBhdXRvbWF0aWNhbWVudGUgbCdpbmRpcml6em8gZS1tYWlsIChobyByaWNhdmF0byAnJXMnKSIKKworIzogaWRlbnQuYzo0MDEKK21zZ2lkICJubyBuYW1lIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiCittc2dzdHIgIm5lc3N1biBub21lIHNwZWNpZmljYXRvIGUgcmlsZXZhbWVudG8gYXV0b21hdGljbyBkaXNhYmlsaXRhdG8iCisKKyM6IGlkZW50LmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBuYW1lIChnb3QgJyVzJykiCittc2dzdHIgImltcG9zc2liaWxlIHJpbGV2YXJlIGF1dG9tYXRpY2FtZW50ZSBpbCBub21lIChobyByaWNhdmF0byAnJXMnKSIKKworIzogaWRlbnQuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgaWRlbnQgbmFtZSAoZm9yIDwlcz4pIG5vdCBhbGxvd2VkIgorbXNnc3RyICJub21lIGlkZW50IHZ1b3RvIChwZXIgPCVzPikgbm9uIGNvbnNlbnRpdG8iCisKKyM6IGlkZW50LmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIgorbXNnc3RyICJpbCBub21lIMOoIGNvbXBvc3RvIHNvbG8gZGEgY2FyYXR0ZXJpIG5vbiBjb25zZW50aXRpOiAlcyIKKworIzogaWRlbnQuYzo0MzYgYnVpbHRpbi9jb21taXQuYzo2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkYXRlIGZvcm1hdDogJXMiCittc2dzdHIgImZvcm1hdG8gZGF0YSBub24gdmFsaWRvOiAlcyIKKworIzogbGlzdC1vYmplY3RzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgdHJlZSBtb2RlLCBidXQgaXMgbm90IGEgdHJlZSIKK21zZ3N0ciAibGEgdm9jZSAnJXMnIG5lbGwnYWxiZXJvICVzIGhhIGxhIG1vZGFsaXTDoCBhbGJlcm8sIG1hIG5vbiDDqCB1biBhbGJlcm8iCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJlbnRyeSAnJXMnIGluIHRyZWUgJXMgaGFzIGJsb2IgbW9kZSwgYnV0IGlzIG5vdCBhIGJsb2IiCittc2dzdHIgImxhIHZvY2UgJyVzJyBuZWxsJ2FsYmVybyAlcyBoYSBsYSBtb2RhbGl0w6AgYmxvYiwgbWEgbm9uIMOoIHVuIGJsb2IiCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCByb290IHRyZWUgZm9yIGNvbW1pdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY2FyaWNhcmUgbCdhbGJlcm8gcmFkaWNlIHBlciBpbCBjb21taXQgJXMiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBzcGFyc2UgYmxvYiBpbiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhY2NlZGVyZSBhbCBibG9iIHNwYXJzZSBpbiAnJXMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBzcGFyc2UgZmlsdGVyIGRhdGEgaW4gJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgaSBkYXRpIGZpbHRybyBzcGFyc2UgaW4gJXMiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjU4Cittc2dpZCAiZXhwZWN0ZWQgJ3RyZWU6PGRlcHRoPiciCittc2dzdHIgImF0dGVzbyAndHJlZTo8cHJvZm9uZGl0w6A+JyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NzMKK21zZ2lkICJzcGFyc2U6cGF0aCBmaWx0ZXJzIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCIKK21zZ3N0ciAiaWwgc3VwcG9ydG8gcGVyIGkgZmlsdHJpIHNwYXJzZTpwZXJjb3JzbyDDqCBzdGF0byByaW1vc3NvIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbHRlci1zcGVjICclcyciCittc2dzdHIgInNwZWNpZmljYXRvcmUgZmlsdHJvICclcycgbm9uIHZhbGlkbyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11c3QgZXNjYXBlIGNoYXIgaW4gc3ViLWZpbHRlci1zcGVjOiAnJWMnIgorbXNnc3RyICIiCisiw6ggbmVjZXNzYXJpbyBlc2VndWlyZSBsJ2VzY2FwZSBkZWwgY2FyYXR0ZXJlIG5lbGxvIHNwZWNpZmljYXRvcmUgZGVsICIKKyJzb3R0b2ZpbHRybzogJyVjJyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MTQ0Cittc2dpZCAiZXhwZWN0ZWQgc29tZXRoaW5nIGFmdGVyIGNvbWJpbmU6IgorbXNnc3RyICJhdHRlc28gcXVhbGNvc2EgZG9wbyBsYSByaWNvbWJpbmF6aW9uZToiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjIyNgorbXNnaWQgIm11bHRpcGxlIGZpbHRlci1zcGVjcyBjYW5ub3QgYmUgY29tYmluZWQiCittc2dzdHIgIm5vbiDDqCBwb3NzaWJpbGUgY29tYmluYXJlIHBpw7kgc3BlY2lmaWNhdG9yaSBmaWx0cm8iCisKKyM6IGxvY2tmaWxlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMuXG4iCisiXG4iCisiQW5vdGhlciBnaXQgcHJvY2VzcyBzZWVtcyB0byBiZSBydW5uaW5nIGluIHRoaXMgcmVwb3NpdG9yeSwgZS5nLlxuIgorImFuIGVkaXRvciBvcGVuZWQgYnkgJ2dpdCBjb21taXQnLiBQbGVhc2UgbWFrZSBzdXJlIGFsbCBwcm9jZXNzZXNcbiIKKyJhcmUgdGVybWluYXRlZCB0aGVuIHRyeSBhZ2Fpbi4gSWYgaXQgc3RpbGwgZmFpbHMsIGEgZ2l0IHByb2Nlc3NcbiIKKyJtYXkgaGF2ZSBjcmFzaGVkIGluIHRoaXMgcmVwb3NpdG9yeSBlYXJsaWVyOlxuIgorInJlbW92ZSB0aGUgZmlsZSBtYW51YWxseSB0byBjb250aW51ZS4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBjcmVhcmUgJyVzLmxvY2snOiAlcy5cbiIKKyJcbiIKKyJTZW1icmEgY2hlIHVuIGFsdHJvIHByb2Nlc3NvIGdpdCBzaWEgaW4gZXNlY3V6aW9uZSBpbiBxdWVzdG8gcmVwb3NpdG9yeSwgYWQgIgorImVzLlxuIgorInVuIGVkaXRvciBhcGVydG8gZGEgJ2dpdCBjb21taXQnLiBBc3NpY3VyYXRpIGNoZSB0dXR0aSBpIHByb2Nlc3NpXG4iCisic2lhbm8gdGVybWluYXRpLCBxdWluZGkgcmlwcm92YS4gU2UgbCdvcGVyYXppb25lIGNvbnRpbnVhIGEgbm9uIHJpdXNjaXJlLCDDqFxuIgorInBvc3NpYmlsZSBjaGUgdW4gcHJvY2Vzc28gZ2l0IHNpYSBhbmRhdG8gaW4gY3Jhc2ggaW4gcXVlc3RvIHJlcG9zaXRvcnlcbiIKKyJpbiBwcmVjZWRlbnphOiByaW11b3ZpIG1hbnVhbG1lbnRlIGlsIGZpbGUgcGVyIGNvbnRpbnVhcmUuIgorCisjOiBsb2NrZmlsZS5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMiCittc2dzdHIgIkltcG9zc2liaWxlIGNyZWFyZSAnJXMubG9jayc6ICVzIgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICJsZXR0dXJhIGRlbGxhIGNhY2hlIG5vbiByaXVzY2l0YSIKKworIzogbWVyZ2UuYzoxMDcgcmVyZXJlLmM6NzIwIGJ1aWx0aW4vYW0uYzoxODc5IGJ1aWx0aW4vYW0uYzoxOTEzCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTQxIGJ1aWx0aW4vY2hlY2tvdXQuYzo4MDAgYnVpbHRpbi9jbG9uZS5jOjgxMAorIzogYnVpbHRpbi9zdGFzaC5jOjI2NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgbnVvdm8gZmlsZSBpbmRleCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzU2Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIihjb21taXQgbm9uIHZhbGlkbylcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiYWRkX2NhY2hlaW5mbyBub24gcml1c2NpdG8gcGVyIGlsIHBlcmNvcnNvICclcyc7IGludGVycm9tcG8gaWwgbWVyZ2UuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgdG8gcmVmcmVzaCBmb3IgcGF0aCAnJXMnOyBtZXJnZSBhYm9ydGluZy4iCittc2dzdHIgIiIKKyJhZ2dpb3JuYW1lbnRvIGFkZF9jYWNoZWluZm8gbm9uIHJpdXNjaXRvIHBlciBpbCBwZXJjb3JzbyAnJXMnOyBpbnRlcnJvbXBvIGlsICIKKyJtZXJnZS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIHBhdGggJyVzJyVzIgorbXNnc3RyICJjcmVhemlvbmUgZGVsIHBlcmNvcnNvICclcycgbm9uIHJpdXNjaXRhJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICJSaW11b3ZvICVzIHBlciBmYXJlIHNwYXppbyBhbGxhIHNvdHRvZGlyZWN0b3J5XG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg5OSBtZXJnZS1yZWN1cnNpdmUuYzo5MTgKK21zZ2lkICI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IgorbXNnc3RyICI6IGZvcnNlIHNpIHRyYXR0YSBkaSB1biBjb25mbGl0dG8gRC9GPyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTA4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJyVzJyIKK21zZ3N0ciAibWkgcmlmaXV0byBkaSBwZXJkZXJlIHVuIGZpbGUgbm9uIHRyYWNjaWF0byBpbiAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NDkgYnVpbHRpbi9jYXQtZmlsZS5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGwnb2dnZXR0byAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAiYXR0ZXNvIGJsb2IgcGVyICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAiYXBlcnR1cmEgZGkgJyVzJyBub24gcml1c2NpdGE6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJzogJXMiCittc2dzdHIgImNyZWF6aW9uZSBkZWwgY29sbGVnYW1lbnRvIHNpbWJvbGljbyAnJXMnIG5vbiByaXVzY2l0YTogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIgorbXNnc3RyICJub24gc28gY2hlIGZhcmUgY29uICUwNm8gJXMgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChub3QgY2hlY2tlZCBvdXQpIgorbXNnc3RyICJNZXJnZSBkZWwgc290dG9tb2R1bG8gJXMgbm9uIHJpdXNjaXRvIChjaGVja291dCBub24gZXNlZ3VpdG8pIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgbm90IHByZXNlbnQpIgorbXNnc3RyICJNZXJnZSBkZWwgc290dG9tb2R1bG8gJXMgbm9uIHJpdXNjaXRvIChjb21taXQgbm9uIHByZXNlbnRpKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIGRvbid0IGZvbGxvdyBtZXJnZS1iYXNlKSIKK21zZ3N0ciAiIgorIk1lcmdlIGRlbCBzb3R0b21vZHVsbyAlcyBub24gcml1c2NpdG8gKGkgY29tbWl0IG5vbiBzZWd1b25vIGxhIGJhc2UgZGVsICIKKyJtZXJnZSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMTMgbWVyZ2UtcmVjdXJzaXZlLmM6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIHRvIHRoZSBmb2xsb3dpbmcgY29tbWl0OiIKK21zZ3N0ciAiRXNlZ3VvIGlsIGZhc3QgZm9yd2FyZCBkZWwgc290dG9tb2R1bG8gJXMgYWwgc2VndWVudGUgY29tbWl0OiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxNiBtZXJnZS1yZWN1cnNpdmUuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMiCittc2dzdHIgIkVzZWd1byBpbCBmYXN0IGZvcndhcmQgZGVsIHNvdHRvbW9kdWxvICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG1lcmdlIGZvbGxvd2luZyBjb21taXRzIG5vdCBmb3VuZCkiCittc2dzdHIgIiIKKyJNZXJnZSBkZWwgc290dG9tb2R1bG8gJXMgbm9uIHJpdXNjaXRvIChtZXJnZSBkb3BvIGkgY29tbWl0IG5vbiB0cm92YXRvKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChub3QgZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAiTWVyZ2UgZGVsIHNvdHRvbW9kdWxvICVzIG5vbiByaXVzY2l0byAobm9uIGZhc3QgZm9yd2FyZCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTYKK21zZ2lkICJGb3VuZCBhIHBvc3NpYmxlIG1lcmdlIHJlc29sdXRpb24gZm9yIHRoZSBzdWJtb2R1bGU6XG4iCittc2dzdHIgIlRyb3ZhdGEgcG9zc2liaWxlIHJpc29sdXppb25lIG1lcmdlIHBlciBpbCBzb3R0b21vZHVsbzpcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgdGhpcyBpcyBjb3JyZWN0IHNpbXBseSBhZGQgaXQgdG8gdGhlIGluZGV4IGZvciBleGFtcGxlXG4iCisiYnkgdXNpbmc6XG4iCisiXG4iCisiICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcbiIKKyJcbiIKKyJ3aGljaCB3aWxsIGFjY2VwdCB0aGlzIHN1Z2dlc3Rpb24uXG4iCittc2dzdHIgIiIKKyJTZSDDqCBjb3JyZXR0YSBhZ2dpdW5naWxhIHNlbXBsaWNlbWVudGUgYWxsJ2luZGljZSwgYWQgZXNlbXBpb1xuIgorInVzYW5kbzpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorInBlciBhY2NldHRhcmUgcXVlc3RvIHN1Z2dlcmltZW50by5cbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtdWx0aXBsZSBtZXJnZXMgZm91bmQpIgorbXNnc3RyICJNZXJnZSBkZWwgc290dG9tb2R1bG8gJXMgbm9uIHJpdXNjaXRvIChwacO5IG1lcmdlIHRyb3ZhdGkpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzQxCittc2dpZCAiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiCittc2dzdHIgIkVzZWN1emlvbmUgZGVsIG1lcmdlIGludGVybm8gbm9uIHJpdXNjaXRhIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiCittc2dzdHIgIkltcG9zc2liaWxlIGFnZ2l1bmdlcmUgJXMgYWwgZGF0YWJhc2UiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICJNZXJnZSBhdXRvbWF0aWNvIGRpICVzIGluIGNvcnNvIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyB3cml0aW5nIHRvICVzIGluc3RlYWQuIgorbXNnc3RyICIiCisiRXJyb3JlOiBtaSByaWZpdXRvIGRpIHBlcmRlcmUgaWwgZmlsZSBub24gdHJhY2NpYXRvICVzOyBzY3Jpdm8gaW52ZWNlIGluICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisiQ09ORkxJVFRPICglcy9lbGltaW5hemlvbmUpOiAlcyBlbGltaW5hdG8gaW4gJXMgZSAlcyBpbiAlcy4gVmVyc2lvbmUgJXMgZGkgIgorIiVzIGxhc2NpYXRhIG5lbGwnYWxiZXJvLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUuIgorbXNnc3RyICIiCisiQ09ORkxJVFRPICglcy9lbGltaW5hemlvbmUpOiAlcyBlbGltaW5hdG8gaW4gJXMgZSAlcyBjb21lICVzIGluICVzLiBWZXJzaW9uZSAiCisiJXMgZGkgJXMgbGFzY2lhdGEgbmVsbCdhbGJlcm8uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJDT05GTElUVE8gKCVzL2VsaW1pbmF6aW9uZSk6ICVzIGVsaW1pbmF0byBpbiAlcyBlICVzIGluICVzLiBWZXJzaW9uZSAlcyBkaSAiCisiJXMgbGFzY2lhdGEgbmVsbCdhbGJlcm8gaW4gJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJDT05GTElUVE8gKCVzL2VsaW1pbmF6aW9uZSk6ICVzIGVsaW1pbmF0byBpbiAlcyBlICVzIGNvbWUgJXMgaW4gJXMuIFZlcnNpb25lICIKKyIlcyBkaSAlcyBsYXNjaWF0YSBuZWxsJ2FsYmVybyBpbiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjYKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgInJpZGVub21pbmF6aW9uZSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUyNgorbXNnaWQgInJlbmFtZWQiCittc2dzdHIgInJpbm9taW5hdG8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NzcgbWVyZ2UtcmVjdXJzaXZlLmM6MjQ3MiBtZXJnZS1yZWN1cnNpdmUuYzozMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCAlcyIKK21zZ3N0ciAiTWkgcmlmaXV0byBkaSBwZXJkZXJlIHVuIGZpbGUgc3BvcmNvIGluICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXMsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gdGhlIHdheS4iCittc2dzdHIgIiIKKyJNaSByaWZpdXRvIGRpIHBlcmRlcmUgdW4gZmlsZSBub24gdHJhY2NpYXRvIGluICVzLCBiZW5jaMOpIHNpYSBkJ29zdGFjb2xvLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL2FkZCk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuICBBZGRlZCAlcyBpbiAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSVRUTyAocmlkZW5vbWluYXppb25lL2FnZ2l1bnRhKTogZWxlbWVudG8gcmlkZW5vbWluYXRvICVzLT4lcyBpbiAlcy4gJXMgIgorImFnZ2l1bnRvIGluICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgZGlyZWN0b3J5IGluICVzIGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIlcyDDqCB1bmEgZGlyZWN0b3J5IGluICVzOyBsYSBhZ2dpdW5nbyBjb21lICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICJNaSByaWZpdXRvIGRpIHBlcmRlcmUgdW4gZmlsZSBub24gdHJhY2NpYXRvIGluICVzOyBsbyBhZ2dpdW5nbyBjb21lICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBcIiVzXCItPlwiJXNcIiBpbiBicmFuY2ggXCIlc1wiIHJlbmFtZSBcIiVzIgorIlwiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCittc2dzdHIgIiIKKyJDT05GTElUVE8gKHJpZGVub21pbmF6aW9uZS9yaWRlbm9taW5hemlvbmUpOiBmaWxlIHJpZGVub21pbmF0byBcIiVzXCItPlwiJXMiCisiXCIgbmVsIGJyYW5jaCBcIiVzXCIsIHJpZGVub21pbmF0byBcIiVzXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcxMworbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiIChsYXNjaWF0byBpcnJpc29sdG8pIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSVRUTyAocmlkZW5vbWluYXppb25lL3JpZGVub21pbmF6aW9uZSk6IGZpbGUgcmlkZW5vbWluYXRvICVzLT4lcyBpbiAlcy4gIgorIlJpZGVub21pbmF0byAlcy0+JXMgaW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChkaXJlY3RvcnkgcmVuYW1lIHNwbGl0KTogVW5jbGVhciB3aGVyZSB0byBwbGFjZSAlcyBiZWNhdXNlICIKKyJkaXJlY3RvcnkgJXMgd2FzIHJlbmFtZWQgdG8gbXVsdGlwbGUgb3RoZXIgZGlyZWN0b3JpZXMsIHdpdGggbm8gZGVzdGluYXRpb24gIgorImdldHRpbmcgYSBtYWpvcml0eSBvZiB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisiQ09ORkxJVFRPIChzcGxpdCByaWRlbm9taW5hemlvbmUgZGlyZWN0b3J5KTogbm9uIMOoIGNoaWFybyBkb3ZlIGNvbGxvY2FyZSAlcyAiCisicGVyY2jDqSBsYSBkaXJlY3RvcnkgJXMgw6ggc3RhdGEgcmlkZW5vbWluYXRhIGluIHBpw7kgZGlyZWN0b3J5IGRpdmVyc2UgZSAiCisibmVzc3VuYSBkaXJlY3RvcnkgZGkgZGVzdGluYXppb25lIGNvbnRpZW5lIGxhIG1hZ2dpb3IgcGFydGUgZGVpIGZpbGUuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IEV4aXN0aW5nIGZpbGUvZGlyIGF0ICVzIGluIHRoZSB3YXkgb2YgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWUocykgcHV0dGluZyB0aGUgZm9sbG93aW5nIHBhdGgocykgdGhlcmU6ICVzLiIKK21zZ3N0ciAiIgorIkNPTkZMSVRUTyAocmlkZW5vbWluYXppb25lIGRpcmVjdG9yeSBpbXBsaWNpdGEpOiBpbCBmaWxlL2RpcmVjdG9yeSBlc2lzdGVudGUgIgorIiVzIMOoIGQnb3N0YWNvbG8gYWxsZSBzZWd1ZW50aSByaWRlbm9taW5hemlvbmkgZGlyZWN0b3J5IGNoZSBzcG9zdGFubyBpbiB0YWxlICIKKyJwb3NpemlvbmUgaSBzZWd1ZW50aSBwZXJjb3JzaTogJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IENhbm5vdCBtYXAgbW9yZSB0aGFuIG9uZSBwYXRoIHRvICVzOyAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZXMgdHJpZWQgdG8gcHV0IHRoZXNlIHBhdGhzIHRoZXJlOiAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSVRUTyAocmlkZW5vbWluYXppb25lIGRpcmVjdG9yeSBpbXBsaWNpdGEpOiBpbXBvc3NpYmlsZSBtYXBwYXJlIHBpw7kgZGkgIgorInVuIHBlcmNvcnNvIGluICVzOyBkZWxsZSByaWRlbm9taW5hemlvbmkgZGlyZWN0b3J5IGltcGxpY2l0ZSBoYW5ubyB0ZW50YXRvICIKKyJkaSBzcG9zdGFyZSBpbiB0YWxlIHBvc2l6aW9uZSBpIHNlZ3VlbnRpIHBlcmNvcnNpOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgZGlyZWN0b3J5ICVzLT4lcyBpbiAlcy4gUmVuYW1lIGRpcmVjdG9yeSAlcy0iCisiPiVzIGluICVzIgorbXNnc3RyICIiCisiQ09ORkxJVFRPIChyaWRlbm9taW5hemlvbmUvcmlkZW5vbWluYXppb25lKTogZGlyZWN0b3J5IHJpZGVub21pbmF0YSAlcy0+JXMgIgorImluICVzLiBEaXJlY3RvcnkgcmlkZW5vbWluYXRhICVzLT4lcyBpbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjQzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogQXZvaWRpbmcgYXBwbHlpbmcgJXMgLT4gJXMgcmVuYW1lIHRvICVzLCBiZWNhdXNlICVzIGl0c2VsZiB3YXMgIgorInJlbmFtZWQuIgorbXNnc3RyICIiCisiQVRURU5aSU9ORTogZXZpdG8gZGkgYXBwbGljYXJlIGxhIHJpZGVub21pbmF6aW9uZSAlcyAtPiAlcyBhICVzIHBlcmNow6kgJXMgIgorInN0ZXNzbyDDqCBzdGF0byByaWRlbm9taW5hdG8uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyOTYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBsJ29nZ2V0dG8gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgImwnb2dnZXR0byAlcyBub24gw6ggdW4gYmxvYiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyOAorbXNnaWQgIm1vZGlmeSIKK21zZ3N0ciAibW9kaWZpY2EiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMjgKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAibW9kaWZpY2F0byIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA0MAorbXNnaWQgImNvbnRlbnQiCittc2dzdHIgImNvbnRlbnV0byIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA0NAorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgImFnZ2l1bnRhL2FnZ2l1bnRhIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgJXMgKG1lcmdlZCBzYW1lIGFzIGV4aXN0aW5nKSIKK21zZ3N0ciAiT21lc3NvICVzIChlbGVtZW50byBzb3R0b3Bvc3RvIGEgbWVyZ2UgdWd1YWxlIGEgcXVlbGxvIGVzaXN0ZW50ZSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODkgZ2l0LXN1Ym1vZHVsZS5zaDoxMDAzCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJzb3R0b21vZHVsbyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAiQ09ORkxJVFRPICglcyk6IGNvbmZsaXR0byBkaSBtZXJnZSBpbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiTG8gYWdnaXVuZ28gY29tZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAlczsgIgorIm1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKyJQZXJjb3JzbyBhZ2dpb3JuYXRvOiAlcyBhZ2dpdW50byBpbiAlcyBpbiB1bmEgZGlyZWN0b3J5IHJpZGVub21pbmF0YSBpbiAlczsgIgorImxvIHNwb3N0byBpbiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgYWRkZWQgaW4gJXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgIgorImluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorIkNPTkZMSVRUTyAocG9zaXppb25lIGZpbGUpOiAlcyBhZ2dpdW50byBpbiAlcyBpbiB1bmEgZGlyZWN0b3J5IHJpZGVub21pbmF0YSAiCisiaW4gJXMsIGlsIGNoZSBzdWdnZXJpc2NlIGNoZSBmb3JzZSBkb3ZyZWJiZSBlc3NlcmUgc3Bvc3RhdG8gaW4gJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICIKKyIlczsgbW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorIlBlcmNvcnNvIGFnZ2lvcm5hdG86ICVzIHJpZGVub21pbmF0byBpbiAlcyBpbiAlcyBpbiB1bmEgZGlyZWN0b3J5ICIKKyJyaWRlbm9taW5hdGEgaW4gJXM7IGxvIHNwb3N0byBpbiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgIgorIndhcyByZW5hbWVkIGluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorIkNPTkZMSVRUTyAocG9zaXppb25lIGZpbGUpOiAlcyByaWRlbm9taW5hdG8gaW4gJXMgaW4gJXMgaW4gdW5hIGRpcmVjdG9yeSAiCisicmlkZW5vbWluYXRhIGluICVzLCBpbCBjaGUgc3VnZ2VyaXNjZSBjaGUgZm9yc2UgZG92cmViYmUgZXNzZXJlIHNwb3N0YXRvIGluICIKKyIlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgIlJpbW96aW9uZSBkaSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM1MAorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICJmaWxlL2RpcmVjdG9yeSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM1NQorbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICJkaXJlY3RvcnkvZmlsZSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSVRUTyAoJXMpOiB1bmEgZGlyZWN0b3J5IGRlbm9taW5hdGEgJXMgZXNpc3RlIGdpw6AgaW4gJXMuIEFnZ2l1bmdvICVzICIKKyJjb21lICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAiQWdnaXVudGEgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKGFkZC9hZGQpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAiQ09ORkxJVFRPIChhZ2dpdW5naS9hZ2dpdW5naSk6IGNvbmZsaXR0byBkaSBtZXJnZSBpbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQyNAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSEiCittc2dzdHIgIkdpw6AgYWdnaW9ybmF0byEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICJtZXJnZSBkZWdsaSBhbGJlcmkgJXMgZSAlcyBub24gcml1c2NpdG8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1MzcKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAiTWVyZ2UgaW4gY29yc286IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICJ0cm92YXRvICV1IGFudGVuYXRvIGNvbXVuZToiCittc2dzdHJbMV0gInRyb3ZhdGkgJXUgYW50ZW5hdGkgY29tdW5pOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzYwMAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAiaWwgbWVyZ2Ugbm9uIGhhIHJlc3RpdHVpdG8gYWxjdW4gY29tbWl0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIgICVzIgorbXNnc3RyICIiCisiTGUgdHVlIG1vZGlmaWNoZSBsb2NhbGkgYWkgc2VndWVudGkgZmlsZSBzYXJlYmJlcm8gc292cmFzY3JpdHRlIGRhbCBtZXJnZTpcbiIKKyIgICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ29nZ2V0dG8gJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzc3NCBidWlsdGluL21lcmdlLmM6Njk3IGJ1aWx0aW4vbWVyZ2UuYzo4NzcKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICJJbXBvc3NpYmlsZSBzY3JpdmVyZSBsJ2luZGljZS4iCisKKyM6IG1pZHguYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIgorbXNnc3RyICJpbCBmaWxlIG11bHRpLXBhY2staW5kZXggJXMgw6ggdHJvcHBvIHBpY2NvbG8iCisKKyM6IG1pZHguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSAweCUwOHggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAibGEgZmlybWEgZGVsIG11bHRpLXBhY2staW5kZXggMHglMDh4IG5vbiBjb3JyaXNwb25kZSBhbGxhIGZpcm1hIDB4JTA4eCIKKworIzogbWlkeC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggdmVyc2lvbiAlZCBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAidmVyc2lvbmUgJWQgbXVsdGktcGFjay1pbmRleCBub24gcmljb25vc2NpdXRhIgorCisjOiBtaWR4LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCB2ZXJzaW9uICV1IGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJsYSB2ZXJzaW9uZSBkZWxsJ2hhc2ggJXUgbm9uIGNvcnJpc3BvbmRlIgorCisjOiBtaWR4LmM6MTA4Cittc2dpZCAiaW52YWxpZCBjaHVuayBvZmZzZXQgKHRvbyBsYXJnZSkiCittc2dzdHIgIm9mZnNldCBibG9jY28gbm9uIHZhbGlkbyAodHJvcHBvIGdyYW5kZSkiCisKKyM6IG1pZHguYzoxMzIKK21zZ2lkICJ0ZXJtaW5hdGluZyBtdWx0aS1wYWNrLWluZGV4IGNodW5rIGlkIGFwcGVhcnMgZWFybGllciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICJsJ0lEIGJsb2NjbyBmaW5hbGUgbXVsdGktcGFjay1pbmRleCBjb21wYXJlIHByaW1hIGRpIHF1YW50byBwcmV2aXN0byIKKworIzogbWlkeC5jOjE0NQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBwYWNrLW5hbWUgY2h1bmsiCittc2dzdHIgImRhbCBtdWx0aS1wYWNrLWluZGV4IG1hbmNhIGlsIGJsb2NjbyByaWNoaWVzdG8gcGFjay1uYW1lIgorCisjOiBtaWR4LmM6MTQ3Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBmYW5vdXQgY2h1bmsiCittc2dzdHIgImRhbCBtdWx0aS1wYWNrLWluZGV4IG1hbmNhIGlsIGJsb2NjbyByaWNoaWVzdG8gZmFub3V0IE9JRCIKKworIzogbWlkeC5jOjE0OQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgbG9va3VwIGNodW5rIgorbXNnc3RyICJkYWwgbXVsdGktcGFjay1pbmRleCBtYW5jYSBpbCBibG9jY28gcmljaGllc3RvIGxvb2t1cCBPSUQiCisKKyM6IG1pZHguYzoxNTEKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgb2JqZWN0IG9mZnNldHMgY2h1bmsiCittc2dzdHIgImRhbCBtdWx0aS1wYWNrLWluZGV4IG1hbmNhIGlsIGJsb2NjbyByaWNoaWVzdG8gb2Zmc2V0IG9nZ2V0dGkiCisKKyM6IG1pZHguYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBwYWNrIG5hbWVzIG91dCBvZiBvcmRlcjogJyVzJyBiZWZvcmUgJyVzJyIKK21zZ3N0ciAibm9taSBwYWNrIG11bHRpLXBhY2staW5kZXggaW4gZGlzb3JkaW5lOiAnJXMnIGFwcGFyZSBwcmltYSBkaSAnJXMnIgorCisjOiBtaWR4LmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLWludC1pZDogJXUgKCV1IHRvdGFsIHBhY2tzKSIKK21zZ3N0ciAicGFjay1pbnQtaWQgbm9uIHZhbGlkbzogJXUgKCV1IHBhY2sgdG90YWxpKSIKKworIzogbWlkeC5jOjI2MAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc3RvcmVzIGEgNjQtYml0IG9mZnNldCwgYnV0IG9mZl90IGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAiIgorIm5lbCBtdWx0aS1wYWNrLWluZGV4IMOoIHNhbHZhdG8gdW4gb2Zmc2V0IGEgNjQgYml0LCBtYSBvZmZfdCDDqCB0cm9wcG8gcGljY29sbyIKKworIzogbWlkeC5jOjI4OAorbXNnaWQgImVycm9yIHByZXBhcmluZyBwYWNrZmlsZSBmcm9tIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgImVycm9yZSBkdXJhbnRlIGxhIHByZXBhcmF6aW9uZSBkZWwgcGFja2ZpbGUgZGFsIG11bHRpLXBhY2staW5kZXgiCisKKyM6IG1pZHguYzo0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFkZCBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJhZ2dpdW50YSBkZWwgcGFja2ZpbGUgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IG1pZHguYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGFjay1pbmRleCAnJXMnIgorbXNnc3RyICJhcGVydHVyYSBkZWwgcGFjay1pbmRleCAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogbWlkeC5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9jYXRlIG9iamVjdCAlZCBpbiBwYWNrZmlsZSIKK21zZ3N0ciAicmljZXJjYSBkZWxsJ29nZ2V0dG8gJWQgbmVsIHBhY2tmaWxlIG5vbiByaXVzY2l0YSIKKworIzogbWlkeC5jOjg0MgorbXNnaWQgIkFkZGluZyBwYWNrZmlsZXMgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiQWdnaXVudGEgZGVpIGZpbGUgcGFjayBhbCBtdWx0aS1wYWNrLWluZGV4IGluIGNvcnNvIgorCisjOiBtaWR4LmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3Qgc2VlIHBhY2stZmlsZSAlcyB0byBkcm9wIgorbXNnc3RyICJub24gaG8gdmlzdG8gaWwgZmlsZSBwYWNrICVzIGRhIHNjYXJ0YXJlIgorCisjOiBtaWR4LmM6OTczCittc2dpZCAiV3JpdGluZyBjaHVua3MgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiU2NyaXR0dXJhIGRlaSBjaHVuayBuZWwgbXVsdGktcGFjay1pbmRleCBpbiBjb3JzbyIKKworIzogbWlkeC5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiCittc2dzdHIgInB1bGl6aWEgZGVsIG11bHRpLXBhY2staW5kZXggJXMgbm9uIHJpdXNjaXRhIgorCisjOiBtaWR4LmM6MTEwOAorbXNnaWQgIkxvb2tpbmcgZm9yIHJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICJSaWNlcmNhIGRpIGZpbGUgcGFjayByZWZlcmVuemlhdGkgaW4gY29yc28iCisKKyM6IG1pZHguYzoxMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvaWQgZmFub3V0IG91dCBvZiBvcmRlcjogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCittc2dzdHIgIiIKKyJmYW5vdXQgb2lkIGluIGRpc29yZGluZTogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCisKKyM6IG1pZHguYzoxMTI4Cittc2dpZCAiVmVyaWZ5aW5nIE9JRCBvcmRlciBpbiBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJWZXJpZmljYSBvcmRpbmUgT0lEIG5lbCBtdWx0aS1wYWNrLWluZGV4IGluIGNvcnNvIgorCisjOiBtaWR4LmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICJvaWQgbG9va3VwIG91dCBvZiBvcmRlcjogb2lkWyVkXSA9ICVzID49ICVzID0gb2lkWyVkXSIKK21zZ3N0ciAibG9va3VwIG9pZCBpbiBkaXNvcmRpbmU6IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCisKKyM6IG1pZHguYzoxMTU3Cittc2dpZCAiU29ydGluZyBvYmplY3RzIGJ5IHBhY2tmaWxlIgorbXNnc3RyICJPcmRpbmFtZW50byBkZWdsaSBvZ2dldHRpIG5lbCBwYWNrZmlsZSBpbiBjb3JzbyIKKworIzogbWlkeC5jOjExNjQKK21zZ2lkICJWZXJpZnlpbmcgb2JqZWN0IG9mZnNldHMiCittc2dzdHIgIlZlcmlmaWNhIG9mZnNldCBvZ2dldHRpIGluIGNvcnNvIgorCisjOiBtaWR4LmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrIGVudHJ5IGZvciBvaWRbJWRdID0gJXMiCittc2dzdHIgImNhcmljYW1lbnRvIHZvY2UgcGFjayBwZXIgb2lkWyVkXSA9ICVzIG5vbiByaXVzY2l0byIKKworIzogbWlkeC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgcGFjay1pbmRleCBmb3IgcGFja2ZpbGUgJXMiCittc2dzdHIgImNhcmljYW1lbnRvIHBhY2staW5kZXggcGVyIGlsIHBhY2tmaWxlICVzIG5vbiByaXVzY2l0byIKKworIzogbWlkeC5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb3JyZWN0IG9iamVjdCBvZmZzZXQgZm9yIG9pZFslZF0gPSAlczogJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKK21zZ3N0ciAib2Zmc2V0IG9nZ2V0dG8gbm9uIGNvcnJldHRvIHBlciBvaWRbJWRdID0gJXM6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCisKKyM6IG1pZHguYzoxMjIwCittc2dpZCAiQ291bnRpbmcgcmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICJDb250ZWdnaW8gZGVnbGkgb2dnZXR0aSByZWZlcmVuemlhdGkgaW4gY29yc28iCisKKyM6IG1pZHguYzoxMjMwCittc2dpZCAiRmluZGluZyBhbmQgZGVsZXRpbmcgdW5yZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAiUmljZXJjYSBlZCBlbGltaW5hemlvbmUgZGVpIGZpbGUgcGFjayBub24gcmVmZXJlbnppYXRpIGluIGNvcnNvIgorCisjOiBtaWR4LmM6MTM4OAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMiCittc2dzdHIgImltcG9zc2liaWxlIGF2dmlhcmUgcGFjay1vYmplY3RzIgorCisjOiBtaWR4LmM6MTQwNworbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggcGFjay1vYmplY3RzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBmaW5pcmUgcGFjay1vYmplY3RzIgorCisjOiBuYW1lLWhhc2guYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsYXp5X2RpciB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgaWwgdGhyZWFkIGxhenlfZGlyOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBpbCB0aHJlYWQgbGF6eV9uYW1lOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBibG9jY2FyZSBpbCB0aHJlYWQgbGF6eV9uYW1lOiAlcyIKKworIzogbm90ZXMtbWVyZ2UuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBwcmV2aW91cyBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIHVzZSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHRvICIKKyJjb21taXQvYWJvcnQgdGhlIHByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgbm90ZXMgbWVyZ2UuIgorbXNnc3RyICIiCisiTm9uIGhhaSBjb25jbHVzbyBpbCBtZXJnZSBkZWxsZSBub3RlIHByZWNlZGVudGUgKCVzIGVzaXN0ZSkuXG4iCisiVXNhICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG8gJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0JyBwZXIgZXNlZ3VpcmUgaWwgIgorImNvbW1pdC9pbnRlcnJvbXBlcmUgaWwgbWVyZ2UgcHJlY2VkZW50ZSBwcmltYSBkaSBpbml6aWFyZSB1biBudW92byBtZXJnZSAiCisiZGVsbGUgbm90ZS4iCisKKyM6IG5vdGVzLW1lcmdlLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS4iCittc2dzdHIgIk5vbiBoYWkgY29uY2x1c28gaWwgbWVyZ2UgZGVsbGUgbm90ZSAoJXMgZXNpc3RlKS4iCisKKyM6IG5vdGVzLXV0aWxzLmM6NDYKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBjb21taXQgZGkgdW4gYWxiZXJvIGRlbGxlIG5vdGUgbm9uIGluaXppYWxpenphdG8vbm9uICIKKyJyZWZlcmVuemlhdG8iCisKKyM6IG5vdGVzLXV0aWxzLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVmFsb3JlIGRpIG5vdGVzLnJld3JpdGVNb2RlIGVycmF0bzogJyVzJyIKKworIzogbm90ZXMtdXRpbHMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIk1pIHJpZml1dG8gZGkgcmlzY3JpdmVyZSBsZSBub3RlIGluICVzIChhbCBkaSBmdW9yaSBkaSByZWZzL25vdGVzLykiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YKKyMuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcworIy4gaXRzIHZhbHVlLgorIy4KKyM6IG5vdGVzLXV0aWxzLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVmFsb3JlIGRpICVzIGVycmF0bzogJyVzJyIKKworIzogb2JqZWN0LmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSBcIiVzXCIiCittc2dzdHIgInRpcG8gb2dnZXR0byBcIiVzXCIgbm9uIHZhbGlkbyIKKworIzogb2JqZWN0LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBhICVzLCBub3QgYSAlcyIKK21zZ3N0ciAibCdvZ2dldHRvICVzIMOoIHVuICVzLCBub24gdW4gJXMiCisKKyM6IG9iamVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaGFzIHVua25vd24gdHlwZSBpZCAlZCIKK21zZ3N0ciAibCdvZ2dldHRvICVzIGhhIGwnSUQgdGlwbyBzY29ub3NjaXV0byAlZCIKKworIzogb2JqZWN0LmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3Q6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGwnb2dnZXR0bzogJXMiCisKKyM6IG9iamVjdC5jOjI2NiBvYmplY3QuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCAlcyIKK21zZ3N0ciAiaGFzaCBub24gY29ycmlzcG9uZGVudGU6ICVzIgorCisjOiBwYWNrZmlsZS5jOjYyOQorbXNnaWQgIm9mZnNldCBiZWZvcmUgZW5kIG9mIHBhY2tmaWxlIChicm9rZW4gLmlkeD8pIgorbXNnc3RyICJvZmZzZXQgY29sbG9jYXRvIHByaW1hIGRlbGxhIGZpbmUgZGVsIHBhY2tmaWxlICguaWR4IGNvcnJvdHRvPykiCisKKyM6IHBhY2tmaWxlLmM6MTg5OQorIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmVmb3JlIHN0YXJ0IG9mIHBhY2sgaW5kZXggZm9yICVzIChjb3JydXB0IGluZGV4PykiCittc2dzdHIgIiIKKyJvZmZzZXQgY29sbG9jYXRvIHByaW1hIGRlbGwnaW5pemlvIGRlbGwnaW5kaWNlIHBhY2sgcGVyICVzIChpbmRpY2UgY29ycm90dG8/KSIKKworIzogcGFja2ZpbGUuYzoxOTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZXlvbmQgZW5kIG9mIHBhY2sgaW5kZXggZm9yICVzICh0cnVuY2F0ZWQgaW5kZXg/KSIKK21zZ3N0ciAiIgorIm9mZnNldCBjb2xsb2NhdG8gZG9wbyBsYSBmaW5lIGRlbGwnaW5kaWNlIHBhY2sgcGVyICVzIChpbmRpY2UgdHJvbmNhdG8/KSIKKworIzogcGFjay1iaXRtYXAuYzo4MDAgcGFjay1iaXRtYXAuYzo4MDYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgc2l6ZSBvZiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBsZSBkaW1lbnNpb25pIGRpICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiJXMgcmljaGllZGUgdW4gdmFsb3JlIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJXMiCittc2dzdHIgIiVzIG5vbiDDqCBjb21wYXRpYmlsZSBjb24gJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IGluY29tcGF0aWJsZSB3aXRoIHNvbWV0aGluZyBlbHNlIgorbXNnc3RyICIlcyBub24gw6ggY29tcGF0aWJpbGUgY29uIHF1YWxjb3MnYWx0cm8iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MiBwYXJzZS1vcHRpb25zLmM6OTYgcGFyc2Utb3B0aW9ucy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0YWtlcyBubyB2YWx1ZSIKK21zZ3N0ciAiJXMgbm9uIHJpY2hpZWRlIHVuIHZhbG9yZSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzbid0IGF2YWlsYWJsZSIKK21zZ3N0ciAiJXMgbm9uIMOoIGRpc3BvbmliaWxlIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB3aXRoIGFuIG9wdGlvbmFsIGsvbS9nIHN1ZmZpeCIKK21zZ3N0ciAiIgorIiVzIHJpY2hpZWRlIHVuIHZhbG9yZSBpbnRlcm8gbm9uIG5lZ2F0aXZvIGNvbiB1biBzdWZmaXNzbyBrL20vZyBmYWNvbHRhdGl2byIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgb3B0aW9uOiAlcyAoY291bGQgYmUgLS0lcyVzIG9yIC0tJXMlcykiCittc2dzdHIgIm9wemlvbmUgYW1iaWd1YTogJXMgKHBvdHJlYmJlIGVzc2VyZSAtLSVzJXMgbyAtLSVzJXMpIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NDIwIHBhcnNlLW9wdGlvbnMuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIHlvdSBtZWFuIGAtLSVzYCAod2l0aCB0d28gZGFzaGVzKT8iCittc2dzdHIgImZvcnNlIGludGVuZGV2aSBgLS0lc2AgKGNvbiBkdWUgdHJhdHRpbmkpPyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiBgJXMnIgorbXNnc3RyICJvcHppb25lIHNjb25vc2NpdXRhIGAlcyciCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzd2l0Y2ggYCVjJyIKK21zZ3N0ciAib3B6aW9uZSBgJWNgIHNjb25vc2NpdXRhIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm9uLWFzY2lpIG9wdGlvbiBpbiBzdHJpbmc6IGAlcyciCittc2dzdHIgIm9wemlvbmUgbm9uIEFTQ0lJIHNjb25vc2NpdXRhIHByZXNlbnRlIG5lbGxhIHN0cmluZ2E6IGAlcyciCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4ODUKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgInVzbzogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBwYXJzZS1vcHRpb25zLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICBvcHB1cmU6ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTUyCittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLU5VTSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBvZiAtLSVzIgorbXNnc3RyICJhbGlhcyBkaSAtLSVzIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MjAgcGFyc2Utb3B0aW9ucy1jYi5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgImwnb3B6aW9uZSBgJXMnIHJpY2hpZWRlIHVuIHZhbG9yZSBudW1lcmljbyIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBleHBpcmF0aW9uIGRhdGUgJyVzJyIKK21zZ3N0ciAiZGF0YSBzY2FkZW56YSAnJXMnIG1hbGZvcm1hdGEiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIFwiYWx3YXlzXCIsIFwiYXV0b1wiLCBvciBcIm5ldmVyXCIiCittc2dzdHIgImwnb3B6aW9uZSBgJXMnIHJpY2hpZWRlIFwiYWx3YXlzXCIsIFwiYXV0b1wiIG8gXCJuZXZlclwiIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MTMwIHBhcnNlLW9wdGlvbnMtY2IuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIm5vbWUgb2dnZXR0byAnJXMnIG1hbGZvcm1hdG8iCisKKyM6IHBhdGguYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgIkltcG9zc2liaWxlIHJlbmRlcmUgJXMgc2NyaXZpYmlsZSBkYWwgZ3J1cHBvIgorCisjOiBwYXRoc3BlYy5jOjEzMAorbXNnaWQgIkVzY2FwZSBjaGFyYWN0ZXIgJ1xcJyBub3QgYWxsb3dlZCBhcyBsYXN0IGNoYXJhY3RlciBpbiBhdHRyIHZhbHVlIgorbXNnc3RyICIiCisiQ2FyYXR0ZXJlIGRpIGVzY2FwZSAnXFwnIG5vbiBjb25zZW50aXRvIGNvbWUgdWx0aW1vIGNhcmF0dGVyZSBkZWwgdmFsb3JlICIKKyJhdHRyaWJ1dG8iCisKKyM6IHBhdGhzcGVjLmM6MTQ4Cittc2dpZCAiT25seSBvbmUgJ2F0dHI6JyBzcGVjaWZpY2F0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICLDiCBjb25zZW50aXRhIHNvbG8gdW5hIHNwZWNpZmljYSAnYXR0cjonLiIKKworIzogcGF0aHNwZWMuYzoxNTEKK21zZ2lkICJhdHRyIHNwZWMgbXVzdCBub3QgYmUgZW1wdHkiCittc2dzdHIgImxhIHNwZWNpZmljYSBhdHRyIG5vbiBkZXZlIGVzc2VyZSB2dW90YSIKKworIzogcGF0aHNwZWMuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUgbmFtZSAlcyIKK21zZ3N0ciAibm9tZSBhdHRyaWJ1dG8gJXMgbm9uIHZhbGlkbyIKKworIzogcGF0aHNwZWMuYzoyNTkKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisibGUgaW1wb3N0YXppb25pIGdsb2JhbGkgc3BlY2lmaWNhdG9yZSBwZXJjb3JzbyAnZ2xvYicgZSAnbm9nbG9iJyBub24gc29ubyAiCisiY29tcGF0aWJpbGkiCisKKyM6IHBhdGhzcGVjLmM6MjY2Cittc2dpZCAiIgorImdsb2JhbCAnbGl0ZXJhbCcgcGF0aHNwZWMgc2V0dGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgZ2xvYmFsICIKKyJwYXRoc3BlYyBzZXR0aW5ncyIKK21zZ3N0ciAiIgorImwnaW1wb3N0YXppb25lIGdsb2JhbGUgc3BlY2lmaWNhdG9yZSBwZXJjb3JzbyAnbGl0ZXJhbCcgw6ggaW5jb21wYXRpYmlsZSBjb24gIgorInR1dHRlIGxlIGFsdHJlIGltcG9zdGF6aW9uaSBnbG9iYWxpIHNwZWNpZmljYXRvcmUgcGVyY29yc28iCisKKyM6IHBhdGhzcGVjLmM6MzA2Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICJwYXJhbWV0cm8gcGVyIGlsIG1hZ2ljIHNwZWNpZmljYXRvcmUgcGVyY29yc28gJ3ByZWZpeCcgbm9uIHZhbGlkbyIKKworIzogcGF0aHNwZWMuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXRoc3BlYyBtYWdpYyAnJS4qcycgaW4gJyVzJyIKK21zZ3N0ciAiTWFnaWMgc3BlY2lmaWNhdG9yZSBwZXJjb3JzbyAnJS4qcycgaW4gJyVzJyBub24gdmFsaWRvIgorCisjOiBwYXRoc3BlYy5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcpJyBhdCB0aGUgZW5kIG9mIHBhdGhzcGVjIG1hZ2ljIGluICclcyciCittc2dzdHIgIicpJyBtYW5jYW50ZSBhbGxhIGZpbmUgZGVsIG1hZ2ljIHNwZWNpZmljYXRvcmUgcGVyY29yc28gaW4gJyVzJyIKKworIzogcGF0aHNwZWMuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIk1hZ2ljIHNwZWNpZmljYXRvcmUgcGVyY29yc28gJyVjJyBpbiAnJXMnIG5vbiBpbXBsZW1lbnRhdG8iCisKKyM6IHBhdGhzcGVjLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIlczogJ2xpdGVyYWwnIGUgJ2dsb2InIG5vbiBzb25vIGNvbXBhdGliaWxpIgorCisjOiBwYXRoc3BlYy5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkgYXQgJyVzJyIKK21zZ3N0ciAiJXM6ICclcycgw6ggYWwgZGkgZnVvcmkgZGVsIHJlcG9zaXRvcnkgaW4gJyVzJyIKKworIzogcGF0aHNwZWMuYzo1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyAobW5lbW9uaWM6ICclYycpIgorbXNnc3RyICInJXMnIChvcHppb25lIG1uZW1vbmljYTogJyVjJykiCisKKyM6IHBhdGhzcGVjLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiVzOiBtYWdpYyBzcGVjaWZpY2F0b3JlIHBlcmNvcnNvIG5vbiBzdXBwb3J0YXRvIGRhIHF1ZXN0byBjb21hbmRvOiAlcyIKKworIzogcGF0aHNwZWMuYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICIiCisibG8gc3BlY2lmaWNhdG9yZSBwZXJjb3JzbyAnJXMnIHNpIHRyb3ZhIG9sdHJlIHVuIGNvbGxlZ2FtZW50byBzaW1ib2xpY28iCisKKyM6IHBhdGhzcGVjLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgaXMgYmFkbHkgcXVvdGVkOiAlcyIKK21zZ3N0ciAibGEgcmlnYSBub24gw6ggYmVuIHJhY2NoaXVzYSB0cmEgdmlyZ29sZXR0ZTogJXMiCisKKyM6IHBrdC1saW5lLmM6OTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmx1c2ggcGFja2V0IgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBwYWNjaGV0dG8gZmx1c2giCisKKyM6IHBrdC1saW5lLmM6OTkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZGVsaW0gcGFja2V0IgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBwYWNjaGV0dG8gZGVsaW0iCisKKyM6IHBrdC1saW5lLmM6MTA2Cittc2dpZCAiZmx1c2ggcGFja2V0IHdyaXRlIGZhaWxlZCIKK21zZ3N0ciAic2NyaXR0dXJhIGNvbiBmbHVzaCBwYWNjaGV0dG8gbm9uIHJpdXNjaXRhIgorCisjOiBwa3QtbGluZS5jOjE0NiBwa3QtbGluZS5jOjIzMgorbXNnaWQgInByb3RvY29sIGVycm9yOiBpbXBvc3NpYmx5IGxvbmcgbGluZSIKK21zZ3N0ciAiZXJyb3JlIHByb3RvY29sbG86IHJpZ2EgaW1wb3NzaWJpbG1lbnRlIGx1bmdhIgorCisjOiBwa3QtbGluZS5jOjE2MiBwa3QtbGluZS5jOjE2NAorbXNnaWQgInBhY2tldCB3cml0ZSB3aXRoIGZvcm1hdCBmYWlsZWQiCittc2dzdHIgInNjcml0dHVyYSBwYWNjaGV0dG8gY29uIGZvcm1hdG8gbm9uIHJpdXNjaXRhIgorCisjOiBwa3QtbGluZS5jOjE5NgorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQgLSBkYXRhIGV4Y2VlZHMgbWF4IHBhY2tldCBzaXplIgorbXNnc3RyICIiCisic2NyaXR0dXJhIHBhY2NoZXR0byBub24gcml1c2NpdGEgLSBpIGRhdGkgc29ubyBwacO5IGRlbGxhIGRpbWVuc2lvbmUgbWFzc2ltYSAiCisicGFjY2hldHRvIgorCisjOiBwa3QtbGluZS5jOjIwMyBwa3QtbGluZS5jOjIxMAorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgInNjcml0dHVyYSBwYWNjaGV0dG8gbm9uIHJpdXNjaXRhIgorCisjOiBwa3QtbGluZS5jOjI5NQorbXNnaWQgInJlYWQgZXJyb3IiCittc2dzdHIgImVycm9yZSBkaSBsZXR0dXJhIgorCisjOiBwa3QtbGluZS5jOjMwMworbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5IgorbXNnc3RyICJsJ2ludGVybG9jdXRvcmUgcmVtb3RvIGhhIGNoaXVzbyBpbmFzcGV0dGF0YW1lbnRlIGxhIGNvbm5lc3Npb25lIgorCisjOiBwa3QtbGluZS5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIGxpbmUgbGVuZ3RoIGNoYXJhY3RlcjogJS40cyIKK21zZ3N0ciAiZXJyb3JlIHByb3RvY29sbG86IGNhcmF0dGVyZSBsdW5naGV6emEgcmlnYSBub24gdmFsaWRvOiAlLjRzIgorCisjOiBwa3QtbGluZS5jOjM0MSBwa3QtbGluZS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIGxpbmUgbGVuZ3RoICVkIgorbXNnc3RyICJlcnJvcmUgcHJvdG9jb2xsbzogbHVuZ2hlenphIHJpZ2Egbm9uIHZhbGlkYTogJWQiCisKKyM6IHBrdC1saW5lLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgImVycm9yZSByZW1vdG86ICVzIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTE5Cittc2dpZCAiUmVmcmVzaGluZyBpbmRleCIKK21zZ3N0ciAiQWdnaW9ybmFtZW50byBpbmRpY2UgaW4gY29yc28iCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWRlZCBsc3RhdDogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBsc3RhdCBpbiB2ZXJzaW9uZSB0aHJlYWRlZDogJXMiCisKKyM6IHByZXR0eS5jOjk4MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgaWwgZm9ybWF0byAtLXByZXR0eSIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6MjMKK21zZ2lkICJSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgIlJlbW90byBzZW56YSBVUkwiCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21pc29yIHJlbW90ZSBuYW1lIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgImlsIG5vbWUgZGVsIHJlbW90byBwcm9tZXR0ZW50ZSBub24gcHXDsiBpbml6aWFyZSBjb24gJy8nOiAlcyIKKworIzogcmFuZ2UtZGlmZi5jOjc1Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGBsb2dgIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhdnZpYXJlIGBsb2dgIgorCisjOiByYW5nZS1kaWZmLmM6NzcKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBgbG9nYCBvdXRwdXQiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgbCdvdXRwdXQgZGkgYGxvZ2AiCisKKyM6IHJhbmdlLWRpZmYuYzo5NiBzZXF1ZW5jZXIuYzo1MDIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBpbCBjb21taXQgJyVzJyIKKworIzogcmFuZ2UtZGlmZi5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZ2l0IGhlYWRlciAnJS4qcyciCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgbCdoZWFkZXIgR2l0ICclLipzJyIKKworIzogcmFuZ2UtZGlmZi5jOjI4NQorbXNnaWQgImZhaWxlZCB0byBnZW5lcmF0ZSBkaWZmIgorbXNnc3RyICJnZW5lcmF6aW9uZSBkZWwgZGlmZiBub24gcml1c2NpdGEiCisKKyM6IHJhbmdlLWRpZmYuYzo1MTggcmFuZ2UtZGlmZi5jOjUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbG9nIGZvciAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIHJlZ2lzdHJvIGRpICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzo2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgYWRkIGZpbGUgYWxpYXMgJyVzJyAoJyVzJyBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCkiCittc2dzdHIgIm5vbiBhZ2dpdW5nZXLDsiBsJ2FsaWFzIGZpbGUgJyVzJyAoJyVzJyBlc2lzdGUgZ2nDoCBuZWxsJ2luZGljZSkiCisKKyM6IHJlYWQtY2FjaGUuYzo2OTYKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFuIGVtcHR5IGJsb2IgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlIHVuIGJsb2IgdnVvdG8gbmVsIGRhdGFiYXNlIG9nZ2V0dGkiCisKKyM6IHJlYWQtY2FjaGUuYzo3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbiBvbmx5IGFkZCByZWd1bGFyIGZpbGVzLCBzeW1ib2xpYyBsaW5rcyBvciBnaXQtZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKyIlczogw6ggcG9zc2liaWxlIGFnZ2l1bmdlcmUgc29sbyBmaWxlIHJlZ29sYXJpLCBjb2xsZWdhbWVudGkgc2ltYm9saWNpIG8gIgorImRpcmVjdG9yeSBHaXQiCisKKyM6IHJlYWQtY2FjaGUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0IgorbXNnc3RyICInJXMnIG5vbiBoYSB1biBjb21taXQgZGkgY3VpIMOoIHN0YXRvIGVzZWd1aXRvIGlsIGNoZWNrb3V0IgorCisjOiByZWFkLWNhY2hlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBpbmRleCBmaWxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGluZGljaXp6YXJlIGlsIGZpbGUgJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkICclcycgdG8gaW5kZXgiCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2l1bmdlcmUgJyVzJyBhbGwnaW5kaWNlIgorCisjOiByZWFkLWNhY2hlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0ICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIHN0YXQgc3UgJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjEzMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhcHBlYXJzIGFzIGJvdGggYSBmaWxlIGFuZCBhcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJyVzJyBjb21wYXJlIHNpYSBjb21lIGZpbGUgc2lhIGNvbWUgZGlyZWN0b3J5IgorCisjOiByZWFkLWNhY2hlLmM6MTUzNgorbXNnaWQgIlJlZnJlc2ggaW5kZXgiCittc2dzdHIgIkFnZ2lvcm5hbWVudG8gaW5kaWNlIgorCisjOiByZWFkLWNhY2hlLmM6MTY1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5kZXgudmVyc2lvbiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisiaW5kZXgudmVyc2lvbiBpbXBvc3RhdG8sIG1hIGlsIHZhbG9yZSBub24gw6ggdmFsaWRvLlxuIgorIlVzbyBsYSB2ZXJzaW9uZSAlaSIKKworIzogcmVhZC1jYWNoZS5jOjE2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBpbXBvc3RhdG8sIG1hIGlsIHZhbG9yZSBub24gw6ggdmFsaWRvLlxuIgorIlVzbyBsYSB2ZXJzaW9uZSAlaSIKKworIzogcmVhZC1jYWNoZS5jOjE3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgImZpcm1hIG5vbiB2YWxpZGE6IDB4JTA4eCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJWQiCittc2dzdHIgInZlcnNpb25lIGluZGljZSBub24gdmFsaWRhOiAlZCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjkKK21zZ2lkICJiYWQgaW5kZXggZmlsZSBzaGExIHNpZ25hdHVyZSIKK21zZ3N0ciAiZmlybWEgU0hBMSBmaWxlIGluZGljZSBub24gdmFsaWRhIgorCisjOiByZWFkLWNhY2hlLmM6MTc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCB1c2VzICUuNHMgZXh0ZW5zaW9uLCB3aGljaCB3ZSBkbyBub3QgdW5kZXJzdGFuZCIKK21zZ3N0ciAibCdpbmRpY2UgdXNhIGwnZXN0ZW5zaW9uZSAlLjRzIGNoZSBub24gY29tcHJlbmRpYW1vIgorCisjOiByZWFkLWNhY2hlLmM6MTc2MQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlLjRzIGV4dGVuc2lvbiIKK21zZ3N0ciAiZXN0ZW5zaW9uZSAlLjRzIGlnbm9yYXRhIgorCisjOiByZWFkLWNhY2hlLmM6MTc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGluZGV4IGVudHJ5IGZvcm1hdCAweCUwOHgiCittc2dzdHIgImZvcm1hdG8gdm9jZSBpbmRpY2Ugc2Nvbm9zY2l1dG86IDB4JTA4eCIKKworIzogcmVhZC1jYWNoZS5jOjE4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG5hbWUgZmllbGQgaW4gdGhlIGluZGV4LCBuZWFyIHBhdGggJyVzJyIKK21zZ3N0ciAiY2FtcG8gbm9tZSBtYWxmb3JtYXRvIG5lbGwnaW5kaWNlLCB2aWNpbm8gYWwgcGVyY29yc28gJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjE4NzEKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBpbiBpbmRleCIKK21zZ3N0ciAidm9jaSBzdGFnZSBub24gb3JkaW5hdGUgbmVsbCdpbmRpY2UiCisKKyM6IHJlYWQtY2FjaGUuYzoxODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHN0YWdlIGVudHJpZXMgZm9yIG1lcmdlZCBmaWxlICclcyciCittc2dzdHIgInZvY2kgc3RhZ2UgbXVsdGlwbGUgcGVyIGlsIGZpbGUgc290dG9wb3N0byBhIG1lcmdlICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzoxODc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGZvciAnJXMnIgorbXNnc3RyICJ2b2NpIHN0YWdlIG5vbiBvcmRpbmF0ZSBwZXIgJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjE5ODMgcmVhZC1jYWNoZS5jOjIyNzEgcmVyZXJlLmM6NTY1IHJlcmVyZS5jOjU5OSByZXJlcmUuYzoxMTExCisjOiBzdWJtb2R1bGUuYzoxNjE5IGJ1aWx0aW4vYWRkLmM6NTMyIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTgxCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDcwIGJ1aWx0aW4vY2hlY2tvdXQuYzo2NTYgYnVpbHRpbi9jbGVhbi5jOjk2NworIzogYnVpbHRpbi9jb21taXQuYzozNjcgYnVpbHRpbi9kaWZmLXRyZWUuYzoxMjAgYnVpbHRpbi9ncmVwLmM6NDg1CisjOiBidWlsdGluL212LmM6MTQ1IGJ1aWx0aW4vcmVzZXQuYzoyNDYgYnVpbHRpbi9ybS5jOjI5MAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjMzMgorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiZmlsZSBpbmRpY2UgY29ycm90dG8iCisKKyM6IHJlYWQtY2FjaGUuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBpbCB0aHJlYWQgbG9hZF9jYWNoZV9lbnRyaWVzOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGJsb2NjYXJlIGlsIHRocmVhZCBsb2FkX2NhY2hlX2VudHJpZXM6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW5kZXggZmlsZSBvcGVuIGZhaWxlZCIKK21zZ3N0ciAiJXM6IGFwZXJ0dXJhIGRlbCBmaWxlIGluZGljZSBub24gcml1c2NpdGEiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgc3RhdCB0aGUgb3BlbiBpbmRleCIKK21zZ3N0ciAiJXM6IGltcG9zc2liaWxlIGVzZWd1aXJlIHN0YXQgc3VsbCdpbmRpY2UgYXBlcnRvIgorCisjOiByZWFkLWNhY2hlLmM6MjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW5kZXggZmlsZSBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQiCittc2dzdHIgIiVzOiBmaWxlIGluZGljZSBwacO5IHBpY2NvbG8gZGVsbGEgZGltZW5zaW9uZSBhdHRlc2EiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmFibGUgdG8gbWFwIGluZGV4IGZpbGUiCittc2dzdHIgIiVzOiBpbXBvc3NpYmlsZSBtYXBwYXJlIGlsIGZpbGUgaW5kaWNlIgorCisjOiByZWFkLWNhY2hlLmM6MjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgaWwgdGhyZWFkIGxvYWRfaW5kZXhfZXh0ZW5zaW9uczogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBibG9jY2FyZSBpbCB0aHJlYWQgbG9hZF9pbmRleF9leHRlbnNpb25zOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZyZXNoZW4gc2hhcmVkIGluZGV4ICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2lvcm5hcmUgbCdpbmRpY2UgY29uZGl2aXNvICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzoyMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiCittc2dzdHIgImluZGljZSBjb3Jyb3R0bywgYXR0ZXNvICVzIGluICVzLCBwcmVzZW50ZSAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMwMjYgc3RyYnVmLmM6MTE2MCB3cmFwcGVyLmM6NjIyIGJ1aWx0aW4vbWVyZ2UuYzoxMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjaGl1ZGVyZSAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MzEyOSBzZXF1ZW5jZXIuYzoyMzQzIHNlcXVlbmNlci5jOjM5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbG8gc3RhdCBkaSAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MzE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBnaXQgZGlyOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGxhIGRpcmVjdG9yeSBnaXQ6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MzE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5saW5rOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgdW5saW5rOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpeCBwZXJtaXNzaW9uIGJpdHMgb24gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY29ycmVnZ2VyZSBpIHBlcm1lc3NpIGRpICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzozMzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgZHJvcCB0byBzdGFnZSAjMCIKK21zZ3N0ciAiJXM6IGltcG9zc2liaWxlIHJpcGllZ2FyZSBzdWxsbyBzdGFkaW8gMCIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTEKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhpcyB3aXRoICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS0iCisiY29udGludWUnLlxuIgorIk9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLlxuIgorbXNnc3RyICIiCisiUHVvaSBjb3JyZWdnZXJlIHF1ZXN0YSBzaXR1YXppb25lIGNvbiAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgZSBxdWluZGkgIgorImVzZWd1aXJlICdnaXQgcmViYXNlIC0tY29udGludWUnLlxuIgorIk9wcHVyZSBwdW9pIGludGVycm9tcGVyZSBpbCByZWJhc2UgY29uICdnaXQgcmViYXNlIC0tYWJvcnQnLlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzozMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5yZWNvZ25pemVkIHNldHRpbmcgJXMgZm9yIG9wdGlvbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JpbmcuIgorbXNnc3RyICIiCisiaW1wb3N0YXppb25lICVzIG5vbiByaWNvbm9zY2l1dGEgcGVyIGwnb3B6aW9uZSByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gIgorIkxhIGlnbm9yby4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjQyCittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21tYW5kPiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJiLCBicmVhayA9IHN0b3AgaGVyZSAoY29udGludWUgcmViYXNlIGxhdGVyIHdpdGggJ2dpdCByZWJhc2UgLS1jb250aW51ZScpXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLlxuIgorbXNnc3RyICIiCisiXG4iCisiQ29tYW5kaTpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNhIGlsIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzYSBpbCBjb21taXQsIG1hIG1vZGlmaWNhIGlsIG1lc3NhZ2dpbyBkaSBjb21taXRcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNhIGlsIGNvbW1pdCwgbWEgZmVybWF0aSBwZXIgbW9kaWZpY2FybG9cbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2EgaWwgY29tbWl0LCBtYSBmb25kaWxvIGNvbiBpbCBjb21taXQgcHJlY2VkZW50ZVxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gY29tZSBcInNxdWFzaFwiLCBtYSBzY2FydGEgaWwgbWVzc2FnZ2lvIGRpIGxvZyBkaSAiCisicXVlc3RvXG4iCisiICAgICAgICAgICAgICAgICAgICBjb21taXRcbiIKKyJ4LCBleGVjIDxjb21hbmRvPiA9IGVzZWd1aSBpbCBjb21hbmRvIChpbCByZXN0byBkZWxsYSByaWdhKSB1c2FuZG8gbGEgc2hlbGxcbiIKKyJiLCBicmVhayA9IGZlcm1hdGkgcXVpIChjb250aW51YSBpbCByZWJhc2UgaW4gdW4gc2Vjb25kbyBtb21lbnRvIGNvbiAiCisiJ2dpdCAgICAgICAgICAgcmViYXNlIC0tY29udGludWUnKVxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSBlbGltaW5hIGlsIGNvbW1pdFxuIgorImwsIGxhYmVsIDxldGljaGV0dGE+ID0gZXRpY2hldHRhIGwnSEVBRCBjb3JyZW50ZSBjb24gdW4gbm9tZVxuIgorInQsIHJlc2V0IDxldGljaGV0dGE+ID0gcmVpbXBvc3RhIEhFQUQgYSB1bidldGljaGV0dGFcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGV0aWNoZXR0YT4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYSB1biBjb21taXQgZGkgbWVyZ2UgdXNhbmRvIGlsIG1lc3NhZ2dpbyBkZWwgY29tbWl0IGRpIG1lcmdlXG4iCisiLiAgICAgICBvcmlnaW5hbGUgKG8gbGEgb25lbGluZSBzZSBub24gw6ggc3RhdG8gc3BlY2lmaWNhdG8gdW4gY29tbWl0IGRpICIKKyJtZXJnZVxuIgorIi4gICAgICAgb3JpZ2luYWxlKS4gVXNhIC1jIDxjb21taXQ+IHBlciByaWZvcm11bGFyZSBpbCBtZXNzYWdnaW8gZGkgY29tbWl0LlxuIgorIlxuIgorIlF1ZXN0ZSByaWdoZSBwb3Nzb25vIGVzc2VyZSByaW9yZGluYXRlOyBzYXJhbm5vIGVzZWd1aXRlIGRhbGxhIHByaW1hICIKKyJhbGwndWx0aW1hLlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kcykiCittc2dzdHJbMF0gIlJlYmFzZSBkaSAlcyBzdSAlcyAoJWQgY29tYW5kbykiCittc2dzdHJbMV0gIlJlYmFzZSBkaSAlcyBzdSAlcyAoJWQgY29tYW5kaSkiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjcyIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMjgKK21zZ2lkICIiCisiXG4iCisiRG8gbm90IHJlbW92ZSBhbnkgbGluZS4gVXNlICdkcm9wJyBleHBsaWNpdGx5IHRvIHJlbW92ZSBhIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk5vbiBlbGltaW5hcmUgYWxjdW5hIHJpZ2EuIFVzYSBlc3BsaWNpdGFtZW50ZSAnZHJvcCcgcGVyIHJpbXVvdmVyZSB1biAiCisiY29tbWl0LlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo3NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjMyCittc2dpZCAiIgorIlxuIgorIklmIHlvdSByZW1vdmUgYSBsaW5lIGhlcmUgVEhBVCBDT01NSVQgV0lMTCBCRSBMT1NULlxuIgorbXNnc3RyICIiCisiXG4iCisiUmltdW92ZW5kbyB1bmEgcmlnYSBkYSBxdWkgSUwgQ09NTUlUIENPUlJJU1BPTkRFTlRFIEFORFLDgCBQRVJEVVRPLlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4MSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODcxCittc2dpZCAiIgorIlxuIgorIllvdSBhcmUgZWRpdGluZyB0aGUgdG9kbyBmaWxlIG9mIGFuIG9uZ29pbmcgaW50ZXJhY3RpdmUgcmViYXNlLlxuIgorIlRvIGNvbnRpbnVlIHJlYmFzZSBhZnRlciBlZGl0aW5nLCBydW46XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiU3RhaSBtb2RpZmljYW5kbyBpbCBmaWxlIHRvZG8gZGkgdW4gcmViYXNlIGludGVyYXR0aXZvIGluIGNvcnNvLlxuIgorIlBlciBjb250aW51YXJlIGlsIHJlYmFzZSBkb3BvIGxhIG1vZGlmaWNhLCBlc2VndWk6XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4NiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTQ4Cittc2dpZCAiIgorIlxuIgorIkhvd2V2ZXIsIGlmIHlvdSByZW1vdmUgZXZlcnl0aGluZywgdGhlIHJlYmFzZSB3aWxsIGJlIGFib3J0ZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJDacOyIG5vbm9zdGFudGUsIHNlIHJpbXVvdmkgdHV0dG8sIGlsIHJlYmFzZSBzYXLDoCBhbm51bGxhdG8uXG4iCisiXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjExMCByZXJlcmUuYzo0ODUgcmVyZXJlLmM6NjkyIHNlcXVlbmNlci5jOjM0NDQKKyM6IHNlcXVlbmNlci5jOjM0NzAgc2VxdWVuY2VyLmM6NTEyNSBidWlsdGluL2ZzY2suYzozNDYgYnVpbHRpbi9yZWJhc2UuYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlICclcyciCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjExNiBidWlsdGluL3JlYmFzZS5jOjE4NCBidWlsdGluL3JlYmFzZS5jOjIxMAorIzogYnVpbHRpbi9yZWJhc2UuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlICclcycuIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSAnJXMnLiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS5cbiIKKyJEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKTpcbiIKK21zZ3N0ciAiIgorIkF0dGVuemlvbmU6IMOoIHBvc3NpYmlsZSBjaGUgYWxjdW5pIGNvbW1pdCBzaWFubyBzdGF0aSBzY2FydGF0aSAiCisiYWNjaWRlbnRhbG1lbnRlLlxuIgorIkNvbW1pdCBzY2FydGF0aSAoZGFsIHBpw7kgYWwgbWVubyByZWNlbnRlKTpcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSBcImRyb3BcIiB0byBleHBsaWNpdGx5IHJlbW92ZSBhIGNvbW1pdC5cbiIKKyJcbiIKKyJVc2UgJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2YgIgorIndhcm5pbmdzLlxuIgorIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBlciBldml0YXJlIHF1ZXN0byBtZXNzYWdnaW8sIHVzYSBcImRyb3BcIiBwZXIgcmltdW92ZXJlIHVuIGNvbW1pdFxuIgorImVzcGxpY2l0YW1lbnRlLlxuIgorIlxuIgorIlVzYSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgcGVyIG1vZGlmaWNhcmUgaWwgbGl2ZWxsb1xuIgorImRlZ2xpIGF2dmlzaS5cbiIKKyJJIGNvbXBvcnRhbWVudGkgcG9zc2liaWxpIHNvbm8gaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MjMzIHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjIzOCBzZXF1ZW5jZXIuYzoyMjYyCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MCBidWlsdGluL3JlYmFzZS5jOjE5NSBidWlsdGluL3JlYmFzZS5jOjIyMQorIzogYnVpbHRpbi9yZWJhc2UuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJy4iCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgJyVzJy4iCisKKyM6IHJlZnMuYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QhIgorbXNnc3RyICIlcyBub24gcHVudGEgYSB1biBvZ2dldHRvIHZhbGlkbyEiCisKKyM6IHJlZnMuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgZGFuZ2xpbmcgc3ltcmVmICVzIgorbXNnc3RyICJpZ25vcm8gaWwgcmlmZXJpbWVudG8gc2ltYm9saWNvIHBlbmRlbnRlICVzIgorCisjOiByZWZzLmM6NjY5IHJlZi1maWx0ZXIuYzoyMDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGJyb2tlbiByZWYgJXMiCittc2dzdHIgImlnbm9ybyBpbCByaWZlcmltZW50byByb3R0byAlcyIKKworIzogcmVmcy5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlICclcycgaW4gc2NyaXR0dXJhOiAlcyIKKworIzogcmVmcy5jOjgxNCByZWZzLmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGlsIHJpZmVyaW1lbnRvICclcyciCisKKyM6IHJlZnMuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgImlsIHJpZmVyaW1lbnRvICclcycgZXNpc3RlIGdpw6AiCisKKyM6IHJlZnMuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciCittc2dzdHIgIklEIG9nZ2V0dG8gaW5hdHRlc28gZHVyYW50ZSBsYSBzY3JpdHR1cmEgZGkgJyVzJyIKKworIzogcmVmcy5jOjgzMyBzZXF1ZW5jZXIuYzo0MDcgc2VxdWVuY2VyLmM6MjcwMSBzZXF1ZW5jZXIuYzoyOTA1CisjOiBzZXF1ZW5jZXIuYzoyOTE5IHNlcXVlbmNlci5jOjMxNzcgc2VxdWVuY2VyLmM6NTAzNiBzdHJidWYuYzoxMTU3CisjOiB3cmFwcGVyLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBzdSAnJXMnIgorCisjOiByZWZzLmM6ODYwIHN0cmJ1Zi5jOjExNTUgd3JhcHBlci5jOjE4OCB3cmFwcGVyLmM6MzU4IGJ1aWx0aW4vYW0uYzo3MTkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTAyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgJyVzJyBpbiBzY3JpdHR1cmEiCisKKyM6IHJlZnMuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiBkZWxldGluZyAnJXMnIgorbXNnc3RyICJJRCBvZ2dldHRvIGluYXR0ZXNvIGR1cmFudGUgbCdlbGltaW5hemlvbmUgZGkgJyVzJyIKKworIzogcmVmcy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyBoYXMgZ2FwIGFmdGVyICVzIgorbXNnc3RyICJpbCByZWdpc3RybyBwZXIgaWwgcmlmZXJpbWVudG8gJXMgaGEgZGVsbGUgdm9jaSBtYW5jYW50aSBkb3BvICVzIgorCisjOiByZWZzLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyB1bmV4cGVjdGVkbHkgZW5kZWQgb24gJXMiCittc2dzdHIgImlsIHJlZ2lzdHJvIHBlciBpbCByaWZlcmltZW50byAlcyDDqCB0ZXJtaW5hdG8gaW5hc3BldHRhdGFtZW50ZSBhICVzIgorCisjOiByZWZzLmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICVzIGlzIGVtcHR5IgorbXNnc3RyICJpbCByZWdpc3RybyBwZXIgJXMgw6ggdnVvdG8iCisKKyM6IHJlZnMuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIHVwZGF0ZSByZWYgd2l0aCBiYWQgbmFtZSAnJXMnIgorbXNnc3RyICJtaSByaWZpdXRvIGRpIGFnZ2lvcm5hcmUgaWwgcmlmZXJpbWVudG8gY29uIGlsIG5vbWUgbm9uIHZhbGlkbyAnJXMnIgorCisjOiByZWZzLmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cGRhdGVfcmVmIGZhaWxlZCBmb3IgcmVmICclcyc6ICVzIgorbXNnc3RyICJ1cGRhdGVfcmVmIHBlciBpbCByaWZlcmltZW50byAnJXMnIG5vbiByaXVzY2l0YTogJXMiCisKKyM6IHJlZnMuYzoyMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICJhZ2dpb3JuYW1lbnRpIG11bHRpcGxpIHBlciBpbCByaWZlcmltZW50byAnJXMnIG5vbiBjb25zZW50aXRpIgorCisjOiByZWZzLmM6MjA1NQorbXNnaWQgInJlZiB1cGRhdGVzIGZvcmJpZGRlbiBpbnNpZGUgcXVhcmFudGluZSBlbnZpcm9ubWVudCIKK21zZ3N0ciAiYWdnaW9ybmFtZW50aSByaWZlcmltZW50byB2aWV0YXRpIG5lbGwnYW1iaWVudGUgcXVhcmFudGVuYSIKKworIzogcmVmcy5jOjIxNTEgcmVmcy5jOjIxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiJyVzJyBlc2lzdGUgZ2nDoDsgaW1wb3NzaWJpbGUgY3JlYXJlICclcyciCisKKyM6IHJlZnMuYzoyMTU3IHJlZnMuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZ2VzdGlyZSAnJXMnIGUgJyVzJyBjb250ZW1wb3JhbmVhbWVudGUiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgImltcG9zc2liaWxlIHJpbXVvdmVyZSBpbCByaWZlcmltZW50byAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI0NyByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU0MQorIzogcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlbGltaW5hcmUgaWwgcmlmZXJpbWVudG8gJXM6ICVzIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjUwIHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGVsaW1pbmFyZSBpIHJpZmVyaW1lbnRpOiAlcyIKKworIzogcmVmc3BlYy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZnNwZWMgJyVzJyIKK21zZ3N0ciAic3BlY2lmaWNhdG9yZSByaWZlcmltZW50byAnJXMnIG5vbiB2YWxpZG8iCisKKyM6IHJlZi1maWx0ZXIuYzo0MiB3dC1zdGF0dXMuYzoxOTM4Cittc2dpZCAiZ29uZSIKK21zZ3N0ciAic3Bhcml0byIKKworIzogcmVmLWZpbHRlci5jOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkIgorbXNnc3RyICJkb3BvICVkIgorCisjOiByZWYtZmlsdGVyLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmVoaW5kICVkIgorbXNnc3RyICJwcmltYSBkaSAlZCIKKworIzogcmVmLWZpbHRlci5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWQiCittc2dzdHIgImRvcG8gJWQsIHByaW1hIGRpICVkIgorCisjOiByZWYtZmlsdGVyLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoY29sb3I6PGNvbG9yPikiCittc2dzdHIgImZvcm1hdG8gYXR0ZXNvOiAlJShjb2xvcjo8Y29sb3JlPikiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiCittc2dzdHIgImNvbG9yZSBub24gcmljb25vc2NpdXRvOiAlJShjb2xvcjolcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOmxzdHJpcD0lcyIKK21zZ3N0ciAiQXR0ZXNvIHZhbG9yZSBpbnRlcm86IHJlZm5hbWU6bHN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpyc3RyaXA9JXMiCittc2dzdHIgIkF0dGVzbyB2YWxvcmUgaW50ZXJvOiByZWZuYW1lOnJzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoJXMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJnb21lbnRvICUlKCVzKSBub24gcmljb25vc2NpdXRvOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShvYmplY3R0eXBlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUob2JqZWN0dHlwZSkgbm9uIGFjY2V0dGEgYXJnb21lbnRpIgorCisjOiByZWYtZmlsdGVyLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RzaXplKSBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ29tZW50byAlJShvYmplY3RzaXplKSBub24gcmljb25vc2NpdXRvOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShkZWx0YWJhc2UpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShkZWx0YWJhc2UpIG5vbiBhY2NldHRhIGFyZ29tZW50aSIKKworIzogcmVmLWZpbHRlci5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJShib2R5KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoYm9keSkgbm9uIGFjY2V0dGEgYXJnb21lbnRpIgorCisjOiByZWYtZmlsdGVyLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKHN1YmplY3QpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShzdWJqZWN0KSBub24gYWNjZXR0YSBhcmdvbWVudGkiCisKKyM6IHJlZi1maWx0ZXIuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAlJSh0cmFpbGVycykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmdvbWVudG8gJSUodHJhaWxlcnMpIHNjb25vc2NpdXRvOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAiYXR0ZXNvIHZhbG9yZSBwb3NpdGl2byBpbiBjb250ZW50czpsaW5lcz0lcyIKKworIzogcmVmLWZpbHRlci5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoY29udGVudHMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJnb21lbnRvICUlKGNvbnRlbnRzKSBub24gcmljb25vc2NpdXRvOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBvYmplY3RuYW1lOnNob3J0PSVzIgorbXNnc3RyICJhdHRlc28gdmFsb3JlIHBvc2l0aXZvIGluIG9iamVjdG5hbWU6c2hvcnQ9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdG5hbWUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJnb21lbnRvICUlKG9iamVjdG5hbWUpIG5vbiByaWNvbm9zY2l1dG86ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoYWxpZ246PHdpZHRoPiw8cG9zaXRpb24+KSIKK21zZ3N0ciAiZm9ybWF0byBhdHRlc286ICUlKGFsaWduOjxhbXBpZXp6YT4sPHBvc2l6aW9uZT4pIgorCisjOiByZWYtZmlsdGVyLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwb3NpdGlvbjolcyIKK21zZ3N0ciAidmFsb3JlIG5vbiByaWNvbm9zY2l1dG86IHBvc2l0aW9uOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAidmFsb3JlIG5vbiByaWNvbm9zY2l1dG86IHdpZHRoOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmdvbWVudG8gJSUoYWxpZ24pIG5vbiByaWNvbm9zY2l1dG86ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHdpZHRoIGV4cGVjdGVkIHdpdGggdGhlICUlKGFsaWduKSBhdG9tIgorbXNnc3RyICJhdHRlc2EgYW1waWV6emEgcG9zaXRpdmEgY29uIGwnYXRvbSAlJShhbGlnbikiCisKKyM6IHJlZi1maWx0ZXIuYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGlmKSBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ29tZW50byAlJShpZikgbm9uIHJpY29ub3NjaXV0bzogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIm5vbWUgY2FtcG8gbWFsZm9ybWF0bzogJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIm5vbWUgY2FtcG8gc2Nvbm9zY2l1dG86ICUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5LCBidXQgdGhlIGZpZWxkICclLipzJyByZXF1aXJlcyBhY2Nlc3MgdG8gb2JqZWN0IGRhdGEiCittc2dzdHIgIiIKKyJub24gw6ggdW4gcmVwb3NpdG9yeSBnaXQsIG1hIGlsIGNhbXBvICclLipzJyByaWNoaWVkZSBsJ2FjY2Vzc28gYWkgZGF0aSAiCisib2dnZXR0byIKKworIzogcmVmLWZpbHRlci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgImZvcm1hdG86IGF0b21vICUlKGlmKSB1c2F0byBzZW56YSB1biBhdG9tbyAlJSh0aGVuKSIKKworIzogcmVmLWZpbHRlci5jOjc3NworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICJmb3JtYXRvOiBhdG9tbyAlJSh0aGVuKSB1c2F0byBzZW56YSB1biBhdG9tbyAlJShpZikiCisKKyM6IHJlZi1maWx0ZXIuYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgImZvcm1hdG86IGF0b21vICUlKHRoZW4pIHVzYXRvIHBpw7kgZGkgdW5hIHZvbHRhIgorCisjOiByZWYtZmlsdGVyLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIGFmdGVyICUlKGVsc2UpIgorbXNnc3RyICJmb3JtYXRvOiBhdG9tbyAlJSh0aGVuKSB1c2F0byBkb3BvICUlKGVsc2UpIgorCisjOiByZWYtZmlsdGVyLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgImZvcm1hdG86IGF0b21vICUlKGVsc2UpIHVzYXRvIHNlbnphIHVuIGF0b21vICUlKGlmKSIKKworIzogcmVmLWZpbHRlci5jOjgxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0bzogYXRvbW8gJSUoZWxzZSkgdXNhdG8gc2VuemEgdW4gYXRvbW8gJSUodGhlbikiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgImZvcm1hdG86IGF0b21vICUlKGVsc2UpIHVzYXRvIHBpw7kgZGkgdW5hIHZvbHRhIgorCisjOiByZWYtZmlsdGVyLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIHVzZWQgd2l0aG91dCBjb3JyZXNwb25kaW5nIGF0b20iCittc2dzdHIgImZvcm1hdG86IGF0b21vICUlKGVuZCkgdXNhdG8gc2VuemEgbCdhdG9tbyBjb3JyaXNwb25kZW50ZSIKKworIzogcmVmLWZpbHRlci5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZm9ybWF0IHN0cmluZyAlcyIKK21zZ3N0ciAic3RyaW5nYSBkaSBmb3JtYXRvICVzIG1hbGZvcm1hdGEiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgcmViYXNpbmcgJXMiCittc2dzdHIgIm5lc3N1biBicmFuY2gsIGVzZWd1byBpbCByZWJhc2UgZGkgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgcmViYXNpbmcgZGV0YWNoZWQgSEVBRCAlcyIKK21zZ3N0ciAibmVzc3VuIGJyYW5jaCwgZXNlZ3VvIGlsIHJlYmFzZSBkZWxsJ0hFQUQgc2NvbGxlZ2F0byAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcyIKK21zZ3N0ciAibmVzc3VuIGJyYW5jaCwgYmlzZXppb25lIGF2dmlhdGEgc3UgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTA0Cittc2dpZCAibm8gYnJhbmNoIgorbXNnc3RyICJuZXNzdW4gYnJhbmNoIgorCisjOiByZWYtZmlsdGVyLmM6MTU0MCByZWYtZmlsdGVyLmM6MTc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiCittc2dzdHIgIm9nZ2V0dG8gJXMgbWFuY2FudGUgcGVyICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXJzZV9vYmplY3RfYnVmZmVyIGZhaWxlZCBvbiAlcyBmb3IgJXMiCittc2dzdHIgInBhcnNlX29iamVjdF9idWZmZXIgbm9uIHJpdXNjaXRvIHN1ICVzIHBlciAlcyIKKworIzogcmVmLWZpbHRlci5jOjIwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICJvZ2dldHRvIG1hbGZvcm1hdG8gaW4gJyVzJyIKKworIzogcmVmLWZpbHRlci5jOjIwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgJXMiCittc2dzdHIgImlnbm9ybyBpbCByaWZlcmltZW50byBjb24gaWwgbm9tZSBtYWxmb3JtYXRvICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSBtaXNzaW5nIgorbXNnc3RyICJmb3JtYXRvOiBhdG9tbyAlJShlbmQpIG1hbmNhbnRlIgorCisjOiByZWYtZmlsdGVyLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW1lcmdlZCIKK21zZ3N0ciAibCdvcHppb25lIGAlcycgbm9uIMOoIGNvbXBhdGliaWxlIGNvbiAtLW1lcmdlZCIKKworIzogcmVmLWZpbHRlci5jOjI0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1tZXJnZWQiCittc2dzdHIgImwnb3B6aW9uZSBgJXMnIG5vbiDDqCBjb21wYXRpYmlsZSBjb24gLS1uby1tZXJnZWQiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAibm9tZSBkZWxsJ29nZ2V0dG8gJXMgbWFsZm9ybWF0byIKKworIzogcmVmLWZpbHRlci5jOjI1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgbXVzdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAibCdvcHppb25lIGAlcycgZGV2ZSBwdW50YXJlIGFkIHVuIGNvbW1pdCIKKworIzogcmVtb3RlLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZpZyByZW1vdGUgc2hvcnRoYW5kIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgIiIKKyJsYSBmb3JtYSBicmV2ZSBkZWxsYSBjb25maWd1cmF6aW9uZSBkZWwgcmVtb3RvIG5vbiBwdcOyIGluaXppYXJlIGNvbiAnLyc6ICVzIgorCisjOiByZW1vdGUuYzo0MTQKK21zZ2lkICJtb3JlIHRoYW4gb25lIHJlY2VpdmVwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgIsOoIHN0YXRhIHNwZWNpZmljYXRhIHBpw7kgZGkgdW5hIGRpcmV0dGl2YSByZWNlaXZlcGFjaywgdXNvIGxhIHByaW1hIgorCisjOiByZW1vdGUuYzo0MjIKK21zZ2lkICJtb3JlIHRoYW4gb25lIHVwbG9hZHBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAiw6ggc3RhdGEgc3BlY2lmaWNhdGEgcGnDuSBkaSB1bmEgZGlyZXR0aXZhIHVwbG9hZHBhY2ssIHVzbyBsYSBwcmltYSIKKworIzogcmVtb3RlLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBzaWEgJXMgc2lhICVzIGluICVzIgorCisjOiByZW1vdGUuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMgc29saXRhbWVudGUgdHJhY2NpYSAlcywgbm9uICVzIgorCisjOiByZW1vdGUuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlcyB0cmFjY2lhIHNpYSAlcyBzaWEgJXMiCisKKyM6IHJlbW90ZS5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgJyVzJyBvZiBwYXR0ZXJuIGhhZCBubyAnKiciCittc2dzdHIgImxhIGNoaWF2ZSAnJXMnIGRlbCBwYXR0ZXJuIG5vbiBhdmV2YSB1biAnKiciCisKKyM6IHJlbW90ZS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIKK21zZ3N0ciAiaWwgdmFsb3JlICclcycgZGVsIHBhdHRlcm4gbm9uIGhhIHVuICcqJyIKKworIzogcmVtb3RlLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkiCittc2dzdHIgIm5lc3N1bmEgY29ycmlzcG9uZGVuemEgcGVyIGxvIHNwZWNpZmljYXRvcmUgcmlmZXJpbWVudG8gc29yZ2VudGUgJXMiCisKKyM6IHJlbW90ZS5jOjEwMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICIiCisic29ubyBzdGF0ZSB0cm92YXRlIHBpw7kgY29ycmlzcG9uZGVuemUgcGVyIGxvIHNwZWNpZmljYXRvcmUgcmlmZXJpbWVudG8gIgorInNvcmdlbnRlICVzIgorCisjLiBUUkFOU0xBVE9SUzogIm1hdGNoZXMgJyVzJyUiIGlzIHRoZSA8ZHN0PiBwYXJ0IG9mICJnaXQgcHVzaAorIy4gPHJlbW90ZT4gPHNyYz46PGRzdD4iIHB1c2gsIGFuZCAiYmVpbmcgcHVzaGVkICgnJXMnKSIgaXMKKyMuIHRoZSA8c3JjPi4KKyMuCisjOiByZW1vdGUuYzoxMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGVzdGluYXRpb24geW91IHByb3ZpZGVkIGlzIG5vdCBhIGZ1bGwgcmVmbmFtZSAoaS5lLixcbiIKKyJzdGFydGluZyB3aXRoIFwicmVmcy9cIikuIFdlIHRyaWVkIHRvIGd1ZXNzIHdoYXQgeW91IG1lYW50IGJ5OlxuIgorIlxuIgorIi0gTG9va2luZyBmb3IgYSByZWYgdGhhdCBtYXRjaGVzICclcycgb24gdGhlIHJlbW90ZSBzaWRlLlxuIgorIi0gQ2hlY2tpbmcgaWYgdGhlIDxzcmM+IGJlaW5nIHB1c2hlZCAoJyVzJylcbiIKKyIgIGlzIGEgcmVmIGluIFwicmVmcy97aGVhZHMsdGFnc30vXCIuIElmIHNvIHdlIGFkZCBhIGNvcnJlc3BvbmRpbmdcbiIKKyIgIHJlZnMve2hlYWRzLHRhZ3N9LyBwcmVmaXggb24gdGhlIHJlbW90ZSBzaWRlLlxuIgorIlxuIgorIk5laXRoZXIgd29ya2VkLCBzbyB3ZSBnYXZlIHVwLiBZb3UgbXVzdCBmdWxseSBxdWFsaWZ5IHRoZSByZWYuIgorbXNnc3RyICIiCisiTGEgZGVzdGluYXppb25lIGNoZSBoYWkgZm9ybml0byBub24gw6ggdW4gbm9tZSByaWZlcmltZW50b1xuIgorImNvbXBsZXRvIChvc3NpYSBjaGUgaW5pemlhIGNvbiBcInJlZnMvXCIpLiBBYmJpYW1vIHByb3ZhdG8gYVxuIgorImluZG92aW5hcmUgY2nDsiBjaGUgaW50ZW5kZXZpIGRpcmU6XG4iCisiXG4iCisiLSBjZXJjYW5kbyB1biByaWZlcmltZW50byBjb3JyaXNwb25kZW50ZSBhICclcycgbmVsIHJlbW90bztcbiIKKyItIGNvbnRyb2xsYW5kbyBzZSBsYSA8c29yZ2VudGU+IHNvdHRvcG9zdGEgYSBwdXNoICgnJXMnKSBmb3NzZSB1blxuIgorIiAgcmlmZXJpbWVudG8gY29tcHJlc28gZnJhIHF1ZWxsaSBpbiBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBJbiB0YWxcbiIKKyIgIGNhc28gYXZyZW1tbyBhZ2dpdW50byBpbCBwcmVmaXNzbyBjb3JyaXNwb25kZW50ZVxuIgorIiAgcmVmcy97aGVhZHMsdGFnc30vIGFsIHJlbW90by5cbiIKKyJcbiIKKyJOZXNzdW5hIGRlbGxlIGR1ZSBvcHppb25pIGhhIGZ1bnppb25hdG8sIHF1aW5kaSBjaSBzaWFtbyBhcnJlc2kuXG4iCisiRGV2aSBzcGVjaWZpY2FyZSB1biByaWZlcmltZW50byBjb21wbGV0YW1lbnRlIHF1YWxpZmljYXRvLiIKKworIzogcmVtb3RlLmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBjb21taXQgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy9oZWFkcy8lcyc/IgorbXNnc3RyICIiCisiTGEgcGFydGUgPHNvcmdlbnRlPiBkZWxsbyBzcGVjaWZpY2F0b3JlIHJpZmVyaW1lbnRvXG4iCisiw6ggdW4gb2dnZXR0byB0YWcuIEZvcnNlIGludGVuZGV2aSBjcmVhcmUgdW4gbnVvdm9cbiIKKyJicmFuY2ggZXNlZ3VlbmRvIGlsIHB1c2ggYSAnJXM6cmVmcy9oZWFkcy8lcyc/IgorCisjOiByZW1vdGUuYzoxMDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRhZyBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyB0YWcgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIkxhIHBhcnRlIDxzb3JnZW50ZT4gZGVsbG8gc3BlY2lmaWNhdG9yZSByaWZlcmltZW50b1xuIgorIsOoIHVuIG9nZ2V0dG8gdGFnLiBGb3JzZSBpbnRlbmRldmkgY3JlYXJlIHVuIG51b3ZvXG4iCisiYnJhbmNoIGVzZWd1ZW5kbyBpbCBwdXNoIGEgJyVzOnJlZnMvdGFncy8lcyc/IgorCisjOiByZW1vdGUuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRyZWUgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgdHJlZSBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisiTGEgcGFydGUgPHNvcmdlbnRlPiBkZWxsbyBzcGVjaWZpY2F0b3JlIHJpZmVyaW1lbnRvXG4iCisiw6ggdW4gb2dnZXR0byBhbGJlcm8uIEZvcnNlIGludGVuZGV2aSBhZ2dpdW5nZXJlIHVuXG4iCisidGFnIGEgdW4gbnVvdm8gYWxiZXJvIGVzZWd1ZW5kbyBpbCBwdXNoIGFcbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCisKKyM6IHJlbW90ZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgYmxvYiBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyBibG9iIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyJMYSBwYXJ0ZSA8c29yZ2VudGU+IGRlbGxvIHNwZWNpZmljYXRvcmUgcmlmZXJpbWVudG9cbiIKKyLDqCB1biBvZ2dldHRvIGJsb2IuIEZvcnNlIGludGVuZGV2aSBhZ2dpdW5nZXJlIHVuXG4iCisidGFnIGEgdW4gbnVvdm8gYmxvYiBlc2VndWVuZG8gaWwgcHVzaCBhXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorCisjOiByZW1vdGUuYzoxMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNhbm5vdCBiZSByZXNvbHZlZCB0byBicmFuY2giCittc2dzdHIgIiVzIG5vbiBwdcOyIGVzc2VyZSByaXNvbHRvIGluIHVuIGJyYW5jaCIKKworIzogcmVtb3RlLmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVsZXRlICclcyc6IHJlbW90ZSByZWYgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImltcG9zc2liaWxlIGVsaW1pbmFyZSAnJXMnOiBpbCByaWZlcmltZW50byByZW1vdG8gbm9uIGVzaXN0ZSIKKworIzogcmVtb3RlLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgIiIKKyJzb25vIHN0YXRlIHRyb3ZhdGUgcGnDuSBjb3JyaXNwb25kZW56ZSBwZXIgbG8gc3BlY2lmaWNhdG9yZSByaWZlcmltZW50byAiCisiZGVzdGluYXppb25lICVzIgorCisjOiByZW1vdGUuYzoxMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWYgJXMgcmVjZWl2ZXMgZnJvbSBtb3JlIHRoYW4gb25lIHNyYyIKK21zZ3N0ciAiIgorImxvIHNwZWNpZmljYXRvcmUgcmlmZXJpbWVudG8gZGVzdGluYXppb25lICVzIHJpY2V2ZSBkYXRpIGRhIHBpw7kgZGkgdW5hICIKKyJzb3JnZW50ZSIKKworIzogcmVtb3RlLmM6MTYyOCByZW1vdGUuYzoxNzI5Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBRCBub24gcHVudGEgYWQgdW4gYnJhbmNoIgorCisjOiByZW1vdGUuYzoxNjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorbXNnc3RyICJicmFuY2ggJyVzJyBub24gZXNpc3RlbnRlIgorCisjOiByZW1vdGUuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICJuZXNzdW4gdXBzdHJlYW0gY29uZmlndXJhdG8gcGVyIGlsIGJyYW5jaCAnJXMnIgorCisjOiByZW1vdGUuYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisiYnJhbmNoIHVwc3RyZWFtICclcycgbm9uIG1lbW9yaXp6YXRvIGNvbWUgYnJhbmNoIGNoZSBuZSB0cmFjY2lhIHVubyByZW1vdG8iCisKKyM6IHJlbW90ZS5jOjE2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJsYSBkZXN0aW5hemlvbmUgZGVsIHB1c2ggJyVzJyBzdWwgcmVtb3RvICclcycgbm9uIGhhIHVuIGJyYW5jaCBsb2NhbGUgY2hlIGxhICIKKyJ0cmFjY2lhIgorCisjOiByZW1vdGUuYzoxNjczCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciCittc2dzdHIgImlsIGJyYW5jaCAnJXMnIG5vbiBoYSB1biByZW1vdG8gcGVyIGlsIHB1c2giCisKKyM6IHJlbW90ZS5jOjE2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICJnbGkgc3BlY2lmaWNhdG9yaSByaWZlcmltZW50byBwZXIgJyVzJyBub24gaW5jbHVkb25vICclcyciCisKKyM6IHJlbW90ZS5jOjE2OTYKK21zZ2lkICJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiCittc2dzdHIgImlsIHB1c2ggbm9uIGhhIHVuYSBkZXN0aW5hemlvbmUgKHB1c2guZGVmYXVsdCDDqCAnbm90aGluZycpIgorCisjOiByZW1vdGUuYzoxNzE4Cittc2dpZCAiY2Fubm90IHJlc29sdmUgJ3NpbXBsZScgcHVzaCB0byBhIHNpbmdsZSBkZXN0aW5hdGlvbiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmlzb2x2ZXJlIGlsIHB1c2ggJ3NpbXBsZScgYSB1bmEgc2luZ29sYSBkZXN0aW5hemlvbmUiCisKKyM6IHJlbW90ZS5jOjE4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZmluZCByZW1vdGUgcmVmICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSB0cm92YXJlIGlsIHJpZmVyaW1lbnRvIHJlbW90byAlcyIKKworIzogcmVtb3RlLmM6MTg1NworIywgYy1mb3JtYXQKK21zZ2lkICIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiCittc2dzdHIgIiogSWdub3JvIGxvY2FsbWVudGUgaWwgcmlmZXJpbWVudG8gc3RyYW5vICclcyciCisKKyM6IHJlbW90ZS5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICJJbCB0dW8gYnJhbmNoIMOoIGJhc2F0byBzdSAnJXMnLCBtYSBsJ3Vwc3RyZWFtIMOoIHNjb21wYXJzby5cbiIKKworIzogcmVtb3RlLmM6MjAyNAorbXNnaWQgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIgorbXNnc3RyICIgICh1c2EgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiBwZXIgY29ycmVnZ2VyZSBsYSBzaXR1YXppb25lKVxuIgorCisjOiByZW1vdGUuYzoyMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIHVwIHRvIGRhdGUgd2l0aCAnJXMnLlxuIgorbXNnc3RyICJJbCB0dW8gYnJhbmNoIMOoIGFnZ2lvcm5hdG8gcmlzcGV0dG8gYSAnJXMnLlxuIgorCisjOiByZW1vdGUuYzoyMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGFuZCAnJXMnIHJlZmVyIHRvIGRpZmZlcmVudCBjb21taXRzLlxuIgorbXNnc3RyICJJbCB0dW8gYnJhbmNoIGUgJyVzJyBmYW5ubyByaWZlcmltZW50byBhIGNvbW1pdCBkaWZmZXJlbnRpLlxuIgorCisjOiByZW1vdGUuYzoyMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcIiVzXCIgZm9yIGRldGFpbHMpXG4iCittc2dzdHIgIiAgKHVzYSBcIiVzXCIgcGVyIHZpc3VhbGl6emFyZSBpIGRldHRhZ2xpKVxuIgorCisjOiByZW1vdGUuYzoyMDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIklsIHR1byBicmFuY2ggw6ggYXZhbnRpIHJpc3BldHRvIGEgJyVzJyBkaSAlZCBjb21taXQuXG4iCittc2dzdHJbMV0gIklsIHR1byBicmFuY2ggw6ggYXZhbnRpIHJpc3BldHRvIGEgJyVzJyBkaSAlZCBjb21taXQuXG4iCisKKyM6IHJlbW90ZS5jOjIwNDQKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIgorbXNnc3RyICIgICh1c2EgXCJnaXQgcHVzaFwiIHBlciBwdWJibGljYXJlIGkgdHVvaSBjb21taXQgbG9jYWxpKVxuIgorCisjOiByZW1vdGUuYzoyMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKKyJJbCB0dW8gYnJhbmNoLCByaXNwZXR0byBhICclcycsIMOoIGluZGlldHJvIGRpICVkIGNvbW1pdCBlIG5lIHBvc3NvIGVzZWd1aXJlICIKKyJpbCBmYXN0IGZvcndhcmQuXG4iCittc2dzdHJbMV0gIiIKKyJJbCB0dW8gYnJhbmNoLCByaXNwZXR0byBhICclcycsIMOoIGluZGlldHJvIGRpICVkIGNvbW1pdCBlIG5lIHBvc3NvIGVzZWd1aXJlICIKKyJpbCBmYXN0IGZvcndhcmQuXG4iCisKKyM6IHJlbW90ZS5jOjIwNTUKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IHB1bGxcIiBwZXIgYWdnaW9ybmFyZSBpbCB0dW8gYnJhbmNoIGxvY2FsZSlcbiIKKworIzogcmVtb3RlLmM6MjA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKKyJJbCB0dW8gYnJhbmNoIGUgJyVzJyBzb25vIGRpdmVudGF0aSBkaXZlcmdlbnRpXG4iCisiZSBoYW5ubyByaXNwZXR0aXZhbWVudGUgJWQgZSAlZCBjb21taXQgZGlmZmVyZW50aS5cbiIKK21zZ3N0clsxXSAiIgorIklsIHR1byBicmFuY2ggZSAnJXMnIHNvbm8gZGl2ZW50YXRpIGRpdmVyZ2VudGlcbiIKKyJlIGhhbm5vIHJpc3BldHRpdmFtZW50ZSAlZCBlICVkIGNvbW1pdCBkaWZmZXJlbnRpLlxuIgorCisjOiByZW1vdGUuYzoyMDY4Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIgICh1c2EgXCJnaXQgcHVsbFwiIHBlciBlc2VndWlyZSBpbCBtZXJnZSBkZWwgYnJhbmNoIHJlbW90byBuZWwgdHVvKVxuIgorCisjOiByZW1vdGUuYzoyMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBleHBlY3RlZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIG5vbWUgb2dnZXR0byBhdHRlc28gJyVzJyIKKworIzogcmVwbGFjZS1vYmplY3QuYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiCittc2dzdHIgIm5vbWUgcmlmZXJpbWVudG8gc29zdGl0dXRpdm8gbm9uIHZhbGlkbzogJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAicmlmZXJpbWVudG8gc29zdGl0dXRpdm8gZHVwbGljYXRvOiAlcyIKKworIzogcmVwbGFjZS1vYmplY3QuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIGRlcHRoIHRvbyBoaWdoIGZvciBvYmplY3QgJXMiCittc2dzdHIgInByb2ZvbmRpdMOgIHNvc3RpdHV6aW9uZSB0cm9wcG8gZWxldmF0YSBwZXIgbCdvZ2dldHRvICVzIgorCisjOiByZXJlcmUuYzoyMTcgcmVyZXJlLmM6MjI2IHJlcmVyZS5jOjIyOQorbXNnaWQgImNvcnJ1cHQgTUVSR0VfUlIiCittc2dzdHIgIk1FUkdFX1JSIGNvcnJvdHRhIgorCisjOiByZXJlcmUuYzoyNjQgcmVyZXJlLmM6MjY5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcmVyZSByZWNvcmQiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIHJlY29yZCByZXJlcmUiCisKKyM6IHJlcmVyZS5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICclcycgKCVzKSIKK21zZ3N0ciAic2kgc29ubyB2ZXJpZmljYXRpIGVycm9yaSBkdXJhbnRlIGxhIHNjcml0dHVyYSBkaSAnJXMnICglcykiCisKKyM6IHJlcmVyZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmx1c2ggJyVzJyIKK21zZ3N0ciAiZmx1c2ggZGkgJyVzJyBub24gcml1c2NpdG8iCisKKyM6IHJlcmVyZS5jOjUwMyByZXJlcmUuYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb25mbGljdCBodW5rcyBpbiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGdsaSBodW5rIGNvbmZsaXR0byBpbiAnJXMnIgorCisjOiByZXJlcmUuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJyVzJyIKK21zZ3N0ciAidXRpbWUoKSBkaSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogcmVyZXJlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgInNjcml0dHVyYSBkaSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogcmVyZXJlLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICInJXMnIGFnZ2l1bnRvIGFsbCdhcmVhIGRpIHN0YWdpbmcgdXNhbmRvIGxhIHJpc29sdXppb25lIHByZWNlZGVudGUuIgorCisjOiByZXJlcmUuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcmVzb2x1dGlvbiBmb3IgJyVzJy4iCittc2dzdHIgIlJpc29sdXppb25lIHBlciAnJXMnIHJlZ2lzdHJhdGEuIgorCisjOiByZXJlcmUuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzb2x2ZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAiUmlzb2x0byBjb25mbGl0dG8gaW4gJyVzJyB1c2FuZG8gbGEgcmlzb2x1emlvbmUgcHJlY2VkZW50ZS4iCisKKyM6IHJlcmVyZS5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rIHN0cmF5ICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGwndW5saW5rIGRlbGwnb2dnZXR0byBzbWFycml0byAnJXMnIgorCisjOiByZXJlcmUuYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIlNhbHZhdGEgcHJlaW1tYWdpbmUgZGkgJyVzJyIKKworIzogcmVyZXJlLmM6ODgxIHN1Ym1vZHVsZS5jOjIwNzggYnVpbHRpbi9sb2cuYzoxODcxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ1NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgbGEgZGlyZWN0b3J5ICclcyciCisKKyM6IHJlcmVyZS5jOjEwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBjb25mbGljdGVkIHN0YXRlIGluICclcyciCittc2dzdHIgImFnZ2lvcm5hbWVudG8gZGVsbG8gc3RhdG8gY29uZmxpdHRvIHBlciAnJXMnIG5vbiByaXVzY2l0byIKKworIzogcmVyZXJlLmM6MTA2OCByZXJlcmUuYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlbWVtYmVyZWQgcmVzb2x1dGlvbiBmb3IgJyVzJyIKK21zZ3N0ciAibmVzc3VuYSByaXNvbHV6aW9uZSBwcmVzZW50ZSBpbiBtZW1vcmlhIHBlciAnJXMnIgorCisjOiByZXJlcmUuYzoxMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbCd1bmxpbmsgZGkgJyVzJyIKKworIzogcmVyZXJlLmM6MTA4NworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICJQcmVpbW1hZ2luZSBkaSAnJXMnIGFnZ2lvcm5hdGEiCisKKyM6IHJlcmVyZS5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9yZ290IHJlc29sdXRpb24gZm9yICclcydcbiIKK21zZ3N0ciAiUmlzb2x1emlvbmUgcGVyICclcycgZGltZW50aWNhdGFcbiIKKworIzogcmVyZXJlLmM6MTE5OQorbXNnaWQgInVuYWJsZSB0byBvcGVuIHJyLWNhY2hlIGRpcmVjdG9yeSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGxhIGRpcmVjdG9yeSBjYWNoZSByciIKKworIzogcmV2aXNpb24uYzoyNDk3Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAic2VtYnJhIGNoZSBpbCB0dW8gYnJhbmNoIGNvcnJlbnRlIHNpYSByb3R0byIKKworIzogcmV2aXNpb24uYzoyNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIKK21zZ3N0ciAiaWwgdHVvIGJyYW5jaCBjb3JyZW50ZSAnJXMnIG5vbiBoYSBhbmNvcmEgY29tbWl0IgorCisjOiByZXZpc2lvbi5jOjI3MDgKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAiLS1maXJzdC1wYXJlbnQgbm9uIMOoIGNvbXBhdGliaWxlIGNvbiAtLWJpc2VjdCIKKworIzogcmV2aXNpb24uYzoyNzEyCittc2dpZCAiLUwgZG9lcyBub3QgeWV0IHN1cHBvcnQgZGlmZiBmb3JtYXRzIGJlc2lkZXMgLXAgYW5kIC1zIgorbXNnc3RyICItTCBub24gc3VwcG9ydGEgYW5jb3JhIGZvcm1hdGkgZGlmZiBvbHRyZSBhIC1wIGUgLXMiCisKKyM6IHJ1bi1jb21tYW5kLmM6NzYzCittc2dpZCAib3BlbiAvZGV2L251bGwgZmFpbGVkIgorbXNnc3RyICJhcGVydHVyYSBkaSAvZGV2L251bGwgbm9uIHJpdXNjaXRhIgorCisjOiBydW4tY29tbWFuZC5jOjEyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBhc3luYyB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgaWwgdGhyZWFkIGFzeW5jOiAlcyIKKworIzogcnVuLWNvbW1hbmQuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJyVzJyBob29rIHdhcyBpZ25vcmVkIGJlY2F1c2UgaXQncyBub3Qgc2V0IGFzIGV4ZWN1dGFibGUuXG4iCisiWW91IGNhbiBkaXNhYmxlIHRoaXMgd2FybmluZyB3aXRoIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAuIgorbXNnc3RyICIiCisiTCdob29rICclcycgw6ggc3RhdG8gaWdub3JhdG8gcGVyY2jDqSBub24gw6ggaW1wb3N0YXRvIGNvbWUgZXNlZ3VpYmlsZS5cbiIKKyJQdW9pIGRpc2FiaWxpdGFyZSBxdWVzdCdhdnZpc28gY29uIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAuIgorCisjOiBzZW5kLXBhY2suYzoxNDQKK21zZ2lkICJ1bmV4cGVjdGVkIGZsdXNoIHBhY2tldCB3aGlsZSByZWFkaW5nIHJlbW90ZSB1bnBhY2sgc3RhdHVzIgorbXNnc3RyICIiCisicGFjY2hldHRvIGZsdXNoIGluYXR0ZXNvIGR1cmFudGUgbGEgbGV0dHVyYSBkZWxsbyBzdGF0byBkZWNvbXByZXNzaW9uZSBkZWwgIgorInJlbW90byIKKworIzogc2VuZC1wYWNrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSByZW1vdGUgdW5wYWNrIHN0YXR1czogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgbG8gc3RhdG8gZGVjb21wcmVzc2lvbmUgZGVsIHJlbW90bzogJXMiCisKKyM6IHNlbmQtcGFjay5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgdW5wYWNrIGZhaWxlZDogJXMiCittc2dzdHIgImRlY29tcHJlc3Npb25lIHN1bCByZW1vdG8gbm9uIHJpdXNjaXRhOiAlcyIKKworIzogc2VuZC1wYWNrLmM6MzA5Cittc2dpZCAiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiCittc2dzdHIgImZpcm1hIGRlbCBjZXJ0aWZpY2F0byBwZXIgaWwgcHVzaCBub24gcml1c2NpdGEiCisKKyM6IHNlbmQtcGFjay5jOjQyMworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAiaWwgcmljZXZlbnRlIG5vbiBzdXBwb3J0YSBpIHB1c2ggLS1zaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQyNQorbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLSIKKyJzaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorIm5vbiBpbnZpbyB1biBjZXJ0aWZpY2F0byBwdXNoIHBlcmNow6kgaWwgcmljZXZlbnRlIG5vbiBzdXBwb3J0YSBpIHB1c2ggLS0iCisic2lnbmVkIgorCisjOiBzZW5kLXBhY2suYzo0MzcKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giCittc2dzdHIgImlsIHJpY2V2ZW50ZSBub24gc3VwcG9ydGEgaSBwdXNoIC0tYXRvbWljIgorCisjOiBzZW5kLXBhY2suYzo0NDIKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IHB1c2ggb3B0aW9ucyIKK21zZ3N0ciAiaWwgcmljZXZlbnRlIG5vbiBzdXBwb3J0YSBsZSBvcHppb25pIHB1c2giCisKKyM6IHNlcXVlbmNlci5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSAnJXMnIgorbXNnc3RyICJtb2RhbGl0w6AgcHVsaXppYSBtZXNzYWdnaW8gY29tbWl0IG5vbiB2YWxpZGE6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGVsaW1pbmFyZSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozMTUgYnVpbHRpbi9yZWJhc2UuYzo3ODUgYnVpbHRpbi9yZWJhc2UuYzoxNzUwIGJ1aWx0aW4vcm0uYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaW11b3ZlcmUgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzI1Cittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICJyZXZlcnQiCisKKyM6IHNlcXVlbmNlci5jOjMyNworbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICJjaGVycnktcGljayIKKworIzogc2VxdWVuY2VyLmM6MzI5Cittc2dpZCAicmViYXNlIgorbXNnc3RyICJyZWJhc2UiCisKKyM6IHNlcXVlbmNlci5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGFjdGlvbjogJWQiCittc2dzdHIgImF6aW9uZSBzY29ub3NjaXV0YTogJWQiCisKKyM6IHNlcXVlbmNlci5jOjM4OQorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisiZG9wbyBhdmVyIHJpc29sdG8gaSBjb25mbGl0dGksIGNvbnRyYXNzZWduYSBpIHBlcmNvcnNpIGNvcnJldHRpXG4iCisiY29uICdnaXQgYWRkIDxwYXRoPicgbyAnZ2l0IHJtIDxwYXRoPiciCisKKyM6IHNlcXVlbmNlci5jOjM5MgorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisiZG9wbyBhdmVyIHJpc29sdG8gaSBjb25mbGl0dGksIGNvbnRyYXNzZWduYSBpIHBlcmNvcnNpIGNvcnJldHRpXG4iCisiY29uICdnaXQgYWRkIDxwYXRoPicgbyAnZ2l0IHJtIDxwYXRoPicgZWQgZXNlZ3VpXG4iCisiaWwgY29tbWl0IGRlbCByaXN1bHRhdG8gY29uICdnaXQgY29tbWl0JyIKKworIzogc2VxdWVuY2VyLmM6NDA1IHNlcXVlbmNlci5jOjI5MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYmxvY2NhcmUgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBlb2wgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgY2FyYXR0ZXJlIGRpIGZpbmUgcmlnYSBpbiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTcgc2VxdWVuY2VyLmM6MjcwNiBzZXF1ZW5jZXIuYzoyOTA3IHNlcXVlbmNlci5jOjI5MjEKKyM6IHNlcXVlbmNlci5jOjMxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcyciCittc2dzdHIgImZpbmFsaXp6YXppb25lIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBzZXF1ZW5jZXIuYzo0NDAgc2VxdWVuY2VyLmM6MTYxMyBzZXF1ZW5jZXIuYzoyNzI2IHNlcXVlbmNlci5jOjMxNjcKKyM6IHNlcXVlbmNlci5jOjMyNzYgYnVpbHRpbi9hbS5jOjI0OSBidWlsdGluL2NvbW1pdC5jOjc4NyBidWlsdGluL21lcmdlLmM6MTEyMAorIzogYnVpbHRpbi9yZWJhc2UuYzo1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzLiIKK21zZ3N0ciAibGUgdHVlIG1vZGlmaWNoZSBsb2NhbGkgc2FyZWJiZXJvIHNvdnJhc2NyaXR0ZSBkYSAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjQ3MAorbXNnaWQgImNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAiZXNlZ3VpIGlsIGNvbW1pdCBkZWxsZSBtb2RpZmljaGUgbyBsbyBzdGFzaCBwZXIgcHJvY2VkZXJlLiIKKworIzogc2VxdWVuY2VyLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiVzOiBmYXN0IGZvcndhcmQiCisKKyM6IHNlcXVlbmNlci5jOjU0MSBidWlsdGluL3RhZy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiTW9kYWxpdMOgIHB1bGl6aWEgbm9uIHZhbGlkYTogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiLCAiY2hlcnJ5LXBpY2siIG9yCisjLiAicmViYXNlIi4KKyMuCisjOiBzZXF1ZW5jZXIuYzo2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IGltcG9zc2liaWxlIHNjcml2ZXJlIGlsIG51b3ZvIGZpbGUgaW5kaWNlIgorCisjOiBzZXF1ZW5jZXIuYzo2NTIKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWUiCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2lvcm5hcmUgbCdhbGJlcm8gY2FjaGUiCisKKyM6IHNlcXVlbmNlci5jOjY2NgorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmlsZSByaXNvbHZlcmUgaWwgY29tbWl0IEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBrZXkgcHJlc2VudCBpbiAnJS4qcyciCittc2dzdHIgIm5lc3N1bmEgY2hpYXZlIHByZXNlbnRlIGluICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZXF1b3RlIHZhbHVlIG9mICclcyciCittc2dzdHIgImltcG9zc2liaWxlIHJpbXVvdmVyZSBnbGkgYXBpY2kgZGFsIHZhbG9yZSBkaSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo3OTQgd3JhcHBlci5jOjE5MCB3cmFwcGVyLmM6MzYwIGJ1aWx0aW4vYW0uYzo3MTAKKyM6IGJ1aWx0aW4vYW0uYzo4MDIgYnVpbHRpbi9tZXJnZS5jOjExMTcgYnVpbHRpbi9yZWJhc2UuYzoxMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSAnJXMnIGluIGxldHR1cmEiCisKKyM6IHNlcXVlbmNlci5jOjgwNAorbXNnaWQgIidHSVRfQVVUSE9SX05BTUUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIidHSVRfQVVUSE9SX05BTUUnIGdpw6Agc3BlY2lmaWNhdG8iCisKKyM6IHNlcXVlbmNlci5jOjgwOQorbXNnaWQgIidHSVRfQVVUSE9SX0VNQUlMJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICInR0lUX0FVVEhPUl9FTUFJTCcgZ2nDoCBzcGVjaWZpY2F0byIKKworIzogc2VxdWVuY2VyLmM6ODE0Cittc2dpZCAiJ0dJVF9BVVRIT1JfREFURScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfREFURScgZ2nDoCBzcGVjaWZpY2F0byIKKworIzogc2VxdWVuY2VyLmM6ODE4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFyaWFibGUgJyVzJyIKK21zZ3N0ciAidmFyaWFiaWxlICclcycgc2Nvbm9zY2l1dGEiCisKKyM6IHNlcXVlbmNlci5jOjgyMworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfTkFNRSciCittc2dzdHIgIidHSVRfQVVUSE9SX05BTUUnIG1hbmNhbnRlIgorCisjOiBzZXF1ZW5jZXIuYzo4MjUKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX0VNQUlMJyIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfRU1BSUwnIG1hbmNhbnRlIgorCisjOiBzZXF1ZW5jZXIuYzo4MjcKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX0RBVEUnIgorbXNnc3RyICInR0lUX0FVVEhPUl9EQVRFJyBtYW5jYW50ZSIKKworIzogc2VxdWVuY2VyLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZVxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlIHNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJoYWkgbW9kaWZpY2hlIGluIHN0YWdpbmcgbmVsbCdhbGJlcm8gZGkgbGF2b3JvXG4iCisiU2UgcXVlc3RlIG1vZGlmaWNoZSBkZXZvbm8gZXNzZXJlIHNvdHRvcG9zdGUgYSBzcXVhc2ggbmVsIGNvbW1pdFxuIgorInByZWNlZGVudGUsIGVzZWd1aTpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIlNlIGRldm9ubyBlc3NlcmUgaW5jbHVzZSBpbiB1biBudW92byBjb21taXQsIGVzZWd1aTpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBlbnRyYW1iaSBpIGNhc2ksIHVuYSB2b2x0YSBmaW5pdG8sIGNvbnRpbnVhIGNvbjpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMTQ4Cittc2dpZCAiJ3ByZXBhcmUtY29tbWl0LW1zZycgaG9vayBmYWlsZWQiCittc2dzdHIgImhvb2sgJ3ByZXBhcmUtY29tbWl0LW1zZycgbm9uIHJpdXNjaXRvIgorCisjOiBzZXF1ZW5jZXIuYzoxMTU0Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseS4gUnVuIHRoZVxuIgorImZvbGxvd2luZyBjb21tYW5kIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIGVkaXRvciB0byBlZGl0XG4iCisieW91ciBjb25maWd1cmF0aW9uIGZpbGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiSWwgdHVvIG5vbWUgZSBsJ2luZGlyaXp6byBlLW1haWwgc29ubyBzdGF0aSBjb25maWd1cmF0aSBhdXRvbWF0aWNhbWVudGUgIgorInVzYW5kb1xuIgorImlsIHR1byBub21lIHV0ZW50ZSBlZCBpbCBub21lIGhvc3QuIFBlciBmYXZvcmUsIHZlcmlmaWNhIGNoZSBzaWFubyBlc2F0dGkuXG4iCisiw4ggcG9zc2liaWxlIGVsaW1pbmFyZSBxdWVzdG8gbWVzc2FnZ2lvIGltcG9zdGFuZG9saSBlc3BsaWNpdGFtZW50ZS5cbiIKKyJFc2VndWkgaWwgc2VndWVudGUgY29tYW5kbyBlIHNlZ3VpIGxlIGlzdHJ1emlvbmkgZm9ybml0ZSBuZWwgdHVvIGVkaXRvclxuIgorInBlciBtb2RpZmljYXJlIGlsIGZpbGUgZGkgY29uZmlndXJhemlvbmU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiRG9wbyBxdWVzdGEgb3BlcmF6aW9uZSwgcHVvaSByaXByaXN0aW5hcmUgbCdpZGVudGl0w6AgdXNhdGEgaW4gcXVlc3RvIGNvbW1pdCAiCisiY29uOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTE2NworbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIklsIHR1byBub21lIGUgbCdpbmRpcml6em8gZS1tYWlsIHNvbm8gc3RhdGkgY29uZmlndXJhdGkgYXV0b21hdGljYW1lbnRlICIKKyJ1c2FuZG9cbiIKKyJpbCB0dW8gbm9tZSB1dGVudGUgZWQgaWwgbm9tZSBob3N0LiBQZXIgZmF2b3JlLCB2ZXJpZmljYSBjaGUgc2lhbm8gZXNhdHRpLlxuIgorIsOIIHBvc3NpYmlsZSBlbGltaW5hcmUgcXVlc3RvIG1lc3NhZ2dpbyBpbXBvc3RhbmRvbGkgZXNwbGljaXRhbWVudGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiSWwgdHVvIG5vbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgdHVAZXNlbXBpby5jb21cbiIKKyJcbiIKKyJEb3BvIHF1ZXN0YSBvcGVyYXppb25lLCBwdW9pIHJpcHJpc3RpbmFyZSBsJ2lkZW50aXTDoCB1c2F0YSBpbiBxdWVzdG8gY29tbWl0ICIKKyJjb246XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjA5Cittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdHJvdmFyZSBpbCBjb21taXQgYXBwZW5hIGNyZWF0byIKKworIzogc2VxdWVuY2VyLmM6MTIxMQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBpbCBjb21taXQgYXBwZW5hIGNyZWF0byIKKworIzogc2VxdWVuY2VyLmM6MTI1NworbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmlsZSByaXNvbHZlcmUgSEVBRCBkb3BvIGxhIGNyZWF6aW9uZSBkZWwgY29tbWl0IgorCisjOiBzZXF1ZW5jZXIuYzoxMjU5Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiSEVBRCBzY29sbGVnYXRvIgorCisjOiBzZXF1ZW5jZXIuYzoxMjYzCittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAoY29tbWl0IHJhZGljZSkiCisKKyM6IHNlcXVlbmNlci5jOjEyODQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxMjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiTCdIRUFEICVzIG5vbiDDqCB1biBjb21taXQhIgorCisjOiBzZXF1ZW5jZXIuYzoxMjkwIHNlcXVlbmNlci5jOjEzNjQgYnVpbHRpbi9jb21taXQuYzoxNTc0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGNvbW1pdCBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxMzQyIHNlcXVlbmNlci5jOjE5NjgKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0IGF1dGhvciIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ2F1dG9yZSBkZWwgY29tbWl0IgorCisjOiBzZXF1ZW5jZXIuYzoxMzUzIGJ1aWx0aW4vYW0uYzoxNTY2IGJ1aWx0aW4vbWVyZ2UuYzo2ODcKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBub24gw6ggcml1c2NpdG8gYSBzY3JpdmVyZSB1biBhbGJlcm8iCisKKyM6IHNlcXVlbmNlci5jOjEzODYgc2VxdWVuY2VyLmM6MTQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb21taXQgbWVzc2FnZSBmcm9tICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdCBkYSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxNDEzIGJ1aWx0aW4vYW0uYzoxNTg4IGJ1aWx0aW4vY29tbWl0LmM6MTY3MyBidWlsdGluL21lcmdlLmM6ODg2CisjOiBidWlsdGluL21lcmdlLmM6OTExCittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgInNjcml0dHVyYSBkZWxsJ29nZ2V0dG8gZGVsIGNvbW1pdCBub24gcml1c2NpdGEiCisKKyM6IHNlcXVlbmNlci5jOjE0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBpbCBjb21taXQgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgaWwgY29tbWl0IGdlbml0b3JlICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNTYyIHNlcXVlbmNlci5jOjE2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kOiAlZCIKK21zZ3N0ciAiY29tYW5kbyBzY29ub3NjaXV0bzogJWQiCisKKyM6IHNlcXVlbmNlci5jOjE2MjAgc2VxdWVuY2VyLmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJWQgY29tbWl0cy4iCittc2dzdHIgIlF1ZXN0YSDDqCB1bmEgY29tYmluYXppb25lIGRpICVkIGNvbW1pdC4iCisKKyM6IHNlcXVlbmNlci5jOjE2MzAKK21zZ2lkICJuZWVkIGEgSEVBRCB0byBmaXh1cCIKK21zZ3N0ciAiw6ggbmVjZXNzYXJpYSB1bidIRUFEIHBlciBpbCBmaXh1cCIKKworIzogc2VxdWVuY2VyLmM6MTYzMiBzZXF1ZW5jZXIuYzozMjEyCittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBsJ0hFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE2MzQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEJ3MgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdCBkZWxsJ0hFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlICclcyciCisKKyM6IHNlcXVlbmNlci5jOjE2NDcgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5NgorbXNnaWQgIlRoaXMgaXMgdGhlIDFzdCBjb21taXQgbWVzc2FnZToiCittc2dzdHIgIlF1ZXN0byDDqCBpbCBwcmltbyBtZXNzYWdnaW8gZGkgY29tbWl0OiIKKworIzogc2VxdWVuY2VyLmM6MTY1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZSBvZiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBtZXNzYWdnaW8gZGkgY29tbWl0IGRpICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMlZDoiCittc2dzdHIgIlF1ZXN0byDDqCBpbCBtZXNzYWdnaW8gZGkgY29tbWl0IG51bWVybyAlZDoiCisKKyM6IHNlcXVlbmNlci5jOjE2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJJbCBtZXNzYWdnaW8gZGkgY29tbWl0IG51bWVybyAlZCBzYXLDoCBzYWx0YXRvOiIKKworIzogc2VxdWVuY2VyLmM6MTc1NgorbXNnaWQgInlvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgImlsIGZpbGUgaW5kaWNlIG5vbiDDqCBzdGF0byBzb3R0b3Bvc3RvIGEgbWVyZ2UuIgorCisjOiBzZXF1ZW5jZXIuYzoxNzYzCittc2dpZCAiY2Fubm90IGZpeHVwIHJvb3QgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBmaXh1cCBzdWwgY29tbWl0IHJhZGljZSIKKworIzogc2VxdWVuY2VyLmM6MTc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgImlsIGNvbW1pdCAlcyDDqCB1biBtZXJnZSBtYSBub24gw6ggc3RhdGEgc3BlY2lmaWNhdGEgbCdvcHppb25lIC1tLiIKKworIzogc2VxdWVuY2VyLmM6MTc5MCBzZXF1ZW5jZXIuYzoxNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAiaWwgY29tbWl0ICVzIG5vbiBoYSBpbCBnZW5pdG9yZSAlZCIKKworIzogc2VxdWVuY2VyLmM6MTgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgb3R0ZW5lcmUgaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdCBwZXIgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgd2lsbCBiZSBhICJ0b2RvIiBjb21tYW5kIGxpa2UKKyMuICJyZXZlcnQiIG9yICJwaWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEuCisjOiBzZXF1ZW5jZXIuYzoxODIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiJXM6IGltcG9zc2liaWxlIGFuYWxpenphcmUgaWwgY29tbWl0IGdlbml0b3JlICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgJyVzJyB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaWRlbm9taW5hcmUgJyVzJyBpbiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxOTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXZlcnQgJXMuLi4gJXMiCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgZXNlZ3VpcmUgaWwgcmV2ZXJ0IGRpICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxOTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhcHBseSAlcy4uLiAlcyIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBhcHBsaWNhcmUgJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHJvcHBpbmcgJXMgJXMgLS0gcGF0Y2ggY29udGVudHMgYWxyZWFkeSB1cHN0cmVhbVxuIgorbXNnc3RyICJzY2FydG8gJXMgJXMgLSBpIGNvbnRlbnV0aSBkZWxsYSBwYXRjaCBzb25vIGdpw6AgdXBzdHJlYW1cbiIKKworIzogc2VxdWVuY2VyLmM6MjAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBsZXR0dXJhIGRlbGwnaW5kaWNlIG5vbiByaXVzY2l0YSIKKworIzogc2VxdWVuY2VyLmM6MjAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBhZ2dpb3JuYW1lbnRvIGRlbGwnaW5kaWNlIG5vbiByaXVzY2l0byIKKworIzogc2VxdWVuY2VyLmM6MjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBhY2NlcHQgYXJndW1lbnRzOiAnJXMnIgorbXNnc3RyICIlcyBub24gYWNjZXR0YSBhcmdvbWVudGk6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjIxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhcmd1bWVudHMgZm9yICVzIgorbXNnc3RyICJhcmdvbWVudGkgbWFuY2FudGkgcGVyICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlICclcyciCisKKyM6IHNlcXVlbmNlci5jOjIyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJyaWdhICVkIG5vbiB2YWxpZGE6ICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjIyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgJyVzJyBzZW56YSB1biBjb21taXQgcHJlY2VkZW50ZSIKKworIzogc2VxdWVuY2VyLmM6MjI5OAorbXNnaWQgImNhbmNlbGxpbmcgYSBjaGVycnkgcGlja2luZyBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiYW5udWxsbyB1bidvcGVyYXppb25lIGRpIGNoZXJyeS1waWNrIGluIGNvcnNvIgorCisjOiBzZXF1ZW5jZXIuYzoyMzA1Cittc2dpZCAiY2FuY2VsbGluZyBhIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiYW5udWxsbyB1bidvcGVyYXppb25lIGRpIHJldmVydCBpbiBjb3JzbyIKKworIzogc2VxdWVuY2VyLmM6MjM0OQorbXNnaWQgInBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICJjb3JyZWdnaSBsYSBzaXR1YXppb25lIHVzYW5kbyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorCisjOiBzZXF1ZW5jZXIuYzoyMzUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIGluc3RydWN0aW9uIHNoZWV0OiAnJXMnIgorbXNnc3RyICJmb2dsaW8gaXN0cnV6aW9uaSBpbnV0aWxpenphYmlsZTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjM1NgorbXNnaWQgIm5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAibmVzc3VuIGNvbW1pdCBhbmFsaXp6YXRvLiIKKworIzogc2VxdWVuY2VyLmM6MjM2NworbXNnaWQgImNhbm5vdCBjaGVycnktcGljayBkdXJpbmcgYSByZXZlcnQuIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSB1biBjaGVycnktcGljayBkdXJhbnRlIHVuIHJldmVydC4iCisKKyM6IHNlcXVlbmNlci5jOjIzNjkKK21zZ2lkICJjYW5ub3QgcmV2ZXJ0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgdW4gcmV2ZXJ0IGR1cmFudGUgdW4gY2hlcnJ5LXBpY2suIgorCisjOiBzZXF1ZW5jZXIuYzoyNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAidmFsb3JlIG5vbiB2YWxpZG8gcGVyICVzOiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjU0MAorbXNnaWQgInVudXNhYmxlIHNxdWFzaC1vbnRvIgorbXNnc3RyICJzcXVhc2gtb250byBpbnV0aWxpenphYmlsZSIKKworIzogc2VxdWVuY2VyLmM6MjU1NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJyVzJyIKK21zZ3N0ciAiZm9nbGlvIG9wemlvbmkgbWFsZm9ybWF0aTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjY0NCBzZXF1ZW5jZXIuYzo0MzYxCittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgIsOoIHN0YXRvIHBhc3NhdG8gdW4gaW5zaWVtZSBkaSBjb21taXQgdnVvdG8iCisKKyM6IHNlcXVlbmNlci5jOjI2NjAKK21zZ2lkICJyZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAidW4nb3BlcmF6aW9uZSBkaSByZXZlcnQgw6ggZ2nDoCBpbiBjb3JzbyIKKworIzogc2VxdWVuY2VyLmM6MjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnkgXCJnaXQgcmV2ZXJ0ICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICJwcm92YSBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjI2NjUKK21zZ2lkICJjaGVycnktcGljayBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJ1bidvcGVyYXppb25lIGRpIGNoZXJyeS1waWNrIMOoIGdpw6AgaW4gY29yc28iCisKKyM6IHNlcXVlbmNlci5jOjI2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICJwcm92YSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKKworIzogc2VxdWVuY2VyLmM6MjY4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlIGxhIGRpcmVjdG9yeSBzZXF1ZW5jZXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjY5NgorbXNnaWQgImNvdWxkIG5vdCBsb2NrIEhFQUQiCittc2dzdHIgImltcG9zc2liaWxlIGJsb2NjYXJlIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI3NTYgc2VxdWVuY2VyLmM6NDA5OQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAibmVzc3VuYSBvcGVyYXppb25lIGRpIGNoZXJyeS1waWNrIG8gcmV2ZXJ0IGluIGNvcnNvIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU4IHNlcXVlbmNlci5jOjI3NjkKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaXNvbHZlcmUgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6Mjc2MCBzZXF1ZW5jZXIuYzoyODA0Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBpbnRlcnJvbXBlcmUgbCdvcGVyYXppb25lIGRhIHVuIGJyYW5jaCBjaGUgZGV2ZSBlc3NlcmUgYW5jb3JhICIKKyJjcmVhdG8iCisKKyM6IHNlcXVlbmNlci5jOjI3OTAgYnVpbHRpbi9ncmVwLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyNzkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyc6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlICclcyc6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyNzkzCittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiZmluZSBkZWwgZmlsZSBpbmF0dGVzYSIKKworIzogc2VxdWVuY2VyLmM6Mjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKyJpbCBmaWxlICclcycgaW4gY3VpIMOoIHN0YXRvIHNhbHZhdG8gbCdIRUFEIHByaW1hIGRlbCBjaGVycnkgcGljayDDqCBjb3Jyb3R0byIKKworIzogc2VxdWVuY2VyLmM6MjgxMAorbXNnaWQgIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRC4gTm90IHJld2luZGluZywgY2hlY2sgeW91ciBIRUFEISIKK21zZ3N0ciAiIgorIlNlbWJyYSBjaGUgdHUgYWJiaWEgc3Bvc3RhdG8gbCdIRUFELiBOb24gZXNlZ3VvIGlsIHJld2luZCwgY29udHJvbGxhIGwnSEVBRCEiCisKKyM6IHNlcXVlbmNlci5jOjI4NTEKK21zZ2lkICJubyByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIm5lc3N1biByZXZlcnQgaW4gY29yc28iCisKKyM6IHNlcXVlbmNlci5jOjI4NTkKK21zZ2lkICJubyBjaGVycnktcGljayBpbiBwcm9ncmVzcyIKK21zZ3N0ciAibmVzc3VuIGNoZXJyeS1waWNrIGluIGNvcnNvIgorCisjOiBzZXF1ZW5jZXIuYzoyODY5Cittc2dpZCAiZmFpbGVkIHRvIHNraXAgdGhlIGNvbW1pdCIKK21zZ3N0ciAic2FsdG8gZGVsIGNvbW1pdCBub24gcml1c2NpdG8iCisKKyM6IHNlcXVlbmNlci5jOjI4NzYKK21zZ2lkICJ0aGVyZSBpcyBub3RoaW5nIHRvIHNraXAiCittc2dzdHIgIm5vbiBjJ8OoIG51bGxhIGRhIHNhbHRhcmUiCisKKyM6IHNlcXVlbmNlci5jOjI4NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImhhdmUgeW91IGNvbW1pdHRlZCBhbHJlYWR5P1xuIgorInRyeSBcImdpdCAlcyAtLWNvbnRpbnVlXCIiCittc2dzdHIgIiIKKyJoYWkgZ2nDoCBlc2VndWl0byBpbCBjb21taXQ/XG4iCisicHJvdmEgXCJnaXQgJXMgLS1jb250aW51ZVwiIgorCisjOiBzZXF1ZW5jZXIuYzozMDAzIHNlcXVlbmNlci5jOjQwMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYWdnaW9ybmFyZSAlcyIKKworIzogc2VxdWVuY2VyLmM6MzA0MiBzZXF1ZW5jZXIuYzozOTkxCittc2dpZCAiY2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBsJ0hFQUQiCisKKyM6IHNlcXVlbmNlci5jOjMwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjb3BpYXJlICclcycgaW4gJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzA2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIsOIIHBvc3NpYmlsZSBtb2RpZmljYXJlIGlsIGNvbW1pdCBvcmEgY29uXG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJRdWFuZG8gc2VpIHNvZGRpc2ZhdHRvIGRlbGxlIG1vZGlmaWNoZSwgZXNlZ3VpXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6MzA3NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJXMuLi4gJS4qcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYXBwbGljYXJlICVzLi4uICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjMwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1lcmdlICUuKnMiCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsIG1lcmdlIGRpICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjMwOTggc2VxdWVuY2VyLmM6MzEwMiBidWlsdGluL2RpZmZ0b29sLmM6NjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY29waWFyZSAnJXMnIGluICclcyciCisKKyM6IHNlcXVlbmNlci5jOjMxMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4ZWN1dGlvbiBmYWlsZWQ6ICVzXG4iCisiJXNZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImVzZWN1emlvbmUgbm9uIHJpdXNjaXRhOiAlc1xuIgorIiVzUHVvaSBjb3JyZWdnZXJlIGlsIHByb2JsZW1hIGUgcXVpbmRpIGVzZWd1aXJlXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogc2VxdWVuY2VyLmM6MzEzNQorbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCittc2dzdHIgImUgc29ubyBzdGF0ZSBhcHBvcnRhdGUgbW9kaWZpY2hlIGFsbCdpbmRpY2UgZS9vIGFsbCdhbGJlcm8gZGkgbGF2b3JvXG4iCisKKyM6IHNlcXVlbmNlci5jOjMxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICVzXG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiZXNlY3V6aW9uZSByaXVzY2l0YTogJXNcbiIKKyJtYSBzb25vIHN0YXRlIG1hbnRlbnV0ZSBtb2RpZmljaGUgYWxsJ2luZGljZSBlL28gYWxsJ2FsYmVybyBkaSBsYXZvcm9cbiIKKyJFc2VndWkgaWwgY29tbWl0IG8gbG8gc3Rhc2ggZGVsbGUgbW9kaWZpY2hlLCBxdWluZGkgZXNlZ3VpXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogc2VxdWVuY2VyLmM6MzIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGxhYmVsIG5hbWU6ICclLipzJyIKK21zZ3N0ciAibm9tZSBldGljaGV0dGEgaWxsZWNpdG86ICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzI1NgorbXNnaWQgIndyaXRpbmcgZmFrZSByb290IGNvbW1pdCIKK21zZ3N0ciAic2NyaXR0dXJhIGNvbW1pdCByYWRpY2UgZmFsc28gaW4gY29yc28iCisKKyM6IHNlcXVlbmNlci5jOjMyNjEKK21zZ2lkICJ3cml0aW5nIHNxdWFzaC1vbnRvIgorbXNnc3RyICJzY3JpdHR1cmEgc3F1YXNoLW9udG8gaW4gY29yc28iCisKKyM6IHNlcXVlbmNlci5jOjMyOTkgYnVpbHRpbi9yZWJhc2UuYzo4ODAgYnVpbHRpbi9yZWJhc2UuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdHJvdmFyZSBsJ2FsYmVybyBkaSAlcyIKKworIzogc2VxdWVuY2VyLmM6MzM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaXNvbHZlcmUgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzM3NQorbXNnaWQgImNhbm5vdCBtZXJnZSB3aXRob3V0IGEgY3VycmVudCByZXZpc2lvbiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgbWVyZ2Ugc2VuemEgdW5hIHJldmlzaW9uZSBjb3JyZW50ZSIKKworIzogc2VxdWVuY2VyLmM6MzM5NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyUuKnMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIG1lcmdlOiAnJS4qcyciCittc2dzdHIgIm5vbiBjJ8OoIG51bGxhIGRpIGN1aSBlc2VndWlyZSBpbCBtZXJnZTogJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozNDE4Cittc2dpZCAib2N0b3B1cyBtZXJnZSBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gdG9wIG9mIGEgW25ldyByb290XSIKK21zZ3N0ciAiaWwgbWVyZ2Ugb2N0b3B1cyBub24gcHXDsiBlc3NlcmUgZXNlZ3VpdG8gc3UgdW4gW251b3ZvIGNvbW1pdCByYWRpY2VdIgorCisjOiBzZXF1ZW5jZXIuYzozNDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgY29tbWl0IG1lc3NhZ2Ugb2YgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgb3R0ZW5lcmUgaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdCBwZXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXZlbiBhdHRlbXB0IHRvIG1lcmdlICclLipzJyIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIG5lbW1lbm8gcG9zc2liaWxlIHRlbnRhcmUgZGkgZXNlZ3VpcmUgaWwgbWVyZ2UgZGkgJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozNjEwCittc2dpZCAibWVyZ2U6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAibWVyZ2U6IGltcG9zc2liaWxlIHNjcml2ZXJlIGlsIG51b3ZvIGZpbGUgaW5kaWNlIgorCisjOiBzZXF1ZW5jZXIuYzozNjc5IGJ1aWx0aW4vcmViYXNlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLlxuIgorbXNnc3RyICJTdGFzaCBhdXRvbWF0aWNvIGFwcGxpY2F0by5cbiIKKworIzogc2VxdWVuY2VyLmM6MzY5MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgImltcG9zc2liaWxlIG1lbW9yaXp6YXJlICVzIgorCisjOiBzZXF1ZW5jZXIuYzozNjk0IGJ1aWx0aW4vcmViYXNlLmM6NzUzIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuXG4iCisiWW91ciBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBzdGFzaC5cbiIKKyJZb3UgY2FuIHJ1biBcImdpdCBzdGFzaCBwb3BcIiBvciBcImdpdCBzdGFzaCBkcm9wXCIgYXQgYW55IHRpbWUuXG4iCittc2dzdHIgIiIKKyJMJ2FwcGxpY2F6aW9uZSBkZWxsbyBzdGFzaCBhdXRvbWF0aWNvIGhhIGdlbmVyYXRvIGNvbmZsaXR0aS5cbiIKKyJMZSB0dWUgbW9kaWZpY2hlIHNvbm8gYWwgc2ljdXJvIG5lbGxvIHN0YXNoLlxuIgorIlB1b2kgZXNlZ3VpcmUgXCJnaXQgc3Rhc2ggcG9wXCIgbyBcImdpdCBzdGFzaCBkcm9wXCIgaW4gcXVhbHVucXVlIG1vbWVudG8uXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIHZhbGlkIE9JRCIKK21zZ3N0ciAiJXM6IG5vbiDDqCB1biBPSUQgdmFsaWRvIgorCisjOiBzZXF1ZW5jZXIuYzozNzYwIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NzkKK21zZ2lkICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgImltcG9zc2liaWxlIHNjb2xsZWdhcmUgbCdIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozNzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgSEVBRFxuIgorbXNnc3RyICJGZXJtYXRvIGEgSEVBRFxuIgorCisjOiBzZXF1ZW5jZXIuYzozNzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXNcbiIKK21zZ3N0ciAiRmVybWF0byBhICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBleGVjdXRlIHRoZSB0b2RvIGNvbW1hbmRcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBjb21hbmRvIHRvZG9cbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIlxuIgorIklsIGNvbWFuZG8gw6ggc3RhdG8gcGlhbmlmaWNhdG8gbnVvdmFtZW50ZS4gUGVyIG1vZGlmaWNhcmxvIHByaW1hIGRpXG4iCisiY29udGludWFyZSwgbW9kaWZpY2EgcHJpbWEgbGEgbGlzdGEgdG9kbzpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6Mzg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzLi4uICAlLipzXG4iCittc2dzdHIgIkZlcm1hdG8gYSAlcy4uLiAlLipzXG4iCisKKyM6IHNlcXVlbmNlci5jOjM5NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kICVkIgorbXNnc3RyICJjb21hbmRvICVkIHNjb25vc2NpdXRvIgorCisjOiBzZXF1ZW5jZXIuYzozOTk5Cittc2dpZCAiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIG9yaWctaGVhZCIKKworIzogc2VxdWVuY2VyLmM6NDAwNAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdvbnRvJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSAnb250byciCisKKyM6IHNlcXVlbmNlci5jOjQwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSBIRUFEIHRvICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGwnSEVBRCBhICVzIgorCisjOiBzZXF1ZW5jZXIuYzo0MTExCittc2dpZCAiY2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCByZWJhc2U6IGNpIHNvbm8gZGVsbGUgbW9kaWZpY2hlIG5vbiBpbiBzdGFnaW5nLiIKKworIzogc2VxdWVuY2VyLmM6NDEyMAorbXNnaWQgImNhbm5vdCBhbWVuZCBub24tZXhpc3RpbmcgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmlsZSBtb2RpZmljYXJlIHVuIGNvbW1pdCBpbmVzaXN0ZW50ZSIKKworIzogc2VxdWVuY2VyLmM6NDEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbGU6ICclcyciCittc2dzdHIgImZpbGUgbm9uIHZhbGlkbzogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbnRlbnRzOiAnJXMnIgorbXNnc3RyICJjb250ZW51dGkgbm9uIHZhbGlkaTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDEyNworbXNnaWQgIiIKKyJcbiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UsIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAiIgorIlxuIgorIkNpIHNvbm8gbW9kaWZpY2hlIGRpIGN1aSBub24gw6ggc3RhdG8gZXNlZ3VpdG8gaWwgY29tbWl0IG5lbCB0dW8gYWxiZXJvXG4iCisiZGkgbGF2b3JvLiBFc2VndWluZSBwcmltYSBpbCBjb21taXQgZSBxdWluZGkgZXNlZ3VpIG51b3ZhbWVudGUgJ2dpdCByZWJhc2VcbiIKKyItLWNvbnRpbnVlJy4iCisKKyM6IHNlcXVlbmNlci5jOjQxNjMgc2VxdWVuY2VyLmM6NDIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZmlsZTogJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDIxNworbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmltdW92ZXJlIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IHNlcXVlbmNlci5jOjQyMjQKK21zZ2lkICJjb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgY29tbWl0IGRlbGxlIG1vZGlmaWNoZSBpbiBzdGFnaW5nLiIKKworIzogc2VxdWVuY2VyLmM6NDMzOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiJXM6IGltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGNoZXJyeSBwaWNrIGRpIHVuICVzIgorCisjOiBzZXF1ZW5jZXIuYzo0MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBiYWQgcmV2aXNpb24iCittc2dzdHIgIiVzOiByZXZpc2lvbmUgbm9uIHZhbGlkYSIKKworIzogc2VxdWVuY2VyLmM6NDM3NworbXNnaWQgImNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgcmV2ZXJ0IGNvbWUgY29tbWl0IGluaXppYWxlIgorCisjOiBzZXF1ZW5jZXIuYzo0ODQ2Cittc2dpZCAibWFrZV9zY3JpcHQ6IHVuaGFuZGxlZCBvcHRpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDogb3B6aW9uaSBub24gZ2VzdGl0ZSIKKworIzogc2VxdWVuY2VyLmM6NDg0OQorbXNnaWQgIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJpbmcgcmV2aXNpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDogZXJyb3JlIGR1cmFudGUgbGEgcHJlcGFyYXppb25lIGRlbGxlIHJldmlzaW9uaSIKKworIzogc2VxdWVuY2VyLmM6NTA4MyBzZXF1ZW5jZXIuYzo1MTAwCittc2dpZCAibm90aGluZyB0byBkbyIKK21zZ3N0ciAibnVsbGEgZGEgZmFyZSIKKworIzogc2VxdWVuY2VyLmM6NTExOQorbXNnaWQgImNvdWxkIG5vdCBza2lwIHVubmVjZXNzYXJ5IHBpY2sgY29tbWFuZHMiCittc2dzdHIgImltcG9zc2liaWxlIHNhbHRhcmUgaSBjb21hbmRpIHBpY2sgbm9uIG5lY2Vzc2FyaSIKKworIzogc2VxdWVuY2VyLmM6NTIxMworbXNnaWQgInRoZSBzY3JpcHQgd2FzIGFscmVhZHkgcmVhcnJhbmdlZC4iCittc2dzdHIgImxvIHNjcmlwdCDDqCBnacOgIHN0YXRvIHJpb3JkaW5hdG8uIgorCisjOiBzZXR1cC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSBhdCAnJXMnIgorbXNnc3RyICInJXMnIMOoIGFsIGRpIGZ1b3JpIGRlbCByZXBvc2l0b3J5IGluICclcyciCisKKyM6IHNldHVwLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogbm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICdnaXQgPGNvbW1hbmQ+IC0tIDxwYXRoPi4uLicgdG8gc3BlY2lmeSBwYXRocyB0aGF0IGRvIG5vdCBleGlzdCBsb2NhbGx5LiIKK21zZ3N0ciAiIgorIiVzOiBwZXJjb3JzbyBub24gZXNpc3RlbnRlIG5lbGwnYWxiZXJvIGRpIGxhdm9yby5cbiIKKyJVc2EgJ2dpdCA8Y29tYW5kbz4gLS0gPHBlcmNvcnNvPi4uLicgcGVyIHNwZWNpZmljYXJlIHBlcmNvcnNpIG5vbiBlc2lzdGVudGkgIgorImxvY2FsbWVudGUuIgorCisjOiBzZXR1cC5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyJhcmdvbWVudG8gJyVzJyBhbWJpZ3VvOiByZXZpc2lvbmUgc2Nvbm9zY2l1dGEgbyBwZXJjb3JzbyBub24gbmVsbCdhbGJlcm8gZGkgIgorImxhdm9yby5cbiIKKyJVc2EgJy0tJyBwZXIgc2VwYXJhcmUgaSBwZXJjb3JzaSBkYWxsZSByZXZpc2lvbmksIGNvbWUgc2VndWU6XG4iCisiJ2dpdCA8Y29tYW5kbz4gWzxyZXZpc2lvbmU+Li4uXSAtLSBbPGZpbGU+Li4uXSciCisKKyM6IHNldHVwLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAnJXMnIG11c3QgY29tZSBiZWZvcmUgbm9uLW9wdGlvbiBhcmd1bWVudHMiCittc2dzdHIgIiIKKyJsJ29wemlvbmUgJyVzJyBkZXZlIGVzc2VyZSBzcGVjaWZpY2F0YSBwcmltYSBkZWdsaSBhcmdvbWVudGkgY2hlIG5vbiAiCisiY29zdGl0dWlzY29ubyB1bidvcHppb25lIgorCisjOiBzZXR1cC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisiYXJnb21lbnRvICclcycgYW1iaWd1bzogw6ggc2lhIHVuYSByZXZpc2lvbmUgc2lhIHVuIG5vbWUgZmlsZVxuIgorIlVzYSAnLS0nIHBlciBzZXBhcmFyZSBpIHBlcmNvcnNpIGRhbGxlIHJldmlzaW9uaSwgY29tZSBzZWd1ZTpcbiIKKyInZ2l0IDxjb21hbmRvPiBbPHJldmlzaW9uZT4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKKworIzogc2V0dXAuYzo0MDkKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHVwIHdvcmsgdHJlZSB1c2luZyBpbnZhbGlkIGNvbmZpZyIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIHByZXBhcmFyZSBsJ2FsYmVybyBkaSBsYXZvcm8gdXNhbmRvIHVuYSBjb25maWd1cmF6aW9uZSBub24gdmFsaWRhIgorCisjOiBzZXR1cC5jOjQxMworbXNnaWQgInRoaXMgb3BlcmF0aW9uIG11c3QgYmUgcnVuIGluIGEgd29yayB0cmVlIgorbXNnc3RyICJxdWVzdCdvcGVyYXppb25lIGRldmUgZXNzZXJlIGVzZWd1aXRhIGluIHVuIGFsYmVybyBkaSBsYXZvcm8iCisKKyM6IHNldHVwLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIgorbXNnc3RyICJBdHRlc2EgdmVyc2lvbmUgcmVwb3NpdG9yeSBHaXQgPD0gJWQsIHRyb3ZhdGEgJWQiCisKKyM6IHNldHVwLmM6NTY3Cittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICJ0cm92YXRlIGVzdGVuc2lvbmkgcmVwb3NpdG9yeSBzY29ub3NjaXV0ZToiCisKKyM6IHNldHVwLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbCdhcGVydHVyYSBkaSAnJXMnIgorCisjOiBzZXR1cC5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbGFyZ2UgdG8gYmUgYSAuZ2l0IGZpbGU6ICclcyciCittc2dzdHIgIiclcycgdHJvcHBvIGdyYW5kZSBwZXIgZXNzZXJlIHVuIGZpbGUgLmdpdCIKKworIzogc2V0dXAuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyAlcyIKK21zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbGEgbGV0dHVyYSBkaSAlcyIKKworIzogc2V0dXAuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBnaXRmaWxlIGZvcm1hdDogJXMiCittc2dzdHIgImZvcm1hdG8gZmlsZSBHaXQgbm9uIHZhbGlkbzogJXMiCisKKyM6IHNldHVwLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHBhdGggaW4gZ2l0ZmlsZTogJXMiCittc2dzdHIgIm5lc3N1biBwZXJjb3JzbyBwcmVzZW50ZSBuZWwgZmlsZSBHaXQ6ICVzIgorCisjOiBzZXR1cC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIiVzIG5vbiDDqCB1biByZXBvc2l0b3J5IEdpdCIKKworIzogc2V0dXAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyQlcycgdG9vIGJpZyIKK21zZ3N0ciAiJyQlcycgw6ggdHJvcHBvIGdyYW5kZSIKKworIzogc2V0dXAuYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciCittc2dzdHIgIiclcycgbm9uIMOoIHVuIHJlcG9zaXRvcnkgR2l0IgorCisjOiBzZXR1cC5jOjczOCBzZXR1cC5jOjc0MCBzZXR1cC5jOjc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbW9kaWZpY2FyZSBsYSBkaXJlY3RvcnkgY29ycmVudGUgaW4gJyVzJyIKKworIzogc2V0dXAuYzo3NDMgc2V0dXAuYzo3OTkgc2V0dXAuYzo4MDkgc2V0dXAuYzo4NDggc2V0dXAuYzo4NTYKK21zZ2lkICJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdG9ybmFyZSBhbGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8gY29ycmVudGUiCisKKyM6IHNldHVwLmM6ODcwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclKnMlcyVzJyIKK21zZ3N0ciAic3RhdCBkaSAnJSpzJXMlcycgbm9uIHJpdXNjaXRvIgorCisjOiBzZXR1cC5jOjExMDgKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJJbXBvc3NpYmlsZSBsZWdnZXJlIGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8gY29ycmVudGUiCisKKyM6IHNldHVwLmM6MTExNyBzZXR1cC5jOjExMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoYW5nZSB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlbnRyYXJlIGluICclcyciCisKKyM6IHNldHVwLmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMpOiAlcyIKK21zZ3N0ciAiJXMgbm9uIMOoIHVuIHJlcG9zaXRvcnkgR2l0IChuw6kgbG8gw6ggYWxjdW5hIGRlbGxlIGRpcmVjdG9yeSBnZW5pdHJpY2kpIgorCisjOiBzZXR1cC5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgcGFyZW50IHVwIHRvIG1vdW50IHBvaW50ICVzKVxuIgorIlN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0gYm91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuIgorbXNnc3RyICIiCisibm9uIMOoIHVuIHJlcG9zaXRvcnkgR2l0IChuw6kgbG8gw6ggYWxjdW4gZ2VuaXRvcmUgZmlubyBhbCBwdW50byBkaSBtb3VudCAlcylcbiIKKyJNaSBmZXJtbyBhbCBsaW1pdGUgZGVsIGZpbGVzeXN0ZW0gKGwnb3B6aW9uZSBHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNICIKKyJub24gw6ggaW1wb3N0YXRhKS4iCisKKyM6IHNldHVwLmM6MTI0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicHJvYmxlbSB3aXRoIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBmaWxlbW9kZSB2YWx1ZSAoMCUuM28pLlxuIgorIlRoZSBvd25lciBvZiBmaWxlcyBtdXN0IGFsd2F5cyBoYXZlIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorInNpIMOoIHZlcmlmaWNhdG8gdW4gcHJvYmxlbWEgY29uIGlsIHZhbG9yZSBtb2RvIGZpbGUgZGkgY29yZS5zaGFyZWRSZXBvc2l0b3J5ICIKKyIoMCUuM28pLlxuIgorIklsIHByb3ByaWV0YXJpbyBkZWkgZmlsZSBkZXZlIGF2ZXJlIHNlbXByZSBpIHBlcm1lc3NpIGRpIGxldHR1cmEgZSBzY3JpdHR1cmEuIgorCisjOiBzZXR1cC5jOjEyODkKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBvciBkdXAgZmFpbGVkIgorbXNnc3RyICJhcGVydHVyYSBkaSAvZGV2L251bGwgbyBkdXAgbm9uIHJpdXNjaXRhIgorCisjOiBzZXR1cC5jOjEzMDQKK21zZ2lkICJmb3JrIGZhaWxlZCIKK21zZ3N0ciAiZm9yayBub24gcml1c2NpdGEiCisKKyM6IHNldHVwLmM6MTMwOQorbXNnaWQgInNldHNpZCBmYWlsZWQiCittc2dzdHIgInNldHNpZCBub24gcml1c2NpdGEiCisKKyM6IHNoYTEtZmlsZS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0OyBjaGVjayAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorbXNnc3RyICIiCisibGEgZGlyZWN0b3J5IG9nZ2V0dGkgJXMgbm9uIGVzaXN0ZTsgY29udHJvbGxhIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiCisKKyM6IHNoYTEtZmlsZS5jOjUwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIGFsdGVybmF0ZSBvYmplY3QgcGF0aDogJXMiCittc2dzdHIgImltcG9zc2liaWxlIG5vcm1hbGl6emFyZSBpbCBwZXJjb3JzbyBhbHRlcm5hdGl2byBvZ2dldHRvOiAlcyIKKworIzogc2hhMS1maWxlLmM6NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpZ25vcmluZyBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlcywgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiIgorIiVzOiBpZ25vcm8gZ2xpIGFyY2hpdmkgb2dnZXR0byBhbHRlcm5hdGl2aSwgbGEgbmlkaWZpY2F6aW9uZSDDqCB0cm9wcG8gIgorInByb2ZvbmRhIgorCisjOiBzaGExLWZpbGUuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG5vcm1hbGl6ZSBvYmplY3QgZGlyZWN0b3J5OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbm9ybWFsaXp6YXJlIGxhIGRpcmVjdG9yeSBvZ2dldHRpOiAlcyIKKworIzogc2hhMS1maWxlLmM6NjI1Cittc2dpZCAidW5hYmxlIHRvIGZkb3BlbiBhbHRlcm5hdGVzIGxvY2tmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBmZG9wZW4gc3VsIGZpbGUgZGkgbG9jayBhbHRlcm5hdGVzIgorCisjOiBzaGExLWZpbGUuYzo2NDMKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgZmlsZSBhbHRlcm5hdGVzIgorCisjOiBzaGExLWZpbGUuYzo2NTAKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSBuZXcgYWx0ZXJuYXRlcyBmaWxlIGludG8gcGxhY2UiCittc2dzdHIgImltcG9zc2liaWxlIHNwb3N0YXJlIGlsIG51b3ZvIGZpbGUgYWx0ZXJuYXRlcyBuZWxsYSBwb3NpemlvbmUgY29ycmV0dGEiCisKKyM6IHNoYTEtZmlsZS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImlsIHBlcmNvcnNvICclcycgbm9uIGVzaXN0ZSIKKworIzogc2hhMS1maWxlLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgYXMgYSBsaW5rZWQgY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIgorbXNnc3RyICIiCisibCdhZ2dpdW50YSBkZWwgcmVwb3NpdG9yeSBkaSByaWZlcmltZW50byAnJXMnIGNvbWUgY2hlY2tvdXQgY29sbGVnYXRvIG5vbiDDqCAiCisiYW5jb3JhIHN1cHBvcnRhdGEuIgorCisjOiBzaGExLWZpbGUuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiaWwgcmVwb3NpdG9yeSBkaSByaWZlcmltZW50byAnJXMnIG5vbiDDqCB1biByZXBvc2l0b3J5IGxvY2FsZS4iCisKKyM6IHNoYTEtZmlsZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgImlsIHJlcG9zaXRvcnkgZGkgcmlmZXJpbWVudG8gJyVzJyDDqCBzaGFsbG93IgorCisjOiBzaGExLWZpbGUuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICJpbCByZXBvc2l0b3J5IGRpIHJpZmVyaW1lbnRvICclcycgw6ggdW4gZ3JhZnQiCisKKyM6IHNoYTEtZmlsZS5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgd2hpbGUgcGFyc2luZyBhbHRlcm5hdGUgcmVmczogJXMiCittc2dzdHIgInJpZ2Egbm9uIHZhbGlkYSBkdXJhbnRlIGwnYW5hbGlzaSBkZWkgcmlmZXJpbWVudGkgZGVnbGkgYWx0ZXJuYXRpOiAlcyIKKworIzogc2hhMS1maWxlLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAidGVudG8gZGkgZXNlZ3VpcmUgbW1hcCAlPFBSSXVNQVg+IGFsIGRpIHNvcHJhIGRlbCBsaW1pdGUgJTxQUkl1TUFYPiIKKworIzogc2hhMS1maWxlLmM6OTY0Cittc2dpZCAibW1hcCBmYWlsZWQiCittc2dzdHIgIm1tYXAgbm9uIHJpdXNjaXRhIgorCisjOiBzaGExLWZpbGUuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBmaWxlICVzIGlzIGVtcHR5IgorbXNnc3RyICJsJ29nZ2V0dG8gJXMgw6ggdnVvdG8iCisKKyM6IHNoYTEtZmlsZS5jOjEyNjMgc2hhMS1maWxlLmM6MjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICJvZ2dldHRvIHNjaW9sdG8gJyVzJyBjb3Jyb3R0byIKKworIzogc2hhMS1maWxlLmM6MTI2NSBzaGExLWZpbGUuYzoyNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICJkYXRpIGludXRpbGl6emFiaWxpIHByZXNlbnRpIGFsbGEgZmluZSBkZWxsJ29nZ2V0dG8gc2Npb2x0byAnJXMnIgorCisjOiBzaGExLWZpbGUuYzoxMzA3Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSIKK21zZ3N0ciAidGlwbyBvZ2dldHRvIG5vbiB2YWxpZG8iCisKKyM6IHNoYTEtZmlsZS5jOjEzOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZGVjb21wcmltZXJlIGwnaW50ZXN0YXppb25lICVzIGNvbiAtLWFsbG93LXVua25vd24tdHlwZSIKKworIzogc2hhMS1maWxlLmM6MTM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZGVjb21wcmltZXJlIGwnaW50ZXN0YXppb25lICVzIgorCisjOiBzaGExLWZpbGUuYzoxNDAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ2ludGVzdGF6aW9uZSAlcyBjb24gLS1hbGxvdy11bmtub3duLXR5cGUiCisKKyM6IHNoYTEtZmlsZS5jOjE0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ2ludGVzdGF6aW9uZSAlcyIKKworIzogc2hhMS1maWxlLmM6MTYyOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJXMiCittc2dzdHIgImxldHR1cmEgZGVsbCdvZ2dldHRvICVzIG5vbiByaXVzY2l0YSIKKworIzogc2hhMS1maWxlLmM6MTYzMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlbWVudCAlcyBub3QgZm91bmQgZm9yICVzIgorbXNnc3RyICIlcyBzb3N0aXR1dGl2byBub24gdHJvdmF0byBwZXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgImwnb2dnZXR0byBzY2lvbHRvICVzIChzYWx2YXRvIGluICVzKSDDqCBjb3Jyb3R0byIKKworIzogc2hhMS1maWxlLmM6MTY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZWQgb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgImwnb2dnZXR0byBhcmNoaXZpYXRvICVzIChzYWx2YXRvIGluICVzKSDDqCBjb3Jyb3R0byIKKworIzogc2hhMS1maWxlLmM6MTc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZSAlcyIKKworIzogc2hhMS1maWxlLmM6MTc1MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHBlcm1pc3Npb24gdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgaW1wb3N0YXJlIGkgcGVybWVzc2kgYSAnJXMnIgorCisjOiBzaGExLWZpbGUuYzoxNzYwCittc2dpZCAiZmlsZSB3cml0ZSBlcnJvciIKK21zZ3N0ciAiZXJyb3JlIGRpIHNjcml0dHVyYSBkZWwgZmlsZSIKKworIzogc2hhMS1maWxlLmM6MTc4MAorbXNnaWQgImVycm9yIHdoZW4gY2xvc2luZyBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbGEgY2hpdXN1cmEgZGVsIGZpbGUgb2dnZXR0byBzY2lvbHRvIgorCisjOiBzaGExLWZpbGUuYzoxODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImluc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciBhZGRpbmcgYW4gb2JqZWN0IHRvIHJlcG9zaXRvcnkgZGF0YWJhc2UgJXMiCittc2dzdHIgIiIKKyJwZXJtZXNzaSBub24gc3VmZmljaWVudGkgcGVyIGwnYWdnaXVudGEgZGkgdW4gb2dnZXR0byBhbCBkYXRhYmFzZSByZXBvc2l0b3J5ICIKKyIlcyIKKworIzogc2hhMS1maWxlLmM6MTg0NworbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBpbCBmaWxlIHRlbXBvcmFuZW8iCisKKyM6IHNoYTEtZmlsZS5jOjE4NzEKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIGZpbGUgb2dnZXR0byBzY2lvbHRvIgorCisjOiBzaGExLWZpbGUuYzoxODc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIG5ldyBvYmplY3QgJXMgKCVkKSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY29tcHJpbWVyZSBjb24gZGVmbGF0ZSBpbCBudW92byBvZ2dldHRvICVzICglZCkiCisKKyM6IHNoYTEtZmlsZS5jOjE4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZUVuZCBvbiBvYmplY3QgJXMgZmFpbGVkICglZCkiCittc2dzdHIgImRlZmxhdGVFbmQgbm9uIHJpdXNjaXRhIHN1bGwnb2dnZXR0byAlcyAoJWQpIgorCisjOiBzaGExLWZpbGUuYzoxODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZ1c2VkIGJ5IHVuc3RhYmxlIG9iamVjdCBzb3VyY2UgZGF0YSBmb3IgJXMiCittc2dzdHIgInNvbm8gY29uZnVzbyBkYWxsJ29yaWdpbmUgZGF0aSBvZ2dldHRvIG5vbiBzdGFiaWxlIHBlciAlcyIKKworIzogc2hhMS1maWxlLmM6MTg5NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJXMiCittc2dzdHIgInV0aW1lKCkgZGkgJXMgbm9uIHJpdXNjaXRhIgorCisjOiBzaGExLWZpbGUuYzoxOTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgbCdvZ2dldHRvIHBlciAlcyIKKworIzogc2hhMS1maWxlLmM6MjAxMQorbXNnaWQgImNvcnJ1cHQgY29tbWl0IgorbXNnc3RyICJjb21taXQgY29ycm90dG8iCisKKyM6IHNoYTEtZmlsZS5jOjIwMTkKK21zZ2lkICJjb3JydXB0IHRhZyIKK21zZ3N0ciAidGFnIGNvcnJvdHRvIgorCisjOiBzaGExLWZpbGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZXJyb3Igd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgImVycm9yZSBkaSBsZXR0dXJhIGR1cmFudGUgbCdpbmRpY2l6emF6aW9uZSBkaSAlcyIKKworIzogc2hhMS1maWxlLmM6MjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCByZWFkIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICJsZXR0dXJhIHRyb3BwbyBicmV2ZSBkdXJhbnRlIGwnaW5kaWNpenphemlvbmUgZGkgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjIxOTUgc2hhMS1maWxlLmM6MjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFpbGVkIHRvIGluc2VydCBpbnRvIGRhdGFiYXNlIgorbXNnc3RyICIlczogaW5zZXJpbWVudG8gZGVsIHJlY29yZCBuZWwgZGF0YWJhc2Ugbm9uIHJpdXNjaXRvIgorCisjOiBzaGExLWZpbGUuYzoyMjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnN1cHBvcnRlZCBmaWxlIHR5cGUiCittc2dzdHIgIiVzOiB0aXBvIGRpIGZpbGUgbm9uIHN1cHBvcnRhdG8iCisKKyM6IHNoYTEtZmlsZS5jOjIyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgb2JqZWN0IgorbXNnc3RyICIlcyBub24gw6ggdW4gb2dnZXR0byB2YWxpZG8iCisKKyM6IHNoYTEtZmlsZS5jOjIyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiVzIG5vbiDDqCB1biBvZ2dldHRvICclcycgdmFsaWRvIgorCisjOiBzaGExLWZpbGUuYzoyMjY0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDU0IHNoYTEtZmlsZS5jOjI1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCBmb3IgJXMgKGV4cGVjdGVkICVzKSIKK21zZ3N0ciAibWFuY2F0YSBjb3JyaXNwb25kZW56YSBwZXIgJXMgKGF0dGVzbyAlcykiCisKKyM6IHNoYTEtZmlsZS5jOjI0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1tYXAgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIG1tYXAgc3UgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayBoZWFkZXIgb2YgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGRlY29tcHJpbWVyZSBsJ2ludGVzdGF6aW9uZSBkaSAlcyIKKworIzogc2hhMS1maWxlLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgaGVhZGVyIG9mICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGwnaW50ZXN0YXppb25lIGRpICVzIgorCisjOiBzaGExLWZpbGUuYzoyNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgY29udGVudHMgb2YgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGRlY29tcHJpbWVyZSBpIGNvbnRlbnV0aSBkaSAlcyIKKworIzogc2hhMS1uYW1lLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IFNIQTEgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJsbyBTSEExIGJyZXZlICVzIMOoIGFtYmlndW8iCisKKyM6IHNoYTEtbmFtZS5jOjQ5NworbXNnaWQgIlRoZSBjYW5kaWRhdGVzIGFyZToiCittc2dzdHIgIkkgY2FuZGlkYXRpIHNvbm86IgorCisjOiBzaGExLW5hbWUuYzo3OTYKK21zZ2lkICIiCisiR2l0IG5vcm1hbGx5IG5ldmVyIGNyZWF0ZXMgYSByZWYgdGhhdCBlbmRzIHdpdGggNDAgaGV4IGNoYXJhY3RlcnNcbiIKKyJiZWNhdXNlIGl0IHdpbGwgYmUgaWdub3JlZCB3aGVuIHlvdSBqdXN0IHNwZWNpZnkgNDAtaGV4LiBUaGVzZSByZWZzXG4iCisibWF5IGJlIGNyZWF0ZWQgYnkgbWlzdGFrZS4gRm9yIGV4YW1wbGUsXG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorIlxuIgorIndoZXJlIFwiJGJyXCIgaXMgc29tZWhvdyBlbXB0eSBhbmQgYSA0MC1oZXggcmVmIGlzIGNyZWF0ZWQuIFBsZWFzZVxuIgorImV4YW1pbmUgdGhlc2UgcmVmcyBhbmQgbWF5YmUgZGVsZXRlIHRoZW0uIFR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieVxuIgorInJ1bm5pbmcgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIgorbXNnc3RyICIiCisiR2l0IG5vcm1hbG1lbnRlIG5vbiBjcmVhIG1haSB1biByaWZlcmltZW50byBjaGUgdGVybWluYSBjb24gNDBcbiIKKyJjYXJhdHRlcmkgZXNhZGVjaW1hbGkgcGVyY2jDqSBzYXLDoCBpZ25vcmF0byBzZSBzaSBzcGVjaWZpY2Fub1xuIgorInNlbXBsaWNlbWVudGUgNDAgY2FyYXR0ZXJpIGVzYWRlY2ltYWxpLiBRdWVzdGkgcmlmZXJpbWVudGlcbiIKKyJwb3RyZWJiZXJvIGVzc2VyZSBjcmVhdGkgcGVyIGVycm9yZS4gQWQgZXNlbXBpbzpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisiZG92ZSBcIiRiclwiIMOoIHZ1b3RvIHBlciBxdWFsY2hlIG1vdGl2byBlIHF1aW5kaSB2aWVuZSBjcmVhdG8gdW5cbiIKKyJyaWZlcmltZW50byBjb24gNDAgY2FyYXR0ZXJpIGVzYWRlY2ltYWxpLiBFc2FtaW5hIHRhbGlcbiIKKyJyaWZlcmltZW50aSBlZCBlbGltaW5hbGkgc2UgbmVjZXNzYXJpby4gRGlzYWJpbGl0YSBxdWVzdG9cbiIKKyJtZXNzYWdnaW8gZXNlZ3VlbmRvIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKKworIzogc2hhMS1uYW1lLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgJyUuKnMnIG9ubHkgZ29lcyBiYWNrIHRvICVzIgorbXNnc3RyICJpbCBsb2cgcGVyICclLipzJyDDqCBkaXNwb25pYmlsZSBzb2xvIGZpbm8gYWwgJXMiCisKKyM6IHNoYTEtbmFtZS5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICclLipzJyBvbmx5IGhhcyAlZCBlbnRyaWVzIgorbXNnc3RyICJpbCBsb2cgcGVyICclLipzJyBoYSBzb2xvICVkIHZvY2kiCisKKyM6IHNoYTEtbmFtZS5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGV4aXN0cyBvbiBkaXNrLCBidXQgbm90IGluICclLipzJyIKK21zZ3N0ciAiaWwgcGVyY29yc28gJyVzJyBlc2lzdGUgc3UgZGlzY28sIG1hIG5vbiBpbiAnJS4qcyciCisKKyM6IHNoYTEtbmFtZS5jOjE2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInBhdGggJyVzJyBleGlzdHMsIGJ1dCBub3QgJyVzJ1xuIgorImhpbnQ6IERpZCB5b3UgbWVhbiAnJS4qczolcycgYWthICclLipzOi4vJXMnPyIKK21zZ3N0ciAiIgorImlsIHBlcmNvcnNvICclcycgZXNpc3RlLCBtYSBub24gJyVzJ1xuIgorInN1Z2dlcmltZW50bzogZm9yc2UgaW50ZW5kZXZpICclLipzOiVzJyBvc3NpYSAnJS4qczouLyVzJz8iCisKKyM6IHNoYTEtbmFtZS5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IGluICclLipzJyIKK21zZ3N0ciAiaWwgcGVyY29yc28gJyVzJyBub24gZXNpc3RlIGluICclLipzJyIKKworIzogc2hhMS1uYW1lLmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicGF0aCAnJXMnIGlzIGluIHRoZSBpbmRleCwgYnV0IG5vdCBhdCBzdGFnZSAlZFxuIgorImhpbnQ6IERpZCB5b3UgbWVhbiAnOiVkOiVzJz8iCittc2dzdHIgIiIKKyJpbCBwZXJjb3JzbyAnJXMnIMOoIG5lbGwnaW5kaWNlLCBtYSBub24gbmVsIHBhc3NvICVkXG4iCisic3VnZ2VyaW1lbnRvOiBGb3JzZSBpbnRlbmRldmkgJzolZDolcyc/IgorCisjOiBzaGExLW5hbWUuYzoxNzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXRoICclcycgaXMgaW4gdGhlIGluZGV4LCBidXQgbm90ICclcydcbiIKKyJoaW50OiBEaWQgeW91IG1lYW4gJzolZDolcycgYWthICc6JWQ6Li8lcyc/IgorbXNnc3RyICIiCisiaWwgcGVyY29yc28gJyVzJyDDqCBuZWxsJ2luZGljZSwgbWEgbm9uICclcydcbiIKKyJzdWdnZXJpbWVudG86IEZvcnNlIGludGVuZGV2aSAnOiVkOiVzJyBvc3NpYSAnOiVkOi4vJXMnPyIKKworIzogc2hhMS1uYW1lLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gdGhlIGluZGV4IgorbXNnc3RyICJpbCBwZXJjb3JzbyAnJXMnIGVzaXN0ZSBzdSBkaXNjbywgbWEgbm9uIG5lbGwnaW5kaWNlIgorCisjOiBzaGExLW5hbWUuYzoxNzU4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCAobmVpdGhlciBvbiBkaXNrIG5vciBpbiB0aGUgaW5kZXgpIgorbXNnc3RyICJpbCBwZXJjb3JzbyAnJXMnIG5vbiBlc2lzdGUgKG7DqSBzdSBkaXNjbyBuw6kgbmVsbCdpbmRpY2UpIgorCisjOiBzaGExLW5hbWUuYzoxNzcxCittc2dpZCAicmVsYXRpdmUgcGF0aCBzeW50YXggY2FuJ3QgYmUgdXNlZCBvdXRzaWRlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorImxhIHNpbnRhc3NpIHBlciBpIHBlcmNvcnNpIHJlbGF0aXZpIG5vbiBwdcOyIGVzc2VyZSB1c2F0YSBhbCBkaSBmdW9yaSAiCisiZGVsbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBzaGExLW5hbWUuYzoxOTA5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IG5hbWUgJyUuKnMnLiIKK21zZ3N0ciAibm9tZSBvZ2dldHRvIG5vbiB2YWxpZG86ICclLipzJy4iCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZQorIzogc3RyYnVmLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEdpQiIKK21zZ3N0ciAiJXUuJTIuMnUgR2lCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCL3MiCittc2dzdHIgIiV1LiUyLjJ1IEdpQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUKKyM6IHN0cmJ1Zi5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIiCittc2dzdHIgIiV1LiUyLjJ1IE1pQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQi9zIgorbXNnc3RyICIldS4lMi4ydSBNaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlCisjOiBzdHJidWYuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCIgorbXNnc3RyICIldS4lMi4ydSBLaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBLaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgS2lCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlCisjOiBzdHJidWYuYzo4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiJXUgYnl0ZXMiCittc2dzdHJbMF0gIiV1IGJ5dGUiCittc2dzdHJbMV0gIiV1IGJ5dGUiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUvcyIKK21zZ2lkX3BsdXJhbCAiJXUgYnl0ZXMvcyIKK21zZ3N0clswXSAiJXUgYnl0ZS9zIgorbXNnc3RyWzFdICIldSBieXRlL3MiCisKKyM6IHN0cmJ1Zi5jOjExNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGVkaXQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbW9kaWZpY2FyZSAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxMTQgc3VibW9kdWxlLmM6MTQzCittc2dpZCAiQ2Fubm90IGNoYW5nZSB1bm1lcmdlZCAuZ2l0bW9kdWxlcywgcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMgZmlyc3QiCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBtb2RpZmljYXJlIGlsIGZpbGUgLmdpdG1vZHVsZXMgbm9uIHNvdHRvcG9zdG8gYSBtZXJnZSwgcmlzb2x2aSAiCisicHJpbWEgaSBjb25mbGl0dGkgZGkgbWVyZ2UiCisKKyM6IHN1Ym1vZHVsZS5jOjExOCBzdWJtb2R1bGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIHVuYSBzZXppb25lIGluIC5naXRtb2R1bGVzIGRvdmUgcGF0aD0lcyIKKworIzogc3VibW9kdWxlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSByaW11b3ZlcmUgbGEgdm9jZSAuZ2l0bW9kdWxlcyBwZXIgJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjE2NQorbXNnaWQgInN0YWdpbmcgdXBkYXRlZCAuZ2l0bW9kdWxlcyBmYWlsZWQiCittc2dzdHIgInN0YWdpbmcgZGVsIGZpbGUgLmdpdG1vZHVsZXMgYWdnaW9ybmF0byBub24gcml1c2NpdG8iCisKKyM6IHN1Ym1vZHVsZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJpbiB1bnBvcHVsYXRlZCBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAibmVsIHNvdHRvbW9kdWxvIG5vbiBwb3BvbGF0byAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzozNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0aHNwZWMgJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICJMbyBzcGVjaWZpY2F0b3JlIHBlcmNvcnNvICclcycgw6ggbmVsIHNvdHRvbW9kdWxvICclLipzJyIKKworIzogc3VibW9kdWxlLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLWlnbm9yZS1zdWJtb2R1bGVzIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJnb21lbnRvIC0taWdub3JlLXN1Ym1vZHVsZXMgZXJyYXRvOiAlcyIKKworIzogc3VibW9kdWxlLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgaW4gY29tbWl0ICVzIGF0IHBhdGg6ICclcycgY29sbGlkZXMgd2l0aCBhIHN1Ym1vZHVsZSBuYW1lZCB0aGUgIgorInNhbWUuIFNraXBwaW5nIGl0LiIKK21zZ3N0ciAiIgorIklsIHNvdHRvbW9kdWxvIG5lbCBjb21taXQgJXMgZSBuZWwgcGVyY29yc28gJyVzJyBjb2xsaWRlIGNvbiB1biBzb3R0b21vZHVsbyAiCisiY29uIGxvIHN0ZXNzbyBub21lLiBMbyBzYWx0by4iCisKKyM6IHN1Ym1vZHVsZS5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZW50cnkgJyVzJyAoJXMpIGlzIGEgJXMsIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAibGEgdm9jZSBzb3R0b21vZHVsbyAnJXMnICglcykgw6ggdW4gJXMsIG5vbiB1biBjb21taXQiCisKKyM6IHN1Ym1vZHVsZS5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0IDxjb21taXRzPiAtLW5vdCAtLXJlbW90ZXMgLW4gMScgY29tbWFuZCBpbiAiCisic3VibW9kdWxlICVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgY29tYW5kbyAnZ2l0IHJldi1saXN0IDxjb21taXQ+IC0tbm90IC0tcmVtb3RlcyAtbiAxJyAiCisibmVsIHNvdHRvbW9kdWxvICVzIgorCisjOiBzdWJtb2R1bGUuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInByb2Nlc3MgZm9yIHN1Ym1vZHVsZSAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiaWwgcHJvY2Vzc28gcGVyIGlsIHNvdHRvbW9kdWxvICclcycgbm9uIMOoIHVzY2l0byBjb24gc3VjY2Vzc28iCisKKyM6IHN1Ym1vZHVsZS5jOjExNDcgYnVpbHRpbi9icmFuY2guYzo2ODAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIwNDUKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmlzb2x2ZXJlIEhFQUQgY29tZSByaWZlcmltZW50byB2YWxpZG8uIgorCisjOiBzdWJtb2R1bGUuYzoxMTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAiUHVzaCBkZWwgc290dG9tb2R1bG8gJyVzJyBpbiBjb3Jzb1xuIgorCisjOiBzdWJtb2R1bGUuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBwdXNoIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsIHB1c2ggZGVsIHNvdHRvbW9kdWxvICclcydcbiIKKworIzogc3VibW9kdWxlLmM6MTQ1MworIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyBzdWJtb2R1bGUgJXMlc1xuIgorbXNnc3RyICJSZWN1cGVybyBkZWwgc290dG9tb2R1bG8gJXMlcyBpbiBjb3Jzb1xuIgorCisjOiBzdWJtb2R1bGUuYzoxNDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhY2Nlc3Mgc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYWNjZWRlcmUgYWwgc290dG9tb2R1bG8gJyVzJ1xuIgorCisjOiBzdWJtb2R1bGUuYzoxNjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvcnMgZHVyaW5nIHN1Ym1vZHVsZSBmZXRjaDpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkVycm9yZSBkdXJhbnRlIGlsIHJlY3VwZXJvIGRlbCBzb3R0b21vZHVsbzpcbiIKKyIlcyIKKworIzogc3VibW9kdWxlLmM6MTY2MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG5vdCByZWNvZ25pemVkIGFzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIiclcycgbm9uIHJpY29ub3NjaXV0byBjb21lIHJlcG9zaXRvcnkgR2l0IgorCisjOiBzdWJtb2R1bGUuYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49MicgaW4gc3VibW9kdWxlICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSAnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj0yJyBuZWwgc290dG9tb2R1bG8gJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49MicgZmFpbGVkIGluIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorIkVzZWN1emlvbmUgZGkgJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49Micgbm9uIHJpdXNjaXRhIG5lbCBzb3R0b21vZHVsbyAlcyIKKworIzogc3VibW9kdWxlLmM6MTgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhdnZpYXJlICdnaXQgc3RhdHVzJyBuZWwgc290dG9tb2R1bG8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTgxMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcnVuICdnaXQgc3RhdHVzJyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgJ2dpdCBzdGF0dXMnIG5lbCBzb3R0b21vZHVsbyAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBhbm51bGxhcmUgbCdpbXBvc3RhemlvbmUgZGVsbCdvcHppb25lIGNvcmUud29ya3RyZWUgbmVsICIKKyJzb3R0b21vZHVsbyAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODU1IHN1Ym1vZHVsZS5jOjIxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbCdhemlvbmUgcmljb3JzaXZhbWVudGUgbmVsIHNvdHRvbW9kdWxvICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjE4NzYKK21zZ2lkICJjb3VsZCBub3QgcmVzZXQgc3VibW9kdWxlIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmlsZSByaXByaXN0aW5hcmUgbCdpbmRpY2UgZGVsIHNvdHRvbW9kdWxvIgorCisjOiBzdWJtb2R1bGUuYzoxOTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGhhcyBkaXJ0eSBpbmRleCIKK21zZ3N0ciAiaWwgc290dG9tb2R1bG8gJyVzJyBoYSBsJ2luZGljZSBzcG9yY28iCisKKyM6IHN1Ym1vZHVsZS5jOjE5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgY291bGQgbm90IGJlIHVwZGF0ZWQuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGlsIHNvdHRvbW9kdWxvICclcycuIgorCisjOiBzdWJtb2R1bGUuYzoyMDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSBnaXQgZGlyICclcycgaXMgaW5zaWRlIGdpdCBkaXIgJyUuKnMnIgorbXNnc3RyICIiCisibGEgZGlyZWN0b3J5IEdpdCBkZWwgc290dG9tb2R1bG8gJyVzJyDDqCBhbGwnaW50ZXJubyBkZWxsYSBkaXJlY3RvcnkgR2l0ICIKKyInJS4qcyciCisKKyM6IHN1Ym1vZHVsZS5jOjIwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKyJyZWxvY2F0ZV9naXRkaXIgbm9uIMOoIHN1cHBvcnRhdGEgcGVyIGlsIHNvdHRvbW9kdWxvICclcycgY29uIHBpw7kgZGkgdW4gIgorImFsYmVybyBkaSBsYXZvcm8iCisKKyM6IHN1Ym1vZHVsZS5jOjIwNzEgc3VibW9kdWxlLmM6MjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIG5hbWUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaWNlcmNhcmUgaWwgbm9tZSBwZXIgaWwgc290dG9tb2R1bG8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MjA3NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBtb3ZlICclcycgaW50byBhbiBleGlzdGluZyBnaXQgZGlyIgorbXNnc3RyICJtaSByaWZpdXRvIGRpIHNwb3N0YXJlICclcycgaW4gdW5hIGRpcmVjdG9yeSBHaXQgZXNpc3RlbnRlIgorCisjOiBzdWJtb2R1bGUuYzoyMDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNaWdyYXRpbmcgZ2l0IGRpcmVjdG9yeSBvZiAnJXMlcycgZnJvbVxuIgorIiclcycgdG9cbiIKKyInJXMnXG4iCittc2dzdHIgIiIKKyJTdG8gbWlncmFuZG8gbGEgZGlyZWN0b3J5IEdpdCBkaSAnJXMlcycgZGFcbiIKKyInJXMnIGFcbiIKKyInJXMnXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjIyMDkKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgbHMtZmlsZXMgaW4gLi4iCittc2dzdHIgImltcG9zc2liaWxlIGF2dmlhcmUgbHMtZmlsZXMgaW4gLi4iCisKKyM6IHN1Ym1vZHVsZS5jOjIyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibHMtdHJlZSByZXR1cm5lZCB1bmV4cGVjdGVkIHJldHVybiBjb2RlICVkIgorbXNnc3RyICJscy10cmVlIGhhIHJlc3RpdHVpdG8gaWwgdmFsb3JlIGRpIHJpdG9ybm8gaW5hdHRlc28gJWQiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgc3VzcGljaW91cyBzdWJtb2R1bGUgbmFtZTogJXMiCittc2dzdHIgImlnbm9ybyB1biBub21lIHNvdHRvbW9kdWxvIHNvc3BldHRvOiAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjMwMworbXNnaWQgIm5lZ2F0aXZlIHZhbHVlcyBub3QgYWxsb3dlZCBmb3Igc3VibW9kdWxlLmZldGNoam9icyIKK21zZ3N0ciAiaSB2YWxvcmkgbmVnYXRpdmkgbm9uIHNvbm8gY29uc2VudGl0aSBwZXIgc3VibW9kdWxlLmZldGNoam9icyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAnJXMnIHdoaWNoIG1heSBiZSBpbnRlcnByZXRlZCBhcyBhIGNvbW1hbmQtbGluZSBvcHRpb246ICVzIgorbXNnc3RyICIiCisiaWdub3JvICclcycgY2hlIHBvdHJlYmJlIGVzc2VyZSBpbnRlcnByZXRhdG8gY29tZSBhcmdvbWVudG8gZGVsbGEgcmlnYSBkaSAiCisiY29tYW5kbzogJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgInZhbG9yZSBub24gdmFsaWRvIHBlciAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIC5naXRtb2R1bGVzIGVudHJ5ICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGxhIHZvY2UgLmdpdG1vZHVsZXMgJXMiCisKKyM6IHRyYWlsZXIuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiCittc2dzdHIgImVzZWN1emlvbmUgZGVsIGNvbWFuZG8gZmluYWxlICclcycgbm9uIHJpdXNjaXRhIgorCisjOiB0cmFpbGVyLmM6NDg1IHRyYWlsZXIuYzo0OTAgdHJhaWxlci5jOjQ5NSB0cmFpbGVyLmM6NTQ5IHRyYWlsZXIuYzo1NTMKKyM6IHRyYWlsZXIuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAidmFsb3JlICclcycgc2Nvbm9zY2l1dG8gcGVyIGxhIGNoaWF2ZSAnJXMnIgorCisjOiB0cmFpbGVyLmM6NTM5IHRyYWlsZXIuYzo1NDQgYnVpbHRpbi9yZW1vdGUuYzoyOTggYnVpbHRpbi9yZW1vdGUuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAicGnDuSBkaSB1biAlcyIKKworIzogdHJhaWxlci5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIgorbXNnc3RyICJ0b2tlbiBmaW5hbGUgdnVvdG8gbmVsbGEgc3RyaW5nYSBmaW5hbGUgJyUuKnMnIgorCisjOiB0cmFpbGVyLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBmaWxlIGRpIGlucHV0ICclcyciCisKKyM6IHRyYWlsZXIuYzo3NTMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGRhbGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiB0cmFpbGVyLmM6MTAxMSB3cmFwcGVyLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBsbyBzdGF0IGRpICclcyciCisKKyM6IHRyYWlsZXIuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IGEgcmVndWxhciBmaWxlIgorbXNnc3RyICJpbCBmaWxlICVzIG5vbiDDqCB1biBmaWxlIHJlZ29sYXJlIgorCisjOiB0cmFpbGVyLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCB3cml0YWJsZSBieSB1c2VyIgorbXNnc3RyICJpbCBmaWxlICVzIG5vbiDDqCBzY3JpdmliaWxlIGRhbGwndXRlbnRlIgorCisjOiB0cmFpbGVyLmM6MTAyNworbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgdW4gZmlsZSB0ZW1wb3JhbmVvIgorCisjOiB0cmFpbGVyLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaWRlbm9taW5hcmUgaWwgZmlsZSB0ZW1wb3JhbmVvIGluICVzIgorCisjOiB0cmFuc3BvcnQuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2V0IHVwc3RyZWFtIG9mICclcycgdG8gJyVzJyBvZiAnJXMnXG4iCittc2dzdHIgIkwndXBzdHJlYW0gZGkgJyVzJyBzYXJlYmJlIGltcG9zdGF0byBhICclcycgZGkgJyVzJ1xuIgorCisjOiB0cmFuc3BvcnQuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgYnVuZGxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgYnVuZGxlICclcyciCisKKyM6IHRyYW5zcG9ydC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQ6IGludmFsaWQgZGVwdGggb3B0aW9uICclcyciCittc2dzdHIgInRyYXNwb3J0bzogb3B6aW9uZSBwcm9mb25kaXTDoCAnJXMnIG5vbiB2YWxpZGEiCisKKyM6IHRyYW5zcG9ydC5jOjI2NgorbXNnaWQgInNlZSBwcm90b2NvbC52ZXJzaW9uIGluICdnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGRldGFpbHMiCittc2dzdHIgInZlZGkgcHJvdG9jb2wudmVyc2lvbiBpbiAnZ2l0IGhlbHAgY29uZmlnJyBwZXIgbWFnZ2lvcmkgZGV0dGFnbGkiCisKKyM6IHRyYW5zcG9ydC5jOjI2NworbXNnaWQgInNlcnZlciBvcHRpb25zIHJlcXVpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGxhdGVyIgorbXNnc3RyICJsZSBvcHppb25pIHNlcnZlciByaWNoaWVkb25vIGxhIHZlcnNpb25lIDIgbyBzdWNjZXNzaXZhIGRlbCBwcm90b2NvbGxvIgorCisjOiB0cmFuc3BvcnQuYzo2MzIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgdHJhbnNwb3J0LmNvbG9yLiogY29uZmlnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGxhIGNvbmZpZ3VyYXppb25lIHRyYW5zcG9ydC5jb2xvci4qIgorCisjOiB0cmFuc3BvcnQuYzo3MDUKK21zZ2lkICJzdXBwb3J0IGZvciBwcm90b2NvbCB2MiBub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICJzdXBwb3J0byBhbGxhIHZlcnNpb25lIDIgZGVsIHByb3RvY29sbG8gbm9uIGFuY29yYSBpbXBsZW1lbnRhdG8iCisKKyM6IHRyYW5zcG9ydC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGZvciBjb25maWcgJyVzJzogJXMiCittc2dzdHIgInZhbG9yZSBzY29ub3NjaXV0byBwZXIgbGEgY29uZmlndXJhemlvbmUgJyVzJzogJXMiCisKKyM6IHRyYW5zcG9ydC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAidHJhc3BvcnRvICclcycgbm9uIGNvbnNlbnRpdG8iCisKKyM6IHRyYW5zcG9ydC5jOjk0OQorbXNnaWQgImdpdC1vdmVyLXJzeW5jIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiCittc2dzdHIgImdpdC1vdmVyLXJzeW5jIG5vbiDDqCBwacO5IHN1cHBvcnRhdG8iCisKKyM6IHRyYW5zcG9ydC5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgc3VibW9kdWxlIHBhdGhzIGNvbnRhaW4gY2hhbmdlcyB0aGF0IGNhblxuIgorIm5vdCBiZSBmb3VuZCBvbiBhbnkgcmVtb3RlOlxuIgorbXNnc3RyICIiCisiSSBzZWd1ZW50aSBwZXJjb3JzaSBzb3R0b21vZHVsbyBjb250ZW5nb25vIG1vZGlmaWNoZVxuIgorIm5vbiB0cm92YXRlIHN1IG5lc3N1biByZW1vdG86XG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBsZWFzZSB0cnlcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisidG8gcHVzaCB0aGVtIHRvIGEgcmVtb3RlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiUHJvdmFcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm8gZXNlZ3VpIHVuIGNkIGFsIHBlcmNvcnNvIGUgdXNhXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorInBlciBlc2VndWlybmUgaWwgcHVzaCBhIHVuIHJlbW90by5cbiIKKyJcbiIKKworIzogdHJhbnNwb3J0LmM6MTA1NgorbXNnaWQgIkFib3J0aW5nLiIKK21zZ3N0ciAiSW50ZXJyb21wbyBsJ29wZXJhemlvbmUuIgorCisjOiB0cmFuc3BvcnQuYzoxMjAxCittc2dpZCAiZmFpbGVkIHRvIHB1c2ggYWxsIG5lZWRlZCBzdWJtb2R1bGVzIgorbXNnc3RyICJwdXNoIGRpIHR1dHRpIGkgc290dG9tb2R1bGkgcmljaGllc3RpIG5vbiByaXVzY2l0byIKKworIzogdHJhbnNwb3J0LmM6MTM0NSB0cmFuc3BvcnQtaGVscGVyLmM6NjU3Cittc2dpZCAib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgIm9wZXJhemlvbmUgbm9uIHN1cHBvcnRhdGEgZGFsIHByb3RvY29sbG8iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MSB0cmFuc3BvcnQtaGVscGVyLmM6OTAKK21zZ2lkICJmdWxsIHdyaXRlIHRvIHJlbW90ZSBoZWxwZXIgZmFpbGVkIgorbXNnc3RyICJzY3JpdHR1cmEgY29tcGxldGEgdmVyc28gbCdoZWxwZXIgcmVtb3RvIG5vbiByaXVzY2l0YSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCByZW1vdGUgaGVscGVyIGZvciAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSB0cm92YXJlIGwnaGVscGVyIHJlbW90byBwZXIgJyVzJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE2MCB0cmFuc3BvcnQtaGVscGVyLmM6NTcxCittc2dpZCAiY2FuJ3QgZHVwIGhlbHBlciBvdXRwdXQgZmQiCittc2dzdHIgImltcG9zc2liaWxlIGR1cGxpY2FyZSBpbCBkZXNjcml0dG9yZSBmaWxlIGRlbGwnb3V0cHV0IGhlbHBlciIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBtYW5kYXRvcnkgY2FwYWJpbGl0eSAlczsgdGhpcyByZW1vdGUgaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyICIKKyJ2ZXJzaW9uIG9mIEdpdCIKK21zZ3N0ciAiIgorImNhcGFiaWxpdHkgbmVjZXNzYXJpYSAlcyBzY29ub3NjaXV0YTsgcXVlc3QnaGVscGVyIHJlbW90byBwcm9iYWJpbG1lbnRlICIKKyJyaWNoaWVkZSB1bmEgdmVyc2lvbmUgZGkgR2l0IHBpw7kgcmVjZW50ZSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxNworbXNnaWQgInRoaXMgcmVtb3RlIGhlbHBlciBzaG91bGQgaW1wbGVtZW50IHJlZnNwZWMgY2FwYWJpbGl0eSIKK21zZ3N0ciAicXVlc3RvIGhlbHBlciByZW1vdG8gZG92cmViYmUgaW1wbGVtZW50YXJlIGxhIGNhcGFiaWxpdHkgcmVmc3BlYyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjI4NCB0cmFuc3BvcnQtaGVscGVyLmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHVuZXhwZWN0ZWRseSBzYWlkOiAnJXMnIgorbXNnc3RyICIlcyBoYSBpbnZpYXRvIHVuIG1lc3NhZ2dpbyBpbmF0dGVzbzogJyVzJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHNvIGxvY2tlZCAlcyIKK21zZ3N0ciAiJXMgaGEgYmxvY2NhdG8gYW5jaGUgJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0OTMKK21zZ2lkICJjb3VsZG4ndCBydW4gZmFzdC1pbXBvcnQiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGZhc3QtaW1wb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTE2Cittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWltcG9ydCIKK21zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbCdlc2VjdXppb25lIGRpIGZhc3QtaW1wb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTQ1IHRyYW5zcG9ydC1oZWxwZXIuYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCByaWZlcmltZW50byAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIgorbXNnc3RyICJyaXNwb3N0YSBpbmF0dGVzYSBhIGNvbm5lY3Q6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEyCittc2dpZCAic2V0dGluZyByZW1vdGUgc2VydmljZSBwYXRoIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgIiIKKyJsJ2ltcG9zdGF6aW9uZSBkZWwgcGVyY29yc28gZGVsIHNlcnZpemlvIHJlbW90byBub24gw6ggc3VwcG9ydGF0YSBkYWwgIgorInByb3RvY29sbG8iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTQKK21zZ2lkICJpbnZhbGlkIHJlbW90ZSBzZXJ2aWNlIHBhdGgiCittc2dzdHIgInBlcmNvcnNvIHNlcnZpemlvIHJlbW90byBub24gdmFsaWRvIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNvbm5lY3QgdG8gc3Vic2VydmljZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY29ubmV0dGVyc2kgYWwgc290dG9zZXJ2aXppbyAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBvay9lcnJvciwgaGVscGVyIHNhaWQgJyVzJyIKK21zZ3N0ciAiYXR0ZXNpIG9rL2Vycm9yLCBsJ2hlbHBlciBoYSBpbnZpYXRvICclcyciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyIHJlcG9ydGVkIHVuZXhwZWN0ZWQgc3RhdHVzIG9mICVzIgorbXNnc3RyICJsJ2hlbHBlciBoYSBzZWduYWxhdG8gdW5vIHN0YXRvIGluYXR0ZXNvIGRpICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODUwCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IGRyeS1ydW4iCittc2dzdHIgImwnaGVscGVyICVzIG5vbiBzdXBwb3J0YSBkcnktcnVuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIgorbXNnc3RyICJsJ2hlbHBlciAlcyBub24gc3VwcG9ydGEgLS1zaWduZWQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQ9aWYtYXNrZWQiCittc2dzdHIgImwnaGVscGVyICVzIG5vbiBzdXBwb3J0YSAtLXNpZ25lZD1pZi1hc2tlZCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyIKK21zZ3N0ciAibCdoZWxwZXIgJXMgbm9uIHN1cHBvcnRhIC0tYXRvbWljIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdwdXNoLW9wdGlvbiciCittc2dzdHIgImwnaGVscGVyICVzIG5vbiBzdXBwb3J0YSAncHVzaC1vcHRpb24nIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTY1Cittc2dpZCAicmVtb3RlLWhlbHBlciBkb2Vzbid0IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiCittc2dzdHIgIiIKKyJsJ2hlbHBlciByZW1vdG8gbm9uIHN1cHBvcnRhIGlsIHB1c2g7IMOoIG5lY2Vzc2FyaW8gdW5vIHNwZWNpZmljYXRvcmUgIgorInJpZmVyaW1lbnRvIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTcwCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdmb3JjZSciCittc2dzdHIgImwnaGVscGVyICVzIG5vbiBzdXBwb3J0YSAnZm9yY2UnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAxNworbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgZmFzdC1leHBvcnQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDIyCittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWV4cG9ydCIKK21zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbCdlc2VjdXppb25lIGRpIGZhc3QtZXhwb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTA0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgorIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iCittc2dzdHIgIiIKKyJOZXNzdW4gcmlmZXJpbWVudG8gaW4gY29tdW5lIGUgbmVzc3VubyBzcGVjaWZpY2F0bzsgbm9uIGVzZWd1byBudWxsYS5cbiIKKyJGb3JzZSBkb3ZyZXN0aSBzcGVjaWZpY2FyZSB1biBicmFuY2ggY29tZSAnbWFzdGVyJy5cbiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHJlc3BvbnNlIGluIHJlZiBsaXN0OiAlcyIKK21zZ3N0ciAicmlzcG9zdGEgbWFsZm9ybWF0YSBuZWxsJ2VsZW5jbyByaWZlcmltZW50aTogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQoJXMpIGZhaWxlZCIKK21zZ3N0ciAicmVhZCglcykgbm9uIHJpdXNjaXRhIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3cml0ZSglcykgZmFpbGVkIgorbXNnc3RyICJ3cml0ZSglcykgbm9uIHJpdXNjaXRhIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIgorbXNnc3RyICJ0aHJlYWQgJXMgbm9uIHJpdXNjaXRvIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIHRvIGpvaW46ICVzIgorbXNnc3RyICJqb2luIG5vbiByaXVzY2l0YSBwZXIgaWwgdGhyZWFkICVzOiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNzEgdHJhbnNwb3J0LWhlbHBlci5jOjEzNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGE6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhdnZpYXJlIGlsIHRocmVhZCBwZXIgbGEgY29waWEgZGVpIGRhdGk6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCB0byB3YWl0IgorbXNnc3RyICJ3YWl0IG5vbiByaXVzY2l0YSBwZXIgaWwgcHJvY2Vzc28gJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICJwcm9jZXNzbyAlcyBub24gcml1c2NpdG8iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDM0IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDQzCittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGEiCittc2dzdHIgImltcG9zc2liaWxlIGF2dmlhcmUgaWwgdGhyZWFkIHBlciBsYSBjb3BpYSBkZWkgZGF0aSIKKworIzogdHJlZS13YWxrLmM6MzIKK21zZ2lkICJ0b28tc2hvcnQgdHJlZSBvYmplY3QiCittc2dzdHIgIm9nZ2V0dG8gYWxiZXJvIHRyb3BwbyBjb3J0byIKKworIzogdHJlZS13YWxrLmM6MzgKK21zZ2lkICJtYWxmb3JtZWQgbW9kZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICJtb2RvIG1hbGZvcm1hdG8gbmVsbGEgdm9jZSBkZWxsJ2FsYmVybyIKKworIzogdHJlZS13YWxrLmM6NDIKK21zZ2lkICJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICJub21lIGZpbGUgdnVvdG8gbmVsbGEgdm9jZSBkZWxsJ2FsYmVybyIKKworIzogdHJlZS13YWxrLmM6MTE3Cittc2dpZCAidG9vLXNob3J0IHRyZWUgZmlsZSIKK21zZ3N0ciAiZmlsZSBhbGJlciB0cm9wcG8gY29ydG8iCisKKyM6IHVucGFjay10cmVlcy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyJMZSB0dWUgbW9kaWZpY2hlIGxvY2FsaSBhaSBzZWd1ZW50aSBmaWxlIHNhcmViYmVybyBzb3ZyYXNjcml0dGUgY29uIGlsICIKKyJjaGVja291dDpcbiIKKyIlJXNFc2VndWkgaWwgY29tbWl0IG8gbG8gc3Rhc2ggZGVsbGUgbW9kaWZpY2hlIHByaW1hIGRpIGNhbWJpYXJlIGJyYW5jaC4iCisKKyM6IHVucGFjay10cmVlcy5jOjExMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiTGUgdHVlIG1vZGlmaWNoZSBsb2NhbGkgYWkgc2VndWVudGkgZmlsZSBzYXJlYmJlcm8gc292cmFzY3JpdHRlIGNvbiBpbCAiCisiY2hlY2tvdXQ6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJMZSB0dWUgbW9kaWZpY2hlIGxvY2FsaSBhaSBzZWd1ZW50aSBmaWxlIHNhcmViYmVybyBzb3ZyYXNjcml0dGUgY29uIGlsICIKKyJtZXJnZTpcbiIKKyIlJXNFc2VndWkgaWwgY29tbWl0IG8gbG8gc3Rhc2ggZGVsbGUgbW9kaWZpY2hlIHByaW1hIGRpIGVzZWd1aXJlIGlsIG1lcmdlLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJMZSB0dWUgbW9kaWZpY2hlIGxvY2FsaSBhaSBzZWd1ZW50aSBmaWxlIHNhcmViYmVybyBzb3ZyYXNjcml0dGUgY29uIGlsICIKKyJtZXJnZTpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIkxlIHR1ZSBtb2RpZmljaGUgbG9jYWxpIGFpIHNlZ3VlbnRpIGZpbGUgc2FyZWJiZXJvIHNvdnJhc2NyaXR0ZSBjb24gIgorImwnb3BlcmF6aW9uZSBkaSAlczpcbiIKKyIlJXNFc2VndWkgaWwgY29tbWl0IG8gbG8gc3Rhc2ggZGVsbGUgbW9kaWZpY2hlIHByaW1hIGRpIGVzZWd1aXJlICIKKyJsJ29wZXJhemlvbmUgZGkgJXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkxlIHR1ZSBtb2RpZmljaGUgbG9jYWxpIGFpIHNlZ3VlbnRpIGZpbGUgc2FyZWJiZXJvIHNvdnJhc2NyaXR0ZSBjb24gIgorImwnb3BlcmF6aW9uZSBkaSAlczpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVtOlxuIgorIiVzIgorbXNnc3RyICIiCisiTCdhZ2dpb3JuYW1lbnRvIGRlbGxlIHNlZ3VlbnRpIGRpcmVjdG9yeSBmYXJlYmJlIHPDrCBjaGUgZGVpIGZpbGUgbm9uICIKKyJ0cmFjY2lhdGkgaW4gZXNzZSBjb250ZW51dGkgdmVuZ2FubyBwZXJzaTpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyJJIHNlZ3VlbnRpIGZpbGUgbm9uIHRyYWNjaWF0aSBwcmVzZW50aSBuZWxsJ2FsYmVybyBkaSBsYXZvcm8gc2FyZWJiZXJvICIKKyJlbGltaW5hdGkgY29uIGlsIGNoZWNrb3V0OlxuIgorIiUlc1Nwb3N0YWxpIG8gZWxpbWluYWxpIHByaW1hIGRpIGNhbWJpYXJlIGJyYW5jaC4iCisKKyM6IHVucGFjay10cmVlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiSSBzZWd1ZW50aSBmaWxlIG5vbiB0cmFjY2lhdGkgcHJlc2VudGkgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIHNhcmViYmVybyAiCisiZWxpbWluYXRpIGNvbiBpbCBjaGVja291dDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJJIHNlZ3VlbnRpIGZpbGUgbm9uIHRyYWNjaWF0aSBwcmVzZW50aSBuZWxsJ2FsYmVybyBkaSBsYXZvcm8gc2FyZWJiZXJvICIKKyJlbGltaW5hdGkgZGFsIG1lcmdlOlxuIgorIiUlc1Nwb3N0YWxpIG8gZWxpbWluYWxpIHByaW1hIGRpIGVzZWd1aXJlIGlsIG1lcmdlLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJJIHNlZ3VlbnRpIGZpbGUgbm9uIHRyYWNjaWF0aSBwcmVzZW50aSBuZWxsJ2FsYmVybyBkaSBsYXZvcm8gc2FyZWJiZXJvICIKKyJlbGltaW5hdGkgZGFsIG1lcmdlOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIkkgc2VndWVudGkgZmlsZSBub24gdHJhY2NpYXRpIHByZXNlbnRpIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyBzYXJlYmJlcm8gIgorImVsaW1pbmF0aSBjb24gbCdvcGVyYXppb25lIGRpICVzOlxuIgorIiUlc1Nwb3N0YWxpIG8gZWxpbWluYWxpIHByaW1hIGRpIGVzZWd1aXJlIGwnb3BlcmF6aW9uZSBkaSAlcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiSSBzZWd1ZW50aSBmaWxlIG5vbiB0cmFjY2lhdGkgcHJlc2VudGkgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIHNhcmViYmVybyAiCisiZWxpbWluYXRpIGNvbiBsJ29wZXJhemlvbmUgZGkgJXM6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiSSBzZWd1ZW50aSBmaWxlIG5vbiB0cmFjY2lhdGkgcHJlc2VudGkgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIHNhcmViYmVybyAiCisic292cmFzY3JpdHRpIGNvbiBpbCBjaGVja291dDpcbiIKKyIlJXNTcG9zdGFsaSBvIGVsaW1pbmFsaSBwcmltYSBkaSBjYW1iaWFyZSBicmFuY2guIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiSSBzZWd1ZW50aSBmaWxlIG5vbiB0cmFjY2lhdGkgcHJlc2VudGkgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIHNhcmViYmVybyAiCisic292cmFzY3JpdHRpIGNvbiBpbCBjaGVja291dDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiSSBzZWd1ZW50aSBmaWxlIG5vbiB0cmFjY2lhdGkgcHJlc2VudGkgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIHNhcmViYmVybyAiCisic292cmFzY3JpdHRpIGRhbCBtZXJnZTpcbiIKKyIlJXNTcG9zdGFsaSBvIGVsaW1pbmFsaSBwcmltYSBkaSBlc2VndWlyZSBpbCBtZXJnZS4iCisKKyM6IHVucGFjay10cmVlcy5jOjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkkgc2VndWVudGkgZmlsZSBub24gdHJhY2NpYXRpIHByZXNlbnRpIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyBzYXJlYmJlcm8gIgorInNvdnJhc2NyaXR0aSBkYWwgbWVyZ2U6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIkkgc2VndWVudGkgZmlsZSBub24gdHJhY2NpYXRpIHByZXNlbnRpIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyBzYXJlYmJlcm8gIgorInNvdnJhc2NyaXR0aSBjb24gbCdvcGVyYXppb25lIGRpICVzOlxuIgorIiUlc1Nwb3N0YWxpIG8gZWxpbWluYWxpIHByaW1hIGRpIGVzZWd1aXJlIGwnb3BlcmF6aW9uZSBkaSAlcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkkgc2VndWVudGkgZmlsZSBub24gdHJhY2NpYXRpIHByZXNlbnRpIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyBzYXJlYmJlcm8gIgorInNvdnJhc2NyaXR0aSBjb24gbCdvcGVyYXppb25lIGRpICVzOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudHJ5ICclcycgb3ZlcmxhcHMgd2l0aCAnJXMnLiAgQ2Fubm90IGJpbmQuIgorbXNnc3RyICIiCisiTGEgdm9jZSAnJXMnIHNpIHNvdnJhcHBvbmUgYSAnJXMnLiBJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBjb2xsZWdhbWVudG8uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0OiB0aGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIG5vdCB1cCB0byBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgYWdnaW9ybmFyZSBpbCBjaGVja291dCBzcGFyc2U6IGxlIHNlZ3VlbnRpIHZvY2kgbm9uIHNvbm8gIgorImFnZ2lvcm5hdGU6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgc3BhcnNlIGNoZWNrb3V0ICIKKyJ1cGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJJIHNlZ3VlbnRpIGZpbGUgZGVsbCdhbGJlcm8gZGkgbGF2b3JvIHNhcmViYmVybyBzb3ZyYXNjcml0dGkgY29uICIKKyJsJ2FnZ2lvcm5hbWVudG8gZGVsIGNoZWNrb3V0IHNwYXJzZTpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiSSBzZWd1ZW50aSBmaWxlIGRlbGwnYWxiZXJvIGRpIGxhdm9ybyBzYXJlYmJlcm8gZWxpbWluYXRpIGNvbiAiCisibCdhZ2dpb3JuYW1lbnRvIGRlbCBjaGVja291dCBzcGFyc2U6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBzdWJtb2R1bGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGlsIHNvdHRvbW9kdWxvOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmdcbiIKK21zZ3N0ciAiSW50ZXJyb21wbyBsJ29wZXJhemlvbmVcbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MzE3Cittc2dpZCAiVXBkYXRpbmcgZmlsZXMiCittc2dzdHIgIkFnZ2lvcm5hbWVudG8gZGVpIGZpbGUgaW4gY29yc28iCisKKyM6IHVucGFjay10cmVlcy5jOjM0OQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHBhdGhzIGhhdmUgY29sbGlkZWQgKGUuZy4gY2FzZS1zZW5zaXRpdmUgcGF0aHNcbiIKKyJvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSkgYW5kIG9ubHkgb25lIGZyb20gdGhlIHNhbWVcbiIKKyJjb2xsaWRpbmcgZ3JvdXAgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZTpcbiIKK21zZ3N0ciAiIgorImkgc2VndWVudGkgcGVyY29yc2kgc29ubyBlbnRyYXRpIGluIGNvbmZsaXR0byAoYWQgZXMuIHNlIGNpXG4iCisic29ubyBwZXJjb3JzaSBjaGUgZGlmZmVyaXNjb25vIHNvbG8gcGVyIGxlIG1haXVzY29sZS9taW51c2NvbGVcbiIKKyJzdSB1biBmaWxlc3lzdGVtIG5vbiBzZW5zaWJpbGUgYSB0YWxlIGRpZmZlcmVuemEpIGUgc29sbyB1bm9cbiIKKyJwZXIgZ3J1cHBvIGluIGNvbmZsaXR0byDDqCBuZWxsJ2FsYmVybyBkaSBsYXZvcm86XG4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0NDUKK21zZ2lkICJVcGRhdGluZyBpbmRleCBmbGFncyIKK21zZ3N0ciAiQWdnaW9ybmFtZW50byBkZWkgY29udHJhc3NlZ25pIGluZGljZSBpbiBjb3JzbyIKKworIzogdXJsbWF0Y2guYzoxNjMKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAibm9tZSBzY2hlbWEgVVJMIG5vbiB2YWxpZG8gbyBzdWZmaXNzbyAnOi8vJyBtYW5jYW50ZSIKKworIzogdXJsbWF0Y2guYzoxODcgdXJsbWF0Y2guYzozNDYgdXJsbWF0Y2guYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlWFggZXNjYXBlIHNlcXVlbmNlIgorbXNnc3RyICJzZXF1ZW56YSBkaSBlc2NhcGUgJVhYIG5vbiB2YWxpZGEiCisKKyM6IHVybG1hdGNoLmM6MjE1Cittc2dpZCAibWlzc2luZyBob3N0IGFuZCBzY2hlbWUgaXMgbm90ICdmaWxlOiciCittc2dzdHIgImhvc3QgbWFuY2FudGUgZSBsbyBzY2hlbWEgbm9uIMOoICdmaWxlOiciCisKKyM6IHVybG1hdGNoLmM6MjMyCittc2dpZCAiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIKK21zZ3N0ciAidW4gVVJMICdmaWxlOicgbm9uIHB1w7IgYXZlcmUgdW4gbnVtZXJvIGRpIHBvcnRhIgorCisjOiB1cmxtYXRjaC5jOjI0NworbXNnaWQgImludmFsaWQgY2hhcmFjdGVycyBpbiBob3N0IG5hbWUiCittc2dzdHIgImNhcmF0dGVyaSBub24gdmFsaWRpIG5lbCBub21lIGhvc3QiCisKKyM6IHVybG1hdGNoLmM6MjkyIHVybG1hdGNoLmM6MzAzCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAibnVtZXJvIGRpIHBvcnRhIG5vbiB2YWxpZG8iCisKKyM6IHVybG1hdGNoLmM6MzcxCittc2dpZCAiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIKK21zZ3N0ciAicGFydGUgcGVyY29yc28gJy4uJyBub24gdmFsaWRhIgorCisjOiB3YWxrZXIuYzoxNzAKK21zZ2lkICJGZXRjaGluZyBvYmplY3RzIgorbXNnc3RyICJSZWN1cGVybyBvZ2dldHRpIGluIGNvcnNvIgorCisjOiB3b3JrdHJlZS5jOjI1OSBidWlsdGluL2FtLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICJsZXR0dXJhIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiB3b3JrdHJlZS5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGF0IG1haW4gd29ya2luZyB0cmVlIGlzIG5vdCB0aGUgcmVwb3NpdG9yeSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyInJXMnIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyBwcmluY2lwYWxlIG5vbiDDqCBsYSBkaXJlY3RvcnkgZGVsIHJlcG9zaXRvcnkiCisKKyM6IHdvcmt0cmVlLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsZSBkb2VzIG5vdCBjb250YWluIGFic29sdXRlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZSBsb2NhdGlvbiIKK21zZ3N0ciAiIgorImlsIGZpbGUgJyVzJyBub24gY29udGllbmUgaWwgcGVyY29yc28gYXNzb2x1dG8gYWxsYSBwb3NpemlvbmUgZGVsbCdhbGJlcm8gZGkgIgorImxhdm9ybyIKKworIzogd29ya3RyZWUuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiJyVzJyBub24gZXNpc3RlIgorCisjOiB3b3JrdHJlZS5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIC5naXQgZmlsZSwgZXJyb3IgY29kZSAlZCIKK21zZ3N0ciAiJyVzJyBub24gw6ggdW4gZmlsZSAuZ2l0LCBjb2RpY2UgZCdlcnJvcmUgJWQiCisKKyM6IHdvcmt0cmVlLmM6MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgYmFjayB0byAnJXMnIgorbXNnc3RyICInJXMnIG5vbiBwdW50YSBhICclcyciCisKKyM6IHdyYXBwZXIuYzoxODYgd3JhcHBlci5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgJyVzJyBpbiBsZXR0dXJhIGUgc2NyaXR0dXJhIgorCisjOiB3cmFwcGVyLmM6Mzg3IHdyYXBwZXIuYzo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhY2NlZGVyZSBhICclcyciCisKKyM6IHdyYXBwZXIuYzo1OTYKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImltcG9zc2liaWxlIG90dGVuZXJlIGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8gY29ycmVudGUiCisKKyM6IHd0LXN0YXR1cy5jOjE1OAorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiUGVyY29yc2kgbm9uIHNvdHRvcG9zdGkgYSBtZXJnZToiCisKKyM6IHd0LXN0YXR1cy5jOjE4NyB3dC1zdGF0dXMuYzoyMTkKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHBlciByaW11b3ZlcmUgZ2xpIGVsZW1lbnRpICIKKyJkYWxsJ2FyZWEgZGkgc3RhZ2luZykiCisKKyM6IHd0LXN0YXR1cy5jOjE5MCB3dC1zdGF0dXMuYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc3RvcmUgLS1zb3VyY2U9JXMgLS1zdGFnZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKyIgICh1c2EgXCJnaXQgcmVzdG9yZSAtLXNvdXJjZT0lcyAtLXN0YWdlZCA8ZmlsZT4uLi5cIiBwZXIgcmltdW92ZXJlIGdsaSAiCisiZWxlbWVudGkgZGFsbCdhcmVhIGRpIHN0YWdpbmcpIgorCisjOiB3dC1zdGF0dXMuYzoxOTMgd3Qtc3RhdHVzLmM6MjI1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHBlciByaW11b3ZlcmUgZ2xpIGVsZW1lbnRpIGRhbGwnYXJlYSBkaSAiCisic3RhZ2luZykiCisKKyM6IHd0LXN0YXR1cy5jOjE5NworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgcGVyIGNvbnRyYXNzZWduYXJlIGlsIGNvbmZsaXR0byBjb21lIHJpc29sdG8pIgorCisjOiB3dC1zdGF0dXMuYzoxOTkgd3Qtc3RhdHVzLmM6MjAzCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBjb21lIGFwcHJvcHJpYXRvIHBlciBjb250cmFzc2VnbmFyZSBpbCAiCisiY29uZmxpdHRvIGNvbWUgcmlzb2x0bykiCisKKyM6IHd0LXN0YXR1cy5jOjIwMQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHBlciBjb250cmFzc2VnbmFyZSBpbCBjb25mbGl0dG8gY29tZSByaXNvbHRvKSIKKworIzogd3Qtc3RhdHVzLmM6MjExIHd0LXN0YXR1cy5jOjEwNzQKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIk1vZGlmaWNoZSBkaSBjdWkgdmVycsOgIGVzZWd1aXRvIGlsIGNvbW1pdDoiCisKKyM6IHd0LXN0YXR1cy5jOjIzNCB3dC1zdGF0dXMuYzoxMDgzCittc2dpZCAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IgorbXNnc3RyICJNb2RpZmljaGUgbm9uIG5lbGwnYXJlYSBkaSBzdGFnaW5nIHBlciBpbCBjb21taXQ6IgorCisjOiB3dC1zdGF0dXMuYzoyMzgKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgcGVyIGFnZ2lvcm5hcmUgZ2xpIGVsZW1lbnRpIGRpIGN1aSBzYXLDoCAiCisiZXNlZ3VpdG8gaWwgY29tbWl0KSIKKworIzogd3Qtc3RhdHVzLmM6MjQwCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgICh1c2EgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHBlciBhZ2dpb3JuYXJlIGdsaSBlbGVtZW50aSBkaSBjdWkgc2Fyw6AgIgorImVzZWd1aXRvIGlsIGNvbW1pdCkiCisKKyM6IHd0LXN0YXR1cy5jOjI0MQorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmVzdG9yZSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uXCIgcGVyIHNjYXJ0YXJlIGxlIG1vZGlmaWNoZSBuZWxsYSBkaXJlY3RvcnkgIgorImRpIGxhdm9ybykiCisKKyM6IHd0LXN0YXR1cy5jOjI0MworbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorIiAgKGVzZWd1aSBpbCBjb21taXQgbyBzY2FydGEgaWwgY29udGVudXRvIG5vbiB0cmFjY2lhdG8gbyBtb2RpZmljYXRvIG5laSAiCisic290dG9tb2R1bGkpIgorCisjOiB3dC1zdGF0dXMuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgICh1c2EgXCJnaXQgJXMgPGZpbGU+Li4uXCIgcGVyIGluY2x1ZGVyZSBsJ2VsZW1lbnRvIGZyYSBxdWVsbGkgZGkgY3VpIHZlcnLDoCAiCisiZXNlZ3VpdG8gaWwgY29tbWl0KSIKKworIzogd3Qtc3RhdHVzLmM6MjY4Cittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAiZW50cmFtYmkgZWxpbWluYXRpOiIKKworIzogd3Qtc3RhdHVzLmM6MjcwCittc2dpZCAiYWRkZWQgYnkgdXM6IgorbXNnc3RyICJhZ2dpdW50byBkYSBub2k6IgorCisjOiB3dC1zdGF0dXMuYzoyNzIKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICJlbGltaW5hdG8gZGEgbG9ybzoiCisKKyM6IHd0LXN0YXR1cy5jOjI3NAorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICJhZ2dpdW50byBkYSBsb3JvOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc2Cittc2dpZCAiZGVsZXRlZCBieSB1czoiCittc2dzdHIgImVsaW1pbmF0byBkYSBub2k6IgorCisjOiB3dC1zdGF0dXMuYzoyNzgKK21zZ2lkICJib3RoIGFkZGVkOiIKK21zZ3N0ciAiZW50cmFtYmkgYWdnaXVudGk6IgorCisjOiB3dC1zdGF0dXMuYzoyODAKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAiZW50cmFtYmkgbW9kaWZpY2F0aToiCisKKyM6IHd0LXN0YXR1cy5jOjI5MAorbXNnaWQgIm5ldyBmaWxlOiIKK21zZ3N0ciAibnVvdm8gZmlsZToiCisKKyM6IHd0LXN0YXR1cy5jOjI5MgorbXNnaWQgImNvcGllZDoiCittc2dzdHIgImNvcGlhdG86IgorCisjOiB3dC1zdGF0dXMuYzoyOTQKK21zZ2lkICJkZWxldGVkOiIKK21zZ3N0ciAiZWxpbWluYXRvOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk2Cittc2dpZCAibW9kaWZpZWQ6IgorbXNnc3RyICJtb2RpZmljYXRvOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk4Cittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgInJpbm9taW5hdG86IgorCisjOiB3dC1zdGF0dXMuYzozMDAKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAibW9kaWZpY2EgdGlwbzoiCisKKyM6IHd0LXN0YXR1cy5jOjMwMgorbXNnaWQgInVua25vd246IgorbXNnc3RyICJzY29ub3NjaXV0bzoiCisKKyM6IHd0LXN0YXR1cy5jOjMwNAorbXNnaWQgInVubWVyZ2VkOiIKK21zZ3N0ciAibm9uIHNvdHRvcG9zdG8gYSBtZXJnZToiCisKKyM6IHd0LXN0YXR1cy5jOjM4NAorbXNnaWQgIm5ldyBjb21taXRzLCAiCittc2dzdHIgIm51b3ZpIGNvbW1pdCwgIgorCisjOiB3dC1zdGF0dXMuYzozODYKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgImNvbnRlbnV0byBtb2RpZmljYXRvLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM4OAorbXNnaWQgInVudHJhY2tlZCBjb250ZW50LCAiCittc2dzdHIgImNvbnRlbnV0byBub24gdHJhY2NpYXRvLCAiCisKKyM6IHd0LXN0YXR1cy5jOjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cnkiCittc2dpZF9wbHVyYWwgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyaWVzIgorbXNnc3RyWzBdICJMbyBzdGFzaCBhdHR1YWxtZW50ZSBoYSAlZCB2b2NlIgorbXNnc3RyWzFdICJMbyBzdGFzaCBhdHR1YWxtZW50ZSBoYSAlZCB2b2NpIgorCisjOiB3dC1zdGF0dXMuYzo5MzgKK21zZ2lkICJTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKK21zZ3N0ciAiU290dG9tb2R1bGkgbW9kaWZpY2F0aSBtYSBub24gYWdnaW9ybmF0aToiCisKKyM6IHd0LXN0YXR1cy5jOjk0MAorbXNnaWQgIlN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIk1vZGlmaWNoZSBhaSBzb3R0b21vZHVsaSBkaSBjdWkgdmVycsOgIGVzZWd1aXRvIGlsIGNvbW1pdDoiCisKKyM6IHd0LXN0YXR1cy5jOjEwMjIKK21zZ2lkICIiCisiRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuXG4iCisiRXZlcnl0aGluZyBiZWxvdyBpdCB3aWxsIGJlIGlnbm9yZWQuIgorbXNnc3RyICIiCisiTm9uIG1vZGlmaWNhcmUgbyByaW11b3ZlcmUgbGEgcmlnYSBzb3ByYXN0YW50ZS5cbiIKKyJUdXR0byBjacOyIGNoZSBzaSB0cm92YSBhbCBkaSBzb3R0byBkaSBlc3NhIHNhcsOgIGlnbm9yYXRvLiIKKworIzogd3Qtc3RhdHVzLmM6MTExNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gY29tcHV0ZSB0aGUgYnJhbmNoIGFoZWFkL2JlaGluZCB2YWx1ZXMuXG4iCisiWW91IGNhbiB1c2UgJy0tbm8tYWhlYWQtYmVoaW5kJyB0byBhdm9pZCB0aGlzLlxuIgorbXNnc3RyICIiCisiXG4iCisiU29ubyBzdGF0aSBuZWNlc3NhcmkgJS4yZiBzZWNvbmRpIHBlciBjYWxjb2xhcmUgaWwgbnVtZXJvIGRpIGNvbW1pdFxuIgorInByZWNlZGVudGkvc3VjY2Vzc2l2aSBuZWwgYnJhbmNoLlxuIgorIlB1b2kgdXNhcmUgJy0tbm8tYWhlYWQtYmVoaW5kJyBwZXIgZXZpdGFyZSBpbCBjYWxjb2xvLlxuIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ0Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICJIYWkgZGVpIHBlcmNvcnNpIG5vbiBzb3R0b3Bvc3RpIGEgbWVyZ2UuIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ3Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNvbW1pdFwiKSIKK21zZ3N0ciAiICAocmlzb2x2aSBpIGNvbmZsaXR0aSBlZCBlc2VndWkgXCJnaXQgY29tbWl0XCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ5Cittc2dpZCAiICAodXNlIFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiB0byBhYm9ydCB0aGUgbWVyZ2UpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgbWVyZ2UgLS1hYm9ydFwiIHBlciBpbnRlcnJvbXBlcmUgaWwgbWVyZ2UpIgorCisjOiB3dC1zdGF0dXMuYzoxMTUzCittc2dpZCAiQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLiIKK21zZ3N0ciAiVHV0dGkgaSBjb25mbGl0dGkgc29ubyBzdGF0aSByaXNvbHRpIG1hIGlsIG1lcmdlIMOoIGFuY29yYSBpbiBjb3Jzby4iCisKKyM6IHd0LXN0YXR1cy5jOjExNTYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0XCIgdG8gY29uY2x1ZGUgbWVyZ2UpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgY29tbWl0XCIgcGVyIHRlcm1pbmFyZSBpbCBtZXJnZSkiCisKKyM6IHd0LXN0YXR1cy5jOjExNjUKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4iCittc2dzdHIgIlNlaSBuZWwgYmVsIG1lenpvIGRpIHVuYSBzZXNzaW9uZSBhbS4iCisKKyM6IHd0LXN0YXR1cy5jOjExNjgKK21zZ2lkICJUaGUgY3VycmVudCBwYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgIkxhIHBhdGNoIGNvcnJlbnRlIMOoIHZ1b3RhLiIKKworIzogd3Qtc3RhdHVzLmM6MTE3MgorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHJpc29sdmkgaSBjb25mbGl0dGkgZSBxdWluZGkgZXNlZ3VpIFwiZ2l0IGFtIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjExNzQKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IGFtIC0tc2tpcFwiIHBlciBzYWx0YXJlIHF1ZXN0YSBwYXRjaCkiCisKKyM6IHd0LXN0YXR1cy5jOjExNzYKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKHVzYSBcImdpdCBhbSAtLWFib3J0XCIgcGVyIHJpcHJpc3RpbmFyZSBpbCBicmFuY2ggb3JpZ2luYXJpbykiCisKKyM6IHd0LXN0YXR1cy5jOjEzMDkKK21zZ2lkICJnaXQtcmViYXNlLXRvZG8gaXMgbWlzc2luZy4iCittc2dzdHIgImdpdC1yZWJhc2UtdG9kbyDDqCBtYW5jYW50ZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMTEKK21zZ2lkICJObyBjb21tYW5kcyBkb25lLiIKK21zZ3N0ciAiTmVzc3VuIGNvbWFuZG8gZXNlZ3VpdG8uIgorCisjOiB3dC1zdGF0dXMuYzoxMzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhc3QgY29tbWFuZCBkb25lICglZCBjb21tYW5kIGRvbmUpOiIKK21zZ2lkX3BsdXJhbCAiTGFzdCBjb21tYW5kcyBkb25lICglZCBjb21tYW5kcyBkb25lKToiCittc2dzdHJbMF0gIlVsdGltbyBjb21hbmRvIGVzZWd1aXRvICglZCBjb21hbmRvIGVzZWd1aXRvKToiCittc2dzdHJbMV0gIlVsdGltaSBjb21hbmRpIGVzZWd1aXRpICglZCBjb21hbmRpIGVzZWd1aXRpKToiCisKKyM6IHd0LXN0YXR1cy5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAoc2VlIG1vcmUgaW4gZmlsZSAlcykiCittc2dzdHIgIiAgKHZlZGkgZGkgcGnDuSBuZWwgZmlsZSAlcykiCisKKyM6IHd0LXN0YXR1cy5jOjEzMzAKK21zZ2lkICJObyBjb21tYW5kcyByZW1haW5pbmcuIgorbXNnc3RyICJOZXNzdW4gY29tYW5kbyByaW1hbmVudGUuIgorCisjOiB3dC1zdGF0dXMuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5leHQgY29tbWFuZCB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmQpOiIKK21zZ2lkX3BsdXJhbCAiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiCittc2dzdHJbMF0gIlByb3NzaW1vIGNvbWFuZG8gZGEgZXNlZ3VpcmUgKCVkIGNvbWFuZG8gcmltYW5lbnRlKToiCittc2dzdHJbMV0gIlByb3NzaW1pIGNvbWFuZGkgZGEgZXNlZ3VpcmUgKCVkIGNvbWFuZGkgcmltYW5lbnRpKToiCisKKyM6IHd0LXN0YXR1cy5jOjEzNDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgdG8gdmlldyBhbmQgZWRpdCkiCittc2dzdHIgIiIKKyIgICh1c2EgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgcGVyIHZpc3VhbGl6emFyZSBlIG1vZGlmaWNhcmUgbGUgIgorIm9wZXJhemlvbmkpIgorCisjOiB3dC1zdGF0dXMuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICJBdHR1YWxtZW50ZSBzdGFpIGVzZWd1ZW5kbyBpbCByZWJhc2UgZGVsIGJyYW5jaCAnJXMnIHN1ICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxMzU4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICJBdHR1YWxtZW50ZSBzdGFpIGVzZWd1ZW5kbyB1biByZWJhc2UuIgorCisjOiB3dC1zdGF0dXMuYzoxMzcxCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHJpc29sdmkgaSBjb25mbGl0dGkgZSBxdWluZGkgZXNlZ3VpIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzczCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHBlciBzYWx0YXJlIHF1ZXN0YSBwYXRjaCkiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzUKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiB0byBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiIKKyIgICh1c2EgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiBwZXIgZXNlZ3VpcmUgaWwgY2hlY2tvdXQgZGVsIGJyYW5jaCBvcmlnaW5hcmlvKSIKKworIzogd3Qtc3RhdHVzLmM6MTM4MgorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKHR1dHRpIGkgY29uZmxpdHRpIHNvbm8gc3RhdGkgcmlzb2x0aTogZXNlZ3VpIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJBdHR1YWxtZW50ZSBzdGFpIGRpdmlkZW5kbyB1biBjb21taXQgZHVyYW50ZSBpbCByZWJhc2UgZGVsIGJyYW5jaCAnJXMnIHN1ICIKKyInJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTM5MQorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICJBdHR1YWxtZW50ZSBzdGFpIGRpdmlkZW5kbyB1biBjb21taXQgZHVyYW50ZSB1biByZWJhc2UuIgorCisjOiB3dC1zdGF0dXMuYzoxMzk0Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChVbmEgdm9sdGEgY2hlIGxhIHR1YSBkaXJlY3RvcnkgZGkgbGF2b3JvIMOoIHB1bGl0YSwgZXNlZ3VpIFwiZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisiQXR0dWFsbWVudGUgc3RhaSBtb2RpZmljYW5kbyB1biBjb21taXQgZHVyYW50ZSBpbCByZWJhc2UgZGVsIGJyYW5jaCAnJXMnIHN1ICIKKyInJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTQwMworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAiQXR0dWFsbWVudGUgc3RhaSBtb2RpZmljYW5kbyB1biBjb21taXQgZHVyYW50ZSB1biByZWJhc2UuIgorCisjOiB3dC1zdGF0dXMuYzoxNDA2Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgcGVyIGNvcnJlZ2dlcmUgaWwgY29tbWl0IGNvcnJlbnRlKSIKKworIzogd3Qtc3RhdHVzLmM6MTQwOAorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIHVuYSB2b2x0YSBzb2RkaXNmYXR0byBkZWxsZSB0dWUgbW9kaWZpY2hlKSIKKworIzogd3Qtc3RhdHVzLmM6MTQxOQorbXNnaWQgIkNoZXJyeS1waWNrIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4iCittc2dzdHIgIkNoZXJyeS1waWNrIGluIGNvcnNvLiIKKworIzogd3Qtc3RhdHVzLmM6MTQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJXMuIgorbXNnc3RyICJBdHR1YWxtZW50ZSBzdGFpIGVzZWd1ZW5kbyBpbCBjaGVycnktcGljayBkZWwgY29tbWl0ICVzLiIKKworIzogd3Qtc3RhdHVzLmM6MTQyOQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChyaXNvbHZpIGkgY29uZmxpdHRpIGVkIGVzZWd1aSBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDMyCittc2dpZCAiICAocnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB0byBjb250aW51ZSkiCittc2dzdHIgIiAgKGVzZWd1aSBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgcGVyIGNvbnRpbnVhcmUpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM1Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgICh0dXR0aSBpIGNvbmZsaXR0aSBzb25vIHN0YXRpIHJpc29sdGk6IGVzZWd1aSBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlIgorIlwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzNworbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCIgcGVyIHNhbHRhcmUgcXVlc3RhIHBhdGNoKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzOQorbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiBwZXIgYW5udWxsYXJlIGwnb3BlcmF6aW9uZSBkaSBjaGVycnktcGljaykiCisKKyM6IHd0LXN0YXR1cy5jOjE0NDkKK21zZ2lkICJSZXZlcnQgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiUmV2ZXJ0IGluIGNvcnNvLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZXZlcnRpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAiQXR0dWFsbWVudGUgc3RhaSBlc2VndWVuZG8gaWwgcmV2ZXJ0IGRlbCBjb21taXQgJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxNDU4Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChyaXNvbHZpIGkgY29uZmxpdHRpIGVkIGVzZWd1aSBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2MQorbXNnaWQgIiAgKHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIHRvIGNvbnRpbnVlKSIKK21zZ3N0ciAiICAoZXNlZ3VpIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgcGVyIGNvbnRpbnVhcmUpIgorCisjOiB3dC1zdGF0dXMuYzoxNDY0Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAodHV0dGkgaSBjb25mbGl0dGkgc29ubyBzdGF0aSByaXNvbHRpOiBlc2VndWkgXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjYKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHVzYSBcImdpdCByZXZlcnQgLS1za2lwXCIgcGVyIHNhbHRhcmUgcXVlc3RhIHBhdGNoKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2OAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikiCittc2dzdHIgIiAgKHVzYSBcImdpdCByZXZlcnQgLS1hYm9ydFwiIHBlciBhbm51bGxhcmUgbCdvcGVyYXppb25lIGRpIHJldmVydCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLCBzdGFydGVkIGZyb20gYnJhbmNoICclcycuIgorbXNnc3RyICJBdHR1YWxtZW50ZSBzdGFpIGVzZWd1ZW5kbyB1bmEgYmlzZXppb25lIHBhcnRlbmRvIGRhbCBicmFuY2ggJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0ODIKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICJBdHR1YWxtZW50ZSBzdGFpIGVzZWd1ZW5kbyB1bmEgYmlzZXppb25lLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4NQorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IGJpc2VjdCByZXNldFwiIHBlciB0b3JuYXJlIGFsIGJyYW5jaCBvcmlnaW5hcmlvKSIKKworIzogd3Qtc3RhdHVzLmM6MTY5NAorbXNnaWQgIk9uIGJyYW5jaCAiCittc2dzdHIgIlN1bCBicmFuY2ggIgorCisjOiB3dC1zdGF0dXMuYzoxNzAxCittc2dpZCAiaW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAicmViYXNlIGludGVyYXR0aXZvIGluIGNvcnNvIHN1ICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMworbXNnaWQgInJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgInJlYmFzZSBpbiBjb3JzbyBzdSAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MTMKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICJBdHR1YWxtZW50ZSBub24gc2VpIHN1IGFsY3VuIGJyYW5jaC4iCisKKyM6IHd0LXN0YXR1cy5jOjE3MzAKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiQ29tbWl0IGluaXppYWxlIgorCisjOiB3dC1zdGF0dXMuYzoxNzMxCittc2dpZCAiTm8gY29tbWl0cyB5ZXQiCittc2dzdHIgIk5vbiBjaSBzb25vIGFuY29yYSBjb21taXQiCisKKyM6IHd0LXN0YXR1cy5jOjE3NDUKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIkZpbGUgbm9uIHRyYWNjaWF0aSIKKworIzogd3Qtc3RhdHVzLmM6MTc0NworbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgIkZpbGUgaWdub3JhdGkiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICdzdGF0dXMgLXVubydcbiIKKyJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkXG4iCisibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKK21zZ3N0ciAiIgorIlNvbm8gc3RhdGkgbmVjZXNzYXJpICUuMmYgc2Vjb25kaSBwZXIgZWxlbmNhcmUgaSBmaWxlIG5vblxuIgorInRyYWNjaWF0aS4gJ3N0YXR1cyAtdW5vJyBwb3RyZWJiZSB2ZWxvY2l6emFyZSB0YWxlIG9wZXJhemlvbmUsXG4iCisibWEgZGV2aSBzdGFyZSBhdHRlbnRvIGEgbm9uIGRpbWVudGljYXJ0aSBkaSBhZ2dpdW5nZXJlXG4iCisiYXV0b25vbWFtZW50ZSBpIGZpbGUgbnVvdmkgKHZlZGkgJ2dpdCBoZWxwIHN0YXR1cycpLiIKKworIzogd3Qtc3RhdHVzLmM6MTc1NworIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICJGaWxlIG5vbiB0cmFjY2lhdGkgbm9uIGVsZW5jYXRpJXMiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTkKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIgKHVzYSBsJ29wemlvbmUgLXUgcGVyIHZpc3VhbGl6emFyZSBpIGZpbGUgbm9uIHRyYWNjaWF0aSkiCisKKyM6IHd0LXN0YXR1cy5jOjE3NjUKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICJOZXNzdW5hIG1vZGlmaWNhIgorCisjOiB3dC1zdGF0dXMuYzoxNzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICIiCisibmVzc3VuYSBtb2RpZmljYSBhZ2dpdW50YSBhbCBjb21taXQgKHVzYSBcImdpdCBhZGRcIiBlL28gXCJnaXQgY29tbWl0IC1hXCIpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXRcbiIKK21zZ3N0ciAibmVzc3VuYSBtb2RpZmljYSBhZ2dpdW50YSBhbCBjb21taXRcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50ICh1c2UgXCJnaXQgYWRkXCIgdG8gIgorInRyYWNrKVxuIgorbXNnc3RyICIiCisibm9uIMOoIHN0YXRvIGFnZ2l1bnRvIG51bGxhIGFsIGNvbW1pdCBtYSBzb25vIHByZXNlbnRpIGZpbGUgbm9uIHRyYWNjaWF0aSAiCisiKHVzYSBcImdpdCBhZGRcIiBwZXIgdHJhY2NpYXJsaSlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAiIgorIm5vbiDDqCBzdGF0byBhZ2dpdW50byBudWxsYSBhbCBjb21taXQgbWEgc29ubyBwcmVzZW50aSBmaWxlIG5vbiB0cmFjY2lhdGlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAiIgorIm5vbiBjJ8OoIG51bGxhIGRpIGN1aSBlc2VndWlyZSBpbCBjb21taXQgKGNyZWEvY29waWEgZGVpIGZpbGUgZSB1c2EgXCJnaXQgYWRkIgorIlwiIHBlciB0cmFjY2lhcmxpKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzg1IHd0LXN0YXR1cy5jOjE3OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXRcbiIKK21zZ3N0ciAibm9uIGMnw6ggbnVsbGEgZGkgY3VpIGVzZWd1aXJlIGlsIGNvbW1pdFxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpXG4iCittc2dzdHIgIiIKKyJub24gYyfDqCBudWxsYSBkaSBjdWkgZXNlZ3VpcmUgaWwgY29tbWl0ICh1c2EgLXUgcGVyIHZpc3VhbGl6emFyZSBpIGZpbGUgbm9uICIKKyJ0cmFjY2lhdGkpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhblxuIgorbXNnc3RyICJub24gYyfDqCBudWxsYSBkaSBjdWkgZXNlZ3VpcmUgaWwgY29tbWl0LCBsJ2FsYmVybyBkaSBsYXZvcm8gw6ggcHVsaXRvXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE5MDUKK21zZ2lkICJObyBjb21taXRzIHlldCBvbiAiCittc2dzdHIgIk5vbiBjaSBzb25vIGFuY29yYSBjb21taXQgc3UiCisKKyM6IHd0LXN0YXR1cy5jOjE5MDkKK21zZ2lkICJIRUFEIChubyBicmFuY2gpIgorbXNnc3RyICJIRUFEIChuZXNzdW4gYnJhbmNoKSIKKworIzogd3Qtc3RhdHVzLmM6MTk0MAorbXNnaWQgImRpZmZlcmVudCIKK21zZ3N0ciAiZGlmZmVyZW50ZSIKKworIzogd3Qtc3RhdHVzLmM6MTk0MiB3dC1zdGF0dXMuYzoxOTUwCittc2dpZCAiYmVoaW5kICIKK21zZ3N0ciAiaW5kaWV0cm8gIgorCisjOiB3dC1zdGF0dXMuYzoxOTQ1IHd0LXN0YXR1cy5jOjE5NDgKK21zZ2lkICJhaGVhZCAiCittc2dzdHIgImF2YW50aSAiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgYWN0aW9uIGlzIGUuZy4gInB1bGwgd2l0aCByZWJhc2UiCisjOiB3dC1zdGF0dXMuYzoyNDcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlICVzOiBjaSBzb25vIGRlbGxlIG1vZGlmaWNoZSBub24gaW4gc3RhZ2luZy4iCisKKyM6IHd0LXN0YXR1cy5jOjI0NzYKK21zZ2lkICJhZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJpbm9sdHJlLCBsJ2luZGljZSBjb250aWVuZSBtb2RpZmljaGUgZGkgY3VpIG5vbiDDqCBzdGF0byBlc2VndWl0byBpbCBjb21taXQuIgorCisjOiB3dC1zdGF0dXMuYzoyNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIGVzZWd1aXJlICVzOiBsJ2luZGljZSBjb250aWVuZSBtb2RpZmljaGUgZGkgY3VpIG5vbiDDqCBzdGF0byAiCisiZXNlZ3VpdG8gaWwgY29tbWl0LiIKKworIzogY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jOjU4IGJ1aWx0aW4vY2xvbmUuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICJ1bmxpbmsgZGkgJyVzJyBub24gcml1c2NpdG8iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbPG9wemlvbmk+XSBbLS1dIDxzcGVjaWZpY2F0b3JlIHBlcmNvcnNvPi4uLiIKKworIzogYnVpbHRpbi9hZGQuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICJzdGF0byBkaWZmIGluYXR0ZXNvICVjIgorCisjOiBidWlsdGluL2FkZC5jOjkzIGJ1aWx0aW4vY29tbWl0LmM6Mjg4Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJhZ2dpb3JuYW1lbnRvIGRlaSBmaWxlIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9hZGQuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAiZWxpbWluYSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc4Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIk1vZGlmaWNoZSBub24gbmVsbCdhcmVhIGRpIHN0YWdpbmcgZG9wbyBsJ2FnZ2lvcm5hbWVudG8gZGVsbCdpbmRpY2U6IgorCisjOiBidWlsdGluL2FkZC5jOjI2NiBidWlsdGluL3Jldi1wYXJzZS5jOjg5OQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgbGVnZ2VyZSBsJ2luZGljZSIKKworIzogYnVpbHRpbi9hZGQuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIkltcG9zc2liaWxlIGFwcmlyZSAnJXMnIGluIHNjcml0dHVyYS4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjgxCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHBhdGNoIgorbXNnc3RyICJJbXBvc3NpYmlsZSBzY3JpdmVyZSBsYSBwYXRjaCIKKworIzogYnVpbHRpbi9hZGQuYzoyODQKK21zZ2lkICJlZGl0aW5nIHBhdGNoIGZhaWxlZCIKK21zZ3N0ciAibW9kaWZpY2EgZGVsbGEgcGF0Y2ggbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2FkZC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBsbyBzdGF0IGRpICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg5Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICJQYXRjaCB2dW90YS4gT3BlcmF6aW9uZSBpbnRlcnJvdHRhLiIKKworIzogYnVpbHRpbi9hZGQuYzoyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICclcyciCittc2dzdHIgIkltcG9zc2liaWxlIGFwcGxpY2FyZSAnJXMnIgorCisjOiBidWlsdGluL2FkZC5jOjMwMgorbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAiSSBzZWd1ZW50aSBwZXJjb3JzaSBzb25vIGlnbm9yYXRpIGRhIHVubyBkZWkgZmlsZSAuZ2l0aWdub3JlOlxuIgorCisjOiBidWlsdGluL2FkZC5jOjMyMiBidWlsdGluL2NsZWFuLmM6OTEwIGJ1aWx0aW4vZmV0Y2guYzoxNjMgYnVpbHRpbi9tdi5jOjEyNAorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NiBidWlsdGluL3B1bGwuYzoyMDMgYnVpbHRpbi9wdXNoLmM6NTQ4CisjOiBidWlsdGluL3JlbW90ZS5jOjE0MjEgYnVpbHRpbi9ybS5jOjI0MiBidWlsdGluL3NlbmQtcGFjay5jOjE2NQorbXNnaWQgImRyeSBydW4iCittc2dzdHIgInRlc3QgY29udHJvbGxhdG8iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI1Cittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAic2NlbHRhIGludGVyYXR0aXZhIgorCisjOiBidWlsdGluL2FkZC5jOjMyNiBidWlsdGluL2NoZWNrb3V0LmM6MTUxMSBidWlsdGluL3Jlc2V0LmM6MzA3Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgInNlbGV6aW9uYSBnbGkgaHVuayBpbiBtb2RhbGl0w6AgaW50ZXJhdHRpdmEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI3Cittc2dpZCAiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IgorbXNnc3RyICJtb2RpZmljYSBpbCBkaWZmIGNvcnJlbnRlIGUgYXBwbGljYWxvIgorCisjOiBidWlsdGluL2FkZC5jOjMyOAorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiY29uc2VudGkgbCdhZ2dpdW50YSBkaSBmaWxlIGFsdHJpbWVudGkgaWdub3JhdGkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI5Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgImFnZ2lvcm5hIGkgZmlsZSB0cmFjY2lhdGkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMwCittc2dpZCAicmVub3JtYWxpemUgRU9MIG9mIHRyYWNrZWQgZmlsZXMgKGltcGxpZXMgLXUpIgorbXNnc3RyICJyaW5vcm1hbGl6emEgaSBmaW5lIHJpZ2EgZGVpIGZpbGUgdHJhY2NpYXRpIChpbXBsaWNhIC11KSIKKworIzogYnVpbHRpbi9hZGQuYzozMzEKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgInNhbHZhIHNvbG8gaWwgZmF0dG8gY2hlIGlsIHBlcmNvcnNvIHNhcsOgIGFnZ2l1bnRvIHN1Y2Nlc3NpdmFtZW50ZSIKKworIzogYnVpbHRpbi9hZGQuYzozMzIKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgImFnZ2l1bmdpIGxlIG1vZGlmaWNoZSBkYSB0dXR0aSBpIGZpbGUgdHJhY2NpYXRpIGUgbm9uIgorCisjOiBidWlsdGluL2FkZC5jOjMzNQorbXNnaWQgImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIgorbXNnc3RyICJpZ25vcmEgaSBwZXJjb3JzaSBlbGltaW5hdGkgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIChjb21lIC0tbm8tYWxsKSIKKworIzogYnVpbHRpbi9hZGQuYzozMzcKK21zZ2lkICJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgIm5vbiBlc2VndWlyZSBsJ2FnZ2l1bnRhLCBhZ2dpb3JuYSBzb2xvIGwnaW5kaWNlIgorCisjOiBidWlsdGluL2FkZC5jOjMzOAorbXNnaWQgImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiCittc2dzdHIgIiIKKyJzYWx0YSBzZW1wbGljZW1lbnRlIGkgZmlsZSBjaGUgbm9uIHBvc3Nvbm8gZXNzZXJlIGFnZ2l1bnRpIGEgY2F1c2EgZGkgZXJyb3JpIgorCisjOiBidWlsdGluL2FkZC5jOjMzOQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAiIgorImNvbnRyb2xsYSBzZSBpIGZpbGUgLSBhbmNoZSBxdWVsbGkgbWFuY2FudGkgLSBzb25vIGlnbm9yYXRpIGR1cmFudGUgaWwgdGVzdCAiCisiY29udHJvbGxhdG8iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQxIGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwNAorbXNnaWQgIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIgorbXNnc3RyICJlc2VndWkgbCdvdmVycmlkZSBkZWwgYml0IGVzZWd1aWJpbGUgZGVpIGZpbGUgZWxlbmNhdGkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQzCittc2dpZCAid2FybiB3aGVuIGFkZGluZyBhbiBlbWJlZGRlZCByZXBvc2l0b3J5IgorbXNnc3RyICJlbWV0dGkgdW4gYXZ2aXNvIHF1YW5kbyBzaSBhZ2dpdW5nZSB1biByZXBvc2l0b3J5IGluY29ycG9yYXRvIgorCisjOiBidWlsdGluL2FkZC5jOjM0NQorbXNnaWQgImJhY2tlbmQgZm9yIGBnaXQgc3Rhc2ggLXBgIgorbXNnc3RyICJiYWNrZW5kIHBlciBgZ2l0IHN0YXNoIC1wYCIKKworIzogYnVpbHRpbi9hZGQuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSd2ZSBhZGRlZCBhbm90aGVyIGdpdCByZXBvc2l0b3J5IGluc2lkZSB5b3VyIGN1cnJlbnQgcmVwb3NpdG9yeS5cbiIKKyJDbG9uZXMgb2YgdGhlIG91dGVyIHJlcG9zaXRvcnkgd2lsbCBub3QgY29udGFpbiB0aGUgY29udGVudHMgb2ZcbiIKKyJ0aGUgZW1iZWRkZWQgcmVwb3NpdG9yeSBhbmQgd2lsbCBub3Qga25vdyBob3cgdG8gb2J0YWluIGl0LlxuIgorIklmIHlvdSBtZWFudCB0byBhZGQgYSBzdWJtb2R1bGUsIHVzZTpcbiIKKyJcbiIKKyJcdGdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisiSWYgeW91IGFkZGVkIHRoaXMgcGF0aCBieSBtaXN0YWtlLCB5b3UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZVxuIgorImluZGV4IHdpdGg6XG4iCisiXG4iCisiXHRnaXQgcm0gLS1jYWNoZWQgJXNcbiIKKyJcbiIKKyJTZWUgXCJnaXQgaGVscCBzdWJtb2R1bGVcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyJIYWkgYWdnaXVudG8gdW4gYWx0cm8gcmVwb3NpdG9yeSBHaXQgYWxsJ2ludGVybm8gZGVsIHJlcG9zaXRvcnlcbiIKKyJjb3JyZW50ZS4gSSBjbG9uaSBkZWwgcmVwb3NpdG9yeSBlc3Rlcm5vIG5vbiBjb250ZXJyYW5ubyBpXG4iCisiY29udGVudXRpIGRlbCByZXBvc2l0b3J5IGluY29ycG9yYXRvIGUgbm9uIHNhcHJhbm5vIGNvbWUgb3R0ZW5lcmxpLlxuIgorIlNlIGludGVuZGV2aSBhZ2dpdW5nZXJlIHVuIHNvdHRvbW9kdWxvLCB1c2E6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIlNlIGhhaSBhZ2dpdW50byBxdWVzdG8gcGVyY29yc28gcGVyIGVycm9yZSwgcHVvaSByaW11b3ZlcmxvXG4iCisiZGFsbCdpbmRpY2UgY29uOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiVmVkaSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIHBlciB1bHRlcmlvcmkgaW5mb3JtYXppb25pLiIKKworIzogYnVpbHRpbi9hZGQuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5nIGVtYmVkZGVkIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAiYWdnaXVudGEgcmVwb3NpdG9yeSBHaXQgaW5jb3Jwb3JhdG8gaW4gY29yc286ICVzIgorCisjOiBidWlsdGluL2FkZC5jOjQxMAorbXNnaWQgIiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5hZGRJZ25vcmVkRmlsZSBmYWxzZVwiIgorbXNnc3RyICIiCisiVXNhIC1mIHNlIHZ1b2kgdmVyYW1lbnRlIGFnZ2l1bmdlcmxpLlxuIgorIlBlciBkaXNhYmlsaXRhcmUgcXVlc3RvIG1lc3NhZ2dpbywgZXNlZ3VpXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5hZGRJZ25vcmVkRmlsZSBmYWxzZVwiIgorCisjOiBidWlsdGluL2FkZC5jOjQxOQorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgImFnZ2l1bnRhIGRlaSBmaWxlIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9hZGQuYzo0NDcgYnVpbHRpbi9jb21taXQuYzozNDgKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIG5vbiDDqCBjb21wYXRpYmlsZSBjb24gLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjQ2NAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgbm9uIMOoIGNvbXBhdGliaWxlIGNvbiAtLWVkaXQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDc2Cittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi1BIGUgLXUgbm9uIHNvbm8gY29tcGF0aWJpbGkgZnJhIGxvcm8iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDc5Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAiTCdvcHppb25lIC0taWdub3JlLW1pc3NpbmcgcHXDsiBlc3NlcmUgdXNhdGEgc29sbyBjb24gLS1kcnktcnVuIgorCisjOiBidWlsdGluL2FkZC5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICItLWNobW9kIHBhcmFtICclcycgbXVzdCBiZSBlaXRoZXIgLXggb3IgK3giCittc2dzdHIgIklsIHBhcmFtZXRybyAtLWNobW9kICclcycgZGV2ZSBlc3NlcmUgLXggbyAreCIKKworIzogYnVpbHRpbi9hZGQuYzo1MDEgYnVpbHRpbi9jaGVja291dC5jOjE2NzUgYnVpbHRpbi9jb21taXQuYzozNTQKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjcgYnVpbHRpbi9ybS5jOjI3MiBidWlsdGluL3N0YXNoLmM6MTUwOQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorIi0tcGF0aHNwZWMtZnJvbS1maWxlIG5vbiDDqCBjb21wYXRpYmlsZSBjb24gZ2xpIGFyZ29tZW50aSBzcGVjaWZpY2F0b3JlICIKKyJwZXJjb3JzbyIKKworIzogYnVpbHRpbi9hZGQuYzo1MDggYnVpbHRpbi9jaGVja291dC5jOjE2ODcgYnVpbHRpbi9jb21taXQuYzozNjAKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzMgYnVpbHRpbi9ybS5jOjI3OCBidWlsdGluL3N0YXNoLmM6MTUxNQorbXNnaWQgIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWlyZXMgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCittc2dzdHIgIi0tcGF0aHNwZWMtZmlsZS1udWwgcmljaGllZGUgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICJOb24gw6ggc3RhdG8gc3BlY2lmaWNhdG8gbnVsbGEsIG5vbiDDqCBzdGF0byBhZ2dpdW50byBudWxsYS5cbiIKKworIzogYnVpbHRpbi9hZGQuYzo1MTQKK21zZ2lkICIiCisiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZEVtcHR5UGF0aHNwZWMgZmFsc2VcIiIKK21zZ3N0ciAiIgorIkZvcnNlIHZvbGV2aSBkaXJlICdnaXQgYWRkIC4nP1xuIgorIlBlciBkaXNhYmlsaXRhcmUgcXVlc3RvIG1lc3NhZ2dpbywgZXNlZ3VpXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5hZGRFbXB0eVBhdGhzcGVjIGZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vYW0uYzozNTIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsbyBzY3JpcHQgYXV0aG9yIgorCisjOiBidWlsdGluL2FtLmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgIiclcycgw6ggc3RhdG8gZWxpbWluYXRvIGRhbGwnaG9vayBhcHBseXBhdGNoLW1zZyIKKworIzogYnVpbHRpbi9hbS5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIlJpZ2EgZGkgaW5wdXQgbWFsZm9ybWF0YTogJyVzJy4iCisKKyM6IGJ1aWx0aW4vYW0uYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIkNvcGlhIGRlbGxlIG5vdGUgZGEgJyVzJyBhICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2FtLmM6NTQyCittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICJmc2VlayBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vYW0uYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhdGNoICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgbGEgcGF0Y2ggJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjc5NQorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICJQdcOyIGVzc2VyZSBhcHBsaWNhdGEgc29sbyB1bmEgc2VyaWUgZGkgcGF0Y2ggU3RHSVQgcGVyIHZvbHRhIgorCisjOiBidWlsdGluL2FtLmM6ODQzCittc2dpZCAiaW52YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgInRpbWVzdGFtcCBub24gdmFsaWRvIgorCisjOiBidWlsdGluL2FtLmM6ODQ4IGJ1aWx0aW4vYW0uYzo4NjAKK21zZ2lkICJpbnZhbGlkIERhdGUgbGluZSIKK21zZ3N0ciAicmlnYSBEYXRlIG5vbiB2YWxpZGEiCisKKyM6IGJ1aWx0aW4vYW0uYzo4NTUKK21zZ2lkICJpbnZhbGlkIHRpbWV6b25lIG9mZnNldCIKK21zZ3N0ciAib2Zmc2V0IGZ1c28gb3JhcmlvIG5vbiB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vYW0uYzo5NDgKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgIlJpbGV2YW1lbnRvIGRlbCBmb3JtYXRvIGRlbGxhIHBhdGNoIG5vbiByaXVzY2l0by4iCisKKyM6IGJ1aWx0aW4vYW0uYzo5NTMgYnVpbHRpbi9jbG9uZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJjcmVhemlvbmUgZGVsbGEgZGlyZWN0b3J5ICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2FtLmM6OTU4Cittc2dpZCAiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIgorbXNnc3RyICJEaXZpc2lvbmUgZGVsbGUgcGF0Y2ggbm9uIHJpdXNjaXRhLiIKKworIzogYnVpbHRpbi9hbS5jOjEwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiVzIC0tY29udGludWVcIi4iCittc2dzdHIgIlVuYSB2b2x0YSByaXNvbHRvIHF1ZXN0byBwcm9ibGVtYSwgZXNlZ3VpIFwiJXMgLS1jb250aW51ZVwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIgorbXNnc3RyICJTZSBwcmVmZXJpc2NpIHNhbHRhcmUgcXVlc3RhIHBhdGNoLCBlc2VndWkgaW52ZWNlIFwiJXMgLS1za2lwXCIuIgorCisjOiBidWlsdGluL2FtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iCittc2dzdHIgIiIKKyJQZXIgcmlwcmlzdGluYXJlIGlsIGJyYW5jaCBvcmlnaW5hcmlvIGUgdGVybWluYXJlIGlsIHBhdGNoaW5nLCBlc2VndWkgXCIlcyAtLSIKKyJhYm9ydFwiLiIKKworIzogYnVpbHRpbi9hbS5jOjExNzQKK21zZ2lkICJQYXRjaCBzZW50IHdpdGggZm9ybWF0PWZsb3dlZDsgc3BhY2UgYXQgdGhlIGVuZCBvZiBsaW5lcyBtaWdodCBiZSBsb3N0LiIKK21zZ3N0ciAiIgorIlBhdGNoIGludmlhdGEgY29uIGZvcm1hdD1mbG93ZWQ7IGdsaSBzcGF6aSBhbCB0ZXJtaW5lIGRlbGxlIHJpZ2hlIHBvdHJlYmJlcm8gIgorImVzc2VyZSBhbmRhdGkgcGVyZHV0aS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjAyCittc2dpZCAiUGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICJMYSBwYXRjaCDDqCB2dW90YS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYXV0aG9yIGxpbmUgaW4gY29tbWl0ICVzIgorbXNnc3RyICJyaWdhIGF1dG9yZSBtYW5jYW50ZSBuZWwgY29tbWl0ICVzIgorCisjOiBidWlsdGluL2FtLmM6MTI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICUuKnMiCittc2dzdHIgInJpZ2EgaWRlbnQgbm9uIHZhbGlkYTogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE0ODkKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisiRGFsIHJlcG9zaXRvcnkgbWFuY2FubyBpIGJsb2IgbmVjZXNzYXJpIHBlciByaXBpZWdhcmUgc3VsIG1lcmdlIGEgdHJlIHZpZS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDkxCittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAiIgorIlV0aWxpenpvIGxlIGluZm9ybWF6aW9uaSBkZWxsJ2luZGljZSBwZXIgcmljb3N0cnVpcmUgdW4gYWxiZXJvIGRpIGJhc2UuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTEwCittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorIkhhaSBtb2RpZmljYXRvIG1hbnVhbG1lbnRlIGxhIHBhdGNoP1xuIgorIk5vbiBwdcOyIGVzc2VyZSBhcHBsaWNhdGEgYWkgYmxvYiByZWdpc3RyYXRpIG5lbCBzdW8gaW5kaWNlLiIKKworIzogYnVpbHRpbi9hbS5jOjE1MTYKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIlJpcGllZ28gc3VsIHBhdGNoaW5nIGRlbGxhIGJhc2UgZSBzdWwgbWVyZ2UgYSB0cmUgdmllLi4uIgorCisjOiBidWlsdGluL2FtLmM6MTU0MgorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iCittc2dzdHIgIk1lcmdlIGRlbGxlIG1vZGlmaWNoZSBub24gcml1c2NpdG8uIgorCisjOiBidWlsdGluL2FtLmM6MTU3NAorbXNnaWQgImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiCittc2dzdHIgImFwcGxpY2F6aW9uZSBhIHVuYSBjcm9ub2xvZ2lhIHZ1b3RhIgorCisjOiBidWlsdGluL2FtLmM6MTYyMSBidWlsdGluL2FtLmM6MTYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgImltcG9zc2liaWxlIHJpcHJlbmRlcmUgbCdhdHRpdml0w6A6ICVzIG5vbiBlc2lzdGUuIgorCisjOiBidWlsdGluL2FtLmM6MTY0MworbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAiSWwgY29ycG8gZGVsIGNvbW1pdCDDqDoiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgIiIKKyJBcHBsaWNvPyBTw6wgW3ldL05vIFtuXS9Nb2RpZmljYSBbZV0vW1ZdaXN1YWxpenphIHBhdGNoL1tBXWNjZXR0YSB0dXR0bzoiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzAwIGJ1aWx0aW4vY29tbWl0LmM6Mzk4Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGluZGV4IGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIGZpbGUgaW5kaWNlIgorCisjOiBidWlsdGluL2FtLmM6MTcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAlcykiCittc2dzdHIgIkluZGljZSBzcG9yY286IGltcG9zc2liaWxlIGFwcGxpY2FyZSBsZSBwYXRjaCAoZWxlbWVudG8gc3BvcmNvOiAlcykiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzQ0IGJ1aWx0aW4vYW0uYzoxODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICJBcHBsaWNhemlvbmUgaW4gY29yc286ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzYxCittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICJOZXNzdW5hIG1vZGlmaWNhIC0tIHBhdGNoIGdpw6AgYXBwbGljYXRhLiIKKworIzogYnVpbHRpbi9hbS5jOjE3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICVzICUuKnMiCittc2dzdHIgIlBhdGNoIG5vbiByaXVzY2l0YSBhICVzICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzcxCittc2dpZCAiVXNlICdnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2g9ZGlmZicgdG8gc2VlIHRoZSBmYWlsZWQgcGF0Y2giCittc2dzdHIgIiIKKyJVc2EgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaD1kaWZmJyBwZXIgdmlzdWFsaXp6YXJlIGxhIHBhdGNoIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9hbS5jOjE4MTUKK21zZ2lkICIiCisiTm8gY2hhbmdlcyAtIGRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/XG4iCisiSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlXG4iCisiYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZXM7IHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyBwYXRjaC4iCittc2dzdHIgIiIKKyJOZXNzdW5hIG1vZGlmaWNhIC0gdGkgc2VpIGRpbWVudGljYXRvIGRpIHVzYXJlICdnaXQgYWRkJz9cbiIKKyJTZSBub24gcmltYW5lIG51bGxhIGRhIGFnZ2l1bmdlcmUgYWxsJ2FyZWEgZGkgc3RhZ2luZywgZm9yc2UgcXVhbGNvcydhbHRyb1xuIgorImhhIGdpw6AgaW50cm9kb3R0byBsZSBzdGVzc2UgbW9kaWZpY2hlOyBwb3RyZXN0aSB2b2xlciBzYWx0YXJlIHF1ZXN0YSBwYXRjaC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODIyCittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisiWW91IHNob3VsZCAnZ2l0IGFkZCcgZWFjaCBmaWxlIHdpdGggcmVzb2x2ZWQgY29uZmxpY3RzIHRvIG1hcmsgdGhlbSBhcyAiCisic3VjaC5cbiIKKyJZb3UgbWlnaHQgcnVuIGBnaXQgcm1gIG9uIGEgZmlsZSB0byBhY2NlcHQgXCJkZWxldGVkIGJ5IHRoZW1cIiBmb3IgaXQuIgorbXNnc3RyICIiCisiTmVsbCdpbmRpY2UgaGFpIGFuY29yYSBkZWkgcGVyY29yc2kgZGkgY3VpIG5vbiDDqCBzdGF0byBlc2VndWl0byBpbCBtZXJnZS5cbiIKKyJEb3ZyZXN0aSBlc2VndWlyZSAnZ2l0IGFkZCcgc3Ugb2duaSBmaWxlIGkgY3VpIGNvbmZsaXR0aSBzb25vIHN0YXRpIHJpc29sdGkgIgorInBlciBjb250cmFzc2VnbmFybGkgY29tZSB0YWxpLlxuIgorIlBvdHJlc3RpIGVzZWd1aXJlIGBnaXQgcm1gIHN1IHVuIGZpbGUgcGVyIGFjY2V0dGFybmUgbGEgcmlzb2x1emlvbmUgIgorIlwiZWxpbWluYXRvIGRhIGxvcm9cIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTI5IGJ1aWx0aW4vYW0uYzoxOTMzIGJ1aWx0aW4vYW0uYzoxOTQ1IGJ1aWx0aW4vcmVzZXQuYzozNDYKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ29nZ2V0dG8gJyVzJy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTgxCittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICJwdWxpemlhIGRlbGwnaW5kaWNlIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9hbS5jOjIwMjUKK21zZ2lkICIiCisiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFEIHNpbmNlIHRoZSBsYXN0ICdhbScgZmFpbHVyZS5cbiIKKyJOb3QgcmV3aW5kaW5nIHRvIE9SSUdfSEVBRCIKK21zZ3N0ciAiIgorIlNlbWJyYSBjaGUgdHUgYWJiaWEgc3Bvc3RhdG8gSEVBRCBkYWxsJ3VsdGltYSBlc2VjdXppb25lIG5vbiByaXVzY2l0YSBkaSAiCisiJ2FtJy5cbiIKKyJOb24gcml0b3JubyBpbmRpZXRybyBhIE9SSUdfSEVBRCIKKworIzogYnVpbHRpbi9hbS5jOjIxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICJWYWxvcmUgbm9uIHZhbGlkbyBwZXIgLS1wYXRjaC1mb3JtYXQ6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXNob3ctY3VycmVudC1wYXRjaDogJXMiCittc2dzdHIgIlZhbG9yZSBub24gdmFsaWRvIHBlciAtLXNob3ctY3VycmVudC1wYXRjaDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2hvdy1jdXJyZW50LXBhdGNoPSVzIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tc2hvdy1jdXJyZW50LXBhdGNoPSVzIgorbXNnc3RyICItLXNob3ctY3VycmVudC1wYXRjaD0lcyBub24gw6ggY29tcGF0aWJpbGUgY29uIC0tc2hvdy1jdXJyZW50LXBhdGNoPSVzIgorCisjOiBidWlsdGluL2FtLmM6MjIwNworbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSBbKDxtYm94PiB8IDxNYWlsZGlyPikuLi5dIgorbXNnc3RyICJnaXQgYW0gWzxvcHppb25pPl0gWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXSIKKworIzogYnVpbHRpbi9hbS5jOjIyMDgKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKK21zZ3N0ciAiZ2l0IGFtIFs8b3B6aW9uaT5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE0Cittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgImVzZWd1aSBpbiBtb2RhbGl0w6AgaW50ZXJhdHRpdmEiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE2Cittc2dpZCAiaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3AiCittc2dzdHIgIm9wemlvbmUgc3RvcmljYSAtLSBub24gZXNlZ3VlIG51bGxhIgorCisjOiBidWlsdGluL2FtLmM6MjIxOAorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICJjb25zZW50aSBpbCByaXBpZWdvIHN1bCBtZXJnZSBhIHRyZSB2aWUgc2UgbmVjZXNzYXJpbyIKKworIzogYnVpbHRpbi9hbS5jOjIyMTkgYnVpbHRpbi9pbml0LWRiLmM6NDk0IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTgKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA0IGJ1aWx0aW4vc3Rhc2guYzo4MTIKK21zZ2lkICJiZSBxdWlldCIKK21zZ3N0ciAibm9uIHZpc3VhbGl6emFyZSBtZXNzYWdnaSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjEKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJhZ2dpdW5naSB1bmEgcmlnYSBTaWduZWQtb2ZmLWJ5IGFsIG1lc3NhZ2dpbyBkaSBjb21taXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI0Cittc2dpZCAicmVjb2RlIGludG8gdXRmOCAoZGVmYXVsdCkiCittc2dzdHIgImNvbnZlcnRpIGNvZGlmaWNhIGluIFVURi04IChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEpIgorCisjOiBidWlsdGluL2FtLmM6MjIyNgorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgImZvcm5pc2NpIGwnYXJnb21lbnRvIC1rIGEgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjIyOAorbXNnaWQgInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgImZvcm5pc2NpIGwnYXJnb21lbnRvIC1iIGEgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjIzMAorbXNnaWQgInBhc3MgLW0gZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgImZvcm5pc2NpIGwnYXJnb21lbnRvIC1tIGEgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjIzMgorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgImZvcm5pc2NpIGEgZ2l0LW1haWxzcGxpdCBsJ2FyZ29tZW50byAtLWtlZXAtY3IgcGVyIGlsIGZvcm1hdG8gbWJveCIKKworIzogYnVpbHRpbi9hbS5jOjIyMzUKK21zZ2lkICJkbyBub3QgcGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGluZGVwZW5kZW50IG9mIGFtLmtlZXBjciIKK21zZ3N0ciAiIgorIm5vbiBmb3JuaXJlIGwnYXJnb21lbnRvIC0ta2VlcC1jciBhIGdpdC1tYWlsc3BsaXQgaW5kaXBlbmRlbnRlbWVudGUgZGFsICIKKyJ2YWxvcmUgZGkgYW0ua2VlcGNyIgorCisjOiBidWlsdGluL2FtLmM6MjIzOAorbXNnaWQgInN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSIKK21zZ3N0ciAicmltdW92aSB0dXR0ZSBsZSByaWdoZSBwcmltYSBkaSB1bmEgcmlnYSBcInRhZ2xpYSBxdWlcIiIKKworIzogYnVpbHRpbi9hbS5jOjIyNDAgYnVpbHRpbi9hbS5jOjIyNDMgYnVpbHRpbi9hbS5jOjIyNDYgYnVpbHRpbi9hbS5jOjIyNDkKKyM6IGJ1aWx0aW4vYW0uYzoyMjUyIGJ1aWx0aW4vYW0uYzoyMjU1IGJ1aWx0aW4vYW0uYzoyMjU4IGJ1aWx0aW4vYW0uYzoyMjYxCisjOiBidWlsdGluL2FtLmM6MjI2NworbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgInBhc3NhIGwnYXJnb21lbnRvIGEgZ2l0LWFwcGx5IgorCisjOiBidWlsdGluL2FtLmM6MjI1NyBidWlsdGluL2NvbW1pdC5jOjEzOTEgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcwCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzMgYnVpbHRpbi9ncmVwLmM6ODcxIGJ1aWx0aW4vbWVyZ2UuYzoyNTAKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0MCBidWlsdGluL3B1bGwuYzoxOTkgYnVpbHRpbi9yZWJhc2UuYzoxNTA1CisjOiBidWlsdGluL3JlcGFjay5jOjMxNSBidWlsdGluL3JlcGFjay5jOjMxOSBidWlsdGluL3JlcGFjay5jOjMyMQorIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MCBidWlsdGluL3Nob3ctcmVmLmM6MTcyIGJ1aWx0aW4vdGFnLmM6NDAzCisjOiBwYXJzZS1vcHRpb25zLmg6MTU0IHBhcnNlLW9wdGlvbnMuaDoxNzUgcGFyc2Utb3B0aW9ucy5oOjMxNgorbXNnaWQgIm4iCittc2dzdHIgIm4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjYzIGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzgKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NiBidWlsdGluL3RhZy5jOjQzNyBidWlsdGluL3ZlcmlmeS10YWcuYzozOAorbXNnaWQgImZvcm1hdCIKK21zZ3N0ciAiZm9ybWF0byIKKworIzogYnVpbHRpbi9hbS5jOjIyNjQKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgImlsIGZvcm1hdG8gZGVsbGUgcGF0Y2giCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjcwCittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICIiCisiZXNlZ3VpIGwnb3ZlcnJpZGUgZGVsIG1lc3NhZ2dpbyBkJ2Vycm9yZSBxdWFuZG8gc2kgdmVyaWZpY2EgdW4gZXJyb3JlIGxlZ2F0byAiCisiYWxsZSBwYXRjaCIKKworIzogYnVpbHRpbi9hbS5jOjIyNzIKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICIiCisiY29udGludWEgbCdhcHBsaWNhemlvbmUgZGVsbGUgcGF0Y2ggZG9wbyBsYSByaXNvbHV6aW9uZSBkaSB1biBjb25mbGl0dG8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc1Cittc2dpZCAic3lub255bXMgZm9yIC0tY29udGludWUiCittc2dzdHIgInNpbm9uaW1pIGRpIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc4Cittc2dpZCAic2tpcCB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAic2FsdGEgbGEgcGF0Y2ggY29ycmVudGUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjgxCittc2dpZCAicmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLiIKK21zZ3N0ciAicmlwcmlzdGluYSBpbCBicmFuY2ggb3JpZ2luYXJpbyBlIGludGVycm9tcGkgbCdvcGVyYXppb25lIGRpIHBhdGNoaW5nLiIKKworIzogYnVpbHRpbi9hbS5jOjIyODQKK21zZ2lkICJhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uIGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMuIgorbXNnc3RyICJpbnRlcnJvbXBpIGwnb3BlcmF6aW9uZSBkaSBwYXRjaGluZyBtYSBtYW50aWVuaSBIRUFEIGRvdifDqC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg4Cittc2dpZCAic2hvdyB0aGUgcGF0Y2ggYmVpbmcgYXBwbGllZCIKK21zZ3N0ciAidmlzdWFsaXp6YSBsYSBwYXRjaCBpbiBmYXNlIGRpIGFwcGxpY2F6aW9uZSIKKworIzogYnVpbHRpbi9hbS5jOjIyOTMKK21zZ2lkICJsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUiCittc2dzdHIgIm1lbnRpIHN1bGxhIGRhdGEgZGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi9hbS5jOjIyOTUKK21zZ2lkICJ1c2UgY3VycmVudCB0aW1lc3RhbXAgZm9yIGF1dGhvciBkYXRlIgorbXNnc3RyICJ1c2EgaWwgdGltZXN0YW1wIGNvcnJlbnRlIGNvbWUgZGF0YSBhdXRvcmUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk3IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMjAgYnVpbHRpbi9jb21taXQuYzoxNTEyCisjOiBidWlsdGluL21lcmdlLmM6Mjg3IGJ1aWx0aW4vcHVsbC5jOjE3NCBidWlsdGluL3JlYmFzZS5jOjUxNworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTU2IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE3IGJ1aWx0aW4vdGFnLmM6NDE4Cittc2dpZCAia2V5LWlkIgorbXNnc3RyICJJRCBjaGlhdmUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk4IGJ1aWx0aW4vcmViYXNlLmM6NTE4IGJ1aWx0aW4vcmViYXNlLmM6MTU1NworbXNnaWQgIkdQRy1zaWduIGNvbW1pdHMiCittc2dzdHIgImZpcm1hIGkgY29tbWl0IGNvbiBHUEciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzAxCittc2dpZCAiKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCittc2dzdHIgIihhIHVzbyBpbnRlcm5vIHBlciBnaXQtcmViYXNlKSIKKworIzogYnVpbHRpbi9hbS5jOjIzMTkKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKyJMJ29wemlvbmUgLWIvLS1iaW5hcnkgbm9uIGVzZWd1ZSBudWxsYSBkYSBtb2x0byB0ZW1wbyBlXG4iCisic2Fyw6Agcmltb3NzYS4gTm9uIHVzYXJsYSBwacO5LiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjYKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImxldHR1cmEgZGVsbCdpbmRpY2Ugbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2FtLmM6MjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICVzIHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgIiIKKyJsYSBkaXJlY3RvcnkgZGkgcmViYXNlIHByZWNlZGVudGUgJXMgZXNpc3RlIGFuY29yYSBtYSDDqCBzdGF0YSBzcGVjaWZpY2F0YSAiCisidW4nbWJveC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisiVHJvdmF0YSBkaXJlY3Rvcnkgc21hcnJpdGEgJXMuXG4iCisiVXNhIFwiZ2l0IGFtIC0tYWJvcnRcIiBwZXIgZWxpbWluYXJsYS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzcxCittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiT3BlcmF6aW9uZSBkaSByaXNvbHV6aW9uZSBub24gaW4gY29yc28sIG5vbiByaXByZW5kaWFtby4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzgxCittc2dpZCAiaW50ZXJhY3RpdmUgbW9kZSByZXF1aXJlcyBwYXRjaGVzIG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKyJsYSBtb2RhbGl0w6AgaW50ZXJhdHRpdmEgcmljaGllZGUgY2hlIGxlIHBhdGNoIHNpYW5vIGZvcm5pdGUgc3VsbGEgcmlnYSBkaSAiCisiY29tYW5kbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjgKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzxvcHppb25pPl0gWzxwYXRjaD4uLi5dIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgaWwgZmlsZSBhcmNoaXZpbyAnJXMnIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgImltcG9zc2liaWxlIHJlZGlyaWdlcmUgbCdvdXRwdXQiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IGlsIHJlbW90byBub24gaGEgdW4gVVJMIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBhcmNoaXZlOiBhdHRlc2kgQUNLL05BSywgcmljZXZ1dG8gcGFjY2hldHRvIGRpIGZsdXNoIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY1Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogZXJyb3JlIGRlbCBwcm90b2NvbGxvIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2OQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogYXR0ZXNvIHVuIGZsdXNoIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPGJhZF90ZXJtPiA8Z29vZF90ZXJtPiIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDx0ZXJtaW5lIHJldmlzaW9uZSBub24gZnVuemlvbmFudGU+ICIKKyI8dGVybWluZSByZXZpc2lvbmUgZnVuemlvbmFudGU+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjQKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXJlc2V0IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGNvbW1pdD5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjYKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPHN0YXRlPiA8cmV2aXNpb24+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPHN0YXRvPiA8cmV2aXNpb25lPiA8dGVybWluZSAiCisicmV2aXNpb25lIGZ1bnppb25hbnRlPiA8dGVybWluZSByZXZpc2lvbmUgbm9uIGZ1bnppb25hbnRlPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI3Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxjb21tYW5kPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxjb21hbmRvPiA8dGVybWluZSByZXZpc2lvbmUgIgorImZ1bnppb25hbnRlPiA8dGVybWluZSByZXZpc2lvbmUgbm9uIGZ1bnppb25hbnRlPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPGdvb2RfdGVybT4gPGJhZF90ZXJtPiBbPHRlcm0+XSIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrIDx0ZXJtaW5lIHJldmlzaW9uZSBmdW56aW9uYW50ZT4gIgorIjx0ZXJtaW5lIHJldmlzaW9uZSBub24gZnVuemlvbmFudGU+IFs8dGVybWluZT5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzAKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PHRlcm0+XVstLW5vLWNoZWNrb3V0XSBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybWluZT4gLS10ZXJtLXtuZXcsIgorImJhZH09PHRlcm1pbmU+XVstLW5vLWNoZWNrb3V0XSBbPG5vbiBmdW56aW9uYW50ZT4gWzxmdW56aW9uYW50ZT4uLi5dXSBbLS1dICIKKyJbPHBlcmNvcnNpPi4uLl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRlcm0iCittc2dzdHIgIiclcycgbm9uIMOoIHVuIHRlcm1pbmUgdmFsaWRvIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgdXNlIHRoZSBidWlsdGluIGNvbW1hbmQgJyVzJyBhcyBhIHRlcm0iCittc2dzdHIgImltcG9zc2liaWxlIHVzYXJlIGlsIGNvbWFuZG8gbmF0aXZvICclcycgY29tZSB0ZXJtaW5lIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgdGVybSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjYW1iaWFyZSBpbCBzaWduaWZpY2F0byBkZWwgdGVybWluZSAnJXMnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTExCittc2dpZCAicGxlYXNlIHVzZSB0d28gZGlmZmVyZW50IHRlcm1zIgorbXNnc3RyICJ1c2EgZHVlIHRlcm1pbmkgZGlmZmVyZW50aSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExOAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRoZSBmaWxlIEJJU0VDVF9URVJNUyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGlsIGZpbGUgQklTRUNUX1RFUk1TIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLlxuIgorbXNnc3RyICJOb24gc3RpYW1vIGVzZWd1ZW5kbyB1biBiaXNlY3QuXG4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIiclcycgbm9uIMOoIHVuIGNvbW1pdCB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJXMnLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGNoZWNrb3V0IGRlbGwnSEVBRCBvcmlnaW5hcmlvICclcycuIFByb3ZhIGNvbiAnZ2l0ICIKKyJiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiQXJnb21lbnRvIGJpc2VjdF93cml0ZSBlcnJhdG86ICVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGdldCB0aGUgb2lkIG9mIHRoZSByZXYgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBsJ09JRCBkZWxsYSByZXZpc2lvbmUgJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBvcGVuIHRoZSBmaWxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBpbCBmaWxlICclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21tYW5kOiB5b3UncmUgY3VycmVudGx5IGluIGEgJXMvJXMgYmlzZWN0IgorbXNnc3RyICJDb21hbmRvIG5vbiB2YWxpZG86IGF0dHVhbG1lbnRlIHN0YWkgZXNlZ3VlbmRvIHVuYSBiaXNlemlvbmUgJXMvJXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKyJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIgorbXNnc3RyICIiCisiRGV2aSBzcGVjaWZpY2FyZSBhbG1lbm8gdW5hIHJldmlzaW9uZSAlcyBlZCB1bmEgJXMuXG4iCisiUHVvaSB1c2FyZSBcImdpdCBiaXNlY3QgJXNcIiBlIFwiZ2l0IGJpc2VjdCAlc1wiIHBlciBxdWVzdG8gc2NvcG8uIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJZb3UgdGhlbiBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKyJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIgorbXNnc3RyICIiCisiRGV2aSBpbml6aWFyZSBjb24gXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiUXVpbmRpIGRldmkgc3BlY2lmaWNhcmUgYWxtZW5vIHVuYSByZXZpc2lvbmUgJXMgZWQgdW5hICVzLlxuIgorIlB1b2kgdXNhcmUgXCJnaXQgYmlzZWN0ICVzXCIgZSBcImdpdCBiaXNlY3QgJXNcIiBhIHF1ZXN0byBzY29wby4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzZWN0aW5nIG9ubHkgd2l0aCBhICVzIGNvbW1pdCIKK21zZ3N0ciAiZXNlZ3VvIGxhIGJpc2V6aW9uZSBzb2xvIGNvbiB1biBjb21taXQgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMTgKK21zZ2lkICJBcmUgeW91IHN1cmUgW1kvbl0/ICIKK21zZ3N0ciAiU2VpIHNpY3Vybz8gW1kvbl0gIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mzc5Cittc2dpZCAibm8gdGVybXMgZGVmaW5lZCIKK21zZ3N0ciAibmVzc3VuIHRlcm1pbmUgZGVmaW5pdG8iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY3VycmVudCB0ZXJtcyBhcmUgJXMgZm9yIHRoZSBvbGQgc3RhdGVcbiIKKyJhbmQgJXMgZm9yIHRoZSBuZXcgc3RhdGUuXG4iCittc2dzdHIgIiIKKyJJIHR1b2kgdGVybWluaSBjb3JyZW50aSBzb25vICVzIHBlciBsbyBzdGF0byB2ZWNjaGlvXG4iCisiZSAlcyBwZXIgbG8gc3RhdG8gbnVvdm8uXG4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgYXJndW1lbnQgJXMgZm9yICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6IC0tdGVybS1nb29kfC0tdGVybS1vbGQgYW5kIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCittc2dzdHIgIiIKKyJhcmdvbWVudG8gJXMgbm9uIHZhbGlkbyBwZXIgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIkxlIG9wemlvbmkgc3VwcG9ydGF0ZSBzb25vOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIGUgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgb3B0aW9uOiAnJXMnIgorbXNnc3RyICJvcHppb25lIG5vbiByaWNvbm9zY2l1dGE6ICclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAic2VtYnJhIGNoZSAnJXMnIG5vbiBzaWEgdW5hIHJldmlzaW9uZSB2YWxpZGEiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MTQKK21zZ2lkICJiYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIkhFQUQgbm9uIHZhbGlkYSAtIGhvIGJpc29nbm8gZGkgdW4nSEVBRCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjaGVja2luZyBvdXQgJyVzJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCBzdGFydCA8dmFsaWQtYnJhbmNoPicuIgorbXNnc3RyICIiCisiY2hlY2tvdXQgZGkgJyVzJyBub24gcml1c2NpdG8uIFByb3ZhIGNvbiAnZ2l0IGJpc2VjdCBzdGFydCA8YnJhbmNoIHZhbGlkbz4nLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MAorbXNnaWQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiCittc2dzdHIgIm5vbiBlc2VndWlyw7IgbGEgYmlzZXppb25lIHN1IHVuIGFsYmVybyBzb3R0b3Bvc3RvIGEgY2ctc2VlayIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MworbXNnaWQgImJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgImhlYWQgbm9uIHZhbGlkYSAtIHJpZmVyaW1lbnRvIHNpbWJvbGljbyBzdHJhbm8iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWY6ICclcyciCittc2dzdHIgInJpZmVyaW1lbnRvIG5vbiB2YWxpZG86ICclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzMKK21zZ2lkICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIgorbXNnc3RyICJlc2VndWkgJ2dpdCBiaXNlY3QgbmV4dCciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzUKK21zZ2lkICJ3cml0ZSB0aGUgdGVybXMgdG8gLmdpdC9CSVNFQ1RfVEVSTVMiCittc2dzdHIgInNjcml2aSBpIHRlcm1pbmkgaW4gLmdpdC9CSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzcKK21zZ2lkICJjbGVhbnVwIHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgInB1bGlzY2kgbG8gc3RhdG8gYmlzZXppb25lIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM5Cittc2dpZCAiY2hlY2sgZm9yIGV4cGVjdGVkIHJldnMiCittc2dzdHIgImNvbnRyb2xsYSBzZSBsZSByZXZpc2lvbmkgYXR0ZXNlIHNvbm8gcHJlc2VudGkiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDEKK21zZ2lkICJyZXNldCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICJyZWltcG9zdGEgbG8gc3RhdG8gZGVsbGEgYmlzZXppb25lIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQzCittc2dpZCAid3JpdGUgb3V0IHRoZSBiaXNlY3Rpb24gc3RhdGUgaW4gQklTRUNUX0xPRyIKK21zZ3N0ciAic2NyaXZpIGxvIHN0YXRvIGRlbGxhIGJpc2V6aW9uZSBpbiBCSVNFQ1RfTE9HIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ1Cittc2dpZCAiY2hlY2sgYW5kIHNldCB0ZXJtcyBpbiBhIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAiY29udHJvbGxhIGUgaW1wb3N0YSBpIHRlcm1pbmkgaW4gdW5vIHN0YXRvIGJpc2V6aW9uZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NworbXNnaWQgImNoZWNrIHdoZXRoZXIgYmFkIG9yIGdvb2QgdGVybXMgZXhpc3QiCittc2dzdHIgIiIKKyJjb250cm9sbGEgc2UgZXNpc3Rvbm8gdGVybWluaSBwZXIgcmV2aXNpb25pIG5vbiBmdW56aW9uYW50aSBvIGZ1bnppb25hbnRpIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ5Cittc2dpZCAicHJpbnQgb3V0IHRoZSBiaXNlY3QgdGVybXMiCittc2dzdHIgInN0YW1wYSBpIHRlcm1pbmkgZGVsbGEgYmlzZXppb25lIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjUxCittc2dpZCAic3RhcnQgdGhlIGJpc2VjdCBzZXNzaW9uIgorbXNnc3RyICJpbml6aWEgbGEgc2Vzc2lvbmUgZGkgYmlzZXppb25lIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjUzCittc2dpZCAidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIKK21zZ3N0ciAiYWdnaW9ybmEgQklTRUNUX0hFQUQgYW56aWNow6kgZXNlZ3VpcmUgaWwgY2hlY2tvdXQgZGVsIGNvbW1pdCBjb3JyZW50ZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1NQorbXNnaWQgIm5vIGxvZyBmb3IgQklTRUNUX1dSSVRFIgorbXNnc3RyICJub24gcmVnaXN0cmFyZSBsZSBvcGVyYXppb25pIGVzZWd1aXRlIHBlciBCSVNFQ1RfV1JJVEUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzMKK21zZ2lkICItLXdyaXRlLXRlcm1zIHJlcXVpcmVzIHR3byBhcmd1bWVudHMiCittc2dzdHIgIi0td3JpdGUtdGVybXMgcmljaGllZGUgZHVlIGFyZ29tZW50aSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3NworbXNnaWQgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIHJlcXVpcmVzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgbm9uIHJpY2hpZWRlIGFyZ29tZW50aSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4NAorbXNnaWQgIi0tYmlzZWN0LXJlc2V0IHJlcXVpcmVzIGVpdGhlciBubyBhcmd1bWVudCBvciBhIGNvbW1pdCIKK21zZ3N0ciAiLS1iaXNlY3QtcmVzZXQgcmljaGllZGUgbyBuZXNzdW4gYXJnb21lbnRvIG8gdW4gY29tbWl0IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg4Cittc2dpZCAiLS1iaXNlY3Qtd3JpdGUgcmVxdWlyZXMgZWl0aGVyIDQgb3IgNSBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LXdyaXRlIHJpY2hpZWRlIG8gcXVhdHRybyBvIGNpbnF1ZSBhcmdvbWVudGkiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTQKK21zZ2lkICItLWNoZWNrLWFuZC1zZXQtdGVybXMgcmVxdWlyZXMgMyBhcmd1bWVudHMiCittc2dzdHIgIi0tY2hlY2stYW5kLXNldC10ZXJtcyByaWNoaWVkZSB0cmUgYXJnb21lbnRpIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NzAwCittc2dpZCAiLS1iaXNlY3QtbmV4dC1jaGVjayByZXF1aXJlcyAyIG9yIDMgYXJndW1lbnRzIgorbXNnc3RyICItLWJpc2VjdC1uZXh0LWNoZWNrIHJpY2hpZWRlIGR1ZSBvIHRyZSBhcmdvbWVudGkiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3MDYKK21zZ2lkICItLWJpc2VjdC10ZXJtcyByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnQiCittc2dzdHIgIi0tYmlzZWN0LXRlcm1zIHJpY2hpZWRlIHplcm8gbyB1biBhcmdvbWVudG8iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMQorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJsYW1lIFs8b3B6aW9uaT5dIFs8b3B6aW9uaSByZXZpc2lvbmU+XSBbPHJldmlzaW9uZT5dIFstLV0gPGZpbGU+IgorCisjOiBidWlsdGluL2JsYW1lLmM6MzYKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAibGUgPG9wemlvbmkgcmV2aXNpb25lPiBzb25vIGRvY3VtZW50YXRlIGluIGdpdC1yZXYtbGlzdCgxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RpbmcgYSBjb2xvcjogJXMiCittc2dzdHIgImF0dGVzbyBjb2xvcmU6ICVzIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDE2Cittc2dpZCAibXVzdCBlbmQgd2l0aCBhIGNvbG9yIgorbXNnc3RyICJkZXZlIHRlcm1pbmFyZSBjb24gdW4gY29sb3JlIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgJyVzJyBpbiBjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVzIgorbXNnc3RyICJjb2xvcmUgJyVzJyBub24gdmFsaWRvIGluIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3NDcKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciBibGFtZS5jb2xvcmluZyIKK21zZ3N0ciAidmFsb3JlIG5vbiB2YWxpZG8gcGVyIGJsYW1lLmNvbG9yaW5nIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIHJldmlzaW9uICVzIHRvIGlnbm9yZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdHJvdmFyZSBsYSByZXZpc2lvbmUgJXMgZGEgaWdub3JhcmUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDQKK21zZ2lkICJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IgorbXNnc3RyICIiCisiVmlzdWFsaXp6YSBsZSB2b2NpIGJsYW1lIGluY3JlbWVudGFsbWVudGUsIGEgbWFubyBhIG1hbm8gY2hlIGxlIHRyb3ZpYW1vIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ1Cittc2dpZCAiU2hvdyBibGFuayBTSEEtMSBmb3IgYm91bmRhcnkgY29tbWl0cyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorIlZpc3VhbGl6emEgdW4gaGFzaCBTSEEtMSB2dW90byBwZXIgaSBjb21taXQgbGltaXRlIChpbXBvc3RhemlvbmUgIgorInByZWRlZmluaXRhOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ2Cittc2dpZCAiRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisiTm9uIGdlc3RpcmUgaSBjb21taXQgcmFkaWNlIGNvbWUgY29tbWl0IGxpbWl0ZSAoaW1wb3N0YXppb25lIHByZWRlZmluaXRhOiAiCisib2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIlZpc3VhbGl6emEgbGUgc3RhdGlzdGljaGUgc3VsIGNvc3RvIGRlbGwnb3BlcmF6aW9uZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiRm9yemEgbCdpbmRpY2F6aW9uZSBkJ2F2YW56YW1lbnRvIGRlbGwnb3BlcmF6aW9uZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OQorbXNnaWQgIlNob3cgb3V0cHV0IHNjb3JlIGZvciBibGFtZSBlbnRyaWVzIgorbXNnc3RyICJWaXN1YWxpenphIGlsIHB1bnRlZ2dpbyBkaSBvdXRwdXQgcGVyIGxlIHZvY2kgYmxhbWUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTAKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAiIgorIlZpc3VhbGl6emEgaWwgbm9tZSBmaWxlIG9yaWdpbmFyaW8gKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YTogYXV0b21hdGljbykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTEKK21zZ2lkICJTaG93IG9yaWdpbmFsIGxpbmVudW1iZXIgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyJWaXN1YWxpenphIGlsIG51bWVybyBkaSByaWdhIG9yaWdpbmFyaW8gKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YTogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MgorbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIiIKKyJWaXN1YWxpenphIGwnb3V0cHV0IGluIHVuIGZvcm1hdG8gcHJvZ2V0dGF0byBwZXIgbCd1dGlsaXp6byBkYSBwYXJ0ZSBkaSB1bmEgIgorIm1hY2NoaW5hIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUzCittc2dpZCAiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisiVmlzdWFsaXp6YSBpbCBmb3JtYXRvIHBvcmNlbGFpbiBjb24gbGUgaW5mb3JtYXppb25pIHN1bCBjb21taXQgcGVyIG9nbmkgcmlnYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NAorbXNnaWQgIlVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBnaXQtYW5ub3RhdGUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyJVc2EgbGEgc3Rlc3NhIG1vZGFsaXTDoCBkaSBvdXRwdXQgZGkgZ2l0LWFubm90YXRlIChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGE6ICIKKyJvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU1Cittc2dpZCAiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJWaXN1YWxpenphIGlsIHRpbWVzdGFtcCBncmV6em8gKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YTogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NgorbXNnaWQgIlNob3cgbG9uZyBjb21taXQgU0hBMSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorIlZpc3VhbGl6emEgbCdoYXNoIFNIQTEgZGVsIGNvbW1pdCBpbiBmb3JtYSBsdW5nYSAoaW1wb3N0YXppb25lIHByZWRlZmluaXRhOiAiCisib2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NworbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyJOb24gdmlzdWFsaXp6YXJlIGlsIG5vbWUgYXV0b3JlIGUgaWwgdGltZXN0YW1wIChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGE6ICIKKyJvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU4Cittc2dpZCAiU2hvdyBhdXRob3IgZW1haWwgaW5zdGVhZCBvZiBuYW1lIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisiVmlzdWFsaXp6YSBsJ2luZGlyaXp6byBlLW1haWwgZGVsbCdhdXRvcmUgaW52ZWNlIGRlbCBub21lIChpbXBvc3RhemlvbmUgIgorInByZWRlZmluaXRhOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU5Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgIklnbm9yYSBsZSBkaWZmZXJlbnplIHJlbGF0aXZlIGFnbGkgc3BhemkgYmlhbmNoaSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MCBidWlsdGluL2xvZy5jOjE3MDIKK21zZ2lkICJyZXYiCittc2dzdHIgInJldmlzaW9uZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MAorbXNnaWQgIklnbm9yZSA8cmV2PiB3aGVuIGJsYW1pbmciCittc2dzdHIgIklnbm9yYSA8cmV2aXNpb25lPiBkdXJhbnRlIGwnZXNlY3V6aW9uZSBkZWwgYmxhbWUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjEKK21zZ2lkICJJZ25vcmUgcmV2aXNpb25zIGZyb20gPGZpbGU+IgorbXNnc3RyICJJZ25vcmEgbGUgcmV2aXNpb25pIHNwZWNpZmljYXRlIGluIDxmaWxlPiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MgorbXNnaWQgImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiCittc2dzdHIgImNvbG9yYSBpbiBtb2RvIGRpZmZlcmVudGUgaSBtZXRhZGF0aSByaWRvbmRhbnRpIGRlbGxhIHJpZ2EgcHJlY2VkZW50ZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MworbXNnaWQgImNvbG9yIGxpbmVzIGJ5IGFnZSIKK21zZ3N0ciAiY29sb3JhIGxlIHJpZ2hlIGluIGJhc2UgYWxsJ2V0w6AiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjQKK21zZ2lkICJTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCBiZXR0ZXIgbWF0Y2giCittc2dzdHIgIlVzYSBjaWNsaSBleHRyYSBwZXIgdHJvdmFyZSB1bmEgY29ycmlzcG9uZGVuemEgbWlnbGlvcmUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjUKK21zZ2lkICJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiCittc2dzdHIgIlVzYSBsZSByZXZpc2lvbmkgc2FsdmF0ZSBpbiA8ZmlsZT4gYW56aWNow6kgcmljaGlhbWFyZSBnaXQtcmV2LWxpc3QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjYKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICJVc2EgaSBjb250ZW51dGkgZGkgPGZpbGU+IGNvbWUgaW1tYWdpbmUgZmluYWxlIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY3IGJ1aWx0aW4vYmxhbWUuYzo4NjgKK21zZ2lkICJzY29yZSIKK21zZ3N0ciAicHVudGVnZ2lvIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY3Cittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiVHJvdmEgY29waWUgZGVsbGUgcmlnaGUgYWxsJ2ludGVybm8gZSBmcmEgZmlsZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OAorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIlRyb3ZhIHJpZ2hlIHNwb3N0YXRlIGFsbCdpbnRlcm5vIGUgZnJhIGZpbGUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjkKK21zZ2lkICJuLG0iCittc2dzdHIgIm4sbSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICJFbGFib3JhIHNvbG8gbCdpbnRlcnZhbGxvIHJpZ2hlIG4sbSwgY29udGFuZG9sZSBkYSAxIgorCisjOiBidWlsdGluL2JsYW1lLmM6OTIxCittc2dpZCAiLS1wcm9ncmVzcyBjYW4ndCBiZSB1c2VkIHdpdGggLS1pbmNyZW1lbnRhbCBvciBwb3JjZWxhaW4gZm9ybWF0cyIKK21zZ3N0ciAiIgorIi0tcHJvZ3Jlc3Mgbm9uIHB1w7IgZXNzZXJlIHVzYXRvIGNvbiAtLWluY3JlbWVudGFsIG8gY29uIGkgZm9ybWF0aSBwb3JjZWxhaW4iCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlCisjLiBtYXhpbXVtIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluCisjLiAiZ2l0IGJsYW1lIiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMQorIy4gbW9udGhzIGFnbyIsIHdoaWNoIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QKKyMuIGFtb25nIHZhcmlvdXMgZm9ybXMgb2YgcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0CisjLiB5b3VyIGxhbmd1YWdlIG1heSBuZWVkIG1vcmUgb3IgZmV3ZXIgZGlzcGxheQorIy4gY29sdW1ucy4KKyMuCisjOiBidWlsdGluL2JsYW1lLmM6OTcyCittc2dpZCAiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIKK21zZ3N0ciAiNCBhbm5pLCAxMSBnaW9ybmkgZmEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmUiCittc2dpZF9wbHVyYWwgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmVzIgorbXNnc3RyWzBdICJpbCBmaWxlICVzIGhhIHNvbG8gJWx1IHJpZ2EiCittc2dzdHJbMV0gImlsIGZpbGUgJXMgaGEgc29sbyAlbHUgcmlnaGUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoxMTI1Cittc2dpZCAiQmxhbWluZyBsaW5lcyIKK21zZ3N0ciAiRXNlZ3VvIGlsIGJsYW1lIHN1bGxlIHJpZ2hlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI5Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3B6aW9uaT5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzAKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstbF0gWy1mXSA8YnJhbmNoLW5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wemlvbmk+XSBbLWxdIFstZl0gPG5vbWUgYnJhbmNoPiBbPHB1bnRvIGRpIHBhcnRlbnphPl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzEKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstcl0gKC1kIHwgLUQpIDxicmFuY2gtbmFtZT4uLi4iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcHppb25pPl0gWy1yXSAoLWQgfCAtRCkgPG5vbWUgYnJhbmNoPi4uLiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMgorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wemlvbmk+XSAoLW0gfCAtTSkgWzx2ZWNjaGlvIGJyYW5jaD5dIDxudW92byBicmFuY2g+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMzCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLWMgfCAtQykgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3B6aW9uaT5dICgtYyB8IC1DKSBbPHZlY2NoaW8gYnJhbmNoPl0gPG51b3ZvIGJyYW5jaD4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3B6aW9uaT5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wemlvbmk+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisiZWxpbWlubyBpbCBicmFuY2ggJyVzJyBkaSBjdWkgw6ggc3RhdG8gZXNlZ3VpdG8gaWwgbWVyZ2UgaW5cbiIKKyIgICAgICAgICAnJXMnLCBtYSBkaSBjdWkgbm9uIMOoIGFuY29yYSBzdGF0byBlc2VndWl0byBpbCBtZXJnZSBpbiBIRUFELiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgZXZlbiB0aG91Z2ggaXQgaXMgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisibm9uIGVsaW1pbm8gaWwgYnJhbmNoICclcycgZGkgY3VpIG5vbiDDqCBhbmNvcmEgc3RhdG8gZXNlZ3VpdG8gaWwgbWVyZ2UgaW5cbiIKKyIgICAgICAgICAnJXMnLCBiZW5jaMOpIG5lIHNpYSBzdGF0byBlc2VndWl0byBpbCBtZXJnZSBpbiBIRUFELiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIGwnb2dnZXR0byBjb21taXQgcGVyICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorIklsIGJyYW5jaCAnJXMnIG5vbiDDqCBzdGF0byBzb3R0b3Bvc3RvIGNvbXBsZXRhbWVudGUgYSB1biBtZXJnZS5cbiIKKyJTZSBzZWkgc2ljdXJvIGRpIHZvbGVybG8gZWxpbWluYXJlLCBlc2VndWkgJ2dpdCBicmFuY2ggLUQgJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODkKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJBZ2dpb3JuYW1lbnRvIGRlbCBmaWxlIGRpIGNvbmZpZ3VyYXppb25lIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjAKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgImltcG9zc2liaWxlIHVzYXJlIC1hIGNvbiAtZCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjYKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgbCdvZ2dldHRvIGNvbW1pdCBwZXIgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSBicmFuY2ggJyVzJyBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZWxpbWluYXJlIGlsIGJyYW5jaCAnJXMnIGRpIGN1aSDDqCBzdGF0byBlc2VndWl0byBpbCBjaGVja291dCBpbiAiCisiJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgImJyYW5jaCByZW1vdG8gdHJhY2NpYXRvICclcycgbm9uIHRyb3ZhdG8uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJicmFuY2ggJyVzJyBub24gdHJvdmF0by4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRXJyb3JlIGR1cmFudGUgbCdlbGltaW5hemlvbmUgZGVsIGJyYW5jaCByZW1vdG8gdHJhY2NpYXRvICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBsJ2VsaW1pbmF6aW9uZSBkZWwgYnJhbmNoICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiQnJhbmNoIHJlbW90byB0cmFjY2lhdG8gJXMgZWxpbWluYXRvIChlcmEgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiQnJhbmNoICVzIGVsaW1pbmF0byAoZXJhICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjkgYnVpbHRpbi90YWcuYzo2MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGxhIHN0cmluZ2EgZGkgZm9ybWF0byIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjAKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaXNvbHZlcmUgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAoJXMpIHBvaW50cyBvdXRzaWRlIG9mIHJlZnMvaGVhZHMvIgorbXNnc3RyICJIRUFEICglcykgcHVudGEgYSB1biBvZ2dldHRvIG5vbiBpbiByZWZzL2hlYWRzLyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIHJlYmFzZWQgYXQgJXMiCittc2dzdHIgIlJlYmFzZSBkZWwgYnJhbmNoICVzIGluIGNvcnNvIGluICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgYmlzZWN0ZWQgYXQgJXMiCittc2dzdHIgIkJpc2V6aW9uZSBkZWwgYnJhbmNoICVzIGluIGNvcnNvIGluICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUwMgorbXNnaWQgImNhbm5vdCBjb3B5IHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIGNvcGlhcmUgaWwgYnJhbmNoIGNvcnJlbnRlIHF1YW5kbyBub24gc2kgw6ggc3UgYWxjdW4gYnJhbmNoLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDQKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIHJpZGVub21pbmFyZSBpbCBicmFuY2ggY29ycmVudGUgcXVhbmRvIG5vbiBzaSDDqCBzdSBhbGN1biBicmFuY2guIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICJOb21lIGJyYW5jaCBub24gdmFsaWRvOiAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0MgorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICJSaWRlbm9taW5hemlvbmUgZGVsIGJyYW5jaCBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ0Cittc2dpZCAiQnJhbmNoIGNvcHkgZmFpbGVkIgorbXNnc3RyICJDb3BpYSBkZWwgYnJhbmNoIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhIGNvcHkgb2YgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyIKK21zZ3N0ciAiQ3JlYXRhIGNvcGlhIGRlbCBicmFuY2ggbWFsIGRlbm9taW5hdG8gJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgIkJyYW5jaCBtYWwgZGVub21pbmF0byAnJXMnIHJpbm9taW5hdG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIkJyYW5jaCByaW5vbWluYXRvIGluICVzLCBtYSBIRUFEIG5vbiDDqCBhZ2dpb3JuYXRvISIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjYKK21zZ2lkICJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJJbCBicmFuY2ggw6ggc3RhdG8gcmlub21pbmF0bywgbWEgbCdhZ2dpb3JuYW1lbnRvIGRlbCBmaWxlIGRpIGNvbmZpZ3VyYXppb25lICIKKyJub24gw6ggcml1c2NpdG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY4Cittc2dpZCAiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJJbCBicmFuY2ggw6ggc3RhdG8gY29waWF0bywgbWEgbCdhZ2dpb3JuYW1lbnRvIGRlbCBmaWxlIGRpIGNvbmZpZ3VyYXppb25lIG5vbiAiCisiw6ggcml1c2NpdG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2hcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgc3RyaXBwZWQuXG4iCittc2dzdHIgIiIKKyJNb2RpZmljYSBsYSBkZXNjcml6aW9uZSBkZWwgYnJhbmNoXG4iCisiICAlc1xuIgorIkxlIHJpZ2hlIGNoZSBpbml6aWFubyBjb24gJyVjJyBzYXJhbm5vIG9tZXNzZS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTgKK21zZ2lkICJHZW5lcmljIG9wdGlvbnMiCittc2dzdHIgIk9wemlvbmkgZ2VuZXJpY2hlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMAorbXNnaWQgInNob3cgaGFzaCBhbmQgc3ViamVjdCwgZ2l2ZSB0d2ljZSBmb3IgdXBzdHJlYW0gYnJhbmNoIgorbXNnc3RyICIiCisidmlzdWFsaXp6YSBsJ2hhc2ggZSBsJ29nZ2V0dG8sIHVzYSBsJ29wemlvbmUgZHVlIHZvbHRlIHBlciBpbCBicmFuY2ggdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIxCittc2dpZCAic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIKK21zZ3N0ciAibm9uIHZpc3VhbGl6emFyZSBpIG1lc3NhZ2dpIGluZm9ybWF0aXZpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJpbXBvc3RhIGxhIG1vZGFsaXTDoCB0cmFja2luZyAodmVkaSBnaXQtcHVsbCgxKSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI0Cittc2dpZCAiZG8gbm90IHVzZSIKK21zZ3N0ciAibm9uIHVzYXJlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNiBidWlsdGluL3JlYmFzZS5jOjUxMworbXNnaWQgInVwc3RyZWFtIgorbXNnc3RyICJ1cHN0cmVhbSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYKK21zZ2lkICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgIm1vZGlmaWNhIGxlIGluZm9ybWF6aW9uaSBzdWxsJ3Vwc3RyZWFtIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNworbXNnaWQgInVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICJyaW11b3ZpIGxlIGluZm9ybWF6aW9uaSBzdWxsJ3Vwc3RyZWFtIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOAorbXNnaWQgInVzZSBjb2xvcmVkIG91dHB1dCIKK21zZ3N0ciAidXNhIGwnb3V0cHV0IGNvbG9yYXRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOQorbXNnaWQgImFjdCBvbiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgImFnaXNjaSBzdWkgYnJhbmNoIHJlbW90aSB0cmFjY2lhdGkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMxIGJ1aWx0aW4vYnJhbmNoLmM6NjMzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAic3RhbXBhIHNvbG8gaSBicmFuY2ggY2hlIGNvbnRlbmdvbm8gaSBjb21taXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMyIGJ1aWx0aW4vYnJhbmNoLmM6NjM0Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAic3RhbXBhIHNvbG8gaSBicmFuY2ggY2hlIG5vbiBjb250ZW5nb25vIGkgY29tbWl0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzNworbXNnaWQgIlNwZWNpZmljIGdpdC1icmFuY2ggYWN0aW9uczoiCittc2dzdHIgIkF6aW9uaSBzcGVjaWZpY2hlIGRpIGdpdC1icmFuY2g6IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzOAorbXNnaWQgImxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICJlbGVuY2Egc2lhIGkgYnJhbmNoIHJlbW90aSB0cmFjY2lhdGkgc2lhIHF1ZWxsaSBsb2NhbGkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQwCittc2dpZCAiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giCittc2dzdHIgImVsaW1pbmEgaWwgYnJhbmNoIGNvbXBsZXRhbWVudGUgc290dG9wb3N0byBhIG1lcmdlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MQorbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgImVsaW1pbmEgaWwgYnJhbmNoIChhbmNoZSBzZSBub24gw6ggc3RhdG8gc290dG9wb3N0byBhIG1lcmdlKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDIKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIKK21zZ3N0ciAic3Bvc3RhL3Jpbm9taW5hIHVuIGJyYW5jaCBlIGlsIHN1byByZWdpc3RybyBkZWkgcmlmZXJpbWVudGkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAic3Bvc3RhL3Jpbm9taW5hIHVuIGJyYW5jaCBhbmNoZSBzZSBsYSBkZXN0aW5hemlvbmUgZXNpc3RlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NAorbXNnaWQgImNvcHkgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgImNvcGlhIHVuIGJyYW5jaCBlIGlsIHN1byByZWdpc3RybyBkZWkgcmlmZXJpbWVudGkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ1Cittc2dpZCAiY29weSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJjb3BpYSB1biBicmFuY2ggYW5jaGUgc2UgbGEgZGVzdGluYXppb25lIGVzaXN0ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDYKK21zZ2lkICJsaXN0IGJyYW5jaCBuYW1lcyIKK21zZ3N0ciAiZWxlbmNhIGkgbm9taSBkZWkgYnJhbmNoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NworbXNnaWQgInNob3cgY3VycmVudCBicmFuY2ggbmFtZSIKK21zZ3N0ciAidmlzdWFsaXp6YSBpbCBub21lIGRlbCBicmFuY2ggY29ycmVudGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ4Cittc2dpZCAiY3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2ciCittc2dzdHIgImNyZWEgaWwgcmVnaXN0cm8gZGVpIHJpZmVyaW1lbnRpIGRlbCBicmFuY2giCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUwCittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgIm1vZGlmaWNhIGxhIGRlc2NyaXppb25lIGRlbCBicmFuY2giCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUxCittc2dpZCAiZm9yY2UgY3JlYXRpb24sIG1vdmUvcmVuYW1lLCBkZWxldGlvbiIKK21zZ3N0ciAiZm9yemEgbGEgY3JlYXppb25lLCBzcG9zdGFtZW50by9yaWRlbm9taW5hemlvbmUsIGVsaW1pbmF6aW9uZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTIKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAic3RhbXBhIHNvbG8gaSBicmFuY2ggc290dG9wb3N0aSBhIG1lcmdlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAic3RhbXBhIHNvbG8gaSBicmFuY2ggbm9uIHNvdHRvcG9zdGkgYSBtZXJnZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTQKK21zZ2lkICJsaXN0IGJyYW5jaGVzIGluIGNvbHVtbnMiCittc2dzdHIgImVsZW5jYSBpIGJyYW5jaCBpbiBjb2xvbm5lIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NyBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQyIGJ1aWx0aW4vbm90ZXMuYzo0MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTggYnVpbHRpbi9ub3Rlcy5jOjU4MSBidWlsdGluL25vdGVzLmM6NTg0CisjOiBidWlsdGluL3RhZy5jOjQzMworbXNnaWQgIm9iamVjdCIKK21zZ3N0ciAib2dnZXR0byIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTgKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgInN0YW1wYSBzb2xvIGkgYnJhbmNoIGRlbGwnb2dnZXR0byIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NjAgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0OCBidWlsdGluL3RhZy5jOjQ0MAorbXNnaWQgInNvcnRpbmcgYW5kIGZpbHRlcmluZyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSIKK21zZ3N0ciAiIgorImwnb3JkaW5hbWVudG8gZSBpbCBmaWx0cmFnZ2lvIG5vbiBmYW5ubyBkaWZmZXJlbnphIHRyYSBtYWl1c2NvbGUgZSBtaW51c2NvbGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzggYnVpbHRpbi90YWcuYzo0MzgKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAiZm9ybWF0byBkYSB1c2FyZSBwZXIgbCdvdXRwdXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Njg0IGJ1aWx0aW4vY2xvbmUuYzo3ODUKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiSEVBRCBub24gdHJvdmF0byBmcmEgaSByaWZlcmltZW50aS9oZWFkISIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MDgKK21zZ2lkICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIGUgLS12ZXJib3NlIG5vbiBzb25vIGNvbXBhdGliaWxpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyMyBidWlsdGluL2JyYW5jaC5jOjc3NyBidWlsdGluL2JyYW5jaC5jOjc4NgorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJub21lIGJyYW5jaCByaWNoaWVzdG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzUzCittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZm9ybmlyZSB1bmEgZGVzY3JpemlvbmUgcGVyIGwnSEVBRCBzY29sbGVnYXRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OAorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICJpbXBvc3NpYmlsZSBtb2RpZmljYXJlIGxhIGRlc2NyaXppb25lIHBlciBwacO5IGRpIHVuIGJyYW5jaCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWl0IG9uIGJyYW5jaCAnJXMnIHlldC4iCittc2dzdHIgIk5vbiBlc2lzdGUgYW5jb3JhIG5lc3N1biBjb21taXQgc3VsIGJyYW5jaCAnJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gYnJhbmNoIG5hbWVkICclcycuIgorbXNnc3RyICJOb24gZXNpc3RlIGFsY3VuIGJyYW5jaCBkZW5vbWluYXRvICclcycuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4MworbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIGNvcHkgb3BlcmF0aW9uIgorbXNnc3RyICJzb25vIHByZXNlbnRpIHRyb3BwaSBicmFuY2ggcGVyIGNvbnNlbnRpcmUgdW4nb3BlcmF6aW9uZSBkaSBjb3BpYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTIKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZm9yIGEgcmVuYW1lIG9wZXJhdGlvbiIKK21zZ3N0ciAiIgorInNvbm8gcHJlc2VudGkgdHJvcHBpIGFyZ29tZW50aSBwZXIgY29uc2VudGlyZSB1bidvcGVyYXppb25lIGRpICIKKyJyaWRlbm9taW5hemlvbmUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzk3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHNldCBuZXcgdXBzdHJlYW0iCittc2dzdHIgIiIKKyJzb25vIHByZXNlbnRpIHRyb3BwaSBhcmdvbWVudGkgcGVyIGNvbnNlbnRpcmUgbCdpbXBvc3RhemlvbmUgZGVsIG51b3ZvICIKKyJ1cHN0cmVhbSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgaW1wb3N0YXJlIGwndXBzdHJlYW0gZGkgSEVBRCBhICVzIHF1YW5kbyBub24gcHVudGEgYWQgYWxjdW4gIgorImJyYW5jaC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODA0IGJ1aWx0aW4vYnJhbmNoLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoICclcyciCittc2dzdHIgImJyYW5jaCAnJXMnIG5vbiBlc2lzdGVudGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODA4CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJpbCBicmFuY2ggJyVzJyBub24gZXNpc3RlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAiIgorInNvbm8gcHJlc2VudGkgdHJvcHBpIGFyZ29tZW50aSBwZXIgcmltdW92ZXJlIGxlIGluZm9ybWF6aW9uaSBzdWxsJ3Vwc3RyZWFtIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNQorbXNnaWQgImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSByaW11b3ZlcmUgbGUgaW5mb3JtYXppb25pIHN1bGwndXBzdHJlYW0gZGkgSEVBRCBxdWFuZG8gbm9uIHB1bnRhICIKKyJhZCBhbGN1biBicmFuY2guIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iCittc2dzdHIgIklsIGJyYW5jaCAnJXMnIG5vbiBoYSBpbmZvcm1hemlvbmkgc3VsbCd1cHN0cmVhbSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDEKK21zZ2lkICIiCisiVGhlIC1hLCBhbmQgLXIsIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCB0YWtlIGEgYnJhbmNoIG5hbWUuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHVzZTogLWF8LXIgLS1saXN0IDxwYXR0ZXJuPj8iCittc2dzdHIgIiIKKyJMZSBvcHppb25pIGRpICdnaXQgYnJhbmNoJyAtYSBlIC1yIG5vbiByaWNoaWVkb25vIHVuIG5vbWUgYnJhbmNoLlxuIgorIkZvcnNlIHZvbGV2aSB1c2FyZTogLWF8LXIgLS1saXN0IDxwYXR0ZXJuPj8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ1Cittc2dpZCAiIgorInRoZSAnLS1zZXQtdXBzdHJlYW0nIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBQbGVhc2UgdXNlICctLXRyYWNrJyBvciAiCisiJy0tc2V0LXVwc3RyZWFtLXRvJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorImwnb3B6aW9uZSAnLS1zZXQtdXBzdHJlYW0nIG5vbiDDqCBwacO5IHN1cHBvcnRhdGEuIFVzYSAnLS10cmFjaycgbyAnLS1zZXQtIgorInVwc3RyZWFtLXRvJy4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTUgYnVpbHRpbi9idW5kbGUuYzoyMworbXNnaWQgImdpdCBidW5kbGUgY3JlYXRlIFs8b3B0aW9ucz5dIDxmaWxlPiA8Z2l0LXJldi1saXN0IGFyZ3M+IgorbXNnc3RyICJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wemlvbmk+XSA8ZmlsZT4gPGFyZ29tZW50aSBnaXQtcmV2LWxpc3Q+IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2IGJ1aWx0aW4vYnVuZGxlLmM6MjgKK21zZ2lkICJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmlsZT4iCittc2dzdHIgImdpdCBidW5kbGUgdmVyaWZ5IFs8b3B6aW9uaT5dIDxmaWxlPiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNyBidWlsdGluL2J1bmRsZS5jOjMzCittc2dpZCAiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDxmaWxlPiBbPG5vbWUgcmlmZXJpbWVudG8+Li4uXSIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOCBidWlsdGluL2J1bmRsZS5jOjM4Cittc2dpZCAiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iCittc2dzdHIgImdpdCBidW5kbGUgdW5idW5kbGUgPGZpbGU+IFs8bm9tZSByaWZlcmltZW50bz4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM3NQorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJub24gdmlzdWFsaXp6YXJlIGxhIGJhcnJhIGRpIGF2YW56YW1lbnRvIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM3NworbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgInZpc3VhbGl6emEgbGEgYmFycmEgZGkgYXZhbnphbWVudG8iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzc5Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb2JqZWN0IHdyaXRpbmcgcGhhc2UiCittc2dzdHIgIiIKKyJ2aXN1YWxpenphIGxhIGJhcnJhIGRpIGF2YW56YW1lbnRvIGR1cmFudGUgbGEgZmFzZSBkaSBzY3JpdHR1cmEgb2dnZXR0aSIKKworIzogYnVpbHRpbi9idW5kbGUuYzo3MyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODIKK21zZ2lkICJzaW1pbGFyIHRvIC0tYWxsLXByb2dyZXNzIHdoZW4gcHJvZ3Jlc3MgbWV0ZXIgaXMgc2hvd24iCittc2dzdHIgInNpbWlsZSBhIC0tYWxsLXByb2dyZXNzIHF1YW5kbyDDqCB2aXN1YWxpenphdGEgbGEgYmFycmEgZGkgYXZhbnphbWVudG8iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6OTMKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICJQZXIgY3JlYXJlIHVuIGJ1bmRsZSDDqCBuZWNlc3NhcmlvIHVuIHJlcG9zaXRvcnkuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjEwNAorbXNnaWQgImRvIG5vdCBzaG93IGJ1bmRsZSBkZXRhaWxzIgorbXNnc3RyICJub24gdmlzdWFsaXp6YXJlIGkgZGV0dGFnbGkgc3VsIGJ1bmRsZSIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIlcyDDqCBjb3JyZXR0b1xuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2MAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAiUGVyIGRlY29tcHJpbWVyZSB1biBidW5kbGUgw6ggbmVjZXNzYXJpbyB1biByZXBvc2l0b3J5LiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNjggYnVpbHRpbi9yZW1vdGUuYzoxNjg2Cittc2dpZCAiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgdWx0ZXJpb3JpIGRldHRhZ2xpOyBkZXZlIGVzc2VyZSBjb2xsb2NhdG8gcHJpbWEgZGkgdW4gc290dG9jb21hbmRvIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE5MCBidWlsdGluL3JlbW90ZS5jOjE3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiU290dG9jb21hbmRvIHNjb25vc2NpdXRvOiAlcyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NQorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8dHlwZT4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxwYXRoPl0gPG9iamVjdD4iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8dGlwbz4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxwZXJjb3Jzbz5dIDxvZ2dldHRvPiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NgorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MTcKK21zZ2lkICJvbmx5IG9uZSBiYXRjaCBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAicHXDsiBlc3NlcmUgc3BlY2lmaWNhdGEgc29sbyB1bidvcHppb25lIGJhdGNoIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM1Cittc2dpZCAiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorbXNnc3RyICI8dGlwbz4gcHXDsiBlc3NlcmUgdW5vIGZyYSBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNgorbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgInZpc3VhbGl6emEgdGlwbyBvZ2dldHRvIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM3Cittc2dpZCAic2hvdyBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAidmlzdWFsaXp6YSBkaW1lbnNpb25pIG9nZ2V0dG8iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzkKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgImVzY2kgY29uIGNvZGljZSBkJ3VzY2l0YSB6ZXJvIHNlIG5vbiBzaSBzb25vIHZlcmlmaWNhdGkgZXJyb3JpIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQwCittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgInN0YW1wYSBpbCBjb250ZW51dG8gZGVsbCdvZ2dldHRvIGNvbiB1biBmb3JtYXRvIGxlZ2dpYmlsZSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MgorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biB0ZXh0Y29udiBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJlc2VndWkgdGV4dGNvbnYgc3VsIGNvbnRlbnV0byBkZWxsJ29nZ2V0dG8gKHBlciBnbGkgb2dnZXR0aSBibG9iKSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NAorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biBmaWx0ZXJzIG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgImVzZWd1aSBpIGZpbHRyaSBzdWwgY29udGVudXRvIGRlbGwnb2dnZXR0byAocGVyIGdsaSBvZ2dldHRpIGJsb2IpIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ1IGdpdC1zdWJtb2R1bGUuc2g6MTAwMgorbXNnaWQgImJsb2IiCittc2dzdHIgImJsb2IiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDYKK21zZ2lkICJ1c2UgYSBzcGVjaWZpYyBwYXRoIGZvciAtLXRleHRjb252Ly0tZmlsdGVycyIKK21zZ3N0ciAidXNhIHVuIHBlcmNvcnNvIHNwZWNpZmljbyBwZXIgLS10ZXh0Y29udi8tLWZpbHRlcnMiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDgKK21zZ2lkICJhbGxvdyAtcyBhbmQgLXQgdG8gd29yayB3aXRoIGJyb2tlbi9jb3JydXB0IG9iamVjdHMiCittc2dzdHIgImNvbnNlbnRpIGEgLXMgZSAtdCBkaSBmdW56aW9uYXJlIGNvbiBvZ2dldHRpIG1hbGZvcm1hdGkvY29ycm90dGkiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDkKK21zZ2lkICJidWZmZXIgLS1iYXRjaCBvdXRwdXQiCittc2dzdHIgImVzZWd1aSBpbCBidWZmZXJpbmcgZGVsbCdvdXRwdXQgZGkgLS1iYXRjaCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1MQorbXNnaWQgInNob3cgaW5mbyBhbmQgY29udGVudCBvZiBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgbGUgaW5mb3JtYXppb25pIGUgaWwgY29udGVudXRvIGRlZ2xpIG9nZ2V0dGkgZm9ybml0aSBuZWxsbyAiCisic3RhbmRhcmQgaW5wdXQiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTUKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgInZpc3VhbGl6emEgbGUgaW5mb3JtYXppb25pIGRlZ2xpIG9nZ2V0dGkgZm9ybml0aSBuZWxsbyBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1OQorbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAiIgorInNlZ3VpIGkgY29sbGVnYW1lbnRpIHNpbWJvbGljaSBlbnRybyBsJ2FsYmVybyAodXNhdG8gY29uIC0tYmF0Y2ggbyAtLWJhdGNoLSIKKyJjaGVjaykiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjEKK21zZ2lkICJzaG93IGFsbCBvYmplY3RzIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrIgorbXNnc3RyICJ2aXN1YWxpenphIHR1dHRpIGdsaSBvZ2dldHRpIGNvbiAtLWJhdGNoIG8gLS1iYXRjaC1jaGVjayIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MworbXNnaWQgImRvIG5vdCBvcmRlciAtLWJhdGNoLWFsbC1vYmplY3RzIG91dHB1dCIKK21zZ3N0ciAibm9uIG9yZGluYXJlIGwnb3V0cHV0IGRpIC0tYmF0Y2gtYWxsLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjEzCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cmlidXRvPi4uLl0gWy0tXSA8bm9tZSBwZXJjb3Jzbz4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjE0Cittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHJpYnV0bz4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAiaW5kaWNhIHR1dHRpIGdsaSBhdHRyaWJ1dGkgaW1wb3N0YXRpIHN1bCBmaWxlIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMgorbXNnaWQgInVzZSAuZ2l0YXR0cmlidXRlcyBvbmx5IGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJ1c2Egc29sbyBpbCBmaWxlIC5naXRhdHRyaWJ1dGVzIGRlbGwnaW5kaWNlIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI1IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDIKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGVnZ2kgaSBub21pIGRlaSBmaWxlIGRhbGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyNSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI3Cittc2dpZCAidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgInRlcm1pbmEgaSByZWNvcmQgZGkgaW5wdXQgZSBvdXRwdXQgY29uIHVuIGNhcmF0dGVyZSBOVUwiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjEgYnVpbHRpbi9jaGVja291dC5jOjE0NjQgYnVpbHRpbi9nYy5jOjUzNworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5OQorbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAibm9uIHZpc3VhbGl6emFyZSBsJ2F2YW56YW1lbnRvIGRlbGwnb3BlcmF6aW9uZSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOQorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICJ2aXN1YWxpenphIGkgcGVyY29yc2kgZGkgaW5wdXQgbm9uIGNvcnJpc3BvbmRlbnRpIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjMxCittc2dpZCAiaWdub3JlIGluZGV4IHdoZW4gY2hlY2tpbmciCittc2dzdHIgImlnbm9yYSBsJ2luZGljZSBkdXJhbnRlIGlsIGNvbnRyb2xsbyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICJjYW5ub3Qgc3BlY2lmeSBwYXRobmFtZXMgd2l0aCAtLXN0ZGluIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzcGVjaWZpY2FyZSBpIG5vbWkgcGVyY29yc28gY29uIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY2Cittc2dpZCAiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iCittc2dzdHIgIi16IGhhIHNlbnNvIHNvbG8gY29uIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY4Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgIm5lc3N1biBwZXJjb3JzbyBzcGVjaWZpY2F0byIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzIKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAiLS1xdWlldCDDqCB2YWxpZG8gc29sbyBjb24gdW4gbm9tZSBwZXJjb3JzbyBzaW5nb2xvIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3NAorbXNnaWQgImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIgorbXNnc3RyICJub24gw6ggcG9zc2liaWxlIHVzYXJlIHNpYSAtLXF1aWV0IHNpYSAtLXZlcmJvc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc3Cittc2dpZCAiLS1ub24tbWF0Y2hpbmcgaXMgb25seSB2YWxpZCB3aXRoIC0tdmVyYm9zZSIKK21zZ3N0ciAiLS1ub24tbWF0Y2hpbmcgw6ggdmFsaWRvIHNvbG8gY29uIC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OQorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHppb25pPl0gPGNvbnRhdHRvPi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MTQKK21zZ2lkICJhbHNvIHJlYWQgY29udGFjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGVnZ2kgaSBjb250YXR0aSBhbmNoZSBkYWxsbyBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGNvbnRhdHRvOiAlcyIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6NDgKK21zZ2lkICJubyBjb250YWN0cyBzcGVjaWZpZWQiCittc2dzdHIgIm5lc3N1biBjb250YXR0byBzcGVjaWZpY2F0byIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjEzMQorbXNnaWQgImdpdCBjaGVja291dC1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHppb25pPl0gWy0tXSBbPGZpbGU+Li4uXSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE0OAorbXNnaWQgInN0YWdlIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDMgb3IgYWxsIgorbXNnc3RyICJsYSBmYXNlIGRldidlc3NlcmUgY29tcHJlc2EgZnJhIDEgZSAzIG8gYWxsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY0Cittc2dpZCAiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiCittc2dzdHIgImVzZWd1aSBpbCBjaGVja291dCBkaSB0dXR0aSBpIGZpbGUgbmVsbCdpbmRpY2UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjUKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMiCittc2dzdHIgImZvcnphIGxhIHNvdnJhc2NyaXR0dXJhIGRlaSBmaWxlIGVzaXN0ZW50aSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NworbXNnaWQgIm5vIHdhcm5pbmcgZm9yIGV4aXN0aW5nIGZpbGVzIGFuZCBmaWxlcyBub3QgaW4gaW5kZXgiCittc2dzdHIgIm5vbiBlbWV0dGVyZSB1biBhdnZpc28gcGVyIGkgZmlsZSBlc2lzdGVudGkgZSBpIGZpbGUgbm9uIG5lbGwnaW5kaWNlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY5Cittc2dpZCAiZG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzIgorbXNnc3RyICJub24gZXNlZ3VpcmUgaWwgY2hlY2tvdXQgZGVpIGZpbGUgbnVvdmkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzEKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAiYWdnaW9ybmEgbGUgaW5mb3JtYXppb25pIHN0YXQgbmVsIGZpbGUgaW5kaWNlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc1Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsZWdnaSBsJ2VsZW5jbyBkZWkgcGVyY29yc2kgZGFsbG8gc3RhbmRhcmQgaW5wdXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzcKK21zZ2lkICJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiCittc2dzdHIgInNjcml2aSBpbCBjb250ZW51dG8gaW4gZmlsZSB0ZW1wb3JhbmVpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc4IGJ1aWx0aW4vY29sdW1uLmM6MzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAzCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxMSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwOQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY3MgorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAic3RyaW5nYSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3OQorbXNnaWQgIndoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4iCittc2dzdHIgImFnZ2l1bmdpIGlsIHByZWZpc3NvIDxzdHJpbmdhPiBkdXJhbnRlIGxhIGNyZWF6aW9uZSBkZWkgZmlsZSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE4MQorbXNnaWQgImNvcHkgb3V0IHRoZSBmaWxlcyBmcm9tIG5hbWVkIHN0YWdlIgorbXNnc3RyICJjb3BpYSBpIGZpbGUgZGFsbGEgZmFzZSBzcGVjaWZpY2F0YSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMxCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIDxicmFuY2g+IgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxvcHppb25pPl0gPGJyYW5jaD4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMgorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8b3B6aW9uaT5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzcKK21zZ2lkICJnaXQgc3dpdGNoIFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0iCittc2dzdHIgImdpdCBzd2l0Y2ggWzxvcHppb25pPl0gPGJyYW5jaD4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MgorbXNnaWQgImdpdCByZXN0b3JlIFs8b3B0aW9ucz5dIFstLXNvdXJjZT08YnJhbmNoPl0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcmVzdG9yZSBbPG9wemlvbmk+XSBbLS1zb3VyY2U9PGJyYW5jaD5dIDxmaWxlPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NSBidWlsdGluL2NoZWNrb3V0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIgorbXNnc3RyICJpbCBwZXJjb3JzbyAnJXMnIG5vbiBoYSBsYSBub3N0cmEgdmVyc2lvbmUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcgYnVpbHRpbi9jaGVja291dC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJpbCBwZXJjb3JzbyAnJXMnIG5vbiBoYSBsYSBsb3JvIHZlcnNpb25lIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgImlsIHBlcmNvcnNvICclcycgbm9uIGhhIHR1dHRlIGxlIHZlcnNpb25pIG5lY2Vzc2FyaWUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJpbCBwZXJjb3JzbyAnJXMnIG5vbiBoYSBsZSB2ZXJzaW9uaSBuZWNlc3NhcmllIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJzogY2Fubm90IG1lcmdlIgorbXNnc3RyICJwZXJjb3JzbyAnJXMnOiBpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBtZXJnZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYWdnaXVuZ2VyZSBpbCByaXN1bHRhdG8gZGVsIG1lcmdlIHBlciAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiUmljcmVhdG8gJWQgY29uZmxpdHRvIGRpIG1lcmdlIgorbXNnc3RyWzFdICJSaWNyZWF0aSAlZCBjb25mbGl0dGkgZGkgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gJXMiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSAlcyIKK21zZ3N0clswXSAiQWdnaW9ybmF0byAlZCBwZXJjb3JzbyBkYSAlcyIKK21zZ3N0clsxXSAiQWdnaW9ybmF0aSAlZCBwZXJjb3JzaSBkYSAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkICVkIHBhdGggZnJvbSB0aGUgaW5kZXgiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSB0aGUgaW5kZXgiCittc2dzdHJbMF0gIkFnZ2lvcm5hdG8gJWQgcGVyY29yc28gZGFsbCdpbmRpY2UiCittc2dzdHJbMV0gIkFnZ2lvcm5hdGkgJWQgcGVyY29yc2kgZGFsbCdpbmRpY2UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTIgYnVpbHRpbi9jaGVja291dC5jOjQxNSBidWlsdGluL2NoZWNrb3V0LmM6NDE4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiJyVzJyBub24gcHXDsiBlc3NlcmUgdXNhdG8gY29uIGkgcGVyY29yc2kgaW4gZmFzZSBkaSBhZ2dpb3JuYW1lbnRvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDI1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICInJXMnIG5vbiBwdcOyIGVzc2VyZSB1c2F0byBjb24gJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgYWdnaW9ybmFyZSBkZWkgcGVyY29yc2kgZSBwYXNzYXJlIGFsIGJyYW5jaCAnJXMnICIKKyJjb250ZW1wb3JhbmVhbWVudGUuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5laXRoZXIgJyVzJyBvciAnJXMnIGlzIHNwZWNpZmllZCIKK21zZ3N0ciAibsOpICclcycgbsOpICclcycgc29ubyBzdGF0aSBzcGVjaWZpY2F0aSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgdXNlZCB3aGVuICclcycgaXMgbm90IHNwZWNpZmllZCIKK21zZ3N0ciAiJyVzJyBkZXYnZXNzZXJlIHVzYXRvIHF1YW5kbyAnJXMnIG5vbiDDqCBzcGVjaWZpY2F0byIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0NSBidWlsdGluL2NoZWNrb3V0LmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgb3IgJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICInJXMnIG8gJyVzJyBub24gcG9zc29ubyBlc3NlcmUgdXNhdGkgY29uICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTA5IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICJpbCBwZXJjb3JzbyAnJXMnIG5vbiDDqCBzdGF0byBzb3R0b3Bvc3RvIGEgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2ODQgYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoxMDYKK21zZ2lkICJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAicHJpbWEgZGV2aSByaXNvbHZlcmUgbCdpbmRpY2UgY29ycmVudGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBjb250aW51ZSB3aXRoIHN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBjb250aW51YXJlIGNvbiBtb2RpZmljaGUgaW4gc3RhZ2UgbmVpIGZpbGUgc2VndWVudGk6XG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuIG5vdCBkbyByZWZsb2cgZm9yICclcyc6ICVzXG4iCittc2dzdHIgIkltcG9zc2liaWxlIGVzYW1pbmFyZSBpbCByZWdpc3RybyBkZWkgcmlmZXJpbWVudGkgcGVyICclcyc6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NzkKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCBzaSB0cm92YSBvcmEgYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4MyBidWlsdGluL2Nsb25lLmM6NzE3Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBIRUFEIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIEhFQUQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiUmlwcmlzdGluYSBpbCBicmFuY2ggJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICJTaSDDqCBnacOgIHN1ICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiU2kgw6ggcGFzc2F0aSBhbCBicmFuY2ggJyVzJyBlIGxvIHNpIMOoIHJlaW1wb3N0YXRvXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTYgYnVpbHRpbi9jaGVja291dC5jOjEzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiU2kgw6ggcGFzc2F0aSBhIHVuIG51b3ZvIGJyYW5jaCAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiU2kgw6ggcGFzc2F0aSBhbCBicmFuY2ggJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi5lIGFsdHJpICVkLlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dpZF9wbHVyYWwgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzBdICIiCisiQXR0ZW56aW9uZTogc3RhaSByaW11b3ZlbmRvICVkIGNvbW1pdCBub24gY29sbGVnYXRvIGFkIGFsY3VuXG4iCisiYnJhbmNoOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMV0gIiIKKyJBdHRlbnppb25lOiBzdGFpIHJpbXVvdmVuZG8gJWQgY29tbWl0IG5vbiBjb2xsZWdhdGkgYWQgYWxjdW5cbiIKKyJicmFuY2g6XG4iCisiXG4iCisiJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCBpdCBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnaWRfcGx1cmFsICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCB0aGVtIGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dzdHJbMF0gIiIKKyJTZSB2dW9pIG1hbnRlbmVybG8gY3JlYW5kbyB1biBudW92byBicmFuY2gsIHF1ZXN0byBwb3RyZWJiZSBlc3NlcmVcbiIKKyJ1biBidW9uIG1vbWVudG8gcGVyIGZhcmxvIGNvbjpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bm9tZSBkZWwgbnVvdm8gYnJhbmNoPiAlc1xuIgorIlxuIgorbXNnc3RyWzFdICIiCisiU2UgdnVvaSBtYW50ZW5lcmxpIGNyZWFuZG8gdW4gbnVvdm8gYnJhbmNoLCBxdWVzdG8gcG90cmViYmUgZXNzZXJlXG4iCisidW4gYnVvbiBtb21lbnRvIHBlciBmYXJsbyBjb246XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5vbWUgZGVsIG51b3ZvIGJyYW5jaD4gJXNcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDkKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICJlcnJvcmUgaW50ZXJubyBkdXJhbnRlIGxhIHZpc2l0YSBkZWxsZSByZXZpc2lvbmkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDEzCittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgIkxhIHByZWNlZGVudGUgcG9zaXppb25lIGRpIEhFQUQgZXJhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA1MyBidWlsdGluL2NoZWNrb3V0LmM6MTMxNQorbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIlNlaSBzdSB1biBicmFuY2ggY2hlIGRldmUgYW5jb3JhIGVzc2VyZSBjcmVhdG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvdWxkIGJlIGJvdGggYSBsb2NhbCBmaWxlIGFuZCBhIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJQbGVhc2UgdXNlIC0tIChhbmQgb3B0aW9uYWxseSAtLW5vLWd1ZXNzKSB0byBkaXNhbWJpZ3VhdGUiCittc2dzdHIgIiIKKyInJXMnIHBvdHJlYmJlIGVzc2VyZSBzaWEgdW4gZmlsZSBsb2NhbGUsIHNpYSB1biBicmFuY2ggZGEgdHJhY2NpYXJlLlxuIgorIlVzYSAtLSAoZSBmYWNvbHRhdGl2YW1lbnRlIC0tbm8tZ3Vlc3MpIHBlciByaW11b3ZlcmUgbCdhbWJpZ3VpdMOgIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzNQorbXNnaWQgIiIKKyJJZiB5b3UgbWVhbnQgdG8gY2hlY2sgb3V0IGEgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBvbiwgZS5nLiAnb3JpZ2luJyxcbiIKKyJ5b3UgY2FuIGRvIHNvIGJ5IGZ1bGx5IHF1YWxpZnlpbmcgdGhlIG5hbWUgd2l0aCB0aGUgLS10cmFjayBvcHRpb246XG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtZT5cbiIKKyJcbiIKKyJJZiB5b3UnZCBsaWtlIHRvIGFsd2F5cyBoYXZlIGNoZWNrb3V0cyBvZiBhbiBhbWJpZ3VvdXMgPG5hbWU+IHByZWZlclxuIgorIm9uZSByZW1vdGUsIGUuZy4gdGhlICdvcmlnaW4nIHJlbW90ZSwgY29uc2lkZXIgc2V0dGluZ1xuIgorImNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIGluIHlvdXIgY29uZmlnLiIKK21zZ3N0ciAiIgorIlNlIGludGVuZGV2aSBlc2VndWlyZSBpbCBjaGVja291dCBkaSB1biBicmFuY2ggcmVtb3RvLCBhZCBlcy4gJ29yaWdpbicsXG4iCisicHVvaSBmYXJsbyB1c2FuZG8gbGEgdmVyc2lvbmUgY29tcGxldGFtZW50ZSBxdWFsaWZpY2F0YSBkZWwgbm9tZVxuIgorImNvbiBsJ29wemlvbmUgLS10cmFjazpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luLzxub21lPlxuIgorIlxuIgorIlNlIHByZWZlcmlzY2kgY2hlIGkgY2hlY2tvdXQgZGkgdW4gPG5vbWU+IGFtYmlndW8gc2lhbm8gc2VtcHJlIHJpc29sdGlcbiIKKyJyaXNwZXR0byBhIHVuIHBhcnRpY29sYXJlIHJlbW90bywgYWQgZXMuICdvcmlnaW4nLCBwb3RyZXN0aSB2b2xlclxuIgorImltcG9zdGFyZSBjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbiBuZWwgdHVvIGZpbGUgZGkgY29uZmlndXJhemlvbmUuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG1hdGNoZWQgbXVsdGlwbGUgKCVkKSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIiclcycgY29ycmlzcG9uZGUgYSBwacO5ICglZCkgYnJhbmNoIGNoZSBuZSB0cmFjY2lhbm8gdW5vIHJlbW90byIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMTEKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQiCittc2dzdHIgImF0dGVzbyBzb2xvIHVuIHJpZmVyaW1lbnRvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIKK21zZ3N0ciAiYXR0ZXNvIHNvbG8gdW4gcmlmZXJpbWVudG8sICVkIHNwZWNpZmljYXRpLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNzQgYnVpbHRpbi93b3JrdHJlZS5jOjI4MyBidWlsdGluL3dvcmt0cmVlLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAicmlmZXJpbWVudG8gbm9uIHZhbGlkbzogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjg3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAiaWwgcmlmZXJpbWVudG8gbm9uIMOoIHVuIGFsYmVybzogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgdGFnICclcyciCittc2dzdHIgImF0dGVzbyBicmFuY2gsIHJpY2V2dXRvIHRhZyAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IHJlbW90ZSBicmFuY2ggJyVzJyIKK21zZ3N0ciAiYXR0ZXNvIGJyYW5jaCwgcmljZXZ1dG8gYnJhbmNoIHJlbW90byAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNyBidWlsdGluL2NoZWNrb3V0LmM6MTM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290ICclcyciCittc2dzdHIgImF0dGVzbyBicmFuY2gsIHJpY2V2dXRvICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgY29tbWl0ICclcyciCittc2dzdHIgImF0dGVzbyBicmFuY2gsIHJpY2V2dXRvIGNvbW1pdCAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1NgorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSBtZXJnaW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgbWVyZ2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgY2FtYmlhcmUgYnJhbmNoIGR1cmFudGUgdW4gbWVyZ2VcbiIKKyJDb25zaWRlcmEgbCd1c28gZGkgXCJnaXQgbWVyZ2UgLS1xdWl0XCIgbyBkaSBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzYwCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvblxuIgorIkNvbnNpZGVyIFwiZ2l0IGFtIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIGNhbWJpYXJlIGJyYW5jaCBuZWwgYmVsIG1lenpvIGRpIHVuYSBzZXNzaW9uZSBhbVxuIgorIkNvbnNpZGVyYSBsJ3VzbyBkaSBcImdpdCBhbSAtLXF1aXRcIiBvIGRpIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjQKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZWJhc2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgY2FtYmlhcmUgYnJhbmNoIGR1cmFudGUgdW4gcmViYXNlXG4iCisiQ29uc2lkZXJhIGwndXNvIGRpIFwiZ2l0IHJlYmFzZSAtLXF1aXRcIiBvIGRpIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjgKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgY2hlcnJ5LXBpY2tpbmdcbiIKKyJDb25zaWRlciBcImdpdCBjaGVycnktcGljayAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBjYW1iaWFyZSBicmFuY2ggZHVyYW50ZSB1biBjaGVycnktcGlja1xuIgorIkNvbnNpZGVyYSBsJ3VzbyBkaSBcImdpdCBjaGVycnktcGljayAtLXF1aXRcIiBvIGRpIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzIKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmV2ZXJ0aW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgcmV2ZXJ0IC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIGNhbWJpYXJlIGJyYW5jaCBkdXJhbnRlIHVuIHJldmVydFxuIgorIkNvbnNpZGVyYSBsJ3VzbyBkaSBcImdpdCByZXZlcnQgLS1xdWl0XCIgbyBkaSBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzc2Cittc2dpZCAieW91IGFyZSBzd2l0Y2hpbmcgYnJhbmNoIHdoaWxlIGJpc2VjdGluZyIKK21zZ3N0ciAic3RhaSBjYW1iaWFuZG8gYnJhbmNoIGR1cmFudGUgdW5hIGJpc2V6aW9uZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODMKK21zZ2lkICJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiaSBwZXJjb3JzaSBub24gcG9zc29ubyBlc3NlcmUgdXNhdGkgcGFzc2FuZG8gZGEgdW4gYnJhbmNoIGEgdW4gYWx0cm8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzg2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzkwIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIiclcycgbm9uIHB1w7IgZXNzZXJlIHVzYXRvIHBhc3NhbmRvIGRhIHVuIGJyYW5jaCBhIHVuIGFsdHJvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5OCBidWlsdGluL2NoZWNrb3V0LmM6MTQwMSBidWlsdGluL2NoZWNrb3V0LmM6MTQwNAorIzogYnVpbHRpbi9jaGVja291dC5jOjE0MDkgYnVpbHRpbi9jaGVja291dC5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIiclcycgbm9uIHB1w7IgZXNzZXJlIHVzYXRvIGNvbiAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQxMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCB0YWtlIDxzdGFydC1wb2ludD4iCittc2dzdHIgIiclcycgbm9uIGFjY2V0dGEgbCdhcmdvbWVudG8gPHB1bnRvIGRpIHBhcnRlbnphPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0ICclcyciCittc2dzdHIgIkltcG9zc2liaWxlIGNhbWJpYXJlIGJyYW5jaCBwZXIgcGFzc2FyZSBhICclcycgY2hlIG5vbiDDqCB1biBjb21taXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDI2Cittc2dpZCAibWlzc2luZyBicmFuY2ggb3IgY29tbWl0IGFyZ3VtZW50IgorbXNnc3RyICJhcmdvbWVudG8gYnJhbmNoIG8gY29tbWl0IG1hbmNhbnRlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ2OCBidWlsdGluL2Nsb25lLmM6OTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzo3MgorIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzUgYnVpbHRpbi9mZXRjaC5jOjE2NyBidWlsdGluL21lcmdlLmM6Mjg2CisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNyBidWlsdGluL3B1bGwuYzoxMTggYnVpbHRpbi9wdXNoLmM6NTYzCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NAorbXNnaWQgImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiZm9yemEgbCdpbmRpY2F6aW9uZSBkJ2F2YW56YW1lbnRvIGRlbGwnb3BlcmF6aW9uZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjkKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiZXNlZ3VpIHVuIG1lcmdlIGEgdHJlIHZpZSBjb24gaWwgbnVvdm8gYnJhbmNoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ3MCBidWlsdGluL2xvZy5jOjE2OTAgcGFyc2Utb3B0aW9ucy5oOjMyMgorbXNnaWQgInN0eWxlIgorbXNnc3RyICJzdGlsZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NzEKK21zZ2lkICJjb25mbGljdCBzdHlsZSAobWVyZ2Ugb3IgZGlmZjMpIgorbXNnc3RyICJzdGlsZSBjb25mbGl0dGkgKG1lcmdlIG8gZGlmZjMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MyBidWlsdGluL3dvcmt0cmVlLmM6NDk2Cittc2dpZCAiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICJzY29sbGVnYSBsJ0hFQUQgYWwgY29tbWl0IHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4NAorbXNnaWQgInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICJpbXBvc3RhIGxlIGluZm9ybWF6aW9uaSBzdWxsJ3Vwc3RyZWFtIHBlciBpbCBudW92byBicmFuY2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg2Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgImVzZWd1aSBmb3J6YXRhbWVudGUgaWwgY2hlY2tvdXQgKHNjYXJ0YSBsZSBtb2RpZmljaGUgbG9jYWxpKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODgKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICJudW92byBicmFuY2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg4Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICJudW92byBicmFuY2ggc2VuemEgZ2VuaXRvcmUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDkwIGJ1aWx0aW4vbWVyZ2UuYzoyODkKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgImFnZ2lvcm5hIGkgZmlsZSBpZ25vcmF0aSAoaW1wb3N0YXppb25lIHByZWRlZmluaXRhKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0OTMKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgIiIKKyJub24gY29udHJvbGxhcmUgc2UgdW4gYWx0cm8gYWxiZXJvIGRpIGxhdm9ybyBjb250aWVuZSBpbCByaWZlcmltZW50byAiCisic3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTA2Cittc2dpZCAiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICIiCisiZXNlZ3VpIGlsIGNoZWNrb3V0IGRlbGxhIG5vc3RyYSB2ZXJzaW9uZSBwZXIgaSBmaWxlIG5vbiBzb3R0b3Bvc3RpIGEgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTA5Cittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgIiIKKyJlc2VndWkgaWwgY2hlY2tvdXQgZGVsbGEgbG9ybyB2ZXJzaW9uZSBwZXIgaSBmaWxlIG5vbiBzb3R0b3Bvc3RpIGEgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTEzCittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICJub24gbGltaXRhcmUgZ2xpIHNwZWNpZmljYXRvcmkgcGVyY29yc28gc29sbyBhbGxlIHZvY2kgc3BhcnNlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU2NQorbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAibGUgb3B6aW9uaSAtYiwgLUIgZSAtLW9ycGhhbiBzb25vIG11dHVhbWVudGUgZXNjbHVzaXZlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU2OAorbXNnaWQgIi1wIGFuZCAtLW92ZXJsYXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAibGUgb3B6aW9uaSAtcCBlIC0tb3ZlcmxheSBzb25vIG11dHVhbG1lbnRlIGVzY2x1c2l2ZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2MDUKK21zZ2lkICItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIi0tdHJhY2sgcmljaGllZGUgaWwgbm9tZSBkaSB1biBicmFuY2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjEwCittc2dpZCAibWlzc2luZyBicmFuY2ggbmFtZTsgdHJ5IC1iIgorbXNnc3RyICJub21lIGRlbCBicmFuY2ggbWFuY2FudGU7IHByb3ZhIGNvbiAtYiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJXMiCittc2dzdHIgImltcG9zc2liaWxlIHJpc29sdmVyZSAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NTgKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAic3BlY2lmaWNhdG9yZSBwZXJjb3JzbyBub24gdmFsaWRvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY2NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIGNvbW1pdCBhbmQgYSBicmFuY2ggJyVzJyBjYW5ub3QgYmUgY3JlYXRlZCBmcm9tIGl0IgorbXNnc3RyICIiCisiJyVzJyBub24gw6ggdW4gY29tbWl0IGUgbm9uIHNpIHB1w7IgY3JlYXJlIHVuIGJyYW5jaCAnJXMnIGNoZSBwYXJ0YSBkYSBlc3NvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY2OQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGRvZXMgbm90IHRha2UgYSBwYXRoIGFyZ3VtZW50ICclcyciCittc2dzdHIgImdpdCBjaGVja291dDogLS1kZXRhY2ggbm9uIGFjY2V0dGEgdW4gcGVyY29yc28gJyVzJyBjb21lIGFyZ29tZW50byIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NzgKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWRldGFjaCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgbm9uIMOoIGNvbXBhdGliaWxlIGNvbiAtLWRldGFjaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2ODEgYnVpbHRpbi9yZXNldC5jOjMyNCBidWlsdGluL3N0YXNoLmM6MTUwNgorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIG5vbiDDqCBjb21wYXRpYmlsZSBjb24gLS1wYXRjaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2OTIKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBlIC0tbWVyZ2Ugc29ubyBpbmNvbXBhdGliaWxpIHF1YW5kb1xuIgorInNpIGVzZWd1ZSBpbCBjaGVja291dCBkZWxsJ2luZGljZS4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjk3Cittc2dpZCAieW91IG11c3Qgc3BlY2lmeSBwYXRoKHMpIHRvIHJlc3RvcmUiCittc2dzdHIgImRldmkgc3BlY2lmaWNhcmUgaWwgcGVyY29yc28vaSBwZXJjb3JzaSBkYSByaXByaXN0aW5hcmUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI1IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3NiBidWlsdGluL2Nsb25lLmM6MTIxIGJ1aWx0aW4vcmVtb3RlLmM6MTcwCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MiBidWlsdGluL3dvcmt0cmVlLmM6NDkyIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTQKK21zZ2lkICJicmFuY2giCittc2dzdHIgImJyYW5jaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjQKK21zZ2lkICJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAiY3JlYSB1biBudW92byBicmFuY2ggZWQgZXNlZ3VpbmUgaWwgY2hlY2tvdXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI2Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAiY3JlYS9yZWltcG9zdGEgdW4gYnJhbmNoIGVkIGVzZWd1aW5lIGlsIGNoZWNrb3V0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyNworbXNnaWQgImNyZWF0ZSByZWZsb2cgZm9yIG5ldyBicmFuY2giCittc2dzdHIgImNyZWEgaWwgcmVnaXN0cm8gZGVpIHJpZmVyaW1lbnRpIHBlciBpbCBudW92byBicmFuY2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI5Cittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPicgKGRlZmF1bHQpIgorbXNnc3RyICJwcmV2ZWRpICdnaXQgY2hlY2tvdXQgPGJyYW5jaCBpbmVzaXN0ZW50ZT4nIChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTczMAorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUgKGRlZmF1bHQpIgorbXNnc3RyICJ1c2EgbW9kYWxpdMOgIG92ZXJsYXkgKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc1Cittc2dpZCAiY3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoIgorbXNnc3RyICJjcmVhIHVuIG51b3ZvIGJyYW5jaCBlIHBhc3NhIGEgcXVlc3QndWx0aW1vIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3NworbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgc3dpdGNoIHRvIGEgYnJhbmNoIgorbXNnc3RyICJjcmVhL3JlaW1wb3N0YSB1biBicmFuY2ggZSBwYXNzYSBhIHF1ZXN0J3VsdGltbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzkKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBzd2l0Y2ggPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgInByZXZlZGkgJ2dpdCBzd2l0Y2ggPGJyYW5jaCBpbmVzaXN0ZW50ZT4nIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc4MQorbXNnaWQgInRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAic2NhcnRhIGxlIG1vZGlmaWNoZSBsb2NhbGkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODEzCittc2dpZCAid2hpY2ggdHJlZS1pc2ggdG8gY2hlY2tvdXQgZnJvbSIKK21zZ3N0ciAiYWxiZXJvIGRhIGN1aSBlc2VndWlyZSBpbCBjaGVja291dCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTUKK21zZ2lkICJyZXN0b3JlIHRoZSBpbmRleCIKK21zZ3N0ciAicmlwcmlzdGluYSBsJ2luZGljZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTcKK21zZ2lkICJyZXN0b3JlIHRoZSB3b3JraW5nIHRyZWUgKGRlZmF1bHQpIgorbXNnc3RyICJyaXByaXN0aW5hIGwnYWxiZXJvIGRpIGxhdm9ybyAoaW1wb3N0YXppb25lIHByZWRlZmluaXRhKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTkKK21zZ2lkICJpZ25vcmUgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiaWdub3JhIHZvY2kgbm9uIHNvdHRvcG9zdGUgYSBtZXJnZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MjAKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIgorbXNnc3RyICJ1c2EgbW9kYWxpdMOgIG92ZXJsYXkiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOAorbXNnaWQgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dICIKKyI8cGVyY29yc2k+Li4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiRWxpbWluYXppb25lIGRpICVzIGluIGNvcnNvXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMworIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiRWxpbWluZXJlaSAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJTYWx0byBpbCByZXBvc2l0b3J5ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBza2lwIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAiU2FsdGVyZWkgaWwgcmVwb3NpdG9yeSAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZWxpbWluYXppb25lIGRpICVzIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsc3RhdCAlc1xuIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBsJ2xzdGF0IGRpICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZ1xuIgorbXNnc3RyICIiCisiR3VpZGEgYWwgcHJvbXB0OlxuIgorIjEgICAgICAgICAgLSBzZWxlemlvbmEgdW4gZWxlbWVudG8gbnVtZXJhdG9cbiIKKyJwaXBwbyAgICAgIC0gc2VsZXppb25hIHVuIGVsZW1lbnRvIGJhc2FuZG90aSBzdSB1biBwcmVmaXNzbyB1bml2b2NvXG4iCisiICAgICAgICAgICAtICh2dW90bykgbm9uIHNlbGV6aW9uYXJlIG5pZW50ZVxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZ1xuIgorbXNnc3RyICIiCisiR3VpZGEgYWwgcHJvbXB0OlxuIgorIjEgICAgICAgICAgLSBzZWxlemlvbmEgdW4gc2luZ29sbyBlbGVtZW50b1xuIgorIjMtNSAgICAgICAgLSBzZWxlemlvbmEgdW4gaW50ZXJ2YWxsbyBkaSBlbGVtZW50aVxuIgorIjItMyw2LTkgICAgLSBzZWxlemlvbmEgaW50ZXJ2YWxsaSBtdWx0aXBsaVxuIgorInBpcHBvICAgICAgLSBzZWxlemlvbmEgdW4gZWxlbWVudG8gYmFzYW5kb3RpIHN1IHVuIHByZWZpc3NvIHVuaXZvY29cbiIKKyItLi4uICAgICAgIC0gZGVzZWxlemlvbmEgZWxlbWVudGkgc3BlY2lmaWNpXG4iCisiKiAgICAgICAgICAtIHNlbGV6aW9uYSB0dXR0aSBnbGkgZWxlbWVudGlcbiIKKyIgICAgICAgICAgIC0gKHZ1b3RvKSB0ZXJtaW5hIGlsIHByb2Nlc3NvIGRpIHNlbGV6aW9uZVxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTIxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTcwCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU3NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/XG4iCittc2dzdHIgIkVoICglcyk/XG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIgorbXNnc3RyICJJbW1ldHRpIGkgcGF0dGVybiBkYSBpZ25vcmFyZT4+ICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBDYW5ub3QgZmluZCBpdGVtcyBtYXRjaGVkIGJ5OiAlcyIKK21zZ3N0ciAiQVRURU5aSU9ORTogSW1wb3NzaWJpbGUgdHJvdmFyZSBlbGVtZW50aSBjb3JyaXNwb25kZW50aSBhICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzIxCittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAiU2VsZXppb25hIGdsaSBlbGVtZW50aSBkYSBlbGltaW5hcmUiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiRWxpbWluYXJlICVzIFt5L05dPyAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3OTUKK21zZ2lkICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKK21zZ3N0ciAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBpbml6aWEgbGEgcHVsaXppYVxuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBlc2NsdWRpIGRlZ2xpIGVsZW1lbnRpIGRhbGwnZWxpbWluYXppb25lXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIHNlbGV6aW9uYSBnbGkgZWxlbWVudGkgZGEgZWxpbWluYXJlIHNwZWNpZmljYW5kb2xpXG4iCisiICAgICAgICAgICAgICAgICAgICAgIGNvbiBkZWkgbnVtZXJpXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZlcm1hIG9nbmkgZWxpbWluYXppb25lIChjb21lIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gdGVybWluYSBsYSBwdWxpemlhXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHZpc3VhbGl6emEgcXVlc3RhIHNjaGVybWF0YVxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBndWlkYSBhbCBwcm9tcHQgZGkgc2VsZXppb25lIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODMxCittc2dpZCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbToiCittc2dpZF9wbHVyYWwgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW1zOiIKK21zZ3N0clswXSAiRWxpbWluZXJlaSBpbCBzZWd1ZW50ZSBlbGVtZW50bzoiCittc2dzdHJbMV0gIkVsaW1pbmVyZWkgaSBzZWd1ZW50aSBlbGVtZW50aToiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDcKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAiTm9uIGNpIHNvbm8gcGnDuSBmaWxlIGRhIHJpcHVsaXJlLCBlc2NvLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwOQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICJub24gc3RhbXBhcmUgaSBub21pIGRlaSBmaWxlIGVsaW1pbmF0aSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMQorbXNnaWQgImZvcmNlIgorbXNnc3RyICJmb3J6YSBsJ29wZXJhemlvbmUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTIKK21zZ2lkICJpbnRlcmFjdGl2ZSBjbGVhbmluZyIKK21zZ3N0ciAicHVsaXppYSBpbnRlcmF0dGl2YSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAicmltdW92aSBpbnRlcmUgZGlyZWN0b3J5IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjIgYnVpbHRpbi9kZXNjcmliZS5jOjU2NAorIzogYnVpbHRpbi9ncmVwLmM6ODg5IGJ1aWx0aW4vbG9nLmM6MTc3IGJ1aWx0aW4vbG9nLmM6MTc5CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjYgYnVpbHRpbi9uYW1lLXJldi5jOjUyOAorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgInBhdHRlcm4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTYKK21zZ2lkICJhZGQgPHBhdHRlcm4+IHRvIGlnbm9yZSBydWxlcyIKK21zZ3N0ciAiYWdnaXVuZ2kgPHBhdHRlcm4+IGFsbGUgcmVnb2xlIHVzYXRlIHBlciBpZ25vcmFyZSBpIGZpbGUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTcKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICJlbGltaW5hIGFuY2hlIGkgZmlsZSBpZ25vcmF0aSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxOQorbXNnaWQgInJlbW92ZSBvbmx5IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgImVsaW1pbmEgc29sbyBpIGZpbGUgaWdub3JhdGkiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzcKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IGUgLVggbm9uIHBvc3Nvbm8gZXNzZXJlIHVzYXRpIGluc2llbWUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDEKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugw6ggaW1wb3N0YXRvIGEgdHJ1ZSBlIG7DqSAtaSwgbsOpIC1uLCBuw6kgLWYgc29ubyBzdGF0aSAiCisic3BlY2lmaWNhdGk7IG1pIHJpZml1dG8gZGkgZXNlZ3VpcmUgbGEgcHVsaXppYSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0NAorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIMOoIHRydWUgcGVyIGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSBlIG7DqSAtaSwgbsOpIC1uLCBuw6kgLWYgIgorInNvbm8gc3RhdGkgc3BlY2lmaWNhdGk7IG1pIHJpZml1dG8gZGkgZXNlZ3VpcmUgbGEgcHVsaXppYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ1Cittc2dpZCAiZ2l0IGNsb25lIFs8b3B0aW9ucz5dIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgImdpdCBjbG9uZSBbPG9wemlvbmk+XSBbLS1dIDxyZXBvc2l0b3J5PiBbPGRpcmVjdG9yeT5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAibm9uIGNyZWFyZSB1biBjaGVja291dCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk0IGJ1aWx0aW4vY2xvbmUuYzo5NiBidWlsdGluL2luaXQtZGIuYzo0ODkKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgImNyZWEgdW4gcmVwb3NpdG9yeSBzcG9nbGlvIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgKK21zZ2lkICJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIKK21zZ3N0ciAiY3JlYSB1biByZXBvc2l0b3J5IG1pcnJvciAoaW1wbGljYSBjaGUgc2lhIHNwb2dsaW8pIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwCittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgInBlciBjbG9uYXJlIGRhIHVuIHJlcG9zaXRvcnkgbG9jYWxlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyCittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgIm5vbiB1c2FyZSBpIGNvbGxlZ2FtZW50aSByZWFsaSBsb2NhbGksIGNvcGlhIHNlbXByZSBpIGZpbGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiaW1wb3N0YSBpbCByZXBvc2l0b3J5IGNvbWUgY29uZGl2aXNvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAicGF0aHNwZWMiCittc2dzdHIgInNwZWNpZmljYXRvcmUgcGVyY29yc28iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICJpbml6aWFsaXp6YSBzb3R0b21vZHVsaSBkdXJhbnRlIGxhIGNsb25hemlvbmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIm51bWVybyBkaSBzb3R0b21vZHVsaSBjbG9uYXRpIGluIHBhcmFsbGVsbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMSBidWlsdGluL2luaXQtZGIuYzo0ODYKK21zZ2lkICJ0ZW1wbGF0ZS1kaXJlY3RvcnkiCittc2dzdHIgImRpcmVjdG9yeSBtb2RlbGxpIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEyIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NworbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgImRpcmVjdG9yeSBkYSBjdWkgc2FyYW5ubyByZWN1cGVyYXRpIGkgbW9kZWxsaSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNCBidWlsdGluL2Nsb25lLmM6MTE2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA3CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMgorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICJyZXBvc2l0b3J5IGRpIHJpZmVyaW1lbnRvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxNAorbXNnaWQgInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciCittc2dzdHIgInVzYSAtLXJlZmVyZW5jZSBzb2xvIGR1cmFudGUgbGEgY2xvbmF6aW9uZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOSBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ2CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDEgYnVpbHRpbi9yZXBhY2suYzozMjcKK21zZ2lkICJuYW1lIgorbXNnc3RyICJub21lIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIwCittc2dpZCAidXNlIDxuYW1lPiBpbnN0ZWFkIG9mICdvcmlnaW4nIHRvIHRyYWNrIHVwc3RyZWFtIgorbXNnc3RyICJ1c2EgPG5vbWU+IGFuemljaMOpICdvcmlnaW4nIHBlciB0cmFjY2lhcmUgbCd1cHN0cmVhbSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMgorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgImVzZWd1aSBpbCBjaGVja291dCBkaSA8YnJhbmNoPiBhbnppY2jDqSBkZWxsJ0hFQUQgZGVsIHJlbW90byIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNAorbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgInBlcmNvcnNvIGFsIGNvbWFuZG8gcmVtb3RvIGdpdC11cGxvYWQtcGFjayIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNSBidWlsdGluL2ZldGNoLmM6MTY4IGJ1aWx0aW4vZ3JlcC5jOjgyOAorIzogYnVpbHRpbi9wdWxsLmM6MjA3Cittc2dpZCAiZGVwdGgiCittc2dzdHIgInByb2ZvbmRpdMOgIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI2Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICJjcmVhIHVuIGNsb25lIHNoYWxsb3cgY29uIHF1ZXN0YSBwcm9mb25kaXTDoCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNyBidWlsdGluL2ZldGNoLmM6MTcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzMAorbXNnaWQgInRpbWUiCittc2dzdHIgInRlbXBvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgImNyZWEgdW4gY2xvbmUgc2hhbGxvdyBhIHBhcnRpcmUgZGFsbCdpc3RhbnRlIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI5IGJ1aWx0aW4vZmV0Y2guYzoxNzIgYnVpbHRpbi9mZXRjaC5jOjE5NQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNDgwCittc2dpZCAicmV2aXNpb24iCittc2dzdHIgInJldmlzaW9uZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMCBidWlsdGluL2ZldGNoLmM6MTczCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSwgZXhjbHVkaW5nIHJldiIKK21zZ3N0ciAiIgorImF1bWVudGEgbGEgcHJvZm9uZGl0w6AgZGVsbGEgY3Jvbm9sb2dpYSBkZWwgY2xvbmUgc2hhbGxvdyBmaW5vIGFsbGEgcmV2aXNpb25lICIKKyJzcGVjaWZpY2F0YSBlc2NsdXNhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDE5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyOAorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAiY2xvbmEgc29sbyB1biBicmFuY2gsIEhFQUQgbyBxdWVsbG8gc3BlY2lmaWNhdG8gY29uIC0tYnJhbmNoIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM0Cittc2dpZCAiZG9uJ3QgY2xvbmUgYW55IHRhZ3MsIGFuZCBtYWtlIGxhdGVyIGZldGNoZXMgbm90IHRvIGZvbGxvdyB0aGVtIgorbXNnc3RyICJub24gY2xvbmFyZSBhbGN1biB0YWcgZSBmYWkgc8OsIGNoZSBpIGZldGNoIHN1Y2Nlc3Npdmkgbm9uIGxpIHNlZ3Vhbm8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzYKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCBiZSBzaGFsbG93IgorbXNnc3RyICJ0dXR0aSBpIHNvdHRvbW9kdWxpIGNsb25hdGkgc2FyYW5ubyBzaGFsbG93IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiZGlyZWN0b3J5IEdpdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOCBidWlsdGluL2luaXQtZGIuYzo0OTYKK21zZ2lkICJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIgorbXNnc3RyICJzZXBhcmEgbGEgZGlyZWN0b3J5IEdpdCBkYWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzkKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgImNoaWF2ZT12YWxvcmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDAKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgImltcG9zdGEgbGEgY29uZmlndXJhemlvbmUgbmVsIG51b3ZvIHJlcG9zaXRvcnkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJzZXJ2ZXItc3BlY2lmaWMiCittc2dzdHIgInNwZWNpZmljYSBkZWwgc2VydmVyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQyIGJ1aWx0aW4vZmV0Y2guYzoxOTAgYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorIzogYnVpbHRpbi9wdXNoLmM6NTczIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTczCittc2dpZCAib3B0aW9uIHRvIHRyYW5zbWl0IgorbXNnc3RyICJvcHppb25lIGRhIHRyYXNtZXR0ZXJlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQzIGJ1aWx0aW4vZmV0Y2guYzoxOTEgYnVpbHRpbi9wdWxsLmM6MjIwCisjOiBidWlsdGluL3B1c2guYzo1NzQKK21zZ2lkICJ1c2UgSVB2NCBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAidXNhIHNvbG8gaW5kaXJpenppIElQdjQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDUgYnVpbHRpbi9mZXRjaC5jOjE5MyBidWlsdGluL3B1bGwuYzoyMjMKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3NgorbXNnaWQgInVzZSBJUHY2IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICJ1c2Egc29sbyBpbmRpcml6emkgSVB2NiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0OQorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIHVzZSB0aGVpciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisidHV0dGkgaSBzb3R0b21vZHVsaSBjbG9uYXRpIHVzZXJhbm5vIGlsIGxvcm8gcmlzcGV0dGl2byBicmFuY2ggcmVtb3RvICIKKyJ0cmFjY2lhdG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNTEKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCBmaWxlIHRvIGluY2x1ZGUgb25seSBmaWxlcyBhdCByb290IgorbXNnc3RyICIiCisiaW5pemlhbGl6emEgaWwgZmlsZSBzcGFyc2UtY2hlY2tvdXQgcGVyIGluY2x1ZGVyZSBzb2xvIGkgZmlsZSBuZWwgcGVyY29yc28gIgorInJhZGljZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI4NworbXNnaWQgIiIKKyJObyBkaXJlY3RvcnkgbmFtZSBjb3VsZCBiZSBndWVzc2VkLlxuIgorIlBsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKyJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGluZG92aW5hcmUgYWxjdW4gbm9tZSBkaXJlY3RvcnkuXG4iCisiU3BlY2lmaWNhIHVuYSBkaXJlY3RvcnkgdHJhbWl0ZSBsYSByaWdhIGRpIGNvbWFuZG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbzogQ291bGQgbm90IGFkZCBhbHRlcm5hdGUgZm9yICclcyc6ICVzXG4iCittc2dzdHIgImluZm9ybWF6aW9uZTogSW1wb3NzaWJpbGUgYWdnaXVuZ2VyZSB1biBhbHRlcm5hdG8gYSAnJXMnOiAlc1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIlcyBlc2lzdGUgZSBub24gw6ggdW5hIGRpcmVjdG9yeSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhcnQgaXRlcmF0b3Igb3ZlciAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhdnZpYXJlIGwnaXRlcmF0b3JlIHN1ICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgImNyZWF6aW9uZSBkZWwgY29sbGVnYW1lbnRvICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAiY29waWEgZGVsIGZpbGUgaW4gJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGl0ZXJhdGUgb3ZlciAnJXMnIgorbXNnc3RyICJpdGVyYXppb25lIHN1ICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgImZhdHRvLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTA4Cittc2dpZCAiIgorIkNsb25lIHN1Y2NlZWRlZCwgYnV0IGNoZWNrb3V0IGZhaWxlZC5cbiIKKyJZb3UgY2FuIGluc3BlY3Qgd2hhdCB3YXMgY2hlY2tlZCBvdXQgd2l0aCAnZ2l0IHN0YXR1cydcbiIKKyJhbmQgcmV0cnkgd2l0aCAnZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LydcbiIKK21zZ3N0ciAiIgorIkNsb25lIGNvbXBsZXRhdG8gY29uIHN1Y2Nlc3NvLCBtYSBpbCBjaGVja291dCBub24gw6ggcml1c2NpdG8uXG4iCisiUHVvaSBlc2FtaW5hcmUgZ2xpIGVsZW1lbnRpIGRpIGN1aSDDqCBzdGF0byBlc2VndWl0byBpbCBjaGVja291dFxuIgorImNvbiAnZ2l0IHN0YXR1cycgZSByaXByb3ZhcmUgYWQgZXNlZ3VpcmUgaWwgY2hlY2tvdXQgY29uXG4iCisiJ2dpdCByZXN0b3JlIC0tc291cmNlPUhFQUQgOi8nXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgaWwgYnJhbmNoIHJlbW90byAlcyBkYSBjbG9uYXJlLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhZ2dpb3JuYXJlICVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzUzCittc2dpZCAiZmFpbGVkIHRvIGluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJpbml6aWFsaXp6YXppb25lIGRlbCBmaWxlIHNwYXJzZS1jaGVja291dCBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NzYKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgIiIKKyJsJ0hFQUQgcmVtb3RvIGZhIHJpZmVyaW1lbnRvIGEgdW4gcmlmZXJpbWVudG8gaW5lc2lzdGVudGUsIGltcG9zc2liaWxlICIKKyJlc2VndWlyZSBpbCBjaGVja291dC5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwNworbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGNoZWNrb3V0IGRlbGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBpIHBhcmFtZXRyaSBuZWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGlsIHJlcGFjayBwZXIgcHVsaXJlIGwnYXJlYSBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjcKK21zZ2lkICJjYW5ub3QgdW5saW5rIHRlbXBvcmFyeSBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGwndW5saW5rIGRlbCBmaWxlIGFsdGVybmF0ZXMgdGVtcG9yYW5lbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2NSBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NTAKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICJUcm9wcGkgYXJnb21lbnRpLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2OQorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAiRGV2aSBzcGVjaWZpY2FyZSB1biByZXBvc2l0b3J5IGRhIGNsb25hcmUuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAibGUgb3B6aW9uaSAtLWJhcmUgZSAtLW9yaWdpbiAlcyBub24gc29ubyBjb21wYXRpYmlsaS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5ODUKK21zZ2lkICItLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpciBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAibGUgb3B6aW9uaSAtLWJhcmUgZSAtLXNlcGFyYXRlLWdpdC1kaXIgbm9uIHNvbm8gY29tcGF0aWJpbGkuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiaWwgcmVwb3NpdG9yeSAnJXMnIG5vbiBlc2lzdGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDA0IGJ1aWx0aW4vZmV0Y2guYzoxNzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAibGEgcHJvZm9uZGl0w6AgJXMgbm9uIMOoIHVuIG51bWVybyBwb3NpdGl2byIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorImlsIHBlcmNvcnNvIGRpIGRlc3RpbmF6aW9uZSAnJXMnIGVzaXN0ZSBnacOgIGUgbm9uIMOoIHVuYSBkaXJlY3RvcnkgdnVvdGEuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3b3JraW5nIHRyZWUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgImwnYWxiZXJvIGRpIGxhdm9ybyAnJXMnIGVzaXN0ZSBnacOgLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMzkgYnVpbHRpbi9jbG9uZS5jOjEwNjAgYnVpbHRpbi9kaWZmdG9vbC5jOjI3MQorIzogYnVpbHRpbi9sb2cuYzoxODY2IGJ1aWx0aW4vd29ya3RyZWUuYzoyOTUgYnVpbHRpbi93b3JrdHJlZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlIGxlIHByaW1lIGRpcmVjdG9yeSBkaSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlIGxhIGRpcmVjdG9yeSBkZWxsJ2FsYmVybyBkaSBsYXZvcm8gJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnJXMnLi4uXG4iCittc2dzdHIgIkNsb25lIG5lbCByZXBvc2l0b3J5IHNwb2dsaW8gJyVzJyBpbiBjb3Jzby4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICJDbG9uZSBpbiAnJXMnIGluIGNvcnNvLi4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDkwCittc2dpZCAiIgorImNsb25lIC0tcmVjdXJzaXZlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggYm90aCAtLXJlZmVyZW5jZSBhbmQgLS1yZWZlcmVuY2UtaWYtIgorImFibGUiCittc2dzdHIgIiIKKyJpbCBjbG9uZSAtLXJlY3Vyc2l2ZSBub24gw6ggY29tcGF0aWJpbGUgbsOpIGNvbiAtLXJlZmVyZW5jZSBuw6kgY29uIC0tcmVmZXJlbmNlLSIKKyJpZi1hYmxlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1NAorbXNnaWQgIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICJMJ29wemlvbmUgLS1kZXB0aCDDqCBpZ25vcmF0YSBuZWkgY2xvbmkgbG9jYWxpOyB1c2EgZmlsZTovLy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU2Cittc2dpZCAiLS1zaGFsbG93LXNpbmNlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiTCdvcHppb25lIC0tc2hhbGxvdy1zaW5jZSDDqCBpZ25vcmF0YSBuZWkgY2xvbmkgbG9jYWxpOyB1c2EgZmlsZTovLy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU4Cittc2dpZCAiLS1zaGFsbG93LWV4Y2x1ZGUgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICJMJ29wemlvbmUgLS1zaGFsbG93LWV4Y2x1ZGUgw6ggaWdub3JhdGEgbmVpIGNsb25pIGxvY2FsaTsgdXNhIGZpbGU6Ly8uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2MAorbXNnaWQgIi0tZmlsdGVyIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiTCdvcHppb25lIC0tZmlsdGVyIMOoIGlnbm9yYXRhIG5laSBjbG9uaSBsb2NhbGk7IHVzYSBmaWxlOi8vLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjMKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICJpbCByZXBvc2l0b3J5IHNvcmdlbnRlIMOoIHNoYWxsb3csIGlnbm9ybyBsJ29wemlvbmUgLS1sb2NhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjgKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgImwnb3B6aW9uZSAtLWxvY2FsIMOoIGlnbm9yYXRhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0MyBidWlsdGluL2Nsb25lLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAiSWwgYnJhbmNoIHJlbW90byAlcyBub24gw6ggc3RhdG8gdHJvdmF0byBuZWxsJ3Vwc3RyZWFtICVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI1NAorbXNnaWQgIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iCittc2dzdHIgIlNlbWJyYSBjaGUgdHUgYWJiaWEgY2xvbmF0byB1biByZXBvc2l0b3J5IHZ1b3RvLiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoxMAorbXNnaWQgImdpdCBjb2x1bW4gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb2x1bW4gWzxvcHppb25pPl0iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjcKK21zZ2lkICJsb29rdXAgY29uZmlnIHZhcnMiCittc2dzdHIgInJlY3VwZXJhIGxlIHZhcmlhYmlsaSBkaSBjb25maWd1cmF6aW9uZSBkYSBxdWkiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgImxheW91dCBkYSB1c2FyZSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIkxhcmdoZXp6YSBtYXNzaW1hIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMxCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIKK21zZ3N0ciAiU3BhemkgdnVvdGkgcGVyIGlsIG1hcmdpbmUgc2luaXN0cm8iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIHJpZ2h0IGJvcmRlciIKK21zZ3N0ciAiU3BhemkgdnVvdGkgcGVyIGlsIG1hcmdpbmUgZGVzdHJvIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMzCittc2dpZCAiUGFkZGluZyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMiCittc2dzdHIgIlNwYXppIHZ1b3RpIGZyYSBsZSBjb2xvbm5lIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICItLWNvbW1hbmQgZGV2ZSBlc3NlcmUgaWwgcHJpbW8gYXJnb21lbnRvIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTgKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPHBhcmVudD4pLi4uXSBbLVNbPGtleWlkPl1dIFsoLW0gPG1lc3NhZ2U+KS4uLl0gWygtRiAiCisiPGZpbGU+KS4uLl0gPHRyZWU+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPGdlbml0b3JlPikuLi5dIFstU1s8SUQgY2hpYXZlPl1dIFsoLW0gPG1lc3NhZ2dpbz4pLi4uXSAiCisiWygtRiA8ZmlsZT4pLi4uXSA8YWxiZXJvPiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBwYXJlbnQgJXMgaWdub3JlZCIKK21zZ3N0ciAiZ2VuaXRvcmUgZHVwbGljYXRvICVzIGlnbm9yYXRvIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6NTYgYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzNiBidWlsdGluL2xvZy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiJXMgbm9uIMOoIHVuIG5vbWUgb2dnZXR0byB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZTogYXBlcnR1cmEgZGkgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZTogbGV0dHVyYSBkaSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIGNsb3NlICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZTogY2hpdXN1cmEgZGkgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTEKK21zZ2lkICJwYXJlbnQiCittc2dzdHIgImdlbml0b3JlIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTEyCittc2dpZCAiaWQgb2YgYSBwYXJlbnQgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiSUQgZGkgdW4gb2dnZXR0byBjb21taXQgZ2VuaXRvcmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTQgYnVpbHRpbi9jb21taXQuYzoxNTAxIGJ1aWx0aW4vbWVyZ2UuYzoyNzEKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDkgYnVpbHRpbi9ub3Rlcy5jOjU3NSBidWlsdGluL3N0YXNoLmM6MTQ3NworIzogYnVpbHRpbi90YWcuYzo0MTIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICJtZXNzYWdnaW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTUgYnVpbHRpbi9jb21taXQuYzoxNTAxCittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIm1lc3NhZ2dpbyBkaSBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTgKK21zZ2lkICJyZWFkIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgImxlZ2dpIGlsIG1lc3NhZ2dpbyBkaSBsb2cgZGVsIGNvbW1pdCBkYSB1biBmaWxlIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIxIGJ1aWx0aW4vY29tbWl0LmM6MTUxMyBidWlsdGluL21lcmdlLmM6Mjg4CisjOiBidWlsdGluL3B1bGwuYzoxNzUgYnVpbHRpbi9yZXZlcnQuYzoxMTgKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgImZpcm1hIGlsIGNvbW1pdCBjb24gR1BHIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTMzCittc2dpZCAibXVzdCBnaXZlIGV4YWN0bHkgb25lIHRyZWUiCittc2dzdHIgIsOoIG5lY2Vzc2FyaW8gZm9ybmlyZSBlc2F0dGFtZW50ZSB1biBhbGJlcm8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxNDAKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IGxldHR1cmEgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQxCittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzxvcHppb25pPl0gWy0tXSA8c3BlY2lmaWNhdG9yZSBwZXJjb3Jzbz4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDYKK21zZ2lkICJnaXQgc3RhdHVzIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHN0YXR1cyBbPG9wemlvbmk+XSBbLS1dIDxzcGVjaWZpY2F0b3JlIHBlcmNvcnNvPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MQorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gYW1lbmQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2VcbiIKKyJpdCBlbXB0eS4gWW91IGNhbiByZXBlYXQgeW91ciBjb21tYW5kIHdpdGggLS1hbGxvdy1lbXB0eSwgb3IgeW91IGNhblxuIgorInJlbW92ZSB0aGUgY29tbWl0IGVudGlyZWx5IHdpdGggXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKK21zZ3N0ciAiIgorIkhhaSByaWNoaWVzdG8gZGkgbW9kaWZpY2FyZSBpbCBjb21taXQgcGnDuSByZWNlbnRlLCBtYSBlc2VndWlyZSB0YWxlXG4iCisib3BlcmF6aW9uZSBsbyByZW5kZXJlYmJlIHZ1b3RvLiBQdW9pIHJpcGV0ZXJlIGwnZXNlY3V6aW9uZSBkZWwgY29tYW5kb1xuIgorImNvbiAtLWFsbG93LWVtcHR5IG8gcHVvaSByaW11b3ZlcmUgY29tcGxldGFtZW50ZSBpbCBjb21taXQgY29uXG4iCisiXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisiSWwgY2hlcnJ5LXBpY2sgcHJlY2VkZW50ZSBvcmEgw6ggdnVvdG8sIHByb2JhYmlsbWVudGUgYSBjYXVzYSBkaSBhbGN1bmlcbiIKKyJjb25mbGl0dGkgcmlzb2x0aS5cbiIKKyJTZSB2dW9pIGNvbXVucXVlIGVzZWd1aXJuZSBpbCBjb21taXQsIHVzYTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjMKK21zZ2lkICJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCBjaGVycnktcGljayAtLXNraXAnXG4iCittc2dzdHIgIkFsdHJpbWVudGksIHVzYSAnZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCdcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NgorbXNnaWQgIiIKKyJhbmQgdGhlbiB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCisiXG4iCisidG8gcmVzdW1lIGNoZXJyeS1waWNraW5nIHRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLXNraXBcbiIKKyJcbiIKK21zZ3N0ciAiIgorImUgcXVpbmRpIHVzYTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcbiIKKyJcbiIKKyJwZXIgcmlwcmVuZGVyZSBsJ2VzZWN1emlvbmUgaWwgY2hlcnJ5LXBpY2sgcGVyIGkgY29tbWl0IHJpbWFuZW50aS5cbiIKKyJTZSB2dW9pIHNhbHRhcmUgcXVlc3RvIGNvbW1pdCwgdXNhOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzE1Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICJkZWNvbXByZXNzaW9uZSBkZWxsJ29nZ2V0dG8gSEVBRCBkZWxsJ2FsYmVybyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzUxCittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJsJ29wemlvbmUgLS1wYXRoc3BlYy1mcm9tLWZpbGUgbm9uIGhhIHNlbnNvIGNvbiAtYSIKKworIzogYnVpbHRpbi9jb21taXQuYzozNjQKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIiIKKyJOb24gc3BlY2lmaWNhcmUgdW4gcGVyY29yc28gY29uIGxlIG9wemlvbmkgLS1pbmNsdWRlLy0tb25seSBub24gaGEgc2Vuc28uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM3NgorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgbCdpbmRpY2UgdGVtcG9yYW5lbyIKKworIzogYnVpbHRpbi9jb21taXQuYzozODUKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICJhZ2dpdW50YSBpbnRlcmF0dGl2YSBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDAwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2lvcm5hcmUgbCdpbmRpY2UgdGVtcG9yYW5lbyIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MDIKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYWdnaW9ybmFyZSBsJ2FsYmVybyBjYWNoZSBwcmluY2lwYWxlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQyNyBidWlsdGluL2NvbW1pdC5jOjQ1MCBidWlsdGluL2NvbW1pdC5jOjQ5NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZSBuZXdfaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc5Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSB1biBjb21taXQgcGFyemlhbGUgZHVyYW50ZSB1biBtZXJnZS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDgxCittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSB1biBjb21taXQgcGFyemlhbGUgZHVyYW50ZSB1biBjaGVycnktcGljay4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDg5Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGwnaW5kaWNlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUwOAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZSBpbmRpY2UgdGVtcG9yYW5lbyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgbGFja3MgYXV0aG9yIGhlYWRlciIKK21zZ3N0ciAiZGFsIGNvbW1pdCAnJXMnIG1hbmNhIGwnaW50ZXN0YXppb25lIGF1dG9yZSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAiaWwgY29tbWl0ICclcycgaGEgdW5hIHJpZ2EgYXV0b3JlIG1hbGZvcm1hdGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjI3Cittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAicGFyYW1ldHJvIC0tYXV0aG9yIG1hbGZvcm1hdG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjgwCittc2dpZCAiIgorInVuYWJsZSB0byBzZWxlY3QgYSBjb21tZW50IGNoYXJhY3RlciB0aGF0IGlzIG5vdCB1c2VkXG4iCisiaW4gdGhlIGN1cnJlbnQgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBzZWxlemlvbmFyZSB1biBjYXJhdHRlcmUgY29tbWVudG8gbm9uIHVzYXRvXG4iCisibmVsIG1lc3NhZ2dpbyBkaSBjb21taXQgY29ycmVudGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzE4IGJ1aWx0aW4vY29tbWl0LmM6NzUxIGJ1aWx0aW4vY29tbWl0LmM6MTA5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdHJvdmFyZSBpbCBjb21taXQgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMwIGJ1aWx0aW4vc2hvcnRsb2cuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIKK21zZ3N0ciAiKGxldHR1cmEgZGVsIG1lc3NhZ2dpbyBkaSBsb2cgZGFsbG8gc3RhbmRhcmQgaW5wdXQpXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMyCittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgbG9nIGRhbGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGlsIGZpbGUgZGkgbG9nICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzY3IGJ1aWx0aW4vY29tbWl0LmM6NzgzCittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc3NAorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBNRVJHRV9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODM0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgbW9kZWxsbyBkaSBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNlbWJyYSBjaGUgdHUgc3RpYSBlc2VndWVuZG8gaWwgY29tbWl0IGRpIHVuIG1lcmdlLlxuIgorIlNlIGNpw7Igbm9uIMOoIGNvcnJldHRvLCBlbGltaW5hIGlsIGZpbGVcbiIKKyJcdCVzXG4iCisiZSByaXByb3ZhLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTZW1icmEgY2hlIHR1IHN0aWEgZXNlZ3VlbmRvIGlsIGNvbW1pdCBkaSB1biBtZXJnZS5cbiIKKyJTZSBjacOyIG5vbiDDqCBjb3JyZXR0bywgZWxpbWluYSBpbCBmaWxlXG4iCisiXHQlc1xuIgorImUgcmlwcm92YS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkltbWV0dGkgaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdCBwZXIgbGUgbW9kaWZpY2hlLiBMZSByaWdoZSBjaGUgaW5pemlhbm9cbiIKKyJjb24gJyVjJyBzYXJhbm5vIGlnbm9yYXRlIGUgdW4gbWVzc2FnZ2lvIHZ1b3RvIGludGVycm9tcGVyw6AgaWwgY29tbWl0LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkltbWV0dGkgaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdCBwZXIgbGUgbW9kaWZpY2hlLiBMZSByaWdoZSBjaGUgaW5pemlhbm9cbiIKKyJjb24gJyVjJyBzYXJhbm5vIG1hbnRlbnV0ZTsgcHVvaSByaW11b3ZlcmxlIGF1dG9ub21hbWVudGUgc2UgbG8gZGVzaWRlcmkuXG4iCisiVW4gbWVzc2FnZ2lvIHZ1b3RvIGludGVycm9tcGVyw6AgaWwgY29tbWl0LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlc0F1dGhvcjogICAgJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzQXV0b3JlOiAgICAgICAgICAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXNEYXRhOiAgICAgICAgICAgICAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc0VzZWN1dG9yZSBjb21taXQ6ICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkyOQorbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICJJbXBvc3NpYmlsZSBsZWdnZXJlIGwnaW5kaWNlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5NworbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBsYSBjb3N0cnV6aW9uZSBkZWdsaSBhbGJlcmkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAxMSBidWlsdGluL3RhZy5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIkZvcm5pc2NpIGlsIG1lc3NhZ2dpbyB1c2FuZG8gbCdvcHppb25lIC1tIG8gLUYuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIiIKKyItLWF1dGhvciAnJXMnIG5vbiDDqCBuZWwgZm9ybWF0byAnTm9tZSA8ZS1tYWlsPicgZSBub24gY29ycmlzcG9uZGUgYWQgYWxjdW4gIgorImF1dG9yZSBlc2lzdGVudGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlnbm9yZWQgbW9kZSAnJXMnIgorbXNnc3RyICJNb2RvIG5vbiB2YWxpZG8gaWdub3JhdG86ICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA4NyBidWlsdGluL2NvbW1pdC5jOjEzMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICJNb2RvIGZpbGUgbm9uIHRyYWNjaWF0aSBub24gdmFsaWRvOiAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMjcKK21zZ2lkICItLWxvbmcgYW5kIC16IGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbG9uZyBlIC16IG5vbiBzb25vIGNvbXBhdGliaWxpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzEKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJMJ3VzbyBkaSBlbnRyYW1iZSBsZSBvcHppb25pIC0tcmVzZXQtYXV0aG9yIGUgLS1hdXRob3Igbm9uIGhhIHNlbnNvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODAKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAiTm9uIGMnw6ggbnVsbGEgZGEgbW9kaWZpY2FyZS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MworbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIlNlaSBuZWwgYmVsIG1lenpvIGRpIHVuIG1lcmdlIC0gaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbCdhbWVuZC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIlNlaSBuZWwgYmVsIG1lenpvIGRpIHVuIGNoZXJyeS1waWNrIC0gaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbCdhbWVuZC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4OAorbXNnaWQgIk9wdGlvbnMgLS1zcXVhc2ggYW5kIC0tZml4dXAgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIkxlIG9wemlvbmkgLS1zcXVhc2ggZSAtLWZpeHVwIG5vbiBwb3Nzb25vIGVzc2VyZSB1c2F0ZSBpbnNpZW1lIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTgKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiU29sbyB1bmEgZGVsbGUgb3B6aW9uaSAtYy8tQy8tRi8tLWZpeHVwIHB1w7IgZXNzZXJlIHVzYXRhLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjAwCittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLiIKK21zZ3N0ciAiTCdvcHppb25lIC1tIG5vbiBwdcOyIGVzc2VyZSBjb21iaW5hdGEgY29uIC1jLy1DLy1GLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjA4Cittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiTCdvcHppb25lIC0tcmVzZXQtYXV0aG9yIHB1w7IgZXNzZXJlIHVzYXRhIHNvbG8gY29uIC1DLCAtYyBvIC0tYW1lbmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjUKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyJQdcOyIGVzc2VyZSB1c2F0YSBzb2xvIHVuYSBkZWxsZSBvcHppb25pIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS0iCisiaW50ZXJhY3RpdmUvLS1wYXRjaC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRocyAnJXMgLi4uJyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgImkgcGVyY29yc2kgJyVzIC4uLicgbm9uIGhhbm5vIHNlbnNvIGNvbiAtYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYyIGJ1aWx0aW4vY29tbWl0LmM6MTUyNAorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAidmlzdWFsaXp6YSBjb25jaXNhbWVudGUgbG8gc3RhdG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NCBidWlsdGluL2NvbW1pdC5jOjE1MjYKK21zZ2lkICJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAidmlzdWFsaXp6YSBsZSBpbmZvcm1hemlvbmkgc3VsIGJyYW5jaCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY2Cittc2dpZCAic2hvdyBzdGFzaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAidmlzdWFsaXp6YSBsZSBpbmZvcm1hemlvbmkgc3VsbG8gc3Rhc2giCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2OCBidWlsdGluL2NvbW1pdC5jOjE1MjgKK21zZ2lkICJjb21wdXRlIGZ1bGwgYWhlYWQvYmVoaW5kIHZhbHVlcyIKK21zZ3N0ciAiY2FsY29sYSB0dXR0aSBpIHZhbG9yaSBkb3BvL3ByaW1hIGRpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzAKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzaW9uZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzcwIGJ1aWx0aW4vY29tbWl0LmM6MTUzMCBidWlsdGluL3B1c2guYzo1NDkKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NDMKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAib3V0cHV0IGxlZ2dpYmlsZSBkYSB1bmEgbWFjY2hpbmEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MyBidWlsdGluL2NvbW1pdC5jOjE1MzIKK21zZ2lkICJzaG93IHN0YXR1cyBpbiBsb25nIGZvcm1hdCAoZGVmYXVsdCkiCittc2dzdHIgInZpc3VhbGl6emEgbG8gc3RhdG8gaW4gZm9ybWEgbHVuZ2EgKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3NiBidWlsdGluL2NvbW1pdC5jOjE1MzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAidGVybWluYSBsZSB2b2NpIGNvbiBOVUwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OCBidWlsdGluL2NvbW1pdC5jOjEzODIgYnVpbHRpbi9jb21taXQuYzoxNTM4CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTkgYnVpbHRpbi9yZWJhc2UuYzoxNTY5IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJtb2RlIgorbXNnc3RyICJtb2RvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzkgYnVpbHRpbi9jb21taXQuYzoxNTM4Cittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisidmlzdWFsaXp6YSBmaWxlIG5vbiB0cmFjY2lhdGksIG1vZGFsaXTDoCBmYWNvbHRhdGl2ZTogYWxsLCBub3JtYWwsIG5vLiAiCisiKEltcG9zdGF6aW9uZSBwcmVkZWZpbml0YTogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgzCittc2dpZCAiIgorInNob3cgaWdub3JlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uIChEZWZhdWx0OiAiCisidHJhZGl0aW9uYWwpIgorbXNnc3RyICIiCisidmlzdWFsaXp6YSBmaWxlIGlnbm9yYXRpLCBtb2RhbGl0w6AgZmFjb2x0YXRpdmU6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uICIKKyIoSW1wb3N0YXppb25lIHByZWRlZmluaXRhOiB0cmFkaXRpb25hbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4NSBwYXJzZS1vcHRpb25zLmg6MTkyCittc2dpZCAid2hlbiIKK21zZ3N0ciAicXVhbmRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODYKK21zZ2lkICIiCisiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcywgb3B0aW9uYWwgd2hlbjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKyJpZ25vcmEgbW9kaWZpY2hlIGFpIHNvdHRvbW9kdWxpLCBvcHppb25lIGZhY29sdGF0aXZhIFwicXVhbmRvXCI6IGFsbCwgZGlydHksICIKKyJ1bnRyYWNrZWQuIChJbXBvc3RhemlvbmUgcHJlZGVmaW5pdGE6IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4OAorbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgImVsZW5jYSBpIGZpbGUgbm9uIHRyYWNjaWF0aSBpbiBjb2xvbm5lIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODkKK21zZ2lkICJkbyBub3QgZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgIm5vbiByaWxldmFyZSBsZSByaWRlbm9taW5hemlvbmkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM5MQorbXNnaWQgImRldGVjdCByZW5hbWVzLCBvcHRpb25hbGx5IHNldCBzaW1pbGFyaXR5IGluZGV4IgorbXNnc3RyICIiCisicmlsZXZhIGxlIHJpZGVub21pbmF6aW9uaSwgaW1wb3N0YSBmYWNvbHRhdGl2YW1lbnRlIGwnaW5kaWNlIGRpIHNpbWlsYXJpdMOgIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MTEKK21zZ2lkICJVbnN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBpZ25vcmVkIGFuZCB1bnRyYWNrZWQtZmlsZXMgYXJndW1lbnRzIgorbXNnc3RyICIiCisiQ29tYmluYXppb25lIGRpIGFyZ29tZW50aSBzdWkgZmlsZSBpZ25vcmF0aSBlIG5vbiB0cmFjY2lhdGkgbm9uIHN1cHBvcnRhdGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NAorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgIiIKKyJvbWV0dGkgZGkgdmlzdWFsaXp6YXJlIGlsIHJpZXBpbG9nbyBkb3BvIHVuIGNvbW1pdCBjb21wbGV0YXRvIGNvbiBzdWNjZXNzbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1Cittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJ2aXN1YWxpenphIGlsIGRpZmYgbmVsIG1vZGVsbG8gZGVsIG1lc3NhZ2dpbyBkaSBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NworbXNnaWQgIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiCittc2dzdHIgIk9wemlvbmkgbWVzc2FnZ2lvIGRpIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk4IGJ1aWx0aW4vbWVyZ2UuYzoyNzUgYnVpbHRpbi90YWcuYzo0MTQKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsZWdnaSBpbCBtZXNzYWdnaW8gZGEgdW4gZmlsZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk5Cittc2dpZCAiYXV0aG9yIgorbXNnc3RyICJhdXRvcmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICJzb3ZyYXNjcml2aSBsJ2F1dG9yZSBwZXIgaWwgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAgYnVpbHRpbi9nYy5jOjUzOAorbXNnaWQgImRhdGUiCittc2dzdHIgImRhdGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMAorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAic292cmFzY3JpdmkgbGEgZGF0YSBwZXIgaWwgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDIgYnVpbHRpbi9jb21taXQuYzoxNTAzIGJ1aWx0aW4vY29tbWl0LmM6MTUwNAorIzogYnVpbHRpbi9jb21taXQuYzoxNTA1IHBhcnNlLW9wdGlvbnMuaDozMjggcmVmLWZpbHRlci5oOjkyCittc2dpZCAiY29tbWl0IgorbXNnc3RyICJjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMgorbXNnaWQgInJldXNlIGFuZCBlZGl0IG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICJyaXVzYSBpbCBtZXNzYWdnaW8gZGVsIGNvbW1pdCBzcGVjaWZpY2F0byBwZXIgcG9pIG1vZGlmaWNhcmxvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDMKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAicml1c2EgaWwgbWVzc2FnZ2lvIGRlbCBjb21taXQgc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNAorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIGZpeHVwIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyJ1c2EgaWwgbWVzc2FnZ2lvIGluIGZvcm1hdG8gYXV0b3NxdWFzaCBwZXIgY29ycmVnZ2VyZSBpbCBjb21taXQgc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNQorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisidXNhIGlsIG1lc3NhZ2dpbyBpbiBmb3JtYXRvIGF1dG9zcXVhc2ggcGVyIGVzZWd1aXJlIGxvIHNxdWFzaCBkZWwgY29tbWl0ICIKKyJzcGVjaWZpY2F0byIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA2Cittc2dpZCAidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIKK21zZ3N0ciAiaWwgY29tbWl0IG9yYSBoYSBtZSBjb21lIGF1dG9yZSAob3B6aW9uZSB1c2F0YSBjb24gLUMvLWMvLS1hbWVuZCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNyBidWlsdGluL2xvZy5jOjE2MzQgYnVpbHRpbi9tZXJnZS5jOjI5MAorIzogYnVpbHRpbi9wdWxsLmM6MTQ0IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEwCittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICJhZ2dpdW5naSBTaWduZWQtb2ZmLWJ5OiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA4Cittc2dpZCAidXNlIHNwZWNpZmllZCB0ZW1wbGF0ZSBmaWxlIgorbXNnc3RyICJ1c2EgaWwgZmlsZSBtb2RlbGxvIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDkKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAiZm9yemEgbGEgbW9kaWZpY2EgZGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTExCittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgImluY2x1ZGkgbG8gc3RhdG8gbmVsIG1vZGVsbG8gZGVsIG1lc3NhZ2dpbyBkaSBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNgorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICJPcHppb25pIGNvbnRlbnV0byBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNworbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiZXNlZ3VpIGlsIGNvbW1pdCBkaSB0dXR0aSBpIGZpbGUgbW9kaWZpY2F0aSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE4Cittc2dpZCAiYWRkIHNwZWNpZmllZCBmaWxlcyB0byBpbmRleCBmb3IgY29tbWl0IgorbXNnc3RyICJhZ2dpdW5naSBpIGZpbGUgc3BlY2lmaWNhdGkgYWxsJ2luZGljZSBwZXIgaWwgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTkKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAiYWdnaXVuZ2kgaSBmaWxlIGluIG1vZGFsaXTDoCBpbnRlcmF0dGl2YSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIwCittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAiYWdnaXVuZ2kgbGUgbW9kaWZpY2hlIGluIG1vZGFsaXTDoCBpbnRlcmF0dGl2YSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIxCittc2dpZCAiY29tbWl0IG9ubHkgc3BlY2lmaWVkIGZpbGVzIgorbXNnc3RyICJlc2VndWkgaWwgY29tbWl0IHNvbG8gZGVpIGZpbGUgc3BlY2lmaWNhdGkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMgorbXNnaWQgImJ5cGFzcyBwcmUtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIgorbXNnc3RyICJpZ25vcmEgZ2xpIGhvb2sgcHJlLWNvbW1pdCBlIGNvbW1pdC1tc2ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMworbXNnaWQgInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiCittc2dzdHIgInZpc3VhbGl6emEgZ2xpIGVsZW1lbnRpIGRpIGN1aSBzYXJlYmJlIGVzZWd1aXRvIGlsIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM2Cittc2dpZCAiYW1lbmQgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICJtb2RpZmljYSBpbCBjb21taXQgcHJlY2VkZW50ZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM3Cittc2dpZCAiYnlwYXNzIHBvc3QtcmV3cml0ZSBob29rIgorbXNnc3RyICJpZ25vcmEgbCdob29rIHBvc3QtcmV3cml0ZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTQ0Cittc2dpZCAib2sgdG8gcmVjb3JkIGFuIGVtcHR5IGNoYW5nZSIKK21zZ3N0ciAiYWNjZXR0YSBkaSByZWdpc3RyYXJlIHVuYSBtb2RpZmljYSB2dW90YSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTQ2Cittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAiYWNjZXR0YSBkaSByZWdpc3RyYXJlIHVuYSBtb2RpZmljYSBjb24gdW4gbWVzc2FnZ2lvIHZ1b3RvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIKK21zZ3N0ciAiRmlsZSBNRVJHRV9IRUFEIGNvcnJvdHRvICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYyNgorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgTUVSR0VfTU9ERSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBtZXNzYWdnaW8gZGkgY29tbWl0OiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iCittc2dzdHIgIkludGVycm9tcG8gaWwgY29tbWl0IGEgY2F1c2EgZGkgdW4gbWVzc2FnZ2lvIGRpIGNvbW1pdCB2dW90by5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdDsgeW91IGRpZCBub3QgZWRpdCB0aGUgbWVzc2FnZS5cbiIKK21zZ3N0ciAiSW50ZXJyb21wbyBpbCBjb21taXQ7IG5vbiBoYWkgbW9kaWZpY2F0byBpbCBtZXNzYWdnaW8uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY5MQorbXNnaWQgIiIKKyJyZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisiSWwgcmVwb3NpdG9yeSDDqCBzdGF0byBhZ2dpb3JuYXRvLCBtYSBub24gw6ggc3RhdG9cbiIKKyJwb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZSBuZXdfaW5kZXguIFZlcmlmaWNhIGNoZSBpbFxuIgorImRpc2NvIG5vbiBzaWEgcGllbm8gZSBjaGUgbGEgcXVvdGEgbm9uIHNpYSBzdGF0YVxuIgorInN1cGVyYXRhLCBxdWluZGkgZXNlZ3VpIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgOi9cIiBwZXJcbiIKKyJwcm9jZWRlcmUgYWwgcmlwcmlzdGluby4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNworbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXSIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPGRpcmVjdG9yeSBvZ2dldHRpPl0gWy0tc2hhbGxvd10gWy0tIgorIltuby1dcHJvZ3Jlc3NdIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjIKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxkaXJlY3Rvcnkgb2dnZXR0aT5dIFstLWFwcGVuZHwtLXNwbGl0XSAiCisiWy0tcmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSBbLS1bbm8tXXByb2dyZXNzXSA8b3B6aW9uaSBzcGxpdD4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmQgb2JqZWN0IGRpcmVjdG9yeSBtYXRjaGluZyAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdHJvdmFyZSBsYSBkaXJlY3Rvcnkgb2dnZXR0aSBjb3JyaXNwb25kZW50ZSBhICVzIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjY4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTI1CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIxMCBidWlsdGluL2ZldGNoLmM6MTc5IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgImRpciIKK21zZ3N0ciAiZGlyZWN0b3J5IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjY5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTI2CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIxMQorbXNnaWQgIlRoZSBvYmplY3QgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBncmFwaCIKK21zZ3N0ciAiTGEgZGlyZWN0b3J5IG9nZ2V0dGkgaW4gY3VpIG1lbW9yaXp6YXJlIGlsIGdyYWZvIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjcxCittc2dpZCAiaWYgdGhlIGNvbW1pdC1ncmFwaCBpcyBzcGxpdCwgb25seSB2ZXJpZnkgdGhlIHRpcCBmaWxlIgorbXNnc3RyICJzZSBpbCBncmFmbyBkZWkgY29tbWl0IMOoIGRpdmlzbywgdmVyaWZpY2Egc29sbyBsJ3VsdGltbyBmaWxlIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjk0IHQvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGNvbW1pdC1ncmFwaCAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhcHJpcmUgaWwgZ3JhZm8gZGVpIGNvbW1pdCAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyOAorbXNnaWQgInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiCittc2dzdHIgImluaXppYSBsYSB2aXNpdGEgZGEgdHV0dGkgaSByaWZlcmltZW50aSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzAKK21zZ2lkICJzY2FuIHBhY2staW5kZXhlcyBsaXN0ZWQgYnkgc3RkaW4gZm9yIGNvbW1pdHMiCittc2dzdHIgIiIKKyJlc2FtaW5hIGkgcGFjay1pbmRleCBlbGVuY2F0aSBzdWxsbyBzdGFuZGFyZCBpbnB1dCBhbGxhIHJpY2VyY2EgZGkgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzMgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgImluaXppYSBsYSB2aXNpdGEgYWkgY29tbWl0IGVsZW5jYXRpIHN1bGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNAorbXNnaWQgImluY2x1ZGUgYWxsIGNvbW1pdHMgYWxyZWFkeSBpbiB0aGUgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgImluY2x1ZGkgdHV0dGkgaSBjb21taXQgZ2nDoCBwcmVzZW50aSBuZWwgZmlsZSBjb21taXQtZ3JhcGgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM3Cittc2dpZCAiYWxsb3cgd3JpdGluZyBhbiBpbmNyZW1lbnRhbCBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiY29uc2VudGkgbGEgc2NyaXR0dXJhIGRpIHVuIGZpbGUgZ3JhZm8gZGVpIGNvbW1pdCBpbmNyZW1lbnRhbGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTQzCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAibnVtZXJvIG1hc3NpbW8gZGkgY29tbWl0IGluIHVuIGdyYWZvIGRlaSBjb21taXQgZGl2aXNvIG5vbiBkaSBiYXNlIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE0MQorbXNnaWQgIm1heGltdW0gcmF0aW8gYmV0d2VlbiB0d28gbGV2ZWxzIG9mIGEgc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICJyYXBwb3J0byBtYXNzaW1vIGZyYSBkdWUgbGl2ZWxsaSBkaSB1biBncmFmbyBkZWkgY29tbWl0IGRpdmlzbyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNTkKK21zZ2lkICJ1c2UgYXQgbW9zdCBvbmUgb2YgLS1yZWFjaGFibGUsIC0tc3RkaW4tY29tbWl0cywgb3IgLS1zdGRpbi1wYWNrcyIKK21zZ3N0ciAidXNhIGFsIHBpw7kgdW4nb3B6aW9uZSBmcmEgLS1yZWFjaGFibGUsIC0tc3RkaW4tY29tbWl0cyBvIC0tc3RkaW4tcGFja3MiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTEKK21zZ2lkICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29uZmlnIFs8b3B6aW9uaT5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEwNCBidWlsdGluL2Vudi0taGVscGVyLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIC0tdHlwZSBhcmd1bWVudCwgJXMiCittc2dzdHIgImFyZ29tZW50byAtLXR5cGUgbm9uIHJpY29ub3NjaXV0bzogJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTE2Cittc2dpZCAib25seSBvbmUgdHlwZSBhdCBhIHRpbWUiCittc2dzdHIgInNvbG8gdW4gdGlwbyBwZXIgdm9sdGEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI1Cittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgIlBlcmNvcnNvIGZpbGUgZGkgY29uZmlndXJhemlvbmUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI2Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAidXNhIGlsIGZpbGUgZGkgY29uZmlndXJhemlvbmUgZ2xvYmFsZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjcKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2EgaWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSBkaSBzaXN0ZW1hIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOAorbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2EgaWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSBkZWwgcmVwb3NpdG9yeSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjkKK21zZ2lkICJ1c2UgcGVyLXdvcmt0cmVlIGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2EgaWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSBwZXIgYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgInVzYSBpbCBmaWxlIGRpIGNvbmZpZ3VyYXppb25lIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgImJsb2ItaWQiCittc2dzdHIgIklEIGJsb2IiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMxCittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAibGVnZ2kgbGEgY29uZmlndXJhemlvbmUgZGFsbCdvZ2dldHRvIGJsb2Igc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMyCittc2dpZCAiQWN0aW9uIgorbXNnc3RyICJBemlvbmUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMzCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIm90dGllbmkgdmFsb3JlOiBub21lIFtlc3ByZXNzaW9uZS1yZWdvbGFyZS12YWxvcmVdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNAorbXNnaWQgImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAib3R0aWVuaSB0dXR0aSBpIHZhbG9yaTogY2hpYXZlIFtlc3ByZXNzaW9uZS1yZWdvbGFyZS12YWxvcmVdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNQorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICIiCisib3R0aWVuaSBpIHZhbG9yaSBpbiBiYXNlIGEgdW4nZXNwcmVzc2lvbmUgcmVnb2xhcmU6IGVzcHJlc3Npb25lLXJlZ29sYXJlLSIKKyJub21lIFtlc3ByZXNzaW9uZS1yZWdvbGFyZS12YWxvcmVdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNgorbXNnaWQgImdldCB2YWx1ZSBzcGVjaWZpYyBmb3IgdGhlIFVSTDogc2VjdGlvblsudmFyXSBVUkwiCittc2dzdHIgIm90dGllbmkgaWwgdmFsb3JlIHNwZWNpZmljbyBwZXIgbCdVUkw6IHNlemlvbmVbLnZhcmlhYmlsZV0gVVJMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNworbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICIiCisic29zdGl0dWlzY2kgdHV0dGUgbGUgdmFyaWFiaWxpIGNvcnJpc3BvbmRlbnRpOiBub21lLXZhbG9yZSBbZXNwcmVzc2lvbmUtIgorInJlZ29sYXJlLXZhbG9yZV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM4Cittc2dpZCAiYWRkIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIgorbXNnc3RyICJhZ2dpdW5naSB1bmEgbnVvdmEgdmFyaWFiaWxlOiBub21lIHZhbG9yZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzkKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJyaW11b3ZpIHVuYSB2YXJpYWJpbGU6IG5vbWUgW2VzcHJlc3Npb25lLXJlZ29sYXJlLXZhbG9yZV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQwCittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgInJpbXVvdmkgdHV0dGUgbGUgY29ycmlzcG9uZGVuemU6IG5vbWUgW2VzcHJlc3Npb25lLXJlZ29sYXJlLXZhbG9yZV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQxCittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICJyaW5vbWluYSBzZXppb25lOiB2ZWNjaGlvLW5vbWUgbnVvdm8tbm9tZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDIKK21zZ2lkICJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIgorbXNnc3RyICJyaW11b3ZpIHVuYSBzZXppb25lOiBub21lIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MworbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICJlbGVuY2EgdHV0dGkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ0Cittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgImFwcmkgdW4gZWRpdG9yIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NQorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICJ0cm92YSBpbCBjb2xvcmUgY29uZmlndXJhdG86IHNsb3QgW3ZhbG9yZS1wcmVkZWZpbml0b10iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ2Cittc2dpZCAiZmluZCB0aGUgY29sb3Igc2V0dGluZzogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCittc2dzdHIgInRyb3ZhIGwnaW1wb3N0YXppb25lIGNvbG9yZTogc2xvdCBbc3RhbmRhcmQtb3V0cHV0LcOoLXVuYS10dHldIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NworbXNnaWQgIlR5cGUiCittc2dzdHIgIlRpcG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ4IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzozOAorbXNnaWQgInZhbHVlIGlzIGdpdmVuIHRoaXMgdHlwZSIKK21zZ3N0ciAiYWwgdmFsb3JlIMOoIGFzc2VnbmF0byBxdWVzdG8gdGlwbyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDkKK21zZ2lkICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiCittc2dzdHIgImlsIHZhbG9yZSDDqCBcInRydWVcIiBvIFwiZmFsc2VcIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTAKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAiaWwgdmFsb3JlIMOoIHVuIG51bWVybyBkZWNpbWFsZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTEKK21zZ2lkICJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiCittc2dzdHIgImlsIHZhbG9yZSDDqCAtLWJvb2wgbyAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTIKK21zZ2lkICJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIgorbXNnc3RyICJpbCB2YWxvcmUgw6ggdW4gcGVyY29yc28gKG5vbWUgZmlsZSBvIGRpcmVjdG9yeSkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUzCittc2dpZCAidmFsdWUgaXMgYW4gZXhwaXJ5IGRhdGUiCittc2dzdHIgImlsIHZhbG9yZSDDqCB1bmEgZGF0YSBkaSBzY2FkZW56YSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTQKIG1zZ2lkICJPdGhlciIKIG1zZ3N0ciAiQWx0cm8iCiAKLSM6IGxpYi9lcnJvci50Y2w6MjAgbGliL2Vycm9yLnRjbDoxMTQKLW1zZ2lkICJlcnJvciIKLW1zZ3N0ciAiZXJyb3JlIgorIzogYnVpbHRpbi9jb25maWcuYzoxNTUKK21zZ2lkICJ0ZXJtaW5hdGUgdmFsdWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgInRlcm1pbmEgaSB2YWxvcmkgY29uIHVuIGJ5dGUgTlVMIgogCi0jOiBsaWIvZXJyb3IudGNsOjM2Ci1tc2dpZCAid2FybmluZyIKLW1zZ3N0ciAiYXR0ZW56aW9uZSIKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU2Cittc2dpZCAic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IgorbXNnc3RyICJ2aXN1YWxpenphIHNvbG8gaSBub21pIGRlbGxlIHZhcmlhYmlsaSIKIAotIzogbGliL2Vycm9yLnRjbDo5NAotbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NworbXNnaWQgInJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzIG9uIGxvb2t1cCIKIG1zZ3N0ciAiIgotIkJpc29nbmEgY29ycmVnZ2VyZSBnbGkgZXJyb3JpIHN1ZGRldHRpIHByaW1hIGRpIGNyZWFyZSB1bmEgbnVvdmEgcmV2aXNpb25lLiIKKyJyaXNwZXR0YSBsZSBkaXJlY3RvcnkgZGkgaW5jbHVzaW9uZSBkdXJhbnRlIGlsIHJlY3VwZXJvIGRlbGxlIHZhcmlhYmlsaSIKIAotIzogbGliL2luZGV4LnRjbDo2Ci1tc2dpZCAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIgotbXNnc3RyICJJbXBvc3NpYmlsZSBzYmxvY2NhcmUgbCdhY2Nlc3NvIGFsbCdpbmRpY2UiCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OAorbXNnaWQgInNob3cgb3JpZ2luIG9mIGNvbmZpZyAoZmlsZSwgc3RhbmRhcmQgaW5wdXQsIGJsb2IsIGNvbW1hbmQgbGluZSkiCittc2dzdHIgIiIKKyJ2aXN1YWxpenphIGwnb3JpZ2luZSBkZWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSAoZmlsZSwgc3RhbmRhcmQgaW5wdXQsIGJsb2IsICIKKyJyaWdhIGRpIGNvbWFuZG8pIgogCi0jOiBsaWIvaW5kZXgudGNsOjE1Ci1tc2dpZCAiSW5kZXggRXJyb3IiCi1tc2dzdHIgIkVycm9yZSBuZWxsJ2luZGljZSIKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU5Cittc2dpZCAic2hvdyBzY29wZSBvZiBjb25maWcgKHdvcmt0cmVlLCBsb2NhbCwgZ2xvYmFsLCBzeXN0ZW0sIGNvbW1hbmQpIgorbXNnc3RyICIiCisidmlzdWFsaXp6YSBsJ2FtYml0byBkZWxsYSBjb25maWd1cmF6aW9uZSAoYWxiZXJvIGRpIGxhdm9ybywgbG9jYWxlLCBnbG9iYWxlLCAiCisic2lzdGVtYSwgY29tYW5kbykiCiAKLSM6IGxpYi9pbmRleC50Y2w6MTcKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTYwIGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MAorbXNnaWQgInZhbHVlIgorbXNnc3RyICJ2YWxvcmUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTYwCittc2dpZCAid2l0aCAtLWdldCwgdXNlIGRlZmF1bHQgdmFsdWUgd2hlbiBtaXNzaW5nIGVudHJ5IgorbXNnc3RyICJjb24gLS1nZXQsIHVzYSBpbCB2YWxvcmUgcHJlZGVmaW5pdG8gc2UgbGEgdm9jZSDDqCBtYW5jYW50ZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlICVkIgorbXNnc3RyICJudW1lcm8gZGkgYXJnb21lbnRpIGVycmF0bywgZG92cmViYmVybyBlc3NlcmUgJWQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIHNob3VsZCBiZSBmcm9tICVkIHRvICVkIgorbXNnc3RyICJudW1lcm8gZGkgYXJnb21lbnRpIGVycmF0bywgZG92cmViYmVybyBlc3NlcmUgZGEgJWQgYSAlZCIKKworIzogYnVpbHRpbi9jb25maWcuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgInBhdHRlcm4gY2hpYXZlIG5vbiB2YWxpZG86ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZm9ybWF0IGRlZmF1bHQgY29uZmlnIHZhbHVlOiAlcyIKK21zZ3N0ciAiZm9ybWF0dGF6aW9uZSBkZWwgdmFsb3JlIGNvbmZpZ3VyYXppb25lIHByZWRlZmluaXRvIG5vbiByaXVzY2l0YTogJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBjb2xvciAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGNvbG9yZSAnJXMnIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ1OQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBkZWZhdWx0IGNvbG9yIHZhbHVlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIHZhbG9yZSBjb2xvcmUgcHJlZGVmaW5pdG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTEyIGJ1aWx0aW4vY29uZmlnLmM6NzY4Cittc2dpZCAibm90IGluIGEgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAibm9uIHNpIMOoIGluIHVuYSBkaXJlY3RvcnkgZ2l0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUxNQorbXNnaWQgIndyaXRpbmcgdG8gc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAibGEgc2NyaXR0dXJhIHN1IHN0YW5kYXJkIGlucHV0IG5vbiDDqCBzdXBwb3J0YXRhIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUxOAorbXNnaWQgIndyaXRpbmcgY29uZmlnIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgImxhIHNjcml0dHVyYSBkaSBibG9iIGRpIGNvbmZpZ3VyYXppb25lIG5vbiDDqCBzdXBwb3J0YXRhIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYwMworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCi0icmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCiBtc2dzdHIgIiIKLSJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGwnaW5kaWNlLiBPcmEgc2Fyw6AgYXZ2aWF0YSB1bmEgbnVvdmEgYW5hbGlzaSBjaGUgIgotImFnZ2lvcm5lcsOgIGdpdC1ndWkuIgorIiMgUXVlc3RvIMOoIGlsIGZpbGUgZGkgY29uZmlndXJhemlvbmUgdXRlbnRlIGRpIEdpdC5cbiIKKyJbdXNlcl1cbiIKKyIjIEFkYXR0YSBlIGRlY29tbWVudGEgbGUgc2VndWVudGkgcmlnaGU6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgogCi0jOiBsaWIvaW5kZXgudGNsOjI4Ci1tc2dpZCAiQ29udGludWUiCi1tc2dzdHIgIkNvbnRpbnVhIgorIzogYnVpbHRpbi9jb25maWcuYzo2MjcKK21zZ2lkICJvbmx5IG9uZSBjb25maWcgZmlsZSBhdCBhIHRpbWUiCittc2dzdHIgInNvbG8gdW4gZmlsZSBkaSBjb25maWd1cmF6aW9uZSBwZXIgdm9sdGEiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzEKLW1zZ2lkICJVbmxvY2sgSW5kZXgiCi1tc2dzdHIgIlNibG9jY2EgbCdhY2Nlc3NvIGFsbCdpbmRpY2UiCisjOiBidWlsdGluL2NvbmZpZy5jOjYzMgorbXNnaWQgIi0tbG9jYWwgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1sb2NhbCBwdcOyIGVzc2VyZSB1c2F0byBzb2xvIGluIHVuIHJlcG9zaXRvcnkgR2l0IgogCi0jOiBsaWIvaW5kZXgudGNsOjI4OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKLW1zZ3N0ciAiJXMgbm9uIGZhcsOgIHBhcnRlIGRlbGxhIHByb3NzaW1hIHJldmlzaW9uZSIKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjM1Cittc2dpZCAiLS1ibG9iIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tYmxvYiBwdcOyIGVzc2VyZSB1c2F0byBzb2xvIGluIHVuIHJlcG9zaXRvcnkgR2l0IgogCi0jOiBsaWIvaW5kZXgudGNsOjMyOAotbXNnaWQgIlJlYWR5IHRvIGNvbW1pdC4iCi1tc2dzdHIgIlByb250byBwZXIgY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUuIgorIzogYnVpbHRpbi9jb25maWcuYzo2NTUKK21zZ2lkICIkSE9NRSBub3Qgc2V0IgorbXNnc3RyICIkSE9NRSBub24gaW1wb3N0YXRhIgogCi0jOiBsaWIvaW5kZXgudGNsOjM0MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFkZGluZyAlcyIKLW1zZ3N0ciAiQWdnaXVudGEgZGkgJXMgaW4gY29yc28iCi0KLSM6IGxpYi9pbmRleC50Y2w6Mzk4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCi1tc2dzdHIgIkFubnVsbGFyZSBsZSBtb2RpZmljaGUgbmVsIGZpbGUgJXM/IgotCi0jOiBsaWIvaW5kZXgudGNsOjQwMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKLW1zZ3N0ciAiQW5udWxsYXJlIGxlIG1vZGlmaWNoZSBpbiBxdWVzdGkgJWkgZmlsZT8iCi0KLSM6IGxpYi9pbmRleC50Y2w6NDA4Ci1tc2dpZCAiQW55IHVuc3RhZ2VkIGNoYW5nZXMgd2lsbCBiZSBwZXJtYW5lbnRseSBsb3N0IGJ5IHRoZSByZXZlcnQuIgotbXNnc3RyICIiCi0iVHV0dGUgbGUgbW9kaWZpY2hlIG5vbiBwcmVwYXJhdGUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUgc2FyYW5ubyBwZXJzZSBwZXIgIgotInNlbXByZS4iCi0KLSM6IGxpYi9pbmRleC50Y2w6NDExCi1tc2dpZCAiRG8gTm90aGluZyIKLW1zZ3N0ciAiTm9uIGZhcmUgbmllbnRlIgotCi0jOiBsaWIvaW5kZXgudGNsOjQyOQotbXNnaWQgIlJldmVydGluZyBzZWxlY3RlZCBmaWxlcyIKLW1zZ3N0ciAiQW5udWxsbyBsZSBtb2RpZmljaGUgbmVpIGZpbGUgc2VsZXppb25hdGkiCi0KLSM6IGxpYi9pbmRleC50Y2w6NDMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0aW5nICVzIgotbXNnc3RyICJBbm51bGxvIGxlIG1vZGlmaWNoZSBpbiAlcyIKLQotIzogbGliL21lcmdlLnRjbDoxMworIzogYnVpbHRpbi9jb25maWcuYzo2NzkKIG1zZ2lkICIiCi0iQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgotIlxuIgotIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgogbXNnc3RyICIiCi0iTm9uIHBvc3NvIGVmZmV0dHVhcmUgZnVzaW9uaSBkdXJhbnRlIHVuYSBjb3JyZXppb25lLlxuIgotIlxuIgotIkJpc29nbmEgZmluaXJlIGRpIGNvcnJlZ2dlcmUgcXVlc3RhIHJldmlzaW9uZSBwcmltYSBkaSBpbml6aWFyZSB1bmEgIgotInF1YWx1bnF1ZSBmdXNpb25lLlxuIgorIi0td29ya3RyZWUgbm9uIHB1w7IgZXNzZXJlIHVzYXRvIGNvbiBhbGJlcmkgZGkgbGF2b3JvIG11bHRpcGxpIGEgbWVub1xuIgorImNoZSBsJ2VzdGVuc2lvbmUgZGkgY29uZmlndXJhemlvbmUgd29ya3RyZWVDb25maWcgbm9uIHNpYSBhYmlsaXRhdGEuXG4iCisiTGVnZ2kgbGEgc2V6aW9uZSBcIkZJTEUgREkgQ09ORklHVVJBWklPTkVcIiBpbiBcImdpdCBoZWxwIHdvcmt0cmVlXCIgcGVyXG4iCisiaSBkZXR0YWdsaSIKIAotIzogbGliL21lcmdlLnRjbDoyNworIzogYnVpbHRpbi9jb25maWcuYzo3MTQKK21zZ2lkICItLWdldC1jb2xvciBhbmQgdmFyaWFibGUgdHlwZSBhcmUgaW5jb2hlcmVudCIKK21zZ3N0ciAiLS1nZXQtY29sb3IgZSBpbCB0aXBvIGRlbGxhIHZhcmlhYmlsZSBub24gc29ubyBjb2VyZW50aSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTkKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICJzb2xvIHVuJ2F6aW9uZSBwZXIgdm9sdGEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzMyCittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIi0tbmFtZS1vbmx5IMOoIGFwcGxpY2FiaWxlIHNvbG8gYSAtLWxpc3QgbyAtLWdldC1yZWdleHAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzM4CiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisiLS1zaG93LW9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwLCBhbmQgLS0iCisibGlzdCIKIG1zZ3N0ciAiIgotIkwndWx0aW1vIHN0YXRvIGFuYWxpenphdG8gbm9uIGNvcnJpc3BvbmRlIGFsbG8gc3RhdG8gZGVsbCdhcmNoaXZpby5cbiIKLSJcbiIKLSJVbiBhbHRybyBwcm9ncmFtbWEgR2l0IGhhIG1vZGlmaWNhdG8gcXVlc3RvIGFyY2hpdmlvIGRhbGwndWx0aW1hIGFuYWxpc2kuIgotIkJpc29nbmEgZWZmZXR0dWFyZSB1bmEgbnVvdmEgYW5hbGlzaSBwcmltYSBkaSBwb3RlciBlZmZldHR1YXJlIHVuYSBmdXNpb25lLlxuIgotIlxuIgotIkxhIG51b3ZhIGFuYWxpc2kgY29taW5jZXLDoCBvcmEuXG4iCisiLS1zaG93LW9yaWdpbiDDqCBhcHBsaWNhYmlsZSBzb2xvIGEgLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwIGUgLS1saXN0IgogCi0jOiBsaWIvbWVyZ2UudGNsOjQ1Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2NvbmZpZy5jOjc0NAorbXNnaWQgIi0tZGVmYXVsdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQiCittc2dzdHIgIi0tZGVmYXVsdCDDqCBhcHBsaWNhYmlsZSBzb2xvIGEgLS1nZXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbmZpZyBmaWxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSAnJXMnIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2MAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiCittc2dzdHIgImVycm9yZSBkdXJhbnRlIGwnZWxhYm9yYXppb25lIGRlbC9kZWkgZmlsZSBkaSBjb25maWd1cmF6aW9uZSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzAKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgImxhIG1vZGlmaWNhIGRlbGxvIHN0YW5kYXJkIGlucHV0IG5vbiDDqCBzdXBwb3J0YXRhIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3MgorbXNnaWQgImVkaXRpbmcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAibGEgbW9kaWZpY2EgZGVpIGJsb2Igbm9uIMOoIHN1cHBvcnRhdGEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgaWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3OTkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCi0iXG4iCi0iRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgotIlxuIgotIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgotIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKKyJjYW5ub3Qgb3ZlcndyaXRlIG11bHRpcGxlIHZhbHVlcyB3aXRoIGEgc2luZ2xlIHZhbHVlXG4iCisiICAgICAgIFVzZSBhIHJlZ2V4cCwgLS1hZGQgb3IgLS1yZXBsYWNlLWFsbCB0byBjaGFuZ2UgJXMuIgogbXNnc3RyICIiCi0iU2VpIG5lbCBtZXp6byBkaSB1bmEgZnVzaW9uZSBjb24gY29uZmxpdHRpLlxuIgotIlxuIgotIklsIGZpbGUgJXMgaGEgZGVpIGNvbmZsaXR0aS5cbiIKLSJcbiIKLSJCaXNvZ25hIHJpc29sdmVyZSBpIGNvbmZsaXR0aSwgcHJlcGFyYXJlIGlsIGZpbGUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUgZWQgIgotImluZmluZSBjcmVhcmxhIHBlciBjb21wbGV0YXJlIGxhIGZ1c2lvbmUgYXR0dWFsZS4gU29sbyBhIHF1ZXN0byBwdW50byBwb3RyYWkgIgotImluaXppYXJlIHVuJ2FsdHJhIGZ1c2lvbmUuXG4iCisiaW1wb3NzaWJpbGUgc292cmFzY3JpdmVyZSB2YWxvcmkgbXVsdGlwbGkgY29uIHVuIHNpbmdvbG8gdmFsb3JlXG4iCisiICAgICAgIFVzYSB1bidlc3ByZXNzaW9uZSByZWdvbGFyZSwgLS1hZGQgbyAtLXJlcGxhY2UtYWxsIHBlciBtb2RpZmljYXJlICVzLiIKIAotIzogbGliL21lcmdlLnRjbDo1NQotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9jb25maWcuYzo4NzMgYnVpbHRpbi9jb25maWcuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBzZWN0aW9uOiAlcyIKK21zZ3N0ciAic2V6aW9uZSAlcyBub24gZXNpc3RlbnRlIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5MAorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjEwMAorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAic3RhbXBhIGxlIGRpbWVuc2lvbmkgaW4gdW4gZm9ybWF0byBsZWdnaWJpbGUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNgorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8b3B6aW9uaT5dIFs8ZXNwcmVzc2lvbmUgY29tbWl0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxvcHppb25pPl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiaGVhZCIKK21zZ3N0ciAiaGVhZCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAibGlnaHR3ZWlnaHQiCittc2dzdHIgImxlZ2dlcm8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImFubm90YXRlZCIKK21zZ3N0ciAiYW5ub3RhdG8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJpbCB0YWcgYW5ub3RhdG8gJXMgbm9uIMOoIGRpc3BvbmliaWxlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgImlsIHRhZyBhbm5vdGF0byAlcyBub24gaGEgdW4gbm9tZSBpbmNvcnBvcmF0byIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICJpbCB0YWcgJyVzJyBpbiByZWFsdMOgIHF1aSDDqCAnJXMnIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRhZyBleGFjdGx5IG1hdGNoZXMgJyVzJyIKK21zZ3N0ciAibmVzc3VuIHRhZyBjb3JyaXNwb25kZSBlc2F0dGFtZW50ZSBhICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAiIgorIk5lc3N1bmEgY29ycmlzcG9uZGVuemEgZXNhdHRhIHN1aSByaWZlcmltZW50aSBvIHN1aSB0YWcsIHN0byBlc2VndWVuZG8gdW5hICIKKyJyaWNlcmNhIHBlciBkZXNjcml2ZXJlIGlsIGNvbW1pdFxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICJyaWNlcmNhIHRlcm1pbmF0YSBpbiAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDIxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCi0iXG4iCi0iRmlsZSAlcyBpcyBtb2RpZmllZC5cbiIKLSJcbiIKLSJZb3Ugc2hvdWxkIGNvbXBsZXRlIHRoZSBjdXJyZW50IGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYSBtZXJnZS4gIERvaW5nIHNvICIKLSJ3aWxsIGhlbHAgeW91IGFib3J0IGEgZmFpbGVkIG1lcmdlLCBzaG91bGQgdGhlIG5lZWQgYXJpc2UuXG4iCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKIG1zZ3N0ciAiIgotIlNlaSBuZWwgbWV6em8gZGkgdW5hIG1vZGlmaWNhLlxuIgotIlxuIgotIklsIGZpbGUgJXMgw6ggc3RhdG8gbW9kaWZpY2F0by5cbiIKLSJcbiIKLSJCaXNvZ25hIGNvbXBsZXRhcmUgbGEgY3JlYXppb25lIGRlbGxhIHJldmlzaW9uZSBhdHR1YWxlIHByaW1hIGRpIGluaXppYXJlICIKLSJ1bmEgZnVzaW9uZS4gSW4gcXVlc3RvIG1vZG8gc2Fyw6AgcGnDuSBmYWNpbGUgaW50ZXJyb21wZXJlIHVuYSBmdXNpb25lIG5vbiAiCi0icml1c2NpdGEsIG5lbCBjYXNvIGNlIG5lIGZvc3NlIGJpc29nbm8uXG4iCisiTmVzc3VuIHRhZyBhbm5vdGF0byBwdcOyIGRlc2NyaXZlcmUgJyVzJy5cbiIKKyJDacOyIG5vbm9zdGFudGUsIGMnZXJhbm8gZGVpIHRhZyBub24gYW5ub3RhdGk6IHByb3ZhIGNvbiAtLXRhZ3MuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEwNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIG9mICVzIgotbXNnc3RyICIlcyBkaSAlcyIKLQotIzogbGliL21lcmdlLnRjbDoxMjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKLW1zZ3N0ciAiRnVzaW9uZSBkaSAlcyBlICVzIGluIGNvcnNvLi4uIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEzMQotbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgotbXNnc3RyICJGdXNpb25lIGNvbXBsZXRhdGEgY29uIHN1Y2Nlc3NvLiIKLQotIzogbGliL21lcmdlLnRjbDoxMzMKLW1zZ2lkICJNZXJnZSBmYWlsZWQuICBDb25mbGljdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkLiIKLW1zZ3N0ciAiRnVzaW9uZSBub24gcml1c2NpdGEuIEJpc29nbmEgcmlzb2x2ZXJlIGkgY29uZmxpdHRpLiIKLQotIzogbGliL21lcmdlLnRjbDoxNTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnZSBJbnRvICVzIgotbXNnc3RyICJGdXNpb25lIGluICVzIgotCi0jOiBsaWIvbWVyZ2UudGNsOjE3NwotbXNnaWQgIlJldmlzaW9uIFRvIE1lcmdlIgotbXNnc3RyICJSZXZpc2lvbmUgZGEgZm9uZGVyZSIKLQotIzogbGliL21lcmdlLnRjbDoyMTIKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MjUKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKLSJcbiIKLSJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuXG4iCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgogbXNnc3RyICIiCi0iSW50ZXJydXppb25lIGltcG9zc2liaWxlIGR1cmFudGUgdW5hIGNvcnJlemlvbmUuXG4iCi0iXG4iCi0iQmlzb2duYSBmaW5pcmUgZGkgY29ycmVnZ2VyZSBxdWVzdGEgcmV2aXNpb25lLlxuIgorIk5lc3N1biB0YWcgcHXDsiBkZXNjcml2ZXJlICclcycuXG4iCisiUHJvdmEgY29uIC0tYWx3YXlzIG8gY3JlYSBkZWkgdGFnLiIKIAotIzogbGliL21lcmdlLnRjbDoyMjIKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgImhvIGF0dHJhdmVyc2F0byAlbHUgY29tbWl0XG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NTgKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkFib3J0IG1lcmdlP1xuIgotIlxuIgotIkFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgotIlxuIgotIkNvbnRpbnVlIHdpdGggYWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2U/IgorIm1vcmUgdGhhbiAlaSB0YWdzIGZvdW5kOyBsaXN0ZWQgJWkgbW9zdCByZWNlbnRcbiIKKyJnYXZlIHVwIHNlYXJjaCBhdCAlc1xuIgogbXNnc3RyICIiCi0iSW50ZXJyb21wZXJlIGZ1c2lvbmU/XG4iCi0iXG4iCi0iTCdpbnRlcnJ1emlvbmUgZGVsbGEgZnVzaW9uZSBhdHR1YWxlIGNhdXNlcsOgIGxhIHBlcmRpdGEgZGkgKlRVVFRFKiBsZSAiCi0ibW9kaWZpY2hlIG5vbiBhbmNvcmEgcHJlc2VudGkgbmVsbCdhcmNoaXZpby5cbiIKLSJcbiIKLSJDb250aW51YXJlIGNvbiBsJ2ludGVycnV6aW9uZSBkZWxsYSBmdXNpb25lIGF0dHVhbGU/IgorInRyb3ZhdGkgcGnDuSBkaSAlaSB0YWc7IGhvIGVsZW5jYXRvIGkgJWkgcGnDuSByZWNlbnRpXG4iCisiaG8gdGVybWluYXRvIGxhIHJpY2VyY2EgaW4gJXNcbiIKIAotIzogbGliL21lcmdlLnRjbDoyMjgKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAiZGVzY3JpdmkgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiJXMgbm9uIMOoIHVuIG5vbWUgb2dnZXR0byB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbmVpdGhlciBhIGNvbW1pdCBub3IgYmxvYiIKK21zZ3N0ciAiJXMgbm9uIMOoIG7DqSB1biBjb21taXQgbsOpIHVuIGJsb2IiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTEKK21zZ2lkICJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IgorbXNnc3RyICJ0cm92YSBpbCB0YWcgc3VjY2Vzc2l2byBhbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTIKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICJlc2VndWkgaWwgZGVidWcgZGVsbGEgc3RyYXRlZ2lhIGRpIHJpY2VyY2Egc3VsbG8gc3RhbmRhcmQgZXJyb3IiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTMKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAidXNhIHF1YWx1bnF1ZSByaWZlcmltZW50byIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NAorbXNnaWQgInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIgorbXNnc3RyICJ1c2EgcXVhbHVucXVlIHRhZywgYW5jaGUgcXVlbGxpIG5vbiBhbm5vdGF0aSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NQorbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgInVzYSBzZW1wcmUgaWwgZm9ybWF0byBsdW5nbyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NgorbXNnaWQgIm9ubHkgZm9sbG93IGZpcnN0IHBhcmVudCIKK21zZ3N0ciAic2VndWkgc29sbyBpbCBwcmltbyBnZW5pdG9yZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1OQorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgInZpc3VhbGl6emEgc29sbyBsZSBjb3JyaXNwb25kZW56ZSBlc2F0dGUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjEKK21zZ2lkICJjb25zaWRlciA8bj4gbW9zdCByZWNlbnQgdGFncyAoZGVmYXVsdDogMTApIgorbXNnc3RyICJjb25zaWRlcmEgZ2xpIDxuPiB0YWcgcGnDuSByZWNlbnRpIChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGE6IDEwKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2MworbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgImNvbnNpZGVyYSBzb2xvIGkgdGFnIGNvcnJpc3BvbmRlbnRpIGFsIDxwYXR0ZXJuPiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2NQorbXNnaWQgImRvIG5vdCBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAibm9uIGNvbnNpZGVyYXJlIGkgdGFnIGNvcnJpc3BvbmRlbnRpIGFsIDxwYXR0ZXJuPiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2NyBidWlsdGluL25hbWUtcmV2LmM6NTM1Cittc2dpZCAic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIgorbXNnc3RyICJ2aXN1YWxpenphIGwnb2dnZXR0byBjb21taXQgYWJicmV2aWF0byBjb21lIGZhbGxiYWNrIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY4IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NzEKK21zZ2lkICJtYXJrIgorbXNnc3RyICJjb250cmFzc2Vnbm8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjkKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiCittc2dzdHIgIiIKKyJhZ2dpdW5naSA8Y29udHJhc3NlZ25vPiBhbGwnYWxiZXJvIGRpIGxhdm9ybyBzcG9yY28gKGltcG9zdGF6aW9uZSAiCisicHJlZGVmaW5pdGE6IFwiLWRpcnR5XCIpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTcyCittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBicm9rZW4gd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1icm9rZW5cIikiCittc2dzdHIgIiIKKyJhZ2dpdW5naSA8Y29udHJhc3NlZ25vPiBhbGwnYWxiZXJvIGRpIGxhdm9ybyByb3R0byAoaW1wb3N0YXppb25lICIKKyJwcmVkZWZpbml0YTogXCItYnJva2VuXCIpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTkwCittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIi0tbG9uZyBub24gw6ggY29tcGF0aWJpbGUgY29uIC0tYWJicmV2PTAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MTkKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAiTmVzc3VuIG5vbWUgdHJvdmF0bywgbm9uIMOoIHBvc3NpYmlsZSBkZXNjcml2ZXJlIG51bGxhLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY3MAorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWRpcnR5IG5vbiDDqCBjb21wYXRpYmlsZSBjb24gbGUgZXNwcmVzc2lvbmkgY29tbWl0IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjcyCittc2dpZCAiLS1icm9rZW4gaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWJyb2tlbiBub24gw6ggY29tcGF0aWJpbGUgY29uIGxlIGVzcHJlc3Npb25pIGNvbW1pdCIKKworIzogYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiCittc2dzdHIgIiclcyc6IG5vbiDDqCB1biBmaWxlIHJlZ29sYXJlIG8gdW4gY29sbGVnYW1lbnRvIHNpbWJvbGljbyIKKworIzogYnVpbHRpbi9kaWZmLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAib3B6aW9uZSBub24gdmFsaWRhOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzUwCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIk5vbiDDqCB1biByZXBvc2l0b3J5IEdpdCIKKworIzogYnVpbHRpbi9kaWZmLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJzcGVjaWZpY2F0byBvZ2dldHRvIG5vbiB2YWxpZG8gJyVzJy4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIgorbXNnc3RyICJwacO5IGRpIGR1ZSBibG9iIHNwZWNpZmljYXRpOiAnJXMnIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAic3BlY2lmaWNhdG8gb2dnZXR0byBub24gZ2VzdGl0byAnJXMnLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwCittc2dpZCAiZ2l0IGRpZmZ0b29sIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZGlmZnRvb2wgWzxvcHppb25pPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwZXJjb3Jzbz4uLi5dIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZDogJWQiCittc2dzdHIgIm5vbiByaXVzY2l0bzogJWQiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBjb2xsZWdhbWVudG8gc2ltYm9saWNvICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgZmlsZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBmaWxlIGNvbGxlZ2FtZW50byBzaW1ib2xpY28gJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIGZvciBzeW1saW5rICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGwnb2dnZXR0byAlcyBwZXIgaWwgY29sbGVnYW1lbnRvIHNpbWJvbGljbyAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjQxMwogbXNnaWQgIiIKLSJSZXNldCBjaGFuZ2VzP1xuIgotIlxuIgotIlJlc2V0dGluZyB0aGUgY2hhbmdlcyB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKLSJcbiIKLSJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKKyJjb21iaW5lZCBkaWZmIGZvcm1hdHMoJy1jJyBhbmQgJy0tY2MnKSBhcmUgbm90IHN1cHBvcnRlZCBpblxuIgorImRpcmVjdG9yeSBkaWZmIG1vZGUoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4iCiBtc2dzdHIgIiIKLSJSaXByaXN0aW5hcmUgbGEgcmV2aXNpb25lIGF0dHVhbGUgZSBhbm51bGxhcmUgbGUgbW9kaWZpY2hlP1xuIgotIlxuIgotIkwnYW5udWxsYW1lbnRvIGRlbGxlIG1vZGlmaWNoZSBjYXVzZXLDoCBsYSBwZXJkaXRhIGRpICpUVVRURSogbGUgbW9kaWZpY2hlICIKLSJub24gYW5jb3JhIHByZXNlbnRpIG5lbGwnYXJjaGl2aW8uXG4iCi0iXG4iCi0iQ29udGludWFyZSBjb24gbCdhbm51bGxhbWVudG8gZGVsbGUgbW9kaWZpY2hlIGF0dHVhbGk/IgorImkgZm9ybWF0aSBkaWZmIGNvbWJpbmF0aSAoJy1jJyBlICctLWNjJykgbm9uIHNvbm8gc3VwcG9ydGF0aSBpblxuIgorIm1vZGFsaXTDoCBkaWZmIGRpcmVjdG9yeSAoJy1kJyBlICctLWRpci1kaWZmJykuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIzOQotbXNnaWQgIkFib3J0aW5nIgotbXNnc3RyICJJbnRlcnJ1emlvbmUiCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJvdGggZmlsZXMgbW9kaWZpZWQ6ICclcycgYW5kICclcycuIgorbXNnc3RyICJlbnRyYW1iaSBpIGZpbGUgcmlzdWx0YW5vIG1vZGlmaWNhdGk6ICclcycgZSAnJXMnLiIKIAotIzogbGliL21lcmdlLnRjbDoyMzkKLW1zZ2lkICJmaWxlcyByZXNldCIKLW1zZ3N0ciAicmlwcmlzdGlubyBmaWxlIgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNgorbXNnaWQgIndvcmtpbmcgdHJlZSBmaWxlIGhhcyBiZWVuIGxlZnQuIgorbXNnc3RyICJpbCBmaWxlIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyDDqCBzdGF0byBtYW50ZW51dG8uIgogCi0jOiBsaWIvbWVyZ2UudGNsOjI2NwotbXNnaWQgIkFib3J0IGZhaWxlZC4iCi1tc2dzdHIgIkludGVycnV6aW9uZSBub24gcml1c2NpdGEuIgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wb3JhcnkgZmlsZXMgZXhpc3QgaW4gJyVzJy4iCittc2dzdHIgImVzaXN0b25vIGZpbGUgdGVtcG9yYW5laSBpbiAnJXMnLiIKIAotIzogbGliL21lcmdlLnRjbDoyNjkKLW1zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCi1tc2dzdHIgIkludGVycnV6aW9uZSBjb21wbGV0YXRhLiBQcm9udG8uIgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0OAorbXNnaWQgInlvdSBtYXkgd2FudCB0byBjbGVhbnVwIG9yIHJlY292ZXIgdGhlc2UuIgorbXNnc3RyICJwb3RyZXN0aSB2b2xlciByaXB1bGlybGkgbyByaXByaXN0aW5hcmxpLiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6OAotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIGJhc2UgdmVyc2lvbj8iCi1tc2dzdHIgIkltcG9ycmUgbGEgcmlzb2x1emlvbmUgYWxsYSByZXZpc2lvbmUgY29tdW5lPyIKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTcKK21zZ2lkICJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIKK21zZ3N0ciAidXNhIGBkaWZmLmd1aXRvb2xgIGFuemljaMOpIGBkaWZmLnRvb2xgIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo5Ci1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCi1tc2dzdHIgIkltcG9ycmUgbGEgcmlzb2x1emlvbmUgYWwgcmFtbyBhdHR1YWxlPyIKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTkKK21zZ2lkICJwZXJmb3JtIGEgZnVsbC1kaXJlY3RvcnkgZGlmZiIKK21zZ3N0ciAiZXNlZ3VpIHVuIGRpZmYgZGlyZWN0b3J5IGNvbXBsZXRvIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxMAotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIG90aGVyIGJyYW5jaD8iCi1tc2dzdHIgIkltcG9ycmUgbGEgcmlzb2x1emlvbmUgYWxsJ2FsdHJvIHJhbW8/IgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwMQorbXNnaWQgImRvIG5vdCBwcm9tcHQgYmVmb3JlIGxhdW5jaGluZyBhIGRpZmYgdG9vbCIKK21zZ3N0ciAibm9uIGNoaWVkZXJlIGNvbmZlcm1hIHByaW1hIGRpIGxhbmNpYXJlIHVuIHRvb2wgZGlmZiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MTQKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDYKK21zZ2lkICJ1c2Ugc3ltbGlua3MgaW4gZGlyLWRpZmYgbW9kZSIKK21zZ3N0ciAidXNhIGNvbGxlZ2FtZW50aSBzaW1ib2xpY2kgaW4gbW9kYWxpdMOgIGRpZmYgZGlyZWN0b3J5IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA3Cittc2dpZCAidG9vbCIKK21zZ3N0ciAic3RydW1lbnRvIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA4Cittc2dpZCAidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIgorbXNnc3RyICJ1c2EgbG8gc3RydW1lbnRvIGRpZmYgc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTAKK21zZ2lkICJwcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggYC0tdG9vbGAiCittc2dzdHIgIiIKKyJzdGFtcGEgdW4gZWxlbmNvIGRpIHN0cnVtZW50aSBkaWZmIGNoZSBwb3Nzb25vIGVzc2VyZSB1c2F0aSBjb24gYC0tdG9vbGAiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTMKIG1zZ2lkICIiCi0iTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKLSJcbiIKLSIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgotIlxuIgotIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCisibWFrZSAnZ2l0LWRpZmZ0b29sJyBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbiAtIHplcm8gZXhpdCAiCisiY29kZSIKIG1zZ3N0ciAiIgotIlNpIHN0YW5ubyBtb3N0cmFuZG8gc29sbyBsZSBtb2RpZmljaGUgY29uIGNvbmZsaXR0aS5cbiIKLSJcbiIKLSIlcyBzYXLDoCBzb3ZyYXNjcml0dG8uXG4iCi0iXG4iCi0iUXVlc3RhIG9wZXJhemlvbmUgcHXDsiBlc3NlcmUgbW9kaWZpY2F0YSBzb2xvIHJpY29taW5jaWFuZG8gbGEgZnVzaW9uZS4iCisiZmFpIHPDrCBjaGUgJ2dpdC1kaWZmdG9vbCcgZXNjYSBxdWFuZG8gdW5vIHN0cnVtZW50byBkaWZmIGludm9jYXRvICIKKyJyZXN0aXR1aXNjZSB1biBjb2RpY2UgZCd1c2NpdGEgZGl2ZXJzbyBkYSB6ZXJvIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxNgorbXNnaWQgInNwZWNpZnkgYSBjdXN0b20gY29tbWFuZCBmb3Igdmlld2luZyBkaWZmcyIKK21zZ3N0ciAic3BlY2lmaWNhIHVuIGNvbWFuZG8gcGVyc29uYWxpenphdG8gcGVyIHZpc3VhbGl6emFyZSBpIGRpZmYiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTcKK21zZ2lkICJwYXNzZWQgdG8gYGRpZmZgIgorbXNnc3RyICJmb3JuaXRvIGEgYGRpZmZgIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzMyCittc2dpZCAiZGlmZnRvb2wgcmVxdWlyZXMgd29ya3RyZWUgb3IgLS1uby1pbmRleCIKK21zZ3N0ciAiZGlmZnRvb2wgcmljaGllZGUgdW4gYWxiZXJvIGRpIGxhdm9ybyBvIC0tbm8taW5kZXgiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzkKK21zZ2lkICItLWRpci1kaWZmIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIi0tZGlyLWRpZmYgbm9uIMOoIGNvbXBhdGliaWxlIGNvbiAtLW5vLWluZGV4IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzQyCittc2dpZCAiLS1ndWksIC0tdG9vbCBhbmQgLS1leHRjbWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAibGUgb3B6aW9uaSAtLWd1aSwgLS10b29sIGVkIC0tZXh0Y21kIHNvbm8gbXV0dWFsbWVudGUgZXNjbHVzaXZlIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzUwCittc2dpZCAibm8gPHRvb2w+IGdpdmVuIGZvciAtLXRvb2w9PHRvb2w+IgorbXNnc3RyICJuZXNzdW5vIDxzdHJ1bWVudG8+IHNwZWNpZmljYXRvIHBlciAtLXRvb2w9PHN0cnVtZW50bz4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NTcKK21zZ2lkICJubyA8Y21kPiBnaXZlbiBmb3IgLS1leHRjbWQ9PGNtZD4iCittc2dzdHIgIm5lc3N1biA8Y29tYW5kbz4gc3BlY2lmaWNhdG8gcGVyIC0tZXh0Y21kPTxjb21hbmRvPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYKK21zZ2lkICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3B0aW9ucz4gPGVudi12YXI+IgorbXNnc3RyICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3B6aW9uaT4gPHZhcmlhYmlsZSBkJ2FtYmllbnRlPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjM3IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgInR5cGUiCittc2dzdHIgInRpcG8iCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MQorbXNnaWQgImRlZmF1bHQgZm9yIGdpdF9lbnZfKiguLi4pIHRvIGZhbGwgYmFjayBvbiIKIG1zZ3N0ciAiIgotIklsIGZpbGUgJXMgc2VtYnJhIGNvbnRlbmVyZSBjb25mbGl0dGkgbm9uIHJpc29sdGksIHByZXBhcmFyZSBwZXIgbGEgcHJvc3NpbWEgIgotInJldmlzaW9uZT8iCisiaW1wb3N0YXppb25lIHByZWRlZmluaXRhIHN1IGN1aSByaXBpZWdoZXJhbm5vIGxlIGNoaWFtYXRlIGdpdF9lbnZfKiguLi4pIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MworbXNnaWQgImJlIHF1aWV0IG9ubHkgdXNlIGdpdF9lbnZfKigpIHZhbHVlIGFzIGV4aXQgY29kZSIKIG1zZ3N0ciAiIgotIkxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkgcGVyICVzIMOoIHByZXBhcmF0YSBwZXIgbGEgcHJvc3NpbWEgcmV2aXNpb25lIgorIm5vbiB2aXN1YWxpenphcmUgbWVzc2FnZ2ksIHVzYSBzb2xvIGlsIHZhbG9yZSBkaSBnaXRfZW52XyooKSBjb21lIGNvZGljZSAiCisiZCd1c2NpdGEiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQotbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYC0tZGVmYXVsdCcgZXhwZWN0cyBhIGJvb2xlYW4gdmFsdWUgd2l0aCBgLS10eXBlPWJvb2xgLCBub3QgYCVzYCIKIG1zZ3N0ciAiIgotIk5vbiDDqCBwb3NzaWJpbGUgcmlzb2x2ZXJlIGkgY29uZmxpdHRpIHBlciBjYW5jZWxsYXppb25pIG8gbGluayBjb24gdW4gIgotInByb2dyYW1tYSBlc3Rlcm5vIgorImwnb3B6aW9uZSBgLS1kZWZhdWx0JyByaWNoaWVkZSB1biB2YWxvcmUgYm9vbGVhbm8gY29uIGAtLXR5cGU9Ym9vbGAsIG5vbiBgJXNgIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKLW1zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgotbXNnc3RyICJOb24gZXNpc3RlIHVuIGZpbGUgY29uIGNvbmZsaXR0aS4iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjI2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgotbXNnc3RyICInJXMnIG5vbiDDqCB1bmEgR1VJIHBlciBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpLiIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MjY4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgotbXNnc3RyICJJbCBwcm9ncmFtbWEgJyVzJyBub24gw6ggc3VwcG9ydGF0byIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MzAzCi1tc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCi1tc2dzdHIgIkxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkgw6ggZ2nDoCBhdnZpYXRhLCB0ZXJtaW5hcmxhPyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MzIzCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NzcKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkVycm9yIHJldHJpZXZpbmcgdmVyc2lvbnM6XG4iCi0iJXMiCisib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYW4gdW5zaWduZWQgbG9uZyB2YWx1ZSB3aXRoIGAtLXR5cGU9dWxvbmdgLCBub3QgYCIKKyIlc2AiCiBtc2dzdHIgIiIKLSJFcnJvcmU6IHJldmlzaW9uZSBub24gdHJvdmF0YTpcbiIKLSIlcyIKKyJsJ29wemlvbmUgYC0tZGVmYXVsdCcgcmljaGllZGUgdW4gdmFsb3JlIHVuc2lnbmVkIGxvbmcgY29uIGAtLXR5cGU9dWxvbmdgLCAiCisibm9uIGAlc2AiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM0MwotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjI5Cittc2dpZCAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKK21zZ3N0ciAiZ2l0IGZhc3QtZXhwb3J0IFtvcHppb25pLWVsZW5jby1yZXZdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6ODUzCittc2dpZCAiRXJyb3I6IENhbm5vdCBleHBvcnQgbmVzdGVkIHRhZ3MgdW5sZXNzIC0tbWFyay10YWdzIGlzIHNwZWNpZmllZC4iCittc2dzdHIgIiIKKyJFcnJvcmU6IEltcG9zc2liaWxlIGVzcG9ydGFyZSBpIHRhZyBuaWRpZmljYXRpIGEgbWVubyBjaGUgbm9uIHNpYSAiCisic3BlY2lmaWNhdGEgbCdvcHppb25lIC0tbWFyay10YWdzLiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTIKK21zZ2lkICJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIgorbXNnc3RyICJ2aXN1YWxpenphIGwnYXZhbnphbWVudG8gZG9wbyA8bj4gb2dnZXR0aSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTQKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgInNlbGV6aW9uYSBsYSBnZXN0aW9uZSBkZWkgdGFnIGZpcm1hdGkiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU3Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAic2VsZXppb25hIGxhIGdlc3Rpb25lIGRlaSB0YWcgY2hlIGNvbnRyYXNzZWduYW5vIG9nZ2V0dGkgZmlsdHJhdGkiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYwCittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIGNvbW1pdCBtZXNzYWdlcyBpbiBhbiBhbHRlcm5hdGUgZW5jb2RpbmciCittc2dzdHIgIiIKKyJzZWxlemlvbmEgbGEgZ2VzdGlvbmUgZGVpIG1lc3NhZ2dpIGRpIGNvbW1pdCBpbiB1bmEgY29kaWZpY2EgYWx0ZXJuYXRpdmEiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYzCittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgIkVzZWd1aSBpbCBkdW1wIGRlaSBjb250cmFzc2VnbmkgaW4gcXVlc3RvIGZpbGUiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY1Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICJJbXBvcnRhIGkgY29udHJhc3NlZ25pIGRhIHF1ZXN0byBmaWxlIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSBpZiBpdCBleGlzdHMiCittc2dzdHIgIkltcG9ydGEgaSBjb250cmFzc2VnbmkgZGEgcXVlc3RvIGZpbGUgc2UgZXNpc3RlIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3MQorbXNnaWQgIkZha2UgYSB0YWdnZXIgd2hlbiB0YWdzIGxhY2sgb25lIgorbXNnc3RyICJVc2EgdW4gdGFnZ2VyIGZhbHNvIHNlIGkgdGFnIG5vbiBuZSBoYW5ubyB1bm8iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTczCittc2dpZCAiT3V0cHV0IGZ1bGwgdHJlZSBmb3IgZWFjaCBjb21taXQiCittc2dzdHIgIlZpc3VhbGl6emEgaW4gb3V0cHV0IGwnYWxiZXJvIGNvbXBsZXRvIHBlciBvZ25pIGNvbW1pdCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzUKK21zZ2lkICJVc2UgdGhlIGRvbmUgZmVhdHVyZSB0byB0ZXJtaW5hdGUgdGhlIHN0cmVhbSIKK21zZ3N0ciAiVXNhIGxhIGZ1bnppb25hbGl0w6AgXCJmYXR0b1wiIHBlciB0ZXJtaW5hcmUgaWwgZmx1c3NvIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NgorbXNnaWQgIlNraXAgb3V0cHV0IG9mIGJsb2IgZGF0YSIKK21zZ3N0ciAiT21ldHRpIGwnb3V0cHV0IGRlaSBkYXRpIGRlaSBibG9iIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NyBidWlsdGluL2xvZy5jOjE3MDUKK21zZ2lkICJyZWZzcGVjIgorbXNnc3RyICJzcGVjaWZpY2F0b3JlIHJpZmVyaW1lbnRvIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OAorbXNnaWQgIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIKK21zZ3N0ciAiQXBwbGljYSBsbyBzcGVjaWZpY2F0b3JlIHJpZmVyaW1lbnRvIGFpIHJpZmVyaW1lbnRpIGVzcG9ydGF0aSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzkKK21zZ2lkICJhbm9ueW1pemUgb3V0cHV0IgorbXNnc3RyICJyZW5kaSBhbm9uaW1vIGwnb3V0cHV0IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MQorbXNnaWQgIlJlZmVyZW5jZSBwYXJlbnRzIHdoaWNoIGFyZSBub3QgaW4gZmFzdC1leHBvcnQgc3RyZWFtIGJ5IG9iamVjdCBpZCIKK21zZ3N0ciAiIgorIkZhaSByaWZlcmltZW50byBhaSBnZW5pdG9yaSBub24gbmVsIGZsdXNzbyBmYXN0LWV4cG9ydCB0cmFtaXRlIGwnSUQgb2dnZXR0byIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODMKK21zZ2lkICJTaG93IG9yaWdpbmFsIG9iamVjdCBpZHMgb2YgYmxvYnMvY29tbWl0cyIKK21zZ3N0ciAiVmlzdWFsaXp6YSBnbGkgSUQgb2dnZXR0byBvcmlnaW5hcmkgZGVpIGJsb2IvY29tbWl0IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4NQorbXNnaWQgIkxhYmVsIHRhZ3Mgd2l0aCBtYXJrIGlkcyIKK21zZ3N0ciAiRXRpY2hldHRhIGkgdGFnIGNvbiBJRCBjb250cmFzc2Vnbm8iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMjIwCittc2dpZCAiQ2Fubm90IHBhc3MgYm90aCAtLWltcG9ydC1tYXJrcyBhbmQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZm9ybmlyZSBlbnRyYW1iZSBsZSBvcHppb25pIC0taW1wb3J0LW1hcmtzIGUgLS1pbXBvcnQtbWFya3MtaWYtIgorImV4aXN0cyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM0Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgZmV0Y2ggWzxvcHppb25pPl0gWzxyZXBvc2l0b3J5PiBbPHNwZWNpZmljYXRvcmUgcmlmZXJpbWVudG8+Li4uXV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNQorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IgorbXNnc3RyICJnaXQgZmV0Y2ggWzxvcHppb25pPl0gPGdydXBwbz4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNgorbXNnaWQgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wemlvbmk+XSBbKDxyZXBvc2l0b3J5PiB8IDxncnVwcG8+KS4uLl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNworbXNnaWQgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tYWxsIFs8b3B6aW9uaT5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2Cittc2dpZCAiZmV0Y2gucGFyYWxsZWwgY2Fubm90IGJlIG5lZ2F0aXZlIgorbXNnc3RyICJmZXRjaC5wYXJhbGxlbCBub24gcHXDsiBlc3NlcmUgbmVnYXRpdm8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzkgYnVpbHRpbi9wdWxsLmM6MTg0Cittc2dpZCAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAiZXNlZ3VpIGlsIGZldGNoIGRhIHR1dHRpIGkgcmVtb3RpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQxIGJ1aWx0aW4vcHVsbC5jOjIyOAorbXNnaWQgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvZmV0Y2giCittc2dzdHIgImltcG9zdGEgbCd1cHN0cmVhbSBwZXIgZ2l0IHB1bGwvZmV0Y2giCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMgYnVpbHRpbi9wdWxsLmM6MTg3Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICJhZ2dpdW5naSBpIGRhdGkgYSAuZ2l0L0ZFVENIX0hFQUQgYW56aWNow6kgc292cmFzY3JpdmVybGkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDUgYnVpbHRpbi9wdWxsLmM6MTkwCittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICJwZXJjb3JzbyBpbiBjdWkgY2FyaWNhcmUgaWwgcGFjayBzdWwgcmVtb3RvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ2Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIHJlZmVyZW5jZSIKK21zZ3N0ciAiZm9yemEgbGEgc292cmFzY3JpdHR1cmEgZGVsIHJpZmVyaW1lbnRvIGxvY2FsZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0OAorbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAiZXNlZ3VpIGlsIGZldGNoIGRhIHBpw7kgcmVtb3RpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUwIGJ1aWx0aW4vcHVsbC5jOjE5NAorbXNnaWQgImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgImVzZWd1aSBpbCBmZXRjaCBkaSB0dXR0aSBpIHRhZyBlIGRlZ2xpIG9nZ2V0dGkgYXNzb2NpYXRpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUyCittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICJub24gZXNlZ3VpcmUgaWwgZmV0Y2ggZGkgYWxjdW4gdGFnICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU0Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgZmV0Y2hlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAibnVtZXJvIGRpIHNvdHRvbW9kdWxpIHJlY3VwZXJhdGkgaW4gcGFyYWxsZWxvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2IGJ1aWx0aW4vcHVsbC5jOjE5NworbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICIiCisiZWxpbWluYSBpIGJyYW5jaCBjaGUgbmUgdHJhY2NpYW5vIHVubyByZW1vdG8gbWEgbm9uIHBpw7kgcHJlc2VudGkgc3VsIHJlbW90byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OAorbXNnaWQgInBydW5lIGxvY2FsIHRhZ3Mgbm8gbG9uZ2VyIG9uIHJlbW90ZSBhbmQgY2xvYmJlciBjaGFuZ2VkIHRhZ3MiCittc2dzdHIgIiIKKyJlbGltaW5hIGkgdGFnIGxvY2FsaSBub24gcGnDuSBwcmVzZW50aSBzdWwgcmVtb3RvIGUgc292cmFzY3JpdmkgaSB0YWcgIgorIm1vZGlmaWNhdGkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTkgYnVpbHRpbi9mZXRjaC5jOjE4MiBidWlsdGluL3B1bGwuYzoxMjEKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgImEgcmljaGllc3RhIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYwCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiY29udHJvbGxhIGlsIHJlY3VwZXJvIHJpY29yc2l2byBkZWkgc290dG9tb2R1bGkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9wdWxsLmM6MjA1Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgIm1hbnRpZW5pIGlsIHBhY2sgc2NhcmljYXRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY2Cittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgImNvbnNlbnRpIGwnYWdnaW9ybmFtZW50byBkZWwgcmlmZXJpbWVudG8gSEVBRCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2OSBidWlsdGluL2ZldGNoLmM6MTc1IGJ1aWx0aW4vcHVsbC5jOjIwOAorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiCittc2dzdHIgImF1bWVudGEgbGEgcHJvZm9uZGl0w6AgZGVsbGEgY3Jvbm9sb2dpYSBkaSB1biBjbG9uZSBzaGFsbG93IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcxCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyByZXBvc2l0b3J5IGJhc2VkIG9uIHRpbWUiCittc2dzdHIgIiIKKyJhdW1lbnRhIGxhIHByb2ZvbmRpdMOgIGRlbGxhIGNyb25vbG9naWEgZGkgdW4gY2xvbmUgc2hhbGxvdyBpbiBiYXNlIGFsIHRlbXBvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3IGJ1aWx0aW4vcHVsbC5jOjIxMQorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICJjb252ZXJ0aSBpbiB1biByZXBvc2l0b3J5IGNvbXBsZXRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwCittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAiYW50ZXBvbmkgcXVlc3RvIHByZWZpc3NvIGFsbCdvdXRwdXQgZGVsIHBlcmNvcnNvIGRlbCBzb3R0b21vZHVsbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MwogbXNnaWQgIiIKLSJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCisiZGVmYXVsdCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKGxvd2VyIHByaW9yaXR5IHRoYW4gY29uZmlnICIKKyJmaWxlcykiCittc2dzdHIgIiIKKyJpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEgcGVyIGlsIHJlY3VwZXJvIHJpY29yc2l2byBkZWkgc290dG9tb2R1bGkgKGEgIgorInByaW9yaXTDoCBtaW5vcmUgcmlzcGV0dG8gYWkgZmlsZSBkaSBjb25maWd1cmF6aW9uZSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODcgYnVpbHRpbi9wdWxsLmM6MjE0Cittc2dpZCAiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IgorbXNnc3RyICJhY2NldHRhIGkgcmlmZXJpbWVudGkgY2hlIGFnZ2lvcm5hbm8gLmdpdC9zaGFsbG93IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg4IGJ1aWx0aW4vcHVsbC5jOjIxNgorbXNnaWQgInJlZm1hcCIKK21zZ3N0ciAibWFwcGEgcmlmZXJpbWVudGkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODkgYnVpbHRpbi9wdWxsLmM6MjE3Cittc2dpZCAic3BlY2lmeSBmZXRjaCByZWZtYXAiCittc2dzdHIgInNwZWNpZmljYSBsYSBtYXBwYSBkZWkgcmlmZXJpbWVudGkgcGVyIGlsIGZldGNoIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk2Cittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgInNlZ25hbGEgY2hlIGFiYmlhbW8gc29sbyBvZ2dldHRpIHJhZ2dpdW5naWJpbGkgZGEgcXVlc3Qnb2dnZXR0byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5OQorbXNnaWQgInJ1biAnZ2MgLS1hdXRvJyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiZXNlZ3VpICdnYyAtLWF1dG8nIGRvcG8gaWwgZmV0Y2giCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDEgYnVpbHRpbi9wdWxsLmM6MjI2Cittc2dpZCAiY2hlY2sgZm9yIGZvcmNlZC11cGRhdGVzIG9uIGFsbCB1cGRhdGVkIGJyYW5jaGVzIgorbXNnc3RyICJjb250cm9sbGEgYWdnaW9ybmFtZW50aSBmb3J6YXRpIHN1IHR1dHRpIGkgYnJhbmNoIGFnZ2lvcm5hdGkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDMKK21zZ2lkICJ3cml0ZSB0aGUgY29tbWl0LWdyYXBoIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJzY3JpdmkgaWwgZ3JhZm8gZGVpIGNvbW1pdCBkb3BvIGlsIGZldGNoIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEzCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgbCdIRUFEIGRlbCByaWZlcmltZW50byByZW1vdG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlndXJhdGlvbiBmZXRjaC5vdXRwdXQgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAlcyIKK21zZ3N0ciAiaWwgdmFsb3JlIGRlbGwnb3B6aW9uZSBmZXRjaC5vdXRwdXQgY29udGllbmUgaWwgdmFsb3JlIG5vbiB2YWxpZG8gJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAib2dnZXR0byAlcyBub24gdHJvdmF0byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1NQorbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW2FnZ2lvcm5hdG9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY4IGJ1aWx0aW4vZmV0Y2guYzo3ODQgYnVpbHRpbi9mZXRjaC5jOjg1NgorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIltyaWZpdXRhdG9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY5Cittc2dpZCAiY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2giCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGZldGNoIG5lbCBicmFuY2ggY29ycmVudGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzkKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIlt0YWcgYWdnaW9ybmF0b10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODAgYnVpbHRpbi9mZXRjaC5jOjgxNyBidWlsdGluL2ZldGNoLmM6ODM5CisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2lvcm5hcmUgaWwgcmlmZXJpbWVudG8gbG9jYWxlIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzg0Cittc2dpZCAid291bGQgY2xvYmJlciBleGlzdGluZyB0YWciCittc2dzdHIgInNvdnJhc2NyaXZlcmViYmUgaWwgdGFnIGVzaXN0ZW50ZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwNgorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW251b3ZvIHRhZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDkKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIltudW92byBicmFuY2hdIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODEyCittc2dpZCAiW25ldyByZWZdIgorbXNnc3RyICJbbnVvdm8gcmlmZXJpbWVudG9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAiYWdnaW9ybmFtZW50byBmb3J6YXRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAibm9uIGZhc3QgZm9yd2FyZCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg3NworbXNnaWQgIiIKKyJGZXRjaCBub3JtYWxseSBpbmRpY2F0ZXMgd2hpY2ggYnJhbmNoZXMgaGFkIGEgZm9yY2VkIHVwZGF0ZSxcbiIKKyJidXQgdGhhdCBjaGVjayBoYXMgYmVlbiBkaXNhYmxlZC4gVG8gcmUtZW5hYmxlLCB1c2UgJy0tc2hvdy1mb3JjZWQtdXBkYXRlcydcbiIKKyJmbGFnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJy4iCittc2dzdHIgIiIKKyJJbCBmZXRjaCBub3JtYWxtZW50ZSBpbmRpY2EgcXVhbGkgYnJhbmNoIHNpYW5vIHN0YXRpIHNvdHRvcG9zdGkgYWRcbiIKKyJhZ2dpb3JuYW1lbnRvIGZvcnphdG8sIG1hIHRhbGUgY29udHJvbGxvIMOoIHN0YXRvIGRpc2FiaWxpdGF0by4gUGVyXG4iCisicmlhYmlsaXRhcmxvLCB1c2EgbCdvcHppb25lICctLXNob3ctZm9yY2VkLXVwZGF0ZXMnIG8gZXNlZ3VpICdnaXQgY29uZmlnXG4iCisiZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgdHJ1ZScuIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjaGVjayBmb3JjZWQgdXBkYXRlcy4gWW91IGNhbiB1c2VcbiIKKyInLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgIgorImZhbHNlJ1xuIgorIiB0byBhdm9pZCB0aGlzIGNoZWNrLlxuIgorbXNnc3RyICIiCisiU29ubyBzdGF0aSByaWNoaWVzdGkgJS4yZiBzZWNvbmRpIHBlciBjb250cm9sbGFyZSBsYSBwcmVzZW56YSBkaSBldmVudHVhbGlcbiIKKyJhZ2dpb3JuYW1lbnRpIGZvcnphdGkuIFB1b2kgdXNhcmUgJy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcycgbyBlc2VndWlyZVxuIgorIidnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIGZhbHNlJyBwZXIgb21ldHRlcmUgcXVlc3RvIGNvbnRyb2xsby5cbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzIG5vbiBoYSBpbnZpYXRvIHR1dHRpIGdsaSBvZ2dldHRpIG5lY2Vzc2FyaVxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTQxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgIiVzIHJpZml1dGF0byBwZXJjaMOpIG5vbiDDqCBjb25zZW50aXRvIGFnZ2lvcm5hcmUgcmFkaWNpIHNoYWxsb3ciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDI2IGJ1aWx0aW4vZmV0Y2guYzoxMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gJS4qc1xuIgorbXNnc3RyICJEYSAlLipzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKyJub24gw6ggc3RhdG8gcG9zc2liaWxlIGFnZ2lvcm5hcmUgYWxjdW5pIHJpZmVyaW1lbnRpIGxvY2FsaTsgcHJvdmEgYWQgIgorImVzZWd1aXJlXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyBwZXIgcmltdW92ZXJlIG9nbmkgYnJhbmNoIHZlY2NoaW8gaW4gY29uZmxpdHRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMgZGl2ZW50ZXLDoCBwZW5kZW50ZSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIMOoIGRpdmVudGF0byBwZW5kZW50ZSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTY3Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICJbZWxpbWluYXRvXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNjggYnVpbHRpbi9yZW1vdGUuYzoxMTEyCittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIobmVzc3VubykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorIk1pIHJpZml1dG8gZGkgZXNlZ3VpcmUgaWwgZmV0Y2ggbmVsIGJyYW5jaCBjb3JyZW50ZSAlcyBkaSB1biByZXBvc2l0b3J5IG5vbiAiCisiYmFyZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiTCdvcHppb25lIFwiJXNcIiBjb24gaWwgdmFsb3JlIFwiJXNcIiBub24gw6ggdmFsaWRhIHBlciAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICJMJ29wemlvbmUgXCIlc1wiIMOoIGlnbm9yYXRhIHBlciAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQyMQorbXNnaWQgIm11bHRpcGxlIGJyYW5jaGVzIGRldGVjdGVkLCBpbmNvbXBhdGlibGUgd2l0aCAtLXNldC11cHN0cmVhbSIKK21zZ3N0ciAicmlsZXZhdGkgYnJhbmNoIG11bHRpcGxpLCBzdGF0byBpbmNvbXBhdGliaWxlIGNvbiAtLXNldC11cHN0cmVhbSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzYKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAibm9uIGltcG9zdG8gbCd1cHN0cmVhbSBwZXIgdW4gYnJhbmNoIHJlbW90byBjaGUgbmUgdHJhY2NpYSB1bm8gcmVtb3RvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzOAorbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSB0YWciCittc2dzdHIgIm5vbiBpbXBvc3RvIGwndXBzdHJlYW0gcGVyIHVuIHRhZyByZW1vdG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDQwCittc2dpZCAidW5rbm93biBicmFuY2ggdHlwZSIKK21zZ3N0ciAidGlwbyBicmFuY2ggc2Nvbm9zY2l1dG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDQyCittc2dpZCAiIgorIm5vIHNvdXJjZSBicmFuY2ggZm91bmQuXG4iCisieW91IG5lZWQgdG8gc3BlY2lmeSBleGFjdGx5IG9uZSBicmFuY2ggd2l0aCB0aGUgLS1zZXQtdXBzdHJlYW0gb3B0aW9uLiIKK21zZ3N0ciAiIgorIm5lc3N1biBicmFuY2ggc29yZ2VudGUgdHJvdmF0by5cbiIKKyJkZXZpIHNwZWNpZmljYXJlIGVzYXR0YW1lbnRlIHVuIGJyYW5jaCBjb24gbCdvcHppb25lIC0tc2V0LXVwc3RyZWFtLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NjggYnVpbHRpbi9mZXRjaC5jOjE2MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiUmVjdXBlcm8gZGkgJXMgaW4gY29yc29cbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NzggYnVpbHRpbi9mZXRjaC5jOjE2MzMgYnVpbHRpbi9yZW1vdGUuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSByZWN1cGVyYXJlICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmV0Y2ggJyVzJyAoZXhpdCBjb2RlOiAlZClcbiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmVjdXBlcmFyZSAnJXMnIChjb2RpY2UgZGkgdXNjaXRhOiAlZClcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2OTMKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIk5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byBhbGN1biByZXBvc2l0b3J5IHJlbW90by4gU3BlY2lmaWNhIHVuIFVSTCBvIGlsXG4iCisibm9tZSBkaSB1biByZW1vdG8gZGEgY3VpIGRvdnJhbm5vIGVzc2VyZSByZWN1cGVyYXRlIGxlIG51b3ZlIHJldmlzaW9uaS4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzMwCittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAiRGV2aSBzcGVjaWZpY2FyZSBpbCBub21lIGRpIHVuIHRhZy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzgwCittc2dpZCAiTmVnYXRpdmUgZGVwdGggaW4gLS1kZWVwZW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTGUgcHJvZm9uZGl0w6AgbmVnYXRpdmUgaW4gLS1kZWVwZW4gbm9uIHNvbm8gc3VwcG9ydGF0ZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODIKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICJsZSBvcHppb25pIC0tZGVlcGVuIGUgLS1kZXB0aCBzb25vIG11dHVhbG1lbnRlIGVzY2x1c2l2ZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODcKK21zZ2lkICItLWRlcHRoIGFuZCAtLXVuc2hhbGxvdyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLS1kZXB0aCBlIC0tdW5zaGFsbG93IG5vbiBwb3Nzb25vIGVzc2VyZSB1c2F0aSBpbnNpZW1lLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODkKK21zZ2lkICItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS11bnNoYWxsb3cgc3UgdW4gcmVwb3NpdG9yeSBjb21wbGV0byBub24gaGEgc2Vuc28iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODA1Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiCittc2dzdHIgImZldGNoIC0tYWxsIG5vbiByaWNoaWVkZSB1biByZXBvc2l0b3J5IGNvbWUgYXJnb21lbnRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwNworbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwgbm9uIGhhIHNlbnNvIGNvbiBkZWdsaSBzcGVjaWZpY2F0b3JpIHJpZmVyaW1lbnRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICJSZW1vdG8gbyBncnVwcG8gcmVtb3RpIG5vbiBlc2lzdGVudGU6ICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgyMworbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorIlJlY3VwZXJhcmUgdW4gZ3J1cHBvIGUgc3BlY2lmaWNhcmUgZ2xpIHNwZWNpZmljYXRvcmkgcmlmZXJpbWVudG8gbm9uIGhhIHNlbnNvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg0MQorbXNnaWQgIiIKKyItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSBjb25maWd1cmVkIGluIGV4dGVuc2lvbnMuIgorInBhcnRpYWxjbG9uZSIKK21zZ3N0ciAiIgorIi0tZmlsdGVyIHB1w7IgZXNzZXJlIHVzYXRvIHNvbG8gY29uIGlsIHJlbW90byBjb25maWd1cmF0byBuZWxsZSBlc3RlbnNpb25pLiIKKyJwYXJ0aWFsY2xvbmUiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjE4Cittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2dpbz5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MQorbXNnaWQgInBvcHVsYXRlIGxvZyB3aXRoIGF0IG1vc3QgPG4+IGVudHJpZXMgZnJvbSBzaG9ydGxvZyIKK21zZ3N0ciAicG9wb2xhIGlsIHJlZ2lzdHJvIGNvbiBhbCBwacO5IDxuPiB2b2NpIGRlbCByZWdpc3RybyBicmV2ZSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc0Cittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiYWxpYXMgZGkgLS1sb2cgKGRlcHJlY2F0bykiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NworbXNnaWQgInRleHQiCittc2dzdHIgInRlc3RvIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzgKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgInVzYSA8dGVzdG8+IGNvbWUgc3RyaW5nYSBpbml6aWFsZSBkZWwgbWVzc2FnZ2lvIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzkKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAiZmlsZSBkYSBjdWkgbGVnZ2VyZSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMAorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHppb25pPl0gWzxwYXR0ZXJuPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTEKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDxvZ2dldHRvPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTIKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbW1pdD5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMworbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjgKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAiIgorInJhY2NoaXVkaSBpIHNlZ25hcG9zdG8gZnJhIHZpcmdvbGV0dGUgaW4gbW9kbyBkYSBwb3RlcmxpIHVzYXJlIGluIHVuYSBzaGVsbCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAiIgorInJhY2NoaXVkaSBpIHNlZ25hcG9zdG8gZnJhIHZpcmdvbGV0dGUgaW4gbW9kbyBkYSBwb3RlcmxpIHVzYXJlIGNvbiBQZXJsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMyCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgIiIKKyJyYWNjaGl1ZGkgaSBzZWduYXBvc3RvIGZyYSB2aXJnb2xldHRlIGluIG1vZG8gZGEgcG90ZXJsaSB1c2FyZSBjb24gUHl0aG9uIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM0Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBUY2wiCittc2dzdHIgInJhY2NoaXVkaSBpIHNlZ25hcG9zdG8gZnJhIHZpcmdvbGV0dGUgaW4gbW9kbyBkYSBwb3RlcmxpIHVzYXJlIGNvbiBUY2wiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzcKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAidmlzdWFsaXp6YSBzb2xvIDxuPiByaWZlcmltZW50aSBjb3JyaXNwb25kZW50aSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOSBidWlsdGluL3RhZy5jOjQzOQorbXNnaWQgInJlc3BlY3QgZm9ybWF0IGNvbG9ycyIKK21zZ3N0ciAicmlzcGV0dGEgbGUgc3RyaW5naGUgZGkgZm9ybWF0byBwZXIgaSBjb2xvcmkiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggcG9pbnRzIGF0IHRoZSBnaXZlbiBvYmplY3QiCittc2dzdHIgInN0YW1wYSBzb2xvIGkgcmlmZXJpbWVudGkgY2hlIHB1bnRhbm8gYWxsJ29nZ2V0dG8gZGF0byIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NAorbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgInN0YW1wYSBzb2xvIGkgcmlmZXJpbWVudGkgc290dG9wb3N0aSBhIG1lcmdlIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ1Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgInN0YW1wYSBzb2xvIGkgcmlmZXJpbWVudGkgbm9uIHNvdHRvcG9zdGkgYSBtZXJnZSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgInN0YW1wYSBzb2xvIGkgcmlmZXJpbWVudGkgY29udGVuZW50aSBpbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDcKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJzdGFtcGEgc29sbyBpIHJpZmVyaW1lbnRpIGNoZSBub24gY29udGVuZ29ubyBpbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY4IGJ1aWx0aW4vZnNjay5jOjE0NyBidWlsdGluL2ZzY2suYzoxNDgKK21zZ2lkICJ1bmtub3duIgorbXNnc3RyICJzY29ub3NjaXV0byIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTAwIGJ1aWx0aW4vZnNjay5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiAlcyAlczogJXMiCittc2dzdHIgImVycm9yZSBpbiAlcyAlczogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIHdhcm5pbmcgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmcgaW4gJXMgJXM6ICVzIgorbXNnc3RyICJhdnZpc28gaW4gJXMgJXM6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoxNDMgYnVpbHRpbi9mc2NrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBsaW5rIGZyb20gJTdzICVzIgorbXNnc3RyICJjb2xsZWdhbWVudG8gcm90dG8gZGEgJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoxNTUKK21zZ2lkICJ3cm9uZyBvYmplY3QgdHlwZSBpbiBsaW5rIgorbXNnc3RyICJ0aXBvIG9nZ2V0dG8gZXJyYXRvIG5lbCBjb2xsZWdhbWVudG8iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgIHRvICU3cyAlcyIKK21zZ3N0ciAiIgorImNvbGxlZ2FtZW50byByb3R0byBkYSAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgICAgICAgYSAlN3MgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzICVzIgorbXNnc3RyICIlcyBtYW5jYW50ZSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVhY2hhYmxlICVzICVzIgorbXNnc3RyICIlcyBub24gcmFnZ2l1bmdpYmlsZSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImRhbmdsaW5nICVzICVzIgorbXNnc3RyICIlcyBwZW5kZW50ZSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzM5Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsb3N0LWZvdW5kIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdGVybWluYXJlICclcyciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyIKK21zZ3N0ciAiQ29udHJvbGxvIGRpICVzIGluIGNvcnNvIgorCisjOiBidWlsdGluL2ZzY2suYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5ICglZCBvYmplY3RzKSIKK21zZ3N0ciAiQ29udHJvbGxvIGNvbm5lc3Npb25lIGluIGNvcnNvICglZCBvZ2dldHRpKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzICVzIgorbXNnc3RyICJDb250cm9sbG8gZGkgJXMgaW4gY29yc28gJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyOQorbXNnaWQgImJyb2tlbiBsaW5rcyIKK21zZ3N0ciAiY29sbGVnYW1lbnRpIHJvdHRpIgorCisjOiBidWlsdGluL2ZzY2suYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCAlcyIKK21zZ3N0ciAicmFkaWNlICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnZ2VkICVzICVzICglcykgaW4gJXMiCittc2dzdHIgImVzZWd1aXRvIHRhZyBkaSAlcyAlcyAoJXMpIGluICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3NpbmciCittc2dzdHIgIiVzOiBvZ2dldHRvIGNvcnJvdHRvIG8gbWFuY2FudGUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCByZWZsb2cgZW50cnkgJXMiCittc2dzdHIgIiVzOiB2b2NlIHJlZ2lzdHJvIHJpZmVyaW1lbnRpIG5vbiB2YWxpZGE6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVmbG9nICVzLT4lcyIKK21zZ3N0ciAiQ29udHJvbGxvIHJlZ2lzdHJvIHJpZmVyaW1lbnRpICVzLT4lcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciAlcyIKK21zZ3N0ciAiJXM6IHB1bnRhdG9yZSBTSEExIG5vbiB2YWxpZG86ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiJXM6IG5vbiDDqCB1biBjb21taXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYwOQorbXNnaWQgIm5vdGljZTogTm8gZGVmYXVsdCByZWZlcmVuY2VzIgorbXNnc3RyICJhdnZpc286IG5lc3N1biByaWZlcmltZW50byBwcmVkZWZpbml0byIKKworIzogYnVpbHRpbi9mc2NrLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiJXM6IG9nZ2V0dG8gY29ycm90dG8gbyBtYW5jYW50ZTogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICVzIgorbXNnc3RyICIlczogaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ29nZ2V0dG86ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNoYTEgZmlsZTogJXMiCittc2dzdHIgImZpbGUgU0hBMSBub24gdmFsaWRvOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjcyCittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yeSIKK21zZ3N0ciAiQ29udHJvbGxvIGRpcmVjdG9yeSBvZ2dldHRpIGluIGNvcnNvIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzUKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgIkNvbnRyb2xsbyBkaXJlY3Rvcnkgb2dnZXR0aSBpbiBjb3JzbyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIGxpbmsiCittc2dzdHIgIkNvbnRyb2xsbyBjb2xsZWdhbWVudG8gJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY5NSBidWlsdGluL2luZGV4LXBhY2suYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyIKK21zZ3N0ciAiJXMgbm9uIHZhbGlkbyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyB0byBzb21ldGhpbmcgc3RyYW5nZSAoJXMpIgorbXNnc3RyICIlcyBwdW50YSBhIHF1YWxjb3NhIGRpIHN0cmFubyAoJXMpIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRldGFjaGVkIEhFQUQgcG9pbnRzIGF0IG5vdGhpbmciCittc2dzdHIgIiVzOiBsJ0hFQUQgc2NvbGxlZ2F0byBub24gcHVudGEgYSBuaWVudGUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RpY2U6ICVzIHBvaW50cyB0byBhbiB1bmJvcm4gYnJhbmNoICglcykiCittc2dzdHIgImF2dmlzbzogJXMgcHVudGEgYSB1biBicmFuY2ggbm9uIG5hdG8gKCVzKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI0Cittc2dpZCAiQ2hlY2tpbmcgY2FjaGUgdHJlZSIKK21zZ3N0ciAiQ29udHJvbGxvIGNhY2hlIGFsYmVybyBpbiBjb3JzbyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciBpbiBjYWNoZS10cmVlIgorbXNnc3RyICIlczogcHVudGF0b3JlIFNIQTEgbm9uIHZhbGlkbyBuZWxsYSBjYWNoZSBhbGJlcmkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjczOAorbXNnaWQgIm5vbi10cmVlIGluIGNhY2hlLXRyZWUiCittc2dzdHIgIm9nZ2V0dG8gbm9uIGFsYmVybyBuZWxsYSBjYWNoZSBhbGJlcmkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc2OQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs8b3B6aW9uaT5dIFs8b2dnZXR0bz4uLi5dIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzUKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgInZpc3VhbGl6emEgb2dnZXR0aSBub24gcmFnZ2l1bmdpYmlsaSIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc2Cittc2dpZCAic2hvdyBkYW5nbGluZyBvYmplY3RzIgorbXNnc3RyICJ2aXN1YWxpenphIG9nZ2V0dGkgcGVuZGVudGkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NworbXNnaWQgInJlcG9ydCB0YWdzIgorbXNnc3RyICJzZWduYWxhIGkgdGFnIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzgKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAic2VnbmFsYSBpIG5vZGkgcmFkaWNlIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzkKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAicmVuZGkgZ2xpIG9nZ2V0dGkgaW5kaWNlIG5vZGkgaGVhZCIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgwCittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICJyZW5kaSBpIHJlZ2lzdHJpIGRlaSByaWZlcmltZW50aSBub2RpIGhlYWQgKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MQorbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICJjb25zaWRlcmEgYW5jaGUgaSBwYWNrIGUgZ2xpIG9nZ2V0dGkgYWx0ZXJuYXRpdmkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MgorbXNnaWQgImNoZWNrIG9ubHkgY29ubmVjdGl2aXR5IgorbXNnc3RyICJjb250cm9sbGEgc29sbyBsYSBjb25uZXNzaW9uZSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgzCittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICJhYmlsaXRhIGNvbnRyb2xsaSBwacO5IHJlc3RyaXR0aXZpIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODUKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAic2NyaXZpIG9nZ2V0dGkgcGVuZGVudGkgaW4gLmdpdC9sb3N0LWZvdW5kIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODYgYnVpbHRpbi9wcnVuZS5jOjEzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgInZpc3VhbGl6emEgbCdhdmFuemFtZW50byIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg3Cittc2dpZCAic2hvdyB2ZXJib3NlIG5hbWVzIGZvciByZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAidmlzdWFsaXp6YSBub21pIGRldHRhZ2xpYXRpIHBlciBnbGkgb2dnZXR0aSByYWdnaXVuZ2liaWxpIgorCisjOiBidWlsdGluL2ZzY2suYzo4NDYgYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI1Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiQ29udHJvbGxvIG9nZ2V0dGkgaW4gY29yc28iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IG1pc3NpbmciCittc2dzdHIgIiVzOiBvZ2dldHRvIG1hbmNhbnRlIgorCisjOiBidWlsdGluL2ZzY2suYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXI6IGV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIgorbXNnc3RyICJwYXJhbWV0cm8gbm9uIHZhbGlkbzogYXR0ZXNvIFNIQTEsIHByZXNlbnRlICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzozNQorbXNnaWQgImdpdCBnYyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGdjIFs8b3B6aW9uaT5dIgorCisjOiBidWlsdGluL2djLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZzdGF0ICVzOiAlcyIKK21zZ3N0ciAiZnN0YXQgZGkgJXMgbm9uIHJpdXNjaXRvOiAlcyIKKworIzogYnVpbHRpbi9nYy5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJyVzJyB2YWx1ZSAnJXMnIgorbXNnc3RyICJhbmFsaXNpIGRlbGwnb3B6aW9uZSAnJXMnIGNvbiB2YWxvcmUgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0NzUgYnVpbHRpbi9pbml0LWRiLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbG8gc3RhdCBkaSAnJXMnIgorCisjOiBidWlsdGluL2djLmM6NDg0IGJ1aWx0aW4vbm90ZXMuYzoyNDAgYnVpbHRpbi90YWcuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSAnJXMnIgorCisjOiBidWlsdGluL2djLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbGFzdCBnYyBydW4gcmVwb3J0ZWQgdGhlIGZvbGxvd2luZy4gUGxlYXNlIGNvcnJlY3QgdGhlIHJvb3QgY2F1c2VcbiIKKyJhbmQgcmVtb3ZlICVzLlxuIgorIkF1dG9tYXRpYyBjbGVhbnVwIHdpbGwgbm90IGJlIHBlcmZvcm1lZCB1bnRpbCB0aGUgZmlsZSBpcyByZW1vdmVkLlxuIgogIlxuIgogIiVzIgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgYXZ2aWFyZSBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpOlxuIgorIkwndWx0aW1hIGVzZWN1emlvbmUgZGkgZ2MgaGEgc2VnbmFsYXRvIHF1YW50byBzZWd1ZS4gQ29ycmVnZ2kgbGEgY2F1c2FcbiIKKyJhbGxhIHJhZGljZSBlZCBlbGltaW5hICVzLlxuIgorIkwnb3BlcmF6aW9uZSBkaSBwdWxpemlhIGF1dG9tYXRpY2Egbm9uIHNhcsOgIGVzZWd1aXRhIGZpbm8gYWxsJ2VsaW1pbmF6aW9uZVxuIgorImRlbCBmaWxlLlxuIgogIlxuIgogIiVzIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozNDcKLW1zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCi1tc2dzdHIgIkF2dmlvIGRlbCBwcm9ncmFtbWEgcGVyIGxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkgaW4gY29yc28uLi4iCisjOiBidWlsdGluL2djLmM6NTM5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgImVsaW1pbmEgb2dnZXR0aSBub24gcmVmZXJlbnppYXRpIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozNzUgbGliL21lcmdldG9vbC50Y2w6MzgzCi1tc2dpZCAiTWVyZ2UgdG9vbCBmYWlsZWQuIgotbXNnc3RyICJSaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIG5vbiByaXVzY2l0YS4iCisjOiBidWlsdGluL2djLmM6NTQxCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICJzaWkgcGnDuSBhY2N1cmF0byAodGVtcGkgZGkgZXNlY3V6aW9uZSBtYWdnaW9yaSkiCiAKLSM6IGxpYi9vcHRpb24udGNsOjExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKKyM6IGJ1aWx0aW4vZ2MuYzo1NDIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICJhYmlsaXRhIG1vZGFsaXTDoCBnYXJiYWdlIGNvbGxlY3RvciBhdXRvbWF0aWNhIgorCisjOiBidWlsdGluL2djLmM6NTQ1Cittc2dpZCAiZm9yY2UgcnVubmluZyBnYyBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGdjIHJ1bm5pbmciCiBtc2dzdHIgIiIKLSJMYSBjb2RpZmljYSBkZWkgY2FyYXR0ZXJpICclcycgc3BlY2lmaWNhdGEgcGVyIHR1dHRpIGdsaSBhcmNoaXZpIG5vbiDDqCB2YWxpZGEiCisiZm9yemEgbCdlc2VjdXppb25lIGRlbCBnYXJiYWdlIGNvbGxlY3RvciBhbmNoZSBuZWwgY2FzbyBpbiBjdWkgdmUgbmUgIgorInBvdHJlYmJlIGVzc2VyZSB1biBhbHRybyBpbiBlc2VjdXppb25lIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgcmVwbyBlbmNvZGluZyAnJXMnIgorIzogYnVpbHRpbi9nYy5jOjU0OAorbXNnaWQgInJlcGFjayBhbGwgb3RoZXIgcGFja3MgZXhjZXB0IHRoZSBsYXJnZXN0IHBhY2siCiBtc2dzdHIgIiIKLSJMYSBjb2RpZmljYSBkZWkgY2FyYXR0ZXJpICclcycgc3BlY2lmaWNhdGEgcGVyIGwnYXJjaGl2aW8gYXR0dWFsZSAgbm9uIMOoICIKLSJ2YWxpZGEiCisiZXNlZ3VpIGlsIHJlcGFjayBkaSB0dXR0aSBnbGkgYWx0cmkgcGFjayBhZCBlY2NlemlvbmUgZGkgcXVlbGxvIHBpw7kgZ3JhbmRlIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxMTcKLW1zZ2lkICJSZXN0b3JlIERlZmF1bHRzIgotbXNnc3RyICJSaXByaXN0aW5hIHZhbG9yaSBwcmVkZWZpbml0aSIKKyM6IGJ1aWx0aW4vZ2MuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGdjLmxvZ2V4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiYW5hbGlzaSBkZWwgdmFsb3JlICVzIGRpIGdjLmxvZ2V4cGlyeSBub24gcml1c2NpdGEiCiAKLSM6IGxpYi9vcHRpb24udGNsOjEyMQotbXNnaWQgIlNhdmUiCi1tc2dzdHIgIlNhbHZhIgorIzogYnVpbHRpbi9nYy5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgcHJ1bmUgZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICJhbmFsaXNpIGRlbCB2YWxvcmUgJXMgcGVyIGxhIHNjYWRlbnphIGRlbGxlIGVsaW1pbmF6aW9uaSBub24gcml1c2NpdGEiCiAKLSM6IGxpYi9vcHRpb24udGNsOjEzMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIFJlcG9zaXRvcnkiCi1tc2dzdHIgIkFyY2hpdmlvIGRpICVzIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMzIKLW1zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgotbXNnc3RyICJUdXR0aSBnbGkgYXJjaGl2aSIKLQotIzogbGliL29wdGlvbi50Y2w6MTM4Ci1tc2dpZCAiVXNlciBOYW1lIgotbXNnc3RyICJOb21lIHV0ZW50ZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTM5Ci1tc2dpZCAiRW1haWwgQWRkcmVzcyIKLW1zZ3N0ciAiSW5kaXJpenpvIEVtYWlsIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDEKLW1zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKLW1zZ3N0ciAiUmllcGlsb2dvIG5lbGxlIHJldmlzaW9uaSBkaSBmdXNpb25lIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDIKLW1zZ2lkICJNZXJnZSBWZXJib3NpdHkiCi1tc2dzdHIgIlByb2xpc3NpdMOgIGRlbGxhIGZ1c2lvbmUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0MwotbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCi1tc2dzdHIgIk1vc3RyYSBzdGF0aXN0aWNoZSBkZWxsZSBkaWZmZXJlbnplIGRvcG8gbGEgZnVzaW9uZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ0Ci1tc2dpZCAiVXNlIE1lcmdlIFRvb2wiCi1tc2dzdHIgIlByb2dyYW1tYSBkYSB1dGlsaXp6YXJlIHBlciBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDYKLW1zZ2lkICJUcnVzdCBGaWxlIE1vZGlmaWNhdGlvbiBUaW1lc3RhbXBzIgotbXNnc3RyICJGaWRhdGkgZGVsbGUgZGF0ZSBkaSBtb2RpZmljYSBkZWkgZmlsZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ3Ci1tc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgorIzogYnVpbHRpbi9nYy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaW4gYmFja2dyb3VuZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKIG1zZ3N0ciAiIgotIkVmZmV0dHVhIHBvdGF0dXJhIGRlaSBkdXBsaWNhdGkgbG9jYWxpIGRpIHJhbWkgcmVtb3RpIGR1cmFudGUgaWwgcmVjdXBlcm8iCisiQ29tcHJpbW8gaWwgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIHBlciBvdHRlbmVyZSBsZSBtaWdsaW9yaSBwcmVzdGF6aW9uaS5cbiIKIAotIzogbGliL29wdGlvbi50Y2w6MTQ4Ci1tc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoZXMiCi1tc2dzdHIgIkFwcGFpYSBkdXBsaWNhdGkgbG9jYWxpIGRpIHJhbWkgcmVtb3RpIgorIzogYnVpbHRpbi9nYy5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIkNvbXByaW1vIGlsIHJlcG9zaXRvcnkgcGVyIG90dGVuZXJlIGxlIG1pZ2xpb3JpIHByZXN0YXppb25pLlxuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDkKLW1zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKLW1zZ3N0ciAiUmljZXJjYSBjb3BpZSBzb2xvIG5laSBmaWxlIG1vZGlmaWNhdGkiCisjOiBidWlsdGluL2djLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1hbnVhbCBob3VzZWtlZXBpbmcuXG4iCittc2dzdHIgIlZlZGkgXCJnaXQgaGVscCBnY1wiIHBlciBsZSBvcGVyYXppb25pIGRpIG1hbnV0ZW56aW9uZSBtYW51YWxpLlxuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTAKLW1zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKLW1zZ3N0ciAiTnVtZXJvIG1pbmltbyBkaSBsZXR0ZXJlIGNoZSBhdHRpdmFubyBsYSByaWNlcmNhIGRlbGxlIGNvcGllIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTEKLW1zZ2lkICJCbGFtZSBIaXN0b3J5IENvbnRleHQgUmFkaXVzIChkYXlzKSIKLW1zZ3N0ciAiR2lvcm5pIGRpIGNvbnRlc3RvIG5lbGxhIGNyb25vbG9naWEgZGVsbGUgYW5ub3RhemlvbmkiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MgotbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCi1tc2dzdHIgIk51bWVybyBkaSBsaW5lZSBkaSBjb250ZXN0byBuZWxsZSBkaWZmZXJlbnplIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTMKLW1zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgotbXNnc3RyICJMYXJnaGV6emEgZGVsIG1lc3NhZ2dpbyBkaSByZXZpc2lvbmUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1NAotbXNnaWQgIk5ldyBCcmFuY2ggTmFtZSBUZW1wbGF0ZSIKLW1zZ3N0ciAiTW9kZWxsbyBwZXIgaWwgbm9tZSBkaSB1biBudW92byByYW1vIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTUKLW1zZ2lkICJEZWZhdWx0IEZpbGUgQ29udGVudHMgRW5jb2RpbmciCi1tc2dzdHIgIkNvZGlmaWNhIHByZWRlZmluaXRhIHBlciBpbCBjb250ZW51dG8gZGVpIGZpbGUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjIwMwotbXNnaWQgIkNoYW5nZSIKLW1zZ3N0ciAiQ2FtYmlhIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyMzAKLW1zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKLW1zZ3N0ciAiTGluZ3VhIGRpemlvbmFyaW86IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyNTQKLW1zZ2lkICJDaGFuZ2UgRm9udCIKLW1zZ3N0ciAiQ2FtYmlhIGNhcmF0dGVyaSIKLQotIzogbGliL29wdGlvbi50Y2w6MjU4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hvb3NlICVzIgotbXNnc3RyICJTY2VnbGkgJXMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjI2NAotbXNnaWQgInB0LiIKLW1zZ3N0ciAicHQuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyNzgKLW1zZ2lkICJQcmVmZXJlbmNlcyIKLW1zZ3N0ciAiUHJlZmVyZW56ZSIKLQotIzogbGliL29wdGlvbi50Y2w6MzE0Ci1tc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgc2FsdmFyZSBjb21wbGV0YW1lbnRlIGxlIG9wemlvbmk6IgotCi0jOiBsaWIvcmVtb3RlLnRjbDoxNjMKLW1zZ2lkICJSZW1vdmUgUmVtb3RlIgotbXNnc3RyICJSaW11b3ZpIGFyY2hpdmlvIHJlbW90byIKLQotIzogbGliL3JlbW90ZS50Y2w6MTY4Ci1tc2dpZCAiUHJ1bmUgZnJvbSIKLW1zZ3N0ciAiRWZmZXR0dWEgcG90YXR1cmEgZGEiCi0KLSM6IGxpYi9yZW1vdGUudGNsOjE3MwotbXNnaWQgIkZldGNoIGZyb20iCi1tc2dzdHIgIlJlY3VwZXJhIGRhIgotCi0jOiBsaWIvcmVtb3RlLnRjbDoyMTUKLW1zZ2lkICJQdXNoIHRvIgotbXNnc3RyICJQcm9wYWdhIHZlcnNvIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTkKLW1zZ2lkICJBZGQgUmVtb3RlIgotbXNnc3RyICJBZ2dpdW5naSBhcmNoaXZpbyByZW1vdG8iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyNAotbXNnaWQgIkFkZCBOZXcgUmVtb3RlIgotbXNnc3RyICJBZ2dpdW5naSBudW92byBhcmNoaXZpbyByZW1vdG8iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyOCBsaWIvdG9vbHNfZGxnLnRjbDozNgotbXNnaWQgIkFkZCIKLW1zZ3N0ciAiQWdnaXVuZ2kiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDozNwotbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgotbXNnc3RyICJEZXR0YWdsaSBzdWxsJ2FyY2hpdmlvIHJlbW90byIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjUwCi1tc2dpZCAiTG9jYXRpb246IgotbXNnc3RyICJQb3NpemlvbmU6IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjIKLW1zZ2lkICJGdXJ0aGVyIEFjdGlvbiIKLW1zZ3N0ciAiQWx0cmEgYXppb25lIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjUKLW1zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKLW1zZ3N0ciAiUmVjdXBlcmEgc3ViaXRvIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzEKLW1zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgotbXNnc3RyICJJbml6aWFsaXp6YSBsJ2FyY2hpdmlvIHJlbW90byBlIHByb3BhZ2EiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3NwotbXNnaWQgIkRvIE5vdGhpbmcgRWxzZSBOb3ciCi1tc2dzdHIgIk5vbiBmYXJlIGFsdHJvIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTAxCi1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIHJlbW90ZSBuYW1lLiIKLW1zZ3N0ciAiSW5zZXJpcmUgdW4gbm9tZSBwZXIgbCdhcmNoaXZpbyByZW1vdG8uIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTE0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCi1tc2dzdHIgIiclcycgbm9uIMOoIHV0aWxpenphYmlsZSBjb21lIG5vbWUgZGkgYXJjaGl2aW8gcmVtb3RvLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEyNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBhZGQgcmVtb3RlICclcycgb2YgbG9jYXRpb24gJyVzJy4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGFnZ2l1bmdlcmUgbCdhcmNoaXZpbyByZW1vdG8gJyVzJyBwb3N0byBpbiAnJXMnLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEzMyBsaWIvdHJhbnNwb3J0LnRjbDo2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiZmV0Y2ggJXMiCi1tc2dzdHIgInJlY3VwZXJhIGRhICVzIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTM0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgdGhlICVzIgotbXNnc3RyICJSZWN1cGVybyAlcyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE1NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRvIG5vdCBrbm93IGhvdyB0byBpbml0aWFsaXplIHJlcG9zaXRvcnkgYXQgbG9jYXRpb24gJyVzJy4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGluaXppYWxpenphcmUgbCdhcmNoaXZpbyBwb3N0byBpbiAnJXMnLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MyBsaWIvdHJhbnNwb3J0LnRjbDoyNSBsaWIvdHJhbnNwb3J0LnRjbDo2MwotIzogbGliL3RyYW5zcG9ydC50Y2w6ODEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJwdXNoICVzIgotbXNnc3RyICJwcm9wYWdhIHZlcnNvICVzIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTY0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2V0dGluZyB1cCB0aGUgJXMgKGF0ICVzKSIKLW1zZ3N0ciAiSW1wb3N0byAlcyAoaW4gJXMpIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKLW1zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgotbXNnc3RyICJFbGltaW5hIHJhbW8gcmVtb3RvIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQ3Ci1tc2dpZCAiRnJvbSBSZXBvc2l0b3J5IgotbXNnc3RyICJEYSBhcmNoaXZpbyIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMzQKLW1zZ2lkICJSZW1vdGU6IgotbXNnc3RyICJSZW1vdG86IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjE0OQotbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCi1tc2dzdHIgIlBvc2l6aW9uZSBzcGVjaWZpY2E6IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg0Ci1tc2dpZCAiQnJhbmNoZXMiCi1tc2dzdHIgIlJhbWkiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTA5Ci1tc2dpZCAiRGVsZXRlIE9ubHkgSWYiCi1tc2dzdHIgIkVsaW1pbmEgc29sbyBzZSIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTEKLW1zZ2lkICJNZXJnZWQgSW50bzoiCi1tc2dzdHIgIkZ1c28gaW46IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MgotbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKLW1zZ3N0ciAiU2kgcmljaGllZGUgdW4gcmFtbyBwZXIgJ0Z1c28gaW4nLiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODQKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vZ2MuYzo2MzkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOlxuIgotIlxuIgotIiAtICVzIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCiBtc2dzdHIgIiIKLSJJIHJhbWkgc2VndWVudGkgbm9uIHNvbm8gc3RhdGkgZnVzaSBjb21wbGV0YW1lbnRlIGluICVzOlxuIgotIlxuIgotIiAtICVzIgorImdjIMOoIGdpw6AgaW4gZXNlY3V6aW9uZSBzdWwgY29tcHV0ZXIgJyVzJyBjb24gUElEICU8UFJJdU1BWD4gKHVzYSAtLWZvcmNlIHNlICIKKyJub24gbG8gw6gpIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4OQotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9nYy5jOjY5NAogbXNnaWQgIiIKLSJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKLSJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKIG1zZ3N0ciAiIgotIkltcG9zc2liaWxlIHZlcmlmaWNhcmUgdW5hIG8gcGnDuSBmdXNpb25pOiBtYW5jYW5vIGxlIHJldmlzaW9uaSBuZWNlc3NhcmllLiAiCi0iUHJvdmEgcHJpbWEgYSByZWN1cGVyYXJsZSBkYSAlcy4iCisiQ2kgc29ubyB0cm9wcGkgb2dnZXR0aSBzcGFyc2kgbm9uIHJhZ2dpdW5naWJpbGk7IGVzZWd1aSAnZ2l0IHBydW5lJyBwZXIgIgorImVsaW1pbmFybGkuIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNwotbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKLW1zZ3N0ciAiU2NlZ2xpZXJlIHVubyBvIHBpw7kgcmFtaSBkYSBjYW5jZWxsYXJlLiIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjMwCittc2dpZCAiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8cGF0dGVybj4gWzxyZXY+Li4uXSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGdyZXAgWzxvcHppb25pPl0gWy1lXSA8cGF0dGVybj4gWzxyZXZpc2lvbmU+Li4uXSBbWy0tXSA8cGVyY29yc28+Li4uXSIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgotbXNnc3RyICJDYW5jZWxsYXppb25lIHJhbWkgZGEgJXMiCisjOiBidWlsdGluL2dyZXAuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVwOiBjcmVhemlvbmUgZGVsIHRocmVhZCBub24gcml1c2NpdGE6ICVzIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MgotbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgotbXNnc3RyICJOZXNzdW4gYXJjaGl2aW8gc2VsZXppb25hdG8uIgorIzogYnVpbHRpbi9ncmVwLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkgZm9yICVzIgorbXNnc3RyICJzcGVjaWZpY2F0byBudW1lcm8gbm9uIHZhbGlkbyBkaSB0aHJlYWQgKCVkKSBwZXIgJXMiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCi1tc2dzdHIgIkFuYWxpc2kgaW4gY29yc28gJXMuLi4iCisjLiBUUkFOU0xBVE9SUzogJXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24KKyMuIHZhcmlhYmxlIGZvciB0d2Vha2luZyB0aHJlYWRzLCBjdXJyZW50bHkKKyMuIGdyZXAudGhyZWFkcworIy4KKyM6IGJ1aWx0aW4vZ3JlcC5jOjI4NyBidWlsdGluL2luZGV4LXBhY2suYzoxNTM4IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MzEKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg1NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIgorbXNnc3RyICJub24gdmkgw6ggc3VwcG9ydG8gcGVyIGkgdGhyZWFkLCBpZ25vcm8gJXMiCiAKLSM6IGxpYi9zZWFyY2gudGNsOjIxCi1tc2dpZCAiRmluZDoiCi1tc2dzdHIgIlRyb3ZhOiIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ1MyBidWlsdGluL2dyZXAuYzo1NzggYnVpbHRpbi9ncmVwLmM6NjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCB0cmVlICglcykiCiAKLSM6IGxpYi9zZWFyY2gudGNsOjIzCi1tc2dpZCAiTmV4dCIKLW1zZ3N0ciAiU3VjYyIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBncmVwIHN1IHVuIG9nZ2V0dG8gZGkgdGlwbyAlcyIKIAotIzogbGliL3NlYXJjaC50Y2w6MjQKLW1zZ2lkICJQcmV2IgotbXNnc3RyICJQcmVjIgorIzogYnVpbHRpbi9ncmVwLmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgInN3aXRjaCAnJWMnIHJpY2hpZWRlIHVuIHZhbG9yZSBudW1lcmljbyIKIAotIzogbGliL3NlYXJjaC50Y2w6MjUKLW1zZ2lkICJDYXNlLVNlbnNpdGl2ZSIKLW1zZ3N0ciAiRGlzdGluZ3VpIG1haXVzY29sZSIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwMworbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgImNlcmNhIG5lbGwnaW5kZXggYW56aWNow6kgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIgogCi0jOiBsaWIvc2hvcnRjdXQudGNsOjIxIGxpYi9zaG9ydGN1dC50Y2w6NjIKLW1zZ2lkICJDYW5ub3Qgd3JpdGUgc2hvcnRjdXQ6IgotbXNnc3RyICJJbXBvc3NpYmlsZSBzY3JpdmVyZSBzaG9ydGN1dDoiCisjOiBidWlsdGluL2dyZXAuYzo4MDUKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAibGEgcmljZXJjYSBuZWkgY29udGVudXRpIG5vbiDDqCBnZXN0aXRhIGRhIEdpdCIKIAotIzogbGliL3Nob3J0Y3V0LnRjbDoxMzcKLW1zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCi1tc2dzdHIgIkltcG9zc2liaWxlIHNjcml2ZXJlIGljb25hOiIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwNworbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiY2VyY2Egc2lhIG5laSBmaWxlIHRyYWNjaWF0aSBzaWEgaW4gcXVlbGxpIG5vbiB0cmFjY2lhdGkiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo1NwotbXNnaWQgIlVuc3VwcG9ydGVkIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgIkNvcnJldHRvcmUgb3J0b2dyYWZpY28gbm9uIHN1cHBvcnRhdG8iCisjOiBidWlsdGluL2dyZXAuYzo4MDkKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgImlnbm9yYSBpIGZpbGUgc3BlY2lmaWNhdGkgaW4gJy5naXRpZ25vcmUnIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NjUKLW1zZ2lkICJTcGVsbCBjaGVja2luZyBpcyB1bmF2YWlsYWJsZSIKLW1zZ3N0ciAiQ29ycmV6aW9uZSBvcnRvZ3JhZmljYSBpbmRpc3BvbmliaWxlIgorIzogYnVpbHRpbi9ncmVwLmM6ODExCittc2dpZCAicmVjdXJzaXZlbHkgc2VhcmNoIGluIGVhY2ggc3VibW9kdWxlIgorbXNnc3RyICJjZXJjYSByaWNvcnNpdmFtZW50ZSBpbiBvZ25pIHNvdHRvbW9kdWxvIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NjgKLW1zZ2lkICJJbnZhbGlkIHNwZWxsIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24iCi1tc2dzdHIgIkxhIGNvbmZpZ3VyYXppb25lIGRlbCBjb3JyZXR0b3JlIG9ydG9ncmFmaWNvIG5vbiDDqCB2YWxpZGEiCisjOiBidWlsdGluL2dyZXAuYzo4MTQKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAidmlzdWFsaXp6YSBsZSByaWdoZSBub24gY29ycmlzcG9uZGVudGkiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydGluZyBkaWN0aW9uYXJ5IHRvICVzLiIKLW1zZ3N0ciAiSWwgZGl6aW9uYXJpbyDDqCBzdGF0byByZWltcG9zdGF0byBzdSAlcy4iCisjOiBidWlsdGluL2dyZXAuYzo4MTYKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICJyaWNlcmNhIGNvcnJpc3BvbmRlbnplIHNlbnphIGRpZmZlcmVuemUgbWFpdXNjb2xlL21pbnVzY29sZSIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjczCi1tc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKLW1zZ3N0ciAiSWwgY29ycmV0dG9yZSBvcnRvZ3JhZmljbyBoYSByaXBvcnRhdG8gdW4gZXJyb3JlIGFsbCdhdnZpbyIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxOAorbXNnaWQgIm1hdGNoIHBhdHRlcm5zIG9ubHkgYXQgd29yZCBib3VuZGFyaWVzIgorbXNnc3RyICJjZXJjYSBjb3JyaXNwb25kZW56ZSBhaSBwYXR0ZXJuIHNvbG8gYSBpbml6aW8vZmluZSBwYXJvbGEiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAotbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJDb3JyZXR0b3JlIG9ydG9ncmFmaWNvIG5vbiByaWNvbm9zY2l1dG8iCisjOiBidWlsdGluL2dyZXAuYzo4MjAKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICJlbGFib3JhIGkgZmlsZSBiaW5hcmkgY29tZSB0ZXN0dWFsaSIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgotbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgotbXNnc3RyICJOZXNzdW4gc3VnZ2VyaW1lbnRvIgorIzogYnVpbHRpbi9ncmVwLmM6ODIyCittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICJub24gY2VyY2FyZSBjb3JyaXNwb25kZW56ZSBhaSBwYXR0ZXJuIG5laSBmaWxlIGJpbmFyaSIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjM4OAotbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiSWwgY29ycmV0dG9yZSBvcnRvZ3JhZmljbyBoYSBtYW5kYXRvIHVuIEVPRiBpbmFzcGV0dGF0byIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNQorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAiZWxhYm9yYSBpIGZpbGUgYmluYXJpIGNvbiBmaWx0cmkgZGkgY29udmVyc2lvbmUgaW4gdGVzdG8iCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKLW1zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKLW1zZ3N0ciAiRXJyb3JlIG5lbCBjb3JyZXR0b3JlIG9ydG9ncmFmaWNvIgorIzogYnVpbHRpbi9ncmVwLmM6ODI3Cittc2dpZCAic2VhcmNoIGluIHN1YmRpcmVjdG9yaWVzIChkZWZhdWx0KSIKK21zZ3N0ciAiY2VyY2EgbmVsbGUgc290dG9kaXJlY3RvcnkgKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSkiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjMxCi1tc2dpZCAiTm8ga2V5cyBmb3VuZC4iCi1tc2dzdHIgIkNoaWF2aSBub24gdHJvdmF0ZS4iCisjOiBidWlsdGluL2dyZXAuYzo4MjkKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgInNjZW5kaSBhbCBwacO5IGRpIDxwcm9mb25kaXTDoD4gbGl2ZWxsaSIKIAotIzogbGliL3NzaGtleS50Y2w6MzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgotbXNnc3RyICJDaGlhdmUgcHViYmxpY2EgdHJvdmF0YSBpbjogJXMiCisjOiBidWlsdGluL2dyZXAuYzo4MzMKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAidXNhIGVzcHJlc3Npb25pIHJlZ29sYXJpIFBPU0lYIGVzdGVzZSIKIAotIzogbGliL3NzaGtleS50Y2w6NDAKLW1zZ2lkICJHZW5lcmF0ZSBLZXkiCi1tc2dzdHIgIkNyZWEgY2hpYXZlIgorIzogYnVpbHRpbi9ncmVwLmM6ODM2Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICJ1c2EgZXNwcmVzc2lvbmkgcmVnb2xhcmkgUE9TSVggZGkgYmFzZSAoaW1wb3N0YXppb25lIHByZWRlZmluaXRhKSIKIAotIzogbGliL3NzaGtleS50Y2w6NTYKLW1zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKLW1zZ3N0ciAiQ29waWEgbmVnbGkgYXBwdW50aSIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzOQorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICJpbnRlcnByZXRhIGkgcGF0dGVybiBjb21lIHN0cmluZ2hlIGZpc3NlIgogCi0jOiBsaWIvc3Noa2V5LnRjbDo3MAotbXNnaWQgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5IgotbXNnc3RyICJMYSB0dWEgY2hpYXZlIHB1YmJsaWNhIE9wZW5TU0giCisjOiBidWlsdGluL2dyZXAuYzo4NDIKK21zZ2lkICJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgInVzYSBlc3ByZXNzaW9uaSByZWdvbGFyaSBjb21wYXRpYmlsaSBjb24gUGVybCIKIAotIzogbGliL3NzaGtleS50Y2w6NzgKLW1zZ2lkICJHZW5lcmF0aW5nLi4uIgotbXNnc3RyICJDcmVhemlvbmUgY2hpYXZlIGluIGNvcnNvLi4uIgorIzogYnVpbHRpbi9ncmVwLmM6ODQ1Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgInZpc3VhbGl6emEgbnVtZXJpIGRpIHJpZ2EiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjg0Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2dyZXAuYzo4NDYKK21zZ2lkICJzaG93IGNvbHVtbiBudW1iZXIgb2YgZmlyc3QgbWF0Y2giCittc2dzdHIgInZpc3VhbGl6emEgaWwgbnVtZXJvIGRpIGNvbG9ubmEgZGVsbGEgcHJpbWEgY29ycmlzcG9uZGVuemEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NworbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICJub24gdmlzdWFsaXp6YXJlIGkgbm9taSBmaWxlIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDgKK21zZ2lkICJzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAidmlzdWFsaXp6YSBpIG5vbWkgZmlsZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODUwCittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAidmlzdWFsaXp6YSBpIG5vbWkgZmlsZSByZWxhdGl2aSBhbGxhIGRpcmVjdG9yeSBkaSBwcmltbyBsaXZlbGxvIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTIKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgInZpc3VhbGl6emEgc29sbyBpIG5vbWkgZmlsZSBhbnppY2jDqSBsZSByaWdoZSBjb3JyaXNwb25kZW50aSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU0Cittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgInNpbm9uaW1vIGRpIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTcKK21zZ2lkICJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giCittc2dzdHIgInZpc3VhbGl6emEgc29sbyBpIG5vbWkgZGVpIGZpbGUgbm9uIGNvcnJpc3BvbmRlbnRpIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTkKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICJzdGFtcGEgTlVMIGRvcG8gaSBub21pIGZpbGUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MgorbXNnaWQgInNob3cgb25seSBtYXRjaGluZyBwYXJ0cyBvZiBhIGxpbmUiCittc2dzdHIgInZpc3VhbGl6emEgc29sbyBsZSBwYXJ0aSBjb3JyaXNwb25kZW50aSBkaSB1bmEgcmlnYSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY0Cittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAidmlzdWFsaXp6YSBpbCBudW1lcm8gZGkgY29ycmlzcG9uZGVuemUgYW56aWNow6kgbGUgcmlnaGUgY29ycmlzcG9uZGVudGkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NQorbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICJldmlkZW56aWEgY29ycmlzcG9uZGVuemUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NworbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICJzdGFtcGEgdW5hIHJpZ2EgdnVvdGEgZnJhIGxlIGNvcnJpc3BvbmRlbnplIGluIGZpbGUgZGlmZmVyZW50aSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY5Cittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgaWwgbm9tZSBmaWxlIHNvbG8gdW5hIHZvbHRhIHByaW1hIGRlbGxlIGNvcnJpc3BvbmRlbnplIG5lbGxvICIKKyJzdGVzc28gZmlsZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODcyCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgInZpc3VhbGl6emEgPG4+IHJpZ2hlIGRpIGNvbnRlc3RvIHByaW1hIGUgZG9wbyBsZSBjb3JyaXNwb25kZW56ZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc1Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAidmlzdWFsaXp6YSA8bj4gcmlnaGUgZGkgY29udGVzdG8gcHJpbWEgZGVsbGUgY29ycmlzcG9uZGVuemUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NworbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAidmlzdWFsaXp6YSA8bj4gcmlnaGUgZGkgY29udGVzdG8gZG9wbyBsZSBjb3JyaXNwb25kZW56ZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc5Cittc2dpZCAidXNlIDxuPiB3b3JrZXIgdGhyZWFkcyIKK21zZ3N0ciAidXNhIDxuPiB0aHJlYWQgZGkgbGF2b3JvIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODAKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICJzY29yY2lhdG9pYSBwZXIgLUMgTlVNIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODMKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICJ2aXN1YWxpenphIHVuYSByaWdhIGNvbiBpbCBub21lIGZ1bnppb25lIHByaW1hIGRlbGxlIGNvcnJpc3BvbmRlbnplIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODUKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAidmlzdWFsaXp6YSBsYSBmdW56aW9uZSBjaXJjb3N0YW50ZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg4Cittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgImxlZ2dpIGxlIGNvcnJpc3BvbmRlbnplIGRhIHVuIGZpbGUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MAorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiY2VyY2EgY29ycmlzcG9uZGVuemUgY29uIDxwYXR0ZXJuPiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkyCittc2dpZCAiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIKK21zZ3N0ciAiY29tYmluYSBpIHBhdHRlcm4gc3BlY2lmaWNhdGkgY29uIC1lIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDQKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAiIgorInNlZ25hbGEgdW5hIGNvcnJpc3BvbmRlbnphIGNvbiBpbCBjb2RpY2UgZGkgdXNjaXRhIHNlbnphIGVtZXR0ZXJlIG91dHB1dCIKKworIzogYnVpbHRpbi9ncmVwLmM6OTA2Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgc29sbyBsZSBjb3JyaXNwb25kZW56ZSBuZWkgZmlsZSBpbiBjdWkgdmkgc29ubyBjb3JyaXNwb25kZW56ZSBwZXIgIgorInR1dHRpIGkgcGF0dGVybiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTA4Cittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgInZpc3VhbGl6emEgbCdhbGJlcm8gZGkgYW5hbGlzaSBwZXIgbCdlc3ByZXNzaW9uZSBncmVwIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTIKK21zZ2lkICJwYWdlciIKK21zZ3N0ciAicGFnZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxMgorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICJ2aXN1YWxpenphIGkgZmlsZSBjb3JyaXNwb25kZW50aSBuZWwgcGFnZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxNgorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAiY29uc2VudGkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk4MworbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4iCittc2dzdHIgIm5lc3N1biBwYXR0ZXJuIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDE5Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMiCittc2dzdHIgIi0tbm8taW5kZXggbyAtLXVudHJhY2tlZCBub24gcG9zc29ubyBlc3NlcmUgdXNhdGUgY29uIGxlIHJldmlzaW9uaSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiCittc2dzdHIgImltcG9zc2liaWxlIHJpc29sdmVyZSBsYSByZXZpc2lvbmUgJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNTcKK21zZ2lkICItLXVudHJhY2tlZCBub3Qgc3VwcG9ydGVkIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCittc2dzdHIgImwnb3B6aW9uZSAtLXVudHJhY2tlZCBub24gw6ggc3VwcG9ydGF0YSBjb24gLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjEKK21zZ2lkICJpbnZhbGlkIG9wdGlvbiBjb21iaW5hdGlvbiwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICJjb21iaW5hemlvbmUgZGkgb3B6aW9uaSBub24gdmFsaWRhLCBpZ25vcm8gLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY0IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU0NworbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICJub24gdmkgw6ggc3VwcG9ydG8gcGVyIGkgdGhyZWFkLCBpZ25vcm8gLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODUxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgInNwZWNpZmljYXRvIG51bWVybyBub24gdmFsaWRvIGRpIHRocmVhZCAoJWQpIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTAxCittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgZnVuemlvbmEgc29sbyBzdWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMjcKK21zZ2lkICItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIi0tY2FjaGVkIG8gLS11bnRyYWNrZWQgbm9uIHBvc3Nvbm8gZXNzZXJlIHVzYXRlIGNvbiAtLW5vLWluZGV4IgorCisjOiBidWlsdGluL2dyZXAuYzoxMTMzCittc2dpZCAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMiCittc2dzdHIgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIG5vbiBwdcOyIGVzc2VyZSB1c2F0YSBwZXIgaSBjb250ZW51dGkgdHJhY2NpYXRpIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTQxCittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuIgorbXNnc3RyICJzb25vIHNwZWNpZmljYXRpIHNpYSAtLWNhY2hlZCBzaWEgZGVnbGkgYWxiZXJpIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODUKIG1zZ2lkICIiCi0iQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCi0iXG4iCi0iJXMiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCiBtc2dzdHIgIiIKLSJJbXBvc3NpYmlsZSBhdnZpYXJlIHNzaC1rZXlnZW46XG4iCi0iXG4iCi0iJXMiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dGlwbz5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCiAKLSM6IGxpYi9zc2hrZXkudGNsOjExMQotbXNnaWQgIkdlbmVyYXRpb24gZmFpbGVkLiIKLW1zZ3N0ciAiRXJyb3JlIGR1cmFudGUgbGEgY3JlYXppb25lIGRlbGxhIGNoaWF2ZS4iCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODYKK21zZ2lkICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCittc2dzdHIgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyIKIAotIzogbGliL3NzaGtleS50Y2w6MTE4Ci1tc2dpZCAiR2VuZXJhdGlvbiBzdWNjZWVkZWQsIGJ1dCBubyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAiTGEgY2hpYXZlIMOoIHN0YXRhIGNyZWF0YSBjb24gc3VjY2Vzc28sIG1hIG5vbiDDqCBzdGF0YSB0cm92YXRhLiIKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICJ0aXBvIG9nZ2V0dG8iCiAKLSM6IGxpYi9zc2hrZXkudGNsOjEyMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIllvdXIga2V5IGlzIGluOiAlcyIKLW1zZ3N0ciAiTGEgY2hpYXZlIMOoIGluOiAlcyIKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJzY3JpdmkgbCdvZ2dldHRvIG5lbCBkYXRhYmFzZSBvZ2dldHRpIgogCi0jOiBsaWIvc3RhdHVzX2Jhci50Y2w6ODMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgotbXNnc3RyICIlMSRzIC4uLiAlNiRzOiAlMiQqaSBkaSAlNCQqaSAoJTckM2klJSkiCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAxCittc2dpZCAicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iCittc2dzdHIgImxlZ2dpIGwnb2dnZXR0byBkYWxsbyBzdGFuZGFyZCBpbnB1dCIKIAotIzogbGliL3Rvb2xzLnRjbDo3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKLW1zZ3N0ciAiQmlzb2duYSBzZWxlemlvbmFyZSB1biBmaWxlIHByaW1hIGRpIGVzZWd1aXJlICVzLiIKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDMKK21zZ2lkICJzdG9yZSBmaWxlIGFzIGlzIHdpdGhvdXQgZmlsdGVycyIKK21zZ3N0ciAic2FsdmEgaWwgZmlsZSBjb3PDrCBjb20nw6ggc2VuemEgZmlsdHJpIgogCi0jOiBsaWIvdG9vbHMudGNsOjkwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCi1tc2dzdHIgIlZ1b2kgZGF2dmVybyBlc2VndWlyZSAlcz8iCi0KLSM6IGxpYi90b29scy50Y2w6MTEwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbDogJXMiCi1tc2dzdHIgIkFjY2Vzc29yaW86ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjExMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmc6ICVzIgotbXNnc3RyICJFc2VndW86ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjE0OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCi1tc2dzdHIgIklsIHByb2dyYW1tYSBlc3Rlcm5vIMOoIHRlcm1pbmF0byBjb24gc3VjY2Vzc286ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjE1MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgZmFpbGVkOiAlcyIKLW1zZ3N0ciAiSWwgcHJvZ3JhbW1hIGVzdGVybm8gaGEgcmlwb3J0YXRvIHVuIGVycm9yZTogJXMiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjIyCi1tc2dpZCAiQWRkIFRvb2wiCi1tc2dzdHIgIkFnZ2l1bmdpIGFjY2Vzc29yaW8iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjI4Ci1tc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCi1tc2dzdHIgIkFnZ2l1bmdpIHVuIG51b3ZvIGNvbWFuZG8iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjMzCi1tc2dpZCAiQWRkIGdsb2JhbGx5IgotbXNnc3RyICJBZ2dpdW5naSBwZXIgdHV0dGkgZ2xpIGFyY2hpdmkiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjQ1Ci1tc2dpZCAiVG9vbCBEZXRhaWxzIgotbXNnc3RyICJEZXR0YWdsaSBzdWxsJ2FjY2Vzc29yaW8iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjQ4Ci1tc2dpZCAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiCi1tc2dzdHIgIlV0aWxpenphIGlsIHNlcGFyYXRvcmUgJy8nIHBlciBjcmVhcmUgdW4gYWxiZXJvIGRpIHNvdHRvbWVudToiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjYxCi1tc2dpZCAiQ29tbWFuZDoiCi1tc2dzdHIgIkNvbWFuZG86IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo3NAotbXNnaWQgIlNob3cgYSBkaWFsb2cgYmVmb3JlIHJ1bm5pbmciCi1tc2dzdHIgIk1vc3RyYSB1bmEgZmluZXN0cmEgZGkgZGlhbG9nbyBwcmltYSBkZWxsJ2F2dmlvIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo4MAotbXNnaWQgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyAkUkVWSVNJT04pIgotbXNnc3RyICJDaGllZGkgYWxsJ3V0ZW50ZSBkaSBzY2VnbGllcmUgdW5hIHJldmlzaW9uZSAoaW1wb3N0YSAkUkVWSVNJT04pIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo4NQotbXNnaWQgIkFzayB0aGUgdXNlciBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgKHNldHMgJEFSR1MpIgotbXNnc3RyICJDaGllZGkgYWxsJ3V0ZW50ZSBkaSBmb3JuaXJlIGFyZ29tZW50aSBhZ2dpdW50aXZpIChpbXBvc3RhICRBUkdTKSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6OTIKLW1zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCi1tc2dzdHIgIk5vbiBtb3N0cmFyZSBsYSBmaW5lc3RyYSBkaSBjb21hbmRvIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo5NwotbXNnaWQgIlJ1biBvbmx5IGlmIGEgZGlmZiBpcyBzZWxlY3RlZCAoJEZJTEVOQU1FIG5vdCBlbXB0eSkiCi1tc2dzdHIgIkF2dmlhIHNvbG8gc2Ugw6ggc2VsZXppb25hdGEgdW5hIGRpZmZlcmVuemEgKCRGSUxFTkFNRSBub24gw6ggdnVvdG8pIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjEKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgbmFtZSBmb3IgdGhlIHRvb2wuIgotbXNnc3RyICJCaXNvZ25hIGRhcmUgdW4gbm9tZSBhbGwnYWNjZXNzb3Jpby4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjEyOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIkwnYWNjZXNzb3JpbyAnJXMnIGVzaXN0ZSBnacOgLiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTUxCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA0CiBtc2dpZCAiIgotIkNvdWxkIG5vdCBhZGQgdG9vbDpcbiIKKyJqdXN0IGhhc2ggYW55IHJhbmRvbSBnYXJiYWdlIHRvIGNyZWF0ZSBjb3JydXB0IG9iamVjdHMgZm9yIGRlYnVnZ2luZyBHaXQiCittc2dzdHIgIiIKKyJlc2VndWkgc2VtcGxpY2VtZW50ZSBsJ2hhc2ggZGkgZGF0aSBpbnV0aWxpIHBlciBjcmVhcmUgb2dnZXR0aSBjb3Jyb3R0aSBhbCAiCisiZmluZSBkaSBlc2VndWlyZSBpbCBkZWJ1ZyBkaSBHaXQiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAiZWxhYm9yYSBpIGZpbGUgY29tZSBzZSBmb3NzZXJvIGluIHF1ZXN0byBwZXJjb3JzbyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDYKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICJzdGFtcGEgdHV0dGkgaSBjb21hbmRpIGRpc3BvbmliaWxpIgorCisjOiBidWlsdGluL2hlbHAuYzo0NworbXNnaWQgImV4Y2x1ZGUgZ3VpZGVzIgorbXNnc3RyICJlc2NsdWRpIGxlIGd1aWRlIgorCisjOiBidWlsdGluL2hlbHAuYzo0OAorbXNnaWQgInByaW50IGxpc3Qgb2YgdXNlZnVsIGd1aWRlcyIKK21zZ3N0ciAic3RhbXBhIHVuIGVsZW5jbyBkaSBndWlkZSB1dGlsaSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkKK21zZ2lkICJwcmludCBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1lcyIKK21zZ3N0ciAic3RhbXBhIGkgbm9taSBkaSB0dXR0ZSBsZSB2YXJpYWJpbGkgZGkgY29uZmlndXJhemlvbmUiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUxCittc2dpZCAic2hvdyBtYW4gcGFnZSIKK21zZ3N0ciAidmlzdWFsaXp6YSBsYSBwYWdpbmEgbWFuIgorCisjOiBidWlsdGluL2hlbHAuYzo1MgorbXNnaWQgInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIgorbXNnc3RyICJ2aXN1YWxpenphIGlsIG1hbnVhbGUgbmVsIGJyb3dzZXIgV2ViIgorCisjOiBidWlsdGluL2hlbHAuYzo1NAorbXNnaWQgInNob3cgaW5mbyBwYWdlIgorbXNnc3RyICJ2aXN1YWxpenphIGxhIHBhZ2luYSBpbmZvIgorCisjOiBidWlsdGluL2hlbHAuYzo1NgorbXNnaWQgInByaW50IGNvbW1hbmQgZGVzY3JpcHRpb24iCittc2dzdHIgInN0YW1wYSBsYSBkZXNjcml6aW9uZSBkZWwgY29tYW5kbyIKKworIzogYnVpbHRpbi9oZWxwLmM6NjEKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tYW5kbz5dIgorCisjOiBidWlsdGluL2hlbHAuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVscCBmb3JtYXQgJyVzJyIKK21zZ3N0ciAiZm9ybWF0byBkaSBhaXV0byAnJXMnIG5vbiByaWNvbm9zY2l1dG8iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEwNAorbXNnaWQgIkZhaWxlZCB0byBzdGFydCBlbWFjc2NsaWVudC4iCittc2dzdHIgIkVzZWN1emlvbmUgZGkgZW1hY3NjbGllbnQgbm9uIHJpdXNjaXRhLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTE3Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICJWZXJpZmljYSBkZWxsYSB2ZXJzaW9uZSBkaSBlbWFjc2NsaWVudCBub24gcml1c2NpdGEuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAibGEgdmVyc2lvbmUgJyVkJyBkaSBlbWFjc2NsaWVudCDDqCB0cm9wcG8gdmVjY2hpYSAoPDIyKS4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjE0MyBidWlsdGluL2hlbHAuYzoxNjUgYnVpbHRpbi9oZWxwLmM6MTc1IGJ1aWx0aW4vaGVscC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnIgorbXNnc3RyICJlc2VjdXppb25lIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2hlbHAuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMnOiBwYXRoIGFkIHVuIHZpc3VhbGl6emF0b3JlIG1hbiBwYWdlcyBub24gc3VwcG9ydGF0by5cbiIKKyJVc2EgaW52ZWNlICdtYW4uPHRvb2w+LmNtZCcuIgorCisjOiBidWlsdGluL2hlbHAuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LnBhdGgnIGluc3RlYWQuIgorbXNnc3RyICIiCisiJyVzJzogY29tYW5kbyBwZXIgdmlzdWFsaXp6YXRvcmUgbWFuIHBhZ2VzIHN1cHBvcnRhdG8uXG4iCisiUGVyIGZhdm9yZSB1c2EgJ21hbi48dG9vbD4ucGF0aCcgaW52ZWNlLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iCittc2dzdHIgIiclcyc6IHZpc3VhbGl6emF0b3JlIG1hbiBzY29ub3NjaXV0by4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM2NworbXNnaWQgIm5vIG1hbiB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAibmVzc3VuIHZpc3VhbGl6emF0b3JlIG1hbiBoYSBnZXN0aXRvIGxhIHJpY2hpZXN0YSIKKworIzogYnVpbHRpbi9oZWxwLmM6Mzc1Cittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAibmVzc3VuIHZpc3VhbGl6emF0b3JlIGluZm8gaGEgZ2VzdGl0byBsYSByaWNoaWVzdGEiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNCBidWlsdGluL2hlbHAuYzo0NDUgZ2l0LmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxpYXNlZCB0byAnJXMnIgorbXNnc3RyICInJXMnIMOoIHVuIGFsaWFzIGRpICclcyciCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0OCBnaXQuYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGFsaWFzLiVzIHN0cmluZzogJXMiCittc2dzdHIgInN0cmluZ2EgYWxpYXMuJXMgbm9uIHZhbGlkYTogJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3NyBidWlsdGluL2hlbHAuYzo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgInVzbzogJXMlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkxCittc2dpZCAiJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgaW5mb3JtYXRpb24iCittc2dzdHIgIlZlZGkgJ2dpdCBoZWxwIGNvbmZpZycgcGVyIG1hZ2dpb3JpIGluZm9ybWF6aW9uaSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCB0eXBlIG1pc21hdGNoIGF0ICVzIgorbXNnc3RyICJ0aXBvIG9nZ2V0dG8gbm9uIGNvcnJpc3BvbmRlbnRlIGluICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIG9iamVjdCAlcyIKK21zZ3N0ciAibm9uIHNpIMOoIHJpY2V2dXRvIGwnb2dnZXR0byBhdHRlc28gJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXM6IGV4cGVjdGVkIHR5cGUgJXMsIGZvdW5kICVzIgorbXNnc3RyICJvZ2dldHRvICVzOiBhdHRlc28gdGlwbyAlcywgdHJvdmF0byAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICJpbXBvc3NpYmlsZSByaWVtcGlyZSAlZCBieXRlIgorbXNnc3RyWzFdICJpbXBvc3NpYmlsZSByaWVtcGlyZSAlZCBieXRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjgKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgIkVPRiBwcmVtYXR1cm8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2OQorbXNnaWQgInJlYWQgZXJyb3Igb24gaW5wdXQiCittc2dzdHIgImVycm9yZSBkaSBsZXR0dXJhIGluIGlucHV0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODEKK21zZ2lkICJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIKK21zZ3N0ciAidXNhdGkgcGnDuSBieXRlIGRpIHF1ZWxsaSBkaXNwb25pYmlsaSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjg4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NjA2Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAicGFjayB0cm9wcG8gbGFyZ28gcGVyIGxhIGRlZmluaXppb25lIGNvcnJlbnRlIGRpIG9mZl90IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTEgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjk1Cittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICJpbCBwYWNrIHN1cGVyYSBsYSBkaW1lbnNpb25lIG1hc3NpbWEgY29uc2VudGl0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhY2tmaWxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBpbCBmaWxlIHBhY2sgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI2Cittc2dpZCAicGFjayBzaWduYXR1cmUgbWlzbWF0Y2giCittc2dzdHIgImxhIGZpcm1hIGRlbCBwYWNrIG5vbiBjb2luY2lkZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgInZlcnNpb25lIHBhY2sgJTxQUkl1MzI+IG5vbiBzdXBwb3J0YXRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJTxQUkl1TUFYPjogJXMiCittc2dzdHIgImlsIHBhY2sgaGEgdW4gb2dnZXR0byBkYW5uZWdnaWF0byBhbGwnb2Zmc2V0ICU8UFJJdU1BWD46ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAiaW5mbGF0ZSBoYSByZXN0aXR1aXRvIGlsIGNvZGljZSAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTE1Cittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAib3ZlcmZsb3cgZGVsIHZhbG9yZSBkZWxsJ29mZnNldCBiYXNlIGRlbCBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIzCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICJsJ29mZnNldCBiYXNlIGRlbCBkZWx0YSDDqCBmdW9yaSBkYWxsJ2ludGVydmFsbG8gY29uc2VudGl0byIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb2JqZWN0IHR5cGUgJWQiCittc2dzdHIgInRpcG8gb2dnZXR0byAlZCBzY29ub3NjaXV0byIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTYyCittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgcHJlYWQgc3VsIGZpbGUgcGFjayIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAiZmluZSBkZWwgZmlsZSBwYWNrIHByZW1hdHVyYSwgJTxQUkl1TUFYPiBieXRlIG1hbmNhbnRlIgorbXNnc3RyWzFdICJmaW5lIGRlbCBmaWxlIHBhY2sgcHJlbWF0dXJhLCAlPFBSSXVNQVg+IGJ5dGUgbWFuY2FudGkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU5MAorbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICJpbmNvbnNpc3RlbnphIGdyYXZlIGRpIGluZmxhdGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczNSBidWlsdGluL2luZGV4LXBhY2suYzo3NDEgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzY1CisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDQgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIKK21zZ3N0ciAiVFJPVkFUQSBDT0xMSVNJT05FIFNIQTEgQ09OICVzICEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1OAorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgaW5mbyAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBsZSBpbmZvcm1hemlvbmkgc3VsbCdvZ2dldHRvIGVzaXN0ZW50ZTogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgIm5vbiDDqCBwb3NzaWJpbGUgbGVnZ2VyZSBsJ29nZ2V0dG8gJXMgZXNpc3RlbnRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAib2dnZXR0byBibG9iICVzIG5vbiB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyNyBidWlsdGluL2luZGV4LXBhY2suYzo4NDYKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2tlZCBvYmplY3QiCittc2dzdHIgImVycm9yZSBmc2NrIG5lbGwnb2dnZXR0byBzb3R0b3Bvc3RvIGEgcGFjayIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhbGwgY2hpbGQgb2JqZWN0cyBvZiAlcyBhcmUgcmVhY2hhYmxlIgorbXNnc3RyICJOb24gdHV0dGkgZ2xpIG9nZ2V0dGkgZmlnbGlvIGRpICVzIHNvbm8gcmFnZ2l1bmdpYmlsaSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTIwIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk1MQorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAiYXBwbGljYXppb25lIGRlbCBkZWx0YSBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjEKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUmljZXppb25lIGRlZ2xpIG9nZ2V0dGkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjEKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICJJbmRpY2l6emF6aW9uZSBkZWdsaSBvZ2dldHRpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTU1Cittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICJpbCBwYWNrIMOoIGNvcnJvdHRvIChTSEExIG5vbiBjb3JyaXNwb25kZSkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjAKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGZzdGF0IHN1bCBmaWxlIHBhY2siCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjMKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgImlsIHBhY2sgaGEgZGF0aSBpbnV0aWxpIGFsbGEgZmluZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE3NQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgImNvbmZ1c2lvbmUgb2x0cmUgb2duaSBmb2xsaWEgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExOTgKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICJSaXNvbHV6aW9uZSBkZWkgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMDggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlIGlsIHRocmVhZDogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNDkKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICJjb25mdXNpb25lIG9sdHJlIG9nbmkgZm9sbGlhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0clswXSAiY29tcGxldGF0byBjb24gJWQgb2dnZXR0byBsb2NhbGUiCittc2dzdHJbMV0gImNvbXBsZXRhdG8gY29uICVkIG9nZ2V0dGkgbG9jYWxpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICJDaGVja3N1bSBpbiBjb2RhIGluYXR0ZXNvIHBlciAlcyAoZGlzY28gY29ycm90dG8/KSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAicGFjayBoYSAlZCBkZWx0YSBpcnJpc29sdG8iCittc2dzdHJbMV0gInBhY2sgaGEgJWQgZGVsdGEgaXJyaXNvbHRpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBkZWZsYXRlIHN1bGwnb2dnZXR0byBhZ2dpdW50byBhbGxhIGZpbmUgKCVkKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAibCdvZ2dldHRvIGxvY2FsZSAlcyDDqCBjb3Jyb3R0byIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAiaWwgbm9tZSBkZWwgZmlsZSBwYWNrICclcycgbm9uIHRlcm1pbmEgY29uICcucGFjayciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZSAlcyAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSB3cml0dGVuICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY2hpdWRlcmUgaWwgZmlsZSAlcyBzY3JpdHRvICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NjMKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAiZXJyb3JlIG5lbGxhIGNoaXVzdXJhIGRlbCBmaWxlIHBhY2siCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzcKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcmNoaXZpYXJlIGlsIGZpbGUgcGFjayIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ4NQorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcmNoaXZpYXJlIGluZGV4IGZpbGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MjkgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODYyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCittc2dzdHIgInBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiBub24gdmFsaWRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhcHJpcmUgaWwgZmlsZSBwYWNrICclcycgZXNpc3RlbnRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIkltcG9zc2liaWxlIGFwcmlyZSBpbCBmaWxlIHBhY2sgaWR4IGVzaXN0ZW50ZSBwZXIgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJub24gZGVsdGE6ICVkIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAibm9uIGRlbHRhOiAlZCBvYmplY3RzIgorbXNnc3RyWzBdICJub24gZGVsdGE6ICVkIG9nZ2V0dG8iCittc2dzdHJbMV0gIm5vbiBkZWx0YTogJWQgb2dnZXR0aSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICJsdW5naGV6emEgZGVsbGEgY2F0ZW5hID0gJWQ6ICVsdSBvZ2dldHRvIgorbXNnc3RyWzFdICJsdW5naGV6emEgZGVsbGEgY2F0ZW5hID0gJWQ6ICVsdSBvZ2dldHRpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjkzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgImltcG9zc2liaWxlIHRvcm5hcmUgYWxsYSBkaXJlY3RvcnkgZGkgbGF2b3JvIGNvcnJlbnRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzQyIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NDUKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NjEgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgIiVzIGVycmF0byIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4MQorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluIG5vbiBwdcOyIGVzc2VyZSB1c2F0byBzZW56YSAtLXN0ZGluIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzgzCittc2dpZCAiLS1zdGRpbiByZXF1aXJlcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLXN0ZGluIHJpY2hpZWRlIHVuIHJlcG9zaXRvcnkgR2l0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzg5Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICItLXZlcmlmeSBzZW56YSB1biBub21lIGRlbCBmaWxlIHBhY2sgc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4MzcgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjU4MgorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFjayBvYmplY3RzIgorbXNnc3RyICJlcnJvcmUgZnNjayBuZWdsaSBvZ2dldHRpIHNvdHRvcG9zdGkgYSBwYWNrIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBzdGF0IHN1bCBtb2RlbGxvICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBsYSBkaXJlY3RvcnkgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgbGluayAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBpbCBjb2xsZWdhbWVudG8gc2ltYm9saWNvIGRhICclcycgYSAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNvcGlhcmUgJyVzJyBpbiAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAiaWdub3JvIGlsIG1vZGVsbG8gJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kIGluICVzIgorbXNnc3RyICJtb2RlbGxpIG5vbiB0cm92YXRpIGluICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIGZyb20gJyVzJzogJXMiCittc2dzdHIgIm5vbiBjb3BpbyBpIG1vZGVsbGkgZGEgJyVzJzogJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaGFuZGxlIGZpbGUgdHlwZSAlZCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZ2VzdGlyZSBpbCB0aXBvIGRpIGZpbGUgJWQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc3Bvc3RhcmUgJXMgaW4gJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NCBidWlsdGluL2luaXQtZGIuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiVzIGVzaXN0ZSBnacOgIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJSZWluaXppYWxpenphdG8gcmVwb3NpdG9yeSBHaXQgY29uZGl2aXNvIGVzaXN0ZW50ZSBpbiAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiUmVpbml6aWFsaXp6YXRvIHJlcG9zaXRvcnkgR2l0IGVzaXN0ZW50ZSBpbiAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJJbml6aWFsaXp6YXRvIHJlcG9zaXRvcnkgR2l0IGNvbmRpdmlzbyB2dW90byBpbiAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkluaXppYWxpenphdG8gcmVwb3NpdG9yeSBHaXQgdnVvdG8gaW4gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0NjgKK21zZ2lkICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPGRpcmVjdG9yeT5dIgorbXNnc3RyICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PGRpcmVjdG9yeS1tb2RlbGxvPl0gWy0tIgorInNoYXJlZFs9PHBlcm1lc3NpPl1dIFs8ZGlyZWN0b3J5Pl0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MQorbXNnaWQgInBlcm1pc3Npb25zIgorbXNnc3RyICJwZXJtZXNzaSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkyCittc2dpZCAic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIgorbXNnc3RyICJzcGVjaWZpY2EgY2hlIGlsIHJlcG9zaXRvcnkgR2l0IGRldmUgZXNzZXJlIGNvbmRpdmlzbyBjb24gcGnDuSB1dGVudGkiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyOSBidWlsdGluL2luaXQtZGIuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgbGEgZGlyZWN0b3J5ICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBtb2RpZmljYXJlIGxhIGRpcmVjdG9yeSBjb3JyZW50ZSBpbiAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgc3BlY2lmeWluZyAlcyAob3IgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIiIKKyIlcyAobyAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm9uIGNvbnNlbnRpdG8gc2VuemEgc3BlY2lmaWNhcmUgJXMgKG8gLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhY2NlZGVyZSBhbGwnYWxiZXJvIGRpIGxhdm9ybyAnJXMnIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjE2Cittc2dpZCAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8dG9rZW4+Wyg9fDopPHZhbG9yZT5dKS4uLl0gWzxmaWxlPi4uLl0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTUKK21zZ2lkICJlZGl0IGZpbGVzIGluIHBsYWNlIgorbXNnc3RyICJtb2RpZmljYSBpIGZpbGUgc3VsIHBvc3RvIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk2Cittc2dpZCAidHJpbSBlbXB0eSB0cmFpbGVycyIKK21zZ3N0ciAicmltdW92aSBzcGF6aSBkYWxsZSBzdHJpbmdoZSBmaW5hbGkgdnVvdGUiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTkKK21zZ2lkICJ3aGVyZSB0byBwbGFjZSB0aGUgbmV3IHRyYWlsZXIiCittc2dzdHIgImRvdmUgY29sbG9jYXJlIGxhIG51b3ZhIHN0cmluZ2EgZmluYWxlIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMQorbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJhemlvbmUgZGEgZXNlZ3VpcmUgc2UgbGEgc3RyaW5nYSBmaW5hbGUgZXNpc3RlIGdpw6AiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAzCittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgaXMgbWlzc2luZyIKK21zZ3N0ciAiYXppb25lIGRhIGVzZWd1aXJlIHNlIGxhIHN0cmluZ2EgZmluYWxlIMOoIG1hbmNhbnRlIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNQorbXNnaWQgIm91dHB1dCBvbmx5IHRoZSB0cmFpbGVycyIKK21zZ3N0ciAiZW1ldHRpIGluIG91dHB1dCBzb2xvIGxlIHN0cmluZ2hlIGZpbmFsaSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDYKK21zZ2lkICJkbyBub3QgYXBwbHkgY29uZmlnIHJ1bGVzIgorbXNnc3RyICJub24gYXBwbGljYXJlIGxlIHJlZ29sZSBkaSBjb25maWd1cmF6aW9uZSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDcKK21zZ2lkICJqb2luIHdoaXRlc3BhY2UtY29udGludWVkIHZhbHVlcyIKK21zZ3N0ciAidW5pc2NpIGkgdmFsb3JpIHJlc2kgY29udGlndWkgZGFnbGkgc3BhemkgYmlhbmNoaSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDgKK21zZ2lkICJzZXQgcGFyc2luZyBvcHRpb25zIgorbXNnc3RyICJpbXBvc3RhIGxlIG9wemlvbmkgZGkgYW5hbGlzaSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTAKK21zZ2lkICJkbyBub3QgdHJlYXQgLS0tIHNwZWNpYWxseSIKK21zZ3N0ciAibm9uIHRyYXR0YXJlIGxhIHNlcXVlbnphIC0tLSBpbiBtb2RvIHNwZWNpYWxlIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMQorbXNnaWQgInRyYWlsZXIiCittc2dzdHIgInN0cmluZ2EgZmluYWxlIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMgorbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICJzdHJpbmdhL2UgZmluYWxlL2kgZGEgYWdnaXVuZ2VyZSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMjMKK21zZ2lkICItLXRyYWlsZXIgd2l0aCAtLW9ubHktaW5wdXQgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS10cmFpbGVyIGNvbiAtLW9ubHktaW5wdXQgbm9uIGhhIHNlbnNvIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEzMworbXNnaWQgIm5vIGlucHV0IGZpbGUgZ2l2ZW4gZm9yIGluLXBsYWNlIGVkaXRpbmciCittc2dzdHIgIm5lc3N1biBmaWxlIGRpIGlucHV0IHNwZWNpZmljYXRvIHBlciBsYSBtb2RpZmljYSBzdWwgcG9zdG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTYKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbG9nIFs8b3B6aW9uaT5dIFs8aW50ZXJ2YWxsby1yZXZpc2lvbmk+XSBbWy0tXSA8cGVyY29yc28+Li4uXSIKKworIzogYnVpbHRpbi9sb2cuYzo1NworbXNnaWQgImdpdCBzaG93IFs8b3B0aW9ucz5dIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgc2hvdyBbPG9wemlvbmk+XSA8b2dnZXR0bz4uLi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICJvcHppb25lIC0tZGVjb3JhdGUgbm9uIHZhbGlkYTogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc0Cittc2dpZCAic2hvdyBzb3VyY2UiCittc2dzdHIgInZpc3VhbGl6emEgc29yZ2VudGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc1Cittc2dpZCAiVXNlIG1haWwgbWFwIGZpbGUiCittc2dzdHIgIlVzYSBpbCBmaWxlIG1hcHBhdHVyYSBlLW1haWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc3Cittc2dpZCAib25seSBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJkZWNvcmEgc29sbyBpIHJpZmVyaW1lbnRpIGNvcnJpc3BvbmRlbnRpIGEgPHBhdHRlcm4+IgorCisjOiBidWlsdGluL2xvZy5jOjE3OQorbXNnaWQgImRvIG5vdCBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJub24gZGVjb3JhcmUgaSByaWZlcmltZW50aSBjb3JyaXNwb25kZW50aSBhIDxwYXR0ZXJuPiIKKworIzogYnVpbHRpbi9sb2cuYzoxODAKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICJvcHppb25pIGRlY29yYXppb25lIgorCisjOiBidWlsdGluL2xvZy5jOjE4MworbXNnaWQgIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICJFbGFib3JhIGwnaW50ZXJ2YWxsbyByaWdoZSBuLG0gbmVsIGZpbGUsIGNvbnRhbmRvbGUgZGEgMSIKKworIzogYnVpbHRpbi9sb2cuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICJPdXRwdXQgZmluYWxlOiAlZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgImdpdCBzaG93ICVzOiBmaWxlIG5vbiB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTUwIGJ1aWx0aW4vbG9nLmM6NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBsJ29nZ2V0dG8gJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdHlwZTogJWQiCittc2dzdHIgInRpcG8gc2Nvbm9zY2l1dG86ICVkIgorCisjOiBidWlsdGluL2xvZy5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBjb3ZlciBmcm9tIGRlc2NyaXB0aW9uIG1vZGUiCittc2dzdHIgIiVzOiBtb2RvIGxldHRlcmEgZGEgZGVzY3JpemlvbmUgbm9uIHZhbGlkbyIKKworIzogYnVpbHRpbi9sb2cuYzo4MjEKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyBub24gaGEgYWxjdW4gdmFsb3JlIgorCisjOiBidWlsdGluL2xvZy5jOjkzNgorbXNnaWQgIm5hbWUgb2Ygb3V0cHV0IGRpcmVjdG9yeSBpcyB0b28gbG9uZyIKK21zZ3N0ciAiaWwgbm9tZSBkZWxsYSBkaXJlY3RvcnkgZGkgb3V0cHV0IMOoIHRyb3BwbyBsdW5nbyIKKworIzogYnVpbHRpbi9sb2cuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGlsIGZpbGUgcGF0Y2ggJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTY5Cittc2dpZCAibmVlZCBleGFjdGx5IG9uZSByYW5nZSIKK21zZ3N0ciAiw6ggbmVjZXNzYXJpbyBzcGVjaWZpY2FyZSBlc2F0dGFtZW50ZSB1biBpbnRlcnZhbGxvIgorCisjOiBidWlsdGluL2xvZy5jOjk3OQorbXNnaWQgIm5vdCBhIHJhbmdlIgorbXNnc3RyICJpbCB2YWxvcmUgbm9uIMOoIHVuIGludGVydmFsbG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0MworbXNnaWQgImNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgImxhIGxldHRlcmEgZGkgYWNjb21wYWduYW1lbnRvIGRldidlc3NlcmUgaW4gZm9ybWF0byBlLW1haWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0OQorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgY292ZXItbGV0dGVyIGZpbGUiCittc2dzdHIgImNyZWF6aW9uZSBkZWwgZmlsZSBsZXR0ZXJhIGRpIGFjY29tcGFnbmFtZW50byBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmUgaW4tcmVwbHktdG86ICVzIgorbXNnc3RyICJ2YWxvcmUgaW4tcmVwbHktdG8gZm9sbGU6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTUKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHppb25pPl0gWzxkYT4gfCA8aW50ZXJ2YWxsbyByZXZpc2lvbmk+XSIKKworIzogYnVpbHRpbi9sb2cuYzoxMzEzCittc2dpZCAidHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgImR1ZSBkaXJlY3RvcnkgZGkgb3V0cHV0PyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDI0IGJ1aWx0aW4vbG9nLmM6MjE5NyBidWlsdGluL2xvZy5jOjIxOTkgYnVpbHRpbi9sb2cuYzoyMjExCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWl0ICVzIgorbXNnc3RyICJjb21taXQgJXMgc2Nvbm9zY2l1dG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzNCBidWlsdGluL3JlcGxhY2UuYzo1OCBidWlsdGluL3JlcGxhY2UuYzoyMDcKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaXNvbHZlcmUgJyVzJyBjb21lIHJpZmVyaW1lbnRvIHZhbGlkbyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDM5Cittc2dpZCAiY291bGQgbm90IGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdHJvdmFyZSBlc2F0dGFtZW50ZSBsYSBiYXNlIGRlbCBtZXJnZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDQzCittc2dpZCAiIgorImZhaWxlZCB0byBnZXQgdXBzdHJlYW0sIGlmIHlvdSB3YW50IHRvIHJlY29yZCBiYXNlIGNvbW1pdCBhdXRvbWF0aWNhbGx5LFxuIgorInBsZWFzZSB1c2UgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byB0byB0cmFjayBhIHJlbW90ZSBicmFuY2guXG4iCisiT3IgeW91IGNvdWxkIHNwZWNpZnkgYmFzZSBjb21taXQgYnkgLS1iYXNlPTxiYXNlLWNvbW1pdC1pZD4gbWFudWFsbHkiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSByZWN1cGVyYXJlIGwndXBzdHJlYW0sIHNlIHZ1b2kgcmVnaXN0cmFyZSBhdXRvbWF0aWNhbWVudGVcbiIKKyJpbCBjb21taXQgZGkgYmFzZSB1c2EgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBwZXIgdHJhY2NpYXJlIHVuIGJyYW5jaFxuIgorInJlbW90by5cbiIKKyJJbiBhbHRlcm5hdGl2YSBwdW9pIHNwZWNpZmljYXJlIG1hbnVhbG1lbnRlIGlsIGNvbW1pdCBkaSBiYXNlIGNvblxuIgorIi0tYmFzZT08SUQgY29tbWl0IGRpIGJhc2U+IgorCisjOiBidWlsdGluL2xvZy5jOjE0NjMKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICJpbXBvc3NpYmlsZSB0cm92YXJlIGVzYXR0YW1lbnRlIGxhIGJhc2UgZGVsIG1lcmdlIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzQKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGQgYmUgdGhlIGFuY2VzdG9yIG9mIHJldmlzaW9uIGxpc3QiCittc2dzdHIgImlsIGNvbW1pdCBkaSBiYXNlIGRvdnJlYmJlIGVzc2VyZSBsJ2FudGVuYXRvIGRlbGwnZWxlbmNvIHJldmlzaW9uaSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc4Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkbid0IGJlIGluIHJldmlzaW9uIGxpc3QiCittc2dzdHIgImlsIGNvbW1pdCBkaSBiYXNlIG5vbiBkb3ZyZWJiZSBlc3NlcmUgbmVsbCdlbGVuY28gcmV2aXNpb25pIgorCisjOiBidWlsdGluL2xvZy5jOjE1MzEKK21zZ2lkICJjYW5ub3QgZ2V0IHBhdGNoIGlkIgorbXNnc3RyICJpbXBvc3NpYmlsZSBvdHRlbmVyZSBsJ0lEIGRlbGxhIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE1ODMKK21zZ2lkICJmYWlsZWQgdG8gaW5mZXIgcmFuZ2UtZGlmZiByYW5nZXMiCittc2dzdHIgImluZmVyZW56YSBkZWdsaSBpbnRlcnZhbGxpIHJhbmdlLWRpZmYgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2xvZy5jOjE2MjkKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICJ1c2EgW1BBVENIIG4vbV0gYW5jaGUgY29uIHVuYSBzaW5nb2xhIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzIKK21zZ2lkICJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIKK21zZ3N0ciAidXNhIFtQQVRDSF0gYW5jaGUgY29uIHBpw7kgcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzNgorbXNnaWQgInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IgorbXNnc3RyICJzdGFtcGEgbGUgcGF0Y2ggc3VsbG8gc3RhbmRhcmQgb3V0cHV0IgorCisjOiBidWlsdGluL2xvZy5jOjE2MzgKK21zZ2lkICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIKK21zZ3N0ciAiZ2VuZXJhIHVuYSBsZXR0ZXJhIGRpIGFjY29tcGFnbmFtZW50byIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQwCittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICJ1c2EgdW5hIHNlcXVlbnphIG51bWVyaWNhIHNlbXBsaWNlIHBlciBpIG5vbWkgZmlsZSBkaSBvdXRwdXQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MQorbXNnaWQgInNmeCIKK21zZ3N0ciAic3VmZiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQyCittc2dpZCAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciCittc2dzdHIgInVzYSA8c3VmZj4gYW56aWNow6kgJy5wYXRjaCciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NAorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgImluaXppYSBhIG51bWVyYXJlIGxlIHBhdGNoIGRhIDxuPiBhbnppY2jDqSBkYSAxIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDYKK21zZ2lkICJtYXJrIHRoZSBzZXJpZXMgYXMgTnRoIHJlLXJvbGwiCittc2dzdHIgImNvbnRyYXNzZWduYSBsYSBzZXJpZSBjb21lIGwnbi1lc2ltYSB2ZXJzaW9uZSByZXZpc2lvbmF0YSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ4Cittc2dpZCAiVXNlIFtSRkMgUEFUQ0hdIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiVXNhIFtSRkMgUEFUQ0hdIGFuemljaMOpIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1MQorbXNnaWQgImNvdmVyLWZyb20tZGVzY3JpcHRpb24tbW9kZSIKK21zZ3N0ciAibW9kby1sZXR0ZXJhLWRhLWRlc2NyaXppb25lIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTIKK21zZ2lkICJnZW5lcmF0ZSBwYXJ0cyBvZiBhIGNvdmVyIGxldHRlciBiYXNlZCBvbiBhIGJyYW5jaCdzIGRlc2NyaXB0aW9uIgorbXNnc3RyICIiCisiZ2VuZXJhIHBhcnRpIGRpIHVuYSBsZXR0ZXJhIGQnYWNjb21wYWduYW1lbnRvIGJhc2FuZG9zaSBzdWxsYSBkZXNjcml6aW9uZSBkaSAiCisidW4gYnJhbmNoIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTQKK21zZ2lkICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIlVzYSBbPHByZWZpc3NvPl0gYW56aWNow6kgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAic3RvcmUgcmVzdWx0aW5nIGZpbGVzIGluIDxkaXI+IgorbXNnc3RyICJzYWx2YSBpIGZpbGUgcmlzdWx0YW50aSBpbiA8ZGlyPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYwCittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgIm5vbiBlbGltaW5hcmUvYWdnaXVuZ2VyZSBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjMKK21zZ2lkICJkb24ndCBvdXRwdXQgYmluYXJ5IGRpZmZzIgorbXNnc3RyICJub24gbWFuZGFyZSBpbiBvdXRwdXQgZGlmZiBiaW5hcmkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NQorbXNnaWQgIm91dHB1dCBhbGwtemVybyBoYXNoIGluIEZyb20gaGVhZGVyIgorbXNnc3RyICJtYW5kYSBpbiBvdXRwdXQgdW4gaGFzaCBjb3N0aXR1aXRvIGRhIHNvbGkgemVyaSBuZWxsJ2ludGVzdGF6aW9uZSBGcm9tIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjcKK21zZ2lkICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iCittc2dzdHIgIm5vbiBpbmNsdWRlcmUgdW5hIHBhdGNoIGNvcnJpc3BvbmRlbnRlIGEgdW4gY29tbWl0IHVwc3RyZWFtIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjkKK21zZ2lkICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiCittc2dzdHIgIiIKKyJ2aXN1YWxpenphIGlsIGZvcm1hdG8gZGVsbGEgcGF0Y2ggYW56aWNow6kgbCdpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEgKHBhdGNoICIKKyIrIHN0YXQpIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzEKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIk1lc3NhZ2dpc3RpY2EiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MgorbXNnaWQgImhlYWRlciIKK21zZ3N0ciAiaW50ZXN0YXppb25lIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzMKK21zZ2lkICJhZGQgZW1haWwgaGVhZGVyIgorbXNnc3RyICJhZ2dpdW5naSBpbnRlc3RhemlvbmUgZS1tYWlsIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzQgYnVpbHRpbi9sb2cuYzoxNjc2Cittc2dpZCAiZW1haWwiCittc2dzdHIgImUtbWFpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0Cittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgImFnZ2l1bmdpIGludGVzdGF6aW9uZSBBOiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc2Cittc2dpZCAiYWRkIENjOiBoZWFkZXIiCittc2dzdHIgImFnZ2l1bmdpIGludGVzdGF6aW9uZSBDYzoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3OAorbXNnaWQgImlkZW50IgorbXNnc3RyICJpZGVudGl0w6AiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3OQorbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgIiIKKyJpbXBvc3RhIGwnaW5kaXJpenpvIERhIGEgPGlkZW50aXTDoD4gKG8gYWxsJ2lkZW50aXTDoCBkaSBjaGkgaGEgY3JlYXRvIGlsICIKKyJjb21taXQgc2UgYXNzZW50ZSkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MQorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgIklEIG1lc3NhZ2dpbyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgyCittc2dpZCAibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IgorbXNnc3RyICJyZW5kaSBsYSBwcmltYSBlLW1haWwgdW5hIHJpc3Bvc3RhIGEgPElEIG1lc3NhZ2dpbz4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MyBidWlsdGluL2xvZy5jOjE2ODYKK21zZ2lkICJib3VuZGFyeSIKK21zZ3N0ciAiZGVsaW1pdGF0b3JlIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODQKK21zZ2lkICJhdHRhY2ggdGhlIHBhdGNoIgorbXNnc3RyICJhbGxlZ2EgbGEgcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NworbXNnaWQgImlubGluZSB0aGUgcGF0Y2giCittc2dzdHIgImluY2x1ZGkgbGEgcGF0Y2ggbmVsIG1lc3NhZ2dpbyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkxCittc2dpZCAiZW5hYmxlIG1lc3NhZ2UgdGhyZWFkaW5nLCBzdHlsZXM6IHNoYWxsb3csIGRlZXAiCittc2dzdHIgIiIKKyJhYmlsaXRhIGlsIHJhZ2dydXBwYW1lbnRvIG1lc3NhZ2dpIHBlciBjb252ZXJzYXppb25lLCBzdGlsaTogc3VwZXJmaWNpYWxlLCAiCisicHJvZm9uZG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5MworbXNnaWQgInNpZ25hdHVyZSIKK21zZ3N0ciAiZmlybWEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSIKK21zZ3N0ciAiYWdnaXVuZ2kgdW5hIGZpcm1hIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTUKK21zZ2lkICJiYXNlLWNvbW1pdCIKK21zZ3N0ciAiY29tbWl0IGRpIGJhc2UiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NgorbXNnaWQgImFkZCBwcmVyZXF1aXNpdGUgdHJlZSBpbmZvIHRvIHRoZSBwYXRjaCBzZXJpZXMiCittc2dzdHIgIiIKKyJhZ2dpdW5naSBsZSBpbmZvcm1hemlvbmkgcHJlcmVxdWlzaXRvIHBlciBsJ2FsYmVybyBhbGxhIHNlcmllIGRlbGxlIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTgKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUgZnJvbSBhIGZpbGUiCittc2dzdHIgImFnZ2l1bmdpIHVuYSBmaXJtYSBkYSBmaWxlIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTkKK21zZ2lkICJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIgorbXNnc3RyICJub24gc3RhbXBhcmUgaSBub21pIGZpbGUgZGVsbGUgcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMQorbXNnaWQgInNob3cgcHJvZ3Jlc3Mgd2hpbGUgZ2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICJ2aXN1YWxpenphIGwnYXZhbnphbWVudG8gZGVsbCdvcGVyYXppb25lIGRpIGdlbmVyYXppb25lIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDMKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmV2PiBpbiBjb3ZlciBsZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisidmlzdWFsaXp6YSBsZSBtb2RpZmljaGUgcmlzcGV0dG8gYSA8cmV2aXNpb25lPiBuZWxsYSBsZXR0ZXJhIGRpICIKKyJhY2NvbXBhZ25hbWVudG8gbyBpbiB1bmEgcGF0Y2ggc2luZ29sYSIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA2Cittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJlZnNwZWM+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKyJ2aXN1YWxpenphIGxlIG1vZGlmaWNoZSByaXNwZXR0byBhIDxzcGVjaWZpY2F0b3JlIHJldmlzaW9uZT4gbmVsbGEgbGV0dGVyYSAiCisiZGkgYWNjb21wYWduYW1lbnRvIG8gaW4gdW5hIHBhdGNoIHNpbmdvbGEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwOAorbXNnaWQgInBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiCittc2dzdHIgInBlcmNlbnR1YWxlIGluIGJhc2UgYSBjdWkgdmllbmUgcGVzYXRhIGxhIGNyZWF6aW9uZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNzkyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJXMiCittc2dzdHIgInJpZ2EgaWRlbnQgbm9uIHZhbGlkYTogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwNworbXNnaWQgIi1uIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICJsZSBvcHppb25pIC1uIGUgLWsgc29ubyBtdXR1YW1lbnRlIGVzY2x1c2l2ZSIKKworIzogYnVpbHRpbi9sb2cuYzoxODA5Cittc2dpZCAiLS1zdWJqZWN0LXByZWZpeC8tLXJmYyBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAibGUgb3B6aW9uaSAtLXN1YmplY3QtcHJlZml4Ly0tcmZjIGUgLWsgc29ubyBtdXR1YW1lbnRlIGVzY2x1c2l2ZSIKKworIzogYnVpbHRpbi9sb2cuYzoxODE3Cittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHkgbm9uIGhhIHNlbnNvIgorCisjOiBidWlsdGluL2xvZy5jOjE4MTkKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1zdGF0dXMgbm9uIGhhIHNlbnNvIgorCisjOiBidWlsdGluL2xvZy5jOjE4MjEKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tY2hlY2sgbm9uIGhhIHNlbnNvIgorCisjOiBidWlsdGluL2xvZy5jOjE4NTQKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAic3RhbmRhcmQgb3V0cHV0LCBvIGRpcmVjdG9yeSwgcXVhbGUgZGVpIGR1ZT8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk1OAorbXNnaWQgIi0taW50ZXJkaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiLS1pbnRlcmRpZmYgcmljaGllZGUgLS1jb3Zlci1sZXR0ZXIgbyB1bmEgc2luZ29sYSBwYXRjaCIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYyCittc2dpZCAiSW50ZXJkaWZmOiIKK21zZ3N0ciAiSW50ZXJkaWZmOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVyZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIkludGVyZGlmZiByaXNwZXR0byBhbGxhIHZlcnNpb25lICVkOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTY5Cittc2dpZCAiLS1jcmVhdGlvbi1mYWN0b3IgcmVxdWlyZXMgLS1yYW5nZS1kaWZmIgorbXNnc3RyICItLWNyZWF0aW9uLWZhY3RvciByaWNoaWVkZSAtLXJhbmdlLWRpZmYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk3MworbXNnaWQgIi0tcmFuZ2UtZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIi0tcmFuZ2UtZGlmZiByaWNoaWVkZSAtLWNvdmVyLWxldHRlciBvIHVuYSBzaW5nb2xhIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE5ODEKK21zZ2lkICJSYW5nZS1kaWZmOiIKK21zZ3N0ciAiUmFuZ2UtZGlmZjoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSYW5nZS1kaWZmIGFnYWluc3QgdiVkOiIKK21zZ3N0ciAiUmFuZ2UtZGlmZiByaXNwZXR0byBhbGxhIHZlcnNpb25lICVkOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgZmlsZSBmaXJtYSAnJXMnIgorCisjOiBidWlsdGluL2xvZy5jOjIwMjkKK21zZ2lkICJHZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgIkdlbmVyYXppb25lIGRlbGxlIHBhdGNoIGluIGNvcnNvIgorCisjOiBidWlsdGluL2xvZy5jOjIwNzMKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAiY3JlYXppb25lIGRlaSBmaWxlIGRpIG91dHB1dCBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjEzMgorbXNnaWQgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIgorbXNnc3RyICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0ZT5dXV0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSB0cm92YXJlIHVuIGJyYW5jaCByZW1vdG8gdHJhY2NpYXRvLCBzcGVjaWZpY2EgPHVwc3RyZWFtPiAiCisibWFudWFsbWVudGUuXG4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzAKK21zZ2lkICJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBscy1maWxlcyBbPG9wemlvbmk+XSBbPGZpbGU+Li4uXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyNgorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgImlkZW50aWZpY2EgbG8gc3RhdG8gZGVsIGZpbGUgY29uIGkgdGFnIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI4Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgInVzYSBsZXR0ZXJlIG1pbnVzY29sZSBwZXIgaSBmaWxlIGNoZSBzaSAnYXNzdW1vbm8gbm9uIG1vZGlmaWNhdGknIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMwCittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnZnNtb25pdG9yIGNsZWFuJyBmaWxlcyIKK21zZ3N0ciAidXNhIGxldHRlcmUgbWludXNjb2xlIHBlciBpIGZpbGUgJ2ZzbW9uaXRvciBjbGVhbiciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzIKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAidmlzdWFsaXp6YSBmaWxlIGluIGNhY2hlIG5lbGwnb3V0cHV0IChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEpIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM0Cittc2dpZCAic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgInZpc3VhbGl6emEgZmlsZSBlbGltaW5hdGkgbmVsbCdvdXRwdXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzYKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgInZpc3VhbGl6emEgZmlsZSBtb2RpZmljYXRpIG5lbGwnb3V0cHV0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM4Cittc2dpZCAic2hvdyBvdGhlciBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJ2aXN1YWxpenphIGFsdHJpIGZpbGUgbmVsbCdvdXRwdXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDAKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAidmlzdWFsaXp6YSBmaWxlIGlnbm9yYXRpIG5lbGwnb3V0cHV0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQzCittc2dpZCAic2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKyJ2aXN1YWxpenphIGlsIG5vbWUgZGVsbCdvZ2dldHRvIFwiY29udGVudXRpIG5lbGwnYXJlYSBkaSBzdGFnaW5nXCIgIgorIm5lbGwnb3V0cHV0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ1Cittc2dpZCAic2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCIKK21zZ3N0ciAidmlzdWFsaXp6YSBpIGZpbGUgbmVsIGZpbGVzeXN0ZW0gY2hlIGRldm9ubyBlc3NlcmUgcmltb3NzaSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NworbXNnaWQgInNob3cgJ290aGVyJyBkaXJlY3RvcmllcycgbmFtZXMgb25seSIKK21zZ3N0ciAidmlzdWFsaXp6YSBzb2xvIGkgbm9taSBkZWxsZSBkaXJlY3RvcnkgJ2FsdHJvJyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0OQorbXNnaWQgInNob3cgbGluZSBlbmRpbmdzIG9mIGZpbGVzIgorbXNnc3RyICJ2aXN1YWxpenphIGkgZmluZSByaWdhIGRlaSBmaWxlIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTUxCittc2dpZCAiZG9uJ3Qgc2hvdyBlbXB0eSBkaXJlY3RvcmllcyIKK21zZ3N0ciAibm9uIHZpc3VhbGl6emFyZSBsZSBkaXJlY3RvcnkgdnVvdGUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTQKK21zZ2lkICJzaG93IHVubWVyZ2VkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgInZpc3VhbGl6emEgZmlsZSBub24gc290dG9wb3N0aSBhIG1lcmdlIG5lbGwnb3V0cHV0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU2Cittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgInZpc3VhbGl6emEgaW5mb3JtYXppb25pIHJlc29sdmUtdW5kbyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1OAorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAic2FsdGEgaSBmaWxlIGNvcnJpc3BvbmRlbnRpIGEgXCJlc3ByZXNzaW9uZSByZWdvbGFyZVwiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTYxCittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAibGUgZXNwcmVzc2lvbmkgcmVnb2xhcmkgZGkgZXNjbHVzaW9uZSBzb25vIGxldHRlIGRhIDxmaWxlPiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NAorbXNnaWQgInJlYWQgYWRkaXRpb25hbCBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUgcGF0dGVybnMgaW4gPGZpbGU+IgorbXNnc3RyICIiCisibGVnZ2kgZXNwcmVzc2lvbmkgcmVnb2xhcmkgZGkgZXNjbHVzaW9uZSBhZ2dpdW50aXZlIHNwZWNpZmljaGUgcGVyIGRpcmVjdG9yeSAiCisiZGEgPGZpbGU+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY2Cittc2dpZCAiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIKK21zZ3N0ciAiYWdnaXVuZ2kgbGUgZXNjbHVzaW9uaSBzdGFuZGFyZCBkaSBHaXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzAKK21zZ2lkICJtYWtlIHRoZSBvdXRwdXQgcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAicmVuZGkgbCdvdXRwdXQgcmVsYXRpdm8gYWxsYSBkaXJlY3RvcnkgcmFkaWNlIGRlbCBwcm9nZXR0byIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MworbXNnaWQgInJlY3Vyc2UgdGhyb3VnaCBzdWJtb2R1bGVzIgorbXNnc3RyICJlc2VndWkgcmljb3JzaXZhbWVudGUgc3VpIHNvdHRvbW9kdWxpIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc1Cittc2dpZCAiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIgorbXNnc3RyICJzZSBkZWkgPGZpbGU+IG5vbiBzb25vIG5lbGwnaW5kaWNlLCBjb25zaWRlcmFsbyB1biBlcnJvcmUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzYKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAiZXNwcmVzc2lvbmUgYWxiZXJvIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc3Cittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiIgorImZpbmdpIGNoZSBpIHBlcmNvcnNpIHJpbW9zc2kgZGEgPGVzcHJlc3Npb25lIGFsYmVybz4gaW4gcG9pIHNpYW5vIGFuY29yYSAiCisicHJlc2VudGkiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzkKK21zZ2lkICJzaG93IGRlYnVnZ2luZyBkYXRhIgorbXNnc3RyICJ2aXN1YWxpenphIGluZm9ybWF6aW9uaSBkaSBkZWJ1ZyIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo5Cittc2dpZCAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPHJlcG9zaXRvcnk+IFs8cmVmcz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxlc2VndWliaWxlPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPHJlcG9zaXRvcnk+IFs8cmlmZXJpbWVudGk+Li4uXV0iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAibm9uIHN0YW1wYXJlIGwnVVJMIGRlbCByZW1vdG8iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAgYnVpbHRpbi9scy1yZW1vdGUuYzo2MiBidWlsdGluL3JlYmFzZS5jOjE1NjEKK21zZ2lkICJleGVjIgorbXNnc3RyICJlc2VndWliaWxlIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYxIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjMKK21zZ2lkICJwYXRoIG9mIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIGhvc3QiCittc2dzdHIgInBlcmNvcnNvIGRpIGdpdC11cGxvYWQtcGFjayBzdWxsJ2hvc3QgcmVtb3RvIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY1Cittc2dpZCAibGltaXQgdG8gdGFncyIKK21zZ3N0ciAibGltaXRhdGkgYWkgdGFnIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY2Cittc2dpZCAibGltaXQgdG8gaGVhZHMiCittc2dzdHIgImxpbWl0YXRpIGFsbGUgaGVhZCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NworbXNnaWQgImRvIG5vdCBzaG93IHBlZWxlZCB0YWdzIgorbXNnc3RyICJub24gdmlzdWFsaXp6YXJlIGkgdGFnIHJpbW9zc2kiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjkKK21zZ2lkICJ0YWtlIHVybC48YmFzZT4uaW5zdGVhZE9mIGludG8gYWNjb3VudCIKK21zZ3N0ciAidGllbmkgaW4gY29uc2lkZXJhemlvbmUgdXJsLjxiYXNlPi5pbnN0ZWFkT2YiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzIKK21zZ2lkICJleGl0IHdpdGggZXhpdCBjb2RlIDIgaWYgbm8gbWF0Y2hpbmcgcmVmcyBhcmUgZm91bmQiCittc2dzdHIgIiIKKyJlc2NpIGNvbiBjb2RpY2UgZCd1c2NpdGEgMiBzZSBub24gc29ubyBzdGF0aSB0cm92YXRpIHJpZmVyaW1lbnRpICIKKyJjb3JyaXNwb25kZW50aSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3NQorbXNnaWQgInNob3cgdW5kZXJseWluZyByZWYgaW4gYWRkaXRpb24gdG8gdGhlIG9iamVjdCBwb2ludGVkIGJ5IGl0IgorbXNnc3RyICJ2aXN1YWxpenphIHJpZmVyaW1lbnRvIHNvdHRvc3RhbnRlIG9sdHJlIGFsbCdvZ2dldHRvIGEgY3VpIHB1bnRhIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzozMAorbXNnaWQgImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBscy10cmVlIFs8b3B6aW9uaT5dIDxlc3ByZXNzaW9uZSBhbGJlcm8+IFs8cGVyY29yc28+Li4uXSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI4Cittc2dpZCAib25seSBzaG93IHRyZWVzIgorbXNnc3RyICJ2aXN1YWxpenphIHNvbG8gYWxiZXJpIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzAKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgImVzZWd1aSByaWNvcnNpdmFtZW50ZSBuZWkgc290dG9hbGJlcmkiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMgorbXNnaWQgInNob3cgdHJlZXMgd2hlbiByZWN1cnNpbmciCittc2dzdHIgInZpc3VhbGl6emEgZ2xpIGFsYmVyaSBkdXJhbnRlIGxhIHJpY29yc2lvbmUiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNQorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgInRlcm1pbmEgbGUgdm9jaSBjb24gdW4gYnl0ZSBOVUwiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNgorbXNnaWQgImluY2x1ZGUgb2JqZWN0IHNpemUiCittc2dzdHIgImluY2x1ZGkgZGltZW5zaW9uaSBvZ2dldHRvIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzggYnVpbHRpbi9scy10cmVlLmM6MTQwCittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAiZWxlbmNhIHNvbG8gaSBub21pIGZpbGUiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MworbXNnaWQgInVzZSBmdWxsIHBhdGggbmFtZXMiCittc2dzdHIgInVzYSBub21pIHBlcmNvcnNvIGNvbXBsZXRpIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDUKK21zZ2lkICJsaXN0IGVudGlyZSB0cmVlOyBub3QganVzdCBjdXJyZW50IGRpcmVjdG9yeSAoaW1wbGllcyAtLWZ1bGwtbmFtZSkiCittc2dzdHIgIiIKKyJlbGVuY2EgbCdpbnRlcm8gYWxiZXJvOyBub24gc29sbyBsYSBkaXJlY3RvcnkgY29ycmVudGUgKGltcGxpY2EgLS1mdWxsLW5hbWUpIgorCisjOiBidWlsdGluL21haWxzcGxpdC5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBtYm94OiAnJXMnIgorbXNnc3RyICJtYm94IHZ1b3RhOiAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6NTUKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IG1lcmdlIFs8b3B6aW9uaT5dIFs8Y29tbWl0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NgorbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU3Cittc2dpZCAiZ2l0IG1lcmdlIC0tY29udGludWUiCittc2dzdHIgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE5Cittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJsbyBzd2l0Y2ggJ20nIHJpY2hpZWRlIHVuIHZhbG9yZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJsJ29wemlvbmUgYCVzJyByaWNoaWVkZSB1biB2YWxvcmUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSB0cm92YXJlIGxhIHN0cmF0ZWdpYSBkaSBtZXJnZSAnJXMnLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkxlIHN0cmF0ZWdpZSBkaXNwb25pYmlsaSBzb25vOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiTGUgc3RyYXRlZ2llIHBlcnNvbmFsaXp6YXRlIGRpc3BvbmliaWxpIHNvbm86IgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ1IGJ1aWx0aW4vcHVsbC5jOjEzMgorbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIm5vbiB2aXN1YWxpenphcmUgdW4gZGlmZnN0YXQgYWwgdGVybWluZSBkZWwgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDggYnVpbHRpbi9wdWxsLmM6MTM1Cittc2dpZCAic2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICJ2aXN1YWxpenphIHVuIGRpZmZzdGF0IGFsIHRlcm1pbmUgZGVsIG1lcmdlIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ5IGJ1aWx0aW4vcHVsbC5jOjEzOAorbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIihzaW5vbmltbyBkaSAtLXN0YXQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUxIGJ1aWx0aW4vcHVsbC5jOjE0MQorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorImFnZ2l1bmdpIChhbCBwacO5IDxuPikgdm9jaSBkYWwgcmVnaXN0cm8gYnJldmUgYWwgbWVzc2FnZ2lvIGRpIGNvbW1pdCBkZWwgIgorIm1lcmdlIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU0IGJ1aWx0aW4vcHVsbC5jOjE0NworbXNnaWQgImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIgorbXNnc3RyICJjcmVhIHVuIHNpbmdvbG8gY29tbWl0IGFuemljaMOpIGVzZWd1aXJlIHVuIG1lcmdlIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU2IGJ1aWx0aW4vcHVsbC5jOjE1MAorbXNnaWQgInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIKK21zZ3N0ciAiZXNlZ3VpIHVuIGNvbW1pdCBzZSBpbCBtZXJnZSBoYSBzdWNjZXNzbyAoaW1wb3N0YXppb25lIHByZWRlZmluaXRhKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1OCBidWlsdGluL3B1bGwuYzoxNTMKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgIm1vZGlmaWNhIGlsIG1lc3NhZ2dpbyBwcmltYSBkaSBlc2VndWlyZSBpbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjAKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIgorbXNnc3RyICJjb25zZW50aSBmYXN0IGZvcndhcmQgKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjIgYnVpbHRpbi9wdWxsLmM6MTYwCittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAiaW50ZXJyb21waSBzZSBpbCBmYXN0IGZvcndhcmQgbm9uIMOoIHBvc3NpYmlsZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NiBidWlsdGluL3B1bGwuYzoxNjMKK21zZ2lkICJ2ZXJpZnkgdGhhdCB0aGUgbmFtZWQgY29tbWl0IGhhcyBhIHZhbGlkIEdQRyBzaWduYXR1cmUiCittc2dzdHIgInZlcmlmaWNhIGNoZSBpbCBjb21taXQgc3BlY2lmaWNhdG8gYWJiaWEgdW5hIGZpcm1hIEdQRyB2YWxpZGEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjcgYnVpbHRpbi9ub3Rlcy5jOjc4NyBidWlsdGluL3B1bGwuYzoxNjcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIwIGJ1aWx0aW4vcmViYXNlLmM6MTU3NSBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICJzdHJhdGVnaWEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjggYnVpbHRpbi9wdWxsLmM6MTY4Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIgorbXNnc3RyICJzdHJhdGVnaWEgZGkgbWVyZ2UgZGEgdXNhcmUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjkgYnVpbHRpbi9wdWxsLmM6MTcxCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICJvcHppb25lPXZhbG9yZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3MCBidWlsdGluL3B1bGwuYzoxNzIKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJvcHppb25lIHBlciBsYSBzdHJhdGVnaWEgZGkgbWVyZ2Ugc2VsZXppb25hdGEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzIKK21zZ2lkICJtZXJnZSBjb21taXQgbWVzc2FnZSAoZm9yIGEgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZSkiCittc2dzdHIgIm1lc3NhZ2dpbyBkaSBjb21taXQgZGVsIG1lcmdlIChwZXIgdW4gbWVyZ2Ugbm9uIGZhc3QgZm9yd2FyZCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzkKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiaW50ZXJyb21waSBpbCBtZXJnZSBhdHR1YWxtZW50ZSBpbiBjb3JzbyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MQorbXNnaWQgIi0tYWJvcnQgYnV0IGxlYXZlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgYWxvbmUiCittc2dzdHIgImVzZWd1aSAtLWFib3J0IG1hIG1hbnRpZW5pIGltbXV0YXRpIGwnaW5kaWNlIGUgbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgzCittc2dpZCAiY29udGludWUgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgImNvbnRpbnVhIGlsIG1lcmdlIGF0dHVhbG1lbnRlIGluIGNvcnNvIgorCisjOiBidWlsdGluL21lcmdlLmM6Mjg1IGJ1aWx0aW4vcHVsbC5jOjE3OQorbXNnaWQgImFsbG93IG1lcmdpbmcgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAiY29uc2VudGkgZGkgdW5pcmUgY3Jvbm9sb2dpZSBub24gY29ycmVsYXRlIgorCisjOiBidWlsdGluL21lcmdlLmM6MjkxCittc2dpZCAiYnlwYXNzIHByZS1tZXJnZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgImlnbm9yYSBnbGkgaG9vayBwcmUtbWVyZ2UtY29tbWl0IGUgY29tbWl0LW1zZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMwOAorbXNnaWQgImNvdWxkIG5vdCBydW4gc3Rhc2guIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGVzZWd1aXJlIHN0YXNoLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxMworbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAiZXNlY3V6aW9uZSBkaSBzdGFzaCBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAibm9uIMOoIHVuIG9nZ2V0dG8gdmFsaWRvOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM0MCBidWlsdGluL21lcmdlLmM6MzU3Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAicmVhZC10cmVlIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM4NworbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKG51bGxhIGRpIGN1aSBlc2VndWlyZSBsbyBzcXVhc2gpIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiQ29tbWl0IGRpIHNxdWFzaCAtLSBub24gYWdnaW9ybm8gSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiTmVzc3VuIG1lc3NhZ2dpbyBkaSBtZXJnZSAtLSBIRUFEIG5vbiB2aWVuZSBhZ2dpb3JuYXRvXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyBub24gcHVudGEgYWQgdW4gY29tbWl0IgorCisjOiBidWlsdGluL21lcmdlLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIlN0cmluZ2EgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBlcnJhdGE6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzA4Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiTm9uIGdlc3Rpc2NvIG51bGxhIGNoZSBub24gc2lhIGlsIG1lcmdlIGRpIGR1ZSBoZWFkLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICJPcHppb25lIHNjb25vc2NpdXRhIHBlciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgbGVnZ2VyZSBkYSAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIk5vbiBlc2VndW8gaWwgY29tbWl0IGRlbCBtZXJnZTsgdXNhICdnaXQgY29tbWl0JyBwZXIgY29tcGxldGFyZSBpbCBtZXJnZS5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwNAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCittc2dzdHIgIiIKKyJJbnNlcmlzY2kgdW4gbWVzc2FnZ2lvIGRpIGNvbW1pdCBwZXIgc3BpZWdhcmUgcGVyY2jDqSDDqCBuZWNlc3NhcmlvXG4iCisicXVlc3RvIG1lcmdlLCBpbiBwYXJ0aWNvbGFyZSBzZSBzaSBlc2VndWUgaWwgbWVyZ2UgZGkgdW4gdXBzdHJlYW1cbiIKKyJhZ2dpb3JuYXRvIGluIHVuIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwOQorbXNnaWQgIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIlVuIG1lc3NhZ2dpbyB2dW90byBpbnRlcnJvbXBlcsOgIGlsIGNvbW1pdC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkxlIHJpZ2hlIGNoZSBpbml6aWFubyBjb24gJyVjJyBzYXJhbm5vIGlnbm9yYXRlIGUgdW4gbWVzc2FnZ2lvIHZ1b3RvXG4iCisiaW50ZXJyb21wZXLDoCBpbCBjb21taXQuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NjUKK21zZ2lkICJFbXB0eSBjb21taXQgbWVzc2FnZS4iCittc2dzdHIgIk1lc3NhZ2dpbyBkaSBjb21taXQgdnVvdG8uIgorCisjOiBidWlsdGluL21lcmdlLmM6ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAiU3BsZW5kaWRvLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iCittc2dzdHIgIiIKKyJNZXJnZSBhdXRvbWF0aWNvIGZhbGxpdG87IHJpc29sdmkgaSBjb25mbGl0dGkgZWQgZXNlZ3VpIGlsIGNvbW1pdFxuIgorImRlbCByaXN1bHRhdG8uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODAKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5lc3N1biBicmFuY2ggY29ycmVudGUuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTgyCittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJOZXNzdW4gcmVtb3RlIHBlciBpbCBicmFuY2ggY29ycmVudGUuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg0Cittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJOZXNzdW4gdXBzdHJlYW0gZGkgZGVmYXVsdCBkZWZpbml0byBwZXIgaWwgYnJhbmNoIGNvcnJlbnRlLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICJOZXNzdW4gYnJhbmNoIGNoZSB0cmFjY2kgdW4gcmVtb3RvIHBlciAlcyBkYSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIHZhbHVlICclcycgaW4gZW52aXJvbm1lbnQgJyVzJyIKK21zZ3N0ciAiVmFsb3JlIGVycmF0byAnJXMnIG5lbGwnYW1iaWVudGUgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UgaW4gJXM6ICVzIgorbXNnc3RyICJub24gw6ggcXVhbGNvc2EgZGkgY3VpIHBvc3NpYW1vIGVzZWd1aXJlIGlsIG1lcmdlIGluICVzOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExODMKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAibm9uIMOoIHF1YWxjb3NhIGRpIGN1aSBwb3NzaWFtbyBlc2VndWlyZSBpbCBtZXJnZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODYKK21zZ2lkICItLWFib3J0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWFib3J0IG5vbiByaWNoaWVkZSBhcmdvbWVudGkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjkwCittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICJOb24gYyfDqCBuZXNzdW4gbWVyZ2UgZGEgaW50ZXJyb21wZXJlIChNRVJHRV9IRUFEIG1hbmNhbnRlKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk5Cittc2dpZCAiLS1xdWl0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLXF1aXQgbm9uIHJpY2hpZWRlIGFyZ29tZW50aSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTIKK21zZ2lkICItLWNvbnRpbnVlIGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWNvbnRpbnVlIG5vbiByaWNoaWVkZSBhcmdvbWVudGkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzE2Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgaW4gcHJvZ3Jlc3MgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICJOb24gYyfDqCBuZXNzdW4gbWVyZ2UgaW4gY29yc28gKE1FUkdFX0hFQUQgbWFuY2FudGUpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzIKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiTm9uIGhhaSBjb25jbHVzbyBpbCBtZXJnZSAoTUVSR0VfSEVBRCBlc2lzdGUpLlxuIgorIkVzZWd1aSBpbCBjb21taXQgZGVsbGUgbW9kaWZpY2hlIHByaW1hIGRpIGVzZWd1aXJlIGlsIG1lcmdlLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzkKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiTm9uIGhhaSBjb25jbHVzbyBpbCBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBlc2lzdGUpLlxuIgorIkVzZWd1aSBpbCBjb21taXQgZGVsbGUgbW9kaWZpY2hlIHByaW1hIGRpIGVzZWd1aXJlIGlsIG1lcmdlLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNDIKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIklsIGNoZXJyeS1waWNrIG5vbiDDqCBzdGF0byBjb25jbHVzbyAoQ0hFUlJZX1BJQ0tfSEVBRCBlc2lzdGUpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTYKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiTm9uIMOoIHBvc3NpYmlsZSBjb21iaW5hcmUgLS1zcXVhc2ggY29uIC0tbm8tZmYuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1OAorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tY29tbWl0LiIKK21zZ3N0ciAiTm9uIMOoIHBvc3NpYmlsZSBjb21iaW5hcmUgLS1zcXVhc2ggY29uIC0tY29tbWl0LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNzQKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiTmVzc3VuIGNvbW1pdCBzcGVjaWZpY2F0byBlIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vbiBpbXBvc3RhdG8uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5MQorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICJMbyBzcXVhc2ggZGkgdW4gY29tbWl0IGluIHVuJ2hlYWQgdnVvdGEgbm9uIMOoIGFuY29yYSBzdXBwb3J0YXRvIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5MworbXNnaWQgIk5vbi1mYXN0LWZvcndhcmQgY29tbWl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW50byBhbiBlbXB0eSBoZWFkIgorbXNnc3RyICJVbiBjb21taXQgbm9uIGZhc3QgZm9yd2FyZCBub24gaGEgc2Vuc28gaW4gdW4naGVhZCB2dW90YSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSBub24gw6ggcXVhbGNvc2EgcGVyIGN1aSBwb3NzaWFtbyBlc2VndWlyZSBpbCBtZXJnZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MDAKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICJTaSBwdcOyIGVzZWd1aXJlIHNvbG8gaWwgbWVyZ2UgZGkgdW5vIGUgdW4gc29sbyBjb21taXQgaW4gdW4naGVhZCB2dW90YSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0ODEKK21zZ2lkICJyZWZ1c2luZyB0byBtZXJnZSB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJtaSByaWZpdXRvIGRpIGVzZWd1aXJlIGlsIG1lcmdlIGRpIGNyb25vbG9naWUgbm9uIGNvcnJlbGF0ZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0OTAKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIgorbXNnc3RyICJHacOgIGFnZ2lvcm5hdG8uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAiQWdnaW9ybmFtZW50byBkaSAlcy4uJXNcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iCittc2dzdHIgIlByb3ZvIGNvbiB1biBtZXJnZSB2ZXJhbWVudGUgYmFuYWxlIGRlbnRybyBsJ2luZGljZS4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICJOby5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NzQKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIFllZWFoISIKK21zZ3N0ciAiR2nDoCBhZ2dpb3JuYXRvLiBPaCBzw6whIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU4MAorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAiRmFzdCBmb3J3YXJkIG5vbiBwb3NzaWJpbGUsIGludGVycm9tcG8gbCdvcGVyYXppb25lLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDMgYnVpbHRpbi9tZXJnZS5jOjE2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIlJpcHJpc3Rpbm8gbCdhbGJlcm8gaW4gdW5vIHN0YXRvIHB1bGl0by4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAiVGVudGF0aXZvIGNvbiBsYSBzdHJhdGVnaWEgZGkgbWVyZ2UgJXMuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIk5lc3N1bmEgc3RyYXRlZ2lhIGRpIG1lcmdlIGhhIGdlc3RpdG8gaWwgbWVyZ2UuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICJNZXJnZSBjb24gbGEgc3RyYXRlZ2lhICVzIGZhbGxpdG8uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICJVc28gJXMgcGVyIHByZXBhcmFyZSB1bmEgcmlzb2x1emlvbmUgbWFudWFsZS5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAiIgorIklsIG1lcmdlIGF1dG9tYXRpY28gw6ggYW5kYXRvIGEgYnVvbiBmaW5lOyBmZXJtYXRvIHByaW1hIGRlbCBjb21taXQgY29tZSAiCisicmljaGllc3RvXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMyCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMzCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzQKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDxjb21taXQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM2Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8cmlmZXJpbWVudG8+IFs8Y29tbWl0Pl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1MworbXNnaWQgIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIKK21zZ3N0ciAibWFuZGEgaW4gb3V0cHV0IHR1dHRpIGdsaSBhbnRlbmF0aSBjb211bmkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NQorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAidHJvdmEgZ2xpIGFudGVuYXRpIHBlciB1biBzaW5nb2xvIG1lcmdlIGEgbiB2aWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NworbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICJlbGVuY2EgbGUgcmV2aXNpb25pIG5vbiByYWdnaXVuZ2liaWxpIGRhbGxlIGFsdHJlIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTkKK21zZ2lkICJpcyB0aGUgZmlyc3Qgb25lIGFuY2VzdG9yIG9mIHRoZSBvdGhlcj8iCittc2dzdHIgImlsIHByaW1vIGFyZ29tZW50byDDqCBhbnRlbmF0byBkZWxsJ2FsdHJvPyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTYxCittc2dpZCAiZmluZCB3aGVyZSA8Y29tbWl0PiBmb3JrZWQgZnJvbSByZWZsb2cgb2YgPHJlZj4iCittc2dzdHIgIiIKKyJ0cm92YSBpbCBwdW50byBkaSBmb3JrIGRpIDxjb21taXQ+IGRhbCByZWdpc3RybyBkZWkgcmlmZXJpbWVudGkgZGkgIgorIjxyaWZlcmltZW50bz4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjkKK21zZ2lkICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcHRpb25zPl0gWy1MIDxuYW1lMT4gWy1MIDxvcmlnPiBbLUwgPG5hbWUyPl1dXSA8ZmlsZTE+ICIKKyI8b3JpZy1maWxlPiA8ZmlsZTI+IgorbXNnc3RyICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcHppb25pPl0gWy1MIDxub21lMT4gWy1MIDxvcmlnaW5hbGU+IFstTCA8bm9tZTI+XV1dICIKKyI8ZmlsZTE+IDxmaWxlIG9yaWdpbmFsZT4gPGZpbGUyPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJpbnZpYSBpIHJpc3VsdGF0aSBhbGxvIHN0YW5kYXJkIG91dHB1dCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzYKK21zZ2lkICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIKK21zZ3N0ciAidXNhIHVuIG1lcmdlIGJhc2F0byBzdSBkaWZmMyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgInBlciBpIGNvbmZsaXR0aSwgdXNhIGxhIG5vc3RyYSB2ZXJzaW9uZSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAicGVyIGkgY29uZmxpdHRpLCB1c2EgbGEgbG9ybyB2ZXJzaW9uZSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDEKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIgorbXNnc3RyICJwZXIgaSBjb25mbGl0dGksIHVzYSB1bmEgdmVyc2lvbmUgdW5pdGEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ0Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoaXMgbWFya2VyIHNpemUiCittc2dzdHIgInBlciBpIGNvbmZsaXR0aSwgdXNhIHF1ZXN0YSBkaW1lbnNpb25lIGRlaSBjb250cmFzc2VnbmkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ1Cittc2dpZCAiZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzIgorbXNnc3RyICJub24gZW1ldHRlcmUgYXZ2aXNpIGluIGNhc28gZGkgY29uZmxpdHRpIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NworbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIKK21zZ3N0ciAiaW1wb3N0YSBldGljaGV0dGUgcGVyIGZpbGUxL2ZpbGUgb3JpZ2luYWxlL2ZpbGUyIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uICVzIgorbXNnc3RyICJvcHppb25lIHNjb25vc2NpdXRhICVzIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ29nZ2V0dG8gJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiBJZ25vcmluZyAlcy4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiBJZ25vcmluZyAlcy4iCittc2dzdHJbMF0gImltcG9zc2liaWxlIGdlc3RpcmUgcGnDuSBkaSAlZCBiYXNlLiBJZ25vcm8gJXMuIgorbXNnc3RyWzFdICJpbXBvc3NpYmlsZSBnZXN0aXJlIHBpw7kgZGkgJWQgYmFzaS4gSWdub3JvICVzLiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo2NQorbXNnaWQgIm5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgIm5vbiBnZXN0aXNjbyBudWxsYSBjaGUgbm9uIHNpYSBpbCBtZXJnZSBkaSBkdWUgaGVhZC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzQgYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSByZWYgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmlzb2x2ZXJlIGlsIHJpZmVyaW1lbnRvICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzXG4iCittc2dzdHIgIk1lcmdlIGRpICVzIGNvbiAlcyBpbiBjb3Jzb1xuIgorCisjOiBidWlsdGluL21rdHJlZS5jOjY2Cittc2dpZCAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKK21zZ3N0ciAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTQKK21zZ2lkICJpbnB1dCBpcyBOVUwgdGVybWluYXRlZCIKK21zZ3N0ciAibCdpbnB1dCDDqCB0ZXJtaW5hdG8gZGEgTlVMIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NSBidWlsdGluL3dyaXRlLXRyZWUuYzoyNgorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiY29uc2VudGkgb2dnZXR0aSBtYW5jYW50aSIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTYKK21zZ2lkICJhbGxvdyBjcmVhdGlvbiBvZiBtb3JlIHRoYW4gb25lIHRyZWUiCittc2dzdHIgImNvbnNlbnRpIGxhIGNyZWF6aW9uZSBkaSBwacO5IGRpIHVuIGFsYmVybyIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6OQorbXNnaWQgIiIKKyJnaXQgbXVsdGktcGFjay1pbmRleCBbPG9wdGlvbnM+XSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC0iCisic2l6ZT08c2l6ZT4pIgorbXNnc3RyICIiCisiZ2l0IG11bHRpLXBhY2staW5kZXggWzxvcHppb25pPl0gKHdyaXRlfHZlcmlmeXxleHBpcmV8cmVwYWNrIC0tYmF0Y2gtIgorInNpemU9PGRpbWVuc2lvbmU+KSIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjYKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2V0IG9mIHBhY2tmaWxlIGFuZCBwYWNrLWluZGV4IHBhaXJzIgorbXNnc3RyICIiCisiZGlyZWN0b3J5IG9nZ2V0dGkgY29udGVuZW50ZSB1biBpbnNpZW1lIGRpIGNvcHBpZSBwYWNrZmlsZSBlIHBhY2staW5kZXgiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI5Cittc2dpZCAiIgorImR1cmluZyByZXBhY2ssIGNvbGxlY3QgcGFjay1maWxlcyBvZiBzbWFsbGVyIHNpemUgaW50byBhIGJhdGNoIHRoYXQgaXMgIgorImxhcmdlciB0aGFuIHRoaXMgc2l6ZSIKK21zZ3N0ciAiIgorImR1cmFudGUgaWwgcmVwYWNrLCByYWNjb2dsaSBpIGZpbGUgcGFjayBkaSBkaW1lbnNpb25pIHBpw7kgcGljY29sZSBpbiB1biAiCisiZ3J1cHBvIHBpw7kgZ3JhbmRlIGRpIHF1ZXN0ZSBkaW1lbnNpb25pIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo1MCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjY3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICJ0cm9wcGkgYXJnb21lbnRpIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo2MAorbXNnaWQgIi0tYmF0Y2gtc2l6ZSBvcHRpb24gaXMgb25seSBmb3IgJ3JlcGFjaycgc3ViY29tbWFuZCIKK21zZ3N0ciAibCdvcHppb25lIC0tYmF0Y2gtc2l6ZSDDqCBjb25zZW50aXRhIHNvbG8gcGVyIGlsIHNvdHRvY29tYW5kbyAncmVwYWNrJyIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJzb3R0b2NvbWFuZG8gc2Nvbm9zY2l1dG86ICVzIgorCisjOiBidWlsdGluL212LmM6MTgKK21zZ2lkICJnaXQgbXYgWzxvcHRpb25zPl0gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIKK21zZ3N0ciAiZ2l0IG12IFs8b3B6aW9uaT5dIDxzb3JnZW50ZT4uLi4gPGRlc3RpbmF6aW9uZT4iCisKKyM6IGJ1aWx0aW4vbXYuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgIkxhIGRpcmVjdG9yeSAlcyDDqCBuZWxsJ2luZGljZSBlIG5vbiDDqCBzcGVjaWZpY2F0byB1biBzb3R0b21vZHVsbz8iCisKKyM6IGJ1aWx0aW4vbXYuYzo4NQorbXNnaWQgIlBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisiRXNlZ3VpIGxvIHN0YWdlIGRlbGxlIG1vZGlmaWNoZSBhIC5naXRtb2R1bGVzIG8gZXNlZ3VpbmUgbG8gc3Rhc2ggcGVyICIKKyJwcm9jZWRlcmUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiJS4qcyDDqCBuZWxsJ2luZGljZSIKKworIzogYnVpbHRpbi9tdi5jOjEyNQorbXNnaWQgImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiZm9yemEgc3Bvc3RhbWVudG8vcmlkZW5vbWluYXppb25lIGFuY2hlIHNlIGxhIGRlc3RpbmF6aW9uZSBlc2lzdGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjcKK21zZ2lkICJza2lwIG1vdmUvcmVuYW1lIGVycm9ycyIKK21zZ3N0ciAic2FsdGEgZXJyb3JpIHNwb3N0YW1lbnRvL3JpZGVub21pbmF6aW9uZSIKKworIzogYnVpbHRpbi9tdi5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAibGEgZGVzdGluYXppb25lICclcycgbm9uIMOoIHVuYSBkaXJlY3RvcnkiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICJDb250cm9sbG8gbGEgcmlkZW5vbWluYXppb25lIGRpICclcycgaW4gJyVzJ1xuIgorCisjOiBidWlsdGluL212LmM6MTg0Cittc2dpZCAiYmFkIHNvdXJjZSIKK21zZ3N0ciAic291cmdlbnRlIGVycmF0YSIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIm5vbiDDqCBwb3NzaWJpbGUgc3Bvc3RhcmUgbGEgZGlyZWN0b3J5IGluIHPDqSBzdGVzc2EiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTAKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICJub24gw6ggcG9zc2liaWxlIHNwb3N0YXJlIGxhIGRpcmVjdG9yeSBzdSB1biBmaWxlIgorCisjOiBidWlsdGluL212LmM6MTk5Cittc2dpZCAic291cmNlIGRpcmVjdG9yeSBpcyBlbXB0eSIKK21zZ3N0ciAibGEgZGlyZWN0b3J5IHNvcmdlbnRlIMOoIHZ1b3RhIgorCisjOiBidWlsdGluL212LmM6MjI0Cittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAibm9uIMOoIHNvdHRvIGNvbnRyb2xsbyBkaSB2ZXJzaW9uZSIKKworIzogYnVpbHRpbi9tdi5jOjIyNworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAibGEgZGVzdGluYXppb25lIGVzaXN0ZSIKKworIzogYnVpbHRpbi9tdi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICJzb3ZyYXNjcml0dHVyYSBkaSAlcyBpbiBjb3JzbyIKKworIzogYnVpbHRpbi9tdi5jOjIzOAorbXNnaWQgIkNhbm5vdCBvdmVyd3JpdGUiCittc2dzdHIgIkltcG9zc2liaWxlIHNvdnJhc2NyaXZlcmUiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDEKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgImZvbnRpIG11bHRpcGxlIHBlciBsYSBzdGVzc2EgZGVzdGluYXppb25lIgorCisjOiBidWlsdGluL212LmM6MjQzCittc2dpZCAiZGVzdGluYXRpb24gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJsYSBkaXJlY3RvcnkgZGkgZGVzdGluYXppb25lIG5vbiBlc2lzdGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiVzLCBzb3JnZW50ZT0lcywgZGVzdGluYXppb25lPSVzIgorCisjOiBidWlsdGluL212LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIlJpbm9taW5hemlvbmUgZGkgJXMgaW4gJXMgaW4gY29yc29cbiIKKworIzogYnVpbHRpbi9tdi5jOjI3NyBidWlsdGluL3JlbW90ZS5jOjc4MSBidWlsdGluL3JlcGFjay5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAicmlub21pbmEgZGkgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9wemlvbmk+XSA8Y29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NgorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8b3B6aW9uaT5dIC0tYWxsIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY3Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tc3RkaW4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9wemlvbmk+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI0Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICJzdGFtcGEgc29sbyBpIG5vbWkgKG5vbiBsbyBTSEEtMSkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjUKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgInVzYSBzb2xvIHRhZyBwZXIgZGVub21pbmFyZSBpIGNvbW1pdCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUyNworbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJ1c2Egc29sbyBpIHJpZmVyaW1lbnRpIGNvcnJpc3BvbmRlbnRpIGEgPHBhdHRlcm4+IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI5Cittc2dpZCAiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJpZ25vcmEgaSByaWZlcmltZW50aSBjb3JyaXNwb25kZW50aSBhIDxwYXR0ZXJuPiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUzMQorbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgImVsZW5jYSB0dXR0aSBpIGNvbW1pdCByYWdnaXVuZ2liaWxpIGRhIHR1dHRpIGkgcmlmZXJpbWVudGkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzIKK21zZ2lkICJyZWFkIGZyb20gc3RkaW4iCittc2dzdHIgImxlZ2dpIGRhbGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTMzCittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIgorbXNnc3RyICJjb25zZW50aSBkaSBzdGFtcGFyZSBub21pIGBub24gZGVmaW5pdG9gIChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTM5Cittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbiB0aGUgaW5wdXQgKGludGVybmFsIHVzZSkiCittc2dzdHIgImRlcmVmZXJlbnppYSB0YWcgbmVsbCdpbnB1dCAodXNvIGludGVybm8pIgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8cmlmZXJpbWVudG8gbm90ZT5dIFtsaXN0IFs8b2dnZXR0bz5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI5Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gIgorInwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8cmlmZXJpbWVudG8gbm90ZT5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gIgorIjxtZXNzYWdnaW8+IHwgLUYgPGZpbGU+IHwgKC1jIHwgLUMpIDxvZ2dldHRvPl0gWzxvZ2dldHRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8cmlmZXJpbWVudG8gbm90ZT5dIGNvcHkgWy1mXSA8b2dnZXR0byBzb3JnZW50ZT4gPG9nZ2V0dG8gIgorImRlc3RpbmF6aW9uZT4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICIKKyIoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxyaWZlcmltZW50byBub3RlPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPG1lc3NhZ2dpbz4gIgorInwgLUYgPGZpbGU+IHwgKC1jIHwgLUMpIDxvZ2dldHRvPl0gWzxvZ2dldHRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMgorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHJpZmVyaW1lbnRvIG5vdGU+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9nZ2V0dG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyaWZlcmltZW50byBub3RlPl0gc2hvdyBbPG9nZ2V0dG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM0Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5Pl0gPG5vdGVzLXJlZj4iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxyaWZlcmltZW50byBub3RlPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ2lhPl0gIgorIjxyaWZlcmltZW50byBub3RlPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNworbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHJlbW92ZSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyaWZlcmltZW50byBub3RlPl0gcmVtb3ZlIFs8b2dnZXR0bz4uLi5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW5dIFstdl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHJpZmVyaW1lbnRvIG5vdGU+XSBwcnVuZSBbLW5dIFstdl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHJpZmVyaW1lbnRvIG5vdGU+XSBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQKK21zZ2lkICJnaXQgbm90ZXMgW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbbGlzdCBbPG9nZ2V0dG8+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OQorbXNnaWQgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFkZCBbPG9wemlvbmk+XSBbPG9nZ2V0dG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgWzxvZ2dldHRvPl0gPG9nZ2V0dG8gc29yZ2VudGU+IDxvZ2dldHRvIGRlc3RpbmF6aW9uZT4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NQorbXNnaWQgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD5dLi4uIgorbXNnc3RyICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8b2dnZXR0byBzb3JnZW50ZT4gPG9nZ2V0dG8gZGVzdGluYXppb25lPl0uLi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MAorbXNnaWQgImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wemlvbmk+XSBbPG9nZ2V0dG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY1Cittc2dpZCAiZ2l0IG5vdGVzIGVkaXQgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGVkaXQgWzxvZ2dldHRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MAorbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBzaG93IFs8b2dnZXR0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzLXJlZj4iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSBbPG9wemlvbmk+XSA8cmlmZXJpbWVudG8gbm90ZT4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B6aW9uaT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzcKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcHppb25pPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MgorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9nZ2V0dG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3Cittc2dpZCAiZ2l0IG5vdGVzIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHppb25pPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MgorbXNnaWQgImdpdCBub3RlcyBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3Cittc2dpZCAiV3JpdGUvZWRpdCB0aGUgbm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgb2JqZWN0OiIKK21zZ3N0ciAiU2NyaXZpL21vZGlmaWNhIGxlIG5vdGUgcGVyIGwnb2dnZXR0byBzZWd1ZW50ZToiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGF2dmlhcmUgJ3Nob3cnIHBlciBsJ29nZ2V0dG8gJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1NAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdzaG93JyBvdXRwdXQiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgbCdvdXRwdXQgZGkgJ3Nob3cnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5pc2ggJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdGVybWluYXJlICdzaG93JyBwZXIgbCdvZ2dldHRvICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxOTcKK21zZ2lkICJwbGVhc2Ugc3VwcGx5IHRoZSBub3RlIGNvbnRlbnRzIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24iCittc2dzdHIgImZvcm5pc2NpIGkgY29udGVudXRpIGRlbGxlIG5vdGUgdXNhbmRvIGwnb3B6aW9uZSAtbSBvIC1GIgorCisjOiBidWlsdGluL25vdGVzLmM6MjA2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBsJ29nZ2V0dG8gbm90YSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAiaSBjb250ZW51dGkgZGVsbGEgbm90YSBzb25vIHN0YXRpIGxhc2NpYXRpIGluICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6MjQyIGJ1aWx0aW4vdGFnLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBhcHJpcmUgbyBsZWdnZXJlICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjMgYnVpbHRpbi9ub3Rlcy5jOjMxMyBidWlsdGluL25vdGVzLmM6MzE1CisjOiBidWlsdGluL25vdGVzLmM6MzgzIGJ1aWx0aW4vbm90ZXMuYzo0MzggYnVpbHRpbi9ub3Rlcy5jOjUyNgorIzogYnVpbHRpbi9ub3Rlcy5jOjUzMSBidWlsdGluL25vdGVzLmM6NjEwIGJ1aWx0aW4vbm90ZXMuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgImltcG9zc2liaWxlIHJpc29sdmVyZSAnJXMnIGNvbWUgcmlmZXJpbWVudG8gdmFsaWRvLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgImxldHR1cmEgZGVsbCdvZ2dldHRvICclcycgbm9uIHJpdXNjaXRhLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaSBkYXRpIGRlbGxhIG5vdGEgZGFsbCdvZ2dldHRvIG5vbiBibG9iICclcycuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAicmlnYSBkaSBpbnB1dCBtYWxmb3JtYXRhOiAnJXMnLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiY29waWEgZGVsbGUgbm90ZSBkYSAnJXMnIGEgJyVzJyBub24gcml1c2NpdGEiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgZmlyc3QgJXMgd2lsbCBiZSByZXBsYWNlZCBieSBhIGdpdAorIy4gbm90ZXMgY29tbWFuZDogJ2FkZCcsICdtZXJnZScsICdyZW1vdmUnLCBldGMuCisjLgorIzogYnVpbHRpbi9ub3Rlcy5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byAlcyBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIiIKKyJtaSByaWZpdXRvIGRpIGVzZWd1aXJlICVzIGRlbGxlIG5vdGUgaW4gJXMgKGFsIGRpIGZ1b3JpIGRpIHJlZnMvbm90ZXMvKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3NiBidWlsdGluL25vdGVzLmM6NDMxIGJ1aWx0aW4vbm90ZXMuYzo1MDkKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MjEgYnVpbHRpbi9ub3Rlcy5jOjU5OCBidWlsdGluL25vdGVzLmM6NjY1CisjOiBidWlsdGluL25vdGVzLmM6ODE1IGJ1aWx0aW4vbm90ZXMuYzo5NjMgYnVpbHRpbi9ub3Rlcy5jOjk4NQorbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgInRyb3BwaSBwYXJhbWV0cmkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODkgYnVpbHRpbi9ub3Rlcy5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICJuZXNzdW5hIG5vdGEgdHJvdmF0YSBwZXIgbCdvZ2dldHRvICVzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMCBidWlsdGluL25vdGVzLmM6NTc2Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAiY29udGVudXRpIGRlbGxhIG5vdGEgY29tZSBzdHJpbmdhIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEzIGJ1aWx0aW4vbm90ZXMuYzo1NzkKK21zZ2lkICJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIKK21zZ3N0ciAiY29udGVudXRpIGRlbGxhIG5vdGEgaW4gdW4gZmlsZSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxNiBidWlsdGluL25vdGVzLmM6NTgyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICJyaXVzYSBsJ29nZ2V0dG8gbm90YSBzcGVjaWZpY2F0byBwZXIgcG9pIG1vZGlmaWNhcmxvIgorCisjOiBidWlsdGluL25vdGVzLmM6NDE5IGJ1aWx0aW4vbm90ZXMuYzo1ODUKK21zZ2lkICJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgInJpdXNhIGwnb2dnZXR0byBub3RhIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL25vdGVzLmM6NDIyIGJ1aWx0aW4vbm90ZXMuYzo1ODgKK21zZ2lkICJhbGxvdyBzdG9yaW5nIGVtcHR5IG5vdGUiCittc2dzdHIgImNvbnNlbnRpIGlsIHNhbHZhdGFnZ2lvIGRpIHVuYSBub3RhIHZ1b3RhIgorCisjOiBidWlsdGluL25vdGVzLmM6NDIzIGJ1aWx0aW4vbm90ZXMuYzo0OTYKK21zZ2lkICJyZXBsYWNlIGV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICJzb3N0aXR1aXNjaSBsZSBub3RlIGVzaXN0ZW50aSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGFnZ2l1bmdlcmUgbm90ZS4gVHJvdmF0ZSBub3RlIGVzaXN0ZW50aSBwZXIgbCdvZ2dldHRvICVzLiBVc2EgJy0iCisiZicgcGVyIHNvdnJhc2NyaXZlcmUgbGUgbm90ZSBlc2lzdGVudGkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjMgYnVpbHRpbi9ub3Rlcy5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIlNvdnJhc2NyaXR0dXJhIGRlbGxlIG5vdGUgZXNpc3RlbnRpIHBlciBsJ29nZ2V0dG8gJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3NSBidWlsdGluL25vdGVzLmM6NjM3IGJ1aWx0aW4vbm90ZXMuYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIlJpbW96aW9uZSBkZWxsYSBub3RhIHBlciBsJ29nZ2V0dG8gJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5NworbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICJsZWdnaSBvZ2dldHRpIGRhbGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL25vdGVzLmM6NDk5Cittc2dpZCAibG9hZCByZXdyaXRpbmcgY29uZmlnIGZvciA8Y29tbWFuZD4gKGltcGxpZXMgLS1zdGRpbikiCittc2dzdHIgIiIKKyJjYXJpY2EgbGEgY29uZmlndXJhemlvbmUgZGkgcmlzY3JpdHR1cmEgcGVyIDxjb21hbmRvPiAoaW1wbGljYSAtLXN0ZGluKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxNworbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAidHJvcHBpIHBvY2hpIHBhcmFtZXRyaSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBjb3BpYXJlIGxlIG5vdGUuIFRyb3ZhdGUgbm90ZSBlc2lzdGVudGkgcGVyIGwnb2dnZXR0byAlcy4gVXNhICctIgorImYnIHBlciBzb3ZyYXNjcml2ZXJlIGxlIG5vdGUgZXNpc3RlbnRpIgorCisjOiBidWlsdGluL25vdGVzLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICJub3RlIG1hbmNhbnRpIHBlciBsJ29nZ2V0dG8gc29yZ2VudGUgJXMuIEltcG9zc2liaWxlIGNvcGlhcmUuIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyJMZSBvcHppb25pIC1tLy1GLy1jLy1DIHBlciBpbCBzb3R0b2NvbWFuZG8gJ2VkaXQnIHNvbm8gZGVwcmVjYXRlLlxuIgorIlVzYSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgYWwgbG9ybyBwb3N0by5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY5OAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiCittc2dzdHIgImVsaW1pbmF6aW9uZSBkZWwgcmlmZXJpbWVudG8gTk9URVNfTUVSR0VfUEFSVElBTCBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDAKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgImVsaW1pbmF6aW9uZSBkZWwgcmlmZXJpbWVudG8gTk9URVNfTUVSR0VfUkVGIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwMgorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJ2dpdCBub3RlcyBtZXJnZScgd29ya3RyZWUiCittc2dzdHIgInJpbW96aW9uZSBkZWxsJ2FsYmVybyBkaSBsYXZvcm8gZGkgJ2dpdCBub3RlcyBtZXJnZScgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL25vdGVzLmM6NzIyCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiCittc2dzdHIgImxldHR1cmEgZGVsIHJpZmVyaW1lbnRvIE5PVEVTX01FUkdFX1BBUlRJQUwgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI0Cittc2dpZCAiY291bGQgbm90IGZpbmQgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iCittc2dzdHIgImltcG9zc2liaWxlIHRyb3ZhcmUgaWwgY29tbWl0IGRhIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGNvbW1pdCBkYSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjczOQorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlIE5PVEVTX01FUkdFX1JFRiIKK21zZ3N0ciAicmlzb2x1emlvbmUgZGkgTk9URVNfTUVSR0VfUkVGIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc0MgorbXNnaWQgImZhaWxlZCB0byBmaW5hbGl6ZSBub3RlcyBtZXJnZSIKK21zZ3N0ciAiZmluYWxpenphemlvbmUgZGVsIG1lcmdlIGRlbGxlIG5vdGUgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL25vdGVzLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm90ZXMgbWVyZ2Ugc3RyYXRlZ3kgJXMiCittc2dzdHIgInN0cmF0ZWdpYSBkaSBtZXJnZSBkZWxsZSBub3RlICVzIHNjb25vc2NpdXRhIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg0Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJPcHppb25pIGdlbmVyYWxpIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg2Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSBtZXJnZSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4OAorbXNnaWQgIiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCittc2dzdHIgIiIKKyJyaXNvbHZpIGkgY29uZmxpdHRpIGRlbGxlIG5vdGUgdXNhbmRvIGxhIHN0cmF0ZWdpYSBkYXRhIChtYW51YWwvb3Vycy90aGVpcnMvIgorInVuaW9uL2NhdF9zb3J0X3VuaXEpIgorCisjOiBidWlsdGluL25vdGVzLmM6NzkwCittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiQ29tbWl0IGRlbGxlIG5vdGUgbm9uIHNvdHRvcG9zdGUgYSBtZXJnZSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MgorbXNnaWQgImZpbmFsaXplIG5vdGVzIG1lcmdlIGJ5IGNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIiIKKyJmaW5hbGl6emEgaWwgbWVyZ2UgZGVsbGUgbm90ZSBlc2VndWVuZG8gaWwgY29tbWl0IGRlbGxlIG5vdGUgbm9uIHNvdHRvcG9zdGUgIgorImEgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTQKK21zZ2lkICJBYm9ydGluZyBub3RlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICJJbnRlcnJ1emlvbmUgZGVsbGEgcmlzb2x1emlvbmUgZGVsIG1lcmdlIGRlbGxlIG5vdGUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTYKK21zZ2lkICJhYm9ydCBub3RlcyBtZXJnZSIKK21zZ3N0ciAiaW50ZXJyb21waSBpbCBtZXJnZSBkZWxsZSBub3RlIgorCisjOiBidWlsdGluL25vdGVzLmM6ODA3Cittc2dpZCAiY2Fubm90IG1peCAtLWNvbW1pdCwgLS1hYm9ydCBvciAtcy8tLXN0cmF0ZWd5IgorbXNnc3RyICJpbXBvc3NpYmlsZSB1c2FyZSBjb250ZW1wb3JhbmVhbWVudGUgLS1jb21taXQsIC0tYWJvcnQgbyAtcy8tLXN0cmF0ZWd5IgorCisjOiBidWlsdGluL25vdGVzLmM6ODEyCittc2dpZCAibXVzdCBzcGVjaWZ5IGEgbm90ZXMgcmVmIHRvIG1lcmdlIgorbXNnc3RyICJkZXZpIHNwZWNpZmljYXJlIHVuIHJpZmVyaW1lbnRvIG5vdGUgZGEgc290dG9wb3JyZSBhIG1lcmdlIgorCisjOiBidWlsdGluL25vdGVzLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gLXMvLS1zdHJhdGVneTogJXMiCittc2dzdHIgIi1zLy0tc3RyYXRlZ3kgc2Nvbm9zY2l1dGE6ICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgImEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICLDqCBnacOgIGluIGNvcnNvIHVuJ29wZXJhemlvbmUgZGkgbWVyZ2UgZGVsbGUgbm90ZSBpbiAlcyBhbCBwZXJjb3JzbyAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RvcmUgbGluayB0byBjdXJyZW50IG5vdGVzIHJlZiAoJXMpIgorbXNnc3RyICIiCisic2FsdmF0YWdnaW8gZGVsIGNvbGxlZ2FtZW50byBhbCByaWZlcmltZW50byBjb3JyZW50ZSBkZWxsZSBub3RlICglcykgbm9uICIKKyJyaXVzY2l0byIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0b21hdGljIG5vdGVzIG1lcmdlIGZhaWxlZC4gRml4IGNvbmZsaWN0cyBpbiAlcyBhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAiCisiJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG9yIGFib3J0IHRoZSBtZXJnZSB3aXRoICdnaXQgbm90ZXMgbWVyZ2UgLS0iCisiYWJvcnQnLlxuIgorbXNnc3RyICIiCisiTWVyZ2UgYXV0b21hdGljbyBkZWxsZSBub3RlIG5vbiByaXVzY2l0by4gUmlzb2x2aSBpIGNvbmZsaXR0aSBpbiAlcyBlZCAiCisiZXNlZ3VpIGlsIGNvbW1pdCBkZWwgcmlzdWx0YXRvIGNvbiAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvIGludGVycm9tcGkgIgorImlsIG1lcmdlIGNvbiAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODk3IGJ1aWx0aW4vdGFnLmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJSaXNvbHV6aW9uZSBkaSAnJXMnIGNvbWUgcmlmZXJpbWVudG8gdmFsaWRvIG5vbiByaXVzY2l0YS4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgIkwnb2dnZXR0byAlcyBub24gaGEgbm90ZS5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxMgorbXNnaWQgImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIKK21zZ3N0ciAiaWwgdGVudGF0aXZvIGRpIHJpbXVvdmVyZSB1bmEgbm90YSBpbmVzaXN0ZW50ZSBub24gw6ggdW4gZXJyb3JlIgorCisjOiBidWlsdGluL25vdGVzLmM6OTE1Cittc2dpZCAicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImxlZ2dpIGkgbm9taSBkZWdsaSBvZ2dldHRpIGRhbGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL25vdGVzLmM6OTU0IGJ1aWx0aW4vcHJ1bmUuYzoxMzAgYnVpbHRpbi93b3JrdHJlZS5jOjE2NAorbXNnaWQgImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIKK21zZ3N0ciAibm9uIHJpbXVvdmVyZSwgbGltaXRhdGkgYSB2aXN1YWxpenphcmUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTUKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG5vdGVzIgorbXNnc3RyICJzZWduYWxhIGxlIG5vdGUgZWxpbWluYXRlIgorCisjOiBidWlsdGluL25vdGVzLmM6OTk4Cittc2dpZCAibm90ZXMtcmVmIgorbXNnc3RyICJyaWZlcmltZW50byBub3RlIgorCisjOiBidWlsdGluL25vdGVzLmM6OTk5Cittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzLXJlZj4iCittc2dzdHIgInVzYSBsZSBub3RlIGluIDxyaWZlcmltZW50byBub3RlPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEwMzQgYnVpbHRpbi9zdGFzaC5jOjE2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAic290dG9jb21hbmRvIHNjb25vc2NpdXRvOiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1MgorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3B0aW9ucz4uLi5dIFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wemlvbmk+Li4uXSBbPCA8ZWxlbmNvIHJpZmVyaW1lbnRpPiB8IDwgPGVsZW5jbyAiCisib2dnZXR0aT5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUzCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs8b3B6aW9uaT4uLi5dIDxub21lIGJhc2U+IFs8IDxlbGVuY28gcmlmZXJpbWVudGk+IHwgPCAiCisiPGVsZW5jbyBvZ2dldHRpPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrZWQgb2JqZWN0IENSQyBmb3IgJXMiCittc2dzdHIgIkNSQyBvZ2dldHRvIHNvdHRvcG9zdG8gYSBwYWNrICVzIGVycmF0byIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYWNrZWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAib2dnZXR0byBzb3R0b3Bvc3RvIGEgcGFjayAlcyBjb3Jyb3R0byIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGRlbHRhIGRldGVjdGVkIGZvciBvYmplY3QgJXMiCittc2dzdHIgInJpbGV2YXRvIGRlbHRhIHJpY29yc2l2byBwZXIgbCdvZ2dldHRvICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICJvcmRlcmVkICV1IG9iamVjdHMsIGV4cGVjdGVkICU8UFJJdTMyPiIKK21zZ3N0ciAiJXUgb2dnZXR0aSBvcmRpbmF0aSwgYXR0ZXNpICU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5NzIKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIHBhY2tzIGFyZSBzcGxpdCBkdWUgdG8gcGFjay5wYWNrU2l6ZUxpbWl0IgorbXNnc3RyICIiCisiZGlzYWJpbGl0byBsYSBzY3JpdHR1cmEgZGVsbGUgYml0bWFwLCBpIHBhY2sgc29ubyBkaXZpc2kgYSBjYXVzYSAiCisiZGVsbCdpbXBvc3RhemlvbmUgcGFjay5wYWNrU2l6ZUxpbWl0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk4NQorbXNnaWQgIldyaXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiU2NyaXR0dXJhIGRlZ2xpIG9nZ2V0dGkgaW4gY29yc28iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTA0NiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICJzdGF0IGRpICVzIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb3RlICU8UFJJdTMyPiBvYmplY3RzIHdoaWxlIGV4cGVjdGluZyAlPFBSSXUzMj4iCittc2dzdHIgInNjcml0dGkgJTxQUkl1MzI+IG9nZ2V0dGkgcXVhbmRvIG1lIG5lIGF0dGVuZGV2byAlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTI5NworbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICIiCisiZGlzYWJpbGl0byBsYSBzY3JpdHR1cmEgZGVsbGUgYml0bWFwIHBlcmNow6kgYWxjdW5pIG9nZ2V0dGkgbm9uIHNhcmFubm8gIgorInNvdHRvcG9zdGkgYSBwYWNrIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3ZlcmZsb3cgaW4gcGFjayBmb3IgJXMiCittc2dzdHIgIm92ZXJmbG93IGRlbGwnb2Zmc2V0IGJhc2UgZGVsIGRlbHRhIG5lbCBwYWNrIHBlciAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG91dCBvZiBib3VuZCBmb3IgJXMiCittc2dzdHIgIm9mZnNldCBiYXNlIGRlbCBkZWx0YSBmdW9yaSBkYWxsJ2ludGVydmFsbG8gY29uc2VudGl0byBwZXIgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAwNAorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIkNvbnRlZ2dpbyBkZWdsaSBvZ2dldHRpIGluIGNvcnNvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdCBoZWFkZXIgb2YgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgbCdpbnRlc3RhemlvbmUgb2dnZXR0byBkaSAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjE5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjIzNQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBsJ29nZ2V0dG8gJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjIyMiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGluY29uc2lzdGVudCBvYmplY3QgbGVuZ3RoICglPFBSSXVNQVg+IHZzICU8UFJJdU1BWD4pIgorbXNnc3RyICIiCisib2dnZXR0byAlczogbHVuZ2hlenphIG9nZ2V0dG8gaW5jb25zaXN0ZW50ZSAoJTxQUkl1TUFYPiBjb250cm8gJTxQUkl1TUFYPikiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI1OQorbXNnaWQgInN1Ym9wdGltYWwgcGFjayAtIG91dCBvZiBtZW1vcnkiCittc2dzdHIgInBhY2sgc3Vib3R0aW1vIC0gbWVtb3JpYSBlc2F1cml0YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbHRhIGNvbXByZXNzaW9uIHVzaW5nIHVwIHRvICVkIHRocmVhZHMiCittc2dzdHIgIkNvbXByZXNzaW9uZSBkZWx0YSBpbiBjb3JzbywgdXNvIGZpbm8gYSAlZCB0aHJlYWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcxMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFjayBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRhZyAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgcGFjayBkZWdsaSBvZ2dldHRpIHJhZ2dpdW5naWJpbGkgZGFsIHRhZyAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODAxCittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiQ29tcHJlc3Npb25lIG9nZ2V0dGkgaW4gY29yc28iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjgwNworbXNnaWQgImluY29uc2lzdGVuY3kgd2l0aCBkZWx0YSBjb3VudCIKK21zZ3N0ciAiaW5jb25zaXN0ZW56YSBjb24gaWwgbnVtZXJvIGRlaSBkZWx0YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBlZGdlIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisiYXR0ZXNvIElEIG9nZ2V0dG8gYXJjbywgcmljZXZ1dGkgZGF0aSBlcnJhdGk6XG4iCisiICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisiYXR0ZXNvIElEIG9nZ2V0dG8sIHJpY2V2dXRpIGRhdGkgZXJyYXRpOlxuIgorIiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTkyCittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICJ2YWxvcmUgbm9uIHZhbGlkbyBwZXIgLS1taXNzaW5nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwNTEgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTU5Cittc2dpZCAiY2Fubm90IG9wZW4gcGFjayBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGwnaW5kaWNlIHBhY2siCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA4MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgYXQgJXMgY291bGQgbm90IGJlIGV4YW1pbmVkIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2FtaW5hcmUgbCdvZ2dldHRvIHNjaW9sdG8gJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE2NworbXNnaWQgInVuYWJsZSB0byBmb3JjZSBsb29zZSBvYmplY3QiCittc2dzdHIgImltcG9zc2liaWxlIGZvcnphcmUgbCdvZ2dldHRvIHNjaW9sdG8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSByZXYgJyVzJyIKK21zZ3N0ciAiJyVzJyBub24gw6ggdW5hIHJldmlzaW9uZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXZpc2lvbiAnJXMnIgorbXNnc3RyICJyZXZpc2lvbmUgJyVzJyBlcnJhdGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4OAorbXNnaWQgInVuYWJsZSB0byBhZGQgcmVjZW50IG9iamVjdHMiCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2l1bmdlcmUgZ2xpIG9nZ2V0dGkgcmVjZW50aSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgInZlcnNpb25lICVzIGRpIGluZGV4IG5vbiBzdXBwb3J0YXRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIKK21zZ3N0ciAidmVyc2lvbmUgJyVzJyBkaSBpbmRleCBlcnJhdGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4MworbXNnaWQgIjx2ZXJzaW9uPlssPG9mZnNldD5dIgorbXNnc3RyICI8dmVyc2lvbmU+Wyw8b2Zmc2V0Pl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4NAorbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgInNjcml2aSBpbCBmaWxlIGluZGljZSBwYWNrIHVzYW5kbyBsYSB2ZXJzaW9uZSBmb3JtYXRvIGlkeCBzcGVjaWZpY2F0YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg3Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAiZGltZW5zaW9uZSBtYXNzaW1hIGRpIG9nbmkgZmlsZSBwYWNrIGluIG91dHB1dCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg5Cittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICJpZ25vcmEgZ2xpIG9nZ2V0dGkgcHJlc2kgaW4gcHJlc3RpdG8gZGFsbG8gc3RvcmUgb2dnZXR0aSBhbHRlcm5hdGl2byIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzkxCittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJpZ25vcmEgZ2xpIG9nZ2V0dGkgc290dG9wb3N0aSBhIHBhY2siCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5MworbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgImxpbWl0YSBsYSBmaW5lc3RyYSBkaSBwYWNrIGFsIG51bWVybyBkaSBvZ2dldHRpIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTUKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBtZW1vcnkgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGxpbWl0IgorbXNnc3RyICIiCisibGltaXRhIGxhIGZpbmVzdHJhIGRpIHBhY2sgYWxsYSBtZW1vcmlhIHNwZWNpZmljYXRhIGluIGFnZ2l1bnRhIGFsIGxpbWl0ZSAiCisic3VnbGkgb2dnZXR0aSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk3Cittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgImx1bmdoZXp6YSBtYXNzaW1hIGRlbGxhIGNhdGVuYSBkaSBkZWx0YSBjb25zZW50aXRhIG5lbCBwYWNrIHJpc3VsdGFudGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5OQorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAicml1c2EgaSBkZWx0YSBlc2lzdGVudGkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwMQorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgInJpdXNhIGdsaSBvZ2dldHRpIGVzaXN0ZW50aSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDAzCittc2dpZCAidXNlIE9GU19ERUxUQSBvYmplY3RzIgorbXNnc3RyICJ1c2Egb2dnZXR0aSBPRlNfREVMVEEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNQorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgIiIKKyJ1c2EgcGnDuSB0aHJlYWQgZHVyYW50ZSBsYSByaWNlcmNhIGRlbGxlIG1pZ2xpb3JpIGNvcnJpc3BvbmRlbnplIHBlciBpIGRlbHRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDcKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICJub24gY3JlYXJlIHVuIG91dHB1dCBwYWNrIHZ1b3RvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDkKK21zZ2lkICJyZWFkIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsZWdnaSBnbGkgYXJnb21lbnRpIHJldmlzaW9uZSBkYWxsbyBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDExCittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgImxpbWl0YSBnbGkgb2dnZXR0aSBhIHF1ZWxsaSBub24gYW5jb3JhIHNvdHRvcG9zdGkgYSBwYWNrIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTQKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAiaW5jbHVkaSBnbGkgb2dnZXR0aSByYWdnaXVuZ2liaWxpIGRhIHF1YWx1bnF1ZSByaWZlcmltZW50byIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDE3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICJpbmNsdWRpIGdsaSBvZ2dldHRpIHJlZmVyZW56aWF0aSBkYSB2b2NpIGRlbCBsb2cgcmlmZXJpbWVudGkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgImluY2x1ZGkgZ2xpIG9nZ2V0dGkgcmVmZXJlbnppYXRpIGRhbGwnaW5kaWNlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjMKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgImludmlhIGlsIHBhY2sgaW4gb3V0cHV0IHN1bGxvIHN0YW5kYXJkIG91dHB1dCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI1Cittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICIiCisiaW5jbHVkaSBnbGkgb2dnZXR0aSB0YWcgY2hlIGZhbm5vIHJpZmVyaW1lbnRvIGFnbGkgb2dnZXR0aSBkYSBzb3R0b3BvcnJlIGEgIgorInBhY2siCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyNworbXNnaWQgImtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAibWFudGllbmkgZ2xpIG9nZ2V0dGkgbm9uIHJhZ2dpdW5naWJpbGkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyOQorbXNnaWQgInBhY2sgbG9vc2UgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiZXNlZ3VpIGlsIHBhY2sgZGVnbGkgb2dnZXR0aSBub24gcmFnZ2l1bmdpYmlsaSBzY2lvbHRpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzEKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZGVjb21wcmltaSBnbGkgb2dnZXR0aSBub24gcmFnZ2l1bmdpYmlsaSBwacO5IHJlY2VudGkgZGkgPHRlbXBvPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDM0Cittc2dpZCAidXNlIHRoZSBzcGFyc2UgcmVhY2hhYmlsaXR5IGFsZ29yaXRobSIKK21zZ3N0ciAidXNhIGwnYWxnb3JpdG1vIGRpIHJhZ2dpdW5naWJpbGl0w6Agc3BhcnNlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzYKK21zZ2lkICJjcmVhdGUgdGhpbiBwYWNrcyIKK21zZ3N0ciAiY3JlYSBwYWNrIHRoaW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzOAorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICJjcmVhIHBhY2sgYWRhdHRpIHBlciBmZXRjaCBzaGFsbG93IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDAKK21zZ2lkICJpZ25vcmUgcGFja3MgdGhhdCBoYXZlIGNvbXBhbmlvbiAua2VlcCBmaWxlIgorbXNnc3RyICJpZ25vcmEgaSBwYWNrIGNoZSBoYW5ubyB1biBmaWxlIC5rZWVwIGNoZSBsaSBhY2NvbXBhZ25hIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDIKK21zZ2lkICJpZ25vcmUgdGhpcyBwYWNrIgorbXNnc3RyICJpZ25vcmEgcXVlc3RvIHBhY2siCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0NAorbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgImxpdmVsbG8gY29tcHJlc3Npb25lIHBhY2siCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0NgorbXNnaWQgImRvIG5vdCBoaWRlIGNvbW1pdHMgYnkgZ3JhZnRzIgorbXNnc3RyICJub24gbmFzY29uZGVyZSBpIGNvbW1pdCBpbm5lc3RhdGkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0OAorbXNnaWQgInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorInVzYSB1biBpbmRpY2UgYml0bWFwIHNlIGRpc3BvbmliaWxlIHBlciB2ZWxvY2l6emFyZSBpbCBjb250ZWdnaW8gZGVnbGkgIgorIm9nZ2V0dGkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1MAorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgInNjcml2aSB1biBpbmRpY2UgYml0bWFwIGluc2llbWUgYWxsJ2luZGljZSBwYWNrIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NTQKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCBpZiBwb3NzaWJsZSIKK21zZ3N0ciAic2NyaXZpIHVuIGluZGljZSBiaXRtYXAgc2UgcG9zc2liaWxlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NTgKK21zZ2lkICJoYW5kbGluZyBmb3IgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICJhemlvbmUgZGEgZXNlZ3VpcmUgc3VnbGkgb2dnZXR0aSBtYW5jYW50aSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDYxCittc2dpZCAiZG8gbm90IHBhY2sgb2JqZWN0cyBpbiBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgIm5vbiBlc2VndWlyZSBpbCBwYWNrIGRlZ2xpIG9nZ2V0dGkgbmVpIGZpbGUgcGFjayBwcm9tZXR0ZW50aSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDYzCittc2dpZCAicmVzcGVjdCBpc2xhbmRzIGR1cmluZyBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAicmlzcGV0dGEgbGUgaXNvbGUgZHVyYW50ZSBsYSBjb21wcmVzc2lvbmUgZGVsdGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBjaGFpbiBkZXB0aCAlZCBpcyB0b28gZGVlcCwgZm9yY2luZyAlZCIKK21zZ3N0ciAibGEgcHJvZm9uZGl0w6AgZGVsbGEgY2F0ZW5hIGRlaSBkZWx0YSAoJWQpIMOoIHRyb3BwbyBlbGV2YXRhLCBmb3J6byAlZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDk3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2suZGVsdGFDYWNoZUxpbWl0IGlzIHRvbyBoaWdoLCBmb3JjaW5nICVkIgorbXNnc3RyICJpbCB2YWxvcmUgcGFjay5kZWx0YUNhY2hlTGltaXQgw6ggdHJvcHBvIGVsZXZhdG8sIGZvcnpvICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NTEKK21zZ2lkICItLW1heC1wYWNrLXNpemUgY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYSBwYWNrIGZvciB0cmFuc2ZlciIKK21zZ3N0ciAiIgorIi0tbWF4LXBhY2stc2l6ZSBub24gcHXDsiBlc3NlcmUgdXNhdG8gcGVyIGdlbmVyYXJlIHVuIHBhY2sgZGEgdHJhc2ZlcmlyZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTUzCittc2dpZCAibWluaW11bSBwYWNrIHNpemUgbGltaXQgaXMgMSBNaUIiCittc2dzdHIgImlsIGxpbWl0ZSBtaW5pbW8gZGVsbGUgZGltZW5zaW9uaSBkZWkgcGFjayDDqCAxIE1pQiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTU4Cittc2dpZCAiLS10aGluIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGFuIGluZGV4YWJsZSBwYWNrIgorbXNnc3RyICItLXRoaW4gbm9uIHB1w7IgZXNzZXJlIHVzYXRvIHBlciBnZW5lcmFyZSB1biBwYWNrIGluZGljaXp6YWJpbGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU2MQorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLS11bnBhY2stdW5yZWFjaGFibGUgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1rZWVwLXVucmVhY2hhYmxlIGUgLS11bnBhY2stdW5yZWFjaGFibGUgbm9uIHNvbm8gY29tcGF0aWJpbGkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU2NworbXNnaWQgImNhbm5vdCB1c2UgLS1maWx0ZXIgd2l0aG91dCAtLXN0ZG91dCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdXNhcmUgLS1maWx0ZXIgc2VuemEgLS1zdGRvdXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzYyNworbXNnaWQgIkVudW1lcmF0aW5nIG9iamVjdHMiCittc2dzdHIgIkVudW1lcmF6aW9uZSBkZWdsaSBvZ2dldHRpIGluIGNvcnNvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvdGFsICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgcmV1c2VkICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgcGFjay0iCisicmV1c2VkICU8UFJJdTMyPiIKK21zZ3N0ciAiIgorIiU8UFJJdTMyPiBvZ2dldHRpIHRvdGFsaSAoJTxQUkl1MzI+IGRlbHRhKSwgJTxQUkl1MzI+IHJpdXRpbGl6emF0aSAiCisiKCU8UFJJdTMyPiBkZWx0YSksICU8UFJJdTMyPiByaXV0aWxpenphdGkgbmVsIGZpbGUgcGFjayIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzo4Cittc2dpZCAiZ2l0IHBhY2stcmVmcyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHBhY2stcmVmcyBbPG9wemlvbmk+XSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAiZXNlZ3VpIGlsIHBhY2sgZGkgdHV0dG8iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTcKK21zZ2lkICJwcnVuZSBsb29zZSByZWZzIChkZWZhdWx0KSIKK21zZ3N0ciAiZWxpbWluYSBpIHJpZmVyaW1lbnRpIHNjaW9sdGkgKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSkiCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6OQorbXNnaWQgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKK21zZ3N0ciAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjQyCittc2dpZCAiUmVtb3ZpbmcgZHVwbGljYXRlIG9iamVjdHMiCittc2dzdHIgIlJpbW96aW9uZSBvZ2dldHRpIGR1cGxpY2F0aSBpbiBjb3JzbyIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEyCittc2dpZCAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1wcm9ncmVzc10gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1wcm9ncmVzc10gWy0tZXhwaXJlIDx0ZW1wbz5dIFstLV0gWzxoZWFkPi4uLl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzEKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgInNlZ25hbGEgZ2xpIG9nZ2V0dGkgcmlwdWxpdGkiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZmFpIHNjYWRlcmUgb2dnZXR0aSBwacO5IHZlY2NoaSBkaSA8dGVtcG8+IgorCisjOiBidWlsdGluL3BydW5lLmM6MTM2Cittc2dpZCAibGltaXQgdHJhdmVyc2FsIHRvIG9iamVjdHMgb3V0c2lkZSBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgImxpbWl0YSBsYSB2aXNpdGEgYWdsaSBvZ2dldHRpIGFsIGRpIGZ1b3JpIGRlaSBmaWxlIHBhY2sgcHJvbWV0dGVudGkiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxNTAKK21zZ2lkICJjYW5ub3QgcHJ1bmUgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBlc2VndWlyZSBsJ2VsaW1pbmF6aW9uZSBpbiB1biByZXBvc2l0b3J5ICdvZ2dldHRpIHByZXppb3NpJyIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUgYnVpbHRpbi9wdWxsLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJWYWxvcmUgbm9uIHZhbGlkbyBwZXIgJXM6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo2NworbXNnaWQgImdpdCBwdWxsIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVsbCBbPG9wemlvbmk+XSBbPHJlcG9zaXRvcnk+IFs8c3BlY2lmaWNhdG9yZSByaWZlcmltZW50bz4uLi5dXSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTIyCittc2dpZCAiY29udHJvbCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgImNvbnRyb2xsYSBpbCByZWN1cGVybyByaWNvcnNpdm8gZGVpIHNvdHRvbW9kdWxpIgorCisjOiBidWlsdGluL3B1bGwuYzoxMjYKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gbWVyZ2luZyIKK21zZ3N0ciAiT3B6aW9uaSByZWxhdGl2ZSBhbCBtZXJnZSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTI5Cittc2dpZCAiaW5jb3Jwb3JhdGUgY2hhbmdlcyBieSByZWJhc2luZyByYXRoZXIgdGhhbiBtZXJnaW5nIgorbXNnc3RyICJpbmNvcnBvcmEgbGUgbW9kaWZpY2hlIGVzZWd1ZW5kbyB1biByZWJhc2UgYW56aWNow6kgdW4gbWVyZ2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE1NyBidWlsdGluL3JlYmFzZS5jOjQ3MSBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiY29uc2VudGkgZmFzdCBmb3J3YXJkIgorCisjOiBidWlsdGluL3B1bGwuYzoxNjYKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIHJlYmFzZSIKK21zZ3N0ciAiZXNlZ3VpIHN0YXNoL3N0YXNoIHBvcCBhdXRvbWF0aWNhbWVudGUgcHJpbWEgZSBkb3BvIGlsIHJlYmFzZSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTgyCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nIgorbXNnc3RyICJPcHppb25pIHJlbGF0aXZlIGFsIGZldGNoIgorCisjOiBidWlsdGluL3B1bGwuYzoxOTIKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgYnJhbmNoIgorbXNnc3RyICJmb3J6YSBsYSBzb3ZyYXNjcml0dHVyYSBkZWwgYnJhbmNoIGxvY2FsZSIKKworIzogYnVpbHRpbi9wdWxsLmM6MjAwCittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgcHVsbGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICJudW1lcm8gZGkgc290dG9tb2R1bGkgcmVjdXBlcmF0aSBpbiBwYXJhbGxlbG8iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciBwdWxsLmZmOiAlcyIKK21zZ3N0ciAiVmFsb3JlIG5vbiB2YWxpZG8gcGVyIHB1bGwuZmY6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo0MjYKK21zZ2lkICIiCisiVGhlcmUgaXMgbm8gY2FuZGlkYXRlIGZvciByZWJhc2luZyBhZ2FpbnN0IGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgIgorImZldGNoZWQuIgorbXNnc3RyICIiCisiTm9uIGNpIHNvbm8gY2FuZGlkYXRpIGluIGJhc2UgYWkgcXVhbGkgZXNlZ3VpcmUgaWwgcmViYXNlIGZyYSBpIHJpZmVyaW1lbnRpICIKKyJhcHBlbmEgcmVjdXBlcmF0aS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyOAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorbXNnc3RyICIiCisiTm9uIGNpIHNvbm8gY2FuZGlkYXRpIGluIGJhc2UgYWkgcXVhbGkgZXNlZ3VpcmUgaWwgbWVyZ2UgZnJhIGkgcmlmZXJpbWVudGkgIgorImFwcGVuYSByZWN1cGVyYXRpLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI5Cittc2dpZCAiIgorIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKyJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKK21zZ3N0ciAiIgorIkluIGdlbmVyYWxlLCBxdWVzdG8gc2lnbmlmaWNhIGNoZSBoYWkgZm9ybml0byB1bm8gc3BlY2lmaWNhdG9yZVxuIgorInJpZmVyaW1lbnRvIGNoZSBub24gYXZldmEgY29ycmlzcG9uZGVuemUgbmVsIHJlbW90by4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKyJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICIiCisiSGFpIGNoaWVzdG8gZGkgZXNlZ3VpcmUgdW4gcHVsbCBkYWwgcmVtb3RvICclcycgbWEgbm9uIGhhaVxuIgorInNwZWNpZmljYXRvIHVuIGJyYW5jaC4gRGFsIG1vbWVudG8gY2hlIHF1ZXN0byBub24gw6ggaWwgcmVtb3RvXG4iCisiY29uZmlndXJhdG8gY29tZSBwcmVkZWZpbml0byBwZXIgaWwgYnJhbmNoIGNvcnJlbnRlLCBkZXZpXG4iCisic3BlY2lmaWNhcmUgdW4gYnJhbmNoIHN1bGxhIHJpZ2EgZGkgY29tYW5kby4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNyBidWlsdGluL3JlYmFzZS5jOjE0MDkgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3MworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgIkF0dHVhbG1lbnRlIG5vbiBzZWkgc3UgdW4gYnJhbmNoLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM5IGJ1aWx0aW4vcHVsbC5jOjQ1NCBnaXQtcGFyc2UtcmVtb3RlLnNoOjc5Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIKK21zZ3N0ciAiU3BlY2lmaWNhIGlsIGJyYW5jaCBpbiBiYXNlIGEgY3VpIHZ1b2kgZWZmZXR0dWFyZSBpbCByZWJhc2UuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDEgYnVpbHRpbi9wdWxsLmM6NDU2IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODIKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iCittc2dzdHIgIlNwZWNpZmljYSBpbCBicmFuY2ggaW4gYmFzZSBhIGN1aSB2dW9pIGVmZmV0dHVhcmUgaWwgbWVyZ2UuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDIgYnVpbHRpbi9wdWxsLmM6NDU3Cittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiVmVkaSBnaXQtcHVsbCgxKSBwZXIgdWx0ZXJpb3JpIGRldHRhZ2xpLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ0IGJ1aWx0aW4vcHVsbC5jOjQ1MCBidWlsdGluL3B1bGwuYzo0NTkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxNSBnaXQtcGFyc2UtcmVtb3RlLnNoOjY0Cittc2dpZCAiPHJlbW90ZT4iCittc2dzdHIgIjxyZW1vdG8+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NDQgYnVpbHRpbi9wdWxsLmM6NDU5IGJ1aWx0aW4vcHVsbC5jOjQ2NAorIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NQorbXNnaWQgIjxicmFuY2g+IgorbXNnc3RyICI8YnJhbmNoPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcmViYXNlLmM6MTQwNyBnaXQtcGFyc2UtcmVtb3RlLnNoOjc1Cittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5vbiBjaSBzb25vIGluZm9ybWF6aW9uaSBkaSB0cmFjY2lhbWVudG8gcGVyIGlsIGJyYW5jaCBjb3JyZW50ZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2MSBnaXQtcGFyc2UtcmVtb3RlLnNoOjk1Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOiIKK21zZ3N0ciAiIgorIlNlIHZ1b2kgaW1wb3N0YXJlIGxlIGluZm9ybWF6aW9uaSBkaSB0cmFjY2lhbWVudG8gcGVyIHF1ZXN0byBicmFuY2ggcHVvaSAiCisiZmFybG8gY29uOiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIHRvIG1lcmdlIHdpdGggdGhlIHJlZiAnJXMnXG4iCisiZnJvbSB0aGUgcmVtb3RlLCBidXQgbm8gc3VjaCByZWYgd2FzIGZldGNoZWQuIgorbXNnc3RyICIiCisiTGEgdHVhIGNvbmZpZ3VyYXppb25lIHNwZWNpZmljYSBjaGUgZGV2ZSBlc3NlcmUgZXNlZ3VpdG9cbiIKKyJpbCBtZXJnZSBjb24gaWwgcmlmZXJpbWVudG8gJyVzJyBkZWwgcmVtb3RvLCBtYSB1biB0YWxlXG4iCisicmlmZXJpbWVudG8gbm9uIMOoIHN0YXRvIHJlY3VwZXJhdG8uIgorCisjOiBidWlsdGluL3B1bGwuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBjb21taXQgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFjY2VkZXJlIGFsIGNvbW1pdCAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODU3Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICJpZ25vcm8gLS12ZXJpZnktc2lnbmF0dXJlIHBlciBpbCByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkxMgorbXNnaWQgIi0tW25vLV1hdXRvc3Rhc2ggb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXJlYmFzZS4iCittc2dzdHIgImwnb3B6aW9uZSAtLVtuby1dYXV0b3N0YXNoIG9wdGlvbiDDqCB2YWxpZGEgc29sbyBjb24gLS1yZWJhc2UuIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICJBZ2dpb3JubyB1biBicmFuY2ggbm9uIG5hdG8gY29uIGxlIG1vZGlmaWNoZSBhZ2dpdW50ZSBhbGwnaW5kaWNlLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTI0Cittc2dpZCAicHVsbCB3aXRoIHJlYmFzZSIKK21zZ3N0ciAicHVsbCBjb24gcmViYXNlIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjUKK21zZ2lkICJwbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJlc2VndWluZSBpbCBjb21taXQgbyBsbyBzdGFzaC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKyJmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorImNvbW1pdCAlcy4iCittc2dzdHIgIiIKKyJpbCBmZXRjaCBoYSBhZ2dpb3JuYXRvIGwnaGVhZCBkZWxcbiIKKyJicmFuY2ggY29ycmVudGUuXG4iCisiRXNlZ3VvIGlsIGZhc3QgZm9yd2FyZCBkZWxsJ2FsYmVyb1xuIgorImRpIGxhdm9ybyBkYWwgY29tbWl0ICVzLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgZmFzdC1mb3J3YXJkIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIkFmdGVyIG1ha2luZyBzdXJlIHRoYXQgeW91IHNhdmVkIGFueXRoaW5nIHByZWNpb3VzIGZyb21cbiIKKyIkIGdpdCBkaWZmICVzXG4iCisib3V0cHV0LCBydW5cbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJ0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGZhc3QgZm9yd2FyZCBkZWxsJ2FsYmVyb1xuIgorImRpIGxhdm9yby5cbiIKKyJEb3BvIGVzc2VydGkgYXNzaWN1cmF0byBkaSBhdmVyIHNhbHZhdG8gdHV0dG8gY2nDslxuIgorImNoZSDDqCBpbXBvcnRhbnRlIGRhbGwnb3V0cHV0IGRpXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorImVzZWd1aVxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInBlciBlc2VndWlyZSBpbCByaXByaXN0aW5vLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTcxCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsIG1lcmdlIGRpIHBpw7kgYnJhbmNoIGluIHVuIGhlYWQgdnVvdG8uIgorCisjOiBidWlsdGluL3B1bGwuYzo5NzUKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCByZWJhc2Ugc3UgcGnDuSBicmFuY2guIgorCisjOiBidWlsdGluL3B1bGwuYzo5ODIKK21zZ2lkICJjYW5ub3QgcmViYXNlIHdpdGggbG9jYWxseSByZWNvcmRlZCBzdWJtb2R1bGUgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIGVzZWd1aXJlIGlsIHJlYmFzZSBzZSBjaSBzb25vIGRlbGxlIG1vZGlmaWNoZSByZWdpc3RyYXRlICIKKyJsb2NhbG1lbnRlIGFpIHNvdHRvbW9kdWxpIgorCisjOiBidWlsdGluL3B1c2guYzoxOQorbXNnaWQgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVzaCBbPG9wemlvbmk+XSBbPHJlcG9zaXRvcnk+IFs8c3BlY2lmaWNhdG9yZSByaWZlcmltZW50bz4uLi5dXSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTEyCittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICJlc2VndWkgaWwgdGFnIGRlbGxhIGZvcm1hIGJyZXZlIHNlbnphIDx0YWc+IgorCisjOiBidWlsdGluL3B1c2guYzoxMjIKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUgYWNjZXR0YSBzb2xvIG5vbWkgZGVpIHJlZiBkaSBkZXN0aW5hemlvbmUgaW4gY2hpYXJvIgorCisjOiBidWlsdGluL3B1c2guYzoxNjgKK21zZ2lkICIiCisiXG4iCisiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksIHNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIgorbXNnc3RyICIiCisiXG4iCisiUGVyIHNjZWdsaWVyZSBwZXJtYW5lbnRlbWVudGUgdW5hIGRlbGxlIGR1ZSBvcHppb25pLCB2ZWRpIHB1c2guZGVmYXVsdCBpbiAiCisiJ2dpdCBoZWxwIGNvbmZpZycuIgorCisjOiBidWlsdGluL3B1c2guYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEXG4iCiAiJXMiCiBtc2dzdHIgIiIKLSJJbXBvc3NpYmlsZSBhZ2dpdW5nZXJlIGwnYWNjZXNzb3JpbzpcbiIKKyJJbCBicmFuY2ggdXBzdHJlYW0gZGVsIGJyYW5jaCBhdHR1YWxlIG5vbiBjb3JyaXNwb25kZSBhbFxuIgorIm5vbWUgZGVsIGJyYW5jaCBhdHR1YWxlLiBQZXIgZXNlZ3VpcmUgaWwgcHVzaCBhbCBicmFuY2ggdXBzdHJlYW1cbiIKKyJkZWwgcmVtb3RvLCB1c2FcbiIKICJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlBlciBlc2VndWlyZSBpbCBwdXNoIGFsIGJyYW5jaCBjb24gbG8gc3Rlc3NvIG5vbWUgZGVsIHJlbW90bywgdXNhXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKICIlcyIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTkwCi1tc2dpZCAiUmVtb3ZlIFRvb2wiCi1tc2dzdHIgIlJpbXVvdmkgYWNjZXNzb3JpbyIKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCittc2dzdHIgIiIKKyJBdHR1YWxtZW50ZSBub24gc2VpIHN1IHVuIGJyYW5jaC5cbiIKKyJQZXIgZXNlZ3VpcmUgb3JhIGlsIHB1c2ggZGVsbGEgY3Jvbm9sb2dpYSBjaGUgaGEgY29uZG90dG9cbiIKKyJhbGxvIHN0YXRvIGNvcnJlbnRlIChIRUFEIHNjb2xsZWdhdG8pLCB1c2FcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bm9tZSBkZWwgYnJhbmNoIHJlbW90bz5cbiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk2Ci1tc2dpZCAiUmVtb3ZlIFRvb2wgQ29tbWFuZHMiCi1tc2dzdHIgIlJpbXVvdmkgaSBjb21hbmRpIGFjY2Vzc29yaSIKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorIklsIGJyYW5jaCBjb3JyZW50ZSAlcyBub24gaGEgYWxjdW4gYnJhbmNoIHVwc3RyZWFtLlxuIgorIlBlciBlc2VndWlyZSBpbCBwdXNoIGRlbCBicmFuY2ggY29ycmVudGUgZWQgaW1wb3N0YXJlIGlsIHJlbW90byBjb21lICIKKyJ1cHN0cmVhbSwgdXNhXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjIwMAotbXNnaWQgIlJlbW92ZSIKLW1zZ3N0ciAiUmltdW92aSIKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAiIgorIklsIGJyYW5jaCBjb3JyZW50ZSAlcyBoYSBwacO5IGJyYW5jaCB1cHN0cmVhbSwgbWkgcmlmaXV0byBkaSBlc2VndWlyZSBpbCBwdXNoLiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjM2Ci1tc2dpZCAiKEJsdWUgZGVub3RlcyByZXBvc2l0b3J5LWxvY2FsIHRvb2xzKSIKLW1zZ3N0ciAiKElsIGNvbG9yZSBibHUgaW5kaWNhIGFjY2Vzc29yaSBwZXIgbCdhcmNoaXZpbyBsb2NhbGUpIgorIzogYnVpbHRpbi9wdXNoLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIHB1c2hpbmcgdG8gcmVtb3RlICclcycsIHdoaWNoIGlzIG5vdCB0aGUgdXBzdHJlYW0gb2ZcbiIKKyJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycsIHdpdGhvdXQgdGVsbGluZyBtZSB3aGF0IHRvIHB1c2hcbiIKKyJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iCittc2dzdHIgIiIKKyJTdGFpIGVzZWd1ZW5kbyBpbCBwdXNoIGFsIHJlbW90byAnJXMnLCBjaGUgbm9uIMOoIGwndXBzdHJlYW0gZGVsXG4iCisiYnJhbmNoIGNvcnJlbnRlICclcycsIHNlbnphIGRpcm1pIGRpIGNvc2EgZGV2byBlc2VndWlyZSBpbCBwdXNoXG4iCisicGVyIGFnZ2lvcm5hcmUgcXVhbGUgYnJhbmNoIHJlbW90by4iCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjI5NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1biBDb21tYW5kOiAlcyIKLW1zZ3N0ciAiQXZ2aWEgaWwgY29tYW5kbzogJXMiCisjOiBidWlsdGluL3B1c2guYzoyNzAKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAiIgorIk5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byBhbGN1biByZWZzcGVjIHBlciBpbCBwdXNoLCBlIHB1c2guZGVmYXVsdCDDqCBcIm5vdGhpbmciCisiXCIuIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDozMTEKLW1zZ2lkICJBcmd1bWVudHMiCi1tc2dzdHIgIkFyZ29tZW50aSIKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3NworbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gSW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLlxuIgorIidnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkdsaSBhZ2dpb3JuYW1lbnRpIHNvbm8gc3RhdGkgcmlmaXV0YXRpIHBlcmNow6kgbCd1bHRpbW8gY29tbWl0IGRlbCBicmFuY2hcbiIKKyJhdHR1YWxlIMOoIHJpbWFzdG8gaW5kaWV0cm8gcmlzcGV0dG8gYWxsYSBzdWEgY29udHJvcGFydGUgcmVtb3RhLlxuIgorIkludGVncmEgbGUgbW9kaWZpY2hlIHJlbW90ZSAoYWQgZXMuIGNvbiAnZ2l0IHB1bGwgLi4uJykgcHJpbWEgZGlcbiIKKyJlc2VndWlyZSBudW92YW1lbnRlIGlsIHB1c2guXG4iCisiVmVkaSBsYSAnTm90YSBzdWkgZmFzdCBmb3J3YXJkJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBwZXIgdWx0ZXJpb3JpXG4iCisiZGV0dGFnbGkuIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDozNDgKLW1zZ2lkICJPSyIKLW1zZ3N0ciAiT0siCisjOiBidWlsdGluL3B1c2guYzoyODMKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJHbGkgYWdnaW9ybmFtZW50aSBzb25vIHN0YXRpIHJpZml1dGF0aSBwZXJjaMOpIGwndWx0aW1vIGNvbW1pdCBkaSB1blxuIgorImJyYW5jaCBkaSBjdWkgw6ggc3RhdG8gZXNlZ3VpdG8gaWwgcHVzaCDDqCByaW1hc3RvIGluZGlldHJvIHJpc3BldHRvXG4iCisiYWxsYSBzdWEgY29udHJvcGFydGUgcmVtb3RhLiBFc2VndWkgaWwgY2hlY2tvdXQgZGkgcXVlc3RvIGJyYW5jaCBlXG4iCisiaW50ZWdyYSBsZSBtb2RpZmljaGUgcmVtb3RlIChhZCBlcy4gY29uICdnaXQgcHVsbCAuLi4nKSBwcmltYSBkaVxuIgorImVzZWd1aXJlIG51b3ZhbWVudGUgaWwgcHVzaC5cbiIKKyJWZWRpIGxhICdOb3RhIHN1aSBmYXN0IGZvcndhcmQnIGluICdnaXQgcHVzaCAtLWhlbHAnIHBlciB1bHRlcmlvcmlcbiIKKyJkZXR0YWdsaS4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgotbXNnc3RyICJSZWN1cGVybyBudW92ZSBtb2RpZmljaGUgZGEgJXMiCisjOiBidWlsdGluL3B1c2guYzoyODkKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHJlbW90ZSBjb250YWlucyB3b3JrIHRoYXQgeW91IGRvXG4iCisibm90IGhhdmUgbG9jYWxseS4gVGhpcyBpcyB1c3VhbGx5IGNhdXNlZCBieSBhbm90aGVyIHJlcG9zaXRvcnkgcHVzaGluZ1xuIgorInRvIHRoZSBzYW1lIHJlZi4gWW91IG1heSB3YW50IHRvIGZpcnN0IGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiwgJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiR2xpIGFnZ2lvcm5hbWVudGkgc29ubyBzdGF0aSByaWZpdXRhdGkgcGVyY2jDqSBpbCByZW1vdG8gY29udGllbmUgZGVsbGVcbiIKKyJtb2RpZmljaGUgY2hlIG5vbiBoYWkgbG9jYWxtZW50ZS4gQ2nDsiBzb2xpdGFtZW50ZSDDqCBjYXVzYXRvIGRhIHVuIHB1c2hcbiIKKyJkYSB1biBhbHRybyByZXBvc2l0b3J5IGFsbG8gc3Rlc3NvIHJpZmVyaW1lbnRvLiBQb3RyZXN0aSB2b2xlciBpbnRlZ3JhcmVcbiIKKyJsZSBtb2RpZmljaGUgcmVtb3RlIChhZCBlcy4gY29uICdnaXQgcHVsbCAuLi4nKSBwcmltYSBkaSBlc2VndWlyZVxuIgorIm51b3ZhbWVudGUgaWwgcHVzaC5cbiIKKyJWZWRpIGxhICdOb3RhIHN1aSBmYXN0IGZvcndhcmQnIGluICdnaXQgcHVzaCAtLWhlbHAnIHBlciB1bHRlcmlvcmlcbiIKKyJkZXR0YWdsaS4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAicmVtb3RlIHBydW5lICVzIgotbXNnc3RyICJwb3RhdHVyYSByZW1vdGEgZGkgJXMiCisjOiBidWlsdGluL3B1c2guYzoyOTYKK21zZ2lkICJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGFnIGFscmVhZHkgZXhpc3RzIGluIHRoZSByZW1vdGUuIgorbXNnc3RyICIiCisiR2xpIGFnZ2lvcm5hbWVudGkgc29ubyBzdGF0aSByaWZpdXRhdGkgcGVyY2jDqSBpbCB0YWcgZXNpc3RlIGdpw6AgbmVsIHJlbW90by4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gJXMiCi1tc2dzdHIgIkVmZmV0dHVhIHBvdGF0dXJhIGRlaSBkdXBsaWNhdGkgbG9jYWxpIGRpIHJhbWkgcmVtb3RpIGNhbmNlbGxhdGkgZGEgJXMiCisjOiBidWlsdGluL3B1c2guYzoyOTkKK21zZ2lkICIiCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIk5vbiBwdW9pIGFnZ2lvcm5hcmUgdW4gcmlmZXJpbWVudG8gcmVtb3RvIGNoZSBwdW50YSBhIHVuIG9nZ2V0dG9cbiIKKyJkaXZlcnNvIGRhIHVuIGNvbW1pdCBvIGFnZ2lvcm5hcmUgdW4gcmlmZXJpbWVudG8gcmVtb3RvIHBlciBmYXJsb1xuIgorInB1bnRhcmUgYSB1biBvZ2dldHRvIGRpdmVyc28gZGEgdW4gY29tbWl0IHNlbnphIHVzYXJlIGwnb3B6aW9uZVxuIgorIictLWZvcmNlJy5cbiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQdXNoaW5nIGNoYW5nZXMgdG8gJXMiCi1tc2dzdHIgIlByb3BhZ2F6aW9uZSBtb2RpZmljaGUgYSAlcyIKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIlB1c2ggc3UgJXMgaW4gY29yc29cbiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6NjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCi1tc2dzdHIgIk1pcnJvcmluZyB2ZXJzbyAlcyIKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAicHVzaCBkaSBhbGN1bmkgcmlmZXJpbWVudGkgc3UgJyVzJyBub24gcml1c2NpdG8iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjgyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKLW1zZ3N0ciAiUHJvcGFnYXppb25lICVzICVzIGEgJXMiCisjOiBidWlsdGluL3B1c2guYzo1NDIKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICJyZXBvc2l0b3J5IgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDAKLW1zZ2lkICJQdXNoIEJyYW5jaGVzIgotbXNnc3RyICJQcm9wYWdhIHJhbWkiCisjOiBidWlsdGluL3B1c2guYzo1NDMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjQKK21zZ2lkICJwdXNoIGFsbCByZWZzIgorbXNnc3RyICJlc2VndWkgaWwgcHVzaCBkaSB0dXR0aSBpIHJpZmVyaW1lbnRpIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTQKLW1zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCi1tc2dzdHIgIlJhbWkgZGkgb3JpZ2luZSIKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NCBidWlsdGluL3NlbmQtcGFjay5jOjE2NgorbXNnaWQgIm1pcnJvciBhbGwgcmVmcyIKK21zZ3N0ciAiZXNlZ3VpIGlsIG1pcnJvciBkaSB0dXR0aSBpIHJpZmVyaW1lbnRpIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxMzEKLW1zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgotbXNnc3RyICJBcmNoaXZpbyBkaSBkZXN0aW5hemlvbmUiCisjOiBidWlsdGluL3B1c2guYzo1NDYKK21zZ2lkICJkZWxldGUgcmVmcyIKK21zZ3N0ciAiZWxpbWluYSByaWZlcmltZW50aSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTY5Ci1tc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKLW1zZ3N0ciAiT3B6aW9uaSBkaSB0cmFzZmVyaW1lbnRvIgorIzogYnVpbHRpbi9wdXNoLmM6NTQ3Cittc2dpZCAicHVzaCB0YWdzIChjYW4ndCBiZSB1c2VkIHdpdGggLS1hbGwgb3IgLS1taXJyb3IpIgorbXNnc3RyICJlc2VndWkgaWwgcHVzaCBkZWkgdGFnIChub24gcHXDsiBlc3NlcmUgdXNhdG8gY29uIC0tYWxsIG8gLS1taXJyb3IpIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzEKLW1zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKLW1zZ3N0ciAiU292cmFzY3JpdmkgcmFtbyBlc2lzdGVudGUgKGFsY3VuZSBtb2RpZmljaGUgcG90cmViYmVybyBlc3NlcmUgcGVyc2UpIgorIzogYnVpbHRpbi9wdXNoLmM6NTUwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY3Cittc2dpZCAiZm9yY2UgdXBkYXRlcyIKK21zZ3N0ciAiZm9yemEgZ2xpIGFnZ2lvcm5hbWVudGkiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE3NQotbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgotbXNnc3RyICJVdGlsaXp6YSAndGhpbiBwYWNrJyAocGVyIGNvbm5lc3Npb25pIGxlbnRlKSIKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MiBidWlsdGluL3NlbmQtcGFjay5jOjE4MQorbXNnaWQgIjxyZWZuYW1lPjo8ZXhwZWN0PiIKK21zZ3N0ciAiPG5vbWUgcmlmZXJpbWVudG8+Ojx2YWxvcmUgYXR0ZXNvPiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTc5Ci1tc2dpZCAiSW5jbHVkZSB0YWdzIgotbXNnc3RyICJJbmNsdWRpIGV0aWNoZXR0ZSIKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MyBidWlsdGluL3NlbmQtcGFjay5jOjE4MgorbXNnaWQgInJlcXVpcmUgb2xkIHZhbHVlIG9mIHJlZiB0byBiZSBhdCB0aGlzIHZhbHVlIgorbXNnc3RyICIiCisicmljaGllZGkgY2hlIGlsIHZlY2NoaW8gdmFsb3JlIGRlbCByaWZlcmltZW50byBjb3JyaXNwb25kYSBhIHF1ZXN0byB2YWxvcmUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NgorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIHB1c2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiY29udHJvbGxhIGlsIHB1c2ggcmljb3JzaXZvIGRlaSBzb3R0b21vZHVsaSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU4IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAidXNhIHVuIHRoaW4gcGFjayIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU5IGJ1aWx0aW4vcHVzaC5jOjU2MCBidWlsdGluL3NlbmQtcGFjay5jOjE2MQorIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjIKK21zZ2lkICJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIKK21zZ3N0ciAicHJvZ3JhbW1hIHJpY2V6aW9uZSBwYWNrIgorCisjOiBidWlsdGluL3B1c2guYzo1NjEKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL3N0YXR1cyIKK21zZ3N0ciAiaW1wb3N0YSBsJ3Vwc3RyZWFtIHBlciBnaXQgcHVsbC9zdGF0dXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NAorbXNnaWQgInBydW5lIGxvY2FsbHkgcmVtb3ZlZCByZWZzIgorbXNnc3RyICJlbGltaW5hIGkgcmlmZXJpbWVudGkgcmltb3NzaSBsb2NhbG1lbnRlIgorCisjOiBidWlsdGluL3B1c2guYzo1NjYKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAiaWdub3JhIGwnaG9vayBwcmUtcHVzaCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY3Cittc2dpZCAicHVzaCBtaXNzaW5nIGJ1dCByZWxldmFudCB0YWdzIgorbXNnc3RyICJlc2VndWkgaWwgcHVzaCBkZWkgdGFnIG1hbmNhbnRpIG1hIHJpbGV2YW50aSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTcwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY5Cittc2dpZCAiR1BHIHNpZ24gdGhlIHB1c2giCittc2dzdHIgImZpcm1hIGlsIHB1c2ggY29uIEdQRyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTcyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc2Cittc2dpZCAicmVxdWVzdCBhdG9taWMgdHJhbnNhY3Rpb24gb24gcmVtb3RlIHNpZGUiCittc2dzdHIgInJpY2hpZWRpIGwnYXRvbWljaXTDoCBkZWxsYSB0cmFuc2F6aW9uZSBhbCByZW1vdG8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU5MAorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICItLWRlbGV0ZSBub24gw6ggY29tcGF0aWJpbGUgY29uIC0tYWxsLCAtLW1pcnJvciBlIC0tdGFncyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTkyCittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIi0tZGVsZXRlIG5vbiBoYSBzZW5zbyBzZW56YSBhbGN1biByZWYiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICJyZXBvc2l0b3J5ICclcycgZXJyYXRvIgorCisjOiBidWlsdGluL3B1c2guYzo2MTMKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSAiCisicmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAiIgorIk5lc3N1bmEgZGVzdGluYXppb25lIHBlciBpbCBwdXNoIGNvbmZpZ3VyYXRhLlxuIgorIlNwZWNpZmljYSB1biBVUkwgZGFsbGEgcmlnYSBkaSBjb21hbmRvIG9wcHVyZSBjb25maWd1cmFyZSB1biByZXBvc2l0b3J5ICIKKyJyZW1vdG8gdXNhbmRvXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxub21lPiA8dXJsPlxuIgorIlxuIgorImUgcG9pIGVzZWd1aXJlIGlsIHB1c2ggdXNhbmRvIGlsIG5vbWUgZGVsIHJlbW90ZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bm9tZT5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjI4Cittc2dpZCAiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCBlIC0tdGFncyBub24gc29ubyBjb21wYXRpYmlsaSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjMwCittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1hbGwgbm9uIHB1w7IgZXNzZXJlIGNvbWJpbmF0byBjb24gZGVnbGkgc3BlY2lmaWNhdG9yaSByaWZlcmltZW50byIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM0Cittc2dpZCAiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLW1pcnJvciBlIC0tdGFncyBub24gc29ubyBjb21wYXRpYmlsaSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM2Cittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1taXJyb3Igbm9uIHB1w7IgZXNzZXJlIGNvbWJpbmF0byBjb24gZGVnbGkgc3BlY2lmaWNhdG9yaSByaWZlcmltZW50byIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM5Cittc2dpZCAiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIGUgLS1taXJyb3Igbm9uIHNvbm8gY29tcGF0aWJpbGkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjY0MworbXNnaWQgInB1c2ggb3B0aW9ucyBtdXN0IG5vdCBoYXZlIG5ldyBsaW5lIGNoYXJhY3RlcnMiCittc2dzdHIgImxlIG9wemlvbmkgcHVzaCBub24gZGV2b25vIGF2ZXJlIGNhcmF0dGVyaSBkaSBmaW5lIHJpZ2EiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjgKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLWJhc2U+Li48b2xkLXRpcD4gPG5ldy1iYXNlPi4uPG5ldy10aXA+IgorbXNnc3RyICIiCisiZ2l0IHJhbmdlLWRpZmYgWzxvcHppb25pPl0gPHZlY2NoaWEgYmFzZT4uLjx2ZWNjaGlvIHVsdGltbyBjb21taXQ+IDxudW92YSAiCisiYmFzZT4uLjxudW92byB1bHRpbW8gY29tbWl0PiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OQorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtdGlwPi4uLjxuZXctdGlwPiIKK21zZ3N0ciAiIgorImdpdCByYW5nZS1kaWZmIFs8b3B6aW9uaT5dIDx2ZWNjaGlvIHVsdGltbyBjb21taXQ+Li4uPG51b3ZvIHVsdGltbyBjb21taXQ+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoxMAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxiYXNlPiA8b2xkLXRpcD4gPG5ldy10aXA+IgorbXNnc3RyICIiCisiZ2l0IHJhbmdlLWRpZmYgWzxvcHppb25pPl0gPGJhc2U+IDx2ZWNjaGlvIHVsdGltbyBjb21taXQ+IDxudW92byB1bHRpbW8gIgorImNvbW1pdD4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjIyCittc2dpZCAiUGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAiUGVyY2VudHVhbGUgaW4gYmFzZSBhIGN1aSB2aWVuZSBwZXNhdGEgbGEgY3JlYXppb25lIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyNAorbXNnaWQgInVzZSBzaW1wbGUgZGlmZiBjb2xvcnMiCittc2dzdHIgInVzYSBjb2xvcmkgc2VtcGxpY2kgcGVyIGlsIGRpZmYiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAibm90ZXMiCittc2dzdHIgIm5vdGUiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAicGFzc2VkIHRvICdnaXQgbG9nJyIKK21zZ3N0ciAicGFzc2F0byBhICdnaXQgbG9nJyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NTAgYnVpbHRpbi9yYW5nZS1kaWZmLmM6NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gLi4gaW4gcmFuZ2U6ICclcyciCittc2dzdHIgIm5lc3N1biAuLiBuZWxsJ2ludGVydmFsbG86ICclcyciCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjY0Cittc2dpZCAic2luZ2xlIGFyZyBmb3JtYXQgbXVzdCBiZSBzeW1tZXRyaWMgcmFuZ2UiCittc2dzdHIgImlsIGZvcm1hdG8gZGVsbCd1bmljbyBhcmdvbWVudG8gZGV2J2Vzc2VyZSB1biBpbnRlcnZhbGxvIHNpbW1ldHJpY28iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjc5Cittc2dpZCAibmVlZCB0d28gY29tbWl0IHJhbmdlcyIKK21zZ3N0ciAiZGV2b25vIGVzc2VyZSBzcGVjaWZpY2F0aSBkdWUgaW50ZXJ2YWxsaSBjb21taXQiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6NDEKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLSIKKyJwcmVmaXg9PHByZWZpc3NvPikgWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLSIKKyJzcGFyc2UtY2hlY2tvdXRdIFstLWluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPGVzcHJlc3Npb25lIGFsYmVybyAxPiAiCisiWzxlc3ByZXNzaW9uZSBhbGJlcm8gMj4gWzxlc3ByZXNzaW9uZSBhbGJlcm8gMz5dXSkiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAic2NyaXZpIGwnaW5kaWNlIHJpc3VsdGFudGUgaW4gPGZpbGU+IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICJzdnVvdGEgc29sbyBsJ2luZGljZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjkKK21zZ2lkICJNZXJnaW5nIgorbXNnc3RyICJNZXJnZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzEKK21zZ2lkICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIgorbXNnc3RyICJlc2VndWkgaWwgbWVyZ2Ugb2x0cmUgYSB1bmEgbGV0dHVyYSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzMKK21zZ2lkICIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiCittc2dzdHIgIm1lcmdlIGEgdHJlIHZpZSBzZSBub24gc29ubyByaWNoaWVzdGkgbWVyZ2UgYSBsaXZlbGxvIGRpIGZpbGUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM1Cittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAibWVyZ2UgYSB0cmUgdmllIHNlIHNvbm8gcHJlc2VudGkgYWdnaXVudGUgZWQgZWxpbWluYXppb25pIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgImNvbWUgLW0sIG1hIHNjYXJ0YSBsZSB2b2NpIG5vbiBzb3R0b3Bvc3RlIGEgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM4Cittc2dpZCAiPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICI8c290dG9kaXJlY3Rvcnk+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzkKK21zZ2lkICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAibGVnZ2kgbCdhbGJlcm8gbmVsbCdpbmRpY2UgaW4gPHNvdHRvZGlyZWN0b3J5Pi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQyCittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAiYWdnaW9ybmEgbCdhbGJlcm8gZGkgbGF2b3JvIGNvbiBpbCByaXN1bHRhdG8gZGVsIG1lcmdlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiZ2l0aWdub3JlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAiY29uc2VudGkgbGEgc292cmFzY3JpdHR1cmEgZGVpIGZpbGUgaWdub3JhdGkgZXNwbGljaXRhbWVudGUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ4Cittc2dpZCAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIgorbXNnc3RyICJub24gY29udHJvbGxhcmUgbCdhbGJlcm8gZGkgbGF2b3JvIGRvcG8gaWwgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ5Cittc2dpZCAiZG9uJ3QgdXBkYXRlIHRoZSBpbmRleCBvciB0aGUgd29yayB0cmVlIgorbXNnc3RyICJub24gYWdnaW9ybmFyZSBsJ2luZGljZSBvIGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTEKK21zZ2lkICJza2lwIGFwcGx5aW5nIHNwYXJzZSBjaGVja291dCBmaWx0ZXIiCittc2dzdHIgInNhbHRhIGwnYXBwbGljYXppb25lIGRlbCBmaWx0cm8gY2hlY2tvdXQgc3BhcnNlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MworbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAiZXNlZ3VpIGlsIGRlYnVnIGRpIHVucGFjay10cmVlcyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTcKK21zZ2lkICJzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcyIKK21zZ3N0ciAibm9uIHZpc3VhbGl6emFyZSBpIG1lc3NhZ2dpIGRpIGZlZWRiYWNrIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE4OAorbXNnaWQgIllvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICJQcmltYSBkZXZpIHJpc29sdmVyZSBsJ2luZGljZSBjb3JyZW50ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozMgorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+IHwgLS1rZWVwLWJhc2VdICIKKyJbPHVwc3RyZWFtPiBbPGJyYW5jaD5dXSIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B6aW9uaV0gWy0tZXhlYyA8Y29tYW5kbz5dIFstLW9udG8gPG51b3ZhIGJhc2U+IHwgLS1rZWVwLSIKKyJiYXNlXSBbPHVwc3RyZWFtPiBbPGJyYW5jaD5dXSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNAorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XSAtLXJvb3QgWzxicmFuY2g+XSIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y29tYW5kbz5dIFstLW9udG8gPG51b3ZhIGJhc2U+XSAtLXJvb3QgIgorIls8YnJhbmNoPl0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzYKK21zZ2lkICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCittc2dzdHIgImdpdCByZWJhc2UgLS1jb250aW51ZSB8IC0tYWJvcnQgfCAtLXNraXAgfCAtLWVkaXQtdG9kbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzUgYnVpbHRpbi9yZWJhc2UuYzoxOTkgYnVpbHRpbi9yZWJhc2UuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgdG9kbyBsaXN0OiAnJXMnIgorbXNnc3RyICJlbGVuY28gdG9kbyBpbnV0aWxpenphYmlsZTogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSB1biAlcyB0ZW1wb3JhbmVvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjI5OAorbXNnaWQgImNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjb250cmFzc2VnbmFyZSBjb21lIGludGVyYXR0aXZvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM1MgorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSB0b2RvIGxpc3QiCittc2dzdHIgImltcG9zc2liaWxlIGdlbmVyYXJlIGwnZWxlbmNvIHRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzkxCittc2dpZCAiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iCittc2dzdHIgIiIKKyJsZSBvcHppb25pIC0tdXBzdHJlYW0gbyAtLW9udG8gcmljaGllZG9ubyBjaGUgc2lhIGZvcm5pdG8gdW4gY29tbWl0IGRpIGJhc2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDYxCittc2dpZCAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZWJhc2UgLS1pbnRlcmFjdGl2ZSBbPG9wemlvbmk+XSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzQgYnVpbHRpbi9yZWJhc2UuYzoxNTUwCittc2dpZCAiKERFUFJFQ0FURUQpIGtlZXAgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAiKERFUFJFQ0FUTykgbWFudGllbmkgaSBjb21taXQgdnVvdGkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc4IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI4Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICJjb25zZW50aSBjb21taXQgY29uIG1lc3NhZ2dpIHZ1b3RpIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4MAorbXNnaWQgInJlYmFzZSBtZXJnZSBjb21taXRzIgorbXNnc3RyICJlc2VndWkgaWwgcmViYXNlIGRlaSBjb21taXQgZGkgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgyCittc2dpZCAia2VlcCBvcmlnaW5hbCBicmFuY2ggcG9pbnRzIG9mIGNvdXNpbnMiCittc2dzdHIgIm1hbnRpZW5pIGkgcHVudGkgZGkgYnJhbmNoIG9yaWdpbmFsaSBkZWkgY3VnaW5pIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NAorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgInNwb3N0YSBpIGNvbW1pdCBjaGUgaW5pemlhbm8gY29uIHNxdWFzaCEvZml4dXAhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NQorbXNnaWQgInNpZ24gY29tbWl0cyIKK21zZ3N0ciAiZmlybWEgaSBjb21taXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg3IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MAorbXNnaWQgImRpc3BsYXkgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgInZpc3VhbGl6emEgdW4gZGlmZnN0YXQgZGVsbGUgbW9kaWZpY2hlIHVwc3RyZWFtIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4OQorbXNnaWQgImNvbnRpbnVlIHJlYmFzZSIKK21zZ3N0ciAiY29udGludWEgaWwgcmViYXNlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MQorbXNnaWQgInNraXAgY29tbWl0IgorbXNnc3RyICJzYWx0YSBpbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkyCittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJtb2RpZmljYSBsJ2VsZW5jbyB0b2RvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NAorbXNnaWQgInNob3cgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgInZpc3VhbGl6emEgbGEgcGF0Y2ggY29ycmVudGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk3Cittc2dpZCAic2hvcnRlbiBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgImFiYnJldmlhIGdsaSBJRCBkZWkgY29tbWl0IG5lbGwnZWxlbmNvIHRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk5Cittc2dpZCAiZXhwYW5kIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiZXNwYW5kaSBnbGkgSUQgZGVpIGNvbW1pdCBuZWxsJ2VsZW5jbyB0b2RvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMQorbXNnaWQgImNoZWNrIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgImNvbnRyb2xsYSBsJ2VsZW5jbyB0b2RvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMworbXNnaWQgInJlYXJyYW5nZSBmaXh1cC9zcXVhc2ggbGluZXMiCittc2dzdHIgInJpZGlzcG9uaSBsZSByaWdoZSBmaXh1cC9zcXVhc2giCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA1Cittc2dpZCAiaW5zZXJ0IGV4ZWMgY29tbWFuZHMgaW4gdG9kbyBsaXN0IgorbXNnc3RyICJpbnNlcmlzY2kgaSBjb21hbmRpIGV4ZWMgbmVsbCdlbGVuY28gdG9kbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDYKK21zZ2lkICJvbnRvIgorbXNnc3RyICJzdSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDkKK21zZ2lkICJyZXN0cmljdC1yZXZpc2lvbiIKK21zZ3N0ciAicmV2aXNpb25pLWxpbWl0ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDkKK21zZ2lkICJyZXN0cmljdCByZXZpc2lvbiIKK21zZ3N0ciAibGltaXRhIGxhIHJldmlzaW9uZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTEKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLXN1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxMgorbXNnaWQgInNxdWFzaCBvbnRvIgorbXNnc3RyICJlc2VndWkgbG8gc3F1YXNoIHN1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNAorbXNnaWQgInRoZSB1cHN0cmVhbSBjb21taXQiCittc2dzdHIgImlsIGNvbW1pdCB1cHN0cmVhbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJoZWFkLW5hbWUiCittc2dzdHIgIm5vbWUgaGVhZCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJoZWFkIG5hbWUiCittc2dzdHIgIm5vbWUgaGVhZCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjEKK21zZ2lkICJyZWJhc2Ugc3RyYXRlZ3kiCittc2dzdHIgInN0cmF0ZWdpYSBkaSByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIyCittc2dpZCAic3RyYXRlZ3ktb3B0cyIKK21zZ3N0ciAib3B6aW9uaSBzdHJhdGVnaWEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIzCittc2dpZCAic3RyYXRlZ3kgb3B0aW9ucyIKK21zZ3N0ciAib3B6aW9uaSBzdHJhdGVnaWEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI0Cittc2dpZCAic3dpdGNoLXRvIgorbXNnc3RyICJwYXNzYSBhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNQorbXNnaWQgInRoZSBicmFuY2ggb3IgY29tbWl0IHRvIGNoZWNrb3V0IgorbXNnc3RyICJpbCBicmFuY2ggbyBpbCBjb21taXQgZGkgY3VpIGVzZWd1aXJlIGlsIGNoZWNrb3V0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNgorbXNnaWQgIm9udG8tbmFtZSIKK21zZ3N0ciAibm9tZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjYKK21zZ2lkICJvbnRvIG5hbWUiCittc2dzdHIgInN1bCBub21lIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNworbXNnaWQgImNtZCIKK21zZ3N0ciAiY29tYW5kbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjcKK21zZ2lkICJ0aGUgY29tbWFuZCB0byBydW4iCittc2dzdHIgImlsIGNvbWFuZG8gZGEgZXNlZ3VpcmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTMwIGJ1aWx0aW4vcmViYXNlLmM6MTU4NAorbXNnaWQgImF1dG9tYXRpY2FsbHkgcmUtc2NoZWR1bGUgYW55IGBleGVjYCB0aGF0IGZhaWxzIgorbXNnc3RyICJzY2hlZHVsYSBudW92YW1lbnRlIGxlIG9wZXJhemlvbmkgYGV4ZWNgIG5vbiByaXVzY2l0ZSBhdXRvbWF0aWNhbWVudGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTQ2Cittc2dpZCAiLS1bbm8tXXJlYmFzZS1jb3VzaW5zIGhhcyBubyBlZmZlY3Qgd2l0aG91dCAtLXJlYmFzZS1tZXJnZXMiCittc2dzdHIgIi0tW25vLV1yZWJhc2UtY291c2lucyBub24gaGEgZWZmZXR0byBzZW56YSAtLXJlYmFzZS1tZXJnZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiJXMgcmljaGllZGUgdW4gcmViYXNlIGludGVyYXR0aXZvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0ICdvbnRvJzogJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgb3R0ZW5lcmUgJ29udG8nOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYyNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yaWctaGVhZDogJyVzJyIKK21zZ3N0ciAib3JpZy1oZWFkIG5vbiB2YWxpZGE6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGludmFsaWQgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU6ICclcyciCittc2dzdHIgImlnbm9ybyBpbCB2YWxvcmUgbm9uIHZhbGlkbyBwZXIgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIkltcG9zc2liaWxlIGxlZ2dlcmUgJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBtZW1vcml6emFyZSAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo4NTMKK21zZ2lkICJjb3VsZCBub3QgZGV0ZXJtaW5lIEhFQUQgcmV2aXNpb24iCittc2dzdHIgImltcG9zc2liaWxlIGRldGVybWluYXJlIGxhIHJldmlzaW9uZSBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjk3NiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEKK21zZ2lkICIiCisiUmVzb2x2ZSBhbGwgY29uZmxpY3RzIG1hbnVhbGx5LCBtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgd2l0aFxuIgorIlwiZ2l0IGFkZC9ybSA8Y29uZmxpY3RlZF9maWxlcz5cIiwgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJZb3UgY2FuIGluc3RlYWQgc2tpcCB0aGlzIGNvbW1pdDogcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIi5cbiIKKyJUbyBhYm9ydCBhbmQgZ2V0IGJhY2sgdG8gdGhlIHN0YXRlIGJlZm9yZSBcImdpdCByZWJhc2VcIiwgcnVuIFwiZ2l0IHJlYmFzZSAtLSIKKyJhYm9ydFwiLiIKK21zZ3N0ciAiIgorIlJpc29sdmkgbWFudWFsbWVudGUgdHV0dGkgaSBjb25mbGl0dGksIGNvbnRyYXNzZWduYWxpIGNvbWVcbiIKKyJyaXNvbHRpIGNvbiBcImdpdCBhZGQvcm0gPGZpbGUgaW4gY29uZmxpdHRvPlwiLCBxdWluZGkgZXNlZ3VpXG4iCisiXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJJbiBhbHRlcm5hdGl2YSwgcHVvaSBzYWx0YXJlIHF1ZXN0byBjb21taXQ6IGVzZWd1aSBcImdpdCByZWJhc2VcbiIKKyItLXNraXBcIi5cbiIKKyJQZXIgaW50ZXJyb21wZXJlIGwnb3BlcmF6aW9uZSBlIHRvcm5hcmUgYWxsbyBzdGF0byBwcmVjZWRlbnRlXG4iCisiaWwgXCJnaXQgcmViYXNlXCIsIGVzZWd1aSBcImdpdCByZWJhc2UgLS1hYm9ydFwiLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJnaXQgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgcHJlcGFyaW5nIHRoZSBwYXRjaGVzIHRvIHJlcGxheVxuIgorInRoZXNlIHJldmlzaW9uczpcbiIKKyJcbiIKKyIgICAgJXNcbiIKKyJcbiIKKyJBcyBhIHJlc3VsdCwgZ2l0IGNhbm5vdCByZWJhc2UgdGhlbS4iCittc2dzdHIgIiIKKyJcbiIKKyJHaXQgaGEgcmlzY29udHJhdG8gdW4gZXJyb3JlIGR1cmFudGUgbGEgcHJlcGFyYXppb25lIGRlbGxlIHBhdGNoXG4iCisicGVyIGFwcGxpY2FyZSBudW92YW1lbnRlIHF1ZXN0ZSByZXZpc2lvbmk6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiRGkgY29uc2VndWVuemEsIEdpdCBub24gcHXDsiBlc2VndWlybmUgaWwgcmViYXNlLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bnJlY29nbml6ZWQgZW1wdHkgdHlwZSAnJXMnOyB2YWxpZCB2YWx1ZXMgYXJlIFwiZHJvcFwiLCBcImtlZXBcIiwgYW5kIFwiYXNrIgorIlwiLiIKK21zZ3N0ciAiIgorInRpcG8gdnVvdG8gJyVzJyBub24gcmljb25vc2NpdXRvOyBpIHZhbG9yaSB2YWxpZGkgc29ubyBcImRyb3BcIiwgXCJrZWVwXCIgZSAiCisiXCJhc2tcIi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXNcbiIKKyJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuXG4iCisiU2VlIGdpdC1yZWJhc2UoMSkgZm9yIGRldGFpbHMuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxicmFuY2g+J1xuIgorIlxuIgorbXNnc3RyICIiCisiJXNcbiIKKyJTcGVjaWZpY2EgaWwgYnJhbmNoIHN1IGN1aSBlZmZldHR1YXJlIGlsIHJlYmFzZS5cbiIKKyJWZWRpIGdpdC1yZWJhc2UoMSkgcGVyIGkgZGV0dGFnbGkuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxicmFuY2g+J1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJTZSB2dW9pIGltcG9zdGFyZSBsZSBpbmZvcm1hemlvbmkgZGkgdHJhY2NpYW1lbnRvIHBlciBxdWVzdG8gYnJhbmNoIHB1b2kgIgorImZhcmxvIGNvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDcKK21zZ2lkICJleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICJpIGNvbWFuZGkgZXhlYyBub24gcG9zc29ubyBjb250ZW5lcmUgY2FyYXR0ZXJpIGRpIGZpbmUgcmlnYSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDUxCittc2dpZCAiZW1wdHkgZXhlYyBjb21tYW5kIgorbXNnc3RyICJjb21hbmRvIGV4ZWMgdnVvdG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MQorbXNnaWQgInJlYmFzZSBvbnRvIGdpdmVuIGJyYW5jaCBpbnN0ZWFkIG9mIHVwc3RyZWFtIgorbXNnc3RyICJlc2VndWkgaWwgcmViYXNlIHN1bCBicmFuY2ggc3BlY2lmaWNhdG8gYW56aWNow6kgc3UgcXVlbGxvIHVwc3RyZWFtIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODMKK21zZ2lkICJ1c2UgdGhlIG1lcmdlLWJhc2Ugb2YgdXBzdHJlYW0gYW5kIGJyYW5jaCBhcyB0aGUgY3VycmVudCBiYXNlIgorbXNnc3RyICJ1c2EgbGEgYmFzZSBkZWwgbWVyZ2UgZGVsbCd1cHN0cmVhbSBlIGRlbCBicmFuY2ggY29tZSBiYXNlIGNvcnJlbnRlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODUKK21zZ2lkICJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIgorbXNnc3RyICJjb25zZW50aSBsJ2VzZWN1emlvbmUgZGVsbCdob29rIHByZS1yZWJhc2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4NworbXNnaWQgImJlIHF1aWV0LiBpbXBsaWVzIC0tbm8tc3RhdCIKK21zZ3N0ciAic2lpIHNpbGVuemlvc28uIGltcGxpY2EgLS1uby1zdGF0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTMKK21zZ2lkICJkbyBub3Qgc2hvdyBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgIm5vbiB2aXN1YWxpenphcmUgdW4gZGlmZnN0YXQgZGVsbGUgbW9kaWZpY2hlIHVwc3RyZWFtIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTYKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5OiBsaW5lIHRvIGVhY2ggY29tbWl0IgorbXNnc3RyICJhZ2dpdW5naSB1bmEgcmlnYSBTaWduZWQtb2ZmLWJ5OiBhIG9nbmkgY29tbWl0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTggYnVpbHRpbi9yZWJhc2UuYzoxNTAyIGJ1aWx0aW4vcmViYXNlLmM6MTUwNAorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFtJyIKK21zZ3N0ciAicGFzc2F0byBhICdnaXQgYW0nIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDYgYnVpbHRpbi9yZWJhc2UuYzoxNTA4Cittc2dpZCAicGFzc2VkIHRvICdnaXQgYXBwbHknIgorbXNnc3RyICJwYXNzYXRvIGEgJ2dpdCBhcHBseSciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxMCBidWlsdGluL3JlYmFzZS5jOjE1MTMKK21zZ2lkICJjaGVycnktcGljayBhbGwgY29tbWl0cywgZXZlbiBpZiB1bmNoYW5nZWQiCittc2dzdHIgImVzZWd1aSBpbCBjaGVycnktcGljayBkaSB0dXR0aSBpIGNvbW1pdCwgYW5jaGUgc2Ugbm9uIG1vZGlmaWNhdGkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxNQorbXNnaWQgImNvbnRpbnVlIgorbXNnc3RyICJjb250aW51YSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTE4Cittc2dpZCAic2tpcCBjdXJyZW50IHBhdGNoIGFuZCBjb250aW51ZSIKK21zZ3N0ciAic2FsdGEgbGEgcGF0Y2ggY29ycmVudGUgZSBjb250aW51YSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTIwCittc2dpZCAiYWJvcnQgYW5kIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIgorbXNnc3RyICJpbnRlcnJvbXBpIGVkIGVzZWd1aSBpbCBjaGVja291dCBkZWwgYnJhbmNoIG9yaWdpbmFyaW8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyMworbXNnaWQgImFib3J0IGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMiCittc2dzdHIgImludGVycm9tcGkgbWEgbWFudGllbmkgbCdIRUFEIGRvdifDqCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTI0Cittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IGR1cmluZyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UiCittc2dzdHIgIm1vZGlmaWNhIGwnZWxlbmNvIHRvZG8gZHVyYW50ZSB1biByZWJhc2UgaW50ZXJhdHRpdm8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNworbXNnaWQgInNob3cgdGhlIHBhdGNoIGZpbGUgYmVpbmcgYXBwbGllZCBvciBtZXJnZWQiCittc2dzdHIgIiIKKyJ2aXN1YWxpenphIGlsIGZpbGUgcGF0Y2ggY2hlIHN0YSBwZXIgZXNzZXJlIGFwcGxpY2F0byBvIHNvdHRvcG9zdG8gYSBtZXJnZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTMwCittc2dpZCAidXNlIGFwcGx5IHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICJ1c2EgbGUgc3RyYXRlZ2llIGRpIGFwcGx5IHBlciBlc2VndWlyZSBpbCByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzNAorbXNnaWQgInVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICJ1c2EgbGUgc3RyYXRlZ2llIGRpIG1lcmdlIHBlciBlc2VndWlyZSBpbCByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzOAorbXNnaWQgImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIgorbXNnc3RyICIiCisiY29uc2VudGkgYWxsJ3V0ZW50ZSBkaSBtb2RpZmljYXJlIGwnZWxlbmNvIGRlaSBjb21taXQgZGkgY3VpIGVzZWd1aXJlIGlsICIKKyJyZWJhc2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU0MgorbXNnaWQgIihERVBSRUNBVEVEKSB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbSIKK21zZ3N0ciAiKERFUFJFQ0FUTykgcHJvdmEgYSByaWNyZWFyZSBpIG1lcmdlIGFuemljaMOpIGlnbm9yYXJsaSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTQ3Cittc2dpZCAiaG93IHRvIGhhbmRsZSBjb21taXRzIHRoYXQgYmVjb21lIGVtcHR5IgorbXNnc3RyICJjb21lIGdlc3RpcmUgaSBjb21taXQgY2hlIGRpdmVudGFubyB2dW90aSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTU0Cittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISB1bmRlciAtaSIKK21zZ3N0ciAic3Bvc3RhIGkgY29tbWl0IGNoZSBpbml6aWFubyBjb24gc3F1YXNoIS9maXh1cCEgaW4gLWkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2MAorbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIiCittc2dzdHIgImVzZWd1aSBzdGFzaC9zdGFzaCBwb3AgYXV0b21hdGljYW1lbnRlIHByaW1hIGUgZG9wbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTYyCittc2dpZCAiYWRkIGV4ZWMgbGluZXMgYWZ0ZXIgZWFjaCBjb21taXQgb2YgdGhlIGVkaXRhYmxlIGxpc3QiCittc2dzdHIgImFnZ2l1bmdpIHJpZ2hlIGV4ZWMgZG9wbyBvZ25pIGNvbW1pdCBkZWxsYSBsaXN0YSBtb2RpZmljYWJpbGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2NgorbXNnaWQgImFsbG93IHJlYmFzaW5nIGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAiY29uc2VudGkgaWwgcmViYXNlIGRpIGNvbW1pdCBjb24gbWVzc2FnZ2kgdnVvdGkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3MAorbXNnaWQgInRyeSB0byByZWJhc2UgbWVyZ2VzIGluc3RlYWQgb2Ygc2tpcHBpbmcgdGhlbSIKK21zZ3N0ciAicHJvdmEgYWQgZXNlZ3VpcmUgaWwgcmViYXNlIGRlaSBtZXJnZSBhbnppY2jDqSBzYWx0YXJsaSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTczCittc2dpZCAidXNlICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcgdG8gcmVmaW5lIHVwc3RyZWFtIgorbXNnc3RyICIiCisidXNhICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcgcGVyIHJpZGVmaW5pcmUgcGnDuSBwcmVjaXNhbWVudGUgbCd1cHN0cmVhbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTc1Cittc2dpZCAidXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAidXNhIGxhIHN0cmF0ZWdpYSBkaSBtZXJnZSBzcGVjaWZpY2F0YSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTc3IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE1Cittc2dpZCAib3B0aW9uIgorbXNnc3RyICJvcHppb25lIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzgKK21zZ2lkICJwYXNzIHRoZSBhcmd1bWVudCB0aHJvdWdoIHRvIHRoZSBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAicGFzc2EgbCdhcmdvbWVudG8gYWxsYSBzdHJhdGVnaWEgZGkgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU4MQorbXNnaWQgInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiCittc2dzdHIgImVzZWd1aSBpbCByZWJhc2UgZGkgdHV0dGkgaSBjb21taXQgcmFnZ2l1bmdpYmlsaSBmaW5vIGEgcXVlbGxpIHJhZGljZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTk4Cittc2dpZCAiIgorInRoZSByZWJhc2UudXNlQnVpbHRpbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQhXG4iCisiU2VlIGl0cyBlbnRyeSBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJpbCBzdXBwb3J0byBwZXIgcmViYXNlLnVzZUJ1aWx0aW4gw6ggc3RhdG8gcmltb3NzbyFcbiIKKyJWZWRpIGxhIHZvY2UgcmVsYXRpdmEgaW4gJ2dpdCBoZWxwIGNvbmZpZycgcGVyIGkgZGV0dGFnbGkuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDQKK21zZ2lkICJJdCBsb29rcyBsaWtlICdnaXQgYW0nIGlzIGluIHByb2dyZXNzLiBDYW5ub3QgcmViYXNlLiIKK21zZ3N0ciAiU2VtYnJhIGNoZSAnZ2l0IGFtJyBzaWEgaW4gY29yc28uIEltcG9zc2liaWxlIGVzZWd1aXJlIGlsIHJlYmFzZS4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY0NQorbXNnaWQgIiIKKyJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIGlzIGRlcHJlY2F0ZWQuIFVzZSAtLXJlYmFzZS1tZXJnZXMgaW5zdGVhZC4iCittc2dzdHIgImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgw6ggZGVwcmVjYXRvLiBVc2EgLS1yZWJhc2UtbWVyZ2VzLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjUwCittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0ta2VlcC1iYXNlJyB3aXRoICctLW9udG8nIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjb21iaW5hcmUgJy0ta2VlcC1iYXNlJyBjb24gJy0tb250byciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1MgorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1yb290JyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY29tYmluYXJlICctLWtlZXAtYmFzZScgY29uICctLXJvb3QnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTYKK21zZ2lkICJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IgorbXNnc3RyICJOZXNzdW4gcmViYXNlIGluIGNvcnNvPyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjYwCittc2dpZCAiVGhlIC0tZWRpdC10b2RvIGFjdGlvbiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnRlcmFjdGl2ZSByZWJhc2UuIgorbXNnc3RyICIiCisiTCdhemlvbmUgLS1lZGl0LXRvZG8gcHXDsiBlc3NlcmUgdXNhdGEgc29sbyBkdXJhbnRlIHVuIHJlYmFzZSBpbnRlcmF0dGl2by4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY4MworbXNnaWQgIkNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIkltcG9zc2liaWxlIGxlZ2dlcmUgbCdIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2OTUKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyJEZXZpIG1vZGlmaWNhcmUgdHV0dGkgaSBjb25mbGl0dGkgZGkgbWVyZ2UgZVxuIgorInF1aW5kaSBjb250cmFzc2VnbmFybGkgY29tZSByaXNvbHRpIHVzYW5kb1xuIgorImdpdCBhZGQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTcxNAorbXNnaWQgImNvdWxkIG5vdCBkaXNjYXJkIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgImltcG9zc2liaWxlIHNjYXJ0YXJlIGxlIG1vZGlmaWNoZSBhbGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJXMiCittc2dzdHIgImltcG9zc2liaWxlIHJpdG9ybmFyZSBhICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICVzIGRpcmVjdG9yeSwgYW5kXG4iCisiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyJjYXNlLCBwbGVhc2UgdHJ5XG4iCisiXHQlc1xuIgorIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyJcdCVzXG4iCisiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyJ2YWx1YWJsZSB0aGVyZS5cbiIKK21zZ3N0ciAiIgorIlNlbWJyYSBjaGUgZXNpc3RhIGdpw6AgdW5hIGRpcmVjdG9yeSAlcyBlIG1pIGRvbWFuZG9cbiIKKyJzZSB0dSBzaWEgZ2nDoCBuZWwgYmVsIG1lenpvIGRpIHVuIGFsdHJvIHJlYmFzZS4gU2UgcXVlc3RvIMOoIGlsIGNhc28sXG4iCisicHJvdmEgY29uIGlsIGNvbWFuZG9cbiIKKyJcdCVzXG4iCisiU2UgcXVlc3RvIG5vbiDDqCBpbCBjYXNvLCBlc2VndWlcbiIKKyJcdCVzXG4iCisiZWQgZXNlZ3VpbWkgZGkgbnVvdm8uIE1pIGZlcm1vIG5lbCBjYXNvIGluIGN1aSB0dSBhYmJpYSBhbmNvcmFcbiIKKyJzYWx2YXRvIHF1YWxjb3NhIGRpIGltcG9ydGFudGUgbMOsLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4MDYKK21zZ2lkICJzd2l0Y2ggYEMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgImwnb3B6aW9uZSBgQ2AgcmljaGllZGUgdW4gdmFsb3JlIG51bWVyaWNvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBtb2RlOiAlcyIKK21zZ3N0ciAiTW9kbyBzY29ub3NjaXV0bzogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg2OQorbXNnaWQgIi0tc3RyYXRlZ3kgcmVxdWlyZXMgLS1tZXJnZSBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXN0cmF0ZWd5IHJpY2hpZWRlIC0tbWVyZ2UgbyAtLWludGVyYWN0aXZlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4OTkKK21zZ2lkICJjYW5ub3QgY29tYmluZSBhcHBseSBvcHRpb25zIHdpdGggbWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAibm9uIMOoIHBvc3NpYmlsZSBjb21iaW5hcmUgbGUgb3B6aW9uaSBhcHBseSBjb24gcXVlbGxlIG1lcmdlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biByZWJhc2UgYmFja2VuZDogJXMiCittc2dzdHIgIkJhY2tlbmQgZGkgcmViYXNlIHNjb25vc2NpdXRvOiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTM3Cittc2dpZCAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIHJlcXVpcmVzIC0tZXhlYyBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMgcmljaGllZGUgLS1leGVjIG8gLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTU3Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjb21iaW5hcmUgJy0tcHJlc2VydmUtbWVyZ2VzJyBjb24gJy0tcmViYXNlLW1lcmdlcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk2MQorbXNnaWQgIiIKKyJlcnJvcjogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnIgorbXNnc3RyICIiCisiZXJyb3JlOiBpbXBvc3NpYmlsZSBjb21iaW5hcmUgJy0tcHJlc2VydmUtbWVyZ2VzJyBjb24gJy0tcmVzY2hlZHVsZS1mYWlsZWQtIgorImV4ZWMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJXMnIgorbXNnc3RyICJ1cHN0cmVhbSBub24gdmFsaWRvOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5OTEKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIG5ldyByb290IGNvbW1pdCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY3JlYXJlIGlsIG51b3ZvIGNvbW1pdCByYWRpY2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjAxNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2Ugd2l0aCBicmFuY2giCittc2dzdHIgIiIKKyInJXMnOiDDqCBuZWNlc3NhcmlvIHNwZWNpZmljYXJlIGVzYXR0YW1lbnRlIHVuYSBiYXNlIHBlciBpbCBtZXJnZSBjb24gaWwgIgorImJyYW5jaCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSIKK21zZ3N0ciAiJyVzJzogw6ggbmVjZXNzYXJpbyBzcGVjaWZpY2FyZSBlc2F0dGFtZW50ZSB1bmEgYmFzZSBwZXIgaWwgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjAyOAorIywgYy1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdCAnJXMnIgorbXNnc3RyICInJXMnIG5vbiBwdW50YSBhIHVuIGNvbW1pdCB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2gvY29tbWl0ICclcyciCittc2dzdHIgImVycm9yZSBmYXRhbGU6IGJyYW5jaC9jb21taXQgJyVzJyBpbmVzaXN0ZW50ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDYyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZWY6ICVzIgorbXNnc3RyICJSaWZlcmltZW50byBub24gZXNpc3RlbnRlOiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDczCittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCB0byBhIHJldmlzaW9uIgorbXNnc3RyICJJbXBvc3NpYmlsZSByaXNvbHZlcmUgSEVBRCBjb21lIHJldmlzaW9uZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTExCittc2dpZCAiQ2Fubm90IGF1dG9zdGFzaCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgbG8gc3Rhc2ggYXV0b21hdGljbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgc3Rhc2ggcmVzcG9uc2U6ICclcyciCittc2dzdHIgIlJpc3Bvc3RhIHN0YXNoIG5vbiBhdHRlc2E6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY3JlYXJlIGxhIGRpcmVjdG9yeSAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICVzXG4iCittc2dzdHIgIlN0YXNoIGF1dG9tYXRpY28gY3JlYXRvOiAlc1xuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjYKK21zZ2lkICJjb3VsZCBub3QgcmVzZXQgLS1oYXJkIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSByZXNldCAtLWhhcmQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEzNQorbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIkVzZWd1aW5lIGlsIGNvbW1pdCBvIGxvIHN0YXNoLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzd2l0Y2ggdG8gJXMiCittc2dzdHIgImltcG9zc2liaWxlIHBhc3NhcmUgYSAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTgwCittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLiIKK21zZ3N0ciAiSEVBRCDDqCBhZ2dpb3JuYXRvLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUuXG4iCittc2dzdHIgIklsIGJyYW5jaCBjb3JyZW50ZSAlcyDDqCBhZ2dpb3JuYXRvLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxOTAKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICJIRUFEIMOoIGFnZ2lvcm5hdG8sIGZvcnpvIGlsIHJlYmFzZS4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAlcyBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLlxuIgorbXNnc3RyICJJbCBicmFuY2ggY29ycmVudGUgJXMgw6ggYWdnaW9ybmF0bywgZm9yem8gaWwgcmViYXNlLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMDAKK21zZ2lkICJUaGUgcHJlLXJlYmFzZSBob29rIHJlZnVzZWQgdG8gcmViYXNlLiIKK21zZ3N0ciAiTCdob29rIHByZS1yZWJhc2UgaGEgcmlmaXV0YXRvIGRpIGNvbnNlbnRpcmUgaWwgcmViYXNlLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgdG8gJXM6XG4iCittc2dzdHIgIk1vZGlmaWNoZSBhICVzOlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIgorbXNnc3RyICJNb2RpZmljaGUgZGEgJXMgYSAlczpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLlxuIgorbXNnc3RyICIiCisiUGVyIHByaW1hIGNvc2EsIHJpcHJpc3Rpbm8gbCdoZWFkIHBlciByaWFwcGxpY2FyZSBsZSB0dWUgbW9kaWZpY2hlIHN1IGRpICIKKyJlc3NvLi4uXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjI0NAorbXNnaWQgIkNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2NvbGxlZ2FyZSBsJ0hFQUQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAlcyB0byAlcy5cbiIKK21zZ3N0ciAiRmFzdCBmb3J3YXJkIGRhICVzIGEgJXMgZXNlZ3VpdG8uXG4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MzMKK21zZ2lkICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKK21zZ3N0ciAiZ2l0IHJlY2VpdmUtcGFjayA8ZGlyZWN0b3J5IEdpdD4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODIxCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnlcbiIKKyJpcyBkZW5pZWQsIGJlY2F1c2UgaXQgd2lsbCBtYWtlIHRoZSBpbmRleCBhbmQgd29yayB0cmVlIGluY29uc2lzdGVudFxuIgorIndpdGggd2hhdCB5b3UgcHVzaGVkLCBhbmQgd2lsbCByZXF1aXJlICdnaXQgcmVzZXQgLS1oYXJkJyB0byBtYXRjaFxuIgorInRoZSB3b3JrIHRyZWUgdG8gSEVBRC5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCB0aGUgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVcbiIKKyJ0byAnaWdub3JlJyBvciAnd2FybicgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IHB1c2hpbmcgaW50b1xuIgorIml0cyBjdXJyZW50IGJyYW5jaDsgaG93ZXZlciwgdGhpcyBpcyBub3QgcmVjb21tZW5kZWQgdW5sZXNzIHlvdVxuIgorImFycmFuZ2VkIHRvIHVwZGF0ZSBpdHMgd29yayB0cmVlIHRvIG1hdGNoIHdoYXQgeW91IHB1c2hlZCBpbiBzb21lXG4iCisib3RoZXIgd2F5LlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2aW91ciwgc2V0XG4iCisiJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisiUGVyIGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSwgbCdhZ2dpb3JuYW1lbnRvIGRlbCBicmFuY2ggY29ycmVudGVcbiIKKyJpbiB1biByZXBvc2l0b3J5IG5vbiBzcG9nbGlvIMOoIG5lZ2F0bywgcGVyY2jDqSByZW5kZXJlYmJlIGwnaW5kaWNlXG4iCisiZSBsJ2FsYmVybyBkaSBsYXZvcm8gaW5jb25zaXN0ZW50aSBjb24gaSBkYXRpIGRpIGN1aSBzaSDDqCBlc2VndWl0b1xuIgorImlsIHB1c2ggZSByaWNoaWVkZXJlYmJlICdnaXQgcmVzZXQgLS1oYXJkJyBwZXIgcmlwcmlzdGluYXJlIGxhXG4iCisiY29ycmlzcG9uZGVuemEgZGVsbCdhbGJlcm8gZGkgbGF2b3JvIGNvbiBIRUFELlxuIgorIlxuIgorIlB1b2kgaW1wb3N0YXJlIGxhIHZhcmlhYmlsZSBkaSBjb25maWd1cmF6aW9uZVxuIgorIidyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBhICdpZ25vcmUnIG8gJ3dhcm4nIG5lbCByZXBvc2l0b3J5XG4iCisicmVtb3RvIHBlciBjb25zZW50aXJlIGlsIHB1c2ggbmVsIGJyYW5jaCBjb3JyZW50ZTsgY2nDsiBub25vc3RhbnRlLFxuIgorInF1ZXN0byBub24gw6ggcmFjY29tYW5kYXRvIGEgbWVubyBjaGUgdHUgbm9uIHByb3Z2ZWRhIGFkIGFnZ2lvcm5hcmVcbiIKKyJpbCBzdW8gYWxiZXJvIGRpIGxhdm9ybyBpbiBtb2RvIGNoZSBjb3JyaXNwb25kYSBhIGNpw7IgZGkgY3VpIGhhaVxuIgorImVzZWd1aXRvIGlsIHB1c2ggaW4gcXVhbGNoZSBhbHRybyBtb2RvLlxuIgorIlxuIgorIlBlciBub24gdmlzdWFsaXp6YXJlIHBpw7kgcXVlc3RvIG1lc3NhZ2dpbyBlIG1hbnRlbmVyZSBjb211bnF1ZVxuIgorImlsIGNvbXBvcnRhbWVudG8gcHJlZGVmaW5pdG8sIGltcG9zdGEgbGEgdmFyaWFiaWxlIGRpXG4iCisiY29uZmlndXJhemlvbmUgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGEgJ3JlZnVzZScuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjg0MQorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCBkZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggaXMgZGVuaWVkLCBiZWNhdXNlIHRoZSBuZXh0XG4iCisiJ2dpdCBjbG9uZScgd29uJ3QgcmVzdWx0IGluIGFueSBmaWxlIGNoZWNrZWQgb3V0LCBjYXVzaW5nIGNvbmZ1c2lvbi5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0b1xuIgorIid3YXJuJyBvciAnaWdub3JlJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgZGVsZXRpbmcgdGhlXG4iCisiY3VycmVudCBicmFuY2gsIHdpdGggb3Igd2l0aG91dCBhIHdhcm5pbmcgbWVzc2FnZS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSwgeW91IGNhbiBzZXQgaXQgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisiUGVyIGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSwgbCdlbGltaW5hemlvbmUgZGVsIGJyYW5jaCBjb3JyZW50ZVxuIgorIsOoIG5lZ2F0YSwgcGVyY2jDqSBpbCBwcm9zc2ltbyAnZ2l0IGNsb25lJyBmYXJlYmJlIHPDrCBjaGUgbm9uIHZlbmdhXG4iCisiZXNlZ3VpdG8gaWwgY2hlY2tvdXQgZGkgbmVzc3VuIGZpbGUsIGNhdXNhbmRvIGNvbmZ1c2lvbmUuXG4iCisiXG4iCisiUHVvaSBpbXBvc3RhcmUgbGEgdmFyaWFiaWxlIGRpIGNvbmZpZ3VyYXppb25lXG4iCisiJ3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQnIGEgJ3dhcm4nIG8gJ2lnbm9yZScgbmVsIHJlcG9zaXRvcnlcbiIKKyJyZW1vdG8gcGVyIGNvbnNlbnRpcmUgbCdlbGltaW5hemlvbmUgZGVsIGJyYW5jaCBjb3JyZW50ZSwgY29uIG9cbiIKKyJzZW56YSB1biBtZXNzYWdnaW8gZCdhdnZpc28uXG4iCisiXG4iCisiUGVyIG5vbiB2aXN1YWxpenphcmUgcGnDuSBxdWVzdG8gbWVzc2FnZ2lvLCBwdW9pIGltcG9zdGFybGEgYVxuIgorIidyZWZ1c2UnLiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTM4Cittc2dpZCAicXVpZXQiCittc2dzdHIgIm5vbiB2aXN1YWxpenphcmUgbWVzc2FnZ2kiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MgorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIgorbXNnc3RyICJEZXZpIHNwZWNpZmljYXJlIHVuYSBkaXJlY3RvcnkuIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjE3Cittc2dpZCAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT08dGltZT5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT5dIFstLSIKKyJyZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGxdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9PHRlbXBvPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0ZW1wbz5dIFstLSIKKyJyZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGxdICIKKyI8cmlmZXJpbWVudGk+Li4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjIyCittc2dpZCAiIgorImdpdCByZWZsb2cgZGVsZXRlIFstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSAiCisiPHJlZnM+Li4uIgorbXNnc3RyICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8cmlmZXJpbWVudGk+Li4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjI1Cittc2dpZCAiZ2l0IHJlZmxvZyBleGlzdHMgPHJlZj4iCittc2dzdHIgImdpdCByZWZsb2cgZXhpc3RzIDxyaWZlcmltZW50bz4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NTY4IGJ1aWx0aW4vcmVmbG9nLmM6NTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIG5vbiDDqCB1biB0aW1lc3RhbXAgdmFsaWRvIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nIHJlYWNoYWJsZSBvYmplY3RzLi4uIgorbXNnc3RyICJDb250cmFzc2Vnbm8gZ2xpIG9nZ2V0dGkgcmFnZ2l1bmdpYmlsaS4uLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIG5vd2hlcmUhIgorbXNnc3RyICIlcyBub24gcHVudGEgYSBuaWVudGUhIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY5NgorbXNnaWQgIm5vIHJlZmxvZyBzcGVjaWZpZWQgdG8gZGVsZXRlIgorbXNnc3RyICJuZXNzdW4gcmVnaXN0cm8gcmlmZXJpbWVudGkgZGEgZWxpbWluYXJlIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSByZWZsb2c6ICVzIgorbXNnc3RyICJub24gw6ggdW4gcmVnaXN0cm8gcmlmZXJpbWVudGk6ICVzIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjcxMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyByZWZsb2cgZm9yICclcyciCittc2dzdHIgImxvZyByaWZlcmltZW50aSBub24gZXNpc3RlbnRlIHBlciAnJXMnIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZiBmb3JtYXQ6ICVzIgorbXNnc3RyICJmb3JtYXRvIHJpZmVyaW1lbnRvIG5vbiB2YWxpZG86ICVzIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc2NQorbXNnaWQgImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iCittc2dzdHIgImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOAorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxub21lPiA8VVJMPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOSBidWlsdGluL3JlbW90ZS5jOjM5Cittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgImdpdCByZW1vdGUgcmVuYW1lIDx2ZWNjaGlvPiA8bnVvdm8+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NDQKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDxub21lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMSBidWlsdGluL3JlbW90ZS5jOjQ5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bm9tZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMgorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxub21lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMworbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bm9tZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjQKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncnVwcG8+IHwgPHJlbW90bz4pLi4uXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNQorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxub21lPiA8YnJhbmNoPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNiBidWlsdGluL3JlbW90ZS5jOjc1Cittc2dpZCAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bm9tZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjcgYnVpbHRpbi9yZW1vdGUuYzo4MAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxub21lPiA8bnVvdm8gVVJMPiBbPHZlY2NoaW8gVVJMPl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjggYnVpbHRpbi9yZW1vdGUuYzo4MQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtZT4gPG5ld3VybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bm9tZT4gPG51b3ZvIFVSTD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjkgYnVpbHRpbi9yZW1vdGUuYzo4MgorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bm9tZT4gPFVSTD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzQKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs8b3B6aW9uaT5dIDxub21lPiA8VVJMPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5vbWU+IDxicmFuY2g+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU1Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bm9tZT4gPGJyYW5jaD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjAKK21zZ2lkICJnaXQgcmVtb3RlIHNob3cgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNob3cgWzxvcHppb25pPl0gPG5vbWU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY1Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHppb25pPl0gPG5vbWU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwCittc2dpZCAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcHRpb25zPl0gWzxncm91cD4gfCA8cmVtb3RlPl0uLi4iCittc2dzdHIgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B6aW9uaT5dIFs8Z3J1cHBvPiB8IDxyZW1vdG8+XS4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAiQWdnaW9ybmFtZW50byBkaSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzEKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3Igw6ggcGVyaWNvbG9zbyBlIGRlcHJlY2F0bzsgcGVyIGZhdm9yZVxuIgorIlx0IHVzYSBpbnZlY2UgLS1taXJyb3ItZmV0Y2ggbyAtLW1pcnJvci1wdXNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ29tZW50byBkaSBtaXJyb3Igc2Nvbm9zY2l1dG86ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NAorbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgInJlY3VwZXJhIGkgYnJhbmNoIHJlbW90aSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjYKK21zZ2lkICJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIgorbXNnc3RyICJpbXBvcnRhIHR1dHRpIGkgdGFnIGUgZ2xpIG9nZ2V0dGkgYXNzb2NpYXRpIGR1cmFudGUgaWwgcmVjdXBlcm8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY5Cittc2dpZCAib3IgZG8gbm90IGZldGNoIGFueSB0YWcgYXQgYWxsICgtLW5vLXRhZ3MpIgorbXNnc3RyICJvIG5vbiByZWN1cGVyYXJlIGFsY3VuIHRhZyAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEKK21zZ2lkICJicmFuY2goZXMpIHRvIHRyYWNrIgorbXNnc3RyICJicmFuY2ggZGEgdHJhY2NpYXJlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MgorbXNnaWQgIm1hc3RlciBicmFuY2giCittc2dzdHIgImJyYW5jaCBtYXN0ZXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTc0Cittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgIiIKKyJpbXBvc3RhIGlsIHJlbW90byBjb21lIG1pcnJvciBzdSBjdWkgZXNlZ3VpcmUgcHVzaCBvIGRhIGN1aSByZWN1cGVyYXJlIGRhdGkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg2Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAic3BlY2lmaWNhcmUgdW4gYnJhbmNoIG1hc3RlciBjb24gLS1taXJyb3Igbm9uIGhhIHNlbnNvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4OAorbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgIiIKKyJzcGVjaWZpY2FyZSBpIGJyYW5jaCBkYSB0cmFjY2lhcmUgaGEgc2Vuc28gc29sbyBjb24gaSBtaXJyb3IgZGEgY3VpICIKKyJyZWN1cGVyYXJlIGRhdGkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk1IGJ1aWx0aW4vcmVtb3RlLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgImlsIHJlbW90byAlcyBlc2lzdGUgZ2nDoC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk5IGJ1aWx0aW4vcmVtb3RlLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiclcycgbm9uIMOoIHVuIG5vbWUgZGkgcmVtb3RvIHZhbGlkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjb25maWd1cmFyZSBpbCBtYXN0ZXIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBvdHRlbmVyZSBsYSBtYXBwYSBkaSByZWN1cGVybyBwZXIgbG8gc3BlY2lmaWNhdG9yZSByaWZlcmltZW50byAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NTMgYnVpbHRpbi9yZW1vdGUuYzo0NjEKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICIoY29ycmlzcG9uZGVudGUpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ2NQorbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICIoZWxpbWluYSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgaW1wb3N0YXJlICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJXMgY29uZmlndXJhdGlvbiByZW1vdGUucHVzaERlZmF1bHQgaW46XG4iCisiXHQlczolZFxuIgorIm5vdyBuYW1lcyB0aGUgbm9uLWV4aXN0ZW50IHJlbW90ZSAnJXMnIgorbXNnc3RyICIiCisiTGEgY29uZmlndXJhemlvbmUgcmVtb3RlLnB1c2hEZWZhdWx0ICVzIGluOlxuIgorIlx0JXM6JWRcbiIKKyJvcmEgZMOgIGlsIG5vbWUgYWwgcmVtb3RvIGluZXNpc3RlbnRlICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njg5IGJ1aWx0aW4vcmVtb3RlLmM6ODMyIGJ1aWx0aW4vcmVtb3RlLmM6OTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAnJXMnIgorbXNnc3RyICJSZW1vdG8gbm9uIGVzaXN0ZW50ZTogJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKyJOb24gw6ggc3RhdG8gcG9zc2liaWxlIHJpZGVub21pbmFyZSBsYSBzZXppb25lIGRpIGNvbmZpZ3VyYXppb25lIGRhICclcycgaW4gIgorIiclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorIk5vbiBhZ2dpb3JubyBsbyBzcGVjaWZpY2F0b3JlIHJpZmVyaW1lbnRvIGRpIHJlY3VwZXJvIG5vbiBwcmVkZWZpbml0b1xuIgorIlx0JXNcbiIKKyJcdEFnZ2lvcm5hIGxhIGNvbmZpZ3VyYXppb25lIG1hbnVhbG1lbnRlIHNlIG5lY2Vzc2FyaW8uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjc2NgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZWxpbWluYXppb25lIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiY3JlYXppb25lIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjg3NgorbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICIiCisiTm90YTogdW4gYnJhbmNoIGFsIGRpIGZ1b3JpIGRlbGxhIGdlcmFyY2hpYSByZWZzL3JlbW90ZXMvIG5vbiDDqCBzdGF0byAiCisiZWxpbWluYXRvO1xuIgorInBlciBlbGltaW5hcmxvLCB1c2E6IgorbXNnc3RyWzFdICIiCisiTm90YTogYWxjdW5pIGJyYW5jaCBhbCBkaSBmdW9yaSBkZWxsYSBnZXJhcmNoaWEgcmVmcy9yZW1vdGVzLyBub24gc29ubyBzdGF0aSAiCisiZWxpbWluYXRpO1xuIgorInBlciBlbGltaW5hcmxpLCB1c2E6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciCittc2dzdHIgIkltcG9zc2liaWxlIHJpbXVvdmVyZSBsYSBzZXppb25lIGRpIGNvbmZpZ3VyYXppb25lICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIKK21zZ3N0ciAiIG51b3ZvIChpbCBwcm9zc2ltbyBmZXRjaCBsbyBzYWx2ZXLDoCBpbiByZW1vdGVzLyVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OTYKK21zZ2lkICIgdHJhY2tlZCIKK21zZ3N0ciAiIHRyYWNjaWF0byIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OTgKK21zZ2lkICIgc3RhbGUgKHVzZSAnZ2l0IHJlbW90ZSBwcnVuZScgdG8gcmVtb3ZlKSIKK21zZ3N0ciAiIHZlY2NoaW8gKHVzYSAnZ2l0IHJlbW90ZSBwcnVuZScgcGVyIHJpbXVvdmVybG8pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDAKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICIiCisidmFsb3JlIGJyYW5jaC4lcy5tZXJnZSBub24gdmFsaWRvOyBpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCByZWJhc2Ugc3UgcGnDuSBkaSAiCisidW4gYnJhbmNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5IG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJyZWJhc2UgaW50ZXJhdHRpdm8gc3VsIHJlbW90byAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSAod2l0aCBtZXJnZXMpIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJyZWJhc2UgaW50ZXJhdHRpdm8gKGNvbiBtZXJnZSkgc3VsIHJlbW90byAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgInJlYmFzZSBzdWwgcmVtb3RvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiIG1lcmdlIGNvbiBpbCByZW1vdGUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIm1lcmdlIGNvbiBpbCByZW1vdGUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlLSpzICAgIGFuZCB3aXRoIHJlbW90ZSAlc1xuIgorbXNnc3RyICIlLSpzICAgIGUgY29uIGlsIHJlbW90byAlc1xuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMDgKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgImNyZWEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTExMQorbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAiZWxpbWluYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE1Cittc2dpZCAidXAgdG8gZGF0ZSIKK21zZ3N0ciAiYWdnaW9ybmF0byIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE4Cittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAiZmFzdCBmb3J3YXJkIHBvc3NpYmlsZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTIxCittc2dpZCAibG9jYWwgb3V0IG9mIGRhdGUiCittc2dzdHIgImxvY2FsZSBub24gYWdnaW9ybmF0byIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIGVzZWd1ZSB1biBhZ2dpb3JuYW1lbnRvIGZvcnphdG8gc3UgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgZXNlZ3VlIGlsIHB1c2ggc3UgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyBlc2VndWUgdW4gYWdnaW9ybmFtZW50byBmb3J6YXRvIHN1ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyBlc2VndWUgaWwgcHVzaCBzdSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjA2Cittc2dpZCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiCittc2dzdHIgIm5vbiBpbnRlcnJvZ2FyZSBpIHJlbW90aSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqIHJlbW90byAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmV0Y2ggVVJMOiAlcyIKK21zZ3N0ciAiICBVUkwgcmVjdXBlcm86ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzUgYnVpbHRpbi9yZW1vdGUuYzoxMjUxIGJ1aWx0aW4vcmVtb3RlLmM6MTM5MAorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIobmVzc3VuIFVSTCkiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gJzonIHNob3VsZCBhbGlnbgorIy4gd2l0aCB0aGUgb25lIGluICIgRmV0Y2ggVVJMOiAlcyIKKyMuIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI0OSBidWlsdGluL3JlbW90ZS5jOjEyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIgICAgICBVUkwgcHVzaDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MyBidWlsdGluL3JlbW90ZS5jOjEyNTUgYnVpbHRpbi9yZW1vdGUuYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIgIGJyYW5jaCBIRUFEOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjUzCittc2dpZCAiKG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiKG5vbiBpbnRlcnJvZ2F0bykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1NQorbXNnaWQgIih1bmtub3duKSIKK21zZ3N0ciAiKHNjb25vc2NpdXRvKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiIKKyIgIGJyYW5jaCBIRUFEIChsJ0hFQUQgcmVtb3RvIMOoIGFtYmlndW8sIHBvdHJlYmJlIGVzc2VyZSB1bm8gZGVpIHNlZ3VlbnRpKTpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAgQnJhbmNoIHJlbW90bzolcyIKK21zZ3N0clsxXSAiICBCcmFuY2ggcmVtb3RpOiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzQgYnVpbHRpbi9yZW1vdGUuYzoxMzAwCittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKHN0YXRvIG5vbiByaWNoaWVzdG8pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODMKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiICBCcmFuY2ggbG9jYWxlIGNvbmZpZ3VyYXRvIHBlciAnZ2l0IHB1bGwnOiIKK21zZ3N0clsxXSAiICBCcmFuY2ggbG9jYWxpIGNvbmZpZ3VyYXRpIHBlciAnZ2l0IHB1bGwnOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjkxCittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiICBJIHJpZmVyaW1lbnRpIGxvY2FsaSBzYXJhbm5vIGNvcGlhdGkgZGEgJ2dpdCBwdXNoJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzBdICIgIFJlZiBsb2NhbGUgY29uZmlndXJhdG8gcGVyICdnaXQgcHVzaCclczoiCittc2dzdHJbMV0gIiAgUmVmIGxvY2FsaSBjb25maWd1cmF0aSBwZXIgJ2dpdCBwdXNoJyVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzE4Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICJpbXBvc3RhIHJlZnMvcmVtb3Rlcy88bm9tZT4vSEVBRCBpbiBiYXNlIGFsIHJlbW90byIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzIwCittc2dpZCAiZGVsZXRlIHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCIKK21zZ3N0ciAiZWxpbWluYSByZWZzL3JlbW90ZXMvPG5vbWU+L0hFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMzNQorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgcmVtb3RlIEhFQUQiCittc2dzdHIgIkltcG9zc2liaWxlIGRldGVybWluYXJlIGwnSEVBRCByZW1vdG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMzNworbXNnaWQgIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6IgorbXNnc3RyICJCcmFuY2ggSEVBRCByZW1vdGkgbXVsdGlwbGkuIFNjZWdsaW5lIHVubyBlc3BsaWNpdGFtZW50ZSBjb246IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBlbGltaW5hcmUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICJOb24gw6ggdW4gcmVmIHZhbGlkbzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgY29uZmlndXJhcmUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMgZGl2ZW50ZXLDoCBwZW5kZW50ZSEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NgorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyDDqCBkaXZlbnRhdG8gcGVuZGVudGUhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAiRWxpbWluYXppb25lIGRpICVzIGluIGNvcnNvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAiVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFtzYXJlYmJlIGVsaW1pbmF0b10gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQwNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiICogW2VsaW1pbmF0b10gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ1MQorbXNnaWQgInBydW5lIHJlbW90ZXMgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgImVsaW1pbmEgcmVtb3RpIGRvcG8gaWwgZmV0Y2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUxNCBidWlsdGluL3JlbW90ZS5jOjE1NjggYnVpbHRpbi9yZW1vdGUuYzoxNjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIlJlbW90ZSAnJXMnIG5vbiBlc2lzdGVudGUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzMAorbXNnaWQgImFkZCBicmFuY2giCittc2dzdHIgImFnZ2l1bmdpIGJyYW5jaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM3Cittc2dpZCAibm8gcmVtb3RlIHNwZWNpZmllZCIKK21zZ3N0ciAibmVzc3VuIHJlbW90ZSBzcGVjaWZpY2F0byIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTU0Cittc2dpZCAicXVlcnkgcHVzaCBVUkxzIHJhdGhlciB0aGFuIGZldGNoIFVSTHMiCittc2dzdHIgImludGVycm9nYSBnbGkgVVJMIHBlciBpbCBwdXNoIGFuemljaMOpIGdsaSBVUkwgcGVyIGlsIGZldGNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NTYKK21zZ2lkICJyZXR1cm4gYWxsIFVSTHMiCittc2dzdHIgInJlc3RpdHVpc2NpIHR1dHRpIGdsaSBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBVUkxzIGNvbmZpZ3VyZWQgZm9yIHJlbW90ZSAnJXMnIgorbXNnc3RyICJuZXNzdW4gVVJMIGNvbmZpZ3VyYXRvIHBlciBpbCByZW1vdG8gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjEwCittc2dpZCAibWFuaXB1bGF0ZSBwdXNoIFVSTHMiCittc2dzdHIgIm1hbmlwb2xhIGdsaSBVUkwgcGVyIGlsIHB1c2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxMgorbXNnaWQgImFkZCBVUkwiCittc2dzdHIgImFnZ2l1bmdpIFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjE0Cittc2dpZCAiZGVsZXRlIFVSTHMiCittc2dzdHIgImVsaW1pbmEgVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MjEKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tYWRkIC0tZGVsZXRlIG5vbiBoYSBzZW5zbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2xkIFVSTCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiUGF0dGVybiBVUkwgdmVjY2hpbyBub24gdmFsaWRvOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiTmVzc3VuYSBVUkwgdHJvdmF0YTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY3MAorbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAiTm9uIGVsaW1pbmVyw7IgdHV0dGkgZ2xpIFVSTCBub24gcHVzaCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZXBhY2sgWzxvcHppb25pPl0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjgKK21zZ2lkICIiCisiSW5jcmVtZW50YWwgcmVwYWNrcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggYml0bWFwIGluZGV4ZXMuICBVc2VcbiIKKyItLW5vLXdyaXRlLWJpdG1hcC1pbmRleCBvciBkaXNhYmxlIHRoZSBwYWNrLndyaXRlYml0bWFwcyBjb25maWd1cmF0aW9uLiIKK21zZ3N0ciAiIgorIkkgcmVwYWNrIGluY3JlbWVudGFsaSBub24gc29ubyBjb21wYXRpYmlsaSBjb24gZ2xpIGluZGljaSBiaXRtYXAuXG4iCisiVXNhIC0tbm8td3JpdGUtYml0bWFwLWluZGV4IG8gZGlzYWJpbGl0YSBsJ29wemlvbmUgZGkgY29uZmlndXJhemlvbmVcbiIKKyJwYWNrLndyaXRlYml0bWFwcy4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTkxCittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIGF2dmlhcmUgcGFjay1vYmplY3RzIHBlciBlc2VndWlyZSBpbCByZXBhY2sgZGVnbGkgb2dnZXR0aSAiCisicHJvbWV0dGVudGkiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMwIGJ1aWx0aW4vcmVwYWNrLmM6NDE2Cittc2dpZCAicmVwYWNrOiBFeHBlY3RpbmcgZnVsbCBoZXggb2JqZWN0IElEIGxpbmVzIG9ubHkgZnJvbSBwYWNrLW9iamVjdHMuIgorbXNnc3RyICIiCisicmVwYWNrOiBEYSBwYWNrLW9iamVjdHMgbWkgYXR0ZW5kZXZvIHNvbG8gcmlnaGUgY29uIGdsaSBJRCBjb21wbGV0aSAiCisiZXNhZGVjaW1hbGkgZGVnbGkgb2dnZXR0aS4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjU0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBwb3J0YXJlIGEgdGVybWluZSBwYWNrLW9iamVjdHMgcGVyIGVzZWd1aXJlIGlsIHJlcGFjayBkZWdsaSAiCisib2dnZXR0aSBwcm9tZXR0ZW50aSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTIKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAiZXNlZ3VpIGlsIHBhY2sgZGkgdHV0dG8gaW4gdW4gc2luZ29sbyBwYWNrIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NAorbXNnaWQgInNhbWUgYXMgLWEsIGFuZCB0dXJuIHVucmVhY2hhYmxlIG9iamVjdHMgbG9vc2UiCittc2dzdHIgImNvbWUgLWEgZSByZW5kaSBzY2lvbHRpIGdsaSBvZ2dldHRpIG5vbiByYWdnaXVuZ2liaWxpIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NworbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAicmltdW92aSBpIHBhY2sgcmlkb25kYW50aSBlZCBlc2VndWkgZ2l0LXBydW5lLXBhY2tlZCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTkKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiZm9ybmlzY2kgbCdvcHppb25lIC0tbm8tcmV1c2UtZGVsdGEgYSBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwMQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1vYmplY3QgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiZm9ybmlzY2kgbCdvcHppb25lIC0tbm8tcmV1c2Utb2JqZWN0IGEgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDMKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgIm5vbiBlc2VndWlyZSBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwNgorbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJmb3JuaXNjaSBsJ29wemlvbmUgLS1sb2NhbCBhIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA4Cittc2dpZCAid3JpdGUgYml0bWFwIGluZGV4IgorbXNnc3RyICJzY3JpdmkgbCdpbmRpY2UgYml0bWFwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMAorbXNnaWQgInBhc3MgLS1kZWx0YS1pc2xhbmRzIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgImZvcm5pc2NpIGwnb3B6aW9uZSAtLWRlbHRhLWlzbGFuZHMgYSBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMQorbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICJkYXRhIGFwcHJvc3NpbWF0aXZhIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMgorbXNnaWQgIndpdGggLUEsIGRvIG5vdCBsb29zZW4gb2JqZWN0cyBvbGRlciB0aGFuIHRoaXMiCittc2dzdHIgImNvbiAtQSwgbm9uIHJlbmRlcmUgc2Npb2x0aSBnbGkgb2dnZXR0aSBtZW5vIHJlY2VudGkgZGkgcXVlc3RhIGRhdGEiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE0Cittc2dpZCAid2l0aCAtYSwgcmVwYWNrIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImNvbiAtYSwgZXNlZ3VpIGlsIHJlcGFjayBkZWdsaSBvZ2dldHRpIG5vbiByYWdnaXVuZ2liaWxpIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNgorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAiZGltZW5zaW9uZSBkZWxsYSBmaW5lc3RyYSB1c2F0YSBwZXIgbGEgY29tcHJlc3Npb25lIGRlbHRhIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNyBidWlsdGluL3JlcGFjay5jOjMyMworbXNnaWQgImJ5dGVzIgorbXNnc3RyICJieXRlIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxOAorbXNnaWQgInNhbWUgYXMgdGhlIGFib3ZlLCBidXQgbGltaXQgbWVtb3J5IHNpemUgaW5zdGVhZCBvZiBlbnRyaWVzIGNvdW50IgorbXNnc3RyICIiCisiY29tZSBzb3ByYSwgbWEgbGltaXRhIGxlIGRpbWVuc2lvbmkgZGVsbGEgbWVtb3JpYSBpbnZlY2UgZGVsIG51bWVybyBkaSB2b2NpIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMAorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBkZWx0YSBkZXB0aCIKK21zZ3N0ciAibGltaXRhIGxhIHByb2ZvbmRpdMOgIG1hc3NpbWEgZGVpIGRlbHRhIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMgorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyIKK21zZ3N0ciAibGltaXRhIGlsIG51bWVybyBtYXNzaW1vIGRpIHRocmVhZCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjQKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIKK21zZ3N0ciAiZGltZW5zaW9uZSBtYXNzaW1hIGRpIG9nbmkgZmlsZSBwYWNrIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNgorbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICJlc2VndWkgaWwgcmVwYWNrIGRlZ2xpIG9nZ2V0dGkgbmVpIHBhY2sgY29udHJhc3NlZ25hdGkgY29uIC5rZWVwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyOAorbXNnaWQgImRvIG5vdCByZXBhY2sgdGhpcyBwYWNrIgorbXNnc3RyICJub24gZXNlZ3VpcmUgaWwgcmVwYWNrIGRpIHF1ZXN0byBwYWNrIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMzOAorbXNnaWQgImNhbm5vdCBkZWxldGUgcGFja3MgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgImltcG9zc2liaWxlIGVsaW1pbmFyZSBpIHBhY2sgaW4gdW4gcmVwb3NpdG9yeSAnb2dnZXR0aSBwcmV6aW9zaSciCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzQyCittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtQSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUgZSAtQSBub24gc29ubyBjb21wYXRpYmlsaSIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0MjUKK21zZ2lkICJOb3RoaW5nIG5ldyB0byBwYWNrLiIKK21zZ3N0ciAiTm9uIGNpIHNvbm8gb2dnZXR0aSBudW92aSBkaSBjdWkgZXNlZ3VpcmUgaWwgcGFjay4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBTb21lIHBhY2tzIGluIHVzZSBoYXZlIGJlZW4gcmVuYW1lZCBieVxuIgorIldBUk5JTkc6IHByZWZpeGluZyBvbGQtIHRvIHRoZWlyIG5hbWUsIGluIG9yZGVyIHRvXG4iCisiV0FSTklORzogcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZVxuIgorIldBUk5JTkc6IGZpbGUuICBCdXQgdGhlIG9wZXJhdGlvbiBmYWlsZWQsIGFuZCB0aGVcbiIKKyJXQVJOSU5HOiBhdHRlbXB0IHRvIHJlbmFtZSB0aGVtIGJhY2sgdG8gdGhlaXJcbiIKKyJXQVJOSU5HOiBvcmlnaW5hbCBuYW1lcyBhbHNvIGZhaWxlZC5cbiIKKyJXQVJOSU5HOiBQbGVhc2UgcmVuYW1lIHRoZW0gaW4gJXMgbWFudWFsbHk6XG4iCittc2dzdHIgIiIKKyJBVlZJU086IEFsY3VuaSBwYWNrIGluIHVzbyBzb25vIHN0YXRpIHJpZGVub21pbmF0aVxuIgorIkFWVklTTzogYWdnaXVuZ2VuZG8gaWwgcHJlZmlzc28gb2xkLSBhbCBsb3JvIG5vbWVcbiIKKyJBVlZJU086IHBlciBjb25zZW50aXJuZSBsYSBzb3N0aXR1emlvbmUgY29uIGxhXG4iCisiQVZWSVNPOiBudW92YSB2ZXJzaW9uZSBkZWwgZmlsZS4gTWEgbCdvcGVyYXppb25lXG4iCisiQVZWSVNPOiBub24gw6ggcml1c2NpdGEgZSBhbmNoZSBpbCB0ZW50YXRpdm8gZGlcbiIKKyJBVlZJU086IHJpZGVub21pbmFybGkgY29uIGlsIGxvcm8gbm9tZSBvcmlnaW5hbGVcbiIKKyJBVlZJU086IG5vbiDDqCByaXVzY2l0by4gUmlkZW5vbWluYWxpIG1hbnVhbG1lbnRlXG4iCisiQVZWSVNPOiBlbnRybyAlczpcbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnJXMnIgorbXNnc3RyICJlbGltaW5hemlvbmUgZGkgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIDxvZ2dldHRvPiA8b2dnZXR0byBzb3N0aXR1dGl2bz4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxvZ2dldHRvPiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8Z2VuaXRvcmU+Li4uXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjUKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tY29udmVydC1ncmFmdC1maWxlIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tY29udmVydC1ncmFmdC1maWxlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNgorbXNnaWQgImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgcmVwbGFjZSAtZCA8b2dnZXR0bz4uLi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdG8+XSBbLWwgWzxwYXR0ZXJuPl1dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCByZXBsYWNlIGZvcm1hdCAnJXMnXG4iCisidmFsaWQgZm9ybWF0cyBhcmUgJ3Nob3J0JywgJ21lZGl1bScgYW5kICdsb25nJyIKK21zZ3N0ciAiIgorImZvcm1hdG8gc29zdGl0dXppb25lIG5vbiB2YWxpZG86ICclcydcbiIKKyJpIGZvcm1hdGkgdmFsaWRpIHNvbm8gJ3Nob3J0JywgJ21lZGl1bScgZSAnbG9uZyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAicmlmZXJpbWVudG8gc29zdGl0dXRpdm8gJyVzJyBub24gdHJvdmF0byIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVwbGFjZSByZWYgJyVzJyIKK21zZ3N0ciAiRWxpbWluYXRvIHJpZmVyaW1lbnRvIHNvc3RpdHV0aXZvICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZiBuYW1lIgorbXNnc3RyICInJXMnIG5vbiDDqCB1biBub21lIHJpZmVyaW1lbnRvIHZhbGlkbyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgcmVmICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgImlsIHJpZmVyaW1lbnRvIHNvc3RpdHV0aXZvICclcycgZXNpc3RlIGdpw6AiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4iCisiJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlZCBvYmplY3Qgb2YgdHlwZSAnJXMnXG4iCisid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgdHlwZSAnJXMnLiIKK21zZ3N0ciAiIgorIkdsaSBvZ2dldHRpIGRldm9ubyBlc3NlcmUgZGVsbG8gc3Rlc3NvIHRpcG8uXG4iCisiJyVzJyBwdW50YSBhIHVuIG9nZ2V0dG8gc29zdGl0dWl0byBkaSB0aXBvICclcydcbiIKKyJtZW50cmUgJyVzJyBwdW50YSBhIHVuIG9nZ2V0dG8gc29zdGl0dXRpdm8gZGkgdGlwbyAnJXMnLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgJyVzJyBpbiBzY3JpdHR1cmEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0MgorbXNnaWQgImNhdC1maWxlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgImNhdC1maWxlIGhhIHNlZ25hbGF0byB1biBlcnJvcmUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlICVzIGluIGxldHR1cmEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3MgorbXNnaWQgInVuYWJsZSB0byBzcGF3biBta3RyZWUiCittc2dzdHIgImltcG9zc2liaWxlIGxhbmNpYXJlIG1rdHJlZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjc2Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgZnJvbSBta3RyZWUiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgZGEgbWt0cmVlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODUKK21zZ2lkICJta3RyZWUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAibWt0cmVlIGhhIHNlZ25hbGF0byB1biBlcnJvcmUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4OQorbXNnaWQgIm1rdHJlZSBkaWQgbm90IHJldHVybiBhbiBvYmplY3QgbmFtZSIKK21zZ3N0ciAibWt0cmVlIG5vbiBoYSByZXN0aXR1aXRvIHVuIG5vbWUgb2dnZXR0byIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmc3RhdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgZnN0YXQgc3UgJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMwMworbXNnaWQgInVuYWJsZSB0byB3cml0ZSBvYmplY3QgdG8gZGF0YWJhc2UiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGwnb2dnZXR0byBuZWwgZGF0YWJhc2UiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyMiBidWlsdGluL3JlcGxhY2UuYzozNzggYnVpbHRpbi9yZXBsYWNlLmM6NDI0CisjOiBidWlsdGluL3JlcGxhY2UuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcyciCittc2dzdHIgIm5vbWUgb2dnZXR0byBub24gdmFsaWRvOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBvYmplY3QgdHlwZSBmb3IgJXMiCittc2dzdHIgImltcG9zc2liaWxlIHJlY3VwZXJhcmUgaWwgdGlwbyBkZWxsJ29nZ2V0dG8gJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM0MgorbXNnaWQgImVkaXRpbmcgb2JqZWN0IGZpbGUgZmFpbGVkIgorbXNnc3RyICJtb2RpZmljYSBkZWwgZmlsZSBvZ2dldHRvIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmU6ICclcyciCittc2dzdHIgImlsIG51b3ZvIG9nZ2V0dG8gw6ggbG8gc3Rlc3NvIGRpIHF1ZWxsbyB2ZWNjaGlvOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIGFzIGEgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlICVzIGNvbWUgY29tbWl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICJ0YWcgbWVyZ2Ugbm9uIHZhbGlkbyBuZWwgY29tbWl0ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgInRhZyBtZXJnZSBtYWxmb3JtYXRvIG5lbCBjb21taXQgJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcmlnaW5hbCBjb21taXQgJyVzJyBjb250YWlucyBtZXJnZXRhZyAnJXMnIHRoYXQgaXMgZGlzY2FyZGVkOyB1c2UgLS1lZGl0ICIKKyJpbnN0ZWFkIG9mIC0tZ3JhZnQiCittc2dzdHIgIiIKKyJpbCBjb21taXQgb3JpZ2luYXJpbyAnJXMnIGNvbnRpZW5lIGlsIHRhZyBtZXJnZSAnJXMnIGNoZSDDqCBzdGF0byBzY2FydGF0bzsgIgorInVzYSAtLWVkaXQgYW56aWNow6kgLS1ncmFmdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBvcmlnaW5hbCBjb21taXQgJyVzJyBoYXMgYSBncGcgc2lnbmF0dXJlIgorbXNnc3RyICJpbCBjb21taXQgb3JpZ2luYXJpbyAnJXMnIGhhIHVuYSBmaXJtYSBHUEciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ3MAorbXNnaWQgInRoZSBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSByZXBsYWNlbWVudCBjb21taXQhIgorbXNnc3RyICJsYSBmaXJtYSBzYXLDoCByaW1vc3NhIG5lbCBjb21taXQgc29zdGl0dXRpdm8hIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHJlcGxhY2VtZW50IGNvbW1pdCBmb3I6ICclcyciCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIGNvbW1pdCBzb3N0aXR1dGl2byBwZXIgJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImdyYWZ0IGZvciAnJXMnIHVubmVjZXNzYXJ5IgorbXNnc3RyICJncmFmdCBwZXIgJyVzJyBub24gbmVjZXNzYXJpbyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBjb21taXQgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmU6ICclcyciCittc2dzdHIgImlsIG51b3ZvIGNvbW1pdCDDqCBsbyBzdGVzc28gZGkgcXVlbGxvIHZlY2NoaW86ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNvbnZlcnQgdGhlIGZvbGxvd2luZyBncmFmdChzKTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIGNvbnZlcnRpcmUgaSBzZWd1ZW50aSBncmFmdDpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ4Cittc2dpZCAibGlzdCByZXBsYWNlIHJlZnMiCittc2dzdHIgImVsZW5jYSBpIHJpZmVyaW1lbnRpIHNvc3RpdHV0aXZpIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDkKK21zZ2lkICJkZWxldGUgcmVwbGFjZSByZWZzIgorbXNnc3RyICJlbGltaW5hIGkgcmlmZXJpbWVudGkgc29zdGl0dXRpdmkiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MAorbXNnaWQgImVkaXQgZXhpc3Rpbmcgb2JqZWN0IgorbXNnc3RyICJtb2RpZmljYSBsJ29nZ2V0dG8gZXNpc3RlbnRlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTEKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICJjYW1iaWEgaSBnZW5pdG9yaSBkaSB1biBjb21taXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MgorbXNnaWQgImNvbnZlcnQgZXhpc3RpbmcgZ3JhZnQgZmlsZSIKK21zZ3N0ciAiY29udmVydGkgdW4gZmlsZSBncmFmdCBlc2lzdGVudGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MworbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgInNvc3RpdHVpc2NpIGlsIHJpZmVyaW1lbnRvIHNlIGVzaXN0ZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU1Cittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICJub24gc3RhbXBhcmUgaSBjb250ZW51dGkgaW4gdW4gZm9ybWF0byBsZWdnaWJpbGUgKHBlciAtLWVkaXQpIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTYKK21zZ2lkICJ1c2UgdGhpcyBmb3JtYXQiCittc2dzdHIgInVzYSBxdWVzdG8gZm9ybWF0byIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTY5Cittc2dpZCAiLS1mb3JtYXQgY2Fubm90IGJlIHVzZWQgd2hlbiBub3QgbGlzdGluZyIKK21zZ3N0ciAiLS1mb3JtYXQgbm9uIHB1w7IgZXNzZXJlIHVzYXRvIHF1YW5kbyBub24gc2kgZWxlbmNhbm8gdm9jaSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTc3Cittc2dpZCAiLWYgb25seSBtYWtlcyBzZW5zZSB3aGVuIHdyaXRpbmcgYSByZXBsYWNlbWVudCIKK21zZ3N0ciAiLWYgaGEgc2Vuc28gc29sbyBzZSBzaSBzdGEgc2NyaXZlbmRvIHVuIG9nZ2V0dG8gc29zdGl0dXRpdm8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU4MQorbXNnaWQgIi0tcmF3IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLWVkaXQiCittc2dzdHIgIi0tcmF3IGhhIHNlbnNvIHNvbG8gY29uIC0tZWRpdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTg3Cittc2dpZCAiLWQgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICItZCByaWNoaWVkZSBhbG1lbm8gdW4gYXJnb21lbnRvIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1OTMKK21zZ2lkICJiYWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAibnVtZXJvIGRpIGFyZ29tZW50aSBlcnJhdG8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU5OQorbXNnaWQgIi1lIG5lZWRzIGV4YWN0bHkgb25lIGFyZ3VtZW50IgorbXNnc3RyICItZSByaWNoaWVkZSBlc2F0dGFtZW50ZSB1biBhcmdvbWVudG8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYwNQorbXNnaWQgIi1nIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWcgcmljaGllZGUgYWxtZW5vIHVuIGFyZ29tZW50byIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjExCittc2dpZCAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgdGFrZXMgbm8gYXJndW1lbnQiCittc2dzdHIgIi0tY29udmVydC1ncmFmdC1maWxlIG5vbiByaWNoaWVkZSBhcmdvbWVudGkiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxNworbXNnaWQgIm9ubHkgb25lIHBhdHRlcm4gY2FuIGJlIGdpdmVuIHdpdGggLWwiCittc2dzdHIgImNvbiAtbCBwdcOyIGVzc2VyZSBzcGVjaWZpY2F0byBzb2xvIHVuIHBhdHRlcm4iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTMKK21zZ2lkICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorbXNnc3RyICIiCisiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBlcmNvcnNvPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NjAKK21zZ2lkICJyZWdpc3RlciBjbGVhbiByZXNvbHV0aW9ucyBpbiBpbmRleCIKK21zZ3N0ciAicmVnaXN0cmEgbGUgcmlzb2x1emlvbmkgcHVsaXRlIG5lbGwnaW5kaWNlIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjc5Cittc2dpZCAiJ2dpdCByZXJlcmUgZm9yZ2V0JyB3aXRob3V0IHBhdGhzIGlzIGRlcHJlY2F0ZWQiCittc2dzdHIgIidnaXQgcmVyZXJlIGZvcmdldCcgc2VuemEgcGVyY29yc2kgw6ggZGVwcmVjYXRvIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjExMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZiBmb3IgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZ2VuZXJhcmUgaWwgZGlmZiBwZXIgJyVzJyIKKworIzogYnVpbHRpbi9yZXNldC5jOjMyCittc2dpZCAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKK21zZ3N0ciAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gWzxlc3ByZXNzaW9uZSBhbGJlcm8+XSBbLS1dIDxzcGVjaWZpY2F0b3JlIHBlcmNvcnNvPi4uLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAiIgorImdpdCByZXNldCBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs8dHJlZS1pc2g+XSIKK21zZ3N0ciAiIgorImdpdCByZXNldCBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs8ZXNwcmVzc2lvbmUgIgorImFsYmVybz5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgcmVzZXQgLS1wYXRjaCBbPGVzcHJlc3Npb25lIGFsYmVybz5dIFstLV0gWzxzcGVjaWZpY2F0b3JlIHBlcmNvcnNvPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1peGVkIgorbXNnc3RyICJtaXN0byIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAic29mdCIKK21zZ3N0ciAic29mdCIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAiaGFyZCIKK21zZ3N0ciAiaGFyZCIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWVyZ2UiCittc2dzdHIgIm1lcmdlIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJrZWVwIgorbXNnc3RyICJrZWVwIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODIKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFELiIKK21zZ3N0ciAiTm9uIGhhaSB1biBIRUFEIHZhbGlkby4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4NAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgSEVBRC4iCittc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgbCdhbGJlcm8gZGkgSEVBRC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBsJ2FsYmVybyBkaSAlcy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQgJXMiCittc2dzdHIgIkhFQUQgb3JhIHNpIHRyb3ZhIGEgJXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgdW4gJXMgcmVzZXQgbmVsIGNvcnNvIGRpIHVuIG1lcmdlLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NCBidWlsdGluL3N0YXNoLmM6NTIwIGJ1aWx0aW4vc3Rhc2guYzo1OTUKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MTkKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICJub24gdmlzdWFsaXp6YXJlIG1lc3NhZ2dpLCBzZWduYWxhIHNvbG8gZ2xpIGVycm9yaSIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NgorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICJyZWltcG9zdGEgbCdIRUFEIGUgbCdpbmRpY2UiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTcKK21zZ2lkICJyZXNldCBvbmx5IEhFQUQiCittc2dzdHIgInJlaW1wb3N0YSBzb2xvIGwnSEVBRCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5OSBidWlsdGluL3Jlc2V0LmM6MzAxCittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAicmVpbXBvc3RhIGwnSEVBRCwgbCdpbmRpY2UgZSBsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDMKK21zZ2lkICJyZXNldCBIRUFEIGJ1dCBrZWVwIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgInJlaW1wb3N0YSBsJ0hFQUQgbWEgbWFudGllbmkgbGUgbW9kaWZpY2hlIGxvY2FsaSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwOQorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICIiCisic2FsdmEgc29sbyBpbCBmYXR0byBjaGUgaSBwZXJjb3JzaSByaW1vc3NpIHNhcmFubm8gYWdnaXVudGkgc3VjY2Vzc2l2YW1lbnRlIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZXZpc2lvbi4iCittc2dzdHIgIlJpc29sdXppb25lIGRpICclcycgY29tZSByZXZpc2lvbmUgdmFsaWRhIG5vbiByaXVzY2l0YS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHRyZWUuIgorbXNnc3RyICJSaXNvbHV6aW9uZSBkaSAnJXMnIGNvbWUgYWxiZXJvIHZhbGlkbyBub24gcml1c2NpdGEuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzYwCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICItLXBhdGNoIG5vbiDDqCBjb21wYXRpYmlsZSBjb24gLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1taXhlZCBjb24gaSBwYXRoIMOoIGRlcHJlY2F0YTsgdXNhIGludmVjZSAnZ2l0IHJlc2V0IC0tIDxwYXRoPicuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgdW4gJXMgcmVzZXQgY29uIGRlaSBwZXJjb3JzaS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzIHJlc2V0IG5vbiDDqCBjb25zZW50aXRvIGluIHVuIHJlcG9zaXRvcnkgc3BvZ2xpbyIKKworIzogYnVpbHRpbi9yZXNldC5jOjM5MQorbXNnaWQgIi1OIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLW1peGVkIgorbXNnc3RyICItTiBwdcOyIGVzc2VyZSB1c2F0byBzb2xvIGNvbiAtLW1peGVkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIk1vZGlmaWNoZSBub24gbmVsbCdhcmVhIGRpIHN0YWdpbmcgZG9wbyBpbCByZXNldDoiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0LiAgWW91IGNhblxuIgorInVzZSAnLS1xdWlldCcgdG8gYXZvaWQgdGhpcy4gIFNldCB0aGUgY29uZmlnIHNldHRpbmcgcmVzZXQucXVpZXQgdG8gdHJ1ZVxuIgorInRvIG1ha2UgdGhpcyB0aGUgZGVmYXVsdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkNpIHNvbm8gdm9sdXRpICUuMmYgc2Vjb25kaSBwZXIgZWxlbmNhcmUgbGUgbW9kaWZpY2hlIG5vbiBuZWxsJ2FyZWEgZGlcbiIKKyJzdGFnaW5nIGRvcG8gaWwgcmVzZXQuIFB1b2kgdXNhcmUgJy0tcXVpZXQnIHBlciBub24gdmlzdWFsaXp6YXJlIHF1ZXN0b1xuIgorIm1lc3NhZ2dpby4gSW1wb3N0YSBsJ29wemlvbmUgZGkgY29uZmlndXJhemlvbmUgcmVzZXQucXVpZXQgYSB0cnVlIHBlclxuIgorInJlbmRlcmUgdGFsZSBjb21wb3J0YW1lbnRvIHF1ZWxsbyBwcmVkZWZpbml0by5cbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmlwcmlzdGluYXJlIGlsIGZpbGUgaW5kaWNlIGFsbGEgcmV2aXNpb25lICclcycuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDI5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgbnVvdm8gZmlsZSBpbmRpY2UuIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NDk5Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgYW5kIC0tbWlzc2luZyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY29tYmluYXJlIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGUgLS1taXNzaW5nIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NTYwCittc2dpZCAib2JqZWN0IGZpbHRlcmluZyByZXF1aXJlcyAtLW9iamVjdHMiCittc2dzdHIgImlsIGZpbHRyYWdnaW8gb2dnZXR0aSByaWNoaWVkZSAtLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo2MTAKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgInJldi1saXN0IG5vbiBzdXBwb3J0YSBsYSB2aXN1YWxpenphemlvbmUgZGVsbGUgbm90ZSIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjYxNQorbXNnaWQgIm1hcmtlZCBjb3VudGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW9iamVjdHMiCittc2dzdHIgImlsIGNvbnRlZ2dpbyBjb250cmFzc2VnbmF0byBub24gw6ggY29tcGF0aWJpbGUgY29uIC0tb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MDgKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wemlvbmk+XSAtLSBbPGFyZ29tZW50aT4uLi5dIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxMworbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAibWFudGllbmkgbGEgc3RyaW5nYSBwYXNzYXRhIGAtLWAgY29tZSBhcmdvbWVudG8iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDE1Cittc2dpZCAic3RvcCBwYXJzaW5nIGFmdGVyIHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IgorbXNnc3RyICIiCisidGVybWluYSBsJ2FuYWxpc2kgZG9wbyBpbCBwcmltbyBhcmdvbWVudG8gbm9uIGNvcnJpc3BvbmRlbnRlIGEgdW4nb3B6aW9uZSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTgKK21zZ2lkICJvdXRwdXQgaW4gc3R1Y2sgbG9uZyBmb3JtIgorbXNnc3RyICJlbWV0dGkgbCdvdXRwdXQgaW4gZm9ybWEgXCJzdHVjayBsb25nXCIiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NTUxCittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmc+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3B0aW9ucz5dIFs8YXJnPi4uLl1cbiIKKyJcbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIgorbXNnc3RyICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B6aW9uaT5dIC0tIFs8YXJnb21lbnRpPi4uLl1cbiIKKyIgICBvOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmdvbWVudG8+Li4uXVxuIgorIiAgIG86IGdpdCByZXYtcGFyc2UgWzxvcHppb25pPl0gWzxhcmdvbWVudG8+Li4uXVxuIgorIlxuIgorIkVzZWd1aSBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIHBlciB1bHRlcmlvcmkgaW5mb3JtYXppb25pIHN1bGxhICIKKyJwcmltYVxuIgorIm1vZGFsaXTDoCBkJ3Vzby4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQKK21zZ2lkICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJldmVydCBbPG9wemlvbmk+XSA8ZXNwcmVzc2lvbmUgY29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNQorbXNnaWQgImdpdCByZXZlcnQgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgcmV2ZXJ0IDxzb3R0b2NvbWFuZG8+IgorCisjOiBidWlsdGluL3JldmVydC5jOjMwCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIFs8b3B6aW9uaT5dIDxlc3ByZXNzaW9uZSBjb21taXQ+Li4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjMxCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIDxzb3R0b2NvbWFuZG8+IgorCisjOiBidWlsdGluL3JldmVydC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8iCittc2dzdHIgImwnb3B6aW9uZSBgJXMnIHJpY2hpZWRlIHVuIG51bWVybyBtYWdnaW9yZSBkaSB6ZXJvIgorCisjOiBidWlsdGluL3JldmVydC5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIlczogJXMgbm9uIHB1w7IgZXNzZXJlIHVzYXRhIGNvbiAlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDIKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJ0ZXJtaW5hIGxhIHNlcXVlbnphIHJldmVydCBvIGNoZXJyeS1waWNrIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMworbXNnaWQgInJlc3VtZSByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgInJpcHJlbmRpIGxhIHNlcXVlbnphIHJldmVydCBvIGNoZXJyeS1waWNrIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImFubnVsbGEgbGEgc2VxdWVuemEgcmV2ZXJ0IG8gY2hlcnJ5LXBpY2siCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA1Cittc2dpZCAic2tpcCBjdXJyZW50IGNvbW1pdCBhbmQgY29udGludWUiCittc2dzdHIgInNhbHRhIGlsIGNvbW1pdCBjb3JyZW50ZSBlIGNvbnRpbnVhIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICJub24gZXNlZ3VpcmUgaWwgY29tbWl0IGF1dG9tYXRpY2FtZW50ZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDgKK21zZ2lkICJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAibW9kaWZpY2EgaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTEKK21zZ2lkICJwYXJlbnQtbnVtYmVyIgorbXNnc3RyICJudW1lcm8tZ2VuaXRvcmUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEyCittc2dpZCAic2VsZWN0IG1haW5saW5lIHBhcmVudCIKK21zZ3N0ciAic2VsZXppb25hIGlsIGdlbml0b3JlIG1haW5saW5lIgorCisjOiBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJzdHJhdGVnaWEgZGkgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE2Cittc2dpZCAib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAib3B6aW9uZSBwZXIgbGEgc3RyYXRlZ2lhIGRpIG1lcmdlIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNQorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAiYWdnaXVuZ2kgaWwgbm9tZSBkZWwgY29tbWl0IGFsbGEgZmluZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjcKK21zZ2lkICJwcmVzZXJ2ZSBpbml0aWFsbHkgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAibWFudGllbmkgaSBjb21taXQgaW5pemlhbG1lbnRlIHZ1b3RpIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyOQorbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICJtYW50aWVuaSBpIGNvbW1pdCByaWRvbmRhbnRpIGUgdnVvdGkiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjMyCittc2dpZCAicmV2ZXJ0IGZhaWxlZCIKK21zZ3N0ciAicmV2ZXJ0IG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNDUKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgImNoZXJyeS1waWNrIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9ybS5jOjE5Cittc2dpZCAiZ2l0IHJtIFs8b3B0aW9ucz5dIFstLV0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcm0gWzxvcHppb25pPl0gWy0tXSA8ZmlsZT4uLi4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyMDcKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorImlsIHNlZ3VlbnRlIGZpbGUgaGEgY29udGVudXRpIG5lbGwnYXJlYSBkaSBzdGFnaW5nIGNoZVxuIgorImRpZmZlcmlzY29ubyBzaWEgcmlzcGV0dG8gYSBxdWVsbGkgZGVsIGZpbGUgc2lhIHJpc3BldHRvIGEgSEVBRDoiCittc2dzdHJbMV0gIiIKKyJpIHNlZ3VlbnRpIGZpbGUgaGFubm8gY29udGVudXRpIG5lbGwnYXJlYSBkaSBzdGFnaW5nIGNoZVxuIgorImRpZmZlcmlzY29ubyBzaWEgcmlzcGV0dG8gYSBxdWVsbGkgZGVsIGZpbGUgc2lhIHJpc3BldHRvIGEgSEVBRDoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTIKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIih1c2EgLWYgcGVyIGZvcnphcm5lIGxhIHJpbW96aW9uZSkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTYKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnc3RyWzBdICJpbCBzZWd1ZW50ZSBmaWxlIGhhIGRlbGxlIG1vZGlmaWNoZSBpbiBzdGFnaW5nIG5lbGwnaW5kaWNlOiIKK21zZ3N0clsxXSAiaSBzZWd1ZW50aSBmaWxlIGhhbm5vIGRlbGxlIG1vZGlmaWNoZSBpbiBzdGFnaW5nIG5lbGwnaW5kaWNlOiIKKworIzogYnVpbHRpbi9ybS5jOjIyMCBidWlsdGluL3JtLmM6MjI5Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIodXNhIC0tY2FjaGVkIHBlciBtYW50ZW5lcmUgaWwgZmlsZSBvIC1mIHBlciBmb3J6YXJuZSBsYSByaW1vemlvbmUpIgorCisjOiBidWlsdGluL3JtLmM6MjI2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICJpbCBzZWd1ZW50ZSBmaWxlIGhhIGRlbGxlIG1vZGlmaWNoZSBsb2NhbGk6IgorbXNnc3RyWzFdICJpIHNlZ3VlbnRpIGZpbGUgaGFubm8gZGVsbGUgbW9kaWZpY2hlIGxvY2FsaToiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDMKK21zZ2lkICJkbyBub3QgbGlzdCByZW1vdmVkIGZpbGVzIgorbXNnc3RyICJub24gZWxlbmNhcmUgaSBmaWxlIHJpbW9zc2kiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDQKK21zZ2lkICJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAicmltdW92aSBzb2xvIGRhbGwnaW5kaWNlIgorCisjOiBidWlsdGluL3JtLmM6MjQ1Cittc2dpZCAib3ZlcnJpZGUgdGhlIHVwLXRvLWRhdGUgY2hlY2siCittc2dzdHIgImlnbm9yYSBpbCBjb250cm9sbG8gc3VsbG8gc3RhdG8gZGkgYWdnaW9ybmFtZW50byIKKworIzogYnVpbHRpbi9ybS5jOjI0NgorbXNnaWQgImFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIgorbXNnc3RyICJjb25zZW50aSByaW1vemlvbmkgcmljb3JzaXZlIgorCisjOiBidWlsdGluL3JtLmM6MjQ4Cittc2dpZCAiZXhpdCB3aXRoIGEgemVybyBzdGF0dXMgZXZlbiBpZiBub3RoaW5nIG1hdGNoZWQiCittc2dzdHIgIiIKKyJlc2NpIGNvbiBjb2RpY2UgZCd1c2NpdGEgemVybyBhbmNoZSBuZWwgY2FzbyBpbiBjdWkgbm9uIHZpIHNpYW5vICIKKyJjb3JyaXNwb25kZW56ZSIKKworIzogYnVpbHRpbi9ybS5jOjI4MgorbXNnaWQgIk5vIHBhdGhzcGVjIHdhcyBnaXZlbi4gV2hpY2ggZmlsZXMgc2hvdWxkIEkgcmVtb3ZlPyIKK21zZ3N0ciAiIgorIk5vbiDDqCBzdGF0byBmb3JuaXRvIHVubyBzcGVjaWZpY2F0b3JlIHBlcmNvcnNvLiBRdWFsaSBmaWxlIGRldm8gcmltdW92ZXJlPyIKKworIzogYnVpbHRpbi9ybS5jOjMwNQorbXNnaWQgInBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisiZXNlZ3VpIGxvIHN0YWdlIGRlbGxlIG1vZGlmaWNoZSBhIC5naXRtb2R1bGVzIG8gZXNlZ3VpbmUgbG8gc3Rhc2ggcGVyICIKKyJwcm9jZWRlcmUiCisKKyM6IGJ1aWx0aW4vcm0uYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAibm9uIHJpbXVvdm8gJyVzJyByaWNvcnNpdmFtZW50ZSBzZW56YSAtciIKKworIzogYnVpbHRpbi9ybS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgcm06IHVuYWJsZSB0byByZW1vdmUgJXMiCittc2dzdHIgImdpdCBybTogbm9uIMOoIHBvc3NpYmlsZSBlbGltaW5hcmUgJXMiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MjAKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiAiCisiWzxyaWZlcmltZW50bz4uLi5dXG4iCisiICAtLWFsbCBlIHVubyBzcGVjaWZpY2F0b3JlIDxyaWZlcmltZW50bz4gc29ubyBtdXR1YWxtZW50ZSBlc2NsdXNpdmkuIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MworbXNnaWQgInJlbW90ZSBuYW1lIgorbXNnc3RyICJub21lIHJlbW90byIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzcKK21zZ2lkICJ1c2Ugc3RhdGVsZXNzIFJQQyBwcm90b2NvbCIKK21zZ3N0ciAidXNhIHByb3RvY29sbG8gUlBDIHNlbnphIHN0YXRvIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OAorbXNnaWQgInJlYWQgcmVmcyBmcm9tIHN0ZGluIgorbXNnc3RyICJsZWdnaSBpIHJpZmVyaW1lbnRvIGRhbGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OQorbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgInN0YW1wYSBsbyBzdGF0byBkZWxsJ2hlbHBlciByZW1vdG8iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNAorbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHNob3J0bG9nIFs8b3B6aW9uaT5dIFs8aW50ZXJ2YWxsbyByZXZpc2lvbmk+XSBbWy0tXSA8cGVyY29yc28+Li4uXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE1Cittc2dpZCAiZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZyBbPG9wemlvbmk+XSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NAorbXNnaWQgIkdyb3VwIGJ5IGNvbW1pdHRlciByYXRoZXIgdGhhbiBhdXRob3IiCittc2dzdHIgIlJhZ2dydXBwYSBwZXIgcGVyc29uYSBjaGUgaGEgZXNlZ3VpdG8gaWwgY29tbWl0IGFuemljaMOpIHBlciBhdXRvcmUiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjYKK21zZ2lkICJzb3J0IG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBjb21taXRzIHBlciBhdXRob3IiCittc2dzdHIgIm9yZGluYSBsJ291dHB1dCBpbiBiYXNlIGFsIG51bWVybyBkaSBjb21taXQgcGVyIGF1dG9yZSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2OAorbXNnaWQgIlN1cHByZXNzIGNvbW1pdCBkZXNjcmlwdGlvbnMsIG9ubHkgcHJvdmlkZXMgY29tbWl0IGNvdW50IgorbXNnc3RyICJPbWV0dGkgbGUgZGVzY3JpemlvbmkgZGVpIGNvbW1pdCwgZm9ybmlzY2kgc29sbyBpbCBudW1lcm8gZGVpIGNvbW1pdCIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgIlZpc3VhbGl6emEgbCdpbmRpcml6em8gZS1tYWlsIGRpIG9nbmkgYXV0b3JlIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcxCittc2dpZCAiPHc+Wyw8aTE+Wyw8aTI+XV0iCittc2dzdHIgIjx3PlssPGkxPlssPGkyPl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcyCittc2dpZCAiTGluZXdyYXAgb3V0cHV0IgorbXNnc3RyICJPdXRwdXQgYSBjYXBvIGF1dG9tYXRpY28iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDEKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZ2l2ZW4gb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICJ0cm9wcGkgYXJnb21lbnRpIGZvcm5pdGkgb2x0cmUgYWwgcmVwb3NpdG9yeSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjEzCittc2dpZCAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08cXVhbmRvPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldmlzaW9uZT4gfCA8Z2xvYj4pLi4uXSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjE3Cittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJpZmVyaW1lbnRvPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZnMiCittc2dzdHJbMF0gImlnbm9ybyAlczsgbm9uIHBvc3NvIGdlc3RpcmUgcGnDuSBkaSAlZCByaWZlcmltZW50byIKK21zZ3N0clsxXSAiaWdub3JvICVzOyBub24gcG9zc28gZ2VzdGlyZSBwacO5IGRpICVkIHJpZmVyaW1lbnRpIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG1hdGNoaW5nIHJlZnMgd2l0aCAlcyIKK21zZ3N0ciAibmVzc3VuIHJpZmVyaW1lbnRvIGNvcnJpc3BvbmRlbnRlIGEgJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDUKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgInZpc3VhbGl6emEgaSBicmFuY2ggY2hlIG5lIHRyYWNjaWFubyB1bm8gcmVtb3RvIGUgcXVlbGxpIGxvY2FsaSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NworbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJ2aXN1YWxpenphIGkgYnJhbmNoIGNoZSBuZSB0cmFjY2lhbm8gdW5vIHJlbW90byIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0OQorbXNnaWQgImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giCittc2dzdHIgImNvbG9yZSAnKiErLScgY29ycmlzcG9uZGVudGUgYWwgYnJhbmNoIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUxCittc2dpZCAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiCittc2dzdHIgInZpc3VhbGl6emEgPG4+IGNvbW1pdCB1bHRlcmlvcmkgcmlzcGV0dG8gYWxsJ2FudGVuYXRvIGNvbXVuZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MworbXNnaWQgInN5bm9ueW0gdG8gbW9yZT0tMSIKK21zZ3N0ciAic2lub25pbW8gZGkgbW9yZT0tMSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NAorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICJub24gdmlzdWFsaXp6YXJlIGxlIHN0cmluZ2hlIGRpIGRlbm9taW5hemlvbmUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTYKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiaW5jbHVkaSBpbCBicmFuY2ggY29ycmVudGUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTgKK21zZ2lkICJuYW1lIGNvbW1pdHMgd2l0aCB0aGVpciBvYmplY3QgbmFtZXMiCittc2dzdHIgImRlbm9taW5hIGkgY29tbWl0IGNvbiBpIGxvcm8gbm9taSBvZ2dldHRvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYwCittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAidmlzdWFsaXp6YSBsZSBiYXNpIG1lcmdlIHBvc3NpYmlsaSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MgorbXNnaWQgInNob3cgcmVmcyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciByZWYiCittc2dzdHIgInZpc3VhbGl6emEgaSByaWZlcmltZW50aSBub24gcmFnZ2l1bmdpYmlsaSBkYSBuZXNzdW4gYWx0cm8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjQKK21zZ2lkICJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgInZpc3VhbGl6emEgaSBjb21taXQgaW4gb3JkaW5lIHRvcG9sb2dpY28iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjcKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAidmlzdWFsaXp6YSBzb2xvIGkgY29tbWl0IG5vbiBzdWwgcHJpbW8gYnJhbmNoIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY5Cittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICJ2aXN1YWxpenphIGkgbWVyZ2UgcmFnZ2l1bmdpYmlsaSBzb2xvIGRhbGwndWx0aW1vIGNvbW1pdCBkaSB1biBicmFuY2giCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzEKK21zZ2lkICJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgd2hlcmUgcG9zc2libGUiCittc2dzdHIgIiIKKyJlc2VndWkgdW4gb3JkaW5hbWVudG8gdG9wb2xvZ2ljbyBtYW50ZW5lbmRvIGwnb3JkaW5lIGRlbGxlIGRhdGUgb3ZlIHBvc3NpYmlsZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw8YmFzZT5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc1Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgIiIKKyJ2aXN1YWxpenphIGxlIDxuPiB2b2NpIHBpw7kgcmVjZW50aSBkZWwgbG9nIGRlaSByaWZlcmltZW50aSBwYXJ0ZW5kbyBkYSBiYXNlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzExCittc2dpZCAiIgorIi0tcmVmbG9nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQgb3IgLS1tZXJnZS1iYXNlIgorbXNnc3RyICIiCisiLS1yZWZsb2cgbm9uIMOoIGNvbXBhdGliaWxlIGNvbiAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50IG8gLS1tZXJnZS1iYXNlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM1Cittc2dpZCAibm8gYnJhbmNoZXMgZ2l2ZW4sIGFuZCBIRUFEIGlzIG5vdCB2YWxpZCIKK21zZ3N0ciAibmVzc3VuIGJyYW5jaCBmb3JuaXRvIGUgbCdIRUFEIG5vbiDDqCB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MzgKK21zZ2lkICItLXJlZmxvZyBvcHRpb24gbmVlZHMgb25lIGJyYW5jaCBuYW1lIgorbXNnc3RyICJsJ29wemlvbmUgLS1yZWZsb2cgcmljaGllZGUgaWwgbm9tZSBkaSB1biBicmFuY2giCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSAlZCBlbnRyeSBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnaWRfcGx1cmFsICJvbmx5ICVkIGVudHJpZXMgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ3N0clswXSAicHXDsiBlc3NlcmUgdmlzdWFsaXp6YXRhIHNvbG8gJWQgdm9jZSBwZXIgdm9sdGEuIgorbXNnc3RyWzFdICJwb3Nzb25vIGVzc2VyZSB2aXN1YWxpenphdGUgc29sbyAlZCB2b2NpIHBlciB2b2x0YS4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWYgJXMiCittc2dzdHIgInJpZmVyaW1lbnRvIG5vbiBlc2lzdGVudGU6ICVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldi4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldnMuIgorbXNnc3RyWzBdICJpbXBvc3NpYmlsZSBnZXN0aXJlIHBpw7kgZGkgJWQgcmV2aXNpb25lLiIKK21zZ3N0clsxXSAiaW1wb3NzaWJpbGUgZ2VzdGlyZSBwacO5IGRpICVkIHJldmlzaW9uaS4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYuIgorbXNnc3RyICInJXMnIG5vbiDDqCB1biByaWZlcmltZW50byB2YWxpZG8uIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIGNvbW1pdCAlcyAoJXMpIgorbXNnc3RyICJpbXBvc3NpYmlsZSB0cm92YXJlIGlsIGNvbW1pdCAlcyAoJXMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTIKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMworbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjIKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICJ2aXN1YWxpenphIHNvbG8gaSB0YWcgKGwnb3B6aW9uZSBwdcOyIGVzc2VyZSBjb21iaW5hdGEgY29uIGhlYWRzKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MworbXNnaWQgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiCittc2dzdHIgInZpc3VhbGl6emEgc29sbyBsZSBoZWFkIChsJ29wemlvbmUgcHXDsiBlc3NlcmUgY29tYmluYXRhIGNvbiB0YWdzKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NAorbXNnaWQgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgcmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiCittc2dzdHIgIiIKKyJjb250cm9sbG8gcGnDuSBzdHJpbmdlbnRlIGRlaSByaWZlcmltZW50aSwgcmljaGllZGUgdW4gcGVyY29yc28gZXNhdHRvIGFsICIKKyJyaWZlcmltZW50byIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NyBidWlsdGluL3Nob3ctcmVmLmM6MTY5Cittc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IgorbXNnc3RyICJ2aXN1YWxpenphIGlsIHJpZmVyaW1lbnRvIEhFQUQgYW5jaGUgc2UgZmlsdHJhdG8iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzEKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAiZGVyZWZlcmVuemlhIGkgdGFnIGluIElEIG9nZ2V0dG8iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzMKK21zZ2lkICJvbmx5IHNob3cgU0hBMSBoYXNoIHVzaW5nIDxuPiBkaWdpdHMiCittc2dzdHIgInZpc3VhbGl6emEgbCdoYXNoIFNIQTEgdXNhbmRvIHNvbG8gPG4+IGNhcmF0dGVyaSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3NworbXNnaWQgImRvIG5vdCBwcmludCByZXN1bHRzIHRvIHN0ZG91dCAodXNlZnVsIHdpdGggLS12ZXJpZnkpIgorbXNnc3RyICJub24gc3RhbXBhcmUgaSByaXN1bHRhdGkgc3VsbG8gc3RhbmRhcmQgb3V0cHV0ICh1dGlsZSBjb24gLS12ZXJpZnkpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgaSByaWZlcmltZW50aSBkYXRpIHN1bGxvIHN0YW5kYXJkIGlucHV0IGNoZSBub24gc29ubyBuZWwgIgorInJlcG9zaXRvcnkgbG9jYWxlIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIxCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxhZGR8ZGlzYWJsZSkgPG9wdGlvbnM+IgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGFkZHxkaXNhYmxlKSA8b3B6aW9uaT4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NjQKK21zZ2lkICJ0aGlzIHdvcmt0cmVlIGlzIG5vdCBzcGFyc2UgKHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBub3QgZXhpc3QpIgorbXNnc3RyICIiCisicXVlc3RvIGFsYmVybyBkaSBsYXZvcm8gbm9uIMOoIHNwYXJzZSAoaWwgZmlsZSBzcGFyc2UtY2hlY2tvdXQgcG90cmViYmUgbm9uICIKKyJlc2lzdGVyZSkiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjI1Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yIHNwYXJzZS1jaGVja291dCBmaWxlIgorbXNnc3RyICJjcmVhemlvbmUgZGVsbGEgZGlyZWN0b3J5IHBlciBpbCBmaWxlIHNwYXJzZS1jaGVja291dCBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjY2Cittc2dpZCAiZmFpbGVkIHRvIHNldCBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIHNldHRpbmciCittc2dzdHIgImltcG9zdGF6aW9uZSBkZWxsJ29wemlvbmUgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjgzCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IFstLWNvbmVdIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzAyCittc2dpZCAiaW5pdGlhbGl6ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGluIGNvbmUgbW9kZSIKK21zZ3N0ciAiaW5pemlhbGl6emEgaWwgY2hlY2tvdXQgc3BhcnNlIGluIG1vZGFsaXTDoCBjb25lIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjMwOAorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJpbml6aWFsaXp6YSBzcGFyc2UtY2hlY2tvdXQiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImFwZXJ0dXJhIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgbm9ybWFsaXplIHBhdGggJXMiCittc2dzdHIgImltcG9zc2liaWxlIG5vcm1hbGl6emFyZSBpbCBwZXJjb3JzbyAnJXMnIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjQxMAorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgKHNldHxhZGQpICgtLXN0ZGluIHwgPHBhdHRlcm5zPikiCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgKHNldHxhZGQpICgtLXN0ZGluIHwgPHBhdHRlcm4+KSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucXVvdGUgQy1zdHlsZSBzdHJpbmcgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmltdW92ZXJlIGxlIHZpcmdvbGV0dGUgZGFsbGEgc3RyaW5nYSBpbiBzdGlsZSBDICclcyciCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDg5IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTEzCittc2dpZCAidW5hYmxlIHRvIGxvYWQgZXhpc3Rpbmcgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjYXJpY2FyZSBpIHBhdHRlcm4gc3BhcnNlLWNoZWNrb3V0IGVzaXN0ZW50aSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1NTgKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gc3RhbmRhcmQgaW4iCittc2dzdHIgImxlZ2dpIGkgcGF0dGVybiBkYWxsbyBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1NjQKK21zZ2lkICJzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICJpbXBvc3RhIGkgcGF0dGVybiBzcGFyc2UtY2hlY2tvdXQiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTgxCittc2dpZCAiZGlzYWJsZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgImRpc2FiaWxpdGEgc3BhcnNlLWNoZWNrb3V0IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjU5MworbXNnaWQgImVycm9yIHdoaWxlIHJlZnJlc2hpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImVycm9yZSBkdXJhbnRlIGwnYWdnaW9ybmFtZW50byBkZWxsYSBkaXJlY3RvcnkgZGkgbGF2b3JvIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjIgYnVpbHRpbi9zdGFzaC5jOjM4Cittc2dpZCAiZ2l0IHN0YXNoIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBzdGFzaCBsaXN0IFs8b3B6aW9uaT5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjMgYnVpbHRpbi9zdGFzaC5jOjQzCittc2dpZCAiZ2l0IHN0YXNoIHNob3cgWzxvcHRpb25zPl0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggc2hvdyBbPG9wemlvbmk+XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNCBidWlsdGluL3N0YXNoLmM6NDgKK21zZ2lkICJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjUKK21zZ2lkICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjYgYnVpbHRpbi9zdGFzaC5jOjYzCittc2dpZCAiZ2l0IHN0YXNoIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggYnJhbmNoIDxub21lIGJyYW5jaD4gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjcgYnVpbHRpbi9zdGFzaC5jOjY4Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIgorbXNnc3RyICJnaXQgc3Rhc2ggY2xlYXIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyOAorbXNnaWQgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XVxuIgorIiAgICAgICAgICBbLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+IFstLXBhdGhzcGVjLWZpbGUtbnVsXV1cbiIKKyIgICAgICAgICAgWy0tXSBbPHBhdGhzcGVjPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdnaW8+XVxuIgorIiAgICAgICAgICBbLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+IFstLXBhdGhzcGVjLWZpbGUtbnVsXV1cbiIKKyIgICAgICAgICAgWy0tXSBbPHNwZWNpZmljYXRvcmUgcGVyY29yc28+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzozMiBidWlsdGluL3N0YXNoLmM6ODUKK21zZ2lkICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8bWVzc2FnZT5dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8bWVzc2FnZ2lvPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MworbXNnaWQgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1OAorbXNnaWQgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NzMKK21zZ2lkICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dIFstcXwtLXF1aWV0XSA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IHN0YXNoIHN0b3JlIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2dpbz5dIFstcXwtLXF1aWV0XSA8Y29tbWl0PiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjc4Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZ2lvPl1cbiIKKyIgICAgICAgICAgWy0tXSBbPHNwZWNpZmljYXRvcmUgcGVyY29yc28+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyBub24gw6ggdW4gY29tbWl0IHNpbWlsZSBhIHVubyBzdGFzaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiVzIgorbXNnc3RyICJUcm9wcGUgcmV2aXNpb25pIHNwZWNpZmljYXRlOiVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTYyIGdpdC1sZWdhY3ktc3Rhc2guc2g6NTQ5Cittc2dpZCAiTm8gc3Rhc2ggZW50cmllcyBmb3VuZC4iCittc2dzdHIgIk5lc3N1bmEgdm9jZSBkaSBzdGFzaCB0cm92YXRhLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiVzIG5vbiDDqCB1biByaWZlcmltZW50byB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMjUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3NQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIGNvbiBwYXJhbWV0cmkgbm9uIMOoIGltcGxlbWVudGF0byIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQwNAorbXNnaWQgImNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXBwbGljYXJlIHVubyBzdGFzaCBuZWwgbWV6em8gZGkgdW4gbWVyZ2UiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIGRpZmYgJXNeIS4iCittc2dzdHIgImltcG9zc2liaWxlIGdlbmVyYXJlIGlsIGRpZmYgJXNeISIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyMgorbXNnaWQgImNvbmZsaWN0cyBpbiBpbmRleC5Ucnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiY2kgc29ubyBjb25mbGl0dGkgbmVsbCdpbmRpY2UuIFByb3ZhIHNlbnphIC0taW5kZXguIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDI4Cittc2dpZCAiY291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2FsdmFyZSBsJ2FsYmVybyBpbmRpY2UiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MzcKK21zZ2lkICJjb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSByaXByaXN0aW5hcmUgaSBmaWxlIG5vbiB0cmFjY2lhdGkgZGFsbG8gc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzIgorbXNnc3RyICJNZXJnZSBkaSAlcyBjb24gJXMgaW4gY29yc28iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NjEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2ODEKK21zZ2lkICJJbmRleCB3YXMgbm90IHVuc3Rhc2hlZC4iCittc2dzdHIgIkwnaW5kaWNlIG5vbiDDqCBzdGF0byByaW1vc3NvIGRhbGxvIHN0YXNoLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUyMiBidWlsdGluL3N0YXNoLmM6NjIxCittc2dpZCAiYXR0ZW1wdCB0byByZWNyZWF0ZSB0aGUgaW5kZXgiCittc2dzdHIgInRlbnRhIGRpIHJpY3JlYXJlIGwnaW5kaWNlIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJXMgKCVzKSIKK21zZ3N0ciAiSG8gc2NhcnRhdG8gJXMgKCVzKSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiVzOiBJbXBvc3NpYmlsZSBzY2FydGFyZSBsYSB2b2NlIGRpIHN0YXNoIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJXMnIG5vbiDDqCB1biByaWZlcmltZW50byBzdGFzaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjYzMyBnaXQtbGVnYWN5LXN0YXNoLnNoOjY5NQorbXNnaWQgIlRoZSBzdGFzaCBlbnRyeSBpcyBrZXB0IGluIGNhc2UgeW91IG5lZWQgaXQgYWdhaW4uIgorbXNnc3RyICIiCisiTGEgdm9jZSBkaSBzdGFzaCDDqCBtYW50ZW51dGEgbmVsIGNhc28gaW4gY3VpIHR1IG5lIGFiYmlhIG51b3ZhbWVudGUgYmlzb2duby4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2NTYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MTMKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIk5vbWUgZGVsIGJyYW5jaCBub24gc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3OTYgYnVpbHRpbi9zdGFzaC5jOjgzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICVzIHdpdGggJXMiCittc2dzdHIgIkltcG9zc2liaWxlIGFnZ2lvcm5hcmUgJXMgY29uICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODE0IGJ1aWx0aW4vc3Rhc2guYzoxNDc4IGJ1aWx0aW4vc3Rhc2guYzoxNTQzCittc2dpZCAic3Rhc2ggbWVzc2FnZSIKK21zZ3N0ciAibWVzc2FnZ2lvIGRpIHN0YXNoIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODI0Cittc2dpZCAiXCJnaXQgc3Rhc2ggc3RvcmVcIiByZXF1aXJlcyBvbmUgPGNvbW1pdD4gYXJndW1lbnQiCittc2dzdHIgIlwiZ2l0IHN0YXNoIHN0b3JlXCIgcmljaGllZGUgdW4gYXJnb21lbnRvIDxjb21taXQ+IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTA0OSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxOAorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgIk5lc3N1bmEgbW9kaWZpY2Egc2VsZXppb25hdGEiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTQ5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MTUwCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIk5vbiBoYWkgYW5jb3JhIHVuIGNvbW1pdCBpbml6aWFsZSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNzYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNjUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2FsdmFyZSBsbyBzdGF0byBjb3JyZW50ZSBkaSBpbmRleCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExODUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxODAKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBzYWx2YXJlIGkgZmlsZSBub24gdHJhY2NpYXRpIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE5NiBidWlsdGluL3N0YXNoLmM6MTIwNSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIwMQorIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTQKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2FsdmFyZSBsbyBzdGF0byBjb3JyZW50ZSBkZWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjMzIGdpdC1sZWdhY3ktc3Rhc2guc2g6MjM0Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIkltcG9zc2liaWxlIHJlZ2lzdHJhcmUgbG8gc3RhdG8gZGVsbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI4MiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMzOAorbXNnaWQgIkNhbid0IHVzZSAtLXBhdGNoIGFuZCAtLWluY2x1ZGUtdW50cmFja2VkIG9yIC0tYWxsIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSB1c2FyZSAtLXBhdGNoIGUgLS1pbmNsdWRlLXVudHJhY2tlZCBvIC0tYWxsIGFsbG8gc3Rlc3NvIHRlbXBvIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI5OAorbXNnaWQgIkRpZCB5b3UgZm9yZ2V0IHRvICdnaXQgYWRkJz8iCittc2dzdHIgIlRpIHNlaSBzY29yZGF0byBkaSBlc2VndWlyZSAnZ2l0IGFkZCc/IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMxMyBnaXQtbGVnYWN5LXN0YXNoLnNoOjM0NgorbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAiTmVzc3VuYSBtb2RpZmljYSBsb2NhbGUgZGEgc2FsdmFyZSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMjAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTEKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgaW5pemlhbGl6emFyZSBzdGFzaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMzUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgIkltcG9zc2liaWxlIHNhbHZhcmUgbG8gc3RhdG8gYXR0dWFsZSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICVzIgorbXNnc3RyICJEaXJlY3RvcnkgZGkgbGF2b3JvIGUgc3RhdG8gaW5kaWNlIHNhbHZhdGk6ICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQzMCBnaXQtbGVnYWN5LXN0YXNoLnNoOjM4NQorbXNnaWQgIkNhbm5vdCByZW1vdmUgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmltdW92ZXJlIGxlIG1vZGlmaWNoZSBhbGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjkgYnVpbHRpbi9zdGFzaC5jOjE1MzQKK21zZ2lkICJrZWVwIGluZGV4IgorbXNnc3RyICJtYW50aWVuaSBsJ2luZGljZSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NzEgYnVpbHRpbi9zdGFzaC5jOjE1MzYKK21zZ2lkICJzdGFzaCBpbiBwYXRjaCBtb2RlIgorbXNnc3RyICJlc2VndWkgbG8gc3Rhc2ggaW4gbW9kYWxpdMOgIHBhdGNoIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3MiBidWlsdGluL3N0YXNoLmM6MTUzNworbXNnaWQgInF1aWV0IG1vZGUiCittc2dzdHIgIm1vZGFsaXTDoCBzaWxlbnppb3NhIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3NCBidWlsdGluL3N0YXNoLmM6MTUzOQorbXNnaWQgImluY2x1ZGUgdW50cmFja2VkIGZpbGVzIGluIHN0YXNoIgorbXNnc3RyICJpbmNsdWRpIGkgZmlsZSBub24gdHJhY2NpYXRpIG5lbGxvIHN0YXNoIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3NiBidWlsdGluL3N0YXNoLmM6MTU0MQorbXNnaWQgImluY2x1ZGUgaWdub3JlIGZpbGVzIgorbXNnc3RyICJpbmNsdWRpIGkgZmlsZSBpZ25vcmF0aSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4ZWMgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlICVzIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOAorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorbXNnc3RyICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTkKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLWMgfCAtLWNvbW1lbnQtbGluZXNdIgorbXNnc3RyICJnaXQgc3RyaXBzcGFjZSBbLWMgfCAtLWNvbW1lbnQtbGluZXNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzozNworbXNnaWQgInNraXAgYW5kIHJlbW92ZSBhbGwgbGluZXMgc3RhcnRpbmcgd2l0aCBjb21tZW50IGNoYXJhY3RlciIKK21zZ3N0ciAic2FsdGEgZSByaW11b3ZpIHR1dHRlIGxlIHJpZ2hlIGNoZSBpbml6aWFubyBjb24gdW4gY2FyYXR0ZXJlIGNvbW1lbnRvIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzo0MAorbXNnaWQgInByZXBlbmQgY29tbWVudCBjaGFyYWN0ZXIgYW5kIHNwYWNlIHRvIGVhY2ggbGluZSIKK21zZ3N0ciAiYW50ZXBvbmkgaWwgY2FyYXR0ZXJlIGNvbW1lbnRvIGUgdW5vIHNwYXppbyBhIG9nbmkgcmlnYSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGluZyBhIGZ1bGwgcmVmIG5hbWUsIGdvdCAlcyIKK21zZ3N0ciAiQXR0ZXNvIG5vbWUgcmlmZXJpbWVudG8gY29tcGxldG8sIHJpY2V2dXRvICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjQKK21zZ2lkICJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSB0YWtlcyBubyBhcmd1bWVudHMiCittc2dzdHIgInN1Ym1vZHVsZS0taGVscGVyIHByaW50LWRlZmF1bHQtcmVtb3RlIG5vbiByaWNoaWVkZSBhcmdvbWVudGkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaW11b3ZlcmUgdW4gY29tcG9uZW50ZSBkYWxsJ1VSTCAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDEwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk1Cittc2dpZCAiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAiYW5jb3JhZ2dpbyBhbHRlcm5hdGl2byBwZXIgaSBwZXJjb3JzaSByZWxhdGl2aSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHBlcmNvcnNvPl0gWzxwZXJjb3Jzbz4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICJOZXNzdW4gVVJMIHRyb3ZhdG8gaW4gLmdpdG1vZHVsZXMgcGVyIGlsIHBlcmNvcnNvIGRlbCBzb3R0b21vZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICclcydcbiIKK21zZ3N0ciAiRW50cm8gaW4gJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgZm9yICVzXG4iCisiLiIKK21zZ3N0ciAiIgorInJ1bl9jb21tYW5kIGhhIHJlc3RpdHVpdG8gdW4gY29kaWNlIGRpdmVyc28gZGEgemVybyBwZXIgJXNcbiIKKyIuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgd2hpbGUgcmVjdXJzaW5nIGluIHRoZSBuZXN0ZWQgIgorInN1Ym1vZHVsZXMgb2YgJXNcbiIKKyIuIgorbXNnc3RyICIiCisicnVuX2NvbW1hbmQgaGEgcmVzdGl0dWl0byB1biBjb2RpY2UgZGl2ZXJzbyBkYSB6ZXJvIGR1cmFudGUgbGEgcmljb3JzaW9uZSAiCisibmVpIHNvdHRvbW9kdWxpIGlubmVzdGF0aSBkaSAlc1xuIgorIi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NjUKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2YgZW50ZXJpbmcgZWFjaCBzdWJtb2R1bGUgY29tbWFuZCIKK21zZ3N0ciAiTm9uIHZpc3VhbGl6emFyZSBsJ291dHB1dCBkZWkgY29tYW5kaSBlc2VndWl0aSBpbiBvZ25pIHNvdHRvbW9kdWxvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDYzCittc2dpZCAiUmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzIgorbXNnc3RyICJFc2VndWkgcmljb3JzaXZhbWVudGUgc3VpIHNvdHRvbW9kdWxpIGlubmVzdGF0aSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU3MgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBmb3JlYWNoIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gPGNvbW1hbmQ+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDxjb21hbmRvPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGxvb2sgdXAgY29uZmlndXJhdGlvbiAnJXMnLiBBc3N1bWluZyB0aGlzIHJlcG9zaXRvcnkgaXMgaXRzIG93biAiCisiYXV0aG9yaXRhdGl2ZSB1cHN0cmVhbS4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSB0cm92YXJlIGxhIGNvbmZpZ3VyYXppb25lICclcycuIEFzc3VtbyBjaGUgcXVlc3RvIHJlcG9zaXRvcnkgc2lhICIKKyJpbCBwcm9wcmlvIHJlcG9zaXRvcnkgYXV0b3JpdGF0aXZvIHVwc3RyZWFtLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJSZWdpc3RyYXppb25lIGRlbGwnVVJMIHBlciBpbCBwZXJjb3JzbyBzb3R0b21vZHVsbyAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIgorbXNnc3RyICJTb3R0b21vZHVsbyAnJXMnICglcykgcmVnaXN0cmF0byBwZXIgaWwgcGVyY29yc28gJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGNvbW1hbmQgdXBkYXRlIG1vZGUgc3VnZ2VzdGVkIGZvciBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICIiCisiYXZ2aXNvOiBzdWdnZXJpdGEgbW9kYWxpdMOgIGNvbWFuZG8gYWdnaW9ybmFtZW50byBwZXIgaWwgc290dG9tb2R1bG8gJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorIlJlZ2lzdHJhemlvbmUgZGVsbGEgbW9kYWxpdMOgIGFnZ2lvcm5hbWVudG8gcGVyIGlsIHBlcmNvcnNvIHNvdHRvbW9kdWxvICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTAKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiTm9uIHZpc3VhbGl6emFyZSBsJ291dHB1dCBkZWxsJ2luaXppYWxpenphemlvbmUgZGVsIHNvdHRvbW9kdWxvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzxvcHRpb25zPl0gWzxwYXRoPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8b3B6aW9uaT5dIFs8cGVyY29yc28+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjc4OSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICclcyciCittc2dzdHIgIm1hcHBpbmcgc290dG9tb2R1bG8gcGVyIGlsIHBlcmNvcnNvICclcycgbm9uIHRyb3ZhdG8gaW4gLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCByZWYgaW5zaWRlIHRoZSBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmlzb2x2ZXJlIGlsIHJpZmVyaW1lbnRvIEhFQUQgbmVsIHNvdHRvbW9kdWxvICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NjQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAicmljb3JzaW9uZSBuZWwgc290dG9tb2R1bG8gJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTkKK21zZ2lkICJTdXBwcmVzcyBzdWJtb2R1bGUgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAiTm9uIHZpc3VhbGl6emFyZSBsJ291dHB1dCBkZWxsbyBzdGF0byBkZWwgc290dG9tb2R1bG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODkKK21zZ2lkICIiCisiVXNlIGNvbW1pdCBzdG9yZWQgaW4gdGhlIGluZGV4IGluc3RlYWQgb2YgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIHN1Ym1vZHVsZSAiCisiSEVBRCIKK21zZ3N0ciAiIgorIlVzYSBpbCBjb21taXQgc2FsdmF0byBuZWxsJ2luZGljZSBhbnppY2jDqSBxdWVsbG8gc2FsdmF0byBuZWxsJ0hFQUQgZGVsICIKKyJzb3R0b21vZHVsbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg5MAorbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiZXNlZ3VpIHJpY29yc2l2YW1lbnRlIHN1aSBzb3R0b21vZHVsaSBpbm5lc3RhdGkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4OTUKK21zZ2lkICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHBlcmNvcnNvPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MTkKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8cGF0aD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxwZXJjb3Jzbz4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJXMnXG4iCittc2dzdHIgIlNpbmNyb25penphemlvbmUgVVJMIHNvdHRvbW9kdWxvIHBlciAnJXMnIGluIGNvcnNvXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAicmVnaXN0cmF6aW9uZSBkZWxsJ1VSTCBwZXIgaWwgcGVyY29yc28gc290dG9tb2R1bG8gJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAicmVjdXBlcm8gZGVsIHJlbW90byBwcmVkZWZpbml0byBwZXIgaWwgc290dG9tb2R1bG8gJyVzJyBub24gcml1c2NpdG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiYWdnaW9ybmFtZW50byBkZWwgcmVtb3RvIHBlciBpbCBzb3R0b21vZHVsbyAnJXMnIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNjEKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIgorbXNnc3RyICIiCisiTm9uIHZpc3VhbGl6emFyZSBsJ291dHB1dCBkZWxsYSBzaW5jcm9uaXp6YXppb25lIGRlbGwnVVJMIGRlbCBzb3R0b21vZHVsbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNjgKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzxwZXJjb3Jzbz5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGEgLmdpdCBkaXJlY3RvcnkgKHVzZSAncm0gLXJmJyBpZiB5b3UgIgorInJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorIkwnYWxiZXJvIGRpIGxhdm9ybyBkZWwgc290dG9tb2R1bG8gKCclcycpIGNvbnRpZW5lIHVuYSBkaXJlY3RvcnkgLmdpdCAodXNhICIKKyIncm0gLXJmJyBzZSB2dW9pIHZlcmFtZW50ZSByaW11b3ZlcmxhLCBpbmNsdXNhIGwnaW50ZXJhIHN1YSBjcm9ub2xvZ2lhKSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkICIKKyJ0aGVtIgorbXNnc3RyICIiCisiTCdhbGJlcm8gZGkgbGF2b3JvIGRlbCBzb3R0b21vZHVsbyAoJyVzJykgY29udGllbmUgbW9kaWZpY2hlIGxvY2FsaTsgdXNhICctIgorImYnIHBlciBzY2FydGFybGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIKK21zZ3N0ciAiRGlyZWN0b3J5ICclcycgcmlwdWxpdGFcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBzdWJtb2R1bGUgd29yayB0cmVlICclcydcbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmltdW92ZXJlIGwnYWxiZXJvIGRpIGxhdm9ybyBkZWwgc290dG9tb2R1bG8gJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGVtcHR5IHN1Ym1vZHVsZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBsYSBkaXJlY3RvcnkgdnVvdGEgZGVsIHNvdHRvbW9kdWxvICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIlJpbW9zc2EgcmVnaXN0cmF6aW9uZSBzb3R0b21vZHVsbyAnJXMnICglcykgcGVyIGlsIHBlcmNvcnNvICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMDAKK21zZ2lkICJSZW1vdmUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZXMgZXZlbiBpZiB0aGV5IGNvbnRhaW4gbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiIgorIlJpbXVvdmkgZ2xpIGFsYmVyaSBkaSBsYXZvcm8gZGVpIHNvdHRvbW9kdWxpIGFuY2hlIHNlIGNvbnRlbmdvbm8gbW9kaWZpY2hlICIKKyJsb2NhbGkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjAxCittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiQW5udWxsYSBsYSByZWdpc3RyYXppb25lIGRpIHR1dHRpIGkgc290dG9tb2R1bGkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjA2Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8cGF0aD4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8cGVyY29yc28+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjIwCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiVXNhICctLWFsbCcgc2UgdnVvaSB2ZXJhbWVudGUgZGVpbml6aWFsaXp6YXJlIHR1dHRpIGkgc290dG9tb2R1bGkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjg5Cittc2dpZCAiIgorIkFuIGFsdGVybmF0ZSBjb21wdXRlZCBmcm9tIGEgc3VwZXJwcm9qZWN0J3MgYWx0ZXJuYXRlIGlzIGludmFsaWQuXG4iCisiVG8gYWxsb3cgR2l0IHRvIGNsb25lIHdpdGhvdXQgYW4gYWx0ZXJuYXRlIGluIHN1Y2ggYSBjYXNlLCBzZXRcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSB0byAnaW5mbycgb3IsIGVxdWl2YWxlbnRseSwgY2xvbmUgd2l0aFxuIgorIictLXJlZmVyZW5jZS1pZi1hYmxlJyBpbnN0ZWFkIG9mICctLXJlZmVyZW5jZScuIgorbXNnc3RyICIiCisiVW4gYWx0ZXJuYXRvIGNhbGNvbGF0byBhIHBhcnRpcmUgZGFsbCdhbHRlcm5hdG8gZGkgdW4gcHJvZ2V0dG8gZGkgbGl2ZWxsb1xuIgorInN1cGVyaW9yZSBub24gw6ggdmFsaWRvLlxuIgorIlBlciBjb25zZW50aXJlIGEgR2l0IGRpIGVzZWd1aXJlIGlsIGNsb25lIHNlbnphIGFsdGVybmF0aSBpbiB0YWwgY2FzbywgIgorImltcG9zdGFcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBhICdpbmZvJyBvLCBlcXVpdmFsZW50ZW1lbnRlLCBlc2VndWkgaWwgIgorImNsb25lXG4iCisiY29uIGwnb3B6aW9uZSAnLS1yZWZlcmVuY2UtaWYtYWJsZScgYW56aWNow6kgJy0tcmVmZXJlbmNlJy4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzI4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBhZGQgYWx0ZXJuYXRlOiAlcyIKK21zZ3N0ciAibm9uIMOoIHBvc3NpYmlsZSBhZ2dpdW5nZXJlIHVuIGFsdGVybmF0byBwZXIgaWwgc290dG9tb2R1bG8gJyVzJzogJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJWYWxvcmUgJyVzJyBwZXIgc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgbm9uIHJpY29ub3NjaXV0byIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJWYWxvcmUgJyVzJyBwZXIgc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIG5vbiByaWNvbm9zY2l1dG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk4Cittc2dpZCAid2hlcmUgdGhlIG5ldyBzdWJtb2R1bGUgd2lsbCBiZSBjbG9uZWQgdG8iCittc2dzdHIgInBlcmNvcnNvIGluIGN1aSBzYXLDoCBjbG9uYXRvIGlsIG51b3ZvIHNvdHRvbW9kdWxvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwMQorbXNnaWQgIm5hbWUgb2YgdGhlIG5ldyBzdWJtb2R1bGUiCittc2dzdHIgIm5vbWUgZGVsIG51b3ZvIHNvdHRvbW9kdWxvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNAorbXNnaWQgInVybCB3aGVyZSB0byBjbG9uZSB0aGUgc3VibW9kdWxlIGZyb20iCittc2dzdHIgIlVSTCBkYSBjdWkgY2xvbmFyZSBpbCBzb3R0b21vZHVsbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTIKK21zZ2lkICJkZXB0aCBmb3Igc2hhbGxvdyBjbG9uZXMiCittc2dzdHIgInByb2ZvbmRpdMOgIHBlciBpIGNsb25pIHNoYWxsb3ciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDE1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTI0Cittc2dpZCAiZm9yY2UgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAiZm9yemEgbCdpbmRpY2F6aW9uZSBkJ2F2YW56YW1lbnRvIGRlbGxhIGNsb25hemlvbmUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDE3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTI2Cittc2dpZCAiZGlzYWxsb3cgY2xvbmluZyBpbnRvIG5vbi1lbXB0eSBkaXJlY3RvcnkiCittc2dzdHIgImRpc2FiaWxpdGEgaWwgY2xvbmUgaW4gdW5hIGRpcmVjdG9yeSBub24gdnVvdGEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDI0Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8cmVwb3NpdG9yeT5dIFstLW5hbWUgPG5hbWU+XSBbLS1kZXB0aCA8ZGVwdGg+XSBbLS1zaW5nbGUtYnJhbmNoXSAtLXVybCAiCisiPHVybD4gLS1wYXRoIDxwYXRoPiIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PHBlcmNvcnNvPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxub21lPl0gWy0tZGVwdGggPHByb2ZvbmRpdMOgPl0gWy0tc2luZ2xlLWJyYW5jaF0gLS11cmwgIgorIjxVUkw+IC0tcGF0aCA8cGVyY29yc28+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBjcmVhdGUvdXNlICclcycgaW4gYW5vdGhlciBzdWJtb2R1bGUncyBnaXQgZGlyIgorbXNnc3RyICIiCisibWkgcmlmaXV0byBkaSBjcmVhcmUvdXNhcmUgJyVzJyBuZWxsYSBkaXJlY3RvcnkgR2l0IGRpIHVuIGFsdHJvIHNvdHRvbW9kdWxvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9uZSBvZiAnJXMnIGludG8gc3VibW9kdWxlIHBhdGggJyVzJyBmYWlsZWQiCittc2dzdHIgImNsb25lIGRpICclcycgbmVsIHBlcmNvcnNvIGRlbCBzb3R0b21vZHVsbyAoJyVzJykgbm9uIHJpdXNjaXRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJkaXJlY3Rvcnkgbm90IGVtcHR5OiAnJXMnIgorbXNnc3RyICJkaXJlY3Rvcnkgbm9uIHZ1b3RhOiAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgImltcG9zc2liaWxlIHJlY3VwZXJhcmUgbGEgZGlyZWN0b3J5IGRlbCBzb3R0b21vZHVsbyBwZXIgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisiTW9kYWxpdMOgIGFnZ2lvcm5hbWVudG8gJyVzJyBub24gdmFsaWRhIHBlciBpbCBwZXJjb3JzbyBkZWwgc290dG9tb2R1bG8gKCclcycpIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgY29uZmlndXJlZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorIsOIIHN0YXRhIGNvbmZpZ3VyYXRhIHVuYSBtb2RhbGl0w6AgYWdnaW9ybmFtZW50byAnJXMnIG5vbiB2YWxpZGEgcGVyIGlsICIKKyJwZXJjb3JzbyBkZWwgc290dG9tb2R1bG8gKCclcycpIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYxNworIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJXMnIG5vdCBpbml0aWFsaXplZCIKK21zZ3N0ciAiUGVyY29yc28gZGVsIHNvdHRvbW9kdWxvICgnJXMnKSBub24gaW5pemlhbGl6emF0byIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MjEKK21zZ2lkICJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAiUG90cmVzdGkgdm9sZXIgdXNhcmUgJ3VwZGF0ZSAtLWluaXQnLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgdW5tZXJnZWQgc3VibW9kdWxlICVzIgorbXNnc3RyICJJZ25vcm8gaWwgc290dG9tb2R1bG8gJXMgbm9uIHNvdHRvcG9zdG8gYSBtZXJnZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgc3VibW9kdWxlICclcyciCittc2dzdHIgIklnbm9ybyBpbCBzb3R0b21vZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJy4gUmV0cnkgc2NoZWR1bGVkIgorbXNnc3RyICJDbG9uZSBkaSAnJXMnIG5vbiByaXVzY2l0by4gTnVvdm8gdGVudGF0aXZvIHByb2dyYW1tYXRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJyBhIHNlY29uZCB0aW1lLCBhYm9ydGluZyIKK21zZ3N0ciAiIgorIkNsb25lIGRpICclcycgbm9uIHJpdXNjaXRvIHBlciBsYSBzZWNvbmRhIHZvbHRhLCBpbnRlcnJvbXBvIGwnb3BlcmF6aW9uZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDMgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNDkKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAicGVyY29yc28gbmVsbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwNgorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlLCBhY3Jvc3MgbmVzdGVkIHN1Ym1vZHVsZSBib3VuZGFyaWVzIgorbXNnc3RyICIiCisicGVyY29yc28gbmVsbCdhbGJlcm8gZGkgbGF2b3JvIGF0dHJhdmVyc28gaSBjb25maW5pIGRlaSBzb3R0b21vZHVsaSBpbm5lc3RhdGkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTEwCittc2dpZCAicmViYXNlLCBtZXJnZSwgY2hlY2tvdXQgb3Igbm9uZSIKK21zZ3N0ciAicmViYXNlLCBtZXJnZSwgY2hlY2tvdXQgbyBub25lIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxNgorbXNnaWQgIkNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgdHJ1bmNhdGVkIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldmlzaW9ucyIKK21zZ3N0ciAiQ3JlYSB1biBjbG9uZSBzaGFsbG93IGxpbWl0YXRvIGFsIG51bWVybyBkaSByZXZpc2lvbmkgc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE5Cittc2dpZCAicGFyYWxsZWwgam9icyIKK21zZ3N0ciAicHJvY2Vzc2kgZGEgZXNlZ3VpcmUgaW4gcGFyYWxsZWxvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyMQorbXNnaWQgIndoZXRoZXIgdGhlIGluaXRpYWwgY2xvbmUgc2hvdWxkIGZvbGxvdyB0aGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiIKK21zZ3N0ciAiZGV0ZXJtaW5hIHNlIGlsIGNsb25lIGluaXppYWxlIHNhcsOgIHNoYWxsb3cgY29tZSByYWNjb21hbmRhdG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTIyCittc2dpZCAiZG9uJ3QgcHJpbnQgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAibm9uIHN0YW1wYXJlIGwnaW5kaWNhemlvbmUgZGkgYXZhbnphbWVudG8gZGVsbGEgY2xvbmF6aW9uZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MzMKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZS1jbG9uZSBbLS1wcmVmaXg9PHBlcmNvcnNvPl0gWzxwZXJjb3Jzbz4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk0NgorbXNnaWQgImJhZCB2YWx1ZSBmb3IgdXBkYXRlIHBhcmFtZXRlciIKK21zZ3N0ciAidmFsb3JlIHBhcmFtZXRybyBhZ2dpb3JuYW1lbnRvIGVycmF0byIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSAoJXMpIGJyYW5jaCBjb25maWd1cmVkIHRvIGluaGVyaXQgYnJhbmNoIGZyb20gc3VwZXJwcm9qZWN0LCBidXQgIgorInRoZSBzdXBlcnByb2plY3QgaXMgbm90IG9uIGFueSBicmFuY2giCittc2dzdHIgIiIKKyJJbCBicmFuY2ggZGVsIHNvdHRvbW9kdWxvICglcykgw6ggY29uZmlndXJhdG8gaW4gbW9kbyBkYSBlcmVkaXRhcmUgaWwgYnJhbmNoICIKKyJkYWwgcHJvZ2V0dG8gYWwgbGl2ZWxsbyBzdXBlcmlvcmUsIG1hIHF1ZXN0byBub24gw6ggc3UgYWxjdW4gYnJhbmNoIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjExNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGEgcmVwb3NpdG9yeSBoYW5kbGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSByZWN1cGVyYXJlIHVuIGhhbmRsZSByZXBvc2l0b3J5IHBlciBpbCBzb3R0b21vZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE1MAorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIgorbXNnc3RyICJlc2VndWkgcmljb3JzaXZhbWVudGUgc3VpIHNvdHRvbW9kdWxpIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE1NgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBhYnNvcmItZ2l0LWRpcnMgWzxvcHRpb25zPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBhYnNvcmItZ2l0LWRpcnMgWzxvcHppb25pPl0gWzxwZXJjb3Jzbz4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIxMgorbXNnaWQgImNoZWNrIGlmIGl0IGlzIHNhZmUgdG8gd3JpdGUgdG8gdGhlIC5naXRtb2R1bGVzIGZpbGUiCittc2dzdHIgImNvbnRyb2xsYSBzZSDDqCBzaWN1cm8gc2NyaXZlcmUgc3VsIGZpbGUgLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjE1Cittc2dpZCAidW5zZXQgdGhlIGNvbmZpZyBpbiB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAicmltdW92aSBsYSBjb25maWd1cmF6aW9uZSBuZWwgZmlsZSAuZ2l0bW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMjAKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIDxuYW1lPiBbPHZhbHVlPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgPG5vbWU+IFs8dmFsb3JlPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjIxCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLXVuc2V0IDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLXVuc2V0IDxub21lPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMjIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI0MSBnaXQtc3VibW9kdWxlLnNoOjE3NAorIywgc2gtZm9ybWF0Cittc2dpZCAicGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGlzIGluIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgImFzc2ljdXJhdGkgY2hlIGlsIGZpbGUgLmdpdG1vZHVsZXMgc2lhIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyOTEgZ2l0LmM6NDMzIGdpdC5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2Vzbid0IHN1cHBvcnQgLS1zdXBlci1wcmVmaXgiCittc2dzdHIgIiVzIG5vbiBzdXBwb3J0YSAtLXN1cGVyLXByZWZpeCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBzdWJtb2R1bGUtLWhlbHBlciBzdWJjb21tYW5kIgorbXNnc3RyICInJXMnIG5vbiDDqCB1biBzb3R0b2NvbWFuZG8gc3VibW9kdWxlLS1oZWxwZXIgdmFsaWRvIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjgKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIDxuYW1lPiBbPHJlZj5dIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIFs8b3B6aW9uaT5dIDxub21lPiBbPHJpZmVyaW1lbnRvPl0iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OQorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bmFtZT4iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bm9tZT4iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDAKK21zZ2lkICJzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGZvciBub24tc3ltYm9saWMgKGRldGFjaGVkKSByZWZzIgorbXNnc3RyICIiCisibm9uIHZpc3VhbGl6emFyZSBtZXNzYWdnaSBkJ2Vycm9yZSBzZSBjaSBzb25vIHJpZmVyaW1lbnRpIG5vbiBzaW1ib2xpY2kgIgorIihzY29sbGVnYXRpKSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MQorbXNnaWQgImRlbGV0ZSBzeW1ib2xpYyByZWYiCittc2dzdHIgImVsaW1pbmEgcmlmZXJpbWVudG8gc2ltYm9saWNvIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICJhYmJyZXZpYSBpbCByaWZlcmltZW50byBuZWxsJ291dHB1dCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24iCittc2dzdHIgIm1vdGl2byIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAibW90aXZvIGRlbGwnYWdnaW9ybmFtZW50byIKKworIzogYnVpbHRpbi90YWcuYzoyNQorbXNnaWQgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XVxuIgorIlx0XHQ8dGFnbmFtZT4gWzxoZWFkPl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPElEIGNoaWF2ZT5dIFstZl0gWy1tIDxtZXNzYWdnaW8+IHwgLUYgPGZpbGU+XVxuIgorIlx0XHQ8bm9tZSB0YWc+IFs8aGVhZD5dIgorCisjOiBidWlsdGluL3RhZy5jOjI3Cittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLWQgPG5vbWUgdGFnPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzoyOAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0gWy0tIgorInBvaW50cy1hdCA8b2JqZWN0Pl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCB0YWcgLWwgWy1uWzxudW1lcm8+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLW5vLWNvbnRhaW5zIDxjb21taXQ+XSBbLS0iCisicG9pbnRzLWF0IDxvZ2dldHRvPl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTxmb3JtYXRvPl0gWy0tW25vLV1tZXJnZWQgWzxjb21taXQ+XV0gWzxwYXR0ZXJuPi4uLl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzAKK21zZ2lkICJnaXQgdGFnIC12IFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC12IFstLWZvcm1hdD08Zm9ybWF0bz5dIDxub21lIHRhZz4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAidGFnICclcycgbm9uIHRyb3ZhdG8uIgorCisjOiBidWlsdGluL3RhZy5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlRhZyAnJXMnIGVsaW1pbmF0byAoZXJhICVzKVxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTY3JpdmkgdW4gbWVzc2FnZ2lvIHBlciBpbCB0YWc6XG4iCisiICAlc1xuIgorIkxlIHJpZ2hlIGNoZSBpbml6aWFubyBjb24gJyVjJyBzYXJhbm5vIGlnbm9yYXRlLlxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91ICIKKyJ3YW50IHRvLlxuIgorbXNnc3RyICIiCisiXG4iCisiU2NyaXZpIHVuIG1lc3NhZ2dpbyBwZXIgaWwgdGFnOlxuIgorIiAgJXNcbiIKKyJMZSByaWdoZSBjaGUgaW5pemlhbm8gY29uICclYycgc2FyYW5ubyBtYW50ZW51dGU7IHB1b2kgcmltdW92ZXJsZSAiCisiYXV0b25vbWFtZW50ZSBzZSBsbyBkZXNpZGVyaS5cbiIKKworIzogYnVpbHRpbi90YWcuYzoxOTgKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBmaXJtYXJlIGlsIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzoyMDAKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIGZpbGUgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgY3JlYXRlZCBhIG5lc3RlZCB0YWcuIFRoZSBvYmplY3QgcmVmZXJyZWQgdG8gYnkgeW91ciBuZXcgdGFnIGlzXG4iCisiYWxyZWFkeSBhIHRhZy4gSWYgeW91IG1lYW50IHRvIHRhZyB0aGUgb2JqZWN0IHRoYXQgaXQgcG9pbnRzIHRvLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgdGFnIC1mICVzICVzXnt9IgorbXNnc3RyICIiCisiSGFpIGNyZWF0byB1biB0YWcgaW5uZXN0YXRvLiBMJ29nZ2V0dG8gYSBjdWkgc2kgcmlmZXJpc2NlIGlsIHR1byBudW92b1xuIgorInRhZyDDqCBnacOgIHVuIHRhZy4gU2UgaW50ZW5kZXZpIGFnZ2l1bmdlcmUgdW4gdGFnIGFsbCdvZ2dldHRvIGEgY3VpXG4iCisicHVudGEsIHVzYTpcbiIKKyJcbiIKKyJcdGdpdCB0YWcgLWYgJXMgJXNee30iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjMyCittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAidGlwbyBvZ2dldHRvIGVycmF0by4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mjg0Cittc2dpZCAibm8gdGFnIG1lc3NhZ2U/IgorbXNnc3RyICJuZXNzdW4gbWVzc2FnZ2lvIHBlciBpbCB0YWc/IgorCisjOiBidWlsdGluL3RhZy5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgdGFnIG1lc3NhZ2UgaGFzIGJlZW4gbGVmdCBpbiAlc1xuIgorbXNnc3RyICJJbCBtZXNzYWdnaW8gZGVsIHRhZyDDqCBzdGF0byBsYXNjaWF0byBpbiAlc1xuIgorCisjOiBidWlsdGluL3RhZy5jOjQwMgorbXNnaWQgImxpc3QgdGFnIG5hbWVzIgorbXNnc3RyICJlbGVuY2EgaSBub21pIGRlaSB0YWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA0Cittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgInN0YW1wYSBsZSBwcmltZSA8bj4gcmlnaGUgZGkgb2duaSBtZXNzYWdnaW8gdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjQwNgorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICJlbGltaW5hIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0MDcKK21zZ2lkICJ2ZXJpZnkgdGFncyIKK21zZ3N0ciAidmVyaWZpY2EgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjQwOQorbXNnaWQgIlRhZyBjcmVhdGlvbiBvcHRpb25zIgorbXNnc3RyICJPcHppb25pIGNyZWF6aW9uZSB0YWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDExCittc2dpZCAiYW5ub3RhdGVkIHRhZywgbmVlZHMgYSBtZXNzYWdlIgorbXNnc3RyICJ0YWcgYW5ub3RhdG8sIHJpY2hpZWRlIHVuIG1lc3NhZ2dpbyIKKworIzogYnVpbHRpbi90YWcuYzo0MTMKK21zZ2lkICJ0YWcgbWVzc2FnZSIKK21zZ3N0ciAibWVzc2FnZ2lvIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0MTUKK21zZ2lkICJmb3JjZSBlZGl0IG9mIHRhZyBtZXNzYWdlIgorbXNnc3RyICJmb3J6YSBtb2RpZmljYSBkZWwgbWVzc2FnZ2lvIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0MTYKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICJ0YWcgYW5ub3RhdG8gZSBmaXJtYXRvIGNvbiBHUEciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE5Cittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAidXNhIHVuJ2FsdHJhIGNoaWF2ZSBwZXIgZmlybWFyZSBpbCB0YWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIwCittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAic29zdGl0dWlzY2kgaWwgdGFnIHNlIGVzaXN0ZSIKKworIzogYnVpbHRpbi90YWcuYzo0MjEgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY5Cittc2dpZCAiY3JlYXRlIGEgcmVmbG9nIgorbXNnc3RyICJjcmVhIHVuIHJlZ2lzdHJvIHJpZmVyaW1lbnRpIgorCisjOiBidWlsdGluL3RhZy5jOjQyMworbXNnaWQgIlRhZyBsaXN0aW5nIG9wdGlvbnMiCittc2dzdHIgIk9wemlvbmkgZWxlbmNvIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0MjQKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgInZpc3VhbGl6emEgbCdlbGVuY28gZGVpIHRhZyBpbiBjb2xvbm5lIgorCisjOiBidWlsdGluL3RhZy5jOjQyNSBidWlsdGluL3RhZy5jOjQyNworbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAic3RhbXBhIHNvbG8gaSB0YWcgY2hlIGNvbnRlbmdvbm8gaWwgY29tbWl0IgorCisjOiBidWlsdGluL3RhZy5jOjQyNiBidWlsdGluL3RhZy5jOjQyOAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAic3RhbXBhIHNvbG8gaSB0YWcgY2hlIG5vbiBjb250ZW5nb25vIGkgY29tbWl0IgorCisjOiBidWlsdGluL3RhZy5jOjQyOQorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgInN0YW1wYSBzb2xvIGkgdGFnIHNvdHRvcG9zdGkgYSBtZXJnZSIKKworIzogYnVpbHRpbi90YWcuYzo0MzAKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAic3RhbXBhIHNvbG8gaSB0YWcgbm9uIHNvdHRvcG9zdGkgYSBtZXJnZSIKKworIzogYnVpbHRpbi90YWcuYzo0MzQKK21zZ2lkICJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAic3RhbXBhIHNvbG8gaSB0YWcgZGVsbCdvZ2dldHRvIgorCisjOiBidWlsdGluL3RhZy5jOjQ4MgorbXNnaWQgIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiBlIC1uIG5vbiBzb25vIGNvbXBhdGliaWxpIgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJsJ29wemlvbmUgLW4gw6ggY29uc2VudGl0YSBzb2xvIGluIG1vZGFsaXTDoCBlbGVuY28iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA2Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAibCdvcHppb25lIC0tY29udGFpbnMgw6ggY29uc2VudGl0YSBzb2xvIGluIG1vZGFsaXTDoCBlbGVuY28iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA4Cittc2dpZCAiLS1uby1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAibCdvcHppb25lIC0tbm8tY29udGFpbnMgw6ggY29uc2VudGl0YSBzb2xvIGluIG1vZGFsaXTDoCBlbGVuY28iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEwCittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgImwnb3B6aW9uZSAtLXBvaW50cy1hdCDDqCBjb25zZW50aXRhIHNvbG8gaW4gbW9kYWxpdMOgIGVsZW5jbyIKKworIzogYnVpbHRpbi90YWcuYzo1MTIKK21zZ2lkICItLW1lcmdlZCBhbmQgLS1uby1tZXJnZWQgb3B0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiIgorImxlIG9wemlvbmkgLS1tZXJnZWQgZSAtLW5vLW1lcmdlZCBzb25vIGNvbnNlbnRpdGUgc29sbyBpbiBtb2RhbGl0w6AgZWxlbmNvIgorCisjOiBidWlsdGluL3RhZy5jOjUyMworbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiw6ggY29uc2VudGl0YSB1bmEgc29sYSBvcHppb25lIHRyYSAtRiBlIC1tLiIKKworIzogYnVpbHRpbi90YWcuYzo1NDIKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgInRyb3BwaSBwYXJhbWV0cmkiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICInJXMnIG5vbiDDqCB1biBub21lIHRhZyB2YWxpZG8uIgorCisjOiBidWlsdGluL3RhZy5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiaWwgdGFnICclcycgZXNpc3RlIGdpw6AiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiVGFnICclcycgYWdnaW9ybmF0byAoZXJhICVzKVxuIgorCisjOiBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTAyCittc2dpZCAiVW5wYWNraW5nIG9iamVjdHMiCittc2dzdHIgIkRlY29tcHJlc3Npb25lIGRlZ2xpIG9nZ2V0dGkgaW4gY29yc28iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgImNyZWF6aW9uZSBkZWxsYSBkaXJlY3RvcnkgJXMgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgImNyZWF6aW9uZSBkZWwgZmlsZSAlcyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAiZWxpbWluYXppb25lIGRlbCBmaWxlICVzIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTUgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgImVsaW1pbmF6aW9uZSBkZWxsYSBkaXJlY3RvcnkgJXMgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJUZXN0aW5nIG10aW1lIGluICclcycgIgorbXNnc3RyICJUZXN0IGRpIG10aW1lIGluICclcycgaW4gY29yc28gIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE1NAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBmaWxlIgorbXNnc3RyICIiCisibGUgaW5mb3JtYXppb25pIHN0YXQgZGVsbGEgZGlyZWN0b3J5IG5vbiBjYW1iaWFubyBkb3BvIGwnYWdnaXVudGEgZGkgdW4gIgorIm51b3ZvIGZpbGUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTY3Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImxlIGluZm9ybWF6aW9uaSBzdGF0IGRlbGxhIGRpcmVjdG9yeSBub24gY2FtYmlhbm8gZG9wbyBsJ2FnZ2l1bnRhIGRpIHVuYSAiCisibnVvdmEgZGlyZWN0b3J5IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE4MAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciB1cGRhdGluZyBhIGZpbGUiCittc2dzdHIgIiIKKyJsZSBpbmZvcm1hemlvbmkgc3RhdCBkZWxsYSBkaXJlY3RvcnkgY2FtYmlhbm8gZG9wbyBsJ2FnZ2lvcm5hbWVudG8gZGkgdW4gZmlsZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxOTEKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgYWRkaW5nIGEgZmlsZSBpbnNpZGUgc3ViZGlyZWN0b3J5IgorbXNnc3RyICIiCisibGUgaW5mb3JtYXppb25pIHN0YXQgZGVsbGEgZGlyZWN0b3J5IGNhbWJpYW5vIGRvcG8gbCdhZ2dpdW50YSBkaSB1biBmaWxlIGluICIKKyJ1bmEgc290dG9kaXJlY3RvcnkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjAyCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBmaWxlIgorbXNnc3RyICIiCisibGUgaW5mb3JtYXppb25pIHN0YXQgZGVsbGEgZGlyZWN0b3J5IG5vbiBjYW1iaWFubyBkb3BvIGwnZWxpbWluYXppb25lIGRpIHVuICIKKyJmaWxlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIxNQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisibGUgaW5mb3JtYXppb25pIHN0YXQgZGVsbGEgZGlyZWN0b3J5IG5vbiBjYW1iaWFubyBkb3BvIGwnZWxpbWluYXppb25lIGRpIHVuYSAiCisiZGlyZWN0b3J5IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIyMgorbXNnaWQgIiBPSyIKK21zZ3N0ciAiIE9LIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjU5MQorbXNnaWQgImdpdCB1cGRhdGUtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wemlvbmk+XSBbLS1dIFs8ZmlsZT4uLi5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NAorbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAiIgorImNvbnRpbnVhIGwnYWdnaW9ybmFtZW50byBhbmNoZSBuZWwgY2FzbyBpbiBjdWkgbCdpbmRpY2UgcmljaGllZGEgZGkgZXNzZXJlICIKKyJhZ2dpb3JuYXRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NworbXNnaWQgInJlZnJlc2g6IGlnbm9yZSBzdWJtb2R1bGVzIgorbXNnc3RyICJhZ2dpb3JuYW1lbnRvOiBpZ25vcmEgaSBzb3R0b21vZHVsaSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODAKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAibm9uIGlnbm9yYXJlIGkgbnVvdmkgZmlsZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODIKK21zZ2lkICJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIKK21zZ3N0ciAiY29uc2VudGkgY2hlIGRlaSBmaWxlIHNvc3RpdHVpc2Nhbm8gZGVsbGUgZGlyZWN0b3J5IGUgdmljZXZlcnNhIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NAorbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgIm5vdGEgc2UgZGVpIGZpbGUgbWFuY2FubyBkYWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg2Cittc2dpZCAicmVmcmVzaCBldmVuIGlmIGluZGV4IGNvbnRhaW5zIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgIiIKKyJlc2VndWkgbCdhZ2dpb3JuYW1lbnRvIGFuY2hlIHNlIGwnaW5kaWNlIGNvbnRpZW5lIGRlbGxlIHZvY2kgbm9uIHNvdHRvcG9zdGUgIgorImEgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg5Cittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICJhZ2dpb3JuYSBsZSBpbmZvcm1hemlvbmkgc3RhdCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTMKK21zZ2lkICJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciCittc2dzdHIgImNvbWUgLS1yZWZyZXNoLCBtYSBpZ25vcmEgbCdpbXBvc3RhemlvbmUgYXNzdW1lLXVuY2hhbmdlZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTcKK21zZ2lkICI8bW9kZT4sPG9iamVjdD4sPHBhdGg+IgorbXNnc3RyICI8bW9kbz4sPG9nZ2V0dG8+LDxwZXJjb3Jzbz4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk4Cittc2dpZCAiYWRkIHRoZSBzcGVjaWZpZWQgZW50cnkgdG8gdGhlIGluZGV4IgorbXNnc3RyICJhZ2dpdW5nZSBsYSB2b2NlIHNwZWNpZmljYXRhIGFsbCdpbmRpY2UiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwOAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAiY29udHJhc3NlZ25hIGkgZmlsZSBjb21lIFwibm9uIHNhcmFubm8gbW9kaWZpY2F0aVwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTEKK21zZ2lkICJjbGVhciBhc3N1bWVkLXVuY2hhbmdlZCBiaXQiCittc2dzdHIgInJlaW1wb3N0YSBhIHplcm8gaWwgYml0IFwibm9uIHNhcmFubm8gbW9kaWZpY2F0aVwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTQKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwiaW5kZXgtb25seVwiIgorbXNnc3RyICJjb250cmFzc2VnbmEgaSBmaWxlIGNvbWUgXCJzb2xhbWVudGUgZGEgaW5kaWNpenphcmVcIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE3Cittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgInJlaW1wb3N0YSBhIHplcm8gaWwgYml0IFwic29sYW1lbnRlIGRhIGluZGljaXp6YXJlXCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMAorbXNnaWQgImRvIG5vdCB0b3VjaCBpbmRleC1vbmx5IGVudHJpZXMiCittc2dzdHIgIm5vbiBlc2VndWlyZSBpbCB0b3VjaCBkaSB2b2NpIHByZXNlbnRpIHNvbG8gbmVsbCdpbmRpY2UiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMgorbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisiYWdnaXVuZ2kgc29sbyBhbGwnaW5kaWNlOyBub24gYWdnaXVuZ2VyZSBpbCBjb250ZW51dG8gYWwgZGF0YWJhc2Ugb2dnZXR0aSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI0Cittc2dpZCAicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIKK21zZ3N0ciAicmltdW92aSBpIHBlcmNvcnNpIHNwZWNpZmljYXRpIGFuY2hlIHNlIHByZXNlbnRpIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI2Cittc2dpZCAid2l0aCAtLXN0ZGluOiBpbnB1dCBsaW5lcyBhcmUgdGVybWluYXRlZCBieSBudWxsIGJ5dGVzIgorbXNnc3RyICJjb24gLS1zdGRpbjogbGUgcmlnaGUgZGkgaW5wdXQgc29ubyB0ZXJtaW5hdGUgZGEgYnl0ZSBOVUxMIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjgKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsZWdnaSBsJ2VsZW5jbyBkZWkgcGVyY29yc2kgZGEgYWdnaW9ybmFyZSBkYWxsbyBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDMyCittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgImFnZ2l1bmdpIGxlIHZvY2kgc3BlY2lmaWNhdGUgc3VsbG8gc3RhbmRhcmQgaW5wdXQgYWxsJ2luZGljZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDM2Cittc2dpZCAicmVwb3B1bGF0ZSBzdGFnZXMgIzIgYW5kICMzIGZvciB0aGUgbGlzdGVkIHBhdGhzIgorbXNnc3RyICJyaXBvcG9sYSBsZSBmYXNpIDIgZSAzIHBlciBpIHBlcmNvcnNpIGVsZW5jYXRpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDAKK21zZ2lkICJvbmx5IHVwZGF0ZSBlbnRyaWVzIHRoYXQgZGlmZmVyIGZyb20gSEVBRCIKK21zZ3N0ciAiYWdnaW9ybmEgc29sbyBsZSB2b2NpIGRpZmZlcmVudGkgcmlzcGV0dG8gYWxsJ0hFQUQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NAorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImlnbm9yYSBpIGZpbGUgbWFuY2FudGkgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDcKK21zZ2lkICJyZXBvcnQgYWN0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgInN0YW1wYSBsZSBhemlvbmkgc3VsbG8gc3RhbmRhcmQgb3V0cHV0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDkKK21zZ2lkICIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIKK21zZ3N0ciAiIgorIihwZXIgaSBjb21hbmRpIGFkIGFsdG8gbGl2ZWxsbykgZGltZW50aWNhIGkgY29uZmxpdHRpIG5vbiByaXNvbHRpIHNhbHZhdGkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1MworbXNnaWQgIndyaXRlIGluZGV4IGluIHRoaXMgZm9ybWF0IgorbXNnc3RyICJzY3JpdmkgbCdpbmRpY2UgaW4gcXVlc3RvIGZvcm1hdG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICJhYmlsaXRhIG8gZGlzYWJpbGl0YSBsJ2luZGljZSBzdWRkaXZpc28iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1NworbXNnaWQgImVuYWJsZS9kaXNhYmxlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiYWJpbGl0YS9kaXNhYmlsaXRhIGxhIGNhY2hlIG5vbiB0cmFjY2lhdGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1OQorbXNnaWQgInRlc3QgaWYgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICJ2ZXJpZmljYSBzZSBpbCBmaWxlc3lzdGVtIHN1cHBvcnRhIGxhIGNhY2hlIG5vbiB0cmFjY2lhdGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2MQorbXNnaWQgImVuYWJsZSB1bnRyYWNrZWQgY2FjaGUgd2l0aG91dCB0ZXN0aW5nIHRoZSBmaWxlc3lzdGVtIgorbXNnc3RyICJhYmlsaXRhIGxhIGNhY2hlIG5vbiB0cmFjY2lhdGEgc2VuemEgdGVzdGFyZSBpbCBmaWxlc3lzdGVtIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjMKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGluZGV4IGV2ZW4gaWYgaXMgbm90IGZsYWdnZWQgYXMgY2hhbmdlZCIKK21zZ3N0ciAic2NyaXZpIGwnaW5kaWNlIGFuY2hlIHNlIG5vbiDDqCBzdGF0byBjb250cmFzc2VnbmF0byBjb21lIG1vZGlmaWNhdG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIGZpbGUgc3lzdGVtIG1vbml0b3IiCittc2dzdHIgImFiaWxpdGEgbyBkaXNhYmlsaXRhIGlsIG1vbml0b3IgZGVsIGZpbGVzeXN0ZW0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NworbXNnaWQgIm1hcmsgZmlsZXMgYXMgZnNtb25pdG9yIHZhbGlkIgorbXNnc3RyICJjb250cmFzc2VnbmEgaSBmaWxlIGNvbWUgdmFsaWRpIHJpc3BldHRvIGFsIG1vbml0b3IgZGVsIGZpbGVzeXN0ZW0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA3MAorbXNnaWQgImNsZWFyIGZzbW9uaXRvciB2YWxpZCBiaXQiCittc2dzdHIgIiIKKyJyZWltcG9zdGEgYSB6ZXJvIGlsIGJpdCBcImZpbGUgdmFsaWRpIHJpc3BldHRvIGFsIG1vbml0b3IgZGVsIGZpbGVzeXN0ZW1cIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTczCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZW5hYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IMOoIGltcG9zdGF0byBhIGZhbHNlOyByaW11b3ZpbG8gbyBtb2RpZmljYWxvIHNlIHZ1b2kgIgorInZlcmFtZW50ZSBhYmlsaXRhcmUgbCdpbmRpY2Ugc3VkZGl2aXNvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExODIKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggw6ggaW1wb3N0YXRvIGEgdHJ1ZTsgcmltdW92aWxvIG8gbW9kaWZpY2FsbyBzZSB2dW9pIHZlcmFtZW50ZSAiCisiZGlzYWJpbGl0YXJlIGwnaW5kaWNlIHN1ZGRpdmlzbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk0Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZGlzYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSDDqCBpbXBvc3RhdG8gYSB0cnVlOyByaW11b3ZpbG8gbyBtb2RpZmljYWxvIHNlIHZ1b2kgIgorInZlcmFtZW50ZSBkaXNhYmlsaXRhcmUgbGEgY2FjaGUgbm9uIHRyYWNjaWF0YSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk4Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJDYWNoZSBub24gdHJhY2NpYXRhIGRpc2FiaWxpdGF0YSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjA2Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGVuYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSDDqCBpbXBvc3RhdG8gYSBmYWxzZTsgcmltdW92aWxvIG8gbW9kaWZpY2FsbyBzZSB2dW9pICIKKyJ2ZXJhbWVudGUgYWJpbGl0YXJlIGxhIGNhY2hlIG5vbiB0cmFjY2lhdGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZW5hYmxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiQ2FjaGUgbm9uIHRyYWNjaWF0YSBhYmlsaXRhdGEgcGVyICclcyciCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxOAorbXNnaWQgImNvcmUuZnNtb25pdG9yIGlzIHVuc2V0OyBzZXQgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGVuYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKyJjb3JlLmZzbW9uaXRvciBub24gw6ggaW1wb3N0YXRvOyBpbXBvc3RhbG8gc2UgdnVvaSB2ZXJhbWVudGUgYWJpbGl0YXJlIGlsICIKKyJtb25pdG9yIGRlbCBmaWxlc3lzdGVtIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjIKK21zZ2lkICJmc21vbml0b3IgZW5hYmxlZCIKK21zZ3N0ciAibW9uaXRvciBmaWxlc3lzdGVtIGFiaWxpdGF0byIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjI1Cittc2dpZCAiIgorImNvcmUuZnNtb25pdG9yIGlzIHNldDsgcmVtb3ZlIGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBkaXNhYmxlIGZzbW9uaXRvciIKK21zZ3N0ciAiIgorImNvcmUuZnNtb25pdG9yIMOoIGltcG9zdGF0bzsgcmltdW92aSB0YWxlIGltcG9zdGF6aW9uZSBzZSB2dW9pIHZlcmFtZW50ZSAiCisiZGlzYWJpbGl0YXJlIGlsIG1vbml0b3IgZGVsIGZpbGVzeXN0ZW0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyOQorbXNnaWQgImZzbW9uaXRvciBkaXNhYmxlZCIKK21zZ3N0ciAibW9uaXRvciBmaWxlc3lzdGVtIGRpc2FiaWxpdGF0byIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8b3B6aW9uaT5dIC1kIDxub21lIHJpZmVyaW1lbnRvPiBbPHZlY2NoaW8gdmFsb3JlPl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gICAgPHJlZm5hbWU+IDxuZXctdmFsPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiIgorImdpdCB1cGRhdGUtcmVmIFs8b3B6aW9uaT5dICAgIDxub21lIHJpZmVyaW1lbnRvPiA8bnVvdm8gdmFsb3JlPiBbPHZlY2NoaW8gIgorInZhbG9yZT5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMgorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHppb25pPl0gLS1zdGRpbiBbLXpdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjQKK21zZ2lkICJkZWxldGUgdGhlIHJlZmVyZW5jZSIKK21zZ3N0ciAiZWxpbWluYSBpbCByaWZlcmltZW50byIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY2Cittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgImFnZ2lvcm5hIDxub21lIHJpZmVyaW1lbnRvPiwgbm9uIGNpw7IgYSBjdWkgcHVudGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NworbXNnaWQgInN0ZGluIGhhcyBOVUwtdGVybWluYXRlZCBhcmd1bWVudHMiCittc2dzdHIgImxvIHN0YW5kYXJkIGlucHV0IGhhIGFyZ29tZW50aSB0ZXJtaW5hdGkgZGEgTlVMIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjgKK21zZ2lkICJyZWFkIHVwZGF0ZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGVnZ2kgYWdnaW9ybmFtZW50aSBkYWxsbyBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo3Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE1Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAiYWdnaW9ybmEgaSBmaWxlIGluZm9ybWF6aW9uaSBwYXJ0ZW5kbyBkYSB6ZXJvIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MTEKK21zZ2lkICJnaXQgdXBsb2FkLXBhY2sgWzxvcHRpb25zPl0gPGRpcj4iCittc2dzdHIgImdpdCB1cGxvYWQtcGFjayBbPG9wemlvbmk+XSA8ZGlyZWN0b3J5PiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjIzIHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzoxNworbXNnaWQgInF1aXQgYWZ0ZXIgYSBzaW5nbGUgcmVxdWVzdC9yZXNwb25zZSBleGNoYW5nZSIKK21zZ3N0ciAiZXNjaSBkb3BvIHVuIHNvbG8gc2NhbWJpbyByaWNoaWVzdGEvcmlzcG9zdGEiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyNQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCIKK21zZ3N0ciAiZXNjaSBzdWJpdG8gZG9wbyBsJ2FubnVuY2lvIGluaXppYWxlIGRlbCByaWZlcmltZW50byIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI3Cittc2dpZCAiZG8gbm90IHRyeSA8ZGlyZWN0b3J5Pi8uZ2l0LyBpZiA8ZGlyZWN0b3J5PiBpcyBubyBHaXQgZGlyZWN0b3J5IgorbXNnc3RyICIiCisibm9uIHByb3ZhcmUgYSB1dGlsaXp6YXJlIDxkaXJlY3Rvcnk+Ly5naXQvIHNlIDxkaXJlY3Rvcnk+IG5vbiDDqCB1bmEgIgorImRpcmVjdG9yeSBHaXQiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyOQorbXNnaWQgImludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5IgorbXNnc3RyICJpbnRlcnJvbXBpIGlsIHRyYXNmZXJpbWVudG8gZG9wbyA8bj4gc2Vjb25kaSBkaSBpbmF0dGl2aXTDoCIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6MTkKK21zZ2lkICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo2OAorbXNnaWQgInByaW50IGNvbW1pdCBjb250ZW50cyIKK21zZ3N0ciAic3RhbXBhIGkgY29udGVudXRpIGRlbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY5IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM3Cittc2dpZCAicHJpbnQgcmF3IGdwZyBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICJzdGFtcGEgbCdvdXRwdXQgZ3JlenpvIGRlbGxvIHN0YXRvIGRpIEdQRyIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU1Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY1Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAiZGV0dGFnbGlhdG8iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NworbXNnaWQgInNob3cgc3RhdGlzdGljcyBvbmx5IgorbXNnc3RyICJ2aXN1YWxpenphIHNvbG8gbGUgc3RhdGlzdGljaGUiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjE4Cittc2dpZCAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWc+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD08Zm9ybWF0bz5dIDx0YWc+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozNgorbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAic3RhbXBhIGkgY29udGVudXRpIGRlbCB0YWciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNworbXNnaWQgImdpdCB3b3JrdHJlZSBhZGQgWzxvcHRpb25zPl0gPHBhdGg+IFs8Y29tbWl0LWlzaD5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgYWRkIFs8b3B6aW9uaT5dIDxwZXJjb3Jzbz4gWzxlc3ByZXNzaW9uZSBjb21taXQ+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE4Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B6aW9uaT5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTkKK21zZ2lkICJnaXQgd29ya3RyZWUgbG9jayBbPG9wdGlvbnM+XSA8cGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B6aW9uaT5dIDxwZXJjb3Jzbz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMAorbXNnaWQgImdpdCB3b3JrdHJlZSBtb3ZlIDx3b3JrdHJlZT4gPG5ldy1wYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIG1vdmUgPGFsYmVybyBkaSBsYXZvcm8+IDxudW92byBwZXJjb3Jzbz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMQorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B6aW9uaT5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjIKK21zZ2lkICJnaXQgd29ya3RyZWUgcmVtb3ZlIFs8b3B0aW9ucz5dIDx3b3JrdHJlZT4iCittc2dzdHIgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHppb25pPl0gPGFsYmVybyBkaSBsYXZvcm8+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjMKK21zZ2lkICJnaXQgd29ya3RyZWUgdW5sb2NrIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHVubG9jayA8cGVyY29yc28+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjAgYnVpbHRpbi93b3JrdHJlZS5jOjg5MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlICclcyciCittc2dzdHIgImVsaW1pbmF6aW9uZSBkaSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogbm90IGEgdmFsaWQgZGlyZWN0b3J5IgorbXNnc3RyICJSaW11b3ZvIHdvcmt0cmVlcy8lczogbm9uIMOoIHVuYSBkaXJlY3RvcnkgdmFsaWRhIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiUmltdW92byB3b3JrdHJlZXMvJXM6IGlsIGZpbGUgZ2l0ZGlyIG5vbiBlc2lzdGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MCBidWlsdGluL3dvcmt0cmVlLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICJSaW11b3ZvIHdvcmt0cmVlcy8lczogaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBmaWxlIGdpdGRpciAoJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHNob3J0IHJlYWQgKGV4cGVjdGVkICU8UFJJdU1BWD4gYnl0ZXMsIHJlYWQgIgorIiU8UFJJdU1BWD4pIgorbXNnc3RyICIiCisiUmltdW92byB3b3JrdHJlZXMvJXM6IGxldHRpIG1lbm8gZGF0aSBkZWwgcHJldmlzdG8gKGF0dGVzaSAlPFBSSXVNQVg+Ynl0ZSwgIgorIiU8UFJJdU1BWD4gbGV0dGkpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogaW52YWxpZCBnaXRkaXIgZmlsZSIKK21zZ3N0ciAiUmltdW92byB3b3JrdHJlZXMvJXM6IGZpbGUgZ2l0ZGlyIG5vbiB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICJSaW11b3ZvIHdvcmt0cmVlcy8lczogaWwgZmlsZSBnaXRkaXIgcHVudGEgYSB1biBwZXJjb3JzbyBub24gZXNpc3RlbnRlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY1Cittc2dpZCAicmVwb3J0IHBydW5lZCB3b3JraW5nIHRyZWVzIgorbXNnc3RyICJzZWduYWxhIGdsaSBhbGJlcmkgZGkgbGF2b3JvIGVsaW1pbmF0aSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NworbXNnaWQgImV4cGlyZSB3b3JraW5nIHRyZWVzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICJmYWkgc2NhZGVyZSBnbGkgYWxiZXJpIGRpIGxhdm9ybyBwacO5IHZlY2NoaSBkaSA8dGVtcG8+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiclcycgZXNpc3RlIGdpw6AiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlLWFkZCB3b3JrdHJlZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhZ2dpdW5nZXJlIG51b3ZhbWVudGUgbCdhbGJlcm8gZGkgbGF2b3JvICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBsb2NrZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYgLWYnIHRvIG92ZXJyaWRlLCBvciAndW5sb2NrJyBhbmQgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIiclcycgw6ggdW4gYWxiZXJvIGRpIGxhdm9ybyBtYW5jYW50ZSBtYSBibG9jY2F0bztcbiIKKyJ1c2EgJ2FkZCAtZiAtZicgcGVyIGVzZWd1aXJlIGwnb3ZlcnJpZGUsIG8gJ3VubG9jaycgZSAncHJ1bmUnIG8gJ3JlbW92ZScgcGVyICIKKyJyaW11b3ZlcmxvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgYWxyZWFkeSByZWdpc3RlcmVkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mJyB0byBvdmVycmlkZSwgb3IgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIiclcycgw6ggdW4gYWxiZXJvIGRpIGxhdm9ybyBtYW5jYW50ZSBtYSBnacOgIHJlZ2lzdHJhdG87XG4iCisidXNhICdhZGQgLWYnIHBlciBlc2VndWlyZSBsJ292ZXJyaWRlLCBvICdwcnVuZScgbyAncmVtb3ZlJyBwZXIgcmltdW92ZXJsbyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgbGEgZGlyZWN0b3J5IGRpICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzIgYnVpbHRpbi93b3JrdHJlZS5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKG5ldyBicmFuY2ggJyVzJykiCittc2dzdHIgIlByZXBhcmF6aW9uZSBkZWxsJ2FsYmVybyBkaSBsYXZvcm8gaW4gY29yc28gKG51b3ZvIGJyYW5jaCAnJXMnKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKHJlc2V0dGluZyBicmFuY2ggJyVzJzsgd2FzIGF0ICVzKSIKK21zZ3N0ciAiIgorIlByZXBhcmF6aW9uZSBkZWxsJ2FsYmVybyBkaSBsYXZvcm8gaW4gY29yc28gKHJlaW1wb3N0byBpbCBicmFuY2ggJyVzJzsgZXJhIGEgIgorIiVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGNoZWNraW5nIG91dCAnJXMnKSIKK21zZ3N0ciAiUHJlcGFyYXppb25lIGRlbGwnYWxiZXJvIGRpIGxhdm9ybyBpbiBjb3JzbyAoY2hlY2tvdXQgZGkgJyVzJykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChkZXRhY2hlZCBIRUFEICVzKSIKK21zZ3N0ciAiUHJlcGFyYXppb25lIGRlbGwnYWxiZXJvIGRpIGxhdm9ybyBpbiBjb3JzbyAoSEVBRCBzY29sbGVnYXRvICVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5MAorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGV2ZW4gaWYgYWxyZWFkeSBjaGVja2VkIG91dCBpbiBvdGhlciB3b3JrdHJlZSIKK21zZ3N0ciAiIgorImVzZWd1aSBpbCBjaGVja291dCBkaSA8YnJhbmNoPiBhbmNoZSBzZSB0YWxlIG9wZXJhemlvbmUgw6ggc3RhdGEgZXNlZ3VpdGEgaW4gIgorInVuIGFsdHJvIGFsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTMKK21zZ2lkICJjcmVhdGUgYSBuZXcgYnJhbmNoIgorbXNnc3RyICJjcmVhIHVuIG51b3ZvIGJyYW5jaCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5NQorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAiY3JlYSBvIHJlaW1wb3N0YSB1biBicmFuY2giCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTcKK21zZ2lkICJwb3B1bGF0ZSB0aGUgbmV3IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAicG9wb2xhIGlsIG51b3ZvIGFsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTgKK21zZ2lkICJrZWVwIHRoZSBuZXcgd29ya2luZyB0cmVlIGxvY2tlZCIKK21zZ3N0ciAibWFudGllbmkgYmxvY2NhdG8gaWwgbnVvdm8gYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwMQorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LWJyYW5jaCgxKSkiCittc2dzdHIgImltcG9zdGEgbGEgbW9kYWxpdMOgIHRyYWNraW5nICh2ZWRpIGdpdC1icmFuY2goMSkpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA0Cittc2dpZCAidHJ5IHRvIG1hdGNoIHRoZSBuZXcgYnJhbmNoIG5hbWUgd2l0aCBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJ0ZW50YSBkaSBjZXJjYXJlIHVuYSBjb3JyaXNwb25kZW56YSBmcmEgaWwgbm9tZSBkZWwgbnVvdm8gYnJhbmNoIGUgdW4gYnJhbmNoICIKKyJyZW1vdG8gZGEgdHJhY2NpYXJlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTEyCittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAibGUgb3B6aW9uaSAtYiwgLUIgZSAtLWRldGFjaCBzb25vIG11dHVhbG1lbnRlIGVzY2x1c2l2ZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjU3MworbXNnaWQgIi0tW25vLV10cmFjayBjYW4gb25seSBiZSB1c2VkIGlmIGEgbmV3IGJyYW5jaCBpcyBjcmVhdGVkIgorbXNnc3RyICIiCisibCdvcHppb25lIC0tW25vLV10cmFjayBwdcOyIGVzc2VyZSB1c2F0YSBzb2xvIHNlIHZpZW5lIGNyZWF0byB1biBudW92byBicmFuY2giCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NzMKK21zZ2lkICJyZWFzb24gZm9yIGxvY2tpbmciCittc2dzdHIgIm1vdGl2byBkaSBibG9jY28iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2ODUgYnVpbHRpbi93b3JrdHJlZS5jOjcxOCBidWlsdGluL3dvcmt0cmVlLmM6NzkyCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIG5vbiDDqCB1biBhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njg3IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjAKK21zZ2lkICJUaGUgbWFpbiB3b3JraW5nIHRyZWUgY2Fubm90IGJlIGxvY2tlZCBvciB1bmxvY2tlZCIKK21zZ3N0ciAiTm9uIMOoIHBvc3NpYmlsZSBibG9jY2FyZSBvIHNibG9jY2FyZSBsJ2FsYmVybyBkaSBsYXZvcm8gcHJpbmNpcGFsZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkLCByZWFzb246ICVzIgorbXNnc3RyICInJXMnIMOoIGdpw6AgYmxvY2NhdG8gcGVyIHF1ZXN0byBtb3Rpdm86ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiCittc2dzdHIgIiclcycgw6ggZ2nDoCBibG9jY2F0byIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBsb2NrZWQiCittc2dzdHIgIiclcycgbm9uIMOoIGJsb2NjYXRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzYzCittc2dpZCAid29ya2luZyB0cmVlcyBjb250YWluaW5nIHN1Ym1vZHVsZXMgY2Fubm90IGJlIG1vdmVkIG9yIHJlbW92ZWQiCittc2dzdHIgIiIKKyJnbGkgYWxiZXJpIGRpIGxhdm9ybyBjb250ZW5lbnRpIHNvdHRvbW9kdWxpIG5vbiBwb3Nzb25vIGVzc2VyZSBzcG9zdGF0aSBvICIKKyJyaW1vc3NpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzcxCittc2dpZCAiZm9yY2UgbW92ZSBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiZm9yemEgbG8gc3Bvc3RhbWVudG8gYW5jaGUgc2UgbCdhbGJlcm8gZGkgbGF2b3JvIMOoIHNwb3JjbyBvIGJsb2NjYXRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzk0IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIMOoIHVuIGFsYmVybyBkaSBsYXZvcm8gcHJpbmNpcGFsZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmlndXJlIG91dCBkZXN0aW5hdGlvbiBuYW1lIGZyb20gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZGV0ZXJtaW5hcmUgaWwgbm9tZSBkZXN0aW5hemlvbmUgZGEgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YXJnZXQgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAibGEgZGVzdGluYXppb25lICclcycgZXNpc3RlIGdpw6AiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBzcG9zdGFyZSB1biBhbGJlcm8gZGkgbGF2b3JvIGJsb2NjYXRvLCBtb3RpdmF6aW9uZSBibG9jY286ICVzXG4iCisidXNhICdtb3ZlIC1mIC1mJyBwZXIgZXNlZ3Vpcm5lIGwnb3ZlcnJpZGUgbyBzYmxvY2NhbG8gcHJpbWEgZGkgZXNlZ3VpcmUgIgorImwnb3BlcmF6aW9uZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgxNQorbXNnaWQgIiIKKyJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWU7XG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBzcG9zdGFyZSB1biBhbGJlcm8gZGkgbGF2b3JvIGJsb2NjYXRvO1xuIgorInVzYSAnbW92ZSAtZiAtZicgcGVyIGVzZWd1aXJuZSBsJ292ZXJyaWRlIG8gc2Jsb2NjYWxvIHByaW1hIGRpIGVzZWd1aXJlICIKKyJsJ29wZXJhemlvbmUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCBtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgInZhbGlkYXppb25lIG5vbiByaXVzY2l0YSwgaW1wb3NzaWJpbGUgc3Bvc3RhcmUgbCdhbGJlcm8gZGkgbGF2b3JvOiAlcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbW92ZSAnJXMnIHRvICclcyciCittc2dzdHIgInNwb3N0YW1lbnRvIGRpICclcycgaW4gJyVzJyBub24gcml1c2NpdG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJyIKK21zZ3N0ciAiZXNlY3V6aW9uZSBkaSAnZ2l0IHN0YXR1cycgc3UgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjb250YWlucyBtb2RpZmllZCBvciB1bnRyYWNrZWQgZmlsZXMsIHVzZSAtLWZvcmNlIHRvIGRlbGV0ZSBpdCIKK21zZ3N0ciAiIgorIiclcycgY29udGllbmUgZmlsZSBtb2RpZmljYXRpIG8gbm9uIHRyYWNjaWF0aSwgdXNhIC0tZm9yY2UgcGVyIGVsaW1pbmFybG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJywgY29kZSAlZCIKK21zZ3N0ciAiZXNlY3V6aW9uZSBkaSAnZ2l0IHN0YXR1cycgc3UgJyVzJyBub24gcml1c2NpdGEsIGNvZGljZSAlZCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkwMworbXNnaWQgImZvcmNlIHJlbW92YWwgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgImZvcnphIGxhIHJpbW96aW9uZSBhbmNoZSBzZSBsJ2FsYmVybyBkaSBsYXZvcm8gw6ggc3BvcmNvIG8gYmxvY2NhdG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXNcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgcmltdW92ZXJlIHVuIGFsYmVybyBkaSBsYXZvcm8gYmxvY2NhdG8sIG1vdGl2YXppb25lIGJsb2NjbzogJXNcbiIKKyJ1c2EgJ3JlbW92ZSAtZiAtZicgcGVyIGVzZWd1aXJuZSBsJ292ZXJyaWRlIG8gc2Jsb2NjYWxvIHByaW1hIGRpIGVzZWd1aXJlICIKKyJsJ29wZXJhemlvbmUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjgKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWU7XG4iCisidXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIHJpbXVvdmVyZSB1biBhbGJlcm8gZGkgbGF2b3JvIGJsb2NjYXRvO1xuIgorInVzYSAncmVtb3ZlIC1mIC1mJyBwZXIgZXNlZ3Vpcm5lIGwnb3ZlcnJpZGUgbyBzYmxvY2NhbG8gcHJpbWEgZGkgZXNlZ3VpcmUgIgorImwnb3BlcmF6aW9uZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IHJlbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICJ2YWxpZGF6aW9uZSBub24gcml1c2NpdGEsIGltcG9zc2liaWxlIHJpbXVvdmVyZSBsJ2FsYmVybyBkaSBsYXZvcm86ICVzIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoxNQorbXNnaWQgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpc3NvPi9dIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOAorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiPHByZWZpc3NvPi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI5Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICJzY3JpdmkgbCdvZ2dldHRvIGFsYmVybyBwZXIgdW5hIHNvdHRvZGlyZWN0b3J5IDxwcmVmaXNzbz4iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjMxCittc2dpZCAib25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyIKK21zZ3N0ciAidXRpbGUgc29sbyBwZXIgaWwgZGVidWciCisKKyM6IGZhc3QtaW1wb3J0LmM6MzEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCAnbWFyaycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICJBdHRlc28gY29tYW5kbyAnbWFyaycsIHJpY2V2dXRvICVzIgorCisjOiBmYXN0LWltcG9ydC5jOjMxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgJ3RvJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgIkF0dGVzbyBjb21hbmRvICd0bycsIHJpY2V2dXRvICVzIgorCisjOiBmYXN0LWltcG9ydC5jOjMyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmVhdHVyZSAnJXMnIGZvcmJpZGRlbiBpbiBpbnB1dCB3aXRob3V0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIgorbXNnc3RyICJmdW56aW9uYWxpdMOgICclcycgdmlldGF0YSBuZWxsJ2lucHV0IHNlbnphIC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwZXJtaXNzaW9ucyBvbiB5b3VyIHNvY2tldCBkaXJlY3RvcnkgYXJlIHRvbyBsb29zZTsgb3RoZXJcbiIKKyJ1c2VycyBtYXkgYmUgYWJsZSB0byByZWFkIHlvdXIgY2FjaGVkIGNyZWRlbnRpYWxzLiBDb25zaWRlciBydW5uaW5nOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKK21zZ3N0ciAiIgorIkkgcGVybWVzc2kgc3VsbGEgZGlyZWN0b3J5IGRlbCBzb2NrZXQgc29ubyB0cm9wcG8gbGFzY2hpOyBhbHRyaVxuIgorInV0ZW50aSBwb3RyZWJiZXJvIGVzc2VyZSBpbiBncmFkbyBkaSBsZWdnZXJlIGxlIGNyZWRlbnppYWxpIG5lbGxhXG4iCisiY2FjaGUuIFZhbHV0YSBkaSBlc2VndWlyZTpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjI3MgorbXNnaWQgInByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyB0byBzdGRlcnIiCittc2dzdHIgInN0YW1wYSBpIG1lc3NhZ2dpIGRpIGRlYnVnIHN1bGxvIHN0YW5kYXJkIGVycm9yIgorCisjOiB0L2hlbHBlci90ZXN0LXJlYWNoLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBpcyBub3QgbWFya2VkIHJlYWNoYWJsZSIKK21zZ3N0ciAiaWwgY29tbWl0ICVzIG5vbiDDqCBjb250cmFzc2VnbmF0byBjb21lIHJhZ2dpdW5naWJpbGUiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNjIKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgInRyb3BwaSBjb21taXQgY29udHJhc3NlZ25hdGkgY29tZSByYWdnaXVuZ2liaWxpIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6NworbXNnaWQgInRlc3QtdG9vbCBzZXJ2ZS12MiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAidGVzdC10b29sIHNlcnZlLXYyIFs8b3B6aW9uaT5dIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTkKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGFkdmVydGlzaW5nIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAiZXNjaSBzdWJpdG8gZG9wbyBhdmVyIGFubnVuY2lhdG8gbGUgZnVuemlvbmFsaXTDoCIKKworIzogZ2l0LmM6MjcKK21zZ2lkICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8cGF0aD5dIFstYyA8bmFtZT49PHZhbHVlPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PHBhdGg+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PHBhdGg+XSBbLS13b3JrLXRyZWU9PHBhdGg+XSBbLS1uYW1lc3BhY2U9PG5hbWU+XVxuIgorIiAgICAgICAgICAgPGNvbW1hbmQ+IFs8YXJncz5dIgorbXNnc3RyICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8cGVyY29yc28+XSBbLWMgPG5vbWU+PTx2YWxvcmU+XVxuIgorIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08cGVyY29yc28+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby0iCisicGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tIgorImJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPTxwZXJjb3Jzbz5dIFstLXdvcmstdHJlZT08cGVyY29yc28+XSBbLS0iCisibmFtZXNwYWNlPTxub21lPl1cbiIKKyIgICAgICAgICAgIDxjb21hbmRvPiBbPGFyZ29tZW50aT5dIgorCisjOiBnaXQuYzozNAorbXNnaWQgIiIKKyInZ2l0IGhlbHAgLWEnIGFuZCAnZ2l0IGhlbHAgLWcnIGxpc3QgYXZhaWxhYmxlIHN1YmNvbW1hbmRzIGFuZCBzb21lXG4iCisiY29uY2VwdCBndWlkZXMuIFNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyBvciAnZ2l0IGhlbHAgPGNvbmNlcHQ+J1xuIgorInRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIG9yIGNvbmNlcHQuXG4iCisiU2VlICdnaXQgaGVscCBnaXQnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIidnaXQgaGVscCAtYScgZSAnZ2l0IGhlbHAgLWcnIGVsZW5jYW5vIGkgc290dG9jb21hbmRpIGRpc3BvbmliaWxpIGVcbiIKKyJhbGN1bmUgZ3VpZGUgY29uY2V0dHVhbGkuIFZlZGkgJ2dpdCBoZWxwIDxjb21hbmRvPicgbyAnZ2l0IGhlbHAgPGNvbmNldHRvPidcbiIKKyJwZXIgbGVnZ2VyZSB1bHRlcmlvcmkgaW5mb3JtYXppb25pIHN1IHVuIHNvdHRvY29tYW5kbyBvIHN1IHVuIGNvbmNldHRvXG4iCisic3BlY2lmaWNpLlxuIgorIlZlZGkgJ2dpdCBoZWxwIGdpdCcgcGVyIHVuYSBwYW5vcmFtaWNhIGRlbCBzaXN0ZW1hLiIKKworIzogZ2l0LmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS1naXQtZGlyXG4iCittc2dzdHIgIm5lc3N1bmEgZGlyZWN0b3J5IHNwZWNpZmljYXRhIHBlciAtLWdpdC1kaXJcbiIKKworIzogZ2l0LmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5hbWVzcGFjZSBnaXZlbiBmb3IgLS1uYW1lc3BhY2VcbiIKK21zZ3N0ciAibmVzc3VubyBzcGF6aW8gZGVpIG5vbWkgc3BlY2lmaWNhdG8gcGVyIC0tbmFtZXNwYWNlXG4iCisKKyM6IGdpdC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgIm5lc3N1bmEgZGlyZWN0b3J5IHNwZWNpZmljYXRhIHBlciAtLXdvcmstdHJlZVxuIgorCisjOiBnaXQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJlZml4IGdpdmVuIGZvciAtLXN1cGVyLXByZWZpeFxuIgorbXNnc3RyICJuZXNzdW4gcHJlZmlzc28gc3BlY2lmaWNhdG8gcGVyIC0tc3VwZXItcHJlZml4XG4iCisKKyM6IGdpdC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICItYyBleHBlY3RzIGEgY29uZmlndXJhdGlvbiBzdHJpbmdcbiIKK21zZ3N0ciAiLWM6IGF0dGVzYSBzdHJpbmdhIGRpIGNvbmZpZ3VyYXppb25lXG4iCisKKyM6IGdpdC5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC1DXG4iCittc2dzdHIgIm5lc3N1bmEgZGlyZWN0b3J5IHNwZWNpZmljYXRhIHBlciAtQ1xuIgorCisjOiBnaXQuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgIm9wemlvbmUgc2Nvbm9zY2l1dGE6ICVzXG4iCisKKyM6IGdpdC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgYWxpYXMgJyVzJzogJyVzJyIKK21zZ3N0ciAiZHVyYW50ZSBsJ2VzcGFuc2lvbmUgZGVsbCdhbGlhcyAnJXMnOiAnJXMnIgorCisjOiBnaXQuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFsaWFzICclcycgY2hhbmdlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4iCisiWW91IGNhbiB1c2UgJyFnaXQnIGluIHRoZSBhbGlhcyB0byBkbyB0aGlzIgorbXNnc3RyICIiCisibCdhbGlhcyAnJXMnIG1vZGlmaWNhIGxlIHZhcmlhYmlsaSBkJ2FtYmllbnRlLlxuIgorIlB1b2kgdXNhcmUgJyFnaXQnIG5lbGwnYWxpYXMgcGVyIGZhcmxvIgorCisjOiBnaXQuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgYWxpYXMgZm9yICVzIgorbXNnc3RyICJhbGlhcyB2dW90byBwZXIgJXMiCisKKyM6IGdpdC5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgYWxpYXM6ICVzIgorbXNnc3RyICJhbGlhcyByaWNvcnNpdm86ICVzIgorCisjOiBnaXQuYzo0NTkKK21zZ2lkICJ3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiZXJyb3JlIGRpIHNjcml0dHVyYSBzdWxsbyBzdGFuZGFyZCBvdXRwdXQiCisKKyM6IGdpdC5jOjQ2MQorbXNnaWQgInVua25vd24gd3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgImVycm9yZSBkaSBzY3JpdHR1cmEgc2Nvbm9zY2l1dG8gc3VsbG8gc3RhbmRhcmQgb3V0cHV0IgorCisjOiBnaXQuYzo0NjMKK21zZ2lkICJjbG9zZSBmYWlsZWQgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJjaGl1c3VyYSBkZWxsbyBzdGFuZGFyZCBvdXRwdXQgbm9uIHJpdXNjaXRhIgorCisjOiBnaXQuYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgbG9vcCBkZXRlY3RlZDogZXhwYW5zaW9uIG9mICclcycgZG9lcyBub3QgdGVybWluYXRlOiVzIgorbXNnc3RyICJyaWxldmF0byBjaWNsbyBhbGlhczogbCdlc3BhbnNpb25lIGRpICclcycgbm9uIHRlcm1pbmE6JXMiCisKKyM6IGdpdC5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlICVzIGFzIGEgYnVpbHRpbiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZ2VzdGlyZSAlcyBjb21lIGNvbWFuZG8gaW5jb3Jwb3JhdG8iCisKKyM6IGdpdC5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidXNhZ2U6ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJ1c286ICVzXG4iCisiXG4iCisKKyM6IGdpdC5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBhbnNpb24gb2YgYWxpYXMgJyVzJyBmYWlsZWQ7ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmRcbiIKK21zZ3N0ciAiZXNwYW5zaW9uZSBkZWxsJ2FsaWFzICclcycgbm9uIHJpdXNjaXRhOyAnJXMnIG5vbiDDqCB1biBjb21hbmRvIEdpdFxuIgorCisjOiBnaXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iCittc2dzdHIgImVzZWN1emlvbmUgZGVsIGNvbWFuZG8gJyVzJyBub24gcml1c2NpdGE6ICVzXG4iCisKKyM6IGh0dHAuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibmVnYXRpdmUgdmFsdWUgZm9yIGh0dHAucG9zdGJ1ZmZlcjsgZGVmYXVsdGluZyB0byAlZCIKK21zZ3N0ciAidmFsb3JlIG5lZ2F0aXZvIHBlciBodHRwLnBvc3RidWZmZXI7IHVzbyBsJ2ltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSAlZCIKKworIzogaHR0cC5jOjM5OQorbXNnaWQgIkRlbGVnYXRpb24gY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMjIuMCIKK21zZ3N0ciAiSWwgY29udHJvbGxvIGRlbGVnYXppb25lIG5vbiDDqCBzdXBwb3J0YXRvIGNvbiBjVVJMIDwgNy4yMi4wIgorCisjOiBodHRwLmM6NDA4Cittc2dpZCAiUHVibGljIGtleSBwaW5uaW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy40NC4wIgorbXNnc3RyICJJbCBwaW5uaW5nIGRlbGxlIGNoaWF2aSBwdWJibGljaGUgbm9uIMOoIHN1cHBvcnRhdG8gY29uIGNVUkwgPCA3LjQ0LjAiCisKKyM6IGh0dHAuYzo4NzYKK21zZ2lkICJDVVJMU1NMT1BUX05PX1JFVk9LRSBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiQ1VSTFNTTE9QVF9OT19SRVZPS0Ugbm9uIMOoIHN1cHBvcnRhdG8gY29uIGNVUkwgPCA3LjQ0LjAiCisKKyM6IGh0dHAuYzo5NDkKK21zZ2lkICJQcm90b2NvbCByZXN0cmljdGlvbnMgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjE5LjQiCittc2dzdHIgIkxlIHJlc3RyaXppb25pIHByb3RvY29sbG8gbm9uIHNvbm8gc3VwcG9ydGF0ZSBjb24gY1VSTCA8IDcuMTkuNCIKKworIzogaHR0cC5jOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgU1NMIGJhY2tlbmQgJyVzJy4gU3VwcG9ydGVkIFNTTCBiYWNrZW5kczoiCittc2dzdHIgIkJhY2tlbmQgU1NMICclcycgbm9uIHN1cHBvcnRhdG8uIEJhY2tlbmQgU1NMIHN1cHBvcnRhdGk6IgorCisjOiBodHRwLmM6MTA5MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGNVUkwgd2FzIGJ1aWx0IHdpdGhvdXQgU1NMIGJhY2tlbmRzIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgaW1wb3N0YXJlIGlsIGJhY2tlbmQgU1NMIGEgJyVzJzogY1VSTCDDqCBzdGF0byBjb21waWxhdG8gc2VuemEgIgorImJhY2tlbmQgU1NMIgorCisjOiBodHRwLmM6MTA5NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGFscmVhZHkgc2V0IgorbXNnc3RyICJJbXBvc3NpYmlsZSBpbXBvc3RhcmUgaWwgYmFja2VuZCBTU0wgYSAnJXMnOiBnacOgIGltcG9zdGF0byIKKworIzogaHR0cC5jOjE5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byB1cGRhdGUgdXJsIGJhc2UgZnJvbSByZWRpcmVjdGlvbjpcbiIKKyIgIGFza2VkIGZvcjogJXNcbiIKKyIgICByZWRpcmVjdDogJXMiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGwnVVJMIGRpIGJhc2UgZGFsbGEgcmVkaXJlemlvbmU6XG4iCisiICByaWNoaWVzdGE6ICVzXG4iCisiICAgcmVkaXJlY3Q6ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHF1b3RpbmcgaW4gcHVzaC1vcHRpb24gdmFsdWU6ICclcyciCittc2dzdHIgInZpcmdvbGV0dGUgbm9uIHZhbGlkZSBuZWwgdmFsb3JlIHB1c2gtb3B0aW9uOiAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlc2luZm8vcmVmcyBub3QgdmFsaWQ6IGlzIHRoaXMgYSBnaXQgcmVwb3NpdG9yeT8iCittc2dzdHIgIiVzaW5mby9yZWZzIG5vbiB2YWxpZG86IMOoIHVuIHJlcG9zaXRvcnkgR2l0PyIKKworIzogcmVtb3RlLWN1cmwuYzozNjQKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZXhwZWN0ZWQgc2VydmljZSwgZ290IGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiIgorInJpc3Bvc3RhIGRlbCBzZXJ2ZXIgbm9uIHZhbGlkYTsgYXR0ZXNvIHNlcnZpemlvLCByaWNldnV0byBwYWNjaGV0dG8gZmx1c2giCisKKyM6IHJlbW90ZS1jdXJsLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VydmVyIHJlc3BvbnNlOyBnb3QgJyVzJyIKK21zZ3N0ciAicmlzcG9zdGEgZGVsIHNlcnZlciBub24gdmFsaWRhOyByaWNldnV0byAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgbm90IGZvdW5kIgorbXNnc3RyICJyZXBvc2l0b3J5ICclcycgbm9uIHRyb3ZhdG8iCisKKyM6IHJlbW90ZS1jdXJsLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiQXV0ZW50aWNhemlvbmUgbm9uIHJpdXNjaXRhIHBlciAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhY2NlZGVyZSBhICclcyc6ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyB0byAlcyIKK21zZ3N0ciAicmVkaXJlemlvbmUgYSAlcyBpbiBjb3JzbyIKKworIzogcmVtb3RlLWN1cmwuYzo1OTMKK21zZ2lkICJzaG91bGRuJ3QgaGF2ZSBFT0Ygd2hlbiBub3QgZ2VudGxlIG9uIEVPRiIKK21zZ3N0ciAiIgorIm5vbiBkb3ZyZWJiZSBlc3NlcmNpIHVuIHBhY2NoZXR0byBmaW5lIGZpbGUgc2Ugbm9uIHNpIMOoIGFjY29tb2RhbnRpIGNvbiAiCisicXVlc3RpIHVsdGltaSIKKworIzogcmVtb3RlLWN1cmwuYzo2NzMKK21zZ2lkICJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSByaXRvcm5hcmUgYSB1biBwdW50byBwcmVjZWRlbnRlIGRlaSBkYXRpIFBPU1QgUlBDIC0gcHJvdmEgYWQgIgorImF1bWVudGFyZSBpbCB2YWxvcmUgZGkgaHR0cC5wb3N0QnVmZmVyIgorCisjOiByZW1vdGUtY3VybC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJSUEMgZmFpbGVkOyAlcyIKK21zZ3N0ciAiUlBDIG5vbiByaXVzY2l0YTsgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6NzczCittc2dpZCAiY2Fubm90IGhhbmRsZSBwdXNoZXMgdGhpcyBiaWciCittc2dzdHIgImltcG9zc2liaWxlIGdlc3RpcmUgcHVzaCBjb3PDrCBncmFuZGkiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZGVmbGF0ZSBlcnJvciAlZCIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGRlZmxhdGUgZGVsbGEgcmljaGllc3RhOyBlcnJvcmUgZGVmbGF0ZSB6bGliICVkIgorCisjOiByZW1vdGUtY3VybC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGVuZCBlcnJvciAlZCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgZGVmbGF0ZSBkZWxsYSByaWNoaWVzdGE7IGVycm9yZSBmaW5lIHpsaWIgJWQiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTAyMworbXNnaWQgImR1bWIgaHR0cCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNhcGFiaWxpdGllcyIKK21zZ3N0ciAiaWwgdHJhc3BvcnRvIGh0dHAgc3R1cGlkbyBub24gc3VwcG9ydGEgbGUgZnVuemlvbmFsaXTDoCBzaGFsbG93IgorCisjOiByZW1vdGUtY3VybC5jOjEwMzgKK21zZ2lkICJmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJyZWN1cGVybyBub24gcml1c2NpdG8uIgorCisjOiByZW1vdGUtY3VybC5jOjEwODYKK21zZ2lkICJjYW5ub3QgZmV0Y2ggYnkgc2hhMSBvdmVyIHNtYXJ0IGh0dHAiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSByZWN1cGVyYXJlIGkgZGF0aSBpbiBiYXNlIGFsbG8gU0hBMSBjb24gaWwgdHJhc3BvcnRvIEhUVFAgIgorImludGVsbGlnZW50ZSIKKworIzogcmVtb3RlLWN1cmwuYzoxMTMwIHJlbW90ZS1jdXJsLmM6MTEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogZXhwZWN0ZWQgc2hhL3JlZiwgZ290ICclcyciCittc2dzdHIgImVycm9yZSBwcm90b2NvbGxvOiBhdHRlc28gU0hBL3JpZmVyaW1lbnRvLCByaWNldnV0byAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjExNDggcmVtb3RlLWN1cmwuYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiCittc2dzdHIgImlsIHRyYXNwb3J0byBIVFRQIG5vbiBzdXBwb3J0YSAlcyIKKworIzogcmVtb3RlLWN1cmwuYzoxMTg0Cittc2dpZCAiZ2l0LWh0dHAtcHVzaCBmYWlsZWQiCittc2dzdHIgImdpdC1odHRwLXB1c2ggbm9uIHJpdXNjaXRvIgorCisjOiByZW1vdGUtY3VybC5jOjEzNjkKK21zZ2lkICJyZW1vdGUtY3VybDogdXNhZ2U6IGdpdCByZW1vdGUtY3VybCA8cmVtb3RlPiBbPHVybD5dIgorbXNnc3RyICJyZW1vdGUtY3VybDogdXNvOiBnaXQgcmVtb3RlLWN1cmwgPHJlbW90bz4gWzxVUkw+XSIKKworIzogcmVtb3RlLWN1cmwuYzoxNDAxCittc2dpZCAicmVtb3RlLWN1cmw6IGVycm9yIHJlYWRpbmcgY29tbWFuZCBzdHJlYW0gZnJvbSBnaXQiCittc2dzdHIgInJlbW90ZS1jdXJsOiBlcnJvcmUgZHVyYW50ZSBsYSBsZXR0dXJhIGRlbCBmbHVzc28gZGVpIGNvbWFuZGkgZGEgR2l0IgorCisjOiByZW1vdGUtY3VybC5jOjE0MDgKK21zZ2lkICJyZW1vdGUtY3VybDogZmV0Y2ggYXR0ZW1wdGVkIHdpdGhvdXQgYSBsb2NhbCByZXBvIgorbXNnc3RyICJyZW1vdGUtY3VybDogdGVudGF0byB1biBmZXRjaCBzZW56YSB1biByZXBvc2l0b3J5IGxvY2FsZSIKKworIzogcmVtb3RlLWN1cmwuYzoxNDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS1jdXJsOiB1bmtub3duIGNvbW1hbmQgJyVzJyBmcm9tIGdpdCIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IHJpY2V2dXRvIGNvbWFuZG8gc2Nvbm9zY2l1dG8gJyVzJyBkYSBHaXQiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oOjg1Cittc2dpZCAiYXJncyIKK21zZ3N0ciAiYXJnb21lbnRpIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NgorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgImZpbHRyYWdnaW8gb2dnZXR0aSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE4MworbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICJkYXRhLXNjYWRlbnphIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTk3Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICJuby1vcCAocmV0cm9jb21wYXRpYmlsaXTDoCkiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMDkKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgInZpc3VhbGl6emEgcGnDuSBkZXR0YWdsaSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxMQorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgInZpc3VhbGl6emEgbWVubyBkZXR0YWdsaSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxNworbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICJ1c2EgPG4+IGNpZnJlIHBlciBtb3N0cmFyZSBnbGkgaGFzaCBTSEEtMSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzNgorbXNnaWQgImhvdyB0byBzdHJpcCBzcGFjZXMgYW5kICNjb21tZW50cyBmcm9tIG1lc3NhZ2UiCittc2dzdHIgImNvbWUgcmltdW92ZXJlIGdsaSBzcGF6aSBlIGkgI2NvbW1lbnRpIGRhbCBtZXNzYWdnaW8iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzcKK21zZ2lkICJyZWFkIHBhdGhzcGVjIGZyb20gZmlsZSIKK21zZ3N0ciAibGVnZ2kgZ2xpIHNwZWNpZmljYXRvcmkgcGVyY29yc28gZGEgdW4gZmlsZSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzOAorbXNnaWQgIiIKKyJ3aXRoIC0tcGF0aHNwZWMtZnJvbS1maWxlLCBwYXRoc3BlYyBlbGVtZW50cyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorImNvbiAtLXBhdGhzcGVjLWZyb20tZmlsZSBnbGkgZWxlbWVudGkgc3BlY2lmaWNhdG9yaSBwZXJjb3JzbyBzb25vIHNlcGFyYXRpICIKKyJkYSB1biBjYXJhdHRlcmUgTlVMIgorCisjOiByZWYtZmlsdGVyLmg6MTAxCittc2dpZCAia2V5IgorbXNnc3RyICJjaGlhdmUiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgIm5vbWUgY2FtcG8gaW4gYmFzZSBhIGN1aSBvcmRpbmFyZSIKKworIzogcmVyZXJlLmg6NDQKK21zZ2lkICJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiCittc2dzdHIgIiIKKyJhZ2dpb3JuYSBsJ2luZGljZSBjb24gbGEgdGVjbmljYSBkaSByaXNvbHV6aW9uZSBjb25mbGl0dGkgcml1dGlsaXp6YXRhIHNlICIKKyJwb3NzaWJpbGUiCisKKyM6IHd0LXN0YXR1cy5oOjY3Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBhdCAiCittc2dzdHIgIkhFQUQgc2NvbGxlZ2F0byBzdSAiCisKKyM6IHd0LXN0YXR1cy5oOjY4Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBmcm9tICIKK21zZ3N0ciAiSEVBRCBzY29sbGVnYXRvIGRhICIKKworIzogY29tbWFuZC1saXN0Lmg6NTAKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkFnZ2l1bmdlIGkgY29udGVudXRpIGRlbCBmaWxlIGFsbCdpbmRpY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUxCittc2dpZCAiQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBmcm9tIGEgbWFpbGJveCIKK21zZ3N0ciAiQXBwbGljYSB1bmEgc2VyaWUgZGkgcGF0Y2ggZGEgdW5hIGNhc2VsbGEgZGkgcG9zdGEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUyCittc2dpZCAiQW5ub3RhdGUgZmlsZSBsaW5lcyB3aXRoIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiQW5ub3RhIGxlIHJpZ2hlIGRlaSBmaWxlIGNvbiBsZSBpbmZvcm1hemlvbmkgc3VpIGNvbW1pdCIKKworIzogY29tbWFuZC1saXN0Lmg6NTMKK21zZ2lkICJBcHBseSBhIHBhdGNoIHRvIGZpbGVzIGFuZC9vciB0byB0aGUgaW5kZXgiCittc2dzdHIgIkFwcGxpY2EgdW5hIHBhdGNoIGFpIGZpbGUgZS9vIGFsbCdpbmRpY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU0Cittc2dpZCAiSW1wb3J0IGEgR05VIEFyY2ggcmVwb3NpdG9yeSBpbnRvIEdpdCIKK21zZ3N0ciAiSW1wb3J0YSB1biByZXBvc2l0b3J5IEdOVSBBcmNoIGluIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6NTUKK21zZ2lkICJDcmVhdGUgYW4gYXJjaGl2ZSBvZiBmaWxlcyBmcm9tIGEgbmFtZWQgdHJlZSIKK21zZ3N0ciAiQ3JlYSB1biBhcmNoaXZpbyBkaSBmaWxlIGRhIHVuIGFsYmVybyBjb24gbm9tZSIKKworIzogY29tbWFuZC1saXN0Lmg6NTYKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICJVc2EgbGEgcmljZXJjYSBiaW5hcmlhIHBlciB0cm92YXJlIGlsIGNvbW1pdCBjaGUgaGEgaW50cm9kb3R0byB1biBidWciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU3Cittc2dpZCAiU2hvdyB3aGF0IHJldmlzaW9uIGFuZCBhdXRob3IgbGFzdCBtb2RpZmllZCBlYWNoIGxpbmUgb2YgYSBmaWxlIgorbXNnc3RyICIiCisiVmlzdWFsaXp6YSBxdWFsaSByZXZpc2lvbmUgZSBhdXRvcmUgaGFubm8gbW9kaWZpY2F0byBvZ25pIHNpbmdvbGEgcmlnYSBkaSB1biAiCisiZmlsZSBwZXIgdWx0aW1pIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OAorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICJFbGVuY2EsIGNyZWEgbyBlbGltaW5hIGJyYW5jaCIKKworIzogY29tbWFuZC1saXN0Lmg6NTkKK21zZ2lkICJNb3ZlIG9iamVjdHMgYW5kIHJlZnMgYnkgYXJjaGl2ZSIKK21zZ3N0ciAiU3Bvc3RhIG9nZ2V0dGkgZSByaWZlcmltZW50aSBpbiBiYXNlIGEgdW4gYXJjaGl2aW8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYwCittc2dpZCAiUHJvdmlkZSBjb250ZW50IG9yIHR5cGUgYW5kIHNpemUgaW5mb3JtYXRpb24gZm9yIHJlcG9zaXRvcnkgb2JqZWN0cyIKK21zZ3N0ciAiIgorIkZvcm5pc2NpIGluZm9ybWF6aW9uaSBzdWwgY29udGVudXRvIG8gc3VsIHRpcG8gZSBzdWxsZSBkaW1lbnNpb25pIHBlciBnbGkgIgorIm9nZ2V0dGkgZGkgdW4gcmVwb3NpdG9yeSIKKworIzogY29tbWFuZC1saXN0Lmg6NjEKK21zZ2lkICJEaXNwbGF5IGdpdGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24iCittc2dzdHIgIlZpc3VhbGl6emEgbGUgaW5mb3JtYXppb25pIHN1Z2xpIGF0dHJpYnV0aSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYyCittc2dpZCAiRGVidWcgZ2l0aWdub3JlIC8gZXhjbHVkZSBmaWxlcyIKK21zZ3N0ciAiRXNlZ3VpIGlsIGRlYnVnIGRlaSBmaWxlIGdpdGlnbm9yZS9lc2NsdWRpIGZpbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYzCittc2dpZCAiU2hvdyBjYW5vbmljYWwgbmFtZXMgYW5kIGVtYWlsIGFkZHJlc3NlcyBvZiBjb250YWN0cyIKK21zZ3N0ciAiVmlzdWFsaXp6YSBpIG5vbWkgY2Fub25pY2kgZSBnbGkgaW5kaXJpenppIGUtbWFpbCBkZWkgY29udGF0dGkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY0Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIG9yIHJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICIiCisiUGFzc2EgZGEgdW4gYnJhbmNoIGEgdW4gYWx0cm8gbyByaXByaXN0aW5hIGkgZmlsZSBuZWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY1Cittc2dpZCAiQ29weSBmaWxlcyBmcm9tIHRoZSBpbmRleCB0byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJDb3BpYSBkZWkgZmlsZSBkYWxsJ2luZGljZSBhbGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogY29tbWFuZC1saXN0Lmg6NjYKK21zZ2lkICJFbnN1cmVzIHRoYXQgYSByZWZlcmVuY2UgbmFtZSBpcyB3ZWxsIGZvcm1lZCIKK21zZ3N0ciAiU2kgYXNzaWN1cmEgY2hlIHVuIG5vbWUgcmlmZXJpbWVudG8gc2lhIGJlbiBmb3JtYXRvIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NworbXNnaWQgIkZpbmQgY29tbWl0cyB5ZXQgdG8gYmUgYXBwbGllZCB0byB1cHN0cmVhbSIKK21zZ3N0ciAiVHJvdmEgY29tbWl0IGNoZSBkZXZvbm8gZXNzZXJlIGFuY29yYSBhcHBsaWNhdGkgdXBzdHJlYW0iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY4Cittc2dpZCAiQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIkFwcGxpY2EgbGUgbW9kaWZpY2hlIGludHJvZG90dGUgZGEgYWxjdW5pIGNvbW1pdCBlc2lzdGVudGkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY5Cittc2dpZCAiR3JhcGhpY2FsIGFsdGVybmF0aXZlIHRvIGdpdC1jb21taXQiCittc2dzdHIgIkFsdGVybmF0aXZhIGdyYWZpY2EgYSBnaXQtY29tbWl0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3MAorbXNnaWQgIlJlbW92ZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJSaW11b3ZlIGkgZmlsZSBub24gdHJhY2NpYXRpIGRhbGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogY29tbWFuZC1saXN0Lmg6NzEKK21zZ2lkICJDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIkNsb25hIHVuIHJlcG9zaXRvcnkgaW4gdW5hIG51b3ZhIGRpcmVjdG9yeSIKKworIzogY29tbWFuZC1saXN0Lmg6NzIKK21zZ2lkICJEaXNwbGF5IGRhdGEgaW4gY29sdW1ucyIKK21zZ3N0ciAiVmlzdWFsaXp6YSBpIGRhdGkgaW4gY29sb25uZSIKKworIzogY29tbWFuZC1saXN0Lmg6NzMKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVnaXN0cmEgbW9kaWZpY2hlIGFsIHJlcG9zaXRvcnkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc0Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBHaXQgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICJTY3JpdmUgZSB2ZXJpZmljYSBpIGZpbGUgZ3JhZm8gZGVpIGNvbW1pdCBkaSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc1Cittc2dpZCAiQ3JlYXRlIGEgbmV3IGNvbW1pdCBvYmplY3QiCittc2dzdHIgIkNyZWEgdW4gbnVvdm8gb2dnZXR0byBjb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc2Cittc2dpZCAiR2V0IGFuZCBzZXQgcmVwb3NpdG9yeSBvciBnbG9iYWwgb3B0aW9ucyIKK21zZ3N0ciAiT3R0aWVuZSBlIGltcG9zdGEgbGUgb3B6aW9uaSBhIGxpdmVsbG8gZGkgcmVwb3NpdG9yeSBvIGdsb2JhbGkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc3Cittc2dpZCAiQ291bnQgdW5wYWNrZWQgbnVtYmVyIG9mIG9iamVjdHMgYW5kIHRoZWlyIGRpc2sgY29uc3VtcHRpb24iCittc2dzdHIgIiIKKyJDb250YSBpbCBudW1lcm8gZGkgb2dnZXR0aSBub24gaW4gdW4gcGFjayBlIGxhIGxvcm8gb2NjdXBhemlvbmUgZGkgc3BhemlvIHN1ICIKKyJkaXNjbyIKKworIzogY29tbWFuZC1saXN0Lmg6NzgKK21zZ2lkICJSZXRyaWV2ZSBhbmQgc3RvcmUgdXNlciBjcmVkZW50aWFscyIKK21zZ3N0ciAiUmVjdXBlcmEgZSBzYWx2YSBjcmVkZW56aWFsaSB1dGVudGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc5Cittc2dpZCAiSGVscGVyIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHBhc3N3b3JkcyBpbiBtZW1vcnkiCittc2dzdHIgIkhlbHBlciBwZXIgc2FsdmFyZSB0ZW1wb3JhbmVhbWVudGUgcGFzc3dvcmQgaW4gbWVtb3JpYSIKKworIzogY29tbWFuZC1saXN0Lmg6ODAKK21zZ2lkICJIZWxwZXIgdG8gc3RvcmUgY3JlZGVudGlhbHMgb24gZGlzayIKK21zZ3N0ciAiSGVscGVyIHBlciBzYWx2YXJlIGNyZWRlbnppYWxpIHN1IGRpc2NvIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MQorbXNnaWQgIkV4cG9ydCBhIHNpbmdsZSBjb21taXQgdG8gYSBDVlMgY2hlY2tvdXQiCittc2dzdHIgIkVzcG9ydGEgdW4gc2luZ29sbyBjb21taXQgaW4gdW4gY2hlY2tvdXQgQ1ZTIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MgorbXNnaWQgIlNhbHZhZ2UgeW91ciBkYXRhIG91dCBvZiBhbm90aGVyIFNDTSBwZW9wbGUgbG92ZSB0byBoYXRlIgorbXNnc3RyICIiCisiUmVjdXBlcmEgaSBkYXRpIGRhIHVuIHNpc3RlbWEgZGkgY29udHJvbGxvIGRpIHZlcnNpb25lIGNoZSBsZSBwZXJzb25lICIKKyJhZG9yYW5vIG9kaWFyZSIKKworIzogY29tbWFuZC1saXN0Lmg6ODMKK21zZ2lkICJBIENWUyBzZXJ2ZXIgZW11bGF0b3IgZm9yIEdpdCIKK21zZ3N0ciAiVW4gZW11bGF0b3JlIGRpIHNlcnZlciBDVlMgcGVyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODQKK21zZ2lkICJBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHaXQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJVbiBzZXJ2ZXIgdmVyYW1lbnRlIHNlbXBsaWNlIHBlciByZXBvc2l0b3J5IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODUKK21zZ2lkICJHaXZlIGFuIG9iamVjdCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgYmFzZWQgb24gYW4gYXZhaWxhYmxlIHJlZiIKK21zZ3N0ciAiIgorIkF0dHJpYnVpc2NlIHVuIG5vbWUgbGVnZ2liaWxlIGEgdW4gb2dnZXR0byBiYXNhbmRvc2kgc3UgdW4gcmlmZXJpbWVudG8gIgorImRpc3BvbmliaWxlIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NgorbXNnaWQgIlNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMiCittc2dzdHIgIiIKKyJWaXN1YWxpenphIGxlIG1vZGlmaWNoZSBmcmEgY29tbWl0LCB1biBjb21taXQgZSBsJ2FsYmVybyBkaSBsYXZvcm8sIGVjYy4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg3Cittc2dpZCAiQ29tcGFyZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IgorbXNnc3RyICJDb25mcm9udGEgZmlsZSBuZWxsJ2FsYmVybyBkaSBsYXZvcm8gZSBuZWxsJ2luZGljZSIKKworIzogY29tbWFuZC1saXN0Lmg6ODgKK21zZ2lkICJDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4IgorbXNnc3RyICJDb25mcm9udGEgdW4gYWxiZXJvIGNvbiBsJ2FsYmVybyBkaSBsYXZvcm8gbyBsJ2luZGljZSIKKworIzogY29tbWFuZC1saXN0Lmg6ODkKK21zZ2lkICJDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cyIKK21zZ3N0ciAiIgorIkNvbmZyb250YSBpbCBjb250ZW51dG8gZSBpIG1vZGUgZGVpIGJsb2IgdHJvdmF0aSB0cmFtaXRlIGR1ZSBvZ2dldHRpIGFsYmVybyIKKworIzogY29tbWFuZC1saXN0Lmg6OTAKK21zZ2lkICJTaG93IGNoYW5nZXMgdXNpbmcgY29tbW9uIGRpZmYgdG9vbHMiCittc2dzdHIgIiIKKyJWaXN1YWxpenphIGxlIG1vZGlmaWNoZSB1c2FuZG8gdG9vbCBjb211bmkgcGVyIGxhIHZpc3VhbGl6emF6aW9uZSBkZWkgZGlmZiIKKworIzogY29tbWFuZC1saXN0Lmg6OTEKK21zZ2lkICJHaXQgZGF0YSBleHBvcnRlciIKK21zZ3N0ciAiRXNwb3J0YXRvcmUgZGkgZGF0aSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkyCittc2dpZCAiQmFja2VuZCBmb3IgZmFzdCBHaXQgZGF0YSBpbXBvcnRlcnMiCittc2dzdHIgIkJhY2tlbmQgcGVyIGltcG9ydGF0b3JpIGRpIGRhdGkgR2l0IHZlbG9jaSIKKworIzogY29tbWFuZC1saXN0Lmg6OTMKK21zZ2lkICJEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJTY2FyaWNhIG9nZ2V0dGkgZSByaWZlcmltZW50aSBkYSB1biBhbHRybyByZXBvc2l0b3J5IgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJSaWNldmUgb2dnZXR0aSBtYW5jYW50aSBkYSB1biBhbHRybyByZXBvc2l0b3J5IgorCisjOiBjb21tYW5kLWxpc3QuaDo5NQorbXNnaWQgIlJld3JpdGUgYnJhbmNoZXMiCittc2dzdHIgIlJpc2NyaXZlIGJyYW5jaCIKKworIzogY29tbWFuZC1saXN0Lmg6OTYKK21zZ2lkICJQcm9kdWNlIGEgbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIkdlbmVyYSB1biBtZXNzYWdnaW8gZGkgY29tbWl0IGRlbCBtZXJnZSIKKworIzogY29tbWFuZC1saXN0Lmg6OTcKK21zZ2lkICJPdXRwdXQgaW5mb3JtYXRpb24gb24gZWFjaCByZWYiCittc2dzdHIgIlZpc3VhbGl6emEgaW4gb3V0cHV0IGxlIGluZm9ybWF6aW9uaSBzdSBvZ25pIHJpZmVyaW1lbnRvIgorCisjOiBjb21tYW5kLWxpc3QuaDo5OAorbXNnaWQgIlByZXBhcmUgcGF0Y2hlcyBmb3IgZS1tYWlsIHN1Ym1pc3Npb24iCittc2dzdHIgIlByZXBhcmEgcGF0Y2ggcGVyIGlsIGxvcm8gaW52aW8gdHJhbWl0ZSBlLW1haWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk5Cittc2dpZCAiVmVyaWZpZXMgdGhlIGNvbm5lY3Rpdml0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlIgorbXNnc3RyICJWZXJpZmljYSBsYSBjb25uZXNzaW9uZSBlIGxhIHZhbGlkaXTDoCBkZWdsaSBvZ2dldHRpIG5lbCBkYXRhYmFzZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTAwCittc2dpZCAiQ2xlYW51cCB1bm5lY2Vzc2FyeSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIlJpcHVsaXNjZSBmaWxlIG5vbiBuZWNlc3NhcmkgZSBvdHRpbWl6emEgaWwgcmVwb3NpdG9yeSBsb2NhbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMQorbXNnaWQgIkV4dHJhY3QgY29tbWl0IElEIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIHVzaW5nIGdpdC1hcmNoaXZlIgorbXNnc3RyICJFc3RyYWUgbCdJRCBkZWwgY29tbWl0IGRhIHVuIGFyY2hpdmlvIGNyZWF0byB1c2FuZG8gZ2l0LWFyY2hpdmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMgorbXNnaWQgIlByaW50IGxpbmVzIG1hdGNoaW5nIGEgcGF0dGVybiIKK21zZ3N0ciAiU3RhbXBhIGxlIHJpZ2hlIGNvcnJpc3BvbmRlbnRpIGEgdW4nZXNwcmVzc2lvbmUgcmVnb2xhcmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMworbXNnaWQgIkEgcG9ydGFibGUgZ3JhcGhpY2FsIGludGVyZmFjZSB0byBHaXQiCittc2dzdHIgIlVuJ2ludGVyZmFjY2lhIGdyYWZpY2EgcG9ydGFiaWxlIHBlciBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNAorbXNnaWQgIkNvbXB1dGUgb2JqZWN0IElEIGFuZCBvcHRpb25hbGx5IGNyZWF0ZXMgYSBibG9iIGZyb20gYSBmaWxlIgorbXNnc3RyICJDYWxjb2xhIGwnSUQgb2dnZXR0byBlIGNyZWEgZmFjb2x0YXRpdmFtZW50ZSB1biBibG9iIGRhIHVuIGZpbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNQorbXNnaWQgIkRpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiBhYm91dCBHaXQiCittc2dzdHIgIlZpc3VhbGl6emEgdW5hIGd1aWRhIGEgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDYKK21zZ2lkICJTZXJ2ZXIgc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBHaXQgb3ZlciBIVFRQIgorbXNnc3RyICJJbXBsZW1lbnRhemlvbmUgbGF0byBzZXJ2ZXIgZGkgR2l0IHN1IEhUVFAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNworbXNnaWQgIkRvd25sb2FkIGZyb20gYSByZW1vdGUgR2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAiCittc2dzdHIgIlNjYXJpY2EgZGF0aSBkYSB1biByZXBvc2l0b3J5IEdpdCByZW1vdG8gdHJhbWl0ZSBIVFRQIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDgKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBIVFRQL0RBViB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIkVzZWd1ZSBpbCBwdXNoIGRpIG9nZ2V0dGkgc3UgdW4gYWx0cm8gcmVwb3NpdG9yeSB0cmFtaXRlIEhUVFAvREFWIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDkKK21zZ2lkICJTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGZyb20gc3RkaW4gdG8gYW4gSU1BUCBmb2xkZXIiCittc2dzdHIgIkludmlhIHVuIGluc2llbWUgZGkgcGF0Y2ggZGFsbG8gc3RhbmRhcmQgaW5wdXQgYSB1bmEgY2FydGVsbGEgSU1BUCIKKworIzogY29tbWFuZC1saXN0Lmg6MTEwCittc2dpZCAiQnVpbGQgcGFjayBpbmRleCBmaWxlIGZvciBhbiBleGlzdGluZyBwYWNrZWQgYXJjaGl2ZSIKK21zZ3N0ciAiR2VuZXJhIGlsIGZpbGUgaW5kaWNlIHBhY2sgcGVyIHVuIGFyY2hpdmlvIGVzaXN0ZW50ZSBzb3R0b3Bvc3RvIGEgcGFjayIKKworIzogY29tbWFuZC1saXN0Lmg6MTExCittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIkNyZWEgdW4gcmVwb3NpdG9yeSBHaXQgdnVvdG8gbyBuZSByZWluaXppYWxpenphIHVubyBlc2lzdGVudGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMgorbXNnaWQgIkluc3RhbnRseSBicm93c2UgeW91ciB3b3JraW5nIHJlcG9zaXRvcnkgaW4gZ2l0d2ViIgorbXNnc3RyICJTZm9nbGlhIGlzdGFudGFuZWFtZW50ZSBpbCB0dW8gcmVwb3NpdG9yeSBkaSBsYXZvcm8gc3UgZ2l0d2ViIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTMKK21zZ2lkICJBZGQgb3IgcGFyc2Ugc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBpbiBjb21taXQgbWVzc2FnZXMiCittc2dzdHIgIkFnZ2l1bmdlIG8gYW5hbGl6emEgaW5mb3JtYXppb25pIHN0cnV0dHVyYXRlIG5laSBtZXNzYWdnaSBkaSBjb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNAorbXNnaWQgIlRoZSBHaXQgcmVwb3NpdG9yeSBicm93c2VyIgorbXNnc3RyICJJbCBicm93c2VyIHBlciBpIHJlcG9zaXRvcnkgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTUKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJWaXN1YWxpenphIGkgbG9nIGRlaSBjb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNgorbXNnaWQgIlNob3cgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJWaXN1YWxpenphIGluZm9ybWF6aW9uaSBzdWkgZmlsZSBuZWxsJ2luZGljZSBlIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogY29tbWFuZC1saXN0Lmg6MTE3Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkiCittc2dzdHIgIkVsZW5jYSBpIHJpZmVyaW1lbnRpIGluIHVuIHJlcG9zaXRvcnkgcmVtb3RvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTgKK21zZ2lkICJMaXN0IHRoZSBjb250ZW50cyBvZiBhIHRyZWUgb2JqZWN0IgorbXNnc3RyICJFbGVuY2EgaSBjb250ZW51dGkgZGkgdW4gb2dnZXR0byBhbGJlcm8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOQorbXNnaWQgIkV4dHJhY3RzIHBhdGNoIGFuZCBhdXRob3JzaGlwIGZyb20gYSBzaW5nbGUgZS1tYWlsIG1lc3NhZ2UiCittc2dzdHIgIiIKKyJFc3RyYWUgbGEgcGF0Y2ggZSBsZSBpbmZvcm1hemlvbmkgc3VsbCdhdXRvcmUgZGEgdW4gc2luZ29sbyBtZXNzYWdnaW8gZS1tYWlsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjAKK21zZ2lkICJTaW1wbGUgVU5JWCBtYm94IHNwbGl0dGVyIHByb2dyYW0iCittc2dzdHIgIlVuIHNlbXBsaWNlIHByb2dyYW1tYSBwZXIgc3VkZGl2aWRlcmUgaSBmaWxlIFVOSVggbWJveCIKKworIzogY29tbWFuZC1saXN0Lmg6MTIxCittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgIlVuaXNjZSBkdWUgbyBwacO5IGNyb25vbG9naWUgZGkgc3ZpbHVwcG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMgorbXNnaWQgIkZpbmQgYXMgZ29vZCBjb21tb24gYW5jZXN0b3JzIGFzIHBvc3NpYmxlIGZvciBhIG1lcmdlIgorbXNnc3RyICJUcm92YSBpbCBtYWdnaW9yIG51bWVybyBwb3NzaWJpbGUgZGkgYW50ZW5hdGkgY29tdW5pIHBlciB1biBtZXJnZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTIzCittc2dpZCAiUnVuIGEgdGhyZWUtd2F5IGZpbGUgbWVyZ2UiCittc2dzdHIgIkVzZWd1ZSB1biBtZXJnZSBhIHRyZSB2aWUgc3UgZmlsZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTI0Cittc2dpZCAiUnVuIGEgbWVyZ2UgZm9yIGZpbGVzIG5lZWRpbmcgbWVyZ2luZyIKK21zZ3N0ciAiRXNlZ3VlIHVuIG1lcmdlIHBlciBpIGZpbGUgY2hlIGxvIHJpY2hpZWRvbm8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNQorbXNnaWQgIlRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCBnaXQtbWVyZ2UtaW5kZXgiCittc2dzdHIgIklsIHByb2dyYW1tYSBoZWxwZXIgc3RhbmRhcmQgZGEgdXNhcmUgY29uIGdpdC1tZXJnZS1pbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI2Cittc2dpZCAiUnVuIG1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb24gdG9vbHMgdG8gcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMiCittc2dzdHIgIiIKKyJFc2VndWUgZ2xpIHN0cnVtZW50aSBkaSByaXNvbHV6aW9uZSBjb25mbGl0dGkgZGkgbWVyZ2UgcGVyIHJpc29sdmVyZSBpICIKKyJjb25mbGl0dGkgZGkgbWVyZ2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNworbXNnaWQgIlNob3cgdGhyZWUtd2F5IG1lcmdlIHdpdGhvdXQgdG91Y2hpbmcgaW5kZXgiCittc2dzdHIgIlZpc3VhbGl6emEgdW4gbWVyZ2UgYSB0cmUgdmllIHNlbnphIG1vZGlmaWNhcmUgbCdpbmRpY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgbXVsdGktcGFjay1pbmRleGVzIgorbXNnc3RyICJTY3JpdmUgZSB2ZXJpZmljYSBpbmRpY2kgbXVsdGktcGFjayIKKworIzogY29tbWFuZC1saXN0Lmg6MTI5Cittc2dpZCAiQ3JlYXRlcyBhIHRhZyBvYmplY3QiCittc2dzdHIgIkNyZWEgdW4gb2dnZXR0byB0YWciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMAorbXNnaWQgIkJ1aWxkIGEgdHJlZS1vYmplY3QgZnJvbSBscy10cmVlIGZvcm1hdHRlZCB0ZXh0IgorbXNnc3RyICJHZW5lcmEgdW4gb2dnZXR0byBhbGJlcm8gZGEgdGVzdG8gaW4gZm9ybWF0byBscy10cmVlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzEKK21zZ2lkICJNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsiCittc2dzdHIgIlNwb3N0YSBvIHJpbm9taW5hIHVuIGZpbGUsIHVuYSBkaXJlY3RvcnkgbyB1biBjb2xsZWdhbWVudG8gc2ltYm9saWNvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzIKK21zZ2lkICJGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzIgorbXNnc3RyICJUcm92YSBpIG5vbWkgc2ltYm9saWNpIHBlciBsZSByZXZpc2lvbmkgZGF0ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTMzCittc2dpZCAiQWRkIG9yIGluc3BlY3Qgb2JqZWN0IG5vdGVzIgorbXNnc3RyICJBZ2dpdW5nZSBvIGVzYW1pbmEgbGUgbm90ZSBhZ2xpIG9nZ2V0dGkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNAorbXNnaWQgIkltcG9ydCBmcm9tIGFuZCBzdWJtaXQgdG8gUGVyZm9yY2UgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJJbXBvcnRhIGRhdGkgZGEsIG8gaW52aWEgZGF0aSBhLCByZXBvc2l0b3J5IFBlcmZvcmNlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzUKK21zZ2lkICJDcmVhdGUgYSBwYWNrZWQgYXJjaGl2ZSBvZiBvYmplY3RzIgorbXNnc3RyICJDcmVhIHVuIGFyY2hpdmlvIGRpIG9nZ2V0dGkgc290dG9wb3N0byBhIHBhY2siCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNgorbXNnaWQgIkZpbmQgcmVkdW5kYW50IHBhY2sgZmlsZXMiCittc2dzdHIgIlRyb3ZhIGZpbGUgcGFjayByaWRvbmRhbnRpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzcKK21zZ2lkICJQYWNrIGhlYWRzIGFuZCB0YWdzIGZvciBlZmZpY2llbnQgcmVwb3NpdG9yeSBhY2Nlc3MiCittc2dzdHIgIkVzZWd1ZSBpbCBwYWNrIGRpIGhlYWQgZSB0YWcgcGVyIHVuIGFjY2Vzc28gZWZmaWNpZW50ZSBhbCByZXBvc2l0b3J5IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzgKK21zZ2lkICJSb3V0aW5lcyB0byBoZWxwIHBhcnNpbmcgcmVtb3RlIHJlcG9zaXRvcnkgYWNjZXNzIHBhcmFtZXRlcnMiCittc2dzdHIgIiIKKyJSb3V0aW5lIGNoZSBhaXV0YW5vIGFkIGFuYWxpenphcmUgaSBwYXJhbWV0cmkgZGkgYWNjZXNzbyBhaSByZXBvc2l0b3J5IHJlbW90aSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM5Cittc2dpZCAiQ29tcHV0ZSB1bmlxdWUgSUQgZm9yIGEgcGF0Y2giCittc2dzdHIgIkNhbGNvbGEgbCdJRCB1bml2b2NvIHBlciB1bmEgcGF0Y2giCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MAorbXNnaWQgIlBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiRWxpbWluYSB0dXR0aSBnbGkgb2dnZXR0aSBub24gcmFnZ2l1bmdpYmlsaSBkYWwgZGF0YWJhc2Ugb2dnZXR0aSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQxCittc2dpZCAiUmVtb3ZlIGV4dHJhIG9iamVjdHMgdGhhdCBhcmUgYWxyZWFkeSBpbiBwYWNrIGZpbGVzIgorbXNnc3RyICJSaW11b3ZlIGdsaSBvZ2dldHRpIGFnZ2l1bnRpdmkgZ2nDoCBwcmVzZW50aSBuZWkgZmlsZSBwYWNrIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDIKK21zZ2lkICJGZXRjaCBmcm9tIGFuZCBpbnRlZ3JhdGUgd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgIiIKKyJFc2VndWUgaWwgZmV0Y2ggZSBsJ2ludGVncmF6aW9uZSBjb24gdW4gYWx0cm8gcmVwb3NpdG9yeSBvIHVuIGJyYW5jaCBsb2NhbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MworbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiQWdnaW9ybmEgaSByaWZlcmltZW50aSByZW1vdGkgaW5zaWVtZSBhZ2xpIG9nZ2V0dGkgYXNzb2NpYXRpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDQKK21zZ2lkICJBcHBsaWVzIGEgcXVpbHQgcGF0Y2hzZXQgb250byB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgIkFwcGxpY2EgdW4gaW5zaWVtZSBkaSBwYXRjaCBxdWlsdCBzdWwgYnJhbmNoIGNvcnJlbnRlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDUKK21zZ2lkICJDb21wYXJlIHR3byBjb21taXQgcmFuZ2VzIChlLmcuIHR3byB2ZXJzaW9ucyBvZiBhIGJyYW5jaCkiCittc2dzdHIgIkNvbXBhcmEgZHVlIGludGVydmFsbGkgZGkgY29tbWl0IChhZCBlcy4gZHVlIHZlcnNpb25pIGRpIHVuIGJyYW5jaCkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NgorbXNnaWQgIlJlYWRzIHRyZWUgaW5mb3JtYXRpb24gaW50byB0aGUgaW5kZXgiCittc2dzdHIgIkxlZ2dlIGxlIGluZm9ybWF6aW9uaSBzdSB1biBhbGJlcm8gZGFsbCdpbmRpY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NworbXNnaWQgIlJlYXBwbHkgY29tbWl0cyBvbiB0b3Agb2YgYW5vdGhlciBiYXNlIHRpcCIKK21zZ3N0ciAiUmlhcHBsaWNhIGRlaSBjb21taXQgZG9wbyBsJ3VsdGltbyBjb21taXQgZGkgdW4gYnJhbmNoIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDgKK21zZ2lkICJSZWNlaXZlIHdoYXQgaXMgcHVzaGVkIGludG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIlJpY2V2ZSBxdWFudG8gc290dG9wb3N0byBhIHB1c2ggbmVsIHJlcG9zaXRvcnkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OQorbXNnaWQgIk1hbmFnZSByZWZsb2cgaW5mb3JtYXRpb24iCittc2dzdHIgIkdlc3Rpc2NlIGxlIGluZm9ybWF6aW9uaSBkZWwgcmVnaXN0cm8gZGVpIHJpZmVyaW1lbnRpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTAKK21zZ2lkICJNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJHZXN0aXNjZSBsJ2luc2llbWUgZGVpIHJlcG9zaXRvcnkgdHJhY2NpYXRpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTEKK21zZ2lkICJQYWNrIHVucGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5IgorbXNnc3RyICJFc2VndWUgaWwgcGFjayBkZWdsaSBvZ2dldHRpIG5vbiBzb3R0b3Bvc3RpIGEgcGFjayBpbiB1biByZXBvc2l0b3J5IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTIKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSByZWZzIHRvIHJlcGxhY2Ugb2JqZWN0cyIKK21zZ3N0ciAiQ3JlYSwgZWxlbmNhLCBlbGltaW5hIGkgcmlmZXJpbWVudGkgcGVyIHNvc3RpdHVpcmUgb2dnZXR0aSIKKworIzogY29tbWFuZC1saXN0Lmg6MTUzCittc2dpZCAiR2VuZXJhdGVzIGEgc3VtbWFyeSBvZiBwZW5kaW5nIGNoYW5nZXMiCittc2dzdHIgIkdlbmVyYSB1biByaWFzc3VudG8gZGVsbGUgbW9kaWZpY2hlIGluIHNvc3Blc28iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NAorbXNnaWQgIlJldXNlIHJlY29yZGVkIHJlc29sdXRpb24gb2YgY29uZmxpY3RlZCBtZXJnZXMiCittc2dzdHIgIlJpdXNhIGxhIHJpc29sdXppb25lIHJlZ2lzdHJhdGEgZGVpIG1lcmdlIGNoZSBoYW5ubyBnZW5lcmF0byBjb25mbGl0dGkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NQorbXNnaWQgIlJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlIgorbXNnc3RyICJSaXByaXN0aW5hIGwnSEVBRCBjb3JyZW50ZSBhbGxvIHN0YXRvIHNwZWNpZmljYXRvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTYKK21zZ2lkICJSZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiUmlwcmlzdGluYSBpIGZpbGUgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTcKK21zZ2lkICJSZXZlcnQgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICJFc2VndWUgaWwgcmV2ZXJ0IGRpIGFsY3VuaSBjb21taXQgZXNpc3RlbnRpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTgKK21zZ2lkICJMaXN0cyBjb21taXQgb2JqZWN0cyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIkVsZW5jYSBnbGkgb2dnZXR0aSBjb21taXQgaW4gb3JkaW5lIGNyb25vbG9naWNvIGludmVyc28iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OQorbXNnaWQgIlBpY2sgb3V0IGFuZCBtYXNzYWdlIHBhcmFtZXRlcnMiCittc2dzdHIgIlNjZWdsaWUgZSBhbHRlcmEgaSBwYXJhbWV0cmkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MAorbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJSaW11b3ZlIGZpbGUgZGFsbCdhbGJlcm8gZGkgbGF2b3JvIGUgZGFsbCdpbmRpY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MQorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgYXMgZW1haWxzIgorbXNnc3RyICJJbnZpYSB1biBpbnNpZW1lIGRpIHBhdGNoIGNvbWUgZS1tYWlsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjIKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBHaXQgcHJvdG9jb2wgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICIiCisiRXNlZ3VlIGlsIHB1c2ggZGkgb2dnZXR0aSBzdSB1biBhbHRybyByZXBvc2l0b3J5IHRyYW1pdGUgaWwgcHJvdG9jb2xsbyBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MworbXNnaWQgIlJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdpdC1vbmx5IFNTSCBhY2Nlc3MiCittc2dzdHIgIlNoZWxsIGRpIGxvZ2luIGxpbWl0YXRhIHBlciBjb25jZWRlcmUgYWNjZXNzbyBTU0ggc29sbyBwZXIgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjQKK21zZ2lkICJTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dCIKK21zZ3N0ciAiUmlhc3N1bWUgbCdvdXRwdXQgZGkgJ2dpdCBsb2cnIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjUKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiVmlzdWFsaXp6YSB2YXJpIHRpcGkgZGkgb2dnZXR0aSIKKworIzogY29tbWFuZC1saXN0Lmg6MTY2Cittc2dpZCAiU2hvdyBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cyIKK21zZ3N0ciAiVmlzdWFsaXp6YSBpIGJyYW5jaCBlIGkgbG9ybyBjb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NworbXNnaWQgIlNob3cgcGFja2VkIGFyY2hpdmUgaW5kZXgiCittc2dzdHIgIlZpc3VhbGl6emEgbCdpbmRpY2UgZGkgdW4gYXJjaGl2aW8gc290dG9wb3N0byBhIHBhY2siCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OAorbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIkVsZW5jYSBpIHJpZmVyaW1lbnRpIGluIHVuIHJlcG9zaXRvcnkgbG9jYWxlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjkKK21zZ2lkICJHaXQncyBpMThuIHNldHVwIGNvZGUgZm9yIHNoZWxsIHNjcmlwdHMiCittc2dzdHIgIiIKKyJDb2RpY2UgZGkgaW5pemlhbGl6emF6aW9uZSBkZWxsJ2ludGVybmF6aW9uYWxpenphemlvbmUgZGkgR2l0IHBlciBnbGkgc2NyaXB0ICIKKyJzaGVsbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTcwCittc2dpZCAiQ29tbW9uIEdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZSIKK21zZ3N0ciAiQ29kaWNlIGNvbXVuZSBkaSBpbml6aWFsaXp6YXppb25lIGRpIEdpdCBwZXIgZ2xpIHNjcmlwdCBzaGVsbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTcxCittc2dpZCAiSW5pdGlhbGl6ZSBhbmQgbW9kaWZ5IHRoZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgIkluaXppYWxpenphIGUgbW9kaWZpY2Egc3BhcnNlLWNoZWNrb3V0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzIKK21zZ2lkICJTdGFzaCB0aGUgY2hhbmdlcyBpbiBhIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGF3YXkiCittc2dzdHIgIk1ldHRlIGRhIHBhcnRlIGxlIG1vZGlmaWNoZSBpbiB1bmEgZGlyZWN0b3J5IGRpIGxhdm9ybyBzcG9yY2EiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MworbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBzdGFnaW5nIGFyZWEiCittc2dzdHIgIkFnZ2l1bmdlIGkgY29udGVudXRpIGRlaSBmaWxlIGFsbCdhcmVhIGRpIHN0YWdpbmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NAorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgIlZpc3VhbGl6emEgbG8gc3RhdG8gZGVsbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzUKK21zZ2lkICJSZW1vdmUgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSIKK21zZ3N0ciAiUmltdW92ZSBzcGF6aSBiaWFuY2hpIG5vbiBuZWNlc3NhcmkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NgorbXNnaWQgIkluaXRpYWxpemUsIHVwZGF0ZSBvciBpbnNwZWN0IHN1Ym1vZHVsZXMiCittc2dzdHIgIkluaXppYWxpenphLCBhZ2dpb3JuYSBvIGVzYW1pbmEgc290dG9tb2R1bGkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NworbXNnaWQgIkJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYW5kIEdpdCIKK21zZ3N0ciAiT3BlcmF0aXZpdMOgIGJpZGlyZXppb25hbGUgdHJhIHVuIHJlcG9zaXRvcnkgU3VidmVyc2lvbiBlIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc4Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIgorbXNnc3RyICJQYXNzYSBkYSB1biBicmFuY2ggYSB1biBhbHRybyIKKworIzogY29tbWFuZC1saXN0Lmg6MTc5Cittc2dpZCAiUmVhZCwgbW9kaWZ5IGFuZCBkZWxldGUgc3ltYm9saWMgcmVmcyIKK21zZ3N0ciAiTGVnZ2UsIG1vZGlmaWNhIGVkIGVsaW1pbmEgcmlmZXJpbWVudGkgc2ltYm9saWNpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODAKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAiQ3JlYSwgZWxlbmNhLCBlbGltaW5hIG8gdmVyaWZpY2EgdW4gb2dnZXR0byB0YWcgZmlybWF0byBjb24gR1BHIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODEKK21zZ2lkICJDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBhIGJsb2IncyBjb250ZW50cyIKK21zZ3N0ciAiQ3JlYSB1biBmaWxlIHRlbXBvcmFuZW8gY29uIGkgY29udGVudXRpIGRpIHVuIGJsb2IiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MgorbXNnaWQgIlVucGFjayBvYmplY3RzIGZyb20gYSBwYWNrZWQgYXJjaGl2ZSIKK21zZ3N0ciAiRGVjb21wcmltZSBnbGkgb2dnZXR0aSBkYSB1biBhcmNoaXZpbyBzb3R0b3Bvc3RvIGEgcGFjayIKKworIzogY29tbWFuZC1saXN0Lmg6MTgzCittc2dpZCAiUmVnaXN0ZXIgZmlsZSBjb250ZW50cyBpbiB0aGUgd29ya2luZyB0cmVlIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiUmVnaXN0cmEgaSBjb250ZW51dGkgZGVpIGZpbGUgZGVsbCdhbGJlcm8gZGkgbGF2b3JvIG5lbGwnaW5kaWNlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODQKK21zZ2lkICJVcGRhdGUgdGhlIG9iamVjdCBuYW1lIHN0b3JlZCBpbiBhIHJlZiBzYWZlbHkiCittc2dzdHIgIkFnZ2lvcm5hIGluIG1vZG8gc2ljdXJvIGlsIG5vbWUgb2dnZXR0byBzYWx2YXRvIGluIHVuIHJpZmVyaW1lbnRvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODUKK21zZ2lkICJVcGRhdGUgYXV4aWxpYXJ5IGluZm8gZmlsZSB0byBoZWxwIGR1bWIgc2VydmVycyIKK21zZ3N0ciAiQWdnaW9ybmEgaWwgZmlsZSBpbmZvcm1hemlvbmkgYWdnaXVudGl2ZSBwZXIgYWl1dGFyZSBpIHNlcnZlciBzdHVwaWRpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODYKK21zZ2lkICJTZW5kIGFyY2hpdmUgYmFjayB0byBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAiUmVpbnZpYSBsJ2FyY2hpdmlvIGEgZ2l0LWFyY2hpdmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NworbXNnaWQgIlNlbmQgb2JqZWN0cyBwYWNrZWQgYmFjayB0byBnaXQtZmV0Y2gtcGFjayIKK21zZ3N0ciAiUmVpbnZpYSBnbGkgb2dnZXR0aSBzb3R0b3Bvc3RpIGEgcGFjayBhIGdpdC1mZXRjaC1wYWNrIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODgKK21zZ2lkICJTaG93IGEgR2l0IGxvZ2ljYWwgdmFyaWFibGUiCittc2dzdHIgIlZpc3VhbGl6emEgdW5hIHZhcmlhYmlsZSBsb2dpY2EgZGkgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxODkKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiBjb21taXRzIgorbXNnc3RyICJWZXJpZmljYSBsYSBmaXJtYSBHUEcgZGVpIGNvbW1pdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTkwCittc2dpZCAiVmFsaWRhdGUgcGFja2VkIEdpdCBhcmNoaXZlIGZpbGVzIgorbXNnc3RyICJDb252YWxpZGEgaSBmaWxlIGFyY2hpdmlvIHNvdHRvcG9zdGkgYSBwYWNrIGRpIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTkxCittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgdGFncyIKK21zZ3N0ciAiVmVyaWZpY2EgbGEgZmlybWEgR1BHIGRlaSB0YWciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MgorbXNnaWQgIkdpdCB3ZWIgaW50ZXJmYWNlICh3ZWIgZnJvbnRlbmQgdG8gR2l0IHJlcG9zaXRvcmllcykiCittc2dzdHIgIkludGVyZmFjY2lhIFdlYiBwZXIgR2l0IChmcm9udGVuZCBXZWIgYWkgcmVwb3NpdG9yeSBHaXQpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTMKK21zZ2lkICJTaG93IGxvZ3Mgd2l0aCBkaWZmZXJlbmNlIGVhY2ggY29tbWl0IGludHJvZHVjZXMiCittc2dzdHIgIiIKKyJWaXN1YWxpenphIGkgcmVnaXN0cmkgaW5zaWVtZSBhbGxlIGRpZmZlcmVuemUgaW50cm9kb3R0ZSBkYSBjaWFzY3VuIGNvbW1pdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTk0Cittc2dpZCAiTWFuYWdlIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMiCittc2dzdHIgIkdlc3Rpc2NlIGFsYmVyaSBkaSBsYXZvcm8gbXVsdGlwbGkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NQorbXNnaWQgIkNyZWF0ZSBhIHRyZWUgb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgIkNyZWEgdW4gb2dnZXR0byBhbGJlcm8gZGFsbCdpbmRpY2UgY29ycmVudGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NgorbXNnaWQgIkRlZmluaW5nIGF0dHJpYnV0ZXMgcGVyIHBhdGgiCittc2dzdHIgIkRlZmluaXppb25lIGRpIGF0dHJpYnV0aSBwZXIgcGVyY29yc28iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NworbXNnaWQgIkdpdCBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGFuZCBjb252ZW50aW9ucyIKK21zZ3N0ciAiSW50ZXJmYWNjaWEgYSByaWdhIGRpIGNvbWFuZG8gZGkgR2l0IGUgY29udmVuemlvbmkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OAorbXNnaWQgIkEgR2l0IGNvcmUgdHV0b3JpYWwgZm9yIGRldmVsb3BlcnMiCittc2dzdHIgIlVuIHR1dG9yaWFsIEdpdCBkaSBiYXNlIHBlciBnbGkgc3ZpbHVwcGF0b3JpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTkKK21zZ2lkICJHaXQgZm9yIENWUyB1c2VycyIKK21zZ3N0ciAiR2l0IHBlciB1dGVudGkgQ1ZTIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDAKK21zZ2lkICJUd2Vha2luZyBkaWZmIG91dHB1dCIKK21zZ3N0ciAiTWVzc2EgYSBwdW50byBkZWxsJ291dHB1dCBkaSBkaWZmIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDEKK21zZ2lkICJBIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcyBmb3IgRXZlcnlkYXkgR2l0IgorbXNnc3RyICJVbiBpbnNpZW1lIGRpIGNvbWFuZGkgdXRpbGUgZSBtaW5pbWFsZSBwZXIgbCd1c28gcXVvdGlkaWFubyBkaSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMgorbXNnaWQgIkEgR2l0IEdsb3NzYXJ5IgorbXNnc3RyICJVbiBnbG9zc2FyaW8gZGkgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDMKK21zZ2lkICJIb29rcyB1c2VkIGJ5IEdpdCIKK21zZ3N0ciAiSG9vayB1c2F0aSBkYSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNAorbXNnaWQgIlNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUiCittc2dzdHIgIlNwZWNpZmljYSBpIGZpbGUgaW50ZW56aW9uYWxtZW50ZSBub24gdHJhY2NpYXRpIGRhIGlnbm9yYXJlIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDUKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAiRGVmaW5pemlvbmUgcHJvcHJpZXTDoCBzb3R0b21vZHVsbyIKKworIzogY29tbWFuZC1saXN0Lmg6MjA2Cittc2dpZCAiR2l0IG5hbWVzcGFjZXMiCittc2dzdHIgIlNwYXppIGRlaSBub21pIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA3Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICJTdHJ1dHR1cmEgcmVwb3NpdG9yeSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOAorbXNnaWQgIlNwZWNpZnlpbmcgcmV2aXNpb25zIGFuZCByYW5nZXMgZm9yIEdpdCIKK21zZ3N0ciAiQ29tZSBzcGVjaWZpY2FyZSByZXZpc2lvbmkgZSBpbnRlcnZhbGxpIGluIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA5Cittc2dpZCAiTW91bnRpbmcgb25lIHJlcG9zaXRvcnkgaW5zaWRlIGFub3RoZXIiCittc2dzdHIgIk1vbnRvIHVuIHJlcG9zaXRvcnkgZGVudHJvIHVuIGFsdHJvIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTAKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQ6IHBhcnQgdHdvIgorbXNnc3RyICJVbiB0dXRvcmlhbCBpbnRyb2R1dHRpdm8gcGVyIEdpdDogc2Vjb25kYSBwYXJ0ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MjExCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0IgorbXNnc3RyICJVbiB0dXRvcmlhbCBpbnRyb2R1dHRpdm8gcGVyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjEyCittc2dpZCAiQW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQgd29ya2Zsb3dzIHdpdGggR2l0IgorbXNnc3RyICJVbmEgcGFub3JhbWljYSBkZWkgZmx1c3NpIGRpIGxhdm9ybyByYWNjb21hbmRhdGkgaW4gR2l0IgorCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgIkRldmkgaW5pemlhcmUgY29uIFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6NjAKK21zZ2lkICJEbyB5b3Ugd2FudCBtZSB0byBkbyBpdCBmb3IgeW91IFtZL25dPyAiCittc2dzdHIgIlZ1b2kgY2hlIG1lIG5lIG9jY3VwaSBpbyBbWS9uXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjEwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGFyZyIKK21zZ3N0ciAiUmV2aXNpb25lIGZvcm5pdGEgbm9uIHZhbGlkYTogJGFyZyIKKworIzogZ2l0LWJpc2VjdC5zaDoxMjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRiaXNlY3RlZF9oZWFkIgorbXNnc3RyICJSZXZpc2lvbmUgZm9ybml0YSBub24gdmFsaWRhOiAkYmlzZWN0ZWRfaGVhZCIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgIlJldmlzaW9uZSBmb3JuaXRhIG5vbiB2YWxpZGE6ICRyZXYiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTM5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIGNhbiB0YWtlIG9ubHkgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyByaWNoaWVkZSB1biBzb2xvIGFyZ29tZW50by4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjA5Cittc2dpZCAiTm8gbG9nZmlsZSBnaXZlbiIKK21zZ3N0ciAiTmVzc3VuIGZpbGUgZGkgbG9nIHNwZWNpZmljYXRvIgorCisjOiBnaXQtYmlzZWN0LnNoOjIxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSAkZmlsZSBwZXIgcmllc2VndWlyZSBpIGNvbWFuZGkgY29udGVudXRpIgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMgorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiPz8gZGkgY29zYSBzdGFpIHBhcmxhbmRvPyIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDEKK21zZ2lkICJiaXNlY3QgcnVuIGZhaWxlZDogbm8gY29tbWFuZCBwcm92aWRlZC4iCittc2dzdHIgImVzZWN1emlvbmUgZGkgYmlzZWN0IG5vbiByaXVzY2l0YTogbmVzc3VuIGNvbWFuZG8gZm9ybml0by4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQ2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICJlc2VjdXppb25lIGRpICRjb21tYW5kIGluIGNvcnNvIgorCisjOiBnaXQtYmlzZWN0LnNoOjI1MworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgorbXNnc3RyICIiCisiZXNlY3V6aW9uZSBkaSBiaXNlY3Qgbm9uIHJpdXNjaXRhOlxuIgorImlsIGNvZGljZSBkaSB1c2NpdGEgJHJlcyBkYSAnJGNvbW1hbmQnIMOoIDwgMCBvcHB1cmUgPj0gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJsJ2VzZWN1emlvbmUgZGkgYmlzZWN0IG5vbiBwdcOyIHBpw7kgcHJvc2VndWlyZSIKKworIzogZ2l0LWJpc2VjdC5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICIiCisiZXNlY3V6aW9uZSBkaSBiaXNlY3Qgbm9uIHJpdXNjaXRhOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyDDqCB1c2NpdG8gY29uIGlsIGNvZGljZSBkaSBlcnJvcmUgJHJlcyIKKworIzogZ2l0LWJpc2VjdC5zaDoyOTIKK21zZ2lkICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCittc2dzdHIgImVzZWN1emlvbmUgZGkgYmlzZWN0IGNvbXBsZXRhdGEgY29uIHN1Y2Nlc3NvIgorCisjOiBnaXQtYmlzZWN0LnNoOjMwMAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiTm9uIHN0aWFtbyBlc2VndWVuZG8gdW5hIGJpc2V6aW9uZS4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjQ2Cittc2dpZCAiIgorIkVycm9yOiBZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisibWVyZ2UiCittc2dzdHIgIiIKKyJFcnJvcmU6IGxlIHR1ZSBtb2RpZmljaGUgbG9jYWxpIGFpIHNlZ3VlbnRpIGZpbGUgc2FyZWJiZXJvIHNvdnJhc2NyaXR0ZSBkYWwgIgorIm1lcmdlIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MQorbXNnaWQgIkF1dG9tYXRlZCBtZXJnZSBkaWQgbm90IHdvcmsuIgorbXNnc3RyICJJbCBtZXJnZSBhdXRvbWF0aWNvIG5vbiBoYSBmdW56aW9uYXRvLiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjIKK21zZ2lkICJTaG91bGQgbm90IGJlIGRvaW5nIGFuIG9jdG9wdXMuIgorbXNnc3RyICJOb24gZG92cmViYmUgZXNzZXJlIGVzZWd1aXRvIHVuIG1lcmdlIG9jdG9wdXMuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSB1biBjb21taXQgY29tdW5lIGNvbiAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjc3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUgd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIkdpw6AgYWdnaW9ybmF0byByaXNwZXR0byBhICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyB0bzogJHByZXR0eV9uYW1lIgorbXNnc3RyICJFc2VndW8gaWwgZmFzdCBmb3J3YXJkIGE6ICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6OTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIlByb3ZvIHVuIG1lcmdlIHNlbXBsaWNlIGNvbiAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjEwMgorbXNnaWQgIlNpbXBsZSBtZXJnZSBkaWQgbm90IHdvcmssIHRyeWluZyBhdXRvbWF0aWMgbWVyZ2UuIgorbXNnc3RyICJJbCBtZXJnZSBzZW1wbGljZSBub24gaGEgZnVuemlvbmF0bywgcHJvdm8gaWwgbWVyZ2UgYXV0b21hdGljby4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjIxCittc2dpZCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiCittc2dzdHIgIkltcG9zc2liaWxlIHJpbXVvdmVyZSBsJ2luZGljZSB0ZW1wb3JhbmVvIChub24gcHXDsiBzdWNjZWRlcmUpIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjI3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAkcmVmX3N0YXNoIHdpdGggJHdfY29tbWl0IgorbXNnc3RyICJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlICRyZWZfc3Rhc2ggY29uICR3X2NvbW1pdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHB1c2gnOiAkb3B0aW9uIgorbXNnc3RyICJlcnJvcmU6IG9wemlvbmUgc2Nvbm9zY2l1dGEgcGVyICdzdGFzaCBwdXNoJzogJG9wdGlvbiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAkc3Rhc2hfbXNnIgorbXNnc3RyICJEaXJlY3RvcnkgZGkgbGF2b3JvIGUgc3RhdG8gaW5kaWNlIHNhbHZhdGk6ICRzdGFzaF9tc2ciCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJG9wdCIKK21zZ3N0ciAib3B6aW9uZSBzY29ub3NjaXV0YTogJG9wdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6ICRSRVYiCittc2dzdHIgIlRyb3BwZSByZXZpc2lvbmkgc3BlY2lmaWNhdGU6ICRSRVYiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZSBub24gw6ggdW4gcmlmZXJpbWVudG8gdmFsaWRvIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyRhcmdzJyBub24gw6ggdW4gY29tbWl0IGRpIHRpcG8gc3Rhc2giCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiJyRhcmdzJyBub24gw6ggdW4gcmlmZXJpbWVudG8gYSB1bm8gc3Rhc2giCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjE4Cittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2lvcm5hcmUgbCdpbmRpY2UiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjIyCittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhcHBsaWNhcmUgdW5vIHN0YXNoIG5lbCBtZXp6byBkaSB1biBtZXJnZSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzAKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICJDaSBzb25vIGNvbmZsaXR0aSBpbiBpbmRleC4gUHJvdmEgc2VuemEgLS1pbmRleC4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMyCittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBzYWx2YXJlIGwnYWxiZXJvIGluZGljZSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NDEKK21zZ2lkICJDb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiIgorIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgcmlwcmlzdGluYXJlIGkgZmlsZSBub24gdHJhY2NpYXRpIGRhbGxhIHZvY2Ugc3Rhc2giCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjY2Cittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgcmltdW92ZXJlIGkgZmlsZSBtb2RpZmljYXRpIGRhbGwnYXJlYSBkaSBzdGFnaW5nIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAiJHtSRVZ9IGVsaW1pbmF0YSAoJHMpIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ9OiBub24gw6ggc3RhdG8gcG9zc2liaWxlIHJpbXVvdmVyZSBsYSB2b2NlIGRpIHN0YXNoIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjc5MgorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAiKFBlciByaXByaXN0aW5hcmxpIGRpZ2l0YSBcImdpdCBzdGFzaCBhcHBseVwiKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMDMKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIklsIHBlcmNvcnNvIHJlbGF0aXZvIHB1w7IgZXNzZXJlIHVzYXRvIHNvbG8gZGFsIHByaW1vIGxpdmVsbG8gZGVsbCdhbGJlcm8gZGkgIgorImxhdm9ybyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgIlVSTCByZXBvc2l0b3J5OjogJyRyZXBvJyBkZXZlIGVzc2VyZSBhc3NvbHV0byBvIGluaXppYXJlIGNvbiAuL3wuLi8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjMyCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiJyRzbV9wYXRoJyBlc2lzdGUgZ2nDoCBuZWxsJ2luZGljZSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IGFuZCBpcyBub3QgYSBzdWJtb2R1bGUiCittc2dzdHIgIickc21fcGF0aCcgZXNpc3RlIGdpw6AgbmVsbCdpbmRpY2UgZSBub24gw6ggdW4gc290dG9tb2R1bG8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIickc21fcGF0aCcgbm9uIGhhIHVuIGNvbW1pdCBkaSBjdWkgw6ggc3RhdG8gZXNlZ3VpdG8gaWwgY2hlY2tvdXQiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgZXhpc3RpbmcgcmVwbyBhdCAnJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiQWdnaXVudGEgZGVsIHJlcG9zaXRvcnkgZXNpc3RlbnRlIGluICckc21fcGF0aCcgYWxsJ2luZGljZSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICInJHNtX3BhdGgnIGVzaXN0ZSBnacOgIGUgbm9uIMOoIHVuIHJlcG9zaXRvcnkgR2l0IHZhbGlkbyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAiIgorIsOIIHN0YXRhIHRyb3ZhdGEgbG9jYWxtZW50ZSB1bmEgZGlyZWN0b3J5IEdpdCBwZXIgJyRzbV9uYW1lJyBjb24gaSBzZWd1ZW50aSAiCisicmVtb3RpOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb21cbiIKKyIgICRyZWFscmVwb1xuIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0ICIKKyJyZXBvXG4iCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorIm9wdGlvbi4iCittc2dzdHIgIiIKKyJTZSB2dW9pIHJpdXNhcmUgcXVlc3RhIGRpcmVjdG9yeSBHaXQgbG9jYWxlIGFuemljaMOpIGNsb25hcmxhIG51b3ZhbWVudGUgZGFcbiIKKyIgICRyZWFscmVwb1xuIgorInVzYSBsJ29wemlvbmUgJy0tZm9yY2UnLiBTZSBsYSBkaXJlY3RvcnkgR2l0IGxvY2FsZSBub24gw6ggaWwgcmVwb3NpdG9yeVxuIgorImNvcnJldHRvLCBvIHNlIG5vbiBzZWkgc2ljdXJvIGRpIGNpw7IgY2hlIHF1ZXN0byB2b2dsaWEgZGlyZSwgc2NlZ2xpIHVuICIKKyJhbHRyb1xuIgorIm5vbWUgY29uIGwnb3B6aW9uZSAnLS1uYW1lJy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWFjdGl2YXRpbmcgbG9jYWwgZ2l0IGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlICckc21fbmFtZScuIgorbXNnc3RyICJSaWF0dGl2byBsYSBkaXJlY3RvcnkgR2l0IGxvY2FsZSBwZXIgaWwgc290dG9tb2R1bG8gJyRzbV9uYW1lJy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzAzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGNoZWNrb3V0IGRlbCBzb3R0b21vZHVsbyAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiQWdnaXVudGEgZGVsIHNvdHRvbW9kdWxvICckc21fcGF0aCcgbm9uIHJpdXNjaXRhIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMxNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJSZWdpc3RyYXppb25lIGRlbCBzb3R0b21vZHVsbyAnJHNtX3BhdGgnIG5vbiByaXVzY2l0YSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSB0cm92YXJlIGxhIHJldmlzaW9uZSBjb3JyZW50ZSBuZWwgcGVyY29yc28gZGVsIHNvdHRvbW9kdWxvICIKKyInJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBmZXRjaCBuZWwgcGVyY29yc28gZGVsIHNvdHRvbW9kdWxvICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZpbmQgY3VycmVudCAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0gcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggIgorIickc21fcGF0aCciCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSB0cm92YXJlIGxhIHJldmlzaW9uZSBjb3JyZW50ZSBwZXIgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IG5lbCAiCisicGVyY29yc28gZGVsIHNvdHRvbW9kdWxvICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjIzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOyB0cnlpbmcgdG8gZGlyZWN0bHkgZmV0Y2ggIgorIiRzaGExOiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGZldGNoIG5lbCBwZXJjb3JzbyBkZWwgc290dG9tb2R1bG8gJyRkaXNwbGF5cGF0aCc7ICIKKyJwcm92byBhIHJlY3VwZXJhcmUgZGlyZXR0YW1lbnRlICRzaGExOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJGZXRjaGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnLCBidXQgaXQgZGlkIG5vdCBjb250YWluICRzaGExLiAiCisiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iCittc2dzdHIgIiIKKyJGZXRjaCBlc2VndWl0byBuZWwgcGVyY29yc28gZGVsIHNvdHRvbW9kdWxvICckZGlzcGxheXBhdGgnLCBtYSBub24gY29udGVuZXZhICIKKyIkc2hhMS4gRmV0Y2ggZGlyZXR0byBkaSB0YWxlIGNvbW1pdCBub24gcml1c2NpdG8uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBjaGVja291dCBkaSAnJHNoYTEnIG5lbCBwZXJjb3JzbyBkZWwgc290dG9tb2R1bG8gIgorIickZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNworIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCittc2dzdHIgIlBlcmNvcnNvIGRlbCBzb3R0b21vZHVsbyAnJGRpc3BsYXlwYXRoJzogZXNlZ3VpdG8gY2hlY2tvdXQgZGkgJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsIHJlYmFzZSBkaSAnJHNoYTEnIG5lbCBwZXJjb3JzbyBkZWwgc290dG9tb2R1bG8gIgorIickZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICJQZXJjb3JzbyBkZWwgc290dG9tb2R1bG8gJyRkaXNwbGF5cGF0aCc6IGVzZWd1aXRvIHJlYmFzZSBzdSAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0NworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBtZXJnZSBkaSAnJHNoYTEnIG5lbCBwZXJjb3JzbyBkZWwgc290dG9tb2R1bG8gIgorIickZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0OAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICJQZXJjb3JzbyBkZWwgc290dG9tb2R1bG8gJyRkaXNwbGF5cGF0aCc6IGVzZWd1aXRvIG1lcmdlIGluICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gb2YgJyRjb21tYW5kICRzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJFc2VjdXppb25lIGRpICckY29tbWFuZCAkc2hhMScgbm9uIHJpdXNjaXRhIG5lbCBwZXJjb3JzbyBkZWwgc290dG9tb2R1bG8gIgorIickZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY1NAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6ICckY29tbWFuZCAkc2hhMSciCittc2dzdHIgIlBlcmNvcnNvIGRlbCBzb3R0b21vZHVsbyAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2ODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIlJpY29yc2lvbmUgbmVsIHBlcmNvcnNvIGRlbCBzb3R0b21vZHVsbyAnJGRpc3BsYXlwYXRoJyBub24gcml1c2NpdGEiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODk2Cittc2dpZCAiVGhlIC0tY2FjaGVkIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSAtLWZpbGVzIG9wdGlvbiIKK21zZ3N0ciAiTCdvcHppb25lIC0tY2FjaGVkIG5vbiBwdcOyIGVzc2VyZSB1c2F0YSBjb24gbCdvcHppb25lIC0tZmlsZXMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTQ4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG1vZGUgJG1vZF9kc3QiCittc2dzdHIgIm1vZGFsaXTDoCAkbW9kX2RzdCBpbmF0dGVzYSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX3NyYyIKK21zZ3N0ciAiICBBdHRlbnppb25lOiAkZGlzcGxheV9uYW1lIG5vbiBjb250aWVuZSBpbCBjb21taXQgJHNoYTFfc3JjIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgIEF0dGVuemlvbmU6ICRkaXNwbGF5X25hbWUgbm9uIGNvbnRpZW5lIGlsIGNvbW1pdCAkc2hhMV9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTc0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiIKKyIgIEF0dGVuemlvbmU6ICRkaXNwbGF5X25hbWUgbm9uIGNvbnRpZW5lIGkgY29tbWl0ICRzaGExX3NyYyBlICRzaGExX2RzdCIKKworIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU2VlIGdpdC0ke2NtZH0oMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICJWZWRpIGdpdC0ke2NtZH0oMSkgcGVyIHVsdGVyaW9yaSBkZXR0YWdsaS4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDkKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC4iCittc2dzdHIgIlN0YXNoIGF1dG9tYXRpY28gYXBwbGljYXRvLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICRzdGFzaF9zaGExIgorbXNnc3RyICJJbXBvc3NpYmlsZSBtZW1vcml6emFyZSAkc3Rhc2hfc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNpbmcgKCRuZXdfY291bnQvJHRvdGFsKSIKK21zZ3N0ciAiUmViYXNlIGluIGNvcnNvICgkbmV3X2NvdW50LyR0b3RhbCkiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMDcKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1pdD4gPSBydW4gY29tbWFuZCAodGhlIHJlc3Qgb2YgdGhlIGxpbmUpIHVzaW5nIHNoZWxsXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLlxuIgorbXNnc3RyICIiCisiXG4iCisiQ29tYW5kaTpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNhIGlsIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzYSBpbCBjb21taXQsIG1hIG1vZGlmaWNhIGlsIG1lc3NhZ2dpbyBkaSBjb21taXRcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNhIGlsIGNvbW1pdCwgbWEgZmVybWF0aSBwZXIgbW9kaWZpY2FybG9cbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2EgaWwgY29tbWl0LCBtYSBmb25kaWxvIGNvbiBpbCBjb21taXQgcHJlY2VkZW50ZVxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gY29tZSBcInNxdWFzaFwiLCBtYSBzY2FydGEgaWwgbWVzc2FnZ2lvIGRpIGxvZyBkaSAiCisicXVlc3RvXG4iCisiICAgICAgICAgICAgICAgICAgICBjb21taXRcbiIKKyJ4LCBleGVjIDxjb21hbmRvPiA9IGVzZWd1aSBpbCBjb21hbmRvIChpbCByZXN0byBkZWxsYSByaWdhKSB1c2FuZG8gbGEgc2hlbGxcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gZWxpbWluYSBpbCBjb21taXRcbiIKKyJsLCBsYWJlbCA8ZXRpY2hldHRhPiA9IGV0aWNoZXR0YSBsJ0hFQUQgY29ycmVudGUgY29uIHVuIG5vbWVcbiIKKyJ0LCByZXNldCA8ZXRpY2hldHRhPiA9IHJlaW1wb3N0YSBIRUFEIGEgdW4nZXRpY2hldHRhXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxldGljaGV0dGE+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWEgdW4gY29tbWl0IGRpIG1lcmdlIHVzYW5kbyBpbCBtZXNzYWdnaW8gZGVsIGNvbW1pdCBkaSBtZXJnZVxuIgorIi4gICAgICAgb3JpZ2luYWxlIChvIGxhIG9uZWxpbmUgc2Ugbm9uIMOoIHN0YXRvIHNwZWNpZmljYXRvIHVuIGNvbW1pdCBkaSAiCisibWVyZ2VcbiIKKyIuICAgICAgIG9yaWdpbmFsZSkuIFVzYSAtYyA8Y29tbWl0PiBwZXIgcmlmb3JtdWxhcmUgaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdC5cbiIKKyJcbiIKKyJRdWVzdGUgcmlnaGUgcG9zc29ubyBlc3NlcmUgcmlvcmRpbmF0ZTsgc2FyYW5ubyBlc2VndWl0ZSBkYWxsYSBwcmltYSAiCisiYWxsJ3VsdGltYS5cbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjI3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiw4ggcG9zc2liaWxlIG1vZGlmaWNhcmUgaWwgY29tbWl0IG9yYSBjb25cbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIlF1YW5kbyBzZWkgc29kZGlzZmF0dG8gZGVsbGUgbW9kaWZpY2hlLCBlc2VndWlcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjI5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHNoYTE6IG5vdCBhIGNvbW1pdCB0aGF0IGNhbiBiZSBwaWNrZWQiCittc2dzdHIgIiRzaGExOiBub24gw6ggdW4gY29tbWl0IGNoZSBwb3NzYSBlc3NlcmUgc2NlbHRvIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzM0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKK21zZ3N0ciAiTm9tZSBjb21taXQgbm9uIHZhbGlkbzogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozNjQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgc2NyaXZlcmUgbG8gU0hBMSBkZWwgY29tbWl0IGNoZSBkb3ZyZWJiZSBzb3N0aXR1aXJlIHF1ZWxsbyAiCisiY29ycmVudGUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAiRmFzdCBmb3J3YXJkIGEgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGZhc3QgZm9yd2FyZCBhICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgbW92ZSBIRUFEIHRvICRmaXJzdF9wYXJlbnQiCittc2dzdHIgIkltcG9zc2liaWxlIHNwb3N0YXJlIGwnSEVBRCBhICRmaXJzdF9wYXJlbnQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiAkc2hhMSIKK21zZ3N0ciAiTWkgcmlmaXV0byBkaSBlc2VndWlyZSBsbyBzcXVhc2ggZGkgdW4gbWVyZ2U6ICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWRvaW5nIG1lcmdlICRzaGExIgorbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBsYSByaWVzZWN1emlvbmUgZGVsIG1lcmdlIGRpICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDU4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGljayAkc2hhMSIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2NlZ2xpZXJlICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJHtufToiCittc2dzdHIgIlF1ZXN0byDDqCBpbCBtZXNzYWdnaW8gZGkgY29tbWl0IG51bWVybyAke259OiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMke259IHdpbGwgYmUgc2tpcHBlZDoiCittc2dzdHIgIklsIG1lc3NhZ2dpbyBkaSBjb21taXQgbnVtZXJvICR7bn0gc2Fyw6Agc2FsdGF0bzoiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0ODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0LiIKK21zZ2lkX3BsdXJhbCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXRzLiIKK21zZ3N0clswXSAiUXVlc3RhIMOoIHVuYSBjb21iaW5hemlvbmUgZGkgJGNvdW50IGNvbW1pdC4iCittc2dzdHJbMV0gIlF1ZXN0YSDDqCB1bmEgY29tYmluYXppb25lIGRpICRjb3VudCBjb21taXQuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgJGZpeHVwX21zZyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2NyaXZlcmUgJGZpeHVwX21zZyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5NQorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHMuIgorbXNnc3RyICJRdWVzdGEgw6ggdW5hIGNvbWJpbmF6aW9uZSBkaSAyIGNvbW1pdC4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1MzYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU3OQorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICRzaGExLi4uICRyZXN0IgorbXNnc3RyICJJbXBvc3NpYmlsZSBhcHBsaWNhcmUgJHNoYTEuLi4gJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgYW1lbmQgY29tbWl0IGFmdGVyIHN1Y2Nlc3NmdWxseSBwaWNraW5nICRzaGExLi4uICRyZXN0XG4iCisiVGhpcyBpcyBtb3N0IGxpa2VseSBkdWUgdG8gYW4gZW1wdHkgY29tbWl0IG1lc3NhZ2UsIG9yIHRoZSBwcmUtY29tbWl0IGhvb2tcbiIKKyJmYWlsZWQuIElmIHRoZSBwcmUtY29tbWl0IGhvb2sgZmFpbGVkLCB5b3UgbWF5IG5lZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUgIgorImJlZm9yZVxuIgorInlvdSBhcmUgYWJsZSB0byByZXdvcmQgdGhlIGNvbW1pdC4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBtb2RpZmljYXJlIGlsIGNvbW1pdCBkb3BvIGxhIHNjZWx0YSBkaSAkc2hhMS4uLiAkcmVzdFxuIgorIk1vbHRvIHByb2JhYmlsbWVudGUgcXVlc3RvIMOoIGRvdnV0byBhIHVuIG1lc3NhZ2dpbyBkaSBjb21taXQgdnVvdG8sIG9wcHVyZVxuIgorImwnZXNlY3V6aW9uZSBkZWxsJ2hvb2sgZGkgcHJlLWNvbW1pdCBub24gw6ggcml1c2NpdGEuIEluIHF1ZXN0J3VsdGltbyBjYXNvLFxuIgorInBvdHJlYmJlIGVzc2VyZSBuZWNlc3NhcmlvIHJpc29sdmVyZSBpbCBwcm9ibGVtYSBldmlkZW56aWF0byBwZXIgZXNzZXJlIGluXG4iCisiZ3JhZG8gZGkgbW9kaWZpY2FyZSBpbCBtZXNzYWdnaW8gZGkgY29tbWl0LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCittc2dzdHIgIkZlcm1hdG8gYSAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAnJHNxdWFzaF9zdHlsZScgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgJyRzcXVhc2hfc3R5bGUnIHNlbnphIHVuIGNvbW1pdCBwcmVjZWRlbnRlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmc6ICRyZXN0IgorbXNnc3RyICJFc2VndW8gJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBmYWlsZWQ6ICRyZXN0IgorbXNnc3RyICJFc2VjdXppb25lIG5vbiByaXVzY2l0YTogJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTMKK21zZ2lkICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiZSBzb25vIHN0YXRlIGFwcG9ydGF0ZSBtb2RpZmljaGUgYWxsJ2luZGljZSBlL28gYWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTUKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiUHVvaSBjb3JyZWdnZXJlIGlsIHByb2JsZW1hIGUgcXVpbmRpIGVzZWd1aXJlXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyMuIFRSQU5TTEFUT1JTOiBhZnRlciB0aGVzZSBsaW5lcyBpcyBhIGNvbW1hbmQgdG8gYmUgaXNzdWVkIGJ5IHRoZSB1c2VyCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRXhlY3V0aW9uIHN1Y2NlZWRlZDogJHJlc3RcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiRXNlY3V6aW9uZSByaXVzY2l0YTogJHJlc3RcbiIKKyJtYSBzb25vIHN0YXRlIG1hbnRlbnV0ZSBtb2RpZmljaGUgYWxsJ2luZGljZSBlL28gYWxsJ2FsYmVybyBkaSBsYXZvcm9cbiIKKyJFc2VndWkgaWwgY29tbWl0IG8gbG8gc3Rhc2ggZGVsbGUgbW9kaWZpY2hlLCBxdWluZGkgZXNlZ3VpXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWFuZDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCittc2dzdHIgIkNvbWFuZG8gc2Nvbm9zY2l1dG86ICRjb21tYW5kICRzaGExICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzIwCittc2dpZCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgIkNvcnJlZ2dpIGxhIHNpdHVhemlvbmUgdXNhbmRvICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkICRoZWFkX25hbWUuIgorbXNnc3RyICJSZWJhc2UgZSBhZ2dpb3JuYW1lbnRvIGRpICRoZWFkX25hbWUgZXNlZ3VpdGkgY29uIHN1Y2Nlc3NvLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxMgorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmltdW92ZXJlIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZVxuIgorInNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJIYWkgbW9kaWZpY2hlIGluIHN0YWdpbmcgbmVsbCdhbGJlcm8gZGkgbGF2b3JvLlxuIgorIlNlIHF1ZXN0ZSBtb2RpZmljaGUgZGV2b25vIGVzc2VyZSBzb3R0b3Bvc3RlIGEgc3F1YXNoIG5lbCBjb21taXRcbiIKKyJwcmVjZWRlbnRlLCBlc2VndWk6XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJTZSBkZXZvbm8gZXNzZXJlIGluY2x1c2UgaW4gdW4gbnVvdm8gY29tbWl0LCBlc2VndWk6XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSW4gZW50cmFtYmkgaSBjYXNpLCB1bmEgdm9sdGEgZmluaXRvLCBjb250aW51YSBjb246XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgzNAorbXNnaWQgIkVycm9yIHRyeWluZyB0byBmaW5kIHRoZSBhdXRob3IgaWRlbnRpdHkgdG8gYW1lbmQgY29tbWl0IgorbXNnc3RyICIiCisiRXJyb3JlIGR1cmFudGUgbGEgcmljZXJjYSBkZWxsJ2lkZW50aXTDoCBkZWxsJ2F1dG9yZSBwZXIgbGEgbW9kaWZpY2EgZGVsICIKKyJjb21taXQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzkKK21zZ2lkICIiCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAiIgorIkNpIHNvbm8gbW9kaWZpY2hlIGRpIGN1aSBub24gw6ggc3RhdG8gZXNlZ3VpdG8gaWwgY29tbWl0IG5lbCB0dW8gYWxiZXJvXG4iCisiZGkgbGF2b3JvLiBFc2VndWluZSBwcmltYSBpbCBjb21taXQgZSBxdWluZGkgZXNlZ3VpIG51b3ZhbWVudGUgJ2dpdCByZWJhc2VcbiIKKyItLWNvbnRpbnVlJy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0OAorbXNnaWQgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBjb21taXQgZGVsbGUgbW9kaWZpY2hlIGluIHN0YWdpbmcuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODc5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NjUKK21zZ2lkICJDb3VsZCBub3QgZXhlY3V0ZSBlZGl0b3IiCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGwnZWRpdG9yIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgY2hlY2tvdXQgZGkgJHN3aXRjaF90byIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwNworbXNnaWQgIk5vIEhFQUQ/IgorbXNnc3RyICJOZXNzdW4nSEVBRD8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICRzdGF0ZV9kaXIiCittc2dzdHIgIkltcG9zc2liaWxlIGNyZWFyZSBsYSBkaXJlY3RvcnkgdGVtcG9yYW5lYSAkc3RhdGVfZGlyIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTExCittc2dpZCAiQ291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIkltcG9zc2liaWxlIGNvbnRyYXNzZWduYXJlIGNvbWUgaW50ZXJhdHRpdm8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmQpIgorbXNnaWRfcGx1cmFsICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kcykiCittc2dzdHJbMF0gIlJlYmFzZSBkaSAkc2hvcnRyZXZpc2lvbnMgc3UgJHNob3J0b250byAoJHRvZG9jb3VudCBjb21hbmRvKSIKK21zZ3N0clsxXSAiUmViYXNlIGRpICRzaG9ydHJldmlzaW9ucyBzdSAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbWFuZGkpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTU1Cittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgIk5vdGEgY2hlIGkgY29tbWl0IHZ1b3RpIHNvbm8gY29tbWVudGF0aSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk5NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTAwMgorbXNnaWQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBpbml6aWFsaXp6YXJlIGkgY29tbWl0IHJpc2NyaXR0aSIKKworIzogZ2l0LXNoLXNldHVwLnNoOjg5IGdpdC1zaC1zZXR1cC5zaDo5NAorIywgc2gtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICRkYXNobGVzcyAkVVNBR0UiCittc2dzdHIgInVzbzogJGRhc2hsZXNzICRVU0FHRSIKKworIzogZ2l0LXNoLXNldHVwLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGNoZGlyIHRvICRjZHVwLCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIG1vZGlmaWNhcmUgbGEgZGlyZWN0b3J5IGNvcnJlbnRlIGluICRjZHVwLCBpbCBwcmltbyBsaXZlbGxvICIKKyJkZWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMDAgZ2l0LXNoLXNldHVwLnNoOjIwNworIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6ICRwcm9ncmFtX25hbWUgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIiIKKyJlcnJvcmUgZmF0YWxlOiAkcHJvZ3JhbV9uYW1lIG5vbiBwdcOyIGVzc2VyZSB1c2F0byBzZW56YSB1biBhbGJlcm8gZGkgbGF2b3JvLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyMQorbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgcmViYXNlOiBjaSBzb25vIGRlbGxlIG1vZGlmaWNoZSBub24gaW4gc3RhZ2luZy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjQKK21zZ2lkICJDYW5ub3QgcmV3cml0ZSBicmFuY2hlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSByaXNjcml2ZXJlIGkgYnJhbmNoOiBjaSBzb25vIGRlbGxlIG1vZGlmaWNoZSBub24gaW4gc3RhZ2luZy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjcKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSB1biBwdWxsIHNlZ3VpdG8gZGEgdW4gcmViYXNlOiBjaSBzb25vIGRlbGxlIG1vZGlmaWNoZSAiCisibm9uIGluIHN0YWdpbmcuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlICRhY3Rpb246IGNpIHNvbm8gZGVsbGUgbW9kaWZpY2hlIG5vbiBpbiBzdGFnaW5nLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0MworbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSB1biByZWJhc2U6OiBsJ2luZGljZSBjb250aWVuZSBtb2RpZmljaGUgZGkgY3VpIG5vbiDDqCAiCisic3RhdG8gZXNlZ3VpdG8gaWwgY29tbWl0LiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0NgorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgdW4gcHVsbCBzZWd1aXRvIGRhIHVuIHJlYmFzZTogbCdpbmRpY2UgY29udGllbmUgIgorIm1vZGlmaWNoZSBkaSBjdWkgbm9uIMOoIHN0YXRvIGVzZWd1aXRvIGlsIGNvbW1pdC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgJGFjdGlvbjogbCdpbmRpY2UgY29udGllbmUgbW9kaWZpY2hlIGRpIGN1aSBub24gw6ggc3RhdG8gIgorImVzZWd1aXRvIGlsIGNvbW1pdC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTMKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJJbm9sdHJlLCBsJ2luZGljZSBjb250aWVuZSBtb2RpZmljaGUgZGkgY3VpIG5vbiDDqCBzdGF0byBlc2VndWl0byBpbCBjb21taXQuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MzczCittc2dpZCAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiRGV2aSBlc2VndWlyZSBxdWVzdG8gY29tYW5kbyBkYWwgcHJpbW8gbGl2ZWxsbyBkZWxsJ2FsYmVybyBkaSBsYXZvcm8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6Mzc4Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIkltcG9zc2liaWxlIGRldGVybWluYXJlIGlsIHBlcmNvcnNvIGFzc29sdXRvIGRlbGxhIGRpcmVjdG9yeSBHaXQiCisKKyMuIFRSQU5TTEFUT1JTOiB5b3UgY2FuIGFkanVzdCB0aGlzIHRvIGFsaWduICJnaXQgYWRkIC1pIiBzdGF0dXMgbWVudQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJTEycyAlMTJzICVzIgorbXNnc3RyICIlMjBzICUzMnMgJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInRvdWNoZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ0b3VjaGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gImVzZWd1aXRvIHRvdWNoIHN1ICVkIHBlcmNvcnNvXG4iCittc2dzdHJbMV0gImVzZWd1aXRvIHRvdWNoIHN1ICVkIHBlcmNvcnNpXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1MworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy4iCittc2dzdHIgIiIKKyJTZSBsYSBwYXRjaCB2aWVuZSBhcHBsaWNhdGEgc2VuemEgcHJvYmxlbWksIGwnaHVuayBtb2RpZmljYXRvIHNhcsOgXG4iCisiY29udHJhc3NlZ25hdG8gaW1tZWRpYXRhbWVudGUgcGVyIGwnYWdnaXVudGEgYWxsJ2FyZWEgZGkgc3RhZ2luZy4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1NgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3Rhc2hpbmcuIgorbXNnc3RyICIiCisiU2UgbGEgcGF0Y2ggdmllbmUgYXBwbGljYXRhIHNlbnphIHByb2JsZW1pLCBsJ2h1bmsgbW9kaWZpY2F0byBzYXLDoFxuIgorImNvbnRyYXNzZWduYXRvIGltbWVkaWF0YW1lbnRlIHBlciBsbyBzdGFzaC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1OQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgdW5zdGFnaW5nLiIKK21zZ3N0ciAiIgorIlNlIGxhIHBhdGNoIHZpZW5lIGFwcGxpY2F0YSBzZW56YSBwcm9ibGVtaSwgbCdodW5rIG1vZGlmaWNhdG8gc2Fyw6BcbiIKKyJjb250cmFzc2VnbmF0byBpbW1lZGlhdGFtZW50ZSBwZXIgbGEgcmltb3ppb25lIGRhbGwnYXJlYSBkaSBzdGFnaW5nLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDYyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3MQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc3Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBhcHBseWluZy4iCittc2dzdHIgIiIKKyJTZSBsYSBwYXRjaCB2aWVuZSBhcHBsaWNhdGEgc2VuemEgcHJvYmxlbWksIGwnaHVuayBtb2RpZmljYXRvIHNhcsOgXG4iCisiY29udHJhc3NlZ25hdG8gaW1tZWRpYXRhbWVudGUgcGVyIGwnYXBwbGljYXppb25lLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc0Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBkaXNjYXJkaW5nLiIKK21zZ3N0ciAiIgorIlNlIGxhIHBhdGNoIHZpZW5lIGFwcGxpY2F0YSBzZW56YSBwcm9ibGVtaSwgbCdodW5rIG1vZGlmaWNhdG8gc2Fyw6BcbiIKKyJjb250cmFzc2VnbmF0byBpbW1lZGlhdGFtZW50ZSBwZXIgbGEgcmltb3ppb25lLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTExCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAiYXBlcnR1cmEgZGVsIGZpbGUgZGkgbW9kaWZpY2EgaHVuayBpbiBzY3JpdHR1cmEgbm9uIHJpdXNjaXRhOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJXMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisiLS0tXG4iCisiUGVyIHJpbXVvdmVyZSAnJXMnIHJpZ2hlLCByZW5kaWxlIHJpZ2hlICcgJyAoY29udGVzdG8pLlxuIgorIlBlciByaW11b3ZlcmUgJyVzJyByaWdoZSwgZWxpbWluYWxlLlxuIgorIkxlIHJpZ2hlIGNoZSBpbml6aWFubyBjb24gJXMgc2FyYW5ubyByaW1vc3NlLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExNDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHJlYWRpbmc6ICVzIgorbXNnc3RyICJhcGVydHVyYSBkZWwgZmlsZSBkaSBtb2RpZmljYSBodW5rIGluIGxldHR1cmEgbm9uIHJpdXNjaXRhOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjQ4Cittc2dpZCAiIgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGFnZ2l1bmdpIHF1ZXN0J2h1bmsgYWxsJ2FyZWEgZGkgc3RhZ2luZ1xuIgorIm4gLSBub24gYWdnaXVuZ2VyZSBxdWVzdCdodW5rIGFsbCdhcmVhIGRpIHN0YWdpbmdcbiIKKyJxIC0gZXNjaTsgbm9uIGFnZ2l1bmdlcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSByaW1hbmVudGkgYWxsJ2FyZWEgZGkgIgorInN0YWdpbmdcbiIKKyJhIC0gYWdnaXVuZ2kgcXVlc3QnaHVuayBlIHR1dHRpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlIGFsbCdhcmVhIGRpICIKKyJzdGFnaW5nXG4iCisiZCAtIG5vbiBhZ2dpdW5nZXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZSBhbGwnYXJlYSBkaSAiCisic3RhZ2luZyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjU0Cittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGVzZWd1aSBsbyBzdGFzaCBkaSBxdWVzdCdodW5rXG4iCisibiAtIG5vbiBlc2VndWlyZSBsbyBzdGFzaCBkaSBxdWVzdCdodW5rXG4iCisicSAtIGVzY2k7IG5vbiBlc2VndWlyZSBsbyBzdGFzaCBkaSBxdWVzdCdodW5rIG7DqSBkaSBxdWVsbGkgcmltYW5lbnRpXG4iCisiYSAtIGVzZWd1aSBsbyBzdGFzaCBkaSBxdWVzdCdodW5rIGUgZGkgdHV0dGkgcXVlbGxpIHN1Y2Nlc3NpdmkgbmVsIGZpbGVcbiIKKyJkIC0gbm9uIGVzZWd1aXJlIGxvIHN0YXNoIG7DqSBkaSBxdWVzdCdodW5rIG7DqSBkaSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjYwCittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSByaW11b3ZpIHF1ZXN0J2h1bmsgZGFsbCdhcmVhIGRpIHN0YWdpbmdcbiIKKyJuIC0gbm9uIHJpbXVvdmVyZSBxdWVzdCdodW5rIGRhbGwnYXJlYSBkaSBzdGFnaW5nXG4iCisicSAtIGVzY2k7IG5vbiByaW11b3ZlcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSByaW1hbmVudGkgZGFsbCdhcmVhIGRpICIKKyJzdGFnaW5nXG4iCisiYSAtIHJpbXVvdmkgcXVlc3QnaHVuayBlIHR1dHRpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlIGRhbGwnYXJlYSBkaSAiCisic3RhZ2luZ1xuIgorImQgLSBub24gcmltdW92ZXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZSBkYWxsJ2FyZWEgZGkgIgorInN0YWdpbmciCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBhcHBsaWNhIHF1ZXN0J2h1bmsgYWxsJ2luZGljZVxuIgorIm4gLSBub24gYXBwbGljYXJlIHF1ZXN0J2h1bmsgYWxsJ2luZGljZVxuIgorInEgLSBlc2NpOyBub24gYXBwbGljYXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgcmltYW5lbnRpXG4iCisiYSAtIGFwcGxpY2EgcXVlc3QnaHVuayBlIHR1dHRpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlXG4iCisiZCAtIG5vbiBhcHBsaWNhcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjkwCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gcmltdW92aSBxdWVzdCdodW5rIGRhbGwnYWxiZXJvIGRpIGxhdm9yb1xuIgorIm4gLSBub24gcmltdW92ZXJlIHF1ZXN0J2h1bmsgZGFsbCdhbGJlcm8gZGkgbGF2b3JvXG4iCisicSAtIGVzY2k7IG5vbiByaW11b3ZlcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSByaW1hbmVudGlcbiIKKyJhIC0gcmltdW92aSBxdWVzdCdodW5rIGUgdHV0dGkgcXVlbGxpIHN1Y2Nlc3NpdmkgbmVsIGZpbGVcbiIKKyJkIC0gbm9uIHJpbXVvdmVyZSBuw6kgcXVlc3QnaHVuayBuw6kgcXVlbGxpIHN1Y2Nlc3NpdmkgbmVsIGZpbGUiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3OAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gcmltdW92aSBxdWVzdCdodW5rIGRhbGwnaW5kaWNlIGUgZGFsbCdhbGJlcm8gZGkgbGF2b3JvXG4iCisibiAtIG5vbiByaW11b3ZlcmUgcXVlc3QnaHVuayBkYWxsJ2luZGljZSBlIGRhbGwnYWxiZXJvIGRpIGxhdm9yb1xuIgorInEgLSBlc2NpOyBub24gcmltdW92ZXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgcmltYW5lbnRpXG4iCisiYSAtIHJpbXVvdmkgcXVlc3QnaHVuayBlIHR1dHRpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlXG4iCisiZCAtIG5vbiByaW11b3ZlcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyODQKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBhcHBsaWNhIHF1ZXN0J2h1bmsgYWxsJ2luZGljZSBlIGFsbCdhbGJlcm8gZGkgbGF2b3JvXG4iCisibiAtIG5vbiBhcHBsaWNhcmUgcXVlc3QnaHVuayBhbGwnaW5kaWNlIGUgYWxsJ2FsYmVybyBkaSBsYXZvcm9cbiIKKyJxIC0gZXNjaTsgbm9uIGFwcGxpY2FyZSBuw6kgcXVlc3QnaHVuayBuw6kgcXVlbGxpIHJpbWFuZW50aVxuIgorImEgLSBhcHBsaWNhIHF1ZXN0J2h1bmsgZSB0dXR0aSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZVxuIgorImQgLSBub24gYXBwbGljYXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjk2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGFwcGxpY2EgcXVlc3QnaHVuayBhbGwnYWxiZXJvIGRpIGxhdm9yb1xuIgorIm4gLSBub24gYXBwbGljYXJlIHF1ZXN0J2h1bmsgYWxsJ2FsYmVybyBkaSBsYXZvcm9cbiIKKyJxIC0gZXNjaTsgbm9uIGFwcGxpY2FyZSBuw6kgcXVlc3QnaHVuayBuw6kgcXVlbGxpIHJpbWFuZW50aVxuIgorImEgLSBhcHBsaWNhIHF1ZXN0J2h1bmsgZSB0dXR0aSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZVxuIgorImQgLSBub24gYXBwbGljYXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzExCittc2dpZCAiIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiZyAtIHNlbGV6aW9uYSB1biBodW5rIGEgY3VpIGFuZGFyZVxuIgorIi8gLSBjZXJjYSB1biBodW5rIGNvcnJpc3BvbmRlbnRlIGFsbCdlc3ByZXNzaW9uZSByZWdvbGFyZSBkYXRhXG4iCisiaiAtIG5vbiBkZWNpZGVyZSBpbiBtZXJpdG8gYSBxdWVzdCdodW5rLCB2YWkgYWwgc3VjY2Vzc2l2byBodW5rIHBlciBjdWkgbm9uICIKKyLDqCBzdGF0YSBwcmVzYSB1bmEgZGVjaXNpb25lXG4iCisiSiAtIG5vbiBkZWNpZGVyZSBpbiBtZXJpdG8gYSBxdWVzdCdodW5rLCB2YWkgYWxsJ2h1bmsgc3VjY2Vzc2l2b1xuIgorImsgLSBub24gZGVjaWRlcmUgaW4gbWVyaXRvIGEgcXVlc3QnaHVuaywgdmFpIGFsIHByZWNlZGVudGUgaHVuayBwZXIgY3VpIG5vbiAiCisiw6ggc3RhdGEgcHJlc2EgdW5hIGRlY2lzaW9uZVxuIgorIksgLSBub24gZGVjaWRlcmUgaW4gbWVyaXRvIGEgcXVlc3QnaHVuaywgdmFpIGFsbCdodW5rIHByZWNlZGVudGVcbiIKKyJzIC0gc3VkZGl2aWRpIGwnaHVuayBjb3JyZW50ZSBpbiBodW5rIHBpw7kgcGljY29saVxuIgorImUgLSBtb2RpZmljYSBtYW51YWxtZW50ZSBsJ2h1bmsgY29ycmVudGVcbiIKKyI/IC0gc3RhbXBhIHVuYSBndWlkYVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDIKK21zZ2lkICJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCFcbiIKK21zZ3N0ciAiR2xpIGh1bmsgc2VsZXppb25hdGkgbm9uIHNpIGFwcGxpY2FubyBzZW56YSBwcm9ibGVtaSBhbGwnaW5kaWNlIVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdW5tZXJnZWQ6ICVzXG4iCittc2dzdHIgImlnbm9ybyBjacOyIGNoZSBub24gw6ggc3RhdG8gc290dG9wb3N0byBhIG1lcmdlOiAlc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwcGxpY2FyZSBsYSBtb2RpZmljYSBtb2RvIGFsbCdhbGJlcm8gZGkgbGF2b3JvIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwcGxpY2FyZSBsJ2VsaW1pbmF6aW9uZSBhbGwnYWxiZXJvIGRpIGxhdm9ybyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDcwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBwbGljYXJlIHF1ZXN0J2h1bmsgYWxsJ2FsYmVybyBkaSBsYXZvcm8gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3MAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG9cbiIKK21zZ3N0ciAiTmVzc3VuIGFsdHJvIGh1bmsgYSBjdWkgYW5kYXJlXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU4OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJ1xuIgorbXNnc3RyICJOdW1lcm8gbm9uIHZhbGlkbzogJyVzJ1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1OTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU29ycnksIG9ubHkgJWQgaHVuayBhdmFpbGFibGUuXG4iCittc2dpZF9wbHVyYWwgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS5cbiIKK21zZ3N0clswXSAiTWkgZGlzcGlhY2UsIMOoIGRpc3BvbmliaWxlIHNvbG8gJWQgaHVuay5cbiIKK21zZ3N0clsxXSAiTWkgZGlzcGlhY2UsIHNvbm8gZGlzcG9uaWJpbGkgc29sbyAlZCBodW5rLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MTkKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBzZWFyY2hcbiIKK21zZ3N0ciAiTmVzc3VuIGFsdHJvIGh1bmsgaW4gY3VpIHJpY2VyY2FyZVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MzYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzXG4iCittc2dzdHIgIkVzcHJlc3Npb25lIHJlZ29sYXJlIGRpIHJpY2VyY2EgJXMgbWFsZm9ybWF0YTogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjQ2Cittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iCittc2dzdHIgIk5lc3N1biBodW5rIGNvcnJpc3BvbmRlIGFsIHBhdHRlcm4gZm9ybml0b1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjgwCittc2dpZCAiTm8gcHJldmlvdXMgaHVua1xuIgorbXNnc3RyICJOZXNzdW4gaHVuayBwcmVjZWRlbnRlXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY2NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODYKK21zZ2lkICJObyBuZXh0IGh1bmtcbiIKK21zZ3N0ciAiTmVzc3VuIGh1bmsgc3VjY2Vzc2l2b1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2OTIKK21zZ2lkICJTb3JyeSwgY2Fubm90IHNwbGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICJNaSBkaXNwaWFjZSwgbm9uIHBvc3NvIHN1ZGRpdmlkZXJlIHF1ZXN0J2h1bmtcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjk4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVuay5cbiIKK21zZ2lkX3BsdXJhbCAiU3BsaXQgaW50byAlZCBodW5rcy5cbiIKK21zZ3N0clswXSAiU3VkZGl2aXNvIGluICVkIGh1bmsuXG4iCittc2dzdHJbMV0gIlN1ZGRpdmlzbyBpbiAlZCBodW5rLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3MDgKK21zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIk1pIGRpc3BpYWNlLCBub24gcG9zc28gbW9kaWZpY2FyZSBxdWVzdCdodW5rXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2UgZG8gbm90IHRyYW5zbGF0ZSB0aGUgY29tbWFuZCBuYW1lcworIy4gJ3N0YXR1cycsICd1cGRhdGUnLCAncmV2ZXJ0JywgZXRjLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzczCittc2dpZCAiIgorInN0YXR1cyAgICAgICAgLSBzaG93IHBhdGhzIHdpdGggY2hhbmdlc1xuIgorInVwZGF0ZSAgICAgICAgLSBhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXNcbiIKKyJyZXZlcnQgICAgICAgIC0gcmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb25cbiIKKyJwYXRjaCAgICAgICAgIC0gcGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5XG4iCisiZGlmZiAgICAgICAgICAtIHZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4XG4iCisiYWRkIHVudHJhY2tlZCAtIGFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgIgorImNoYW5nZXNcbiIKK21zZ3N0ciAiIgorInN0YXR1cyAgICAgICAgLSB2aXN1YWxpenphIGkgcGVyY29yc2kgY29uIG1vZGlmaWNoZVxuIgorInVwZGF0ZSAgICAgICAgLSBhZ2dpdW5nZSBsbyBzdGF0byBkZWxsJ2FsYmVybyBkaSBsYXZvcm8gYWxsJ2luc2llbWUgZGVsbGVcbiIKKyIgICAgICAgICAgICAgICAgbW9kaWZpY2hlIG5lbGwnYXJlYSBkaSBzdGFnaW5nXG4iCisicmV2ZXJ0ICAgICAgICAtIHJpcHJpc3RpbmEgbCdpbnNpZW1lIGRlbGxlIG1vZGlmaWNoZSBuZWxsJ2FyZWEgZGkgc3RhZ2luZ1xuIgorIiAgICAgICAgICAgICAgICBhbGxhIHZlcnNpb25lIEhFQURcbiIKKyJwYXRjaCAgICAgICAgIC0gc2VsZXppb25hIGUgYWdnaW9ybmEgZ2xpIGh1bmsgaW4gbW9kbyBzZWxldHRpdm9cbiIKKyJkaWZmICAgICAgICAgIC0gdmlzdWFsaXp6YSBsZSBkaWZmZXJlbnplIGZyYSBIRUFEIGUgbCdpbmRpY2VcbiIKKyJhZGQgdW50cmFja2VkIC0gYWdnaXVuZ2UgaSBjb250ZW51dGkgZGVpIGZpbGUgbm9uIHRyYWNjaWF0aSBhbGwnaW5zaWVtZSBkaVxuIgorIiAgICAgICAgICAgICAgICBtb2RpZmljaGUgbmVsbCdhcmVhIGRpIHN0YWdpbmdcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzkwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5NQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgwNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgxNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNQorbXNnaWQgIm1pc3NpbmcgLS0iCittc2dzdHIgIi0tIG1hbmNhbnRlIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5rbm93biAtLXBhdGNoIG1vZGU6ICVzIgorbXNnc3RyICJtb2RhbGl0w6AgLS1wYXRjaCBzY29ub3NjaXV0YTogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcywgZXhwZWN0aW5nIC0tIgorbXNnc3RyICJhcmdvbWVudG8gJXMgbm9uIHZhbGlkbywgYXR0ZXNvIC0tIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzOAorbXNnaWQgImxvY2FsIHpvbmUgZGlmZmVycyBmcm9tIEdNVCBieSBhIG5vbi1taW51dGUgaW50ZXJ2YWxcbiIKK21zZ3N0ciAiIgorImlsIGZ1c28gb3JhcmlvIGxvY2FsZSBkaWZmZXJpc2NlIGRhIEdNVCBkaSB1biBpbnRlcnZhbGxvIG5vbiBtdWx0aXBsbyBkaSB1biAiCisibWludXRvXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ1IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUxCittc2dpZCAibG9jYWwgdGltZSBvZmZzZXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDI0IGhvdXJzXG4iCittc2dzdHIgImwnb2Zmc2V0IGRlbCBmdXNvIG9yYXJpbyBsb2NhbGUgw6ggbWFnZ2lvcmUgbyB1Z3VhbGUgYSAyNCBvcmVcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoyMjMgZ2l0LXNlbmQtZW1haWwucGVybDoyMjkKK21zZ2lkICJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciCittc2dzdHIgImwnZWRpdG9yIG5vbiDDqCB0ZXJtaW5hdG8gcmVnb2xhcm1lbnRlLCBpbnRlcnJvbXBvIHR1dHRlIGxlIG9wZXJhemlvbmkiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzEwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvbnRhaW5zIGFuIGludGVybWVkaWF0ZSB2ZXJzaW9uIG9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iCittc2dzdHIgIiIKKyInJXMnIGNvbnRpZW5lIHVuYSB2ZXJzaW9uZSBpbnRlcm1lZGlhIGRlbGwnZS1tYWlsIGNoZSBzdGF2aSBjb21wb25lbmRvLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMxNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICInJXMuZmluYWwnIGNvbnRhaW5zIHRoZSBjb21wb3NlZCBlbWFpbC5cbiIKK21zZ3N0ciAiJyVzLmZpbmFsJyBjb250aWVuZSBsJ2UtbWFpbCBjb21wb3N0YS5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0MDgKK21zZ2lkICItLWR1bXAtYWxpYXNlcyBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBvcHRpb25zXG4iCittc2dzdHIgIi0tZHVtcC1hbGlhc2VzIG5vbiDDqCBjb21wYXRpYmlsZSBjb24gYWx0cmUgb3B6aW9uaVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4MSBnaXQtc2VuZC1lbWFpbC5wZXJsOjY4MworbXNnaWQgIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGdpdCBmb3JtYXQtcGF0Y2ggYWwgZGkgZnVvcmkgZGkgdW4gcmVwb3NpdG9yeVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4NAorbXNnaWQgIiIKKyJgYmF0Y2gtc2l6ZWAgYW5kIGByZWxvZ2luYCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciAodmlhIGNvbW1hbmQtbGluZSBvciAiCisiY29uZmlndXJhdGlvbiBvcHRpb24pXG4iCittc2dzdHIgIiIKKyJgYmF0Y2gtc2l6ZWAgZSBgcmVsb2dpbmAgZGV2b25vIGVzc2VyZSBzcGVjaWZpY2F0aSBpbnNpZW1lIChzdWxsYSByaWdhIGRpICIKKyJjb21hbmRvIG8gdHJhbWl0ZSB1bidvcHppb25lIGRpIGNvbmZpZ3VyYXppb25lKVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ5NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tc3VwcHJlc3MtY2MgZmllbGQ6ICclcydcbiIKK21zZ3N0ciAiQ2FtcG8gLS1zdXBwcmVzcy1jYyBzY29ub3NjaXV0bzogJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tY29uZmlybSBzZXR0aW5nOiAnJXMnXG4iCittc2dzdHIgIkltcG9zdGF6aW9uZSAtLWNvbmZpcm0gc2Nvbm9zY2l1dGE6ICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgYWxpYXMgd2l0aCBxdW90ZXMgaXMgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiYXR0ZW56aW9uZTogbm9uIHNvbm8gc3VwcG9ydGF0aSBhbGlhcyBzZW5kbWFpbCBjb24gdmlyZ29sZXR0ZTogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYDppbmNsdWRlOmAgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiYXR0ZW56aW9uZTogYDppbmNsdWRlOmAgbm9uIHN1cHBvcnRhdG86ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTYwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGAvZmlsZWAgb3IgYHxwaXBlYCByZWRpcmVjdGlvbiBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICJhdHRlbnppb25lOiByZWRpcmV6aW9uaSBgL2ZpbGVgIG8gYHxwaXBlYCBub24gc3VwcG9ydGF0ZTogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgbGluZSBpcyBub3QgcmVjb2duaXplZDogJXNcbiIKK21zZ3N0ciAiYXR0ZW56aW9uZTogcmlnYSBzZW5kbWFpbCBub24gcmljb25vc2NpdXRhOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY0OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSAnJXMnIGV4aXN0cyBidXQgaXQgY291bGQgYWxzbyBiZSB0aGUgcmFuZ2Ugb2YgY29tbWl0c1xuIgorInRvIHByb2R1Y2UgcGF0Y2hlcyBmb3IuICBQbGVhc2UgZGlzYW1iaWd1YXRlIGJ5Li4uXG4iCisiXG4iCisiICAgICogU2F5aW5nIFwiLi8lc1wiIGlmIHlvdSBtZWFuIGEgZmlsZTsgb3JcbiIKKyIgICAgKiBHaXZpbmcgLS1mb3JtYXQtcGF0Y2ggb3B0aW9uIGlmIHlvdSBtZWFuIGEgcmFuZ2UuXG4iCittc2dzdHIgIiIKKyJJbCBmaWxlICclcycgZXNpc3RlIG1hIHRhbGUgc3RyaW5nYSBwb3RyZWJiZSBjb3JyaXNwb25kZXJlXG4iCisiYW5jaGUgYWxsJ2ludGVydmFsbG8gZGkgY29tbWl0IHBlciBjdWkgZ2VuZXJhcmUgZGVsbGUgcGF0Y2guXG4iCisiU3BlY2lmaWNhIHF1YWwgw6ggaWwgY2FzbyBjb3JyZXR0by4uLlxuIgorIlxuIgorIiAgICAqIC4uLnVzYW5kbyBcIi4vJXNcIiBzZSBpbnRlbmRpIHJpZmVyaXJ0aSBhbCBmaWxlLCBvLi4uXG4iCisiICAgICogLi4uZm9ybmVuZG8gbCdvcHppb25lIC0tZm9ybWF0LXBhdGNoIHNlIHRpIHJpZmVyaXNjaVxuIgorIiAgICAgIGEgdW4gaW50ZXJ2YWxsby5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW5kaXIgJXM6ICVzIgorbXNnc3RyICJvcGVuZGlyIGRpICVzIG5vbiByaXVzY2l0YTogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6Njk0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJmYXRhbDogJXM6ICVzXG4iCisid2FybmluZzogbm8gcGF0Y2hlcyB3ZXJlIHNlbnRcbiIKK21zZ3N0ciAiIgorImVycm9yZSBmYXRhbGU6ICVzOiAlc1xuIgorImF0dGVuemlvbmU6IG5vbiDDqCBzdGF0YSBpbnZpYXRhIGFsY3VuYSBwYXRjaFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcwNQorbXNnaWQgIiIKKyJcbiIKKyJObyBwYXRjaCBmaWxlcyBzcGVjaWZpZWQhXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOZXNzdW4gZmlsZSBwYXRjaCBzcGVjaWZpY2F0byFcbiIKKyJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTm8gc3ViamVjdCBsaW5lIGluICVzPyIKK21zZ3N0ciAiUmlnYSBvZ2dldHRvIGFzc2VudGUgaW4gJXM/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAlczogJXMiCittc2dzdHIgIkFwZXJ0dXJhIGRpICVzIGluIHNjcml0dHVyYSBub24gcml1c2NpdGE6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjczOQorbXNnaWQgIiIKKyJMaW5lcyBiZWdpbm5pbmcgaW4gXCJHSVQ6XCIgd2lsbCBiZSByZW1vdmVkLlxuIgorIkNvbnNpZGVyIGluY2x1ZGluZyBhbiBvdmVyYWxsIGRpZmZzdGF0IG9yIHRhYmxlIG9mIGNvbnRlbnRzXG4iCisiZm9yIHRoZSBwYXRjaCB5b3UgYXJlIHdyaXRpbmcuXG4iCisiXG4iCisiQ2xlYXIgdGhlIGJvZHkgY29udGVudCBpZiB5b3UgZG9uJ3Qgd2lzaCB0byBzZW5kIGEgc3VtbWFyeS5cbiIKK21zZ3N0ciAiIgorIkxlIHJpZ2hlIGNoZSBpbml6aWFubyBjb24gXCJHSVQ6XCIgc2FyYW5ubyByaW1vc3NlLlxuIgorIlZhbHV0YSBkaSBpbmNsdWRlcmUgdW4gZGlmZnN0YXQgZ2xvYmFsZSBvIHVuIHNvbW1hcmlvIHBlclxuIgorImxhIHBhdGNoIGNoZSBzdGFpIHNjcml2ZW5kby5cbiIKKyJcbiIKKyJSaW11b3ZpIGlsIGNvcnBvIHNlIG5vbiB2dW9pIGludmlhcmUgdW4gc29tbWFyaW8uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzOiAlcyIKK21zZ3N0ciAiQXBlcnR1cmEgZGkgJXMgbm9uIHJpdXNjaXRhOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3ODAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXMuZmluYWw6ICVzIgorbXNnc3RyICJBcGVydHVyYSBkaSAlcy5maW5hbCBub24gcml1c2NpdGE6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjgyMworbXNnaWQgIlN1bW1hcnkgZW1haWwgaXMgZW1wdHksIHNraXBwaW5nIGl0XG4iCittc2dzdHIgIkUtbWFpbCByaWFzc3VudGl2YSB2dW90YSwgbGEgb21ldHRvXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCBbeS9OXSBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1c2UgPCVzPiBbeS9OXT8gIgorbXNnc3RyICJVc2FyZSA8JXM+IFt5L05dPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTEzCittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIDhiaXQsIGJ1dCBkbyBub3QgZGVjbGFyZSBhIENvbnRlbnQtVHJhbnNmZXItIgorIkVuY29kaW5nLlxuIgorbXNnc3RyICIiCisiSSBzZWd1ZW50aSBmaWxlIHNvbm8gY29kaWZpY2F0aSBhIDggYml0IG1hIG5vbiBkaWNoaWFyYW5vIHVuIENvbnRlbnQtIgorIlRyYW5zZmVyLUVuY29kaW5nLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxOAorbXNnaWQgIldoaWNoIDhiaXQgZW5jb2Rpbmcgc2hvdWxkIEkgZGVjbGFyZSBbVVRGLThdPyAiCittc2dzdHIgIkNoZSBjb2RpZmljYSBhIDggYml0IGRldm8gZGljaGlhcmFyZSBbVVRGLThdPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTI2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJSZWZ1c2luZyB0byBzZW5kIGJlY2F1c2UgdGhlIHBhdGNoXG4iCisiXHQlc1xuIgorImhhcyB0aGUgdGVtcGxhdGUgc3ViamVjdCAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiBQYXNzIC0tZm9yY2UgaWYgeW91IHJlYWxseSAiCisid2FudCB0byBzZW5kLlxuIgorbXNnc3RyICIiCisiTWkgcmlmaXV0byBkaSBlc2VndWlyZSBsJ2ludmlvIHBlcmNow6kgbGEgcGF0Y2hcbiIKKyJcdCVzXG4iCisiaGEgY29tZSBvZ2dldHRvIG5lbCBtb2RlbGxvICcqKiogU1VCSkVDVCBIRVJFICoqKicuIEZvcm5pc2NpIGwnb3B6aW9uZSAtLSIKKyJmb3JjZSBzZSB2dW9pIHZlcmFtZW50ZSBwcm9jZWRlcmUgY29uIGwnaW52aW8uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTQ1Cittc2dpZCAiVG8gd2hvbSBzaG91bGQgdGhlIGVtYWlscyBiZSBzZW50IChpZiBhbnlvbmUpPyIKK21zZ3N0ciAiIgorIkEgY2hpIGRvdnJhbm5vIGVzc2VyZSBpbnZpYXRlIGxlIGUtbWFpbCAoc2UgZGV2b25vIGVzc2VyZSBpbnZpYXRlIGEgIgorInF1YWxjdW5vKT8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBhbGlhcyAnJXMnIGV4cGFuZHMgdG8gaXRzZWxmXG4iCittc2dzdHIgImVycm9yZSBmYXRhbGU6IGwnYWxpYXMgJyVzJyBzaSBlc3BhbmRlIGluIHNlIHN0ZXNzb1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk3NQorbXNnaWQgIk1lc3NhZ2UtSUQgdG8gYmUgdXNlZCBhcyBJbi1SZXBseS1UbyBmb3IgdGhlIGZpcnN0IGVtYWlsIChpZiBhbnkpPyAiCittc2dzdHIgIiIKKyJNZXNzYWdlLUlEIGRhIHVzYXJlIG5lbGwnaW50ZXN0YXppb25lIEluLVJlcGx5LVRvIHBlciBsYSBwcmltYSBlLW1haWwgKHNlICIKKyJkZXYnZXNzZXJlIHVzYXRvKT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwMzMgZ2l0LXNlbmQtZW1haWwucGVybDoxMDQxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmFibGUgdG8gZXh0cmFjdCBhIHZhbGlkIGFkZHJlc3MgZnJvbTogJXNcbiIKK21zZ3N0ciAiZXJyb3JlOiBpbXBvc3NpYmlsZSBlc3RyYXJyZSB1biBpbmRpcml6em8gdmFsaWRvIGRhICVzXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbcV0gW2RdIFtlXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDQ1Cittc2dpZCAiV2hhdCB0byBkbyB3aXRoIHRoaXMgYWRkcmVzcz8gKFtxXXVpdHxbZF1yb3B8W2VdZGl0KTogIgorbXNnc3RyICIiCisiQ29zYSBkZXZvIGZhcmUgY29uIHF1ZXN0J2luZGlyaXp6bz8gKEVzY2kgW3FdfHNjYXJ0YSBbZF18bW9kaWZpY2EgW2VdKTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzNjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQ0EgcGF0aCBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIklsIHBlcmNvcnNvIENBIFwiJXNcIiBub24gZXNpc3RlIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NDUKK21zZ2lkICIiCisiICAgIFRoZSBDYyBsaXN0IGFib3ZlIGhhcyBiZWVuIGV4cGFuZGVkIGJ5IGFkZGl0aW9uYWxcbiIKKyIgICAgYWRkcmVzc2VzIGZvdW5kIGluIHRoZSBwYXRjaCBjb21taXQgbWVzc2FnZS4gQnkgZGVmYXVsdFxuIgorIiAgICBzZW5kLWVtYWlsIHByb21wdHMgYmVmb3JlIHNlbmRpbmcgd2hlbmV2ZXIgdGhpcyBvY2N1cnMuXG4iCisiICAgIFRoaXMgYmVoYXZpb3IgaXMgY29udHJvbGxlZCBieSB0aGUgc2VuZGVtYWlsLmNvbmZpcm1cbiIKKyIgICAgY29uZmlndXJhdGlvbiBzZXR0aW5nLlxuIgorIlxuIgorIiAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgcnVuICdnaXQgc2VuZC1lbWFpbCAtLWhlbHAnLlxuIgorIiAgICBUbyByZXRhaW4gdGhlIGN1cnJlbnQgYmVoYXZpb3IsIGJ1dCBzcXVlbGNoIHRoaXMgbWVzc2FnZSxcbiIKKyIgICAgcnVuICdnaXQgY29uZmlnIC0tZ2xvYmFsIHNlbmRlbWFpbC5jb25maXJtIGF1dG8nLlxuIgorIlxuIgorbXNnc3RyICIiCisiICAgIEwnZWxlbmNvIENjIGRpIGN1aSBzb3ByYSDDqCBzdGF0byBlc3BhbnNvIGFnZ2l1bmdlbmRvXG4iCisiICAgIGluZGlyaXp6aSBhZ2dpdW50aXZpIHRyb3ZhdGkgbmVsIG1lc3NhZ2dpbyBkaSBjb21taXQgZGVsbGFcbiIKKyIgICAgcGF0Y2guIFBlciBpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEgc2VuZC1lbWFpbCByaWNoaWVkZVxuIgorIiAgICBjb21lIHByb2NlZGVyZSBwcmltYSBkZWxsJ2ludmlvIG9nbmlxdWFsdm9sdGEgc2kgdmVyaWZpY2hpXG4iCisiICAgIHRhbGUgZXZlbmllbnphLiBRdWVzdG8gY29tcG9ydGFtZW50byDDqCBjb250cm9sbGF0b1xuIgorIiAgICBkYWxsJ2ltcG9zdGF6aW9uZSBkaSBjb25maWd1cmF6aW9uZSBzZW5kZW1haWwuY29uZmlybS5cbiIKKyJcbiIKKyIgICAgUGVyIHVsdGVyaW9yaSBpbmZvcm1hemlvbmksIGVzZWd1aSAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJy5cbiIKKyIgICAgUGVyIG1hbnRlbmVyZSBpbCBjb21wb3J0YW1lbnRvIGNvcnJlbnRlLCBtYSBub25cbiIKKyIgICAgdmlzdWFsaXp6YXJlIHBpw7kgcXVlc3RvIG1lc3NhZ2dpbywgZXNlZ3VpICdnaXQgY29uZmlnXG4iCisiICAgIC0tZ2xvYmFsIHNlbmRlbWFpbC5jb25maXJtIGF1dG8nLlxuIgorIlxuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldIFtuXSBbZV0gW3FdIFthXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDYwCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsPyAoW3ldZXN8W25db3xbZV1kaXR8W3FddWl0fFthXWxsKTogIgorbXNnc3RyICIiCisiSW52aWFyZSBxdWVzdCdlLW1haWw/IChTw6wgW3ldfFtuXW98bW9kaWZpY2EgW2VdfGVzY2kgW3FdfGludmlhIHR1dHRlIFthXSk6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDYzCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsIHJlcGx5IHJlcXVpcmVkIgorbXNnc3RyICLDiCByaWNoaWVzdGEgdW5hIHJpc3Bvc3RhIGFsbGEgcmljaGllc3RhIGRpIGludmlvIGUtbWFpbCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDkxCittc2dpZCAiVGhlIHJlcXVpcmVkIFNNVFAgc2VydmVyIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkLiIKK21zZ3N0ciAiSWwgc2VydmVyIFNNVFAgcmljaGllc3RvIG5vbiDDqCBkZWZpbml0byBpbiBtb2RvIGFkZWd1YXRvLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTM4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFNUQVJUVExTISAlcyIKK21zZ3N0ciAiSWwgc2VydmVyIG5vbiBzdXBwb3J0YSBTVEFSVFRMUyEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0MyBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU1RBUlRUTFMgZmFpbGVkISAlcyIKK21zZ3N0ciAiU1RBUlRUTFMgbm9uIHJpdXNjaXRvISAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTU2Cittc2dpZCAiVW5hYmxlIHRvIGluaXRpYWxpemUgU01UUCBwcm9wZXJseS4gQ2hlY2sgY29uZmlnIGFuZCB1c2UgLS1zbXRwLWRlYnVnLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGluaXppYWxpenphcmUgU01UUCBpbiBtb2RvIGFkZWd1YXRvLiBDb250cm9sbGEgbGEgY29uZmlndXJhemlvbmUgIgorImUgdXNhIC0tc210cC1kZWJ1Zy4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gc2VuZCAlc1xuIgorbXNnc3RyICJJbnZpbyBkaSAlcyBub24gcml1c2NpdG9cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRyeS1TZW50ICVzXG4iCittc2dzdHIgIlRlc3QgaW52aW8gJXMgcml1c2NpdG9cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlbnQgJXNcbiIKK21zZ3N0ciAiJXMgaW52aWF0b1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJEcnktT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICJFc2VjdXppb25lIGRpIHByb3ZhIHJpdXNjaXRhLiBJbCByZWdpc3RybyDDqCBpbCBzZWd1ZW50ZTpcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc5Cittc2dpZCAiT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICJPcGVyYXppb25lIHJpdXNjaXRhLiBJbCByZWdpc3RybyDDqCBpbCBzZWd1ZW50ZTpcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTkxCittc2dpZCAiUmVzdWx0OiAiCittc2dzdHIgIlJpc3VsdGF0bzogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1OTQKK21zZ2lkICJSZXN1bHQ6IE9LXG4iCittc2dzdHIgIlJpc3VsdGF0bzogT0tcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGlsIGZpbGUgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY1OSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NzkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIEFnZ2l1bmdvIGNjOiAlcyBkYWxsYSByaWdhICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihtYm94KSBBZGRpbmcgdG86ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihtYm94KSBBZ2dpdW5nbyB0bzogJXMgZGFsbGEgcmlnYSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobm9uLW1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG5vbiBtYm94KSBBZ2dpdW5nbyBjYzogJXMgZGFsbGEgcmlnYSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTc1MworIywgcGVybC1mb3JtYXQKK21zZ2lkICIoYm9keSkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIoY29ycG8pIEFnZ2l1bmdvIGNjOiAlcyBkYWxsYSByaWdhICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODY0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQ291bGQgbm90IGV4ZWN1dGUgJyVzJyIKK21zZ3N0ciAiKCVzKSBJbXBvc3NpYmlsZSBlc2VndWlyZSAnJXMnIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIKK21zZ3N0ciAiKCVzKSBBZ2dpdW5nbyAlczogJXMgZGE6ICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODc1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJyVzJyIKK21zZ3N0ciAiKCVzKSBjaGl1c3VyYSBkZWxsYSBwaXBlIGEgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkwNQorbXNnaWQgImNhbm5vdCBzZW5kIG1lc3NhZ2UgYXMgN2JpdCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgaW52aWFyZSBpbCBtZXNzYWdnaW8gY29uIGNvZGlmaWNhIGEgNyBiaXQiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkxMworbXNnaWQgImludmFsaWQgdHJhbnNmZXIgZW5jb2RpbmciCittc2dzdHIgImNvZGlmaWNhIGRpIHRyYXNmZXJpbWVudG8gbm9uIHZhbGlkYSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTU0IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjAwNiBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwMTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4iCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSAlczogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTU3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBjb250YWlucyBhIGxpbmUgbG9uZ2VyIHRoYW4gOTk4IGNoYXJhY3RlcnMiCittc2dzdHIgIiVzOiBsYSBwYXRjaCBjb250aWVuZSB1bmEgcmlnYSBwacO5IGx1bmdhIGRpIDk5OCBjYXJhdHRlcmkiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk3NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyAlcyB3aXRoIGJhY2t1cCBzdWZmaXggJyVzJy5cbiIKK21zZ3N0ciAiU2FsdG8gJXMgY29uIGlsIHN1ZmZpc3NvIGRpIGJhY2t1cCAnJXMnLlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk3OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAlcz8gW3l8Tl06ICIKK21zZ3N0ciAiSW52aWFyZSAlcz8gW3l8Tl06ICIKKworI34gbXNnaWQgIntkcm9wLGtlZXAsYXNrfSIKKyN+IG1zZ3N0ciAie2Ryb3Asa2VlcCxhc2t9IgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4sYSxxLGQlcyw/XT8gIgorI34gbXNnc3RyICJNb2RpZmljYSBtb2RvIHN0YWdlIFt5LG4sYSxxLGQlcyw/XT8gIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4sYSxxLGQlcyw/XT8gIgorI34gbXNnc3RyICJFbGltaW5hemlvbmUgc3RhZ2UgW3ksbixhLHEsZCVzLD9dPyAiCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiU3RhZ2UgdGhpcyBodW5rIFt5LG4sYSxxLGQlcyw/XT8gIgorI34gbXNnc3RyICJFc2VndWlyZSBsbyBzdGFnZSBkaSBxdWVzdCdodW5rIFt5LG4sYSxxLGQlcyw/XT8gIgorCisjfiBtc2dpZCAiIgorI34gIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisjfiAibWFya2VkIGZvciBzdGFnaW5nLlxuIgorI34gbXNnc3RyICIiCisjfiAiU2UgbGEgcGF0Y2ggdmllbmUgYXBwbGljYXRhIHNlbnphIHByb2JsZW1pLCBsJ2h1bmsgbW9kaWZpY2F0byBzYXLDoFxuIgorI34gImNvbnRyYXNzZWduYXRvIGltbWVkaWF0YW1lbnRlIHBlciBsJ2FnZ2l1bnRhIGFsbCdhcmVhIGRpIHN0YWdpbmcuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorI34gIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisjfiAicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorI34gImEgLSBzdGFnZSB0aGlzIGFuZCBhbGwgdGhlIHJlbWFpbmluZyBodW5rc1xuIgorI34gImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG5vciBhbnkgb2YgdGhlIHJlbWFpbmluZyBodW5rc1xuIgorI34gbXNnc3RyICIiCisjfiAieSAtIGFnZ2l1bmdpIHF1ZXN0J2h1bmsgYWxsJ2FyZWEgZGkgc3RhZ2luZ1xuIgorI34gIm4gLSBub24gYWdnaXVuZ2VyZSBxdWVzdCdodW5rIGFsbCdhcmVhIGRpIHN0YWdpbmdcbiIKKyN+ICJxIC0gZXNjaTsgbm9uIGFnZ2l1bmdlcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSByaW1hbmVudGkgYWxsJ2FyZWEgZGkgIgorI34gInN0YWdpbmdcbiIKKyN+ICJhIC0gYWdnaXVuZ2kgcXVlc3QnaHVuayBlIHR1dHRpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlIGFsbCdhcmVhIGRpICIKKyN+ICJzdGFnaW5nXG4iCisjfiAiZCAtIG5vbiBhZ2dpdW5nZXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZSBhbGwnYXJlYSAiCisjfiAiZGkgc3RhZ2luZ1xuIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJy4iCisjfiBtc2dzdHIgImltcG9zc2liaWxlIGNvcGlhcmUgJyVzJyBpbiAnJXMnLiIKKworI34gbXNnaWQgIm1hbGZvcm1lZCBpZGVudCBsaW5lIgorI34gbXNnc3RyICJyaWdhIGlkZW50IG1hbGZvcm1hdGEiCisKKyN+IG1zZ2lkICJjb3JydXB0ZWQgYXV0aG9yIHdpdGhvdXQgZGF0ZSBpbmZvcm1hdGlvbiIKKyN+IG1zZ3N0ciAiaW5mb3JtYXppb25pIHN1bGwnYXV0b3JlIGNvcnJvdHRlIChzZW56YSBkYXRhKSIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJjb3VsZCBub3QgcGFyc2UgJyUuKnMnIgorI34gbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlICclLipzJyIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJjb3VsZCBub3QgY2hlY2tvdXQgJXMiCisjfiBtc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGNoZWNrb3V0IGRpICVzIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgImZpbGVuYW1lIGluIHRyZWUgZW50cnkgY29udGFpbnMgYmFja3NsYXNoOiAnJXMnIgorI34gbXNnc3RyICJpbCBub21lIGZpbGUgbmVsbGEgdm9jZSBhbGJlcm8gY29udGllbmUgdW5hIGJhcnJhIHJvdmVzY2lhdGE6ICclcyciCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKKyN+IG1zZ3N0ciAiVXNhIC1mIHNlIHZ1b2kgZGF2dmVybyBhZ2dpdW5nZXJsaS5cbiIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKKyN+IG1zZ3N0ciAiRm9yc2UgaW50ZW5kZXZpIGRpcmUgJ2dpdCBhZGQgLic/XG4iCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAicGFja2ZpbGUgaXMgaW52YWxpZDogJXMiCisjfiBtc2dzdHIgInBhY2tmaWxlIG5vbiB2YWxpZG86ICVzIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgInVuYWJsZSB0byBvcGVuIHBhY2tmaWxlIGZvciByZXVzZTogJXMiCisjfiBtc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBpbCBwYWNrZmlsZSBwZXIgaWwgc3VvIHJpdXNvOiAlcyIKKworI34gbXNnaWQgInVuYWJsZSB0byBzZWVrIGluIHJldXNlZCBwYWNrZmlsZSIKKyN+IG1zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgc2VlayBuZWwgcGFja2ZpbGUgcml1c2F0byIKKworI34gbXNnaWQgInVuYWJsZSB0byByZWFkIGZyb20gcmV1c2VkIHBhY2tmaWxlIgorI34gbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGRhbCBwYWNrZmlsZSByaXVzYXRvIgorCisjfiBtc2dpZCAibm8gSEVBRD8iCisjfiBtc2dzdHIgIm5lc3N1bidIRUFEPyIKKworI34gbXNnaWQgIm1ha2UgY29tbWl0dGVyIGRhdGUgbWF0Y2ggYXV0aG9yIGRhdGUiCisjfiBtc2dzdHIgIiIKKyN+ICJmYWkgY29ycmlzcG9uZGVyZSBsYSBkYXRhIGRlbGxhIHBlcnNvbmEgY2hlIGhhIGVzZWd1aXRvIGlsIGNvbW1pdCBhbGxhICIKKyN+ICJkYXRhIGF1dG9yZSIKKworI34gbXNnaWQgImlnbm9yZSBhdXRob3IgZGF0ZSBhbmQgdXNlIGN1cnJlbnQgZGF0ZSIKKyN+IG1zZ3N0ciAiaWdub3JhIGxhIGRhdGEgYXV0b3JlIGUgdXNhIGxhIGRhdGEgY29ycmVudGUiCisKKyN+IG1zZ2lkICJzeW5vbnltIG9mIC0tcmVzZXQtYXV0aG9yLWRhdGUiCisjfiBtc2dzdHIgInNpbm9uaW1vIGRpIC0tcmVzZXQtYXV0aG9yLWRhdGUiCisKKyN+IG1zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIgorI34gbXNnc3RyICJpZ25vcmEgbW9kaWZpY2hlIGFnbGkgc3BhemkgYmlhbmNoaSIKKworI34gbXNnaWQgInByZXNlcnZlIGVtcHR5IGNvbW1pdHMgZHVyaW5nIHJlYmFzZSIKKyN+IG1zZ3N0ciAibWFudGllbmkgaSBjb21taXQgdnVvdGkgZHVyYW50ZSBpbCByZWJhc2UiCisKKyN+IG1zZ2lkICJjYW5ub3QgY29tYmluZSAtLXVzZS1iaXRtYXAtaW5kZXggd2l0aCBvYmplY3QgZmlsdGVyaW5nIgorI34gbXNnc3RyICJpbXBvc3NpYmlsZSBjb21iaW5hcmUgLS11c2UtYml0bWFwLWluZGV4IGNvbiBpbCBmaWx0cmFnZ2lvIG9nZ2V0dGkiCisKKyMsIHNoLWZvcm1hdAorI34gbXNnaWQgIiIKKyN+ICJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorI34gIiRzbV9wYXRoXG4iCisjfiAiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorI34gbXNnc3RyICIiCisjfiAiSWwgc2VndWVudGUgcGVyY29yc28gw6ggaWdub3JhdG8gZGEgdW5vIGRlaSB0dW9pIGZpbGUgLmdpdGlnbm9yZTpcbiIKKyN+ICIkc21fcGF0aFxuIgorI34gIlVzYSAtZiBzZSB2dW9pIGRhdnZlcm8gYWdnaXVuZ2VybG8uIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgInVuYWJsZSB0byBnZXQgdHJlZSBmb3IgJXMiCisjfiBtc2dzdHIgImltcG9zc2liaWxlIHJlY3VwZXJhcmUgbCdhbGJlcm8gcGVyICVzIgorCisjfiBtc2dpZCAiVXNlIGFuIGV4cGVyaW1lbnRhbCBoZXVyaXN0aWMgdG8gaW1wcm92ZSBkaWZmcyIKKyN+IG1zZ3N0ciAiVXNhIHVuJ2V1cmlzdGljYSBzcGVyaW1lbnRhbGUgcGVyIG1pZ2xpb3JhcmUgaSBkaWZmIgorCisjfiBtc2dpZCAiZ2l0IGNvbW1pdC1ncmFwaCBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIKKyN+IG1zZ3N0ciAiZ2l0IGNvbW1pdC1ncmFwaCBbLS1vYmplY3QtZGlyIDxkaXJlY3Rvcnkgb2dnZXR0aT5dIgorCisjfiBtc2dpZCAiZ2l0IGNvbW1pdC1ncmFwaCByZWFkIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIgorI34gbXNnc3RyICJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA8ZGlyZWN0b3J5IG9nZ2V0dGk+XSIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJ1bmtub3duIGNvcmUudW50cmFja2VkQ2FjaGUgdmFsdWUgJyVzJzsgdXNpbmcgJ2tlZXAnIGRlZmF1bHQgdmFsdWUiCisjfiBtc2dzdHIgIiIKKyN+ICJ2YWxvcmUgY29yZS51bnRyYWNrZWRDYWNoZSAnJXMnIG5vbiB2YWxpZG87IHV0aWxpenplcsOyIGlsIHZhbG9yZSAiCisjfiAicHJlZGVmaW5pdG8gJ2tlZXAnIgorCisjfiBtc2dpZCAiY2Fubm90IGNoYW5nZSBwYXJ0aWFsIGNsb25lIHByb21pc29yIHJlbW90ZSIKKyN+IG1zZ3N0ciAiaW1wb3NzaWJpbGUgbW9kaWZpY2FyZSBpbCByZW1vdG8gcHJvbWV0dGVudGUgZGVsIGNsb25lIHBhcnppYWxlIgorCisjfiBtc2dpZCAiZXJyb3IgYnVpbGRpbmcgdHJlZXMiCisjfiBtc2dzdHIgImVycm9yZSBkdXJhbnRlIGxhIGNvc3RydXppb25lIGRlZ2xpIGFsYmVyaSIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0ICclcycgaW4gJyVzJyIKKyN+IG1zZ3N0ciAiZm9ybWF0byBkYXRhICclcycgbm9uIHZhbGlkbyBpbiAnJXMnIgorCisjfiBtc2dpZCAid3JpdGluZyByb290IGNvbW1pdCIKKyN+IG1zZ3N0ciAic2NyaXR0dXJhIGNvbW1pdCByYWRpY2UgaW4gY29yc28iCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAic3RhZ2VkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyBmaWxlcyBtYXkgYmUgbG9zdDogJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJsZSBtb2RpZmljaGUgaW4gc3RhZ2UgbmVpIHNlZ3VlbnRpIGZpbGUgcG90cmViYmVybyBhbmRhcmUgcGVyZHV0ZTogJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyN+ICJwYXJ0aWFsQ2xvbmUiCisjfiBtc2dzdHIgIiIKKyN+ICItLWZpbHRlciBwdcOyIGVzc2VyZSB1c2F0byBzb2xvIGNvbiBpbCByZW1vdG8gY29uZmlndXJhdG8gbmVsbGUgZXN0ZW5zaW9uaS4iCisjfiAicGFydGlhbENsb25lIgorCisjfiBtc2dpZCAidmVyaWZ5IGNvbW1pdC1tc2cgaG9vayIKKyN+IG1zZ3N0ciAidmVyaWZpY2EgaG9vayBjb21taXQtbXNnIgorCisjfiBtc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcmViYXNlLW1lcmdlcycgd2l0aCAnLS1zdHJhdGVneS1vcHRpb24nIgorI34gbXNnc3RyICJpbXBvc3NpYmlsZSBjb21iaW5hcmUgJy0tcmViYXNlLW1lcmdlcycgY29uICctLXN0cmF0ZWd5LW9wdGlvbiciCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiaW52YWxpZCBzcGFyc2UgdmFsdWUgJyVzJyIKKyN+IG1zZ3N0ciAidmFsb3JlIHNwYXJzZSBub24gdmFsaWRvOiAnJXMnIgorCisjfiBtc2dpZCAiIgorI34gIkZldGNoIG5vcm1hbGx5IGluZGljYXRlcyB3aGljaCBicmFuY2hlcyBoYWQgYSBmb3JjZWQgdXBkYXRlLCBidXQgdGhhdCAiCisjfiAiY2hlY2sgaGFzIGJlZW4gZGlzYWJsZWQuIgorI34gbXNnc3RyICIiCisjfiAiSWwgZmV0Y2ggbm9ybWFsbWVudGUgaW5kaWNhIHF1YWxpIGJyYW5jaCBzaWFubyBzdGF0aSBzb3R0b3Bvc3RpIGFkICIKKyN+ICJhZ2dpb3JuYW1lbnRvIGZvcnphdG8sIG1hIHRhbGUgY29udHJvbGxvIMOoIHN0YXRvIGRpc2FiaWxpdGF0by4iCisKKyN+IG1zZ2lkICIiCisjfiAib3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIGZhbHNlJyB0byBhdm9pZCB0aGlzIGNoZWNrLlxuIgorI34gbXNnc3RyICIiCisjfiAibyBlc2VndWlyZSAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyBmYWxzZScgcGVyIG9tZXR0ZXJlICIKKyN+ICJxdWVzdG9cbiIKKyN+ICJjb250cm9sbG8uXG4iCisKKyN+IG1zZ2lkICIiCisjfiAibG9nLm1haWxtYXAgaXMgbm90IHNldDsgaXRzIGltcGxpY2l0IHZhbHVlIHdpbGwgY2hhbmdlIGluIGFuXG4iCisjfiAidXBjb21pbmcgcmVsZWFzZS4gVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHByZXNlcnZlIGN1cnJlbnRcbiIKKyN+ICJiZWhhdmlvdXIsIHNldCB0aGUgbG9nLm1haWxtYXAgY29uZmlndXJhdGlvbiB2YWx1ZSB0byBmYWxzZS5cbiIKKyN+ICJcbiIKKyN+ICJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgYWRvcHQgdGhlIG5ldyBiZWhhdmlvdXIgbm93LCBzZXQgdGhlXG4iCisjfiAibG9nLm1haWxtYXAgY29uZmlndXJhdGlvbiB2YWx1ZSB0byB0cnVlLlxuIgorI34gIlxuIgorI34gIlNlZSAnZ2l0IGhlbHAgY29uZmlnJyBhbmQgc2VhcmNoIGZvciAnbG9nLm1haWxtYXAnIGZvciBmdXJ0aGVyICIKKyN+ICJpbmZvcm1hdGlvbi4iCisjfiBtc2dzdHIgIiIKKyN+ICJsb2cubWFpbG1hcCBub24gw6ggaW1wb3N0YXRvOyBpbCBzdW8gdmFsb3JlIGltcGxpY2l0byBzYXLDoCBtb2RpZmljYXRvXG4iCisjfiAiaW4gdW5hIHByb3NzaW1hIHZlcnNpb25lLiBQZXIgZWxpbWluYXJlIHF1ZXN0byBtZXNzYWdnaW8gZSBtYW50ZW5lcmVcbiIKKyN+ICJpbCBjb21wb3J0YW1lbnRvIGF0dHVhbGUsIGltcG9zdGEgaWwgdmFsb3JlIGRpIGNvbmZpZ3VyYXppb25lXG4iCisjfiAibG9nLm1haWxtYXAgYSBmYWxzZS5cbiIKKyN+ICJcbiIKKyN+ICJQZXIgZWxpbWluYXJlIHF1ZXN0byBtZXNzYWdnaW8gZSBhZG90dGFyZSBpbCBudW92byBjb21wb3J0YW1lbnRvIG9yYSxcbiIKKyN+ICJpbXBvc3RhIGlsIHZhbG9yZSBkaSBjb25maWd1cmF6aW9uZSBsb2cubWFpbG1hcCBhIHRydWUuXG4iCisjfiAiXG4iCisjfiAiVmVkaSAnZ2l0IGhlbHAgY29uZmlnJyBlIGNlcmNhICdsb2cubWFpbG1hcCcgcGVyIHVsdGVyaW9yaSBpbmZvcm1hemlvbmkuIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2Fja19kZXRhaWxlZCIKKyN+IG1zZ3N0ciAiSWwgc2VydmVyIHN1cHBvcnRhIG11bHRpX2Fja19kZXRhaWxlcyIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBuby1kb25lIgorI34gbXNnc3RyICJJbCBzZXJ2ZXIgc3VwcG9ydGEgbm8tZG9uZSIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBtdWx0aV9hY2siCisjfiBtc2dzdHIgIklsIHNlcnZlciBzdXBwb3J0YSBtdWx0aV9hY2siCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kLTY0ayIKKyN+IG1zZ3N0ciAiSWwgc2VydmVyIHN1cHBvcnRhIHNpZGUtYmFuZC02NGsiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kIgorI34gbXNnc3RyICJJbCBzZXJ2ZXIgc3VwcG9ydGEgc2lkZS1iYW5kIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIGFsbG93LXRpcC1zaGExLWluLXdhbnQiCisjfiBtc2dzdHIgIklsIHNlcnZlciBzdXBwb3J0YSBhbGxvdy10aXAtc2hhMS1pbi13YW50IgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIGFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQiCisjfiBtc2dzdHIgIklsIHNlcnZlciBzdXBwb3J0YSBhbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50IgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIG9mcy1kZWx0YSIKKyN+IG1zZ3N0ciAiSWwgc2VydmVyIHN1cHBvcnRhIG9mcy1kZWx0YSIKKworI34gbXNnaWQgIihIRUFEIGRldGFjaGVkIGF0ICVzKSIKKyN+IG1zZ3N0ciAiKEhFQUQgc2NvbGxlZ2F0byBzdSAlcykiCisKKyN+IG1zZ2lkICIoSEVBRCBkZXRhY2hlZCBmcm9tICVzKSIKKyN+IG1zZ3N0ciAiKEhFQUQgc2NvbGxlZ2F0byBkYSAlcykiCisKKyN+IG1zZ2lkICJDaGVja2luZyBvdXQgZmlsZXMiCisjfiBtc2dzdHIgIkNoZWNrb3V0IGRlaSBmaWxlIGluIGNvcnNvIgorCisjfiBtc2dpZCAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorI34gbXNnc3RyICIiCisjfiAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbCdhdHRpdml0w6AgaW4gbW9kYWxpdMOgIGludGVyYXR0aXZhIGNvbiBsbyBzdGFuZGFyZCAiCisjfiAiaW5wdXQgbm9uIGNvbGxlZ2F0byBhIHVuIHRlcm1pbmFsZS4iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gc3RhdCAlc1xuIgorI34gbXNnc3RyICJzdGF0IGRpICVzIG5vbiByaXVzY2l0b1xuIgorCisjfiBtc2dpZCAiIgorI34gIklmIHlvdSB3aXNoIHRvIHNraXAgdGhpcyBjb21taXQsIHVzZTpcbiIKKyN+ICJcbiIKKyN+ICIgICAgZ2l0IHJlc2V0XG4iCisjfiAiXG4iCisjfiAiVGhlbiBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgd2lsbCByZXN1bWUgY2hlcnJ5LXBpY2tpbmdcbiIKKyN+ICJ0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJTZSB2dW9pIGlnbm9yYXJlIHF1ZXN0byBjb21taXQsIHVzYTpcbiIKKyN+ICJcbiIKKyN+ICIgICAgZ2l0IHJlc2V0XG4iCisjfiAiXG4iCisjfiAiUXVpbmRpIGlsIGNvbWFuZG8gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIGZhcsOgIHJpcHJlbmRlcmVcbiIKKyN+ICJpbCBjaGVycnkgcGlja2luZyBwZXIgaSBjb21taXQgcmltYW5lbnRpLlxuIgorCisjfiBtc2dpZCAidW5yZWNvZ25pemVkIHZlcmI6ICVzIgorI34gbXNnc3RyICJ2ZXJibyBub24gcmljb25vc2NpdXRvOiAlcyIKKworI34gbXNnaWQgImhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorI34gbXNnc3RyICJsYSB2ZXJzaW9uZSBkZWxsJ2hhc2ggJVggbm9uIGNvcnJpc3BvbmRlIGFsbGEgdmVyc2lvbmUgJVgiCisKKyN+IG1zZ2lkICJvcHRpb24gJyVzJyByZXF1aXJlcyBhIHZhbHVlIgorI34gbXNnc3RyICJsJ29wemlvbmUgJyVzJyByaWNoaWVkZSB1biB2YWxvcmUiCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgdHJhbnNmb3JtIHRoZSB0b2RvIGxpc3QiCisjfiBtc2dzdHIgImltcG9zc2liaWxlIHRyYXNmb3JtYXJlIGwnZWxlbmNvIHRvZG8iCisKKyN+IG1zZ2lkICJkZWZhdWx0IgorI34gbXNnc3RyICJpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEiCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorI34gbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGNyZWFyZSBsYSBkaXJlY3RvcnkgJyVzJyIKKworIywgZnV6enkKKyN+IG1zZ2lkICJjb3VsZCBub3Qgb3BlbiAlcyIKKyN+IG1zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlICclcyciCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiQ291bGQgbm90IG1vdmUgYmFjayB0byAkaGVhZF9uYW1lIgorI34gbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIHJpbXVvdmVyZSBpbCBicmFuY2ggJXMiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiZmF0YWw6IGNhbm5vdCBjb21iaW5lICctLXNpZ25vZmYnIHdpdGggJy0tcHJlc2VydmUtbWVyZ2VzJyIKKyN+IG1zZ3N0ciAiSW1wb3NzaWJpbGUgY29tYmluYXJlIC0tbm8tZmYgY29uIC0tZmYtb25seS4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiZmF0YWw6IGNhbm5vdCBjb21iaW5lICctLXByZXNlcnZlLW1lcmdlcycgd2l0aCAnLS1yZWJhc2UtbWVyZ2VzJyIKKyN+IG1zZ3N0ciAiSW1wb3NzaWJpbGUgY29tYmluYXJlIC0tbm8tZmYgY29uIC0tZmYtb25seS4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiZmF0YWw6IGNhbm5vdCBjb21iaW5lICctLXJlYmFzZS1tZXJnZXMnIHdpdGggJy0tc3RyYXRlZ3ktb3B0aW9uJyIKKyN+IG1zZ3N0ciAiSW1wb3NzaWJpbGUgY29tYmluYXJlIC0tbm8tZmYgY29uIC0tZmYtb25seS4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiZmF0YWw6IGNhbm5vdCBjb21iaW5lICctLXJlYmFzZS1tZXJnZXMnIHdpdGggJy0tc3RyYXRlZ3knIgorI34gbXNnc3RyICJJbXBvc3NpYmlsZSBjb21iaW5hcmUgLS1uby1mZiBjb24gLS1mZi1vbmx5LiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdDogJG9udG9fbmFtZSIKKyN+IG1zZ3N0ciAiJyVzJyBub24gcHVudGEgYWQgdW4gY29tbWl0IgorCisjLCBmdXp6eQorI34gbXNnaWQgIkNoYW5nZXMgdG8gJG9udG86IgorI34gbXNnc3RyICJNb2RpZmljaGUgZGkgY3VpIHZlcnLDoCBlc2VndWl0byBpbCBjb21taXQ6IgorCisjfiBtc2dpZCAiaWdub3JpbmcgdW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcyciCisjfiBtc2dzdHIgIm1vZGFsaXTDoCBjb2xvci1tb3ZlZC13cyBzY29ub3NjaXV0YSAnJXMnIGlnbm9yYXRhIgorCisjfiBtc2dpZCAib25seSAndHJlZTowJyBpcyBzdXBwb3J0ZWQiCisjfiBtc2dzdHIgIsOoIHN1cHBvcnRhdG8gc29sbyAndHJlZTowJyIKKworI34gbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzIGFuZCAlcyB0byAlcyBpbnN0ZWFkIgorI34gbXNnc3RyICJSaWRlbm9taW5vICVzIGluICVzIGUgJXMgaW4gJXMiCisKKyN+IG1zZ2lkICJBZGRpbmcgbWVyZ2VkICVzIgorI34gbXNnc3RyICJBZ2dpdW50YSBlbGVtZW50byBzb3R0b3Bvc3RvIGEgbWVyZ2UgJXMiCisKKyN+IG1zZ2lkICJJbnRlcm5hbCBlcnJvciIKKyN+IG1zZ3N0ciAiRXJyb3JlIGludGVybm8iCisKKyN+IG1zZ2lkICJtYWlubGluZSB3YXMgc3BlY2lmaWVkIGJ1dCBjb21taXQgJXMgaXMgbm90IGEgbWVyZ2UuIgorI34gbXNnc3RyICLDqCBzdGF0byBzcGVjaWZpY2F0byBtYWlubGluZSBtYSBpbCBjb21taXQgJXMgbm9uIMOoIHVuIG1lcmdlLiIKKworI34gbXNnaWQgInVuYWJsZSB0byB3cml0ZSBzaGExIGZpbGVuYW1lICVzIgorI34gbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBmaWxlIHNoYTEgY29uIG5vbWUgJXMiCisKKyN+IG1zZ2lkICJjYW5ub3QgcmVhZCBzaGExX2ZpbGUgZm9yICVzIgorI34gbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGlsIGZpbGUgc2hhMSBwZXIgJXMiCisKKyN+IG1zZ2lkICJ1bnJlY29nbmlzZWQgb3B0aW9uOiAnJGFyZyciCisjfiBtc2dzdHIgIm9wemlvbmUgbm9uIHJpY29ub3NjaXV0YTogJyRhcmcnIgorCisjfiBtc2dpZCAiJyRpbnZhbGlkJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCisjfiBtc2dzdHIgIickaW52YWxpZCcgbm9uIMOoIHVuIGNvbW1pdCB2YWxpZG8iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiY291bGQgbm90IHBhcnNlICclcycgKGxvb2tpbmcgZm9yICclcycpIgorI34gbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgaWwgZmlsZSBkaSBsb2cgJyVzJyIKKworIywgZnV6enkKKyN+IG1zZ2lkICJDYW4ndCBzdGF0ICVzIgorI34gbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBsbyBzdGF0IGRpICclcyciCisKKyN+IG1zZ2lkICJObyBzdWNoIHJlbW90ZTogJXMiCisjfiBtc2dzdHIgIlJlbW90ZSBub24gZXNpc3RlbnRlOiAlcyIKKworI34gbXNnaWQgIiAlZCBmaWxlIGNoYW5nZWQiCisjfiBtc2dpZF9wbHVyYWwgIiAlZCBmaWxlcyBjaGFuZ2VkIgorI34gbXNnc3RyWzBdICIgJWQgZmlsZSBtb2RpZmljYXRvIgorI34gbXNnc3RyWzFdICIgJWQgZmlsZSBtb2RpZmljYXRpIgorCisjfiBtc2dpZCAiLCAlZCBpbnNlcnRpb24oKykiCisjfiBtc2dpZF9wbHVyYWwgIiwgJWQgaW5zZXJ0aW9ucygrKSIKKyN+IG1zZ3N0clswXSAiLCAlZCBpbnNlcnppb25lKCspIgorI34gbXNnc3RyWzFdICIsICVkIGluc2VyemlvbmkoKykiCisKKyN+IG1zZ2lkICIsICVkIGRlbGV0aW9uKC0pIgorI34gbXNnaWRfcGx1cmFsICIsICVkIGRlbGV0aW9ucygtKSIKKyN+IG1zZ3N0clswXSAiLiAlZCByaW1vemlvbmUoLSkiCisjfiBtc2dzdHJbMV0gIiwgJWQgcmltb3ppb25pKC0pIgorCisjfiBtc2dpZCAiY291bGQgbm90IHJ1biBncGcuIgorI34gbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGVzZWd1aXJlIGdwZy4iCisKKyN+IG1zZ2lkICJncGcgZGlkIG5vdCBhY2NlcHQgdGhlIGRhdGEiCisjfiBtc2dzdHIgImdwZyBub24gaGEgYWNjZXR0YXRvIGkgZGF0aSIKKworI34gbXNnaWQgIiclcyc6ICVzIgorI34gbXNnc3RyICInJXMnOiAlcyIKKworI34gbXNnaWQgImluICUwLjFmIHNlY29uZHMgYXV0b21hdGljYWxseS4uLiIKKyN+IG1zZ3N0ciAiYXV0b21hdGljYW1lbnRlIHRyYSAlMC4xZiBzZWNvbmRpLi4uIgorCisjfiBtc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRCIKKyN+IG1zZ3N0ciAiTm9uIGhhaSB1biBIRUFEIHZhbGlkbyIKKworI34gbXNnaWQgInVuYWJsZSB0byBsb29rIHVwIGN1cnJlbnQgdXNlciBpbiB0aGUgcGFzc3dkIGZpbGU6ICVzIgorI34gbXNnc3RyICJpbXBvc3NpYmlsZSB0cm92YXJlIGwndXRlbnRlIGNvcnJlbnRlIG5lbCBmaWxlIHBhc3N3ZDogJXMiCisKKyN+IG1zZ2lkICJubyBzdWNoIHVzZXIiCisjfiBtc2dzdHIgInV0ZW50ZSBub24gZXNpc3RlbnRlIgorCisjfiBtc2dpZCAiYnVnIgorI34gbXNnc3RyICJidWciCisKKyN+IG1zZ2lkICJjb3BpZWQ6ICAgICAlcyAtPiAlcyIKKyN+IG1zZ3N0ciAiY29waWF0bzogICAgICVzIC0+ICVzIgorCisjfiBtc2dpZCAiZGVsZXRlZDogICAgJXMiCisjfiBtc2dzdHIgImVsaW1pbmF0bzogICAgJXMiCisKKyN+IG1zZ2lkICJtb2RpZmllZDogICAlcyIKKyN+IG1zZ3N0ciAibW9kaWZpY2F0bzogICAlcyIKKworI34gbXNnaWQgInJlbmFtZWQ6ICAgICVzIC0+ICVzIgorI34gbXNnc3RyICJyaW5vbWluYXRvOiAgICAlcyAtPiAlcyIKKworI34gbXNnaWQgIiwgYmVoaW5kICIKKyN+IG1zZ3N0ciAiLCBpbmRpZXRybyAiCisKKyN+IG1zZ2lkICJubyBmaWxlcyBhZGRlZCIKKyN+IG1zZ3N0ciAibmVzc3VuIGZpbGUgYWdnaXVudG8iCisKKyN+IG1zZ2lkICJvb3BzIgorI34gbXNnc3RyICJvb3BzIgorCisjfiBtc2dpZCAiJXM6IGhhcyBiZWVuIGRlbGV0ZWQvcmVuYW1lZCIKKyN+IG1zZ3N0ciAiJXM6IMOoIHN0YXRhIGVsaW1pbmF0YS9yaW5vbWluYXRhIgorCisjfiBtc2dpZCAiWyVzOiBhaGVhZCAlZF0iCisjfiBtc2dzdHIgIlslczogYXZhbnRpICVkXSIKKworI34gbXNnaWQgImRpZmZfc2V0dXBfZG9uZSBmYWlsZWQiCisjfiBtc2dzdHIgImRpZmZfc2V0dXBfZG9uZSBub24gcml1c2NpdG8iCisKKyN+IG1zZ2lkICItLWRldGFjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIC1iLy1CLy0tb3JwaGFuIgorI34gbXNnc3RyICItLWRldGFjaCBub24gcHXDsiBlc3NlcmUgdXNhdGEgY29uIC1iLy1CLy0tb3JwaGFuIgorCisjfiBtc2dpZCAiLS1kZXRhY2ggY2Fubm90IGJlIHVzZWQgd2l0aCAtdCIKKyN+IG1zZ3N0ciAiLS1kZXRhY2ggbm9uIHB1w7IgZXNzZXJlIHVzYXRhIGNvbiAtdCIKKworI34gbXNnaWQgIi0tb3JwaGFuIGNhbm5vdCBiZSB1c2VkIHdpdGggLXQiCisjfiBtc2dzdHIgIi0tb3JwaGFuIG5vbiBwdcOyIGVzc2VyZSB1c2F0YSBjb24gLXQiCisKKyN+IG1zZ2lkICJnaXQgY2hlY2tvdXQ6IC1mIGFuZCAtbSBhcmUgaW5jb21wYXRpYmxlIgorI34gbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC1mIGUgLW0gbm9uIHNvbm8gY29tcGF0aWJpbGkiCisKKyN+IG1zZ2lkICJObyBleGlzdGluZyBhdXRob3IgZm91bmQgd2l0aCAnJXMnIgorI34gbXNnc3RyICJOZXNzdW4gYXV0b3JlIGVzaXN0ZW50ZSB0cm92YXRvIGNvbiAnJXMnIgorCisjfiBtc2dpZCAiJyVzJzogbm90IGEgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkuIgorI34gbXNnc3RyICInJXMnOiBub24gw6ggdW5hIGRpcmVjdG9yeSBkZWxsYSBkb2N1bWVudGF6aW9uZS4iCisKKyN+IG1zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIgorI34gbXNnc3RyICJSZWluaXppYWxpenphdG8gdW4gZXNpc3RlbnRlIgorCisjfiBtc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkiCisjfiBtc2dzdHIgIkluaXppYWxpenphdG8gdW4iCisKKyN+IG1zZ2lkICIgc2hhcmVkIgorI34gbXNnc3RyICIgY29uZGl2aXNvIgorCisjfiBtc2dpZCAiV3JpdGluZyBTUVVBU0hfTVNHIgorI34gbXNnc3RyICJTY3JpdHR1cmEgZGkgU1FVQVNIX01TRyIKKworI34gbXNnaWQgIkZpbmlzaGluZyBTUVVBU0hfTVNHIgorI34gbXNnc3RyICJDb21wbGV0YW1lbnRvIGRpIFNRVUFTSF9NU0ciCisKKyN+IG1zZ2lkICJ0YWcgbmFtZSB0b28gbG9uZzogJS4qcy4uLiIKKyN+IG1zZ3N0ciAibm9tZSB0YWcgdHJvcHBvIGx1bmdvOiAlLipzLi4uIgorCisjfiBtc2dpZCAidGFnIGhlYWRlciB0b28gYmlnLiIKKyN+IG1zZ3N0ciAiaW50ZXN0YXppb25lIGRlbCB0YWcgdHJvcHBvIGdyYW5kZS4iCisKKyN+IG1zZ2lkICJZb3UgbmVlZCB0byBzZXQgeW91ciBjb21taXR0ZXIgaW5mbyBmaXJzdCIKKyN+IG1zZ3N0ciAiw4ggbmVjZXNzYXJpbyBpbXBvc3RhcmUgbGUgaW5mb3JtYXppb25pIHN1bCBjb21taXR0ZXIiCisKKyN+IG1zZ2lkICIiCisjfiAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0gcnVuIFwiJGNtZGxpbmUgLS1yZXNvbHZlZFwiLlxuIgorI34gIklmIHlvdSB3b3VsZCBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBpbnN0ZWFkIHJ1biBcIiRjbWRsaW5lIC0tc2tpcFwiLlxuIgorI34gIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZyBydW4gXCIkY21kbGluZSAtLWFib3J0XCIuIgorI34gbXNnc3RyICIiCisjfiAiUXVhbmRvIGhhaSByaXNvbHRvIGlsIHByb2JsZW1hIGVzZWd1aSBcIiRjbWRsaW5lIC0tcmVzb2x2ZWRcIi5cbiIKKyN+ICJTZSB2dW9pIHNhbHRhcmUgcXVlc3RhIHBhdGNoLCBlc2VndWkgaW52ZWNlIFwiJGNtZGxpbmUgLS1za2lwXCIuXG4iCisjfiAiUGVyIHJpcHJpc3RpbmFyZSBpbCBicmFuY2ggb3JpZ2luYWxlIGUgaW50ZXJyb21wZXJlIGwnYXBwbGljYXppb25lIGRlbGxlICIKKyN+ICJwYXRjaCBlc2VndWkgXCIkY21kbGluZSAtLWFib3J0XCIuIgorCisjfiBtc2dpZCAiUGF0Y2ggZm9ybWF0ICRwYXRjaF9mb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4iCisjfiBtc2dzdHIgIklsIGZvcm1hdG8gcGF0Y2ggJHBhdGNoX2Zvcm1hdCBub24gw6ggc3VwcG9ydGF0by4iCisKKyN+IG1zZ2lkICJQbGVhc2UgbWFrZSB1cCB5b3VyIG1pbmQuIC0tc2tpcCBvciAtLWFib3J0PyIKKyN+IG1zZ3N0ciAiUGVyIGZhdm9yZSwgZGVjaWRpdGkuIC0tc2tpcCBvIC0tYWJvcnQ/IgorCisjfiBtc2dpZCAiUGF0Y2ggZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLiIKKyN+IG1zZ3N0ciAiTGEgcGF0Y2ggbm9uIGNvbnRpZW5lIHVuIGluZGlyaXp6byBlbWFpbCB2YWxpZG8uIgorCisjfiBtc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICRtc2dudW0gJEZJUlNUTElORSIKKyN+IG1zZ3N0ciAiUGF0Y2ggbm9uIHJpdXNjaXRhIGEgJG1zZ251bSAkRklSU1RMSU5FIgorCisjfiBtc2dpZCAiUGxlYXNlIGNhbGwgJ2Jpc2VjdF9zdGF0ZScgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIgorI34gbXNnc3RyICJQZXIgZmF2b3JlLCBjaGlhbWEgJ2Jpc2VjdF9zdGF0ZScgY29uIGFsbWVubyB1biBhcmdvbWVudG8uIgorCisjfiBtc2dpZCAiIgorI34gImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAkb3B0aW9uXG4iCisjfiAiICAgICAgIFRvIHByb3ZpZGUgYSBtZXNzYWdlLCB1c2UgZ2l0IHN0YXNoIHNhdmUgLS0gJyRvcHRpb24nIgorI34gbXNnc3RyICIiCisjfiAiZXJyb3JlOiBvcHppb25lIHNjb25vc2NpdXRhIHBlciAnc3Rhc2ggc2F2ZSc6ICRvcHRpb25cbiIKKyN+ICIgICAgICAgIFBlciBhZ2dpdW5nZXJlIHVuIG1lc3NhZ2dpbywgdXNhcmUgZ2l0IHN0YXNoIHNhdmUgLS0gJyRvcHRpb24nIgorCisjfiBtc2dpZCAiU3RvcHBpbmcgYXQgJyRzbV9wYXRoJzsgc2NyaXB0IHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cy4iCisjfiBtc2dzdHIgIiIKKyN+ICJJbnRlcnJ1emlvbmUgYSAnJHNtX3BhdGgnOyBsbyBzY3JpcHQgaGEgcmVzdGl0dWl0byB1bm8gc3RhdG8gZGl2ZXJzbyBkYSAiCisjfiAiemVyby4iCisKKyN+IG1zZ2lkICItLSIKKyN+IG1zZ3N0ciAiLS0iCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgZXh0cmFjdCBlbWFpbCBmcm9tIGNvbW1pdHRlciBpZGVudGl0eS4iCisjfiBtc2dzdHIgIiIKKyN+ICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGVzdHJhcnJlIGwnaW5kaXJpenpvIGVtYWlsIGRhbGwnaWRlbnRpdMOgIGRlbCAiCisjfiAiY29tbWl0dGVyLiIKZGlmZiAtLWdpdCBhL3BvL2tvLnBvIGIvcG8va28ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmZTIxYwotLS0gL2Rldi9udWxsCisrKyBiL3BvL2tvLnBvCkBAIC0wLDAgKzEsMTgwMDAgQEAKKyMgR2l0IEtvcmVhbiB0cmFuc2xhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBnaXQgS29yZWFuIHRyYW5zbGF0aW9uIGNvbnRyaWJ1dG9ycworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjCisjIENvbnRyaWJ1dG9yczoKKyMgIEh5dW5qdW4gS2ltIDx5b2xvc2VlbUB1c2Vycy5ub3JlcGx5LmdpdGh1Yi5jb20+LCAyMDE1LgorIyAgQ2hhbmd3b28gUnl1IDxjd3J5dUBkZWJpYW4ub3JnPiwgMjAxNS0yMDE4LgorIyAgU2loeWVvbiBKYW5nIDx1bmVlZHNpaHllb25AZ21haWwuY29tPiwgMjAxOC4KKyMgIEd3YW4tZ3llb25nIE11biA8ZWxvbmdidWdAZ21haWwuY29tPiwgMjAxOC4KKyMKKyMgLSDsnpHsl4XsnpDripQg7JyEIENvbnRyaWJ1dG9ycyDrqqnroZ3sl5Ag7LaU6rCA7ZW0IOyjvOyEuOyalC4KKyMgLSDrsojsl63tlZjrqbTshJwgODDsu6zrn7zsnYQg64SY7Ja06rCA7KeAIOyViuuPhOuhnSDtlbQg7KO87IS47JqULgorIyAgIC0g6rCA64ql7ZWc7ZWcIOybkOusuOydtCAx7KSE7J2066m0IDHspITsl5Ag65Ok7Ja06rCA6rKMIO2VmOqzoCwg67aA65Od7J207ZWY66m0IOqyveyasOyXkCDrlLDrnbwKKyMgICAgIOyVjOunnuqyjCDspITrsJTqv4jtlanri4jri6QuICjsu6Trp6jrk5zrnbzsnbjsnbTrqbQg7KSE67CU6r+I7ZWY6rOgIOuLpOydjCDspITsl5Ag7YOtIDLqsJwpCisjIC0g7Jqp7Ja064qUIOydvOq0gOyEseydhCDsp4DsvJwg7KO87Iut7Iuc7JikLgorIyAgIC0g7Jqp7Ja06rCAIOuwlOuAjOyWtOyVvCDtlZzri6Tqs6Ag7IOd6rCB7ZWY66m0IOq3uOugh+qyjCDrsojsl63tlZjquLAg7KCE7JeQIOy2qeu2hO2eiCDsnZjqsqwg6rWQ7ZmY7J2ECisjICAgICDtlZjsi63si5zsmKQuCisjIC0g7J2867CY7KCB7J24IOusuOyepeyXkOyEnCDsmIHslrQg64uo7Ja066W8IOq3uOuMgOuhnCDsk7Dsp4Ag7JWK7Iq164uI64ukLiDstZzshoztlZwg7J2M7Jet7ZWp64uI64ukLgorIyAgIC0g7JiI7Jm47KCB7Jy866GcIOuqheugueyWtCDrk7Eg66y47J6QIOq3uOuMgOuhnCDqsIDrpqztgqTripQg6rK97Jqw7JeQ66eMIOybkOusuCDqt7jrjIDroZwg7JSB64uI64ukLgorIyAgICAgLSDsmIg6IOyXheyKpO2KuOumvCDstpTsoIHsl5AgJ29yaWdpbicg64yA7IugIDzsnbTrpoQ+7J2EIOyCrOyaqe2VqeuLiOuLpAorIyAgIC0g67KI7Jet65CcIOyaqeyWtOqwgCDquYMg66qF66C57Ja07JmAIOyXsOq0gOuQmOuKlCDqsr3smrDsl5DripQg6rSE7Zi4IOyViOyXkCDslIHri4jri6QuCisjICAgICAtIOyYiDog65CY64+M66as6riwKHJldmVydCnqsIAg7KeE7ZaJIOykkeyeheuLiOuLpAorIyAtIOyaqeyWtDoKKyMgICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIyAgfCAzLXdheSBtZXJnZSAgfCAzLeuwqe2WpSDrs5HtlakgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBhdXRob3IgICAgICAgfCDsnpHshLHsnpAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IGJpc2VjdCAgICAgICB8IOydtOuTseu2hCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgYmxvYiAgICAgICAgIHwg67iU66GtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IGJ1bmRsZSAgICAgICB8IOuyiOuTpCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBicmFuY2ggICAgICAgfCDruIzrnpzsuZggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IGNoZXJyeS1waWNrICB8ICjsu6TrsIspIOu5vOyYpOq4sCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBjb21taXQgICAgICAgfCDsu6TrsIsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgY29tbWl0LWlzaCAgIHwg7Luk67CLLeuUsOychCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgY29tbWl0dGVyICAgIHwg7Luk66+47YSwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBjb25mbGljdCAgICAgfCDstqnrj4wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgZmFzdC1mb3J3YXJkIHwg7KCV67Cp7ZalIOynhO2WiSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IGZzbW9uaXRvciAgICB8IO2MjOydvCDsi5zsiqTthZwg66qo64uI7YSwICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBHaXQgICAgICAgICAgfCDquYMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBncmFmdCAgICAgICAgfCDqt7jrnpjtlITtirggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBoZWFkICAgICAgICAgfCDtl6Trk5wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgaG9vayAgICAgICAgIHwg7ZuE7YGsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IGhpc3RvcnkgICAgICB8ICjsu6TrsIspIOuCtOyXrSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IGxvZyAgICAgICAgICB8IOq4sOuhnSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBtZXJnZSAgICAgICAgfCDrs5HtlakgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgbm90ZSAgICAgICAgIHwg64W47Yq4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IG9jdG9wdXMgICAgICB8IOyYpe2GoO2NvOyKpCAo67OR7ZWpIOyghOuetSkgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBwYWNrICAgICAgICAgfCDrrLbsnYwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgcGF0aHNwZWMgICAgIHwg6rK966Gc66qF7IS4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgcHJvbWlzb3IgICAgIHwg7ZSE652866+47IScICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgcmViYXNlICAgICAgIHwg66as67Kg7J207IqkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgcmVmICAgICAgICAgIHwg66CI7Y2865+w7IqkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgcmVwbyAgICAgICAgIHwg7KCA7J6l7IaMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCByZW1vdGUgICAgICAgfCDrpqzrqqjtirggKOyggOyepeyGjCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IHJlc2V0ICAgICAgICB8IOyerOyngOyglSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgcmV2ZXJ0ICAgICAgIHwg65CY64+M66as6riwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgc3ViY29tbWFuZCAgIHwg7ZWY7JyEIOuqheuguSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgc3VibW9kdWxlICAgIHwg7ZWY7JyEIOuqqOuTiCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgdHJlZS1pc2ggICAgIHwg7Yq466asLeuUsOychCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgd29yayB0cmVlICAgIHwg7J6R7JeFIO2PtOuNlCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgd29ya2luZyB0cmVlIHwg7J6R7JeFIO2PtOuNlCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTgtMDYtMTYgMjI6MDYrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTgtMDYtMTkgMDI6MDArMDkwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQ2hhbmd3b28gUnl1IDxjd3J5dUBkZWJpYW4ub3JnPlxuIgorIkxhbmd1YWdlLVRlYW06IEdpdCBLb3JlYW4gdHJhbnNsYXRpb24gPGh0dHA6Ly9naXRodWIuY29tL2NoYW5nd29vL2dpdC1sMTBuLSIKKyJrbz5cbiIKKyJMYW5ndWFnZToga29cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTE7IHBsdXJhbD0wO1xuIgorIlgtR2VuZXJhdG9yOiBQb2VkaXQgMi4wLjZcbiIKKworIzogYWR2aWNlLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNoaW50OiAlLipzJXNcbiIKK21zZ3N0ciAiJXPtnoztirg6ICUuKnMlc1xuIgorCisjOiBhZHZpY2UuYzoxMzcKK21zZ2lkICJDaGVycnktcGlja2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIuuzke2Vqe2VmOyngCDslYrsnYAg7YyM7J287J20IOyeiOycvOuvgOuhnCwg7Luk67CLIOu5vOyYpOq4sOulvCDtlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGFkdmljZS5jOjEzOQorbXNnaWQgIkNvbW1pdHRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLrs5HtlantlZjsp4Ag7JWK7J2AIO2MjOydvOydtCDsnojsnLzrr4DroZwsIOy7pOuwi+2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYWR2aWNlLmM6MTQxCittc2dpZCAiTWVyZ2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIuuzke2Vqe2VmOyngCDslYrsnYAg7YyM7J287J20IOyeiOycvOuvgOuhnCwg67OR7ZWp7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBhZHZpY2UuYzoxNDMKK21zZ2lkICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi67OR7ZWp7ZWY7KeAIOyViuydgCDtjIzsnbzsnbQg7J6I7Jy866+A66GcLCDtkoDsnYQg7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBhZHZpY2UuYzoxNDUKK21zZ2lkICJSZXZlcnRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLrs5HtlantlZjsp4Ag7JWK7J2AIO2MjOydvOydtCDsnojsnLzrr4DroZwsIOuQmOuPjOumrOq4sOulvCDtlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGFkdmljZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJJdCBpcyBub3QgcG9zc2libGUgdG8gJXMgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIuuzke2Vqe2VmOyngCDslYrsnYAg7YyM7J287J20IOyeiOycvOuvgOuhnCwgJXMg7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBhZHZpY2UuYzoxNTUKK21zZ2lkICIiCisiRml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIgorbXNnc3RyICIiCisi7J6R7JeFIO2PtOuNlOyXkOyEnCDrrLjsoJzrpbwg67CU66Gc7J6h7J2AIOuLpOydjCwgJ2dpdCBhZGQvcm0gPO2MjOydvD4n7J2EIOyggeygiO2eiFxuIgorIuyCrOyaqe2VtCDtlbTqsrAg7ZGc7Iuc7ZWY6rOgIOy7pOuwi+2VmOyLreyLnOyYpC4iCisKKyM6IGFkdmljZS5jOjE2MworbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiBhbiB1bnJlc29sdmVkIGNvbmZsaWN0LiIKK21zZ3N0ciAi7ZW06rKw7ZWY7KeAIOuqu+2VnCDstqnrj4wg65WM66y47JeQIOuBneuCqeuLiOuLpC4iCisKKyM6IGFkdmljZS5jOjE2OCBidWlsdGluL21lcmdlLmM6MTI1MAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAi67OR7ZWpIOyekeyXheydhCDri6Qg66eI7LmY7KeAIOyViuyVmOyKteuLiOuLpCAoTUVSR0VfSEVBRCDtjIzsnbzsnbQg7J6I7Iq164uI64ukKS4iCisKKyM6IGFkdmljZS5jOjE3MAorbXNnaWQgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgbWVyZ2luZy4iCittc2dzdHIgIuuzke2Vqe2VmOq4sCDsoITsl5Ag67OA6rK9IOyCrO2VreydhCDsu6TrsIvtlZjsi63si5zsmKQuIgorCisjOiBhZHZpY2UuYzoxNzEKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iCittc2dzdHIgIuuzke2VqeydhCDrp4jsuZjsp4Ag66q77ZaI6riwIOuVjOusuOyXkCDrgZ3rgqnri4jri6QuIgorCisjOiBhZHZpY2UuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IGNoZWNraW5nIG91dCAnJXMnLlxuIgorIlxuIgorIllvdSBhcmUgaW4gJ2RldGFjaGVkIEhFQUQnIHN0YXRlLiBZb3UgY2FuIGxvb2sgYXJvdW5kLCBtYWtlIGV4cGVyaW1lbnRhbFxuIgorImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKKyJzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgcGVyZm9ybWluZyBhbm90aGVyIGNoZWNrb3V0LlxuIgorIlxuIgorIklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gcmV0YWluIGNvbW1pdHMgeW91IGNyZWF0ZSwgeW91IG1heVxuIgorImRvIHNvIChub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1iIHdpdGggdGhlIGNoZWNrb3V0IGNvbW1hbmQgYWdhaW4uIEV4YW1wbGU6XG4iCisiXG4iCisiICBnaXQgY2hlY2tvdXQgLWIgPG5ldy1icmFuY2gtbmFtZT5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIuyjvOydmDogJyVzJyDssrTtgazslYTsm4PtlZjquLAuXG4iCisiXG4iCisi7KeA6riIICdIRUFE6rCAIOu2hOumrOuQnCcg7IOB7YOc7J6F64uI64ukLiDsnbQg7IOB7YOc7JeQ7ISc64qUIOyXrOq4sOyggOq4sCDrj4zslYTrs7Tqs6AsXG4iCisi7Iuk7ZeY7KCB7Jy866GcIOuwlOq+uOqzoCDsu6TrsIvtlZjrjZTrnbzrj4QsIOyytO2BrOyVhOybg+2VoCDsiJgg7J6I64qUIOuLpOuluCDruIzrnpzsuZjsl5BcbiIKKyLsmIHtlqXsnYQg66+47LmY7KeAIOyViuqzoCDrs4Dqsr0g7IKs7ZWt7J2EIOyeg+yWtOuyhOumtCDsiJgg7J6I7Iq164uI64ukLlxuIgorIlxuIgorIuy7pOuwi+ydhCDsnKDsp4DtlZjripQg67iM656c7LmY66W8IOyDiOuhnCDrp4zrk5zroKTrqbQsICjsp4DquIjsnbTrk6Ag64KY7KSR7J2065OgKSDssrTtgazslYTsm4NcbiIKKyLrqoXroLnsnYQg64uk7IucIO2VmOuptOyEnCAtYiDsmLXshZjsnYQg7IKs7Jqp7ZWY66m0IOuQqeuLiOuLpC4g7JiI66W8IOuTpOyWtDpcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiA87IOILeu4jOuenOy5mC3snbTrpoQ+XG4iCisiXG4iCisKKyM6IGFwcGx5LmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIOqzteuwsSDsmLXshZggJyVzJyIKKworIzogYXBwbHkuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIOqzteuwsSDrrLTsi5wg7Ji17IWYICclcyciCisKKyM6IGFwcGx5LmM6MTIyCittc2dpZCAiLS1yZWplY3QgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tcmVqZWN0IOuwjyAtLTN3YXkg7Ji17IWY7J2AIOqwmeydtCDsk7gg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGFwcGx5LmM6MTI0Cittc2dpZCAiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tY2FjaGVkIOuwjyAtLTN3YXkg7Ji17IWY7J2AIOqwmeydtCDsk7gg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGFwcGx5LmM6MTI3Cittc2dpZCAiLS0zd2F5IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICLsoIDsnqXshowg67CW7JeQ7IScIC0tM3dheSDsmLXshZgg7IKs7JqpIgorCisjOiBhcHBseS5jOjEzOAorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIuyggOyepeyGjCDrsJbsl5DshJwgLS1pbmRleCDsmLXshZgg7IKs7JqpIgorCisjOiBhcHBseS5jOjE0MQorbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICLsoIDsnqXshowg67CW7JeQ7IScIC0tY2FjaGVkIOyYteyFmCDsgqzsmqkiCisKKyM6IGFwcGx5LmM6ODIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiCittc2dzdHIgIu2DgOyehOyKpO2DrO2UhCDsoJXqt5zsi53snYQg7KSA67mE7ZWgIOyImCDsl4bsirXri4jri6QgKCVzKSIKKworIzogYXBwbHkuYzo4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJyZWdleGVjKCnsl5DshJwg64uk7J2MIOyeheugpeyXkCDrjIDtlbQgJWTrsojsnYQg66as7YS07ZaI7Iq164uI64ukOiAlcyIKKworIzogYXBwbHkuYzo5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAi7Yyo7LmY7J2YICVk67KIIOykhOyXkCDtjIzsnbwg7J2066aE7J2EIOywvuydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjk0MgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IOyemOuqu+uQnCBnaXQtZGlmZiAtICUyJGTrsogg7KSE7JeQ7IScIC9kZXYvbnVsbOydhCDquLDrjIDtlojsp4Drp4wsICclMSRzJ+ydtCIKKyIo6rCAKSDsmZTsirXri4jri6QiCisKKyM6IGFwcGx5LmM6OTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5OiDsnpjrqrvrkJwgZ2l0LWRpZmYgLSAlZOuyiCDspITsl5Ag7IOIIO2MjOydvCDsnbTrpoTsnbQg7Jis67CU66W07KeAIOyViuyKteuLiOuLpCIKKworIzogYXBwbHkuYzo5NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IOyemOuqu+uQnCBnaXQtZGlmZiAtICVk67KIIOykhOyXkCDsmIjsoIQg7YyM7J28IOydtOumhOydtCDsmKzrsJTrpbTsp4Ag7JWK7Iq164uI64ukIgorCisjOiBhcHBseS5jOjk1NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IOyemOuqu+uQnCBnaXQtZGlmZiAtICVk67KIIOykhOyXkOyEnCAvZGV2L251bGzsnYQg6riw64yA7ZaI7Iq164uI64ukIgorCisjOiBhcHBseS5jOjk4MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgb24gbGluZSAlZDogJXMiCittc2dzdHIgIiVk67KIIOykhOyXkCDsnpjrqrvrkJwg66qo65OcOiAlcyIKKworIzogYXBwbHkuYzoxMzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImluY29uc2lzdGVudCBoZWFkZXIgbGluZXMgJWQgYW5kICVkIgorbXNnc3RyICLsnbzqtIDshLEg7JeG64qUIO2XpOuNlCDspIQgJWTrsogg67CPICVk67KIIgorCisjOiBhcHBseS5jOjE0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJyZWNvdW50OiDsmIjsg4HsuZgg66q77ZWcIOykhDogJS4qcyIKKworIzogYXBwbHkuYzoxNTQyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIiVk67KIIOykhOyXkCDtl6TrjZQg7JeG64qUIO2MqOy5mCDrtoDrtoQ6ICUuKnMiCisKKyM6IGFwcGx5LmM6MTU2MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCisi6rK966GcIOydtOumhCDrtoDrtoTsl5DshJwgJWTqsJzrpbwg7KCc6rGw6528IOuVjCBnaXQgZGlmZiDtl6TrjZTsl5Ag7YyM7J28IOydtOumhCDsoJXrs7TqsIAg7JeG7Iq164uIIgorIuuLpC4gKCVk67KIIOykhCkiCisKKyM6IGFwcGx5LmM6MTU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gKGxpbmUgJWQpIgorbXNnc3RyICJnaXQgZGlmZiDtl6TrjZTsl5Ag7YyM7J28IOydtOumhCDsoJXrs7TqsIAg7JeG7Iq164uI64ukICglZOuyiCDspIQpIgorCisjOiBhcHBseS5jOjE3NjMKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAi7IOIIO2MjOydvOydtCDsmIjsoIQg64K07Jqp7JeQIOydmOyhtO2VqeuLiOuLpCIKKworIzogYXBwbHkuYzoxNzY1Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAi7IKt7KCc7ZWcIO2MjOydvOyXkCDslYTsp4Eg64K07Jqp7J20IOuTpOyWtCDsnojsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MTc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIu2MqOy5mOqwgCAlZOuyiCDspITsl5DshJwg66ed6rCA7KGM7Iq164uI64ukIgorCisjOiBhcHBseS5jOjE4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIuyDiCDtjIzsnbwgJXPsnbQo6rCAKSDsmIjsoIQg64K07Jqp7JeQIOydmOyhtO2VqeuLiOuLpCIKKworIzogYXBwbHkuYzoxODM4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgIuyCreygnO2VnCDtjIzsnbwgJXPsnbQo6rCAKSDslYTsp4Eg64K07Jqp7J20IOuTpOyWtCDsnojsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MTg0MQorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIqKiDqsr3qs6A6ICVzIO2MjOydvOydmCDrgrTsmqnsnbQg67mE7Ja0IOyeiOyngOunjCDsgq3soJzrkJjsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiBhcHBseS5jOjE5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiJWTrsogg7KSE7JeQIOuwlOydtOuEiOumrCDtjKjsuZjqsIAg7IaQ7IOB65CY7JeI7Iq164uI64ukOiAlLipzIgorCisjOiBhcHBseS5jOjIwMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICIlZOuyiCDspITsl5Ag67CU7J2064SI66asIO2MqOy5mOqwgCDsnbTtlbTtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYXBwbHkuYzoyMTg1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgIiVk67KIIOykhOyXkCDsk7DroIjquLAg642w7J207YSw66eMIOyeiOuKlCDtjKjsuZgiCisKKyM6IGFwcGx5LmM6MjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICIlcyDsi6zrs7zrpq0g66eB7YGs66W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjIyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIKK21zZ3N0ciAiJXPsnYQo66W8KSDsl7TqsbDrgpgg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MjkzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgIuykhCDsi5zsnpHsnbQg7J6Y66q765CoOiAnJWMnIgorCisjOiBhcHBseS5jOjMwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICLtjKjsuZggJWTrsogg67aA67aEICVk67KIIOykhOyXkOyEnCDshLHqs7UgKOyYpO2UhOyFiyAlZOuyiCDspIQpIgorCisjOiBhcHBseS5jOjMwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGV4dCByZWR1Y2VkIHRvICglbGQvJWxkKSB0byBhcHBseSBmcmFnbWVudCBhdCAlZCIKK21zZ3N0ciAi7Luo7YWN7Iqk7Yq46rCAICglbGQvJWxkKeuhnCDspITslrTrk63ri4jri6QuICglZOuyiCDspITsl5DshJwg7KCB7JqpKSIKKworIzogYXBwbHkuYzozMDczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyLri6TsnYzsnYQg6rKA7IOJ7ZWY642YIOykkTpcbiIKKyIlLipzIgorCisjOiBhcHBseS5jOjMwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkCDrjIDtlZwg67CU7J2064SI66asIO2MqOy5mCDrjbDsnbTthLDqsIAg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjMxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJldmVyc2UtYXBwbHkgYSBiaW5hcnkgcGF0Y2ggd2l0aG91dCB0aGUgcmV2ZXJzZSBodW5rIHRvICclcyciCittc2dzdHIgIiIKKyLrsJjrjIAg7Zed7YGs6rCAIOyXhuycvOuptCAnJXMn7JeQIOuMgO2VnCDrsJTsnbTrhIjrpqwg7Yyo7LmY66W8IOuwmOuMgOuhnCDsoIHsmqntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYXBwbHkuYzozMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhcHBseSBiaW5hcnkgcGF0Y2ggdG8gJyVzJyB3aXRob3V0IGZ1bGwgaW5kZXggbGluZSIKK21zZ3N0ciAiIgorIuyghOyytCDsnbjrjbHsiqQg65287J247J20IOyXhuycvOuptCAnJXMn7JeQIOuMgO2VnCDrsJTsnbTrhIjrpqwg7Yyo7LmY66W8IOyggeyaqe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjMxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBwYXRjaCBhcHBsaWVzIHRvICclcycgKCVzKSwgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGVudHMuIgorbXNnc3RyICLtjKjsuZjqsIAgJyVzJyglcynsl5Ag7KCB7Jqp65CY7KeA66eMLCDtmITsnqwg64K07Jqp6rO8IOydvOy5mO2VmOyngCDslYrsirXri4jri6QuIgorCisjOiBhcHBseS5jOjMxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHBhdGNoIGFwcGxpZXMgdG8gYW4gZW1wdHkgJyVzJyBidXQgaXQgaXMgbm90IGVtcHR5IgorbXNnc3RyICLtjKjsuZjripQg67mIICclcyfsl5Ag7KCB7Jqp65CY7KeA66eMLCDtmITsnqwg67mE7Ja0IOyeiOyngCDslYrsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MzE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbmVjZXNzYXJ5IHBvc3RpbWFnZSAlcyBmb3IgJyVzJyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAiJyUyJHMn7JeQIOuMgO2VnCDtlYTsmpTtlZwgJTEkcyDtj6zsiqTtirjsnbTrr7jsp4Drpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MzE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggZG9lcyBub3QgYXBwbHkgdG8gJyVzJyIKK21zZ3N0ciAi67CU7J2064SI66asIO2MqOy5mOulvCAnJXMn7JeQIOyggeyaqe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjMyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKyInJXMn7JeQIOuMgO2VnCDrsJTsnbTrhIjrpqwg7Yyo7LmY6rCAIOyYrOuwlOultOyngCDslYrsnYAg6rKw6rO866W8IOunjOuTreuLiOuLpC4gKOq4sOuMgO2VnCDqsJIgJXMsIOyLpCIKKyLsoJwgJXMpIgorCisjOiBhcHBseS5jOjMyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgIu2MqOy5mCDsi6TtjKg6ICVzOiVsZCIKKworIzogYXBwbHkuYzozMzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAiJXPsnYQo66W8KSDqsIDsoLjsmKwg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYXBwbHkuYzozMzk2IGFwcGx5LmM6MzQwNyBhcHBseS5jOjM0NTMgc2V0dXAuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXMiCittc2dzdHIgIiVz7J2EKOulvCkg7J2964qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYXBwbHkuYzozNDA0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIuyLrOuzvOumrSDrp4Htgawg65Kk7JeQIOyeiOuKlCAnJXMnIOydveq4sCIKKworIzogYXBwbHkuYzozNDMzIGFwcGx5LmM6MzY3MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAiJXMg6rK966Gc6rCAIOydtOumhOydtCDrsJTrgIzsl4jqsbDrgpgg7IKt7KCc65CY7JeI7Iq164uI64ukIgorCisjOiBhcHBseS5jOjM1MTYgYXBwbHkuYzozNjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IOyduOuNseyKpOyXkCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MzUyNSBhcHBseS5jOjM2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IgorbXNnc3RyICIlczog7J24642x7Iqk7JmAIOunnuyngCDslYrsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MzU2MAorbXNnaWQgInJlcG9zaXRvcnkgbGFja3MgdGhlIG5lY2Vzc2FyeSBibG9iIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIuyggOyepeyGjOyXkCAzLeuwqe2WpSDrs5HtlansnLzroZwg64yA7Iug7ZWgIOuVjCDtlYTsmpTtlZwg67iU66Gt7J20IOyXhuyKteuLiOuLpC4iCisKKyM6IGFwcGx5LmM6MzU2MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIjMt67Cp7ZalIOuzke2VqeycvOuhnCDrjIDsi6Dtlanri4jri6QuLi5cbiIKKworIzogYXBwbHkuYzozNTc5IGFwcGx5LmM6MzU4MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgY3VycmVudCBjb250ZW50cyBvZiAnJXMnIgorbXNnc3RyICInJXMn7J2YIO2YhOyerCDrgrTsmqnsnYQg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MzU5NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmFsbCBiYWNrIG9uIHRocmVlLXdheSBtZXJnZS4uLlxuIgorbXNnc3RyICIzLeuwqe2WpSDrs5HtlansnLzroZwg64yA7Iug7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpC4uLlxuIgorCisjOiBhcHBseS5jOjM2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIHdpdGggY29uZmxpY3RzLlxuIgorbXNnc3RyICLtjKjsuZjrpbwgJyVzJ+yXkCDstqnrj4zsnbQg7J6I64qUIOyDge2DnOuhnCDsoIHsmqkuXG4iCisKKyM6IGFwcGx5LmM6MzYxNAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgY2xlYW5seS5cbiIKK21zZ3N0ciAi7Yyo7LmY66W8ICclcyfsl5Ag7Yyo7LmYIOusuOygnCDsl4bsnbQg7KCB7JqpLlxuIgorCisjOiBhcHBseS5jOjM2NDAKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICLsoJzqsbDtlZjripQg7Yyo7LmYIOuLpOydjOyXkCDtjIzsnbwg64K07Jqp7J20IOuCqOyVmOyKteuLiOuLpCIKKworIzogYXBwbHkuYzozNzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3cm9uZyB0eXBlIgorbXNnc3RyICIlczog7J6Y66q765CcIOyiheulmCIKKworIzogYXBwbHkuYzozNzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXPsnZgg7KKF66WY6rCAICVv7J207KeA66eMICVv7J20KOqwgCkg65CY7Ja07JW8IO2VqeuLiOuLpCIKKworIzogYXBwbHkuYzozODY0IGFwcGx5LmM6Mzg2NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdGggJyVzJyIKK21zZ3N0ciAi7J6Y66q765CcIOqyveuhnCAnJXMnIgorCisjOiBhcHBseS5jOjM5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IgorbXNnc3RyICIlczog7J2066+4IOyduOuNseyKpOyXkCDsnojsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MzkyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiVzOiDsnbTrr7gg7J6R7JeFIOuUlOugie2EsOumrOyXkCDsnojsirXri4jri6QiCisKKyM6IGFwcGx5LmM6Mzk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgIiUyJHPsnZgg7IOIIOuqqOuTnCglMSRvKeqwgCDsmIjsoIQg66qo65OcKCUzJG8p7JmAIOuLpOumheuLiOuLpCIKKworIzogYXBwbHkuYzozOTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIKK21zZ3N0ciAiJTIkc+ydmCDsg4gg66qo65OcKCUxJG8p6rCAICU0JHPsnZgg7JiI7KCEIOuqqOuTnCglMyRvKeyZgCDri6TrpoXri4jri6QiCisKKyM6IGFwcGx5LmM6Mzk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAi7JiB7ZalIOuwm+uKlCAnJXMnIO2MjOydvOydtCDsi6zrs7zrpq0g66eB7YGsIOuSpOyXkCDsnojsirXri4jri6QiCisKKyM6IGFwcGx5LmM6Mzk3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiVzOiDtjKjsuZjrpbwg7KCB7Jqp7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYXBwbHkuYzozOTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHBhdGNoICVzLi4uIgorbXNnc3RyICIlcyDtjKjsuZjrpbwg7ZmV7J247ZWY64qUIOykkeyeheuLiOuLpC4uLiIKKworIzogYXBwbHkuYzo0MDgwCisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgInNoYTEg7KCV67O06rCAIOyXhuqxsOuCmCAlcyDtlZjsnIQg66qo65OI7JeQ7IScIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjQwODcKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9kZSBjaGFuZ2UgZm9yICVzLCB3aGljaCBpcyBub3QgaW4gY3VycmVudCBIRUFEIgorbXNnc3RyICIlc+yXkCDrjIDtlZwg66qo65OcIOuzgOqyveydtOyngOunjCwg7ZiE7J6sIEhFQUTsl5Ag7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjQwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgKCVzKS4iCittc2dzdHIgInNoYTEg7KCV67O06rCAIOyXhuqxsOuCmCDsk7gg7IiYIOyXhuyKteuLiOuLpCAoJXMpLiIKKworIzogYXBwbHkuYzo0MDk1IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMzUgYnVpbHRpbi9yZXNldC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICLqsr3roZwgJyVzJ+yXkCDrjIDtlbQgbWFrZV9jYWNoZV9lbnRyeSDsi6TtjKgiCisKKyM6IGFwcGx5LmM6NDA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi7J6E7IucIOyduOuNseyKpOyXkCAlcyDtla3rqqnsnYQg7LaU6rCA7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6NDEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdGVtcG9yYXJ5IGluZGV4IHRvICVzIgorbXNnc3RyICLsnoTsi5wg7J24642x7Iqk66W8ICVz7JeQIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjQyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICLsnbjrjbHsiqTsl5DshJwgJXPsnYQo66W8KSDsoJzqsbDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYXBwbHkuYzo0MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiCAlc+yXkCDrjIDtlbQg7IaQ7IOB65CcIO2MqOy5mCIKKworIzogYXBwbHkuYzo0Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICLsg4jroZwg66eM65OgIO2MjOydvCAnJXMn7JeQIOuMgO2VtCBzdGF0KCntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYXBwbHkuYzo0Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICLsg4jroZwg66eM65OgIO2MjOydvCAnJXMn7JeQIOuMgO2VtCDsmIjruYQg7KCA7J6l7IaM66W8IOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjQzMDIgYXBwbHkuYzo0NDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIgorbXNnc3RyICIlc+yXkCDrjIDtlbQg7LqQ7IucIO2VreuqqeydhCDstpTqsIDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYXBwbHkuYzo0MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSB0byAnJXMnIgorbXNnc3RyICInJXMn7JeQIOyTsOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGFwcGx5LmM6NDM0NworIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAiJyVzJyDtjIzsnbzsnYQg64ur64qUIOykkeyeheuLiOuLpCIKKworIzogYXBwbHkuYzo0NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIKK21zZ3N0ciAiJyVzJyDtjIzsnbzsl5Ag7JO4IOyImCDsl4bsirXri4jri6QgKCclbycg66qo65OcKSIKKworIzogYXBwbHkuYzo0NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIiVzIO2MqOy5mCDquZTrgZTtlZjqsowg7KCB7JqpLiIKKworIzogYXBwbHkuYzo0NTIzCittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIuuCtOu2gCDsmKTrpZgiCisKKyM6IGFwcGx5LmM6NDUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gIiUlcyDtjKjsuZjrpbwgKCVk6rCcIOqxsOu2gCkg7KCB7JqpLi4uIgorCisjOiBhcHBseS5jOjQ1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICJ0cnVuY2F0aW5nIC5yZWog7YyM7J28IOydtOumhOydhCAnJS4qcy5yZWonKOycvCnroZwg7J6Q66aEIgorCisjOiBhcHBseS5jOjQ1NDUgYnVpbHRpbi9mZXRjaC5jOjc4NiBidWlsdGluL2ZldGNoLmM6MTAzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAiJXPsnYQo66W8KSDsl7Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYXBwbHkuYzo0NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIu2MqOy5mCDrtoDsnIQgIyVkIOq5lOuBlO2VmOqyjCDsoIHsmqkuIgorCisjOiBhcHBseS5jOjQ1NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICLtjKjsuZgg67aA7JyEICMlZCDqsbDrtoDrkKguIgorCisjOiBhcHBseS5jOjQ2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCBwYXRjaCAnJXMnLiIKK21zZ3N0ciAi7Yyo7LmYICclcycg6rG064SI65yALiIKKworIzogYXBwbHkuYzo0NjgxCittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICLsnbjsi53tlaAg7IiYIOyXhuuKlCDsnoXroKUiCisKKyM6IGFwcGx5LmM6NDcwMAorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgIuyduOuNseyKpCDtjIzsnbzsnYQg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6NDgzNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIHBhdGNoICclcyc6ICVzIgorbXNnc3RyICInJXMnIO2MqOy5mOulvCDsl7Qg7IiYIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IGFwcGx5LmM6NDg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvciIKK21zZ2lkX3BsdXJhbCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyWzBdICLqs7XrsLEg7Jik66WYICVk6rCc66W8IOuEmOyWtOqwkeuLiOuLpCIKKworIzogYXBwbHkuYzo0ODcwIGFwcGx5LmM6NDg4NQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZOuyiCDspITsl5DshJwg6rO167CxIOyYpOulmOulvCDstpTqsIDtlanri4jri6QuIgorCisjOiBhcHBseS5jOjQ4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAi6rO167CxIOyYpOulmOulvCDrsJTroZzsnqHsnYAg65Kk7JeQICVk67KIIOykhCDsoIHsmqkuIgorCisjOiBhcHBseS5jOjQ4OTQgYnVpbHRpbi9hZGQuYzo1MzggYnVpbHRpbi9tdi5jOjMwMCBidWlsdGluL3JtLmM6Mzg5Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICLsg4gg7J24642x7IqkIO2MjOydvOyXkCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYXBwbHkuYzo0OTIxIGFwcGx5LmM6NDkyNCBidWlsdGluL2FtLmM6MjI1NCBidWlsdGluL2FtLmM6MjI1NworIzogYnVpbHRpbi9jbG9uZS5jOjEyMCBidWlsdGluL2ZldGNoLmM6MTI2IGJ1aWx0aW4vcHVsbC5jOjE5OAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwNSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIxMAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMTMgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1ODQKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTg3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODA3CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE5NworbXNnaWQgInBhdGgiCittc2dzdHIgIuqyveuhnCIKKworIzogYXBwbHkuYzo0OTIyCittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAi7KO87Ja07KeEIOqyveuhnOyXkCDtlbTri7ntlZjripQg67OA6rK9IOyCrO2VreydhCDsoIHsmqntlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBhcHBseS5jOjQ5MjUKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICLso7zslrTsp4Qg6rK966Gc7JeQIO2VtOuLue2VmOuKlCDrs4Dqsr0g7IKs7ZWt7J2EIOyggeyaqe2VqeuLiOuLpCIKKworIzogYXBwbHkuYzo0OTI3IGJ1aWx0aW4vYW0uYzoyMjYzCittc2dpZCAibnVtIgorbXNnc3RyICLqsJzsiJgiCisKKyM6IGFwcGx5LmM6NDkyOAorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICLsoITthrXsoIHsnbggZGlmZiDqsr3roZwg7JWe7J2YIDzqsJzsiJg+6rCc7J2YIOyVniDsiqzrnpjsi5woLynrpbwg7KCc6rGw7ZWp64uI64ukIgorCisjOiBhcHBseS5jOjQ5MzEKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICLtjKjsuZjsl5DshJwg7LaU6rCA7ZWY64qUIO2MjOydvOydhCDrrLTsi5ztlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDkzMworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAi7Yyo7LmY66W8IOyggeyaqe2VmOuKlCDrjIDsi6AsIOyeheugpeyXkCDrjIDtlZwgZGlmZnN0YXTsnYQg7Lac66Cl7ZWp64uI64ukIgorCisjOiBhcHBseS5jOjQ5MzcKK21zZ2lkICJzaG93IG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIgorbXNnc3RyICLsi63sp4TsiJjroZwg7LaU6rCAIOuwjyDsgq3soJztlZwg7KSEIOyImOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDkzOQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgIu2MqOy5mOulvCDsoIHsmqntlZjripQg64yA7IugLCDsnoXroKXsl5Ag64yA7ZWcIOyalOyVveydhCDstpzroKXtlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDk0MQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUiCittc2dzdHIgIu2MqOy5mOulvCDsoIHsmqntlZjripQg64yA7IugLCDtjKjsuZjrpbwg7KCB7JqpIOqwgOuKpe2VnOyngCDtmZXsnbjtlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDk0MworbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAi7ZiE7J6sIOyduOuNseyKpOyXkOyEnCDtjKjsuZjqsIAg7KCB7JqpIOqwgOuKpe2VnOyngCDtmZXsnbjtlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDk0NQorbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLsnpHsl4Ug7Y+0642U66W8IOuwlOq+uOyngCDslYrqs6Ag7Yyo7LmY66W8IOyggeyaqe2VqeuLiOuLpCIKKworIzogYXBwbHkuYzo0OTQ3Cittc2dpZCAiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIKK21zZ3N0ciAi7J6R7JeFIOyYgeyXrSDrsJbsnZgg7YyM7J287J2EIOuwlOq+uOuKlCDtjKjsuZjrpbwg7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBhcHBseS5jOjQ5NTAKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAi6re466as6rOgIO2MqOy5mOuPhCDsoIHsmqntlanri4jri6QgKC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjayDsmLXshZjqs7wg6rCZ7J20IOyCrOyaqSkiCisKKyM6IGFwcGx5LmM6NDk1MgorbXNnaWQgImF0dGVtcHQgdGhyZWUtd2F5IG1lcmdlIGlmIGEgcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIu2MqOy5mOulvCDsoIHsmqntlZjsp4Ag7JWK7Jy866m0IDMt67Cp7ZalIOuzke2VqeydhCDsi5zrj4Ttlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDk1NAorbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICLrgrTsnqUg7J24642x7IqkIOygleuztOulvCDsgqzsmqntlbQg7J6E7IucIOyduOuNseyKpOulvCDrp4zrk63ri4jri6QiCisKKyM6IGFwcGx5LmM6NDk1NyBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY4IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MTUKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAi6rK966Gc66W8IE5VTCDrrLjsnpDroZwg6rWs67aE7ZWp64uI64ukIgorCisjOiBhcHBseS5jOjQ5NTkKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgIuy1nOyGjO2VnCA8bj7spITsnbQg7Luo7YWN7Iqk7Yq47JmAIOydvOy5mO2VmOuKlOyngCDtmZXsnbjtlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDk2MCBidWlsdGluL2FtLmM6MjI0MiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk1CisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk3IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTkKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE3NworbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAi64+Z7J6RIgorCisjOiBhcHBseS5jOjQ5NjEKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAi6rO167CxIOyYpOulmOqwgCDsnojripQg7LaU6rCA65CQ6rGw64KYIOyImOygleuQnCDspITsnYQg7LC+7Iq164uI64ukIgorCisjOiBhcHBseS5jOjQ5NjQgYXBwbHkuYzo0OTY3Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIKK21zZ3N0ciAi7Luo7YWN7Iqk7Yq466W8IOywvuydhCDrlYwg6rO167CxIOuzgOqyvSDsgqztla3snYQg66y07Iuc7ZWp64uI64ukIgorCisjOiBhcHBseS5jOjQ5NzAKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAi7Yyo7LmY66W8IOuwmOuMgCDsiJzshJzroZwg7KCB7Jqp7ZWp64uI64ukIgorCisjOiBhcHBseS5jOjQ5NzIKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAi7LWc7IaM7ZWc7J2YIOy7qO2FjeyKpO2KuCDtlZwg7KSE64+EIOyXhuydtCDsoIHsmqntlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDk3NAorbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICLqsbDrtoDrkJwg7Yyo7LmYIOu2gOu2hOydhCDrjIDsnZHrkJjripQgKi5yZWog7YyM7J287JeQIOuCqOqyqOuRoeuLiOuLpCIKKworIzogYXBwbHkuYzo0OTc2Cittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgIu2MqOy5mCDrtoDrtoTsnbQg6rK57LOQ64+EIO2XiOyaqe2VqeuLiOuLpCIKKworIzogYXBwbHkuYzo0OTc3IGJ1aWx0aW4vYWRkLmM6MjkwIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMwMSBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5OCBidWlsdGluL2ZzY2suYzo2NjYKKyM6IGJ1aWx0aW4vbG9nLmM6MTkwMSBidWlsdGluL212LmM6MTIyIGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAiYmUgdmVyYm9zZSIKK21zZ3N0ciAi7J6Q7IS47Z6IIO2RnOyLnCIKKworIzogYXBwbHkuYzo0OTc5Cittc2dpZCAidG9sZXJhdGUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIGZpbGUiCittc2dzdHIgIu2MjOydvCDrgZ3sl5Ag7KSE67CU6r+I7J20IOu5oOyhjOydjOydhCDsnpjrqrsg6rKA7IOJ7ZWcIOqyveyasOyXkCDrrLTsi5ztlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDk4MgorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAi7Yyo7LmYIOu2gOu2hOydmCDtl6TrjZTsnZgg7KSEIOyImOulvCDsi6DsmqntlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBhcHBseS5jOjQ5ODQgYnVpbHRpbi9hbS5jOjIyNTEKK21zZ2lkICJyb290IgorbXNnc3RyICLstZzsg4HsnIQiCisKKyM6IGFwcGx5LmM6NDk4NQorbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgIuuqqOuToCDtjIzsnbwg7J2066aE7JeQIDzstZzsg4HsnIQ+66W8IOyVnuyXkCDrtpnsnoXri4jri6QiCisKKyM6IGFyY2hpdmUuYzoxMworbXNnaWQgImdpdCBhcmNoaXZlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBhcmNoaXZlIFs87Ji17IWYPl0gPO2KuOumrC3rlLDsnIQ+IFs86rK966GcPi4uLl0iCisKKyM6IGFyY2hpdmUuYzoxNAorbXNnaWQgImdpdCBhcmNoaXZlIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MTUKK21zZ2lkICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA87KCA7J6l7IaMPiBbLS1leGVjIDzrqoXroLk+XSBbPOyYteyFmD5dIDztirjrpqwt65Sw7JyEPiBbPOqyveuhnCIKKyI+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE2Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPOyggOyepeyGjD4gWy0tZXhlYyA866qF66C5Pl0gLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MzUxIGJ1aWx0aW4vYWRkLmM6MTc2IGJ1aWx0aW4vYWRkLmM6NTE0IGJ1aWx0aW4vcm0uYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAiJyVzJyDqsr3roZzrqoXshLjqsIAg7Ja065akIO2MjOydvOqzvOuPhCDsnbzsuZjtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBhcmNoaXZlLmM6NDM0Cittc2dpZCAiZm10IgorbXNnc3RyICLtmJXsi50iCisKKyM6IGFyY2hpdmUuYzo0MzQKK21zZ2lkICJhcmNoaXZlIGZvcm1hdCIKK21zZ3N0ciAi7JWV7LaVIO2YleyLnSIKKworIzogYXJjaGl2ZS5jOjQzNSBidWlsdGluL2xvZy5jOjE0NjIKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgIuygkeuRkOyWtCIKKworIzogYXJjaGl2ZS5jOjQzNgorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgIuyVhOy5tOydtOu4jOydmCDqsIEg6rK966GcIOydtOumhOydmCDslZ7sl5Ag7KeA7KCV7ZWcIOqyveuhnOulvCDrtpnsnoXri4jri6QiCisKKyM6IGFyY2hpdmUuYzo0MzcgYnVpbHRpbi9ibGFtZS5jOjgxMyBidWlsdGluL2JsYW1lLmM6ODE0IGJ1aWx0aW4vY29uZmlnLmM6MTI3CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAwNyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAwOSBidWlsdGluL2dyZXAuYzo4NjkKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDMgYnVpbHRpbi9scy1maWxlcy5jOjU1MSBidWlsdGluL2xzLWZpbGVzLmM6NTU0CisjOiBidWlsdGluL25vdGVzLmM6NDA1IGJ1aWx0aW4vbm90ZXMuYzo1NjggYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTkKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNjUKK21zZ2lkICJmaWxlIgorbXNnc3RyICLtjIzsnbwiCisKKyM6IGFyY2hpdmUuYzo0MzggYnVpbHRpbi9hcmNoaXZlLmM6ODkKK21zZ2lkICJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiCittc2dzdHIgIuyVhOy5tOydtOu4jOulvCDsnbQg7YyM7J287JeQIOyUgeuLiOuLpCIKKworIzogYXJjaGl2ZS5jOjQ0MAorbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIuyekeyXhSDtj7TrjZTsnZggLmdpdGF0dHJpYnV0ZXPrpbwg7J297Iq164uI64ukIgorCisjOiBhcmNoaXZlLmM6NDQxCittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAi7JWE7Lm07J2067iM7JeQIO2PrO2VqOuQnCDtjIzsnbzsnYQg7ZGc7KSA7Jik66WY66GcIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYXJjaGl2ZS5jOjQ0MgorbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgIuyggOyepeunjCDtlZjquLAiCisKKyM6IGFyY2hpdmUuYzo0NDMKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgIuuNlCDruaDrpbTqsowg7JWV7LaVIgorCisjOiBhcmNoaXZlLmM6NDUxCittc2dpZCAiY29tcHJlc3MgYmV0dGVyIgorbXNnc3RyICLrjZQg7J6R6rKMIOyVley2lSIKKworIzogYXJjaGl2ZS5jOjQ1NAorbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAi7KeA7JuQ7ZWY64qUIOyVley2lSDtmJXsi53snZgg66qp66Gd7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYXJjaGl2ZS5jOjQ1NiBidWlsdGluL2FyY2hpdmUuYzo5MCBidWlsdGluL2Nsb25lLmM6MTEwIGJ1aWx0aW4vY2xvbmUuYzoxMTMKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjIyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTkzCittc2dpZCAicmVwbyIKK21zZ3N0ciAi7KCA7J6l7IaMIgorCisjOiBhcmNoaXZlLmM6NDU3IGJ1aWx0aW4vYXJjaGl2ZS5jOjkxCittc2dpZCAicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iCittc2dzdHIgIuybkOqyqSDsoIDsnqXshowgPOyggOyepeyGjD7sl5DshJwg7JWE7Lm07J2067iM66W8IOqwgOyguOyYteuLiOuLpCIKKworIzogYXJjaGl2ZS5jOjQ1OCBidWlsdGluL2FyY2hpdmUuYzo5MiBidWlsdGluL25vdGVzLmM6NDg5Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAi66qF66C5IgorCisjOiBhcmNoaXZlLmM6NDU5IGJ1aWx0aW4vYXJjaGl2ZS5jOjkzCittc2dpZCAicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIgorbXNnc3RyICLsm5DqsqkgZ2l0LXVwbG9hZC1hcmNoaXZlIOuqheugueydmCDqsr3roZwiCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLXJlbW90ZSIKK21zZ3N0ciAi7JiI7IOB7LmYIOuqu+2VnCDsmLXshZggLS1yZW1vdGUiCisKKyM6IGFyY2hpdmUuYzo0NjgKK21zZ2lkICJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIKK21zZ3N0ciAiLS1leGVjIOyYteyFmOydgCAtLXJlbW90ZSDsmLXshZjqs7wg6rCZ7J20IOyCrOyaqe2VoCDqsr3smrDsl5Drp4wg7JO4IOyImCDsnojsirXri4jri6QuIgorCisjOiBhcmNoaXZlLmM6NDcwCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIuyYiOyDgey5mCDrqrvtlZwg7Ji17IWYIC0tb3V0cHV0IgorCisjOiBhcmNoaXZlLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg7JWE7Lm07J2067iMIO2YleyLnSAnJXMnIgorCisjOiBhcmNoaXZlLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiCittc2dzdHIgIiclcycg7ZiV7Iud7JeQ7ISc64qUIOyngOybkO2VmOyngCDslYrripQg7J247J6QOiAtJWQiCisKKyM6IGF0dHIuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZSIKK21zZ3N0ciAiJS4qc+ydgCjripQpIOyYrOuwlOuluCDsho3shLEg7J2066aE7J20IOyVhOuLmeuLiOuLpCIKKworIzogYXR0ci5jOjQxNQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorImdpdCBhdHRyaWJ1dGVz7JeQ7IScIOuwmOuMgCDtjKjthLTsnYAg66y07Iuc65Cp64uI64ukLlxuIgorIuyVnuyXkCDripDrgoztkZzrpbwg7JOw66Ck66m0ICdcXCEn66W8IOyCrOyaqe2VmOyLreyLnOyYpC4iCisKKyM6IGJpc2VjdC5jOjQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWRseSBxdW90ZWQgY29udGVudCBpbiBmaWxlICclcyc6ICVzIgorbXNnc3RyICInJXMnIO2MjOydvCDslYjsl5Ag7J6Y66q765CcIOuUsOyYtO2RnOqwgCDrtpnsnYAg64K07JqpOiAlcyIKKworIzogYmlzZWN0LmM6NjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGNhbm5vdCBiaXNlY3QgbW9yZSFcbiIKK21zZ3N0ciAi642UIOydtOyDgSDsnbTrk7HrtoTtlaAg7IiYIOyXhuyKteuLiOuLpCFcbiIKKworIzogYmlzZWN0LmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICLsmKzrsJTrpbgg7Luk67CLIOydtOumhOydtCDslYTri5nri4jri6QgKCVzKSIKKworIzogYmlzZWN0LmM6NzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBiYWQuXG4iCisiVGhpcyBtZWFucyB0aGUgYnVnIGhhcyBiZWVuIGZpeGVkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyIlcyDrs5Htlakg67Kg7J207Iqk6rCAIOu5hOygleyDgeyeheuLiOuLpC5cbiIKKyLrsoTqt7jqsIAgJXMg67CPIFslc10g7IKs7J207JeQ7IScIOqzoOyzkOyhjOuLpOuKlCDrnLvsnoXri4jri6QuXG4iCisKKyM6IGJpc2VjdC5jOjc1MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgbmV3LlxuIgorIlRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiJXMg67OR7ZWpIOuyoOydtOyKpOqwgCDsg4jroa3sirXri4jri6QuXG4iCisi7IaN7ISx7J20ICVzIOuwjyBbJXNdIOyCrOydtOyXkOyEnCDrs4Dqsr3rkJjsl4jsirXri4jri6QuXG4iCisKKyM6IGJpc2VjdC5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIiVzIOuzke2VqSDrsqDsnbTsiqTqsIAgJXPsnoXri4jri6QuXG4iCisi7LKY7J2MICclcycg7Luk67CL7J20ICVzIOuwjyBbJXNdIOyCrOydtOudvOuKlCDrnLvsnoXri4jri6QuXG4iCisKKyM6IGJpc2VjdC5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU29tZSAlcyByZXZzIGFyZSBub3QgYW5jZXN0b3JzIG9mIHRoZSAlcyByZXYuXG4iCisiZ2l0IGJpc2VjdCBjYW5ub3Qgd29yayBwcm9wZXJseSBpbiB0aGlzIGNhc2UuXG4iCisiTWF5YmUgeW91IG1pc3Rvb2sgJXMgYW5kICVzIHJldnM/XG4iCittc2dzdHIgIiIKKyLsnbzrtoAgJXMg66as67mE7KCE7J20ICVzIOumrOu5hOyghOydmCDqs7zqsbAg7ZWt66qp7J20IOyVhOuLmeuLiOuLpC5cbiIKKyJnaXQgYmlzZWN0IOuqheugueydgCDsnbQg6rK97Jqw7JeQ64qUIOyYrOuwlOultOqyjCDrj5nsnpHtlZjsp4Ag7JWK7Iq164uI64ukLlxuIgorIiVzIOuwjyAlcyDrpqzruYTsoITsnYQg7J6Y66q7IOyTtCDqsoMg7JWE64uZ64uI6rmMP1xuIgorCisjOiBiaXNlY3QuYzo3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBtZXJnZSBiYXNlIGJldHdlZW4gJXMgYW5kIFslc10gbXVzdCBiZSBza2lwcGVkLlxuIgorIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCAlcyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgJXMuXG4iCisiV2UgY29udGludWUgYW55d2F5LiIKK21zZ3N0ciAiIgorIiVzIOuwjyAlcyDsgqzsnbTsnZgg67OR7ZWpIOuyoOydtOyKpOulvCDqsbTrhIjrnIHri4jri6QuXG4iCisi6re465+s66+A66GcIOyymOydjCAlcyDsu6TrsIvsnbQgJXMg67CPICVzIOyCrOydtOyXkCDsnojripTsp4Ag7ZmV7Iug7ZWgIOyImCDsl4bsirXri4jri6QuXG4iCisi7Ja07KiM65OgIOqzhOyGje2VqeuLiOuLpC4iCisKKyM6IGJpc2VjdC5jOjgxMQorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6IGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZFxuIgorbXNnc3RyICLsnbTrk7HrtoQ6IOuzke2VqSDrsqDsnbTsiqTrpbwg7Iuc7ZeY7ZW07JW8IO2VqeuLiOuLpFxuIgorCisjOiBiaXNlY3QuYzo4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSAlcyByZXZpc2lvbiBpcyBuZWVkZWQiCittc2dzdHIgIu2VmOuCmOydmCAlcyDrpqzruYTsoITsnbQg7ZWE7JqU7ZWp64uI64ukIgorCisjOiBiaXNlY3QuYzo4NzAgYnVpbHRpbi9ub3Rlcy5jOjE3NSBidWlsdGluL3RhZy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAiJyVzJyDtjIzsnbzsnYQg66eM65OkIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJpc2VjdC5jOjkyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciCittc2dzdHIgIiclcycg7YyM7J287J2EIOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBiaXNlY3QuYzo5NTEKK21zZ2lkICJyZWFkaW5nIGJpc2VjdCByZWZzIGZhaWxlZCIKK21zZ3N0ciAi7J2065Ox67aEIOugiO2NvOufsOyKpCDsnb3quLDsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBiaXNlY3QuYzo5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgd2FzIGJvdGggJXMgYW5kICVzXG4iCittc2dzdHIgIiVz7J2AKOuKlCkgJXMg67CPICVzIOuqqOuRkOyXkCDtlbTri7nrkKnri4jri6RcbiIKKworIzogYmlzZWN0LmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0ZXN0YWJsZSBjb21taXQgZm91bmQuXG4iCisiTWF5YmUgeW91IHN0YXJ0ZWQgd2l0aCBiYWQgcGF0aCBwYXJhbWV0ZXJzP1xuIgorbXNnc3RyICIiCisi7Iuc7ZeYIOqwgOuKpe2VnCDsu6TrsIvsnbQg7JeG7Iq164uI64ukLlxuIgorIuyemOuqu+uQnCDqsr3roZwg7YyM652866+47YSw66GcIOyLnOyeke2VmOyngCDslYrslZjsirXri4jquYw/XG4iCisKKyM6IGJpc2VjdC5jOjk5NworIywgYy1mb3JtYXQKK21zZ2lkICIocm91Z2hseSAlZCBzdGVwKSIKK21zZ2lkX3BsdXJhbCAiKHJvdWdobHkgJWQgc3RlcHMpIgorbXNnc3RyWzBdICIo64yA6561ICVkIOuLqOqzhCkiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgbGFzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggIihyb3VnaGx5ICVkCisjLiBzdGVwcykiIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJpc2VjdC5jOjEwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICLsnbTrk7HrtoQ6ICUyJHMg65Kk7JeQIOyLnO2XmO2VoCDrpqzruYTsoITsnbQgJTEkZOqwnCDrgqjslZjsirXri4jri6RcbiIKKworIzogYmxhbWUuYzoxNzU2Cittc2dpZCAiLS1jb250ZW50cyBhbmQgLS1yZXZlcnNlIGRvIG5vdCBibGVuZCB3ZWxsLiIKK21zZ3N0ciAiLS1jb250ZW50cyDrsI8gLS1yZXZlcnNlIOyYteyFmOydgCDtmLjtmZjrkJjsp4Ag7JWK7Iq164uI64ukLiIKKworIzogYmxhbWUuYzoxNzY3Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbnRlbnRzIHdpdGggZmluYWwgY29tbWl0IG9iamVjdCBuYW1lIgorbXNnc3RyICItLWNvbnRlbnRzIOyYteyFmOydhCDrp4jsp4Drp4kg7Jik67iM7KCd7Yq4IOydtOumhOyXkCDsgqzsmqntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYmxhbWUuYzoxNzg3Cittc2dpZCAiLS1yZXZlcnNlIGFuZCAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHNwZWNpZmllZCBsYXRlc3QgY29tbWl0IgorbXNnc3RyICIiCisiLS1yZXZlcnNlIOuwjyAtLWZpcnN0LXBhcmVudCDsmLXshZjsnYQg6rCZ7J20IOyTsOuptCDstZzqt7wg7Luk67CL7J2EIOyngOygle2VtOyVvCDtlanri4jri6QiCisKKyM6IGJsYW1lLmM6MTc5NiBidW5kbGUuYzoxNjAgcmVmLWZpbHRlci5jOjIwNzUgc2VxdWVuY2VyLmM6MTg2MQorIzogc2VxdWVuY2VyLmM6MzYzMiBidWlsdGluL2NvbW1pdC5jOjk4MSBidWlsdGluL2xvZy5jOjM2NiBidWlsdGluL2xvZy5jOjkyMAorIzogYnVpbHRpbi9sb2cuYzoxMzcxIGJ1aWx0aW4vbG9nLmM6MTcwMiBidWlsdGluL2xvZy5jOjE5NTAgYnVpbHRpbi9tZXJnZS5jOjM3MgorIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE5MgorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICLrpqzruYTsoIQgd2FsayDspIDruYTqsIAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBibGFtZS5jOjE4MTQKK21zZ2lkICIiCisiLS1yZXZlcnNlIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgcmFuZ2UgYWxvbmcgZmlyc3QtcGFyZW50IGNoYWluIgorbXNnc3RyICIiCisiLS1yZXZlcnNlIOuwjyAtLWZpcnN0LXBhcmVudCDsmLXshZjsnYQg6rCZ7J20IOyTsOuptCDstZzstIgt7IOB7JyEIOyytOyduOqzvCDrspTsnITqsIAg7ZWE7JqU7ZWp64uIIgorIuuLpCIKKworIzogYmxhbWUuYzoxODI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcGF0aCAlcyBpbiAlcyIKK21zZ3N0ciAiJXMg6rK966Gc6rCAICVzIOyViOyXkCDsl4bsirXri4jri6QiCisKKyM6IGJsYW1lLmM6MTgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIgorbXNnc3RyICIlcyDqsr3roZzsl5Ag64yA7ZW0ICVzIOu4lOuhreydhCDsnb3snYQg7IiYIOyXhuydjCIKKworIzogYnJhbmNoLmM6NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkFmdGVyIGZpeGluZyB0aGUgZXJyb3IgY2F1c2UgeW91IG1heSB0cnkgdG8gZml4IHVwXG4iCisidGhlIHJlbW90ZSB0cmFja2luZyBpbmZvcm1hdGlvbiBieSBpbnZva2luZ1xuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIi4iCittc2dzdHIgIiIKKyJcbiIKKyLsmKTrpZjrpbwg7IiY7KCV7ZWcIOuLpOydjCDsm5Dqsqkg7LaU7KCBIOygleuztOulvFxuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIiDrqoXroLnsnYRcbiIKKyLsi6TtlontlbQg7IiY7KCV7ZWgIOyImCDsnojsirXri4jri6QuIgorCisjOiBicmFuY2guYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3Qgc2V0dGluZyBicmFuY2ggJXMgYXMgaXRzIG93biB1cHN0cmVhbS4iCittc2dzdHIgIiVzIOu4jOuenOy5mOulvCDsnpDsi6DsnZgg7JeF7Iqk7Yq466a87Jy866GcIOyngOygle2VmOyngCDslYrsnYwuIgorCisjOiBicmFuY2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyInJXMnIOu4jOuenOy5mOqwgCDrpqzrsqDsnbTsiqTrpbwg7Ya17ZW0IOumrOuqqO2KuOydmCAnJXMnIOu4jOuenOy5mOulvCAoJyVzJ+yXkOyEnCkg65Sw65286rCA64+E66GdIOyEpCIKKyLsoJXrkJjsl4jsirXri4jri6QuIgorCisjOiBicmFuY2guYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJy4iCittc2dzdHIgIiIKKyInJXMnIOu4jOuenOy5mOqwgCDrpqzrqqjtirjsnZggJyVzJyDruIzrnpzsuZjrpbwgKCclcyfsl5DshJwpIOuUsOudvOqwgOuPhOuhnSDshKTsoJXrkJjsl4jsirXri4jri6QuIgorCisjOiBicmFuY2guYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiJyVzJyDruIzrnpzsuZjqsIAg66as67Kg7J207Iqk66W8IO2Gte2VtCDrpqzrqqjtirjsnZggJyVzJyDruIzrnpzsuZjrpbwg65Sw65286rCA64+E66GdIOyEpOygleuQmOyXiOyKteuLiCIKKyLri6QuIgorCisjOiBicmFuY2guYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiJyVzJyDruIzrnpzsuZjqsIAgJyVzJyDruIzrnpzsuZjrpbwg65Sw65286rCA64+E66GdIOyEpOygleuQmOyXiOyKteuLiOuLpC4iCisKKyM6IGJyYW5jaC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIiclcycg67iM656c7LmY6rCAIOumrOuyoOydtOyKpOulvCDthrXtlbQg66as66qo7Yq47J2YICclcycg66CI7Y2865+w7Iqk66W8IOuUsOudvOqwgOuPhOuhnSDshKTsoJXrkJjsl4jsirUiCisi64uI64ukLiIKKworIzogYnJhbmNoLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycuIgorbXNnc3RyICInJXMnIOu4jOuenOy5mOqwgCDrpqzrqqjtirjsnZggJyVzJyDroIjtjbzrn7DsiqTrpbwg65Sw65286rCA64+E66GdIOyEpOygleuQmOyXiOyKteuLiOuLpC4iCisKKyM6IGJyYW5jaC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiJyVzJyDruIzrnpzsuZjqsIAg66as67Kg7J207Iqk66W8IO2Gte2VtCDroZzsu6zsnZggJyVzJyDroIjtjbzrn7DsiqTrpbwg65Sw65286rCA64+E66GdIOyEpOygleuQmOyXiOyKteuLiCIKKyLri6QuIgorCisjOiBicmFuY2guYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAnJXMnLiIKK21zZ3N0ciAiJyVzJyDruIzrnpzsuZjqsIAg66Gc7Lus7J2YICclcycg66CI7Y2865+w7Iqk66W8IOuUsOudvOqwgOuPhOuhnSDshKTsoJXrkJjsl4jsirXri4jri6QuIgorCisjOiBicmFuY2guYzoxMjAKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgdXBzdHJlYW0gYnJhbmNoIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIuyXheyKpO2KuOumvCDruIzrnpzsuZgg7ISk7KCV7J2EIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBicmFuY2guYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAi65Sw65286rCA7KeAIOyViuydjDogJXMg66CI7Y2865+w7Iqk7JeQIOuMgO2VtCDslaDrp6TtlZwg7KCV67O0IgorCisjOiBicmFuY2guYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcyfsnYAo64qUKSDsmKzrsJTrpbgg67iM656c7LmYIOydtOumhOydtCDslYTri5nri4jri6QuIgorCisjOiBicmFuY2guYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIuydtOumhOydtCAnJXMn7J24IOu4jOuenOy5mOqwgCDsnbTrr7gg7J6I7Iq164uI64ukLiIKKworIzogYnJhbmNoLmM6MjE0Cittc2dpZCAiQ2Fubm90IGZvcmNlIHVwZGF0ZSB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLtmITsnqwg67iM656c7LmY66W8IOqwleygnOuhnCDsl4XrjbDsnbTtirjtlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJyYW5jaC5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50ICclcycgaXMgbm90IGEgYnJhbmNoLiIKK21zZ3N0ciAiIgorIuuUsOudvOqwgOq4sCDsoJXrs7Trpbwg7ISk7KCV7ZWgIOyImCDsl4bsirXri4jri6QuIOyLnOyekSDsnITsuZggJyVzJ+ydtCjqsIApIOu4jOuenOy5mOqwgCDslYTri5nri4jri6QuIgorCisjOiBicmFuY2guYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHJlcXVlc3RlZCB1cHN0cmVhbSBicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi7JqU7LKt7ZWcIOyXheyKpO2KuOumvCAnJXMnIOu4jOuenOy5mOqwgCDsl4bsirXri4jri6QiCisKKyM6IGJyYW5jaC5jOjIzOAorbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGJhc2luZyB5b3VyIHdvcmsgb24gYW4gdXBzdHJlYW1cbiIKKyJicmFuY2ggdGhhdCBhbHJlYWR5IGV4aXN0cyBhdCB0aGUgcmVtb3RlLCB5b3UgbWF5IG5lZWQgdG9cbiIKKyJydW4gXCJnaXQgZmV0Y2hcIiB0byByZXRyaWV2ZSBpdC5cbiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIHRvIHB1c2ggb3V0IGEgbmV3IGxvY2FsIGJyYW5jaCB0aGF0XG4iCisid2lsbCB0cmFjayBpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LCB5b3UgbWF5IHdhbnQgdG8gdXNlXG4iCisiXCJnaXQgcHVzaCAtdVwiIHRvIHNldCB0aGUgdXBzdHJlYW0gY29uZmlnIGFzIHlvdSBwdXNoLiIKK21zZ3N0ciAiIgorIlxuIgorIuumrOuqqO2KuOyXkCDsnbTrr7gg7J6I64qUIOyXheyKpO2KuOumvCDruIzrnpzsuZjrpbwg6riw67CY7Jy866GcIOyekeyXhe2VmOugpOuptCxcbiIKKyLrqLzsoIAgXCJnaXQgZmV0Y2hcIuuhnCDqsIDsoLgg66as66qo7Yq4IOu4jOuenOy5mOulvCDqsIDsoLjsmLXri4jri6QuXG4iCisiXG4iCisi7IOIIOuhnOy7rCDruIzrnpzsuZjrpbwg6rGw6riw7JeQIO2VtOuLue2VmOuKlCDrpqzrqqjtirgg67iM656c7LmY66GcIHB1c2jtlZjroKTrqbQsXG4iCisiXCJnaXQgcHVzaCAtdVwi66GcIHB1c2jtlZjripQg7JeF7Iqk7Yq466a87J2EIOyEpOygle2VoCDsiJgg7J6I7Iq164uI64ukLiIKKworIzogYnJhbmNoLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAi7Jis67CU66W4IOyYpOu4jOygne2KuCDsnbTrpoTsnbQg7JWE64uZ64uI64ukOiAnJXMnLiIKKworIzogYnJhbmNoLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIuyVoOunpO2VnCDsmKTruIzsoJ3tirgg7J2066aEOiAnJXMnLiIKKworIzogYnJhbmNoLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIuyYrOuwlOuluCDruIzrnpzsuZgg7JyE7LmY6rCAIOyVhOuLmeuLiOuLpDogJyVzJy4iCisKKyM6IGJyYW5jaC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydgCjripQpIOydtOuvuCAnJXMnIOychOy5mOyXkCDrsJvslYTsoLgg7J6I7Iq164uI64ukIgorCisjOiBicmFuY2guYzozODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBvZiB3b3JraW5nIHRyZWUgJXMgaXMgbm90IHVwZGF0ZWQiCittc2dzdHIgIuyekeyXhSDtj7TrjZQgJXPsnZgg7Zek65Oc6rCAIOyXheuNsOydtO2KuOuQmOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGJ1bmRsZS5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgbG9vayBsaWtlIGEgdjIgYnVuZGxlIGZpbGUiCittc2dzdHIgIiclcycg7YyM7J287J20IOuyhOyghDIg67KI65OkIO2MjOydvOuhnCDrs7TsnbTsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidW5kbGUuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgIuyduOyLne2VoCDsiJgg7JeG64qUIO2XpOuNlDogJXMlcyAoJWQpIgorCisjOiBidW5kbGUuYzo4OCBzZXF1ZW5jZXIuYzoyMDgxIHNlcXVlbmNlci5jOjI1NTggYnVpbHRpbi9jb21taXQuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOyXtCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidW5kbGUuYzoxMzkKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAi7KCA7J6l7IaM7JeQIO2VhOyImOyggeyduCDri6TsnYwg7Luk67CL7J20IOyXhuyKteuLiOuLpDoiCisKKyM6IGJ1bmRsZS5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAi67KI65Ok7JeQIOuLpOydjCDroIjtjbzrn7DsiqQgJWTqsJzqsIAg7J6I7Iq164uI64ukOiIKKworIzogYnVuZGxlLmM6MTk3Cittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIuuyiOuTpOydgCDsoITssrQg7Luk67CLIOuCtOyXreydhCDquLDroZ3tlanri4jri6QuIgorCisjOiBidW5kbGUuYzoxOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIuuyiOuTpOyXkCDri6TsnYwg66CI7Y2865+w7IqkICVk6rCc6rCAIO2VhOyalO2VqeuLiOuLpDoiCisKKyM6IGJ1bmRsZS5jOjI1OAorbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgInBhY2stb2JqZWN0cyDrqoXroLnsnYQg7Iuk7ZaJ7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1bmRsZS5jOjI2OQorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICJwYWNrLW9iamVjdHMg66qF66C57J20IOyjveyXiOyKteuLiOuLpCIKKworIzogYnVuZGxlLmM6MzExCittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAicmV2LWxpc3Qg66qF66C57J20IOyjveyXiOyKteuLiOuLpCIKKworIzogYnVuZGxlLmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICJyZXYtbGlzdCDsmLXshZjsl5DshJwgJyVzJyDroIjtjbzrn7DsiqTqsIAg7KCc7Jm465CY7JeI7Iq164uI64ukIgorCisjOiBidW5kbGUuYzo0NTAgYnVpbHRpbi9sb2cuYzoxODMgYnVpbHRpbi9sb2cuYzoxNjA3IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg7J247J6QOiAlcyIKKworIzogYnVuZGxlLmM6NDU4Cittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgIuu5iCDrsojrk6TsnYAg66eM65Ok7KeAIOyViuyKteuLiOuLpC4iCisKKyM6IGJ1bmRsZS5jOjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIiclcyfsnYQo66W8KSDrp4zrk6Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVuZGxlLmM6NDk4Cittc2dpZCAiaW5kZXgtcGFjayBkaWVkIgorbXNnc3RyICJpbmRleC1wYWNrIOuqheugueydtCDso73sl4jsirXri4jri6QiCisKKyM6IGNvbG9yLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgIuyemOuqu+uQnCDsg4kg6rCSOiAlLipzIgorCisjOiBjb21taXQuYzo0MyBzZXF1ZW5jZXIuYzoyMzY0IGJ1aWx0aW4vYW0uYzo0MjEgYnVpbHRpbi9hbS5jOjQ2NQorIzogYnVpbHRpbi9hbS5jOjE0MzYgYnVpbHRpbi9hbS5jOjIwNzIgYnVpbHRpbi9yZXBsYWNlLmM6Mzc2CisjOiBidWlsdGluL3JlcGxhY2UuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIgorbXNnc3RyICJwYXJzZSAlc+ydhCjrpbwpIO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBjb21taXQuYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICIlcyAlcywg7Luk67CL7J20IOyVhOuLmeuLiOuLpCIKKworIzogY29tbWl0LmM6MTgyCittc2dpZCAiIgorIlN1cHBvcnQgZm9yIDxHSVRfRElSPi9pbmZvL2dyYWZ0cyBpcyBkZXByZWNhdGVkXG4iCisiYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBHaXQgdmVyc2lvbi5cbiIKKyJcbiIKKyJQbGVhc2UgdXNlIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIlxuIgorInRvIGNvbnZlcnQgdGhlIGdyYWZ0cyBpbnRvIHJlcGxhY2UgcmVmcy5cbiIKKyJcbiIKKyJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiIgorbXNnc3RyICIiCisiPEdJVF9ESVI+L2luZm8vZ3JhZnRz7JeQIOuMgO2VnCDsp4Dsm5DsnYAg64uk7J2MIOq5g1xuIgorIuuyhOyghOyXkOyEnCDsoJzqsbDrkKAg7JiI7KCV7J6F64uI64ukLlxuIgorIlxuIgorIuq3uOuemO2UhO2KuOulvCDroIjtjbzrn7DsiqTroZwg7KCE7ZmY7ZWY66Ck66m0XG4iCisiXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiIOuqheugueydhFxuIgorIuyCrOyaqe2VmOyLreyLnOyYpC5cbiIKKyJcbiIKKyLsnbQg66mU7Iuc7KeA66W8IOuztOyngCDslYrsnLzroKTrqbRcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIlxuIgorIuuqheugueydhCDsgqzsmqntlZjsi63si5zsmKQiCisKKyM6IGNvbW1pdC5jOjE1NDAKK21zZ2lkICIiCisiV2FybmluZzogY29tbWl0IG1lc3NhZ2UgZGlkIG5vdCBjb25mb3JtIHRvIFVURi04LlxuIgorIllvdSBtYXkgd2FudCB0byBhbWVuZCBpdCBhZnRlciBmaXhpbmcgdGhlIG1lc3NhZ2UsIG9yIHNldCB0aGUgY29uZmlnXG4iCisidmFyaWFibGUgaTE4bi5jb21taXRlbmNvZGluZyB0byB0aGUgZW5jb2RpbmcgeW91ciBwcm9qZWN0IHVzZXMuXG4iCittc2dzdHIgIiIKKyLqsr3qs6A6IOy7pOuwiyDrqZTsi5zsp4DqsIAgVVRGLTgg7J247L2U65Sp7JeQIOunnuyngCDslYrsirXri4jri6QuXG4iCisi66mU7Iuc7KeA66W8IOyImOygle2VnCDri6TsnYwg7Luk67CL7J2EIOyImOygle2VmOqxsOuCmCwg7ISk7KCV7J2YIGkxOG4uY29tbWl0ZW5jb2RpbmdcbiIKKyLrs4DsiJjrpbwg7ZSE66Gc7KCd7Yq46rCAIOyCrOyaqSDspJHsnbgg7J247L2U65Sp7Jy866GcIOunnuy2lOyLreyLnOyYpC5cbiIKKworIzogY29tbWl0LWdyYXBoLmM6NjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBjb21taXQgZ3JhcGggZm9ybWF0IGNhbm5vdCB3cml0ZSAlZCBjb21taXRzIgorbXNnc3RyICLsu6TrsIsg6re4656Y7ZSEIO2PrOunt+yXkOyEnCDsu6TrsIsgJWTqsJzrpbwg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjY5NgorbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgdG8gd3JpdGUgZ3JhcGgiCittc2dzdHIgIuq3uOuemO2UhOulvCDsk7DquLDsl5DripQg7Luk67CLIOyImOqwgCDrhIjrrLQg66eO7Iq164uI64ukIgorCisjOiBjb21taXQtZ3JhcGguYzo3MDcgYnVpbHRpbi9pbml0LWRiLmM6NTE2IGJ1aWx0aW4vaW5pdC1kYi5jOjUyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgIiVz7JeQIOuMgO2VtCBta2RpcuulvCDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDUgY29tcGF0L29ic3RhY2suYzo0MDcKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICLrqZTrqqjrpqwg67CU64ul64KoIgorCisjOiBjb25maWcuYzoxODcKK21zZ2lkICJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZSBjb25kaXRpb25hbHMgbXVzdCBjb21lIGZyb20gZmlsZXMiCittc2dzdHIgIuyDgeuMgCDqsr3roZwg7ISk7KCVIGluY2x1ZGUg7KGw6rG07J2AIO2MjOydvOyXkOyEnCDsmYDslbwg7ZWp64uI64ukIgorCisjOiBjb25maWcuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGJsb2IgJXMiCittc2dzdHIgIuu4lOuhrSAlMiRzIOyViOyXkCAlMSRk67KIIOykhOyXkCDsnpjrqrvrkJwg7ISk7KCVIgorCisjOiBjb25maWcuYzo3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGZpbGUgJXMiCittc2dzdHIgIu2MjOydvCAlMiRzIOyViOyXkCAlMSRk67KIIOykhOyXkCDsnpjrqrvrkJwg7ISk7KCVIgorCisjOiBjb25maWcuYzo3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLtkZzspIAg7J6F66ClIOyViOyXkCAlZOuyiCDspITsl5Ag7J6Y66q765CcIOyEpOyglSIKKworIzogY29uZmlnLmM6ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdWJtb2R1bGUtYmxvYiAlcyIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiCDruJTroa0gJTIkcyDslYjsl5AgJTEkZOuyiCDspITsl5Ag7J6Y66q765CcIOyEpOyglSIKKworIzogY29uZmlnLmM6ODA0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBjb21tYW5kIGxpbmUgJXMiCittc2dzdHIgIuuqheugue2WiSAlMiRzIOyViOyXkCAlMSRk67KIIOykhOyXkCDsnpjrqrvrkJwg7ISk7KCVIgorCisjOiBjb25maWcuYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIgorbXNnc3RyICIlMiRzIOyViOyXkCAlMSRk67KIIOykhOyXkCDsnpjrqrvrkJwg7ISk7KCVIgorCisjOiBjb25maWcuYzo5MzYKK21zZ2lkICJvdXQgb2YgcmFuZ2UiCittc2dzdHIgIuuylOychOulvCDrspfslrTrgqgiCisKKyM6IGNvbmZpZy5jOjkzNgorbXNnaWQgImludmFsaWQgdW5pdCIKK21zZ3N0ciAi64uo7JyE6rCAIOyemOuqu+uQqCIKKworIzogY29uZmlnLmM6OTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAi7J6Y66q765CcIOyImOy5mCDshKTsoJUg6rCSICclcycgKO2CpCAnJXMnKTogJXMiCisKKyM6IGNvbmZpZy5jOjk0NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBibG9iICVzOiAlcyIKK21zZ3N0ciAi7J6Y66q765CcIOyImOy5mCDshKTsoJUg6rCSICclcycgKO2CpCAnJXMnLCDruJTroa0gJXMpOiAlcyIKKworIzogY29uZmlnLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIgorbXNnc3RyICLsnpjrqrvrkJwg7IiY7LmYIOyEpOyglSDqsJIgJyVzJyAo7YKkICclcycsIO2MjOydvCAlcyk6ICVzIgorCisjOiBjb25maWcuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3RhbmRhcmQgaW5wdXQ6ICVzIgorbXNnc3RyICLsnpjrqrvrkJwg7IiY7LmYIOyEpOyglSDqsJIgJyVzJyAo7YKkICclcycsIO2RnOykgOyeheugpSk6ICVzIgorCisjOiBjb25maWcuYzo5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6ICVzIgorbXNnc3RyICLsnpjrqrvrkJwg7IiY7LmYIOyEpOyglSDqsJIgJyVzJyAo7YKkICclcycsIO2VmOychCDrqqjrk4gg67iU66GtICVzKTogJXMiCisKKyM6IGNvbmZpZy5jOjk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBjb21tYW5kIGxpbmUgJXM6ICVzIgorbXNnc3RyICLsnpjrqrvrkJwg7IiY7LmYIOyEpOyglSDqsJIgJyVzJyAo7YKkICclcycsIOuqheugue2WiSAlcyk6ICVzIgorCisjOiBjb25maWcuYzo5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXM6ICVzIgorbXNnc3RyICLsnpjrqrvrkJwg7IiY7LmYIOyEpOyglSDqsJIgJyVzJyAo7YKkICclcycsICVzIOyViOyXkCk6ICVzIgorCisjOiBjb25maWcuYzoxMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleHBhbmQgdXNlciBkaXIgaW46ICclcyciCittc2dzdHIgIuuLpOydjOyXkCDsgqzsmqnsnpAg65SU66CJ7YSw66asIO2ZleyepeyXkCDsi6TtjKg6ICclcyciCisKKyM6IGNvbmZpZy5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmb3IgJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIiclcycg6rCS7J20ICclcyfsl5Ag64yA7ZW0IOyYrOuwlOuluCDsi5zqsIEg6rCS7J20IOyVhOuLmeuLiOuLpCIKKworIzogY29uZmlnLmM6MTE3MSBjb25maWcuYzoxMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB6bGliIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICIlZOuyiOydgCDsmKzrsJTrpbggemxpYiDslZXstpUg64uo6rOE6rCAIOyVhOuLmeuLiOuLpCIKKworIzogY29uZmlnLmM6MTMwNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiCittc2dzdHIgIuyYpOu4jOygne2KuCDsg53shLEg66qo65Oc6rCAIOyYrOuwlOultOyngCDslYrsirXri4jri6Q6ICVzIgorCisjOiBjb25maWcuYzoxNDczCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICLsnpjrqrsg66y27J2MIOyVley2lSDri6jqs4QgJWQiCisKKyM6IGNvbmZpZy5jOjE2ODEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAi66qF66C57ZaJIOyEpOygleydhCDtjIzsi7HtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogY29uZmlnLmM6MjAxMworbXNnaWQgInVua25vd24gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyIKK21zZ3N0ciAi7ISk7KCVIO2MjOydvOydhCDsnb3ripQg7KSRIOyVjCDsiJgg7JeG64qUIOyYpOulmOqwgCDsg53qsrzsirXri4jri6QiCisKKyM6IGNvbmZpZy5jOjIyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAi7J6Y66q765CcICVzOiAnJXMnIgorCisjOiBjb25maWcuYzoyMjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29yZS51bnRyYWNrZWRDYWNoZSB2YWx1ZSAnJXMnOyB1c2luZyAna2VlcCcgZGVmYXVsdCB2YWx1ZSIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQgY29yZS51bnRyYWNrZWRDYWNoZSDqsJIgJyVzJy4g6riw67O46rCS7Jy866GcICdrZWVwJyDsgqzsmqkiCisKKyM6IGNvbmZpZy5jOjIyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIHZhbHVlICclZCcgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwIgorbXNnc3RyICJzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2Ug6rCSKCclZCcp7J2AIDDsl5DshJwgMTAwIOyCrOydtOyXrOyVvCDtlanri4jri6QiCisKKyM6IGNvbmZpZy5jOjIyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICLrqoXroLntlokg7ISk7KCV7JeQ7IScICclcyfsnYQo66W8KSDshKTsoJXtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogY29uZmlnLmM6MjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIHZhcmlhYmxlICclcycgaW4gZmlsZSAnJXMnIGF0IGxpbmUgJWQiCittc2dzdHIgIiclMiRzJyDtjIzsnbzsnZggJTMkZOuyiCDspIQgJyUxJHMnIOyEpOyglSDrs4DsiJjqsIAg7J6Y66q765CY7JeI7Iq164uI64ukIgorCisjOiBjb25maWcuYzoyNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgIiVz7J2AKOuKlCkg7Jes65+sIOqwnCDqsJLsnbQg7J6I7Iq164uI64ukIgorCisjOiBjb25maWcuYzoyNzY2IGNvbmZpZy5jOjMwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnN0YXQgb24gJXMgZmFpbGVkIgorbXNnc3RyICIlc+yXkCDrjIDtlbQgZnN0YXQg7Iuk7YyoIgorCisjOiBjb25maWcuYzoyOTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgJyVzJyB0byAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkgJyVzJyjsnLwp66GcIOyEpOygle2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBjb25maWcuYzoyOTA3IGJ1aWx0aW4vcmVtb3RlLmM6Nzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1bnNldCAnJXMnIgorbXNnc3RyICInJXMnIOyEpOygleydhCDsp4Dsmrgg7IiYIOyXhuyKteuLiOuLpCIKKworIzogY29ubmVjdC5jOjYxCittc2dpZCAiVGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1cG9uIGluaXRpYWwgY29udGFjdCIKK21zZ3N0ciAi66as66qo7Yq4IOy4oeydtCDstZzstIgg7Jew6rKw7ZaI7J2EIOuVjCDsl7DqsrDsnYQg64GK7JeI7Iq164uI64ukIgorCisjOiBjb25uZWN0LmM6NjMKK21zZ2lkICIiCisiQ291bGQgbm90IHJlYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS5cbiIKKyJcbiIKKyJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHNcbiIKKyJhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLiIKK21zZ3N0ciAiIgorIuumrOuqqO2KuCDsoIDsnqXshozsl5DshJwg7J297J2EIOyImCDsl4bsirXri4jri6RcbiIKKyJcbiIKKyLsmKzrsJTrpbgg7KCR6re8IOq2jO2VnOydtCDsnojripTsp4AsIOq3uOumrOqzoCDsoIDsnqXshozqsIAg7J6I64qU7KeAXG4iCisi7ZmV7J247ZWY7Iut7Iuc7JikLiIKKworIzogY29ubmVjdGVkLmM6NjYgYnVpbHRpbi9mc2NrLmM6MjAxIGJ1aWx0aW4vcHJ1bmUuYzoxNDUKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkiCittc2dzdHIgIuyXsOqysOydhCDtmZXsnbjtlZjripQg7KSR7J6F64uI64ukIgorCisjOiBjb25uZWN0ZWQuYzo3OAorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgIidnaXQgcmV2LWxpc3Qn66W8IOyLpO2Wie2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBjb25uZWN0ZWQuYzo5OAorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdCIKK21zZ3N0ciAicmV2LWxpc3Qg7JOw6riw7JeQIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogY29ubmVjdGVkLmM6MTA1Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgInJldi1saXN07J2YIO2RnOykgOyeheugpeydhCDri6vripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBjb252ZXJ0LmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNSTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMuIgorbXNnc3RyICIlc+yXkOyEnCBDUkxG64qUIExG66GcIOuwlOuAneuLiOuLpC4iCisKKyM6IGNvbnZlcnQuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNSTEYgd2lsbCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorIiVz7JeQ7IScIENSTEbripQgTEbroZwg67CU64Cd64uI64ukLlxuIgorIuyekeyXhSDrlJTroInthLDrpqzsl5DshJzripQg7JuQ656YIOykhCDrsJTqv4gg7ZiV7Iud7J2EIOycoOyngO2VqeuLiOuLpC4iCisKKyM6IGNvbnZlcnQuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcyIKK21zZ3N0ciAiJXPsl5DshJwgTEbripQgQ1JMRuuhnCDrsJTrgJ3ri4jri6QuIgorCisjOiBjb252ZXJ0LmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMuXG4iCisiVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKyIlc+yXkOyEnCBMRuuKlCBDUkxG66GcIOuwlOuAneuLiOuLpC5cbiIKKyLsnpHsl4Ug65SU66CJ7YSw66as7JeQ7ISc64qUIOybkOuemCDspIQg67CU6r+IIO2YleyLneydhCDsnKDsp4Dtlanri4jri6QuIgorCisjOiBjb252ZXJ0LmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyBwcm9oaWJpdGVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAiJyVzJ+yXkOyEnCDsnbjsvZTrlKnsnbQgJXPsnbTrqbQgQk9N7J20IOq4iOyngOuQqeuLiOuLpCIKKworIzogY29udmVydC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBjb250YWlucyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJXMgYXMgd29ya2luZy0iCisidHJlZS1lbmNvZGluZy4iCittc2dzdHIgIiIKKyInJXMnIO2MjOydvOyXkCBCT00oYnl0ZSBvcmRlciBtYXJrKeydtCDrk6TslrQg7J6I7Iq164uI64ukLiB3b3JraW5nLXRyZWUtZW5jb2RpbmfsnLzroZwgIgorIlVURi0lcyDqsJLsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikLiIKKworIzogY29udmVydC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcmVxdWlyZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICInJXMn7JeQ7IScIOyduOy9lOuUqeydtCAlc+ydtOuptCBCT03snbQg7ZWE7JqU7ZWp64uI64ukIgorCisjOiBjb252ZXJ0LmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGlzIG1pc3NpbmcgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSVzQkUgb3IgVVRGLSIKKyIlc0xFIChkZXBlbmRpbmcgb24gdGhlIGJ5dGUgb3JkZXIpIGFzIHdvcmtpbmctdHJlZS1lbmNvZGluZy4iCittc2dzdHIgIiIKKyInJXMnIO2MjOydvOyXkCBCT00oYnl0ZSBvcmRlciBtYXJrKeydtCDsl4bsirXri4jri6QuICjrsJTsnbTtirgg7Iic7ISc7JeQIOuUsOudvCkgVVRGLSVzQkUg65iQIgorIuuKlCBVVEYtJXNMRSDqsJLsnYQgd29ya2luZy10cmVlLWVuY29kaW5n7Jy866GcIOyCrOyaqe2VmOyLreyLnOyYpC4iCisKKyM6IGNvbnZlcnQuYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGVuY29kZSAnJXMnIGZyb20gJXMgdG8gJXMiCittc2dzdHIgIiclcyfsnZgg7J247L2U65Sp7J2EICVz7JeQ7IScICVzKOycvCnroZwg67OA7ZmY7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogY29udmVydC5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJlbmNvZGluZyAnJXMnIGZyb20gJXMgdG8gJXMgYW5kIGJhY2sgaXMgbm90IHRoZSBzYW1lIgorbXNnc3RyICIiCisiJyVzJ+ydmCDsnbjsvZTrlKnsnYQgJXPsl5DshJwgJXMo7Jy8KeuhnCDrs4DtmZjtlZjqs6Ag64uk7IucIOyXreycvOuhnCDrs4DtmZjtlojsnYQg65WMIOybkOuemCDrgrTsmqnqs7wgIgorIuuLpOumheuLiOuLpC4iCisKKyM6IGNvbnZlcnQuYzoxMjI1Cittc2dpZCAidHJ1ZS9mYWxzZSBhcmUgbm8gdmFsaWQgd29ya2luZy10cmVlLWVuY29kaW5ncyIKK21zZ3N0ciAidHJ1ZS9mYWxzZeuKlCDsmKzrsJTrpbggd29ya2luZy10cmVlLWVuY29kaW5ncyDqsJLsnbQg7JWE64uZ64uI64ukIgorCisjOiBkYXRlLmM6MTE2Cittc2dpZCAiaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAi66+4656Y7JeQIgorCisjOiBkYXRlLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPuy0iCDsoIQiCisKKyM6IGRhdGUuYzoxMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtaW51dGUgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+67aEIOyghCIKKworIzogZGF0ZS5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGhvdXIgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IGhvdXJzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPuyLnOqwhCDsoIQiCisKKyM6IGRhdGUuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IGRheXMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+7J28IOyghCIKKworIzogZGF0ZS5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHdlZWsgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHdlZWtzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPuyjvCDsoIQiCisKKyM6IGRhdGUuYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPuuLrCDsoIQiCisKKyM6IGRhdGUuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+64WEIgorCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVzLCAlPFBSSXVNQVg+64usIOyghCIKKworIzogZGF0ZS5jOjE3NSBkYXRlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4geWVhciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+64WEIOyghCIKKworIzogZGlmZmNvcmUtb3JkZXIuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvcmRlcmZpbGUgJyVzJyIKK21zZ3N0ciAiJyVzJyDsiJzshJwg7YyM7J287J2EIOydveuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGRpZmZjb3JlLXJlbmFtZS5jOjUzNQorbXNnaWQgIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICLrtoDsoJXtmZXtlZwg7J2066aEIOuwlOq+uOq4sCDtg5Dsg4nsnYQg7IiY7ZaJ7ZWY64qUIOykkSIKKworIzogZGlmZi5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAnJXMnIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIiclcycg7Ji17IWY7JeQ64qUIOqwkuydtCDtlYTsmpTtlanri4jri6QiCisKKyM6IGRpZmYuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIgorbXNnc3RyICIgIGRpcnN0YXQg7J6Q66aEIO2NvOyEvO2KuCDqsJIgJyVzJyDtjIzsi7Hsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukXG4iCisKKyM6IGRpZmYuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclcydcbiIKK21zZ3N0ciAiICDslYwg7IiYIOyXhuuKlCBkaXJzdGF0IO2MjOudvOuvuO2EsCAnJXMnXG4iCisKKyM6IGRpZmYuYzoyODEKK21zZ2lkICIiCisiY29sb3IgbW92ZWQgc2V0dGluZyBtdXN0IGJlIG9uZSBvZiAnbm8nLCAnZGVmYXVsdCcsICd6ZWJyYScsICdkaW1tZWRfemVicmEnLCAiCisiJ3BsYWluJyIKK21zZ3N0ciAiIgorIuyYruq5gCDsg4kg7ISk7KCV7J2AICdubycsICdkZWZhdWx0JywgJ3plYnJhJywgJ2RpbW1lZF96ZWJyYScsICdwbGFpbicg7KSR7J2YIO2VmOuCmOyehSIKKyLri4jri6QuIgorCisjOiBkaWZmLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdmFsdWUgZm9yICdkaWZmLnN1Ym1vZHVsZScgY29uZmlnIHZhcmlhYmxlOiAnJXMnIgorbXNnc3RyICInZGlmZi5zdWJtb2R1bGUnIOyEpOyglSDrs4DsiJjsl5Ag7JWMIOyImCDsl4bripQg6rCSOiAnJXMnIgorCisjOiBkaWZmLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3VuZCBlcnJvcnMgaW4gJ2RpZmYuZGlyc3RhdCcgY29uZmlnIHZhcmlhYmxlOlxuIgorIiVzIgorbXNnc3RyICIiCisiJ2RpZmYuc3VibW9kdWxlJyDshKTsoJUg67OA7IiY7JeQIOyYpOulmDpcbiIKKyIlcyciCisKKyM6IGRpZmYuYzozODIzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGRpZmYgZGllZCwgc3RvcHBpbmcgYXQgJXMiCittc2dzdHIgIuyZuOu2gCBkaWZmIO2UhOuhnOq3uOueqOydtCDso73snYwsICVzIOychOy5mOyXkOyEnCDrqYjstqQiCisKKyM6IGRpZmYuYzo0MTUzCittc2dpZCAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKKyJcIi0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtLWNoZWNrLCAtcyDsmLXshZgg7KSRIO2VmOuCmOunjCDsk7gg7IiYIOyeiOyKteuLiOuLpCIKKworIzogZGlmZi5jOjQxNTYKK21zZ2lkICItRywgLVMgYW5kIC0tZmluZC1vYmplY3QgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLUcsIC1TLCAtLWZpbmQtb2JqZWN0IOyYteyFmCDspJEg7ZWY64KY66eMIOyTuCDsiJgg7J6I7Iq164uI64ukIgorCisjOiBkaWZmLmM6NDI0NAorbXNnaWQgIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIgorbXNnc3RyICItLWZvbGxvdyDsmLXshZjsl5DripQg7KCV7ZmV7Z6IIO2VmOuCmOydmCDqsr3roZzrqoXshLjqsIAg7ZWE7JqU7ZWp64uI64ukIgorCisjOiBkaWZmLmM6NDQxMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgorbXNnc3RyICIiCisiLS1kaXJzdGF0Ly1YIOyYteyFmCDtjIzrnbzrr7jthLDrpbwg7YyM7Iux7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpDpcbiIKKyIlcyIKKworIzogZGlmZi5jOjQ0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIC0tc3VibW9kdWxlIG9wdGlvbiBwYXJhbWV0ZXI6ICclcyciCittc2dzdHIgIi0tc3VibW9kdWxlIOyYteyFmCDtjIzrnbzrr7jthLAg7YyM7Iux7JeQIOyLpO2MqO2WiOyKteuLiOuLpDogJyVzJyIKKworIzogZGlmZi5jOjU1MDAKK21zZ2lkICJpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24gd2FzIHNraXBwZWQgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAi7YyM7J287J20IOuEiOustCDrp47slYTshJwg67aA7KCV7ZmV7ZWcIOydtOumhCDrsJTqvrjquLAg6rKA7IOJIOq4sOuKpeydhCDqsbTrhIjrnIHri4jri6QuIgorCisjOiBkaWZmLmM6NTUwMworbXNnaWQgIm9ubHkgZm91bmQgY29waWVzIGZyb20gbW9kaWZpZWQgcGF0aHMgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAi7YyM7J287J20IOuEiOustCDrp47slYTshJwg7IiY7KCV7ZWcIOqyveuhnOydmCDrs7Xsgqzrs7jrp4wg7LC+7JWY7Iq164uI64ukLiIKKworIzogZGlmZi5jOjU1MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInlvdSBtYXkgd2FudCB0byBzZXQgeW91ciAlcyB2YXJpYWJsZSB0byBhdCBsZWFzdCAlZCBhbmQgcmV0cnkgdGhlIGNvbW1hbmQuIgorbXNnc3RyICIlcyDrs4DsiJjrpbwg7LWc7IaM7ZWcICVkKOycvCnroZwg7ISk7KCV7ZWY6rOgIOuqheugueydhCDri6Tsi5wg7Iuc64+E7ZW0IOuztOyLreyLnOyYpC4iCisKKyM6IGRpci5jOjE4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gZGlyZWN0b3J5ICclcyciCittc2dzdHIgIiclcycg65SU66CJ7YSw66as66W8IOyXtCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBkaXIuYzoyMTA5Cittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgIuy7pOuEkCDsnbTrpoTqs7wg7KCV67O066W8IOqwgOyguOyYpOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGRpci5jOjIyMzMKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24uIgorbXNnc3RyICLsnbQg7Iuc7Iqk7YWcIOuYkOuKlCDsnITsuZjsl5DshJzripQg7LaU7KCB65CY7KeAIOyViuuKlCDsupDsi5zrpbwg7IKs7Jqp7ZWY7KeAIOyViuyKteuLiOuLpC4iCisKKyM6IGRpci5jOjMwNzUgZGlyLmM6MzA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciAlcyIKK21zZ3N0ciAiJXPsl5Ag7ZWE7JqU7ZWcIOuUlOugie2EsOumrOulvCDrp4zrk6Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZGlyLmM6MzEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbWlncmF0ZSBnaXQgZGlyZWN0b3J5IGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICInJXMn7JeQ7IScICclcyco7Jy8KeuhnCBnaXQg65SU66CJ7YSw66as66W8IOyYruqyqOyYrCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBlZGl0b3IuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiBXYWl0aW5nIGZvciB5b3VyIGVkaXRvciB0byBjbG9zZSB0aGUgZmlsZS4uLiVjIgorbXNnc3RyICLtnoztirg6IO2OuOynkeq4sOqwgCDtjIzsnbzsnYQg64ur6riw66W8IOq4sOuLpOumrOuKlCDspJHsnoXri4jri6QuLi4lYyIKKworIzogZW50cnkuYzoxNzcKK21zZ2lkICJGaWx0ZXJpbmcgY29udGVudCIKK21zZ3N0ciAi64K07JqpIO2VhO2EsOungSIKKworIzogZW50cnkuYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgZmlsZSAnJXMnIgorbXNnc3RyICInJXMnIO2MjOydvOyXkCBzdGF07J2EIO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBmZXRjaC1vYmplY3QuYzoxNworbXNnaWQgIlJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiVVJMIOyXhuuKlCDrpqzrqqjtirgiCisKKyM6IGZldGNoLXBhY2suYzoyNTQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazog7JaV7J2AIOuqqeuhneydhCDsmIjsg4HtlagiCisKKyM6IGZldGNoLXBhY2suYzoyNjYKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogQUNLL05BS+qwgCDsmYDslbwg7ZWY7KeA66eMLCDtlIzrn6zsi5wg7Yyo7YK37J2EIOuwm+yVmOyKteuLiOuLpCIKKworIzogZmV0Y2gtcGFjay5jOjI4NSBidWlsdGluL2FyY2hpdmUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICLrpqzrqqjtirgg7Jik66WYOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290ICclcyciCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBBQ0svTkFL6rCAIOyZgOyVvCDtlZjsp4Drp4wsICclcyfsnYQo66W8KSDrsJvslZjsirXri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzozMzgKK21zZ2lkICItLXN0YXRlbGVzcy1ycGMgcmVxdWlyZXMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICItLXN0YXRlbGVzcy1ycGMg7Ji17IWY7J2AIG11bHRpX2Fja19kZXRhaWxlZOqwgCDtlYTsmpTtlanri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzo0MjkgZmV0Y2gtcGFjay5jOjEzMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICJzaGFsbG93IOykhOydtCDsnpjrqrvrkKg6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDM1IGZldGNoLXBhY2suYzoxMzE2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdW5zaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICJ1bnNoYWxsb3cg7KSE7J20IOyemOuqu+uQqDogJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MzcgZmV0Y2gtcGFjay5jOjEzMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIuyYpOu4jOygne2KuOqwgCDsl4bsirXri4jri6Q6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDQwIGZldGNoLXBhY2suYzoxMzIxCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGluIG9iamVjdDogJXMiCittc2dzdHIgIuyYpOu4jOygne2KuOyXkCDsmKTrpZg6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDQyIGZldGNoLXBhY2suYzoxMzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNoYWxsb3cgZm91bmQ6ICVzIgorbXNnc3RyICJzaGFsbG936rCAIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IGZldGNoLXBhY2suYzo0NDUgZmV0Y2gtcGFjay5jOjEzMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgc2hhbGxvdy91bnNoYWxsb3csIGdvdCAlcyIKK21zZ3N0ciAic2hhbGxvdy91bnNoYWxsb3fqsIAg7JmA7JW8IO2VmOyngOunjCwgJXPsnYQo66W8KSDrsJvslZjsirXri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICVkICVzIgorbXNnc3RyICLrsJvsnYw6ICVzICVkICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0ICVzIgorbXNnc3RyICLsnpjrqrvrkJwg7Luk67CLICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NTMzCittc2dpZCAiZ2l2aW5nIHVwIgorbXNnc3RyICLtj6zquLDtlagiCisKKyM6IGZldGNoLXBhY2suYzo1NDMgcHJvZ3Jlc3MuYzoyMjkKK21zZ2lkICJkb25lIgorbXNnc3RyICLsmYTro4wiCisKKyM6IGZldGNoLXBhY2suYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICglZCkgJXMiCittc2dzdHIgIuuwm+ydjDogJXMgKCVkKSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjYwMQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nICVzIGFzIGNvbXBsZXRlIgorbXNnc3RyICIlcyDtla3rqqnsnYQg7JmE66OM66GcIO2RnOyLnCIKKworIzogZmV0Y2gtcGFjay5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJhbHJlYWR5IGhhdmUgJXMgKCVzKSIKK21zZ3N0ciAi7J2066+4ICVzICglcykg7J6I7J2MIgorCisjOiBmZXRjaC1wYWNrLmM6ODY5Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgImZldGNoLXBhY2s6IOyCrOydtOuTnOuwtOuTnCDrlJTrqYDti7DtlIzroInshJzrpbwgZm9ya+2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBmZXRjaC1wYWNrLmM6ODc3Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBwYWNrIGhlYWRlciIKK21zZ3N0ciAi7ZSE66Gc7Yag7L2cIOyYpOulmDog7J6Y66q765CcIOustuydjCDtl6TrjZQiCisKKyM6IGZldGNoLXBhY2suYzo5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIgorbXNnc3RyICJmZXRjaC1wYWNrOiAlcyDrqoXroLnsnYQgZm9ya+2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBmZXRjaC1wYWNrLmM6OTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGZhaWxlZCIKK21zZ3N0ciAiJXMg7Iuk7YyoIgorCisjOiBmZXRjaC1wYWNrLmM6OTYyCittc2dpZCAiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAi7IKs7J2065Oc67C065OcIOuUlOupgO2LsO2UjOugieyEnOyXkCDsmKTrpZgiCisKKyM6IGZldGNoLXBhY2suYzo5ODkKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiCittc2dzdHIgIuyEnOuyhOyXkOyEnCBzaGFsbG93IO2BtOudvOydtOyWuO2KuOulvCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBmZXRjaC1wYWNrLmM6OTkzCittc2dpZCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAi7ISc67KE7JeQ7IScIG11bHRpX2Fja19kZXRhaWxlZOulvCDsp4Dsm5Dtlanri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzo5OTYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgbm8tZG9uZSIKK21zZ3N0ciAi7ISc67KE7JeQ7IScIG5vLWRvbmXsnYQg7KeA7JuQ7ZWp64uI64ukIgorCisjOiBmZXRjaC1wYWNrLmM6MTAwMgorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBtdWx0aV9hY2siCittc2dzdHIgIuyEnOuyhOyXkOyEnCBtdWx0aV9hY2vrpbwg7KeA7JuQ7ZWp64uI64ukIgorCisjOiBmZXRjaC1wYWNrLmM6MTAwNgorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBzaWRlLWJhbmQtNjRrIgorbXNnc3RyICLshJzrsoTsl5DshJwgc2lkZS1iYW5kLTY0a+ulvCDsp4Dsm5Dtlanri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzoxMDEwCittc2dpZCAiU2VydmVyIHN1cHBvcnRzIHNpZGUtYmFuZCIKK21zZ3N0ciAi7ISc67KE7JeQ7IScIHNpZGUtYmFuZOulvCDsp4Dsm5Dtlanri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzoxMDE0Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIGFsbG93LXRpcC1zaGExLWluLXdhbnQiCittc2dzdHIgIuyEnOuyhOyXkOyEnCBhbGxvdy10aXAtc2hhMS1pbi13YW5066W8IOyngOybkO2VqeuLiOuLpCIKKworIzogZmV0Y2gtcGFjay5jOjEwMTgKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgYWxsb3ctcmVhY2hhYmxlLXNoYTEtaW4td2FudCIKK21zZ3N0ciAi7ISc67KE7JeQ7IScIGFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnTrpbwg7KeA7JuQ7ZWp64uI64ukIgorCisjOiBmZXRjaC1wYWNrLmM6MTAyOAorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBvZnMtZGVsdGEiCittc2dzdHIgIuyEnOuyhOyXkOyEnCBvZnMtZGVsdGHrpbwg7KeA7JuQ7ZWp64uI64ukIgorCisjOiBmZXRjaC1wYWNrLmM6MTAzNCBmZXRjaC1wYWNrLmM6MTIwNAorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBmaWx0ZXIiCittc2dzdHIgIuyEnOuyhOyXkOyEnCDtlYTthLDrpbwg7KeA7JuQ7ZWp64uI64ukIgorCisjOiBmZXRjaC1wYWNrLmM6MTA0MgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbiBpcyAlLipzIgorbXNnc3RyICLshJzrsoQg67KE7KCE7J20ICUuKnPsnoXri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzoxMDQ4Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LXNpbmNlIgorbXNnc3RyICLshJzrsoTsl5DshJwgLS1zaGFsbG93LXNpZ25lZCDsmLXshZjsnYQg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogZmV0Y2gtcGFjay5jOjEwNTIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIKK21zZ3N0ciAi7ISc67KE7JeQ7IScIC0tc2hhbGxvdy1leGNsdWRlIOyYteyFmOydhCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBmZXRjaC1wYWNrLmM6MTA1NAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIgorbXNnc3RyICLshJzrsoTsl5DshJwgLS1kZWVwZW4g7Ji17IWY7J2EIOyngOybkO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzoxMDY1Cittc2dpZCAibm8gY29tbW9uIGNvbW1pdHMiCittc2dzdHIgIuqzte2GtSDsu6TrsIsg7JeG7J2MIgorCisjOiBmZXRjaC1wYWNrLmM6MTA3NyBmZXRjaC1wYWNrLmM6MTQxNAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazog6rCA7KC47Jik6riwIOyLpO2MqC4iCisKKyM6IGZldGNoLXBhY2suYzoxMTk5Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXF1ZXN0cyIKK21zZ3N0ciAi7ISc67KE7JeQ7IScIHNoYWxsb3cg7JqU7LKt7J2EIOyngOybkO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzoxNTg0Cittc2dpZCAibm8gbWF0Y2hpbmcgcmVtb3RlIGhlYWQiCittc2dzdHIgIu2VtOuLue2VmOuKlCDrpqzrqqjtirgg7Zek65Oc6rCAIOyXhuyKteuLiOuLpCIKKworIzogZmV0Y2gtcGFjay5jOjE2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZW1vdGUgcmVmICVzIgorbXNnc3RyICLqt7jrn7Ag66as66qo7Yq46rCAIOugiO2NvOufsOyKpOqwgCDsl4bsirXri4jri6Q6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTYxMworIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3QgYWxsb3cgcmVxdWVzdCBmb3IgdW5hZHZlcnRpc2VkIG9iamVjdCAlcyIKK21zZ3N0ciAi7ISc67KE7JeQ7IScIOyVjOugpOyngOyngCDslYrsnYAgJXMg7Jik67iM7KCd7Yq47JeQIOuMgO2VnCDsmpTssq3snYQg7ZeI7Jqp7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogZ3BnLWludGVyZmFjZS5jOjE4NQorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAiZ3Bn7JeQ7IScIOuNsOydtO2EsOulvCDshJzrqoXtlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukLiIKKworIzogZ3BnLWludGVyZmFjZS5jOjIxMAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIuyehOyLnCDtjIzsnbzsnYQg66eM65OkIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvICclcyciCittc2dzdHIgIuu2hOumrOuQnCDshJzrqoXsnYQgJyVzJ+yXkCDsk7DripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBncmFwaC5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yZSBpbnZhbGlkIGNvbG9yICclLipzJyBpbiBsb2cuZ3JhcGhDb2xvcnMiCittc2dzdHIgImxvZy5ncmFwaENvbG9yc+yXkCDsnpjrqrvrkJwg7IOJ7J2EICgnJS4qcycpIOustOyLnO2VqeuLiOuLpCIKKworIzogZ3JlcC5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIiclcyc6ICVz7J2EKOulvCkg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdyZXAuYzoyMDM3IHNldHVwLmM6MTY0IGJ1aWx0aW4vY2xvbmUuYzo0MDkgYnVpbHRpbi9kaWZmLmM6ODEKKyM6IGJ1aWx0aW4vcm0uYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkCDrjIDtlbQgc3RhdCgp7J20IOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogZ3JlcC5jOjIwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCIKK21zZ3N0ciAiJyVzJzog7J2964uk6rCAIOyemOumvCIKKworIzogaGVscC5jOjIzCittc2dpZCAic3RhcnQgYSB3b3JraW5nIGFyZWEgKHNlZSBhbHNvOiBnaXQgaGVscCB0dXRvcmlhbCkiCittc2dzdHIgIuyekeyXhSDqs7XqsIQg7Iuc7J6RICjssLjqs6A6IGdpdCBoZWxwIHR1dG9yaWFsKSIKKworIzogaGVscC5jOjI0Cittc2dpZCAid29yayBvbiB0aGUgY3VycmVudCBjaGFuZ2UgKHNlZSBhbHNvOiBnaXQgaGVscCBldmVyeWRheSkiCittc2dzdHIgIuuzgOqyvSDsgqztla3sl5Ag64yA7ZWcIOyekeyXhSAo7LC46rOgOiBnaXQgaGVscCBldmVyeWRheSkiCisKKyM6IGhlbHAuYzoyNQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAi7Luk67CLIOuCtOyXreqzvCDsg4Htg5wg67O06riwICjssLjqs6A6IGdpdCBoZWxwIHJldmlzaW9ucykiCisKKyM6IGhlbHAuYzoyNgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgIuy7pOuwiyDrgrTsl63snYQg7YKk7Jqw6rOgLCDtkZzsi5ztlZjqs6AsIOyhsOyeke2VmOq4sCIKKworIzogaGVscC5jOjI3Cittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICLtmJHrj5kg7J6R7JeFICjssLjqs6A6IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGhlbHAuYzozMQorbXNnaWQgIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIgorbXNnc3RyICLso7zsmpQg7IKs7Jqp7J6Q7JqpIOuqheuguSIKKworIzogaGVscC5jOjMyCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICLrs7TsobAg66qF66C5IC8g7KGw7J6RIOq4sOuKpSIKKworIzogaGVscC5jOjMzCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAi67O07KGwIOuqheuguSAvIOygleuztCDtmo3rk50g6riw64qlIgorCisjOiBoZWxwLmM6MzQKK21zZ2lkICJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIKK21zZ3N0ciAi64uk66W4IOyCrOuejOqzvCDshozthrUiCisKKyM6IGhlbHAuYzozNQorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIE1hbmlwdWxhdG9ycyIKK21zZ3N0ciAi7KCA7IiY7KSAIOuqheuguS8g7KGw7J6RIOq4sOuKpSIKKworIzogaGVscC5jOjM2Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAi67O07KGwIOuqheuguSAvIOygleuztCDtmo3rk50g6riw64qlIgorCisjOiBoZWxwLmM6MzcKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBTeW5jaGluZyBSZXBvc2l0b3JpZXMiCittc2dzdHIgIuuztOyhsCDrqoXroLkgLyDsoIDsnqXshowg64+Z6riw7ZmUIOq4sOuKpSIKKworIzogaGVscC5jOjM4Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJuYWwgSGVscGVycyIKK21zZ3N0ciAi67O07KGwIOuqheuguSAvIOuCtOu2gCDsgqzsmqkg6riw64qlIgorCisjOiBoZWxwLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkCDsnojripQg6rmDIOuqheuguSIKKworIzogaGVscC5jOjMwMAorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAi64uk66W4ICRQQVRI7JeQIOyeiOuKlCDquYMg66qF66C5IgorCisjOiBoZWxwLmM6MzA5Cittc2dpZCAiVGhlc2UgYXJlIGNvbW1vbiBHaXQgY29tbWFuZHMgdXNlZCBpbiB2YXJpb3VzIHNpdHVhdGlvbnM6IgorbXNnc3RyICLri6TsnYzsnYAg7Jes65+s6rCA7KeAIOyDge2ZqeyXkOyEnCDsnpDso7wg7IKs7Jqp7ZWY64qUIOq5gyDrqoXroLnsnoXri4jri6Q6IgorCisjOiBoZWxwLmM6MzU4IGdpdC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciCittc2dzdHIgIuyngOybkO2VmOyngCDrqoXroLkg7Je06rGwIOuwqeyLnSAnJXMnIgorCisjOiBoZWxwLmM6NDA1Cittc2dpZCAiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZToiCittc2dzdHIgIuyekOyjvCDsgqzsmqntlZjripQg6rmDIOyViOuCtOyEnOuKlCDri6TsnYzqs7wg6rCZ7Iq164uI64ukOiIKKworIzogaGVscC5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKyInJXMn7J2AKOuKlCkg6rmDIOuqheugueycvOuhnCDrs7TsnbTsp4Drp4wsIOyLpO2Wie2VoCDsiJhcbiIKKyLsl4bsirXri4jri6QuIOyVhOuniOuPhCBnaXQtJXMg66ed6rCA7KeEIOqygyDqsJnsirXri4jri6QuIgorCisjOiBoZWxwLmM6NTI2Cittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgIuyWtOudvOudvC4g7Iuc7Iqk7YWc7JeQIOq5gyDrqoXroLnsnbQg7ZWY64KY64+EIOyXhuuLpOqzoCDrgpjsmLXri4jri6QuIgorCisjOiBoZWxwLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgY29tbWFuZCBuYW1lZCAnJXMnLCB3aGljaCBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIuqyveqzoDog7J2066aE7J20ICclcyfsnbgg6rmDIOuqheugueydhCDsi6Ttlontlojsp4Drp4wsIOq3uCDrqoXroLnsnbQg7JeG7Iq164uI64ukLiIKKworIzogaGVscC5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICInJXMnIOuqheugueydtOudvOqzoCDqsIDsoJXtlZjqs6Ag6rOE7IaN7ZWp64uI64ukLiIKKworIzogaGVscC5jOjU1OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIGluICUwLjFmIHNlY29uZHMsIGFzc3VtaW5nIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICIlMC4xZuy0iCDrkqTsl5AgJyVzJyDrqoXroLnsnbTrnbzqs6Ag6rCA7KCV7ZWY6rOgIOqzhOyGje2VqeuLiOuLpC4iCisKKyM6IGhlbHAuYzo1NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiZ2l0OiAnJXMn7J2AKOuKlCkg6rmDIOuqheugueydtCDslYTri5nri4jri6QuICdnaXQgLS1oZWxwJ+ulvCDssLjqs6DtlZjsi63si5zsmKQuIgorCisjOiBoZWxwLmM6NTcwCittc2dpZCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZCBpcyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZHMgYXJlIgorbXNnc3RyWzBdICIiCisiXG4iCisi6rCA7J6lIOu5hOyKt+2VnCDrqoXroLnsnYAiCisKKyM6IGhlbHAuYzo1ODUKK21zZ2lkICJnaXQgdmVyc2lvbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHZlcnNpb24gWzzsmLXshZg+XSIKKworIzogaGVscC5jOjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgLSAlcyIKK21zZ3N0ciAiJXM6ICVzIC0gJXMiCisKKyM6IGhlbHAuYzo2NTYKK21zZ2lkICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKKyJcbiIKKyLri6TsnYzsnYQg7J2Y64+E7ZWY7IugIOqygyDslYTri4jsl4jrgpjsmpQ/IgorCisjOiBpZGVudC5jOjM0MgorbXNnaWQgIiIKKyJcbiIKKyIqKiogUGxlYXNlIHRlbGwgbWUgd2hvIHlvdSBhcmUuXG4iCisiXG4iCisiUnVuXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIlxuIgorInRvIHNldCB5b3VyIGFjY291bnQncyBkZWZhdWx0IGlkZW50aXR5LlxuIgorIk9taXQgLS1nbG9iYWwgdG8gc2V0IHRoZSBpZGVudGl0eSBvbmx5IGluIHRoaXMgcmVwb3NpdG9yeS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIioqKiDrgrTqsIAg64iE6rWs7J247KeAIOyEpOygle2VmOyLreyLnOyYpC5cbiIKKyJcbiIKKyLri6TsnYzsnYQg7Iuk7ZaJ7ZWY66m0LFxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwi64K0IOydtOumhFwiXG4iCisiXG4iCisi6rOE7KCV7J2YIOq4sOuzuCDsi6Dsm5Ag7KCV67O066W8IOyEpOygle2VqeuLiOuLpC5cbiIKKyItLWdsb2JhbCDsmLXshZjsnYQg67m866m0IOydtCDsoIDsnqXshozshJzrp4wg7Iug7JuQIOygleuztOulvCDshKTsoJXtlanri4jri6QuXG4iCisiXG4iCisKKyM6IGlkZW50LmM6MzY2Cittc2dpZCAibm8gZW1haWwgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAi66mU7J28IOyjvOyGjOqwgCDsl4bqs6Ag7J6Q64+ZIOqygOyCrOqwgCDqurzsoLgg7J6I7Iq164uI64ukIgorCisjOiBpZGVudC5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgZW1haWwgYWRkcmVzcyAoZ290ICclcycpIgorbXNnc3RyICLrqZTsnbwg7KO87IaM66W8IOyekOuPmSDqsoDsgqztlaAg7IiYIOyXhuyKteuLiOuLpCAoJyVzJyDssL7snYwpIgorCisjOiBpZGVudC5jOjM4MQorbXNnaWQgIm5vIG5hbWUgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAi7J2066aE7J20IOyXhuqzoCDsnpDrj5kg6rKA7IKs6rCAIOq6vOyguCDsnojsirXri4jri6QiCisKKyM6IGlkZW50LmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBuYW1lIChnb3QgJyVzJykiCittc2dzdHIgIuydtOumhOydhCDsnpDrj5kg6rKA7IKs7ZWgIOyImCDsl4bsirXri4jri6QgKCclcycg7LC+7J2MKSIKKworIzogaWRlbnQuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgaWRlbnQgbmFtZSAoZm9yIDwlcz4pIG5vdCBhbGxvd2VkIgorbXNnc3RyICLruYgg7J2066aE7J2YIOyLoOybkCDsoJXrs7TripQgKDwlcz7sl5Ag64yA7ZW0KSDtl4jsmqntlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBpZGVudC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lIGNvbnNpc3RzIG9ubHkgb2YgZGlzYWxsb3dlZCBjaGFyYWN0ZXJzOiAlcyIKK21zZ3N0ciAi7J2066aE7J20IO2XiOyaqe2VmOyngCDslYrripQg66y47J6Q66Gc66eMIOydtOujqOyWtOyguCDsnojsirXri4jri6Q6ICVzIgorCisjOiBpZGVudC5jOjQxNiBidWlsdGluL2NvbW1pdC5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAi7Iuc6rCBIO2YleyLneydtCDsnpjrqrvrkJjsl4jsirXri4jri6Q6ICVzIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzozNgorbXNnaWQgIm11bHRpcGxlIGZpbHRlci1zcGVjcyBjYW5ub3QgYmUgY29tYmluZWQiCittc2dzdHIgIuyXrOufrCDqsJzsnZgg7ZWE7YSwIOyWkeyLneydgCDqsrDtlanrkKAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MTI2Cittc2dpZCAiY2Fubm90IGNoYW5nZSBwYXJ0aWFsIGNsb25lIHByb21pc29yIHJlbW90ZSIKK21zZ3N0ciAi7ZSE652866+47IScIOumrOuqqO2KuCDsoIDsnqXshozroZzrtoDthLAg67aA67aEIOuzteygnOulvCDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogbG9ja2ZpbGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcy5cbiIKKyJcbiIKKyJBbm90aGVyIGdpdCBwcm9jZXNzIHNlZW1zIHRvIGJlIHJ1bm5pbmcgaW4gdGhpcyByZXBvc2l0b3J5LCBlLmcuXG4iCisiYW4gZWRpdG9yIG9wZW5lZCBieSAnZ2l0IGNvbW1pdCcuIFBsZWFzZSBtYWtlIHN1cmUgYWxsIHByb2Nlc3Nlc1xuIgorImFyZSB0ZXJtaW5hdGVkIHRoZW4gdHJ5IGFnYWluLiBJZiBpdCBzdGlsbCBmYWlscywgYSBnaXQgcHJvY2Vzc1xuIgorIm1heSBoYXZlIGNyYXNoZWQgaW4gdGhpcyByZXBvc2l0b3J5IGVhcmxpZXI6XG4iCisicmVtb3ZlIHRoZSBmaWxlIG1hbnVhbGx5IHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAiIgorIiclcy5sb2NrJyDtjIzsnbzsnYQg66eM65OkIOyImCDsl4bsirXri4jri6Q6ICVzLlxuIgorIlxuIgorIuydtCDsoIDsnqXshozsl5DshJwg64uk66W4IOq5gyDtlITroZzshLjsiqTqsIAg7Iuk7ZaJIOykkeyduCDqsoPsnLzroZwg67O07J6F64uI64ukLiAo7JiI66W8XG4iCisi65Ok7Ja0ICdnaXQgY29tbWl0JyDrqoXroLnsnLzroZwg7Y647KeR6riw6rCAIOyXtOugpCDsnojri6Trk6Dsp4AuKSDrqqjrk6Ag7ZSE66Gc7IS47Iqk66W8XG4iCisi64Gd64OI64qU7KeAIO2ZleyduO2VmOyLnOqzoCDri6Tsi5wg7Iuc64+E7ZW0IOuztOyLreyLnOyYpC4g6re4656Y64+EIOqzhOyGjSDsi6TtjKjtlZjrqbQsIOydtFxuIgorIuyggOyepeyGjOyXkOyEnCDquYMg7ZSE66Gc7IS47Iqk6rCAIOyghOyXkCDsnbTsg4Eg7KKF66OM7ZaI7J2EIOyImOuPhCDsnojsirXri4jri6Q6XG4iCisi7IiY64+Z7Jy866GcIO2VtOuLuSDtjIzsnbzsnYQg7KCc6rGw7ZWY6rOgIOqzhOyGje2VmOyLreyLnOyYpC4iCisKKyM6IGxvY2tmaWxlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIKK21zZ3N0ciAiJyVzLmxvY2sn7J2EIOunjOuTpCDsiJgg7JeG7Iq164uI64ukOiAlcyIKKworIzogbWVyZ2UuYzo3MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAi7LqQ7Iuc66W8IOydveuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IG1lcmdlLmM6MTM2IGJ1aWx0aW4vYW0uYzoxOTQ2IGJ1aWx0aW4vYW0uYzoxOTgwIGJ1aWx0aW4vY2hlY2tvdXQuYzozNzgKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2MDYgYnVpbHRpbi9jbG9uZS5jOjc2MQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAi7IOIIOyduOuNseyKpCDtjIzsnbzsnYQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI5OAorbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIo7J6Y66q765CcIOy7pOuwiylcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiJyVzJyDqsr3roZzsl5Ag64yA7ZW0IGFkZGluZm9fY2FjaGUg7Iuk7YyoLiDrs5Htlakg7KSR7KeALiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIHRvIHJlZnJlc2ggZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICInJXMnIOqyveuhnOyXkCDrjIDtlbQgYWRkaW5mb19jYWNoZSDsg4jroZwg6rOg7LmoIOyLpO2MqC4g67OR7ZWpIOykkeyngC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjQxMAorbXNnaWQgImVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICLtirjrpqwg67mM65Oc7JeQIOyYpOulmCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgIiclcycg6rK966GcIOunjOuTpOq4sOyXkCDsi6TtjKjtlojsirXri4jri6QlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIHRvIG1ha2Ugcm9vbSBmb3Igc3ViZGlyZWN0b3J5XG4iCittc2dzdHIgIu2VmOychCDrlJTroInthLDrpqzsl5Ag6rO16rCE7J2EIOunjOuTnOugpOqzoCAlc+ydhCjrpbwpIOygnOqxsO2VqeuLiOuLpFxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MDYgbWVyZ2UtcmVjdXJzaXZlLmM6OTI1Cittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAiOiDslYTrp4jrj4QgRC9GIOy2qeuPjD8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICclcyciCittc2dzdHIgIiclcycg7JyE7LmY7J2YIOy2lOyggeuQmOyngCDslYrripQg7YyM7J287J2EIOyeg+q4sOulvCDqsbDrtoDtlanri4jri6QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk1NyBidWlsdGluL2NhdC1maWxlLmM6MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgIiVzICclcycg7Jik67iM7KCd7Yq466W8IOydveydhCDsiJgg7JeG7J2MIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAiJXMgJyVzJ+yXkCDrjIDtlbQg67iU66Gt7J2EIOyYiOyDgSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyc6ICVzIgorbXNnc3RyICInJXMn7J2EKOulvCkg7Jes64qU642wIOyLpO2MqDogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnOiAlcyIKK21zZ3N0ciAiJyVzJyDsi6zrs7zrpq0g66eB7YGs7JeQIOyLpO2MqDogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5OQorIywgYy1mb3JtYXQKK21zZ2lkICJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIgorbXNnc3RyICLri6TsnYzsnYQg7Ja065a76rKMIO2VoOyngCDslYwg7IiYIOyXhuyKteuLiOuLpDogJTA2byAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBjaGVja2VkIG91dCkiCittc2dzdHIgIiVzIO2VmOychCDrqqjrk4gg67OR7ZWpIOyLpO2MqCAo6rCA7KC47Jik7KeAIOyViuydjCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBub3QgcHJlc2VudCkiCittc2dzdHIgIiVzIO2VmOychCDrqqjrk4gg67OR7ZWpIOyLpO2MqCAo7Luk67CL7J20IOyXhuyKteuLiOuLpCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBkb24ndCBmb2xsb3cgbWVyZ2UtYmFzZSkiCittc2dzdHIgIiVzIO2VmOychCDrqqjrk4gg67OR7ZWpIOyLpO2MqCAo7Luk67CL7J20IOuzke2VqSDrsqDsnbTsiqTrpbwg65Sw66W07KeAIOyViuyKteuLiOuLpCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMDggbWVyZ2UtcmVjdXJzaXZlLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIHRvIHRoZSBmb2xsb3dpbmcgY29tbWl0OiIKK21zZ3N0ciAiJXMg7ZWY7JyEIOuqqOuTiOydhCDri6TsnYwg7Luk67CL7Jy866GcIOygleuwqe2WpSDsp4Ttlok6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjExIG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiJXMg7ZWY7JyEIOuqqOuTiOydhCDsoJXrsKntlqUg7KeE7ZaJIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG1lcmdlIGZvbGxvd2luZyBjb21taXRzIG5vdCBmb3VuZCkiCittc2dzdHIgIiVzIO2VmOychCDrqqjrk4gg67OR7ZWpIOyLpO2MqCAo67OR7ZWp7ZWgIOuVjCDrlLDrnbzqsIgg7Luk67CL7J20IOyXhuyKteuLiOuLpCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGZhc3QtZm9yd2FyZCkiCittc2dzdHIgIiVzIO2VmOychCDrqqjrk4gg67OR7ZWpIOyLpO2MqCAo7KCV67Cp7Zal7J20IOyVhOuLmeuLiOuLpCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTAKK21zZ2lkICJGb3VuZCBhIHBvc3NpYmxlIG1lcmdlIHJlc29sdXRpb24gZm9yIHRoZSBzdWJtb2R1bGU6XG4iCittc2dzdHIgIu2VmOychCDrqqjrk4jsl5Ag64yA7ZW0IOqwgOuKpe2VnCDrs5Htlakg67Cp67KV7J2EIOywvuyVmOyKteuLiOuLpDpcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgdGhpcyBpcyBjb3JyZWN0IHNpbXBseSBhZGQgaXQgdG8gdGhlIGluZGV4IGZvciBleGFtcGxlXG4iCisiYnkgdXNpbmc6XG4iCisiXG4iCisiICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcbiIKKyJcbiIKKyJ3aGljaCB3aWxsIGFjY2VwdCB0aGlzIHN1Z2dlc3Rpb24uXG4iCittc2dzdHIgIiIKKyLsnbQg7KCc7JWI7J20IOunnuycvOuptCDsnbjrjbHsiqTsl5Ag7LaU6rCA7ZWY66m0IOuQqeuLiOuLpC4g7JiI66W8IOuTpOyWtFxuIgorIuuLpOydjCDrqoXroLnsnYQg7IKs7Jqp7ZWY66m0OlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisi7KCc7JWI7J2EIOuwm+yVhOuTpOydtOqyjCDrkKnri4jri6QuXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobXVsdGlwbGUgbWVyZ2VzIGZvdW5kKSIKK21zZ3N0ciAiJXMg7ZWY7JyEIOuqqOuTiCDrs5Htlakg7Iuk7YyoICjrs5HtlansnbQg7Jes65+s6rCcIOyeiOyKteuLiOuLpCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzMjEKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAi64K067aAIOuzke2VqSDsi6Ttlonsl5Ag7Iuk7YyoIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiCittc2dzdHIgIiVz7J2EKOulvCkg642w7J207YSw67Kg7J207Iqk7JeQIOy2lOqwgO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAi7J6Q64+ZIOuzke2VqTogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IFJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IHdyaXRpbmcgdG8gJXMgaW5zdGVhZC4iCittc2dzdHIgIiIKKyLsmKTrpZg6ICVzIOychOy5mOydmCDstpTsoIHrkJjsp4Ag7JWK64qUIO2MjOydvOydhCDsnoPquLDrpbwg6rGw67aA7ZWp64uI64ukLiDrjIDsi6AgJXPsl5Ag7JSB64uI64ukLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisi7Lap64+MICglcy/sgq3soJwpOiAlcyAo7JyE7LmYICVzKSDrsI8gJXMgKCVz7JeQ7IScKSDsgq3soJwuICVzIOuyhOyghOydmCAlcyDtirjrpqzsl5Ag64Ko7J2MLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUuIgorbXNnc3RyICIiCisi7Lap64+MICglcy/sgq3soJwpOiAlcyAo7JyE7LmYICVzKSDsgq3soJwsICVz7JeQ7IScICVzKOycvCnroZwgKOychOy5mCAlcykuICVzIOuyhOyghOydmCAlcyDtirgiCisi66as7JeQIOuCqOydjC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIuy2qeuPjCAoJXMv7IKt7KCcKTogJXMgKOychOy5mCAlcykg67CPICVzICjsnITsuZggJXMpIOyCreygnC4gJXMg67KE7KCE7J2YICVzIO2KuOumrOyXkCAlcyjsnLwpIgorIuuhnCDrgqjsnYwuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyLstqnrj4wgKCVzL+yCreygnCk6ICVzICjsnITsuZggJXMpIOyCreygnCwgJXPsl5DshJwgJXMo7Jy8KeuhnCAo7JyE7LmYICVzKS4gJXMg67KE7KCE7J2YICVzIO2KuCIKKyLrpqzsl5Ag64Ko7J2MICjsnITsuZggJXMpLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUyNgorbXNnaWQgInJlbmFtZSIKK21zZ3N0ciAi7J2066aE67CU6r646riwIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI2Cittc2dpZCAicmVuYW1lZCIKK21zZ3N0ciAi7J2066aE67CU6r+IIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTgwIG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MzYgbWVyZ2UtcmVjdXJzaXZlLmM6MjM2OAorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgJXMiCittc2dzdHIgIiVzIOychOy5mOydmCDrs4Dqsr3rkJwg7YyM7J287J2EIOyeg+q4sOulvCDqsbDrtoDtlanri4jri6QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVz7J2AKOuKlCkgJXPsl5Ag7J6I64qUIOuUlOugie2EsOumrOuhnCAlcyjsnLwp66GcIOydtOumhOydhCDrsJTqv4nri4jri6QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVzIOychOy5mOydmCDstpTsoIHrkJjsp4Ag7JWK64qUIO2MjOydvOydhCDsnoPquLDrpbwg6rGw67aA7ZWp64uI64ukLiDrjIDsi6AgJXMg7LaU6rCAIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBcIiVzXCItPlwiJXNcIiBpbiBicmFuY2ggXCIlc1wiIHJlbmFtZSBcIiVzIgorIlwiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCittc2dzdHIgIiIKKyLstqnrj4wgKOydtOumhOuwlOq+uOq4sC/snbTrpoTrsJTqvrjquLApOiBcIiUzJHNcIiDruIzrnpzsuZjsl5DshJwg7J2066aE67CU6r646riwIFwiJTEkc1wiLT5cIiUyJHMiCisiXCIgXCIlNiRzXCIg67iM656c7LmY7JeQ7IScIOydtOumhCDrsJTqvrjquLAgXCIlNCRzXCItPlwiJTUkc1wiJTckcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYzMAorbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiICjtlbTqsrDrkJjsp4Ag7JWK7J2MKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCittc2dzdHIgIiIKKyLstqnrj4wgKHJlbmFtZS9yZW5hbWUpOiDsnbTrpoQg67CU6r646riwICVzLT4lcyAo7JyE7LmYICVzKS4g7J2066aEIOuwlOq+uOq4sCAlcy0+JXMgKOychOy5mCAiCisiJXMpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzIGFuZCAlcyB0byAlcyBpbnN0ZWFkIgorbXNnc3RyICLrjIDsi6Ag7J2066aE7J2EICVz7JeQ7IScICVzKOycvCnroZwg67CU6r646rOgICVz7JeQ7IScICVzKOycvCnroZwg67CU6r+J64uI64ukIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXMsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gdGhlIHdheS4iCittc2dzdHIgIiIKKyIlcyDsnITsuZjsnZgg7LaU7KCB65CY7KeAIOyViuuKlCDtjIzsnbzsnYQg7J6D6riw66W8ICjsnoPslrTrsoTrprQg7JiI7KCV7J207KeA66eMKSDqsbDrtoDtlanri4jri6QuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZGlyZWN0b3J5IHJlbmFtZSBzcGxpdCk6IFVuY2xlYXIgd2hlcmUgdG8gcGxhY2UgJXMgYmVjYXVzZSAiCisiZGlyZWN0b3J5ICVzIHdhcyByZW5hbWVkIHRvIG11bHRpcGxlIG90aGVyIGRpcmVjdG9yaWVzLCB3aXRoIG5vIGRlc3RpbmF0aW9uICIKKyJnZXR0aW5nIGEgbWFqb3JpdHkgb2YgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIuy2qeuPjCAo65SU66CJ7YSw66asIOydtOumhCDrsJTqvrjquLAg67aE66asKTogJXMg7YyM7J287J2EIOyWtOuUlOyXkCDrhpPsnYTsp4Ag67aI67aE66qF7ZWp64uI64ukLiAlcyDrlJQiCisi66CJ7YSw66as6rCAIOyXrOufrCDqsJzsnZgg64uk66W4IOuUlOugie2EsOumrOuhnCDsnbTrpoTsnbQg67CU64CM7JeI6rOgIO2MjOydvCDri6TsiJjqsIAg65Ok7Ja0IOyeiOuKlCDrjIDsg4EiCisi7J20IOyXhuq4sCDrlYzrrLjsnoXri4jri6QuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IEV4aXN0aW5nIGZpbGUvZGlyIGF0ICVzIGluIHRoZSB3YXkgb2YgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWUocykgcHV0dGluZyB0aGUgZm9sbG93aW5nIHBhdGgocykgdGhlcmU6ICVzLiIKK21zZ3N0ciAiIgorIuy2qeuPjCAo66y17Iuc7KCB7J24IOuUlOugie2EsOumrCDsnbTrpoQg67CU6r646riwKTogJXMg7JyE7LmY7J2YIOq4sOyhtCDtjIzsnbwv65SU66CJ7YSw66as6rCAIOusteyLnOyggeycvCIKKyLroZwg65SU66CJ7YSw66asIOydtOumhOydtCDrsJTrgIzslrQg64uk7J2MIOqyveuhnOqwgCDrk6TslrTqsIgg7JiI7KCV7J6F64uI64ukOiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogQ2Fubm90IG1hcCBtb3JlIHRoYW4gb25lIHBhdGggdG8gJXM7ICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lcyB0cmllZCB0byBwdXQgdGhlc2UgcGF0aHMgdGhlcmU6ICVzIgorbXNnc3RyICIiCisi7Lap64+MICjrrLXsi5zsoIHsnbgg65SU66CJ7YSw66asIOydtOumhCDrsJTqvrjquLApOiDsl6zrn6wg6rCc7J2YIOqyveuhnOulvCAlc+yXkCDrjIDsnZHtlaAg7IiYIOyXhuyKteuLiCIKKyLri6QuIOusteyLnOyggeyduCDrlJTroInthLDrpqwg7J2066aEIOuwlOq+uOq4sCDquLDriqXsnYAg7J2065OkIOqyveuhnOulvCDtlbTri7kg7JyE7LmY7JeQIOuGk+uPhOuhnSDsi5zrj4QiCisi7ZWp64uI64ukOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA4NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgZGlyZWN0b3J5ICVzLT4lcyBpbiAlcy4gUmVuYW1lIGRpcmVjdG9yeSAlcy0iCisiPiVzIGluICVzIgorbXNnc3RyICIiCisi7Lap64+MIChyZW5hbWUvcmVuYW1lKTog7J2066aEIOuwlOq+uOq4sCAlcy0+JXMgKOychOy5mCAlcykuIOydtOumhCDrsJTqvrjquLAgJXMtPiVzICjsnITsuZggIgorIiVzKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjMzMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogQXZvaWRpbmcgYXBwbHlpbmcgJXMgLT4gJXMgcmVuYW1lIHRvICVzLCBiZWNhdXNlICVzIGl0c2VsZiB3YXMgIgorInJlbmFtZWQuIgorbXNnc3RyICIiCisi6rK96rOgOiAlcyAtPiAlcyDsnbTrpoQg67CU6r646riwICjrjIDsg4EgJXMpIOyggeyaqSDqsbDrtoAuICVzIOyekOyytOqwgCDsnbTrr7gg7J2066aE7J20IOuwlOuAjOyXiCIKKyLsirXri4jri6QuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gJXMgYWRkZWQgaW4gJXMiCittc2dzdHIgIuy2qeuPjCAocmVuYW1lL2FkZCk6IOydtOumhCDrsJTqvrjquLAgJXMtPiVzICjsnITsuZggJXMpLiAlcyDstpTqsIAgKOychOy5mCAlcykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIG1lcmdlZCAlcyIKK21zZ3N0ciAi67OR7ZWp65CcICVz7J2EKOulvCkg7LaU6rCA7ZWp64uI64ukIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNzU4IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIuuMgOyLoCAlcyjsnLwp66GcIOy2lOqwgO2VqeuLiOuLpCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIiVzIOyYpOu4jOygne2KuOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjkxNworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAiJXMg7Jik67iM7KCd7Yq464qUIOu4lOuhreydtCDslYTri5nri4jri6QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI5ODYKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgIuyImOyglSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mjk4NgorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICLsiJjsoJXrkKgiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI5OTcKK21zZ2lkICJjb250ZW50IgorbXNnc3RyICLrgrTsmqkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMDQKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICLstpTqsIAv7LaU6rCAIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgJXMgKG1lcmdlZCBzYW1lIGFzIGV4aXN0aW5nKSIKK21zZ3N0ciAi6rG064SI65uw6riwOiAlcyAo6riw7KG06rO8IOqwmeqyjCDrs5HtlakpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDU1IGdpdC1zdWJtb2R1bGUuc2g6ODk1Cittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICLtlZjsnIQg66qo65OIIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICLstqnrj4wgKCVzKTogJXPsl5Ag67OR7ZWpIOy2qeuPjCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAi7KCc6rGwOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIwNAorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICLtjIzsnbwv65SU66CJ7YSw66asIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjEwCittc2dpZCAiZGlyZWN0b3J5L2ZpbGUiCittc2dzdHIgIuuUlOugie2EsOumrC/tjIzsnbwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiBBZGRpbmcgJXMgYXMgJXMiCittc2dzdHIgIiIKKyLstqnrj4wgKCVzKTog7J2066aE7J20ICVz7J24IOuUlOugie2EsOumrOqwgCAlc+yXkCDsnojsirXri4jri6QuICVz7J2EKOulvCkgJXMo7Jy8KeuhnCDstpTqsIDtlanri4jri6QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICLstpTqsIA6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgbWVyZ2UgKGRpcnR5OiAlcykiCittc2dzdHIgIuuzgOqyveuQnCDsnbjrjbHsiqQ6IOuzke2Vqe2VoCDsiJgg7JeG7Iq164uI64ukIChkaXJ0eTogJXMpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjcxCittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlISIKK21zZ3N0ciAi7J2066+4IOyXheuNsOydtO2KuCDsg4Htg5zsnoXri4jri6QhIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAiJXMg67CPICVzIO2KuOumrOydmCDrs5HtlansnbQg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzc5Cittc2dpZCAiTWVyZ2luZzoiCittc2dzdHIgIuuzke2VqToiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIKK21zZ2lkX3BsdXJhbCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiCittc2dzdHJbMF0gIuqzvOqxsOydmCDqs7XthrUg7Luk67CLICV16rCcIOuwnOqyrDoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MzEKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgIuuzke2VqSDqsrDqs7zsl5Ag7Luk67CL7J20IOyXhuyKteuLiOuLpCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIiclcycg7Jik67iM7KCd7Yq466W8IO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTExIGJ1aWx0aW4vbWVyZ2UuYzo2NTkgYnVpbHRpbi9tZXJnZS5jOjgxNgorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iCittc2dzdHIgIuyduOuNseyKpOulvCDsk7gg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IG5vdGVzLW1lcmdlLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgcHJldmlvdXMgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuXG4iCisiUGxlYXNlLCB1c2UgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcgb3IgJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0JyB0byAiCisiY29tbWl0L2Fib3J0IHRoZSBwcmV2aW91cyBtZXJnZSBiZWZvcmUgeW91IHN0YXJ0IGEgbmV3IG5vdGVzIG1lcmdlLiIKK21zZ3N0ciAiIgorIuydtOyghOydmCDrhbjtirgg67OR7ZWp7J2EIOuLpCDrp4jsuZjsp4Ag7JWK7JWY7Iq164uI64ukICglcyDsnojsnYwpLlxuIgorIuyDiOuhnCDrhbjtirgg67OR7ZWp7J2EIOyLnOyeke2VmOq4sCDsoITsl5AgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCdcbiIKKyLrmJDripQgJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0J+uhnCDsnbTsoIQg67OR7ZWp7J2EIOy7pOuwiy/spJHsp4DtlZjsi63si5zsmKQuIgorCisjOiBub3Rlcy1tZXJnZS5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuIgorbXNnc3RyICLrhbjtirgg67OR7ZWpIOyekeyXheydhCDri6Qg66eI7LmY7KeAIOyViuyVmOyKteuLiOuLpC4gKCVzIOyeiOydjCkiCisKKyM6IG5vdGVzLXV0aWxzLmM6NDMKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIuy0iOq4sO2ZlO2VmOyngCDslYrslZjqsbDrgpgg66CI7Y2865+w7Iqk7ZWY7KeAIOyViuydgCBub3RlcyDtirjrpqzrpbwg7Luk67CL7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAi7J6Y66q765CcIG5vdGVzLnJld3JpdGVNb2RlIOqwkjogJyVzJyIKKworIzogbm90ZXMtdXRpbHMuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIiVz7JeQ7IScIOuFuO2KuOulvCDri6Tsi5wg7JOw6riw66W8IOqxsOu2gO2VqeuLiOuLpCAocmVmcy9ub3Rlcy8g67CW7J6EKSIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZgorIy4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzCisjLiBpdHMgdmFsdWUuCisjLgorIzogbm90ZXMtdXRpbHMuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICLsnpjrqrvrkJwgJXMg6rCSOiAnJXMnIgorCisjOiBvYmplY3QuYzoyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdDogJXMiCittc2dzdHIgIuyYpOu4jOygne2KuOulvCDtjIzsi7HtlaAg7IiYIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IHBhY2tmaWxlLmM6NTYzCittc2dpZCAib2Zmc2V0IGJlZm9yZSBlbmQgb2YgcGFja2ZpbGUgKGJyb2tlbiAuaWR4PykiCittc2dzdHIgIuyYpO2UhOyFi+ydtCDrrLbsnYwg7YyM7J28IOyVnuyeheuLiOuLpCAo66ed6rCA7KeEIC5pZHg/KSIKKworIzogcGFja2ZpbGUuYzoxNzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZWZvcmUgc3RhcnQgb2YgcGFjayBpbmRleCBmb3IgJXMgKGNvcnJ1cHQgaW5kZXg/KSIKK21zZ3N0ciAi7Jik7ZSE7IWL7J20ICVz7J2YIOustuydjCDsnbjrjbHsiqQg7Iuc7J6R67O064ukIOyVnuyeheuLiOuLpCAo66ed6rCA7KeEIOyduOuNseyKpD8pIgorCisjOiBwYWNrZmlsZS5jOjE3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFjayBpbmRleCBmb3IgJXMgKHRydW5jYXRlZCBpbmRleD8pIgorbXNnc3RyICLsmKTtlITshYvsnbQgJXPsnZgg66y27J2MIOyduOuNseyKpCDrgZ3rs7Tri6Qg65Kk7J6F64uI64ukICjrp53qsIDsp4Qg7J24642x7IqkPykiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo2MjEKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgIuyCrOyaqeuylTogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBwYXJzZS1vcHRpb25zLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICDrmJDripQ6ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6Njg4Cittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLU5VTSIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBleHBpcmF0aW9uIGRhdGUgJyVzJyIKK21zZ3N0ciAi7ZiV7Iud7J20IOyemOuqu+uQnCDrp4zro4wg7Iuc6rCBOiAnJXMnIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICLsnpjrqrvrkJwg7ZiV7Iud7J2YIOyYpOu4jOygne2KuCDsnbTrpoQgJyVzJyIKKworIzogcGF0aC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiJXPsnYQo66W8KSDqt7jro7nsl5DshJwg7JOw6riwIOqwgOuKpe2VmOuPhOuhnSDrp4zrk6Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogcGF0aHNwZWMuYzoxMjkKK21zZ2lkICJFc2NhcGUgY2hhcmFjdGVyICdcXCcgbm90IGFsbG93ZWQgYXMgbGFzdCBjaGFyYWN0ZXIgaW4gYXR0ciB2YWx1ZSIKK21zZ3N0ciAi7IaN7ISxIOqwkuydmCDrp4jsp4Drp4kg66y47J6Q66GcICdcXFxcJyDsnbTsiqTsvIDsnbTtlIQg66y47J6Q64qUIO2XiOyaqe2VmOyngCDslYrsirXri4jri6QiCisKKyM6IHBhdGhzcGVjLmM6MTQ3Cittc2dpZCAiT25seSBvbmUgJ2F0dHI6JyBzcGVjaWZpY2F0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICLtlZjrgpjsnZggJ2F0dHI6JyDrqoXshLjrp4wg7ZeI7Jqp7ZWp64uI64ukLiIKKworIzogcGF0aHNwZWMuYzoxNTAKK21zZ2lkICJhdHRyIHNwZWMgbXVzdCBub3QgYmUgZW1wdHkiCittc2dzdHIgImF0dHIg66qF7IS464qUIOu5hOyWtCDsnojsnLzrqbQg7JWIIOuQqeuLiOuLpCIKKworIzogcGF0aHNwZWMuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUgbmFtZSAlcyIKK21zZ3N0ciAi7J6Y66q765CcIOyGjeyEsSDsnbTrpoQgJXMiCisKKyM6IHBhdGhzcGVjLmM6MjU4Cittc2dpZCAiZ2xvYmFsICdnbG9iJyBhbmQgJ25vZ2xvYicgcGF0aHNwZWMgc2V0dGluZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiJ2dsb2InIOuwjyAnbm9nbG9iJyDqsr3roZzrqoXshLgg7KCE7LK0IOyEpOygleydgCDtmLjtmZjrkJjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBwYXRoc3BlYy5jOjI2NQorbXNnaWQgIiIKKyJnbG9iYWwgJ2xpdGVyYWwnIHBhdGhzcGVjIHNldHRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIGdsb2JhbCAiCisicGF0aHNwZWMgc2V0dGluZ3MiCittc2dzdHIgIiIKKyInbGl0ZXJhbCcg6rK966Gc66qF7IS4IOyghOyytCDshKTsoJXsnYAg64uk66W4IOqyveuhnOuqheyEuCDsoITssrQg7ISk7KCV6rO8IO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IHBhdGhzcGVjLmM6MzA1Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICLqsr3roZzrqoXshLgg7KeA7Iuc7Ja0ICdwcmVmaXgn7JeQIOyemOuqu+uQnCDtjIzrnbzrr7jthLAiCisKKyM6IHBhdGhzcGVjLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIuyemOuqu+uQnCDqsr3roZzrqoXshLgg7KeA7Iuc7Ja0ICclLipzJyAo7JyE7LmYICclcycpIgorCisjOiBwYXRoc3BlYy5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcpJyBhdCB0aGUgZW5kIG9mIHBhdGhzcGVjIG1hZ2ljIGluICclcyciCittc2dzdHIgIuqyveuhnCDrqoXshLgg7KeA7Iuc7Ja0IOuBneyXkCAnKScg67mg7KeQICjsnITsuZggJyVzJykiCisKKyM6IHBhdGhzcGVjLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaW1wbGVtZW50ZWQgcGF0aHNwZWMgbWFnaWMgJyVjJyBpbiAnJXMnIgorbXNnc3RyICLqtaztmITrkJjsp4Ag7JWK7J2AIOqyveuhnOuqheyEuCDsp4Dsi5zslrQgJyVjJyAo7JyE7LmYICclcycpIgorCisjOiBwYXRoc3BlYy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJ2xpdGVyYWwnIGFuZCAnZ2xvYicgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiJXM6ICdsaXRlcmFsJ+qzvCAnZ2xvYifsnYAg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpCIKKworIzogcGF0aHNwZWMuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICIlczogJyVzJ+ydgCjripQpIOyggOyepeyGjCDrsJbsnoXri4jri6QiCisKKyM6IHBhdGhzcGVjLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgKG1uZW1vbmljOiAnJWMnKSIKK21zZ3N0ciAiJyVzJyAo64uo7LaV7YKkOiAnJWMnKSIKKworIzogcGF0aHNwZWMuYzo1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGhzcGVjIG1hZ2ljIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjb21tYW5kOiAlcyIKK21zZ3N0ciAiJXM6IOqyveuhnOuqheyEuCDsp4Dsi5zslrTqsIAg7J20IOuqheugueyWtOyXkOyEnCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukOiAlcyIKKworIzogcGF0aHNwZWMuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICInJXMnIOqyveuhnOuqheyEuOuKlCDsi6zrs7zrpq0g66eB7YGsIOyVhOuemOyXkCDsnojsirXri4jri6QiCisKKyM6IHByZXR0eS5jOjk2MgorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgIi0tcHJldHR5IO2YleyLneydhCDtjIzsi7HtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogcmVhZC1jYWNoZS5jOjE1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorImluZGV4LnZlcnNpb27snbQg7ISk7KCV65CY7JeI7KeA66eMLCDsnbQg6rCS7J20IOyemOuqu+uQmOyXiOyKteuLiOuLpC5cbiIKKyIlaSDrsoTsoITsnYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiByZWFkLWNhY2hlLmM6MTUxMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR0lUX0lOREVYX1ZFUlNJT04gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorIkdJVF9JTkRFWF9WRVJTSU9O7J20IOyEpOygleuQmOyXiOyngOunjCwg7J20IOqwkuydtCDsnpjrqrvrkJjsl4jsirXri4jri6QuXG4iCisiJWkg67KE7KCE7J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogcmVhZC1jYWNoZS5jOjI0MDQgc2VxdWVuY2VyLmM6NDMzOCB3cmFwcGVyLmM6NjU4IGJ1aWx0aW4vbWVyZ2UuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkg64ur7J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IHJlYWQtY2FjaGUuYzoyNDc3IHNlcXVlbmNlci5jOjIxMDIgc2VxdWVuY2VyLmM6MzIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkgc3RhdCgp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHJlYWQtY2FjaGUuYzoyNDkwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIGdpdCBkaXI6ICVzIgorbXNnc3RyICJnaXQg65SU66CJ7YSw66as66W8IOyXtCDsiJgg7JeG7Iq164uI64ukOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjI1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVubGluazogJXMiCittc2dzdHIgIuunge2BrCDtlbTsoJztlaAg7IiYIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IHJlZnMuYzo3MzIgc2VxdWVuY2VyLmM6NDMzNCBzZXF1ZW5jZXIuYzo0MzkzIHdyYXBwZXIuYzoyMjUgd3JhcHBlci5jOjM5NQorIzogYnVpbHRpbi9hbS5jOjc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICInJXMn7J2EKOulvCkg7JOw6riw7Jqp7Jy866GcIOyXtCDsiJgg7JeG7Iq164uI64ukIgorCisjOiByZWZzLmM6MTg4MAorbXNnaWQgInJlZiB1cGRhdGVzIGZvcmJpZGRlbiBpbnNpZGUgcXVhcmFudGluZSBlbnZpcm9ubWVudCIKK21zZ3N0ciAi6rKp66as65CcIO2ZmOqyveyXkOyEnCDroIjtjbzrn7DsiqQg7JeF642w7J207Yq46rCAIOq4iOyngOuQqeuLiOuLpCIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIHJlZmVyZW5jZSAlcyIKK21zZ3N0ciAiJXMg66CI7Y2865+w7Iqk66W8IOygnOqxsO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjA1IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTMxCisjOiByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZSAlczogJXMiCittc2dzdHIgIiVzIOugiO2NvOufsOyKpOulvCDsgq3soJztlaAg7IiYIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyMDggcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIKK21zZ3N0ciAi66CI7Y2865+w7Iqk66W8IOyCreygnO2VoCDsiJgg7JeG7Iq164uI64ukOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM1IHd0LXN0YXR1cy5jOjE4NTAKK21zZ2lkICJnb25lIgorbXNnc3RyICLsl4bsnYwiCisKKyM6IHJlZi1maWx0ZXIuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCIKK21zZ3N0ciAiJWTqsJwg7JWeIgorCisjOiByZWYtZmlsdGVyLmM6MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmVoaW5kICVkIgorbXNnc3RyICIlZOqwnCDrkqQiCisKKyM6IHJlZi1maWx0ZXIuYzozOAorIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCwgYmVoaW5kICVkIgorbXNnc3RyICIlZOqwnCDslZ4sICVk6rCcIOuSpCIKKworIzogcmVmLWZpbHRlci5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGNvbG9yOjxjb2xvcj4pIgorbXNnc3RyICLsmIjsg4HtlZwg7ZiV7IudOiAlJShjb2xvcjo87IOJPikiCisKKyM6IHJlZi1maWx0ZXIuYzoxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiCittc2dzdHIgIuyduOyLne2VoCDsiJgg7JeG64qUIOyDiTogJSUoY29sb3I6JXMpIgorCisjOiByZWYtZmlsdGVyLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpsc3RyaXA9JXMiCittc2dzdHIgIuygleyImCDqsJLsnbQg7JmA7JW8IO2VqeuLiOuLpCByZWZuYW1lOmxzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6cnN0cmlwPSVzIgorbXNnc3RyICLsoJXsiJgg6rCS7J20IOyZgOyVvCDtlanri4jri6QgcmVmbmFtZTpyc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKCVzKSBhcmd1bWVudDogJXMiCittc2dzdHIgIuyduOyLne2VoCDsiJgg7JeG64qUICUlKCVzKSDsnbjsnpA6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGJvZHkpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShib2R5KeyXkCDsnbjsnpDrpbwg67Cb7KeAIOyViuyKteuLiOuLpCIKKworIzogcmVmLWZpbHRlci5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlJShzdWJqZWN0KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoc3ViamVjdCnsl5Ag7J247J6Q66W8IOuwm+yngCDslYrsirXri4jri6QiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAlJSh0cmFpbGVycykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCAlJSh0cmFpbGVycykg7Ji17IWYIOyduOyekDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgY29udGVudHM6bGluZXM9JXMiCittc2dzdHIgIidjb250ZW50czpsaW5lcz0lcyfsl5DshJwgMOuztOuLpCDtgbAg6rCS7J20IOyZgOyVvCDtlanri4jri6QiCisKKyM6IHJlZi1maWx0ZXIuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGNvbnRlbnRzKSBhcmd1bWVudDogJXMiCittc2dzdHIgIuyVjCDsiJgg7JeG64qUICUlKGNvbnRlbnRzKSDsnbjsnpA6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIG9iamVjdG5hbWU6c2hvcnQ9JXMiCittc2dzdHIgIidjb250ZW50czpzaG9ydD0lcyfsl5DshJwgMOuztOuLpCDtgbAg6rCS7J20IOyZgOyVvCDtlanri4jri6QiCisKKyM6IHJlZi1maWx0ZXIuYzoyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdG5hbWUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQgJSUob2JqZWN0bmFtZSkg7J247J6QOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCittc2dzdHIgIuyYiOyDge2VnCDtmJXsi506ICUlKGFsaWduOjzrhIjruYQ+LDzsnITsuZg+KSIKKworIzogcmVmLWZpbHRlci5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcG9zaXRpb246JXMiCittc2dzdHIgIuyduOyLne2VoCDsiJgg7JeG64qUIOychOy5mDolcyIKKworIzogcmVmLWZpbHRlci5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2lkdGg6JXMiCittc2dzdHIgIuyduOyLne2VoCDsiJgg7JeG64qUIOuEiOu5hDolcyIKKworIzogcmVmLWZpbHRlci5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoYWxpZ24pIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi7J247Iud7ZWgIOyImCDsl4bripQgJSUoYWxpZ24pIOyduOyekDolcyIKKworIzogcmVmLWZpbHRlci5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB3aWR0aCBleHBlY3RlZCB3aXRoIHRoZSAlJShhbGlnbikgYXRvbSIKK21zZ3N0ciAiJSUoYWxpZ24pIOyVhO2GsOyXkCDrhIjruYTqsIAgMOuztOuLpCDsu6Tslbwg7ZWp64uI64ukIgorCisjOiByZWYtZmlsdGVyLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShpZikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLsnbjsi53tlaAg7IiYIOyXhuuKlCAlJShpZikg7J247J6QOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAi7J6Y66q765CcIO2YleyLneydmCDtlYTrk5wg7J2066aEOiAlLipzIgorCisjOiByZWYtZmlsdGVyLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg7ZWE65OcIOydtOumhDogJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgIu2YleyLnTogJSUoaWYpIOyVhO2GsOydtCAlJSh0aGVuKSDslYTthrAg7JeG7J20IOyCrOyaqeuQmOyXiOyKteuLiOuLpCIKKworIzogcmVmLWZpbHRlci5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICLtmJXsi506ICUlKHRoZW4pIOyVhO2GsOydtCAlJShpZikg7JWE7YawIOyXhuydtCDsgqzsmqnrkJjsl4jsirXri4jri6QiCisKKyM6IHJlZi1maWx0ZXIuYzo2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgIu2YleyLnTogJSUodGhlbikg7JWE7Yaw7J20IOyXrOufrOuyiCDsgqzsmqnrkJjsl4jsirXri4jri6QiCisKKyM6IHJlZi1maWx0ZXIuYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgYWZ0ZXIgJSUoZWxzZSkiCittc2dzdHIgIu2YleyLnTogJSUodGhlbikg7JWE7Yaw7J20ICUlKGVsc2UpIOuSpOyXkCDsgqzsmqnrkJjsl4jsirXri4jri6QiCisKKyM6IHJlZi1maWx0ZXIuYzo3MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAi7ZiV7IudOiAlJShlbHNlKSDslYTthrDsnbQgJSUoaWYpIOyVhO2GsCDsl4bsnbQg7IKs7Jqp65CY7JeI7Iq164uI64ukIgorCisjOiByZWYtZmlsdGVyLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICLtmJXsi506ICUlKGVsc2UpIOyVhO2GsOydtCAlJSh0aGVuKSDslYTthrAg7JeG7J20IOyCrOyaqeuQmOyXiOyKteuLiOuLpCIKKworIzogcmVmLWZpbHRlci5jOjcwNworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAi7ZiV7IudOiAlJShlbHNlKSDslYTthrDsnbQg7Jes65+s67KIIOyCrOyaqeuQmOyXiOyKteuLiOuLpCIKKworIzogcmVmLWZpbHRlci5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSB1c2VkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBhdG9tIgorbXNnc3RyICLtmJXsi506ICUlKGVuZCkg7JWE7Yaw7J20IOuMgOydkeuQmOuKlCDslYTthrAg7JeG7J20IOyCrOyaqeuQmOyXiOyKteuLiOuLpCIKKworIzogcmVmLWZpbHRlci5jOjc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZm9ybWF0IHN0cmluZyAlcyIKK21zZ3N0ciAi7J6Y66q765CcIO2YleyLneydmCDrrLjsnpDsl7QgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxMzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIihubyBicmFuY2gsIHJlYmFzaW5nICVzKSIKK21zZ3N0ciAiKOu4jOuenOy5mCDsl4bsnYwsICVzIOumrOuyoOydtOyKpCkiCisKKyM6IHJlZi1maWx0ZXIuYzoxMzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIihubyBicmFuY2gsIHJlYmFzaW5nIGRldGFjaGVkIEhFQUQgJXMpIgorbXNnc3RyICIo67iM656c7LmYIOyXhuydjCwg67aE66as65CcIEhFQUQgJXMg66as67Kg7J207IqkKSIKKworIzogcmVmLWZpbHRlci5jOjEzOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKG5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gJXMpIgorbXNnc3RyICIo67iM656c7LmYIOyXhuydjCwg7J2065Ox67aEICVz7JeQ7IScIOyLnOyekSkiCisKKyMuIFRSQU5TTEFUT1JTOiBtYWtlIHN1cmUgdGhpcyBtYXRjaGVzICJIRUFECisjLiBkZXRhY2hlZCBhdCAiIGluIHd0LXN0YXR1cy5jCisjLgorIzogcmVmLWZpbHRlci5jOjE0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiKEhFQUQgZGV0YWNoZWQgYXQgJXMpIgorbXNnc3RyICIoSEVBRCAlcyDsnITsuZjsl5DshJwg67aE66as65CoKSIKKworIy4gVFJBTlNMQVRPUlM6IG1ha2Ugc3VyZSB0aGlzIG1hdGNoZXMgIkhFQUQKKyMuIGRldGFjaGVkIGZyb20gIiBpbiB3dC1zdGF0dXMuYworIy4KKyM6IHJlZi1maWx0ZXIuYzoxNDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIihIRUFEIGRldGFjaGVkIGZyb20gJXMpIgorbXNnc3RyICIoSEVBRCAlcyjsnLwp66Gc67aA7YSwIOu2hOumrOuQqCkiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDEyCittc2dpZCAiKG5vIGJyYW5jaCkiCittc2dzdHIgIijruIzrnpzsuZgg7JeG7J2MKSIKKworIzogcmVmLWZpbHRlci5jOjE0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBvYmplY3QgJXMgZm9yICVzIgorbXNnc3RyICLsl4bripQg7Jik67iM7KCd7Yq4ICVzLCAlc+yXkCDrjIDtlbQiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhcnNlX29iamVjdF9idWZmZXIgZmFpbGVkIG9uICVzIGZvciAlcyIKK21zZ3N0ciAiJXPsl5AgcGFyc2Vfb2JqZWN0X2J1ZmZlciDsi6TtjKggKCVz7JeQIOuMgO2VtCkiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkCDsnpjrqrvrkJwg7ZiV7Iud7J2YIOyYpOu4jOygne2KuCIKKworIzogcmVmLWZpbHRlci5jOjE5ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgJXMiCittc2dzdHIgIuunneqwgOynhCDsnbTrpoQgJXPsl5Ag66CI7Y2865+w7Iqk66W8IOustOyLnO2VqeuLiOuLpCIKKworIzogcmVmLWZpbHRlci5jOjE5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIKK21zZ3N0ciAi66ed6rCA7KeEIOugiO2NvOufsOyKpCAlcyDrrLTsi5wiCisKKyM6IHJlZi1maWx0ZXIuYzoyMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIG1pc3NpbmciCittc2dzdHIgIu2YleyLnTogJSUoZW5kKSDslYTthrDsnbQg7JeG7Iq164uI64ukIgorCisjOiByZWYtZmlsdGVyLmM6MjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIuyemOuqu+uQnCDtmJXsi53snZgg7Jik67iM7KCd7Yq4IOydtOumhCAlcyIKKworIzogcmVtb3RlLmM6NjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAiJXMg67CPICVz7J2EKOulvCkg66qo65GQICVz7JeQIOqwgOyguOyYrCDsiJgg7JeG7Iq164uI64ukIgorCisjOiByZW1vdGUuYzo2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXPsnYAo64qUKSDrs7TthrUgJXPsnYQo66W8KSDstpTsoIHtlZjqs6AsICVz7J2EKOulvCkg7LaU7KCB7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogcmVtb3RlLmM6NjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyYWNrcyBib3RoICVzIGFuZCAlcyIKK21zZ3N0ciAiJXPsnYAo64qUKSAlcyDrsI8gJXMg66qo65GQIOy2lOygge2VqeuLiOuLpCIKKworIzogcmVtb3RlLmM6NjIxCittc2dpZCAiSW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIuuCtOu2gCDsmKTrpZgiCisKKyM6IHJlbW90ZS5jOjE1MzQgcmVtb3RlLmM6MTYzNQorbXNnaWQgIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giCittc2dzdHIgIkhFQUTqsIAg67iM656c7LmY66W8IOqwgOumrO2CpOyngCDslYrsirXri4jri6QiCisKKyM6IHJlbW90ZS5jOjE1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgIuq3uOufsCDruIzrnpzsuZjqsIAg7JeG7Iq164uI64ukOiAnJXMnIgorCisjOiByZW1vdGUuYzoxNTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICInJXMnIOu4jOuenOy5mOyXkCDrjIDtlbQg7JeF7Iqk7Yq466a87J2EIOyEpOygle2VmOyngCDslYrslZjsirXri4jri6QiCisKKyM6IHJlbW90ZS5jOjE1NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIuyXheyKpO2KuOumvCAnJXMnIOu4jOuenOy5mOqwgCDrpqzrqqjtirgg7LaU7KCBIOu4jOuenOy5mOuhnCDsoIDsnqXrkJjsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiByZW1vdGUuYzoxNTY3CisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggZGVzdGluYXRpb24gJyVzJyBvbiByZW1vdGUgJyVzJyBoYXMgbm8gbG9jYWwgdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLrpqzrqqjtirggJyUyJHMn7J2YIO2RuOyLnCDrjIDsg4EgJyUxJHMn7JeQIOuhnOy7rCDstpTsoIEg67iM656c7LmY6rCAIOyXhuyKteuLiOuLpCIKKworIzogcmVtb3RlLmM6MTU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICInJXMnIOu4jOuenOy5mOyXkCDtkbjsi5wg66as66qo7Yq46rCAIOyXhuyKteuLiOuLpCIKKworIzogcmVtb3RlLmM6MTU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciCittc2dzdHIgIiclcyfsl5Ag64yA7ZWcIO2RuOyLnCDroIjtjbzrn7DsiqTrqoXshLjsl5AgJyVzJ+ydtCjqsIApIOuTpOyWtCDsnojsp4Ag7JWK7Iq164uI64ukIgorCisjOiByZW1vdGUuYzoxNjAyCittc2dpZCAicHVzaCBoYXMgbm8gZGVzdGluYXRpb24gKHB1c2guZGVmYXVsdCBpcyAnbm90aGluZycpIgorbXNnc3RyICLtkbjsi5zsnZgg64yA7IOB7J20IOyXhuyKteuLiOuLpCAocHVzaC5kZWZhdWx06rCAICdub3RoaW5nJ+yeheuLiOuLpCkiCisKKyM6IHJlbW90ZS5jOjE2MjQKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSAnc2ltcGxlJyBwdXNoIHRvIGEgc2luZ2xlIGRlc3RpbmF0aW9uIgorbXNnc3RyICLtlZjrgpjsnZgg64yA7IOB7JeQIOuMgO2VtCAnc2ltcGxlJyDtkbjsi5zrpbwg7LKY66as7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHJlbW90ZS5jOjE5MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICLtmITsnqwg67iM656c7LmY6rCAICclcycg6riw67CY7J207KeA66eMLCDsl4XsiqTtirjrprzsnbQg7JeG7Ja07KGM7Iq164uI64ukLlxuIgorCisjOiByZW1vdGUuYzoxOTQzCittc2dpZCAiICAodXNlIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgdG8gZml4dXApXG4iCittc2dzdHIgIiAgKOuwlOuhnOyeoeycvOugpOuptCBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwi7J2EIOyCrOyaqe2VmOyLreyLnOyYpClcbiIKKworIzogcmVtb3RlLmM6MTk0NgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyB1cCB0byBkYXRlIHdpdGggJyVzJy5cbiIKK21zZ3N0ciAi67iM656c7LmY6rCAICclcyfsl5Ag66ee6rKMIOyXheuNsOydtO2KuOuQnCDsg4Htg5zsnoXri4jri6QuXG4iCisKKyM6IHJlbW90ZS5jOjE5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggYW5kICclcycgcmVmZXIgdG8gZGlmZmVyZW50IGNvbW1pdHMuXG4iCittc2dzdHIgIu2YhOyerCDruIzrnpzsuZjsmYAgJyVzJ+ydtCjqsIApIOuLpOuluCDsu6TrsIvsnYQg66CI7Y2865+w7Iqk7ZWp64uI64ukLlxuIgorCisjOiByZW1vdGUuYzoxOTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcIiVzXCIgZm9yIGRldGFpbHMpXG4iCittc2dzdHIgIiAo7J6Q7IS47ZWcIOygleuztOulvCDsnITtlbQgXCIlc1wi7J2EKOulvCkg7IKs7Jqp7ZWY7Iut7Iuc7JikKVxuIgorCisjOiByZW1vdGUuYzoxOTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIuu4jOuenOy5mOqwgCAnJXMn67O064ukICVk6rCcIOy7pOuwi+unjO2BvCDslZ7sl5Ag7J6I7Iq164uI64ukLlxuIgorCisjOiByZW1vdGUuYzoxOTYzCittc2dpZCAiICAodXNlIFwiZ2l0IHB1c2hcIiB0byBwdWJsaXNoIHlvdXIgbG9jYWwgY29tbWl0cylcbiIKK21zZ3N0ciAiICAo66Gc7Lus7JeQIOyeiOuKlCDsu6TrsIvsnYQg7KCc7Lac7ZWY66Ck66m0IFwiZ2l0IHB1c2hcIuulvCDsgqzsmqntlZjsi63si5zsmKQpXG4iCisKKyM6IHJlbW90ZS5jOjE5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAi67iM656c7LmY6rCAICclcyfrs7Tri6QgJWTqsJwg7Luk67CLIOuSpOyXkCDsnojqs6AsIOyVnuycvOuhnCDrj4zrprQg7IiYIOyeiOyKteuLiOuLpC5cbiIKKworIzogcmVtb3RlLmM6MTk3NAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gdXBkYXRlIHlvdXIgbG9jYWwgYnJhbmNoKVxuIgorbXNnc3RyICIgICjroZzsu6wg67iM656c7LmY66W8IOyXheuNsOydtO2KuO2VmOugpOuptCBcImdpdCBwdWxsXCLsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKVxuIgorCisjOiByZW1vdGUuYzoxOTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ3N0clswXSAiIgorIu2YhOyerCDruIzrnpzsuZjsmYAgJyVzJ+ydtCjqsIApIOqwiOudvOyhjOyKteuLiOuLpCxcbiIKKyLri6Trpbgg7Luk67CL7J20IOqwgeqwgSAlZOqwnOyZgCAlZOqwnCDsnojsirXri4jri6QuXG4iCisKKyM6IHJlbW90ZS5jOjE5ODcKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpXG4iCittc2dzdHIgIiIKKyIgICjrpqzrqqjtirjsnZgg67iM656c7LmY66W8IO2YhOyerCDruIzrnpzsuZjroZwg67OR7ZWp7ZWY66Ck66m0IFwiZ2l0IHB1bGxcIuydhCDsgqzsmqntlZjsi63si5zsmKQpXG4iCisKKyM6IHJldmlzaW9uLmM6MjI4OQorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgIu2YhOyerCDruIzrnpzsuZjqsIAg66ed6rCA7KeEIOqyg+yymOufvCDrs7TsnoXri4jri6QiCisKKyM6IHJldmlzaW9uLmM6MjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycgZG9lcyBub3QgaGF2ZSBhbnkgY29tbWl0cyB5ZXQiCittc2dzdHIgIu2YhOyerCAnJXMnIOu4jOuenOy5mOyXkCDslYTsp4Eg7JWE66y0IOy7pOuwi+uPhCDsl4bsirXri4jri6QiCisKKyM6IHJldmlzaW9uLmM6MjQ4OQorbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnc3RyICItLWZpcnN0LXBhcmVudCDsmLXshZjsnYAgLS1iaXNlY3Qg7Ji17IWY6rO8IO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IHJ1bi1jb21tYW5kLmM6NzI4Cittc2dpZCAib3BlbiAvZGV2L251bGwgZmFpbGVkIgorbXNnc3RyICIvZGV2L251bGwg7Je06riwIOyLpO2MqCIKKworIzogcnVuLWNvbW1hbmQuYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJyVzJyBob29rIHdhcyBpZ25vcmVkIGJlY2F1c2UgaXQncyBub3Qgc2V0IGFzIGV4ZWN1dGFibGUuXG4iCisiWW91IGNhbiBkaXNhYmxlIHRoaXMgd2FybmluZyB3aXRoIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAuIgorbXNnc3RyICIiCisiJyVzJyDtm4TtgazqsIAg7Iuk7ZaJIOqwgOuKpe2VmOuPhOuhnSDshKTsoJXrkJjsp4Ag7JWK7JWE7IScLCDrrLTsi5zrkKnri4jri6QuXG4iCisi7J20IOqyveqzoOuKlCBgZ2l0IGNvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgZmFsc2VgIOuqheugueycvOuhnCDrgYwg7IiYIOyeiOyKteuLiOuLpC4iCisKKyM6IHNlbmQtcGFjay5jOjE0MQorbXNnaWQgInVuZXhwZWN0ZWQgZmx1c2ggcGFja2V0IHdoaWxlIHJlYWRpbmcgcmVtb3RlIHVucGFjayBzdGF0dXMiCittc2dzdHIgIuumrOuqqO2KuCDrrLbsnYwg7ZKA6riwIOyDge2DnOulvCDsnb3ripQg64+Z7JWIIOuwnOyDne2VnCDsmIjsg4HsuZgg66q77ZWcIO2UjOufrOyLnCDtjKjtgrciCisKKyM6IHNlbmQtcGFjay5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgcmVtb3RlIHVucGFjayBzdGF0dXM6ICVzIgorbXNnc3RyICLrpqzrqqjtirgg66y27J2MIO2SgOq4sCDsg4Htg5zrpbwg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6Q6ICVzIgorCisjOiBzZW5kLXBhY2suYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIHVucGFjayBmYWlsZWQ6ICVzIgorbXNnc3RyICLrpqzrqqjtirgg66y27J2MIO2SgOq4sCDsi6TtjKg6ICVzIgorCisjOiBzZW5kLXBhY2suYzozMDgKK21zZ2lkICJmYWlsZWQgdG8gc2lnbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSIKK21zZ3N0ciAi7ZG47IucIOyduOymneyEnCDshJzrqoXsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBzZW5kLXBhY2suYzo0MjEKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIHB1c2giCittc2dzdHIgIuuwm+uKlCDsqr3sl5DshJwgLS1zaWduZWQg7ZG47Iuc66W8IOyngOybkO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IHNlbmQtcGFjay5jOjQyMworbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLSIKKyJzaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorIuuwm+uKlCDsqr3sl5DshJwgLS1zaWduZWQg7ZG47Iuc66W8IOyngOybkO2VmOyngCDslYrsnLzrr4DroZwg7ZG47IucIOyduOymneyEnOulvCDrs7TrgrTsp4Ag7JWK7Iq164uI64ukIgorCisjOiBzZW5kLXBhY2suYzo0MzUKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giCittc2dzdHIgIuuwm+uKlCDsqr3sl5DshJwgLS1hdG9taWMg7ZG47Iuc66W8IOyngOybkO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IHNlbmQtcGFjay5jOjQ0MAorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgcHVzaCBvcHRpb25zIgorbXNnc3RyICLrsJvripQg7Kq97JeQ7IScIO2RuOyLnCDsmLXshZjsnYQg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0IG1lc3NhZ2UgY2xlYW51cCBtb2RlICclcyciCittc2dzdHIgIuyemOuqu+uQnCDsu6TrsIsg66mU7Iuc7KeAIOygleumrCDrqqjrk5wgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOyCreygnO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzozMDEKK21zZ2lkICJyZXZlcnQiCittc2dzdHIgInJldmVydCIKKworIzogc2VxdWVuY2VyLmM6MzAzCittc2dpZCAiY2hlcnJ5LXBpY2siCittc2dzdHIgImNoZXJyeS1waWNrIgorCisjOiBzZXF1ZW5jZXIuYzozMDUKK21zZ2lkICJyZWJhc2UgLWkiCittc2dzdHIgInJlYmFzZSAtaSIKKworIzogc2VxdWVuY2VyLmM6MzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gYWN0aW9uOiAlZCIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg64+Z7J6ROiAlZCIKKworIzogc2VxdWVuY2VyLmM6MzY0Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKyLsnbQg7Lap64+M7J2EIO2VtOqysO2VnCDrkqTsl5AsIOuwlOuhnOyeoeydgCDqsr3roZzrpbxcbiIKKyInZ2l0IGFkZCA86rK966GcPicg65iQ64qUICdnaXQgcm0gPOqyveuhnD4n66GcIO2RnOyLnO2VmOyLreyLnOyYpCIKKworIzogc2VxdWVuY2VyLmM6MzY3Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKyLsnbQg7Lap64+M7J2EIO2VtOqysO2VnCDrkqTsl5AsIOuwlOuhnOyeoeydgCDqsr3roZzrpbxcbiIKKyInZ2l0IGFkZCA86rK966GcPicg65iQ64qUICdnaXQgcm0gPOqyveuhnD4n66GcIO2RnOyLnO2VmOyLreyLnOyYpC5cbiIKKyLqt7jrpqzqs6Ag6rKw6rO866y87J2EICdnaXQgY29tbWl0J+ycvOuhnCDsu6TrsIvtlZjsi63si5zsmKQiCisKKyM6IHNlcXVlbmNlci5jOjM4MCBzZXF1ZW5jZXIuYzoyNDY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb2NrICclcyciCittc2dzdHIgIiclcyfsnYQo66W8KSDsnqDquIAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MzgyIHNlcXVlbmNlci5jOjIzNDYgc2VxdWVuY2VyLmM6MjQ3MiBzZXF1ZW5jZXIuYzoyNDg2CisjOiBzZXF1ZW5jZXIuYzoyNjk0IHNlcXVlbmNlci5jOjQzMzYgc2VxdWVuY2VyLmM6NDM5OSB3cmFwcGVyLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICInJXMn7JeQIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGVvbCB0byAnJXMnIgorbXNnc3RyICInJXMn7JeQIOykhOuwlOq/iOydhCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MzkyIHNlcXVlbmNlci5jOjIzNTEgc2VxdWVuY2VyLmM6MjQ3NCBzZXF1ZW5jZXIuYzoyNDg4CisjOiBzZXF1ZW5jZXIuYzoyNzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5hbGl6ZSAnJXMnIgorbXNnc3RyICInJXMnIOuniOy5mOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjQxNSBzZXF1ZW5jZXIuYzo4MDQgc2VxdWVuY2VyLmM6MTQ5MyBzZXF1ZW5jZXIuYzoyMzcxCisjOiBzZXF1ZW5jZXIuYzoyNjg0IHNlcXVlbmNlci5jOjI3ODggYnVpbHRpbi9hbS5jOjI1OSBidWlsdGluL2NvbW1pdC5jOjcyNworIzogYnVpbHRpbi9tZXJnZS5jOjEwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkOyEnCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlcy4iCittc2dzdHIgIuuhnOy7rCDrs4Dqsr0g7IKs7ZWt7J2EICVzIOuVjOusuOyXkCDrja7slrQg7JOw6rKMIOuQqeuLiOuLpC4iCisKKyM6IHNlcXVlbmNlci5jOjQ0NQorbXNnaWQgImNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAi67OA6rK9IOyCrO2VreydhCDsu6TrsIvtlZjqsbDrgpgg7Iqk7YOc7Iuc7ZWcIOuLpOydjCDqs4Tsho3tlZjsi63si5zsmKQuIgorCisjOiBzZXF1ZW5jZXIuYzo0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiJXM6IOygleuwqe2WpSDsp4TtlokiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiLCAiY2hlcnJ5LXBpY2siIG9yCisjLiAicmViYXNlIC1pIi4KKyMuCisjOiBzZXF1ZW5jZXIuYzo1NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IOyDiCDsnbjrjbHsiqQg7YyM7J287J2EIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzo1NzkKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWUiCittc2dzdHIgIuy6kOyLnCDtirjrpqzrpbwg7JeF642w7J207Yq47ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjU5MgorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICJIRUFEIOy7pOuwi+ydhCDssL7snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6NzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZVxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlIHNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLsnpHsl4Ug7Y+0642U7JeQIOyKpO2FjOydtOynle2VnCDrs4Dqsr0g7IKs7ZWt7J20IOyeiOyKteuLiOuLpC5cbiIKKyLsnbQg67OA6rK9IOyCrO2VreydhCDsnbTsoIQg7Luk67CL7JeQIO2Vqey5mOugpOuptCxcbiIKKyLri6TsnYzsnYQg7Iuk7ZaJ7ZWY7Iut7Iuc7JikOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisi7IOIIOy7pOuwi+ycvOuhnCDrp4zrk5zroKTrqbQg64uk7J2M7J2EIOyLpO2Wie2VmOyLreyLnOyYpDpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyLslrTrlqQg6rK97Jqw7J2065OgLCDrp4jsuZwg64uk7J2M7JeQIOuLpOydjCDrqoXroLnsnLzroZwg6rOE7IaN7ZWp64uI64ukOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjgxOAorbXNnaWQgIndyaXRpbmcgcm9vdCBjb21taXQiCittc2dzdHIgIuy1nOyDgeychCDsu6TrsIvsnYQg7JSB64uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxMDQzCittc2dpZCAiJ3ByZXBhcmUtY29tbWl0LW1zZycgaG9vayBmYWlsZWQiCittc2dzdHIgIidwcmVwYXJlLWNvbW1pdC1tc2cnIO2bhO2BrOqwgCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjEwNTAKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5LiBSdW4gdGhlXG4iCisiZm9sbG93aW5nIGNvbW1hbmQgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHlvdXIgZWRpdG9yIHRvIGVkaXRcbiIKKyJ5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyLsnbTrpoTqs7wg7KCE7J6Q66mU7J28IOyjvOyGjOulvCDsgqzsmqnsnpAg7J2066aE6rO8IO2YuOyKpO2KuCDsnbTrpoTsnYQg7J207Jqp7ZW07IScIOyekOuPmeycvOuhnFxuIgorIuyEpOygle2WiOyKteuLiOuLpC4g7J20IOygleuztOqwgCDrp57ripTsp4Ag7ZmV7J247ZWY7Iut7Iuc7JikLiDsnbQg66mU7Iuc7KeA66W8IOuztOyngCDslYrsnLzroKTrqbQg7KCV67O0IgorIuulvFxuIgorIuuqheyLnOyggeycvOuhnCDshKTsoJXtlZjsi63si5zsmKQuIOuLpOydjCDrqoXroLnslrTrpbwg7Iuk7ZaJ7ZWY6rOgIO2OuOynkeq4sOydmCDslYjrgrTsl5Ag65Sw6528IOyEpOyglVxuIgorIu2MjOydvOydhCDtjrjsp5HtlZjsi63si5zsmKQ6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisi7J2066CH6rKMIO2VnCDri6TsnYwsIOydtCDsu6TrsIvsl5Ag7IKs7Jqp7ZWcIOyLoOybkCDsoJXrs7Trpbwg64uk7J2M6rO8IOqwmeydtCDtlbTshJwg67CU6r+AIOyImCDsnojsirXri4giCisi64ukOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTA2MworbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIuydtOumhOqzvCDsoITsnpDrqZTsnbwg7KO87IaM66W8IOyCrOyaqeyekCDsnbTrpoTqs7wg7Zi47Iqk7Yq4IOydtOumhOydhCDsnbTsmqntlbTshJxcbiIKKyLsnpDrj5nsnLzroZwg7ISk7KCV7ZaI7Iq164uI64ukLiDsnbQg7KCV67O06rCAIOunnuuKlOyngCDtmZXsnbjtlZjsi63si5zsmKQuIOydtCDrqZTsi5zsp4DrpbxcbiIKKyLrs7Tsp4Ag7JWK7Jy866Ck66m0IOygleuztOulvCDrqoXsi5zsoIHsnLzroZwg7ISk7KCV7ZWY7Iut7Iuc7JikOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIuuCtCDsnbTrpoRcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisi7J2066CH6rKMIO2VnCDri6TsnYwsIOydtCDsu6TrsIvsl5Ag7IKs7Jqp7ZWcIOyLoOybkCDsoJXrs7Trpbwg64uk7J2M6rO8IOqwmeydtCDtlbTshJwg67CU6r+AIOyImCDsnojsirXri4giCisi64ukOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTEwMworbXNnaWQgImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIuyDiOuhnCDrp4zrk6Ag7Luk67CL7J2EIOywvuyVhOuzvCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxMTA1Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICLsg4jroZwg66eM65OgIOy7pOuwi+ydhCDtjIzsi7HtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTE1MQorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICLsu6TrsIvsnYQg66eM65OgIO2bhCBIRUFE66W8IOywvuydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxMTUzCittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiSEVBRCDrtoTrpqzrkKgiCisKKyM6IHNlcXVlbmNlci5jOjExNTcKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAiICjstZzsg4HsnIQt7Luk67CLKSIKKworIzogc2VxdWVuY2VyLmM6MTE3OAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIgorbXNnc3RyICJIRUFE66W8IO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxMTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiSEVBRCAlc+ydgCjripQpIOy7pOuwi+ydtCDslYTri5nri4jri6QhIgorCisjOiBzZXF1ZW5jZXIuYzoxMTg0IGJ1aWx0aW4vY29tbWl0LmM6MTUyOAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAiSEVBRCDsu6TrsIvsnYQg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjEyMzUgc2VxdWVuY2VyLmM6MTgzMgorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgYXV0aG9yIgorbXNnc3RyICLsu6TrsIsg7J6R7ISx7J6Q66W8IO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxMjQ1IGJ1aWx0aW4vYW0uYzoxNjMwIGJ1aWx0aW4vbWVyZ2UuYzo2NDUKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZeqwgCDtirjrpqzrpbwg7JOw64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTI2MiBzZXF1ZW5jZXIuYzoxMzE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbW1pdCBtZXNzYWdlIGZyb20gJyVzJyIKK21zZ3N0ciAiICclcyfsnZgg7Luk67CLIOuplOyLnOyngOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTI4NCBidWlsdGluL2FtLmM6MTY1MCBidWlsdGluL2NvbW1pdC5jOjE2MzEgYnVpbHRpbi9tZXJnZS5jOjgyNQorIzogYnVpbHRpbi9tZXJnZS5jOjg1MAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICLsu6TrsIsg7Jik67iM7KCd7Yq466W8IOyTsOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjEzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAiJXMg7Luk67CL7J2EIO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxMzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIlcyDsnbTsoIQg7Luk67CL7J2EIO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxNTAwIHNlcXVlbmNlci5jOjE1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICVkIGNvbW1pdHMuIgorbXNnc3RyICLsu6TrsIsgJWTqsJzqsIAg7ISe7J24IOqysOqzvOyeheuLiOuLpC4iCisKKyM6IHNlcXVlbmNlci5jOjE1MTAgc2VxdWVuY2VyLmM6NDM1NQorbXNnaWQgIm5lZWQgYSBIRUFEIHRvIGZpeHVwIgorbXNnc3RyICLrsJTroZzsnqHsnLzroKTrqbQgSEVBROqwgCDtlYTsmpTtlanri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjE1MTIgc2VxdWVuY2VyLmM6MjcyOQorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQiCittc2dzdHIgIkhFQUTrpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjE1MTQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEJ3MgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIkhFQUTsnZgg7Luk67CLIOuplOyLnOyngOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxNTI3IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjQ1NworbXNnaWQgIlRoaXMgaXMgdGhlIDFzdCBjb21taXQgbWVzc2FnZToiCittc2dzdHIgIjHrsojsp7gg7Luk67CLIOuplOyLnOyngOyeheuLiOuLpDoiCisKKyM6IHNlcXVlbmNlci5jOjE1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2Ugb2YgJXMiCittc2dzdHIgIiVz7J2YIOy7pOuwiyDrqZTsi5zsp4Drpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjE1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyVkOiIKK21zZ3N0ciAi7Luk67CLIOuplOyLnOyngCAjJWTrsojsnoXri4jri6Q6IgorCisjOiBzZXF1ZW5jZXIuYzoxNTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJWQgd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAi7Luk67CLIOuplOyLnOyngCAjJWTrsojsnYQg6rG064SI65yB64uI64ukOiIKKworIzogc2VxdWVuY2VyLmM6MTU1MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQ6ICVkIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCDrqoXroLk6ICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxNjMxCittc2dpZCAieW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAi7J24642x7IqkIO2MjOydvOydtCDrs5HtlanrkJjsp4Ag7JWK7JWY7Iq164uI64ukLiIKKworIzogc2VxdWVuY2VyLmM6MTYzOAorbXNnaWQgImNhbm5vdCBmaXh1cCByb290IGNvbW1pdCIKK21zZ3N0ciAi7LWc7IOB7JyEIOy7pOuwi+ydhCDrsJTroZzsnqHsnYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTY1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgIiVzIOy7pOuwi+ydgCDrs5HtlansnbTsp4Drp4wgLW0g7Ji17IWY7J20IOyjvOyWtOyngOyngCDslYrslZjsirXri4jri6QuIgorCisjIEZJWE1FOiAicGFyZW50ICVkIiDrsojtmLjqsIAg66y07IqoIOydmOuvuD8KKyM6IHNlcXVlbmNlci5jOjE2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGRvZXMgbm90IGhhdmUgcGFyZW50ICVkIgorbXNnc3RyICIlcyDsu6TrsIvsl5Ag7J207KCEIOy7pOuwiyAlZOydtCjqsIApIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTY2OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWlubGluZSB3YXMgc3BlY2lmaWVkIGJ1dCBjb21taXQgJXMgaXMgbm90IGEgbWVyZ2UuIgorbXNnc3RyICLrqZTsnbjrnbzsnbjsnYQg7KeA7KCV7ZaI7KeA66eMICVzIOy7pOuwi+ydtCDrs5Htlakg7Luk67CL7J20IOyVhOuLmeuLiOuLpC4iCisKKyM6IHNlcXVlbmNlci5jOjE2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgIiVz7JeQIOuMgO2VnCDsu6TrsIsg66mU7Iuc7KeA66W8IOqwgOyguOyYrCDsiJgg7JeG7Iq164uI64ukIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgYSAidG9kbyIgY29tbWFuZCBsaWtlCisjLiAicmV2ZXJ0IiBvciAicGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExLgorIzogc2VxdWVuY2VyLmM6MTY5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVzOiAlcyDsnbTsoIQg7Luk67CL7J2EIO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxNzU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgJyVzJyB0byAnJXMnIgorbXNnc3RyICInJXMn7JeQ7IScICclcyco7Jy8KeuhnCDsnbTrpoTsnYQg67CU6r+AIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjE4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAi64uk7J2M7J2EIOuQmOuPjOumtChyZXZlcnQpIOyImCDsl4bsirXri4jri6Q6ICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxODE0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhcHBseSAlcy4uLiAlcyIKK21zZ3N0ciAi64uk7J2M7J2EIOyggeyaqe2VoChhcHBseSkg7IiYIOyXhuyKteuLiOuLpDogJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE4NjQKK21zZ2lkICJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIKK21zZ3N0ciAi67mIIOy7pOuwiyDrqqjsnYzsnYQg6rG064SIIOucgeuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiDsnbjrjbHsiqQg7J296riw7JeQIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTg4MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiDsnbjrjbHsiqQg7IOI66GcIOqzoOy5qOyXkCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjE5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgYWNjZXB0IGFyZ3VtZW50czogJyVzJyIKK21zZ3N0ciAiJXMo7J2AKeuKlCDsnbjsnpDrpbwg7ZeI7Jqp7ZWY7KeAIOyViuyKteuLiOuLpDogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50cyBmb3IgJXMiCittc2dzdHIgIuyXhuuKlCDsnbjsnpAsICVz7JeQIOuMgO2VtCIKKworIzogc2VxdWVuY2VyLmM6MjAyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIuyemOuqu+uQnCDspIQgJWQ6ICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjIwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi7J207KCEIOy7pOuwiyDsl4bsnbQgJyVzJyDsiJjtlontlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MjA4NSBzZXF1ZW5jZXIuYzo0MTM4IHNlcXVlbmNlci5jOjQxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJy4iCittc2dzdHIgIiclcyfsl5DshJwg7J297J2EIOyImCDsl4bsirXri4jri6QuIgorCisjOiBzZXF1ZW5jZXIuYzoyMTA4Cittc2dpZCAicGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgIidnaXQgcmViYXNlIC0tZWRpdC10b2RvJyDrqoXroLnsnLzroZwg67CU66Gc7J6h7Jy87Iut7Iuc7JikLiIKKworIzogc2VxdWVuY2VyLmM6MjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJyVzJyIKK21zZ3N0ciAi7IKs7JqpIOu2iOqwgOuKpSDsnbjsiqTtirjrn63shZgg7Iuc7Yq4OiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyMTE1Cittc2dpZCAibm8gY29tbWl0cyBwYXJzZWQuIgorbXNnc3RyICLtjIzsi7HtlZwg7Luk67CL7J20IOyXhuyKteuLiOuLpC4iCisKKyM6IHNlcXVlbmNlci5jOjIxMjYKK21zZ2lkICJjYW5ub3QgY2hlcnJ5LXBpY2sgZHVyaW5nIGEgcmV2ZXJ0LiIKK21zZ3N0ciAi65CY64+M66as6riwKHJldmVydCkg7KSR7JeQIOu5vOyYpOq4sChjaGVycnktcGljaynrpbwg7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBzZXF1ZW5jZXIuYzoyMTI4Cittc2dpZCAiY2Fubm90IHJldmVydCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIuu5vOyYpOq4sChjaGVycnktcGljaykg7KSR7JeQIOuQmOuPjOumrOq4sChyZXZlcnQp66W8IO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogc2VxdWVuY2VyLmM6MjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleTogJXMiCittc2dzdHIgIuyemOuqu+uQnCDtgqQ6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiJXPsnZgg6rCS7J20IOyemOuqu+uQqDogJXMiCisKKyM6IHNlcXVlbmNlci5jOjIyNjkKK21zZ2lkICJ1bnVzYWJsZSBzcXVhc2gtb250byIKK21zZ3N0ciAi67aI7JWI7ZWcIHNxdWFzaC1vbnRvIgorCisjOiBzZXF1ZW5jZXIuYzoyMjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAnJXMnIgorbXNnc3RyICLtmJXsi53snbQg7J6Y66q765CcIOyYteyFmCDsi5ztirg6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjIzMjMKK21zZ2lkICJhIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICLsnbTrr7gg7Luk67CLIOu5vOyYpOq4sChjaGVycnktcGljaykg65iQ64qUIOuQmOuPjOumrOq4sChyZXZlcnQp6rCAIOynhO2WiSDspJHsnoXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjIzMjQKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAtLXF1aXQgfCAtLWFib3J0KVwiIgorbXNnc3RyICJcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIg66qF66C57J2EIO2VtCDrs7Tsi63si5zsmKQiCisKKyM6IHNlcXVlbmNlci5jOjIzMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIiclcycg7Iuc7YCA7IScIOuUlOugie2EsOumrOulvCDrp4zrk6Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MjM0MQorbXNnaWQgImNvdWxkIG5vdCBsb2NrIEhFQUQiCittc2dzdHIgIkhFQUTrpbwg7J6g6riAIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjIzOTYgc2VxdWVuY2VyLmM6MzQwMworbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi67m87Jik6riwKGNoZXJyeS1waWNrKSDrmJDripQg65CY64+M66as6riwKHJldmVydCnqsIAg7KeE7ZaJIOykkeydtOyngCDslYrsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjIzOTgKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJIRUFE66W8IOq1rO2VtCDsmKwg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MjQwMCBzZXF1ZW5jZXIuYzoyNDM1Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIuyDiOuhnCDrp4zrk6Tqs6Ag7J6I64qUIOu4jOuenOy5mOyXkOyEnCDspJHsp4DtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MjQyMSBidWlsdGluL2dyZXAuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOyXtCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyNDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyc6ICVzIgorbXNnc3RyICInJXMn7J2EKOulvCkg7J297J2EIOyImCDsl4bsirXri4jri6Q6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyNDI0Cittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAi7JiI7IOB7LmYIOuqu+2VmOqyjCDtjIzsnbzsnbQg64Gd64Ks7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyNDMwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAi67m87Jik6riwIOyghOyXkCDsoIDsnqXtlZwgSEVBRCDtjIzsnbzsnbQoJyVzJykg7IaQ7IOB65CY7JeI7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyNDQxCittc2dpZCAiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFELiBOb3QgcmV3aW5kaW5nLCBjaGVjayB5b3VyIEhFQUQhIgorbXNnc3RyICJIRUFE66W8IOyYruq4tCDqsoMg6rCZ7Iq164uI64ukLiDrkJjrj4zrpqzsp4Ag7JWK7Iq164uI64ukLiBIRUFE66W8IO2ZleyduO2VmOyLreyLnOyYpCEiCisKKyM6IHNlcXVlbmNlci5jOjI1NDUgc2VxdWVuY2VyLmM6MzMyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlICVzIgorbXNnc3RyICIlc+ydhCjrpbwpIOyXheuNsOydtO2KuO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyNTgzIHNlcXVlbmNlci5jOjMzMDEKK21zZ2lkICJjYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJIRUFE66W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyNjE4IHNlcXVlbmNlci5jOjI2MjIgYnVpbHRpbi9kaWZmdG9vbC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIiclcyfsl5DshJwgJyVzJyjsnLwp66GcIOuzteyCrO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyNjQxCittc2dpZCAiY291bGQgbm90IHJlYWQgaW5kZXgiCittc2dzdHIgIuyduOuNseyKpOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIGZhaWxlZDogJXNcbiIKKyIlc1lvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisi7Iuk7ZaJIOyLpO2MqDogJXNcbiIKKyIlc+usuOygnOulvCDrsJTroZzsnqHqs6AsIOuLpOydjOydhCDsi6TtlontlZjsi63si5zsmKRcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzoyNjUyCittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKK21zZ3N0ciAi6re466as6rOgIOyduOuNseyKpCDqt7jrpqzqs6Av65iQ64qUIOyekeyXhSDtj7TrjZTsl5Ag67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6RcbiIKKworIzogc2VxdWVuY2VyLmM6MjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIHN1Y2NlZWRlZDogJXNcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyLsi6Ttlokg7ISx6rO1OiAlc1xuIgorIu2VmOyngOunjCDrs4Dqsr0g7IKs7ZWt7J2EIOyduOuNseyKpCDrsI8v65iQ64qUIOyekeyXhSDtj7TrjZTsl5Ag64Ko6rKo65Gh64uI64ukLlxuIgorIuuzgOqyvSDsgqztla3snYQg7Luk67CL7ZWY6rGw64KYIOyKpO2DnOyLnOyXkCDrhKPsnLzroKTrqbQsIOuLpOydjOydhCDsi6TtlontlZjsi63si5zsmKQ6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogc2VxdWVuY2VyLmM6Mjc3MQorbXNnaWQgIndyaXRpbmcgZmFrZSByb290IGNvbW1pdCIKK21zZ3N0ciAi6rCA7KecIOy1nOyDgeychCDsu6TrsIvsnYQg7JSB64uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyNzc2Cittc2dpZCAid3JpdGluZyBzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLW9udG/rpbwg7JSB64uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyODExCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiCittc2dzdHIgIiVz7J2YIO2KuOumrOulvCDssL7ripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyODI5Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGluZGV4IgorbXNnc3RyICLsnbjrjbHsiqTrpbwg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjI4NjEKK21zZ2lkICJjYW5ub3QgbWVyZ2Ugd2l0aG91dCBhIGN1cnJlbnQgcmV2aXNpb24iCittc2dzdHIgIu2YhOyerCDrpqzruYTsoIQg7JeG7J20IOuzke2Vqe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyODg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgIiclcycg7ZW06rKw7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjI5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBjb21taXQgbWVzc2FnZSBvZiAnJXMnIgorbXNnc3RyICInJXMn7J2YIOy7pOuwiyDrqZTsi5zsp4Drpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjI5MTYgc2VxdWVuY2VyLmM6Mjk0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MzAwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXZlbiBhdHRlbXB0IHRvIG1lcmdlICclLipzJyIKK21zZ3N0ciAiJyUuKnMnIOuzke2VqeydhCDsi5zrj4Trj4Qg7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjMwMjEKK21zZ2lkICJtZXJnZTogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICLrs5Htlak6IOyDiCDsnbjrjbHsiqQg7YyM7J287J2EIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzozMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLlxuIgorbXNnc3RyICLsnpDrj5kg7Iqk7YOc7IucIOyggeyaqS5cbiIKKworIzogc2VxdWVuY2VyLmM6MzEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIiVz7J2EKOulvCkg7KCA7J6l7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjMxMDMgZ2l0LXJlYmFzZS5zaDoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuXG4iCisiWW91ciBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBzdGFzaC5cbiIKKyJZb3UgY2FuIHJ1biBcImdpdCBzdGFzaCBwb3BcIiBvciBcImdpdCBzdGFzaCBkcm9wXCIgYXQgYW55IHRpbWUuXG4iCittc2dzdHIgIiIKKyLsnpDrj5nsiqTtg5zsi5wg7KCB7Jqp7JeQIOy2qeuPjOydtCDrsJzsg53tlojsirXri4jri6QuXG4iCisi67OA6rK9IOyCrO2VreydgCDsiqTtg5zsi5wg7JWI7JeQIOyViOyghO2VmOqyjCDrk6TslrQg7J6I7Iq164uI64ukLlxuIgorIuyWuOygnOuToOyngCBcImdpdCBzdGFzaCBwb3BcIiDrmJDripQgXCJnaXQgc3Rhc2ggZHJvcFwi7J2EIOyLpO2Wie2VoCDsiJgg7J6I7Iq164uI64ukLlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZXhlY3V0ZSB0aGUgdG9kbyBjb21tYW5kXG4iCisiXG4iCisiICAgICUuKnNcbiIKKyJJdCBoYXMgYmVlbiByZXNjaGVkdWxlZDsgVG8gZWRpdCB0aGUgY29tbWFuZCBiZWZvcmUgY29udGludWluZywgcGxlYXNlXG4iCisiZWRpdCB0aGUgdG9kbyBsaXN0IGZpcnN0OlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tZWRpdC10b2RvXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisi7ZWgIOydvCDrqqnroZ0g66qF66C57J2EIOyLpO2Wie2VoCDsiJgg7JeG7Iq164uI64ukXG4iCisiXG4iCisiICAgICUuKnNcbiIKKyLsiqTsvIDspITsnYQg7KGw7KCV7ZWp64uI64ukLiDqs4Tsho0g7ZWY6riwIOyghOyXkCDrqoXroLnslrTrpbwg7Y647KeR7ZWY66Ck66m0LCDrqLzsoIAg64uk7J2MXG4iCisi7ZWgIOydvCDrqqnroZ3snYQg7Y647KeR7ZWY7Iut7Iuc7JikOlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tZWRpdC10b2RvXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXMuLi4gICUuKnNcbiIKK21zZ3N0ciAiJXMuLi4gICUuKnMg7JyE7LmY7JeQ7IScIOupiOy3hOyKteuLiOuLpFxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZCAlZCIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg66qF66C5ICVkIgorCisjOiBzZXF1ZW5jZXIuYzozMzA5Cittc2dpZCAiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIgorbXNnc3RyICJvcmlnLWhlYWTrpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjMzMTQgc2VxdWVuY2VyLmM6NDM1MgorbXNnaWQgImNvdWxkIG5vdCByZWFkICdvbnRvJyIKK21zZ3N0ciAiJ29udG8n66W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzozMzI4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgSEVBRCB0byAlcyIKK21zZ3N0ciAiSEVBROulvCAlcyDsnITsuZjroZwg7JeF642w7J207Yq47ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjM0MTQKK21zZ2lkICJjYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi66as67Kg7J207Iqk7ZWgIOyImCDsl4bsirXri4jri6Q6IOyKpO2FjOydtOynle2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6QuIgorCisjOiBzZXF1ZW5jZXIuYzozNDIzCittc2dpZCAiY2Fubm90IGFtZW5kIG5vbi1leGlzdGluZyBjb21taXQiCittc2dzdHIgIuyXhuuKlCDsu6TrsIvsnYQg7IiY7KCV7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjM0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBmaWxlOiAnJXMnIgorbXNnc3RyICLsnpjrqrvrkJwg7YyM7J28OiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozNDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29udGVudHM6ICclcyciCittc2dzdHIgIuyemOuqu+uQnCDrgrTsmqk6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjM0MzAKK21zZ2lkICIiCisiXG4iCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlLCBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJcbiIKKyLsnpHsl4Ug7Y+0642U7JeQIOy7pOuwi+2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6QuIOydtCDsgqztla3snYQg66i87KCAXG4iCisi7Luk67CL7ZWY6rOgICdnaXQgcmViYXNlIC0tY29udGludWUnIOuqheugueydhCDri6Tsi5wg7Iuk7ZaJ7ZWY7Iut7Iuc7JikLiIKKworIzogc2VxdWVuY2VyLmM6MzQ1NSBzZXF1ZW5jZXIuYzozNDkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBmaWxlOiAnJXMnIgorbXNnc3RyICLtjIzsnbzsnYQg7JO4IOyImCDsl4bsirXri4jri6Q6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjM1MDgKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIkNIRVJSWV9QSUNLX0hFQUTrpbwg7KCc6rGw7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjM1MTUKK21zZ2lkICJjb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi7Iqk7YWM7J207KeV7ZWcIOuzgOqyvSDsgqztla3snYQg7Luk67CL7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBzZXF1ZW5jZXIuYzozNjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4ndCBjaGVycnktcGljayBhICVzIgorbXNnc3RyICIlczogJXMg7Luk67CL7J2EIOu5vOyYrCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzozNjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBiYWQgcmV2aXNpb24iCittc2dzdHIgIiVzOiDsnpjrqrvrkJwg66as67mE7KCEIgorCisjOiBzZXF1ZW5jZXIuYzozNjQ5Cittc2dpZCAiY2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICLstZzstIjsnZgg7Luk67CL7Jy866GcIOuQmOuPjOumtCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzo0MDk4Cittc2dpZCAibWFrZV9zY3JpcHQ6IHVuaGFuZGxlZCBvcHRpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDog7LKY66as7ZWY7KeAIOyViuydgCDsmLXshZgiCisKKyM6IHNlcXVlbmNlci5jOjQxMDEKK21zZ2lkICJtYWtlX3NjcmlwdDogZXJyb3IgcHJlcGFyaW5nIHJldmlzaW9ucyIKK21zZ3N0ciAibWFrZV9zY3JpcHQ6IOumrOu5hOyghCDspIDruYQg7KSRIOyYpOulmCIKKworIzogc2VxdWVuY2VyLmM6NDE0MiBzZXF1ZW5jZXIuYzo0MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAi7IKs7Jqp7ZWgIOyImCDsl4bripQg7ZWgIOydvCDrqqnroZ06ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo0MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bnJlY29nbml6ZWQgc2V0dGluZyAlcyBmb3Igb3B0aW9uIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiBJZ25vcmluZy4iCittc2dzdHIgIiIKKyJyZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayDsmLXshZjsl5Ag64yA7ZW0IOyduOyLne2VoCDsiJgg7JeG64qUICVzIOyEpOyglS4g66y07Iuc7ZWp64uI64ukLiIKKworIzogc2VxdWVuY2VyLmM6NDMwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc29tZSBjb21taXRzIG1heSBoYXZlIGJlZW4gZHJvcHBlZCBhY2NpZGVudGFsbHkuXG4iCisiRHJvcHBlZCBjb21taXRzIChuZXdlciB0byBvbGRlcik6XG4iCittc2dzdHIgIiIKKyLqsr3qs6A6IOydvOu2gCDsu6TrsIvsnbQg7J2Y64+E7LmYIOyViuqyjCDrsoTroKTsoYzsnYQg7IiY64+EIOyeiOyKteuLiOuLpC5cbiIKKyLrsoTroKTsp4Qg7Luk67CLICjstZzqt7zsl5DshJwg6rO86rGwIOyInOyEnCk6XG4iCisKKyM6IHNlcXVlbmNlci5jOjQzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIGF2b2lkIHRoaXMgbWVzc2FnZSwgdXNlIFwiZHJvcFwiIHRvIGV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LlxuIgorIlxuIgorIlVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiAiCisid2FybmluZ3MuXG4iCisiVGhlIHBvc3NpYmxlIGJlaGF2aW91cnMgYXJlOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuIgorIlxuIgorbXNnc3RyICIiCisi7J20IOuplOyLnOyngOulvCDrs7Tsp4Ag7JWK7Jy866Ck66m0LCBcImRyb3BcIuydhCDsgqzsmqntlbQg66qF7Iuc7KCB7Jy866GcIOy7pOuwi+ydhCDsoJzqsbDtlZjsi63si5wiCisi7JikLlxuIgorIlxuIgorIidnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyDrqoXroLnsnLzroZwg6rK96rOgIOuLqOqzhOulvCDrsJTqv4Ag7IiYIOyeiOyKteuLiCIKKyLri6QuXG4iCisi6rCA64ql7ZWcIOuPmeyekeydgDogaWdub3JlLCB3YXJuLCBlcnJvclxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzo0MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGlzIHdpdGggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZScuXG4iCisiT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCittc2dzdHIgIiIKKyInZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycg66qF66C57Jy866GcIOuwlOuhnOyeoeydhCDsiJgg7J6I6rOgICdnaXQgcmViYXNlIC0tY29udGludWUnIOuqhSIKKyLroLnsnYQg7Iuk7ZaJ7ZWp64uI64ukLlxuIgorIuuYkOuKlCAnZ2l0IHJlYmFzZSAtLWFib3J0JyDrqoXroLnsnLzroZwg66as67Kg7J207Iqk66W8IOykkeyngO2VoCDsiJjrj4Qg7J6I7Iq164uI64ukLlxuIgorCisjOiBzZXF1ZW5jZXIuYzo0Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJyVzJyIKK21zZ3N0ciAiJyVzJyDsu6TrsIvsnYQg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjQ0OTAKK21zZ2lkICJ0aGUgc2NyaXB0IHdhcyBhbHJlYWR5IHJlYXJyYW5nZWQuIgorbXNnc3RyICLsiqTtgazrpr3tirjrpbwg7J2066+4IOyerOq1rOyEse2WiOyKteuLiOuLpC4iCisKKyM6IHNldHVwLmM6MTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICInJXMn7J2AKOuKlCkg7KCA7J6l7IaMIOuwluyeheuLiOuLpCIKKworIzogc2V0dXAuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBubyBzdWNoIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJ2dpdCA8Y29tbWFuZD4gLS0gPHBhdGg+Li4uJyB0byBzcGVjaWZ5IHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGxvY2FsbHkuIgorbXNnc3RyICIiCisiJXM6IOyekeyXhSDtj7TrjZTsl5Ag6re465+wIOqyveuhnOqwgCDsl4bsirXri4jri6QuXG4iCisi66Gc7Lus7JeQIOyXhuuKlCDqsr3roZzrpbwg7KeA7KCV7ZWY66Ck66m0ICdnaXQgPOuqheuguT4gLS0gPOqyveuhnD4uLi4nIOyLneycvOuhnCDsgqzsmqntlZjsi63si5zsmKQuIgorCisjOiBzZXR1cC5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyLslaDrp6TtlZwg7J247J6QICclcyc6IOyVjCDsiJgg7JeG64qUIOumrOu5hOyghCDrmJDripQg7J6R7JeFIO2PtOuNlOyXkCDsl4bripQg6rK966GcLlxuIgorIuqyveuhnOyZgCDrpqzruYTsoITsnYQg6rWs67aE7ZWY66Ck66m0IOuLpOydjOqzvCDqsJnsnbQgJy0tJ+ulvCDsgqzsmqntlZjsi63si5zsmKQ6XG4iCisiJ2dpdCA866qF66C5PiBbPOumrOu5hOyghD4uLi5dIC0tIFs87YyM7J28Pi4uLl0nIgorCisjOiBzZXR1cC5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gJyVzJyBtdXN0IGNvbWUgYmVmb3JlIG5vbi1vcHRpb24gYXJndW1lbnRzIgorbXNnc3RyICInJXMnIOyYteyFmOydgCAg7Ji17IWY7J20IOyVhOuLjCDsnbjsnpAg7KCE7JeQIOyZgOyVvCDtlanri4jri6QiCisKKyM6IHNldHVwLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWVcbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyLslaDrp6TtlZwg7J247J6QICclcyc6IOyVjCDsiJgg7JeG64qUIOumrOu5hOyghCDrsI8g7YyM7J28IOydtOumhFxuIgorIuqyveuhnOyZgCDrpqzruYTsoITsnYQg6rWs67aE7ZWY66Ck66m0IOuLpOydjOqzvCDqsJnsnbQgJy0tJ+ulvCDsgqzsmqntlZjsi63si5zsmKQ6XG4iCisiJ2dpdCA866qF66C5PiBbPOumrOu5hOyghD4uLi5dIC0tIFs87YyM7J28Pi4uLl0nIgorCisjOiBzZXR1cC5jOjM4OQorbXNnaWQgInVuYWJsZSB0byBzZXQgdXAgd29yayB0cmVlIHVzaW5nIGludmFsaWQgY29uZmlnIgorbXNnc3RyICLsnpjrqrvrkJwg7ISk7KCV7J2EIOyCrOyaqe2VmOyXrCDsnpHsl4Ug7Y+0642U66W8IOyEpOygle2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXR1cC5jOjM5MworbXNnaWQgInRoaXMgb3BlcmF0aW9uIG11c3QgYmUgcnVuIGluIGEgd29yayB0cmVlIgorbXNnc3RyICLsnbQg7J6R7JeF7J2AIOyekeyXhSDtj7TrjZTsl5DshJwg7Iuk7ZaJ7ZW07JW8IO2VqeuLiOuLpCIKKworIzogc2V0dXAuYzo1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgZ2l0IHJlcG8gdmVyc2lvbiA8PSAlZCwgZm91bmQgJWQiCittc2dzdHIgIuq5gyDsoIDsnqXshowg67KE7KCEIDw9ICVkIOuyhOyghOydhCDquLDrjIDtlZjsp4Drp4wsICVkIOuyhOyghOydtCDrsJzqsqzrkJjsl4jsirXri4jri6QiCisKKyM6IHNldHVwLmM6NTExCittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCDsoIDsnqXshowg7ZmV7J6l7J20IOyeiOyKteuLiOuLpDoiCisKKyM6IHNldHVwLmM6NTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOyXrOuKlOuNsCDsmKTrpZgiCisKKyM6IHNldHVwLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBsYXJnZSB0byBiZSBhIC5naXQgZmlsZTogJyVzJyIKK21zZ3N0ciAiLmdpdCDtjIzsnbzsnbQg64SI66y0IO2BveuLiOuLpDogJyVzJyIKKworIzogc2V0dXAuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyAlcyIKK21zZ3N0ciAiJXPsnYQo66W8KSDsnb3ripTrjbAg7Jik66WYIgorCisjOiBzZXR1cC5jOjUzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGdpdGZpbGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAi6rmD7YyM7J28IO2YleyLneydtCDsnpjrqrvrkJjsl4jsirXri4jri6Q6ICVzIgorCisjOiBzZXR1cC5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBwYXRoIGluIGdpdGZpbGU6ICVzIgorbXNnc3RyICLquYPtjIzsnbzsl5Ag6rK966Gc6rCAIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IHNldHVwLmM6NTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAi6rmDIOyggOyepeyGjOqwgCDslYTri5nri4jri6Q6ICVzIgorCisjOiBzZXR1cC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICInJCVzJyB0b28gYmlnIgorbXNnc3RyICInJCVzJ+ydtCjqsIApIOuEiOustCDtgb3ri4jri6QiCisKKyM6IHNldHVwLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAnJXMnIgorbXNnc3RyICLquYMg7KCA7J6l7IaM6rCAIOyVhOuLmeuLiOuLpDogJyVzJyIKKworIzogc2V0dXAuYzo2ODIgc2V0dXAuYzo2ODQgc2V0dXAuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICclcyciCittc2dzdHIgIiclcyfsl5Ag64yA7ZW0IGNoZGly66W8IO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXR1cC5jOjY4NyBzZXR1cC5jOjc0MyBzZXR1cC5jOjc1MyBzZXR1cC5jOjc5MiBzZXR1cC5jOjgwMCBzZXR1cC5jOjgxNQorbXNnaWQgImNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICLtmITsnqwg65SU66CJ7YSw66as66GcIOuPjOyVhOyYrCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXR1cC5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMpOiAlcyIKK21zZ3N0ciAiKO2YhOyerCDtj7TrjZQg65iQ64qUIOyDgeychCDtj7TrjZQg7KSRIOydvOu2gOqwgCkg6rmDIOyggOyepeyGjOqwgCDslYTri5nri4jri6Q6ICVzIgorCisjOiBzZXR1cC5jOjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJSpzJXMlcyciCittc2dzdHIgIiclKnMlcyVzJ+yXkCDrjIDtlbQgc3RhdCgp7J20IOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogc2V0dXAuYzoxMDU0Cittc2dpZCAiVW5hYmxlIHRvIHJlYWQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi7ZiE7J6sIOyekeyXhSDrlJTroInthLDrpqzrpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNldHVwLmM6MTA2NiBzZXR1cC5jOjEwNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoYW5nZSB0byAnJXMnIgorbXNnc3RyICInJXMn7JeQIOuMgO2VtCDrs4Dqsr0g7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNldHVwLmM6MTA4NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisiU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS4iCittc2dzdHIgIiIKKyIo7ZiE7J6sIO2PtOuNlCDrmJDripQg7IOB7JyEIO2PtOuNlCDrtoDthLAg66eI7Jq07Yq4IOychOy5mCAlcyDquYzsp4Ag7J2867aA6rCAKSDquYMg7KCA7J6l7IaM6rCAIOyVhOuLmeuLiCIKKyLri6RcbiIKKyLtjIzsnbwg7Iuc7Iqk7YWcIOqyveqzhOyXkOyEnCDspJHsp4Dtlanri4jri6QuIChHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNIOyEpOygleuQmOyngCDslYoiCisi7J2MKSIKKworIzogc2V0dXAuYzoxMTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwcm9ibGVtIHdpdGggY29yZS5zaGFyZWRSZXBvc2l0b3J5IGZpbGVtb2RlIHZhbHVlICgwJS4zbykuXG4iCisiVGhlIG93bmVyIG9mIGZpbGVzIG11c3QgYWx3YXlzIGhhdmUgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMuIgorbXNnc3RyICIiCisiY29yZS5zaGFyZWRSZXBvc2l0b3J5IO2MjOydvOuqqOuTnCDqsJLsl5AgKDAlLjNvKSDrrLjsoJzqsIAg7J6I7Iq164uI64ukLlxuIgorIu2MjOydvOydmCDshozsnKDsnpDsl5Ag7J296riw7JmAIOyTsOq4sCDqtoztlZzsnbQg7J6I7Ja07JW8IO2VqeuLiOuLpC4iCisKKyM6IHNldHVwLmM6MTIxMQorbXNnaWQgIm9wZW4gL2Rldi9udWxsIG9yIGR1cCBmYWlsZWQiCittc2dzdHIgIi9kZXYvbnVsbCDsl7TquLAg65iQ64qUIGR1cCgp7J20IOyLpO2MqCIKKworIzogc2V0dXAuYzoxMjI2Cittc2dpZCAiZm9yayBmYWlsZWQiCittc2dzdHIgImZvcmsg7Iuk7YyoIgorCisjOiBzZXR1cC5jOjEyMzEKK21zZ2lkICJzZXRzaWQgZmFpbGVkIgorbXNnc3RyICJzZXRzaWQg7Iuk7YyoIgorCisjOiBzaGExLWZpbGUuYzo2MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICInJXMnIOqyveuhnOqwgCDsl4bsirXri4jri6QiCisKKyM6IHNoYTEtZmlsZS5jOjY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGFzIGEgbGlua2VkIGNoZWNrb3V0IGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiIKK21zZ3N0ciAiIgorIuugiO2NvOufsOyKpCAnJXMnIOyggOyepeyGjOulvCDsl7DqsrDrkJwg7LK07YGs7JWE7JuD7Jy866GcIOyTsOq4sOuKlCDslYTsp4Eg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpC4iCisKKyM6IHNoYTEtZmlsZS5jOjY1NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICLroIjtjbzrn7DsiqQgJyVzJyDsoIDsnqXshozqsIAg66Gc7LusIOyggOyepeyGjOqwgCDslYTri5nri4jri6QuIgorCisjOiBzaGExLWZpbGUuYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBzaGFsbG93IgorbXNnc3RyICLroIjtjbzrn7DsiqQgJyVzJyDsoIDsnqXshozqsIAg7JaV7J2AIOyggOyepeyGjOyeheuLiOuLpCIKKworIzogc2hhMS1maWxlLmM6NjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgZ3JhZnRlZCIKK21zZ3N0ciAi66CI7Y2865+w7IqkICclcycg7KCA7J6l7IaM6rCAIOq3uOuemO2UhO2KuOuhnCDrtpnsnYAg7KCA7J6l7IaM7J6F64uI64ukIgorCisjOiBzaGExLW5hbWUuYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgU0hBMSAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIuynp+ydgCBTSEExICVz7J2AKOuKlCkg7Jes65+/7JeQIOuMgOydkeuQqeuLiOuLpCIKKworIzogc2hhMS1uYW1lLmM6NDUzCittc2dpZCAiVGhlIGNhbmRpZGF0ZXMgYXJlOiIKK21zZ3N0ciAi7ZuE67O064qUIOuLpOydjOqzvCDqsJnsirXri4jri6Q6IgorCisjOiBzaGExLW5hbWUuYzo2OTUKK21zZ2lkICIiCisiR2l0IG5vcm1hbGx5IG5ldmVyIGNyZWF0ZXMgYSByZWYgdGhhdCBlbmRzIHdpdGggNDAgaGV4IGNoYXJhY3RlcnNcbiIKKyJiZWNhdXNlIGl0IHdpbGwgYmUgaWdub3JlZCB3aGVuIHlvdSBqdXN0IHNwZWNpZnkgNDAtaGV4LiBUaGVzZSByZWZzXG4iCisibWF5IGJlIGNyZWF0ZWQgYnkgbWlzdGFrZS4gRm9yIGV4YW1wbGUsXG4iCisiXG4iCisiICBnaXQgY2hlY2tvdXQgLWIgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisid2hlcmUgXCIkYnJcIiBpcyBzb21laG93IGVtcHR5IGFuZCBhIDQwLWhleCByZWYgaXMgY3JlYXRlZC4gUGxlYXNlXG4iCisiZXhhbWluZSB0aGVzZSByZWZzIGFuZCBtYXliZSBkZWxldGUgdGhlbS4gVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5XG4iCisicnVubmluZyBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiCittc2dzdHIgIiIKKyLquYPsl5DshJzripQg67O07Ya1IDQw6rCc7J2YIDE27KeE7IiYIOusuOyekOuhnCDrgZ3rgpjripQg66CI7Y2865+w7Iqk66W8IOunjOuTpOyngCDslYrsirXri4jri6QuXG4iCisiMTbsp4TsiJgg66y47J6QIDQw7J6Q66W8IOyngOygle2WiOydhCDrlYwg7J20IOugiO2NvOufsOyKpOqwgCDrrLTsi5zrkJjquLAg65WM66y47J6F64uI64ukLiDsnbRcbiIKKyLroIjtjbzrn7DsiqTripQg7Iuk7IiY66GcIOunjOuTpOyWtOyhjOydhCDsiJjrj4Qg7J6I7Iq164uI64ukLiDsmIjrpbwg65Ok7Ja0LFxuIgorIlxuIgorIiAgZ2l0IGNoZWNrb3V0IC1iICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorIlxuIgorIuyXrOq4sOyEnCBcIiRiclwi7J2AIOu5hOyWtCDsnojsnLzrr4DroZwgNDDsnpAg66CI7Y2865+w7Iqk6rCAIOunjOuTpOyWtOynkeuLiOuLpC4g7J20IOugiO2NvOufsOyKpOulvFxuIgorIu2ZleyduO2VtCDrs7Tsi5zqs6Ag7J6Y66q7IOunjOuTpOyWtOynhCDqsoPsnbTrqbQg7KeA7Jqw7Iut7Iuc7JikLiDsnbQg66mU7Iuc7KeA66W8IOuztOqzoCDsi7bsp4BcbiIKKyLslYrsnLzrqbQgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIOuqheugueydhCDsgqzsmqntlZjsi63si5zsmKQuIgorCisjOiBzdWJtb2R1bGUuYzo5NyBzdWJtb2R1bGUuYzoxMzEKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAiIgorIuuzke2Vqe2VmOyngCDslYrsnYAgLmdpdG1vZHVsZXPrpbwg67CU6r+AIOyImCDsl4bsirXri4jri6QuIOuzke2VqSDstqnrj4zsnYQg66i87KCAIO2VtOqysO2VmOyLreyLnOyYpCIKKworIzogc3VibW9kdWxlLmM6MTAxIHN1Ym1vZHVsZS5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0aW9uIGluIC5naXRtb2R1bGVzIHdoZXJlIHBhdGg9JXMiCittc2dzdHIgIuqyveuhnOqwgCAlc+ydvCDrlYwgLmdpdG1vZHVsZXPsnZgg7IS57IWY7J2EIOywvuydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzdWJtb2R1bGUuYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSAuZ2l0bW9kdWxlcyBlbnRyeSAlcyIKK21zZ3N0ciAiLmdpdG1vZHVsZXMg7ZWt66qpICVz7J2EKOulvCkg7JeF642w7J207Yq47ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHN1Ym1vZHVsZS5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIC5naXRtb2R1bGVzIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiJXPsl5Ag64yA7ZWcIC5naXRtb2R1bGVzIO2VreuqqeydhCDsoJzqsbDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc3VibW9kdWxlLmM6MTUzCittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAi7JeF642w7J207Yq47ZWcIC5naXRtb2R1bGVz66W8IOy7pOuwi+2VoCDsgqztla3snLzroZwg7ZGc7Iuc7ZWY64qU642wIOyLpO2MqCIKKworIzogc3VibW9kdWxlLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLrgrTsmqnsnbQg7JeG64qUIO2VmOychCDrqqjrk4ggJyVzJ+yXkOyEnCIKKworIzogc3VibW9kdWxlLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAi6rK966Gc66qF7IS4ICclcyfsnYAo64qUKSAnJyUuKnMnIO2VmOychCDrqqjrk4gg7JWI7JeQIOyeiOyKteuLiOuLpCIKKworIzogc3VibW9kdWxlLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSBlbnRyeSAnJXMnICglcykgaXMgYSAlcywgbm90IGEgY29tbWl0IgorbXNnc3RyICLshJzruIzrqqjrk4gg7ZWt66qpICclcycoJXMp7J2AKOuKlCkgJXPsnbTqs6AsIOy7pOuwi+ydtCDslYTri5nri4jri6QiCisKKyM6IHN1Ym1vZHVsZS5jOjEwNjkgYnVpbHRpbi9icmFuY2guYzo2NTEgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE3NDMKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiSEVBROulvCDsmKzrsJTrpbgg66CI7Y2865+w7Iqk66GcIOq1rO2VtOuCtOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QuIgorCisjOiBzdWJtb2R1bGUuYzoxMzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbm90IHJlY29nbml6ZWQgYXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJyVzJ+ydgCjripQpIOq5gyDsoIDsnqXshozroZwg7J247Iud65CY7KeAIOyViuyKteuLiOuLpCIKKworIzogc3VibW9kdWxlLmM6MTUxMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLtlZjsnIQg66qo65OIICclcyfsl5DshJwgJ2dpdCBzdGF0dXMn66W8IOyLnOyeke2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzdWJtb2R1bGUuYzoxNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLtlZjsnIQg66qo65OIICclcyfsl5DshJwgJ2dpdCBzdGF0dXMn66W8IOyLpO2Wie2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzdWJtb2R1bGUuYzoxNjE5CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGhhcyBkaXJ0eSBpbmRleCIKK21zZ3N0ciAiJyVzJyDtlZjsnIQg66qo65OI7JeQIOuzgOqyveuQnCDsnbjrjbHsiqTqsIAg7J6I7Iq164uI64ukIgorCisjOiBzdWJtb2R1bGUuYzoxNzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJyZWxvY2F0ZV9naXRkaXIgZm9yIHN1Ym1vZHVsZSAnJXMnIHdpdGggbW9yZSB0aGFuIG9uZSB3b3JrdHJlZSBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisi7Jes65+sIOqwnOydmCDsnpHsl4Ug7Y+0642U6rCAIOyeiOuKlCDtlZjsnIQg66qo65OIICclcyfsl5Ag64yA7ZW0IHJlbG9jYXRlX2dpdGRpcuydgCDsp4Dsm5DtlZjsp4AgIgorIuyViuyKteuLiOuLpCIKKworIzogc3VibW9kdWxlLmM6MTczMCBzdWJtb2R1bGUuYzoxNzg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgbmFtZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIu2VmOychCDrqqjrk4ggJyVzJ+ydmCDsnbTrpoTsnYQg7LC+7JWE67O8IOyImCDsl4bsirXri4jri6QiCisKKyM6IHN1Ym1vZHVsZS5jOjE3MzQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyNjEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIiclcycg65SU66CJ7YSw66as66W8IOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzdWJtb2R1bGUuYzoxNzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNaWdyYXRpbmcgZ2l0IGRpcmVjdG9yeSBvZiAnJXMlcycgZnJvbVxuIgorIiclcycgdG9cbiIKKyInJXMnXG4iCittc2dzdHIgIiIKKyInJXMlcyfsnZgg6rmDIOuUlOugie2EsOumrOulvCDsmK7quYHri4jri6Q6XG4iCisiJyVzJ+yXkOyEnFxuIgorIiclcyco7Jy8KeuhnFxuIgorCisjOiBzdWJtb2R1bGUuYzoxODIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgIuyerOq3gOyggeycvOuhnCAnJXMnIO2VmOychCDrqqjrk4jsl5Ag65Ok7Ja06rCIIOyImCDsl4bsirXri4jri6QiCisKKyM6IHN1Ym1vZHVsZS5jOjE4NjUKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgbHMtZmlsZXMgaW4gLi4iCittc2dzdHIgIicuLicg7JWI7JeQ7IScIGxzLWZpbGVz66W8IOyLnOyeke2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzdWJtb2R1bGUuYzoxOTA0CisjLCBjLWZvcm1hdAorbXNnaWQgImxzLXRyZWUgcmV0dXJuZWQgdW5leHBlY3RlZCByZXR1cm4gY29kZSAlZCIKK21zZ3N0ciAibHMtdHJlZeqwgCDsmIjsg4HsuZgg66q77ZWcIOy9lOuTnCAlZOuyiOydhCDrpqzthLTtlojsirXri4jri6QiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgc3VzcGljaW91cyBzdWJtb2R1bGUgbmFtZTogJXMiCittc2dzdHIgIuydmOyLrOyKpOufrOyatCDtlZjsnIQg66qo65OIIOydtOumhOydhCDrrLTsi5ztlanri4jri6Q6ICVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6Mjk0Cittc2dpZCAibmVnYXRpdmUgdmFsdWVzIG5vdCBhbGxvd2VkIGZvciBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorbXNnc3RyICJzdWJtb2R1bGUuZmV0Y2hqb2JzIOqwkuyXkCDsnYzsiJjrpbwg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgIiVz7J2YIOqwkuydtCDsmKzrsJTrpbTsp4Ag7JWK7Iq164uI64ukIgorCisjOiB0cmFpbGVyLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgdHJhaWxlciBjb21tYW5kICclcycgZmFpbGVkIgorbXNnc3RyICLtirjroIjsnbzrn6wg66qF66C5ICclcycg7Iuk7ZaJIOyLpO2MqCIKKworIzogdHJhaWxlci5jOjQ4NSB0cmFpbGVyLmM6NDkwIHRyYWlsZXIuYzo0OTUgdHJhaWxlci5jOjU0OSB0cmFpbGVyLmM6NTUzCisjOiB0cmFpbGVyLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgJyVzJyBmb3Iga2V5ICclcyciCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIOqwkiAnJXMnLCDtgqQgJyVzJyIKKworIzogdHJhaWxlci5jOjUzOSB0cmFpbGVyLmM6NTQ0IGJ1aWx0aW4vcmVtb3RlLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgIiVz7J20KOqwgCkg7Jes65+s6rCc7J6F64uI64ukIgorCisjOiB0cmFpbGVyLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHRyYWlsZXIgdG9rZW4gaW4gdHJhaWxlciAnJS4qcyciCittc2dzdHIgIu2KuOugiOydvOufrCAnJS4qcyfsl5DshJwg67mIIO2KuOugiOydvOufrCDthqDtgbAiCisKKyM6IHRyYWlsZXIuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAnJXMnIgorbXNnc3RyICInJXMnIOyeheugpSDtjIzsnbzsnYQg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IHRyYWlsZXIuYzo3NTMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICLtkZzspIAg7J6F66Cl7JeQ7IScIOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiB0cmFpbGVyLmM6MTAwOCBidWlsdGluL2FtLmM6NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJXMiCittc2dzdHIgIiVz7JeQIOuMgO2VtCBzdGF0KCntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogdHJhaWxlci5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUiCittc2dzdHIgIiclcycg7YyM7J287J20IOydvOuwmCDtjIzsnbzsnbQg7JWE64uZ64uI64ukIgorCisjOiB0cmFpbGVyLmM6MTAxMgorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCB3cml0YWJsZSBieSB1c2VyIgorbXNnc3RyICLsgqzsmqnsnpDqsIAgJXMg7YyM7J287JeQIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiB0cmFpbGVyLmM6MTAyNAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICLsnoTsi5wg7YyM7J287J2EIOyXtCDsiJgg7JeG7Iq164uI64ukOiAlcyIKKworIzogdHJhaWxlci5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSB0ZW1wb3JhcnkgZmlsZSB0byAlcyIKK21zZ3N0ciAi7J6E7IucIO2MjOydvCDsnbTrpoTsnYQgJyVzJyjsnLwp66GcIOuwlOq/gCDsiJgg7JeG7Iq164uI64ukIgorCisjOiB0cmFuc3BvcnQuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2V0IHVwc3RyZWFtIG9mICclcycgdG8gJyVzJyBvZiAnJXMnXG4iCittc2dzdHIgIiclMSRzJ+ydmCDsl4XsiqTtirjrprzsnYQgJyUzJHMn7J2YICclMiRzJyjsnLwp66GcIOyEpOygle2VqeuLiOuLpFxuIgorCisjOiB0cmFuc3BvcnQuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0OiBpbnZhbGlkIGRlcHRoIG9wdGlvbiAnJXMnIgorbXNnc3RyICJ0cmFuc3BvcnQ6IOyemOuqu+uQnCDquYrsnbQg7Ji17IWYOiAlcyIKKworIzogdHJhbnNwb3J0LmM6NTg0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHRyYW5zcG9ydC5jb2xvci4qIGNvbmZpZyIKK21zZ3N0ciAidHJhbnNwb3J0LmNvbG9yLiog7ISk7KCV7J2EIO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiB0cmFuc3BvcnQuYzo5OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgc3VibW9kdWxlIHBhdGhzIGNvbnRhaW4gY2hhbmdlcyB0aGF0IGNhblxuIgorIm5vdCBiZSBmb3VuZCBvbiBhbnkgcmVtb3RlOlxuIgorbXNnc3RyICIiCisi64uk7J2MIO2VmOychCDrqqjrk4gg6rK966Gc7JeQIOumrOuqqO2KuCDslrTrlJTsl5Drj4Qg7JeG64qUXG4iCisi67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6Q6XG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBsZWFzZSB0cnlcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisidG8gcHVzaCB0aGVtIHRvIGEgcmVtb3RlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisi66as66qo7Yq47JeQIO2RuOyLnO2VmOugpOuptFxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisi65iQ64qUIO2VtOuLuSDqsr3roZzroZwgY2TtlZwg64uk7J2MXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorIuuqheugueydhCDsi5zrj4TtlbQg67O07Iut7Iuc7JikXG4iCisiXG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwMDgKK21zZ2lkICJBYm9ydGluZy4iCittc2dzdHIgIuykkeyngO2VqC4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHJlZiAlcyIKK21zZ3N0ciAiJXMg66CI7Y2865+w7Iqk66W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiB0cmVlLXdhbGsuYzozMQorbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAi64SI66y0IOynp+ydgCDtirjrpqwg7Jik67iM7KCd7Yq4IgorCisjOiB0cmVlLXdhbGsuYzozNworbXNnaWQgIm1hbGZvcm1lZCBtb2RlIGluIHRyZWUgZW50cnkiCittc2dzdHIgIu2KuOumrCDsl5Ttirjrpqzsl5Ag7J6Y66q765CcIO2YleyLneydmCDrqqjrk5wiCisKKyM6IHRyZWUtd2Fsay5jOjQxCittc2dpZCAiZW1wdHkgZmlsZW5hbWUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAi7Yq466asIOyXlO2KuOumrOyXkCDruYgg7YyM7J28IOydtOumhCIKKworIzogdHJlZS13YWxrLmM6MTEzCittc2dpZCAidG9vLXNob3J0IHRyZWUgZmlsZSIKK21zZ3N0ciAi64SI66y0IOynp+ydgCDtirjrpqwg7YyM7J28IgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisi64uk7J2MIO2MjOydvOydmCDroZzsu6wg67OA6rK9IOyCrO2VreydhCDssrTtgazslYTsm4Mg65WM66y47JeQIOuNruyWtCDsk7Dqsowg65Cp64uI64ukOlxuIgorIiUlc+u4jOuenOy5mOulvCDsoITtmZjtlZjquLAg7KCE7JeQIOuzgOqyvSDsgqztla3snYQg7Luk67CL7ZWY6rGw64KYIOyKpO2DnOyLnO2VmOyLreyLnOyYpC4iCisKKyM6IHVucGFjay10cmVlcy5jOjExMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisi64uk7J2MIO2MjOydvOydmCDroZzsu6wg67OA6rK9IOyCrO2VreydhCDssrTtgazslYTsm4Mg65WM66y47JeQIOuNruyWtCDsk7Dqsowg65Cp64uI64ukOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi64uk7J2MIO2MjOydvOydmCDroZzsu6wg67OA6rK9IOyCrO2VreydhCDrs5Htlakg65WM66y47JeQIOuNruyWtCDsk7Dqsowg65Cp64uI64ukOlxuIgorIiUlc+uzke2Vqe2VmOq4sCDsoITsl5Ag67OA6rK9IOyCrO2VreydhCDsu6TrsIvtlZjqsbDrgpgg7Iqk7YOc7Iuc7ZWY7Iut7Iuc7JikLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIuuLpOydjCDtjIzsnbzsnZgg66Gc7LusIOuzgOqyvSDsgqztla3snYQg67OR7ZWpIOuVjOusuOyXkCDrja7slrQg7JOw6rKMIOuQqeuLiOuLpC4iCisKKyM6IHVucGFjay10cmVlcy5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIuuLpOydjCDtjIzsnbzsnZgg66Gc7LusIOuzgOqyvSDsgqztla3snYQgJXMg65WM66y47JeQIOuNruyWtCDsk7Dqsowg65Cp64uI64ukOlxuIgorIiUlcyVzIOyghOyXkCDrs4Dqsr0g7IKs7ZWt7J2EIOy7pOuwi+2VmOqxsOuCmCDsiqTtg5zsi5ztlZjsi63si5zsmKQuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuuLpOydjCDtjIzsnbzsnZgg66Gc7LusIOuzgOqyvSDsgqztla3snYQgJXMg65WM66y47JeQIOuNruyWtCDsk7Dqsowg65Cp64uI64ukOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIHRoZW06XG4iCisiJXMiCittc2dzdHIgIiIKKyLri6TsnYwg65SU66CJ7YSw66as66W8IOyXheuNsOydtO2KuO2VmOuptCDqt7gg7JWI7J2YIOy2lOygge2VmOyngCDslYrripQg7YyM7J287J2EIOyeg+yWtOuyhOumveuLiOuLpDpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyLssrTtgazslYTsm4Mg65WM66y47JeQIOy2lOygge2VmOyngCDslYrripQg64uk7J2MIOyekeyXhSDtj7TrjZTsnZgg7YyM7J287J20IOygnOqxsOuQqeuLiOuLpDpcbiIKKyIlJXPruIzrnpzsuZjrpbwg7KCE7ZmY7ZWY6riwIOyghOyXkCDsnbQg7YyM7J287J2EIOyYruq4sOqxsOuCmCDsoJzqsbDtlZjsi63si5zsmKQuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuyytO2BrOyVhOybgyDrlYzrrLjsl5Ag7LaU7KCB7ZWY7KeAIOyViuuKlCDri6TsnYwg7J6R7JeFIO2PtOuNlCDtjIzsnbzsnbQg7KCc6rGw65Cp64uI64ukOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIuuzke2VqSDrlYzrrLjsl5Ag7LaU7KCB7ZWY7KeAIOyViuuKlCDri6TsnYwg7J6R7JeFIO2PtOuNlOydmCDtjIzsnbzsnbQg7KCc6rGw65Cp64uI64ukOlxuIgorIiUlc+uzke2Vqe2VmOq4sCDsoITsl5Ag7J20IO2MjOydvOydhCDsmK7quLDqsbDrgpgg7KCc6rGw7ZWY7Iut7Iuc7JikLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLrs5Htlakg65WM66y47JeQIOy2lOygge2VmOyngCDslYrripQg64uk7J2MIOyekeyXhSDtj7TrjZQg7YyM7J287J20IOygnOqxsOuQqeuLiOuLpDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyIlcyDrlYzrrLjsl5Ag7LaU7KCB7ZWY7KeAIOyViuuKlCDri6TsnYwg7J6R7JeFIO2PtOuNlOydmCDtjIzsnbzsnbQg7KCc6rGw65Cp64uI64ukOlxuIgorIiUlcyVzIO2VmOq4sCDsoITsl5Ag7J20IO2MjOydvOydhCDsmK7quLDqsbDrgpgg7KCc6rGw7ZWY7Iut7Iuc7JikLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyIlcyDrlYzrrLjsl5Ag7LaU7KCB7ZWY7KeAIOyViuuKlCDri6TsnYwg7J6R7JeFIO2PtOuNlCDtjIzsnbzsnbQg7KCc6rGw65Cp64uI64ukOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIuyytO2BrOyVhOybgyDrlYzrrLjsl5Ag7LaU7KCB7ZWY7KeAIOyViuuKlCDri6TsnYwg7J6R7JeFIO2PtOuNlOydmCDtjIzsnbzsnYQg642u7Ja07JSB64uI64ukOlxuIgorIiUlc+u4jOuenOy5mOulvCDsoITtmZjtlZjquLAg7KCE7JeQIOydtCDtjIzsnbzsnYQg7Jiu6riw6rGw64KYIOygnOqxsO2VmOyLreyLnOyYpC4iCisKKyM6IHVucGFjay10cmVlcy5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLssrTtgazslYTsm4Mg65WM66y47JeQIOy2lOygge2VmOyngCDslYrripQg64uk7J2MIOyekeyXhSDtj7TrjZQg7YyM7J287J2EIOuNruyWtOyUgeuLiOuLpDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi67OR7ZWpIOuVjOusuOyXkCDstpTsoIHtlZjsp4Ag7JWK64qUIOuLpOydjCDsnpHsl4Ug7Y+0642U7J2YIO2MjOydvOydhCDrja7slrTslIHri4jri6Q6XG4iCisiJSVz67OR7ZWp7ZWY6riwIOyghOyXkCDsnbQg7YyM7J287J2EIOyYruq4sOqxsOuCmCDsoJzqsbDtlZjsi63si5zsmKQuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLrs5Htlakg65WM66y47JeQIOy2lOygge2VmOyngCDslYrripQg64uk7J2MIOyekeyXhSDtj7TrjZQg7YyM7J287J2EIOuNruyWtOyUgeuLiOuLpDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiJXMg65WM66y47JeQIOy2lOygge2VmOyngCDslYrripQg64uk7J2MIOyekeyXhSDtj7TrjZTsnZgg7YyM7J287J2EIOuNruyWtOyUgeuLiOuLpDpcbiIKKyIlJXMlcyDtlZjquLAg7KCE7JeQIOydtCDtjIzsnbzsnYQg7Jiu6riw6rGw64KYIOygnOqxsO2VmOyLreyLnOyYpC4iCisKKyM6IHVucGFjay10cmVlcy5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIiVzIOuVjOusuOyXkCDstpTsoIHtlZjsp4Ag7JWK64qUIOuLpOydjCDsnpHsl4Ug7Y+0642UIO2MjOydvOydhCDrja7slrTslIHri4jri6Q6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50cnkgJyVzJyBvdmVybGFwcyB3aXRoICclcycuICBDYW5ub3QgYmluZC4iCittc2dzdHIgIiclcycg7ZWt66qp7J20ICclcyfsmYAo6rO8KSDqsrnsuanri4jri6QuICDrrLbsnYQg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IHVucGFjay10cmVlcy5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBzcGFyc2UgY2hlY2tvdXQ6IHRoZSBmb2xsb3dpbmcgZW50cmllcyBhcmUgbm90IHVwIHRvIGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyLrk5zrrLgg7LK07YGs7JWE7JuD7J2EIOyXheuNsOydtO2KuO2VoCDsiJgg7JeG7Iq164uI64ukLiDri6TsnYwg7ZWt66qp7J20IOy1nOyLoOycvOuhnCDsl4XrjbDsnbTtirjrkJjsp4Ag7JWKIgorIuyVmOyKteuLiOuLpDpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuuTnOusuCDssrTtgazslYTsm4Mg7JeF642w7J207Yq4IOuVjOusuOyXkCDstpTsoIHtlZjsp4Ag7JWK64qUIOuLpOydjCDsnpHsl4Ug7Y+0642UIO2MjOydvOydhCDrja7slrTslIHri4giCisi64ukOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgc3BhcnNlIGNoZWNrb3V0ICIKKyJ1cGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyLrk5zrrLgg7LK07YGs7JWE7JuDIOyXheuNsOydtO2KuCDrlYzrrLjsl5Ag7LaU7KCB7ZWY7KeAIOyViuuKlCDri6TsnYwg7J6R7JeFIO2PtOuNlCDtjIzsnbzsnYQg7KCc6rGw7ZWp64uIIgorIuuLpDpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHN1Ym1vZHVsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIu2VmOychCDrqqjrk4jsnYQgIOyXheuNsOydtO2KuO2VoCDsiJgg7JeG7Iq164uI64ukOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmdcbiIKK21zZ3N0ciAi7KSR7KeA7ZWoXG4iCisKKyM6IHVucGFjay10cmVlcy5jOjM0NAorbXNnaWQgIkNoZWNraW5nIG91dCBmaWxlcyIKK21zZ3N0ciAi7YyM7J287J2EIOqwgOyguOyYteuLiOuLpCIKKworIzogdXJsbWF0Y2guYzoxNjMKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAiVVJMIOyKpO2CtCDsnbTrpoTsnbQg7J6Y66q765CY7JeI6rGw64KYICc6Ly8n6rCAIOuSpOyXkCDrtpnsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiB1cmxtYXRjaC5jOjE4NyB1cmxtYXRjaC5jOjM0NiB1cmxtYXRjaC5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgIuyemOuqu+uQnCAlWFgg7J207Iqk7LyA7J207ZSEIOyLnO2AgOyKpCIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAi7Zi47Iqk7Yq46rCAIOyXhuqzoCDsiqTtgrTsnbQgJ2ZpbGU6J+ydtCDslYTri5nri4jri6QiCisKKyM6IHVybG1hdGNoLmM6MjMyCittc2dpZCAiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIKK21zZ3N0ciAiJ2ZpbGU6JyBVUkzsl5DripQg7Y+s7Yq4IOuyiO2YuOulvCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICLtmLjsiqTtirgg7J2066aE7JeQIOyemOuqu+uQnCDrrLjsnpAiCisKKyM6IHVybG1hdGNoLmM6MjkyIHVybG1hdGNoLmM6MzAzCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAi7J6Y66q765CcIO2PrO2KuCDrsojtmLgiCisKKyM6IHVybG1hdGNoLmM6MzcxCittc2dpZCAiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIKK21zZ3N0ciAi6rK966Gc7JeQ7IScIOyemOuqu+uQnCAnLi4nIOu2gOu2hCIKKworIzogd29ya3RyZWUuYzoyNDUgYnVpbHRpbi9hbS5jOjIxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOydveuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IHdvcmt0cmVlLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXQgbWFpbiB3b3JraW5nIHRyZWUgaXMgbm90IHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSIKK21zZ3N0ciAi66mU7J24IOyekeyXhSDtj7TrjZTsnZggJyVzJ+ydgCjripQpIOyggOyepeyGjCDrlJTroInthLDrpqzqsIAg7JWE64uZ64uI64ukIgorCisjOiB3b3JrdHJlZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbGUgZG9lcyBub3QgY29udGFpbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB3b3JraW5nIHRyZWUgbG9jYXRpb24iCittc2dzdHIgIiclcycg7YyM7J287J2AIOyekeyXhSDtj7TrjZQg7JyE7LmY7J2YIOygiOuMgCDqsr3roZzrpbwg6rCA7KeA7KeAIOyViuyKteuLiOuLpCIKKworIzogd29ya3RyZWUuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiJyVzJ+ydtCjqsIApIOyXhuyKteuLiOuLpCIKKworIzogd29ya3RyZWUuYzozMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSAuZ2l0IGZpbGUsIGVycm9yIGNvZGUgJWQiCittc2dzdHIgIiclcyfsnYAo64qUKSAuZ2l0IO2MjOydvOydtCDslYTri5nri4jri6QsIOyDge2DnCDsvZTrk5zqsIAgJWQg7J6F64uI64ukIgorCisjOiB3b3JrdHJlZS5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IGJhY2sgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJ+ydgCjripQpICclcyfsnYQo66W8KSDqsIDrpqztgqTsp4Ag7JWK7Iq164uI64ukIgorCisjOiB3cmFwcGVyLmM6MjIzIHdyYXBwZXIuYzozOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyIKK21zZ3N0ciAi7J296riw7JmAIOyTsOq4sOyaqeycvOuhnCAnJXMn7J2EKOulvCkg7Je0IOyImCDsl4bsirXri4jri6QiCisKKyM6IHdyYXBwZXIuYzoyMjcgd3JhcHBlci5jOjM5NyBidWlsdGluL2FtLmM6MzIwIGJ1aWx0aW4vYW0uYzo3NzAKKyM6IGJ1aWx0aW4vYW0uYzo4NjIgYnVpbHRpbi9tZXJnZS5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOydveq4sOyaqeycvOuhnCDsl7Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogd3JhcHBlci5jOjQyNCB3cmFwcGVyLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkCDsoJHqt7ztlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogd3JhcHBlci5jOjYzMgorbXNnaWQgInVuYWJsZSB0byBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi7ZiE7J6sIOyekeyXhSDrlJTroInthLDrpqzrpbwg6rCA7KC47JisIOyImCDsl4bsirXri4jri6QiCisKKyM6IHd0LXN0YXR1cy5jOjE1NAorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAi67OR7ZWp7ZWY7KeAIOyViuydgCDqsr3roZw6IgorCisjOiB3dC1zdGF0dXMuYzoxODEgd3Qtc3RhdHVzLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXNldCAlcyA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAo7Iqk7YWM7J207KeAIO2VtOygnO2VmOugpOuptCBcImdpdCByZXNldCAlcyA87YyM7J28Pi4uLlwi7J2EIOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjE4MyB3dC1zdGF0dXMuYzoyMTAKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAgKOyKpO2FjOydtOyngCDtlbTsoJztlZjroKTrqbQgXCJnaXQgcm0gLS1jYWNoZWQgPO2MjOydvD4uLi5cIuydhCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxODcKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKO2VtOqysO2WiOuLpOqzoCDtkZzsi5ztlZjroKTrqbQgXCJnaXQgYWRkIDztjIzsnbw+Li4uXCLsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTg5IHd0LXN0YXR1cy5jOjE5MworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorIiAgKO2VtOqysO2WiOuLpOqzoCDtkZzsi5ztlZjroKTrqbQg7JWM66ee6rKMIFwiZ2l0IGFkZC9ybSA87YyM7J28Pi4uLlwi7J2EIOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjE5MQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgICjtlbTqsrDtlojri6Tqs6Ag7ZGc7Iuc7ZWY66Ck66m0IFwiZ2l0IHJtIDztjIzsnbw+Li4uXCLsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MjAyIHd0LXN0YXR1cy5jOjEwMTUKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIuy7pOuwi+2VoCDrs4Dqsr0g7IKs7ZWtOiIKKworIzogd3Qtc3RhdHVzLmM6MjIwIHd0LXN0YXR1cy5jOjEwMjQKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIuy7pOuwi+2VmOuPhOuhnSDsoJXtlZjsp4Ag7JWK7J2AIOuzgOqyvSDsgqztla06IgorCisjOiB3dC1zdGF0dXMuYzoyMjQKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAo66y07JeH7J2EIOy7pOuwi+2VoOyngCDrsJTqvrjroKTrqbQgXCJnaXQgYWRkIDztjIzsnbw+Li4uXCLsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MjI2Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiAgKOustOyXh+ydhCDsu6TrsIvtlaDsp4Ag67CU6r6466Ck66m0IFwiZ2l0IGFkZC9ybSA87YyM7J28Pi4uLlwi7J2EIOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjIyNworbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIKK21zZ3N0ciAiIgorIiAgKOyekeyXhSDtj7TrjZTsnZgg67OA6rK9IOyCrO2VreydhCDrsoTrpqzroKTrqbQgXCJnaXQgY2hlY2tvdXQgLS0gPO2MjOydvD4uLi5cIuydhCDsgqzsmqntlZjsi60iCisi7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MjI5Cittc2dpZCAiICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpIgorbXNnc3RyICIiCisiICAo7ZWY7JyEIOuqqOuTiOydmCDstpTsoIHrkJjsp4Ag7JWK64qUIO2MjOydvOydtOuCmCDsiJjsoJXrkJwg64K07Jqp7J2EIOy7pOuwi+2VmOqxsOuCmCDrsoTrpqzsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiAgKOy7pOuwi+2VoCDsgqztla3sl5Ag7Y+s7ZWo7ZWY66Ck66m0IFwiZ2l0ICVzIDztjIzsnbw+Li4uXCLsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MjU2Cittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAi7JaR7Kq97JeQ7IScIOyCreygnDoiCisKKyM6IHd0LXN0YXR1cy5jOjI1OAorbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAi7J20IOyqveyXkOyEnCDstpTqsIA6IgorCisjOiB3dC1zdGF0dXMuYzoyNjAKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICLsoIAg7Kq97JeQ7IScIOyCreygnDoiCisKKyM6IHd0LXN0YXR1cy5jOjI2MgorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICLsoIAg7Kq97JeQ7IScIOy2lOqwgDoiCisKKyM6IHd0LXN0YXR1cy5jOjI2NAorbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICLsnbQg7Kq97JeQ7IScIOyCreygnDoiCisKKyM6IHd0LXN0YXR1cy5jOjI2NgorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICLslpHsqr3sl5DshJwg7LaU6rCAOiIKKworIzogd3Qtc3RhdHVzLmM6MjY4Cittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgIuyWkeyqveyXkOyEnCDsiJjsoJU6IgorCisjOiB3dC1zdGF0dXMuYzoyNzgKK21zZ2lkICJuZXcgZmlsZToiCittc2dzdHIgIuyDiCDtjIzsnbw6IgorCisjOiB3dC1zdGF0dXMuYzoyODAKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICLrs7Xsgqztlag6IgorCisjOiB3dC1zdGF0dXMuYzoyODIKK21zZ2lkICJkZWxldGVkOiIKK21zZ3N0ciAi7IKt7KCc7ZWoOiIKKworIzogd3Qtc3RhdHVzLmM6Mjg0Cittc2dpZCAibW9kaWZpZWQ6IgorbXNnc3RyICLsiJjsoJXtlag6IgorCisjOiB3dC1zdGF0dXMuYzoyODYKK21zZ2lkICJyZW5hbWVkOiIKK21zZ3N0ciAi7J2066aEIOuwlOq/iDoiCisKKyM6IHd0LXN0YXR1cy5jOjI4OAorbXNnaWQgInR5cGVjaGFuZ2U6IgorbXNnc3RyICLsooXrpZgg67CU64CcOiIKKworIzogd3Qtc3RhdHVzLmM6MjkwCittc2dpZCAidW5rbm93bjoiCittc2dzdHIgIuyVjCDsiJgg7JeG7J2MOiIKKworIzogd3Qtc3RhdHVzLmM6MjkyCittc2dpZCAidW5tZXJnZWQ6IgorbXNnc3RyICLrs5HtlantlZjsp4Ag7JWK7J2MOiIKKworIzogd3Qtc3RhdHVzLmM6MzcyCittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAi7IOIIOy7pOuwiywgIgorCisjOiB3dC1zdGF0dXMuYzozNzQKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgIuyImOygle2VnCDrgrTsmqksICIKKworIzogd3Qtc3RhdHVzLmM6Mzc2Cittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAi7LaU7KCB7ZWY7KeAIOyViuydgCDrgrTsmqksICIKKworIzogd3Qtc3RhdHVzLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJpZXMiCittc2dzdHJbMF0gIu2YhOyerCDsiqTtg5zsi5zsl5AgJWTqsJwg7ZWt66qp7J20IOyeiOyKteuLiOuLpCIKKworIzogd3Qtc3RhdHVzLmM6ODg1Cittc2dpZCAiU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoiCittc2dzdHIgIuuzgOqyveuQmOyXiOyngOunjCDsl4XrjbDsnbTtirjtlZjsp4Ag7JWK7J2AIO2VmOychCDrqqjrk4g6IgorCisjOiB3dC1zdGF0dXMuYzo4ODcKK21zZ2lkICJTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICLsu6TrsIvtlaAg7ZWY7JyEIOuqqOuTiOydmCDrs4Dqsr0g7IKs7ZWtOiIKKworIzogd3Qtc3RhdHVzLmM6OTY5Cittc2dpZCAiIgorIkRvIG5vdCBtb2RpZnkgb3IgcmVtb3ZlIHRoZSBsaW5lIGFib3ZlLlxuIgorIkV2ZXJ5dGhpbmcgYmVsb3cgaXQgd2lsbCBiZSBpZ25vcmVkLiIKK21zZ3N0ciAiIgorIuychOydmCDspITsnYQg67CU6r646rGw64KYIOyngOyasOyngCDrp4jsi63si5zsmKQuXG4iCisi7JWE656YIOyeiOuKlCDrgrTsmqnsnYAg66qo65GQIOustOyLnOuQqeuLiOuLpC4iCisKKyM6IHd0LXN0YXR1cy5jOjEwODQKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgIuuzke2Vqe2VmOyngCDslYrsnYAg6rK966Gc6rCAIOyeiOyKteuLiOuLpC4iCisKKyM6IHd0LXN0YXR1cy5jOjEwODcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIgICjstqnrj4zsnYQg67CU66Gc7J6h6rOgIFwiZ2l0IGNvbW1pdFwi7J2EIOyLpO2Wie2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjEwODkKK21zZ2lkICIgICh1c2UgXCJnaXQgbWVyZ2UgLS1hYm9ydFwiIHRvIGFib3J0IHRoZSBtZXJnZSkiCittc2dzdHIgIiAgKOuzke2VqeydhCDspJHri6jtlZjroKTrqbQgXCJnaXQgbWVyZ2UgLS1hYm9ydFwi66W8IOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjEwOTQKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgorbXNnc3RyICLrqqjrk6Ag7Lap64+M7J2EIOuwlOuhnOyeoeyVmOyngOunjCDslYTsp4Eg67OR7ZWp7ZWY64qUIOykkeyeheuLiOuLpC4iCisKKyM6IHd0LXN0YXR1cy5jOjEwOTcKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0XCIgdG8gY29uY2x1ZGUgbWVyZ2UpIgorbXNnc3RyICIgICjrs5HtlansnYQg66eI66y066as7ZWY66Ck66m0IFwiZ2l0IGNvbW1pdFwi7J2EIOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjExMDcKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4iCittc2dzdHIgImFtIOyEuOyFmCDspJHqsITsl5Ag7J6I7Iq164uI64ukLiIKKworIzogd3Qtc3RhdHVzLmM6MTExMAorbXNnaWQgIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAi7ZiE7J6sIO2MqOy5mOqwgCDruYTslrQg7J6I7Iq164uI64ukLiIKKworIzogd3Qtc3RhdHVzLmM6MTExNAorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKOy2qeuPjOydhCDrsJTroZzsnqHsnYAg64uk7J2MIFwiZ2l0IGFtIC0tY29udGludWVcIuulvCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxMTE2Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKOydtCDtjKjsuZjrpbwg6rG064SIIOubsOugpOuptCBcImdpdCBhbSAtLXNraXBcIuydhCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxMTE4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICjsm5Drs7gg67iM656c7LmY66W8IOuzteq1rO2VmOugpOuptCBcImdpdCBhbSAtLWFib3J0XCLrpbwg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTI1MAorbXNnaWQgImdpdC1yZWJhc2UtdG9kbyBpcyBtaXNzaW5nLiIKK21zZ3N0ciAiZ2l0LXJlYmFzZS10b2Rv6rCAIOyXhuyKteuLiOuLpC4iCisKKyM6IHd0LXN0YXR1cy5jOjEyNTIKK21zZ2lkICJObyBjb21tYW5kcyBkb25lLiIKK21zZ3N0ciAi7JmE66OM7ZWcIOuqheuguSDsl4bsnYwuIgorCisjOiB3dC1zdGF0dXMuYzoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhc3QgY29tbWFuZCBkb25lICglZCBjb21tYW5kIGRvbmUpOiIKK21zZ2lkX3BsdXJhbCAiTGFzdCBjb21tYW5kcyBkb25lICglZCBjb21tYW5kcyBkb25lKToiCittc2dzdHJbMF0gIuy1nOq3vCDsmYTro4ztlZwg66qF66C5ICglZOqwnCDrqoXroLkg7JmE66OMKToiCisKKyM6IHd0LXN0YXR1cy5jOjEyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAoc2VlIG1vcmUgaW4gZmlsZSAlcykiCittc2dzdHIgIiAgKOyekOyEuO2VnCDsoJXrs7TripQgJXMg7YyM7J28IOywuOqzoCkiCisKKyM6IHd0LXN0YXR1cy5jOjEyNzEKK21zZ2lkICJObyBjb21tYW5kcyByZW1haW5pbmcuIgorbXNnc3RyICLrqoXroLnsnbQg64Ko7JWE7J6I7KeAIOyViuydjC4iCisKKyM6IHd0LXN0YXR1cy5jOjEyNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV4dCBjb21tYW5kIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZCk6IgorbXNnaWRfcGx1cmFsICJOZXh0IGNvbW1hbmRzIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZHMpOiIKK21zZ3N0clswXSAi64uk7J2M7JeQIO2VoCDrqoXroLkgKCVk6rCcIOuqheuguSDrgqjsnYwpOiIKKworIzogd3Qtc3RhdHVzLmM6MTI4MgorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiB0byB2aWV3IGFuZCBlZGl0KSIKK21zZ3N0ciAiICAo67O06rOgIO2OuOynke2VmOugpOuptCBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIuulvCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxMjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICLtmITsnqwgJyVzJyDruIzrnpzsuZjrpbwgJyVzJyDsnITroZwg66as67Kg7J207Iqk7ZWY64qUIOykkeyeheuLiOuLpC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMDAKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgIu2YhOyerCDrpqzrsqDsnbTsiqTtlZjripQg7KSR7J6F64uI64ukLiIKKworIzogd3Qtc3RhdHVzLmM6MTMxNAorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjstqnrj4zsnYQg67CU66Gc7J6h6rOgIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLrpbwg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTMxNgorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAo7J20IO2MqOy5mOulvCDqsbTrhIjrm7DroKTrqbQgXCJnaXQgcmViYXNlIC0tc2tpcFwi7J2EIOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjEzMTgKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiB0byBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKOybkOuzuCDruIzrnpzsuZjrpbwg6rCA7KC47Jik66Ck66m0IFwiZ2l0IHJlYmFzZSAtLWFib3J0XCLrpbwg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTMyNAorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKOuqqOuToCDstqnrj4zsnYQg67CU66Gc7J6h7JWY7Iq164uI64ukOiBcImdpdCByZWJhc2UgLS1jb250aW51ZVwi66W8IOyLpO2Wie2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjEzMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAi7ZiE7J6sICclcycg67iM656c7LmY66W8ICclcycg7JyE66GcIOumrOuyoOydtOyKpO2VmOuKlCDspJEg7Luk67CL7J2EIOu2hOumrO2VmOuKlCDspJHsnoXri4jri6QuIgorCisjOiB3dC1zdGF0dXMuYzoxMzMzCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIu2YhOyerCDrpqzrsqDsnbTsiqTtlZjripQg7KSRIOy7pOuwi+ydhCDrtoTrpqztlZjripQg7KSR7J6F64uI64ukLiIKKworIzogd3Qtc3RhdHVzLmM6MTMzNgorbXNnaWQgIiAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjsnpHsl4Ug7Y+0642U6rCAIOq5qOuBl+2VtOyngOuptCwgXCJnaXQgcmViYXNlIC0tY29udGludWVcIuulvCDsi6TtlontlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiclcycg67iM656c7LmY66W8ICclcycg7JyE66GcIOumrOuyoOydtOyKpO2VmOuKlCDspJEg7Luk67CL7J2EIO2OuOynke2VmOuKlCDspJHsnoXri4jri6QuIgorCisjOiB3dC1zdGF0dXMuYzoxMzQ1Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICLrpqzrsqDsnbTsiqQg7KSR7JeQIOy7pOuwi+ydhCDtjrjsp5HtlZjripQg7KSR7J6F64uI64ukLiIKKworIzogd3Qtc3RhdHVzLmM6MTM0OAorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiAgKO2YhOyerCDsu6TrsIvsnYQg7IiY7KCV7ZWY66Ck66m0IFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCLsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTM1MAorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKSIKK21zZ3N0ciAiICAo67OA6rK9IOyCrO2VreyXkCDrp4zsobHtlaAg65WMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLrpbwg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJXMuIgorbXNnc3RyICLtmITsnqwgJXMg7Luk67CL7J2EIOu9keyVhCDrgrTqs6Ag7J6I7Iq164uI64ukLiIKKworIzogd3Qtc3RhdHVzLmM6MTM2NQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjstqnrj4zsnYQg67CU66Gc7J6h6rOgIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIuulvCDsi6TtlontlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxMzY4Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgICjrqqjrk6Ag7Lap64+M7J2EIOuwlOuhnOyeoeyVmOyKteuLiOuLpDogXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwi66W8IOyLpO2Wie2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzAKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICAo672R6riwIOyekeyXheydhCDst6jshoztlZjroKTrqbQgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwi66W8IOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIu2YhOyerCAlcyDsu6TrsIvsnYQg65CY64+M66as64qUIOykkeyeheuLiOuLpC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzODQKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKOy2qeuPjOydhCDrsJTroZzsnqHqs6AgXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIuulvCDsi6TtlontlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxMzg3Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAo66qo65OgIOy2qeuPjOydhCDrsJTroZzsnqHslZjsirXri4jri6Q6IFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCLrpbwg7Iuk7ZaJ7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTM4OQorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikiCittc2dzdHIgIiAgKOuQmOuPjOumrOq4sCDsnpHsl4XsnYQg7Leo7IaM7ZWY66Ck66m0IFwiZ2l0IHJldmVydCAtLWFib3J0XCLrpbwg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJyVzJy4iCittc2dzdHIgIifsnbTrk7HrtoTtlZjripQg7KSR7J6F64uI64ukLiAnJXMnIOu4jOuenOy5mOu2gO2EsCDsi5zsnpEuIgorCisjOiB3dC1zdGF0dXMuYzoxNDA0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLiIKK21zZ3N0ciAiJ+ydtOuTseu2hO2VmOuKlCDspJHsnoXri4jri6QuIgorCisjOiB3dC1zdGF0dXMuYzoxNDA3Cittc2dpZCAiICAodXNlIFwiZ2l0IGJpc2VjdCByZXNldFwiIHRvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICjsm5Drnpgg67iM656c7LmY66GcIOuPjOyVhOqwgOugpOuptCBcImdpdCBiaXNlY3QgcmVzZXRcIuydhCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxNjA0Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAi7ZiE7J6sIOu4jOuenOy5mCAiCisKKyM6IHd0LXN0YXR1cy5jOjE2MTAKK21zZ2lkICJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICLrjIDtmZTtmJUg66as67Kg7J207IqkIOynhO2WiSDspJEuIOqwiCDsnITsuZjripQgIgorCisjOiB3dC1zdGF0dXMuYzoxNjEyCittc2dpZCAicmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAi66as67Kg7J207IqkIOynhO2WiSDspJEuIOqwiCDsnITsuZjripQgIgorCisjOiB3dC1zdGF0dXMuYzoxNjE3Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBhdCAiCittc2dzdHIgIkhFQUTqsIAg64uk7J2MIOychOy5mOyXkOyEnCDrtoTrpqw6ICIKKworIzogd3Qtc3RhdHVzLmM6MTYxOQorbXNnaWQgIkhFQUQgZGV0YWNoZWQgZnJvbSAiCittc2dzdHIgIkhFQUTqsIAg64uk7J2M7Jy866Gc67aA7YSwIOu2hOumrDogIgorCisjOiB3dC1zdGF0dXMuYzoxNjIyCittc2dpZCAiTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLiIKK21zZ3N0ciAi7ZiE7J6sIOyWtOuWpCDruIzrnpzsuZjrj4Qg7IKs7Jqp7ZWY7KeAIOyViuydjC4iCisKKyM6IHd0LXN0YXR1cy5jOjE2NDIKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAi7LWc7LSIIOy7pOuwiyIKKworIzogd3Qtc3RhdHVzLmM6MTY0MworbXNnaWQgIk5vIGNvbW1pdHMgeWV0IgorbXNnc3RyICLslYTsp4Eg7Luk67CL7J20IOyXhuyKteuLiOuLpCIKKworIzogd3Qtc3RhdHVzLmM6MTY1NworbXNnaWQgIlVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi7LaU7KCB7ZWY7KeAIOyViuuKlCDtjIzsnbwiCisKKyM6IHd0LXN0YXR1cy5jOjE2NTkKK21zZ2lkICJJZ25vcmVkIGZpbGVzIgorbXNnc3RyICLrrLTsi5ztlZwg7YyM7J28IgorCisjOiB3dC1zdGF0dXMuYzoxNjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW50cmFja2VkIGZpbGVzLiAnc3RhdHVzIC11bm8nXG4iCisibWF5IHNwZWVkIGl0IHVwLCBidXQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZm9yZ2V0IHRvIGFkZFxuIgorIm5ldyBmaWxlcyB5b3Vyc2VsZiAoc2VlICdnaXQgaGVscCBzdGF0dXMnKS4iCittc2dzdHIgIiIKKyLstpTsoIHtlZjsp4Ag7JWK64qUIO2MjOydvOydhCDrqqjrkZAg7ZmV7J247ZWY64qU642wICUuMmbstIjqsIAg6rG466C47Iq164uI64ukLlxuIgorIidzdGF0dXMgLXVubycg7Ji17IWY7J2EIOyTsOuptCDruajrnbzsp4gg7IiY64+EIOyeiOyngOunjCwg7IOIIO2MjOydvOydhFxuIgorIuyngeygkSDssL7slYTshJwg7LaU6rCA7ZW07JW8IO2VqeuLiOuLpC4gKCdnaXQgaGVscCBzdGF0dXMnIOywuOqzoCkiCisKKyM6IHd0LXN0YXR1cy5jOjE2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAi7LaU7KCB7ZWY7KeAIOyViuuKlCDtjIzsnbzsnYQg67O07KeAIOyViuyKteuLiOuLpCVzIgorCisjOiB3dC1zdGF0dXMuYzoxNjcxCittc2dpZCAiICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAiICjstpTsoIHtlZjsp4Ag7JWK64qUIO2MjOydvOydhCDrs7TroKTrqbQgLXUg7Ji17IWY7J2EIOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjE2NzcKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICLrs4Dqsr0g7IKs7ZWtIOyXhuydjCIKKworIzogd3Qtc3RhdHVzLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlIFwiZ2l0IGFkZFwiIGFuZC9vciBcImdpdCBjb21taXQgLWFcIilcbiIKK21zZ3N0ciAiIgorIuy7pOuwi+2VoCDrs4Dqsr0g7IKs7ZWt7J2EIOy2lOqwgO2VmOyngCDslYrslZjsirXri4jri6QgKFwiZ2l0IGFkZFwiIOuwjy/rmJDripQgXCJnaXQgY29tbWl0IC1hIgorIlwi66W8XG4iCisi7IKs7Jqp7ZWY7Iut7Iuc7JikKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgIuy7pOuwi+2VoCDrs4Dqsr0g7IKs7ZWt7J2EIOy2lOqwgO2VmOyngCDslYrslZjsirXri4jri6RcbiIKKworIzogd3Qtc3RhdHVzLmM6MTY4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50ICh1c2UgXCJnaXQgYWRkXCIgdG8gIgorInRyYWNrKVxuIgorbXNnc3RyICIiCisi7Luk67CL7ZWgIOyCrO2VreydhCDstpTqsIDtlZjsp4Ag7JWK7JWY7KeA66eMIOy2lOygge2VmOyngCDslYrripQg7YyM7J287J20IOyeiOyKteuLiOuLpCAo7LaU7KCB7ZWY66Ck66m0ICIKKyJcImdpdFxuIgorImFkZFwi66W8IOyCrOyaqe2VmOyLreyLnOyYpClcbiIKKworIzogd3Qtc3RhdHVzLmM6MTY5MQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAi7Luk67CL7ZWgIOyCrO2VreydhCDstpTqsIDtlZjsp4Ag7JWK7JWY7KeA66eMIOy2lOygge2VmOyngCDslYrripQg7YyM7J287J20IOyeiOyKteuLiOuLpFxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0IChjcmVhdGUvY29weSBmaWxlcyBhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIgorbXNnc3RyICIiCisi7Luk67CL7ZWgIOyCrO2VrSDsl4bsnYwgKO2MjOydvOydhCDrp4zrk6TqsbDrgpgg67O17IKs7ZWY6rOgIFwiZ2l0IGFkZFwi66W8IOyCrOyaqe2VmOuptCDstpTsoIHtlanri4giCisi64ukKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjk3IHd0LXN0YXR1cy5jOjE3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXRcbiIKK21zZ3N0ciAi7Luk67CL7ZWgIOyCrO2VrSDsl4bsnYxcbiIKKworIzogd3Qtc3RhdHVzLmM6MTcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKVxuIgorbXNnc3RyICIiCisi7Luk67CL7ZWgIOyCrO2VrSDsl4bsnYwgKOy2lOygge2VmOyngCDslYrripQg7YyM7J287J2EIOuztOugpOuptCAtdSDsmLXshZjsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW5cbiIKK21zZ3N0ciAi7Luk67CL7ZWgIOyCrO2VrSDsl4bsnYwsIOyekeyXhSDtj7TrjZQg6rmo64GX7ZWoXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE4MTcKK21zZ2lkICJObyBjb21taXRzIHlldCBvbiAiCittc2dzdHIgIuyVhOyngSDsu6TrsIvsnbQg7JeG7Iq164uI64ukLCDsnITsuZg6IDwiCisKKyM6IHd0LXN0YXR1cy5jOjE4MjEKK21zZ2lkICJIRUFEIChubyBicmFuY2gpIgorbXNnc3RyICJIRUFEICjruIzrnpzsuZgg7JeG7J2MKSIKKworIzogd3Qtc3RhdHVzLmM6MTg1MgorbXNnaWQgImRpZmZlcmVudCIKK21zZ3N0ciAi64uk66aEIgorCisjOiB3dC1zdGF0dXMuYzoxODU0IHd0LXN0YXR1cy5jOjE4NjIKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICLri6TsnYwg65Kk7JeQOiAiCisKKyM6IHd0LXN0YXR1cy5jOjE4NTcgd3Qtc3RhdHVzLmM6MTg2MAorbXNnaWQgImFoZWFkICIKK21zZ3N0ciAi64uk7J2MIOyVnuyXkDogIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGFjdGlvbiBpcyBlLmcuICJwdWxsIHdpdGggcmViYXNlIgorIzogd3Qtc3RhdHVzLmM6MjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIlcyDtlaAg7IiYIOyXhuyKteuLiOuLpDog7Iqk7YWM7J207KeV7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWt7J20IOyeiOyKteuLiOuLpC4iCisKKyM6IHd0LXN0YXR1cy5jOjIzNzIKK21zZ2lkICJhZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIuy2lOqwgOuhnCwg7J24642x7Iqk7JeQIOy7pOuwi+2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6QuIgorCisjOiB3dC1zdGF0dXMuYzoyMzc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiJXMg7ZWgIOyImCDsl4bsirXri4jri6Q6IOyduOuNseyKpOyXkCDsu6TrsIvtlZjsp4Ag7JWK7J2AIOuzgOqyvSDsgqztla3snbQg7J6I7Iq164uI64ukLiIKKworIzogY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jOjU4IGJ1aWx0aW4vY2xvbmUuYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICInJXMnIO2MjOydvCDsgq3soJzsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL2FkZC5jOjI0Cittc2dpZCAiZ2l0IGFkZCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBhZGQgWzzsmLXshZg+XSBbLS1dIDzqsr3roZzrqoXshLg+Li4uIgorCisjOiBidWlsdGluL2FkZC5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgIuyYiOyDgey5mCDrqrvtlZwgZGlmZiDsg4Htg5wgJWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODggYnVpbHRpbi9jb21taXQuYzoyNjYKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIu2MjOydvCDsl4XrjbDsnbTtirjqsIAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL2FkZC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgIiclcycg7KCc6rGwXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTczCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIuyduOuNseyKpOulvCDsg4jroZwg6rOg7LmcIOuLpOydjCDsu6TrsIsg7ZGc7Iuc7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWtOiIKKworIzogYnVpbHRpbi9hZGQuYzoyMzMgYnVpbHRpbi9yZXYtcGFyc2UuYzo4OTIKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIuyduOuNseyKpOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hZGQuYzoyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIiclcycg7YyM7J287J2EIOyTsOq4sOyaqeycvOuhnCDsl7Qg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjQ4Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHBhdGNoIgorbXNnc3RyICLtjKjsuZjrpbwg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjUxCittc2dpZCAiZWRpdGluZyBwYXRjaCBmYWlsZWQiCittc2dzdHIgIu2MqOy5mCDtjrjsp5Hsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL2FkZC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkgc3RhdCgp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU2Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICLruYgg7Yyo7LmYLiDspJHsp4AuIgorCisjOiBidWlsdGluL2FkZC5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOyggeyaqe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2FkZC5jOjI2OQorbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAi64uk7J2MIOqyveuhnOuKlCAuZ2l0aWdub3JlIO2MjOydvCDspJEg7ZWY64KYIOuVjOusuOyXkCDrrLTsi5ztlanri4jri6Q6XG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg5IGJ1aWx0aW4vY2xlYW4uYzo5MTEgYnVpbHRpbi9mZXRjaC5jOjE0NSBidWlsdGluL212LmM6MTIzCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU1IGJ1aWx0aW4vcHVsbC5jOjIxMiBidWlsdGluL3B1c2guYzo1NTcKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM0MiBidWlsdGluL3JtLmM6MjQwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY1Cittc2dpZCAiZHJ5IHJ1biIKK21zZ3N0ciAi6rCA7Kec66GcIOyLpO2WiSIKKworIzogYnVpbHRpbi9hZGQuYzoyOTIKK21zZ2lkICJpbnRlcmFjdGl2ZSBwaWNraW5nIgorbXNnc3RyICLrjIDtmZTsi53snLzroZwg6rOg66aF64uI64ukIgorCisjOiBidWlsdGluL2FkZC5jOjI5MyBidWlsdGluL2NoZWNrb3V0LmM6MTEzNSBidWlsdGluL3Jlc2V0LmM6MzAyCittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgIuuMgO2ZlOyLneycvOuhnCDrs4Dqsr3rkJwg67aA67aE7J2EIOyEoO2Dne2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9hZGQuYzoyOTQKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgIu2YhOyerCBkaWZm66W8IO2OuOynke2VmOqzoCDsoIHsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk1Cittc2dpZCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICLrrLTsi5ztlZjripQg7YyM7J287J2YIOy2lOqwgOulvCDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk2Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgIuy2lOyggeuQmOuKlCDtjIzsnbzsnYQg7JeF642w7J207Yq47ZWp64uI64ukIgorCisjOiBidWlsdGluL2FkZC5jOjI5NworbXNnaWQgInJlbm9ybWFsaXplIEVPTCBvZiB0cmFja2VkIGZpbGVzIChpbXBsaWVzIC11KSIKK21zZ3N0ciAi7LaU7KCB65CcIO2MjOydvOydmCDsg4jspITrrLjsnpAoRU9MKeulvCDsnqwg7KCB7Jqp7ZWp64uI64ukICgtdSDsmLXshZgg7Y+s7ZWoKSIKKworIzogYnVpbHRpbi9hZGQuYzoyOTgKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIuuCmOykkeyXkCDstpTqsIDtlaAg6rKD7J20652864qUIOyCrOyLpOunjCDquLDroZ3tlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk5Cittc2dpZCAiYWRkIGNoYW5nZXMgZnJvbSBhbGwgdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLstpTsoIHrkJjqs6Ag7LaU7KCB65CY7KeAIOyViuuKlCDrqqjrk6Ag7YyM7J287J2YIOuzgOqyvSDsgqztla3snYQg7LaU6rCA7ZWp64uI64ukIgorCisjOiBidWlsdGluL2FkZC5jOjMwMgorbXNnaWQgImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIgorbXNnc3RyICLsnpHsl4Ug7Y+0642U7JeQ7IScIOygnOqxsO2VnCDqsr3roZzrpbwg66y07Iuc7ZWp64uI64ukICgtLW5vLWFsbOqzvCDrj5nsnbwpIgorCisjOiBidWlsdGluL2FkZC5jOjMwNAorbXNnaWQgImRvbid0IGFkZCwgb25seSByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAi7LaU6rCA7ZWY7KeAIOyViuqzoCDsnbjrjbHsiqTrp4wg7IOI66GcIOqzoOy5qeuLiOuLpCIKKworIzogYnVpbHRpbi9hZGQuYzozMDUKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICLsmKTrpZgg65WM66y47JeQIOy2lOqwgO2VoCDsiJgg7JeG64qUIO2MjOydvOydhCDqsbTrhIjrnIHri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzA2Cittc2dpZCAiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIgorbXNnc3RyICLqsIDsp5zroZwg7Iuk7ZaJ7ZaI7J2EIOuVjCDtjIzsnbzsnYQg66y07Iuc7ZWY64qU7KeAIO2ZleyduO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9hZGQuYzozMDcgYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzQKK21zZ2lkICIoKy8tKXgiCittc2dzdHIgIigrLy0peCIKKworIzogYnVpbHRpbi9hZGQuYzozMDcgYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzUKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAi66qp66Gd7J2YIO2MjOydvOyXkOyEnCDsi6Ttlokg6rCA64qlIOu5hO2KuOulvCDrsJTqv4nri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzA5Cittc2dpZCAid2FybiB3aGVuIGFkZGluZyBhbiBlbWJlZGRlZCByZXBvc2l0b3J5IgorbXNnc3RyICLrgrTsnqUg7KCA7J6l7IaM66W8IOy2lOqwgO2VoCDrlYwg6rK96rOg66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9hZGQuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSd2ZSBhZGRlZCBhbm90aGVyIGdpdCByZXBvc2l0b3J5IGluc2lkZSB5b3VyIGN1cnJlbnQgcmVwb3NpdG9yeS5cbiIKKyJDbG9uZXMgb2YgdGhlIG91dGVyIHJlcG9zaXRvcnkgd2lsbCBub3QgY29udGFpbiB0aGUgY29udGVudHMgb2ZcbiIKKyJ0aGUgZW1iZWRkZWQgcmVwb3NpdG9yeSBhbmQgd2lsbCBub3Qga25vdyBob3cgdG8gb2J0YWluIGl0LlxuIgorIklmIHlvdSBtZWFudCB0byBhZGQgYSBzdWJtb2R1bGUsIHVzZTpcbiIKKyJcbiIKKyJcdGdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisiSWYgeW91IGFkZGVkIHRoaXMgcGF0aCBieSBtaXN0YWtlLCB5b3UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZVxuIgorImluZGV4IHdpdGg6XG4iCisiXG4iCisiXHRnaXQgcm0gLS1jYWNoZWQgJXNcbiIKKyJcbiIKKyJTZWUgXCJnaXQgaGVscCBzdWJtb2R1bGVcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyLtmITsnqwg7KCA7J6l7IaMIOyViOyXkCDrmJAg64uk66W4IOq5gyDsoIDsnqXshozrpbwg7LaU6rCA7ZaI7Iq164uI64ukLiDsmbjrtoAg7KCA7J6l7IaM66W8IOuzteygnO2VtOuPhFxuIgorIuuCtOyepeuQnCDsoIDsnqXshozsnZgg64K07Jqp7J2EIOuzteygnO2VmOynhCDslYrqs6Ag7Ja065a76rKMIOuCtOyepeuQnCDsoIDsnqXshowg64K07Jqp7J2EIOyWu+ydhOyngCDsoJXrs7QiCisi64+EXG4iCisi7JeG7Iq164uI64ukLiDtlZjsnIQg66qo65OI7J2EIOy2lOqwgO2VmOugpOuptCwg64uk7J2MIOuqheugueydhCDsgqzsmqntlZjsi63si5zsmKQ6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIuyLpOyImOuhnCDsnbQg6rK966Gc66W8IOy2lOqwgO2WiOuLpOuptCDri6TsnYwg66qF66C57Jy866GcIOyduOuNseyKpOyXkOyEnCDsoJzqsbDtlaAg7IiYIOyeiOyKteuLiOuLpDpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIuuNlCDsnpDshLjtlZwg7KCV67O064qUIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCLsnYQg7LC46rOg7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9hZGQuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5nIGVtYmVkZGVkIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAi64K07J6lIOq5gyDsoIDsnqXshowg7LaU6rCAOiAlcyIKKworIzogYnVpbHRpbi9hZGQuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKK21zZ3N0ciAi7KCV66eQ66GcIOy2lOqwgO2VmOugpOuptCAtZiDsmLXshZjsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikLlxuIgorCisjOiBidWlsdGluL2FkZC5jOjM3OAorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIu2MjOydvCDstpTqsIDqsIAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL2FkZC5jOjQxNgorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICItQSDrsI8gLXUg7Ji17IWY7J2AIOyEnOuhnCDtmLjtmZjrkJjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2FkZC5jOjQyMworbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIiIKKyItLWlnbm9yZS1taXNzaW5nIOyYteyFmOydgCAtLWRyeS1ydW4g7Ji17IWY6rO8IOqwmeydtCDsgqzsmqntlaAg6rK97Jqw7JeQ66eMIOyTuCDsiJgg7J6I7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9hZGQuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1jaG1vZCBwYXJhbSAnJXMnIG11c3QgYmUgZWl0aGVyIC14IG9yICt4IgorbXNnc3RyICItLWNobW9kIO2MjOudvOuvuO2EsCAnJXMn7J2AKOuKlCkgLXgg65iQ64qUICt4IO2YleyLneydtOyWtOyVvCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICLslYTrrLQg6rKD64+EIOyngOygle2VmOyngCDslYrslZjsnLzrr4DroZwg7JWE66y0IOqyg+uPhCDstpTqsIDtlZjsp4Ag7JWK7Iq164uI64ukLlxuIgorCisjOiBidWlsdGluL2FkZC5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKK21zZ3N0ciAiJ2dpdCBhZGQgLicg66qF66C57J2EIOyLpO2Wie2VmOugpOqzoCDtlZwg6rKDIOyVhOuLiOyXiOyKteuLiOq5jD9cbiIKKworIzogYnVpbHRpbi9hZGQuYzo0NDggYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzcgYnVpbHRpbi9jaGVja291dC5jOjI4MAorIzogYnVpbHRpbi9jaGVja291dC5jOjQ4MyBidWlsdGluL2NsZWFuLmM6OTU4IGJ1aWx0aW4vY29tbWl0LmM6MzI1CisjOiBidWlsdGluL2RpZmYtdHJlZS5jOjExNCBidWlsdGluL212LmM6MTQ0IGJ1aWx0aW4vcmVzZXQuYzoyNDEKKyM6IGJ1aWx0aW4vcm0uYzoyNzAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjMyOAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAi7J24642x7IqkIO2MjOydvOydtCDshpDsg4HrkJjsl4jsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzo0MTQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAi7J6R7ISx7J6QIOyKpO2BrOumve2KuOulvCDtjIzsi7HtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICJhcHBseXBhdGNoLW1zZyDtm4Ttgawg65WM66y47JeQICclcyfsnbQo6rCAKSDsgq3soJzrkJjsl4jsirXri4jri6QuIgorCisjOiBidWlsdGluL2FtLmM6NTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAi7J6Y66q765CcIO2YleyLneydmCDsnoXroKUg7KSEOiAnJXMnLiIKKworIzogYnVpbHRpbi9hbS5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkOyEnCAnJXMnKOycvCnroZwg64W47Yq466W8IOuzteyCrO2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzo2MDIKK21zZ2lkICJmc2VlayBmYWlsZWQiCittc2dzdHIgImZzZWVrIOyLpO2MqCIKKworIzogYnVpbHRpbi9hbS5jOjc5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIKK21zZ3N0ciAiJyVzJyDtjKjsuZjrpbwg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzo4NTUKK21zZ2lkICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKK21zZ3N0ciAi7ZWc67KI7JeQIO2VmOuCmOydmCBTdEdJVCDtjKjsuZgg7Iuc66as7KaI66eMIOyggeyaqe2VoCDsiJgg7J6I7Iq164uI64ukIgorCisjOiBidWlsdGluL2FtLmM6OTAzCittc2dpZCAiaW52YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIuyLnOqwgeydtCDsnpjrqrvrkJjsl4jsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzo5MDggYnVpbHRpbi9hbS5jOjkyMAorbXNnaWQgImludmFsaWQgRGF0ZSBsaW5lIgorbXNnc3RyICJEYXRlIOykhOydtCDsnpjrqrvrkJjsl4jsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzo5MTUKK21zZ2lkICJpbnZhbGlkIHRpbWV6b25lIG9mZnNldCIKK21zZ3N0ciAi7Iuc6rCE64yAIOyYpO2UhOyFi+ydtCDsnpjrqrvrkJjsl4jsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDA4Cittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICLtjKjsuZgg7ZiV7IudIOqygOyDieydtCDsi6TtjKjtlojsirXri4jri6QuIgorCisjOiBidWlsdGluL2FtLmM6MTAxMyBidWlsdGluL2Nsb25lLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIiclcycg65SU66CJ7YSw66asIOunjOuTpOq4sOqwgCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDE4Cittc2dpZCAiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIgorbXNnc3RyICLtjKjsuZjrpbwg7Kq86rCc64qU642wIOyLpO2MqO2WiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTQ4IGJ1aWx0aW4vY29tbWl0LmM6MzUxCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGluZGV4IGZpbGUiCittc2dzdHIgIuyduOuNseyKpCDtjIzsnbzsnYQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIlcyAtLWNvbnRpbnVlXCIuIgorbXNnc3RyICLsnbQg66y47KCc66W8IO2VtOqysO2WiOydhCDrlYwgXCIlcyAtLWNvbnRpbnVlXCLrpbwg7Iuk7ZaJ7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9hbS5jOjExNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIgorbXNnc3RyICLsnbQg7Yyo7LmY66W8IOqxtOuEiOubsOugpOuptCwg6re4IOuMgOyLoCBcIiVzIC0tc2tpcFwi7J2EIOyLpO2Wie2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJXMgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorIuybkOuemCDruIzrnpzsuZjrpbwg67O16rWs7ZWY6rOgIO2MqOy5mCDsoIHsmqnsnYQg7KSR7KeA7ZWY66Ck66m0IFwiJXMgLS1hYm9ydFwi66W8IOyLpO2Wie2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjcxCittc2dpZCAiUGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICLtjKjsuZjqsIAg67mE7Ja0IOyeiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMzM3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJS4qcyIKK21zZ3N0ciAi7J6Y66q765CcIOyLoOybkCDspIQ6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMzU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIiVzIOy7pOuwi+ydhCDtjIzsi7HtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjE1NTQKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICLsoIDsnqXshozsl5AgMy3rsKntlqUg67OR7ZWp7Jy866GcIOuMgOyLoO2VoCDrlYwg7ZWE7JqU7ZWcIOu4lOuhreydtCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL2FtLmM6MTU1NgorbXNnaWQgIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iCittc2dzdHIgIuyduOuNseyKpCDsoJXrs7Trpbwg7IKs7Jqp7ZW0IOq4sOuzuCDtirjrpqzrpbwg64uk7IucIOunjOuTreuLiOuLpC4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE1NzUKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisi7Yyo7LmY66W8IOyngeygkSDtjrjsp5HtlZjshajsirXri4jquYw/XG4iCisi7J20IO2MqOy5mOuKlCDsnbjrjbHsiqTsl5Ag6riw66Gd65CcIOu4lOuhreyXkOuKlCDsoIHsmqnrkJjsp4Ag7JWK7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9hbS5jOjE1ODEKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIuuyoOydtOyKpCDtjKjsuZgg7KCB7JqpIOuwjyAzLeuwqe2WpSDrs5HtlansnLzroZwg64yA7Iug7ZWp64uI64ukLi4uIgorCisjOiBidWlsdGluL2FtLmM6MTYwNgorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iCittc2dzdHIgIuuzgOqyvSDsgqztla3sl5DshJwg67OR7ZWp7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjM3Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAi67mIIOy7pOuwiyDrgrTsl63sl5Ag64yA7ZW0IOyggeyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjE2ODMgYnVpbHRpbi9hbS5jOjE2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3VtZTogJXMgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICLri6Tsi5wg7Iuc7J6R7ZWgIOyImCDsl4bsirXri4jri6Q6ICVz7J20KOqwgCkg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9hbS5jOjE3MDMKK21zZ2lkICJjYW5ub3QgYmUgaW50ZXJhY3RpdmUgd2l0aG91dCBzdGRpbiBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4iCittc2dzdHIgIiIKKyLthLDrr7jrhJDsl5Ag7ZGc7KSAIOyeheugpeydtCDsl7DqsrDrkJjsp4Ag7JWK7J2AIOyDge2DnOyXkOyEnCDrjIDtmZTtmJXsnLzroZwg7Iuk7ZaJ7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL2FtLmM6MTcwOAorbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAi7Luk67CLIOuzuOusuOydgDoiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNzE4Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIKK21zZ3N0ciAi7KCB7JqpPyDsmIhbeV0v7JWE64uI7JikW25dL+2OuOynkVtlXS/tjKjsuZgg67O06riwW3ZdL+uqqOuRkCDsoIHsmqlbYV06ICIKKworIzogYnVpbHRpbi9hbS5jOjE3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJXMpIgorbXNnc3RyICLrs4Dqsr3rkJwg7J24642x7IqkOiDtjKjsuZjrpbwg7KCB7Jqp7ZWgIOyImCDsl4bsirXri4jri6QgKGRpcnR5OiAlcykiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODA4IGJ1aWx0aW4vYW0uYzoxODc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICLsoIHsmqntlZjripQg7KSROiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTgyNAorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAi67OA6rK9IOyCrO2VrSDsl4bsnYwgLS0g7Yyo7LmY6rCAIOydtOuvuCDsoIHsmqnrkJjsl4jsirXri4jri6QuIgorCisjOiBidWlsdGluL2FtLmM6MTgzMgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAi7Yyo7LmY6rCAICVzICUuKnMg7JyE7LmY7JeQ7IScIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjE4MzgKK21zZ2lkICJVc2UgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaCcgdG8gc2VlIHRoZSBmYWlsZWQgcGF0Y2giCittc2dzdHIgIidnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2gn66W8IOyCrOyaqe2VmOyXrCDsi6TtjKjtlZwg7Yyo7LmY66W8IOuzvCDsiJgg7J6I7Iq164uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MTg4MgorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKK21zZ3N0ciAiIgorIuuzgOqyvSDsgqztla3snbQg7JeG7Iq164uI64ukIC0gJ2dpdCBhZGQnIOyCrOyaqeydhCDsnorsnLzshajsirXri4jquYw/XG4iCisi7Luk67CL7Jy866GcIO2RnOyLnO2VoCDsgqztla3snbQg64Ko7JWEIOyeiOyngCDslYrsnLzrqbQsIOydtOuvuCDqsJnsnYAg7Yyo7LmY7JeQ7IScIOyggeyaqeuQnFxuIgorIuqyveyasOydvCDsiJjrj4Qg7J6I7Iq164uI64ukLiDqt7jrn7Ag6rK97Jqw7JeQ64qUIOydtCDtjKjsuZjrpbwg6rG064SI65uw66m0IOuQqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODg5Cittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisiWW91IHNob3VsZCAnZ2l0IGFkZCcgZWFjaCBmaWxlIHdpdGggcmVzb2x2ZWQgY29uZmxpY3RzIHRvIG1hcmsgdGhlbSBhcyAiCisic3VjaC5cbiIKKyJZb3UgbWlnaHQgcnVuIGBnaXQgcm1gIG9uIGEgZmlsZSB0byBhY2NlcHQgXCJkZWxldGVkIGJ5IHRoZW1cIiBmb3IgaXQuIgorbXNnc3RyICIiCisi7J24642x7Iqk7JeQIOyVhOyngSDrs5HtlantlZjsp4Ag7JWK7J2AIOqyveuhnOqwgCDrgqjslYQg7J6I7Iq164uI64ukLlxuIgorIuy2qeuPjOydhCDtlbTqsrDtlZwg7YyM7J287J2EICdnaXQgYWRkJ+2VtOyEnCDtlbTqsrDtlojri6Tqs6Ag7ZGc7Iuc7ZW07JW8IO2VqeuLiOuLpC5cbiIKKyLtjIzsnbzsnZggXCLsoIAg7Kq97JeQ7IScIOyCreygnFwi66W8IOuwm+yVhOuTpOydtOugpOuptCBgZ2l0IHJtYOydhCDsi6TtlontlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL2FtLmM6MTk5NiBidWlsdGluL2FtLmM6MjAwMCBidWlsdGluL2FtLmM6MjAxMiBidWlsdGluL3Jlc2V0LmM6MzI0CisjOiBidWlsdGluL3Jlc2V0LmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIiclcycg7Jik67iM7KCd7Yq466W8IO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9hbS5jOjIwNDgKK21zZ2lkICJmYWlsZWQgdG8gY2xlYW4gaW5kZXgiCittc2dzdHIgIuyduOuNseyKpCDsp4DsmrDquLDsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MjA4MworbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICIiCisi66eI7KeA66eJICdhbScg7Iuk7YyoIOydtO2bhCBIRUFE66W8IOyYruq4tCDqsoMg6rCZ7Iq164uI64ukLlxuIgorIk9SSUdfSEVBROuhnCDrkJjrj4zrpqzsp4Ag7JWK7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9hbS5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICItLXBhdGNoLWZvcm1hdCDsmLXshZjsl5Ag64yA7ZW0IOyemOuqu+uQnCDqsJI6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MjIxMAorbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSBbKDxtYm94PiB8IDxNYWlsZGlyPikuLi5dIgorbXNnc3RyICJnaXQgYW0gWzzsmLXshZg+XSBbKDxtYm94PiB8IDxNYWlsZGlyPikuLi5dIgorCisjOiBidWlsdGluL2FtLmM6MjIxMQorbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorbXNnc3RyICJnaXQgYW0gWzzsmLXshZg+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorCisjOiBidWlsdGluL2FtLmM6MjIxNworbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICLrjIDtmZTtmJXsnLzroZwg7Iuk7ZaJ7ZWp64uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MjIxOQorbXNnaWQgImhpc3RvcmljYWwgb3B0aW9uIC0tIG5vLW9wIgorbXNnc3RyICLslYTrrLQg64+Z7J6R64+EIO2VmOyngCDslYrsirXri4jri6QgKOqzvOqxsOu2gO2EsCDsnojsl4jrjZgg7Ji17IWYKSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjEKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAi7ZWE7JqU7ZWY66m0IDMt67Cp7ZalIOuzke2VqeycvOuhnCDrjIDsi6DtlZjrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MjIyMiBidWlsdGluL2luaXQtZGIuYzo0ODQgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NworIzogYnVpbHRpbi9yZXBhY2suYzoxOTIKK21zZ2lkICJiZSBxdWlldCIKK21zZ3N0ciAi6rCE65617Z6IIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjQKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLsu6TrsIsg66mU7Iuc7KeA7JeQIFNpZ25lZC1vZmYtYnkg7KSE7J2EIOuCqOq5geuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjcKK21zZ2lkICJyZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KSIKK21zZ3N0ciAiVVRGLTgg7J247L2U65Sp7Jy866GcIOuzgO2ZmO2VqeuLiOuLpCAo6riw67O46rCSKSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjkKK21zZ2lkICJwYXNzIC1rIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJnaXQtbWFpbGluZm/sl5AgLWsg7Ji17IWY7J2EIOyUgeuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjIyMzEKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJnaXQtbWFpbGluZm/sl5AgLWIg7Ji17IWY7J2EIOyUgeuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjIyMzMKK21zZ2lkICJwYXNzIC1tIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJnaXQtbWFpbGluZm/sl5AgLW0g7Ji17IWY7J2EIOyUgeuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjIyMzUKK21zZ2lkICJwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgZm9yIG1ib3ggZm9ybWF0IgorbXNnc3RyICJtYm94IO2YleyLneyXkCDrjIDtlbQgZ2l0LW1haWxzcGxpdOyXkCAtLWtlZXAtY3Ig7Ji17IWY7J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjIyMzgKK21zZ2lkICJkbyBub3QgcGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGluZGVwZW5kZW50IG9mIGFtLmtlZXBjciIKK21zZ3N0ciAiIgorImFtLmtlZXBjcuyXkCDrrLTqtIDtlZjqsowgZ2l0LW1haWxzcGxpdOyXkCAtLWtlZXAtY3Ig7Ji17IWY7J2EIOyCrOyaqe2VmOyngCDslYrsirXri4jri6QuIgorCisjOiBidWlsdGluL2FtLmM6MjI0MQorbXNnaWQgInN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSIKK21zZ3N0ciAi7KCI7Leo7ISgIOyVnuydmCDrqqjrk6Ag7IKs7ZWt7J2EIOustOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjIyNDMgYnVpbHRpbi9hbS5jOjIyNDYgYnVpbHRpbi9hbS5jOjIyNDkgYnVpbHRpbi9hbS5jOjIyNTIKKyM6IGJ1aWx0aW4vYW0uYzoyMjU1IGJ1aWx0aW4vYW0uYzoyMjU4IGJ1aWx0aW4vYW0uYzoyMjYxIGJ1aWx0aW4vYW0uYzoyMjY0CisjOiBidWlsdGluL2FtLmM6MjI3MAorbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgImdpdC1hcHBseeyXkCDrhJjquYHri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjYwIGJ1aWx0aW4vY29tbWl0LmM6MTMzMiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjUKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY2OCBidWlsdGluL2dyZXAuYzo4NTMgYnVpbHRpbi9tZXJnZS5jOjIwOAorIzogYnVpbHRpbi9wdWxsLmM6MTUwIGJ1aWx0aW4vcHVsbC5jOjIwOCBidWlsdGluL3JlcGFjay5jOjIwMQorIzogYnVpbHRpbi9yZXBhY2suYzoyMDUgYnVpbHRpbi9yZXBhY2suYzoyMDcgYnVpbHRpbi9zaG93LWJyYW5jaC5jOjYzMQorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2OSBidWlsdGluL3RhZy5jOjM4MyBwYXJzZS1vcHRpb25zLmg6MTQ0CisjOiBwYXJzZS1vcHRpb25zLmg6MTQ2IHBhcnNlLW9wdGlvbnMuaDoyNTgKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2FtLmM6MjI2NiBidWlsdGluL2JyYW5jaC5jOjYzMiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDMgYnVpbHRpbi90YWcuYzo0MTkgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzkKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgIu2YleyLnSIKKworIzogYnVpbHRpbi9hbS5jOjIyNjcKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgIu2MqOy5mOydmCDtmJXsi50iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjczCittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICLtjKjsuZgg7Iuk7Yyo6rCAIOuwnOyDne2WiOydhCDrlYwg7Jik66WYIOuplOyLnOyngCDrjIDsi6Ag7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MjI3NQorbXNnaWQgImNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QiCittc2dzdHIgIuy2qeuPjOydhCDtlbTqsrDtlZwg64uk7J2MIO2MqOy5mCDsoIHsmqnsnYQg6rOE7IaN7ZWp64uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MjI3OAorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICItLWNvbnRpbnVlIOyYteyFmOqzvCDrj5nsnbwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjgxCittc2dpZCAic2tpcCB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAi7ZiE7J6sIO2MqOy5mCDqsbTrhIjrm7DquLAiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg0Cittc2dpZCAicmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLiIKK21zZ3N0ciAi7JuQ656YIOu4jOuenOy5mOulvCDrs7XqtaztlZjqs6Ag7Yyo7LmYIOyggeyaqSDsnpHsl4XsnYQg7KSR7KeA7ZWp64uI64ukLiIKKworIzogYnVpbHRpbi9hbS5jOjIyODcKK21zZ2lkICJhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uIGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMuIgorbXNnc3RyICLtjKjsuZgg7J6R7JeF7J2EIOykkeuLqO2VmOyngOunjCBIRUFE64qUIOq3uOuMgOuhnCDrkaHri4jri6QuIgorCisjOiBidWlsdGluL2FtLmM6MjI5MAorbXNnaWQgInNob3cgdGhlIHBhdGNoIGJlaW5nIGFwcGxpZWQuIgorbXNnc3RyICLsoIHsmqnrkJjripQg7Yyo7LmY66W8IOuztOyXrOykjeuLiOuLpC4iCisKKyMgTk9URTog7Ji17IWY7J2YIOydmOuvuOuKlCDsnbTqsowg66ee64ukLiDsm5DrrLjsl5DshJzripQg7IKs7Jqp7J6Q6rCACisjIC0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGXrnbzripQg7Ji17IWY7J2EIOuztOqzoCDsnZjrr7jrpbwg7JWMIOyImCDsnojri6Tqs6Ag6rCA7KCV7ZWY6rOgIOyeiOuLpC4KKyM6IGJ1aWx0aW4vYW0uYzoyMjk0Cittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICLsu6Trr7jthLAg7Iuc6rCB7J2EIOyekeyEseyekCDsi5zqsIHsnLzroZwg64Sj7Iq164uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MjI5NgorbXNnaWQgInVzZSBjdXJyZW50IHRpbWVzdGFtcCBmb3IgYXV0aG9yIGRhdGUiCittc2dzdHIgIu2YhOyerCDsi5zqsIHsnYQg7J6R7ISx7J6QIOyLnOqwgeycvOuhnCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk4IGJ1aWx0aW4vY29tbWl0LmM6MTQ2OCBidWlsdGluL21lcmdlLmM6MjM5CisjOiBidWlsdGluL3B1bGwuYzoxODMgYnVpbHRpbi9yZXZlcnQuYzoxMTIgYnVpbHRpbi90YWcuYzozOTkKK21zZ2lkICJrZXktaWQiCittc2dzdHIgIu2CpC1JRCIKKworIzogYnVpbHRpbi9hbS5jOjIyOTkKK21zZ2lkICJHUEctc2lnbiBjb21taXRzIgorbXNnc3RyICJHUEcg7ISc66qFIOy7pOuwiyIKKworIzogYnVpbHRpbi9hbS5jOjIzMDIKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAiKGdpdC1yZWJhc2Xrpbwg7JyE7ZWcIOuCtOu2gCDsmqnrj4QpIgorCisjOiBidWlsdGluL2FtLmM6MjMyMAorbXNnaWQgIiIKKyJUaGUgLWIvLS1iaW5hcnkgb3B0aW9uIGhhcyBiZWVuIGEgbm8tb3AgZm9yIGxvbmcgdGltZSwgYW5kXG4iCisiaXQgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdCBhbnltb3JlLiIKK21zZ3N0ciAiIgorIi1iLy0tYmluYXJ5IOyYteyFmOydgCDsmKTrnpwg7Iuc6rCEIOuPmeyViCDslYTrrLQg64+Z7J6R64+EIO2VmOyngCDslYrslZjsnLzrr4DroZwsIOydtFxuIgorIuyYteyFmOydgCDsoJzqsbDrkKAg7JiI7KCV7J6F64uI64ukLiDsnbTsoJwg7IKs7Jqp7ZWY7KeAIOuniOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzI3Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICLsnbjrjbHsiqQg7J296riw7JeQIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjIzNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICLsnbTsoIQg66as67Kg7J207IqkIOuUlOugie2EsOumrCAlc+ydtCjqsIApIOyVhOyngSDsnojqs6AgbWJveOulvCDsp4DsoJXtlojsirXri4jri6QuIgorCisjOiBidWlsdGluL2FtLmM6MjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3RyYXkgJXMgZGlyZWN0b3J5IGZvdW5kLlxuIgorIlVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIKK21zZ3N0ciAiIgorIuuyl+yWtOuCnCAlcyDrlJTroInthLDrpqzqsIAg67Cc6rKs65CY7JeI7Iq164uI64ukLlxuIgorIuygnOqxsO2VmOugpOuptCBcImdpdCBhbSAtLWFib3J0XCLrpbwg7IKs7Jqp7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9hbS5jOjIzNzIKK21zZ2lkICJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIgorbXNnc3RyICLtlbTshowg7J6R7JeF7J20IOynhO2WiSDspJHsnoXri4jri6QuIOuLpOyLnCDsi5zsnpHtlZjsp4Ag7JWK7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjgKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzzsmLXshZg+XSBbPO2MqOy5mD4uLi5dIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICInJXMnIOyVhOy5tOydtOu4jCDtjIzsnbzsnYQg66eM65OkIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAi7Lac66ClIOuwqe2WpeydhCDrj4zrprQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogVVJMIOyXhuuKlCDrpqzrqqjtirgiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjU4Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IEFDSy9OQUvqsIAg7JmA7JW8IO2VmOyngOunjCwg7ZSM65+s7IucIO2MqO2Ct+ydhCDrsJvslZjsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjQKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlOiDtlITroZzthqDsvZwg7Jik66WYIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2OAorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIgorbXNnc3RyICJnaXQgYXJjaGl2ZTog7YyM7J28IOuBneydhCDsmIjsg4HtlagiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMgorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTMKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8YmFkX3Rlcm0+IDxnb29kX3Rlcm0+IgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA867mE7KCV7IOBX+yaqeyWtD4gPOygleyDgV/smqnslrQ+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTQKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGVybSIKK21zZ3N0ciAiJyVzJ+ydgCjripQpIOyYrOuwlOuluCDsmqnslrTqsIAg7JWE64uZ64uI64ukLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHVzZSB0aGUgYnVpbHRpbiBjb21tYW5kICclcycgYXMgYSB0ZXJtIgorbXNnc3RyICLrgrTrtoAg66qF66C57Ja0ICclcyfsnYQo66W8KSDsmqnslrTroZwg7IKs7Jqp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIHRlcm0gJyVzJyIKK21zZ3N0ciAi7Jqp7Ja0ICclcyfsnZgg7J2Y66+466W8IOuwlOq/gCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NzEKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgIuuRkCDri6Trpbgg7Jqp7Ja066W8IOyCrOyaqe2VmOyLreyLnOyYpCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjc4Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGhlIGZpbGUgQklTRUNUX1RFUk1TIgorbXNnc3RyICJCSVNFQ1RfVEVSTVMg7YyM7J287J2EIOyXtCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTIwCittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAiJ2dpdCBiaXNlY3QgbmV4dCfrpbwg7IiY7ZaJ7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTIyCittc2dpZCAid3JpdGUgdGhlIHRlcm1zIHRvIC5naXQvQklTRUNUX1RFUk1TIgorbXNnc3RyICLsmqnslrTrpbwgLmdpdC9CSVNFQ1RfVEVSTVPsl5Ag7JSB64uI64ukIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTI0Cittc2dpZCAiY2xlYW51cCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICLsnbTrk7HrtoQg7IOB7YOc66W8IOygleumrO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjEyNgorbXNnaWQgImNoZWNrIGZvciBleHBlY3RlZCByZXZzIgorbXNnc3RyICLsmIjsg4HrkJwg66as67mE7KCE7J2EIO2ZleyduO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjEyOAorbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgIu2YhOyerCDsu6TrsIvsnYQg6rCA7KC47Jik64qUIOuMgOyLoCBCSVNFQ1RfSEVBROulvCDsl4XrjbDsnbTtirjtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNDMKK21zZ2lkICItLXdyaXRlLXRlcm1zIHJlcXVpcmVzIHR3byBhcmd1bWVudHMiCittc2dzdHIgIi0td3JpdGUtdGVybXMg7Ji17IWY7J2AIOuRkCDsnbjsnpDqsIAg7ZWE7JqU7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTQ3Cittc2dpZCAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgcmVxdWlyZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWJpc2VjdC1jbGVhbi1zdGF0ZSDsmLXshZjsnYAg7J247J6Q6rCAIO2VhOyalO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyOQorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJsYW1lIFs87Ji17IWYPl0gWzzrpqzruYTsoIQt7Ji17IWYPl0gWzzrpqzruYTsoIQ+XSBbLS1dIDztjIzsnbw+IgorCisjOiBidWlsdGluL2JsYW1lLmM6MzQKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAiPOumrOu5hOyghC3smLXshZg+7J2AIGdpdC1yZXYtbGlzdCgxKeyXkCDshKTrqoXrkJjslrQg7J6I7Iq164uI64ukIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGluZyBhIGNvbG9yOiAlcyIKK21zZ3N0ciAi7IOJ7J2EIOyYiOyDge2VqeuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MTEKK21zZ2lkICJtdXN0IGVuZCB3aXRoIGEgY29sb3IiCittc2dzdHIgIuyDieycvOuhnCDrgZ3rgpjslbwg7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JsYW1lLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgJyVzJyBpbiBjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVzIgorbXNnc3RyICJjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVz7JeQIOyemOuqu+uQnCDsg4nsnYQgKCclcycpIOustOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjcxNQorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIGJsYW1lLmNvbG9yaW5nIgorbXNnc3RyICJibGFtZS5jb2xvcmluZ+ydmCDqsJLsnbQg7Jis67CU66W07KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc4NgorbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgIuu4lOugiOyehCDtla3rqqnsnYQg7LC+7J6Q66eI7J6QIOygkOynhOyggeycvOuhnCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3ODcKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLqsIDsnqXsnpDrpqwg7Luk67CL7JeQIOuMgO2VtCDruYggU0hBLTHsnYQg7ZGc7Iuc7ZWp64uI64ukICjquLDrs7jqsJI6IOq6vOynkCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3ODgKK21zZ2lkICJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuy1nOyDgeychCDsu6TrsIvsnYQg6rCA7J6l7J6Q66asIOy7pOuwi+ycvOuhnCDst6jquIntlZjsp4Ag7JWK7Iq164uI64ukICjquLDrs7jqsJI6IOq6vOynkCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3ODkKK21zZ2lkICJTaG93IHdvcmsgY29zdCBzdGF0aXN0aWNzIgorbXNnc3RyICLsnpHsl4Ug67mE7JqpIO2GteqzhOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3OTAKK21zZ2lkICJGb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIuqwleygnOuhnCDsp4Ttlokg7IOB7Zmp7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5MQorbXNnaWQgIlNob3cgb3V0cHV0IHNjb3JlIGZvciBibGFtZSBlbnRyaWVzIgorbXNnc3RyICLruJTroIjsnoQg7ZWt66qp7JeQIOuMgO2VtCDstpzroKUg7KCQ7IiY66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5MgorbXNnaWQgIlNob3cgb3JpZ2luYWwgZmlsZW5hbWUgKERlZmF1bHQ6IGF1dG8pIgorbXNnc3RyICLsm5Drnpgg7YyM7J28IOydtOumhCDtkZzsi5wgKOq4sOuzuOqwkjog7J6Q64+ZKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5MworbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi7JuQ656YIOykhCDrsojtmLgg7ZGc7IucICjquLDrs7jqsJI6IO2VmOyngCDslYrsnYwpIgorCisjOiBidWlsdGluL2JsYW1lLmM6Nzk0Cittc2dpZCAiU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiIKK21zZ3N0ciAi7Lu07ZOo7YSwIOyymOumrOyaqeycvOuhnCDshKTqs4TrkJwg7ZiV7Iud7Jy866GcIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5NQorbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi7KSE66eI64ukIOy7pOuwiyDsoJXrs7TqsIAg7ZGc7Iuc65CY64qUIOyCrOyaqeyekOyaqSDtmJXsi53snLzroZwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JsYW1lLmM6Nzk2Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiZ2l0LWFubm90YXRl7JmAIOuPmeydvO2VnCDtmJXsi53snYQg7IKs7Jqp7ZWp64uI64ukICjquLDrs7jqsJI6IOq6vOynkCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3OTcKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuuCtOu2gCDtmJXsi53snLzroZwg7Iuc6rCB7J2EIO2RnOyLnO2VqeuLiOuLpCAo6riw67O46rCSOiDqurzsp5ApIgorCisjOiBidWlsdGluL2JsYW1lLmM6Nzk4Cittc2dpZCAiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLquLjqsowg7Luk67CLIFNIQTHsnYQg7ZGc7Iuc7ZWp64uI64ukICjquLDrs7jqsJI6IOq6vOynkCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3OTkKK21zZ2lkICJTdXBwcmVzcyBhdXRob3IgbmFtZSBhbmQgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLsnpHshLHsnpAg7J2066aE6rO8IOyLnOqwgeydhCDtkZzsi5ztlZjsp4Ag7JWK7Iq164uI64ukICjquLDrs7jqsJI6IOq6vOynkCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MDAKK21zZ2lkICJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuyekeyEseyekCDsnbTrpoQg64yA7Iug7JeQIOyghOyekOuplOydvOydhCDtkZzsi5ztlanri4jri6QgKOq4sOuzuOqwkjog6rq87KeQKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgwMQorbXNnaWQgIklnbm9yZSB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIgorbXNnc3RyICLqs7XrsLEg66y47J6QIOywqOydtOygkOydhCDrrLTsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MDIKK21zZ2lkICJjb2xvciByZWR1bmRhbnQgbWV0YWRhdGEgZnJvbSBwcmV2aW91cyBsaW5lIGRpZmZlcmVudGx5IgorbXNnc3RyICLrtojtlYTsmpTtlZwg66mU7YOA642w7J207YSw66W8IOyVnuydmCDspITqs7wg64uk66W06rKMIOyDieydhCDsuaDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MDMKK21zZ2lkICJjb2xvciBsaW5lcyBieSBhZ2UiCittc2dzdHIgIuykhOydtCDslrzrp4jrgpgg7Jik656YIOuQkOuKkOuDkOyXkCDrlLDrnbwg64uk66W06rKMIOyDieydhCDsuaDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MTAKK21zZ2lkICJVc2UgYW4gZXhwZXJpbWVudGFsIGhldXJpc3RpYyB0byBpbXByb3ZlIGRpZmZzIgorbXNnc3RyICJkaWZm66W8IO2WpeyDge2VmOuKlOuNsCDsi6Ttl5jsoIHsnbgg7Zy066as7Iqk7Yux7J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgxMgorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAi642UIOydvOy5mO2VmOuKlCDtla3rqqnsnYQg7LC+64qU642wIOuNlCDsi5zqsITsnYQg7IaM66qo7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODEzCittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICJnaXQtcmV2LWxpc3Trpbwg7Zi47Lac7ZWY64qUIOuMgOyLoCA87YyM7J28PuyXkOyEnCDrpqzruYTsoITsnYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODE0Cittc2dpZCAiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIKK21zZ3N0ciAiPO2MjOydvD7snZgg64K07Jqp7J2EIOy1nOyihSDsnbTrr7jsp4DroZwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODE1IGJ1aWx0aW4vYmxhbWUuYzo4MTYKK21zZ2lkICJzY29yZSIKK21zZ3N0ciAi7KCQ7IiYIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODE1Cittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAi7YyM7J28IOuCtOu2gOyZgCDtjIzsnbwg7IKs7J207J2YIOuzteyCrOuQnCDspITsnYQg7LC+7Iq164uI64ukIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODE2Cittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAi7YyM7J28IOuCtOu2gOyZgCDtjIzsnbwg7IKs7J207J2YIOyYruqyqOynhCDspITsnYQg7LC+7Iq164uI64ukIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODE3Cittc2dpZCAibixtIgorbXNnc3RyICJuLG0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MTcKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAibixt7KSEICgx67KIIOykhOu2gO2EsCDsi5zsnpEpIOyCrOydtOydmCDrspTsnITrp4wg7LKY66asIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY2Cittc2dpZCAiLS1wcm9ncmVzcyBjYW4ndCBiZSB1c2VkIHdpdGggLS1pbmNyZW1lbnRhbCBvciBwb3JjZWxhaW4gZm9ybWF0cyIKK21zZ3N0ciAiIgorIi0tcHJvZ3Jlc3Mg7Ji17IWY7J2AIC0taW5jcmVtZW50YWwg7Ji17IWY7J2064KYIO2PrOyKpOugiOyduCDtmJXsi53sl5DshJwg7IKs7Jqp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlCisjLiBtYXhpbXVtIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluCisjLiAiZ2l0IGJsYW1lIiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMQorIy4gbW9udGhzIGFnbyIsIHdoaWNoIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QKKyMuIGFtb25nIHZhcmlvdXMgZm9ybXMgb2YgcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0CisjLiB5b3VyIGxhbmd1YWdlIG1heSBuZWVkIG1vcmUgb3IgZmV3ZXIgZGlzcGxheQorIy4gY29sdW1ucy4KKyMuCisjOiBidWlsdGluL2JsYW1lLmM6OTE3Cittc2dpZCAiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIKK21zZ3N0ciAiNOuFhCAxMeuLrCDsoIQiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmUiCittc2dpZF9wbHVyYWwgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmVzIgorbXNnc3RyWzBdICIlcyDtjIzsnbzsl5DripQg7KSE7J20ICVsdeqwnCDrv5DsnoXri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoxMDQ5Cittc2dpZCAiQmxhbWluZyBsaW5lcyIKK21zZ3N0ciAi67iU66CI7J6EIOykhCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNworbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOyYteyFmD5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjgKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstbF0gWy1mXSA8YnJhbmNoLW5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOyYteyFmD5dIFstbF0gWy1mXSA867iM656c7LmYLeydtOumhD4gWzzsi5zsnpEt7KeA7KCQPl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjkKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstcl0gKC1kIHwgLUQpIDxicmFuY2gtbmFtZT4uLi4iCittc2dzdHIgImdpdCBicmFuY2ggWzzsmLXshZg+XSBbLXJdICgtZCB8IC1EKSA867iM656c7LmYLeydtOumhD4uLi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzAKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzzsmLXshZg+XSAoLW0gfCAtTSkgWzzqs7zqsbAt67iM656c7LmYPl0gPOyDiC3ruIzrnpzsuZg+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMxCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLWMgfCAtQykgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs87Ji17IWYPl0gKC1jIHwgLUMpIFs86rO86rGwLeu4jOuenOy5mD5dIDzsg4gt67iM656c7LmYPiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMgorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzzsmLXshZg+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMworbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzzsmLXshZg+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisiJyVzJyDruIzrnpzsuZjrpbwg7IKt7KCc7ZWp64uI64ukLiDsnbQg67iM656c7LmY64qUICclcyfsl5BcbiIKKyIgICAgICAgICDrs5HtlanrkJjsl4jsp4Drp4wsIEhFQUTsl5DripQg67OR7ZWp65CY7KeAIOyViuyVmOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorIiclcycg67iM656c7LmY66W8IOyCreygnO2VmOyngCDslYrsirXri4jri6QuIOydtCDruIzrnpzsuZjripQgJyVzJ+yXkFxuIgorIiAgICAgICAgIOuzke2VqeuQmOyngCDslYrslZjsp4Drp4wsIEhFQUTsl5DripQg67OR7ZWp65CY7JeI7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICInJXMn7JeQIOuMgO2VnCDsu6TrsIsg7Jik67iM7KCd7Yq466W8IOywvuyVhOuzvCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgcnVuICdnaXQgYnJhbmNoIC1EICVzJy4iCittc2dzdHIgIiIKKyInJXMnIOu4jOuenOy5mOqwgCDsmYTsoITtnogg67OR7ZWp65CY7KeAIOyViuyVmOyKteuLiOuLpC5cbiIKKyLsoJXrp5DroZwg7IKt7KCc7ZWY66Ck66m0ICdnaXQgYnJhbmNoIC1EICVzJyDrqoXroLnsnYQg7Iuk7ZaJ7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODEKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJjb25maWctZmlsZSDsl4XrjbDsnbTtirjqsIAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxMgorbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAiLWEg7Ji17IWY7J2EIC1kIOyYteyFmOqzvCDqsJnsnbQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjE4Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICJIRUFE7JeQIOuMgO2VnCDsu6TrsIsg7Jik67iM7KCd7Yq466W8IOywvuyVhOuzvCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnIGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIiclMiRzJyDsnITsuZjsl5Ag7LK07YGs7JWE7JuD7ZWcICclMSRzJyDruIzrnpzsuZjrpbwg7IKt7KCc7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICLrpqzrqqjtirgg7LaU7KCBICclcycg67iM656c7LmY6rCAIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIiclcycg67iM656c7LmY6rCAIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAi66as66qo7Yq4IOy2lOyggSAnJXMnIOu4jOuenOy5mOulvCDsgq3soJztlZjripTrjbAg7Jik66WYIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiJyVzJyDruIzrnpzsuZjrpbwg7IKt7KCc7ZWY64qU642wIOyYpOulmCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICLrpqzrqqjtirgg7LaU7KCBICclcycg67iM656c7LmY66W8IOyCreygnO2VqeuLiOuLpC4gKOqzvOqxsCAlcylcbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIiVzIOu4jOuenOy5mCDsgq3soJwgKOqzvOqxsCAlcykuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDE2IGJ1aWx0aW4vdGFnLmM6NTgKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAi7Y+s66e3IOusuOyekOyXtOydhCDtjIzsi7HtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIHJlYmFzZWQgYXQgJXMiCittc2dzdHIgIiVzIOu4jOuenOy5mOulvCAlcyDsnITsuZjsl5Ag66as67Kg7J207Iqk7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgYmlzZWN0ZWQgYXQgJXMiCittc2dzdHIgIiVzIOu4jOuenOy5mOulvCAlcyDsnITsuZjsl5DshJwgYmlzZWN07ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ3NAorbXNnaWQgImNhbm5vdCBjb3B5IHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAi67iM656c7LmYIOychOyXkCDsl4bsnLzrqbTshJwg7ZiE7J6sIOu4jOuenOy5mOulvCDrs7XsgqztlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDc2Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIuu4jOuenOy5mCDsnITsl5Ag7JeG7Jy866m07IScIO2YhOyerCDruIzrnpzsuZgg7J2066aE7J2EIOuwlOq/gCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAi7J6Y66q765CcIOu4jOuenOy5mCDsnbTrpoQ6ICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTE0Cittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIuu4jOuenOy5mCDsnbTrpoQg67CU6r646riwIOyLpO2MqCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MTYKK21zZ2lkICJCcmFuY2ggY29weSBmYWlsZWQiCittc2dzdHIgIuu4jOuenOy5mCDrs7Xsgqwg7Iuk7YyoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGEgY29weSBvZiBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIgorbXNnc3RyICLsnbTrpoTsnbQg7J6Y66q765CcICclcycg67iM656c7LmY7J2YIOuzteyCrOuzuOydhCDrp4zrk6Tsl4jsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICLsnbTrpoTsnbQg7J6Y66q765CcICclcycg67iM656c7LmY7J2YIOydtOumhOydhCDri6TrpbTqsowg67CU6r+J64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICLruIzrnpzsuZgg7J2066aE7J2EICVzKOycvCnroZwg67CU6r647KeA66eMLCBIRUFE66W8IOyXheuNsOydtO2KuO2VmOyngCDslYrsirXri4jri6QhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUzOAorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAi67iM656c7LmY7J2YIOydtOumhOydhCDrsJTqvrjsp4Drp4wsIGNvbmZpZy1maWxlIOyXheuNsOydtO2KuOqwgCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQwCittc2dpZCAiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIuu4jOuenOy5mOulvCDrs7Xsgqztlojsp4Drp4wsIGNvbmZpZy1maWxlIOyXheuNsOydtO2KuOqwgCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2hcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgc3RyaXBwZWQuXG4iCittc2dzdHIgIiIKKyLri6TsnYwg67iM656c7LmY7JeQIOuMgO2VnCDshKTrqoXsnYQg7JOw7Iut7Iuc7JikOlxuIgorIiAgJXNcbiIKKyInJWMnIOusuOyekOuhnCDsi5zsnpHtlZjripQg7KSE7J2AIOustOyLnOuQqeuLiOuLpC5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODkKK21zZ2lkICJHZW5lcmljIG9wdGlvbnMiCittc2dzdHIgIuydvOuwmCDsmLXshZgiCisKKyMgRklYTUU6IGdpdmUgdHdpY2U/CisjOiBidWlsdGluL2JyYW5jaC5jOjU5MQorbXNnaWQgInNob3cgaGFzaCBhbmQgc3ViamVjdCwgZ2l2ZSB0d2ljZSBmb3IgdXBzdHJlYW0gYnJhbmNoIgorbXNnc3RyICLtlbTsi5zsmYAg7KCc66qp7J2EIO2RnOyLnO2VmOqzoCwg7JeF7Iqk7Yq466a8IOu4jOuenOy5mOyXkCDrjIDtlZwg7JyE7LmY66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTIKK21zZ2lkICJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIgorbXNnc3RyICLsl6zrn6zqsIDsp4Ag7JWI64K0IOuplOyLnOyngOulvCDtkZzsi5ztlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU5MworbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICLstpTsoIEg66qo65Oc66W8IOyEpOygle2VqeuLiOuLpCAoZ2l0LXB1bGwoMSkg7LC46rOgKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTUKK21zZ2lkICJkbyBub3QgdXNlIgorbXNnc3RyICLsgqzsmqntlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU5NworbXNnaWQgInVwc3RyZWFtIgorbXNnc3RyICLsl4XsiqTtirjrprwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTk3Cittc2dpZCAiY2hhbmdlIHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICLsl4XsiqTtirjrprwg7KCV67O066W8IOuwlOq/ieuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTgKK21zZ2lkICJVbnNldCB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAi7JeF7Iqk7Yq466a8IOygleuztOulvCDtlbTsoJztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTk5Cittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICLsl6zrn6wg7IOJ7Jy866GcIOy2nOugpe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MDAKK21zZ2lkICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICLrpqzrqqjtirgg7LaU7KCBIOu4jOuenOy5mOyXkCDrjIDtlbQg64+Z7J6R7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYwMiBidWlsdGluL2JyYW5jaC5jOjYwNAorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIuy7pOuwi+ydtCDsnojripQg67iM656c7LmY66eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MDMgYnVpbHRpbi9icmFuY2guYzo2MDUKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLsu6TrsIvsnbQg65Ok7Ja07J6I7KeAIOyViuydgCDruIzrnpzsuZjrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYwOAorbXNnaWQgIlNwZWNpZmljIGdpdC1icmFuY2ggYWN0aW9uczoiCittc2dzdHIgIu2KueyglSBnaXQtYnJhbmNoIOuPmeyekToiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjA5Cittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIuumrOuqqO2KuOyZgCDroZzsu6zsnZgg67iM656c7LmYIOuqqeuhneydhCDrqqjrkZAg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxMQorbXNnaWQgImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIgorbXNnc3RyICLsmYTsoITtnogg67OR7ZWp65CcIOu4jOuenOy5mOulvCDsgq3soJztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjEyCittc2dpZCAiZGVsZXRlIGJyYW5jaCAoZXZlbiBpZiBub3QgbWVyZ2VkKSIKK21zZ3N0ciAi67iM656c7LmY66W8IOyCreygnO2VqeuLiOuLpCAo67OR7ZWp65CY7KeAIOyViuyVmOuNlOudvOuPhCkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjEzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgIuu4jOuenOy5mOyZgCDqt7ggcmVmbG9n66W8IOyYruq4sOqxsOuCmCDsnbTrpoTsnYQg67CU6r+J64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxNAorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIuuMgOyDgeydtCDsnbTrr7gg7J6I642U652864+EIOu4jOuenOy5mOulvCDsmK7quLDqsbDrgpgg7J2066aE7J2EIOuwlOq/ieuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTUKK21zZ2lkICJjb3B5IGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICLruIzrnpzsuZjsmYAg6re4IHJlZmxvZ+ulvCDrs7Xsgqztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjE2Cittc2dpZCAiY29weSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICLrjIDsg4HsnbQg7J2066+4IOyeiOuNlOudvOuPhCDruIzrnpzsuZjrpbwg67O17IKs7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxNworbXNnaWQgImxpc3QgYnJhbmNoIG5hbWVzIgorbXNnc3RyICLruIzrnpzsuZgg7J2066aEIOuqqeuhneydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjE4Cittc2dpZCAiY3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2ciCittc2dzdHIgIuu4jOuenOy5mOydmCByZWZsb2frpbwg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMAorbXNnaWQgImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICLruIzrnpzsuZjsnZgg7ISk66qF7J2EIO2OuOynke2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjEKK21zZ2lkICJmb3JjZSBjcmVhdGlvbiwgbW92ZS9yZW5hbWUsIGRlbGV0aW9uIgorbXNnc3RyICLqsJXsoJzroZwg66eM65Ok6rOgLCDsmK7quLDqsbDrgpgg7J2066aE7J2EIOuwlOq+uOqzoCwg7IKt7KCc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICLrs5HtlanrkJjripQg67iM656c7LmY66eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgIuuzke2VqeuQmOyngCDslYrripQg67iM656c7LmY66eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjQKK21zZ2lkICJsaXN0IGJyYW5jaGVzIGluIGNvbHVtbnMiCittc2dzdHIgIuuqqeuhneydhCDsl6zrn6wg7Je066GcIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjUgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MCBidWlsdGluL2xzLXJlbW90ZS5jOjcwCisjOiBidWlsdGluL3RhZy5jOjQxMgorbXNnaWQgImtleSIKK21zZ3N0ciAi7YKkIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQxIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzEKKyM6IGJ1aWx0aW4vdGFnLmM6NDEzCittc2dpZCAiZmllbGQgbmFtZSB0byBzb3J0IG9uIgorbXNnc3RyICLsoJXroKztlZwg6riw7KSA7J20IOuQmOuKlCDtlYTrk5wg7J2066aEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOCBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQzIGJ1aWx0aW4vbm90ZXMuYzo0MDgKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTEgYnVpbHRpbi9ub3Rlcy5jOjU3MSBidWlsdGluL25vdGVzLmM6NTc0CisjOiBidWlsdGluL3RhZy5jOjQxNQorbXNnaWQgIm9iamVjdCIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOQorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAi7ZW064u5IOyYpOu4jOygne2KuOydmCDruIzrnpzsuZjrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ5IGJ1aWx0aW4vdGFnLmM6NDIyCittc2dpZCAic29ydGluZyBhbmQgZmlsdGVyaW5nIGFyZSBjYXNlIGluc2Vuc2l0aXZlIgorbXNnc3RyICLsoJXroKzqs7wg7ZWE7YSw66eB7J2AIOuMgOyGjOusuOyekOulvCDqtazrtoTtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4IGJ1aWx0aW4vdGFnLmM6NDIwCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozOQorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgIuy2nOugpeyXkCDsgqzsmqntlaAg7ZiV7IudIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NSBidWlsdGluL2Nsb25lLmM6NzM3Cittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgIuugiO2NvOufsOyKpC/tl6Trk5wg7JWE656Y7JeQIEhFQUTqsIAg7JeG7Iq164uI64ukISIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NzgKK21zZ2lkICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIOuwjyAtLXZlcmJvc2Ug7Ji17IWY7J2AIO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjkzIGJ1aWx0aW4vYnJhbmNoLmM6NzQ1IGJ1aWx0aW4vYnJhbmNoLmM6NzU0Cittc2dpZCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgIuu4jOuenOy5mCDsnbTrpoTsnbQg7ZWE7JqU7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyMQorbXNnaWQgIkNhbm5vdCBnaXZlIGRlc2NyaXB0aW9uIHRvIGRldGFjaGVkIEhFQUQiCittc2dzdHIgIuu2hOumrOuQnCBIRUFE7JeQIOuMgO2VnCDshKTrqoXsnYQg67aA7Jes7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzI2Cittc2dpZCAiY2Fubm90IGVkaXQgZGVzY3JpcHRpb24gb2YgbW9yZSB0aGFuIG9uZSBicmFuY2giCittc2dzdHIgIuyXrOufrCDruIzrnpzsuZjsl5Ag64yA7ZWcIOyEpOuqheydhCDtjrjsp5HtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWl0IG9uIGJyYW5jaCAnJXMnIHlldC4iCittc2dzdHIgIuyVhOyngSAnJXMnIOu4jOuenOy5mOyXkCDsu6TrsIvsnbQg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gYnJhbmNoIG5hbWVkICclcycuIgorbXNnc3RyICLsnbTrpoTsnbQgJyVzJ+yduCDruIzrnpzsuZjqsIAg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTEKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyBmb3IgYSBjb3B5IG9wZXJhdGlvbiIKK21zZ3N0ciAi67O17IKsIOyekeyXheyXkCDrjIDtlbQg67iM656c7LmY6rCAIOuEiOustCDrp47sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzYwCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgIuydtOumhCDrsJTqvrjquLAg7J6R7JeF7JeQIOuMgO2VtCDsnbjsnpDqsIAg64SI66y0IOunjuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjUKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAi7IOIIOyXheyKpO2KuOumvOydhCDshKTsoJXtlZjripTrjbAg7J247J6Q6rCAIOuEiOustCDrp47sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3Qgc2V0IHVwc3RyZWFtIG9mIEhFQUQgdG8gJXMgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiIgorIkhFQUTsnZgg7JeF7Iqk7Yq466a87J2EICVzKOycvCnroZwg7ISk7KCV7ZWgIOyImCDsl4bsirXri4jri6QuIOyWtOuWpCDruIzrnpzsuZjrj4Qg6rCA66as7YKk7KeAIOyViuyKteuLiCIKKyLri6QuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc3MiBidWlsdGluL2JyYW5jaC5jOjc5NCBidWlsdGluL2JyYW5jaC5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaCAnJXMnIgorbXNnc3RyICLqt7jrn7Ag67iM656c7LmY6rCAICgnJXMnKSDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICInJXMnIOu4jOuenOy5mOqwgCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzg4Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHVuc2V0IHVwc3RyZWFtIgorbXNnc3RyICLsl4XsiqTtirjrprwg7ISk7KCV7J2EIO2VtOygnO2VmOuKlOuNsCDsnbjsnpDqsIAg64SI66y0IOunjuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTIKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisiSEVBROydmCDsl4XsiqTtirjrprwg7ISk7KCV7J2EIO2VtOygnO2VoCDsiJgg7JeG7Iq164uI64ukLiDslrTrlqQg67iM656c7LmY64+EIOqwgOumrO2CpOyngCDslYrsirXri4jri6QuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iCittc2dzdHIgIiclcycg67iM656c7LmY7JeQIOyXheyKpO2KuOumvCDsoJXrs7TqsIAg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxMworbXNnaWQgIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKyInZ2l0IGJyYW5jaCfsl5Ag64yA7ZW0IC1hIOuwjyAtciDsmLXshZjsnYAg67iM656c7LmYIOydtOumhOqzvCDqsJnsnbQg7JOw66m0IOyVnuuSpOqwgCDrp57sp4Ag7JWK7Iq1IgorIuuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTYKK21zZ2lkICIiCisidGhlICctLXNldC11cHN0cmVhbScgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgJy0tdHJhY2snIG9yICIKKyInLS1zZXQtdXBzdHJlYW0tdG8nIGluc3RlYWQuIgorbXNnc3RyICIiCisiJy0tc2V0LXVwc3RyZWFtJyDsmLXshZjsnYAg642UIOydtOyDgSDsgqzsmqnrkJjsp4Ag7JWK6rOgIOygnOqxsOuQoCDsmIjsoJXsnoXri4jri6QuICctLXRyYWNrJyDrmJAiCisi64qUICctLXNldC11cHN0cmVhbS10bycg7Ji17IWY7J2EIOyCrOyaqe2VtCDrs7Tsi63si5zsmKQuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAiJXMg7KCV7IOB7J6F64uI64ukXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NTgKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICLrsojrk6TsnYQg66eM65Oc66Ck66m0IOyggOyepeyGjOqwgCDtlYTsmpTtlanri4jri6QuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjYyCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICLrsojrk6TsnYQg7ZW07KCc7ZWY66Ck66m0IOyggOyepeyGjOqwgCDtlYTsmpTtlanri4jri6QuIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTI1Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHBhdGg+XSA8b2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDzsooXrpZg+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD086rK966GcPl0gPOyYpOu4jOygne2KuD4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1MjYKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTYzCittc2dpZCAiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorbXNnc3RyICI87KKF66WYPuuKlCDri6TsnYwg7KSRIO2VmOuCmOqwgCDrkKAg7IiYIOyeiOyKteuLiOuLpDogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NjQKK21zZ2lkICJzaG93IG9iamVjdCB0eXBlIgorbXNnc3RyICLsmKTruIzsoJ3tirgg7KKF66WY66W8IOu0heuLiOuLpCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU2NQorbXNnaWQgInNob3cgb2JqZWN0IHNpemUiCittc2dzdHIgIuyYpOu4jOygne2KuCDtgazquLDrpbwg67SF64uI64ukIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTY3Cittc2dpZCAiZXhpdCB3aXRoIHplcm8gd2hlbiB0aGVyZSdzIG5vIGVycm9yIgorbXNnc3RyICLsmKTrpZjqsIAg7JeG7J2EIOuVjCAw7J2EIOumrO2EtO2VmOqzoCDrgZ3rg4Xri4jri6QiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NjgKK21zZ2lkICJwcmV0dHktcHJpbnQgb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAi7Jik67iM7KCd7Yq47J2YIOuCtOyaqeydhCDsmIjsgZjqsowg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTcwCittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgIuu4lOuhrSDsmKTruIzsoJ3tirjsl5Ag64yA7ZW07ISc64qULCDsmKTruIzsoJ3tirjsnZgg64K07Jqp7JeQIOuMgO2VtCB0ZXh0Y29uduulvCDsi6Ttlontlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NzIKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gZmlsdGVycyBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICLruJTroa0g7Jik67iM7KCd7Yq47JeQIOuMgO2VtOyEnOuKlCwg7Jik67iM7KCd7Yq47J2YIOuCtOyaqeyXkCDrjIDtlbQg7ZWE7YSw66W8IOyLpO2Wie2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU3MyBnaXQtc3VibW9kdWxlLnNoOjg5NAorbXNnaWQgImJsb2IiCittc2dzdHIgIuu4lOuhrSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU3NAorbXNnaWQgInVzZSBhIHNwZWNpZmljIHBhdGggZm9yIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorbXNnc3RyICItLXRleHRjb252Ly0tZmlsdGVycyDsmLXshZjsl5Ag6rK966Gc66W8IOyngOygle2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU3NgorbXNnaWQgImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIKK21zZ3N0ciAiLXMg67CPIC10IOyYteyFmOydtCDshpDsg4HrkJwg7Jik67iM7KCd7Yq47JeQIOuMgO2VtCDrj5nsnpHtlZjrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTc3Cittc2dpZCAiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IgorbXNnc3RyICItLWJhdGNoIOy2nOugpeyXkCDrjIDtlbQg67KE7Y2866eB7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTc5Cittc2dpZCAic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLtkZzspIAg7J6F66Cl7JeQ7IScIOyeheugpeuQnCDsmKTruIzsoJ3tirjsnZgg7KCV67O07JmAIOuCtOyaqeydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1ODIKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIu2RnOykgCDsnoXroKXsl5DshJwg7J6F66Cl65CcIOyYpOu4jOygne2KuOydmCDsoJXrs7Trpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTg1Cittc2dpZCAiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIgorbXNnc3RyICIiCisi7Yq466asIOuCtOu2gOydmCDsi6zrs7zrpq0g66eB7YGs66W8IOuUsOudvOqwkeuLiOuLpCAoLS1iYXRjaCDrmJDripQgLS1iYXRjaC1jaGVja+yZgCDqsJnsnbQg7IKs7JqpKSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU4NworbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgIi0tYmF0Y2gg65iQ64qUIC0tYmF0Y2gtY2hlY2vsl5DshJwg66qo65OgIOyYpOu4jOygne2KuOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjEyCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA87IaN7ISxPi4uLl0gWy0tXSA86rK966Gc7J2066aEPi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTMKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA87IaN7ISxPi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIwCittc2dpZCAicmVwb3J0IGFsbCBhdHRyaWJ1dGVzIHNldCBvbiBmaWxlIgorbXNnc3RyICLtjIzsnbzsl5Ag7ISk7KCV65CcIOuqqOuToCDsho3shLHsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMQorbXNnaWQgInVzZSAuZ2l0YXR0cmlidXRlcyBvbmx5IGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLsnbjrjbHsiqTsl5DshJzrp4wgLmdpdGF0dHJpYnV0ZXPrpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI0IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDAKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi7ZGc7KSAIOyeheugpeyXkOyEnCDtjIzsnbwg7J2066aE7J2EIOydveyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjQgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNgorbXNnaWQgInRlcm1pbmF0ZSBpbnB1dCBhbmQgb3V0cHV0IHJlY29yZHMgYnkgYSBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJOVUwg66y47J6Q66W8IOq4sOykgOycvOuhnCDsnpDro4wg7J6F66ClIOuwjyDstpzroKXsnYQg66mI7Lal64uI64ukIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIwIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTEzIGJ1aWx0aW4vZ2MuYzo1MDAKK21zZ2lkICJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIuynhO2WiSDsg4Htmakg7ZGc7Iuc66W8IO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjgKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBpbnB1dCBwYXRocyIKK21zZ3N0ciAi7J287LmY7ZWY7KeAIOyViuuKlCDsnoXroKUg6rK966Gc66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzozMAorbXNnaWQgImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIgorbXNnc3RyICLqsoDsgqztlaAg65WMIOyduOuNseyKpOulvCDrrLTsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTU5Cittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiLS1zdGRpbuycvOuhnCDqsr3roZwg7J2066aE7J2EIOyngOygle2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MgorbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICIteiDsmLXshZjsnYAgLS1zdGRpbiDsmLXshZjqs7wg6rCZ7J20IOyNqOyVvOunjCDsnZjrr7jqsIAg7J6I7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2NAorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkIgorbXNnc3RyICLqsr3roZzrpbwg7KeA7KCV7ZWY7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjgKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAiLS1xdWlldCDsmLXshZjsnYAg7ZWY64KY7J2YIOqyveuhnCDsnbTrpoTqs7wg6rCZ7J20IOyNqOyVvCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTcwCittc2dpZCAiY2Fubm90IGhhdmUgYm90aCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UiCittc2dzdHIgIi0tcXVpZXQg67CPIC0tdmVyYm9zZSDsmLXshZjsnYQg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MworbXNnaWQgIi0tbm9uLW1hdGNoaW5nIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXZlcmJvc2UiCittc2dzdHIgIi0tbm9uLW1hdGNoaW5nIOyYteyFmOydgCAtLXZlcmJvc2Ug7Ji17IWY6rO8IOqwmeydtCDsjajslbwg7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo5Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stbWFpbG1hcCBbPOyYteyFmD5dIDzsl7Drnb3sspg+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoxNAorbXNnaWQgImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICLrmJAg7Jew65297LKY66W8IO2RnOykgCDsnoXroKXsl5DshJwg7J297Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29udGFjdDogJXMiCittc2dzdHIgIuyXsOudveyymOulvCDtjIzsi7HtlaAg7IiYIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjQ4Cittc2dpZCAibm8gY29udGFjdHMgc3BlY2lmaWVkIgorbXNnc3RyICLsl7Drnb3sspjrpbwg7KeA7KCV7ZWY7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjEyOAorbXNnaWQgImdpdCBjaGVja291dC1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2tvdXQtaW5kZXggWzzsmLXshZg+XSBbLS1dIFs87YyM7J28Pi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNDMKK21zZ2lkICJzdGFnZSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzIG9yIGFsbCIKK21zZ3N0ciAi7Iqk7YWM7J207KeA64qUIDHsl5DshJwgMyDsgqzsnbTsnZgg6rCS7J206rGw64KYIGFsbOydtOyWtOyVvCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNTkKK21zZ2lkICJjaGVjayBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAi7J24642x7Iqk7J2YIOuqqOuToCDtjIzsnbzsnYQg6rCA7KC47Ji164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTYwCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICLquLDsobQg7YyM7J287J2EIOqwleygnOuhnCDrja7slrQg7JSB64uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTYyCittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAi6riw7KG0IO2MjOydvOqzvCDsnbjrjbHsiqTsl5Ag7JeG64qUIO2MjOydvOyXkCDrjIDtlbQg6rK96rOg7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NAorbXNnaWQgImRvbid0IGNoZWNrb3V0IG5ldyBmaWxlcyIKK21zZ3N0ciAi7IOIIO2MjOydvOydhCDqsIDsoLjsmKTsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY2Cittc2dpZCAidXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGZpbGUiCittc2dzdHIgIuyduOuNseyKpCDtjIzsnbzsnZggc3RhdCDsoJXrs7Trpbwg7JeF642w7J207Yq47ZWp64uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTcwCittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLtkZzspIAg7J6F66Cl7JeQ7IScIOqyveuhnOydmCDrqqnroZ3snYQg7J297Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTcyCittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICLrgrTsmqnsnYQg7J6E7IucIO2MjOydvOyXkCDslIHri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzMgYnVpbHRpbi9jb2x1bW4uYzozMQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMTkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjI3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTkxCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjEwCittc2dpZCAic3RyaW5nIgorbXNnc3RyICLrrLjsnpDsl7QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzQKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICLtjIzsnbzsnYQg66eM65OkIOuVjCwg7JWe7JeQIDzrrLjsnpDsl7Q+7J2EIOu2meyeheuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NgorbXNnaWQgImNvcHkgb3V0IHRoZSBmaWxlcyBmcm9tIG5hbWVkIHN0YWdlIgorbXNnc3RyICLsp4DsoJXtlZwg7Iqk7YWM7J207KeA7JeQ7IScIO2MjOydvOydhCDrs7XsgqztlbQg7Ji164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjcKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBbPOyYteyFmD5dIDzruIzrnpzsuZg+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjgKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gWzxicmFuY2g+XSAtLSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBjaGVja291dCBbPOyYteyFmD5dIFs867iM656c7LmYPl0gLS0gPO2MjOydvD4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzYgYnVpbHRpbi9jaGVja291dC5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAiJyVzJyDqsr3roZzsl5Ag7Jqw66as7Kq9IOuyhOyghOydtCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzggYnVpbHRpbi9jaGVja291dC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICInJXMnIOqyveuhnOyXkCDsg4HrjIDtjrgg67KE7KCE7J20IOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICInJXMnIOqyveuhnOyXkCDtlYTsmpTtlZwg66qo65OgIOuyhOyghOydtCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICInJXMnIOqyveuhnOyXkCDtlYTsmpTtlZwg67KE7KCE7J20IOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAiJyVzJyDqsr3roZw6IOuzke2Vqe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgbWVyZ2UgcmVzdWx0IGZvciAnJXMnIgorbXNnc3RyICInJXMn7JeQIOuMgO2VnCDrs5Htlakg6rKw6rO866W8IOy2lOqwgO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjUzIGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTYgYnVpbHRpbi9jaGVja291dC5jOjI1OQorIzogYnVpbHRpbi9jaGVja291dC5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiCittc2dzdHIgIiclcycg7Ji17IWY7J2AIOyXheuNsOydtO2KuO2VmOuKlCDqsr3roZzsl5DshJwg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjUgYnVpbHRpbi9jaGVja291dC5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiclcycg7Ji17IWY7J2AICVzIOyYteyFmOqzvCDqsJnsnbQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIgorbXNnc3RyICLqsr3roZzrpbwg7JeF642w7J207Yq47ZWY6rOgICclcycg67iM656c7LmY66GcIOyghO2ZmO2VmOuKlCDsnbzsnYAg64+Z7Iuc7JeQIO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM0MCBidWlsdGluL2NoZWNrb3V0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAiJyVzJyDqsr3roZzrpbwg67OR7ZWp7ZWY7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjUwNgorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICLtmITsnqwg7J24642x7Iqk66W8IOuovOyggCDtlbTqsrDtlbTslbwg7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICInJXMn7JeQIOuMgO2VtCByZWZsb2ftlaAg7IiYIOyXhuyKteuLiOuLpDogJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY4NAorbXNnaWQgIkhFQUQgaXMgbm93IGF0IgorbXNnc3RyICJIRUFE7J2YIO2YhOyerCDsnITsuZjripQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2ODggYnVpbHRpbi9jbG9uZS5jOjY5MQorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgSEVBRCIKK21zZ3N0ciAiSEVBROulvCDsl4XrjbDsnbTtirjtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY5MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICInJXMnIOu4jOuenOy5mCDrpqzshYtcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAi7J2066+4ICclcyfsl5Ag7J6I7Iq164uI64ukXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiclcycg67iM656c7LmY66GcIOyghO2ZmO2VmOqzoCDrpqzshYvtlanri4jri6RcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjcwMSBidWlsdGluL2NoZWNrb3V0LmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLsg4jroZwg66eM65OgICclcycg67iM656c7LmY66GcIOyghO2ZmO2VqeuLiOuLpFxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiclcycg67iM656c7LmY66GcIOyghO2ZmO2VqeuLiOuLpFxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4g6re466as6rOgICVk6rCcIOuNlC5cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjc2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorIuqyveqzoDog67iM656c7LmYIOykkeyXkCDslYTrrLTqsoPsl5Drj4Qg7Jew6rKw65CY7KeAIOyViuydgCDsu6TrsIvsnbQg65Kk7JeQXG4iCisiJWTqsJwg7J6I7Iq164uI64ukOlxuIgorIlxuIgorIiVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgaXQgYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ2lkX3BsdXJhbCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzBdICIiCisi7IOIIOu4jOuenOy5mOulvCDrp4zrk6TslrTshJwg7J20IOy7pOuwi+ydhCDsoIDsnqXtlZjqs6Ag7Iu27Jy866m0LCDsp4DquIgg64uk7J2M6rO8XG4iCisi6rCZ7J20IO2VoCDsiJgg7J6I7Iq164uI64ukOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDzsg4gt67iM656c7LmYLeydtOumhD4gJXNcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgxMQorbXNnaWQgImludGVybmFsIGVycm9yIGluIHJldmlzaW9uIHdhbGsiCittc2dzdHIgIuumrOu5hOyghCB3YWxr7JeQIOuCtOu2gCDsmKTrpZgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4MTUKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAi7J207KCEIEhFQUQg7JyE7LmY64qUIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODQzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDQxCittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAi7ZiE7J6sIOychOy5mOqwgCDrp4zrk6Qg7JiI7KCV7J24IOu4jOuenOy5mOyXkCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iCittc2dzdHIgIu2VmOuCmOydmCDroIjtjbzrn7DsiqTrp4wg7KeA7KCV7ZW07JW8IO2VmOyngOunjCAlZOqwnOulvCDsp4DsoJXtlojsirXri4jri6QuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTg3IGJ1aWx0aW4vd29ya3RyZWUuYzoyNDAgYnVpbHRpbi93b3JrdHJlZS5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIuyemOuqu+uQnCDroIjtjbzrn7DsiqQ6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiCittc2dzdHIgIuugiO2NvOufsOyKpOqwgCDtirjrpqzqsIAg7JWE64uZ64uI64ukOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTUKK21zZ2lkICJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAi67iM656c7LmY66W8IOyghO2ZmO2VmOuKlOuNsCDqsr3roZzrpbwg7IKs7Jqp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDU4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIiclcycg7Ji17IWY7J2AIOu4jOuenOy5mOulvCDsoITtmZjtlaAg65WMIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA2NiBidWlsdGluL2NoZWNrb3V0LmM6MTA2OSBidWlsdGluL2NoZWNrb3V0LmM6MTA3NAorIzogYnVpbHRpbi9jaGVja291dC5jOjEwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIiclcycg7Ji17IWY7J2AICclcycg7Ji17IWY6rO8IOqwmeydtCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0ICclcyciCittc2dzdHIgIuu4jOuenOy5mOulvCDsu6TrsIvsnbQg7JWE64uMICclcyco7Jy8KeuhnCDsoITtmZjtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMTQgYnVpbHRpbi9jaGVja291dC5jOjExMTYgYnVpbHRpbi9jbG9uZS5jOjExOAorIzogYnVpbHRpbi9yZW1vdGUuYzoxNjcgYnVpbHRpbi9yZW1vdGUuYzoxNjkgYnVpbHRpbi93b3JrdHJlZS5jOjQzMworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzNQorbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAi67iM656c7LmYIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTExNQorbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICLsg4gg67iM656c7LmY66W8IOunjOuTpOqzoCDqsIDsoLjsmLXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTE3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAi67iM656c7LmY66W8IOunjOuTpOqxsOuCmCDrpqzshYvtlZjqs6Ag6rCA7KC47Ji164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTExOAorbXNnaWQgImNyZWF0ZSByZWZsb2cgZm9yIG5ldyBicmFuY2giCittc2dzdHIgIuyDiCDruIzrnpzsuZjsl5Ag64yA7ZWcIHJlZmxvZ+ulvCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTE5IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzcKK21zZ2lkICJkZXRhY2ggSEVBRCBhdCBuYW1lZCBjb21taXQiCittc2dzdHIgIkhFQUTrpbwg7ZW064u5IOy7pOuwi+yXkOyEnCDrtoTrpqztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTIwCittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgIuyDiCDruIzrnpzsuZjsl5Ag64yA7ZWcIOyXheyKpO2KuOumvCDsoJXrs7Trpbwg7ISk7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEyMgorbXNnaWQgIm5ldy1icmFuY2giCittc2dzdHIgIuyDiC3ruIzrnpzsuZgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTIyCittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICLsg4HsnIQg67iM656c7LmY6rCAIOyXhuuKlCDsg4gg67iM656c7LmYIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEyMworbXNnaWQgImNoZWNrb3V0IG91ciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAi67OR7ZWp65CY7KeAIOyViuydgCDtjIzsnbzsl5Ag64yA7ZW0IOyasOumrOyqvSDrsoTsoITsnYQg6rCA7KC47Ji164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEyNQorbXNnaWQgImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICLrs5HtlanrkJjsp4Ag7JWK7J2AIO2MjOydvOyXkCDrjIDtlbQg7IOB64yA7Y64IOuyhOyghOydhCDqsIDsoLjsmLXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTI3Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgIuqwleygnOuhnCDssrTtgazslYTsm4Ptlanri4jri6QgKOuhnOy7rOyXkOyEnCDsiJjsoJXtlZwg7IKs7ZWt7J2EIOuyhOumveuLiOuLpCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTI5Cittc2dpZCAicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giCittc2dzdHIgIuyDiCDruIzrnpzsuZjsl5Ag64yA7ZW0IDMt67Cp7ZalIOuzke2VqeydhCDsiJjtlontlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTMxIGJ1aWx0aW4vbWVyZ2UuYzoyNDEKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgIuustOyLnO2VmOuKlCDtjIzsnbzsnYQg7JeF642w7J207Yq47ZWp64uI64ukICjquLDrs7jqsJIpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzMyBidWlsdGluL2xvZy5jOjE0OTkgcGFyc2Utb3B0aW9ucy5oOjI2NAorbXNnaWQgInN0eWxlIgorbXNnc3RyICLsiqTtg4DsnbwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM0Cittc2dpZCAiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIKK21zZ3N0ciAi7Lap64+MIOyKpO2DgOydvCAobWVyZ2Ug65iQ64qUIGRpZmYzKSIKKworIyBGSVhNRTog7J2Y66+4IOu2iOuqhQorIzogYnVpbHRpbi9jaGVja291dC5jOjExMzcKK21zZ2lkICJkbyBub3QgbGltaXQgcGF0aHNwZWNzIHRvIHNwYXJzZSBlbnRyaWVzIG9ubHkiCittc2dzdHIgIuqyveuhnOuqheyEuOulvCDrk5zrrLgg7ZWt66qp7JeQ66eMIOygnO2VnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM5Cittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgIidnaXQgY2hlY2tvdXQgPOyXhuuKlC3ruIzrnpzsuZg+J+yXkCDrjIDtlbQg7LaU7Lih7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0MQorbXNnaWQgImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIKK21zZ3N0ciAi64uk66W4IOyekeyXhe2PtOuNlOyXkCDso7zslrTsp4Qg66CI7Y2865+w7Iqk6rCAIOyeiOuKlOyngCDtmZXsnbjtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0NSBidWlsdGluL2Nsb25lLmM6ODUgYnVpbHRpbi9mZXRjaC5jOjE0OQorIzogYnVpbHRpbi9tZXJnZS5jOjIzOCBidWlsdGluL3B1bGwuYzoxMjggYnVpbHRpbi9wdXNoLmM6NTcyCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NAorbXNnaWQgImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi6rCV7KCc66GcIOynhO2WiSDsg4HtmansnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE3NQorbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWIsIC1CIOuwjyAtLW9ycGhhbiDsmLXshZjsnYAg7ISc66GcIO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTkyCittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICItLXRyYWNrIOyYteyFmOydgCDruIzrnpzsuZgg7J2066aE7J20IO2VhOyalO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExOTcKK21zZ2lkICJNaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIuu4jOuenOy5mCDsnbTrpoTsnbQg7JeG7Iq164uI64ukLiAtYiDsmLXshZjsnYQg7IKs7Jqp7ZW0IOuztOyLreyLnOyYpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMzMKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAi6rK966GcIOuqheyEuOqwgCDsnpjrqrvrkJjsl4jsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIiclcyfsnYAo64qUKSDsu6TrsIvsnbQg7JWE64uI6rOgIOyXrOq4sOyXkOyEnCAnJXMnIOu4jOuenOy5mOulvCDrp4zrk6Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIOyYteyFmOydgCDqsr3roZwg7J247J6Q66W8IOuwm+yngCDslYrsirXri4jri6QgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNDgKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSDrsI8gLS1tZXJnZSDsmLXshZjsnYAg7J24642x7Iqk7JeQ7IScXG4iCisi6rCA7KC47JisIOqyveyasOyXkOuKlCDshJzroZwg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyNgorbXNnaWQgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA87Yyo7YS0Pl0gWy14IHwgLVhdIFstLV0gPOqyveuhnD4uLi4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlc1xuIgorbXNnc3RyICIlcyDsoJzqsbBcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICIlcyDsoJzqsbDtlaAg7JiI7KCVXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIiVzIOyggOyepeyGjCDqsbTrhIjrnIBcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICIlcyDsoIDsnqXshowg6rG064SI65u4IOyYiOyglVxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiJXMg7KCc6rGw7JeQIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwMiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nXG4iCittc2dzdHIgIiIKKyLtlITroaztlITtirgg64+E7JuA66eQOlxuIgorIjEgICAgICAgICAgLSDtlbTri7kg67KI7Zi47J2YIO2VreuqqeydhCDshKDtg51cbiIKKyJmb28gICAgICAgIC0g7Jyg7J287ZWcIOygkeuRkOyWtOyXkCDtlbTri7ntlZjripQg7ZWt66qpIOyEoO2DnVxuIgorIiAgICAgICAgICAgLSAo67mIIOyeheugpSkg7ISg7YOd7ZWY7KeAIOyViuydjFxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzA2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZ1xuIgorbXNnc3RyICIiCisi7ZSE66Gs7ZSE7Yq4IOuPhOybgOunkDpcbiIKKyIxICAgICAgICAgIC0g7ZW064u5IOuyiO2YuOydmCDtla3rqqnsnYQg7ISg7YOdXG4iCisiMy01ICAgICAgICAtIO2VtOuLuSDrspTsnITsnZgg7ZWt66qp7J2EIOyEoO2DnVxuIgorIjItMyw2LTkgICAgLSDsl6zrn6wg6rCcIOuylOychOulvCDshKDtg51cbiIKKyJmb28gICAgICAgIC0g7Jyg7J287ZWcIOygkeuRkOyWtOyXkCDtlbTri7ntlZjripQg7ZWt66qpIOyEoO2DnVxuIgorIi0uLi4gICAgICAgLSDtlbTri7kg7ZWt66qpIOyEoO2DnSDtlbTsoJxcbiIKKyIqICAgICAgICAgIC0g66qo65OgIO2VreuqqSDshKDtg51cbiIKKyIgICAgICAgICAgIC0gKOu5iCDsnoXroKUpIOyEoO2DnSDrp4jsuahcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjUyMiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU1NAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NTkKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpP1xuIgorbXNnc3RyICLslrTrnbzrnbwgKCVzKT9cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjY2NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnB1dCBpZ25vcmUgcGF0dGVybnM+PiAiCittc2dzdHIgIuustOyLnO2VoCDtjKjthLTsnYQg7J6F66Cl7ZWY7Iut7Iuc7JikPj4gIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICLqsr3qs6A6IOuLpOydjOyXkCDtlbTri7ntlZjripQg7ZWt66qp7J2EIOywvuydhCDsiJgg7JeG7Iq164uI64ukOiAlcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcyMgorbXNnaWQgIlNlbGVjdCBpdGVtcyB0byBkZWxldGUiCittc2dzdHIgIuyCreygnO2VoCDtla3rqqnsnYQg7ISg7YOd7ZWY7Iut7Iuc7JikIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGtlZXAgW3kvTl0gYXMgaXMKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZlICVzIFt5L05dPyAiCittc2dzdHIgIiVzIOygnOqxsO2VqeuLiOq5jCBbeS9OXT8gIgorCisjOiBidWlsdGluL2NsZWFuLmM6Nzg4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcxNworIywgYy1mb3JtYXQKK21zZ2lkICJCeWUuXG4iCittc2dzdHIgIuuBnS5cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjc5NgorbXNnaWQgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gc3RhcnQgY2xlYW5pbmdcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gZXhjbHVkZSBpdGVtcyBmcm9tIGRlbGV0aW9uXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIHNlbGVjdCBpdGVtcyB0byBiZSBkZWxldGVkIGJ5IG51bWJlcnNcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0gY29uZmlybSBlYWNoIGRlbGV0aW9uIChsaWtlIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gc3RvcCBjbGVhbmluZ1xuIgorImhlbHAgICAgICAgICAgICAgICAgLSB0aGlzIHNjcmVlblxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBoZWxwIGZvciBwcm9tcHQgc2VsZWN0aW9uIgorbXNnc3RyICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIOyngOyasOq4sCDsi5zsnpFcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gZXhjbHVkZSBpdGVtcyBmcm9tIGRlbGV0aW9uXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIOyCreygnO2VoCDtla3rqqnsnYQg67KI7Zi466GcIOyEoO2DnVxuIgorImFzayBlYWNoICAgICAgICAgICAgLSDsgq3soJwg7ZWt66qp7J2EIChcInJtIC1pXCIg7LKY65+8KSDtlZjrgpjtlZjrgpgg7ZmV7J24XG4iCisicXVpdCAgICAgICAgICAgICAgICAtIOyngOyasOq4sCDspJHsp4BcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0g7J20IO2ZlOuptCDtkZzsi5xcbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0g7ZSE66Gs7ZSE7Yq4IOyEoO2DnSDrj4Tsm4Drp5AiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MjMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzkzCittc2dpZCAiKioqIENvbW1hbmRzICoqKiIKK21zZ3N0ciAiKioqIOuqheuguSAqKioiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MjQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzkwCittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgIuustOyXh+ydhCDtlaDquYzsmpQiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MzIKK21zZ2lkICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIKK21zZ2lkX3BsdXJhbCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbXM6IgorbXNnc3RyWzBdICLri6TsnYwg7ZWt66qp7J2EIOygnOqxsO2VoCDsmIjsoJXsnoXri4jri6Q6IgorCisjOiBidWlsdGluL2NsZWFuLmM6ODQ4Cittc2dpZCAiTm8gbW9yZSBmaWxlcyB0byBjbGVhbiwgZXhpdGluZy4iCittc2dzdHIgIuyngOyauCDtjIzsnbzsnbQg7J207KCcIOyXhuycvOuvgOuhnCDrgZ3rg4Xri4jri6QuIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTEwCittc2dpZCAiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiCittc2dzdHIgIuygnOqxsO2VoCDtjIzsnbwg7J2066aE7J2EIO2RnOyLnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTIKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAi6rCV7KCcIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTEzCittc2dpZCAiaW50ZXJhY3RpdmUgY2xlYW5pbmciCittc2dzdHIgIuuMgO2ZlO2YlSDsp4DsmrDquLAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTUKK21zZ2lkICJyZW1vdmUgd2hvbGUgZGlyZWN0b3JpZXMiCittc2dzdHIgIuyghOyytCDrlJTroInthLDrpqwg7KCc6rGwIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE2IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzMgYnVpbHRpbi9kZXNjcmliZS5jOjUzNQorIzogYnVpbHRpbi9ncmVwLmM6ODcxIGJ1aWx0aW4vbG9nLmM6MTU3IGJ1aWx0aW4vbG9nLmM6MTU5CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ4IGJ1aWx0aW4vbmFtZS1yZXYuYzozOTcgYnVpbHRpbi9uYW1lLXJldi5jOjM5OQorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3NgorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgIu2MqO2EtCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNworbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICLqt5zsuZnsnYQg66y07Iuc7ZWY66Ck66m0IDztjKjthLQ+7J2EIOy2lOqwgO2VmOyLreyLnOyYpCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxOAorbXNnaWQgInJlbW92ZSBpZ25vcmVkIGZpbGVzLCB0b28iCittc2dzdHIgIuustOyLnO2VnCDtjIzsnbzrj4Qg7KCc6rGwIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTIwCittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAi66y07Iuc7ZWcIO2MjOydvOunjCDsoJzqsbAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzgKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IOuwjyAtWCDsmLXshZjsnYAg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTQyCittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBzZXQgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgcmVmdXNpbmcgdG8gIgorImNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNl6rCAIHRydWXroZwg7ISk7KCV65CY7JeI6rOgIC1pLCAtbiwgLWYg7Ji17IWYIOykkSDtlZjrgpjrj4Qg7JOw7KeAIOyViuyVmOyKtSIKKyLri4jri6QuIOyngOyasOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDUKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKyJyZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSDquLDrs7jqsJLsnbQgdHJ1ZeydtOqzoCAtaSwgLW4sIC1mIOyYteyFmCDspJEg7ZWY64KY64+EIOyTsOyngCDslYrslZjsirXri4giCisi64ukLiDsp4DsmrDsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDIKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs87Ji17IWYPl0gWy0tXSA87KCA7J6l7IaMPiBbPOuUlOugie2EsOumrD5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODcKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAi7LK07YGs7JWE7JuD7J2EIOunjOuTpOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4OCBidWlsdGluL2Nsb25lLmM6OTAgYnVpbHRpbi9pbml0LWRiLmM6NDc5Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICLqsITrnrXtlZwg7KCA7J6l7IaM66W8IOunjOuTreuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyCittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgIuuvuOufrCDsoIDsnqXshozrpbwg66eM65Ot64uI64ukICjqsITrnrXtlZwg7KCA7J6l7IaM66GcIOy3qOq4iSkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NAorbXNnaWQgInRvIGNsb25lIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLroZzsu6wg7KCA7J6l7IaM7JeQ7IScIOuzteygnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2Cittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgIuuhnOy7rCDtlZjrk5zrp4Htgazrpbwg7IKs7Jqp7ZWY7KeAIOyViuqzoCwg7ZWt7IOBIOuzteyCrO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4Cittc2dpZCAic2V0dXAgYXMgc2hhcmVkIHJlcG9zaXRvcnkiCittc2dzdHIgIuqzteycoCDsoIDsnqXshozroZwg7ISk7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwIGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJwYXRoc3BlYyIKK21zZ3N0ciAi6rK966Gc66qF7IS4IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwIGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICLrs7XsoJztlZwg6rKw6rO866y87JeQ7IScIO2VmOychCDrqqjrk4jsnYQg7LSI6riw7ZmU7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgY2xvbmVkIGluIHBhcmFsbGVsIgorbXNnc3RyICLrs5HroKzsoIHsnLzroZwg67O17KCc7ZWY64qUIO2VmOychOuqqOuTiCDqsJzsiJgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDggYnVpbHRpbi9pbml0LWRiLmM6NDc2Cittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICLshJzsi50t65SU66CJ7YSw66asIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA5IGJ1aWx0aW4vaW5pdC1kYi5jOjQ3NworbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgIuyEnOyLneydhCDsgqzsmqntlaAg65SU66CJ7YSw66asIOychOy5mCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMSBidWlsdGluL2Nsb25lLmM6MTEzIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjIzCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU5NAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICLroIjtjbzrn7DsiqQg7KCA7J6l7IaMIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjI1CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU5NgorbXNnaWQgInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciCittc2dzdHIgIuuzteygnO2VoCDqsr3smrDsl5Drp4wgLS1yZWZlcmVuY2Xrpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE2NiBidWlsdGluL3JlcGFjay5jOjIxMworbXNnaWQgIm5hbWUiCittc2dzdHIgIuydtOumhCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNworbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAi7JeF7Iqk7Yq466a8IOy2lOyggeyXkCAnb3JpZ2luJyDrjIDsi6AgPOydtOumhD7snYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE5Cittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAi66as66qo7Yq47J2YIEhFQUQg64yA7IugIDzruIzrnpzsuZg+66W8IOqwgOyguOyYteuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMQorbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgIuumrOuqqO2KuOydmCBnaXQtdXBsb2FkLXBhY2sg6rK966GcIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIyIGJ1aWx0aW4vZmV0Y2guYzoxNTAgYnVpbHRpbi9ncmVwLmM6ODEzCisjOiBidWlsdGluL3B1bGwuYzoyMTYKK21zZ2lkICJkZXB0aCIKK21zZ3N0ciAi6rmK7J20IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIzCittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICLsp4DsoJXtlZwg6rmK7J207J2YIOyWleydgCDrs7XsoJzrpbwg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0IGJ1aWx0aW4vZmV0Y2guYzoxNTIgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTU3CisjOiBwYXJzZS1vcHRpb25zLmg6MTU0Cittc2dpZCAidGltZSIKK21zZ3N0ciAi7Iuc6rCBIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI1Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgIuyngOygle2VnCDsi5zqsIQg7J207ZuE7J2YIOyWleydgCDrs7XsoJzrpbwg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI2IGJ1aWx0aW4vZmV0Y2guYzoxNTQKK21zZ2lkICJyZXZpc2lvbiIKK21zZ3N0ciAi66as67mE7KCEIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI3IGJ1aWx0aW4vZmV0Y2guYzoxNTUKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lLCBleGNsdWRpbmcgcmV2IgorbXNnc3RyICLrpqzruYTsoITsnYQg7KCc7Jm47ZW0IOyWleydgCDrs7XsoJzsnZgg7Luk67CLIOuCtOyXreydhCDquYrqsowg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI5Cittc2dpZCAiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIgorbXNnc3RyICLtlZjrgpjsnZgg67iM656c7LmY66eMIOuzteygnO2VqeuLiOuLpCAoSEVBRCDrmJDripQgLS1icmFuY2jroZwg7KeA7KCVKSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMQorbXNnaWQgImRvbid0IGNsb25lIGFueSB0YWdzLCBhbmQgbWFrZSBsYXRlciBmZXRjaGVzIG5vdCB0byBmb2xsb3cgdGhlbSIKK21zZ3N0ciAi7YOc6re466W8IOuzteygnO2VmOyngCDslYrsirXri4jri6QuIOuCmOykkeyXkCDqsIDsoLjsmKwg65WM64+EIO2DnOq3uOulvCDrlLDrpbTsp4Ag7JWK7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMworbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIGJlIHNoYWxsb3ciCittc2dzdHIgIuuqqOuToCDrs7XsoJztlZwg7ZWY7JyEIOuqqOuTiOydgCDslpXsnYAg66qo65OI7J6F64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM0IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiZ2l0ZGlyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM1IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NgorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuq5gyDrlJTroInthLDrpqzrpbwg7J6R7JeFIO2PtOuNlOyZgCDrs4TqsJzsnZgg7JyE7LmY7JeQIOuGk+yKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNgorbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAi7YKkPeqwkiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNworbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAi7IOIIOyggOyepeyGjCDslYjsl5DshJwg7ISk7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM4IGJ1aWx0aW4vZmV0Y2guYzoxNzMgYnVpbHRpbi9wdWxsLmM6MjI5CisjOiBidWlsdGluL3B1c2guYzo1ODMKK21zZ2lkICJ1c2UgSVB2NCBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAiSVB2NCDso7zshozrp4wg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQwIGJ1aWx0aW4vZmV0Y2guYzoxNzUgYnVpbHRpbi9wdWxsLmM6MjMyCisjOiBidWlsdGluL3B1c2guYzo1ODUKK21zZ2lkICJ1c2UgSVB2NiBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAiSVB2NiDso7zshozrp4wg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6Mjc4Cittc2dpZCAiIgorIk5vIGRpcmVjdG9yeSBuYW1lIGNvdWxkIGJlIGd1ZXNzZWQuXG4iCisiUGxlYXNlIHNwZWNpZnkgYSBkaXJlY3Rvcnkgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiIgorIuuUlOugie2EsOumrCDsnbTrpoTsnYQg7JWM7JWE64K8IOyImCDsl4bsirXri4jri6QuXG4iCisi66qF66C57ZaJ7JeQ7IScIOuUlOugie2EsOumrOulvCDsp4DsoJXtlZjsi63si5zsmKQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbzogQ291bGQgbm90IGFkZCBhbHRlcm5hdGUgZm9yICclcyc6ICVzXG4iCittc2dzdHIgIuygleuztDogJyVzJ+yXkCDrjIDtlZwg67O07KGwIO2MjOydvOydhCDstpTqsIDtlaAg7IiYIOyXhuyKteuLiOuLpDogJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkg7Jes64qU642wIOyLpO2MqCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJyVzJ+ydtCjqsIApIOyeiOyngOunjCDrlJTroInthLDrpqzqsIAg7JWE64uZ64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzXG4iCittc2dzdHIgIiclcyfsl5Ag64yA7ZW0IHN0YXQoKeydtCDsi6TtjKjtlojsirXri4jri6RcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAiJyVzJyDrp4Htgazrpbwg66eM65Oc64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgIu2MjOydvOydhCAnJXMnKOycvCnroZwg67O17IKs7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICLsmYTro4wuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0OTEKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB0aGUgY2hlY2tvdXQgd2l0aCAnZ2l0IGNoZWNrb3V0IC1mIEhFQUQnXG4iCittc2dzdHIgIiIKKyLrs7XsoJzqsIAg7ISx6rO17ZaI7KeA66eMLCDssrTtgazslYTsm4PsnbQg7Iuk7Yyo7ZaI7Iq164uI64ukLlxuIgorIidnaXQgc3RhdHVzJyDrqoXroLnsnLzroZwg66y07JeH7J2EIOyytO2BrOyVhOybg+2WiOuKlOyngCDsgrTtjrTrs7wg7IiYIOyeiOqzoFxuIgorIidnaXQgY2hlY2tvdXQgLWYgSEVBRCfroZwg7LK07YGs7JWE7JuD7J2EIOuLpOyLnCDtlaAg7IiYIOyeiOyKteuLiOuLpFxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICLrs7XsoJztlaAg66as66qo7Yq47J2YICVzIOu4jOuenOy5mOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NjMKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAi66as66qo7Yq47JeQ7IScIO2VhOyalO2VnCDsmKTruIzsoJ3tirjrpbwg66qo65GQIOuztOuCtOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSAlcyIKK21zZ3N0ciAiJXPsnYQo66W8KSDsl4XrjbDsnbTtirjtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcyOAorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAi66as66qo7Yq4IEhFQUTqsIAg7JeG64qUIOugiO2NvOufsOyKpOulvCDssLjqs6DtlZjrr4DroZwsIOyytO2BrOyVhOybg+2VoCDsiJgg7JeG7Iq164uI64ukLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzU4Cittc2dpZCAidW5hYmxlIHRvIGNoZWNrb3V0IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi7J6R7JeFIO2PtOuNlOulvCDssrTtgazslYTsm4PtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwMworbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICLtjIzrnbzrr7jthLDrpbwg7ISk7KCVIO2MjOydvOyXkCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2NgorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgIuygleumrOyaqeycvOuhnCByZXBhY2vtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2OAorbXNnaWQgImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAi67O07KGwIOyehOyLnCDtjIzsnbzsnYQg7IKt7KCc7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MDcgYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTQ3Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzLiIKK21zZ3N0ciAi64SI66y0IOyduOyekOqwgCDrp47sirXri4jri6QuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTExCittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICLrs7XsoJztlaAg7KCA7J6l7IaM66W8IOyngOygle2VtOyVvCDtlanri4jri6QuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiLS1iYXJlIOuwjyAtLW9yaWdpbiAlcyDsmLXshZjsnYAg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjcKK21zZ2lkICItLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpciBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiLS1iYXJlIOuwjyAtLXNlcGFyYXRlLWdpdC1kaXIg7Ji17IWY7J2AIO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiJyVzJyDsoIDsnqXshozqsIAg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQ2IGJ1aWx0aW4vZmV0Y2guYzoxNDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAi6rmK7J206rCAKCVzKSAw67O064ukIO2BsCDsiJjqsIAg7JWE64uZ64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTU2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIuuMgOyDgSDqsr3roZzqsIAoJyVzJykg7J2066+4IOyeiOqzoCDruYgg65SU66CJ7YSw66as6rCAIOyVhOuLmeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLsnpHsl4Ug7Y+0642U6rCAKCclcycpIOydtOuvuCDsnojsirXri4jri6QuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgxIGJ1aWx0aW4vY2xvbmUuYzoxMDAyIGJ1aWx0aW4vZGlmZnRvb2wuYzoyNzAKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNDYgYnVpbHRpbi93b3JrdHJlZS5jOjI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydmCDslZ4g65SU66CJ7YSw66as66W8IOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnIgorbXNnc3RyICLsnpHsl4Ug7Y+0642U66W8KCclcycpIOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAi6rCE65617ZWcIOyggOyepeyGjOuhnCgnJXMnKSDrs7XsoJztlanri4jri6QuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAiJyVzJ+yXkCDrs7XsoJztlanri4jri6QuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMzIKK21zZ2lkICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBib3RoIC0tcmVmZXJlbmNlIGFuZCAtLXJlZmVyZW5jZS1pZi0iCisiYWJsZSIKK21zZ3N0ciAiIgorImNsb25lIC0tcmVjdXJzaXZlIOyYteyFmOydgCAtLXJlZmVyZW5jZSDrsI8gLS1yZWZlcmVuY2UtaWYtYWJsZSDsmLXshZjsnYQg6rCZ7J20IOyTsOuKlCAiCisi6rKD6rO8IO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDkzCittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLWRlcHRoIOyYteyFmOydgCDroZzsu6wg67O17KCc7JeQ7IScIOustOyLnOuQqeuLiOuLpC4g64yA7Iug7JeQICdmaWxlOi8vJ+ydhCDsgqzsmqntlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA5NQorbXNnaWQgIi0tc2hhbGxvdy1zaW5jZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLXNoYWxsb3ctc2luY2Ug7Ji17IWY7J2AIOuhnOy7rCDrs7XsoJzsl5DshJwg66y07Iuc65Cp64uI64ukLiDrjIDsi6Dsl5AgJ2ZpbGU6Ly8n7J2EIOyCrOyaqe2VmOyLrSIKKyLsi5zsmKQuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA5NworbXNnaWQgIi0tc2hhbGxvdy1leGNsdWRlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tc2hhbGxvdy1leGNsdWRlIOyYteyFmOydgCDroZzsu6wg67O17KCc7JeQ7IScIOustOyLnOuQqeuLiOuLpC4g64yA7Iug7JeQICdmaWxlOi8vJ+ydhCDsgqzsmqntlZgiCisi7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwOTkKK21zZ2lkICItLWZpbHRlciBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLWZpbHRlciDsmLXshZjsnYAg66Gc7LusIOuzteygnOyXkOyEnCDrrLTsi5zrkKnri4jri6QuIOuMgOyLoOyXkCAnZmlsZTovLyfsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMDIKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICLsm5Drs7gg7KCA7J6l7IaM6rCAIOyWleydgCDsoIDsnqXshozsnbTrr4DroZwsIC0tbG9jYWwg7Ji17IWY7J2EIOustOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMDcKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwg7Ji17IWY7J2AIOustOyLnOuQqeuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjkgYnVpbHRpbi9jbG9uZS5jOjExNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIuumrOuqqO2KuOydmCAlcyDruIzrnpzsuZjqsIAg7JeF7Iqk7Yq466a8ICVz7JeQIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExODAKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICLruYgg7KCA7J6l7IaM66W8IOuzteygnO2VnCDqsoPsspjrn7wg67O07J6F64uI64ukLiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoxMAorbXNnaWQgImdpdCBjb2x1bW4gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb2x1bW4gWzzsmLXshZg+XSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNworbXNnaWQgImxvb2t1cCBjb25maWcgdmFycyIKK21zZ3N0ciAi7ISk7KCVIOuzgOyImOulvCDssL7slYQg67SF64uI64ukIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI4IGJ1aWx0aW4vY29sdW1uLmM6MjkKK21zZ2lkICJsYXlvdXQgdG8gdXNlIgorbXNnc3RyICLsgqzsmqntlaAg67Cw7LmYIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMwCittc2dpZCAiTWF4aW11bSB3aWR0aCIKK21zZ3N0ciAi7LWc64yAIOuEiOu5hCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIuyZvOyqvSDqsIDsnqXsnpDrpqzsl5Ag7LGE7Jq4IOqzteuwsSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMgorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICLsmKTrpbjsqr0g6rCA7J6l7J6Q66as7JeQIOyxhOyauCDqs7XrsLEiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzMKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAi7Je0IOyCrOydtOyXkCDssYTsmrgg6rO167CxIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICItLWNvbW1hbmTripQg7LKrIOuyiOynuCDsnbjsnpDsl6zslbwg7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM3Cittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzzsmLXshZg+XSBbLS1dIDzqsr3roZzrqoXshLg+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQyCittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBzdGF0dXMgWzzsmLXshZg+XSBbLS1dIDzqsr3roZzrqoXshLg+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ3Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisi7LWc7LSI7J2YIOy7pOuwi+ydhCDrsJTqvrjroKTqs6Ag7ZWY7KeA66eMLCDqt7jroIfqsowg7ZWY66m0IOy7pOuwi+ydtCDruYTslrQg7J6I6rKMIOuQqeuLiOuLpC5cbiIKKyItLWFsbG93LWVtcHR5IOyYteyFmOqzvCDqsJnsnbQg7J20IOuqheugueydhCDrsJjrs7XtlaAg7IiY64+EIOyeiOqzoCwgXCJnaXQgcmVzZXQgSEVBRFwiXG4iCisi66qF66C57Jy866GcIOy7pOuwi+ydhCDsmYTsoITtnogg7KCc6rGw7ZWgIOyImOuPhCDsnojsirXri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTIKK21zZ2lkICIiCisiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuydtOyghCDsu6Trp7cg67m87Jik6riw6rCAIOu5hOyWtCDsnojsirXri4jri6QuIOyVhOuniOuPhCDstqnrj4wg7ZW06rKwIOqzvOygleyXkOyEnCDqt7jroIfqsowg65CQ7J2EXG4iCisi6rKD7J6F64uI64ukLiDqt7jrnpjrj4Qg7Luk67CL7ZWY66Ck66m0IOuLpOydjOqzvCDqsJnsnbQg7ZWY7Iut7Iuc7JikOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1OQorbXNnaWQgIk90aGVyd2lzZSwgcGxlYXNlIHVzZSAnZ2l0IHJlc2V0J1xuIgorbXNnc3RyICLslYTri4jrqbQgJ2dpdCByZXNldCfsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjIKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgcmVzZXRcbiIKKyJcbiIKKyJUaGVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB3aWxsIHJlc3VtZSBjaGVycnktcGlja2luZ1xuIgorInRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKK21zZ3N0ciAiIgorIuydtCDsu6TrsIvsnYQg6rG064SI65uw66Ck66m0LCDri6TsnYzsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikOlxuIgorIlxuIgorIiAgICBnaXQgcmVzZXRcbiIKKyJcbiIKKyLqt7gg64uk7J2M7JeQIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIuulvCDtlZjrqbQg64KY66i47KeAIOy7pOuwi+yXkFxuIgorIuuMgO2VtCDsu6TrsIsg67m87Jik6riw66W8IOuLpOyLnCDsi5zsnpHtlanri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MjkzCittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICJIRUFEIO2KuOumrCDsmKTruIzsoJ3tirjsnZgg66y27J2M7J2EIO2RuOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzM0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIuyehOyLnCDsnbjrjbHsiqTrpbwg66eM65OkIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzQwCittc2dpZCAiaW50ZXJhY3RpdmUgYWRkIGZhaWxlZCIKK21zZ3N0ciAi64yA7ZmU7ZiVIOy2lOqwgOqwgCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzUzCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIuyehOyLnCDsnbjrjbHsiqTrpbwg7JeF642w7J207Yq47ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzU1Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSBtYWluIGNhY2hlIHRyZWUiCittc2dzdHIgIuyjvOyalCDsupDsi5wg7Yq466as66W8IOyXheuNsOydtO2KuO2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzgwIGJ1aWx0aW4vY29tbWl0LmM6NDAzIGJ1aWx0aW4vY29tbWl0LmM6NDQ5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICJuZXdfaW5kZXgg7YyM7J287JeQIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQzMgorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIKK21zZ3N0ciAi67OR7ZWp7ZWY64qUIOykkSDrtoDrtoQg7Luk67CL7J2EIO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MzQKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIuy7pOuwiyDrubzsmKTquLDrpbwg7ZWY64qUIOykkSDrtoDrtoQg7Luk67CL7J2EIO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NDIKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIuyduOuNseyKpOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NjEKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgIuyehOyLnCDsnbjrjbHsiqQg7YyM7J287J2EIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICInJXMnIOy7pOuwi+yXkCDsnpHshLHsnpAg7Zek642U6rCAIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAiJyVzJyDsu6TrsIvsnZgg7J6R7ISx7J6QIO2XpOuNlCDtmJXsi53snbQg7J6Y66q765CY7JeI7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU3OQorbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgIi0tYXV0aG9yIO2MjOudvOuvuO2EsCDtmJXsi53snbQg7J6Y66q765CY7JeI7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzMQorbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisi7ZiE7J6sIOy7pOuwiyDrqZTsi5zsp4Dsl5DshJwg7IKs7Jqp65CY7KeAIOyViuuKlCDso7zshJ0g66y47J6Q66W8XG4iCisi7ISg7YOd7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjY4IGJ1aWx0aW4vY29tbWl0LmM6NzAxIGJ1aWx0aW4vY29tbWl0LmM6MTAyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAiJXMg7Luk67CL7J2EIOywvuyVhOuzvCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY4MCBidWlsdGluL3Nob3J0bG9nLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIijtkZzspIAg7J6F66Cl7JeQ7IScIOuhnOq3uCDrqZTsi5zsp4Drpbwg7J297J2MKVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY4MgorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLtkZzspIAg7J6F66Cl7JeQ7IScIOuhnOq3uCDrqZTsi5zsp4Drpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Njg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmaWxlICclcyciCittc2dzdHIgIiclcycg66Gc6re4IO2MjOydvOydhCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MTUgYnVpbHRpbi9jb21taXQuYzo3MjMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIgorbXNnc3RyICJTUVVBU0hfTVNH66W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyMAorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIKK21zZ3N0ciAiTUVSR0VfTVNH66W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc3NAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgIuy7pOuwiyDshJzsi53snYQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuuzke2VqeydhCDsu6TrsIvtlZjroKTripQg6rKD7Jy866GcIOuztOyeheuLiOuLpC5cbiIKKyLqt7jroIfsp4Ag7JWK64uk66m0LCDri6TsnYwg7YyM7J287J2EIOyngOyasOqzoCxcbiIKKyJcdCVzXG4iCisi64uk7IucIOyLnOuPhO2VmOyLreyLnOyYpC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgY2hlcnJ5LXBpY2suXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisi7Luk67CLIOu5vOyYpOq4sOulvCDsu6TrsIvtlZjroKTripQg6rKD7Jy866GcIOuztOyeheuLiOuLpC5cbiIKKyLqt7jroIfsp4Ag7JWK64uk66m0LCDri6TsnYwg7YyM7J287J2EIOyngOyasOqzoCxcbiIKKyJcdCVzXG4iCisi64uk7IucIOyLnOuPhO2VmOyLreyLnOyYpC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuuzgOqyvSDsgqztla3sl5Ag64yA7ZWcIOy7pOuwiyDrqZTsi5zsp4Drpbwg7J6F66Cl7ZWY7Iut7Iuc7JikLiAnJWMnIOusuOyekOuhnCDsi5zsnpHtlZjripRcbiIKKyLspITsnYAg66y07Iuc65CY6rOgLCDrqZTsi5zsp4Drpbwg7J6F66Cl7ZWY7KeAIOyViuycvOuptCDsu6TrsIvsnbQg7KSR7KeA65Cp64uI64ukLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuuzgOqyvSDsgqztla3sl5Ag64yA7ZWcIOy7pOuwiyDrqZTsi5zsp4Drpbwg7J6F66Cl7ZWY7Iut7Iuc7JikLiAnJWMnIOusuOyekOuhnCDsi5zsnpHtlZjripRcbiIKKyLspITsnYAg67O07KG065CY64uILCDtlYTsmpTtlZjrqbQg7KeB7KCRIOygnOqxsO2VmOyLreyLnOyYpC4g66mU7Iuc7KeA66W8IOyeheugpe2VmOyngFxuIgorIuyViuycvOuptCDsu6TrsIvsnbQg7KSR7KeA65Cp64uI64ukLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICIlc0F1dGhvcjogICAgJS4qcyA8JS4qcz4iCittc2dzdHIgIiVz7J6R7ISx7J6QOiAgICAlLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNEYXRlOiAgICAgICVzIgorbXNnc3RyICIlc+yLnOqwgTogICAgICAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc+y7pOuvuO2EsDogJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODY3Cittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgIuyduOuNseyKpOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MzMKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAi7Yq466as66W8IOunjOuTnOuKlOuNsCDsmKTrpZgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTQ3IGJ1aWx0aW4vdGFnLmM6MjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAi66mU7Iuc7KeA66W8IC1tIOuYkOuKlCAtRiDsmLXshZjsnLzroZwg7J6F66Cl7ZWY7Iut7Iuc7JikLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5MQorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIiIKKyItLWF1dGhvciAnJXMnIOyYteyFmOydtCAn7J2066aEIDzsoITsnpDrqZTsnbw+JyDtmJXsi53snbQg7JWE64uI6rOgIOq4sOyhtCDsnpHshLHsnpDsl5Drj4Qg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpZ25vcmVkIG1vZGUgJyVzJyIKK21zZ3N0ciAi66y07Iuc7ZWcIOuqqOuTnOqwgCAoJyVzJykg7J6Y66q765CY7JeI7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMTkgYnVpbHRpbi9jb21taXQuYzoxMjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAi7LaU7KCB65CY7KeAIOyViuuKlCDtjIzsnbwg66qo65Oc6rCAICgnJXMnKSDsnpjrqrvrkJjsl4jsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NworbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1sb25nIOuwjyAteiDsmLXshZjsnYAg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDkwCittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1yZXNldC1hdXRob3Ig67CPIC0tYXV0aG9yIOyYteyFmOydhCDrqqjrkZAg7IKs7Jqp7ZWY66m0IOyVnuuSpOqwgCDrp57sp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwOTkKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAi67CU6r+AIOyCrO2VreydtCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMDIKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLrs5Htlakg7KSR7JeQIOyeiOyKteuLiOuLpCAtLSDsu6TrsIvsnYQg67CU6r+AIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMDQKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLsu6TrsIsg67m87Jik6riwIOykkeyXkCDsnojsirXri4jri6QgLS0g7Luk67CL7J2EIOuwlOq/gCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTA3Cittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLS1zcXVhc2gg67CPIC0tZml4dXAg7Ji17IWY7J2AIOqwmeydtCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTE3Cittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIi1jLy1DLy1GLy0tZml4dXAg7Ji17IWYIOykkeyXkCDtlZjrgpjrp4wg7IKs7Jqp7ZWgIOyImCDsnojsirXri4jri6QuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMTkKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYuIgorbXNnc3RyICItbSDsmLXshZjsnYAgLWMvLUMvLUYg7Ji17IWY6rO8IOqwmeydtCDsk7gg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEyNworbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIi0tcmVzZXQtYXV0aG9yIOyYteyFmOydgCAtQywgLWMg65iQ64qUIC0tYW1lbmQg7Ji17IWY6rO8IOqwmeydtCDsjajslbwg7ZWp64uI64ukLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTQ0Cittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisiLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2gg7Ji17IWYIOykkSDtlZjrgpjrp4wg7IKs7Jqp7ZWgIOyImCDsnojsirXri4giCisi64ukLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTQ2Cittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICLqsr3roZzqsIAg7JeG7J20IC0taW5jbHVkZS8tLW9ubHkg7Ji17IWY7J2EIOyTsOuptCDslZ7rkqTqsIAg66ee7KeAIOyViuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2MCBidWlsdGluL3RhZy5jOjU0MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAi7J6Y66q765CcIOygleumrCDrqqjrk5wgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2NQorbXNnaWQgIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIi1hIOyYteyFmOqzvCDqsr3roZzrpbwg6rCZ7J20IOyCrOyaqe2VmOuptCDslZ7rkqTqsIAg66ee7KeAIOyViuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMwMyBidWlsdGluL2NvbW1pdC5jOjE0ODAKK21zZ2lkICJzaG93IHN0YXR1cyBjb25jaXNlbHkiCittc2dzdHIgIuyDge2DnOulvCDqsITrnrXtlZjqsowg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMDUgYnVpbHRpbi9jb21taXQuYzoxNDgyCittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgIuu4jOuenOy5mCDsoJXrs7Trpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMDcKK21zZ2lkICJzaG93IHN0YXNoIGluZm9ybWF0aW9uIgorbXNnc3RyICLsiqTtg5zsi5wg7KCV67O066W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzA5IGJ1aWx0aW4vY29tbWl0LmM6MTQ4NAorbXNnaWQgImNvbXB1dGUgZnVsbCBhaGVhZC9iZWhpbmQgdmFsdWVzIgorbXNnc3RyICLslZ4v65KkIOqwkiDsoITssrTrpbwg6rOE7IKw7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMTEKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICLrsoTsoIQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMxMSBidWlsdGluL2NvbW1pdC5jOjE0ODYgYnVpbHRpbi9wdXNoLmM6NTU4CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTgxCittc2dpZCAibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiCittc2dzdHIgIuy7tO2TqO2EsOqwgCDsnb3snYQg7IiYIOyeiOuKlCDtmJXsi50iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMxNCBidWlsdGluL2NvbW1pdC5jOjE0ODgKK21zZ2lkICJzaG93IHN0YXR1cyBpbiBsb25nIGZvcm1hdCAoZGVmYXVsdCkiCittc2dzdHIgIuq4tCDtmJXsi53snLzroZwg7IOB7YOc66W8IO2RnOyLnO2VqeuLiOuLpCAo6riw67O46rCSKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzE3IGJ1aWx0aW4vY29tbWl0LmM6MTQ5MQorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIgorbXNnc3RyICJOVUwg66y47J6Q66GcIO2VreuqqeydhCDrgZ3rg4Xri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMxOSBidWlsdGluL2NvbW1pdC5jOjEzMjMgYnVpbHRpbi9jb21taXQuYzoxNDk0CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAwMSBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAwNCBidWlsdGluL3RhZy5jOjM5NworbXNnaWQgIm1vZGUiCittc2dzdHIgIuuqqOuTnCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzIwIGJ1aWx0aW4vY29tbWl0LmM6MTQ5NAorbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorIuy2lOyggeuQmOyngCDslYrripQg7YyM7J287J2EIO2RnOyLnO2VqeuLiOuLpC4g7LaU6rCAIOyYteyFmDogYWxsLCBub3JtYWwsIG5vICjquLDrs7jqsJI6IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyNAorbXNnaWQgIiIKKyJzaG93IGlnbm9yZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAoRGVmYXVsdDogIgorInRyYWRpdGlvbmFsKSIKK21zZ3N0ciAiIgorIuustOyLnOuQnCDtjIzsnbzsnYQg7ZGc7Iuc7ZWp64uI64ukLiDstpTqsIAg7Ji17IWYOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAo6riw67O46rCSOiAiCisidHJhZGl0aW9uYWwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjYgcGFyc2Utb3B0aW9ucy5oOjE2NworbXNnaWQgIndoZW4iCittc2dzdHIgIuyWuOygnCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzI3Cittc2dpZCAiIgorImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisi7ZWY7JyEIOuqqOuTiOydmCDrs4Dqsr3snYQg66y07Iuc7ZWp64uI64ukLiDstpTqsIAg7Ji17IWYOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICjquLDrs7jqsJI6ICIKKyJhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjkKK21zZ2lkICJsaXN0IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zIgorbXNnc3RyICLstpTsoIHrkJjsp4Ag7JWK64qUIO2MjOydvOydmCDrqqnroZ3snYQg7Jes65+sIOyXtOuhnCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzMAorbXNnaWQgImRvIG5vdCBkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAi7J2066aEIOuwlOq+uOq4sOulvCDqsoDsgqztlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzIKK21zZ2lkICJkZXRlY3QgcmVuYW1lcywgb3B0aW9uYWxseSBzZXQgc2ltaWxhcml0eSBpbmRleCIKK21zZ3N0ciAi7J2066aEIOuwlOq+uOq4sCDqsoDsgqztlZjqs6AsIOu2gOqwgOyggeycvOuhnCDsnKDsgqzshLEg7J24642x7Iqk66W8IOyEpOygle2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzUyCittc2dpZCAiVW5zdXBwb3J0ZWQgY29tYmluYXRpb24gb2YgaWdub3JlZCBhbmQgdW50cmFja2VkLWZpbGVzIGFyZ3VtZW50cyIKK21zZ3N0ciAi66y07Iuc7ZWcIOuqqOuTnOyZgCDstpTsoIHrkJjsp4Ag7JWK64qUIO2MjOydvOydmCDsnbjsiJjqsIAg7KeA7JuQ65CY7KeAIOyViuuKlCDsobDtlansnoXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ1MAorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgIuyEseqzteyggeyduCDsu6TrsIsg7ZuE7JeQIOyalOyVveydhCDtkZzsi5ztlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NTEKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIuy7pOuwiyDrqZTsi5zsp4Ag7ISc7Iud7JeQIGRpZmbrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NTMKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICLsu6TrsIsg66mU7Iuc7KeAIOyYteyFmCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDU0IGJ1aWx0aW4vdGFnLmM6Mzk0Cittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAi7YyM7J287JeQ7IScIOuplOyLnOyngOulvCDsnb3sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ1NQorbXNnaWQgImF1dGhvciIKK21zZ3N0ciAi7J6R7ISx7J6QIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NTUKK21zZ2lkICJvdmVycmlkZSBhdXRob3IgZm9yIGNvbW1pdCIKK21zZ3N0ciAi7Luk67CL7J2YIOyekeyEseyekOulvCDsp4DsoJXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ1NiBidWlsdGluL2djLmM6NTAxCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAi7Iuc6rCBIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NTYKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgIuy7pOuwi+ydmCDsi5zqsIHsnYQg7KeA7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NTcgYnVpbHRpbi9tZXJnZS5jOjIyOCBidWlsdGluL25vdGVzLmM6NDAyCisjOiBidWlsdGluL25vdGVzLmM6NTY1IGJ1aWx0aW4vdGFnLmM6MzkyCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAi66mU7Iuc7KeAIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NTcKK21zZ2lkICJjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi7Luk67CLIOuplOyLnOyngCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDU4IGJ1aWx0aW4vY29tbWl0LmM6MTQ1OSBidWlsdGluL2NvbW1pdC5jOjE0NjAKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ2MSBwYXJzZS1vcHRpb25zLmg6MjcwIHJlZi1maWx0ZXIuaDo5MgorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAi7Luk67CLIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NTgKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi7KeA7KCV7ZWcIOy7pOuwi+ydmCDrqZTsi5zsp4Drpbwg7J6s7IKs7Jqp7ZWY6rOgIO2OuOynke2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDU5Cittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIuyngOygle2VnCDsu6TrsIvsl5DshJwg66mU7Iuc7KeA66W8IOyerOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDYwCittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi7KeA7KCV7ZWcIOy7pOuwi+ydhCDsiJjsoJXtlZjripTrjbAgYXV0b3NxdWFzaCDtmJXsi50g66mU7Iuc7KeA66W8IOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDYxCittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gc3F1YXNoIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIuyngOygle2VnCDsu6TrsIvsnYQg7ZWp7LmY64qU642wIGF1dG9zcXVhc2gg7ZiV7IudIOuplOyLnOyngOulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ2MgorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgIuy7pOuwi+ydhCDrgrTqsIAg7J6R7ISx7ZWcIOqyg+ycvOuhnCDrp4zrk63ri4jri6QgKC1DLy1jLy0tYW1lbmTsmYAg6rCZ7J20IOyCrOyaqSkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ2MyBidWlsdGluL2xvZy5jOjE0NDYgYnVpbHRpbi9tZXJnZS5jOjI0MgorIzogYnVpbHRpbi9wdWxsLmM6MTU0IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA1Cittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICJTaWduZWQtb2ZmLWJ5OiDspITsnYQg7LaU6rCA7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NjQKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgIuyngOygle2VnCDshJzsi50g7YyM7J287J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDY1Cittc2dpZCAiZm9yY2UgZWRpdCBvZiBjb21taXQiCittc2dzdHIgIuy7pOuwiyDtjrjsp5HsnYQg6rCV7KCc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NjYKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICLquLDrs7jqsJIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ2NiBidWlsdGluL3RhZy5jOjM5OAorbXNnaWQgImhvdyB0byBzdHJpcCBzcGFjZXMgYW5kICNjb21tZW50cyBmcm9tIG1lc3NhZ2UiCittc2dzdHIgIuuplOyLnOyngOyXkOyEnCDqs7XrsLHqs7wgI+yjvOyEneydhCDsp4Dsm4Hri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ2NworbXNnaWQgImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICLsu6TrsIsg66mU7Iuc7KeAIOyEnOyLneyXkCDsg4Htg5zrpbwg7Y+s7ZWo7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NjkgYnVpbHRpbi9tZXJnZS5jOjI0MCBidWlsdGluL3B1bGwuYzoxODQKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEzCittc2dpZCAiR1BHIHNpZ24gY29tbWl0IgorbXNnc3RyICJHUEcg7ISc66qFIOy7pOuwiyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDcyCittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIuy7pOuwiyDrgrTsmqkg7Ji17IWYIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzMKK21zZ2lkICJjb21taXQgYWxsIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgIuuzgOqyveuQnCDtjIzsnbzsnYQg66qo65GQIOy7pOuwi+2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc0Cittc2dpZCAiYWRkIHNwZWNpZmllZCBmaWxlcyB0byBpbmRleCBmb3IgY29tbWl0IgorbXNnc3RyICLsp4DsoJXtlZwg7YyM7J287J2EIOy7pOuwi+2VoCDsnbjrjbHsiqTsl5Ag7LaU6rCA7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzUKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAi64yA7ZmU7ZiV7Jy866GcIO2MjOydvOydhCDstpTqsIDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3NgorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgIuuMgO2ZlO2YleycvOuhnCDrs4Dqsr0g7IKs7ZWt7J2EIOy2lOqwgO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc3Cittc2dpZCAiY29tbWl0IG9ubHkgc3BlY2lmaWVkIGZpbGVzIgorbXNnc3RyICLsp4DsoJXtlZwg7YyM7J2866eMIOy7pOuwi+2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc4Cittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgIuy7pOuwiyDsoIQg7ZuE7YGs7JmAIOy7pOuwiyDrqZTsi5zsp4Ag7ZuE7YGs66W8IOqxtOuEiOucgeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc5Cittc2dpZCAic2hvdyB3aGF0IHdvdWxkIGJlIGNvbW1pdHRlZCIKK21zZ3N0ciAi66y07JeH7J2EIOy7pOuwi+2VoOyngCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5MgorbXNnaWQgImFtZW5kIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi67CU66GcIOyVniDsu6TrsIvsnYQg67CU6r+J64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTMKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgIuuLpOyLnOyTsOq4sCDtm4Qg7ZuE7YGs66W8IOqxtOuEiOucgeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk4Cittc2dpZCAib2sgdG8gcmVjb3JkIGFuIGVtcHR5IGNoYW5nZSIKK21zZ3N0ciAi67mIIOuzgOqyvSDsgqztla3snYQg6riw66Gd7ZWY64+E66GdIO2XiOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAwCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAi67mIIOuplOyLnOyngOyZgCDqsJnsnbQg67OA6rK9IOyCrO2VreydhCDquLDroZ3tlZjrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIKK21zZ3N0ciAi7IaQ7IOB65CcIE1FUkdFX0hFQUQg7YyM7J28ICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MAorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIk1FUkdFX01PREXrpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiCittc2dzdHIgIuy7pOuwiyDrqZTsi5zsp4Drpbwg7J297J2EIOyImCDsl4bsirXri4jri6Q6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAi7Luk67CL7J2EIOykkeyngO2VqeuLiOuLpC4g7Luk67CLIOuplOyLnOyngOqwgCDruYTslrQg7J6I7Iq164uI64ukLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICLsu6TrsIvsnYQg7KSR7KeA7ZWp64uI64ukLiDrqZTsi5zsp4Drpbwg7Y647KeR7ZWY7KeAIOyViuyVmOyKteuLiOuLpC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjUwCittc2dpZCAiIgorIlJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgYW5kIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXNldCBIRUFEXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyLsoIDsnqXshozrpbwg7JeF642w7J207Yq47ZaI7Iq164uI64ukLiDtlZjsp4Drp4wgbmV3X2luZGV4IO2MjOydvOydhCDsk7gg7IiYXG4iCisi7JeG7Iq164uI64ukLiDrlJTsiqTtgazqsIAg6r2JIOywqOyngCDslYrslZjqs6Ag7KCc7ZWcIOyaqeufieydhCDrhJjslrTqsIDsp4BcbiIKKyLslYrslZjripTsp4Ag7ZmV7J247ZWY7Iut7Iuc7JikLiDqt7jrpqzqs6AgJ2dpdCByZXNldCBIRUFEJ+uhnCDrs7XqtaztlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjkKK21zZ2lkICJnaXQgY29tbWl0LWdyYXBoIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIgorbXNnc3RyICJnaXQgY29tbWl0LWdyYXBoIFstLW9iamVjdC1kaXIgPOyYpOu4jOygne2KuOuUlOugie2EsOumrD5dIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTYKK21zZ2lkICJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCittc2dzdHIgImdpdCBjb21taXQtZ3JhcGggcmVhZCBbLS1vYmplY3QtZGlyIDzsmKTruIzsoJ3tirjrlJTroInthLDrpqw+XSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIxCittc2dpZCAiIgorImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tYXBwZW5kXSBbLS1zdGRpbi1wYWNrc3wtLSIKKyJzdGRpbi1jb21taXRzXSIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA87Jik67iM7KCd7Yq465SU66CJ7YSw66asPl0gWy0tYXBwZW5kXSBbLS1zdGRpbi0iCisicGFja3N8LS1zdGRpbi1jb21taXRzXSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzozOSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjkyCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE0NyBidWlsdGluL2ZldGNoLmM6MTYxIGJ1aWx0aW4vbG9nLmM6MTQ2NgorbXNnaWQgImRpciIKK21zZ3N0ciAi65SU66CJ7YSw66asIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQwIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6OTMKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTQ4Cittc2dpZCAiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIgorbXNnc3RyICLqt7jrnpjtlITrpbwg7KCA7J6l7ZWgIOyYpOu4jOygne2KuCDrlJTroInthLDrpqwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6OTUKK21zZ2lkICJzY2FuIHBhY2staW5kZXhlcyBsaXN0ZWQgYnkgc3RkaW4gZm9yIGNvbW1pdHMiCittc2dzdHIgIuy7pOuwi+ydhCDssL7snYQg65WMIO2RnOykgOyeheugpeyXkOyEnCDsl7TqsbDtlZwg66y27J2MIOyduOuNseyKpOulvCDqsoDsgqztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6OTcKK21zZ2lkICJzdGFydCB3YWxrIGF0IGNvbW1pdHMgbGlzdGVkIGJ5IHN0ZGluIgorbXNnc3RyICLtkZzspIAg7J6F66Cl7JeQIOyXtOqxsO2VnCDsu6TrsIvsl5DshJzrtoDthLAg6re466as6riw66W8IOyLnOyeke2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo5OQorbXNnaWQgImluY2x1ZGUgYWxsIGNvbW1pdHMgYWxyZWFkeSBpbiB0aGUgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgImNvbW1pdC1ncmFwaCDtjIzsnbzsl5Ag7J2066+4IOyeiOuKlCDrqqjrk6Ag7Luk67CL7J2EIO2PrO2VqO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDgKK21zZ2lkICJjYW5ub3QgdXNlIGJvdGggLS1zdGRpbi1jb21taXRzIGFuZCAtLXN0ZGluLXBhY2tzIgorbXNnc3RyICItLXN0ZGluLWNvbW1pdHMg67CPIC0tc3RkaW4tcGFja3Mg7Ji17IWY7J2AIOqwmeydtCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMAorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb25maWcgWzzsmLXshZg+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIC0tdHlwZSBhcmd1bWVudCwgJXMiCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIC0tdHlwZSDsnbjsnpA6ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyMworbXNnaWQgIkNvbmZpZyBmaWxlIGxvY2F0aW9uIgorbXNnc3RyICLshKTsoJUg7YyM7J28IOychOy5mCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjQKK21zZ2lkICJ1c2UgZ2xvYmFsIGNvbmZpZyBmaWxlIgorbXNnc3RyICLqs7XthrUg7ISk7KCVIO2MjOydvOydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI1Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAi7Iuc7Iqk7YWcIOyEpOyglSDtjIzsnbzsnYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNgorbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICLsoIDsnqXshowg7ISk7KCVIO2MjOydvOydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI3Cittc2dpZCAidXNlIGdpdmVuIGNvbmZpZyBmaWxlIgorbXNnc3RyICLsp4DsoJXtlZwg7ISk7KCVIO2MjOydvOydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI4Cittc2dpZCAiYmxvYi1pZCIKK21zZ3N0ciAi67iU66GtLWlkIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOAorbXNnaWQgInJlYWQgY29uZmlnIGZyb20gZ2l2ZW4gYmxvYiBvYmplY3QiCittc2dzdHIgIuyngOygle2VnCDruJTroa0g7Jik67iM7KCd7Yq47JeQ7IScIOyEpOygleydhCDsnb3sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI5Cittc2dpZCAiQWN0aW9uIgorbXNnc3RyICLrj5nsnpEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIuqwkuydhCDqsIDsoLjsmLXri4jri6Q6IDzsnbTrpoQ+IFs86rCSLeygleq3nOyLnT5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi66qo65OgIOqwkuydhCDqsIDsoLjsmLXri4jri6Q6IDztgqQ+IFs86rCSLeygleq3nOyLnT5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMgorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLsoJXqt5zsi53sl5Ag64yA7ZWcIOqwkuydhCDqsIDsoLjsmLXri4jri6Q6IDzsnbTrpoQt7KCV6rec7IudPiBbPOqwki3soJXqt5zsi50+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzMKK21zZ2lkICJnZXQgdmFsdWUgc3BlY2lmaWMgZm9yIHRoZSBVUkw6IHNlY3Rpb25bLnZhcl0gVVJMIgorbXNnc3RyICI8VVJMPuyXkCDtirnsoJXrkJjripQg6rCS7J2EIOqwgOyguOyYteuLiOuLpDogPOyEueyFmD5bLjzrs4DsiJg+XSA8VVJMPiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzQKK21zZ2lkICJyZXBsYWNlIGFsbCBtYXRjaGluZyB2YXJpYWJsZXM6IG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XSIKK21zZ3N0ciAi7ZW064u57ZWY64qUIOuzgOyImOulvCDrqqjrkZAg7KCc6rGw7ZWp64uI64ukOiA87J2066aEPiA86rCSPiBbPOqwki3soJXqt5zsi50+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzUKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgIuyDiCDrs4DsiJjrpbwg7LaU6rCA7ZWp64uI64ukOiA87J2066aEPiA86rCSPiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzYKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLrs4DsiJjrpbwg7KCc6rGw7ZWp64uI64ukOiA87J2066aEPiBbPOqwki3soJXqt5zsi50+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzcKK21zZ2lkICJyZW1vdmUgYWxsIG1hdGNoZXM6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi7ZW064u57ZWY64qUIO2VreuqqeydhCDrqqjrkZAg7KCc6rGw7ZWp64uI64ukOiA87J2066aEPiBbPOqwki3soJXqt5zsi50+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzgKK21zZ2lkICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiCittc2dzdHIgIuyEueyFmOydmCDsnbTrpoTsnYQg67CU6r+J64uI64ukOiA87JibLeydtOumhD4gPOyDiC3snbTrpoQ+IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOQorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgIuyEueyFmOydhCDsoJzqsbDtlanri4jri6Q6IDzsnbTrpoQ+IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MAorbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICLsoITssrQg66qp66Gd7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDEKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAi7Y647KeR6riw66W8IOyXveuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDIKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAi7ISk7KCV7ZWcIOyDieydhCDssL7sirXri4jri6Q6IHNsb3QgWzzquLDrs7jqsJI+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDMKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAi7IOJIOyEpOygleydhCDssL7sirXri4jri6Q6IHNsb3QgWzztkZzspIDstpzroKXsnbQtVFRZ7J247KeALeyXrOu2gD5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NAorbXNnaWQgIlR5cGUiCittc2dzdHIgIuqwkiDsooXrpZgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ1Cittc2dpZCAidmFsdWUgaXMgZ2l2ZW4gdGhpcyB0eXBlIgorbXNnc3RyICLqsJLsnbQg7ZW064u5IOyiheulmOuhnCDso7zslrTsp5Hri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ2Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICLqsJLsnbQgXCJ0cnVlXCIg65iQ64qUIFwiZmFsc2VcIuyeheuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDcKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAi6rCS7J20IOyLreynhOyImOyeheuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDgKK21zZ2lkICJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiCittc2dzdHIgIuqwkuydtCAtLWJvb2wg65iQ64qUIC0taW507J6F64uI64ukIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OQorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgIuqwkuydtCDqsr3roZwo7YyM7J28IOuYkOuKlCDrlJTroInthLDrpqwg7J2066aEKeyeheuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTAKK21zZ2lkICJ2YWx1ZSBpcyBhbiBleHBpcnkgZGF0ZSIKK21zZ3N0ciAi6rCS7J20IOunjOujjCDsi5zqsIHsnoXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUxCittc2dpZCAiT3RoZXIiCittc2dzdHIgIuq4sO2DgCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTIKK21zZ2lkICJ0ZXJtaW5hdGUgdmFsdWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgIuqwkuydhCBOVUwg67CU7J207Yq466GcIOuBneuDheuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTMKK21zZ2lkICJzaG93IHZhcmlhYmxlIG5hbWVzIG9ubHkiCittc2dzdHIgIuuzgOyImCDsnbTrpoTrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NAorbXNnaWQgInJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzIG9uIGxvb2t1cCIKK21zZ3N0ciAi7LC+7JWE67O8IOuVjCBpbmNsdWRlIOyngOyLnOyWtOulvCDqs6DroKTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU1Cittc2dpZCAic2hvdyBvcmlnaW4gb2YgY29uZmlnIChmaWxlLCBzdGFuZGFyZCBpbnB1dCwgYmxvYiwgY29tbWFuZCBsaW5lKSIKK21zZ3N0ciAi7ISk7KCV7J2YIOy2nOyymOulvCDtkZzsi5ztlanri4jri6QgKO2MjOydvCwg7ZGc7KSAIOyeheugpSwg67iU66GtLCDrqoXroLntlokpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NgorbXNnaWQgInZhbHVlIgorbXNnc3RyICLqsJIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU2Cittc2dpZCAid2l0aCAtLWdldCwgdXNlIGRlZmF1bHQgdmFsdWUgd2hlbiBtaXNzaW5nIGVudHJ5IgorbXNnc3RyICItLXdnZXQg7Ji17IWY7JeQ7IScLCDtlbTri7kg7ZWt66qp7J20IOyXhuycvOuptCDquLDrs7jqsJLsnYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZm9ybWF0IGRlZmF1bHQgY29uZmlnIHZhbHVlOiAlcyIKK21zZ3N0ciAi6riw67O4IOyEpOyglSDqsJLsnYQg7Y+s66ek7YyF7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDMxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGRlZmF1bHQgY29sb3IgdmFsdWUiCittc2dzdHIgIuq4sOuzuCDsg4kg6rCS7J2EIO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIyBUaGlzIGlzIEdpdCdzIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiIKKyJbdXNlcl1cbiIKKyIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorbXNnc3RyICIiCisiIyDquYPsnZgg7IKs7Jqp7J6Q67OEIOyEpOyglSDtjIzsnbzsnoXri4jri6QuXG4iCisiW3VzZXJdXG4iCisiIyDri6TsnYwg7KSE7J2EIOyVjOunnuqyjCDqs6DsuZjqs6Ag7JWe7J2YIOyjvOyEneydhCDsoJzqsbDtlZjsi63si5zsmKQ6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYwMworbXNnaWQgIi0tbG9jYWwgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1sb2NhbCDsmLXshZjsnYAg6rmDIOyggOyepeyGjCDslYjsl5DshJzrp4wg7JO4IOyImCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjA2Cittc2dpZCAiLS1ibG9iIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tYmxvYiDsmLXshZjsnYAg6rmDIOyggOyepeyGjCDslYjsl5DshJzrp4wg7JO4IOyImCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICIlcyDshKTsoJUg7YyM7J287J2EIOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IG92ZXJ3cml0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBhIHNpbmdsZSB2YWx1ZVxuIgorIiAgICAgICBVc2UgYSByZWdleHAsIC0tYWRkIG9yIC0tcmVwbGFjZS1hbGwgdG8gY2hhbmdlICVzLiIKK21zZ3N0ciAiIgorIuyXrOufrCDqsJzsnZgg6rCS7J2EIO2VmOuCmOydmCDqsJLsnLzroZwg642u7Ja07JO4IOyImCDsl4bsirXri4jri6QuXG4iCisiJXPsnYQo66W8KSDrs4Dqsr3tlZjroKTrqbQg7KCV6rec7Iud7J2EIOyTsOqxsOuCmCwgLS1hZGQg65iQ64qUIC0tcmVwbGFjZS1hbGwg7Ji17IWY7J2EXG4iCisi7IKs7Jqp7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTAKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorbXNnc3RyICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzoxMDAKK21zZ2lkICJwcmludCBzaXplcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtYXQiCittc2dzdHIgIuyCrOuejOydtCDsnb3quLAg7KKL7J2AIO2YleyLneycvOuhnCDtgazquLDrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjIKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gWzxjb21taXQtaXNoPi4uLl0iCittc2dzdHIgImdpdCBkZXNjcmliZSBbPOyYteyFmD5dIFs87Luk67CLLeuUsOychD4uLi5dIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjMKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gLS1kaXJ0eSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs87Ji17IWYPl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU3Cittc2dpZCAiaGVhZCIKK21zZ3N0ciAiaGVhZCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU3Cittc2dpZCAibGlnaHR3ZWlnaHQiCittc2dzdHIgImxpZ2h0d2VpZ2h0IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTcKK21zZ2lkICJhbm5vdGF0ZWQiCittc2dzdHIgImFubm90YXRlZCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgIuyjvOyEnSDri6zrprAgJXMg7YOc6re466W8IOyCrOyaqe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgIuyjvOyEnSDri6zrprAgJXMg7YOc6re47JeQIOuCtOyepeuQnCDsnbTrpoTsnbQg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgIiclcycg7YOc6re46rCAIOyLpOygnCDsl6zquLAgJyVzJ+yeheuLiOuLpCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgIuyWtOuWpCDtg5zqt7jrj4QgJyVzJ+yZgCjqs7wpIOygle2Zle2eiCDsnbzsuZjtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGV4YWN0IG1hdGNoIG9uIHJlZnMgb3IgdGFncywgc2VhcmNoaW5nIHRvIGRlc2NyaWJlXG4iCittc2dzdHIgIuyWtOuWpCDroIjtjbzrn7DsiqTrgpgg7YOc6re464+EIOygle2Zle2eiCDsnbzsuZjtlZjsp4Ag7JWK6rOgLCDshKTrqoXsnYQg6rKA7IOJ7ZWp64uI64ukXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiVz7JeQ7IScIOqygOyDiSDrp4jsuahcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorIuyWtOuWpCDso7zshJ0g64us66awIO2DnOq3uOuPhCAnJXMn7J2EKOulvCkg7ISk66qF7ZWY7KeAIOyViuyKteuLiOuLpC5cbiIKKyLtlZjsp4Drp4wg7KO87ISdIOuLrOumrOyngCDslYrsnYAg7YOc6re46rCAIOyeiOyKteuLiOuLpDogLS10YWdzIOyYteyFmOydhCDtlbQg67O07Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgorbXNnc3RyICIiCisi7Ja065akIO2DnOq3uOuPhCAnJXMn7J2EKOulvCkg7ISk66qF7ZWgIOyImCDsl4bsirXri4jri6QuXG4iCisiLS1hbHdheXMg7Ji17IWY7J2EIOyNqCDrs7TqsbDrgpgsIO2DnOq3uOulvCDrp4zrk6TslrQg67O07Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmF2ZXJzZWQgJWx1IGNvbW1pdHNcbiIKK21zZ3N0ciAi7Luk67CLICVsdeqwnOulvCDqsIDroZzsp4jroIDsirXri4jri6RcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKyLtg5zqt7jrpbwgJWnqsJwg64SY6rKMIOywvuyVmOyKteuLiOuLpC4g6rCA7J6lIOy1nOq3vOydmCAlaeqwnCDrqqnroZ3snYRcbiIKKyLtkZzsi5ztlanri4jri6QuICVzIOychOy5mOyXkOyEnCDqsoDsg4nsnYQg7KSR7KeA7ZWp64uI64ukLlxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc2NyaWJlICVzXG4iCittc2dzdHIgIiVzIOyEpOuqhe2VqeuLiOuLpFxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTAwIGJ1aWx0aW4vbG9nLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLsmKzrsJTrpbgg7Jik67iM7KCd7Yq4IOydtOumhOydtCDslYTri5nri4jri6QgKCVzKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBuZWl0aGVyIGEgY29tbWl0IG5vciBibG9iIgorbXNnc3RyICIlcyjsnYAp64qUIOy7pOuwi+uPhCDruJTroa3rj4Qg7JWE64uZ64uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTIyCittc2dpZCAiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIKK21zZ3N0ciAi7Luk67CLIOuLpOydjOyXkCDsmKTripQg7YOc6re466W8IOywvuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyMworbXNnaWQgImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiCittc2dzdHIgIu2RnOykgCDsmKTrpZjsl5DshJwg6rKA7IOJIOyghOueteydhCDrlJTrsoTquYXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MjQKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAi66qo65OgIOugiO2NvOufsOyKpOulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MjUKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAi66qo65OgIO2DnOq3uOulvCwg7KO87ISdIOuLrOumrOyngCDslYrsnYAg7YOc6re46rmM7KeAIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyNgorbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgIu2VreyDgSDquLQg7ZiV7Iud7J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyNworbXNnaWQgIm9ubHkgZm9sbG93IGZpcnN0IHBhcmVudCIKK21zZ3N0ciAi7LKrIOuyiOynuCDsnbTsoIQg7Luk67CL66eMIOuUsOudvOqwkeuLiOuLpCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzMAorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgIuygle2Zle2eiCDsnbzsuZjtlZjripQg7ZWt66qp66eMIOy2nOugpe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzMgorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgIjxuPuqwnOydmCDqsIDsnqUg7LWc6re87J2YIO2DnOq3uOunjCDqs6DroKTtlanri4jri6QgKOq4sOuzuOqwkjogMTApIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM0Cittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiPO2MqO2EtD7qs7wg7J287LmY7ZWY64qUIO2DnOq3uOunjCDqs6DroKTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzYKK21zZ2lkICJkbyBub3QgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIjztjKjthLQ+6rO8IOydvOy5mO2VmOuKlCDtg5zqt7jrpbwg6rOg66Ck7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzOCBidWlsdGluL25hbWUtcmV2LmM6NDA2Cittc2dpZCAic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIgorbXNnc3RyICLrjIDslYjsnLzroZwg7JqU7JW97ZWcIOy7pOuwiyDsmKTruIzsoJ3tirjrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM5IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDIKK21zZ2lkICJtYXJrIgorbXNnc3RyICLtkZzsi5wiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDAKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiCittc2dzdHIgIuuzgOqyveuQnCDsnpHsl4Ug7Y+0642U7JeQIDztkZzsi5w+66W8IOuSpOyXkCDrtpnsnoXri4jri6QgKOq4sOuzuOqwkjogXCItZGlydHlcIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDMKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGJyb2tlbiB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWJyb2tlblwiKSIKK21zZ3N0ciAi66ed6rCA7KeEIOyekeyXhSDtj7TrjZTsl5AgPO2RnOyLnD7rpbwg65Kk7JeQIOu2meyeheuLiOuLpCAo6riw67O46rCSOiBcIi1icm9rZW5cIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjEKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiLS1sb25nIOyYteyFmOydgCAtLWFiYnJldj0wIOyYteyFmOqzvCDtmLjtmZjrkJjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTkwCittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIuydtOumhOydtCDsl4bsirXri4jri6QuIOyVhOustOqyg+uPhCDshKTrqoXtlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NDAKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1kaXJ0eSDsmLXshZjsnYAg7Luk67CL6rCZ7J2AIO2VreuqqeqzvCDtmLjtmZjrkJjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjQyCittc2dpZCAiLS1icm9rZW4gaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWJyb2tlbiDsmLXshZjsnYAg7Luk67CL6rCZ7J2AIO2VreuqqeqzvCDtmLjtmZjrkJjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2RpZmYuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBub3QgYSByZWd1bGFyIGZpbGUgb3Igc3ltbGluayIKK21zZ3N0ciAiJyVzJzog7J2867CYIO2MjOydvOydtOuCmCDsi6zrs7zrpq0g66eB7YGs6rCAIOyVhOuLmeuLiOuLpCIKKworIzogYnVpbHRpbi9kaWZmLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAi7J6Y66q765CcIOyYteyFmDogJXMiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM1NgorbXNnaWQgIk5vdCBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICLquYMg7KCA7J6l7IaM6rCAIOyVhOuLmeuLiOuLpCIKKworIzogYnVpbHRpbi9kaWZmLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICLsnpjrqrvrkJwgJyVzJyDsmKTruIzsoJ3tirjqsIAg7KO87Ja07KGM7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIuuRkCDqsJzrs7Tri6Qg66eO7J2AIOu4lOuhreydtCDso7zslrTsoYzsirXri4jri6Q6ICclcyciCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmhhbmRsZWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICLsspjrpqztlZjsp4Ag7JWK7J2AICclcycg7Jik67iM7KCd7Yq46rCAIOyjvOyWtOyhjOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyOQorbXNnaWQgImdpdCBkaWZmdG9vbCBbPG9wdGlvbnM+XSBbPGNvbW1pdD4gWzxjb21taXQ+XV0gWy0tXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGRpZmZ0b29sIFs87Ji17IWYPl0gWzzsu6TrsIs+IFs87Luk67CLPl1dIFstLV0gWzzqsr3roZw+Li4uXSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQ6ICVkIgorbXNnc3RyICLsi6TtjKg6ICVkIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIiVzIOyLrOuzvOumrSDrp4Htgazrpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayBmaWxlICVzIgorbXNnc3RyICIlcyDsi6zrs7zrpq0g66eB7YGsIO2MjOydvOydhCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMgZm9yIHN5bWxpbmsgJXMiCittc2dzdHIgIiUyJHMg7Ius67O866atIOunge2BrOyXkCDrjIDtlZwgJTEkcyDsmKTruIzsoJ3tirjrpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo0MTIKK21zZ2lkICIiCisiY29tYmluZWQgZGlmZiBmb3JtYXRzKCctYycgYW5kICctLWNjJykgYXJlIG5vdCBzdXBwb3J0ZWQgaW5cbiIKKyJkaXJlY3RvcnkgZGlmZiBtb2RlKCctZCcgYW5kICctLWRpci1kaWZmJykuIgorbXNnc3RyICIiCisi7Lu067CU7J2465OcIGRpZmYg7ZiV7Iud7J2AICgnLWMnIOuwjyAnLS1jYycpIOuUlOugie2EsOumrCBkaWZmIOuqqOuTnOyXkOyEnOuKlFxuIgorIignLWQnIOuwjyAnLS1kaXItZGlmZicpIOyngOybkO2VmOyngCDslYrsirXri4jri6QuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjMyCisjLCBjLWZvcm1hdAorbXNnaWQgImJvdGggZmlsZXMgbW9kaWZpZWQ6ICclcycgYW5kICclcycuIgorbXNnc3RyICLrkZAg7YyM7J287J20IOyImOygleuQmOyXiOyKteuLiOuLpDogJyVzJyDrsI8gJyVzJy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzQKK21zZ2lkICJ3b3JraW5nIHRyZWUgZmlsZSBoYXMgYmVlbiBsZWZ0LiIKK21zZ3N0ciAi7J6R7JeFIO2PtOuNlOqwgCDrgqjqsqjsoLgg7J6I7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wb3JhcnkgZmlsZXMgZXhpc3QgaW4gJyVzJy4iCittc2dzdHIgIuyehOyLnCDtjIzsnbzsnbQgJyVzJ+yXkCDsnojsirXri4jri6QuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjQ2Cittc2dpZCAieW91IG1heSB3YW50IHRvIGNsZWFudXAgb3IgcmVjb3ZlciB0aGVzZS4iCittc2dzdHIgIuydtCDtjIzsnbzsnYQg7KeA7Jqw6rGw64KYIOuzteq1rO2VoCDsiJgg7J6I7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5NQorbXNnaWQgInVzZSBgZGlmZi5ndWl0b29sYCBpbnN0ZWFkIG9mIGBkaWZmLnRvb2xgIgorbXNnc3RyICJgZGlmZi50b29sYCDrjIDsi6AgYGRpZmYuZ3VpdG9vbGDsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njk3Cittc2dpZCAicGVyZm9ybSBhIGZ1bGwtZGlyZWN0b3J5IGRpZmYiCittc2dzdHIgIuyghOyytCDrlJTroInthLDrpqwgZGlmZuulvCDsiJjtlontlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTkKK21zZ2lkICJkbyBub3QgcHJvbXB0IGJlZm9yZSBsYXVuY2hpbmcgYSBkaWZmIHRvb2wiCittc2dzdHIgImRpZmYg64+E6rWs66W8IOyLpO2Wie2VmOq4sCDsoITsl5Ag7ZSE66Gs7ZSE7Yq466W8IO2RnOyLnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDQKK21zZ2lkICJ1c2Ugc3ltbGlua3MgaW4gZGlyLWRpZmYgbW9kZSIKK21zZ3N0ciAiZGlyLWRpZmYg66qo65Oc7JeQ7IScIOyLrOuzvOumrSDrp4Htgazrpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA1Cittc2dpZCAiPHRvb2w+IgorbXNnc3RyICI864+E6rWsPiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNgorbXNnaWQgInVzZSB0aGUgc3BlY2lmaWVkIGRpZmYgdG9vbCIKK21zZ3N0ciAi7KeA7KCV7ZWcIGRpZmYg64+E6rWs66W8IOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwOAorbXNnaWQgInByaW50IGEgbGlzdCBvZiBkaWZmIHRvb2xzIHRoYXQgbWF5IGJlIHVzZWQgd2l0aCBgLS10b29sYCIKK21zZ3N0ciAiYC0tdG9vbGAg7Ji17IWY7JeQ7IScIOyCrOyaqe2VoCDsiJgg7J6I64qUIGRpZmYg64+E6rWsIOuqqeuhneydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTEKK21zZ2lkICIiCisibWFrZSAnZ2l0LWRpZmZ0b29sJyBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbiAtIHplcm8gZXhpdCAiCisiY29kZSIKK21zZ3N0ciAiIgorIuyLpO2Wie2VnCBkaWZmIOuPhOq1rOqwgCAw7J20IOyVhOuLjCDsvZTrk5zrpbwg66as7YS07ZWY66m0ICdnaXQtZGlmZnRvb2wn7J20IOuBneuCmOqyjCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTMKK21zZ2lkICI8Y29tbWFuZD4iCittc2dzdHIgIjzrqoXroLk+IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE0Cittc2dpZCAic3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzIgorbXNnc3RyICJkaWZm66W8IOuztOuKlCDrqoXroLnslrTrpbwg7IKs7Jqp7J6Q6rCAIOyngOygle2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjczOAorbXNnaWQgIm5vIDx0b29sPiBnaXZlbiBmb3IgLS10b29sPTx0b29sPiIKK21zZ3N0ciAiLS10b29sPTzrj4Tqtaw+IOyYteyFmOyXkCA864+E6rWsPuqwgCDso7zslrTsp4Dsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzQ1Cittc2dpZCAibm8gPGNtZD4gZ2l2ZW4gZm9yIC0tZXh0Y21kPTxjbWQ+IgorbXNnc3RyICItLWV4dGNtZD0866qF66C5PiDsmLXshZjsl5AgPOuqheuguT7snbQg7KO87Ja07KeA7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjI3Cittc2dpZCAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKK21zZ3N0ciAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC3smLXshZhdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAwMAorbXNnaWQgInNob3cgcHJvZ3Jlc3MgYWZ0ZXIgPG4+IG9iamVjdHMiCittc2dzdHIgIuyYpOu4jOygne2KuCA8bj7qsJwg65Kk7JeQIOynhO2WiSDsg4HtmansnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAwMgorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIKK21zZ3N0ciAi7ISc66qF7ZWcIO2DnOq3uOydmCDsspjrpqwg67Cp7Iud7J2EIOyEoO2Dne2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwMDUKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgdGFncyB0aGF0IHRhZyBmaWx0ZXJlZCBvYmplY3RzIgorbXNnc3RyICLtlYTthLDrp4HtlZwg7Jik67iM7KCd7Yq47JeQIOuMgO2VnCDtg5zqt7jsnZgg7LKY66asIOuwqeyLneydhCDshKDtg53tlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDA4Cittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgIuydtCDtjIzsnbzroZwg7ZGc7Iuc66W8IOuCtOuztOuDheuLiOuLpCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwMTAKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgIuydtCDtjIzsnbzsl5DshJwg7ZGc7Iuc66W8IOqwgOyguOyYteuLiOuLpCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwMTIKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAi7YOc6re47JeQIO2DnOq3uOu2meyduCDsgqzrnozsnbQg7JeG7J2EIOuVjCDqsIDsp5zroZwg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAxNAorbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICLsu6TrsIsg66eI64ukIOyghOyytCDtirjrpqzrpbwg7Lac66Cl7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAxNgorbXNnaWQgIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIgorbXNnc3RyICLsiqTtirjrprzsnYQg64Gd64K064qU642wIOyZhOujjCDquLDriqXsnYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAxNworbXNnaWQgIlNraXAgb3V0cHV0IG9mIGJsb2IgZGF0YSIKK21zZ3N0ciAi67iU66GtIOuNsOydtO2EsOydmCDstpzroKXsnYQg6rG064SI65yB64uI64ukIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAxOAorbXNnaWQgInJlZnNwZWMiCittc2dzdHIgIuugiO2NvOufsOyKpOuqheyEuCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwMTkKK21zZ2lkICJBcHBseSByZWZzcGVjIHRvIGV4cG9ydGVkIHJlZnMiCittc2dzdHIgIuugiO2NvOufsOyKpOuqheyEuOulvCDrgrTrs7Trgrgg66CI7Y2865+w7Iqk7JeQIOyggeyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwMjAKK21zZ2lkICJhbm9ueW1pemUgb3V0cHV0IgorbXNnc3RyICLstpzroKXsnYQg7J2166qF7ZmU7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjYKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBmZXRjaCBbPOyYteyFmD5dIFs87KCA7J6l7IaMPiBbPOugiO2NvOufsOyKpOuqheyEuD4uLi5dXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI3Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cD4iCittc2dzdHIgImdpdCBmZXRjaCBbPOyYteyFmD5dIDzqt7jro7k+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MjgKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzzsmLXshZg+XSBbKDzsoIDsnqXshow+IHwgPOq3uOujuT4pLi4uXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI5Cittc2dpZCAiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1hbGwgWzzsmLXshZg+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMyBidWlsdGluL3B1bGwuYzoxOTMKK21zZ2lkICJmZXRjaCBmcm9tIGFsbCByZW1vdGVzIgorbXNnc3RyICLrqqjrk6Ag66as66qo7Yq47JeQ7IScIOqwgOyguOyYteuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyNSBidWlsdGluL3B1bGwuYzoxOTYKK21zZ2lkICJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciCittc2dzdHIgIuuNruyWtOyTsOyngCDrp5Dqs6AgLmdpdC9GRVRDSF9IRUFE7JeQIOuNp+u2meyeheuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyNyBidWlsdGluL3B1bGwuYzoxOTkKK21zZ2lkICJwYXRoIHRvIHVwbG9hZCBwYWNrIG9uIHJlbW90ZSBlbmQiCittc2dzdHIgIuumrOuqqO2KuCDsqr3sl5Ag66y27J2M7J2EIOyXheuhnOuTnO2VoCDqsr3roZwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjggYnVpbHRpbi9wdWxsLmM6MjAxCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAi66Gc7LusIOu4jOuenOy5mOulvCDqsJXsoJzroZwg642u7Ja07JSB64uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTMwCittc2dpZCAiZmV0Y2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIgorbXNnc3RyICLsl6zrn6wg66as66qo7Yq47JeQ7IScIOqwgOyguOyYteuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzMiBidWlsdGluL3B1bGwuYzoyMDMKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICLrqqjrk6Ag7YOc6re47JmAIOq0gOugqCDsmKTruIzsoJ3tirjrpbwg6rCA7KC47Ji164uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM0Cittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICLrqqjrk6Ag7YOc6re466W8IOqwgOyguOyYpOyngCDslYrsirXri4jri6QgKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzYKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBmZXRjaGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICLrs5HroKzsoIHsnLzroZwg67Cb7JWE7Jik64qUIO2VmOychOuqqOuTiCDqsJzsiJgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzggYnVpbHRpbi9wdWxsLmM6MjA2Cittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgIuumrOuqqO2KuOyXkCDsnbTsoJwg7JeG64qUIOumrOuqqO2KuCDstpTsoIEg67iM656c7LmY66W8IOyemOudvOuDheuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MAorbXNnaWQgInBydW5lIGxvY2FsIHRhZ3Mgbm8gbG9uZ2VyIG9uIHJlbW90ZSBhbmQgY2xvYmJlciBjaGFuZ2VkIHRhZ3MiCittc2dzdHIgIuumrOuqqO2KuCDsoIDsnqXshozsl5Ag7JeG64qUIOuhnOy7rCDtg5zqt7jrpbwg7KCc6rGw7ZWY6rOgIOuzgOqyveuQnCDtg5ztgazrpbwg7KCB7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQxIGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9wdWxsLmM6MTMxCittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICLso7zrrLjtmJUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDIKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOyerOq3gOyggeycvOuhnCDqsIDsoLjsmKTquLAg67Cp7Iud7J2EIOyEpOygle2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NiBidWlsdGluL3B1bGwuYzoyMTQKK21zZ2lkICJrZWVwIGRvd25sb2FkZWQgcGFjayIKK21zZ3N0ciAi64uk7Jq066Gc65Oc7ZWcIOustuydjOydhCDrs7TsobTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDgKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAiSEVBRCDroIjtjbzrn7DsiqQg7JeF642w7J207Yq466W8IO2XiOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MSBidWlsdGluL2ZldGNoLmM6MTU3IGJ1aWx0aW4vcHVsbC5jOjIxNworbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiCittc2dzdHIgIuyWleydgCDrs7XsoJzsnZgg7Luk67CLIOuCtOyXreydhCDquYrqsowg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUzCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyByZXBvc2l0b3J5IGJhc2VkIG9uIHRpbWUiCittc2dzdHIgIuyWleydgCDrs7XsoJzsnZgg7Luk67CLIOuCtOyXreydhCDsi5zqsITsnYQg6riw7KSA7Jy866GcIOq5iuqyjCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTkgYnVpbHRpbi9wdWxsLmM6MjIwCittc2dpZCAiY29udmVydCB0byBhIGNvbXBsZXRlIHJlcG9zaXRvcnkiCittc2dzdHIgIuyZhOyghO2VnCDsoIDsnqXshozroZwg7KCE7ZmY7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYyCittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiCDqsr3roZwg7Lac66Cl7J2YIOyVnuyXkCDsnbQg65SU66CJ7YSw66as66W8IOu2meyeheuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2NQorbXNnaWQgIiIKKyJkZWZhdWx0IGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyAobG93ZXIgcHJpb3JpdHkgdGhhbiBjb25maWcgIgorImZpbGVzKSIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiOydhCDsnqzqt4DsoIHsnLzroZwg6rCA7KC47JisIOuVjCDquLDrs7jqsJIgKOyEpOyglSDtjIzsnbzrs7Tri6Qg64Ku7J2AIOyasOyEoCDsiJzsnIQpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY5IGJ1aWx0aW4vcHVsbC5jOjIyMworbXNnaWQgImFjY2VwdCByZWZzIHRoYXQgdXBkYXRlIC5naXQvc2hhbGxvdyIKK21zZ3N0ciAiLmdpdC9zaGFsbG9366W8IOyXheuNsOydtO2KuO2VmOuKlCDroIjtjbzrn7DsiqTrpbwg7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcwIGJ1aWx0aW4vcHVsbC5jOjIyNQorbXNnaWQgInJlZm1hcCIKK21zZ3N0ciAi66CI7Y2865+w7Iqk66e1IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcxIGJ1aWx0aW4vcHVsbC5jOjIyNgorbXNnaWQgInNwZWNpZnkgZmV0Y2ggcmVmbWFwIgorbXNnc3RyICLroIjtjbzrn7DsiqTrp7Ug6rCA7KC47Jik6riw66W8IOyngOygle2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MiBidWlsdGluL2xzLXJlbW90ZS5jOjc3IGJ1aWx0aW4vcHVzaC5jOjU4MgorIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJzZXJ2ZXItc3BlY2lmaWMiCittc2dzdHIgIuyEnOuyhC3soITsmqkt7Ji17IWYIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcyIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzcgYnVpbHRpbi9wdXNoLmM6NTgyCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgIm9wdGlvbiB0byB0cmFuc21pdCIKK21zZ3N0ciAi7KCE7Iah7ZWgIOyYteyFmCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ0MgorbXNnaWQgIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIgorbXNnc3RyICLrpqzrqqjtirgg66CI7Y2865+w7IqkIEhFQUTrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlndXJhdGlvbiBmZXRjaC5vdXRwdXQgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAlcyIKK21zZ3N0ciAiZmV0Y2gub3V0cHV0IOyEpOygleyXkCDsnpjrqrvrkJwg6rCS7J20IOyeiOyKteuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiJXMg7Jik67iM7KCd7Yq46rCAIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1NworbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW+y1nOyLoCDsg4Htg5xdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjcwIGJ1aWx0aW4vZmV0Y2guYzo3NTAKK21zZ2lkICJbcmVqZWN0ZWRdIgorbXNnc3RyICJb6rGw67aA65CoXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY3MQorbXNnaWQgImNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICLtmITsnqwg67iM656c7LmY7JeQ7IScIOqwgOyguOyYrCDsiJgg7JeG7J2MIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjgwCittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICJb7YOc6re4IOyXheuNsOydtO2KuF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2ODEgYnVpbHRpbi9mZXRjaC5jOjcxNCBidWlsdGluL2ZldGNoLmM6NzMwCisjOiBidWlsdGluL2ZldGNoLmM6NzQ1Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgIuuhnOy7rCDroIjtjbzrn7DsiqTrpbwg7JeF642w7J207Yq47ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MDAKK21zZ2lkICJbbmV3IHRhZ10iCittc2dzdHIgIlvsg4jroZzsmrQg7YOc6re4XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcwMworbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW+yDiOuhnOyatCDruIzrnpzsuZhdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzA2Cittc2dpZCAiW25ldyByZWZdIgorbXNnc3RyICJb7IOI66Gc7Jq0IOugiO2NvOufsOyKpF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NDUKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICLqsJXsoJwg7JeF642w7J207Yq4IgorCisjOiBidWlsdGluL2ZldGNoLmM6NzUwCittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAi7KCV67Cp7ZalIOynhO2WieydtCDslYTri5giCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIlc+ydtCjqsIApIOuqqOuToCDtlYTsmpTtlZwg7Jik67iM7KCd7Yq466W8IOuztOuCtOyngCDslYrslZjsirXri4jri6RcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWplY3QgJXMgYmVjYXVzZSBzaGFsbG93IHJvb3RzIGFyZSBub3QgYWxsb3dlZCB0byBiZSB1cGRhdGVkIgorbXNnc3RyICLslpXsnYAg7LWc7IOB7JyE7J2YIOyXheuNsOydtO2KuOqwgCDtl4jsmqnrkJjsp4Ag7JWK7Jy866+A66GcICVz7J2EKOulvCkg6rGw67aA7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTAzIGJ1aWx0aW4vZmV0Y2guYzo5OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIiUuKnMgVVJM7JeQ7IScXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorIuyXheuNsOydtO2KuO2VoCDsiJgg7JeG64qUIOuhnOy7rCDroIjtjbzrn7DsiqTqsIAg7J6I7Iq164uI64ukLiDqs7zqsbAg7Lap64+MIOu4jOuenOy5mOulvFxuIgorIiDsoJzqsbDtlZjroKTrqbQgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIOuqheugueydhCDsi6TtlontlbQg67O07Iut7Iuc7JikIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyDroIjtjbzrn7DsiqTqsIAg7Jew6rKw7J20IOuBiuyWtOyngOqyjCDrkKnri4jri6QpIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIOugiO2NvOufsOyKpOqwgCDsl7DqsrDsnbQg64GK7Ja07KGM7Iq164uI64ukKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMDIKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIlvsgq3soJzrkKhdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAwMyBidWlsdGluL3JlbW90ZS5jOjEwMzMKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIijsl4bsnYwpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAyNgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIuqwhOuete2VnCDsoIDsnqXshozqsIAg7JWE64uMIOyggOyepeyGjOydmCDtmITsnqwgJXMg67iM656c7LmY66GcIOqwgOyguOyYpOq4sOulvCDqsbDsoIjtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIlwiJXNcIiDsmLXshZjsnZggXCIlc1wiIOqwkuydgCAlc+yXkCDrjIDtlbQg7Jis67CU66W07KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICJcIiVzXCIg7Ji17IWY7J2AICclcyfsl5Ag64yA7ZW0IOustOyLnOuQqeuLiOuLpFxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI4NworIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICIlc+ydhCjrpbwpIOqwgOyguOyYpOuKlCDspJFcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyODkgYnVpbHRpbi9yZW1vdGUuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgIiVz7J2EKOulvCkg6rCA7KC47JisIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzM1IGJ1aWx0aW4vZmV0Y2guYzoxNTAzCittc2dpZCAiIgorIi0tZmlsdGVyIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgcmVtb3RlIGNvbmZpZ3VyZWQgaW4gY29yZS5wYXJ0aWFsQ2xvbmUiCittc2dzdHIgIiIKKyItLWZpbHRlciDsmLXshZjsnYAgY29yZS5wYXJ0aWFsQ2xvbmXsl5Ag7ISk7KCV65CcIOumrOuqqO2KuCDsoIDsnqXshozsl5Drp4wg7IKs7Jqp7ZWgIOyImCDsnojsirXri4giCisi64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM1OAorbXNnaWQgIiIKKyJObyByZW1vdGUgcmVwb3NpdG9yeSBzcGVjaWZpZWQuICBQbGVhc2UsIHNwZWNpZnkgZWl0aGVyIGEgVVJMIG9yIGFcbiIKKyJyZW1vdGUgbmFtZSBmcm9tIHdoaWNoIG5ldyByZXZpc2lvbnMgc2hvdWxkIGJlIGZldGNoZWQuIgorbXNnc3RyICIiCisi66as66qo7Yq4IOyggOyepeyGjOulvCDsp4DsoJXtlZjsp4Ag7JWK7JWY7Iq164uI64ukLiDsg4gg66as67mE7KCE7J2EIOqwgOyguOyYrCDsiJgg7J6I64qUXG4iCisiVVJM7J2064KYIOumrOuqqO2KuCDsnbTrpoTsnYQg7KeA7KCV7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzOTUKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICLtg5zqt7gg7J2066aE7J2EIOyngOygle2VtOyVvCDtlanri4jri6QuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ0NAorbXNnaWQgIk5lZ2F0aXZlIGRlcHRoIGluIC0tZGVlcGVuIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIi0tZGVlcGVuIOyYteyFmOyXkCDsnYzsiJgg6rmK7J2064qUIOyngOybkO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDQ2Cittc2dpZCAiLS1kZWVwZW4gYW5kIC0tZGVwdGggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1kZWVwZW4sIC0tZGVwdGgg7Ji17IWYIOykkSDtlZjrgpjrp4wg7JO4IOyImCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDUxCittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi0tZGVwdGgg67CPIC0tdW5zaGFsbG93IOyYteyFmOydgCDqsJnsnbQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDUzCittc2dpZCAiLS11bnNoYWxsb3cgb24gYSBjb21wbGV0ZSByZXBvc2l0b3J5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKyLsmYTsoITtlZwg7KCA7J6l7IaM7JeQIOuMgO2VtCAtLXVuc2hhbGxvdyDsmLXshZjsnYQg7IKs7Jqp7ZWY64qUIOqxtCDslZ7rkqTqsIAg66ee7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NjkKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwg66qF66C57JeQIOyggOyepeyGjCDsnbjsnpDqsIAg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ3MQorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwg66qF66C57J2AIOugiO2NvOufsOyKpOuqheyEuCDsnbjsnpDsmYAg6rCZ7J20IOyTsOuptCDslZ7rkqTqsIAg66ee7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAi6re465+wIOumrOuqqO2KuOuCmCDrpqzrqqjtirgg6re466O57J20IOyXhuyKteuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDg3Cittc2dpZCAiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLqt7jro7nsnYQg6rCA7KC47Jik6rOgIOugiO2NvOufsOyKpOuqheyEuOulvCDsp4DsoJXtlZjrqbQg7JWe65Kk6rCAIOunnuyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjE1Cittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPOuplOyLnOyngD5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDztjIzsnbw+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjY2Cittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICJzaG9ydGxvZ+yXkOyEnCDstZzrjIAgPG4+6rCcIOuhnOq3uOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY2OQorbXNnaWQgImFsaWFzIGZvciAtLWxvZyAoZGVwcmVjYXRlZCkiCittc2dzdHIgIi0tbG9n7JmAIOuPmeydvCAo7JeG7Ja07KeIIOyYiOyglSkiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MgorbXNnaWQgInRleHQiCittc2dzdHIgIu2FjeyKpO2KuCIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczCittc2dpZCAidXNlIDx0ZXh0PiBhcyBzdGFydCBvZiBtZXNzYWdlIgorbXNnc3RyICI87YWN7Iqk7Yq4PuulvCDsi5zsnpEg66mU7Iuc7KeA66GcIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc0Cittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgIuydveyWtOuTpOydvCDtjIzsnbwiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFs8b3B0aW9ucz5dIFs8cGF0dGVybj5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFs87Ji17IWYPl0gWzztjKjthLQ+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMQorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPOyYpOu4jOygne2KuD5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEyCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8Y29tbWl0Pl1dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzzsu6TrsIs+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTMKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIFstLW5vLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs87Luk67CLPl1dIFstLW5vLWNvbnRhaW5zIFs87Luk67CLPl1dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI4Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBzaGVsbHMiCittc2dzdHIgIuyFuOyXkCDsoIHtlantlZjqsowg7ZSM66CI7J207Iqk7ZmA642U66W8IOyduOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAi7Y6E7JeQIOygge2Vqe2VmOqyjCDtlIzroIjsnbTsiqTtmYDrjZTrpbwg7J247Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMyCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgIu2MjOydtOyNrOyXkCDsoIHtlantlZjqsowg7ZSM66CI7J207Iqk7ZmA642U66W8IOyduOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgVGNsIgorbXNnc3RyICLti7DtgbTsl5Ag7KCB7ZWp7ZWY6rKMIO2UjOugiOydtOyKpO2ZgOuNlOulvCDsnbjsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzcKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAiPG4+6rCc7J2YIO2VtOuLue2VmOuKlCDroIjtjbzrn7DsiqTrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM5IGJ1aWx0aW4vdGFnLmM6NDIxCittc2dpZCAicmVzcGVjdCBmb3JtYXQgY29sb3JzIgorbXNnc3RyICLtj6zrp7cg7IOJ7J2EIOycoOyngO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MworbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBwb2ludHMgYXQgdGhlIGdpdmVuIG9iamVjdCIKK21zZ3N0ciAi7KO87Ja07KeEIOyYpOu4jOygne2KuOulvCDqsIDrpqztgqTripQg66CI7Y2865+w7Iqk66eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NQorbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgIuuzke2Vqe2VmOuKlCDroIjtjbzrn7DsiqTrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ2Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgIuuzke2Vqe2VmOyngCDslYrripQg66CI7Y2865+w7Iqk66eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NworbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIuy7pOuwi+ydtCDrk6TslrQg7J6I64qUIOugiO2NvOufsOyKpOunjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDgKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLsu6TrsIvsnbQg65Ok7Ja0IOyeiOyngCDslYrsnYAg66CI7Y2865+w7Iqk66eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mc2NrLmM6NTY5Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yaWVzIgorbXNnc3RyICLsmKTruIzsoJ3tirgg65SU66CJ7YSw66as66W8IO2ZleyduO2VmOuKlCDspJHsnoXri4jri6QiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY2MQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs87Ji17IWYPl0gWzzsmKTruIzsoJ3tirg+Li4uXSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjY3Cittc2dpZCAic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLsoJHqt7ztlaAg7IiYIOyXhuuKlCDsmKTruIzsoJ3tirjrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZzY2suYzo2NjgKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgIuyXsOqysOydtCDrgYrslrTsp4Qg7Jik67iM7KCd7Yq466W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjY5Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgIu2DnOq3uOulvCDslYzrpr3ri4jri6QiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3MAorbXNnaWQgInJlcG9ydCByb290IG5vZGVzIgorbXNnc3RyICLstZzsg4HsnIQg64W465Oc66W8IOyVjOumveuLiOuLpCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjcxCittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgIuyduOuNseyKpCDsmKTruIzsoJ3tirgg7Zek65OcIOuFuOuTnOulvCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3MgorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAicmVmbG9nIO2XpOuTnCDrhbjrk5zrpbwg66eM65Ot64uI64ukICjquLDrs7jqsJIpIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzMKK21zZ2lkICJhbHNvIGNvbnNpZGVyIHBhY2tzIGFuZCBhbHRlcm5hdGUgb2JqZWN0cyIKK21zZ3N0ciAi66y27J2M6rO8IOuztOyhsCDsmKTruIzsoJ3tirjrj4Qg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzQKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAi7Jew6rKw66eMIO2ZleyduO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mc2NrLmM6Njc1Cittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICLrjZQg7JeE6rKp7ZWY6rKMIO2ZleyduO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mc2NrLmM6Njc3Cittc2dpZCAid3JpdGUgZGFuZ2xpbmcgb2JqZWN0cyBpbiAuZ2l0L2xvc3QtZm91bmQiCittc2dzdHIgIi5naXQvbG9zdC1mb3VuZCDslYjsl5Ag7Jew6rKw7J20IOuBiuyWtOynhCDsmKTruIzsoJ3tirjrpbwg7JSB64uI64ukIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzggYnVpbHRpbi9wcnVuZS5jOjEwOQorbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgIuynhO2WiSDsg4HtmansnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzkKK21zZ2lkICJzaG93IHZlcmJvc2UgbmFtZXMgZm9yIHJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLsoJHqt7ztlaAg7IiYIOyXhuuKlCDsmKTruIzsoJ3tirjsnZgg7J2066aE7J2EIOyekOyEuO2eiCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc0NQorbXNnaWQgIkNoZWNraW5nIG9iamVjdHMiCittc2dzdHIgIuyYpOu4jOygne2KuOulvCDtmZXsnbjtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ2MuYzozMworbXNnaWQgImdpdCBnYyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGdjIFs87Ji17IWYPl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZnN0YXQgJXM6ICVzIgorbXNnc3RyICInJXMn7JeQIGZzdGF0KCntlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukOiAlcyIKKworIzogYnVpbHRpbi9nYy5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBzdGF0ICVzIgorbXNnc3RyICInJXMn7JeQIHN0YXQoKe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2djLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbGFzdCBnYyBydW4gcmVwb3J0ZWQgdGhlIGZvbGxvd2luZy4gUGxlYXNlIGNvcnJlY3QgdGhlIHJvb3QgY2F1c2VcbiIKKyJhbmQgcmVtb3ZlICVzLlxuIgorIkF1dG9tYXRpYyBjbGVhbnVwIHdpbGwgbm90IGJlIHBlcmZvcm1lZCB1bnRpbCB0aGUgZmlsZSBpcyByZW1vdmVkLlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisi66eI7KeA66eJIOqwgOu5hOyngOy7rOugie2EsOyXkOyEnCDri6TsnYzsnYQg7JWM66Ck7JmU7Iq164uI64ukLiDsm5DsnbjsnYQg67CU66Gc7J6h7J2AXG4iCisi64uk7J2MICVzIO2MjOydvOydhCDsoJzqsbDtlZjsi63si5zsmKQuXG4iCisi7J20IO2MjOydvOydhCDsoJzqsbDtlZjquLAg7KCE7JeQ64qUIOyekOuPmSDsoJXrpqwg7J6R7JeF7J2EIOyImO2Wie2VmOyngCDslYrsirXri4jri6QuXG4iCisiXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1MDIKK21zZ2lkICJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAi66CI7Y2865+w7Iqk7ZWY7KeAIOyViuuKlCDsmKTruIzsoJ3tirjrpbwg7J6Y652864OF64uI64ukIgorCisjOiBidWlsdGluL2djLmM6NTA0Cittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICLrjZQg7J6Q7IS47Z6IIOqygOyCrO2VqeuLiOuLpCAo7Iuk7ZaJIOyLnOqwhCDripjslrTrgqgpIgorCisjOiBidWlsdGluL2djLmM6NTA1Cittc2dpZCAiZW5hYmxlIGF1dG8tZ2MgbW9kZSIKK21zZ3N0ciAi7J6Q64+ZIOqwgOu5hOyngOy7rOugie2EsCDrqqjrk5zrpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2djLmM6NTA4Cittc2dpZCAiZm9yY2UgcnVubmluZyBnYyBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGdjIHJ1bm5pbmciCittc2dzdHIgIuydtOuvuCDqsIDruYTsp4Dsu6zroInthLDqsIAg7Iuk7ZaJIOykkeydtOuNlOudvOuPhCDqsJXsoJzroZwg6rCA67mE7KeA7Lus66CJ7YSw66W8IOyLpO2Wie2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9nYy5jOjUxMQorbXNnaWQgInJlcGFjayBhbGwgb3RoZXIgcGFja3MgZXhjZXB0IHRoZSBsYXJnZXN0IHBhY2siCittc2dzdHIgIuqwgOyepSDtgbAg66y27J2M7J2EIOygnOyZuO2VnCDri6Trpbgg66y27J2M7J2EIOuLpOyLnCDrrLbsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGdjLmxvZ2V4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiZ2MubG9nZXhwaXJ5IOqwkuydhCAoJXMpIO2MjOyLse2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIHBydW5lIGV4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAi66eM66OM6rCSICVzIO2MjOyLse2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGluIGJhY2tncm91bmQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIuy1nOyggSDshLHriqXsnYQg7JyE7ZW0IOuwseq3uOudvOyatOuTnOyXkOyEnCDsnpDrj5nsnLzroZwg7KCA7J6l7IaM7J2YIOustuydjOydhCDrp4zrk63ri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICLstZzsoIEg7ISx64ql7J2EIOychO2VtCDsnpDrj5nsnLzroZwg7KCA7J6l7IaM7J2YIOustuydjOydhCDrp4zrk63ri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIKK21zZ3N0ciAi7IiY64+ZIOq0gOumrCDsnpHsl4XsnYAgXCJnaXQgaGVscCBnY1wiIOuCtOyaqeydhCDssLjqs6DtlZjsi63si5zsmKQuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCittc2dzdHIgIiIKKyLqsIDruYTsp4Dsu6zroInthLDqsIAg7J2066+4ICclcycg7Lu07ZOo7YSw7JeQ7IScICU8UFJJdU1BWD4gUElE66GcIOyLpO2WiSDspJHsnoXri4jri6QgKOyVhOuLiOuptCAtLSIKKyJmb3JjZeulvCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiBidWlsdGluL2djLmM6NjQ1Cittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgorbXNnc3RyICIiCisi64qQ7Iqo7ZWcIOyYpOu4jOygne2KuOqwgCDrhIjrrLQg66eO7Iq164uI64ukLiDsoJzqsbDtlZjroKTrqbQgJ2dpdCBwcnVuZSfsnYQg7Iuk7ZaJ7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MjgKK21zZ2lkICJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBncmVwIFs87Ji17IWYPl0gWy1lXSA87Yyo7YS0PiBbPOumrOu5hOyghD4uLi5dIFtbLS1dIDzqsr3roZw+Li4uXSIKKworIzogYnVpbHRpbi9ncmVwLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiZ3JlcDog7Iqk66CI65Oc66W8IOunjOuTnOuKlOuNsCDsi6TtjKjtlojsirXri4jri6Q6ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSBmb3IgJXMiCittc2dzdHIgIuyemOuqu+uQnCDsiqTroIjrk5wg7IiY66W8ICUyJHPsl5Ag64yA7ZW0IOyngOygle2WiOyKteuLiOuLpCAoJTEkZCkiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBpcyB0aGUgY29uZmlndXJhdGlvbgorIy4gdmFyaWFibGUgZm9yIHR3ZWFraW5nIHRocmVhZHMsIGN1cnJlbnRseQorIy4gZ3JlcC50aHJlYWRzCisjLgorIzogYnVpbHRpbi9ncmVwLmM6MjkzIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzUgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyNworIywgYy1mb3JtYXQKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIgorbXNnc3RyICLsiqTroIjrk5wg6riw64ql7J20IOyXhuyKteuLiOuLpC4gJXMg66y07IucIgorCisjOiBidWlsdGluL2dyZXAuYzo0NjEgYnVpbHRpbi9ncmVwLmM6NTgyIGJ1aWx0aW4vZ3JlcC5jOjYyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgIu2KuOumrOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCAoJXMpIgorCisjOiBidWlsdGluL2dyZXAuYzo2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAi7KKF66WY6rCAICVz7J24IOyYpOu4jOygne2KuOyXkOyEnCBncmVw7J2EIO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo3MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiYCVjJyDsmLXshZjsl5DripQg7Iir7J6QIOqwkuydtCDsmYDslbwg7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo3OTAKK21zZ2lkICJzZWFyY2ggaW4gaW5kZXggaW5zdGVhZCBvZiBpbiB0aGUgd29yayB0cmVlIgorbXNnc3RyICLsnpHsl4Ug7Y+0642UIOuMgOyLoOyXkCDsnbjrjbHsiqTsl5DshJwg6rKA7IOJ7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo3OTIKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAi6rmD7Jy866GcIOq0gOumrO2VmOyngCDslYrsnYAg64K07Jqp7JeQ7IScIOywvuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6Nzk0Cittc2dpZCAic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLstpTsoIHrkJjripQg7YyM7J286rO8IOy2lOyggeuQmOyngCDslYrripQg7YyM7J28IOuqqOuRkOyXkOyEnCDqsoDsg4ntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc5NgorbXNnaWQgImlnbm9yZSBmaWxlcyBzcGVjaWZpZWQgdmlhICcuZ2l0aWdub3JlJyIKK21zZ3N0ciAiJy5naXRpZ25vcmUn66GcIOyngOygle2VnCDtjIzsnbzsnYQg66y07Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo3OTgKK21zZ2lkICJyZWN1cnNpdmVseSBzZWFyY2ggaW4gZWFjaCBzdWJtb2R1bGUiCittc2dzdHIgIuqwgSDtlZjsnIQg66qo65OI7JeQIOyerOq3gOyggeycvOuhnCDqsoDsg4ntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwMQorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICLsnbzsuZjtlZjsp4Ag7JWK64qUIOykhOydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwMworbXNnaWQgImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciCittc2dzdHIgIuuMgOyGjOusuOyekCDqtazrs4TtlZjsp4Ag7JWK6rOgIOu5hOq1kO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODA1Cittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgIuuLqOyWtCDqsr3qs4Qg67aA67aE7JeQIOuMgO2VtOyEnOunjCDtjKjthLTsnYQg66ee7Lal64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDcKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICLrsJTsnbTrhIjrpqwg7YyM7J287J2EIO2FjeyKpO2KuOuhnCDsspjrpqztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwOQorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAi67CU7J2064SI66asIO2MjOydvOyXkOyEnCDtjKjthLTsnYQg66ee7LaU7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODEyCittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgd2l0aCB0ZXh0Y29udiBmaWx0ZXJzIgorbXNnc3RyICJ0ZXh0Y29udiDtlYTthLDrpbwg7IKs7Jqp7ZW0IOuwlOydtOuEiOumrCDtjIzsnbzsnYQg7LKY66as7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTQKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgIuy1nOuMgCA86rmK7J20PiDri6jqs4Trp4ztgbwg64K066Ck6rCR64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTgKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAiUE9TSVgg7ZmV7J6lIOygleq3nOyLneydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMQorbXNnaWQgInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIKK21zZ3N0ciAi6riw67O4IFBPU0lYIOygleq3nOyLneydhCDsgqzsmqntlanri4jri6QgKOq4sOuzuOqwkikiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNAorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICLtjKjthLTsnYQg6rOg7KCVIOusuOyekOyXtOuhnCDtlbTshJ3tlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNworbXNnaWQgInVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAi7Y6E6rO8IO2YuO2ZmOuQmOuKlCDsoJXqt5zsi53snYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzAKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAi7KSEIOuyiO2YuOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMQorbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICLtjIzsnbwg7J2066aE7J2EIO2RnOyLnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMgorbXNnaWQgInNob3cgZmlsZW5hbWVzIgorbXNnc3RyICLtjIzsnbwg7J2066aE7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM0Cittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAi7YyM7J28IOydtOumhOydhCDstZzsg4HsnIQg65SU66CJ7YSw66asIOyDgeuMgCDqsr3roZzroZwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzYKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIuydvOy5mO2VmOuKlCDspITsnYQg7ZGc7Iuc7ZWY7KeAIOyViuqzoCDtjIzsnbwg7J2066aE66eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM4Cittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgIi0tZmlsZXMtd2l0aC1tYXRjaGVzIOyYteyFmOqzvCDrj5nsnbwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0MQorbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAi7J287LmY7ZWY7KeAIOyViuuKlCDtjIzsnbzsnZgg7J2066aE66eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQzCittc2dpZCAicHJpbnQgTlVMIGFmdGVyIGZpbGVuYW1lcyIKK21zZ3N0ciAi7YyM7J28IOydtOumhCDri6TsnYzsl5AgTlVM7J2EIOy2nOugpe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ2Cittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAi7J287LmY7ZWY64qUIOykhOydhCDtkZzsi5ztlZjsp4Ag7JWK6rOgIOydvOy5mO2VmOuKlCDsiJjrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDcKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAi7J287LmY7ZWY64qUIOu2gOu2hOydhCDqsJXsobDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0OQorbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICLri6Trpbgg7YyM7J28IOyCrOydtOyXkCDsnbzsuZjtlZjripQg67aA67aE7J2YIOyCrOydtOyXkCDruYgg7KSE7J2EIOy2nOugpe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODUxCittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAi6rCZ7J2AIO2MjOydvOyXkOyEnCDsl6zrn6wg6rCc6rCAIOydvOy5mO2VmOuptCDtjIzsnbwg7J2066aE7J2EIO2VnCDrsojrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTQKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAi7J287LmY7ZWY64qUIOu2gOu2hCDslZ7rkqTsl5Ag7Luo7YWN7Iqk7Yq466W8IDxuPuykhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NworbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIuydvOy5mO2VmOuKlCDrtoDrtoQg7JWe7JeQIOy7qO2FjeyKpO2KuOulvCA8bj7spIQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTkKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIuydvOy5mO2VmOuKlCDrtoDrtoQg65Kk7JeQIOy7qO2FjeyKpO2KuOulvCA8bj7spIQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjEKK21zZ2lkICJ1c2UgPG4+IHdvcmtlciB0aHJlYWRzIgorbXNnc3RyICI8bj7qsJzsnZgg7J6R7JeFIOyKpOugiOuTnOulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MgorbXNnaWQgInNob3J0Y3V0IGZvciAtQyBOVU0iCittc2dzdHIgIi1DIE5VTSDsmLXshZjsnZgg7KSE7J6EIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjUKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICLsnbzsuZgg7ZWt66qpIOyVnuyXkCDtlajsiJgg7J2066aEIOykhOydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NworbXNnaWQgInNob3cgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIgorbXNnc3RyICLrk6TslrQg7J6I64qUIO2VqOyImOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3MAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIgorbXNnc3RyICLtjIzsnbzsl5DshJwg7Yyo7YS07J2EIOydveyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODcyCittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICI87Yyo7YS0PuqzvCDsnbzsuZgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NAorbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgIi1lIOyYteyFmOycvOuhnCDsp4DsoJXtlZwg7Yyo7YS07J2EIOqysO2Vqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg2Cittc2dpZCAiaW5kaWNhdGUgaGl0IHdpdGggZXhpdCBzdGF0dXMgd2l0aG91dCBvdXRwdXQiCittc2dzdHIgIuy2nOugpe2VmOyngCDslYrqs6Ag7J287LmY7ZWY64qUIO2VreuqqeydhCBleGl0KCkg7IOB7YOcIOuyiO2YuOuhnCDrpqzthLTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4OAorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgIuuqqOuToCDtjKjthLTqs7wg7J287LmY7ZWY64qUIO2MjOydvOydmCDsnbzsuZjtlZjripQg67aA67aE66eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkwCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgImdyZXAg7ZGc7ZiE7Iud7JeQIOuMgO2VnCDtjIzsi7Eg7Yq466as66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk0Cittc2dpZCAicGFnZXIiCittc2dzdHIgIu2OmOydtOyggCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk0Cittc2dpZCAic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiCittc2dzdHIgIuydvOy5mO2VmOuKlCDtjIzsnbzsnYQg7Y6Y7J207KCAIO2UhOuhnOq3uOueqOyXkOyEnCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5OAorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAiZ3JlcCgxKSDsi6TtlonsnYQg7ZeI7Jqp7ZWp64uI64ukICjsnbQg67mM65Oc7JeQ7ISc64qUIOustOyLnCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk2MgorbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4uIgorbXNnc3RyICLtjKjthLTsnYQg7KeA7KCV7ZWY7KeAIOyViuyVmOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk5NAorbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzIgorbXNnc3RyICItLW5vLWluZGV4IOuYkOuKlCAtLXVudHJhY2tlZCDsmLXshZjsnYAg66as67mE7KCE6rO8IOqwmeydtCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiCittc2dzdHIgIuumrOu5hOyghOydhCDssL7slYTrgrwg7IiYIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMzYgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIgorbXNnc3RyICLsnpjrqrvrkJwg7Iqk66CI65OcIOyImOulvCDsp4DsoJXtlojsirXri4jri6QgKCVkKSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA0MQorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICLsiqTroIjrk5wg6riw64ql7J20IOyXhuyKteuLiOuLpC4gLS10aHJlYWRzIOyYteyFmCDrrLTsi5wiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjUKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIi0tb3Blbi1maWxlcy1pbi1wYWdlciDsmLXshZjsnYAg7J6R7JeFIO2PtOuNlOyXkOyEnOunjCDrj5nsnpHtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwODgKK21zZ2lkICJvcHRpb24gbm90IHN1cHBvcnRlZCB3aXRoIC0tcmVjdXJzZS1zdWJtb2R1bGVzLiIKK21zZ3N0ciAiLS1yZWN1cnNlLXN1Ym1vZHVsZXPsmYAg6rCZ7J20IOyngOybkO2VmOyngCDslYrripQg7Ji17IWY7J6F64uI64ukLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA5NAorbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleC4iCittc2dzdHIgIiIKKyItLWNhY2hlZCDrmJDripQgLS11bnRyYWNrZWQg7Ji17IWY7J2AIC0tbm8taW5kZXgg7Ji17IWY6rO8IOqwmeydtCDsk7gg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMDAKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cy4iCittc2dzdHIgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIOyYteyFmOydgCDstpTsoIHrkJjripQg64K07Jqp7JeQIOuMgO2VtCDsk7gg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMDgKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4uIgorbXNnc3RyICItLWNhY2hlZCDsmLXshZjqs7wg7Yq466as66W8IOuqqOuRkCDsp4DsoJXtlojsirXri4jri6QuIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODMKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDzsooXrpZg+XSBbLXddIFstLXBhdGg9PO2MjOydvD4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA87YyM7J28Pi4uLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg0Cittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NgorbXNnaWQgInR5cGUiCittc2dzdHIgIuyiheulmCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk2Cittc2dpZCAib2JqZWN0IHR5cGUiCittc2dzdHIgIuyYpOu4jOygne2KuCDsooXrpZgiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NworbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLsmKTruIzsoJ3tirjrpbwg7Jik67iM7KCd7Yq4IOuNsOydtO2EsOuyoOydtOyKpOuhnCDslIHri4jri6QiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorbXNnaWQgInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIgorbXNnc3RyICLtkZzspIAg7J6F66Cl7JeQ7IScIOyYpOu4jOygne2KuOulvCDsnb3sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDEKK21zZ2lkICJzdG9yZSBmaWxlIGFzIGlzIHdpdGhvdXQgZmlsdGVycyIKK21zZ3N0ciAi7YyM7J287J2EIO2VhO2EsCDsl4bsnbQg6re464yA66GcIOyggOyepe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMgorbXNnaWQgIiIKKyJqdXN0IGhhc2ggYW55IHJhbmRvbSBnYXJiYWdlIHRvIGNyZWF0ZSBjb3JydXB0IG9iamVjdHMgZm9yIGRlYnVnZ2luZyBHaXQiCittc2dzdHIgIuyehOydmOydmCDsk7DroIjquLAg642w7J207YSw66W8IO2VtOyLnO2VtCDshpDsg4HrkJwg7Jik67iM7KCd7Yq466W8IOunjOuTreuLiOuLpCAo65SU67KE6rmF7JqpKSIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMworbXNnaWQgInByb2Nlc3MgZmlsZSBhcyBpdCB3ZXJlIGZyb20gdGhpcyBwYXRoIgorbXNnc3RyICLtjIzsnbzsnbQg7J20IOqyveuhnOyXkOyEnCDsmKgg6rKD7LKY65+8IOyymOumrO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDUKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICLsgqzsmqkg6rCA64ql7ZWcIOuqqOuToCDrqoXroLnsnZgg66qp66Gd7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDYKK21zZ2lkICJleGNsdWRlIGd1aWRlcyIKK21zZ3N0ciAi7ISk66qF7IScIOygnOyZuCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDcKK21zZ2lkICJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiCittc2dzdHIgIuycoOyaqe2VnCDslYjrgrTshJwg66qp66Gd7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDgKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICLrp6gg7Y6Y7J207KeA66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAi7Ju5IOu4jOudvOyasOyggOyXkOyEnCDshKTrqoXshJzrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2hlbHAuYzo1MQorbXNnaWQgInNob3cgaW5mbyBwYWdlIgorbXNnc3RyICLsnbjtj6wg7Y6Y7J207KeA66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9oZWxwLmM6NTMKK21zZ2lkICJwcmludCBjb21tYW5kIGRlc2NyaXB0aW9uIgorbXNnc3RyICLrqoXroLnslrQg7ISk66qF7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9oZWxwLmM6NTgKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs866qF66C5Pl0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICInJXMnIOuPhOybgOunkCDtj6zrp7fsnYQg7J247Iud7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjk3Cittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAiZW1hY3NjbGllbnQg7Iuc7J6R7JeQIOyLpO2MqO2WiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExMAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAiZW1hY3NjbGllbnQg67KE7KCEIO2MjOyLseyXkCDsi6TtjKjtlojsirXri4jri6QuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAiZW1hY3NjbGllbnQgJyVkJyDrsoTsoITsnYAg64SI66y0IOqzvOqxsCAoPCAyMikg67KE7KCE7J6F64uI64ukLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTM2IGJ1aWx0aW4vaGVscC5jOjE1OCBidWlsdGluL2hlbHAuYzoxNjggYnVpbHRpbi9oZWxwLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyciCittc2dzdHIgIuyLpO2WiSDsi6TtjKg6ICclcyciCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyc6IOyngOybkO2VmOyngCDslYrripQg66eoIO2OmOydtOyngCDrs7TquLAg7ZSE66Gc6re4656oIOqyveuhnC5cbiIKKyLrjIDsi6Dsl5AgJ21hbi4864+E6rWsPi5jbWQnIOyYteyFmOydhCDsgqzsmqntlbQg67O07Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyc6IOyngOybkO2VmOyngCDslYrripQg66eoIO2OmOydtOyngCDrs7TquLAg7ZSE66Gc6re4656oIOuqheuguS5cbiIKKyLrjIDsi6Dsl5AgJ21hbi4864+E6rWsPi5wYXRoJyDsmLXshZjsnYQg7IKs7Jqp7ZW0IOuztOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICInJXMnOiDslYwg7IiYIOyXhuuKlCDrp6gg7Y6Y7J207KeAIOuztOq4sCDtlITroZzqt7jrnqguIgorCisjOiBidWlsdGluL2hlbHAuYzozNjAKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgIuyalOyyreydhCDsspjrpqztlZwg66eoIO2OmOydtOyngCDrs7TquLAg7ZSE66Gc6re4656o7J20IOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9oZWxwLmM6MzY4Cittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAi7JqU7LKt7J2EIOyymOumrO2VnCDsnbjtj6wg7Y6Y7J207KeAIOuztOq4sCDtlITroZzqt7jrnqjsnbQg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2hlbHAuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbGlhc2VkIHRvICclcyciCittc2dzdHIgIiclcycg66qF66C57J2AICclcycg66qF66C57J2YIOuLqOy2leyeheuLiOuLpCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQyIGJ1aWx0aW4vaGVscC5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMlcyIKK21zZ3N0ciAi7IKs7Jqp67KVOiAlcyVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgIiVz7J2EKOulvCkg7Je0IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IOyiheulmOqwgCDrp57sp4Ag7JWK7Iq164uI64ukICglcykiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHJlY2VpdmUgZXhwZWN0ZWQgb2JqZWN0ICVzIgorbXNnc3RyICLsmIjsg4HtlZwgJXMg7Jik67iM7KCd7Yq466W8IOuwm+yngCDslYrslZjsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXM6IGV4cGVjdGVkIHR5cGUgJXMsIGZvdW5kICVzIgorbXNnc3RyICIlcyDsmKTruIzsoJ3tirg6IOyYiOyDge2VnCDsooXrpZggJXMsIOyLpOygnCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICIlZCDrsJTsnbTtirjrpbwg7LGE7Jq4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4MworbXNnaWQgImVhcmx5IEVPRiIKK21zZ3N0ciAi64SI66y0IOu5qOumrCDtjIzsnbzsnbQg64Gd64KoIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODQKK21zZ2lkICJyZWFkIGVycm9yIG9uIGlucHV0IgorbXNnc3RyICLsnoXroKXsl5Ag7J296riwIOyYpOulmCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjk2Cittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgIuyeiOuKlCDrsJTsnbTtirjrs7Tri6Qg642UIOunjuydtCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMwMworbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgIu2YhOyerCDsoJXsnZjrkJwgb2ZmX3Tsl5Ag67mE7ZW0IOustuydjOydtCDrhIjrrLQg7YG964uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMDYgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjkzCittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICLrrLbsnYwg7YGs6riw6rCAIOy1nOuMgCDtl4jsmqkg7YGs6riw66W8IOuEmOyXiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAiJyVzJyDrrLbsnYwg7YyM7J287J2EIOyXtCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNDEKK21zZ2lkICJwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCIKK21zZ3N0ciAi66y27J2MIOyEnOuqheydtCDrp57sp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayB2ZXJzaW9uICU8UFJJdTMyPiB1bnN1cHBvcnRlZCIKK21zZ3N0ciAi66y27J2M7J2YICU8UFJJdTMyPiDrsoTsoITsnYQg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICU8UFJJdU1BWD46ICVzIgorbXNnc3RyICLrrLbsnYzsnZggJTxQUkl1TUFYPiDsmKTtlITshYvsl5Ag7J6Y66q765CcIOyYpOu4jOygne2KuOqwgCDsnojsirXri4jri6Q6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAiaW5mbGF0ZeqwgCAlZOuyiOydhCDrpqzthLTtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMQorbXNnaWQgIm9mZnNldCB2YWx1ZSBvdmVyZmxvdyBmb3IgZGVsdGEgYmFzZSBvYmplY3QiCittc2dzdHIgIuuNuO2DgCDrsqDsnbTsiqQg7Jik67iM7KCd7Yq47JeQIOuMgO2VtCDsmKTtlITshYsg6rCS7J20IOyYpOuyhO2UjOuhnOyasCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTM5Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICLrjbjtg4Ag67Kg7J207IqkIOyYpO2UhOyFi+ydtCDrspTsnITrpbwg67KX7Ja064Ks7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg7Jik67iM7KCd7Yq4IOyiheulmCAlZOuyiCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTc4Cittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAi66y27J2MIO2MjOydvOyXkCDrjIDtlbQgcHJlYWTrpbwg7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlIG1pc3NpbmciCittc2dpZF9wbHVyYWwgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGVzIG1pc3NpbmciCittc2dzdHJbMF0gIuustuydjCDtjIzsnbzsnbQg64SI66y0IOydvOywjSDrgZ3rgqguICU8UFJJdU1BWD4g67CU7J207Yq4IOu2gOyhsSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NjA2Cittc2dpZCAic2VyaW91cyBpbmZsYXRlIGluY29uc2lzdGVuY3kiCittc2dzdHIgIuyLrOqwge2VnCBpbmZsYXRlIOu2gOyhsO2ZlCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzUxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc1NyBidWlsdGluL2luZGV4LXBhY2suYzo3ODAKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxOSBidWlsdGluL2luZGV4LXBhY2suYzo4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICJTSEExIOy2qeuPjOydtCAlc+yXkOyEnCDrsJzqsqzrkJjsl4jsirXri4jri6QhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3NTQgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxOTgKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICIlc+ydhCjrpbwpIOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0IGluZm8gJXMiCittc2dzdHIgIuq4sOyhtCAlcyDsmKTruIzsoJ3tirgg7KCV67O066W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0ICVzIgorbXNnc3RyICLquLDsobQgJXMg7Jik67iM7KCd7Yq466W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAi7J6Y66q765CcIOu4lOuhrSDsmKTruIzsoJ3tirggJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MiBidWlsdGluL2luZGV4LXBhY2suYzo4NjAKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2tlZCBvYmplY3QiCittc2dzdHIgIuustuydjCDsmKTruIzsoJ3tirjsl5DshJwgZnNjayDsmKTrpZgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICLsnpjrqrvrkJwgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiJXPsnZgg66qo65OgIO2VmOychCDsmKTruIzsoJ3tirjsl5Ag7KCR6re87ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjkzNCBidWlsdGluL2luZGV4LXBhY2suYzo5NjUKK21zZ2lkICJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiCittc2dzdHIgIuuNuO2DgOulvCDsoIHsmqntlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTM1Cittc2dpZCAiUmVjZWl2aW5nIG9iamVjdHMiCittc2dzdHIgIuyYpOu4jOygne2KuOulvCDrsJvripQg7KSRIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTM1Cittc2dpZCAiSW5kZXhpbmcgb2JqZWN0cyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IOyduOuNseyKpOulvCDrp4zrk5zripQg7KSRIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTY5Cittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICLrrLbsnYzsnbQg7IaQ7IOB65CY7JeI7Iq164uI64ukIChTSEExIOydvOy5mO2VmOyngCDslYrsnYwpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTc0Cittc2dpZCAiY2Fubm90IGZzdGF0IHBhY2tmaWxlIgorbXNnc3RyICLrrLbsnYwg7YyM7J287JeQIOuMgO2VtCBmc3RhdCgp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNzcKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgIuustuydjOydmCDrgZ3sl5Ag7JOw66CI6riwIOuNsOydtO2EsOqwgCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExODkKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICJwYXJzZV9wYWNrX29iamVjdHMoKeyXkOyEnCDqt7nsi6ztlZwg7Zi8656AIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjEyCittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAi64247YOA66W8IOyVjOyVhOuCtOuKlCDspJEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICLsiqTroIjrk5zrpbwg66eM65OkIOyImCDsl4bsirXri4jri6Q6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY1Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAi6re57Ius7ZWcIO2YvOuegCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3QiCittc2dpZF9wbHVyYWwgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdHMiCittc2dzdHJbMF0gIuuhnOy7rCDsmKTruIzsoJ3tirggJWTqsJwg66eI7LmoIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICIlc+yXkCDrjIDtlbQg7JiI7IOB7LmYIOuqu+2VnCDthYzsnbwg7LK07YGs7ISsICjrlJTsiqTtgawg7IaQ7IOBPykiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gIuustuydjOyXkCDslYzslYTrgrTsp4Ag66q77ZWcIOuNuO2DgCAlZOqwnOqwgCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgIuy2lOqwgO2VnCDsmKTruIzsoJ3tirjrpbwgZGVmbGF0Ze2VoCDsiJgg7JeG7Iq164uI64ukICglZCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgIiVzIOuhnOy7rCDsmKTruIzsoJ3tirjqsIAg7IaQ7IOB65CY7JeI7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIgorbXNnc3RyICInJXMnIOustuydjO2MjOydvCDsnbTrpoTsnbQgJy5wYWNrJ+ycvOuhnCDrgZ3rgpjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAlcyBmaWxlICclcyciCittc2dzdHIgIiVzIO2MjOydvOydhCDsk7gg7IiYIOyXhuyKteuLiOuLpCAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSB3cml0dGVuICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAi7JO0ICVz7YyM7J287J2EIOuLq+ydhCDsiJgg7JeG7Iq164uI64ukICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NTkKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAi66y27J2MIO2MjOydvOydhCDri6vripTrjbAg7Jik66WYIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDczCittc2dpZCAiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIKK21zZ3N0ciAi66y27J2MIO2MjOydvOydhCDsoIDsnqXtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ4MQorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICLsnbjrjbHsiqQg7YyM7J287J2EIOyggOyepe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCittc2dzdHIgIuyemOuqu+uQnCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIuq4sOyhtCAnJXMnIOustuydjCDtjIzsnbzsnYQg7Je0IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkCDrjIDtlZwg6riw7KG0IOustuydjCBpZHgg7YyM7J287J2EIOyXtCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gIuuNuO2DgCDslYTri5g6IOyYpOu4jOygne2KuCAlZOqwnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICLssrTsnbgg6ri47J20ID0gJWQ6IOyYpOu4jOygne2KuCAlbHXqsJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2ODgKK21zZ2lkICJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAi7ZiE7J6sIOuUlOugie2EsOumrOuhnCDrj4zslYTsmKwg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTczOSBidWlsdGluL2luZGV4LXBhY2suYzoxNzQyCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzU4IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICLsnpjrqrvrkJwgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NzgKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAiLS1maXgtdGhpbiDsmLXshZjsnYAgLS1zdGRpbiDsmLXshZjqs7wg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzgwCittc2dpZCAiLS1zdGRpbiByZXF1aXJlcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLXN0ZGluIOyYteyFmOydgCDquYMg7KCA7J6l7IaM6rCAIO2VhOyalO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4NgorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiLS12ZXJpZnkg7Ji17IWY7JeQIOustuydjO2MjOydvCDsnbTrpoTsnYQg7KeA7KCV7ZWY7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTgzNiBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTc4Cittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrIG9iamVjdHMiCittc2dzdHIgIuustuydjCDsmKTruIzsoJ3tirjsl5DshJwgZnNjayDsmKTrpZgiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgIiclcyfsnYQo66W8KSBzdGF0KCntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgdGVtcGxhdGUgJyVzJyIKK21zZ3N0ciAiJyVzJyDshJzsi53snYQgc3RhdCgp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgIiclcyfsnYQo66W8KSBvcGVuZGlyKCntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgIiclcyfsnYQo66W8KSByZWFkbGluaygp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpICclcyfsl5Agc3ltbGluaygp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpICclcyfsl5Ag67O17IKs7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICIlcyDshJzsi53snYQg66y07Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCBpbiAlcyIKK21zZ3N0ciAiJXPsl5Ag7ISc7Iud7J20IOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBmcm9tICclcyc6ICVzIgorbXNnc3RyICInJXMn7JeQ7IScIOyEnOyLneydhCDrs7XsgqztlZjsp4Ag7JWK7Iq164uI64ukOiAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICLtjIzsnbwg7KKF66WYICVk67KI7J2EIOyymOumrO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgIiVz7J2EKOulvCkgJXMo7Jy8KeuhnCDsmK7quLgg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzQ4IGJ1aWx0aW4vaW5pdC1kYi5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMg7YyM7J287J20IOydtOuvuCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQwNAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIiVzJXMg7JWI7J2YIOq4sOyhtCDqs7XsnKAg6rmDIOyggOyepeyGjOulvCDri6Tsi5wg7LSI6riw7ZmU7ZaI7Iq164uI64ukXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiJXMlcyDslYjsnZgg6riw7KG0IOq5gyDsoIDsnqXshozrpbwg64uk7IucIOy0iOq4sO2ZlO2WiOyKteuLiOuLpFxuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiJXMlcyDslYjsnZgg67mIIOqzteycoCDquYMg7KCA7J6l7IaM66W8IOuLpOyLnCDstIjquLDtmZTtlojsirXri4jri6RcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiJXMlcyDslYjsnZgg67mIIOq5gyDsoIDsnqXshozrpbwg64uk7IucIOy0iOq4sO2ZlO2WiOyKteuLiOuLpFxuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0NTgKK21zZ2lkICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPGRpcmVjdG9yeT5dIgorbXNnc3RyICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9POyEnOyLnS3rlJTroInthLDrpqw+XSBbLS1zaGFyZWRbPTzqtowiCisi7ZWcPl1dIFs865SU66CJ7YSw66asPl0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4MQorbXNnaWQgInBlcm1pc3Npb25zIgorbXNnc3RyICLqtoztlZwiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4MgorbXNnaWQgInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIKK21zZ3N0ciAi6rmDIOyggOyepeyGjOulvCDri6Trpbgg7IKs7Jqp7J6Q6rCAIOqzteycoO2VoCDsiJgg7J6I6rKMIOyngOyglSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAiJXPsl5Ag64yA7ZW0IGNoZGly66W8IO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAiIgorIiVzICjrmJDripQgLS13b3JrLXRyZWU9POuUlOugie2EsOumrD4pIO2XiOyaqeuQmOyngCDslYrsnYwuICVzICjrmJDripQgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5Pikg7KeA7KCV7J20IOyXhuycvOuptCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgIuyekeyXhSDtj7TrjZQgJyVzJ+yXkCDsoJHqt7ztlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNQorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHRva2VuPlsoPXw6KTx2YWx1ZT5dKS4uLl0gWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciA87Yag7YGwPlsoPXw6KTwiCisi6rCSPl0pLi4uXSBbPO2MjOydvD4uLi5dIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjkyCittc2dpZCAiZWRpdCBmaWxlcyBpbiBwbGFjZSIKK21zZ3N0ciAi7YyM7J287J2EIOyngeygkSDtjrjsp5Htlanri4jri6QiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTMKK21zZ2lkICJ0cmltIGVtcHR5IHRyYWlsZXJzIgorbXNnc3RyICLruYgg7Yq466CI7J2865+s66W8IOyemOudvOuDheuLiOuLpCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NgorbXNnaWQgIndoZXJlIHRvIHBsYWNlIHRoZSBuZXcgdHJhaWxlciIKK21zZ3N0ciAi7IOIIO2KuOugiOydvOufrOulvCDrhpPsnYQg7JyE7LmYIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk4Cittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIu2KuOugiOydvOufrOqwgCDsnbTrr7gg7J6I7J2EIOuVjCDrj5nsnpEiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAwCittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgaXMgbWlzc2luZyIKK21zZ3N0ciAi7Yq466CI7J2865+s6rCAIOyXhuydhCDrlYwg64+Z7J6RIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMgorbXNnaWQgIm91dHB1dCBvbmx5IHRoZSB0cmFpbGVycyIKK21zZ3N0ciAi7Yq466CI7J2865+s66eMIOy2nOugpe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDMKK21zZ2lkICJkbyBub3QgYXBwbHkgY29uZmlnIHJ1bGVzIgorbXNnc3RyICLshKTsoJUg6rec7LmZ7J2EIOyggeyaqe2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA0Cittc2dpZCAiam9pbiB3aGl0ZXNwYWNlLWNvbnRpbnVlZCB2YWx1ZXMiCittc2dzdHIgIuqzteuwseycvOuhnCDqs4Tsho3rkJwg6rCS7J2EIOyXsOqysO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDUKK21zZ2lkICJzZXQgcGFyc2luZyBvcHRpb25zIgorbXNnc3RyICLtjIzsi7Eg7Ji17IWYIOyEpOyglSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDcKK21zZ2lkICJ0cmFpbGVyIgorbXNnc3RyICLtirjroIjsnbzrn6wiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA4Cittc2dpZCAidHJhaWxlcihzKSB0byBhZGQiCittc2dzdHIgIuy2lOqwgO2VoCDtirjroIjsnbzrn6wiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTE3Cittc2dpZCAiLS10cmFpbGVyIHdpdGggLS1vbmx5LWlucHV0IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tdHJhaWxlciDsmLXshZjqs7wgLS1vbmx5LWlucHV0IOyYteyFmOydgCDslZ7rkqTqsIAg66ee7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMjcKK21zZ2lkICJubyBpbnB1dCBmaWxlIGdpdmVuIGZvciBpbi1wbGFjZSBlZGl0aW5nIgorbXNnc3RyICLtjIzsnbwg7KeB7KCRIO2OuOynkeyXkCDsnoXroKUg7YyM7J287J2EIOyngOygle2VmOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDgKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbG9nIFs87Ji17IWYPl0gWzzrpqzruYTsoIQt67KU7JyEPl0gW1stLV0gPOqyveuhnD4uLi5dIgorCisjOiBidWlsdGluL2xvZy5jOjQ5Cittc2dpZCAiZ2l0IHNob3cgWzxvcHRpb25zPl0gPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCBzaG93IFs87Ji17IWYPl0gPOyYpOu4jOygne2KuD4uLi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLWRlY29yYXRlIG9wdGlvbjogJXMiCittc2dzdHIgIuyemOuqu+uQnCAtLWRlY29yYXRlIOyYteyFmDogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzCittc2dpZCAic3VwcHJlc3MgZGlmZiBvdXRwdXQiCittc2dzdHIgImRpZmbrpbwg7Lac66Cl7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTQKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAi7IaM7Iqk66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTUKK21zZ2lkICJVc2UgbWFpbCBtYXAgZmlsZSIKK21zZ3N0ciAi66mU7J28IOuntSDtjIzsnbzsnYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE1NworbXNnaWQgIm9ubHkgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiPO2MqO2EtD7qs7wg7J287LmY7ZWY64qUIOugiO2NvOufsOyKpOunjCDqvrjrsInri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU5Cittc2dpZCAiZG8gbm90IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgIjztjKjthLQ+6rO8IOydvOy5mO2VmOuKlCDroIjtjbzrn7DsiqTrpbwg6r6466+47KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjAKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICLqvrjrr7jquLAg7Ji17IWYIgorCisjOiBidWlsdGluL2xvZy5jOjE2MworbXNnaWQgIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICLtjIzsnbzsl5DshJwgbixtIOuylOychOydmCDspITsnYQg7LKY66as7ZWp64uI64ukICgx67aA7YSwIOyLnOyekSkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmFsIG91dHB1dDogJWQgJXNcbiIKK21zZ3N0ciAi7LWc7KKFIOy2nOugpTogJWQgJXNcbiIKKworIzogYnVpbHRpbi9sb2cuYzo1MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHNob3cgJXM6IGJhZCBmaWxlIgorbXNnc3RyICJnaXQgc2hvdyAlczog7J6Y66q765CcIO2MjOydvCIKKworIzogYnVpbHRpbi9sb2cuYzo1MjUgYnVpbHRpbi9sb2cuYzo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICIlcyDsmKTruIzsoJ3tirjrpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdHlwZTogJWQiCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIOyiheulmDogJWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NzY0Cittc2dpZCAiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIKK21zZ3N0ciAiZm9ybWF0LmhlYWRlcnMg7ISk7KCV7JeQIOqwkuydtCDsl4bsnYwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODY1Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICLstpzroKUg65SU66CJ7YSw66as7J2YIOydtOumhOydtCDrhIjrrLQg6rmB64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIgorbXNnc3RyICIlcyDtjKjsuZgg7YyM7J287J2EIOyXtCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjg5OAorbXNnaWQgIk5lZWQgZXhhY3RseSBvbmUgcmFuZ2UuIgorbXNnc3RyICLsoJXtmZXtnogg7ZWY64KY7J2YIOuylOychOqwgCDtlYTsmpTtlanri4jri6QuIgorCisjOiBidWlsdGluL2xvZy5jOjkwOAorbXNnaWQgIk5vdCBhIHJhbmdlLiIKK21zZ3N0ciAi67KU7JyE6rCAIOyVhOuLmeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTAxNAorbXNnaWQgIkNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgIuy7pOuyhOugiO2EsOuKlCDsoITsnpDrqZTsnbwg7ZiV7Iud7J207Ja07JW8IO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgIuygleyLoOuCmOqwhCBpbi1yZXBseS10byDtl6TrjZQ6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjExMjIKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggWzzsmLXshZg+XSBbPOyLnOyekeyLnOqwgT4gfCA866as67mE7KCELeuylOychD5dIgorCisjOiBidWlsdGluL2xvZy5jOjExNzIKK21zZ2lkICJUd28gb3V0cHV0IGRpcmVjdG9yaWVzPyIKK21zZ3N0ciAi7Lac66ClIOuUlOugie2EsOumrOqwgCDrkZDqsJw/IgorCisjOiBidWlsdGluL2xvZy5jOjEyNzkgYnVpbHRpbi9sb2cuYzoxOTMyIGJ1aWx0aW4vbG9nLmM6MTkzNCBidWlsdGluL2xvZy5jOjE5NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21taXQgJXMiCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIOy7pOuwiyAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjg5IGJ1aWx0aW4vbm90ZXMuYzo4ODcgYnVpbHRpbi90YWcuYzo1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiclcyfsnYQo66W8KSDsmKzrsJTrpbgg66CI7Y2865+w7Iqk66GcIOyVjOyVhOuCtOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QuIgorCisjOiBidWlsdGluL2xvZy5jOjEyOTQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBleGFjdCBtZXJnZSBiYXNlLiIKK21zZ3N0ciAi7KCV7ZmV7ZWcIOuzke2VqSDquLDspIDsoJDsnYQg7LC+7J2EIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL2xvZy5jOjEyOTgKK21zZ2lkICIiCisiRmFpbGVkIHRvIGdldCB1cHN0cmVhbSwgaWYgeW91IHdhbnQgdG8gcmVjb3JkIGJhc2UgY29tbWl0IGF1dG9tYXRpY2FsbHksXG4iCisicGxlYXNlIHVzZSBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIHRvIHRyYWNrIGEgcmVtb3RlIGJyYW5jaC5cbiIKKyJPciB5b3UgY291bGQgc3BlY2lmeSBiYXNlIGNvbW1pdCBieSAtLWJhc2U9PGJhc2UtY29tbWl0LWlkPiBtYW51YWxseS4iCittc2dzdHIgIiIKKyLsl4XsiqTtirjrprzsnYQg6rCA7KC47Jik64qU642wIOyLpO2MqO2WiOyKteuLiOuLpC4g67Kg7J207IqkIOy7pOuwi+ydhCDsnpDrj5nsnLzroZwg6riw66Gd7ZWY66Ck66m0LFxuIgorIidnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvJyDrqoXroLnsnLzroZwg7JuQ6rKpIOu4jOuenOy5mOulvCDstpTsoIHtlZjsi63si5zsmKQuXG4iCisi7JWE64uI66m0IOyngeygkSAnLS1iYXNlPTzquLDspIDsoJAt7Luk67CLLUlEPicg7Ji17IWY7Jy866GcIOq4sOykgOygkCDsu6TrsIvsnYQg7KeA7KCV7ZWgXG4iCisi7IiY64+EIOyeiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMxOAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgIuygle2Zle2VnCDrs5Htlakg6riw7KSA7KCQ7J2EIOywvuuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMyOQorbXNnaWQgImJhc2UgY29tbWl0IHNob3VsZCBiZSB0aGUgYW5jZXN0b3Igb2YgcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAi6riw7KSA7KCQIOy7pOuwi+ydgCDrpqzruYTsoIQg66qp66Gd7J2YIOyDgeychCDsu6TrsIvsnbTslrTslbwg7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjEzMzMKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGRuJ3QgYmUgaW4gcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAi6riw7KSA7KCQIOy7pOuwi+ydgCDrpqzruYTsoIQg66qp66Gd7JeQIOuTpOyWtCDsnojsnLzrqbQg7JWIIOuQqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxMzgyCittc2dpZCAiY2Fubm90IGdldCBwYXRjaCBpZCIKK21zZ3N0ciAi7Yyo7LmYIElE66W8IOyVjOyVhOuCvCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE0NDEKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICLtlZjrgpjsnZgg7Yyo7LmY7JeQIOuMgO2VtOyEnOuPhCBbUEFUQ2ggbi9tXeydhCDrtpnsnoXri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ0NAorbXNnaWQgInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIgorbXNnc3RyICLsl6zrn6wg6rCcIO2MqOy5mOyXkCDrjIDtlbTshJzrj4QgW1BBVENIXeulvCDrtpnsnoXri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ0OAorbXNnaWQgInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IgorbXNnc3RyICLtjKjsuZjrpbwg7ZGc7KSAIOy2nOugpeycvOuhnCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ1MAorbXNnaWQgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIgorbXNnc3RyICLsu6TrsoTroIjthLDrpbwg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE0NTIKK21zZ2lkICJ1c2Ugc2ltcGxlIG51bWJlciBzZXF1ZW5jZSBmb3Igb3V0cHV0IGZpbGUgbmFtZXMiCittc2dzdHIgIuy2nOugpSDtjIzsnbwg7J2066aE7JeQIOqwhOuLqO2VnCDsnbzroKgg67KI7Zi466W8IOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDUzCittc2dpZCAic2Z4IgorbXNnc3RyICLtmZXsnqXsnpAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ1NAorbXNnaWQgInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIgorbXNnc3RyICInLnBhdGNoJyDrjIDsi6AgPO2ZleyepeyekD7rpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE0NTYKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICLtjKjsuZgg67KI7Zi466W8IDEg64yA7IugIDxuPuyXkOyEnCDsi5zsnpHtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ1OAorbXNnaWQgIm1hcmsgdGhlIHNlcmllcyBhcyBOdGggcmUtcm9sbCIKK21zZ3N0ciAi7Iuc66as7KaI66W8IE7rsojsp7ggcmUtcm9sbOuhnCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2MAorbXNnaWQgIlVzZSBbUkZDIFBBVENIXSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIltQQVRDSF0g64yA7IugIFtSRkMgUEFUQ0hd66W8IOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDYzCittc2dpZCAiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICJbUEFUQ0hdIOuMgOyLoCBbPOygkeuRkOyWtD5d66W8IOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDY2Cittc2dpZCAic3RvcmUgcmVzdWx0aW5nIGZpbGVzIGluIDxkaXI+IgorbXNnc3RyICLqsrDqs7wg7YyM7J287J2EIDzrlJTroInthLDrpqw+7JeQIOyggOyepe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDY5Cittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgIltQQVRDSF3rpbwg7J6Q66W06rGw64KYIOy2lOqwgO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ3MgorbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgIuuwlOydtOuEiOumrCBkaWZm66W8IOunjOuTpOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ3NAorbXNnaWQgIm91dHB1dCBhbGwtemVybyBoYXNoIGluIEZyb20gaGVhZGVyIgorbXNnc3RyICJGcm9tIO2XpOuNlOyXkOyEnCDrqqjrkZAgMOyduCDtlbTsi5zrpbwg7Lac66Cl7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzYKK21zZ2lkICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iCittc2dzdHIgIuyXheyKpO2KuOumvOyXkCDsnojripQg7Yyo7LmY66W8IO2PrO2VqO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ3OAorbXNnaWQgInNob3cgcGF0Y2ggZm9ybWF0IGluc3RlYWQgb2YgZGVmYXVsdCAocGF0Y2ggKyBzdGF0KSIKK21zZ3N0ciAi6riw67O46rCSICjtjKjsuZggKyDthrXqs4QpIOuMgOyLoCDtjKjsuZgg7ZiV7Iud7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDgwCittc2dpZCAiTWVzc2FnaW5nIgorbXNnc3RyICLrqZTsi5zsp5UiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ4MQorbXNnaWQgImhlYWRlciIKK21zZ3N0ciAi7Zek642UIgorCisjOiBidWlsdGluL2xvZy5jOjE0ODIKK21zZ2lkICJhZGQgZW1haWwgaGVhZGVyIgorbXNnc3RyICLsoITsnpDrqZTsnbwg7Zek642UIgorCisjOiBidWlsdGluL2xvZy5jOjE0ODMgYnVpbHRpbi9sb2cuYzoxNDg1Cittc2dpZCAiZW1haWwiCittc2dzdHIgIuyghOyekOuplOydvCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDgzCittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgIlRvOiDtl6TrjZTrpbwg7LaU6rCA7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE0ODUKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAiQ2M6IO2XpOuNlOulvCDstpTqsIDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ4NworbXNnaWQgImlkZW50IgorbXNnc3RyICLsi6Dsm5AiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ4OAorbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgIjzsi6Dsm5A+7JeQ7IScIEZyb20g7KO87IaM66W8IOyEpOygle2VqeuLiOuLpCAo7JeG7Jy866m0IOy7pOuvuO2EsCDso7zshowg7Iug7JuQIOyCrOyaqSkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ5MAorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgIuuplOyLnOyngC1JRCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDkxCittc2dpZCAibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IgorbXNnc3RyICLssqsg66mU7J287J2EIDzrqZTsi5zsp4AtSUQ+7JeQIOuMgO2VnCDri7XsnqUg66mU7J2866GcIOunjOuTreuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDkyIGJ1aWx0aW4vbG9nLmM6MTQ5NQorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICLqsr3qs4QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ5MworbXNnaWQgImF0dGFjaCB0aGUgcGF0Y2giCittc2dzdHIgIu2MqOy5mOulvCDssqjrtoDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ5NgorbXNnaWQgImlubGluZSB0aGUgcGF0Y2giCittc2dzdHIgIu2MqOy5mOulvCDrs7jrrLjsl5Ag7Y+s7ZWo7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE1MDAKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAi66mU7Iuc7KeA7JeQIOyKpOugiOuTnOulvCDsgqzsmqksIOyKpO2DgOydvDogc2hhbGxvdywgZGVlcCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTAyCittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICLshJzrqoUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUwMworbXNnaWQgImFkZCBhIHNpZ25hdHVyZSIKK21zZ3N0ciAi7ISc66qF7J2EIOy2lOqwgO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTA0Cittc2dpZCAiYmFzZS1jb21taXQiCittc2dzdHIgIuuyoOydtOyKpC3su6TrsIsiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUwNQorbXNnaWQgImFkZCBwcmVyZXF1aXNpdGUgdHJlZSBpbmZvIHRvIHRoZSBwYXRjaCBzZXJpZXMiCittc2dzdHIgIuyghOygnOyhsOqxtCDtirjrpqwg7KCV67O066W8IO2MqOy5mCDsi5zrpqzspojsl5Ag7LaU6rCA7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE1MDcKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUgZnJvbSBhIGZpbGUiCittc2dzdHIgIu2MjOydvOyXkOyEnCDshJzrqoXsnYQg7LaU6rCA7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE1MDgKK21zZ2lkICJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIgorbXNnc3RyICLtjKjsuZgg7YyM7J28IOydtOumhOydhCDtkZzsi5ztlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE1MTAKK21zZ2lkICJzaG93IHByb2dyZXNzIHdoaWxlIGdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAi7Yyo7LmY66W8IOunjOuTnOuKlCDrj5nslYgg7KeE7ZaJ66Wg7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTg1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJXMiCittc2dzdHIgIuyemOuqu+uQnCDsi6Dsm5Ag7KSEOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjAwCittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICItbiDrsI8gLWsg7Ji17IWY7J2AIO2VmOuCmOunjCDsjajslbwg7ZWp64uI64ukLiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjAyCittc2dpZCAiLS1zdWJqZWN0LXByZWZpeC8tLXJmYyBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMg67CPIC1rIOyYteyFmOydgCDtlZjrgpjrp4wg7I2o7JW8IO2VqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYxMAorbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1vbmx5IOyYteyFmOydgCDslZ7rkqTqsIAg66ee7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjEyCittc2dpZCAiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtc3RhdHVzIOyYteyFmOydgCDslZ7rkqTqsIAg66ee7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjE0Cittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWNoZWNrIOyYteyFmOydgCDslZ7rkqTqsIAg66ee7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ2Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgIu2RnOykgCDstpzroKXsnbTrgpgg65SU66CJ7YSw66asIOykkeyXkCDtlZjrgpjrp4wg7KeA7KCV7ZW07JW8IO2VqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICInJXMnIOuUlOugie2EsOumrOulvCDrp4zrk6Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgIiclcycg7ISc66qFIO2MjOydvOydhCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzczCittc2dpZCAiR2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICLtjKjsuZgg7IOd7ISxIgorCisjOiBidWlsdGluL2xvZy5jOjE4MTcKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAi7Lac66ClIO2MjOydvOydhCDrp4zrk5zripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE4NjcKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs87JeF7Iqk7Yq466a8PiBbPO2XpOuTnD4gWzztlZzqs4TqsJI+XV1dIgorCisjOiBidWlsdGluL2xvZy5jOjE5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIgorbXNnc3RyICIiCisi7LaU7KCB65CY64qUIOumrOuqqO2KuCDruIzrnpzsuZjrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6QuIDzsl4XsiqTtirjrprw+7J2EIOyImOuPmeycvOuhnCDsp4DsoJXtlZjsi63si5wiCisi7JikLlxuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDY4Cittc2dpZCAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgbHMtZmlsZXMgWzzsmLXshZg+XSBbPO2MjOydvD4uLi5dIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTE3Cittc2dpZCAiaWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGFncyIKK21zZ3N0ciAi7YyM7J28IOyDge2DnOulvCDtg5zqt7jsmYAg6rCZ7J20IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUxOQorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIgorbXNnc3RyICIn67OA6rK965CY7KeAIOyViuyVmOuLpOqzoCDqsIDsoJUnIO2MjOydvOyXkCDshozrrLjsnpDrpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTIxCittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnZnNtb25pdG9yIGNsZWFuJyBmaWxlcyIKK21zZ3N0ciAiJ+2MjOydvCDsi5zsiqTthZwg66qo64uI7YSw7JeQIOuzgOqyveuQmOyngCDslYrsnYAnIO2MjOydvOyXkCDshozrrLjsnpDrpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTIzCittc2dpZCAic2hvdyBjYWNoZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZGVmYXVsdCkiCittc2dzdHIgIuy2nOugpeyXkCDsupDsi5zrkJwg7YyM7J287J2EIO2RnOyLnO2VqeuLiOuLpCAo6riw67O46rCSKSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyNQorbXNnaWQgInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLstpzroKXsl5Ag7IKt7KCc65CcIO2MjOydvOydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjcKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIuy2nOugpeyXkCDsiJjsoJXrkJwg7YyM7J287J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyOQorbXNnaWQgInNob3cgb3RoZXIgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi7Lac66Cl7JeQIOq4sO2DgCDtjIzsnbzsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMxCittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIuy2nOugpeyXkCDrrLTsi5zrkJwg7YyM7J287J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNAorbXNnaWQgInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLstpzroKXsl5Ag7Luk67CLIO2RnOyLnOuQnCDrgrTsmqnsnZgg7Jik67iM7KCd7Yq4IOydtOumhOydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzYKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICLtjIzsnbwg7Iuc7Iqk7YWc7JeQ7IScIOygnOqxsO2VtOyVvCDtlZjripQg7YyM7J287J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzOAorbXNnaWQgInNob3cgJ290aGVyJyBkaXJlY3RvcmllcycgbmFtZXMgb25seSIKK21zZ3N0ciAi6riw7YOAIOuUlOugie2EsOumrOydmCDsnbTrpoTrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQwCittc2dpZCAic2hvdyBsaW5lIGVuZGluZ3Mgb2YgZmlsZXMiCittc2dzdHIgIu2MjOydvOydmCDspIQg64Gd7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MgorbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgIuu5iCDrlJTroInthLDrpqwg7ZGc7Iuc7ZWY7KeAIOyViuq4sCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NQorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi7Lac66Cl7JeQIOuzke2Vqe2VmOyngCDslYrsnYAg7YyM7J287J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NworbXNnaWQgInNob3cgcmVzb2x2ZS11bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICJyZXNvbHZlLXVuZG8g7KCV67O066W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0OQorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAi7Yyo7YS07JeQIOydvOy5mO2VmOuKlCDtjIzsnbzsnYQg6rG064SI65yB64uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTUyCittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAi7KCc7Jm47ZWgIO2MqO2EtOydhCA87YyM7J28PuyXkOyEnCDsnb3sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTUKK21zZ2lkICJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIKK21zZ3N0ciAiPO2MjOydvD7sl5DshJwg7LaU6rCA7KCB7J24IOuUlOugie2EsOumrOuzhCDsoJzsmbgg7Yyo7YS07J2EIOydveyKteuLiOuLpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NworbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgIu2RnOykgCDquYMg7KCc7Jm4IO2MqO2EtOydhCDstpTqsIDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjAKK21zZ2lkICJtYWtlIHRoZSBvdXRwdXQgcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAi7LWc7IOB7JyEIOuUlOugie2EsOumrCDsg4HrjIAg6rK966Gc66GcIOy2nOugpe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2MworbXNnaWQgInJlY3Vyc2UgdGhyb3VnaCBzdWJtb2R1bGVzIgorbXNnc3RyICLtlZjsnIQg66qo65OI7JeQIOyerOq3gOyggeycvOuhnCDsoIHsmqkiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjUKK21zZ2lkICJpZiBhbnkgPGZpbGU+IGlzIG5vdCBpbiB0aGUgaW5kZXgsIHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IiCittc2dzdHIgIjztjIzsnbw+7J20IOyduOuNseyKpCDslYjsl5Ag7JeG7Jy866m0IOyYpOulmOuhnCDst6jquIntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjYKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAi7Yq466asLeuUsOychCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NworbXNnaWQgInByZXRlbmQgdGhhdCBwYXRocyByZW1vdmVkIHNpbmNlIDx0cmVlLWlzaD4gYXJlIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIjztirjrpqwt65Sw7JyEPiDrkqTroZwg7KCc6rGw7ZWcIOqyveuhnOqwgCDsnojri6Tqs6Ag6rCA7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY5Cittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAi65SU67KE6rmFIOuNsOydtO2EsOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6OQorbXNnaWQgIiIKKyJnaXQgbHMtcmVtb3RlIFstLWhlYWRzXSBbLS10YWdzXSBbLS1yZWZzXSBbLS11cGxvYWQtcGFjaz08ZXhlYz5dXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy1xIHwgLS1xdWlldF0gWy0tZXhpdC1jb2RlXSBbLS1nZXQtdXJsXVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstLXN5bXJlZl0gWzxyZXBvc2l0b3J5PiBbPHJlZnM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgbHMtcmVtb3RlIFstLWhlYWRzXSBbLS10YWdzXSBbLS1yZWZzXSBbLS11cGxvYWQtcGFjaz087Iuk7ZaJPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPOyggOyepeyGjD4gWzzroIjtjbzrn7DsiqQ+Li4uXV0iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAi7JuQ6rKpIFVSTOydhCDtkZzsi5ztlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjIKK21zZ2lkICJleGVjIgorbXNnc3RyICLsi6TtlokiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjEgYnVpbHRpbi9scy1yZW1vdGUuYzo2MworbXNnaWQgInBhdGggb2YgZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUgaG9zdCIKK21zZ3N0ciAi7JuQ6rKpIO2YuOyKpO2KuOydmCBnaXQtdXBsb2FkLXBhY2sg6rK966GcIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY1Cittc2dpZCAibGltaXQgdG8gdGFncyIKK21zZ3N0ciAi7YOc6re47JeQIO2VnOyglSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NgorbXNnaWQgImxpbWl0IHRvIGhlYWRzIgorbXNnc3RyICLtl6Trk5zsl5Ag7ZWc7KCVIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY3Cittc2dpZCAiZG8gbm90IHNob3cgcGVlbGVkIHRhZ3MiCittc2dzdHIgIuuyl+qyqOynhCDtg5zqt7jrpbwg7ZGc7Iuc7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2OQorbXNnaWQgInRha2UgdXJsLjxiYXNlPi5pbnN0ZWFkT2YgaW50byBhY2NvdW50IgorbXNnc3RyICJ1cmwuPOuyoOydtOyKpD4uaW5zdGVhZE9mIOyEpOygleydhCDqs6DroKTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzMKK21zZ2lkICJleGl0IHdpdGggZXhpdCBjb2RlIDIgaWYgbm8gbWF0Y2hpbmcgcmVmcyBhcmUgZm91bmQiCittc2dzdHIgIu2VtOuLue2VmOuKlCDroIjtjbzrn7DsiqTqsIAg7JeG7Jy866m0IOy9lOuTnCAy67KI7Jy866GcIOuBneuDheuLiOuLpCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorbXNnaWQgInNob3cgdW5kZXJseWluZyByZWYgaW4gYWRkaXRpb24gdG8gdGhlIG9iamVjdCBwb2ludGVkIGJ5IGl0IgorbXNnc3RyICLroIjtjbzrn7DsiqTsmYAg66CI7Y2865+w7Iqk6rCAIOqwgOumrO2CpOuKlCDsmKTruIzsoJ3tirjrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoyOQorbXNnaWQgImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBscy10cmVlIFs87Ji17IWYPl0gPO2KuOumrC3rlLDsnIQ+IFs86rK966GcPi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyNworbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAi7Yq466as66eMIO2RnOyLnCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI5Cittc2dpZCAicmVjdXJzZSBpbnRvIHN1YnRyZWVzIgorbXNnc3RyICLtlZjsnIQg7Yq466as66GcIOyerOq3gOyggeycvOuhnCDsoIHsmqkiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMQorbXNnaWQgInNob3cgdHJlZXMgd2hlbiByZWN1cnNpbmciCittc2dzdHIgIuyerOq3gOyggeycvOuhnCDsoIHsmqntlaAg65WMIO2KuOumrCDtkZzsi5wiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNAorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgIu2VreuqqeydhCBOVUwg67CU7J207Yq466GcIOuBneuDheuLiOuLpCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IO2BrOq4sCDtj6ztlagiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNyBidWlsdGluL2xzLXRyZWUuYzoxMzkKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICLtjIzsnbwg7J2066aE66eMIOuqqeuhnSDtkZzsi5wiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MgorbXNnaWQgInVzZSBmdWxsIHBhdGggbmFtZXMiCittc2dzdHIgIuyghOyytCDqsr3roZwg7J2066aEIOyCrOyaqSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQ0Cittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICLsoITssrQg7Yq466asIOuqqeuhnSDtkZzsi5wsIO2YhOyerCDrlJTroInthLDrpqzrp4wg7JWE64uI6528ICgtLWZ1bGwtbmFtZSDsmLXshZgg7Y+s7ZWoKSIKKworIzogYnVpbHRpbi9tYWlsc3BsaXQuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgbWJveDogJyVzJyIKK21zZ3N0ciAi67mIIG1ib3g6ICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MQorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICJnaXQgbWVyZ2UgWzzsmLXshZg+XSBbPOy7pOuwiz4uLi5dIgorCisjOiBidWlsdGluL21lcmdlLmM6NTIKK21zZ2lkICJnaXQgbWVyZ2UgLS1hYm9ydCIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tYWJvcnQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MworbXNnaWQgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorbXNnc3RyICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExMAorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiYG0nIOyYteyFmOyXkOuKlCDqsJLsnbQg7ZWE7JqU7ZWp64uI64ukIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIiclcycg67OR7ZWpIOyghOueteydhCDssL7snYQg7IiYIOyXhuyKteuLiOuLpC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICLsgqzsmqkg6rCA64ql7ZWcIOyghOueteydgDoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIuyCrOyaqSDqsIDriqXtlZwg7IKs7Jqp7J6QIOyEpOyglSDsoITrnrXsnYA6IgorCisjOiBidWlsdGluL21lcmdlLmM6MjAzIGJ1aWx0aW4vcHVsbC5jOjE0MgorbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIuuzke2VqeydtCDrgZ3rgqAg65WMIGRpZmZzdGF07J2EIO2RnOyLnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDYgYnVpbHRpbi9wdWxsLmM6MTQ1Cittc2dpZCAic2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICLrs5HtlansnbQg64Gd64KgIOuVjCBkaWZmc3RhdOydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDcgYnVpbHRpbi9wdWxsLmM6MTQ4Cittc2dpZCAiKHN5bm9ueW0gdG8gLS1zdGF0KSIKK21zZ3N0ciAiKC0tc3RhdCDsmLXshZjqs7wg64+Z7J28KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwOSBidWlsdGluL3B1bGwuYzoxNTEKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIuuzke2VqSDsu6TrsIvsnZgg66mU7Iuc7KeA7JeQIHNob3J0bG9nIO2VreuqqeydhCAo7LWc64yAIDxuPuqwnCkg7LaU6rCA7ZWp64uI64ukIgorCisjOiBidWlsdGluL21lcmdlLmM6MjEyIGJ1aWx0aW4vcHVsbC5jOjE1NworbXNnaWQgImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIgorbXNnc3RyICLrs5HtlantlZjripQg64yA7IugIO2VmOuCmOydmCDsu6TrsIvsnYQg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE0IGJ1aWx0aW4vcHVsbC5jOjE2MAorbXNnaWQgInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIKK21zZ3N0ciAi67OR7ZWp7J20IOyEseqzte2VmOuptCDsu6TrsIvsnYQg7ZWp64uI64ukICjquLDrs7jqsJIpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE2IGJ1aWx0aW4vcHVsbC5jOjE2MworbXNnaWQgImVkaXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyIKK21zZ3N0ciAi7Luk67CLIOyghOyXkCDrqZTsi5zsp4Drpbwg7Y647KeR7ZWp64uI64ukIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE3Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KSIKK21zZ3N0ciAi7KCV67Cp7ZalIOynhO2WieydhCDtl4jsmqntlanri4jri6QgKOq4sOuzuOqwkikiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTkgYnVpbHRpbi9wdWxsLmM6MTY5Cittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAi7KCV67Cp7ZalIOynhO2WieydtCDrtojqsIDriqXtlZjrqbQg7KSR7KeA7ZWp64uI64ukIgorCisjOiBidWlsdGluL21lcmdlLmM6MjIzIGJ1aWx0aW4vcHVsbC5jOjE3MgorbXNnaWQgInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAi7KeA7KCV7ZWcIOy7pOuwi+yXkCDsmKzrsJTrpbggR1BHIOyEnOuqheydtCDsnojripTsp4Ag6rKA7Kad7ZWp64uI64ukIgorCisjOiBidWlsdGluL21lcmdlLmM6MjI0IGJ1aWx0aW4vbm90ZXMuYzo3NzcgYnVpbHRpbi9wdWxsLmM6MTc2CisjOiBidWlsdGluL3JldmVydC5jOjEwOQorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICLsoITrnrUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMjUgYnVpbHRpbi9wdWxsLmM6MTc3Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIgorbXNnc3RyICLsgqzsmqntlaAg67OR7ZWpIOyghOuetSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIyNiBidWlsdGluL3B1bGwuYzoxODAKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgIuyYteyFmD3qsJIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMjcgYnVpbHRpbi9wdWxsLmM6MTgxCittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi7ISg7YOd7ZWcIOuzke2VqSDsoITrnrXsl5Ag64yA7ZWcIOyYteyFmCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIyOQorbXNnaWQgIm1lcmdlIGNvbW1pdCBtZXNzYWdlIChmb3IgYSBub24tZmFzdC1mb3J3YXJkIG1lcmdlKSIKK21zZ3N0ciAi67OR7ZWpIOy7pOuwiyDrqZTsi5zsp4AgKOygleuwqe2WpeydtCDslYTri4wg67OR7ZWp7JeQIOuMgO2VtCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMzMKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAi7ZiE7J6sIOynhO2WiSDspJHsnbgg67OR7ZWp7J2EIOykkeyngO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIzNQorbXNnaWQgImNvbnRpbnVlIHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICLtmITsnqwg7KeE7ZaJIOykkeyduCDrs5HtlansnYQg6rOE7IaN7ZWp64uI64ukIgorCisjOiBidWlsdGluL21lcmdlLmM6MjM3IGJ1aWx0aW4vcHVsbC5jOjE4OAorbXNnaWQgImFsbG93IG1lcmdpbmcgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAi6rSA6rOEIOyXhuuKlCDsu6TrsIsg64K07Jet7J2YIOuzke2VqeydhCDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDMKK21zZ2lkICJ2ZXJpZnkgY29tbWl0LW1zZyBob29rIgorbXNnc3RyICLsu6TrsIsg66mU7Iuc7KeAIO2bhO2BrOulvCDqsoDspp3tlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjgKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAic3Rhc2jrpbwg7Iuk7ZaJ7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjczCittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICLsiqTtg5zsi5wg7Iuk7YyoIgorCisjOiBidWlsdGluL21lcmdlLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgIuyYrOuwlOuluCDsmKTruIzsoJ3tirjqsIAg7JWE64uZ64uI64ukOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMwMCBidWlsdGluL21lcmdlLmM6MzE3Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAicmVhZC10cmVlIOyLpO2MqCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM0NworbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKO2Vqey5oCDrgrTsmqnsnbQg7JeG7Iq164uI64ukKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIuy7pOuwiyDtlansuZjquLAgLS0gSEVBROulvCDsl4XrjbDsnbTtirjtlZjsp4Ag7JWK7Iq164uI64ukXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICLrs5Htlakg66mU7Iuc7KeA6rCAIOyXhuyKteuLiOuLpCAtLSBIRUFE66W8IOyXheuNsOydtO2KuO2VmOyngCDslYrsirXri4jri6RcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICInJXMn7J20KOqwgCkg7Luk67CL7J2EIOqwgOumrO2CpOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAi7J6Y66q765CcIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMg66y47J6Q7Je0OiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjY2OQorbXNnaWQgIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgIuuRkCDqsJzsnZgg7Zek65OcIOuzke2VqSDsmbjsl5DripQg7LKY66as7ZWY7KeAIOyViuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAibWVyZ2UtcmVjdXJzaXZl7JeQIOuMgO2VtCDslYwg7IiYIOyXhuuKlCDsmLXshZg6IC1YJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICIlc+yXkCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIiclcyfsl5DshJwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIgorbXNnc3RyICIiCisi67OR7ZWp7J2EIOy7pOuwi+2VmOyngCDslYrsirXri4jri6QuIOuzke2VqeydhCDrp4jsuZjroKTrqbQgJ2dpdCBjb21taXQn7J2EIOyCrOyaqe2VmOyLreyLnOyYpC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIGEgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB3aHkgdGhpcyBtZXJnZSBpcyBuZWNlc3NhcnksXG4iCisiZXNwZWNpYWxseSBpZiBpdCBtZXJnZXMgYW4gdXBkYXRlZCB1cHN0cmVhbSBpbnRvIGEgdG9waWMgYnJhbmNoLlxuIgorIlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyLsmZwg7J20IOuzke2VqeydtCDtlYTsmpTtlZzsp4Drpbwg7ISk66qF7ZWY64qUIOy7pOuwiyDrqZTsi5zsp4Drpbwg7J6F66Cl7ZWY7Iut7Iuc7JikLiDtirntnohcbiIKKyLsl4XsiqTtirjrprwg7JeF642w7J207Yq466W8IOyWtOuWpCDrqqnsoIHsmqkg67iM656c7LmY66GcIOuzke2Vqe2VoCDrlYzripQg67CY65Oc7IucIOq3uOugh+qyjFxuIgorIu2VmOyLreyLnOyYpC5cbiIKKyJcbiIKKyInJWMnIOusuOyekOuhnCDsi5zsnpHtlZjripQg7KSE7J2AIOustOyLnOuQmOqzoCwg66mU7Iuc7KeA6rCAIOu5hOyWtCDsnojsnLzrqbQg7Luk67CL7J2EXG4iCisi7KSR7KeA7ZWp64uI64ukLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODAwCittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICLruYgg7Luk67CLIOuplOyLnOyngC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV29uZGVyZnVsLlxuIgorbXNnc3RyICLtm4zrpa3tlanri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAi7J6Q64+ZIOuzke2VqeydtCDsi6TtjKjtlojsirXri4jri6QuIOy2qeuPjOydhCDrsJTroZzsnqHqs6Ag6rKw6rO866y87J2EIOy7pOuwi+2VmOyLreyLnOyYpC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkxMQorbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi7ZiE7J6sIOu4jOuenOy5mOqwgCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTEzCittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLtmITsnqwg67iM656c7LmY7JeQIOuMgO2VnCDrpqzrqqjtirjqsIAg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkxNQorbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi7ZiE7J6sIOu4jOuenOy5mOyXkCDrjIDtlbQg6riw67O4IOyXheyKpO2KuOumvOydhCDsp4DsoJXtlZjsp4Ag7JWK7JWY7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkyMAorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICLrpqzrqqjtirggJTIkc+yXkOyEnCAlMSRz7JeQIOuMgO2VnCDrpqzrqqjtirgg7LaU7KCBIOu4jOuenOy5mOqwgCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIHZhbHVlICclcycgaW4gZW52aXJvbm1lbnQgJyVzJyIKK21zZ3N0ciAi7J6Y66q765CcIOqwkiAnJXMnLCDtmZjqsr0gJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UgaW4gJXM6ICVzIgorbXNnc3RyICIlcyDslYjsl5DshJwg67OR7ZWp7ZWgIOyImCDsnojripQg7ZWt66qp7J20IOyVhOuLmeuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTA5Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIuuzke2Vqe2VoCDsiJgg7J6I64qUIO2VreuqqeydtCDslYTri5nri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjExCittc2dpZCAiLS1hYm9ydCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1hYm9ydCDsmLXshZjsnYAg7J247J6Q66W8IOuwm+yngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjE1Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICLspJHsp4DtlaAg67OR7ZWpIOyekeyXheydtCDsl4bsirXri4jri6QuIChNRVJHRV9IRUFE6rCAIOyXhuydjCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjI3Cittc2dpZCAiLS1jb250aW51ZSBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1jb250aW51ZSDsmLXshZjsnYAg7J247J6Q66W8IOuwm+yngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjMxCittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgaW4gcHJvZ3Jlc3MgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICLsp4Ttlokg7KSR7J24IOuzke2VqSDsnpHsl4XsnbQg7JeG7Iq164uI64ukLiAoTUVSR0VfSEVBROqwgCDsl4bsnYwpIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI0NworbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLrs5HtlansnYQg66eI7LmY7KeAIOyViuyVmOyKteuLiOuLpC4gKE1FUkdFX0hFQUQg7J6I7J2MKVxuIgorIuuzke2Vqe2VmOq4sCDsoITsl5Ag67OA6rK9IOyCrO2VreydhCDsu6TrsIvtlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI1NAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLsu6TrsIsg67m87Jik6riw66W8IOuniOy5mOyngCDslYrslZjsirXri4jri6QuIChDT01NSVRfUElDS19IRUFEIOyeiOydjClcbiIKKyLrs5HtlantlZjquLAg7KCE7JeQIOuzgOqyvSDsgqztla3snYQg7Luk67CL7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNTcKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIuy7pOuwiyDrubzsmKTquLDrpbwg66eI7LmY7KeAIOyViuyVmOyKteuLiOuLpC4gKENIRVJSWV9QSUNLX0hFQUQg7J6I7J2MKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNjYKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiLS1zcXVhc2gg7Ji17IWY7J2EIC0tbm8tZmYg7Ji17IWY6rO8IOqwmeydtCDsk7gg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjc0Cittc2dpZCAiTm8gY29tbWl0IHNwZWNpZmllZCBhbmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm90IHNldC4iCittc2dzdHIgIuy7pOuwi+ydhCDsp4DsoJXtlZjsp4Ag7JWK7JWY6rOgICBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbeulvCDshKTsoJXtlZjsp4Ag7JWK7JWY7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTEKK21zZ2lkICJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIKK21zZ3N0ciAi67mIIO2XpOuTnOuhnCDsu6TrsIvsnYQg7ZWp7LmY6riw64qUIOyngOybkO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjkzCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIuygleuwqe2WpeydtCDslYTri4wg7Luk67CL7J2AIOu5iCDtl6Trk5zsl5DshJzripQg7JWe65Kk6rCAIOunnuyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiVzIC0g67OR7ZWp7ZWgIOyImCDsnojripQg7ZWt66qp7J20IOyVhOuLmeuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMDAKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICLruYgg7Zek65Oc7JeQ64qUIOygle2Zle2eiCDtlZjrgpjsnZgg7Luk67CL66eMIOuzke2Vqe2VoCDsiJgg7J6I7Iq164uI64ukIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlLCBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICIlcyDsu6TrsIvsl5Ag7Iug66Kw7ZWY7KeAIOyViuuKlCAo7ISc66qF7J6Q6rCAICVz65286rOgIO2VmOuKlCkgR1BHIOyEnOuqheydtCDsnojsirXri4jri6QuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzNworIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiJXMg7Luk67CL7JeQIOyemOuqu+uQnCAo7ISc66qF7J6Q6rCAICVz65286rOgIO2VmOuKlCkgR1BHIOyEnOuqheydtCDsnojsirXri4jri6QuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIgorbXNnc3RyICIlcyDsu6TrsIvsl5AgR1BHIOyEnOuqheydtCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIGJ5ICVzXG4iCittc2dzdHIgIiVzIOy7pOuwi+yXkCAlc+ydmCDsmKzrsJTrpbggR1BHIOyEnOuqheydtCDsl4bsirXri4jri6RcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MDIKK21zZ2lkICJyZWZ1c2luZyB0byBtZXJnZSB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICLqtIDqs4Qg7JeG64qUIOy7pOuwiyDrgrTsl63snZgg67OR7ZWp7J2EIOqxsOu2gO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MTEKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIgorbXNnc3RyICLsnbTrr7gg7JeF642w7J207Yq4IOyDge2DnOyeheuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICLsl4XrjbDsnbTtirgg7KSRICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAi7JWE7KO8IOqwhOuLqO2VnCDsnbjrjbHsiqQg64K067aAIOuzke2VqeydhCDsi5zrj4Ttlanri4jri6QuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAi7JWE64uYLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ5NAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4gWWVlYWghIgorbXNnc3RyICLsnbTrr7gg7JeF642w7J207Yq4IOyDge2DnOyeheuLiOuLpC4g7JW87Zi4ISIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MDAKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIuygleuwqe2WpeydtCDrtojqsIDriqXtlZjrr4DroZwsIOykkeyngO2VqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTIzIGJ1aWx0aW4vbWVyZ2UuYzoxNjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICLtirjrpqzrpbwg67O4656YIOychOy5mOuhnCDrkJjrj4zrpr3ri4jri6QuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iCittc2dzdHIgIuuzke2VqSDsoITrnrUgJXMg7Iuc64+ELi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICLrs5HtlansnYQg7LKY66as7ZWcIOyghOueteydtCDsl4bsirXri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICLsoITrnrUgJXMo7Jy8KeuhnCDrs5HtlansnbQg7Iuk7Yyo7ZaI7Iq164uI64ukLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwNAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIKK21zZ3N0ciAi7IiY64+ZIO2VtOqysOydmCDspIDruYTrpbwg7JyE7ZW0ICVzIOyghOueteydhCDsgqzsmqntlanri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgIuyekOuPmSDrs5HtlansnbQg7J6YIOynhO2WieuQmOyXiOyKteuLiOuLpC4g7JqU7LKt7ZWc64yA66GcIOy7pOuwiyDsoITsl5Ag7KSR7KeA7ZWp64uI64ukXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMwCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPOy7pOuwiz4gPOy7pOuwiz4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMxCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA87Luk67CLPi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzIKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDzsu6TrsIs+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMworbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPOy7pOuwiz4gPOy7pOuwiz4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM0Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA866CI7Y2865+w7IqkPiBbPOy7pOuwiz5dIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMjAKK21zZ2lkICJvdXRwdXQgYWxsIGNvbW1vbiBhbmNlc3RvcnMiCittc2dzdHIgIuuqqOuToCDqs7zqsbAg6rO17Ya1IOy7pOuwi+ydhCDstpzroKXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIyMgorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAi7ZWY64KY7J2YIG4t67Cp7ZalIOuzke2VqeyXkCDrjIDtlZwg6rO86rGwIOy7pOuwi+ydhCDssL7sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIyNAorbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICLri6Trpbgg6rOz7JeQ7IScIOygkeq3vCDrtojqsIDriqXtlZwg66as67mE7KCEIOuqqeuhneydhCDstpzroKXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIyNgorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAi7LKr67KI7Ke46rCAIOuLpOuluCDqsoPsnZgg6rO86rGwIOy7pOuwi+yduOyngCDsl6zrtoA/IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMjgKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAiPOugiO2NvOufsOyKpD7snZggcmVmbG9n7JeQ7IScIDzsu6TrsIs+7J20IOu2hOumrOuQnCDsnITsuZjrpbwg7LC+7Iq164uI64ukIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo5Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiAiCisiPG9yaWctZmlsZT4gPGZpbGUyPiIKK21zZ3N0ciAiIgorImdpdCBtZXJnZS1maWxlIFs87Ji17IWYPl0gWy1MIDzsnbTrpoQxPiBbLUwgPG9yaWc+IFstTCA87J2066aEMj5dXV0gPO2MjOydvDE+IDzrs7jrnpgtIgorIu2MjOydvD4gPO2MjOydvDI+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozMworbXNnaWQgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIuqysOqzvOulvCDtkZzspIAg7Lac66Cl7Jy866GcIOuztOuDheuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzQKK21zZ2lkICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIKK21zZ3N0ciAiZGlmZjMg6riw67CYIOuzke2VqeydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM1Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIgorbXNnc3RyICLstqnrj4zsnbQg67Cc7IOd7ZWY66m0LCDsmrDrpqzsqr0g67KE7KCE7J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAi7Lap64+M7J20IOuwnOyDne2VmOuptCwg7IOB64yA7Y64IOuyhOyghOydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM5Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIGEgdW5pb24gdmVyc2lvbiIKK21zZ3N0ciAi7Lap64+M7J20IOuwnOyDne2VmOuptCwg7ZWp7LmcIOuyhOyghOydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQyCittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoaXMgbWFya2VyIHNpemUiCittc2dzdHIgIuy2qeuPjOydtCDrsJzsg53tlZjrqbQsIOydtCDtgazquLDroZwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MworbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAi7Lap64+M7JeQIOuMgO2VtCDqsr3qs6DtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIKK21zZ3N0ciAiPO2MjOydvDE+Lzzrs7jrnpgt7YyM7J28Pi887YyM7J28Mj7sl5Ag64yA7ZWcIOugiOydtOu4lOydhCDshKTsoJXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gJXMiCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIOyYteyFmDogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICInJXMnIOyYpOu4jOygne2KuOulvCDtjIzsi7HtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiBJZ25vcmluZyAlcy4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiBJZ25vcmluZyAlcy4iCittc2dzdHJbMF0gIuuyoOydtOyKpOulvCAlZOqwnCDrs7Tri6Qg66eO7J20IOyTuCDsiJgg7JeG7Iq164uI64ukLiAlcyDrrLTsi5ztlanri4jri6QuIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjYzCittc2dpZCAibm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAi65GQIOqwnOydmCDtl6Trk5wg67OR7ZWpIOyZuOyXkOuKlCDsspjrpqztlZjsp4Ag7JWK7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo2OSBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIgorbXNnc3RyICInJXMnIOugiO2NvOufsOyKpOulvCDslYzslYTrgrwg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXNcbiIKK21zZ3N0ciAiJXMg67OR7ZWpLCAlcyDtla3rqqnqs7xcbiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NQorbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUzCittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgIuyeheugpeydtCBOVUzroZwg64Gd64Kp64uI64ukIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NCBidWlsdGluL3dyaXRlLXRyZWUuYzoyNQorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi7JeG64qUIOyYpOu4jOygne2KuOulvCDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU1Cittc2dpZCAiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIgorbXNnc3RyICLsl6zrn6zqsJwg7Yq466asIOunjOuTpOq4sOulvCDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNworbXNnaWQgImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICJnaXQgbXYgWzzsmLXshZg+XSA87JuQ67O4Pi4uLiA864yA7IOBPiIKKworIzogYnVpbHRpbi9tdi5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBpcyBpbiBpbmRleCBhbmQgbm8gc3VibW9kdWxlPyIKK21zZ3N0ciAiJXMg65SU66CJ7YSw66as6rCAIOyduOuNseyKpOyXkCDsnojqs6Ag7ZWY7JyEIOuqqOuTiOydtCDsl4bsirXri4jri6Q/IgorCisjOiBidWlsdGluL212LmM6ODQgYnVpbHRpbi9ybS5jOjI4OAorbXNnaWQgIlBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICLqs4Tsho3tlZjroKTrqbQgLmdpdG1vZHVsZXPsnZgg67OA6rK9IOyCrO2VreydhCDsiqTthYzsnbTsp4Dsl5Ag64Sj6rGw64KYIOyKpO2DnOyLnCDtlZjsi63si5zsmKQiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiJS4qc+ydtCjqsIApIOyduOuNseyKpOyXkCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjQKK21zZ2lkICJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIuuMgOyDgeydtCDsnbTrr7gg7J6I7Ja064+EIOqwleygnOuhnCDsmK7quLDquLAv7J2066aEIOuwlOq+uOq4sOulvCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjYKK21zZ2lkICJza2lwIG1vdmUvcmVuYW1lIGVycm9ycyIKK21zZ3N0ciAi7Jiu6riw6riwL+ydtOumhCDrsJTqvrjquLAg7Jik66WY66W8IOqxtOuEiCDrnIHri4jri6QiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gJyVzJyBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIuuMgOyDgeydtCAoJyVzJykg65SU66CJ7YSw66as6rCAIOyVhOuLmeuLiOuLpCIKKworIzogYnVpbHRpbi9tdi5jOjE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgIiclcyfsnYQo66W8KSAnJXMnKOycvCnroZwg7J2066aEIOuwlOq+uOq4sO2VqeuLiOuLpFxuIgorCisjOiBidWlsdGluL212LmM6MTgzCittc2dpZCAiYmFkIHNvdXJjZSIKK21zZ3N0ciAi7J6Y66q765CcIOybkOuzuCIKKworIzogYnVpbHRpbi9tdi5jOjE4NgorbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIuuUlOugie2EsOumrOulvCDsnpDquLAg7J6Q7Iug7Jy866GcIOyYruq4uCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL212LmM6MTg5Cittc2dpZCAiY2Fubm90IG1vdmUgZGlyZWN0b3J5IG92ZXIgZmlsZSIKK21zZ3N0ciAi65SU66CJ7YSw66as66W8IO2MjOydvOuhnCDsmK7quLgg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tdi5jOjE5OAorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgIuybkOuzuCDrlJTroInthLDrpqzqsIAg67mE7Ja0IOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tdi5jOjIyMworbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgIuuyhOyghCDsu6jtirjroaQg7KSR7J20IOyVhOuLmeuLiOuLpCIKKworIzogYnVpbHRpbi9tdi5jOjIyNgorbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAi64yA7IOB7J20IOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tdi5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICInJXMnIOuNruyWtOyTsOq4sCIKKworIzogYnVpbHRpbi9tdi5jOjIzNworbXNnaWQgIkNhbm5vdCBvdmVyd3JpdGUiCittc2dzdHIgIuuNruyWtOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL212LmM6MjQwCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICLrj5nsnbztlZwg64yA7IOB7JeQIOuMgO2VtCDsl6zrn6wg6rCcIOybkOuzuCIKKworIzogYnVpbHRpbi9tdi5jOjI0MgorbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi64yA7IOBIOuUlOugie2EsOumrOqwgCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiVzLCDsm5Drs7g9JXMsIOuMgOyDgT0lcyIKKworIzogYnVpbHRpbi9tdi5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICLsnbTrpoQg67CU6r646riwLCAnJXMn7JeQ7IScICclcyco7Jy8KeuhnFxuIgorCisjOiBidWlsdGluL212LmM6Mjc2IGJ1aWx0aW4vcmVtb3RlLmM6NzE1IGJ1aWx0aW4vcmVwYWNrLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICInJXMn7J2YIOydtOumhCDrsJTqvrjquLDqsIAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzM4Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzsmLXshZg+XSA87Luk67CLPi4uLiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMzOQorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs87Ji17IWYPl0gLS1hbGwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozNDAKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs87Ji17IWYPl0gLS1zdGRpbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjM5NQorbXNnaWQgInByaW50IG9ubHkgbmFtZXMgKG5vIFNIQS0xKSIKK21zZ3N0ciAi7J2066aE66eMIO2RnOyLnCAoU0hBLTEg7JeG7J20KSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjM5NgorbXNnaWQgIm9ubHkgdXNlIHRhZ3MgdG8gbmFtZSB0aGUgY29tbWl0cyIKK21zZ3N0ciAi7Luk67CL7J2EIOyngOygle2VoCDrlYwg7YOc6re466eMIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjM5OAorbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICI87Yyo7YS0PuqzvCDsnbzsuZjtlZjripQg66CI7Y2865+w7Iqk66eMIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQwMAorbXNnaWQgImlnbm9yZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiPO2MqO2EtD7qs7wg7J287LmY7ZWY64qUIOugiO2NvOufsOyKpOulvCDrrLTsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDIKK21zZ2lkICJsaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzIgorbXNnc3RyICLrqqjrk6Ag66CI7Y2865+w7Iqk7JeQ7IScIOygkeq3vCDqsIDriqXtlZwg66qo65OgIOy7pOuwiyDrqqnroZ3snYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDAzCittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICLtkZzspIDsnoXroKXsl5DshJwg7J297Iq164uI64ukIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDA0Cittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIgorbXNnc3RyICJg7KCV7J2Y65CY7KeAIOyViuydgCcg7J2066aEIO2RnOyLnOulvCDtl4jsmqntlanri4jri6QgKOq4sOuzuOqwkikiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MTAKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAi7J6F66Cl7J2YIO2DnOq3uCDroIjtjbzrn7DsiqTrpbwg65Sw65286rCR64uI64ukICjrgrTrtoAg7IKs7JqpKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPOuFuO2KuC3roIjtjbzrn7DsiqQ+XSBbbGlzdCBbPOyYpOu4jOygne2KuD5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI3Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gIgorInwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA866mU7Iuc7KeAPiB8IC1GIDztjIwiCisi7J28PiB8ICgtYyB8IC1DKSA87Jik67iM7KCd7Yq4Pl0gWzzsmKTruIzsoJ3tirg+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gY29weSBbLWZdIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDzrhbjtirgt66CI7Y2865+w7IqkPl0gY29weSBbLWZdIDzsm5Drs7gt7Jik67iM7KCd7Yq4PiA864yA7IOBLeyYpOu4jOygne2KuD4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICIKKyIoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDzsqr3sp4At66CI7Y2865+w7IqkPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPOuplOyLnOyngD4gfCAtRiA8IgorIu2MjOydvD4gfCAoLWMgfCAtQykgPOyYpOu4jOygne2KuD5dIFs87Jik67iM7KCd7Yq4Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPOyqveyngC3roIjtjbzrn7DsiqQ+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPOyYpOu4jOygne2KuD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzEKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHNob3cgWzzsmKTruIzsoJ3tirg+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5Pl0gPG5vdGVzLXJlZj4iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDzrhbjtirgt66CI7Y2865+w7IqkPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA87KCE6561Pl0gPOuFuO2KuC3roIjtjbzrn7DsiqQ+IgorCisjOiBidWlsdGluL25vdGVzLmM6MzMKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPOuFuO2KuC3roIjtjbzrn7DsiqQ+XSByZW1vdmUgWzzsmKTruIzsoJ3tirg+Li4uXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM2Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcHJ1bmUgWy1uXSBbLXZdIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzrhbjtirgt66CI7Y2865+w7IqkPl0gcHJ1bmUgWy1uXSBbLXZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzrhbjtirgt66CI7Y2865+w7IqkPl0gZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyCittc2dpZCAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgW2xpc3QgWzzsmKTruIzsoJ3tirg+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NworbXNnaWQgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFkZCBbPOyYteyFmD5dIFs87Jik67iM7KCd7Yq4Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MgorbXNnaWQgImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IFs87Ji17IWYPl0gPOybkOuzuC3smKTruIzsoJ3tirg+IDzrjIDsg4Et7Jik67iM7KCd7Yq4PiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUzCittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzzsm5Drs7gt7Jik67iM7KCd7Yq4PiA864yA7IOBLeyYpOu4jOygne2KuD5dLi4uIgorCisjOiBidWlsdGluL25vdGVzLmM6NTgKK21zZ2lkICJnaXQgbm90ZXMgYXBwZW5kIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhcHBlbmQgWzzsmLXshZg+XSBbPOyYpOu4jOygne2KuD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjMKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgZWRpdCBbPOyYpOu4jOygne2KuD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjgKK21zZ2lkICJnaXQgbm90ZXMgc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgc2hvdyBbPOyYpOu4jOygne2KuD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzMKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzLXJlZj4iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSBbPOyYteyFmD5dIDzsqr3sp4At66CI7Y2865+w7IqkPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc0Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzzsmLXshZg+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs87Ji17IWYPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MAorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHJlbW92ZSBbPOyYpOu4jOygne2KuD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODUKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBwcnVuZSBbPOyYteyFmD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6OTAKK21zZ2lkICJnaXQgbm90ZXMgZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NQorbXNnaWQgIldyaXRlL2VkaXQgdGhlIG5vdGVzIGZvciB0aGUgZm9sbG93aW5nIG9iamVjdDoiCittc2dzdHIgIuuLpOydjCDsmKTruIzsoJ3tirjsl5Ag64W47Yq466W8IOyTsOqxsOuCmCDtjrjsp5Htlanri4jri6Q6IgorCisjOiBidWlsdGluL25vdGVzLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICInJXMnIOyYpOu4jOygne2KuOyXkCDrjIDtlbQgJ3Nob3cn66W8IOyLnOyeke2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6MTUyCittc2dpZCAiY291bGQgbm90IHJlYWQgJ3Nob3cnIG91dHB1dCIKK21zZ3N0ciAiJ3Nob3cnIOy2nOugpeydhCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIuyYpOu4jOygne2KuCAnJXMn7JeQIOuMgO2VtCAnc2hvdyfrpbwg66eI7LmY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE5NQorbXNnaWQgInBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAi64W47Yq4IOuCtOyaqeydhCAtbSDrmJDripQgLUYg7Ji17IWY7Jy866GcIOyeheugpe2VmOyLreyLnOyYpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwNAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAi64W47Yq4IOyYpOu4jOygne2KuOulvCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAi64W47Yq4IOuCtOyaqeydgCAlc+yXkCDrgqjsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMzQgYnVpbHRpbi90YWcuYzo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6MjM2IGJ1aWx0aW4vdGFnLmM6NTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOyXtOqxsOuCmCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1NSBidWlsdGluL25vdGVzLmM6MzA2IGJ1aWx0aW4vbm90ZXMuYzozMDgKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNzYgYnVpbHRpbi9ub3Rlcy5jOjQzMSBidWlsdGluL25vdGVzLmM6NTE3CisjOiBidWlsdGluL25vdGVzLmM6NTIyIGJ1aWx0aW4vbm90ZXMuYzo2MDAgYnVpbHRpbi9ub3Rlcy5jOjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOyYrOuwlOuluCDroIjtjbzrn7DsiqTroZwg7JWM7JWE64K064qU642wIOyLpO2MqO2WiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICclcycuIgorbXNnc3RyICInJXMnIOyYpOu4jOygne2KuCDsnb3quLDsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iCittc2dzdHIgIuu4lOuhreydtCDslYTri4wgJyVzJyDsmKTruIzsoJ3tirjsl5Ag64yA7ZW0IOuFuO2KuCDrjbDsnbTthLDrpbwg7J297J2EIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAi7J6Y66q765CcIO2YleyLneydmCDsnoXroKUg7KSEOiAnJXMnLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkOyEnCAnJXMnKOycvCnroZwg64W47Yq466W8IOuzteyCrO2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgZmlyc3QgJXMgd2lsbCBiZSByZXBsYWNlZCBieSBhIGdpdAorIy4gbm90ZXMgY29tbWFuZDogJ2FkZCcsICdtZXJnZScsICdyZW1vdmUnLCBldGMuCisjLgorIzogYnVpbHRpbi9ub3Rlcy5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byAlcyBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIiVz7JeQ7IScIOuFuO2KuOulvCAlcyDtlZjquLDrpbwg6rGw67aA7ZWp64uI64ukIChyZWZzL25vdGVzLyDrsJbsnoQpIgorCisjOiBidWlsdGluL25vdGVzLmM6MzY5IGJ1aWx0aW4vbm90ZXMuYzo0MjQgYnVpbHRpbi9ub3Rlcy5jOjUwMAorIzogYnVpbHRpbi9ub3Rlcy5jOjUxMiBidWlsdGluL25vdGVzLmM6NTg4IGJ1aWx0aW4vbm90ZXMuYzo2NTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MDUgYnVpbHRpbi9ub3Rlcy5jOjk1MiBidWlsdGluL25vdGVzLmM6OTczCittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAi7YyM652866+47YSw6rCAIOuEiOustCDrp47sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODIgYnVpbHRpbi9ub3Rlcy5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICIlcyDsmKTruIzsoJ3tirjsl5Ag64yA7ZW0IOuFuO2KuOqwgCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDAzIGJ1aWx0aW4vbm90ZXMuYzo1NjYKK21zZ2lkICJub3RlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIgorbXNnc3RyICLrrLjsnpDsl7TroZwg64W47Yq4IOuCtOyaqSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQwNiBidWlsdGluL25vdGVzLmM6NTY5Cittc2dpZCAibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiCittc2dzdHIgIu2MjOydvCDslYjsl5Ag64W47Yq4IOuCtOyaqSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQwOSBidWlsdGluL25vdGVzLmM6NTcyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICLsp4DsoJXtlZwg64W47Yq4IOyYpOu4jOygne2KuOulvCDsnqzsgqzsmqntlZjqs6Ag7Y647KeR7ZWp64uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEyIGJ1aWx0aW4vbm90ZXMuYzo1NzUKK21zZ2lkICJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgIuyngOygle2VnCDrhbjtirgg7Jik67iM7KCd7Yq466W8IOyerOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxNSBidWlsdGluL25vdGVzLmM6NTc4Cittc2dpZCAiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIgorbXNnc3RyICLruYgg64W47Yq4IOyggOyepeydhCDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTYgYnVpbHRpbi9ub3Rlcy5jOjQ4NworbXNnaWQgInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIuq4sOyhtCDrhbjtirjrpbwg67CU6r+J64uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisi64W47Yq466W8IOy2lOqwgO2VoCDsiJgg7JeG7Iq164uI64ukLiAlcyDsmKTruIzsoJ3tirjsl5Ag64yA7ZWcIOq4sOyhtCDrhbjtirjqsIAg7J6I7Iq164uI64ukLiDquLDsobQg64W47Yq4IgorIuulvCDrja7slrTsk7DroKTrqbQgJy1mJyDsmLXshZjsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikIgorCisjOiBidWlsdGluL25vdGVzLmM6NDU2IGJ1aWx0aW4vbm90ZXMuYzo1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICIlcyDsmKTruIzsoJ3tirjsl5Ag64yA7ZWcIOq4sOyhtCDrhbjtirjrpbwg642u7Ja07JSB64uI64ukXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjcgYnVpbHRpbi9ub3Rlcy5jOjYyNyBidWlsdGluL25vdGVzLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIG5vdGUgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICIlcyDsmKTruIzsoJ3tirjsl5Ag64yA7ZWcIOuFuO2KuOulvCDsoJzqsbDtlanri4jri6RcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ4OAorbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICLtkZzspIAg7J6F66Cl7JeQ7IScIOyYpOu4jOygne2KuOulvCDsnb3sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTAKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAiPOuqheuguT7sl5Ag64yA7ZWcIOuLpOyLnOyTsOq4sCDshKTsoJXsnYQg7J297Ja065Ok7J6F64uI64ukICgtLXN0ZGluIOyYteyFmCDtj6ztlagpIgorCisjOiBidWlsdGluL25vdGVzLmM6NTA4Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICLtjIzrnbzrr7jthLDqsIAg64SI66y0IOyggeyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyLrhbjtirjrpbwg67O17IKs7ZWgIOyImCDsl4bsirXri4jri6QuICVzIOyYpOu4jOygne2KuOyXkCDrjIDtlZwg6riw7KG0IOuFuO2KuOqwgCDsnojsirXri4jri6QuIOq4sOyhtCDrhbjtirgiCisi66W8IOuNruyWtOyTsOugpOuptCAnLWYnIOyYteyFmOydhCDsgqzsmqntlZjsi63si5zsmKQiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgIuybkOuzuCAlcyDsmKTruIzsoJ3tirjsl5Ag64yA7ZWcIOuFuO2KuOqwgCDsl4bsirXri4jri6QuIOuzteyCrO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKyJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIgorbXNnc3RyICIiCisiLW0vLUYvLWMvLUMg7Ji17IWY7J2AICdlZGl0JyDtlZjsnIQg66qF66C57JeQIOuMgO2VtCDsgqzsmqnsnYQg6raM7ZWY7KeAIOyViuyKteuLiOuLpC5cbiIKKyLrjIDsi6Dsl5AgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIOuqheugueydhCDsgqzsmqntlZjsi63si5zsmKQuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2ODgKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICJOT1RFU19NRVJHRV9QQVJUSUFMIOugiO2NvOufsOyKpCDsgq3soJzsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6NjkwCittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICJOT1RFU19NRVJHRV9SRUYg66CI7Y2865+w7IqkIOyCreygnOyXkCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OTIKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICdnaXQgbm90ZXMgbWVyZ2UnIHdvcmt0cmVlIgorbXNnc3RyICInZ2l0IG5vdGVzIG1lcmdlJyDsnpHsl4Xtirjrpqwg7KCc6rGw7JeQIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcxMgorbXNnaWQgImZhaWxlZCB0byByZWFkIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICJOT1RFU19NRVJHRV9QQVJUSUFMIOugiO2NvOufsOyKpCDsnb3quLDsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6NzE0Cittc2dpZCAiY291bGQgbm90IGZpbmQgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iCittc2dzdHIgIk5PVEVTX01FUkdFX1BBUlRJQUzsl5DshJwg7Luk67CL7J2EIOywvuydhCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcxNgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAiTk9URVNfTUVSR0VfUEFSVElBTOyXkOyEnCDsu6TrsIvsnYQg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI5Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICJOT1RFU19NRVJHRV9SRUYg7JWM7JWE64K06riw7JeQIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjczMgorbXNnaWQgImZhaWxlZCB0byBmaW5hbGl6ZSBub3RlcyBtZXJnZSIKK21zZ3N0ciAi64W47Yq4IOuzke2VqeydhCDrp4jsuZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6NzU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm90ZXMgbWVyZ2Ugc3RyYXRlZ3kgJXMiCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIOuFuO2KuCDrs5Htlakg7KCE6561ICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzc0Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICLsnbzrsJgg7Ji17IWYIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzc2Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAi67OR7ZWpIOyYteyFmCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc3OAorbXNnaWQgIiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCittc2dzdHIgIiIKKyLso7zslrTsp4Qg7KCE65617J2EIOyCrOyaqe2VtCDrhbjtirgg7Lap64+M7J2EIO2VtOqysO2VqeuLiOuLpCAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4MAorbXNnaWQgIkNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIuuzke2Vqe2VmOyngCDslYrsnYAg64W47Yq4IOy7pOuwiyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4MgorbXNnaWQgImZpbmFsaXplIG5vdGVzIG1lcmdlIGJ5IGNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIuuzke2Vqe2VmOyngCDslYrsnYAg64W47Yq466W8IOy7pOuwi+2VtCDrhbjtirgg67OR7ZWp7J2EIOuniOy5qeuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NAorbXNnaWQgIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIuuFuO2KuCDrs5Htlakg7ZW06rKwIOykkeyngCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NgorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICLrhbjtirgg67OR7ZWp7J2EIOykkeyngO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NworbXNnaWQgImNhbm5vdCBtaXggLS1jb21taXQsIC0tYWJvcnQgb3IgLXMvLS1zdHJhdGVneSIKK21zZ3N0ciAiLS1jb21taXQsIC0tYWJvcnQsIC1zLy0tc3RyYXRlZ3kg7Ji17IWY7J2EIOyEnuyWtCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgwMgorbXNnaWQgIm11c3Qgc3BlY2lmeSBhIG5vdGVzIHJlZiB0byBtZXJnZSIKK21zZ3N0ciAi67OR7ZWp7ZWgIOuFuO2KuCDroIjtjbzrn7DsiqTrpbwg7KeA7KCV7ZW07JW8IO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC1zLy0tc3RyYXRlZ3k6ICVzIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCDsoITrnrUoLXMvLS1zdHJhdGVneSk6ICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgImEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICIlcyDsnITsuZjroZwg64W47Yq4IOuzke2VqeydtCDsnbTrr7ggJXPsl5DshJwg7KeE7ZaJ7KSR7J6F64uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6ODY2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdG9yZSBsaW5rIHRvIGN1cnJlbnQgbm90ZXMgcmVmICglcykiCittc2dzdHIgIu2YhOyerCDrhbjtirgg66CI7Y2865+w7Iqk7J2YICglcykg66eB7YGs66W8IOyggOyepe2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdXRvbWF0aWMgbm90ZXMgbWVyZ2UgZmFpbGVkLiBGaXggY29uZmxpY3RzIGluICVzIGFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICIKKyInZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0Jywgb3IgYWJvcnQgdGhlIG1lcmdlIHdpdGggJ2dpdCBub3RlcyBtZXJnZSAtLSIKKyJhYm9ydCcuXG4iCittc2dzdHIgIiIKKyLsnpDrj5kg64W47Yq4IOuzke2VqeydtCDsi6TtjKjtlojsirXri4jri6QuICVzIOyViOydmCDstqnrj4zsnYQg67CU66Gc7J6h6rOgIOqysOqzvOulvCAnZ2l0IG5vdGVzICIKKyJtZXJnZSAtLWNvbW1pdCcg66qF66C57Jy866GcIOy7pOuwi+2VmOyLreyLnOyYpC4g65iQ64qUICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcg66qF66C57Jy8IgorIuuhnCDrs5HtlansnYQg7KSR7KeA7ZWY7Iut7Iuc7JikLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICIlcyDsmKTruIzsoJ3tirjsl5Ag64W47Yq46rCAIOyXhuyKteuLiOuLpFxuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTAyCittc2dpZCAiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIgorbXNnc3RyICLsl4bripQg64W47Yq466W8IOygnOqxsO2VmOugpOuKlCDsi5zrj4Trpbwg7Jik66WY6rCAIOyVhOuLjCDqsoPsnLzroZwg7Leo6riJ7ZWp64uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6OTA1Cittc2dpZCAicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIu2RnOykgCDsnoXroKXsl5DshJwg7Jik67iM7KCd7Yq4IOydtOumhOydhCDsnb3sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NDMgYnVpbHRpbi9wcnVuZS5jOjEwNyBidWlsdGluL3dvcmt0cmVlLmM6MTUxCittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICLsoJzqsbDtlZjsp4Ag7JWK6rOgLCDrs7Tsl6zso7zquLDrp4wg7ZWp64uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6OTQ0Cittc2dpZCAicmVwb3J0IHBydW5lZCBub3RlcyIKK21zZ3N0ciAi7J6Y652864K4IOuFuO2KuOulvCDslYzrpr3ri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5ODYKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgIuuFuO2KuC3roIjtjbzrn7DsiqQiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5ODcKK21zZ2lkICJ1c2Ugbm90ZXMgZnJvbSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiPOuFuO2KuC3roIjtjbzrn7DsiqQ+7JeQ7IScIOuFuO2KuOulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIO2VmOychCDrqoXroLk6ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQ4Cittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs87Ji17IWYPi4uLl0gWzwgPOugiO2NvOufsOyKpOuqqeuhnT4gfCA8IDzsmKTruIzsoJ3tirjrqqnroZ0+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo0OQorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs8b3B0aW9ucz4uLi5dIDxiYXNlLW5hbWU+IFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPOyYteyFmD4uLi5dIDzrsqDsnbTsiqTsnbTrpoQ+IFs8IDzroIjtjbzrn7DsiqTrqqnroZ0+IHwgPCA87Jik67iM7KCd7Yq466qp66GdIgorIj5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlIGVycm9yICglZCkiCittc2dzdHIgImRlZmxhdGUg7Jik66WYICglZCkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODEwCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBwYWNrcyBhcmUgc3BsaXQgZHVlIHRvIHBhY2sucGFja1NpemVMaW1pdCIKK21zZ3N0ciAiIgorIuuwsO2KuOuntSDsk7DquLDrpbwg7ZWY7KeAIOyViuyKteuLiOuLpC4g66y27J2M7J2AIHBhY2sucGFja1NpemVMaW1pdCDqsJLsl5Ag65Sw6528IOyqvOqwnOynkeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4MjMKK21zZ2lkICJXcml0aW5nIG9iamVjdHMiCittc2dzdHIgIuyYpOu4jOygne2KuCDsk7DripQg7KSRIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjExMDYKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIGFzIHNvbWUgb2JqZWN0cyBhcmUgbm90IGJlaW5nIHBhY2tlZCIKK21zZ3N0ciAi66y27J2M7JeQIOuTpOyWtOyeiOyngCDslYrsnYAg7Jik67iM7KCd7Yq46rCAIOyeiOycvOuvgOuhnCwg67mE7Yq466e1IOyTsOq4sOulvCDtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE3NjUKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICLsmKTruIzsoJ3tirgg6rCc7IiYIOyEuOuKlCDspJEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTg5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHNpemUgb2YgJXMiCittc2dzdHIgIiVz7J2YIO2BrOq4sOulvCDslYzslYTrgrwg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxOTEwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3QgaGVhZGVyIG9mICVzIgorbXNnc3RyICIlc+ydmCDsmKTruIzsoJ3tirgg7Zek642U66W8IO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NjQKK21zZ2lkICJDb21wcmVzc2luZyBvYmplY3RzIgorbXNnc3RyICLsmKTruIzsoJ3tirgg7JWV7LaV7ZWY64qUIOykkSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzM1Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICItLW1pc3NpbmfsnZgg6rCS7J20IOyYrOuwlOultOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIgorbXNnc3RyICLsp4Dsm5DtlZjsp4Ag7JWK64qUIOyduOuNseyKpCDrsoTsoIQgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA3MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICLsnpjrqrvrkJwg7J24642x7IqkIOuyhOyghCAnJXMnIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMDIKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAi7KeE7ZaJ66Wg7J2EIO2RnOyLnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEwNAorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgIuynhO2WieuloOydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEwNgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICLsmKTruIzsoJ3tirgg7JOw6riwIOuLqOqzhOyXkOyEnCDsp4TtlonrpaDsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMDkKK21zZ2lkICJzaW1pbGFyIHRvIC0tYWxsLXByb2dyZXNzIHdoZW4gcHJvZ3Jlc3MgbWV0ZXIgaXMgc2hvd24iCittc2dzdHIgIuynhO2WieuloOydtCDtkZzsi5zrkKAg65WMIC0tYWxsLXByb2dyZXNz7JmAIOu5hOyKt+2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTEwCittc2dpZCAidmVyc2lvblssb2Zmc2V0XSIKK21zZ3N0ciAi67KE7KCEWyzsmKTtlITshYtdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMTEKK21zZ2lkICJ3cml0ZSB0aGUgcGFjayBpbmRleCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgaWR4IGZvcm1hdCB2ZXJzaW9uIgorbXNnc3RyICLsp4DsoJXtlZwg67KE7KCE7J2YIOyduOuNseyKpCDtmJXsi53sl5Ag65Sw6528IOustuydjCDsnbjrjbHsiqQg7YyM7J287J2EIOyUgeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTE0Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAi7Lac66ClIOustuydjCDtjIzsnbzsnZgg7LWc64yAIO2BrOq4sCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTE2Cittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICLrs7TsobAg7Jik67iM7KCd7Yq4IOyggOyepeyGjOyXkOyEnCDruYzroKTsmKgg7Jik67iM7KCd7Yq466W8IOustOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTE4Cittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLrrLbsnYwg7Jik67iM7KCd7Yq466W8IOustOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTIwCittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgb2JqZWN0cyIKK21zZ3N0ciAi66y27J2MIOyciOuPhOyasOulvCDsmKTruIzsoJ3tirgg64uo7JyE66GcIOygnO2VnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTIyCittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAi66y27J2MIOyciOuPhOyasOulvCDsmKTruIzsoJ3tirgg64uo7JyE7JeQIOy2lOqwgOuhnCDrqZTrqqjrpqwg64uo7JyE66GcIOygnO2VnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTI0Cittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgIuqysOqzvOusvCDrrLbsnYzsl5DshJwg7ZeI7Jqp65CY64qUIOy1nOuMgCDquLjsnbTsnZgg64247YOAIOyytOyduCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTI2Cittc2dpZCAicmV1c2UgZXhpc3RpbmcgZGVsdGFzIgorbXNnc3RyICLquLDsobQg64247YOA66W8IOyerOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTI4Cittc2dpZCAicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIKK21zZ3N0ciAi6riw7KG0IOyYpOu4jOygne2KuOulvCDsnqzsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEzMAorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAiT0ZTX0RFTFRBIOyYpOu4jOygne2KuOulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEzMgorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgIuy1nOyDgeydmCDrjbjtg4Ag7J287LmY66W8IOqygOyDie2VmOuKlOuNsCDsiqTroIjrk5zrpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMzQKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICLruYgg66y27J2MIOy2nOugpeydhCDrp4zrk6Tsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMzYKK21zZ2lkICJyZWFkIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLtkZzspIAg7J6F66Cl7JeQ7IScIOumrOu5hOyghCDsnbjsnpDrpbwg7J297Iq164uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMzgKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAi66y27KeAIOyViuuKlCDsmKTruIzsoJ3tirgg7IiY66W8IOygnO2VnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTQxCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgIuuqqOuToCDroIjtjbzrn7DsiqTsl5DshJwg7KCR6re8IOqwgOuKpe2VnCDsmKTruIzsoJ3tirjrpbwg7Y+s7ZWo7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNDQKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiCittc2dzdHIgInJlZmxvZyDtla3rqqnsl5DshJwg66CI7Y2865+w7Iqk7ZWgIOyImCDsnojripQg7Jik67iM7KCd7Yq466W8IO2PrO2VqO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTQ3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIKK21zZ3N0ciAi7J24642x7Iqk7JeQ7IScPCDroIjtjbzrn7DsiqTtlZjripQg7Jik67iM7KCd7Yq466W8IO2PrO2VqO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTUwCittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICLrrLbsnYzsnYQg7ZGc7KSAIOy2nOugpeycvOuhnCDstpzroKXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE1MgorbXNnaWQgImluY2x1ZGUgdGFnIG9iamVjdHMgdGhhdCByZWZlciB0byBvYmplY3RzIHRvIGJlIHBhY2tlZCIKK21zZ3N0ciAi66y27J2M7JeQIOuTpOyWtOqwiCDsmKTruIzsoJ3tirjrpbwg66CI7Y2865+w7Iqk7ZWY64qUIO2DnOq3uCDsmKTruIzsoJ3tirjrpbwg7Y+s7ZWo7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTQKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIuygkeq3vCDrtojqsIDriqUg7Jik67iM7KCd7Yq466W8IOuztOyhtO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTU2Cittc2dpZCAicGFjayBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLripDsiqjtlZwg7KCR6re8IOu2iOqwgOuKpSDsmKTruIzsoJ3tirjrpbwg66y27Iq164uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTgKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiPOyLnOqwgT7rs7Tri6Qg7IOI66Gc7Jq0IOygkeq3vCDrtojqsIDriqUg7Jik67iM7KCd7Yq47J2YIOustuydjOydhCDtkonri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE2MQorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICLslofsnYAg66y27J2M7J2EIOunjOuTreuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTYzCittc2dpZCAiY3JlYXRlIHBhY2tzIHN1aXRhYmxlIGZvciBzaGFsbG93IGZldGNoZXMiCittc2dzdHIgIuyWleydgCDqsIDsoLjsmKTquLDsl5Ag7KCB7ZWp7ZWcIOustuydjOydhCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE2NQorbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgIu2VtOuLue2VmOuKlCAua2VlcCDtjIzsnbzsnbQg7J6I64qUIOustuydjOydhCDrrLTsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE2NworbXNnaWQgImlnbm9yZSB0aGlzIHBhY2siCittc2dzdHIgIuydtCDrrLbsnYzsnYQg66y07Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNjkKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICLrrLbsnYwg7JWV7LaVIOuLqOqzhCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTcxCittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgIuq3uOuemO2UhO2KuOuhnCDrsJzsg53tlZwg7Luk67CL7J2EIOyIqOq4sOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE3MworbXNnaWQgInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi6rCA64ql7ZWY66m0IOu5hO2KuOuntSDsnbjrjbHsiqTrpbwg7IKs7Jqp7ZW0IOyYpOu4jOygne2KuCDshLjquLAg7IaN64+E66W8IOuGkuyeheuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTc1Cittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggdG9nZXRoZXIgd2l0aCB0aGUgcGFjayBpbmRleCIKK21zZ3N0ciAi66y27J2MIOyduOuNseyKpOyZgCDqsJnsnbQg67mE7Yq466e1IOyduOuNseyKpOulvCDslIHri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE3OAorbXNnaWQgImhhbmRsaW5nIGZvciBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgIuyXhuuKlCDsmKTruIzsoJ3tirjrpbwg7LKY66as7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxODEKK21zZ2lkICJkbyBub3QgcGFjayBvYmplY3RzIGluIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAi7ZSE652866+47IScIOustuydjCDtjIzsnbzsl5Ag7Jik67iM7KCd7Yq466W8IOustuyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBjaGFpbiBkZXB0aCAlZCBpcyB0b28gZGVlcCwgZm9yY2luZyAlZCIKK21zZ3N0ciAi64247YOAIOyytOyduCDquYrsnbQg6rCS7J20ICglZCkg64SI66y0IO2BveuLiOuLpC4gJWQg6rCS7Jy866GcIOyhsOygle2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2suZGVsdGFDYWNoZUxpbWl0IGlzIHRvbyBoaWdoLCBmb3JjaW5nICVkIgorbXNnc3RyICJwYWNrLmRlbHRhQ2FjaGVMaW1pdCDqsJLsnbQg64SI66y0IO2BveuLiOuLpC4gJWQg6rCS7Jy866GcIOyhsOygle2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzM4Cittc2dpZCAiRW51bWVyYXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IOuCmOyXtO2VmOuKlCDspJEiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6NworbXNnaWQgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBwYWNrLXJlZnMgWzzsmLXshZg+XSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNQorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAi66qo65GQIOustuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNgorbXNnaWQgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIgorbXNnc3RyICLripDsiqjtlZwg66CI7Y2865+w7Iqk66W8IOyemOudvOuDheuLiOuLpCAo6riw67O46rCSKSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo4Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDEKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAi7KSR67O165CcIOyYpOu4jOygne2KuCDsoJzqsbAiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMQorbXNnaWQgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSA8dGltZT5dIFstLV0gWzxoZWFkPi4uLl0iCittc2dzdHIgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSA87Iuc6rCBPl0gWy0tXSBbPO2XpOuTnD4uLi5dIgorCisjOiBidWlsdGluL3BydW5lLmM6MTA4Cittc2dpZCAicmVwb3J0IHBydW5lZCBvYmplY3RzIgorbXNnc3RyICLsnpjrnbzrgrgg7Jik67iM7KCd7Yq466W8IOyVjOumveuLiOuLpCIKKworIzogYnVpbHRpbi9wcnVuZS5jOjExMQorbXNnaWQgImV4cGlyZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICI87Iuc6rCBPuuztOuLpCDsmKTrnpgg65CcIOyYpOu4jOygne2KuOulvCDrp4zro4ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMTMKK21zZ2lkICJsaW1pdCB0cmF2ZXJzYWwgdG8gb2JqZWN0cyBvdXRzaWRlIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAi7ZSE652866+47IScIOustuydjO2MjOydvCDrsJbsl5DshJwg7Jik67iM7KCd7Yq4IOywvuyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMjcKK21zZ2lkICJjYW5ub3QgcHJ1bmUgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgInByZWNpb3VzLW9iamVjdHMg7KCA7J6l7IaM7JeQ7IScIOyemOudvOuCvCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3B1bGwuYzo1OSBidWlsdGluL3B1bGwuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiVz7J2YIOqwkuydtCDsmKzrsJTrpbTsp4Ag7JWK7Iq164uI64ukOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODEKK21zZ2lkICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1bGwgWzzsmLXshZg+XSBbPOyggOyepeyGjD4gWzzroIjtjbzrn7DsiqTrqoXshLg+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjEzMgorbXNnaWQgImNvbnRyb2wgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOyerOq3gOyggeycvOuhnCDqsIDsoLjsmKTquLAg67Cp7Iud7J2EIOyhsOygle2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wdWxsLmM6MTM2Cittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgIuuzke2VqSDqtIDroKgg7Ji17IWYIgorCisjOiBidWlsdGluL3B1bGwuYzoxMzkKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgIuuzgOqyvSDsgqztla3snYQg7KCB7Jqp7ZWgIOuVjCDrs5HtlantlZjripQg64yA7IugIOumrOuyoOydtOyKpO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wdWxsLmM6MTY2IGJ1aWx0aW4vcmViYXNlLS1oZWxwZXIuYzoyMyBidWlsdGluL3JldmVydC5jOjEyMQorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAi7KCV67Cp7ZalIOynhO2WieydhCDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE3NQorbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIgcmViYXNlIgorbXNnc3RyICLrpqzrsqDsnbTsiqQg7KCE6rO8IO2bhOyXkCBzdGFzaCDrsI8gc3Rhc2ggcG9w7J2EIOyekOuPmeycvOuhnCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE5MQorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyIKK21zZ3N0ciAi6rCA7KC47Jik6riwIOq0gOugqCDsmLXshZgiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIwOQorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIHB1bGxlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAi67OR66Cs7KCB7Jy866GcIO2SgOydhCDsi6TtlontlaAg7ZWY7JyE66qo65OIIOqwnOyImCIKKworIzogYnVpbHRpbi9wdWxsLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICJwdWxsLmZm7JeQIOuMgO2VtCDsnpjrqrvrkJwg6rCSOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NDIwCittc2dpZCAiIgorIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0ICIKKyJmZXRjaGVkLiIKK21zZ3N0ciAi6rCA7KC47JioIOugiO2NvOufsOyKpCDspJHsl5Ag66as67Kg7J207Iqk7ZWgIOuMgOyDgSDtm4Trs7TqsIAg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDIyCittc2dpZCAiIgorIlRoZXJlIGFyZSBubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iCittc2dzdHIgIuqwgOyguOyYqCDroIjtjbzrn7DsiqQg7KSR7JeQIOuzke2Vqe2VoCDrjIDsg4Eg7ZuE67O06rCAIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyMworbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIiIKKyLrs7TthrUg7J2065+wIOqyveyasOuKlCDrpqzrqqjtirgg7Kq97JeQ64qUIOyXhuuKlCDsmYDsnbzrk5zsubTrk5wg66CI7Y2865+w7Iqk66qF7IS46rCAXG4iCisi7KO87Ja07KGM7J2EIOuVjCDsnbzslrTrgqnri4jri6QuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBwdWxsIGZyb20gdGhlIHJlbW90ZSAnJXMnLCBidXQgZGlkIG5vdCBzcGVjaWZ5XG4iCisiYSBicmFuY2guIEJlY2F1c2UgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQgY29uZmlndXJlZCByZW1vdGVcbiIKKyJmb3IgeW91ciBjdXJyZW50IGJyYW5jaCwgeW91IG11c3Qgc3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK21zZ3N0ciAiIgorIuumrOuqqO2KuCAnJXMn7JeQ7IScIO2SgOydhCDsmpTssq3tlojsp4Drp4wsIOu4jOuenOy5mOulvCDsp4DsoJXtlZjsp4Ag7JWK7JWY7Iq164uI64ukLlxuIgorIuydtCDrpqzrqqjtirjripQg7ZiE7J6sIOu4jOuenOy5mOyXkCDrjIDtlbQg6riw67O47Jy866GcIOyEpOygleuQnCDrpqzrqqjtirjqsIBcbiIKKyLslYTri4jquLAg65WM66y47JeQLCDrqoXroLntlonsl5DshJwg67iM656c7LmY66W8IOyngOygle2VtOyVvCDtlanri4jri6QuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzEgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3MworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgIu2YhOyerCDslrTrlqQg67iM656c7LmYIOychOyXkOuPhCDsnojsp4Ag7JWK7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDMzIGJ1aWx0aW4vcHVsbC5jOjQ0OCBnaXQtcGFyc2UtcmVtb3RlLnNoOjc5Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIKK21zZ3N0ciAi7Ja065akIOu4jOuenOy5mOulvCDrjIDsg4HsnLzroZwg66as67Kg7J207Iqk7ZWg7KeAIOyngOygle2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNSBidWlsdGluL3B1bGwuYzo0NTAgZ2l0LXBhcnNlLXJlbW90ZS5zaDo4MgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKK21zZ3N0ciAi7Ja065akIOu4jOuenOy5mOulvCDrjIDsg4HsnLzroZwg67OR7ZWp7ZWg7KeAIOyngOygle2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNiBidWlsdGluL3B1bGwuYzo0NTEKK21zZ2lkICJTZWUgZ2l0LXB1bGwoMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICLsnpDshLjtlZwg7KCV67O064qUIGdpdC1wdWxsKDEpIO2OmOydtOyngOulvCDssLjqs6DtlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzggYnVpbHRpbi9wdWxsLmM6NDQ0IGJ1aWx0aW4vcHVsbC5jOjQ1MworIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NAorbXNnaWQgIjxyZW1vdGU+IgorbXNnc3RyICI866as66qo7Yq4PiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM4IGJ1aWx0aW4vcHVsbC5jOjQ1MyBidWlsdGluL3B1bGwuYzo0NTggZ2l0LXJlYmFzZS5zaDo1MjMKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6NjUKK21zZ2lkICI8YnJhbmNoPiIKK21zZ3N0ciAiPOu4jOuenOy5mD4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NiBnaXQtcGFyc2UtcmVtb3RlLnNoOjc1Cittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIu2YhOyerCDruIzrnpzsuZjsl5Ag7LaU7KCBIOygleuztOqwgCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo5NQorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDoiCittc2dzdHIgIuydtCDruIzrnpzsuZjsl5Ag64yA7ZWcIOy2lOyggSDsoJXrs7Trpbwg7ISk7KCV7ZWY66Ck66m0IOuLpOydjOqzvCDqsJnsnbQg7ZWgIOyImCDsnojsirXri4jri6Q6IgorCisjOiBidWlsdGluL3B1bGwuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdG8gbWVyZ2Ugd2l0aCB0aGUgcmVmICclcydcbiIKKyJmcm9tIHRoZSByZW1vdGUsIGJ1dCBubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyLshKTsoJXsl5DshJwg66as66qo7Yq47J2YICclcycg66CI7Y2865+w7Iqk7JmAIOuzke2Vqe2VmOuPhOuhnSDsp4DsoJXtlojsp4Drp4wsXG4iCisi6re465+wIOugiO2NvOufsOyKpOulvCDqsIDsoLjsmKTsp4Ag7JWK7JWY7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODI2Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICLrpqzrsqDsnbTsiqTsl5Ag64yA7ZW0IC0tdmVyaWZ5LXNpZ25hdHVyZXMg7Ji17IWY7J2EIOustOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wdWxsLmM6ODc0Cittc2dpZCAiLS1bbm8tXWF1dG9zdGFzaCBvcHRpb24gaXMgb25seSB2YWxpZCB3aXRoIC0tcmViYXNlLiIKK21zZ3N0ciAiLS1bbm8tXWF1dG9zdGFzaCDsmLXshZjsnYAgLS1yZWJhc2Ug7Ji17IWY6rO8IOqwmeydtCDsjajslbwg7ZWp64uI64ukLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODgyCittc2dpZCAiVXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4LiIKK21zZ3N0ciAi66eM65Ok7Ja07KeA7KeAIOyViuydgCDruIzrnpzsuZjrpbwg7J24642x7Iqk7JeQIOy2lOqwgOuQnCDrs4Dqsr0g7IKs7ZWt7Jy866GcIOyXheuNsOydtO2KuO2VqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg4NQorbXNnaWQgInB1bGwgd2l0aCByZWJhc2UiCittc2dzdHIgIuumrOuyoOydtOyKpOuhnCDtkoDtlZjquLAiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg4NgorbXNnaWQgInBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIuy7pOuwi+2VmOqxsOuCmCDsiqTtg5zsi5zsl5Ag64Sj7Jy87Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorIu2YhOyerCDruIzrnpzsuZgg7Zek65Oc66W8IOyXheuNsOydtO2KuO2WiOyKteuLiOuLpC5cbiIKKyLsnpHsl4Ug7Y+0642U66W8ICVzIOy7pOuwi+yXkOyEnCDsoJXrsKntlqVcbiIKKyLsp4Ttlontlanri4jri6QuIgorCisjOiBidWlsdGluL3B1bGwuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICIiCisi7J6R7JeFIO2PtOuNlOulvCDsoJXrsKntlqUg7KeE7ZaJ7ZWgIOyImCDsl4bsirXri4jri6QuXG4iCisi64uk7J2MIOuqheuguSDstpzroKXsl5DshJwg7KSR7JqU7ZWcIOyCrO2VreydhCDsoIDsnqXtlZwg64uk7J2MLFxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyLri6TsnYzsnYQg7Iuk7ZaJ7ZWY66m0XG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisi67O16rWs65Cp64uI64ukLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTMxCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIuyXrOufrCDruIzrnpzsuZjrpbwg67mIIO2XpOuTnOuhnCDrs5HtlantlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkzNQorbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcy4iCittc2dzdHIgIuyXrOufrCDruIzrnpzsuZjroZwg66as67Kg7J207Iqk7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL3B1bGwuYzo5NDIKK21zZ2lkICJjYW5ub3QgcmViYXNlIHdpdGggbG9jYWxseSByZWNvcmRlZCBzdWJtb2R1bGUgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAi66Gc7Lus7JeQ7IScIOq4sOuhne2VnCDtlZjsnIQg66qo65OIIOyImOyglSDsgqztla3snYQg7J207Jqp7ZW0IOumrOuyoOydtOyKpO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3B1c2guYzoxOQorbXNnaWQgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVzaCBbPOyYteyFmD5dIFs87KCA7J6l7IaMPiBbPOugiO2NvOufsOyKpOuqheyEuD4uLi5dXSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTExCittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICI87YOc6re4PiDsl4bsnbQg7YOc6re4IOykhOyehCIKKworIzogYnVpbHRpbi9wdXNoLmM6MTIxCittc2dpZCAiLS1kZWxldGUgb25seSBhY2NlcHRzIHBsYWluIHRhcmdldCByZWYgbmFtZXMiCittc2dzdHIgIi0tZGVsZXRlIOyYteyFmOydgCDsnbzrsJgg64yA7IOBIOugiO2NvOufsOyKpCDsnbTrpoTrp4wg67Cb7Iq164uI64ukIgorCisjOiBidWlsdGluL3B1c2guYzoxNjUKK21zZ2lkICIiCisiXG4iCisiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksIHNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIgorbXNnc3RyICIiCisiXG4iCisi7Ja064qQIO2VnCDsqr0g7Ji17IWY66eMIOqzhOyGjSDshKDtg53tlZjroKTrqbQsICdnaXQgaGVscCBjb25maWcn7JeQ7IScIHB1c2guZGVmYXVsdOulvCDssLjqs6AiCisi7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKK21zZ3N0ciAiIgorIu2YhOyerCDruIzrnpzsuZjsnZgg7JeF7Iqk7Yq466a8IOu4jOuenOy5mOqwgCDtmITsnqwg67iM656c7LmY7J2YIOydtOumhOqzvFxuIgorIuqwmeyngCDslYrsirXri4jri6QuIOumrOuqqO2KuOydmCDsl4XsiqTtirjrprwg67iM656c7LmY66GcIO2RuOyLnO2VmOugpOuptFxuIgorIuuLpOydjOqzvCDqsJnsnbQg7ZWY7Iut7Iuc7JikLlxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisi66as66qo7Yq47J2YIOqwmeydgCDsnbTrpoTsnLzroZwg7ZG47Iuc7ZWY66Ck66m0IOuLpOydjOqzvCDqsJnsnbQg7ZWY7Iut7Iuc7JikLlxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyAlc1xuIgorIiVzIgorCisjOiBidWlsdGluL3B1c2guYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisic3RhdGUgbm93LCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgorbXNnc3RyICIiCisi7ZiE7J6sIOyWtOuWpCDruIzrnpzsuZgg7JyE7JeQ64+EIOyeiOyngCDslYrsirXri4jri6QuXG4iCisi7KeA6riIIO2YhOyerCAoSEVBRCDrtoTrpqwpIOyDge2DnOq5jOyngOydmCDsu6TrsIsg64K07Jet7J2EIO2RuOyLnO2VmOugpOuptFxuIgorIuuLpOydjOqzvCDqsJnsnbQg7ZWY7Iut7Iuc7JikLlxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorIu2YhOyerCDruIzrnpzsuZggJXPsl5Ag7JeF7Iqk7Yq466a8IOu4jOuenOy5mOqwgCDsl4bsirXri4jri6QuXG4iCisi7ZiE7J6sIOu4jOuenOy5mOulvCDtkbjsi5ztlZjqs6Ag7ZW064u5IOumrOuqqO2KuOulvCDsl4XsiqTtirjrprzsnLzroZwg7KeA7KCV7ZWY66Ck66m0XG4iCisi64uk7J2M6rO8IOqwmeydtCDtlZjsi63si5zsmKQuXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAi7ZiE7J6sIOu4jOuenOy5mCAgJXPsl5Ag7Jes65+sIOyXheyKpO2KuOumvCDruIzrnpzsuZjqsIAg7J6I7Iq164uI64ukLiDtkbjsi5zrpbwg6rGw7KCI7ZWp64uI64ukLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIHB1c2hpbmcgdG8gcmVtb3RlICclcycsIHdoaWNoIGlzIG5vdCB0aGUgdXBzdHJlYW0gb2ZcbiIKKyJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycsIHdpdGhvdXQgdGVsbGluZyBtZSB3aGF0IHRvIHB1c2hcbiIKKyJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iCittc2dzdHIgIiIKKyInJXMnIOumrOuqqO2KuOuhnCDtkbjsi5ztlZjripQg7KSR7J6F64uI64ukLiDtlZjsp4Drp4wg7J20IOumrOuqqO2KuOuKlCDtmITsnqxcbiIKKyInJXMnIOu4jOuenOy5mOydmCDsl4XsiqTtirjrprzsnbQg7JWE64uZ64uI64ukLiDslrTrlqQg66as66qo7Yq4IOu4jOuenOy5mOyXkCDrrLTsl4fsnYRcbiIKKyLtkbjsi5ztlaDsp4Ag7ISk7KCV7ZWY7KeAIOyViuyVmOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI2NworbXNnaWQgIiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisi7ZG47Iuc7ZWgIOugiO2NvOufsOyKpOuqheyEuOulvCDsp4DsoJXtlZjsp4Ag7JWK7JWY6rOgLCBwdXNoLmRlZmF1bHQg6rCS7J20ICdub3RoaW5nJ+yeheuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3NAorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gSW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLlxuIgorIidnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIu2YhOyerCDruIzrnpzsuZjsnZgg64Gd7J20IOumrOuqqO2KuCDruIzrnpzsuZjrs7Tri6Qg65Kk7JeQIOyeiOycvOuvgOuhnCDsl4XrjbDsnbTtirjqsIBcbiIKKyLqsbDrtoDrkJjsl4jsirXri4jri6QuIO2RuOyLnO2VmOq4sCDsoITsl5AgKCdnaXQgcHVsbCAuLi4nIOuTsSDrqoXroLnsnLzroZwpIOumrOuqqO2KuFxuIgorIuuzgOqyvSDsgqztla3snYQg7Y+s7ZWo7ZWY7Iut7Iuc7JikLlxuIgorIuyekOyEuO2VnCDsoJXrs7TripQgJ2dpdCBwdXNoIC0taGVscCfsnZggXCJOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIOu2gOu2hOydhFxuIgorIuywuOqzoO2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4MAorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisiY291bnRlcnBhcnQuIENoZWNrIG91dCB0aGlzIGJyYW5jaCBhbmQgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIu2YhOyerCDruIzrnpzsuZjsnZgg64Gd7J20IOumrOuqqO2KuCDruIzrnpzsuZjrs7Tri6Qg65Kk7JeQIOyeiOycvOuvgOuhnCDsl4XrjbDsnbTtirjqsIBcbiIKKyLqsbDrtoDrkJjsl4jsirXri4jri6QuIOydtCDruIzrnpzsuZjrpbwg7LK07YGs7JWE7JuD7ZWY6rOgIO2RuOyLnO2VmOq4sCDsoITsl5BcbiIKKyIoJ2dpdCBwdWxsIC4uLicg65OxIOuqheugueycvOuhnCkg66as66qo7Yq4IOuzgOqyvSDsgqztla3snYQg7Y+s7ZWo7ZWY7Iut7Iuc7JikLlxuIgorIuyekOyEuO2VnCDsoJXrs7TripQgJ2dpdCBwdXNoIC0taGVscCfsnZggXCJOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIOu2gOu2hOydhFxuIgorIuywuOqzoO2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4NgorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgcmVtb3RlIGNvbnRhaW5zIHdvcmsgdGhhdCB5b3UgZG9cbiIKKyJub3QgaGF2ZSBsb2NhbGx5LiBUaGlzIGlzIHVzdWFsbHkgY2F1c2VkIGJ5IGFub3RoZXIgcmVwb3NpdG9yeSBwdXNoaW5nXG4iCisidG8gdGhlIHNhbWUgcmVmLiBZb3UgbWF5IHdhbnQgdG8gZmlyc3QgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuLCAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLrpqzrqqjtirjsl5Ag66Gc7Lus7JeQIOyXhuuKlCDsgqztla3snbQg65Ok7Ja0IOyeiOycvOuvgOuhnCDsl4XrjbDsnbTtirjqsIBcbiIKKyLqsbDrtoDrkJjsl4jsirXri4jri6QuIOydtCDsg4HtmansnYAg67O07Ya1IOuYkCDri6Trpbgg7KCA7J6l7IaM7JeQ7IScIOqwmeydgFxuIgorIuyggOyepeyGjOuhnCDtkbjsi5ztlaAg65WMIOuwnOyDne2VqeuLiOuLpC4gIO2RuOyLnO2VmOq4sCDsoITsl5BcbiIKKyIoJ2dpdCBwdWxsIC4uLicg65OxIOuqheugueycvOuhnCkg66as66qo7Yq4IOuzgOqyvSDsgqztla3snYQg66i87KCAXG4iCisi7Y+s7ZWo7ZW07JW8IO2VqeuLiOuLpC5cbiIKKyLsnpDshLjtlZwg7KCV67O064qUICdnaXQgcHVzaCAtLWhlbHAn7J2YIFwiTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyDrtoDrtoTsnYRcbiIKKyLssLjqs6DtlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL3B1c2guYzoyOTMKK21zZ2lkICJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGFnIGFscmVhZHkgZXhpc3RzIGluIHRoZSByZW1vdGUuIgorbXNnc3RyICLrpqzrqqjtirjsl5Ag7YOc6re46rCAIOydtOuvuCDsnojquLAg65WM66y47JeQIOyXheuNsOydtO2KuOqwgCDqsbDrtoDrkJjsl4jsirXri4jri6QuIgorCisjOiBidWlsdGluL3B1c2guYzoyOTYKK21zZ2lkICIiCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIictLWZvcmNlJyDsmLXshZjsnbQg7JeG7J20IOy7pOuwi+ydtCDslYTri4wg7Jik67iM7KCd7Yq466W8IOqwgOumrO2CpOuKlCDrpqzrqqjtirhcbiIKKyLroIjtjbzrn7DsiqTrpbwg7JeF642w7J207Yq47ZWY6rGw64KYLCDsu6TrsIvsnbQg7JWE64uMIOyYpOu4jOygne2KuOulvCDqsIDrpqztgqTrj4TroZ1cbiIKKyLsl4XrjbDsnbTtirjtlaAg7IiYIOyXhuyKteuLiOuLpC5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgdG8gJXNcbiIKK21zZ3N0ciAi64uk7J2M7JeQIO2RuOyLnDogJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICLroIjtjbzrn7DsiqTrpbwgJyVzJ+yXkCDtkbjsi5ztlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL3B1c2guYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAi7J6Y66q765CcIOyggOyepeyGjCAnJXMnIgorCisjOiBidWlsdGluL3B1c2guYzozOTYKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSAiCisicmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAiIgorIu2RuOyLnCDrjIDsg4HsnYQg7ISk7KCV7ZWY7KeAIOyViuyVmOyKteuLiOuLpC5cbiIKKyLrqoXroLntlonsl5DshJwgVVJM7J2EIOyngOygle2VmOqxsOuCmCDri6TsnYzsnYQg7IKs7Jqp7ZW0IOumrOuqqO2KuCDsoIDsnqXshozrpbwg7ISk7KCV7ZWY7Iut7Iuc7JikXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDzsnbTrpoQ+IDxVUkw+XG4iCisiXG4iCisi6re466as6rOgIOydtCDrpqzrqqjtirgg7J2066aE7J2EIOyCrOyaqe2VtCDtkbjsi5ztlZjsi63si5zsmKRcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MQorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgIuyggOyepeyGjCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY0Cittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAi66qo65OgIOugiO2NvOufsOyKpCDtkbjsi5ztlZjquLAiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MyBidWlsdGluL3NlbmQtcGFjay5jOjE2NgorbXNnaWQgIm1pcnJvciBhbGwgcmVmcyIKK21zZ3N0ciAi66qo65OgIOugiO2NvOufsOyKpCDrr7jrn6wiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NQorbXNnaWQgImRlbGV0ZSByZWZzIgorbXNnc3RyICLroIjtjbzrn7DsiqQg7IKt7KCcIgorCisjOiBidWlsdGluL3B1c2guYzo1NTYKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgIu2DnOq3uCDtkbjsi5ztlZjquLAgKC0tYWxsIOuYkOuKlCAtLW1pcnJvciDsmLXshZjqs7wg6rCZ7J20IOyTuCDsiJgg7JeG7J2MKSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU5IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY3Cittc2dpZCAiZm9yY2UgdXBkYXRlcyIKK21zZ3N0ciAi6rCV7KCc66GcIOyXheuNsOydtO2KuCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYxIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgxCittc2dpZCAicmVmbmFtZT46PGV4cGVjdCIKK21zZ3N0ciAi66CI7Y2865+w7Iqk7J2066aEPjo87JiI7IOBIgorCisjOiBidWlsdGluL3B1c2guYzo1NjIgYnVpbHRpbi9zZW5kLXBhY2suYzoxODIKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAi66CI7Y2865+w7Iqk7J2YIOqzvOqxsCDqsJLsnbQg7J20IOqwkuydtOyWtOyVvCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NQorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIHB1c2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAi7J6s6reA7KCBIO2VmOychCDrqqjrk4gg7ZG47IucIOuwqeyLneydhCDshKTsoJXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NyBidWlsdGluL3NlbmQtcGFjay5jOjE3NQorbXNnaWQgInVzZSB0aGluIHBhY2siCittc2dzdHIgIuyWh+ydgCDrrLbsnYzsnYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL3B1c2guYzo1NjggYnVpbHRpbi9wdXNoLmM6NTY5IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYxCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgInJlY2VpdmUgcGFjayBwcm9ncmFtIgorbXNnc3RyICJyZWNlaXZlIHBhY2sg7ZSE66Gc6re4656oIgorCisjOiBidWlsdGluL3B1c2guYzo1NzAKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL3N0YXR1cyIKK21zZ3N0ciAiZ2l0IHB1bGwvc3RhdHVz7JeQIOuMgO2VnCDsl4XsiqTtirjrprzsnYQg7ISk7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL3B1c2guYzo1NzMKK21zZ2lkICJwcnVuZSBsb2NhbGx5IHJlbW92ZWQgcmVmcyIKK21zZ3N0ciAi66Gc7Lus7JeQ7IScIOygnOqxsO2VnCDroIjtjbzrn7DsiqTrpbwg7J6Y652864OF64uI64ukIgorCisjOiBidWlsdGluL3B1c2guYzo1NzUKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAi7ZG47IucIOyghCDtm4Ttgazrpbwg6rG064SI65yB64uI64ukIgorCisjOiBidWlsdGluL3B1c2guYzo1NzYKK21zZ2lkICJwdXNoIG1pc3NpbmcgYnV0IHJlbGV2YW50IHRhZ3MiCittc2dzdHIgIuu5oOyhjOyngOunjCDqtIDroKjrkJwg7YOc6re466W8IO2RuOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTc5IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY5Cittc2dpZCAiR1BHIHNpZ24gdGhlIHB1c2giCittc2dzdHIgIu2RuOyLnOyXkCBHUEcg7ISc66qFIgorCisjOiBidWlsdGluL3B1c2guYzo1ODEgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzYKK21zZ2lkICJyZXF1ZXN0IGF0b21pYyB0cmFuc2FjdGlvbiBvbiByZW1vdGUgc2lkZSIKK21zZ3N0ciAi66as66qo7Yq4IOyqveyXkCDsm5DsnpAg7Yq4656c7J6t7IWY7J2EIOyalOyyre2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTk5Cittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIi0tZGVsZXRlIOyYteyFmOydgCAtLWFsbCwgLS1taXJyb3IsIC0tdGFncyDsmLXshZjqs7wg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9wdXNoLmM6NjAxCittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIi0tZGVsZXRlIOyYteyFmOydgCDroIjtjbzrn7DsiqQg7JeG7J20IOyVnuuSpOqwgCDrp57sp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3B1c2guYzo2MDQKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIOuwjyAtLXRhZ3Mg7Ji17IWY7J2AIO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYwNgorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tYWxsIOyYteyFmOydgCDroIjtjbzrn7DsiqTrqoXshLjsmYAg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3B1c2guYzo2MTAKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbWlycm9yIOuwjyAtLXRhZ3Mg7Ji17IWY7J2AIO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMgorbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tbWlycm9yIOyYteyFmOydgCDroIjtjbzrn7DsiqTrqoXshLjsmYAg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3B1c2guYzo2MTUKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwg67CPIC0tbWlycm9yIOyYteyFmOydgCDtmLjtmZjrkJjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3B1c2guYzo2MzQKK21zZ2lkICJwdXNoIG9wdGlvbnMgbXVzdCBub3QgaGF2ZSBuZXcgbGluZSBjaGFyYWN0ZXJzIgorbXNnc3RyICLtkbjsi5wg7Ji17IWY7JeQ64qUIOykhOuwlOq/iCDrrLjsnpDqsIAg65Ok7Ja06rCIIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6NDAKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD087KCR65GQ7Ja0PikgIgorIlstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLSIKKyJpbmRleC1vdXRwdXQ9PO2MjOydvD5dICgtLWVtcHR5IHwgPO2KuOumrC3rlLDsnIQ+IFs87Yq466asLeuUsOychDI+IFs87Yq466asLeuUsOychDM+XV0pIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMAorbXNnaWQgIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iCittc2dzdHIgIuqysOqzvCDsnbjrjbHsiqTrpbwgPO2MjOydvD7sl5Ag7JSB64uI64ukIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICLsnbjrjbHsiqTrpbwg67mE7Jqw6riw66eMIO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjUKK21zZ2lkICJNZXJnaW5nIgorbXNnc3RyICLrs5HtlantlZjquLAiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI3Cittc2dpZCAicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIKK21zZ3N0ciAi7J297J2AIOuLpOydjCDrs5HtlansnYQg7IiY7ZaJ7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyOQorbXNnaWQgIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIKK21zZ3N0ciAi7YyM7J28IOuLqOychCDrs5HtlansnbQg7ZWE7JqU7ZWY7KeAIOyViuycvOuptCAzLeuwqe2WpSDrs5HtlansnYQg7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMQorbXNnaWQgIjMtd2F5IG1lcmdlIGluIHByZXNlbmNlIG9mIGFkZHMgYW5kIHJlbW92ZXMiCittc2dzdHIgIuy2lOqwgOyZgCDsoJzqsbDqsIAg7J6I7J2EIOuVjCAzLeuwqe2WpSDrs5HtlansnYQg7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgIi1t6rO8IOuPmeydvO2VmOyngOunjCwg67OR7ZWp65CY7KeAIOyViuydgCDtla3rqqnsnYQg67KE66a964uI64ukIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNAorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiPO2VmOychOuUlOugie2EsOumrD4vIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICLtirjrpqzrpbwgPO2VmOychOuUlOugie2EsOumrD4vIOyVhOuemCDsnbjrjbHsiqTroZwg7J297Iq164uI64ukIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOAorbXNnaWQgInVwZGF0ZSB3b3JraW5nIHRyZWUgd2l0aCBtZXJnZSByZXN1bHQiCittc2dzdHIgIuyekeyXhSDtj7TrjZTrpbwg67OR7ZWpIOqysOqzvOuhnCDsl4XrjbDsnbTtirjtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQwCittc2dpZCAiZ2l0aWdub3JlIgorbXNnc3RyICJnaXRpZ25vcmUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQxCittc2dpZCAiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIgorbXNnc3RyICLrrLTsi5ztlZjripQg7YyM7J287J2EIOuNruyWtOyTsOuPhOuhnSDrqoXsi5zsoIHsnLzroZwg7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NAorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAi67OR7ZWpIO2bhOyXkCDsnpHsl4Ug7Y+0642U66W8IO2ZleyduO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ1Cittc2dpZCAiZG9uJ3QgdXBkYXRlIHRoZSBpbmRleCBvciB0aGUgd29yayB0cmVlIgorbXNnc3RyICLsnbjrjbHsiqTrgpgg7J6R7JeFIO2PtOuNlOulvCDsl4XrjbDsnbTtirjtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NworbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAi65Oc66y4IOyytO2BrOyVhOybgyDtlYTthLAg7KCB7Jqp7J2EIOqxtOuEiOucgeuLiOuLpCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDkKK21zZ2lkICJkZWJ1ZyB1bnBhY2stdHJlZXMiCittc2dzdHIgInVucGFjay10cmVlcyDrlJTrsoTquYUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1oZWxwZXIuYzo4Cittc2dpZCAiZ2l0IHJlYmFzZS0taGVscGVyIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmViYXNlLS1oZWxwZXIgWzzsmLXshZg+XSIKKworIzogYnVpbHRpbi9yZWJhc2UtLWhlbHBlci5jOjI0Cittc2dpZCAia2VlcCBlbXB0eSBjb21taXRzIgorbXNnc3RyICLruYgg7Luk67CL7J2EIOycoOyngO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZWJhc2UtLWhlbHBlci5jOjI2IGJ1aWx0aW4vcmV2ZXJ0LmM6MTIzCittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICLruYgg66mU7Iuc7KeA66GcIOy7pOuwi+ydhCDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1oZWxwZXIuYzoyNworbXNnaWQgInJlYmFzZSBtZXJnZSBjb21taXRzIgorbXNnc3RyICLrs5Htlakg7Luk67CL7J2EIOumrOuyoOydtOyKpO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZWJhc2UtLWhlbHBlci5jOjI5Cittc2dpZCAia2VlcCBvcmlnaW5hbCBicmFuY2ggcG9pbnRzIG9mIGNvdXNpbnMiCittc2dzdHIgIuq0gOugqOuQnCDrs7jrnpgg67iM656c7LmYIOychOy5mOulvCDsnKDsp4Dtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1oZWxwZXIuYzozMAorbXNnaWQgImNvbnRpbnVlIHJlYmFzZSIKK21zZ3N0ciAi66as67Kg7J207IqkIOqzhOyGjSIKKworIzogYnVpbHRpbi9yZWJhc2UtLWhlbHBlci5jOjMyCittc2dpZCAiYWJvcnQgcmViYXNlIgorbXNnc3RyICLrpqzrsqDsnbTsiqTrpbwg7KSR7KeA7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlYmFzZS0taGVscGVyLmM6MzUKK21zZ2lkICJtYWtlIHJlYmFzZSBzY3JpcHQiCittc2dzdHIgIuumrOuyoOydtOyKpCDsiqTtgazrpr3tirjrpbwg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL3JlYmFzZS0taGVscGVyLmM6MzcKK21zZ2lkICJzaG9ydGVuIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAi7ZWgIOydvCDrqqnroZ3snZgg7Luk67CLIOyVhOydtOuUlOulvCDspITsnoXri4jri6QuIgorCisjOiBidWlsdGluL3JlYmFzZS0taGVscGVyLmM6MzkKK21zZ2lkICJleHBhbmQgY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICLtlaAg7J28IOuqqeuhneydmCDsu6TrsIsg7JWE7J2065SU66W8IOuKmOyeheuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1oZWxwZXIuYzo0MQorbXNnaWQgImNoZWNrIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgIu2VoCDsnbwg66qp66Gd7J2EIO2ZleyduO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZWJhc2UtLWhlbHBlci5jOjQzCittc2dpZCAic2tpcCB1bm5lY2Vzc2FyeSBwaWNrcyIKK21zZ3N0ciAi67aI7ZWE7JqU7ZWcIOu5vOyYpOq4sOulvCDqsbTrhIjrnIHri4jri6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1oZWxwZXIuYzo0NQorbXNnaWQgInJlYXJyYW5nZSBmaXh1cC9zcXVhc2ggbGluZXMiCittc2dzdHIgImZpeHVwL3NxdWFzaCDspIQg7J6s6rWs7ISxIgorCisjIEVuZ2xpc2ggVGV4dOyXkOyEnOuKlCBpbnNlcnTrpbwg7IKs7Jqp7ZWY7KeA66eMLCDshozsiqTsvZTrk5zsl5DripQgYWRk66GcIO2RnO2YhOuQmOyWtCDsnojsirXri4jri6QuCisjOiBidWlsdGluL3JlYmFzZS0taGVscGVyLmM6NDcKK21zZ2lkICJpbnNlcnQgZXhlYyBjb21tYW5kcyBpbiB0b2RvIGxpc3QiCittc2dzdHIgIu2VoCDsnbwg66qp66Gd7JeQIOyLpO2WiSDrqoXroLnsnYQg7LaU6rCA7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlYmFzZS0taGVscGVyLmM6NjgKK21zZ2lkICItLVtuby1dcmViYXNlLWNvdXNpbnMgaGFzIG5vIGVmZmVjdCB3aXRob3V0IC0tcmViYXNlLW1lcmdlcyIKK21zZ3N0ciAiIgorIi0tW25vLV1yZWJhc2UtY291c2lucyDsmLXshZjsnYAgLS1yZWJhc2UtbWVyZ2VzIOyYteyFmCDsl4bsnbTripQg7JWE66y0IO2aqOqzvOqwgCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MzEKK21zZ2lkICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKK21zZ3N0ciAiZ2l0IHJlY2VpdmUtcGFjayA8Z2l0LWRpcj4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODQyCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnlcbiIKKyJpcyBkZW5pZWQsIGJlY2F1c2UgaXQgd2lsbCBtYWtlIHRoZSBpbmRleCBhbmQgd29yayB0cmVlIGluY29uc2lzdGVudFxuIgorIndpdGggd2hhdCB5b3UgcHVzaGVkLCBhbmQgd2lsbCByZXF1aXJlICdnaXQgcmVzZXQgLS1oYXJkJyB0byBtYXRjaFxuIgorInRoZSB3b3JrIHRyZWUgdG8gSEVBRC5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCB0aGUgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVcbiIKKyJ0byAnaWdub3JlJyBvciAnd2FybicgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IHB1c2hpbmcgaW50b1xuIgorIml0cyBjdXJyZW50IGJyYW5jaDsgaG93ZXZlciwgdGhpcyBpcyBub3QgcmVjb21tZW5kZWQgdW5sZXNzIHlvdVxuIgorImFycmFuZ2VkIHRvIHVwZGF0ZSBpdHMgd29yayB0cmVlIHRvIG1hdGNoIHdoYXQgeW91IHB1c2hlZCBpbiBzb21lXG4iCisib3RoZXIgd2F5LlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2aW91ciwgc2V0XG4iCisiJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisi6riw67O46rCS7Jy866GcIOqwhOuete2VnCDsoIDsnqXshozqsIAg7JWE64uMIO2YhOyerCDruIzrnpzsuZjsnZgg7JeF642w7J207Yq464qUIOqxsOu2gOuQqeuLiOuLpC5cbiIKKyLsl4XrjbDsnbTtirjtlZjrqbQg7J24642x7Iqk7JmAIOyekeyXhSDtirjrpqzqsIAg7ZG47Iuc7ZWcIOuCtOyaqeqzvCDsnbzsuZjtlZjsp4Ag7JWK6rKMIOuQmOuvgOuhnCxcbiIKKyInZ2l0IHJlc2V0IC0taGFyZCfroZwg7J6R7JeFIO2PtOuNlOulvCBIRUFE7JeQIOunnuy2sOyVvCDtlanri4jri6QuXG4iCisiXG4iCisi66as66qo7Yq4IOyggOyepeyGjOyXkOyEnCAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcg7ISk7KCVIOuzgOyImOulvCAnaWdub3JlJ+uCmFxuIgorIid3YXJuJ+ycvOuhnCDshKTsoJXtlZjrqbQg7ZiE7J6sIOu4jOuenOy5mOuhnCDtkbjsi5ztlaAg7IiYIOyeiOyKteuLiOuLpC4g7ZWY7KeA66eMIOyekeyXhVxuIgorIu2PtOuNlOydmCDrgrTsmqnsnYQg7ZG47Iuc7ZWgIOuCtOyaqeyXkCDrp57stpTripQg6rKMIOyVhOuLiOudvOuptCDstpTsspztlZjsp4Ag7JWK7Iq164uI64ukLlxuIgorIlxuIgorIuydtCDrqZTsi5zsp4Drpbwg67O07KeAIOyViuqzoCDquLDrs7gg64+Z7J6R7J2EIOqzhOyGjSDtlZjroKTrqbQsXG4iCisiJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIOyEpOyglSDrs4DsiJjrpbwgJ3JlZnVzZSfroZwg7ISk7KCV7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4NjIKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGRlbmllZCwgYmVjYXVzZSB0aGUgbmV4dFxuIgorIidnaXQgY2xvbmUnIHdvbid0IHJlc3VsdCBpbiBhbnkgZmlsZSBjaGVja2VkIG91dCwgY2F1c2luZyBjb25mdXNpb24uXG4iCisiXG4iCisiWW91IGNhbiBzZXQgJ3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG9cbiIKKyInd2Fybicgb3IgJ2lnbm9yZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IGRlbGV0aW5nIHRoZVxuIgorImN1cnJlbnQgYnJhbmNoLCB3aXRoIG9yIHdpdGhvdXQgYSB3YXJuaW5nIG1lc3NhZ2UuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorIuq4sOuzuOqwkuycvOuhnCwg7ZiE7J6sIOu4jOuenOy5mOydmCDsgq3soJzripQg6rGw67aA65Cp64uI64ukLiDri6TsnYzsl5AgJ2dpdCBjbG9uZSftlaAg65WMXG4iCisi7JWE66y0IO2MjOydvOuPhCDssrTtgazslYTsm4PtlZjsp4Ag7JWK6rKMIOuQmOuvgOuhnCDtmLzrj5nsnYQg7J287Jy87YKk6riwIOuVjOusuOyeheuLiOuLpC5cbiIKKyJcbiIKKyIncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcg7ISk7KCVIOuzgOyImOulvCAnaWdub3JlJ+uCmCAnd2FybifsnLzroZwg7ISk7KCV7ZWY66m0XG4iCisiKOqyveqzoCDrqZTsi5zsp4Drpbwg7Y+s7ZWo7ZWY6rGw64KYIO2PrO2VqO2VmOyngCDslYrqs6ApIO2YhOyerCDruIzrnpzsuZjrpbwg7IKt7KCc7ZWgIOyImFxuIgorIuyeiOyKteuLiOuLpC5cbiIKKyJcbiIKKyLsnbQg66mU7Iuc7KeA66W8IOuztOyngCDslYrsnLzroKTrqbQsIOydtCDshKTsoJUg67OA7IiY66W8ICdyZWZ1c2Un66GcIOyEpOygle2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTkzNQorbXNnaWQgInF1aWV0IgorbXNnc3RyICLstpzroKUg7JWK6riwIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NDkKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAi65SU66CJ7YSw66as66W8IOyngOygle2VtOyVvCDtlanri4jri6QuIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjUzMiBidWlsdGluL3JlZmxvZy5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJyVzJ+ydgCjripQpIOyYrOuwlOuluCDsi5zqsIEg6rCS7J20IOyVhOuLmeuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNAorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1Cittc2dpZCAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPOu4jOuenOy5mD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPOydtOumhD4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYgYnVpbHRpbi9yZW1vdGUuYzozNgorbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSA87Jib7J2066aEPiA87IOI7J2066aEPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNyBidWlsdGluL3JlbW90ZS5jOjQxCittc2dpZCAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbW92ZSA87J2066aEPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOCBidWlsdGluL3JlbW90ZS5jOjQ2Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA87J2066aEPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPOu4jOuenOy5mD4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPOydtOumhD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjAKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPOydtOumhD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjEKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDzqt7jro7k+IHwgPOumrOuqqO2KuD4pLi4uXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMgorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDzsnbTrpoQ+IDzruIzrnpzsuZg+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzIGJ1aWx0aW4vcmVtb3RlLmM6NzIKK21zZ2lkICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDzsnbTrpoQ+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0IGJ1aWx0aW4vcmVtb3RlLmM6NzcKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+IFs8b2xkdXJsPl0iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA87J2066aEPiA87IOIdXJsPiBbPOyYm3VybD5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI1IGJ1aWx0aW4vcmVtb3RlLmM6NzgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPOydtOumhD4gPOyDiHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjYgYnVpbHRpbi9yZW1vdGUuYzo3OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA87J2066aEPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozMQorbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBhZGQgWzzsmLXshZg+XSA87J2066aEPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1MQorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPOydtOumhD4gPOu4jOuenOy5mD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTIKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDzsnbTrpoQ+IDzruIzrnpzsuZg+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU3Cittc2dpZCAiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzaG93IFs87Ji17IWYPl0gPOydtOumhD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjIKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbPOyYteyFmD5dIDzsnbTrpoQ+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY3Cittc2dpZCAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcHRpb25zPl0gWzxncm91cD4gfCA8cmVtb3RlPl0uLi4iCittc2dzdHIgImdpdCByZW1vdGUgdXBkYXRlIFs87Ji17IWYPl0gWzzqt7jro7k+IHwgPOumrOuqqO2KuD5dLi4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICIlcyDsl4XrjbDsnbTtirgg7KSRIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOAorbXNnaWQgIiIKKyItLW1pcnJvciBpcyBkYW5nZXJvdXMgYW5kIGRlcHJlY2F0ZWQ7IHBsZWFzZVxuIgorIlx0IHVzZSAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoIGluc3RlYWQiCittc2dzdHIgIiIKKyItLW1pcnJvcuuKlCDsnITtl5jtlZjrr4DroZwg7IKs7Jqp7J2EIOq2jO2VmOyngCDslYrsirXri4jri6QuIOuMgOyLoOyXkFxuIgorIlx0IC0tbWlycm9yPWZldGNoIOuYkOuKlCAtLW1pcnJvcj1wdXNo66W8IOyCrOyaqe2VmOyLreyLnOyYpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCAtLW1pcnJvciDsmLXshZgg7J247J6QOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjEKK21zZ2lkICJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIgorbXNnc3RyICLrpqzrqqjtirgg67iM656c7LmY66W8IOqwgOyguOyYteuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjMKK21zZ2lkICJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIgorbXNnc3RyICLqsIDsoLjsmKwg65WMIOuqqOuToCDtg5zqt7jsmYAg6rSA66CoIOyYpOu4jOygne2KuOulvCDqsIDsoLjsmLXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2Cittc2dpZCAib3IgZG8gbm90IGZldGNoIGFueSB0YWcgYXQgYWxsICgtLW5vLXRhZ3MpIgorbXNnc3RyICLslYTri4jrqbQg7JWE66y0IO2DnOq3uOuPhCDqsIDsoLjsmKTsp4Ag7JWK7Iq164uI64ukICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2OAorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgIuy2lOygge2VoCDruIzrnpzsuZgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY5Cittc2dpZCAibWFzdGVyIGJyYW5jaCIKK21zZ3N0ciAi66eI7Iqk7YSwIOu4jOuenOy5mCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzAKK21zZ2lkICJwdXNofGZldGNoIgorbXNnc3RyICJwdXNofGZldGNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MQorbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICLrpqzrqqjtirjrpbwg7ZG47IucIOuYkOuKlCDqsIDsoLjsmKwg65WMIOyCrOyaqe2VoCDrr7jrn6zroZwg7ISk7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4MworbXNnaWQgInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiCittc2dzdHIgIi0tbWlycm9yIOyYteyFmOqzvCDqsJnsnbQg66eI7Iqk7YSwIOu4jOuenOy5mOulvCDsp4DsoJXtlZjrqbQg7JWe65Kk6rCAIOunnuyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg1Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAi66eI7Iqk7YSwIOu4jOuenOy5mOulvCDsp4DsoJXsnYAgZmV0Y2gg66+465+s7JeQ7ISc66eMIOyVnuuSpOqwgCDrp57sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkyIGJ1aWx0aW4vcmVtb3RlLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIiVzIOumrOuqqO2KuOqwgCDsnbTrr7gg7J6I7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTYgYnVpbHRpbi9yZW1vdGUuYzo2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIKK21zZ3N0ciAiJyVzJ+ydgCjripQpIOyYrOuwlOuluCDrpqzrqqjtirgg7J2066aE7J20IOyVhOuLmeuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICLrp4jsiqTthLAgJyVzJ+ydhCjrpbwpIOyEpOygle2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjM0MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIKK21zZ3N0ciAiJXMg66CI7Y2865+w7Iqk66qF7IS47JeQIOuMgO2VnCDqsIDsoLjsmKTquLAg66e17J2EIOyWu+ydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0MSBidWlsdGluL3JlbW90ZS5jOjQ0OQorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIijsnbzsuZgpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ1MworbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICIo7IKt7KCcKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MjcgYnVpbHRpbi9yZW1vdGUuYzo3NjIgYnVpbHRpbi9yZW1vdGUuYzo4NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICVzIgorbXNnc3RyICLqt7jrn7Ag66as66qo7Yq46rCAIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICLshKTsoJUg7IS57IWY7J2EICclcyfsl5DshJwgJyVzJyjsnLwp66GcIOuwlOq/gCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlZnNwZWNcbiIKKyJcdCVzXG4iCisiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iCittc2dzdHIgIiIKKyLquLDrs7jqsJLsnbQg7JWE64uMIOqwgOyguOyYpOq4sCDroIjtjbzrn7DsiqTrqoXshLjrpbwg7JeF642w7J207Yq47ZWY7KeAIOyViuyKteuLiOuLpFxuIgorIlx0JXNcbiIKKyJcdO2VhOyalO2VmOuptCDshKTsoJXsnYQg7IiY64+Z7Jy866GcIOyXheuNsOydtO2KuO2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICInJXMnIOyCreygnOqwgCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICInJXMnIOunjOuTpOq4sOqwgCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Nzk5Cittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIiIKKyLslYzrprw6IOugiO2NvOufsOyKpC/rpqzrqqjtirgvIOqzhOy4tSDqtazsobAg67CW7JeQIOyeiOuKlCDsnbzrtoAg67iM656c7LmY6rCAIOygnOqxsOuQmOyngCDslYrslZjsirXri4giCisi64ukLlxuIgorIuyCreygnO2VmOugpOuptCDri6TsnYzsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICLshKTsoJUg7IS57IWYICclcyfsnYQo66W8KSDsoJzqsbDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvJXMpIgorbXNnc3RyICIg7IOIIO2VreuqqSAo64uk7J2MIOqwgOyguOyYpOq4sOuKlCByZW1vdGVzLyVzIOyVhOuemCDsoIDsnqXrkKnri4jri6QpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxNworbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIg7LaU7KCB65CoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxOQorbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIg7Jik656Y65CoICjsoJzqsbDtlZjroKTrqbQgJ2dpdCByZW1vdGUgcHJ1bmUn7J2EIOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIxCittc2dpZCAiID8/PyIKK21zZ3N0ciAiID8/PyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICLsnpjrqrvrkJwgYnJhbmNoLiVzLm1lcmdlIOqwki4g7Jes65+sIOqwnCDruIzrnpzsuZjroZwg66as67Kg7J207Iqk7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTcxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAi66as66qo7Yq4ICVzIOychOuhnCDrjIDtmZTsi53snLzroZwg66as67Kg7J207Iqk7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgKHdpdGggbWVyZ2VzKSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAi66as66qo7Yq4ICVzIOychOuhnCDrjIDtmZTsi53snLzroZwgKOuzke2VqSDtj6ztlagpIOumrOuyoOydtOyKpO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAi66as66qo7Yq4ICVzIOychOuhnCDrpqzrsqDsnbTsiqTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiDrs5Htlak6IOumrOuqqO2KuCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICLrs5Htlak6IOumrOuqqO2KuCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS0qcyAgICBhbmQgd2l0aCByZW1vdGUgJXNcbiIKK21zZ3N0ciAiJS0qcyAgICDqt7jrpqzqs6Ag66as66qo7Yq4ICVzXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAyOQorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAi66eM65Ok6riwIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzIKK21zZ2lkICJkZWxldGUiCittc2dzdHIgIuyCreygnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDM2Cittc2dpZCAidXAgdG8gZGF0ZSIKK21zZ3N0ciAi7LWc7IugIOyDge2DnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDM5Cittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAi7KCV67Cp7ZalIOynhO2WiSDqsIDriqUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MgorbXNnaWQgImxvY2FsIG91dCBvZiBkYXRlIgorbXNnc3RyICLroZzsu6zsnbQg65Kk65ao7Ja07KeQIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnPsl5DshJwgJS0qcyjsnLwp66GcIOqwleygnCAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnPsl5DshJwgJS0qcyjsnLwp66GcIO2RuOyLnCAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICVzIgorbXNnc3RyICIgICAgJS0qc+yXkOyEnCAlcyjsnLwp66GcIOqwleygnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnPsl5DshJwgJXMo7Jy8KeuhnCDtkbjsi5wiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyNworbXNnaWQgImRvIG5vdCBxdWVyeSByZW1vdGVzIgorbXNnc3RyICLrpqzrqqjtirjsl5Ag7KeI7J2Y7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqIOumrOuqqO2KuCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmV0Y2ggVVJMOiAlcyIKK21zZ3N0ciAiICDqsIDsoLjsmKTquLAgVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU2IGJ1aWx0aW4vcmVtb3RlLmM6MTE3MiBidWlsdGluL3JlbW90ZS5jOjEzMTEKK21zZ2lkICIobm8gVVJMKSIKK21zZ3N0ciAiKFVSTCDsl4bsnYwpIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uICc6JyBzaG91bGQgYWxpZ24KKyMuIHdpdGggdGhlIG9uZSBpbiAiIEZldGNoIFVSTDogJXMiCisjLiB0cmFuc2xhdGlvbi4KKyMuCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzAgYnVpbHRpbi9yZW1vdGUuYzoxMTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUHVzaCAgVVJMOiAlcyIKK21zZ3N0ciAiICDtkbjsi5wgIFVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NCBidWlsdGluL3JlbW90ZS5jOjExNzYgYnVpbHRpbi9yZW1vdGUuYzoxMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIgIEhFQUQg67iM656c7LmYOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc0Cittc2dpZCAiKG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiKOyniOydmO2VmOyngCDslYrsnYwpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzYKK21zZ2lkICIodW5rbm93bikiCittc2dzdHIgIijslYwg7IiYIOyXhuydjCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIgIEhFQUQg67iM656c7LmYICjrpqzrqqjtirggSEVBROuKlCDslaDrp6TtlZjqs6AsIOuLpOydjCDspJEg7ZWY64KY7J28IOyImCDsnojsirXri4jri6QpOlxuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBSZW1vdGUgYnJhbmNoOiVzIgorbXNnaWRfcGx1cmFsICIgIFJlbW90ZSBicmFuY2hlczolcyIKK21zZ3N0clswXSAiICDrpqzrqqjtirgg67iM656c7LmYOiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTUgYnVpbHRpbi9yZW1vdGUuYzoxMjIxCittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKOyDge2DnOulvCDsp4jsnZjtlZjsp4Ag7JWK7J2MKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjA0Cittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAgJ2dpdCBwdWxsJ+yXkCDsgqzsmqntlaAg66Gc7LusIOu4jOuenOy5mOulvCDshKTsoJU6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTIKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIgIOuhnOy7rCDroIjtjbzrn7DsiqTrpbwgJ2dpdCBwdXNoJ+uhnCDrr7jrn6zrp4HtlaAg7JiI7KCVIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAg66Gc7LusIOugiO2NvOufsOyKpOulvCAnZ2l0IHB1c2gn66GcIOuvuOufrOungSVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM5Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICLroIjtjbzrn7DsiqQv66as66qo7Yq4LzzsnbTrpoQ+L0hFQUQg6rCS7J2EIOumrOuqqO2KuOyXkCDrp57qsowg7ISk7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDEKK21zZ2lkICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorbXNnc3RyICLroIjtjbzrn7DsiqQv66as66qo7Yq4LzzsnbTrpoQ+L0hFQUQg6rCS7J2EIOyCreygnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU2Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAi66as66qo7Yq4IEhFQUTrpbwg6rKw7KCV7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1OAorbXNnaWQgIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6IgorbXNnc3RyICIiCisi66as66qo7Yq4IEhFQUQg67iM656c7LmY6rCAIOyXrOufrOqwnOyeheuLiOuLpC4g64uk7J2MIOykkSDtlZjrgpjrpbwg66qF7Iuc7KCB7Jy866GcIOyngOygle2VmOyLreyLnOyYpDoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICIlc+ydhCjrpbwpIOyCreygnO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAi7Jis67CU66W4IOugiO2NvOufsOyKpOqwgCDslYTri5nri4jri6Q6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICIlc+ydhCjrpbwpIOyEpOygle2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVz7J2YIOyXsOqysOydtCDrgYrslrTsp5Hri4jri6QhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXPsnZgg7Jew6rKw7J20IOuBiuyWtOyhjOyKteuLiOuLpCEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwNworIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICLsnpjrnbzrg4Q6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAiVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFvsnpjrnbzrgrwg7JiI7KCVXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIgKiBb7J6Y652864OEXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzcyCittc2dpZCAicHJ1bmUgcmVtb3RlcyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAi6rCA7KC47JioIO2bhOyXkCDrpqzrqqjtirjrpbwg7J6Y652864OF64uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MzUgYnVpbHRpbi9yZW1vdGUuYzoxNDg5IGJ1aWx0aW4vcmVtb3RlLmM6MTU1NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSAnJXMnIgorbXNnc3RyICLqt7jrn7Ag66as66qo7Yq46rCAIOyXhuyKteuLiOuLpCAoJyVzJykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ1MQorbXNnaWQgImFkZCBicmFuY2giCittc2dzdHIgIuu4jOuenOy5mOulvCDstpTqsIDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ1OAorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgIuumrOuqqO2KuOulvCDsp4DsoJXtlZjsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NzUKK21zZ2lkICJxdWVyeSBwdXNoIFVSTHMgcmF0aGVyIHRoYW4gZmV0Y2ggVVJMcyIKK21zZ3N0ciAi6rCA7KC47Jik6riwIFVSTOydtCDslYTri4jrnbwg7ZG47IucIFVSTOydhCDsp4jsnZjtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3NworbXNnaWQgInJldHVybiBhbGwgVVJMcyIKK21zZ3N0ciAi66qo65OgIFVSTOydhCDrpqzthLTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBVUkxzIGNvbmZpZ3VyZWQgZm9yIHJlbW90ZSAnJXMnIgorbXNnc3RyICInJXMnIOumrOuqqO2KuOyXkCDrjIDtlZwgVVJM7J2EIOyEpOygle2VmOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzMQorbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICLtkbjsi5wgVVJM7J2EIOyngOygle2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTMzCittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAiVVJM7J2EIOy2lOqwgO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM1Cittc2dpZCAiZGVsZXRlIFVSTHMiCittc2dzdHIgIlVSTOydhCDsgq3soJztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU0MgorbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1hZGQgLS1kZWxldGUg7Ji17IWY7J2EIOuRmOuLpCDsk7DrqbQg7JWIIOuQqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2xkIFVSTCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAi7J6Y66q765CcIOyYpOuemOyghCBVUkwg7Yyo7YS0OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAi6re465+wIFVSTOydtCDsl4bsirXri4jri6Q6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OTEKK21zZ2lkICJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiCittc2dzdHIgIu2RuOyLnOyaqeydtCDslYTri4wg66qo65OgIFVSTOydhCDsgq3soJztlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MDcKK21zZ2lkICJiZSB2ZXJib3NlOyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYSBzdWJjb21tYW5kIgorbXNnc3RyICLsnpDshLjtnogg7ZGc7Iuc7ZWp64uI64ukICjtlZjsnIQg66qF66C5IOyVnuyXkCDsmYDslbwg7ZWp64uI64ukKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIO2VmOychCDrqoXroLk6ICVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4Cittc2dpZCAiZ2l0IHJlcGFjayBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHJlcGFjayBbPOyYteyFmD5dIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIzCittc2dpZCAiIgorIkluY3JlbWVudGFsIHJlcGFja3MgYXJlIGluY29tcGF0aWJsZSB3aXRoIGJpdG1hcCBpbmRleGVzLiAgVXNlXG4iCisiLS1uby13cml0ZS1iaXRtYXAtaW5kZXggb3IgZGlzYWJsZSB0aGUgcGFjay53cml0ZWJpdG1hcHMgY29uZmlndXJhdGlvbi4iCittc2dzdHIgIiIKKyLsoJDsp4TsoIHsnbggcmVwYWNr7J2AIOu5hO2KuOuntSDsnbjrjbHsiqTsmYAg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpC5cbiIKKyItLW5vLXdyaXRlLWJpdG1hcC1pbmRleOulvCDsgqzsmqntlZjqsbDrgpggcGFjay53cml0ZWJpdG1hcHMg7ISk7KCV7J2EIOuBhOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgwCittc2dpZCAicGFjayBldmVyeXRoaW5nIGluIGEgc2luZ2xlIHBhY2siCittc2dzdHIgIu2VmOuCmOydmCDrrLbsnYwg7JWI7JeQIOuqqOuRkCDrrLbsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgyCittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAiLWHsmYAg64+Z7J287ZWY6rOgLCDsoJHqt7wg67aI6rCA64qlIOyYpOu4jOygne2KuOulvCDripDsiqjtlZjqsowg67CU6r+J64uI64ukIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4NQorbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAi7Jes67aE7J2YIOustuydjOydhCDsoJzqsbDtlZjqs6AsIGdpdC1wcnVuZS1wYWNrZWTrpbwg7Iuk7ZaJ7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4NworbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJnaXQtcGFjay1vYmplY3Rz7JeQIC0tbm8tcmV1c2UtZGVsdGEg7Ji17IWY7J2EIOuEmOq5geuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODkKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgImdpdC1wYWNrLW9iamVjdHPsl5AgLS1uby1yZXVzZS1vYmplY3Qg7Ji17IWY7J2EIOuEmOq5geuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTEKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgImdpdC11cGRhdGUtc2VydmVyLWluZm/rpbwg7Iuk7ZaJ7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTQKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiZ2l0LXBhY2stb2JqZWN0c+yXkCAtLWxvY2FsIOyYteyFmOydhCDrhJjquYHri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTk2Cittc2dpZCAid3JpdGUgYml0bWFwIGluZGV4IgorbXNnc3RyICLruYTtirjrp7Ug7J24642x7Iqk66W8IOyUgeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTcKK21zZ2lkICJhcHByb3hpZGF0ZSIKK21zZ3N0ciAi64yA65617J2Y7Iuc6rCBIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE5OAorbXNnaWQgIndpdGggLUEsIGRvIG5vdCBsb29zZW4gb2JqZWN0cyBvbGRlciB0aGFuIHRoaXMiCittc2dzdHIgIiIKKyItQeyXkCDstpTqsIDroZwsIOyngOygle2VnCDsi5zqsIHrs7Tri6Qg7Jik656Y65CcIOyYpOu4jOygne2KuOulvCDripDsiqjtlZjqsowg66eM65Ok7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMDAKK21zZ2lkICJ3aXRoIC1hLCByZXBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiLWHsmYAg6rCZ7J20LCDsoJHqt7wg67aI6rCA64qlIOyYpOu4jOygne2KuOulvCDri6Tsi5wg66y27Iq164uI64ukIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIwMgorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAi64247YOAIOyVley2leyXkCDsgqzsmqntlaAg7JyI64+E7JqwIO2BrOq4sCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMDMgYnVpbHRpbi9yZXBhY2suYzoyMDkKK21zZ2lkICJieXRlcyIKK21zZ3N0ciAi67CU7J207Yq47IiYIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIwNAorbXNnaWQgInNhbWUgYXMgdGhlIGFib3ZlLCBidXQgbGltaXQgbWVtb3J5IHNpemUgaW5zdGVhZCBvZiBlbnRyaWVzIGNvdW50IgorbXNnc3RyICLsnITsmYAg64+Z7J287ZWY7KeA66eMLCDtla3rqqkg7IiYIOuMgOyLoCDrqZTrqqjrpqwg7YGs6riw66W8IOygnO2VnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMDYKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgiCittc2dzdHIgIuy1nOuMgCDrjbjtg4Ag6rmK7J2066W8IOygnO2VnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMDgKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMiCittc2dzdHIgIuy1nOuMgCDsiqTroIjrk5wg7IiY66W8IOygnO2VnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMTAKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIKK21zZ3N0ciAi66y27J2MIO2MjOydvOydmCDstZzrjIAg7YGs6riwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIxMgorbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICIua2VlcOycvOuhnCDtkZzsi5zrkJwg66y27J2M7J2YIOyYpOu4jOygne2KuOulvCDri6Tsi5wg66y27Iq164uI64ukIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIxNAorbXNnaWQgImRvIG5vdCByZXBhY2sgdGhpcyBwYWNrIgorbXNnc3RyICLsnbQg66y27J2M7J2EIOuLpOyLnCDrrLbsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIyNAorbXNnaWQgImNhbm5vdCBkZWxldGUgcGFja3MgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgInByZWNpb3VzLW9iamVjdHMg7KCA7J6l7IaM7J2YIOustuydjOydhCDsgq3soJztlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMjgKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC1BIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSDrsI8gLUEg7Ji17IWY7J2AIO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDI1IGJ1aWx0aW4vd29ya3RyZWUuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnJXMnIgorbXNnc3RyICInJXMnIOygnOqxsOyXkCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIDzsmKTruIzsoJ3tirg+IDzrjIDssrTsnbTrpoQ+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMworbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxvYmplY3Q+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA87Jik67iM7KCd7Yq4PiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDzsu6TrsIs+IFs87IOB7JyEPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjYKK21zZ2lkICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgLWQgPOyYpOu4jOygne2KuD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PO2YleyLnT5dIFstbCBbPO2MqO2EtD5dXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzcxIGJ1aWx0aW4vcmVwbGFjZS5jOjQxNSBidWlsdGluL3JlcGxhY2UuYzo0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcyciCittc2dzdHIgIuyYrOuwlOuluCDsmKTruIzsoJ3tirgg7J2066aE7J20IOyVhOuLmeuLiOuLpDogJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAi7Luk67CLICclcyfsl5Ag7J6Y66q765CcIOuzke2Vqe2DnOq3uCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAi7Luk67CLICclcyfsl5Ag7J6Y66q765CcIO2YleyLneydmCDrs5Htlantg5zqt7giCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICIiCisi67O4656YIOy7pOuwiyAnJXMn7JeQIOuyhOugpOynhCDrs5Htlantg5zqt7ggJyVzJ+ydtCjqsIApIOuTpOyWtCDsnojsirXri4jri6QuIC0tZ3JhZnQg64yA7IugIC0tIgorImVkaXQg7Ji17IWY7J2EIOyCrOyaqe2VmOyLreyLnOyYpCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBvcmlnaW5hbCBjb21taXQgJyVzJyBoYXMgYSBncGcgc2lnbmF0dXJlLiIKK21zZ3N0ciAi67O4656YIOy7pOuwiyAnJXMn7JeQIEdQRyDshJzrqoXsnbQg7J6I7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDYxCittc2dpZCAidGhlIHNpZ25hdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHJlcGxhY2VtZW50IGNvbW1pdCEiCittc2dzdHIgIuuMgOyytCDsu6TrsIvsl5DshJwg7ISc66qF7J2EIOygnOqxsO2VqeuLiOuLpCEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIKK21zZ3N0ciAi64uk7J2M7JeQIOuMgO2VnCDrjIDssrQg7Luk67CL7J2EIOyTuCDsiJgg7JeG7Iq164uI64ukOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBjb252ZXJ0IHRoZSBmb2xsb3dpbmcgZ3JhZnQocyk6XG4iCisiJXMiCittc2dzdHIgIiIKKyLri6TsnYwg6re4656Y7ZSE7Yq466W8IOuzgO2ZmO2VoCDsiJgg7JeG7Iq164uI64ukOlxuIgorIiVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1MzUKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAi64yA7LK0IOugiO2NvOufsOyKpCDrqqnroZ3snYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1MzYKK21zZ2lkICJkZWxldGUgcmVwbGFjZSByZWZzIgorbXNnc3RyICLrjIDssrQg66CI7Y2865+w7Iqk66W8IOyCreygnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTM3Cittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgIu2YhOyerCDsmKTruIzsoJ3tirjrpbwg7Y647KeR7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1MzgKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICLsu6TrsIvsnZgg7IOB7JyEIO2VreuqqeydhCDrsJTqv4nri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUzOQorbXNnaWQgImNvbnZlcnQgZXhpc3RpbmcgZ3JhZnQgZmlsZSIKK21zZ3N0ciAi6riw7KG0IOq3uOuemO2UhO2KuCDtjIzsnbzsnYQg67OA7ZmY7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDAKK21zZ2lkICJyZXBsYWNlIHRoZSByZWYgaWYgaXQgZXhpc3RzIgorbXNnc3RyICLroIjtjbzrn7DsiqTqsIAg7J6I7Jy866m0IOuMgOyytO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQyCittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICItLWVkaXTsl5Ag64yA7ZWcIOuCtOyaqeydhCDsmIjsgZjqsowg7ZGc7Iuc7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQzCittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICLsnbQg7ZiV7Iud7J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMworbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxwYXRoPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDzqsr3roZw+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo1OQorbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICLsnbjrjbHsiqTsl5Ag6rmU64GU7ZWcIO2VtOqysOydhCDrk7HroZ3tlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOQorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzzsu6TrsIs+XSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwCittc2dpZCAiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gWzztirjrpqwt65Sw7JyEPl0gWy0tXSA86rK966GcPi4uLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMxCittc2dpZCAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICJnaXQgcmVzZXQgLS1wYXRjaCBbPO2KuOumrC3rlLDsnIQ+XSBbLS1dIFs86rK966GcPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNworbXNnaWQgIm1peGVkIgorbXNnc3RyICLtmLztlakiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNworbXNnaWQgInNvZnQiCittc2dzdHIgIuyGjO2UhO2KuCIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3Cittc2dpZCAiaGFyZCIKK21zZ3N0ciAi7ZWY65OcIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAi67OR7ZWpIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcKK21zZ2lkICJrZWVwIgorbXNnc3RyICLsnKDsp4AiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo3OAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICLsmKzrsJTrpbggSEVBROqwgCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODAKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICJIRUFE7J2YIO2KuOumrOulvCDssL7ripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICIlc+ydmCDtirjrpqzrpbwg7LC+64qU642wIOyLpO2MqO2WiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQgJXMiCittc2dzdHIgIkhFQUTsnZgg7ZiE7J6sIOychOy5mOuKlCAlc+yeheuLiOuLpCIKKworIzogYnVpbHRpbi9yZXNldC5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICLrs5Htlakg7KSR7JeQICVzIOumrOyFi+ydhCDtlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyODkKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICLqsITrnrXtnogg7ZGc7IucLCDsmKTrpZjrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjkxCittc2dpZCAicmVzZXQgSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgIkhFQUTsmYAg7J24642x7Iqk66W8IOumrOyFi+2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5MgorbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAiSEVBROunjCDrpqzshYvtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTQgYnVpbHRpbi9yZXNldC5jOjI5NgorbXNnaWQgInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiCittc2dzdHIgIkhFQUQsIOyduOuNseyKpCwg7J6R7JeF7Y+0642U66W8IOumrOyFi+2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5OAorbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiSEVBROulvCDrpqzshYvtlZjsp4Drp4wg66Gc7LusIOuzgOqyvSDsgqztla3snYQg64Ko6rKo65Gh64uI64ukIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA0Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCByZW1vdmVkIHBhdGhzIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIuygnOqxsO2VnCDqsr3roZzrpbwg64KY7KSR7JeQIOy2lOqwgO2VnOuLpOuKlCDsgqzsi6Trp4wg6riw66Gd7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZXZpc2lvbi4iCittc2dzdHIgIiclcyfsnYQo66W8KSDsmKzrsJTrpbgg66as67mE7KCE7Jy866GcIOywvuuKlOuNsCDsi6TtjKjtlojsirXri4jri6QuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCB0cmVlLiIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOyYrOuwlOuluCDtirjrpqzroZwg7LC+64qU642wIOyLpO2MqO2WiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzgKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2gg7Ji17IWY7J2AIC0te2hhcmQsbWl4ZWQsc29mdH0g7Ji17IWY6rO8IO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDcKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLW1peGVkIOyYteyFmOydhCDqsr3roZzsmYAg6rCZ7J20IOyTsOq4sOuKlCDsoJzqsbDrkKAg7JiI7KCV7J6F64uI64ukLiDrjIDsi6Dsl5AgJ2dpdCByZXNldCAtLSA86rK9IgorIuuhnD4n66W8IOyCrOyaqe2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICLqsr3roZzsmYAg6rCZ7J20ICVzIOumrOyFi+ydhCDtlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzIOumrOyFi+ydgCDqsITrnrXtlZwg7KCA7J6l7IaM7JeQ7ISc66eMIOyTuCDsiJgg7J6I7Iq164uI64ukIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzYzCittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgIi1OIOyYteyFmOydgCAtLW1peGVkIOyYteyFmOqzvCDqsJnsnbQg7I2o7JW866eMIO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXNldC5jOjM4MAorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6IgorbXNnc3RyICLrpqzshYsg65Kk7JeQIOyKpO2FjOydtOynle2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VrToiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIuyduOuNseyKpCDtjIzsnbzsnYQgJyVzJyDrpqzruYTsoITsnLzroZwg66as7IWL7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzkwCittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAi7IOIIOyduOuNseyKpCDtjIzsnbzsnYQg7JO4IOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6Mzk3Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgYW5kIC0tbWlzc2luZyIKK21zZ3N0ciAiLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMg7Ji17IWY6rO8IC0tbWlzc2luZyDsmLXshZjsnYQg6rKw7ZWpIO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NDU1Cittc2dpZCAib2JqZWN0IGZpbHRlcmluZyByZXF1aXJlcyAtLW9iamVjdHMiCittc2dzdHIgIuyYpOu4jOygne2KuCDtlYTthLDrp4HsnYAgLS1vYmplY3RzIOyYteyFmOydtCDtlYTsmpTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzcGFyc2UgdmFsdWUgJyVzJyIKK21zZ3N0ciAi7J6Y66q765CcIOuTnOusuCDqsJIgJyVzJyIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ5OQorbXNnaWQgInJldi1saXN0IGRvZXMgbm90IHN1cHBvcnQgZGlzcGxheSBvZiBub3RlcyIKK21zZ3N0ciAicmV2LWxpc3TripQg64W47Yq4IO2RnOyLnOulvCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NTAyCittc2dpZCAiY2Fubm90IGNvbWJpbmUgLS11c2UtYml0bWFwLWluZGV4IHdpdGggb2JqZWN0IGZpbHRlcmluZyIKK21zZ3N0ciAiLS11c2UtYml0bWFwLWluZGV4IOyYteyFmOyXkCDsmKTruIzsoJ3tirgg7ZWE7YSw66eB7J2EIOqysO2VqSDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MDYKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPOyYteyFmD5dIC0tIFs87J247J6QPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDExCittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICLsnbjsnpDroZwg64SY6ri0IGAtLWDrpbwg7Jyg7KeA7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxMworbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAi7LKr67KI7Ke4IOyYteyFmOydtCDslYTri4wg7J247J6QIOuSpOyXkCDtjIzsi7HsnYQg7KSR7KeA7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxNgorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgInN0dWNrIGxvbmcg7ZiV7Iud7Jy866GcIOy2nOugpe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1NDkKK21zZ2lkICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzzsmLXshZg+XSAtLSBbPOyduOyekD4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPOyduOyekD4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzzsmLXshZg+XSBbPOyduOyekD4uLi5dXG4iCisiXG4iCisi7LKr67KI7Ke4IOyCrOyaqeuwqeuyleyXkCDrjIDtlbQg7J6Q7IS47Z6IIOyVjOqzoCDsi7bsnLzrqbQsIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oIgorIlwi66W8XG4iCisi7Iuk7ZaJ7ZW0IOuztOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjMKK21zZ2lkICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJldmVydCBbPOyYteyFmD5dIDzsu6TrsIst65Sw7JyEPi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNAorbXNnaWQgImdpdCByZXZlcnQgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgcmV2ZXJ0IDztlZjsnITrqoXroLk+IgorCisjOiBidWlsdGluL3JldmVydC5jOjI5Cittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIFs87Ji17IWYPl0gPOy7pOuwiy3rlLDsnIQ+Li4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjMwCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIDztlZjsnITrqoXroLk+IgorCisjOiBidWlsdGluL3JldmVydC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIlczogJXPsnYAo64qUKSAlc+yZgCjqs7wpIOqwmeydtCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5OQorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIuuQmOuPjOumrOq4sCDrmJDripQg7Luk67CLIOu5vOyYpOq4sCDsl7Dsho3snYQg64Gd64OF64uI64ukIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMAorbXNnaWQgInJlc3VtZSByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIuuQmOuPjOumrOq4sCDrmJDripQg7Luk67CLIOu5vOyYpOq4sCDsl7Dsho3snYQg6rOE7IaN7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMQorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIuuQmOuPjOumrOq4sCDrmJDripQg7Luk67CLIOu5vOyYpOq4sCDsl7Dsho3snYQg7Leo7IaM7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMgorbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICLsnpDrj5nsnLzroZwg7Luk67CL7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDMKK21zZ2lkICJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi7Luk67CLIOuplOyLnOyngOulvCDtjrjsp5Htlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA2Cittc2dpZCAicGFyZW50LW51bWJlciIKK21zZ3N0ciAi7J207KCELey7pOuwiy3rsojtmLgiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA3Cittc2dpZCAic2VsZWN0IG1haW5saW5lIHBhcmVudCIKK21zZ3N0ciAi7J207KCEIOy7pOuwiyDspJEg66mU7J2465287J24IOyEoO2DnSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDkKK21zZ2lkICJtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi67OR7ZWpIOyghOuetSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTAKK21zZ2lkICJvcHRpb24iCittc2dzdHIgIuyYteyFmCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTEKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLrs5Htlakg7KCE6561IOyYteyFmCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjAKK21zZ2lkICJhcHBlbmQgY29tbWl0IG5hbWUiCittc2dzdHIgIuy7pOuwiyDsnbTrpoTsnYQg65Kk7JeQIOu2meyeheuLiOuLpCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjIKK21zZ2lkICJwcmVzZXJ2ZSBpbml0aWFsbHkgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAi7LWc7LSIIOu5iCDsu6TrsIvsnYQg7Jyg7KeA7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNAorbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICLsl6zrtoTsnZgg67mIIOy7pOuwi+ydhCDsnKDsp4Dtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjE0Cittc2dpZCAicmV2ZXJ0IGZhaWxlZCIKK21zZ3N0ciAi65CY64+M66as6riwIOyLpO2MqCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMjcKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgImNoZXJyeS1waWNrIOyLpO2MqCIKKworIzogYnVpbHRpbi9ybS5jOjE4Cittc2dpZCAiZ2l0IHJtIFs8b3B0aW9ucz5dIFstLV0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcm0gWzzsmLXshZg+XSBbLS1dIDztjIzsnbw+Li4uIgorCisjOiBidWlsdGluL3JtLmM6MjA2Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dpZF9wbHVyYWwgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dzdHJbMF0gIiIKKyLri6TsnYwg7YyM7J287JeQIO2MjOydvOqzvCBIRUFEIOuqqOuRkCDri6Trpbgg7Iqk7YWM7J207KeV7ZWcIOuCtOyaqeydtFxuIgorIuyeiOyKteuLiOuLpDoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTEKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIijqsJXsoJzroZwg7KCc6rGw7ZWY66Ck66m0IC1mIOyYteyFmOydhCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiBidWlsdGluL3JtLmM6MjE1Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ3N0clswXSAi64uk7J2MIO2MjOydvOydtCDsnbjrjbHsiqTsl5Ag7Iqk7YWM7J207KeV7ZWcIOuzgOqyvSDsgqztla3snbQg7J6I7Iq164uI64ukOiIKKworIzogYnVpbHRpbi9ybS5jOjIxOSBidWlsdGluL3JtLmM6MjI4Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIo7YyM7J287J2EIOycoOyngO2VmOugpOuptCAtLWNhY2hlZCDsmLXshZgsIOqwleygnOuhnCDsoJzqsbDtlZjroKTrqbQgLWYg7Ji17IWY7J2EIOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjUKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dzdHJbMF0gIuuLpOydjCDtjIzsnbzsl5Ag66Gc7LusIOyImOyglSDsgqztla3snbQg7J6I7Iq164uI64ukOiIKKworIzogYnVpbHRpbi9ybS5jOjI0MQorbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgIuygnOqxsO2VnCDtjIzsnbwg66qp66Gd7J2EIO2RnOyLnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDIKK21zZ2lkICJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAi7J24642x7Iqk7JeQ7ISc66eMIOygnOqxsO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgIm92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrIgorbXNnc3RyICLstZzsi6Ag67KE7KCEIO2ZleyduOydhCDtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3JtLmM6MjQ0Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgIuyerOq3gOyggSDsoJzqsbDrpbwg7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JtLmM6MjQ2Cittc2dpZCAiZXhpdCB3aXRoIGEgemVybyBzdGF0dXMgZXZlbiBpZiBub3RoaW5nIG1hdGNoZWQiCittc2dzdHIgIuyVhOustCDqsoPrj4Qg7J287LmY7ZWY7KeAIOyViuycvOuptCDsg4Htg5wgMOuyiOycvOuhnCDrgZ3rgqnri4jri6QiCisKKyM6IGJ1aWx0aW4vcm0uYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAiLXIg7Ji17IWY7J20IOyXhuycvOuptCDsnqzqt4DsoIHsnLzroZwgJyVzJ+ydhCjrpbwpIOygnOqxsO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcm0uYzozNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJnaXQgcm06ICVz7J2EKOulvCkg7KCc6rGw7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcm0uYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkg7KCc6rGw7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MjAKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPO2YuOyKpO2KuD46XTzrlJTroInthLDrpqw+IFs866CI7Y2865+wIgorIuyKpD4uLi5dXG4iCisiICAtLWFsbCDsmLXshZjqs7wg66qF7Iuc7KCB7J24IDzroIjtjbzrn7DsiqQ+IOuqheyEuCDspJEg7ZWY64KY66eMIOyCrOyaqe2VoCDsiJgg7J6I7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjMKK21zZ2lkICJyZW1vdGUgbmFtZSIKK21zZ3N0ciAi66as66qo7Yq4IOydtOumhCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzcKK21zZ2lkICJ1c2Ugc3RhdGVsZXNzIFJQQyBwcm90b2NvbCIKK21zZ3N0ciAi7IOB7YOcIOyXhuuKlCBSUEMg7ZSE66Gc7Yag7L2c7J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzgKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi7ZGc7KSAIOyeheugpeyXkOyEnCDroIjtjbzrn7DsiqTrpbwg7J297Iq164uI64ukIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OQorbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgIuumrOuqqO2KuCDrj4Tsm4Ag7ZSE66Gc6re4656o7J2YIOyDge2DnOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc2VydmUuYzo3Cittc2dpZCAiZ2l0IHNlcnZlIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgc2VydmUgWzzsmLXshZg+XSIKKworIzogYnVpbHRpbi9zZXJ2ZS5jOjE3IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyMworbXNnaWQgInF1aXQgYWZ0ZXIgYSBzaW5nbGUgcmVxdWVzdC9yZXNwb25zZSBleGNoYW5nZSIKK21zZ3N0ciAi7ZWY64KY7J2YIOyalOyyrS/snZHri7Ug6rWQ7ZmYIOuSpOyXkCDrgZ3rgqnri4jri6QiCisKKyM6IGJ1aWx0aW4vc2VydmUuYzoxOQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWR2ZXJ0aXNpbmcgY2FwYWJpbGl0aWVzIgorbXNnc3RyICLquLDriqUg7KCV67O0IOq1kO2ZmCDrkqTsl5Ag7KaJ7IucIOuBneuCqeuLiOuLpCIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE0Cittc2dpZCAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc2hvcnRsb2cgWzzsmLXshZg+XSBbPOumrOu5hOyghC3rspTsnIQ+XSBbWy0tXSA86rK966GcPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNQorbXNnaWQgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzzsmLXshZg+XSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NAorbXNnaWQgIkdyb3VwIGJ5IGNvbW1pdHRlciByYXRoZXIgdGhhbiBhdXRob3IiCittc2dzdHIgIuyekeyEseyekOqwgCDslYTri4wg7Luk66+47YSw66GcIOustuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NgorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAi7J6R7ISx7J6Q67OEIOy7pOuwiyDsiJjsl5Ag65Sw6528IOygleugrO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2OAorbXNnaWQgIlN1cHByZXNzIGNvbW1pdCBkZXNjcmlwdGlvbnMsIG9ubHkgcHJvdmlkZXMgY29tbWl0IGNvdW50IgorbXNnc3RyICLsu6TrsIsg7ISk66qF7J2EIOyDneuete2VmOqzoCwg7Luk67CLIOyImOunjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzAKK21zZ2lkICJTaG93IHRoZSBlbWFpbCBhZGRyZXNzIG9mIGVhY2ggYXV0aG9yIgorbXNnc3RyICLsnpHshLHsnpDsnZgg7KCE7J6Q66mU7J28IOyjvOyGjOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzEKK21zZ2lkICJ3WyxpMVssaTJdXSIKK21zZ3N0ciAid1ssaTFbLGkyXV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzIKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgIuykhOuwlOq/iCDstpzroKUiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyOTgKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZ2l2ZW4gb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICLsoIDsnqXshowg67CW7JeQ7IScIOyjvOyWtOynhCDsnbjsnpDqsIAg64SI66y0IOunjuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjEyCittc2dpZCAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz087Iuc6rCBPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPOumrOu5hOyghD4gfCA8Z2xvYj4pLi4uXSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjE2Cittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDzrsqDsnbTsiqQ+XV0gWy0tbGlzdF0gWzzroIjtjbzrn7DsiqQ+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIKK21zZ3N0clswXSAiJXMg66y07IucLiDroIjtjbzrn7DsiqTrpbwgJWTqsJzrs7Tri6Qg66eO7J20IOyymOumrO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG1hdGNoaW5nIHJlZnMgd2l0aCAlcyIKK21zZ3N0ciAiJXPsmYAo6rO8KSDsnbzsuZjtlZjripQg66CI7Y2865+w7Iqk6rCAIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjYyNgorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAi66as66qo7Yq4IOy2lOyggSDrsI8g66Gc7LusIOu4jOuenOy5mOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2MjgKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi66as66qo7Yq4IOy2lOyggSDruIzrnpzsuZjrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjMwCittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAi67iM656c7LmY7JeQIOuUsOuluCAnKiErLScg7ZGc7Iuc7JeQIOyDieydhCDsnoXtnpnri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2MzIKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAi6rO17Ya1IOydtOyghCDsu6TrsIsg65Kk7J2YIDxuPuqwnOydmCDsu6TrsIvsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjM0Cittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICItLW1vcmU9LTEg7Ji17IWY6rO8IOuPmeydvCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjYzNQorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICLsnbTrpoQg66y47J6Q7Je07J2EIO2RnOyLnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2MzcKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAi7ZiE7J6sIOu4jOuenOy5mOulvCDtj6ztlagiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2MzkKK21zZ2lkICJuYW1lIGNvbW1pdHMgd2l0aCB0aGVpciBvYmplY3QgbmFtZXMiCittc2dzdHIgIuy7pOuwi+ydmCDsnbTrpoTsnYQg6re4IOyYpOu4jOygne2KuCDsnbTrpoTsnLzroZwg67aZ7J6F64uI64ukIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQxCittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAi6rCA64ql7ZWcIOuzke2VqSDquLDspIDsoJDsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQzCittc2dpZCAic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIKK21zZ3N0ciAi64uk66W4IOyWtOuWpCDroIjtjbzrn7DsiqTsl5DshJzrj4Qg7KCR6re8IOu2iOqwgOuKpe2VnCDroIjtjbzrn7DsiqTrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ1Cittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICLsnITsg4Eg7Iic7ISc7JeQIOuUsOudvCDsu6TrsIvsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ4Cittc2dpZCAic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giCittc2dzdHIgIuyyqyDruIzrnpzsuZjsl5Ag7JeG64qUIOy7pOuwi+unjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgIu2VmOuCmOydmCDrgZ3sl5DshJzrp4wg7KCR6re8IOqwgOuKpe2VnCDrs5HtlansnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUyCittc2dpZCAidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyIHdoZXJlIHBvc3NpYmxlIgorbXNnc3RyICLqsIDriqXtlZjrqbQg7Iuc6rCEIOyInOyEnOulvCDsnKDsp4DtlZjrqbTshJwg7JyE7IOBIOyInOyEnOuhnCDsoJXroKwiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTUKK21zZ2lkICI8bj5bLDxiYXNlPl0iCittc2dzdHIgIjxuPlssPOuyoOydtOyKpD5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU2Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgIuq4sOykgOu2gO2EsCDsi5zsnpHtlbQg7LWc64yAIDxuPuqwnOydmCDstZzqt7wgcmVmLWxvZyDtla3rqqnsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjkwCittc2dpZCAiIgorIi0tcmVmbG9nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQgb3IgLS1tZXJnZS1iYXNlIgorbXNnc3RyICIiCisiLS1yZWZsb2cg7Ji17IWY7J2AIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQsIC0tbWVyZ2UtYmFzZSDsmLXshZjqs7wg7Zi47ZmY65CYIgorIuyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MTQKK21zZ2lkICJubyBicmFuY2hlcyBnaXZlbiwgYW5kIEhFQUQgaXMgbm90IHZhbGlkIgorbXNnc3RyICLruIzrnpzsuZjrpbwg7KeA7KCV7ZWY7KeAIOyViuyVmOqzoCwgSEVBROqwgCDsmKzrsJTrpbTsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzE3Cittc2dpZCAiLS1yZWZsb2cgb3B0aW9uIG5lZWRzIG9uZSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS1yZWZsb2cg7Ji17IWY7J2AIOu4jOuenOy5mCDsnbTrpoTsnbQg7ZWE7JqU7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgJWQgZW50cnkgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ2lkX3BsdXJhbCAib25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dzdHJbMF0gIu2VnCDrsojsl5AgJWTqsJwg7ZWt66qp66eMIO2RnOyLnO2VoCDsiJgg7J6I7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjcyNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZiAlcyIKK21zZ3N0ciAi6re465+wIOugiO2NvOufsOyKpOqwgCDsl4bsirXri4jri6Q6ICVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldi4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldnMuIgorbXNnc3RyWzBdICLrpqzruYTsoITsnYQgJWTqsJzrs7Tri6Qg66eO7J20IOyymOumrO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiclcyfsnYAo64qUKSDsmKzrsJTrpbgg66CI7Y2865+w7Iqk6rCAIOyVhOuLmeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgY29tbWl0ICVzICglcykiCittc2dzdHIgIiVzIOy7pOuwi+ydhCDssL7snYQg7IiYIOyXhuydjCAoJXMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTAKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzztjKjthLQ+Li4uXSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjExCittc2dpZCAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PO2MqO2EtD5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTU5Cittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAi7YOc6re466eMIO2RnOyLnCAo7Zek65Oc7JmAIOqysO2VqSDqsIDriqUpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYwCittc2dpZCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIKK21zZ3N0ciAi7Zek65Oc66eMIO2RnOyLnCAo7YOc6re47JmAIOqysO2VqSDqsIDriqUpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYxCittc2dpZCAic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCByZXF1aXJlcyBleGFjdCByZWYgcGF0aCIKK21zZ3N0ciAi642UIOyXhOqyqe2VnCDroIjtjbzrn7DsiqQg6rKA7IKsLCDsoJXtmZXtnogg7ZWY64KY7J2YIOugiO2NvOufsOyKpCDqsr3roZwg7ZWE7JqUIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY0IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjYKK21zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSwgZXZlbiBpZiBpdCB3b3VsZCBiZSBmaWx0ZXJlZCBvdXQiCittc2dzdHIgIkhFQUQg66CI7Y2865+w7Iqk66W8IO2RnOyLnO2VqeuLiOuLpCAo7ZWE7YSw66eB65CY7IScIOygnOyZuOuQmOuNlOudvOuPhCkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjgKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAi7YOc6re466W8IOyYpOu4jOygne2KuCBJROuhnCDrlLDrnbzqsJHri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzAKK21zZ2lkICJvbmx5IHNob3cgU0hBMSBoYXNoIHVzaW5nIDxuPiBkaWdpdHMiCittc2dzdHIgIlNIQS0xIO2RnOyLnOyXkCA8bj7qsJzsnZgg7Iir7J6Q66eMIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3NAorbXNnaWQgImRvIG5vdCBwcmludCByZXN1bHRzIHRvIHN0ZG91dCAodXNlZnVsIHdpdGggLS12ZXJpZnkpIgorbXNnc3RyICLtkZzspIAg7Lac66Cl7JeQIOqysOqzvOulvCDtkZzsi5ztlZjsp4Ag7JWK7Iq164uI64ukICgtLXZlcmlmeSDsmLXshZjqs7wg7IKs7Jqp7ZWY66m0IOyii+ydjCkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzYKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLroZzsu6wg7KCA7J6l7IaM7JeQIOyXhuuKlCDroIjtjbzrn7DsiqTrpbwg7ZGc7KSAIOyeheugpeyXkOyEnCDsnb3slrQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOAorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorbXNnc3RyICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTkKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLWMgfCAtLWNvbW1lbnQtbGluZXNdIgorbXNnc3RyICJnaXQgc3RyaXBzcGFjZSBbLWMgfCAtLWNvbW1lbnQtbGluZXNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzozNgorbXNnaWQgInNraXAgYW5kIHJlbW92ZSBhbGwgbGluZXMgc3RhcnRpbmcgd2l0aCBjb21tZW50IGNoYXJhY3RlciIKK21zZ3N0ciAi7KO87ISdIOusuOyekOuhnCDsi5zsnpHtlZjripQg66qo65OgIOykhOydhCDqsbTrhIjrm7Dqs6Ag7KCc6rGw7ZWp64uI64ukIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzozOQorbXNnaWQgInByZXBlbmQgY29tbWVudCBjaGFyYWN0ZXIgYW5kIHNwYWNlIHRvIGVhY2ggbGluZSIKK21zZ3N0ciAi6rCBIOykhOydmCDslZ7sl5Ag7KO87ISdIOusuOyekOyZgCDqs7XrsLHsnYQg67aZ7J6F64uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZWY6ICVzIgorbXNnc3RyICLqt7jrn7Ag66CI7Y2865+w7Iqk6rCAIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY5NworIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiCittc2dzdHIgIuyghOyytCDroIjtjbzrn7DsiqQg7J2066aE7J20IO2VhOyalO2VmOyngOunjCwg7J6F66Cl7J2AICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjEKK21zZ2lkICJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSB0YWtlcyBubyBhcmd1bWVudHMiCittc2dzdHIgInN1Ym1vZHVsZS0taGVscGVyIHByaW50LWRlZmF1bHQtcmVtb3RlIOyYteyFmOydgCDsnbjsnpDqsIAg7ZWE7JqU7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyVzJyIKK21zZ3N0ciAiJyVzJyBVUkwg7ZWY64KY7J2YIOuLqOqzhOulvCDsnpjrnbzrgrwg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIxMQorbXNnaWQgImFsdGVybmF0aXZlIGFuY2hvciBmb3IgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgIuyDgeuMgCDqsr3roZzsl5Ag7IKs7Jqp7ZWgIOuYkOuLpOuluCDquLDspIAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MTEKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTzqsr3roZw+XSBbPOqyveuhnD4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDYyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICIuZ2l0bW9kdWxlc+yXkOyEnCDtlZjsnIQg66qo65OIIOqyveuhnCAnJXMn7JeQIOuMgO2VnCBVUkzsnbQg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgbG9va3VwIGNvbmZpZ3VyYXRpb24gJyVzJy4gQXNzdW1pbmcgdGhpcyByZXBvc2l0b3J5IGlzIGl0cyBvd24gIgorImF1dGhvcml0YXRpdmUgdXBzdHJlYW0uIgorbXNnc3RyICIiCisiJyVzJyDshKTsoJXsnYQg7LC+7JWE67O8IOyImCDsl4bsirXri4jri6QuIOydtCDsoIDsnqXshozqsIAg7J6Q7LK0IOyXheyKpO2KuOumvOydtOudvOqzoCDqsIDsoJXtlanri4jri6QuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIu2VmOychCDrqqjrk4gg6rK966GcICclcyfsl5Ag64yA7ZWcIFVSTOydhCDrk7HroZ3tlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIiclMyRzJyDqsr3roZzsl5Ag64yA7ZW0ICclMSRzJyAoJTIkcykg7ZWY7JyEIOuqqOuTiCDrk7HroZ1cbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBjb21tYW5kIHVwZGF0ZSBtb2RlIHN1Z2dlc3RlZCBmb3Igc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAi6rK96rOgOiAnJXMnIO2VmOychCDrqqjrk4jsl5Ag64yA7ZW0IOy7pOunqOuTnCDsl4XrjbDsnbTtirgg66qo65Oc6rCAIOygnOyViOuQmOyXiOyKteuLiOuLpFxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiJyVzJyDtlZjsnIQg66qo65OI7JeQIOuMgO2VtCDsl4XrjbDsnbTtirgg66qo65OcIOuTseuhneydtCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NTQKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiCDstIjquLDtmZTsl5Ag7Lac66Cl7J2EIO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NTkKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzzqsr3roZw+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYzMSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICclcyciCittc2dzdHIgIuqyveuhnCAnJXMn7JeQIOuMgO2VtCAuZ2l0bW9kdWxlc+yXkCDsnojripQg7ZWY7JyE66qo65OIIOunpO2VkeydtCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCByZWYgaW5zaWRlIHRoZSBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiSEVBRCDroIjtjbzrn7DsiqTrpbwgJyVzJyDtlZjsnIQg66qo65OIIOyViOyXkOyEnCDssL7snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY5NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODY2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgIiclcycg7ZWY7JyEIOuqqOuTiOyXkCDsnqzqt4DsoIHsnLzroZwg7KCB7Jqp7J20IOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcyMSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAzMQorbXNnaWQgIlN1cHByZXNzIHN1Ym1vZHVsZSBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICLtlZjsnIQg66qo65OIIOyDge2DnOulvCDstpzroKXtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzIyCittc2dpZCAiIgorIlVzZSBjb21taXQgc3RvcmVkIGluIHRoZSBpbmRleCBpbnN0ZWFkIG9mIHRoZSBvbmUgc3RvcmVkIGluIHRoZSBzdWJtb2R1bGUgIgorIkhFQUQiCittc2dzdHIgIu2VmOychCDrqqjrk4ggSEVBROyXkCDsoIDsnqXrkJwg7Luk67CLIOuMgOyLoCDsnbjrjbHsiqTsl5Ag7KCA7J6l65CcIOy7pOuwi+ydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MjMKK21zZ2lkICJyZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgIuuCtOyepeuQnCDtlZjsnIQg66qo65OI7JeQIOyerOq3gOyggeycvOuhnCDsoIHsmqkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MjgKK21zZ2lkICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs86rK966GcPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3NTIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8cGF0aD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDzqsr3roZw+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJyVzJ1xuIgorbXNnc3RyICLtlZjsnIQg66qo65OIIFVSTOydhCAnJXMn7JeQIOuMgO2VtCDrj5nquLDtmZRcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOqyveuhnCAnJXMn7JeQIOuMgO2VnCBVUkzsnYQg65Ox66Gd7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKyLtlZjsnIQg66qo65OIIOqyveuhnCAnJXMn7JeQIOuMgO2VnCDquLDrs7gg66as66qo7Yq4ICjsoIDsnqXshowp66W8IOqwgOyguOyYpOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisi7ZWY7JyEIOuqqOuTiCDqsr3roZwgJyVzJ+yXkCDrjIDtlZwg66as66qo7Yq4ICjsoIDsnqXshowp66W8IOyXheuNsOydtO2KuO2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4OTUKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIgorbXNnc3RyICLtlZjsnIQg66qo65OIIFVSTCDrj5nquLDtmZQg7Lac66ClIO2RnOyLnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4OTcKK21zZ2lkICJSZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgIuykkeyyqeuQnCDtlZjsnIQg66qo65OI7JeQIOyerOq3gOyggeycvOuhnCDsoIHsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MDIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzzqsr3roZw+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGEgLmdpdCBkaXJlY3RvcnkgKHVzZSAncm0gLXJmJyBpZiB5b3UgIgorInJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorIu2VmOychCDrqqjrk4gg7J6R7JeFIO2PtOuNlCAnJXMn7JeQIC5naXQg65SU66CJ7YSw66as6rCAIOyeiOyKteuLiOuLpCAo7KCV66eQ66GcIOuqqOuToCDsu6TrsIsg64K07Jet7J2EICIKKyLtj6ztlajtlZjsl6wg7KCc6rGw7ZWY66Ck66m0ICdybSAtcmYn66W8IOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkICIKKyJ0aGVtIgorbXNnc3RyICIiCisi7ZWY7JyEIOuqqOuTiCDsnpHsl4Ug7Y+0642UICclcyfsl5Ag66Gc7LusIOyImOyglSDsgqztla3snbQg7J6I7Iq164uI64ukLiDrsoTrpqzroKTrqbQgJy1mJ+ulvCDsgqzsmqntlZgiCisi7Iut7Iuc7JikIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIKK21zZ3N0ciAiJyVzJyDrlJTroInthLDrpqzrpbwg7KeA7JuB64uI64ukXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBzdWJtb2R1bGUgd29yayB0cmVlICclcydcbiIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiCDsnpHsl4Ug7Y+0642UICAnJXMn7J2EKOulvCkg7KCc6rGw7ZWgIOyImCDsl4bsirXri4jri6RcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk4NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGVtcHR5IHN1Ym1vZHVsZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIuu5iCDtlZjsnIQg66qo65OIIOuUlOugie2EsOumrOulvCAlc+ydhCjrpbwpIOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAwMworIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIiclcycg7ZWY7JyEIOuqqOuTiOydtCAoJXMpICclcycg6rK966Gc7JeQIOuMgO2VtCDrk7HroZ3rkJjsp4Ag7JWK7JWY7Iq164uI64ukXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDMyCittc2dpZCAiUmVtb3ZlIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWVzIGV2ZW4gaWYgdGhleSBjb250YWluIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIuuhnOy7rCDrs4Dqsr0g7IKs7ZWt7J20IOyeiOyWtOuPhCDtlZjsnIQg66qo65OIIOyekeyXhSDtj7TrjZTrpbwg7KCc6rGw7ZWp64uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAzMworbXNnaWQgIlVucmVnaXN0ZXIgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgIuuqqOuToCDtlZjsnIQg66qo65OI7J2EIOuqqeuhneyXkOyEnCDsoJzqsbDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDM4Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8cGF0aD4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs86rK966GcPi4uLl1dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA1MgorbXNnaWQgIlVzZSAnLS1hbGwnIGlmIHlvdSByZWFsbHkgd2FudCB0byBkZWluaXRpYWxpemUgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgIuygleunkOuhnCDrqqjrk6Ag7ZWY7JyEIOuqqOuTiCDstIjquLDtmZTrpbwg7ZW07KCc7ZWY66Ck66m0ICctLWFsbCfsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE0NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBjYW5ub3QgYWRkIGFsdGVybmF0ZTogJXMiCittc2dzdHIgIiclcycg7ZWY7JyEIOuqqOuTiOyXkCDrs7TsobAg7Jik67iM7KCd7Yq466W8IOy2lOqwgO2VoCDsiJgg7JeG7Iq164uI64ukOiAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgaXMgbm90IHJlY29nbml6ZWQiCittc2dzdHIgInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd57JeQIOuMgO2VnCDqsJLsnbQoJyVzJykg7JWMIOyImCDsl4bripQg6rCS7J6F64uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24gaXMgbm90IHJlY29nbml6ZWQiCittc2dzdHIgInN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbuyXkCDrjIDtlZwg6rCS7J20KCclcycpIOyVjCDsiJgg7JeG64qUIOqwkuyeheuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMTQKK21zZ2lkICJ3aGVyZSB0aGUgbmV3IHN1Ym1vZHVsZSB3aWxsIGJlIGNsb25lZCB0byIKK21zZ3N0ciAi7IOIIO2VmOychCDrqqjrk4jsnYQg67O17KCc7ZWgIOuMgOyDgSDsnITsuZgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjE3Cittc2dpZCAibmFtZSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSIKK21zZ3N0ciAi7IOIIO2VmOychCDrqqjrk4gg7J2066aEIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIyMAorbXNnaWQgInVybCB3aGVyZSB0byBjbG9uZSB0aGUgc3VibW9kdWxlIGZyb20iCittc2dzdHIgIu2VmOychCDrqqjrk4jsnYQg67O17KCc7ZW0IOyYrCBVUkwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjI4Cittc2dpZCAiZGVwdGggZm9yIHNoYWxsb3cgY2xvbmVzIgorbXNnc3RyICLslpXsnYAg67O17KCc7JeQIOyCrOyaqe2VoCDquYrsnbQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjMxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjA2Cittc2dpZCAiZm9yY2UgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAi67O17KCcIOynhO2WiSDsg4HtmansnYQg7ZWt7IOBIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMzYKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD08cGF0aD5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxyZXBvc2l0b3J5Pl0gWy0tbmFtZSA8bmFtZT5dIFstLWRlcHRoIDxkZXB0aD5dIC0tdXJsIDx1cmw+IC0tcGF0aCA8cGF0aD4iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTzqsr3roZw+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlIDzsoIDsnqXshowiCisiPl0gWy0tbmFtZSA87J2066aEPl0gWy0tZGVwdGggPOq5iuydtD5dIC0tdXJsIDx1cmw+IC0tcGF0aCA86rK966GcPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2xvbmUgb2YgJyVzJyBpbnRvIHN1Ym1vZHVsZSBwYXRoICclcycgZmFpbGVkIgorbXNnc3RyICInJXMn7JeQ7IScIO2VmOychCDrqqjrk4gg6rK966GcICclcyfsl5Ag67O17KCc7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBzdWJtb2R1bGUgZGlyZWN0b3J5IGZvciAnJXMnIgorbXNnc3RyICInJXMn7JeQIOuMgO2VnCDtlZjsnIQg66qo65OIIOuUlOugie2EsOumrOulvCDqsIDsoLjsmKwg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyVzJyBub3QgaW5pdGlhbGl6ZWQiCittc2dzdHIgIiclcycg7ZWY7JyEIOuqqOuTiCDqsr3roZzqsIAg7LSI6riw7ZmU65CY7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNTEKK21zZ2lkICJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAiJ3VwZGF0ZSAtLWluaXQn7J2EIO2VmOugpOqzoCDtlZwg6rKDIOyVhOuLiOyXiOyKteuLiOq5jD8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHVubWVyZ2VkIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi67OR7ZWp7ZWY7KeAIO2VmOychCDrqqjrk4ggJXMg6rG064SI65yAIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiCAnJXMnIOqxtOuEiOucgCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNsb25lICclcycuIFJldHJ5IHNjaGVkdWxlZCIKK21zZ3N0ciAiJyVzJyDrs7XsoJztlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukLiDsnqzsi5zrj4Qg7JiI7KCVIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJyBhIHNlY29uZCB0aW1lLCBhYm9ydGluZyIKK21zZ3N0ciAi65GQ67KI7Ke4ICclcycg67O17KCc7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpC4g7KSR7KeA7ZWp64uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU4NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgwOAorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLsnpHsl4Ug7Y+0642U66GcIOqwgOuKlCDqsr3roZwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTg4Cittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUsIGFjcm9zcyBuZXN0ZWQgc3VibW9kdWxlIGJvdW5kYXJpZXMiCittc2dzdHIgIuyekeyXhSDtj7TrjZTroZwg6rCA64qUIOqyveuhnCwg64K07J6l65CcIO2VmOychCDrqqjrk4jsnZgg6rK96rOEIO2GteqzvCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1OTIKK21zZ2lkICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvciBub25lIgorbXNnc3RyICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCDrmJDripQgbm9uZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1OTgKK21zZ2lkICJDcmVhdGUgYSBzaGFsbG93IGNsb25lIHRydW5jYXRlZCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXZpc2lvbnMiCittc2dzdHIgIuyngOygle2VnCDqsJzsiJjsnZgg66as67mE7KCE7JeQ7IScIOyemOumsCDslpXsnYAg67O17KCc66W8IOunjOuTreuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MDEKK21zZ2lkICJwYXJhbGxlbCBqb2JzIgorbXNnc3RyICLrs5HroKwg7J6R7JeFIOqwnOyImCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MDMKK21zZ2lkICJ3aGV0aGVyIHRoZSBpbml0aWFsIGNsb25lIHNob3VsZCBmb2xsb3cgdGhlIHNoYWxsb3cgcmVjb21tZW5kYXRpb24iCittc2dzdHIgIuy1nOy0iCDrs7XsoJzqsIAg7JaV7J2AIOuzteygnCDstpTsspzsnYQg65Sw66W87KeAIOyXrOu2gCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MDQKK21zZ2lkICJkb24ndCBwcmludCBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICLrs7XsoJwg6rO87KCV7J2EIO2RnOyLnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjExCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZV9jbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZV9jbG9uZSBbLS1wcmVmaXg9POqyveuhnD5dIFs86rK966GcPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjI0Cittc2dpZCAiYmFkIHZhbHVlIGZvciB1cGRhdGUgcGFyYW1ldGVyIgorbXNnc3RyICLtjIzrnbzrr7jthLAg7JeF642w7J207Yq47JeQIOqwkuydtCDsnpjrqrvrkJjsl4jsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0IGJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0ICIKKyJ0aGUgc3VwZXJwcm9qZWN0IGlzIG5vdCBvbiBhbnkgYnJhbmNoIgorbXNnc3RyICIiCisi7ZWY7JyEIOuqqOuTiCAoJXMpIOu4jOuenOy5mOqwgCDsg4HsnIQg7ZSE66Gc7KCd7Yq4IOu4jOuenOy5mOulvCDsnbTslrTrsJvrj4TroZ0g7ISk7KCV65CY7JeI7KeA66eMLCDsg4HsnIQgIgorIu2UhOuhnOygne2KuOyXkCDruIzrnpzsuZjqsIAg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgwOQorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIgorbXNnc3RyICLtlZjsnIQg66qo65OI7JeQIOyerOq3gOyggeycvOuhnCDsoIHsmqkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGVtYmVkLWdpdC1kaXIgWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBlbWJlZC1naXQtZGlyIFs86rK966GcPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXNuJ3Qgc3VwcG9ydCAtLXN1cGVyLXByZWZpeCIKK21zZ3N0ciAiJXPsl5DshJwgLS1zdXBlci1wcmVmaXgg7Ji17IWY7J2EIOyngOybkO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgc3VibW9kdWxlLS1oZWxwZXIgc3ViY29tbWFuZCIKK21zZ3N0ciAiJyVzJ+ydgCjripQpIOyYrOuwlOuluCBzdWJtb2R1bGUtLWhlbHBlciDtlZjsnIQg66qF66C57J20IOyVhOuLmeuLiOuLpCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo4Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiBbPG9wdGlvbnM+XSA8bmFtZT4gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiBbPOyYteyFmD5dIDzsnbTrpoQ+IFs866CI7Y2865+w7IqkPl0iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OQorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bmFtZT4iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA87J2066aEPiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MAorbXNnaWQgInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiCittc2dzdHIgIuyLrOuzvOydtCDslYTri4wgKOu2hOumrOuQnCkg66CI7Y2865+w7Iqk7JeQIOuMgO2VtCDsl5Drn6wg66mU7Iuc7KeA66W8IO2RnOyLnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDEKK21zZ2lkICJkZWxldGUgc3ltYm9saWMgcmVmIgorbXNnc3RyICLsi6zrs7zrpq0g66CI7Y2865+w7Iqk66W8IOyCreygnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MgorbXNnaWQgInNob3J0ZW4gcmVmIG91dHB1dCIKK21zZ3N0ciAi66CI7Y2865+w7IqkIOy2nOugpeydhCDspITsnoXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYyCittc2dpZCAicmVhc29uIgorbXNnc3RyICLsnbTsnKAiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYyCittc2dpZCAicmVhc29uIG9mIHRoZSB1cGRhdGUiCittc2dzdHIgIuyXheuNsOydtO2KuOydmCDsnbTsnKAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjQKK21zZ2lkICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl0gPHRhZ25hbWU+ICIKKyJbPGhlYWQ+XSIKK21zZ3N0ciAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA87YKkLUlEPl0gWy1mXSBbLW0gPOuplOyLnOyngD4gfCAtRiA87YyM7J28Pl0gPO2DnOq3uOydtOumhD5cbiIKKyJcdFx0Wzztl6Trk5w+XSIKKworIzogYnVpbHRpbi90YWcuYzoyNQorbXNnaWQgImdpdCB0YWcgLWQgPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC1kIDztg5zqt7jsnbTrpoQ+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjI2Cittc2dpZCAiIgorImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLW5vLWNvbnRhaW5zIDxjb21taXQ+XSBbLS0iCisicG9pbnRzLWF0IDxvYmplY3Q+XVxuIgorIlx0XHRbLS1mb3JtYXQ9PGZvcm1hdD5dIFstLVtuby1dbWVyZ2VkIFs8Y29tbWl0Pl1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyAtbCBbLW5bPOuyiO2YuD5dXSBbLS1jb250YWlucyA87Luk67CLPl0gWy0tbm8tY29udGFpbnMgPOy7pOuwiz5dIFstLXBvaW50cy0iCisiYXQgPOyYpOu4jOygne2KuD5dXG4iCisiXHRcdFstLWZvcm1hdD087ZiV7IudPl0gWy0tW25vLV1tZXJnZWQgWzzsu6TrsIs+XV0gWzztjKjthLQ+Li4uXSIKKworIzogYnVpbHRpbi90YWcuYzoyOAorbXNnaWQgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTztmJXsi50+XSA87YOc6re47J2066aEPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICInJXMnIO2DnOq3uOqwgCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL3RhZy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIiclcycg7YOc6re4IOyCreygnO2VqCAo6rO86rGwICVzKVxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLri6TsnYwg7YOc6re47JeQIOuMgO2VnCDrqZTsi5zsp4Drpbwg7JOw7Iut7Iuc7JikOlxuIgorIiAgJXNcbiIKKyInJWMnIOusuOyekOuhnCDsi5zsnpHtlZjripQg7KSE7J2AIOustOyLnOuQqeuLiOuLpC5cbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuuLpOydjCDtg5zqt7jsl5Ag64yA7ZWcIOuplOyLnOyngOulvCDsk7Dsi63si5zsmKQ6XG4iCisiICAlc1xuIgorIiclYycg66y47J6Q66GcIOyLnOyeke2VmOuKlCDspITsnYAg7Jyg7KeA65Cp64uI64ukLiDsoJzqsbDtlZjroKTrqbQg7KeB7KCRIOyngOybjOyVvCDtlanri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTkwCittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAi7YOc6re47JeQIOyEnOuqhe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjE5MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAi7YOc6re4IO2MjOydvOydhCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzoyMTcKK21zZ2lkICJiYWQgb2JqZWN0IHR5cGUuIgorbXNnc3RyICLsnpjrqrvrkJwg7Jik67iM7KCd7Yq4IOyiheulmC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjY2Cittc2dpZCAibm8gdGFnIG1lc3NhZ2U/IgorbXNnc3RyICLtg5zqt7gg66mU7Iuc7KeAIOyXhuydjD8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgIu2DnOq3uCDrqZTsi5zsp4DqsIAgJXMg7YyM7J287JeQIOuCqOyVhCDsnojsirXri4jri6RcbiIKKworIzogYnVpbHRpbi90YWcuYzozODIKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAi7YOc6re4IOydtOumhCDrqqnroZ3snYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjM4NAorbXNnaWQgInByaW50IDxuPiBsaW5lcyBvZiBlYWNoIHRhZyBtZXNzYWdlIgorbXNnc3RyICLqsIEg7YOc6re4IOuplOyLnOyngOydmCA8bj7spITsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjM4NgorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICLtg5zqt7jrpbwg7IKt7KCc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjM4NworbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICLtg5zqt7jrpbwg6rKA7Kad7ZWp64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjM4OQorbXNnaWQgIlRhZyBjcmVhdGlvbiBvcHRpb25zIgorbXNnc3RyICLtg5zqt7gg66eM65Ok6riwIOyYteyFmCIKKworIzogYnVpbHRpbi90YWcuYzozOTEKK21zZ2lkICJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiCittc2dzdHIgIuyjvOyEnSDri6zrprAg7YOc6re4LCDrqZTsi5zsp4DqsIAg7ZWE7JqU7ZWp64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjM5MworbXNnaWQgInRhZyBtZXNzYWdlIgorbXNnc3RyICLtg5zqt7gg66mU7Iuc7KeAIgorCisjOiBidWlsdGluL3RhZy5jOjM5NQorbXNnaWQgImZvcmNlIGVkaXQgb2YgdGFnIG1lc3NhZ2UiCittc2dzdHIgIuqwleygnOuhnCDtg5zqt7gg66mU7Iuc7KeA66W8IO2OuOynke2VqeuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzozOTYKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICLso7zshJ0g64us66as6rOgIEdQRyDshJzrqoXtlZwg7YOc6re4IgorCisjOiBidWlsdGluL3RhZy5jOjQwMAorbXNnaWQgInVzZSBhbm90aGVyIGtleSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgIu2DnOq3uOulvCDshJzrqoXtlZjripTrjbAg7KeA7KCV7ZWcIO2CpOulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAxCittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAi7YOc6re46rCAIOyeiOycvOuptCDrsJTqv4nri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAyIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OAorbXNnaWQgImNyZWF0ZSBhIHJlZmxvZyIKK21zZ3N0ciAicmVmbG9n66W8IOunjOuTreuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzo0MDQKK21zZ2lkICJUYWcgbGlzdGluZyBvcHRpb25zIgorbXNnc3RyICLtg5zqt7gg66qp66GdIOuztOq4sCDsmLXshZgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA1Cittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICLtg5zqt7gg66qp66Gd7J2EIOyXrOufrCDsl7TroZwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjQwNiBidWlsdGluL3RhZy5jOjQwOAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi7ZW064u5IOy7pOuwi+ydtCDrk6TslrQg7J6I64qUIO2DnOq3uOunjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA3IGJ1aWx0aW4vdGFnLmM6NDA5Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLtlbTri7kg7Luk67CL7J20IOuTpOyWtCDsnojsp4Ag7JWK7J2AIO2DnOq3uOunjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDEwCittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAi67OR7ZWp65CcIO2DnOq3uOunjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDExCittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgIuuzke2VqeuQmOyngCDslYrsnYAg7YOc6re466eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzo0MTYKK21zZ2lkICJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAi7ZW064u5IOyYpOu4jOygne2KuOydmCDtg5zqt7jrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjQ2MAorbXNnaWQgIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiDrsI8gLW4g7Ji17IWY7J2AIO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDgyCittc2dpZCAiLW4gb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIi1uIOyYteyFmOydgCDrpqzsiqTtirgg66qo65Oc7JeQ7ISc66eMIO2XiOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzo0ODQKK21zZ2lkICItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICItLWNvbnRhaW5zIOyYteyFmOydgCDrpqzsiqTtirgg66qo65Oc7JeQ7ISc66eMIO2XiOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzo0ODYKK21zZ2lkICItLW5vLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICItLW5vLWNvbnRhaW5zIOyYteyFmOydgCDrpqzsiqTtirgg66qo65Oc7JeQ7ISc66eMIO2XiOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzo0ODgKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiLS1wb2ludHMtYXQg7Ji17IWY7J2AIOumrOyKpO2KuCDrqqjrk5zsl5DshJzrp4wg7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjQ5MAorbXNnaWQgIi0tbWVyZ2VkIGFuZCAtLW5vLW1lcmdlZCBvcHRpb25zIGFyZSBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICItLW1lcmdlZCDrsI8gLS1uby1tZXJnZWQg7Ji17IWY7J2AIOumrOyKpO2KuCDrqqjrk5zsl5DshJzrp4wg7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjUwMQorbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAi7ZWY64KY7J2YIC1GIOuYkOuKlCAtbSDsmLXshZjrp4wg7JO4IOyImCDsnojsirXri4jri6QuIgorCisjOiBidWlsdGluL3RhZy5jOjUyMAorbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAi7YyM652866+47YSw6rCAIOuEiOustCDrp47sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICInJXMn7J2AKOuKlCkg7Jis67CU66W4IO2DnOq3uCDsnbTrpoTsnbQg7JWE64uZ64uI64ukLiIKKworIzogYnVpbHRpbi90YWcuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIu2DnOq3uCAnJXMn7J20KOqwgCkg7J2066+4IOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzo1NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICLtg5zqt7ggJyVzJyDsl4XrjbDsnbTtirggKOqzvOqxsCAlcylcbiIKKworIzogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjQ5OAorbXNnaWQgIlVucGFja2luZyBvYmplY3RzIgorbXNnc3RyICLsmKTruIzsoJ3tirgg66y27J2MIO2RuOuKlCDspJEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIiVzIOuUlOugie2EsOumrCDrp4zrk6TquLAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICIlc+yXkCDrjIDtlbQgc3RhdCgp7J20IOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgIiVzIO2MjOydvOydhCDrp4zrk5zripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGZpbGUgJXMiCittc2dzdHIgIiVzIO2MjOydvOydhCDsgq3soJztlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExMyBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiJXMg65SU66CJ7YSw66as66W8IOyCreygnO2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRlc3RpbmcgbXRpbWUgaW4gJyVzJyAiCittc2dzdHIgIiclcycg7JWI7J2YIOyImOyglSDsi5zqsIHsnYQg7ZmV7J247ZWY64qUIOykkeyeheuLiOuLpCAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTUyCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGZpbGUiCittc2dzdHIgIuyDiCDtjIzsnbzsnYQg7LaU6rCA7ZWcIO2bhOyXkCDrlJTroInthLDrpqwg7KCV67O06rCAIOuwlOuAjOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTY1Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAi7IOIIOuUlOugie2EsOumrOulvCDstpTqsIDtlZwg7ZuE7JeQIOuUlOugie2EsOumrCDsoJXrs7TqsIAg67CU64CM7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNzgKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgdXBkYXRpbmcgYSBmaWxlIgorbXNnc3RyICLtjIzsnbzsnYQg7JeF642w7J207Yq47ZWcIO2bhOyXkCDrlJTroInthLDrpqwg7KCV67O06rCAIOuwlOuAjOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTg5Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIGFkZGluZyBhIGZpbGUgaW5zaWRlIHN1YmRpcmVjdG9yeSIKK21zZ3N0ciAi7ZWY7JyEIOuUlOugie2EsOumrOyXkCDtjIzsnbzsnYQg7LaU6rCA7ZWcIO2bhOyXkCDrlJTroInthLDrpqwg7KCV67O06rCAIOuwlOuAjOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjAwCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBmaWxlIgorbXNnc3RyICLtjIzsnbzsnYQg7IKt7KCc7ZWcIO2bhOyXkCDrlJTroInthLDrpqwg7KCV67O06rCAIOuwlOuAjOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjEzCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBkaXJlY3RvcnkiCittc2dzdHIgIuuUlOugie2EsOumrOulvCDsgq3soJztlZwg7ZuE7JeQIOuUlOugie2EsOumrCDsoJXrs7TqsIAg67CU64CM7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMjAKK21zZ2lkICIgT0siCittc2dzdHIgIiDsmKTsvIDsnbQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTg5Cittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgdXBkYXRlLWluZGV4IFs87Ji17IWYPl0gWy0tXSBbPO2MjOydvD4uLi5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NgorbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAi7J24642x7Iqk7JeQIOyXheuNsOydtO2KuOqwgCDtlYTsmpTtlZjrjZTrnbzrj4Qg7IOI66GcIOqzoOy5qOydhCDqs4Tsho3tlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQ5Cittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgIuyDiOuhnCDqs6Dsuag6IO2VmOychCDrqqjrk4gg66y07IucIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk1MgorbXNnaWQgImRvIG5vdCBpZ25vcmUgbmV3IGZpbGVzIgorbXNnc3RyICLsg4gg7YyM7J287J2EIOustOyLnO2VoCDsiJgg7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk1NAorbXNnaWQgImxldCBmaWxlcyByZXBsYWNlIGRpcmVjdG9yaWVzIGFuZCB2aWNlLXZlcnNhIgorbXNnc3RyICLrlJTroInthLDrpqzrpbwg7YyM7J2866GcLCDrmJDripQg6re4IOuwmOuMgOuhnCDrsJTqv4Ag7IiYIOyeiOqyjCDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTU2Cittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAi7J6R7JeF7Y+0642U7JeQ7IScIOyVjOumvCDtjIzsnbzsnbQg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk1OAorbXNnaWQgInJlZnJlc2ggZXZlbiBpZiBpbmRleCBjb250YWlucyB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICLsnbjrjbHsiqTsl5Ag67OR7ZWp7ZWY7KeAIOyViuydgCDtla3rqqnsnbQg7J6I7Ja064+EIOyDiOuhnCDqs6Dsuanri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTYxCittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICLtjIzsnbwg7KCV67O066W8IOyDiOuhnCDqs6Dsuanri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY1Cittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICItLXJlZnJlc2jsmYAg64+Z7J287ZWY7KeA66eMLCBhc3N1bWUtdW5jaGFuZ2VkIOyEpOygleydhCDrrLTsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY5Cittc2dpZCAiPG1vZGU+LDxvYmplY3Q+LDxwYXRoPiIKK21zZ3N0ciAiPOuqqOuTnD4sPOyYpOu4jOygne2KuD4sPOqyveuhnD4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTcwCittc2dpZCAiYWRkIHRoZSBzcGVjaWZpZWQgZW50cnkgdG8gdGhlIGluZGV4IgorbXNnc3RyICLsp4DsoJXtlZwg7ZWt66qp7J2EIOyduOuNseyKpOyXkCDstpTqsIDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc5Cittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICLtjIzsnbzsnYQgXCLrsJTqvrjsp4Ag7JWK7J2MXCLsnLzroZwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MgorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAi67CU6r647KeAIOyViuydjOycvOuhnCDqsIDsoJUgKGFzc3VtZWQtdW5jaGFuZ2VkKSDruYTtirjrpbwg7KeA7JuB64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NQorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgIu2MjOydvOydhCDsnbjrjbHsiqQg7KCE7Jqp7Jy866GcIChcImluZGV4LW9ubHlcIikg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4OAorbXNnaWQgImNsZWFyIHNraXAtd29ya3RyZWUgYml0IgorbXNnc3RyICLsnpHsl4Xtj7TrjZQg6rG064SI65uw6riwIChza2lwLXdvcmt0cmVlKSDruYTtirjrpbwg7KeA7JuB64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5MQorbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisi7J24642x7Iqk7JeQ66eMIOy2lOqwgO2VqeuLiOuLpC4g64K07Jqp7J2EIOyYpOu4jOygne2KuCDrjbDsnbTthLDrsqDsnbTsiqTsl5Ag7LaU6rCA7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTMKK21zZ2lkICJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIgorbXNnc3RyICLsnpHsl4Ug7Y+0642U7JeQIOyeiOyWtOuPhCDtlbTri7kg6rK966Gc66W8IOygnOqxsO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTUKK21zZ2lkICJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiCittc2dzdHIgIi0tc3RkaW7qs7wg6rCZ7J20IOyCrOyaqTog7J6F66ClIOykhOydgCBOVUwg67CU7J207Yq466GcIOuBneuCqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTcKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLtkZzspIAg7J6F66Cl7JeQ7IScIOyXheuNsOydtO2KuO2VoCDqsr3roZzsnZgg66qp66Gd7J2EIOydveyKteuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDAxCittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgIu2RnOykgCDsnoXroKXsl5DshJwg7J297J2AIO2VreuqqeydhCDsnbjrjbHsiqTsl5Ag7LaU6rCA7ZWp64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDUKK21zZ2lkICJyZXBvcHVsYXRlIHN0YWdlcyAjMiBhbmQgIzMgZm9yIHRoZSBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIuqyveuhnCDrqqnroZ3sl5Ag64yA7ZW0ICMyIOuwjyAjMyDsiqTthYzsnbTsp5XsnYQg64uk7IucIO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA5Cittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgIkhFQUTsmYAg64uk66W4IO2VreuqqeunjCDsl4XrjbDsnbTtirjtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxMworbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgIuyekeyXhSDtj7TrjZTsl5Ag7JeG64qUIO2MjOydvOydhCDrrLTsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNgorbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAi7ZGc7KSAIOy2nOugpeyXkCDrj5nsnpHsnYQg7JWM66a964uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTgKK21zZ2lkICIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIKK21zZ3N0ciAi7KCA7J6l7ZWcIO2VtOqysOuQmOyngCDslYrsnYAg7Lap64+M7J2EIOustOyLnO2VqeuLiOuLpCAo7IKs7Jqp7J6Q7JqpIOuqheuguSDsmqnrj4QpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjIKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAi7J24642x7Iqk66W8IOydtCDtmJXsi53snLzroZwg7JSB64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjQKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAi7Iqk7ZSM66a/IOyduOuNseyKpOulvCDsvJzqsbDrgpgg64GV64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjYKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIuy2lOygge2VmOyngCDslYrripQg7LqQ7IucIOyCrOyaqeydhCDsvJzqsbDrgpgg64GV64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjgKK21zZ2lkICJ0ZXN0IGlmIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAi7YyM7J28IOyLnOyKpO2FnOydtCDstpTsoIHtlZjsp4Ag7JWK64qUIOy6kOyLnOulvCDsp4Dsm5DtlZjripTsp4Ag6rKA7IKs7ZWp64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzAKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAi7YyM7J28IOyLnOyKpO2FnCDsi5ztl5gg7JeG7J20IOy2lOygge2VmOyngCDslYrripQg7LqQ7Iuc66W8IOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDMyCittc2dpZCAid3JpdGUgb3V0IHRoZSBpbmRleCBldmVuIGlmIGlzIG5vdCBmbGFnZ2VkIGFzIGNoYW5nZWQiCittc2dzdHIgIuuzgOqyveuQnCDqsoPsnLzroZwg7ZGc7Iuc65CY7KeAIOyViuydgCDqsr3smrDsl5Drj4Qg7J24642x7Iqk7JeQIOyUgeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDM0Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgZmlsZSBzeXN0ZW0gbW9uaXRvciIKK21zZ3N0ciAi7YyM7J28IOyLnOyKpO2FnCDrqqjri4jthLDrpbwg7Lyc6rGw64KYIOuBleuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDM2Cittc2dpZCAibWFyayBmaWxlcyBhcyBmc21vbml0b3IgdmFsaWQiCittc2dzdHIgIiIKKyLtjIzsnbwg7Iuc7Iqk7YWcIOuqqOuLiO2EsOungSDquLDriqXsnbQg67OA6rK97IKs7ZWt7J2EIO2ZleyduO2VmOuKlCDruYTtirjrpbwg7YyM7J287JeQIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDM5Cittc2dpZCAiY2xlYXIgZnNtb25pdG9yIHZhbGlkIGJpdCIKK21zZ3N0ciAi7YyM7J28IOyLnOyKpO2FnCDrqqjri4jthLDrp4Eg6riw64ql7J20IOuzgOqyveyCrO2VreydhCDtmZXsnbjtlZjripQg67mE7Yq466W8IOyngOybgeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTM4Cittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZW5hYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IOqwkuydtCDqsbDsp5PsnoXri4jri6QuIOygleunkOuhnCDsiqTtlIzrpr8g7J24642x7Iqk66W8IOyCrOyaqe2VmOugpOuptCDsnbQg6rCS7J2EIOygnCIKKyLqsbDtlZjqsbDrgpgg67CU6r647Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTQ3Cittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IOqwkuydtCDssLjsnoXri4jri6QuIOygleunkOuhnCDsiqTtlIzrpr8g7J24642x7Iqk66W8IOyCrOyaqe2VmOyngCDslYrsnLzroKTrqbQg7J20IOqwkiIKKyLsnYQg7KCc6rGw7ZWY6rGw64KYIOuwlOq+uOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE1OAorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGRpc2FibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUg6rCS7J20IOywuOyeheuLiOuLpC4g7KCV66eQ66GcIOy2lOygge2VmOyngCDslYrripQg7LqQ7Iuc66W8IOyCrOyaqe2VmOyngCDslYrsnLwiCisi66Ck66m0IOydtCDqsJLsnYQg7KCc6rGw7ZWY6rGw64KYIOuwlOq+uOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE2MgorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAi7LaU7KCB65CY7KeAIOyViuuKlCDtjIzsnbwg7LqQ7Iuc66W8IOyCrOyaqe2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE3MAorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBlbmFibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUg6rCS7J20IOqxsOynk+yeheuLiOuLpC4g7KCV66eQ66GcIOy2lOygge2VmOyngCDslYrripQg7LqQ7Iuc66W8IOyCrOyaqe2VmOugpOuptCAiCisi7J20IOqwkuydhCDsoJzqsbDtlZjqsbDrgpgg67CU6r647Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICInJXMn7JeQIOuMgO2VtCDstpTsoIHrkJjsp4Ag7JWK64qUIOy6kOyLnOulvCDsgqzsmqntlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExODIKK21zZ2lkICJjb3JlLmZzbW9uaXRvciBpcyB1bnNldDsgc2V0IGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBlbmFibGUgZnNtb25pdG9yIgorbXNnc3RyICIiCisiY29yZS5mc21vbml0b3LqsIAg7ISk7KCV65CY7KeAIOyViuyVmOyKteuLiOuLpC4g7KCV66eQ66GcIO2MjOydvCDsi5zsiqTthZwg66qo64uI7YSw66W8IOyCrOyaqe2VmOugpOuptCAiCisi7ISk7KCV7ZWY7Iut7Iuc7JikIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExODYKK21zZ2lkICJmc21vbml0b3IgZW5hYmxlZCIKK21zZ3N0ciAi7YyM7J28IOyLnOyKpO2FnCDrqqjri4jthLDqsIAg7Lyc7KGM7Iq164uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExODkKK21zZ2lkICIiCisiY29yZS5mc21vbml0b3IgaXMgc2V0OyByZW1vdmUgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGRpc2FibGUgZnNtb25pdG9yIgorbXNnc3RyICIiCisiY29yZS5mc21vbml0b3LqsIAg7ISk7KCV65CY7Ja0IOyeiOyKteuLiOuLpC4g7KCV66eQ66GcIO2MjOydvCDsi5zsiqTthZwg66qo64uI7YSw66W8IOyCrOyaqe2VmOyngCDslYrsnLwiCisi66Ck66m0IOyEpOygleydhCDsoJzqsbDtlZjsi63si5zsmKQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE5MworbXNnaWQgImZzbW9uaXRvciBkaXNhYmxlZCIKK21zZ3N0ciAi7YyM7J28IOyLnOyKpO2FnCDrqqjri4jthLDqsIAg6rq87KGM7Iq164uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMAorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC1kIDxyZWZuYW1lPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzzsmLXshZg+XSAtZCA866CI7Y2865+w7Iqk7J2066aEPiBbPOqzvOqxsC3qsJI+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPOyYteyFmD5dICAgIDzroIjtjbzrn7DsiqTsnbTrpoQ+IDzsg4gt6rCSPiBbPOqzvOqxsC3qsJI+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTIKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtLXN0ZGluIFstel0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs87Ji17IWYPl0gLS1zdGRpbiBbLXpdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJkZWxldGUgdGhlIHJlZmVyZW5jZSIKK21zZ3N0ciAi66CI7Y2865+w7Iqk66W8IOyCreygnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY1Cittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgIjzroIjtjbzrn7DsiqTsnbTrpoQ+7J2EIOqwgOumrO2CpOyngCDslYrripQg7ZWt66qp7Jy866GcIOyXheuNsOydtO2KuO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY2Cittc2dpZCAic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIKK21zZ3N0ciAi7ZGc7KSAIOyeheugpeyXkCBOVUzroZwg64Gd64KY64qUIOyduOyekOqwgCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NworbXNnaWQgInJlYWQgdXBkYXRlcyBmcm9tIHN0ZGluIgorbXNnc3RyICLtkZzspIAg7J6F66Cl7JeQ7IScIOyXheuNsOydtO2KuOulvCDsnb3sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6NworbXNnaWQgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorbXNnc3RyICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNQorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgIuuwlOuLpeu2gO2EsCDsoJXrs7Qg7YyM7J287J2EIOyXheuNsOydtO2KuO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjExCittc2dpZCAiZ2l0IHVwbG9hZC1wYWNrIFs8b3B0aW9ucz5dIDxkaXI+IgorbXNnc3RyICJnaXQgdXBsb2FkLXBhY2sgWzzsmLXshZg+XSA865SU66CJ7YSw66asPiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI1Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBpbml0aWFsIHJlZiBhZHZlcnRpc2VtZW50IgorbXNnc3RyICLstZzstIgg66CI7Y2865+w7IqkIOyVjOumvCDrkqTsl5Ag7KaJ7IucIOuBneuCqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI3Cittc2dpZCAiZG8gbm90IHRyeSA8ZGlyZWN0b3J5Pi8uZ2l0LyBpZiA8ZGlyZWN0b3J5PiBpcyBubyBHaXQgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiPOuUlOugie2EsOumrD7qsIAg6rmDIOuUlOugie2EsOumrOqwgCDslYTri4jrqbQgPOuUlOugie2EsOumrD4vLmdpdC8g7Y+0642U66W8IOyLnOuPhO2VmOyngCDslYrsirXri4jri6QuIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjkKK21zZ2lkICJpbnRlcnJ1cHQgdHJhbnNmZXIgYWZ0ZXIgPG4+IHNlY29uZHMgb2YgaW5hY3Rpdml0eSIKK21zZ3N0ciAiPG4+7LSIIOuPmeyViCDrsJjsnZHsnbQg7JeG7Jy866m0IOyghOyGoeydhCDspJHsp4Dtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjE4Cittc2dpZCAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA87Luk67CLPi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NzMKK21zZ2lkICJwcmludCBjb21taXQgY29udGVudHMiCittc2dzdHIgIuy7pOuwiyDrgrTsmqnsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo3NCBidWlsdGluL3ZlcmlmeS10YWcuYzozOAorbXNnaWQgInByaW50IHJhdyBncGcgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAi7JuQ67O4IEdQRyDsg4Htg5zrpbwg7Lac66Cl7ZWp64uI64ukIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NTUKK21zZ2lkICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPOustuydjD4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NQorbXNnaWQgInZlcmJvc2UiCittc2dzdHIgIuyekOyEuO2eiCDtkZzsi5wiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NworbXNnaWQgInNob3cgc3RhdGlzdGljcyBvbmx5IgorbXNnc3RyICLthrXqs4Trp4wg7ZGc7IucIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxOQorbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PO2YleyLnT5dIDztg5zqt7g+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozNworbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAi7YOc6re4IOuCtOyaqSDtkZzsi5wiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNworbXNnaWQgImdpdCB3b3JrdHJlZSBhZGQgWzxvcHRpb25zPl0gPHBhdGg+IFs8Y29tbWl0LWlzaD5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgYWRkIFs87Ji17IWYPl0gPOqyveuhnD4gWzzsu6TrsIst65Sw7JyEPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOAorbXNnaWQgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgbGlzdCBbPOyYteyFmD5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTkKK21zZ2lkICJnaXQgd29ya3RyZWUgbG9jayBbPG9wdGlvbnM+XSA8cGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsb2NrIFs87Ji17IWYPl0gPOqyveuhnD4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMAorbXNnaWQgImdpdCB3b3JrdHJlZSBtb3ZlIDx3b3JrdHJlZT4gPG5ldy1wYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIG1vdmUgPOyekeyXhe2KuOumrD4gPOyDiC3qsr3roZw+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjEKK21zZ2lkICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBwcnVuZSBbPOyYteyFmD5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjIKK21zZ2lkICJnaXQgd29ya3RyZWUgcmVtb3ZlIFs8b3B0aW9ucz5dIDx3b3JrdHJlZT4iCittc2dzdHIgImdpdCB3b3JrdHJlZSByZW1vdmUgWzzsmLXshZg+XSA87J6R7JeF7Yq466asPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzCittc2dpZCAiZ2l0IHdvcmt0cmVlIHVubG9jayA8cGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSB1bmxvY2sgPOqyveuhnD4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIKK21zZ3N0ciAid29ya3RyZWVzLyVzIOygnOqxsDog7Jis67CU66W4IOuUlOugie2EsOumrOqwgCDslYTri5nrgpjri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJ3b3JrdHJlZXMvJXMg7KCc6rGwOiBnaXRkaXIg7YyM7J287J20IOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5IGJ1aWx0aW4vd29ya3RyZWUuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHVuYWJsZSB0byByZWFkIGdpdGRpciBmaWxlICglcykiCittc2dzdHIgIndvcmt0cmVlcy8lcyDsoJzqsbA6IGdpdGRpciDtjIzsnbzsnYQg7J297J2EIOyImCDsl4bsirXri4jri6QgKCVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHNob3J0IHJlYWQgKGV4cGVjdGVkICU8UFJJdU1BWD4gYnl0ZXMsIHJlYWQgIgorIiU8UFJJdU1BWD4pIgorbXNnc3RyICIiCisi7J6R7JeFIO2KuOumrCDsoJzqsbAvJXM6IOu2gOyhse2VmOqyjCDsnb3snYwgKCU8UFJJdU1BWD4g67CU7J207Yq4IOyYiOyDgSwgJTxQUkl1TUFYPiDrsJTsnbTtirggIgorIuydveydjCkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgIndvcmt0cmVlcy8lcyDsoJzqsbA6IGdpdGRpciDtjIzsnbzsnbQg7Jis67CU66W07KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIHBvaW50cyB0byBub24tZXhpc3RlbnQgbG9jYXRpb24iCittc2dzdHIgIndvcmt0cmVlcy8lcyDsoJzqsbA6IGdpdGRpciDtjIzsnbzsnbQg7JeG64qUIOychOy5mOulvCDqsIDrpqztgrXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNTIKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIHdvcmtpbmcgdHJlZXMiCittc2dzdHIgIuyemOudvOuCuCDsnpHsl4Ug7Y+0642U66W8IOyVjOumveuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE1NAorbXNnaWQgImV4cGlyZSB3b3JraW5nIHRyZWVzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICI87Iuc6rCBPuuztOuLpCDsmKTrnpgg65CcIOyekeyXhSDtj7TrjZTrpbwg66eM66OM7ZWp64uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiclcyfsnbQo6rCAKSDsnbTrr7gg7J6I7Iq164uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IG9mICclcyciCittc2dzdHIgIiclcyfsnZgg65SU66CJ7YSw66as66W8IOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzczIGJ1aWx0aW4vd29ya3RyZWUuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChuZXcgYnJhbmNoICclcycpIgorbXNnc3RyICLsnpHsl4Ug7Yq466asIOykgOu5hCDspJEgKOyDiCDruIzrnpzsuZggJyVzJykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChyZXNldHRpbmcgYnJhbmNoICclcyc7IHdhcyBhdCAlcykiCittc2dzdHIgIuyekeyXhSDtirjrpqwg7KSA67mEIOykkSAoJyVzJyDruIzrnpzsuZgg7J6s7ISk7KCVIOykkS4g7JuQ656YIOychOy5mCAlcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChjaGVja2luZyBvdXQgJyVzJykiCittc2dzdHIgIuyekeyXhSDtirjrpqwg7KSA67mEIOykkSAoJyVzJyDqsIDsoLjsmKTripQg7KSRKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGRldGFjaGVkIEhFQUQgJXMpIgorbXNnc3RyICLsnpHsl4Ug7Yq466asIOykgOu5hCDspJEgKOu2hOumrOuQnCBIRUFEICVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzMQorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGV2ZW4gaWYgYWxyZWFkeSBjaGVja2VkIG91dCBpbiBvdGhlciB3b3JrdHJlZSIKK21zZ3N0ciAi64uk66W4IOyekeyXhSDtj7TrjZTsl5DshJwg7LK07YGs7JWE7JuD7ZaI642U652864+EIDzruIzrnpzsuZg+66W8IOyytO2BrOyVhOybg+2VqeuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzNAorbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgIuyDiCDruIzrnpzsuZjrpbwg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDM2Cittc2dpZCAiY3JlYXRlIG9yIHJlc2V0IGEgYnJhbmNoIgorbXNnc3RyICLruIzrnpzsuZjrpbwg66eM65Ok6rGw64KYIOumrOyFi+2VqeuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzOAorbXNnaWQgInBvcHVsYXRlIHRoZSBuZXcgd29ya2luZyB0cmVlIgorbXNnc3RyICLsg4gg7J6R7JeFIO2PtOuNlOulvCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzkKK21zZ2lkICJrZWVwIHRoZSBuZXcgd29ya2luZyB0cmVlIGxvY2tlZCIKK21zZ3N0ciAi7IOIIOyekeyXhSDtj7TrjZTrpbwg7J6g6raIIOuRoeuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0MQorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LWJyYW5jaCgxKSkiCittc2dzdHIgIuy2lOyggSDrqqjrk5zrpbwg7ISk7KCV7ZWp64uI64ukIChnaXQtYnJhbmNoKDEpIOywuOqzoCkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDQKK21zZ2lkICJ0cnkgdG8gbWF0Y2ggdGhlIG5ldyBicmFuY2ggbmFtZSB3aXRoIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi7IOIIOu4jOuenOy5mCDsnbTrpoTqs7wg66as66qo7Yq4IOy2lOyggSDruIzrnpzsuZjrpbwg7J287LmYIOyLnO2CteuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ1MgorbXNnaWQgIi1iLCAtQiwgYW5kIC0tZGV0YWNoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1iLCAtQiwgLS1kZXRhY2gg7Ji17IWYIOykkSDtlZjrgpjrp4wg7JO4IOyImCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MTEKK21zZ2lkICItLVtuby1ddHJhY2sgY2FuIG9ubHkgYmUgdXNlZCBpZiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCIKK21zZ3N0ciAiLS1bbm8tXXRyYWNrIOyYteyFmOydgCDsg4jroZzsmrQg67iM65+w7LmY6rCAIOyDneyEseuQmOyXiOydhCDqsr3smrDsl5Drp4wg7JO4IOyImCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2MTEKK21zZ2lkICJyZWFzb24gZm9yIGxvY2tpbmciCittc2dzdHIgIuyeoOq3uOuKlCDsnbTsnKAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2MjMgYnVpbHRpbi93b3JrdHJlZS5jOjY1NiBidWlsdGluL3dvcmt0cmVlLmM6NzEwCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMn7J2AKOuKlCkg7J6R7JeFIO2PtOuNlOqwgCDslYTri5nri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2MjUgYnVpbHRpbi93b3JrdHJlZS5jOjY1OAorbXNnaWQgIlRoZSBtYWluIHdvcmtpbmcgdHJlZSBjYW5ub3QgYmUgbG9ja2VkIG9yIHVubG9ja2VkIgorbXNnc3RyICLrqZTsnbgg7J6R7JeFIO2PtOuNlOulvCDsnqDqt7jqsbDrgpgg7J6g6riIIO2VtOygnO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQsIHJlYXNvbjogJXMiCittc2dzdHIgIiclcyfsnYAo64qUKSDsnbTrr7gg7J6g6rK87Iq164uI64ukLiDsnbTsnKA6ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiCittc2dzdHIgIiclcyfsnYAo64qUKSDsnbTrr7gg7J6g6rK87Iq164uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiJyVzJ+ydgCjripQpIOyeoOq4sOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2ODUKK21zZ2lkICJ3b3JraW5nIHRyZWVzIGNvbnRhaW5pbmcgc3VibW9kdWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVtb3ZlZCIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiOydtCDtj6ztlajrkJwg7J6R7JeFIO2PtOuNlOuKlCDsmK7quLDqsbDrgpgg7KCc6rGw7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MTIgYnVpbHRpbi93b3JrdHJlZS5jOjg1MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGEgbWFpbiB3b3JraW5nIHRyZWUiCittc2dzdHIgIiclcyfsnYAo64qUKSDrqZTsnbgg7J6R7JeFIO2PtOuNlOyeheuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmlndXJlIG91dCBkZXN0aW5hdGlvbiBuYW1lIGZyb20gJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkOyEnCDrjIDsg4Eg7J2066aE7J2EIOywvuydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhcmdldCAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLtg4DqsowgJyVzJ+ydtCjqsIApIOydtOuvuCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXMiCittc2dzdHIgIuyeoOq4tCDsnpHsl4Ug7Y+0642U66W8IOyYruq4uCDsiJgg7JeG7Iq164uI64ukLiDsnqDquLQg7J207JygOiAlcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjczMgorbXNnaWQgImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi7J6g6ri0IOyekeyXhSDtj7TrjZTrpbwg7Jiu6ri4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCBtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgIuycoO2aqOyEsSDqsoDsgqzsl5Ag7Iuk7Yyo7ZWY7JesLCDsnpHsl4Ug7Y+0642U66W8IOyYruq4uCDsiJgg7JeG7Iq164uI64ukOiAlcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc0MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbW92ZSAnJXMnIHRvICclcyciCittc2dzdHIgIiclcyfsnYQo66W8KSAnJXMnKOycvCnroZwg7Jiu6riw64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnIgorbXNnc3RyICInJXMn7JeQ7IScICdnaXQgc3RhdHVzJ+ulvCDsi6TtlontlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgZGlydHksIHVzZSAtLWZvcmNlIHRvIGRlbGV0ZSBpdCIKK21zZ3N0ciAiJyVzJ+ydtCjqsIApIOuzgOqyvSDrkJjsl4jsirXri4jri6QsICDsgq3soJztlZjroKTrqbQgLS1mb3JjZeulvCDsgqzsmqntlZjsi63si5zsmKQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJywgY29kZSAlZCIKK21zZ3N0ciAiJyVzJ+yXkOyEnCAnZ2l0IHN0YXR1cyfrpbwg7Iuk7ZaJ7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCwgIOy9lOuTnCAlZCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwOCBidWlsdGluL3dvcmt0cmVlLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOyCreygnO2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MzQKK21zZ2lkICJmb3JjZSByZW1vdmluZyBldmVuIGlmIHRoZSB3b3JrdHJlZSBpcyBkaXJ0eSIKK21zZ3N0ciAi7J6R7JeF7Yq466as7JeQIOuzgOqyveyCrO2VreydtCDsnojrjZTrnbzrj4Qg6rCV7KCc66GcIOygnOqxsO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzIgorbXNnc3RyICLsnqDquLQg7J6R7JeFIO2PtOuNlOulvCDsoJzqsbDtlaAg7IiYIOyXhuyKteuLiOuLpC4g7J6g6ri0IOydtOycoDogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NTgKK21zZ2lkICJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi7J6g6ri0IOyekeyXhSDtj7TrjZTrpbwg7KCc6rGw7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCByZW1vdmUgd29ya2luZyB0cmVlOiAlcyIKK21zZ3N0ciAi7Jyg7Zqo7ISxIOqygOyCrOyXkCDsi6TtjKjtlZjsl6wsIOyekeyXhSDtj7TrjZTrpbwg7KCc6rGw7ZWgIOyImCDsl4bsirXri4jri6Q6ICVzIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoxNAorbXNnaWQgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9POygkeuRkOyWtD4vXSIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjcKK21zZ2lkICI8cHJlZml4Pi8iCittc2dzdHIgIjzsoJHrkZDslrQ+LyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjgKK21zZ2lkICJ3cml0ZSB0cmVlIG9iamVjdCBmb3IgYSBzdWJkaXJlY3RvcnkgPHByZWZpeD4iCittc2dzdHIgIu2VmOychCDrlJTroInthLDrpqwgPOygkeuRkOyWtD7sl5Ag64yA7ZW0IO2KuOumrCDsmKTruIzsoJ3tirjrpbwg7JSB64uI64ukIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMQorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgIuuUlOuyhOq5hSDsmqnrj4TroZzrp4wg7IKs7JqpIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwZXJtaXNzaW9ucyBvbiB5b3VyIHNvY2tldCBkaXJlY3RvcnkgYXJlIHRvbyBsb29zZTsgb3RoZXJcbiIKKyJ1c2VycyBtYXkgYmUgYWJsZSB0byByZWFkIHlvdXIgY2FjaGVkIGNyZWRlbnRpYWxzLiBDb25zaWRlciBydW5uaW5nOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKK21zZ3N0ciAiIgorIuyGjOy8kyDrlJTroInthLDrpqzsnZgg6raM7ZWc7J20IOuEiOustCDripDsiqjtlanri4jri6QuIOuLpOuluCDsgqzsmqnsnpDqsIBcbiIKKyLsupDsi5zsl5Ag65Ok7Ja0IOyeiOuKlCDruYTrsIAg7KCV67O066W8IOydveydhCDsiJgg7J6I7Iq164uI64ukLiDri6TsnYzsnYQg7Iuk7ZaJ7ZW0IOuztOyLreyLnOyYpDpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjI3MQorbXNnaWQgInByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyB0byBzdGRlcnIiCittc2dzdHIgIuuUlOuyhOq5hSDrqZTsi5zsp4Drpbwg7ZGc7KSA7Jik66WY66GcIOy2nOugpe2VqeuLiOuLpCIKKworIzogZ2l0LmM6MjcKK21zZ2lkICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8cGF0aD5dIFstYyA8bmFtZT49PHZhbHVlPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PHBhdGg+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PHBhdGg+XSBbLS13b3JrLXRyZWU9PHBhdGg+XSBbLS1uYW1lc3BhY2U9PG5hbWU+XVxuIgorIiAgICAgICAgICAgPGNvbW1hbmQ+IFs8YXJncz5dIgorbXNnc3RyICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA86rK966GcPl0gWy1jIDzsnbTrpoQ+PTzqsJI+XVxuIgorIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz086rK966GcPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tcGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tIgorImJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPTzqsr3roZw+XSBbLS13b3JrLXRyZWU9POqyveuhnD5dIFstLW5hbWVzcGFjZT087J2066aEPl1cbiIKKyIgICAgICAgICAgIDzrqoXroLk+IFs87J247J6QPl0iCisKKyM6IGdpdC5jOjM0Cittc2dpZCAiIgorIidnaXQgaGVscCAtYScgYW5kICdnaXQgaGVscCAtZycgbGlzdCBhdmFpbGFibGUgc3ViY29tbWFuZHMgYW5kIHNvbWVcbiIKKyJjb25jZXB0IGd1aWRlcy4gU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIG9yICdnaXQgaGVscCA8Y29uY2VwdD4nXG4iCisidG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQgb3IgY29uY2VwdC4iCittc2dzdHIgIiIKKyInZ2l0IGhlbHAgLWEnIOuwjyAnZ2l0IGhlbHAgLWcnIOuqheugueydhCDsi6TtlontlZjrqbQg7ZWY7JyEIOuqheugueyWtOyZgCDqsJzrhZAg7ISk66qF7ISc7J2YXG4iCisi66qp66Gd7J2EIOuzvCDsiJgg7J6I7Iq164uI64ukLiDtirnsoJUg7ZWY7JyEIOuqheugueyWtOuCmCDqsJzrhZDsl5Ag64yA7ZW0IOydveyWtCDrs7TroKTrqbQgJ2dpdCBoZWxwXG4iCisiPOuqheuguT4nIOuYkOuKlCAnZ2l0IGhlbHAgPOqwnOuFkD4nIOuqheugueydhCDsi6TtlontlZjsi63si5zsmKQuIgorCisjOiBnaXQuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLWdpdC1kaXJcbiIKK21zZ3N0ciAiLS1naXQtZGly7JeQIOuMgO2VnCDso7zslrTsp4Qg65SU66CJ7YSw66as6rCAIOyXhuyKteuLiOuLpFxuIgorCisjOiBnaXQuYzoxODcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbmFtZXNwYWNlIGdpdmVuIGZvciAtLW5hbWVzcGFjZVxuIgorbXNnc3RyICItLW5hbWVzcGFjZeyXkCDrjIDtlZwg7KO87Ja07KeEIOuEpOyehCDsiqTtjpjsnbTsiqTqsIAg7JeG7Iq164uI64ukXG4iCisKKyM6IGdpdC5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgIi0td29yay10cmVl7JeQIOuMgO2VnCDso7zslrTsp4Qg65SU66CJ7YSw66as6rCAIOyXhuyKteuLiOuLpFxuIgorCisjOiBnaXQuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJlZml4IGdpdmVuIGZvciAtLXN1cGVyLXByZWZpeFxuIgorbXNnc3RyICItLXN1cGVyLXByZWZpeOyXkCDrjIDtlZwg7KCR65GQ7Ja06rCAIOyjvOyWtOyngOyngCDslYrslZjsirXri4jri6RcbiIKKworIzogZ2l0LmM6MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIi1jIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIHN0cmluZ1xuIgorbXNnc3RyICItY+uKlCDsmLXshZjsl5DripQg7ISk7KCVIOusuOyekOyXtOydtCDsmYDslbwg7ZWp64uI64ukXG4iCisKKyM6IGdpdC5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC1DXG4iCittc2dzdHIgIi1DIOyYteyFmOyXkCDso7zslrTsp4Qg65SU66CJ7YSw66as6rCAIOyXhuyKteuLiOuLpFxuIgorCisjOiBnaXQuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIOyYteyFmDogJXNcbiIKKworIzogZ2l0LmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGFuc2lvbiBvZiBhbGlhcyAnJXMnIGZhaWxlZDsgJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZFxuIgorbXNnc3RyICLrs4Tsua0gJyVzJ+ydmCDtmZXsnqXsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukLiAnJXMn7J2AKOuKlCkg6rmDIOuqheugueydtCDslYTri5nri4jri6RcbiIKKworIzogZ2l0LmM6Nzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gY29tbWFuZCAnJXMnOiAlc1xuIgorbXNnc3RyICInJXMn7J2EKOulvCkg7Jes64qU642wIOyLpO2MqDogJXNcbiIKKworIzogaHR0cC5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZSBmb3IgaHR0cC5wb3N0YnVmZmVyOyBkZWZhdWx0aW5nIHRvICVkIgorbXNnc3RyICJodHRwLnBvc3RidWZmZXLsnbQgMOuztOuLpCDsnpHsnYAg6rCS7J6F64uI64ukLiDquLDrs7jqsJIgJWQiCisKKyMgSFRUUCBkZWxlZ2F0aW9uCisjOiBodHRwLmM6MzY5Cittc2dpZCAiRGVsZWdhdGlvbiBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4yMi4wIgorbXNnc3RyICLrlJzrpqzqsozsnbTshZgg7Luo7Yq466Gk7J2AIGNVUkwgNy40NC4wIOyVniDrsoTsoITsl5DshJzripQg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogaHR0cC5jOjM3OAorbXNnaWQgIlB1YmxpYyBrZXkgcGlubmluZyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAi6rO16rCcIO2CpCDqs6DsoJXsnYAgY1VSTCA3LjQ0LjAg7JWeIOuyhOyghOyXkOyEnOuKlCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBodHRwLmM6MTg1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIHVwZGF0ZSB1cmwgYmFzZSBmcm9tIHJlZGlyZWN0aW9uOlxuIgorIiAgYXNrZWQgZm9yOiAlc1xuIgorIiAgIHJlZGlyZWN0OiAlcyIKK21zZ3N0ciAiIgorIuumrOuLpOydtOugieyFmOyXkOyEnCBVUkwg67Kg7J207Iqk66W8IOyXheuNsOydtO2KuO2VoCDsiJgg7JeG7Iq164uI64ukOlxuIgorIiAgICAgICDsmpTssq06ICVzXG4iCisiIOumrOuLpOydtOugie2KuDogJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIHRvICVzIgorbXNnc3RyICIlcyjsnLwp66GcIOumrOuLpOydtOugie2KuCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6NTkKK21zZ2lkICJhcmdzIgorbXNnc3RyICLsnbjsnpAiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oOjYwCittc2dpZCAib2JqZWN0IGZpbHRlcmluZyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IO2VhO2EsOungSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE1NworbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICLrp4zro4wt7Iuc6rCBIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTcyCittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICLslYTrrLQg64+Z7J6R64+EIO2VmOyngCDslYrsnYwgKO2YuO2ZmOyaqSkiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyNTEKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgIuuNlCDsnpDshLjtnogg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjUzCittc2dpZCAiYmUgbW9yZSBxdWlldCIKK21zZ3N0ciAi642UIOqwhOuete2eiCDtkZzsi5ztlanri4jri6QiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyNTkKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAiU0hBLTEg7ZGc7Iuc7JeQIDxuPuqwnOydmCDsiKvsnpDrpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MAorbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi7YyM7J28IOuCtOyaqeydhCDsnbjrjbHsiqTsl5Ag7LaU6rCA7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MQorbXNnaWQgIkFwcGx5IGEgc2VyaWVzIG9mIHBhdGNoZXMgZnJvbSBhIG1haWxib3giCittc2dzdHIgIuuplOydvO2VqOyXkOyEnCDsl7Dsho3rkJwg7Yyo7LmY66W8IOyggeyaqe2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NTIKK21zZ2lkICJBbm5vdGF0ZSBmaWxlIGxpbmVzIHdpdGggY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICLtjIzsnbwg7KSE66eI64ukIOy7pOuwiyDsoJXrs7Trpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MworbXNnaWQgIkFwcGx5IGEgcGF0Y2ggdG8gZmlsZXMgYW5kL29yIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi7Yyo7LmY66W8IO2MjOydvCDrsI8v65iQ64qUIOyduOuNseyKpOyXkCDsoIHsmqntlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU0Cittc2dpZCAiSW1wb3J0IGFuIEFyY2ggcmVwb3NpdG9yeSBpbnRvIEdpdCIKK21zZ3N0ciAiYXJjaCDsoIDsnqXshozrpbwg6rmDIOyggOyepeyGjOuhnCDqsIDsoLjsmLXri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU1Cittc2dpZCAiQ3JlYXRlIGFuIGFyY2hpdmUgb2YgZmlsZXMgZnJvbSBhIG5hbWVkIHRyZWUiCittc2dzdHIgIuyngOygle2VnCDtirjrpqzsl5Ag65Ok7Ja0IOyeiOuKlCDtjIzsnbzsnZgg7JWE7Lm07J2067iM66W8IOunjOuTreuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NTYKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICLsnbTsp4Qg7YOQ7IOJ7Jy866GcIOuyhOq3uOulvCDrp4zrk6TslrTrgrgg7Luk67CL7J2EIOywvuyKteuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NTcKK21zZ2lkICJTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUiCittc2dzdHIgIu2MjOydvCDspITrp4jri6Qg64Gd7JeQIOuniOyngOunieycvOuhnCDsiJjsoJXtlZwg66as67mE7KCE6rO8IOyekeyEseyekOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU4Cittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgIuu4jOuenOy5mOulvCDrp4zrk6TqsbDrgpgsIOyCreygnO2VmOqxsOuCmCwg66qp66Gd7J2EIOy2nOugpe2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NTkKK21zZ2lkICJNb3ZlIG9iamVjdHMgYW5kIHJlZnMgYnkgYXJjaGl2ZSIKK21zZ3N0ciAi7JWE7Lm07J2067iMIO2Yle2DnOuhnCDsmKTruIzsoJ3tirjsmYAg66CI7Y2865+w7Iqk66W8IOyYruq5geuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NjAKK21zZ2lkICJQcm92aWRlIGNvbnRlbnQgb3IgdHlwZSBhbmQgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVwb3NpdG9yeSBvYmplY3RzIgorbXNnc3RyICLsoIDsnqXshowg7Jik67iM7KCd7Yq47JeQIOuMgO2VtCDrgrTsmqkg65iQ64qUIOyiheulmOyZgCDtgazquLAg7KCV67O066W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NjEKK21zZ2lkICJEaXNwbGF5IGdpdGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24iCittc2dzdHIgImdpdGF0dHJpYnV0ZXMg7KCV67O066W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NjIKK21zZ2lkICJEZWJ1ZyBnaXRpZ25vcmUgLyBleGNsdWRlIGZpbGVzIgorbXNnc3RyICJnaXRpZ25vcmUgLyDsoJzsmbjtlaAg7YyM7J287J2EIOuUlOuyhOq5he2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NjMKK21zZ2lkICJTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzIgorbXNnc3RyICLsl7Drnb3sspjsnZgg7KCE7LK0IOydtOumhOqzvCDrqZTsnbwg7KO87IaM66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NjQKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIuu4jOuenOy5mOulvCDsoITtmZjtlZjqsbDrgpgg7J6R7JeFIO2MjOydvOydhCDrs7Xqtaztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY1Cittc2dpZCAiQ29weSBmaWxlcyBmcm9tIHRoZSBpbmRleCB0byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLsnbjrjbHsiqTsnZgg7YyM7J287J2EIOyekeyXhSDtj7TrjZTroZwg67O17IKs7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NgorbXNnaWQgIkVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBuYW1lIGlzIHdlbGwgZm9ybWVkIgorbXNnc3RyICLroIjtjbzrn7DsiqQg7J2066aE7J2YIO2YleyLneydtCDsmKzrsJTrpbjsp4Ag7ZmV7J247ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NworbXNnaWQgIkZpbmQgY29tbWl0cyB5ZXQgdG8gYmUgYXBwbGllZCB0byB1cHN0cmVhbSIKK21zZ3N0ciAi7JeF7Iqk7Yq466a87JeQIOyggeyaqe2VtOyVvCDtlaAg7Luk67CL7J2EIOywvuyKteuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NjgKK21zZ2lkICJBcHBseSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IHNvbWUgZXhpc3RpbmcgY29tbWl0cyIKK21zZ3N0ciAi6riw7KG0IOy7pOuwi+ycvOuhnCDrsJzsg53tlZwg67OA6rK9IOyCrO2VreydhCDsoIHsmqntlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY5Cittc2dpZCAiR3JhcGhpY2FsIGFsdGVybmF0aXZlIHRvIGdpdC1jb21taXQiCittc2dzdHIgImdpdC1jb21taXTsnZgg6re4656Y7ZS9IOuMgOyytCDrsoTsoIQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcwCittc2dpZCAiUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuyekeyXhSDtj7TrjZTsl5DshJwg7LaU7KCB65CY7KeAIOyViuuKlCDtjIzsnbzsnYQg7KCc6rGw7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MQorbXNnaWQgIkNsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAi7KCA7J6l7IaM66W8IOuzteygnO2VtCDsg4gg65SU66CJ7YSw66as66GcIOqwgOyguOyYteuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NzIKK21zZ2lkICJEaXNwbGF5IGRhdGEgaW4gY29sdW1ucyIKK21zZ3N0ciAi642w7J207YSw66W8IOyXrOufrCDsl7TroZwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MworbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICLrsJTrgJAg7IKs7ZWt7J2EIOyggOyepeyGjOyXkCDquLDroZ3tlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc0Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBHaXQgY29tbWl0IGdyYXBoIGZpbGVzIgorbXNnc3RyICLquYMg7Luk67CLIOq3uOuemO2UhCDtjIzsnbzsnYQg7JOw6rOgIO2ZleyduO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NzUKK21zZ2lkICJDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAi7IOIIOy7pOuwiyDsmKTruIzsoJ3tirjrpbwg66eM65Ot64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgIuyggOyepeyGjCDsmLXshZgg65iQ64qUIOyghOyytCDsmLXshZjsnYQg67O06rGw64KYIOyEpOygle2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NzcKK21zZ2lkICJDb3VudCB1bnBhY2tlZCBudW1iZXIgb2Ygb2JqZWN0cyBhbmQgdGhlaXIgZGlzayBjb25zdW1wdGlvbiIKK21zZ3N0ciAi66y27Jes7KeA7KeAIOyViuydgCDsmKTruIzsoJ3tirjsnZgg6rCc7IiYIOuwjyDqt7gg65SU7Iqk7YGsIOyCrOyaqeufieydhCDsuKHsoJXtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc4Cittc2dpZCAiUmV0cmlldmUgYW5kIHN0b3JlIHVzZXIgY3JlZGVudGlhbHMiCittc2dzdHIgIuyCrOyaqeyekCDruYTrsIAg7KCV67O066W8IOqwgOyguOyYpOqzoCDsoIDsnqXtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc5Cittc2dpZCAiSGVscGVyIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHBhc3N3b3JkcyBpbiBtZW1vcnkiCittc2dzdHIgIuuplOuqqOumrOyXkCDsnoTsi5zroZwg7JWU7Zi4IOyggOyepe2VmOuKlCDrj4Tsm4Ag66qF66C5IgorCisjOiBjb21tYW5kLWxpc3QuaDo4MAorbXNnaWQgIkhlbHBlciB0byBzdG9yZSBjcmVkZW50aWFscyBvbiBkaXNrIgorbXNnc3RyICLruYTrsIAg7KCV67O066W8IOuUlOyKpO2BrOyXkCDsoIDsnqXtlZjripQg64+E7JuAIOuqheuguSIKKworIzogY29tbWFuZC1saXN0Lmg6ODEKK21zZ2lkICJFeHBvcnQgYSBzaW5nbGUgY29tbWl0IHRvIGEgQ1ZTIGNoZWNrb3V0IgorbXNnc3RyICLtlZjrgpjsnZgg7Luk67CL7J2EIENWUyDssrTtgazslYTsm4PsnLzroZwg64K067O064OF64uI64ukIgorCisjICogInBlb3BsZSBsb3ZlIHRvIGhhdGUiIOuyiOyXreydgCDsoITri6ztlZjquLAg7Z6Y65Ok6rOgIOu5oOyguOuPhCDrgrTsmqkg66y47KCc6rCAIOyXhuycvOuvgOuhnCDsg53rnrUKKyM6IGNvbW1hbmQtbGlzdC5oOjgyCittc2dpZCAiU2FsdmFnZSB5b3VyIGRhdGEgb3V0IG9mIGFub3RoZXIgU0NNIHBlb3BsZSBsb3ZlIHRvIGhhdGUiCittc2dzdHIgIuuLpOuluCDshozsiqQg7L2U65OcIOq0gOumrCDsi5zsiqTthZzsl5DshJwg642w7J207YSwIOqwgOyguOyYpOq4sCIKKworIzogY29tbWFuZC1saXN0Lmg6ODMKK21zZ2lkICJBIENWUyBzZXJ2ZXIgZW11bGF0b3IgZm9yIEdpdCIKK21zZ3N0ciAi6rmD7JqpIENWUyDshJzrsoQg7JeQ666s66CI7J207YSwIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NAorbXNnaWQgIkEgcmVhbGx5IHNpbXBsZSBzZXJ2ZXIgZm9yIEdpdCByZXBvc2l0b3JpZXMiCittc2dzdHIgIuq5gyDsoIDsnqXshozsl5Ag64yA7ZWcIOyVhOyjvCDqsITri6jtlZwg7ISc67KEIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NQorbXNnaWQgIkdpdmUgYW4gb2JqZWN0IGEgaHVtYW4gcmVhZGFibGUgbmFtZSBiYXNlZCBvbiBhbiBhdmFpbGFibGUgcmVmIgorbXNnc3RyICLsgqzsmqkg6rCA64ql7ZWcIOugiO2NvOufsOyKpOulvCDquLDspIDsnLzroZwg7Jik67iM7KCd7Yq47JeQIOydveydhCDsiJgg7J6I64qUIOydtOumhOydhCDrtoDsl6ztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg2Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAi7Luk67CL6rO8IOy7pOuwiyDsgqzsnbQsIOy7pOuwi+qzvCDsnpHsl4Ug64K07JqpIOyCrOydtCDrk7HsnZgg67CU64CQIOygkOydhCDrtIXri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg3Cittc2dpZCAiQ29tcGFyZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IgorbXNnc3RyICLsnpHsl4Ug7Y+0642U7JmAIOyduOuNseyKpOydmCDtjIzsnbzsnYQg67mE6rWQ7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo4OAorbXNnaWQgIkNvbXBhcmUgYSB0cmVlIHRvIHRoZSB3b3JraW5nIHRyZWUgb3IgaW5kZXgiCittc2dzdHIgIu2KuOumrOulvCDsnpHsl4Ug7Y+0642U64KYIOyduOuNseyKpOyZgCDruYTqtZDtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg5Cittc2dpZCAiQ29tcGFyZXMgdGhlIGNvbnRlbnQgYW5kIG1vZGUgb2YgYmxvYnMgZm91bmQgdmlhIHR3byB0cmVlIG9iamVjdHMiCittc2dzdHIgIuuRkCDqsJzsnZgg7Yq466asIOyYpOu4jOygne2KuOyXkCDsnojripQg64K07Jqp6rO8IOu4lOuhreydmCDrqqjrk5zrpbwg67mE6rWQ7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAi7J2867CY7KCB7J24IGRpZmYg64+E6rWs66W8IOyCrOyaqe2VtCDrs4Dqsr0g7IKs7ZWt7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6OTEKK21zZ2lkICJHaXQgZGF0YSBleHBvcnRlciIKK21zZ3N0ciAi6rmDIOuNsOydtO2EsCDrgrTrs7TrgrTquLAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkyCittc2dpZCAiQmFja2VuZCBmb3IgZmFzdCBHaXQgZGF0YSBpbXBvcnRlcnMiCittc2dzdHIgIuqzoOyGjSDquYMg642w7J207YSwIOqwgOyguOyYpOq4sCDrsLHsl5Trk5wiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkzCittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAi64uk66W4IOyggOyepeyGjOyXkOyEnCDsmKTruIzsoJ3tirjsmYAg66CI7Y2865+w7Iqk66W8IOuLpOyatOuhnOuTnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6OTQKK21zZ2lkICJSZWNlaXZlIG1pc3Npbmcgb2JqZWN0cyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAi64uk66W4IOyggOyepeyGjOyXkOyEnCDsl4bripQg7Jik67iM7KCd7Yq466W8IOuLpOyatOuhnOuTnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6OTUKK21zZ2lkICJSZXdyaXRlIGJyYW5jaGVzIgorbXNnc3RyICLrpqzrqqjtirgg67iM656c7LmYIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NgorbXNnaWQgIlByb2R1Y2UgYSBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi67OR7ZWpIOy7pOuwiyDrqZTsi5zsp4Drpbwg66eM65Ot64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NworbXNnaWQgIk91dHB1dCBpbmZvcm1hdGlvbiBvbiBlYWNoIHJlZiIKK21zZ3N0ciAi6rCBIOugiO2NvOufsOyKpOydmCDsoJXrs7Trpbwg7Lac66Cl7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo5OAorbXNnaWQgIlByZXBhcmUgcGF0Y2hlcyBmb3IgZS1tYWlsIHN1Ym1pc3Npb24iCittc2dzdHIgIuuplOydvCDsoJzstpwg7Jqp64+E66GcIO2MqOy5mOulvCDspIDruYTtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk5Cittc2dpZCAiVmVyaWZpZXMgdGhlIGNvbm5lY3Rpdml0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlIgorbXNnc3RyICLsl7DqsrDsnYQg7ZmV7J247ZWY6rOgIOuNsOydtO2EsOuyoOydtOyKpOydmCDsmKTruIzsoJ3tirjqsIAg7Jis67CU66W47KeAIO2ZleyduO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTAwCittc2dpZCAiQ2xlYW51cCB1bm5lY2Vzc2FyeSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIuu2iO2VhOyalO2VnCDtjIzsnbzsnYQg7KeA7Jqw6rOgIOuhnOy7rCDsoIDsnqXshozrpbwg7LWc7KCB7ZmU7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDEKK21zZ2lkICJFeHRyYWN0IGNvbW1pdCBJRCBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCB1c2luZyBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAiZ2l0LWFyY2hpdmXroZwg66eM65OgIOyVhOy5tOydtOu4jOyXkOyEnCDsu6TrsIsgSUTrpbwg7LaU7Lac7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDIKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIu2MqO2EtOqzvCDsnbzsuZjtlZjripQg7KSE7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTAzCittc2dpZCAiQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdCIKK21zZ3N0ciAi6rmD7J2YIO2PrO2EsOu4lCDqt7jrnpjtlL0g7J247YSw7Y6Y7J207IqkIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDQKK21zZ2lkICJDb21wdXRlIG9iamVjdCBJRCBhbmQgb3B0aW9uYWxseSBjcmVhdGVzIGEgYmxvYiBmcm9tIGEgZmlsZSIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IElE66W8IOqzhOyCsO2VmOqzoCDshKDtg53soIHsnLzroZwg7YyM7J287J2YIOu4lOuhreydhCDrp4zrk63ri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNQorbXNnaWQgIkRpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiBhYm91dCBHaXQiCittc2dzdHIgIuq5g+ydmCDrj4Tsm4Drp5Ag7KCV67O066W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA2Cittc2dpZCAiU2VydmVyIHNpZGUgaW1wbGVtZW50YXRpb24gb2YgR2l0IG92ZXIgSFRUUCIKK21zZ3N0ciAi6rmDIEhUVFAg7ZSE66Gc7Yag7L2c7J2YIOyEnOuyhOy4oSDqtaztmIQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNworbXNnaWQgIkRvd25sb2FkIGZyb20gYSByZW1vdGUgR2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAiCittc2dzdHIgIuybkOqyqSDquYMg7KCA7J6l7IaM7JeQ7IScIEhUVFDrpbwg7Ya17ZW0IOuLpOyatOuhnOuTnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA4Cittc2dpZCAiUHVzaCBvYmplY3RzIG92ZXIgSFRUUC9EQVYgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICLsmKTruIzsoJ3tirjrpbwgSFRUUC9EQVbrpbwg7Ya17ZW0IOuLpOuluCDsoIDsnqXshozroZwg7ZG47Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDkKK21zZ2lkICJTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGZyb20gc3RkaW4gdG8gYW4gSU1BUCBmb2xkZXIiCittc2dzdHIgIu2RnOykgOyeheugpeyXkOyEnCDtjKjsuZgg66qo7J2M7J2EIOydveyWtCBJTUFQIO2PtOuNlOuhnCDrs7Trg4Xri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIuq4sOyhtCDrrLbsnYwg7JWE7Lm07J2067iM7JeQIOuMgO2VnCDrrLbsnYwg7J24642x7IqkIO2MjOydvOydhCDrp4zrk63ri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMQorbXNnaWQgIkNyZWF0ZSBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeSBvciByZWluaXRpYWxpemUgYW4gZXhpc3Rpbmcgb25lIgorbXNnc3RyICLruYgg6rmDIOyggOyepeyGjOulvCDrp4zrk6TqsbDrgpgg6riw7KG0IOyggOyepeyGjOulvCDri6Tsi5wg7LSI6riw7ZmU7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTIKK21zZ2lkICJJbnN0YW50bHkgYnJvd3NlIHlvdXIgd29ya2luZyByZXBvc2l0b3J5IGluIGdpdHdlYiIKK21zZ3N0ciAi64K0IOyekeyXhSDsoIDsnqXshozrpbwgZ2l0d2Vi7JeQ7IScIOymieyLnCDsgrTtjrTrtIXri4jri6QiCisKKyMgKiAiU2lnbmVkLW9mZi1ieTogbmFtZSIg6rCZ7J2AIOygleuztOulvCDrp5DtlZzri6QKKyM6IGNvbW1hbmQtbGlzdC5oOjExMworbXNnaWQgImFkZCBvciBwYXJzZSBzdHJ1Y3R1cmVkIGluZm9ybWF0aW9uIGluIGNvbW1pdCBtZXNzYWdlcyIKK21zZ3N0ciAi7Luk67CLIOuplOyLnOyngOyXkCDqtazsobDtmZTrkJwg7KCV67O066W8IOy2lOqwgO2VmOqxsOuCmCDsoJXrs7Trpbwg7YyM7Iux7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTQKK21zZ2lkICJUaGUgR2l0IHJlcG9zaXRvcnkgYnJvd3NlciIKK21zZ3N0ciAi6rmDIOyggOyepeyGjCDsgrTtjrTrs7TquLAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNQorbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgIuy7pOuwiyDquLDroZ3snYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTYKK21zZ2lkICJTaG93IGluZm9ybWF0aW9uIGFib3V0IGZpbGVzIGluIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi7J24642x7Iqk7JmAIOyekeyXhSDtj7TrjZTsnZgg7YyM7J287JeQIOuMgO2VnCDsoJXrs7Trpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTcKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi7JuQ6rKpIOyggOyepeyGjOydmCDroIjtjbzrn7DsiqTrpbwg7Je06rGw7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTgKK21zZ2lkICJMaXN0IHRoZSBjb250ZW50cyBvZiBhIHRyZWUgb2JqZWN0IgorbXNnc3RyICLtirjrpqwg7Jik67iM7KCd7Yq47J2YIOuCtOyaqeydhCDsl7TqsbDtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOQorbXNnaWQgIkV4dHJhY3RzIHBhdGNoIGFuZCBhdXRob3JzaGlwIGZyb20gYSBzaW5nbGUgZS1tYWlsIG1lc3NhZ2UiCittc2dzdHIgIu2VmOuCmOydmCDrqZTsnbwg66mU7Iuc7KeA7JeQ7IScIO2MqOy5mOyZgCDsnpHshLHsnpAg7KCV67O066W8IOu9keyVhOuDheuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTIwCittc2dpZCAiU2ltcGxlIFVOSVggbWJveCBzcGxpdHRlciBwcm9ncmFtIgorbXNnc3RyICLqsITri6jtlZwg7Jyg64uJ7IqkIG1ib3gg7Kq86rCc6riwIO2UhOuhnOq3uOueqCIKKworIzogY29tbWFuZC1saXN0Lmg6MTIxCittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgIuyXrOufrCDqsJzsnZgg6rCc67CcIOuCtOyXreydhCDtlZjrgpjroZwg7ZWp7Lmp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjIKK21zZ2lkICJGaW5kIGFzIGdvb2QgY29tbW9uIGFuY2VzdG9ycyBhcyBwb3NzaWJsZSBmb3IgYSBtZXJnZSIKK21zZ3N0ciAi67OR7ZWp7JeQIOyCrOyaqe2VoCDstZzshKDsnZgg6rO17Ya1IOqzvOqxsCDsu6TrsIvsnYQg7LC+7Iq164uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjMKK21zZ2lkICJSdW4gYSB0aHJlZS13YXkgZmlsZSBtZXJnZSIKK21zZ3N0ciAiMy3rsKntlqUg7YyM7J28IOuzke2VqeydhCDsi6Ttlontlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNAorbXNnaWQgIlJ1biBhIG1lcmdlIGZvciBmaWxlcyBuZWVkaW5nIG1lcmdpbmciCittc2dzdHIgIuuzke2VqeydtCDtlYTsmpTtlZwg7YyM7J287JeQIOuMgO2VtCDrs5HtlansnYQg7Iuk7ZaJ7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjUKK21zZ2lkICJUaGUgc3RhbmRhcmQgaGVscGVyIHByb2dyYW0gdG8gdXNlIHdpdGggZ2l0LW1lcmdlLWluZGV4IgorbXNnc3RyICJnaXQtbWVyZ2UtaW5kZXjsmYAg6rCZ7J20IOyCrOyaqe2VmOuKlCDquLDrs7gg64+E7JuAIO2UhOuhnOq3uOueqCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI2Cittc2dpZCAiUnVuIG1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb24gdG9vbHMgdG8gcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMiCittc2dzdHIgIuuzke2VqSDstqnrj4wg7IOB7Zmp7JeQ7IScIOuzke2VqSDstqnrj4wg7ZW06rKwIOuPhOq1rOulvCDsi6Ttlontlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNworbXNnaWQgIlNob3cgdGhyZWUtd2F5IG1lcmdlIHdpdGhvdXQgdG91Y2hpbmcgaW5kZXgiCittc2dzdHIgIuyduOuNseyKpOulvCDrsJTqvrjsp4Ag7JWK6rOgIDMt67Cp7ZalIOuzke2VqeydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOAorbXNnaWQgIkNyZWF0ZXMgYSB0YWcgb2JqZWN0IgorbXNnc3RyICLtg5zqt7gg7Jik67iM7KCd7Yq466W8IOunjOuTreuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI5Cittc2dpZCAiQnVpbGQgYSB0cmVlLW9iamVjdCBmcm9tIGxzLXRyZWUgZm9ybWF0dGVkIHRleHQiCittc2dzdHIgImxzLXRyZWUg7Y+s66e37J2YIO2FjeyKpO2KuOyXkOyEnCB0cmVlLW9iamVjdOulvCDrp4zrk63ri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMAorbXNnaWQgIk1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgYSBkaXJlY3RvcnksIG9yIGEgc3ltbGluayIKK21zZ3N0ciAi7YyM7J28LCDrlJTroInthLDrpqwsIOyLrOuzvOumrSDrp4Htgazrpbwg7Jiu6riw6rGw64KYIOydtOumhOydhCDrsJTqv4nri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMQorbXNnaWQgIkZpbmQgc3ltYm9saWMgbmFtZXMgZm9yIGdpdmVuIHJldnMiCittc2dzdHIgIuyjvOyWtOynhCDrpqzruYTsoITsl5Ag64yA7ZWcIOyLrOuzvCDsnbTrpoTsnYQg7LC+7Iq164uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzIKK21zZ2lkICJBZGQgb3IgaW5zcGVjdCBvYmplY3Qgbm90ZXMiCittc2dzdHIgIuyYpOu4jOygne2KuCDrhbjtirjrpbwg7LaU6rCA7ZWY6rGw64KYIOyCtO2OtOu0heuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTMzCittc2dpZCAiSW1wb3J0IGZyb20gYW5kIHN1Ym1pdCB0byBQZXJmb3JjZSByZXBvc2l0b3JpZXMiCittc2dzdHIgIlBlcmZvcmNlIOyggOyepeyGjOyXkOyEnCDqsIDsoLjsmKTqsbDrgpgg7KCA7J6l7IaM66GcIOygnOy2nO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTM0Cittc2dpZCAiQ3JlYXRlIGEgcGFja2VkIGFyY2hpdmUgb2Ygb2JqZWN0cyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq47J2YIOustuydjCDslYTsubTsnbTruIzrpbwg66eM65Ot64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzUKK21zZ2lkICJGaW5kIHJlZHVuZGFudCBwYWNrIGZpbGVzIgorbXNnc3RyICLspJHrs7XrkJwg66y27J2MIO2MjOydvOydhCDssL7sirXri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNgorbXNnaWQgIlBhY2sgaGVhZHMgYW5kIHRhZ3MgZm9yIGVmZmljaWVudCByZXBvc2l0b3J5IGFjY2VzcyIKK21zZ3N0ciAi7Zqo7Jyo7KCB7J24IOyggOyepeyGjCDsoJHqt7zsnYQg7JyE7ZW0IO2XpOuTnOyZgCDtg5zqt7jrpbwg66y27Iq164uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzcKK21zZ2lkICJSb3V0aW5lcyB0byBoZWxwIHBhcnNpbmcgcmVtb3RlIHJlcG9zaXRvcnkgYWNjZXNzIHBhcmFtZXRlcnMiCittc2dzdHIgIuybkOqyqSDsoIDsnqXshowg7KCR6re8IO2MjOudvOuvuO2EsOulvCDtjIzsi7HtlZjripTrjbAg7IKs7Jqp7ZWY64qUIOqzte2GtSDquLDriqUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOAorbXNnaWQgIkNvbXB1dGUgdW5pcXVlIElEIGZvciBhIHBhdGNoIgorbXNnc3RyICLtjKjsuZjsl5Ag64yA7ZWcIOycoOydvO2VnCBJROulvCDqs4TsgrDtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOQorbXNnaWQgIlBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IOuNsOydtO2EsOuyoOydtOyKpOyXkOyEnCDrj4Tri6ztlaAg7IiYIOyXhuuKlCDsmKTruIzsoJ3tirjrpbwg66qo65GQIOyemOudvOuDheuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQwCittc2dpZCAiUmVtb3ZlIGV4dHJhIG9iamVjdHMgdGhhdCBhcmUgYWxyZWFkeSBpbiBwYWNrIGZpbGVzIgorbXNnc3RyICLrrLbsnYwg7YyM7J287JeQIOydtOuvuCDrk6TslrQg7J6I64qUIOyYpOu4jOygne2KuOulvCDstpTqsIDroZwg7KCc6rGw7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDEKK21zZ2lkICJGZXRjaCBmcm9tIGFuZCBpbnRlZ3JhdGUgd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgIuuLpOuluCDsoIDsnqXshowg65iQ64qUIOuLpOuluCDroZzsu6wg67iM656c7LmY7JeQ7IScIOqwgOyguOyYpOqxsOuCmCDthrXtlantlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MgorbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAi7JuQ6rKpIOugiO2NvOufsOyKpCDrsI8g6re47JmAIOq0gOugqOuQnCDsmKTruIzsoJ3tirjrpbwg7JeF642w7J207Yq47ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDMKK21zZ2lkICJBcHBsaWVzIGEgcXVpbHQgcGF0Y2hzZXQgb250byB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgIu2YhOyerCDruIzrnpzsuZjsl5AgcXVpbHQg7Yyo7LmYIOuqqOydjOydhCDsoIHsmqntlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NAorbXNnaWQgIlJlYWRzIHRyZWUgaW5mb3JtYXRpb24gaW50byB0aGUgaW5kZXgiCittc2dzdHIgIu2KuOumrCDsoJXrs7Trpbwg7J24642x7Iqk66GcIOydveyKteuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ1Cittc2dpZCAiUmVhcHBseSBjb21taXRzIG9uIHRvcCBvZiBhbm90aGVyIGJhc2UgdGlwIgorbXNnc3RyICLsu6TrsIvsnYQg64uk66W4IOuyoOydtOyKpCDrgZ3snZgg7LWc7IOB7JyE7JeQ7IScIOyggeyaqe2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ2Cittc2dpZCAiUmVjZWl2ZSB3aGF0IGlzIHB1c2hlZCBpbnRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICLsoIDsnqXshozsl5Ag7ZG47Iuc7ZWcIOuCtOyaqeydhCDrsJvsirXri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NworbXNnaWQgIk1hbmFnZSByZWZsb2cgaW5mb3JtYXRpb24iCittc2dzdHIgInJlZmxvZyDsoJXrs7Trpbwg6rSA66as7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDgKK21zZ2lkICJNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICLstpTsoIHtlZjripQg7KCA7J6l7IaMIOuqqOydjOydhCDqtIDrpqztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OQorbXNnaWQgIlBhY2sgdW5wYWNrZWQgb2JqZWN0cyBpbiBhIHJlcG9zaXRvcnkiCittc2dzdHIgIuyggOyepeyGjOydmCDrrLbsl6zsp4Dsp4Ag7JWK7J2AIOyYpOu4jOygne2KuOulvCDrrLbsirXri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MAorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIHJlZnMgdG8gcmVwbGFjZSBvYmplY3RzIgorbXNnc3RyICLsmKTruIzsoJ3tirjrpbwg67CU6r6464qUIOugiO2NvOufsOyKpOulvCDrp4zrk6TqsbDrgpgsIO2RnOyLnO2VmOqxsOuCmCwg7IKt7KCc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTEKK21zZ2lkICJHZW5lcmF0ZXMgYSBzdW1tYXJ5IG9mIHBlbmRpbmcgY2hhbmdlcyIKK21zZ3N0ciAi7JiI7KCV65CcIOuzgOqyvSDsgqztla3snZgg7JqU7JW97J2EIOunjOuTreuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTUyCittc2dpZCAiUmV1c2UgcmVjb3JkZWQgcmVzb2x1dGlvbiBvZiBjb25mbGljdGVkIG1lcmdlcyIKK21zZ3N0ciAi7Lap64+M7ZWY64qUIOuzke2VqeydmCDquLDroZ3rkJwg7ZW06rKwIOuwqeuyleydhCDri6Tsi5wg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTMKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAi7ZiE7J6sIEhFQUTrpbwg7KeA7KCV7ZWcIOyDge2DnOuhnCDsnqzshKTsoJXtmZTtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NAorbXNnaWQgIlJldmVydCBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIuq4sOyhtCDsu6TrsIvsnYQg65CY64+M66a964uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTUKK21zZ2lkICJMaXN0cyBjb21taXQgb2JqZWN0cyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIuyLnOqwhCDrsJjrjIAg7Iic7ISc7JeQIOuUsOudvCDsu6TrsIsg7Jik67iM7KCd7Yq466W8IOyXtOqxsO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTU2Cittc2dpZCAiUGljayBvdXQgYW5kIG1hc3NhZ2UgcGFyYW1ldGVycyIKK21zZ3N0ciAi7YyM652866+47YSw66W8IOywvuyVhOuCtOyEnCDsobDsoJXtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NworbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLtjIzsnbzsnYQg7J6R7JeFIO2PtOuNlOyXkOyEnCDsoJzqsbDtlZjqs6Ag7J24642x7Iqk7JeQ7ISc64+EIOygnOqxsO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTU4Cittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBhcyBlbWFpbHMiCittc2dzdHIgIu2MqOy5mCDrqqjsnYzsnYQg66mU7J2866GcIOuztOuDheuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTU5Cittc2dpZCAiUHVzaCBvYmplY3RzIG92ZXIgR2l0IHByb3RvY29sIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAi7Jik67iM7KCd7Yq466W8IOq5gyDtlITroZzthqDsvZzsnYQg7Ya17ZW0IOuLpOuluCDsoIDsnqXshozroZwg7ZG47Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjAKK21zZ2lkICJSZXN0cmljdGVkIGxvZ2luIHNoZWxsIGZvciBHaXQtb25seSBTU0ggYWNjZXNzIgorbXNnc3RyICLquYPrp4wg7IKs7Jqp7ZWY64qUIFNTSCDsoJHqt7zsl5Ag7ZWE7JqU7ZWcIOygnO2VnOuQnCDroZzqt7jsnbgg7IW4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjEKK21zZ2lkICJTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dCIKK21zZ3N0ciAiJ2dpdCBsb2cnIOy2nOugpeydhCDsmpTslb3tlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MgorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICLsl6zrn6zqsIDsp4Ag7KKF66WY7J2YIOyYpOu4jOygne2KuOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MworbXNnaWQgIlNob3cgYnJhbmNoZXMgYW5kIHRoZWlyIGNvbW1pdHMiCittc2dzdHIgIuu4jOuenOy5mCDrqqnroZ3qs7wg6re4IOy7pOuwi+ydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NAorbXNnaWQgIlNob3cgcGFja2VkIGFyY2hpdmUgaW5kZXgiCittc2dzdHIgIuustuyXrOynhCDslYTsubTsnbTruIwg7J24642x7Iqk66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY1Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAi66Gc7LusIOyggOyepeyGjOydmCDroIjtjbzrn7DsiqTrpbwg7Je06rGw7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjYKK21zZ2lkICJHaXQncyBpMThuIHNldHVwIGNvZGUgZm9yIHNoZWxsIHNjcmlwdHMiCittc2dzdHIgIuyFuCDsiqTtgazrpr3tirjrpbwg7JyE7ZWcIOq5g+ydmCDqta3soJztmZQg7KSA67mEIOy9lOuTnCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY3Cittc2dpZCAiQ29tbW9uIEdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZSIKK21zZ3N0ciAi6rO17Ya1IOq5gyDshbgg7Iqk7YGs66a97Yq4IOykgOu5hCDsvZTrk5wiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OAorbXNnaWQgIlN0YXNoIHRoZSBjaGFuZ2VzIGluIGEgZGlydHkgd29ya2luZyBkaXJlY3RvcnkgYXdheSIKK21zZ3N0ciAi7J6R7JeFIO2PtOuNlOydmCDrs4Dqsr0g7IKs7ZWt7J2EIOyehOyLnOuhnCDri6Trpbgg6rOz7JeQIOyggOyepe2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY5Cittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIHN0YWdpbmcgYXJlYSIKK21zZ3N0ciAi7YyM7J28IOuCtOyaqeydhCDsiqTthYzsnbTsp5Ug7JiB7Jet7JeQIOy2lOqwgO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTcwCittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAi7J6R7JeFIO2PtOuNlCDsg4Htg5zrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzEKK21zZ2lkICJSZW1vdmUgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSIKK21zZ3N0ciAi67aI7ZWE7JqU7ZWcIOqzteuwsSDrrLjsnpDrpbwg7KCc6rGw7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzIKK21zZ2lkICJJbml0aWFsaXplLCB1cGRhdGUgb3IgaW5zcGVjdCBzdWJtb2R1bGVzIgorbXNnc3RyICLtlZjsnIQg66qo65OI7J2EIOy0iOq4sO2ZlO2VmOqxsOuCmCwg7JeF642w7J207Yq47ZWY6rGw64KYLCDsobDsgqztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MworbXNnaWQgIkJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYW5kIEdpdCIKK21zZ3N0ciAi7ISc67iM67KE7KCEIOyggOyepeyGjOyZgCDquYMg7IKs7J207J2YIOyWkeuwqe2WpSDrj5nsnpEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NAorbXNnaWQgIlJlYWQsIG1vZGlmeSBhbmQgZGVsZXRlIHN5bWJvbGljIHJlZnMiCittc2dzdHIgIuyLrOuzvOumrSDroIjtjbzrn7DsiqTrpbwg7J296rOgLCDsiJjsoJXtlZjqs6AsIOyCreygnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc1Cittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIu2DnOq3uOulvCDrp4zrk6TqsbDrgpgsIO2RnOyLnO2VmOqxsOuCmCwg7IKt7KCc7ZWY6rGw64KYLCBHUEcg7ISc66qF7J2EIOqygOymne2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc2Cittc2dpZCAiQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIHdpdGggYSBibG9iJ3MgY29udGVudHMiCittc2dzdHIgIuu4lOuhreydmCDrgrTsmqnsnLzroZwg7J6E7IucIO2MjOydvOydhCDrp4zrk63ri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NworbXNnaWQgIlVucGFjayBvYmplY3RzIGZyb20gYSBwYWNrZWQgYXJjaGl2ZSIKK21zZ3N0ciAi66y27J2MIOyVhOy5tOydtOu4jOyXkOyEnCDsmKTruIzsoJ3tirjrpbwg7ZKA7Ja064OF64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzgKK21zZ2lkICJSZWdpc3RlciBmaWxlIGNvbnRlbnRzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGluZGV4IgorbXNnc3RyICLsnpHsl4Ug7Y+0642U7JeQ7IScIO2MjOydvCDrgrTsmqnsnYQg7J24642x7Iqk7JeQIOuTseuhne2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc5Cittc2dpZCAiVXBkYXRlIHRoZSBvYmplY3QgbmFtZSBzdG9yZWQgaW4gYSByZWYgc2FmZWx5IgorbXNnc3RyICLroIjtjbzrn7DsiqTsl5Ag7KCA7J6l65CcIOyYpOu4jOygne2KuCDsnbTrpoTsnYQg7JWI7KCE7ZWY6rKMIOyXheuNsOydtO2KuO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTgwCittc2dpZCAiVXBkYXRlIGF1eGlsaWFyeSBpbmZvIGZpbGUgdG8gaGVscCBkdW1iIHNlcnZlcnMiCittc2dzdHIgIuuLqOyInCDshJzrsoTsl5Ag64+E7JuA7J2EIOyjvOuPhOuhnSDrs7TsobAg7KCV67O0IO2MjOydvOydhCDsl4XrjbDsnbTtirjtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MQorbXNnaWQgIlNlbmQgYXJjaGl2ZSBiYWNrIHRvIGdpdC1hcmNoaXZlIgorbXNnc3RyICLslYTsubTsnbTruIzrpbwg64uk7IucIGdpdC1hcmNoaXZl66GcIOuztOuDheuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTgyCittc2dpZCAiU2VuZCBvYmplY3RzIHBhY2tlZCBiYWNrIHRvIGdpdC1mZXRjaC1wYWNrIgorbXNnc3RyICLrrLbsnYAg7Jik67iM7KCd7Yq466W8IOuLpOyLnCBnaXQtZmV0Y2gtcGFja+ycvOuhnCDrs7Trg4Xri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MworbXNnaWQgIlNob3cgYSBHaXQgbG9naWNhbCB2YXJpYWJsZSIKK21zZ3N0ciAi6rmD7J2YIOuFvOumrOyggSDrs4DsiJjrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODQKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiBjb21taXRzIgorbXNnc3RyICLsu6TrsIvsnZggR1BHIOyEnOuqheydhCDtmZXsnbjtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NQorbXNnaWQgIlZhbGlkYXRlIHBhY2tlZCBHaXQgYXJjaGl2ZSBmaWxlcyIKK21zZ3N0ciAi66y27J2MIOq5gyDslYTsubTsnbTruIwg7YyM7J287J2EIOqygOymne2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg2Cittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgdGFncyIKK21zZ3N0ciAi7YOc6re47J2YIEdQRyDshJzrqoXsnYQg7ZmV7J247ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODcKK21zZ2lkICJHaXQgd2ViIGludGVyZmFjZSAod2ViIGZyb250ZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMpIgorbXNnc3RyICLquYMg7Ju5IOyduO2EsO2OmOydtOyKpCAo6rmDIOyggOyepeyGjOyXkCDrjIDtlZwg7Ju5IO2UhOuhoO2KuOyXlOuTnCkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OAorbXNnaWQgIlNob3cgbG9ncyB3aXRoIGRpZmZlcmVuY2UgZWFjaCBjb21taXQgaW50cm9kdWNlcyIKK21zZ3N0ciAi6rCBIOy7pOuwi+ycvOuhnCDrsJzsg53tlZjripQg7LCo7J207KCQ66eI64ukIOq4sOuhneydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OQorbXNnaWQgIk1hbmFnZSBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIgorbXNnc3RyICLsl6zrn6wg6rCc7J2YIOyekeyXhSDtj7TrjZTrpbwg6rSA66as7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTAKK21zZ2lkICJDcmVhdGUgYSB0cmVlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICLtmITsnqwg7J24642x7Iqk7JeQ7IScIO2KuOumrCDsmKTruIzsoJ3tirjrpbwg66eM65Ot64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTEKK21zZ2lkICJEZWZpbmluZyBhdHRyaWJ1dGVzIHBlciBwYXRoIgorbXNnc3RyICLqsr3roZzrp4jri6Qg7IaN7ISxIOygleydmO2VmOq4sCIKKworIzogY29tbWFuZC1saXN0Lmg6MTkyCittc2dpZCAiR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zIgorbXNnc3RyICLquYMg66qF66C57ZaJIOyduO2EsO2OmOydtOyKpCDrsI8g6rSA7Iq1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTMKK21zZ2lkICJBIEdpdCBjb3JlIHR1dG9yaWFsIGZvciBkZXZlbG9wZXJzIgorbXNnc3RyICLqsJzrsJzsnpDrpbwg7JyE7ZWcIOq5gyDtlbXsi6wg65Sw65287ZWY6riwIOusuOyEnCIKKworIzogY29tbWFuZC1saXN0Lmg6MTk0Cittc2dpZCAiR2l0IGZvciBDVlMgdXNlcnMiCittc2dzdHIgIkNWUyDsgqzsmqnsnpDrpbwg7JyE7ZWcIOq5gyIKKworIzogY29tbWFuZC1saXN0Lmg6MTk1Cittc2dpZCAiVHdlYWtpbmcgZGlmZiBvdXRwdXQiCittc2dzdHIgImRpZmYg7Lac66ClIOuvuOyEuCDsobDsoJUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NgorbXNnaWQgIkEgdXNlZnVsIG1pbmltdW0gc2V0IG9mIGNvbW1hbmRzIGZvciBFdmVyeWRheSBHaXQiCittc2dzdHIgIuunpOydvOunpOydvCDsnKDsmqntlZjqsowg7IKs7Jqp7ZWgIOy1nOyGjO2VnOydmCDquYMg66qF66C57Ja0IOuqqOydjCIKKworIzogY29tbWFuZC1saXN0Lmg6MTk3Cittc2dpZCAiQSBHaXQgR2xvc3NhcnkiCittc2dzdHIgIuq5gyDsmqnslrQg7IKs7KCEIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTgKK21zZ2lkICJIb29rcyB1c2VkIGJ5IEdpdCIKK21zZ3N0ciAi6rmD7JeQ7IScIOyCrOyaqe2VmOuKlCDtm4TtgawiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OQorbXNnaWQgIlNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUiCittc2dzdHIgIuydmOuPhOyggeycvOuhnCDstpTsoIHtlZjsp4Ag7JWK64qUIO2MjOydvOydhCDrrLTsi5ztlZjqsowg7KeA7KCV7ZWY6riwIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDAKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiCDsho3shLEg7KCV7J2Y7ZWY6riwIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDEKK21zZ2lkICJHaXQgbmFtZXNwYWNlcyIKK21zZ3N0ciAi6rmDIOuEpOyehOyKpO2OmOydtOyKpCIKKworIzogY29tbWFuZC1saXN0Lmg6MjAyCittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICLquYMg7KCA7J6l7IaMIOq1rOyhsCIKKworIzogY29tbWFuZC1saXN0Lmg6MjAzCittc2dpZCAiU3BlY2lmeWluZyByZXZpc2lvbnMgYW5kIHJhbmdlcyBmb3IgR2l0IgorbXNnc3RyICLquYPsnZgg66as67mE7KCEIOuwjyDrspTsnITrpbwg7KeA7KCV7ZWY6riwIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDQKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQ6IHBhcnQgdHdvIgorbXNnc3RyICLquYMg65Sw65287ZWY6riwIOyViOuCtOyEnDogMuu2gCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA1Cittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0IgorbXNnc3RyICLquYMg65Sw65287ZWY6riwIOyViOuCtOyEnCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA2Cittc2dpZCAiQW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQgd29ya2Zsb3dzIHdpdGggR2l0IgorbXNnc3RyICLstpTsspztlZjripQg6rmDIO2ZnOyaqSDsnpHsl4Ug7Iic7ISc7J2YIOqwnOyalCIKKworIzogcmVyZXJlLmg6NDAKK21zZ2lkICJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiCittc2dzdHIgIuqwgOuKpe2VmOuptCDsnbjrjbHsiqTrpbwg7J6s7IKs7Jqp7ZWcIOy2qeuPjCDtlbTqsrDroZwg7JeF642w7J207Yq47ZWp64uI64ukIgorCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgIlwiZ2l0IGJpc2VjdCBzdGFydFwiIOuqheugueycvOuhnCDsi5zsnpHtlbTslbwg7ZWp64uI64ukIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6NjAKK21zZ2lkICJEbyB5b3Ugd2FudCBtZSB0byBkbyBpdCBmb3IgeW91IFtZL25dPyAiCittc2dzdHIgIuyngOq4iCDtlZjsi5zqsqDsirXri4jquYwgW1kvbl0/ICIKKworIzogZ2l0LWJpc2VjdC5zaDoxMjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg7Ji17IWYOiAnJGFyZyciCisKKyM6IGdpdC1iaXNlY3Quc2g6MTI1CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgcmV2aXNpb24iCittc2dzdHIgIickYXJnJ+ydgCjripQpIOyYrOuwlOuluCDrpqzruYTsoITsspjrn7wg67O07J207KeAIOyViuyKteuLiOuLpCIKKworIzogZ2l0LWJpc2VjdC5zaDoxNTQKK21zZ2lkICJCYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIuyemOuqu+uQnCBIRUFEIC0gSEVBROqwgCDtlYTsmpTtlanri4jri6QiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlY2tpbmcgb3V0ICckc3RhcnRfaGVhZCcgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPHZhbGlkLWJyYW5jaD4nLiIKK21zZ3N0ciAiIgorIickc3RhcnRfaGVhZCcg67Cb7JWE7Jik6riw6rCAIOyLpO2MqO2WiOyKteuLiOuLpC4gJ2dpdCBiaXNlY3QgcmVzZXQgPHZhbGlkLWJyYW5jaD4n66W8ICIKKyLtlbQg67O07Iut7Iuc7JikLiIKKworIzogZ2l0LWJpc2VjdC5zaDoxNzcKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gY2ctc2VlaydlZCB0cmVlIgorbXNnc3RyICJjZy1zZWVr7ZWcIO2KuOumrOyXkOyEnCBiaXNlY3Trpbwg7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTgxCittc2dpZCAiQmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAi7J6Y66q765CcIEhFQUQgLSDsi6zrs7zrpq0g66CI7Y2865+w7Iqk6rCAIOyemOuqu+uQmOyXiOyKteuLiOuLpCIKKworIzogZ2l0LWJpc2VjdC5zaDoyMzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICRzdGF0ZSIKK21zZ3N0ciAi7J6Y66q765CcIGJpc2VjdF93cml0ZSDsnbjsnpA6ICRzdGF0ZSIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIuyemOuqu+uQnCDrpqzruYTsoIQg7J6F66ClOiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjI2NQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGJpc2VjdGVkX2hlYWQiCittc2dzdHIgIuyemOuqu+uQnCDrpqzruYTsoIQg7J6F66ClOiAkYmlzZWN0ZWRfaGVhZCIKKworIzogZ2l0LWJpc2VjdC5zaDoyNzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgIuyemOuqu+uQnCDrpqzruYTsoIQg7J6F66ClOiAkcmV2IgorCisjOiBnaXQtYmlzZWN0LnNoOjI4MworIywgc2gtZm9ybWF0Cittc2dpZCAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcg66qF66C57J2AIO2VmOuCmOydmCDsnbjsnpDrp4wg7JO4IOyImCDsnojsirXri4jri6QuIgorCisjOiBnaXQtYmlzZWN0LnNoOjMwNgorIywgc2gtZm9ybWF0Cittc2dpZCAiV2FybmluZzogYmlzZWN0aW5nIG9ubHkgd2l0aCBhICRURVJNX0JBRCBjb21taXQuIgorbXNnc3RyICLqsr3qs6A6IO2VmOuCmOydmCAkVEVSTV9CQUQg7Luk67CL7JeQIOuMgO2VtOyEnOunjCDsnbTrk7HrtoQuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6MzEyCittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIu2ZleyLpO2VqeuLiOq5jCBbWS9uXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjMyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICRiYWRfc3luIGFuZCBvbmUgJGdvb2Rfc3luIHJldmlzaW9uLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBhbmQgXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIGZvciB0aGF0LikiCittc2dzdHIgIiIKKyLstZzshoztlZwg7ZWY64KY7J2YICRiYWRfc3luIOuwjyDtlZjrgpjsnZggJGdvb2Rfc3luIOumrOu5hOyghOydhCDrhJjqsqjslbwg7ZWp64uI64ukLlxuIgorIihcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiDrsI8gXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIOuqheugueydhCDsi6TtlontlZjrqbQg65Cp64uI64ukLikiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzI3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAkZ29vZF9zeW4gYW5kIG9uZSAkYmFkX3N5biByZXZpc2lvbi5cbiIKKyIoWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICRiYWRfc3luXCIgYW5kIFwiZ2l0IGJpc2VjdCAkZ29vZF9zeW5cIiBmb3IgdGhhdC4pIgorbXNnc3RyICIiCisiXCJnaXQgYmlzZWN0IHN0YXJ0XCLrpbwg7Iuk7ZaJ7ZW07JW8IO2VqeuLiOuLpC5cbiIKKyLqt7gg64uk7J2MIOy1nOyGjO2VnCDtlZjrgpjsnZggJGdvb2Rfc3luIOuwjyDtlZjrgpjsnZggJGJhZF9zeW4g66as67mE7KCE7J2EIOuEmOqyqOyVvCDtlanri4jri6RcbiIKKyIoXCJnaXQgYmlzZWN0ICRiYWRfc3luXCIg67CPIFwiZ2l0IGJpc2VjdCAkZ29vZF9zeW5cIiDrqoXroLnsnYQg7Iuk7ZaJ7ZWY66m0IOuQqeuLiOuLpC4pIgorCisjOiBnaXQtYmlzZWN0LnNoOjM5OCBnaXQtYmlzZWN0LnNoOjUxMgorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAi7J2065Ox67aE7ZWY64qUIOykkeyeheuLiOuLpC4iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGludmFsaWQnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiJyRpbnZhbGlkJ+ydgCjripQpIOyYrOuwlOuluCDsu6TrsIvsnbQg7JWE64uZ64uI64ukIgorCisjOiBnaXQtYmlzZWN0LnNoOjQxNAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJGJyYW5jaCcuXG4iCisiVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIiIKKyLrs7jrnpjsnZggSEVBRCAnJGJyYW5jaCfsnYQo66W8KSDssrTtgazslYTsm4PtlaAg7IiYIOyXhuyKteuLiOuLpC5cbiIKKyInZ2l0IGJpc2VjdCByZXNldCA87Luk67CLPifsnYQg7ZW0IOuztOyLreyLnOyYpCIKKworIzogZ2l0LWJpc2VjdC5zaDo0MjIKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICLroZzqt7gg7YyM7J287J20IOyjvOyWtOyngOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDIzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICLri6Tsi5wg7J6s7IOd7ZWgICRmaWxlIO2MjOydvOydhCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LWJpc2VjdC5zaDo0NDQKK21zZ2lkICI/PyB3aGF0IGFyZSB5b3UgdGFsa2luZyBhYm91dD8iCittc2dzdHIgIj8/IOustOyKqCDshozrpqzsnbjsp4Ag66qo66W06rKg7Iq164uI64ukPyIKKworIzogZ2l0LWJpc2VjdC5zaDo0NTMKK21zZ2lkICJiaXNlY3QgcnVuIGZhaWxlZDogbm8gY29tbWFuZCBwcm92aWRlZC4iCittc2dzdHIgIuydtOuTseu2hCDsi6TtlonsnbQg7Iuk7Yyo7ZaI7Iq164uI64ukOiDso7zslrTsp4Qg66qF66C57Ja06rCAIOyXhuyKteuLiOuLpC4iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDU4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICLsi6Ttlok6ICRjb21tYW5kIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ2NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgorbXNnc3RyICIiCisi7J2065Ox67aEIOyLpO2WieydtCDsi6TtjKjtlojsirXri4jri6Q6XG4iCisiJyRjb21tYW5kJyDrqoXroLnsl5DshJwg7IOB7YOcIOy9lOuTnCAnJHJlcyfsnbQo6rCAKSAw67O064ukIOyekeqxsOuCmCAxMjjrs7Tri6Qg7YG964uI64ukIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ5MQorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICLsnbTrk7HrtoQg7Iuk7ZaJ7J2EIOqzhOyGjSDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LWJpc2VjdC5zaDo0OTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICIiCisi7J2065Ox67aEIOyLpO2WieydtCDsi6TtjKjtlojsirXri4jri6Q6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIOuqheugueyXkOyEnCDsg4Htg5wg7L2U65Oc6rCAICckcmVzJ+yeheuLiOuLpCIKKworIzogZ2l0LWJpc2VjdC5zaDo1MDQKK21zZ2lkICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCittc2dzdHIgIuydtOuTseu2hCDsi6Ttlokg7ISx6rO1IgorCisjOiBnaXQtYmlzZWN0LnNoOjUzMworIywgc2gtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21tYW5kOiB5b3UncmUgY3VycmVudGx5IGluIGEgJFRFUk1fQkFELyRURVJNX0dPT0QgYmlzZWN0LiIKK21zZ3N0ciAi7J6Y66q765CcIOuqheugueyWtDog7ZiE7J6sICRURVJNX0JBRC8kVEVSTV9HT09EIOydtOuTseu2hCDspJHsnoXri4jri6QuIgorCisjOiBnaXQtYmlzZWN0LnNoOjU2NworbXNnaWQgIm5vIHRlcm1zIGRlZmluZWQiCittc2dzdHIgIuyaqeyWtOulvCDsoJXsnZjtlZjsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiBnaXQtYmlzZWN0LnNoOjU4NAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgYXJndW1lbnQgJGFyZyBmb3IgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIlN1cHBvcnRlZCBvcHRpb25zIGFyZTogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBhbmQgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKK21zZ3N0ciAiIgorIidnaXQgYmlzZWN0IHRlcm1zJ+yXkCDrjIDtlbQg7J6Y66q765CcIOyduOyekCAnJGFyZycuXG4iCisi7KeA7JuQ7ZWY64qUIOyYteyFmOydgDogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCDrsI8gLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NDYKK21zZ2lkICIiCisiRXJyb3I6IFlvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJtZXJnZSIKK21zZ3N0ciAi7Jik66WYOiDri6TsnYwg7YyM7J287J2YIOuhnOy7rCDrs4Dqsr0g7IKs7ZWt7J2EIOuzke2VqSDrlYzrrLjsl5Ag642u7Ja0IOyTsOqyjCDrkKnri4jri6QuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MQorbXNnaWQgIkF1dG9tYXRlZCBtZXJnZSBkaWQgbm90IHdvcmsuIgorbXNnc3RyICLsnpDrj5kg67OR7ZWp7J20IOuPmeyeke2VmOyngCDslYrslZjsirXri4jri6QuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MgorbXNnaWQgIlNob3VsZCBub3QgYmUgZG9pbmcgYW4gb2N0b3B1cy4iCittc2dzdHIgIuyYpe2GoO2NvOyKpCDsoITrnrUg67OR7ZWp7J2EIO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGNvbW1vbiBjb21taXQgd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIiRwcmV0dHlfbmFtZSjsnLwp66GcIOqzte2GtSDsu6TrsIvsnYQg7LC+7J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjc3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUgd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIuydtOuvuCAkcHJldHR5X25hbWXsl5Ag7JeF642w7J207Yq4IOyDge2DnOyeheuLiOuLpCIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyB0bzogJHByZXR0eV9uYW1lIgorbXNnc3RyICLri6TsnYzsnLzroZwg7KCV67Cp7ZalIOynhO2WiTogJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo5NworIywgc2gtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiJHByZXR0eV9uYW1l7JeQIOqwhOuLqO2VnCDrs5Htlakg7Iuc64+E7ZWp64uI64ukIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDoxMDIKK21zZ2lkICJTaW1wbGUgbWVyZ2UgZGlkIG5vdCB3b3JrLCB0cnlpbmcgYXV0b21hdGljIG1lcmdlLiIKK21zZ3N0ciAi6rCE64uo7ZWcIOuzke2VqeydtCDrj5nsnpHtlZjsp4Ag7JWK7Iq164uI64ukLiDsnpDrj5kg67OR7ZWp7J2EIOyLnOuPhO2VqeuLiOuLpC4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NjEKK21zZ2lkICIiCisiUmVzb2x2ZSBhbGwgY29uZmxpY3RzIG1hbnVhbGx5LCBtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgd2l0aFxuIgorIlwiZ2l0IGFkZC9ybSA8Y29uZmxpY3RlZF9maWxlcz5cIiwgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJZb3UgY2FuIGluc3RlYWQgc2tpcCB0aGlzIGNvbW1pdDogcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIi5cbiIKKyJUbyBhYm9ydCBhbmQgZ2V0IGJhY2sgdG8gdGhlIHN0YXRlIGJlZm9yZSBcImdpdCByZWJhc2VcIiwgcnVuIFwiZ2l0IHJlYmFzZSAtLSIKKyJhYm9ydFwiLiIKK21zZ3N0ciAiIgorIuuqqOuToCDstqnrj4zsnYQg7IiY64+Z7Jy866GcIO2VtOqysO2VmOqzoCwg66qo65GQIFwiZ2l0IGFkZC9ybSA87Lap64+MX+2MjOydvD5cIiDrqoXroLnsnLzroZxcbiIKKyLtlbTqsrDtlojri6Tqs6Ag7ZGc7Iuc7ZWY6rOgLCBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIOuqheugueydhCDsi6TtlontlZjsi63si5zsmKQuIOydtCDtjKjsuZgiCisi66W8XG4iCisi6rG064SI65uw66Ck66m0LCDrjIDsi6Dsl5AgXCJnaXQgcmViYXNlIC0tc2tpcFwiIOuqheugueydhCDsi6TtlontlZjsi63si5zsmKQuIOumrOuyoOydtOyKpOulvFxuIgorIuykkeyngO2VmOqzoCBcImdpdCByZWJhc2VcIiDrqoXroLkg7KCE7J2YIOybkOuemCDsg4Htg5zroZwg64+M7JWE6rCA66Ck66m0LCBcImdpdCByZWJhc2UgLS0iCisiYWJvcnRcIlxuIgorIuuqheugueydhCDsi6TtlontlZjsi63si5zsmKQuIgorCisjOiBnaXQtcmViYXNlLnNoOjE3MyBnaXQtcmViYXNlLnNoOjQ0MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1vdmUgYmFjayB0byAkaGVhZF9uYW1lIgorbXNnc3RyICInJGhlYWRfbmFtZScg7JyE7LmY66GcIOuPjOyVhOqwiCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLnNoOjE4NAorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAi7J6Q64+Z7Iqk7YOc7IucIOyggeyaqS4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MTg3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgIlwiJHN0YXNoX3NoYTFcIuydhCjrpbwpIOyggOyepe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLnNoOjIyOQorbXNnaWQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIgorbXNnc3RyICLrpqzrsqDsnbTsiqQg7KCEIO2bhO2BrOyXkOyEnCDrpqzrsqDsnbTsiqTrpbwg6rGw67aA7ZaI7Iq164uI64ukLiIKKworIzogZ2l0LXJlYmFzZS5zaDoyMzQKK21zZ2lkICJJdCBsb29rcyBsaWtlICdnaXQgYW0nIGlzIGluIHByb2dyZXNzLiBDYW5ub3QgcmViYXNlLiIKK21zZ3N0ciAiJ2dpdCBhbSfsnbQg7KeE7ZaJIOykkeyduCDqsoPsspjrn7wg67O07J6F64uI64ukLiDrpqzrsqDsnbTsiqTtlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDAzCittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAi66as67Kg7J207Iqk6rCAIOynhO2WiSDspJHsnbTsp4Ag7JWK7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLnNoOjQxNAorbXNnaWQgIlRoZSAtLWVkaXQtdG9kbyBhY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW50ZXJhY3RpdmUgcmViYXNlLiIKK21zZ3N0ciAiLS1lZGl0LXRvZG8g64+Z7J6R7J2AIOuMgO2ZlO2YlSDrpqzrsqDsnbTsiqTsl5DshJzrp4wg7IKs7Jqp7ZWgIOyImCDsnojsirXri4jri6QuIgorCisjOiBnaXQtcmViYXNlLnNoOjQyMQorbXNnaWQgIkNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIkhFQUTrpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDI0Cittc2dpZCAiIgorIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlblxuIgorIm1hcmsgdGhlbSBhcyByZXNvbHZlZCB1c2luZyBnaXQgYWRkIgorbXNnc3RyICIiCisi66qo65OgIOuzke2VqSDstqnrj4zsnYQg7Y647KeR7ZWY6rOgIGdpdCBhZGRcbiIKKyLrqoXroLnsnLzroZwg7ZW06rKw65CY7JeI64uk6rOgIO2RnOyLnO2VtOyVvCDtlanri4jri6QiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDY4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJHN0YXRlX2Rpcl9iYXNlIGRpcmVjdG9yeSwgYW5kXG4iCisiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyJjYXNlLCBwbGVhc2UgdHJ5XG4iCisiXHQkY21kX2xpdmVfcmViYXNlXG4iCisiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZVxuIgorIlx0JGNtZF9jbGVhcl9zdGFsZV9yZWJhc2VcbiIKKyJhbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZ1xuIgorInZhbHVhYmxlIHRoZXJlLiIKK21zZ3N0ciAiIgorIuydtOuvuCAnJHN0YXRlX2Rpcl9iYXNlJyDrlJTroInthLDrpqzqsIAg7J6I64qUIOqyg+ycvOuhnCDrs7TslYQsIOydtOuvuFxuIgorIuuYkCDri6Trpbgg66as67Kg7J207IqkIOykkeyXkCDsnojripQg6rKDIOqwmeyKteuLiOuLpC4g6re465+s7ZWcIOqyveyasOyXkOuKlFxuIgorIuuLpOydjOydhCDsi5zrj4TtlbQg67O07Iut7Iuc7JikOlxuIgorIlx0JGNtZF9saXZlX3JlYmFzZVxuIgorIuumrOuyoOydtOyKpCDspJHsnbQg7JWE64uI652866m0IOuLpOydjOydhCDsi5zrj4TtlZjqs6AsXG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorIuydtCDrqoXroLnsnYQg64uk7IucIOyLpO2Wie2VmOyLreyLnOyYpC4g7KSR7JqU7ZWcIOyCrO2VreydtCDrgqjslYQg7J6I7J2EIOqyveyasOulvFxuIgorIuuMgOu5hO2VtCDsl6zquLDshJwg66mI7Lal64uI64ukLiIKKworIzogZ2l0LXJlYmFzZS5zaDo1MDkKK21zZ2lkICJlcnJvcjogY2Fubm90IGNvbWJpbmUgJy0tc2lnbm9mZicgd2l0aCAnLS1wcmVzZXJ2ZS1tZXJnZXMnIgorbXNnc3RyICIiCisi7Jik66WYOiAnLS1zaWdub2ZmJyDsmLXshZjqs7wgJy0tcHJlc2VydmUtbWVyZ2VzJyDsmLXshZjsnYQg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLnNoOjUzNworIywgc2gtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJHVwc3RyZWFtX25hbWUnIgorbXNnc3RyICLsnpjrqrvrkJwg7JeF7Iqk7Yq466a8ICckdXBzdHJlYW1fbmFtZSciCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTYxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkb250b19uYW1lOiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAiJG9udG9fbmFtZTog7Jes65+sIOqwnOydmCDrs5Htlakg67Kg7J207Iqk6rCAIOyeiOyKteuLiOuLpCIKKworIzogZ2l0LXJlYmFzZS5zaDo1NjQgZ2l0LXJlYmFzZS5zaDo1NjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGlzIG5vIG1lcmdlIGJhc2UiCittc2dzdHIgIiRvbnRvX25hbWU6IOuzke2VqSDrsqDsnbTsiqTqsIAg7JeG7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLnNoOjU3MworIywgc2gtZm9ybWF0Cittc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQ6ICRvbnRvX25hbWUiCittc2dzdHIgIuyYrOuwlOuluCDsu6TrsIvsnYQg6rCA66as7YKk7KeAIOyViuyKteuLiOuLpDogJG9udG9fbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo1OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaC9jb21taXQgJyRicmFuY2hfbmFtZSciCittc2dzdHIgIuy5mOuqheyggSDsnbTsg4E6IOq3uOufsCDruIzrnpzsuZgv7Luk67CL7J20IOyXhuyKteuLiOuLpCAnJGJyYW5jaF9uYW1lJyIKKworIzogZ2l0LXJlYmFzZS5zaDo2MzIKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICLsnpDrj5kg7Iqk7YOc7Iuc66W8IO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLnNoOjYzNworIywgc2gtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICRzdGFzaF9hYmJyZXYiCittc2dzdHIgIuyekOuPmSDsiqTtg5zsi5zrpbwg66eM65Ok7JeI7Iq164uI64ukOiAkc3Rhc2hfYWJicmV2IgorCisjOiBnaXQtcmViYXNlLnNoOjY0MQorbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIuy7pOuwi+2VmOqxsOuCmCDsiqTtg5zsi5zsl5Ag64Sj7Jy87Iut7Iuc7JikLiIKKworIzogZ2l0LXJlYmFzZS5zaDo2NjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkhFQUTqsIAg7LWc7IugIOyDge2DnOyeheuLiOuLpC4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NjY2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIu2YhOyerCDruIzrnpzsuZjqsIAgKCRicmFuY2hfbmFtZSkg7LWc7IugIOyDge2DnOyeheuLiOuLpC4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6Njc0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICJIRUFE6rCAIOy1nOyLoCDsg4Htg5zsnoXri4jri6QuIOqwleygnCDrpqzrsqDsnbTsiqTtlanri4jri6QuIgorCisjOiBnaXQtcmViYXNlLnNoOjY3NgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICLtmITsnqwg67iM656c7LmY6rCAICgkYnJhbmNoX25hbWUpIOy1nOyLoCDsg4Htg5zsnoXri4jri6QuIOqwleygnCDrpqzrsqDsnbTsiqTtlanri4jri6QuIgorCisjOiBnaXQtcmViYXNlLnNoOjY4OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICRtYiB0byAkb250bzoiCittc2dzdHIgIuuzgOqyvSDsgqztla0gJyRtYifsl5DshJwgJyRvbnRvJyjsnLwp66GcOiIKKworIzogZ2l0LXJlYmFzZS5zaDo2OTcKK21zZ2lkICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi4iCittc2dzdHIgIuyekeyXhSDsgqztla3snYQg64uk7IucIOuEo+q4sCDsnITtlbQg66i87KCAIO2XpOuTnOulvCDrkqTroZwg64+M66a964uI64ukLi4uIgorCisjOiBnaXQtcmViYXNlLnNoOjcwNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkZWQgJGJyYW5jaF9uYW1lIHRvICRvbnRvX25hbWUuIgorbXNnc3RyICIkYnJhbmNoX25hbWUg67iM656c7LmY66W8ICRvbnRvX25hbWUg7JyE7LmY66GcIOygleuwqe2WpSDsp4Ttlontlanri4jri6QuIgorCisjOiBnaXQtc3Rhc2guc2g6NjEKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciDrqoXroLnsnYQg7YyM652866+47YSw7JmAIOqwmeydtCDsk7DquLDripQg6rWs7ZiE65CY7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjEwOAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICLslYTsp4Eg7LWc7LSIIOy7pOuwi+ydtCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdGFzaC5zaDoxMjMKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAi7ZiE7J6sIOyduOuNseyKpCDsg4Htg5zrpbwg7KCA7J6l7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdGFzaC5zaDoxMzgKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLstpTsoIHtlZjsp4Ag7JWK64qUIO2MjOydvOydhCDsoIDsnqXtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjE1OCBnaXQtc3Rhc2guc2g6MTcxCittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCittc2dzdHIgIu2YhOyerCDsnpHsl4Ug7Y+0642UIOyDge2DnOulvCDsoIDsnqXtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjE3NQorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgIuuzgOqyvSDsgqztla3snYQg7ISg7YOd7ZWY7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjE3OAorbXNnaWQgIkNhbm5vdCByZW1vdmUgdGVtcG9yYXJ5IGluZGV4IChjYW4ndCBoYXBwZW4pIgorbXNnc3RyICLsnoTsi5wg7J24642x7Iqk66W8IOygnOqxsO2VoCDsiJgg7JeG7Iq164uI64ukICjsnbzslrTrgqAg7IiYIOyXhuuKlCDsg4HtmakpIgorCisjOiBnaXQtc3Rhc2guc2g6MTkxCittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIuyekeyXhSDtj7TrjZQg7IOB7YOc66W8IOq4sOuhne2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3Rhc2guc2g6MjI5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIiRyZWZfc3Rhc2jsnYQo66W8KSAkd19jb21taXQo7Jy8KeuhnCDsl4XrjbDsnbTtirjtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjI4MQorIywgc2gtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCittc2dzdHIgIuyYpOulmDogJ3N0YXNoIHB1c2gn7JeQIOuMgO2VtCDslYwg7IiYIOyXhuuKlCDsmLXshZg6ICRvcHRpb24iCisKKyM6IGdpdC1zdGFzaC5zaDoyOTUKK21zZ2lkICJDYW4ndCB1c2UgLS1wYXRjaCBhbmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICIiCisiLS1wYXRjaCDsmLXshZjqs7wgLS1pbmNsdWRlLXVudHJhY2tlZCDrmJDripQgLS1hbGwg7Ji17IWY7J2EIOuPmeyLnOyXkCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjMwMworbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAi7KCA7J6l7ZWgIOuhnOy7rCDrs4Dqsr0g7IKs7ZWt7J20IOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjMwOAorbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICLsiqTtg5zsi5zrpbwg7LSI6riw7ZmU7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdGFzaC5zaDozMTIKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgIu2YhOyerCDsg4Htg5zrpbwg7KCA7J6l7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdGFzaC5zaDozMTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAkc3Rhc2hfbXNnIgorbXNnc3RyICLsnpHsl4Ug7Y+0642U7JmAICRzdGFzaF9tc2cg7J24642x7IqkIOyDge2DnOulvCDsoIDsnqXtlojsirXri4jri6QiCisKKyM6IGdpdC1zdGFzaC5zaDozNDIKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIuyekeyXhe2PtOuNlCDrs4Dqsr0g7IKs7ZWt7J2EIOygnOqxsO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3Rhc2guc2g6NDkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJG9wdCIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg7Ji17IWYOiAkb3B0IgorCisjOiBnaXQtc3Rhc2guc2g6NTAzCittc2dpZCAiTm8gc3Rhc2ggZW50cmllcyBmb3VuZC4iCittc2dzdHIgIuyKpO2DnOyLnCDtla3rqqnsnbQg7JeG7Iq164uI64ukLiIKKworIzogZ2l0LXN0YXNoLnNoOjUxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAi64SI66y0IOunjuydgCDrpqzruYTsoITsnYQg7KeA7KCV7ZaI7Iq164uI64ukOiAkUkVWIgorCisjOiBnaXQtc3Rhc2guc2g6NTI1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZeydgCjripQpIOyYrOuwlOuluCDroIjtjbzrn7DsiqTqsIAg7JWE64uZ64uI64ukIgorCisjOiBnaXQtc3Rhc2guc2g6NTUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICInJGFyZ3Mn7J2AKOuKlCkg7Iqk7YOc7IucIOy7pOuwi+ydtCDslYTri5nri4jri6QiCisKKyM6IGdpdC1zdGFzaC5zaDo1NjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJGFyZ3Mn7J2AKOuKlCkg7Iqk7YOc7IucIOugiO2NvOufsOyKpOqwgCDslYTri5nri4jri6QiCisKKyM6IGdpdC1zdGFzaC5zaDo1NzIKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAi7J24642x7Iqk66W8IOyDiOuhnCDqs6DsuaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjU3NgorbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAi67OR7ZWpIOuPhOykkeyXkCDsiqTtg5zsi5zrpbwg7KCB7Jqp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdGFzaC5zaDo1ODQKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICLsnbjrjbHsiqTsl5Ag7Lap64+MLiAtLWluZGV4IOyXhuydtCDsi5zrj4TtlbQg67O07Iut7Iuc7JikLiIKKworIzogZ2l0LXN0YXNoLnNoOjU4NgorbXNnaWQgIkNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgIuyduOuNseyKpCDtirjrpqzrpbwg7KCA7J6l7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdGFzaC5zaDo1OTUKK21zZ2lkICJDb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCBlbnRyeSIKK21zZ3N0ciAi7Iqk7YOc7IucIO2VreuqqeyXkOyEnCDstpTsoIHtlZjsp4Ag7JWK64qUIO2MjOydvOydhCDrs7XqtaztlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjYyMAorbXNnaWQgIkNhbm5vdCB1bnN0YWdlIG1vZGlmaWVkIGZpbGVzIgorbXNnc3RyICLsiJjsoJXtlZwg7YyM7J287J2EIOyKpO2FjOydtOyngOyXkOyEnCDruoQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjYzNQorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAi7J24642x7Iqk6rCAIOyKpO2DnOyLnOyXkOyEnCDruaDsoYzsirXri4jri6QuIgorCisjOiBnaXQtc3Rhc2guc2g6NjQ5Cittc2dpZCAiVGhlIHN0YXNoIGVudHJ5IGlzIGtlcHQgaW4gY2FzZSB5b3UgbmVlZCBpdCBhZ2Fpbi4iCittc2dzdHIgIuuLpOyLnCDtlYTsmpTtlaAg65WM66W8IOuMgOu5hO2VtCDsiqTtg5zsi5wg7ZWt66qp7J2EIOuztOq0gO2VqeuLiOuLpC4iCisKKyM6IGdpdC1zdGFzaC5zaDo2NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgIiR7UkVWfSDsp4Dsm4AgKCRzKSIKKworIzogZ2l0LXN0YXNoLnNoOjY1OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ9OiDsiqTtg5zsi5wg7ZWt66qp7J2EIOyngOyauCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3Rhc2guc2g6NjY3Cittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICLruIzrnpzsuZgg7J2066aE7J2EIOyngOygle2VmOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGdpdC1zdGFzaC5zaDo3NDYKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIijrs7XqtaztlZjroKTrqbQgXCJnaXQgc3Rhc2ggYXBwbHlcIuulvCDsi6TtlontlZjsi63si5zsmKQpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjE4OAorbXNnaWQgIlJlbGF0aXZlIHBhdGggY2FuIG9ubHkgYmUgdXNlZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLsg4HrjIAg6rK966Gc64qUIOyekeyXhSDtj7TrjZTsnZgg7LWc7IOB7JyE7JeQ7ISc66eMIOyTuCDsiJgg7J6I7Iq164uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjE5OAorIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAi7KCA7J6l7IaMIFVSTDogJyRyZXBvJyDqsJLsnYAg7KCI64yAIOqyveuhnOqxsOuCmCAuLyDrmJDripQgLi4v66GcIOyLnOyeke2VtOyVvCDtlanri4jri6QuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxNworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIickc21fcGF0aCfsnYAo64qUKSDsnbTrr7gg7J24642x7Iqk7JeQIOyeiOyKteuLiOuLpCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IGFuZCBpcyBub3QgYSBzdWJtb2R1bGUiCittc2dzdHIgIickc21fcGF0aCfsnYAo64qUKSDsnbTrr7gg7J24642x7Iqk7JeQIOyeiOqzoCDtlZjsnIQg66qo65OI7J20IOyVhOuLmeuLiOuLpCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorIiRzbV9wYXRoXG4iCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorbXNnc3RyICIiCisi64uk7J2MIOqyveuhnOuKlCAuZ2l0aWdub3JlIO2MjOydvOyXkOyEnCDrrLTsi5ztlanri4jri6Q6XG4iCisiJHNtX3BhdGhcbiIKKyLsoJXrp5DroZwg7LaU6rCA7ZWY66Ck66m0IC1mIOyYteyFmOydhCDsgqzsmqntlZjsi63si5zsmKQuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIickc21fcGF0aCfsnZgg6riw7KG0IOyggOyepeyGjOulvCDsnbjrjbHsiqTsl5Ag7LaU6rCA7ZWp64uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI1MQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIickc21fcGF0aCfsnbQo6rCAKSDsnbTrr7gg7J6I6rOgIOyYrOuwlOuluCBnaXQg7KCA7J6l7IaM6rCAIOyVhOuLmeuLiOuLpCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAiJyRzbV9uYW1lJ+yXkCDrjIDtlZwg6rmDIOuUlOugie2EsOumrOqwgCDroZzsu6zsl5DshJwg66as66qo7Yq46rCAIOyeiOuKlCDssYTroZwg7J6I7Iq164uI64ukOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb21cbiIKKyIgICRyZWFscmVwb1xuIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0ICIKKyJyZXBvXG4iCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorIm9wdGlvbi4iCittc2dzdHIgIiIKKyLsnbQg66Gc7LusIOq5gyDrlJTroInthLDrpqzrpbwg64uk7J2MIOyggOyepeyGjOyXkOyEnCDri6Tsi5wg67O17KCc7ZWY64qUIOuMgOyLoCDri6Tsi5wg7IKs7Jqp7ZWY66Ck66m0LFxuIgorIiAgJHJlYWxyZXBvXG4iCisiJy0tZm9yY2UnIOyYteyFmOydhCDsgqzsmqntlZjsi63si5zsmKQuIOuhnOy7rCDquYMg65SU66CJ7YSw66as6rCAIOyYrOuwlOuluCDsoIDsnqXshozqsIAg7JWE64uI6rGw64KYXG4iCisi66y07IqoIOydmOuvuOyduOyngCDsnpgg66qo66W06rKg7Jy866m0ICctLW5hbWUnIOyYteyFmOycvOuhnCDri6Trpbgg7J2066aE7J2EIOyEoO2Dne2VmOyLreyLnOyYpC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWFjdGl2YXRpbmcgbG9jYWwgZ2l0IGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlICckc21fbmFtZScuIgorbXNnc3RyICLroZzsu6wg6rmDIOuUlOugie2EsOumrOulvCAnJHNtX25hbWUnIO2VmOychOuqqOuTiOuhnCDri6Tsi5wg7Zmc7ISx7ZmU7ZWp64uI64ukLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiJyRzbV9wYXRoJyDtlZjsnIQg66qo65OI7J2EIOyytO2BrOyVhOybg+2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4NAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiJyRzbV9wYXRoJyDtlZjsnIQg66qo65OI7J2EIOy2lOqwgO2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjkzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIickc21fcGF0aCcg7ZWY7JyEIOuqqOuTiOydhCDrk7HroZ3tlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM1NAorIywgc2gtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIickZGlzcGxheXBhdGgnIOuTpOyWtOqwkCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwaW5nIGF0ICckZGlzcGxheXBhdGgnOyBzY3JpcHQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLiIKK21zZ3N0ciAiJyRkaXNwbGF5cGF0aCfsl5DshJwg66mI7LakLiDsiqTtgazrpr3tirjqsIAgMOydtCDslYTri4wg7IOB7YOc66W8IOumrO2EtO2VqC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOqyveuhnOyXkOyEnCAoJyRkaXNwbGF5cGF0aCcpIO2YhOyerCDrpqzruYTsoITsnYQg7LC+7J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiCDqsr3roZwgJyRzbV9wYXRoJ+yXkOyEnCDqsIDsoLjsmKwg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gZmluZCBjdXJyZW50ICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAiCisiJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorIu2VmOychCDrqqjrk4gg6rK966GcICckc21fcGF0aCfsl5DshJwg7ZiE7J6sICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSDrpqzruYTsoITsnYQg7LC+7J2EIOyImCAiCisi7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzMworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOqyveuhnCAnJGRpc3BsYXlwYXRoJ+yXkOyEnCDqsIDsoLjsmKwg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJGZXRjaGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnLCBidXQgaXQgZGlkIG5vdCBjb250YWluICRzaGExLiAiCisiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iCittc2dzdHIgIiIKKyInJGRpc3BsYXlwYXRoJyDtlZjsnIQg66qo65OIIOqyveuhnOyXkOyEnCDqsIDsoLjsmZTsp4Drp4wsICRzaGExIOy7pOuwi+ydtCDrk6TslrTsnojsp4Ag7JWK7Iq164uIIgorIuuLpC4g7J20IOy7pOuwi+ydhCDsp4HsoJEg6rCA7KC47Jik64qU642wIOyLpO2MqO2WiOyKteuLiOuLpC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQ2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiCDqsr3roZwgJyRkaXNwbGF5cGF0aCfsl5DshJwgJyRzaGExJ+ydhCjrpbwpIOyytO2BrOyVhOybg+2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0NworIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCittc2dzdHIgIu2VmOychCDrqqjrk4gg6rK966GcICckZGlzcGxheXBhdGgnOiAnJHNoYTEnIOyytO2BrOyVhOybgyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiCDqsr3roZwgJyRkaXNwbGF5cGF0aCfsl5DshJwgJyRzaGExJ+ydhCjrpbwpIOumrOuyoOydtOyKpO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY1MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOqyveuhnCAnJGRpc3BsYXlwYXRoJzogJyRzaGExJyjsnLwp66GcIOumrOuyoOydtOyKpCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOqyveuhnCAnJGRpc3BsYXlwYXRoJ+yXkOyEnCAnJHNoYTEnIOuzke2Vqe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOqyveuhnCAnJGRpc3BsYXlwYXRoJzogJyRzaGExJ+yXkOyEnCDrs5HtlakiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjYzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gb2YgJyRjb21tYW5kICRzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIickY29tbWFuZCAkc2hhMScg7Iuk7ZaJ7J20IO2VmOychCDrqqjrk4gg6rK966GcICckZGlzcGxheXBhdGgn7JeQ7IScIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOqyveuhnCAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIuyerOq3gOyggeycvOuhnCDtlZjsnIQg66qo65OIIOqyveuhnCAnJGRpc3BsYXlwYXRoJ+yXkCDrk6TslrTqsIDripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjc5MQorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIi0tY2FjaGVkIOyYteyFmOydgCAtLWZpbGVzIOyYteyFmOqzvCDqsJnsnbQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG1vZGUgJG1vZF9kc3QiCittc2dzdHIgIuyYiOyDgey5mCDrqrvtlZwg66qo65OcICRtb2RfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg2MworIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgIOqyveqzoDogJyRkaXNwbGF5X25hbWUn7JeQICckc2hhMV9zcmMnIOy7pOuwi+ydtCDrk6TslrTsnojsp4Ag7JWK7Iq164uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg2NgorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgIOqyveqzoDogJyRkaXNwbGF5X25hbWUn7JeQICckc2hhMV9kc3QnIOy7pOuwi+ydtCDrk6TslrTsnojsp4Ag7JWK7Iq164uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg2OQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisiICDqsr3qs6A6ICckZGlzcGxheV9uYW1lJ+yXkCAnJHNoYTFfc3JjJyDrsI8gJyRzaGExX2RzdCcg7Luk67CL7J20IOuTpOyWtOyeiOyngCDslYrsirXri4jri6QiCisKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNlZSBnaXQtJHtjbWR9KDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAi7J6Q7IS47ZWcIOygleuztOuKlCBnaXQtJHtjbWR9KDEpIO2OmOydtOyngOulvCDssLjqs6DtlZjsi63si5zsmKQuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxNDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzaW5nICgkbmV3X2NvdW50LyR0b3RhbCkiCittc2dzdHIgIuumrOuyoOydtOyKpOykkSAoJG5ld19jb3VudC8kdG90YWwpIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxNTgKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1hbmQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuuqheugueyWtDpcbiIKKyIgcCwgcGljayA9IOy7pOuwiyDsgqzsmqlcbiIKKyIgciwgcmV3b3JkID0g7Luk67CLIOyCrOyaqe2VmOyngOunjCwg7Luk67CLIOuplOyLnOyngCDtjrjsp5FcbiIKKyIgZSwgZWRpdCA9IOy7pOuwiyDsgqzsmqntlZjsp4Drp4wsIOy7pOuwiyDsiJjsoJUoYW1lbmQp7J2EIOychO2VtCDspJHri6hcbiIKKyIgcywgc3F1YXNoID0g7Luk67CLIOyCrOyaqe2VmOyngOunjCwg7J207KCEIOy7pOuwi+qzvCDtlansuZjquLBcbiIKKyIgZiwgZml4dXAgPSBcInNxdWFzaFwi7JmAIOqwmeyngOunjCwg7J20IOy7pOuwi+ydmCDroZzqt7gg66mU7Iuc7KeA66W8IOuyhOumvFxuIgorIiB4LCBleGVjID0g7IW47J2EIOyCrOyaqe2VtCDrqoXroLkg7Iuk7ZaJICjrkqTsl5Ag66qF66C5IOyngOyglSlcbiIKKyIgZCwgZHJvcCA9IOy7pOuwiyDsoJzqsbBcbiIKKyIgbCwgbGFiZWwgPOugiOydtOu4lD4gPSDtmITsnqwgSEVBROyXkCDsnbTrpoTsnYQg67aZ7J6F64uI64ukXG4iCisiIHQsIHJlc2V0IDzroIjsnbTruJQ+ID0gSEVBROulvCDroIjsnbTruJQg7JyE7LmY66GcIOumrOyFi+2VqeuLiOuLpFxuIgorIiBtLCBtZXJnZSBbLUMgPOy7pOuwiz4gfCAtYyA87Luk67CLPl0gPOugiOydtOu4lD4gWyMgPO2VnOykhD5dXG4iCisiIC4gICAgICAg67O4656YIOuzke2VqSDsu6TrsIvsnZgg66mU7Iuc7KeA66W8IOydtOyaqe2VtCDrs5Htlakg7Luk67CL7J2EIOunjOuTreuLiOuLpC5cbiIKKyIgLiAgICAgICAo67O4656YIOuzke2VqSDsu6TrsIvsnYQg7KeA7KCV7ZWY7KeAIOyViuuKlCDqsr3smrAsIDztlZzspIQ+7J2EIOuplOyLnOyngOuhnFxuIgorIiAuICAgICAgIOyCrOyaqe2VqeuLiOuLpC4pIOy7pOuwiyDrqZTsi5zsp4Drpbwg7Y647KeR7ZWY66Ck66m0IC1jIDzsu6TrsIs+7J2EIOyCrOyaqS5cbiIKKyJcbiIKKyLsnbQg7KSE7J2AIOyInOyEnOulvCDrsJTqv4Ag7IiYIOyeiOyKteuLiOuLpC4g7JyE7JeQ7IScIOyVhOuemCDsiJzshJzroZwg7Iuk7ZaJ7ZWp64uI64ukLlxuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxNzkKK21zZ2lkICIiCisiXG4iCisiRG8gbm90IHJlbW92ZSBhbnkgbGluZS4gVXNlICdkcm9wJyBleHBsaWNpdGx5IHRvIHJlbW92ZSBhIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuykhOydhCDsoJzqsbDtlZjsp4Ag7JWK7Iq164uI64ukLiDsu6TrsIvsnYQg7KCc6rGw7ZWY66Ck66m0IOuqheyLnOyggeycvOuhnCAnZHJvcCfsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikLlxuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxODMKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLsl6zquLAg7KSE7J2EIOygnOqxsO2VmOuptCDtlbTri7kg7Luk67CL7J2EIOyeg+yWtOuyhOumveuLiOuLpCFcbiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MjIxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyLsp4DquIgg64uk7J2MIOuqheugueycvOuhnCDsu6TrsIvsnYQg7IiY7KCV7ZWgIOyImCDsnojsirXri4jri6Q6XG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyLrs4Dqsr0g7IKs7ZWt7JeQIOunjOyhse2VmOuptCwg64uk7J2M7J2EIOyLpO2Wie2VmOyLreyLnOyYpDpcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MjQ2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkc2hhMTogbm90IGEgY29tbWl0IHRoYXQgY2FuIGJlIHBpY2tlZCIKK21zZ3N0ciAiJHNoYTE6IOu5vOyYpOq4sOqwgCDqsIDriqXtlZwg7Luk67CL7J20IOyVhOuLmeuLiOuLpCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6Mjg1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKK21zZ3N0ciAi7J6Y66q765CcIOy7pOuwiyDsnbTrpoQ6ICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDozMjUKK21zZ2lkICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIgorbXNnc3RyICLtmITsnqwg7Luk67CL7J2YIOuMgOyytCBzaGEx7J2EIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDozNzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAi7KCV67Cp7ZalIOynhO2WiSwgJHNoYTEg7JyE7LmY66GcIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDozNzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIiRzaGExIOychOy5mOuhnCDsoJXrsKntlqUg7KeE7ZaJ7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjM4NworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG1vdmUgSEVBRCB0byAkZmlyc3RfcGFyZW50IgorbXNnc3RyICJIRUFE66W8ICRmaXJzdF9wYXJlbnQg7JyE7LmY66GcIOyYruq4uCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDozOTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiAkc2hhMSIKK21zZ3N0ciAi67OR7ZWpIHNxdWFzaCDqsbDrtoA6ICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo0MTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCittc2dzdHIgIiRzaGExIOuzke2VqeydhCDri6Tsi5wg7ZWY64qU642wIOyYpOulmCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NDE5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGljayAkc2hhMSIKK21zZ3N0ciAiJHNoYTHsnYQg67m87Jik6riwIO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo0MjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMke259OiIKK21zZ3N0ciAi7Luk67CLIOuplOyLnOyngCAjJHtufeuyiOyeheuLiOuLpDoiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjQzMworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMke259IHdpbGwgYmUgc2tpcHBlZDoiCittc2dzdHIgIiMke25967KI7Ke4IOy7pOuwiyDrqZTsi5zsp4Drpbwg6rG064SI65yB64uI64ukOiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NDQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdC4iCittc2dpZF9wbHVyYWwgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0cy4iCittc2dzdHJbMF0gIuy7pOuwiyAkY291bnTqsJzqsIAg7ISe7J24IOqysOqzvOyeheuLiOuLpC4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjQ1MworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHdyaXRlICRmaXh1cF9tc2ciCittc2dzdHIgIiRmaXh1cF9tc2frpbwg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjQ1NgorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHMuIgorbXNnc3RyICLsu6TrsIsgMuqwnOqwgCDshJ7snbgg6rKw6rO87J6F64uI64ukLiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NDk3IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjU0MAorIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NTQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJHNoYTEuLi4gJHJlc3QiCittc2dzdHIgIuuLpOydjOydhCDsoIHsmqntlaAoYXBwbHkpIOyImCDsl4bsirXri4jri6Q6ICRzaGExLi4uICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo1NzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgYW1lbmQgY29tbWl0IGFmdGVyIHN1Y2Nlc3NmdWxseSBwaWNraW5nICRzaGExLi4uICRyZXN0XG4iCisiVGhpcyBpcyBtb3N0IGxpa2VseSBkdWUgdG8gYW4gZW1wdHkgY29tbWl0IG1lc3NhZ2UsIG9yIHRoZSBwcmUtY29tbWl0IGhvb2tcbiIKKyJmYWlsZWQuIElmIHRoZSBwcmUtY29tbWl0IGhvb2sgZmFpbGVkLCB5b3UgbWF5IG5lZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUgIgorImJlZm9yZVxuIgorInlvdSBhcmUgYWJsZSB0byByZXdvcmQgdGhlIGNvbW1pdC4iCittc2dzdHIgIiIKKyLshLHqs7XsoIHsnLzroZwgJHNoYTEuLi4gJHJlc3Qg7Luk67CL7J2EIOu5vOyYqCDrkqTsl5Ag7Luk67CL7J2EIOyImOygle2VoCDsiJgg7JeG7Iq164uI64ukLlxuIgorIuuMgOu2gOu2hOydmCDqsr3smrAg67mIIOy7pOuwiyDrqZTsi5zsp4Ag65WM66y47J206rGw64KYLCDrmJDripQg7Luk67CLIOyghCDtm4TtgazqsIAg7Iuk7Yyo7ZaI6riwXG4iCisi65WM66y47J6F64uI64ukLiDsu6TrsIsg66mU7Iuc7KeA66W8IOyImOygle2VmOq4sCDsoITsl5Ag7J20IOusuOygnOulvCDrqLzsoIAg7ZW06rKw7ZW07JW8IO2VqeuLiOuLpC4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjU4NworIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCittc2dzdHIgIuuLpOydjOyXkOyEnCDrqYjstqXri4jri6Q6ICRzaGExX2FiYnJldi4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NjAyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJyRzcXVhc2hfc3R5bGUnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIuydtOyghCDsu6TrsIsg7JeG7J20ICckc3F1YXNoX3N0eWxlJyDsiJjtlontlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NjQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmc6ICRyZXN0IgorbXNnc3RyICLsi6Ttlokg7KSROiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NjUyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gZmFpbGVkOiAkcmVzdCIKK21zZ3N0ciAi7Iuk7ZaJIOyLpO2MqDogJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjY1NAorbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLqt7jrpqzqs6Ag7J24642x7IqkIOq3uOumrOqzoC/rmJDripQg7J6R7JeFIO2PtOuNlOyXkCDrs4Dqsr0g7IKs7ZWt7J20IOyeiOyKteuLiOuLpCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NjU2Cittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIuusuOygnOulvCDrsJTroZzsnqHqs6AsIOuLpOydjOydhCDsi6TtlontlZjsi63si5zsmKRcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIy4gVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjY2OQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICRyZXN0XG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIuyLpO2WiSDshLHqs7U6ICRyZXN0XG4iCisi7ZWY7KeA66eMIOuzgOqyvSDsgqztla3snYQg7J24642x7IqkIOuwjy/rmJDripQg7J6R7JeFIO2PtOuNlOyXkCDrgqjqsqjrkaHri4jri6QuXG4iCisi67OA6rK9IOyCrO2VreydhCDsu6TrsIvtlZjqsbDrgpgg7Iqk7YOc7Iuc7JeQIOuEo+ycvOugpOuptCwg64uk7J2M7J2EIOyLpO2Wie2VmOyLreyLnOyYpDpcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NjgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1hbmQ6ICRjb21tYW5kICRzaGExICRyZXN0IgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCDrqoXroLk6ICRjb21tYW5kICRzaGExICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo2ODEKK21zZ2lkICJQbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAiJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIOuqheugueycvOuhnCDrsJTroZzsnqHsnLzsi63si5zsmKQuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo3MTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkICRoZWFkX25hbWUuIgorbXNnc3RyICLshLHqs7XsoIHsnLzroZwg66as67Kg7J207Iqk7ZaI6rOgICRoZWFkX25hbWUg7JeF642w7J207Yq47ZaI7Iq164uI64ukLiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NzQwCittc2dpZCAiY291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICJIRUFE64qUIOu2hOumrO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo3NzgKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIkNIRVJSWV9QSUNLX0hFQUTrpbwg7KCc6rGw7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjc4MworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlXG4iCisic3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIuyekeyXhSDtj7TrjZTsl5Ag7Iqk7YWM7J207KeV7ZWcIOuzgOqyvSDsgqztla3snbQg7J6I7Iq164uI64ukLlxuIgorIuydtCDrs4Dqsr0g7IKs7ZWt7J2EIOydtOyghCDsu6TrsIvsl5Ag7ZWp7LmY66Ck66m0LFxuIgorIuuLpOydjOydhCDsi6TtlontlZjsi63si5zsmKQ6XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyLsg4gg7Luk67CL7Jy866GcIOunjOuTnOugpOuptCDri6TsnYzsnYQg7Iuk7ZaJ7ZWY7Iut7Iuc7JikOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIuyWtOuWpCDqsr3smrDsnbTrk6AsIOuniOy5nCDri6TsnYzsl5Ag64uk7J2MIOuqheugueycvOuhnCDqs4Tsho3tlanri4jri6Q6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6ODAwCittc2dpZCAiRXJyb3IgdHJ5aW5nIHRvIGZpbmQgdGhlIGF1dGhvciBpZGVudGl0eSB0byBhbWVuZCBjb21taXQiCittc2dzdHIgIuy7pOuwi+ydhCDsiJjsoJXtlZwg7J6R7ISx7J6QIOyLoOybkOydhCDssL7ripTrjbAg7Jik66WYIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo4MDUKK21zZ2lkICIiCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAiIgorIuyekeyXhSDtj7TrjZTsl5Ag7Luk67CL7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWt7J20IOyeiOyKteuLiOuLpC4g7J20IOyCrO2VreydhCDrqLzsoIBcbiIKKyLsu6TrsIvtlZjqs6AgJ2dpdCByZWJhc2UgLS1jb250aW51ZScg66qF66C57J2EIOuLpOyLnCDsi6TtlontlZjsi63si5zsmKQuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo4MTAgZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6ODE0Cittc2dpZCAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIuyKpO2FjOydtOynle2VnCDrs4Dqsr0g7IKs7ZWt7J2AIOy7pOuwi+2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6ODQzCittc2dpZCAiIgorIlxuIgorIllvdSBhcmUgZWRpdGluZyB0aGUgdG9kbyBmaWxlIG9mIGFuIG9uZ29pbmcgaW50ZXJhY3RpdmUgcmViYXNlLlxuIgorIlRvIGNvbnRpbnVlIHJlYmFzZSBhZnRlciBlZGl0aW5nLCBydW46XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisi7KeE7ZaJIOykkeyduCDrjIDtmZTtmJUg66as67Kg7J207Iqk7J2YIFRPRE8g7YyM7J287J2EIO2OuOynke2VmOuKlCDspJHsnoXri4jri6QuXG4iCisi7Y647KeRIOuSpOyXkCDrpqzrsqDsnbTsiqTrpbwg6rOE7IaN7ZWY66Ck66m0IOuLpOydjOydhCDsi6TtlontlZjsi63si5zsmKQ6XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo4NTEgZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6OTM3Cittc2dpZCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIgorbXNnc3RyICLtjrjsp5HquLDrpbwg7Iuk7ZaJ7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjg3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCittc2dzdHIgIiRzd2l0Y2hfdG/rpbwg7LK07YGs7JWE7JuD7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjg3OQorbXNnaWQgIk5vIEhFQUQ/IgorbXNnc3RyICJIRUFE6rCAIOyXhuyKteuLiOuLpD8iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjg4MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJHN0YXRlX2RpciIKK21zZ3N0ciAi7J6E7Iuc66GcICRzdGF0ZV9kaXIg65SU66CJ7YSw66as66W8IOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo4ODMKK21zZ2lkICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAi64yA7ZmU7ZiV7Jy866GcIO2RnOyLnO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6OTE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZHMpIgorbXNnc3RyWzBdICLrpqzrsqDsnbTsiqQgJHNob3J0cmV2aXNpb25zLCAkc2hvcnRvbnRvIOychOuhnCAo66qF66C5ICR0b2RvY291bnTqsJwpIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo5MjAKK21zZ2lkICIiCisiXG4iCisiXHRIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorIlx0IgorbXNnc3RyICIiCisiXG4iCisi7ZWY7KeA66eMIOuqqOuRkCDsoJzqsbDtlaAg6rK97JqwLCDrpqzrsqDsnbTsiqTrpbwg7KSR7KeA7ZWp64uI64ukLlxuIgorIlxuIgorIlx0IgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo5MjcKK21zZ2lkICJOb3RlIHRoYXQgZW1wdHkgY29tbWl0cyBhcmUgY29tbWVudGVkIG91dCIKK21zZ3N0ciAi64uoIOu5iCDsu6TrsIvsnYAg7KO87ISdIOyymOumrOuQmOyXiOyKteuLiOuLpC4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjk4MAorbXNnaWQgIkNvdWxkIG5vdCBnZW5lcmF0ZSB0b2RvIGxpc3QiCittc2dzdHIgIu2VoCDsnbwg66qp66Gd7J2EIOyDneyEse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMDAxIGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjEwMDYKK21zZ2lkICJDb3VsZCBub3QgaW5pdCByZXdyaXR0ZW4gY29tbWl0cyIKK21zZ3N0ciAi64uk7IucIOyekeyEseuQnCDsu6TrsIvsnYQg7LSI6riw7ZmU7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDo4OSBnaXQtc2gtc2V0dXAuc2g6OTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVzYWdlOiAkZGFzaGxlc3MgJFVTQUdFIgorbXNnc3RyICLsgqzsmqnrspU6ICRkYXNobGVzcyAkVVNBR0UiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoxOTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBjaGRpciB0byAkY2R1cCwgdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiRjZHVwIOuUlOugie2EsOumrOuhnCAo7J6R7JeF7Y+0642UIOy1nOyDgeychCkg7J2064+Z7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoxOTkgZ2l0LXNoLXNldHVwLnNoOjIwNgorIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6ICRwcm9ncmFtX25hbWUgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIuy5mOuqheyggTogJHByb2dyYW1fbmFtZeydgCDsnpHsl4Ug7Y+0642UIOyXhuydtCDsgqzsmqntlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjAKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi66as67Kg7J207Iqk7ZWgIOyImCDsl4bsirXri4jri6Q6IOyKpO2FjOydtOynle2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6QuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjIzCittc2dpZCAiQ2Fubm90IHJld3JpdGUgYnJhbmNoZXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLruIzrnpzsuZjrpbwg64uk7IucIOyTuCDsiJgg7JeG7Iq164uI64ukOiDsiqTthYzsnbTsp5XtlZjsp4Ag7JWK7J2AIOuzgOqyvSDsgqztla3snbQg7J6I7Iq164uI64ukLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNgorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIuumrOuyoOydtOyKpOuhnCDtkoDsnYQg7ZWgIOyImCDsl4bsirXri4jri6Q6IOyKpO2FjOydtOynle2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6QuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiRhY3Rpb24g7ZWgIOyImCDsl4bsirXri4jri6Q6IOyKpO2FjOydtOynle2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6QuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQyCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi66as67Kg7J207Iqk7ZWgIOyImCDsl4bsirXri4jri6Q6IOyduOuNseyKpOyXkCDsu6TrsIvtlZjsp4Ag7JWK7J2AIOuzgOqyvSDsgqztla3snbQg7J6I7Iq164uI64ukLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0NQorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisi66as67Kg7J207Iqk66GcIO2SgOydhCDtlaAg7IiYIOyXhuyKteuLiOuLpDog7J24642x7Iqk7JeQIOy7pOuwi+2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6QuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiJGFjdGlvbiDtlaAg7IiYIOyXhuyKteuLiOuLpDog7J24642x7Iqk7JeQIOy7pOuwi+2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6QuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjUyCittc2dpZCAiQWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLstpTqsIDroZwsIOyduOuNseyKpOyXkCDsu6TrsIvtlZjsp4Ag7JWK7J2AIOuzgOqyvSDsgqztla3snbQg7J6I7Iq164uI64ukLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3MgorbXNnaWQgIllvdSBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIuydtCDrqoXroLnsnYAg7J6R7JeFIO2PtOuNlOydmCDstZzsg4HsnITsl5DshJzrp4wg7JO4IOyImCDsnojsirXri4jri6QuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6Mzc3Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIuq5gyDrlJTroInthLDrpqzsnZgg7KCI64yAIOqyveuhnOulvCDslYzslYTrgrwg7IiYIOyXhuyKteuLiOuLpCIKKworIy4gVFJBTlNMQVRPUlM6IHlvdSBjYW4gYWRqdXN0IHRoaXMgdG8gYWxpZ24gImdpdCBhZGQgLWkiIHN0YXR1cyBtZW51CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE5NgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIlMTJzICUxMnMgJXMiCittc2dzdHIgIiUxMnMgJTEycyAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxOTcKK21zZ2lkICJzdGFnZWQiCittc2dzdHIgIuyKpO2FjOydtOynlSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxOTcKK21zZ2lkICJ1bnN0YWdlZCIKK21zZ3N0ciAi7JWI7Iqk7YWM7J207KeVIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI1MyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI3OAorbXNnaWQgImJpbmFyeSIKK21zZ3N0ciAi67CU7J2064SI66asIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMxNgorbXNnaWQgIm5vdGhpbmciCittc2dzdHIgIuyXhuydjCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyOTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMTMKK21zZ2lkICJ1bmNoYW5nZWQiCittc2dzdHIgIuyViOuwlOuAnCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MDkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiYWRkZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJhZGRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICLqsr3roZwgJWTqsJwg7LaU6rCAXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVwZGF0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ1cGRhdGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIuqyveuhnCAlZOqwnCDsl4XrjbDsnbTtirhcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAicmV2ZXJ0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJyZXZlcnRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICLqsr3roZwgJWTqsJwg65CY64+M66a8XG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInRvdWNoZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ0b3VjaGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIuqyveuhnCAlZOqwnCDqsbTrk5zrprxcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjcKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgIuyXheuNsOydtO2KuCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MzkKK21zZ2lkICJSZXZlcnQiCittc2dzdHIgIuuQmOuPjOumrOq4sCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAibm90ZTogJXMgaXMgdW50cmFja2VkIG5vdy5cbiIKK21zZ3N0ciAi7KO87J2YOiAlc+ydgCjripQpIO2YhOyerCDstpTsoIHtlZjsp4Ag7JWK7Iq164uI64ukLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY3MworbXNnaWQgIkFkZCB1bnRyYWNrZWQiCittc2dzdHIgIuy2lOygge2VmOyngCDslYrripQg7YyM7J28IOy2lOqwgCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NzkKK21zZ2lkICJObyB1bnRyYWNrZWQgZmlsZXMuXG4iCittc2dzdHIgIuy2lOygge2VmOyngCDslYrripQg7YyM7J28IOyXhuydjC5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDMzCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFnaW5nLiIKK21zZ3N0ciAiIgorIu2MqOy5mOqwgCDquZTrgZTtlZjqsowg7KCB7Jqp65CY66m0LCDtjrjsp5Eg67aA67aE7J2AIOymieyLnCDsiqTthYzsnbTsp5XsnLzroZxcbiIKKyLtkZzsi5zrkKnri4jri6QuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwMzYKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YXNoaW5nLiIKK21zZ3N0ciAiIgorIu2MqOy5mOqwgCDquZTrgZTtlZjqsowg7KCB7Jqp65CY66m0LCDtjrjsp5Eg67aA67aE7J2AIOymieyLnCDsiqTtg5zsi5zsl5BcbiIKKyLtkZzsi5zrkKnri4jri6QuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwMzkKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHVuc3RhZ2luZy4iCittc2dzdHIgIiIKKyLtjKjsuZjqsIAg6rmU64GU7ZWY6rKMIOyggeyaqeuQmOuptCwg7Y647KeRIOu2gOu2hOydgCDsponsi5wg7Iqk7YWM7J207KeVIOyVhOuLmOycvOuhnFxuIgorIu2RnOyLnOuQqeuLiOuLpC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA0MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTEKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGFwcGx5aW5nLiIKK21zZ3N0ciAiIgorIu2MqOy5mOqwgCDquZTrgZTtlZjqsowg7KCB7Jqp65CY66m0LCDtjrjsp5Eg67aA67aE7J2AIOymieyLnCDsoIHsmqnsnLzroZxcbiIKKyLtkZzsi5zrkKnri4jri6QuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNDUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDQ4Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBkaXNjYXJkaW5nLiIKK21zZ3N0ciAiIgorIu2MqOy5mOqwgCDquZTrgZTtlZjqsowg7KCB7Jqp65CY66m0LCDtjrjsp5Eg67aA67aE7J2AIOymieyLnCDrsoTrprzsnLzroZxcbiIKKyLtkZzsi5zrkKnri4jri6QuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwODUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICLrtoDrtoQg7Y647KeRIO2MjOydvOydhCDsk7DquLDsmqnsnLzroZwg7Jes64qU642wIOyLpO2MqDogJyVzJyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDg2Cittc2dpZCAiTWFudWFsIGh1bmsgZWRpdCBtb2RlIC0tIHNlZSBib3R0b20gZm9yIGEgcXVpY2sgZ3VpZGUuXG4iCittc2dzdHIgIuyImOuPmSDrtoDrtoQg7Y647KeRIOuqqOuTnCAtLSDruaDrpbgg7ISk66qF7J2AIOunqCDslYTrnpjrpbwg67O07Iut7Iuc7JikLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwOTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlcyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKyItLS1cbiIKKyInJXMnIOykhOydhCDsoJzqsbDtlZjroKTrqbQsIOykhOydhCAnICcg7KSE66GcIOunjOuTnOyLreyLnOyYpCAo7Luo7YWN7Iqk7Yq4KS5cbiIKKyInJXMnIOykhOydhCDsoJzqsbDtlZjroKTrqbQsIOykhOydhCDsgq3soJztlZjsi63si5zsmKQuLlxuIgorIiVzKOycvCnroZwg7Iuc7J6R7ZWY64qUIOykhOydgCDsoJzqsbDrkKnri4jri6RcbiIKKworIy4gVFJBTlNMQVRPUlM6ICdpdCcgcmVmZXJzIHRvIHRoZSBwYXRjaCBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIG1lc3NhZ2VzLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTAwCittc2dpZCAiIgorIklmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlIGdpdmVuIGFuIG9wcG9ydHVuaXR5IHRvXG4iCisiZWRpdCBhZ2Fpbi4gIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgcmVtb3ZlZCwgdGhlbiB0aGUgZWRpdCBpc1xuIgorImFib3J0ZWQgYW5kIHRoZSBodW5rIGlzIGxlZnQgdW5jaGFuZ2VkLlxuIgorbXNnc3RyICIiCisi6rmU64GU7ZWY6rKMIOyggeyaqeuQmOyngCDslYrsnLzrqbQsIOuLpOyLnCDtjrjsp5HtlaAg6riw7ZqM6rCAIOyeiOyKteuLiOuLpC4g66qo65OgIOykhOydhCDsoJzqsbDtlaAg6rK9IgorIuyasCxcbiIKKyLtjrjsp5HsnYAg7KSR64uo65CY6rOgIOydtCDrtoDrtoTsnYAg67OA6rK965CY7KeAIOyViuydgCDsg4Htg5zroZwg64Ko7JWE7J6I6rKMIOuQqeuLiOuLpC5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTE0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciByZWFkaW5nOiAlcyIKK21zZ3N0ciAi67aA67aEIO2OuOynkSDtjIzsnbzsnYQg7J296riw7Jqp7Jy866GcIOyXrOuKlOuNsCDsi6TtjKg6ICclcyciCisKKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjEzCittc2dpZCAiIgorIllvdXIgZWRpdGVkIGh1bmsgZG9lcyBub3QgYXBwbHkuIEVkaXQgYWdhaW4gKHNheWluZyBcIm5vXCIgZGlzY2FyZHMhKSBbeS9uXT8gIgorbXNnc3RyICIiCisi7Y647KeR7ZWcIOu2gOu2hOydtCDsoIHsmqnrkJjsp4Ag7JWK7Iq164uI64ukLiDri6Tsi5wg7Y647KeR7ZWY7Iuc6rKg7Iq164uI6rmMIChcIm5vXCLrnbzqs6Ag7ZWY66m0IOuyhOumvSIKKyLri4jri6QhKSBbeS9uXT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyMjIKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g7J20IOu2gOu2hCDsiqTthYzsnbTsp5VcbiIKKyJuIC0g7J20IOu2gOu2hCDsiqTthYzsnbTsp5XtlZjsp4Ag7JWK7J2MXG4iCisicSAtIOuBneuCtOq4sC4g7J20IOu2gOu2hOqzvCDrgpjrqLjsp4Ag66qo65GQIOyKpO2FjOydtOynle2VmOyngCDslYrsnYxcbiIKKyJhIC0g7J20IOu2gOu2hOqzvCDtjIzsnbzsnZgg65KkIOu2gOu2hCDrqqjrkZAg7Iqk7YWM7J207KeVXG4iCisiZCAtIOydtCDrtoDrtoTqs7wg7YyM7J287J2YIOuSpCDrtoDrtoQg66qo65GQIOyKpO2FjOydtOynle2VmOyngCDslYrsnYwiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIyOAorbXNnaWQgIiIKKyJ5IC0gc3Rhc2ggdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YXNoIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDsnbQg67aA67aEIOyKpO2DnOyLnFxuIgorIm4gLSDsnbQg67aA67aEIOyKpO2DnOyLnO2VmOyngCDslYrsnYxcbiIKKyJxIC0g64Gd64K06riwLiDsnbQg67aA67aE6rO8IOuCmOuouOyngCDrqqjrkZAg7Iqk7YOc7Iuc7ZWY7KeAIOyViuydjFxuIgorImEgLSDsnbQg67aA67aE6rO8IO2MjOydvOydmCDrkqQg67aA67aEIOuqqOuRkCDsiqTtg5zsi5xcbiIKKyJkIC0g7J20IOu2gOu2hOqzvCDtjIzsnbzsnZgg65KkIOu2gOu2hCDrqqjrkZAg7Iqk7YOc7Iuc7ZWY7KeAIOyViuydjCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjM0Cittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDsnbQg67aA67aEIOyKpO2FjOydtOynlSDtlbTsoJxcbiIKKyJuIC0g7J20IOu2gOu2hCDsiqTthYzsnbTsp5Ug7ZW07KCc7ZWY7KeAIOyViuydjFxuIgorInEgLSDrgZ3rgrTquLAuIOydtCDrtoDrtoTqs7wg64KY66i47KeAIOuqqOuRkCDsiqTthYzsnbTsp5Ug7ZW07KCc7ZWY7KeAIOyViuydjFxuIgorImEgLSDsnbQg67aA67aE6rO8IO2MjOydvOydmCDrkqQg67aA67aEIOuqqOuRkCDsiqTthYzsnbTsp5Ug7ZW07KCcXG4iCisiZCAtIOydtCDrtoDrtoTqs7wg7YyM7J287J2YIOuSpCDrtoDrtoQg66qo65GQIOyKpO2FjOydtOynlSDtlbTsoJztlZjsp4Ag7JWK7J2MIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNDAKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g7J20IOu2gOu2hCDsnbjrjbHsiqTsl5Ag7KCB7JqpXG4iCisibiAtIOydtCDrtoDrtoQg7J24642x7Iqk7JeQIOyggeyaqe2VmOyngCDslYrsnYxcbiIKKyJxIC0g64Gd64K06riwLiDsnbQg67aA67aE6rO8IOuCmOuouOyngCDrqqjrkZAg7KCB7Jqp7ZWY7KeAIOyViuydjFxuIgorImEgLSDsnbQg67aA67aE6rO8IO2MjOydvOydmCDrkqQg67aA67aEIOuqqOuRkCBcbiIKKyJkIC0g7J20IOu2gOu2hOqzvCDtjIzsnbzsnZgg65KkIOu2gOu2hCDrqqjrkZAg7KCB7Jqp7ZWY7KeAIOyViuydjCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjQ2Cittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g7J20IOu2gOu2hCDsnpHsl4Ug7Y+0642U7JeQ7IScIOuyhOumvFxuIgorIm4gLSDsnbQg67aA67aEIOyekeyXhSDtj7TrjZTsl5DshJwg67KE66as7KeAIOyViuydjFxuIgorInEgLSDrgZ3rgrTquLAuIOydtCDrtoDrtoTqs7wg64KY66i47KeAIOuqqOuRkCDrsoTrpqzsp4Ag7JWK7J2MXG4iCisiYSAtIOydtCDrtoDrtoTqs7wg7YyM7J287J2YIOuSpCDrtoDrtoQg66qo65GQIOuyhOumvFxuIgorImQgLSDsnbQg67aA67aE6rO8IO2MjOydvOydmCDrkqQg67aA67aEIOuqqOuRkCDrsoTrpqzsp4Ag7JWK7J2MIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNTIKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIOydtCDrtoDrtoQg7J24642x7Iqk7JmAIOyekeyXhSDtj7TrjZTsl5DshJwg67KE66a8XG4iCisibiAtIOydtCDrtoDrtoQg7J24642x7Iqk7JmAIOyekeyXhSDtj7TrjZTsl5DshJwg67KE66as7KeAIOyViuydjFxuIgorInEgLSDrgZ3rgrTquLAuIOydtCDrtoDrtoTqs7wg64KY66i47KeAIOuqqOuRkCDrsoTrpqzsp4Ag7JWK7J2MXG4iCisiYSAtIOydtCDrtoDrtoTqs7wg7YyM7J287J2YIOuSpCDrtoDrtoQg66qo65GQIOuyhOumvFxuIgorImQgLSDsnbQg67aA67aE6rO8IO2MjOydvOydmCDrkqQg67aA67aEIOuqqOuRkCDrsoTrpqzsp4Ag7JWK7J2MIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNTgKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDsnbQg67aA67aEIOyduOuNseyKpOyZgCDsnpHsl4Ug7Y+0642U7JeQIOyggeyaqVxuIgorIm4gLSDsnbQg67aA67aEIOyduOuNseyKpOyZgCDsnpHsl4Ug7Y+0642U7JeQIOyggeyaqe2VmOyngCDslYrsnYxcbiIKKyJxIC0g64Gd64K06riwLiDsnbQg67aA67aE6rO8IOuCmOuouOyngCDrqqjrkZAg7KCB7Jqp7ZWY7KeAIOyViuydjFxuIgorImEgLSDsnbQg67aA67aE6rO8IO2MjOydvOydmCDrkqQg67aA67aEIOuqqOuRkCBcbiIKKyJkIC0g7J20IOu2gOu2hOqzvCDtjIzsnbzsnZgg65KkIOu2gOu2hCDrqqjrkZAg7KCB7Jqp7ZWY7KeAIOyViuydjCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjczCittc2dpZCAiIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiZyAtIOydtOuPme2VoCDrtoDrtoQg7ISg7YOdXG4iCisiLyAtIOyjvOyWtOynhCDsoJXqt5zsi53sl5Ag66ee64qUIOu2gOu2hCDqsoDsg4lcbiIKKyJqIC0g7J20IOu2gOu2hCDrr7jqsrDsoJUg7IOB7YOc66GcIOuCqOqyqOuRkOqzoCwg64uk7J2MIOuvuOqysOyglSDrtoDrtoQg67O06riwXG4iCisiSiAtIOydtCDrtoDrtoQg66+46rKw7KCVIOyDge2DnOuhnCDrgqjqsqjrkZDqs6AsIOuLpOydjCDrtoDrtoQg67O06riwXG4iCisiayAtIOydtCDrtoDrtoQg66+46rKw7KCVIOyDge2DnOuhnCDrgqjqsqjrkZDqs6AsIOydtOyghCDrr7jqsrDsoJUg67aA67aEIOuztOq4sFxuIgorIksgLSDsnbQg67aA67aEIOuvuOqysOyglSDsg4Htg5zroZwg64Ko6rKo65GQ6rOgLCDsnbTsoIQg67aA67aEIOuztOq4sFxuIgorInMgLSDtmITsnqwg67aA67aE7J2EIOyekeydgCDrtoDrtoTsnYQg7Kq86rCc6riwXG4iCisiZSAtIO2YhOyerCDrtoDrtoTsnYQg7IiY64+Z7Jy866GcIO2OuOynkVxuIgorIj8gLSDrj4Tsm4Drp5Ag67O06riwXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMwNAorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIgorbXNnc3RyICLshKDtg53tlZwg67aA67aE7J2AIOyduOuNseyKpOyXkCDsoIHsmqnrkJjsp4Ag7JWK7Iq164uI64ukIVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMDUKK21zZ2lkICJBcHBseSB0aGVtIHRvIHRoZSB3b3JrdHJlZSBhbnl3YXk/ICIKK21zZ3N0ciAi6re4656Y64+EIOyekeyXhSDtj7TrjZTsl5Ag7KCB7Jqp7ZWg6rmM7JqUPyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzA4Cittc2dpZCAiTm90aGluZyB3YXMgYXBwbGllZC5cbiIKK21zZ3N0ciAi7JWE66y0IOqyg+uPhCDsoIHsmqnrkJjsp4Ag7JWK7JWY7Iq164uI64ukLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMTkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdW5tZXJnZWQ6ICVzXG4iCittc2dzdHIgIuuzke2Vqe2VmOyngCDslYrsnYAg7IKs7ZWtIOustOyLnDogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzI4Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAi67CU7J2064SI66asIO2MjOydvOunjCDrsJTrgIzsl4jsirXri4jri6QuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMzMAorbXNnaWQgIk5vIGNoYW5nZXMuXG4iCittc2dzdHIgIuuzgOqyvSDsgqztla0g7JeG7J2MLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMzgKK21zZ2lkICJQYXRjaCB1cGRhdGUiCittc2dzdHIgIu2MqOy5mCDsl4XrjbDsnbTtirgiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM5MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi66qo65OcIOuzgOqyveydhCDsiqTthYzsnbTsp5Xtlanri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM5MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi7IKt7KCc66W8IOyKpO2FjOydtOynle2VqeuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzkyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi7J20IOu2gOu2hCDsiqTthYzsnbTsp5Xtlanri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM5NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi66qo65OcIOuzgOqyvSDsiqTtg5zsi5ztlanri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM5NgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi7IKt7KCcIOyKpO2DnOyLnO2VqeuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi7J20IOu2gOu2hCDsiqTtg5zsi5ztlanri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQwMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLrqqjrk5wg67OA6rK97J2EIOyKpO2FjOydtOyngCDtlbTsoJztlanri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQwMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLsgq3soJzrpbwg7Iqk7YWM7J207KeAIO2VtOygnO2VqeuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDAyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLsnbQg67aA67aE7J2EIOyKpO2FjOydtOyngCDtlbTsoJztlanri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQwNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi66qo65OcIOuzgOqyveydhCDsnbjrjbHsiqTsl5Ag7KCB7Jqp7ZWp64uI6rmMIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MDYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuyCreygnOulvCDsnbjrjbHsiqTsl5Ag7KCB7Jqp7ZWp64uI6rmMIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MDcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLsnbQg67aA67aE7J2EIOyduOuNseyKpOyXkCDsoIHsmqntlanri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQxMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuuqqOuTnCDrs4Dqsr3snYQg7J6R7JeFIO2PtOuNlOyXkOyEnCDrsoTrpr3ri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQxMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuyCreygnOulvCDsnpHsl4Ug7Y+0642U7JeQ7IScIOuyhOumveuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuydtCDrtoDrtoTsnYQg7J6R7JeFIO2PtOuNlOyXkOyEnCDrsoTrpr3ri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQxNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLrqqjrk5wg67OA6rK97J2EIOyduOuNseyKpOyZgCDsnpHsl4Ug7Y+0642U7JeQ7IScIOuyhOumveuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDE2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuyCreygnOulvCDsnbjrjbHsiqTsmYAg7J6R7JeFIO2PtOuNlOyXkOyEnCDrsoTrpr3ri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQxNworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi7J20IOu2gOu2hOydhCDsnbjrjbHsiqTsmYAg7J6R7JeFIO2PtOuNlOyXkOyEnCDrsoTrpr3ri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuuqqOuTnCDrs4Dqsr3snYQg7J24642x7Iqk7JmAIOyekeyXhSDtj7TrjZTsl5Ag7KCB7Jqp7ZWp64uI6rmMIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLsgq3soJzrpbwg7J24642x7Iqk7JmAIOyekeyXhSDtj7TrjZTsl5Ag7KCB7Jqp7ZWp64uI6rmMIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi7J20IOu2gOu2hOydhCDsnbjrjbHsiqTsmYAg7J6R7JeFIO2PtOuNlOyXkCDsoIHsmqntlanri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTUyMgorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG9cbiIKK21zZ3N0ciAi7J2064+Z7ZWgIOu2gOu2hOydtCDsl4bsirXri4jri6RcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTI5Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuayAoPHJldD4gdG8gc2VlIG1vcmUpPyAiCittc2dzdHIgIuyWtOuKkCDrtoDrtoTsnLzroZwg7J2064+Z7ZWp64uI6rmMICjrjZQg67O066Ck66m0IDxyZXQ+KT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1MzEKK21zZ2lkICJnbyB0byB3aGljaCBodW5rPyAiCittc2dzdHIgIuyWtOuKkCDrtoDrtoTsnLzroZwg7J2064+Z7ZWp64uI6rmMPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJ1xuIgorbXNnc3RyICLsnpjrqrvrkJwg67KI7Zi4OiAnJXMnXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU0NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS5cbiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLlxuIgorbXNnc3RyWzBdICLrr7jslYjtlanri4jri6QuIOu2gOu2hOydtCAlZOqwnCDrsJbsl5Ag7JeG7Iq164uI64ukLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzEKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBzZWFyY2hcbiIKK21zZ3N0ciAi6rKA7IOJ7ZWgIOu2gOu2hOydtCDsl4bsirXri4jri6RcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc1Cittc2dpZCAic2VhcmNoIGZvciByZWdleD8gIgorbXNnc3RyICLsoJXqt5zsi53snYQg6rKA7IOJ7ZWp64uI6rmMPyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTg4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlc1xuIgorbXNnc3RyICLsnpjrqrvrkJwg7ZiV7YOc7J2YIOqygOyDiSDsoJXqt5zsi50gJXM6ICVzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU5OAorbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVyblxuIgorbXNnc3RyICJb7KO87Ja07KeEIO2MqO2EtOyXkCDrp57ripQg67aA67aE7J20IOyXhuyKteuLiOuLpFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjMyCittc2dpZCAiTm8gcHJldmlvdXMgaHVua1xuIgorbXNnc3RyICLsnbTsoIQg67aA67aE7J20IOyXhuyKteuLiOuLpFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjM4Cittc2dpZCAiTm8gbmV4dCBodW5rXG4iCittc2dzdHIgIuuLpOydjCDrtoDrtoTsnbQg7JeG7Iq164uI64ukXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY0NAorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIuuvuOyViO2VqeuLiOuLpC4g7J20IOu2gOu2hOydhCDrtoTrpqwg7ZWgIOyImCDsl4bsirXri4jri6RcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjUwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVuay5cbiIKK21zZ2lkX3BsdXJhbCAiU3BsaXQgaW50byAlZCBodW5rcy5cbiIKK21zZ3N0clswXSAiJWTqsJwg67aA67aE7Jy866GcIOuCmOuIleuLiOuLpC5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjYwCittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICLrr7jslYjtlanri4jri6QuIOydtCDrtoDrtoTsnYQg7IiY7KCV7ZWgIOyImCDsl4bsirXri4jri6RcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzA2Cittc2dpZCAiUmV2aWV3IGRpZmYiCittc2dzdHIgImRpZmYg6rKA7YagIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGRvIG5vdCB0cmFuc2xhdGUgdGhlIGNvbW1hbmQgbmFtZXMKKyMuICdzdGF0dXMnLCAndXBkYXRlJywgJ3JldmVydCcsIGV0Yy4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcyNQorbXNnaWQgIiIKKyJzdGF0dXMgICAgICAgIC0gc2hvdyBwYXRocyB3aXRoIGNoYW5nZXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzXG4iCisicmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uXG4iCisicGF0Y2ggICAgICAgICAtIHBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseVxuIgorImRpZmYgICAgICAgICAgLSB2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleFxuIgorImFkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mICIKKyJjaGFuZ2VzXG4iCittc2dzdHIgIiIKKyJzdGF0dXMgICAgICAgIC0g67OA6rK9IOyCrO2VreydtCDsnojripQg6rK966Gc66W8IO2RnOyLnO2VqeuLiOuLpFxuIgorInVwZGF0ZSAgICAgICAgLSDrs4Dqsr0g7IKs7ZWtIOyKpO2FjOydtOynlSDrqqjsnYzsl5Ag7J6R7JeFIO2PtOuNlCDsg4Htg5zrpbwg7LaU6rCA7ZWp64uI64ukXG4iCisicmV2ZXJ0ICAgICAgICAtIOuzgOqyvSDsgqztla0g7Iqk7YWM7J207KeVIOuqqOydjOydhCBIRUFEIOuyhOyghOycvOuhnCDrkJjrj4zrpr3ri4jri6RcbiIKKyJwYXRjaCAgICAgICAgIC0g67CU64CQIOu2gOu2hOydhCDqs6jrnbzshJwg6rCc67OE7KCB7Jy866GcIOyXheuNsOydtO2KuO2VqeuLiOuLpFxuIgorImRpZmYgICAgICAgICAgLSBIRUFE7JmAIOyduOuNseyKpCDsgqzsnbTsnZgg7LCo7J207KCQ7J2EIOu0heuLiOuLpFxuIgorImFkZCB1bnRyYWNrZWQgLSDstpTsoIHrkJjsp4Ag7JWK64qUIO2MjOydvOydmCDrgrTsmqnsnYQg67OA6rK9IOyCrO2VrSDsiqTthYzsnbTsp5Ug66qo7J2M7JeQIOy2lOqwgO2VqSIKKyLri4jri6RcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzQyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc0NworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzUwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc1NworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzYxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc2NworbXNnaWQgIm1pc3NpbmcgLS0iCittc2dzdHIgIi0tIOu5oOynkCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVua25vd24gLS1wYXRjaCBtb2RlOiAlcyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQgLS1wYXRjaCDrqqjrk5w6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzc1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMsIGV4cGVjdGluZyAtLSIKK21zZ3N0ciAi7J247J6Q6rCAICglcykg7J6Y66q765CY7JeI6rOgLCAtLeqwgCDsmYDslbwg7ZWp64uI64ukIgorCisjIOyjvOydmDog7LSIIOuLqOychOydvCDqsr3smrDrpbwg66eQ7ZWc64ukCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzMAorbXNnaWQgImxvY2FsIHpvbmUgZGlmZmVycyBmcm9tIEdNVCBieSBhIG5vbi1taW51dGUgaW50ZXJ2YWxcbiIKK21zZ3N0ciAi7KeA7JetIOyLnOqwhOuMgOyZgCBHTVTsnZgg7LCo7J206rCAIOu2hCDri6jsnITqsIAg7JWE64uZ64uI64ukXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM3IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQzCittc2dpZCAibG9jYWwgdGltZSBvZmZzZXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDI0IGhvdXJzXG4iCittc2dzdHIgIuyngOyXrSDsi5zqsIEg7Jik7ZSE7IWL7J20IDI07Iuc6rCE67O064ukIO2BrOqxsOuCmCDsnpHsirXri4jri6RcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoyMTEgZ2l0LXNlbmQtZW1haWwucGVybDoyMTcKK21zZ2lkICJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciCittc2dzdHIgIu2OuOynkeq4sOqwgCDruYTsoJXsg4HsoIHsnLzroZwg64Gd64KY7IScLCDrqqjrkZAg7KSR7KeA7ZWp64uI64ukIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjI5NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBjb250YWlucyBhbiBpbnRlcm1lZGlhdGUgdmVyc2lvbiBvZiB0aGUgZW1haWwgeW91IHdlcmUgY29tcG9zaW5nLlxuIgorbXNnc3RyICInJXMnIOyViOyXkCDsnpHshLEg7KSR7J207JeI642YIOykkeqwhCDrsoTsoITsnZgg7KCE7J6Q66mU7J287J20IOuTpOyWtCDsnojsirXri4jri6QuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6Mjk5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiclcy5maW5hbCcgY29udGFpbnMgdGhlIGNvbXBvc2VkIGVtYWlsLlxuIgorbXNnc3RyICInJXMuZmluYWwnIOyViOyXkCDsnpHshLHtlZwg7KCE7J6Q66mU7J287J20IOuTpOyWtCDsnojsirXri4jri6QuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzE3Cittc2dpZCAiLS1kdW1wLWFsaWFzZXMgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgb3B0aW9uc1xuIgorbXNnc3RyICItLWR1bXAtYWxpYXNlcyDsmLXshZjsnYAg64uk66W4IOyYteyFmOqzvCDtmLjtmZjrkJjsp4Ag7JWK7Iq164uI64ukXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzgzIGdpdC1zZW5kLWVtYWlsLnBlcmw6NjM4Cittc2dpZCAiQ2Fubm90IHJ1biBnaXQgZm9ybWF0LXBhdGNoIGZyb20gb3V0c2lkZSBhIHJlcG9zaXRvcnlcbiIKK21zZ3N0ciAi7KCA7J6l7IaMIOuwluyXkOyEnCBnaXQgZm9ybWF0LXBhdGNoIOuqheugueydhCDsi6TtlontlaAg7IiYIOyXhuyKteuLiOuLpFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjM4NgorbXNnaWQgIiIKKyJgYmF0Y2gtc2l6ZWAgYW5kIGByZWxvZ2luYCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciAodmlhIGNvbW1hbmQtbGluZSBvciAiCisiY29uZmlndXJhdGlvbiBvcHRpb24pXG4iCittc2dzdHIgIiIKKyJgYmF0Y2gtc2l6ZWDsmYAgYHJlbG9naW5g7J2AIOqwmeydtCDsp4DsoJXtlbTslbwg7ZWp64uI64ukICjrqoXroLntlokg65iQ64qUIOyEpOyglSDsmLXshZgpXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDU2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1zdXBwcmVzcy1jYyBmaWVsZDogJyVzJ1xuIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCAtLXN1cHByZXNzLWNjIO2VhOuTnDogJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tY29uZmlybSBzZXR0aW5nOiAnJXMnXG4iCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIC0tY29uZmlybSDshKTsoJU6ICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgYWxpYXMgd2l0aCBxdW90ZXMgaXMgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAi6rK96rOgOiDrlLDsmLTtkZzqsIAg7J6I64qUIHNlbmRtYWlsIOuzhOy5reydgCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUxNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgOmluY2x1ZGU6YCBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICLqsr3qs6A6IGA6aW5jbHVkZTpg64qUIOyngOybkO2VmOyngCDslYrsirXri4jri6Q6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTE3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGAvZmlsZWAgb3IgYHxwaXBlYCByZWRpcmVjdGlvbiBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICLqsr3qs6A6IGAvZmlsZWAg65iQ64qUIGB8cGlwZWAg66as64uk7J2066CJ7IWY7J2AIOyngOybkO2VmOyngCDslYrsirXri4jri6Q6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTIyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGxpbmUgaXMgbm90IHJlY29nbml6ZWQ6ICVzXG4iCittc2dzdHIgIuqyveqzoDogc2VuZG1haWwg7KSE7J20IOyduOyLneuQmOyngCDslYrsirXri4jri6Q6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjA0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlICclcycgZXhpc3RzIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIHRoZSByYW5nZSBvZiBjb21taXRzXG4iCisidG8gcHJvZHVjZSBwYXRjaGVzIGZvci4gIFBsZWFzZSBkaXNhbWJpZ3VhdGUgYnkuLi5cbiIKKyJcbiIKKyIgICAgKiBTYXlpbmcgXCIuLyVzXCIgaWYgeW91IG1lYW4gYSBmaWxlOyBvclxuIgorIiAgICAqIEdpdmluZyAtLWZvcm1hdC1wYXRjaCBvcHRpb24gaWYgeW91IG1lYW4gYSByYW5nZS5cbiIKK21zZ3N0ciAiIgorIiclcycg7YyM7J287J20IOyeiOyngOunjCDsnbQg7YyM7J287J2AIO2MqOy5mOulvCDrp4zrk6Qg64yA7IOB7J24IOy7pOuwi+ydmCDrspTsnITqsIBcbiIKKyLrkKAg7IiY64+EIOyeiOyKteuLiOuLpC4g64uk7J2M6rO8IOqwmeydtCDslaDrp6TtlajsnYQg7JeG7JWgIOyjvOyLreyLnOyYpC4uLlxuIgorIlxuIgorIiAgICAqIO2MjOydvOydhCDsnZjrj4Ttlojri6TrqbQgXCIuLyVzXCIo7J20KeudvOqzoCDsk7Dqs6AsIOyVhOuLiOuptFxuIgorIiAgICAqIOuylOychOulvCDsnZjrj4Ttlojri6TrqbQgLS1mb3JtYXQtcGF0Y2gg7Ji17IWYIOyCrOyaqVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjYyNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbmRpciAlczogJXMiCittc2dzdHIgIiVz7JeQIG9wZW5kaXIg7Iuk7YyoOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NDkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorImZhdGFsOiAlczogJXNcbiIKKyJ3YXJuaW5nOiBubyBwYXRjaGVzIHdlcmUgc2VudFxuIgorbXNnc3RyICIiCisi7LmY66qF7KCBIOyYpOulmDogJXM6ICVzXG4iCisi6rK96rOgOiDtjKjsuZjrpbwg67O064K07KeAIOyViuyVmOyKteuLiOuLpFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY2MAorbXNnaWQgIiIKKyJcbiIKKyJObyBwYXRjaCBmaWxlcyBzcGVjaWZpZWQhXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLtjKjsuZgg7YyM7J287J2EIOyngOygle2VmOyngCDslYrslZjsirXri4jri6RcbiIKKyJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTm8gc3ViamVjdCBsaW5lIGluICVzPyIKK21zZ3N0ciAiJXMg7JWI7JeQIOygnOuqqSDspITsnbQg7JeG7Iq164uI64ukPyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2ODMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gZm9yIHdyaXRpbmcgJXM6ICVzIgorbXNnc3RyICIlc+yXkCDsk7DroKTqs6Ag7Jes64qU642wIOyLpO2MqDogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6Njk0Cittc2dpZCAiIgorIkxpbmVzIGJlZ2lubmluZyBpbiBcIkdJVDpcIiB3aWxsIGJlIHJlbW92ZWQuXG4iCisiQ29uc2lkZXIgaW5jbHVkaW5nIGFuIG92ZXJhbGwgZGlmZnN0YXQgb3IgdGFibGUgb2YgY29udGVudHNcbiIKKyJmb3IgdGhlIHBhdGNoIHlvdSBhcmUgd3JpdGluZy5cbiIKKyJcbiIKKyJDbGVhciB0aGUgYm9keSBjb250ZW50IGlmIHlvdSBkb24ndCB3aXNoIHRvIHNlbmQgYSBzdW1tYXJ5LlxuIgorbXNnc3RyICIiCisiXCJHSVQ6XCLsnLzroZwg7Iuc7J6R7ZWY64qUIOykhOydgCDsoJzqsbDrkKnri4jri6QuXG4iCisi7J6R7ISxIOykkeyduCDtjKjsuZjsl5Ag64yA7ZW0IOyghOyytCBkaWZmc3RhdOydhCDtj6ztlajtlZjqsbDrgphcbiIKKyLrqqnssKjrpbwg7Y+s7ZWo7ZW0IOuztOyLreyLnOyYpC5cbiIKKyJcbiIKKyLsmpTslb3snYQg67O064K064qUIOqyjCDslYTri4jrnbzrqbQg67O466y4IOuCtOyaqeydhCDsp4DsmrDsi63si5zsmKQuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzOiAlcyIKK21zZ3N0ciAiJXPsnYQo66W8KSDsl6zripTrjbAg7Iuk7YyoOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MzUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXMuZmluYWw6ICVzIgorbXNnc3RyICIlcy5maW5hbOydhCDsl6zripTrjbAg7Iuk7YyoOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3NzgKK21zZ2lkICJTdW1tYXJ5IGVtYWlsIGlzIGVtcHR5LCBza2lwcGluZyBpdFxuIgorbXNnc3RyICLsmpTslb0g7KCE7J6Q66mU7J287J20IOu5hOyWtCDsnojslrTshJwg64SY7Ja06rCR64uI64ukLlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgW3kvTl0gYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjgxMworIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdXNlIDwlcz4gW3kvTl0/ICIKK21zZ3N0ciAi7KCV66eQ66GcIDwlcz7snYQo66W8KSDsgqzsmqntlZjsi5zqsqDsirXri4jquYwgW3kvTl0/ICIKKworIyDso7zsnZg6ICc4Yml0J+ydtOudvOqzoCDqt7jrjIDroZwg7JO064ukLiDrqZTsnbwgZW5jb2Rpbmcg7Zek642U7JeQIOyTuCBsaXRlcmFs7J2EIOqwgOumrO2CtAorIzogZ2l0LXNlbmQtZW1haWwucGVybDo4NjgKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgOGJpdCwgYnV0IGRvIG5vdCBkZWNsYXJlIGEgQ29udGVudC1UcmFuc2Zlci0iCisiRW5jb2RpbmcuXG4iCittc2dzdHIgIiIKKyLri6TsnYwg7YyM7J287J20IDhiaXTsnbTsp4Drp4wsIENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmfsnYQg7ISk7KCV7ZWY7KeAIOyViuyVmOyKteuLiOuLpC5cbiIKKworIyDso7zsnZg6ICc4Yml0J+ydtOudvOqzoCDqt7jrjIDroZwg7JO064ukLiDrqZTsnbwgZW5jb2Rpbmcg7Zek642U7JeQIOyTuCBsaXRlcmFs7J2EIOqwgOumrO2CtAorIzogZ2l0LXNlbmQtZW1haWwucGVybDo4NzMKK21zZ2lkICJXaGljaCA4Yml0IGVuY29kaW5nIHNob3VsZCBJIGRlY2xhcmUgW1VURi04XT8gIgorbXNnc3RyICLslrTrlqQgOGJpdCDsnbjsvZTrlKnsnYQg7ISg7Ja47ZWp64uI6rmMIFtVVEYtOF0/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4ODEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIlJlZnVzaW5nIHRvIHNlbmQgYmVjYXVzZSB0aGUgcGF0Y2hcbiIKKyJcdCVzXG4iCisiaGFzIHRoZSB0ZW1wbGF0ZSBzdWJqZWN0ICcqKiogU1VCSkVDVCBIRVJFICoqKicuIFBhc3MgLS1mb3JjZSBpZiB5b3UgcmVhbGx5ICIKKyJ3YW50IHRvIHNlbmQuXG4iCittc2dzdHIgIiIKKyLrs7TrgrTsp4Ag7JWK7Iq164uI64ukLiDri6TsnYwg7Yyo7LmY6rCAXG4iCisiXHQlc1xuIgorIuygnOuqqSDshJzsi53snbggJyoqKiBTVUJKRUNUIEhFUkUgKioqJ+qwgCDrk6TslrQg7J6I7Iq164uI64ukLiDsoJXrp5DroZwg67O064K066Ck66m0IC0tZm9yY2UgIgorIuyYteyFmOydhCDsgqzsmqntlZjsi63si5zsmKQuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTAwCittc2dpZCAiVG8gd2hvbSBzaG91bGQgdGhlIGVtYWlscyBiZSBzZW50IChpZiBhbnlvbmUpPyIKK21zZ3N0ciAi64iE6rWs7JeQ6rKMIOyghOyekOuplOydvOydhCDrs7TrgrTslbwg7ZWp64uI6rmMICjrs7Trgrwg64yA7IOB7J20IOyeiOuLpOuptCk/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYXRhbDogYWxpYXMgJyVzJyBleHBhbmRzIHRvIGl0c2VsZlxuIgorbXNnc3RyICLsuZjrqoXsoIEg7Jik66WYOiAnJXMnIOuzhOy5reydgCDsnpDquLAg7J6Q7Iug7J2EIOqwgOumrO2CteuLiOuLpFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkzMAorbXNnaWQgIk1lc3NhZ2UtSUQgdG8gYmUgdXNlZCBhcyBJbi1SZXBseS1UbyBmb3IgdGhlIGZpcnN0IGVtYWlsIChpZiBhbnkpPyAiCittc2dzdHIgIuyyqyDrqZTsnbzsl5Ag64yA7ZW0ICjsnojri6TrqbQpIE1lc3NhZ2UtSUTqsIAgSW4tUmVwbHktVG/sl5Ag7IKs7Jqp65CY7JeI7Iq164uI64ukPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTg4IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTk2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmFibGUgdG8gZXh0cmFjdCBhIHZhbGlkIGFkZHJlc3MgZnJvbTogJXNcbiIKK21zZ3N0ciAi7Jik66WYOiDri6TsnYzsl5DshJwg7Jis67CU66W4IOyjvOyGjOulvCDstpTstpztlaAg7IiYIOyXhuyKteuLiOuLpDogJXNcbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtxXSBbZF0gW2VdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwMDAKK21zZ2lkICJXaGF0IHRvIGRvIHdpdGggdGhpcyBhZGRyZXNzPyAoW3FddWl0fFtkXXJvcHxbZV1kaXQpOiAiCittc2dzdHIgIuydtCDso7zshozroZwg66y07JeH7J2EIO2VmOyLnOqyoOyKteuLiOq5jD8gKFtxXeuBneuCtOq4sHxbZF3rsoTrpqzquLB8W2Vd7Y647KeRKTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzMTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQ0EgcGF0aCBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlwiJXNcIiBDQSDqsr3roZzqsIAg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0MDAKK21zZ2lkICIiCisiICAgIFRoZSBDYyBsaXN0IGFib3ZlIGhhcyBiZWVuIGV4cGFuZGVkIGJ5IGFkZGl0aW9uYWxcbiIKKyIgICAgYWRkcmVzc2VzIGZvdW5kIGluIHRoZSBwYXRjaCBjb21taXQgbWVzc2FnZS4gQnkgZGVmYXVsdFxuIgorIiAgICBzZW5kLWVtYWlsIHByb21wdHMgYmVmb3JlIHNlbmRpbmcgd2hlbmV2ZXIgdGhpcyBvY2N1cnMuXG4iCisiICAgIFRoaXMgYmVoYXZpb3IgaXMgY29udHJvbGxlZCBieSB0aGUgc2VuZGVtYWlsLmNvbmZpcm1cbiIKKyIgICAgY29uZmlndXJhdGlvbiBzZXR0aW5nLlxuIgorIlxuIgorIiAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgcnVuICdnaXQgc2VuZC1lbWFpbCAtLWhlbHAnLlxuIgorIiAgICBUbyByZXRhaW4gdGhlIGN1cnJlbnQgYmVoYXZpb3IsIGJ1dCBzcXVlbGNoIHRoaXMgbWVzc2FnZSxcbiIKKyIgICAgcnVuICdnaXQgY29uZmlnIC0tZ2xvYmFsIHNlbmRlbWFpbC5jb25maXJtIGF1dG8nLlxuIgorIlxuIgorbXNnc3RyICIiCisiICAgIOychOydmCBDYyDrqqnroZ3snYAg7Yyo7LmYIOy7pOuwiyDrqZTsi5zsp4Dsl5Ag65Ok7Ja0IOyeiOuKlCDstpTqsIAg7KO87IaM66GcXG4iCisiICAgIO2ZleyepeuQqeuLiOuLpC4g6riw67O46rCS7Jy866GcIO2ZleyepeuQmOq4sCDsoITsl5Agc2VuZC1lbWFpbOyXkOyEnFxuIgorIiAgICDrrLzslrTrtIXri4jri6QuIOydtOufsCDrj5nsnpHsnYAgc2VuZG1haWwuY29uZmlybSDshKTsoJXsl5DshJxcbiIKKyIgICAg7KGw7KCV7ZWgIOyImCDsnojsirXri4jri6QuXG4iCisiXG4iCisiICAgIOygleuztOulvCDrjZQg67O066Ck66m0LCAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJ+ulvCDsi6TtlontlZjsi63si5zsmKQuXG4iCisiICAgIO2YhOyerCDrj5nsnpHsnYQg7Jyg7KeA7ZWY66Ck66m0LCDsnbQg66mU7Iuc7KeA66W8IOustOyLnO2VmOqzoCxcbiIKKyIgICAgJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycg66qF66C57J2EXG4iCisiICAgIOyLpO2Wie2VmOyLreyLnOyYpC5cbiIKKyJcbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSBbbl0gW2VdIFtxXSBbYV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQxNQorbXNnaWQgIlNlbmQgdGhpcyBlbWFpbD8gKFt5XWVzfFtuXW98W2VdZGl0fFtxXXVpdHxbYV1sbCk6ICIKK21zZ3N0ciAiIgorIuydtCDsoITsnpDrqZTsnbzsnYQg67O064K07Iuc6rKg7Iq164uI6rmMPyAoW3ld7JiIfFtuXeyVhOuLiOyYpHxbZV3tjrjsp5F8W3Fd64Gd64K06riwfFthXeuqqOuRkCk6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDE4Cittc2dpZCAiU2VuZCB0aGlzIGVtYWlsIHJlcGx5IHJlcXVpcmVkIgorbXNnc3RyICLtlYTsmpTtlZwg7KCE7J6Q66mU7J28IOuLteyepSDrs7Trg4Xri4jri6QiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ0NgorbXNnaWQgIlRoZSByZXF1aXJlZCBTTVRQIHNlcnZlciBpcyBub3QgcHJvcGVybHkgZGVmaW5lZC4iCittc2dzdHIgIu2VhOyalO2VnCBTTVRQIOyEnOuyhOulvCDsoJzrjIDroZwg7KeA7KCV7ZWY7KeAIOyViuyVmOyKteuLiOuLpC4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ5MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBTVEFSVFRMUyEgJXMiCittc2dzdHIgIuyEnOuyhOyXkOyEnCBTVEFSVFRMU+ulvCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukISAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDk4IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUwMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTVEFSVFRMUyBmYWlsZWQhICVzIgorbXNnc3RyICJTVEFSVFRMUyDsi6TtjKghICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MTIKK21zZ2lkICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTTVRQIHByb3Blcmx5LiBDaGVjayBjb25maWcgYW5kIHVzZSAtLXNtdHAtZGVidWcuIgorbXNnc3RyICIiCisiU01UUOulvCDsoJzrjIDroZwg7LSI6riw7ZmU7ZWgIOyImCDsl4bsirXri4jri6QuIOyEpOygleydhCDtmZXsnbjtlZjqs6AgLS1zbXRwLWRlYnVnIOyYteyFmOydhCDsgqzsmqkiCisi7ZWY7Iut7Iuc7JikLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTMwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBzZW5kICVzXG4iCittc2dzdHIgIiVz7J2EKOulvCkg67O064K064qU642wIOyLpO2MqO2WiOyKteuLiOuLpFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRHJ5LVNlbnQgJXNcbiIKK21zZ3N0ciAiJXMg67O064K064qUIO2dieuCtFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VudCAlc1xuIgorbXNnc3RyICIlcyDrs7Trg4RcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTM1Cittc2dpZCAiRHJ5LU9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAi7ISx6rO1IO2dieuCtC4g6riw66Gd7J2AOlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzUKK21zZ2lkICJPSy4gTG9nIHNheXM6XG4iCittc2dzdHIgIuyEseqztS4g6riw66Gd7J2AOlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDcKK21zZ2lkICJSZXN1bHQ6ICIKK21zZ3N0ciAi6rKw6rO8OiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU1MAorbXNnaWQgIlJlc3VsdDogT0tcbiIKK21zZ3N0ciAi6rKw6rO8OiDsoJXsg4FcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAiJXMg7YyM7J287J2EIOyXtCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2MTUgZ2l0LXNlbmQtZW1haWwucGVybDoxNjM1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihtYm94KSBjYzogJXMg7LaU6rCALCAnJXMnIOykhOyXkOyEnFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2MjEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyB0bzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIHRvOiAlcyDstpTqsIAsICclcycg7KSE7JeQ7IScXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY3NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobm9uLW1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3jslYTri5gpIGNjOiAlcyDstpTqsIAsICclcycg7KSE7JeQ7IScXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY5OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoYm9keSkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIo67O466y4KSBjYzogJXMg7LaU6rCALCAnJXMnIOykhOyXkOyEnFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4MTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBDb3VsZCBub3QgZXhlY3V0ZSAnJXMnIgorbXNnc3RyICIoJXMpICclcyfsnYQg7Iuk7ZaJ7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTgyNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIEFkZGluZyAlczogJXMgZnJvbTogJyVzJ1xuIgorbXNnc3RyICIoJXMpICVzOiAlcyDstpTqsIAsICclcycg7KSE7JeQ7IScXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTgyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIGZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICclcyciCittc2dzdHIgIiglcykgJyVzJyjsnYQp66W8IO2Wpe2VnCDtjIzsnbTtlITrpbwg64ur64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODU1Cittc2dpZCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IgorbXNnc3RyICLrqZTsi5zsp4DrpbwgN+u5hO2KuOuhnCDrs7Trgrwg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODYzCittc2dpZCAiaW52YWxpZCB0cmFuc2ZlciBlbmNvZGluZyIKK21zZ3N0ciAi7J6Y66q765CcIOyghOyGoSDsnbjsvZTrlKkiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkwMSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NTIgZ2l0LXNlbmQtZW1haWwucGVybDoxOTYyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzOiAlc1xuIgorbXNnc3RyICIlc+ydhCjrpbwpIOyXtCDsiJgg7JeG7Iq164uI64ukOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MDQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGNvbnRhaW5zIGEgbGluZSBsb25nZXIgdGhhbiA5OTggY2hhcmFjdGVycyIKK21zZ3N0ciAiJXM6IO2MqOy5mOyXkCA5OTjsnpDrs7Tri6Qg642UIOq4tCDspITsnbQg65Ok7Ja0IOyeiOyKteuLiOuLpCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTIwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nICVzIHdpdGggYmFja3VwIHN1ZmZpeCAnJXMnLlxuIgorbXNnc3RyICIlcyDrhJjslrTqsJAsIOyYiOu5hCDtmZXsnqXsnpAgJyVzJyDsnojsnYwuXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCAiW3l8Tl0iIGFzIGlzLgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTI0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBzZW5kICVzPyBbeXxOXTogIgorbXNnc3RyICLsoJXrp5DroZwgJXMg7YyM7J287J2EIOuztOuCtOyLnOqyoOyKteuLiOq5jD8gW3l8Tl06ICIKZGlmZiAtLWdpdCBhL3BvL3B0X1BULnBvIGIvcG8vcHRfUFQucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEyZDU1YQotLS0gL2Rldi9udWxsCisrKyBiL3BvL3B0X1BULnBvCkBAIC0wLDAgKzEsMTY4MDQgQEAKKyMgUG9ydHVndWVzZSB0cmFuc2xhdGlvbnMgZm9yIEdpdCBwYWNrYWdlLgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgTWFyY28gU291c2EgPG1hcmNvbXNvdXNhIEFUIGdtYWlsLmNvbT4KKyMgQ29weXJpZ2h0IChDKSAyMDE2IFZhc2NvIEFsbWVpZGEgPHZhc2NvbWFsbWVpZGFAc2Fwby5wdD4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEdpdCBwYWNrYWdlLgorIyBDb250cmlidXRvcnM6CisjIC0gTWFyY28gU291c2EgPG1hcmNvbXNvdXNhIEFUIGdtYWlsLmNvbT4KKyMgVmFzY28gQWxtZWlkYSA8dmFzY29tYWxtZWlkYUBzYXBvLnB0PiwgMjAxNiwgMjAxNy4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEdpdFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTA0LTIzIDA5OjU0KzA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE3LTA1LTAxIDIxOjE3KzAwMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFZhc2NvIEFsbWVpZGEgPHZhc2NvbWFsbWVpZGFAc2Fwby5wdD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBQb3J0dWd1ZXNlXG4iCisiTGFuZ3VhZ2U6IHB0XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisiWC1HZW5lcmF0b3I6IFZpcnRhYWwgMC43LjFcbiIKKworIzogYWR2aWNlLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGludDogJS4qc1xuIgorbXNnc3RyICJkaWNhOiAlLipzXG4iCisKKyM6IGFkdmljZS5jOjgzCittc2dpZCAiQ2hlcnJ5LXBpY2tpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiTsOjbyDDqSBwb3Nzw612ZWwgZWZldHVhciBjaGVycnktcGljayBwb3JxdWUgdGVtIGZpY2hlaXJvcyBuw6NvIGludGVncmFkb3MuIgorCisjOiBhZHZpY2UuYzo4NQorbXNnaWQgIkNvbW1pdHRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBzdWJtZXRlciBwb3JxdWUgdGVtIGZpY2hlaXJvcyBuw6NvIGludGVncmFkb3MuIgorCisjOiBhZHZpY2UuYzo4NworbXNnaWQgIk1lcmdpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBpbnRlZ3JhciBwb3JxdWUgdGVtIGZpY2hlaXJvcyBuw6NvIGludGVncmFkb3MuIgorCisjOiBhZHZpY2UuYzo4OQorbXNnaWQgIlB1bGxpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBwdXhhciBwb3JxdWUgdGVtIGZpY2hlaXJvcyBuw6NvIGludGVncmFkb3MuIgorCisjOiBhZHZpY2UuYzo5MQorbXNnaWQgIlJldmVydGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIHJldmVydGUgcG9ycXVlIHRlbSBmaWNoZWlyb3MgbsOjbyBpbnRlZ3JhZG9zLiIKKworIzogYWR2aWNlLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSXQgaXMgbm90IHBvc3NpYmxlIHRvICVzIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBlZmV0dWFyICVzIHBvcnF1ZSB0ZW0gZmljaGVpcm9zIG7Do28gaW50ZWdyYWRvcy4iCisKKyM6IGFkdmljZS5jOjEwMQorbXNnaWQgIiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCittc2dzdHIgIiIKKyJDb3JyaWphLW9zIG5hIMOhcnZvcmUgZGUgdHJhYmFsaG8gZSB1c2UgJ2dpdCBhZGQvcm0gPGZpY2hlaXJvPidcbiIKKyJjb25mb3JtZSBhcHJvcHJpYWRvIHBhcmEgbWFyY8OhLWxvcyBjb21vIHJlc29sdmlkb3MgZSBzdWJtZXRhLiIKKworIzogYWR2aWNlLmM6MTA5Cittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIGFuIHVucmVzb2x2ZWQgY29uZmxpY3QuIgorbXNnc3RyICJBIHRlcm1pbmFyIGRldmlkbyBhIGNvbmZsaXRvIG7Do28gcmVzb2x2aWRvLiIKKworIzogYWR2aWNlLmM6MTE0IGJ1aWx0aW4vbWVyZ2UuYzoxMTg1Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICJOw6NvIGNvbmNsdcOtZG8gYSBpbnRlZ3Jhw6fDo28gKE1FUkdFX0hFQUQgcHJlc2VudGUpLiIKKworIzogYWR2aWNlLmM6MTE2Cittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSBtZXJnaW5nLiIKK21zZ3N0ciAiU3VibWV0YSBhcyBzdWFzIGFsdGVyYcOnw7VlcyBhbnRlcyBkZSBpbnRlZ3Jhci4iCisKKyM6IGFkdmljZS5jOjExNworbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiB1bmZpbmlzaGVkIG1lcmdlLiIKK21zZ3N0ciAiQSB0ZXJtaW5hciBkZXZpZG8gYSBpbnRlZ3Jhw6fDo28gaW5jb21wbGV0YS4iCisKKyM6IGFkdmljZS5jOjEyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogY2hlY2tpbmcgb3V0ICclcycuXG4iCisiXG4iCisiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisiY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpc1xuIgorInN0YXRlIHdpdGhvdXQgaW1wYWN0aW5nIGFueSBicmFuY2hlcyBieSBwZXJmb3JtaW5nIGFub3RoZXIgY2hlY2tvdXQuXG4iCisiXG4iCisiSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCB0byByZXRhaW4gY29tbWl0cyB5b3UgY3JlYXRlLCB5b3UgbWF5XG4iCisiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWIgd2l0aCB0aGUgY2hlY2tvdXQgY29tbWFuZCBhZ2Fpbi4gRXhhbXBsZTpcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiA8bmV3LWJyYW5jaC1uYW1lPlxuIgorIlxuIgorbXNnc3RyICIiCisiTm90YTogYSBleHRyYWlyICclcycuXG4iCisiXG4iCisiRW5jb250cmEtc2UgZW0gZXN0YWRvICdIRUFEIGRlc3RhY2FkYScuIFBvZGUgaW5zcGVjaW9uYXIsIGZhemVyIGFsdGVyYcOnw7Vlc1xuIgorImV4cGVyaW1lbnRhaXMgZSBzdWJtZXTDqi1sYXMgZSBwb2RlIGRlc2NhcnRhciBxdWFscXVlciBjb21taXQgcXVlIGZhw6dhIG5lc3RlXG4iCisiZXN0YWRvIHNlbSBpbnRlcmZlcmlyIG91dHJvIHJhbW8gc2UgZXh0cmFpciBvdXRybyByYW1vLlxuIgorIlxuIgorIlNlIGRlc2VqYSBjcmlhciB1bSBub3ZvIHJhbW8gcGFyYSByZXRlciBvcyBjb21taXRzIHF1ZSBjcmlvdSwgcG9kZSBmYXrDqi1sb1xuIgorIihhZ29yYSBvdSBtYWlzIHRhcmRlKSB1c2FuZG8gLWIgY29tIG8gY29tYW5kbyBjaGVja291dCBvdXRyYSB2ZXouIEV4ZW1wbG86XG4iCisiXG4iCisiICBnaXQgY2hlY2tvdXQgLWIgPG5vdm8tbm9tZS1yYW1vPlxuIgorIlxuIgorCisjOiBhcHBseS5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJvcMOnw6NvIGRlIGVzcGHDp28gZW0gYnJhbmNvIG7Do28gcmVjb25oZWNpZGEgJyVzJyIKKworIzogYXBwbHkuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIm9ww6fDo28gZGUgaWdub3JhciBlc3Bhw6dvIGVtIGJyYW5jbyBuw6NvIHJlY29uaGVjaWRhICclcyciCisKKyM6IGFwcGx5LmM6MTI1Cittc2dpZCAiLS1yZWplY3QgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tcmVqZWN0IGUgLS0zd2F5IG7Do28gcG9kZW0gc2VyIHVzYWRvcyBqdW50b3MuIgorCisjOiBhcHBseS5jOjEyNworbXNnaWQgIi0tY2FjaGVkIGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICItLWNhY2hlZCBlIC0tM3dheSBuw6NvIHBvZGVtIHNlciB1c2Fkb3MganVudG9zLiIKKworIzogYXBwbHkuYzoxMzAKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tM3dheSBmb3JhIGRlIHVtIHJlcG9zaXTDs3JpbyIKKworIzogYXBwbHkuYzoxNDEKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWluZGV4IGZvcmEgZGUgdW0gcmVwb3NpdMOzcmlvIgorCisjOiBhcHBseS5jOjE0NAorbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWNhY2hlZCBmb3JhIGRlIHVtIHJlcG9zaXTDs3JpbyIKKworIzogYXBwbHkuYzo4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgcHJlcGFyYXIgYSByZWdleHAgZGUgY2FyaW1ibyBkZSBkYXRhL2hvcmEgJXMiCisKKyM6IGFwcGx5LmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIKK21zZ3N0ciAicmVnZXhlYyByZXRvcm5vdSAlZCBwYXJhIGEgZW50cmE6ICVzIgorCisjOiBhcHBseS5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZW5jb250cmFyIG8gbm9tZSBkbyBmaWNoZWlybyBubyBwYXRjaCBuYSBsaW5oYSAlZCIKKworIzogYXBwbHkuYzo5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwsIGdvdCAlcyBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5OiBnaXQtZGlmZiBpbmNvcnJldG8gLSBlc3BlcmF2YS1zZSAvZGV2L251bGwsIG9idGV2ZS1zZSAlcyBuYSBsaW5oYSAiCisiJWQiCisKKyM6IGFwcGx5LmM6OTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5OiBnaXQtZGlmZiBpbmNvcnJldG8gLSBvIG5vbWUgZG8gbm92byBmaWNoZWlybyBuYSBsaW5oYSAlZCDDqSAiCisiaW5jb25zaXN0ZW50ZSIKKworIzogYXBwbHkuYzo5ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IGdpdC1kaWZmIGluY29ycmV0byAtIG8gbm9tZSBkbyBmaWNoZWlybyBhbnRpZ28gbmEgbGluaGEgJWQgw6kgIgorImluY29uc2lzdGVudGUiCisKKyM6IGFwcGx5LmM6OTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZ2l0LWRpZmYgaW5jb3JyZXRvIC0gZXNwZXJhdmEtc2UgL2Rldi9udWxsIG5hIGxpbmhhICVkIgorCisjOiBhcHBseS5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJyZWNvbnRhZ2VtOiBsaW5oYSBpbmVzcGVyYWRhOiAlLipzIgorCisjOiBhcHBseS5jOjE1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiZnJhZ21lbnRvIGRlIHBhdGNoIHNlbSBjYWJlw6dhbGhvIG5hIGxpbmhhICVkOiAlLipzIgorCisjOiBhcHBseS5jOjE1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAiIgorIm8gY2FiZcOnYWxobyBkbyBnaXQgZGlmZiBuw6NvIHJldmVsb3UgbyBub21lIGRvIGZpY2hlaXJvIGRlcG9pcyBkZSBzZSByZW1vdmVyICIKKyIlZCBjb21wb25lbnRlIGRvIGNhbWluaG8gKGxpbmhhICVkKSIKK21zZ3N0clsxXSAiIgorIm8gY2FiZcOnYWxobyBkbyBnaXQgZGlmZiBuw6NvIHJldmVsb3UgbyBub21lIGRvIGZpY2hlaXJvIGRlcG9pcyBkZSBzZSByZW1vdmVyICIKKyIlZCBjb21wb25lbnRlcyBkZSBjYW1pbmhvIChsaW5oYSAlZCkiCisKKyM6IGFwcGx5LmM6MTU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gKGxpbmUgJWQpIgorbXNnc3RyICJvIGNhYmXDp2FsaG8gZG8gZ2l0IGRpZmYgbsOjbyByZXZlbGEgbyBub21lIGRvIGZpY2hlaXJvIChsaW5oYSAlZCkiCisKKyM6IGFwcGx5LmM6MTc1OQorbXNnaWQgIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJvIG5vdm8gZmljaGVpcm8gZGVwZW5kZSBkZSBjb250ZcO6ZG9zIGFudGlnb3MiCisKKyM6IGFwcGx5LmM6MTc2MQorbXNnaWQgImRlbGV0ZWQgZmlsZSBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgIm8gZmljaGVpcm8gZWxpbWluYWRvIGFpbmRhIHRlbSBjb250ZcO6ZG9zIgorCisjOiBhcHBseS5jOjE3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJwYXRjaCBjb3Jyb21waWRvIG5hIGxpbmhhICVkIgorCisjOiBhcHBseS5jOjE4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIm8gbm92byBmaWNoZWlybyAlcyBkZXBlbmRlIGRlIGNvbnRlw7pkb3MgYW50aWdvcyIKKworIzogYXBwbHkuYzoxODM0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgIm8gZmljaGVpcm8gZWxpbWluYWRvICVzIGFpbmRhIHRlbSBjb250ZcO6ZG9zIgorCisjOiBhcHBseS5jOjE4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiKiogYXZpc286IG8gZmljaGVpcm8gJXMgZmljYXLDoSB2YXppbywgbWFzIG7Do28gc2Vyw6EgZWxpbWluYWRvIgorCisjOiBhcHBseS5jOjE5ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAicGF0Y2ggYmluw6FyaW8gY29ycm9tcGlkbyBuYSBsaW5oYSAlZDogJS4qcyIKKworIzogYXBwbHkuYzoyMDIxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAicGF0Y2ggYmluw6FyaW8gbsOjbyByZWNvbmhlY2lkbyBuYSBsaW5oYSAlZCIKKworIzogYXBwbHkuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgInBhdGNoIGluY29tcHJlZW5zw612ZWwgbmEgbGluaGEgJWQiCisKKyM6IGFwcGx5LmM6MjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBsZXIgYSBsaWdhw6fDo28gc2ltYsOzbGljYSAlcyIKKworIzogYXBwbHkuYzoyMjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGFicmlyIG91IGxlciAlcyIKKworIzogYXBwbHkuYzoyOTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAiaW7DrWNpbyBkZSBsaW5oYSBpbnbDoWxpZG86ICclYyciCisKKyM6IGFwcGx5LmM6MzA0MQorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iCittc2dpZF9wbHVyYWwgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iCittc2dzdHJbMF0gIkV4Y2VydG8gbsK6JWQgYmVtIHN1Y2VkaWRvIG5hIGxpbmhhICVkICglZCBsaW5oYSBkZXNsb2NhZGEpLiIKK21zZ3N0clsxXSAiRXhjZXJ0byBuwrolZCBiZW0gc3VjZWRpZG8gbmEgbGluaGEgJWQgKCVkIGxpbmhhcyBkZXNsb2NhZGFzKS4iCisKKyM6IGFwcGx5LmM6MzA1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICJDb250ZXh0byByZWR1emlkbyBwYXJhICglbGQvJWxkKSBwYXJhIGFwbGljYXIgbyBmcmFnbWVudG8gZW0gJWQiCisKKyM6IGFwcGx5LmM6MzA1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2hpbGUgc2VhcmNoaW5nIGZvcjpcbiIKKyIlLipzIgorbXNnc3RyICIiCisiYW8gcHJvY3VyYSBwb3I6XG4iCisiJS4qcyIKKworIzogYXBwbHkuYzozMDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgImZhbHRhIGRlIGRhZG9zIGRvIHBhdGNoIGJpbsOhcmlvICclcyciCisKKyM6IGFwcGx5LmM6MzA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmV2ZXJzZS1hcHBseSBhIGJpbmFyeSBwYXRjaCB3aXRob3V0IHRoZSByZXZlcnNlIGh1bmsgdG8gJyVzJyIKK21zZ3N0ciAiIgorIm7Do28gw6kgcG9zc8OtdmVsIGFwbGljYXIgbyByZXZlcnNvIGRlIHVtIHBhdGNoIGJpbsOhcmlvIGEgJyVzJyBzZW0gbyBleGNlcnRvICIKKyJyZXZlcnNvIgorCisjOiBhcHBseS5jOjMxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFwcGx5IGJpbmFyeSBwYXRjaCB0byAnJXMnIHdpdGhvdXQgZnVsbCBpbmRleCBsaW5lIgorbXNnc3RyICIiCisibsOjbyDDqSBwb3Nzw612ZWwgYXBsaWNhciBwYXRjaCBiaW7DoXJpbyBhICclcycgc2VtIGxpbmhhIGRlIMOtbmRpY2UgY29tcGxldGEiCisKKyM6IGFwcGx5LmM6MzE0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIHBhdGNoIGFwcGxpZXMgdG8gJyVzJyAoJXMpLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBjb250ZW50cy4iCittc2dzdHIgIiIKKyJvIHBhdGNoIGFwbGljYS1zZSBhICclcycgKCVzKSwgcXVlIG7Do28gY29ycmVzcG9uZGUgYW9zIGNvbnRlw7pkb3MgYXR1YWlzLiIKKworIzogYXBwbHkuYzozMTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBwYXRjaCBhcHBsaWVzIHRvIGFuIGVtcHR5ICclcycgYnV0IGl0IGlzIG5vdCBlbXB0eSIKK21zZ3N0ciAibyBwYXRjaCBhcGxpY2Etc2UgYSB1bSAnJXMnIHZhemlvIG1hcyBuw6NvIGVzdMOhIHZhemlvIgorCisjOiBhcHBseS5jOjMxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG5lY2Vzc2FyeSBwb3N0aW1hZ2UgJXMgZm9yICclcycgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGxlciBhIHBvc3RpbWFnZSBuZWNlc3PDoXJpYSAlcyBkZSAnJXMnIgorCisjOiBhcHBseS5jOjMxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgIm8gcGF0Y2ggYmluw6FyaW8gbsOjbyBmb2kgYXBsaWNhZG8gY29ycmV0YW1lbnRlIGEgJyVzJyIKKworIzogYXBwbHkuYzozMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCB0byAnJXMnIGNyZWF0ZXMgaW5jb3JyZWN0IHJlc3VsdCAoZXhwZWN0aW5nICVzLCBnb3QgJXMpIgorbXNnc3RyICIiCisibyBwYXRjaCBiaW7DoXJpbyBhcGxpY2FkbyBhICclcycgZ2VyYSByZXN1bHRhZG9zIGluY29ycmV0b3MgKGVzcGVyYXZhLXNlICVzLCAiCisib2J0ZXZlLXNlICVzKSIKKworIzogYXBwbHkuYzozMjExCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICJmYWxoYSBhbyBhcGxpY2FyIG8gcGF0Y2g6ICVzOiVsZCIKKworIzogYXBwbHkuYzozMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZXh0cmFpciAlcyIKKworIzogYXBwbHkuYzozMzgxIGFwcGx5LmM6MzM5MiBhcHBseS5jOjM0Mzggc2V0dXAuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXMiCittc2dzdHIgImZhbGhhIGFvIGxlciAlcyIKKworIzogYXBwbHkuYzozMzg5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgImEgbGVyICclcycgaW5kaWNhZG8gcG9yIHVtYSBsaWdhw6fDo28gc2ltYsOzbGljYSIKKworIzogYXBwbHkuYzozNDE4IGFwcGx5LmM6MzY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAibyBjYW1pbmhvICVzIGZvaSBlbGltaW5hZG8gb3UgbXVkb3UgZGUgbm9tZSIKKworIzogYXBwbHkuYzozNTAxIGFwcGx5LmM6MzY3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzOiBuw6NvIGV4aXN0ZSBubyDDrW5kaWNlIgorCisjOiBhcHBseS5jOjM1MTAgYXBwbHkuYzozNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXM6IG7Do28gdGVtIGNvcnJlc3BvbmTDqm5jaWEgbm8gw61uZGljZSIKKworIzogYXBwbHkuYzozNTQ1Cittc2dpZCAicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorIm8gcmVwb3NpdMOzcmlvIG7Do28gdGVtIG8gYmxvYiBuZWNlc3PDoXJpbyBwYXJhIHJlY29ycmVyIGEgaW50ZWdyYcOnw6NvIGNvbSAzICIKKyJwb250b3MuIgorCisjOiBhcHBseS5jOjM1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHRocmVlLXdheSBtZXJnZS4uLlxuIgorbXNnc3RyICJBIHJlY29ycmVyIGEgaW50ZWdyYcOnw6NvIGNvbSAzIHBvbnRvcy4uLlxuIgorCisjOiBhcHBseS5jOjM1NjQgYXBwbHkuYzozNTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGxlciBvIGNvbnRlw7pkbyBhdHVhbCBkZSAnJXMnIgorCisjOiBhcHBseS5jOjM1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZhbGwgYmFjayBvbiB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiRmFsaGEgYSByZWNvcnJlciBhIGludGVncmHDp8OjbyBjb20gMyBwb250b3MuLi5cbiIKKworIzogYXBwbHkuYzozNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyB3aXRoIGNvbmZsaWN0cy5cbiIKK21zZ3N0ciAiUGF0Y2ggYXBsaWNhZG8gYSAnJXMnIGNvbSBjb25mbGl0b3MuXG4iCisKKyM6IGFwcGx5LmM6MzU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgY2xlYW5seS5cbiIKK21zZ3N0ciAiUGF0Y2ggYXBsaWNhZG8gYSAnJXMnIGNvbSBzdWNlc3NvLlxuIgorCisjOiBhcHBseS5jOjM2MjUKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICJwYXRjaCBkZSByZW1vw6fDo28gZGVpeGEgY29udGXDumRvcyBubyBmaWNoZWlybyIKKworIzogYXBwbHkuYzozNjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3cm9uZyB0eXBlIgorbXNnc3RyICIlczogdGlwbyBlcnJhZG8iCisKKyM6IGFwcGx5LmM6MzY5OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iCittc2dzdHIgIiVzIMOpIGRvIHRpcG8gJW8sIGVzcGVyYWRvICVvIgorCisjOiBhcHBseS5jOjM4NTAgYXBwbHkuYzozODUyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0aCAnJXMnIgorbXNnc3RyICJjYW1pbmhvIGludsOhbGlkbyAnJXMnIgorCisjOiBhcHBseS5jOjM5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IgorbXNnc3RyICIlczogasOhIGV4aXN0ZSBubyDDrW5kaWNlIgorCisjOiBhcHBseS5jOjM5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlczogasOhIGV4aXN0ZSBubyBkaXJldMOzcmlvIGRlIHRyYWJhbGhvIgorCisjOiBhcHBseS5jOjM5MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICJvIG5vdm8gbW9kbyAoJW8pIGRlICVzIG7Do28gY29ycmVzcG9uZGUgYW8gbW9kbyBhbnRpZ28gKCVvKSIKKworIzogYXBwbHkuYzozOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIKK21zZ3N0ciAibyBub3ZvIG1vZG8gKCVvKSBkZSAlcyBuw6NvIGNvcnJlc3BvbmRlIGFvIG1vZG8gYW50aWdvICglbykgZGUgJXMiCisKKyM6IGFwcGx5LmM6Mzk1NgorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAibyBmaWNoZWlybyBhZmV0YWRvICclcycgw6kgaW5kaWNhZG8gcG9yIHVtYSBsaWdhw6fDo28gc2ltYsOzbGljYSIKKworIzogYXBwbHkuYzozOTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiJXM6IHBhdGNoIG7Do28gc2UgYXBsaWNhIGNvbSBzdWNlc3NvIgorCisjOiBhcHBseS5jOjM5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIkEgdmVyaWZpY2FyIG8gcGF0Y2ggJXMuLi4iCisKKyM6IGFwcGx5LmM6NDA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICJmYWx0YSBpbmZvcm1hw6fDo28gZGUgc2hhMSBvdSBuw6NvIMOpIMO6dGlsIHBhcmEgbyBzdWJtw7NkdWxvICVzIgorCisjOiBhcHBseS5jOjQwNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9kZSBjaGFuZ2UgZm9yICVzLCB3aGljaCBpcyBub3QgaW4gY3VycmVudCBIRUFEIgorbXNnc3RyICJhbHRlcmHDp8OjbyBkZSBtb2RvIGRlICVzIHF1ZSBuw6NvIGVzdMOhIG5hIEhFQUQgYXR1YWwiCisKKyM6IGFwcGx5LmM6NDA3NgorIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAoJXMpLiIKK21zZ3N0ciAiZmFsdGEgaW5mb3JtYcOnw6NvIGRlIHNoYTEgb3UgbsOjbyDDqSDDunRpbCAoJXMpLiIKKworIzogYXBwbHkuYzo0MDgxIGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTIgYnVpbHRpbi9yZXNldC5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICJmYWxoYSBhbyBpbnZvY2FyIG1ha2VfY2FjaGVfZW50cnkgZW0gJyVzJyIKKworIzogYXBwbHkuYzo0MDg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhZGQgJXMgdG8gdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYWRpY2lvbmFyICVzIGFvIMOtbmRpY2UgdGVtcG9yw6FyaW8iCisKKyM6IGFwcGx5LmM6NDA5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdGVtcG9yYXJ5IGluZGV4IHRvICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZXNjcmV2ZXIgw61uZGljZSB0ZW1wb3LDoXJpbyBwYXJhICVzIgorCisjOiBhcHBseS5jOjQyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCByZW1vdmVyICVzIGRvIMOtbmRpY2UiCisKKyM6IGFwcGx5LmM6NDI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgInBhdGNoIGNvcnJvbXBpZG8gbm8gc3VibcOzZHVsbyAlcyIKKworIzogYXBwbHkuYzo0Mjc0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBvYnRlciBlc3RhZG8gZG8gbm92byBmaWNoZWlybyBjcmlhZG8gJyVzJyIKKworIzogYXBwbHkuYzo0MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICIiCisibsOjbyDDqSBwb3Nzw612ZWwgY3JpYXIgYXJtYXplbmFtZW50byBkZSBzZWd1cmFuw6dhIGRvIGZpY2hlaXJvIHJlY8OpbS1jcmlhZG8gJXMiCisKKyM6IGFwcGx5LmM6NDI4OCBhcHBseS5jOjQ0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGFkaWNpb25hciAlcyDDoCBjYWNoZSIKKworIzogYXBwbHkuYzo0MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJmYWxoYSBhbyBlc2NyZXZlciBwYXJhICclcyciCisKKyM6IGFwcGx5LmM6NDMzMworIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAiYSBmZWNoYXIgbyBmaWNoZWlybyAnJXMnIgorCisjOiBhcHBseS5jOjQ0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBlc2NyZXZlciBvIGZpY2hlaXJvICclcycgY29tIG8gbW9kbyAlbyIKKworIzogYXBwbHkuYzo0NTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIlBhdGNoICVzIGFwbGljYWRvIGNvbSBzdWNlc3NvLiIKKworIzogYXBwbHkuYzo0NTA5Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgImVycm8gaW50ZXJubyIKKworIzogYXBwbHkuYzo0NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAiQSBhcGxpY2FyIHBhdGNoICUlcyBjb20gJWQgcmVqZWnDp8Ojby4uLiIKK21zZ3N0clsxXSAiQSBhcGxpY2FyIHBhdGNoICUlcyBjb20gJWQgcmVqZWnDp8O1ZXMuLi4iCisKKyM6IGFwcGx5LmM6NDUyMworIywgYy1mb3JtYXQKK21zZ2lkICJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiCittc2dzdHIgImEgdHJ1bmNhciBvIG5vbWUgZG8gZmljaGVpcm8gLnJlaiBlbSAlLipzLnJlaiIKKworIzogYXBwbHkuYzo0NTMxIGJ1aWx0aW4vZmV0Y2guYzo3MzkgYnVpbHRpbi9mZXRjaC5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYWJyaXIgJXMiCisKKyM6IGFwcGx5LmM6NDU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICJFeGNlcnRvIG7CuiVkIGFwbGljYWRvIGNvbSBzdWNlc3NvLiIKKworIzogYXBwbHkuYzo0NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAiRXhjZXJ0byBuwrolZCByZWplaXRhZG8uIgorCisjOiBhcHBseS5jOjQ2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCBwYXRjaCAnJXMnLiIKK21zZ3N0ciAiUGF0Y2ggJyVzJyBpZ25vcmFkby4iCisKKyM6IGFwcGx5LmM6NDY2NworbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAiZW50cmFkYSBuw6NvIHJlY29uaGVjaWRhIgorCisjOiBhcHBseS5jOjQ2ODYKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIG8gZmljaGVpcm8gZGUgw61uZGljZSIKKworIzogYXBwbHkuYzo0ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGFicmlyIG8gcGF0Y2ggJyVzJzogJXMiCisKKyM6IGFwcGx5LmM6NDg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvciIKK21zZ2lkX3BsdXJhbCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyWzBdICIlZCBlcnJvIGRlIGVzcGHDp28gZW0gYnJhbmNvIHJlcHJpbWlkbyIKK21zZ3N0clsxXSAiJWQgZXJyb3MgZGUgZXNwYcOnbyBlbSBicmFuY28gcmVwcmltaWRvcyIKKworIzogYXBwbHkuYzo0ODU2IGFwcGx5LmM6NDg3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCBsaW5oYSBhZGljaW9uYSBlcnJvcyBkZSBlc3Bhw6dvIGVtIGJyYW5jby4iCittc2dzdHJbMV0gIiVkIGxpbmhhcyBhZGljaW9uYW0gZXJyb3MgZGUgZXNwYcOnbyBlbSBicmFuY28uIgorCisjOiBhcHBseS5jOjQ4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQgbGluaGEgYXBsaWNhZGEgZGVwb2lzIGRlIGNvcnJpZ2lyIGVycm9zIGRlIGVzcGHDp28gZW0gYnJhbmNvLiIKK21zZ3N0clsxXSAiJWQgbGluaGFzIGFwbGljYWRhcyBkZXBvaXMgZGUgY29ycmlnaXIgZXJyb3MgZGUgZXNwYcOnbyBlbSBicmFuY28uIgorCisjOiBhcHBseS5jOjQ4ODAgYnVpbHRpbi9hZGQuYzo0NjMgYnVpbHRpbi9tdi5jOjI5OCBidWlsdGluL3JtLmM6MzkxCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZXNjcmV2ZXIgbm92byBmaWNoZWlybyBkZSDDrW5kaWNlIgorCisjOiBhcHBseS5jOjQ5MTEgYXBwbHkuYzo0OTE0IGJ1aWx0aW4vYW0uYzoyMjc3IGJ1aWx0aW4vYW0uYzoyMjgwCisjOiBidWlsdGluL2Nsb25lLmM6MTEzIGJ1aWx0aW4vZmV0Y2guYzo5OCBidWlsdGluL3B1bGwuYzoxODAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozMDQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYyOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYzMiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTczCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTc2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTYxCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIzOQorbXNnaWQgInBhdGgiCittc2dzdHIgImNhbWluaG8iCisKKyM6IGFwcGx5LmM6NDkxMgorbXNnaWQgImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgIm7Do28gYXBsaWNhciBhbHRlcmHDp8O1ZXMgcXVlIGNvcnJlc3BvbmRhbSBhbyBjYW1pbmhvIGZvcm5lY2lkbyIKKworIzogYXBwbHkuYzo0OTE1Cittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAiYXBsaWNhciBhbHRlcmHDp8O1ZXMgcXVlIGNvcnJlc3BvbmRhbSBhbyBjYW1pbmhvIGZvcm5lY2lkbyIKKworIzogYXBwbHkuYzo0OTE3IGJ1aWx0aW4vYW0uYzoyMjg2Cittc2dpZCAibnVtIgorbXNnc3RyICJudW0iCisKKyM6IGFwcGx5LmM6NDkxOAorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICJyZW1vdmVyIDxudW0+IGJhcnJhcyDDoCBlc3F1ZXJkYSBkb3MgY2FtaW5ob3MgZGUgZGlmZiB0cmFkaWNpb25hbCIKKworIzogYXBwbHkuYzo0OTIxCittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAiaWdub3JhciBhZGnDp8O1ZXMgZmVpdGFzIHBlbG8gcGF0Y2giCisKKyM6IGFwcGx5LmM6NDkyMworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiZW0gdmV6IGRlIGFwbGljYXIgbyBwYXRjaCwgbW9zdHJhciBvIGRpZmZzdGF0IGRhIGVudHJhZGEiCisKKyM6IGFwcGx5LmM6NDkyNworbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIm1vc3RyYXIgbsO6bWVybyBkZSBsaW5oYXMgYWRpY2lvbmFkYXMgZSByZW1vdmlkYXMgZW0gbm90YcOnw6NvIGRlY2ltYWwiCisKKyM6IGFwcGx5LmM6NDkyOQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgImVtIHZleiBkZSBhcGxpY2FyIG8gcGF0Y2gsIG1vc3RyYXIgdW0gcmVzdW1vIGRhIGVudHJhZGEiCisKKyM6IGFwcGx5LmM6NDkzMQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUiCittc2dzdHIgImVtIHZleiBkZSBhcGxpY2FyIG8gcGF0Y2gsIHZlcmlmaWNhciBzZSBvIHBhdGNoIHBvZGUgc2VyIGFwbGljYWRvIgorCisjOiBhcHBseS5jOjQ5MzMKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgImdhcmFudGlyIHF1ZSBvIHBhdGNoIHBvZGUgc2VyIGFwbGljYWRvIGFvIMOtbmRpY2UgYXR1YWwiCisKKyM6IGFwcGx5LmM6NDkzNQorbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJhcGxpY2FyIHVtIHBhdGNoIHNlbSB0b2NhciBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBhcHBseS5jOjQ5MzcKK21zZ2lkICJhY2NlcHQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgb3V0c2lkZSB0aGUgd29ya2luZyBhcmVhIgorbXNnc3RyICJhY2VpdGFyIHBhdGNoZXMgcXVlIGFsdGVyYW0gZmljaGVpcm9zIGZvcmEgZGEgw6FyZWEgZGUgdHJhYmFsaG8iCisKKyM6IGFwcGx5LmM6NDkzOQorbXNnaWQgImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorbXNnc3RyICJhcGxpY2FyIG8gcGF0Y2ggdGFtYsOpbSAodXNlIGNvbSAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorCisjOiBhcHBseS5jOjQ5NDEKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICJ0ZW50YXIgaW50ZWdyYcOnw6NvIGNvbSB0csOqcyBwb250b3Mgc2UgdW0gcGF0Y2ggbsOjbyBzZSBhcGxpY2EgY29tIMOqeGl0byIKKworIzogYXBwbHkuYzo0OTQzCittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKyJjb25zdHJ1aXIgdW0gw61uZGljZSB0ZW1wb3LDoXJpbyBiYXNlYWRvIG5hIGluZm9ybWHDp8OjbyBpbmNvcnBvcmFkYSBkbyDDrW5kaWNlIgorCisjOiBhcHBseS5jOjQ5NDYgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2OSBidWlsdGluL2xzLWZpbGVzLmM6NTA4Cittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgIm9zIGNhbWluaG9zIGVzdMOjbyBzZXBhcmFkb3MgcG9yIGNhcmFjdGVyZXMgTlVMIgorCisjOiBhcHBseS5jOjQ5NDgKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgImdhcmFudGlyIHF1ZSwgcGVsbyBtZW5vcywgPG4+IGxpbmhhcyBkZSBjb250ZXh0byBjb2luY2lkZW0iCisKKyM6IGFwcGx5LmM6NDk0OSBidWlsdGluL2FtLmM6MjI2NQorbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAiYcOnw6NvIgorCisjOiBhcHBseS5jOjQ5NTAKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAiZGV0ZXRhciBsaW5oYXMgbm92YXMgb3UgbW9kaWZpY2FkYXMgcXVlIHRlbmhhbSBlc3Bhw6dvcyBlbSBicmFuY28iCisKKyM6IGFwcGx5LmM6NDk1MyBhcHBseS5jOjQ5NTYKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICJpZ25vcmFyIGFsdGVyYcOnw7VlcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbyBhbyBwcm9jdXJhciBjb250ZXh0byIKKworIzogYXBwbHkuYzo0OTU5Cittc2dpZCAiYXBwbHkgdGhlIHBhdGNoIGluIHJldmVyc2UiCittc2dzdHIgImFwbGljYXIgbyBwYXRjaCBlbSByZXZlcnNvIgorCisjOiBhcHBseS5jOjQ5NjEKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAibsOjbyBlc3BlcmFyIG5lbmh1bWEgbGluaGEgZGUgY29udGV4dG8iCisKKyM6IGFwcGx5LmM6NDk2MworbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICJkZWl4YXIgb3MgZXhjZXJ0b3MgcmVqZWl0YWRvcyBub3MgcmVzcGV0aXZvcyBmaWNoZWlyb3MgKi5yZWoiCisKKyM6IGFwcGx5LmM6NDk2NQorbXNnaWQgImFsbG93IG92ZXJsYXBwaW5nIGh1bmtzIgorbXNnc3RyICJwZXJtaXRpciBhIHNvYnJlcG9zacOnw6NvIGRlIGV4Y2VydG9zIgorCisjOiBhcHBseS5jOjQ5NjYgYnVpbHRpbi9hZGQuYzoyNjcgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxOQorIzogYnVpbHRpbi9jb21taXQuYzoxMzM3IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk0IGJ1aWx0aW4vZnNjay5jOjY1MQorIzogYnVpbHRpbi9sb2cuYzoxODY3IGJ1aWx0aW4vbXYuYzoxMjIgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzQKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICJzZXIgdmVyYm9zbyIKKworIzogYXBwbHkuYzo0OTY4Cittc2dpZCAidG9sZXJhdGUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIGZpbGUiCittc2dzdHIgIiIKKyJ0b2xlcmFyIGRldGXDp8O1ZXMgaW5jb3JyZXRhcyBkZSBmYWx0YSBkZSBub3ZhIGxpbmhhIG5vIGZpbmFsIGRvIGZpY2hlaXJvIgorCisjOiBhcHBseS5jOjQ5NzEKK21zZ2lkICJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiCittc2dzdHIgIm7Do28gY29uZmlhciBuYSBjb250YWdlbSBkZSBsaW5oYXMgbm8gY2FiZcOnYWxobyBkb3MgZXhjZXJ0b3MiCisKKyM6IGFwcGx5LmM6NDk3MyBidWlsdGluL2FtLmM6MjI3NAorbXNnaWQgInJvb3QiCittc2dzdHIgInJhaXoiCisKKyM6IGFwcGx5LmM6NDk3NAorbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgInByZWNlZGVyIDxyb290PiBhIHRvZG9zIG9zIG5vbWVzIGRlIGZpY2hlaXJvIgorCisjOiBhcmNoaXZlLmM6MTIKK21zZ2lkICJnaXQgYXJjaGl2ZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgYXJjaGl2ZSBbPG9ww6fDtWVzPl0gPMOhcnZvcmUtZXRjPiBbPGNhbWluaG8+Li4uXSIKKworIzogYXJjaGl2ZS5jOjEzCittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzoxNAorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9ww6fDtWVzPl0gPMOhcnZvcmUtZXRjPiAiCisiWzxjYW1pbmhvPi4uLl0iCisKKyM6IGFyY2hpdmUuYzoxNQorbXNnaWQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzozMzIgYnVpbHRpbi9hZGQuYzoxNTIgYnVpbHRpbi9hZGQuYzo0NDIgYnVpbHRpbi9ybS5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICJvIGVzcGVjaWZpY2Fkb3IgZGUgY2FtaW5obyAnJXMnIG7Do28gY29ycmVzcG9uZGUgYSBuZW5odW0gZmljaGVpcm8iCisKKyM6IGFyY2hpdmUuYzo0MTcKK21zZ2lkICJmbXQiCittc2dzdHIgImZtdCIKKworIzogYXJjaGl2ZS5jOjQxNworbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICJmb3JtYXRvIGRvIGFycXVpdm8iCisKKyM6IGFyY2hpdmUuYzo0MTggYnVpbHRpbi9sb2cuYzoxNDM2Cittc2dpZCAicHJlZml4IgorbXNnc3RyICJwcmVmaXhvIgorCisjOiBhcmNoaXZlLmM6NDE5Cittc2dpZCAicHJlcGVuZCBwcmVmaXggdG8gZWFjaCBwYXRobmFtZSBpbiB0aGUgYXJjaGl2ZSIKK21zZ3N0ciAicHJlY2VkZXIgbyBwcmVmaXhvIGEgY2FkYSBub21lIGRlIGNhbWluaG8gZGVudHJvIGRvIGFycXVpdm8iCisKKyM6IGFyY2hpdmUuYzo0MjAgYnVpbHRpbi9ibGFtZS5jOjI1OTggYnVpbHRpbi9ibGFtZS5jOjI1OTkgYnVpbHRpbi9jb25maWcuYzo1OQorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4NyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg5IGJ1aWx0aW4vZ3JlcC5jOjEwNjEKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDEgYnVpbHRpbi9scy1maWxlcy5jOjU0MiBidWlsdGluL2xzLWZpbGVzLmM6NTQ1CisjOiBidWlsdGluL25vdGVzLmM6NDAxIGJ1aWx0aW4vbm90ZXMuYzo1NjQgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjkKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNTMKK21zZ2lkICJmaWxlIgorbXNnc3RyICJmaWNoZWlybyIKKworIzogYXJjaGl2ZS5jOjQyMSBidWlsdGluL2FyY2hpdmUuYzo4OQorbXNnaWQgIndyaXRlIHRoZSBhcmNoaXZlIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAiZXNjcmV2ZXIgbyBhcnF1aXZvIHBhcmEgZXN0ZSBmaWNoZWlybyIKKworIzogYXJjaGl2ZS5jOjQyMworbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImxlciAuZ2l0YXR0cmlidXRlcyBkbyBkaXJldMOzcmlvIGRlIHRyYWJhbGhvIgorCisjOiBhcmNoaXZlLmM6NDI0Cittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAibGlzdGFyIGZpY2hlaXJvcyBhcnF1aXZhZG9zIHBhcmEgc3RkZXJyIgorCisjOiBhcmNoaXZlLmM6NDI1Cittc2dpZCAic3RvcmUgb25seSIKK21zZ3N0ciAiYXJtYXplbmFyIGFwZW5hcyIKKworIzogYXJjaGl2ZS5jOjQyNgorbXNnaWQgImNvbXByZXNzIGZhc3RlciIKK21zZ3N0ciAiY29tcHJlc3PDo28gcsOhcGlkYSIKKworIzogYXJjaGl2ZS5jOjQzNAorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAiY29tcHJlc3PDo28gw7N0aW1hIgorCisjOiBhcmNoaXZlLmM6NDM3Cittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICJsaXN0YXIgZm9ybWF0b3MgZGUgYXJxdWl2byBzdXBvcnRhZG9zIgorCisjOiBhcmNoaXZlLmM6NDM5IGJ1aWx0aW4vYXJjaGl2ZS5jOjkwIGJ1aWx0aW4vY2xvbmUuYzoxMDMgYnVpbHRpbi9jbG9uZS5jOjEwNgorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY0MSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTgyCittc2dpZCAicmVwbyIKK21zZ3N0ciAicmVwbyIKKworIzogYXJjaGl2ZS5jOjQ0MCBidWlsdGluL2FyY2hpdmUuYzo5MQorbXNnaWQgInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IgorbXNnc3RyICJvYnRlciBvIGFycXVpdm8gYSBwYXJ0aXIgZG8gcmVwb3NpdMOzcmlvIHJlbW90byA8cmVwbz4iCisKKyM6IGFyY2hpdmUuYzo0NDEgYnVpbHRpbi9hcmNoaXZlLmM6OTIgYnVpbHRpbi9ub3Rlcy5jOjQ4NQorbXNnaWQgImNvbW1hbmQiCittc2dzdHIgImNvbWFuZG8iCisKKyM6IGFyY2hpdmUuYzo0NDIgYnVpbHRpbi9hcmNoaXZlLmM6OTMKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgImNhbWluaG8gcGFyYSBvIGNvbWFuZG8gZ2l0LXVwbG9hZC1hcmNoaXZlIG5vIHJlbW90byIKKworIzogYXJjaGl2ZS5jOjQ0OQorbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICJPcMOnw6NvIGluZXNwZXJhZGEgLS1yZW1vdGUiCisKKyM6IGFyY2hpdmUuYzo0NTEKK21zZ2lkICJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIKK21zZ3N0ciAiQSBvcMOnw6NvIC0tZXhlYyBzw7MgcG9kZSBzZXIgdXNhZGEgZW0gY29uanVudG8gY29tIC0tcmVtb3RlIgorCisjOiBhcmNoaXZlLmM6NDUzCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIk9ww6fDo28gaW5lc3BlcmFkYSAtLW91dHB1dCIKKworIzogYXJjaGl2ZS5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGFyY2hpdmUgZm9ybWF0ICclcyciCittc2dzdHIgIkZvcm1hdG8gZGUgYXJxdWl2byBkZXNjb25oZWNpZG8gJyVzJyIKKworIzogYXJjaGl2ZS5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJBcmd1bWVudCBub3Qgc3VwcG9ydGVkIGZvciBmb3JtYXQgJyVzJzogLSVkIgorbXNnc3RyICJBcmd1bWVudG8gbsOjbyBzdXBvcnRhZG8gcGFyYSBvIGZvcm1hdG8gJyVzJzogLSVkIgorCisjOiBhdHRyLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWUiCittc2dzdHIgIiUuKnMgbsOjbyDDqSB1bSBub21lIGRlIGF0cmlidXRvIHbDoWxpZG8iCisKKyM6IGF0dHIuYzo0MDgKK21zZ2lkICIiCisiTmVnYXRpdmUgcGF0dGVybnMgYXJlIGlnbm9yZWQgaW4gZ2l0IGF0dHJpYnV0ZXNcbiIKKyJVc2UgJ1xcIScgZm9yIGxpdGVyYWwgbGVhZGluZyBleGNsYW1hdGlvbi4iCittc2dzdHIgIiIKKyJPcyBwYWRyw7VlcyBuZWdhdGl2b3Mgc8OjbyBpZ25vcmFkb3Mgbm9zIGF0cmlidXRvcyBkbyBnaXRcbiIKKyJVc2UgJ1xcIScgcGFyYSB1bWEgZXhjbGFtYcOnw6NvIGxpdGVyYWwgw6AgZXNxdWVyZGEuIgorCisjOiBiaXNlY3QuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSAnJXMnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgbyBmaWNoZWlybyAnJXMnIgorCisjOiBiaXNlY3QuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkbHkgcXVvdGVkIGNvbnRlbnQgaW4gZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAiQ29udGXDumRvIGluY29ycmV0YW1lbnRlIGNpdGFkbyBubyBmaWNoZWlybyAnJXMnOiAlcyIKKworIzogYmlzZWN0LmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGNhbm5vdCBiaXNlY3QgbW9yZSFcbiIKK21zZ3N0ciAiTsOjbyBzZSBlc3TDoSBhIGJpc3NldGFyIG1haXMhXG4iCisKKyM6IGJpc2VjdC5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBjb21taXQgbmFtZSAlcyIKK21zZ3N0ciAiJXMgbsOjbyDDqSB1bSBub21lIGRlIGNvbW1pdCB2w6FsaWRvIgorCisjOiBiaXNlY3QuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIGJhZC5cbiIKKyJUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIkEgYmFzZSBkZSBpbnRlZ3Jhw6fDo28gJXMgw6kgbcOhIChiYWQpLlxuIgorIlNpZ25pZmljYSBxdWUgbyBidWcgZm9pIGNvcnJpZ2lkbyBlbnRyZSAlcyBlIFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjczOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgbmV3LlxuIgorIlRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiQSBiYXNlIGRlIGludGVncmHDp8OjbyAlcyDDqSBub3ZhIChuZXcpLlxuIgorIkEgcHJvcHJpZWRhZGUgZm9pIG11ZGFkYSBlbnRyZSAlcyBlIFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIkEgYmFzZSBkZSBpbnRlZ3Jhw6fDo28gJXMgw6kgJXMuXG4iCisiU2lnbmlmaWNhIHF1ZSBvIHByaW1laXJvIGNvbW1pdCAnJXMnIGVzdMOhIGVudHJlICVzIGUgWyVzXS5cbiIKKworIzogYmlzZWN0LmM6NzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTb21lICVzIHJldnMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlICVzIHJldi5cbiIKKyJnaXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS5cbiIKKyJNYXliZSB5b3UgbWlzdG9vayAlcyBhbmQgJXMgcmV2cz9cbiIKK21zZ3N0ciAiIgorIkFsZ3VtYXMgcmV2aXPDtWVzICVzIG7Do28gYW50ZWNlZGVtIGEgcmV2aXPDo28gJXMuXG4iCisiZ2l0IGJpc2VjdCBuw6NvIHBvZGUgZnVuY2lvbmFyIGNvcnJldGFtZW50ZSBuZXN0YSBzaXR1YcOnw6NvLlxuIgorIlRhbHZleiBjb25mdW5kaXUgcmV2aXPDtWVzICVzIGUgJXM/XG4iCisKKyM6IGJpc2VjdC5jOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAlcyBhbmQgWyVzXSBtdXN0IGJlIHNraXBwZWQuXG4iCisiU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0ICVzIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCAlcy5cbiIKKyJXZSBjb250aW51ZSBhbnl3YXkuIgorbXNnc3RyICIiCisidGVtLXNlIHF1ZSBzYWx0YXIgYSBiYXNlIGRlIGludGVncmHDp8OjbyBlbnRyZSAlcyBlIFslc10uXG4iCisiUG9ydGFudG8gbsOjbyBzZSBwb2RlIHRlciBhIGNlcnRlemEgcXVlIG8gcHJpbWVpcm8gY29tbWl0ICVzIGVzdMOhIGVudHJlICVzIGUgIgorIiVzLlxuIgorIkNvbnRpbnVhLXNlIGRlIHF1YWxxdWVyIG1hbmVpcmEuIgorCisjOiBiaXNlY3QuYzo3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIKK21zZ3N0ciAiQSBiaXNzZXRhcjogdW1hIGJhc2UgZGUgaW50ZWdyYcOnw6NvIHRlbSBkZSBzZXIgdGVzdGFkYVxuIgorCisjOiBiaXNlY3QuYzo4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSAlcyByZXZpc2lvbiBpcyBuZWVkZWQiCittc2dzdHIgInByZWNpc2Etc2UgZGUgdW1hIHJldmlzw6NvICVzIgorCisjOiBiaXNlY3QuYzo4NjcgYnVpbHRpbi9ub3Rlcy5jOjE3NCBidWlsdGluL3RhZy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyIG8gZmljaGVpcm8gJyVzJyIKKworIzogYmlzZWN0LmM6OTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciBvIGZpY2hlaXJvICclcyciCisKKyM6IGJpc2VjdC5jOjk0OAorbXNnaWQgInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIgorbXNnc3RyICJmYWxoYSBhbyBsZXIgcmVmZXLDqm5jaWFzIGJpc3NldGFkYXMiCisKKyM6IGJpc2VjdC5jOjk2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB3YXMgYm90aCAlcyBhbmQgJXNcbiIKK21zZ3N0ciAiJXMgZXJhICVzIGUgJXMgZW0gc2ltdWx0w6JuZW9cbiIKKworIzogYmlzZWN0LmM6OTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0ZXN0YWJsZSBjb21taXQgZm91bmQuXG4iCisiTWF5YmUgeW91IHN0YXJ0ZWQgd2l0aCBiYWQgcGF0aCBwYXJhbWV0ZXJzP1xuIgorbXNnc3RyICIiCisiTmVuaHVtIGNvbW1pdCB0ZXN0w6F2ZWwgZW5jb250cmFkby5cbiIKKyJUYWx2ZXogdGVuaGEgY29tZcOnYWRvIGNvbSBwYXLDom1ldHJvcyBkZSBjYW1pbmhvIGluY29ycmV0b3M/XG4iCisKKyM6IGJpc2VjdC5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICIocm91Z2hseSAlZCBzdGVwKSIKK21zZ2lkX3BsdXJhbCAiKHJvdWdobHkgJWQgc3RlcHMpIgorbXNnc3RyWzBdICIoYXByb3hpbWFkYW1lbnRlICVkIHBhc3NvKSIKK21zZ3N0clsxXSAiKGFwcm94aW1hZGFtZW50ZSAlZCBwYXNzb3MpIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGxhc3QgJXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoCisjLiAiKHJvdWdobHkgJWQgc3RlcHMpIiB0cmFuc2xhdGlvbgorIzogYmlzZWN0LmM6OTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogJWQgcmV2aXNpb24gbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIKK21zZ2lkX3BsdXJhbCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIKK21zZ3N0clswXSAiQSBiaXNzZXRhcjogZmFsdGEgJWQgcmV2aXPDo28gcGFyYSB0ZXN0YXIgZGVwb2lzIGRlc3RhICVzXG4iCittc2dzdHJbMV0gIkEgYmlzc2V0YXI6IGZhbHRhbSAlZCByZXZpc8O1ZXMgcGFyYSB0ZXN0YXIgZGVwb2lzIGRlc3RhICVzXG4iCisKKyM6IGJyYW5jaC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJBZnRlciBmaXhpbmcgdGhlIGVycm9yIGNhdXNlIHlvdSBtYXkgdHJ5IHRvIGZpeCB1cFxuIgorInRoZSByZW1vdGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYnkgaW52b2tpbmdcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgorbXNnc3RyICIiCisiXG4iCisiQXDDs3MgcmVzb2x2ZXIgYSBjYXVzYSBkbyBlcnJvLCBwb2RlIHRlbnRhciBjb3JyaWdpclxuIgorIm8gcmFtbyByZW1vdG8gcXVlIGRldmUgc2VyIHNlZ3VpZG8sIGludm9jYW5kb1xuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIi4iCisKKyM6IGJyYW5jaC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAiTyByYW1vICVzIG7Do28gZm9pIGNvbmZpZ3VyYWRvIGNvbSByYW1vIGEgbW9udGFudGUgZGVsZSBwcsOzcHJpby4iCisKKyM6IGJyYW5jaC5jOjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAlcyBmcm9tICVzIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiUmFtbyAlcyBjb25maWd1cmFkbyBwYXJhIHNlZ3VpciBvIHJhbW8gcmVtb3RvICVzIGRlICVzIHBvciByZWJhc2UuIgorCisjOiBicmFuY2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJXMgZnJvbSAlcy4iCittc2dzdHIgIlJhbW8gJXMgY29uZmlndXJhZG8gcGFyYSBzZWd1aXIgbyByYW1vIHJlbW90byAlcyBkZSAlcy4iCisKKyM6IGJyYW5jaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICVzIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiUmFtbyAlcyBjb25maWd1cmFkbyBwYXJhIHNlZ3VpciBvIHJhbW8gbG9jYWwgJXMgcG9yIHJlYmFzZS4iCisKKyM6IGJyYW5jaC5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICVzLiIKK21zZ3N0ciAiUmFtbyAlcyBjb25maWd1cmFkbyBwYXJhIHNlZ3VpciBvIHJhbW8gbG9jYWwgJXMuIgorCisjOiBicmFuY2guYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICVzIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiUmFtbyAlcyBjb25maWd1cmFkbyBwYXJhIHNlZ3VpciBhIHJlZmVyw6puY2lhIHJlbW90YSAlcyBwb3IgcmViYXNlLiIKKworIzogYnJhbmNoLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAlcy4iCittc2dzdHIgIlJhbW8gJXMgY29uZmlndXJhZG8gcGFyYSBzZWd1aXIgYSByZWZlcsOqbmNpYSByZW1vdGEgJXMuIgorCisjOiBicmFuY2guYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICJSYW1vICVzIGNvbmZpZ3VyYWRvIHBhcmEgc2VndWlyIGEgcmVmZXLDqm5jaWEgbG9jYWwgJXMgcG9yIHJlYmFzZS4iCisKKyM6IGJyYW5jaC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAlcy4iCittc2dzdHIgIlJhbW8gJXMgY29uZmlndXJhZG8gcGFyYSBzZWd1aXIgYSByZWZlcsOqbmNpYSBsb2NhbCAlcy4iCisKKyM6IGJyYW5jaC5jOjExOQorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGVzY3JldmVyIGEgY29uZmlndXJhw6fDo28gZG8gcmFtbyBhIG1vbnRhbnRlIgorCisjOiBicmFuY2guYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAiTsOjbyBzZWd1aWRvOiBpbmZvcm1hw6fDo28gZGEgcmVmZXLDqm5jaWEgJXMgYW1iw61ndWEiCisKKyM6IGJyYW5jaC5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiJyVzJyBuw6NvIMOpIHVtIG5vbWUgdsOhbGlkbyBwYXJhIHVtIHJhbW8uIgorCisjOiBicmFuY2guYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkrDoSBleGlzdGUgdW0gcmFtbyBkZXNpZ25hZG8gJyVzJy4iCisKKyM6IGJyYW5jaC5jOjE5OAorbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZm9yw6dhciBhIGF0dWFsaXphw6fDo28gZG8gcmFtbyBhdHVhbC4iCisKKyM6IGJyYW5jaC5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50ICclcycgaXMgbm90IGEgYnJhbmNoLiIKK21zZ3N0ciAiIgorIk7Do28gw6kgcG9zc8OtdmVsIGNvbmZpZ3VyYXIgcmFtbyBhIHNlZ3VpcjsgbyBwb250byBpbmljaWFsICclcycgbsOjbyDDqSB1bSByYW1vLiIKKworIzogYnJhbmNoLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSByZXF1ZXN0ZWQgdXBzdHJlYW0gYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIm8gcmFtbyBhIG1vbnRhbnRlIHNvbGljaXRhZG8gJyVzJyBuw6NvIGV4aXN0ZSIKKworIzogYnJhbmNoLmM6MjIyCittc2dpZCAiIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgb24gYmFzaW5nIHlvdXIgd29yayBvbiBhbiB1cHN0cmVhbVxuIgorImJyYW5jaCB0aGF0IGFscmVhZHkgZXhpc3RzIGF0IHRoZSByZW1vdGUsIHlvdSBtYXkgbmVlZCB0b1xuIgorInJ1biBcImdpdCBmZXRjaFwiIHRvIHJldHJpZXZlIGl0LlxuIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVzaCBvdXQgYSBuZXcgbG9jYWwgYnJhbmNoIHRoYXRcbiIKKyJ3aWxsIHRyYWNrIGl0cyByZW1vdGUgY291bnRlcnBhcnQsIHlvdSBtYXkgd2FudCB0byB1c2VcbiIKKyJcImdpdCBwdXNoIC11XCIgdG8gc2V0IHRoZSB1cHN0cmVhbSBjb25maWcgYXMgeW91IHB1c2guIgorbXNnc3RyICIiCisiXG4iCisiU2UgcHJldGVuZGUgZWZldHVhciByZWJhc2UgZG8gc2V1IHRyYWJhbGhvIHNvYnJlIHVtIHJhbW9cbiIKKyJhIG1vbnRhbnRlIHF1ZSBqw6EgZXhpc3RlIG5vIHJlbW90bywgcG9kZSBzZXIgbmVjZXNzw6FyaW9cbiIKKyJleGVjdXRhciBcImdpdCBmZXRjaFwiIHBhcmEgb2J0w6otbG8uXG4iCisiXG4iCisiU2UgcHJldGVuZGUgcHVibGljYXIgdW0gbm92byByYW1vIGxvY2FsIHF1ZSBpcsOhIHNlZ3VpclxuIgorIm8gc2V1IGhvbcOzbG9nbyByZW1vdG8sIHBvZGUgdXNhciBcImdpdCBwdXNoIC11XCIgcGFyYSBjb25maWd1cmFyXG4iCisibyByZXNwZXRpdm8gcmFtbyBhIG1vbnRhbnRlLCBhbyBtZXNtbyB0ZW1wbyBxdWUgcHVibGljYS4iCisKKyM6IGJyYW5jaC5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIk5vbWUgZGUgb2JqZXRvIGludsOhbGlkbzogJyVzJy4iCisKKyM6IGJyYW5jaC5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJOb21lIGRlIG9iamV0byBhbWLDrWd1bzogJyVzJy4iCisKKyM6IGJyYW5jaC5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBicmFuY2ggcG9pbnQ6ICclcycuIgorbXNnc3RyICJQb250byBubyByYW1vIGludsOhbGlkbzogJyVzJy4iCisKKyM6IGJyYW5jaC5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiJyVzJyBmb2kgasOhIGV4dHJhw61kbyBlbSAnJXMnIgorCisjOiBicmFuY2guYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBvZiB3b3JraW5nIHRyZWUgJXMgaXMgbm90IHVwZGF0ZWQiCittc2dzdHIgIkhFQUQgZGEgw6Fydm9yZSBkZSB0cmFiYWxobyAlcyBuw6NvIGVzdMOhIGF0dWFsaXphZGEiCisKKyM6IGJ1bmRsZS5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgbG9vayBsaWtlIGEgdjIgYnVuZGxlIGZpbGUiCittc2dzdHIgIiclcycgbsOjbyBwYXJlY2Ugc2VyIHVtIGZpY2hlaXJvIGJ1bmRsZSB2MiIKKworIzogYnVuZGxlLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlYWRlcjogJXMlcyAoJWQpIgorbXNnc3RyICJjYWJlw6dhbGhvIG7Do28gcmVjb25oZWNpZG86ICVzJXMgKCVkKSIKKworIzogYnVuZGxlLmM6ODcgc2VxdWVuY2VyLmM6MTMzOSBzZXF1ZW5jZXIuYzoxNzYwIGJ1aWx0aW4vY29tbWl0LmM6Nzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciAnJXMnIgorCisjOiBidW5kbGUuYzoxMzkKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiTyByZXBvc2l0w7NyaW8gbsOjbyBwb3NzdcOtIGVzdGVzIGNvbW1pdHMgcHLDqS1yZXF1aXNpdGFkb3M6IgorCisjOiBidW5kbGUuYzoxNjMgcmVmLWZpbHRlci5jOjE4NTIgc2VxdWVuY2VyLmM6MTE2MiBzZXF1ZW5jZXIuYzoyMjk5CisjOiBidWlsdGluL2JsYW1lLmM6MjgxMSBidWlsdGluL2NvbW1pdC5jOjEwNjEgYnVpbHRpbi9sb2cuYzozNTMKKyM6IGJ1aWx0aW4vbG9nLmM6ODk3IGJ1aWx0aW4vbG9nLmM6MTM0NyBidWlsdGluL2xvZy5jOjE2NzMgYnVpbHRpbi9sb2cuYzoxOTE2CisjOiBidWlsdGluL21lcmdlLmM6MzU5IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNzYKK21zZ2lkICJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIKK21zZ3N0ciAiZmFsaGEgYW8gY29uZmlndXJhciBwZXJjdXJzbyBkZSByZXZpc8O1ZXMiCisKKyM6IGJ1bmRsZS5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiTyBidW5kbGUgY29udMOpbSBlc3RhIHJlZmVyw6puY2lhOiIKK21zZ3N0clsxXSAiTyBidW5kbGUgY29udMOpbSBlc3RhcyAlZCByZWZlcsOqbmNpYXM6IgorCisjOiBidW5kbGUuYzoxOTIKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAiTyBwYWNvdGUgcmVnaXN0YSB1bSBoaXN0w7NyaWNvIGNvbXBsZXRvLiIKKworIzogYnVuZGxlLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJPIGJ1bmRsZSByZXF1ZXIgZXN0YSByZWZlcsOqbmNpYToiCittc2dzdHJbMV0gIk8gYnVuZGxlIHJlcXVlciBlc3RhcyAlZCByZWZlcsOqbmNpYXM6IgorCisjOiBidW5kbGUuYzoyNTMKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgbGFuw6dhciBwYWNrLW9iamVjdHMiCisKKyM6IGJ1bmRsZS5jOjI2NAorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICJwYWNrLW9iamVjdHMgdGVybWlub3UgaW5lc3BlcmFkYW1lbnRlIgorCisjOiBidW5kbGUuYzozMDQKK21zZ2lkICJyZXYtbGlzdCBkaWVkIgorbXNnc3RyICJyZXYtbGlzdCB0ZXJtaW5vdSBpbmVzcGVyYWRhbWVudGUiCisKKyM6IGJ1bmRsZS5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIKK21zZ3N0ciAiYSByZWZlcsOqbmNpYSAnJXMnIMOpIGV4Y2x1w61kYSBwZWxhcyBvcMOnw7VlcyBkZSByZXYtbGlzdCIKKworIzogYnVuZGxlLmM6NDQzIGJ1aWx0aW4vbG9nLmM6MTcwIGJ1aWx0aW4vbG9nLmM6MTU3OSBidWlsdGluL3Nob3J0bG9nLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50byBuw6NvIHJlY29uaGVjaWRvOiAlcyIKKworIzogYnVuZGxlLmM6NDUxCittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgIkNyaWHDp8OjbyBkZSBidW5kbGUgdmF6aW8gcmVjdXNhZGEuIgorCisjOiBidW5kbGUuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBjcmlhciAnJXMnIgorCisjOiBidW5kbGUuYzo0OTEKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgImluZGV4LXBhY2sgdGVybWlub3UgaW5lc3BlcmFkYW1lbnRlIgorCisjOiBjb2xvci5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yIHZhbHVlOiAlLipzIgorbXNnc3RyICJ2YWxvciBkZSBjb3IgaW52w6FsaWRvOiAlLipzIgorCisjOiBjb21taXQuYzo0MCBzZXF1ZW5jZXIuYzoxNTcyIGJ1aWx0aW4vYW0uYzo0MjEgYnVpbHRpbi9hbS5jOjQ1NworIzogYnVpbHRpbi9hbS5jOjE0OTMgYnVpbHRpbi9hbS5jOjIxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgJXMiCisKKyM6IGNvbW1pdC5jOjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzIG7Do28gw6kgdW0gY29tbWl0ISIKKworIzogY29tbWl0LmM6MTUxMQorbXNnaWQgIiIKKyJXYXJuaW5nOiBjb21taXQgbWVzc2FnZSBkaWQgbm90IGNvbmZvcm0gdG8gVVRGLTguXG4iCisiWW91IG1heSB3YW50IHRvIGFtZW5kIGl0IGFmdGVyIGZpeGluZyB0aGUgbWVzc2FnZSwgb3Igc2V0IHRoZSBjb25maWdcbiIKKyJ2YXJpYWJsZSBpMThuLmNvbW1pdGVuY29kaW5nIHRvIHRoZSBlbmNvZGluZyB5b3VyIHByb2plY3QgdXNlcy5cbiIKK21zZ3N0ciAiIgorImF2aXNvOiBhIG1lbnNhZ2VtIGRlIGNvbW1pdCBuw6NvIGNvbmZvcm1hIGNvbSBVVEYtOC5cbiIKKyJQb2RlIHF1ZXJlciBlbWVuZMOhLWxvIGRlcG9pcyBkZSBjb3JyaWdpciBhIG1lbnNhZ2VtIG91IGRlZmluaXIgYVxuIgorInZhcmnDoXZlbCBkZSBjb25maWd1cmHDp8OjbyBpMThuLmNvbW1pdGVuY29kaW5nIGNvbSBhIGNvZGlmaWNhw6fDo28gcXVlXG4iCisibyBzZXUgcHJvamV0byB1dGlsaXphLlxuIgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1lbcOzcmlhIGVzZ290YWRhIgorCisjOiBjb25maWcuYzoxOTEKK21zZ2lkICJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZSBjb25kaXRpb25hbHMgbXVzdCBjb21lIGZyb20gZmlsZXMiCittc2dzdHIgImNvbmZpZ3VyYcOnw6NvIHJlbGF0aXZhIGNvbSBpbmNsdXPDo28gY29uZGljaW9uYWwgZGV2ZSBwcm92aXIgZGUgZmljaGVpcm9zIgorCisjOiBjb25maWcuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGJsb2IgJXMiCittc2dzdHIgImxpbmhhIGRlIGNvbmZpZ3VyYcOnw6NvICVkIGluY29ycmV0YSBubyBibG9iICVzIgorCisjOiBjb25maWcuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGZpbGUgJXMiCittc2dzdHIgImxpbmhhIGRlIGNvbmZpZ3VyYcOnw6NvICVkIGluY29ycmV0YSBubyBmaWNoZWlybyAlcyIKKworIzogY29uZmlnLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGluaGEgZGUgY29uZmlndXJhw6fDo28gJWQgaW5jb3JyZXRhIG5hIGVudHJhZGEgcGFkcsOjbyIKKworIzogY29uZmlnLmM6NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdWJtb2R1bGUtYmxvYiAlcyIKK21zZ3N0ciAibGluaGEgZGUgY29uZmlndXJhw6fDo28gJWQgaW5jb3JyZXRhIG5vIHN1Ym3Ds2R1bG8tYmxvYiAlcyIKKworIzogY29uZmlnLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBjb21tYW5kIGxpbmUgJXMiCittc2dzdHIgImxpbmhhIGRlIGNvbmZpZ3VyYcOnw6NvICVkIGluY29ycmV0YSBuYSBsaW5oYSBkZSBjb21hbmRvcyAlcyIKKworIzogY29uZmlnLmM6NzIxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiAlcyIKK21zZ3N0ciAibGluaGEgZGUgY29uZmlndXJhw6fDo28gJWQgaW5jb3JyZXRhIGVtICVzIgorCisjOiBjb25maWcuYzo4NDAKK21zZ2lkICJvdXQgb2YgcmFuZ2UiCittc2dzdHIgImZvcmEgZGUgaW50ZXJ2YWxvIgorCisjOiBjb25maWcuYzo4NDAKK21zZ2lkICJpbnZhbGlkIHVuaXQiCittc2dzdHIgInVuaWRhZGUgaW52w6FsaWRhIgorCisjOiBjb25maWcuYzo4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6ICVzIgorbXNnc3RyICJ2YWxvciBudW3DqXJpY28gJyVzJyBkYSBjb25maWd1cmHDp8OjbyAnJXMnIGluY29ycmV0bzogJXMiCisKKyM6IGNvbmZpZy5jOjg1MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBibG9iICVzOiAlcyIKK21zZ3N0ciAidmFsb3IgbnVtw6lyaWNvICclcycgZGEgY29uZmlndXJhw6fDo28gJyVzJyBpbmNvcnJldG8gbm8gYmxvYiAlczogJXMiCisKKyM6IGNvbmZpZy5jOjg1NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBmaWxlICVzOiAlcyIKK21zZ3N0ciAidmFsb3IgbnVtw6lyaWNvICclcycgZGEgY29uZmlndXJhw6fDo28gJyVzJyBpbmNvcnJldG8gbm8gZmljaGVpcm8gJXM6ICVzIgorCisjOiBjb25maWcuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3RhbmRhcmQgaW5wdXQ6ICVzIgorbXNnc3RyICIiCisidmFsb3IgbnVtw6lyaWNvICclcycgZGEgY29uZmlndXJhw6fDo28gJyVzJyBpbmNvcnJldG8gbmEgZW50cmFkYSBwYWRyw6NvOiAlcyIKKworIzogY29uZmlnLmM6ODYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN1Ym1vZHVsZS1ibG9iICVzOiAlcyIKK21zZ3N0ciAiIgorInZhbG9yIG51bcOpcmljbyAnJXMnIGRhIGNvbmZpZ3VyYcOnw6NvICclcycgaW5jb3JyZXRvIG5vIHN1Ym3Ds2R1bG8tYmxvYiAlczogJXMiCisKKyM6IGNvbmZpZy5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBjb21tYW5kIGxpbmUgJXM6ICVzIgorbXNnc3RyICIiCisidmFsb3IgbnVtw6lyaWNvICclcycgZGEgY29uZmlndXJhw6fDo28gJyVzJyBpbmNvcnJldG8gbmEgbGluaGEgZGUgY29tYW5kb3MgJXM6ICIKKyIlcyIKKworIzogY29uZmlnLmM6ODY2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiAlcyIKK21zZ3N0ciAidmFsb3IgbnVtw6lyaWNvICclcycgZGEgY29uZmlndXJhw6fDo28gJyVzJyBpbmNvcnJldG8gZW0gJXM6ICVzIgorCisjOiBjb25maWcuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAiZmFsaGEgYW8gZXhwYW5kaXIgZGlyZXTDs3JpbyBkZSB1dGlsaXphZG9yIGVtOiAnJXMnIgorCisjOiBjb25maWcuYzoxMDQ4IGNvbmZpZy5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIm7DrXZlbCBkZSBjb21wcmVzc8OjbyB6bGliICVkIGluY29ycmV0byIKKworIzogY29uZmlnLmM6MTE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiCittc2dzdHIgIm1vZG8gaW52w6FsaWRvIHBhcmEgY3JpYcOnw6NvIGRlIG9iamV0bzogJXMiCisKKyM6IGNvbmZpZy5jOjEzMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIm7DrXZlbCBkZSBjb21wYWN0YcOnw6NvIGRvIHBhY290ZSAlZCBpbmNvcnJldG8iCisKKyM6IGNvbmZpZy5jOjE1MjIKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYW5hbGlzYXIgY29uZmlndXJhw6fDo28gZGUgbGluaGEgZGUgY29tYW5kb3MiCisKKyM6IGNvbmZpZy5jOjE1NzIKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgIiIKKyJvY29ycmV1IHVtIGVycm8gZGVzY29uaGVjaWRvIGR1cmFudGUgYSBsZWl0dXJhIGRvcyBmaWNoZWlyb3MgZGUgY29uZmlndXJhw6fDo28iCisKKyM6IGNvbmZpZy5jOjE5MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAiSW52w6FsaWRvICVzOiAnJXMnIgorCisjOiBjb25maWcuYzoxOTUyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29yZS51bnRyYWNrZWRDYWNoZSB2YWx1ZSAnJXMnOyB1c2luZyAna2VlcCcgZGVmYXVsdCB2YWx1ZSIKK21zZ3N0ciAiIgorInZhbG9yICclcycgZGUgY29yZS51bnRyYWNrZWRDYWNoZSBkZXNjb25oZWNpZG87IHVzYXIgJ2tlZXAnIHZhbG9yIHBvciBvbWlzc8OjbyIKKworIzogY29uZmlnLmM6MTk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgdmFsdWUgJyVkJyBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxMDAiCittc2dzdHIgIm8gdmFsb3IgJyVkJyBkZSBzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgZGV2ZSBlc3RhciBlbnRyZSAwIGUgMTAwIgorCisjOiBjb25maWcuYzoxOTg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJXMnIGZyb20gY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYW5hbGlzYXIgJyVzJyBkYSBjb25maWd1cmHDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvcyIKKworIzogY29uZmlnLmM6MTk5MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIHZhcmlhYmxlICclcycgaW4gZmlsZSAnJXMnIGF0IGxpbmUgJWQiCittc2dzdHIgInZhcmnDoXZlbCBkZSBjb25maWd1cmHDp8OjbyAnJXMnIGluY29ycmV0YSBubyBmaWNoZWlybyAnJXMnIG5hIGxpbmhhICVkIgorCisjOiBjb25maWcuYzoyMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgIiVzIHRlbSBtw7psdGlwbG9zIHZhbG9yZXMiCisKKyM6IGNvbmZpZy5jOjIzODQgY29uZmlnLmM6MjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmc3RhdCBvbiAlcyBmYWlsZWQiCittc2dzdHIgImZhbGhhIGRlIGZzdGF0IGRlICVzIgorCisjOiBjb25maWcuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgJyVzJyB0byAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZGVmaW5pciAnJXMnIGNvbW8gJyVzJyIKKworIzogY29uZmlnLmM6MjUwNCBidWlsdGluL3JlbW90ZS5jOjc3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIHJlaW5pY2lhciAnJXMnIgorCisjOiBjb25uZWN0LmM6NDkKK21zZ2lkICJUaGUgcmVtb3RlIGVuZCBodW5nIHVwIHVwb24gaW5pdGlhbCBjb250YWN0IgorbXNnc3RyICJPIHJlbW90byBkZXNsaWdvdSBhcMOzcyBjb250YWN0byBpbmljaWFsIgorCisjOiBjb25uZWN0LmM6NTEKK21zZ2lkICIiCisiQ291bGQgbm90IHJlYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS5cbiIKKyJcbiIKKyJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHNcbiIKKyJhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLiIKK21zZ3N0ciAiIgorIk7Do28gZm9pIHBvc3PDrXZlbCBsZXIgZG8gcmVwb3NpdMOzcmlvIHJlbW90by5cbiIKKyJcbiIKKyJDZXJ0aWZpY2Etc2UgcXVlIHRlbSBvcyBkaXJlaXRvcyBkZSBhY2Vzc28gY29ycmV0b3NcbiIKKyJlIHF1ZSBvIHJlcG9zaXTDs3JpbyBleGlzdGUuIgorCisjOiBjb25uZWN0ZWQuYzo2MyBidWlsdGluL2ZzY2suYzoxOTAgYnVpbHRpbi9wcnVuZS5jOjE0MAorbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAiQSB2ZXJpZmljYXIgY29uZWN0aXZpZGFkZSIKKworIzogY29ubmVjdGVkLmM6NzUKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZXhlY3V0YXIgJ2dpdCByZXYtbGlzdCciCisKKyM6IGNvbm5lY3RlZC5jOjk1Cittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0IgorbXNnc3RyICJmYWxoYSBhbyBlc2NyZXZlciBwYXJhIHJldi1saXN0IgorCisjOiBjb25uZWN0ZWQuYzoxMDIKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbiIKK21zZ3N0ciAiZmFsaGEgYW8gZmVjaGFyIGVudHJhZGEgcGFkcsOjbyBkZSByZXYtbGlzdCIKKworIzogY29udmVydC5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisiQ1JMRiBzZXLDoSBzdWJzdGl0dcOtZG8gcG9yIExGIGVtICVzLlxuIgorIk8gZmluYWwgZGUgbGluaGEgb3JpZ2luYWwgc2Vyw6EgbWFudGlkbyBubyBmaWNoZWlybyBkYSBzdWEgw6Fydm9yZSBkZSB0cmFiYWxoby4iCisKKyM6IGNvbnZlcnQuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1JMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcy4iCittc2dzdHIgIkNSTEYgc2Vyw6Egc3Vic3RpdHXDrWRvIHBvciBMRiBlbSAlcy4iCisKKyM6IGNvbnZlcnQuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorIkxGIHNlcsOhIHN1YnN0aXR1w61kbyBwb3IgQ1JMRiBlbSAlcy5cbiIKKyJPIGZpbmFsIGRlIGxpbmhhIG9yaWdpbmFsIHNlcsOhIG1hbnRpZG8gbm8gZmljaGVpcm8gZGEgc3VhIMOhcnZvcmUgZGUgdHJhYmFsaG8uIgorCisjOiBjb252ZXJ0LmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMiCittc2dzdHIgIkxGIHNlcsOhIHN1YnN0aXR1w61kbyBwb3IgQ1JMRiBlbSAlcy4iCisKKyM6IGRhdGUuYzo5NworbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgIm5vIGZ1dHVybyIKKworIzogZGF0ZS5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICJow6EgJWx1IHNlZ3VuZG8iCittc2dzdHJbMV0gImjDoSAlbHUgc2VndW5kb3MiCisKKyM6IGRhdGUuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiaMOhICVsdSBtaW51dG8iCittc2dzdHJbMV0gImjDoSAlbHUgbWludXRvcyIKKworIzogZGF0ZS5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBob3VycyBhZ28iCittc2dzdHJbMF0gImjDoSAlbHUgaG9yYSIKK21zZ3N0clsxXSAiaMOhICVsdSBob3JhcyIKKworIzogZGF0ZS5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGRheXMgYWdvIgorbXNnc3RyWzBdICJow6EgJWx1IGRpYSIKK21zZ3N0clsxXSAiaMOhICVsdSBkaWFzIgorCisjOiBkYXRlLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHdlZWtzIGFnbyIKK21zZ3N0clswXSAiaMOhICVsdSBzZW1hbmEiCittc2dzdHJbMV0gImjDoSAlbHUgc2VtYW5hcyIKKworIzogZGF0ZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgbW9udGhzIGFnbyIKK21zZ3N0clswXSAiaMOhICVsdSBtw6pzIgorbXNnc3RyWzFdICJow6EgJWx1IG1lc2VzIgorCisjOiBkYXRlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB5ZWFyIgorbXNnaWRfcGx1cmFsICIlbHUgeWVhcnMiCittc2dzdHJbMF0gIiVsdSBhbm8iCittc2dzdHJbMV0gIiVsdSBhbm9zIgorCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICVsdSBtb250aHMgYWdvIgorbXNnc3RyWzBdICJow6EgJXMgZSAlbHUgbcOqcyIKK21zZ3N0clsxXSAiaMOhICVzIGUgJWx1IG1lc2VzIgorCisjOiBkYXRlLmM6MTU2IGRhdGUuYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgeWVhcnMgYWdvIgorbXNnc3RyWzBdICJow6EgJWx1IGFubyIKK21zZ3N0clsxXSAiaMOhICVsdSBhbm9zIgorCisjOiBkaWZmY29yZS1vcmRlci5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9yZGVyZmlsZSAnJXMnIgorbXNnc3RyICJmYWxoYSBhbyBsZXIgbyBmaWNoZWlybyBkZSBjb21hbmRvICclcyciCisKKyM6IGRpZmZjb3JlLXJlbmFtZS5jOjUzNgorbXNnaWQgIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICJEZXRlw6fDo28gZGUgbXVkYW7Dp2EgZGUgbm9tZSBpbmV4YXRhIGVtIGN1cnNvIgorCisjOiBkaWZmLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICclcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiYSBvcMOnw6NvICclcycgcmVxdWVyIHVtIHZhbG9yIgorCisjOiBkaWZmLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiICBGYWxoYSBhbyBhbmFsaXNhciBwZXJjZW50YWdlbSBsaW1pdGUgZGUgZGlyc3RhdCAnJXMnXG4iCisKKyM6IGRpZmYuYzoxMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclcydcbiIKK21zZ3N0ciAiICBQYXLDom1ldHJvIGRlIGRpcnN0YXQgZGVzY29uaGVjaWRvICclcydcbiIKKworIzogZGlmZi5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHZhbHVlIGZvciAnZGlmZi5zdWJtb2R1bGUnIGNvbmZpZyB2YXJpYWJsZTogJyVzJyIKK21zZ3N0ciAiVmFsb3IgZGVzY29uaGVjaWRvIG5hIHZhcmnDoXZlbCBkZSBjb25maWd1cmHDp8OjbyAnZGlmZi5zdWJtb2R1bGUnOiAnJXMnIgorCisjOiBkaWZmLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3VuZCBlcnJvcnMgaW4gJ2RpZmYuZGlyc3RhdCcgY29uZmlnIHZhcmlhYmxlOlxuIgorIiVzIgorbXNnc3RyICIiCisiRXJyb3MgZW5jb250cmFkb3MgbmEgdmFyacOhdmVsIGRlIGNvbmZpZ3VyYcOnw6NvICdkaWZmLmRpcnN0YXQnOlxuIgorIiVzIgorCisjOiBkaWZmLmM6MzEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICJvIGRpZmYgZXh0ZXJubyB0ZXJtaW5vdSBpbmVzcGVyYWRhbWVudGUsIGludGVycm9tcGlkbyBlbSAlcyIKKworIzogZGlmZi5jOjM0MjgKK21zZ2lkICItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayBhbmQgLXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgZSAtcyBzw6NvIG11dHVhbWVudGUgZXhjbHVzaXZvcyIKKworIzogZGlmZi5jOjM1MTgKK21zZ2lkICItLWZvbGxvdyByZXF1aXJlcyBleGFjdGx5IG9uZSBwYXRoc3BlYyIKK21zZ3N0ciAiLS1mb2xsb3cgcmVxdWVyIGV4YXRhbWVudGUgdW0gw7puaWNvIGVzcGVjaWZpY2Fkb3IgZGUgY2FtaW5obyIKKworIzogZGlmZi5jOjM2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkZhbGhhIGFvIGFuYWxpc2FyIHBhcsOibWV0cm8gZGEgb3DDp8OjbyAtLWRpcnN0YXQvLVg6XG4iCisiJXMiCisKKyM6IGRpZmYuYzozNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSAtLXN1Ym1vZHVsZSBvcHRpb24gcGFyYW1ldGVyOiAnJXMnIgorbXNnc3RyICJGYWxoYSBhbyBhbmFsaXNhciBwYXLDom1ldHJvIGRhIG9ww6fDo28gLS1zdWJtb2R1bGU6ICclcyciCisKKyM6IGRpZmYuYzo0NzE5Cittc2dpZCAiaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIHdhcyBza2lwcGVkIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgIiIKKyJhIGRldGXDp8OjbyBtdWRhbsOnYSBkZSBub21lIGluZXhhdGEgZm9pIG9taXRpZGEgZGV2aWRvIGEgZGVtYXNpYWRvcyBmaWNoZWlyb3MuIgorCisjOiBkaWZmLmM6NDcyMgorbXNnaWQgIm9ubHkgZm91bmQgY29waWVzIGZyb20gbW9kaWZpZWQgcGF0aHMgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAiIgorInPDsyBmb3JhbSBlbmNvbnRyYWRhcyBjw7NwaWFzIGRlIGNhbWluaG9zIG1vZGlmaWNhZG9zIGRldmlkbyBhIGRlbWFzaWFkb3MgIgorImZpY2hlaXJvcy4iCisKKyM6IGRpZmYuYzo0NzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgbWF5IHdhbnQgdG8gc2V0IHlvdXIgJXMgdmFyaWFibGUgdG8gYXQgbGVhc3QgJWQgYW5kIHJldHJ5IHRoZSBjb21tYW5kLiIKK21zZ3N0ciAiIgorInBvZGUgdGVudGFyIGRlZmluaXIgYSB2YXJpw6F2ZWwgJXMgcGFyYSwgcGVsbyBtZW5vcywgJWQgZSByZXBldGlyIG8gY29tYW5kby4iCisKKyM6IGRpci5jOjE4OTkKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IGtlcm5lbCBuYW1lIGFuZCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiZmFsaGEgYW8gb2J0ZXIgbm9tZSBlIGluZm9ybWHDp8OjbyBkbyBrZXJuZWwiCisKKyM6IGRpci5jOjIwMTgKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24uIgorbXNnc3RyICJBIGNhY2hlIG7Do28gY29udHJvbGFkYSBlc3TDoSBkZXNhdGl2YWRhIG5lc3RlIHNpc3RlbWEgb3UgbG9jYWxpemHDp8Ojby4iCisKKyM6IGRpci5jOjI3NzYgZGlyLmM6Mjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyIG8gZGlyZXTDs3Jpb3MgcGFyYSAlcyIKKworIzogZGlyLmM6MjgwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbWlncmF0ZSBnaXQgZGlyZWN0b3J5IGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbWlncmFyIG8gZGlyZXTDs3JpbyBnaXQgZGUgJyVzJyBwYXJhICclcyciCisKKyM6IGVudHJ5LmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0IGZpbGUgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIG9idGVyIHN0YXQgZG8gZmljaGVpcm8gJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjI0OQorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBlc3BlcmF2YS1zZSBsaXN0YSByYXNhIgorCisjOiBmZXRjaC1wYWNrLmM6MjYxCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBFT0YiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBlc3BlcmF2YS1zZSBBQ0svTkFLLCBvYnRldmUtc2UgRU9GIgorCisjOiBmZXRjaC1wYWNrLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgJyVzJyIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IGVzcGVyYXZhLXNlIEFDSy9OQUssIG9idGV2ZS1zZSAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MzMxCittc2dpZCAiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpcmVzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAiLS1zdGF0ZWxlc3MtcnBjIHJlcXVlciBtdWx0aV9hY2tfZGV0YWlsZWQiCisKKyM6IGZldGNoLXBhY2suYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICJsaW5oYSByYXNhIGludsOhbGlkYTogJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1bnNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgImxpbmhhIHBhcmEgYXByb2Z1bmRhciBpbnbDoWxpZGE6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJvYmpldG8gbsOjbyBlbmNvbnRyYWRvOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICJlcnJvIG5vIG9iamV0bzogJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2hhbGxvdyBmb3VuZDogJXMiCittc2dzdHIgInJhc28gbsOjbyBlbmNvbnRyYWRvOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBzaGFsbG93L3Vuc2hhbGxvdywgZ290ICVzIgorbXNnc3RyICJlc3BlcmF2YS1zZSByYXNvL2Fwcm9mdW5kYXIsIG9idGV2ZS1zZSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgJWQgJXMiCittc2dzdHIgIm9idGV2ZS1zZSAlcyAlZCAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCAlcyIKK21zZ3N0ciAiY29tbWl0IGludsOhbGlkbyAlcyIKKworIzogZmV0Y2gtcGFjay5jOjUxOQorbXNnaWQgImdpdmluZyB1cCIKK21zZ3N0ciAiZGVzaXN0w6puY2lhIgorCisjOiBmZXRjaC1wYWNrLmM6NTI5IHByb2dyZXNzLmM6MjM1Cittc2dpZCAiZG9uZSIKK21zZ3N0ciAiY29uY2x1w61kbyIKKworIzogZmV0Y2gtcGFjay5jOjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgKCVkKSAlcyIKK21zZ3N0ciAib2J0ZXZlLXNlICVzICglZCkgJXMiCisKKyM6IGZldGNoLXBhY2suYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyAlcyBhcyBjb21wbGV0ZSIKK21zZ3N0ciAiTWFyY2FkbyAlcyBjb21vIGNvbXBsZXRvIgorCisjOiBmZXRjaC1wYWNrLmM6NzM1CisjLCBjLWZvcm1hdAorbXNnaWQgImFscmVhZHkgaGF2ZSAlcyAoJXMpIgorbXNnc3RyICJqw6Egc2UgdGVtICVzICglcykiCisKKyM6IGZldGNoLXBhY2suYzo3NzMKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiZmV0Y2gtcGFjazogbsOjbyDDqSBwb3Nzw612ZWwgZWZldHVhciBmb3JrIGRlIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCisKKyM6IGZldGNoLXBhY2suYzo3ODEKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIHBhY2sgaGVhZGVyIgorbXNnc3RyICJlcnJvIGRlIHByb3RvY29sbzogY2FiZcOnYWxobyBkZSBwYWNvdGUgaW5jb3JyZXRvIgorCisjOiBmZXRjaC1wYWNrLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiAlcyIKK21zZ3N0ciAiZmV0Y2gtcGFjazogbsOjbyDDqSBwb3Nzw612ZWwgY3JpYXIgcHJvY2Vzc28gZmlsaG8gJXMiCisKKyM6IGZldGNoLXBhY2suYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZmFpbGVkIgorbXNnc3RyICIlcyBmYWxob3UiCisKKyM6IGZldGNoLXBhY2suYzo4NTUKK21zZ2lkICJlcnJvciBpbiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJlcnJvIG5vIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCisKKyM6IGZldGNoLXBhY2suYzo4ODIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiCittc2dzdHIgIk8gc2Vydmlkb3IgbsOjbyBzdXBvcnRhIGNsaWVudGVzIHJhc29zIgorCisjOiBmZXRjaC1wYWNrLmM6ODg2Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAiTyBzZXJ2aWRvciBzdXBvcnRhIG11bHRpX2Fja19kZXRhaWxlZCIKKworIzogZmV0Y2gtcGFjay5jOjg4OQorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBuby1kb25lIgorbXNnc3RyICJPIHNlcnZpZG9yIHN1cG9ydGEgbm8tZG9uZSIKKworIzogZmV0Y2gtcGFjay5jOjg5NQorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBtdWx0aV9hY2siCittc2dzdHIgIk8gc2Vydmlkb3Igc3Vwb3J0YSBtdWlsdGlfYWNrIgorCisjOiBmZXRjaC1wYWNrLmM6ODk5Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIHNpZGUtYmFuZC02NGsiCittc2dzdHIgIk8gc2Vydmlkb3Igc3Vwb3J0YSBzaWRlLWJhbmQtNjRrIgorCisjOiBmZXRjaC1wYWNrLmM6OTAzCittc2dpZCAiU2VydmVyIHN1cHBvcnRzIHNpZGUtYmFuZCIKK21zZ3N0ciAiTyBzZXJ2aWRvciBzdXBvcnRhIHNpZGUtYmFuZCIKKworIzogZmV0Y2gtcGFjay5jOjkwNworbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBhbGxvdy10aXAtc2hhMS1pbi13YW50IgorbXNnc3RyICJPIHNlcnZpZG9yIHN1cG9ydGEgYWxsb3ctdGlwLXNoYTEtaW4td2FudCIKKworIzogZmV0Y2gtcGFjay5jOjkxMQorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBhbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50IgorbXNnc3RyICJPIHNlcnZpZG9yIHN1cG9ydGEgYWxsb3ctcmVhY2hhYmxlLXNoYTEtaW4td2FudCIKKworIzogZmV0Y2gtcGFjay5jOjkyMQorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBvZnMtZGVsdGEiCittc2dzdHIgIk8gc2Vydmlkb3Igc3Vwb3J0YSBvZnMtZGVsdGEiCisKKyM6IGZldGNoLXBhY2suYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb24gaXMgJS4qcyIKK21zZ3N0ciAiQSB2ZXJzw6NvIGRvIHNlcnZpZG9yIMOpICUuKnMiCisKKyM6IGZldGNoLXBhY2suYzo5MzQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctc2luY2UiCittc2dzdHIgIk8gc2Vydmlkb3IgbsOjbyBzdXBvcnRhIC0tc2hhbGxvdy1zaW5jZSIKKworIzogZmV0Y2gtcGFjay5jOjkzOAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1leGNsdWRlIgorbXNnc3RyICJPIHNlcnZpZG9yIG7Do28gc3Vwb3J0YSAtLXNoYWxsb3ctZXhjbHVkZSIKKworIzogZmV0Y2gtcGFjay5jOjk0MAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIgorbXNnc3RyICJPIHNlcnZpZG9yIG7Do28gc3Vwb3J0YSAtLWRlZXBlbiIKKworIzogZmV0Y2gtcGFjay5jOjk1MQorbXNnaWQgIm5vIGNvbW1vbiBjb21taXRzIgorbXNnc3RyICJuZW5odW0gY29tbWl0IGVtIGNvbXVtIgorCisjOiBmZXRjaC1wYWNrLmM6OTYzCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGZldGNoIGZhaWxlZC4iCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBmYWxoYSBhbyBvYnRlci4iCisKKyM6IGZldGNoLXBhY2suYzoxMTI1Cittc2dpZCAibm8gbWF0Y2hpbmcgcmVtb3RlIGhlYWQiCittc2dzdHIgIm5lbmh1bWEgY2FiZcOnYSByZW1vdGEgY29ycmVzcG9uZGVudGUiCisKKyM6IGZldGNoLXBhY2suYzoxMTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVtb3RlIHJlZiAlcyIKK21zZ3N0ciAicmVmZXLDqm5jaWEgcmVtb3RhICVzIGluZXhpc3RlbnRlIgorCisjOiBmZXRjaC1wYWNrLmM6MTE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3QgYWxsb3cgcmVxdWVzdCBmb3IgdW5hZHZlcnRpc2VkIG9iamVjdCAlcyIKK21zZ3N0ciAiTyBzZXJ2aWRvciBuw6NvIHBlcm1pdGUgcGVkaWRvIGRvIG9iamV0byBuw6NvIGFudW5jaWFkbyAlcyIKKworIzogZ3BnLWludGVyZmFjZS5jOjE4NQorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAiZ3BnIG7Do28gYXNzaW5vdSBvcyBkYWRvcyIKKworIzogZ3BnLWludGVyZmFjZS5jOjIxNQorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBjcmlhciBmaWNoZWlybyB0ZW1wb3LDoXJpbyIKKworIzogZ3BnLWludGVyZmFjZS5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJyIKK21zZ3N0ciAiZmFsaGEgYW8gZXNjcmV2ZXIgYXNzaW5hdHVyYSBkZXN0YWNhZGEgZW0gJyVzJyIKKworIzogZ3JhcGguYzo5NgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmUgaW52YWxpZCBjb2xvciAnJS4qcycgaW4gbG9nLmdyYXBoQ29sb3JzIgorbXNnc3RyICJpZ25vcmFyIGNvciBpbnbDoWxpZGEgJyUuKnMnIGVtIGxvZy5ncmFwaENvbG9ycyIKKworIzogZ3JlcC5jOjE3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIiclcyc6IG7Do28gZm9pIHBvc3PDrXZlbCBsZXIgJXMiCisKKyM6IGdyZXAuYzoxODEzIGJ1aWx0aW4vY2xvbmUuYzozOTkgYnVpbHRpbi9kaWZmLmM6ODEgYnVpbHRpbi9ybS5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICJmYWxoYSBhbyBpbnZvY2FyIHN0YXQgZGUgJyVzJyIKKworIzogZ3JlcC5jOjE4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCIKK21zZ3N0ciAiJyVzJzogbGVpdHVyYSB0cnVuY2FkYSIKKworIzogaGVscC5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciCittc2dzdHIgImNvbWFuZG9zIGRvIGdpdCBkaXNwb27DrXZlbCBlbSAnJXMnIgorCisjOiBoZWxwLmM6MjI1Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICJjb21hbmRvcyBkbyBnaXQgZGlzcG9uw612ZWlzIG5vdXRyYXMgbG9jYWxpemHDp8O1ZXMgZW0gJFBBVEgiCisKKyM6IGhlbHAuYzoyNTYKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIkVzdGVzIHPDo28gY29tYW5kb3MgZG8gR2l0IGNvbXVucyB1c2Fkb3MgZW0gZGl2ZXJzYXMgc2l0dWHDp8O1ZXM6IgorCisjOiBoZWxwLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGFwcGVhcnMgdG8gYmUgYSBnaXQgY29tbWFuZCwgYnV0IHdlIHdlcmUgbm90XG4iCisiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIKK21zZ3N0ciAiIgorIiclcycgcGFyZWNlIHNlciB1bSBjb21hbmRvIGRvIGdpdCwgbWFzIG7Do28gw6kgcG9zc8OtdmVsXG4iCisiZXhlY3V0w6EtbG8uIFRhbHZleiBnaXQtJXMgZXN0ZWphIGRhbmlmaWNhZG8/IgorCisjOiBoZWxwLmM6Mzc2Cittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgIk9oIG7Do28uIE7Do28gaMOhIG5lbmh1bSBjb21hbmRvIGRvIEdpdCBkaXNwb27DrXZlbCBubyBzaXN0ZW1hLiIKKworIzogaGVscC5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LlxuIgorIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJyIKK21zZ3N0ciAiIgorIkFWSVNPOiBJbnZvY291IHVtIGNvbWFuZG8gZG8gR2l0IGRlc2lnbmFkbyAnJXMnIHF1ZSBuw6NvIGV4aXN0ZS5cbiIKKyJDb250aW51YW5kbywgYXNzdW1pbmRvIHF1ZSBxdWVyaWEgZGl6ZXIgJyVzJyIKKworIzogaGVscC5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJpbiAlMC4xZiBzZWNvbmRzIGF1dG9tYXRpY2FsbHkuLi4iCittc2dzdHIgImF1dG9tYXRpY2FtZW50ZSBlbSAlMC4xZi4uLiIKKworIzogaGVscC5jOjQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6ICclcycgbsOjbyDDqSB1bSBjb21hbmRvIGRvIGdpdC4gQ29uc3VsdGUgJ2dpdCAtLWhlbHAnLiIKKworIzogaGVscC5jOjQxNCBoZWxwLmM6NDgwCittc2dpZCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiB0aGlzPyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IgorbXNnc3RyWzBdICIiCisiXG4iCisiUXVlcmlhIGRpemVyIGlzdG8/IgorbXNnc3RyWzFdICIiCisiXG4iCisiUXVlcmlhIGRpemVyIGRlc3RlPyIKKworIzogaGVscC5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgLSAlcyIKK21zZ3N0ciAiJXM6ICVzIC0gJXMiCisKKyM6IGlkZW50LmM6MzQzCittc2dpZCAiIgorIlxuIgorIioqKiBQbGVhc2UgdGVsbCBtZSB3aG8geW91IGFyZS5cbiIKKyJcbiIKKyJSdW5cbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisidG8gc2V0IHlvdXIgYWNjb3VudCdzIGRlZmF1bHQgaWRlbnRpdHkuXG4iCisiT21pdCAtLWdsb2JhbCB0byBzZXQgdGhlIGlkZW50aXR5IG9ubHkgaW4gdGhpcyByZXBvc2l0b3J5LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiKioqIFBvciBmYXZvciBkaWdhIHF1ZSDDqS5cbiIKKyJcbiIKKyJFeGVjdXRlXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJldUBleGVtcGxvLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIk1ldSBOb21lXCJcbiIKKyJcbiIKKyJwYXJhIGRlZmluaXIgYSBpZGVudGlkYWRlIHByZWRlZmluaWRhIGRhIHN1YSBjb250YS5cbiIKKyJPbWl0YSAtLWdsb2JhbCBwYXJhIGRlZmluaXIgYSBpZGVudGlkYWRlIGFwZW5hcyBuZXN0ZSByZXBvc2l0w7NyaW8uXG4iCisiXG4iCisKKyM6IGlkZW50LmM6MzY3Cittc2dpZCAibm8gZW1haWwgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAibmVuaHVtIGUtbWFpbCBpbmRpY2FkbyBlIGEgZGV0ZcOnw6NvIGF1dG9tw6F0aWNhIGVzdMOhIGRlc2F0aXZhZGEiCisKKyM6IGlkZW50LmM6MzcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBlbWFpbCBhZGRyZXNzIChnb3QgJyVzJykiCittc2dzdHIgIiIKKyJuw6NvIMOpIHBvc3PDrXZlbCBkZXRldGFyIGF1dG9tYXRpY2FtZW50ZSBlbmRlcmXDp28gZGUgZS1tYWlsIChvYnRldmUtc2UgJyVzJykiCisKKyM6IGlkZW50LmM6MzgyCittc2dpZCAibm8gbmFtZSB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICJuZW5odW0gbm9tZSBpbmRpY2FkbyBlIGEgZGV0ZcOnw6NvIGF1dG9tw6F0aWNhIGVzdMOhIGRlc2F0aXZhZGEiCisKKyM6IGlkZW50LmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBuYW1lIChnb3QgJyVzJykiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGRldGV0YXIgYXV0b21hdGljYW1lbnRlIG8gbm9tZSAob2J0ZXZlLXNlICclcycpIgorCisjOiBpZGVudC5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBpZGVudCBuYW1lIChmb3IgPCVzPikgbm90IGFsbG93ZWQiCittc2dzdHIgIm5vbWUgZGUgaWRlbnRpZmljYcOnw6NvIHZhemlvIChkZSA8JXM+KSBuw6NvIMOpIHBlcm1pdGlkbyIKKworIzogaWRlbnQuYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZSBjb25zaXN0cyBvbmx5IG9mIGRpc2FsbG93ZWQgY2hhcmFjdGVyczogJXMiCittc2dzdHIgIm5vbWUgY29uc2lzdGUgYXBlbmFzIGRlIGNhcmFjdGVyZXMgbsOjbyBwZXJtaXRpZG9zOiAlcyIKKworIzogaWRlbnQuYzo0MTcgYnVpbHRpbi9jb21taXQuYzo2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkYXRlIGZvcm1hdDogJXMiCittc2dzdHIgImZvcm1hdG8gZGUgZGF0YSBpbnbDoWxpZG86ICVzIgorCisjOiBsb2NrZmlsZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuIgorIlxuIgorIkFub3RoZXIgZ2l0IHByb2Nlc3Mgc2VlbXMgdG8gYmUgcnVubmluZyBpbiB0aGlzIHJlcG9zaXRvcnksIGUuZy5cbiIKKyJhbiBlZGl0b3Igb3BlbmVkIGJ5ICdnaXQgY29tbWl0Jy4gUGxlYXNlIG1ha2Ugc3VyZSBhbGwgcHJvY2Vzc2VzXG4iCisiYXJlIHRlcm1pbmF0ZWQgdGhlbiB0cnkgYWdhaW4uIElmIGl0IHN0aWxsIGZhaWxzLCBhIGdpdCBwcm9jZXNzXG4iCisibWF5IGhhdmUgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllcjpcbiIKKyJyZW1vdmUgdGhlIGZpbGUgbWFudWFsbHkgdG8gY29udGludWUuIgorbXNnc3RyICIiCisiTsOjbyDDqSBwb3Nzw612ZWwgY3JpYXIgJyVzLmxvY2snOiAlcy5cbiIKKyJcbiIKKyJPdXRybyBwcm9jZXNzbyBnaXQgcGFyZWNlIGVzdGFyIGEgZXhlY3V0YXIgbmVzdGUgcmVwb3NpdMOzcmlvLCBlLmcuXG4iCisidW0gZWRpdG9yIGFiZXJ0byBwb3IgJ2dpdCBjb21taXQnLiBDZXJ0aWZpcXVlLXNlIHF1ZSB0b2RvcyBvcyBwcm9jZXNzb3NcbiIKKyJ0ZXJtaW5hcmFtIGUgdGVudGUgZGUgbm92by4gU2UgYWluZGEgYXNzaW0gZmFsaGFyLCB1bSBwcm9jZXNzbyBnaXRcbiIKKyJwb2RlIHRlciBmYWxoYWRvIGFudGVyaW9ybWVudGUgbm8gcmVwb3NpdMOzcmlvOlxuIgorInJlbW92YSBvIGZpY2hlaXJvIG1hbnVhbG1lbnRlIHBhcmEgY29udGludWFyLiIKKworIzogbG9ja2ZpbGUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzIgorbXNnc3RyICJOw6NvIMOpIGZvaSBwb3Nzw612ZWwgY3JpYXIgJyVzLmxvY2snOiAlcyIKKworIzogbWVyZ2UuYzo0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAiZmFsaGEgYW8gbGVyIGEgY2FjaGUiCisKKyM6IG1lcmdlLmM6OTYgYnVpbHRpbi9hbS5jOjIwMDAgYnVpbHRpbi9hbS5jOjIwMzUgYnVpbHRpbi9jaGVja291dC5jOjM5MworIzogYnVpbHRpbi9jaGVja291dC5jOjYwNyBidWlsdGluL2Nsb25lLmM6NzQ5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZXNjcmV2ZXIgbm92byBmaWNoZWlybyBkZSDDrW5kaWNlIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDkKK21zZ2lkICIoYmFkIGNvbW1pdClcbiIKK21zZ3N0ciAiKGNvbW1pdCBpbmNvcnJldG8pXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIzMSBtZXJnZS1yZWN1cnNpdmUuYzoyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5mb19jYWNoZSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiYWRkaW5mb19jYWNoZSBmYWxob3Ugbm8gY2FtaW5obyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDMKK21zZ2lkICJlcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiZXJybyBhbyBjb25zdHJ1aXIgw6Fydm9yZXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjcyNworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIHBhdGggJyVzJyVzIgorbXNnc3RyICJmYWxoYSBhbyBjcmlhciBvIGNhbWluaG8gJyVzJyVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAiQSByZW1vdmVyICVzIHBhcmEgY3JpYXIgZXNwYcOnbyBwYXJhIG8gc3ViZGlyZXTDs3Jpb1xuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NTIgbWVyZ2UtcmVjdXJzaXZlLmM6NzcxCittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAiOiB0YWx2ZXogdW0gY29uZmxpdG8gRC9GPyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzYxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJyVzJyIKK21zZ3N0ciAicGVyZGEgZGUgZmljaGVpcm8gbsOjbyBjb250cm9sYWRvIGVtICclcycgcmVjdXNhZGEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjgwMyBidWlsdGluL2NhdC1maWxlLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGxlciBvIG9iamV0byAlczogJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciCittc2dzdHIgImJsb2IgcGFyYSAlcyAnJXMnIGVzcGVyYWRvIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJzogJXMiCittc2dzdHIgImZhbGhhIGFvIGFicmlyICclcyc6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJzogJXMiCittc2dzdHIgImZhbGhhIGFvIGNyaWFyIGEgbGlnYcOnw6NvIHNpbWLDs2xpY2EgJyVzJzogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIgorbXNnc3RyICJuw6NvIHNlaSBvIHF1ZSBmYXplciBjb20gJTA2byAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5ODUKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAiRmFsaGEgYW8gZXhlY3V0YXIgaW50ZWdyYcOnw6NvIGludGVybmEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBhZGljaW9uYXIgJXMgw6AgYmFzZSBkZSBkYWRvcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTA5MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisiQ09ORkxJVE8gKCVzL2VsaW1pbmFyKTogJXMgZWxpbWluYWRvIGVtICVzIGUgJXMgZW0gJXMuIFZlcnPDo28gZGUgJXMgZGUgJXMgIgorImRlaXhhZGEgbmEgw6Fydm9yZS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlLiIKK21zZ3N0ciAiIgorIkNPTkZMSVRPICglcy9lbGltaW5hcik6ICVzIGVsaW1pbmFkbyBlbSAlcyBlICVzIHBhcmEgJXMgZW0gJXMuIFZlcnPDo28gZGUgJXMgIgorImRlICVzIGRlaXhhZGEgbmEgw6Fydm9yZS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIkNPTkZMSVRPICglcy9lbGltaW5hcik6ICVzIGVsaW1pbmFkbyBlbSAlcyBlICVzIGVtICVzLiBWZXJzw6NvIGRlICVzIGRlICVzICIKKyJkZWl4YWRhIG5hIMOhcnZvcmUgZW0gJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJDT05GTElUTyAoJXMvZWxpbWluYXIpOiAlcyBlbGltaW5hZG8gZW0gJXMgZSAlcyBwYXJhICVzIGVtICVzLiBWZXJzw6NvIGRlICVzICIKKyJkZSAlcyBkZWl4YWRhIG5hIMOhcnZvcmUgZW0gJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTQzCittc2dpZCAicmVuYW1lIgorbXNnc3RyICJtdWRhciBub21lIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTQzCittc2dpZCAicmVuYW1lZCIKK21zZ3N0ciAibm9tZSBtdWRhZG8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVzIMOpIHVtIGRpcmV0w7NyaW8gZW0gJXMgYWRpY2lvbmFuZG8gJXMgbm8gc2V1IGx1Z2FyIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBcIiVzXCItPlwiJXNcIiBpbiBicmFuY2ggXCIlc1wiIHJlbmFtZSBcIiVzIgorIlwiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCittc2dzdHIgIiIKKyJDT05GTElUTyAobXVkYXIgbm9tZS9tdWRhciBub21lKTogTXVkYXIgbyBub21lIFwiJXNcIi0+XCIlc1wiIG5vIHJhbW8gXCIlc1wiICIKKyJtdWRhciBvIG5vbWUgXCIlc1wiLT5cIiVzXCIgZW0gXCIlc1wiJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMzAKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAocG9yIHJlc29sdmVyKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJDT05GTElUTyAobXVkYXIgbm9tZS9tdWRhciBub21lKTogTXVkYXIgZGUgbm9tZSAlcy0+JXMgZW0gJXMuIE11ZGFyIG8gbm9tZSAiCisiJXMtPiVzIGVtICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzIGFuZCAlcyB0byAlcyBpbnN0ZWFkIgorbXNnc3RyICJBIG11ZGFyIG8gbm9tZSBkZSAlcyBwYXJhICVzIGUgZGUgJXMgcGFyYSAlcywgZW0gYWx0ZXJuYXRpdmEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAlcyBhZGRlZCBpbiAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSVRPIChtdWRhciBub21lL2FkaWNpb25hcik6IE11ZGFyIG8gbm9tZSAlcy0+JXMgZW0gJXMuICVzIGFkaWNpb25hZG8gZW0gIgorIiVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBtZXJnZWQgJXMiCittc2dzdHIgIkEgYWRpY2lvbmFyICVzIGludGVncmFkbyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU1MCBtZXJnZS1yZWN1cnNpdmUuYzoxNzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICJBIGFkaWNpb25hciBjb21vICVzLCBlbSBhbHRlcm5hdGl2YS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIG8gb2JqZXRvICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIgorbXNnc3RyICJvIG9iamV0byAlcyBuw6NvIMOpIHVtIGJsb2IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NzkKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgIm1vZGlmaWNhciIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY3OQorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICJtb2RpZmljYWRvIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjg5Cittc2dpZCAiY29udGVudCIKK21zZ3N0ciAiY29udGXDumRvIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjk2Cittc2dpZCAiYWRkL2FkZCIKK21zZ3N0ciAiYWRpY2lvbmFyL2FkaWNpb25hciIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIiVzIGlnbm9yYWRvIChpbnRlZ3JhZG8gw6kgaWd1YWwgYW8gZXhpc3RlbnRlKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvLW1lcmdpbmcgJXMiCittc2dzdHIgIkEgaW50ZWdyYXIgYXV0b21hdGljYW1lbnRlICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzUwIGdpdC1zdWJtb2R1bGUuc2g6OTQ0Cittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJzdWJtw7NkdWxvIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJDT05GTElUTyAoJXMpOiBjb25mbGl0byBkZSBpbnRlZ3Jhw6fDo28gZW0gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgIkEgcmVtb3ZlciAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg3MQorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICJmaWNoZWlyby9kaXJldMOzcmlvIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODc3Cittc2dpZCAiZGlyZWN0b3J5L2ZpbGUiCittc2dzdHIgImRpcmV0w7NyaW8vZmljaGVpcm8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiBBZGRpbmcgJXMgYXMgJXMiCittc2dzdHIgIiIKKyJDT05GTElUTyAoJXMpOiBIw6EgdW0gZGlyZXTDs3JpbyBkZXNpZ25hZG8gJXMgZW0gJXMuIEEgYWRpY2lvbmFyICVzIGNvbW8gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICJBIGFkaWNpb25hciAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTkyOQorbXNnaWQgIkFscmVhZHkgdXAtdG8tZGF0ZSEiCittc2dzdHIgIkrDoSBlc3TDoSBhdHVhbGl6YWRvISIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTkzOAorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIGludGVncmFyIGFzIMOhcnZvcmVzICVzIGUgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwMjEKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAiQSBpbnRlZ3JhcjoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIKK21zZ2lkX3BsdXJhbCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiCittc2dzdHJbMF0gIiV1IGFudGVjZXNzb3IgY29tdW0gZW5jb250cmFkbzoiCittc2dzdHJbMV0gIiV1IGFudGVjZXNzb3JlcyBjb211bnMgZW5jb250cmFkb3M6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDczCittc2dpZCAibWVyZ2UgcmV0dXJuZWQgbm8gY29tbWl0IgorbXNnc3RyICJhIGludGVncmHDp8OjbyBuw6NvIHJldG9ybm91IG5lbmh1bSBjb21taXQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBvYmpldG8gJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjE1MCBidWlsdGluL21lcmdlLmM6NjQ1IGJ1aWx0aW4vbWVyZ2UuYzo3OTIKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBlc2NyZXZlciBubyDDrW5kaWNlLiIKKworIzogbm90ZXMtbWVyZ2UuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBwcmV2aW91cyBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIHVzZSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHRvICIKKyJjb21taXQvYWJvcnQgdGhlIHByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgbm90ZXMgbWVyZ2UuIgorbXNnc3RyICIiCisiTsOjbyBjb25jbHXDrXUgYSBpbnRlZ3Jhw6fDo28gZGUgbm90YXMgYW50ZXJpb3IgKCVzIGV4aXN0ZSkuXG4iCisiVXNlICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG91ICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcgcGFyYSBzdWJtZXRlci8iCisiYWJvcnRhciBhIGludGVncmHDp8OjbyBhbnRlcmlvciBhbnRlcyBkZSBjb21lw6dhciB1bWEgbm92YSBpbnRlZ3Jhw6fDo28gZGUgbm90YXMuIgorCisjOiBub3Rlcy1tZXJnZS5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuIgorbXNnc3RyICJOw6NvIGNvbmNsdcOtZG8gYSBpbnRlZ3Jhw6fDo28gZGUgaW50ZWdyYcOnw6NvIGRlIG5vdGFzICglcyBwcmVzZW50ZSkuIgorCisjOiBub3Rlcy11dGlscy5jOjQxCittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICIiCisiTsOjbyDDqSBwb3Nzw612ZWwgc3VibWV0ZXIgw6Fydm9yZSBkZSBub3RhcyBuw6NvIGluaWNpYWxpemFkYSBvdSBuw6NvIHJlZmVyZW5jaWFkYSIKKworIzogbm90ZXMtdXRpbHMuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIgorbXNnc3RyICJWYWxvciBkZSBub3Rlcy5yZXdyaXRlTW9kZSBpbmNvcnJldG86ICclcyciCisKKyM6IG5vdGVzLXV0aWxzLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICJSZWVzY3JpdGEgZGUgbm90YXMgZW0gJXMgKGZvcmEgZGUgcmVmcy9ub3Rlcy8pIHJlY3VzYWRhIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIHRoZQorIy4gZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMgaXRzIHZhbHVlCisjOiBub3Rlcy11dGlscy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIlZhbG9yIGluY29ycmV0byBkZSAlczogJyVzJyIKKworIzogb2JqZWN0LmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3Q6ICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBvYmpldG86ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTcyCittc2dpZCAiLi4uIgorbXNnc3RyICIuLi4iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzIgorbXNnc3RyICJ1dGlsaXphw6fDo286ICVzIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uIGhlcmUgc2hvdWxkIGFsaWduIHdpdGggdGhlCisjLiBvbmUgaW4gInVzYWdlOiAlcyIgdHJhbnNsYXRpb24KKyM6IHBhcnNlLW9wdGlvbnMuYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgb3I6ICVzIgorbXNnc3RyICIgICAgICAgIG91OiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjU5NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJXMiCittc2dzdHIgIiAgICAgICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NjMxCittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLU5VTSIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAibm9tZSBkbyBvYmpldG8gbWFsZm9ybWFkbyAnJXMnIgorCisjOiBwYXRoLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZGFyIHBlcm1pc3PDo28gZGUgZXNjcml0YSBhbyBncnVwbyBhICVzIgorCisjOiBwYXRoc3BlYy5jOjEyNQorbXNnaWQgIkVzY2FwZSBjaGFyYWN0ZXIgJ1xcJyBub3QgYWxsb3dlZCBhcyBsYXN0IGNoYXJhY3RlciBpbiBhdHRyIHZhbHVlIgorbXNnc3RyICIiCisiTyBjYXLDoWN0ZXIgZGUgZXNjYXBlICdcXCcgbsOjbyBwb2RlIHNlciB1c2FkbyBjb21vIMO6bHRpbW8gY2Fyw6FjdGVyIG5vIHZhbG9yICIKKyJkZSBhdHRyIgorCisjOiBwYXRoc3BlYy5jOjE0MworbXNnaWQgIk9ubHkgb25lICdhdHRyOicgc3BlY2lmaWNhdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiU8OzIHNlIHBvZGUgZXNwZWNpZmljYXIgdW0gJ2F0dHI6Jy4iCisKKyM6IHBhdGhzcGVjLmM6MTQ2Cittc2dpZCAiYXR0ciBzcGVjIG11c3Qgbm90IGJlIGVtcHR5IgorbXNnc3RyICJlc3BlY2lmaWNhZG9yIGF0dHIgbsOjbyBwb2RlIGVzdGFyIHZhemlvIgorCisjOiBwYXRoc3BlYy5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSBuYW1lICVzIgorbXNnc3RyICJub21lIGRlIGF0cmlidXRvIGludsOhbGlkbyAlcyIKKworIzogcGF0aHNwZWMuYzoyNTQKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisiYXMgZGVmaW5pw6fDtWVzIGdsb2JhaXMgJ2dsb2InIGUgJ25vZ2xvYicgZGUgZXNwZWNpZmljYWRvciBkZSBjYW1pbmhvICIKKyIocGF0aHNwZWMpIHPDo28gaW5jb21wYXTDrXZlaXMiCisKKyM6IHBhdGhzcGVjLmM6MjYxCittc2dpZCAiIgorImdsb2JhbCAnbGl0ZXJhbCcgcGF0aHNwZWMgc2V0dGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgZ2xvYmFsICIKKyJwYXRoc3BlYyBzZXR0aW5ncyIKK21zZ3N0ciAiIgorImEgZGVmaW5pw6fDo28gZ2xvYmFsIGRlIGVzcGVjaWZpY2Fkb3IgZGUgY2FtaW5obyAnbGl0ZXJhbCcgw6kgaW5jb21wYXTDrXZlbCBjb20gIgorInRvZGFzIGFzIG91dHJhcyBkZWZpbmnDp8O1ZXMgZ2xvYmFpcyBkZSBlc3BlY2lmaWNhZG9yIGRlIGNhbWluaG8gKHBhdGhzcGVjKSIKKworIzogcGF0aHNwZWMuYzozMDEKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgcGF0aHNwZWMgbWFnaWMgJ3ByZWZpeCciCittc2dzdHIgInBhcsOibWV0cm8gaW52w6FsaWRvIG5hIG3DoWdpY2EgJ3ByZWZpeCcgZG8gZXNwZWNpZmljYWRvciBkZSBjYW1pbmhvIgorCisjOiBwYXRoc3BlYy5jOjMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIgorbXNnc3RyICJNw6FnaWNhIGRvIGVzcGVjaWZpY2Fkb3IgZGUgY2FtaW5obyAnJS4qcycgaW52w6FsaWRhIGVtICclcyciCisKKyM6IHBhdGhzcGVjLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAiRmFsdGEgdW0gJyknIG5vIGZpbmFsIGRhIG3DoWdpY2EgZG8gZXNwZWNpZmljYWRvciBkZSBjYW1pbmhvIGVtICclcyciCisKKyM6IHBhdGhzcGVjLmM6MzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaW1wbGVtZW50ZWQgcGF0aHNwZWMgbWFnaWMgJyVjJyBpbiAnJXMnIgorbXNnc3RyICJNw6FnaWNhIGRlIGVzcGVjaWZpY2Fkb3IgZGUgY2FtaW5obyAnJWMnIGVtICclcycgbsOjbyBpbXBsZW1lbnRhZGEiCisKKyM6IHBhdGhzcGVjLmM6NDIxIHBhdGhzcGVjLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAiTyBjYW1pbmhvICclcycgZXN0w6EgZGVudHJvIGRvIHN1Ym3Ds2R1bG8gJyUuKnMnIgorCisjOiBwYXRoc3BlYy5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJ2xpdGVyYWwnIGFuZCAnZ2xvYicgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiJXM6ICdsaXRlcmFsJyBlICdnbG9iJyBzw6NvIGluY29tcGF0w612ZWlzIgorCisjOiBwYXRoc3BlYy5jOjQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzOiAnJXMnIGVzdMOhIGZvcmEgZG8gcmVwb3NpdMOzcmlvIgorCisjOiBwYXRoc3BlYy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIChtbmVtb25pYzogJyVjJykiCittc2dzdHIgIiclcycgKG1uZW3Ds25pY2E6ICclYycpIgorCisjOiBwYXRoc3BlYy5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIiCisiJXM6IG3DoWdpY2EgZGUgZXNwZWNpZmljYWRvciBkZSBjYW1pbmhvIG7Do28gc3Vwb3J0YWRhIHBvciBlc3RlIGNvbWFuZG86ICVzIgorCisjOiBwYXRoc3BlYy5jOjY0NAorbXNnaWQgIiIKKyJlbXB0eSBzdHJpbmdzIGFzIHBhdGhzcGVjcyB3aWxsIGJlIG1hZGUgaW52YWxpZCBpbiB1cGNvbWluZyByZWxlYXNlcy4gcGxlYXNlICIKKyJ1c2UgLiBpbnN0ZWFkIGlmIHlvdSBtZWFudCB0byBtYXRjaCBhbGwgcGF0aHMiCittc2dzdHIgIiIKKyJjYWRlaWFzIGRlIGNhcmFjdGVyZXMgdmF6aWFzIGNvbW8gZXNwZWNpZmljYWRvcmVzIGRlIGNhbWluaG8gdG9ybmFyLXNlLcOjbyAiCisiaW52w6FsaWRhcyBuYXMgcHLDs3hpbWFzIHZlcnPDtWVzLiBVc2UgLiBwYXJhIGNvcnJlc3BvbmRlciBhIHRvZG9zIG9zIGNhbWluaG9zIgorCisjOiBwYXRoc3BlYy5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIm8gZXNwZWNpZmljYWRvciBkZSBjYW1pbmhvICclcycgw6kgaW5kaWNhZG8gcG9yIHVtYSBsaWdhw6fDo28gc2ltYsOzbGljYSIKKworIzogcHJldHR5LmM6OTgyCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIC0tcHJldHR5IGZvcm1hdCIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIG8gZm9ybWF0byBkZSAtLXByZXR0eSIKKworIzogcmVhZC1jYWNoZS5jOjEzMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorImluZGV4LnZlcnNpb24gZGVmaW5pZG8sIG1hcyBjb20gdmFsb3IgaW52w6FsaWRvLlxuIgorIkEgdXNhciBhIHZlcnPDo28gJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxMzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisiR0lUX0lOREVYX1ZFUlNJT04gZGVmaW5pZG8sIG1hcyBjb20gdmFsb3IgaW52w6FsaWRvLlxuIgorIkEgdXNhciBhIHZlcnPDo28gJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICclcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIG9idGVyIHN0YXQgZGUgJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjIyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gZ2l0IGRpcjogJXMiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGRpcmV0w7NyaW8gZ2l0OiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVubGluazogJXMiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGludm9jYXIgdW5saW5rOiAlcyIKKworIzogcmVmcy5jOjYxOSBidWlsdGluL21lcmdlLmM6ODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciAnJXMnIHBhcmEgZXNjcml0YSIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZSAlczogJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBlbGltaW5hciBhIHJlZmVyw6puY2lhICVzOiAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZXM6ICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZWxpbWluYXIgYXMgcmVmZXLDqm5jaWFzOiAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MjU0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIHJlZmVyZW5jZSAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGVsaW1pbmFyIGEgcmVmZXLDqm5jaWEgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNSB3dC1zdGF0dXMuYzoxNzgwCittc2dpZCAiZ29uZSIKK21zZ3N0ciAiZGVzYXBhcmVjaWRvIgorCisjOiByZWYtZmlsdGVyLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQiCittc2dzdHIgIsOgIGZyZW50ZSAlZCIKKworIzogcmVmLWZpbHRlci5jOjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImJlaGluZCAlZCIKK21zZ3N0ciAiYXRyw6FzICVkIgorCisjOiByZWYtZmlsdGVyLmM6MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQsIGJlaGluZCAlZCIKK21zZ3N0ciAiw6AgZnJlbnRlICVkLCBhdHLDoXMgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShjb2xvcjo8Y29sb3I+KSIKK21zZ3N0ciAiZm9ybWF0byBlc3BlcmFkbzogJSUoY29sb3I6PGNvcj4pIgorCisjOiByZWYtZmlsdGVyLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBjb2xvcjogJSUoY29sb3I6JXMpIgorbXNnc3RyICJjb3IgbsOjbyByZWNvbmhlY2lkYTogJSUoY29sb3I6JXMpIgorCisjOiByZWYtZmlsdGVyLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpsc3RyaXA9JXMiCittc2dzdHIgInZhbG9yIGludGVpcm8gZXNwZXJhZG8gcmVmbmFtZTpsc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOnJzdHJpcD0lcyIKK21zZ3N0ciAiVmFsb3IgaW50ZWlybyBlc3BlcmFkbyByZWZuYW1lOnJzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoJXMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnRvIGRlICUlKCVzKSBuw6NvIHJlY29uaGVjaWRvOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlJShib2R5KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoYm9keSkgbsOjbyBsZXZhIGFyZ3VtZW50b3MiCisKKyM6IHJlZi1maWx0ZXIuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoc3ViamVjdCkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKHN1YmplY3QpIG7Do28gbGV2YSBhcmd1bWVudG9zIgorCisjOiByZWYtZmlsdGVyLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKHRyYWlsZXJzKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUodHJhaWxlcnMpIG7Do28gbGV2YSBhcmd1bWVudG9zIgorCisjOiByZWYtZmlsdGVyLmM6MTk5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIGNvbnRlbnRzOmxpbmVzPSVzIgorbXNnc3RyICJ2YWxvciBwb3NpdGl2byBlc3BlcmFkbyBjb250ZW50czpsaW5lcz0lcyIKKworIzogcmVmLWZpbHRlci5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoY29udGVudHMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnRvIGRlICUlKGNvbnRlbnRzKSBuw6NvIHJlY29uaGVjaWRvOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBvYmplY3RuYW1lOnNob3J0PSVzIgorbXNnc3RyICJ2YWxvciBwb3NpdGl2byBlc3BlcmFkbyBvYmplY3RuYW1lOnNob3J0PSVzIgorCisjOiByZWYtZmlsdGVyLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RuYW1lKSBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50byBkZSAlJShvYmplY3RuYW1lKSBuw6NvIHJlY29uaGVjaWRvOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCittc2dzdHIgImZvcm1hdG8gZXNwZXJhZG86ICUlKGFsaWduOjxsYXJndXJhPiw8cG9zacOnw6NvPikiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBvc2l0aW9uOiVzIgorbXNnc3RyICJwb3Npw6fDo28gbsOjbyByZWNvbmhlY2lkYTolcyIKKworIzogcmVmLWZpbHRlci5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2lkdGg6JXMiCittc2dzdHIgImxhcmd1cmEgbsOjbyByZWNvbmhlY2lkYTolcyIKKworIzogcmVmLWZpbHRlci5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoYWxpZ24pIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnRvIGRlICUlKGFsaWduKSBuw6NvIHJlY29uaGVjaWRvOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB3aWR0aCBleHBlY3RlZCB3aXRoIHRoZSAlJShhbGlnbikgYXRvbSIKK21zZ3N0ciAibGFyZ3VyYSBwb3NpdGl2YSBlc3BlcmFkYSBjb20gbyDDoXRvbW8gJSUoYWxnbikiCisKKyM6IHJlZi1maWx0ZXIuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGlmKSBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50byBkZSAlJShpZikgbsOjbyByZWNvbmhlY2lkbzogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIm5vbWUgZGUgZmljaGVpcm8gbWFsZm9ybWFkbzogJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjM5NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIm5vbWUgZG8gY2FtcG8gZGVzY29uaGVjaWRvOiAlLipzIgorCisjOiByZWYtZmlsdGVyLmM6NTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoaWYpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0bzogw6F0b21vICUlKGlmKSB1dGlsaXphZG8gc2VtIMOhdG9tbyAlJSh0aGVuKSBjb3JyZXNwb25kZW50ZSIKKworIzogcmVmLWZpbHRlci5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICJmb3JtYXRvOiDDoXRvbW8gJSUodGhlbikgdXRpbGl6YWRvIHNlbSDDoXRvbW8gJSUoaWYpIGNvcnJlc3BvbmRlbnRlIgorCisjOiByZWYtZmlsdGVyLmM6NTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICJmb3JtYXRvOiDDoXRvbW8gJSUodGhlbikgdXRpbGl6YWRvIG1haXMgcXVlIHVtYSB2ZXoiCisKKyM6IHJlZi1maWx0ZXIuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgYWZ0ZXIgJSUoZWxzZSkiCittc2dzdHIgImZvcm1hdG86IMOhdG9tbyAlJSh0aGVuKSB1dGlsaXphZG8gZGVwb2lzIGRlICUlKGVsc2UpIgorCisjOiByZWYtZmlsdGVyLmM6NTkxCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgImZvcm1hdG86IMOhdG9tbyAlJShlbHNlKSB1dGlsaXphZG8gc2VtIMOhdG9tbyAlJShpZikgY29ycmVzcG9uZGVudGUiCisKKyM6IHJlZi1maWx0ZXIuYzo1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgImZvcm1hdG86IMOhdG9tbyAlJShlbHNlKSB1dGlsaXphZG8gc2VtIMOhdG9tbyAlJSh0aGVuKSBjb3JyZXNwb25kZW50ZSIKKworIzogcmVmLWZpbHRlci5jOjU5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAiZm9ybWF0bzogw6F0b21vICUlKGVsc2UpIHV0aWxpemFkbyBtYWlzIHF1ZSB1bWEgdmV6IgorCisjOiByZWYtZmlsdGVyLmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIHVzZWQgd2l0aG91dCBjb3JyZXNwb25kaW5nIGF0b20iCittc2dzdHIgImZvcm1hdG86IMOhdG9tbyAlJShlbmQpIHV0aWxpemFkbyBzZW0gw6F0b21vIGNvcnJlc3BvbmRlbnRlIgorCisjOiByZWYtZmlsdGVyLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmb3JtYXQgc3RyaW5nICVzIgorbXNnc3RyICJjYWRlaWEgbWFsZm9ybWFkYSAlcyIKKworIzogcmVmLWZpbHRlci5jOjEyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiKG5vIGJyYW5jaCwgcmViYXNpbmcgJXMpIgorbXNnc3RyICIobmVuaHVtIHJhbW8sIGEgZWZldHVhciByZWJhc2UgZGUgJXMpIgorCisjOiByZWYtZmlsdGVyLmM6MTI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIobm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcykiCittc2dzdHIgIihuZW5odW0gcmFtbywgYmlzc2Vjw6fDo28gaW5pY2lhZGEgZW0gJXMpIgorCisjLiBUUkFOU0xBVE9SUzogbWFrZSBzdXJlIHRoaXMgbWF0Y2hlcworIy4gIkhFQUQgZGV0YWNoZWQgYXQgIiBpbiB3dC1zdGF0dXMuYworIzogcmVmLWZpbHRlci5jOjEyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKEhFQUQgZGV0YWNoZWQgYXQgJXMpIgorbXNnc3RyICIoSEVBRCBkZXN0YWNhZGEgZW0gJXMpIgorCisjLiBUUkFOU0xBVE9SUzogbWFrZSBzdXJlIHRoaXMgbWF0Y2hlcworIy4gIkhFQUQgZGV0YWNoZWQgZnJvbSAiIGluIHd0LXN0YXR1cy5jCisjOiByZWYtZmlsdGVyLmM6MTI2MQorIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBmcm9tICVzKSIKK21zZ3N0ciAiKEhFQUQgZGVzdGFjYWRhIGRlICVzKSIKKworIzogcmVmLWZpbHRlci5jOjEyNjUKK21zZ2lkICIobm8gYnJhbmNoKSIKK21zZ3N0ciAiKG5lbmh1bSByYW1vKSIKKworIzogcmVmLWZpbHRlci5jOjE0MjAgcmVmLWZpbHRlci5jOjE0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBvYmplY3QgJXMgZm9yICVzIgorbXNnc3RyICJmYWx0YSBvIG9iamV0byAlcyBkZSAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0MjMgcmVmLWZpbHRlci5jOjE0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWlsZWQgb24gJXMgZm9yICVzIgorbXNnc3RyICJmYWxoYSBhbyBpbnZvY2FyIHBhcnNlX29iamVjdF9idWZmZXIgc29icmUgJXMgZGUgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAib2JqZXRvIG1hbGZvcm1hZG8gZW0gJyVzJyIKKworIzogcmVmLWZpbHRlci5jOjE3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgJXMiCittc2dzdHIgImEgcmVmZXLDqm5jaWEgJXMgY29tIG5vbWUgZGFuaWZpY2FkbyBmb2kgaWdub3JhZGEiCisKKyM6IHJlZi1maWx0ZXIuYzoxNzY0CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGJyb2tlbiByZWYgJXMiCittc2dzdHIgImEgcmVmZXLDqm5jaWEgJXMgZGFuaWZpY2FkYSBmb2kgaWdub3JhZGEiCisKKyM6IHJlZi1maWx0ZXIuYzoyMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIG1pc3NpbmciCittc2dzdHIgImZvcm1hdG86IGZhbHRhIMOhdG9tbyAlJShlbmQpIgorCisjOiByZWYtZmlsdGVyLmM6MjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIm5vbWUgZGUgb2JqZXRvIG1hbGZvcm1hZG8gJXMiCisKKyM6IHJlbW90ZS5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYm90aCAlcyBhbmQgJXMgdG8gJXMiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIG9idGVyICVzIGUgJXMgYW8gbWVzbW8gdGVtcG8gcGFyYSAlcyIKKworIzogcmVtb3RlLmM6NzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHVzdWFsbHkgdHJhY2tzICVzLCBub3QgJXMiCittc2dzdHIgIiVzIGdlcmFsbWVudGUgc2VndWUgJXMsIG7Do28gJXMiCisKKyM6IHJlbW90ZS5jOjc2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiCittc2dzdHIgIiVzIHNlZ3VlICVzIGUgJXMgZW0gc2ltdWx0w6JuZW8iCisKKyM6IHJlbW90ZS5jOjc3MAorbXNnaWQgIkludGVybmFsIGVycm9yIgorbXNnc3RyICJFcnJvIGludGVybm8iCisKKyM6IHJlbW90ZS5jOjE2ODUgcmVtb3RlLmM6MTc4NworbXNnaWQgIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giCittc2dzdHIgIkhFQUQgbsOjbyBhcG9udGEgcGFyYSB1bSByYW1vIgorCisjOiByZW1vdGUuYzoxNjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorbXNnc3RyICJyYW1vIGluZXhpc3RlbnRlOiAnJXMnIgorCisjOiByZW1vdGUuYzoxNjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICJuZW5odW0gcmFtbyBhIG1vbnRhbnRlIGNvbmZpZ3VyYWRvIHBhcmEgbyByYW1vICclcyciCisKKyM6IHJlbW90ZS5jOjE3MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJvIHJhbW8gYSBtb250YW50ZSAnJXMnIG7Do28gZXN0w6EgZ3VhcmRhZG8gY29tbyB1bSByYW1vIGRlIG1vbml0b3JpemHDp8OjbyByZW1vdG8iCisKKyM6IHJlbW90ZS5jOjE3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJvIGRlc3Rpbm8gZGUgcHVibGljYcOnw6NvICclcycgbm8gcmVtb3RvICclcycgbsOjbyDDqSBzZWd1aWRvIHBvciBuZW5odW0gcmFtbyAiCisibG9jYWwiCisKKyM6IHJlbW90ZS5jOjE3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgaGFzIG5vIHJlbW90ZSBmb3IgcHVzaGluZyIKK21zZ3N0ciAibyByYW1vICclcycgbsOjbyB0ZW0gbmVuaHVtIHJlbW90byBwYXJhIHB1YmxpY2FyIgorCisjOiByZW1vdGUuYzoxNzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggcmVmc3BlY3MgZm9yICclcycgZG8gbm90IGluY2x1ZGUgJyVzJyIKK21zZ3N0ciAiIgorIiclMiRzJyBuw6NvIGZheiBwYXJ0ZSBkb3MgZXNwZWNpZmljYWRvcmVzIGRlIHJlZmVyw6puY2lhIGRlICclMSRzJyBwYXJhICIKKyJwdWJsaWNhw6fDo28iCisKKyM6IHJlbW90ZS5jOjE3NTQKK21zZ2lkICJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiCittc2dzdHIgInB1YmxpY2HDp8OjbyBzZW0gZGVzdGlubyAocHVzaC5kZWZhdWx0IMOpICdub3RoaW5nJykiCisKKyM6IHJlbW90ZS5jOjE3NzYKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSAnc2ltcGxlJyBwdXNoIHRvIGEgc2luZ2xlIGRlc3RpbmF0aW9uIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCByZXNvbHZlciBhIHB1YmxpY2HDp8OjbyAnc2ltcGxlJyBudW0gw7puaWNvIGRlc3Rpbm8iCisKKyM6IHJlbW90ZS5jOjIwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICJBIGJhc2UgZG8gc2V1IHJhbW8gw6kgJyVzJywgbWFzIG8gcmFtbyBhIG1vbnRhbnRlIGRlc2FwYXJlY2V1LlxuIgorCisjOiByZW1vdGUuYzoyMDg1Cittc2dpZCAiICAodXNlIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgdG8gZml4dXApXG4iCittc2dzdHIgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHBhcmEgY29ycmlnaXIpXG4iCisKKyM6IHJlbW90ZS5jOjIwODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAtdG8tZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgIk8gc2V1IHJhbW8gZXN0w6EgYXR1YWxpemFkbyBjb20gJyVzJy5cbiIKKworIzogcmVtb3RlLmM6MjA5MgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICJPIHNldSByYW1vIGVzdMOhIMOgIGZyZW50ZSBkZSAnJXMnIHBvciAlZCBjb21taXQuXG4iCittc2dzdHJbMV0gIk8gc2V1IHJhbW8gZXN0w6Egw6AgZnJlbnRlIGRlICclcycgcG9yICVkIGNvbW1pdHMuXG4iCisKKyM6IHJlbW90ZS5jOjIwOTgKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIgorbXNnc3RyICIgICh1c2UgXCJnaXQgcHVzaFwiIHBhcmEgcHVibGljYXIgb3MgY29tbWl0cyBsb2NhaXMpXG4iCisKKyM6IHJlbW90ZS5jOjIxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAiIgorIk8gc2V1IHJhbW8gZXN0w6EgYXRyw6FzIGRlICclcycgcG9yICVkIGNvbW1pdCwgcG9kZW5kbyBzZXIgYXR1YWxpemFkbyBjb20gIgorImF2YW7Dp28gcsOhcGlkby5cbiIKK21zZ3N0clsxXSAiIgorIk8gc2V1IHJhbW8gZXN0w6EgYXRyw6FzIGRlICclcycgcG9yICVkIGNvbW1pdHMsIHBvZGVuZG8gc2VyIGF0dWFsaXphZG8gY29tICIKKyJhdmFuw6dvIHLDoXBpZG8uXG4iCisKKyM6IHJlbW90ZS5jOjIxMDkKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIKK21zZ3N0ciAiICAodXNlIFwiZ2l0IHB1bGxcIiBwYXJhIGF0dWFsaXphciBvIHNldSByYW1vIGxvY2FsKVxuIgorCisjOiByZW1vdGUuYzoyMTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ3N0clswXSAiIgorIk8gc2V1IHJhbW8gZSAnJXMnIGRpdmVyZ2lyYW0sXG4iCisidGVuZG8gY2FkYSB1bSAlZCBlICVkIGNvbW1pdCBkaWZlcmVudGUsIHJlc3BldGl2YW1lbnRlLlxuIgorbXNnc3RyWzFdICIiCisiTyBzZXUgcmFtbyBlICclcycgZGl2ZXJnaXJhbSxcbiIKKyJ0ZW5kbyBjYWRhIHVtICVkIGUgJWQgY29tbWl0cyBkaWZlcmVudGVzLCByZXNwZXRpdmFtZW50ZS5cbiIKKworIzogcmVtb3RlLmM6MjEyMgorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycylcbiIKK21zZ3N0ciAiICAodXNlIFwiZ2l0IHB1bGxcIiBwYXJhIGludGVncmFyIG8gcmFtbyByZW1vdG8gbm8gc2V1IHJhbW8pXG4iCisKKyM6IHJldmlzaW9uLmM6MjE1OAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgIm8gcmFtbyBhdHVhbCBwYXJlY2UgZXN0YXIgZGFuaWZpY2FkbyIKKworIzogcmV2aXNpb24uYzoyMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIKK21zZ3N0ciAibyByYW1vIGF0dWFsICclcycgYWluZGEgbsOjbyBjb250w6ltIG5lbmh1bSBjb21taXQiCisKKyM6IHJldmlzaW9uLmM6MjM1NQorbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnc3RyICItLWZpcnN0LXBhcmVudCDDqSBpbmNvbXBhdMOtdmVsIGNvbSAtLWJpc2VjdCIKKworIzogcnVuLWNvbW1hbmQuYzoxMjUKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIGFicmlyIC9kZXYvbnVsbCIKKworIzogcnVuLWNvbW1hbmQuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwMiglZCwlZCkgZmFpbGVkIgorbXNnc3RyICJkdXAyKCVkLCVkKSBmYWxob3UiCisKKyM6IHNlbmQtcGFjay5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgcmVtb3RlIHVucGFjayBzdGF0dXM6ICVzIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhbmFsaXNhciBzdGF0dXMgZGUgZGVzY29tcGFjdGHDp8OjbyByZW1vdGE6ICVzIgorCisjOiBzZW5kLXBhY2suYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIHVucGFjayBmYWlsZWQ6ICVzIgorbXNnc3RyICJkZXNjb21wYWN0YcOnw6NvIHJlbW90YSBmYWxob3U6ICVzIgorCisjOiBzZW5kLXBhY2suYzozMTUKK21zZ2lkICJmYWlsZWQgdG8gc2lnbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSIKK21zZ3N0ciAiZmFsaGEgYW8gYXNzaW5hciBvIGNlcnRpZmljYWRvIGRlIHB1YmxpY2HDp8OjbyIKKworIzogc2VuZC1wYWNrLmM6NDI4Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCBwdXNoIgorbXNnc3RyICJvIHJlY2V0b3IgbsOjbyBzdXBvcnRhIHB1YmxpY2HDp8OjbyBjb20gLS1zaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQzMAorbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLSIKKyJzaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorImNlcnRpZmljYWRvIGRlIHB1YmxpY2HDp8OjbyBuw6NvIGVudmlhZG8gdW1hIHZleiBxdWUgbyByZWNldG9yIG7Do28gc3Vwb3J0YSAiCisicHVibGljYcOnw6NvIGNvbSAtLXNpZ25lZCIKKworIzogc2VuZC1wYWNrLmM6NDQyCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyBwdXNoIgorbXNnc3RyICJvIHJlY2V0b3IgbsOjbyBzdXBvcnRhIHB1YmxpY2HDp8OjbyBjb20gLS1hdG9taWMiCisKKyM6IHNlbmQtcGFjay5jOjQ0NworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgcHVzaCBvcHRpb25zIgorbXNnc3RyICJvIHJlY2V0b3IgbsOjbyBzdXBvcnRhIG9ww6fDtWVzIGRlIHB1YmxpY2HDp8OjbyIKKworIzogc2VxdWVuY2VyLmM6MjE1Cittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICJyZXZlcnRlciIKKworIzogc2VxdWVuY2VyLmM6MjE3Cittc2dpZCAiY2hlcnJ5LXBpY2siCittc2dzdHIgImNoZXJyeS1waWNrIgorCisjOiBzZXF1ZW5jZXIuYzoyMTkKK21zZ2lkICJyZWJhc2UgLWkiCittc2dzdHIgInJlYmFzZSAtaSIKKworIzogc2VxdWVuY2VyLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gYWN0aW9uOiAlZCIKK21zZ3N0ciAiQcOnw6NvIGRlc2NvbmhlY2lkYTogJWQiCisKKyM6IHNlcXVlbmNlci5jOjI3OAorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisiZGVwb2lzIGRlIHJlc29sdmVyIG9zIGNvbmZsaXRvcywgbWFycXVlIG9zIGNhbWluaG9zIGNvcnJpZ2lkb3NcbiIKKyJjb20gJ2dpdCBhZGQgPGNhbWluaG9zPicgb3UgJ2dpdCBybSA8Y2FtaW5ob3M+JyIKKworIzogc2VxdWVuY2VyLmM6MjgxCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKyJkZXBvaXMgZGUgcmVzb2x2ZXIgb3MgY29uZmxpdG9zLCBtYXJxdWUgb3MgY2FtaW5ob3MgY29ycmlnaWRvc1xuIgorImNvbSAnZ2l0IGFkZCA8Y2FtaW5ob3M+JyBvdSAnZ2l0IHJtIDxjYW1pbmhvcz4nXG4iCisiZSBzdWJtZXRhIG8gcmVzdWx0YWRvIGNvbSAnZ2l0IGNvbW1pdCciCisKKyM6IHNlcXVlbmNlci5jOjI5NCBzZXF1ZW5jZXIuYzoxNjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb2NrICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBibG9xdWVhciAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyOTcgc2VxdWVuY2VyLmM6MTU1MyBzZXF1ZW5jZXIuYzoxNjgwIHNlcXVlbmNlci5jOjE2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlciBlbSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGVvbCB0byAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZXNjcmV2ZXIgZmltIGRlIGxpbmhhIGVtICclcyciCisKKyM6IHNlcXVlbmNlci5jOjMwNSBzZXF1ZW5jZXIuYzoxNTU4IHNlcXVlbmNlci5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcycuIgorbXNnc3RyICJmYWxoYSBhbyBmaW5hbGl6YXIgJyVzJy4iCisKKyM6IHNlcXVlbmNlci5jOjMyOSBzZXF1ZW5jZXIuYzo4MTQgc2VxdWVuY2VyLmM6MTU3OSBidWlsdGluL2FtLmM6MjU5CisjOiBidWlsdGluL2NvbW1pdC5jOjc0OSBidWlsdGluL21lcmdlLmM6MTAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyICclcyciCisKKyM6IHNlcXVlbmNlci5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXMuIgorbXNnc3RyICJhcyBzdWFzIGFsdGVyYcOnw7VlcyBsb2NhaXMgc2Vyw6NvIHN1YnN0aXR1w61kYXMgYW8gJXMuIgorCisjOiBzZXF1ZW5jZXIuYzozNTkKK21zZ2lkICJjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iCittc2dzdHIgInN1Ym1ldGEgb3UgZXNjb25kYSBhcyBzdWFzIGFsdGVyYcOnw7VlcyBwYXJhIGNvbnRpbnVhci4iCisKKyM6IHNlcXVlbmNlci5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFzdC1mb3J3YXJkIgorbXNnc3RyICIlczogYXZhbsOnbyByw6FwaWRvIgorCisjLiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiwgImNoZXJyeS1waWNrIiBvcgorIy4gKiAicmViYXNlIC1pIi4KKyMuCisjOiBzZXF1ZW5jZXIuYzo0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IE7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlciBub3ZvIGZpY2hlaXJvIGRlIMOtbmRpY2UiCisKKyM6IHNlcXVlbmNlci5jOjQ4OQorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0XG4iCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCByZXNvbHZlciBvIGNvbW1pdCBIRUFEXG4iCisKKyM6IHNlcXVlbmNlci5jOjUwOQorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZVxuIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYXR1YWxpemFyIGEgw6Fydm9yZSBkZSBjYWNoZVxuIgorCisjOiBzZXF1ZW5jZXIuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInlvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmUgc3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorInRlbSBhbHRlcmHDp8O1ZXMgcHJlcGFyYWRhcyBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvXG4iCisiU2UgdGVuY2lvbmEgZXNtYWdhciBlc3RhcyBhbHRlcmHDp8O1ZXMgbm8gY29tbWl0IGFudGVyaW9yLCBleGVjdXRlOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiU2UgdGVuY2lvbmEgcMO0LWxhcyBudW0gbm92byBjb21taXQsIGV4ZWN1dGU6XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiRW0gYW1ib3Mgb3MgY2Fzb3MsIHF1YW5kbyBlc3RpdmVyIHByb250bywgY29udGludWUgY29tOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzXG4iCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhbmFsaXNhciBvIGNvbW1pdCAlc1xuIgorCisjOiBzZXF1ZW5jZXIuYzo2OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXNcbiIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIG8gY29tbWl0IHBhaSAlc1xuIgorCisjOiBzZXF1ZW5jZXIuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuZXhwZWN0ZWQgMXN0IGxpbmUgb2Ygc3F1YXNoIG1lc3NhZ2U6XG4iCisiXG4iCisiXHQlLipzIgorbXNnc3RyICIiCisiMcKqIGxpbmhhIGluZXNwZXJhZGEgZGEgbWVuc2FnZW0gZGUgc3F1YXNoOlxuIgorIlxuIgorIlx0JS4qcyIKKworIzogc2VxdWVuY2VyLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIDFzdCBsaW5lIG9mIHNxdWFzaCBtZXNzYWdlOlxuIgorIlxuIgorIlx0JS4qcyIKK21zZ3N0ciAiIgorIjHCqiBsaW5oYSBpbnbDoWxpZGEgZGEgbWVuc2FnZW0gZGUgc3F1YXNoOlxuIgorIlxuIgorIlx0JS4qcyIKKworIzogc2VxdWVuY2VyLmM6ODMzIHNlcXVlbmNlci5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJWQgY29tbWl0cy4iCittc2dzdHIgIklzdG8gw6kgYSBjb21iaW5hw6fDo28gZGUgJWQgY29tbWl0cy4iCisKKyM6IHNlcXVlbmNlci5jOjg0MgorbXNnaWQgIm5lZWQgYSBIRUFEIHRvIGZpeHVwIgorbXNnc3RyICJuZWNlc3PDoXJpYSB1bWEgSEVBRCBwYXJhIGZpeHVwIgorCisjOiBzZXF1ZW5jZXIuYzo4NDQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjg0NgorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQncyBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciBhIG1lbnNhZ2VtIGRlIGNvbW1pdCBkZSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzo4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGVzY3JldmVyICclcyciCisKKyM6IHNlcXVlbmNlci5jOjg2MSBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo0NDUKK21zZ2lkICJUaGlzIGlzIHRoZSAxc3QgY29tbWl0IG1lc3NhZ2U6IgorbXNnc3RyICJFc3RhIMOpIGEgMcKqIG1lbnNhZ2VtIGRlIGNvbW1pdDoiCisKKyM6IHNlcXVlbmNlci5jOjg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZSBvZiAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciBhIG1lbnNhZ2VtIGRlIGNvbW1pdCBkZSAlcyIKKworIzogc2VxdWVuY2VyLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMlZDoiCittc2dzdHIgIkVzdGEgw6kgYSBtZW5zYWdlbSBkZSBjb21taXQgbsK6JWQ6IgorCisjOiBzZXF1ZW5jZXIuYzo4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJBIG1lbnNhZ2VtIGRlIGNvbW1pdCAjJWQgc2Vyw6EgaWdub3JhZGE6IgorCisjOiBzZXF1ZW5jZXIuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kOiAlZCIKK21zZ3N0ciAiY29tYW5kbyBkZXNjb25oZWNpZG86ICVkIgorCisjOiBzZXF1ZW5jZXIuYzo5NTIKK21zZ2lkICJ5b3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorbXNnc3RyICJmaWNoZWlybyBkZSDDrW5kaWNlIG7Do28gaW50ZWdyYWRvLiIKKworIzogc2VxdWVuY2VyLmM6OTcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAibyBjb21taXQgJXMgw6kgdW1hIGludGVncmHDp8OjbyBtYXMgbsOjbyBmb2kgZm9ybmVjaWRhIGEgb3DDp8OjbyAtbS4iCisKKyM6IHNlcXVlbmNlci5jOjk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIm8gY29tbWl0ICVzIG7Do28gdGVtIG8gcGFpICVkIgorCisjOiBzZXF1ZW5jZXIuYzo5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFpbmxpbmUgd2FzIHNwZWNpZmllZCBidXQgY29tbWl0ICVzIGlzIG5vdCBhIG1lcmdlLiIKK21zZ3N0ciAiIgorImEgbGluaGEgcHJpbmNpcGFsIGZvaSBlc3BlY2lmaWNhZGEgbWFzIG8gY29tbWl0ICVzIG7Do28gw6kgdW1hIGludGVncmHDp8Ojby4iCisKKyM6IHNlcXVlbmNlci5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgb2J0ZXIgYSBtZW5zYWdlbSBkZSBjb21taXQgZGUgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgd2lsbCBiZSBhICJ0b2RvIiBjb21tYW5kIGxpa2UKKyMuICJyZXZlcnQiIG9yICJwaWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEuCisjOiBzZXF1ZW5jZXIuYzoxMDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiJXM6IG7Do28gZm9pIHBvc3PDrXZlbCBhbmFsaXNhciBvIGNvbW1pdCBwYWkgJXMiCisKKyM6IHNlcXVlbmNlci5jOjEwNzEgc2VxdWVuY2VyLmM6MTgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lICclcycgdG8gJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIG11ZGFyIG8gbm9tZSBkZSAnJXMnIHBhcmEgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgcmV2ZXJ0ZXIgJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjExMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYXBsaWNhciAlcy4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6MTE2NQorbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICJvIGNvbmp1bnRvIGRlIGNvbW1pdHMgZXNwZWNpZmljYWRvIGVzdMOhIHZhemlvIgorCisjOiBzZXF1ZW5jZXIuYzoxMTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IGZhbGhhIGFvIGxlciBvIMOtbmRpY2UiCisKKyM6IHNlcXVlbmNlci5jOjExODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczogZmFsaGEgYW8gYXR1YWxpemFyIG8gw61uZGljZSIKKworIzogc2VxdWVuY2VyLmM6MTMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgImxpbmhhICVkIGludsOhbGlkYTogJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MTMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJyVzJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBlZmV0dWFyICclcycgc2VtIHVtIGNvbW1pdCBhbnRlcmlvciIKKworIzogc2VxdWVuY2VyLmM6MTM0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnLiIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciAnJXMnLiIKKworIzogc2VxdWVuY2VyLmM6MTM0OQorbXNnaWQgInBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICJjb3JyaWphLW8gdXNhbmRvICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCisKKyM6IHNlcXVlbmNlci5jOjEzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICclcyciCittc2dzdHIgImZvbGhhIGRlIGluc3RydcOnw7VlcyBpbnV0aWxpesOhdmVsOiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxMzU2Cittc2dpZCAibm8gY29tbWl0cyBwYXJzZWQuIgorbXNnc3RyICJuZW5odW0gY29tbWl0IGFuYWxpc2Fkby4iCisKKyM6IHNlcXVlbmNlci5jOjEzNjcKK21zZ2lkICJjYW5ub3QgY2hlcnJ5LXBpY2sgZHVyaW5nIGEgcmV2ZXJ0LiIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZWZldHVhciBjaGVycnktcGljayBkdXJhbnRlIHVtYSByZXZlcnPDo28uIgorCisjOiBzZXF1ZW5jZXIuYzoxMzY5Cittc2dpZCAiY2Fubm90IHJldmVydCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIHJldmVydGVyIGR1cmFudGUgdW0gY2hlcnJ5LXBpY2suIgorCisjOiBzZXF1ZW5jZXIuYzoxNDMyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAiY2hhdmUgaW52w6FsaWRhOiAlcyIKKworIzogc2VxdWVuY2VyLmM6MTQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgInZhbG9yIGludsOhbGlkbyBkZSAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjE0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICclcyciCittc2dzdHIgImZvbGhhIGRlIG9ww6fDtWVzIG1hbGZvcm1hZGE6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjE1MzAKK21zZ2lkICJhIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJjaGVycnktcGljayBvdSByZXZlcnQgZW0gY3Vyc28iCisKKyM6IHNlcXVlbmNlci5jOjE1MzEKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAtLXF1aXQgfCAtLWFib3J0KVwiIgorbXNnc3RyICJ0ZW50ZSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8LS1hYm9ydClcIiIKKworIzogc2VxdWVuY2VyLmM6MTUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyIG8gZGlyZXTDs3JpbyBkbyBzZXF1ZW5jaWFkb3IgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTU0OAorbXNnaWQgImNvdWxkIG5vdCBsb2NrIEhFQUQiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBibG9xdWVhciBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNjA0IHNlcXVlbmNlci5jOjIxNTkKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIm5lbmh1bSBjaGVycnktcGljayBvdSByZXZlcnQgZW0gY3Vyc28iCisKKyM6IHNlcXVlbmNlci5jOjE2MDYKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCByZXNvbHZlciBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNjA4IHNlcXVlbmNlci5jOjE2NDIKK21zZ2lkICJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYWJvcnRhciB1bSByYW1vIGFpbmRhIG7Do28gY3JpYWRvIgorCisjOiBzZXF1ZW5jZXIuYzoxNjI4IGJ1aWx0aW4vZ3JlcC5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhYnJpciAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxNjMwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyc6ICVzIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBsZXIgJyVzJzogJXMiCisKKyM6IHNlcXVlbmNlci5jOjE2MzEKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICJmaW0gZGUgZmljaGVpcm8gaW5lc3BlcmFkbyIKKworIzogc2VxdWVuY2VyLmM6MTYzNworIywgYy1mb3JtYXQKK21zZ2lkICJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiCittc2dzdHIgIm8gZmljaGVpcm8gSEVBRCBkZSBwcmUtY2hlcnJ5LXBpY2sgJyVzJyBlc3TDoSBjb3Jyb21waWRvIgorCisjOiBzZXF1ZW5jZXIuYzoxNjQ4Cittc2dpZCAiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFELiBOb3QgcmV3aW5kaW5nLCBjaGVjayB5b3VyIEhFQUQhIgorbXNnc3RyICJQYXJlY2UgcXVlIGEgSEVBRCBzZSBtb3ZldS4gTsOjbyByZWN1YW5kbywgdmVyaWZpcXVlIGEgSEVBRC4iCisKKyM6IHNlcXVlbmNlci5jOjE3ODUgc2VxdWVuY2VyLmM6MjA1OAorbXNnaWQgImNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGxlciBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxODI1IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgY29waWFyICclcycgcGFyYSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxODQxCittc2dpZCAiY291bGQgbm90IHJlYWQgaW5kZXgiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgbyDDrW5kaWNlIgorCisjOiBzZXF1ZW5jZXIuYzoxODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gZmFpbGVkOiAlc1xuIgorIiVzWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJhIGV4ZWN1w6fDo28gZmFsaG91OiAlc1xuIgorIiVzUG9kZSBjb3JyaWdpciBvIHByb2JsZW1hIGUgZXhlY3V0YXJcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzoxODUyCittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKK21zZ3N0ciAiZSBmZXogYWx0ZXJhw6fDtWVzIGFvIMOtbmRpY2UgZS9vdSDDoCDDoXJ2b3JlIGRlIHRyYWJhbGhvXG4iCisKKyM6IHNlcXVlbmNlci5jOjE4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICVzXG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiRXhlY3V0YWRvIGNvbSBzdWNlc3NvOiAlc1xuIgorIm1hcyBkZWl4b3UgYWx0ZXJhw6fDtWVzIG5vIMOtbmRpY2UgZS9vdSBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvXG4iCisiU3VibWV0YSBvdSBlc2NvbmRhIGFzIGFsdGVyYcOnw7VlcyBlIGV4ZWN1dGVcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzoxOTEzIGdpdC1yZWJhc2Uuc2g6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAiUGlsaGEgYXV0b23DoXRpY2EgKGF1dG9zdGFzaCkgYXBsaWNhZGEuIgorCisjOiBzZXF1ZW5jZXIuYzoxOTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZ3VhcmRhciAlcyIKKworIzogc2VxdWVuY2VyLmM6MTkyNyBnaXQtcmViYXNlLnNoOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKyJZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLlxuIgorIllvdSBjYW4gcnVuIFwiZ2l0IHN0YXNoIHBvcFwiIG9yIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdCBhbnkgdGltZS5cbiIKK21zZ3N0ciAiIgorIlN1cmdpcmFtIGNvbmZsaXRvcyBhbyBhcGxpY2FyIGEgcGlsaGEgYXV0b23DoXRpY2EgKGF1dG9zdGFzaCkuXG4iCisiQXMgc3VhcyBhbHRlcmHDp8O1ZXMgZXN0w6NvIGd1YXJkYWRhcyBuYSBwaWxoYS5cbiIKKyJQb2RlIGV4ZWN1dGFyIFwiZ2l0IHN0YXNoIHBvcFwiIG91IFwiZ2l0IHN0YXNoIGRyb3BcIiBvcG9ydHVuYW1lbnRlLlxuIgorCisjOiBzZXF1ZW5jZXIuYzoyMDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXMuLi4gICUuKnNcbiIKK21zZ3N0ciAiUGFyb3UgYSAlcy4uLiAgJS4qc1xuIgorCisjOiBzZXF1ZW5jZXIuYzoyMDM2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZCAlZCIKK21zZ3N0ciAiY29tYW5kbyBkZXNjb25oZWNpZG8gJWQiCisKKyM6IHNlcXVlbmNlci5jOjIwNjYKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvcmlnLWhlYWQiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgb3JpZy1oZWFkIgorCisjOiBzZXF1ZW5jZXIuYzoyMDcwCittc2dpZCAiY291bGQgbm90IHJlYWQgJ29udG8nIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyICdvbnRvJyIKKworIzogc2VxdWVuY2VyLmM6MjA3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYXR1YWxpemFyICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgSEVBRCB0byAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGF0dWFsaXphciBIRUFEIHBhcmEgJXMiCisKKyM6IHNlcXVlbmNlci5jOjIxNjgKK21zZ2lkICJjYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgcmViYXNlYXI6IHRlbSBhbHRlcmHDp8O1ZXMgbsOjbyBwcmVwYXJhZGFzLiIKKworIzogc2VxdWVuY2VyLmM6MjE3MworbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIHJlbW92ZXIgQ0hFUlJZX1BJQ0tfSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MjE4MgorbXNnaWQgImNhbm5vdCBhbWVuZCBub24tZXhpc3RpbmcgY29tbWl0IgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBlbWVuZGFyIGNvbW1pdCBuw6NvLWV4aXN0ZW50ZSIKKworIzogc2VxdWVuY2VyLmM6MjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbGU6ICclcyciCittc2dzdHIgImZpY2hlaXJvIGludsOhbGlkbzogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbnRlbnRzOiAnJXMnIgorbXNnc3RyICJjb250ZcO6ZG8gaW52w6FsaWRvOiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyMTg5Cittc2dpZCAiIgorIlxuIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSwgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisiXG4iCisiVGVtIGFsdGVyYcOnw7VlcyBwb3Igc3VibWV0ZXIgbmEgw6Fydm9yZSBkZSB0cmFiYWxoby4gU3VibWV0YS1hcyBwcmltZWlyb1xuIgorImUgZXhlY3V0ZSAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBkZSBub3ZvLiIKKworIzogc2VxdWVuY2VyLmM6MjE5OQorbXNnaWQgImNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgc3VibWV0ZXIgYXMgYWx0ZXJhw6fDtWVzIHByZXBhcmFkYXMuIgorCisjOiBzZXF1ZW5jZXIuYzoyMjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4ndCBjaGVycnktcGljayBhICVzIgorbXNnc3RyICIlczogbsOjbyDDqSBwb3Nzw612ZWwgZWZldHVhciBjaGVycnktcGljayBkZSAlcyIKKworIzogc2VxdWVuY2VyLmM6MjI4MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlczogcmV2aXPDo28gaW5jb3JyZXRhIgorCisjOiBzZXF1ZW5jZXIuYzoyMzE2Cittc2dpZCAiY2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCByZXZlcnRlciBjb21vIGNvbW1pdCBpbmljaWFsIgorCisjOiBzZXR1cC5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IG5vIHN1Y2ggcGF0aCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnZ2l0IDxjb21tYW5kPiAtLSA8cGF0aD4uLi4nIHRvIHNwZWNpZnkgcGF0aHMgdGhhdCBkbyBub3QgZXhpc3QgbG9jYWxseS4iCittc2dzdHIgIiIKKyIlczogbsOjbyBow6EgdGFsIGNhbWluaG8gbmEgw6Fydm9yZSBkZSB0cmFiYWxoby5cbiIKKyJVc2UgJ2dpdCA8Y29tYW5kbz4gLS0gPGNhbWluaG8+Li4uJyBwYXJhIGVzcGVjaWZpY2FyIGNhbWluaG9zIHF1ZSBuw6NvICIKKyJleGlzdGVtIGxvY2FsbWVudGUuIgorCisjOiBzZXR1cC5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyJhcmd1bWVudG8gYW1iw61ndW8gJyVzJzogcmV2aXPDo28gb3UgY2FtaW5obyBkZXNjb25oZWNpZG9zIG7Do28gZW5jb250cmFkbyBuYSAiCisiw6Fydm9yZSBkZSB0cmFiYWxoby5cbiIKKyJVc2UgJy0tJyBwYXJhIHNlcGFyYXIgY2FtaW5ob3MgZGUgcmV2aXPDtWVzLCBhc3NpbTpcbiIKKyInZ2l0IDxjb21hbmRvPiBbPHJldmlzw6NvPi4uLl0gLS0gWzxmaWNoZWlybz4uLi5dJyIKKworIzogc2V0dXAuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorImFyZ3VtZW50byBhbWLDrWd1byAnJXMnOiByZXZpc8OjbyBlIG5vbWUgZGUgZmljaGVpcm9cbiIKKyJVc2UgJy0tJyBwYXJhIHNlcGFyYXIgY2FtaW5ob3MgZGUgcmV2aXPDtWVzLCBhc3NpbTpcbiIKKyInZ2l0IDxjb21hbmRvPiBbPHJldmlzw6NvPi4uLl0gLS0gWzxmaWNoZWlybz4uLi5dJyIKKworIzogc2V0dXAuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgZ2l0IHJlcG8gdmVyc2lvbiA8PSAlZCwgZm91bmQgJWQiCittc2dzdHIgIkVzcGVyYXZhLXNlIHZlcnPDo28gZG8gcmVwb3NpdMOzcmlvIGdpdCA8PSAlZCwgb2J0ZXZlLXNlICVkIgorCisjOiBzZXR1cC5jOjQ4MworbXNnaWQgInVua25vd24gcmVwb3NpdG9yeSBleHRlbnNpb25zIGZvdW5kOiIKK21zZ3N0ciAiZXh0ZW5zw7VlcyBkZSByZXBvc2l0w7NyaW8gZGVzY29uaGVjaWRhcyBlbmNvbnRyYWRhczoiCisKKyM6IHNldHVwLmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIgorbXNnc3RyICJOw6NvIMOpIHVtIHJlcG9zaXTDs3JpbyBnaXQgKG91IHVtIGRvcyBkaXJldMOzcmlvcyBwYWkpOiAlcyIKKworIzogc2V0dXAuYzo3NzggYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY0NgorbXNnaWQgIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCB2b2x0YXIgYW8gZGlyZXTDs3JpbyBkZSB0cmFiYWxobyBhdHVhbCIKKworIzogc2V0dXAuYzoxMDEwCittc2dpZCAiVW5hYmxlIHRvIHJlYWQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgbGVyIG8gZGlyZXTDs3JpbyBkZSB0cmFiYWxobyBhdHVhbCIKKworIzogc2V0dXAuYzoxMDIyIHNldHVwLmM6MTAyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHRvICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIG11ZGFyIHBhcmEgJyVzJyIKKworIzogc2V0dXAuYzoxMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IHBhcmVudCB1cCB0byBtb3VudCBwb2ludCAlcylcbiIKKyJTdG9wcGluZyBhdCBmaWxlc3lzdGVtIGJvdW5kYXJ5IChHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNIG5vdCBzZXQpLiIKK21zZ3N0ciAiIgorIk7Do28gw6kgdW0gcmVwb3NpdMOzcmlvIGdpdCAob3UgdW0gZGlyZXTDs3JpbyBwYWkgYXTDqSBhbyBwb250byBkZSBtb250YWdlbSAlcylcbiIKKyJJbnRlcnJvbXBpZG8gbm8gbGltaXRlIGRvIHNpc3RlbWEgZGUgZmljaGVpcm9zICIKKyIoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBuw6NvIGRlZmluaWRvKS4iCisKKyM6IHNldHVwLmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvYmxlbSB3aXRoIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBmaWxlbW9kZSB2YWx1ZSAoMCUuM28pLlxuIgorIlRoZSBvd25lciBvZiBmaWxlcyBtdXN0IGFsd2F5cyBoYXZlIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorIlByb2JsZW1hIGNvbSBvIHZhbG9yIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBtb2RvIGRlIGZpY2hlaXJvICgwJS4zbykuXG4iCisiTyBkb25vIGRvcyBmaWNoZWlyb3MgdGVtIGRlIHRlciBzZW1wcmUgcGVybWlzc8O1ZXMgZGUgbGVpdHVyYSBlIGVzY3JpdGEuIgorCisjOiBzaGExX2ZpbGUuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJvIGNhbWluaG8gJyVzJyBuw6NvIGV4aXN0ZSIKKworIzogc2hhMV9maWxlLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgYXMgYSBsaW5rZWQgY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIgorbXNnc3RyICIiCisiYWluZGEgbsOjbyDDqSBzdXBvcnRhZGEgYSBmdW5jaW9uYWxpZGFkZSBxdWUgcGVybWl0ZSB0ZXIgbyByZXBvc2l0w7NyaW8gZGUgIgorInJlZmVyw6puY2lhICclcycgY29tbyB1bWEgZXh0cmHDp8OjbyBsaWdhZGEuIgorCisjOiBzaGExX2ZpbGUuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAibyByZXBvc2l0w7NyaW8gZGUgcmVmZXLDqm5jaWEgJyVzJyBuw6NvIMOpIHVtIHJlcG9zaXTDs3JpbyBsb2NhbC4iCisKKyM6IHNoYTFfZmlsZS5jOjU5NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgIm8gcmVwb3NpdMOzcmlvIGRlIHJlZmVyw6puY2lhICclcycgw6kgcmFzbyIKKworIzogc2hhMV9maWxlLmM6NjA1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgZ3JhZnRlZCIKK21zZ3N0ciAibyByZXBvc2l0w7NyaW8gZGUgcmVmZXLDqm5jaWEgJyVzJyBlc3TDoSBlbnhlcnRhZG8iCisKKyM6IHNoYTFfZmlsZS5jOjEyNDUKK21zZ2lkICJvZmZzZXQgYmVmb3JlIGVuZCBvZiBwYWNrZmlsZSAoYnJva2VuIC5pZHg/KSIKK21zZ3N0ciAib2Zmc2V0IGFudGVzIGRvIGZpbSBkbyBmaWNoZWlybyBkZSBwYWNvdGUgKC5pZHggZGFuaWZpY2Fkbz8pIgorCisjOiBzaGExX2ZpbGUuYzoyNzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZWZvcmUgc3RhcnQgb2YgcGFjayBpbmRleCBmb3IgJXMgKGNvcnJ1cHQgaW5kZXg/KSIKK21zZ3N0ciAib2Zmc2V0IGFudGVzIGRvIGluw61jaW8gZG8gw61uZGljZSBkbyBwYWNvdGUgJXMgKMOtbmRpY2UgY29ycm9tcGlkbz8pIgorCisjOiBzaGExX2ZpbGUuYzoyNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZXlvbmQgZW5kIG9mIHBhY2sgaW5kZXggZm9yICVzICh0cnVuY2F0ZWQgaW5kZXg/KSIKK21zZ3N0ciAib2Zmc2V0IGRlcG9pcyBkbyBmaW0gZG8gw61uZGljZSBkbyBwYWNvdGUgJXMgKMOtbmRpY2UgdHJ1bmNhZG8/KSIKKworIzogc2hhMV9uYW1lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IFNIQTEgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJTSEExIGN1cnRvICVzIMOpIGFtYsOtZ3VvIgorCisjOiBzaGExX25hbWUuYzo0MjAKK21zZ2lkICJUaGUgY2FuZGlkYXRlcyBhcmU6IgorbXNnc3RyICJPcyBjYW5kaWRhdG9zIHPDo286IgorCisjOiBzaGExX25hbWUuYzo1ODAKK21zZ2lkICIiCisiR2l0IG5vcm1hbGx5IG5ldmVyIGNyZWF0ZXMgYSByZWYgdGhhdCBlbmRzIHdpdGggNDAgaGV4IGNoYXJhY3RlcnNcbiIKKyJiZWNhdXNlIGl0IHdpbGwgYmUgaWdub3JlZCB3aGVuIHlvdSBqdXN0IHNwZWNpZnkgNDAtaGV4LiBUaGVzZSByZWZzXG4iCisibWF5IGJlIGNyZWF0ZWQgYnkgbWlzdGFrZS4gRm9yIGV4YW1wbGUsXG4iCisiXG4iCisiICBnaXQgY2hlY2tvdXQgLWIgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisid2hlcmUgXCIkYnJcIiBpcyBzb21laG93IGVtcHR5IGFuZCBhIDQwLWhleCByZWYgaXMgY3JlYXRlZC4gUGxlYXNlXG4iCisiZXhhbWluZSB0aGVzZSByZWZzIGFuZCBtYXliZSBkZWxldGUgdGhlbS4gVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5XG4iCisicnVubmluZyBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiCittc2dzdHIgIiIKKyJOb3JtYWxtZW50ZSBvIEdpdCBudW5jYSBjcmlhIHJlZmVyw6puY2lhcyBxdWUgdGVybWluZW0gZW0gNDAgY2FyYWN0ZXJlcyAiCisiaGV4YWRlY2ltYWlzLFxuIgorInBvaXMgdW1hIHJlZmVyw6puY2lhIGRlc3RhcyBzZXJpYSBpZ25vcmFkYSBzZSBpbmRpY2Fzc2Ugc8OzIDQwIGNhcmFjdGVyZXMgIgorImhleGFkZWNpbWFpcy5cbiIKKyJFc3RhcyByZWZlcsOqbmNpYXMgcG9kZW0gc2VyIGNyaWFkYXMgcG9yIGVuZ2Fuby4gQ29tbyBubyBleGVtcGxvLFxuIgorIlxuIgorIiAgZ2l0IGNoZWNrb3V0IC1iICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorIlxuIgorIm9uZGUgXCIkYnJcIiBlc3TDoSB2YXppbyBlIMOpIGNyaWFkYSB1bWEgcmVmZXLDqm5jaWEgZGUgNDAgY2FyYWN0ZXJlcyAiCisiaGV4YWRlY2ltYWlzLlxuIgorIkFuYWxpc2UgZXN0YXMgcmVmZXLDqm5jaWFzIGUgZWxpbWluZS1hcyBzZSBkZXNlamFyLiBEZXNhdGl2ZSBlc3RhXG4iCisibWVuc2FnZW0gZXhlY3V0YW5kbyBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiCisKKyM6IHN1Ym1vZHVsZS5jOjY3IHN1Ym1vZHVsZS5jOjEwMQorbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdW5tZXJnZWQgLmdpdG1vZHVsZXMsIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIGZpcnN0IgorbXNnc3RyICIiCisiTsOjbyDDqSBwb3Nzw612ZWwgYWx0ZXJhciAuZ2l0bW9kdWxlcyBuw6NvIGludGVncmFkbywgcmVzb2x2YSBwcmltZWlybyBvcyAiCisiY29uZmxpdG9zIGRlIGludGVncmHDp8OjbyIKKworIzogc3VibW9kdWxlLmM6NzEgc3VibW9kdWxlLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAiU2Vjw6fDo28gZGUgLmdpdG1vZHVsZXMgY3VqbyBwYXRoPSVzIG7Do28gZW5jb250cmFkYSIKKworIzogc3VibW9kdWxlLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSAuZ2l0bW9kdWxlcyBlbnRyeSAlcyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGF0dWFsaXphciBvIGVsZW1lbnRvICVzIGRlIC5naXRtb2R1bGVzIgorCisjOiBzdWJtb2R1bGUuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSAuZ2l0bW9kdWxlcyBlbnRyeSBmb3IgJXMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCByZW1vdmVyIG8gZWxlbWVudG8gJXMgZGUgLmdpdG1vZHVsZXMiCisKKyM6IHN1Ym1vZHVsZS5jOjEyMworbXNnaWQgInN0YWdpbmcgdXBkYXRlZCAuZ2l0bW9kdWxlcyBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIHByZXBhcmFyIC5naXRtb2R1bGVzIGF0dWFsaXphZG8iCisKKyM6IHN1Ym1vZHVsZS5jOjE2MQorbXNnaWQgIm5lZ2F0aXZlIHZhbHVlcyBub3QgYWxsb3dlZCBmb3Igc3VibW9kdWxlLmZldGNoSm9icyIKK21zZ3N0ciAibsOjbyDDqSBwZXJtaXRpZG8gdmFsb3JlcyBuZWdhdGl2b3MgZW0gc3VibW9kdWxlLmZldGNoSm9icyIKKworIzogc3VibW9kdWxlLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG5vdCByZWNvZ25pemVkIGFzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIiclcycgbsOjbyDDqSByZWNvbmhlY2lkbyBjb21vIHVtIHJlcG9zaXTDs3JpbyBnaXQiCisKKyM6IHN1Ym1vZHVsZS5jOjEzMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXJ0ICdnaXQgc3RhdHVzJyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGluaWNpYXIgJ2dpdCBzdGF0dXMnIG5vIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcnVuICdnaXQgc3RhdHVzJyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGV4ZWN1dGFyICdnaXQgc3RhdHVzJyBubyBzdWJtw7NkdWxvICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjE0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgaGFzIGRpcnR5IGluZGV4IgorbXNnc3RyICJvIHN1Ym3Ds2R1bG8gJyVzJyB0ZW0gw61uZGljZSBzdWpvIgorCisjOiBzdWJtb2R1bGUuYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJyZWxvY2F0ZV9naXRkaXIgZm9yIHN1Ym1vZHVsZSAnJXMnIHdpdGggbW9yZSB0aGFuIG9uZSB3b3JrdHJlZSBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisicmVsb2NhdGVfZ2l0ZGlyIHBhcmEgc3VibW9kdWxlICclcycgY29tIG1haXMgZG8gcXVlIHVtYSDDoXJ2b3JlIGRlIHRyYWJhbGhvICIKKyJuw6NvIHN1cG9ydGFkbyIKKworIzogc3VibW9kdWxlLmM6MTY5MSBzdWJtb2R1bGUuYzoxNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgbmFtZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBwcm9jdXJhciBwZWxvIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTY5NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Njc4CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBjcmlhciBvIGRpcmV0w7NyaW8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTWlncmF0aW5nIGdpdCBkaXJlY3Rvcnkgb2YgJyVzJXMnIGZyb21cbiIKKyInJXMnIHRvXG4iCisiJyVzJ1xuIgorbXNnc3RyICIiCisiQSBtaWdyYXIgZGlyZXTDs3JpbyBnaXQgZGUgJyVzJXMnIGRlXG4iCisiJyVzJyBwYXJhXG4iCisiJyVzJ1xuIgorCisjOiBzdWJtb2R1bGUuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBwZXJjb3JyZXIgcmVjdXJzaXZhbWVudGUgbyBzdWJtw7NkdWxvICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjE4MjYKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgbHMtZmlsZXMgaW4gLi4iCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBpbmljaWFyIGxzLWZpbGVzIGVtIC4uIgorCisjOiBzdWJtb2R1bGUuYzoxODQ2Cittc2dpZCAiQlVHOiByZXR1cm5lZCBwYXRoIHN0cmluZyBkb2Vzbid0IG1hdGNoIGN3ZD8iCittc2dzdHIgIkJVRzogcmV0dXJuZWQgcGF0aCBzdHJpbmcgZG9lc24ndCBtYXRjaCBjd2Q/IgorCisjOiBzdWJtb2R1bGUuYzoxODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImxzLXRyZWUgcmV0dXJuZWQgdW5leHBlY3RlZCByZXR1cm4gY29kZSAlZCIKK21zZ3N0ciAibHMtdHJlZSByZXRvcm5vdSBjw7NkaWdvIGRlIHJldG9ybm8gaW5lc3BlcmFkbyAlZCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAidmFsb3IgaW52w6FsaWRvIGRlICVzIgorCisjOiB0cmFpbGVyLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgdHJhaWxlciBjb21tYW5kICclcycgZmFpbGVkIgorbXNnc3RyICJmYWxoYSBhbyBleGVjdXRhciBvIGNvbWFuZG8gdHJhaWxlciAnJXMnIgorCisjOiB0cmFpbGVyLmM6NDczIHRyYWlsZXIuYzo0NzcgdHJhaWxlci5jOjQ4MSB0cmFpbGVyLmM6NTM1IHRyYWlsZXIuYzo1MzkKKyM6IHRyYWlsZXIuYzo1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAidmFsb3IgZGVzY29uaGVjaWRvICclcycgZGEgY2hhdmUgJyVzJyIKKworIzogdHJhaWxlci5jOjUyNSB0cmFpbGVyLmM6NTMwIGJ1aWx0aW4vcmVtb3RlLmM6Mjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgIm1haXMgZG8gcXVlIHVtICVzIgorCisjOiB0cmFpbGVyLmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHRyYWlsZXIgdG9rZW4gaW4gdHJhaWxlciAnJS4qcyciCittc2dzdHIgInRva2VuIHRlcm1pbmFkb3IgdmF6aW8gbm8gdGVybWluYWRvciAnJS4qcyciCisKKyM6IHRyYWlsZXIuYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIG8gZmljaGVpcm8gZGUgZW50cmFkYSAnJXMnIgorCisjOiB0cmFpbGVyLmM6NzI1Cittc2dpZCAiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciBkYSBlbnRyYWRhIHBhZHLDo28iCisKKyM6IHRyYWlsZXIuYzo5NDkgYnVpbHRpbi9hbS5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgb2J0ZXIgc3RhdCBkZSAlcyIKKworIzogdHJhaWxlci5jOjk1MQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAibyBmaWNoZWlybyAlcyBuw6NvIMOpIHVtIGZpY2hlaXJvIHJlZ3VsYXIiCisKKyM6IHRyYWlsZXIuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3Qgd3JpdGFibGUgYnkgdXNlciIKK21zZ3N0ciAibyBmaWNoZWlybyAlcyBuw6NvIHBvZGUgc2VyIGVzY3JpdG8gcGVsbyB1dGlsaXphZG9yIgorCisjOiB0cmFpbGVyLmM6OTY1Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciBmaWNoZWlybyB0ZW1wb3LDoXJpbyIKKworIzogdHJhaWxlci5jOjEwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSB0ZW1wb3JhcnkgZmlsZSB0byAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIG11ZGFyIG8gbm9tZSBkbyBmaWNoZWlybyB0ZW1wb3LDoXJpbyBwYXJhICVzIgorCisjOiB0cmFuc3BvcnQuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBzZXQgdXBzdHJlYW0gb2YgJyVzJyB0byAnJXMnIG9mICclcydcbiIKK21zZ3N0ciAiSXJpYSBkZWZpbmlyIG8gcmFtbyBhIG1vbnRhbnRlIGRlICclcycgY29tbyAnJXMnIGRlICclcydcbiIKKworIzogdHJhbnNwb3J0LmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIKK21zZ3N0ciAidHJhbnNwb3J0ZTogb3DDp8OjbyBkZSBwcm9mdW5kaWRhZGUgJyVzJyBpbnbDoWxpZGEiCisKKyM6IHRyYW5zcG9ydC5jOjg4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgcGF0aHMgY29udGFpbiBjaGFuZ2VzIHRoYXQgY2FuXG4iCisibm90IGJlIGZvdW5kIG9uIGFueSByZW1vdGU6XG4iCittc2dzdHIgIiIKKyJPcyBzZWd1aW50ZXMgY2FtaW5ob3MgZGUgc3VibcOzZHVsbyBjb250w6ptIGFsdGVyYcOnw7VlcyBxdWVcbiIKKyJuw6NvIHB1ZGVyYW0gc2VyIGVuY29udHJhZGFzIGEgbmVuaHVtIHJlbW90bzpcbiIKKworIzogdHJhbnNwb3J0LmM6ODkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQbGVhc2UgdHJ5XG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJvciBjZCB0byB0aGUgcGF0aCBhbmQgdXNlXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorInRvIHB1c2ggdGhlbSB0byBhIHJlbW90ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBvciBmYXZvciB0ZW50ZVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisib3UgY2QgcGFyYSBvIGNhbWluaG8gZSB1c2VcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisicGFyYSBwdWJsaWPDoS1sYXMgbm8gcmVtb3RvLlxuIgorIlxuIgorCisjOiB0cmFuc3BvcnQuYzo5MDEKK21zZ2lkICJBYm9ydGluZy4iCittc2dzdHIgIkFib3J0YWRvLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgbGVyIGEgcmVmZXLDqm5jaWEgJXMiCisKKyM6IHRyZWUtd2Fsay5jOjMxCittc2dpZCAidG9vLXNob3J0IHRyZWUgb2JqZWN0IgorbXNnc3RyICJvYmpldG8gw6Fydm9yZSBkZW1hc2lhZG8gY3VydG8iCisKKyM6IHRyZWUtd2Fsay5jOjM3Cittc2dpZCAibWFsZm9ybWVkIG1vZGUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAibW9kbyBuYSBlbnRyYWRhIGRlIMOhcnZvcmUgbWFsZm9ybWFkbyIKKworIzogdHJlZS13YWxrLmM6NDEKK21zZ2lkICJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICJub21lIGRlIGZpY2hlaXJvIHZhemlvIG5hIGVudHJhZGEgZGUgw6Fydm9yZSIKKworIzogdHJlZS13YWxrLmM6MTEzCittc2dpZCAidG9vLXNob3J0IHRyZWUgZmlsZSIKK21zZ3N0ciAiZmljaGVpcm8gZGUgw6Fydm9yZSBkZW1hc2lhZG8gY3VydG8iCisKKyM6IHVucGFjay10cmVlcy5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyJBcyBzdWFzIGFsdGVyYcOnw7VlcyBsb2NhaXMgbm9zIHNlZ3VpbnRlcyBmaWNoZWlyb3Mgc2VyaWFtIHN1YnN0aXR1w61kYXMgYW8gIgorImV4dHJhaXI6XG4iCisiJSVzU3VibWV0YSBhcyBzdWFzIGFsdGVyYcOnw7VlcyBvdSBlc2NvbmRhLWFzIGFudGVzIGRlIHRyb2NhciBkZSByYW1vLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJBcyBzdWFzIGFsdGVyYcOnw7VlcyBsb2NhaXMgbm9zIHNlZ3VpbnRlcyBmaWNoZWlyb3Mgc2VyaWFtIHN1YnN0aXR1w61kYXMgYW8gIgorImV4dHJhaXI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJBcyBzdWFzIGFsdGVyYcOnw7VlcyBsb2NhaXMgbm9zIHNlZ3VpbnRlcyBmaWNoZWlyb3Mgc2VyaWFtIHN1YnN0aXR1w61kYXMgYW8gIgorImludGVncmFyOlxuIgorIiUlc1N1Ym1ldGEgYXMgc3VhcyBhbHRlcmHDp8O1ZXMgb3UgZXNjb25kYS1hcyBhbnRlcyBkZSBpbnRlZ3Jhci4iCisKKyM6IHVucGFjay10cmVlcy5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisiQXMgc3VhcyBhbHRlcmHDp8O1ZXMgbG9jYWlzIG5vcyBzZWd1aW50ZXMgZmljaGVpcm9zIHNlcmlhbSBzdWJzdGl0dcOtZGFzIGFvICIKKyJpbnRlZ3JhcjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIkFzIHN1YXMgYWx0ZXJhw6fDtWVzIGxvY2FpcyBub3Mgc2VndWludGVzIGZpY2hlaXJvcyBzZXJpYW0gc3Vic3RpdHXDrWRhcyBwb3IgIgorIiVzOlxuIgorIiUlc1N1Ym1ldGEgYXMgc3VhcyBhbHRlcmHDp8O1ZXMgb3UgZXNjb25kYS1hcyBhbnRlcyBkZSBlZmV0dWFyICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJBcyBzdWFzIGFsdGVyYcOnw7VlcyBsb2NhaXMgbm9zIHNlZ3VpbnRlcyBmaWNoZWlyb3Mgc2VyaWFtIHN1YnN0aXR1w61kYXMgcG9yICIKKyIlczpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVtOlxuIgorIiVzIgorbXNnc3RyICIiCisiQXR1YWxpemFyIG9zIHNlZ3VpbnRlcyBkaXJldMOzcmlvcyBwZXJkZSBvcyBmaWNoZWlyb3MgbsOjbyBjb250cm9sb3MgZGVudHJvICIKKyJkZWxlczpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyJPcyBzZWd1aW50ZXMgZmljaGVpcm9zIG7Do28gY29udHJvbGFkb3MgbmEgw6Fydm9yZSBkZSB0cmFiYWxobyBzZXJpYW0gIgorInJlbW92aWRvcyBhbyBleHRyYWlyOlxuIgorIiUlc01vdmEgb3UgcmVtb3ZhLW9zIGFudGVzIGRlIHRyb2NhciBkZSByYW1vcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiT3Mgc2VndWludGVzIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIG5hIMOhcnZvcmUgZGUgdHJhYmFsaG8gc2VyaWFtICIKKyJyZW1vdmlkb3MgYW8gZXh0cmFpcjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJPcyBzZWd1aW50ZXMgZmljaGVpcm9zIG7Do28gY29udHJvbGFkb3MgbmEgw6Fydm9yZSBkZSB0cmFiYWxobyBzZXJpYW0gIgorInJlbW92aWRvcyBhbyBpbnRlZ3JhcjpcbiIKKyIlJXNNb3ZhIG91IHJlbW92YS1vcyBhbnRlcyBkZSBpbnRlZ3Jhci4iCisKKyM6IHVucGFjay10cmVlcy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisiT3Mgc2VndWludGVzIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIG5hIMOhcnZvcmUgZGUgdHJhYmFsaG8gc2VyaWFtICIKKyJyZW1vdmlkb3MgYW8gaW50ZWdyYXI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiT3Mgc2VndWludGVzIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIG5hIMOhcnZvcmUgZGUgdHJhYmFsaG8gc2VyaWFtICIKKyJyZW1vdmlkb3MgcG9yICVzOlxuIgorIiUlc01vdmEgb3UgcmVtb3ZhLW9zIGFudGVzIGRlIGVmZXR1YXIgJXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIk9zIHNlZ3VpbnRlcyBmaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIHNlcmlhbSAiCisicmVtb3ZpZG9zIHBvciAlczpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyJPcyBzZWd1aW50ZXMgZmljaGVpcm9zIG7Do28gY29udHJvbGFkb3MgZGEgw6Fydm9yZSBkZSB0cmFiYWxobyBzZXJpYW0gIgorInN1YnN0aXR1w61kb3MgYW8gZXh0cmFpcjpcbiIKKyIlJXNNb3ZhIG91IHJlbW92YS1vcyBhbnRlcyBkZSB0cm9jYXIgZGUgcmFtb3MuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiT3Mgc2VndWludGVzIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG8gc2VyaWFtICIKKyJzdWJzdGl0dcOtZG9zIGFvIGV4dHJhaXI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIk9zIHNlZ3VpbnRlcyBmaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIHNlcmlhbSAiCisic3Vic3RpdHXDrWRvcyBhbyBpbnRlZ3JhcjpcbiIKKyIlJXNNb3ZhIG91IHJlbW92YS1vcyBhbnRlcyBkZSBpbnRlZ3Jhci4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIk9zIHNlZ3VpbnRlcyBmaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIHNlcmlhbSAiCisic3Vic3RpdHXDrWRvcyBhbyBpbnRlZ3JhcjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiT3Mgc2VndWludGVzIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG8gc2VyaWFtICIKKyJzdWJzdGl0dcOtZG9zIHBvciAlczpcbiIKKyIlJXNNb3ZhIG91IHJlbW92YS1vcyBhbnRlcyBkZSBlZmV0dWFyICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiT3Mgc2VndWludGVzIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG8gc2VyaWFtICIKKyJzdWJzdGl0dcOtZG9zIHBvciAlczpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiIKK21zZ3N0ciAiQSBlbnRyYWRhICclcycgc29icmVww7VlLXNlIGNvbSAnJXMnLiBOw6NvIMOpIHBvc3PDrXZlbCB2aW5jdWxhci4iCisKKyM6IHVucGFjay10cmVlcy5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBzcGFyc2UgY2hlY2tvdXQ6IHRoZSBmb2xsb3dpbmcgZW50cmllcyBhcmUgbm90IHVwLXRvLWRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBleHRyYWlyIGVzcGFyc2FtZW50ZTogYXMgc2VndWludGVzIGVudHJhZGFzIG7Do28gZXN0w6NvICIKKyJhdHVhbGl6YWRhczpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIk9zIHNlZ3VpbnRlcyBmaWNoZWlyb3MgbmEgw6Fydm9yZSBkZSB0cmFiYWxobyBzZXJpYW0gc3Vic3RpdHXDrWRvcyBhbyAiCisiYXR1YWxpemFyIGEgZXh0cmHDp8OjbyBlc3BhcnNhOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgc3BhcnNlIGNoZWNrb3V0ICIKKyJ1cGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJPcyBzZWd1aW50ZXMgZmljaGVpcm9zIG5hIMOhcnZvcmUgZGUgdHJhYmFsaG8gc2VyaWFtIHJlbW92aWRvcyBhbyBhdHVhbGl6YXIgYSAiCisiZXh0cmHDp8OjbyBlc3BhcnNhOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3VibW9kdWxlOlxuIgorIiVzIgorbXNnc3RyICIiCisiTsOjbyDDqSBwb3Nzw612ZWwgYXR1YWxpemFyIHN1Ym3Ds2R1bG86XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZ1xuIgorbXNnc3RyICJBIGFib3J0YXJcbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSB1cGRhdGUgc3RyYXRlZ3kgbm90IHN1cHBvcnRlZCBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBwcm9jdXJhciBwZWxvIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogdW5wYWNrLXRyZWVzLmM6MzQwCittc2dpZCAiQ2hlY2tpbmcgb3V0IGZpbGVzIgorbXNnc3RyICJBIGV4dHJhaXIgZmljaGVpcm9zIgorCisjOiB1cmxtYXRjaC5jOjE2MworbXNnaWQgImludmFsaWQgVVJMIHNjaGVtZSBuYW1lIG9yIG1pc3NpbmcgJzovLycgc3VmZml4IgorbXNnc3RyICJub21lIGRlIGVzcXVlbWEgZGUgVVJMIGludsOhbGlkbyBvdSBmYWx0YSBkbyBzdWZpeG8gJzovLyciCisKKyM6IHVybG1hdGNoLmM6MTg3IHVybG1hdGNoLmM6MzQ2IHVybG1hdGNoLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJVhYIGVzY2FwZSBzZXF1ZW5jZSIKK21zZ3N0ciAic2VxdWVuY2lhIGRlIGVzY2FwZSAlWFggaW52w6FsaWRhIgorCisjOiB1cmxtYXRjaC5jOjIxNQorbXNnaWQgIm1pc3NpbmcgaG9zdCBhbmQgc2NoZW1lIGlzIG5vdCAnZmlsZTonIgorbXNnc3RyICJzaXN0ZW1hIGFuZml0cmnDo28gbsOjbyBpbmRpY2FkbyBlIG8gZXNxdWVtYSBuw6NvIMOpIGRvIHRpcG8gJ2ZpbGU6JyIKKworIzogdXJsbWF0Y2guYzoyMzIKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICJ1bSBVUkwgZG8gdGlwbyAnZmlsZTonIG7Do28gcG9kZSB0ZXIgdW0gbsO6bWVybyBkZSBwb3J0YSIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICJjYXJhY3RlcmVzIGludsOhbGlkb3Mgbm8gbm9tZSBkbyBhbmZpdHJpw6NvIgorCisjOiB1cmxtYXRjaC5jOjI5MiB1cmxtYXRjaC5jOjMwMworbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIm7Dum1lcm8gZGUgcG9ydGEgaW52w6FsaWRvIgorCisjOiB1cmxtYXRjaC5jOjM3MQorbXNnaWQgImludmFsaWQgJy4uJyBwYXRoIHNlZ21lbnQiCittc2dzdHIgInNlZ21lbnRvIGRlIGNhbWluaG8gJy4uJyBpbnbDoWxpZG8iCisKKyM6IHdvcmt0cmVlLmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgImZhbGhhIGFvIGxlciAnJXMnIgorCisjOiB3cmFwcGVyLmM6MjIyIHdyYXBwZXIuYzozOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyICclcycgcGFyYSBsZWl0dXJhIGUgZXNjcml0YSIKKworIzogd3JhcHBlci5jOjIyNCB3cmFwcGVyLmM6Mzk0IGJ1aWx0aW4vYW0uYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyICclcycgcGFyYSBlc2NyaXRhIgorCisjOiB3cmFwcGVyLmM6MjI2IHdyYXBwZXIuYzozOTYgYnVpbHRpbi9hbS5jOjMyMCBidWlsdGluL2FtLmM6NzU5CisjOiBidWlsdGluL2FtLmM6ODQ3IGJ1aWx0aW4vY29tbWl0LmM6MTcwMCBidWlsdGluL21lcmdlLmM6MTAxNQorIzogYnVpbHRpbi9wdWxsLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciAnJXMnIHBhcmEgbGVpdHVyYSIKKworIzogd3JhcHBlci5jOjU4MSB3cmFwcGVyLmM6NjAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYWNlZGVyIGEgJyVzJyIKKworIzogd3JhcHBlci5jOjYxMAorbXNnaWQgInVuYWJsZSB0byBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZGUgb2J0ZXIgbyBkaXJldMOzcmlvIGRlIHRyYWJhbGhvIGF0dWFsIgorCisjOiB3cmFwcGVyLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGVzY3JldmVyIHBhcmEgJXMiCisKKyM6IHdyYXBwZXIuYzo2MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNsb3NlICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZmVjaGFyICVzIgorCisjOiB3dC1zdGF0dXMuYzoxNTEKK21zZ2lkICJVbm1lcmdlZCBwYXRoczoiCittc2dzdHIgIkNhbWluaG9zIG7Do28gaW50ZWdyYWRvczoiCisKKyM6IHd0LXN0YXR1cy5jOjE3OCB3dC1zdGF0dXMuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc2V0ICVzIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgICh1c2UgXCJnaXQgcmVzZXQgJXMgPGZpY2hlaXJvPi4uLlwiIHBhcmEgZGVzcHJlcGFyYXIpIgorCisjOiB3dC1zdGF0dXMuYzoxODAgd3Qtc3RhdHVzLmM6MjA3Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpY2hlaXJvPi4uLlwiIHBhcmEgZGVzcHJlcGFyYXIpIgorCisjOiB3dC1zdGF0dXMuYzoxODQKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKHVzZSBcImdpdCBhZGQgPGZpY2hlaXJvPi4uLlwiIHBhcmEgbWFyY2FyIGNvbW8gcmVzb2x2aWRvKSIKKworIzogd3Qtc3RhdHVzLmM6MTg2IHd0LXN0YXR1cy5jOjE5MAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpY2hlaXJvPi4uLlwiIGNvbmZvcm1lIGFwcm9wcmlhZG8gcGFyYSBtYXJjYXIgY29tbyAiCisicmVzb2x2aWRvKSIKKworIzogd3Qtc3RhdHVzLmM6MTg4Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKHVzZSBcImdpdCBybSA8ZmljaGVpcm8+Li4uXCIgcGFyYSBtYXJjYXIgY29tbyByZXNvbHZpZG8pIgorCisjOiB3dC1zdGF0dXMuYzoxOTkgd3Qtc3RhdHVzLmM6OTU4Cittc2dpZCAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICJBbHRlcmHDp8O1ZXMgcGFyYSBzZXJlbSBzdWJtZXRpZGFzOiIKKworIzogd3Qtc3RhdHVzLmM6MjE3IHd0LXN0YXR1cy5jOjk2NworbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAiQWx0ZXJhw6fDtWVzIG7Do28gcHJlcGFyYWRhcyBwYXJhIHN1Ym1ldGVyOiIKKworIzogd3Qtc3RhdHVzLmM6MjIxCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiAgKHVzZSBcImdpdCBhZGQgPGZpY2hlaXJvPi4uLlwiIHBhcmEgYXR1YWxpemFyIG8gcXVlIHNlcsOhIHN1Ym1ldGlkbykiCisKKyM6IHd0LXN0YXR1cy5jOjIyMworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmljaGVpcm8+Li4uXCIgcGFyYSBhdHVhbGl6YXIgbyBxdWUgc2Vyw6Egc3VibWV0aWRvKSIKKworIzogd3Qtc3RhdHVzLmM6MjI0Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisiICAodXNlIFwiZ2l0IGNoZWNrb3V0IC0tIDxmaWNoZWlybz4uLi5cIiBwYXJhIGRlc2NhcnRhciBhbHRlcmHDp8O1ZXMgbm8gIgorImRpcmV0w7NyaW8gZGUgdHJhYmFsaG8pIgorCisjOiB3dC1zdGF0dXMuYzoyMjYKK21zZ2lkICIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiCittc2dzdHIgIiIKKyIgIChzdWJtZXRhIG91IGRlc2NhcnRlIG8gY29udGXDumRvIG1vZGlmaWNhZG8gb3UgbsOjbyBjb250cm9sYWRvIG5vcyAiCisic3VibcOzZHVsb3MpIgorCisjOiB3dC1zdGF0dXMuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiAgKHVzZSBcImdpdCAlcyA8ZmljaGVpcm8+Li4uXCIgcGFyYSBpbmNsdWlyIG5vIHF1ZSBzZXLDoSBzdWJtZXRpZG8pIgorCisjOiB3dC1zdGF0dXMuYzoyNTMKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICJlbGltaW5hZG8gcG9yIGFtYm9zOiIKKworIzogd3Qtc3RhdHVzLmM6MjU1Cittc2dpZCAiYWRkZWQgYnkgdXM6IgorbXNnc3RyICJhZGljaW9uYWRvIHBvciBuw7NzOiIKKworIzogd3Qtc3RhdHVzLmM6MjU3Cittc2dpZCAiZGVsZXRlZCBieSB0aGVtOiIKK21zZ3N0ciAiZWxpbWluYWRvIHBvciBlbGVzOiIKKworIzogd3Qtc3RhdHVzLmM6MjU5Cittc2dpZCAiYWRkZWQgYnkgdGhlbToiCittc2dzdHIgImFkaWNpb25hZG8gcG9yIGVsZXM6IgorCisjOiB3dC1zdGF0dXMuYzoyNjEKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAiZWxpbWluYWRvIHBvciBuw7NzOiIKKworIzogd3Qtc3RhdHVzLmM6MjYzCittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgImFkaWNpb25hZG8gcG9yIGFtYm9zOiIKKworIzogd3Qtc3RhdHVzLmM6MjY1Cittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgIm1vZGlmaWNhZG8gcG9yIGFtYm9zOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc1Cittc2dpZCAibmV3IGZpbGU6IgorbXNnc3RyICJub3ZvIGZpY2hlaXJvOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc3Cittc2dpZCAiY29waWVkOiIKK21zZ3N0ciAiY29waWFkbzoiCisKKyM6IHd0LXN0YXR1cy5jOjI3OQorbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICJlbGltaW5hZG86IgorCisjOiB3dC1zdGF0dXMuYzoyODEKK21zZ2lkICJtb2RpZmllZDoiCittc2dzdHIgIm1vZGlmaWNhZG86IgorCisjOiB3dC1zdGF0dXMuYzoyODMKK21zZ2lkICJyZW5hbWVkOiIKK21zZ3N0ciAibm9tZSBtdWRhZG86IgorCisjOiB3dC1zdGF0dXMuYzoyODUKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAidGlwbyBhbHRlcmFkbzoiCisKKyM6IHd0LXN0YXR1cy5jOjI4NworbXNnaWQgInVua25vd246IgorbXNnc3RyICJkZXNjb25oZWNpZG86IgorCisjOiB3dC1zdGF0dXMuYzoyODkKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgIm7Do28gaW50ZWdyYWRvOiIKKworIzogd3Qtc3RhdHVzLmM6MzcxCittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAibm92b3MgY29tbWl0cywgIgorCisjOiB3dC1zdGF0dXMuYzozNzMKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgImNvbnRlw7pkbyBtb2RpZmljYWRvLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM3NQorbXNnaWQgInVudHJhY2tlZCBjb250ZW50LCAiCittc2dzdHIgImNvbnRlw7pkbyBuw6NvIGNvbnRyb2xhZG8sICIKKworIzogd3Qtc3RhdHVzLmM6ODMxCittc2dpZCAiU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoiCittc2dzdHIgIlN1Ym3Ds2R1bG9zIGFsdGVyYWRvcyBtYXMgbsOjbyBhdHVhbGl6YWRvczoiCisKKyM6IHd0LXN0YXR1cy5jOjgzMworbXNnaWQgIlN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIkFsdGVyYcOnw7VlcyBlbSBzdWJtw7NkdWxvcyBwYXJhIHNlcmVtIHN1Ym1ldGlkYXM6IgorCisjOiB3dC1zdGF0dXMuYzo5MTQKK21zZ2lkICIiCisiRG8gbm90IHRvdWNoIHRoZSBsaW5lIGFib3ZlLlxuIgorIkV2ZXJ5dGhpbmcgYmVsb3cgd2lsbCBiZSByZW1vdmVkLiIKK21zZ3N0ciAiIgorIk7Do28gYWx0ZXJlIGEgbGluaGEgYWNpbWEuXG4iCisiVHVkbyBvIHF1ZSBlc3RpdmVyIGFiYWl4byBzZXLDoSByZW1vdmlkby4iCisKKyM6IHd0LXN0YXR1cy5jOjEwMjYKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgIkjDoSBjYW1pbmhvcyBuw6NvIGludGVncmFkb3MuIgorCisjOiB3dC1zdGF0dXMuYzoxMDI5Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNvbW1pdFwiKSIKK21zZ3N0ciAiICAoY29ycmlqYSBvcyBjb25mbGl0b3MgZSBleGVjdXRlIFwiZ2l0IGNvbW1pdFwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTAzMQorbXNnaWQgIiAgKHVzZSBcImdpdCBtZXJnZSAtLWFib3J0XCIgdG8gYWJvcnQgdGhlIG1lcmdlKSIKK21zZ3N0ciAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiBwYXJhIGFib3J0YXIgYSBpbnRlZ3Jhw6fDo28pIgorCisjOiB3dC1zdGF0dXMuYzoxMDM2Cittc2dpZCAiQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLiIKK21zZ3N0ciAiVG9kb3Mgb3MgY29uZmxpdG9zIGZvcmFtIGNvcnJpZ2lkb3MgbWFzIGFpbmRhIGVzdMOhIGEgaW50ZWdyYXIuIgorCisjOiB3dC1zdGF0dXMuYzoxMDM5Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdFwiIHRvIGNvbmNsdWRlIG1lcmdlKSIKK21zZ3N0ciAiICAodXNlIFwiZ2l0IGNvbW1pdFwiIHBhcmEgY29uY2x1aXIgYSBpbnRlZ3Jhw6fDo28pIgorCisjOiB3dC1zdGF0dXMuYzoxMDQ5Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uIgorbXNnc3RyICJTZXNzw6NvIGFtIGVtIGN1cnNvLiIKKworIzogd3Qtc3RhdHVzLmM6MTA1MgorbXNnaWQgIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiTyBwYXRjaCBhdHVhbCBlc3TDoSB2YXppby4iCisKKyM6IHd0LXN0YXR1cy5jOjEwNTYKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChjb3JyaWphIG9zIGNvbmZsaXRvcyBlIGV4ZWN1dGUgXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTA1OAorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgcGFyYSBpZ25vcmFyIGVzdGUgcGF0Y2gpIgorCisjOiB3dC1zdGF0dXMuYzoxMDYwCittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHBhcmEgcmVzdGF1cmFyIG8gcmFtbyBvcmlnaW5hbCkiCisKKyM6IHd0LXN0YXR1cy5jOjExODkKK21zZ2lkICJnaXQtcmViYXNlLXRvZG8gaXMgbWlzc2luZy4iCittc2dzdHIgImdpdC1yZWJhc2UtdG9kbyBuw6NvIGV4aXN0ZS4iCisKKyM6IHd0LXN0YXR1cy5jOjExOTEKK21zZ2lkICJObyBjb21tYW5kcyBkb25lLiIKK21zZ3N0ciAiTmVuaHVtIGNvbWFuZG8gY29uY2x1w61kby4iCisKKyM6IHd0LXN0YXR1cy5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGFzdCBjb21tYW5kIGRvbmUgKCVkIGNvbW1hbmQgZG9uZSk6IgorbXNnaWRfcGx1cmFsICJMYXN0IGNvbW1hbmRzIGRvbmUgKCVkIGNvbW1hbmRzIGRvbmUpOiIKK21zZ3N0clswXSAiw5psdGltbyBjb21hbmRvIGNvbmNsdcOtZG8gKCVkIGNvbWFuZG8gY29uY2x1w61kbyk6IgorbXNnc3RyWzFdICLDmmx0aW1vcyBjb21hbmRvcyBjb25jbHXDrWRvcyAoJWQgY29tYW5kb3MgY29uY2x1w61kb3MpOiIKKworIzogd3Qtc3RhdHVzLmM6MTIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiICAodmVqYSBtYWlzIG5vIGZpY2hlaXJvICVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTIxMAorbXNnaWQgIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iCittc2dzdHIgIk5lbmh1bSBjb21hbmRvIHBvciBjb25jbHVpci4iCisKKyM6IHd0LXN0YXR1cy5jOjEyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV4dCBjb21tYW5kIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZCk6IgorbXNnaWRfcGx1cmFsICJOZXh0IGNvbW1hbmRzIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZHMpOiIKK21zZ3N0clswXSAiUHLDs3hpbW8gY29tYW5kbyBhIGV4ZWN1dGFyICglZCBjb21hbmRvIHJlc3RhbnRlKToiCittc2dzdHJbMV0gIlByw7N4aW1vcyBjb21hbmRvcyBhIGV4ZWN1dGFyICglZCBjb21hbmRvcyByZXN0YW50ZXMpOiIKKworIzogd3Qtc3RhdHVzLmM6MTIyMQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiB0byB2aWV3IGFuZCBlZGl0KSIKK21zZ3N0ciAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHBhcmEgdmlzdWFsaXphciBlIGVkaXRhcikiCisKKyM6IHd0LXN0YXR1cy5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIkVzdMOhIGEgcmVhbGl6YXIgcmViYXNlIGRvIHJhbW8gJyVzJyBzb2JyZSAnJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTIzOQorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nLiIKK21zZ3N0ciAiRXN0w6EgYSByZWJhc2VhciBuZXN0ZSBtb21lbnRvLiIKKworIzogd3Qtc3RhdHVzLmM6MTI1MworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChjb3JyaWphIG9zIGNvbmZsaXRvcyBlIGV4ZWN1dGUgXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEyNTUKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgcGFyYSBpZ25vcmFyIGVzdGUgcGF0Y2gpIgorCisjOiB3dC1zdGF0dXMuYzoxMjU3Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICh1c2UgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiBwYXJhIHJlc3RhdXJhciBvIHJhbW8gb3JpZ2luYWwpIgorCisjOiB3dC1zdGF0dXMuYzoxMjYzCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAodG9kb3Mgb3MgY29uZmxpdG9zIGZvcmFtIGNvcnJpZ2lkb3M6IGV4ZWN1dGUgXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIkVzdMOhIGEgZGl2aWRpciB1bSBjb21taXQgYW8gbWVzbW8gdGVtcG8gcXVlIHNlIGVmZXR1YSByZWJhc2UgZG8gcmFtbyAnJXMnICIKKyJzb2JyZSAnJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTI3MgorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICJFc3TDoSBhIGRpdmlkaXIgdW0gY29tbWl0IGR1cmFudGUgdW0gcmViYXNlLiIKKworIzogd3Qtc3RhdHVzLmM6MTI3NQorbXNnaWQgIiAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAoQXNzaW0gcXVlIG8gZGlyZXTDs3JpbyBkZSB0cmFiYWxobyBlc3RpdmVyIGxpbXBvLCBleGVjdXRlIFwiZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisiRXN0w6EgYSBlZGl0YXIgdW0gY29tbWl0IGFvIG1lc21vIHRlbXBvIHF1ZSBlZmV0dWEgcmViYXNlIGRvIHJhbW8gJyVzJyBzb2JyZSAiCisiJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjEyODQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIkVzdMOhIGEgZWRpdGFyIHVtIGNvbW1pdCBkdXJhbnRlIHVtIHJlYmFzZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEyODcKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIgorbXNnc3RyICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiBwYXJhIGVtZW5kYXIgbyBjb21taXQgYXR1YWwpIgorCisjOiB3dC1zdGF0dXMuYzoxMjg5Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIiCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgYXNzaW0gcXVlIGVzdGl2ZXIgc2F0aXNmZWl0byBjb20gYXMgIgorImFsdGVyYcOnw7VlcykiCisKKyM6IHd0LXN0YXR1cy5jOjEyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAiRXN0w6EgYSByZWFsaXphciBjaGVycnktcGljayBkbyBjb21taXQgJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxMzA0Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKGNvcnJpamEgb3MgY29uZmxpdG9zIGUgZXhlY3V0ZSBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzA3Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgICh0b2RvcyBvcyBjb25mbGl0b3MgZm9yYW0gY29ycmlnaWRvczogZXhlY3V0ZSBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlIgorIlwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTMwOQorbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pIgorbXNnc3RyICIiCisiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiBwYXJhIGNhbmNlbGFyIGEgb3BlcmHDp8OjbyBkZSBjaGVycnktcGljaykiCisKKyM6IHd0LXN0YXR1cy5jOjEzMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIkVzdMOhIGEgcmV2ZXJ0ZXIgbyBjb21taXQgJXMgbmVzdGUgY29tZW50by4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMjMKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKGNvcnJpamEgZG9zIGNvbmZsaXRvcyBlIGV4ZWN1dGUgXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzMjYKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgICh0b2RvcyBvcyBjb25mbGl0b3MgZm9yYW0gY29ycmlnaWRvczogZXhlY3V0ZSBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTMyOAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikiCittc2dzdHIgIiAgKHVzZSBcImdpdCByZXZlciAtLWFib3J0XCIgcGFyYSBjYW5jZWxhciBhIG9wZXJhw6fDo28gZGUgcmV2ZXJzw6NvKSIKKworIzogd3Qtc3RhdHVzLmM6MTMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJyVzJy4iCittc2dzdHIgIkVzdMOhIGEgYmlzc2V0YXIsIGluaWNpYWRvIGEgcGFydGlyIGRvIHJhbW8gJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNDMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICJFc3TDoSBhIGJpc3NldGFyIG5lc3RlIG1vbWVudG8uIgorCisjOiB3dC1zdGF0dXMuYzoxMzQ2Cittc2dpZCAiICAodXNlIFwiZ2l0IGJpc2VjdCByZXNldFwiIHRvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgcGFyYSB2b2x0YXIgYW8gcmFtbyBvcmlnaW5hbCkiCisKKyM6IHd0LXN0YXR1cy5jOjE1NDMKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICJObyByYW1vICIKKworIzogd3Qtc3RhdHVzLmM6MTU0OQorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgInJlYmFzZSBpbnRlcmF0aXZvIGVtIGN1cnNvOyBzb2JyZSAiCisKKyM6IHd0LXN0YXR1cy5jOjE1NTEKK21zZ2lkICJyZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICJyZWJhc2UgZW0gY3Vyc287IHNvYnJlICIKKworIzogd3Qtc3RhdHVzLmM6MTU1NgorbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICJIRUFEIGRlc3RhY2FkYSBlbSAiCisKKyM6IHd0LXN0YXR1cy5jOjE1NTgKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICJIRUFEIGRlc3RhY2FkYSBkZSAiCisKKyM6IHd0LXN0YXR1cy5jOjE1NjEKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICJOw6NvIHNlIGVuY29udHJhIGVtIG5lbmh1bSByYW1vIG5lc3RlIG1vbWVudG8uIgorCisjOiB3dC1zdGF0dXMuYzoxNTc5Cittc2dpZCAiSW5pdGlhbCBjb21taXQiCittc2dzdHIgIkNvbW1pdCBpbmljaWFsIgorCisjOiB3dC1zdGF0dXMuYzoxNTkzCittc2dpZCAiVW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJGaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyIKKworIzogd3Qtc3RhdHVzLmM6MTU5NQorbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgIkZpY2hlaXJvcyBpZ25vcmFkb3MiCisKKyM6IHd0LXN0YXR1cy5jOjE1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICdzdGF0dXMgLXVubydcbiIKKyJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkXG4iCisibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKK21zZ3N0ciAiIgorIkEgZW51bWVyYcOnw6NvIGRvcyBmaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyBkZW1vcm91ICUuMmYgc2VndW5kb3NcbiIKKyJhIGNvbmNsdWlyLiAnc3RhdHVzIC11bm8nIHBvZGUgYWNlbGVyYXIgbyBwcm9jZXNzbywgbWFzIGRldmUgdGVyXG4iCisiY3VpZGFkbyBkZSBuw6NvIHNlIGVzcXVlY2VyIGRlIGFkaWNpb25hciBub3ZvcyBmaWNoZWlyb3NcbiIKKyIoY29uc3VsdGUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKKworIzogd3Qtc3RhdHVzLmM6MTYwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICJGaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyBuw6NvIGxpc3RhZG9zJXMiCisKKyM6IHd0LXN0YXR1cy5jOjE2MDcKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIgKHVzZSBhIG9ww6fDo28gLXUgcGFyYSBtb3N0cmFyIG9zIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zKSIKKworIzogd3Qtc3RhdHVzLmM6MTYxMworbXNnaWQgIk5vIGNoYW5nZXMiCittc2dzdHIgIlNlbSBhbHRlcmHDp8O1ZXMiCisKKyM6IHd0LXN0YXR1cy5jOjE2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIiIKKyJuZW5odW1hIGFsdGVyYcOnw6NvIGFkaWNpb25hZGEgcGFyYSBzdWJtZXRlciAodXNlIFwiZ2l0IGFkZFwiIGUvb3UgXCJnaXQgIgorImNvbW1pdCAtYVwiKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgIm5lbmh1bWEgYWx0ZXJhw6fDo28gYWRpY2lvbmFkYSBwYXJhIHN1Ym1ldGVyXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvICIKKyJ0cmFjaylcbiIKK21zZ3N0ciAiIgorIm7Do28gZm9pIGFkaWNpb25hZG8gbmFkYSBwYXJhIHN1Ym1ldGVyLCBtYXMgZXhpc3RlbSBmaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyAiCisiKHVzZSBcImdpdCBhZGRcIiBwYXJhIGNvbnRyb2zDoS1sb3MpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE2MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50XG4iCittc2dzdHIgIiIKKyJuw6NvIGZvaSBhZGljaW9uYWRvIG5hZGEgcGFyYSBzdWJtZXRlciwgbWFzIGV4aXN0ZW0gZmljaGVpcm9zIG7Do28gIgorImNvbnRyb2xhZG9zXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE2MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iCittc2dzdHIgIiIKKyJuw6NvIGjDoSBuYWRhIHBhcmEgc3VibWV0ZXIgKGNyaWUvY29waWUgZmljaGVpcm9zIGUgdXNlIFwiZ2l0IGFkZFwiIHBhcmEgIgorImNvbnRyb2zDoS1sb3MpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE2MzMgd3Qtc3RhdHVzLmM6MTYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICJuw6NvIGjDoSBuYWRhIHBhcmEgc3VibWV0ZXJcbiIKKworIzogd3Qtc3RhdHVzLmM6MTYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKVxuIgorbXNnc3RyICIiCisibsOjbyBow6EgbmFkYSBwYXJhIHN1Ym1ldGVyICh1c2UgLXUgcGFyYSBtb3N0cmFyIG9zIGZpY2hlaXJvcyBuw6NvICIKKyJjb250cm9sYWRvcylcbiIKKworIzogd3Qtc3RhdHVzLmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuXG4iCittc2dzdHIgIm7Do28gaMOhIG5hZGEgcGFyYSBzdWJtZXRlciwgw6Fydm9yZSBkZSB0cmFiYWxobyBsaW1wYVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ5Cittc2dpZCAiSW5pdGlhbCBjb21taXQgb24gIgorbXNnc3RyICJDb21taXQgaW5pY2lhbCBlbSAiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTMKK21zZ2lkICJIRUFEIChubyBicmFuY2gpIgorbXNnc3RyICJIRUFEIChuZW5odW0gcmFtbykiCisKKyM6IHd0LXN0YXR1cy5jOjE3ODIgd3Qtc3RhdHVzLmM6MTc5MAorbXNnaWQgImJlaGluZCAiCittc2dzdHIgImF0csOhcyAiCisKKyM6IHd0LXN0YXR1cy5jOjE3ODUgd3Qtc3RhdHVzLmM6MTc4OAorbXNnaWQgImFoZWFkICIKK21zZ3N0ciAiw6AgZnJlbnRlICIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBhY3Rpb24gaXMgZS5nLiAicHVsbCB3aXRoIHJlYmFzZSIKKyM6IHd0LXN0YXR1cy5jOjIyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZWZldHVhciAlczogdGVtIGFsdGVyYcOnw7VlcyBuw6NvIHByZXBhcmFkYXMuIgorCisjOiB3dC1zdGF0dXMuYzoyMjg2Cittc2dpZCAiYWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICJhbMOpbSBkaXNzbywgbyDDrW5kaWNlIGNvbnTDqW0gYWx0ZXJhw6fDtWVzIG7Do28gc3VibWV0aWRhcy4iCisKKyM6IHd0LXN0YXR1cy5jOjIyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBlZmV0dWFyICVzOiBvIMOtbmRpY2UgY29udMOpbSBhbHRlcmHDp8O1ZXMgbsOjbyBzdWJtZXRpZGFzLiIKKworIzogY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jOjU3IGJ1aWx0aW4vY2xvbmUuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICJmYWxoYSBhbyBpbnZvY2FyIHVubGluayBkZSAnJXMnIgorCisjOiBidWlsdGluL2FkZC5jOjIyCittc2dpZCAiZ2l0IGFkZCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBhZGQgWzxvcMOnw7Vlcz5dIFstLV0gPGNhbWluaG8+Li4uIgorCisjOiBidWlsdGluL2FkZC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgImRpZmYgc3RhdHVzIGluZXNwZXJhZG8gJWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODUgYnVpbHRpbi9jb21taXQuYzoyOTEKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIGF0dWFsaXphciBvcyBmaWNoZWlyb3MiCisKKyM6IGJ1aWx0aW4vYWRkLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAicmVtb3ZlciAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTQ5Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIkFsdGVyYcOnw7VlcyBuw6NvIHByZXBhcmFkYXMgZGVwb2lzIGRlIGF0dWFsaXphciBvIMOtbmRpY2U6IgorCisjOiBidWlsdGluL2FkZC5jOjIwOSBidWlsdGluL3Jldi1wYXJzZS5jOjg3MgorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGxlciBvIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgJyVzJyBwYXJhIGVzY3JpdGEuIgorCisjOiBidWlsdGluL2FkZC5jOjIyNAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGVzY3JldmVyIHBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjIyNworbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICJmYWxoYSBhbyBlZGl0YXIgcGF0Y2giCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBvYnRlciBzdGF0IGRlICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjMyCittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICJQYXRjaCB2YXppby4gQWJvcnRhZG8uIgorCisjOiBidWlsdGluL2FkZC5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFwbGljYXIgJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzoyNDcKK21zZ2lkICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCittc2dzdHIgIk9zIHNlZ3VpbnRlcyBjYW1pbmhvcyBlc3TDo28gaWdub3JhZG9zIHBvciBhbGd1bSBmaWNoZWlybyAuZ2l0aWdub3JlOlxuIgorCisjOiBidWlsdGluL2FkZC5jOjI2NiBidWlsdGluL2NsZWFuLmM6ODc2IGJ1aWx0aW4vZmV0Y2guYzoxMTUgYnVpbHRpbi9tdi5jOjEyMworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NSBidWlsdGluL3B1bGwuYzoxOTggYnVpbHRpbi9wdXNoLmM6NTI0CisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjggYnVpbHRpbi9ybS5jOjI0MSBidWlsdGluL3NlbmQtcGFjay5jOjE2MworbXNnaWQgImRyeSBydW4iCittc2dzdHIgInNpbXVsYXIgYcOnw6NvIgorCisjOiBidWlsdGluL2FkZC5jOjI2OQorbXNnaWQgImludGVyYWN0aXZlIHBpY2tpbmciCittc2dzdHIgInNlbGXDp8OjbyBpbnRlcmF0aXZhIgorCisjOiBidWlsdGluL2FkZC5jOjI3MCBidWlsdGluL2NoZWNrb3V0LmM6MTE3NyBidWlsdGluL3Jlc2V0LmM6Mjg2Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgInNlbGVjaW9uYXIgYmxvY29zIGludGVyYXRpdmFtZW50ZSIKKworIzogYnVpbHRpbi9hZGQuYzoyNzEKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgImVkaXRhciBvIGRpZmYgYXR1YWwgZSBhcGxpY8OhLWxvIgorCisjOiBidWlsdGluL2FkZC5jOjI3MgorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAicGVybWl0aXIgYWRpY2lvbmFyIGZpY2hlaXJvcyBpZ25vcmFkb3MiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjczCittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgImF0dWFsaXphciBmaWNoZWlyb3MgY29udHJvbGFkb3MiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjc0Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCB0aGUgcGF0aCB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICJyZWdpc3RhciBhcGVuYXMgbyBmYWN0byBkZSBxdWUgbyBjYW1pbmhvIHNlcsOhIGFkaWNpb25hZG8gbWFpcyB0YXJkZSIKKworIzogYnVpbHRpbi9hZGQuYzoyNzUKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIiIKKyJhZGljaW9uYXIgYWx0ZXJhw6fDtWVzIGRlIHRvZG9zIG9zIGZpY2hlaXJvcyBjb250cm9sYWRvcyBvdSBuw6NvIGNvbnRyb2xhZG9zIgorCisjOiBidWlsdGluL2FkZC5jOjI3OAorbXNnaWQgImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIgorbXNnc3RyICIiCisiaWdub3JhciBjYW1pbmhvcyByZW1vdmlkb3MgbmEgw6Fydm9yZSBkZSB0cmFiYWxobyAobyBtZXNtbyBxdWUgLS1uby1hbGwpIgorCisjOiBidWlsdGluL2FkZC5jOjI4MAorbXNnaWQgImRvbid0IGFkZCwgb25seSByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAibsOjbyBhZGljaW9uYXIsIGFwZW5hcyBhdHVhbGl6YXIgbyDDrW5kaWNlIgorCisjOiBidWlsdGluL2FkZC5jOjI4MQorbXNnaWQgImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiCittc2dzdHIgImlnbm9yYXIgZmljaGVpcm9zIHF1ZSBuw6NvIHBvZGVtIHNlciBhZGljaW9uYWRvcyBwb3IgY2F1c2EgZGUgZXJyb3MiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjgyCittc2dpZCAiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIgorbXNnc3RyICJ2ZXJpZmljYXIgcXVhaXMgb3MgZmljaGVpcm9zIGlnbm9yYWRvcyBuYSBzaW11bGHDp8OjbyIKKworIzogYnVpbHRpbi9hZGQuYzoyODMgYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NTEKK21zZ2lkICIoKy8tKXgiCittc2dzdHIgIigrLy0peCIKKworIzogYnVpbHRpbi9hZGQuYzoyODMgYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NTIKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAic3Vic3RpdHVpciBvIGJpdCBleGVjdXTDoXZlbCBkb3MgZmljaGVpcm9zIGxpc3RhZG9zIgorCisjOiBidWlsdGluL2FkZC5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICJVc2UgLWYgc2UgZGVzZWphIG1lc21vIGFkaWNpb27DoS1sb3MuXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzEyCittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiZmFsaGEgYW8gYWRpY2lvbmFyIGZpY2hlaXJvcyIKKworIzogYnVpbHRpbi9hZGQuYzozNDgKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLUEgZSAtdSBzw6NvIG11dHVhbWVudGUgaW5jb21wYXTDrXZlaXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzU1Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAiQSBvcMOnw6NvIC0taWdub3JlLW1pc3Npbmcgc8OzIHBvZGUgc2VyIHVzYWRhIGVtIGNvbmp1bnRvIGNvbSAtLWRyeS1ydW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tY2htb2QgcGFyYW0gJyVzJyBtdXN0IGJlIGVpdGhlciAteCBvciAreCIKK21zZ3N0ciAibyBwYXLDom1ldHJvICclcycgZGUgLS1jaG1vZCB0ZW0gZGUgc2VyIC14IG91ICt4IgorCisjOiBidWlsdGluL2FkZC5jOjM3NAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAiTsOjbyBmb2kgZXNwZWNpZmljYWRvIG5hZGEsIG5hZGEgYWRpY2lvbmFkby5cbiIKKworIzogYnVpbHRpbi9hZGQuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCittc2dzdHIgIlF1ZXJpYSBkaXplciAnZ2l0IGFkZCAuJz9cbiIKKworIzogYnVpbHRpbi9hZGQuYzozODAgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzIgYnVpbHRpbi9jaGVja291dC5jOjI5OAorIzogYnVpbHRpbi9jaGVja291dC5jOjQ5MSBidWlsdGluL2NsZWFuLmM6OTIwIGJ1aWx0aW4vY29tbWl0LmM6MzUwCisjOiBidWlsdGluL212LmM6MTQzIGJ1aWx0aW4vcmVzZXQuYzoyMzUgYnVpbHRpbi9ybS5jOjI3MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjI0NAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiZmljaGVpcm8gZGUgw61uZGljZSBjb3Jyb21waWRvIgorCisjOiBidWlsdGluL2FtLmM6NDE0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGF1dGhvciBzY3JpcHQiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhbmFsaXNhciBvIGF1dG9yIGRvIHNjcmlwdCIKKworIzogYnVpbHRpbi9hbS5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICInJXMnIGZvaSBlbGltaW5hZG8gcGVsbyBob29rIGFwcGx5cGF0Y2gtbXNnIgorCisjOiBidWlsdGluL2FtLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiTGluaGEgZGUgZW50cmFkYSBtYWxmb3JtYWRhOiAnJXMnLiIKKworIzogYnVpbHRpbi9hbS5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiRmFsaGEgYW8gY29waWFyIG5vdGFzIGRlICclcycgcGFyYSAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6NTk1Cittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICJmYWxoYSBhbyBpbnZvY2FyIGZzZWVrIgorCisjOiBidWlsdGluL2FtLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXRjaCAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBwYXRjaCAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6ODQwCittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgIlPDsyBwb2RlIHNlciBhcGxpY2FkYSB1bWEgc8OpcmllIGRlIHBhdGNoZXMgU3RHSVQgZHVtYSBzw7MgdmV6IgorCisjOiBidWlsdGluL2FtLmM6ODg3Cittc2dpZCAiaW52YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgImNhcmltYm8gZGUgZGF0YS9ob3JhIGludsOhbGlkbyIKKworIzogYnVpbHRpbi9hbS5jOjg5MCBidWlsdGluL2FtLmM6ODk4Cittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgImxpbmhhIGRlIERhdGEgaW52w6FsaWRhIgorCisjOiBidWlsdGluL2FtLmM6ODk1Cittc2dpZCAiaW52YWxpZCB0aW1lem9uZSBvZmZzZXQiCittc2dzdHIgIm11ZGFuw6dhIGRlIGZ1c28gaG9yw6FyaW8gaW52w6FsaWRhIgorCisjOiBidWlsdGluL2FtLmM6OTg0Cittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICJGYWxoYSBhbyBkZXRldGFyIG8gZm9ybWF0byBkbyBwYXRjaC4iCisKKyM6IGJ1aWx0aW4vYW0uYzo5ODkgYnVpbHRpbi9jbG9uZS5jOjM5NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJmYWxoYSBhbyBjcmlhciBvIGRpcmV0w7NyaW8gJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjk5MworbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAiRmFsaGEgYW8gZGl2aWRpciBwYXRjaGVzLiIKKworIzogYnVpbHRpbi9hbS5jOjExMjUgYnVpbHRpbi9jb21taXQuYzozNzYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZXNjcmV2ZXIgbyBmaWNoZWlybyBkZSDDrW5kaWNlIgorCisjOiBidWlsdGluL2FtLmM6MTE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJXMgLS1jb250aW51ZVwiLiIKK21zZ3N0ciAiQXDDs3MgcmVzb2x2ZXIgZXN0ZSBwcm9ibGVtYSwgZXhlY3V0ZSBcIiVzIC0tY29udGludWVcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIlcyAtLXNraXBcIiBpbnN0ZWFkLiIKK21zZ3N0ciAiU2UgcHJlZmVyaXIgaWdub3JhciBlc3RlIHBhdGNoLCBleGVjdXRlIFwiJXMgLS1za2lwXCIuIgorCisjOiBidWlsdGluL2FtLmM6MTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iCittc2dzdHIgIiIKKyJQYXJhIHJlc3RhdXJhciBvIHJhbW8gb3JpZ2luYWwgZSBpbnRlcnJvbXBlciBhIGFwbGljYcOnw6NvIGRvcyBwYXRjaGVzLCAiCisiZXhlY3V0ZSBcIiVzIC0tYWJvcnRcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMzE2Cittc2dpZCAiUGF0Y2ggaXMgZW1wdHkuIFdhcyBpdCBzcGxpdCB3cm9uZz8iCittc2dzdHIgIk8gcGF0Y2ggZXN0w6EgdmF6aW8uIEZvaSBkaXZpZGlkbyBpbmNvcnJldGFtZW50ZT8iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMzkwIGJ1aWx0aW4vbG9nLmM6MTU1NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICVzIgorbXNnc3RyICJsaW5oYSBkZSBpZGVudGlkYWRlIGludsOhbGlkYTogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhbmFsaXNhciBvIGNvbW1pdCAlcyIKKworIzogYnVpbHRpbi9hbS5jOjE2MTAKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisiTyByZXBvc2l0w7NyaW8gbsOjbyB0ZW0gb3MgYmxvYnMgbmVjZXNzw6FyaW9zIHBhcmEgcmVjb3JyZXIgYSBpbnRlZ3Jhw6fDo28gY29tIDMgIgorInBvbnRvcy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjEyCittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAiQSB1c2FyIGluZm9ybWHDp8OjbyBkbyDDrW5kaWNlIHBhcmEgcmVjb25zdHJ1aXIgdW1hIMOhcnZvcmUgZGUgYmFzZS4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE2MzEKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisiRWRpdG91IG8gcGF0Y2ggbWFudWFsbWVudGU/XG4iCisiTsOjbyDDqSBwb3Nzw612ZWwgYXBsaWPDoS1sbyBhb3MgYmxvYnMgcmVnaXN0YWRvcyBubyDDrW5kaWNlLiIKKworIzogYnVpbHRpbi9hbS5jOjE2MzcKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIiIKKyJBIHJlY29ycmVyIGEgdW1hIGRlIGJhc2UgcGFyYSBhcGxpY2HDp8OjbyBkZSBwYXRjaGVzIGUgaW50ZWdyYcOnw6NvIGNvbSAzICIKKyJwb250b3MuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjYyCittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIKK21zZ3N0ciAiRmFsaGEgYW8gaW50ZWdyYXIgYXMgYWx0ZXJhw6fDtWVzLiIKKworIzogYnVpbHRpbi9hbS5jOjE2ODYgYnVpbHRpbi9tZXJnZS5jOjYzMQorbXNnaWQgImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiCittc2dzdHIgImdpdCB3cml0ZS10cmVlIGZhbGhvdSBhbyBlc2NyZXZlciB1bWEgw6Fydm9yZSIKKworIzogYnVpbHRpbi9hbS5jOjE2OTMKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICJhIGFwbGljYXIgYSB1bSBoaXN0w7NyaWNvIHZhemlvIgorCisjOiBidWlsdGluL2FtLmM6MTcwNiBidWlsdGluL2NvbW1pdC5jOjE3NjQgYnVpbHRpbi9tZXJnZS5jOjgwMgorIzogYnVpbHRpbi9tZXJnZS5jOjgyNworbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICJmYWxoYSBhbyBlc2NyZXZlciBvYmpldG8gZGUgY29tbWl0IgorCisjOiBidWlsdGluL2FtLmM6MTczOSBidWlsdGluL2FtLmM6MTc0MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGNvbnRpbnVhcjogJXMgbsOjbyBleGlzdGUuIgorCisjOiBidWlsdGluL2FtLmM6MTc1OQorbXNnaWQgImNhbm5vdCBiZSBpbnRlcmFjdGl2ZSB3aXRob3V0IHN0ZGluIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiIKK21zZ3N0ciAiIgorIm7Do28gw6kgcG9zc8OtdmVsIGVudHJhciBlbSBtb2RvIGludGVyYXRpdm8gc2VtIHVtIGVudHJhZGEgcGFkcsOjbyBjb25lY3RhZGEgYSAiCisidW0gdGVybWluYWwuIgorCisjOiBidWlsdGluL2FtLmM6MTc2NAorbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAiQ29ycG8gZG8gY29tbWl0OiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisjLiBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyMuIGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9hbS5jOjE3NzQKK21zZ2lkICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorbXNnc3RyICJBcGxpY2FyPyBbeV1zaW0vW25dw6NvL1tlXWRpdGFyL1t2XWVyIHBhdGNoL1thXWNlaXRhciB0b2RvczogIgorCisjOiBidWlsdGluL2FtLmM6MTgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAlcykiCittc2dzdHIgIsONbmRpY2UgbW9kaWZpY2FkbzogbsOjbyDDqSBwb3Nzw612ZWwgYXBsaWNhciBwYXRjaGVzIChtb2RpZmljYWRvOiAlcykiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODYxIGJ1aWx0aW4vYW0uYzoxOTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICJBIGFwbGljYXI6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODc3Cittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICJOZW5odW1hIGFsdGVyYcOnw6NvIC0tIErDoSBmb2kgYXBsaWNhZG8gbyBwYXRjaC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGNoIGZhaWxlZCBhdCAlcyAlLipzIgorbXNnc3RyICJGYWxoYSBhbyBhcGxpY2FyIG8gcGF0Y2ggZW0gJXMgJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE4OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvcHkgb2YgdGhlIHBhdGNoIHRoYXQgZmFpbGVkIGlzIGZvdW5kIGluOiAlcyIKK21zZ3N0ciAiQSBjw7NwaWEgZG8gcGF0Y2ggcXVlIGZhbGhvdSBlbmNvbnRyYS1zZSBlbTogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTM2Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisiU2VtIGFsdGVyYcOnw7VlcyAtIGVzcXVlY2V1LXNlIGRlIHVzYXIgJ2dpdCBhZGQnP1xuIgorIlNlIG7Do28gaMOhIG5hZGEgcG9yIHByZXBhcmFyLCBwcm92YXZlbG1lbnRlIGVzc2FzIG1lc21hcyBhbHRlcmHDp8O1ZXNcbiIKKyJqw6EgZm9yYW0gaW50cm9kdXppZGFzOyBwb2RlIHF1ZXJlciBpZ25vcmFyIGVzdGUgcGF0Y2guIgorCisjOiBidWlsdGluL2FtLmM6MTk0MworbXNnaWQgIiIKKyJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4LlxuIgorIkRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/IgorbXNnc3RyICIiCisiQWluZGEgaMOhIGNhbWluaG9zIG7Do28gaW50ZWdyYWRvcyBubyDDrW5kaWNlLlxuIgorIkVzcXVlY2V1LXNlIGRlIHVzYXIgJ2dpdCBhZGQnPyIKKworIzogYnVpbHRpbi9hbS5jOjIwNTEgYnVpbHRpbi9hbS5jOjIwNTUgYnVpbHRpbi9hbS5jOjIwNjcgYnVpbHRpbi9yZXNldC5jOjMwOAorIzogYnVpbHRpbi9yZXNldC5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBvYmpldG8gJyVzJy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTAzCittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICJmYWxoYSBhbyBsaW1wYXIgbyDDrW5kaWNlIgorCisjOiBidWlsdGluL2FtLmM6MjEzNworbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICIiCisiUGFyZWNlIHF1ZSBhIEhFQUQgZm9pIG1vdmlkYSBkZXNkZSBhIMO6bHRpbWEgdmV6IHF1ZSBvICdhbScgZmFsaG91LlxuIgorIk7Do28gcmVjdWFuZG8gYSBPUklHX0hFQUQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIC0tcGF0Y2gtZm9ybWF0OiAlcyIKK21zZ3N0ciAiVmFsb3IgaW52w6FsaWRvIGRlIC0tcGF0Y2gtZm9ybWF0OiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjIyMzMKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXSIKK21zZ3N0ciAiZ2l0IGFtIFs8b3DDp8O1ZXM+XSBbKDxtYm94PiB8IDxNYWlsZGlyPikuLi5dIgorCisjOiBidWlsdGluL2FtLmM6MjIzNAorbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorbXNnc3RyICJnaXQgYW0gWzxvcMOnw7Vlcz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQwCittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgImV4ZWN1dGFyIGludGVyYXRpdmFtZW50ZSIKKworIzogYnVpbHRpbi9hbS5jOjIyNDIKK21zZ2lkICJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIKK21zZ3N0ciAib3DDp8OjbyBoaXN0w7NyaWNhIC0tIHNlbS1hw6fDo28iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ0Cittc2dpZCAiYWxsb3cgZmFsbCBiYWNrIG9uIDN3YXkgbWVyZ2luZyBpZiBuZWVkZWQiCittc2dzdHIgInBlcm1pdGlyIHJlY29ycmVyIGEgaW50ZWdyYcOnw6NvIGNvbSAzIHBvbnRvcyBzZSBuZWNlc3PDoXJpbyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDUgYnVpbHRpbi9pbml0LWRiLmM6NDgzIGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTcKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc4Cittc2dpZCAiYmUgcXVpZXQiCittc2dzdHIgInNpbGVuY2lvc28iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ3Cittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiYWRpY2lvbmFyIHVtYSBsaW5oYSBjb20gU2lnbmVkLW9mLWJ5IG5vIGZpbSBkYSBtZW5zYWdlbSBkZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUwCittc2dpZCAicmVjb2RlIGludG8gdXRmOCAoZGVmYXVsdCkiCittc2dzdHIgInJlY29kaWZpY2FyIGVtIHV0ZjggKHByZWRlZmluacOnw6NvKSIKKworIzogYnVpbHRpbi9hbS5jOjIyNTIKK21zZ2lkICJwYXNzIC1rIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJwYXNzYXIgYSBvcMOnw6NvIC1rIGFvIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIyNTQKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJwYXNzYXIgYSBvcMOnw6NvIC1iIGFvIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIyNTYKK21zZ2lkICJwYXNzIC1tIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJwYXNzYXIgYSBvcMOnw6NvIC1tIGFvIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIyNTgKK21zZ2lkICJwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgZm9yIG1ib3ggZm9ybWF0IgorbXNnc3RyICJwYXNzYXIgYSBvcMOnw6NvIC0ta2VlcC1jciBhbyBnaXRtYWlsc3BsaXQgcGFyYSBmb3JtYXRvIGRlIG1ib3giCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjYxCittc2dpZCAiZG8gbm90IHBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudCBvZiBhbS5rZWVwY3IiCittc2dzdHIgIiIKKyJuw6NvIHBhc3NhciBhIG9ww6fDo28gLS1rZWVwLWNyIGFvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnRlbWVudGUgZGUgYW0ua2VlcGNyIgorCisjOiBidWlsdGluL2FtLmM6MjI2NAorbXNnaWQgInN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSIKK21zZ3N0ciAicmV0aXJhciB0b2RvIG8gY29udGXDumRvIGFudGVzIGRhIGxpbmhhIGRlIHRlc291cmEiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjY2IGJ1aWx0aW4vYW0uYzoyMjY5IGJ1aWx0aW4vYW0uYzoyMjcyIGJ1aWx0aW4vYW0uYzoyMjc1CisjOiBidWlsdGluL2FtLmM6MjI3OCBidWlsdGluL2FtLmM6MjI4MSBidWlsdGluL2FtLmM6MjI4NCBidWlsdGluL2FtLmM6MjI4NworIzogYnVpbHRpbi9hbS5jOjIyOTMKK21zZ2lkICJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IgorbXNnc3RyICJ0cmFuc21pdGlyIGFvIGdpdC1hcHBseSIKKworIzogYnVpbHRpbi9hbS5jOjIyODMgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjYyIGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY2NQorIzogYnVpbHRpbi9ncmVwLmM6MTA0NSBidWlsdGluL21lcmdlLmM6MjAxIGJ1aWx0aW4vcHVsbC5jOjEzNQorIzogYnVpbHRpbi9wdWxsLmM6MTk0IGJ1aWx0aW4vcmVwYWNrLmM6MTg3IGJ1aWx0aW4vcmVwYWNrLmM6MTkxCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjM3IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjkgYnVpbHRpbi90YWcuYzozOTgKKyM6IHBhcnNlLW9wdGlvbnMuaDoxMzIgcGFyc2Utb3B0aW9ucy5oOjEzNCBwYXJzZS1vcHRpb25zLmg6MjQ1Cittc2dpZCAibiIKK21zZ3N0ciAibiIKKworIzogYnVpbHRpbi9hbS5jOjIyODkgYnVpbHRpbi9icmFuY2guYzo1OTIgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDQyIGJ1aWx0aW4vdGFnLmM6NDMzIGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IgorbXNnc3RyICJmb3JtYXRvIgorCisjOiBidWlsdGluL2FtLmM6MjI5MAorbXNnaWQgImZvcm1hdCB0aGUgcGF0Y2goZXMpIGFyZSBpbiIKK21zZ3N0ciAiZm9ybWF0byBkZSBhcHJlc2VudGHDp8OjbyBkZSBwYXRjaGVzIgorCisjOiBidWlsdGluL2FtLmM6MjI5NgorbXNnaWQgIm92ZXJyaWRlIGVycm9yIG1lc3NhZ2Ugd2hlbiBwYXRjaCBmYWlsdXJlIG9jY3VycyIKK21zZ3N0ciAic3Vic3RpdHVpciBhIG1lbnNhZ2VtIGRlIGVycm8gcXVhbmRvIGEgYXBsaWNhw6fDo28gZG8gcGF0Y2ggZmFsaGEiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk4Cittc2dpZCAiY29udGludWUgYXBwbHlpbmcgcGF0Y2hlcyBhZnRlciByZXNvbHZpbmcgYSBjb25mbGljdCIKK21zZ3N0ciAiY29udGludWFyIGEgYXBsaWNhciBvcyBwYXRjaGVzIGRlcG9pcyBkZSByZXNvbHZlciBvcyBjb25mbGl0b3MiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzAxCittc2dpZCAic3lub255bXMgZm9yIC0tY29udGludWUiCittc2dzdHIgInNpbsOzbmltbyBkZSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL2FtLmM6MjMwNAorbXNnaWQgInNraXAgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgImlnbm9yYXIgbyBwYXRjaCBhdHVhbCIKKworIzogYnVpbHRpbi9hbS5jOjIzMDcKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICJyZXN0YXVyYXIgbyByYW1vIG9yaWdpbmFsIGUgYWJvcnRhciBhIG9wZXJhw6fDo28gZGUgcGF0Y2guIgorCisjOiBidWlsdGluL2FtLmM6MjMxMQorbXNnaWQgImxpZSBhYm91dCBjb21taXR0ZXIgZGF0ZSIKK21zZ3N0ciAibWVudGlyIHNvYnJlIGEgZGF0YSBkZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzEzCittc2dpZCAidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIKK21zZ3N0ciAidXNhciBhIGRhdGEgZSBob3JhIGF0dWFsIGNvbW8gZGF0YSBkZSBhdXRvciIKKworIzogYnVpbHRpbi9hbS5jOjIzMTUgYnVpbHRpbi9jb21taXQuYzoxNjAwIGJ1aWx0aW4vbWVyZ2UuYzoyMzIKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2NSBidWlsdGluL3JldmVydC5jOjExMSBidWlsdGluL3RhZy5jOjQxMworbXNnaWQgImtleS1pZCIKK21zZ3N0ciAiaWQtY2hhdmUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzE2Cittc2dpZCAiR1BHLXNpZ24gY29tbWl0cyIKK21zZ3N0ciAiYXNzaW5hciBvcyBjb21taXRzIGNvbSBHUEciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzE5Cittc2dpZCAiKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCittc2dzdHIgIih1c28gaW50ZXJubyBkZSBnaXQtcmViYXNlKSIKKworIzogYnVpbHRpbi9hbS5jOjIzMzQKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKyJBIG9ww6fDo28gLWIvLS1iaW5hcnkgaMOhIG11aXRvIHF1ZSDDqSBpZ25vcmFkYSBlIHNlcsOhXG4iCisiZnV0dXJhbWVudGUgcmVtb3ZpZGEuIFBvciBmYXZvciBuw6NvIGEgdXNlLiIKKworIzogYnVpbHRpbi9hbS5jOjIzNDEKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImZhbGhhIGFvIGxlciBvIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJXMgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAiIgorIm8gZGlyZXTDs3JpbyBkZSByZWJlc2EgYW50ZXJpb3IgJXMgYWluZGEgZXhpc3RlLCBtYXMgZm9pIGZvcm5lY2lkYSB1bWEgbWJveC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisiRGlyZXTDs3JpbyBhYmFuZG9uYWRvICVzIGVuY29udHJhZG8uXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiBwYXJhIG8gcmVtb3Zlci4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzg2Cittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiQSBvcGVyYcOnw6NvIGRlIHJlc29sdcOnw6NvIG7Do28gZXN0w6EgZW0gY3Vyc28sIG7Do28gcmV0b21hbmRvLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjgKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzxvcMOnw7Vlcz5dIFs8cGF0Y2g+Li4uXSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyIG8gZmljaGVpcm8gZGUgYXJxdWl2byAnJXMnIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCByZWRpcmVjaW9uYXIgYSBzYcOtZGEiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IFJlbW90byBzZW0gVVJMIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo1OAorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogZXNwZXJhdmEtc2UgQUNLL05BSywgb2J0ZXZlLXNlIEVPRiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICJlcnJvIHJlbW90bzogJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogZXJybyBkZSBwcm90b2NvbG8iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY4Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlOiBlc3ZhemlhbWVudG8gZGUgY2FjaGUgKGZsdXNoKSBlc3BlcmFkbyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE3Cittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAiZXhlY3V0YXIgJ2dpdCBiaXNlY3QgbmV4dCciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxOQorbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgImF0dWFsaXphciBCSVNFQ1RfSEVBRCBlbSB2ZXogZGUgZXh0cmFpciBvIGNvbW1pdCBhdHVhbCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjMzCittc2dpZCAiZ2l0IGJsYW1lIFs8b3B0aW9ucz5dIFs8cmV2LW9wdHM+XSBbPHJldj5dIFstLV0gPGZpbGU+IgorbXNnc3RyICJnaXQgYmxhbWUgWzxvcMOnw7Vlcz5dIFs8cmV2LW9ww6fDtWVzPl0gWzxyZXY+XSBbLS1dIDxmaWNoZWlybz4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozOAorbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICI8cmV2LW9ww6fDtWVzPiBlc3TDo28gZG9jdW1lbnRhZGFzIGVtIGdpdC1yZXYtbGlzdCgxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjE3NzcKK21zZ2lkICJCbGFtaW5nIGxpbmVzIgorbXNnc3RyICJMaW5oYXMgZGUgY3VscGEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTczCittc2dpZCAiU2hvdyBibGFtZSBlbnRyaWVzIGFzIHdlIGZpbmQgdGhlbSwgaW5jcmVtZW50YWxseSIKK21zZ3N0ciAiIgorIk1vc3RyYXIgZW50cmFkYXMgZGUgY3VscGEgw6AgbWVkaWRhIHF1ZSBmb3JlbSBlbmNvbnRyYWRhcywgaW5jcmVtZW50YWxtZW50ZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1NzQKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJNb3N0YXIgU0hBLTEgZG9zIGNvbW1pdHMgbGltaXRlIGVtIGJyYW5jbyAoUHJlZGVmaW5pw6fDo286IGRlc2F0aXZhZG8pIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjU3NQorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiTsOjbyB0cmF0YXIgb3MgY29tbWl0cyByYWl6IGNvbW8gbGltaXRlcyAoUHJlZGVmaW5pw6fDo286IGRlc2F0aXZhZG8pIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjU3NgorbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIk1vc3RyYXIgZXN0YXTDrXN0aWNhcyBkZSBjdXN0byBkZSBhdGl2aWRhZGUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTc3Cittc2dpZCAiRm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJGb3LDp2FyIGluZm9ybWHDp8OjbyBkZSBwcm9ncmVzc28iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTc4Cittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIk1vc3RyYXIgYSBwb250dWHDp8OjbyBkYXMgZW50cmFkYXMgZGUgY3VscGEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTc5Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bykiCittc2dzdHIgIk1vc3RyYXIgbyBub21lIGRvIGZpY2hlaXJvIG9yaWdpbmFsIChQcmVkZWZpbmnDp8OjbzogYXV0bykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTgwCittc2dpZCAiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJNb3N0cmFyIG7Dum1lcm9zIGRlIGxpbmhhIG9yaWdpbmFpcyAoUHJlZGVmaW5pw6fDo286IGRlc2F0aXZhZG8pIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjU4MQorbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIk1vc3RyYXIgZW0gZm9ybWF0byBwcsOzcHJpbyBwYXJhIHNlciBjb25zdW1vIHBvciB1bWEgbcOhcXVpbmEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTgyCittc2dpZCAiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICJNb3N0cmFyIGVtIGZvcm1hdG8gZGUgcG9yY2VsYW5hIGNvbSBpbmZvcm1hw6fDtWVzIGRlIGNvbW1pdCBwb3IgbGluaGEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTgzCittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVXNhciBvIG1lc21vIG1vZG8gZGUgc2HDrWRhIHF1ZSBnaXQtYW5ub3RhdGUgKFByZWRlZmluacOnw6NvOiBkZXNhdGl2YWRvKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1ODQKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vc3RyYXIgY2FyaW1ibyBkZSBkYXRhL2hvcmEgZW0gYnJ1dG8gKFByZWRlZmluacOnw6NvOiBkZXNhdGl2YWRvKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1ODUKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vc3RyYXIgU0hBMSBsb25nbyBkZSBjb21taXQgKFByZWRlZmluacOnw6NvOiBkZXNhdGl2YWRvKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1ODYKK21zZ2lkICJTdXBwcmVzcyBhdXRob3IgbmFtZSBhbmQgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisiU3VwcmltaXIgbm9tZSBkZSBhdXRvciBlIGNhcmltYm8gZGUgZGF0YS9ob3JhIChQcmVkZWZpbmnDp8OjbzogZGVzYXRpdmFkbykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTg3Cittc2dpZCAiU2hvdyBhdXRob3IgZW1haWwgaW5zdGVhZCBvZiBuYW1lIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJNb3N0cmFyIG8gZW1haWwgZG8gYXV0b3IgZW0gdmV6IGRvIG5vbWUgKFByZWRlZmluacOnw6NvOiBkZXNhdGl2YWRvKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1ODgKK21zZ2lkICJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIKK21zZ3N0ciAiSWdub3JhciBhcyBkaWZlcmVuw6dhcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1OTUKK21zZ2lkICJVc2UgYW4gZXhwZXJpbWVudGFsIGhldXJpc3RpYyB0byBpbXByb3ZlIGRpZmZzIgorbXNnc3RyICJVc2FyIHVtIGhldXLDrXN0aWNhIGV4cGVyaW1lbnRhbCBwYXJhIG1lbGhvcmFyIGRpZmZzIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjU5NworbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAiRGVzcGVuZGVyIGNpY2xvcyBleHRyYSBwYXJhIGVuY29udHJhciB1bWEgbWVsaG9yIGNvcnJlc3BvbmTDqm5jaWEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTk4Cittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICJVc2FyIHJldmlzw7VlcyBkbyA8ZmljaGVpcm8+IGVtIHZleiBkZSBpbnZvY2FyIGdpdC1yZXYtbGlzdCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1OTkKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICJVc2FyIG8gY29udGXDumRvIGRvIDxmaWNoZWlybz4gY29tbyBpbWFnZW0gZmluYWwiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNjAwIGJ1aWx0aW4vYmxhbWUuYzoyNjAxCittc2dpZCAic2NvcmUiCittc2dzdHIgInBvbnR1YcOnw6NvIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjYwMAorbXNnaWQgIkZpbmQgbGluZSBjb3BpZXMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIkxvY2FsaXphciBsaW5oYXMgY29waWFkYXMgZGVudHJvIGUgZW50cmUgZmljaGVpcm9zIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjYwMQorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIkxvY2FsaXphciBsaW5oYXMgbW92aWRhcyBkZW50cm8gZSBlbnRyZSBmaWNoZWlyb3MiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNjAyCittc2dpZCAibixtIgorbXNnc3RyICJuLG0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNjAyCittc2dpZCAiUHJvY2VzcyBvbmx5IGxpbmUgcmFuZ2UgbixtLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIlByb2Nlc3NhciBhcGVuYXMgbyBpbnRlcnZhbG8gZGUgbGluaGFzIG4sbSwgYSBjYW50YXIgZGUgMSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI2NDkKK21zZ2lkICItLXByb2dyZXNzIGNhbid0IGJlIHVzZWQgd2l0aCAtLWluY3JlbWVudGFsIG9yIHBvcmNlbGFpbiBmb3JtYXRzIgorbXNnc3RyICIiCisiLS1wcm9ncmVzcyBuw6NvIHBvZGUgc2VyIHVzYWRvIGNvbSAtLWluY3JlbWVudGFsIG91IGZvcm1hdG9zIGRlIHBvcmNlbGFuYSIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUgbWF4aW11bQorIy4gZGlzcGxheSB3aWR0aCBmb3IgYSByZWxhdGl2ZSB0aW1lc3RhbXAgaW4gImdpdCBibGFtZSIKKyMuIG91dHB1dC4gIEZvciBDIGxvY2FsZSwgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iLCB3aGljaAorIy4gdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdCBhbW9uZyB2YXJpb3VzIGZvcm1zIG9mCisjLiByZWxhdGl2ZSB0aW1lc3RhbXBzLCBidXQgeW91ciBsYW5ndWFnZSBtYXkgbmVlZCBtb3JlIG9yCisjLiBmZXdlciBkaXNwbGF5IGNvbHVtbnMuCisjOiBidWlsdGluL2JsYW1lLmM6MjY5NworbXNnaWQgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iCittc2dzdHIgImjDoSA0IGFub3MgZSAxMSBtZXNlcyBhdHLDoXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNzc3Cittc2dpZCAiLS1jb250ZW50cyBhbmQgLS1yZXZlcnNlIGRvIG5vdCBibGVuZCB3ZWxsLiIKK21zZ3N0ciAiLS1jb250ZW50cyBlIC0tcmV2ZXJzZSBuw6NvIHNlIG1pc3R1cmFtIGJlbS4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNzk3Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbnRlbnRzIHdpdGggZmluYWwgY29tbWl0IG9iamVjdCBuYW1lIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCB1c2FyIC0tY29udGVudHMgY29tIG5vbWUgZGUgb2JqZXRvIGNvbW1pdCBmaW5hbCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI4MDIKK21zZ2lkICItLXJldmVyc2UgYW5kIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgc3BlY2lmaWVkIGxhdGVzdCBjb21taXQiCittc2dzdHIgIiIKKyItLXJldmVyc2UgZSAtLWZpcnN0LXBhcmVudCBqdW50b3MgcmVxdWVyIHF1ZSBzZSBlc3BlY2lmaXF1ZSBvIMO6bHRpbW8gY29tbWl0IgorCisjOiBidWlsdGluL2JsYW1lLmM6MjgyOQorbXNnaWQgIiIKKyItLXJldmVyc2UgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSByYW5nZSBhbG9uZyBmaXJzdC1wYXJlbnQgY2hhaW4iCittc2dzdHIgIiIKKyItLXJldmVyc2UgLS1maXJzdC1wYXJlbnQganVudG9zIHJlcXVlciBpbnRlcnZhbG8gYW8gbG9uZ28gZG8gcHJpbWVpcm8tcGFpIgorCisjOiBidWlsdGluL2JsYW1lLmM6Mjg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHBhdGggJXMgaW4gJXMiCittc2dzdHIgIm8gY2FtaW5obyAlcyBuw6NvIGV4aXN0ZSBlbSAlcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgYmxvYiAlcyBmb3IgcGF0aCAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbGVyIG8gYmxvYiAlcyBkbyBjYW1pbmhvICVzIgorCisjOiBidWlsdGluL2JsYW1lLmM6Mjg3MAorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lIgorbXNnaWRfcGx1cmFsICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIKK21zZ3N0clswXSAibyBmaWNoZWlybyAlcyBzw7MgdGVtICVsdSBsaW5oYSIKK21zZ3N0clsxXSAibyBmaWNoZWlybyAlcyBzw7MgdGVtICVsdSBsaW5oYXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjYKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcMOnw7Vlcz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstbF0gWy1mXSA8YnJhbmNoLW5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9ww6fDtWVzPl0gWy1sXSBbLWZdIDxub21lLXJhbW8+IFs8cG9udG8tZGUtcGFydGlkYT5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI4Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3DDp8O1ZXM+XSBbLXJdICgtZCB8IC1EKSA8bm9tZS1kby1yYW1vPi4uLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyOQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9ww6fDtWVzPl0gKC1tIHwgLU0pIFs8cmFtby1hbnRpZ28+XSA8bm92by1yYW1vPiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcMOnw7Vlcz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMxCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9ww6fDtWVzPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorImEgZWxpbWluYXIgbyByYW1vICclcycgaW50ZWdyYWRvIGVtXG4iCisiICAgICAgICAgJyVzJywgbWFzIGFpbmRhIG7Do28gaW50ZWdyYWRvIGVtIEhFQUQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyJyYW1vICclcycgbsOjbyBlbGltaW5hZG8sIHZpc3RvIHF1ZSBhaW5kYSBuw6NvIGZvaSBpbnRlZ3JhZG8gZW1cbiIKKyIgICAgICAgICAnJXMnLCBhcGVzYXIgZGUgasOhIHRlciBzaWRvIGludGVncmFkbyBlbSBIRUFELiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgcGVzcXVpc2FyIHBlbG8gb2JqZXRvIGNvbW1pdCBkZSAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgcnVuICdnaXQgYnJhbmNoIC1EICVzJy4iCittc2dzdHIgIiIKKyJPIHJhbW8gJyVzJyBuw6NvIGZvaSB0b3RhbG1lbnRlIGludGVncmFkby5cbiIKKyJTZSB0ZW0gYSBjZXJ0ZXphIHF1ZSBvIHF1ZXIgZWxpbWluYXIsIGV4ZWN1dGUgJ2dpdCBicmFuY2ggLUQgJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzkKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJGYWxoYSBhbyBhdHVhbGl6YXIgbyBmaWNoZWlybyBkZSBjb25maWd1cmHDp8OjbyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMTAKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIHVzYXIgLWEgY29tIC1kIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxNgorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIHBlc3F1aXNhciBwZWxvIG9iamV0byBjb21taXQgZGUgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSBicmFuY2ggJyVzJyBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBlbGltaW5hciBvIHJhbW8gJyVzJyBleHRyYcOtZG8gZW0gJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgInJhbW8gZGUgbW9uaXRvcml6YcOnw6NvIHJlbW90byAnJXMnIG7Do28gZW5jb250cmFkby4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgInJhbW8gJyVzJyBuw6NvIGVuY29udHJhZG8uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkVycm8gYSBlbGltaW5hciBvIHJhbW8gZGUgbW9uaXRvcml6YcOnw6NvIHJlbW90byAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRXJybyBhIGVsaW1pbmFyIHJhbW8gJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJSYW1vIGRlIG1vbml0b3JpemHDp8OjbyByZW1vdG8gJXMgZWxpbWluYWRvIChlcmEgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiUmFtbyAlcyBlbGltaW5hZG8gKGVyYSAlcykuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyByZWJhc2VkIGF0ICVzIgorbXNnc3RyICJPIHJhbW8gJXMgZXN0w6EgYSBzZXIgcmViYXNlYWRvIGVtICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgYmlzZWN0ZWQgYXQgJXMiCittc2dzdHIgIk8gcmFtbyAlcyBlc3TDoSBhIHNlciBiaXNzZXRhZG8gZW0gJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDYwCittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIiIKKyJuw6NvIMOpIHBvc3PDrXZlbCBtdWRhciBvIG5vbWUgZG8gcmFtbyBhdHVhbCB2aXN0YSBxdWUgbsOjbyBzZSBlbmNvbnRyYSBudW0gcmFtby4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYnJhbmNoIG5hbWU6ICclcyciCittc2dzdHIgIk5vbWUgZGUgcmFtbyBpbnbDoWxpZG86ICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDg3Cittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIkZhbGhhIGFvIG11ZGFyIG8gbm9tZSBkbyByYW1vIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAiTyByYW1vIGluY29ycmV0YW1lbnRlIGRlbm9taW5hZG8gJyVzJyBtdWRvdSBkZSBub21lIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ5MworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICJPIG5vbWUgZG8gcmFtbyBtdWRvdSBwYXJhICVzLCBtYXMgYSBIRUFEIG7Do28gZXN0w6EgYXR1YWxpemFkYSEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTAyCittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisiTyByYW1vIG11ZG91IGRlIG5vbWUsIG1hcyBhIGF0dWFsaXphw6fDo28gZG8gZmljaGVpcm8gZGUgY29uZmlndXJhw6fDo28gZmFsaG91IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoXG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIHN0cmlwcGVkLlxuIgorbXNnc3RyICIiCisiRWRpdGUgYSBkZXNjcmnDp8OjbyBkbyByYW1vOlxuIgorIiAgJXNcbiIKKyJMaW5oYSBjb21lw6dhZGFzIGNvbSAnJWMnIHNlcsOjbyBpZ25vcmFkYXMuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTUxCittc2dpZCAiR2VuZXJpYyBvcHRpb25zIgorbXNnc3RyICJPcMOnw7VlcyBnZW7DqXJpY2FzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1MworbXNnaWQgInNob3cgaGFzaCBhbmQgc3ViamVjdCwgZ2l2ZSB0d2ljZSBmb3IgdXBzdHJlYW0gYnJhbmNoIgorbXNnc3RyICJhcHJlc2VudGFyIGhhc2ggZSBhc3N1bnRvLCBkdXBsaXF1ZSBwYXJhIHJhbW9zIGEgbW9udGFudGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU0Cittc2dpZCAic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIKK21zZ3N0ciAic3VwcmltaXIgbWVuc2FnZW5zIGluZm9ybWF0aXZhcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTUKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIKK21zZ3N0ciAiY29uZmlndXJhciBtb2RvIGRlIHNlZ3VpbWVudG8gKGNvbnN1bHRlIGdpdC1wdWxsKDEpKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTcKK21zZ2lkICJjaGFuZ2UgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAiYWx0ZXJhciBhIGluZm9ybWHDp8OjbyBkbyByYW1vIGEgbW9udGFudGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU5Cittc2dpZCAidXBzdHJlYW0iCittc2dzdHIgImEgbW9udGFudGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU5Cittc2dpZCAiY2hhbmdlIHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICJhbHRlcmFyIGEgaW5mb3JtYcOnw6NvIGRvIHJhbW8gYSBtb250YW50ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjAKK21zZ2lkICJVbnNldCB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAiUmVtb3ZlciBhIGluZm9ybWHDp8OjbyBkbyByYW1vIGEgbW9udGFudGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTYxCittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICJ1c2FyIHNhw61kYSBjb2xvcmlkYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjIKK21zZ2lkICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJhdHVhciBzb2JyZSByYW1vcyBkZSBtb25pdG9yaXphw6fDo28gcmVtb3RvcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjQgYnVpbHRpbi9icmFuY2guYzo1NjYKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJpbXByaW1pciBhcGVuYXMgcmFtb3MgcXVlIGNvbnRlbmhhbSBvIGNvbW1pdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjUgYnVpbHRpbi9icmFuY2guYzo1NjcKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJpbXByaW1pciBhcGVuYXMgcmFtb3MgcXVlIG7Do28gY29udGVuaGFtIG8gY29tbWl0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU3MAorbXNnaWQgIlNwZWNpZmljIGdpdC1icmFuY2ggYWN0aW9uczoiCittc2dzdHIgIkHDp8O1ZXMgZXNwZWPDrWZpY2FzIGRvIGdpdC1icmFuY2g6IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU3MQorbXNnaWQgImxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICJsaXN0YXIgcmFtb3MgZGUgbW9uaXRvcml6YcOnw6NvIHJlbW90b3MgZSByYW1vcyBsb2NhaXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTczCittc2dpZCAiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giCittc2dzdHIgImVsaW1pbmFyIHVtIHJhbW8gdG90YWxtZW50ZSBpbnRlZ3JhZG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTc0Cittc2dpZCAiZGVsZXRlIGJyYW5jaCAoZXZlbiBpZiBub3QgbWVyZ2VkKSIKK21zZ3N0ciAiZWxpbWluYXIgdW0gcmFtbyAobWVzbW8gcXVlIG7Do28gdGVuaGEgc2lkbyBpbnRlZ3JhZG8pIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU3NQorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJtb3ZlciBvdSBtdWRhciBvIG5vbWUgZGUgdW0gcmFtbyBlIG8gc2V1IHJlZmxvZyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NzYKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJtb3ZlciBvdSBtdWRhciBvIG5vbWUgZGUgdW0gcmFtbywgbWVzbW8gcXVlIG8gZGVzdGlubyBqw6EgZXhpc3RhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU3NworbXNnaWQgImxpc3QgYnJhbmNoIG5hbWVzIgorbXNnc3RyICJsaXN0YXIgb3Mgbm9tZXMgZG9zIHJhbW9zIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU3OAorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICJjcmlhciByZWZsb2cgZG8gcmFtbyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODAKK21zZ2lkICJlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCIKK21zZ3N0ciAiZWRpdGFyIGEgZGVzY3Jpw6fDo28gZG8gcmFtbyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODEKK21zZ2lkICJmb3JjZSBjcmVhdGlvbiwgbW92ZS9yZW5hbWUsIGRlbGV0aW9uIgorbXNnc3RyICJmb3LDp2FyIGNyaWHDp8OjbywgbW92ZXIvbXVkYXIgbyBub21lIG91IGV4Y2x1c8OjbyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODIKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAiaW1wcmltaXIgYXBlbmFzIG9zIHJhbW9zIHF1ZSBmb3JhbSBpbnRlZ3JhZG9zIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4MworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAiaW1wcmltaXIgYXBlbmFzIG9zIHJhbW9zIHF1ZSBuw6NvIGZvcmFtIGludGVncmFkb3MiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTg0Cittc2dpZCAibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJsaXN0YXIgb3MgcmFtb3MgZW0gY29sdW5hcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODUgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOCBidWlsdGluL3RhZy5jOjQyNgorbXNnaWQgImtleSIKK21zZ3N0ciAiY2hhdmUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTg2IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzkgYnVpbHRpbi90YWcuYzo0MjcKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgIm5vbWUgZG8gY2FtcG8gcGVsbyBxdWFsIG9yZGVybmFyIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4OCBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQxIGJ1aWx0aW4vbm90ZXMuYzo0MDQKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDcgYnVpbHRpbi9ub3Rlcy5jOjU2NyBidWlsdGluL25vdGVzLmM6NTcwCisjOiBidWlsdGluL3RhZy5jOjQyOQorbXNnaWQgIm9iamVjdCIKK21zZ3N0ciAib2JqZXRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4OQorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAiaW1wcmltaXIgYXBlbmFzIG9zIHJhbW9zIGRvIG9iamV0byIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTEgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NyBidWlsdGluL3RhZy5jOjQzNAorbXNnaWQgInNvcnRpbmcgYW5kIGZpbHRlcmluZyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSIKK21zZ3N0ciAib3JkZW5hciBlIGZpbHRyYXIgc8OjbyBpbnNlbnPDrXZlaXMgYSBtYWnDunNjdWxhcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTIgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNyBidWlsdGluL3RhZy5jOjQzMworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IgorbXNnc3RyICJmb3JtYXRvIGEgdXNhciBuYSBzYcOtZGEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjExCittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIkZhbGhhIGFvIHJlc29sdmVyIEhFQUQgbnVtYSByZWZlcsOqbmNpYSB2w6FsaWRhLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTUgYnVpbHRpbi9jbG9uZS5jOjcyNAorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICJIRUFEIG7Do28gZW5jb250cmFkYSBlbSByZWZzL2hlYWRzISIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzgKK21zZ2lkICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIGUgLS12ZXJib3NlIHPDo28gaW5jb21wYXTDrXZlaXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ5IGJ1aWx0aW4vYnJhbmNoLmM6NzAxCittc2dpZCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgIm5vbWUgZG8gcmFtbyDDqSBvYnJpZ2F0w7NyaW8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Njc3Cittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgYXRyaWJ1aXIgZGVzY3Jpw6fDo28gYSBIRUFEIGRlc3RhY2FkYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2ODIKK21zZ2lkICJjYW5ub3QgZWRpdCBkZXNjcmlwdGlvbiBvZiBtb3JlIHRoYW4gb25lIGJyYW5jaCIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZWRpdGFyIGEgZGVzY3Jpw6fDo28gZGUgbWFpcyBkbyBxdWUgdW0gcmFtbyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWl0IG9uIGJyYW5jaCAnJXMnIHlldC4iCittc2dzdHIgIkFpbmRhIG7Do28gaMOhIGNvbW1pdHMgbm8gcmFtbyAnJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gYnJhbmNoIG5hbWVkICclcycuIgorbXNnc3RyICJOw6NvIGjDoSBuZW5odW0gcmFtbyBkZW5vbWluYWRvICclcycuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcwNworbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgImRlbWFzaWFkb3MgcmFtb3MgcGFyYSB1bWEgb3BlcmHDp8OjbyBkZSBtdWRhbsOnYSBkZSBub21lIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcxMgorbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIHRvIHNldCBuZXcgdXBzdHJlYW0iCittc2dzdHIgImRlbWFzaWFkb3MgcmFtb3MgcGFyYSBkZWZpbmlyIG5vdm8gcmFtbyBhIG1vbnRhbnRlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyJuw6NvIGZvaSBwb3Nzw612ZWwgZGVmaW5pciAlcyBjb21vIHJhbW8gYSBtb250YW50ZSBkZSBIRUFEIHZpc3RvIHF1ZSBlc3RhIG7Do28gIgorImFwb250YSBwYXJhIHVtIHJhbW8uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcxOSBidWlsdGluL2JyYW5jaC5jOjc0MSBidWlsdGluL2JyYW5jaC5jOjc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaCAnJXMnIgorbXNnc3RyICJvIHJhbW8gJyVzJyBuw6NvIGV4aXN0ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIm8gcmFtbyAnJXMnIG7Do28gZXhpc3RlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczNQorbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIHRvIHVuc2V0IHVwc3RyZWFtIgorbXNnc3RyICJkZW1hc2lhZG9zIHJhbW9zIHBhcmEgcmVtb3ZlciBhIGRlZmluacOnw6NvIGRlIHJhbW8gYSBtb250YW50ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzkKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisibsOjbyBmb2kgcG9zc8OtdmVsIHJlbW92ZXIgYSBkZWZpbmnDp8OjbyBkZSByYW1vIGEgbW9udGFudGUgZGUgSEVBRCB2aXN0byBxdWUgIgorImVzdGEgbsOjbyBhcG9udGEgcGFyYSB1bSByYW1vLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIgorbXNnc3RyICJPIHJhbW8gJyVzJyBuw6NvIHRlbSBpbmZvcm1hw6fDo28gc29icmUgbyByYW1vIGEgbW9udGFudGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU5Cittc2dpZCAiaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBjcmVhdGUgJ0hFQUQnIG1hbnVhbGx5IgorbXNnc3RyICJuw6NvIGZheiBzZW50aWRvIGNyaWFyICdIRUFEJyBtYW51YWxtZW50ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjUKK21zZ2lkICItYSBhbmQgLXIgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IG1ha2Ugc2Vuc2Ugd2l0aCBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICIiCisiYXMgb3DDp8O1ZXMgLWEgZSAtciBkZSAnZ2l0IGJyYW5jaCcgbsOjbyBmYXplbSBzZW50aWRvIGNvbSB1bSBub21lIGRlIHJhbW8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLS1zZXQtdXBzdHJlYW0gZmxhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIENvbnNpZGVyIHVzaW5nIC0tIgorInRyYWNrIG9yIC0tc2V0LXVwc3RyZWFtLXRvXG4iCittc2dzdHIgIiIKKyJBIG9ww6fDo28gLS1zZXQtdXBzdHJlYW0gw6kgb2Jzb2xldGEgZSBzZXLDoSByZW1vdmlkYS4gQ29uc2lkZXJlIG8gdXNvIGRlIC0tIgorInRyYWNrIG91IC0tc2V0LXVwc3RyZWFtLXRvXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3Ugd2FudGVkIHRvIG1ha2UgJyVzJyB0cmFjayAnJXMnLCBkbyB0aGlzOlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiU2UgcXVlciBxdWUgJyVzJyBzaWdhICclcycsIGZhw6dhOlxuIgorIlxuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAiJXMgZXN0w6EgY29ycmV0b1xuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjU4Cittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAiw4kgbmVjZXNzw6FyaW8gdW0gcmVwb3NpdMOzcmlvIHBhcmEgY3JpYXIgdW0gYnVuZGxlLiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2MgorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAiw4kgcHJlY2lzbyB1bSByZXBvc2l0w7NyaW8gcGFyYSBkZXNlbXBhY290YXIuIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTEzCittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHBhdGg+XSA8b2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0aXBvPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PGNhbWluaG8+XSA8b2JqZXRvPiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjUxNAorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NTEKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIjx0aXBvPiBwb2RlIHNlciB1bSBkZTogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NTIKK21zZ2lkICJzaG93IG9iamVjdCB0eXBlIgorbXNnc3RyICJtb3N0cmFyIHRpcG8gZG8gb2JqZXRvIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTUzCittc2dpZCAic2hvdyBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAibW9zdHJhciB0YW1hbmhvIGRvIG9iamV0byIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU1NQorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAic2FpciBjb20gcmV0b3JubyB6ZXJvIHF1YW5kbyBuw6NvIGhvdXZlciBlcnJvcyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU1NgorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJtb3N0cmFyIGNvbnRlw7pkbyBkbyBvYmpldG8gY29tIGltcHJlc3PDo28gYm9uaXRhIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTU4Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgImV4ZWN1dGFyIHRleHRjb252IG5vIGNvbnRlw7pkbyBkZSBvYmpldG9zIGJsb2IiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NjAKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gZmlsdGVycyBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJwYXJhIG9iamV0b3MgYmxvYiwgY29ycmVyIGZpbHRyb3Mgc29icmUgbyBjb250ZcO6ZG8gZG8gb2JqZXRvIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTYxIGdpdC1zdWJtb2R1bGUuc2g6OTQzCittc2dpZCAiYmxvYiIKK21zZ3N0ciAiYmxvYiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU2MgorbXNnaWQgInVzZSBhIHNwZWNpZmljIHBhdGggZm9yIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorbXNnc3RyICJ1c2FyIHVtIGNhbWluaG8gZXNwZWPDrWZpY28gcGFyYSAtLXRleHRjb252Ly0tZmlsdGVycyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU2NAorbXNnaWQgImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIKK21zZ3N0ciAicGVybWl0aXIgcXVlIC1zIGUgLXQgZnVuY2lvbmVtIGNvbSBvYmpldG9zIGRhbmlmaWNhZG9zL2NvcnJvbXBpZG9zIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTY1Cittc2dpZCAiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IgorbXNnc3RyICJjYXJyZWdhciBhIHNhw61kYSBkZSAtLWJhdGNoIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTY3Cittc2dpZCAic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJtb3N0cmFyIGluZm9ybWHDp8OjbyBlIGNvbnRlw7pkbyBkb3Mgb2JqZXRvcyBmb3JuZWNpZG9zIG5hIGVudHJhZGEgcGFkcsOjbyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU3MAorbXNnaWQgInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibW9zdHJhciBpbmZvcm1hw6fDo28gc29icmUgb3Mgb2JqZXRvcyBmb3JuZWNpZG9zIG5hIGVudHJhZGEgcGFkcsOjbyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU3MworbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAiIgorInNlZ3VpciBsaWdhw6fDtWVzIHNpbWLDs2xpY2Egbm8gaW50ZXJpb3IgZGEgw6Fydm9yZSAodXNhZG8gY29tIC0tYmF0Y2ggb3UgLS0iCisiYmF0Y2gtY2hlY2spIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTc1Cittc2dpZCAic2hvdyBhbGwgb2JqZWN0cyB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjayIKK21zZ3N0ciAibW9zdHJhciB0b2RvcyBvcyBvYmpldG9zIGNvbSAtLWJhdGNoIG91IC0tYmF0Y2gtY2hlY2siCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjExCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXRyaWJ1dG8+Li4uXSBbLS1dIDxjYW1pbmhvPi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTIKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXRyaWJ1dG8+Li4uXSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTkKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgImFwcmVzZW50YXIgdG9kb3Mgb3MgYXRyaWJ1dG9zIGRlZmluaWRvcyBubyBmaWNoZWlybyIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjAKK21zZ2lkICJ1c2UgLmdpdGF0dHJpYnV0ZXMgb25seSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAidXNhciAuZ2l0YXR0cmlidXRlcyBhcGVuYXMgYSBwYXJ0aXIgZG8gw61uZGljZSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjEgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTgKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGVyIG9zIG5vbWVzIGRvcyBmaWNoZWlyb3MgZGEgZW50cmFkYSBwYWRyw6NvIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI0Cittc2dpZCAidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgInRlcm1pbmFyIHJlZ2lzdG9zIGRhIGVudHJhZGEgZSBkYSBzYcOtZGEgY29tIHVtIGNhcsOhY3RlciBOVUwiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTggYnVpbHRpbi9jaGVja291dC5jOjExNTggYnVpbHRpbi9nYy5jOjM1MgorbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAic3VwcmltaXIgaW5mb3JtYcOnw6NvIGRlIHByb2dyZXNzbyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNgorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICJtb3N0cmFyIGNhbWluaG9zIGRlIGVudHJhZGEgc2VtIGNvcnJlc3BvbmTDqm5jaWEiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjgKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAiaWdub3JhciBvIMOtbmRpY2UgYW8gdmVyaWZpY2FyIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE1NAorbXNnaWQgImNhbm5vdCBzcGVjaWZ5IHBhdGhuYW1lcyB3aXRoIC0tc3RkaW4iCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGVzcGVjaWZpY2FyIGNhbWluaG9zIGNvbSAtLXN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE1NworbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICIteiBzw7MgZmF6IHNlbnRpZG8gY29tIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTU5Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgIm5lbmh1bSBjYW1pbmhvIGVzcGVjaWZpY2FkbyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAiLS1xdWlldCBzw7Mgw6kgdsOhbGlkbyBjb20gdW0gw7puaWNvIGNhbWluaG8iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY1Cittc2dpZCAiY2Fubm90IGhhdmUgYm90aCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIHVzYXIgLS1xdWlldCBlIC0tdmVyYm9zZSBzaW11bHRhbmVhbWVudGUiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY4Cittc2dpZCAiLS1ub24tbWF0Y2hpbmcgaXMgb25seSB2YWxpZCB3aXRoIC0tdmVyYm9zZSIKK21zZ3N0ciAiLS1ub24tbWF0Y2hpbmcgc8OzIMOpIHbDoWxpZG8gY29tIC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OAorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcMOnw7Vlcz5dIDxjb250YWN0bz4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjEzCittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgInRhbWLDqW0gbGVyIGNvbnRhY3RvcyBkYSBlbnRyYWRhIHBhZHLDo28iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb250YWN0OiAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBjb250YWN0bzogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjQ3Cittc2dpZCAibm8gY29udGFjdHMgc3BlY2lmaWVkIgorbXNnc3RyICJuZW5odW0gY29udGFjdG8gZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTI3Cittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBjaGVja291dC1pbmRleCBbPG9ww6fDtWVzPl0gWy0tXSBbPGZpY2hlaXJvPi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNDQKK21zZ2lkICJzdGFnZSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzIG9yIGFsbCIKK21zZ3N0ciAic3RhZ2UgZGV2ZSBzZXIgdW0gbsO6bWVybyBlbnRyZSAxIGUgMyBvdSBvIHBhcsOibWV0cm8gYWxsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTYwCittc2dpZCAiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiCittc2dzdHIgImV4dHJhaXIgdG9kb3Mgb3MgZmljaGVpcm9zIHByZXNlbnRlcyBubyDDrW5kaWNlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTYxCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICJmb3LDp2FyIHN1YnN0aXR1acOnw6NvIGRvcyBmaWNoZWlyb3MgZXhpc3RlbnRlcyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2MworbXNnaWQgIm5vIHdhcm5pbmcgZm9yIGV4aXN0aW5nIGZpbGVzIGFuZCBmaWxlcyBub3QgaW4gaW5kZXgiCittc2dzdHIgIiIKKyJuw6NvIG1vc3RyYXIgYXZpc28gcGFyYSBmaWNoZWlyb3MgZXhpc3RlbnRlcyBlIGZpY2hlaXJvcyBuw6NvIHByZXNlbnRlcyBubyAiCisiw61uZGljZSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NQorbXNnaWQgImRvbid0IGNoZWNrb3V0IG5ldyBmaWxlcyIKK21zZ3N0ciAibsOjbyBleHRyYWlyIG5vdm9zIGZpY2hlaXJvcyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NworbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICJhdHVhbGl6YXIgaW5mb3JtYcOnw6NvIGRlIHN0YXQgbm8gZmljaGVpcm8gZGUgw61uZGljZSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGVyIGxpc3RhIGRlIGNhbWluaG9zIGRhIGVudHJhZGEgcGFkcsOjbyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MworbXNnaWQgIndyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcyIKK21zZ3N0ciAiZXNjcmV2ZXIgbyBjb250ZcO6ZG8gZW0gZmljaGVpcm9zIHRlbXBvcsOhcmlvcyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NCBidWlsdGluL2NvbHVtbi5jOjMwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjM1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzgKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NDQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk4MAorIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ3MgorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAiY2FkZWlhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc1Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAicHJlY2VkZXIgPGNhZGVpYT4gYW8gY3JpYXIgZmljaGVpcm9zIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc3Cittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgImNvcGlhciBvcyBmaWNoZWlyb3MgZG8gZXN0w6FnaW8gaW5kaWNhZG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNworbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8b3DDp8O1ZXM+XSA8cmFtbz4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyOAorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8b3DDp8O1ZXM+XSBbPHJhbW8+XSAtLSA8ZmljaGVpcm8+Li4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgIm8gY2FtaW5obyAnJXMnIG7Do28gdGVtIGEgbm9zc2EgdmVyc8OjbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NSBidWlsdGluL2NoZWNrb3V0LmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIm8gY2FtaW5obyAnJXMnIG7Do28gdGVtIGEgdmVyc8OjbyBkZWxlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJvIGNhbWluaG8gJyVzJyBuw6NvIHRlbSB0b2RhcyBhcyB2ZXJzw7VlcyBuZWNlc3PDoXJpYXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJvIGNhbWluaG8gJyVzJyBuw6NvIHRlbSBhcyB2ZXJzw7VlcyBuZWNlc3PDoXJpYXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgImNhbWluaG8gJyVzJzogbsOjbyDDqSBwb3Nzw612ZWwgaW50ZWdyYXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGFkaWNpb25hciBvcyByZXN1bHRhZG9zIGRhIGludGVncmHDp8OjbyBkZSAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjY5IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzIgYnVpbHRpbi9jaGVja291dC5jOjI3NQorIzogYnVpbHRpbi9jaGVja291dC5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiCittc2dzdHIgIiclcycgbsOjbyBwb2RlIHNlciB1c2FkbyBjb20gY2FtaW5ob3MgZW0gYXR1YWxpemHDp8OjbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI4MSBidWlsdGluL2NoZWNrb3V0LmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJyVzJyBuw6NvIHBvZGUgc2VyIHVzYWRvIGNvbSAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBhdHVhbGl6YXIgb3MgY2FtaW5ob3MgZSBtdWRhciBwYXJhIG8gcmFtbyAnJXMnIGFvIG1lc21vIHRlbXBvLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM1OCBidWlsdGluL2NoZWNrb3V0LmM6MzY1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAibyBjYW1pbmhvICclcycgbsOjbyBmb2kgaW50ZWdyYWRvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTEzCittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgInByaW1laXJvIGRldmUgcmVzb2x2ZXIgbyDDrW5kaWNlIGF0dWFsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBlZmV0dWFyIHJlZmxvZyBkZSAnJXMnOiAlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njg1Cittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIkhFQUQgZXN0w6EgYWdvcmEgZW0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2ODkgYnVpbHRpbi9jbG9uZS5jOjY3OAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgSEVBRCIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGF0dWFsaXphciBIRUFEIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlJlcG9yIHJhbW8gJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICJKw6EgZW0gJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGFuZCByZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJNdWRvdSBwYXJhIGUgcmVww7RzIG8gcmFtbyAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MDIgYnVpbHRpbi9jaGVja291dC5jOjEwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiTXVkb3UgcGFyYSBvIG5vdm8gcmFtbyAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiTXVkb3UgcGFyYSBvIHJhbW8gJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4gZSBtYWlzICVkLlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dpZF9wbHVyYWwgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzBdICIiCisiQXZpc286IGRlaXhhICVkIGNvbW1pdCBwYXJhIHRyw6FzLCBuw6NvIGxpZ2FkbyBhIG5lbmh1bSByYW1vOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMV0gIiIKKyJBdmlzbzogZGVpeGEgJWQgY29tbWl0cyBwYXJhIHRyw6FzLCBuw6NvIGxpZ2Fkb3MgYSBuZW5odW0gcmFtbzpcbiIKKyJcbiIKKyIlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAiIgorIlNlIGRlc2VqYSBtYW50w6otbG8sIGNyaWFuZG8gdW0gbm92byByYW1vLCBhZ29yYSBzZXJpYSB1bWEgYm9hIGFsdHVyYVxuIgorInBhcmEgZmF6w6otbG8gY29tOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxub21lLWRvLW5vdm8tcmFtbz4gJXNcbiIKKyJcbiIKK21zZ3N0clsxXSAiIgorIlNlIGRlc2VqYSBtYW50w6otbG9zLCBjcmlhbmRvIHVtIG5vdm8gcmFtbywgYWdvcmEgc2VyaWEgdW1hIGJvYSBhbHR1cmFcbiIKKyJwYXJhIGZhesOqLWxvIGNvbTpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bm9tZS1kby1ub3ZvLXJhbW8+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4MTYKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICJlcnJvIGludGVybm8gZHVyYW50ZSBvIGN1cnNvIGRlIHJldmlzw7VlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgyMAorbXNnaWQgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIgorbXNnc3RyICJBIHBvc2nDp8OjbyBhbnRlcmlvciBkZSBIRUFEIGVyYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg0NyBidWlsdGluL2NoZWNrb3V0LmM6MTA4NQorbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIkVzdMOhIG51bSByYW1vIGFpbmRhIG7Do28gY3JpYWRvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCwgJWQgZ2l2ZW4uIgorbXNnc3RyICJlc3BlcmF2YS1zZSBhcGVuYXMgdW1hIHJlZmVyw6puY2lhLCAlZCBmb3JuZWNpZGFzLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMzEgYnVpbHRpbi93b3JrdHJlZS5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgInJlZmVyw6puY2lhIGludsOhbGlkYTogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAiYSByZWZlcsOqbmNpYSBuw6NvIMOpIHVtYSDDoXJ2b3JlOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwOTkKK21zZ2lkICJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAibsOjbyBwb2RlbSBzZXIgdXNhZG9zIGNhbWluaG9zIGFvIG11ZGFyIGRlIHJhbW8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTAyIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIiclcycgbsOjbyBwb2RlIHNlciB1c2FkbyBhbyBtdWRhciBkZSByYW1vIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTExMCBidWlsdGluL2NoZWNrb3V0LmM6MTExMyBidWlsdGluL2NoZWNrb3V0LmM6MTExOAorIzogYnVpbHRpbi9jaGVja291dC5jOjExMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIiclcycgbsOjbyBwb2RlIHNlciB1c2FkbyBjb20gJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0ICclcyciCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIG11ZGFyIGRlIHJhbW8gcGFyYSAnJXMnLCB2aXN0byBxdWUgbsOjbyDDqSB1bSBjb21taXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTU5IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTYxIGJ1aWx0aW4vY2xvbmUuYzoxMTEKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY1IGJ1aWx0aW4vcmVtb3RlLmM6MTY3IGJ1aWx0aW4vd29ya3RyZWUuYzozMjUKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMjcKK21zZ2lkICJicmFuY2giCittc2dzdHIgInJhbW8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTYwCittc2dpZCAiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giCittc2dzdHIgImNyaWFyIGUgZXh0cmFpciB1bSBub3ZvIHJhbW8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTYyCittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAiY3JpYXIvcmVwb3IgZSBleHRyYWlyIHVtIHJhbW8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTYzCittc2dpZCAiY3JlYXRlIHJlZmxvZyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAiY3JpYXIgcmVmbG9nIGRvIG5vdm8gcmFtbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNjQgYnVpbHRpbi93b3JrdHJlZS5jOjMyOQorbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAiZGVzdGFjYXIgSEVBRCBubyBjb21taXQgaW5kaWNhZG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTY1Cittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgImRlZmluaXIgYSBpbmZvcm1hw6fDo28gZG8gcmFtbyBhIG1vbnRhbnRlIGRvIG5vdm8gcmFtbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNjcKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICJub3ZvLXJhbW8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTY3Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICJub3ZvIHJhbW8gc2VtIHBhaSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNjgKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgImV4dHJhaXIgYSBub3NzYSB2ZXJzw6NvIGRvcyBmaWNoZWlyb3MgbsOjbyBpbnRlZ3JhZG9zIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE3MAorbXNnaWQgImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICJleHRyYWlyIGEgdmVyc8OjbyBkZWxlcyBkb3MgZmljaGVpcm9zIG7Do28gaW50ZWdyYWRvcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNzIKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAiZm9yw6dhciBleHRyYcOnw6NvIChkZXNjYXJ0YXIgbW9kaWZpY2HDp8O1ZXMgbG9jYWlzKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNzMKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAicmVhbGl6YXIgdW1hIGludGVncmHDp8OjbyBjb20gMyBwb250b3MgY29tIG8gbm92byByYW1vIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE3NCBidWlsdGluL21lcmdlLmM6MjM0Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICJhdHVhbGl6YXIgZmljaGVpcm9zIGlnbm9yYWRvcyAocHJlZGVmaW5pw6fDo28pIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE3NSBidWlsdGluL2xvZy5jOjE0NzMgcGFyc2Utb3B0aW9ucy5oOjI1MQorbXNnaWQgInN0eWxlIgorbXNnc3RyICJlc3RpbG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTc2Cittc2dpZCAiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIKK21zZ3N0ciAiZXN0aWxvIGRlIGNvbmZsaXRvIChtZXJnZSBvdSBkaWZmMykiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTc5Cittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICJuw6NvIHJlc3RyaW5naXIgZXNwZWNpZmljYWRvcmVzIGRlIGNhbWluaG8gYSBlbnRyYWRhcyBlc3BhcnNhcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExODEKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBjaGVja291dCA8bm8tc3VjaC1icmFuY2g+JyIKK21zZ3N0ciAidGVudGFyIGFkaXZpbmhhciAnZ2l0IGNoZWNrb3V0IDxyYW1vLWluZXhpc3RlbnRlPiciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTgzCittc2dpZCAiZG8gbm90IGNoZWNrIGlmIGFub3RoZXIgd29ya3RyZWUgaXMgaG9sZGluZyB0aGUgZ2l2ZW4gcmVmIgorbXNnc3RyICIiCisibsOjbyB2ZXJpZmljYXIgc2Ugb3V0cmEgw6Fydm9yZSBkZSB0cmFiYWxobyBjb250w6ltIGEgcmVmZXLDqm5jaWEgZm9ybmVjaWRhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE4NyBidWlsdGluL2Nsb25lLmM6NzggYnVpbHRpbi9mZXRjaC5jOjExOQorIzogYnVpbHRpbi9tZXJnZS5jOjIzMSBidWlsdGluL3B1bGwuYzoxMTcgYnVpbHRpbi9wdXNoLmM6NTM5CisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3MgorbXNnaWQgImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiZm9yw6dhciBpbmZvcm1hw6fDo28gZGUgcHJvZ3Jlc3NvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIyNAorbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWIsIC1CIGUgLS1vcnBoYW4gc8OjbyBtdXR1YW1lbnRlIGV4Y2x1c2l2b3MiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjQxCittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICItLXRyYWNrIHJlcXVlciB1bSBub21lIGR1bSByYW1vIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI0NgorbXNnaWQgIk1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAiRmFsdGEgdW0gbm9tZSBkdW0gcmFtbzsgdGVudGUgLWIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjgyCittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgImVzcGVjaWZpY2HDp8OjbyBkZSBjYW1pbmhvIGludsOhbGlkYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLlxuIgorIkRpZCB5b3UgaW50ZW5kIHRvIGNoZWNrb3V0ICclcycgd2hpY2ggY2FuIG5vdCBiZSByZXNvbHZlZCBhcyBjb21taXQ/IgorbXNnc3RyICIiCisiTsOjbyDDqSBwb3Nzw612ZWwgYXR1YWxpemFyIG9zIGNhbWluaG8gZSBtdWRhciBwYXJhIG8gcmFtbyAnJXMnIGFvIG1lc21vICIKKyJ0ZW1wby5cbiIKKyJQcmV0ZW5kaWEgZXh0cmFpciAnJXMnIG8gcXVhbCBuw6NvIHBvZGUgc2VyIHJlc29sdmlkbyBjb21vIGNvbW1pdD8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBuw6NvIGFjZWl0YSB1bSBjYW1pbmhvIGNvbW8gYXJndW1lbnRvICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjk4Cittc2dpZCAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgZSAtLW1lcmdlIHPDo28gaW5jb21wYXTDrXZlaXNcbiIKKyJkdXJhbnRlIGEgZXh0cmHDp8OjbyBkbyDDrW5kaWNlLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjI1Cittc2dpZCAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYWRyw6NvPl0gWy14IHwgLVhdIFstLV0gPGNhbWluaG9zPi4uLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIkEgcmVtb3ZlciAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgIlJlbW92ZXJpYSAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJBIGlnbm9yYXIgbyByZXBvc2l0w7NyaW8gJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJJZ25vcmFyaWEgbyByZXBvc2l0w7NyaW8gJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgImZhbGhhIGFvIHJlbW92ZXIgJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOTcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZ1xuIgorbXNnc3RyICIiCisiQWp1ZGEgZGUgbGluaGEgZGUgY29tYW5kb3M6XG4iCisiMSAgICAgICAgICAtIHNlbGVjaW9uYXIgdW0gaXRlbSBudW1lcmFkb1xuIgorImZvbyAgICAgICAgLSBzZWxlY2lvbmFyIGl0ZW0gYmFzZWFkbyBubyBwcmVmaXhvIMO6bmljb1xuIgorIiAgICAgICAgICAgLSAodmF6aW8pIG7Do28gc2VsZWNpb25hIG5hZGFcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIHNpbmdsZSBpdGVtXG4iCisiMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zXG4iCisiMi0zLDYtOSAgICAtIHNlbGVjdCBtdWx0aXBsZSByYW5nZXNcbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIi0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXNcbiIKKyIqICAgICAgICAgIC0gY2hvb3NlIGFsbCBpdGVtc1xuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmdcbiIKK21zZ3N0ciAiIgorIkFqdWRhIGRlIGxpbmhhIGRlIGNvbWFuZG9zOlxuIgorIjEgICAgICAgICAgLSBzZWxlY2lvbmFyIHVtIMO6bmljbyBpdGVtXG4iCisiMy01ICAgICAgICAtIHNlbGVjaW9uYXIgdW0gaW50ZXJ2YWxvIGRlIGl0ZW1zXG4iCisiMi0zLDYtOSAgICAtIHNlbGVjaW9uYXIgbcO6bHRpcGxvcyBpbnRlcnZhbG9zXG4iCisiZm9vICAgICAgICAtIHNlbGVjaW9uYXIgaXRlbSBiYXNlYWRvIG5vIHByZWZpeG8gw7puaWNvXG4iCisiLS4uLiAgICAgICAtIGRlc3NlbGVjaW9uYXIgaXRlbnMgZXNwZWNpZmljYWRvc1xuIgorIiogICAgICAgICAgLSBlc2NvbGhlciB0b2RvcyBvcyBpdGVuc1xuIgorIiAgICAgICAgICAgLSAodmF6aW8pIGNvbmNsdWlyIHNlbGXDp8Ojb1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTE3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTg5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU5NAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/XG4iCittc2dzdHIgIk8gcXXDqiAoJXMpP1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIKK21zZ3N0ciAiSW50cm9kdXphIHBhZHLDtWVzIGEgaWdub3Jhcj4+ICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBDYW5ub3QgZmluZCBpdGVtcyBtYXRjaGVkIGJ5OiAlcyIKK21zZ3N0ciAiQVZJU086IG7Do28gZm9yYW0gZW5jb250cmFkb3MgaXRlbnMgY29ycmVzcG9uZGVudGVzIGE6ICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzE3Cittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAiU2VsZWNpb25lIGl0ZW5zIHBhcmEgZWxpbWluYXIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc1OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiUmVtb3ZlciAlcyBbeS9OXT8gIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzgzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJCeWUuXG4iCittc2dzdHIgIkFkZXVzLlxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzkxCittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gY29tZcOnYXIgYSBsaW1wYXJcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gZXhjbHVpciBpdGVucyBkYSBlbGltaW5hw6fDo29cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWNpb25hciBpdGVucyBwYXJhIHNlcmVtIGVsaW1pbmFkb3MgcG9yIG7Dum1lcm9cbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0gY29uZmlybWFyIGNhZGEgZWxpbWluYcOnw6NvIChjb21vIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gcGFyYXIgbGltcGV6YVxuIgorImhlbHAgICAgICAgICAgICAgICAgLSBlc3RhIGFqdWRhXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGFqdWRhIHBhcmEgc2VsZcOnw6NvIGVtIGxpbmhhIGRlIGNvbWFuZG9zIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODE4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTczNgorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiBDb21hbmRvcyAqKioiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzMzCittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgIkUgYWdvcmEiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MjcKK21zZ2lkICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIKK21zZ2lkX3BsdXJhbCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbXM6IgorbXNnc3RyWzBdICJSZW1vdmVyaWEgbyBzZWd1aW50ZSBpdGVtOiIKK21zZ3N0clsxXSAiUmVtb3ZlcmlhIG9zIHNlZ3VpbnRlcyBpdGVuczoiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDQKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAiTsOjbyBow6EgbWFpcyBmaWNoZWlyb3MgcG9yIGxpbXBhciwgYSB0ZXJtaW5hci4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NzUKK21zZ2lkICJkbyBub3QgcHJpbnQgbmFtZXMgb2YgZmlsZXMgcmVtb3ZlZCIKK21zZ3N0ciAibsOjbyBpbXByaW1pciBvcyBub21lcyBkb3MgZmljaGVpcm9zIHJlbW92aWRvcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg3NworbXNnaWQgImZvcmNlIgorbXNnc3RyICJmb3LDp2FyIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODc4Cittc2dpZCAiaW50ZXJhY3RpdmUgY2xlYW5pbmciCittc2dzdHIgImxpbXBlemEgaW50ZXJhdGl2YSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg4MAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAicmVtb3ZlciBkaXJldMOzcmlvcyBpbnRlaXJvcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg4MSBidWlsdGluL2Rlc2NyaWJlLmM6NDQ5IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NTEKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjMgYnVpbHRpbi9scy1maWxlcy5jOjUzOSBidWlsdGluL25hbWUtcmV2LmM6MzQ4CisjOiBidWlsdGluL25hbWUtcmV2LmM6MzUwIGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzYKK21zZ2lkICJwYXR0ZXJuIgorbXNnc3RyICJwYWRyw6NvIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODgyCittc2dpZCAiYWRkIDxwYXR0ZXJuPiB0byBpZ25vcmUgcnVsZXMiCittc2dzdHIgImFkaWNpb25hciA8cGFkcsOjbz4gw6BzIHJlZ3JhcyBpZ25vcmFkYXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4ODMKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICJ0YW1iw6ltIHJlbW92ZXIgZmljaGVpcm9zIGlnbm9yYWRvcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg4NQorbXNnaWQgInJlbW92ZSBvbmx5IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgInJlbW92ZXIgYXBlbmFzIGZpY2hlaXJvcyBpZ25vcmFkb3MiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDMKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IGUgLVggbsOjbyBwb2RlIHNlciB1c2Fkb3MganVudG9zIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA3Cittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBzZXQgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgcmVmdXNpbmcgdG8gIgorImNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmluaWRvIGNvbW8gdHJ1ZSBlIG5lbmh1bSAtaSwgLW4sIG91IC1mIGZvcm5lY2lkbzsgIgorImxpbXBlemEgcmVjdXNhZGEiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTAKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKyJyZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBwcmVkZWZpbmlkbyBjb21vIHRydWUgZSBuZW5odW0gLWksIC1uLCBvdSAtZiBmb3JuZWNpZG87ICIKKyJsaW1wZXphIHJlY3VzYWRhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzcKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs8b3DDp8O1ZXM+XSBbLS1dIDxyZXBvPiBbPGRpcj5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODAKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAibsOjbyBjcmlhciB1bWEgZXh0cmHDp8OjbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgxIGJ1aWx0aW4vY2xvbmUuYzo4MyBidWlsdGluL2luaXQtZGIuYzo0NzgKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgImNyaWFyIHVtIHJlcG9zaXTDs3JpbyBudSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg1Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgImNyaWFyIHVtIHJlcG9zaXTDs3JpbyBlc3BlbGhhZG8gKGltcGxpY2EgcmVwb3NpdMOzcmlvIG51KSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg3Cittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgInBhcmEgY2xvbmFyIGRlIHVtIHJlcG9zaXTDs3JpbyBsb2NhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg5Cittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgIm7Do28gdXNhciBsaWdhw6fDtWVzIGZpeGFzLCBjb3BpYXIgc2VtcHJlIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTEKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY29uZmlndXJhciBjb21vIHJlcG9zaXTDs3JpbyBwYXJ0aWxoYWRvIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMgYnVpbHRpbi9jbG9uZS5jOjk3Cittc2dpZCAicGF0aHNwZWMiCittc2dzdHIgInBhdGhzcGVjIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMgYnVpbHRpbi9jbG9uZS5jOjk3Cittc2dpZCAiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIKK21zZ3N0ciAiaW5pY2lhbGl6YXIgc3VibcOzZHVsb3Mgbm8gY2xvbmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIm7Dum1lcm8gZGUgc3VibcOzZHVsb3MgY2xvbmFkb3MgZW0gcGFyYWxlbG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDEgYnVpbHRpbi9pbml0LWRiLmM6NDc1Cittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICJkaXJldMOzcmlvLW1vZGVsbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMiBidWlsdGluL2luaXQtZGIuYzo0NzYKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICJkaXJldMOzcmlvIHF1ZSBjb250w6ltIG9zIG1vZGVsb3MgdXNhZG9zIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA0IGJ1aWx0aW4vY2xvbmUuYzoxMDYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY0MgorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk4MworbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICJyZXBvc2l0w7NyaW8gZGUgcmVmZXLDqm5jaWEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDgKK21zZ2lkICJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIgorbXNnc3RyICJ1c2FyIC0tcmVmZXJlbmNlIGFwZW5hcyBwYXJhIGNsb25hciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwOSBidWlsdGluL2NvbHVtbi5jOjI2IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQzCittc2dpZCAibmFtZSIKK21zZ3N0ciAibm9tZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMAorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAidXNhciA8bm9tZT4gZW0gdmV6IGRlICdvcmlnaW4nIHBhcmEgc2VndWlyIG8gcmFtbyBhIG1vbnRhbnRlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEyCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAiZXh0cmFpciA8cmFtbz4gZW0gdmV6IGRhIEhFQUQgZG8gcmVtb3RvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE0Cittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAiY2FtaW5obyBwYXJhIGdpdC11cGxvYWQtcGFjayBubyByZW1vdG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTUgYnVpbHRpbi9mZXRjaC5jOjEyMCBidWlsdGluL2dyZXAuYzoxMDA2CisjOiBidWlsdGluL3B1bGwuYzoyMDIKK21zZ2lkICJkZXB0aCIKK21zZ3N0ciAicHJvZnVuZGlkYWRlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICJjcmlhciB1bSBjbG9uZSByYXNvIGNvbSBlc3NhIHByb2Z1bmRpZGFkZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNyBidWlsdGluL2ZldGNoLmM6MTIyIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkxOAorIzogcGFyc2Utb3B0aW9ucy5oOjE0MgorbXNnaWQgInRpbWUiCittc2dzdHIgImhvcmEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTgKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIHNpbmNlIGEgc3BlY2lmaWMgdGltZSIKK21zZ3N0ciAiY3JpYXIgdW0gY2xvbmUgcmFzbyBkZXNkZSB1bWEgZGF0YSBlc3BlY8OtZmljYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOSBidWlsdGluL2ZldGNoLmM6MTI0Cittc2dpZCAicmV2aXNpb24iCittc2dzdHIgInJldmlzw6NvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIwIGJ1aWx0aW4vZmV0Y2guYzoxMjUKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lLCBleGNsdWRpbmcgcmV2IgorbXNnc3RyICJhcHJvZnVuZGFyIG8gaGlzdMOzcmljbyBkZSB1bSBjbG9uZSByYXNvLCBleGNsdWluZG8gYSByZXZpc8OjbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMgorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAiY2xvbmFyIGFwZW5hcyB1bSByYW1vLCBIRUFEIG91IC0tYnJhbmNoIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgYmUgc2hhbGxvdyIKK21zZ3N0ciAicXVhbHF1ZXIgc3VibcOzZHVsbyBjbG9uYWRvIHNlcsOhIHJhc28iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjUgYnVpbHRpbi9pbml0LWRiLmM6NDg0Cittc2dpZCAiZ2l0ZGlyIgorbXNnc3RyICJnaXRkaXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjYgYnVpbHRpbi9pbml0LWRiLmM6NDg1Cittc2dpZCAic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAic2VwYXJhciBvIHJlcG9zaXTDs3JpbyBnaXQgZGEgw6Fydm9yZSBkZSB0cmFiYWxobyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNworbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAiY2hhdmU9dmFsb3IiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjgKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgImRlZmluaXIgY29uZmlndXJhw6fDo28gZGVudHJvIGRvIG5vdm8gcmVwb3NpdMOzcmlvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI5IGJ1aWx0aW4vZmV0Y2guYzoxNDAgYnVpbHRpbi9wdXNoLmM6NTUwCittc2dpZCAidXNlIElQdjQgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgInVzYXIgYXBlbmFzIGVuZGVyZcOnb3MgSVB2NCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMSBidWlsdGluL2ZldGNoLmM6MTQyIGJ1aWx0aW4vcHVzaC5jOjU1MgorbXNnaWQgInVzZSBJUHY2IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICJ1c2FyIGFwZW5hcyBlbmRlcmXDp29zIElQdjYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoyNjgKK21zZ2lkICIiCisiTm8gZGlyZWN0b3J5IG5hbWUgY291bGQgYmUgZ3Vlc3NlZC5cbiIKKyJQbGVhc2Ugc3BlY2lmeSBhIGRpcmVjdG9yeSBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICIiCisiTsOjbyBmb2kgcG9zc8OtdmVsIGFkaXZpbmhhciBvIG5vbWUgZG8gZGlyZXTDs3Jpby5cbiIKKyJFc3BlY2lmaXF1ZSB1bSBkaXJldMOzcmlvIG5hIGxpbmhhIGRlIGNvbWFuZG9zIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgImluZm86IENvdWxkIG5vdCBhZGQgYWx0ZXJuYXRlIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICJpbmZvOiBOw6NvIGZvaSBwb3Nzw612ZWwgYWRpY2lvbmFyIHNvYnJlc3NhbGVudGUgZGUgJyVzJzogJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJmYWxoYSBhbyBhYnJpciAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIlcyBleGlzdGUgZSBuw6NvIMOpIHVtIGRpcmV0w7NyaW8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKK21zZ3N0ciAiZmFsaGEgYW8gaW52b2NhciBzdGF0IGRlICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgImZhbGhhIGFvIGNyaWFyIGEgbGlnYcOnw6NvICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICJmYWxoYSBhbyBjb3BpYXIgbyBmaWNoZWlybyBwYXJhICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAiY29uY2x1w61kby5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ3OAorbXNnaWQgIiIKKyJDbG9uZSBzdWNjZWVkZWQsIGJ1dCBjaGVja291dCBmYWlsZWQuXG4iCisiWW91IGNhbiBpbnNwZWN0IHdoYXQgd2FzIGNoZWNrZWQgb3V0IHdpdGggJ2dpdCBzdGF0dXMnXG4iCisiYW5kIHJldHJ5IHRoZSBjaGVja291dCB3aXRoICdnaXQgY2hlY2tvdXQgLWYgSEVBRCdcbiIKK21zZ3N0ciAiIgorIkNsb25hZG8gY29tIHN1Y2Vzc28sIG1hcyBhIGV4dHJhw6fDo28gZmFsaG91LlxuIgorIlBvZGUgaW5zcGVjaW9uYXIgbyBxdWUgZm9pIGV4dHJhw61kbyBjb20gJ2dpdCBzdGF0dXMnXG4iCisiZSByZXBldGlyIGEgZXh0cmHDp8OjbyBjb20gJ2dpdCBjaGVja291dCAtZiBIRUFEJ1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICJSYW1vIHJlbW90byAlcyBuw6NvIGVuY29udHJhZG8gcGFyYSBjbG9uYXIuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjUwCittc2dpZCAicmVtb3RlIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHMiCittc2dzdHIgIm8gcmVtb3RvIG7Do28gZW52aW91IHRvZG9zIG9zIG9iamV0b3MgbmVjZXNzw6FyaW9zIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjY2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhdHVhbGl6YXIgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MTUKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgIiIKKyJhIEhFQUQgcmVtb3RhIHJlZmVyZW5jaWEgdW1hIHJlZmVyw6puY2lhIGluZXhpc3RlbnRlLCBuw6NvIMOpIHBvc3PDrXZlbCAiCisiZXh0cmFpci5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc0NgorbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBleHRyYWlyIGEgw6Fydm9yZSBkZSB0cmFiYWxobyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc4NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZXNjcmV2ZXIgb3MgcGFyw6JtZXRyb3Mgbm8gZmljaGVpcm8gZGUgY29uZmlndXJhw6fDo28iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NDkKK21zZ2lkICJjYW5ub3QgcmVwYWNrIHRvIGNsZWFuIHVwIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCByZWVtcGFjb3RhciBwYXJhIGxpbXBhciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg1MQorbXNnaWQgImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAiIgorIm7Do28gw6kgcG9zc8OtdmVsIGludm9jYXIgdW5saW5rIHNvYnJlIG8gZmljaGVpcm8gc29icmVzc2FsZW50ZSB0ZW1wb3LDoXJpbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg4NCBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5MDEKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICJEZW1hc2lhZG9zIGFyZ3VtZW50b3MuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODg4Cittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICJEZXZlIGVzcGVjaWZpY2FyIHVtIHJlcG9zaXTDs3JpbyBwYXJhIGNsb25hci4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJhcyBvcMOnw7VlcyAtLWJhcmUgZSAtLW9yaWdpbiAlcyBzw6NvIGluY29tcGF0w612ZWlzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkwNAorbXNnaWQgIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICItLWJhcmUgZSAtLXNlcGFyYXRlLWdpdC1kaXIgc8OjbyBpbmNvbXBhdMOtdmVpcy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJvIHJlcG9zaXTDs3JpbyAnJXMnIG7Do28gZXhpc3RlIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTIzIGJ1aWx0aW4vZmV0Y2guYzoxMzM3CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAicHJvZnVuZGlkYWRlICVzIG7Do28gw6kgdW0gbsO6bWVybyBwb3NpdGl2byIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkzMworIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICJvIGNhbWluaG8gZGUgZGVzdGlubyAnJXMnIGrDoSBleGlzdGUgZSBuw6NvIMOpIHVtIGRpcmV0w7NyaW8gdmF6aW8uIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiYSDDoXJ2b3JlIGRlIHRyYWJhbGhvICclcycgasOhIGV4aXN0ZS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NTggYnVpbHRpbi9jbG9uZS5jOjk2OSBidWlsdGluL2RpZmZ0b29sLmM6MjUyCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjIyIGJ1aWx0aW4vd29ya3RyZWUuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBjcmlhciBvcyBkaXJldMOzcmlvcyBzdXBlcmlvcmVzIGRlICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBjcmlhciBvIGRpcmV0w7NyaW8gZGUgw6Fydm9yZSBkZSB0cmFiYWxobyAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICJBIGNsb25hciBubyByZXBvc2l0w7NyaW8gbnUgJyVzJy4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgIkEgY2xvbmFyIGVtICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5OQorbXNnaWQgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGJvdGggLS1yZWZlcmVuY2UgYW5kIC0tcmVmZXJlbmNlLWlmLSIKKyJhYmxlIgorbXNnc3RyICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgbsOjbyDDqSBjb21wYXTDrXZlbCBjb20gYW1ib3MgLS1yZWZlcmVuY2UgZSAtLXJlZmVyZW5jZS1pZi0iCisiYWJsZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNTUKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1kZXB0aCDDqSBpZ25vcmFkbyBlbSBjbG9uZXMgbG9jYWlzOyB1c2UgZmlsZTovLyAuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA1NworbXNnaWQgIi0tc2hhbGxvdy1zaW5jZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tc2hhbGxvdy1zaW5jZSDDqSBpZ25vcmFkbyBlbSBjbG9uZXMgbG9jYWlzOyB1c2UgZmlsZTovLyAuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA1OQorbXNnaWQgIi0tc2hhbGxvdy1leGNsdWRlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1zaGFsbG93LWV4Y2x1ZGUgw6kgaWdub3JhZG8gZW0gY2xvbmVzIGxvY2FpczsgdXNlIGZpbGU6Ly8gLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjIKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICJvIHJlcG9zaXTDs3JpbyBkZSBvcmlnZW0gw6kgcmFzbywgLS1sb2NhbCBpZ25vcmFkbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjcKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwgaWdub3JhZG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGNsb25lICVzIgorbXNnc3RyICJOw6NvIHNlaSBjb21vIGNsb25hciAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMjYgYnVpbHRpbi9jbG9uZS5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIk8gcmFtbyByZW1vdG8gJXMgbsOjbyBmb2kgZW5jb250cmFkbyBubyByZXBvc2l0w7NyaW8gYSBtb250YW50ZSAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMzcKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJQYXJlY2UgZm9pIGNsb25hZG8gdW0gcmVwb3NpdMOzcmlvIHZhemlvLiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo5Cittc2dpZCAiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbHVtbiBbPG9ww6fDtWVzPl0iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjYKK21zZ2lkICJsb29rdXAgY29uZmlnIHZhcnMiCittc2dzdHIgInBlc3F1aXNhciB2YXJpw6F2ZWlzIGRlIGNvbmZpZ3VyYcOnw6NvIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vY29sdW1uLmM6MjgKK21zZ2lkICJsYXlvdXQgdG8gdXNlIgorbXNnc3RyICJlc3F1ZW1hIGEgdXNhciIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIkxhcmd1cmEgbcOheGltYSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIkVzcGHDp28gZGUgcHJlZW5jaGltZW50byBuYSBib3JkYSBlc3F1ZXJkYSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICJFc3Bhw6dvIGRlIHByZWVuY2hpbWVudG8gbmEgYm9yZGEgZGlyZWl0YSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMgorbXNnaWQgIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIgorbXNnc3RyICJFc3Bhw6dvIGRlIHByZWVuY2hpbWVudG8gZW50cmUgY29sdW5hcyIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo1MQorbXNnaWQgIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb21tYW5kIGRldmUgc2VyIG8gcHJpbWVpcm8gYXJndW1lbnRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4Cittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzxvcMOnw7Vlcz5dIFstLV0gPGVzcGVjaWZpY2Fkb3ItZGUtY2FtaW5obz4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDMKK21zZ2lkICJnaXQgc3RhdHVzIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHN0YXR1cyBbPG9ww6fDtWVzPl0gWy0tXSA8ZXNwZWNpZmljYWRvci1kZS1jYW1pbmhvPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0OAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIk8gc2V1IG5vbWUgZSBlbmRlcmXDp28gZGUgZS1tYWlsIGZvcmFtIGNvbmZpZ3VyYWRvcyBhdXRvbWF0aWNhbWVudGUgY29tIGJhc2VcbiIKKyJubyBzZXUgbm9tZSBkZSB1dGlsaXphZG9yIGUgbm9tZSBkZSBtw6FxdWluYS4gVmVyaWZpcXVlIHNlIGVzdMOjbyBjb3JyZXRvcy5cbiIKKyJQb2RlIHN1cHJpbWlyIGVzdGEgbWVuc2FnZW0gY29uZmlndXJhbmRvLW9zIGV4cGxpY2l0YW1lbnRlLiBFeGVjdXRlXG4iCisibyBzZWd1aW50ZSBjb21hbmRvIGUgc2lnYSBhcyBpbnN0cnXDp8O1ZXMgbm8gZWRpdG9yIHBhcmEgZWRpdGFyXG4iCisibyBmaWNoZWlybyBkZSBjb25maWd1cmHDp8OjbzpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJBcMOzcyBmYXplciBpc3RvLCBwb2RlIGNvcnJpZ2lyIGEgaWRlbnRpZGFkZSB1c2FkYSBuZXN0ZSBjb21taXQgY29tOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MQorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIk8gc2V1IG5vbWUgZSBlbmRlcmXDp28gZGUgZS1tYWlsIGZvcmFtIGNvbmZpZ3VyYWRvcyBhdXRvbWF0aWNhbWVudGUgY29tIGJhc2VcbiIKKyJubyBzZXUgbm9tZSBkZSB1dGlsaXphZG9yIGUgbm9tZSBkZSBtw6FxdWluYS4gVmVyaWZpcXVlIHNlIGVzdMOjbyBjb3JyZXRvcy5cbiIKKyJQb2RlIHN1cHJpbWlyIGVzdGEgbWVuc2FnZW0gY29uZmlndXJhbmRvLW9zIGV4cGxpY2l0YW1lbnRlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIk8gU2V1IE5vbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgdXRpbGl6YWRvckBleGVtcGxvLmNvbVxuIgorIlxuIgorIkFww7NzIGZhemVyIGlzdG8sIHBvZGUgY29ycmlnaXIgYSBpZGVudGlkYWRlIHVzYWRhIG5lc3RlIGNvbW1pdCBjb206XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczCittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisiUGVkaXUgcGFyYSBlbWVuZGFyIG8gY29tbWl0IG1haXMgcmVjZW50ZSwgbWFzIGFvIGZhesOqLWxvIHRvcm7DoS1sby1pYVxuIgorInZhemlvLiBQb2RlIHJlcGV0aXIgbyBjb21hbmRvIGNvbSAtLWFsbG93LWVtcHR5LCBvdSBwb2RlIHJlbW92ZXIgb1xuIgorImNvbW1pdCBjb21wbGV0YW1lbnRlIGNvbSBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc4Cittc2dpZCAiIgorIlRoZSBwcmV2aW91cyBjaGVycnktcGljayBpcyBub3cgZW1wdHksIHBvc3NpYmx5IGR1ZSB0byBjb25mbGljdCByZXNvbHV0aW9uLlxuIgorIklmIHlvdSB3aXNoIHRvIGNvbW1pdCBpdCBhbnl3YXksIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCittc2dzdHIgIiIKKyJPIGNoZXJyeS1waWNrIGFudGVyaW9yIGVzdMOhIHZhemlvLCBwb3NzaXZlbG1lbnRlIGRldmlkbyBhIHJlc29sdcOnw6NvIGRlICIKKyJjb25mbGl0b3MuXG4iCisiU2UgZGVzZWphIHN1Ym1ldGVyIGRlIHF1YWxxdWVyIGZvcm1hLCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1Cittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgcmVzZXQnXG4iCittc2dzdHIgIkNhc28gY29udHLDoXJpbywgdXNlICdnaXQgcmVzZXQnXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODgKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgcmVzZXRcbiIKKyJcbiIKKyJUaGVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB3aWxsIHJlc3VtZSBjaGVycnktcGlja2luZ1xuIgorInRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKK21zZ3N0ciAiIgorIlNlIGRlc2VqYSBpZ25vcmFyIGVzdGUgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCByZXNldFxuIgorIlxuIgorIkRlcG9pcyBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgaXLDoSByZXRvbWFyIG8gY2hlcnJ5LXBpY2tcbiIKKyJkb3MgcmVzdGFudGVzIGNvbW1pdHMuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzE4Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICJmYWxoYSBhbyBkZXNjb21wYWN0YXIgbyBvYmpldG8gw6Fydm9yZSBIRUFEIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1OQorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgY3JpYXIgw61uZGljZSB0ZW1wb3LDoXJpbyIKKworIzogYnVpbHRpbi9jb21taXQuYzozNjUKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICJmYWxoYSBhbyBhZGljaW9uYXIgaW50ZXJhdGl2YW1lbnRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM3OAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhdHVhbGl6YXIgbyDDrW5kaWNlIHRlbXBvcsOhcmlvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4MAorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICJGYWxoYSBhbyBhdHVhbGl6YXIgYSDDoXJ2b3JlIGRlIGNhY2hlIHByaW5jaXBhbCIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MDQgYnVpbHRpbi9jb21taXQuYzo0MjcgYnVpbHRpbi9jb21taXQuYzo0NzYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGVzY3JldmVyIG8gZmljaGVpcm8gbmV3X2luZGV4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ1OAorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZmF6ZXIgdW0gY29tbWl0IHBhcmNpYWwgZHVyYW50ZSB1bWEgaW50ZWdyYcOnw6NvLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NjAKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGZhemVyIHVtIGNvbW1pdCBwYXJjaWFsIGR1cmFudGUgdW0gY2hlcnJ5LXBpY2suIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2OQorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbGVyIG8gw61uZGljZSIKKworIzogYnVpbHRpbi9jb21taXQuYzo0ODgKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGVzY3JldmVyIGZpY2hlaXJvIGRlIMOtbmRpY2UgdGVtcG9yw6FyaW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGxhY2tzIGF1dGhvciBoZWFkZXIiCittc2dzdHIgIm8gY29tbWl0ICclcycgbsOjbyB0ZW0gY2FiZcOnYWxobyBkZSBhdXRvciIKKworIzogYnVpbHRpbi9jb21taXQuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAibyBjb21taXQgJyVzJyB0ZW0gYSBsaW5oYSBkZSBhdXRvciBtYWxmb3JtYWRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwMworbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgInBhcsOibWV0cm8gLS1hdXRob3IgbWFsZm9ybWFkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NTUKK21zZ2lkICIiCisidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKyJpbiB0aGUgY3VycmVudCBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorIm7Do28gZm9pIHBvc3PDrXZlbCBzZWxlY2lvbmFyIHVtIGNhcsOhY3RlciBkZSBjb21lbnTDoXJpbyBxdWVcbiIKKyJuw6NvIGVzdGl2ZXNzZSBqw6EgYSBzZXIgdXNhZG8gbmEgbWVuc2FnZW0gZGUgY29tbWl0IGF0dWFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY5MiBidWlsdGluL2NvbW1pdC5jOjcyNSBidWlsdGluL2NvbW1pdC5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBjb25zdWx0YXIgbyBjb21taXQgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzA0IGJ1aWx0aW4vc2hvcnRsb2cuYzoyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIKK21zZ3N0ciAiKGEgbGVyIG1lbnNhZ2VtIGRlIGxvZyBkYSBlbnRyYWRhIHBhZHLDo28pXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzA2Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgbyBsb2cgZGEgZW50cmFkYSBwYWRyw6NvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcxMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBsZXIgbyBmaWNoZWlybyBkZSBsb2cgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzcgYnVpbHRpbi9jb21taXQuYzo3NDUKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzQyCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIE1FUkdFX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3OTYKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZXNjcmV2ZXIgbyBtb2RlbG8gZGUgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQYXJlY2UgcXVlIGVzdMOhIGEgc3VibWV0ZXIgdW1hIGludGVncmHDp8Ojby5cbiIKKyJTZSBuw6NvIGZvciBvIGNhc28sIHJlbW92YSBvIGZpY2hlaXJvXG4iCisiXHQlc1xuIgorImUgdGVudGUgZGUgbm92by5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgY2hlcnJ5LXBpY2suXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiUGFyZWNlIHF1ZSBlc3TDoSBhIHN1Ym1ldGVyIHVtIGNoZXJyeS1waWNrLlxuIgorIlNlIG7Do28gw6kgbyBjYXNvLCByZW1vdmEgbyBmaWNoZWlyb1xuIgorIlx0JXNcbiIKKyJlIHRlbnRlIG91dHJhIHZlei5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkludHJvZHV6YSBhIG1lbnNhZ2VtIGRlIGNvbW1pdCBkYXMgc3VhcyBhbHRlcmHDp8O1ZXMuXG4iCisiTGluaGFzIGNvbWXDp2FkYXMgY29tICclYycgc2Vyw6NvIGlnbm9yYWRhcywgZSB1bWEgbWVuc2FnZW0gdmF6aWFcbiIKKyJhYm9ydGEgbyBjb21taXQuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiSW50cm9kdXppYSBhIG1lbnNhZ2VtIGRlIGNvbW1pdCBkYXMgc3VhcyBhbHRlcmHDp8O1ZXMuXG4iCisiTGluaGFzIGNvbWXDp2FkYXMgY29tICclYycgc2Vyw6NvIG1hbnRpZGFzOyBwb2RlIHJlbW92w6otbGFzIHNlIG8gZGVzZWphci5cbiIKKyJVbWEgbWVuc2FnZW0gdmF6aWEgYWJvcnRhIG8gY29tbWl0LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1OQorIywgYy1mb3JtYXQKK21zZ2lkICIlc0F1dGhvcjogICAgJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzQXV0b3I6ICAgICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICIlc0RhdGU6ICAgICAgJXMiCittc2dzdHIgIiVzRGF0YTogICAgICAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODkyCittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGxlciBvIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTU0Cittc2dpZCAiRXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgIkVycm8gYW8gY29uc3RydWlyIMOhcnZvcmVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk2OCBidWlsdGluL3RhZy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIkluZGlxdWUgYSBtZW5zYWdlbSB1c2FuZG8gYXMgb3DDp8O1ZXMgLW0gb3UgLUYuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA3MQorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIiIKKyItLWF1dGhvciAnJXMnIG7Do28gw6kgZG8gdGlwbyAnTm9tZSA8ZW1haWw+JyBlIG7Do28gY29ycmVzcG9uZGUgYSB1bSBhdXRvciAiCisiZXhpc3RlbnRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODYgYnVpbHRpbi9jb21taXQuYzoxMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAiTW9kbyBpbnbDoWxpZG8gZGUgZmljaGVpcm9zIG7Do28gY29udHJvbGFkb3MgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTI0Cittc2dpZCAiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWxvbmcgZSAteiBzw6NvIGluY29tcGF0w612ZWlzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNTQKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJOw6NvIGZheiBzZW50aWRvIHVzYXIgLS1yZXNldC1hdXRob3IgZSAtLWF1dGhvciBhbyBtZXNtbyB0ZW1wbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTYzCittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgIk7Do28gaMOhIG5hZGEgcGFyYSBlbWVuZGFyLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTY2Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiSW50ZWdyYcOnw6NvIGVtIGN1cnNvIC0tIG7Do28gw6kgcG9zc8OtdmVsIGVtZW5kYXIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjgKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJDaGVycnktcGljayBlbSBjdXJzbyAtLSBuw6NvIMOpIHBvc3PDrXZlbCBlbWVuZGFyLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTcxCittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiQXMgb3DDp8O1ZXMgLS1zcXVhc2ggZSAtLWZpeHVwIG7Do28gcG9kZW0gc2VyIHVzYWRhcyBqdW50YXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MQorbXNnaWQgIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIgorbXNnc3RyICJBcGVuYXMgdW0gZW50cmUgLWMvLUMvLUYvLS1maXh1cCBwb2RlIHNlciB1c2Fkby4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MworbXNnaWQgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi8tLWZpeHVwLiIKK21zZ3N0ciAiQSBvcMOnw6NvIC1tIG7Do28gcG9kZSBzZXIgY29tYmluYWRhIGNvbSAtYy9DLy1GLy0tZml4dXAuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTEKK21zZ2lkICItLXJlc2V0LWF1dGhvciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggLUMsIC1jIG9yIC0tYW1lbmQuIgorbXNnc3RyICItLXJlc2V0LWF1dGhvciBzw7MgcG9kZSBzZXIgdXNhZG8gY29tIC1DLCAtYyBvdSAtLWFtZW5kLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjA4Cittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisiQXBlbmFzIHVtIGVudHJlIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIHBvZGUgc2VyIHVzYWRvLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjEwCittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICJBcyBvcMOnw7VlcyAtLWluY2x1ZGUvLS1vbmx5IG7Do28gZmF6ZW0gc2VudGlkbyBzZW0gaW5kaWNhciBjYW1pbmhvcy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIxMgorbXNnaWQgIkV4cGxpY2l0IHBhdGhzIHNwZWNpZmllZCB3aXRob3V0IC1pIG9yIC1vOyBhc3N1bWluZyAtLW9ubHkgcGF0aHMuLi4iCittc2dzdHIgIkNhbWluaG9zIGV4cGzDrWNpdG9zIGVzcGVjaWZpY2Fkb3Mgc2VtIC1pIG91IC1vOyBhc3N1bWluZG8gLS1vbmx5Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjQgYnVpbHRpbi90YWcuYzo1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgIk1vZG8gZGUgbGltcGV6YSBpbnbDoWxpZG8gJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyOQorbXNnaWQgIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIkluZGljYXIgY2FtaW5ob3MgY29tIC1hIG7Do28gZmF6IHNlbnRpZG8uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzkgYnVpbHRpbi9jb21taXQuYzoxNjEyCittc2dpZCAic2hvdyBzdGF0dXMgY29uY2lzZWx5IgorbXNnc3RyICJtb3N0cmFyIHN0YXR1cyBkZSBmb3JtYSBjb25jaXNhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNDEgYnVpbHRpbi9jb21taXQuYzoxNjE0Cittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgIm1vc3RyYXIgaW5mb3JtYcOnw6NvIGRvIHJhbW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MworbXNnaWQgInZlcnNpb24iCittc2dzdHIgInZlcnPDo28iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MyBidWlsdGluL2NvbW1pdC5jOjE2MTYgYnVpbHRpbi9wdXNoLmM6NTI1CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQzCittc2dpZCAibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiCittc2dzdHIgInNhw61kYSBpbnRlbGlnw612ZWwgcG9yIG3DoXF1aW5hIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNDYgYnVpbHRpbi9jb21taXQuYzoxNjE4Cittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICJhcHJlc2VudGFyIHN0YXR1cyBlbSBmb3JtYXRvIGxvbmdvIChwcmVkZWZpbmnDp8OjbykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0OSBidWlsdGluL2NvbW1pdC5jOjE2MjEKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAidGVybWluYXIgZW50cmFkYXMgY29tIE5VTCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzUxIGJ1aWx0aW4vY29tbWl0LmM6MTYyNCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTgxCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg0IGJ1aWx0aW4vdGFnLmM6NDExCittc2dpZCAibW9kZSIKK21zZ3N0ciAibW9kbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzUyIGJ1aWx0aW4vY29tbWl0LmM6MTYyNAorbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorIm1vc3RyYXIgZmljaGVpcm9zIG7Do28gY29udHJvbGFkb3MsIG1vZG8gw6kgb3BjaW9uYWw6IGFsbCwgbm9ybWFsLCBuby4gIgorIihQcmVkZWZpbmnDp8OjbzogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU1Cittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJtb3N0cmFyIGZpY2hlaXJvcyBpZ25vcmFkb3MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NiBwYXJzZS1vcHRpb25zLmg6MTU1Cittc2dpZCAid2hlbiIKK21zZ3N0ciAicXVhbmRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTcKK21zZ2lkICIiCisiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcywgb3B0aW9uYWwgd2hlbjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKyJpZ25vcmFyIGFsdGVyYcOnw7VlcyBlbSBzdWJtw7NkdWxvcywgcXVhbmRvIMOpIG9wY2lvbmFsOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoUHJlZGVmaW5pw6fDo286IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1OQorbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgImxpc3RhciBmaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyBlbSBjb2x1bmFzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MzUKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgY29uc3VsdGFyIG8gY29tbWl0IHJlY8OpbS1jcmlhZG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQzNworbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIG8gY29tbWl0IHJlY8OpbS1jcmlhZG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4MgorbXNnaWQgImRldGFjaGVkIEhFQUQiCittc2dzdHIgIkhFQUQgZGVzdGFjYWRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODUKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAiIChjb21taXQtcmFpeikiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MgorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgInN1cHJpbWlyIG8gcmVzdW1vIGRlcG9pcyBkZSBzdWJtZXRlciBjb20gc3VjZXNzbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTgzCittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJtb3N0cmFyIGRpZmYgbm8gbW9kZWxvIGRhIG1lbnNhZ2VtIGRlIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg1Cittc2dpZCAiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiT3DDp8O1ZXMgZGUgbWVuc2FnZW0gZGUgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODYgYnVpbHRpbi90YWcuYzo0MDkKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsZXIgbWVuc2FnZW0gZGUgdW0gZmljaGVpcm8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NworbXNnaWQgImF1dGhvciIKK21zZ3N0ciAiYXV0b3IiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NworbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICJzdWJzdGl0dWlyIGF1dG9yIGRvIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg4IGJ1aWx0aW4vZ2MuYzozNTMKK21zZ2lkICJkYXRlIgorbXNnc3RyICJkYXRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODgKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgInN1YnN0aXR1aXIgZGF0YSBkbyBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4OSBidWlsdGluL21lcmdlLmM6MjIxIGJ1aWx0aW4vbm90ZXMuYzozOTgKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NjEgYnVpbHRpbi90YWcuYzo0MDcKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICJtZW5zYWdlbSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg5Cittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIm1lbnNhZ2VtIGRlIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTkwIGJ1aWx0aW4vY29tbWl0LmM6MTU5MSBidWlsdGluL2NvbW1pdC5jOjE1OTIKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5MyBwYXJzZS1vcHRpb25zLmg6MjU3IHJlZi1maWx0ZXIuaDo3NworbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTAKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAicmV1dGlsaXphciBlIGVkaXRhciBhIG1lbnNhZ2VtIGRlIHVtIGNvbW1pdCBlc3BlY2lmaWNhZG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5MQorbXNnaWQgInJldXNlIG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICJyZXV0aWxpemFyIGEgbWVuc2FnZW0gZGUgdW0gY29tbWl0IGVzcGVjaWZpY2FkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTkyCittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorInVzYXIgbWVuc2FnZW0gY29tIGZvcm1hdG8gYXV0b3NxdWFzaCBwYXJhIGNvcnJpZ2lyIG8gY29tbWl0IGVzcGVjaWZpY2FkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTkzCittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gc3F1YXNoIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyJ1c2FyIG1lbnNhZ2VtIGNvbSBmb3JtYXRvIGF1dG9zcXVhc2ggcGFyYSBlc21hZ2FyIG8gY29tbWl0IGVzcGVjaWZpY2FkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk0Cittc2dpZCAidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIKK21zZ3N0ciAiYWdvcmEgc291IGV1IG8gYXV0b3IgZG8gY29tbWl0ICh1c2FkbyBjb20gQy8tYy8tLWFtZW5kKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk1IGJ1aWx0aW4vbG9nLmM6MTQyMCBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImFkZCBTaWduZWQtb2ZmLWJ5OiIKK21zZ3N0ciAiYWRpY2lvbmFyIFNpZ25lZC1vZmYtYnk6IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTYKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgInVzYXIgZmljaGVpcm8gZGUgbW9kZWxvIGVzcGVjaWZpY2FkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk3Cittc2dpZCAiZm9yY2UgZWRpdCBvZiBjb21taXQiCittc2dzdHIgImZvcsOnYXIgZWRpw6fDo28gZG8gY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTgKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICJwcmVkZWZpbmnDp8OjbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk4IGJ1aWx0aW4vdGFnLmM6NDEyCittc2dpZCAiaG93IHRvIHN0cmlwIHNwYWNlcyBhbmQgI2NvbW1lbnRzIGZyb20gbWVzc2FnZSIKK21zZ3N0ciAiY29tbyByZXRpcmFyIGVzcGHDp29zIGUgI2NvbWVudMOhcmlvcyBkYSBtZW5zYWdlbSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk5Cittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgImluY2x1aXIgc3RhdHVzIG5vIG1vZGVsbyBkYSBtZW5zYWdlbSBkZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYwMSBidWlsdGluL21lcmdlLmM6MjMzIGJ1aWx0aW4vcHVsbC5jOjE2NgorIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgImFzc2luYXIgbyBjb21taXQgY29tIEdQRyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjA0Cittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIk9ww6fDtWVzIGRlIGNvbnRlw7pkbyBkbyBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYwNQorbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAic3VibWV0ZXIgdG9kb3Mgb3MgZmljaGVpcm9zIGFsdGVyYWRvcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjA2Cittc2dpZCAiYWRkIHNwZWNpZmllZCBmaWxlcyB0byBpbmRleCBmb3IgY29tbWl0IgorbXNnc3RyICJhZGljaW9uYXIgZmljaGVpcm9zIGVzcGVjaWZpY2Fkb3MgYW8gw61uZGljZSBwYXJhIHN1Ym1ldGVyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MDcKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAiYWRpY2lvbmFyIGZpY2hlaXJvcyBpbnRlcmF0aXZhbWVudGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYwOAorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgImFkaWNpb25hciBhbHRlcmHDp8O1ZXMgaW50ZXJhdGl2YW1lbnRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MDkKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgInN1Ym1ldGVyIHNvbWVudGUgb3MgZmljaGVpcm9zIGVzcGVjaWZpY2Fkb3MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxMAorbXNnaWQgImJ5cGFzcyBwcmUtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIgorbXNnc3RyICJpZ25vcmFyIHByZS1jb21taXQgZSBjb21taXQtbXNnIGhvb2tzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTEKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICJtb3N0cmFyIG8gcXVlIHNlcmlhIHN1Ym1ldGlkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjIyCittc2dpZCAiYW1lbmQgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICJlbWVuZGFyIG8gY29tbWl0IGFudGVyaW9yIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MjMKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgImlnbm9yYXIgcG9zdC1yZXdyaXRlIGhvb2siCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYyOAorbXNnaWQgIm9rIHRvIHJlY29yZCBhbiBlbXB0eSBjaGFuZ2UiCittc2dzdHIgImFjZWl0YXIgbyByZWdpc3RvIGR1bWEgYWx0ZXJhw6fDo28gdmF6aWEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYzMAorbXNnaWQgIm9rIHRvIHJlY29yZCBhIGNoYW5nZSB3aXRoIGFuIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgImFjZWl0YXIgbyByZWdpc3RvIGR1bWEgYWx0ZXJhw6fDo28gY29tIHVtYSBtZW5zYWdlbSB2YXppYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjU5Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBjb21taXQgSEVBRCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIkZpY2hlaXJvIE1FUkdFX0hFQUQgY29ycm9tcGlkbyAoJXMpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3MTQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIE1FUkdFX01PREUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTczMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgYSBtZW5zYWdlbSBkZSBjb21taXQ6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICJBIGFib3J0YXIgbyBjb21taXQ7IG7Do28gZWRpdG91IGEgbWVuc2FnZW0uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJBIGFib3J0YXIgbyBjb21taXQgdW1hIHZleiBxdWUgYSBtZW5zYWdlbSBkZSBjb21taXQgZXN0w6EgdmF6aWEuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTc5NworbXNnaWQgIiIKKyJSZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzZXQgSEVBRFwiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisiTyByZXBvc2l0w7NyaW8gZm9pIGF0dWFsaXphZG8sIG1hcyBuw6NvIGZvaSBwb3Nzw612ZWwgZXNjcmV2ZXJcbiIKKyJvIGZpY2hlaXJvIG5ld19pbmRleC4gVmVyaWZpcXVlIHNlIG8gZGlzY28gbsOjbyBlc3TDoSBjaGVpb1xuIgorImUgcXVlIGEgcXVvdGEgbsOjbyBmb2kgZXhjZWRpZGEgZSBleGVjdXRlIFwiZ2l0IHJlc2V0IEhFQURcIiBwYXJhIHJlY3VwZXJhci4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6OQorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb25maWcgWzxvcMOnw7Vlcz5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU1Cittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgIkxvY2FsaXphw6fDo28gZG8gZmljaGVpcm8gZGUgY29uZmlndXJhw6fDo28iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTYKK21zZ2lkICJ1c2UgZ2xvYmFsIGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2FyIGZpY2hlaXJvIGRlIGNvbmZpZ3VyYcOnw6NvIGdsb2JhbCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NworbXNnaWQgInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiCittc2dzdHIgInVzYXIgZmljaGVpcm8gZGUgY29uZmlndXJhw6fDo28gZG8gc2lzdGVtYSIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OAorbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2FyIGZpY2hlaXJvIGRlIGNvbmZpZ3VyYcOnw6NvIGRvIHJlcG9zaXTDs3JpbyIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OQorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAidXNhciBmaWNoZWlybyBkZSBjb25maWd1cmHDp8OjbyBmb3JuZWNpZG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjAKK21zZ2lkICJibG9iLWlkIgorbXNnc3RyICJpZC1ibG9iIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYwCittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAibGVyIGNvbmZpZ3VyYcOnw6NvIGEgcGFydGlyIGRvIG9iamV0byBibG9iIGZvcm5lY2lkbyIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MQorbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAiQcOnw6NvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYyCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIm9idGVyIHZhbG9yOiBub21lIFtyZWdleC1kby12YWxvcl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjMKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIm9idGVyIHRvZG9zIG9zIHZhbG9yZXM6IGNoYXZlIFtyZWdleC1kby12YWxvcl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjQKK21zZ2lkICJnZXQgdmFsdWVzIGZvciByZWdleHA6IG5hbWUtcmVnZXggW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAib2J0ZXIgdmFsb3JlcyBwYXJhIGEgcmVnZXhwOiByZWdleC1kby1ub21lIFtyZWdleC1kby12YWxvcl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjUKK21zZ2lkICJnZXQgdmFsdWUgc3BlY2lmaWMgZm9yIHRoZSBVUkw6IHNlY3Rpb25bLnZhcl0gVVJMIgorbXNnc3RyICJvYnRlciB2YWxvciBkbyBVUkwgZXNwZWNpZmljYWRvOiBzZWN0aW9uWy52YXJdIFVSTCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NgorbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICIiCisic3Vic3RpdHVpciB0b2RvcyBhcyB2YXJpw6F2ZWlzIGNvcnJlc3BvbmRlbnRlczogbm9tZSB2YWxvciBbcmVnZXgtZG8tdmFsb3JdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY3Cittc2dpZCAiYWRkIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIgorbXNnc3RyICJhZGljaW9uYXIgdW1hIG5vdmEgdmFyacOhdmVsOiBub21lIHZhbG9yIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY4Cittc2dpZCAicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAicmVtb3ZlciB1bWEgdmFyacOhdmVsOiBub21lIFtyZWdleC1kby12YWxvcl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjkKK21zZ2lkICJyZW1vdmUgYWxsIG1hdGNoZXM6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAicmVtb3ZlciB0b2RhcyBhcyBjb3JyZXNwb25kw6puY2lhczogbm9tZSBbcmVnZXgtZG8tdmFsb3JdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcwCittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICJtdWRhciBvIG5vbWUgZGEgc2Vjw6fDo286IG5vbWUtYW50aWdvIG5vdm8tbm9tZSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MQorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgInJlbW92ZXIgdW1hIHNlY8Onw6NvOiBub21lIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcyCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgImxpc3RhciB0b2RvcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MworbXNnaWQgIm9wZW4gYW4gZWRpdG9yIgorbXNnc3RyICJhYnJpciB1bSBlZGl0b3IiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzQKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAiZW5jb250cmFyIGEgY29yIGNvbmZpZ3VyYWRhOiBzbG90IFtwcmVkZWZpbmnDp8Ojb10iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzUKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAiZW5jb250cmFyIGEgZGVmaW5pw6fDo28gZGUgY29yOiBzbG90IFtzdGRvdXQtw6ktdHR5XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NgorbXNnaWQgIlR5cGUiCittc2dzdHIgIlRpcG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzcKK21zZ2lkICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiCittc2dzdHIgIm8gdmFsb3Igw6kgXCJ0cnVlXCIgKHZlcmRhZGVpcm8pIG91IFwiZmFsc2VcIiAoZmFsc28pIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc4Cittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgIm8gdmFsb3Igw6kgdW0gbsO6bWVybyBkZWNpbWFsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc5Cittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICJvIHZhbG9yIMOpIC0tYm9vbCBvdSAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzo4MAorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgIm8gdmFsb3Igw6kgdW0gY2FtaW5obyAobm9tZSBkdW0gZmljaGVpcm8gb3UgZGlyZXTDs3JpbykiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODEKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAiT3V0cm8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODIKK21zZ2lkICJ0ZXJtaW5hdGUgdmFsdWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgInRlcm1pbmFyIHZhbG9yZXMgY29tIG8gYnl0ZSBOVUwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODMKK21zZ2lkICJzaG93IHZhcmlhYmxlIG5hbWVzIG9ubHkiCittc2dzdHIgIm1vc3RyYXIgYXBlbmFzIG9zIG5vbWVzIGRhcyB2YXJpw6F2ZWlzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjg0Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICJyZXNwZWl0YXIgZGlyZXRpdmFzIGRlIGluY2x1c8OjbyBhbyBwZXNxdWlzYXIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODUKK21zZ2lkICJzaG93IG9yaWdpbiBvZiBjb25maWcgKGZpbGUsIHN0YW5kYXJkIGlucHV0LCBibG9iLCBjb21tYW5kIGxpbmUpIgorbXNnc3RyICIiCisibW9zdHJhciBhIG9yaWdlbSBkYSBjb25maWd1cmHDp8OjbyAoZmljaGVpcm8sIGVudHJhZGEgcGFkcsOjbywgYmxvYiwgbGluaGEgZGUgIgorImNvbWFuZG9zKSIKKworIzogYnVpbHRpbi9jb25maWcuYzozMjcKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYW5hbGlzYXIgbyB2YWxvciBkZSBjb3IgcG9yIG9taXNzw6NvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIyBUaGlzIGlzIEdpdCdzIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiIKKyJbdXNlcl1cbiIKKyIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorbXNnc3RyICIiCisiIyBFc3RlIMOpIG8gZmljaGVpcm8gZGUgY29uZmlndXJhw6fDo28gZG8gR2l0IGRvIHV0aWxpemFkb3IuXG4iCisiW3VzZXJdXG4iCisiIyBBZGFwdGUgZSByZXRpcmUgb3MgY29tZW50w6FyaW9zIGRhcyBzZWd1aW50ZXMgbGluaGFzOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGNyaWFyIG8gZmljaGVpcm8gZGUgY29uZmlndXJhw6fDo28gJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3Qgb3ZlcndyaXRlIG11bHRpcGxlIHZhbHVlcyB3aXRoIGEgc2luZ2xlIHZhbHVlXG4iCisiICAgICAgIFVzZSBhIHJlZ2V4cCwgLS1hZGQgb3IgLS1yZXBsYWNlLWFsbCB0byBjaGFuZ2UgJXMuIgorbXNnc3RyICIiCisibsOjbyDDqSBwb3Nzw612ZWwgc3Vic3RpdHVpciBtw7psdGlwbG9zIHZhbG9yZXMgcG9yIHVtIMO6bmljbyB2YWxvclxuIgorIlx0VXNlIHVtYSByZWdleHAsIC0tYWRkIG91IC0tcmVwbGFjZS1hbGwgcGFyYSBhbHRlcmFyICVzLiIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6ODYKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorbXNnc3RyICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5NgorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAiaW1wcmltaXIgZGltZW5zw7VlcyBlbSBmb3JtYXRvIGludGVsaWfDrXZlbCBwb3IgaHVtYW5vcyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjE4Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIFs8Y29tbWl0LWlzaD4uLi5dIgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxvcMOnw7Vlcz5dIFs8Y29tbWl0LWV0Yz4uLi5dIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MTkKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gLS1kaXJ0eSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8b3DDp8O1ZXM+XSAtLWRpcnR5IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTMKK21zZ2lkICJoZWFkIgorbXNnc3RyICJjYWJlw6dhIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTMKK21zZ2lkICJsaWdodHdlaWdodCIKK21zZ3N0ciAibGV2ZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzCittc2dpZCAiYW5ub3RhdGVkIgorbXNnc3RyICJhbm90YWRvIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiYSB0YWcgYW5vdGFkYSAlcyBuw6NvIGVzdMOhIGRpc3BvbsOtdmVsIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgImEgdGFnIGFub3RhZGEgJXMgbsOjbyB0ZW0gbmVuaHVtIG5vbWUgaW5jb3Jwb3JhZG8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAiYSB0YWcgJyVzJyBlc3TDoSBkZSBmYWN0byBlbSAnJXMnIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjgzIGJ1aWx0aW4vbG9nLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICIlcyBuw6NvIMOpIHVtIG5vbWUgZGUgb2JqZXRvIHbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiVzIG7Do28gw6kgdW0gb2JqZXRvICclcycgdsOhbGlkbyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgIm5lbmh1bWEgdGFnIGNvcnJlc3BvbmRlIGV4YXRhbWVudGUgYSAnJXMnIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgInNlYXJjaGluZyB0byBkZXNjcmliZSAlc1xuIgorbXNnc3RyICLDoCBwcm9jdXJhciBkYSBkZXNjcmnDp8OjbyBkZSAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICJhIHBlc3F1aXNhIHRlcm1pbm91IGVtICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCB1c2FyIHRhZ3MgYW5vdGFkYXMgcGFyYSBkZXNjcmV2ZXIgJyVzJy5cbiIKKyJObyBlbnRhbnRvLCDDqSBwb3Nzw612ZWwgY29tIHRhZ3MgbsOjbyBhbm90YWRhczogdGVudGUgLS10YWdzLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgorbXNnc3RyICIiCisiTsOjbyDDqSBwb3Nzw612ZWwgdXNhciB0YWdzIHBhcmEgZGVzY3JldmVyICclcycuXG4iCisiVGVudGUgLS1hbHdheXMsIG91IGNyaWUgYWxndW1hcyB0YWdzLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICJ0cmF2ZXJzZWQgJWx1IGNvbW1pdHNcbiIKK21zZ3N0ciAiJWx1IGNvbW1pdHMgcGVyY29ycmlkb3NcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKyJtYWlzIGRlICVpIHRhZ3MgZW5jb250cmFkYXM7IGZvcmFtIGxpc3RhZGFzIGFzICVpIG1haXMgcmVjZW50ZXNcbiIKKyJwZXNxdWlzYSBpbnRlcnJvbXBpZGEgZW0gJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQzOAorbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgImxvY2FsaXphciBhIHRhZyBxdWUgdmVtIGFww7NzIG8gY29tbWl0IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDM5Cittc2dpZCAiZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVyciIKK21zZ3N0ciAiZGVwdXJhciBhIGVzdHJhdMOpZ2lhIGRlIHByb2N1cmEgcGFyYSBzdGRlcnIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NDAKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAidXNhciB1bWEgcmVmZXLDqm5jaWEgcXVhbHF1ZXIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NDEKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAidXNhciB1bWEgdGFnIHF1YWxxdWVyLCBtZXNtbyBuw6NvIGFub3RhZGEiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NDIKK21zZ2lkICJhbHdheXMgdXNlIGxvbmcgZm9ybWF0IgorbXNnc3RyICJ1c2FyIHNlbXByZSBmb3JtYXRvIGxvbmdvIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDQzCittc2dpZCAib25seSBmb2xsb3cgZmlyc3QgcGFyZW50IgorbXNnc3RyICJzZWd1aXIgc8OzIG8gcHJpbWVpcm8gcGFpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDQ2Cittc2dpZCAib25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyIKK21zZ3N0ciAiaW1wcmltaXIgYXBlbmFzIGNvcnJlc3BvbmTDqm5jaWFzIGV4YXRhcyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0OAorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgImNvbnNpZGVyYXIgYXMgPG4+IHRhZ3MgbWFpcyByZWNlbnRlcyAocHJlZGVmaW5pw6fDo286IDEwKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ1MAorbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgImFwZW5hcyBjb25zaWRlcmFyIHRhZ3MgcXVlIGNvcnJlc3BvbmRhbSBhbyA8cGFkcsOjbz4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NTIKK21zZ2lkICJkbyBub3QgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIm7Do28gY29uc2lkZXJhciB0YWdzIHF1ZSBjb3JyZXNwb25kYW0gYW8gPHBhZHLDo28+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU0IGJ1aWx0aW4vbmFtZS1yZXYuYzozNTcKK21zZ2lkICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siCittc2dzdHIgIm1vc3RyYXIgb2JqZXRvcyBkZSBjb21taXQgYWJyZXZpYWRvcyBlbSByZWN1cnNvIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU1IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NTgKK21zZ2lkICJtYXJrIgorbXNnc3RyICJtYXJjYSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ1NgorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIKK21zZ3N0ciAiIgorImFjcmVzY2VudGFyIDxtYXJjYT4gc2UgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGNvbnRpdmVyIGFsdGVyYcOnw7VlcyAiCisiKHByZWRlZmluacOnw6NvOiBcIi1kaXJ0eVwiKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ1OQorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gYnJva2VuIHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItYnJva2VuXCIpIgorbXNnc3RyICIiCisiYWNyZXNjZW50YXIgPG1hcmNhPiBubyBjYXNvIGRlIMOhcnZvcmUgZGUgdHJhYmFsaG8gcXVlYnJhZGEgKHByZWRlZmluacOnw6NvOiBcIi0iCisiYnJva2VuXCIpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDc3Cittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIi0tbG9uZyDDqSBpbmNvbXBhdMOtdmVsIGNvbSAtLWFiYnJldj0wIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTA2Cittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIk5lbmh1bSBub21lIGVuY29udHJhZG8sIG7Do28gw6kgcG9zc8OtdmVsIGRlc2NyZXZlci4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDkKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1kaXJ0eSDDqSBpbmNvbXBhdMOtdmVsIGNvbSBjb21taXRzIG91IHNlbWVsaGFudGVzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUxCittc2dpZCAiLS1icm9rZW4gaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWJyb2tlbiDDqSBpbmNvbXBhdMOtdmVsIGNvbSBjb21taXRzIG91IHNlbWVsaGFudGVzIgorCisjOiBidWlsdGluL2RpZmYuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBub3QgYSByZWd1bGFyIGZpbGUgb3Igc3ltbGluayIKK21zZ3N0ciAiJyVzJzogbsOjbyDDqSB1bSBmaWNoZWlybyByZWd1bGFyIG5lbSB1bWEgbGlnYcOnw6NvIHNpbWLDs2xpY2EiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIm9ww6fDo28gaW52w6FsaWRhOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzU4Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIk7Do28gw6kgdW0gcmVwb3NpdMOzcmlvIGdpdCIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJvYmpldG8gaW52w6FsaWRvICclcycgZm9ybmVjaWRvLiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIm1haXMgZG8gcXVlIGRvaXMgYmxvYnMgZm9ybmVjaWRvczogJyVzJyIKKworIzogYnVpbHRpbi9kaWZmLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIm9iamV0byBzZW0gdHJhdGFtZW50byAnJXMnIGZvcm5lY2lkby4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyOAorbXNnaWQgImdpdCBkaWZmdG9vbCBbPG9wdGlvbnM+XSBbPGNvbW1pdD4gWzxjb21taXQ+XV0gWy0tXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGRpZmZ0b29sIFs8b3DDp8O1ZXM+XSBbPGNvbW1pdD4gWzxjb21taXQ+XV0gWy0tXSBbPGNhbWluaG8+Li4uXSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQ6ICVkIgorbXNnc3RyICJmYWxoYTogJWQiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciBhIGxpZ2HDp8OjbyBzaW1iw7NsaWNhICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgZmlsZSAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciBvIGZpY2hlaXJvIGRlIGxpZ2HDp8OjbyBzaW1iw7NsaWNhICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyBmb3Igc3ltbGluayAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciBvIG9iamV0byAlcyBkYSBsaWdhw6fDo28gc2ltYsOzbGljYSAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjM5NQorbXNnaWQgIiIKKyJjb21iaW5lZCBkaWZmIGZvcm1hdHMoJy1jJyBhbmQgJy0tY2MnKSBhcmUgbm90IHN1cHBvcnRlZCBpblxuIgorImRpcmVjdG9yeSBkaWZmIG1vZGUoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4iCittc2dzdHIgIiIKKyJmb3JtYXRvcyBkaWZmIGNvbWJpbmFkbygnLWMnIGUgJy0tY2MnKSBuw6NvIHPDo28gc3Vwb3J0YWRvcyBlbVxuIgorIm1vZG8gZGlmZiBkaXJldMOzcmlvICgnLWQnIGUgJy0tZGlyLWRpZmYnKS4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm90aCBmaWxlcyBtb2RpZmllZDogJyVzJyBhbmQgJyVzJy4iCittc2dzdHIgImFtYm9zIG9zIGZpY2hlaXJvcyBtb2RpZmljYWRvczogJyVzJyBlICclcycuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjExCittc2dpZCAid29ya2luZyB0cmVlIGZpbGUgaGFzIGJlZW4gbGVmdC4iCittc2dzdHIgImZpY2hlaXJvIGRlIMOhcnZvcmUgZGUgdHJhYmFsaG8gZm9pIGRlaXhhZG8uIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBvcmFyeSBmaWxlcyBleGlzdCBpbiAnJXMnLiIKK21zZ3N0ciAiZXhpc3RlbSBmaWNoZWlyb3MgdGVtcG9yw6FyaW9zIGVtICclcycuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjIzCittc2dpZCAieW91IG1heSB3YW50IHRvIGNsZWFudXAgb3IgcmVjb3ZlciB0aGVzZS4iCittc2dzdHIgInBvZGUgcXVlcmVyIGxpbXBhciBvdSByZWN1cGVyw6EtbG9zLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY2OQorbXNnaWQgInVzZSBgZGlmZi5ndWl0b29sYCBpbnN0ZWFkIG9mIGBkaWZmLnRvb2xgIgorbXNnc3RyICJ1c2UgJ2RpZmYuZ3VpdG9vbCcgZW0gdmV6IGRlICdkaWZmLnRvb2wnIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjcxCittc2dpZCAicGVyZm9ybSBhIGZ1bGwtZGlyZWN0b3J5IGRpZmYiCittc2dzdHIgImVmZXR1YXIgZGlmZiBkaXJldMOzcmlvIGNvbXBsZXRvIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjczCittc2dpZCAiZG8gbm90IHByb21wdCBiZWZvcmUgbGF1bmNoaW5nIGEgZGlmZiB0b29sIgorbXNnc3RyICJuw6NvIHBlcmd1bnRhciBhbnRlcyBkZSBsYW7Dp2FyIHVtYSBmZXJyYW1lbnRhIGRpZmYiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NzkKK21zZ2lkICJ1c2Ugc3ltbGlua3MgaW4gZGlyLWRpZmYgbW9kZSIKK21zZ3N0ciAidXNhciBzeW1saW5rcyBubyBtb2RpIGRpci1kaWZmIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjgwCittc2dpZCAiPHRvb2w+IgorbXNnc3RyICI8ZmVycmFtZW50YT4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2ODEKK21zZ2lkICJ1c2UgdGhlIHNwZWNpZmllZCBkaWZmIHRvb2wiCittc2dzdHIgInVzYXIgYSBmZXJyYW1lbnRhIGRpZmYgZXNwZWNpZmljYWRhIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjgzCittc2dpZCAicHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgIgorbXNnc3RyICIiCisiaW1wcmltaXIgdW1hIGxpc3RhIGRlIGZlcnJhbWVudGFzIGRpZmYgcXVlIHBvZGVtIHNlciB1c2FkYXMgY29tICctLXRvb2wnIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njg2Cittc2dpZCAiIgorIm1ha2UgJ2dpdC1kaWZmdG9vbCcgZXhpdCB3aGVuIGFuIGludm9rZWQgZGlmZiB0b29sIHJldHVybnMgYSBub24gLSB6ZXJvIGV4aXQgIgorImNvZGUiCittc2dzdHIgIiIKKyJmYXplciBjb20gcXVlICdnaXQtZGlmZnRvb2wnIHRlcm1pbmUgcXVhbmRvIHVtYSBmZXJyYW1lbnRhIGRpZmYgaW52b2NhZGEgIgorInJldG9ybmEgdW0gY8OzZGlnbyBkZSBzYcOtZGEgbsOjbyBudWxvIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njg4Cittc2dpZCAiPGNvbW1hbmQ+IgorbXNnc3RyICI8Y29tYW5kbz4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2ODkKK21zZ2lkICJzcGVjaWZ5IGEgY3VzdG9tIGNvbW1hbmQgZm9yIHZpZXdpbmcgZGlmZnMiCittc2dzdHIgImVzcGVjaWZpY2FyIHVtIGNvbWFuZG8gcGVyc29uYWxpemFkbyBwYXJhIHZlciBkaWZmcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxMworbXNnaWQgIm5vIDx0b29sPiBnaXZlbiBmb3IgLS10b29sPTx0b29sPiIKK21zZ3N0ciAibmVuaHVtYSA8ZmVycmFtZW50YT4gZGFkYSBhIC0tdG9vbD08ZmVycmFtZW50YT4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MjAKK21zZ2lkICJubyA8Y21kPiBnaXZlbiBmb3IgLS1leHRjbWQ9PGNtZD4iCittc2dzdHIgIm5lbmh1bSA8Y21kPiBkYWRvIGEgLS1leHRjbWQ9PGNtZD4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyNQorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgImdpdCBmYXN0LWV4cG9ydCBbb3DDp8O1ZXMtZGUtcmV2LWxpc3RdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTgwCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAibW9zdHJhciBwcm9ncmVzc28gZGVwb2lzIGRlIDxuPiBvYmpldG9zIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTgyCittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHNpZ25lZCB0YWdzIgorbXNnc3RyICJzZWxlY2lvbmFyIG8gdHJhdGFtZW50byBkZSB0YWdzIGFzc2luYWRhcyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4NQorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgInNlbGVjaW9uYXIgbyB0cmF0YW1lbnRvIGRlIHRhZ3MgcXVlIGFwb250ZW0gcGFyYSBvYmpldG9zIGZpbHRyYWRvcyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4OAorbXNnaWQgIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJDYXB0dXJhciBtYXJjYXMgbmVzdGUgZmljaGVpcm8iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTAKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgIkltcG9ydGFyIG1hcmNhcyBkZXN0ZSBmaWNoZWlybyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5MgorbXNnaWQgIkZha2UgYSB0YWdnZXIgd2hlbiB0YWdzIGxhY2sgb25lIgorbXNnc3RyICJJbnZlbnRhciB1bSBhdXRvciBkZSB0YWcgcGFyYSB0YWdzIHF1ZSBuw6NvIHRlbmhhbSB1bSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5NAorbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICJNb3N0cmFyIGEgw6Fydm9yZSBjb21wbGV0YSBwYXJhIGNhZGEgY29tbWl0IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk2Cittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgIlVzYXIgYSBmdW5jaW9uYWxpZGFkZSBkb25lIHBhcmEgdGVybWluYXIgbyBmbHV4byIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5NworbXNnaWQgIlNraXAgb3V0cHV0IG9mIGJsb2IgZGF0YSIKK21zZ3N0ciAiSWdub3JhciBhIGV4aWJpw6fDo28gZGUgZGFkb3MgZGUgYmxvYiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5OAorbXNnaWQgInJlZnNwZWMiCittc2dzdHIgImVzcGVjaWZpY2Fkb3IgZGUgcmVmZXLDqm5jaWEiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTkKK21zZ2lkICJBcHBseSByZWZzcGVjIHRvIGV4cG9ydGVkIHJlZnMiCittc2dzdHIgIkFwbGljYXIgbyBlc3BlY2lmaWNhZG9yIGRlIHJlZmVyw6puY2lhIGEgcmVmZXLDqm5jaWFzIGV4cG9ydGFkYXMiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDAwCittc2dpZCAiYW5vbnltaXplIG91dHB1dCIKK21zZ3N0ciAiYW5vbmltaXphciBzYcOtZGEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMQorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBmZXRjaCBbPG9ww6fDtWVzPl0gWzxyZXBvc2l0w7NyaW8+IFs8ZXNwZWNpZmljYWRvci1kZS1yZWZlcsOqbmNpYT4uLi5dXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIyCittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cD4iCittc2dzdHIgImdpdCBmZXRjaCBbPG9ww6fDtWVzPl0gPGdydXBvPiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIzCittc2dpZCAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8cmVwb3NpdG9yeT4gfCA8Z3JvdXA+KS4uLl0iCittc2dzdHIgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3DDp8O1ZXM+XSBbKDxyZXBvc2l0w7NyaW8+IHwgPGdydXBvPikuLi5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjQKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBmZXRjaCAtLWFsbCBbPG9ww6fDtWVzPl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NSBidWlsdGluL3B1bGwuYzoxNzUKK21zZ2lkICJmZXRjaCBmcm9tIGFsbCByZW1vdGVzIgorbXNnc3RyICJvYnRlciBkZSB0b2RvcyBvcyByZW1vdG9zIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTcgYnVpbHRpbi9wdWxsLmM6MTc4Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICJhY3Jlc2NlbnRhciBhIC5naXQvRkVUQ0hfSEVBRCBlbSB2ZXogZGUgc3Vic3RpdHVpciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk5IGJ1aWx0aW4vcHVsbC5jOjE4MQorbXNnaWQgInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIKK21zZ3N0ciAiY2FtaW5obyBwYXJhIG8gY29tYW5kbyB1cGxvYWQgcGFjayBubyByZW1vdG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDAgYnVpbHRpbi9wdWxsLmM6MTgzCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiZm9yw6dhciBhIHN1YnN0aXR1acOnw6NvIGRvIHJhbW8gbG9jYWwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDIKK21zZ2lkICJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiCittc2dzdHIgIm9idGVyIGRlIG3Dumx0aXBsb3MgcmVtb3RvcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwNCBidWlsdGluL3B1bGwuYzoxODUKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJvYnRlciB0b2RhcyBhcyB0YWdzIGUgb2JqZXRvcyBhc3NvY2lhZG9zIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA2Cittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICJuw6NvIG9idGVyIHRvZGFzIGFzIHRhZ3MgKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDgKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBmZXRjaGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICJuw7ptZXJvIGRlIHN1Ym3Ds2R1bG9zIG9idGlkb3MgZW0gcGFyYWxlbG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTAgYnVpbHRpbi9wdWxsLmM6MTg4Cittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgIiIKKyJlbGltaW5hciBvcyByYW1vcyBkZSBtb25pdG9yaXphw6fDo28gcmVtb3RvcyBxdWUgasOhIG7Do28gZXhpc3RlbSBubyByZW1vdG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTEgYnVpbHRpbi9wdWxsLmM6MTkxCittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICJvbi1kZW1hbmQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTIgYnVpbHRpbi9wdWxsLmM6MTkyCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiY29udHJvbGFyIGEgb2J0ZW7Dp8OjbyByZWN1cnNpdmEgZGUgc3VibcOzZHVsb3MiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTYgYnVpbHRpbi9wdWxsLmM6MjAwCittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgIm1hbnRlciBvIHBhY290ZSB0cmFuc2ZlcmlkbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExOAorbXNnaWQgImFsbG93IHVwZGF0aW5nIG9mIEhFQUQgcmVmIgorbXNnc3RyICJwZXJtaXRpciBhIGF0dWFsaXphw6fDo28gZGEgcmVmZXLDqm5jaWEgSEVBRCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMSBidWlsdGluL2ZldGNoLmM6MTI3IGJ1aWx0aW4vcHVsbC5jOjIwMworbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiCittc2dzdHIgImFwcm9mdW5kYXIgbyBoaXN0w7NyaWNvIGRlIHVtIGNsb25lIHJhc28iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjMKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IHJlcG9zaXRvcnkgYmFzZWQgb24gdGltZSIKK21zZ3N0ciAiYXByb2Z1bmRhciBvIGhpc3TDs3JpY28gZGUgcmVwb3NpdMOzcmlvIHJhc28gY29tIGJhc2UgbmEgZGF0YSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyOSBidWlsdGluL3B1bGwuYzoyMDYKK21zZ2lkICJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY29udmVydGVyIG51bSByZXBvc2l0w7NyaW8gY29tcGxldG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzEgYnVpbHRpbi9sb2cuYzoxNDQwCittc2dpZCAiZGlyIgorbXNnc3RyICJkaXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzIKK21zZ2lkICJwcmVwZW5kIHRoaXMgdG8gc3VibW9kdWxlIHBhdGggb3V0cHV0IgorbXNnc3RyICJwcmVjZWRlciBpc3RvIGFvIGNhbWluaG8gZG8gc3VibcOzZHVsbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzNQorbXNnaWQgImRlZmF1bHQgbW9kZSBmb3IgcmVjdXJzaW9uIgorbXNnc3RyICJtb2RvIHJlY3Vyc2l2byBwb3Igb21pc3PDo28iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzcgYnVpbHRpbi9wdWxsLmM6MjA5Cittc2dpZCAiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IgorbXNnc3RyICJhY2VpdGFyIHJlZmVyw6puY2lhIHF1ZSBhdHVhbGl6ZW0gLmdpdC9zaGFsbG93IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM4IGJ1aWx0aW4vcHVsbC5jOjIxMQorbXNnaWQgInJlZm1hcCIKK21zZ3N0ciAibWFwYSBkZSByZWZlcsOqbmNpYXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzkgYnVpbHRpbi9wdWxsLmM6MjEyCittc2dpZCAic3BlY2lmeSBmZXRjaCByZWZtYXAiCittc2dzdHIgImVzcGVjaWZpY2FyIG1hcGEgZGUgcmVmZXLDqm5jaWFzIgorCisjOiBidWlsdGluL2ZldGNoLmM6Mzk1Cittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIlJlZmVyw6puY2lhIHJlbW90YSBIRUFEIG7Do28gZW5jb250cmFkYSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUxMworIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWd1cmF0aW9uIGZldGNoLm91dHB1dCBjb250YWlucyBpbnZhbGlkIHZhbHVlICVzIgorbXNnc3RyICJhIGNvbmZpZ3VyYcOnw6NvIGZldGNoLm91cHV0IGNvbnTDqW0gbyB2YWxvciBpbnbDoWxpZG8gJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAib2JqZXRvICVzIG7Do28gZW5jb250cmFkbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYxMAorbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW2F0dWFsaXphZG9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjIzIGJ1aWx0aW4vZmV0Y2guYzo3MDMKK21zZ2lkICJbcmVqZWN0ZWRdIgorbXNnc3RyICJbcmVqZWl0YWRvXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYyNAorbXNnaWQgImNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBvYnRlciBubyByYW1vIGF0dWFsIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjMzCittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICJbdGFnIGF0dWFsaXphZGFdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjM0IGJ1aWx0aW4vZmV0Y2guYzo2NjcgYnVpbHRpbi9mZXRjaC5jOjY4MworIzogYnVpbHRpbi9mZXRjaC5jOjY5OAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhdHVhbGl6YXIgYSByZWZlcsOqbmNpYSBsb2NhbCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1MworbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW25vdmEgdGFnXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1NgorbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW25vdm8gcmFtb10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NTkKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIltub3ZhIHJlZmVyw6puY2lhXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY5OAorbXNnaWQgImZvcmNlZCB1cGRhdGUiCittc2dzdHIgImF0dWFsaXphw6fDo28gZm9yw6dhZGEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MDMKK21zZ2lkICJub24tZmFzdC1mb3J3YXJkIgorbXNnc3RyICJzZW0gYXZhbsOnby1yw6FwaWRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHNcbiIKK21zZ3N0ciAiJXMgbsOjbyBlbnZpb3UgdG9kb3Mgb3Mgb2JqZXRvcyBuZWNlc3PDoXJpb3NcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWplY3QgJXMgYmVjYXVzZSBzaGFsbG93IHJvb3RzIGFyZSBub3QgYWxsb3dlZCB0byBiZSB1cGRhdGVkIgorbXNnc3RyICIlcyByZWplaXRhZG8sIHBvcnF1ZSBhcyByYcOtemVzIHJhc2FzIG7Do28gcG9kZW0gc2VyIGF0dWFsaXphZGFzIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU1IGJ1aWx0aW4vZmV0Y2guYzo5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIkRlICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisiYWxndW1hcyByZWZlcsOqbmNpYXMgbG9jYWlzIG7Do28gcHVkZXJhbSBzZXIgYXR1YWxpemFkYXM7IHRlbnRlIGV4ZWN1dGFyXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyBwYXJhIHJlbW92ZXIgYWxndW0gcmFtbyBhbnRpZ28gZW0gY29uZmxpdG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIGZpY2Fyw6Egc3VzcGVuc28pIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIGZpY291IHN1c3BlbnNvKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk1NAorbXNnaWQgIltkZWxldGVkXSIKK21zZ3N0ciAiW2VsaW1pbmFkb10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NTUgYnVpbHRpbi9yZW1vdGUuYzoxMDIyCittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIobmVuaHVtKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIk9idGVuw6fDo28gZGUgb2JqZXRvcyBubyByYW1vIGF0dWFsICVzIGRlIHVtIHJlcG9zaXTDs3JpbyBuw6NvIG51IHJlY3VzYWRhIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIk8gdmFsb3IgXCIlMiRzXCIgZGEgb3DDp8OjbyBcIiUxJHNcIiBuw6NvIMOpIHbDoWxpZG8gZW0gJTMkcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICJPcMOnw6NvIFwiJXNcIiBpZ25vcmFkYSBlbSAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA3NgorIywgYy1mb3JtYXQKK21zZ2lkICJEb24ndCBrbm93IGhvdyB0byBmZXRjaCBmcm9tICVzIgorbXNnc3RyICJOw6NvIHNlaSBjb21vIG9idGVyIGRlICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICJBIG9idGVyIGRlICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjM4IGJ1aWx0aW4vcmVtb3RlLmM6OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgb2J0ZXIgZGUgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjU2Cittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJOZW5odW0gcmVwb3NpdMOzcmlvIHJlbW90byBlc3BlY2lmaWNhZG8uIEVzcGVjaWZpcXVlIHVtIFVSTCBvdVxuIgorIm8gbm9tZSByZW1vdG8gYSBwYXJ0aXIgZG8gcXVhbCBhcyBub3ZhcyByZXZpc8O1ZXMgZGV2ZW0gc2VyIG9idGlkYXMuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI3OQorbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgIkRldmUgZXNwZWNpZmljYXIgdW0gbm9tZSBwYXJhIGEgdGFnLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzMjEKK21zZ2lkICJOZWdhdGl2ZSBkZXB0aCBpbiAtLWRlZXBlbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJOw6NvIMOpIHN1cG9ydGFkYSBwcm9mdW5kaWRhZGUgbmVnYXRpdmEgZW0gLS1kZWVwZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzIzCittc2dpZCAiLS1kZWVwZW4gYW5kIC0tZGVwdGggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1kZWVwZW4gZSAtLWRlcHRoIHPDo28gbXV0dWFtZW50ZSBleGNsdXNpdm9zIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTMyOAorbXNnaWQgIi0tZGVwdGggYW5kIC0tdW5zaGFsbG93IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICItLWRlcHRoIGUgLS11bnNoYWxsb3cgbsOjbyBwb2RlbSBzZXIgdXNhZG9zIGp1bnRvcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzMzAKK21zZ2lkICItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAidXNhciAtLXVuc2hhbGxvdyBudW0gcmVwb3NpdMOzcmlvIGNvbXBsZXRvIG7Do28gZmF6IHNlbnRpZG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzUyCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiCittc2dzdHIgImZldGNoIC0tYWxsIG7Do28gbGV2YSB1bSByZXBvc2l0w7NyaW8gY29tbyBhcmd1bWVudG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzU0Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJmZXRjaCAtLWFsbCBuw6NvIGZheiBzZW50aWRvIGNvbSBlc3BlY2lmaWNhZG9yZXMgZGUgcmVmZXLDqm5jaWEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgIk8gcmVtb3RvIG91IGdydXBvIHJlbW90byBuw6NvIGV4aXN0ZTogJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzczCittc2dpZCAiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJOw6NvIGZheiBzZW50aWRvIG9idGVyIHVtIGdydXBvIGUgZXNwZWNpZmljYXIgdW1hIHJlZmVyw6puY2lhIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzoxNAorbXNnaWQgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8ZmlsZT5dIgorbXNnc3RyICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZW5zYWdlbT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlICIKKyI8ZmljaGVpcm8+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjYzCittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICJwb3ZvYXIgbyByZWdpc3RvIGNvbSwgbm8gbcOheGltbywgPG4+IGVudHJhZGFzIGRvIHNob3J0bG9nIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjYKK21zZ2lkICJhbGlhcyBmb3IgLS1sb2cgKGRlcHJlY2F0ZWQpIgorbXNnc3RyICJhbGlhcyBkZSAtLWxvZyAob2Jzb2xldG8pIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjkKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICJ0ZXh0byIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcwCittc2dpZCAidXNlIDx0ZXh0PiBhcyBzdGFydCBvZiBtZXNzYWdlIgorbXNnc3RyICJ1c2FyIDx0ZXh0bz4gbm8gaW7DrWNpbyBkYSBtZW5zYWdlbSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcxCittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgImZpY2hlaXJvIGEgbGVyIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjkKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFs8b3B0aW9ucz5dIFs8cGF0dGVybj5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFs8b3DDp8O1ZXM+XSBbPHBhZHLDo28+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMAorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamV0bz5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8Y29tbWl0Pl1dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTIKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIFstLW5vLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIFstLW5vLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI3Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBzaGVsbHMiCittc2dzdHIgIiIKKyJlbnZvbHZlciBvcyBtYXJjYWRvcmVzIGRlIHBvc2nDp8OjbyBlbSBhc3BhcyBkZSBmb3JtYSBhZGVxdWFkYSBwYXJhICIKKyJpbnRlcnByZXRhZG9yZXMgZGUgY29tYW5kb3MiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjkKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgImVudm9sdmVyIG9zIG1hcmNhZG9yZXMgZGUgcG9zacOnw6NvIGVtIGFzcGFzIGRlIGZvcm1hIGFkZXF1YWRhIHBhcmEgcGVybCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMQorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICIiCisiZW52b2x2ZXIgb3MgbWFyY2Fkb3JlcyBkZSBwb3Npw6fDo28gZW0gYXNwYXMgZGUgZm9ybWEgYWRlcXVhZGEgcGFyYSBweXRob24iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzMKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAiZW52b2x2ZXIgb3MgbWFyY2Fkb3JlcyBkZSBwb3Npw6fDo28gZW0gYXNwYXMgZGUgZm9ybWEgYWRlcXVhZGEgcGFyYSBUY2wiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzYKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAibW9zdHJhciBhcGVuYXMgPG4+IHJlZmVyw6puY2lhcyBjb3JyZXNwb25kaWRhcyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MQorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBwb2ludHMgYXQgdGhlIGdpdmVuIG9iamVjdCIKK21zZ3N0ciAiaW1wcmltaXIgYXBlbmFzIHJlZmVyw6puY2lhcyBxdWUgYXBvbnRlbSBwYXJhIG8gb2JqZXRvIGZvcm5lY2lkbyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MworbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgImltcHJpbWlyIGFwZW5hcyByZWZlcmVuY2lhZGFzIGludGVncmFkYXMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDQKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAiaW1wcmltaXIgYXBlbmFzIHJlZmVyw6puY2lhcyBuw6NvIGludGVncmFkYSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NQorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImltcHJpbWlyIGFwZW5hcyByZWZlcsOqbmNpYXMgcXVlIGNvbnRlbmhhbSBvIGNvbW1pdCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImltcHJpbWlyIGFwZW5hcyByZWZlcsOqbmNpYXMgcXVlIG7Do28gY29udGVuaGFtIG8gY29tbWl0IgorCisjOiBidWlsdGluL2ZzY2suYzo1NTQKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgIkEgdmVyaWZpY2FyIGRpcmV0w7NyaW9zIGRlIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0NgorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs8b3DDp8O1ZXM+XSBbPG9iamV0bz4uLi5dIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTIKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIm1vc3RyYXIgb2JqZXRvcyBpbmFsY2Fuw6fDoXZlaXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY1MworbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAibW9zdHJhciBvYmpldG9zIHN1c3BlbnNvcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjU0Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgIm1vc3RyYXIgdGFncyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjU1Cittc2dpZCAicmVwb3J0IHJvb3Qgbm9kZXMiCittc2dzdHIgIm1vc3RyYXIgbsOzcyByYWl6IgorCisjOiBidWlsdGluL2ZzY2suYzo2NTYKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAiY29uc2lkZXJhciBvYmpldG9zIGRvIMOtbmRpY2UgY29tbyBuw7NzIGNhYmXDp2EiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY1NworbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAiY29uc2lkZXJhciBvcyByZWZsb2dzIGNvbW8gbsOzcyBjYWJlw6dhIChwcmVkZWZpbmnDp8OjbykiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY1OAorbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICJjb25zaWRlcmFyIHRhbWLDqW0gcGFjb3RlcyBlIG9iamV0b3Mgc29icmVzc2FsZW50ZSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjU5Cittc2dpZCAiY2hlY2sgb25seSBjb25uZWN0aXZpdHkiCittc2dzdHIgInZlcmlmaWNhciBzw7MgYSBjb25ldGl2aWRhZGUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY2MAorbXNnaWQgImVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZyIKK21zZ3N0ciAiYXRpdmFyIHZlcmlmaWNhw6fDo28gbWFpcyByaWdvcm9zYSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjYyCittc2dpZCAid3JpdGUgZGFuZ2xpbmcgb2JqZWN0cyBpbiAuZ2l0L2xvc3QtZm91bmQiCittc2dzdHIgImVzY3JldmVyIG9iamV0b3Mgc3VzcGVuc29zIGVtIC5naXQvbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjYzIGJ1aWx0aW4vcHJ1bmUuYzoxMDcKK21zZ2lkICJzaG93IHByb2dyZXNzIgorbXNnc3RyICJtb3N0cmFyIHByb2dyZXNzbyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjY0Cittc2dpZCAic2hvdyB2ZXJib3NlIG5hbWVzIGZvciByZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAibW9zdHJhciBub21lcyB2ZXJib3NvcyBkZSBvYmpldG9zIGluYWxjYW7Dp8OhdmVpcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI1Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiQSB2ZXJpZmljYXIgb2JqZXRvcyIKKworIzogYnVpbHRpbi9nYy5jOjI1Cittc2dpZCAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZ2MgWzxvcMOnw7Vlcz5dIgorCisjOiBidWlsdGluL2djLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZzdGF0ICVzOiAlcyIKK21zZ3N0ciAiZmFsaGEgYW8gaW52b2NhciBmc3RhdCBzb2JyZSAlczogJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuJ3Qgc3RhdCAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgaW52b2NhciBzdGF0IHNvYnJlICVzIgorCisjOiBidWlsdGluL2djLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbGFzdCBnYyBydW4gcmVwb3J0ZWQgdGhlIGZvbGxvd2luZy4gUGxlYXNlIGNvcnJlY3QgdGhlIHJvb3QgY2F1c2VcbiIKKyJhbmQgcmVtb3ZlICVzLlxuIgorIkF1dG9tYXRpYyBjbGVhbnVwIHdpbGwgbm90IGJlIHBlcmZvcm1lZCB1bnRpbCB0aGUgZmlsZSBpcyByZW1vdmVkLlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiQSDDumx0aW1hIGV4ZWN1w6fDo28gZG8gZ2MgcmVwb3J0b3UgbyBzZWd1aW50ZS5cbiIKKyJDb3JyaWphIGEgb3JpZ2VtIGRvIHByb2JsZW1hIGUgcmVtb3ZhICVzLlxuIgorIkEgbGltcGV6YSBhdXRvbcOhdGljYSBuw6NvIHNlcsOhIHJlYWxpemFkYSBlbnF1YW50byBvIGZpY2hlaXJvIGV4aXN0aXIuXG4iCisiXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzozNTQKK21zZ2lkICJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAiZWxpbWluYXIgZmljaGVpcm9zIG7Do28gcmVmZXJlbmNpYWRvcyIKKworIzogYnVpbHRpbi9nYy5jOjM1NgorbXNnaWQgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIKK21zZ3N0ciAic2VyIG1haXMgbWludWNpb3NvIChhdW1lbnRhIG8gdGVtcG8gZGUgZXhlY3XDp8OjbykiCisKKyM6IGJ1aWx0aW4vZ2MuYzozNTcKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICJhdGl2YXIgbW9kbyBhdXRvLWdjIgorCisjOiBidWlsdGluL2djLmM6MzU4Cittc2dpZCAiZm9yY2UgcnVubmluZyBnYyBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGdjIHJ1bm5pbmciCittc2dzdHIgImZvcsOnYXIgYSBleGVjdcOnw6NvIGRvIGdjIG1lc21vIHF1ZSBoYWphIG91dHJvIGdjIGEgZXhlY3V0YXIiCisKKyM6IGJ1aWx0aW4vZ2MuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGdjLmxvZ2V4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiZmFsaGEgYW8gYW5hbGlzYXIgbyB2YWxvciAlcyBkZSBnYy5sb2dleHBpcnkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGluIGJhY2tncm91bmQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKyJBIGF1dG9jb21wYWN0YXIgbyByZXBvc2l0w7NyaW8gZW0gc2VndW5kbyBwbGFubyBwYXJhIG9idGVyIHVtIG1lbGhvciAiCisiZGVzZW1wZW5oby5cbiIKKworIzogYnVpbHRpbi9nYy5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIkEgYXV0b2NvbXBhY3RhciBvIHJlcG9zaXTDs3JpbyBwYXJhIG9idGVyIHVtIG1lbGhvciBkZXNlbXBlbmhvLlxuIgorCisjOiBidWlsdGluL2djLmM6NDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1hbnVhbCBob3VzZWtlZXBpbmcuXG4iCittc2dzdHIgIkNvbnN1bHRlIFwiZ2l0IGhlbHAgZ2NcIiBwYXJhIGxlciBzb2JyZSBtYW51dGVuw6fDo28gbWFudWFsLlxuIgorCisjOiBidWlsdGluL2djLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnYyBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gbWFjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBpZiBub3QpIgorbXNnc3RyICIiCisiZ2MgasOhIGEgZXhlY3V0YXIgbmEgbcOhcXVpbmEgJyVzJyBwaWQgJTxQUkl1TUFYPiAodXNlIC0tZm9yY2Ugc2UgbsOjbyBmb3IgbyAiCisiY2FzbykiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0NzEKK21zZ2lkICIiCisiVGhlcmUgYXJlIHRvbyBtYW55IHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHM7IHJ1biAnZ2l0IHBydW5lJyB0byByZW1vdmUgdGhlbS4iCittc2dzdHIgIiIKKyJFeGlzdGVtIGRlbWFzaWFkb3Mgb2JqZXRvIHNvbHRvcyBpbmFsY2Fuw6fDoXZlaXM7IGV4ZWN1dGUgJ2dpdCBwcnVuZScgcGFyYSBvcyAiCisicmVtb3Zlci4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjI1Cittc2dpZCAiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8cGF0dGVybj4gWzxyZXY+Li4uXSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZ3JlcCBbPG9ww6fDtWVzPl0gWy1lXSA8cGFkcsOjbz4gWzxyZXY+Li4uXSBbWy0tXSA8Y2FtaW5obz4uLi5dIgorCisjOiBidWlsdGluL2dyZXAuYzoyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVwOiBmYWxoYSBhbyBjcmlhciB0aHJlYWQ6ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSBmb3IgJXMiCittc2dzdHIgIm8gbsO6bWVybyBkZSB0aHJlYWRzIGVzcGVjaWZpY2FkbyBlbSAlMiRzIMOpIGludsOhbGlkbyAoJTEkZCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc2OSBidWlsdGluL2dyZXAuYzo4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIGEgw6Fydm9yZSAoJXMpIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGVmZXR1YXIgZ3JlcCBkZSBvYmpldG9zIGRvIHRpcG8gJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MworIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJhIG9ww6fDo28gJyVjJyBlc3BlcmEgdW0gdmFsb3IgbnVtw6lyaWNvIgorCisjOiBidWlsdGluL2dyZXAuYzo5ODAKK21zZ2lkICJzZWFyY2ggaW4gaW5kZXggaW5zdGVhZCBvZiBpbiB0aGUgd29yayB0cmVlIgorbXNnc3RyICJwcm9jdXJhciBubyDDrW5kaWNlIGVtIHZleiBkZSBwcm9jdXJhciBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBidWlsdGluL2dyZXAuYzo5ODIKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAicHJvY3VyYXIgZW0gY29udGXDumRvcyBuw6NvIGdlcmlkb3MgcGVsbyBnaXQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk4NAorbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAicHJvY3VyYXIgZW0gZmljaGVpcm9zIGNvbnRyb2xhZG9zIGUgbsOjbyBjb250cm9sYWRvcyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTg2Cittc2dpZCAiaWdub3JlIGZpbGVzIHNwZWNpZmllZCB2aWEgJy5naXRpZ25vcmUnIgorbXNnc3RyICJpZ25vcmFyIGZpY2hlaXJvcyBlc3BlY2lmaWNhZG9zIHZpYSAnLmdpdGlnbm9yZSciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk4OAorbXNnaWQgInJlY3Vyc2l2ZWx5IHNlYXJjaCBpbiBlYWNoIHN1Ym1vZHVsZSIKK21zZ3N0ciAicHJvY3VyYXIgcmVjdXJzaXZhbWVudGUgZW0gY2FkYSBzdWJtw7NkdWxvIgorCisjOiBidWlsdGluL2dyZXAuYzo5OTAKK21zZ2lkICJiYXNlbmFtZSIKK21zZ3N0ciAibm9tZWJhc2UiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk5MQorbXNnaWQgInByZXBlbmQgcGFyZW50IHByb2plY3QncyBiYXNlbmFtZSB0byBvdXRwdXQiCittc2dzdHIgInByZWNlZGVyIG8gbm9tZWJhc2UgZG8gcHJvamV0byBwYWkgbmEgc2HDrWRhIgorCisjOiBidWlsdGluL2dyZXAuYzo5OTQKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAibW9zdHJhciBsaW5oYXMgbsOjbyBjb3JyZXNwb25kaWRhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTk2Cittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAibsOjbyBkaWZlcmVuY2lhciBtYWnDunNjdWxhcyBkZSBtaW7DunNjdWxhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTk4Cittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgImNvcnJlc3BvbmRlciBwYWRyw7VlcyBhcGVuYXMgYSBwYWxhdnJhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAwMAorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgInByb2Nlc3NhciBmaWNoZWlyb3MgYmluw6FyaW9zIGNvbW8gdGV4dG8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMDIKK21zZ2lkICJkb24ndCBtYXRjaCBwYXR0ZXJucyBpbiBiaW5hcnkgZmlsZXMiCittc2dzdHIgImlnbm9yYXIgZmljaGVpcm9zIGJpbsOhcmlvcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAwNQorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAicHJvY2Vzc2FyIGZpY2hlaXJvcyBiaW7DoXJpb3MgY29tIGZpbHRyb3MgdGV4dGNvbnYiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMDcKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgImRlc2NlciBubyBtw6F4aW1vIGF0w6kgPHByb2Z1bmRpZGFkZT4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMTEKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAidXNhciBleHByZXNzw7VlcyByZWd1bGFyZXMgZXN0ZW5kaWRhcyBkbyBQT1NJWCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAxNAorbXNnaWQgInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIKK21zZ3N0ciAidXNhciBleHByZXNzw7VlcyByZWd1bGFyZXMgYsOhc2ljYXMgZG8gUE9TSVggKHByZWRlZmluacOnw6NvKSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAxNworbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICJpbnRlcnByZXRhciBwYWRyw7VlcyBjb21vIGNhZGVpYXMgZGUgY2FyYWN0ZXJlcyBmaXhhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAyMAorbXNnaWQgInVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAidXNhciBleHByZXNzw7VlcyByZWd1bGFyZXMgY29tcGF0w612ZWlzIGNvbSBQZXJsIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDIzCittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgIm1vc3RyYXIgbsO6bWVyb3MgZGUgbGluaGEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMjQKK21zZ2lkICJkb24ndCBzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAibsOjbyBtb3N0cmFyIG5vbWVzIGRlIGZpY2hlaXJvIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDI1Cittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIm1vc3RyYXIgbm9tZXMgZGUgZmljaGVpcm8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMjcKK21zZ2lkICJzaG93IGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJtb3N0cmFyIG5vbWVzIGRlIGZpY2hlaXJvIHJlbGF0aXZhbWVudGUgYW8gZGlyZXTDs3JpbyBzdXBlcmlvciIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAyOQorbXNnaWQgInNob3cgb25seSBmaWxlbmFtZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAibW9zdHJhciBhcGVuYXMgbm9tZXMgZGUgZmljaGVpcm8gZW0gdmV6IGRlIGxpbmhhcyBjb3JyZXNwb25kaWRhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAzMQorbXNnaWQgInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorbXNnc3RyICJzaW7Ds25pbW8gZGUgLS1maWxlcy13aXRoLW1hdGNoZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMzQKK21zZ2lkICJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giCittc2dzdHIgIm1vc3RyYXIgYXBlbmFzIG5vbWVzIGRlIGZpY2hlaXJvIHNlbSBjb3JyZXNwb25kw6puY2lhIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDM2Cittc2dpZCAicHJpbnQgTlVMIGFmdGVyIGZpbGVuYW1lcyIKK21zZ3N0ciAiaW1wcmltaXIgTlVMIGRlcG9pcyBkb3Mgbm9tZXMgZGUgZmljaGVpcm8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMzgKK21zZ2lkICJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJtb3N0cmFyIG8gbsO6bWVybyBkZSBjb3JyZXNwb25kw6puY2lhcyBlbSB2ZXogZGFzIGxpbmhhIGNvcnJlc3BvbmRpZGFzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDM5Cittc2dpZCAiaGlnaGxpZ2h0IG1hdGNoZXMiCittc2dzdHIgInJlYWzDp2FyIGNvcnJlc3BvbmTDqm5jaWFzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDQxCittc2dpZCAicHJpbnQgZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMiCittc2dzdHIgIiIKKyJpbXByaW1pciB1bWEgbGluaGEgZW0gYnJhbmNvIGVudHJlIGNvcnJlc3BvbmTDqm5jaWFzIGRlIGRpZmVyZW50ZXMgZmljaGVpcm9zIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDQzCittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAiIgorIm1vc3RyYXIgc8OzIHVtYSB2ZXogbyBub21lIGRvIGZpY2hlaXJvIGFjaW1hIGRhcyBjb3JyZXNwb25kw6puY2lhcyBkZW50cm8gZG8gIgorIm1lc21vIGZpY2hlaXJvIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDQ2Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIm1vc3RyYXIgPG4+IGxpbmhhcyBkZSBjb250ZXh0byBhbnRlcyBlIGRlcG9pcyBkYXMgY29ycmVzcG9uZMOqbmNpYXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNDkKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICJtb3N0cmFyIDxuPiBsaW5oYXMgZGUgY29udGV4dG8gYW50ZXMgZGFzIGNvcnJlc3BvbmTDqm5jaWFzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDUxCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICJtb3N0cmFyIDxuPiBsaW5oYXMgZGUgY29udGV4dG8gZGVwb2lzIGRhcyBjb3JyZXNwb25kw6puY2lhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA1MworbXNnaWQgInVzZSA8bj4gd29ya2VyIHRocmVhZHMiCittc2dzdHIgInVzYXIgPG4+IHRocmVhZHMgZGUgdHJhYmFsaG8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNTQKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICJhdGFsaG8gcGFyYSAtQyBOVU0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNTcKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICJtb3N0cmFyIHVtYSBsaW5oYSBjb20gbyBub21lIGRhIGZ1bsOnw6NvIGFudGVzIGRhcyBjb3JyZXNwb25kw6puY2lhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA1OQorbXNnaWQgInNob3cgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIgorbXNnc3RyICJtb3N0cmFyIGEgZnVuw6fDo28gY2lyY3VuZGFudGUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjIKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIKK21zZ3N0ciAibGVyIHBhZHLDtWVzIGRvIGZpY2hlaXJvIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY0Cittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJwcm9jdXJhciA8cGFkcsOjbz4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjYKK21zZ2lkICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIgorbXNnc3RyICJjb21iaW5hciBwYWRyw7VlcyBlc3BlY2lmaWNhZG9zIGNvbSAtZSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA3OAorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICJpbmRpY2FyIHBhZHLDo28gZW5jb250cmFkbyBubyB2YWxvciBkZSBzYcOtZGEsIG1hcyBuw6NvIGltcHJpbWlyIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDgwCittc2dpZCAic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIKK21zZ3N0ciAiIgorIm1vc3RyYXIgYXBlbmFzIGNvcnJlc3BvbmTDqm5jaWFzIGRlIGZpY2hlaXJvIHF1ZSB0ZW5oYW0gdG9kb3Mgb3MgcGFkcsO1ZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwODIKK21zZ2lkICJzaG93IHBhcnNlIHRyZWUgZm9yIGdyZXAgZXhwcmVzc2lvbiIKK21zZ3N0ciAibW9zdHJhciDDoXJ2b3JlIGRlIGFuYWxpc2UgZGEgZXhwcmVzc8O1ZXMgZ3JlcCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA4NgorbXNnaWQgInBhZ2VyIgorbXNnc3RyICJwYWdpbmFkb3IiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwODYKK21zZ2lkICJzaG93IG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciIKK21zZ3N0ciAibW9zdHJhciBmaWNoZWlyb3MgY29tIGNvcnJlc3BvbmTDqm5jaWFzIG5vIHBhZ2luYWRvciIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA4OQorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAicGVybWl0aXIgaW52b2NhciBncmVwKDEpIChpZ25vcmFkbyBuZXN0YSBjb21waWxhw6fDo28pIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTUzCittc2dpZCAibm8gcGF0dGVybiBnaXZlbi4iCittc2dzdHIgIm5lbmh1bSBwYWRyw6NvIGZvcm5lY2lkby4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExODkKK21zZ2lkICItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cyIKK21zZ3N0ciAiLS1uby1pbmRleCBvdSAtLXVudHJhY2tlZCBuw6NvIHBvZGVtIHNlciB1c2Fkb3MgZW0gcmV2aXPDtWVzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIHJlc29sdmVyIHJldmlzw6NvOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTIyOCBidWlsdGluL2luZGV4LXBhY2suYzoxNDg1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgIm7Dum1lcm8gZGUgdGhyZWFkcyBlc3BlY2lmaWNhZG8gaW52w6FsaWRvICglZCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEyNTEKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBzw7MgZnVuY2lvbmEgbmEgw6Fydm9yZSBkZSB0cmFiYWxobyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTI3NAorbXNnaWQgIm9wdGlvbiBub3Qgc3VwcG9ydGVkIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMuIgorbXNnc3RyICJvcMOnw6NvIG7Do28gc3Vwb3J0YWRhIGNvbSAtLXJlY3Vyc2Utc3VibW9kdWxlcy4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEyODAKK21zZ2lkICItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXguIgorbXNnc3RyICItLWNhY2hlZCBvdSAtLXVudHJhY2tlZCBuw6NvIHBvZGVtIHNlciB1c2Fkb3MgY29tIC0tbm8taW5kZXguIgorCisjOiBidWlsdGluL2dyZXAuYzoxMjg2Cittc2dpZCAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMuIgorbXNnc3RyICIiCisiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgbsOjbyBwb2RlbSBzZXIgdXNhZG9zIGVtIGNvbnRlw7pkb3MgbsOjbyBjb250cm9sYWRvcy4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEyOTQKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4uIgorbXNnc3RyICItLWNhY2hlZCBlIMOhcnZvcmVzIGZvcmFtIGZvcm5lY2lkb3Mgc2ltdWx0YW5lYW1lbnRlLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjgxCittc2dpZCAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGZpbGU+Li4uIgorbXNnc3RyICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dGlwbz5dIFstd10gWy0tcGF0aD08ZmljaGVpcm8+IHwgLS1uby1maWx0ZXJzXSBbLS0iCisic3RkaW5dIFstLV0gPGZpY2hlaXJvPi4uLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjgyCittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NAorbXNnaWQgInR5cGUiCittc2dzdHIgInRpcG8iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NAorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICJ0aXBvIGRvIG9iamV0byIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk1Cittc2dpZCAid3JpdGUgdGhlIG9iamVjdCBpbnRvIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgImVzY3JldmVyIG8gb2JqZXRvIG5hIGJhc2UgZGUgZGFkb3MgZGUgb2JqZXRvcyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk3Cittc2dpZCAicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iCittc2dzdHIgImxlciBvIG9iamV0byBkYSBlbnRyYWRhIHBhZHLDo28iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICJndWFyZGFyIG8gZmljaGVpcm8gdGFsIGNvbW8gZXN0w6EsIHNlbSBmaWx0cm9zIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAwCittc2dpZCAiIgorImp1c3QgaGFzaCBhbnkgcmFuZG9tIGdhcmJhZ2UgdG8gY3JlYXRlIGNvcnJ1cHQgb2JqZWN0cyBmb3IgZGVidWdnaW5nIEdpdCIKK21zZ3N0ciAiIgorIm9idGVyIGhhc2ggZGUgbGl4byBhbGVhdMOzcmlvIHBhcmEgY3JpYXIgb2JqZXRvcyBjb3Jyb21waWRvcyBwYXJhIGRlcHVyYXIgbyAiCisiR2l0IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAxCittc2dpZCAicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiCittc2dzdHIgInByb2Nlc3NhciBvIGZpY2hlaXJvIGNvbW8gc2UgZXN0ZSBmb3NzZSBkbyBjYW1pbmhvIGluZGljYWRvIgorCisjOiBidWlsdGluL2hlbHAuYzo0MgorbXNnaWQgInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiCittc2dzdHIgImltcHJpbWlyIHRvZG9zIG9zIGNvbWFuZG9zIGRpc3BvbsOtdmVpcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMKK21zZ2lkICJleGNsdWRlIGd1aWRlcyIKK21zZ3N0ciAiZXhjbHVpciBndWlhcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQKK21zZ2lkICJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiCittc2dzdHIgImltcHJpbWlyIGxpc3RhIGRlIGd1aWFzIMO6dGVpcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDUKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICJtb3N0cmFyIHDDoWdpbmEgZG8gbWFudWFsIgorCisjOiBidWlsdGluL2hlbHAuYzo0NgorbXNnaWQgInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIgorbXNnc3RyICJtb3N0cmFyIG8gbWFudWFsIG5vIG5hdmVnYWRvciB3ZWIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ4Cittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgIm1vc3RyYXIgcMOhZ2luYSBpbmZvIgorCisjOiBidWlsdGluL2hlbHAuYzo1NAorbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iCittc2dzdHIgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21hbmRvPl0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICJmb3JtYXRvIGRlIGFqdWRhIG7Do28gcmVjb25oZWNpZG8gJyVzJyIKKworIzogYnVpbHRpbi9oZWxwLmM6OTMKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICJGYWxoYSBhbyBpbmljaWFyIGVtYWNzY2xpZW50LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA2Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICJGYWxoYSBhbyBhbmFsaXNhciBhIHZlcnPDo28gZG8gZW1hY3NjbGllbnQuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAiYSB2ZXJzw6NvIGRvIGVtYWNzY2xpZW50ICclZCcgw6kgZGVtYXNpYWRvIGFudGlnYSAoPCAyMikuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMzIgYnVpbHRpbi9oZWxwLmM6MTUzIGJ1aWx0aW4vaGVscC5jOjE2MiBidWlsdGluL2hlbHAuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWMgJyVzJyIKK21zZ3N0ciAiZmFsaGEgYW8gZXhlY3V0YXIgJyVzJyIKKworIzogYnVpbHRpbi9oZWxwLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBwYXRoIGZvciB1bnN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5jbWQnIGluc3RlYWQuIgorbXNnc3RyICIiCisiJyVzJzogY2FtaW5obyBwYXJhIHZpc3VhbGl6YWRvciBkZSBtYW51YWwgbsOjbyBzdXBvcnRhZG8uXG4iCisiQ29uc2lkZXJlIHVzYXIgJ21hbi48ZmVycmFtZW50YT4uY21kJy4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogY21kIGZvciBzdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMnOiBjb21hbmRvIGRlIHZpc3VhbGl6YWRvciBkZSBtYW51YWwgc3Vwb3J0YWRvLlxuIgorIkNvbnNpZGVyZSB1c2FyICdtYW4uPGZlcnJhbWVudGE+LnBhdGgnLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iCittc2dzdHIgIiclcyc6IHZpc3VhbGl6YWRvciBkZSBtYW51YWwgZGVzY29uaGVjaWRvLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzUzCittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJuZW5odW0gdmlzdWFsaXphZG9yIGRlIG1hbnVhbCBhdGVuZGV1IG8gcGVkaWRvIgorCisjOiBidWlsdGluL2hlbHAuYzozNjEKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJuZW5odW0gdmlzdWFsaXphZG9yIGRlIGluZm8gYXRlbmRldSBvIHBlZGlkbyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDAzCittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAiRGVmaW5pciBhdHJpYnV0b3MgcG9yIGNhbWluaG8iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQwNAorbXNnaWQgIkV2ZXJ5ZGF5IEdpdCBXaXRoIDIwIENvbW1hbmRzIE9yIFNvIgorbXNnc3RyICJEacOhcmlvIEdpdCBjb20gbWFpcyBvdSBtZW5vcyAyMCBDb21hbmRvcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDA1Cittc2dpZCAiQSBHaXQgZ2xvc3NhcnkiCittc2dzdHIgIlVtIEdsb3Nzw6FyaW8gZG8gR2l0IgorCisjOiBidWlsdGluL2hlbHAuYzo0MDYKK21zZ2lkICJTcGVjaWZpZXMgaW50ZW50aW9uYWxseSB1bnRyYWNrZWQgZmlsZXMgdG8gaWdub3JlIgorbXNnc3RyICIiCisiRXNwZWNpZmljYXIgZmljaGVpcm9zIG7Do28gY29udHJvbGFkb3MgcGFyYSBzZXJlbSBpbnRlbmNpb25hbG1lbnRlIGlnbm9yYWRvcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDA3Cittc2dpZCAiRGVmaW5pbmcgc3VibW9kdWxlIHByb3BlcnRpZXMiCittc2dzdHIgIkRlZmluaXIgcHJvcHJpZWRhZGVzIGRlIHN1Ym3Ds2R1bG9zIgorCisjOiBidWlsdGluL2hlbHAuYzo0MDgKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgIkVzcGVjaWZpY2FyIHJldmlzw7VlcyBlIGludGVydmFsb3MgZG8gR2l0IgorCisjOiBidWlsdGluL2hlbHAuYzo0MDkKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQgKGZvciB2ZXJzaW9uIDEuNS4xIG9yIG5ld2VyKSIKK21zZ3N0ciAiVW1hIGludHJvZHXDp8OjbyBhbyBHaXQgKHZlcnPDo28gMS41LjEgb3UgbWFpcyByZWNlbnRlKSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDEwCittc2dpZCAiQW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQgd29ya2Zsb3dzIHdpdGggR2l0IgorbXNnc3RyICJVbWEgZGVzY3Jpw6fDo28gZ2VyYWwgZG9zIGZsdXhvcyBkZSB0cmFiYWxobyByZWNvbWVuZGFkb3MgcGFyYSBvIEdpdCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDIyCittc2dpZCAiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZTpcbiIKK21zZ3N0ciAiT3MgZ3VpYXMgY29tdW5zIGRvIEdpdDpcbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImBnaXQgJXMnIGlzIGFsaWFzZWQgdG8gYCVzJyIKK21zZ3N0ciAiJ2dpdCAlcycgw6kgdW0gYWxpYXMgZGUgJyVzJyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDYyIGJ1aWx0aW4vaGVscC5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMlcyIKK21zZ3N0ciAidXRpbGl6YcOnw6NvOiAlcyVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCB0eXBlIG1pc21hdGNoIGF0ICVzIgorbXNnc3RyICJpbmNvbXBhdGliaWxpZGFkZSBkZSB0aXBvIGRlIG9iamV0byBlbSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgIm8gb2JqZXRvIGVzcGVyYWRvICVzIG7Do28gZm9pIHJlY2ViaWRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzOiBleHBlY3RlZCB0eXBlICVzLCBmb3VuZCAlcyIKK21zZ3N0ciAib2JqZXRvICVzOiB0aXBvIGVzcGVyYWRvICVzLCBvYnRpZG8gJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAibsOjbyDDqSBwb3Nzw612ZWwgcHJlZW5jaGVyICVkIGJ5dGUiCittc2dzdHJbMV0gIm7Do28gw6kgcG9zc8OtdmVsIHByZWVuY2hlciAlZCBieXRlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjc5Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICJmaW0gZGUgZmljaGVpcm8gKEVPRikgcHJlbWF0dXJvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODAKK21zZ2lkICJyZWFkIGVycm9yIG9uIGlucHV0IgorbXNnc3RyICJlcnJvIGRlIGxlaXR1cmEgZGEgZW50cmFkYSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjkyCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgImZvcmFtIHVzYWRvcyBtYWlzIGJ5dGVzIGRvcyBxdWUgZXN0YXZhbSBkaXNwb27DrXZlaXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5OQorbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgInBhY290ZSBkZW1hc2lhZG8gZ3JhbmRlIHBhcmEgYSBkZWZpbmnDp8OjbyBhdHVhbCBkZSBvZmZfdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzAyIGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo5MgorbXNnaWQgInBhY2sgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZSIKK21zZ3N0ciAibyBwYWNvdGUgZXhjZWRlIG8gdGFtYW5obyBtw6F4aW1vIHBlcm1pdGlkbyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhYnJpciBvIGZpY2hlaXJvIGRlIHBhY290ZSAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMzcKK21zZ2lkICJwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCIKK21zZ3N0ciAiYSBhc3NpbmF0dXJhIGRvIHBhY290ZSBuw6NvIGNvcnJlc3BvbmRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayB2ZXJzaW9uICU8UFJJdTMyPiB1bnN1cHBvcnRlZCIKK21zZ3N0ciAidmVyc8OjbyBkZSBwYWNvdGUgJTxQUkl1MzI+IG7Do28gc3Vwb3J0YWRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJTxQUkl1TUFYPjogJXMiCittc2dzdHIgInBhY290ZSBjb20gb2JqZXRvIGluY29ycmV0byBubyBvZmZzZXQgJTxQUkl1TUFYPjogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICJhIGRlc2NvbXBhY3Rhw6fDo28gcmV0b3Jub3UgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUyOAorbXNnaWQgIm9mZnNldCB2YWx1ZSBvdmVyZmxvdyBmb3IgZGVsdGEgYmFzZSBvYmplY3QiCittc2dzdHIgImRlbHRhIGRlIG9iamV0byBiYXNlIGNvbSBjYXBhY2lkYWRlIGV4Y2VkaWRhIG5vIHZhbG9yIGRlIG9mZnNldCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTM2Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICJvZmZzZXQgZGEgYmFzZSBkZWx0YSBlc3TDoSBmb3JhIGRvIGxpbWl0ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb2JqZWN0IHR5cGUgJWQiCittc2dzdHIgIm9iamV0byBkZSB0aXBvIGRlc2NvbmhlY2lkbyAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTc1Cittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgaW52b2NhciBwcmVhZCBzb2JyZSBvIGZpY2hlaXJvIGRlIHBhY290ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAiZmltIHByZW1hdHVybyBkZSBmaWNoZWlybyBkZSBwYWNvdGUsIGZhbHRhICU8UFJJdU1BWD4gYnl0ZSIKK21zZ3N0clsxXSAiZmltIHByZW1hdHVybyBkZSBmaWNoZWlybyBkZSBwYWNvdGUsIGZhbHRhbSAlPFBSSXVNQVg+IGJ5dGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo2MDMKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAiaW5jb25zaXN0w6puY2lhIGRlIGRlc2NvbXBhY3Rhw6fDo28gZ3JhdmUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0OSBidWlsdGluL2luZGV4LXBhY2suYzo3NTUgYnVpbHRpbi9pbmRleC1wYWNrLmM6Nzc4CisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MTYgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIKK21zZ3N0ciAiQ09MSVPDg08gREUgU0hBMSBDT00gJXMgRU5DT05UUkFEQSEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc1MiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE2NAorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgaW5mbyAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbGVyIGluZm9ybWHDp8OjbyBkZSBvYmpldG8gZXhpc3RlbnRlICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0ICVzIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBsZXIgbyBvYmpldG8gZXhpc3RlbnRlICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAib2JqZXRvIGJsb2IgaW52w6FsaWRvICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyIKK21zZ3N0ciAiaW52w6FsaWRvICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NTMKK21zZ2lkICJFcnJvciBpbiBvYmplY3QiCittc2dzdHIgIkVycm8gbm8gb2JqZXRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgIk5lbSB0b2RvcyBvcyBvYmpldG9zIGZpbGhvcyBkZSAlcyBzw6NvIGFsY2Fuw6fDoXZlaXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjkyNyBidWlsdGluL2luZGV4LXBhY2suYzo5NTgKK21zZ2lkICJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiCittc2dzdHIgImZhbGhhIGFvIGFwbGljYXIgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjgKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAiQSByZWNlYmVyIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjgKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICJBIGluZGV4YXIgb2JqZXRvcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2MAorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAicGFjb3RlIGNvcnJvbXBpZG8gKFNIQTEgbsOjbyBjb3JyZXNwb25kZSkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjUKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGludm9jYXIgZnN0YXQgc29icmUgbyBmaWNoZWlybyBkZSBwYWNvdGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjgKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgInBhY290ZSBjb20gbGl4byBubyBmaW5hbCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE3OQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgImV4dHJlbWEgY29uZnVzw6NvIGVtIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjAyCittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAiQSByZXNvbHZlciBkZWx0YXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgY3JpYXIgdGhyZWFkOiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI1NQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiCittc2dzdHIgImV4dHJlbWEgY29uZnVzw6NvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0clswXSAiY29uY2x1w61kbyBjb20gJWQgb2JqZXRvIGxvY2FsIgorbXNnc3RyWzFdICJjb25jbHXDrWRvIGNvbSAlZCBvYmpldG9zIGxvY2FpcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI3MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHRhaWwgY2hlY2tzdW0gZm9yICVzIChkaXNrIGNvcnJ1cHRpb24/KSIKK21zZ3N0ciAiU29tYSBkZSB2ZXJpZmljYcOnw6NvIGluZXNwZXJhZGEgbm8gZmluYWwgZGUgJXMgKGNvcnJ1cMOnw6NvIG5vIGRpc2NvPykiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gInBhY290ZSBjb20gJWQgZGVsdGEgbsOjbyByZXNvbHZpZG8iCittc2dzdHJbMV0gInBhY290ZSBjb20gJWQgZGVsdGFzIG7Do28gcmVzb2x2aWRvcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBhcHBlbmRlZCBvYmplY3QgKCVkKSIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgY29tcGFjdGFyIG9iamV0byBhY3Jlc2NlbnRhZG8gKCVkKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM3NworIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAib2JqZXRvIGxvY2FsICVzIGNvcnJvbXBpZG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDMKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAiZXJybyBhbyBmZWNoYXIgZmljaGVpcm8gZGUgcGFjb3RlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZXNjcmV2ZXIgbyBmaWNoZWlybyBkZSBjb25zZXJ2YcOnw6NvICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIHdyaXR0ZW4ga2VlcCBmaWxlICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGZlY2hhciBvIGZpY2hlaXJvIGRlIGNvbnNlcnZhw6fDo28gJyVzJyBlc2NyaXRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDMzCittc2dpZCAiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZ3VhcmRhciBmaWNoZWlybyBkZSBwYWNvdGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NDEKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZ3VhcmRhciBvIGZpY2hlaXJvIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAicGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IGluY29ycmV0byIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ4OSBidWlsdGluL2luZGV4LXBhY2suYzoxNjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiCittc2dzdHIgInNlbSBzdXBvcnRlIGRlIHRocmVhZHMsICVzIGlnbm9yYWRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBhYnJpciBvIGZpY2hlaXJvIGRlIHBhY290ZSAnJXMnIGV4aXN0ZW50ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBhYnJpciBvIGZpY2hlaXJvIGRlIMOtbmRpY2UgZG8gcGFjb3RlIGV4aXN0ZW50ZSBkZSAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gIiVkIG9iamV0byBuw6NvIGRlbHRhIgorbXNnc3RyWzFdICIlZCBvYmpldG9zIG7Do28gZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAiY29tcHJpbWVudG8gZGUgY2FkZWlhID0gJWQ6ICVsdSBvYmpldG8iCittc2dzdHJbMV0gImNvbXByaW1lbnRvIGRlIGNhZGVpYSA9ICVkOiAlbHUgb2JqZXRvcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAibyBub21lIGRvIGZpY2hlaXJvIGRlIHBhY290ZSAnJXMnIG7Do28gdGVybWluYSBlbSAnLnBhY2snIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjk4IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MDEKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MTcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgIiVzIGluY29ycmV0byIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTczNworbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluIG7Do28gcG9kZSBzZXIgdXNhZG8gc2VtIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MzkKK21zZ2lkICItLXN0ZGluIHJlcXVpcmVzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tc3RkaW4gcmVxdWVyIHVtIHJlcG9zaXTDs3JpbyBnaXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NDcKK21zZ2lkICItLXZlcmlmeSB3aXRoIG5vIHBhY2tmaWxlIG5hbWUgZ2l2ZW4iCittc2dzdHIgIi0tdmVyaWZ5IHNlbSBub21lIGRvIGZpY2hlaXJvIGRlIHBhY290ZSBpbmRpY2FkbyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgaW52b2NhciBzdGF0IHNvYnJlICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGludm9jYXIgc3RhdCBzb2JyZSBvIG1vZGVsbyAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbmRpciAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhYnJpciAob3BlbmRpcikgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGxlciAocmVhZGxpbmspICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgY3JpYXIgYSBsaWdhw6fDo28gc2ltYsOzbGljYSAnJXMnICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgY29waWFyICclcycgcGFyYSAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAibW9kZWxvICVzIGlnbm9yYWRvIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCAlcyIKK21zZ3N0ciAibW9kZWxvcyBuw6NvIGVuY29udHJhZG9zIGVtICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIGZyb20gJyVzJzogJXMiCittc2dzdHIgIm1vZGVsb3MgbsOjbyBjb3BpYWRvcyBkZSAnJXMnOiAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgcHJvY2Vzc2FyIG8gdGlwbyBkZSBmaWNoZWlybyAlZCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzMwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbW92ZXIgJXMgcGFyYSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzQ3IGJ1aWx0aW4vaW5pdC1kYi5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMgasOhIGV4aXN0ZSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiUmVwb3NpdMOzcmlvIEdpdCBwYXJ0aWxoYWRvIGUgZXhpc3RlbnRlIHJlaW5pY2lhbGl6YWRvIGVtICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJSZXBvc2l0w7NyaW8gR2l0IGV4aXN0ZW0gcmVpbmljaWFsaXphZG8gZW0gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiUmVwb3NpdMOzcmlvIEdpdCB2YXppbyBlIHBhcnRpbGhhZG8gaW5pY2lhbGl6YWRvIGVtICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiUmVwb3NpdMOzcmlvIEdpdCB2YXppbyBpbmljaWFsaXphZG8gZW0gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0NTcKK21zZ2lkICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPGRpcmVjdG9yeT5dIgorbXNnc3RyICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PGRpcmV0w7NyaW8tbW9kZWxvPl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3PDtWVzPl1dIFs8ZGlyZXTDs3Jpbz5dIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0ODAKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAicGVybWlzc8O1ZXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4MQorbXNnaWQgInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIKK21zZ3N0ciAiIgorImVzcGVjaWZpY2FyIHF1ZSBvIHJlcG9zaXTDs3JpbyBnaXQgc2Vyw6EgcGFydGlsaGFkbyBwb3IgdsOhcmlvcyB1dGlsaXphZG9yZXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUxNSBidWlsdGluL2luaXQtZGIuYzo1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBjcmlhciBvIGRpcmV0w7NyaW8gJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIG11ZGFyIHBhcmEgbyBkaXJldMOzcmlvICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAiIgorIiVzIChvdSAtLXdvcmstdHJlZT08ZGlyZXTDs3Jpbz4pIG7Do28gw6kgcGVybWl0aWRvIHNlbSBlc3BlY2lmaWNhciAlcyAob3UgLS1naXQtIgorImRpcj08ZGlyZXTDs3Jpbz4pIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgYWNlZGVyIMOgIMOhcnZvcmUgZGUgdHJhYmFsaG8gJyVzJyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNQorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHRva2VuPlsoPXw6KTx2YWx1ZT5dKS4uLl0gWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHRva2VuPlsoPXw6KTx2YWxvcj5dKS4uLl0gWzxmaWNoZWlybz4uLi5dIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI2Cittc2dpZCAiZWRpdCBmaWxlcyBpbiBwbGFjZSIKK21zZ3N0ciAiZWRpdGFyIGZpY2hlaXJvcyBubyBsb2NhbCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoyNworbXNnaWQgInRyaW0gZW1wdHkgdHJhaWxlcnMiCittc2dzdHIgImNvcnRhciB0ZXJtaW5hZG9yZXMgdmF6aW9zIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI4Cittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAidGVybWluYWRvciIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoyOQorbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICJ0ZXJtaW5hZG9yZXMgYSBhZGljaW9uYXIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6NDIKK21zZ2lkICJubyBpbnB1dCBmaWxlIGdpdmVuIGZvciBpbi1wbGFjZSBlZGl0aW5nIgorbXNnc3RyICJuZW5odW0gZmljaGVpcm8gZGUgZW50cmFkYSBmb3JuZWNpZG8gcGFyYSBlZGnDp8OjbyBubyBsb2NhbCIKKworIzogYnVpbHRpbi9sb2cuYzo0NAorbXNnaWQgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBsb2cgWzxvcMOnw7Vlcz5dIFs8aW50ZXJ2YWxvLWRlLXJldmlzw7Vlcz5dIFtbLS1dIDxjYW1pbmhvPi4uLl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDUKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzxvcMOnw7Vlcz5dIDxvYmpldG8+Li4uIgorCisjOiBidWlsdGluL2xvZy5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICJvcMOnw6NvIC0tZGVjb3JhdGUgaW52w6FsaWRhOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDQKK21zZ2lkICJzdXBwcmVzcyBkaWZmIG91dHB1dCIKK21zZ3N0ciAic3VwcmltaXIgc2HDrWRhIGRvIGRpZmYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ1Cittc2dpZCAic2hvdyBzb3VyY2UiCittc2dzdHIgIm1vc3RyYXIgb3JpZ2VtIgorCisjOiBidWlsdGluL2xvZy5jOjE0NgorbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICJ1c2FyIGZpY2hlaXJvIGRlIG1hcGVhbWVudG8gZGUgY29ycmVpbyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDcKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICJvcMOnw7VlcyBkZSBkZWNvcmHDp8OjbyIKKworIzogYnVpbHRpbi9sb2cuYzoxNTAKK21zZ2lkICJQcm9jZXNzIGxpbmUgcmFuZ2UgbixtIGluIGZpbGUsIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAicHJvY2Vzc2FyIGludGVydmFsbyBkZSBsaW5oYXMgbixtLCBhIGNvbnRhciBhIHBhcnRpciBkZSAxIgorCisjOiBidWlsdGluL2xvZy5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iCittc2dzdHIgIlJlc3VsdGFkbyBmaW5hbDogJWQgJXNcbiIKKworIzogYnVpbHRpbi9sb2cuYzo0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHNob3cgJXM6IGJhZCBmaWxlIgorbXNnc3RyICJnaXQgc2hvdyAlczogZmljaGVpcm8gaW5jb3JyZXRvIgorCisjOiBidWlsdGluL2xvZy5jOjUwNyBidWlsdGluL2xvZy5jOjYwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBsZXIgbyBvYmpldG8gJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdHlwZTogJWQiCittc2dzdHIgIlRpcG8gZGVzY29uaGVjaWRvOiAlZCIKKworIzogYnVpbHRpbi9sb2cuYzo3NDYKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyBzZW0gdmFsb3IiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODQ2Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICJvIG5vbWUgZG8gZGlyZXTDs3JpbyBkZSBzYcOtZGEgw6kgZGVtYXNpYWRvIGxvbmdvIgorCisjOiBidWlsdGluL2xvZy5jOjg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBhYnJpciBvIGZpY2hlaXJvIGRlIHBhdGNoICVzIgorCisjOiBidWlsdGluL2xvZy5jOjg3NQorbXNnaWQgIk5lZWQgZXhhY3RseSBvbmUgcmFuZ2UuIgorbXNnc3RyICLDiSBuZWNlc3PDoXJpbyBleGF0YW1lbnRlIHVtIGludGVydmFsby4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODg1Cittc2dpZCAiTm90IGEgcmFuZ2UuIgorbXNnc3RyICJOw6NvIMOpIHVtIGludGVydmFsby4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTkxCittc2dpZCAiQ292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAiQSBjYXJ0YSBkZSBhcHJlc2VudGHDp8OjbyBwcmVjaXNhIGRlIHVtIGZvcm1hdG8gZGUgZS1tYWlsIgorCisjOiBidWlsdGluL2xvZy5jOjEwNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAiaW4tcmVwbHktdG8gaW5jb3JyZXRvOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMDk4Cittc2dpZCAiZ2l0IGZvcm1hdC1wYXRjaCBbPG9wdGlvbnM+XSBbPHNpbmNlPiB8IDxyZXZpc2lvbi1yYW5nZT5dIgorbXNnc3RyICJnaXQgZm9ybWF0LXBhdGNoIFs8b3DDp8O1ZXM+XSBbPGRlc2RlPiB8IDxpbnRlcnZhbG8tZGUtcmV2aXPDtWVzPl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0OAorbXNnaWQgIlR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICJEb2lzIGRpcmV0w7NyaW9zIGRlIHNhw61kYT8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NSBidWlsdGluL2xvZy5jOjE4OTggYnVpbHRpbi9sb2cuYzoxOTAwIGJ1aWx0aW4vbG9nLmM6MTkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAiQ29tbWl0IGRlc2NvbmhlY2lkbyAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjY1IGJ1aWx0aW4vbm90ZXMuYzo4ODMgYnVpbHRpbi90YWcuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIkZhbGhhIGFvIHJlc29sdmVyICclcycgbnVtYSByZWZlcsOqbmNpYSB2w6FsaWRhLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjcwCittc2dpZCAiQ291bGQgbm90IGZpbmQgZXhhY3QgbWVyZ2UgYmFzZS4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBlbmNvbnRyYXIgYSBiYXNlIGV4YXRhIGRlIGludGVncmHDp8Ojby4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI3NAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gZ2V0IHVwc3RyZWFtLCBpZiB5b3Ugd2FudCB0byByZWNvcmQgYmFzZSBjb21taXQgYXV0b21hdGljYWxseSxcbiIKKyJwbGVhc2UgdXNlIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gdG8gdHJhY2sgYSByZW1vdGUgYnJhbmNoLlxuIgorIk9yIHlvdSBjb3VsZCBzcGVjaWZ5IGJhc2UgY29tbWl0IGJ5IC0tYmFzZT08YmFzZS1jb21taXQtaWQ+IG1hbnVhbGx5LiIKK21zZ3N0ciAiIgorIkZhbGhhIGFvIG9idGVyIHJhbW8gYSBtb250YW50ZSwgc2UgcXVlciBncmF2YXIgbyBjb21taXQgYmFzZSAiCisiYXV0b21hdGljYW1lbnRlLFxuIgorInVzZSBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gcGFyYSBzZWd1aXIgdW0gcmFtbyByZW1vdG8uXG4iCisiT3UgcG9kZSBlc3BlY2lmaWNhciBvIGNvbW1pdCBiYXNlIGNvbSAtLWJhc2U9PGJhc2UtY29tbWl0LWlkPiBtYW51YWxtZW50ZS4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI5NAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgIkZhbGhhIGFvIHByb2N1cmFyIGJhc2UgZXhhdGEgZGUgaW50ZWdyYcOnw6NvIgorCisjOiBidWlsdGluL2xvZy5jOjEzMDUKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGQgYmUgdGhlIGFuY2VzdG9yIG9mIHJldmlzaW9uIGxpc3QiCittc2dzdHIgIm8gY29tbWl0IGJhc2UgZGV2ZSBzZXIgbyBhbnRlY2Vzc29yIGRhIGxpc3RhIGRlIHJldmlzw7VlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzA5Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkbid0IGJlIGluIHJldmlzaW9uIGxpc3QiCittc2dzdHIgIm8gY29tbWl0IGJhc2UgbsOjbyBkZXZlIGZhemVyIHBhcnRlIGRhIGxpc3RhIGRlIHJldmlzw7VlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzU4Cittc2dpZCAiY2Fubm90IGdldCBwYXRjaCBpZCIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgb2J0ZXIgbyBpZCBkbyBwYXRjaCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDE1Cittc2dpZCAidXNlIFtQQVRDSCBuL21dIGV2ZW4gd2l0aCBhIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAidXNhciBbUEFUQ0ggbi9tXSBtZXNtbyBjb20gdW0gw7puaWNvIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE0MTgKK21zZ2lkICJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIKK21zZ3N0ciAidXNhciBbUEFUQ0hdIG1lc21vIGNvbSBtw7psdGlwbG9zIHBhdGNoZXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQyMgorbXNnaWQgInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IgorbXNnc3RyICJpbXByaW1pciBwYXRjaGVzIHBhcmEgYSBzYcOtZGEgcGFkcsOjbyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDI0Cittc2dpZCAiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiCittc2dzdHIgImdlcmFyIHVtYSBjYXJ0YSBkZSBhcHJlc2VudGHDp8OjbyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDI2Cittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICIiCisidXNhciB1bWEgc2VxdcOqbmNpYSBkZSBuw7ptZXJvcyBzaW1wbGVzIHBhcmEgZGVub21pbmFyIG9zIGZpY2hlaXJvcyBnZXJhZG9zIgorCisjOiBidWlsdGluL2xvZy5jOjE0MjcKK21zZ2lkICJzZngiCittc2dzdHIgInNmeCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDI4Cittc2dpZCAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciCittc2dzdHIgInVzYXIgPHNmeD4gZW0gdmV6IGRlICcucGF0Y2gnIgorCisjOiBidWlsdGluL2xvZy5jOjE0MzAKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICJjb21lw6dhciBhIG51bWVyYXIgb3MgcGF0Y2hlcyBlbSA8bj4gZW0gdmV6IGRlIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzMgorbXNnaWQgIm1hcmsgdGhlIHNlcmllcyBhcyBOdGggcmUtcm9sbCIKK21zZ3N0ciAibWFyY2FyIGEgc8OpcmllIGNvbW8gYSBuLcOpc2ltYSByZWl0ZXJhw6fDo28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzNAorbXNnaWQgIlVzZSBbUkZDIFBBVENIXSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIlVzYXIgW1JGQyBQQVRDSF0gZW0gdmV6IGRlIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzNworbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAidXNhciBbPHByZWZpeG8+XSBlbSB2ZXogZGUgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDQwCittc2dpZCAic3RvcmUgcmVzdWx0aW5nIGZpbGVzIGluIDxkaXI+IgorbXNnc3RyICJndWFyZGFyIG9zIGZpY2hlaXJvcyByZXN1bHRhbnRlcyBlbSA8ZGlyPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDQzCittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgIm7Do28gdGlyYXIvaW5zZXJpciBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjE0NDYKK21zZ2lkICJkb24ndCBvdXRwdXQgYmluYXJ5IGRpZmZzIgorbXNnc3RyICJuw6NvIGdlcmFyIGRpZmZzIGJpbsOhcmlvcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDQ4Cittc2dpZCAib3V0cHV0IGFsbC16ZXJvIGhhc2ggaW4gRnJvbSBoZWFkZXIiCittc2dzdHIgInByZWVuY2hlciBvIGNhYmXDp2FsaG8gRnJvbSBjb20gaGFzaCBkZSB6ZXJvcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDUwCittc2dpZCAiZG9uJ3QgaW5jbHVkZSBhIHBhdGNoIG1hdGNoaW5nIGEgY29tbWl0IHVwc3RyZWFtIgorbXNnc3RyICJuw6NvIGluY2x1aXIgdW0gcGF0Y2ggcXVlIGNvaW5jaWRhIGNvbSB1bSBjb21taXQgYSBtb250YW50ZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDUyCittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICIiCisibW9zdHJhciBubyBmb3JtYXRvIGRlIHBhdGNoIGVtIHZleiBkZSBubyBmb3JtYXRvIHBvciBvbWlzc8OjbyAocGF0Y2ggKyBzdGF0KSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDU0Cittc2dpZCAiTWVzc2FnaW5nIgorbXNnc3RyICJNZW5zYWdlbSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDU1Cittc2dpZCAiaGVhZGVyIgorbXNnc3RyICJjYWJlw6dhbGhvIgorCisjOiBidWlsdGluL2xvZy5jOjE0NTYKK21zZ2lkICJhZGQgZW1haWwgaGVhZGVyIgorbXNnc3RyICJhZGljaW9uYXIgY2FiZcOnYWxobyBkZSBlLW1haWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ1NyBidWlsdGluL2xvZy5jOjE0NTkKK21zZ2lkICJlbWFpbCIKK21zZ3N0ciAiZS1tYWlsIgorCisjOiBidWlsdGluL2xvZy5jOjE0NTcKK21zZ2lkICJhZGQgVG86IGhlYWRlciIKK21zZ3N0ciAiYWRpY2lvbmFyIGNhYmXDp2FsaG8gVG86IgorCisjOiBidWlsdGluL2xvZy5jOjE0NTkKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAiYWRpY2lvbmFyIGNhYmXDp2FsaG8gQ2M6IgorCisjOiBidWlsdGluL2xvZy5jOjE0NjEKK21zZ2lkICJpZGVudCIKK21zZ3N0ciAiaWRlbnRpZGFkZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDYyCittc2dpZCAic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIKK21zZ3N0ciAiIgorImRlZmluaXIgbyBlbmRlcmXDp28gRnJvbSBjb21vIDxpZGVudGlkYWRlPiAob3UgY29tbyBpZGVudGlkYWRlIGRvIGNvbW1pdHRlciAiCisic2UgbsOjbyBpbmRpY2FkbykiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2NAorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgImlkLW1lbnNhZ2VtIgorCisjOiBidWlsdGluL2xvZy5jOjE0NjUKK21zZ2lkICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iCittc2dzdHIgInVzYXIgbyBwcmltZWlybyBlbWFpbCBwYXJhIHJlc3BvbmRlciBhIDxpZC1tZW5zYWdlbT4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2NiBidWlsdGluL2xvZy5jOjE0NjkKK21zZ2lkICJib3VuZGFyeSIKK21zZ3N0ciAibGltaXRlIgorCisjOiBidWlsdGluL2xvZy5jOjE0NjcKK21zZ2lkICJhdHRhY2ggdGhlIHBhdGNoIgorbXNnc3RyICJhbmV4YXIgbyBwYXRjaCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDcwCittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAiaW5jb3Jwb3JhciBvIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzQKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAiYXRpdmFyIG1lbnNhZ2VucyBwb3IgdMOzcGljb3MsIGVzdGlsb3M6IHNoYWxsb3cgKHJhc28pLCBkZWVwIChwcm9mdW5kbykiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ3NgorbXNnaWQgInNpZ25hdHVyZSIKK21zZ3N0ciAiYXNzaW5hdHVyYSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc3Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICJhZGljaW9uYXIgdW1hIGFzc2luYXR1cmEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ3OAorbXNnaWQgImJhc2UtY29tbWl0IgorbXNnc3RyICJjb21taXQtYmFzZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc5Cittc2dpZCAiYWRkIHByZXJlcXVpc2l0ZSB0cmVlIGluZm8gdG8gdGhlIHBhdGNoIHNlcmllcyIKK21zZ3N0ciAiYWRpY2lvbmFyIGluZm9ybWHDp8OjbyBwcsOpLXJlcXVpc2l0byBkYSDDoXJ2b3JlIMOgIHPDqXJpZSBkZSBwYXRjaGVzIgorCisjOiBidWlsdGluL2xvZy5jOjE0ODEKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUgZnJvbSBhIGZpbGUiCittc2dzdHIgImFkaWNpb25hciB1bWEgYXNzaW5hdHVyYSBkZSB1bSBmaWNoZWlybyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDgyCittc2dpZCAiZG9uJ3QgcHJpbnQgdGhlIHBhdGNoIGZpbGVuYW1lcyIKK21zZ3N0ciAibsOjbyBpbXByaW1pciBvcyBub21lcyBkb3MgZmljaGVpcm9zIGRlIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE1NzIKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIi1uIGUgLWsgc8OjbyBtdXR1YW1lbnRlIGV4Y2x1c2l2b3MuIgorCisjOiBidWlsdGluL2xvZy5jOjE1NzQKK21zZ2lkICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiLS1zdWJqZWN0LXByZWZpeC8tLXJmYyBlIC1rIHPDo28gbXV0dWFtZW50ZSBleGNsdXNpdm9zLiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTgyCittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHkgbsOjbyBmYXogc2VudGlkbyIKKworIzogYnVpbHRpbi9sb2cuYzoxNTg0Cittc2dpZCAiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtc3RhdHVzIG7Do28gZmF6IHNlbnRpZG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU4NgorbXNnaWQgIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1jaGVjayBuw6NvIGZheiBzZW50aWRvIgorCisjOiBidWlsdGluL2xvZy5jOjE2MTYKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAic2HDrWRhIHBhZHLDo28sIG91IGRpcmV0w7NyaW8sIHF1YWwgZGVsZXM/IgorCisjOiBidWlsdGluL2xvZy5jOjE2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyIG8gZGlyZXTDs3JpbyAnJXMnIgorCisjOiBidWlsdGluL2xvZy5jOjE3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbGVyIG8gZmljaGVpcm8gZGUgYXNzaW5hdHVyYSAnJXMnIgorCisjOiBidWlsdGluL2xvZy5jOjE3ODQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAiRmFsaGEgYW8gY3JpYXIgb3MgZmljaGVpcm9zIGRlIHNhw61kYSIKKworIzogYnVpbHRpbi9sb2cuYzoxODMzCittc2dpZCAiZ2l0IGNoZXJyeSBbLXZdIFs8dXBzdHJlYW0+IFs8aGVhZD4gWzxsaW1pdD5dXV0iCittc2dzdHIgImdpdCBjaGVycnkgWy12XSBbPHJhbW8tYS1tb250YW50ZT4gWzxoZWFkPiBbPGxpbWl0ZT5dXV0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIiIKKyJPIHJhbW8gcmVtb3RvIHNlZ3VpZG8gbsOjbyBmb2kgZW5jb250cmFkbywgZXNwZWNpZmlxdWUgPHJhbW8tYS1tb250YW50ZT4gIgorIm1hbnVhbG1lbnRlLlxuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDYxCittc2dpZCAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgbHMtZmlsZXMgWzxvcMOnw7Vlcz5dIFs8ZmljaGVpcm8+Li4uXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUxMAorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgImlkZW50aWZpY2FyIG8gZXN0YWRvIGRvIGZpY2hlaXJvIGNvbSB0YWdzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTEyCittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgIiIKKyJ1c2FyIGxldHJhcyBtaW7DunNjdWxhcyBwYXJhIGZpY2hlaXJvcyAnYXNzdW1pZG8gbsOjbyBhbHRlcmFkbycgKCdhc3N1bWUgIgorInVuY2hhbmdlZCcpIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTE0Cittc2dpZCAic2hvdyBjYWNoZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZGVmYXVsdCkiCittc2dzdHIgIm1vc3RyYXIgZmljaGVpcm9zIGVtIGNhY2hlIG5hIHNhw61kYSAocHJlZGVmaW5pw6fDo28pIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTE2Cittc2dpZCAic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIm1vc3RyYXIgZmljaGVpcm9zIGVsaW1pbmFkb3MgbmEgc2HDrWRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTE4Cittc2dpZCAic2hvdyBtb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJtb3N0cmFyIGZpY2hlaXJvcyBtb2RpZmljYWRvcyBuYSBzYcOtZGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjAKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIm1vc3RyYXIgb3V0cm9zIGZpY2hlaXJvcyBuYSBzYcOtZGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjIKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAibW9zdHJhciBmaWNoZWlyb3MgaWdub3JhZG9zIG5hIHNhw61kYSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyNQorbXNnaWQgInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJtb3N0cmFyIG5vbWUgZGUgb2JqZXRvcyBjb20gY29udGXDumRvIHByZXBhcmFkbywgbmEgc2HDrWRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI3Cittc2dpZCAic2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCIKK21zZ3N0ciAiIgorIm1vc3RyYXIgZmljaGVpcm9zIG5vIHNpc3RlbWEgZGUgZmljaGVpcm9zIHF1ZSBwcmVjaXNhbSBkZSBzZXIgcmVtb3ZpZG9zIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI5Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICJtb3N0cmFyIG5vbWVzIGRlIGRpcmV0w7NyaW9zICdvdGhlcicgKG91dHJvKSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzMQorbXNnaWQgInNob3cgbGluZSBlbmRpbmdzIG9mIGZpbGVzIgorbXNnc3RyICJtb3N0cmFyIGZpbmFpcyBkZSBsaW5oYSBkb3MgZmljaGVpcm9zIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMzCittc2dpZCAiZG9uJ3Qgc2hvdyBlbXB0eSBkaXJlY3RvcmllcyIKK21zZ3N0ciAibsOjbyBtb3N0cmFyIGRpcmV0w7NyaW9zIHZhemlvcyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNgorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAibW9zdHJhciBmaWNoZWlyb3MgbsOjbyBpbnRlZ3JhZG9zIG5hIHNhw61kYSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzOAorbXNnaWQgInNob3cgcmVzb2x2ZS11bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICJtb3N0cmFyIGluZm9ybWHDp8OjbyBkZSByZXNvbHZlci1kZXNmYXplciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MAorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAiaWdub3JhciBmaWNoZWlyb3MgcXVlIGNvcnJlc3BvbmRhbSBhbyBwYWRyw6NvIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQzCittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAibGVyIHBhZHLDtWVzIGRlIGV4Y2x1c8OjbyBkbyA8ZmljaGVpcm8+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ2Cittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgImxlciBwYWRyw7VlcyBkZSBleGNsdXPDo28gcG9yIGRpcmV0w7NyaW8gZG8gPGZpY2hlaXJvPiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0OAorbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgImluY2x1aXIgYXMgZXhjbHVzw7VlcyBzdGFuZGFyZCBkbyBnaXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTEKK21zZ2lkICJtYWtlIHRoZSBvdXRwdXQgcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAibW9zdHJhciBvcyBjYW1pbmhvcyByZWxhdGl2YW1lbnRlIGFvIGRpcmV0w7NyaW8gc3VwZXJpb3IgZG8gcHJvamV0byIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NAorbXNnaWQgInJlY3Vyc2UgdGhyb3VnaCBzdWJtb2R1bGVzIgorbXNnc3RyICJwZXJjb3JyZXIgc3VibcOzZHVsb3MgcmVjdXJzaXZhbWVudGUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTYKK21zZ2lkICJpZiBhbnkgPGZpbGU+IGlzIG5vdCBpbiB0aGUgaW5kZXgsIHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IiCittc2dzdHIgInNlIHVtIDxmaWNoZWlybz4gbsOjbyBlc3RpdmVyIG5vIMOtbmRpY2UsIHRyYXRhciBjb21vIGVycm8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTcKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAiw6Fydm9yZS1ldGMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTgKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICIiCisiZmluZ2lyIHF1ZSBvcyBjYW1pbmhvcyByZW1vdmlkb3MgZGVzZGUgPMOhcnZvcmUtZXRjPiBhaW5kYSBlc3TDo28gcHJlc2VudGVzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTYwCittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAibW9zdHJhciBkYWRvcyBkZSBkZXB1cmHDp8OjbyIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3Cittc2dpZCAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPHJlcG9zaXRvcnk+IFs8cmVmcz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPHJlcG9zaXTDs3Jpbz4gWzxyZWZlcsOqbmNpYXM+Li4uXV0iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTIKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAibsOjbyBpbXByaW1pciBVUkwgcmVtb3RvIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjUzIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTUKK21zZ2lkICJleGVjIgorbXNnc3RyICJleGVjIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjU0IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTYKK21zZ2lkICJwYXRoIG9mIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIGhvc3QiCittc2dzdHIgImNhbWluaG8gcGFyYSBnaXQtdXBsb2FkLXBhY2sgbm8gc2Vydmlkb3IgcmVtb3RvIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjU4Cittc2dpZCAibGltaXQgdG8gdGFncyIKK21zZ3N0ciAicmVzdHJpbmdpci1zZSBhIHRhZ3MiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJsaW1pdCB0byBoZWFkcyIKK21zZ3N0ciAicmVzdHJpbmdpci1zZSBhIGNhYmXDp2FzIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYwCittc2dpZCAiZG8gbm90IHNob3cgcGVlbGVkIHRhZ3MiCittc2dzdHIgIm7Do28gbW9zdHJhciB0YWdzIGRlc2Nhc2NhZGFzIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYyCittc2dpZCAidGFrZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiBpbnRvIGFjY291bnQiCittc2dzdHIgInRlciB1cmwuPGJhc2U+Lmluc3RlYWRPZiBlbSBjb250YSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NAorbXNnaWQgImV4aXQgd2l0aCBleGl0IGNvZGUgMiBpZiBubyBtYXRjaGluZyByZWZzIGFyZSBmb3VuZCIKK21zZ3N0ciAidGVybWluYXIgY29tIGPDs2RpZ28gZGUgc2HDrWRhIDIgc2UgbsOjbyBmb3JlbSBlbmNvbnRyYWRhcyByZWZlcsOqbmNpYXMiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjYKK21zZ2lkICJzaG93IHVuZGVybHlpbmcgcmVmIGluIGFkZGl0aW9uIHRvIHRoZSBvYmplY3QgcG9pbnRlZCBieSBpdCIKK21zZ3N0ciAibW9zdHJhciBhIHJlZmVyw6puY2lhIHN1YmphY2VudGUgZW0gYWRpw6fDo28gYW8gb2JqZXRvIHBvciBlbGEgYXBvbnRhZG8iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjI4Cittc2dpZCAiZ2l0IGxzLXRyZWUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLXRyZWUgWzxvcMOnw7Vlcz5dIDzDoXJ2b3JlLWV0Yz4gWzxjYW1pbmhvPi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyNgorbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAibW9zdHJhciBhcGVuYXMgw6Fydm9yZXMiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOAorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIKK21zZ3N0ciAicGVyY29ycmVyIGFzIHN1YsOhcnZvcmVzIHJlY3Vyc2l2YW1lbnRlIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzAKK21zZ2lkICJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIgorbXNnc3RyICJtb3N0cmFyIMOhcnZvcmVzIGFvIHBlcmNvcnJlciIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMzCittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAidGVybWluYXIgZW50cmFkYXMgY29tIG8gYnl0ZSBOVUwiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNAorbXNnaWQgImluY2x1ZGUgb2JqZWN0IHNpemUiCittc2dzdHIgImluY2x1aXIgZGltZW5zw6NvIGRvcyBvYmpldG9zIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzYgYnVpbHRpbi9scy10cmVlLmM6MTM4Cittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAibGlzdGFyIGFwZW5hcyBvcyBub21lcyBkZSBmaWNoZWlybyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQxCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAidXNhciBub21lcyBkZSBjYW1pbmhvIGNvbXBsZXRvcyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQzCittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICIiCisibW9zdHJhciBhIMOhcnZvcmUgY29tcGxldGE7IG7Do28gYXBlbmFzIG8gZGlyZXTDs3JpbyBhdHVhbCAoaW1wbGljYSAtLWZ1bGwtbmFtZSkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NgorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICJnaXQgbWVyZ2UgWzxvcMOnw7Vlcz5dIFs8Y29tbWl0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NworbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ4Cittc2dpZCAiZ2l0IG1lcmdlIC0tY29udGludWUiCittc2dzdHIgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTAzCittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJhIG9ww6fDo28gJ20nIHJlcXVlciB1bSB2YWxvciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBtZXJnZSBzdHJhdGVneSAnJXMnLlxuIgorbXNnc3RyICJFc3RyYXTDqWdpYSBkZSBpbnRlZ3Jhw6fDo28gJyVzJyBuw6NvIGVuY29udHJhZGEuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiRXN0cmF0w6lnaWFzIGRpc3BvbsOtdmVpczoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkVzdHJhdMOpZ2lhcyBwZXJzb25hbGl6YWRhcyBkaXNwb27DrXZlaXM6IgorCisjOiBidWlsdGluL21lcmdlLmM6MTk2IGJ1aWx0aW4vcHVsbC5jOjEyNworbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIm7Do28gYXByZXNlbnRhciB1bSBkaWZmc3RhdCBhbyBmaW0gZGEgaW50ZWdyYcOnw6NvIgorCisjOiBidWlsdGluL21lcmdlLmM6MTk5IGJ1aWx0aW4vcHVsbC5jOjEzMAorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAibW9zdHJhciB1bSBkaWZmc3RhdCBhbyBmaW0gZGEgaW50ZWdyYcOnw6NvIgorCisjOiBidWlsdGluL21lcmdlLmM6MjAwIGJ1aWx0aW4vcHVsbC5jOjEzMworbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIihzaW7Ds25pbW8gZGUgLS1zdGF0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwMiBidWlsdGluL3B1bGwuYzoxMzYKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyJhZGljaW9uYXIgKG5vIG3DoXhpbW8gPG4+KSBlbnRyYWRhcyBkbyBzaG9ydGxvZyDDoCBtZW5zYWdlbSBkZSBjb21taXQgZGEgIgorImludGVncmHDp8OjbyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwNSBidWlsdGluL3B1bGwuYzoxMzkKK21zZ2lkICJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIKK21zZ3N0ciAiY3JpYXIgdW0gw7puaWNvIGNvbW1pdCBlbSB2ZXogZGUgcmVhbGl6YXIgdW1hIGludGVncmHDp8OjbyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwNyBidWlsdGluL3B1bGwuYzoxNDIKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgInJlYWxpemFyIHVtIGNvbW1pdCBzZSBhIGludGVncmHDp8OjbyBmb3IgYmVtIHN1Y2VkaWRhIChwcmVkZWZpbmnDp8OjbykiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDkgYnVpbHRpbi9wdWxsLmM6MTQ1Cittc2dpZCAiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIgorbXNnc3RyICJlZGl0YXIgYSBtZW5zYWdlbSBhbnRlcyBkZSBzdWJtZXRlciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxMAorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgInBlcm1pdGlyIGF2YW7Dp28gcsOhcGlkbyAocHJlZGVmaW5pw6fDo28pIgorCisjOiBidWlsdGluL21lcmdlLmM6MjEyIGJ1aWx0aW4vcHVsbC5jOjE1MQorbXNnaWQgImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiCittc2dzdHIgImFib3J0YXIgc2UgbsOjbyDDqSBwb3Nzw612ZWwgZWZldHVhciBhdmFuw6dvIHLDoXBpZG8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTYgYnVpbHRpbi9wdWxsLmM6MTU0Cittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICJ2ZXJpZmljYXIgc2UgbyBjb21taXQgdGVtIHVtYSBhc3NpbmF0dXJhIEdQRyB2w6FsaWRhIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE3IGJ1aWx0aW4vbm90ZXMuYzo3NzMgYnVpbHRpbi9wdWxsLmM6MTU4CisjOiBidWlsdGluL3JldmVydC5jOjEwOAorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICJlc3RyYXTDqWdpYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxOCBidWlsdGluL3B1bGwuYzoxNTkKK21zZ2lkICJtZXJnZSBzdHJhdGVneSB0byB1c2UiCittc2dzdHIgImVzdHJhdMOpZ2lhIGRlIGludGVncmHDp8OjbyBhIHVzYXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTkgYnVpbHRpbi9wdWxsLmM6MTYyCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICJvcMOnw6NvPXZhbG9yIgorCisjOiBidWlsdGluL21lcmdlLmM6MjIwIGJ1aWx0aW4vcHVsbC5jOjE2MworbXNnaWQgIm9wdGlvbiBmb3Igc2VsZWN0ZWQgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIm9ww6fDtWVzIGRhIGVzdHJhdMOpZ2lhIGRlIGludGVncmHDp8OjbyBzZWxlY2lvbmFkYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIyMgorbXNnaWQgIm1lcmdlIGNvbW1pdCBtZXNzYWdlIChmb3IgYSBub24tZmFzdC1mb3J3YXJkIG1lcmdlKSIKK21zZ3N0ciAibWVuc2FnZW0gZGUgY29tbWl0IChkZSBpbnRlZ3Jhw6fDo28gbsOjbyBzdXNjZXTDrXZlbCBhIGF2YW7Dp28gcsOhcGlkbykiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMjYKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiYWJvcnRhciBpbnRlZ3Jhw6fDo28gZW0gY3Vyc28iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMjgKK21zZ2lkICJjb250aW51ZSB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiY29udGludWFyIGEgaW50ZWdyYcOnw6NvIGVtIGN1cnNvIgorCisjOiBidWlsdGluL21lcmdlLmM6MjMwIGJ1aWx0aW4vcHVsbC5jOjE3MAorbXNnaWQgImFsbG93IG1lcmdpbmcgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAicGVybWl0aXIgaW50ZWdyYcOnw6NvIGRlIGhpc3TDs3JpY29zIG7Do28gcmVsYWNpb25hZG9zIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU4Cittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBleGVjdXRhciBvIGNvbWFuZG8gc3Rhc2guIgorCisjOiBidWlsdGluL21lcmdlLmM6MjYzCittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICJmYWxoYSBhbyBleGVjdXRhciBvIGNvbWFuZG8gc3Rhc2giCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAibm9tZSBkZSBvYmpldG8gaW52w6FsaWRvOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4NyBidWlsdGluL21lcmdlLmM6MzA0Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAiZmFsaGEgYW8gZXhlY3V0YXIgbyBjb21hbmRvIHJlYWQtdHJlZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMzNAorbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKG7Do28gaMOhIG5hZGEgcGFyYSBlc21hZ2FyKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIkNvbW1pdCBlc21hZ2FkbyAtLSBIRUFEIG7Do28gYXR1YWxpemFkYVxuIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiTmVuaHVtYSBtZW5zYWdlbSBkZSBpbnRlZ3Jhw6fDo28gLS0gSEVBRCBuw6NvIGF0dWFsaXphZGFcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICInJXMnIG7Do28gYXBvbnRhIHBhcmEgdW0gY29tbWl0IgorCisjOiBidWlsdGluL21lcmdlLmM6NTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIlZhbG9yIGRlIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgaW5jb3JyZXRvOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjY1NgorbXNnaWQgIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgIk7Do28gc2UgcHJvY2Vzc2Egb3V0cmEgY29pc2Egc2Vuw6NvIGluY29ycG9yYcOnw6NvIGRlIGR1YXMgY2FiZcOnYXMuIgorCisjOiBidWlsdGluL21lcmdlLmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCittc2dzdHIgIk9ww6fDo28gZGVzY29uaGVjaWRhIGRlIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlciAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBsZXIgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyJDb21taXQgZGUgaW50ZWdyYcOnw6NvIG7Do28gcmVhbGl6YWRvOyB1c2UgJ2dpdCBjb21taXQnIHBhcmEgY29uY2x1aXIgYSAiCisiaW50ZWdyYcOnw6NvLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkludHJvZHV6YSB1bWEgbWVuc2FnZW0gZGUgY29tbWl0LCBleHBsaWNhbmRvIHBvciBxdWUgZXN0YSBpbnRlZ3Jhw6fDo28gw6kgIgorIm5lY2Vzc8OhcmlvLFxuIgorInNvYnJldHVkbyBzZSBpbmNvcnBvcmEgdW0gcmFtbyBhIG1vbnRhbnRlIGF0dWFsaXphZG8sIG51bSByYW1vIHTDs3BpY28uXG4iCisiXG4iCisiTGluaGFzIGNvbWXDp2FkYXMgY29tICclYycgc8OjbyBpZ25vcmFkYXMgZSB1bWEgbWVuc2FnZW0gdmF6aWFcbiIKKyJhYm9ydGEgbyBjb21taXQuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3NzYKK21zZ2lkICJFbXB0eSBjb21taXQgbWVzc2FnZS4iCittc2dzdHIgIk1lbnNhZ2VtIGRlIGNvbW1pdCB2YXppYS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV29uZGVyZnVsLlxuIgorbXNnc3RyICJNYXJhdmlsaG9zby5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg1MQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LlxuIgorbXNnc3RyICIiCisiRmFsaGEgYW8gcmVhbGl6YXIgaW50ZWdyYcOnw6NvIGF1dG9tw6F0aWNhOyBjb3JyaWphIG9zIGNvbmZsaXRvcyBlIHN1Ym1ldGEgbyAiCisicmVzdWx0YWRvLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODkwCittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICJOZW5odW0gcmFtbyBhdHVhbC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4OTIKK21zZ2lkICJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk7Do28gaMOhIHVtIHJlbW90byBwYXJhIG8gcmFtbyBhdHVhbC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4OTQKK21zZ2lkICJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk7Do28gZXN0w6EgZGVmaW5pZG8gbmVuaHVtIHJhbW8gYSBtb250YW50ZSBwYXJhIG8gcmFtbyBhdHVhbC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAiTmVuaHVtIHJhbW8gZGUgbW9uaXRvcml6YcOnw6NvIHJlbW90byBzZWd1aWRvIHBvciAlcyBkZSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk0NgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgdmFsdWUgJyVzJyBpbiBlbnZpcm9ubWVudCAnJXMnIgorbXNnc3RyICJWYWxvciAnJXMnIGluY29ycmV0byBubyBhbWJpZW50ZSAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6MTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGZlY2hhciAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA0NworIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSBpbiAlczogJXMiCittc2dzdHIgIm7Do28gc2UgcG9kZSBpbnRlZ3JhciBlbSAlczogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDgxCittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIm7Do28gc2UgcG9kZSBpbnRlZ3JhciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNDYKK21zZ2lkICItLWFib3J0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWFib3J0IG7Do28gbGV2YSBhcmd1bWVudG9zIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE1MAorbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIHRvIGFib3J0IChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiTsOjbyBow6EgbmVuaHVtYSBpbnRlZ3Jhw6fDo28gcGFyYSBzZSBhYm9ydGFyIChNRVJHRV9IRUFEIG7Do28gcHJlc2VudGUpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNjIKK21zZ2lkICItLWNvbnRpbnVlIGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWNvbnRpbnVlIG7Do28gbGV2YSBhcmd1bWVudG9zIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE2NgorbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIGluIHByb2dyZXNzIChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiTsOjbyBow6EgbmVuaHVtYSBpbnRlZ3Jhw6fDo28gZW0gY3Vyc28gKE1FUkdFX0hFQUQgbsOjbyBwcmVzZW50ZSkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE4MgorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJOw6NvIGNvbmNsdWl1IGEgaW50ZWdyYcOnw6NvIChNRVJHRV9IRUFEIHByZXNlbnRlKS5cbiIKKyJTdWJtZXRhIGFzIHN1YXMgYWx0ZXJhw6fDtWVzIGFudGVzIGRlIGludGVncmFyLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExODkKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiQ2hlcnJ5LXBpY2sgbsOjbyBjb25jbHXDrWRvIChDSEVSUllfUElDS19IRUFEIHByZXNlbnRlKS5cbiIKKyJTdWJtZXRhIGFzIHN1YXMgYWx0ZXJhw6fDtWVzIGFudGVzIGRlIGludGVncmFyLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExOTIKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIkNoZXJyeS1waWNrIG7Do28gY29uY2x1w61kbyAoQ0hFUlJZX1BJQ0tfSEVBRCBwcmVzZW50ZSkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIwMQorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBjb21iaW5hciAtLXNxdWFzaCBlIC0tbm8tZmYuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIwOQorbXNnaWQgIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIgorbXNnc3RyICJOZW5odW0gY29tbWl0IGVzcGVjaWZpY2FkbyBlIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG7Do28gZGVmaW5pZG8uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIyNgorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICJFc21hZ2FyIHVtIGNvbW1pdCBudW1hIGNhYmXDp2EgdmF6aWEgYWluZGEgbsOjbyDDqSBzdXBvcnRhZG8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjI4Cittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKyJOw6NvIGZheiBzZW50aWRvIHN1Ym1ldGVyIGRlIG1vZG8gbsOjbyBzdXNjZXTDrXZlbCBhIGF2YW7Dp28gcsOhcGlkbywgbnVtYSBjYWJlw6dhICIKKyJ2YXppYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSBuw6NvIMOpIGFsZ28gc2UgcG9zc2EgaW50ZWdyYXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjM1Cittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiU8OzIHNlIHBvZGUgaW50ZWdyYXIgZXhhdGFtZW50ZSB1bSBjb21taXQgbnVtYSBjYWJlw6dhIHZhemlhIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlLCBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICIiCisiQSBhc3NpbmF0dXJhIEdQRyBkbyBjb21taXQgJXMsIGFsZWdhZGFtZW50ZSBhc3NpbmFkYSBwb3IgJXMsIG7Do28gw6kgZGUgIgorImNvbmZpYW7Dp2EuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiIgorIkEgYXNzaW5hdHVyYSBHUEcgZG8gY29tbWl0ICVzLCBhbGVnYWRhbWVudGUgYXNzaW5hZGEgcG9yICVzLCBlc3TDoSBpbmNvcnJldGEuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIgorbXNnc3RyICJPIGNvbW1pdCAlcyBuw6NvIHRlbSB1bWEgYXNzaW5hdHVyYSBHUEcuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIGJ5ICVzXG4iCittc2dzdHIgIkEgYXNzaW5hdHVyYSBHUEcgZG8gY29tbWl0ICVzIHBvciAlcyBlc3TDoSBjb3JyZXRhXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzQwCittc2dpZCAicmVmdXNpbmcgdG8gbWVyZ2UgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAiaW50ZWdyYcOnw6NvIGRlIGhpc3TDs3JpY29zIG7Do28gcmVsYWNpb25hZG9zIHJlY3VzYWRhIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM0OQorbXNnaWQgIkFscmVhZHkgdXAtdG8tZGF0ZS4iCittc2dzdHIgIkrDoSBlc3TDoSBhdHVhbGl6YWRvLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgIkEgYXR1YWxpemFyICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAiQSB0ZW50YXIgaW50ZWdyYcOnw6NvIG1lc21vIHRyaXZpYWwgbm8gaW50ZXJpb3IgZG8gw61uZGljZS4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQwNworIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICJOw6NvLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQzMgorbXNnaWQgIkFscmVhZHkgdXAtdG8tZGF0ZS4gWWVlYWghIgorbXNnc3RyICJKw6EgZXN0w6EgYXR1YWxpemFkby4gU2ltISIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MzgKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGF2YW7Dp2FyIHJhcGlkYW1lbnRlLCBhIGFib3J0YXIuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ2MSBidWlsdGluL21lcmdlLmM6MTU0MAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIKK21zZ3N0ciAiQSByZWN1YXIgYSDDoXJ2b3JlIGFvIHNldSBlc3RhZG8gb3JpZ2luYWwuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iCittc2dzdHIgIkEgdGVudGFyIGEgZXN0cmF0w6lnaWEgZGUgaW50ZWdyYcOnw6NvICVzLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICJOZW5odW1hIGVzdHJhdMOpZ2lhIGRlIGludGVncmHDp8OjbyBjb25zZWd1aXUgcHJvY2Vzc2FyIGEgaW50ZWdyYcOnw6NvLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUzMworIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAiRmFsaGEgYW8gaW50ZWdyYXIgY29tIGEgZXN0cmF0w6lnaWEgJXMuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICJBIHVzYXIgJXMgcGFyYSBwcmVwYXJhciByZXNvbHXDp8OjbyBtYW51YWwuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgIiIKKyJBIGludGVncmHDp8OjbyBhdXRvbcOhdGljYSBmb2kgYmVtIHN1Y2VkaWRhOyBpbnRlcnJvbXBpZGEgYW50ZXMgZGUgc3VibWV0ZXIgIgorImNvbW8gc29saWNpdGFkb1xuIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyOQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMAorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSAtLW9jdG9wdXMgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSAtLW9jdG9wdXMgPGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMxCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzIKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMworbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8cmVmPiBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZmVyw6puY2lhPiBbPGNvbW1pdD5dIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMTcKK21zZ2lkICJvdXRwdXQgYWxsIGNvbW1vbiBhbmNlc3RvcnMiCittc2dzdHIgIm1vc3RyYXIgdG9kb3Mgb3MgYW50ZWNlc3NvcmVzIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMTkKK21zZ2lkICJmaW5kIGFuY2VzdG9ycyBmb3IgYSBzaW5nbGUgbi13YXkgbWVyZ2UiCittc2dzdHIgImVuY29udHJhciBhbnRlY2Vzc29yZXMgZGUgdW1hIMO6bmljYSBpbnRlZ3Jhw6fDo28gY29tIG4gcG9udG9zIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMjEKK21zZ2lkICJsaXN0IHJldnMgbm90IHJlYWNoYWJsZSBmcm9tIG90aGVycyIKK21zZ3N0ciAibGlzdGFyIHJldmlzw7VlcyBuw6NvIGFsY2Fuw6fDoXZlaXMgYSBwYXJ0aXIgZGUgb3V0cmFzIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMjMKK21zZ2lkICJpcyB0aGUgZmlyc3Qgb25lIGFuY2VzdG9yIG9mIHRoZSBvdGhlcj8iCittc2dzdHIgIm8gcHJpbWVpcm8gw6kgYW50ZWNlc3NvciBkbyBzZWd1bmRvPyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjI1Cittc2dpZCAiZmluZCB3aGVyZSA8Y29tbWl0PiBmb3JrZWQgZnJvbSByZWZsb2cgb2YgPHJlZj4iCittc2dzdHIgIiIKKyJkZXNjb2JyaXIgb25kZSBmb2kgcXVlIG8gPGNvbW1pdD4gZGl2ZXJnaXUgdXNhbmRvIG8gcmVmbG9nIGRhIDxyZWZlcsOqbmNpYT4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjgKK21zZ2lkICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcHRpb25zPl0gWy1MIDxuYW1lMT4gWy1MIDxvcmlnPiBbLUwgPG5hbWUyPl1dXSA8ZmlsZTE+ICIKKyI8b3JpZy1maWxlPiA8ZmlsZTI+IgorbXNnc3RyICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcMOnw7Vlcz5dIFstTCA8bm9tZTE+IFstTCA8b3JpZz4gWy1MIDxub21lMj5dXV0gPGZpY2hlaXJvMT4gIgorIjxmaWNoZWlyby1vcmlnPiA8ZmljaGVpcm8yPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzIKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJlbnZpYXIgcmVzdWx0YWRvcyBwYXJhIGEgc2HDrWRhIHBhZHLDo28iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjMzCittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgInVzYXIgaW50ZWdyYcOnw6NvIGJhc2VhZGEgZW0gZGlmZjMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM0Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIgorbXNnc3RyICJ1c2FyIGEgbm9zc2EgdmVyc8OjbyBlbSBjYXNvIGRlIGNvbmZsaXRvIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNgorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJ1c2FyIGEgdmVyc8OjbyBkZWxlcyBlbSBjYXNvIGRlIGNvbmZsaXRvIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozOAorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgInVzYXIgYSB1bmnDo28gZGFzIHZlcnPDtWVzIGVtIGNhc28gZGUgY29uZmxpdG8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQxCittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoaXMgbWFya2VyIHNpemUiCittc2dzdHIgInVzYXIgZXN0ZSBjb21wcmltZW50byBkZSBtYXJjYWRvciBwYXJhIG9zIGNvbmZsaXRvcyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDIKK21zZ2lkICJkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMiCittc2dzdHIgIm7Do28gYWxlcnRhciBzb2JyZSBjb25mbGl0b3MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ0Cittc2dpZCAic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZy1maWxlL2ZpbGUyIgorbXNnc3RyICJkZWZpbmlyIGlkZW50aWZpY2FyZXMgcGFyYSBmaWNoZWlybzEvZmljaGVpcm8tb3JpZy9maWNoZWlybzIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gJXMiCittc2dzdHIgIm9ww6fDo28gZGVzY29uaGVjaWRvICVzIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIG8gb2JqZXRvICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZS4gSWdub3JpbmcgJXMuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlcy4gSWdub3JpbmcgJXMuIgorbXNnc3RyWzBdICJuw6NvIMOpIHBvc3PDrXZlbCBwcm9jZXNzYXIgbWFpcyBkbyBxdWUgJWQgYmFzZS4gSWdub3JhciAlcy4iCittc2dzdHJbMV0gIm7Do28gw6kgcG9zc8OtdmVsIHByb2Nlc3NhciBtYWlzIGRvIHF1ZSAlZCBiYXNlcy4gSWdub3JhciAlcy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NjMKK21zZ2lkICJub3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJuw6NvIHNlIHBvZGUgcHJvY2Vzc2FyIG91dHJhIGNvaXNhIHNlbsOjbyBpbnRlZ3Jhw6fDo28gZGUgZHVhcyBjYWJlw6dhcy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NjkgYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSByZWYgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIHJlc29sdmVyIGEgcmVmZXLDqm5jaWEgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzXG4iCittc2dzdHIgIkEgaW50ZWdyYXIgJXMgY29tICVzXG4iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6NjUKK21zZ2lkICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorbXNnc3RyICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1MgorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICJhIGVudHJhZGEgdGVybWluYSBjb20gTlVMIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1MyBidWlsdGluL3dyaXRlLXRyZWUuYzoyNAorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAicGVybWl0aXIgb2JqZXRvcyBuw6NvIHByZXNlbnRlcyIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTQKK21zZ2lkICJhbGxvdyBjcmVhdGlvbiBvZiBtb3JlIHRoYW4gb25lIHRyZWUiCittc2dzdHIgInBlcm1pdGlyIGEgY3JpYcOnw6NvIGRlIG1haXMgZG8gcXVlIHVtYSDDoXJ2b3JlIgorCisjOiBidWlsdGluL212LmM6MTYKK21zZ2lkICJnaXQgbXYgWzxvcHRpb25zPl0gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIKK21zZ3N0ciAiZ2l0IG12IFs8b3DDp8O1ZXM+XSA8b3JpZ2VtPi4uLiA8ZGVzdGlubz4iCisKKyM6IGJ1aWx0aW4vbXYuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgIk8gZGlyZXTDs3JpbyAlcyBlc3TDoSBubyDDrW5kaWNlIHBvcsOpbSBuZW5odW0gc3VibcOzZHVsbz8iCisKKyM6IGJ1aWx0aW4vbXYuYzo4NCBidWlsdGluL3JtLmM6MjkwCittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJQcmVwYXJlIGFzIHN1YXMgYWx0ZXJhw6fDtWVzIGVtIC5naXRtb2R1bGVzIG91IGVzY29uZGEtYXMgcGFyYSBwcm9zc2VndWlyIgorCisjOiBidWlsdGluL212LmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgaW4gaW5kZXgiCittc2dzdHIgIiUuKnMgZXN0w6Egbm8gw61uZGljZSIKKworIzogYnVpbHRpbi9tdi5jOjEyNAorbXNnaWQgImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiZm9yw6dhciBtb3Zlci9tdWRhciBvIG5vbWUgbWVzbW8gcXVlIG8gZGVzdGlubyBleGlzdGEiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjUKK21zZ2lkICJza2lwIG1vdmUvcmVuYW1lIGVycm9ycyIKK21zZ3N0ciAiaWdub3JhciBlcnJvcyBhbyBtb3Zlci9tdWRhciBvIG5vbWUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gJyVzJyBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIm8gZGVzdGlubyAnJXMnIG7Do28gw6kgdW0gZGlyZXTDs3JpbyIKKworIzogYnVpbHRpbi9tdi5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgIkEgdmVyaWZpY2FyIGEgbXVkYW7Dp2EgZGUgbm9tZSBkZSAnJXMnIHBhcmEgJyVzJ1xuIgorCisjOiBidWlsdGluL212LmM6MTgyCittc2dpZCAiYmFkIHNvdXJjZSIKK21zZ3N0ciAib3JpZ2VtIGluY29ycmV0YSIKKworIzogYnVpbHRpbi9tdi5jOjE4NQorbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIG1vdmVyIHVtIGRpcmV0w7NyaW8gcGFyYSBkZW50cm8gZGUgc2kgcHLDs3ByaW8iCisKKyM6IGJ1aWx0aW4vbXYuYzoxODgKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBtb3ZlciB1bSBkaXJldMOzcmlvIHBhcmEgdW0gZmljaGVpcm8iCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTcKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICJvIGRpcmV0w7NyaW8gZGUgb3JpZ2VtIGVzdMOhIHZhemlvIgorCisjOiBidWlsdGluL212LmM6MjIyCittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAibsOjbyBlc3TDoSBubyBjb250cm9sbyBkZSB2ZXJzw7VlcyIKKworIzogYnVpbHRpbi9tdi5jOjIyNQorbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAibyBkZXN0aW5vIGrDoSBleGlzdGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcndyaXRpbmcgJyVzJyIKK21zZ3N0ciAiYSBzdWJzdGl0dWlyICclcyciCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzYKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBzdWJzdGl0dWlyIgorCisjOiBidWlsdGluL212LmM6MjM5Cittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICJtw7psdGlwbGFzIG9yaWdlbnMgcGFyYSBvIG1lc21vIGRlc3Rpbm8iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDEKK21zZ2lkICJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIm8gZGlyZXTDs3JpbyBkZSBkZXN0aW5vIG7Do28gZXhpc3RlIgorCisjOiBidWlsdGluL212LmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIlcywgb3JpZ2VtPSVzLCBkZXN0aW5vPSVzIgorCisjOiBidWlsdGluL212LmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIkEgbXVkYXIgZGUgbm9tZSBkZSAlcyBwYXJhICVzXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzUgYnVpbHRpbi9yZW1vdGUuYzo3MTAgYnVpbHRpbi9yZXBhY2suYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIG11ZGFyIG8gbm9tZSBkZSAnJXMnIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6Mjg5Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxvcMOnw7Vlcz5dIDxjb21taXQ+Li4uIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjkwCittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxvcMOnw7Vlcz5dIC0tYWxsIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjkxCittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tc3RkaW4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9ww6fDtWVzPl0gLS1zdGRpbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjM0NgorbXNnaWQgInByaW50IG9ubHkgbmFtZXMgKG5vIFNIQS0xKSIKK21zZ3N0ciAiaW1wcmltaXIgYXBlbmFzIG5vbWVzIChzZW0gU0hBLTEpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzQ3Cittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICJ1c2FyIGFwZW5hcyB0YWdzIHBhcmEgZGVzaWduYXIgY29tbWl0cyIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjM0OQorbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJ1c2FyIGFwZW5hcyByZWZlcsOqbmNpYSBxdWUgY29ycmVzcG9uZGFtIGFvIDxwYWRyw6NvPiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjM1MQorbXNnaWQgImlnbm9yZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiaWdub3JhciByZWZlcsOqbmNpYXMgcXVlIGNvcnJlc3BvbmRhbSBhbyA8cGFkcsOjbz4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozNTMKK21zZ2lkICJsaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzIgorbXNnc3RyICJsaXN0YXIgdG9kb3Mgb3MgY29tbWl0cyBhbGNhbsOnw6F2ZWlzIGEgcGFydGlyIGRlIHRvZGFzIGFzIHJlZmVyw6puY2lhcyIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjM1NAorbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGVyIGRhIGVudHJhZGEgcGFkcsOjbyIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjM1NQorbXNnaWQgImFsbG93IHRvIHByaW50IGB1bmRlZmluZWRgIG5hbWVzIChkZWZhdWx0KSIKK21zZ3N0ciAicGVybWl0aXIgaW1wcmltaXIgbm9tZXMgJ2luZGVmaW5pZG9zJyAocHJlZGVmaW5pw6fDo28pIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzYxCittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbiB0aGUgaW5wdXQgKGludGVybmFsIHVzZSkiCittc2dzdHIgImRlc3JlZmVyZW5jaWFyIHRhZ3MgbmEgZW50cmFkYSAodXNvIGludGVybm8pIgorCisjOiBidWlsdGluL25vdGVzLmM6MjUKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzxvYmpldG8+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNgorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+ICIKKyJ8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiAiCisiPGZpY2hlaXJvPiB8ICgtYyB8IC1DKSA8b2JqZXRvPl0gWzxvYmpldG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI3Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gY29weSBbLWZdIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZGUtb2JqZXRvPiA8cGFyYS1vYmpldG8+IgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gfCAiCisiKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiAiCisiPGZpY2hlaXJvPiB8ICgtYyB8IC1DKSA8b2JqZXRvPl0gWzxvYmpldG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI5Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmpldG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBzaG93IFs8b2JqZXRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8ZXN0cmF0w6lnaWE+XSA8bm90ZXMtcmVmPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHJlbW92ZSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSByZW1vdmUgWzxvYmpldG8+Li4uXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcHJ1bmUgWy1uIHwgLXZdIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW4gfCAtdl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNgorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MQorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZXRvPl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6NDYKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhZGQgWzxvcMOnw7Vlcz5dIFs8b2JqZXRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MQorbXNnaWQgImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IFs8b3DDp8O1ZXM+XSA8ZGUtb2JqZXRvPiA8cGFyYS1vYmpldG8+IgorCisjOiBidWlsdGluL25vdGVzLmM6NTIKK21zZ2lkICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+XS4uLiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGRlLW9iamV0bz4gPHBhcmEtb2JqZXRvPl0uLi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NworbXNnaWQgImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9ww6fDtWVzPl0gWzxvYmpldG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYyCittc2dpZCAiZ2l0IG5vdGVzIGVkaXQgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGVkaXQgWzxvYmpldG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY3Cittc2dpZCAiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHNob3cgWzxvYmpldG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgWzxvcMOnw7Vlcz5dIDxub3Rlcy1yZWY+IgorCisjOiBidWlsdGluL25vdGVzLmM6NzMKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9ww6fDtWVzPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NAorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9ww6fDtWVzPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OQorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamV0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODQKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBwcnVuZSBbPG9ww6fDtWVzPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4OQorbXNnaWQgImdpdCBub3RlcyBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk0Cittc2dpZCAiV3JpdGUvZWRpdCB0aGUgbm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgb2JqZWN0OiIKK21zZ3N0ciAiRXNjcmV2YS9lZGl0ZSBhcyBub3RhcyBkbyBzZWd1aW50ZSBvYmpldG86IgorCisjOiBidWlsdGluL25vdGVzLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgaW5pY2lhciBvIGNvbWFuZG8gJ3Nob3cnIHNvYnJlIG8gb2JqZXRvICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTEKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnc2hvdycgb3V0cHV0IgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIGEgc2HDrWRhIGRvIGNvbWFuZG8gJ3Nob3cnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5pc2ggJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAiZmFsaGEgYW8gY29uY2x1aXIgbyBjb21hbmRvICdzaG93JyBzb2JyZSBvIG9iamV0byAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTk0Cittc2dpZCAicGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICJmb3JuZcOnYSBvIGNvbnRlw7pkbyBkYSBub3RhIHVzYW5kbyBhIG9ww6fDo28gLW0gb3UgLUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDMKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbm90ZSBvYmplY3QiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGVzY3JldmVyIG8gb2JqZXRvIGRlIG5vdGEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG5vdGUgY29udGVudHMgaGF2ZSBiZWVuIGxlZnQgaW4gJXMiCittc2dzdHIgIm8gY29udGXDumRvIGRhIG5vdGEgZm9pIGNvbG9jYWRvIGVtICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6MjMzIGJ1aWx0aW4vdGFnLmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGxlciAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MjM1IGJ1aWx0aW4vdGFnLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyIG91IGxlciAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MjU0IGJ1aWx0aW4vbm90ZXMuYzozMDUgYnVpbHRpbi9ub3Rlcy5jOjMwNworIzogYnVpbHRpbi9ub3Rlcy5jOjM3MiBidWlsdGluL25vdGVzLmM6NDI3IGJ1aWx0aW4vbm90ZXMuYzo1MTMKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTggYnVpbHRpbi9ub3Rlcy5jOjU5NiBidWlsdGluL25vdGVzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJmYWxoYSBhbyByZXNvbHZlciAnJXMnIGNvbW8gdW1hIHJlZmVyw6puY2lhIHbDoWxpZGEuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiZmFsaGEgYW8gbGVyIG8gb2JqZXRvICclcycuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG5vdGUgZGF0YSBmcm9tIG5vbi1ibG9iIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbGVyIG9zIGRhZG9zIGRhIG5vdGEgZGUgdW0gb2JqZXRvIG7Do28tYmxvYiAnJXMnLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgImxpbmhhIGRlIGVudHJhZGEgbWFsZm9ybWFkYTogJyVzJy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgImZhbGhhIGFvIGNvcGlhciBub3RhcyBkZSAnJXMnIHBhcmEgJyVzJyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBmaXJzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEKKyMuIGdpdCBub3RlcyBjb21tYW5kOiAnYWRkJywgJ21lcmdlJywgJ3JlbW92ZScsIGV0Yy4KKyM6IGJ1aWx0aW4vbm90ZXMuYzozNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gJXMgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICJmb2kgcmVjdXNhZG8gZWZldHVhciAlcyBkZSBub3RhcyBlbSAlcyAoZm9yYSBkZSByZWZzL25vdGVzLykiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNjUgYnVpbHRpbi9ub3Rlcy5jOjQyMCBidWlsdGluL25vdGVzLmM6NDk2CisjOiBidWlsdGluL25vdGVzLmM6NTA4IGJ1aWx0aW4vbm90ZXMuYzo1ODQgYnVpbHRpbi9ub3Rlcy5jOjY1MQorIzogYnVpbHRpbi9ub3Rlcy5jOjgwMSBidWlsdGluL25vdGVzLmM6OTQ4IGJ1aWx0aW4vbm90ZXMuYzo5NjkKK21zZ2lkICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorbXNnc3RyICJkZW1hc2lhZG9zIHBhcsOibWV0cm9zIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzc4IGJ1aWx0aW4vbm90ZXMuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIKK21zZ3N0ciAibmVuaHVtYSBub3RhIGVuY29udHJhZGEgcGFyYSBvIG9iamV0byAlcy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOTkgYnVpbHRpbi9ub3Rlcy5jOjU2MgorbXNnaWQgIm5vdGUgY29udGVudHMgYXMgYSBzdHJpbmciCittc2dzdHIgImNvbnRlw7pkbyBkYSBub3RhIHNvYiBhIGZvcm1hIGRlIGNhZGVpYSBkZSBjYXJhY3RlcmVzIgorCisjOiBidWlsdGluL25vdGVzLmM6NDAyIGJ1aWx0aW4vbm90ZXMuYzo1NjUKK21zZ2lkICJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIKK21zZ3N0ciAiY29udGXDumRvIGRhIG5vdGEgZGUgdW0gZmljaGVpcm8iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDUgYnVpbHRpbi9ub3Rlcy5jOjU2OAorbXNnaWQgInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAicmV1dGlsaXphciBlIGVkaXRhciBvIG9iamV0byBkZSBub3RhIGVzcGVjaWZpY2FkbyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQwOCBidWlsdGluL25vdGVzLmM6NTcxCittc2dpZCAicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICJyZXV0aWxpemFyIG8gb2JqZXRvIGRlIG5vdGEgZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL25vdGVzLmM6NDExIGJ1aWx0aW4vbm90ZXMuYzo1NzQKK21zZ2lkICJhbGxvdyBzdG9yaW5nIGVtcHR5IG5vdGUiCittc2dzdHIgInBlcm1pdGlyIGd1YXJkYXIgdW1hIG5vdGEgdmF6aWEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTIgYnVpbHRpbi9ub3Rlcy5jOjQ4MworbXNnaWQgInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgInN1YnN0aXR1aXIgbm90YXMgZXhpc3RlbnRlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIk7Do28gw6kgcG9zc8OtdmVsIGFkaWNpb25hciBub3Rhcy4gTm90YXMgZG8gb2JqZXRvICVzIGVuY29udHJhZGFzLiBVc2UgJy1mJyAiCisicGFyYSBzdWJzdGl0dcOtLWxhcy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NTIgYnVpbHRpbi9ub3Rlcy5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIkEgc3Vic3RpdHVpciBhcyBub3RhcyBleGlzdGVudGVzIGRvIG9iamV0byAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDYzIGJ1aWx0aW4vbm90ZXMuYzo2MjMgYnVpbHRpbi9ub3Rlcy5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiQSByZW1vdmVyIGEgbm90YSBkbyBvYmpldG8gJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ4NAorbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICJsZXIgb2JqZXRvcyBkYSBlbnRyYWRhIHBhZHLDo28iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0ODYKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAiY2FycmVnYXIgY29uZmlndXJhw6fDo28gZGUgcmVlc2NyaXRhIGRvIDxjb21hbmRvPiAoaW1wbGljYSAtLXN0ZGluKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUwNAorbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAicGFyw6JtZXRyb3MgaW5zdWZpY2llbnRlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBjb3BpYXIgbm90YXMuIE5vdGFzIGRvIG9iamV0byAlcyBlbmNvbnRyYWRhcy4gVXNlICctZicgcGFyYSAiCisic3Vic3RpdHXDrS1sYXMuIgorCisjOiBidWlsdGluL25vdGVzLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICJmYWx0YW0gbm90YXMgbm8gb2JqZXRvIGRlIG9yaWdlbSAlcy4gTsOjbyDDqSBwb3Nzw612ZWwgY29waWFyLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKyJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIgorbXNnc3RyICIiCisiQXMgb3DDp8O1ZXMgLW0vLUYvLWMvLUMgc8OjbyBvYnNvbGV0YXMgbm8gc3ViY29tYW5kbyAnZWRpdCcuXG4iCisiVXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBlbSBzZXUgbHVnYXIuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2ODQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICJmYWxoYSBhbyBlbGltaW5hciBhIHJlZmVyw6puY2lhIE5PVEVTX01FUkdFX1BBUlRJQUwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2ODYKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgImZhbGhhIGFvIGVsaW1pbmFyIGEgcmVmZXLDqm5jaWEgTk9URVNfTUVSR0VfUkVGIgorCisjOiBidWlsdGluL25vdGVzLmM6Njg4Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnZ2l0IG5vdGVzIG1lcmdlJyB3b3JrdHJlZSIKK21zZ3N0ciAiZmFsaGEgYW8gcmVtb3ZlciBhIMOhcnZvcmUgZGUgdHJhYmFsaG8gZGUgJ2dpdCBub3RlcyBtZXJnZSciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDgKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKK21zZ3N0ciAiZmFsaGEgYW8gbGVyIHJlZmVyw6puY2lhIE5PVEVTX01FUkdFX1BBUlRJQUwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MTAKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGVuY29udHJhciBvIGNvbW1pdCBkZSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcxMgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIG8gY29tbWl0IGRlIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI1Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICJmYWxoYSBhbyByZXNvbHZlciBOT1RFU19NRVJHRV9SRUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjgKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgbm90ZXMgbWVyZ2UiCittc2dzdHIgImZhbGhhIGFvIGZpbmFsaXphciBpbnRlZ3Jhw6fDo28gZGUgbm90YXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub3RlcyBtZXJnZSBzdHJhdGVneSAlcyIKK21zZ3N0ciAiZXN0cmF0w6lnaWEgZGUgaW50ZWdyYcOnw6NvIGRlIG5vdGFzICVzIGRlc2NvbmhlY2lkYSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc3MAorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiT3DDp8O1ZXMgZ2VyYWlzIgorCisjOiBidWlsdGluL25vdGVzLmM6NzcyCittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiT3DDp8O1ZXMgZGUgaW50ZWdyYcOnw6NvIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzc0Cittc2dpZCAiIgorInJlc29sdmUgbm90ZXMgY29uZmxpY3RzIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKK21zZ3N0ciAiIgorInJlc29sdmVyIGNvbmZsaXRvcyBuYXMgbm90YXMgdXNhbmRvIGEgZXN0cmF0w6lnaWEgaW5kaWNhZGEgKG1hbnVhbC9vdXJzLyIKKyJ0aGVpcnMvdW5pb24vY2F0X3NvcnRfdW5pcSkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzYKK21zZ2lkICJDb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICJBIHN1Ym1ldGVyIG5vdGFzIG7Do28gaW50ZWdyYWRhcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc3OAorbXNnaWQgImZpbmFsaXplIG5vdGVzIG1lcmdlIGJ5IGNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgImNvbmNsdWlyIGludGVncmHDp8OjbyBkZSBub3Rhcywgc3VibWV0ZW5kbyBub3RhcyBuw6NvIGludGVncmFkYXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODAKK21zZ2lkICJBYm9ydGluZyBub3RlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICJBIGFib3J0YXIgcmVzb2x1w6fDo28gZGUgaW50ZWdyYcOnw6NvIGRhcyBub3RhcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4MgorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICJhYm9ydGFyIGludGVncmHDp8OjbyBkYXMgbm90YXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTMKK21zZ2lkICJjYW5ub3QgbWl4IC0tY29tbWl0LCAtLWFib3J0IG9yIC1zLy0tc3RyYXRlZ3kiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIG1pc3R1cmFyIC0tY29tbWl0LCAtLWFib3J0IG91IC1zLy0tc3RyYXRlZ3kiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTgKK21zZ2lkICJtdXN0IHNwZWNpZnkgYSBub3RlcyByZWYgdG8gbWVyZ2UiCittc2dzdHIgInRlbSBkZSBlc3BlY2lmaWNhciB1bWEgcmVmZXLDqm5jaWEgZGUgbm90YXMgcGFyYSBpbnRlZ3JhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC1zLy0tc3RyYXRlZ3k6ICVzIgorbXNnc3RyICItcy8tLXN0cmF0ZWd5IGRlc2NvbmhlY2lkYTogJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBub3RlcyBtZXJnZSBpbnRvICVzIGlzIGFscmVhZHkgaW4tcHJvZ3Jlc3MgYXQgJXMiCittc2dzdHIgInVtYSBpbnRlZ3Jhw6fDo28gZGFzIG5vdGFzIGVtICVzIGrDoSBlc3TDoSBlbSBjdXJzbyBlbSAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RvcmUgbGluayB0byBjdXJyZW50IG5vdGVzIHJlZiAoJXMpIgorbXNnc3RyICJmYWxoYSBhbyBndWFyZGFyIGxpZ2HDp8OjbyDDoCByZWZlcsOqbmNpYSBkZSBub3RhcyBhdHVhbCAoJXMpIgorCisjOiBidWlsdGluL25vdGVzLmM6ODY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdXRvbWF0aWMgbm90ZXMgbWVyZ2UgZmFpbGVkLiBGaXggY29uZmxpY3RzIGluICVzIGFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICIKKyInZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0Jywgb3IgYWJvcnQgdGhlIG1lcmdlIHdpdGggJ2dpdCBub3RlcyBtZXJnZSAtLSIKKyJhYm9ydCcuXG4iCittc2dzdHIgIiIKKyJBIGludGVncmHDp8OjbyBhdXRvbcOhdGljYSBkZSBub3RhcyBmYWxob3UuIENvcnJpamEgb3MgY29uZmxpdG9zIGVtICVzIGUgIgorInN1Ym1ldGEgbyByZXN1bHRhZG8gY29tICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG91IGFib3J0ZSBhIGludGVncmHDp8OjbyAiCisiY29tICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgIk8gb2JqZXRvICVzIG7Do28gdGVtIG5lbmh1bWEgbm90YVxuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODk4Cittc2dpZCAiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIgorbXNnc3RyICJuw6NvIGNvbnNpZGVyYXIgY29tbyBlcnJvIGEgcmVtb8Onw6NvIGRlIHVtYSBub3RhIG7Do28gZXhpc3RlbnRlIgorCisjOiBidWlsdGluL25vdGVzLmM6OTAxCittc2dpZCAicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImxlciBub21lIGRvcyBvYmpldG9zIGRhIGVudHJhZGEgcGFkcsOjbyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkzOSBidWlsdGluL3BydW5lLmM6MTA1IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjcKK21zZ2lkICJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiCittc2dzdHIgIm7Do28gcmVtb3ZlciwgbW9zdHJhciBhcGVuYXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NDAKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG5vdGVzIgorbXNnc3RyICJyZXBvcnRhciBub3RhcyBwb2RhZGFzIgorCisjOiBidWlsdGluL25vdGVzLmM6OTgyCittc2dpZCAibm90ZXMtcmVmIgorbXNnc3RyICJub3Rlcy1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5ODMKK21zZ2lkICJ1c2Ugbm90ZXMgZnJvbSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAidXNhciBub3RhcyBkZSA8bm90ZXMtcmVmPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAic3ViY29tYW5kbyBkZXNjb25oZWNpZG86ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5Cittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3DDp8O1ZXM+Li4uXSBbPCA8bGlzdGEtcmVmZXLDqm5jaWFzPiB8IDwgPGxpc3RhLSIKKyJvYmpldG9zPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzAKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9wdGlvbnM+Li4uXSA8YmFzZS1uYW1lPiBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcMOnw7Vlcz4uLi5dIDxub21lLWJhc2U+IFs8IDxsaXN0YS1yZWZlcsOqbmNpYXM+IHwgPCA8bGlzdGEtIgorIm9iamV0b3M+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzcgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICJlcnJvIGFvIGNvbXBhY3RhciAoJWQpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc3MAorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgcGFja3MgYXJlIHNwbGl0IGR1ZSB0byBwYWNrLnBhY2tTaXplTGltaXQiCittc2dzdHIgIiIKKyJhIGRlc2F0aXZhciBlc2NyaXRhIGRlIG1hcGEgZGUgYml0cywgb3MgcGFjb3RlcyBzw6NvIGRpdmlkaWRvcyBkZXZpZG8gYSBwYWNrLiIKKyJwYWNrU2l6ZUxpbWl0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc4MworbXNnaWQgIldyaXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiQSBlc2NyZXZlciBvYmpldG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwNjMKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIGFzIHNvbWUgb2JqZWN0cyBhcmUgbm90IGJlaW5nIHBhY2tlZCIKK21zZ3N0ciAiIgorImEgZGVzYXRpdmFyIGVzY3JpdGEgZGUgbWFwYSBkZSBiaXRzLCB2aXN0byBxdWUgYWxndW5zIG9iamV0b3MgbsOjbyBlc3TDo28gYSAiCisic2VyIGNvbXBhY3RhZG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0MjYKK21zZ2lkICJDb21wcmVzc2luZyBvYmplY3RzIgorbXNnc3RyICJBIGNvbXByaW1pciBvYmpldG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIKK21zZ3N0ciAidmVyc8OjbyBkZSDDrW5kaWNlICVzIG7Do28gc3Vwb3J0YWRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIKK21zZ3N0ciAidmVyc8OjbyBkZSDDrW5kaWNlICclcycgaW5jb3JyZXRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NjMKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAibsOjbyBtb3N0cmFyIG1lZGlkb3IgZGUgcHJvZ3Jlc3NvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NjUKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJtb3N0cmFyIG1lZGlkb3IgZGUgcHJvZ3Jlc3NvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NjcKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIKK21zZ3N0ciAibW9zdHJhciBtZWRpZG9yIGRlIHByb2dyZXNzbyBkdXJhbnRlIGEgZmFzZSBkZSBlc2NyaXRhIGRlIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg3MAorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAic2VtZWxoYW50ZSBhIC0tYWxsLXByb2dyZXNzIHF1YW5kbyBvIG1lZGlkb3IgZGUgcHJvZ3Jlc3NvIMOpIG1vc3RyYWRvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NzEKK21zZ2lkICJ2ZXJzaW9uWyxvZmZzZXRdIgorbXNnc3RyICJ2ZXJzw6NvWyxvZmZzZXRdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NzIKK21zZ2lkICJ3cml0ZSB0aGUgcGFjayBpbmRleCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgaWR4IGZvcm1hdCB2ZXJzaW9uIgorbXNnc3RyICIiCisiZXNjcmV2ZXIgbyBmaWNoZWlybyBkZSDDrW5kaWNlIGRvIHBhY290ZSBuYSB2ZXJzw6NvIGRlIGZvcm1hdG8gZXNwZWNpZmljYWRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NzUKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlIgorbXNnc3RyICJ0YW1hbmhvIG3DoXhpbW8gZGUgY2FkYSBmaWNoZWlybyBkZSBwYWNvdGUgZ2VyYWRvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NzcKK21zZ2lkICJpZ25vcmUgYm9ycm93ZWQgb2JqZWN0cyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUiCittc2dzdHIgImlnbm9yYXIgb2JqZXRvcyBlbXByZXN0YWRvcyBkbyBhcnF1aXZvIGRlIG9iamV0b3Mgc29icmVzc2FsZW50ZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg3OQorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiaWdub3JhciBvYmpldG9zIGNvbXBhY3RhZG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4ODEKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBvYmplY3RzIgorbXNnc3RyICJsaW1pdGFyIGEgamFuZWxhIGRlIGNvbXBhY3Rhw6fDo28gcG9yIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg4MworbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgIiIKKyJsaW1pdGFyIGEgamFuZWxhIGRlIGNvbXBhY3Rhw6fDo28gcG9yIG1lbcOzcmlhIGVtIGFkacOnw6NvIGFvIGxpbWl0ZSBwb3Igb2JqZXRvcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODg1Cittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgInRhbWFuaG8gbcOheGltbyBkZSBjYWRlaWFzIGRlbHRhIHBlcm1pdGlkYXMgbm8gcGFjb3RlIHJlc3VsdGFudGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg4NworbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAicmV1dGlsaXphciBkZWx0YXMgZXhpc3RlbnRlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODg5Cittc2dpZCAicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIKK21zZ3N0ciAicmV1dGlsaXphciBvYmpldG9zIGV4aXN0ZW50ZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg5MQorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAidXNhciBvYmpldG9zIE9GU19ERUxUQSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODkzCittc2dpZCAidXNlIHRocmVhZHMgd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QgZGVsdGEgbWF0Y2hlcyIKK21zZ3N0ciAidXNhciB0aHJlYWRzIGFvIHByb2N1cmFyIHBlbGEgbWVsaG9yIGNvcnJlc3BvbmTDqm5jaWEgZGVsdGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg5NQorbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgIm7Do28gY3JpYXIgdW0gcGFjb3RlIHZhemlvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4OTcKK21zZ2lkICJyZWFkIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsZXIgYXJndW1lbnRvcyBkZSByZXZpc8OjbyBkYSBlbnRyYWRhIHBhZHLDo28iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg5OQorbXNnaWQgImxpbWl0IHRoZSBvYmplY3RzIHRvIHRob3NlIHRoYXQgYXJlIG5vdCB5ZXQgcGFja2VkIgorbXNnc3RyICJyZXN0cmluZ2lyLXNlIGFvcyBvYmpldG9zIHF1ZSBhaW5kYSBuw6NvIGZvcmFtIGNvbXBhY3RhZG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MDIKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAiaW5jbHVpciBvYmpldG9zIGFsY2Fuw6fDoXZlaXMgYSBwYXJ0aXIgZGUgcXVhbHF1ZXIgcmVmZXLDqm5jaWEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkwNQorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCBieSByZWZsb2cgZW50cmllcyIKK21zZ3N0ciAiaW5jbHVpciBvYmpldG9zIHJlZmVyZW5jaWFkb3MgcG9yIGVudHJhZGFzIGRvIHJlZmxvZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTA4Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIKK21zZ3N0ciAiaW5jbHVpciBvYmpldG9zIHJlZmVyZW5jaWFkb3MgcGVsbyDDrW5kaWNlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MTEKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgImdlcmFyIHBhY290ZSBwYXJhIGEgc2HDrWRhIHBhZHLDo28iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkxMworbXNnaWQgImluY2x1ZGUgdGFnIG9iamVjdHMgdGhhdCByZWZlciB0byBvYmplY3RzIHRvIGJlIHBhY2tlZCIKK21zZ3N0ciAiaW5jbHVpciBvYmpldG9zIHRhZyBxdWUgcmVmaXJhbSBvYmpldG9zIGEgY29tcGFjdGFyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MTUKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIm1hbnRlciBvYmpldG9zIGluYWxjYW7Dp8OhdmVpcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTE3Cittc2dpZCAicGFjayBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJlbXBhY290YXIgb2JqZXRvcyBzb2x0b3MgaW5hbGNhbsOnw6F2ZWlzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MTkKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZGVzY29tcGFjdGFyIG9iamV0b3MgaW5hbGNhbsOnw6F2ZWlzIG1haXMgcmVjZW50ZXMgcXVlIDx0ZW1wbz4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkyMgorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICJjcmlhciBwYWNvdGVzIGZpbm9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MjQKK21zZ2lkICJjcmVhdGUgcGFja3Mgc3VpdGFibGUgZm9yIHNoYWxsb3cgZmV0Y2hlcyIKK21zZ3N0ciAiY3JpYXIgcGFjb3RlcyBhZGVxdWFkb3MgcGFyYSBvYnRlciBlbSByZXBvc2l0w7NyaW9zIHBvdWNvIHByb2Z1bmRvcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTI2Cittc2dpZCAiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIKK21zZ3N0ciAiaWdub3JhciBwYWNvdGVzIHF1ZSB0ZW5oYW0gdW0gZmljaGVpcm8gLmtlZXAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkyOAorbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgIm7DrXZlbCBkZSBjb21wYWN0YcOnw6NvIGRvIHBhY290ZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTMwCittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgIm7Do28gZXNjb25kZXIgY29tbWl0cyBpbnRyb2R1emlkb3MgcG9yIGVueGVydG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MzIKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKyJ1c2FyIHVtIMOtbmRpY2UgZGUgbWFwYSBkZSBiaXRzIHNlIGRpc3BvbsOtdmVsLCBwYXJhIGFjZWxlcmFyIGEgY29udGFnZW0gZGUgIgorIm9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkzNAorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgImVzY3JldmVyIHVtIMOtbmRpY2UgZGUgbWFwYSBkZSBiaXRzIGp1bnRhbWVudGUgY29tIG8gw61uZGljZSBkbyBwYWNvdGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA2MQorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIkEgY29udGFyIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6NgorbXNnaWQgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBwYWNrLXJlZnMgWzxvcMOnw7Vlcz5dIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE0Cittc2dpZCAicGFjayBldmVyeXRoaW5nIgorbXNnc3RyICJjb21wYWN0YXIgdHVkbyIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNQorbXNnaWQgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIgorbXNnc3RyICJlbGltaW5hciByZWZlcsOqbmNpYXMgc29sdGFzIChwcmVkZWZpbmnDp8OjbykiCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NworbXNnaWQgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKK21zZ3N0ciAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjQwCittc2dpZCAiUmVtb3ZpbmcgZHVwbGljYXRlIG9iamVjdHMiCittc2dzdHIgIkEgcmVtb3ZlciBvYmpldG9zIGR1cGxpY2Fkb3MiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMQorbXNnaWQgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1leHBpcmUgPHRlbXBvPl0gWy0tXSBbPGhlYWQ+Li4uXSIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEwNgorbXNnaWQgInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIKK21zZ3N0ciAiYXByZXNlbnRhciBvYmpldG9zIGVsaW1pbmFkb3MiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMDkKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZXhwaXJhciBvYmpldG9zIG1haXMgYW50aWdvcyBxdWUgPHRlbXBvPiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEyMworbXNnaWQgImNhbm5vdCBwcnVuZSBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbGltcGFyIG51bSByZXBvc2l0w7NyaW8gZGUgb2JqZXRvcy1wcmVjaW9zb3MiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjUxIGJ1aWx0aW4vcHVsbC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiVmFsb3IgaW52w6FsaWRvIGRlICVzOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NzMKK21zZ2lkICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1bGwgWzxvcMOnw7Vlcz5dIFs8cmVwb3NpdMOzcmlvPiBbPGVzcGVjaWZpY2Fkb3ItZGUtcmVmZXLDqm5jaWE+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjEyMQorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBtZXJnaW5nIgorbXNnc3RyICJPcMOnw7VlcyByZWxhdGl2YXMgYSBpbnRlZ3Jhw6fDo28iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjEyNAorbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAiaW5jb3Jwb3JhciBhbHRlcmHDp8O1ZXMgcG9yIHJlYmFzZSBlbSB2ZXogZGUgaW50ZWdyYXIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0OCBidWlsdGluL3JlYmFzZS0taGVscGVyLmM6MTggYnVpbHRpbi9yZXZlcnQuYzoxMjAKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgInBlcm1pdGlyIGF2YW7Dp28gcsOhcGlkbyIKKworIzogYnVpbHRpbi9wdWxsLmM6MTU3Cittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciByZWJhc2UiCittc2dzdHIgImVtcGlsaGFyL2Rlc2VtcGlsaGFyIGF1dG9tYXRpY2FtZW50ZSBhbnRlcyBkZSBkZXBvaXMgZGUgcmViYXNlIgorCisjOiBidWlsdGluL3B1bGwuYzoxNzMKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmciCittc2dzdHIgIk9ww6fDtWVzIHJlbGFjaW9uYWRhcyBjb20gb2J0ZW7Dp8OjbyBkZSBvYmpldG9zIgorCisjOiBidWlsdGluL3B1bGwuYzoxOTUKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBwdWxsZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIm7Dum1lcm8gZGUgc3VibcOzZHVsb3MgcHV4YWRvcyBlbSBwYXJhbGVsbyIKKworIzogYnVpbHRpbi9wdWxsLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICJWYWxvciBpbnbDoWxpZG8gZGUgcHVsbC5mZjogJXMiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjM5NworbXNnaWQgIiIKKyJUaGVyZSBpcyBubyBjYW5kaWRhdGUgZm9yIHJlYmFzaW5nIGFnYWluc3QgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCAiCisiZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJOw6NvIGjDoSBuZW5odW0gY2FuZGlkYXRvIGNvbSBvIHF1YWwgcmVhbGl6YXIgcmViYXNlIGRlIGVudHJlIGFzIHJlZmVyw6puY2lhcyAiCisicXVlIHNlIGFjYWJhcmFtIGRlIG9idGVyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6Mzk5Cittc2dpZCAiIgorIlRoZXJlIGFyZSBubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJOw6NvIGjDoSBuZW5odW0gY2FuZGlkYXRvIGNvbSBvIHF1YWwgaW50ZWdyYXIgZGUgZW50cmUgYXMgcmVmZXLDqm5jaWFzIHF1ZSBzZSAiCisiYWNhYmFyYW0gb2J0ZXIuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MDAKK21zZ2lkICIiCisiR2VuZXJhbGx5IHRoaXMgbWVhbnMgdGhhdCB5b3UgcHJvdmlkZWQgYSB3aWxkY2FyZCByZWZzcGVjIHdoaWNoIGhhZCBub1xuIgorIm1hdGNoZXMgb24gdGhlIHJlbW90ZSBlbmQuIgorbXNnc3RyICIiCisiR2VyYWxtZW50ZSwgc2lnbmlmaWNhIHF1ZSBmb3JuZWNldSB1bSBlc3BlY2lmaWNhZG9yIGRlIHJlZmVyw6puY2lhXG4iCisiY29tIHVtIGNhcsOhY3RlciB1bml2ZXJzYWwgKHdpbGRjYXJkKSBxdWUgbsOjbyBjb3JyZXNwb25kZSBhIG5lbmh1bSByZW1vdG8uIgorCisjOiBidWlsdGluL3B1bGwuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBwdWxsIGZyb20gdGhlIHJlbW90ZSAnJXMnLCBidXQgZGlkIG5vdCBzcGVjaWZ5XG4iCisiYSBicmFuY2guIEJlY2F1c2UgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQgY29uZmlndXJlZCByZW1vdGVcbiIKKyJmb3IgeW91ciBjdXJyZW50IGJyYW5jaCwgeW91IG11c3Qgc3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK21zZ3N0ciAiIgorIlNvbGljaXRvdSBwdXhhciBvIHJlbW90byAnJXMnLCBtYXMgbsOjbyBlc3BlY2lmaWNvdSB1bSByYW1vLlxuIgorIlVtYSB2ZXogcXVlIGVzdGUgbsOjbyDDqSBvIHJlbW90byBjb25maWd1cmFkbyBwb3IgcHJlZGVmaW5pw6fDo29cbiIKKyJkbyByYW1vIGF0dWFsLCBkZXZlIGVzcGVjaWZpY2FyIHVtIHJhbW8gbmEgbGluaGEgZGUgY29tYW5kb3MuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MDggZ2l0LXBhcnNlLXJlbW90ZS5zaDo3MworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgIk7Do28gc2UgZW5jb250cmEgZW0gbmVuaHVtIHJhbW8gZGUgbW9tZW50by4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQxMCBidWlsdGluL3B1bGwuYzo0MjUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIkVzcGVjaWZpcXVlIG8gcmFtbyBzb2JyZSBvIHF1YWwgcHJldGVuZGUgcmVhbGl6YXIgcmViYXNlLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDEyIGJ1aWx0aW4vcHVsbC5jOjQyNyBnaXQtcGFyc2UtcmVtb3RlLnNoOjgyCittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIG1lcmdlIHdpdGguIgorbXNnc3RyICJFc3BlY2lmaXF1ZSBvIHJhbW8gY29tIG8gcXVhbCBwcmV0ZW5kZSBpbnRlZ3Jhci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQxMyBidWlsdGluL3B1bGwuYzo0MjgKK21zZ2lkICJTZWUgZ2l0LXB1bGwoMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICJDb25zdWx0ZSBnaXQtcHVsbCgxKSBwYXJhIG9idGVyIG1haXMgZGV0YWxoZXMuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MTUgYnVpbHRpbi9wdWxsLmM6NDIxIGJ1aWx0aW4vcHVsbC5jOjQzMAorIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NAorbXNnaWQgIjxyZW1vdGU+IgorbXNnc3RyICI8cmVtb3RvPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDE1IGJ1aWx0aW4vcHVsbC5jOjQzMCBidWlsdGluL3B1bGwuYzo0MzUgZ2l0LXJlYmFzZS5zaDo0NTUKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6NjUKK21zZ2lkICI8YnJhbmNoPiIKK21zZ3N0ciAiPHJhbW8+IgorCisjOiBidWlsdGluL3B1bGwuYzo0MjMgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3NQorbXNnaWQgIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJPIHJhbW8gYXR1YWwgbsOjbyBzZWd1ZSBuZW5odW0gcmFtby4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzMiBnaXQtcGFyc2UtcmVtb3RlLnNoOjk1Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOiIKK21zZ3N0ciAiIgorIlNlIGRlc2VqYSBkZWZpbmlyIG8gcmFtbyBxdWUgZGV2ZSBzZXIgc2VndWlkbyBwb3IgZXN0ZSByYW1vLCBwb2RlIGZhesOqLWxvICIKKyJjb206IgorCisjOiBidWlsdGluL3B1bGwuYzo0MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdG8gbWVyZ2Ugd2l0aCB0aGUgcmVmICclcydcbiIKKyJmcm9tIHRoZSByZW1vdGUsIGJ1dCBubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJBIGNvbmZpZ3VyYcOnw6NvIGluZGljYSBwYXJhIGludGVncmFyIGNvbSBhIHJlZmVyw6puY2lhICclcydcbiIKKyJkbyByZW1vdG8sIG1hcyBhcXVlbGEgcmVmZXLDqm5jaWEgbsOjbyBmb2kgb2J0aWRhLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NzU0Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICJpZ25vcmFkbyAtLXZlcmlmeS1zaWduYXR1cmVzIHBhcmEgcmViYXNlIgorCisjOiBidWlsdGluL3B1bGwuYzo4MDEKK21zZ2lkICItLVtuby1dYXV0b3N0YXNoIG9wdGlvbiBpcyBvbmx5IHZhbGlkIHdpdGggLS1yZWJhc2UuIgorbXNnc3RyICJhIG9ww6fDo28gLS1bbm8tXWF1dG9zdGFzaCBzw7Mgw6kgdsOhbGlkYSBjb20gLS1yZWJhc2UuIgorCisjOiBidWlsdGluL3B1bGwuYzo4MDkKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiQSBhdHVhbGl6YXIgdW0gcmFtbyBxdWUgYWluZGEgbsOjbyBmb2kgY3JpYWRvIGUgY29tIGFsdGVyYcOnw7VlcyBhZGljaW9uYWRhcyBhbyAiCisiw61uZGljZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjgxMgorbXNnaWQgInB1bGwgd2l0aCByZWJhc2UiCittc2dzdHIgInB1eGFyIGNvbSByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjgxMworbXNnaWQgInBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgInN1Ym1ldGEgb3UgZXNjb25kYS1hcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjgzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKyJmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorImNvbW1pdCAlcy4iCittc2dzdHIgIiIKKyJvIGZldGNoIGF0dWFsaXpvdSBhIGNhYmXDp2EgZG8gcmFtbyBhdHVhbC5cbiIKKyJhIGF2YW7Dp2FyIGEgw6Fydm9yZSBkZSB0cmFiYWxobyBhIHBhcnRpciBkb1xuIgorImNvbW1pdCAlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIm91dHB1dCwgcnVuXG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisidG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBhdmFuw6dhciByYXBpZGFtZW50ZSBhIMOhcnZvcmUgZGUgdHJhYmFsaG8uXG4iCisiRGVwb2lzIGRlIGd1YXJkYXIgdG9kYXMgYXMgYWx0ZXJhw6fDtWVzIGltcG9ydGFudGVzIGluZGljYWRhcyBwb3JcbiIKKyIkIGdpdCBkaWZmICVzXG4iCisiZXhlY3V0ZVxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInBhcmEgcmVjdXBlcmFyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODU4Cittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGludGVncmFyIG3Dumx0aXBsb3MgcmFtb3MgbnVtYSBjYWJlw6dhIHZhemlhLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODYyCittc2dpZCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzLiIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZWZldHVhciByZWJhc2Ugc29icmUgbcO6bHRpcGxvcyByYW1vcy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE2Cittc2dpZCAiZ2l0IHB1c2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBwdXNoIFs8b3DDp8O1ZXM+XSBbPHJlcG9zaXTDs3Jpbz4gWzxlc3BlY2lmaWNhZG9yLWRlLXJlZmVyw6puY2lhPi4uLl1dIgorCisjOiBidWlsdGluL3B1c2guYzo4OQorbXNnaWQgInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIKK21zZ3N0ciAiZm9ybWEgYWJyZXZpYWRhIGRlIHRhZyBzZW0gPHRhZz4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjk5Cittc2dpZCAiLS1kZWxldGUgb25seSBhY2NlcHRzIHBsYWluIHRhcmdldCByZWYgbmFtZXMiCittc2dzdHIgIi0tZGVsZXRlIHPDsyBhY2VpdGEgbm9tZXMgc2ltcGxlcyBjb21vIHJlZmVyw6puY2lhcyBkZSBkZXN0aW5vIgorCisjOiBidWlsdGluL3B1c2guYzoxNDMKK21zZ2lkICIiCisiXG4iCisiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksIHNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIgorbXNnc3RyICIiCisiXG4iCisiUGFyYSBlc2NvbGhlciB1bWEgb3DDp8OjbyBwZXJtYW5lbnRlbWVudGUsIGNvbnN1bHRlIHB1c2guZGVmYXVsdCBlbSAnZ2l0IGhlbHAgIgorImNvbmZpZycuIgorCisjOiBidWlsdGluL3B1c2guYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyAlc1xuIgorIiVzIgorbXNnc3RyICIiCisiTyByYW1vIGEgbW9udGFudGUgZG8gcmFtbyBhdHVhbCBuw6NvIGNvaW5jaWRlIGNvbSBvIG5vbWUgZG8gcmFtbyBhdHVhbC5cbiIKKyJQYXJhIHB1YmxpY2FyIG5vIHJhbW8gYSBtb250YW50ZSBubyByZW1vdG8sIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiUGFyYSBwdWJsaWNhciBubyByYW1vIGNvbSBvIG1lc21vIG5vbWUgbm8gcmVtb3RvLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAiIgorIk7Do28gc2UgZW5jb250cmEgZW0gbmVuaHVtIHJhbW8gbmVzdGUgbW9tZW50by5cbiIKKyJQYXJhIHB1YmxpY2FyIG8gaGlzdMOzcmljbyBxdWUgY29uZHV6aXUgYW8gZXN0YWRvIGF0dWFsIChkZSBIRUFEXG4iCisiZGVzdGFjYWRhKSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG5vIHVwc3RyZWFtIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgc2V0IHRoZSByZW1vdGUgYXMgdXBzdHJlYW0sIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorbXNnc3RyICIiCisiTyByYW1vIGF0dWFsICVzIG7Do28gdGVtIG5lbmh1bSByYW1vIGEgbW9udGFudGUuXG4iCisiUGFyYSBwdWJsaWNhciBvIHJhbW8gYXR1YWwgZSBkZWZpbmlyIG8gcmVtb3RvIGEgbW9udGFudGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBtdWx0aXBsZSB1cHN0cmVhbSBicmFuY2hlcywgcmVmdXNpbmcgdG8gcHVzaC4iCittc2dzdHIgIk8gcmFtbyBhdHVhbCAlcyB0ZW0gbcO6bHRpcGxvcyByYW1vcyBhIG1vbnRhbnRlLCBwdWJsaWNhw6fDo28gcmVjdXNhZGEuIgorCisjOiBidWlsdGluL3B1c2guYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKK21zZ3N0ciAiIgorIk8gcmVtb3RvICclcycsIG5vIHF1YWwgcHJldGVuZGUgcHVibGljYXIsIG7Do28gw6kgbyByZW1vdG8gYSBtb250YW50ZVxuIgorImRvIHJhbW8gYXR1YWwgJyVzJy4gRGV2ZSBpbmRpY2FyIG8gcXVlIHByZXRlbmRlIHB1YmxpY2FyIGUgcXVlIHJhbW9cbiIKKyJyZW1vdG8gYXR1YWxpemFyLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjQ1Cittc2dpZCAiIgorIllvdSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVmc3BlY3MgdG8gcHVzaCwgYW5kIHB1c2guZGVmYXVsdCBpcyBcIm5vdGhpbmdcIi4iCittc2dzdHIgIiIKKyJOw6NvIGluZGljb3UgbmVuaHVtIGVzcGVjaWZpY2Fkb3IgZGUgcmVmZXLDqm5jaWEgcGFyYSBwdWJsaWNhciBlIG8gdmFsb3IgZGUgIgorInB1c2guZGVmYXVsdCDDqSBcIm5vdGhpbmdcIi4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI1MgorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gSW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLlxuIgorIidnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkFzIGF0dWFsaXphw6fDtWVzIGZvcmFtIHJlamVpdGFkYXMgcG9ycXVlIGEgcG9udGEgZG8gcmFtbyBhdHVhbCBlc3TDoSBhdHJhc2FkYVxuIgorImVtIHJlbGHDp8OjbyBhbyBob23Ds2xvZ28gcmVtb3RvLiBJbnRlZ3JlIGFzIGFsdGVyYcOnw7VlcyByZW1vdGFzIChlLmcuXG4iCisiJ2dpdCBwdWxsIC4uLicpIGFudGVzIGRlIHB1YmxpY2FyIGRlIG5vdm8uXG4iCisiQ29uc3VsdGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgZW0gJ2dpdCBwdXNoIC0taGVscCcgcGFyYSBvYnRlciBkZXRhbGhlcy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI1OAorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisiY291bnRlcnBhcnQuIENoZWNrIG91dCB0aGlzIGJyYW5jaCBhbmQgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkFzIGF0dWFsaXphw6fDtWVzIGZvcmFtIHJlamVpdGFkYXMgcG9ycXVlIGEgcG9udGEgZG8gcmFtbyBhdHVhbCBlc3TDoSBhdHJhc2FkYVxuIgorImVtIHJlbGHDp8OjbyBhbyBob23Ds2xvZ28gcmVtb3RvLiBFeHRyYWlhIG8gcmFtbyBlIGludGVncmVcbiIKKyJhcyBhbHRlcmHDp8O1ZXMgcmVtb3RhcyAoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYW50ZXMgZGUgcHVibGljYXIgZGUgbm92by5cbiIKKyJDb25zdWx0ZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBlbSAnZ2l0IHB1c2ggLS1oZWxwJyBwYXJhIG9idGVyIGRldGFsaGVzLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjY0Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkFzIGF0dWFsaXphw6fDtWVzIGZvcmFtIHJlamVpdGFkYXMgcG9ycXVlIG8gcmVtb3RvIGNvbnTDqW0gYWx0ZXJhw6fDtWVzIHF1ZVxuIgorIm7Do28gdGVtIGxvY2FsbWVudGUuIEhhYml0dWFsbWVudGUsIGFjb250ZWNlIHBvcnF1ZSBvdXRybyByZXBvc2l0w7NyaW8gIgorInB1YmxpY291XG4iCisibmEgbWVzbWEgcmVmZXLDqm5jaWEuIFBvZGUgaW50ZWdyYXIgcHJpbWVpcm8gYXMgYWx0ZXJhw6fDtWVzIHJlbW90YXNcbiIKKyIoZS5nLiwgJ2dpdCBwdWxsIC4uLicpIGFudGVzIGRlIHB1YmxpY2FyIGRlIG5vdm8uXG4iCisiQ29uc3VsdGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgZW0gJ2dpdCBwdXNoIC0taGVscCcgcGFyYSBvYnRlciBkZXRhbGhlcy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3MQorbXNnaWQgIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0YWcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlbW90ZS4iCittc2dzdHIgIkFzIGF0dWFsaXphw6fDtWVzIGZvcmFtIHJlamVpdGFkYXMgcG9ycXVlIGEgdGFnIGrDoSBleGlzdGUgbm8gcmVtb3RvLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjc0Cittc2dpZCAiIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBhdHVhbGl6YXIgdW1hIHJlZmVyw6puY2lhIHJlbW90YSBxdWUgYXBvbnRlIHBhcmEgdW1cbiIKKyJvYmpldG8gbsOjbyBjb21taXQsIG91IGF0dWFsaXphciB1bWEgcmVmZXLDqm5jaWEgcmVtb3RhIGZhemVuZG8tYVxuIgorImFwb250YXIgcGFyYSB1bSBvYmpldG8gbsOjbyBjb21taXQsIHNlbSB1c2FyIGEgb3DDp8OjbyAnLS1mb3JjZScuXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIkEgcHVibGljYXIgZW0gJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzM4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICJmYWxoYSBhbyBwdWJsaWNhciBhbGd1bWFzIHJlZmVyw6puY2lhcyBlbSAnJXMnIgorCisjOiBidWlsdGluL3B1c2guYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAicmVwb3NpdMOzcmlvICclcycgaW5jb3JyZXRvIgorCisjOiBidWlsdGluL3B1c2guYzozNzAKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSAiCisicmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAiIgorIkRlc3Rpbm8gZGUgcHVibGljYcOnw6NvIG7Do28gZGVmaW5pZG8uXG4iCisiSW5kaXF1ZSB1bSBVUkwgbmEgbGluaGEgZGUgY29tYW5kb3Mgb3UgY29uZmlndXJlIHVtIHJlcG9zaXTDs3JpbyByZW1vdG8gIgorInVzYW5kb1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bm9tZT4gPHVybD5cbiIKKyJcbiIKKyJlIHB1YmxpcXVlIHVzYW5kbyBvIG5vbWUgcmVtb3RvXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxub21lPlxuIgorCisjOiBidWlsdGluL3B1c2guYzozODgKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIGUgLS10YWdzIHPDo28gaW5jb21wYXTDrXZlaXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM4OQorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tYWxsIG7Do28gcG9kZSBzZXIgY29tYmluYWRvIGNvbSBlc3BlY2lmaWNhZG9yZXMgZGUgcmVmZXLDqm5jaWFzIgorCisjOiBidWlsdGluL3B1c2guYzozOTQKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbWlycm9yIGUgLS10YWdzIHPDo28gaW5jb21wYXTDrXZlaXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5NQorbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tbWlycm9yIG7Do28gcG9kZSBzZXIgY29tYmluYWRvIGNvbSBlc3BlY2lmaWNhZG9yZXMgZGUgcmVmZXLDqm5jaWFzIgorCisjOiBidWlsdGluL3B1c2guYzo0MDAKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgZSAtLW1pcnJvciBzw6NvIGluY29tcGF0w612ZWlzIgorCisjOiBidWlsdGluL3B1c2guYzo1MTgKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICJyZXBvc2l0w7NyaW8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUxOSBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgInB1c2ggYWxsIHJlZnMiCittc2dzdHIgInB1YmxpY2FyIHRvZGFzIGFzIHJlZmVyw6puY2lhcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTIwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY0Cittc2dpZCAibWlycm9yIGFsbCByZWZzIgorbXNnc3RyICJyZXBsaWNhciB0b2RhcyBhcyByZWZlcsOqbmNpYXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUyMgorbXNnaWQgImRlbGV0ZSByZWZzIgorbXNnc3RyICJlbGltaW5hciByZWZlcsOqbmNpYXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUyMworbXNnaWQgInB1c2ggdGFncyAoY2FuJ3QgYmUgdXNlZCB3aXRoIC0tYWxsIG9yIC0tbWlycm9yKSIKK21zZ3N0ciAicHVibGljYXIgdGFncyAobsOjbyBwb2RlIHNlciB1c2FkbyBjb20gLS1hbGwgb3UgLS1taXJyb3IpIgorCisjOiBidWlsdGluL3B1c2guYzo1MjYgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjUKK21zZ2lkICJmb3JjZSB1cGRhdGVzIgorbXNnc3RyICJmb3LDp2FyIGF0dWFsaXphw6fDo28iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUyOCBidWlsdGluL3NlbmQtcGFjay5jOjE3OQorbXNnaWQgInJlZm5hbWU+OjxleHBlY3QiCittc2dzdHIgIm5vbWUgZGEgcmVmZXLDqm5jaWE+Ojxlc3BlcmFkbyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTI5IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgwCittc2dpZCAicmVxdWlyZSBvbGQgdmFsdWUgb2YgcmVmIHRvIGJlIGF0IHRoaXMgdmFsdWUiCittc2dzdHIgImV4aWdpciBxdWUgbyBhbnRpZ28gdmFsb3IgZGEgcmVmZXLDqm5jaWEgdGVuaGEgZXN0ZSB2YWxvciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTMyCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJjb250cm9sYXIgYSBwdWJsaWNhw6fDo28gcmVjdXJzaXZhIGRlIHN1Ym3Ds2R1bG9zIgorCisjOiBidWlsdGluL3B1c2guYzo1MzQgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzMKK21zZ2lkICJ1c2UgdGhpbiBwYWNrIgorbXNnc3RyICJ1c2FyIHBhY290ZSBmaW5vIgorCisjOiBidWlsdGluL3B1c2guYzo1MzUgYnVpbHRpbi9wdXNoLmM6NTM2IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTU5CisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MAorbXNnaWQgInJlY2VpdmUgcGFjayBwcm9ncmFtIgorbXNnc3RyICJwcm9ncmFtYSByZWNlaXZlIHBhY2siCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUzNworbXNnaWQgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvc3RhdHVzIgorbXNnc3RyICJkZWZpbmlyIG8gcmFtbyBhIG1vbnRhbnRlIHVzYWRvIGNvbSBnaXQgcHVsbC9zdGF0dXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MAorbXNnaWQgInBydW5lIGxvY2FsbHkgcmVtb3ZlZCByZWZzIgorbXNnc3RyICJlbGltaW5hciByZWZlcsOqbmNpYXMgcmVtb3ZpZGFzIGxvY2FsbWVudGUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MgorbXNnaWQgImJ5cGFzcyBwcmUtcHVzaCBob29rIgorbXNnc3RyICJpZ25vcmFyIHByZS1wdXNoIGhvb2siCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MworbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAicHVibGljYXIgdGFncyBwZXJkaWRhcyBtYXMgcmVsZXZhbnRlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ2IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY3Cittc2dpZCAiR1BHIHNpZ24gdGhlIHB1c2giCittc2dzdHIgImFzc2luYXIgcHVibGljYcOnw6NvIGNvbSBHUEciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0OCBidWlsdGluL3NlbmQtcGFjay5jOjE3NAorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICJzb2xpY2l0YXIgdHJhbnNhw6fDo28gYXTDs21pY2Egbm8gc2Vydmlkb3IgcmVtb3RvIgorCisjOiBidWlsdGluL3B1c2guYzo1NDkgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzAKK21zZ2lkICJzZXJ2ZXItc3BlY2lmaWMiCittc2dzdHIgImVzcGVjw61maWNvIGRvIHNlcnZpZG9yIgorCisjOiBidWlsdGluL3B1c2guYzo1NDkgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzEKK21zZ2lkICJvcHRpb24gdG8gdHJhbnNtaXQiCittc2dzdHIgIm9ww6fDo28gcGFyYSB0cmFuc21pdGlyIgorCisjOiBidWlsdGluL3B1c2guYzo1NjMKK21zZ2lkICItLWRlbGV0ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1taXJyb3IgYW5kIC0tdGFncyIKK21zZ3N0ciAiLS1kZWxldGUgw6kgaW5jb21wYXTDrXZlbCBjb20gLS1hbGwsIC0tbWlycm9yIGUgLS10YWdzIgorCisjOiBidWlsdGluL3B1c2guYzo1NjUKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiLS1kZWxldGUgbsOjbyBmYXogc2VudGlkbyBzZW0gdW1hIHJlZmVyw6puY2lhIgorCisjOiBidWlsdGluL3B1c2guYzo1ODQKK21zZ2lkICJwdXNoIG9wdGlvbnMgbXVzdCBub3QgaGF2ZSBuZXcgbGluZSBjaGFyYWN0ZXJzIgorbXNnc3RyICJhcyBvcMOnw7VlcyBkZSBwdWJsaWNhw6fDo28gbsOjbyBwb2RlbSB0ZXIgY2FyYXRlcmVzIGRlIG5vdmEgbGluaGEiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6NDAKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLSIKKyJwcmVmaXg9PHByZWZpeG8+KSBbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tIgorInNwYXJzZS1jaGVja291dF0gWy0taW5kZXgtb3V0cHV0PTxmaWNoZWlybz5dICgtLWVtcHR5IHwgPMOhcnZvcmUtZXRjMT4gIgorIls8w6Fydm9yZS1ldGMyPiBbPMOhcnZvcmUtZXRjMz5dXSkiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMwCittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAiZXNjcmV2ZXIgbyDDrW5kaWNlIHJlc3VsdGFudGUgbm8gPGZpY2hlaXJvPiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzMKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAiYXBlbmFzIGVzdmF6aWFyIG8gw61uZGljZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzUKK21zZ2lkICJNZXJnaW5nIgorbXNnc3RyICJBIGludGVncmFyIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInBlcmZvcm0gYSBtZXJnZSBpbiBhZGRpdGlvbiB0byBhIHJlYWQiCittc2dzdHIgInJlYWxpemFyIHVtYSBpbnRlZ3Jhw6fDo28gZW0gYWRpw6fDo28gYSB1bWEgbGVpdHVyYSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzkKK21zZ2lkICIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiCittc2dzdHIgIiIKKyJpbnRlZ3JhciBjb20gMyBwb250b3Mgc2UgYSBpbnRlZ3Jhw6fDo28gYW8gbsOtdmVsIGRlIGZpY2hlaXJvcyBuw6NvIGZvciAiCisibmVjZXNzw6FyaWEiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQxCittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAiaW50ZWdyYXIgY29tIDMgcG9udG8gbmEgcHJlc2Vuw6dhIGRlIGFkacOnw7VlcyBlIHJlbW/Dp8O1ZXMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQzCittc2dpZCAic2FtZSBhcyAtbSwgYnV0IGRpc2NhcmQgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAibyBtZXNtbyBxdWUgLW0sIG1hcyBkZXNjYXJ0YXIgZW50cmFkYXMgbsOjbyBpbnRlZ3JhZGFzIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NAorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiPHN1YmRpcmV0w7NyaW8+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDUKK21zZ2lkICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAibGVyIGEgw6Fydm9yZSBlbSA8c3ViZGlyZXTDs3Jpbz4vIHBhcmEgbyDDrW5kaWNlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OAorbXNnaWQgInVwZGF0ZSB3b3JraW5nIHRyZWUgd2l0aCBtZXJnZSByZXN1bHQiCittc2dzdHIgImF0dWFsaXphciBhIMOhcnZvcmUgZGUgdHJhYmFsaG8gY29tIG9zIHJlc3VsdGFkb3MgZGEgaW50ZWdyYcOnw6NvIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiZ2l0aWdub3JlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAicGVybWl0aXIgcXVlIG9zIGZpY2hlaXJvcyBleHBsaWNpdGFtZW50ZSBpZ25vcmFkb3Mgc2VqYW0gc3Vic3RpdHXDrWRvcyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTQKK21zZ2lkICJkb24ndCBjaGVjayB0aGUgd29ya2luZyB0cmVlIGFmdGVyIG1lcmdpbmciCittc2dzdHIgIm7Do28gdmVyaWZpY2FyIGEgw6Fydm9yZSBkZSB0cmFiYWxobyBkZXBvaXMgZGUgaW50ZWdyYXIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTU1Cittc2dpZCAiZG9uJ3QgdXBkYXRlIHRoZSBpbmRleCBvciB0aGUgd29yayB0cmVlIgorbXNnc3RyICJuw6NvIGF0dWFsaXphciBvIMOtbmRpY2Ugb3UgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1NworbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAiaWdub3JhciBhIGFwbGljYcOnw6NvIGRvIGZpbHRybyBkZSBleHRyYcOnw6NvIGVzcGFyc2EiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTU5Cittc2dpZCAiZGVidWcgdW5wYWNrLXRyZWVzIgorbXNnc3RyICJkZXB1cmFyIHVucGFjay10cmVlcyIKKworIzogYnVpbHRpbi9yZWJhc2UtLWhlbHBlci5jOjcKK21zZ2lkICJnaXQgcmViYXNlLS1oZWxwZXIgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZWJhc2UtLWhlbHBlciBbPG9ww6fDtWVzPl0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1oZWxwZXIuYzoxOQorbXNnaWQgImNvbnRpbnVlIHJlYmFzZSIKK21zZ3N0ciAiY29udGludWFyIHJlYmFzZSIKKworIzogYnVpbHRpbi9yZWJhc2UtLWhlbHBlci5jOjIxCittc2dpZCAiYWJvcnQgcmViYXNlIgorbXNnc3RyICJhYm9ydGFyIHJlYmFzZSIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoyNworbXNnaWQgImdpdCByZWNlaXZlLXBhY2sgPGdpdC1kaXI+IgorbXNnc3RyICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo3OTYKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeVxuIgorImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisid2l0aCB3aGF0IHlvdSBwdXNoZWQsIGFuZCB3aWxsIHJlcXVpcmUgJ2dpdCByZXNldCAtLWhhcmQnIHRvIG1hdGNoXG4iCisidGhlIHdvcmsgdHJlZSB0byBIRUFELlxuIgorIlxuIgorIllvdSBjYW4gc2V0IHRoZSAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvXG4iCisiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWVcbiIKKyJvdGhlciB3YXkuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXRcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyJQb3IgcHJlZGVmaW5pw6fDo28sIGF0dWFsaXphciBvIHJhbW8gYXR1YWwgbnVtIHJlcG9zaXTDs3JpbyBuw6NvLW51XG4iCisiw6kgcHJvaWJpZG8sIHBvcnF1ZSB0b3JuYXLDoSBvIMOtbmRpY2UgZSBhIMOhcnZvcmUgZGUgdHJhYmFsaG8gaW5jb25zaXN0ZW50ZXNcbiIKKyJjb20gbyBxdWUgcHVibGljb3UgZSByZXF1ZXJlcsOhICdnaXQgcmVzZXQgLS1oYXJkJyBwYXJhIGlndWFsYXIgYVxuIgorIsOhcnZvcmUgZGUgdHJhYmFsaG8gw6AgSEVBRC5cbiIKKyJcbiIKKyJQb2RlIGRlZmluaXIgYSB2YXJpw6F2ZWwgY29uZmlndXJhw6fDo28gJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnXG4iCisiY29tbyAnaWdub3JlJyBvdSAnd2Fybicgbm8gcmVwb3NpdMOzcmlvIHJlbW90byBwYXJhIHBlcm1pdGlyIHB1YmxpY2FyXG4iCisicGFyYSBvIHJhbW8gYXR1YWwgZGVsZTsgbm8gZW50YW50bywgbsOjbyDDqSByZWNvbWVuZGFuZG8gYSBtZW5vcyBxdWVcbiIKKyJjb25zaWdhIGRlIG91dHJhIGZvcm1hIGF0dWFsaXphciBhIMOhcnZvcmUgZGUgdHJhYmFsaG8gZGVsZSBwYXJhXG4iCisicmVmbGV0aXIgbyBxdWUgcHVibGljb3UuXG4iCisiXG4iCisiUGFyYSBzdXByaW1pciBlc3RhIG1lbnNhZ2VtIGUgbWFudGVyIG8gY29tcG9ydGFtZW50byBwcmVkZWZpbmlkbywgZGVmaW5hIGEgIgorInZhcmnDoXZlbCBkZSBjb25maWd1cmHDp8OjbyAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29tbyAncmVmdXNlJy4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODE2Cittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIGRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBkZW5pZWQsIGJlY2F1c2UgdGhlIG5leHRcbiIKKyInZ2l0IGNsb25lJyB3b24ndCByZXN1bHQgaW4gYW55IGZpbGUgY2hlY2tlZCBvdXQsIGNhdXNpbmcgY29uZnVzaW9uLlxuIgorIlxuIgorIllvdSBjYW4gc2V0ICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvXG4iCisiJ3dhcm4nIG9yICdpZ25vcmUnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBkZWxldGluZyB0aGVcbiIKKyJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlLCB5b3UgY2FuIHNldCBpdCB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyJQb3IgcHJlZGVmaW5pw6fDo28sIGVsaW1pbmFyIG8gcmFtbyBhdHVhbCDDqSBwcm9pYmlkbywgcG9ycXVlIG8gcHLDs3hpbW9cbiIKKyInZ2l0IGNsb25lJyBuw6NvIHJlc3VsdGFyw6EgZW0gbmVuaHVtIGZpY2hlaXJvIGV4dHJhw61kbywgY2F1c2FuZG8gY29uZnVzw6NvLlxuIgorIlxuIgorIlBvZGUgZGVmaW5pciBhIHZhcmnDoXZlbCBkZSBjb25maWd1cmHDp8OjbyAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgY29tb1xuIgorIid3YXJuJyBvdSAnaWdub3JlJyBubyByZXBvc2l0w7NyaW8gcmVtb3RvIHBhcmEgcGVybWl0aXIgZWxpbWluYXIgb1xuIgorInJhbW8gYXR1YWwsIGNvbSBvdSBzZW0gdW1hIG1lbnNhZ2VtIGRlIGF2aXNvLlxuIgorIlxuIgorIlBhcmEgc3VwcmltaXIgZXN0YSBtZW5zYWdlbSwgcG9kZSBkZWZpbsOtLWxhIGNvbW8gJ3JlZnVzZScuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE4ODkKK21zZ2lkICJxdWlldCIKK21zZ3N0ciAic2lsZW5jaW9zbyIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTAzCittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIGRpcmVjdG9yeS4iCittc2dzdHIgIkRldmUgZXNwZWNpZmljYXIgdW0gZGlyZXTDs3Jpby4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIGVtICclcycgbsOjbyDDqSB1bSBjYXJpbWJvIGRlIGRhdGEvaG9yYSB2w6FsaWRvIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU0MCBidWlsdGluL3JlZmxvZy5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJyVzJyBuw6NvIMOpIHVtIGNhcmltYm8gZGUgZGF0YS9ob3JhIHbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMworbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxyYW1vPl0gWy1tIDxtZXN0cmU+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bm9tZT4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQgYnVpbHRpbi9yZW1vdGUuYzozNAorbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSA8YW50aWdvPiA8bm92bz4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUgYnVpbHRpbi9yZW1vdGUuYzozOQorbXNnaWQgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW1vdmUgPG5vbWU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2IGJ1aWx0aW4vcmVtb3RlLmM6NDQKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDxub21lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPHJhbW8+KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNworbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxub21lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOAorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bm9tZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncnVwbz4gfCA8cmVtb3RvPikuLi5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5vbWU+IDxyYW1vPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMSBidWlsdGluL3JlbW90ZS5jOjcwCittc2dpZCAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bm9tZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIgYnVpbHRpbi9yZW1vdGUuYzo3NQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxub21lPiA8bm92by11cmw+IFs8dXJsLWFudGlnbz5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzIGJ1aWx0aW4vcmVtb3RlLmM6NzYKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5vbWU+IDxub3ZvLXVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjQgYnVpbHRpbi9yZW1vdGUuYzo3NworbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bm9tZT4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjkKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs8b3DDp8O1ZXM+XSA8bm9tZT4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxub21lPiA8cmFtbz4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxub21lPiA8cmFtbz4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTUKK21zZ2lkICJnaXQgcmVtb3RlIHNob3cgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNob3cgWzxvcMOnw7Vlcz5dIDxub21lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MAorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFs8b3DDp8O1ZXM+XSA8bm9tZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjUKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcMOnw7Vlcz5dIFs8Z3J1cG8+IHwgPHJlbW90bz5dLi4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICJBIGF0dWFsaXphciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjYKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3Igw6kgcGVyaWdvc28gZSBvYnNvbGV0bztcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3UgLS1taXJyb3I9cHVzaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmd1bWVudG8gZGUgbWlycm9yIGRlc2NvbmhlY2lkbzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU5Cittc2dpZCAiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIKK21zZ3N0ciAib2J0ZXIgb3MgcmFtb3MgcmVtb3RvcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjEKK21zZ2lkICJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIgorbXNnc3RyICJpbXBvcnRhciB0b2RhcyBhcyB0YWdzIGUgb2JqZXRvcyBhc3NvY2lhZG9zIGFvIG9idGVyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NAorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAib3UgbsOjbyBvYnRlciBuZW5odW1hIHRhZyAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjYKK21zZ2lkICJicmFuY2goZXMpIHRvIHRyYWNrIgorbXNnc3RyICJyYW1vcyBhIHNlZ3VpciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjcKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICJyYW1vIG1lc3RyZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjgKK21zZ2lkICJwdXNofGZldGNoIgorbXNnc3RyICJwdXNofGZldGNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2OQorbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICJjb25maWd1cmFyIG8gcmVtb3RvIGNvbW8gdW0gZXNwZWxobyBwYXJhIHB1YmxpY2FyIG91IG9idGVyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4MQorbXNnaWQgInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiCittc2dzdHIgImVzcGVjaWZpY2FyIHVtIHJhbW8gbWVzdHJlIG7Do28gZmF6IHNlbnRpZG8gY29tIC0tbWlycm9yIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4MworbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgImVzcGVjaWZpY2FyIHJhbW9zIHBhcmEgc2VndWlyIHPDsyBmYXogc2VudGlkbyBjb20gZmV0Y2ggbWlycm9ycyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzo2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAibyByZW1vdG8gJXMgasOhIGV4aXN0ZS4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk0IGJ1aWx0aW4vcmVtb3RlLmM6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiclcycgbsOjbyDDqSB1bSBub21lIGRlIHJlbW90byB2w6FsaWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgbWFzdGVyICclcyciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBjb25maWd1cmHDp8OjbyBvIHJhbW8gbWVzdHJlICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICIiCisiTsOjbyBmb2kgcG9zc8OtdmVsIG9idGVyIG8gbWFwYSBkZSBmZXRjaCBkbyBlc3BlY2lmaWNhZG9yIGRlIHJlZmVyw6puY2lhICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQzNyBidWlsdGluL3JlbW90ZS5jOjQ0NQorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIihjb3JyZXNwb25kZW50ZSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDQ5Cittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIihlbGltaW5hZG8pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjYyMiBidWlsdGluL3JlbW90ZS5jOjc1NyBidWlsdGluL3JlbW90ZS5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZTogJXMiCittc2dzdHIgIlJlbW90byBpbmV4aXN0ZW50ZTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisiTsOjbyBmb2kgcG9zc8OtdmVsIG11ZGFyIG8gbm9tZSBkYSBzZWPDp8OjbyBkZSBjb25maWd1cmHDp8OjbyBkZSAnJXMnIHBhcmEgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisiTyBzZWd1aW50ZSBlc3BlY2lmaWNhZG9yIGRlIHJlZmVyw6puY2lhLCBuw6NvLXByZWRlZmluaWRvIGUgdXNhZG8gcGFyYSBvYnRlciAiCisib2JqZXRvcywgbsOjbyBmb2kgYXR1YWxpemFkb1xuIgorIlx0JXNcbiIKKyJcdEF0dWFsaXplIGEgY29uZmlndXJhw6fDo28gbWFudWFsbWVudGUgc2UgbmVjZXNzw6FyaW8uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZmFsaGEgYW8gZWxpbWluYXIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIGNyaWFyICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Nzk0Cittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIiIKKyJOb3RhOiBVbSByYW1vIGZvcmEgZGEgaGllcmFycXVpYSByZWZzL3JlbW90ZXMvIG7Do28gZm9pIHJlbW92aWRvO1xuIgorInBhcmEgbyByZW1vdmVyLCB1c2U6IgorbXNnc3RyWzFdICIiCisiTm90YTogYWxndW5zIHJhbW9zIGZvcmEgZGEgaGllcmFycXVpYSByZWZzL3JlbW90ZXMvIG7Do28gZm9yYW0gcmVtb3ZpZG9zO1xuIgorInBhcmEgb3MgcmVtb3ZlciwgdXNlOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgcmVtb3ZlciBhIHNlY8Onw6NvIGRlIGNvbmZpZ3VyYcOnw6NvICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIKK21zZ3N0ciAiIG5vdm8gKG9zIHByw7N4aW1hIG9iamV0b3Mgb2J0aWRvcyBzZXLDo28gZ3VhcmRhZG9zIGVtIHJlbW90ZXMvJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxMgorbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIgc2VndWlkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MTQKK21zZ2lkICIgc3RhbGUgKHVzZSAnZ2l0IHJlbW90ZSBwcnVuZScgdG8gcmVtb3ZlKSIKK21zZ3N0ciAiIG9ic29sZXRvICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHBhcmEgcmVtb3ZlcikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTE2Cittc2dpZCAiID8/PyIKK21zZ3N0ciAiID8/PyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICIiCisiYnJhbmNoLiVzLm1lcmdlIGludsOhbGlkbzsgbsOjbyDDqSBwb3Nzw612ZWwgcmViYXNlYXIgc29icmUgbWFpcyBkbyBxdWUgdW0gcmFtbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5IG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJyZWJhc2VpYSBpbnRlcmF0aXZhbWVudGUgc29icmUgJXMgZG8gcmVtb3RvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJyZWJhc2VpYSBzb2JyZSAlcyBkbyByZW1vdG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiBpbnRlZ3JhIGNvbSAlcyBkbyByZW1vdG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiaW50ZWdyYSBjb20gJXMgZG8gcmVtb3RvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlLSpzICAgIGFuZCB3aXRoIHJlbW90ZSAlc1xuIgorbXNnc3RyICIlLSpzICAgIGUgY29tIG8gJXMgZG8gcmVtb3RvXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAxOAorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAiY3JpYWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMjEKK21zZ2lkICJkZWxldGUiCittc2dzdHIgImVsaW1pbmFkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDI1Cittc2dpZCAidXAgdG8gZGF0ZSIKK21zZ3N0ciAiYXR1YWxpemFkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDI4Cittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAicG9kZSBzZXIgYXZhbsOnYWRvIHJhcGlkYW1lbnRlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzEKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAibG9jYWwgZGVzYXR1YWxpemFkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIGZvcsOnYSBlbSAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyBwdWJsaWNhIGVtICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgZm9yw6dhIGVtICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyBwdWJsaWNhIGVtICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTYKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAibsOjbyBjb25zdWx0YXIgcmVtb3RvcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqIHJlbW90byAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmV0Y2ggVVJMOiAlcyIKK21zZ3N0ciAiICBPYnRlciAgICBkbyBVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNDUgYnVpbHRpbi9yZW1vdGUuYzoxMTU4IGJ1aWx0aW4vcmVtb3RlLmM6MTI5NworbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIobmVuaHVtIFVSTCkiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gJzonIHNob3VsZCBhbGlnbiB3aXRoCisjLiB0aGUgb25lIGluICIgIEZldGNoIFVSTDogJXMiIHRyYW5zbGF0aW9uCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTYgYnVpbHRpbi9yZW1vdGUuYzoxMTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUHVzaCAgVVJMOiAlcyIKK21zZ3N0ciAiICBQdWJsaWNhciBubyBVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNjAgYnVpbHRpbi9yZW1vdGUuYzoxMTYyIGJ1aWx0aW4vcmVtb3RlLmM6MTE2NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICBSYW1vIEhFQUQ6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNjAKK21zZ2lkICIobm90IHF1ZXJpZWQpIgorbXNnc3RyICIobsOjbyBjb25zdWx0YWRvKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTYyCittc2dpZCAiKHVua25vd24pIgorbXNnc3RyICIoZGVzY29uaGVjaWRvKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiAgUmFtbyBIRUFEIChvIHJlbW90byBIRUFEIMOpIGFtYsOtZ3VvLCBwb2RlIHNlciB1bSBkb3Mgc2VndWludGVzKTpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAgUmFtbyByZW1vdG86JXMiCittc2dzdHJbMV0gIiAgUmFtb3MgcmVtb3RvczolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTgxIGJ1aWx0aW4vcmVtb3RlLmM6MTIwNworbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiIChlc3RhZG8gbsOjbyBjb25zdWx0YWRvKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTkwCittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAgUmFtbyBsb2NhbCBjb25maWd1cmFkbyBwYXJhICdnaXQgcHVsbCc6IgorbXNnc3RyWzFdICIgIFJhbW9zIGxvY2FpcyBjb25maWd1cmFkb3MgcGFyYSAnZ2l0IHB1bGwnOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTk4Cittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiICBSZWZlcsOqbmNpYXMgbG9jYWlzIHNlcsOjbyByZWZsZXRpZGFzIChtaXJyb3IpIHBvciAnZ2l0IHB1c2gnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAgUmVmZXLDqm5jaWEgbG9jYWwgY29uZmlndXJhZGEgcGFyYSAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzFdICIgIFJlZmVyw6puY2lhcyBsb2NhaXMgY29uZmlndXJhZGFzIHBhcmEgJ2dpdCBwdXNoJyVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjI1Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICJkZWZpbmlyIHJlZnMvcmVtb3Rlcy88bm9tZT4vSEVBRCBkZSBhY29yZG8gY29tIG8gcmVtb3RvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMjcKK21zZ2lkICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorbXNnc3RyICJlbGltaW5hciByZWZzL3JlbW90ZXMvPG5vbWU+L0hFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI0MgorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgcmVtb3RlIEhFQUQiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGRldGVybWluYXIgbyByZW1vdG8gSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQ0Cittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIk3Dumx0aXBsb3MgcmFtb3MgSEVBRCByZW1vdG9zLiBFc2NvbGhhIHVtIGV4cGxpY2l0YW1lbnRlIGNvbToiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZWxpbWluYXIgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICJSZWZlcsOqbmNpYSBpbnbDoWxpZGE6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgY29uZmlndXJhciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyBmaWNhcsOhIHN1c3BlbnNvISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIGZpY291IHN1c3BlbnNvISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgIkEgZWxpbWluYXIgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICJVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3dvdWxkIHBydW5lXSAlcyIKK21zZ3N0ciAiICogW2VsaW1pbmFyaWFdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3BydW5lZF0gJXMiCittc2dzdHIgIiAqIFtlbGltaW5hZG9dICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNTgKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJlbGltaW5hciByZW1vdG9zIGRlcG9pcyBkZSBvYnRlciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDIxIGJ1aWx0aW4vcmVtb3RlLmM6MTQ3NSBidWlsdGluL3JlbW90ZS5jOjE1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAiUmVtb3RvIGluZXhpc3RlbnRlICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzNworbXNnaWQgImFkZCBicmFuY2giCittc2dzdHIgImFkaWNpb25hciByYW1vIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NDQKK21zZ2lkICJubyByZW1vdGUgc3BlY2lmaWVkIgorbXNnc3RyICJuZW5odW0gcmVtb3RvIGVzcGVjaWZpY2FkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDYxCittc2dpZCAicXVlcnkgcHVzaCBVUkxzIHJhdGhlciB0aGFuIGZldGNoIFVSTHMiCittc2dzdHIgImNvbnN1bHRhciBVUkxzIGRlIHB1YmxpY2HDp8OjbyBlbSB2ZXogZGUgVVJMcyB1dGlsaXphZG9zIHBhcmEgb2J0ZXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ2MworbXNnaWQgInJldHVybiBhbGwgVVJMcyIKK21zZ3N0ciAicmV0b3JuYXIgdG9kb3Mgb3MgVVJMcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIFVSTHMgY29uZmlndXJlZCBmb3IgcmVtb3RlICclcyciCittc2dzdHIgIm8gcmVtb3RvICclcycgbsOjbyB0ZW0gbmVuaHVtIFVSTCBjb25maWd1cmFkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTE3Cittc2dpZCAibWFuaXB1bGF0ZSBwdXNoIFVSTHMiCittc2dzdHIgIm1hbmlwdWxhciBVUkxzIGRlIHB1YmxpY2HDp8OjbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTE5Cittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAiYWRpY2lvbmFyIFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTIxCittc2dpZCAiZGVsZXRlIFVSTHMiCittc2dzdHIgImVsaW1pbmFyIFVSTHMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUyOAorbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1hZGQgLS1kZWxldGUgbsOjbyBmYXogc2VudGlkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2xkIFVSTCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiUGFkcsOjbyBkZSBVUkwgYW50aWdvIGludsOhbGlkbzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU3NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgIlVSTCBuw6NvIGVuY29udHJhZG86ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NzkKK21zZ2lkICJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIHJlbW92ZXIgdG9kb3Mgb3MgVVJMcyBkZSBuw6NvIHB1YmxpY2HDp8OjbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkzCittc2dpZCAiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIKK21zZ3N0ciAic2VyIHZlcmJvc287IGRldmUgc2VyIGNvbG9jYWRvIGFudGVzIGRlIHVtIHN1YmNvbWFuZG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYyNAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJTdWJjb21hbmRvIGRlc2NvbmhlY2lkbzogJXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTcKK21zZ2lkICJnaXQgcmVwYWNrIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmVwYWNrIFs8b3DDp8O1ZXM+XSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMgorbXNnaWQgIiIKKyJJbmNyZW1lbnRhbCByZXBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBiaXRtYXAgaW5kZXhlcy4gIFVzZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9yIGRpc2FibGUgdGhlIHBhY2sud3JpdGViaXRtYXBzIGNvbmZpZ3VyYXRpb24uIgorbXNnc3RyICIiCisiUmVwYWNrcyBpbmNyZW1lbnRhaXMgc8OjbyBpbmNvbXBhdMOtdmVpcyBjb20gw61uZGljZXMgYml0bWFwLiBVc2VcbiIKKyItLW5vLXdyaXRlLWJpdG1hcC3DrW5kZXggb3UgZGVzYXRpdmUgYSBjb25maWd1cmHDp8OjbyBwYWNrLndyaXRlYml0bWFwcy4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTY2Cittc2dpZCAicGFjayBldmVyeXRoaW5nIGluIGEgc2luZ2xlIHBhY2siCittc2dzdHIgImNvbXBhY3RhciB0dWRvIG51bSDDum5pY28gcGFjb3RlIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE2OAorbXNnaWQgInNhbWUgYXMgLWEsIGFuZCB0dXJuIHVucmVhY2hhYmxlIG9iamVjdHMgbG9vc2UiCittc2dzdHIgIm8gbWVzbW8gcXVlIC1hLCBlIHNvbHRhciBvYmpldG9zIGluYWxjYW7Dp8OhdmVpcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzEKK21zZ2lkICJyZW1vdmUgcmVkdW5kYW50IHBhY2tzLCBhbmQgcnVuIGdpdC1wcnVuZS1wYWNrZWQiCittc2dzdHIgInJlbW92ZXIgcGFjb3RlcyByZWR1bmRhbnRlcyBlIGV4ZWN1dGFyIGdpdC1wcnVuZS1wYWNrZWQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTczCittc2dpZCAicGFzcyAtLW5vLXJldXNlLWRlbHRhIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgInBhc3NhciAtLW5vLXJldXNlLWRlbHRhIGFvIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc1Cittc2dpZCAicGFzcyAtLW5vLXJldXNlLW9iamVjdCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJwYXNzYXIgLS1uby1yZXVzZS1vYmplY3QgYW8gZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzcKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgIm7Do28gZXhlY3V0YXIgZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODAKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFzc2FyIC0tbG9jYWwgYW8gZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODIKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgImVzY3JldmVyIMOtbmRpY2UgZGUgbWFwYSBkZSBiaXRzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4MworbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICJhcHJveGltYXIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTg0Cittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAiY29tIC1BLCBuw6NvIHNvbHRhciBtYWlzIG9iamV0b3MgYWzDqW0gZGVzdGVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4NgorbXNnaWQgIndpdGggLWEsIHJlcGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJjb20gLWEsIHJlZW1wYWNvdGFyIG9iamV0b3MgaW5hbGNhbsOnw6F2ZWlzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4OAorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAiZGltZW5zw6NvIGRhIGphbmVsYSB1c2FkYSBlbSBjb21wcmVzc8OjbyBkZSBkZWx0YXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTg5IGJ1aWx0aW4vcmVwYWNrLmM6MTkzCittc2dpZCAiYnl0ZXMiCittc2dzdHIgImJ5dGVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE5MAorbXNnaWQgInNhbWUgYXMgdGhlIGFib3ZlLCBidXQgbGltaXQgbWVtb3J5IHNpemUgaW5zdGVhZCBvZiBlbnRyaWVzIGNvdW50IgorbXNnc3RyICIiCisibyBtZXNtbyBxdWUgbyBhbnRlcmlvciwgbWFzIGxpbWl0YXIgYSBtZW3Ds3JpYSB1c2FkYSBlbSB2ZXogZG8gbsO6bWVybyBkZSAiCisiZW50cmFkYXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTkyCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIgorbXNnc3RyICJsaW1pdGFyIGEgcHJvZnVuZGlkYWRlIG3DoXhpbWEgZGUgZGVsdGEiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTk0Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggcGFja2ZpbGUiCittc2dzdHIgInRhbWFuaG8gbcOheGltbyBkZSBjYWRhIGZpY2hlaXJvIGRlIHBhY290ZSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTYKK21zZ2lkICJyZXBhY2sgb2JqZWN0cyBpbiBwYWNrcyBtYXJrZWQgd2l0aCAua2VlcCIKK21zZ3N0ciAicmVlbXBhY290YXIgb2JqZXRvcyBlbSBwYWNvdGVzIG1hcmNhZG9zIGNvbSAua2VlcCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMDYKK21zZ2lkICJjYW5ub3QgZGVsZXRlIHBhY2tzIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBlbGltaW5hciBwYWNvdGVzIG51bSByZXBvc2l0w7NyaW8gZGUgb2JqZXRvcy1wcmVjaW9zb3MiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjEwCittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtQSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUgZSAtQSBzw6NvIGluY29tcGF0w612ZWlzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjQwMCBidWlsdGluL3dvcmt0cmVlLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJyVzJyIKK21zZ3N0ciAiZmFsaGEgYW8gcmVtb3ZlciAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxOQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gPG9iamVjdD4gPHJlcGxhY2VtZW50PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZXRvPiA8c3Vic3RpdHVpw6fDo28+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMAorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxvYmplY3Q+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZXRvPiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjEKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFpPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyCittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCByZXBsYWNlIC1kIDxvYmpldG8+Li4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMworbXNnaWQgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXRvPl0gWy1sIFs8cGFkcsOjbz5dXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzI5IGJ1aWx0aW4vcmVwbGFjZS5jOjM2NyBidWlsdGluL3JlcGxhY2UuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcyciCittc2dzdHIgIk5vbWUgZGUgb2JqZXRvIGludsOhbGlkbzogJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAibWVyZ2V0YWcgaW5jb3JyZXRhIG5vIGNvbW1pdCAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICJtZXJnZXRhZyBtYWxmb3JtYWRhIG5vIGNvbW1pdCAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9yaWdpbmFsIGNvbW1pdCAnJXMnIGNvbnRhaW5zIG1lcmdldGFnICclcycgdGhhdCBpcyBkaXNjYXJkZWQ7IHVzZSAtLWVkaXQgIgorImluc3RlYWQgb2YgLS1ncmFmdCIKK21zZ3N0ciAiIgorIm8gY29tbWl0IG9yaWdpbmFsICclcycgY29udMOpbSBhIG1lcmdldGFnICclcycgcXVlIGZvaSBleGNsdcOtZGE7IHVzZSAtLWVkaXQgIgorImVtIHZleiBkZSAtLWdyYWZ0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG9yaWdpbmFsIGNvbW1pdCAnJXMnIGhhcyBhIGdwZyBzaWduYXR1cmUuIgorbXNnc3RyICJvIGNvbW1pdCBvcmlnaW5hbCAnJXMnIHRlbSB1bWEgYXNzaW5hdHVyYSBncGcuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDYKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAiYSBhc3NpbmF0dXJhIHNlcsOhIHJlbW92aWRhIGRvIGNvbW1pdCBzdXBsZW50ZSEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGVzY3JldmVyIG8gY29tbWl0IHN1cGxlbnRlIGRlOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzYKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAibGlzdGFyIHJlZmVyw6puY2lhcyBzdWJzdGl0dcOtZGFzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzcKK21zZ2lkICJkZWxldGUgcmVwbGFjZSByZWZzIgorbXNnc3RyICJlbGltaW5hciByZWZlcsOqbmNpYXMgc3Vic3RpdHXDrWRhcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM4Cittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgImVkaXRhciBvYmpldG8gZXhpc3RlbnRlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzkKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICJtdWRhciBvcyBwYWlzIGRlIHVtIGNvbW1pdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDQwCittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAic3Vic3RpdHVpciBhIHJlZmVyw6puY2lhIHNlIGVzdGEgZXhpc3RpciIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDQxCittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICJuw6NvIG1vc3RyYXIgbyBjb250ZcO6ZG8gZGUgLS1lZGl0IGNvbSBpbXByZXNzw6NvIGJvbml0YSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDQyCittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICJ1c2FyIGVzdGUgZm9ybWF0byIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMgorbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxwYXRoPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgIiIKKyJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8Y2FtaW5obz4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjU4Cittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgInJlZ2lzdGFyIHJlc29sdcOnw7VlcyBsaW1wYXMgbm8gw61uZGljZSIKKworIzogYnVpbHRpbi9yZXNldC5jOjI2Cittc2dpZCAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKK21zZ3N0ciAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3Cittc2dpZCAiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gWzzDoXJ2b3JlLWV0Yz5dIFstLV0gPGNhbWluaG9zPi4uLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4Cittc2dpZCAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICJnaXQgcmVzZXQgLS1wYXRjaCBbPMOhcnZvcmUtZXRjPl0gWy0tXSBbPGNhbWluaG9zPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgIm1peGVkIgorbXNnc3RyICJtaXN0dXJhZG8iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgInNvZnQiCittc2dzdHIgInN1YXZlIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJoYXJkIgorbXNnc3RyICJmb3J0ZSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAibWVyZ2UiCittc2dzdHIgIm1lcmdlIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJrZWVwIgorbXNnc3RyICJjb25zZXJ2YWRvciIKKworIzogYnVpbHRpbi9yZXNldC5jOjc0Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIkhFQUQgaW52w6FsaWRhLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjc2Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiRmFsaGEgYW8gcHJvY3VyYXIgw6Fydm9yZSBkZSBIRUFELiIKKworIzogYnVpbHRpbi9yZXNldC5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICJGYWxoYSBhbyBwcm9jdXJhciDDoXJ2b3JlIGRlICVzLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBRCBlc3TDoSBhZ29yYSBlbSAlcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCByZXBvciBkZSBtb2RvICVzIGR1cmFudGUgdW1hIGludGVncmHDp8Ojby4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNzYKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICJzaWxlbmNpb3NvLCBzw7MgcmVwb3J0YXIgZXJyb3MiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNzgKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAicmVwb3IgSEVBRCBlIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNzkKK21zZ2lkICJyZXNldCBvbmx5IEhFQUQiCittc2dzdHIgInJlcG9yIEhFQUQgYXBlbmFzIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjgxIGJ1aWx0aW4vcmVzZXQuYzoyODMKK21zZ2lkICJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIgorbXNnc3RyICJyZXBvciBIRUFELCDDrW5kaWNlIGUgw6Fydm9yZSBkZSB0cmFiYWxobyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4NQorbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAicmVwb3IgSEVBRCBtYXMgY29uc2VydmFyIGFsdGVyYcOnw7VlcyBsb2NhaXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyODgKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAicmVnaXN0YXIgYXBlbmFzIG8gZmFjdG8gZGUgcXVlIG9zIGNhbWluaG9zIHJlbW92aWRvcyBzZXLDo28gYWRpY2lvbmFkb3MiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIKK21zZ3N0ciAiRmFsaGEgYW8gcmVzb2x2ZXIgJyVzJyBjb21vIHJlZmVyw6puY2lhIHbDoWxpZGEuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCB0cmVlLiIKK21zZ3N0ciAiRmFsaGEgYW8gcmVzb2x2ZXIgJyVzJyBjb21vIMOhcnZvcmUgdsOhbGlkYS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjIKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2ggw6kgaW5jb21wYXTDrXZlbCBjb20gLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzMQorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tbWl4ZWQgYWNvbXBhbmhhZG8gY29tIGNhbWluaG9zIMOpIG9ic29sZXRvOyB1c2UgJ2dpdCByZXNldCAtLSA8Y2FtaW5ob3M+Jy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCByZXBvciBkZSBtb2RvICVzIGNvbSBjYW1pbmhvcy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIk7Do28gw6kgcGVybWl0aWRvIHJlcG9yIGRlIG1vZG8gJXMgbnVtIHJlcG9zaXTDs3JpbyBudSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0NworbXNnaWQgIi1OIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLW1peGVkIgorbXNnc3RyICItTiBzw7MgcG9kZSBzZXIgdXNhZG8gY29tIC0tbWl4ZWQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjQKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAiQWx0ZXJhw6fDtWVzIG7Do28gcHJlcGFyYWRhcyBkZXBvaXMgZGUgcmVwb3I6IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgcmVwb3IgbyBmaWNoZWlybyDDrW5kaWNlIHBhcmEgYSByZXZpc8OjbyAnJXMnLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3NAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlciBub3ZvIGZpY2hlaXJvIGRlIMOtbmRpY2UuIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6MzU0Cittc2dpZCAicmV2LWxpc3QgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5IG9mIG5vdGVzIgorbXNnc3RyICJyZXYtbGlzdCBuw6NvIHN1cG9ydGEgYXByZXNlbnRhw6fDo28gZGUgbm90YXMiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzkzCittc2dpZCAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dIgorbXNnc3RyICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcMOnw7Vlcz5dIC0tIFs8YXJndW1lbnRvcz4uLi5dIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM5OAorbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAiY29uc2VydmFyICctLScgcGFzc2FkbyBjb21vIGFyZ3VtZW50byIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MDAKK21zZ2lkICJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiCittc2dzdHIgInBhcmFyIGRlIGFuYWxpc2FyIGRlcG9pcyBkbyBwcmltZWlybyBhcmd1bWVudG8gcXVlIG7Do28gc2VqYSB1bWEgb3DDp8OjbyIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MDMKK21zZ2lkICJvdXRwdXQgaW4gc3R1Y2sgbG9uZyBmb3JtIgorbXNnc3RyICJtb3N0cmFyIGVtIGZvcm1hdG8gZml4byBlIGxvbmdvIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjUzNAorbXNnaWQgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCisiXG4iCisiUnVuIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IHVzYWdlLiIKK21zZ3N0ciAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9ww6fDtWVzPl0gLS0gWzxhcmd1bWVudG9zPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJndW1lbnRvcz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcMOnw7Vlcz5dIFs8YXJndW1lbnRvcz4uLi5dXG4iCisiXG4iCisiRXhlY3V0ZSBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIHBhcmEgb2J0ZXIgbWFpcyBpbmZvcm1hw6fDo28gc29icmUgYSAiCisicHJpbWVpcmEgdXRpbGl6YcOnw6NvLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMgorbXNnaWQgImdpdCByZXZlcnQgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgcmV2ZXJ0IFs8b3DDp8O1ZXM+XSA8Y29tbWl0LWV0Yz4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjMKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHJldmVydCA8c3ViY29tbWFuZG8+IgorCisjOiBidWlsdGluL3JldmVydC5jOjI4Cittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIFs8b3DDp8O1ZXM+XSA8Y29tbWl0LWV0Yz4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjkKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmRvPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJXM6ICVzIG7Do28gcG9kZSBzZXIgdXNhZG8gY29tICVzIgorCisjOiBidWlsdGluL3JldmVydC5jOjk4Cittc2dpZCAiZW5kIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAidGVybWluYXIgcmV2ZXJzw6NvIG91IGNoZXJyeS1waWNrIgorCisjOiBidWlsdGluL3JldmVydC5jOjk5Cittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAicmV0b21hciBhIHJldmVyc8OjbyBvdSBjaGVycnktcGljayIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDAKK21zZ2lkICJjYW5jZWwgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJjYW5jZWxhciByZXZlcnPDo28gb3UgY2hlcnJ5LXBpY2siCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAxCittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgIm7Do28gc3VibWV0ZXIgYXV0b21hdGljYW1lbnRlIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMgorbXNnaWQgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJlZGl0YXIgYSBtZW5zYWdlbSBkZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA1Cittc2dpZCAicGFyZW50LW51bWJlciIKK21zZ3N0ciAibsO6bWVyby1wYWkiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA2Cittc2dpZCAic2VsZWN0IG1haW5saW5lIHBhcmVudCIKK21zZ3N0ciAic2VsZWNpb25hciBwYWkgcHJpbmNpcGFsIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwOAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJlc3RyYXTDqWdpYSBkZSBpbnRlZ3Jhw6fDo28iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA5Cittc2dpZCAib3B0aW9uIgorbXNnc3RyICJvcMOnw6NvIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMAorbXNnaWQgIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIm9ww6fDo28gZGUgZXN0cmF0w6lnaWEgZGUgaW50ZWdyYcOnw6NvIgorCisjOiBidWlsdGluL3JldmVydC5jOjExOQorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAiYWNyZXNjZW50YXIgbm9tZSBkbyBjb21taXQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTIxCittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgInByZXNlcnZhciBjb21taXRzIGluaWNpYWxtZW50ZSB2YXppb3MiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTIyCittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICJwZXJtaXRpciBjb21taXRzIGNvbSBtZW5zYWdlbnMgdmF6aWFzIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyMworbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICJtYW50ZXIgY29tbWl0cyByZWR1bmRhbnRlcyBlIHZhemlvcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMTEKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJmYWxoYSBhbyByZXZlcnRlciIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMjQKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIGVmZXR1YXIgY2hlcnJ5LXBpY2siCisKKyM6IGJ1aWx0aW4vcm0uYzoxNworbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJtIFs8b3DDp8O1ZXM+XSBbLS1dIDxmaWNoZWlybz4uLi4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyMDUKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorIm8gc2VndWludGUgZmljaGVpcm8gdGVtIGNvbnRlw7pkbyBwcmVwYXJhZG8gbm8gw61uZGljZSBkaWZlcmVudGVcbiIKKyJkbyBjb250ZcO6ZG8gbm8gZmljaGVpcm8gZSBlbSBIRUFEOiIKK21zZ3N0clsxXSAiIgorIm9zIHNlZ3VpbnRlcyBmaWNoZWlyb3MgdMOqbSBjb250ZcO6ZG8gcHJlcGFyYWRvIG5vIMOtbmRpY2UgZGlmZXJlbnRlXG4iCisiZG8gY29udGXDumRvIG5vIGZpY2hlaXJvIGUgZW0gSEVBRDoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTAKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIih1c2UgLWYgcGFyYSBmb3LDp2FyIHJlbW/Dp8OjbykiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTQKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnc3RyWzBdICJvIHNlZ3VpbnRlIGZpY2hlaXJvIGNvbnTDqW0gYWx0ZXJhw6fDtWVzIHByZXBhcmFkYXMgbm8gw61uZGljZToiCittc2dzdHJbMV0gIm9zIHNlZ3VpbnRlcyBmaWNoZWlyb3MgY29udMOqbSBhbHRlcmHDp8O1ZXMgcHJlcGFyYWRhcyBubyDDrW5kaWNlOiIKKworIzogYnVpbHRpbi9ybS5jOjIxOCBidWlsdGluL3JtLmM6MjI3Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIodXNlIC0tY2FjaGVkIHBhcmEgbWFudGVyIG8gZmljaGVpcm8sIG91IC1mIHBhcmEgZm9yw6dhciByZW1vw6fDo28pIgorCisjOiBidWlsdGluL3JtLmM6MjI0Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICJvIHNlZ3VpbnRlIGZpY2hlaXJvIGNvbnTDqW0gYWx0ZXJhw6fDtWVzIGxvY2FpczoiCittc2dzdHJbMV0gIm9zIHNlZ3VpbnRlcyBmaWNoZWlyb3MgY29udMOqbSBhbHRlcmHDp8O1ZXMgbG9jYWlzOiIKKworIzogYnVpbHRpbi9ybS5jOjI0MgorbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgIm7Do28gbGlzdGFyIGZpY2hlaXJvcyByZW1vdmlkb3MiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDMKK21zZ2lkICJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAicmVtb3ZlciBhcGVuYXMgZG8gw61uZGljZSIKKworIzogYnVpbHRpbi9ybS5jOjI0NAorbXNnaWQgIm92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrIgorbXNnc3RyICJpZ25vcmFyIHZlcmlmaWNhw6fDo28gZGUgYXR1YWxpemHDp8OjbyIKKworIzogYnVpbHRpbi9ybS5jOjI0NQorbXNnaWQgImFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIgorbXNnc3RyICJwZXJtaXRpciByZW1vw6fDo28gcmVjdXJzaXZhIgorCisjOiBidWlsdGluL3JtLmM6MjQ3Cittc2dpZCAiZXhpdCB3aXRoIGEgemVybyBzdGF0dXMgZXZlbiBpZiBub3RoaW5nIG1hdGNoZWQiCittc2dzdHIgInNhaXIgY29tIHZhbG9yIHplcm8gbWVzbW8gcXVhbmRvIG7Do28gaMOhIGNvcnJlc3BvbmTDqm5jaWEiCisKKyM6IGJ1aWx0aW4vcm0uYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAibsOjbyByZW1vdmVyICclcycgcmVjdXJzaXZhbWVudGUgc2VtIC1yIgorCisjOiBidWlsdGluL3JtLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJtOiBuw6NvIMOpIHBvc3PDrXZlbCByZW1vdmVyICVzIgorCisjOiBidWlsdGluL3JtLmM6MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIHJlbW92ZXIgJyVzJyIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxOAorbXNnaWQgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxob3N0PjpdPGRpcmVjdG9yeT4gIgorIls8cmVmPi4uLl1cbiIKKyIgIC0tYWxsIGFuZCBleHBsaWNpdCA8cmVmPiBzcGVjaWZpY2F0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJldMOzcmlvPiAiCisiWzxyZWZlcsOqbmNpYT4uLi5dXG4iCisiICAtLWFsbCBlIGVzcGVjaWZpY2HDp8OjbyBleHBsaWNpdGEgZHVtYSA8cmVmZXLDqm5jaWE+IHPDo28gbXV0dWFtZW50ZSAiCisiZXhjbHVzaXZvcy4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYxCittc2dpZCAicmVtb3RlIG5hbWUiCittc2dzdHIgIm5vbWUgZG8gcmVtb3RvIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NQorbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICJ1c2UgcHJvdG9jb2xvIFJQQyBzZW0gZXN0YWRvIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NgorbXNnaWQgInJlYWQgcmVmcyBmcm9tIHN0ZGluIgorbXNnc3RyICJsZXIgcmVmZXLDqm5jaWFzIGRvIHN0ZGluIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NworbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgImltcHJpbWlyIGVzdGFkbyBkbyBwcm9ncmFtYSBhdXhpbGlhciByZW1vdG8iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxMworbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gWzxwYXRoPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IHNob3J0bG9nIFs8b3DDp8O1ZXM+XSBbPGludGVydmFsby1kZS1yZXZpc8O1ZXM+XSBbWy0tXSBbPGNhbWluaG8+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNDgKK21zZ2lkICJHcm91cCBieSBjb21taXR0ZXIgcmF0aGVyIHRoYW4gYXV0aG9yIgorbXNnc3RyICJhZ3J1cGFyIHBvciBjb21taXR0ZXIgZW0gdmV6IGRlIGF1dG9yIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjUwCittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICJvcmRlbmFyIHNhw61kYSBkZSBhY29yZG8gY29tIG8gbsO6bWVybyBkZSBjb21taXRzIHBvciBhdXRvciIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI1MgorbXNnaWQgIlN1cHByZXNzIGNvbW1pdCBkZXNjcmlwdGlvbnMsIG9ubHkgcHJvdmlkZXMgY29tbWl0IGNvdW50IgorbXNnc3RyICJzdXByaW1pciBhIGRlc2NyacOnw6NvIGRvcyBjb21taXRzLCBmb3JuZWNlciBhcGVuYXMgbyBuw7ptZXJvIGRlIGNvbW1pdHMiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNTQKK21zZ2lkICJTaG93IHRoZSBlbWFpbCBhZGRyZXNzIG9mIGVhY2ggYXV0aG9yIgorbXNnc3RyICJNb3N0cmFyIG8gZW5kZXJlw6dvIGRlIGUtbWFpbCBkZSBjYWRhIGF1dG9yIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjU1Cittc2dpZCAid1ssaTFbLGkyXV0iCittc2dzdHIgIndbLGkxWyxpMl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjU2Cittc2dpZCAiTGluZXdyYXAgb3V0cHV0IgorbXNnc3RyICJhanVzdGFyIGxpbmhhcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjEwCittc2dpZCAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXZpc8Ojbz4gfCA8Z2xvYj4pLi4uXSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjE0Cittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmZXLDqm5jaWE+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjM3NAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIKK21zZ3N0clswXSAiaWdub3JhciAlczsgbsOjbyDDqSBwb3Nzw612ZWwgcHJvY2Vzc2FyIG1haXMgZG8gcXVlICVkIHJlZmVyw6puY2lhIgorbXNnc3RyWzFdICJpbmdvcmFyICVzOyBuw6NvIMOpIHBvc3PDrXZlbCBwcm9jZXNzYXIgbWFpcyBkbyBxdWUgJWQgcmVmZXLDqm5jaWFzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG1hdGNoaW5nIHJlZnMgd2l0aCAlcyIKK21zZ3N0ciAibmVuaHVtYSByZWZlcsOqbmNpYSBjb3JyZXNwb25kZSBjb20gJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2MzIKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIm1vc3RyYXIgb3MgcmFtb3MgZGUgbW9uaXRvcml6YcOnw6NvIHJlbW90b3MgZSBvcyByYW1vcyBsb2NhaXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2MzQKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAibW9zdHJhciBvcyByYW1vcyBkZSBtb25pdG9yaXphw6fDo28gcmVtb3RvcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjYzNgorbXNnaWQgImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giCittc2dzdHIgImNvbG9yaXIgJyohKy0nIGNvcnJlc3BvbmRlbmRvIGFvIHJhbW8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2MzgKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAibW9zdHJhciBtYWlzIDxuPiBjb21taXRzIGRlcG9pcyBkbyBhbnRlY2Vzc29yIGNvbXVtIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQwCittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICJzaW7Ds25pbW8gZGUgbW9yZT0tMSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0MQorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICJzdXByaW1pciBhIGNhZGVpYXMgZGUgY2FyYWN0ZXJlcyBkZSBub21lcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0MworbXNnaWQgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJpbmNsdWlyIG8gcmFtbyBhdHVhbCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NQorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAiZGVzaWduYXIgY29tbWl0cyBwZWxvcyBzZXVzIG5vbWVzIGRlIG9iamV0byIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NworbXNnaWQgInNob3cgcG9zc2libGUgbWVyZ2UgYmFzZXMiCittc2dzdHIgIm1vc3RyYXIgcG9zc8OtdmVpcyBiYXNlcyBkZSBpbnRlZ3Jhw6fDo28iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDkKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICJtb3N0cmFyIHJlZmVyw6puY2lhcyBpbmFsY2Fuw6fDoXZlaXMgYSBwYXJ0aXIgZGUgb3V0cmFzIHJlZmVyw6puY2lhcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MQorbXNnaWQgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIKK21zZ3N0ciAibW9zdHJhciBjb21taXRzIGVtIG9yZGVtIHRvcG9sw7NnaWNhIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU0Cittc2dpZCAic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giCittc2dzdHIgIm1vc3RyYXIgYXBlbmFzIGNvbW1pdHMgbsOjbyBwcmVzZW50ZXMgbm8gcHJpbWVpcm8gcmFtbyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NgorbXNnaWQgInNob3cgbWVyZ2VzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lIHRpcCIKK21zZ3N0ciAibW9zdHJhciBpbnRlZ3Jhw6fDtWVzIGFsY2Fuw6fDoXZlaXMgYSBwYXJ0aXIgZHVtYSDDum5pY2EgcG9udGEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTgKK21zZ2lkICJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgd2hlcmUgcG9zc2libGUiCittc2dzdHIgIiIKKyJvcmRlbmFyIHRvcG9sb2dpY2FtZW50ZSwgbWFudGVuZG8gYSBvcmRlbmHDp8OjbyBwb3IgZGF0YSBzZW1wcmUgcXVlIHBvc3PDrXZlbCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MQorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw8YmFzZT5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYyCittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgIm1vc3RyYXIgYXMgPG4+IGVudHJhZGFzIGRlIHJlZi1sb2cgbWFpcyByZWNlbnRlIGEgcGFydGlyIGRhIGJhc2UiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2OTYKK21zZ2lkICIiCisiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvciAtLW1lcmdlLWJhc2UiCittc2dzdHIgIiIKKyItLXJlZmxvZyDDqSBpbmNvbXBhdMOtdmVsIGNvbSAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50IG9yIC0tbWVyZ2UtYmFzZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjcyMAorbXNnaWQgIm5vIGJyYW5jaGVzIGdpdmVuLCBhbmQgSEVBRCBpcyBub3QgdmFsaWQiCittc2dzdHIgIm5lbmh1bSByYW1vIGZvcm5lY2lkbyBlIEhFQUQgbsOjbyDDqSB2w6FsaWRhIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzIzCittc2dpZCAiLS1yZWZsb2cgb3B0aW9uIG5lZWRzIG9uZSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiYSBvcMOnw6NvIC0tcmVmbG9nIHByZWNpc2EgZG8gbm9tZSBkZSB1bSByYW1vIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgJWQgZW50cnkgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ2lkX3BsdXJhbCAib25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dzdHJbMF0gImFwZW5hcyAlZCBlbnRyYWRhIHBvZGVtIHNlciBtb3N0cmFkYXMgbmVzdGUgbW9tZW50by4iCittc2dzdHJbMV0gImFwZW5hcyAlZCBlbnRyYWRhcyBwb2RlbSBzZXIgbW9zdHJhZGFzIG5lc3RlIG1vbWVudG8uIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmICVzIgorbXNnc3RyICJyZWZlcsOqbmNpYSBpbmV4aXN0ZW50ZSAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXYuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXZzLiIKK21zZ3N0clswXSAibsOjbyDDqSBwb3Nzw612ZWwgcHJvY2Vzc2FyIG1haXMgZG8gcXVlICVkIHJldmlzw6NvLiIKK21zZ3N0clsxXSAibsOjbyDDqSBwb3Nzw612ZWwgcHJvY2Vzc2FyIG1haXMgZG8gcXVlICVkIHJldmlzw7Vlcy4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYuIgorbXNnc3RyICInJXMnIG7Do28gw6kgdW1hIHJlZmVyw6puY2lhIHbDoWxpZGEuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIGNvbW1pdCAlcyAoJXMpIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBlbmNvbnRyYXIgbyBjb21taXQgJXMgKCVzKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjEwCittc2dpZCAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8cGFkcsOjbz4uLi5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTEKK21zZ2lkICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dIgorbXNnc3RyICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08cGFkcsOjbz5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTU5Cittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAibW9zdHJhciBhcGVuYXMgdGFncyAocG9kZSBzZXIgY29tYmluYWRvIGNvbSBoZWFkcykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjAKK21zZ2lkICJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIgorbXNnc3RyICJtb3N0cmFyIGFwZW5hcyBjYWJlw6dhcyAocG9kZSBzZXIgY29tYmluYWRvIGNvbSB0YWdzKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MQorbXNnaWQgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgcmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiCittc2dzdHIgIiIKKyJ2ZXJpZmljYcOnw6NvIGRlIHJlZmVyw6puY2lhcyBtYWlzIHJpZ29yb3NhLCByZXF1ZXIgbyBjYW1pbmhvIGV4YXRvIGRhICIKKyJyZWZlcsOqbmNpYSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NCBidWlsdGluL3Nob3ctcmVmLmM6MTY2Cittc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IgorbXNnc3RyICJtb3N0cmFyIGEgcmVmZXLDqm5jaWEgSEVBRCwgbWVzbW8gcXVlIGZvc3NlIGZpbHRyYWRhIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY4Cittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMiCittc2dzdHIgImRlc3JlZmVyZW5jaWFyIHRhZ3MgZW0gSURzIGRlIG9iamV0byIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MAorbXNnaWQgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIKK21zZ3N0ciAibW9zdHJhciBoYXNoIFNIQTEgY29tIDxuPiBkaWdpdG9zIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc0Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgIm7Do28gaW1wcmltaXIgcmVzdWx0YWRvcyBwYXJhIG8gc3Rkb3V0ICjDunRpbCBjb20gLS12ZXJpZnkpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc2Cittc2dpZCAic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAibW9zdHJhciByZWZlcsOqbmNpYXMgZG8gc3RkaW4gcXVlIG7Do28gZXN0w6NvIG5vIHJlcG9zaXTDs3JpbyBsb2NhbCIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTcKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MzUKK21zZ2lkICJza2lwIGFuZCByZW1vdmUgYWxsIGxpbmVzIHN0YXJ0aW5nIHdpdGggY29tbWVudCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKyJpZ25vcmFyIGUgcmVtb3ZlciB0b2RhcyBhcyBsaW5oYXMgY29tZcOnYWRhcyBjb20gdW0gY2Fyw6FjdGVyIGRlIGNvbWVudMOhcmlvIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzozOAorbXNnaWQgInByZXBlbmQgY29tbWVudCBjaGFyYWN0ZXIgYW5kIHNwYWNlIHRvIGVhY2ggbGluZSIKK21zZ3N0ciAicHJlY2VkZXIgY2FkYSBsaW5oYSBjb20gdW0gY2Fyw6FjdGVyIGRlIGNvbWVudMOhcmlvIGUgdW0gZXNwYcOnbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjI0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVmOiAlcyIKK21zZ3N0ciAiUmVmZXLDqm5jaWEgaW5leGlzdGVudGU6ICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzEgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0aW5nIGEgZnVsbCByZWYgbmFtZSwgZ290ICVzIgorbXNnc3RyICJFc3BlcmF2YS1zZSB1bSBub21lIGNvbXBsZXRvIGRlIHVtYSByZWZlcsOqbmNpYSwgb2J0ZXZlLXNlICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCB0aXJhciB1bSBjb21wb25lbnRlIGRvIFVSTCAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzA1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzAKK21zZ2lkICJhbHRlcm5hdGl2ZSBhbmNob3IgZm9yIHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICLDom5jb3JhIGFsdGVybmF0aXZhIHBhcmEgY2FtaW5ob3MgcmVsYXRpdm9zIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzEwCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08Y2FtaW5obz5dIFs8Y2FtaW5obz4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzU2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICJOZW5odW0gVVJMIGVuY29udHJhZG8gcGFyYSBvIGNhbWluaG8gZGUgc3VibcOzZHVsbyAnJXMnIGVtIC5naXRtb2R1bGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgbG9va3VwIGNvbmZpZ3VyYXRpb24gJyVzJy4gQXNzdW1pbmcgdGhpcyByZXBvc2l0b3J5IGlzIGl0cyBvd24gIgorImF1dGhvcml0YXRpdmUgdXBzdHJlYW0uIgorbXNnc3RyICIiCisibsOjbyDDqSBwb3Nzw612ZWwgZW5jb250cmFyIGNvbmZpZ3VyYcOnw6NvICclcycuIEFzc3VtaXIgcXVlIGVzdGUgcmVwb3NpdMOzcmlvIMOpIG8gIgorInByw7NwcmlvIHJlcG9zaXTDs3JpbyBhIG1vbnRhbnRlIGF1dG9yaXTDoXJpby4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiRmFsaGEgYW8gcmVnaXN0YXIgbyBVUkwgZG8gY2FtaW5obyBkZSBzdWJtw7NkdWxvICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSByZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiU3VibcOzZHVsbyAnJXMnICglcykgcmVnaXN0YWRvIGNvbSBjYW1pbmhvICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBjb21tYW5kIHVwZGF0ZSBtb2RlIHN1Z2dlc3RlZCBmb3Igc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAiYXZpc286IG1vZG8gZGUgYXR1YWxpemHDp8OjbyBkbyBjb21hbmRvIHN1Z2VyaWRvIHBhcmEgbyBzdWJtw7NkdWxvICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIkZhbGhhIGFvIHJlZ2lzdGFyIG8gbW9kbyBkZSBhdHVhbGl6YcOnw6NvIGRvIGNhbWluaG8gZGUgc3VibcOzZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDQzCittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IGZvciBpbml0aWFsaXppbmcgYSBzdWJtb2R1bGUiCittc2dzdHIgIlN1cHJpbWlyIGEgc2HDrWRhIGFvIGluaWNpYWxpemFyIHVtIHN1Ym3Ds2R1bG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NDgKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzxjYW1pbmhvPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NzYKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8cGF0aD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxjYW1pbmhvPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICIiCisibmVuaHVtIG1hcGVhbWVudG8gZGUgc3VibcOzZHVsbyBkbyBjYW1pbmhvICclcycgZW5jb250cmFkbyBlbSAuZ2l0bW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBhZGQgYWx0ZXJuYXRlOiAlcyIKK21zZ3N0ciAibyBzdWJtw7NkdWxvICclcycgbsOjbyBwb2RlIGFkaWNpb25hciBzb2JyZXNzYWxlbnRlOiAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAiTyB2YWxvciAnJXMnIGRlIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IG7Do28gw6kgcmVjb25oZWNpZG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJPIHZhbG9yICclcycgZGUgc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIG7Do28gw6kgcmVjb25oZWNpZG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzMKK21zZ2lkICJ3aGVyZSB0aGUgbmV3IHN1Ym1vZHVsZSB3aWxsIGJlIGNsb25lZCB0byIKK21zZ3N0ciAic8OtdGlvIHBhcmEgYW9uZGUgbyBub3ZvIHN1Ym3Ds2R1bG8gc2Vyw6EgY2xvbmFkbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYzNgorbXNnaWQgIm5hbWUgb2YgdGhlIG5ldyBzdWJtb2R1bGUiCittc2dzdHIgIm5vbWUgZG8gbm92byBzdWJtw7NkdWxvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjM5Cittc2dpZCAidXJsIHdoZXJlIHRvIGNsb25lIHRoZSBzdWJtb2R1bGUgZnJvbSIKK21zZ3N0ciAidXJsIGRvbmRlIGNsb25hciBvIHN1Ym3Ds2R1bG9zIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjQ1Cittc2dpZCAiZGVwdGggZm9yIHNoYWxsb3cgY2xvbmVzIgorbXNnc3RyICJwcm9mdW5kaWRhZGUgZGUgY2xvbmVzIHJhc29zIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjQ4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5OTMKK21zZ2lkICJmb3JjZSBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICJmb3LDp2FyIHByb2dyZXNzbyBkYSBjbG9uYWdlbSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY1MworbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxuYW1lPl0gWy0tZGVwdGggPGRlcHRoPl0gLS11cmwgPHVybD4gLS1wYXRoIDxwYXRoPiIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PGNhbWluaG8+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8cmVwb3NpdMOzcmlvPl0gWy0tbmFtZSA8bm9tZT5dIFstLWRlcHRoIDxkZXB0aD5dIC0tdXJsIDx1cmw+IC0tcGF0aCA8Y2FtaW5obz4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2xvbmUgb2YgJyVzJyBpbnRvIHN1Ym1vZHVsZSBwYXRoICclcycgZmFpbGVkIgorbXNnc3RyICJmYWxoYSBhbyBjbG9uYXIgJyVzJyBubyBjYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY5OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBvYnRlciBvIGRpcmV0w7NyaW8gZG8gc3VibcOzZHVsbyBkZSAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICclcycgbm90IGluaXRpYWxpemVkIgorbXNnc3RyICJDYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gJyVzJyBuw6NvIGluaWNpYWxpemFkbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjc2OAorbXNnaWQgIk1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IgorbXNnc3RyICJQcmV0ZW5kaWEgdXNhciAndXBkYXRlIC0taW5pdCc/IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHVubWVyZ2VkIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiQSBpZ25vcmFyIHN1Ym3Ds2R1bG8gJXMgbsOjbyBpbnRlZ3JhZG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgc3VibW9kdWxlICclcyciCittc2dzdHIgIkEgaWdub3JhciBzdWJtw7NkdWxvICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNsb25lICclcycuIFJldHJ5IHNjaGVkdWxlZCIKK21zZ3N0ciAiRmFsaGEgYW8gY2xvbmFyICclcycuIE5vdmEgdGVudGF0aXZhIGFnZW5kYWRhIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnIGEgc2Vjb25kIHRpbWUsIGFib3J0aW5nIgorbXNnc3RyICJGYWxoYSBhbyBjbG9uYXIgJyVzJyBwZWxhIHNlZ3VuZGEgdmV6LCBhYm9ydGFkbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk3NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE2MgorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJjYW1pbmhvIHBhcmEgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTc3Cittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUsIGFjcm9zcyBuZXN0ZWQgc3VibW9kdWxlIGJvdW5kYXJpZXMiCittc2dzdHIgIiIKKyJjYW1pbmhvIHBhcmEgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvLCBhdHJhdmVzc2FuZG8gbGltaXRlcyBkZSBzdWJtw7NkdWxvcyAiCisiYW5pbmhhZG9zIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTgxCittc2dpZCAicmViYXNlLCBtZXJnZSwgY2hlY2tvdXQgb3Igbm9uZSIKK21zZ3N0ciAicmViYXNlLCBtZXJnZSwgY2hlY2tvdXQgb3Ugbm9uZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk4NQorbXNnaWQgIkNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgdHJ1bmNhdGVkIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldmlzaW9ucyIKK21zZ3N0ciAiY3JpYXIgdW0gY2xvbmUgcmFzbywgdHJ1bmNhZG8gYW8gbsO6bWVybyBlc3BlY2lmaWNhZG8gZGUgcmV2aXPDtWVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTg4Cittc2dpZCAicGFyYWxsZWwgam9icyIKK21zZ3N0ciAidHJhYmFsaG9zIGVtIHBhcmFsZWxvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTkwCittc2dpZCAid2hldGhlciB0aGUgaW5pdGlhbCBjbG9uZSBzaG91bGQgZm9sbG93IHRoZSBzaGFsbG93IHJlY29tbWVuZGF0aW9uIgorbXNnc3RyICJzZSBvIGNsb25lIGluaWNpYWwgZGV2ZSBzZWd1aXIgYSByZWNvbWVuZGHDp8OjbyByYXNhIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTkxCittc2dpZCAiZG9uJ3QgcHJpbnQgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAibsOjbyBpbXByaW1pciBwcm9ncmVzc28gZGEgY2xvbmFnZW0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5OTgKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlX2Nsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlX2Nsb25lIFstLXByZWZpeD08Y2FtaW5obz5dIFs8Y2FtaW5obz4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAwOAorbXNnaWQgImJhZCB2YWx1ZSBmb3IgdXBkYXRlIHBhcmFtZXRlciIKK21zZ3N0ciAidmFsb3IgaW5jb3JyZXRvIG5vIHBhcsOibWV0cm8gdXBkYXRlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlICglcykgYnJhbmNoIGNvbmZpZ3VyZWQgdG8gaW5oZXJpdCBicmFuY2ggZnJvbSBzdXBlcnByb2plY3QsIGJ1dCAiCisidGhlIHN1cGVycHJvamVjdCBpcyBub3Qgb24gYW55IGJyYW5jaCIKK21zZ3N0ciAiIgorIk8gcmFtbyBkbyBzdWJtw7NkdWxvICglcykgZm9pIGNvbmZpZ3VyYWRvIHBhcmEgaGVyZGFyIG8gcmFtbyBkbyBzdXBlcnByb2pldG8sICIKKyJtYXMgbyBzdXBlcnByb2pldG8gbsOjbyBlc3TDoSBlbSBuZW5odW0gcmFtbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNjMKK21zZ2lkICJyZWN1cnNlIGludG8gc3VibW9kdWxlcyIKK21zZ3N0ciAicGVyY29ycmVyIHN1Ym3Ds2R1bG9zIHJlY3Vyc2l2YW1lbnRlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE2OQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBlbWJlZC1naXQtZGlyIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZW1iZWQtZ2l0LWRpciBbPGNhbWluaG8+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMjYKK21zZ2lkICJzdWJtb2R1bGUtLWhlbHBlciBzdWJjb21tYW5kIG11c3QgYmUgY2FsbGVkIHdpdGggYSBzdWJjb21tYW5kIgorbXNnc3RyICJvIHN1YmNvbWFuZG8gc3VibW9kdWxlLS1oZWxwZXIgZGV2ZSBzZXIgaW52b2NhZG8gY29tIHVtIHN1YmNvbWFuZG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXNuJ3Qgc3VwcG9ydCAtLXN1cGVyLXByZWZpeCIKK21zZ3N0ciAiJXMgbsOjbyBzdXBvcnRhIC0tc3VwZXItcHJlZml4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHN1Ym1vZHVsZS0taGVscGVyIHN1YmNvbW1hbmQiCittc2dzdHIgIiclcycgbsOjbyDDqSB1bSBzdWJjb21hbmRvIHbDoWxpZG8gZGUgc3VibW9kdWxlLS1oZWxwZXIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NworbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgWzxvcMOnw7Vlcz5dIDxub21lPiBbPHJlZmVyw6puY2lhPl0iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OAorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bmFtZT4iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bm9tZT4iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDAKK21zZ2lkICJzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGZvciBub24tc3ltYm9saWMgKGRldGFjaGVkKSByZWZzIgorbXNnc3RyICIiCisic3VwcmltaXIgbWVuc2FnZW5zIGRlIGVycm8gc29icmUgcmVmZXLDqm5jaWFzIG7Do28tc2ltYsOzbGljYXMgKGRlc3RhY2FkYXMpIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiZWxpbWluYXIgcmVmZXLDqm5jaWFzIHNpbWLDs2xpY2FzIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICJlbmN1cnRhciBhIGFwcmVzZW50YcOnw6NvIGRlIHJlZmVyw6puY2lhcyIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjIKK21zZ2lkICJyZWFzb24iCittc2dzdHIgInJhesOjbyIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjIKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAicmF6w6NvIGRhIGF0dWFsaXphw6fDo28iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjMKK21zZ2lkICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl0gPHRhZ25hbWU+ICIKKyJbPGhlYWQ+XSIKK21zZ3N0ciAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8aWQtY2hhdmU+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWNoZWlybz5dIDxub21lLWRhLSIKKyJ0YWc+IFs8aGVhZD5dIgorCisjOiBidWlsdGluL3RhZy5jOjI0Cittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLWQgPG5vbWUtZGEtdGFnPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzoyNQorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0gWy0tIgorInBvaW50cy1hdCA8b2JqZWN0Pl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLW5vLWNvbnRhaW5zIDxjb21taXQ+XSAiCisiWy0tcG9pbnRzLWF0IDxvYmpldG8+XVxuIgorIlx0XHRbLS1mb3JtYXQ9PGZvcm1hdG8+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhZHLDo28+Li4uXSIKKworIzogYnVpbHRpbi90YWcuYzoyNworbXNnaWQgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXRvPl0gPG5vbWV0YWc+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgInRhZyAnJXMnIG7Do28gZW5jb250cmFkYS4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICJUYWcgJyVzJyBlbGltaW5hZGEgKGVyYSAlcylcbiIKKworIzogYnVpbHRpbi90YWcuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiRXNjcmV2YSBhIG1lbnNhZ2VtIGRhIHRhZzpcbiIKKyIgICVzXG4iCisiTGluaGEgY29tZcOnYWRhcyBjb20gJyVjJyBzZXLDo28gaWdub3JhZGFzLlxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91ICIKKyJ3YW50IHRvLlxuIgorbXNnc3RyICIiCisiXG4iCisiRXNjcmV2YSBhIG1lbnNhZ2VtIGRhIHRhZzpcbiIKKyIgICVzXG4iCisiTGluaGFzIGNvbWXDp2FkYXMgY29tICclYycgc2Vyw6NvIG1hbnRpZGFzOyBwb2RlIHJlbW92w6otbGFzIHNlIG8gZGVzZWphci5cbiIKKworIzogYnVpbHRpbi90YWcuYzoyMTAKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYXNzaW5hciBhIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzoyMTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlciBvIGZpY2hlaXJvIGRhIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzoyMzYKK21zZ2lkICJiYWQgb2JqZWN0IHR5cGUuIgorbXNnc3RyICJ0aXBvIGRlIG9iamV0byBpbmNvcnJldG8uIgorCisjOiBidWlsdGluL3RhZy5jOjI4MgorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAic2VtIG1lbnNhZ2VtIGRlIHRhZz8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgIkEgbWVuc2FnZW0gZGEgdGFnIGZvaSBndWFyZGFkYSBlbSAlc1xuIgorCisjOiBidWlsdGluL3RhZy5jOjMxMgorbXNnaWQgInRhZzogdGFnZ2luZyAiCittc2dzdHIgInRhZzogYSBjb2xvY2FyIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzozMjAKK21zZ2lkICJvYmplY3Qgb2YgdW5rbm93biB0eXBlIgorbXNnc3RyICJvYmpldG8gZGUgdGlwbyBkZXNjb25oZWNpZG8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzI3Cittc2dpZCAiY29tbWl0IG9iamVjdCIKK21zZ3N0ciAib2JqZXRvIGNvbW1pdCIKKworIzogYnVpbHRpbi90YWcuYzozMzUKK21zZ2lkICJ0cmVlIG9iamVjdCIKK21zZ3N0ciAib2JqZXRvIMOhcnZvcmUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzM4Cittc2dpZCAiYmxvYiBvYmplY3QiCittc2dzdHIgIm9iamV0byBibG9iIgorCisjOiBidWlsdGluL3RhZy5jOjM0MQorbXNnaWQgIm90aGVyIHRhZyBvYmplY3QiCittc2dzdHIgIm91dHJvIG9iamV0byB0YWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mzk3Cittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgImxpc3RhciBvcyBub21lcyBkYXMgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjM5OQorbXNnaWQgInByaW50IDxuPiBsaW5lcyBvZiBlYWNoIHRhZyBtZXNzYWdlIgorbXNnc3RyICJpbXByaW1pciA8bj4gbGluaGFzIGRlIGNhZGEgbWVuc2FnZW0gZGUgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjQwMQorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICJlbGltaW5hciB0YWdzIgorCisjOiBidWlsdGluL3RhZy5jOjQwMgorbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICJ2ZXJpZmljYXIgdGFncyIKKworIzogYnVpbHRpbi90YWcuYzo0MDQKK21zZ2lkICJUYWcgY3JlYXRpb24gb3B0aW9ucyIKK21zZ3N0ciAiT3DDp8O1ZXMgZGUgY3JpYcOnw6NvIGRlIHRhZ3MiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA2Cittc2dpZCAiYW5ub3RhdGVkIHRhZywgbmVlZHMgYSBtZXNzYWdlIgorbXNnc3RyICJ0YWcgYW5vdGFkYSwgw6kgbmVjZXNzw6FyaW8gdW1hIG1lbnNhZ2VtIgorCisjOiBidWlsdGluL3RhZy5jOjQwOAorbXNnaWQgInRhZyBtZXNzYWdlIgorbXNnc3RyICJtZW5zYWdlbSBkYSB0YWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDEwCittc2dpZCAiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIKK21zZ3N0ciAidGFnIGFub3RhZGEgZSBhc3NpbmFkYSBjb20gR1BHIgorCisjOiBidWlsdGluL3RhZy5jOjQxNAorbXNnaWQgInVzZSBhbm90aGVyIGtleSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgInVzYXIgb3V0cmEgY2hhdmUgcGFyYSBhc3NpbmFyIGEgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjQxNQorbXNnaWQgInJlcGxhY2UgdGhlIHRhZyBpZiBleGlzdHMiCittc2dzdHIgInN1YnN0aXR1aXIgYSB0YWcgc2UgZXN0YSBleGlzdGlyIgorCisjOiBidWlsdGluL3RhZy5jOjQxNiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjgKK21zZ2lkICJjcmVhdGUgYSByZWZsb2ciCittc2dzdHIgImNyaWFyIHVtIHJlZmxvZyIKKworIzogYnVpbHRpbi90YWcuYzo0MTgKK21zZ2lkICJUYWcgbGlzdGluZyBvcHRpb25zIgorbXNnc3RyICJPcMOnw7VlcyBkZSBsaXN0YWdlbSBkZSB0YWdzIgorCisjOiBidWlsdGluL3RhZy5jOjQxOQorbXNnaWQgInNob3cgdGFnIGxpc3QgaW4gY29sdW1ucyIKK21zZ3N0ciAibW9zdHJhciBhIGxpc3RhIGRlIHRhZ3MgZW0gY29sdW5hcyIKKworIzogYnVpbHRpbi90YWcuYzo0MjAgYnVpbHRpbi90YWcuYzo0MjIKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImltcHJpbWlyIGFwZW5hcyB0YWdzIHF1ZSBjb250ZW5oYW0gbyBjb21taXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIxIGJ1aWx0aW4vdGFnLmM6NDIzCittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJpbXByaW1pciBhcGVuYXMgdGFncyBxdWUgbsOjbyBjb250ZW5oYW0gbyBjb21taXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI0Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAiaW1wcmltaXIgYXBlbmFzIGFzIHRhZ3MgcXVlIGZvcmFtIGludGVncmFkYXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI1Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgImltcHJpbWlyIGFwZW5hcyBhcyB0YWdzIHF1ZSBuw6NvIGZvcmFtIGludGVncmFkYXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDMwCittc2dpZCAicHJpbnQgb25seSB0YWdzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgImltcHJpbWlyIGFwZW5hcyBhcyB0YWdzIGRvIG9iamV0byIKKworIzogYnVpbHRpbi90YWcuYzo0NjkKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gZSAtbiBzw6NvIGluY29tcGF0w612ZWlzIgorCisjOiBidWlsdGluL3RhZy5jOjQ5MQorbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJhIG9ww6fDo28gLW4gc8OzIMOpIHBlcm1pdGlkYSBubyBtb2RvIGxpc3RhIgorCisjOiBidWlsdGluL3RhZy5jOjQ5MworbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgImEgb3DDp8OjbyAtLWNvbnRhaW5zIHPDsyDDqSBwZXJtaXRpZGEgbm8gbW9kbyBsaXN0YSIKKworIzogYnVpbHRpbi90YWcuYzo0OTUKK21zZ2lkICItLW5vLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJhIG9ww6fDo28gLS1jb250YWlucyBzw7Mgw6kgcGVybWl0aWRhIG5vIG1vZG8gbGlzdGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDk3Cittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgImEgb3DDp8OjbyAtLXBvaW50cy1hdCBzw7Mgw6kgcGVybWl0aWRhIG5vIG1vZG8gbGlzdGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDk5Cittc2dpZCAiLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgImFzIG9ww6fDtWVzIC0tbWVyZ2VkIGUgLS1uby1tZXJnZWQgc8OzIHPDo28gcGVybWl0aWRhcyBubyBtb2RvIGxpc3RhIgorCisjOiBidWlsdGluL3RhZy5jOjUxMAorbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAic8OzIMOpIHBlcm1pdGlkbyB1bSBvcMOnw6NvIC1GIG91IC1tLiIKKworIzogYnVpbHRpbi90YWcuYzo1MjkKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgImRlbWFzaWFkbyBwYXLDom1ldHJvcyIKKworIzogYnVpbHRpbi90YWcuYzo1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iCittc2dzdHIgIiclcycgbsOjbyDDqSB1bSBub21lIGRlIHRhZyB2w6FsaWRvLiIKKworIzogYnVpbHRpbi90YWcuYzo1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgImEgdGFnICclcycgasOhIGV4aXN0ZSIKKworIzogYnVpbHRpbi90YWcuYzo1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICJUYWcgJyVzJyBhdHVhbGl6YWRhIChlcmEgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo0OTMKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiQSBkZXNjb21wYWN0YXIgb2JqZXRvcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiZmFsaGEgYW8gY3JpYXIgbyBkaXJldMOzcmlvICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICJmYWxoYSBhbyBpbnZvY2FyIHN0YXQgZGUgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJmYWxoYSBhbyBjcmlhciBvIGZpY2hlaXJvICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGZpbGUgJXMiCittc2dzdHIgImZhbGhhIGFvIGVsaW1pbmFyIG8gZmljaGVpcm8gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTEwIGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJmYWxoYSBhbyBlbGltaW5hciBvIGRpcmV0w7NyaW8gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRlc3RpbmcgbXRpbWUgaW4gJyVzJyAiCittc2dzdHIgIkEgdGVzdGFyIG10aW1lIGVtICclcycgIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE0OQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBmaWxlIgorbXNnc3RyICIiCisiYSBpbmZvcm1hw6fDo28gZGUgc3RhdCBkbyBkaXJldMOzcmlvIG7Do28gbXVkb3UgZGVwb2lzIGRlIGFkaWNpb25hciB1bSBub3ZvICIKKyJmaWNoZWlybyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNjIKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiYSBpbmZvcm1hw6fDo28gZGUgc3RhdCBkbyBkaXJldMOzcmlvIG7Do28gbXVkb3UgZGVwb2lzIGRlIGFkaWNpb25hciB1bSBub3ZvICIKKyJkaXJldMOzcmlvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE3NQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciB1cGRhdGluZyBhIGZpbGUiCittc2dzdHIgImEgaW5mb3JtYcOnw6NvIGRlIHN0YXQgbXVkb3UgZGVwb2lzIGRlIGF0dWFsaXphciB1bSBmaWNoZWlybyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxODYKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgYWRkaW5nIGEgZmlsZSBpbnNpZGUgc3ViZGlyZWN0b3J5IgorbXNnc3RyICIiCisiYSBpbmZvcm1hw6fDo28gZGUgc3RhdCBkbyBkaXJldMOzcmlvIG11ZG91IGRlcG9pcyBkZSBhZGljaW9uYXIgdW0gZmljaGVpcm8gIgorImRlbnRybyBkdW0gc3ViZGlyZXTDs3JpbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxOTcKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGZpbGUiCittc2dzdHIgIiIKKyJhIGluZm9ybWHDp8OjbyBkZSBzdGF0IGRvIGRpcmV0w7NyaW8gbsOjbyBtdWRvdSBkZXBvaXMgZGUgZWxpbWluYXIgdW0gZmljaGVpcm8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjEwCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJhIGluZm9ybWHDp8OjbyBkZSBzdGF0IGRvIGRpcmV0w7NyaW8gbsOjbyBtdWRvdSBkZXBvaXMgZGUgZWxpbWluYXIgdW0gZGlyZXTDs3JpbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTcKK21zZ2lkICIgT0siCittc2dzdHIgIiBPSyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo1NjgKK21zZ2lkICJnaXQgdXBkYXRlLWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCB1cGRhdGUtaW5kZXggWzxvcMOnw7Vlcz5dIFstLV0gWzxmaWNoZWlybz4uLi5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkyMworbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAiY29udGludWFyIGEgcmVmcmVzY2FyIG1lc21vIHF1YW5kbyBvIMOtbmRpY2UgcHJlY2lzZSBkZSBzZXIgYXR1YWxpemFkbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MjYKK21zZ2lkICJyZWZyZXNoOiBpZ25vcmUgc3VibW9kdWxlcyIKK21zZ3N0ciAicmVmcmVzY2FyOiBpZ25vcmFyIHN1Ym3Ds2R1bG9zIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkyOQorbXNnaWQgImRvIG5vdCBpZ25vcmUgbmV3IGZpbGVzIgorbXNnc3RyICJuw6NvIGlnbm9yYXIgbm92b3MgZmljaGVpcm9zIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkzMQorbXNnaWQgImxldCBmaWxlcyByZXBsYWNlIGRpcmVjdG9yaWVzIGFuZCB2aWNlLXZlcnNhIgorbXNnc3RyICJkZWl4YXIgcXVlIG9zIGZpY2hlaXJvcyBzdWJzdGl0dWFtIG9zIGRpcmV0w7NyaW9zIGUgdmljZS12ZXJzYSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MzMKK21zZ2lkICJub3RpY2UgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICJhdmlzYXIgc29icmUgZmljaGVpcm9zIHF1ZSBmYWx0ZW0gbmEgw6Fydm9yZSBkZSB0cmFiYWxobyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MzUKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAicmVmcmVzY2FyIG1lc21vIHF1ZSBvIMOtbmRpY2UgY29udGVuaGEgZW50cmFkYXMgbsOjbyBpbnRlZ3JhZGFzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkzOAorbXNnaWQgInJlZnJlc2ggc3RhdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAicmVmcmVzY2FyIGluZm9ybWHDp8OjbyBkZSBzdGF0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0MgorbXNnaWQgImxpa2UgLS1yZWZyZXNoLCBidXQgaWdub3JlIGFzc3VtZS11bmNoYW5nZWQgc2V0dGluZyIKK21zZ3N0ciAiY29tbyAtLXJlZnJlc2gsIG1hcyBpZ25vcmFyIGEgZGVmaW5pw6fDo28gYXNzdW1lLXVuY2hhbmdlZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NDYKK21zZ2lkICI8bW9kZT4sPG9iamVjdD4sPHBhdGg+IgorbXNnc3RyICI8bW9kbz4sPG9iamV0bz4sPGNhbWluaG8+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NworbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiYWRpY2lvbmFyIG8gZWxlbWVudG8gZXNwZWNpZmljYWRvIGFvIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTU2Cittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICJtYXJjYXIgZmljaGVpcm9zIGNvbW8gXCJuw6NvIGFsdGVyYWRvc1wiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk1OQorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAibGltcGFyIG8gYml0IGFzc3VtZWQtdW5jaGFuZ2VkIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2MgorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgIm1hcmNhciBmaWNoZWlyb3MgY29tbyBcIsO6bmljb3MgZG8gw61uZGljZVwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2NQorbXNnaWQgImNsZWFyIHNraXAtd29ya3RyZWUgYml0IgorbXNnc3RyICJsaW1wYXIgbyBiaXQgaWdub3Jhci3DoXJ2b3JlLWRlLXRyYWJhbGhvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2OAorbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisic8OzIGFkaWNpb25hciBhbyDDrW5kaWNlOyBuw6NvIGFkaWNpb25hciBvIGNvbnRlw7pkbyDDoCBiYXNlIGRlIGRhZG9zIGRlIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTcwCittc2dpZCAicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIKK21zZ3N0ciAiIgorInJlbW92ZXIgb3MgY2FtaW5ob3MgbWVuY2lvbmFkbyBtZXNtbyBzZSBlc3RpdmVyZW0gcHJlc2VudGVzIG5hIMOhcnZvcmUgZGUgIgorInRyYWJhbGhvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3MgorbXNnaWQgIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIKK21zZ3N0ciAiY29tIC0tc3RkaW46IGFzIGxpbmhhcyBkYSBlbnRyYWRhIHPDo28gdGVybWluYWRhcyBjb20gYnl0ZXMgbnVsb3MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc0Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIHRvIGJlIHVwZGF0ZWQgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGVyIGxpc3RhIGRlIGNhbWluaG8gYSBhdHVhbGl6YXIgZGEgZW50cmFkYSBwYWRyw6NvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3OAorbXNnaWQgImFkZCBlbnRyaWVzIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGluZGV4IgorbXNnc3RyICJhZGljaW9uYXIgZWxlbWVudG9zIGRhIGVudHJhZGEgcGFkcsOjbyBhbyDDrW5kaWNlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MgorbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAicmVwb3ZvYXIgYXMgZmFzZXMgbsK6MiBlIG7CujMgZG9zIGNhbWluaG9zIGxpc3RhZG9zIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NgorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICJhdHVhbGl6YXIgYXBlbmFzIGVsZW1lbnRvcyBxdWUgZGlmaXJhbSBkZSBIRUFEIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5MAorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImlnbm9yYXIgZmljaGVpcm9zIG7Do28gcHJlc2VudGVzIG5hIMOhcnZvcmUgZGUgdHJhYmFsaG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkzCittc2dpZCAicmVwb3J0IGFjdGlvbnMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJtb3N0cmFyIGHDp8O1ZXMgbmEgc2HDrWRhIHBhZHLDo28iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk1Cittc2dpZCAiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiCittc2dzdHIgIiIKKyIocGFyYSBwb3JjZWxhbmFzKSBlc3F1ZWNlciBjb25mbGl0b3MgZ3VhcmRhZG9zIHF1ZSBuw6NvIGZvcmFtIHJlc29sdmlkb3MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk5Cittc2dpZCAid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiCittc2dzdHIgImVzY3JldmVyIG8gw61uZGljZSBuZXN0ZSBmb3JtYXRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDEKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiYXRpdmFyIG91IGRlc2F0aXZhciBhIGRpdmlzw6NvIGRvIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwMworbXNnaWQgImVuYWJsZS9kaXNhYmxlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiYXRpdmFyIG91IGRlc2F0aXZhciBjYWNoZSBuw6NvIGNvbnRyb2xhZGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwNQorbXNnaWQgInRlc3QgaWYgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICJ0ZXN0YXIgc2UgbyBzaXN0ZW1hIGRlIGZpY2hlaXJvcyBzdXBvcnRhIGNhY2hlIG7Do28gY29udHJvbGFkYSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA3Cittc2dpZCAiZW5hYmxlIHVudHJhY2tlZCBjYWNoZSB3aXRob3V0IHRlc3RpbmcgdGhlIGZpbGVzeXN0ZW0iCittc2dzdHIgImF0aXZhciBjYWNoZSBuw6NvIGNvbnRyb2xhZGEgc2VtIHRlc3RhciBvIHNpc3RlbWEgZGUgZmljaGVpcm9zIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExMDcKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJlbmFibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggZXN0w6EgZGVmaW5pZGEgY29tbyBmYWxzZTsgcmVtb3ZhIG91IGFsdGVyZS1hIHNlIHByZXRlbmRlICIKKyJtZXNtbyBhdGl2YXIgw61uZGljZSBzZXBhcmFkbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTE2Cittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IGVzdMOhIGRlZmluaWRhIGNvbW8gdHJ1ZTsgcmVtb3ZhIG91IGFsdGVyZS1hIHNlIHByZXRlbmRlICIKKyJtZXNtbyBkZXNhdGl2YXIgw61uZGljZSBzZXBhcmFkbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTI3Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZGlzYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBlc3TDoSBkZWZpbmlkYSBjb21vIHRydWU7IHJlbW92YSBvdSBhbHRlcmUtYSBzZSBwcmV0ZW5kZSAiCisibWVzbW8gZGVzYXRpdmFyIGEgY2FjaGUgbsOjbyBjb250cm9sYWRhIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExMzEKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIkEgY2FjaGUgbsOjbyBjb250cm9sYWRhIGVzdMOhIGRlc2F0aXZhZGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTEzOQorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBlbmFibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgZXN0w6EgZGVmaW5pZGEgY29tbyBmYWxzZTsgcmVtb3ZhIG91IGFsdGVyZS1hIHNlIHByZXRlbmRlICIKKyJtZXNtbyBhdGl2YXIgYSBjYWNoZSBuw6NvIGNvbnRyb2xhZGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE0MworIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZW5hYmxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiQSBjYWNoZSBuw6NvIGNvbnRyb2xhZGEgZGUgJyVzJyBmb2kgYXRpdmFkYS4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjkKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8b3DDp8O1ZXM+XSAtZCA8bm9tZS1kYS1yZWZlcsOqbmNpYT4gWzx2YWxvci1hbnRpZ28+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICIiCisiZ2l0IHVwZGF0ZS1yZWYgWzxvcMOnw7Vlcz5dICAgIDxub21lLWRhLXJlZmVyw6puY2lhPiA8bm92by12YWxvcj4gWzx2YWxvci0iCisiYW50aWdvPl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPG9ww6fDtWVzPl0gLS1zdGRpbiBbLXpdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJkZWxldGUgdGhlIHJlZmVyZW5jZSIKK21zZ3N0ciAiZWxpbWluYXIgYSByZWZlcsOqbmNpYSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY1Cittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgIiIKKyJhdHVhbGl6YXIgYSByZWZlcsOqbmNpYSA8bm9tZS1kYS1yZWZlcsOqbmNpYT4sIG7Do28gYSByZWZlcsOqbmNpYSBxdWUgZXN0YSBhcG9udGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInN0ZGluIGhhcyBOVUwtdGVybWluYXRlZCBhcmd1bWVudHMiCittc2dzdHIgIm9zIGFyZ3VtZW50b3MgZGEgZW50cmFkYSBwYWRyw6NvIHRlcm1pbmFtIGVtIE5VTCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgImxlciBhdHVhbGl6YcOnw7VlcyBkYSBlbnRyYWRhIHBhZHLDo28iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6NgorbXNnaWQgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorbXNnc3RyICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNAorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgImF0dWFsaXphciBvcyBmaWNoZWlyb3MgZGUgaW5mb3JtYcOnw6NvIGRvIHplcm8iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjE3Cittc2dpZCAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8Y29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NzIKK21zZ2lkICJwcmludCBjb21taXQgY29udGVudHMiCittc2dzdHIgImltcHJpbWlyIGNvbnRlw7pkbyBkbyBjb21taXQiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjczIGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM3Cittc2dpZCAicHJpbnQgcmF3IGdwZyBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICJpbXByaW1pciBpbmZvcm1hw6fDo28gZG8gZ3BnIGVtIGJydXRvIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NTQKK21zZ2lkICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjQKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICJ2ZXJib3NvIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjYKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAibW9zdHJhciBhcGVuYXMgZXN0YXTDrXN0aWNhcyIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MTgKK21zZ2lkICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXRvPl0gPHRhZz4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM2Cittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICJpbXByaW1pciBjb250ZcO6ZG8gZGEgdGFnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTUKK21zZ2lkICJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxwYXRoPiBbPGJyYW5jaD5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgYWRkIFs8b3DDp8O1ZXM+XSA8Y2FtaW5obz4gWzxyYW1vPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNgorbXNnaWQgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgbGlzdCBbPG9ww6fDtWVzPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNworbXNnaWQgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B0aW9ucz5dIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxvcMOnw7Vlcz5dIDxjYW1pbmhvPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE4Cittc2dpZCAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcMOnw7Vlcz5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTkKK21zZ2lkICJnaXQgd29ya3RyZWUgdW5sb2NrIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHVubG9jayA8Y2FtaW5obz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIKK21zZ3N0ciAiQSByZW1vdmVyIHdvcmt0cmVlcy8lczogZGlyZXTDs3JpbyBpbnbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJBIHJlbW92ZXIgd29ya3RyZWVzLyVzOiBvIGZpY2hlaXJvIGdpdGRpciBuw6NvIGV4aXN0ZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIKK21zZ3N0ciAiQSByZW1vdmVyIHdvcmt0cmVlcy8lczogbsOjbyDDqSBwb3Nzw612ZWwgbGVyIG8gZmljaGVpcm8gZ2l0ZGlyICglcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgIkEgcmVtb3ZlciB3b3JrdHJlZXMvJXM6IGZpY2hlaXJvIGdpdGRpciBpbnbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIHBvaW50cyB0byBub24tZXhpc3RlbnQgbG9jYXRpb24iCittc2dzdHIgIiIKKyJBIHJlbW92ZXIgd29ya3RyZWVzLyVzOiBvIGZpY2hlaXJvIGdpdGRpciBhcG9udGEgcGFyYSB1bWEgbG9jYWxpemHDp8OjbyAiCisiaW5leGlzdGVudGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjgKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIHdvcmtpbmcgdHJlZXMiCittc2dzdHIgInJlcG9ydGFyIMOhcnZvcmVzIGRlIHRyYWJhbGhvIHBvZGFkYXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMzAKK21zZ2lkICJleHBpcmUgd29ya2luZyB0cmVlcyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZXhwaXJhciDDoXJ2b3JlcyBkZSB0cmFiYWxobyBtYWlzIGFudGlnb3MgcXVlIDx0ZW1wbz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJyVzJyBqw6EgZXhpc3RlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IG9mICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBjcmlhciBvIGRpcmV0w7NyaW8gZGUgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgJXMgKGlkZW50aWZpZXIgJXMpIgorbXNnc3RyICJBIHByZXBhcmFyICVzIChpZGVudGlmaWNhZG9yICVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMyNAorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGV2ZW4gaWYgYWxyZWFkeSBjaGVja2VkIG91dCBpbiBvdGhlciB3b3JrdHJlZSIKK21zZ3N0ciAiIgorImV4dHJhaXIgbyA8cmFtbz4gbWVzbW8gc2UgasOhIHRlbmhhIHNpZG8gZXh0cmHDrWRvIG5vdXRyYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzI2Cittc2dpZCAiY3JlYXRlIGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAiY3JpYXIgdW0gbm92byByYW1vIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzI4Cittc2dpZCAiY3JlYXRlIG9yIHJlc2V0IGEgYnJhbmNoIgorbXNnc3RyICJjcmlhciBvdSByZXBvciB1bSByYW1vIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzMwCittc2dpZCAicG9wdWxhdGUgdGhlIG5ldyB3b3JraW5nIHRyZWUiCittc2dzdHIgInBvdm9hciBhIG5vdmEgw6Fydm9yZSBkZSB0cmFiYWxobyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMzOAorbXNnaWQgIi1iLCAtQiwgYW5kIC0tZGV0YWNoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1iLCAtQiBlIC0tZGV0YWNoIHPDo28gbXV0dWFtZW50ZSBleGNsdXNpdm9zIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDczCittc2dpZCAicmVhc29uIGZvciBsb2NraW5nIgorbXNnc3RyICJyYXrDo28gZGUgdHJhbmNhciIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ4NSBidWlsdGluL3dvcmt0cmVlLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIG7Do28gw6kgdW1hIMOhcnZvcmUgZGUgdHJhYmFsaG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0ODcgYnVpbHRpbi93b3JrdHJlZS5jOjUyMAorbXNnaWQgIlRoZSBtYWluIHdvcmtpbmcgdHJlZSBjYW5ub3QgYmUgbG9ja2VkIG9yIHVubG9ja2VkIgorbXNnc3RyICJBIMOhcnZvcmUgZGUgdHJhYmFsaG8gcHJpbmNpcGFsIG7Do28gcG9kZSBzZXIgdHJhbmNhZGEgbmVtIGRlc3RyYW5jYWRhIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQsIHJlYXNvbjogJXMiCittc2dzdHIgIiclcycgasOhIGVzdMOhIHRyYW5jYWRhLCByYXrDo286ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiCittc2dzdHIgIiclcycgasOhIGVzdMOhIHRyYW5jYWRhIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiJyVzJyBuw6NvIGVzdMOhIHRyYW5jYWRhIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoxMworbXNnaWQgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeG8+L10iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI2Cittc2dpZCAiPHByZWZpeD4vIgorbXNnc3RyICI8cHJlZml4bz4vIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyNworbXNnaWQgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIKK21zZ3N0ciAiZXNjcmV2ZXIgb2JqZXRvIMOhcnZvcmUgZG8gc3ViZGlyZXTDs3JpbyA8cHJlZml4bz4iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjMwCittc2dpZCAib25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyIKK21zZ3N0ciAiYXBlbmFzIMO6dGlsIHBhcmEgZGVwdXJhw6fDo28iCisKKyM6IHVwbG9hZC1wYWNrLmM6MjIKK21zZ2lkICJnaXQgdXBsb2FkLXBhY2sgWzxvcHRpb25zPl0gPGRpcj4iCittc2dzdHIgImdpdCB1cGxvYWQtcGFjayBbPG9ww6fDtWVzPl0gPGRpcj4iCisKKyM6IHVwbG9hZC1wYWNrLmM6MTA0MAorbXNnaWQgInF1aXQgYWZ0ZXIgYSBzaW5nbGUgcmVxdWVzdC9yZXNwb25zZSBleGNoYW5nZSIKK21zZ3N0ciAidGVybWluYXIgZGVwb2lzIGRlIHVtYSDDum5pY2EgdHJvY2EgZGUgcGVkaWRvL3Jlc3Bvc3RhIgorCisjOiB1cGxvYWQtcGFjay5jOjEwNDIKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGluaXRpYWwgcmVmIGFkdmVydGlzZW1lbnQiCittc2dzdHIgInNhaXIgaW1lZGlhdGFtZW50ZSBkZXBvaXMgZG8gYW7Dum5jaW8gaW5pY2lhbCBkYSByZWZlcsOqbmNpYSIKKworIzogdXBsb2FkLXBhY2suYzoxMDQ0Cittc2dpZCAiZG8gbm90IHRyeSA8ZGlyZWN0b3J5Pi8uZ2l0LyBpZiA8ZGlyZWN0b3J5PiBpcyBubyBHaXQgZGlyZWN0b3J5IgorbXNnc3RyICJuw6NvIHRlbnRhciA8ZGlyZXTDs3Jpbz4vLmdpdC8gc2UgbyA8ZGlyZXTDs3Jpbz4gbsOjbyBmb3IgdW0gZGlyZXTDs3JpbyBHaXQiCisKKyM6IHVwbG9hZC1wYWNrLmM6MTA0NgorbXNnaWQgImludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5IgorbXNnc3RyICJpbnRlcnJvbXBlciB0cmFuc2ZlcsOqbmNpYSBkZXBvaXMgZGUgPG4+IHNlZ3VuZG9zIGRlIGluYXRpdmlkYWRlIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwZXJtaXNzaW9ucyBvbiB5b3VyIHNvY2tldCBkaXJlY3RvcnkgYXJlIHRvbyBsb29zZTsgb3RoZXJcbiIKKyJ1c2VycyBtYXkgYmUgYWJsZSB0byByZWFkIHlvdXIgY2FjaGVkIGNyZWRlbnRpYWxzLiBDb25zaWRlciBydW5uaW5nOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKK21zZ3N0ciAiIgorIkFzIHBlcm1pc3PDtWVzIGRvIGRpcmV0w7NyaW8gZG8gc29ja2V0IHPDo28gZGVtYXNpYWRvIGZyYWNhczsgb3V0cm9zXG4iCisidXRpbGl6YWRvcmVzIHBvZGVyw6NvIGNvbnNlZ3VpciBhcyBzdWFzIGNyZWRlbmNpYWlzIGVtIGNhY2hlLiBDb25zaWRlcmUgIgorImV4ZWN1dGFyOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjcxCittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAiaW1wcmltaXIgbWVuc2FnZW5zIGRlIGRlcHVyYcOnw6NvIG5vIHN0ZGVyciIKKworIzogZ2l0LmM6MTQKK21zZ2lkICIiCisiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJ0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCBvciBjb25jZXB0LiIKK21zZ3N0ciAiIgorIidnaXQgaGVscCAtYScgZSAnZ2l0IGhlbHAgLWcnIGxpc3RhbSBvcyBzdWJjb21hbmRvcyBkaXNwb27DrXZlaXMgZSBhbGd1bnNcbiIKKyJndWlhcyBkZSBjb25jZWl0b3MuIENvbnN1bHRlICdnaXQgaGVscCA8Y29tYW5kbz4nIG91ICdnaXQgaGVscCA8Y29uY2VpdG8+J1xuIgorInBhcmEgbGVyIHNvYnJlIHVtIHN1YmNvbWFuZG8gb3UgY29uY2VpdG8gZXNwZWPDrWZpY28uIgorCisjOiBodHRwLmM6MzU1Cittc2dpZCAiRGVsZWdhdGlvbiBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4yMi4wIgorbXNnc3RyICJOw6NvIMOpIHN1cG9ydGFkbyBkZWxlZ2FyIGNvbnRyb2xvIGNvbSBjVVJMIDwgNy4yMi4wIgorCisjOiBodHRwLmM6MzY0Cittc2dpZCAiUHVibGljIGtleSBwaW5uaW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy40NC4wIgorbXNnc3RyICJOw6NvIMOpIHN1cG9ydGFkbyBhZml4YXIgY2hhdmVzIHDDumJsaWNhcyBjb20gY1VSTCA8IDcuNDQuMCIKKworIzogaHR0cC5jOjE3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byB1cGRhdGUgdXJsIGJhc2UgZnJvbSByZWRpcmVjdGlvbjpcbiIKKyIgIGFza2VkIGZvcjogJXNcbiIKKyIgICByZWRpcmVjdDogJXMiCittc2dzdHIgIiIKKyJuw6NvIMOpIHBvc3PDrXZlbCBhdHVhbGl6YXIgYmFzZSBkZSB1cmwgZGUgcmVkaXJlw6fDo286XG4iCisiICBwZWRpZG8gcGFyYTogJXNcbiIKKyIgICAgcmVkaXJlw6fDo286ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyB0byAlcyIKK21zZ3N0ciAiYSByZWRpcmVjaW9uYXIgcGFyYSAlcyAiCisKKyM6IGNvbW1vbi1jbWRzLmg6OQorbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICJpbmljaWFyIHVtYSDDoXJlYSBkZSB0cmFiYWxobyAoY29uc3VsdGUgdGFtYsOpbTogZ2l0IGhlbHAgdHV0b3JpYWwpIgorCisjOiBjb21tb24tY21kcy5oOjEwCittc2dpZCAid29yayBvbiB0aGUgY3VycmVudCBjaGFuZ2UgKHNlZSBhbHNvOiBnaXQgaGVscCBldmVyeWRheSkiCittc2dzdHIgInRyYWJhbGhhciBuYSBhbHRlcmHDp8OjbyBhdHVhbCAoY29uc3VsdGUgdGFtYsOpbTogZ2l0IGhlbHAgZXZlcnlkYXkpIgorCisjOiBjb21tb24tY21kcy5oOjExCittc2dpZCAiZXhhbWluZSB0aGUgaGlzdG9yeSBhbmQgc3RhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCByZXZpc2lvbnMpIgorbXNnc3RyICJleGFtaW5hciBvIGhpc3TDs3JpY28gZSBlc3RhZG8gKGNvbnN1bHRlIHRhbWLDqW06IGdpdCBoZWxwIHJldmlzaW9ucykiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTIKK21zZ2lkICJncm93LCBtYXJrIGFuZCB0d2VhayB5b3VyIGNvbW1vbiBoaXN0b3J5IgorbXNnc3RyICJhdW1lbnRhciwgbWFyY2FyIGUgYWp1c3RhciBvIHNldSBoaXN0w7NyaWNvIGNvbXVtIgorCisjOiBjb21tb24tY21kcy5oOjEzCittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICJjb2xhYm9yYXIgKGNvbnN1bHRlIHRhbWLDqW06IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTcKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkFkaWNpb25hciBjb250ZcO6ZG9zIGRlIGZpY2hlaXJvcyBhbyDDrW5kaWNlIgorCisjOiBjb21tb24tY21kcy5oOjE4Cittc2dpZCAiVXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAiVXNlIHByb2N1cmEgYmluw6FyaW8gcGFyYSBlbmNvbnRyYXIgbyBjb21taXQgcXVlIGludHJvZHV6aXUgdW0gYnVnIgorCisjOiBjb21tb24tY21kcy5oOjE5Cittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgIkxpc3RhciwgY3JpYXIgb3UgZWxpbWluYXIgcmFtb3MiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjAKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIk11ZGFyIGRlIHJhbW9zIG91IHJlc3RhdXJhciBvcyBmaWNoZWlyb3MgZGEgw6Fydm9yZSBkZSB0cmFiYWxobyIKKworIzogY29tbW9uLWNtZHMuaDoyMQorbXNnaWQgIkNsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAiQ2xvbmFyIHVtIHJlcG9zaXTDs3JpbyBudW0gbm92byBkaXJldMOzcmlvIgorCisjOiBjb21tb24tY21kcy5oOjIyCittc2dpZCAiUmVjb3JkIGNoYW5nZXMgdG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIkdyYXZhciBhbHRlcmHDp8O1ZXMgbm8gcmVwb3NpdMOzcmlvIgorCisjOiBjb21tb24tY21kcy5oOjIzCittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiIgorIk1vc3RyYXIgYWx0ZXJhw6fDtWVzIGVudHJlIGNvbW1pdHMsIGVudHJlIGNvbW1pdCBlIMOhcnZvcmUgZGUgdHJhYmFsaG8sIGV0YyIKKworIzogY29tbW9uLWNtZHMuaDoyNAorbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIlRyYW5zZmVyaXIgb2JqZXRvcyBlIHJlZmVyw6puY2lhcyBkb3V0cm8gcmVwb3NpdMOzcmlvIgorCisjOiBjb21tb24tY21kcy5oOjI1Cittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICJJbXByaW1pciBsaW5oYXMgcXVlIGNvcnJlc3BvbmRhbSBhIHVtIHBhZHLDo28iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjYKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAiQ3JpYXIgdW0gcmVwb3NpdMOzcmlvIEdpdCB2YXppbyBvdSByZWluaWNpYWxpemFyIHVtIGrDoSBleGlzdGVudGUiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjcKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJNb3N0cmFyIGhpc3TDs3JpY28gZGUgY29tbWl0cyIKKworIzogY29tbW9uLWNtZHMuaDoyOAorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICJKdW50YXIgZHVhcyBvdSBtYWlzIGhpc3TDs3JpYXMgZGUgZGVzZW52b2x2aW1lbnRvIG51bWEgc8OzIgorCisjOiBjb21tb24tY21kcy5oOjI5Cittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICJNb3ZlciBvdSBtdWRhciBvIG5vbWUgZGUgdW0gZmljaGVpcm8sIGRpcmV0w7NyaW8gb3UgbGlnYcOnw6NvIHNpbWLDs2xpY2EiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzAKK21zZ2lkICJGZXRjaCBmcm9tIGFuZCBpbnRlZ3JhdGUgd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgIk9idGVyIGUgaW50ZWdyYXIgY29tIG91dHJvIHJlcG9zaXTDs3JpbyBvdSBvdXRybyByYW1vIGxvY2FsIgorCisjOiBjb21tb24tY21kcy5oOjMxCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJBdHVhbGl6YXIgcmVmZXLDqm5jaWFzIHJlbW90YXMganVudGFtZW50ZSBjb20gb2JqZXRvcyBhc3NvY2lhZG9zIgorCisjOiBjb21tb24tY21kcy5oOjMyCittc2dpZCAiUmVhcHBseSBjb21taXRzIG9uIHRvcCBvZiBhbm90aGVyIGJhc2UgdGlwIgorbXNnc3RyICJSZWFwbGljYXIgY29tbWl0cyBubyB0b3BvIGRlIG91dHJhIGJhc2UiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzMKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAiUmVwb3IgYSBIRUFEIGF0dWFsIG5vIGVzdGFkbyBlc3BlY2lmaWNhZG8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MzQKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiUmVtb3ZlciBmaWNoZWlyb3MgZGEgw6Fydm9yZSBkZSB0cmFiYWxobyBlIGRvIMOtbmRpY2UiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzUKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiTW9zdHJhciB2w6FyaW9zIHRpcG9zIG9iamV0b3MiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzYKK21zZ2lkICJTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzIgorbXNnc3RyICJNb3N0cmFyIG8gZXN0YWRvIGRhIMOhcnZvcmVzIGRlIHRyYWJhbGhvIgorCisjOiBjb21tb24tY21kcy5oOjM3Cittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIkNyaWFyLCBsaXN0YXIsIGVsaW1pbmFyIG91IHZlcmlmaWNhciB1bSBvYmpldG8gdGFnIGFzc2luYWRvIGNvbSBHUEciCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNDUKK21zZ2lkICJleHBpcnktZGF0ZSIKK21zZ3N0ciAiZGF0YS1kZS12YWxpZGFkZSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE2MAorbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAic2VtLWHDp8OjbyAocmV0cm9jb21wYXRpYmlsaWRhZGUpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjM4Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICJzZXIgbWFpcyB2ZXJib3NvIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjQwCittc2dpZCAiYmUgbW9yZSBxdWlldCIKK21zZ3N0ciAic2VyIG1haXMgc2lsZW5jaW9zbyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjI0NgorbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICJ1c2FyIDxuPiBkw61naXRvcyBwYXJhIG1vc3RyYXIgU0hBLTFzIgorCisjOiByZXJlcmUuaDo0MAorbXNnaWQgInVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZXVzZWQgY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZSIKK21zZ3N0ciAiIgorImF0dWFsaXphciBvIMOtbmRpY2UgY29tIHJlc29sdcOnw7VlcyBkZSBjb25mbGl0b3MgcmV1dGlsaXphZGFzIHNlIHBvc3PDrXZlbCIKKworIzogZ2l0LWJpc2VjdC5zaDo1NAorbXNnaWQgIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorbXNnc3RyICJEZXZlIGNvbWXDp2FyIHBvciBleGVjdXRhciBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjYwCittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICJRdWVyIHF1ZSBvIEdpdCBvIGZhw6dhIHBvciBzaSBbWS9uXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pc2VkIG9wdGlvbjogJyRhcmcnIgorbXNnc3RyICJvcMOnw6NvIG7Do28gcmVjb25oZWNpZGE6ICckYXJnJyIKKworIzogZ2l0LWJpc2VjdC5zaDoxMjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiJyRhcmcnIG7Do28gcGFyZWNlciBzZXIgdW1hIHJldmlzw6NvIHbDoWxpZGEiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTU0Cittc2dpZCAiQmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIgorbXNnc3RyICJIRUFEIGluY29ycmV0YSAtIMOpIG5lY2Vzc8OhcmlvIHVtYSBIRUFEIgorCisjOiBnaXQtYmlzZWN0LnNoOjE2NworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNoZWNraW5nIG91dCAnJHN0YXJ0X2hlYWQnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDx2YWxpZC1icmFuY2g+Jy4iCittc2dzdHIgIiIKKyJGYWxoYSBhbyBleHRyYWlyICckc3RhcnRfaGVhZCcuIFRlbnRlICdnaXQgYmlzZWN0IHJlc2V0IDxyYW1vLXbDoWxpZG8+Jy4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MTc3Cittc2dpZCAid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYmlzc2V0YXIgbnVtYSDDoXJ2b3JlIFwiY2ctc2VlaydlZFwiIgorCisjOiBnaXQtYmlzZWN0LnNoOjE4MQorbXNnaWQgIkJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIkhFQUQgaW5jb3JyZXRhIC0gcmVmZXLDqm5jaWEgc2ltYsOzbGljYSBkZXNjb25oZWNpZGEiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjMzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAkc3RhdGUiCittc2dzdHIgIkFyZ3VtZW50byBkZSBiaXNlY3Rfd3JpdGUgaW5jb3JyZXRvOiAkc3RhdGUiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjYyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICJSZXZpc8OjbyBpbmNvcnJldGEgbmEgZW50cmFkYTogJGFyZyIKKworIzogZ2l0LWJpc2VjdC5zaDoyODEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRiaXNlY3RlZF9oZWFkIgorbXNnc3RyICJSZXZpc8OjbyBpbmNvcnJldGEgbmEgZW50cmFkYTogJGJpc2VjdGVkX2hlYWQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkcmV2IgorbXNnc3RyICJSZXZpc8OjbyBpbmNvcnJldGEgbmEgZW50cmFkYTogJHJldiIKKworIzogZ2l0LWJpc2VjdC5zaDoyOTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIHPDsyBsZXZhIHVtIGFyZ3VtZW50by4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MzIyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBiaXNlY3Rpbmcgb25seSB3aXRoIGEgJFRFUk1fQkFEIGNvbW1pdC4iCittc2dzdHIgIkF2aXNvOiBhIGJpc3NldGFyIHPDsyBjb20gdW0gY29tbWl0ICRURVJNX0JBRC4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDozMjgKK21zZ2lkICJBcmUgeW91IHN1cmUgW1kvbl0/ICIKK21zZ3N0ciAiVGVtIGEgY2VydGV6YSBbWS9uXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjM0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICRiYWRfc3luIGFuZCBvbmUgJGdvb2Rfc3luIHJldmlzaW9uLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBhbmQgXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIGZvciB0aGF0LikiCittc2dzdHIgIiIKKyJEZXZlIGluZGljYXIgcGVsbyBtZW5vcyB1bWEgcmV2aXPDo28gJGJhZF9zeW4gZSB1bWEgcmV2aXPDo28gJGdvb2Rfc3luLlxuIgorIihQb2RlIHVzYXIgXCJnaXQgYmlzZWN0ICRiYWRfc3luXCIgZSBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgcGFyYSBlc3NlIGZpbS4pIgorCisjOiBnaXQtYmlzZWN0LnNoOjM0MworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJGdvb2Rfc3luIGFuZCBvbmUgJGJhZF9zeW4gcmV2aXNpb24uXG4iCisiKFlvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIGFuZCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorIkRldmUgY29tZcOnYXIgcG9yIGV4ZWN1dGFyIFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIkluZGlxdWUgcGVsbyBtZW5vcyB1bWEgcmV2aXPDo28gJGdvb2Rfc3luIGUgdW1hIHJldmlzw6NvICRiYWRfc3luLlxuIgorIihQb2RlIHVzYXIgXCJnaXQgYmlzZWN0ICRiYWRfc3luXCIgZSBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgcGFyYSBlc3NlIGZpbS4pIgorCisjOiBnaXQtYmlzZWN0LnNoOjQxNCBnaXQtYmlzZWN0LnNoOjU0NgorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiTsOjbyBzZSBlc3TDoSBhIGJpc3NldGFyLiIKKworIzogZ2l0LWJpc2VjdC5zaDo0MjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickaW52YWxpZCcgaXMgbm90IGEgdmFsaWQgY29tbWl0IgorbXNnc3RyICInJGludmFsaWQnIG7Do28gw6kgdW0gY29tbWl0IHbDoWxpZG8iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICckYnJhbmNoJy5cbiIKKyJUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIKK21zZ3N0ciAiIgorIk7Do28gZm9pIHBvc3PDrXZlbCBleHRyYWlyIGEgSEVBRCBvcmlnaW5hbCBkZSAnJGJyYW5jaCcuXG4iCisiVGVudGUgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIKKworIzogZ2l0LWJpc2VjdC5zaDo0NTgKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJOZW5odW0gZmljaGVpcm8gZGUgbG9nIGZvcm5lY2lkbyIKKworIzogZ2l0LWJpc2VjdC5zaDo0NTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICRmaWxlIGZvciByZXBsYXlpbmciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGxlciAkZmlsZSBwYXJhIHJlcHJvZHV6aXIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDgwCittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICI/PyBkbyBxdWUgw6kgcXVlIGVzdMOhIGEgZmFsYXI/IgorCisjOiBnaXQtYmlzZWN0LnNoOjQ5MgorIywgc2gtZm9ybWF0Cittc2dpZCAicnVubmluZyAkY29tbWFuZCIKK21zZ3N0ciAiYSBleGVjdXRhciAkY29tbWFuZCIKKworIzogZ2l0LWJpc2VjdC5zaDo0OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyJleGl0IGNvZGUgJHJlcyBmcm9tICckY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIKK21zZ3N0ciAiIgorImZhbGhhIGFvIGJpc3NldGFyOlxuIgorImPDs2RpZ28gZGUgc2HDrWRhICRyZXMgZGUgJyRjb21tYW5kJyDDqSA8IDAgb3UgPj0gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjUyNQorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBjb250aW51YXIgYSBiaXNzZXRhciIKKworIzogZ2l0LWJpc2VjdC5zaDo1MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICIiCisiZmFsaGEgYW8gYmlzc2V0YXI6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIHJldG9ybm91IGNvbSBvIGPDs2RpZ28gZGUgZXJybyAkcmVzIgorCisjOiBnaXQtYmlzZWN0LnNoOjUzOAorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAiYmlzc2Vjw6fDo28gY29uY2x1w61kYSBjb20gc3VjZXNzbyIKKworIzogZ2l0LWJpc2VjdC5zaDo1NjUKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgInVzZSBkb2lzIHRlcm1vcyBkaWZlcmVudGVzIgorCisjOiBnaXQtYmlzZWN0LnNoOjU3NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyR0ZXJtJyBpcyBub3QgYSB2YWxpZCB0ZXJtIgorbXNnc3RyICInJHRlcm0nIG7Do28gw6kgdW0gdGVybW8gdsOhbGlkbyIKKworIzogZ2l0LWJpc2VjdC5zaDo1NzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbid0IHVzZSB0aGUgYnVpbHRpbiBjb21tYW5kICckdGVybScgYXMgYSB0ZXJtIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCB1c2FyIG8gY29tYW5kbyAnJHRlcm0nIGNvbW8gdW0gdGVybW8iCisKKyM6IGdpdC1iaXNlY3Quc2g6NTg3IGdpdC1iaXNlY3Quc2g6NTkzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW4ndCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGVybSAnJHRlcm0nIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhbHRlcmFyIG8gc2lnbmlmaWNhZG8gZG8gdGVybW8gJyR0ZXJtJyIKKworIzogZ2l0LWJpc2VjdC5zaDo2MDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWFuZDogeW91J3JlIGN1cnJlbnRseSBpbiBhICRURVJNX0JBRC8kVEVSTV9HT09EIGJpc2VjdC4iCittc2dzdHIgIiIKKyJDb21hbmRvIGludsOhbGlkbzogZXN0w6Etc2UgYSBiaXNzZXRhciB1c2FuZG8gb3MgdGVybW9zICRURVJNX0JBRC8kVEVSTV9HT09ELiIKKworIzogZ2l0LWJpc2VjdC5zaDo2MzYKK21zZ2lkICJubyB0ZXJtcyBkZWZpbmVkIgorbXNnc3RyICJuZW5odW0gdGVybW8gZGVmaW5pZG8iCisKKyM6IGdpdC1iaXNlY3Quc2g6NjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCBhcmd1bWVudCAkYXJnIGZvciAnZ2l0IGJpc2VjdCB0ZXJtcycuXG4iCisiU3VwcG9ydGVkIG9wdGlvbnMgYXJlOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIGFuZCAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIgorbXNnc3RyICIiCisiYXJndW1lbnRvIGludsOhbGlkbyAkYXJnIGRlICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJPcMOnw7VlcyBzdXBvcnRhZGFzOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIGUgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NDYKK21zZ2lkICIiCisiRXJyb3I6IFlvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJtZXJnZSIKK21zZ3N0ciAiIgorIkVycm86IEFzIHN1YXMgYWx0ZXJhw6fDtWVzIGxvY2FpcyBub3Mgc2VndWludGVzIGZpY2hlaXJvcyBzZXJpYW0gc3Vic3RpdHXDrWRhcyAiCisiYW8gaW50ZWdyYXIiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIkEgaW50ZWdyYcOnw6NvIGF1dG9tw6F0aWNhIG7Do28gZnVuY2lvbm91LiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjIKK21zZ2lkICJTaG91bGQgbm90IGJlIGRvaW5nIGFuIG9jdG9wdXMuIgorbXNnc3RyICJOw6NvIHNlIGRldmlyaWEgZXN0YXIgYSBmYXplciB1bSBwb2x2by4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjb21tb24gY29tbWl0IHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBlbmNvbnRyYXIgY29tbWl0IGNvbXVtIGNvbSAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjc3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IHVwLXRvLWRhdGUgd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIkrDoSBlc3TDoSBhdHVhbGl6YWRvIGNvbSAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgdG86ICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiQSBhdmFuw6dhciByYXBpZGFtZW50ZSBwYXJhOiAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjk3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUcnlpbmcgc2ltcGxlIG1lcmdlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICJBIHRlbnRhciBpbnRlZ3Jhw6fDo28gc2ltcGxlcyBjb20gJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDoxMDIKK21zZ2lkICJTaW1wbGUgbWVyZ2UgZGlkIG5vdCB3b3JrLCB0cnlpbmcgYXV0b21hdGljIG1lcmdlLiIKK21zZ3N0ciAiQSBpbnRlZ3Jhw6fDo28gc2ltcGxlcyBuw6NvIGZ1bmNpb25vdSwgYSB0ZW50YXIgaW50ZWdyYcOnw6NvIGF1dG9tw6F0aWNhLiIKKworIzogZ2l0LXJlYmFzZS5zaDo1NworbXNnaWQgIiIKKyJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIgaW5zdGVhZC5cbiIKKyJUbyBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCByZWJhc2luZywgcnVuIFwiZ2l0IHJlYmFzZSAtLWFib3J0IgorIlwiLiIKK21zZ3N0ciAiIgorIkRlcG9pcyBkZSByZXNvbHZlciBlc3RlIHByb2JsZW1hLCBleGVjdXRlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiU2UgcHJlZmVyZSBpZ25vcmFyIGVzdGUgcGF0Y2gsIGV4ZWN1dGUgXCJnaXQgcmViYXNlIC0tc2tpcFwiLlxuIgorIlBhcmEgZXh0cmFpciBvIHJhbW8gb3JpZ2luYWwgZSBpbnRlcnJvbXBlciBvIHJlYmFzZSwgZXhlY3V0ZSBcImdpdCByZWJhc2UgLS0iCisiYWJvcnRcIi4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MTU3IGdpdC1yZWJhc2Uuc2g6Mzk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbW92ZSBiYWNrIHRvICRoZWFkX25hbWUiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCB2b2x0YXIgcGFyYSAkaGVhZF9uYW1lIgorCisjOiBnaXQtcmViYXNlLnNoOjE3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICRzdGFzaF9zaGExIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBndWFyZGFyICRzdGFzaF9zaGExIgorCisjOiBnaXQtcmViYXNlLnNoOjIxMQorbXNnaWQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIgorbXNnc3RyICJSZWJhc2UgcmVjdXNhZG8gcGVsbyBob29rIHByZS1yZWJhc2UuIgorCisjOiBnaXQtcmViYXNlLnNoOjIxNgorbXNnaWQgIkl0IGxvb2tzIGxpa2UgZ2l0LWFtIGlzIGluIHByb2dyZXNzLiBDYW5ub3QgcmViYXNlLiIKK21zZ3N0ciAiUGFyZWNlIHF1ZSBvIGdpdC1hbSBlc3TDoSBlbSBjdXJzby4gTsOjbyDDqSBwb3Nzw612ZWwgZWZldHVhciByZWJhc2UuIgorCisjOiBnaXQtcmViYXNlLnNoOjM1NworbXNnaWQgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCittc2dzdHIgIlJlYmFzZSBuw6NvIGVzdMOhIGVtIGN1cnNvPyIKKworIzogZ2l0LXJlYmFzZS5zaDozNjgKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIkEgYcOnw6NvIC0tZWRpdC10b2RvIHPDsyBwb2RlIHNlciB1c2FkYSBkdXJhbnRlIHVtIHJlYmFzZSBpbnRlcmF0aXZvLiIKKworIzogZ2l0LXJlYmFzZS5zaDozNzUKK21zZ2lkICJDYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBsZXIgSEVBRCIKKworIzogZ2l0LXJlYmFzZS5zaDozNzgKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyJEZXZlIGVkaXRhciB0b2RvcyBvcyBjb25mbGl0b3MgZGEgaW50ZWdyYcOnw6NvXG4iCisiZSBtYXJjw6EtbG9zIGNvbW8gcmVzb2x2aWRvcyB1c2FuZG8gZ2l0IGFkZCIKKworIzogZ2l0LXJlYmFzZS5zaDo0MTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAkc3RhdGVfZGlyX2Jhc2UgZGlyZWN0b3J5LCBhbmRcbiIKKyJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorImNhc2UsIHBsZWFzZSB0cnlcbiIKKyJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuIgorbXNnc3RyICIiCisiUGFyZWNlIHF1ZSBqw6EgZXhpc3RlIHVtIGRpcmV0w7NyaW8gJHN0YXRlX2Rpcl9iYXNlIGVcbiIKKyLDqSBwb3Nzw612ZWwgcXVlIG91dHJvIHByb2Nlc3NvIGRlIHJlYmFzZSBqw6EgZXN0ZWphIGVtIGN1cnNvLlxuIgorIlNlIGZvciBvIGNhc28sIHRlbnRlXG4iCisiXHQkY21kX2xpdmVfcmViYXNlXG4iCisiU2UgbsOjbyBmb3IgbyBjYXNvLFxuIgorIlx0JGNtZF9jbGVhcl9zdGFsZV9yZWJhc2VcbiIKKyJlIGV4ZWN1dGUgbyBjb21hbmRvIGRlIG5vdm8uIEEgZXhlY3XDp8OjbyBmb2kgaW50ZXJyb21waWRhIG5vIGNhc28gZGVcbiIKKyJhaW5kYSB0ZXIgYWxnbyBpbXBvcnRhbnRlIG5lc3NlIHPDrXRpby4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDY5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICR1cHN0cmVhbV9uYW1lIgorbXNnc3RyICIkdXBzdHJlYW1fbmFtZSBhIG1vbnRhbnRlIGludsOhbGlkbyIKKworIzogZ2l0LXJlYmFzZS5zaDo0OTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIG1lcmdlIGJhc2VzIgorbXNnc3RyICIkb250b19uYW1lOiBow6EgbWFpcyBkbyBxdWUgdW1hIGJhc2UgZGUgaW50ZWdyYcOnw6NvIgorCisjOiBnaXQtcmViYXNlLnNoOjQ5NiBnaXQtcmViYXNlLnNoOjUwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgaXMgbm8gbWVyZ2UgYmFzZSIKK21zZ3N0ciAiJG9udG9fbmFtZTogbsOjbyBow6EgbmVuaHVtYSBiYXNlIGRlIGludGVncmHDp8OjbyIKKworIzogZ2l0LXJlYmFzZS5zaDo1MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0OiAkb250b19uYW1lIgorbXNnc3RyICJOw6NvIGFwb250YSBwYXJhIHVtIGNvbW1pdCB2w6FsaWRvOiAkb250b19uYW1lIgorCisjOiBnaXQtcmViYXNlLnNoOjUyOAorIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoOiAkYnJhbmNoX25hbWUiCittc2dzdHIgImZhdGFsOiByYW1vIGluZXhpc3RlbnRlOiAkYnJhbmNoX25hbWUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTYxCittc2dpZCAiQ2Fubm90IGF1dG9zdGFzaCIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZW1waWxoYXIgYXV0b21hdGljYW1lbnRlIChhdXRvc3Rhc2gpIgorCisjOiBnaXQtcmViYXNlLnNoOjU2NgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICRzdGFzaF9hYmJyZXYiCittc2dzdHIgIlBpbGhhIGF1dG9tw6F0aWNhIChhdXRvc3Rhc2gpIGNyaWFkYTogJHN0YXNoX2FiYnJldiIKKworIzogZ2l0LXJlYmFzZS5zaDo1NzAKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJTdWJtZXRhIG91IGVzY29uZGEtYXMuIgorCisjOiBnaXQtcmViYXNlLnNoOjU5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUuIgorbXNnc3RyICJPIHJhbW8gYXR1YWwgJGJyYW5jaF9uYW1lIGVzdMOhIGF0dWFsaXphZG8uIgorCisjOiBnaXQtcmViYXNlLnNoOjU5NAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICJPIHJhbW8gYXR1YWwgJGJyYW5jaF9uYW1lIGVzdMOhIGF0dWFsaXphZG8sIHJlYmFzZSBmb3LDp2Fkby4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NjA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIGZyb20gJG1iIHRvICRvbnRvOiIKK21zZ3N0ciAiQWx0ZXJhw6fDtWVzIGRlICRtYiBwYXJhICRvbnRvOiIKKworIzogZ2l0LXJlYmFzZS5zaDo2MTQKK21zZ2lkICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi4iCittc2dzdHIgIiIKKyJQcmltZWlybywgYSByZWN1YXIgYSBjYWJlw6dhIHBhcmEgcmVwbGljYXIgYXMgc3VhcyBhbHRlcmHDp8O1ZXMgbm8gdG9wbyBkZWxhLi4uIgorCisjOiBnaXQtcmViYXNlLnNoOjYyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkZWQgJGJyYW5jaF9uYW1lIHRvICRvbnRvX25hbWUuIgorbXNnc3RyICIkYnJhbmNoX25hbWUgYXZhbsOnYWRvIHJhcGlkYW1lbnRlIHBhcmEgJG9udG9fbmFtZS4iCisKKyM6IGdpdC1zdGFzaC5zaDo1MworbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAibsOjbyBlc3TDoSBpbXBsZW1lbnRhZG8gZ2l0IHN0YXNoIGNsZWFyIGNvbSBwYXLDom1ldHJvcyIKKworIzogZ2l0LXN0YXNoLnNoOjk0Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIk8gY29tbWl0IGluaWNpYWwgYWluZGEgbsOjbyBleGlzdGUiCisKKyM6IGdpdC1zdGFzaC5zaDoxMDkKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZ3VhcmRhciBvIGVzdGFkbyBhdHVhbCBkbyDDrW5kaWNlIgorCisjOiBnaXQtc3Rhc2guc2g6MTI0Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZ3VhcmRhciBvcyBmaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyIKKworIzogZ2l0LXN0YXNoLnNoOjE0NCBnaXQtc3Rhc2guc2g6MTU3Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGd1YXJkYXIgbyBlc3RhZG8gYXR1YWwgZGEgw6Fydm9yZSBkZSB0cmFiYWxobyIKKworIzogZ2l0LXN0YXNoLnNoOjE2MQorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgIk5lbmh1bWEgYWx0ZXJhw6fDo28gc2VsZWNpb25hZGEiCisKKyM6IGdpdC1zdGFzaC5zaDoxNjQKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgcmVtb3ZlciBvIMOtbmRpY2UgdGVtcG9yw6FyaW8gKG7Do28gcG9kZSBhY29udGVjZXIpIgorCisjOiBnaXQtc3Rhc2guc2g6MTc3Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGdyYXZhciBvIGVzdGFkbyBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBnaXQtc3Rhc2guc2g6MjA5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGF0dWFsaXphciAkcmVmX3N0YXNoIGNvbSAkd19jb21taXQiCisKKyMuIFRSQU5TTEFUT1JTOiAkb3B0aW9uIGlzIGFuIGludmFsaWQgb3B0aW9uLCBsaWtlCisjLiBgLS1ibGFoLWJsYWgnLiBUaGUgNyBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyMuIHNlY29uZCBsaW5lIGNvcnJlc3BvbmQgdG8gImVycm9yOiAiLiBTbyB5b3Ugc2hvdWxkIGxpbmUKKyMuIHVwIHRoZSBzZWNvbmQgbGluZSB3aXRoIGhvd2V2ZXIgbWFueSBjaGFyYWN0ZXJzIHRoZQorIy4gdHJhbnNsYXRpb24gb2YgImVycm9yOiAiIHRha2VzIGluIHlvdXIgbGFuZ3VhZ2UuIEUuZy4gaW4KKyMuIEVuZ2xpc2ggdGhpcyBpczoKKyMuCisjLiAkIGdpdCBzdGFzaCBzYXZlIC0tYmxhaC1ibGFoIDI+JjEgfCBoZWFkIC1uIDIKKyMuIGVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAtLWJsYWgtYmxhaAorIy4gVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnLS1ibGFoLWJsYWgnCisjOiBnaXQtc3Rhc2guc2g6MjY1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6ICRvcHRpb25cbiIKKyIgICAgICAgVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnJG9wdGlvbiciCittc2dzdHIgIiIKKyJlcnJvOiBvcMOnw6NvIGRlc2NvbmhlY2lkYSBkZSAnc3Rhc2ggc2F2ZSc6ICRvcHRpb25cbiIKKyIgICAgICBQYXJhIGZvcm5lY2VyIHVtYSBtZW5zYWdlbSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICckb3B0aW9uJyIKKworIzogZ2l0LXN0YXNoLnNoOjI3OAorbXNnaWQgIkNhbid0IHVzZSAtLXBhdGNoIGFuZCAtLWluY2x1ZGUtdW50cmFja2VkIG9yIC0tYWxsIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCB1c2FyIC0tcGF0Y2ggZSAtLWluY2x1ZGUtdW50cmFja2VkIG91IC0tYWxsIGFvIG1lc21vIHRlbXBvIgorCisjOiBnaXQtc3Rhc2guc2g6Mjg2Cittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICJOw6NvIGjDoSBhbHRlcmHDp8O1ZXMgbG9jYWlzIHBhcmEgZ3VhcmRhciIKKworIzogZ2l0LXN0YXNoLnNoOjI5MQorbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBpbmljaWFsaXphciBhIHBpbGhhIgorCisjOiBnaXQtc3Rhc2guc2g6Mjk1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBndWFyZGFyIG8gZXN0YWRvIGF0dWFsIgorCisjOiBnaXQtc3Rhc2guc2g6Mjk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJHN0YXNoX21zZyIKK21zZ3N0ciAiRGlyZXTDs3JpbyBkZSB0cmFiYWxobyBlIGVzdGFkbyBkbyDDrW5kaWNlICRzdGFzaF9tc2cgZ3VhcmRhZG9zIgorCisjOiBnaXQtc3Rhc2guc2g6MzIzCittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCByZW1vdmVyIGFzIGFsdGVyYcOnw7VlcyBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBnaXQtc3Rhc2guc2g6NDcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJG9wdCIKK21zZ3N0ciAib3DDp8OjbyBkZXNjb25oZWNpZG86ICRvcHQiCisKKyM6IGdpdC1zdGFzaC5zaDo0ODQKK21zZ2lkICJObyBzdGFzaCBmb3VuZC4iCittc2dzdHIgIk5lbmh1bWEgcGlsaGEgZW5jb250cmFkYS4iCisKKyM6IGdpdC1zdGFzaC5zaDo0OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6ICRSRVYiCittc2dzdHIgIkRlbWFzaWFkYXMgcmV2aXPDtWVzIGVzcGVjaWZpY2FkYXM6ICRSRVYiCisKKyM6IGdpdC1zdGFzaC5zaDo1MDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRyZWZlcmVuY2UgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIkcmVmZXJlbmNlIG7Do28gw6kgdW1hIHJlZmVyw6puY2lhIHbDoWxpZGEiCisKKyM6IGdpdC1zdGFzaC5zaDo1MzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIickYXJncycgbsOjbyDDqSB1bSBjb21taXQgc2VtZWxoYW50ZSBhIHBpbGhhIgorCisjOiBnaXQtc3Rhc2guc2g6NTQ1CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiJyRhcmdzJyBuw6NvIMOpIHVtYSByZWZlcsOqbmNpYSBkZSBwaWxoYSIKKworIzogZ2l0LXN0YXNoLnNoOjU1MworbXNnaWQgInVuYWJsZSB0byByZWZyZXNoIGluZGV4IgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgcmVmcmVzY2FyIG8gw61uZGljZSIKKworIzogZ2l0LXN0YXNoLnNoOjU1NworbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgYXBsaWNhciB1bWEgcGlsaGEgZHVyYW50ZSB1bWEgaW50ZWdyYcOnw6NvIgorCisjOiBnaXQtc3Rhc2guc2g6NTY1Cittc2dpZCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiQ29uZmxpdG9zIG5vIMOtbmRpY2UuIFRlbnRlIHNlbSAtLWluZGV4LiIKKworIzogZ2l0LXN0YXNoLnNoOjU2NworbXNnaWQgIkNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBndWFyZGFyIMOhcnZvcmUgZG8gw61uZGljZSIKKworIzogZ2l0LXN0YXNoLnNoOjU3NgorbXNnaWQgIkNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgcmVzdGF1cmFyIG9zIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIGRhIHBpbGhhIgorCisjOiBnaXQtc3Rhc2guc2g6NjAxCittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGRlc3ByZXBhcmFyIG9zIGZpY2hlaXJvcyBtb2RpZmljYWRvIgorCisjOiBnaXQtc3Rhc2guc2g6NjE2Cittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICJPIMOtbmRpY2UgbsOjbyBmb2kgcmVwb3N0by4iCisKKyM6IGdpdC1zdGFzaC5zaDo2MzAKK21zZ2lkICJUaGUgc3Rhc2ggaXMga2VwdCBpbiBjYXNlIHlvdSBuZWVkIGl0IGFnYWluLiIKK21zZ3N0ciAiQSBwaWxoYSDDqSBndWFyZGEgbm8gY2FzbyBkZSBwcmVjaXNhciBkZWxhIGRlIG5vdm8uIgorCisjOiBnaXQtc3Rhc2guc2g6NjM5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICJBIGRlc2NhcnRhciAke1JFVn0gKCRzKSIKKworIzogZ2l0LXN0YXNoLnNoOjY0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ9OiBOw6NvIGZvaSBwb3Nzw612ZWwgZGVzY2FydGFyIGVsZW1lbnRvIGRhIHBpbGhhIgorCisjOiBnaXQtc3Rhc2guc2g6NjQ4Cittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJOZW5odW0gbm9tZSBkZSByYW1vIGVzcGVjaWZpY2FkbyIKKworIzogZ2l0LXN0YXNoLnNoOjcyNworbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAiKFBhcmEgb3MgcmVzdGF1cmFyIGV4ZWN1dGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTgxCittc2dpZCAiUmVsYXRpdmUgcGF0aCBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKyJPcyBjYW1pbmhvcyByZWxhdGl2b3Mgc8OzIHBvZGVtIHNlciB1c2Fkb3MgYSBwYXJ0aXIgZG8gdG9wbyBkYSDDoXJ2b3JlIGRlICIKKyJ0cmFiYWxobyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgIlVSTCBkbyByZXBvc2l0w7NyaW86ICckcmVwbycgZGV2ZSBzZXIgYWJzb2x1dG8gb3UgY29tZcOnYXIgY29tIC4vfC4uLyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IgorbXNnc3RyICInJHNtX3BhdGgnIGrDoSBleGlzdGUgbm8gw61uZGljZSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IGFuZCBpcyBub3QgYSBzdWJtb2R1bGUiCittc2dzdHIgIickc21fcGF0aCcgasOhIGV4aXN0ZSBubyDDrW5kaWNlZSBuw6NvIMOpIHVtIHN1Ym3Ds2R1bG8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjE4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBwYXRoIGlzIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKKyIkc21fcGF0aFxuIgorIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIGl0LiIKK21zZ3N0ciAiIgorIk8gc2VndWludGUgY2FtaW5obyBmb2kgaWdub3JhZG8gcG9yIHVtIGZpY2hlaXJvIC5naXRpZ25vcmU6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2UgLWYgc2UgcHJldGVuZGUgbWVzbW8gYWRpY2lvbsOhLWxvLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICckc21fcGF0aCcgdG8gdGhlIGluZGV4IgorbXNnc3RyICJBIGFkaWNpb25hciByZXBvc2l0w7NyaW8gZXhpc3RlbnRlIGVtICckc21fcGF0aCcgYW8gw61uZGljZSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICInJHNtX3BhdGgnIGrDoSBleGlzdGUgZSBuw6NvIMOpIHVtYSByZXBvc2l0w7NyaW8gZ2l0IHbDoWxpZG8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQ2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBIGdpdCBkaXJlY3RvcnkgZm9yICckc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCittc2dzdHIgIiIKKyJVbSBkaXJldMOzcmlvIGdpdCBkZSAnJHNtX25hbWUnIGZvaSBlbmNvbnRyYWRvIGxvY2FsbWVudGUgY29tIG9zIHJlbW90b3M6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0OAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbVxuIgorIiAgJHJlYWxyZXBvXG4iCisidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgIgorInJlcG9cbiIKKyJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyAiCisib3B0aW9uLiIKK21zZ3N0ciAiIgorIlNlIHF1ZXIgcmV1dGlsaXphciBlc3RlIGRpcmV0w7NyaW8gZ2l0IGxvY2FsIGVtIHZleiBkZSBjbG9uYXIgZGUgbm92byBkZVxuIgorIiAgJHJlYWxyZXBvXG4iCisidXNlIGEgb3DDp8OjbyAnLS1mb3JjZScuIFNlIG8gZGlyZXTDs3JpbyBnaXQgbG9jYWwgbsOjbyDDqSBvIHJlcG8gY29ycmV0b1xuIgorIm91IG7Do28gdGVtIGEgY2VydGV6YSBvIHF1ZSBpc3RvIHNpZ25pZmljYSBlc2NvbGhhIG91dHJvIG5vbWUgY29tIGEgb3DDp8OjbyAnLS0iCisibmFtZScuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI1NAorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnJHNtX25hbWUnLiIKK21zZ3N0ciAiQSByZWF0aXZhciBvIGRpcmV0w7NyaW8gZ2l0IGxvY2FsIGRvIHN1Ym3Ds2R1bG8gJyRzbV9uYW1lJy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjY2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBleHRyYWlyIG8gc3VibcOzZHVsbyAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiRmFsaGEgYW8gYWRpY2lvbmFyIG8gc3VibcOzZHVsbyAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4MAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJGYWxoYSBhbyByZWdpc3RhciBvIHN1Ym3Ds2R1bG8gJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJBIGVudHJhciBlbSAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwaW5nIGF0ICckZGlzcGxheXBhdGgnOyBzY3JpcHQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLiIKK21zZ3N0ciAiIgorIkludGVycm9tcGlkbyBlbSAnJGRpc3BsYXlwYXRoJzsgbyBzY3JpcHQgcmV0b3Jub3UgdW0gdmFsb3IgZGlmZXJlbnRlIGRlIHplcm8uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQzMgorIywgc2gtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgYW5kIC0tYWxsIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgImVzcGVjaWZpY2Fkb3IgZGUgY2FtaW5obyBlIC0tYWxsIHPDo28gaW5jb21wYXTDrXZlaXMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVc2UgJy0tYWxsJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGVpbml0aWFsaXplIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisiVXNlICctLWFsbCcgc2UgcHJldGVuZGUgbWVzbW8gYW51bGFyIGEgaW5pY2lhbGl6YcOnw6NvIHRvZG9zIG9zIHN1Ym3Ds2R1bG9zIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ1NworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCcgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeVxuIgorIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorIkEgw6Fydm9yZSBkZSB0cmFiYWxobyBkbyBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnIGNvbnTDqW0gdW0gZGlyZXTDs3JpbyAuZ2l0XG4iCisiKHVzZSAncm0gLXJmJyBzZSBwcmV0ZW5kZSBtZXNtbyByZW1vdsOqLWxvLCBpbmNsdWluZG8gdG9kbyBvIHNldSBoaXN0w7NyaWNvKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICckZGlzcGxheXBhdGgnIGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvICIKKyJkaXNjYXJkIHRoZW0iCittc2dzdHIgIiIKKyJBIMOhcnZvcmUgZGUgdHJhYmFsaG8gZG8gc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJyBjb250w6ltIGFsdGVyYcOnw7VlcyBsb2NhaXM7ICIKKyJ1c2UgJy1mJyBwYXJhIGFzIGRlc2NhcnRhciIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJEaXJldMOzcmlvICckZGlzcGxheXBhdGgnIGxpbXBvIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ2OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBzdWJtb2R1bGUgd29yayB0cmVlICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiTsOjbyBmb2kgcG9zc8OtdmVsIHJlbW92ZXIgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGRvIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGVtcHR5IHN1Ym1vZHVsZSBkaXJlY3RvcnkgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBjcmlhciBvIGRpcmV0w7NyaW8gdmF6aW8gZG8gc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0ODEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJPIHJlZ2lzdG8gZG8gc3VibcOzZHVsbyAnJG5hbWUnICgkdXJsKSBmb2kgcmVtb3ZpZG8gZG8gY2FtaW5obyAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJOw6NvIGZvaSBwb3Nzw612ZWwgZW5jb250cmFyIGEgcmV2aXPDo28gYXR1YWwgbm8gY2FtaW5obyBkZSBzdWJtw7NkdWxvICIKKyInJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgb2J0ZXIgbm8gY2FtaW5obyBkZSBzdWJtw7NkdWxvICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjUyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZpbmQgY3VycmVudCAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0gcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggIgorIickc21fcGF0aCciCittc2dzdHIgIiIKKyJOw6NvIGZvaSBwb3Nzw612ZWwgZW5jb250cmFyIGEgcmV2aXPDo28gYXR1YWwgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IG5vICIKKyJjYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgb2J0ZXIgbm8gY2FtaW5obyBkZSBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY3NgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkZldGNoZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcsIGJ1dCBpdCBkaWQgbm90IGNvbnRhaW4gJHNoYTEuICIKKyJEaXJlY3QgZmV0Y2hpbmcgb2YgdGhhdCBjb21taXQgZmFpbGVkLiIKK21zZ3N0ciAiIgorIk9idGV2ZS1zZSBubyBjYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCcsIG1hcyBuw6NvIGNvbnRpbmhhICRzaGExLiAiCisiRmFsaGEgYW8gb2J0ZXIgYXF1ZWxlIGNvbW1pdCBkaXJldGFtZW50ZS4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZXh0cmFpciAnJHNoYTEnIG5vIGNhbWluaG8gZGUgc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2ODQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICJDYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCc6ICckc2hhMScgZXh0cmHDrWRvIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY4OAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiTsOjbyBmb2kgcG9zc8OtdmVsIGVmZXR1YXIgcmViYXNlIGRlICckc2hhMScgbm8gY2FtaW5obyBkZSBzdWJtw7NkdWxvICIKKyInJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAiQ2FtaW5obyBkZSBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnOiByZWJhc2UgY29uY2x1w61kbyBlbSAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY5NAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGludGVncmFyICckc2hhMScgbm8gY2FtaW5obyBkZSBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICJDYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCc6IGludGVncmFkbyBlbSAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiRmFsaGEgYW8gZXhlY3V0YXIgJyRjb21tYW5kICRzaGExJyBubyBjYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKK21zZ3N0ciAiQ2FtaW5obyBkZSBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjczMgorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiRmFsaGEgYW8gcGVyY29ycmVyIG8gY2FtaW5obyBkZSBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg0MAorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIkEgb3DDp8OjbyAtLWNhY2hlZCBuw6NvIHBvZGUgc2VyIHVzYWRhIGNvbSBhIG9ww6fDo28gLS1maWxlcyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgbW9kZSAkbW9kX2RzdCIKK21zZ3N0ciAibW9kbyBpbmVzcGVyYWRvICRtb2RfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkxMgorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgIEF2aXNvOiAkZGlzcGxheV9uYW1lIG7Do28gY29udMOpbSBvIGNvbW1pdCAkc2hhMV9zcmMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBuw6NvIGNvbnTDqW0gbyBjb21taXQgJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkxOAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIgIFdhcm46ICRkaXNwbGF5X25hbWUgY29udMOpbSBvcyBjb21taXRzICRzaGExX3NyYyBlICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMDY0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIkZhbGhhIGFvIHBlcmNvcnJlciByZWN1cnNpdmFtZW50ZSBvIGNhbWluaG8gZGUgc3VibcOzZHVsbyAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExMzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIkEgc2luY3Jvbml6YXIgbyBVUkwgZG8gc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU2VlIGdpdC0ke2NtZH0oMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICJDb25zdWx0ZSBnaXQtJHtjbWR9KDEpIHBhcmEgb2J0ZXIgbWFpcyBkZXRhbGhlcy4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjE0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNpbmcgKCRuZXdfY291bnQvJHRvdGFsKSIKK21zZ3N0ciAiQSByZWJhc2VhciAoJG5ld19jb3VudC8kdG90YWwpIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxNTYKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisiIHAsIHBpY2sgPSB1c2UgY29tbWl0XG4iCisiIHIsIHJld29yZCA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorIiBlLCBlZGl0ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisiIHMsIHNxdWFzaCA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiIGYsIGZpeHVwID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisiIHgsIGV4ZWMgPSBydW4gY29tbWFuZCAodGhlIHJlc3Qgb2YgdGhlIGxpbmUpIHVzaW5nIHNoZWxsXG4iCisiIGQsIGRyb3AgPSByZW1vdmUgY29tbWl0XG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkNvbWFuZG9zOlxuIgorIiBwLCBwaWNrID0gdXNhciBjb21taXRcbiIKKyIgciwgcmV3b3JkID0gdXNhciBjb21taXQsIG1hcyBlZGl0YXIgYSBtZW5zYWdlbSBkZSBjb21taXRcbiIKKyIgZSwgZWRpdCA9IHVzYXIgY29tbWl0LCBtYXMgcGFyYXIgcGFyYSBlbWVuZGFyXG4iCisiIHMsIHNxdWFzaCA9IHVzYXIgY29tbWl0LCBtYXMgZnVuZGlyIGNvbSBvIGNvbW1pdCBhbnRlcmlvclxuIgorIiBmLCBmaXh1cCA9IGNvbW8gXCJzcXVhc2hcIiwgbWFzIGRlc2NhcnRhciBhIG1lbnNhZ2VtIGRlc3RlIGNvbW1pdFxuIgorIiB4LCBleGVjID0gZXhlY3V0YXIgbyBjb21hbmRvIChvIHJlc3RvIGRhIGxpbmhhKSB1c2FuZG8gYSBzaGVsbFxuIgorIiBkLCBkcm9wID0gcmVtb3ZlciBjb21taXRcbiIKKyJcbiIKKyJFc3RhcyBsaW5oYXMgcG9kZSBzZXIgcmVvcmRlbmFkYXM7IHPDo28gZXhlY3V0YWRhcyBkZSBjaW1hIHBhcmEgYmFpeG8uXG4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjE3MQorbXNnaWQgIiIKKyJcbiIKKyJEbyBub3QgcmVtb3ZlIGFueSBsaW5lLiBVc2UgJ2Ryb3AnIGV4cGxpY2l0bHkgdG8gcmVtb3ZlIGEgY29tbWl0LlxuIgorbXNnc3RyICIiCisiXG4iCisiTsOjbyByZW1vdmVyIG5lbmh1bSBsaW5oYS4gVXNlICdkcm9wJyBleHBsaWNpdGFtZW50ZSBwYXJhIHJlbW92ZXIgdW0gY29tbWl0LlxuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxNzUKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTZSByZW1vdmVyIHVtYSBsaW5oYSBkYXF1aSBBUVVFTEUgQ09NTUlUIFNFUsOBIFBFUkRJRE8uXG4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjIxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiUG9kZSBlbWVuZGFyIG8gY29tbWl0IGFnb3JhLCBjb21cbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkFzc2ltIHF1ZSBlc3RpdmVyIHNhdGlzZmVpdG8gY29tIGFzIGFsdGVyYcOnw7VlcywgZXhlY3V0ZVxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoyMzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRzaGExOiBub3QgYSBjb21taXQgdGhhdCBjYW4gYmUgcGlja2VkIgorbXNnc3RyICIkc2hhMTogbsOjbyDDqSB1bSBjb21taXQgcXVlIHNlIHBvc3NhIGFwYW5oYXIiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjI3NQorIywgc2gtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21taXQgbmFtZTogJHNoYTEiCittc2dzdHIgIk5vbWUgZGUgY29tbWl0IGludsOhbGlkbzogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjMxNworbXNnaWQgIkNhbm5vdCB3cml0ZSBjdXJyZW50IGNvbW1pdCdzIHJlcGxhY2VtZW50IHNoYTEiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGVzY3JldmVyIG8gc2hhMSBzdWJzdGl0dXRvIGRvIGNvbW1pdCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MzY5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIkF2YW7Dp28tcsOhcGlkbyBwYXJhICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDozNzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGF2YW7Dp2FyIHJhcGlkYW1lbnRlIHBhcmEgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjM4MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG1vdmUgSEVBRCB0byAkZmlyc3RfcGFyZW50IgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBtb3ZlciBIRUFEIHBhcmEgJGZpcnN0X3BhcmVudCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6Mzg1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBzcXVhc2ggYSBtZXJnZTogJHNoYTEiCittc2dzdHIgIlJlY3VzYS1zZSBhIGVzbWFnYXIgdW1hIGludGVncmHDp8OjbzogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjM5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVkb2luZyBtZXJnZSAkc2hhMSIKK21zZ3N0ciAiRXJybyBhbyByZWZhemVyIGludGVncmHDp8OjbyAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NDA3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGljayAkc2hhMSIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFwYW5oYXIgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjQxNgorIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyR7bn06IgorbXNnc3RyICJFc3RhIMOpIGEgbWVuc2FnZW0gZGUgY29tbWl0IG7CuiR7bn06IgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo0MjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJHtufSB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJBIG1lbnNhZ2VtIGRlIGNvbW1pdCBuwroke259IHNlcsOhIGlnbm9yYWRhOiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NDMyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdC4iCittc2dpZF9wbHVyYWwgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0cy4iCittc2dzdHJbMF0gIklzdG8gw6kgYSBjb21iaW5hw6fDo28gZGUgJGNvdW50IGNvbW1pdC4iCittc2dzdHJbMV0gIklzdG8gw6kgYSBjb21iaW5hw6fDo28gZGUgJGNvdW50IGNvbW1pdHMuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo0NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB3cml0ZSAkZml4dXBfbXNnIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBlc2NyZXZlciAkZml4dXBfbXNnIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo0NDQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgMiBjb21taXRzLiIKK21zZ3N0ciAiSXN0byDDqSBhIGNvbWJpbmHDp8OjbyBkZSAyIGNvbW1pdHMuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo0ODUgZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NTI4CisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo1MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAkc2hhMS4uLiAkcmVzdCIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFwbGljYXIgJHNoYTEuLi4gJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjU1OQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhbWVuZCBjb21taXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBpY2tpbmcgJHNoYTEuLi4gJHJlc3RcbiIKKyJUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9va1xuIgorImZhaWxlZC4gSWYgdGhlIHByZS1jb21taXQgaG9vayBmYWlsZWQsIHlvdSBtYXkgbmVlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSAiCisiYmVmb3JlXG4iCisieW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIKK21zZ3N0ciAiIgorIk7Do28gZm9pIHBvc3PDrXZlbCBlbWVuZGFyIG8gY29tbWl0IGRlcG9pcyBkZSBhcGFuaGFyIGNvbSBzdWNlc3NvICRzaGExLi4uICIKKyIkcmVzdFxuIgorIkRldmUtc2UgcHJvdmF2ZWxtZW50ZSBhIHVtYSBtZW5zYWdlbSBkZSBjb21taXQgdmF6aWEgb3UgbyBwcmUtY29tbWl0IGhvb2sgIgorImZhbGhvdS5cbiIKKyJTZSBvIHByZS1jb21taXQgaG9vayBmYWxob3UsIHBvZGUgcHJlY2lzYXIgZGUgcmVzb2x2ZXIgbyBwcm9ibGVtYSBhbnRlIGRlICIKKyJwb2RlclxuIgorInJlZm9ybXVsYXIgYSBtZW5zYWdlbSBkbyBjb21taXQuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo1NzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJHNoYTFfYWJicmV2Li4uICRyZXN0IgorbXNnc3RyICJQYXJvdSBlbSAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjU4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICckc3F1YXNoX3N0eWxlJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBlZmV0dWFyICckc3F1YXNoX3N0eWxlJyBzZW0gdW0gY29tbWl0IGFudGVyaW9yIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo2MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZzogJHJlc3QiCittc2dzdHIgIkEgZXhlY3V0YXI6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo2MzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBmYWlsZWQ6ICRyZXN0IgorbXNnc3RyICJGYWxoYSBhbyBleGVjdXRhcjogJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjY0MQorbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJlIGZleiBhbHRlcmHDp8O1ZXMgYW8gw61uZGljZSBlL291IMOgIMOhcnZvcmUgZGUgdHJhYmFsaG8iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjY0MworbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJQb2RlIGNvcnJpZ2lyIG8gcHJvYmxlbWEgZSBleGVjdXRhclxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjLiBUUkFOU0xBVE9SUzogYWZ0ZXIgdGhlc2UgbGluZXMgaXMgYSBjb21tYW5kIHRvIGJlIGlzc3VlZCBieSB0aGUgdXNlcgorIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NjU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRXhlY3V0aW9uIHN1Y2NlZWRlZDogJHJlc3RcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiRXhlY3V0YWRvIGNvbSBzdWNlc3NvOiAkcmVzdFxuIgorIm1hcyBkZWl4b3UgYWx0ZXJhw6fDtWVzIG5vIMOtbmRpY2UgZS9vdSBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvXG4iCisiU3VibWV0YSBvdSBlc2NvbmRhIGFzIGFsdGVyYcOnw7VlcyBlIGV4ZWN1dGVcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NjY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1hbmQ6ICRjb21tYW5kICRzaGExICRyZXN0IgorbXNnc3RyICJDb21hbmRvIGRlc2NvbmhlY2lkbzogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjY2OAorbXNnaWQgIlBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICJDb3JyaWphLW8gdXNhbmRvICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjcwMworIywgc2gtZm9ybWF0Cittc2dpZCAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCittc2dzdHIgIiRoZWFkX25hbWUgcmViYXNlYWRvIGUgYXR1YWxpemFkbyBjb20gc3VjZXNzby4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjc1MAorbXNnaWQgIkNvdWxkIG5vdCBza2lwIHVubmVjZXNzYXJ5IHBpY2sgY29tbWFuZHMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBzYWx0YXIgY29tYW5kb3MgcGljayBkZXNuZWNlc3PDoXJpb3MiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjkwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHRoZSBTSEEtMSBpcyBtaXNzaW5nIG9yIGlzbid0IGEgY29tbWl0IGluIHRoZSBmb2xsb3dpbmcgbGluZTpcbiIKKyIgLSAkbGluZSIKK21zZ3N0ciAiIgorIkF2aXNvOiBmYWx0YSBvIFNIQS0xIG91IGEgc2VndWludGUgbGluaGEgbsOjbyB0ZW0gdW0gY29tbWl0OlxuIgorIiAtICRsaW5lIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo5NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB0aGUgY29tbWFuZCBpc24ndCByZWNvZ25pemVkIGluIHRoZSBmb2xsb3dpbmcgbGluZTpcbiIKKyIgLSAkbGluZSIKK21zZ3N0ciAiIgorIkF2aXNvOiBvIGNvbWFuZG8gbsOjbyDDqSByZWNvbmhlY2lkbyBuYSBzZWd1aW50ZSBsaW5oYTpcbiIKKyIgLSAkbGluZSIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6OTgwCittc2dpZCAiY291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZGVzdGFjYXIgSEVBRCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTAxOAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS5cbiIKKyJEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKToiCittc2dzdHIgIiIKKyJBdmlzbzogYWxndW5zIGNvbW1pdHMgcG9kZW0gdGVyIHNpZG8gZGVzY2FydGFkb3MgYWNpZGVudGFsbWVudGUuXG4iCisiQ29tbWl0cyBkZXNjYXJ0YWRvcyAobWFpcyBub3ZvIHBhcmEgbyBtYWlzIHZlbGhvKToiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjEwMjYKK21zZ2lkICIiCisiVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgXCJkcm9wXCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuXG4iCisiXG4iCisiVXNlICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyB0byBjaGFuZ2UgdGhlIGxldmVsIG9mICIKKyJ3YXJuaW5ncy5cbiIKKyJUaGUgcG9zc2libGUgYmVoYXZpb3VycyBhcmU6IGlnbm9yZSwgd2FybiwgZXJyb3IuIgorbXNnc3RyICIiCisiUGFyYSBldml0YXIgZXN0YSBtZW5zYWdlbSwgdXNlIFwiZHJvcFwiIHBhcmEgcmVtb3ZlciB1bSBjb21taXQgIgorImV4cGxpY2l0YW1lbnRlLlxuIgorIlxuIgorIlVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgcGFyYSBtdWRhciBvIG7DrXZlbCBkZSBhdmlzb3MuXG4iCisiTyBjb21wb3J0YW1lbnRvcyBwb3Nzw612ZWlzIHPDo286IGlnbm9yZSwgd2FybiwgZXJyb3IuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMDM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5yZWNvZ25pemVkIHNldHRpbmcgJGNoZWNrX2xldmVsIGZvciBvcHRpb24gcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suICIKKyJJZ25vcmluZy4iCittc2dzdHIgIiIKKyJEZWZpbmnDp8OjbyAkY2hlY2tfbGV2ZWwgZGVzY29uaGVjaWRhIGRhIG9ww6fDo28gcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suICIKKyJJZ25vcmFkby4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjEwNTQKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhpcyB3aXRoICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS0iCisiY29udGludWUnLiIKK21zZ3N0ciAiIgorIlBvZGUgY29ycsOtLWxvIGNvbSAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgZSBkZXBvaXMgZXhlY3V0YXIgJ2dpdCByZWJhc2UgLS0iCisiY29udGludWUnLiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTA1NQorbXNnaWQgIk9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLiIKK21zZ3N0ciAiT3UgcG9kZSBhYm9ydGFyIG8gcmViYXNlIGNvbSAnZ2l0IHJlYmFzZSAtLWFib3J0Jy4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjEwODMKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCByZW1vdmVyIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjEwODgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZVxuIgorInNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJUZW0gYWx0ZXJhw6fDtWVzIHByZXBhcmFkYXMgbmEgw6Fydm9yZSBkZSB0cmFiYWxoby5cbiIKKyJTZSB0ZW5jaW9uYSBlc21hZ2FyIGVzdGFzIGFsdGVyYcOnw7Vlc1xuIgorIm5vIGNvbW1pdCBhbnRlcmlvciwgZXhlY3V0ZTpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIlNlIHRlbmNpb25hIHDDtC1sYXMgbnVtIG5vdm8gY29tbWl0LCBleGVjdXRlOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkVtIGFtYm9zIG9zIGNhc29zLCBxdWFuZG8gZXN0aXZlciBwcm9udG8sIGNvbnRpbnVlIGNvbTpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMTA1Cittc2dpZCAiRXJyb3IgdHJ5aW5nIHRvIGZpbmQgdGhlIGF1dGhvciBpZGVudGl0eSB0byBhbWVuZCBjb21taXQiCittc2dzdHIgIkVycm8gYW8gdGVudGFyIGVuY29udHJhciBhIGlkZW50aWRhZGUgZG8gYXV0b3IgcGFyYSBlbWVuZGFyIG8gY29tbWl0IgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMTEwCittc2dpZCAiIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJUZW0gYWx0ZXJhw6fDtWVzIHBvciBzdWJtZXRlciBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvLiBTdWJtZXRhLWFzIHByaW1laXJvXG4iCisiZSBleGVjdXRlICdnaXQgcmViYXNlIC0tY29udGludWUnIGRlIG5vdm8uIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMTE1IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjExMTkKK21zZ2lkICJDb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIHN1Ym1ldGVyIGFzIGFsdGVyYcOnw7VlcyBwcmVwYXJhZGFzLiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTE0NworbXNnaWQgIiIKKyJcbiIKKyJZb3UgYXJlIGVkaXRpbmcgdGhlIHRvZG8gZmlsZSBvZiBhbiBvbmdvaW5nIGludGVyYWN0aXZlIHJlYmFzZS5cbiIKKyJUbyBjb250aW51ZSByZWJhc2UgYWZ0ZXIgZWRpdGluZywgcnVuOlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkVzdMOhIGEgZWRpdGFyIG8gZmljaGVpcm8gZGUgdGFyZWZhIGRlIHVtIHJlYmFzZSBpbnRlcmF0aXZvIGVtIGN1cnNvLlxuIgorIlBhcmEgY29udGludWFyIG8gcmViYXNlIGRlcG9pcyBkZSBlZGl0YXIsIGV4ZWN1dGU6XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMTU1IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjEzMTMKK21zZ2lkICJDb3VsZCBub3QgZXhlY3V0ZSBlZGl0b3IiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBleGVjdXRhciBvIGVkaXRvciIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTE2OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBleHRyYWlyICRzd2l0Y2hfdG8iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjExNzMKK21zZ2lkICJObyBIRUFEPyIKK21zZ3N0ciAiU2VtIEhFQUQ/IgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMTc0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAkc3RhdGVfZGlyIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgY3JpYXIgJHN0YXRlX2RpciB0ZW1wb3LDoXJpbyIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTE3NgorbXNnaWQgIkNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgbWFyY2FyIGNvbW8gaW50ZXJhdGl2byIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTE4NiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMTkxCittc2dpZCAiQ291bGQgbm90IGluaXQgcmV3cml0dGVuIGNvbW1pdHMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBpbmljaWFsaXphciBjb21taXRzIHJlZXNjcml0b3MiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjEyOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmQpIgorbXNnaWRfcGx1cmFsICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kcykiCittc2dzdHJbMF0gIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgc29icmUgJHNob3J0b250byAoJHRvZG9jb3VudCBjb21hbmRvKSIKK21zZ3N0clsxXSAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBzb2JyZSAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbWFuZG9zKSIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTI5NgorbXNnaWQgIiIKKyJcbiIKKyJIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiTm8gZW50YW50bywgc2UgcmVtb3ZlciB0dWRvLCBvIHJlYmFzZSBzZXLDoSBhYm9ydGFkby5cbiIKKyJcbiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTMwMworbXNnaWQgIk5vdGUgdGhhdCBlbXB0eSBjb21taXRzIGFyZSBjb21tZW50ZWQgb3V0IgorbXNnc3RyICJOb3RlIHF1ZSBjb21taXRzIHZhemlvcyBzw6NvIGNvbWVudGFkb3MiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDo4OSBnaXQtc2gtc2V0dXAuc2g6OTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVzYWdlOiAkZGFzaGxlc3MgJFVTQUdFIgorbXNnc3RyICJ1dGlsaXphw6fDo286ICRkYXNobGVzcyAkVVNBR0UiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoxOTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBjaGRpciB0byAkY2R1cCwgdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBtdWRhciBkZSBkaXJldMOzcmlvIHBhcmEgJGNkdXAsIG8gdG9wbyBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MTk5IGdpdC1zaC1zZXR1cC5zaDoyMDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiAkcHJvZ3JhbV9uYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICJmYXRhbDogJHByb2dyYW1fbmFtZSBuw6NvIHBvZGUgc2VyIHVzYWRvIHNlbSB1bWEgw6Fydm9yZSBkZSB0cmFiYWxoby4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjAKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgcmViYXNlYXI6IHRlbSBhbHRlcmHDp8O1ZXMgbsOjbyBwcmVwYXJhZGFzLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyMworbXNnaWQgIkNhbm5vdCByZXdyaXRlIGJyYW5jaGVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgcmVlc2NyZXZlciByYW1vczogdGVtIGFsdGVyYcOnw7VlcyBuw6NvIHByZXBhcmFkYXMuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI2Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBwdXhhciBjb20gcmViYXNlOiB0ZW0gYWx0ZXJhw6fDtWVzIG7Do28gcHJlcGFyYWRhcy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZWZldHVhciAkYWN0aW9uOiB0ZW0gYWx0ZXJhw6fDtWVzIG7Do28gcHJlcGFyYWRhcy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDIKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCByZWJhc2VhcjogbyDDrW5kaWNlIGNvbnTDqW0gYWx0ZXJhw6fDtWVzIG7Do28gc3VibWV0aWRhcy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDUKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIk7Do28gw6kgcG9zc8OtdmVsIHB1eGFyIGNvbSByZWJhc2U6IG8gw61uZGljZSBjb250w6ltIGFsdGVyYcOnw7VlcyBuw6NvIHN1Ym1ldGlkYXMuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIk7Do28gw6kgcG9zc8OtdmVsIGVmZXR1YXIgJGFjdGlvbjogbyDDrW5kaWNlIGNvbnTDqW0gYWx0ZXJhw6fDtWVzIG7Do28gc3VibWV0aWRhcy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTIKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIkFsw6ltIGRpc3NvLCBvIMOtbmRpY2UgY29udMOpbSBhbHRlcmHDp8O1ZXMgbsOjbyBzdWJtZXRpZGFzLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3MgorbXNnaWQgIllvdSBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIiIKKyJQcmVjaXNhIGRlIGV4ZWN1dGFyIGVzdGUgY29tYW5kbyBhIHBhcnRpciBkbyB0b3BvIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6Mzc3Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGRldGVybWluYXIgbyBjYW1pbmhvIGFic29sdXRvIGRvIGRpcmV0w7NyaW8gZ2l0IgorCisjLiBUUkFOU0xBVE9SUzogeW91IGNhbiBhZGp1c3QgdGhpcyB0byBhbGlnbiAiZ2l0IGFkZCAtaSIgc3RhdHVzIG1lbnUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjM4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiUxMnMgJTEycyAlcyIKK21zZ3N0ciAiJTEycyAlMTJzICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIzOQorbXNnaWQgInN0YWdlZCIKK21zZ3N0ciAicHJlcGFyYWRvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIzOQorbXNnaWQgInVuc3RhZ2VkIgorbXNnc3RyICJuw6NvIHByZXBhcmFkbyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyODggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMTMKK21zZ2lkICJiaW5hcnkiCittc2dzdHIgImJpbsOhcmlvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI5NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjM1MQorbXNnaWQgIm5vdGhpbmciCittc2dzdHIgIm5hZGEiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzMzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzQ4Cittc2dpZCAidW5jaGFuZ2VkIgorbXNnc3RyICJuw6NvIGFsdGVyYWRvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY0NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJhZGRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgImFkZGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIGNhbWluaG8gYWRpY2lvbmFyXG4iCittc2dzdHJbMV0gIiVkIGNhbWluaG9zIGFkaWNpb25hZG9zXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjQ3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVwZGF0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ1cGRhdGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIGNhbWluaG8gYXR1YWxpemFkb1xuIgorbXNnc3RyWzFdICIlZCBjYW1pbmhvcyBhdHVhbGl6YWRvc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY1MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJyZXZlcnRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInJldmVydGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIGNhbWluaG8gcmV2ZXJ0aWRvXG4iCittc2dzdHJbMV0gIiVkIGNhbWluaG9zIHJldmVydGlkb3NcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidG91Y2hlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInRvdWNoZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiJWQgY2FtaW5obyBhZmV0YWRvXG4iCittc2dzdHJbMV0gIiVkIGNhbWluaG9zIGFmZXRhZG9zXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjYyCittc2dpZCAiVXBkYXRlIgorbXNnc3RyICJBdHVhbGl6YXIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njc0Cittc2dpZCAiUmV2ZXJ0IgorbXNnc3RyICJSZXZlcnRlciIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2OTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAibm90ZTogJXMgaXMgdW50cmFja2VkIG5vdy5cbiIKK21zZ3N0ciAibm90YTogJXMgw6kgYWdvcmEgbsOjbyBjb250cm9sYWRvLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjcwOAorbXNnaWQgIkFkZCB1bnRyYWNrZWQiCittc2dzdHIgIkFkaWNpb25hciBuw6NvIGNvbnRyb2xhZG9zIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjcxNAorbXNnaWQgIk5vIHVudHJhY2tlZCBmaWxlcy5cbiIKK21zZ3N0ciAiTmVuaHVtIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG8uXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTAzMAorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy4iCittc2dzdHIgIiIKKyJTZSBvIHBhdGNoIHNlIGFwbGljYXIgY29ycmV0YW1lbnRlLCBvIGV4Y2VydG8gZWRpdGFkbyBzZXLDoSBtYXJjYWRvXG4iCisiY29tbyBwcmVwYXJhZG8gaW1lZGlhdGFtZW50ZS4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTAzMworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3Rhc2hpbmcuIgorbXNnc3RyICIiCisiU2UgbyBwYXRjaCBzZSBhcGxpY2FyIGNvcnJldGFtZW50ZSwgbyBleGNlcnRvIGVkaXRhZG8gc2Vyw6EgbWFyY2Fkb1xuIgorImNvbW8gZXNjb25kaWRvIGltZWRpYXRhbWVudGUuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwMzYKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHVuc3RhZ2luZy4iCittc2dzdHIgIiIKKyJTZSBvIHBhdGNoIHNlIGFwbGljYXIgY29ycmV0YW1lbnRlLCBvIGV4Y2VydG8gZWRpdGFkbyBzZXLDoSBtYXJjYWRvXG4iCisiY29tbyBuw6NvIHByZXBhcmFkbyBpbWVkaWF0YW1lbnRlLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDM5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA0OAorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgYXBwbHlpbmcuIgorbXNnc3RyICIiCisiU2UgbyBwYXRjaCBzZSBhcGxpY2FyIGNvcnJldGFtZW50ZSwgbyBleGNlcnRvIGVkaXRhZG8gc2Vyw6EgbWFyY2Fkb1xuIgorInBhcmEgc2VyIGFwbGljYWRvIGltZWRpYXRhbWVudGUuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNDIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDQ1Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBkaXNjYXJkaW5nLiIKK21zZ3N0ciAiIgorIlNlIG8gcGF0Y2ggc2UgYXBsaWNhciBjb3JyZXRhbWVudGUsIG8gZXhjZXJ0byBlZGl0YWRvIHNlcsOhIG1hcmNhZG9cbiIKKyJwYXJhIHNlciBkZXNjYXJ0YWRvIGltZWRpYXRhbWVudGUuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICIiCisibsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyIG8gZmljaGVpcm8gZGUgZWRpw6fDo28gZG8gZXhjZXJ0byBwYXJhIGVzY3JpdGE6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTkKK21zZ2lkICJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgYSBxdWljayBndWlkZS5cbiIKK21zZ3N0ciAiTW9kbyBkZSBlZGnDp8OjbyBtYW51YWwgZGUgZXhjZXJ0byAtLSB2ZXIgZ3VpYSByw6FwaWRvIGFiYWl4byBubyBmaW5hbC5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJXMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisiLS0tXG4iCisiUGFyYSByZW1vdmVyIGxpbmhhcyAnJXMnLCB0b3JuZS1hcyBsaW5oYXMgJyAnIChjb250ZXh0bykuXG4iCisiUGFyYSByZW1vdmVyIGxpbmhhcyAnJXMnLCBlbGltaW5lLWFzLlxuIgorIkxpbmhhcyBjb21lw6dhZGFzIGNvbSAlcyBzZXLDo28gcmVtb3ZpZGFzLlxuIgorCisjLiBUUkFOU0xBVE9SUzogJ2l0JyByZWZlcnMgdG8gdGhlIHBhdGNoIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgbWVzc2FnZXMuCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzMKK21zZ2lkICIiCisiSWYgaXQgZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgeW91IHdpbGwgYmUgZ2l2ZW4gYW4gb3Bwb3J0dW5pdHkgdG9cbiIKKyJlZGl0IGFnYWluLiAgSWYgYWxsIGxpbmVzIG9mIHRoZSBodW5rIGFyZSByZW1vdmVkLCB0aGVuIHRoZSBlZGl0IGlzXG4iCisiYWJvcnRlZCBhbmQgdGhlIGh1bmsgaXMgbGVmdCB1bmNoYW5nZWQuXG4iCittc2dzdHIgIiIKKyJTZSBuw6NvIHNlIGFwbGljYXIgY29ycmV0YW1lbnRlLCBzZXItbGhlLcOhIGRhZGEgb3BvcnR1bmlkYWRlIHBhcmEgZWRpdGFyXG4iCisiZGUgbm92by4gIFNlIHRvZGFzIGFzIGxpbmhhcyBkbyBleGNlcnRvIGZvcmVtIHJlbW92aWRhcywgYSBlZGnDp8OjbyDDqVxuIgorImFib3J0YWRhIGUgbyBleGNldG8gw6kgZGVpeGFkbyBpbmFsdGVyYWRvLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwODcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHJlYWRpbmc6ICVzIgorbXNnc3RyICIiCisibsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyIG8gZmljaGVpcm8gZGUgZWRpw6fDo28gZG8gZXhjZXJ0byBwYXJhIGxlaXR1cmE6ICVzIgorCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIy4gQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKyMuIChzYXlpbmcgIm4iIGZvciAibm8iIGRpc2NhcmRzISkgaWYgdGhlIHRyYW5zbGF0aW9uCisjLiBvZiB0aGUgd29yZCAibm8iIGRvZXMgbm90IHN0YXJ0IHdpdGggbi4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTE3OAorbXNnaWQgIiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/ICIKK21zZ3N0ciAiIgorIk8gZXhjZXJ0byBxdWUgZWRpdG91IG7Do28gYXBsaWNhLlxuIgorIkVkaXRlIGRlIG5vdm8gKHJlc3BvbmRlciBcIm7Do29cIiBkZXNjYXJ0YSEpIFt5L25dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTE4NworbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBwcmVwYXJhciBlc3RlIGV4Y2VydG9cbiIKKyJuIC0gbsOjbyBwcmVwYXJhciBlc3RlIGV4Y2VydG9cbiIKKyJxIC0gc2FpcjsgbsOjbyBwcmVwYXJhciBlc3RlIGV4Y2VydG8gbmVtIG9zIHJlc3RhbnRlc1xuIgorImEgLSBwcmVwYXJhciBlc3RlIGV4Y2VydG8gZSB0b2RvcyBvcyBleGNlcnRvcyBzZWd1aW50ZXMgbm8gZmljaGVpcm9cbiIKKyJkIC0gbsOjbyBwcmVwYXJhciBlc3RlIGV4Y2VydG8gbmVtIG9zIGV4Y2VydG9zIHNlZ3VpbnRlcyBubyBmaWNoZWlybyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTkzCittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGVzY29uZGVyIGVzdGUgZXhjZXJ0b1xuIgorIm4gLSBuw6NvIGVzY29uZGVyIGVzdGUgZXhjZXJ0b1xuIgorInEgLSBzYWlyOyBuw6NvIGVzY29uZGVyIGVzdGUgZXhjZXJ0byBuZW0gb3MgcmVzdGFudGVzXG4iCisiYSAtIGVzY29uZGVyIGVzdGUgZXhjZXJ0byBlIHRvZG9zIG9zIHNlZ3VpbnRlcyBubyBmaWNoZWlyb1xuIgorImQgLSBuw6NvIGVzY29uZGVyIGVzdGUgZXhjZXJ0byBuZW0gb3MgZXhjZXJ0b3Mgc2VndWludGVzIG5vIGZpY2hlaXJvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExOTkKK21zZ2lkICIiCisieSAtIHVuc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSB1bnN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGRlc3ByZXBhcmFyIGVzdGUgZXhjZXJ0b1xuIgorIm4gLSBuw6NvIGRlc3ByZXBhcmFyIGVzdGUgZXhjZXJ0b1xuIgorInEgLSBzYWlyOyBuw6NvIGRlc3ByZXBhcmFyIGVzdGUgZXhjZXJ0byBuZW0gb3V0cm9zIHJlc3RhbnRlc1xuIgorImEgLSBkZXNwcmVwYXJhciBlc3RlIGV4Y2VydG8gZSB0b2RvcyBvcyBleGNlcnRvcyBzZWd1aW50ZXMgbm8gZmljaGVpcm9cbiIKKyJkIC0gbsOjbyBkZXNwcmVwYXJhciBlc3RlIGV4Y2VydG8gbmVtIG9zIGV4Y2VydG9zIHNlZ3VpbnRlcyBubyBmaWNoZWlybyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjA1Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGFwbGljYXIgZXN0ZSBleGNlcnRvIGFvIMOtbmRpY2VcbiIKKyJuIC0gbsOjbyBhcGxpY2FyIGVzdGUgZXhjZXJ0byBhbyDDrW5kaWNlXG4iCisicSAtIHNhaXI7IG7Do28gYXBsaWNhciBlc3RlIGV4Y2VydG8gbmVtIG9zIHJlc3RhbnRlc1xuIgorImEgLSBhcGxpY2FyIGVzdGUgZXhjZXJ0byBlIHRvZG9zIG9zIGV4Y2VydG9zIHNlZ3VpbnRlcyBubyBmaWNoZWlyb1xuIgorImQgLSBuw6NvIGFwbGljYXIgZXN0ZSBleGNlcnRvIG5lbSBvcyBleGNlcnRvcyBzZWd1aW50ZXMgbm8gZmljaGVpcm8iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIxMQorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGRlc2NhcnRhciBlc3RlIGV4Y2VydG8gZGEgw6Fydm9yZSBkZSB0cmFiYWxob1xuIgorIm4gLSBuw6NvIGRlc2NhcnRhciBlc3RlIGV4Y2VydG8gZGEgw6Fydm9yZSBkZSB0cmFiYWxob1xuIgorInEgLSBzYWlyOyBuw6NvIGRlc2NhcnRhciBlc3RlIGV4Y2VydG8gbmVtIG9zIHJlc3RhbnRlc1xuIgorImEgLSBkZXNjYXJ0YXIgZXN0ZSBleGNlcnRvIGUgdG9kb3Mgb3MgZXhjZXJ0b3Mgc2VndWludGVzIG5vIGZpY2hlaXJvXG4iCisiZCAtIG7Do28gZGVzY2FydGFyIGVzdGUgZXhjZXJ0byBuZW0gb3MgZXhjZXJ0b3Mgc2VndWludGVzIG5vIGZpY2hlaXJvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyMTcKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGRlc2NhcnRhciBlc3RlIGV4Y2VydG8gZG8gw61uZGljZSBlIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG9cbiIKKyJuIC0gbsOjbyBkZXNjYXJ0YXIgZXN0ZSBleGNlcnRvIGRvIMOtbmRpY2UgbmVtIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG9cbiIKKyJxIC0gc2FpcjsgbsOjbyBkZXNjYXJ0YXIgZXN0ZSBleGNlcnRvIG5lbSBuZW5odW0gZG9zIHJlc3RhbnRlc1xuIgorImEgLSBkZXNjYXJ0YXIgZXN0ZSBleGNlcnRvIGUgdG9kb3Mgb3MgZXhjZXJ0b3Mgc2VndWludGVzIG5vIGZpY2hlaXJvXG4iCisiZCAtIG7Do28gZGVzY2FydGFyIGVzdGUgZXhjZXJ0byBuZW0gb3MgZXhjZXJ0b3Mgc2VndWludGVzIG5vIGZpY2hlaXJvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyMjMKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBhcGxpY2FyIGVzdGUgZXhjZXJ0byBhbyDDrW5kaWNlIGUgw6Agw6Fydm9yZSBkZSB0cmFiYWxob1xuIgorIm4gLSBuw6NvIGFwbGljYXIgZXN0ZSBleGNlcnRvIGFvIMOtbmRpY2UgZSDDoCDDoXJ2b3JlIGRlIHRyYWJhbGhvXG4iCisicSAtIHNhaXI7IG7Do28gYXBsaWNhciBlc3RlIGV4Y2VydG8gb3UgcmVzdGFudGVzXG4iCisiYSAtIGFwbGljYXIgZXN0ZSBleGNlcnRvIGUgdG9kb3Mgb3MgZXhjZXJ0b3Mgc2VndWludGVzIG5vIGZpY2hlaXJvXG4iCisiZCAtIG7Do28gYXBsaWNhciBlc3RlIGV4Y2VydG8gbmVtIG9zIGV4Y2VydG9zIHNlZ3VpbnRlcyBubyBmaWNoZWlybyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjMyCittc2dpZCAiIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiZyAtIHNlbGVjaW9uYXIgdW0gZXhjZXJ0byBwYXJhIGlyXG4iCisiLyAtIHByb2N1cmFyIHBvciB1bSBleGNlcnRvIGNvcnJlc3BvbmRlbmRvIMOgIHJlZ2V4IGRhZGFcbiIKKyJqIC0gZGVpeGFyIGVzdGUgZXhjZXJ0byBpbmRlY2lkaWRvLCB2ZXIgZXhjZXJ0byBzZWd1aW50ZSBpbmRlY2lkaWRvXG4iCisiSiAtIGRlaXhhciBlc3RlIGV4Y2VydG8gaW5kZWNpZGlkbywgdmVyIGV4Y2VydG8gc2VndWludGVcbiIKKyJrIC0gZGVpeGFyIGVzdGUgZXhjZXJ0byBpbmRlY2lkaWRvLCB2ZXIgZXhjZXJ0byBhbnRlcmlvciBpbmRlY2lkaWRvXG4iCisiSyAtIGRlaXhhciBlc3RlIGV4Y2VydG8gaW5kZWNpZGlkbywgdmVyIGV4Y2VydG8gYW50ZXJpb3JcbiIKKyJzIC0gZGl2aWRpciBvIGV4Y2VydG8gYXR1YWwgZW0gZXhjZXJ0b3MgbWFpcyBwZXF1ZW5vc1xuIgorImUgLSBlZGl0YXIgbWFudWFsbWVudGUgbyBleGNlcnRvIGF0dWFsXG4iCisiPyAtIGltcHJpbWlyIGFqdWRhXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2MworbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIgorbXNnc3RyICJPcyBleGNlcnRvcyBzZWxlY2lvbmFkb3MgbsOjbyBhcGxpY2FtIGFvIMOtbmRpY2UhXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2NAorbXNnaWQgIkFwcGx5IHRoZW0gdG8gdGhlIHdvcmt0cmVlIGFueXdheT8gIgorbXNnc3RyICJBcGxpY8OhLWxvcyDDoCDDoXJ2b3JlIGRlIHRyYWJhbGhvIG1lc21vIGFzc2ltPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2NworbXNnaWQgIk5vdGhpbmcgd2FzIGFwcGxpZWQuXG4iCittc2dzdHIgIk7Do28gZm9pIGFwbGljYWRvIG5hZGEuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXNcbiIKK21zZ3N0ciAiaWdub3JhZG8gbsOjbyBpbnRlZ3JhZG86ICVzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI4NworbXNnaWQgIk9ubHkgYmluYXJ5IGZpbGVzIGNoYW5nZWQuXG4iCittc2dzdHIgIkFwZW5hcyBmaWNoZWlyb3MgYmluw6FyaW9zIGFsdGVyYWRvcy5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjg5Cittc2dpZCAiTm8gY2hhbmdlcy5cbiIKK21zZ3N0ciAiU2VtIGFsdGVyYcOnw7Vlcy5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjk3Cittc2dpZCAiUGF0Y2ggdXBkYXRlIgorbXNnc3RyICJBdHVhbGl6YXIgcGF0Y2giCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkLC8lcyw/XT8gIgorbXNnc3RyICJQcmVwYXJhciBhbHRlcmHDp8OjbyBkZSBtb2RvIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM1MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkLC8lcyw/XT8gIgorbXNnc3RyICJQcmVwYXJhciBlbGltaW5hw6fDo28gW3ksbixxLGEsZCwvJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzUxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkLC8lcyw/XT8gIgorbXNnc3RyICJQcmVwYXJhciBlc3RlIGV4Y2VydG8gW3ksbixxLGEsZCwvJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzU0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIkVzY29uZGVyIGFsdGVyYcOnw6NvIGRlIG1vZG8gW3ksbixxLGEsZCwvJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzU1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIGRlbGV0aW9uIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIkVzY29uZGVyIGVsaW1pbmHDp8OjbyBbeSxuLHEsYSxkLC8lcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggdGhpcyBodW5rIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIkVzY29uZGVyIGVzdGUgZXhjZXJ0byBbeSxuLHEsYSxkLC8lcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNTkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkLC8lcyw/XT8gIgorbXNnc3RyICJOw6NvIHByZXBhcmFyIGFsdGVyYcOnw6NvIGRlIG1vZG8gW3ksbixxLGEsZCwvJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzYwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCwvJXMsP10/ICIKK21zZ3N0ciAiTsOjbyBwcmVwYXJhciBlbGltaW5hw6fDo28gW3ksbixxLGEsZCwvJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzYxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIk7Do28gcHJlcGFyYXIgZXN0ZSBleGNlcnRvIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBbeSxuLHEsYSxkLC8lcyw/XT8gIgorbXNnc3RyICJBcGxpY2FyIGFsdGVyYcOnw6NvIGRlIG1vZG8gYW8gw61uZGljZSBbeSxuLHEsYSxkLC8lcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggW3ksbixxLGEsZCwvJXMsP10/ICIKK21zZ3N0ciAiQXBsaWNhciBlbGltaW5hw6fDo28gYW8gw61uZGljZSBbeSxuLHEsYSxkLC8lcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIkFwbGljYXIgZXN0ZSBleGNlcnRvIGFvIMOtbmRpY2UgW3ksbixxLGEsZCwvJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzY5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkLC8lcyw/XT8gIgorbXNnc3RyICJEZXNjYXJ0YXIgYWx0ZXJhw6fDo28gZGUgbW9kbyBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCwvJXMsP10/ICIKK21zZ3N0ciAiRGVzY2FydGFyIGVsaW1pbmHDp8OjbyBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIkRlc2NhcnRhciBlc3RlIGV4Y2VydG8gZGEgw6Fydm9yZSBkZSB0cmFiYWxobyBbeSxuLHEsYSxkLC8lcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkLC8lcyw/XT8gIgorbXNnc3RyICIiCisiRGVzY2FydGFyIGFsdGVyYcOnw6NvIGRlIG1vZG8gZG8gw61uZGljZSBlIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG8gW3ksbixxLGEsZCwvIgorIiVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIiIKKyJEZXNjYXJ0YXIgZWxpbWluYcOnw6NvIGRvIMOtbmRpY2UgZSBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3NgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkLC8lcyw/XT8gIgorbXNnc3RyICIiCisiRGVzY2FydGFyIGVzdGUgZXhjZXJ0byBkbyDDrW5kaWNlIGUgZGEgw6Fydm9yZSBkZSB0cmFiYWxobyBbeSxuLHEsYSxkLC8lcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNzkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIiIKKyJBcGxpY2FyIGFsdGVyYcOnw6NvIGRlIG1vZG8gYW8gw61uZGljZSBlIMOgIMOhcnZvcmUgZGUgdHJhYmFsaG8gW3ksbixxLGEsZCwvIgorIiVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM4MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCwvJXMsP10/ICIKK21zZ3N0ciAiIgorIkFwbGljYXIgZWxpbWluYcOnw6NvIGFvIMOtbmRpY2UgZSDDoCDDoXJ2b3JlIGRlIHRyYWJhbGhvIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM4MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIiIKKyJBcGxpY2FyIGVzdGUgZXhjZXJ0byBhbyDDrW5kaWNlIGUgw6Agw6Fydm9yZSBkZSB0cmFiYWxobyBbeSxuLHEsYSxkLC8lcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0ODQKK21zZ2lkICJnbyB0byB3aGljaCBodW5rICg8cmV0PiB0byBzZWUgbW9yZSk/ICIKK21zZ3N0ciAiaXIgcGFyYSBxdWUgZXhjZXJ0byAoPHJldD4gcGFyYSB2ZXIgbWFpcyk/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDg2Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuaz8gIgorbXNnc3RyICJpciBwYXJhIHF1ZSBleGNlcnRvPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ5NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJ1xuIgorbXNnc3RyICJOw7ptZXJvIGludsOhbGlkbzogJyVzJ1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1MDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU29ycnksIG9ubHkgJWQgaHVuayBhdmFpbGFibGUuXG4iCittc2dpZF9wbHVyYWwgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS5cbiIKK21zZ3N0clswXSAiTGFtZW50bywgYXBlbmFzICVkIGV4Y2VydG8gZGlzcG9uw612ZWwuXG4iCittc2dzdHJbMV0gIkxhbWVudG8sIGFwZW5hcyAlZCBleGNlcnRvcyBkaXNwb27DrXZlaXMuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTUyNgorbXNnaWQgInNlYXJjaCBmb3IgcmVnZXg/ICIKK21zZ3N0ciAicHJvY3VyYXIgcG9yIHJlZ2V4PyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTUzOQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAlczogJXNcbiIKK21zZ3N0ciAiUmVnZXhwIGRlIHBlc3F1aXNhIG1hbGZvcm1hZGEgJXM6ICVzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU0OQorbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVyblxuIgorbXNnc3RyICJOZW5odW0gZXhjZXJ0byBjb3JyZXNwb25kZSBhbyBwYWRyw6NvIGZvcm5lY2lkb1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTgzCittc2dpZCAiTm8gcHJldmlvdXMgaHVua1xuIgorbXNnc3RyICJOZW5odW0gZXhjZXJ0byBhbnRlcmlvclxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTg5Cittc2dpZCAiTm8gbmV4dCBodW5rXG4iCittc2dzdHIgIk5lbmh1bSBleGNlcnRvIHNlZ3VpbnRlXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU5NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmsuXG4iCittc2dpZF9wbHVyYWwgIlNwbGl0IGludG8gJWQgaHVua3MuXG4iCittc2dzdHJbMF0gIkRpdmlkaXIgZW0gJWQgZXhjZXJ0by5cbiIKK21zZ3N0clsxXSAiRGl2aWRpciBlbSAlZCBleGNlcnRvcy5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjQ5Cittc2dpZCAiUmV2aWV3IGRpZmYiCittc2dzdHIgIlJldmVyIGRpZmYiCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2UgZG8gbm90IHRyYW5zbGF0ZSB0aGUgY29tbWFuZCBuYW1lcworIy4gJ3N0YXR1cycsICd1cGRhdGUnLCAncmV2ZXJ0JywgZXRjLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjY4Cittc2dpZCAiIgorInN0YXR1cyAgICAgICAgLSBzaG93IHBhdGhzIHdpdGggY2hhbmdlc1xuIgorInVwZGF0ZSAgICAgICAgLSBhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXNcbiIKKyJyZXZlcnQgICAgICAgIC0gcmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb25cbiIKKyJwYXRjaCAgICAgICAgIC0gcGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5XG4iCisiZGlmZiAgICAgICAgICAtIHZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4XG4iCisiYWRkIHVudHJhY2tlZCAtIGFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgIgorImNoYW5nZXNcbiIKK21zZ3N0ciAiIgorInN0YXR1cyAgICAgICAgLSBtb3N0cmFyIGNhbWluaG9zIGNvbSBhbHRlcmHDp8O1ZXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWRpY2lvbmFyIG8gZXN0YWRvIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG8gYW8gY29uanVudG8gZGUgIgorImFsdGVyYcOnw7VlcyBwcmVwYXJhZGFzXG4iCisicmV2ZXJ0ICAgICAgICAtIHJldmVydGVyIGNvbmp1bnRvIGRlIGFsdGVyYcOnw7VlcyBwcmVwYXJhZGFzIGRlIHZvbHRhIMOgIHZlcnPDo28gIgorImRlIEhFQURcbiIKKyJwYXRjaCAgICAgICAgIC0gZXNjb2xoZXIgZXhjZXJ0b3MgZSBhdHVhbGl6YXIgc2VsZXRpdmFtZW50ZVxuIgorImRpZmYgICAgICAgICAgLSB2ZXIgZGlmZiBlbnRyZSBIRUFEIGUgw61uZGljZVxuIgorImFkZCB1bnRyYWNrZWQgLSBhZGljaW9uYXIgY29udGXDumRvcyBkZSBmaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyBhbyBjb25qdW50byAiCisiZGUgYWx0ZXJhw6fDtWVzIHByZXBhcmFkYXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjg1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5MAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjkzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcwMAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzA0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcxMAorbXNnaWQgIm1pc3NpbmcgLS0iCittc2dzdHIgImZhbHRhIC0tIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3MDYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5rbm93biAtLXBhdGNoIG1vZGU6ICVzIgorbXNnc3RyICJNb2RlIGRlIC0tcGF0Y2ggZGVzY29uaGVjaWRvOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzEyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzLCBleHBlY3RpbmcgLS0iCittc2dzdHIgImFyZ3VtZW50byBpbnbDoWxpZG8gJXMsIGVzcGVyYXZhLXNlIC0tIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEyMQorbXNnaWQgImxvY2FsIHpvbmUgZGlmZmVycyBmcm9tIEdNVCBieSBhIG5vbi1taW51dGUgaW50ZXJ2YWxcbiIKK21zZ3N0ciAiYSB6b25hIGxvY2FsIGRpZmVyZSBkZSBHTVQgcG9yIHVtIGludGVydmFsbyBuw6NvIGFycmVuZGFkbyBhbyBtaW51dG9cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMjggZ2l0LXNlbmQtZW1haWwucGVybDoxMzQKK21zZ2lkICJsb2NhbCB0aW1lIG9mZnNldCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMjQgaG91cnNcbiIKK21zZ3N0ciAiYSBkaWZlcmVuw6dhIGRlIHRlbXBvIGxvY2FsIMOpIG1haW9yIG91IGlndWFsIGEgMjQgaG9yYXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoyMDIgZ2l0LXNlbmQtZW1haWwucGVybDoyMDgKK21zZ2lkICJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciCittc2dzdHIgIm8gZWRpdG9yIHNhaXUgY29tIGVycm9zLCBhYm9ydGFyIHR1ZG8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjgyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvbnRhaW5zIGFuIGludGVybWVkaWF0ZSB2ZXJzaW9uIG9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iCittc2dzdHIgIiclcycgY29udMOpbSB1bWEgdmVyc8OjbyBpbnRlcm3DqWRpYSBkbyBlLW1haWwgcXVlIGVzdGV2ZSBhIGNvbXBvci5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoyODcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJyVzLmZpbmFsJyBjb250YWlucyB0aGUgY29tcG9zZWQgZW1haWwuXG4iCittc2dzdHIgIiclcy5maW5hbCcgY29udMOpbSBvIGUtbWFpbCBjb21wb3N0by5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMDUKK21zZ2lkICItLWR1bXAtYWxpYXNlcyBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBvcHRpb25zXG4iCittc2dzdHIgIi0tZHVtcC1hbGlhc2VzIGluY29tcGF0w612ZWwgY29tIG91dHJhcyBvcMOnw7Vlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjM2OCBnaXQtc2VuZC1lbWFpbC5wZXJsOjYyMworbXNnaWQgIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGV4ZWN1dGFyIGdpdCBmb3JtYXQtcGF0Y2ggZm9yYSBkZSB1bSByZXBvc2l0w7NyaW9cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0MzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLXN1cHByZXNzLWNjIGZpZWxkOiAnJXMnXG4iCittc2dzdHIgIkNhbXBvIGRlIC0tc3VwcHJlc3MtY2MgZGVzY29uaGVjaWRvOiAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDY2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1jb25maXJtIHNldHRpbmc6ICclcydcbiIKK21zZ3N0ciAiRGVmaW5pZGnDp8OjbyAtLWNvbmZpcm0gZGVzY29uaGVjaWRhOiAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDk4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGFsaWFzIHdpdGggcXVvdGVzIGlzIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgImF2aXNvOiBzZW5kbWFpbCBhbGlhcyBjb20gYXNwYXMgbsOjbyDDqSBzdXBvcnRhZG86ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTAwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGA6aW5jbHVkZTpgIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgImF2aXNvOiBgOmluY2x1ZGU6YCBuw6NvIHN1cG9ydGFkbzogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MDIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYC9maWxlYCBvciBgfHBpcGVgIHJlZGlyZWN0aW9uIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgImF2aXNvOiBgL2ZpbGVgIG91IHJlZGlyZcOnw6NvIGB8cGlwZWAgbsOjbyBzdXBvcnRhZG86ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTA3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGxpbmUgaXMgbm90IHJlY29nbml6ZWQ6ICVzXG4iCittc2dzdHIgImF2aXNvOiBsaW5oYSBzZW5kbWFpbCBuw6NvIMOpIHJlY29uaGVjaWRhOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU4OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSAnJXMnIGV4aXN0cyBidXQgaXQgY291bGQgYWxzbyBiZSB0aGUgcmFuZ2Ugb2YgY29tbWl0c1xuIgorInRvIHByb2R1Y2UgcGF0Y2hlcyBmb3IuICBQbGVhc2UgZGlzYW1iaWd1YXRlIGJ5Li4uXG4iCisiXG4iCisiICAgICogU2F5aW5nIFwiLi8lc1wiIGlmIHlvdSBtZWFuIGEgZmlsZTsgb3JcbiIKKyIgICAgKiBHaXZpbmcgLS1mb3JtYXQtcGF0Y2ggb3B0aW9uIGlmIHlvdSBtZWFuIGEgcmFuZ2UuXG4iCittc2dzdHIgIiIKKyJPIGZpY2hlaXJvICclcycgZXhpc3RlIG1hcyB0YW1iw6ltIHBvZGUgc2VyIHVtIGludGVydmFsbyBkZSBjb21taXRzXG4iCisicGFyYSBvcyBxdWFpcyBwcm9kdXppciBwYXRjaGVzLiAgUG9yIGZhdm9yIGRlc2FtYmlndWUuLi5cbiIKKyJcbiIKKyIgICAgKiBEaXplbmRvIFwiLi8lc1wiIHNlIHByZXRlbmRlIHVtIGZpY2hlaXJvOyBvdVxuIgorIiAgICAqIFBhc3NhbmRvIGEgb3DDp8OjbyAtLWZvcm1hdC1wYXRjaCBzZSBwcmV0ZW5kZSB1bSBpbnRlcnZhbG8gZGUgY29tbWl0cy5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2MTAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW5kaXIgJXM6ICVzIgorbXNnc3RyICJGYWxoYSBhbyBhYnJpciBkaXJldMOzcmlvICVzOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2MzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorImZhdGFsOiAlczogJXNcbiIKKyJ3YXJuaW5nOiBubyBwYXRjaGVzIHdlcmUgc2VudFxuIgorbXNnc3RyICIiCisiZmF0YWw6ICVzOiAlc1xuIgorImF2aXNvOiBuZW5odW0gcGF0Y2ggZm9pIGVudmlhZG9cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NDUKK21zZ2lkICIiCisiXG4iCisiTm8gcGF0Y2ggZmlsZXMgc3BlY2lmaWVkIVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiTmVuaHVtIGZpY2hlaXJvIHBhdGNoIGVzcGVjaWZpY2FkbyFcbiIKKyJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTm8gc3ViamVjdCBsaW5lIGluICVzPyIKK21zZ3N0ciAiTmVuaHVtIGxpbmhhIGRlIGFzc3VudG8gZW0gJXM/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY2OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAlczogJXMiCittc2dzdHIgIkZhbGhhIGFvIGFicmlyICVzIHBhcmEgZXNjcml0YTogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6Njc4Cittc2dpZCAiIgorIkxpbmVzIGJlZ2lubmluZyBpbiBcIkdJVDpcIiB3aWxsIGJlIHJlbW92ZWQuXG4iCisiQ29uc2lkZXIgaW5jbHVkaW5nIGFuIG92ZXJhbGwgZGlmZnN0YXQgb3IgdGFibGUgb2YgY29udGVudHNcbiIKKyJmb3IgdGhlIHBhdGNoIHlvdSBhcmUgd3JpdGluZy5cbiIKKyJcbiIKKyJDbGVhciB0aGUgYm9keSBjb250ZW50IGlmIHlvdSBkb24ndCB3aXNoIHRvIHNlbmQgYSBzdW1tYXJ5LlxuIgorbXNnc3RyICIiCisiTGluaGFzIGNvbWXDp2FkYXMgY29tIFwiR0lUOlwiIHNlcsOjbyByZW1vdmlkb3MuXG4iCisiQ29uc2lkZXJlIGluY2x1aXIgdW0gZGlmZnN0YXQgZ2VyYWwgb3UgdGFiZWxhIGRlIGNvbnRlw7pkb3NcbiIKKyJkbyBwYXRjaCBxdWUgZXN0w6EgYSBlc2NyZXZlci5cbiIKKyJcbiIKKyJBcGFndWUgbyBjb250ZcO6ZG8gZG8gY29ycG8gc2UgbsOjbyBkZXNlamEgZW52aWFyIHVtIHN1bcOhcmlvLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcwMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlcy5maW5hbDogJXMiCittc2dzdHIgIkZhbGhhIGFvIGFicmlyICVzLmZpbmFsOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MDQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXM6ICVzIgorbXNnc3RyICJGYWxoYSBhbyBhYnJpciAlczogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzM5Cittc2dpZCAiVG8vQ2MvQmNjIGZpZWxkcyBhcmUgbm90IGludGVycHJldGVkIHlldCwgdGhleSBoYXZlIGJlZW4gaWdub3JlZFxuIgorbXNnc3RyICJPcyBjYW1wb3MgVG8vQ2MvQmNjIG7Do28gc8OjbyBpbnRlcnByZXRhZG9zIGFpbmRhLCBmb3JhbSBpZ25vcmFkb3NcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3NDgKK21zZ2lkICJTdW1tYXJ5IGVtYWlsIGlzIGVtcHR5LCBza2lwcGluZyBpdFxuIgorbXNnc3RyICJPIGUtbWFpbCBkZSBzdW3DoXJpbyBlc3TDoSB2YXppbywgc2FsdMOhLWxvIMOgIGZyZW50ZVxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgW3kvTl0gYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc4MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdXNlIDwlcz4gW3kvTl0/ICIKK21zZ3N0ciAiVGVtIGEgY2VydGV6YSBxdWUgcXVlciB1c2FyIDwlcz4gW3kvTl0/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4MDkKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgOGJpdCwgYnV0IGRvIG5vdCBkZWNsYXJlIGEgQ29udGVudC1UcmFuc2Zlci0iCisiRW5jb2RpbmcuXG4iCittc2dzdHIgIiIKKyJPcyBzZWd1aW50ZXMgZmljaGVpcm9zIHPDo28gOGJpdCwgbWFzIG7Do28gZGVjbGFyYW0gdW0gQ29udGVudC1UcmFuc2Zlci0iCisiRW5jb2RpbmcuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODE0Cittc2dpZCAiV2hpY2ggOGJpdCBlbmNvZGluZyBzaG91bGQgSSBkZWNsYXJlIFtVVEYtOF0/ICIKK21zZ3N0ciAiUXVlIGNvZGlmaWNhw6fDo28gOGJpdCBzZSBkZXZlIGRlY2xhcmFyIFtVVEYtOF0/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4MjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIlJlZnVzaW5nIHRvIHNlbmQgYmVjYXVzZSB0aGUgcGF0Y2hcbiIKKyJcdCVzXG4iCisiaGFzIHRoZSB0ZW1wbGF0ZSBzdWJqZWN0ICcqKiogU1VCSkVDVCBIRVJFICoqKicuIFBhc3MgLS1mb3JjZSBpZiB5b3UgcmVhbGx5ICIKKyJ3YW50IHRvIHNlbmQuXG4iCittc2dzdHIgIiIKKyJSZWN1c2FyIGVudmlvIHBvcnF1ZSBvIHBhdGNoXG4iCisiXHQlc1xuIgorInRlbSBvIGFzc3VudG8gbW9kZWxvICcqKiogU1VCSkVDVCBIRVJFICoqKicuIFBhc3NlIC0tZm9yY2Ugc2UgcHJldGVuZGUgbWVzbW8gIgorImVudmlhci5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4NDEKK21zZ2lkICJUbyB3aG9tIHNob3VsZCB0aGUgZW1haWxzIGJlIHNlbnQgKGlmIGFueW9uZSk/IgorbXNnc3RyICJQYXJhIHF1ZW0gZGV2ZW0gc2VyIGVudmlhZG9zIG9zIGUtbWFpbHMgKHNlIGFsZ3XDqW0pPyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4NTkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmF0YWw6IGFsaWFzICclcycgZXhwYW5kcyB0byBpdHNlbGZcbiIKK21zZ3N0ciAiZmF0YWw6IGFsaWFzICclcycgZXhwYW5kZSBwYXJhIHNpIHByw7NwcmlvXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODcxCittc2dpZCAiTWVzc2FnZS1JRCB0byBiZSB1c2VkIGFzIEluLVJlcGx5LVRvIGZvciB0aGUgZmlyc3QgZW1haWwgKGlmIGFueSk/ICIKK21zZ3N0ciAiIgorIk1lc3NhZ2UtSUQgcGFyYSBzZXIgdXNhZG8gY29tbyBJbi1SZXBseS1UbyBwYXJhIG8gcHJpbWVpcm8gZS1tYWlsIChzZSAiCisiYWxndW0pPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTIxIGdpdC1zZW5kLWVtYWlsLnBlcmw6OTI5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmFibGUgdG8gZXh0cmFjdCBhIHZhbGlkIGFkZHJlc3MgZnJvbTogJXNcbiIKK21zZ3N0ciAiZXJybzogbsOjbyDDqSBwb3Nzw612ZWwgZXh0cmFpciB1bSBlbmRlcmXDp28gdsOhbGlkbyBkZTogJXNcbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtxXSBbZF0gW2VdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkzMworbXNnaWQgIldoYXQgdG8gZG8gd2l0aCB0aGlzIGFkZHJlc3M/IChbcV11aXR8W2Rdcm9wfFtlXWRpdCk6ICIKK21zZ3N0ciAiTyBxdWUgZmF6ZXIgY29tIGVzdGUgZW5kZXJlw6dvPyAoW3FddWl0fFtkXXJvcHxbZV1kaXQpOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTIzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJDQSBwYXRoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiTyBjYW1pbmhvIGRlIENBICclcycgbsOjbyBleGlzdGUiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTMwOQorbXNnaWQgIiIKKyIgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbFxuIgorIiAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0XG4iCisiICAgIHNlbmQtZW1haWwgcHJvbXB0cyBiZWZvcmUgc2VuZGluZyB3aGVuZXZlciB0aGlzIG9jY3Vycy5cbiIKKyIgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybVxuIgorIiAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4iCisiXG4iCisiICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLFxuIgorIiAgICBydW4gJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCittc2dzdHIgIiIKKyIgICAgQSBsaXN0YSBkZSBDYyBhY2ltYSBmb2kgZXhwYW5kaWRhIGNvbSBlbmRlcmXDp29zXG4iCisiICAgIGFkaWNpb25haXMgZW5jb250cmFkb3MgbmEgbWVuc2FnZW0gZGUgY29tbWl0IGRvIHBhdGNoLlxuIgorIiAgICBQb3Igb21pc3PDo28gc2VuZC1lbWFpbCBwZXJndW50YSBhbnRlcyBkZSBlbnZpYXIgcXVhbmRvXG4iCisiICAgIGlzdG8gb2NvcnJlLiBFc3RlIGNvbXBvcnRhbWVudG8gw6kgY29udHJvbGFkbyBwZWxhIGRlZmluacOnw6NvXG4iCisiICAgIGRlIGNvbmZpZ3VyYcOnw6NvIHNlbmRlbWFpbC5jb25maXJtLlxuIgorIlxuIgorIiAgICBQYXJhIGluZm9ybWHDp8OjbyBhZGljaW9uYWwsIGV4ZWN1dGUgJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFBhcmEgcmV0ZXIgbyBjb21wb3J0YW1lbnRvIGF0dWFsLCBtYXMgc3VwcmltaXIgZXN0YSBtZW5zYWdlbSxcbiIKKyIgICAgZXhlY3V0ZSAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy5cbiIKKyJcbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSBbbl0gW3FdIFthXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzI0Cittc2dpZCAiU2VuZCB0aGlzIGVtYWlsPyAoW3ldZXN8W25db3xbcV11aXR8W2FdbGwpOiAiCittc2dzdHIgIkVudmlhciBlc3RlIGUtbWFpbD8gKFt5XWVzfFtuXW98W3FddWl0fFthXWxsKTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzMjcKK21zZ2lkICJTZW5kIHRoaXMgZW1haWwgcmVwbHkgcmVxdWlyZWQiCittc2dzdHIgIsOJIG5lY2Vzc8OhcmlhIHJlc3Bvc3RhIHNlIGRlc2VqYSBlbnZpYXIgZXN0ZSBlLW1haWwiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM1MworbXNnaWQgIlRoZSByZXF1aXJlZCBTTVRQIHNlcnZlciBpcyBub3QgcHJvcGVybHkgZGVmaW5lZC4iCittc2dzdHIgIk8gc2Vydmlkb3IgU01UUCBuZWNlc3PDoXJpbyBuw6NvIGVzdMOhIGRlZmluaWRvIGNvcnJldGFtZW50ZS4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM5NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBTVEFSVFRMUyEgJXMiCittc2dzdHIgIk8gc2Vydmlkb3IgbsOjbyBzdXBvcnRhIFNUQVJUVExTISAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDAzCittc2dpZCAiVW5hYmxlIHRvIGluaXRpYWxpemUgU01UUCBwcm9wZXJseS4gQ2hlY2sgY29uZmlnIGFuZCB1c2UgLS1zbXRwLWRlYnVnLiIKK21zZ3N0ciAiIgorIk7Do28gw6kgcG9zc8OtdmVsIGluaWNpYWxpemFyIFNNVFAgZGV2aWRhbWVudGUuIFZlcmlmaXF1ZSBhIGNvbmZpZ3VyYcOnw6NvIGUgdXNlICIKKyItLXNtdHAtZGVidWcuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0MjEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHNlbmQgJXNcbiIKK21zZ3N0ciAiRmFsaGEgYW8gZW52aWFyICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQyNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEcnktU2VudCAlc1xuIgorbXNnc3RyICJTaW11bGFkby1FbnZpYWRvICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQyNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZW50ICVzXG4iCittc2dzdHIgIkVudmlhZG8gJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDI2Cittc2dpZCAiRHJ5LU9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiU2ltdWxhZG8tT0suIE8gcmVnaXN0byBkaXo6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQyNgorbXNnaWQgIk9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiT0suIE8gcmVnaXN0byBkaXo6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQzOAorbXNnaWQgIlJlc3VsdDogIgorbXNnc3RyICJSZXN1bHRhZG86ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDQxCittc2dpZCAiUmVzdWx0OiBPS1xuIgorbXNnc3RyICJSZXN1bHRhZG86IE9LXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ1NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIGZpbGUgJXMiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGFicmlyIG8gZmljaGVpcm8gJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUwMSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MjEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIEFkaWNpb25hciBjYzogJXMgZGEgbGluaGEgJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MDcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyB0bzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIEFkaWNpb25hciBwYXJhOiAlcyBkYSBsaW5oYSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU1NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobm9uLW1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG5vbi1tYm94KSBBZGljaW9uYXIgY2M6ICVzIGRhIGxpbmhhICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihib2R5KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihib2R5KSBBZGljaW9uYXIgY2M6ICVzIGRhIGxpbmhhICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjc2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQ291bGQgbm90IGV4ZWN1dGUgJyVzJyIKK21zZ3N0ciAiKCVzKSBOw6NvIGZvaSBwb3Nzw612ZWwgZXhlY3V0YXIgJyVzJyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjgzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQWRkaW5nICVzOiAlcyBmcm9tOiAnJXMnXG4iCittc2dzdHIgIiglcykgQWRpY2lvbmFyICVzOiAlcyBkZTogJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2ODcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBmYWlsZWQgdG8gY2xvc2UgcGlwZSB0byAnJXMnIgorbXNnc3RyICIoJXMpIGZhbGhhIGFvIGZlY2hhciBwaXBlIHBhcmEgJyVzJyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzE0Cittc2dpZCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBlbnZpYXIgbWVuc2FnZW0gY29tbyA3Yml0IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3MjIKK21zZ2lkICJpbnZhbGlkIHRyYW5zZmVyIGVuY29kaW5nIgorbXNnc3RyICJjb2RpZmljYcOnw6NvIGRlIHRyYW5zZmVyw6puY2lhIGludsOhbGlkYSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzQxIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTc5MiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4MDIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGFicmlyICVzOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3NDQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGNvbnRhaW5zIGEgbGluZSBsb25nZXIgdGhhbiA5OTggY2hhcmFjdGVycyIKK21zZ3N0ciAiJXM6IG8gcGF0Y2ggY29udMOpbSB1bWEgbGluaGEgbWFpcyBsb25nYSBxdWUgOTk4IGNhcmF0ZXJlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzYwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nICVzIHdpdGggYmFja3VwIHN1ZmZpeCAnJXMnLlxuIgorbXNnc3RyICJTYWx0YXIgJXMgY29tIHN1Zml4byBkZSBiYWNrdXAgJyVzJy5cbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwICJbeXxOXSIgYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3NjQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHNlbmQgJXM/IFt5fE5dOiAiCittc2dzdHIgIkRlc2VqYSBtZXNtbyBlbnZpYXIgJXM/IFt5fE5dOiAiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlcmUgaXMgbm90aGluZyB0byBleGNsdWRlIGZyb20gYnkgOihleGNsdWRlKSBwYXR0ZXJucy5cbiIKKyN+ICJQZXJoYXBzIHlvdSBmb3Jnb3QgdG8gYWRkIGVpdGhlciAnOi8nIG9yICcuJyA/IgorI34gbXNnc3RyICIiCisjfiAiTsOjbyBow6EgbmFkYSBwYXJhIGV4Y2x1aXIgZGUgYWNvcmRvIGNvbSBvIHBhZHLDo28gOihleGNsdWlyKS5cbiIKKyN+ICJUYWx2ZXogc2UgdGVuaGEgZXNxdWVjaWRvIGRlIGFjcmVzY2VudGFyICc6Lycgb3UgJy4nID8iCisKKyN+IG1zZ2lkICJ1bnJlY29nbml6ZWQgZm9ybWF0OiAlJSglcykiCisjfiBtc2dzdHIgImZvcm1hdG8gbsOjbyByZWNvbmhlY2lkbzogJSUoJXMpIgorCisjfiBtc2dpZCAiOnN0cmlwPSByZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXIgYXJndW1lbnQiCisjfiBtc2dzdHIgIjpzdHJpcD0gcmVxdWVyIHVtIGludGVpcm8gcG9zaXRpdm8gY29tbyBhcmd1bWVudG8iCisKKyN+IG1zZ2lkICJyZWYgJyVzJyBkb2VzIG5vdCBoYXZlICVsZCBjb21wb25lbnRzIHRvIDpzdHJpcCIKKyN+IG1zZ3N0ciAiYSByZWZlcsOqbmNpYSAnJXMnIG7Do28gdGVtICVsZCBjb21wb25lbnRlcyBjb21vIHNlIGluZGljYSBlbSA6c3RyaXAiCisKKyN+IG1zZ2lkICJ1bmtub3duICUuKnMgZm9ybWF0ICVzIgorI34gbXNnc3RyICJmb3JtYXRvIGRlICUuKnMgZGVzY29uaGVjaWRvICVzIgorCisjfiBtc2dpZCAiWyVzOiBnb25lXSIKKyN+IG1zZ3N0ciAiWyVzOiBkZXNhcGFyZWNpZG9dIgorCisjfiBtc2dpZCAiWyVzXSIKKyN+IG1zZ3N0ciAiWyVzXSIKKworI34gbXNnaWQgIlslczogYmVoaW5kICVkXSIKKyN+IG1zZ3N0ciAiWyVzOiBhdHLDoXMgJWRdIgorCisjfiBtc2dpZCAiWyVzOiBhaGVhZCAlZF0iCisjfiBtc2dzdHIgIlslczogw6AgZnJlbnRlICVkXSIKKworI34gbXNnaWQgIlslczogYWhlYWQgJWQsIGJlaGluZCAlZF0iCisjfiBtc2dzdHIgIlslczogw6AgZnJlbnRlICVkLCBhdHLDoXMgJWRdIgorCisjfiBtc2dpZCAiICoqKiogaW52YWxpZCByZWYgKioqKiIKKyN+IG1zZ3N0ciAiICoqKiogcmVmZXLDqm5jaWFzIGludsOhbGlkYSAqKioqIgorCisjfiBtc2dpZCAiaW5zYW5lbHkgbG9uZyBvYmplY3QgZGlyZWN0b3J5ICUuKnMiCisjfiBtc2dzdHIgImRpcmV0w7NyaW8gZGUgb2JqZXRvcyBkZW1hc2lhZG8gbG9uZ28gJS4qcyIKKworI34gbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSA8bXNnPiBIRUFEIDxjb21taXQ+IgorI34gbXNnc3RyICJnaXQgbWVyZ2UgWzxvcMOnw7Vlcz5dIDxtc2c+IEhFQUQgPGNvbW1pdD4iCisKKyN+IG1zZ2lkICInJXMnIGlzIG5vdCBhIGNvbW1pdCIKKyN+IG1zZ3N0ciAiJyVzJyBuw6NvIMOpIHVtIGNvbW1pdCIKKworI34gbXNnaWQgImNhbm5vdCBvcGVuIGZpbGUgJyVzJyIKKyN+IG1zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYWJyaXIgbyBmaWNoZWlybyAnJXMnIgorCisjfiBtc2dpZCAiY291bGQgbm90IGNsb3NlIGZpbGUgJXMiCisjfiBtc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGZlY2hhciBvIGZpY2hlaXJvICVzIgorCisjfiBtc2dpZCAidGFnIG5hbWUgdG9vIGxvbmc6ICUuKnMuLi4iCisjfiBtc2dzdHIgIm8gbm9tZSBkYSB0YWcgw6kgZGVtYXNpYWRvIGxvbmdvOiAlLipzLi4uIgorCisjfiBtc2dpZCAidGFnIGhlYWRlciB0b28gYmlnLiIKKyN+IG1zZ3N0ciAiY2FiZcOnYWxobyBkYSB0YWcgZGVtYXNpYWRvIGxvbmdvLiIKKworI34gbXNnaWQgIiIKKyN+ICJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorI34gIm1hcmtlZCBmb3IgZGlzY2FyZGluZyIKKyN+IG1zZ3N0ciAiIgorI34gIlNlIG8gcGF0Y2ggc2UgYXBsaWNhciBjb3JyZXRhbWVudGUsIG8gZXhjZXJ0byBlZGl0YWRvIHNlcsOhIG1hcmNhZG9cbiIKKyN+ICJwYXJhIHNlciBkZXNjYXJ0YWRvIGltZWRpYXRhbWVudGUuIgorCisjfiBtc2dpZCAiVXNlIGFuIGV4cGVyaW1lbnRhbCBibGFuay1saW5lLWJhc2VkIGhldXJpc3RpYyB0byBpbXByb3ZlIGRpZmZzIgorI34gbXNnc3RyICIiCisjfiAiVXNhciB1bWEgaGV1csOtc3RpY2EgZXhwZXJpbWVudGFsIGJhc2VhZGEgZW0gbGluaGFzIGJyYW5jYXMgcGFyYSBtZWxob3JhciAiCisjfiAiZGlmZnMiCisKKyN+IG1zZ2lkICJDbGV2ZXIuLi4gYW1lbmRpbmcgdGhlIGxhc3Qgb25lIHdpdGggZGlydHkgaW5kZXguIgorI34gbXNnc3RyICJJbnRlbGlnZW50ZS4uLiBhIGVtZW5kYXIgbyDDumx0aW1vIGNvbW1pdCBjb20gbyDDrW5kaWNlIHN1am8uIgorCisjfiBtc2dpZCAiIgorI34gInRoZSBmb2xsb3dpbmcgc3VibW9kdWxlIChvciBvbmUgb2YgaXRzIG5lc3RlZCBzdWJtb2R1bGVzKVxuIgorI34gInVzZXMgYSAuZ2l0IGRpcmVjdG9yeToiCisjfiBtc2dpZF9wbHVyYWwgIiIKKyN+ICJ0aGUgZm9sbG93aW5nIHN1Ym1vZHVsZXMgKG9yIG9uZSBvZiB0aGVpciBuZXN0ZWQgc3VibW9kdWxlcylcbiIKKyN+ICJ1c2UgYSAuZ2l0IGRpcmVjdG9yeToiCisjfiBtc2dzdHJbMF0gIiIKKyN+ICJvIHN1Ym3Ds2R1bG8gc2VndWludGUgKG91IHVtIGRvcyBzZXVzIHN1Ym3Ds2R1bG9zIGFuaW5oYWRvcylcbiIKKyN+ICJ1c2EgdW0gZGlyZXTDs3JpbyAuZ2l0OiIKKyN+IG1zZ3N0clsxXSAiIgorI34gIm9zIHN1Ym3Ds2R1bG9zIHNlZ3VpbnRlcyAob3UgdW0gZG9zIHNldXMgc3VibcOzZHVsb3MpXG4iCisjfiAidXNhbSB1bSBkaXJldMOzcmlvIC5naXQ6IgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyAiCisjfiAiaGlzdG9yeSkiCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICIodXNlICdybSAtcmYnIHNlIHByZXRlbmRlIG1lc21vIHJlbW92w6otbG8sIGluY2x1aW5kbyB0b2RvIG8gc2V1IGhpc3TDs3JpY28pIgorCisjfiBtc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICVzIgorI34gbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZXNjcmV2ZXIgZW0gJXMiCisKKyN+IG1zZ2lkICJFcnJvciB3cmFwcGluZyB1cCAlcy4iCisjfiBtc2dzdHIgIkVycm8gYW8gcmVtYXRhciAlcy4iCisKKyN+IG1zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlcnJ5LXBpY2suIgorI34gbXNnc3RyICJBcyBzdWFzIGFsdGVyYcOnw7VlcyBsb2NhaXMgc2Vyw6NvIHN1YnN0aXR1w61kYXMgcG9yIGNoZXJyeS1waWNrLiIKKworI34gbXNnaWQgIkNhbm5vdCByZXZlcnQgZHVyaW5nIGFub3RoZXIgcmV2ZXJ0LiIKKyN+IG1zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgcmV2ZXJ0ZXIgZHVyYW50ZSBvdXRyYSByZXZlcnPDo28uIgorCisjfiBtc2dpZCAiQ2Fubm90IGNoZXJyeS1waWNrIGR1cmluZyBhbm90aGVyIGNoZXJyeS1waWNrLiIKKyN+IG1zZ3N0ciAiIgorI34gIk7Do28gw6kgcG9zc8OtdmVsIGVmZXR1YXIgY2hlcnJ5LXBpY2sgZHVyYW50ZSBvdXRybyBjaGVycnktcGljay4gZHVyYW50ZSB1bSAiCisjfiAiY2hlcnJ5LXBpY2suIgorCisjfiBtc2dpZCAiQ291bGQgbm90IHBhcnNlIGxpbmUgJWQuIgorI34gbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgYSBsaW5oYSAlZC4iCisKKyN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiAlcyIKKyN+IG1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyICVzIgorCisjfiBtc2dpZCAiQ291bGQgbm90IHJlYWQgJXMuIgorI34gbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgbGVyICVzLiIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBmb3JtYXQgJXMuIgorI34gbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZm9ybWF0YXIgJXMuIgorCisjfiBtc2dpZCAiJXM6ICVzIgorI34gbXNnc3RyICIlczogJXMiCisKKyN+IG1zZ2lkICJjYW5ub3Qgb3BlbiAlczogJXMiCisjfiBtc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGFicmlyICVzOiAlcyIKKworI34gbXNnaWQgIllvdSBuZWVkIHRvIHNldCB5b3VyIGNvbW1pdHRlciBpbmZvIGZpcnN0IgorI34gbXNnc3RyICJQcmltZWlybyB0ZW0gZGUgZGVmaW5pciBhIHN1YSBpbmZvcm1hw6fDo28gZGUgY29tbWl0dGVyIgorCisjfiBtc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6IGludmFsaWQgdW5pdCIKKyN+IG1zZ3N0ciAiIgorI34gInZhbG9yIG51bcOpcmljbyAnJXMnIGRhIGNvbmZpZ3VyYcOnw6NvICclcycgaW5jb3JyZXRvOiB1bmlkYWRlIGludsOhbGlkYSIKKworI34gbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGJsb2IgJXM6IGludmFsaWQgdW5pdCIKKyN+IG1zZ3N0ciAiIgorI34gInZhbG9yIG51bcOpcmljbyAnJXMnIGRhIGNvbmZpZ3VyYcOnw6NvICclcycgaW5jb3JyZXRvIG5vIGJsb2IgJXM6IHVuaWRhZGUgIgorI34gImludsOhbGlkYSIKKworI34gbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6IGludmFsaWQgdW5pdCIKKyN+IG1zZ3N0ciAiIgorI34gInZhbG9yIG51bcOpcmljbyAnJXMnIGRhIGNvbmZpZ3VyYcOnw6NvICclcycgaW5jb3JyZXRvIG5vIGZpY2hlaXJvICVzOiAiCisjfiAidW5pZGFkZSBpbnbDoWxpZGEiCisKKyN+IG1zZ2lkICIiCisjfiAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3RhbmRhcmQgaW5wdXQ6IGludmFsaWQgdW5pdCIKKyN+IG1zZ3N0ciAiIgorI34gInZhbG9yIG51bcOpcmljbyAnJXMnIGRhIGNvbmZpZ3VyYcOnw6NvICclcycgaW5jb3JyZXRvIG5hIGVudHJhZGEgcGFkcsOjbzogIgorI34gInVuaWRhZGUgaW52w6FsaWRhIgorCisjfiBtc2dpZCAiIgorI34gImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN1Ym1vZHVsZS1ibG9iICVzOiBpbnZhbGlkIHVuaXQiCisjfiBtc2dzdHIgIiIKKyN+ICJ2YWxvciBudW3DqXJpY28gJyVzJyBkYSBjb25maWd1cmHDp8OjbyAnJXMnIGluY29ycmV0byBubyBzdWJtw7NkdWxvLWJsb2IgJXM6ICIKKyN+ICJ1bmlkYWRlIGludsOhbGlkYSIKKworI34gbXNnaWQgIiIKKyN+ICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBjb21tYW5kIGxpbmUgJXM6IGludmFsaWQgdW5pdCIKKyN+IG1zZ3N0ciAiIgorI34gInZhbG9yIG51bcOpcmljbyAnJXMnIGRhIGNvbmZpZ3VyYcOnw6NvICclcycgaW5jb3JyZXRvIG5hIGxpbmhhIGRlIGNvbWFuZG9zICIKKyN+ICIlczogdW5pZGFkZSBpbnbDoWxpZGEiCisKKyN+IG1zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogaW52YWxpZCB1bml0IgorI34gbXNnc3RyICIiCisjfiAidmFsb3IgbnVtw6lyaWNvICclcycgZGEgY29uZmlndXJhw6fDo28gJyVzJyBpbmNvcnJldG8gZW0gJXM6IHVuaWRhZGUgaW52w6FsaWRhIgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgMm5kIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRXN0YSDDqSBhIDLCqiBtZW5zYWdlbSBkZSBjb21taXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgM3JkIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRXN0YSDDqSBhIDPCqiBtZW5zYWdlbSBkZSBjb21taXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgNHRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRXN0YSDDqSBhIDTCqiBtZW5zYWdlbSBkZSBjb21taXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgNXRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRXN0YSDDqSBhIDXCqiBtZW5zYWdlbSBkZSBjb21taXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgNnRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRXN0YSDDqSBhIDbCqiBtZW5zYWdlbSBkZSBjb21taXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgN3RoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRXN0YSDDqSBhIDfCqiBtZW5zYWdlbSBkZSBjb21taXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgOHRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRXN0YSDDqSBhIDjCqiBtZW5zYWdlbSBkZSBjb21taXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgOXRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRXN0YSDDqSBhIDnCqiBtZW5zYWdlbSBkZSBjb21taXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgMTB0aCBjb21taXQgbWVzc2FnZToiCisjfiBtc2dzdHIgIkVzdGEgw6kgYSAxMMKqIG1lbnNhZ2VtIGRlIGNvbW1pdDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAke259dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJFc3RhIMOpIGEgJHtufcKqIG1lbnNhZ2VtIGRlIGNvbW1pdDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAke259c3QgY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJFc3TDoSDDqSBhICR7bn3CqiBtZW5zYWdlbSBkZSBjb21taXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgJHtufW5kIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRXN0YSDDqSBhICR7bn3CqiBtZW5zYWdlbSBkZSBjb21taXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgJHtufXJkIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRXN0YSDDqSBhICR7bn3CqiBtZW5zYWdlbSBkZSBjb21taXQ6IgorCisjfiBtc2dpZCAiVGhlIDFzdCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJBIDHCqiBtZW5zYWdlbSBkZSBjb21taXQgc2Vyw6EgaWdub3JhZGE6IgorCisjfiBtc2dpZCAiVGhlIDJuZCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJBIDLCqiBtZW5zYWdlbSBkZSBjb21taXQgc2Vyw6EgaWdub3JhZGE6IgorCisjfiBtc2dpZCAiVGhlIDNyZCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJBIDPCqiBtZW5zYWdlbSBkZSBjb21taXQgc2Vyw6EgaWdub3JhZGE6IgorCisjfiBtc2dpZCAiVGhlIDR0aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJBIDTCqiBtZW5zYWdlbSBkZSBjb21taXQgc2Vyw6EgaWdub3JhZGE6IgorCisjfiBtc2dpZCAiVGhlIDV0aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJBIDXCqiBtZW5zYWdlbSBkZSBjb21taXQgc2Vyw6EgaWdub3JhZGE6IgorCisjfiBtc2dpZCAiVGhlIDZ0aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJBIDbCqiBtZW5zYWdlbSBkZSBjb21taXQgc2Vyw6EgaWdub3JhZGE6IgorCisjfiBtc2dpZCAiVGhlIDd0aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJBIDfCqiBtZW5zYWdlbSBkZSBjb21taXQgc2Vyw6EgaWdub3JhZGE6IgorCisjfiBtc2dpZCAiVGhlIDh0aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJBIDjCqiBtZW5zYWdlbSBkZSBjb21taXQgc2Vyw6EgaWdub3JhZGE6IgorCisjfiBtc2dpZCAiVGhlIDl0aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJBIDnCqiBtZW5zYWdlbSBkZSBjb21taXQgc2Vyw6EgaWdub3JhZGE6IgorCisjfiBtc2dpZCAiVGhlIDEwdGggY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQSAxMMKqIG1lbnNhZ2VtIGRlIGNvbW1pdCBzZXLDoSBpZ25vcmFkYToiCisKKyN+IG1zZ2lkICJUaGUgJHtufXRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkEgJHtufcKqIG1lbnNhZ2VtIGRlIGNvbW1pdCBzZXLDoSBpZ25vcmFkYToiCisKKyN+IG1zZ2lkICJUaGUgJHtufXN0IGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkEgJHtufcKqIG1lbnNhZ2VtIGRlIGNvbW1pdCBzZXLDoSBpZ25vcmFkYToiCisKKyN+IG1zZ2lkICJUaGUgJHtufW5kIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkEgJHtufcKqIG1lbnNhZ2VtIGRlIGNvbW1pdCBzZXLDoSBpZ25vcmFkYToiCisKKyN+IG1zZ2lkICJUaGUgJHtufXJkIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkEgJHtufcKqIG1lbnNhZ2VtIGRlIGNvbW1pdCBzZXLDoSBpZ25vcmFkYToiCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgcnVuIGdwZy4iCisjfiBtc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBleGVjdXRhciBncGcuIgorCisjfiBtc2dpZCAiZ3BnIGRpZCBub3QgYWNjZXB0IHRoZSBkYXRhIgorI34gbXNnc3RyICJncGcgbsOjbyBhY2VpdG91IG9zIGRhZG9zIgorCisjfiBtc2dpZCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgaW4gdGhlIHRyZWUiCisjfiBtc2dzdHIgInRpcG8gZGUgb2JqZXRvIHNlbSBzdXBvcnRlIGVuY29udHJhZG8gbmEgw6Fydm9yZSIKKworI34gbXNnaWQgIkZhdGFsIG1lcmdlIGZhaWx1cmUsIHNob3VsZG4ndCBoYXBwZW4uIgorI34gbXNnc3RyICJGYWxoYSBkZSBpbnRlZ3Jhw6fDo28gZmF0YWwsIG7Do28gZGV2aWEgYWNvbnRlY2VyLiIKKworI34gbXNnaWQgIlVucHJvY2Vzc2VkIHBhdGg/Pz8gJXMiCisjfiBtc2dzdHIgIkNhbWluaG8gbsOjbyBwcm9jZXNzYWRvPz8/ICVzIgorCisjfiBtc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMiCisjfiBtc2dzdHIgIkVycm8gYW8gcmVtYXRhciAlcy4iCisKKyN+IG1zZ2lkICJDYW5ub3QgJXMgZHVyaW5nIGEgJXMiCisjfiBtc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBlZmV0dWFyICVzIGR1cmFudGUgJXMiCisKKyN+IG1zZ2lkICJDYW4ndCBjaGVycnktcGljayBpbnRvIGVtcHR5IGhlYWQiCisjfiBtc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGVmZXR1YXIgY2hlcnJ5LXBpY2sgbnVtYSBjYWJlw6dhIHZhemlhIgorCisjfiBtc2dpZCAiY291bGQgbm90IG9wZW4gJXMgZm9yIHdyaXRpbmciCisjfiBtc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciAlcyBwYXJhIGVzY3JpdGEiCisKKyN+IG1zZ2lkICJjb3VsZCBub3Qgd3JpdGUgYnJhbmNoIGRlc2NyaXB0aW9uIHRlbXBsYXRlIgorI34gbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZXNjcmV2ZXIgbyBtb2RlbG8gZGEgZGVzY3Jpw6fDo28gZG8gcmFtbyIKKworI34gbXNnaWQgImNvcnJ1cHQgaW5kZXggZmlsZSIKKyN+IG1zZ3N0ciAiZmljaGVpcm8gZGUgw61uZGljZSBjb3Jyb21waWRvIgorCisjfiBtc2dpZCAiZGV0YWNoIHRoZSBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKKyN+IG1zZ3N0ciAiZGVzdGFjYXIgSEVBRCBubyBjb21taXQgaW5kaWNhZG8iCisKKyN+IG1zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkuLi4gIgorI34gbXNnc3RyICJBIHZlcmlmaWNhciBhIGNvbmVjdGl2aWRhZGUuLi4gIgorCisjfiBtc2dpZCAiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIgorI34gbXNnc3RyICIgIChuw6NvIMOpIHBvc3PDrXZlbCBhdHVhbGl6YXIgYSByZWZlcsOqbmNpYSBsb2NhbCkiCisKKyN+IG1zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIgorI34gbXNnc3RyICJleGlzdGVudGUgcmVpbmljaWFsaXphZG8iCisKKyN+IG1zZ2lkICJJbml0aWFsaXplZCBlbXB0eSIKKyN+IG1zZ3N0ciAidmF6aW8gaW5pY2lhbGl6YWRvIgorCisjfiBtc2dpZCAiIHNoYXJlZCIKKyN+IG1zZ3N0ciAiIHBhcnRpbGhhZG8iCisKKyN+IG1zZ2lkICJWZXJpZnkgdGhhdCB0aGUgbmFtZWQgY29tbWl0IGhhcyBhIHZhbGlkIEdQRyBzaWduYXR1cmUiCisjfiBtc2dzdHIgInZlcmlmaWNhciBzZSBvIGNvbW1pdCB0ZW0gdW1hIGFzc2luYXR1cmEgR1BHIHbDoWxpZGEiCisKKyN+IG1zZ2lkICJXcml0aW5nIFNRVUFTSF9NU0ciCisjfiBtc2dzdHIgIkEgZXNjcmV2ZXIgU1FVQVNIX01TRyIKKworI34gbXNnaWQgIkZpbmlzaGluZyBTUVVBU0hfTVNHIgorI34gbXNnc3RyICJBIGNvbmNsdWlyIFNRVUFTSF9NU0ciCisKKyN+IG1zZ2lkICIgICBhbmQgd2l0aCByZW1vdGUiCisjfiBtc2dzdHIgIiAgIGUgY29tIG8gcmVtb3RvIgorCisjfiBtc2dpZCAicmVtb3ZpbmcgJyVzJyBmYWlsZWQiCisjfiBtc2dzdHIgImZhbGhhIGFvIHJlbW92ZXIgJyVzJyIKKworI34gbXNnaWQgInByb2dyYW0gZXJyb3IiCisjfiBtc2dzdHIgImVycm8gZG8gcHJvZ3JhbWEiCisKKyN+IG1zZ2lkICJQbGVhc2UgY2FsbCAnYmlzZWN0X3N0YXRlJyB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iCisjfiBtc2dzdHIgIkludm9xdWUgJ2Jpc2VjdF9zdGF0ZScgY29tIHBlbG8gbWVub3MgdW0gYXJndW1lbnRvLiIKKworI34gbXNnaWQgIiIKKyN+ICJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluICIKKyN+ICJmcm9tIgorI34gbXNnc3RyICIiCisjfiAiU2UgZGVzZWphIHJldXRpbGl6YXIgZXN0ZSBkaXJldMOzcmlvIGdpdCBsb2NhbCBlbSB2ZXogZGUgY2xvbmFyIGRlIG5vdm8gZGUiCisKKyN+IG1zZ2lkICIiCisjfiAidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgIgorI34gInJlcG8iCisjfiBtc2dzdHIgIiIKKyN+ICJ1c2UgYSBvcMOnw6NvICctLWZvcmNlJy4gU2UgbyBkaXJldMOzcmlvIGdpdCBsb2NhbCBuw6NvIMOpIG8gcmVwb3NpdMOzcmlvICIKKyN+ICJjb3JyZXRvIgorCisjfiBtc2dpZCAiIgorI34gIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnICIKKyN+ICJvcHRpb24uIgorI34gbXNnc3RyICIiCisjfiAib3Ugc2UgbsOjbyB0ZW0gYSBjZXJ0ZXphIGRvIHF1ZSBpc3RvIHNpZ25pZmljYSwgZXNjb2xoYSBvdXRybyBub21lIGNvbSBhICIKKyN+ICJvcMOnw6NvICctLW5hbWUnLiIKKworI34gbXNnaWQgIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCcgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSIKKyN+IG1zZ3N0ciAiIgorI34gIkEgw6Fydm9yZSBkZSB0cmFiYWxobyBkbyBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnIGNvbnTDqW0gdW0gZGlyZXTDs3JpbyAuZ2l0IgorCisjfiBtc2dpZCAiIgorI34gIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyAiCisjfiAiaGlzdG9yeSkiCisjfiBtc2dzdHIgIiIKKyN+ICIodXNlICdybSAtcmYnIHNlIHByZXRlbmRlIG1lc21vIHJlbW92w6otbG8sIGluY2x1aW5kbyB0b2RvIG8gc2V1IGhpc3TDs3JpY28pIgorCisjfiBtc2dpZCAiJyVzJzogJXMiCisjfiBtc2dzdHIgIiclcyc6ICVzIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnOiAlcyIKKyN+IG1zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYWNlZGVyIGEgJyVzJzogJXMiCisKKyN+IG1zZ2lkICIgICAgZ2l0IGJyYW5jaCAtZCAlc1xuIgorI34gbXNnc3RyICIgICAgZ2l0IGJyYW5jaCAtZCAlc1xuIgorCisjfiBtc2dpZCAiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gJXNcbiIKKyN+IG1zZ3N0ciAiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gJXNcbiIKKworI34gbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlc1xuIgorI34gbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhYnJpciAlczogJXNcbiIKKworI34gbXNnaWQgIlBsZWFzZSwgc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKKyN+IG1zZ3N0ciAiIgorI34gIlByZXBhcmUgYXMgc3VhcyBhbHRlcmHDp8O1ZXMgZW0gLmdpdG1vZHVsZXMgb3UgZXNjb25kYS1hcyAoc3Rhc2gpIHBhcmEgIgorI34gInByb3NzZWd1aXIiCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgdmVyaWZ5IHRoZSB0YWcgJyVzJyIKKyN+IG1zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIHZhbGlkYXIgYSB0YWcgJyVzJyIKKworI34gbXNnaWQgImZhaWxlZCB0byByZW1vdmU6ICVzIgorI34gbXNnc3RyICJmYWxoYSBhbyByZW1vdmVyOiAlcyIKKworI34gbXNnaWQgIlRoZSAtLWV4ZWMgb3B0aW9uIG11c3QgYmUgdXNlZCB3aXRoIHRoZSAtLWludGVyYWN0aXZlIG9wdGlvbiIKKyN+IG1zZ3N0ciAiQSBvcMOnw6NvIC0tZXhlYyBkZXZlIHNlciB1c2FkYSBjb20gYSBvcMOnw6NvIC0taW50ZXJhY3RpdmUiCisKKyN+IG1zZ2lkICIiCisjfiAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcgbm90IGluaXRpYWxpemVkXG4iCisjfiAiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCisjfiBtc2dzdHIgIiIKKyN+ICJTdWJtw7NkdWxvIGVtICckZGlzcGxheXBhdGgnIG7Do28gaW5pY2lhbGl6YWRvXG4iCisjfiAiVGFsdmV6IHF1ZWlyYSB1c2FyICd1cGRhdGUgLS1pbml0Jz8iCisKKyN+IG1zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZm9ybWF0IgorI34gbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBmb3JtYXRvIgorCisjfiBtc2dpZCAiaW1wcm9wZXIgZm9ybWF0IGVudGVyZWQgYWxpZ246JXMiCisjfiBtc2dzdHIgImZvcm1hdG8gaW1wcsOzcHJpbyBpbnRyb2R1emlkbyBhbGlnbjolcyIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBzZXQgY29yZS53b3JrdHJlZSBpbiAlcyIKKyN+IG1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGRlZmluaXIgY29yZS53b3JrdHJlZSBlbSAlcyIKKworI34gbXNnaWQgIiIKKyN+ICJwdXNoLmRlZmF1bHQgaXMgdW5zZXQ7IGl0cyBpbXBsaWNpdCB2YWx1ZSBoYXMgY2hhbmdlZCBpblxuIgorI34gIkdpdCAyLjAgZnJvbSAnbWF0Y2hpbmcnIHRvICdzaW1wbGUnLiBUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZVxuIgorI34gImFuZCBtYWludGFpbiB0aGUgdHJhZGl0aW9uYWwgYmVoYXZpb3IsIHVzZTpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IG1hdGNoaW5nXG4iCisjfiAiXG4iCisjfiAiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igbm93LCB1c2U6XG4iCisjfiAiXG4iCisjfiAiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcbiIKKyN+ICJcbiIKKyN+ICJXaGVuIHB1c2guZGVmYXVsdCBpcyBzZXQgdG8gJ21hdGNoaW5nJywgZ2l0IHdpbGwgcHVzaCBsb2NhbCBicmFuY2hlc1xuIgorI34gInRvIHRoZSByZW1vdGUgYnJhbmNoZXMgdGhhdCBhbHJlYWR5IGV4aXN0IHdpdGggdGhlIHNhbWUgbmFtZS5cbiIKKyN+ICJcbiIKKyN+ICJTaW5jZSBHaXQgMi4wLCBHaXQgZGVmYXVsdHMgdG8gdGhlIG1vcmUgY29uc2VydmF0aXZlICdzaW1wbGUnXG4iCisjfiAiYmVoYXZpb3IsIHdoaWNoIG9ubHkgcHVzaGVzIHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgY29ycmVzcG9uZGluZ1xuIgorI34gInJlbW90ZSBicmFuY2ggdGhhdCAnZ2l0IHB1bGwnIHVzZXMgdG8gdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC5cbiIKKyN+ICJcbiIKKyN+ICJTZWUgJ2dpdCBoZWxwIGNvbmZpZycgYW5kIHNlYXJjaCBmb3IgJ3B1c2guZGVmYXVsdCcgZm9yIGZ1cnRoZXIgIgorI34gImluZm9ybWF0aW9uLlxuIgorI34gIih0aGUgJ3NpbXBsZScgbW9kZSB3YXMgaW50cm9kdWNlZCBpbiBHaXQgMS43LjExLiBVc2UgdGhlIHNpbWlsYXIgbW9kZVxuIgorI34gIidjdXJyZW50JyBpbnN0ZWFkIG9mICdzaW1wbGUnIGlmIHlvdSBzb21ldGltZXMgdXNlIG9sZGVyIHZlcnNpb25zIG9mIEdpdCkiCisjfiBtc2dzdHIgIiIKKyN+ICJwdXNoLmRlZmF1bHQgbsOjbyBlc3TDoSBkZWZpbmlkbzsgbyBzZXUgdmFsb3IgaW1wbMOtY2l0byBmb2kgYWx0ZXJhZG9cbiIKKyN+ICJubyBHaXQgMi4wIGRlICdtYXRjaGluZycgcGFyYSAnc2ltcGxlJy4gUGFyYSBzdXByaW1pciBlc3RhIG1lbnNhZ2VtXG4iCisjfiAiZSBtYW50ZXIgbyBjb21wb3J0YW1lbnRvIHRyYWRpY2lvbmFsLCB1c2U6XG4iCisjfiAiXG4iCisjfiAiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBtYXRjaGluZ1xuIgorI34gIlxuIgorI34gIlBhcmEgc3VwcmltaXIgZXN0YSBtZW5zYWdlbSBlIGFkb3RhciBvIG5vdm8gY29tcG9ydGFtZW50bywgdXNlOlxuIgorI34gIlxuIgorI34gIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgc2ltcGxlXG4iCisjfiAiXG4iCisjfiAiUXVhbmRvIHB1c2guZGVmYXVsdCBlc3TDoSBkZWZpbmlkbyBjb21vICdtYXRjaGluZycsIG8gR2l0IHB1YmxpY2FcbiIKKyN+ICJvcyByYW1vcyBsb2NhaXMgbm9zIHJhbW9zIHJlbW90b3MgcXVlIGrDoSBleGlzdGFtIGNvbSBvIG1lc21vIG5vbWUuXG4iCisjfiAiXG4iCisjfiAiRGVzZGUgYSB2ZXJzw6NvIDIuMCwgbyBHaXQgYXNzdW1lIG8gY29tcG9ydGFtZW50byBtYWlzIGNvbnNlcnZhdGl2byAiCisjfiAiJ3NpbXBsZScsXG4iCisjfiAicHVibGljYW5kbyBzw7MgbyByYW1vIGF0dWFsIG5vIHJhbW8gcmVtb3RvIGNvcnJlc3BvbmRlbnRlLCBxdWUgw6kgdXNhZG9cbiIKKyN+ICJwYXJhIGF0dWFsaXphciBvIHJhbW8gYXR1YWwgY29tICdnaXQgcHVsbCcuXG4iCisjfiAiQ29uc3VsdGUgJ2dpdCBoZWxwIGNvbmZpZycgZSBwcm9jdXJlIHBvciAncHVzaC5kZWZhdWx0JyBwYXJhIG1haXMgIgorI34gImluZm9ybWHDp8O1ZXMuXG4iCisjfiAiKG8gbW9kbyAnc2ltcGxlJyBmb2kgaW50cm9kdXppZG8gbm8gR2l0IDEuNy4xMS4gVXNlIG8gbW9kbyBzZW1lbGhhbnRlXG4iCisjfiAiJ2N1cnJlbnQnIGVtIHZleiBkZSAnc2ltcGxlJyBzZSBwb3IgdmV6ZXMgdXNhIHZlcnPDtWVzIGFudGVyaW9yZXMgZG8gR2l0KSIKKworI34gbXNnaWQgImNoZWNrfG9uLWRlbWFuZHxubyIKKyN+IG1zZ3N0ciAiY2hlY2t8b24tZGVtYW5kfG5vIgorCisjfiBtc2dpZCAiQ291bGQgbm90IGFwcGVuZCAnJXMnIgorI34gbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYWNyZXNjZW50YXIgJyVzJyIKKworI34gbXNnaWQgIk1pc3NpbmcgYXV0aG9yOiAlcyIKKyN+IG1zZ3N0ciAiQXV0b3IgZW0gZmFsdGE6ICVzIgorCisjfiBtc2dpZCAiVGVzdGluZyAiCisjfiBtc2dzdHIgIkEgdGVzdGFyICIKKworI34gbXNnaWQgIkZvcndhcmQtcG9ydCBsb2NhbCBjb21taXRzIHRvIHRoZSB1cGRhdGVkIHVwc3RyZWFtIGhlYWQiCisjfiBtc2dzdHIgIiIKKyN+ICJNaWdyYXIgY29tbWl0cyBsb2NhaXMgcGFyYSBhIGNhYmXDp2EgYXR1YWxpemFkYSBlbSByZWxhw6fDo28gYW8gcmFtbyBhICIKKyN+ICJtb250YW50ZSIKKworI34gbXNnaWQgIiAlZCBmaWxlIGNoYW5nZWQiCisjfiBtc2dpZF9wbHVyYWwgIiAlZCBmaWxlcyBjaGFuZ2VkIgorI34gbXNnc3RyWzBdICIgJWQgZmljaGVpcm8gbW9kaWZpY2FkbyIKKyN+IG1zZ3N0clsxXSAiICVkIGZpY2hlaXJvcyBtb2RpZmljYWRvcyIKKworI34gbXNnaWQgIiwgJWQgaW5zZXJ0aW9uKCspIgorI34gbXNnaWRfcGx1cmFsICIsICVkIGluc2VydGlvbnMoKykiCisjfiBtc2dzdHJbMF0gIiwgJWQgYWRpw6fDo28oKykiCisjfiBtc2dzdHJbMV0gIiwgJWQgYWRpw6fDtWVzKCspIgorCisjfiBtc2dpZCAiLCAlZCBkZWxldGlvbigtKSIKKyN+IG1zZ2lkX3BsdXJhbCAiLCAlZCBkZWxldGlvbnMoLSkiCisjfiBtc2dzdHJbMF0gIiwgJWQgZWxpbWluYWRvKC0pIgorI34gbXNnc3RyWzFdICIsICVkIGVsaW1pbmFkb3MoLSkiCisKKyN+IG1zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFEIgorI34gbXNnc3RyICJWb2PDqiBuw6NvIHRlbSB1bWEgSEVBRCB2w6FsaWRhIgorCisjfiBtc2dpZCAiYnVnIgorI34gbXNnc3RyICJlcnJvIgorCisjfiBtc2dpZCAiY29waWVkOiAgICAgJXMgLT4gJXMiCisjfiBtc2dzdHIgImNvcGlhZG86ICAgICAlcyAtPiAlcyIKKworI34gbXNnaWQgIm1vZGlmaWVkOiAgICVzIgorI34gbXNnc3RyICJtb2RpZmljYWRvOiAgICVzIgorCisjfiBtc2dpZCAicmVuYW1lZDogICAgJXMgLT4gJXMiCisjfiBtc2dzdHIgIm11ZGFkbyBkZSBub21lOiAgICAlcyAtPiAlcyIKKworI34gbXNnaWQgIiwgYmVoaW5kICIKKyN+IG1zZ3N0ciAiLCBhdHLDoXMgIgorCisjfiBtc2dpZCAibm8gZmlsZXMgYWRkZWQiCisjfiBtc2dzdHIgIm5lbmh1bSBmaWNoZWlyb3MgYWRpY2lvbmFkbyIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBleHRyYWN0IGVtYWlsIGZyb20gY29tbWl0dGVyIGlkZW50aXR5LiIKKyN+IG1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGV4dHJhaXIgYSBpZGVudGlkYWRlIGRvIGNvbW1pdHRlciBkbyBlLW1haWwuIgorCisjfiBtc2dpZCAib3B0aW9uICVzIGRvZXMgbm90IGFjY2VwdCBuZWdhdGl2ZSBmb3JtIgorI34gbXNnc3RyICJvcMOnw6NvICVzIG7Do28gYWNlaXRhIGZvcm1hdG8gbmVnYXRpdm8iCisKKyN+IG1zZ2lkICJBcHBseWluZzogJEZJUlNUTElORSIKKyN+IG1zZ3N0ciAiQXBsaWNhbmRvOiAkRklSU1RMSU5FIgorCisjfiBtc2dpZCAiLS0iCisjfiBtc2dzdHIgIi0tIgorCisjfiBtc2dpZCAiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiIKKyN+IG1zZ3N0ciAiUG9yIGZhdm9yIGluc2lyYSBhIG1lbnNhZ2VtIGRlIGNvbW1pdCBkYXMgc3VhcyBhbHRlcmHDp8O1ZXMuIgpkaWZmIC0tZ2l0IGEvcG8vcnUucG8gYi9wby9ydS5wbwppbmRleCA5ZjUzMDVjLi5hNzdiNDYyIDEwMDY0NAotLS0gYS9wby9ydS5wbworKysgYi9wby9ydS5wbwpAQCAtMSwxNSArMSwxOCBAQAotIyBUcmFuc2xhdGlvbiBvZiBnaXQtZ3VpIHRvIHJ1c3NpYW4KLSMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZQotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWd1aSBwYWNrYWdlLgorIyBTT01FIERFU0NSSVBUSVZFIFRJVExFLgorIyBDb3B5cmlnaHQgKEMpIFlFQVIgVEhFIFBBQ0tBR0UnUyBDT1BZUklHSFQgSE9MREVSCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBQQUNLQUdFIHBhY2thZ2UuCisjIAogIyBUcmFuc2xhdG9yczoKLSMgRGltaXRyaXkgUnlhemFudGNldiA8REptMDBuQG1haWwucnU+LCAyMDE1LTIwMTYKLSMgSXJpbmEgUmllc2VuIDxpcmluYS5yaWVzZW5AZ21haWwuY29tPiwgMjAwNworIyBEaW1pdHJpeSBSeWF6YW50Y2V2IDxESm0wMG5AbWFpbC5ydT4sIDIwMTQtMjAxOQorIyBpbnNvbG9yLCAyMDE0CisjIGluc29sb3IsIDIwMTQKKyMg0KfRg9C6INCi0LDQsdC70LjRhtC+0LzQtdC90LTQtdC70LXQtdCyIDxhdXJ1bTQ0NGFuQGdtYWlsLmNvbT4sIDIwMTkKIG1zZ2lkICIiCiBtc2dzdHIgIiIKICJQcm9qZWN0LUlkLVZlcnNpb246IEdpdCBSdXNzaWFuIExvY2FsaXphdGlvbiBQcm9qZWN0XG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAxLTI2IDE1OjQ3LTA4MDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTA2LTMwIDEyOjM5KzAwMDBcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxOS0wNi0wNCAwODoyNCswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxOS0wNi0yMSAxNzoyOCswMDAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBEaW1pdHJpeSBSeWF6YW50Y2V2IDxESm0wMG5AbWFpbC5ydT5cbiIKICJMYW5ndWFnZS1UZWFtOiBSdXNzaWFuIChodHRwOi8vd3d3LnRyYW5zaWZleC5jb20vZGptMDBuL2dpdC1wby1ydS9sYW5ndWFnZS9ydS8pXG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKQEAgLTE4LDIzNjUgKzIxLDIxNzA3IEBACiAiTGFuZ3VhZ2U6IHJ1XG4iCiAiUGx1cmFsLUZvcm1zOiBucGx1cmFscz00OyBwbHVyYWw9KG4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgbiUxMDw9NCAmJiAobiUxMDA8MTIgfHwgbiUxMDA+MTQpID8gMSA6IG4lMTA9PTAgfHwgKG4lMTA+PTUgJiYgbiUxMDw9OSkgfHwgKG4lMTAwPj0xMSAmJiBuJTEwMDw9MTQpPyAyIDogMyk7XG4iCiAKLSM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo3OTMgZ2l0LWd1aS5zaDo4MDcgZ2l0LWd1aS5zaDo4MjAgZ2l0LWd1aS5zaDo5MDMKLSM6IGdpdC1ndWkuc2g6OTIyCi1tc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCi1tc2dzdHIgImdpdC1ndWk6INC60YDQuNGC0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwIgorIzogYWR2aWNlLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaGludDogJS4qcyVzXG4iCittc2dzdHIgIiVz0L/QvtC00YHQutCw0LfQutCwOiAlLipzJXNcbiIKIAotIzogZ2l0LWd1aS5zaDo3NDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGZvbnQgc3BlY2lmaWVkIGluICVzOiIKLW1zZ3N0ciAi0JIgJXMg0YPRgdGC0LDQvdC+0LLQu9C10L0g0L3QtdCy0LXRgNC90YvQuSDRiNGA0LjRhNGCOiIKKyM6IGFkdmljZS5jOjE1NgorbXNnaWQgIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0LLRi9C/0L7Qu9C90LjRgtGMINC60L7Qv9C40YDQvtCy0LDQvdC40LUg0LrQvtC80LzQuNGC0LAg0LIg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgywg0YLQsNC6INC60LDQuiDRgyDQstCw0YEg0LjQvNC10Y7RgtGB0Y8g0L3QtSDRgdC70LjRgtGL0LUg0YTQsNC50LvRiy4iCiAKLSM6IGdpdC1ndWkuc2g6Nzc5Ci1tc2dpZCAiTWFpbiBGb250IgotbXNnc3RyICLQqNGA0LjRhNGCINC40L3RgtC10YDRhNC10LnRgdCwIgorIzogYWR2aWNlLmM6MTU4Cittc2dpZCAiQ29tbWl0dGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC30LDQutC+0LzQvNC40YLQuNGC0YwsINGC0LDQuiDQutCw0Log0YMg0LLQsNGBINC40LzQtdGO0YLRgdGPINC90LUg0YHQu9C40YLRi9C1INGE0LDQudC70YsuIgogCi0jOiBnaXQtZ3VpLnNoOjc4MAotbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgotbXNnc3RyICLQqNGA0LjRhNGCINC60L7QvdGB0L7Qu9C4INC4INC40LfQvNC10L3QtdC90LjQuSAoZGlmZikiCisjOiBhZHZpY2UuYzoxNjAKK21zZ2lkICJNZXJnaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0LLRi9C/0L7Qu9C90LjRgtGMINGB0LvQuNGP0L3QuNC1LCDRgtCw0Log0LrQsNC6INGDINCy0LDRgSDQuNC80LXRjtGC0YHRjyDQvdC1INGB0LvQuNGC0YvQtSDRhNCw0LnQu9GLLiIKIAotIzogZ2l0LWd1aS5zaDo3OTQKLW1zZ2lkICJDYW5ub3QgZmluZCBnaXQgaW4gUEFUSC4iCi1tc2dzdHIgImdpdCDQvdC1INC90LDQudC00LXQvSDQsiBQQVRILiIKKyM6IGFkdmljZS5jOjE2MgorbXNnaWQgIlB1bGxpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQstGL0L/QvtC70L3QuNGC0Ywg0L/QvtC70YPRh9C10L3QuNC1LCDRgtCw0Log0LrQsNC6INGDINCy0LDRgSDQuNC80LXRjtGC0YHRjyDQvdC1INGB0LvQuNGC0YvQtSDRhNCw0LnQu9GLLiIKIAotIzogZ2l0LWd1aS5zaDo4MjEKLW1zZ2lkICJDYW5ub3QgcGFyc2UgR2l0IHZlcnNpb24gc3RyaW5nOiIKLW1zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0YDQsNGB0L/QvtC30L3QsNGC0Ywg0YHRgtGA0L7QutGDINCy0LXRgNGB0LjQuCBHaXQ6ICIKKyM6IGFkdmljZS5jOjE2NAorbXNnaWQgIlJldmVydGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC+0LHRgNCw0YLQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPLCDRgtCw0Log0LrQsNC6INGDINCy0LDRgSDQuNC80LXRjtGC0YHRjyDQvdC1INGB0LvQuNGC0YvQtSDRhNCw0LnQu9GLLiIKIAotIzogZ2l0LWd1aS5zaDo4MzkKLSMsIHRjbC1mb3JtYXQKKyM6IGFkdmljZS5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJJdCBpcyBub3QgcG9zc2libGUgdG8gJXMgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INCy0YvQv9C+0LvQvdC40YLRjCAlcywg0YLQsNC6INC60LDQuiDRgyDQstCw0YEg0LjQvNC10Y7RgtGB0Y8g0L3QtSDRgdC70LjRgtGL0LUg0YTQsNC50LvRiy4iCisKKyM6IGFkdmljZS5jOjE3NAogbXNnaWQgIiIKLSJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCittc2dzdHIgItCY0YHQv9GA0LDQstGM0YLQtSDQuNGFINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUsINC30LDRgtC10Lwg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IGFkZC9ybSA80YTQsNC50Ls+wrssXG7Rh9GC0L7QsdGLINC/0L7QvNC10YLQuNGC0Ywg0LjRgdC/0YDQsNCy0LvQtdC90LjQtSDQuCDRgdC00LXQu9Cw0LnRgtC1INC60L7QvNC80LjRgi4iCisKKyM6IGFkdmljZS5jOjE4MgorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiBhbiB1bnJlc29sdmVkIGNvbmZsaWN0LiIKK21zZ3N0ciAi0JLRi9GF0L7QtCDQuNC3LdC30LAg0L3QtdGA0LDQt9GA0LXRiNC10L3QvdC+0LPQviDQutC+0L3RhNC70LjQutGC0LAuIgorCisjOiBhZHZpY2UuYzoxODcgYnVpbHRpbi9tZXJnZS5jOjEzMjAKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgItCS0Ysg0L3QtSDQt9Cw0LLQtdGA0YjQuNC70Lgg0YHQu9C40Y/QvdC40LUgKNC/0YDQuNGB0YPRgtGB0YLQstGD0LXRgiDRhNCw0LnQuyBNRVJHRV9IRUFEKS4iCisKKyM6IGFkdmljZS5jOjE4OQorbXNnaWQgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgbWVyZ2luZy4iCittc2dzdHIgItCf0LXRgNC10LQg0YHQu9C40Y/QvdC40LXQvCwg0LLRi9C/0L7Qu9C90LjRgtC1INC60L7QvNC80LjRgiDQstCw0YjQuNGFINC40LfQvNC10L3QtdC90LjQuS4iCisKKyM6IGFkdmljZS5jOjE5MAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiB1bmZpbmlzaGVkIG1lcmdlLiIKK21zZ3N0ciAi0JLRi9GF0L7QtCDQuNC3LdC30LAg0L3QtdC30LDQstC10YDRiNC10L3QvdC+0LPQviDRgdC70LjRj9C90LjRjy4iCisKKyM6IGFkdmljZS5jOjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogY2hlY2tpbmcgb3V0ICclcycuXG4iCiAiXG4iCi0iJXMgY2xhaW1zIGl0IGlzIHZlcnNpb24gJyVzJy5cbiIKKyJZb3UgYXJlIGluICdkZXRhY2hlZCBIRUFEJyBzdGF0ZS4gWW91IGNhbiBsb29rIGFyb3VuZCwgbWFrZSBleHBlcmltZW50YWxcbiIKKyJjaGFuZ2VzIGFuZCBjb21taXQgdGhlbSwgYW5kIHlvdSBjYW4gZGlzY2FyZCBhbnkgY29tbWl0cyB5b3UgbWFrZSBpbiB0aGlzXG4iCisic3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHBlcmZvcm1pbmcgYW5vdGhlciBjaGVja291dC5cbiIKICJcbiIKLSIlcyByZXF1aXJlcyBhdCBsZWFzdCBHaXQgMS41LjAgb3IgbGF0ZXIuXG4iCisiSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCB0byByZXRhaW4gY29tbWl0cyB5b3UgY3JlYXRlLCB5b3UgbWF5XG4iCisiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWIgd2l0aCB0aGUgY2hlY2tvdXQgY29tbWFuZCBhZ2Fpbi4gRXhhbXBsZTpcbiIKICJcbiIKLSJBc3N1bWUgJyVzJyBpcyB2ZXJzaW9uIDEuNS4wP1xuIgotbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQvtC/0YDQtdC00LXQu9C40YLRjCDQstC10YDRgdC40Y4gR2l0XG5cbiVzINGD0LrQsNC30YvQstCw0LXRgiDQvdCwINCy0LXRgNGB0LjRjiDCqyVzwrsuXG5cbtC00LvRjyAlcyDRgtGA0LXQsdGD0LXRgtGB0Y8g0LLQtdGA0YHQuNGPIEdpdCwg0L3QsNGH0LjQvdCw0Y8g0YEgMS41LjBcblxu0J/RgNC10LTQv9C+0LvQvtC20LjRgtGMLCDRh9GC0L4gwqslc8K7INC4INC10YHRgtGMINCy0LXRgNGB0LjRjyAxLjUuMD9cbiIKKyIgIGdpdCBjaGVja291dCAtYiA8bmV3LWJyYW5jaC1uYW1lPlxuIgorIlxuIgorbXNnc3RyICLQn9GA0LjQvNC10YfQsNC90LjQtTog0L/QtdGA0LXRhdC+0LQg0L3QsCDCqyVzwrsuXG5cbtCS0Ysg0YHQtdC50YfQsNGBINCyINGB0L7RgdGC0L7Rj9C90LjQuCDCq9C+0YLQtNC10LvRkdC90L3QvtCz0L4gSEVBRMK7LiDQktGLINC80L7QttC10YLQtSDQvtGB0LzQvtGC0YDQtdGC0YzRgdGPLCDRgdC00LXQu9Cw0YLRjFxu0Y3QutGB0L/QtdGA0LjQvNC10L3RgtCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0Lgg0LfQsNC60L7QvNC80LjRgtC40YLRjCDQuNGFLCDRgtCw0LrQttC1INCy0Ysg0LzQvtC20LXRgtC1INC+0YLQvNC10L3QuNGC0YxcbtC40LfQvNC10L3QtdC90LjRjyDQu9GO0LHRi9GFINC60L7QvNC80LjRgtC+0LIg0LIg0Y3RgtC+0Lwg0YHQvtGB0YLQvtGP0L3QuNC4INC90LUg0LfQsNGC0YDQsNCz0LjQstCw0Y8g0LvRjtCx0YvQtSDQstC10YLQutC4INC4XG7QvdC1INC/0LXRgNC10YXQvtC00Y8g0L3QsCDQvdC40YUuXG5cbtCV0YHQu9C4INCy0Ysg0YXQvtGC0LjRgtC1INGB0L7Qt9C00LDRgtGMINC90L7QstGD0Y4g0LLQtdGC0LrRgyDQuCDRgdC+0YXRgNCw0L3QuNGC0Ywg0YHQstC+0Lgg0LrQvtC80LzQuNGC0YssINGC0L4g0LLRi1xu0LzQvtC20LXRgtC1INGB0LTQtdC70LDRgtGMINGN0YLQviAo0YHQtdC50YfQsNGBINC40LvQuCDQv9C+0LfQttC1KSDQstGL0LfQstCw0LIg0LrQvtC80LDQvdC00YMgY2hlY2tvdXQg0YHQvdC+0LLQsCxcbtC90L4g0YEg0L/QsNGA0LDQvNC10YLRgNC+0LwgLWIuINCd0LDQv9GA0LjQvNC10YA6XG5cbiAgZ2l0IGNoZWNrb3V0IC1iIDzQuNC80Y8t0L3QvtCy0L7QuS3QstC10YLQutC4PlxuXG4iCiAKLSM6IGdpdC1ndWkuc2g6MTEyOAotbXNnaWQgIkdpdCBkaXJlY3Rvcnkgbm90IGZvdW5kOiIKLW1zZ3N0ciAi0JrQsNGC0LDQu9C+0LMgR2l0INC90LUg0L3QsNC50LTQtdC9OiIKKyM6IGFsaWFzLmM6NTAKK21zZ2lkICJjbWRsaW5lIGVuZHMgd2l0aCBcXCIKK21zZ3N0ciAi0LrQvtC80LDQvdC00L3QsNGPINGB0YLRgNC+0LrQsCDQt9Cw0LrQsNC90YfQuNCy0LDQtdGC0YHRjyDRgdC40LzQstC+0LvQvtC8IFxcIgogCi0jOiBnaXQtZ3VpLnNoOjExNDYKLW1zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgotbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQv9C10YDQtdC50YLQuCDQuiDQutC+0YDQvdGOINGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCDRgNC10L/QvtC30LjRgtC+0YDQuNGPOiAiCisjOiBhbGlhcy5jOjUxCittc2dpZCAidW5jbG9zZWQgcXVvdGUiCittc2dzdHIgItC/0YDQvtC/0YPRidC10L3QsCDQt9Cw0LrRgNGL0LLQsNGO0YnQsNGPINC60LDQstGL0YfQutCwIgogCi0jOiBnaXQtZ3VpLnNoOjExNTQKLW1zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCi1tc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0LHQtdC3INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsDoiCisjOiBhcHBseS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICLQvdC10L7Qv9C+0LfQvdCw0L3QvdCw0Y8g0L7Qv9GG0LjRjyDQtNC70Y8g0L/RgNC+0LHQtdC70L7QsiDCqyVzwrsiCiAKLSM6IGdpdC1ndWkuc2g6MTE2MgotbXNnaWQgIk5vIHdvcmtpbmcgZGlyZWN0b3J5IgotbXNnc3RyICLQntGC0YHRg9GC0YHRgtCy0YPQtdGCINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIgorIzogYXBwbHkuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgItC90LXQvtC/0L7Qt9C90LDQvdC90LDRjyDQvtC/0YbQuNGPINC00LvRjyDQuNCz0L3QvtGA0LjRgNC+0LLQsNC90LjRjyDQv9GA0L7QsdC10LvQvtCyIMKrJXPCuyIKIAotIzogZ2l0LWd1aS5zaDoxMzM0IGxpYi9jaGVja291dF9vcC50Y2w6MzA2Ci1tc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKLW1zZ3N0ciAi0J7QsdC90L7QstC70LXQvdC40LUg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L4g0YHQvtGB0YLQvtGP0L3QuNC4INGE0LDQudC70L7QsuKApiIKKyM6IGFwcGx5LmM6MTI5Cittc2dpZCAiLS1yZWplY3QgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tcmVqZWN0INC4IC0tM3dheSDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvi4iCiAKLSM6IGdpdC1ndWkuc2g6MTM5MAotbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCi1tc2dzdHIgItCf0L7QuNGB0Log0LjQt9C80LXQvdC10L3QvdGL0YUg0YTQsNC50LvQvtCy4oCmIgorIzogYXBwbHkuYzoxMzEKK21zZ2lkICItLWNhY2hlZCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1jYWNoZWQg0LggLS0zd2F5INC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+LiIKIAotIzogZ2l0LWd1aS5zaDoxNDU0Ci1tc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKLW1zZ3N0ciAi0JLRi9C30L7QsiDQv9C10YDQtdGF0LLQsNGC0YfQuNC60LAgcHJlcGFyZS1jb21taXQtbXNn4oCmIgorIzogYXBwbHkuYzoxMzQKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tM3dheSDQstC90LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKIAotIzogZ2l0LWd1aS5zaDoxNDcxCi1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAi0JrQvtC80LzQuNGCINC/0YDQtdGA0LLQsNC9INC/0LXRgNC10YXQstCw0YLRh9C40LrQvtC8IHByZXBhcmUtY29tbWl0LW1zZy4iCisjOiBhcHBseS5jOjE0NQorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0taW5kZXgg0LLQvdC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCiAKLSM6IGdpdC1ndWkuc2g6MTYyOSBsaWIvYnJvd3Nlci50Y2w6MjQ2Ci1tc2dpZCAiUmVhZHkuIgotbXNnc3RyICLQk9C+0YLQvtCy0L4uIgorIzogYXBwbHkuYzoxNDgKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1jYWNoZWQg0LLQvdC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCiAKLSM6IGdpdC1ndWkuc2g6MTc4NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRpc3BsYXlpbmcgb25seSAlcyBvZiAlcyBmaWxlcy4iCi1tc2dzdHIgItCf0L7QutCw0LfQsNC90L4gJXMg0LjQtyAlcyDRhNCw0LnQu9C+0LIuIgorIzogYXBwbHkuYzo4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LTQs9C+0YLQvtCy0LjRgtGMINGA0LXQs9GD0LvRj9GA0L3QvtC1INCy0YvRgNCw0LbQtdC90LjQtSDQtNC70Y8g0LzQtdGC0LrQuCDQstGA0LXQvNC10L3QuCAlcyIKIAotIzogZ2l0LWd1aS5zaDoxOTEzCi1tc2dpZCAiVW5tb2RpZmllZCIKLW1zZ3N0ciAi0J3QtSDQuNC30LzQtdC90LXQvdC+IgorIzogYXBwbHkuYzo4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJyZWdleGVjINCy0L7Qt9Cy0YDQsNGC0LjQuyAlZCDQtNC70Y8g0LLQstC+0LTQsDogJXMiCiAKLSM6IGdpdC1ndWkuc2g6MTkxNQotbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICLQmNC30LzQtdC90LXQvdC+LCDQvdC1INCyINC40L3QtNC10LrRgdC1IgorIzogYXBwbHkuYzo5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INC40LzRjyDRhNCw0LnQu9CwINCyINGB0YLRgNC+0LrQtSDQv9Cw0YLRh9CwICVkIgogCi0jOiBnaXQtZ3VpLnNoOjE5MTYgZ2l0LWd1aS5zaDoxOTI0Ci1tc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgItCSINC40L3QtNC10LrRgdC1INC00LvRjyDQutC+0LzQvNC40YLQsCIKKyM6IGFwcGx5LmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiDQv9C70L7RhdC+0LkgZ2l0LWRpZmYg4oCUINC+0LbQuNC00LDQu9C+0YHRjCAvZGV2L251bGwsINC/0L7Qu9GD0YfQtdC90L4gJXMg0L3QsCDRgdGC0YDQvtC60LUgJWQiCiAKLSM6IGdpdC1ndWkuc2g6MTkxNyBnaXQtZ3VpLnNoOjE5MjUKLW1zZ2lkICJQb3J0aW9ucyBzdGFnZWQgZm9yIGNvbW1pdCIKLW1zZ3N0ciAi0KfQsNGB0YLQuCwg0LIg0LjQvdC00LXQutGB0LUg0LTQu9GPINC60L7QvNC80LjRgtCwIgorIzogYXBwbHkuYzo5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTog0L/Qu9C+0YXQvtC5IGdpdC1kaWZmIOKAlCDQvdC1INGB0L7Qs9C70LDRgdGD0Y7RidC10LXRgdGPINC90L7QstC+0LUg0LjQvNGPINGE0LDQudC70LAg0L3QsCDRgdGC0YDQvtC60LUgJWQiCiAKLSM6IGdpdC1ndWkuc2g6MTkxOCBnaXQtZ3VpLnNoOjE5MjYKLW1zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyIKLW1zZ3N0ciAi0JIg0LjQvdC00LXQutGB0LUg0LTQu9GPINC60L7QvNC80LjRgtCwLCDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCIgorIzogYXBwbHkuYzo5NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTog0L/Qu9C+0YXQvtC5IGdpdC1kaWZmIOKAlCDQvdC1INGB0L7Qs9C70LDRgdGD0Y7RidC10LXRgdGPINGB0YLQsNGA0L7QtSDQuNC80Y8g0YTQsNC50LvQsCDQvdCwINGB0YLRgNC+0LrQtSAlZCIKIAotIzogZ2l0LWd1aS5zaDoxOTIwCi1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgItCi0LjQvyDRhNCw0LnQu9CwINC40LfQvNC10L3RkdC9LCDQvdC1INCyINC40L3QtNC10LrRgdC1IgorIzogYXBwbHkuYzo5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiDQv9C70L7RhdC+0LkgZ2l0LWRpZmYgIOKAlCDQvtC20LjQtNCw0LvQvtGB0YwgL2Rldi9udWxsINC90LAg0YHRgtGA0L7QutC1ICVkIgogCi0jOiBnaXQtZ3VpLnNoOjE5MjEKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgotbXNnc3RyICLQotC40L8g0YTQsNC50LvQsCDQuNC30LzQtdC90ZHQvSwg0LIg0LjQvdC00LXQutGB0LUiCisjOiBhcHBseS5jOjk5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgb24gbGluZSAlZDogJXMiCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80YvQuSDRgNC10LbQuNC8ICVkOiAlcyIKIAotIzogZ2l0LWd1aS5zaDoxOTIzCi1tc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICLQndC1INC+0YLRgdC70LXQttC40LLQsNC10YLRgdGPLCDQvdC1INCyINC40L3QtNC10LrRgdC1IgorIzogYXBwbHkuYzoxMzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImluY29uc2lzdGVudCBoZWFkZXIgbGluZXMgJWQgYW5kICVkIgorbXNnc3RyICLQv9GA0L7RgtC40LLQvtGA0LXRh9C40LLRi9C1INGB0YLRgNC+0LrQuCDQt9Cw0LPQvtC70L7QstC60LAgJWQg0LggJWQiCiAKLSM6IGdpdC1ndWkuc2g6MTkyOAotbXNnaWQgIk1pc3NpbmciCi1tc2dzdHIgItCe0YLRgdGD0YLRgdGC0LLRg9C10YIiCisjOiBhcHBseS5jOjE0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJyZWNvdW50OiDQvdC1INC+0LbQuNC00LDQtdC80LDRjyDRgdGC0YDQvtC60LA6ICUuKnMiCiAKLSM6IGdpdC1ndWkuc2g6MTkyOQotbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKLW1zZ3N0ciAi0JIg0LjQvdC00LXQutGB0LUg0LTQu9GPINGD0LTQsNC70LXQvdC40Y8iCisjOiBhcHBseS5jOjE1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAi0YTRgNCw0LPQvNC10L3RgiDQuNC30LzQtdC90LXQvdC40Lkg0LHQtdC3INC30LDQs9C+0LvQvtCy0LrQsCDQvdCwINGB0YLRgNC+0LrQtSAlZDogJS4qcyIKIAotIzogZ2l0LWd1aS5zaDoxOTMwCi1tc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgotbXNnc3RyICLQkiDQuNC90LTQtdC60YHQtSDQtNC70Y8g0YPQtNCw0LvQtdC90LjRjywg0LXRidC1INC90LUg0YPQtNCw0LvQtdC90L4iCisjOiBhcHBseS5jOjE1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUiCisiIGNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lIgorIiBjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAi0LfQsNCz0L7Qu9C+0LLQvtC6IGdpdCBkaWZmINC90LUg0L3QsNGI0LXQuyDQuNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINC40LzQtdC90Lgg0YTQsNC50LvQsCDQv9GA0Lgg0YPQtNCw0LvQtdC90LjQuCAlZCDQstC10LTRg9GJ0LXQs9C+INC60L7QvNC/0L7QvdC10L3RgtCwINC/0YPRgtC4INC6INGE0LDQudC70YMgKNGB0YLRgNC+0LrQsCAlZCkiCittc2dzdHJbMV0gItC30LDQs9C+0LvQvtCy0L7QuiBnaXQgZGlmZiDQvdC1INC90LDRiNC10Lsg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L7QsSDQuNC80LXQvdC4INGE0LDQudC70LAg0L/RgNC4INGD0LTQsNC70LXQvdC40LggJWQg0LLQtdC00YPRidC40YUg0LrQvtC80L/QvtC90LXQvdGCINC/0YPRgtC4INC6INGE0LDQudC70YMgKNGB0YLRgNC+0LrQsCAlZCkiCittc2dzdHJbMl0gItC30LDQs9C+0LvQvtCy0L7QuiBnaXQgZGlmZiDQvdC1INC90LDRiNC10Lsg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L7QsSDQuNC80LXQvdC4INGE0LDQudC70LAg0L/RgNC4INGD0LTQsNC70LXQvdC40LggJWQg0LLQtdC00YPRidC40YUg0LrQvtC80L/QvtC90LXQvdGCINC/0YPRgtC4INC6INGE0LDQudC70YMgKNGB0YLRgNC+0LrQsCAlZCkiCittc2dzdHJbM10gItC30LDQs9C+0LvQvtCy0L7QuiBnaXQgZGlmZiDQvdC1INC90LDRiNC10Lsg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L7QsSDQuNC80LXQvdC4INGE0LDQudC70LAg0L/RgNC4INGD0LTQsNC70LXQvdC40LggJWQg0LLQtdC00YPRidC40YUg0LrQvtC80L/QvtC90LXQvdGCINC/0YPRgtC4INC6INGE0LDQudC70YMgKNGB0YLRgNC+0LrQsCAlZCkiCiAKLSM6IGdpdC1ndWkuc2g6MTkzMiBnaXQtZ3VpLnNoOjE5MzMgZ2l0LWd1aS5zaDoxOTM0IGdpdC1ndWkuc2g6MTkzNQotIzogZ2l0LWd1aS5zaDoxOTM2IGdpdC1ndWkuc2g6MTkzNwotbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCi1tc2dzdHIgItCi0YDQtdCx0YPQtdGC0YHRjyDRgNCw0LfRgNC10YjQtdC90LjQtSDQutC+0L3RhNC70LjQutGC0LAg0L/RgNC4INGB0LvQuNGP0L3QuNC4IgorIzogYXBwbHkuYzoxNTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiAobGluZSAlZCkiCittc2dzdHIgItC30LDQs9C+0LvQvtCy0L7QuiBnaXQgZGlmZiDQvdC1INGB0L7QtNC10YDQttC40YIg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L7QsSDQuNC80LXQvdC4INGE0LDQudC70LAgKNGB0YLRgNC+0LrQsCAlZCkiCiAKLSM6IGdpdC1ndWkuc2g6MTk3MgotbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCi1tc2dzdHIgItCX0LDQv9GD0YHQutCw0LXRgtGB0Y8gZ2l0a+KApiDQn9C+0LTQvtC20LTQuNGC0LUsINC/0L7QttCw0LvRg9C50YHRgtCw4oCmIgorIzogYXBwbHkuYzoxNzcyCittc2dpZCAibmV3IGZpbGUgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgItC90L7QstGL0Lkg0YTQsNC50Lsg0LfQsNCy0LjRgdC40YIg0L7RgiDRgdGC0LDRgNC+0LPQviDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+IgogCi0jOiBnaXQtZ3VpLnNoOjE5ODQKLW1zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdGsgaW4gUEFUSCIKLW1zZ3N0ciAiZ2l0ayDQvdC1INC90LDQudC00LXQvSDQsiBQQVRILiIKKyM6IGFwcGx5LmM6MTc3NAorbXNnaWQgImRlbGV0ZWQgZmlsZSBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgItGD0LTQsNC70LXQvdC90YvQuSDRhNCw0LnQuyDQstGB0LUg0LXRidC1INC40LzQtdC10YIg0YHQvtC00LXRgNC20LjQvNC+0LUiCiAKLSM6IGdpdC1ndWkuc2g6MjA0MwotbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0IGd1aSBpbiBQQVRIIgotbXNnc3RyICJnaXQgZ3VpINC90LUg0L3QsNC50LTQtdC9INCyIFBBVEguIgorIzogYXBwbHkuYzoxODA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAi0L/QsNGC0Ycg0L/QvtCy0YDQtdC20LTQtdC9INC90LAg0YHRgtGA0L7QutC1ICVkIgogCi0jOiBnaXQtZ3VpLnNoOjI0NTUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNgotbXNnaWQgIlJlcG9zaXRvcnkiCi1tc2dzdHIgItCg0LXQv9C+0LfQuNGC0L7RgNC40LkiCisjOiBhcHBseS5jOjE4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgItC90L7QstGL0Lkg0YTQsNC50LsgJXMg0LfQsNCy0LjRgdC40YIg0L7RgiDRgdGC0LDRgNC+0LPQviDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+IgogCi0jOiBnaXQtZ3VpLnNoOjI0NTYKLW1zZ2lkICJFZGl0IgotbXNnc3RyICLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCIKKyM6IGFwcGx5LmM6MTg0NworIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICLRg9C00LDQu9C10L3QvdGL0Lkg0YTQsNC50LsgJXMg0LLRgdC1INC10YnQtSDQuNC80LXQtdGCINGB0L7QtNC10YDQttC40LzQvtC1IgogCi0jOiBnaXQtZ3VpLnNoOjI0NTggbGliL2Nob29zZV9yZXYudGNsOjU2MQotbXNnaWQgIkJyYW5jaCIKLW1zZ3N0ciAi0JLQtdGC0LrQsCIKKyM6IGFwcGx5LmM6MTg1MAorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIqKiDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiDRhNCw0LnQuyAlcyDRgdGC0LDQvdC+0LLQuNGC0YHRjyDQv9GD0YHRgtGL0LwsINC90L4g0L3QtSDRg9C00LDQu9GP0LXRgtGB0Y8iCiAKLSM6IGdpdC1ndWkuc2g6MjQ2MSBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ4Ci1tc2dpZCAiQ29tbWl0QEBub3VuIgotbXNnc3RyICLQmtC+0LzQvNC40YIiCisjOiBhcHBseS5jOjE5OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAi0L/QvtCy0YDQtdC20LTQtdC90L3Ri9C5INC00LLQvtC40YfQvdGL0Lkg0L/QsNGC0Ycg0L3QsCDRgdGC0YDQvtC60LUgJWQ6ICUuKnMiCiAKLSM6IGdpdC1ndWkuc2g6MjQ2NCBsaWIvbWVyZ2UudGNsOjEyMSBsaWIvbWVyZ2UudGNsOjE1MCBsaWIvbWVyZ2UudGNsOjE2OAotbXNnaWQgIk1lcmdlIgorIzogYXBwbHkuYzoyMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAi0L3QtdC+0L/QvtC30L3QsNC90L3Ri9C5INC00LLQvtC40YfQvdGL0Lkg0L/QsNGC0Ycg0L3QsCDRgdGC0YDQvtC60LUgJWQiCisKKyM6IGFwcGx5LmM6MjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICLQv9Cw0YLRhyDRgSDQvNGD0YHQvtGA0L7QvCDQvdCwINGB0YLRgNC+0LrQtSAlZCIKKworIzogYXBwbHkuYzoyMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINGB0LjQvNCy0L7Qu9GM0L3Rg9GOINGB0YHRi9C70LrRgyAlcyIKKworIzogYXBwbHkuYzoyMjg2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0LjQu9C4INC/0YDQvtGH0LXRgdGC0YwgJXMiCisKKyM6IGFwcGx5LmM6Mjk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90L7QtSDQvdCw0YfQsNC70L4g0YHRgtGA0L7QutC4OiDCqyVjwrsiCisKKyM6IGFwcGx5LmM6MzA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iCittc2dpZF9wbHVyYWwgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iCittc2dzdHJbMF0gItCn0LDRgdGC0YwgIyVkINGD0YHQv9C10YjQvdC+INC/0YDQuNC80LXQvdC10L3QsCDQvdCwICVkICjRgdC+INGB0LTQstC40LPQvtC8INCyICVkINGB0YLRgNC+0LrRgykuIgorbXNnc3RyWzFdICLQp9Cw0YHRgtGMICMlZCDRg9GB0L/QtdGI0L3QviDQv9GA0LjQvNC10L3QtdC90LAg0L3QsCAlZCAo0YHQviDRgdC00LLQuNCz0L7QvCDQsiAlZCDRgdGC0YDQvtC60LgpLiIKK21zZ3N0clsyXSAi0KfQsNGB0YLRjCAjJWQg0YPRgdC/0LXRiNC90L4g0L/RgNC40LzQtdC90LXQvdCwINC90LAgJWQgKNGB0L4g0YHQtNCy0LjQs9C+0Lwg0LIgJWQg0YHRgtGA0L7QuikuIgorbXNnc3RyWzNdICLQp9Cw0YHRgtGMICMlZCDRg9GB0L/QtdGI0L3QviDQv9GA0LjQvNC10L3QtdC90LAg0L3QsCAlZCAo0YHQviDRgdC00LLQuNCz0L7QvCDQsiAlZCDRgdGC0YDQvtC6KS4iCisKKyM6IGFwcGx5LmM6MzA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICLQmtC+0L3RgtC10LrRgdGCINGB0YPQttC10L0g0LTQviAoJWxkLyVsZCksINGH0YLQvtCx0Ysg0L/RgNC40LzQtdC90LjRgtGMINGE0YDQsNCz0LzQtdC90YIg0L3QsCAlZCDRgdGC0YDQvtC60LUiCisKKyM6IGFwcGx5LmM6MzA4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2hpbGUgc2VhcmNoaW5nIGZvcjpcbiIKKyIlLipzIgorbXNnc3RyICLQv9GA0Lgg0L/QvtC40YHQutC1OlxuJS4qcyIKKworIzogYXBwbHkuYzozMTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgItC/0YDQvtC/0YPRidC10L3RiyDQtNCw0L3QvdGL0LUg0LTQstC+0LjRh9C90L7Qs9C+INC/0LDRgtGH0LAg0LTQu9GPIMKrJXPCuyIKKworIzogYXBwbHkuYzozMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXZlcnNlLWFwcGx5IGEgYmluYXJ5IHBhdGNoIHdpdGhvdXQgdGhlIHJldmVyc2UgaHVuayB0byAnJXMnIgorbXNnc3RyICLQvdC10LLQvtC30LzQvtC20L3QviDQstGL0L/QvtC70L3QuNGC0YwgcmV2ZXJzZS1hcHBseSDQtNC70Y8g0LTQstC+0LjRh9C90L7Qs9C+INC/0LDRgtGH0LAsINCx0LXQtyDQvtCx0YDQsNGJ0LXQvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5INCx0LvQvtC60LAgwqslc8K7IgorCisjOiBhcHBseS5jOjMxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFwcGx5IGJpbmFyeSBwYXRjaCB0byAnJXMnIHdpdGhvdXQgZnVsbCBpbmRleCBsaW5lIgorbXNnc3RyICLQvdC10LLQvtC30LzQvtC20L3QviDQv9GA0LjQvNC10L3QuNGC0Ywg0LTQstC+0LjRh9C90YvQuSDQv9Cw0YLRhyDCqyVzwrsg0LHQtdC3INGB0YLRgNC+0LrQuCDRgSDRg9C60LDQt9Cw0L3QvdC+0Lkg0L/QvtC70L3QvtC5INCy0LXRgNGB0LjQtdC5INC40L3QtNC10LrRgdCwIgorCisjOiBhcHBseS5jOjMxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBwYXRjaCBhcHBsaWVzIHRvICclcycgKCVzKSwgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGVudHMuIgorbXNnc3RyICLQv9Cw0YLRhyDQv9GA0LjQvNC10L3Rj9GC0YHRjyDQuiDRhNCw0LnQu9GDIMKrJXPCuyAoJXMpLCDQvdC+INC10LPQviDRgtC10LrRg9GJ0LXQtSDRgdC+0LTQtdGA0LbQuNC80L7QtSDQvdC1INGB0L7QvtGC0LLQtdGB0YLQstGD0LXRgiDQvtC20LjQtNCw0LXQvNC+0LzRgy4iCisKKyM6IGFwcGx5LmM6MzE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcGF0Y2ggYXBwbGllcyB0byBhbiBlbXB0eSAnJXMnIGJ1dCBpdCBpcyBub3QgZW1wdHkiCittc2dzdHIgItC/0LDRgtGHINC/0YDQuNC80LXQvdGP0LXRgtGB0Y8g0Log0L/Rg9GB0YLQvtC80YMg0YTQsNC50LvRgyDCqyVzwrssINC90L4g0YTQsNC50Lsg0L3QtSDQv9GD0YHRgtC+0LkiCisKKyM6IGFwcGx5LmM6MzE5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbmVjZXNzYXJ5IHBvc3RpbWFnZSAlcyBmb3IgJyVzJyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0L3QtdC+0LHRhdC+0LTQuNC80YPRjiDQv9C+0YHRi9C70LrRgyAlcyDQtNC70Y8gwqslc8K7IgorCisjOiBhcHBseS5jOjMyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC40LzQtdC90LjRgtGMINC00LLQvtC40YfQvdGL0Lkg0L/QsNGC0Ycg0Logwqslc8K7IgorCisjOiBhcHBseS5jOjMyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgItC/0L7RgdC70LUg0L/RgNC40LzQtdC90LXQvdC40Y8g0LTQstC+0LjRh9C90L7Qs9C+INC/0LDRgtGH0LAg0LTQu9GPIMKrJXPCuyDQsdGL0Lsg0L/QvtC70YPRh9C10L0g0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INGA0LXQt9GD0LvRjNGC0LDRgiAo0L7QttC40LTQsNC70L7RgdGMICVzLCDQv9C+0LvRg9GH0LXQvdC+ICVzKSIKKworIzogYXBwbHkuYzozMjM3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0L/RgNC40LzQtdC90LXQvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5OiAlczolbGQiCisKKyM6IGFwcGx5LmM6MzM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQutC70Y7Rh9C40YLRjCDRgdC+0YHRgtC+0Y/QvdC40LUg0L3QsCAlcyIKKworIzogYXBwbHkuYzozNDEyIGFwcGx5LmM6MzQyMyBhcHBseS5jOjM0NjkgbWlkeC5jOjU5IHNldHVwLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCAlcyIKKworIzogYXBwbHkuYzozNDIwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgItGH0YLQtdC90LjQtSDQuNC3IMKrJXPCuyDQt9CwINGB0LjQvNCy0L7Qu9C40YfQtdGB0LrQvtC5INGB0YHRi9C70LrQvtC5IgorCisjOiBhcHBseS5jOjM0NDkgYXBwbHkuYzozNjkyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIgorbXNnc3RyICLQv9GD0YLRjCAlcyDQsdGL0Lsg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC9L9GD0LTQsNC70LXQvSIKKworIzogYXBwbHkuYzozNTM1IGFwcGx5LmM6MzcwNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzOiDQvdC10YIg0LIg0LjQvdC00LXQutGB0LUiCisKKyM6IGFwcGx5LmM6MzU0NCBhcHBseS5jOjM3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IgorbXNnc3RyICIlczog0L3QtSDRgdC+0LLQv9Cw0LTQsNC10YIg0YEg0LjQvdC00LXQutGB0L7QvCIKKworIzogYXBwbHkuYzozNTc5Cittc2dpZCAicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAi0LIg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCINC90LXQvtCx0YXQvtC00LjQvNGL0Lkg0LTQstC+0LjRh9C90YvQuSDQvtCx0YrQtdC60YIg0LTQu9GPINC+0YLQutCw0YLQsCDQuiDRgtGA0ZHRhdGF0L7QtNC+0LLQvtC80YMg0YHQu9C40Y/QvdC40Y4uIgorCisjOiBhcHBseS5jOjM1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHRocmVlLXdheSBtZXJnZS4uLlxuIgorbXNnc3RyICLQntGC0LrQsNGCINC6INGC0YDRkdGF0YXQvtC00L7QstC+0LzRgyDRgdC70LjRj9C90LjRjuKAplxuIgorCisjOiBhcHBseS5jOjM1OTggYXBwbHkuYzozNjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINGC0LXQutGD0YnQtdC1INGB0L7QtNC10YDQttC40LzQvtC1IMKrJXPCuyIKKworIzogYXBwbHkuYzozNjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmYWxsIGJhY2sgb24gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60LDRgtC40YLRjNGB0Y8g0Log0YLRgNGR0YXRhdC+0LTQvtCy0L7QvNGDINGB0LvQuNGP0L3QuNGO4oCmXG4iCisKKyM6IGFwcGx5LmM6MzYyOAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgd2l0aCBjb25mbGljdHMuXG4iCittc2dzdHIgItCf0LDRgtGHINC/0YDQuNC80LXQvdC10L0g0Logwqslc8K7INGBINC60L7QvdGE0LvQuNC60YLQsNC80LguXG4iCisKKyM6IGFwcGx5LmM6MzYzMworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgY2xlYW5seS5cbiIKK21zZ3N0ciAi0J/QsNGC0Ycg0L/RgNC40LzQtdC90LXQvSDQuiDCqyVzwrsg0LHQtdC3INC+0YjQuNCx0L7Qui5cbiIKKworIzogYXBwbHkuYzozNjU5Cittc2dpZCAicmVtb3ZhbCBwYXRjaCBsZWF2ZXMgZmlsZSBjb250ZW50cyIKK21zZ3N0ciAi0L/QsNGC0Ycg0YPQtNCw0LvQtdC90LjRjyDQvdC1INGD0LTQsNC70LjQuyDRgdC+0LTQtdGA0LbQuNC80L7QtSDRhNCw0LnQu9CwIgorCisjOiBhcHBseS5jOjM3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiVzOiDQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0YLQuNC/IgorCisjOiBhcHBseS5jOjM3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvIgorbXNnc3RyICIlcyDQuNC80LXQtdGCINGC0LjQvyAlbywg0LAg0L7QttC40LTQsNC70YHRjyAlbyIKKworIzogYXBwbHkuYzozODg1IGFwcGx5LmM6Mzg4NyByZWFkLWNhY2hlLmM6ODMwIHJlYWQtY2FjaGUuYzo4NTYKKyM6IHJlYWQtY2FjaGUuYzoxMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0aCAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0L/Rg9GC0Ywgwqslc8K7IgorCisjOiBhcHBseS5jOjM5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IgorbXNnc3RyICIlczog0YPQttC1INGB0L7QtNC10YDQttC40YLRgdGPINCyINC40L3QtNC10LrRgdC1IgorCisjOiBhcHBseS5jOjM5NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlczog0YPQttC1INGB0L7QtNC10YDQttC40YLRgdGPINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUiCisKKyM6IGFwcGx5LmM6Mzk2NgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgItC90L7QstGL0Lkg0YDQtdC20LjQvCDQtNC+0YHRgtGD0L/QsCAoJW8pINC00LvRjyAlcyDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCINGB0YLQsNGA0L7QvNGDINGA0LXQttC40LzRgyDQtNC+0YHRgtGD0L/QsCAoJW8pIgorCisjOiBhcHBseS5jOjM5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICLQvdC+0LLRi9C5INGA0LXQttC40Lwg0LTQvtGB0YLRg9C/0LAgKCVvKSDQtNC70Y8gJXMg0L3QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDRgdGC0LDRgNC+0LzRgyDRgNC10LbQuNC80YMg0LTQvtGB0YLRg9C/0LAgKCVvKSDQtNC70Y8gJXMiCisKKyM6IGFwcGx5LmM6Mzk5MQorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAi0LfQsNGC0YDQvtC90YPRgtGL0Lkg0YTQsNC50Lsgwqslc8K7INC90LDRhdC+0LTQuNGC0YHRjyDQt9CwINGB0LjQvNCy0L7Qu9C40YfQtdGB0LrQvtC5INGB0YHRi9C70LrQvtC5IgorCisjOiBhcHBseS5jOjM5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIlczog0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0LjQvNC10L3QuNGC0Ywg0L/QsNGC0YciCisKKyM6IGFwcGx5LmM6NDAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBwYXRjaCAlcy4uLiIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQv9Cw0YLRh9CwICVz4oCmIgorCisjOiBhcHBseS5jOjQxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi0LjQvdGE0L7RgNC80LDRhtC40Y8g0L7QsSBzaGExINC+0YLRgdGD0YLRgdGC0LLRg9C10YIg0LjQu9C4INCx0LXRgdC/0L7Qu9C10LfQvdCwINC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8gJXMiCisKKyM6IGFwcGx5LmM6NDEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJtb2RlIGNoYW5nZSBmb3IgJXMsIHdoaWNoIGlzIG5vdCBpbiBjdXJyZW50IEhFQUQiCittc2dzdHIgItC40LfQvNC10L3QtdC9INGA0LXQttC40Lwg0LTQu9GPICVzLCDQutC+0YLQvtGA0YvQuSDQvdC1INC90LDRhdC+0LTQuNGC0YHRjyDQsiDRgtC10LrRg9GJ0LXQvCBIRUFEIgorCisjOiBhcHBseS5jOjQxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgKCVzKS4iCittc2dzdHIgItC40L3RhNC+0YDQvNCw0YbQuNGPINC+0LEgc2hhMSDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCINC40LvQuCDQsdC10YHQv9C+0LvQtdC30L3QsCAoJXMpLiIKKworIzogYXBwbHkuYzo0MTE3IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTcgYnVpbHRpbi9yZXNldC5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICLRgdCx0L7QuSBtYWtlX2NhY2hlX2VudHJ5INC00LvRjyDQv9GD0YLQuCDCqyVzwrsiCisKKyM6IGFwcGx5LmM6NDEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQtNC+0LHQsNCy0LjRgtGMICVzINCy0L4g0LLRgNC10LzQtdC90L3Ri9C5INC40L3QtNC10LrRgSIKKworIzogYXBwbHkuYzo0MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggdG8gJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQstGA0LXQvNC10L3QvdGL0Lkg0LjQvdC00LrQtdC60YEg0LIgJXMiCisKKyM6IGFwcGx5LmM6NDI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0YwgJXMg0LjQtyDQuNC90LTQtdC60YHQsCIKKworIzogYXBwbHkuYzo0MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi0L/QvtCy0YDQtdC20LTQtdC90L3Ri9C5INC/0LDRgtGHINC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8gJXMiCisKKyM6IGFwcGx5LmM6NDMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywgc3RhdCDQtNC70Y8g0YHQvtC30LTQsNC90L3QvtCz0L4g0YTQsNC50LvQsCDCqyVzwrsiCisKKyM6IGFwcGx5LmM6NDMxNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQstGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdGL0Lkg0YTQsNC50Lsg0LTQu9GPINGB0L7Qt9C00LDQvdC90L7Qs9C+INGE0LDQudC70LAgJXMiCisKKyM6IGFwcGx5LmM6NDMyMyBhcHBseS5jOjQ0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LfQsNC/0LjRgdGMINCyINC60Y3RiNC1INC00LvRjyAlcyIKKworIzogYXBwbHkuYzo0MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSB0byAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0LIgwqslc8K7IgorCisjOiBhcHBseS5jOjQzNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2xvc2luZyBmaWxlICclcyciCittc2dzdHIgItC30LDQutGA0YvRgtC40LUg0YTQsNC50LvQsCDCqyVzwrsiCisKKyM6IGFwcGx5LmM6NDQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDRhNCw0LnQuyDCqyVzwrsg0YEg0YDQtdC20LjQvNC+0Lwg0LTQvtGB0YLRg9C/0LAgJW8iCisKKyM6IGFwcGx5LmM6NDUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICLQn9Cw0YLRhyAlcyDQv9GA0LjQvNC10L3QtdC9INCx0LXQtyDQvtGI0LjQsdC+0LouIgorCisjOiBhcHBseS5jOjQ1NDYKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAi0LLQvdGD0YLRgNC10L3QvdGP0Y8g0L7RiNC40LHQutCwIgorCisjOiBhcHBseS5jOjQ1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0Li4uIgorbXNnaWRfcGx1cmFsICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3RzLi4uIgorbXNnc3RyWzBdICLQn9GA0LjQvNC10L3QtdC90LjQtSDQv9Cw0YLRh9CwICUlcyDRgSAlZCDQvtGC0LrQsNC30L7QvOKApiIKK21zZ3N0clsxXSAi0J/RgNC40LzQtdC90LXQvdC40LUg0L/QsNGC0YfQsCAlJXMg0YEgJWQg0L7RgtC60LDQt9Cw0LzQuOKApiIKK21zZ3N0clsyXSAi0J/RgNC40LzQtdC90LXQvdC40LUg0L/QsNGC0YfQsCAlJXMg0YEgJWQg0L7RgtC60LDQt9Cw0LzQuOKApiIKK21zZ3N0clszXSAi0J/RgNC40LzQtdC90LXQvdC40LUg0L/QsNGC0YfQsCAlJXMg0YEgJWQg0L7RgtC60LDQt9Cw0LzQuOKApiIKKworIzogYXBwbHkuYzo0NTYwCisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAi0YPRgdC10YfQtdC90LjQtSDQuNC80LXQvdC4IC5yZWog0YTQsNC50LvQsCDQtNC+ICUuKnMucmVqIgorCisjOiBhcHBseS5jOjQ1NjggYnVpbHRpbi9mZXRjaC5jOjgzNyBidWlsdGluL2ZldGNoLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCAlcyIKKworIzogYXBwbHkuYzo0NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgItCR0LvQvtC6IOKEliVkINC/0YDQuNC80LXQvdC10L0g0LHQtdC3INC+0YjQuNCx0L7Qui4iCisKKyM6IGFwcGx5LmM6NDU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgItCR0LvQvtC6IOKEliVkINC+0YLQutC70L7QvdC10L0uIgorCisjOiBhcHBseS5jOjQ2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCBwYXRjaCAnJXMnLiIKK21zZ3N0ciAi0J/QsNGC0Ycgwqslc8K7INC/0YDQvtC/0YPRidC10L0uIgorCisjOiBhcHBseS5jOjQ3MDQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaW5wdXQiCittc2dzdHIgItC90LUg0YDQsNGB0L/QvtC30L3QsNC90L3Ri9C5INCy0LLQvtC0IgorCisjOiBhcHBseS5jOjQ3MjQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRhNCw0LnQuyDQuNC90LTQtdC60YHQsCIKKworIzogYXBwbHkuYzo0ODc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0L/QsNGC0Ycgwqslc8K7OiAlcyIKKworIzogYXBwbHkuYzo0OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gItC/0YDQvtC/0YPRidC10L3QsCAlZCDQvtGI0LjQsdC60LAg0LIg0L/RgNC+0LHQtdC70YzQvdGL0YUg0YHQuNC80LLQvtC70LDRhSIKK21zZ3N0clsxXSAi0L/RgNC+0L/Rg9GJ0LXQvdC+ICVkINC+0YjQuNCx0LrQuCDQsiDQv9GA0L7QsdC10LvRjNC90YvRhSDRgdC40LzQstC+0LvQsNGFIgorbXNnc3RyWzJdICLQv9GA0L7Qv9GD0YnQtdC90L4gJWQg0L7RiNC40LHQvtC6INCyINC/0YDQvtCx0LXQu9GM0L3Ri9GFINGB0LjQvNCy0L7Qu9Cw0YUiCittc2dzdHJbM10gItC/0YDQvtC/0YPRidC10L3QviAlZCDQvtGI0LjQsdC+0Log0LIg0L/RgNC+0LHQtdC70YzQvdGL0YUg0YHQuNC80LLQvtC70LDRhSIKKworIzogYXBwbHkuYzo0OTEyIGFwcGx5LmM6NDkyNworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCDRgdGC0YDQvtC60LAg0LTQvtCx0LDQstC40LvQsCDQvtGI0LjQsdC60Lgg0LIg0L/RgNC+0LHQtdC70YzQvdGL0YUg0YHQuNC80LLQvtC70LDRhS4iCittc2dzdHJbMV0gIiVkINGB0YLRgNC+0LrQuCDQtNC+0LHQsNCy0LjQu9C4INC+0YjQuNCx0LrQuCDQsiDQv9GA0L7QsdC10LvRjNC90YvRhSDRgdC40LzQstC+0LvQsNGFLiIKK21zZ3N0clsyXSAiJWQg0YHRgtGA0L7QuiDQtNC+0LHQsNCy0LjQu9C4INC+0YjQuNCx0LrQuCDQsiDQv9GA0L7QsdC10LvRjNC90YvRhSDRgdC40LzQstC+0LvQsNGFLiIKK21zZ3N0clszXSAiJWQg0YHRgtGA0L7QuiDQtNC+0LHQsNCy0LjQu9C4INC+0YjQuNCx0LrQuCDQsiDQv9GA0L7QsdC10LvRjNC90YvRhSDRgdC40LzQstC+0LvQsNGFLiIKKworIzogYXBwbHkuYzo0OTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkINGB0YLRgNC+0LrQsCDQtNC+0LHQsNCy0LvQtdC90LAg0L/QvtGB0LvQtSDQuNGB0L/RgNCw0LLQu9C10L3QuNGPINC+0YjQuNCx0L7QuiDQsiDQv9GA0L7QsdC10LvQsNGFLiIKK21zZ3N0clsxXSAiJWQg0YHRgtGA0L7QutC4INC00L7QsdCw0LLQu9C10L3QviDQv9C+0YHQu9C1INC40YHQv9GA0LDQstC70LXQvdC40Y8g0L7RiNC40LHQvtC6INCyINC/0YDQvtCx0LXQu9Cw0YUuIgorbXNnc3RyWzJdICIlZCDRgdGC0YDQvtC6INC00L7QsdCw0LLQu9C10L3QviDQv9C+0YHQu9C1INC40YHQv9GA0LDQstC70LXQvdC40Y8g0L7RiNC40LHQvtC6INCyINC/0YDQvtCx0LXQu9Cw0YUuIgorbXNnc3RyWzNdICIlZCDRgdGC0YDQvtC60Lgg0LTQvtCx0LDQstC70LXQvdC+INC/0L7RgdC70LUg0LjRgdC/0YDQsNCy0LvQtdC90LjRjyDQvtGI0LjQsdC+0Log0LIg0L/RgNC+0LHQtdC70LDRhS4iCisKKyM6IGFwcGx5LmM6NDkzNiBidWlsdGluL2FkZC5jOjU0MCBidWlsdGluL212LmM6MzAxIGJ1aWx0aW4vcm0uYzozOTAKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQvdC+0LLRi9C5INGE0LDQudC7INC40L3QtNC10LrRgdCwIgorCisjOiBhcHBseS5jOjQ5NjMgYXBwbHkuYzo0OTY2IGJ1aWx0aW4vYW0uYzoyMjEwIGJ1aWx0aW4vYW0uYzoyMjEzCisjOiBidWlsdGluL2Nsb25lLmM6MTIwIGJ1aWx0aW4vZmV0Y2guYzoxMTggYnVpbHRpbi9tZXJnZS5jOjI3MQorIzogYnVpbHRpbi9wdWxsLmM6MjA3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MDcKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzY2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzY5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg0OSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg1MgorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIwOTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxOTcKK21zZ2lkICJwYXRoIgorbXNnc3RyICLQv9GD0YLRjCIKKworIzogYXBwbHkuYzo0OTY0Cittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAi0L3QtSDQv9GA0LjQvNC10L3Rj9GC0Ywg0LjQt9C80LXQvdC10L3QuNGPINC/0L4g0YPQutCw0LfQsNC90L3QvtC80YMg0L/Rg9GC0LgiCisKKyM6IGFwcGx5LmM6NDk2NworbXNnaWQgImFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgItC/0YDQuNC80LXQvdGP0YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0L/QviDRg9C60LDQt9Cw0L3QvdC+0LzRgyDQv9GD0YLQuCIKKworIzogYXBwbHkuYzo0OTY5IGJ1aWx0aW4vYW0uYzoyMjE5Cittc2dpZCAibnVtIgorbXNnc3RyICLQutC+0LvQuNGH0LXRgdGC0LLQviIKKworIzogYXBwbHkuYzo0OTcwCittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgItGD0LTQsNC70LjRgtGMIDzQutC+0LvQuNGH0LXRgdGC0LLQvj4g0LLQtdC00YPRidC40YUg0LrQvtGB0YvRhSDRh9C10YDRgiDQuNC3INGC0YDQsNC00LjRhtC40L7QvdC90YvRhSDQv9GD0YLQtdC5INGB0L/QuNGB0LrQsCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGFwcGx5LmM6NDk3MworbXNnaWQgImlnbm9yZSBhZGRpdGlvbnMgbWFkZSBieSB0aGUgcGF0Y2giCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQtNC+0LHQsNCy0LvQtdC90LjRjywg0YHQtNC10LvQsNC90L3Ri9C1INGN0YLQuNC8INC/0LDRgtGH0LXQvCIKKworIzogYXBwbHkuYzo0OTc1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICLQstC80LXRgdGC0L4g0L/RgNC40LzQtdC90LXQvdC40Y8g0L/QsNGC0YfQsCDQstGL0LLQtdGB0YLQuCDRgdGC0LDRgtC40YHRgtC40LrRgyDQtNC+0LHQsNCy0LvQtdC90LjQuSDQuCDRg9C00LDQu9C10L3QuNC5INC00LvRjyDQstCy0L7QtNCwIgorCisjOiBhcHBseS5jOjQ5NzkKK21zZ2lkICJzaG93IG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC60L7Qu9C40YfQtdGB0YLQstC+INC00L7QsdCw0LLQu9C10L3QvdGL0YUg0Lgg0YPQtNCw0LvQtdC90L3Ri9GFINGB0YLRgNC+0Log0LIg0LTQtdGB0Y/RgtC40YfQvdC+0Lwg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LgiCisKKyM6IGFwcGx5LmM6NDk4MQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgItCy0LzQtdGB0YLQviDQv9GA0LjQvNC10L3QtdC90LjRjyDQv9Cw0YLRh9CwINCy0YvQstC10YHRgtC4INGB0LLQvtC00LrRgyDQuNC30LzQtdC90LXQvdC40Lkg0LTQu9GPINCy0LLQvtC00LAiCisKKyM6IGFwcGx5LmM6NDk4MworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUiCittc2dzdHIgItCy0LzQtdGB0YLQviDQv9GA0LjQvNC10L3QtdC90LjRjyDQv9Cw0YLRh9CwINC/0YDQvtCy0LXRgNC40YLRjCDQv9C+0LTRhdC+0LTQuNGCINC70Lgg0L7QvSIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAibWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICLQv9GA0L7QstC10YDQuNGC0YwsINGH0YLQviDQv9Cw0YLRhyDQv9GA0LjQvNC10L3Rj9C10YLRgdGPINC6INGC0LXQutGD0YnQtdC80YMg0LjQvdC00LXQutGB0YMiCisKKyM6IGFwcGx5LmM6NDk4NworbXNnaWQgIm1hcmsgbmV3IGZpbGVzIHdpdGggYGdpdCBhZGQgLS1pbnRlbnQtdG8tYWRkYCIKK21zZ3N0ciAi0L/QvtC80LXRh9Cw0YLRjCDQvdC+0LLRi9C1INGE0LDQudC70Ysg0YEgwqtnaXQgYWRkIC0taW50ZW50LXRvLWFkZMK7IgorCisjOiBhcHBseS5jOjQ5ODkKK21zZ2lkICJhcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0L/RgNC40LzQtdC90LjRgtGMINC/0LDRgtGHLCDQvdC1INC40LfQvNC10L3Rj9GPINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIgorCisjOiBhcHBseS5jOjQ5OTEKK21zZ2lkICJhY2NlcHQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgb3V0c2lkZSB0aGUgd29ya2luZyBhcmVhIgorbXNnc3RyICLQv9GA0LjQvdGP0YLRjCDQv9Cw0YLRhywg0LrQvtGC0L7RgNGL0Lkg0LfQsNGC0YDQsNCz0LjQstCw0LXRgiDRhNCw0LnQu9GLINC30LAg0YDQsNCx0L7Rh9C40Lwg0LrQsNGC0LDQu9C+0LPQvtC8IgorCisjOiBhcHBseS5jOjQ5OTQKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAi0LAg0YLQsNC60LbQtSDQv9GA0LjQvNC10L3QuNGC0Ywg0L/QsNGC0YcgKNC40YHQv9C+0LvRjNC30YPQudGC0LUg0YEgLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKKworIzogYXBwbHkuYzo0OTk2Cittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAi0L/QvtC/0YvRgtCw0YLRjNGB0Y8g0YHQtNC10LvQsNGC0Ywg0YLRgNC10YXRhdC+0LTQvtCy0L7QtSDRgdC70LjRj9C90LjQtSwg0LXRgdC70Lgg0L/QsNGC0Ycg0L3QtSDQv9GA0LjQvNC10L3Rj9C10YLRgdGPIgorCisjOiBhcHBseS5jOjQ5OTgKK21zZ2lkICJidWlsZCBhIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiBlbWJlZGRlZCBpbmRleCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0L/QvtGB0YLRgNC+0LjRgtGMINCy0YDQtdC80LXQvdC90YvQuSDQuNC90LTQtdC60YEsINC+0YHQvdC+0LLQsNC90L3Ri9C5INC90LAg0LLRgdGC0YDQvtC10L3QvdC+0Lkg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L7QsSDQuNC90LTQtdC60YHQtSIKKworIzogYXBwbHkuYzo1MDAxIGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzMgYnVpbHRpbi9scy1maWxlcy5jOjUyNAorbXNnaWQgInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICLQv9GD0YLQuCwg0L7RgtC00LXQu9GR0L3QvdGL0LUg0J3Qo9Cb0JXQktCr0Jwg0YHQuNC80LLQvtC70L7QvCIKKworIzogYXBwbHkuYzo1MDAzCittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICLRg9C00L7RgdGC0L7QstC10YDQuNGC0YzRgdGPLCDRh9GC0L4g0L/QviDQutGA0LDQudC90LXQuSDQvNC10YDQtSA8bj4g0YHRgtGA0L7QuiDQutC+0L3RgtC10LrRgdGC0LAg0YHQvtCy0L/QsNC00LDRjtGCIgorCisjOiBhcHBseS5jOjUwMDQgYnVpbHRpbi9hbS5jOjIxOTggYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OSBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzE3IGJ1aWx0aW4vcmViYXNlLmM6MTQxNQorbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAi0LTQtdC50YHRgtCy0LjQtSIKKworIzogYXBwbHkuYzo1MDA1Cittc2dpZCAiZGV0ZWN0IG5ldyBvciBtb2RpZmllZCBsaW5lcyB0aGF0IGhhdmUgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgItC+0L/RgNC10LTQtdC70Y/RgtGMINC90L7QstGL0LUg0LjQu9C4INC80L7QtNC40YTQuNGG0LjRgNC+0LLQsNC90L3Ri9C1INGB0YLRgNC+0LrQuCwg0YMg0LrQvtGC0L7RgNGL0YUg0LXRgdGC0Ywg0L7RiNC40LHQutC4INCyINC/0YDQvtCx0LXQu9GM0L3Ri9GFINGB0LjQvNCy0L7Qu9Cw0YUiCisKKyM6IGFwcGx5LmM6NTAwOCBhcHBseS5jOjUwMTEKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINCyINC/0YDQvtCx0LXQu9GM0L3Ri9GFINGB0LjQvNCy0L7Qu9Cw0YUg0L/RgNC4INC/0L7QuNGB0LrQtSDQutC+0L3RgtC10LrRgdGC0LAiCisKKyM6IGFwcGx5LmM6NTAxNAorbXNnaWQgImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIgorbXNnc3RyICLQv9GA0LjQvNC10L3QuNGC0Ywg0L/QsNGC0Ycg0YEg0L7QsdGA0LDRidC10L3QuNC10Lwg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBhcHBseS5jOjUwMTYKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAi0L3QtSDQvtC20LjQtNCw0YLRjCDQutCw0Log0LzQuNC90LjQvNGD0Lwg0L7QtNC90L7QuSDRgdGC0YDQvtC60Lgg0LrQvtC90YLQtdC60YHRgtCwIgorCisjOiBhcHBseS5jOjUwMTgKK21zZ2lkICJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIKK21zZ3N0ciAi0L7RgdGC0LDQstC40YLRjCDQvtGC0LrQu9C+0L3QtdC90L3Ri9C1INCx0LvQvtC60Lgg0LjQt9C80LXQvdC10L3QuNC5INCyINGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LjRhSAqLnJlaiDRhNCw0LnQu9Cw0YUiCisKKyM6IGFwcGx5LmM6NTAyMAorbXNnaWQgImFsbG93IG92ZXJsYXBwaW5nIGh1bmtzIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0L/QtdGA0LXQutGA0YvQstCw0Y7RidC40LXRgdGPINCx0LvQvtC60Lgg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBhcHBseS5jOjUwMjEgYnVpbHRpbi9hZGQuYzoyOTEgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMgorIzogYnVpbHRpbi9jb21taXQuYzoxMzE3IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk4IGJ1aWx0aW4vZnNjay5jOjc4NgorIzogYnVpbHRpbi9sb2cuYzoyMDQ1IGJ1aWx0aW4vbXYuYzoxMjMgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICLQsdGL0YLRjCDQvNC90L7Qs9C+0YHQu9C+0LLQvdC10LUiCisKKyM6IGFwcGx5LmM6NTAyMworbXNnaWQgInRvbGVyYXRlIGluY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgbmV3LWxpbmUgYXQgdGhlIGVuZCBvZiBmaWxlIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0L3QtdC60L7RgNGA0LXQutGC0L3QviDQvtC/0YDQtdC00LXQu9C10L3QvdGL0LUg0L/RgNC+0L/Rg9GJ0LXQvdC90YvQtSDQv9GD0YHRgtGL0LUg0YHRgtGA0L7QutC4INCyINC60L7QvdGG0LUg0YTQsNC50LvQsCIKKworIzogYXBwbHkuYzo1MDI2Cittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICLQvdC1INC00L7QstC10YDRj9GC0Ywg0LrQvtC70LjRh9C10YHRgtCy0YMg0YHRgtGA0L7QuiDQuNC3INC30LDQs9C+0LvQvtCy0LrQsCDQsdC70L7QutCwINC40LfQvNC10L3QtdC90LjQuSIKKworIzogYXBwbHkuYzo1MDI4IGJ1aWx0aW4vYW0uYzoyMjA3Cittc2dpZCAicm9vdCIKK21zZ3N0ciAi0LrQvtGA0LXQvdGMIgorCisjOiBhcHBseS5jOjUwMjkKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMIDzQutC+0YDQtdC90Yw+INGB0L/QtdGA0LXQtNC4INC60L4g0LLRgdC10Lwg0LjQvNC10L3QsNC8INGE0LDQudC70L7QsiIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgWzzQvtC/0YbQuNC4Pl0gPNGD0LrQsNC30LDRgtC10LvRjC3QtNC10YDQtdCy0LA+IFs80L/Rg9GC0Yw+4oCmXSIKKworIzogYXJjaGl2ZS5jOjE1Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzoxNgorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiAiCisiWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDzRgNC10L/QvtC30LjRgtC+0YDQuNC5PiBbLS1leGVjIDzQutC+0LzQsNC90LTQsD5dIFs80L7Qv9GG0LjQuD5dIDzRg9C60LDQt9Cw0YLQtdC70Ywt0LTQtdGA0LXQstCwPiBbPNC/0YPRgtGMPuKApl0iCisKKyM6IGFyY2hpdmUuYzoxNworbXNnaWQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDzRgNC10L/QvtC30LjRgtC+0YDQuNC5PiBbLS1leGVjIDzQutC+0LzQsNC90LTQsD5dIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjM3MiBidWlsdGluL2FkZC5jOjE3NyBidWlsdGluL2FkZC5jOjUxNiBidWlsdGluL3JtLmM6Mjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiCittc2dzdHIgItGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgCDQv9GD0YLQuCDCqyVzwrsg0L3QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDQvdC4INC+0LTQvdC+0LzRgyDRhNCw0LnQu9GDIgorCisjOiBhcmNoaXZlLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmOiAlLipzIgorbXNnc3RyICLQvdC10YIg0YLQsNC60L7QuSDRgdGB0YvQu9C60Lg6ICUuKnMiCisKKyM6IGFyY2hpdmUuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICVzIgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNC+0LUg0LjQvNGPINC+0LHRitC10LrRgtCwOiAlcyIKKworIzogYXJjaGl2ZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB0cmVlIG9iamVjdDogJXMiCittc2dzdHIgItC90LXQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C5INC+0LHRitC10LrRgiDQtNC10YDQtdCy0LA6ICVzIgorCisjOiBhcmNoaXZlLmM6NDI0Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgItGC0LXQutGD0YnQuNC5INGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzINC90LUg0L7RgtGB0LvQtdC20LjQstCw0LXRgtGB0Y8iCisKKyM6IGFyY2hpdmUuYzo0NTUKK21zZ2lkICJmbXQiCittc2dzdHIgItGE0L7RgNC80LDRgiIKKworIzogYXJjaGl2ZS5jOjQ1NQorbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICLRhNC+0YDQvNCw0YIg0LDRgNGF0LjQstCwIgorCisjOiBhcmNoaXZlLmM6NDU2IGJ1aWx0aW4vbG9nLmM6MTU1NworbXNnaWQgInByZWZpeCIKK21zZ3N0ciAi0L/RgNC10YTQuNC60YEiCisKKyM6IGFyY2hpdmUuYzo0NTcKK21zZ2lkICJwcmVwZW5kIHByZWZpeCB0byBlYWNoIHBhdGhuYW1lIGluIHRoZSBhcmNoaXZlIgorbXNnc3RyICLQtNC+0LHQsNCy0LvRj9GC0Ywg0L/RgNC10YTQuNC60YEg0L/QtdGA0LXQtCDQutCw0LbQtNGL0Lwg0L/Rg9GC0LXQvCDRhNCw0LnQu9CwINCyINCw0YDRhdC40LLQtSIKKworIzogYXJjaGl2ZS5jOjQ1OCBidWlsdGluL2JsYW1lLmM6ODIxIGJ1aWx0aW4vYmxhbWUuYzo4MjIKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTcgYnVpbHRpbi9jb25maWcuYzoxMjkgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwOTEKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDkzIGJ1aWx0aW4vZ3JlcC5jOjg5NSBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTYwIGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjMgYnVpbHRpbi9ub3Rlcy5jOjQxMgorIzogYnVpbHRpbi9ub3Rlcy5jOjU3OCBidWlsdGluL3JlYWQtdHJlZS5jOjEyMyBwYXJzZS1vcHRpb25zLmg6MTc3Cittc2dpZCAiZmlsZSIKK21zZ3N0ciAi0YTQsNC50LsiCisKKyM6IGFyY2hpdmUuYzo0NTkgYnVpbHRpbi9hcmNoaXZlLmM6OTAKK21zZ2lkICJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiCittc2dzdHIgItC30LDQv9C40YHRjCDQsNGA0YXQuNCy0LAg0LIg0Y3RgtC+0YIg0YTQsNC50LsiCisKKyM6IGFyY2hpdmUuYzo0NjEKK21zZ2lkICJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLRh9C40YLQsNGC0YwgLmdpdGF0dHJpYnV0ZXMg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSIKKworIzogYXJjaGl2ZS5jOjQ2MgorbXNnaWQgInJlcG9ydCBhcmNoaXZlZCBmaWxlcyBvbiBzdGRlcnIiCittc2dzdHIgItC+0YLRh9C10YIg0L7QsSDQsNGA0YXQuNCy0LjRgNC+0LLQsNC90L3Ri9GFINGE0LDQudC70LDRhSDQsiBzdGRlcnIiCisKKyM6IGFyY2hpdmUuYzo0NjMKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICLRgtC+0LvRjNC60L4g0YXRgNCw0L3QtdC90LjQtSIKKworIzogYXJjaGl2ZS5jOjQ2NAorbXNnaWQgImNvbXByZXNzIGZhc3RlciIKK21zZ3N0ciAi0YHQttC40LzQsNGC0Ywg0LHRi9GB0YLRgNC10LUiCisKKyM6IGFyY2hpdmUuYzo0NzIKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgItGB0LbQuNC80LDRgtGMINC70YPRh9GI0LUiCisKKyM6IGFyY2hpdmUuYzo0NzUKK21zZ2lkICJsaXN0IHN1cHBvcnRlZCBhcmNoaXZlIGZvcm1hdHMiCittc2dzdHIgItC/0LXRgNC10YfQuNGB0LvQuNGC0Ywg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdC80YvQtSDRhNC+0YDQvNCw0YLRiyDQsNGA0YXQuNCy0L7QsiIKKworIzogYXJjaGl2ZS5jOjQ3NyBidWlsdGluL2FyY2hpdmUuYzo5MSBidWlsdGluL2Nsb25lLmM6MTEwIGJ1aWx0aW4vY2xvbmUuYzoxMTMKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzc4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODU4Cittc2dpZCAicmVwbyIKK21zZ3N0ciAi0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogYXJjaGl2ZS5jOjQ3OCBidWlsdGluL2FyY2hpdmUuYzo5MgorbXNnaWQgInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IgorbXNnc3RyICLQv9C+0LvRg9GH0LjRgtGMINCw0YDRhdC40LIg0LjQtyDQstC90LXRiNC90LXQs9C+IDzRgNC10L/QvtC30LjRgtC+0YDQuNGPPiIKKworIzogYXJjaGl2ZS5jOjQ3OSBidWlsdGluL2FyY2hpdmUuYzo5MyBidWlsdGluL2RpZmZ0b29sLmM6NzA3CisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAi0LrQvtC80LDQvdC00LAiCisKKyM6IGFyY2hpdmUuYzo0ODAgYnVpbHRpbi9hcmNoaXZlLmM6OTQKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgItC/0YPRgtGMINC6INC60L7QvNCw0L3QtNC1IGdpdC11cGxvYWQtYXJjaGl2ZSDQvdCwINC80LDRiNC40L3QtSDRgSDQstC90LXRiNC90LjQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC10LwiCisKKyM6IGFyY2hpdmUuYzo0ODcKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLXJlbW90ZSIKK21zZ3N0ciAi0J3QtdC+0LbQuNC00LDQvdC90LDRjyDQvtC/0YbQuNGPIC0tcmVtb3RlIgorCisjOiBhcmNoaXZlLmM6NDg5Cittc2dpZCAiT3B0aW9uIC0tZXhlYyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1yZW1vdGUiCittc2dzdHIgItCe0L/RhtC40Y8gLS1leGVjINC80L7QttC10YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjyDRgtC+0LvRjNC60L4g0LLQvNC10YHRgtC1INGBIC0tcmVtb3RlIgorCisjOiBhcmNoaXZlLmM6NDkxCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgItCd0LXQvtC20LjQtNCw0L3QvdCw0Y8g0L7Qv9GG0LjRjyAtLW91dHB1dCIKKworIzogYXJjaGl2ZS5jOjUxMworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGFyY2hpdmUgZm9ybWF0ICclcyciCittc2dzdHIgItCd0LXQuNC30LLQtdGB0YLQvdGL0Lkg0YTQvtGA0LzQsNGCINCw0YDRhdC40LLQsCDCqyVzwrsiCisKKyM6IGFyY2hpdmUuYzo1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXJndW1lbnQgbm90IHN1cHBvcnRlZCBmb3IgZm9ybWF0ICclcyc6IC0lZCIKK21zZ3N0ciAi0JDRgNCz0YPQvNC10L3RgiDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y8g0LTQu9GPINGE0L7RgNC80LDRgtCwIMKrJXPCuzogLSVkIgorCisjOiBhcmNoaXZlLXRhci5jOjEyNSBhcmNoaXZlLXppcC5jOjM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyZWFtIGJsb2IgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0L/QvtGC0L7QuiDQtNCy0L7QuNGH0L3QvtCz0L4g0L7QsdGK0LXQutGC0LAgJXMiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjYwIGFyY2hpdmUtemlwLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiCittc2dzdHIgItC90LXQv9C+0LTQtNC10YDQttC40LLQsNC10LzRi9C5INGA0LXQttC40Lwg0LTQvtGB0YLRg9C/0LAg0Log0YTQsNC50LvRgzogMCVvIChTSEExOiAlcykiCisKKyM6IGFyY2hpdmUtdGFyLmM6Mjg3IGFyY2hpdmUtemlwLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCAlcyIKKworIzogYXJjaGl2ZS10YXIuYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICclcycgZmlsdGVyIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9GD0YHRgtC40YLRjCDRhNC40LvRjNGC0YAgwqslc8K7IgorCisjOiBhcmNoaXZlLXRhci5jOjQ2MgorbXNnaWQgInVuYWJsZSB0byByZWRpcmVjdCBkZXNjcmlwdG9yIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10L3QsNC/0YDQsNCy0LjRgtGMINC00LXRgdC60YDQuNC/0YLQvtGAIgorCisjOiBhcmNoaXZlLXRhci5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbHRlciByZXBvcnRlZCBlcnJvciIKK21zZ3N0ciAi0YTQuNC70YzRgtGAIMKrJXPCuyDRgdC+0L7QsdGJ0LjQuyDQvtCxINC+0YjQuNCx0LrQtSIKKworIzogYXJjaGl2ZS16aXAuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCBpcyBub3QgdmFsaWQgVVRGLTg6ICVzIgorbXNnc3RyICLQv9GD0YLRjCDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQvCBVVEYtODogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICLQv9GD0YLRjCDRgdC70LjRiNC60L7QvCDQtNC70LjQvdC90YvQuSAoJWQg0YHQuNC80LLQvtC70L7QsiwgU0hBMTogJXMpOiAlcyIKKworIzogYXJjaGl2ZS16aXAuYzo0NzQgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0YHQttCw0YLQuNGPICglZCkiCisKKyM6IGFyY2hpdmUtemlwLmM6NjA5CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWVzdGFtcCB0b28gbGFyZ2UgZm9yIHRoaXMgc3lzdGVtOiAlPFBSSXVNQVg+IgorbXNnc3RyICLQvtGC0LzQtdGC0LrQsCDQstGA0LXQvNC10L3QuCDRgdC70LjRiNC60L7QvCDQsdC+0LvRjNGI0LDRjyDQtNC70Y8g0Y3RgtC+0Lkg0YHQuNGB0YLQtdC80Ys6ICU8UFJJdU1BWD4iCisKKyM6IGF0dHIuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZSIKK21zZ3N0ciAiJS4qcyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LTQvtC/0YPRgdGC0LjQvNGL0Lwg0LjQvNC10L3QtdC8INCw0YLRgNC40LHRg9GC0LAiCisKKyM6IGF0dHIuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbm90IGFsbG93ZWQ6ICVzOiVkIgorbXNnc3RyICIlcyDQvdC1INGA0LDQt9GA0LXRiNC10L3QvjogJXM6JWQiCisKKyM6IGF0dHIuYzo0MDgKK21zZ2lkICIiCisiTmVnYXRpdmUgcGF0dGVybnMgYXJlIGlnbm9yZWQgaW4gZ2l0IGF0dHJpYnV0ZXNcbiIKKyJVc2UgJ1xcIScgZm9yIGxpdGVyYWwgbGVhZGluZyBleGNsYW1hdGlvbi4iCittc2dzdHIgItCe0YLRgNC40YbQsNGO0YnQuNC1INGI0LDQsdC70L7QvdGLINCyINCw0YLRgNC40LHRg9GC0LDRhSBnaXQg0LjQs9C90L7RgNC40YDRg9GO0YLRgdGPLlxu0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq1xcIcK7INC00LvRjyDQsdGD0LrQstCw0LvRjNC90L7Qs9C+INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPINGB0LjQvNCy0L7Qu9CwINCyINC30L3QsNGH0LXQvdC40LggwqvQstC+0YHQutC70LjRhtCw0YLQtdC70YzQvdGL0Lkg0LfQvdCw0LrCuy4iCisKKyM6IGJpc2VjdC5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWRseSBxdW90ZWQgY29udGVudCBpbiBmaWxlICclcyc6ICVzIgorbXNnc3RyICLQn9C70L7RhdC+0LUg0YHQvtC00LXRgNC20LjQvNC+0LUg0YTQsNC50LvQsCDCqyVzwrs6ICVzIgorCisjOiBiaXNlY3QuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQv9GA0L7QtNC+0LvQttC40YLRjCDQsdC40L3QsNGA0L3Ri9C5INC/0L7QuNGB0LohXG4iCisKKyM6IGJpc2VjdC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBjb21taXQgbmFtZSAlcyIKK21zZ3N0ciAi0J3QtdC00L7Qv9GD0YHRgtC40LzQvtC1INC40LzRjyDQutC+0LzQvNC40YLQsCAlcyIKKworIzogYmlzZWN0LmM6NzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBiYWQuXG4iCisiVGhpcyBtZWFucyB0aGUgYnVnIGhhcyBiZWVuIGZpeGVkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgItCR0LDQt9CwINGB0LvQuNGP0L3QuNGPICVzINGP0LLQu9GP0LXRgtGB0Y8g0L/Qu9C+0YXQuNC8INC60L7QvNC80LjRgtC+0LwuXG7QrdGC0L4g0LfQvdCw0YfQuNGCLCDRh9GC0L4g0L7RiNC40LHQutCwINCx0YvQu9CwINC40YHQv9GA0LDQstC70LXQvdCwINCz0LTQtS3RgtC+INC80LXQttC00YMgJXMg0LggWyVzXS5cbiIKKworIzogYmlzZWN0LmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBuZXcuXG4iCisiVGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgItCR0LDQt9CwINGB0LvQuNGP0L3QuNGPICVzINGP0LLQu9GP0LXRgtGB0Y8g0L3QvtCy0L7QuS5cbtCh0LLQvtC50YHRgtCy0L4g0LHRi9C70L4g0LjQt9C80LXQvdC10L3QviDQs9C00LUt0YLQviDQvNC10LbQtNGDICVzINC4IFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAi0JHQsNC30LAg0YHQu9C40Y/QvdC40Y8gJXMg0Y/QstC70Y/QtdGC0YHRjyAlcy5cbtCt0YLQviDQt9C90LDRh9C40YIsINGH0YLQviDCqyVzwrsg0LrQvtC80LzQuNGCINC90LDRhdC+0LTQuNGC0YHRjyDQs9C00LUt0YLQviDQvNC10LbQtNGDICVzINC4IFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU29tZSAlcyByZXZzIGFyZSBub3QgYW5jZXN0b3JzIG9mIHRoZSAlcyByZXYuXG4iCisiZ2l0IGJpc2VjdCBjYW5ub3Qgd29yayBwcm9wZXJseSBpbiB0aGlzIGNhc2UuXG4iCisiTWF5YmUgeW91IG1pc3Rvb2sgJXMgYW5kICVzIHJldnM/XG4iCittc2dzdHIgItCd0LXRgdC60L7Qu9GM0LrQviAlcyDQutC+0LzQvNC40YLQvtCyINC90LUg0Y/QstC70Y/RjtGC0YHRjyDQv9GA0LXQtNC60LDQvNC4ICVzINC60L7QvNC80LjRgtCwLlxu0JIg0Y3RgtC+0Lwg0YHQu9GD0YfQsNC1IGdpdCBiaXNlY3Qg0L3QtSDQvNC+0LbQtdGCINGA0LDQsdC+0YLQsNGC0Ywg0L/RgNCw0LLQuNC70YzQvdC+Llxu0JLQvtC30LzQvtC20L3Qviwg0LLRiyDQv9C10YDQtdC/0YPRgtCw0LvQuCDRgNC10LTQsNC60YbQuNC4ICVzINC4ICVzINC80LXRgdGC0LDQvNC4P1xuIgorCisjOiBiaXNlY3QuYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBtZXJnZSBiYXNlIGJldHdlZW4gJXMgYW5kIFslc10gbXVzdCBiZSBza2lwcGVkLlxuIgorIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCAlcyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgJXMuXG4iCisiV2UgY29udGludWUgYW55d2F5LiIKK21zZ3N0ciAi0JHQsNC30LAg0YHQu9C40Y/QvdC40Y8g0LzQtdC20LTRgyAlcyDQuCBbJXNdINC00L7Qu9C20L3QviDQsdGL0YLRjCDQv9GA0L7Qv9GD0YnQtdC90LAuXG7Qn9C+0Y3RgtC+0LzRgyDQvNGLINC90LUg0LzQvtC20LXQvCDQsdGL0YLRjCDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INC/0LXRgNCy0YvQuSAlcyDQutC+0LzQvNC40YIg0L3QsNGF0L7QtNC40YLRgdGPINC80LXQttC00YMgJXMg0LggJXMuXG7QndC+INCy0YHQtSDQttC1INC/0YDQvtC00L7Qu9C20LDQtdC8INC/0L7QuNGB0LouIgorCisjOiBiaXNlY3QuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIKK21zZ3N0ciAi0JHQuNC90LDRgNC90YvQuSDQv9C+0LjRgdC6OiDQsdCw0LfQsCDRgdC70LjRj9C90LjRjyDQtNC+0LvQttC90LAg0LHRi9GC0Ywg0L/RgNC+0LLQtdGA0LXQvdCwXG4iCisKKyM6IGJpc2VjdC5jOjg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJhICVzIHJldmlzaW9uIGlzIG5lZWRlZCIKK21zZ3N0ciAi0L3Rg9C20L3QviDRg9C60LDQt9Cw0YLRjCAlcyDRgNC10LTQsNC60YbQuNGOIgorCisjOiBiaXNlY3QuYzo4ODQgYnVpbHRpbi9ub3Rlcy5jOjE3NyBidWlsdGluL3RhZy5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDRhNCw0LnQuyDCqyVzwrsiCisKKyM6IGJpc2VjdC5jOjkyOCBidWlsdGluL21lcmdlLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YTQsNC50Lsgwqslc8K7IgorCisjOiBiaXNlY3QuYzo5NTgKK21zZ2lkICJyZWFkaW5nIGJpc2VjdCByZWZzIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INGH0YLQtdC90LjQuCDRgdGB0YvQu9C+0Log0LTQstC+0LjRh9C90L7Qs9C+INC/0L7QuNGB0LrQsCIKKworIzogYmlzZWN0LmM6OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHdhcyBib3RoICVzIGFuZCAlc1xuIgorbXNnc3RyICIlcyDQsdGL0LvQsCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0LggJXMg0LggJXNcbiIKKworIzogYmlzZWN0LmM6OTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0ZXN0YWJsZSBjb21taXQgZm91bmQuXG4iCisiTWF5YmUgeW91IHN0YXJ0ZWQgd2l0aCBiYWQgcGF0aCBwYXJhbWV0ZXJzP1xuIgorbXNnc3RyICLQotC10YHRgtC40YDRg9C10LzRi9C5INC60L7QvNC80LjRgiDQvdC1INC90LDQudC00LXQvS5cbtCS0L7Qt9C80L7QttC90L4sINCy0Ysg0L3QsNGH0LDQu9C4INC/0L7QuNGB0Log0YEg0YPQutCw0LfQsNC90LjQtdC8INC90LXQv9GA0LDQstC40LvRjNC90L7Qs9C+INC/0LDRgNCw0LzQtdGC0YDQsCDQv9GD0YLQuD9cbiIKKworIzogYmlzZWN0LmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICIocm91Z2hseSAlZCBzdGVwKSIKK21zZ2lkX3BsdXJhbCAiKHJvdWdobHkgJWQgc3RlcHMpIgorbXNnc3RyWzBdICIo0L/RgNC40LzQtdGA0L3QviAlZCDRiNCw0LMpIgorbXNnc3RyWzFdICIo0L/RgNC40LzQtdGA0L3QviAlZCDRiNCw0LPQsCkiCittc2dzdHJbMl0gIijQv9GA0LjQvNC10YDQvdC+ICVkINGI0LDQs9C+0LIpIgorbXNnc3RyWzNdICIo0L/RgNC40LzQtdGA0L3QviAlZCDRiNCw0LPQvtCyKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBsYXN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCAiKHJvdWdobHkgJWQKKyMuIHN0ZXBzKSIgdHJhbnNsYXRpb24uCisjOiBiaXNlY3QuYzoxMDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogJWQgcmV2aXNpb24gbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIKK21zZ2lkX3BsdXJhbCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIKK21zZ3N0clswXSAi0JHQuNC90LDRgNC90YvQuSDQv9C+0LjRgdC6OiAlZCDRgNC10LTQsNC60YbQuNGOINC+0YHRgtCw0LvQvtGB0Ywg0L/RgNC+0LLQtdGA0LjRgtGMINC/0L7RgdC70LUg0Y3RgtC+0LkgJXNcbiIKK21zZ3N0clsxXSAi0JHQuNC90LDRgNC90YvQuSDQv9C+0LjRgdC6OiAlZCDRgNC10LTQsNC60YbQuNC4INC+0YHRgtCw0LvQvtGB0Ywg0L/RgNC+0LLQtdGA0LjRgtGMINC/0L7RgdC70LUg0Y3RgtC+0LkgJXNcbiIKK21zZ3N0clsyXSAi0JHQuNC90LDRgNC90YvQuSDQv9C+0LjRgdC6OiAlZCDRgNC10LTQsNC60YbQuNC5INC+0YHRgtCw0LvQvtGB0Ywg0L/RgNC+0LLQtdGA0LjRgtGMINC/0L7RgdC70LUg0Y3RgtC+0LkgJXNcbiIKK21zZ3N0clszXSAi0JHQuNC90LDRgNC90YvQuSDQv9C+0LjRgdC6OiAlZCDRgNC10LTQsNC60YbQuNC5INC+0YHRgtCw0LvQvtGB0Ywg0L/RgNC+0LLQtdGA0LjRgtGMINC/0L7RgdC70LUg0Y3RgtC+0LkgJXNcbiIKKworIzogYmxhbWUuYzoxNzk0Cittc2dpZCAiLS1jb250ZW50cyBhbmQgLS1yZXZlcnNlIGRvIG5vdCBibGVuZCB3ZWxsLiIKK21zZ3N0ciAiLS1jb250ZW50cyDQuCAtLXJldmVyc2Ug0L3QtSDQvtGH0LXQvdGMINGB0L7Rh9C10YLQsNGO0YLRgdGPLiIKKworIzogYmxhbWUuYzoxODA4Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbnRlbnRzIHdpdGggZmluYWwgY29tbWl0IG9iamVjdCBuYW1lIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIC0tY29udGVudHMg0YEg0YPQutCw0LfQsNC90LjQtdC8INGE0LjQvdCw0LvRjNC90L7Qs9C+INC40LzQtdC90Lgg0L7QsdGK0LXQutGC0LAiCisKKyM6IGJsYW1lLmM6MTgyOQorbXNnaWQgIi0tcmV2ZXJzZSBhbmQgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSBzcGVjaWZpZWQgbGF0ZXN0IGNvbW1pdCIKK21zZ3N0ciAi0L/RgNC4IC0tcmV2ZXJzZSDQuCAtLWZpcnN0LXBhcmVudCDQstC80LXRgdGC0LUg0L3Rg9C20L3QviDRg9C60LDQt9GL0LLQsNGC0Ywg0LrQvtC90LrRgNC10YLQvdGL0Lkg0L/QvtGB0LvQtdC00L3QuNC5INC60L7QvNC80LjRgiIKKworIzogYmxhbWUuYzoxODM4IGJ1bmRsZS5jOjE2NCByZWYtZmlsdGVyLmM6MjA3NyByZW1vdGUuYzoxOTM4IHNlcXVlbmNlci5jOjIwMzAKKyM6IHNlcXVlbmNlci5jOjQyMjQgYnVpbHRpbi9jb21taXQuYzoxMDE3IGJ1aWx0aW4vbG9nLmM6MzgyIGJ1aWx0aW4vbG9nLmM6OTQwCisjOiBidWlsdGluL2xvZy5jOjE0MjggYnVpbHRpbi9sb2cuYzoxODA0IGJ1aWx0aW4vbG9nLmM6MjA5NAorIzogYnVpbHRpbi9tZXJnZS5jOjQxNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNDAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTU1CisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTkyCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INC40L3QuNGG0LjQsNC70LjQt9Cw0YbQuNC4INC/0YDQvtGF0L7QtNCwINC/0L4g0YDQtdC00LDQutGG0LjRj9C8IgorCisjOiBibGFtZS5jOjE4NTYKK21zZ2lkICIiCisiLS1yZXZlcnNlIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgcmFuZ2UgYWxvbmcgZmlyc3QtcGFyZW50IGNoYWluIgorbXNnc3RyICLQv9GA0Lgg0YPQutCw0LfQsNC90LjQuCAtLXJldmVyc2Ug0LggLS1maXJzdC1wYXJlbnQg0LLQvNC10YHRgtC1LCDRgtGA0LXQsdGD0LXRgtGB0Y8g0YLQsNC60LbQtSDRg9C60LDQt9Cw0YLRjCDQtNC40LDQv9Cw0LfQvtC9INC/0L4g0YbQtdC/0L7Rh9C60LUg0L/QtdGA0LLQvtCz0L4g0YDQvtC00LjRgtC10LvRjyIKKworIzogYmxhbWUuYzoxODY3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcGF0aCAlcyBpbiAlcyIKK21zZ3N0ciAi0L3QtdGCINGC0LDQutC+0LPQviDQv9GD0YLQuCAlcyDQsiAlcyIKKworIzogYmxhbWUuYzoxODc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGJsb2IgJXMgZm9yIHBhdGggJXMiCittc2dzdHIgItC90LXQstC+0LfQvNC+0LbQvdC+INC/0YDQvtGH0LjRgtCw0YLRjCDQvtCx0YrQtdC60YIgJXMg0LTQu9GPINC/0YPRgtC4ICVzIgorCisjOiBicmFuY2guYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQWZ0ZXIgZml4aW5nIHRoZSBlcnJvciBjYXVzZSB5b3UgbWF5IHRyeSB0byBmaXggdXBcbiIKKyJ0aGUgcmVtb3RlIHRyYWNraW5nIGluZm9ybWF0aW9uIGJ5IGludm9raW5nXG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiLiIKK21zZ3N0ciAiXG7Qn9C+0YHQu9C1INC40YHQv9GA0LDQstC70LXQvdC40Y8g0L/RgNC40YfQuNC90Ysg0L7RiNC40LHQutC4LFxu0LLRiyDQvNC+0LbQtdGC0LUg0LjRgdC/0YDQsNCy0LjRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+0LEg0L7RgtGB0LvQtdC20LjQstCw0LXQvNC+0LlcbtCy0L3QtdGI0L3QtdC5INCy0LXRgtC60LUsINGBINC/0L7QvNC+0YnRjNGOINC60L7QvNCw0L3QtNGLXG7Cq2dpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzwrsuIgorCisjOiBicmFuY2guYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3Qgc2V0dGluZyBicmFuY2ggJXMgYXMgaXRzIG93biB1cHN0cmVhbS4iCittc2dzdHIgItCd0LUg0YPRgdGC0LDQvdCw0LLQu9C40LLQsNGOINCy0LXRgtC60YMgJXMsINGC0LDQuiDRgtCw0Log0L7QvdCwINC/0YDQuNC90LDQtNC70LXQttC40YIg0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQvNGDINGA0LXQv9C+0LfQuNGC0L7RgNC40Y4uIgorCisjOiBicmFuY2guYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgItCS0LXRgtC60LAgwqslc8K7INC+0YLRgdC70LXQttC40LLQsNC10YIg0LLQvdC10YjQvdGO0Y4g0LLQtdGC0LrRgyDCqyVzwrsg0LjQtyDCqyVzwrsg0L/QtdGA0LXQvNC10YnQtdC90LjQtdC8LiIKKworIzogYnJhbmNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycuIgorbXNnc3RyICLQktC10YLQutCwIMKrJXPCuyDQvtGC0YHQu9C10LbQuNCy0LDQtdGCINCy0L3QtdGI0L3RjtGOINCy0LXRgtC60YMgwqslc8K7INC40Lcgwqslc8K7LiIKKworIzogYnJhbmNoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAi0JLQtdGC0LrQsCDCqyVzwrsg0L7RgtGB0LvQtdC20LjQstCw0LXRgiDQu9C+0LrQsNC70YzQvdGD0Y4g0LLQtdGC0LrRgyDCqyVzwrsg0L/QtdGA0LXQvNC10YnQtdC90LjQtdC8LiIKKworIzogYnJhbmNoLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAi0JLQtdGC0LrQsCDCqyVzwrsg0L7RgtGB0LvQtdC20LjQstCw0LXRgiDQu9C+0LrQsNC70YzQvdGD0Y4g0LLQtdGC0LrRgyDCqyVzwrsuIgorCisjOiBicmFuY2guYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgItCS0LXRgtC60LAgwqslc8K7INC+0YLRgdC70LXQttC40LLQsNC10YIg0LLQvdC10YjQvdGO0Y4g0YHRgdGL0LvQutGDIMKrJXPCuyDQv9C10YDQtdC80LXRidC10L3QuNC10LwuIgorCisjOiBicmFuY2guYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJy4iCittc2dzdHIgItCS0LXRgtC60LAgwqslc8K7INC+0YLRgdC70LXQttC40LLQsNC10YIg0LLQvdC10YjQvdGO0Y4g0YHRgdGL0LvQutGDIMKrJXPCuy4iCisKKyM6IGJyYW5jaC5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICLQktC10YLQutCwIMKrJXPCuyDQvtGC0YHQu9C10LbQuNCy0LDQtdGCINC70L7QutCw0LvRjNC90YPRjiDRgdGB0YvQu9C60YMgwqslc8K7INC/0LXRgNC10LzQtdGJ0LXQvdC40LXQvC4iCisKKyM6IGJyYW5jaC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycuIgorbXNnc3RyICLQktC10YLQutCwIMKrJXPCuyDQvtGC0YHQu9C10LbQuNCy0LDQtdGCINC70L7QutCw0LvRjNC90YPRjiDRgdGB0YvQu9C60YMgwqslc8K7LiIKKworIzogYnJhbmNoLmM6MTE5Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIHVwc3RyZWFtIGJyYW5jaCBjb25maWd1cmF0aW9uIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0L3QsNGB0YLRgNC+0LnQutC4INCy0YvRiNC10YHRgtC+0Y/RidC10Lkg0LLQtdGC0LrQuCIKKworIzogYnJhbmNoLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCB0cmFja2luZzogYW1iaWd1b3VzIGluZm9ybWF0aW9uIGZvciByZWYgJXMiCittc2dzdHIgItCd0LUg0L7RgtGB0LvQtdC20LjQstCw0LXRgtGB0Y86INC90LXQvtC00L3QvtC30L3QsNGH0L3QsNGPINC40L3RhNC+0YDQvNCw0YbQuNGPINC00LvRjyDRgdGB0YvQu9C60LggJXMiCisKKyM6IGJyYW5jaC5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C8INC40LzQtdC90LXQvCDQstC10YLQutC4LiIKKworIzogYnJhbmNoLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkEgYnJhbmNoIG5hbWVkICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLQktC10YLQutCwINGBINC40LzQtdC90LXQvCDCqyVzwrsg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiIKKworIzogYnJhbmNoLmM6MjEzCittc2dpZCAiQ2Fubm90IGZvcmNlIHVwZGF0ZSB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+INC+0LHQvdC+0LLQuNGC0Ywg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgy4iCisKKyM6IGJyYW5jaC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNGB0YLRgNC+0LjRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+0YLRgdC70LXQttC40LLQsNC90LjRjzsg0YHRgtCw0YDRgtC+0LLQsNGPINGC0L7Rh9C60LAgwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQstC10YLQutC+0LkuIgorCisjOiBicmFuY2guYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHJlcXVlc3RlZCB1cHN0cmVhbSBicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi0LfQsNC/0YDQvtGI0LXQvdC90LDRjyDQstC10YLQutCwINCy0YvRiNC10YHRgtC+0Y/RidC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIMKrJXPCuyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBicmFuY2guYzoyMzcKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyBvbiBiYXNpbmcgeW91ciB3b3JrIG9uIGFuIHVwc3RyZWFtXG4iCisiYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXQgdGhlIHJlbW90ZSwgeW91IG1heSBuZWVkIHRvXG4iCisicnVuIFwiZ2l0IGZldGNoXCIgdG8gcmV0cmlldmUgaXQuXG4iCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyB0byBwdXNoIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggdGhhdFxuIgorIndpbGwgdHJhY2sgaXRzIHJlbW90ZSBjb3VudGVycGFydCwgeW91IG1heSB3YW50IHRvIHVzZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB0byBzZXQgdGhlIHVwc3RyZWFtIGNvbmZpZyBhcyB5b3UgcHVzaC4iCittc2dzdHIgIlxu0JXRgdC70Lgg0LLRiyDQv9C70LDQvdC40YDRg9C10YLQtSDQvtGB0L3QvtCy0YvQstCw0YLRjCDRgdCy0L7RjiDRgNCw0LHQvtGC0YMg0L3QsCDQstGL0YjQtdGB0YLQvtGP0YnQtdC5INCy0LXRgtC60LUsINC60L7RgtC+0YDQsNGPINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiDQstC+INCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LgsINCy0LDQvCDQvNC+0LbQtdGCINC/0L7RgtGA0LXQsdC+0LLQsNGC0YzRgdGPINC30LDQv9GD0YHRgtC40YLRjCDCq2dpdCBmZXRjaMK7INC00LvRjyDQtdC1INC/0L7Qu9GD0YfQtdC90LjRjy5cblxu0JXRgdC70Lgg0LLRiyDQv9C70LDQvdC40YDRg9C10YLQtSDQvtGC0L/RgNCw0LLQuNGC0Ywg0L3QvtCy0YPRjiDQu9C+0LrQsNC70YzQvdGD0Y4g0LLQtdGC0LrRgywg0LrQvtGC0L7RgNCw0Y8g0LHRg9C00LXRgiDQvtGC0YHQu9C10LbQuNCy0LDRgtGM0YHRjywg0LLQviDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5LCDQstCw0Lwg0LzQvtC20LXRgiDQv9C+0YLRgNC10LHQvtCy0LDRgtGM0YHRjyDQt9Cw0L/Rg9GB0YLQuNGC0YwgwqtnaXQgcHVzaCAtdcK7IOKAlCDRh9GC0L7QsdGLINGB0L7RhdGA0LDQvdC40YLRjCDQvdCw0YHRgtGA0L7QudC60YMg0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0LTQu9GPINC+0YLQv9GA0LDQstC60LguIgorCisjOiBicmFuY2guYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICLQndC10LTQvtC/0YPRgdGC0LjQvNC+0LUg0LjQvNGPINC+0LHRitC10LrRgtCwOiDCqyVzwrsuIgorCisjOiBicmFuY2guYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAi0J3QtdC+0LTQvdC+0LfQvdCw0YfQvdC+0LUg0LjQvNGPINC+0LHRitC10LrRgtCwOiDCqyVzwrsuIgorCisjOiBicmFuY2guYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgYnJhbmNoIHBvaW50OiAnJXMnLiIKK21zZ3N0ciAi0J3QtdC00L7Qv9GD0YHRgtC40LzQsNGPINGC0L7Rh9C60LAg0LLQtdGC0LrQuDogwqslc8K7LiIKKworIzogYnJhbmNoLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICLCqyVzwrsg0YPQttC1INC90LDRhdC+0LTQuNGC0YHRjyDQvdCwIMKrJXPCuyIKKworIzogYnJhbmNoLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgb2Ygd29ya2luZyB0cmVlICVzIGlzIG5vdCB1cGRhdGVkIgorbXNnc3RyICJIRUFEINGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCAlcyDQvdC1INC+0LHQvdC+0LLQu9GR0L0iCisKKyM6IGJ1bmRsZS5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgbG9vayBsaWtlIGEgdjIgYnVuZGxlIGZpbGUiCittc2dzdHIgIsKrJXPCuyDQvdC1INC/0L7RhdC+0LYg0L3QsCDRhNCw0LnQuyDQv9Cw0LrQtdGC0LAg0LLQtdGA0YHQuNC4IDIiCisKKyM6IGJ1bmRsZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAi0L3QtdC+0L/QvtC30L3QsNC90L3Ri9C5INC30LDQs9C+0LvQvtCy0L7QujogJXMlcyAoJWQpIgorCisjOiBidW5kbGUuYzo5MCByZXJlcmUuYzo0ODAgcmVyZXJlLmM6NjkwIHNlcXVlbmNlci5jOjIyODEgc2VxdWVuY2VyLmM6MjkxNgorIzogYnVpbHRpbi9jb21taXQuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDCqyVzwrsiCisKKyM6IGJ1bmRsZS5jOjE0MworbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICLQkiDRgNC10L/QvtC30LjRgtC+0YDQuNC4INC+0YLRgdGD0YLRgdGC0LLRg9GO0YIg0L3QtdC+0LHRhdC+0LTQuNC80YvQtSDQutC+0LzQvNC40YLRizoiCisKKyM6IGJ1bmRsZS5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAi0J/QsNC60LXRgiDRgdC+0LTQtdGA0LbQuNGCINGN0YLRgyAlZCDRgdGB0YvQu9C60YM6IgorbXNnc3RyWzFdICLQn9Cw0LrQtdGCINGB0L7QtNC10YDQttC40YIg0Y3RgtC4ICVkINGB0YHRi9C70LrQuDoiCittc2dzdHJbMl0gItCf0LDQutC10YIg0YHQvtC00LXRgNC20LjRgiDRjdGC0LggJWQg0YHRgdGL0LvQvtC6OiIKK21zZ3N0clszXSAi0J/QsNC60LXRgiDRgdC+0LTQtdGA0LbQuNGCINGN0YLQuCAlZCDRgdGB0YvQu9C+0Lo6IgorCisjOiBidW5kbGUuYzoyMDEKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAi0J/QsNC60LXRgiDRgdC+0LTQtdGA0LbQuNGCINC/0L7Qu9C90YPRjiDQuNGB0YLQvtGA0LjRji4iCisKKyM6IGJ1bmRsZS5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAi0J/QsNC60LXRgiDRgtGA0LXQsdGD0LXRgiDRjdGC0YMgJWQg0YHRgdGL0LvQutGDOiIKK21zZ3N0clsxXSAi0J/QsNC60LXRgiDRgtGA0LXQsdGD0LXRgiDRjdGC0LggJWQg0YHRgdGL0LvQutC4OiIKK21zZ3N0clsyXSAi0J/QsNC60LXRgiDRgtGA0LXQsdGD0LXRgiDRjdGC0LggJWQg0YHRgdGL0LvQvtC6OiIKK21zZ3N0clszXSAi0J/QsNC60LXRgiDRgtGA0LXQsdGD0LXRgiDRjdGC0LggJWQg0YHRgdGL0LvQvtC6OiIKKworIzogYnVuZGxlLmM6MjY5Cittc2dpZCAidW5hYmxlIHRvIGR1cCBidW5kbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQtNGD0LHQu9C40YDQvtCy0LDRgtGMINC00LXRgdC60YDQuNC/0YLQvtGAINC/0LDQutC10YLQsCIKKworIzogYnVuZGxlLmM6Mjc2Cittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQvtCx0YrQtdC60YLRiyDQv9Cw0LrQtdGC0LAiCisKKyM6IGJ1bmRsZS5jOjI4NworbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICLQutGA0LjRgtC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsCBwYWNrLW9iamVjdHMiCisKKyM6IGJ1bmRsZS5jOjMyOQorbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgItC60YDQuNGC0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwIHJldi1saXN0IgorCisjOiBidW5kbGUuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiCittc2dzdHIgItGB0YHRi9C70LrQsCDCqyVzwrsg0LjRgdC60LvRjtGH0LXQvdCwINCyINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQuCDRgSDQvtC/0YbQuNGP0LzQuCByZXYtbGlzdCIKKworIzogYnVuZGxlLmM6NDU3IGJ1aWx0aW4vbG9nLmM6MTk3IGJ1aWx0aW4vbG9nLmM6MTcwOSBidWlsdGluL3Nob3J0bG9nLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgItC90LXQvtC/0L7Qt9C90LDQvdC90YvQuSDQsNGA0LPRg9C80LXQvdGCOiAlcyIKKworIzogYnVuZGxlLmM6NDY1Cittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgItCe0YLQutC70L7QvdC10L3QuNC1INGB0L7Qt9C00LDQvdC40Y8g0L/Rg9GB0YLQvtCz0L4g0L/QsNC60LXRgtCwLiIKKworIzogYnVuZGxlLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDCqyVzwrsiCisKKyM6IGJ1bmRsZS5jOjUwMAorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAi0LrRgNC40YLQuNGH0LXRgdC60LDRjyDQvtGI0LjQsdC60LAgaW5kZXgtcGFjayIKKworIzogY29sb3IuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciB2YWx1ZTogJS4qcyIKK21zZ3N0ciAi0L3QtdC00L7Qv9GD0YHRgtC40LzQvtC1INC30L3QsNGH0LXQvdC40LUg0YbQstC10YLQsDogJS4qcyIKKworIzogY29tbWl0LmM6NTAgc2VxdWVuY2VyLmM6MjY5NyBidWlsdGluL2FtLmM6MzU1IGJ1aWx0aW4vYW0uYzozOTkKKyM6IGJ1aWx0aW4vYW0uYzoxMzc3IGJ1aWx0aW4vYW0uYzoyMDIyIGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMICVzIgorCisjOiBjb21taXQuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICIlcyAlcyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LrQvtC80LzQuNGC0L7QvCEiCisKKyM6IGNvbW1pdC5jOjE5MworbXNnaWQgIiIKKyJTdXBwb3J0IGZvciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaXMgZGVwcmVjYXRlZFxuIgorImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgR2l0IHZlcnNpb24uXG4iCisiXG4iCisiUGxlYXNlIHVzZSBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyJ0byBjb252ZXJ0IHRoZSBncmFmdHMgaW50byByZXBsYWNlIHJlZnMuXG4iCisiXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIiIKK21zZ3N0ciAi0J/QvtC00LTQtdGA0LbQutCwIDxHSVRfRElSPi9pbmZvL2dyYWZ0cyDRg9GB0YLQsNGA0LXQu9CwINC4INCx0YPQtNC10YIg0YPQtNCw0LvQtdC90LAg0LIg0YHQu9C10LTRg9GO0YnQuNGFINCy0LXRgNGB0LjRj9GFIEdpdC5cblxu0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlwrsg0LTQu9GPICDQutC+0L3QstC10YDRgtCw0YbQuNC4INGB0YDQsNGJ0LXQvdC40LkgKGdyYWZ0cykg0L3QsCDRgdGB0YvQu9C60Lgg0LfQsNC80LXQvdGLLlxuXG7Qp9GC0L7QsdGLINGB0LrRgNGL0YLRjCDRjdGC0L4g0YHQvtC+0LHRidC10L3QuNC1INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2XCuyIKKworIzogY29tbWl0LmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlLCBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICLQmtC+0LzQvNC40YIgJXMg0YHQvtC00LXRgNC20LjRgiDQvdC1INC00L7QstC10YDQtdC90L3Rg9GOIEdQRyDQv9C+0LTQv9C40YHRjCwg0L/RgNC10LTQv9C+0LvQvtC20LjRgtC10LvRjNC90L4g0L7RgiAlcy4iCisKKyM6IGNvbW1pdC5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgItCa0L7QvNC80LjRgiAlcyDRgdC+0LTQtdGA0LbQuNGCINC/0LvQvtGF0YPRjiBHUEcg0L/QvtC00L/QuNGB0YwsINC/0YDQtdC00L/QvtC70L7QttC40YLQtdC70YzQvdC+INC+0YIgJXMuIgorCisjOiBjb21taXQuYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZS4iCittc2dzdHIgItCa0L7QvNC80LjRgiAlcyDQvdC1INGB0L7QtNC10YDQttC40YIgR1BHINC/0L7QtNC/0LjRgdGMLiIKKworIzogY29tbWl0LmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIGJ5ICVzXG4iCittc2dzdHIgItCa0L7QvNC80LjRgiAlcyDRgdC+0LTQtdGA0LbQuNGCINC00LXQudGB0YLQstC40YLQtdC70YzQvdGD0Y4gR1BHINC/0L7QtNC/0LjRgdGMLCDQvtGCICVzLlxuIgorCisjOiBjb21taXQuYzoxMzkxCittc2dpZCAiIgorIldhcm5pbmc6IGNvbW1pdCBtZXNzYWdlIGRpZCBub3QgY29uZm9ybSB0byBVVEYtOC5cbiIKKyJZb3UgbWF5IHdhbnQgdG8gYW1lbmQgaXQgYWZ0ZXIgZml4aW5nIHRoZSBtZXNzYWdlLCBvciBzZXQgdGhlIGNvbmZpZ1xuIgorInZhcmlhYmxlIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gdGhlIGVuY29kaW5nIHlvdXIgcHJvamVjdCB1c2VzLlxuIgorbXNnc3RyICLQn9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0L3QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiBVVEYtOC5cbtCS0L7Qt9C80L7QttC90L4sINCy0Ysg0LfQsNGF0L7RgtC40YLQtSDQuNGB0L/RgNCw0LLQuNGC0Ywg0LXQs9C+INC/0L7RgdC70LUg0LjRgdC/0YDQsNCy0LvQtdC90LjRjyDRgdC+0L7QsdGJ0LXQvdC40Y9cbtC40LvQuCDQvdCw0YHRgtGA0L7QuNGC0Ywg0L7Qv9GG0LjRjiBpMThuLmNvbW1pdGVuY29kaW5nINC4INGD0LrQsNC30LDRgtGMINC60L7QtNC40YDQvtCy0LrRg1xu0YHQvtC+0LHRidC10L3QuNC5LCDQutC+0YLQvtGA0YPRjiDQuNGB0L/QvtC70YzQt9GD0LXRgiDQstCw0Ygg0L/RgNC+0LXQutGCLlxuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDUKK21zZ2lkICJjb21taXQtZ3JhcGggZmlsZSBpcyB0b28gc21hbGwiCittc2dzdHIgItGE0LDQudC7IGNvbW1pdC1ncmFwaCDRgdC70LjRiNC60L7QvCDQvNCw0LvQtdC90YzQutC40LkiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggc2lnbmF0dXJlICVYIGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAlWCIKK21zZ3N0ciAi0L/QvtC00L/QuNGB0YwgY29tbWl0LWdyYXBoINGE0LDQudC70LAgJVgg0L3QtSDRgdC+0L7RgtCy0LXRgdGC0LLRg9C10YIg0L/QvtC00L/QuNGB0LggJVgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICLQstC10YDRgdC40Y8gY29tbWl0LWdyYXBoINGE0LDQudC70LAgJVgg0L3QtSDRgdC+0L7RgtCy0LXRgdGC0LLRg9C10YIg0LLQtdGA0YHQuNC4ICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICLQstC10YDRgdC40Y8g0YXQtdGILdGB0YPQvNC80YsgY29tbWl0LWdyYXBoINGE0LDQudC70LAgJVgg0L3QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDQstC10YDRgdC40LggJVgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNworbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBsb29rdXAgdGFibGUgZW50cnkgbWlzc2luZzsgZmlsZSBtYXkgYmUgaW5jb21wbGV0ZSIKK21zZ3N0ciAi0L3QtSDQvdCw0LnQtNC10L3QsCDRgtCw0LHQu9C40YbQsCDRgNCw0YHQv9C+0LvQvtC20LXQvdC40Y8g0YfQsNGB0YLQtdC5INCyINGE0LDQudC70LUgY29tbWl0LWdyYXBoOyDQstC+0LfQvNC+0LbQvdC+INGE0LDQudC7INC/0L7QstGA0LXQttC00ZHQvSIKKworIzogY29tbWl0LWdyYXBoLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBpbXByb3BlciBjaHVuayBvZmZzZXQgJTA4eCUwOHgiCittc2dzdHIgItC90LXQutC+0YDRgNC10LrRgtC90L7QtSDRgdC80LXRidC10L3QuNC1INGH0LDRgdGC0Lgg0LIgY29tbWl0LWdyYXBoINGE0LDQudC70LUgJTA4eCUwOHgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggY2h1bmsgaWQgJTA4eCBhcHBlYXJzIG11bHRpcGxlIHRpbWVzIgorbXNnc3RyICLRh9Cw0YHRgtGMINGE0LDQudC70LAgY29tbWl0LWdyYXBoINGBINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0L7QvCAlMDh4INC/0L7Rj9Cy0LvRj9C10YLRgdGPINC90LXRgdC60L7Qu9GM0LrQviDRgNCw0LciCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDQutC+0LzQvNC40YIgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjczMiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCB0eXBlIG9mIG9iamVjdCAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINGC0LjQvyDQvtCx0YrQtdC60YLQsCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6NzY1Cittc2dpZCAiTG9hZGluZyBrbm93biBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAi0JfQsNCz0YDRg9C30LrQsCDQuNC30LLQtdGB0YLQvdGL0YUg0LrQvtC80LzQuNGC0L7QsiDQvdCwINCz0YDQsNGEINC60L7QvNC80LjRgtC+0LIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjc4MQorbXNnaWQgIkV4cGFuZGluZyByZWFjaGFibGUgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgItCg0LDRgdGI0LjRgNC10L3QuNC1INC00L7RgdGC0LjQttC40LzRi9GFINC60L7QvNC80LjRgtC+0LIg0L3QsCDQs9GA0LDRhCDQutC+0LzQvNC40YLQvtCyIgorCisjOiBjb21taXQtZ3JhcGguYzo3OTMKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLQntGH0LjRgdGC0LrQsCDQv9C+0LzQtdGC0L7QuiDQutC+0LzQvNC40YLQvtCyINC90LAg0LPRgNCw0YTQtSDQutC+0LzQvNC40YLQvtCyIgorCisjOiBjb21taXQtZ3JhcGguYzo4MTMKK21zZ2lkICJDb21wdXRpbmcgY29tbWl0IGdyYXBoIGdlbmVyYXRpb24gbnVtYmVycyIKK21zZ3N0ciAi0JLRi9GH0LjRgdC70LXQvdC40LUg0L3QvtC80LXRgNC+0LIg0L/QvtC60L7Qu9C10L3QuNC5INC90LAg0LPRgNCw0YTQtSDQutC+0LzQvNC40YLQvtCyIgorCisjOiBjb21taXQtZ3JhcGguYzo5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFjayIKK21zZ2lkX3BsdXJhbCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFja3MiCittc2dzdHJbMF0gItCf0L7QuNGB0Log0LrQvtC80LzQuNGC0L7QsiDQtNC70Y8g0LPRgNCw0YTQsCDQutC+0LzQvNC40YLQvtCyINCyICVkINC/0LDQutC10YLQtSIKK21zZ3N0clsxXSAi0J/QvtC40YHQuiDQutC+0LzQvNC40YLQvtCyINC00LvRjyDQs9GA0LDRhNCwINC60L7QvNC80LjRgtC+0LIg0LIgJWQg0L/QsNC60LXRgtCw0YUiCittc2dzdHJbMl0gItCf0L7QuNGB0Log0LrQvtC80LzQuNGC0L7QsiDQtNC70Y8g0LPRgNCw0YTQsCDQutC+0LzQvNC40YLQvtCyINCyICVkINC/0LDQutC10YLQsNGFIgorbXNnc3RyWzNdICLQn9C+0LjRgdC6INC60L7QvNC80LjRgtC+0LIg0LTQu9GPINCz0YDQsNGE0LAg0LrQvtC80LzQuNGC0L7QsiDQsiAlZCDQv9Cw0LrQtdGC0LDRhSIKKworIzogY29tbWl0LWdyYXBoLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGFkZGluZyBwYWNrICVzIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0LTQvtCx0LDQstC70LXQvdC40Y8g0L/QsNC60LXRgtCwICVzIgorCisjOiBjb21taXQtZ3JhcGguYzo5NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyBpbmRleCBmb3IgJXMiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQvtGC0LrRgNGL0YLQuNGPINC40L3QtNC10LrRgdCwINC00LvRjyAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6OTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBmcm9tICVkIHJlZnMiCittc2dzdHJbMF0gItCf0L7QuNGB0Log0LrQvtC80LzQuNGC0L7QsiDQtNC70Y8g0LPRgNCw0YTQsCDQutC+0LzQvNC40YLQvtCyINC/0L4gJWQg0YHRgdGL0LvQutC1IgorbXNnc3RyWzFdICLQn9C+0LjRgdC6INC60L7QvNC80LjRgtC+0LIg0LTQu9GPINCz0YDQsNGE0LAg0LrQvtC80LzQuNGC0L7QsiDQv9C+ICVkINGB0YHRi9C70LrQsNC8IgorbXNnc3RyWzJdICLQn9C+0LjRgdC6INC60L7QvNC80LjRgtC+0LIg0LTQu9GPINCz0YDQsNGE0LAg0LrQvtC80LzQuNGC0L7QsiDQv9C+ICVkINGB0YHRi9C70LrQsNC8IgorbXNnc3RyWzNdICLQn9C+0LjRgdC6INC60L7QvNC80LjRgtC+0LIg0LTQu9GPINCz0YDQsNGE0LAg0LrQvtC80LzQuNGC0L7QsiDQv9C+ICVkINGB0YHRi9C70LrQsNC8IgorCisjOiBjb21taXQtZ3JhcGguYzo5OTEKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBhbW9uZyBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAi0J/QvtC40YHQuiDQutC+0LzQvNC40YLQvtCyINC00LvRjyDQs9GA0LDRhNCwINC60L7QvNC80LjRgtC+0LIg0YHRgNC10LTQuCDRg9C/0LDQutC+0LLQsNC90L3Ri9GFINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwMDQKK21zZ2lkICJDb3VudGluZyBkaXN0aW5jdCBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAi0JLRi9GH0LjRgdC70LXQvdC40LUg0LrQvtC70LjRh9C10YHRgtCy0LAg0L7RgtC00LXQu9GM0L3Ri9GFINC60L7QvNC80LjRgtC+0LIg0L3QsCDQs9GA0LDRhNC1INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIGNvbW1pdCBncmFwaCBmb3JtYXQgY2Fubm90IHdyaXRlICVkIGNvbW1pdHMiCittc2dzdHIgItC/0YDQvtCz0YDQsNC80LzQtSDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QuNGPINCz0YDQsNGE0LAg0LrQvtC80LzQuNGC0L7QsiDQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0YwgJWQg0LrQvtC80LzQuNGC0L7QsiIKKworIzogY29tbWl0LWdyYXBoLmM6MTAyNgorbXNnaWQgIkZpbmRpbmcgZXh0cmEgZWRnZXMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLQn9C+0LjRgdC6INC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0YUg0YDQtdCx0LXRgCDQvdCwINCz0YDQsNGE0LUg0LrQvtC80LzQuNGC0L7QsiIKKworIzogY29tbWl0LWdyYXBoLmM6MTA1MAorbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgdG8gd3JpdGUgZ3JhcGgiCittc2dzdHIgItGB0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0LrQvtC80LzQuNGC0L7QsiDQtNC70Y8g0LfQsNC/0LjRgdC4INCz0YDQsNGE0LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNTcgbWlkeC5jOjgxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0YDQvtC00LjRgtC10LvRjNGB0LrQuNC1INC60LDRgtCw0LvQvtCz0Lgg0LTQu9GPICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzIgorbXNnaWRfcGx1cmFsICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzc2VzIgorbXNnc3RyWzBdICLQl9Cw0L/QuNGB0Ywg0LPRgNCw0YTQsCDQutC+0LzQvNC40YLQvtCyINCyICVkINC/0YDQvtGF0L7QtCIKK21zZ3N0clsxXSAi0JfQsNC/0LjRgdGMINCz0YDQsNGE0LAg0LrQvtC80LzQuNGC0L7QsiDQsiAlZCDQv9GA0L7RhdC+0LTQsCIKK21zZ3N0clsyXSAi0JfQsNC/0LjRgdGMINCz0YDQsNGE0LAg0LrQvtC80LzQuNGC0L7QsiDQsiAlZCDQv9GA0L7RhdC+0LTQvtCyIgorbXNnc3RyWzNdICLQl9Cw0L/QuNGB0Ywg0LPRgNCw0YTQsCDQutC+0LzQvNC40YLQvtCyINCyICVkINC/0YDQvtGF0L7QtNCwIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTYyCittc2dpZCAidGhlIGNvbW1pdC1ncmFwaCBmaWxlIGhhcyBpbmNvcnJlY3QgY2hlY2tzdW0gYW5kIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICLRhNCw0LnQuyBjb21taXQtZ3JhcGgg0YHQvtC00LXRgNC20LjRgiDQvdC10L/RgNCw0LLQuNC70YzQvdGD0Y4g0LrQvtC90YLRgNC+0LvRjNC90YPRjiDRgdGD0LzQvNGDINC4INGB0LrQvtGA0LXQtSDQstGB0LXQs9C+INC/0L7QstGA0LXQttC00LXQvSIKKworIzogY29tbWl0LWdyYXBoLmM6MTE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBPSUQgb3JkZXI6ICVzIHRoZW4gJXMiCittc2dzdHIgItGE0LDQudC7IGNvbW1pdC1ncmFwaCDRgdC+0LTQtdGA0LbQuNGCINC90LXQv9GA0LDQstC40LvRjNC90YvQuSDQv9C+0YDRj9C00L7QuiBPSUQ6ICVzLCDQsCDQt9Cw0YLQtdC8ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTgyIGNvbW1pdC1ncmFwaC5jOjExOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgZmFub3V0IHZhbHVlOiBmYW5vdXRbJWRdID0gJXUgIT0gJXUiCittc2dzdHIgItGE0LDQudC7IGNvbW1pdC1ncmFwaCDRgdC+0LTQtdGA0LbQuNGCINC90LXQv9GA0LDQstC40LvRjNC90L7QtSDQt9C90LDRh9C10L3QuNC1IGZhbm91dDogZmFub3V0WyVkXSA9ICV1ICE9ICV1IgorCisjOiBjb21taXQtZ3JhcGguYzoxMTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBjb21taXQgJXMgZnJvbSBjb21taXQtZ3JhcGgiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC60L7QvNC80LjRgiAlcyDQuNC3INGE0LDQudC70LAgY29tbWl0LWdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjA2Cittc2dpZCAiVmVyaWZ5aW5nIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC60L7QvNC80LjRgtC+0LIg0L3QsCDQs9GA0LDRhNC1INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIG9iamVjdCBkYXRhYmFzZSBmb3IgY29tbWl0LWdyYXBoIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQutC+0LzQvNC40YIgJXMg0LjQtyDQsdCw0LfRiyDQvtCx0YrQtdC60YLQvtCyINGE0LDQudC70LAgY29tbWl0LWdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInJvb3QgdHJlZSBPSUQgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJXMgIT0gJXMiCittc2dzdHIgIiDQsiDRhNCw0LnQu9C1IGNvbW1pdC1ncmFwaCBPSUQg0LrQvtGA0L3RjyDQtNC10YDQtdCy0LAg0LTQu9GPINC60L7QvNC80LjRgtCwICVzINGP0LLQu9GP0LXRgtGB0Y8gJXMgIT0gJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBsaXN0IGZvciBjb21taXQgJXMgaXMgdG9vIGxvbmciCittc2dzdHIgItGB0LvQuNGI0LrQvtC8INCx0L7Qu9GM0YjQvtC5INGB0L/QuNGB0L7QuiDRgNC+0LTQuNGC0LXQu9C10Lkg0YTQsNC50LvQtSBjb21taXQtZ3JhcGgg0LTQu9GPINC60L7QvNC80LjRgtCwICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgZm9yICVzIGlzICVzICE9ICVzIgorbXNnc3RyICLQsiDRhNCw0LnQu9C1IGNvbW1pdC1ncmFwaCDRgNC+0LTQuNGC0LXQu9GMINC00LvRjyAlcyDRj9Cy0LvRj9C10YLRgdGPICVzICE9ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIHRlcm1pbmF0ZXMgZWFybHkiCittc2dzdHIgItCyINGE0LDQudC70LUgY29tbWl0LWdyYXBoINGB0L/QuNGB0L7QuiDRgNC+0LTQuNGC0LXQu9C10Lkg0LTQu9GPINC60L7QvNC80LjRgtCwICVzINC30LDQutC+0L3Rh9C40LvRgdGPINGB0LvQuNGI0LrQvtC8INGA0LDQvdC+IgorCisjOiBjb21taXQtZ3JhcGguYzoxMjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb21taXQtZ3JhcGggaGFzIGdlbmVyYXRpb24gbnVtYmVyIHplcm8gZm9yIGNvbW1pdCAlcywgYnV0IG5vbi16ZXJvICIKKyJlbHNld2hlcmUiCittc2dzdHIgItCyINGE0LDQudC70LUgY29tbWl0LWdyYXBoINGB0L7QtNC10YDQttC40YLRgdGPINC90YPQu9C10LLQvtC5INC90L7QvNC10YAg0L/QvtC60L7Qu9C10L3QuNGPINC00LvRjyDQutC+0LzQvNC40YLQsCAlcywg0L3QviDQvdC10L3Rg9C70LXQstC+0Lkg0LIg0L7RgdGC0LDQu9GM0L3Ri9GFINGB0LvRg9GH0LDRj9GFIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb21taXQtZ3JhcGggaGFzIG5vbi16ZXJvIGdlbmVyYXRpb24gbnVtYmVyIGZvciBjb21taXQgJXMsIGJ1dCB6ZXJvICIKKyJlbHNld2hlcmUiCittc2dzdHIgItCyINGE0LDQudC70LUgY29tbWl0LWdyYXBoINGB0L7QtNC10YDQttC40YLRgdGPINC90LXQvdGD0LvQtdCy0L7QuSDQvdC+0LzQtdGAINC/0L7QutC+0LvQtdC90LjRjyDQtNC70Y8g0LrQvtC80LzQuNGC0LAgJXMsINC90L4g0L3Rg9C70LXQstC+0Lkg0LIg0L7RgdGC0LDQu9GM0L3Ri9GFINGB0LvRg9GH0LDRj9GFIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBnZW5lcmF0aW9uIGZvciBjb21taXQgJXMgaXMgJXUgIT0gJXUiCittc2dzdHIgItCyINGE0LDQudC70LUgY29tbWl0LWdyYXBoINC90L7QvNC10YAg0L/QvtC60L7Qu9C10L3QuNGPINC00LvRjyDQutC+0LzQvNC40YLQsCAlcyDRj9Cy0LvRj9C10YLRgdGPICV1ICE9ICV1IgorCisjOiBjb21taXQtZ3JhcGguYzoxMjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCBkYXRlIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKK21zZ3N0ciAi0LIg0YTQsNC50LvQtSBjb21taXQtZ3JhcGgg0LTQsNGC0LAg0LrQvtC80LzQuNGC0LAgJXMg0Y/QstC70Y/QtdGC0YHRjyAlPFBSSXVNQVg+ICE9ICU8UFJJdU1BWD4iCisKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA2IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAi0L/QsNC80Y/RgtGMINC40YHRh9C10YDQv9Cw0L3QsCIKKworIzogY29uZmlnLmM6MTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGNlZWRlZCBtYXhpbXVtIGluY2x1ZGUgZGVwdGggKCVkKSB3aGlsZSBpbmNsdWRpbmdcbiIKKyJcdCVzXG4iCisiZnJvbVxuIgorIlx0JXNcbiIKKyJUaGlzIG1pZ2h0IGJlIGR1ZSB0byBjaXJjdWxhciBpbmNsdWRlcy4iCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBleHBhbmQgaW5jbHVkZSBwYXRoICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNGB0LrRgNGL0YLRjCDQv9GD0YLRjCDQstC60LvRjtGH0LXQvdC40Y8gwqslc8K7IgorCisjOiBjb25maWcuYzoxNTAKK21zZ2lkICJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZXMgbXVzdCBjb21lIGZyb20gZmlsZXMiCittc2dzdHIgItC+0YLQvdC+0YHQuNGC0LXQu9GM0L3Ri9C1INCy0LrQu9GO0YfQtdC90LjRjyDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lgg0LTQvtC70LbQvdGLINC40YHRhdC+0LTQuNGC0Ywg0LjQtyDRhNCw0LnQu9C+0LIiCisKKyM6IGNvbmZpZy5jOjE5MAorbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAi0L7RgtC90L7RgdC40YLQtdC70YzQvdGL0LUg0YPRgdC70L7QstC90YvQtSDQstC60LvRjtGH0LXQvdC40Y8g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC00L7Qu9C20L3RiyDQuNGB0YXQvtC00LjRgtGMINC40Lcg0YTQsNC50LvQvtCyIgorCisjOiBjb25maWcuYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gdmFyaWFibGUgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6Mzc4IHNlcXVlbmNlci5jOjI0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICLQvdC10LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQuSDQutC70Y7RhzogJXMiCisKKyM6IGNvbmZpZy5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjQyMCBjb25maWcuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29uZmlnIHBhcmFtZXRlcjogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGZvcm1hdCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGJsb2IgJXMiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQsiAlZCDRgdGC0YDQvtC60LUg0LTQstC+0LjRh9C90L7Qs9C+INC+0LHRitC10LrRgtCwICVzIgorCisjOiBjb25maWcuYzo3OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGZpbGUgJXMiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQsiAlZCDRgdGC0YDQvtC60LUg0YTQsNC50LvQsCAlcyIKKworIzogY29uZmlnLmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0L7RiNC40LHQutCwINCyICVkINGB0YLRgNC+0LrQtSDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCIKKworIzogY29uZmlnLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdWJtb2R1bGUtYmxvYiAlcyIKK21zZ3N0ciAi0L7RiNC40LHQutCwINCyICVkINGB0YLRgNC+0LrQtSDQtNCy0L7QuNGH0L3QvtCz0L4g0L7QsdGK0LXQutGC0LAg0L/QvtC00LzQvtC00YPQu9GPICVzIgorCisjOiBjb25maWcuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIKK21zZ3N0ciAi0L7RiNC40LHQutCwINCyICVkINGB0YLRgNC+0LrQtSDQutC+0LzQvNCw0L3QtNC90L7QuSDRgdGC0YDQvtC60LggJXMiCisKKyM6IGNvbmZpZy5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gJXMiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQsiAlZCDRgdGC0YDQvtC60LUg0LIgJXMiCisKKyM6IGNvbmZpZy5jOjk1MgorbXNnaWQgIm91dCBvZiByYW5nZSIKK21zZ3N0ciAi0LLQvdC1INC00LjQsNC/0LDQt9C+0L3QsCIKKworIzogY29uZmlnLmM6OTUyCittc2dpZCAiaW52YWxpZCB1bml0IgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0YfQuNGB0LvQviIKKworIzogY29uZmlnLmM6OTU4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INGH0LjRgdC70L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSDCqyVzwrsg0LTQu9GPIMKrJXPCuzogJXMiCisKKyM6IGNvbmZpZy5jOjk2MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBibG9iICVzOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INGH0LjRgdC70L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSDCqyVzwrsg0LTQu9GPIMKrJXPCuyDQsiDQtNCy0L7QuNGH0L3QvtC8INC+0LHRitC10LrRgtC1ICVzOiAlcyIKKworIzogY29uZmlnLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0YfQuNGB0LvQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1IMKrJXPCuyDQtNC70Y8gwqslc8K7INCyINGE0LDQudC70LUgJXM6ICVzIgorCisjOiBjb25maWcuYzo5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3RhbmRhcmQgaW5wdXQ6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0YfQuNGB0LvQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1IMKrJXPCuyDQtNC70Y8gwqslc8K7INC90LAg0YHRgtCw0L3QtNCw0YDRgtC90L7QvCDQstCy0L7QtNC1OiAlcyIKKworIzogY29uZmlnLmM6OTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN1Ym1vZHVsZS1ibG9iICVzOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INGH0LjRgdC70L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSDCqyVzwrsg0LTQu9GPIMKrJXPCuyDQsiDQtNCy0L7QuNGH0L3QvtC8INC+0LHRitC10LrRgtC1INC/0L7QtNC80L7QtNGD0LvRjyAlczogJXMiCisKKyM6IGNvbmZpZy5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBjb21tYW5kIGxpbmUgJXM6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0YfQuNGB0LvQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1IMKrJXPCuyDQtNC70Y8gwqslc8K7INC90LAg0LrQvtC80LzQsNC90LTQvdC+0Lkg0YHRgtGA0L7QutC1ICVzOiAlcyIKKworIzogY29uZmlnLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INGH0LjRgdC70L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSDCqyVzwrsg0LTQu9GPIMKrJXPCuyDQsiAlczogJXMiCisKKyM6IGNvbmZpZy5jOjEwNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAi0YHQsdC+0Lkg0YDQsNC30LLQvtGA0LDRh9C40LLQsNC90LjRjyDQv9GD0YLQuCDQutCw0YLQsNC70L7Qs9CwINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjzogwqslc8K7IgorCisjOiBjb25maWcuYzoxMDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICLCqyVzwrsg0LTQu9GPIMKrJXPCuyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LTQvtC/0YPRgdGC0LjQvNC+0Lkg0LzQtdGC0LrQvtC5INC00LDRgtGLL9Cy0YDQtdC80LXQvdC4IgorCisjOiBjb25maWcuYzoxMTczCisjLCBjLWZvcm1hdAorbXNnaWQgImFiYnJldiBsZW5ndGggb3V0IG9mIHJhbmdlOiAlZCIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxMTg3IGNvbmZpZy5jOjExOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDRg9GA0L7QstC10L3RjCDRgdC20LDRgtC40Y8gemxpYiAlZCIKKworIzogY29uZmlnLmM6MTI5MAorbXNnaWQgImNvcmUuY29tbWVudENoYXIgc2hvdWxkIG9ubHkgYmUgb25lIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxMzIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIKK21zZ3N0ciAi0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C5INGA0LXQttC40Lwg0YHQvtC30LTQsNC90LjRjyDQvtCx0YrQtdC60YLQsDogJXMiCisKKyM6IGNvbmZpZy5jOjEzOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjE0MjIKK21zZ2lkICJtdXN0IGJlIG9uZSBvZiBub3RoaW5nLCBtYXRjaGluZywgc2ltcGxlLCB1cHN0cmVhbSBvciBjdXJyZW50IgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjE0ODMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0YPRgNC+0LLQtdC90Ywg0YHQttCw0YLQuNGPINC/0LDQutC10YLQsCAlZCIKKworIzogY29uZmlnLmM6MTYwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBjb25maWcgYmxvYiBvYmplY3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgYmxvYiIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIGNvbmZpZyBibG9iICclcyciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTcxMAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQutC+0L3RhNC40LPRg9GA0LDRhtC40Y4g0LjQtyDQutC+0LzQsNC90LTQvdC+0Lkg0YHRgtGA0L7QutC4IgorCisjOiBjb25maWcuYzoyMDU5Cittc2dpZCAidW5rbm93biBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIgorbXNnc3RyICLQv9GA0L7QuNC30L7RiNC70LAg0L3QtdC40LfQstC10YHRgtC90LDRjyDQvtGI0LjQsdC60LAg0L/RgNC4INGH0YLQtdC90LjQuCDRhNCw0LnQu9C+0LIg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IgorCisjOiBjb25maWcuYzoyMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgJXM6ICclcyciCittc2dzdHIgItCd0LXQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C5ICVzOiDCqyVzwrsiCisKKyM6IGNvbmZpZy5jOjIyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb3JlLnVudHJhY2tlZENhY2hlIHZhbHVlICclcyc7IHVzaW5nICdrZWVwJyBkZWZhdWx0IHZhbHVlIgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3QvtC1INC30L3QsNGH0LXQvdC40LUgwqslc8K7INC00LvRjyBjb3JlLnVudHJhY2tlZENhY2hlOyDQuNGB0L/QvtC70YzQt9GD0Y4g0YHRgtCw0L3QtNCw0YDRgtC90L7QtSDQt9C90LDRh9C10L3QuNC1IMKra2VlcMK7IgorCisjOiBjb25maWcuYzoyMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSB2YWx1ZSAnJWQnIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCIKK21zZ3N0ciAi0LfQvdCw0YfQtdC90LjQtSDCqyVkwrsg0LTQu9GPIHNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0L7RgiAwINC00L4gMTAwIgorCisjOiBjb25maWcuYzoyMzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJXMnIGZyb20gY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywgwqslc8K7INCyINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDQuNC3INC60L7QvNCw0L3QtNC90L7QuSDRgdGC0YDQvtC60LgiCisKKyM6IGNvbmZpZy5jOjIzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdCw0Y8g0L/QtdGA0LXQvNC10L3QvdCw0Y8g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IMKrJXPCuyDQsiDRhNCw0LnQu9C1IMKrJXPCuyDQvdCwINGB0YLRgNC+0LrQtSAlZCIKKworIzogY29uZmlnLmM6MjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiJXMg0LjQvNC10LXRgiDQvdC10YHQutC+0LvRjNC60L4g0LfQvdCw0YfQtdC90LjQuSIKKworIzogY29uZmlnLmM6MjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyNzQwIGNvbmZpZy5jOjMwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6Mjc1MQorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI3ODYgYnVpbHRpbi9jb25maWcuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyODExCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjgyNCBjb25maWcuYzozMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZzdGF0IG9uICVzIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INCy0YvQv9C+0LvQvdC10L3QuNC4IGZzdGF0INC90LAg0YTQsNC50LvQtSAlcyIKKworIzogY29uZmlnLmM6MjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI4NDQgY29uZmlnLmM6MzA4MgorIywgYy1mb3JtYXQKK21zZ2lkICJjaG1vZCBvbiAlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjkyOSBjb25maWcuYzozMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgJyVzJyB0byAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGD0YHRgtCw0L3QvtCy0LjRgtGMIMKrJXPCuyDQsiDCqyVzwrsiCisKKyM6IGNvbmZpZy5jOjI5NjUgYnVpbHRpbi9yZW1vdGUuYzo3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVuc2V0ICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQsdGA0L7RgdC40YLRjCDQt9C90LDRh9C10L3QuNC1INC00LvRjyDCqyVzwrsiCisKKyM6IGNvbmZpZy5jOjMwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjMyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyB2YWx1ZSBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NjEKK21zZ2lkICJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVwb24gaW5pdGlhbCBjb250YWN0IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo2MworbXNnaWQgIiIKKyJDb3VsZCBub3QgcmVhZCBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LlxuIgorIlxuIgorIlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzIHJpZ2h0c1xuIgorImFuZCB0aGUgcmVwb3NpdG9yeSBleGlzdHMuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDQuNC3INCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjy5cblxu0KPQtNC+0YHRgtC+0LLQtdGA0YzRgtC10YHRjCwg0YfRgtC+INGDINCy0LDRgSDQtdGB0YLRjCDQvdC10L7QsdGF0L7QtNC40LzRi9C1INC/0YDQsNCy0LAg0LTQvtGB0YLRg9C/0LBcbtC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0YHRg9GJ0LXRgdGC0LLRg9C10YIuIgorCisjOiBjb25uZWN0LmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBmZWF0dXJlICclcyciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjExNAorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGNhcGFiaWxpdGllcyBhZnRlciBmaXJzdCBsaW5lICclcyciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjI1MgorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkIGNhcGFiaWxpdGllc157fSIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGFsbG93IHNoYS0xLCBnb3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6Mjc1Cittc2dpZCAicmVwb3NpdG9yeSBvbiB0aGUgb3RoZXIgZW5kIGNhbm5vdCBiZSBzaGFsbG93IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzozMTMKK21zZ2lkICJpbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkICclcyciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxzLXJlZnMgcmVzcG9uc2U6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo0NDUKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciByZWYgbGlzdGluZyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sICclcycgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NTk1Cittc2dpZCAidW5hYmxlIHRvIHNldCBTT19LRUVQQUxJVkUgb24gc29ja2V0IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo2MzUgY29ubmVjdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29raW5nIHVwICVzIC4uLiAiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCAlcyAocG9ydCAlcykgKCVzKSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJMb29raW5nIHVwICVzIC4uLiAiCisjOiBjb25uZWN0LmM6NjQzIGNvbm5lY3QuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmUuXG4iCisiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NjY1IGNvbm5lY3QuYzo3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byBjb25uZWN0IHRvICVzOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCisjOiBjb25uZWN0LmM6NjcxIGNvbm5lY3QuYzo3NDgKK21zZ2lkICJkb25lLiIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzICglcykiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHBvcnQgJXMiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjg0NSBjb25uZWN0LmM6MTE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIGhvc3RuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcG9ydCAnJXMnIGJsb2NrZWQiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhcnQgcHJveHkgJXMiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjkyNAorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkOyBzZWUgJ2dpdCBoZWxwIHB1bGwnIGZvciB2YWxpZCB1cmwgc3ludGF4IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoxMTE5Cittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTEzMQorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjExNDgKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgcG9ydCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBhdGhuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTMwNworbXNnaWQgInVuYWJsZSB0byBmb3JrIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3RlZC5jOjg1IGJ1aWx0aW4vZnNjay5jOjIyMSBidWlsdGluL3BydW5lLmM6NDMKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0YHQvtC10LTQuNC90LXQvdC40Y8iCisKKyM6IGNvbm5lY3RlZC5jOjk3Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/Rg9GB0YLQuNGC0YwgwqtnaXQgcmV2LWxpc3TCuyIKKworIzogY29ubmVjdGVkLmM6MTE3Cittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0IgorbXNnc3RyICLRgdCx0L7QuSDQt9Cw0L/QuNGB0Lgg0LIgcmV2LWxpc3QiCisKKyM6IGNvbm5lY3RlZC5jOjEyNAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSByZXYtbGlzdCdzIHN0ZGluIgorbXNnc3RyICLRgdCx0L7QuSDQt9Cw0LrRgNGL0YLQuNGPINGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwINGDIHJldi1saXN0IgorCisjOiBjb252ZXJ0LmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgY3JsZl9hY3Rpb24gJWQiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDUkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNSTEYgd2lsbCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcyIKK21zZ3N0ciAiTEYg0LHRg9C00LXRgiDQt9Cw0LzQtdC90LXQvSDQvdCwIENSTEYg0LIgJXMiCisKKyM6IGNvbnZlcnQuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHByb2hpYml0ZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICJCT00g0LfQsNC/0YDQtdGJ0LXQvSDQsiDCqyVzwrssINC10YHQu9C4INC60L7QtNC40YDRg9C10YLRgdGPINC60LDQuiAlcyIKKworIzogY29udmVydC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBjb250YWlucyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJXMgYXMgIgorIndvcmtpbmctdHJlZS1lbmNvZGluZy4iCittc2dzdHIgItCk0LDQudC7IMKrJXPCuyDRgdC+0LTQtdGA0LbQuNGCINC80LDRgNC60LXRgCDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0Lgg0LHQsNC50YLQvtCyIChCT00pLiDQmNGB0L/QvtC70YzQt9GD0LnRgtC1IFVURi0lcyDQutCw0Log0LrQvtC00LjRgNC+0LLQutGDINGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsC4iCisKKyM6IGNvbnZlcnQuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHJlcXVpcmVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAiQk9NINGC0YDQtdCx0YPQtdGC0YHRjyDQsiDCqyVzwrssINC10YHQu9C4INC60L7QtNC40YDRg9C10YLRgdGPINC60LDQuiAlcyIKKworIzogY29udmVydC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBpcyBtaXNzaW5nIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lc0JFIG9yICIKKyJVVEYtJXNMRSAoZGVwZW5kaW5nIG9uIHRoZSBieXRlIG9yZGVyKSBhcyB3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICLQpNCw0LnQuyDCqyVzwrsg0L3QtSDRgdC+0LTQtdGA0LbQuNGCINC80LDRgNC60LXRgCDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0Lgg0LHQsNC50YLQvtCyIChCT00pLiAg0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSBVVEYtJXNCRSDQuNC70LggVVRGLSVzTEUgKNCyINC30LDQstC40YHQuNC80L7RgdGC0Lgg0L7RgiDQv9C+0YDRj9C00LrQsCDQsdCw0LnRgtC+0LIpINC60LDQuiDQutC+0LTQuNGA0L7QstC60YMg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwLiIKKworIzogY29udmVydC5jOjQyNCBjb252ZXJ0LmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBlbmNvZGUgJyVzJyBmcm9tICVzIHRvICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10LrQvtC00LjRgNC+0LLQsNGC0Ywgwqslc8K7INC40LcgJXMg0LIgJXMiCisKKyM6IGNvbnZlcnQuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW5jb2RpbmcgJyVzJyBmcm9tICVzIHRvICVzIGFuZCBiYWNrIGlzIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAi0L/QtdGA0LXQutC+0LTQuNGA0L7QstCw0L3QuNC1IMKrJXPCuyDQuNC3ICVzINCyICVzINC4INC+0LHRgNCw0YLQvdC+INC90LUg0L7QtNC90L4g0Lgg0YLQviDQttC1IgorCisjOiBjb252ZXJ0LmM6NjczCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmb3JrIHRvIHJ1biBleHRlcm5hbCBmaWx0ZXIgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6NjkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmZWVkIHRoZSBpbnB1dCB0byBleHRlcm5hbCBmaWx0ZXIgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCAlZCIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6NzM1IGNvbnZlcnQuYzo3MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBmcm9tIGV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6NzQxIGNvbnZlcnQuYzo3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo4NDQKK21zZ2lkICJ1bmV4cGVjdGVkIGZpbHRlciB0eXBlIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo4NTUKK21zZ2lkICJwYXRoIG5hbWUgdG9vIGxvbmcgZm9yIGV4dGVybmFsIGZpbHRlciIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6OTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHRlcm5hbCBmaWx0ZXIgJyVzJyBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUgYWx0aG91Z2ggbm90IGFsbCBwYXRocyBoYXZlICIKKyJiZWVuIGZpbHRlcmVkIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzoxMjI4Cittc2dpZCAidHJ1ZS9mYWxzZSBhcmUgbm8gdmFsaWQgd29ya2luZy10cmVlLWVuY29kaW5ncyIKK21zZ3N0ciAidHJ1ZS9mYWxzZSDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LTQvtC/0YPRgdGC0LjQvNGL0Lwg0LfQvdCw0YfQtdC90LjQtdC8INC00LvRjyB3b3JraW5nLXRyZWUtZW5jb2RpbmciCisKKyM6IGNvbnZlcnQuYzoxMzk4IGNvbnZlcnQuYzoxNDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjE0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHNtdWRnZSBmaWx0ZXIgJXMgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGRhdGUuYzoxMzcKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICLQsiDQsdGD0LTRg9GJ0LXQvCIKKworIzogZGF0ZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4g0YHQtdC60YPQvdC00LAg0L3QsNC30LDQtCIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiDRgdC10LrRg9C90LTRiyDQvdCw0LfQsNC0IgorbXNnc3RyWzJdICIlPFBSSXVNQVg+INGB0LXQutGD0L3QtCDQvdCw0LfQsNC0IgorbXNnc3RyWzNdICIlPFBSSXVNQVg+INGB0LXQutGD0L3QtNGLINC90LDQt9Cw0LQiCisKKyM6IGRhdGUuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtaW51dGUgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+INC80LjQvdGD0YLQsCDQvdCw0LfQsNC0IgorbXNnc3RyWzFdICIlPFBSSXVNQVg+INC80LjQvdGD0YLRiyDQvdCw0LfQsNC0IgorbXNnc3RyWzJdICIlPFBSSXVNQVg+INC80LjQvdGD0YIg0L3QsNC30LDQtCIKK21zZ3N0clszXSAiJTxQUkl1TUFYPiDQvNC40L3Rg9GC0Ysg0L3QsNC30LDQtCIKKworIzogZGF0ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGhvdXIgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IGhvdXJzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiDRh9Cw0YEg0L3QsNC30LDQtCIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiDRh9Cw0YHQsCDQvdCw0LfQsNC0IgorbXNnc3RyWzJdICIlPFBSSXVNQVg+INGH0LDRgdC+0LIg0L3QsNC30LDQtCIKK21zZ3N0clszXSAiJTxQUkl1TUFYPiDRh9Cw0YHQsCDQvdCw0LfQsNC0IgorCisjOiBkYXRlLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBkYXlzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiDQtNC10L3RjCDQvdCw0LfQsNC0IgorbXNnc3RyWzFdICIlPFBSSXVNQVg+INC00L3RjyDQvdCw0LfQsNC0IgorbXNnc3RyWzJdICIlPFBSSXVNQVg+INC00L3QtdC5INC90LDQt9Cw0LQiCittc2dzdHJbM10gIiU8UFJJdU1BWD4g0LTQvdGPINC90LDQt9Cw0LQiCisKKyM6IGRhdGUuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB3ZWVrcyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4g0L3QtdC00LXQu9GOINC90LDQt9Cw0LQiCittc2dzdHJbMV0gIiU8UFJJdU1BWD4g0L3QtdC00LXQu9C4INC90LDQt9Cw0LQiCittc2dzdHJbMl0gIiU8UFJJdU1BWD4g0L3QtdC00LXQu9GMINC90LDQt9Cw0LQiCittc2dzdHJbM10gIiU8UFJJdU1BWD4g0L3QtdC00LXQu9C4INC90LDQt9Cw0LQiCisKKyM6IGRhdGUuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiDQvNC10YHRj9GGINC90LDQt9Cw0LQiCittc2dzdHJbMV0gIiU8UFJJdU1BWD4g0LzQtdGB0Y/RhtCwINC90LDQt9Cw0LQiCittc2dzdHJbMl0gIiU8UFJJdU1BWD4g0LzQtdGB0Y/RhtC10LIg0L3QsNC30LDQtCIKK21zZ3N0clszXSAiJTxQUkl1TUFYPiDQvNC10YHRj9GG0LAg0L3QsNC30LDQtCIKKworIzogZGF0ZS5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIiCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMiCittc2dzdHJbMF0gIiU8UFJJdU1BWD4g0LPQvtC0IgorbXNnc3RyWzFdICIlPFBSSXVNQVg+INCz0L7QtNCwIgorbXNnc3RyWzJdICIlPFBSSXVNQVg+INC70LXRgiIKK21zZ3N0clszXSAiJTxQUkl1TUFYPiDQs9C+0LTQsCIKKworIy4gVFJBTlNMQVRPUlM6ICIlcyIgaXMgIjxuPiB5ZWFycyIKKyM6IGRhdGUuYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsICU8UFJJdU1BWD4gbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlcywgJTxQUkl1TUFYPiDQvNC10YHRj9GGINC90LDQt9Cw0LQiCittc2dzdHJbMV0gIiVzLCAlPFBSSXVNQVg+INC80LXRgdGP0YbQsCDQvdCw0LfQsNC0IgorbXNnc3RyWzJdICIlcywgJTxQUkl1TUFYPiDQvNC10YHRj9GG0LXQsiDQvdCw0LfQsNC0IgorbXNnc3RyWzNdICIlcywgJTxQUkl1TUFYPiDQvNC10YHRj9GG0LAg0L3QsNC30LDQtCIKKworIzogZGF0ZS5jOjE5NiBkYXRlLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4geWVhciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+INCz0L7QtCDQvdCw0LfQsNC0IgorbXNnc3RyWzFdICIlPFBSSXVNQVg+INCz0L7QtNCwINC90LDQt9Cw0LQiCittc2dzdHJbMl0gIiU8UFJJdU1BWD4g0LvQtdGCINC90LDQt9Cw0LQiCittc2dzdHJbM10gIiU8UFJJdU1BWD4g0LPQvtC00LAg0L3QsNC30LDQtCIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI3MgorbXNnaWQgIlByb3BhZ2F0aW5nIGlzbGFuZCBtYXJrcyIKK21zZ3N0ciAiIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB0cmVlIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIGlzbGFuZCByZWdleCBmb3IgJyVzJzogJXMiCittc2dzdHIgIiIKKworIzogZGVsdGEtaXNsYW5kcy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpc2xhbmQgcmVnZXggZnJvbSBjb25maWcgaGFzIHRvbyBtYW55IGNhcHR1cmUgZ3JvdXBzIChtYXg9JWQpIgorbXNnc3RyICIiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2VkICVkIGlzbGFuZHMsIGRvbmUuXG4iCittc2dzdHIgIiIKKworIzogZGlmZmNvcmUtb3JkZXIuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvcmRlcmZpbGUgJyVzJyIKK21zZ3N0ciAi0YHQsdC+0Lkg0YfRgtC10L3QuNGPIG9yZGVyZmlsZSDCqyVzwrsiCisKKyM6IGRpZmZjb3JlLXJlbmFtZS5jOjU0NAorbXNnaWQgIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICLQktGL0L/QvtC70L3Rj9C10YLRgdGPINC90LXRgtC+0YfQvdC+0LUg0L7Qv9GA0LXQtNC10LvQtdC90LjQtSDQv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNGPIgorCisjOiBkaWZmLW5vLWluZGV4LmM6MjM4Cittc2dpZCAiZ2l0IGRpZmYgLS1uby1pbmRleCBbPG9wdGlvbnM+XSA8cGF0aD4gPHBhdGg+IgorbXNnc3RyICIiCisKKyM6IGRpZmYtbm8taW5kZXguYzoyNjMKK21zZ2lkICIiCisiTm90IGEgZ2l0IHJlcG9zaXRvcnkuIFVzZSAtLW5vLWluZGV4IHRvIGNvbXBhcmUgdHdvIHBhdGhzIG91dHNpZGUgYSB3b3JraW5nICIKKyJ0cmVlIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIgorbXNnc3RyICIgINCh0LHQvtC5INGA0LDQt9Cx0L7RgNCwINCy0LXQu9C40YfQuNC90Ysg0YHRgNC10LfQsCAoY3V0LW9mZikg0YMgZGlyc3RhdCDCqyVzwrtcbiIKKworIzogZGlmZi5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICLQndC10LjQt9Cy0LXRgdGC0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAgZGlyc3RhdDogwqslc8K7XG4iCisKKyM6IGRpZmYuYzoyOTYKK21zZ2lkICIiCisiY29sb3IgbW92ZWQgc2V0dGluZyBtdXN0IGJlIG9uZSBvZiAnbm8nLCAnZGVmYXVsdCcsICdibG9ja3MnLCAnemVicmEnLCAiCisiJ2RpbW1lZC16ZWJyYScsICdwbGFpbiciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcycsIHBvc3NpYmxlIHZhbHVlcyBhcmUgJ2lnbm9yZS1zcGFjZS1jaGFuZ2UnLCIKKyIgJ2lnbm9yZS1zcGFjZS1hdC1lb2wnLCAnaWdub3JlLWFsbC1zcGFjZScsICdhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UnIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzozMzIKK21zZ2lkICIiCisiY29sb3ItbW92ZWQtd3M6IGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciAiCisid2hpdGVzcGFjZSBtb2RlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdmFsdWUgZm9yICdkaWZmLnN1Ym1vZHVsZScgY29uZmlnIHZhcmlhYmxlOiAnJXMnIgorbXNnc3RyICLQndC10LjQt9Cy0LXRgdGC0L3QvtC1INC30L3QsNGH0LXQvdC40Y8g0LTQu9GPINC/0LXRgNC10LzQtdC90L3QvtC5IMKrZGlmZi5zdWJtb2R1bGXCuzogwqslc8K7IgorCisjOiBkaWZmLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3VuZCBlcnJvcnMgaW4gJ2RpZmYuZGlyc3RhdCcgY29uZmlnIHZhcmlhYmxlOlxuIgorIiVzIgorbXNnc3RyICLQndCw0LnQtNC10L3RiyDQvtGI0LjQsdC60Lgg0LIg0L/QtdGA0LXQvNC10L3QvdC+0LkgwqtkaWZmLmRpcnN0YXTCuzpcbiVzIgorCisjOiBkaWZmLmM6NDIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICLQutGA0LjRgtC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsCDQv9GA0Lgg0LLQvdC10YjQvdC10Lwg0YHRgNCw0LLQvdC10L3QuNC4LCDQvtGB0YLQsNC90L7QsiDQvdCwICVzIgorCisjOiBkaWZmLmM6NDU1NQorbXNnaWQgIi0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtLWNoZWNrIGFuZCAtcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayDQuCAtcyDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviIKKworIzogZGlmZi5jOjQ1NTgKK21zZ2lkICItRywgLVMgYW5kIC0tZmluZC1vYmplY3QgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLUcsIC1TINC4IC0tZmluZC1vYmplY3Qg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGRpZmYuYzo0NjM2Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIi0tZm9sbG93INGC0YDQtdCx0YPQtdGCINGA0L7QstC90L4g0L7QtNC90L7Qs9C+INGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgNCwINC/0YPRgtC4IgorCisjOiBkaWZmLmM6NDY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tc3RhdCB2YWx1ZTogJXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ2ODkgZGlmZi5jOjQ2OTQgZGlmZi5jOjQ2OTkgZGlmZi5jOjQ3MDQgZGlmZi5jOjUyMTcKKyM6IHBhcnNlLW9wdGlvbnMuYzoxOTkgcGFyc2Utb3B0aW9ucy5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0NzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gcGFyc2UgLS1kaXJzdGF0Ly1YIG9wdGlvbiBwYXJhbWV0ZXI6XG4iCisiJXMiCittc2dzdHIgItCh0LHQvtC5INGA0LDQt9Cx0L7RgNCwINC/0LDRgNCw0LzQtdGC0YDQsCDQvtC/0YbQuNC4IC0tZGlyc3RhdC8tWCA6XG4lcyIKKworIzogZGlmZi5jOjQ4MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjaGFuZ2UgY2xhc3MgJyVjJyBpbiAtLWRpZmYtZmlsdGVyPSVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0ODMwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgYWZ0ZXIgd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDg5NCBkaWZmLmM6NDkwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIDxuPi88bT4gZm9ybSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDkxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgY2hhcmFjdGVyLCBnb3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDkzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS1jb2xvci1tb3ZlZCBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlICclcycgaW4gLS1jb2xvci1tb3ZlZC13cyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDk5MgorbXNnaWQgIm9wdGlvbiBkaWZmLWFsZ29yaXRobSBhY2NlcHRzIFwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2VcIiBhbmQgXCJoaXN0b2dyYW1cIiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTAyOCBkaWZmLmM6NTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50IHRvICVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAtLXN1Ym1vZHVsZSBvcHRpb24gcGFyYW1ldGVyOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MjQyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLXdvcmQtZGlmZiBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyNjUKK21zZ2lkICJEaWZmIG91dHB1dCBmb3JtYXQgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI2NyBkaWZmLmM6NTI3MworbXNnaWQgImdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MjcwIGJ1aWx0aW4vbG9nLmM6MTY3Cittc2dpZCAic3VwcHJlc3MgZGlmZiBvdXRwdXQiCittc2dzdHIgItC90LUg0LLRi9Cy0L7QtNC40YLRjCDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBkaWZmLmM6NTI3NSBkaWZmLmM6NTM4OSBkaWZmLmM6NTM5NgorbXNnaWQgIjxuPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI3NiBkaWZmLmM6NTI3OQorbXNnaWQgImdlbmVyYXRlIGRpZmZzIHdpdGggPG4+IGxpbmVzIGNvbnRleHQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyODEKK21zZ2lkICJnZW5lcmF0ZSB0aGUgZGlmZiBpbiByYXcgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mjg0Cittc2dpZCAic3lub255bSBmb3IgJy1wIC0tcmF3JyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI4OAorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXN0YXQnIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MjkyCittc2dpZCAibWFjaGluZSBmcmllbmRseSAtLXN0YXQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyOTUKK21zZ2lkICJvdXRwdXQgb25seSB0aGUgbGFzdCBsaW5lIG9mIC0tc3RhdCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI5NyBkaWZmLmM6NTMwNQorbXNnaWQgIjxwYXJhbTEscGFyYW0yPi4uLiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI5OAorbXNnaWQgIiIKKyJvdXRwdXQgdGhlIGRpc3RyaWJ1dGlvbiBvZiByZWxhdGl2ZSBhbW91bnQgb2YgY2hhbmdlcyBmb3IgZWFjaCBzdWItZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzAyCittc2dpZCAic3lub255bSBmb3IgLS1kaXJzdGF0PWN1bXVsYXRpdmUiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMDYKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9ZmlsZXMscGFyYW0xLHBhcmFtMi4uLiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMxMAorbXNnaWQgIndhcm4gaWYgY2hhbmdlcyBpbnRyb2R1Y2UgY29uZmxpY3QgbWFya2VycyBvciB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMxMworbXNnaWQgImNvbmRlbnNlZCBzdW1tYXJ5IHN1Y2ggYXMgY3JlYXRpb25zLCByZW5hbWVzIGFuZCBtb2RlIGNoYW5nZXMiCittc2dzdHIgItC60YDQsNGC0LrQsNGPINGB0LLQvtC00LrQsCDQuNC30LzQtdC90LXQvdC40LksINCy0YDQvtC00LUg0YHQvtC30LTQsNC90LjQuSwg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQuSDQuNC70Lgg0LjQt9C80LXQvdC10L3QuNC5INGA0LXQttC40LzQsCDQtNC+0YHRgtGD0L/QsCIKKworIzogZGlmZi5jOjUzMTYKK21zZ2lkICJzaG93IG9ubHkgbmFtZXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMxOQorbXNnaWQgInNob3cgb25seSBuYW1lcyBhbmQgc3RhdHVzIG9mIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMjEKK21zZ2lkICI8d2lkdGg+Wyw8bmFtZS13aWR0aD5bLDxjb3VudD5dXSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMyMgorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzI0IGRpZmYuYzo1MzI3IGRpZmYuYzo1MzMwCittc2dpZCAiPHdpZHRoPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMyNQorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiB3aWR0aCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMyOAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiBuYW1lIHdpZHRoIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzMxCittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIGdyYXBoIHdpZHRoIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzMzCittc2dpZCAiPGNvdW50PiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMzNAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggbGltaXRlZCBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMzNworbXNnaWQgImdlbmVyYXRlIGNvbXBhY3Qgc3VtbWFyeSBpbiBkaWZmc3RhdCIKK21zZ3N0ciAi0LPQtdC90LXRgNCw0YbQuNGPINC60L7QvNC/0LDQutGC0L3QvtC5INGB0LLQvtC00LrQuCDQuNC30LzQtdC90LXQvdC40Lkg0LIgZGlmZnN0YXQiCisKKyM6IGRpZmYuYzo1MzQwCittc2dpZCAib3V0cHV0IGEgYmluYXJ5IGRpZmYgdGhhdCBjYW4gYmUgYXBwbGllZCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM0MworbXNnaWQgInNob3cgZnVsbCBwcmUtIGFuZCBwb3N0LWltYWdlIG9iamVjdCBuYW1lcyBvbiB0aGUgXCJpbmRleFwiIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzQ1Cittc2dpZCAic2hvdyBjb2xvcmVkIGRpZmYiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNDYKK21zZ2lkICI8a2luZD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNDcKK21zZ2lkICIiCisiaGlnaGxpZ2h0IHdoaXRlc3BhY2UgZXJyb3JzIGluIHRoZSAnY29udGV4dCcsICdvbGQnIG9yICduZXcnIGxpbmVzIGluIHRoZSAiCisiZGlmZiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM1MAorbXNnaWQgIiIKKyJkbyBub3QgbXVuZ2UgcGF0aG5hbWVzIGFuZCB1c2UgTlVMcyBhcyBvdXRwdXQgZmllbGQgdGVybWluYXRvcnMgaW4gLS1yYXcgb3IgIgorIi0tbnVtc3RhdCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM1MyBkaWZmLmM6NTM1NiBkaWZmLmM6NTM1OSBkaWZmLmM6NTQ2NQorbXNnaWQgIjxwcmVmaXg+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzU0Cittc2dpZCAic2hvdyB0aGUgZ2l2ZW4gc291cmNlIHByZWZpeCBpbnN0ZWFkIG9mIFwiYS9cIiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM1NworbXNnaWQgInNob3cgdGhlIGdpdmVuIGRlc3RpbmF0aW9uIHByZWZpeCBpbnN0ZWFkIG9mIFwiYi9cIiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM2MAorbXNnaWQgInByZXBlbmQgYW4gYWRkaXRpb25hbCBwcmVmaXggdG8gZXZlcnkgbGluZSBvZiBvdXRwdXQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNjMKK21zZ2lkICJkbyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM2NgorbXNnaWQgInNob3cgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbGluZXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNzAgZGlmZi5jOjUzNzUgZGlmZi5jOjUzODAKK21zZ2lkICI8Y2hhcj4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNzEKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBuZXcgbGluZSBpbnN0ZWFkIG9mICcrJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM3NgorbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhbiBvbGQgbGluZSBpbnN0ZWFkIG9mICctJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM4MQorbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIGNvbnRleHQgaW5zdGVhZCBvZiAnICciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzODQKK21zZ2lkICJEaWZmIHJlbmFtZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mzg1Cittc2dpZCAiPG4+Wy88bT5dIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mzg2Cittc2dpZCAiYnJlYWsgY29tcGxldGUgcmV3cml0ZSBjaGFuZ2VzIGludG8gcGFpcnMgb2YgZGVsZXRlIGFuZCBjcmVhdGUiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzOTAKK21zZ2lkICJkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM5NAorbXNnaWQgIm9taXQgdGhlIHByZWltYWdlIGZvciBkZWxldGVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mzk3Cittc2dpZCAiZGV0ZWN0IGNvcGllcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQwMQorbXNnaWQgInVzZSB1bm1vZGlmaWVkIGZpbGVzIGFzIHNvdXJjZSB0byBmaW5kIGNvcGllcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQwMworbXNnaWQgImRpc2FibGUgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQwNgorbXNnaWQgInVzZSBlbXB0eSBibG9icyBhcyByZW5hbWUgc291cmNlIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDA4Cittc2dpZCAiY29udGludWUgbGlzdGluZyB0aGUgaGlzdG9yeSBvZiBhIGZpbGUgYmV5b25kIHJlbmFtZXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MTEKK21zZ2lkICIiCisicHJldmVudCByZW5hbWUvY29weSBkZXRlY3Rpb24gaWYgdGhlIG51bWJlciBvZiByZW5hbWUvY29weSB0YXJnZXRzIGV4Y2VlZHMgIgorImdpdmVuIGxpbWl0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDEzCittc2dpZCAiRGlmZiBhbGdvcml0aG0gb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQxNQorbXNnaWQgInByb2R1Y2UgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGRpZmYiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MTgKK21zZ2lkICJpZ25vcmUgd2hpdGVzcGFjZSB3aGVuIGNvbXBhcmluZyBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQyMQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZXNwYWNlIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDI0Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSBhdCBFT0wiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MjcKK21zZ2lkICJpZ25vcmUgY2Fycmllci1yZXR1cm4gYXQgdGhlIGVuZCBvZiBsaW5lIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDMwCittc2dpZCAiaWdub3JlIGNoYW5nZXMgd2hvc2UgbGluZXMgYXJlIGFsbCBibGFuayIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQzMworbXNnaWQgImhldXJpc3RpYyB0byBzaGlmdCBkaWZmIGh1bmsgYm91bmRhcmllcyBmb3IgZWFzeSByZWFkaW5nIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDM2Cittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJwYXRpZW5jZSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDQwCittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJoaXN0b2dyYW0gZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ0MgorbXNnaWQgIjxhbGdvcml0aG0+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDQzCittc2dpZCAiY2hvb3NlIGEgZGlmZiBhbGdvcml0aG0iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDUKK21zZ2lkICI8dGV4dD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDYKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImFuY2hvcmVkIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDggZGlmZi5jOjU0NTcgZGlmZi5jOjU0NjAKK21zZ2lkICI8bW9kZT4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDkKK21zZ2lkICJzaG93IHdvcmQgZGlmZiwgdXNpbmcgPG1vZGU+IHRvIGRlbGltaXQgY2hhbmdlZCB3b3JkcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ1MSBkaWZmLmM6NTQ1NCBkaWZmLmM6NTQ5OQorbXNnaWQgIjxyZWdleD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NTIKK21zZ2lkICJ1c2UgPHJlZ2V4PiB0byBkZWNpZGUgd2hhdCBhIHdvcmQgaXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NTUKK21zZ2lkICJlcXVpdmFsZW50IHRvIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxyZWdleD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NTgKK21zZ2lkICJtb3ZlZCBsaW5lcyBvZiBjb2RlIGFyZSBjb2xvcmVkIGRpZmZlcmVudGx5IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDYxCittc2dpZCAiaG93IHdoaXRlIHNwYWNlcyBhcmUgaWdub3JlZCBpbiAtLWNvbG9yLW1vdmVkIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDY0Cittc2dpZCAiT3RoZXIgZGlmZiBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDY2Cittc2dpZCAid2hlbiBydW4gZnJvbSBzdWJkaXIsIGV4Y2x1ZGUgY2hhbmdlcyBvdXRzaWRlIGFuZCBzaG93IHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDcwCittc2dpZCAidHJlYXQgYWxsIGZpbGVzIGFzIHRleHQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NzIKK21zZ2lkICJzd2FwIHR3byBpbnB1dHMsIHJldmVyc2UgdGhlIGRpZmYiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NzQKK21zZ2lkICJleGl0IHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzLCAwIG90aGVyd2lzZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ3NgorbXNnaWQgImRpc2FibGUgYWxsIG91dHB1dCBvZiB0aGUgcHJvZ3JhbSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ3OAorbXNnaWQgImFsbG93IGFuIGV4dGVybmFsIGRpZmYgaGVscGVyIHRvIGJlIGV4ZWN1dGVkIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDgwCittc2dpZCAicnVuIGV4dGVybmFsIHRleHQgY29udmVyc2lvbiBmaWx0ZXJzIHdoZW4gY29tcGFyaW5nIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ4MgorbXNnaWQgIjx3aGVuPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ4MworbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgaW4gdGhlIGRpZmYgZ2VuZXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ4NgorbXNnaWQgIjxmb3JtYXQ+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDg3Cittc2dpZCAic3BlY2lmeSBob3cgZGlmZmVyZW5jZXMgaW4gc3VibW9kdWxlcyBhcmUgc2hvd24iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0OTEKK21zZ2lkICJoaWRlICdnaXQgYWRkIC1OJyBlbnRyaWVzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDk0Cittc2dpZCAidHJlYXQgJ2dpdCBhZGQgLU4nIGVudHJpZXMgYXMgcmVhbCBpbiB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0OTYKK21zZ2lkICI8c3RyaW5nPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ5NworbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInN0cmluZyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTUwMAorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInJlZ2V4IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTAzCittc2dpZCAic2hvdyBhbGwgY2hhbmdlcyBpbiB0aGUgY2hhbmdlc2V0IHdpdGggLVMgb3IgLUciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU1MDYKK21zZ2lkICJ0cmVhdCA8c3RyaW5nPiBpbiAtUyBhcyBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU1MDkKK21zZ2lkICJjb250cm9sIHRoZSBvcmRlciBpbiB3aGljaCBmaWxlcyBhcHBlYXIgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTUxMAorbXNnaWQgIjxvYmplY3QtaWQ+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTExCittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisib2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTEzCittc2dpZCAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTE0Cittc2dpZCAic2VsZWN0IGZpbGVzIGJ5IGRpZmYgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTUxNgorbXNnaWQgIjxmaWxlPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTUxNworbXNnaWQgIk91dHB1dCB0byBhIHNwZWNpZmljIGZpbGUiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjYxNTAKK21zZ2lkICJpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24gd2FzIHNraXBwZWQgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAi0L3QtdGC0L7Rh9C90L7QtSDQvtC/0YDQtdC00LXQu9C10L3QuNC1INC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40Y8g0LHRi9C70L4g0L/RgNC+0L/Rg9GJ0LXQvdC+INC40Lct0LfQsCDRgdC70LjRiNC60L7QvCDQsdC+0LvRjNGI0L7Qs9C+INC60L7Qu9C40YfQtdGB0YLQstCwINGE0LDQudC70L7Qsi4iCisKKyM6IGRpZmYuYzo2MTUzCittc2dpZCAib25seSBmb3VuZCBjb3BpZXMgZnJvbSBtb2RpZmllZCBwYXRocyBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICLQvdCw0LnQtNC10L3RiyDRgtC+0LvRjNC60L4g0LrQvtC/0LjQuCDQuNC3INC40LfQvNC10L3QtdC90L3Ri9GFINC/0YPRgtC10Lkg0LjQty3Qt9CwINGB0LvQuNGI0LrQvtC8INCx0L7Qu9GM0YjQvtCz0L4g0LrQvtC70LjRh9C10YHRgtCy0LAg0YTQsNC50LvQvtCyLiIKKworIzogZGlmZi5jOjYxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInlvdSBtYXkgd2FudCB0byBzZXQgeW91ciAlcyB2YXJpYWJsZSB0byBhdCBsZWFzdCAlZCBhbmQgcmV0cnkgdGhlIGNvbW1hbmQuIgorbXNnc3RyICLQstC+0LfQvNC+0LbQvdC+INCy0Ysg0LfQsNGF0L7RgtC40YLQtSDRg9GB0YLQsNC90L7QstC40YLRjCDQv9C10YDQtdC80LXQvdC90YPRjiAlcyDQsiDQutCw0Log0LzQuNC90LjQvNGD0Lwg0LfQvdCw0YfQtdC90LjQtSAlZCDQuCDQv9C+0LLRgtC+0YDQuNGC0Ywg0LLRi9C30L7QsiDQutC+0LzQsNC90LTRiy4iCisKKyM6IGRpci5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGUocykga25vd24gdG8gZ2l0IgorbXNnc3RyICIiCisKKyM6IGRpci5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdXNlICVzIGFzIGFuIGV4Y2x1ZGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBkaXIuYzoxODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINC60LDRgtCw0LvQvtCzIMKrJXPCuyIKKworIzogZGlyLmM6MjA4NQorbXNnaWQgImZhaWxlZCB0byBnZXQga2VybmVsIG5hbWUgYW5kIGluZm9ybWF0aW9uIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0LjQvNGPINGP0LTRgNCwINC4INC40L3RhNC+0YDQvNCw0YbQuNGOIgorCisjOiBkaXIuYzoyMjA5Cittc2dpZCAidW50cmFja2VkIGNhY2hlIGlzIGRpc2FibGVkIG9uIHRoaXMgc3lzdGVtIG9yIGxvY2F0aW9uIgorbXNnc3RyICIiCisKKyM6IGRpci5jOjMwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IGluIHJlcG8gJXMiCittc2dzdHIgIiIKKworIzogZGlyLmM6MzA1OCBkaXIuYzozMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINC60LDRgtCw0LvQvtCz0Lgg0LTQu9GPICVzIgorCisjOiBkaXIuYzozMDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtaWdyYXRlIGdpdCBkaXJlY3RvcnkgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQvNC10YHRgtC40YLRjCDQutCw0YLQsNC70L7QsyBnaXQg0YEgwqslc8K7INCyIMKrJXPCuyIKKworIzogZWRpdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGludDogV2FpdGluZyBmb3IgeW91ciBlZGl0b3IgdG8gY2xvc2UgdGhlIGZpbGUuLi4lYyIKK21zZ3N0ciAi0L/QvtC00YHQutCw0LfQutCwOiDQntC20LjQtNCw0L3QuNC1LCDQv9C+0LrQsCDQstGLINC30LDQutGA0L7QtdGC0LUg0YDQtdC00LDQutGC0L7RgCDRgSDRhNCw0LnQu9C+0LzigKYlYyIKKworIzogZW50cnkuYzoxNzgKK21zZ2lkICJGaWx0ZXJpbmcgY29udGVudCIKK21zZ3N0ciAi0KTQuNC70YzRgtGA0YPQtdGC0YHRjyDRgdC+0LTQtdGA0LbQuNC80L7QtSIKKworIzogZW50cnkuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgZmlsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGF0INC00LvRjyDRhNCw0LnQu9CwIMKrJXPCuyIKKworIzogZW52aXJvbm1lbnQuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpdCBuYW1lc3BhY2UgcGF0aCBcIiVzXCIiCittc2dzdHIgIiIKKworIzogZW52aXJvbm1lbnQuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBHSVRfRElSIHRvICclcyciCittc2dzdHIgIiIKKworIzogZXhlYy1jbWQuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJncyB0byBydW4gJXMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtb2JqZWN0LmM6MTcKK21zZ2lkICJSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgItCS0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LHQtdC3IFVSTCIKKworIzogZmV0Y2gtcGFjay5jOjE1MQorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiDQvtC20LjQtNCw0LXRgtGB0Y8g0L/QtdGA0LXQtNCw0YfQsCDRgdC/0LjRgdC60LAg0LTQu9GPINC/0L7Qu9GD0YfQtdC90LjQtSDRh9Cw0YHRgtC4IgorCisjOiBmZXRjaC1wYWNrLmM6MTU0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIGEgZmx1c2ggcGFja2V0IGFmdGVyIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTY1Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6INC+0LbQuNC00LDQtdGC0YHRjyBBQ0svTkFLLCDQsCDQv9C+0LvRg9GH0LXQvSDQv9GD0YHRgtC+0Lkg0L/QsNC60LXRgiIKKworIzogZmV0Y2gtcGFjay5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290ICclcyciCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiDQvtC20LjQtNCw0LXRgtGB0Y8gQUNLL05BSywg0LAg0L/QvtC70YPRh9C10L3QviDCqyVzwrsiCisKKyM6IGZldGNoLXBhY2suYzoxOTYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdG8gcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoyNTgKK21zZ2lkICItLXN0YXRlbGVzcy1ycGMgcmVxdWlyZXMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICItLXN0YXRlbGVzcy1ycGMg0YLRgNC10LHRg9C10YIgbXVsdGlfYWNrX2RldGFpbGVkIgorCisjOiBmZXRjaC1wYWNrLmM6MzYwIGZldGNoLXBhY2suYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINGB0YLRgNC+0LrQsCDRh9Cw0YHRgtC40YfQvdC+0LPQviDQv9C+0LvRg9GH0LXQvdC40Y86ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY2IGZldGNoLXBhY2suYzoxMjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdW5zaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdCw0Y8g0YHRgtGA0L7QutCwINC/0L7Qu9C90L7Qs9C+INC/0L7Qu9GD0YfQtdC90LjRjzogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjggZmV0Y2gtcGFjay5jOjEyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IG5vdCBmb3VuZDogJXMiCittc2dzdHIgItC+0LHRitC10LrRgiDQvdC1INC90LDQudC00LXQvTogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNzEgZmV0Y2gtcGFjay5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gb2JqZWN0OiAlcyIKK21zZ3N0ciAi0L7RiNC40LHQutCwINCyINC+0LHRitC10LrRgtC1OiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM3MyBmZXRjaC1wYWNrLmM6MTI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaGFsbG93IGZvdW5kOiAlcyIKK21zZ3N0ciAi0YfQsNGB0YLQuNGH0L3Ri9C5INC60LvQvtC9INC90LUg0L3QsNC50LTQtdC9OiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM3NiBmZXRjaC1wYWNrLmM6MTI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBzaGFsbG93L3Vuc2hhbGxvdywgZ290ICVzIgorbXNnc3RyICLQvtC20LjQtNCw0LvQvtGB0Ywgc2hhbGxvdy91bnNoYWxsb3csINCwINC/0L7Qu9GD0YfQtdC90L4gJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICVkICVzIgorbXNnc3RyICLQv9C+0LvRg9GH0LXQvdC+ICVzICVkICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0ICVzIgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNGL0Lkg0LrQvtC80LzQuNGCICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDY1Cittc2dpZCAiZ2l2aW5nIHVwIgorbXNnc3RyICLQvtGB0YLQsNC90LDQstC70LjQstCw0Y4g0LTQsNC70YzQvdC10LnRiNC40LUg0L/QvtC/0YvRgtC60LgiCisKKyM6IGZldGNoLXBhY2suYzo0NzcgcHJvZ3Jlc3MuYzoyODQKK21zZ2lkICJkb25lIgorbXNnc3RyICLQs9C+0YLQvtCy0L4iCisKKyM6IGZldGNoLXBhY2suYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICglZCkgJXMiCittc2dzdHIgItC/0L7Qu9GD0YfQtdC90L4gJXMgKCVkKSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nICVzIGFzIGNvbXBsZXRlIgorbXNnc3RyICLQn9C+0LzQtdGH0LDRjiAlcyDQutCw0Log0LfQsNCy0LXRgNGI0LXQvdC90YvQuSIKKworIzogZmV0Y2gtcGFjay5jOjc0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhbHJlYWR5IGhhdmUgJXMgKCVzKSIKK21zZ3N0ciAi0YPQttC1INC10YHRgtGMICVzICglcykiCisKKyM6IGZldGNoLXBhY2suYzo3ODMKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiZmV0Y2gtcGFjazog0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/Rg9GB0YLQuNGC0Ywg0L/RgNC+0LPRgNCw0LzQvNGDINGA0LDQt9Cx0L7RgNCwINC00LDQvdC90YvRhSIKKworIzogZmV0Y2gtcGFjay5jOjc5MQorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQv9GA0L7RgtC+0LrQvtC70LA6INC90LXQv9GA0LDQstC40LvRjNC90YvQuSDQt9Cw0LPQvtC70L7QstC+0Log0L/QvtGC0L7QutCwIgorCisjOiBmZXRjaC1wYWNrLmM6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiAlcyIKK21zZ3N0ciAiZmV0Y2gtcGFjazog0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/Rg9GB0YLQuNGC0Ywg0L/RgNC+0LPRgNCw0LzQvNGDICVzIgorCisjOiBmZXRjaC1wYWNrLmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGZhaWxlZCIKK21zZ3N0ciAiJXMg0LfQsNCy0LXRgNGI0LXQvSDRgSDQvtGI0LjQsdC60L7QuSIKKworIzogZmV0Y2gtcGFjay5jOjg3NworbXNnaWQgImVycm9yIGluIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgItC/0YDQvtC40LfQvtGI0LvQsCAg0L7RiNC40LHQutCwINCyICDQv9GA0L7Qs9GA0LDQvNC80LUg0YDQsNC30LHQvtGA0LAg0LTQsNC90L3Ri9GFIgorCisjOiBmZXRjaC1wYWNrLmM6OTA2Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjbGllbnRzIgorbXNnc3RyICLQodC10YDQstC10YAg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LrQu9C40LXQvdGC0L7QsiDRgSDRh9Cw0YHRgtC40YfQvdGL0Lwg0LrQu9C+0L3QuNGA0L7QstCw0L3QuNC10LwiCisKKyM6IGZldGNoLXBhY2suYzo5MTAKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICLQodC10YDQstC10YAg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCIG11bHRpX2Fja19kZXRhaWxlZCIKKworIzogZmV0Y2gtcGFjay5jOjkxMworbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBuby1kb25lIgorbXNnc3RyICLQodC10YDQstC10YAg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCIG5vLWRvbmUiCisKKyM6IGZldGNoLXBhY2suYzo5MTkKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlfYWNrIgorbXNnc3RyICLQodC10YDQstC10YAg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCIG11bHRpX2FjayIKKworIzogZmV0Y2gtcGFjay5jOjkyMworbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBzaWRlLWJhbmQtNjRrIgorbXNnc3RyICLQodC10YDQstC10YAg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCIHNpZGUtYmFuZC02NGsiCisKKyM6IGZldGNoLXBhY2suYzo5MjcKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kIgorbXNnc3RyICLQodC10YDQstC10YAg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCIHNpZGUtYmFuZCIKKworIzogZmV0Y2gtcGFjay5jOjkzMQorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBhbGxvdy10aXAtc2hhMS1pbi13YW50IgorbXNnc3RyICLQodC10YDQstC10YAg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCIGFsbG93LXRpcC1zaGExLWluLXdhbnQiCisKKyM6IGZldGNoLXBhY2suYzo5MzUKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgYWxsb3ctcmVhY2hhYmxlLXNoYTEtaW4td2FudCIKK21zZ3N0ciAi0KHQtdGA0LLQtdGAINC/0L7QtNC00LXRgNC20LjQstCw0LXRgiBhbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50IgorCisjOiBmZXRjaC1wYWNrLmM6OTQ1Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIG9mcy1kZWx0YSIKK21zZ3N0ciAi0KHQtdGA0LLQtdGAINC/0L7QtNC00LXRgNC20LjQstCw0LXRgiBvZnMtZGVsdGEiCisKKyM6IGZldGNoLXBhY2suYzo5NTEgZmV0Y2gtcGFjay5jOjExNDQKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgZmlsdGVyIgorbXNnc3RyICLQodC10YDQstC10YAg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINGE0LjQu9GM0YLRgNCw0YbQuNGOIgorCisjOiBmZXRjaC1wYWNrLmM6OTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uIGlzICUuKnMiCittc2dzdHIgItCS0LXRgNGB0LjRjyDRgdC10YDQstC10YDQsCAlLipzIgorCisjOiBmZXRjaC1wYWNrLmM6OTY1Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LXNpbmNlIgorbXNnc3RyICLQodC10YDQstC10YAg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIgLS1zaGFsbG93LXNpbmNlIgorCisjOiBmZXRjaC1wYWNrLmM6OTY5Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LWV4Y2x1ZGUiCittc2dzdHIgItCh0LXRgNCy0LXRgCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiAtLXNoYWxsb3ctZXhjbHVkZSIKKworIzogZmV0Y2gtcGFjay5jOjk3MQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIgorbXNnc3RyICLQodC10YDQstC10YAg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIgLS1kZWVwZW4iCisKKyM6IGZldGNoLXBhY2suYzo5ODgKK21zZ2lkICJubyBjb21tb24gY29tbWl0cyIKK21zZ3N0ciAi0L3QtSDQvtCx0YnQuNGFINC60L7QvNC80LjRgtC+0LIiCisKKyM6IGZldGNoLXBhY2suYzoxMDAwIGZldGNoLXBhY2suYzoxNDQ5Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGZldGNoIGZhaWxlZC4iCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiDQvtGI0LjQsdC60LAg0L/RgNC4INC/0L7Qu9GD0YfQtdC90LjQuCDQtNCw0L3QvdGL0YUuIgorCisjOiBmZXRjaC1wYWNrLmM6MTEzOAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgcmVxdWVzdHMiCittc2dzdHIgItCh0LXRgNCy0LXRgCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDRh9Cw0YHRgtC40YfQvdGL0LUg0LfQsNC/0YDQvtGB0YsiCisKKyM6IGZldGNoLXBhY2suYzoxMTcxCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcXVlc3QgdG8gcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgc2VjdGlvbiBoZWFkZXIgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAnJXMnLCByZWNlaXZlZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMjM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgYWNrbm93bGVkZ21lbnQgbGluZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGFja3M6ICVkIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMjQ5Cittc2dpZCAiZXhwZWN0ZWQgcGFja2ZpbGUgdG8gYmUgc2VudCBhZnRlciAncmVhZHknIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMjUxCittc2dpZCAiZXhwZWN0ZWQgbm8gb3RoZXIgc2VjdGlvbnMgdG8gYmUgc2VudCBhZnRlciBubyAncmVhZHknIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMjkzCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCB3YW50ZWQtcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIHdhbnRlZC1yZWY6ICclcyciCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyB3YW50ZWQgcmVmczogJWQiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE2NzYKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAi0L3QtdGCINGB0L7QvtGC0LLQtdGB0YLQstGD0Y7RidC10LPQviDQstC90LXRiNC90LXQs9C+INGD0LrQsNC30LDRgtC10LvRjyDQvdCwINCy0LXRgtC60YMiCisKKyM6IGZldGNoLXBhY2suYzoxNjk5IGJ1aWx0aW4vY2xvbmUuYzo2NzMKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAi0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQv9GA0LjRgdC70LDQuyDQvdC1INCy0YHQtSDQvdC10L7QsdGF0L7QtNC40LzRi9C1INC+0LHRitC10LrRgtGLIgorCisjOiBmZXRjaC1wYWNrLmM6MTcyNgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlbW90ZSByZWYgJXMiCittc2dzdHIgItC90LXRgiDRgtCw0LrQvtC5INCy0L3QtdGI0L3QtdC5INGB0YHRi9C70LrQuCAlcyIKKworIzogZmV0Y2gtcGFjay5jOjE3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IGFsbG93IHJlcXVlc3QgZm9yIHVuYWR2ZXJ0aXNlZCBvYmplY3QgJXMiCittc2dzdHIgItCh0LXRgNCy0LXRgCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDQt9Cw0L/RgNC+0YEg0L3QtdC+0LHRitGP0LLQu9C10L3QvdC+0LPQviDQvtCx0YrQtdC60YLQsCAlcyIKKworIzogZ3BnLWludGVyZmFjZS5jOjMxOAorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAiZ3BnINC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC00L/QuNGB0LDRgtGMINC00LDQvdC90YvQtSIKKworIzogZ3BnLWludGVyZmFjZS5jOjM0NAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LLRgNC10LzQtdC90L3Ri9C5INGE0LDQudC7IgorCisjOiBncGctaW50ZXJmYWNlLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnIgorbXNnc3RyICLRgdCx0L7QuSDQt9Cw0L/QuNGB0Lgg0L7RgtGB0L7QtdC00LjQvdC10L3QvdC+0Lkg0L/QvtC00L/QuNGB0Lgg0LIgwqslc8K7IgorCisjOiBncmFwaC5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yZSBpbnZhbGlkIGNvbG9yICclLipzJyBpbiBsb2cuZ3JhcGhDb2xvcnMiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0YPRjiDQvdC10LTQvtC/0YPRgdGC0LjQvNGL0Lkg0YbQstC10YIgwqslLipzwrsg0LIgbG9nLmdyYXBoQ29sb3JzIgorCisjOiBncmVwLmM6MjExMworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiwqslc8K7OiDQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LXRgdGC0YwgJXMiCisKKyM6IGdyZXAuYzoyMTMwIHNldHVwLmM6MTY0IGJ1aWx0aW4vY2xvbmUuYzo0MTEgYnVpbHRpbi9kaWZmLmM6ODIKKyM6IGJ1aWx0aW4vcm0uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywgc3RhdCDCqyVzwrsiCisKKyM6IGdyZXAuYzoyMTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQiCittc2dzdHIgIsKrJXPCuzog0YHQu9C40YjQutC+0Lwg0LzQsNC70L4g0LTQsNC90L3Ri9GFINC/0YDQvtGH0LjRgtCw0L3QviIKKworIzogaGVscC5jOjIzCittc2dpZCAic3RhcnQgYSB3b3JraW5nIGFyZWEgKHNlZSBhbHNvOiBnaXQgaGVscCB0dXRvcmlhbCkiCittc2dzdHIgItGB0L7Qt9C00LDQvdC40LUg0YDQsNCx0L7Rh9C10Lkg0L7QsdC70LDRgdGC0LggKNGB0LzQvtGC0YDQuNGC0LUg0YLQsNC60LbQtTogZ2l0IGhlbHAgdHV0b3JpYWwpIgorCisjOiBoZWxwLmM6MjQKK21zZ2lkICJ3b3JrIG9uIHRoZSBjdXJyZW50IGNoYW5nZSAoc2VlIGFsc286IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKK21zZ3N0ciAi0YDQsNCx0L7RgtCwINGBINGC0LXQutGD0YnQuNC80Lgg0LjQt9C80LXQvdC10L3QuNGP0LzQuCAo0YHQvNC+0YLRgNC40YLQtSDRgtCw0LrQttC1OiBnaXQgaGVscCBldmVyeWRheSkiCisKKyM6IGhlbHAuYzoyNQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAi0L/RgNC+0YHQvNC+0YLRgCDQuNGB0YLQvtGA0LjQuCDQuCDRgtC10LrRg9GJ0LXQs9C+INGB0L7RgdGC0L7Rj9C90LjRjyAo0YHQvNC+0YLRgNC40YLQtSDRgtCw0LrQttC1OiBnaXQgaGVscCByZXZpc2lvbnMpIgorCisjOiBoZWxwLmM6MjYKK21zZ2lkICJncm93LCBtYXJrIGFuZCB0d2VhayB5b3VyIGNvbW1vbiBoaXN0b3J5IgorbXNnc3RyICLQstGL0YDQsNGJ0LjQstCw0L3QuNC1LCDQvtGC0LzQtdGC0LrQsCDQuCDQvdCw0YHRgtGA0L7QudC60LAg0LLQsNGI0LXQuSDQvtCx0YnQtdC5INC40YHRgtC+0YDQuNC4IgorCisjOiBoZWxwLmM6MjcKK21zZ2lkICJjb2xsYWJvcmF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHdvcmtmbG93cykiCittc2dzdHIgItGB0L7QstC80LXRgdGC0L3QsNGPINGA0LDQsdC+0YLQsCAo0YHQvNC+0YLRgNC40YLQtSDRgtCw0LrQttC1OiBnaXQgaGVscCB3b3JrZmxvd3MpIgorCisjOiBoZWxwLmM6MzEKK21zZ2lkICJNYWluIFBvcmNlbGFpbiBDb21tYW5kcyIKK21zZ3N0ciAi0J7RgdC90L7QstC90YvQtSDQvNCw0YjQuNC90L7Rh9C40YLQsNC10LzRi9C1INC60L7QvNCw0L3QtNGLIgorCisjOiBoZWxwLmM6MzIKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgItCS0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90YvQtSDQutC+0LzQsNC90LTRiyAvINCc0LDQvdC40L/Rg9C70Y/RgtC+0YDRiyIKKworIzogaGVscC5jOjMzCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAi0JLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3Ri9C1INC60L7QvNCw0L3QtNGLIC8g0JfQsNC/0YDQvtGB0YfQuNC60LgiCisKKyM6IGhlbHAuYzozNAorbXNnaWQgIkludGVyYWN0aW5nIHdpdGggT3RoZXJzIgorbXNnc3RyICLQktC30LDQuNC80L7QtNC10LnRgdGC0LLQuNC1INGBINC00YDRg9Cz0LjQvNC4IgorCisjOiBoZWxwLmM6MzUKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgItCd0LjQt9C60L7Rg9GA0L7QstC90LXQstGL0LUg0LrQvtC80LDQvdC00YsgLyDQnNCw0L3QuNC/0YPQu9GP0YLQvtGA0YsiCisKKyM6IGhlbHAuYzozNgorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgItCd0LjQt9C60L7Rg9GA0L7QstC90LXQstGL0LUg0LrQvtC80LDQvdC00YsgLyDQl9Cw0L/RgNC+0YHRh9C40LrQuCIKKworIzogaGVscC5jOjM3Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gU3luY2hpbmcgUmVwb3NpdG9yaWVzIgorbXNnc3RyICLQndC40LfQutC+0YPRgNC+0LLQvdC10LLRi9C1INC60L7QvNCw0L3QtNGLIC8g0KHQuNC90YXRgNC+0L3QuNC30LDRhtC40Y8g0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdCyIgorCisjOiBoZWxwLmM6MzgKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcm5hbCBIZWxwZXJzIgorbXNnc3RyICLQndC40LfQutC+0YPRgNC+0LLQvdC10LLRi9C1INC60L7QvNCw0L3QtNGLIC8g0JLQvdGD0YLRgNC10L3QvdC40LUg0LLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3Ri9C1IgorCisjOiBoZWxwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAi0LTQvtGB0YLRg9C/0L3Ri9C1INC60L7QvNCw0L3QtNGLIGdpdCDQsiDCqyVzwrsiCisKKyM6IGhlbHAuYzozMDUKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgItC60L7QvNCw0L3QtNGLIGdpdCwg0LTQvtGB0YLRg9C/0L3Ri9C1INCyINC00YDRg9Cz0LjRhSDQvNC10YHRgtCw0YUg0LLQsNGI0LXQs9C+ICRQQVRIIgorCisjOiBoZWxwLmM6MzE0Cittc2dpZCAiVGhlc2UgYXJlIGNvbW1vbiBHaXQgY29tbWFuZHMgdXNlZCBpbiB2YXJpb3VzIHNpdHVhdGlvbnM6IgorbXNnc3RyICLQodGC0LDQvdC00LDRgNGC0L3Ri9C1INC60L7QvNCw0L3QtNGLIEdpdCDQuNGB0L/QvtC70YzQt9GD0LXQvNGL0LUg0LIg0YDQsNC30LvQuNGH0L3Ri9GFINGB0LjRgtGD0LDRhtC40Y/RhToiCisKKyM6IGhlbHAuYzozNjMgZ2l0LmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgY29tbWFuZCBsaXN0aW5nIHR5cGUgJyVzJyIKK21zZ3N0ciAi0L3QtdC/0L7QtNC00LXRgNC20LjQstCw0LXQvNGL0Lkg0YLQuNC/INGB0L/QuNGB0LrQsCDQutC+0LzQsNC90LQgwqslc8K7IgorCisjOiBoZWxwLmM6NDAzCittc2dpZCAiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZToiCittc2dzdHIgItCe0YHQvdC+0LLQvdGL0LUg0YDRg9C60L7QstC+0LTRgdGC0LLQsCBHaXQ6IgorCisjOiBoZWxwLmM6NTEyCittc2dpZCAiU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIHRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIgorbXNnc3RyICLQl9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgaGVscCA80LrQvtC80LDQvdC00LA+wrssINGH0YLQvtCx0Ysg0L/RgNC+0YfQtdGB0YLRjCDQviDQutC+0L3QutGA0LXRgtC90L7QuSDQv9C+0LTQutC+0LzQsNC90LTQtSIKKworIzogaGVscC5jOjUxNworbXNnaWQgIkV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzo1MzIKK21zZ2lkICJDb21tYW5kIGFsaWFzZXMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIsKrJXPCuyDQv9C+0YXQvtC20LUg0L3QsCDQutC+0LzQsNC90LTRgyBnaXQsINC90L4g0L3QsNC8INC90LUg0YPQtNCw0LvQvtGB0Ywg0LXQtSDQt9Cw0L/Rg9GB0YLQuNGC0YwuINCS0L7Qt9C80L7QttC90L4sIGdpdC0lcyAg0L3QtSDRgNCw0LHQvtGC0LDQtdGCPyIKKworIzogaGVscC5jOjY1NQorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICLQntC5LdGR0LkhINCS0LDRiNCwINGB0LjRgdGC0LXQvNCwINC90LUg0YHQvtC+0LHRidCw0LXRgiDQvdC4INC+INC60LDQutC40YUg0LrQvtC80LDQvdC00LDRhSBHaXQg0LLQvtC+0LHRidC1LiIKKworIzogaGVscC5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICLQktC90LjQvNCw0L3QuNC1OiDQktGLINC30LDQv9GD0YHRgtC40LvQuCDQvdC1INGB0YPRidC10YHRgtCy0YPRjtGJ0YPRjiDQutC+0LzQsNC90LTRgyBHaXQgwqslc8K7LiIKKworIzogaGVscC5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICLQn9GA0L7QtNC+0LvQttCw0Y4sINC/0YDQtdC00L/QvtC70LDQs9Cw0Y8sINGH0YLQviDQstGLINC40LzQtdC70Lgg0LIg0LLQuNC00YMgwqslc8K7LiIKKworIzogaGVscC5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIGluICUwLjFmIHNlY29uZHMsIGFzc3VtaW5nIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICLQn9GA0L7QtNC+0LvQttGDINGH0LXRgNC10LcgJTAuMWYg0YHQtdC60YPQvdC0LCDQv9GA0LXQtNC/0L7Qu9Cw0LPQsNGPLCDRh9GC0L4g0LLRiyDQuNC80LXQu9C4INCyINCy0LjQtNGDIMKrJXPCuy4iCisKKyM6IGhlbHAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiZ2l0OiDCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC60L7QvNCw0L3QtNC+0LkgZ2l0LiDQodC80L7RgtGA0LjRgtC1IMKrZ2l0IC0taGVscMK7LiIKKworIzogaGVscC5jOjY5OQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmRzIGFyZSIKK21zZ3N0clswXSAiXG7QodCw0LzRi9C1INC/0L7RhdC+0LbQuNC1INC60L7QvNCw0L3QtNGLOiIKK21zZ3N0clsxXSAiXG7QodCw0LzRi9C1INC/0L7RhdC+0LbQuNC1INC60L7QvNCw0L3QtNGLOiIKK21zZ3N0clsyXSAiXG7QodCw0LzRi9C1INC/0L7RhdC+0LbQuNC1INC60L7QvNCw0L3QtNGLOiIKK21zZ3N0clszXSAiXG7QodCw0LzRi9C1INC/0L7RhdC+0LbQuNC1INC60L7QvNCw0L3QtNGLOiIKKworIzogaGVscC5jOjcxNAorbXNnaWQgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgdmVyc2lvbiBbPG9wdGlvbnM+XSIKKworIzogaGVscC5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgLSAlcyIKK21zZ3N0ciAiJXM6ICVzIOKAlCAlcyIKKworIzogaGVscC5jOjc4NgorbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiXG7QktC+0LfQvNC+0LbQvdC+LCDQstGLINC40LzQtdC70Lgg0LIg0LLQuNC00YMg0Y3RgtC+PyIKK21zZ3N0clsxXSAiXG7QktC+0LfQvNC+0LbQvdC+LCDQstGLINC40LzQtdC70Lgg0LIg0LLQuNC00YMg0YfRgtC+LdGC0L4g0LjQtyDRjdGC0L7Qs9C+PyIKK21zZ3N0clsyXSAiXG7QktC+0LfQvNC+0LbQvdC+LCDQstGLINC40LzQtdC70Lgg0LIg0LLQuNC00YMg0YfRgtC+LdGC0L4g0LjQtyDRjdGC0L7Qs9C+PyIKK21zZ3N0clszXSAiXG7QktC+0LfQvNC+0LbQvdC+LCDQstGLINC40LzQtdC70Lgg0LIg0LLQuNC00YMg0YfRgtC+LdGC0L4g0LjQtyDRjdGC0L7Qs9C+PyIKKworIzogaWRlbnQuYzozNDkKK21zZ2lkICIiCisiXG4iCisiKioqIFBsZWFzZSB0ZWxsIG1lIHdobyB5b3UgYXJlLlxuIgorIlxuIgorIlJ1blxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyJcbiIKKyJ0byBzZXQgeW91ciBhY2NvdW50J3MgZGVmYXVsdCBpZGVudGl0eS5cbiIKKyJPbWl0IC0tZ2xvYmFsIHRvIHNldCB0aGUgaWRlbnRpdHkgb25seSBpbiB0aGlzIHJlcG9zaXRvcnkuXG4iCisiXG4iCittc2dzdHIgIlxuKioqINCf0L7QttCw0LvRg9C50YHRgtCwLCDRgdC60LDQttC40YLQtSDQvNC90LUg0LrRgtC+INCy0Ysg0LXRgdGC0YwuXG5cbtCX0LDQv9GD0YHRgtC40YLQtVxuXG4gIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4gIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwi0JLQsNGI0LUg0JjQvNGPXCJcblxu0LTQu9GPINGD0LrQsNC30LDQvdC40Y8g0LjQtNC10L3RgtC40YTQuNC60LDRhtC40L7QvdC90YvRhSDQtNCw0L3QvdGL0YUg0LDQutC60LDRg9C90YLQsCDQv9C+INGD0LzQvtC70YfQsNC90LjRji5cbtCf0YDQvtC/0YPRgdGC0LjRgtC1INC/0LDRgNCw0LzQtdGC0YAgLS1nbG9iYWwg0LTQu9GPINGD0LrQsNC30LDQvdC40Y8g0LTQsNC90L3Ri9GFINGC0L7Qu9GM0LrQviDQtNC70Y8g0Y3RgtC+0LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPLlxuXG4iCisKKyM6IGlkZW50LmM6Mzc5Cittc2dpZCAibm8gZW1haWwgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAi0LDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0Ysg0L3QtSDRg9C60LDQt9Cw0L0g0Lgg0LDQstGC0L7QvtC/0YDQtdC00LXQu9C10L3QuNC1INC+0YLQutC70Y7Rh9C10L3QviIKKworIzogaWRlbnQuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IGVtYWlsIGFkZHJlc3MgKGdvdCAnJXMnKSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywg0LDQstGC0L7QvtC/0YDQtdC00LXQu9C10L3QuNC1INCw0LTRgNC10YHQsCDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YsgKNC/0L7Qu9GD0YfQtdC90L4gwqslc8K7KSIKKworIzogaWRlbnQuYzo0MDEKK21zZ2lkICJubyBuYW1lIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiCittc2dzdHIgItC40LzRjyDQvdC1INGD0LrQsNC30LDQvdC+INC4INCw0LLRgtC+0L7Qv9GA0LXQtNC10LvQtdC90LjQtSDQvtGC0LrQu9GO0YfQtdC90L4iCisKKyM6IGlkZW50LmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBuYW1lIChnb3QgJyVzJykiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMINCw0LLRgtC+0L7Qv9GA0LXQtNC10LvQtdC90LjQtSDQuNC80LXQvdC4ICjQv9C+0LvRg9GH0LXQvdC+IMKrJXPCuykiCisKKyM6IGlkZW50LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGlkZW50IG5hbWUgKGZvciA8JXM+KSBub3QgYWxsb3dlZCIKK21zZ3N0ciAi0L/Rg9GB0YLQvtC1INC40LzRjyDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNCwICjQtNC70Y8gPCVzPikg0L3QtSDRgNCw0LfRgNC10YjQtdC90L4iCisKKyM6IGlkZW50LmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIgorbXNnc3RyICLQuNC80Y8g0YHQvtGB0YLQvtC40YIg0YLQvtC70YzQutC+INC40Lcg0L3QtdGA0LDQt9GA0LXRiNC10L3QvdGL0YUg0YHQuNC80L7QstC+0LvQvtCyOiAlcyIKKworIzogaWRlbnQuYzo0MzYgYnVpbHRpbi9jb21taXQuYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkYXRlIGZvcm1hdDogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDRhNC+0YDQvNCw0YIg0LTQsNGC0Ys6ICVzIgorCisjOiBsaXN0LW9iamVjdHMuYzoxMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyB0cmVlIG1vZGUsIGJ1dCBpcyBub3QgYSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJlbnRyeSAnJXMnIGluIHRyZWUgJXMgaGFzIGJsb2IgbW9kZSwgYnV0IGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIHJvb3QgdHJlZSBmb3IgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjM2Cittc2dpZCAibXVsdGlwbGUgZmlsdGVyLXNwZWNzIGNhbm5vdCBiZSBjb21iaW5lZCIKK21zZ3N0ciAi0L3QtdCy0L7Qt9C80L7QttC90L4g0L7QsdGK0LXQtNC40L3Rj9GC0Ywg0YTQuNC70YzRgtGA0LDRhtC40Y4g0YEg0L/QvtC80L7RidGM0Y4g0L3QtdGB0LrQvtC70YzQutC40YUg0YHQv9C10YbQuNGE0LjQutCw0YbQuNC5IgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo1OAorbXNnaWQgImV4cGVjdGVkICd0cmVlOjxkZXB0aD4nIgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjg0Cittc2dpZCAic3BhcnNlOnBhdGggZmlsdGVycyBzdXBwb3J0IGhhcyBiZWVuIGRyb3BwZWQiCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MTU4Cittc2dpZCAiY2Fubm90IGNoYW5nZSBwYXJ0aWFsIGNsb25lIHByb21pc29yIHJlbW90ZSIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC40LfQvNC10L3QuNGC0Ywg0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQv9GA0Lgg0YfQsNGB0YLQuNGH0L3QvtC8INC60LvQvtC90LjRgNC+0LLQsNC90LjQuCIKKworIzogbG9ja2ZpbGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcy5cbiIKKyJcbiIKKyJBbm90aGVyIGdpdCBwcm9jZXNzIHNlZW1zIHRvIGJlIHJ1bm5pbmcgaW4gdGhpcyByZXBvc2l0b3J5LCBlLmcuXG4iCisiYW4gZWRpdG9yIG9wZW5lZCBieSAnZ2l0IGNvbW1pdCcuIFBsZWFzZSBtYWtlIHN1cmUgYWxsIHByb2Nlc3Nlc1xuIgorImFyZSB0ZXJtaW5hdGVkIHRoZW4gdHJ5IGFnYWluLiBJZiBpdCBzdGlsbCBmYWlscywgYSBnaXQgcHJvY2Vzc1xuIgorIm1heSBoYXZlIGNyYXNoZWQgaW4gdGhpcyByZXBvc2l0b3J5IGVhcmxpZXI6XG4iCisicmVtb3ZlIHRoZSBmaWxlIG1hbnVhbGx5IHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDCqyVzLmxvY2vCuzogJXMuXG5cbtCf0L7RhdC+0LbQtSwg0YfRgtC+INC00YDRg9Cz0L7QuSDQv9GA0L7RhtC10YHRgSBnaXQg0LfQsNC/0YPRidC10L0g0LIg0Y3RgtC+0Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCxcbtC90LDQv9GA0LjQvNC10YAg0YDQtdC00LDQutGC0L7RgCDQvtGC0LrRgNGL0YIg0LjQtyDCq2dpdCBjb21taXTCuy4g0J/QvtC20LDQu9GD0LnRgdGC0LAsINGD0LHQtdC00LjRgtC10YHRjCxcbtGH0YLQviDQstGB0LUg0L/RgNC+0YbQtdGB0YHRiyDQsdGL0LvQuCDQt9Cw0LLQtdGA0YjQtdC90Ysg0Lgg0L/QvtGC0L7QvCDQv9C+0L/RgNC+0LHRg9C50YLQtSDRgdC90L7QstCwLlxu0JXRgdC70Lgg0Y3RgtC+INC90LUg0L/QvtC80L7QttC10YIsINGC0L4g0LLQvtC30LzQvtC20L3QviDQv9GA0L7RhtC10YHRgSBnaXQg0LHRi9C7INGA0LDQvdC10LUg0LfQsNCy0LXRgNGI0LXQvVxu0YEg0L7RiNC40LHQutC+0Lkg0LIg0Y3RgtC+0Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuDogXG7Rg9C00LDQu9C40YLQtSDRhNCw0LnQuyDQstGA0YPRh9C90YPRjiDQtNC70Y8g0L/RgNC+0LTQvtC70LbQtdC90LjRjy4iCisKKyM6IGxvY2tmaWxlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDCqyVzLmxvY2vCuzogJXMiCisKKyM6IG1lcmdlLmM6NDEKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgY2FjaGUiCittc2dzdHIgItGB0LHQvtC5INGH0YLQtdC90LjRjyDQutGN0YjQsCIKKworIzogbWVyZ2UuYzoxMDcgcmVyZXJlLmM6NzIwIGJ1aWx0aW4vYW0uYzoxODg3IGJ1aWx0aW4vYW0uYzoxOTIxCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDYxIGJ1aWx0aW4vY2hlY2tvdXQuYzo4MTEgYnVpbHRpbi9jbG9uZS5jOjc3MworIzogYnVpbHRpbi9zdGFzaC5jOjI2NAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINC90L7QstGL0Lkg0YTQsNC50Lsg0LjQvdC00LXQutGB0LAiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMgorbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIo0L/Qu9C+0YXQvtC5INC60L7QvNC80LjRgilcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAi0YHQsdC+0LkgYWRkX2NhY2hlaW5mbyDQtNC70Y8g0L/Rg9GC0Lggwqslc8K7OyDQvtGC0LzQtdC90LAg0YHQu9C40Y/QvdC40Y8uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgdG8gcmVmcmVzaCBmb3IgcGF0aCAnJXMnOyBtZXJnZSBhYm9ydGluZy4iCittc2dzdHIgItGB0LHQvtC5INC+0LHQvdC+0LLQu9C10L3QuNGPIGFkZF9jYWNoZWluZm8g0LTQu9GPINC/0YPRgtC4IMKrJXPCuzsg0L7RgtC80LXQvdCwINGB0LvQuNGP0L3QuNGPLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NDM3Cittc2dpZCAiZXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQv9GA0Lgg0L/QvtGB0YLRgNC+0LXQvdC40Lgg0LTQtdGA0LXQstGM0LXQsiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0L/Rg9GC0Ywgwqslc8K7JXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1ICVzLCDRh9GC0L7QsdGLINC+0YHQstC+0LHQvtC00LjRgtGMINC80LXRgdGC0L4g0LTQu9GPINC/0L7QtNC60LDRgtCw0LvQvtCz0L7QslxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4ODYgbWVyZ2UtcmVjdXJzaXZlLmM6OTA1Cittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAiOiDQstC+0LfQvNC+0LbQvdC+LCDQutC+0L3RhNC70LjQutGCINC60LDRgtCw0LvQvtCz0L7Qsi/RhNCw0LnQu9C+0LI/IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICLQvtGC0LrQsNC3INC/0L7RgtC10YDQuCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNC+0LPQviDRhNCw0LnQu9CwINCyIMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTM2IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAi0L3QtdCy0L7Qt9C80L7QttC90L4g0L/RgNC+0YfQuNGC0LDRgtGMINC+0LHRitC10LrRgiAlcyDCqyVzwrsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkzOQorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICLQvtC20LjQtNCw0LXRgtGB0Y8g0LTQstC+0LjRh9C90YvQuSDQvtCx0YrQtdC60YIg0LTQu9GPICVzIMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyc6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMIMKrJXPCuzogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnOiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDRgdC40LzQstC+0LvRjNC90YPRjiDRgdGB0YvQu9C60YMgwqslc8K7OiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgItC90LUg0L/QvtC90Y/RgtC90L4sINGH0YLQviDQtNC10LvQsNGC0Ywg0YEgJTA2byAlcyDCqyVzwrsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGNoZWNrZWQgb3V0KSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC70LjRgtGMINC/0L7QtNC80L7QtNGD0LvRjCAlcyAo0YHQvtGB0YLQvtGP0L3QuNC1INC90LUg0LfQsNCx0YDQsNC90L4pIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgbm90IHByZXNlbnQpIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0LvQuNGC0Ywg0L/QvtC00LzQvtC00YPQu9GMICVzICjQvdC10YIg0LrQvtC80LzQuNGC0L7QsikiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBkb24ndCBmb2xsb3cgbWVyZ2UtYmFzZSkiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQu9C40YLRjCDQv9C+0LTQvNC+0LTRg9C70YwgJXMgKNGDINC60L7QvNC80LjRgtC+0LIg0LTRgNGD0LPQsNGPINCx0LDQt9CwINGB0LvQuNGP0L3QuNGPKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE5NyBtZXJnZS1yZWN1cnNpdmUuYzoxMjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMgdG8gdGhlIGZvbGxvd2luZyBjb21taXQ6IgorbXNnc3RyICLQn9C10YDQtdC80L7RgtC60LAg0LLQv9C10YDQtdC0INC/0L7QtNC80L7QtNGD0LvRjyAlcyDQtNC+INGD0LrQsNC30LDQvdC90L7Qs9C+INC60L7QvNC80LjRgtCwOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwMCBtZXJnZS1yZWN1cnNpdmUuYzoxMjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMiCittc2dzdHIgItCf0LXRgNC10LzQvtGC0LrQsCDQstC/0LXRgNC10LQg0L/QvtC00LzQvtC00YPQu9GPICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG1lcmdlIGZvbGxvd2luZyBjb21taXRzIG5vdCBmb3VuZCkiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQu9C40YLRjCDQv9C+0LTQvNC+0LTRg9C70YwgJXMgKNC90LXRgiDRg9C60LDQt9Cw0L3QvdGL0YUg0LrQvtC80LzQuNGC0L7QsiDQtNC70Y8g0YHQu9C40Y/QvdC40Y8pIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBmYXN0LWZvcndhcmQpIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0LvQuNGC0Ywg0L/QvtC00LzQvtC00YPQu9GMICVzICjQvdC10LvRjNC30Y8g0YHQtNC10LvQsNGC0Ywg0L/QtdGA0LXQvNC+0YLQutGDINCy0L/QtdGA0LXQtCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNDAKK21zZ2lkICJGb3VuZCBhIHBvc3NpYmxlIG1lcmdlIHJlc29sdXRpb24gZm9yIHRoZSBzdWJtb2R1bGU6XG4iCittc2dzdHIgItCd0LDQudC00LXQvdC+INCy0L7Qt9C80L7QttC90L7QtSDRgNCw0LfRgNC10YjQtdC90LjQtSDRgdC70LjRj9GC0LjRjyDQtNC70Y8g0L/QvtC00LzQvtC00YPQu9GPOlxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB0aGlzIGlzIGNvcnJlY3Qgc2ltcGx5IGFkZCBpdCB0byB0aGUgaW5kZXggZm9yIGV4YW1wbGVcbiIKKyJieSB1c2luZzpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorIndoaWNoIHdpbGwgYWNjZXB0IHRoaXMgc3VnZ2VzdGlvbi5cbiIKK21zZ3N0ciAi0JXRgdC70Lgg0L7QvdC+INCy0LXRgNC90L7QtSwg0YLQviDQv9GA0L7RgdGC0L4g0LTQvtCx0LDQstGM0YLQtSDQtdCz0L4g0LIg0LjQvdC00LXQutGBLCDQvdCw0L/RgNC40LzQtdGAINGC0LDQujpcblxuICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcblxu0YLQtdC8INGB0LDQvNGL0Lwg0L/RgNC40L3QuNC80LDRjyDRjdGC0L4g0L/RgNC10LTQv9C+0LvQvtC20LXQvdC40LUuXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobXVsdGlwbGUgbWVyZ2VzIGZvdW5kKSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC70LjRgtGMINC/0L7QtNC80L7QtNGD0LvRjCAlcyAo0L3QsNC50LTQtdC90L4g0L3QtdGB0LrQvtC70YzQutC+INGB0LvQuNGP0L3QuNC5KSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTMyNQorbXNnaWQgIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQv9GD0YHRgtC40YLRjCDQstC90YPRgtGA0LXQvdC90LXQtSDRgdC70LjRj9C90LjQtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTMzMAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC00L7QsdCw0LLQuNGC0YwgJXMg0LIg0LHQsNC30YMg0LTQsNC90L3Ri9GFIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAi0JDQstGC0L7RgdC70LjRj9C90LjQtSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgd3JpdGluZyB0byAlcyBpbnN0ZWFkLiIKK21zZ3N0ciAi0J7RiNC40LHQutCwOiDQntGC0LrQsNC3INC/0L7RgtC10YDQuCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNC+0LPQviDRhNCw0LnQu9CwICVzOyDQt9Cw0L/QuNGB0Ywg0LIgJXMg0LLQt9Cw0LzQtdC9LiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICLQmtCe0J3QpNCb0JjQmtCiICglcy/Rg9C00LDQu9C10L3QuNC1KTogJXMg0YPQtNCw0LvQtdC90L4g0LIgJXMg0LggJXMg0LIgJXMuINCS0LXRgNGB0LjRjyAlcyDQuNC3ICVzINC+0YHRgtCw0LLQu9C10L3QsCDQsiDQtNC10YDQtdCy0LUuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZS4iCittc2dzdHIgItCa0J7QndCk0JvQmNCa0KIgKCVzL9GD0LTQsNC70LXQvdC40LUpOiAlcyDRg9C00LDQu9C10L3QviDQsiAlcyDQuCDQvtGCICVzINC00L4gJXMg0LIgJXMuINCS0LXRgNGB0LjRjyAlcyDQuNC3ICVzINC+0YHRgtCw0LLQu9C10L3QsCDQsiDQtNC10YDQtdCy0LUuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgItCa0J7QndCk0JvQmNCa0KIgKCVzL9GD0LTQsNC70LXQvdC40LUpOiAlcyDRg9C00LDQu9C10L3QviDQsiAlcyDQuCAlcyDQsiAlcy4g0JLQtdGA0YHQuNGPICVzINC40LcgJXMg0L7RgdGC0LDQstC70LXQvdCwINCyINC00LXRgNC10LLQtSDQvdCwICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUgYXQgJXMuIgorbXNnc3RyICLQmtCe0J3QpNCb0JjQmtCiICglcy/Rg9C00LDQu9C10L3QuNC1KTogJXMg0YPQtNCw0LvQtdC90L4g0LIgJXMg0Lgg0L7RgiAlcyDQtNC+ICVzINCyICVzLiDQktC10YDRgdC40Y8gJXMg0LjQtyAlcyDQvtGB0YLQsNCy0LvQtdC90LAg0LIg0LTQtdGA0LXQstC1INC90LAgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTA5Cittc2dpZCAicmVuYW1lIgorbXNnc3RyICLQv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC1IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTA5Cittc2dpZCAicmVuYW1lZCIKK21zZ3N0ciAi0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90L4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1ODkgbWVyZ2UtcmVjdXJzaXZlLmM6MjQ0NSBtZXJnZS1yZWN1cnNpdmUuYzozMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCAlcyIKK21zZ3N0ciAi0J7RgtC60LDQtyDQv9C+0YLQtdGA0Lgg0LjQt9C80LXQvdGR0L3QvdC+0LPQviDRhNCw0LnQu9CwICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXMsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gdGhlIHdheS4iCittc2dzdHIgItCe0YLQutCw0Lcg0L/QvtGC0LXRgNC4INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80L7Qs9C+INGE0LDQudC70LAgJXMsINC00LDQttC1INGBINGD0YfQtdGC0L7QvCDQtdCz0L4g0L3QsNC70LjRh9C40Y8uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gIEFkZGVkICVzIGluICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVzIOKAlCDRjdGC0L4g0LrQsNGC0LDQu9C+0LMg0LIgJXMsINC00L7QsdCw0LLQu9GP0LXQvCDQutCw0LogJXMg0LLQvNC10YHRgtC+INGN0YLQvtCz0L4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgItCe0YLQutCw0Lcg0L/QvtGC0LXRgNC4INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80L7Qs9C+INGE0LDQudC70LAgJXM7INC00L7QsdCw0LLQu9C10L3QuNC1INC60LDQuiAlcyDQstC30LDQvNC10L0uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBcIiVzXCItPlwiJXNcIiBpbiBicmFuY2ggXCIlc1wiIHJlbmFtZSAiCisiXCIlc1wiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCittc2dzdHIgItCa0J7QndCk0JvQmNCa0KIgKNC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40LUv0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSk6INCf0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40LUgwqslc8K74oaSwqslc8K7INCyINCy0LXRgtC60LUgwqslc8K7INC4INC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40LUgwqslc8K74oaSwqslc8K7INCyINCy0LXRgtC60LUgwqslc8K7JXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MTYKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAo0L7RgdGC0LDQstC70LXQvdC+INC90LXRgNCw0LfRgNC10YjQtdC90L3Ri9C8KSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCittc2dzdHIgItCa0J7QndCk0JvQmNCa0KIgKNC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40LUv0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSk6INCf0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40LUgwqslc8K74oaSwqslc8K7INCyINCy0LXRgtC60LUgwqslc8K7INC4INC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40LUgwqslc8K74oaSwqslc8K7INCyINCy0LXRgtC60LUgwqslc8K7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZGlyZWN0b3J5IHJlbmFtZSBzcGxpdCk6IFVuY2xlYXIgd2hlcmUgdG8gcGxhY2UgJXMgYmVjYXVzZSAiCisiZGlyZWN0b3J5ICVzIHdhcyByZW5hbWVkIHRvIG11bHRpcGxlIG90aGVyIGRpcmVjdG9yaWVzLCB3aXRoIG5vIGRlc3RpbmF0aW9uICIKKyJnZXR0aW5nIGEgbWFqb3JpdHkgb2YgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IEV4aXN0aW5nIGZpbGUvZGlyIGF0ICVzIGluIHRoZSB3YXkgb2YgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWUocykgcHV0dGluZyB0aGUgZm9sbG93aW5nIHBhdGgocykgdGhlcmU6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IENhbm5vdCBtYXAgbW9yZSB0aGFuIG9uZSBwYXRoIHRvICVzOyAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZXMgdHJpZWQgdG8gcHV0IHRoZXNlIHBhdGhzIHRoZXJlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiBSZW5hbWUgZGlyZWN0b3J5ICIKKyIlcy0+JXMgaW4gJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogQXZvaWRpbmcgYXBwbHlpbmcgJXMgLT4gJXMgcmVuYW1lIHRvICVzLCBiZWNhdXNlICVzIGl0c2VsZiB3YXMgIgorInJlbmFtZWQuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICLQvdC10LLQvtC30LzQvtC20L3QviDQv9GA0L7Rh9C40YLQsNGC0Ywg0L7QsdGK0LXQutGCIMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjkzMgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAi0L7QsdGK0LXQutGCICVzINC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNCy0L7QuNGH0L3Ri9C8INC+0LHRitC10LrRgtC+0LwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI5OTYKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgItC40LfQvNC10L3QtdC90LjQtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mjk5NgorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICLQuNC30LzQtdC90LXQvdC+IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDA4Cittc2dpZCAiY29udGVudCIKK21zZ3N0ciAi0YHQvtC00LXRgNC20LjQvNC+0LUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMTIKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICLQtNC+0LHQsNCy0LvQtdC90LjQtS/QtNC+0LHQsNCy0LvQtdC90LjQtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAzNQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgItCf0YDQvtC/0YPRgdC6ICVzICjRgdC70LjRgtGLINC+0LTQuNC90LDQutC+0LLRi9C1INC40LfQvNC10L3QtdC90LjRjyDQutCw0Log0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC1KSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA1NyBnaXQtc3VibW9kdWxlLnNoOjkzNworbXNnaWQgInN1Ym1vZHVsZSIKK21zZ3N0ciAi0L/QvtC00LzQvtC00YPQu9GMIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICLQmtCe0J3QpNCb0JjQmtCiICglcyk6INCa0L7QvdGE0LvQuNC60YIg0YHQu9C40Y/QvdC40Y8g0LIgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgItCU0L7QsdCw0LLQu9C10L3QuNC1INCy0LzQtdGB0YLQviDRjdGC0L7Qs9C+INC60LDQuiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAlczsgIgorIm1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCIKKyIgaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhdGggdXBkYXRlZDogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4iCisiICVzOyBtb3ZpbmcgaXQgdG8gJXMuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgIgorIndhcyByZW5hbWVkIGluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzE3Cittc2dpZCAiZmlsZS9kaXJlY3RvcnkiCittc2dzdHIgItGE0LDQudC7L9C60LDRgtCw0LvQvtCzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzIyCittc2dpZCAiZGlyZWN0b3J5L2ZpbGUiCittc2dzdHIgItC60LDRgtCw0LvQvtCzL9GE0LDQudC7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAi0JrQntCd0KTQm9CY0JrQoiAoJXMpOiDQo9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIg0LrQsNGC0LDQu9C+0LMg0YEg0LjQvNC10L3QtdC8IMKrJXPCuyDQsiDCqyVzwrsuINCU0L7QsdCw0LLQu9C10L3QuNC1IMKrJXPCuyDQutCw0Logwqslc8K7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAi0JTQvtCx0LDQstC70LXQvdC40LUgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKGFkZC9hZGQpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIgICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzOTYKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUhIgorbXNnc3RyICLQo9C20LUg0L7QsdC90L7QstC70LXQvdC+ISIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INGB0LvQuNGP0L3QuNGPINC00LXRgNC10LLRjNC10LIgwqslc8K7INC4IMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzUwNAorbXNnaWQgIk1lcmdpbmc6IgorbXNnc3RyICLQodC70LjRj9C90LjQtToiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIKK21zZ2lkX3BsdXJhbCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiCittc2dzdHJbMF0gItC90LDQudC00LXQvSAldSDQvtCx0YnQuNC5INC/0YDQtdC00L7QujoiCittc2dzdHJbMV0gItC90LDQudC00LXQvdC+ICV1INC+0LHRidC40YUg0L/RgNC10LTQutCwOiIKK21zZ3N0clsyXSAi0L3QsNC50LTQtdC90L4gJXUg0L7QsdGJ0LjRhSDQv9GA0LXQtNC60L7QsjoiCittc2dzdHJbM10gItC90LDQudC00LXQvdC+ICV1INC+0LHRidC40YUg0L/RgNC10LTQutC+0LI6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTU2Cittc2dpZCAibWVyZ2UgcmV0dXJuZWQgbm8gY29tbWl0IgorbXNnc3RyICLRgdC70LjRj9C90LjQtSDQvdC1INCy0LXRgNC90YPQu9C+INC60L7QvNC80LjRgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC+0LHRitC10LrRgiDCqyVzwrsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2MzggYnVpbHRpbi9tZXJnZS5jOjcwMiBidWlsdGluL21lcmdlLmM6ODczCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQtdGC0YHRjyDQt9Cw0L/QuNGB0LDRgtGMINC40L3QtNC10LrRgS4iCisKKyM6IG1pZHguYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSAweCUwOHggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCB2ZXJzaW9uICVkIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIHZlcnNpb24gJXUgZG9lcyBub3QgbWF0Y2giCittc2dzdHIgItCy0LXRgNGB0LjRjyDRhdC10Ygt0YHRg9C80LzRiyAldSDQvdC1INGB0L7QvtGC0LLQtdGC0YHQstGD0LXRgiIKKworIzogbWlkeC5jOjEwNgorbXNnaWQgImludmFsaWQgY2h1bmsgb2Zmc2V0ICh0b28gbGFyZ2UpIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMzAKK21zZ2lkICJ0ZXJtaW5hdGluZyBtdWx0aS1wYWNrLWluZGV4IGNodW5rIGlkIGFwcGVhcnMgZWFybGllciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxNDMKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgcGFjay1uYW1lIGNodW5rIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxNDUKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGZhbm91dCBjaHVuayIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTQ3Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBsb29rdXAgY2h1bmsiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjE0OQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBvYmplY3Qgb2Zmc2V0cyBjaHVuayIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggcGFjayBuYW1lcyBvdXQgb2Ygb3JkZXI6ICclcycgYmVmb3JlICclcyciCittc2dzdHIgIiIKKworIzogbWlkeC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay1pbnQtaWQ6ICV1ICgldSB0b3RhbCBwYWNrcykiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjI1OAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc3RvcmVzIGEgNjQtYml0IG9mZnNldCwgYnV0IG9mZl90IGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6Mjg2Cittc2dpZCAiZXJyb3IgcHJlcGFyaW5nIHBhY2tmaWxlIGZyb20gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhZGQgcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBhY2staW5kZXggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2NhdGUgb2JqZWN0ICVkIGluIHBhY2tmaWxlIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjEwNDgKK21zZ2lkICJMb29raW5nIGZvciByZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisib2lkIGZhbm91dCBvdXQgb2Ygb3JkZXI6IGZhbm91dFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSBmYW5vdXRbJWRdIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMDY3Cittc2dpZCAiVmVyaWZ5aW5nIE9JRCBvcmRlciBpbiBNSURYIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIm9pZCBsb29rdXAgb3V0IG9mIG9yZGVyOiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMDk1Cittc2dpZCAiU29ydGluZyBvYmplY3RzIGJ5IHBhY2tmaWxlIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMTAxCittc2dpZCAiVmVyaWZ5aW5nIG9iamVjdCBvZmZzZXRzIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2sgZW50cnkgZm9yIG9pZFslZF0gPSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrLWluZGV4IGZvciBwYWNrZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvcnJlY3Qgb2JqZWN0IG9mZnNldCBmb3Igb2lkWyVkXSA9ICVzOiAlPFBSSXg2ND4gIT0gJTxQUkl4NjQ+IgorbXNnc3RyICIiCisKKyM6IG5hbWUtaGFzaC5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfZGlyIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogbmFtZS1oYXNoLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogbmFtZS1oYXNoLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5vdGVzLW1lcmdlLmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgcHJldmlvdXMgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuXG4iCisiUGxlYXNlLCB1c2UgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcgb3IgJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0JyB0byBjb21taXQvYWJvcnQgdGhlIHByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgbm90ZXMgbWVyZ2UuIgorbXNnc3RyICLQktGLINC90LUg0LfQsNC60L7QvdGH0LjQu9C4INC/0YDQtdC00YvQtNGD0YnQtdC1INGB0LvQuNGP0L3QuNC1INC30LDQvNC10YLQvtC6ICglcyDRgdGD0YnQtdGB0YLQstGD0LXRgikuXG7Ql9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXTCuyDQuNC70LggwqtnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydMK7INC00LvRjyDQutC+0LzQvNC40YLQsCDQuNC70Lgg0L7RgtC80LXQvdGLINC/0YDQtdC00YvQtNGD0YnQtdCz0L4g0YHQu9C40Y/QvdC40Y8g0Lgg0LfQsNC/0YPRgdC60LAg0L3QvtCy0L7Qs9C+INGB0LvQuNGP0L3QuNGPINC30LDQvNC10YLQvtC6LiIKKworIzogbm90ZXMtbWVyZ2UuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLiIKK21zZ3N0ciAi0JLRiyDQvdC1INC30LDQutC+0L3Rh9C40LvQuCDQv9GA0LXQtNGL0LTRg9GJ0LXQtSDRgdC70LjRj9C90LjQtSDQt9Cw0LzQtdGC0L7QuiAoJXMg0YHRg9GJ0LXRgdGC0LLRg9C10YIpLiIKKworIzogbm90ZXMtdXRpbHMuYzo0NgorbXNnaWQgIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINC30LDQutC+0LzQvNC40YLQuNGC0Ywg0L3QtdC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDQvdC90L7QtSDQuNC70Lgg0L3QtSDQuNC80LXRjtGJ0LXQtSDRgdGB0YvQu9C+0Log0LTQtdGA0LXQstC+INC30LDQvNC10YLQvtC6IgorCisjOiBub3Rlcy11dGlscy5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90L7QtSDQt9C90LDRh9C10L3QuNC1IG5vdGVzLnJld3JpdGVNb2RlOiDCqyVzwrsiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICLQntGC0LrQsNC3INCyINC/0LXRgNC10LfQsNC/0LjRgdC4INC30LDQvNC10YLQvtC6INCyICVzICjQt9CwINC/0YDQtdC00LXQu9Cw0LzQuCByZWZzL25vdGVzLykiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YKKyMuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcworIy4gaXRzIHZhbHVlLgorIzogbm90ZXMtdXRpbHMuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDQv9C10YDQtdC80LXQvdC90L7QuSAlczogwqslc8K7IgorCisjOiBvYmplY3QuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIFwiJXNcIiIKK21zZ3N0ciAiIgorCisjOiBvYmplY3QuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIGEgJXMsIG5vdCBhICVzIgorbXNnc3RyICIiCisKKyM6IG9iamVjdC5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaGFzIHVua25vd24gdHlwZSBpZCAlZCIKK21zZ3N0ciAiIgorCisjOiBvYmplY3QuYzoyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdDogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC+0LHRitC10LrRgjogJXMiCisKKyM6IG9iamVjdC5jOjI2NyBvYmplY3QuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCAlcyIKK21zZ3N0ciAi0L3QtdGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDRhdC10Ygt0YHRg9C80LzRiyAlcyIKKworIzogcGFja2ZpbGUuYzo2MTcKK21zZ2lkICJvZmZzZXQgYmVmb3JlIGVuZCBvZiBwYWNrZmlsZSAoYnJva2VuIC5pZHg/KSIKK21zZ3N0ciAi0YHQtNCy0LjQsyDQtNC+INC60L7QvdGG0LAg0YTQsNC50LvQsCDQv9Cw0LrQtdGC0LAgKNCy0L7Qt9C80L7QttC90L4sINC/0L7QstGA0LXQttC00ZHQvSDRhNCw0LnQuyAuaWR4PykiCisKKyM6IHBhY2tmaWxlLmM6MTg2OAorIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmVmb3JlIHN0YXJ0IG9mIHBhY2sgaW5kZXggZm9yICVzIChjb3JydXB0IGluZGV4PykiCittc2dzdHIgItGB0LTQstC40LMg0LTQviDQvdCw0YfQsNC70LAg0LjQvdC00LXQutGB0LAg0L/QsNC60LXRgtCwINC00LvRjyAlcyAo0L/QvtCy0YDQtdC20LTRkdC9INC40L3QtNC10LrRgT8pIgorCisjOiBwYWNrZmlsZS5jOjE4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFjayBpbmRleCBmb3IgJXMgKHRydW5jYXRlZCBpbmRleD8pIgorbXNnc3RyICLRgdC00LLQuNCzINC30LAg0L/RgNC10LTQtdC70LDQvNC4INC40L3QtNC10LrRgdCwINC/0LDQutC10YLQsCDQtNC70Y8gJXMgKNC+0LHRgNC10LfQsNC9INC40L3QtNC10LrRgT8pIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJXMiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogaW5jb21wYXRpYmxlIHdpdGggc29tZXRoaW5nIGVsc2UiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkyIHBhcnNlLW9wdGlvbnMuYzo5NiBwYXJzZS1vcHRpb25zLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRha2VzIG5vIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpc24ndCBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2l0aCBhbiBvcHRpb25hbCBrL20vZyBzdWZmaXgiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgb3B0aW9uOiAlcyAoY291bGQgYmUgLS0lcyVzIG9yIC0tJXMlcykiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjQyMyBwYXJzZS1vcHRpb25zLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyA/KSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uIGAlcyciCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN3aXRjaCBgJWMnIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub24tYXNjaWkgb3B0aW9uIGluIHN0cmluZzogYCVzJyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODg3Cittc2dpZCAiLi4uIgorbXNnc3RyICLigKYiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtTogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbi4KKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgb3I6ICVzIgorbXNnc3RyICIgICAgICAgICAg0LjQu9C4OiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJXMiCittc2dzdHIgIiAgICAgICAgICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTU0Cittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLdCa0J7Qm9CY0KfQldCh0KLQktCeIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIG9mIC0tJXMiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjIwIHBhcnNlLW9wdGlvbnMtY2IuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZXhwaXJhdGlvbiBkYXRlICclcyciCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgXCJhbHdheXNcIiwgXCJhdXRvXCIsIG9yIFwibmV2ZXJcIiIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MTMwIHBhcnNlLW9wdGlvbnMtY2IuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90L7QtSDQuNC80Y8g0L7QsdGK0LXQutGC0LAgwqslc8K7IgorCisjOiBwYXRoLmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQtdC00L7RgdGC0LDQstC40YLRjCDQtNC+0YHRgtGD0L8g0LogJXMg0L3QsCDQt9Cw0L/QuNGB0YwiCisKKyM6IHBhdGhzcGVjLmM6MTI4Cittc2dpZCAiRXNjYXBlIGNoYXJhY3RlciAnXFwnIG5vdCBhbGxvd2VkIGFzIGxhc3QgY2hhcmFjdGVyIGluIGF0dHIgdmFsdWUiCittc2dzdHIgItCj0L/RgNCw0LLQu9GP0Y7RidC40Lkg0YHQuNC80LLQvtC7IMKrXFzCuyDQvdC1INGA0LDQt9GA0LXRiNC10L0g0LrQsNC6INC/0L7RgdC70LXQtNC90LjQuSDRgdC40LzQstC+0Lsg0LIg0LfQvdCw0YfQtdC90LjQuCBhdHRyIgorCisjOiBwYXRoc3BlYy5jOjE0NgorbXNnaWQgIk9ubHkgb25lICdhdHRyOicgc3BlY2lmaWNhdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAi0KDQsNC30YDQtdGI0LXQvSDRgtC+0LvRjNC60L4g0L7QtNC40L0g0YHQv9C10YbQuNGE0LjQutCw0YLQvtGAIMKrYXR0cjrCuy4iCisKKyM6IHBhdGhzcGVjLmM6MTQ5Cittc2dpZCAiYXR0ciBzcGVjIG11c3Qgbm90IGJlIGVtcHR5IgorbXNnc3RyICLRgdC/0LXRhtC40YTQuNC60LDRgtC+0YAgYXR0ciDQvdC1INC00L7Qu9C20LXQvSDQsdGL0YLRjCDQv9GD0YHRgtC+0LkiCisKKyM6IHBhdGhzcGVjLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIG5hbWUgJXMiCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80L7QtSDQuNC80Y8g0LDRgtGA0LjQsdGD0YLQsCAlcyIKKworIzogcGF0aHNwZWMuYzoyNTcKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICLQs9C70L7QsdCw0LvRjNC90YvQtSDQvtC/0YbQuNC4INGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgNC+0LIg0L/Rg9GC0LggwqtnbG9iwrsg0Lggwqtub2dsb2LCuyDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviIKKworIzogcGF0aHNwZWMuYzoyNjQKK21zZ2lkICIiCisiZ2xvYmFsICdsaXRlcmFsJyBwYXRoc3BlYyBzZXR0aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBnbG9iYWwgIgorInBhdGhzcGVjIHNldHRpbmdzIgorbXNnc3RyICLQs9C70L7QsdCw0LvRjNC90LDRjyDQvtC/0YbQuNGPINGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgNCwINC/0YPRgtC4IMKrbGl0ZXJhbMK7INC90LUg0YHQvtCy0LzQtdGB0YLQuNC80LAg0YEg0LTRgNGD0LPQuNC80Lgg0LPQu9C+0LHQsNC70YzQvdGL0LzQuCDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YDQsNC80Lgg0LTQvtGB0YLRg9C/0LAiCisKKyM6IHBhdGhzcGVjLmM6MzA0Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0L/QsNGA0LDQvNC10YLRgCDQtNC70Y8g0LzQsNCz0LjRh9C10YHQutC+0LPQviDRgdC70L7QstCwIMKrcHJlZml4wrsg0LIg0YHQv9C10YbQuNGE0LjQutCw0YLQvtGA0LUg0L/Rg9GC0LggIgorCisjOiBwYXRoc3BlYy5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0LzQsNCz0LjRh9C10YHQutC+0LUg0YHQu9C+0LLQviDCqyUuKnPCuyDQsiDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YDQtSDQv9GD0YLQuCDCqyVzwrsiCisKKyM6IHBhdGhzcGVjLmM6MzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GJ0LXQvdC+IMKrKcK7INCyINC60L7QvdGG0LUg0LzQsNCz0LjRh9C10YHQutC+0LPQviDRgdC70L7QstCwINGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgNCwINC/0YPRgtC4IMKrJXPCuyIKKworIzogcGF0aHNwZWMuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgItCd0LXRgNC10LDQu9C40LfQvtCy0LDQvdC90L7QtSDQvNCw0LPQuNGH0LXRgdC60L7QtSDRgdC70L7QstC+IMKrJWPCuyDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YDQsCDQv9GD0YLQuCDCqyVzwrsiCisKKyM6IHBhdGhzcGVjLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIlczogwqtsaXRlcmFswrsg0LggwqtnbG9iwrsg0L3QtSDRgdC+0LLQvNC10YHRgtC40LzRiyIKKworIzogcGF0aHNwZWMuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICIlczogwqslc8K7INCy0L3QtSDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBwYXRoc3BlYy5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIChtbmVtb25pYzogJyVjJykiCittc2dzdHIgIsKrJXPCuyAo0LzQvdC10LzQvtC90LjQutCwOiDCqyVjwrspIgorCisjOiBwYXRoc3BlYy5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIlczog0LzQsNCz0LjRh9C10YHQutC40LUg0YHQu9C+0LLQsCDQsiDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YDQtSDQv9GD0YLQuCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0Y7RgtGB0Y8g0LrQvtC80LDQvdC00L7QuTogJXMiCisKKyM6IHBhdGhzcGVjLmM6NTkxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAi0YHQv9C10YbQuNGE0LjQutCw0YLQvtGAINC/0YPRgtC4IMKrJXPCuyDQvdCw0YXQvtC00LjRgtGB0Y8g0LfQsCDRgdC40LzQstC+0LvQuNGH0LXRgdC60L7QuSDRgdGB0YvQu9C60L7QuSIKKworIzogcGt0LWxpbmUuYzo5MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmbHVzaCBwYWNrZXQiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzo5OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBkZWxpbSBwYWNrZXQiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzoxMDYKK21zZ2lkICJmbHVzaCBwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MTQ2IHBrdC1saW5lLmM6MjMyCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGltcG9zc2libHkgbG9uZyBsaW5lIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MTYyIHBrdC1saW5lLmM6MTY0Cittc2dpZCAicGFja2V0IHdyaXRlIHdpdGggZm9ybWF0IGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjE5NgorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQgLSBkYXRhIGV4Y2VlZHMgbWF4IHBhY2tldCBzaXplIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MjAzIHBrdC1saW5lLmM6MjEwCittc2dpZCAicGFja2V0IHdyaXRlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjI5NQorbXNnaWQgInJlYWQgZXJyb3IiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzozMDMKK21zZ2lkICJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVuZXhwZWN0ZWRseSIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIGxpbmUgbGVuZ3RoIGNoYXJhY3RlcjogJS40cyIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjM0MSBwa3QtbGluZS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIGxpbmUgbGVuZ3RoICVkIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y86ICVzIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTE5Cittc2dpZCAiUmVmcmVzaGluZyBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHByZXR0eS5jOjk2NgorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINGE0L7RgNC80LDRgiDQtNC70Y8gLS1wcmV0dHkiCisKKyM6IHJhbmdlLWRpZmYuYzo1NgorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBgbG9nYCIKK21zZ3N0ciAiIgorCisjOiByYW5nZS1kaWZmLmM6NTkKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBgbG9nYCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogcmFuZ2UtZGlmZi5jOjc0IHNlcXVlbmNlci5jOjQ4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQutC+0LzQvNC40YIgwqslc8K7IgorCisjOiByYW5nZS1kaWZmLmM6MjI0Cittc2dpZCAiZmFpbGVkIHRvIGdlbmVyYXRlIGRpZmYiCittc2dzdHIgIiIKKworIzogcmFuZ2UtZGlmZi5jOjQ1NSByYW5nZS1kaWZmLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBsb2cgZm9yICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBhZGQgZmlsZSBhbGlhcyAnJXMnICgnJXMnIGFscmVhZHkgZXhpc3RzIGluIGluZGV4KSIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6Njk2Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBhbiBlbXB0eSBibG9iIGluIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjcxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuIG9ubHkgYWRkIHJlZ3VsYXIgZmlsZXMsIHN5bWJvbGljIGxpbmtzIG9yIGdpdC1kaXJlY3RvcmllcyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBpbmRleCBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkICclcycgdG8gaW5kZXgiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxMzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXBwZWFycyBhcyBib3RoIGEgZmlsZSBhbmQgYXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE0OTkKK21zZ2lkICJSZWZyZXNoIGluZGV4IgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbmRleC52ZXJzaW9uIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgImluZGV4LnZlcnNpb24g0YPQutCw0LfQsNC9LCDQvdC+INC30L3QsNGH0LXQvdC40LUg0L3QtdC00LXQudGB0YLQstC40YLQtdC70YzQvdC+0LUuXG7QmNGB0L/QvtC70YzQt9GD0Y4g0LLQtdGA0YHQuNGOICVpIgorCisjOiByZWFkLWNhY2hlLmM6MTYyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR0lUX0lOREVYX1ZFUlNJT04gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiR0lUX0lOREVYX1ZFUlNJT04g0YPQutCw0LfQsNC9LCDQvdC+INC30L3QsNGH0LXQvdC40LUg0L3QtdC00LXQudGB0YLQstC40YLQtdC70YzQvdC+0LUuXG7QmNGB0L/QvtC70YzQt9GD0Y4g0LLQtdGA0YHQuNGOICVpIgorCisjOiByZWFkLWNhY2hlLmM6MTY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAlZCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTY5MQorbXNnaWQgImJhZCBpbmRleCBmaWxlIHNoYTEgc2lnbmF0dXJlIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzIxCisjLCBjLWZvcm1hdAorbXNnaWQgImluZGV4IHVzZXMgJS40cyBleHRlbnNpb24sIHdoaWNoIHdlIGRvIG5vdCB1bmRlcnN0YW5kIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzIzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICUuNHMgZXh0ZW5zaW9uIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzYwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW5kZXggZW50cnkgZm9ybWF0IDB4JTA4eCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTc3NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbmFtZSBmaWVsZCBpbiB0aGUgaW5kZXgsIG5lYXIgcGF0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxODMzCittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgaW4gaW5kZXgiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgc3RhZ2UgZW50cmllcyBmb3IgbWVyZ2VkIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTgzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTk0NiByZWFkLWNhY2hlLmM6MjIzNCByZXJlcmUuYzo1NjUgcmVyZXJlLmM6NTk5IHJlcmVyZS5jOjExMTEKKyM6IGJ1aWx0aW4vYWRkLmM6NDYwIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc4IGJ1aWx0aW4vY2hlY2tvdXQuYzozNTgKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzIgYnVpbHRpbi9jaGVja291dC5jOjEwNjAgYnVpbHRpbi9jbGVhbi5jOjk1NQorIzogYnVpbHRpbi9jb21taXQuYzozNDQgYnVpbHRpbi9kaWZmLXRyZWUuYzoxMjAgYnVpbHRpbi9ncmVwLmM6NDk4CisjOiBidWlsdGluL212LmM6MTQ1IGJ1aWx0aW4vcmVzZXQuYzoyNDUgYnVpbHRpbi9ybS5jOjI3MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjMzMAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAi0YTQsNC50Lsg0LjQvdC00LXQutGB0LAg0L/QvtCy0YDQtdC20LTQtdC9IgorCisjOiByZWFkLWNhY2hlLmM6MjA4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIG9wZW4gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgc3RhdCB0aGUgb3BlbiBpbmRleCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW5kZXggZmlsZSBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuYWJsZSB0byBtYXAgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MjE4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmcmVzaGVuIHNoYXJlZCBpbmRleCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjkzCisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjI5ODkgd3JhcHBlci5jOjY1OCBidWlsdGluL21lcmdlLmM6MTExNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LrRgNGL0YLRjCDCqyVzwrsiCisKKyM6IHJlYWQtY2FjaGUuYzozMDkyIHNlcXVlbmNlci5jOjIzNTQgc2VxdWVuY2VyLmM6MzgwNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGF0INC00LvRjyDCqyVzwrsiCisKKyM6IHJlYWQtY2FjaGUuYzozMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIGdpdCBkaXI6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINC60LDRgtCw0LvQvtCzIGdpdDogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bmxpbms6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLRgdC+0LXQtNC40L3QuNGC0Yw6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MzE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZml4IHBlcm1pc3Npb24gYml0cyBvbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzozMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgZHJvcCB0byBzdGFnZSAjMCIKK21zZ3N0ciAiIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5yZWNvZ25pemVkIHNldHRpbmcgJXMgZm9yIG9wdGlvbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JpbmcuIgorbXNnc3RyICLQvdC10YDQsNGB0L/QvtC30L3QsNC90L3QsNGPINC90LDRgdGC0YDQvtC50LrQsCAlcyDQtNC70Y8g0L7Qv9GG0LjQuCByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4g0JjQs9C90L7RgNC40YDRg9GOLiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MzUKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1hbmQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImIsIGJyZWFrID0gc3RvcCBoZXJlIChjb250aW51ZSByZWJhc2UgbGF0ZXIgd2l0aCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJylcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIlxu0JrQvtC80LDQvdC00Ys6XG5wLCBwaWNrIDzQutC+0LzQvNC40YI+ID0g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC60L7QvNC80LjRglxuciwgcmV3b3JkIDzQutC+0LzQvNC40YI+ID0g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC60L7QvNC80LjRgiwg0L3QviDQuNC30LzQtdC90LjRgtGMINGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsFxuZSwgZWRpdCA80LrQvtC80LzQuNGCPiA9INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQutC+0LzQvNC40YIsINC90L4g0L7RgdGC0LDQvdC+0LLQuNGC0YzRgdGPINC00LvRjyDQuNGB0L/RgNCw0LLQu9C10L3QuNGPXG5zLCBzcXVhc2ggPNC60L7QvNC80LjRgj4gPSDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LrQvtC80LzQuNGCLCDQvdC+INC+0LHRitC10LTQuNC90LjRgtGMINGBINC/0YDQtdC00YvQtNGD0YnQuNC8INC60L7QvNC80LjRgtC+0LxcbmYsIGZpeHVwIDzQutC+0LzQvNC40YI+ID0g0LrQsNC6IMKrc3F1YXNowrssINC90L4g0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwXG54LCBleGVjIDzQutC+0LzQsNC90LTQsD4gPSDQstGL0L/QvtC70L3QuNGC0Ywg0LrQvtC80LDQvdC00YMgKNC+0YHRgtCw0YLQvtC6INGB0YLRgNC+0LrQuCkg0YEg0L/QvtC80L7RidGM0Y4g0LrQvtC80LDQvdC00L3QvtC5INC+0LHQvtC70L7Rh9C60LhcbmIsIGJyZWFrID0g0L7RgdGC0LDQvdC+0LLQuNGC0YzRgdGPINC30LTQtdGB0YwgKNC/0YDQvtC00L7Qu9C20LjRgtGMINGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IHJlYmFzZSAtLWNvbnRpbnVlwrspXG5kLCBkcm9wIDzQutC+0LzQvNC40YI+ID0g0YPQtNCw0LvQuNGC0Ywg0LrQvtC80LzQuNGCXG5sLCBsYWJlbCA80LzQtdGC0LrQsD4gPSDQtNCw0YLRjCDQuNC80Y8g0YLQtdC60YPRidC10LzRgyBIRUFEXG50LCByZXNldCA80LzQtdGC0LrQsD4gPSDRgdCx0YDQvtGB0LjRgtGMIEhFQUQg0Log0YPQutCw0LfQsNC90L3QvtC5INC80LXRgtC60LVcbm0sIG1lcmdlIFstQyA80LrQvtC80LzQuNGCPiB8IC1jIDzQutC+0LzQvNC40YI+XSA80LzQtdGC0LrQsD4gWyMgPNGB0YLRgNC+0LrQsD5dXG4uINGB0L7Qt9C00LDRgtGMINGB0LvQuNGP0L3QuNC1INC40YHQv9C+0LvRjNC30YPRjyDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0L7RgNC40LPQuNC90LDQu9GM0L3QvtCz0L5cbi4g0YHQu9C40Y/QvdC40Y8gKNC40LvQuCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YPQutCw0LfQsNC90L3Rg9GOINGB0YLRgNC+0LrRgywg0LXRgdC70Lgg0L7RgNC40LPQuNC90LDQu9GM0L3QvtC1XG4uINGB0LvQuNGP0L3QuNC1INC90LUg0YPQutCw0LfQsNC90L4pLiDQmNGB0L/QvtC70YzQt9GD0LnRgtC1IC1jIDzQutC+0LzQvNC40YI+INGH0YLQvtCx0Ysg0LjQt9C80LXQvdC40YLRjFxuLiDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAuXG5cbtCt0YLQuCDRgdGC0YDQvtC60Lgg0LzQvtC20L3QviDQv9C10YDQtdC80LXRidCw0YLRjDsg0L7QvdC4INCx0YPQtNGD0YIg0LLRi9C/0L7Qu9C90LXQvdGLINGB0LLQtdGA0YXRgyDQstC90LjQty5cbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmQpIgorbXNnaWRfcGx1cmFsICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZHMpIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKK21zZ3N0clsyXSAiIgorbXNnc3RyWzNdICIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjY1IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxNzMKK21zZ2lkICIiCisiXG4iCisiRG8gbm90IHJlbW92ZSBhbnkgbGluZS4gVXNlICdkcm9wJyBleHBsaWNpdGx5IHRvIHJlbW92ZSBhIGNvbW1pdC5cbiIKK21zZ3N0ciAiXG7QndC1INGD0LTQsNC70Y/QudGC0LUg0YHRgtGA0L7QutC4LiDQmNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZHJvcMK7LCDRh9GC0L7QsdGLINGP0LLQvdC+INGD0LTQsNC70LjRgtGMINC60L7QvNC80LjRgi5cbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NjggZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjE3NworbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgcmVtb3ZlIGEgbGluZSBoZXJlIFRIQVQgQ09NTUlUIFdJTEwgQkUgTE9TVC5cbiIKK21zZ3N0ciAiXG7QldGB0LvQuCDQstGLINGD0LTQsNC70LjRgtC1INGB0YLRgNC+0LrRgyDQt9C00LXRgdGMLCDRgtC+INCj0JrQkNCX0JDQndCd0KvQmSDQmtCe0JzQnNCY0KIg0JHQo9CU0JXQoiDQo9Ci0JXQoNCv0J0uXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc0IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTYKK21zZ2lkICIiCisiXG4iCisiWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuXG4iCisiVG8gY29udGludWUgcmViYXNlIGFmdGVyIGVkaXRpbmcsIHJ1bjpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIlxu0JLRiyDRgdC10LnRh9Cw0YEg0YDQtdC00LDQutGC0LjRgNGD0LXRgtC1INGE0LDQudC7INGB0L4g0YHQv9C40YHQutC+0Lwg0LTQtdC7INC00LvRjyDQuNC90YLQtdGA0LDQutGC0LjQstC90L7Qs9C+INC/0LXRgNC10LzQtdGJ0LXQvdC40Y8uXG7QlNC70Y8g0L/RgNC+0LTQvtC70LbQtdC90LjRjyDQv9C10YDQtdC80LXRidC10L3QuNGPLCDQv9C+0YHQu9C1INGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0YTQsNC50LvQsCDQt9Cw0L/Rg9GB0YLQuNGC0LU6XG4gICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG5cbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg5MworbXNnaWQgIiIKKyJcbiIKKyJIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorbXNnc3RyICJcbtCd0L4g0LXRgdC70Lgg0LLRiyDRg9C00LDQu9C40YLQtSDQstGB0LUsINGC0L4g0L/RgNC+0YbQtdGB0YEg0L/QtdGA0LXQvNC10YnQtdC90LjRjyDQsdGD0LTQtdGCINCx0YPQtNC10YIg0L/RgNC10YDQstCw0L0uXG5cbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6ODUgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwMAorbXNnaWQgIk5vdGUgdGhhdCBlbXB0eSBjb21taXRzIGFyZSBjb21tZW50ZWQgb3V0IgorbXNnc3RyICLQl9Cw0LzQtdGC0YzRgtC1LCDRh9GC0L4g0L/Rg9GB0YLRi9C1INC60L7QvNC80LjRgtGLINC30LDQutC+0LzQvNC10L3RgtC40YDQvtCy0LDQvdC90YsiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjEwNSByZXJlcmUuYzo0ODUgcmVyZXJlLmM6NjkyIHNlcXVlbmNlci5jOjMzMzkKKyM6IHNlcXVlbmNlci5jOjMzNjUgc2VxdWVuY2VyLmM6NDk5NiBidWlsdGluL2ZzY2suYzozNTYgYnVpbHRpbi9yZWJhc2UuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDCqyVzwrsiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcycuIgorbXNnc3RyICIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc29tZSBjb21taXRzIG1heSBoYXZlIGJlZW4gZHJvcHBlZCBhY2NpZGVudGFsbHkuXG4iCisiRHJvcHBlZCBjb21taXRzIChuZXdlciB0byBvbGRlcik6XG4iCittc2dzdHIgItCS0L3QuNC80LDQvdC40LU6INC90LXQutC+0YLQvtGA0YvQtSDQutC+0LzQvNC40YLRiyDQvNC+0LPQu9C4INCx0YvRgtGMINC+0YLQsdGA0L7RiNC10L3RiyDQv9C+INC+0YjQuNCx0LrQtS5cbtCe0YLQsdGA0L7RiNC10L3QvdGL0LUg0LrQvtC80LzQuNGC0YsgKNC+0YIg0L3QvtCy0YvRhSDQuiDRgdGC0LDRgNGL0LwpOlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIGF2b2lkIHRoaXMgbWVzc2FnZSwgdXNlIFwiZHJvcFwiIHRvIGV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LlxuIgorIlxuIgorIlVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiB3YXJuaW5ncy5cbiIKKyJUaGUgcG9zc2libGUgYmVoYXZpb3VycyBhcmU6IGlnbm9yZSwgd2FybiwgZXJyb3IuXG4iCisiXG4iCittc2dzdHIgItCn0YLQvtCx0Ysg0LjQt9Cx0LXQttCw0YLRjCDRjdGC0L7Qs9C+INGB0L7QvtCx0YnQtdC90LjRjywg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2Ryb3DCuyDRh9GC0L7QsdGLINGP0LLQvdC+INGD0LTQsNC70LjRgtGMINC60L7QvNC80LjRgi5cblxu0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQvtC/0YbQuNGOIMKrZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVja8K7INC00LvRjyDQuNC30LzQtdC90LXQvdC40Y8g0LrQvtC70LjRh9C10YHRgtCy0LAg0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQuS5cbtCS0L7Qt9C80L7QttC90YvQtSDQt9C90LDRh9C10L3QuNGPOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuXG4iCisKKyM6IHJlZnMuYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QhIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo1OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgZGFuZ2xpbmcgc3ltcmVmICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo1OTkgcmVmLWZpbHRlci5jOjE5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDRg9GOINC90LXQv9GA0LDQstC40LvRjNC90YPRjiDRgdGB0YvQu9C60YMgJXMiCisKKyM6IHJlZnMuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywgwqslc8K7INC00LvRjyDQt9Cw0L/QuNGB0Lg6ICVzIgorCisjOiByZWZzLmM6NzQ0IHJlZnMuYzo3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICclcyciCittc2dzdHIgIiIKKworIzogcmVmcy5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gd3JpdGluZyAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo3NjMgc2VxdWVuY2VyLmM6NDAwIHNlcXVlbmNlci5jOjI2Nzkgc2VxdWVuY2VyLmM6MjgwNQorIzogc2VxdWVuY2VyLmM6MjgxOSBzZXF1ZW5jZXIuYzozMDc2IHNlcXVlbmNlci5jOjQ5MTMgd3JhcHBlci5jOjY1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINCyIMKrJXPCuyIKKworIzogcmVmcy5jOjc5MCB3cmFwcGVyLmM6MjI1IHdyYXBwZXIuYzozOTUgYnVpbHRpbi9hbS5jOjcxNQorIzogYnVpbHRpbi9yZWJhc2UuYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDCqyVzwrsg0LTQu9GPINC30LDQv9C40YHQuCIKKworIzogcmVmcy5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG9iamVjdCBJRCB3aGVuIGRlbGV0aW5nICclcyciCittc2dzdHIgIiIKKworIzogcmVmcy5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyBoYXMgZ2FwIGFmdGVyICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgdW5leHBlY3RlZGx5IGVuZGVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciAlcyBpcyBlbXB0eSIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6MTA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byB1cGRhdGUgcmVmIHdpdGggYmFkIG5hbWUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6MTE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cGRhdGVfcmVmIGZhaWxlZCBmb3IgcmVmICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoxOTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoxOTc0Cittc2dpZCAicmVmIHVwZGF0ZXMgZm9yYmlkZGVuIGluc2lkZSBxdWFyYW50aW5lIGVudmlyb25tZW50IgorbXNnc3RyICLQvtCx0L3QvtCy0LvQtdC90LjQtSDRgdGB0YvQu9C+0Log0LfQsNC/0YDQtdGJ0LXQvdC+INCyINC40LfQvtC70LjRgNC+0LLQsNC90L3QvtC8INC+0LrRgNGD0LbQtdC90LjQuCIKKworIzogcmVmcy5jOjIwNzAgcmVmcy5jOjIxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6MjA3NiByZWZzLmM6MjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcHJvY2VzcyAnJXMnIGFuZCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIiIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIHJlZmVyZW5jZSAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCDRgdGB0YvQu9C60LggJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNDggcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1MzIKKyM6IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCDRgdGB0YvQu9C60YMgJXM6ICVzIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjUxIHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0YHRgdGL0LvQutC4OiAlcyIKKworIzogcmVmc3BlYy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZnNwZWMgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6Mzkgd3Qtc3RhdHVzLmM6MTkwOQorbXNnaWQgImdvbmUiCittc2dzdHIgItC40YHRh9C10LciCisKKyM6IHJlZi1maWx0ZXIuYzo0MAorIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCIKK21zZ3N0ciAi0LLQv9C10YDQtdC00LggJWQiCisKKyM6IHJlZi1maWx0ZXIuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJiZWhpbmQgJWQiCittc2dzdHIgItC/0L7Qt9Cw0LTQuCAlZCIKKworIzogcmVmLWZpbHRlci5jOjQyCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWQiCittc2dzdHIgItCy0L/QtdGA0LXQtNC4ICVkLCDQv9C+0LfQsNC00LggJWQiCisKKyM6IHJlZi1maWx0ZXIuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShjb2xvcjo8Y29sb3I+KSIKK21zZ3N0ciAi0L7QttC40LTQsNC10LzRi9C5INGE0L7RgNC80LDRgjogJSUoY29sb3I6PGNvbG9yPikiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiCittc2dzdHIgItC90LXQvtC/0L7Qt9C90LDQvdC90YvQuSDRhtCy0LXRgjogJSUoY29sb3I6JXMpIgorCisjOiByZWYtZmlsdGVyLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpsc3RyaXA9JXMiCittc2dzdHIgItCe0LbQuNC00LDQtdGC0YHRjyDRhtC10LvQvtGH0LjRgdC70LXQvdC90L7QtSDQt9C90LDRh9C10L3QuNC1IHJlZm5hbWU6bHN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpyc3RyaXA9JXMiCittc2dzdHIgItCe0LbQuNC00LDQtdGC0YHRjyDRhtC10LvQvtGH0LjRgdC70LXQvdC90L7QtSDQt9C90LDRh9C10L3QuNC1IHJlZm5hbWU6cnN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJSglcykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQvdC10L7Qv9C+0LfQvdCw0L3QvdGL0Lkg0LDRgNCz0YPQvNC10L3RgiAlJSglcyk6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKG9iamVjdHR5cGUpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdHNpemUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGRlbHRhYmFzZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlJShib2R5KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRgCAlJShib2R5KSDQvdC1INC/0YDQuNC90LjQvNCw0LXRgiDQsNGA0LPRg9C80LXQvdGC0YsiCisKKyM6IHJlZi1maWx0ZXIuYzoyNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoc3ViamVjdCkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgItC/0LDRgNCw0LzQtdGC0YAgJSUoc3ViamVjdCkg0L3QtSDQv9GA0LjQvdC40LzQsNC10YIg0LDRgNCz0YPQvNC10L3RgtGLIgorCisjOiByZWYtZmlsdGVyLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gJSUodHJhaWxlcnMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90YvQuSDQsNGA0LPRg9C80LXQvdGCINC00LvRjyAlJSh0cmFpbGVycyk6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MzI1CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIGNvbnRlbnRzOmxpbmVzPSVzIgorbXNnc3RyICLQv9C+0LvQvtC20LjRgtC10LvRjNC90L7QtSDQt9C90LDRh9C10L3QuNC1INC+0LbQuNC00LDQtdGCIGNvbnRlbnRzOmxpbmVzPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShjb250ZW50cykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQvdC10L7Qv9C+0LfQvdCw0L3QvdGL0Lkg0LDRgNCz0YPQvNC10L3RgiAlJShjb250ZW50cyk6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIG9iamVjdG5hbWU6c2hvcnQ9JXMiCittc2dzdHIgItC+0LbQuNC00LDQtdGC0YHRjyDQv9C+0LvQvtC20LjRgtC10LvRjNC90L7QtSDQt9C90LDRh9C10L3QuNC1IG9iamVjdG5hbWU6c2hvcnQ9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdG5hbWUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC+0L/QvtC30L3QsNC90L3Ri9C5INCw0YDQs9GD0LzQtdC90YIgJSUob2JqZWN0bmFtZSk6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoYWxpZ246PHdpZHRoPiw8cG9zaXRpb24+KSIKK21zZ3N0ciAi0L7QttC40LTQsNC10LzRi9C5INGE0L7RgNC80LDRgjogJSUoYWxpZ246PHdpZHRoPiw8cG9zaXRpb24+KSIKKworIzogcmVmLWZpbHRlci5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcG9zaXRpb246JXMiCittc2dzdHIgItC90LXQvtC/0L7Qt9C90LDQvdC90LDRjyDQv9C+0LfQuNGG0LjRjzolcyIKKworIzogcmVmLWZpbHRlci5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2lkdGg6JXMiCittc2dzdHIgItC90LXQvtC/0L7Qt9C90LDQvdC90LDRjyDRiNC40YDQuNC90LA6JXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGFsaWduKSBhcmd1bWVudDogJXMiCittc2dzdHIgItC90LXQvtC/0L7Qt9C90LDQvdC90YvQuSDQsNGA0LPRg9C80LXQvdGCICUlKGFsaWduKTogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgd2lkdGggZXhwZWN0ZWQgd2l0aCB0aGUgJSUoYWxpZ24pIGF0b20iCittc2dzdHIgItC+0LbQuNC00LDQtdGC0YHRjyDQv9C+0LvQvtC20LjRgtC10LvRjNC90LDRjyDRiNC40YDQuNC90LAg0YEg0YPQutCw0LfQsNC90LjQtdC8INGH0LDRgdGC0LjRhtGLICUlKGFsaWduKSIKKworIzogcmVmLWZpbHRlci5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoaWYpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC+0L/QvtC30L3QsNC90L3Ri9C5INCw0YDQs9GD0LzQtdC90YIgJSUoaWYpOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC40LzRjyDQv9C+0LvRjzogJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdC+0LUg0LjQvNGPINC/0L7Qu9GPOiAlLipzIgorCisjOiByZWYtZmlsdGVyLmM6NTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSwgYnV0IHRoZSBmaWVsZCAnJS4qcycgcmVxdWlyZXMgYWNjZXNzIHRvIG9iamVjdCBkYXRhIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShpZikgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICLRhNC+0YDQvNCw0YI6INGH0LDRgdGC0LjRhtCwICUlKGlmKSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LAg0LHQtdC3INGH0LDRgdGC0LjRhtGLICUlKHRoZW4pIgorCisjOiByZWYtZmlsdGVyLmM6NzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgItGE0L7RgNC80LDRgjog0YfQsNGB0YLQuNGG0LAgJSUodGhlbikg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdCwINCx0LXQtyDRh9Cw0YHRgtC40YbRiyAlJShpZikiCisKKyM6IHJlZi1maWx0ZXIuYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgItGE0L7RgNC80LDRgjog0YfQsNGB0YLQuNGG0LAgJSUodGhlbikg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdCwINCx0L7Qu9C10LUg0L7QtNC90L7Qs9C+INGA0LDQt9CwIgorCisjOiByZWYtZmlsdGVyLmM6NzUzCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIGFmdGVyICUlKGVsc2UpIgorbXNnc3RyICLRhNC+0YDQvNCw0YI6INGH0LDRgdGC0LjRhtCwICUlKHRoZW4pINC40YHQv9C+0LvRjNC30L7QstCw0L3QsCDQv9C+0YHQu9C1ICUlKGVsc2UpIgorCisjOiByZWYtZmlsdGVyLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgItGE0L7RgNC80LDRgjog0YfQsNGB0YLQuNGG0LAgJSUoZWxzZSkg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdCwINCx0LXQtyDRh9Cw0YHRgtC40YbRiyAlJShpZikiCisKKyM6IHJlZi1maWx0ZXIuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgItGE0L7RgNC80LDRgjog0YfQsNGB0YLQuNGG0LAgJSUoZWxzZSkg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdCwINCx0LXQtyDRh9Cw0YHRgtC40YbRiyAlJSh0aGVuKSIKKworIzogcmVmLWZpbHRlci5jOjc4NQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCOiDRh9Cw0YHRgtC40YbQsCAlJShlbHNlKSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LAg0LHQvtC70LXQtSDQvtC00L3QvtCz0L4g0YDQsNC30LAiCisKKyM6IHJlZi1maWx0ZXIuYzo4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gdXNlZCB3aXRob3V0IGNvcnJlc3BvbmRpbmcgYXRvbSIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCOiDRh9Cw0YHRgtC40YbQsCAlJShlbmQpINC40YHQv9C+0LvRjNC30L7QstCw0L3QsCDQsdC10Lcg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQtdC5INGH0LDRgdGC0LjRhtGLIgorCisjOiByZWYtZmlsdGVyLmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmb3JtYXQgc3RyaW5nICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdCw0Y8g0YHRgtGA0L7QutCwINGE0L7RgNC80LDRgtCwICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ1MworIywgYy1mb3JtYXQKK21zZ2lkICIobm8gYnJhbmNoLCByZWJhc2luZyAlcykiCittc2dzdHIgIijQvdC10YIg0LLQtdGC0LrQuCwg0L/QtdGA0LXQvNC10YnQtdC90LjQtSAlcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIihubyBicmFuY2gsIHJlYmFzaW5nIGRldGFjaGVkIEhFQUQgJXMpIgorbXNnc3RyICIo0L3QtdGCINCy0LXRgtC60Lgg0L/QtdGA0LXQvNC10YnQtdC90LjQtSDQvtGC0LTQtdC70ZHQvdC90L7Qs9C+IEhFQUQgJXMpIgorCisjOiByZWYtZmlsdGVyLmM6MTQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICIobm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcykiCittc2dzdHIgIijQvdC10YIg0LLQtdGC0LrQuCwg0LTQstC+0LjRh9C90YvQuSDQv9C+0LjRgdC6INC90LDRh9Cw0YIg0L3QsCAlcykiCisKKyMuIFRSQU5TTEFUT1JTOiBtYWtlIHN1cmUgdGhpcyBtYXRjaGVzICJIRUFECisjLiBkZXRhY2hlZCBhdCAiIGluIHd0LXN0YXR1cy5jCisjOiByZWYtZmlsdGVyLmM6MTQ2NworIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBhdCAlcykiCittc2dzdHIgIihIRUFEINC+0YLQtNC10LvRkdC9INC90LAgJXMpIgorCisjLiBUUkFOU0xBVE9SUzogbWFrZSBzdXJlIHRoaXMgbWF0Y2hlcyAiSEVBRAorIy4gZGV0YWNoZWQgZnJvbSAiIGluIHd0LXN0YXR1cy5jCisjOiByZWYtZmlsdGVyLmM6MTQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBmcm9tICVzKSIKK21zZ3N0ciAiKEhFQUQg0L7RgtC00LXQu9GR0L0g0L3QsNGH0LjQvdCw0Y8g0YEgJXMpIgorCisjOiByZWYtZmlsdGVyLmM6MTQ3OAorbXNnaWQgIihubyBicmFuY2gpIgorbXNnc3RyICIo0L3QtdGCINCy0LXRgtC60LgpIgorCisjOiByZWYtZmlsdGVyLmM6MTUxMiByZWYtZmlsdGVyLmM6MTY2OQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiCittc2dzdHIgItC90LUg0L3QsNC50LTQtdC9INC+0LHRitC10LrRgiAlcyDQtNC70Y8gJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTIyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhcnNlX29iamVjdF9idWZmZXIgZmFpbGVkIG9uICVzIGZvciAlcyIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INCy0YvQv9C+0LvQvdC10L3QuNC4IHBhcnNlX29iamVjdF9idWZmZXIg0L3QsCAlcyDQtNC70Y8gJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAi0J/QvtCy0YDQtdC20LTRkdC90L3Ri9C5INC+0LHRitC10LrRgiDCqyVzwrsiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHJlZiB3aXRoIGJyb2tlbiBuYW1lICVzIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNGD0Y4g0YHRgdGL0LvQutGDINGBINC90LXQv9GA0LDQstC40LvRjNC90YvQvCDQuNC80LXQvdC10LwgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIG1pc3NpbmciCittc2dzdHIgImZvcm1hdDog0L/RgNC+0L/Rg9GJ0LXQvdCwINGH0LDRgdGC0LjRhtCwICUlKGVuZCkiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8tbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC40LzRjyDQvtCx0YrQtdC60YLQsCAlcyIKKworIzogcmVmLWZpbHRlci5jOjIzODEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgbXVzdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlnIHJlbW90ZSBzaG9ydGhhbmQgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzo0MTAKK21zZ2lkICJtb3JlIHRoYW4gb25lIHJlY2VpdmVwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6NDE4Cittc2dpZCAibW9yZSB0aGFuIG9uZSB1cGxvYWRwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINC40LfQstC70LXRh9GMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviAlcyDQuCAlcyDQsiAlcyIKKworIzogcmVtb3RlLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHVzdWFsbHkgdHJhY2tzICVzLCBub3QgJXMiCittc2dzdHIgIiVzINC+0LHRi9GH0L3QviDQvtGC0YHQu9C10LbQuNCy0LDQtdGCICVzLCDQsCDQvdC1ICVzIgorCisjOiByZW1vdGUuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlcyDQvtGC0YHQu9C10LbQuNCy0LDQtdGCINC4ICVzINC4ICVzIgorCisjOiByZW1vdGUuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5ICclcycgb2YgcGF0dGVybiBoYWQgbm8gJyonIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDAwCisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIGRvZXMgbm90IG1hdGNoIGFueSIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDA1CisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogIm1hdGNoZXMgJyVzJyUiIGlzIHRoZSA8ZHN0PiBwYXJ0IG9mICJnaXQgcHVzaAorIy4gPHJlbW90ZT4gPHNyYz46PGRzdD4iIHB1c2gsIGFuZCAiYmVpbmcgcHVzaGVkICgnJXMnKSIgaXMKKyMuIHRoZSA8c3JjPi4KKyM6IHJlbW90ZS5jOjEwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXN0aW5hdGlvbiB5b3UgcHJvdmlkZWQgaXMgbm90IGEgZnVsbCByZWZuYW1lIChpLmUuLFxuIgorInN0YXJ0aW5nIHdpdGggXCJyZWZzL1wiKS4gV2UgdHJpZWQgdG8gZ3Vlc3Mgd2hhdCB5b3UgbWVhbnQgYnk6XG4iCisiXG4iCisiLSBMb29raW5nIGZvciBhIHJlZiB0aGF0IG1hdGNoZXMgJyVzJyBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiLSBDaGVja2luZyBpZiB0aGUgPHNyYz4gYmVpbmcgcHVzaGVkICgnJXMnKVxuIgorIiAgaXMgYSByZWYgaW4gXCJyZWZzL3toZWFkcyx0YWdzfS9cIi4gSWYgc28gd2UgYWRkIGEgY29ycmVzcG9uZGluZ1xuIgorIiAgcmVmcy97aGVhZHMsdGFnc30vIHByZWZpeCBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiXG4iCisiTmVpdGhlciB3b3JrZWQsIHNvIHdlIGdhdmUgdXAuIFlvdSBtdXN0IGZ1bGx5IHF1YWxpZnkgdGhlIHJlZi4iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTA0MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBjb21taXQgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy9oZWFkcy8lcyc/IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjEwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgdGFnIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgbmV3IHRhZyBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgdHJlZSBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyB0cmVlIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBibG9iIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IGJsb2IgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNhbm5vdCBiZSByZXNvbHZlZCB0byBicmFuY2giCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVsZXRlICclcyc6IHJlbW90ZSByZWYgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTExNAorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmICVzIHJlY2VpdmVzIGZyb20gbW9yZSB0aGFuIG9uZSBzcmMiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTYyNCByZW1vdGUuYzoxNzI1Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBRCDQvdC1INGD0LrQsNC30YvQstCw0LXRgiDQvdCwINCy0LXRgtC60YMiCisKKyM6IHJlbW90ZS5jOjE2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgItC90LXRgiDRgtCw0LrQvtC5INCy0LXRgtC60Lg6IMKrJXPCuyIKKworIzogcmVtb3RlLmM6MTYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAi0LLRi9GI0LXRgdGC0L7Rj9GJ0LDRjyDQstC10YLQutCwINC90LUg0L3QsNGB0YLRgNC+0LXQvdCwINC00LvRjyDQstC10YLQutC4IMKrJXPCuyIKKworIzogcmVtb3RlLmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1cHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi0LLRi9GI0LXRgdGC0L7Rj9GJ0LDRjyDQstC10YLQutCwIMKrJXPCuyDQvdC1INGB0L7RhdGA0LDQvdC10L3QsCDQutCw0Log0L7RgtGB0LvQtdC20LjQstCw0LXQvNCw0Y8g0LLQtdGC0LrQsCIKKworIzogcmVtb3RlLmM6MTY1NworIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIGRlc3RpbmF0aW9uICclcycgb24gcmVtb3RlICclcycgaGFzIG5vIGxvY2FsIHRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi0L3QsNC30L3QsNGH0LXQvdC40LUg0LTQu9GPINC+0YLQv9GA0LDQstC60Lggwqslc8K7INC90LAg0LLQvdC10YjQvdC10Lwg0YHQtdGA0LLQtdGA0LUgwqslc8K7INC90LUg0LjQvNC10LXRgiDQu9C+0LrQsNC70YzQvdC+0Lkg0L7RgtGB0LvQtdC20LjQstCw0LXQvNC+0Lkg0LLQtdGC0LrQuCIKKworIzogcmVtb3RlLmM6MTY2OQorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICLQstC10YLQutCwIMKrJXPCuyDQvdC1INC40LzQtdC10YIg0LLQvdC10YjQvdC10LPQviDRgdC10YDQstC10YDQsCDQtNC70Y8g0L7RgtC/0YDQsNCy0LrQuCIKKworIzogcmVtb3RlLmM6MTY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciCittc2dzdHIgItGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgNGLINC/0YPRgtC4INC00LvRjyDQvtGC0L/RgNCw0LLQutC4IMKrJXPCuyDQvdC1INCy0LrQu9GO0YfQsNGO0YIg0LIg0YHQtdCx0Y8gwqslc8K7IgorCisjOiByZW1vdGUuYzoxNjkyCittc2dpZCAicHVzaCBoYXMgbm8gZGVzdGluYXRpb24gKHB1c2guZGVmYXVsdCBpcyAnbm90aGluZycpIgorbXNnc3RyICLQvtGC0L/RgNCw0LLQutCwINC90LUg0LjQvNC10LXRgiDRgtC+0YfQutC4INC90LDQt9C90LDRh9C10L3QuNGPIChwdXNoLmRlZmF1bHQg0LLRi9GB0YLQsNCy0LvQtdC9INCyIMKrbm90aGluZ8K7KSIKKworIzogcmVtb3RlLmM6MTcxNAorbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIMKrc2ltcGxlwrsg0L7RgtC/0YDQsNCy0LrRgyDQsiDQtdC00LjQvdGB0YLQstC10L3QvdGD0Y4g0YLQvtGH0LrRgyDQvdCw0LfQvdCw0YfQtdC90LjRjyIKKworIzogcmVtb3RlLmM6MTg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgJXMiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTg1MworIywgYy1mb3JtYXQKK21zZ2lkICIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MjAxNgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiYXNlZCBvbiAnJXMnLCBidXQgdGhlIHVwc3RyZWFtIGlzIGdvbmUuXG4iCittc2dzdHIgItCS0LDRiNCwINCy0LXRgtC60LAg0LHQsNC30LjRgNGD0LXRgtGB0Y8g0L3QsCDCqyVzwrssINC90L4g0LLRi9GI0LXRgdGC0L7Rj9GJ0LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC40YHRh9C10LcuXG4iCisKKyM6IHJlbW90ZS5jOjIwMjAKK21zZ2lkICIgICh1c2UgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB0byBmaXh1cClcbiIKK21zZ3N0ciAiKNC00LvRjyDQuNGB0L/RgNCw0LLQu9C10L3QuNGPINC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbcK7KVxuIgorCisjOiByZW1vdGUuYzoyMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIHVwIHRvIGRhdGUgd2l0aCAnJXMnLlxuIgorbXNnc3RyICLQktCw0YjQsCDQstC10YLQutCwINC+0LHQvdC+0LLQu9C10L3QsCDQsiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Lgg0YEgwqslc8K7LlxuIgorCisjOiByZW1vdGUuYzoyMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGFuZCAnJXMnIHJlZmVyIHRvIGRpZmZlcmVudCBjb21taXRzLlxuIgorbXNnc3RyICLQktCw0YjQsCDQstC10YLQutCwINC4IMKrJXPCuyDRg9C60LDQt9GL0LLQsNGO0YIg0L3QsCDRgNCw0LfQvdGL0LUg0LrQvtC80LzQuNGC0YsuXG4iCisKKyM6IHJlbW90ZS5jOjIwMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiJXNcIiBmb3IgZGV0YWlscylcbiIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCqyVzwrsg0LTQu9GPINC/0YDQvtGB0LzQvtGC0YDQsCDQvtC/0LjRgdCw0L3QuNGPKVxuIgorCisjOiByZW1vdGUuYzoyMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gItCS0LDRiNCwINCy0LXRgtC60LAg0L7Qv9C10YDQtdC20LDQtdGCIMKrJXPCuyDQvdCwICVkINC60L7QvNC80LjRgi5cbiIKK21zZ3N0clsxXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQvtC/0LXRgNC10LbQsNC10YIgwqslc8K7INC90LAgJWQg0LrQvtC80LzQuNGC0LAuXG4iCittc2dzdHJbMl0gItCS0LDRiNCwINCy0LXRgtC60LAg0L7Qv9C10YDQtdC20LDQtdGCIMKrJXPCuyDQvdCwICVkINC60L7QvNC80LjRgtC+0LIuXG4iCittc2dzdHJbM10gItCS0LDRiNCwINCy0LXRgtC60LAg0L7Qv9C10YDQtdC20LDQtdGCIMKrJXPCuyDQvdCwICVkINC60L7QvNC80LjRgtC+0LIuXG4iCisKKyM6IHJlbW90ZS5jOjIwNDAKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IHB1c2jCuywg0YfRgtC+0LHRiyDQvtC/0YPQsdC70LjQutC+0LLQsNGC0Ywg0LLQsNGI0Lgg0LvQvtC60LDQu9GM0L3Ri9C1INC60L7QvNC80LjRgtGLKVxuIgorCisjOiByZW1vdGUuYzoyMDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gItCS0LDRiNCwINCy0LXRgtC60LAg0L7RgtGB0YLQsNC10YIg0L7RgiDCqyVzwrsg0L3QsCAlZCDQutC+0LzQvNC40YIg0Lgg0LzQvtC20LXRgiDQsdGL0YLRjCDQv9C10YDQtdC80L7RgtCw0L3QsCDQstC/0LXRgNC10LQuXG4iCittc2dzdHJbMV0gItCS0LDRiNCwINCy0LXRgtC60LAg0L7RgtGB0YLQsNC10YIg0L7RgiDCqyVzwrsg0L3QsCAlZCDQutC+0LzQvNC40YLQsCDQuCDQvNC+0LbQtdGCINCx0YvRgtGMINC/0LXRgNC10LzQvtGC0LDQvdCwINCy0L/QtdGA0LXQtC5cbiIKK21zZ3N0clsyXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQvtGC0YHRgtCw0LXRgiDQvtGCIMKrJXPCuyDQvdCwICVkINC60L7QvNC80LjRgtC+0LIg0Lgg0LzQvtC20LXRgiDQsdGL0YLRjCDQv9C10YDQtdC80L7RgtCw0L3QsCDQstC/0LXRgNC10LQuXG4iCittc2dzdHJbM10gItCS0LDRiNCwINCy0LXRgtC60LAg0L7RgtGB0YLQsNC10YIg0L7RgiDCqyVzwrsg0L3QsCAlZCDQutC+0LzQvNC40YLQvtCyINC4INC80L7QttC10YIg0LHRi9GC0Ywg0L/QtdGA0LXQvNC+0YLQsNC90LAg0LLQv9C10YDQtdC0LlxuIgorCisjOiByZW1vdGUuYzoyMDUxCittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcHVsbMK7LCDRh9GC0L7QsdGLINC+0LHQvdC+0LLQuNGC0Ywg0LLQsNGI0YMg0LvQvtC60LDQu9GM0L3Rg9GOINCy0LXRgtC60YMpXG4iCisKKyM6IHJlbW90ZS5jOjIwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICLQktCw0YjQsCDQstC10YLQutCwINC4IMKrJXPCuyDRgNCw0LfQtNC10LvQuNC70LjRgdGMXG7QuCDRgtC10L/QtdGA0Ywg0LjQvNC10Y7RgiAlZCDQuCAlZCDRgNCw0LfQvdGL0Lkg0LrQvtC80LzQuNGCINCyINC60LDQttC00L7QuSDRgdC+0L7RgtCy0LXRgtGB0YLQstC10L3QvdC+LlxuIgorbXNnc3RyWzFdICLQktCw0YjQsCDQstC10YLQutCwINC4IMKrJXPCuyDRgNCw0LfQtNC10LvQuNC70LjRgdGMXG7QuCDRgtC10L/QtdGA0Ywg0LjQvNC10Y7RgiAlZCDQuCAlZCDRgNCw0LfQvdGL0YUg0LrQvtC80LzQuNGC0LAg0LIg0LrQsNC20LTQvtC5INGB0L7QvtGC0LLQtdGC0YHRgtCy0LXQvdC90L4uXG4iCittc2dzdHJbMl0gItCS0LDRiNCwINCy0LXRgtC60LAg0Lggwqslc8K7INGA0LDQt9C00LXQu9C40LvQuNGB0YxcbtC4INGC0LXQv9C10YDRjCDQuNC80LXRjtGCICVkINC4ICVkINGA0LDQt9C90YvRhSDQutC+0LzQvNC40YLQvtCyINCyINC60LDQttC00L7QuSDRgdC+0L7RgtCy0LXRgtGB0YLQstC10L3QvdC+LlxuIgorbXNnc3RyWzNdICLQktCw0YjQsCDQstC10YLQutCwINC4IMKrJXPCuyDRgNCw0LfQtNC10LvQuNC70LjRgdGMXG7QuCDRgtC10L/QtdGA0Ywg0LjQvNC10Y7RgiAlZCDQuCAlZCDRgNCw0LfQvdGL0YUg0LrQvtC80LzQuNGC0L7QsiDQsiDQutCw0LbQtNC+0Lkg0YHQvtC+0YLQstC10YLRgdGC0LLQtdC90L3Qvi5cbiIKKworIzogcmVtb3RlLmM6MjA2NAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycylcbiIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBwdWxswrssINGH0YLQvtCx0Ysg0YHQu9C40YLRjCDQstC90LXRiNC90Y7RjiDQstC10YLQutGDINCyINCy0LDRiNGDKVxuIgorCisjOiByZW1vdGUuYzoyMjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBleHBlY3RlZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcGxhY2UgcmVmIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgZGVwdGggdG9vIGhpZ2ggZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzoyMTcgcmVyZXJlLmM6MjI2IHJlcmVyZS5jOjIyOQorbXNnaWQgImNvcnJ1cHQgTUVSR0VfUlIiCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6MjY0IHJlcmVyZS5jOjI2OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXJlcmUgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICclcycgKCVzKSIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZsdXNoICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6NTAzIHJlcmVyZS5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbmZsaWN0IGh1bmtzIGluICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB1dGltZSgpIG9uICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjc1MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNvcmRlZCByZXNvbHV0aW9uIGZvciAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzb2x2ZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayBzdHJheSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNvcmRlZCBwcmVpbWFnZSBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo4ODEgc3VibW9kdWxlLmM6MjAyNCBidWlsdGluL2xvZy5jOjE3NTAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDE3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LrQsNGC0LDQu9C+0LMgwqslc8K7IgorCisjOiByZXJlcmUuYzoxMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgY29uZmxpY3RlZCBzdGF0ZSBpbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjEwNjggcmVyZXJlLmM6MTA3NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyByZW1lbWJlcmVkIHJlc29sdXRpb24gZm9yICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6MTA3NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6MTA4NworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9yZ290IHJlc29sdXRpb24gZm9yICclcydcbiIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzoxMTk5Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcnItY2FjaGUgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IHJldmlzaW9uLmM6MjQ3NgorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgItC/0L7RhdC+0LbQtSwg0LLQsNGI0LAg0YLQtdC60YPRidCw0Y8g0LLQtdGC0LrQsCDQv9C+0LLRgNC10LbQtNC10L3QsCIKKworIzogcmV2aXNpb24uYzoyNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIKK21zZ3N0ciAi0LLQsNGI0LAg0YLQtdC60YPRidCw0Y8g0LLQtdGC0LrQsCDCqyVzwrsg0LXRidC1INC90LUg0YHQvtC00LXRgNC20LjRgiDQvdC4INC+0LTQvdC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogcmV2aXNpb24uYzoyNjc5Cittc2dpZCAiLS1maXJzdC1wYXJlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1iaXNlY3QiCittc2dzdHIgItC+0L/RhtC40Y4gLS1maXJzdC1wYXJlbnQg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0YEgLS1iaXNlY3QiCisKKyM6IHJldmlzaW9uLmM6MjY4MworbXNnaWQgIi1MIGRvZXMgbm90IHlldCBzdXBwb3J0IGRpZmYgZm9ybWF0cyBiZXNpZGVzIC1wIGFuZCAtcyIKK21zZ3N0ciAiIgorCisjOiBydW4tY29tbWFuZC5jOjc2MworbXNnaWQgIm9wZW4gL2Rldi9udWxsIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0L7RgtC60YDRi9GC0LjRjyAvZGV2L251bGwiCisKKyM6IHJ1bi1jb21tYW5kLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFzeW5jIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogcnVuLWNvbW1hbmQuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJyVzJyBob29rIHdhcyBpZ25vcmVkIGJlY2F1c2UgaXQncyBub3Qgc2V0IGFzIGV4ZWN1dGFibGUuXG4iCisiWW91IGNhbiBkaXNhYmxlIHRoaXMgd2FybmluZyB3aXRoIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAuIgorbXNnc3RyICLQn9C10YDQtdGF0LLQsNGC0YfQuNC6IMKrJXPCuyDQsdGL0Lsg0L/RgNC+0LjQs9C90L7RgNC40YDQvtCy0LDQvSwg0YLQsNC6INC60LDQuiDQvtC9INC90LUg0YPRgdGC0LDQvdC+0LLQu9C10L0g0LrQsNC6INC40YHQv9C+0LvQvdGP0LXQvNGL0LkuXG7QktGLINC80L7QttC10YLQtSDQvtGC0LrQu9GO0YfQuNGC0Ywg0Y3RgtC+INC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LUg0YEg0L/QvtC80L7RidGM0Y4g0LrQvtC80LDQvdC00YsgwqtnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZcK7LiIKKworIzogc2VuZC1wYWNrLmM6MTQxCittc2dpZCAidW5leHBlY3RlZCBmbHVzaCBwYWNrZXQgd2hpbGUgcmVhZGluZyByZW1vdGUgdW5wYWNrIHN0YXR1cyIKK21zZ3N0ciAi0L3QtdC+0LbQuNC00LDQvdC90YvQuSDQv9GD0YHRgtC+0Lkg0L/QsNC60LXRgiDQv9GA0Lgg0YfRgtC10L3QuNC4INGB0YLQsNGC0YPRgdCwINCy0L3QtdGI0L3QtdC5INGA0LDRgdC/0LDQutC+0LLQutC4IgorCisjOiBzZW5kLXBhY2suYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHJlbW90ZSB1bnBhY2sgc3RhdHVzOiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0YHRgtCw0YLRg9GBINCy0L3QtdGI0L3QtdC5INGA0LDRgdC/0LDQutC+0LLQutC4OiAlcyIKKworIzogc2VuZC1wYWNrLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSB1bnBhY2sgZmFpbGVkOiAlcyIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INCy0L3QtdGI0L3QtdC5INGA0LDRgdC/0LDQutC+0LLQutC1ICVzIgorCisjOiBzZW5kLXBhY2suYzozMDYKK21zZ2lkICJmYWlsZWQgdG8gc2lnbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/QvtC00L/QuNGB0LDQvdC40Y8g0YHQtdGA0YLQuNGE0LjQutCw0YLQsCDQvtGC0L/RgNCw0LLQutC4IgorCisjOiBzZW5kLXBhY2suYzo0MjAKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIHB1c2giCittc2dzdHIgItC/0YDQuNC90LjQvNCw0Y7RidCw0Y8g0YHRgtC+0YDQvtC90LAg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0L7RgtC/0YDQsNCy0LrRgyDRgSDQvtC/0YbQuNC10LkgLS1zaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQyMgorbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAiCisiLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAi0L3QtSDQvtGC0L/RgNCw0LLQu9GP0LXQvCDRgdC10YDRgtC40YTQuNC60LDRgiDQtNC70Y8g0L7RgtC/0YDQsNCy0LrQuCwg0YLQsNC6INC60LDQuiDQv9GA0LjQvdC40LzQsNGO0YnQsNGPINGB0YLQvtGA0L7QvdCwINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC+0YLQv9GA0LDQstC60YMg0YEg0L7Qv9GG0LjQtdC5IC0tc2lnbmVkIgorCisjOiBzZW5kLXBhY2suYzo0MzQKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giCittc2dzdHIgItC/0YDQuNC90LjQvNCw0Y7RidCw0Y8g0YHRgtC+0YDQvtC90LAg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0L7RgtC/0YDQsNCy0LrRgyDRgSDQvtC/0YbQuNC10LkgLS1hdG9taWMiCisKKyM6IHNlbmQtcGFjay5jOjQzOQorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgcHVzaCBvcHRpb25zIgorbXNnc3RyICLQv9GA0LjQvdC40LzQsNGO0YnQsNGPINGB0YLQvtGA0L7QvdCwINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC+0YLQv9GA0LDQstC60YMg0YEg0L7Qv9GG0LjRj9C80LgiCisKKyM6IHNlcXVlbmNlci5jOjE4NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0YDQtdC20LjQvCDQvtGH0LjRgdGC0LrQuCDRgdC+0L7QsdGJ0LXQvdC40Y8g0LrQvtC80LzQuNGC0LAgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MzE4Cittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICLQvtCx0YDQsNGC0LjRgtGMINC40LfQvNC10L3QtdC90LjRjyIKKworIzogc2VxdWVuY2VyLmM6MzIwCittc2dpZCAiY2hlcnJ5LXBpY2siCittc2dzdHIgItC60L7Qv9C40YDQvtCy0LDRgtGMINC60L7QvNC80LjRgiIKKworIzogc2VxdWVuY2VyLmM6MzIyCittc2dpZCAicmViYXNlIC1pIgorbXNnc3RyICJyZWJhc2UgLWkiCisKKyM6IHNlcXVlbmNlci5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGFjdGlvbjogJWQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzgyCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgItC/0L7RgdC70LUg0YDQsNC30YDQtdGI0LXQvdC40Y8g0LrQvtC90YTQu9C40LrRgtC+0LIsINC/0L7QvNC10YLRjNGC0LUg0LjRgdC/0YDQsNCy0LvQtdC90L3Ri9C1INC/0YPRgtC4XG7RgSDQv9C+0LzQvtGJ0YzRjiDCq2dpdCBhZGQgPNC/0YPRgtC4PsK7INC40LvQuCDCq2dpdCBybSA80L/Rg9GC0Lg+wrsiCisKKyM6IHNlcXVlbmNlci5jOjM4NQorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICLQv9C+0YHQu9C1INGA0LDQt9GA0LXRiNC10L3QuNGPINC60L7QvdGE0LvQuNC60YLQvtCyLCDQv9C+0LzQtdGC0YzRgtC1INC40YHQv9GA0LDQstC70LXQvdC90YvQtSDQv9GD0YLQuFxu0YEg0L/QvtC80L7RidGM0Y4gwqtnaXQgYWRkIDzQv9GD0YLQuD7CuyDQuNC70LggwqtnaXQgcm0gPNC/0YPRgtC4PsK7XG7QuCDRgdC00LXQu9Cw0LnRgtC1INC60L7QvNC80LjRgiDRgSDQv9C+0LzQvtGJ0YzRjiDCq2dpdCBjb21taXTCuyIKKworIzogc2VxdWVuY2VyLmM6Mzk4IHNlcXVlbmNlci5jOjI4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0YLRjCDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZW9sIHRvICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCBlb2wg0LIgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzo0MTAgc2VxdWVuY2VyLmM6MjY4NCBzZXF1ZW5jZXIuYzoyODA3IHNlcXVlbmNlci5jOjI4MjEKKyM6IHNlcXVlbmNlci5jOjMwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNCy0LXRgNGI0LjRgtGMIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6NDMzIHNlcXVlbmNlci5jOjk3OCBzZXF1ZW5jZXIuYzoxNjUyIHNlcXVlbmNlci5jOjI3MDQKKyM6IHNlcXVlbmNlci5jOjMwNjYgc2VxdWVuY2VyLmM6MzE3NSBidWlsdGluL2FtLmM6MjQ1IGJ1aWx0aW4vY29tbWl0LmM6NzYwCisjOiBidWlsdGluL21lcmdlLmM6MTExNSBidWlsdGluL3JlYmFzZS5jOjU2NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXMuIgorbXNnc3RyICLQstCw0YjQuCDQu9C+0LrQsNC70YzQvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCx0YPQtNGD0YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdGLICVzLiIKKworIzogc2VxdWVuY2VyLmM6NDYzCittc2dpZCAiY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICLQtNC70Y8g0L/RgNC+0LTQvtC70LbQtdC90LjRjyDQt9Cw0LrQvtC80LzQuNGC0YzRgtC1INCy0LDRiNC4INC40LfQvNC10L3QtdC90LjRjyDQuNC70Lgg0YHQv9GA0Y/Rh9GM0YLQtSDQuNGFLiIKKworIzogc2VxdWVuY2VyLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiVzOiDQv9C10YDQtdC80L7RgtC60LAg0LLQv9C10YDQtdC0IgorCisjOiBzZXF1ZW5jZXIuYzo1MzQgYnVpbHRpbi90YWcuYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90L7QtSDQt9C90LDRh9C10L3QuNC1INGA0LXQttC40LzQsCDQvtGH0LjRgdGC0LrQuCAlcyIKKworIy4gVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIsICJjaGVycnktcGljayIgb3IKKyMuICJyZWJhc2UgLWkiLgorIzogc2VxdWVuY2VyLmM6NjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiVzOiDQndC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0YTQsNC50Lsg0LjQvdC00LXQutGB0LAiCisKKyM6IHNlcXVlbmNlci5jOjY0NgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINC00LXRgNC10LLQviDQutGN0YjQsCIKKworIzogc2VxdWVuY2VyLmM6NjYwCittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNGB0L/QvtC30L3QsNGC0YwgSEVBRCDQutC+0LzQvNC40YIiCisKKyM6IHNlcXVlbmNlci5jOjc0MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBrZXkgcHJlc2VudCBpbiAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZXF1b3RlIHZhbHVlIG9mICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Nzg4IHdyYXBwZXIuYzoyMjcgd3JhcHBlci5jOjM5NyBidWlsdGluL2FtLmM6NzA2CisjOiBidWlsdGluL2FtLmM6Nzk4IGJ1aWx0aW4vbWVyZ2UuYzoxMTEyIGJ1aWx0aW4vcmViYXNlLmM6MTAzNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMIMKrJXPCuyDQtNC70Y8g0YfRgtC10L3QuNGPIgorCisjOiBzZXF1ZW5jZXIuYzo3OTgKK21zZ2lkICInR0lUX0FVVEhPUl9OQU1FJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjgwMworbXNnaWQgIidHSVRfQVVUSE9SX0VNQUlMJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjgwOAorbXNnaWQgIidHSVRfQVVUSE9SX0RBVEUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFyaWFibGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4MTcKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX05BTUUnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjgxOQorbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfRU1BSUwnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjgyMQorbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfREFURSciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQgJyVzJyBpbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjg5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWVcbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZSBzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICLRgyDQstCw0YEg0LjQvNC10Y7RgtGB0Y8g0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1LiDQldGB0LvQuCDRjdGC0Lgg0LjQt9C80LXQvdC10L3QuNGPINC00L7Qu9C20L3RiyDQsdGL0YLRjCDQvtCx0YrQtdC00LXQvdC10L3RiyDRgSDQv9GA0LXQtNGL0LTRg9GJ0LjQvCDQutC+0LzQvNC40YLQvtC8LCDRgtC+INC30LDQv9GD0YHRgtC40YLQtTpcblxuICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcblxu0JXRgdC70Lgg0LbQtSDQvtC90Lgg0LTQvtC70LbQvdGLINCx0YvRgtGMINC/0L7QvNC10YnQtdC90Ysg0LIg0L3QvtCy0YvQuSDQutC+0LzQvNC40YIsINGC0L4g0LfQsNC/0YPRgdGC0LjRgtC1OlxuXG4gIGdpdCBjb21taXQgJXNcblxu0JIg0LvRjtCx0L7QvCDRgdC70YPRh9Cw0LUsINC/0L7RgdC70LUg0YLQvtCz0L4g0LrQsNC6INCy0Ysg0LfQsNC60L7QvdGH0LjRgtC1LCDQv9GA0L7QtNC+0LvQttC40YLRjCDQv9C10YDQtdC80LXRidC10L3QuNC1INC80L7QttC90L4g0LLRi9C/0L7Qu9C90LjQsjpcblxuICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6OTkyCittc2dpZCAid3JpdGluZyByb290IGNvbW1pdCIKK21zZ3N0ciAi0LfQsNC/0LjRgdGMINC60L7QvdC10LLQvtCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IHNlcXVlbmNlci5jOjEyMTMKK21zZ2lkICIncHJlcGFyZS1jb21taXQtbXNnJyBob29rIGZhaWxlZCIKK21zZ3N0ciAi0L7RiNC40LHQutCwINC/0YDQuCDQstGL0LfQvtCy0LUg0L/QtdGA0LXRhdCy0LDRgtGH0LjQutCwIMKrcHJlcGFyZS1jb21taXQtbXNnwrsiCisKKyM6IHNlcXVlbmNlci5jOjEyMjAKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5LiBSdW4gdGhlXG4iCisiZm9sbG93aW5nIGNvbW1hbmQgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHlvdXIgZWRpdG9yIHRvIGVkaXRcbiIKKyJ5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgItCS0LDRiNC1INC40LzRjyDQuNC70Lgg0Y3Qu9C10LrRgtGA0L7QvdC90LDRjyDQv9C+0YfRgtCwINC90LDRgdGC0YDQvtC10L3RiyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDQvdCwINC+0YHQvdC+0LLQsNC90LjQuCDQstCw0YjQtdCz0L5cbtC40LzQtdC90Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC4INC40LzQtdC90Lgg0LzQsNGI0LjQvdGLLiDQn9C+0LbQsNC70YPQudGB0YLQsCwg0L/RgNC+0LLQtdGA0YzRgtC1LCDRh9GC0L4g0L7QvdC4IFxu0L7Qv9GA0LXQtNC10LvQtdC90Ysg0L/RgNCw0LLQuNC70YzQvdC+Llxu0JLRiyDQvNC+0LbQtdGC0LUg0L7RgtC60LvRjtGH0LjRgtGMINGN0YLQviDRg9Cy0LXQtNC+0LzQu9C10L3QuNC1INGD0YHRgtCw0L3QvtCy0LjQsiDQuNGFINC90LDQv9GA0Y/QvNGD0Y4uINCX0LDQv9GD0YHRgtC40YLQtSDRgdC70LXQtNGD0Y7RidGD0Y5cbtC60L7QvNCw0L3QtNGDINC4INGB0LvQtdC00YPQudGC0LUg0LjQvdGB0YLRgNGD0LrRhtC40Y/QvCDQstCw0YjQtdCz0L4g0YLQtdC60YHRgtC+0LLQvtCz0L4g0YDQtdC00LDQutGC0L7RgNCwLCDQtNC70Y9cbtGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0LLQsNGI0LXQs9C+INGE0LDQudC70LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4OlxuXG4gICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcblxu0J/QvtGB0LvQtSDRjdGC0L7Qs9C+LCDQuNC30LzQtdC90LjRgtGMINCw0LLRgtC+0YDRgdGC0LLQviDRjdGC0L7QuSDQutC+0LzQvNC40YLQsCDQvNC+0LbQvdC+INCx0YPQtNC10YIg0YEg0L/QvtC80L7RidGM0Y4g0LrQvtC80LDQvdC00Ys6XG5cbiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTIzMworbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAi0JLQsNGI0LUg0LjQvNGPINC40LvQuCDRjdC70LXQutGC0YDQvtC90L3QsNGPINC/0L7Rh9GC0LAg0L3QsNGB0YLRgNC+0LXQvdGLINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4INC90LAg0L7RgdC90L7QstCw0L3QuNC4INCy0LDRiNC10LPQvlxu0LjQvNC10L3QuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0Lgg0LjQvNC10L3QuCDQvNCw0YjQuNC90YsuINCf0L7QttCw0LvRg9C50YHRgtCwLCDQv9GA0L7QstC10YDRjNGC0LUsINGH0YLQviDQvtC90LggXG7QvtC/0YDQtdC00LXQu9C10L3RiyDQv9GA0LDQstC40LvRjNC90L4uXG7QktGLINC80L7QttC10YLQtSDQvtGC0LrQu9GO0YfQuNGC0Ywg0Y3RgtC+INGD0LLQtdC00L7QvNC70LXQvdC40LUg0YPRgdGC0LDQvdC+0LLQuNCyINC40YUg0L3QsNC/0YDRj9C80YPRjjpcblxuICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwi0JLQsNGI0LUg0JjQvNGPXCJcbiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG5cbtCf0L7RgdC70LUg0Y3RgtC+0LPQviwg0LjQt9C80LXQvdC40YLRjCDQsNCy0YLQvtGA0YHRgtCy0L4g0Y3RgtC+0Lkg0LrQvtC80LzQuNGC0LAg0LzQvtC20L3QviDQsdGD0LTQtdGCINGBINC/0L7QvNC+0YnRjNGOINC60L7QvNCw0L3QtNGLOlxuXG4gICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyNzUKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LfQsNC/0YDQvtGB0LjRgtGMINC90L7QstC+0YHQvtC30LTQsNC90L3Ri9C5INC60L7QvNC80LjRgiIKKworIzogc2VxdWVuY2VyLmM6MTI3NworbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINGA0LDQt9C+0LHRgNCw0YLRjCDQvdC+0LLQvtGB0L7Qt9C00LDQvdC90YvQuSDQutC+0LzQvNC40YIiCisKKyM6IHNlcXVlbmNlci5jOjEzMjMKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBIRUFEIGFmdGVyIGNyZWF0aW5nIGNvbW1pdCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4IEhFQUQg0L/QvtGB0LvQtSDRgdC+0LfQtNCw0L3QuNGPINC60L7QvNC80LjRgtCwIgorCisjOiBzZXF1ZW5jZXIuYzoxMzI1Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAi0L7RgtC00LXQu9GR0L3QvdGL0LkgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTMyOQorbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIgKNC60L7RgNC90LXQstC+0Lkg0LrQvtC80LzQuNGCKSIKKworIzogc2VxdWVuY2VyLmM6MTM1MAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiSEVBRCAlcyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LrQvtC80LzQuNGC0L7QvCEiCisKKyM6IHNlcXVlbmNlci5jOjEzNTYgYnVpbHRpbi9jb21taXQuYzoxNTUxCittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCBIRUFEINC60L7QvNC80LjRgiIKKworIzogc2VxdWVuY2VyLmM6MTQwOCBzZXF1ZW5jZXIuYzoyMDAxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCBhdXRob3IiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINCw0LLRgtC+0YDQsCDQutC+0LzQvNC40YLQsCIKKworIzogc2VxdWVuY2VyLmM6MTQxOCBidWlsdGluL2FtLmM6MTU3MiBidWlsdGluL21lcmdlLmM6Njg4Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUg0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINC00LXRgNC10LLQviIKKworIzogc2VxdWVuY2VyLmM6MTQzNSBzZXF1ZW5jZXIuYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbW1pdCBtZXNzYWdlIGZyb20gJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwINC40Lcgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzoxNDYyIGJ1aWx0aW4vYW0uYzoxNTk0IGJ1aWx0aW4vY29tbWl0LmM6MTY1MAorIzogYnVpbHRpbi9tZXJnZS5jOjg4MiBidWlsdGluL21lcmdlLmM6OTA2Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgItGB0LHQvtC5INC30LDQv9C40YHQuCDQvtCx0YrQtdC60YLQsCDQutC+0LzQvNC40YLQsCIKKworIzogc2VxdWVuY2VyLmM6MTUyMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQutC+0LzQvNC40YIgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINGA0L7QtNC40YLQtdC70YzRgdC60LjQuSDQutC+0LzQvNC40YIgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE2MDIgc2VxdWVuY2VyLmM6MTcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQ6ICVkIgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3QsNGPINC60L7QvNCw0L3QtNCwOiAlZCIKKworIzogc2VxdWVuY2VyLmM6MTY1OSBzZXF1ZW5jZXIuYzoxNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAlZCBjb21taXRzLiIKK21zZ3N0ciAi0K3RgtC+INC+0LHRitC10LTQuNC90LXQvdC40LUgJWQg0LrQvtC80LzQuNGC0L7Qsi4iCisKKyM6IHNlcXVlbmNlci5jOjE2NjkKK21zZ2lkICJuZWVkIGEgSEVBRCB0byBmaXh1cCIKK21zZ3N0ciAi0L3Rg9C20LXQvSBIRUFEINC00LvRjyDQuNGB0L/RgNCw0LLQu9C10L3QuNGPIgorCisjOiBzZXF1ZW5jZXIuYzoxNjcxIHNlcXVlbmNlci5jOjMxMTEKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNjczCittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCdzIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0YLQtdC60YPRidC10LPQviBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzoxNjg2IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NDEKK21zZ2lkICJUaGlzIGlzIHRoZSAxc3QgY29tbWl0IG1lc3NhZ2U6IgorbXNnc3RyICLQrdGC0L4gMS3QtSDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LA6IgorCisjOiBzZXF1ZW5jZXIuYzoxNjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0LTQu9GPICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMlZDoiCittc2dzdHIgItCt0YLQviDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0L3QvtC80LXRgCAjJWQ6IgorCisjOiBzZXF1ZW5jZXIuYzoxNzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJWQgd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAi0KHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwINC90L7QvNC10YAgIyVkINCx0YPQtNC10YIg0L/RgNC+0L/Rg9GJ0LXQvdC+OiIKKworIzogc2VxdWVuY2VyLmM6MTc5NQorbXNnaWQgInlvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgItCy0LDRiCDQuNC90LTQtdC60YEg0L3QtSDRgdC70LjRgi4iCisKKyM6IHNlcXVlbmNlci5jOjE4MDIKK21zZ2lkICJjYW5ub3QgZml4dXAgcm9vdCBjb21taXQiCittc2dzdHIgItC90LXQu9GM0LfRjyDQuNGB0L/RgNCw0LLQuNGC0Ywg0LrQvtGA0L3QtdCy0L7QuSDQutC+0LzQvNC40YIiCisKKyM6IHNlcXVlbmNlci5jOjE4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICLQutC+0LzQvNC40YIgJXMg4oCUINGN0YLQviDQutC+0LzQvNC40YIt0YHQu9C40Y/QvdC40LUsINC90L4g0L7Qv9GG0LjRjyAtbSDQvdC1INGD0LrQsNC30LDQvdCwLiIKKworIzogc2VxdWVuY2VyLmM6MTgyOSBzZXF1ZW5jZXIuYzoxODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAi0YMg0LrQvtC80LzQuNGC0LAgJXMg0L3QtdGCINC/0YDQtdC00LrQsCAlZCIKKworIzogc2VxdWVuY2VyLmM6MTg0MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCDQtNC70Y8gJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgd2lsbCBiZSBhICJ0b2RvIiBjb21tYW5kIGxpa2UKKyMuICJyZXZlcnQiIG9yICJwaWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEuCisjOiBzZXF1ZW5jZXIuYzoxODYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiJXM6INC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINGA0L7QtNC40YLQtdC70YzRgdC60LjQuSDQutC+0LzQvNC40YIg0LTQu9GPICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxOTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgJyVzJyB0byAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMIMKrJXPCuyDQsiDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjE5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0YDQsNGC0LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDQutC+0LzQvNC40YLQsCAlc+KApiAlcyIKKworIzogc2VxdWVuY2VyLmM6MTk4MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC40LzQtdC90LjRgtGMINC60L7QvNC80LjRgiAlc+KApiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjA0MgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiDRgdCx0L7QuSDRh9GC0LXQvdC40Y8g0LjQvdC00LXQutGB0LAiCisKKyM6IHNlcXVlbmNlci5jOjIwNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczog0YHQsdC+0Lkg0L7QsdC90L7QstC70LXQvdC40Y8g0LjQvdC00LXQutGB0LAiCisKKyM6IHNlcXVlbmNlci5jOjIxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgYWNjZXB0IGFyZ3VtZW50czogJyVzJyIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRgCAlcyDQvdC1INC/0YDQuNC90LjQvNCw0LXRgiDQsNGA0LPRg9C80LXQvdGC0Ys6IMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50cyBmb3IgJXMiCittc2dzdHIgItC/0YDQvtC/0YPRidC10L3RiyDQsNGA0LPRg9C80LXQvdGC0Ysg0LTQu9GPICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90LDRjyDRgdGC0YDQvtC60LAgJWQ6ICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjIyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINCy0YvQv9C+0LvQvdC40YLRjCDCqyVzwrsg0LHQtdC3INGD0LrQsNC30LDQvdC40Y8g0L/RgNC10LTRi9C00YPRidC10LPQviDQutC+0LzQvNC40YLQsCIKKworIzogc2VxdWVuY2VyLmM6MjI4NSBidWlsdGluL3JlYmFzZS5jOjE1MyBidWlsdGluL3JlYmFzZS5jOjE3OAorIzogYnVpbHRpbi9yZWJhc2UuYzoyMDQgYnVpbHRpbi9yZWJhc2UuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJy4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMIMKrJXPCuy4iCisKKyM6IHNlcXVlbmNlci5jOjIzNjAKK21zZ2lkICJwbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAi0L/QvtC20LDQu9GD0LnRgdGC0LAg0LjRgdC/0YDQsNCy0YzRgtC1INGN0YLQviDRgSDQv9C+0LzQvtGJ0YzRjiDCq2dpdCByZWJhc2UgLS1lZGl0LXRvZG/Cuy4iCisKKyM6IHNlcXVlbmNlci5jOjIzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICclcyciCittc2dzdHIgItC90LXQv9GA0LjQs9C+0LTQvdCw0Y8g0LTQu9GPINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPINC60LDRgNGC0LAg0YEg0LjQvdGB0YLRgNGD0LrRhtC40Y/QvNC4OiDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjIzNjcKK21zZ2lkICJubyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgItC60L7QvNC80LjRgtGLINC90LUg0YDQsNC30L7QsdGA0LDQvdGLLiIKKworIzogc2VxdWVuY2VyLmM6MjM3OAorbXNnaWQgImNhbm5vdCBjaGVycnktcGljayBkdXJpbmcgYSByZXZlcnQuIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0YHQutC+0L/QuNGA0L7QstCw0YLRjCDQutC+0LzQvNC40YIg0LLQviDQstGA0LXQvNGPINC/0YDQvtGG0LXRgdGB0LAg0L7QsdGA0LDRidC10L3QuNGPINC60L7QvNC80LjRgtCwLiIKKworIzogc2VxdWVuY2VyLmM6MjM4MAorbXNnaWQgImNhbm5vdCByZXZlcnQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0L7QsdGA0LDRgtC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0LrQvtC80LzQuNGC0LAg0LLQviDQstGA0LXQvNGPINC60L7Qv9C40YDQvtCy0LDQvdC40Y8g0LrQvtC80LzQuNGC0LAuIgorCisjOiBzZXF1ZW5jZXIuYzoyNDYyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUgJXM6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyNTQ5Cittc2dpZCAidW51c2FibGUgc3F1YXNoLW9udG8iCittc2dzdHIgItC90LXQv9GA0LjQs9C+0LTQvdGL0Lkg0LTQu9GPINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPINGD0L/Qu9C+0YLQvdC40YLRjC3QvdCw0LQiCisKKyM6IHNlcXVlbmNlci5jOjI1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICclcyciCittc2dzdHIgItC40YHQv9C+0YDRh9C10L3QvdCw0Y8g0LrQsNGA0YLQsCDRgSDQvtC/0YbQuNGP0LzQuDogwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzoyNjQ4IHNlcXVlbmNlci5jOjQyMjcKK21zZ2lkICJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0L0g0L/Rg9GB0YLQvtC5INC90LDQsdC+0YAg0LrQvtC80LzQuNGC0L7QsiIKKworIzogc2VxdWVuY2VyLmM6MjY1NgorbXNnaWQgImEgY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgItC60L7Qv9C40YDQvtCy0LDQvdC40LUg0LjQu9C4INC+0LHRgNCw0YnQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40Lkg0LrQvtC80LzQuNGC0LAg0YPQttC1INCy0YvQv9C+0LvQvdGP0Y7RgtGB0Y8iCisKKyM6IHNlcXVlbmNlci5jOjI2NTcKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAtLXF1aXQgfCAtLWFib3J0KVwiIgorbXNnc3RyICLQv9C+0L/RgNC+0LHRg9C50YLQtSDCq2dpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpwrsiCisKKyM6IHNlcXVlbmNlci5jOjI2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LrQsNGC0LDQu9C+0LMg0LTQu9GPINGD0LrQsNC30LDRgtC10LvRjyDRgdC70LXQtNC+0LLQsNC90LjRjyDQutC+0LzQvNC40YLQvtCyIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MjY3NAorbXNnaWQgImNvdWxkIG5vdCBsb2NrIEhFQUQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNGC0YwgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MjcyOSBzZXF1ZW5jZXIuYzozOTc5Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICLQutC+0L/QuNGA0L7QstCw0L3QuNC1INC40LvQuCDQvtCx0YDQsNGJ0LXQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5INC60L7QvNC80LjRgtCwINGD0LbQtSDQstGL0L/QvtC70L3Rj9GO0YLRgdGPIgorCisjOiBzZXF1ZW5jZXIuYzoyNzMxCittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtC/0YDQtdC00LXQu9C40YLRjCBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoyNzMzIHNlcXVlbmNlci5jOjI3NjgKK21zZ2lkICJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC+0YLQvNC10L3QuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGBINCy0LXRgtC60LgsINC60L7RgtC+0YDQsNGPINC10YnQtSDQvdC1INGB0L7Qt9C00LDQvdCwIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU0IGJ1aWx0aW4vZ3JlcC5jOjczMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6Mjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnOiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywgwqslc8K7OiAlcyIKKworIzogc2VxdWVuY2VyLmM6Mjc1NworbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgItC90LXQvtC20LjQtNCw0L3QvdGL0Lkg0LrQvtC90LXRhiDRhNCw0LnQu9CwIgorCisjOiBzZXF1ZW5jZXIuYzoyNzYzCisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAi0YHQvtGF0YDQsNC90LXQvdC90YvQuSDRhNCw0LnQuyDRgSBIRUFEINC/0LXRgNC10LQg0LrQvtC/0LjRgNC+0LLQsNC90LjQtdC8INC60L7QvNC80LjRgtCwIMKrJXPCuyDQv9C+0LLRgNC10LbQtNC10L0iCisKKyM6IHNlcXVlbmNlci5jOjI3NzQKK21zZ2lkICJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQuIE5vdCByZXdpbmRpbmcsIGNoZWNrIHlvdXIgSEVBRCEiCittc2dzdHIgItCf0L7RhdC+0LbQtSwg0YfRgtC+INCy0Ysg0L/QtdGA0LXQvNC10YHRgtC40LvQuCBIRUFELiDQn9C10YDQtdC80L7RgtC60LAg0L3QtSDQstGL0L/QvtC70L3Rj9C10YLRgdGPLCDQv9GA0L7QstC10YDRjNGC0LUg0YHQstC+0Lkg0YPQutCw0LfQsNGC0LXQu9GMIEhFQUQhIgorCisjOiBzZXF1ZW5jZXIuYzoyOTAzIHNlcXVlbmNlci5jOjM4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyOTQxIHNlcXVlbmNlci5jOjM4NzQKK21zZ2lkICJjYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoyOTU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICVzLi4uICUuKnMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mjk4MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWVyZ2UgJS4qcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyOTk3IHNlcXVlbmNlci5jOjMwMDEgYnVpbHRpbi9kaWZmdG9vbC5jOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQutC+0L/QuNGA0L7QstCw0YLRjCDCqyVzwrsg0LIgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzozMDIzIHNlcXVlbmNlci5jOjM0NDYgYnVpbHRpbi9yZWJhc2UuYzo4MzkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU4MCBidWlsdGluL3JlYmFzZS5jOjE5NDAgYnVpbHRpbi9yZWJhc2UuYzoxOTk1Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5kZXgiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINC40L3QtNC10LrRgSIKKworIzogc2VxdWVuY2VyLmM6MzAyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIGZhaWxlZDogJXNcbiIKKyIlc1lvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0LLRi9C/0L7Qu9C90LXQvdC40Y86ICVzXG4lc9CS0Ysg0LzQvtC20LXRgtC1INC40YHQv9GA0LDQstC40YLRjCDQvtGI0LjQsdC60YMsINCwINC30LDRgtC10Lwg0LfQsNC/0YPRgdGC0LjRgtGMXG5cbiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG5cbiIKKworIzogc2VxdWVuY2VyLmM6MzAzNAorbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCittc2dzdHIgItC4INCx0YvQu9C4INGB0LTQtdC70LDQvdGLINC40LfQvNC10L3QtdC90LjRjyDQsiDQuNC90LTQtdC60YHQtSDQuC/QuNC70Lgg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtVxuIgorCisjOiBzZXF1ZW5jZXIuYzozMDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gc3VjY2VlZGVkOiAlc1xuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAi0YPRgdC/0LXRiNC90L7QtSDQstGL0L/QvtC70L3QtdC90LjQtTogJXNcbtC90L4g0L7RgdGC0LDQu9C40YHRjCDQuNC30LzQtdC90LXQvdC40Y8g0LIg0LjQvdC00LXQutGB0LUg0Lgv0LjQu9C4INCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LVcbtCh0LTQtdC70LDQudGC0LUg0LrQvtC80LzQuNGCINC40LvQuCDRgdC/0YDRj9GH0YzRgtC1INCy0LDRiNC4INC40LfQvNC10L3QtdC90LjRjywg0LAg0LfQsNGC0LXQvCDQstGL0L/QvtC70L3QuNGC0LVcblxuICBnaXQgcmViYXNlIC0tY29udGludWVcblxuIgorCisjOiBzZXF1ZW5jZXIuYzozMTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgbGFiZWwgbmFtZTogJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMxNTUKK21zZ2lkICJ3cml0aW5nIGZha2Ugcm9vdCBjb21taXQiCittc2dzdHIgItC30LDQv9C40YHRjCDQv9C+0LTQtNC10LvRjNC90L7Qs9C+INC60L7RgNC90LXQstC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogc2VxdWVuY2VyLmM6MzE2MAorbXNnaWQgIndyaXRpbmcgc3F1YXNoLW9udG8iCittc2dzdHIgItC30LDQv9C40YLRjCDRg9C/0LvQvtGC0L3QuNGC0Ywt0L3QsNC0IgorCisjOiBzZXF1ZW5jZXIuYzozMTk4IGJ1aWx0aW4vcmViYXNlLmM6ODQ0IGJ1aWx0aW4vcmViYXNlLmM6ODUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDQtNC10YDQtdCy0L4g0LTQu9GPICVzIgorCisjOiBzZXF1ZW5jZXIuYzozMjE2IGJ1aWx0aW4vcmViYXNlLmM6ODYzCittc2dpZCAiY291bGQgbm90IHdyaXRlIGluZGV4IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0LjQvdC00LXQutGBIgorCisjOiBzZXF1ZW5jZXIuYzozMjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNGB0L/QvtC30L3QsNGC0Ywgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzozMjcxCittc2dpZCAiY2Fubm90IG1lcmdlIHdpdGhvdXQgYSBjdXJyZW50IHJldmlzaW9uIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0YHQu9C40YLRjCDQsdC10Lcg0YLQtdC60YPRidC10Lkg0YDQtdC00LDQutGG0LjQuCIKKworIzogc2VxdWVuY2VyLmM6MzI5MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMzMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBtZXJnZTogJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMzMTQKK21zZ2lkICJvY3RvcHVzIG1lcmdlIGNhbm5vdCBiZSBleGVjdXRlZCBvbiB0b3Agb2YgYSBbbmV3IHJvb3RdIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMzMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBjb21taXQgbWVzc2FnZSBvZiAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwINC00LvRjyDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjM0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV2ZW4gYXR0ZW1wdCB0byBtZXJnZSAnJS4qcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LTQsNC20LUg0L/QvtC/0YvRgtCw0YLRjNGB0Y8g0YHQu9C40YLRjCDCqyUuKnPCuyIKKworIzogc2VxdWVuY2VyLmM6MzQ5NAorbXNnaWQgIm1lcmdlOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgItGB0LvQuNGP0L3QuNC1OiDQndC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0YTQsNC50Lsg0LjQvdC00LXQutGB0LAiCisKKyM6IHNlcXVlbmNlci5jOjM1NjIgYnVpbHRpbi9yZWJhc2UuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guXG4iCittc2dzdHIgItCf0YDQuNC80LXQvdC10L3RiyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDRgdC/0YDRj9GC0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8uXG4iCisKKyM6IHNlcXVlbmNlci5jOjM1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0b3JlICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCAlcyIKKworIzogc2VxdWVuY2VyLmM6MzU3NyBidWlsdGluL3JlYmFzZS5jOjcyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKyJZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLlxuIgorIllvdSBjYW4gcnVuIFwiZ2l0IHN0YXNoIHBvcFwiIG9yIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdCBhbnkgdGltZS5cbiIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LXQvdC40LUg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60Lgg0YHQv9GA0Y/RgtCw0L3QvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5INCy0YvQt9Cy0LDQu9C+INC60L7QvdGE0LvQuNC60YLRiy5cbtCS0LDRiNC4INC40LfQvNC10L3QtdC90LjRjyDRgdC/0YDRj9GC0LDQvdGLINC4INCyINCx0LXQt9C+0L/QsNGB0L3QvtGB0YLQuC5cbtCS0Ysg0LzQvtC20LXRgtC1INCy0YvQv9C+0LvQvdC40YLRjCDCq2dpdCBzdGFzaCBwb3DCuyDQuNC70LggwqtnaXQgc3Rhc2ggZHJvcMK7INCyINC70Y7QsdC+0Lkg0LzQvtC80LXQvdGCLlxuIgorCisjOiBzZXF1ZW5jZXIuYzozNjM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSB2YWxpZCBPSUQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzY1NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzI0Cittc2dpZCAiY291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQtNC10LvQuNGC0YwgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MzY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0IEhFQURcbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZXhlY3V0ZSB0aGUgdG9kbyBjb21tYW5kXG4iCisiXG4iCisiICAgICUuKnNcbiIKKyJJdCBoYXMgYmVlbiByZXNjaGVkdWxlZDsgVG8gZWRpdCB0aGUgY29tbWFuZCBiZWZvcmUgY29udGludWluZywgcGxlYXNlXG4iCisiZWRpdCB0aGUgdG9kbyBsaXN0IGZpcnN0OlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tZWRpdC10b2RvXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAlcy4uLiAgJS4qc1xuIgorbXNnc3RyICLQntGB0YLQsNC90L7QstC70LXQvdC+INC90LAgJXMg4oCmICAlLipzXG4iCisKKyM6IHNlcXVlbmNlci5jOjM4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kICVkIgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3QsNGPINC60L7QvNCw0L3QtNCwICVkIgorCisjOiBzZXF1ZW5jZXIuYzozODgyCittc2dpZCAiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCBvcmlnLWhlYWQiCisKKyM6IHNlcXVlbmNlci5jOjM4ODcKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnb250byciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMIMKrb250b8K7IgorCisjOiBzZXF1ZW5jZXIuYzozOTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgSEVBRCB0byAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMIEhFQUQg0L3QsCAlcyIKKworIzogc2VxdWVuY2VyLmM6Mzk5MQorbXNnaWQgImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCDQv9C10YDQtdC80LXRidC10L3QuNC1INC60L7QvNC80LjRgtC+0LI6INCjINCy0LDRgSDQtdGB0YLRjCDQvdC10L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjy4iCisKKyM6IHNlcXVlbmNlci5jOjQwMDAKK21zZ2lkICJjYW5ub3QgYW1lbmQgbm9uLWV4aXN0aW5nIGNvbW1pdCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQuNGB0L/RgNCw0LLQuNGC0Ywg0L3QtdGB0YPRidC10YHRgtCy0YPRjtGJ0LjQuSDQutC+0LzQvNC40YIiCisKKyM6IHNlcXVlbmNlci5jOjQwMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBmaWxlOiAnJXMnIgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNGL0Lkg0YTQsNC50Ls6IMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6NDAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbnRlbnRzOiAnJXMnIgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNC+0LUg0YHQvtC00LXRgNC20LjQvNC+0LU6IMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6NDAwNworbXNnaWQgIiIKKyJcbiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UsIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAiXG7QoyDQstCw0YEg0LjQvNC10Y7RgtGB0Y8g0L3QtdC30LDQutC+0LzQvNC40YfQtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1LiDQodC00LXQu9Cw0LnRgtC1INC60L7QvNC80LjRgiwg0LAg0LfQsNGC0LXQvCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgcmViYXNlIC0tY29udGludWXCuyDRgdC90L7QstCwLiIKKworIzogc2VxdWVuY2VyLmM6NDA0MyBzZXF1ZW5jZXIuYzo0MDgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBmaWxlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQwOTYKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0YwgQ0hFUlJZX1BJQ0tfSEVBRCIKKworIzogc2VxdWVuY2VyLmM6NDEwMworbXNnaWQgImNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQutC+0LzQvNC40YLQuNGC0Ywg0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjy4iCisKKyM6IHNlcXVlbmNlci5jOjQyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbid0IGNoZXJyeS1waWNrIGEgJXMiCittc2dzdHIgIiVzOiDQvdC1INGD0LTQsNC70L7RgdGMINGB0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0LrQvtC80LzQuNGCICVzIgorCisjOiBzZXF1ZW5jZXIuYzo0MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBiYWQgcmV2aXNpb24iCittc2dzdHIgIiVzOiDQv9C70L7RhdCw0Y8g0YDQtdC00LDQutGG0LjRjyIKKworIzogc2VxdWVuY2VyLmM6NDI0MworbXNnaWQgImNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINCy0L7Qt9Cy0YDQsNGC0LjRgtGMINC40LfQvdCw0YfQsNC70YzQvdGL0Lkg0LrQvtC80LzQuNGCIgorCisjOiBzZXF1ZW5jZXIuYzo0Njg2Cittc2dpZCAibWFrZV9zY3JpcHQ6IHVuaGFuZGxlZCBvcHRpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDog0L3QtSDQvtCx0YDQsNCx0L7RgtCw0L3QvdGL0LUg0L7Qv9GG0LjQuCIKKworIzogc2VxdWVuY2VyLmM6NDY4OQorbXNnaWQgIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJpbmcgcmV2aXNpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDog0L7RiNC40LHQutCwINC/0YDQuCDQvtCx0L3QvtCy0LvQtdC90LjQuCDRgNC10LTQsNC60YbQuNC5IgorCisjOiBzZXF1ZW5jZXIuYzo0ODQ3Cittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoaXMgd2l0aCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnLlxuIgorIk9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLlxuIgorbXNnc3RyICLQktGLINC80L7QttC10YLQtSDQuNGB0L/RgNCw0LLQuNGC0Ywg0Y3RgtC+INGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb8K7LCDQsCDQv9C+0YLQvtC8INC30LDQv9GD0YHRgtC40LIgwqtnaXQgcmViYXNlIC0tY29udGludWXCuy5cbtCY0LvQuCDQstGLINC80L7QttC10YLQtSDQv9GA0LXRgNCy0LDRgtGMINC/0YDQvtGG0LXRgdGBINC/0LXRgNC10LzQtdGJ0LXQvdC40Y8sINCy0YvQv9C+0LvQvdC40LIgwqtnaXQgcmViYXNlIC0tYWJvcnTCu1xuIgorCisjOiBzZXF1ZW5jZXIuYzo0OTU5IHNlcXVlbmNlci5jOjQ5NzYKK21zZ2lkICJub3RoaW5nIHRvIGRvIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ5OTAKK21zZ2lkICJjb3VsZCBub3Qgc2tpcCB1bm5lY2Vzc2FyeSBwaWNrIGNvbW1hbmRzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjUwNzMKK21zZ2lkICJ0aGUgc2NyaXB0IHdhcyBhbHJlYWR5IHJlYXJyYW5nZWQuIgorbXNnc3RyICLRgdGG0LXQvdCw0YDQuNC5INGD0LbQtSDQsdGL0Lsg0L/QtdGA0LXRgdGC0YDQvtC10L0uIgorCisjOiBzZXR1cC5jOjEyMworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiwqslc8K7INCy0L3QtSDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBzZXR1cC5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IG5vIHN1Y2ggcGF0aCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnZ2l0IDxjb21tYW5kPiAtLSA8cGF0aD4uLi4nIHRvIHNwZWNpZnkgcGF0aHMgdGhhdCBkbyBub3QgZXhpc3QgbG9jYWxseS4iCittc2dzdHIgIiVzOiDQvdC10YIg0YLQsNC60L7Qs9C+INC/0YPRgtC4INCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUuXG7QmNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IDzQutC+0LzQsNC90LTQsD4gLS0gPNC/0YPRgtGMPuKApsK7INC00LvRjyDRg9C60LDQt9Cw0L3QuNGPINC/0YPRgtC10LksINC60L7RgtC+0YDRi9C1INC90LUg0YHRg9GJ0LXRgdGC0LLRg9GO0YIg0LvQvtC60LDQu9GM0L3Qvi4iCisKKyM6IHNldHVwLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogdW5rbm93biByZXZpc2lvbiBvciBwYXRoIG5vdCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAi0L3QtdC+0LTQvdC+0LfQvdCw0YfQvdGL0Lkg0LDRgNCz0YPQvNC10L3RgiDCqyVzwrs6INC90LXQuNC30LLQtdGB0YLQvdCw0Y8g0YDQtdC00LDQutGG0LjRjyDQuNC70Lgg0L3QtSDQv9GD0YLRjCDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1Llxu0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCqy0twrsg0LTQu9GPINC+0YLQtNC10LvQtdC90LjRjyDQv9GD0YLQtdC5INC+0YIg0YDQtdC00LDQutGG0LjQuSwg0LLQvtGCINGC0LDQujpcbsKrZ2l0IDzQutC+0LzQsNC90LTQsD4gWzzRgNC10LTQsNC60YbQuNGPPuKApl0gLS0gWzzRhNCw0LnQuz7igKZdwrsiCisKKyM6IHNldHVwLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAnJXMnIG11c3QgY29tZSBiZWZvcmUgbm9uLW9wdGlvbiBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAi0L3QtdC+0LTQvdC+0LfQvdCw0YfQvdGL0Lkg0LDRgNCz0YPQvNC10L3RgiDCqyVzwrs6INGP0LLQu9GP0LXRgtGB0Y8g0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INC4INGA0LXQtNCw0LrRhtC40LXQuSDQuCDQuNC80LXQvdC10Lwg0YTQsNC50LvQsC5cbtCY0YHQv9C+0LvRjNC30YPQudGC0LUgwqstLcK7INC00LvRjyDQvtGC0LTQtdC70LXQvdC40Y8g0L/Rg9GC0LXQuSDQvtGCINGA0LXQtNCw0LrRhtC40LksINCy0L7RgiDRgtCw0Lo6XG7Cq2dpdCA80LrQvtC80LDQvdC00LA+IFs80YDQtdC00LDQutGG0LjRjz7igKZdIC0tIFs80YTQsNC50Ls+4oCmXcK7IgorCisjOiBzZXR1cC5jOjM5MAorbXNnaWQgInVuYWJsZSB0byBzZXQgdXAgd29yayB0cmVlIHVzaW5nIGludmFsaWQgY29uZmlnIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6Mzk0Cittc2dpZCAidGhpcyBvcGVyYXRpb24gbXVzdCBiZSBydW4gaW4gYSB3b3JrIHRyZWUiCittc2dzdHIgIiIKKworIzogc2V0dXAuYzo1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgZ2l0IHJlcG8gdmVyc2lvbiA8PSAlZCwgZm91bmQgJWQiCittc2dzdHIgItCe0LbQuNC00LDQtdC80LDRjyDQstC10YDRgdC40Y8gZ2l0INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gPD0gJWQsINCwINC+0LHQvdCw0YDRg9C20LXQvdCwICVkIgorCisjOiBzZXR1cC5jOjU0OAorbXNnaWQgInVua25vd24gcmVwb3NpdG9yeSBleHRlbnNpb25zIGZvdW5kOiIKK21zZ3N0ciAi0L7QsdC90LDRgNGD0LbQtdC90Ysg0L3QtdC40LfQstC10YHRgtC90YvQtSDRgNCw0YHRiNC40YDQtdC90LjRjyDRgNC10L/QvtC30LjRgtC+0YDQuNGPOiIKKworIzogc2V0dXAuYzo1NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyAnJXMnIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0L7RgtC60YDRi9GC0LjRjyDCqyVzwrsiCisKKyM6IHNldHVwLmM6NTY5CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBsYXJnZSB0byBiZSBhIC5naXQgZmlsZTogJyVzJyIKK21zZ3N0ciAi0YTQsNC50Lsg0YHQu9C40YjQutC+0Lwg0LHQvtC70YzRiNC+0Lkg0LrQsNC6INC00LvRjyAuZ2l0INGE0LDQudC70LA6IMKrJXPCuyIKKworIzogc2V0dXAuYzo1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyAlcyIKK21zZ3N0ciAi0L7RiNC40LHQutCwINGH0YLQtdC90LjRjyAlcyIKKworIzogc2V0dXAuYzo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBnaXRmaWxlIGZvcm1hdDogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDRhNC+0YDQvNCw0YIg0YTQsNC50LvQsCBnaXRmaWxlOiAlcyIKKworIzogc2V0dXAuYzo1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcGF0aCBpbiBnaXRmaWxlOiAlcyIKK21zZ3N0ciAi0L3QtdGCINC/0YPRgtC4INCyIGdpdGZpbGU6ICVzIgorCisjOiBzZXR1cC5jOjU3NworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgItC90LUg0Y/QstC70Y/QtdGC0YHRjyDRgNC10L/QvtC30LjRgtC+0YDQuNC10LwgZ2l0OiAlcyIKKworIzogc2V0dXAuYzo2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyQlcycgdG9vIGJpZyIKK21zZ3N0ciAiwqskJXPCuyDRgdC70LjRiNC60L7QvCDQsdC+0LvRjNGI0L7QuSIKKworIzogc2V0dXAuYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciCittc2dzdHIgItC90LUg0Y/QstC70Y/QtdGC0YHRjyDRgNC10L/QvtC30LjRgtC+0YDQuNC10LwgZ2l0OiDCqyVzwrsiCisKKyM6IHNldHVwLmM6NzE5IHNldHVwLmM6NzIxIHNldHVwLmM6NzUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBjaGRpciDQsiDCqyVzwrsiCisKKyM6IHNldHVwLmM6NzI0IHNldHVwLmM6NzgwIHNldHVwLmM6NzkwIHNldHVwLmM6ODI5IHNldHVwLmM6ODM3Cittc2dpZCAiY2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLQtdGA0L3Rg9GC0YzRgdGPINCyIGN3ZCIKKworIzogc2V0dXAuYzo4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyUqcyVzJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGF0INC00LvRjyDCqyUqcyVzJXPCuyIKKworIzogc2V0dXAuYzoxMDgzCittc2dpZCAiVW5hYmxlIHRvIHJlYWQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YLQtdC60YPRidC40Lkg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMiCisKKyM6IHNldHVwLmM6MTA5MiBzZXR1cC5jOjEwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoYW5nZSB0byAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC40LfQvNC10L3QuNGC0Ywg0L3QsCDCqyVzwrsiCisKKyM6IHNldHVwLmM6MTEwMworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMpOiAlcyIKK21zZ3N0ciAi0L3QtSDQvdCw0LnQtNC10L0gZ2l0INGA0LXQv9C+0LfQuNGC0L7RgNC40LkgKNC40LvQuCDQvtC00LjQvSDQuNC3INGA0L7QtNC40YLQtdC70YzRgdC60LjRhSDQutCw0YLQsNC70L7Qs9C+0LIpOiAlcyIKKworIzogc2V0dXAuYzoxMTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IHBhcmVudCB1cCB0byBtb3VudCBwb2ludCAlcylcbiIKKyJTdG9wcGluZyBhdCBmaWxlc3lzdGVtIGJvdW5kYXJ5IChHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNIG5vdCBzZXQpLiIKK21zZ3N0ciAi0L3QtSDQvdCw0LnQtNC10L0gZ2l0INGA0LXQv9C+0LfQuNGC0L7RgNC40LkgKNC40LvQuCDQvtC00LjQvSDQuNC3INC10LPQviDQutCw0YLQsNC70L7Qs9C+0LIg0LLQv9C70L7RgtGMINC00L4g0YLQvtGH0LrQuCDQvNC+0L3RgtC40YDQvtCy0LDQvdC40Y8gJXMpXG7QntGB0YLQsNC90LDQstC70LjQstCw0Y4g0L/QvtC40YHQuiDQvdCwINCz0YDQsNC90LjRhtC1INGE0LDQudC70L7QstC+0Lkg0YHQuNGB0YLQtdC80YsgKNGC0LDQuiDQutCw0LogR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSDQvdC1INGD0YHRgtCw0L3QvtCy0LvQtdC9KS4iCisKKyM6IHNldHVwLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicHJvYmxlbSB3aXRoIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBmaWxlbW9kZSB2YWx1ZSAoMCUuM28pLlxuIgorIlRoZSBvd25lciBvZiBmaWxlcyBtdXN0IGFsd2F5cyBoYXZlIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjEyNjQKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBvciBkdXAgZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQvtGC0LrRgNGL0YLQuNGPIC9kZXYvbnVsbCDQuNC70Lgg0LTRg9Cx0LvQuNGA0L7QstCw0L3QuNGPINC00LXRgdC60YDQuNC/0YLQvtGA0LAiCisKKyM6IHNldHVwLmM6MTI3OQorbXNnaWQgImZvcmsgZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0LLRi9C/0L7Qu9C90LXQvdC40LggZm9yayIKKworIzogc2V0dXAuYzoxMjg0Cittc2dpZCAic2V0c2lkIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INCy0YvQv9C+0LvQvdC10L3QuNC4IHNldHNpZCIKKworIzogc2hhMS1maWxlLmM6NDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgJXMgZG9lcyBub3QgZXhpc3Q7IGNoZWNrIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NTA0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgYWx0ZXJuYXRlIG9iamVjdCBwYXRoOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGlnbm9yaW5nIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzLCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjU4MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIG9iamVjdCBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjYyNgorbXNnaWQgInVuYWJsZSB0byBmZG9wZW4gYWx0ZXJuYXRlcyBsb2NrZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo2NDQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NjUxCittc2dpZCAidW5hYmxlIHRvIG1vdmUgbmV3IGFsdGVybmF0ZXMgZmlsZSBpbnRvIHBsYWNlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgItC/0YPRgtGMIMKrJXPCuyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBzaGExLWZpbGUuYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBhcyBhIGxpbmtlZCBjaGVja291dCBpcyBub3Qgc3VwcG9ydGVkIHlldC4iCittc2dzdHIgItGB0YHRi9C70LDQtdC80YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IMKrJXPCuyDQutCw0Log0YHQstGP0LfQsNC90L3QvtC1INGB0L7RgdGC0L7Rj9C90LjQtSwg0L/QvtC60LAg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPLiIKKworIzogc2hhMS1maWxlLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgItGB0YHRi9C70LDQtdC80YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IMKrJXPCuyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LvQvtC60LDQu9GM0L3Ri9C8LiIKKworIzogc2hhMS1maWxlLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgc2hhbGxvdyIKK21zZ3N0ciAi0YHRgdGL0LvQsNC10LzRi9C5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkgwqslc8K7INGP0LLQu9GP0LXRgtGB0Y8g0YfQsNGB0YLQuNGH0L3Ri9C8IgorCisjOiBzaGExLWZpbGUuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICLRgdGB0YvQu9Cw0LXQvNGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDCqyVzwrsg0Y/QstC70Y/QtdGC0YHRjyDRgdGA0LDRidC10L3QvdGL0LwiCisKKyM6IHNoYTEtZmlsZS5jOjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICJhdHRlbXB0aW5nIHRvIG1tYXAgJTxQUkl1TUFYPiBvdmVyIGxpbWl0ICU8UFJJdU1BWD4iCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6ODcxCittc2dpZCAibW1hcCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTAzNQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZmlsZSAlcyBpcyBlbXB0eSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMTU5IHNoYTEtZmlsZS5jOjIyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBsb29zZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMTYxIHNoYTEtZmlsZS5jOjIzMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2FyYmFnZSBhdCBlbmQgb2YgbG9vc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTIwMworbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTI4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjEyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZW1lbnQgJXMgbm90IGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvb3NlIG9iamVjdCAlcyAoc3RvcmVkIGluICVzKSBpcyBjb3JydXB0IgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2VkIG9iamVjdCAlcyAoc3RvcmVkIGluICVzKSBpcyBjb3JydXB0IgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTYxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHBlcm1pc3Npb24gdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNjE4Cittc2dpZCAiZmlsZSB3cml0ZSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNjM3Cittc2dpZCAiZXJyb3Igd2hlbiBjbG9zaW5nIGxvb3NlIG9iamVjdCBmaWxlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zdWZmaWNpZW50IHBlcm1pc3Npb24gZm9yIGFkZGluZyBhbiBvYmplY3QgdG8gcmVwb3NpdG9yeSBkYXRhYmFzZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNzA0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNzI4Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGxvb3NlIG9iamVjdCBmaWxlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgbmV3IG9iamVjdCAlcyAoJWQpIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE3MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZUVuZCBvbiBvYmplY3QgJXMgZmFpbGVkICglZCkiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTc0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25mdXNlZCBieSB1bnN0YWJsZSBvYmplY3Qgc291cmNlIGRhdGEgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE3NTIgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTgyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE4NjcKK21zZ2lkICJjb3JydXB0IGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxODc1Cittc2dpZCAiY29ycnVwdCB0YWciCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIGVycm9yIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgcmVhZCB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyMDUwIHNoYTEtZmlsZS5jOjIwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyMDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnN1cHBvcnRlZCBmaWxlIHR5cGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MjA4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCBvYmplY3QiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MjA5MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiJXMg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC00LXQudGB0YLQstC40YLQtdC70YzQvdGL0Lwg0L7QsdGK0LXQutGC0L7QvCDCqyVzwrsiCisKKyM6IHNoYTEtZmlsZS5jOjIxMTggYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMICVzIgorCisjOiBzaGExLWZpbGUuYzoyMzA4IHNoYTEtZmlsZS5jOjIzNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCBmb3IgJXMgKGV4cGVjdGVkICVzKSIKK21zZ3N0ciAi0L3QtdGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDRhdC10Ygt0YHRg9C80LzRiyAlcyAo0L7QttC40LTQsNC10YLRgdGPICVzKSIKKworIzogc2hhMS1maWxlLmM6MjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyMzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgaGVhZGVyIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjIzNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgY29udGVudHMgb2YgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1uYW1lLmM6NDkwCisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IFNIQTEgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICLRgdC+0LrRgNCw0YnRkdC90L3Ri9C5IFNIQTEg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAgJXMg0L3QtdC+0LTQvdC+0LfQvdCw0YfQtdC9IgorCisjOiBzaGExLW5hbWUuYzo1MDEKK21zZ2lkICJUaGUgY2FuZGlkYXRlcyBhcmU6IgorbXNnc3RyICLQktC+0LfQvNC+0LbQvdC+LCDQstGLINC40LzQtdC70Lgg0LIg0LLQuNC00YM6IgorCisjOiBzaGExLW5hbWUuYzo4MDAKK21zZ2lkICIiCisiR2l0IG5vcm1hbGx5IG5ldmVyIGNyZWF0ZXMgYSByZWYgdGhhdCBlbmRzIHdpdGggNDAgaGV4IGNoYXJhY3RlcnNcbiIKKyJiZWNhdXNlIGl0IHdpbGwgYmUgaWdub3JlZCB3aGVuIHlvdSBqdXN0IHNwZWNpZnkgNDAtaGV4LiBUaGVzZSByZWZzXG4iCisibWF5IGJlIGNyZWF0ZWQgYnkgbWlzdGFrZS4gRm9yIGV4YW1wbGUsXG4iCisiXG4iCisiICBnaXQgY2hlY2tvdXQgLWIgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisid2hlcmUgXCIkYnJcIiBpcyBzb21laG93IGVtcHR5IGFuZCBhIDQwLWhleCByZWYgaXMgY3JlYXRlZC4gUGxlYXNlXG4iCisiZXhhbWluZSB0aGVzZSByZWZzIGFuZCBtYXliZSBkZWxldGUgdGhlbS4gVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5XG4iCisicnVubmluZyBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiCittc2dzdHIgItCe0LHRi9GH0L3QviBHaXQg0L3QtSDRgdC+0LfQtNCw0LXRgiDRgdGB0YvQu9C60LgsINC+0LrQsNC90YfQuNCy0LDRjtGJ0LjQtdGB0Y8g0L3QsCA0MCDRiNC10YHRgtC90LDQtNGG0LDRgtC10YDQuNGH0L3Ri9GFXG7RgdC40LzQstC+0LvQvtCyLCDQv9C+0YLQvtC80YMsINGH0YLQviDQvtC90Lgg0LHRg9C00YPRgiDQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0YzRgdGPLCDQutC+0LPQtNCwINCy0Ysg0L/RgNC+0YHRgtC+XG7Rg9C60LDQttC10YLQtSDRjdGC0L4gNDAt0YHQuNC80LLQvtC70YzQvdC+0LUg0YjQtdGB0YLQvdCw0LTRhtCw0YLQtdGA0LjRh9C90L7QtSDRh9C40YHQu9C+LiDQotCw0LrQuNC1INGB0YHRi9C70LrQuFxu0LzQvtCz0LvQuCDQsdGL0YLRjCDRgdC+0LfQtNCw0L3RiyDQv9C+INC+0YjQuNCx0LrQtS4g0J3QsNC/0YDQuNC80LXRgCwg0YEg0L/QvtC80L7RidGM0Y46XG5cbiAgZ2l0IGNoZWNrb3V0IC1iICRiciAkKGdpdCByZXYtcGFyc2Ug4oCmKVxuXG4sINC10YHQu9C4IMKrJGJywrsg0L7QutCw0LfQsNC70YHRjyDQv9GD0YHRgtGL0LwsINGC0L4g0YHRgdGL0LvQutCwINGBIDQwLdGB0LjQvNCy0L7Qu9GM0L3Ri9C8XG7RiNC10YHRgtC90LDQtNGG0LDRgtC10YDQuNGH0L3Ri9C8INGH0LjRgdC70L7QvCDQsdGD0LTQtdGCINGB0L7Qt9C00LDQvdCwLiDQn9C+0LbQsNC70YPQudGB0YLQsCwg0L/RgNC+0YHQvNC+0YLRgNC40YLQtSDRjdGC0LhcbtGB0YHRi9C70LrQuCDQuCwg0LLQvtC30LzQvtC20L3Qviwg0YPQtNCw0LvQuNGC0LUg0LjRhS4g0JLRiyDQvNC+0LbQtdGC0LUg0L7RgtC60LvRjtGH0LjRgtGMINGN0YLQviDRgdC+0L7QsdGJ0LXQvdC40LVcbtC30LDQv9GD0YHRgtC40LIgwqtnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZcK7IgorCisjOiBzdWJtb2R1bGUuYzoxMTQgc3VibW9kdWxlLmM6MTQzCittc2dpZCAiQ2Fubm90IGNoYW5nZSB1bm1lcmdlZCAuZ2l0bW9kdWxlcywgcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMgZmlyc3QiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LjQt9C80LXQvdC40YLRjCDQvdC1INGB0LvQuNGC0YvQuSAuZ2l0bW9kdWxlcywg0YHQvdCw0YfQsNC70LAg0YDQsNC30YDQtdGI0LjRgtC1INC60L7QvdGE0LvQuNC60YLRiyIKKworIzogc3VibW9kdWxlLmM6MTE4IHN1Ym1vZHVsZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0aW9uIGluIC5naXRtb2R1bGVzIHdoZXJlIHBhdGg9JXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDRgNCw0LfQtNC10Lsg0LIgLmdpdG1vZHVsZXMsINCz0LTQtSDQv9GD0YLRjCDRgNCw0LLQtdC9ICVzIgorCisjOiBzdWJtb2R1bGUuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSAuZ2l0bW9kdWxlcyBlbnRyeSBmb3IgJXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0LfQsNC/0LjRgdGMINCyIC5naXRtb2R1bGVzINC00LvRjyAlcyIKKworIzogc3VibW9kdWxlLmM6MTY1Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90LjRjyDQvtCx0L3QvtCy0LvQtdC90L3QvtCz0L4gLmdpdG1vZHVsZXMiCisKKyM6IHN1Ym1vZHVsZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJpbiB1bnBvcHVsYXRlZCBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi0LIg0L/Rg9GB0YLQvtC8INC/0L7QtNC80L7QtNGD0LvQtSDCqyVzwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRoc3BlYyAnJXMnIGlzIGluIHN1Ym1vZHVsZSAnJS4qcyciCittc2dzdHIgItCh0L/QtdGG0LjRhNC40LrQsNGC0L7RgCDQv9GD0YLQuCDCqyVzwrsg0LIg0L/QvtC00LzQvtC00YPQu9C1IMKrJS4qc8K7IgorCisjOiBzdWJtb2R1bGUuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGVudHJ5ICclcycgKCVzKSBpcyBhICVzLCBub3QgYSBjb21taXQiCittc2dzdHIgItC30LDQv9C40YHRjCDQv9C+0LTQvNC+0LTRg9C70Y8gwqslc8K7ICglcykg0Y/QstC70Y/QtdGC0YHRjyAlcywg0LAg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC60L7QvNC80LjRgtC+0LwiCisKKyM6IHN1Ym1vZHVsZS5jOjExNDcgYnVpbHRpbi9icmFuY2guYzo2NzIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5ODgKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtC/0YDQtdC00LXQu9C40YLRjCBIRUFEINC60LDQuiDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Rg9GOINGB0YHRi9C70LrRgy4iCisKKyM6IHN1Ym1vZHVsZS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFjY2VzcyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxNjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbm90IHJlY29nbml6ZWQgYXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiwqslc8K7INC90LUg0YDQsNGB0L/QvtC30L3QsNC9INC60LDQuiDRgNC10L/QvtC30LjRgtC+0YDQuNC5IGdpdCIKKworIzogc3VibW9kdWxlLmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9GD0YHRgtC40YLRjCDCq2dpdCBzdGF0dXPCuyDQsiDQv9C+0LTQvNC+0LTRg9C70LUgwqslc8K7IgorCisjOiBzdWJtb2R1bGUuYzoxODAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9GD0YHRgtC40YLRjCDCq2dpdCBzdGF0dXPCuyDQsiDQv9C+0LTQvNC+0LTRg9C70LUgwqslc8K7IgorCisjOiBzdWJtb2R1bGUuYzoxODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTkwNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBoYXMgZGlydHkgaW5kZXgiCittc2dzdHIgItC/0L7QtNC80L7QtNGD0LvRjCDCqyVzwrsg0LjQvNC10LXRgiDQuNC30LzQtdC90ZHQvdC90YvQuSDQuNC90LTQtdC60YEiCisKKyM6IHN1Ym1vZHVsZS5jOjE5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgY291bGQgbm90IGJlIHVwZGF0ZWQuIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjIwMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgInJlbG9jYXRlX2dpdGRpciDQtNC70Y8g0L/QvtC00LzQvtC00YPQu9GPIMKrJXPCuyDRgSDRg9C60LDQt9Cw0L3QuNC10Lwg0LHQvtC70LXQtSDQvtC00L3QvtCz0L4g0YDQsNCx0L7Rh9C10LPQviDQtNC10YDQtdCy0LAg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPIgorCisjOiBzdWJtb2R1bGUuYzoyMDIwIHN1Ym1vZHVsZS5jOjIwNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBuYW1lIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/RgNC+0YHQuNGC0Ywg0LjQvNGPINC/0L7QtNC80L7QtNGD0LvRjyDCqyVzwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1pZ3JhdGluZyBnaXQgZGlyZWN0b3J5IG9mICclcyVzJyBmcm9tXG4iCisiJyVzJyB0b1xuIgorIiclcydcbiIKK21zZ3N0ciAi0J/QtdGA0LXQvNC10YnQtdC90LjQtSDQutCw0YLQsNC70L7Qs9CwIGdpdCDQtNC70Y8gwqslcyVzwrsg0LjQt1xuwqslc8K7INCyXG7CqyVzwrtcbiIKKworIzogc3VibW9kdWxlLmM6MjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LXQutGD0YDRgdC40LLQvdC+INC30LDQudGC0Lgg0LIg0L/QvtC00LzQvtC00YPQu9GMIMKrJXPCuyIKKworIzogc3VibW9kdWxlLmM6MjE1NQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBscy1maWxlcyBpbiAuLiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywgc3RhdCBscy1maWxlcyDQsiAuLiIKKworIzogc3VibW9kdWxlLmM6MjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJscy10cmVlIHJldHVybmVkIHVuZXhwZWN0ZWQgcmV0dXJuIGNvZGUgJWQiCittc2dzdHIgImxzLXRyZWUg0LLQtdGA0L3Rg9C7INC90LXQvtC20LjQtNCw0L3QvdGL0Lkg0LrQvtC0ICVkIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHN1c3BpY2lvdXMgc3VibW9kdWxlIG5hbWU6ICVzIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNGD0Y4g0L/QvtC00L7Qt9GA0LjRgtC10LvRjNC90YvQuSDQv9C+0LTQvNC+0LTRg9C70Ywg0YEg0LjQvNC10L3QtdC8OiAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjI5OQorbXNnaWQgIm5lZ2F0aXZlIHZhbHVlcyBub3QgYWxsb3dlZCBmb3Igc3VibW9kdWxlLmZldGNoam9icyIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtGC0YDQuNGG0LDRgtC10LvRjNC90YvQtSDQt9C90LDRh9C10L3QuNGPINC00LvRjyBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6Mzk3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICclcycgd2hpY2ggbWF5IGJlIGludGVycHJldGVkIGFzIGEgY29tbWFuZC1saW5lIG9wdGlvbjogJXMiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUgJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSAuZ2l0bW9kdWxlcyBlbnRyeSAlcyIKK21zZ3N0ciAiINCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCAuZ2l0bW9kdWxlcyDQt9Cw0L/QuNGB0YwgJXMiCisKKyM6IHRyYWlsZXIuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INC/0YDQuCDQt9Cw0L/Rg9GB0LrQtSDQutC+0LzQsNC90LTRiyDQt9Cw0LLQtdGA0YjQuNGC0LXQu9GPIMKrJXPCuyIKKworIzogdHJhaWxlci5jOjQ4NSB0cmFpbGVyLmM6NDkwIHRyYWlsZXIuYzo0OTUgdHJhaWxlci5jOjU0OSB0cmFpbGVyLmM6NTUzCisjOiB0cmFpbGVyLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgJyVzJyBmb3Iga2V5ICclcyciCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDCqyVzwrsg0LTQu9GPINC60LvRjtGH0LAgwqslc8K7IgorCisjOiB0cmFpbGVyLmM6NTM5IHRyYWlsZXIuYzo1NDQgYnVpbHRpbi9yZW1vdGUuYzoyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAi0LHQvtC70YzRiNC1INC+0LTQvdC+0LPQviAlcyIKKworIzogdHJhaWxlci5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIgorbXNnc3RyICLQv9GD0YHRgtCw0Y8g0L/QvtGB0LvQtdC00L3Rj9GPINC70LXQutGB0LXQvNCwINCyINC30LDQstC10YDRiNC40YLQtdC70LUgwqslLipzwrsiCisKKyM6IHRyYWlsZXIuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDQstGF0L7QtNC90L7QuSDRhNCw0LnQuyDCqyVzwrsiCisKKyM6IHRyYWlsZXIuYzo3NTMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiB0cmFpbGVyLmM6MTAxMSB3cmFwcGVyLmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGF0INC00LvRjyAlcyIKKworIzogdHJhaWxlci5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUiCittc2dzdHIgItGE0LDQudC7ICVzINC90LUg0Y/QstC70Y/QtdGC0YHRjyDQvtCx0YvRh9C90YvQvCDRhNCw0LnQu9C+0LwiCisKKyM6IHRyYWlsZXIuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IHdyaXRhYmxlIGJ5IHVzZXIiCittc2dzdHIgItGE0LDQudC7ICVzINC90LUg0LTQvtGB0YLRg9C/0LXQvSDQvdCwINC30LDQv9C40YHRjCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y4iCisKKyM6IHRyYWlsZXIuYzoxMDI3Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LLRgNC10LzQtdC90L3Ri9C5INGE0LDQudC7IgorCisjOiB0cmFpbGVyLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMINCy0YDQtdC80LXQvdC90YvQuSDRhNCw0LnQuyDQsiAlcyIKKworIzogdHJhbnNwb3J0LmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNldCB1cHN0cmVhbSBvZiAnJXMnIHRvICclcycgb2YgJyVzJ1xuIgorbXNnc3RyICLQkdGD0LTQtdGCINGD0YHRgtCw0L3QvtCy0LvQtdC9INCy0YvRiNC10YHRgtC+0Y/RidC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQtNC70Y8gwqslc8K7INC90LAgwqslc8K7INGBIMKrJXPCu1xuIgorCisjOiB0cmFuc3BvcnQuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgYnVuZGxlICclcyciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIKK21zZ3N0ciAi0YLRgNCw0L3RgdC/0L7RgNGCOiDQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0L/QsNGA0LDQvNC10YLRgCDQs9C70YPQsdC40L3RiyDCqyVzwrsiCisKKyM6IHRyYW5zcG9ydC5jOjI1OQorbXNnaWQgInNlZSBwcm90b2NvbC52ZXJzaW9uIGluICdnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGRldGFpbHMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6MjYwCittc2dpZCAic2VydmVyIG9wdGlvbnMgcmVxdWlyZSBwcm90b2NvbCB2ZXJzaW9uIDIgb3IgbGF0ZXIiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6NjI1Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHRyYW5zcG9ydC5jb2xvci4qIGNvbmZpZyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0L7Qv9GG0LjRjiB0cmFuc3BvcnQuY29sb3IuKiIKKworIzogdHJhbnNwb3J0LmM6Njk4Cittc2dpZCAic3VwcG9ydCBmb3IgcHJvdG9jb2wgdjIgbm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBmb3IgY29uZmlnICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjg5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzo5NDUKK21zZ2lkICJnaXQtb3Zlci1yc3luYyBpcyBubyBsb25nZXIgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjEwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgc3VibW9kdWxlIHBhdGhzIGNvbnRhaW4gY2hhbmdlcyB0aGF0IGNhblxuIgorIm5vdCBiZSBmb3VuZCBvbiBhbnkgcmVtb3RlOlxuIgorbXNnc3RyICLQn9C+0LTQvNC+0LTRg9C70Lgg0L/QviDRg9C60LDQt9Cw0L3QvdGL0Lwg0L/Rg9GC0Y/QvCDRgdC+0LTQtdGA0LbQsNGCINC40LfQvNC10L3QtdC90LjRjywg0LrQvtGC0L7RgNGL0LUg0L3QtSDQvdCw0LnQtNC10L3RiyDQvdC4INC90LAg0L7QtNC90L7QvCDQuNC3INCy0L3QtdGI0L3QuNGFINGA0LXQv9C+0LfQuNGC0L7RgNC40LXQsjpcbiIKKworIzogdHJhbnNwb3J0LmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGxlYXNlIHRyeVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisib3IgY2QgdG8gdGhlIHBhdGggYW5kIHVzZVxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyJ0byBwdXNoIHRoZW0gdG8gYSByZW1vdGUuXG4iCisiXG4iCittc2dzdHIgIlxu0J/QvtC/0YDQvtCx0YPQudGC0LUg0LLRi9C/0L7Qu9C90LjRgtGMXG5cblx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG5cbtC40LvQuCDQv9C10YDQtdC50YLQuCDQsiDQutCw0YLQsNC70L7QsyDRgSDQv9C+0LzQvtGJ0YzRjiDQutC+0LzQsNC90LTRiyBjZCDQuCDQstGL0L/QvtC70L3QuNGC0YxcblxuXHRnaXQgcHVzaFxuXG7QtNC70Y8g0LjRhSDQvtGC0L/RgNCw0LLQutC4INC90LAg0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuS5cbiIKKworIzogdHJhbnNwb3J0LmM6MTA1MgorbXNnaWQgIkFib3J0aW5nLiIKK21zZ3N0ciAi0J/RgNC10YDRi9Cy0LDRji4iCisKKyM6IHRyYW5zcG9ydC5jOjExOTMKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBhbGwgbmVlZGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6MTMyNiB0cmFuc3BvcnQtaGVscGVyLmM6NjQ1Cittc2dpZCAib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6MTQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgd2hpbGUgcGFyc2luZyBhbHRlcm5hdGUgcmVmczogJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjUxIHRyYW5zcG9ydC1oZWxwZXIuYzo4MAorbXNnaWQgImZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCByZW1vdGUgaGVscGVyIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNTAgdHJhbnNwb3J0LWhlbHBlci5jOjU1OQorbXNnaWQgImNhbid0IGR1cCBoZWxwZXIgb3V0cHV0IGZkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVua25vd24gbWFuZGF0b3J5IGNhcGFiaWxpdHkgJXM7IHRoaXMgcmVtb3RlIGhlbHBlciBwcm9iYWJseSBuZWVkcyBuZXdlciAiCisidmVyc2lvbiBvZiBHaXQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIwNworbXNnaWQgInRoaXMgcmVtb3RlIGhlbHBlciBzaG91bGQgaW1wbGVtZW50IHJlZnNwZWMgY2FwYWJpbGl0eSIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6Mjc0IHRyYW5zcG9ydC1oZWxwZXIuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdW5leHBlY3RlZGx5IHNhaWQ6ICclcyciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHNvIGxvY2tlZCAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDgxCittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtaW1wb3J0IgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1MDQKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtaW1wb3J0IgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1MzMgdHJhbnNwb3J0LWhlbHBlci5jOjEwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biByZXNwb25zZSB0byBjb25uZWN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjAwCittc2dpZCAic2V0dGluZyByZW1vdGUgc2VydmljZSBwYXRoIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYwMgorbXNnaWQgImludmFsaWQgcmVtb3RlIHNlcnZpY2UgcGF0aCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNvbm5lY3QgdG8gc3Vic2VydmljZSAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIG9rL2Vycm9yLCBoZWxwZXIgc2FpZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyIHJlcG9ydGVkIHVuZXhwZWN0ZWQgc3RhdHVzIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgZHJ5LXJ1biIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQ9aWYtYXNrZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAncHVzaC1vcHRpb24nIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5MzkKK21zZ2lkICJyZW1vdGUtaGVscGVyIGRvZXNuJ3Qgc3VwcG9ydCBwdXNoOyByZWZzcGVjIG5lZWRlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdmb3JjZSciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk5MQorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTk2Cittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWV4cG9ydCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgorIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHJlc3BvbnNlIGluIHJlZiBsaXN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkKCVzKSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGUoJXMpIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTMxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzMzcgdHJhbnNwb3J0LWhlbHBlci5jOjEzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGE6ICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIHRvIHdhaXQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MDAgdHJhbnNwb3J0LWhlbHBlci5jOjE0MDkKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIKK21zZ3N0ciAiIgorCisjOiB0cmVlLXdhbGsuYzozMworbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAi0YHQu9C40YjQutC+0LwgINC60L7RgNC+0YLQutC40Lkg0L7QsdGK0LXQutGCINC00LXRgNC10LLQsCIKKworIzogdHJlZS13YWxrLmM6MzkKK21zZ2lkICJtYWxmb3JtZWQgbW9kZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0YDQtdC20LjQvCDQsiDQt9Cw0L/QuNGB0Lgg0LTQtdGA0LXQstCwIgorCisjOiB0cmVlLXdhbGsuYzo0MworbXNnaWQgImVtcHR5IGZpbGVuYW1lIGluIHRyZWUgZW50cnkiCittc2dzdHIgItC/0YPRgdGC0L7QtSDQuNC80Y8g0YTQsNC50LvQsCDQsiDQt9Cw0L/QuNGB0Lgg0LTQtdGA0LXQstCwIgorCisjOiB0cmVlLXdhbGsuYzoxMTYKK21zZ2lkICJ0b28tc2hvcnQgdHJlZSBmaWxlIgorbXNnc3RyICLRgdC70LjRiNC60L7QvCAg0LrQvtGA0L7RgtC60LjQuSDRhNCw0LnQuyDQtNC10YDQtdCy0LAiCisKKyM6IHVucGFjay10cmVlcy5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgItCS0LDRiNC4INC70L7QutCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YPQutCw0LfQsNC90L3Ri9GFINGE0LDQudC70LDRhSDQsdGD0LTRg9GCINC/0LXRgNC10LfQsNC/0LjRgdCw0L3RiyDQv9GA0Lgg0L/QtdGA0LXQutC70Y7Rh9C10L3QuNC4INC90LAg0YHQvtGB0YLQvtGP0L3QuNC1OlxuJSVz0KHQtNC10LvQsNC50YLQtSDQutC+0LzQvNC40YIg0LjQu9C4INGB0L/RgNGP0YfRjNGC0LUg0LLQsNGI0Lgg0LjQt9C80LXQvdC10L3QuNGPINC/0LXRgNC10LQg0L/QtdGA0LXQutC70Y7Rh9C10L3QuNC10Lwg0LLQtdGC0L7Qui4iCisKKyM6IHVucGFjay10cmVlcy5jOjExMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICLQktCw0YjQuCDQu9C+0LrQsNC70YzQvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCyINGD0LrQsNC30LDQvdC90YvRhSDRhNCw0LnQu9Cw0YUg0LHRg9C00YPRgiDQv9C10YDQtdC30LDQv9C40YHQsNC90Ysg0L/RgNC4INC/0LXRgNC10LrQu9GO0YfQtdC90LjQuCDQvdCwINGB0L7RgdGC0L7Rj9C90LjQtTpcbiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICLQktCw0YjQuCDQu9C+0LrQsNC70YzQvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCyINGD0LrQsNC30LDQvdC90YvRhSDRhNCw0LnQu9Cw0YUg0LHRg9C00YPRgiDQv9C10YDQtdC30LDQv9C40YHQsNC90Ysg0L/RgNC4INGB0LvQuNGP0L3QuNC4OlxuJSVz0KHQtNC10LvQsNC50YLQtSDQutC+0LzQvNC40YIg0LjQu9C4INGB0L/RgNGP0YfRjNGC0LUg0LLQsNGI0Lgg0LjQt9C80LXQvdC10L3QuNGPINC/0LXRgNC10LQg0YHQu9C40Y/QvdC40LXQvCDQstC10YLQvtC6LiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgItCS0LDRiNC4INC70L7QutCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YPQutCw0LfQsNC90L3Ri9GFINGE0LDQudC70LDRhSDQsdGD0LTRg9GCINC/0LXRgNC10LfQsNC/0LjRgdCw0L3RiyDQv9GA0Lgg0YHQu9C40Y/QvdC40Lg6XG4lJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAi0JLQsNGI0Lgg0LvQvtC60LDQu9GM0L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsiDRg9C60LDQt9Cw0L3QvdGL0YUg0YTQsNC50LvQsNGFINCx0YPQtNGD0YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdGLINC/0YDQuCAlczpcbiUlc9Ch0LTQtdC70LDQudGC0LUg0LrQvtC80LzQuNGCINC40LvQuCDRgdC/0YDRj9GH0YzRgtC1INCy0LDRiNC4INC40LfQvNC10L3QtdC90LjRjyDQv9C10YDQtdC0ICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgItCS0LDRiNC4INC70L7QutCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YPQutCw0LfQsNC90L3Ri9GFINGE0LDQudC70LDRhSDQsdGD0LTRg9GCINC/0LXRgNC10LfQsNC/0LjRgdCw0L3RiyDQv9GA0LggJXM6XG4lJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVtOlxuIgorIiVzIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjQtSDRg9C60LDQt9Cw0L3QvdGL0YUg0LrQsNGC0LDQu9C+0LPQvtCyINC/0YDQuNCy0LXQtNC10YIg0Log0L/QvtGC0LXRgNC1INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRhNCw0LnQu9C+0LIg0LIg0L3QuNGFOlxuJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QvdGL0LUg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70Ysg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSDQsdGD0LTRg9GCINGD0LTQsNC70LXQvdGLINC/0YDQuCDQv9C10YDQtdC60LvRjtGH0LXQvdC40Lgg0L3QsCDRgdC+0YHRgtC+0Y/QvdC40LU6XG4lJXPQn9C10YDQtdC80LXRgdGC0LjRgtC1INGN0YLQuCDRhNCw0LnQu9GLINC40LvQuCDRg9C00LDQu9C40YLQtSDQuNGFINC/0LXRgNC10LQg0L/QtdGA0LXQutC70Y7Rh9C10L3QuNC10Lwg0LLQtdGC0L7Qui4iCisKKyM6IHVucGFjay10cmVlcy5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QvdGL0LUg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70Ysg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSDQsdGD0LTRg9GCINGD0LTQsNC70LXQvdGLINC/0YDQuCDQv9C10YDQtdC60LvRjtGH0LXQvdC40Lgg0L3QsCDRgdC+0YHRgtC+0Y/QvdC40LU6XG4lJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgItCj0LrQsNC30LDQvdC90YvQtSDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90Ysg0L/RgNC4INGB0LvQuNGP0L3QuNC4OlxuJSVz0J/QtdGA0LXQvNC10YHRgtC40YLQtSDRjdGC0Lgg0YTQsNC50LvRiyDQuNC70Lgg0YPQtNCw0LvQuNGC0LUg0LjRhSDQv9C10YDQtdC0INC/0LXRgNC10LrQu9GO0YfQtdC90LjQtdC8INCy0LXRgtC+0LouIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAi0KPQutCw0LfQsNC90L3Ri9C1INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUg0LHRg9C00YPRgiDRg9C00LDQu9C10L3RiyDQv9GA0Lgg0YHQu9C40Y/QvdC40Lg6XG4lJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgItCj0LrQsNC30LDQvdC90YvQtSDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90Ysg0L/RgNC4ICVzOlxuJSVz0J/QtdGA0LXQvNC10YHRgtC40YLQtSDRjdGC0Lgg0YTQsNC50LvRiyDQuNC70Lgg0YPQtNCw0LvQuNGC0LUg0LjRhSDQv9C10YDQtdC0ICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgItCj0LrQsNC30LDQvdC90YvQtSDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90Ysg0L/RgNC4ICVzOlxuJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgItCj0LrQsNC30LDQvdC90YvQtSDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1INCx0YPQtNGD0YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdGLINC/0YDQuCDQv9C10YDQtdC60LvRjtGH0LXQvdC40Lgg0L3QsCDRgdC+0YHRgtC+0Y/QvdC40LU6XG4lJXPQn9C10YDQtdC80LXRgdGC0LjRgtC1INGN0YLQuCDRhNCw0LnQu9GLINC40LvQuCDRg9C00LDQu9C40YLQtSDQuNGFINC/0LXRgNC10LQg0L/QtdGA0LXQutC70Y7Rh9C10L3QuNC10Lwg0LLQtdGC0L7Qui4iCisKKyM6IHVucGFjay10cmVlcy5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAi0KPQutCw0LfQsNC90L3Ri9C1INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUg0LHRg9C00YPRgiDQv9C10YDQtdC30LDQv9C40YHQsNC90Ysg0L/RgNC4INC/0LXRgNC10LrQu9GO0YfQtdC90LjQuCDQvdCwINGB0L7RgdGC0L7Rj9C90LjQtTpcbiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgItCj0LrQsNC30LDQvdC90YvQtSDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1INCx0YPQtNGD0YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdGLINC/0YDQuCDRgdC70LjRj9C90LjQuDpcbiUlc9Cf0LXRgNC10LzQtdGB0YLQuNGC0LUg0Y3RgtC4INGE0LDQudC70Ysg0LjQu9C4INGD0LTQsNC70LjRgtC1INC40YUg0L/QtdGA0LXQtCDQv9C10YDQtdC60LvRjtGH0LXQvdC40LXQvCDQstC10YLQvtC6LiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QvdGL0LUg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70Ysg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSDQsdGD0LTRg9GCINC/0LXRgNC10LfQsNC/0LjRgdCw0L3RiyDQv9GA0Lgg0YHQu9C40Y/QvdC40Lg6XG4lJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QvdGL0LUg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70Ysg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSDQsdGD0LTRg9GCINC/0LXRgNC10LfQsNC/0LjRgdCw0L3RiyDQv9GA0LggJXM6XG4lJXPQn9C10YDQtdC80LXRgdGC0LjRgtC1INGN0YLQuCDRhNCw0LnQu9GLINC40LvQuCDRg9C00LDQu9C40YLQtSDQuNGFINC/0LXRgNC10LQgJXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgItCj0LrQsNC30LDQvdC90YvQtSDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1INCx0YPQtNGD0YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdGLINC/0YDQuCAlczpcbiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVudHJ5ICclcycgb3ZlcmxhcHMgd2l0aCAnJXMnLiAgQ2Fubm90IGJpbmQuIgorbXNnc3RyICLQl9Cw0L/QuNGB0Ywgwqslc8K7INGH0LDRgdGC0LjRh9C90L4g0YHQvtCy0L/QsNC00LDQtdGCINGBIMKrJXPCuy4gINCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC30L3QsNGH0LjRgtGMINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtS4iCisKKyM6IHVucGFjay10cmVlcy5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBzcGFyc2UgY2hlY2tvdXQ6IHRoZSBmb2xsb3dpbmcgZW50cmllcyBhcmUgbm90IHVwIHRvIGRhdGU6XG4iCisiJXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDRh9Cw0YHRgtC40YfQvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1OiDRgdC70LXQtNGD0Y7RidC40LUg0Y3Qu9C10LzQtdC90YLRiyDQvdC1INC/0L7RgdC70LXQtNC90LXQuSDQstC10YDRgdC40Lg6XG4lcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgdXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QvdGL0LUg0YTQsNC50LvRiyDQuNC3INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCDQsdGD0LTRg9GCINC/0LXRgNC10LfQsNC/0LjRgdCw0L3RiyDQv9GA0Lgg0L7QsdC90L7QstC70LXQvdC40Lgg0YfQsNGB0YLQuNGH0L3QvtCz0L4g0YHQvtGB0YLQvtGP0L3QuNGPOlxuJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBzcGFyc2UgY2hlY2tvdXQgdXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QvdGL0LUg0YTQsNC50LvRiyDQuNC3INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCDQsdGD0LTRg9GCINGD0LTQsNC70LXQvdGLINC/0YDQuCDQvtCx0L3QvtCy0LvQtdC90LjQuCDRh9Cw0YHRgtC40YfQvdC+0LPQviDRgdC+0YHRgtC+0Y/QvdC40Y86XG4lcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHN1Ym1vZHVsZTpcbiIKKyIlcyIKK21zZ3N0ciAi0J3QtSDRg9C00L7Qu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINC/0L7QtNC80L7QtNGD0LvRjDpcbiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmdcbiIKK21zZ3N0ciAi0J/RgNC10YDRi9Cy0LDRjlxuIgorCisjOiB1bnBhY2stdHJlZXMuYzozMTgKK21zZ2lkICJDaGVja2luZyBvdXQgZmlsZXMiCittc2dzdHIgItCg0LDRgdC/0LDQutC+0LLQutCwINGE0LDQudC70L7QsiIKKworIzogdW5wYWNrLXRyZWVzLmM6MzUwCittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgcGF0aHMgaGF2ZSBjb2xsaWRlZCAoZS5nLiBjYXNlLXNlbnNpdGl2ZSBwYXRoc1xuIgorIm9uIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtKSBhbmQgb25seSBvbmUgZnJvbSB0aGUgc2FtZVxuIgorImNvbGxpZGluZyBncm91cCBpcyBpbiB0aGUgd29ya2luZyB0cmVlOlxuIgorbXNnc3RyICIiCisKKyM6IHVybG1hdGNoLmM6MTYzCittc2dpZCAiaW52YWxpZCBVUkwgc2NoZW1lIG5hbWUgb3IgbWlzc2luZyAnOi8vJyBzdWZmaXgiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90LDRjyDQuNC80Y8gVVJMINGB0YXQtdC80Ysg0LjQu9C4INC/0YDQvtC/0YPRidC10L0g0YHRg9GE0YTQuNC60YEgwqs6Ly/CuyIKKworIzogdXJsbWF0Y2guYzoxODcgdXJsbWF0Y2guYzozNDYgdXJsbWF0Y2guYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlWFggZXNjYXBlIHNlcXVlbmNlIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdCw0Y8g0YPQv9GA0LDQstC70Y/RjtGJ0LDRjyDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0YwgJVhYIgorCisjOiB1cmxtYXRjaC5jOjIxNQorbXNnaWQgIm1pc3NpbmcgaG9zdCBhbmQgc2NoZW1lIGlzIG5vdCAnZmlsZTonIgorbXNnc3RyICLQv9GA0L7Qv9GD0YnQtdC90L4g0LjQvNGPINGB0LXRgNCy0LXRgNCwINC4INGB0YXQtdC80LAg0LTQvtGB0YLRg9C/0LAg0L3QtSDCq2ZpbGU6wrsiCisKKyM6IHVybG1hdGNoLmM6MjMyCittc2dpZCAiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIKK21zZ3N0ciAiVVJMINGB0L4g0YHRhdC10LzQvtC5IMKrZmlsZTrCuyDQvdC1INC80L7QttC10YIg0YHQvtC00LXRgNC20LDRgtGMINC90L7QvNC10YAg0L/QvtGA0YLQsCIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdGL0LUg0YHQuNC80LLQvtC70Ysg0LIg0LjQvNC10L3QuCDRgdC10YDQstC10YDQsCIKKworIzogdXJsbWF0Y2guYzoyOTIgdXJsbWF0Y2guYzozMDMKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0L3QvtC80LXRgCDQv9C+0YDRgtCwIgorCisjOiB1cmxtYXRjaC5jOjM3MQorbXNnaWQgImludmFsaWQgJy4uJyBwYXRoIHNlZ21lbnQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90LDRjyDRh9Cw0YHRgtGMINC/0YPRgtC4IMKrLi7CuyIKKworIzogd29ya3RyZWUuYzoyNTUgYnVpbHRpbi9hbS5jOjIwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywgwqslc8K7IgorCisjOiB3b3JrdHJlZS5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGF0IG1haW4gd29ya2luZyB0cmVlIGlzIG5vdCB0aGUgcmVwb3NpdG9yeSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogd29ya3RyZWUuYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgd29ya2luZyB0cmVlIGxvY2F0aW9uIgorbXNnc3RyICIiCisKKyM6IHdvcmt0cmVlLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIsKrJXPCuyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiB3b3JrdHJlZS5jOjMzMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIC5naXQgZmlsZSwgZXJyb3IgY29kZSAlZCIKK21zZ3N0ciAiIgorCisjOiB3b3JrdHJlZS5jOjMzOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IGJhY2sgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiB3cmFwcGVyLmM6MjIzIHdyYXBwZXIuYzozOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDCqyVzwrsg0LTQu9GPINGH0YLQtdC90LjRjyDQuCDQt9Cw0L/QuNGB0LgiCisKKyM6IHdyYXBwZXIuYzo0MjQgd3JhcHBlci5jOjYyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyciCittc2dzdHIgIsKrJXPCuyDQvdC10LTQvtGB0YLRg9C/0L3QviIKKworIzogd3JhcHBlci5jOjYzMgorbXNnaWQgInVuYWJsZSB0byBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINGC0LXQutGD0YnQuNC5INGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIgorCisjOiB3dC1zdGF0dXMuYzoxNTYKK21zZ2lkICJVbm1lcmdlZCBwYXRoczoiCittc2dzdHIgItCd0LUg0YHQu9C40YLRi9C1INC/0YPRgtC4OiIKKworIzogd3Qtc3RhdHVzLmM6MTgzIHd0LXN0YXR1cy5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzZXQgJXMgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcmVzZXQgJXMgPNGE0LDQudC7PuKApsK7LCDRh9GC0L7QsdGLINGD0LHRgNCw0YLRjCDQuNC3INC40L3QtNC10LrRgdCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTg1IHd0LXN0YXR1cy5jOjIxMgorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBybSAtLWNhY2hlZCA80YTQsNC50Ls+4oCmwrssINGH0YLQvtCx0Ysg0YPQsdGA0LDRgtGMINC40Lcg0LjQvdC00LXQutGB0LApIgorCisjOiB3dC1zdGF0dXMuYzoxODkKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgYWRkIDzRhNCw0LnQuz7igKbCuywg0YfRgtC+0LHRiyDQv9C+0LzQtdGC0LjRgtGMINGA0LDQt9GA0LXRiNC10L3QuNC1INC60L7QvdGE0LvQuNC60YLQsCkiCisKKyM6IHd0LXN0YXR1cy5jOjE5MSB3dC1zdGF0dXMuYzoxOTUKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgYWRkL3JtIDzRhNCw0LnQuz7igKbCuywg0YfRgtC+0LHRiyDQv9C+0LzQtdGC0LjRgtGMINCy0YvQsdGA0LDQvdC90L7QtSDRgNCw0LfRgNC10YjQtdC90LjQtSDQutC+0L3RhNC70LjQutGC0LApIgorCisjOiB3dC1zdGF0dXMuYzoxOTMKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBybSA80YTQsNC50Ls+4oCmwrssINGH0YLQvtCx0Ysg0L/QvtC80LXRgtC40YLRjCDRgNCw0LfRgNC10YjQtdC90LjQtSDQutC+0L3RhNC70LjQutGC0LApIgorCisjOiB3dC1zdGF0dXMuYzoyMDQgd3Qtc3RhdHVzLmM6MTA2NAorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPLCDQutC+0YLQvtGA0YvQtSDQsdGD0LTRg9GCINCy0LrQu9GO0YfQtdC90Ysg0LIg0LrQvtC80LzQuNGCOiIKKworIzogd3Qtc3RhdHVzLmM6MjIyIHd0LXN0YXR1cy5jOjEwNzMKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjywg0LrQvtGC0L7RgNGL0LUg0L3QtSDQsiDQuNC90LTQtdC60YHQtSDQtNC70Y8g0LrQvtC80LzQuNGC0LA6IgorCisjOiB3dC1zdGF0dXMuYzoyMjYKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBhZGQgPNGE0LDQudC7PuKApsK7LCDRh9GC0L7QsdGLINC00L7QsdCw0LLQuNGC0Ywg0YTQsNC50Lsg0LIg0LjQvdC00LXQutGBKSIKKworIzogd3Qtc3RhdHVzLmM6MjI4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgYWRkL3JtIDzRhNCw0LnQuz7igKbCuywg0YfRgtC+0LHRiyDQtNC+0LHQsNCy0LjRgtGMINC40LvQuCDRg9C00LDQu9C40YLRjCDRhNCw0LnQuyDQuNC3INC40L3QtNC10LrRgdCwKSIKKworIzogd3Qtc3RhdHVzLmM6MjI5Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyAiCisiZGlyZWN0b3J5KSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBjaGVja291dCAtLSA80YTQsNC50Ls+4oCmwrssINGH0YLQvtCx0Ysg0L7RgtC80LXQvdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y9cbiAgINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUpIgorCisjOiB3dC1zdGF0dXMuYzoyMzEKK21zZ2lkICIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiCittc2dzdHIgIiAgKNGB0LTQtdC70LDQudGC0LUg0LrQvtC80LzQuNGCINC40LvQuCDQvtGC0LzQtdC90LjRgtC1INC40LfQvNC10L3QtdC90LjRjyDQsiDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNC+0Lwg0LjQu9C4INC40LfQvNC10L3QtdC90L3QvtC8INGB0L7QtNC10YDQttC40LzQvtC8INCyINC/0L7QtNC80L7QtNGD0LvRj9GFKSIKKworIzogd3Qtc3RhdHVzLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0ICVzIDzRhNCw0LnQuz7igKbCuywg0YfRgtC+0LHRiyDQtNC+0LHQsNCy0LjRgtGMINCyINGC0L4sINGH0YLQviDQsdGD0LTQtdGCINCy0LrQu9GO0YfQtdC90L4g0LIg0LrQvtC80LzQuNGCKSIKKworIzogd3Qtc3RhdHVzLmM6MjU4Cittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAi0L7QsdCwINGD0LTQsNC70LXQvdGLOiIKKworIzogd3Qtc3RhdHVzLmM6MjYwCittc2dpZCAiYWRkZWQgYnkgdXM6IgorbXNnc3RyICLQtNC+0LHQsNCy0LvQtdC90L4g0L3QsNC80Lg6IgorCisjOiB3dC1zdGF0dXMuYzoyNjIKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICLRg9C00LDQu9C10L3QviDQuNC80Lg6IgorCisjOiB3dC1zdGF0dXMuYzoyNjQKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAi0LTQvtCx0LDQstC70LXQvdC+INC40LzQuDoiCisKKyM6IHd0LXN0YXR1cy5jOjI2NgorbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICLRg9C00LDQu9C10L3QviDQvdCw0LzQuDoiCisKKyM6IHd0LXN0YXR1cy5jOjI2OAorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICLQvtCx0LAg0LTQvtCx0LDQstC70LXQvdGLOiIKKworIzogd3Qtc3RhdHVzLmM6MjcwCittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgItC+0LHQsCDQuNC30LzQtdC90LXQvdGLOiIKKworIzogd3Qtc3RhdHVzLmM6MjgwCittc2dpZCAibmV3IGZpbGU6IgorbXNnc3RyICLQvdC+0LLRi9C5INGE0LDQudC7OiIKKworIzogd3Qtc3RhdHVzLmM6MjgyCittc2dpZCAiY29waWVkOiIKK21zZ3N0ciAi0YHQutC+0L/QuNGA0L7QstCw0L3QvjoiCisKKyM6IHd0LXN0YXR1cy5jOjI4NAorbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICLRg9C00LDQu9C10L3QvjoiCisKKyM6IHd0LXN0YXR1cy5jOjI4NgorbXNnaWQgIm1vZGlmaWVkOiIKK21zZ3N0ciAi0LjQt9C80LXQvdC10L3QvjoiCisKKyM6IHd0LXN0YXR1cy5jOjI4OAorbXNnaWQgInJlbmFtZWQ6IgorbXNnc3RyICLQv9C10YDQtdC40LzQtdC90L7QstCw0L3QvjoiCisKKyM6IHd0LXN0YXR1cy5jOjI5MAorbXNnaWQgInR5cGVjaGFuZ2U6IgorbXNnc3RyICLQuNC30LzQtdC90LXQvSDRgtC40L86IgorCisjOiB3dC1zdGF0dXMuYzoyOTIKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90L46IgorCisjOiB3dC1zdGF0dXMuYzoyOTQKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgItC90LUg0YHQu9C40YLRi9C1OiIKKworIzogd3Qtc3RhdHVzLmM6Mzc0Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAi0L3QvtCy0YvQtSDQutC+0LzQvNC40YLRiywgIgorCisjOiB3dC1zdGF0dXMuYzozNzYKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgItC40LfQvNC10L3QtdC90L4g0YHQvtC00LXRgNC20LjQvNC+0LUsICIKKworIzogd3Qtc3RhdHVzLmM6Mzc4Cittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAi0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzQvtC1INGB0L7QtNC10YDQttC40LzQvtC1LCAiCisKKyM6IHd0LXN0YXR1cy5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cnkiCittc2dpZF9wbHVyYWwgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyaWVzIgorbXNnc3RyWzBdICLQoyDQstCw0YEg0YHQtdC50YfQsNGBINGB0L/RgNGP0YLQsNC90LAgJWQg0LfQsNC/0LjRgdGMIgorbXNnc3RyWzFdICLQoyDQstCw0YEg0YHQtdC50YfQsNGBINGB0L/RgNGP0YLQsNC90YsgJWQg0LfQsNC/0LjRgdC4IgorbXNnc3RyWzJdICLQoyDQstCw0YEg0YHQtdC50YfQsNGBINGB0L/RgNGP0YLQsNC90L4gJWQg0LfQsNC/0LjRgdC10LkiCittc2dzdHJbM10gItCjINCy0LDRgSDRgdC10LnRh9Cw0YEg0YHQv9GA0Y/RgtCw0L3RiyAlZCDQt9Cw0L/QuNGB0LgiCisKKyM6IHd0LXN0YXR1cy5jOjkyOAorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC90YvQtSwg0L3QviDQvdC1INC+0LHQvdC+0LLQu9C10L3QvdGL0LUg0L/QvtC00LzQvtC00YPQu9C4OiIKKworIzogd3Qtc3RhdHVzLmM6OTMwCittc2dpZCAiU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPINCyINC/0L7QtNC80L7QtNGD0LvRj9GFLCDQutC+0YLQvtGA0YvQtSDQsdGD0LTRg9GCINC30LDQutC+0LzQvNC40YfQtdC90Ys6IgorCisjOiB3dC1zdGF0dXMuYzoxMDEyCittc2dpZCAiIgorIkRvIG5vdCBtb2RpZnkgb3IgcmVtb3ZlIHRoZSBsaW5lIGFib3ZlLlxuIgorIkV2ZXJ5dGhpbmcgYmVsb3cgaXQgd2lsbCBiZSBpZ25vcmVkLiIKK21zZ3N0ciAi0J3QtSDQuNC30LzQtdC90Y/QudGC0LUg0LjQu9C4INGD0LTQsNC70Y/QudGC0LUg0YHRgtGA0L7QutGDINCy0YvRiNC1INGN0YLQvtC5Llxu0JLRgdGRLCDRh9GC0L4g0L3QuNC20LUg4oCUINCx0YPQtNC10YIg0L/RgNC+0LjQs9C90L7RgNC40YDQvtCy0LDQvdC+LiIKKworIzogd3Qtc3RhdHVzLmM6MTExOQorbXNnaWQgIllvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLiIKK21zZ3N0ciAi0KMg0LLQsNGBINC10YHRgtGMINC90LUg0YHQu9C40YLRi9C1INC/0YPRgtC4LiIKKworIzogd3Qtc3RhdHVzLmM6MTEyMgorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiAgKNGA0LDQt9GA0LXRiNC40YLQtSDQutC+0L3RhNC70LjQutGC0YssINC30LDRgtC10Lwg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IGNvbW1pdMK7KSIKKworIzogd3Qtc3RhdHVzLmM6MTEyNAorbXNnaWQgIiAgKHVzZSBcImdpdCBtZXJnZSAtLWFib3J0XCIgdG8gYWJvcnQgdGhlIG1lcmdlKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBtZXJnZSAtLWFib3J0wrssINGH0YLQvtCx0Ysg0L7RgdGC0LDQvdC+0LLQuNGC0Ywg0L7Qv9C10YDQsNGG0LjRjiDRgdC70LjRj9C90LjRjykiCisKKyM6IHd0LXN0YXR1cy5jOjExMjgKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgorbXNnc3RyICLQktGB0LUg0LrQvtC90YTQu9C40LrRgtGLINC40YHQv9GA0LDQstC70LXQvdGLLCDQvdC+INCy0Ysg0LLRgdC1INC10YnQtSDQsiDQv9GA0L7RhtC10YHRgdC1INGB0LvQuNGP0L3QuNGPLiIKKworIzogd3Qtc3RhdHVzLmM6MTEzMQorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgY29tbWl0wrssINGH0YLQvtCx0Ysg0LfQsNCy0LXRgNGI0LjRgtGMINGB0LvQuNGP0L3QuNC1KSIKKworIzogd3Qtc3RhdHVzLmM6MTE0MAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAi0JLRiyDQsiDQv9GA0L7RhtC10YHRgdC1INGB0LXRgdGB0LjQuCBhbS4iCisKKyM6IHd0LXN0YXR1cy5jOjExNDMKK21zZ2lkICJUaGUgY3VycmVudCBwYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgItCi0LXQutGD0YnQuNC5INC/0LDRgtGHINC/0YPRgdGC0L7QuS4iCisKKyM6IHd0LXN0YXR1cy5jOjExNDcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjRgNCw0LfRgNC10YjQuNGC0LUg0LrQvtC90YTQu9C40LrRgtGLLCDQt9Cw0YLQtdC8INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCBhbSAtLWNvbnRpbnVlwrspIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ5Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgYW0gLS1za2lwwrssINGH0YLQvtCx0Ysg0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0Y3RgtC+0YIg0L/QsNGC0YcpIgorCisjOiB3dC1zdGF0dXMuYzoxMTUxCittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IGFtIC0tYWJvcnTCuywg0YfRgtC+0LHRiyDQstC+0YHRgdGC0LDQvdC+0LLQuNGC0Ywg0L7RgNC40LPQuNC90LDQu9GM0L3Rg9GOINCy0LXRgtC60YMpIgorCisjOiB3dC1zdGF0dXMuYzoxMjg0Cittc2dpZCAiZ2l0LXJlYmFzZS10b2RvIGlzIG1pc3NpbmcuIgorbXNnc3RyICJnaXQtcmViYXNlLXRvZG8g0L7RgtGB0YPRgtGB0YLQstGD0LXRgi4iCisKKyM6IHd0LXN0YXR1cy5jOjEyODYKK21zZ2lkICJObyBjb21tYW5kcyBkb25lLiIKK21zZ3N0ciAi0JrQvtC80LDQvdC00Ysg0L3QtSDQstGL0L/QvtC70L3QtdC90YsuIgorCisjOiB3dC1zdGF0dXMuYzoxMjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhc3QgY29tbWFuZCBkb25lICglZCBjb21tYW5kIGRvbmUpOiIKK21zZ2lkX3BsdXJhbCAiTGFzdCBjb21tYW5kcyBkb25lICglZCBjb21tYW5kcyBkb25lKToiCittc2dzdHJbMF0gItCf0L7RgdC70LXQtNC90Y/RjyDQutC+0LzQsNC90LTQsCDQstGL0L/QvtC70L3QtdC90LAgKCVkINC60L7QvNCw0L3QtNCwINCy0YvQv9C+0LvQvdC10L3QsCk6IgorbXNnc3RyWzFdICLQn9C+0YHQu9C10LTQvdGP0Y8g0LrQvtC80LDQvdC00LAg0LLRi9C/0L7Qu9C90LXQvdCwICglZCDQutC+0LzQsNC90LTRiyDQstGL0L/QvtC70L3QtdC90L4pOiIKK21zZ3N0clsyXSAi0J/QvtGB0LvQtdC00L3Rj9GPINC60L7QvNCw0L3QtNCwINCy0YvQv9C+0LvQvdC10L3QsCAoJWQg0LrQvtC80LDQvdC0INCy0YvQv9C+0LvQvdC10L3Qvik6IgorbXNnc3RyWzNdICLQn9C+0YHQu9C10LTQvdGP0Y8g0LrQvtC80LDQvdC00LAg0LLRi9C/0L7Qu9C90LXQvdCwICglZCDQutC+0LzQsNC90LQg0LLRi9C/0L7Qu9C90LXQvdC+KToiCisKKyM6IHd0LXN0YXR1cy5jOjEzMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAoc2VlIG1vcmUgaW4gZmlsZSAlcykiCittc2dzdHIgIiAgKNGB0LzQvtGC0YDQuNGC0LUg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L4g0LIg0YTQsNC50LvQtSAlcykiCisKKyM6IHd0LXN0YXR1cy5jOjEzMDUKK21zZ2lkICJObyBjb21tYW5kcyByZW1haW5pbmcuIgorbXNnc3RyICLQmtC+0LzQsNC90LQg0LHQvtC70YzRiNC1INC90LUg0L7RgdGC0LDQu9C+0YHRjC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV4dCBjb21tYW5kIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZCk6IgorbXNnaWRfcGx1cmFsICJOZXh0IGNvbW1hbmRzIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZHMpOiIKK21zZ3N0clswXSAi0KHQu9C10LTRg9GO0YnQsNGPINC60L7QvNCw0L3QtNCwINC00LvRjyDQstGL0L/QvtC70L3QtdC90LjRjyAoJWQg0LrQvtC80LDQvdC00LAg0L7RgdGC0LDQu9Cw0YHRjCk6IgorbXNnc3RyWzFdICLQodC70LXQtNGD0Y7RidCw0Y8g0LrQvtC80LDQvdC00LAg0LTQu9GPINCy0YvQv9C+0LvQvdC10L3QuNGPICglZCDQutC+0LzQsNC90LTRiyDQvtGB0YLQsNC70L7RgdGMKToiCittc2dzdHJbMl0gItCh0LvQtdC00YPRjtGJ0LDRjyDQutC+0LzQsNC90LTQsCDQtNC70Y8g0LLRi9C/0L7Qu9C90LXQvdC40Y8gKCVkINC60L7QvNCw0L3QtCDQvtGB0YLQsNC70L7RgdGMKToiCittc2dzdHJbM10gItCh0LvQtdC00YPRjtGJ0LDRjyDQutC+0LzQsNC90LTQsCDQtNC70Y8g0LLRi9C/0L7Qu9C90LXQvdC40Y8gKCVkINC60L7QvNCw0L3QtCDQvtGB0YLQsNC70L7RgdGMKToiCisKKyM6IHd0LXN0YXR1cy5jOjEzMTYKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgdG8gdmlldyBhbmQgZWRpdCkiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcmViYXNlIC0tZWRpdC10b2RvwrssINGH0YLQvtCx0Ysg0L/RgNC+0YHQvNC+0YLRgNC10YLRjCDQuCDQuNC30LzQtdC90LjRgtGMKSIKKworIzogd3Qtc3RhdHVzLmM6MTMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAi0JLRiyDRgdC10LnRh9Cw0YEg0L/QtdGA0LXQvNC10YnQsNC10YLQtSDQstC10YLQutGDIMKrJXPCuyDQvdCw0LQgwqslc8K7LiIKKworIzogd3Qtc3RhdHVzLmM6MTMzMworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nLiIKK21zZ3N0ciAi0JLRiyDRgdC10LnRh9Cw0YEg0L/QtdGA0LXQvNC10YnQsNC10YLQtSDQstC10YLQutGDLiIKKworIzogd3Qtc3RhdHVzLmM6MTM0NgorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjRgNCw0LfRgNC10YjQuNGC0LUg0LrQvtC90YTQu9C40LrRgtGLLCDQt9Cw0YLQtdC8INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCByZWJhc2UgLS1jb250aW51ZcK7KSIKKworIzogd3Qtc3RhdHVzLmM6MTM0OAorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCByZWJhc2UgLS1za2lwwrssINGH0YLQvtCx0Ysg0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0Y3RgtC+0YIg0L/QsNGC0YcpIgorCisjOiB3dC1zdGF0dXMuYzoxMzUwCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IHJlYmFzZSAtLWFib3J0wrssINGH0YLQvtCx0Ysg0L/QtdGA0LXQudGC0Lgg0L3QsCDQvtGA0LjQs9C40L3QsNC70YzQvdGD0Y4g0LLQtdGC0LrRgykiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTcKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKNCy0YHQtSDQutC+0L3RhNC70LjQutGC0Ysg0YDQsNC30YDQtdGI0LXQvdGLOiDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgcmViYXNlIC0tY29udGludWXCuykiCisKKyM6IHd0LXN0YXR1cy5jOjEzNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAi0JLRiyDRgdC10LnRh9Cw0YEg0YDQsNC30LTQtdC70Y/QtdGC0LUg0LrQvtC80LzQuNGCINC/0YDQuCDQv9C10YDQtdC80LXRidC10L3QuNC4INCy0LXRgtC60LggIMKrJXPCuyDQvdCw0LQgwqslc8K7LiIKKworIzogd3Qtc3RhdHVzLmM6MTM2NgorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICLQktGLINGB0LXQudGH0LDRgSDRgNCw0LfQtNC10LvRj9C10YLQtSDQutC+0LzQvNC40YIg0L/RgNC4INC/0LXRgNC10LzQtdGJ0LXQvdC40Lgg0LLQtdGC0LrQuC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNjkKK21zZ2lkICIgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiKNCa0LDQuiDRgtC+0LvRjNC60L4g0LLQsNGIINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzINCx0YPQtNC10YIg0YfQuNGB0YLRi9C5LCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgcmViYXNlIC0tY29udGludWXCuykiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAi0JLRiyDRgdC10LnRh9Cw0YEg0YDQtdC00LDQutGC0LjRgNGD0LXRgtC1INC60L7QvNC80LjRgiDQv9GA0Lgg0L/QtdGA0LXQvNC10YnQtdC90LjQuCDQstC10YLQutC4ICDCqyVzwrsg0L3QsNC0IMKrJXPCuy4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNzgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgItCS0Ysg0YHQtdC50YfQsNGBINGA0LXQtNCw0LrRgtC40YDRg9C10YLQtSDQutC+0LzQvNC40YIg0L/RgNC4INC/0LXRgNC10LzQtdGJ0LXQvdC40Lgg0LLQtdGC0LrQuC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzODEKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IGNvbW1pdCAtLWFtZW5kwrssINGH0YLQvtCx0Ysg0LjRgdC/0YDQsNCy0LjRgtGMINGC0LXQutGD0YnQuNC5INC60L7QvNC80LjRgikiCisKKyM6IHd0LXN0YXR1cy5jOjEzODMKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCByZWJhc2UgLS1jb250aW51ZcK7LCDQutC+0LPQtNCwINCx0YPQtNC10YLQtSDQtNC+0LLQvtC70YzQvdGLINC40LfQvNC10L3QtdC90LjRj9C80LgpIgorCisjOiB3dC1zdGF0dXMuYzoxMzk0Cittc2dpZCAiQ2hlcnJ5LXBpY2sgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgItCS0Ysg0LrQvtC/0LjRgNGD0LXRgtC1INC60L7QvNC80LjRgiAlcy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDQKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo0YDQsNC30YDQtdGI0LjRgtC1INC60L7QvdGE0LvQuNC60YLRiywg0LfQsNGC0LXQvCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZcK7KSIKKworIzogd3Qtc3RhdHVzLmM6MTQwNworbXNnaWQgIiAgKHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0MTAKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo0LLRgdC1INC60L7QvdGE0LvQuNC60YLRiyDRgNCw0LfRgNC10YjQtdC90Ys6INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCBjaGVycnktcGljayAtLWNvbnRpbnVlwrspIgorCisjOiB3dC1zdGF0dXMuYzoxNDEyCittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydMK7LCDRh9GC0L7QsdGLINC+0YLQvNC10L3QuNGC0Ywg0LrQvtC/0LjRgNC+0LLQsNC90LjRjyDQutC+0LzQvNC40YLQsCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0MjIKK21zZ2lkICJSZXZlcnQgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJldmVydGluZyBjb21taXQgJXMuIgorbXNnc3RyICLQktGLINGB0LXQudGH0LDRgSDQvtCx0YDQsNGJ0LDQtdGC0LUg0LjQt9C80LXQvdC10L3QuNGPINC60L7QvNC80LjRgtCwICVzLiIKKworIzogd3Qtc3RhdHVzLmM6MTQzMQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo0YDQsNC30YDQtdGI0LjRgtC1INC60L7QvdGE0LvQuNC60YLRiywg0LfQsNGC0LXQvCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgcmV2ZXJ0IC0tY29udGludWXCuykiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzQKK21zZ2lkICIgIChydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIiB0byBjb250aW51ZSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQzNworbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo0LLRgdC1INC60L7QvdGE0LvQuNC60YLRiyDRgNCw0LfRgNC10YjQtdC90Ys6INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCByZXZlcnQgLS1jb250aW51ZcK7KSIKKworIzogd3Qtc3RhdHVzLmM6MTQzOQorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcmV2ZXJ0IC0tYWJvcnTCuywg0YfRgtC+0LHRiyDQvtGC0LzQtdC90LjRgtGMINC+0L/QtdGA0LDRhtC40Y4g0L7QsdGA0LDRidC10L3QuNGPINC40LfQvNC10L3QtdC90LjQuSDQutC+0LzQvNC40YLQsCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLCBzdGFydGVkIGZyb20gYnJhbmNoICclcycuIgorbXNnc3RyICLQktGLINGB0LXQudGH0LDRgSDQsiDQv9GA0L7RhtC10YHRgdC1INC00LLQvtC40YfQvdC+0LPQviDQv9C+0LjRgdC60LAsINC90LDRh9Cw0YLQvtCz0L4g0YEg0LLQtdGC0LrQuCDCqyVzwrsuIgorCisjOiB3dC1zdGF0dXMuYzoxNDUzCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLiIKK21zZ3N0ciAi0JLRiyDRgdC10LnRh9Cw0YEg0LIg0L/RgNC+0YbQtdGB0YHQtSDQtNCy0L7QuNGH0L3QvtCz0L4g0L/QvtC40YHQutCwLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ1NgorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBiaXNlY3QgcmVzZXTCuywg0YfRgtC+0LHRiyDQstC10YDQvdGD0YLRjNGB0Y8g0L3QsCDQuNGB0YXQvtC00L3Rg9GOINCy0LXRgtC60YMpIgorCisjOiB3dC1zdGF0dXMuYzoxNjY1Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAi0J3QsCDQstC10YLQutC1ICIKKworIzogd3Qtc3RhdHVzLmM6MTY3MgorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QvtC1INC/0LXRgNC10LzQtdGJ0LXQvdC40LUg0LIg0L/RgNC+0YbQtdGB0YHQtTsg0L3QsNC0ICIKKworIzogd3Qtc3RhdHVzLmM6MTY3NAorbXNnaWQgInJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgItC/0LXRgNC10LzQtdGJ0LXQvdC40LUg0LIg0L/RgNC+0YbQtdGB0YHQtTsg0L3QsNC0ICIKKworIzogd3Qtc3RhdHVzLmM6MTY3OQorbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICJIRUFEINC+0YLQtNC10LvRkdC9INC90LAgIgorCisjOiB3dC1zdGF0dXMuYzoxNjgxCittc2dpZCAiSEVBRCBkZXRhY2hlZCBmcm9tICIKK21zZ3N0ciAiSEVBRCDQvtGC0LTQtdC70ZHQvSDQvdCw0YfQuNC90LDRjyDRgSAiCisKKyM6IHd0LXN0YXR1cy5jOjE2ODQKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICLQodC10LnRh9Cw0YEg0L3QuCDQvdCwINC+0LTQvdC+0Lkg0LjQtyDQstC10YLQvtC6IgorCisjOiB3dC1zdGF0dXMuYzoxNzAxCittc2dpZCAiSW5pdGlhbCBjb21taXQiCittc2dzdHIgItCd0LDRh9Cw0LvRjNC90YvQuSDQutC+0LzQvNC40YIiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDIKK21zZ2lkICJObyBjb21taXRzIHlldCIKK21zZ3N0ciAi0JXRidC1INC90LXRgiDQutC+0LzQvNC40YLQvtCyIgorCisjOiB3dC1zdGF0dXMuYzoxNzE2Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLQndC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyIKKworIzogd3Qtc3RhdHVzLmM6MTcxOAorbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgItCY0LPQvdC+0YDQuNGA0YPQtdC80YvQtSDRhNCw0LnQu9GLIgorCisjOiB3dC1zdGF0dXMuYzoxNzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW50cmFja2VkIGZpbGVzLiAnc3RhdHVzIC11bm8nXG4iCisibWF5IHNwZWVkIGl0IHVwLCBidXQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZm9yZ2V0IHRvIGFkZFxuIgorIm5ldyBmaWxlcyB5b3Vyc2VsZiAoc2VlICdnaXQgaGVscCBzdGF0dXMnKS4iCittc2dzdHIgIiUuMmYg0YHQtdC60YPQvdC00Ysg0LfQsNC90Y/QuyDQstGL0LLQvtC0INGB0L/QuNGB0LrQsCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YTQsNC50LvQvtCyLiDCq3N0YXR1cyAtdW5vwrsg0LLQvtC30LzQvtC20L3QviDQvNC+0LbQtdGCINGD0YHQutC+0YDQuNGC0Ywg0Y3RgtC+LCDQvdC+INCx0YPQtNGM0YLQtSDQstC90LjQvNCw0YLQtdC70YzQvdGLLCDQuCDQvdC1INC30LDQsdGD0LTRjNGC0LUg0LTQvtCx0LDQstC40YLRjCDQvdC+0LLRi9C1INGE0LDQudC70Ysg0LLRgNGD0YfQvdGD0Y4gKNGB0LzQvtGC0YDQuNGC0LUgwqtnaXQgaGVscCBzdGF0dXPCuyDQtNC70Y8g0L/QvtC00YDQvtCx0L3QvtGB0YLQtdC5KS4iCisKKyM6IHd0LXN0YXR1cy5jOjE3MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAi0J3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70Ysg0L3QtSDQv9C+0LrQsNC30LDQvdGLJXMiCisKKyM6IHd0LXN0YXR1cy5jOjE3MzAKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQvtC/0YbQuNGOIMKrLXXCuywg0YfRgtC+0LHRiyDQv9C+0LrQsNC30LDRgtGMINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLKSIKKworIzogd3Qtc3RhdHVzLmM6MTczNgorbXNnaWQgIk5vIGNoYW5nZXMiCittc2dzdHIgItCd0LXRgiDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IHd0LXN0YXR1cy5jOjE3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgItC90LXRgiDQuNC30LzQtdC90LXQvdC40Lkg0LTQvtCx0LDQstC70LXQvdC90YvRhSDQtNC70Y8g0LrQvtC80LzQuNGC0LBcbijQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IGFkZMK7INC4L9C40LvQuCDCq2dpdCBjb21taXQgLWHCuylcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc0NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdFxuIgorbXNnc3RyICLQvdC10YIg0LjQt9C80LXQvdC10L3QuNC5INC00L7QsdCw0LLQu9C10L3QvdGL0YUg0LTQu9GPINC60L7QvNC80LjRgtCwXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvICIKKyJ0cmFjaylcbiIKK21zZ3N0ciAi0L3QuNGH0LXQs9C+INC90LUg0LTQvtCx0LDQstC70LXQvdC+INCyINC60L7QvNC80LjRgiwg0L3QviDQtdGB0YLRjCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBhZGTCuywg0YfRgtC+0LHRiyDQvtGC0YHQu9C10LbQuNCy0LDRgtGMINC40YUpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50XG4iCittc2dzdHIgItC90LjRh9C10LPQviDQvdC1INC00L7QsdCw0LLQu9C10L3QviDQsiDQutC+0LzQvNC40YIsINC90L4g0LXRgdGC0Ywg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70YtcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc1MworIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAi0L3QtdGH0LXQs9C+INC60L7QvNC80LjRgtC40YLRjCAo0YHQvtC30LTQsNC50YLQtS/RgdC60L7Qv9C40YDRg9C50YLQtSDRhNCw0LnQu9GLLCDQt9Cw0YLQtdC8INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCBhZGTCuywg0YfRgtC+0LHRiyDQvtGC0YHQu9C10LbQuNCy0LDRgtGMINC40YUpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NTYgd3Qtc3RhdHVzLmM6MTc2MQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICLQvdC10YfQtdCz0L4g0LrQvtC80LzQuNGC0LjRgtGMXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAi0L3QtdGH0LXQs9C+INC60L7QvNC80LjRgtC40YLRjCAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQvtC/0YbQuNGOIMKrLXXCuywg0YfRgtC+0LHRiyDQv9C+0LrQsNC30LDRgtGMINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW5cbiIKK21zZ3N0ciAi0L3QtdGH0LXQs9C+INC60L7QvNC80LjRgtC40YLRjCwg0L3QtdGCINC40LfQvNC10L3QtdC90LjQuSDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1XG4iCisKKyM6IHd0LXN0YXR1cy5jOjE4NzYKK21zZ2lkICJObyBjb21taXRzIHlldCBvbiAiCittc2dzdHIgItCV0YnQtSDQvdC10YIg0LrQvtC80LzQuNGC0L7QsiDQsiIKKworIzogd3Qtc3RhdHVzLmM6MTg4MAorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUQgKNC90LXRgiDQstC10YLQutC4KSIKKworIzogd3Qtc3RhdHVzLmM6MTkxMQorbXNnaWQgImRpZmZlcmVudCIKK21zZ3N0ciAi0L7RgtC70LjRh9Cw0LXRgtGB0Y8iCisKKyM6IHd0LXN0YXR1cy5jOjE5MTMgd3Qtc3RhdHVzLmM6MTkyMQorbXNnaWQgImJlaGluZCAiCittc2dzdHIgItC/0L7Qt9Cw0LTQuCIKKworIzogd3Qtc3RhdHVzLmM6MTkxNiB3dC1zdGF0dXMuYzoxOTE5Cittc2dpZCAiYWhlYWQgIgorbXNnc3RyICLQstC/0LXRgNC10LTQuCAiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgYWN0aW9uIGlzIGUuZy4gInB1bGwgd2l0aCByZWJhc2UiCisjOiB3dC1zdGF0dXMuYzoyNDQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMICVzOiDQoyDQstCw0YEg0LXRgdGC0Ywg0L3QtdC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8uIgorCisjOiB3dC1zdGF0dXMuYzoyNDQ5Cittc2dpZCAiYWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLQuiDRgtC+0LzRgyDQttC1LCDQsiDQstCw0YjQtdC8INC40L3QtNC10LrRgdC1INC10YHRgtGMINC90LXQt9Cw0LrQvtC80LzQuNGH0LXQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8uIgorCisjOiB3dC1zdGF0dXMuYzoyNDUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0YwgJXM6INCSINCy0LDRiNC10Lwg0LjQvdC00LXQutGB0LUg0LXRgdGC0Ywg0L3QtdC30LDQutC+0LzQvNC40YfQtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjy4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjUKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbPNC+0L/RhtC40Lg+XSBbLS1dIDzRgdC/0LXRhtC40YTQuNC60LDRgtC+0YAt0L/Rg9GC0Lg+4oCmIgorCisjOiBidWlsdGluL2FkZC5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgItC90LXQvtC20LjQtNCw0L3QvdGL0Lkg0YHRgtCw0YLRg9GBINGD0YLQuNC70LjRgtGLINGB0YDQsNCy0L3QtdC90LjRjyAlYyIKKworIzogYnVpbHRpbi9hZGQuYzo4OSBidWlsdGluL2NvbW1pdC5jOjI4NQorbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INC+0LHQvdC+0LLQu9C10L3QuNC4INGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9hZGQuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9hZGQuYzoxNzQKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAi0J3QtdC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0L/QvtGB0LvQtSDQvtCx0L3QvtCy0LvQtdC90LjRjyDQuNC90LTQtdC60YHQsDoiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjM0IGJ1aWx0aW4vcmV2LXBhcnNlLmM6ODk2Cittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmcuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMIMKrJXPCuyDQtNC70Y8g0LfQsNC/0LjRgdC4LiIKKworIzogYnVpbHRpbi9hZGQuYzoyNDkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQv9Cw0YLRhyIKKworIzogYnVpbHRpbi9hZGQuYzoyNTIKK21zZ2lkICJlZGl0aW5nIHBhdGNoIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Lgg0L/QsNGC0YfQsCIKKworIzogYnVpbHRpbi9hZGQuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywgc3RhdCDQtNC70Y8gwqslc8K7IgorCisjOiBidWlsdGluL2FkZC5jOjI1NworbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAi0J/Rg9GB0YLQvtC5INC/0LDRgtGHLiDQntC/0LXRgNCw0YbQuNGPINC/0YDQtdGA0LLQsNC90LAuIgorCisjOiBidWlsdGluL2FkZC5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0LjQvNC10L3QuNGC0Ywgwqslc8K7IgorCisjOiBidWlsdGluL2FkZC5jOjI3MAorbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAi0KHQu9C10LTRg9GO0YnQuNC1INC/0YPRgtC4INC40LPQvdC+0YDQuNGA0YPRjtGC0YHRjyDQvtC00L3QuNC8INC40Lcg0LLQsNGI0LjRhSDRhNCw0LnQu9C+0LIgLmdpdGlnbm9yZTpcbiIKKworIzogYnVpbHRpbi9hZGQuYzoyOTAgYnVpbHRpbi9jbGVhbi5jOjkwOCBidWlsdGluL2ZldGNoLmM6MTM3IGJ1aWx0aW4vbXYuYzoxMjQKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTYgYnVpbHRpbi9wdWxsLmM6MjIxIGJ1aWx0aW4vcHVzaC5jOjU2MAorIzogYnVpbHRpbi9yZW1vdGUuYzoxMzQ1IGJ1aWx0aW4vcm0uYzoyNDEgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjUKK21zZ2lkICJkcnkgcnVuIgorbXNnc3RyICLQv9GA0L7QsdC90YvQuSDQt9Cw0L/Rg9GB0LoiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjkzCittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAi0LjQvdGC0LXRgNCw0LrRgtC40LLQvdGL0Lkg0LLRi9Cx0L7RgCIKKworIzogYnVpbHRpbi9hZGQuYzoyOTQgYnVpbHRpbi9jaGVja291dC5jOjEzNzkgYnVpbHRpbi9yZXNldC5jOjMwNgorbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICLQuNC90YLQtdGA0LDQutGC0LjQstC90YvQuSDQstGL0LHQvtGAINCx0LvQvtC60L7QsiIKKworIzogYnVpbHRpbi9hZGQuYzoyOTUKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgItC+0YLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgtC10LrRg9GJ0LjQuSDRhNCw0LnQuyDRgdC/0LjRgdC60LAg0LjQt9C80LXQvdC10L3QuNC5INC4INC/0YDQuNC80LXQvdC40YLRjCDQtdCz0L4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk2Cittc2dpZCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0LTQvtCx0LDQstC70LXQvdC40LUg0LjQs9C90L7RgNC40YDRg9C10LzRi9GFINC40L3QsNGH0LUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2FkZC5jOjI5NworbXNnaWQgInVwZGF0ZSB0cmFja2VkIGZpbGVzIgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMINC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70YsiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk4Cittc2dpZCAicmVub3JtYWxpemUgRU9MIG9mIHRyYWNrZWQgZmlsZXMgKGltcGxpZXMgLXUpIgorbXNnc3RyICLQv9C10YDQtdC90L7RgNC80LDQu9C40LfQuNGA0L7QstCw0YLRjCDQutC+0L3RhtGLINGB0YLRgNC+0LogKEVPTCkg0L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YTQsNC50LvQvtCyICjQv9C+0LTRgNCw0LfRg9C80LXQstCw0LXRgiAtdSkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk5Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCB0aGUgcGF0aCB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICLQt9Cw0L/QuNGB0LDRgtGMINGC0L7Qu9GM0LrQviDRhNCw0LrRgiwg0YfRgtC+INC/0YPRgtGMINCx0YPQtNC10YIg0LTQvtCx0LDQstC70LXQvSDQv9C+0LfQttC1IgorCisjOiBidWlsdGluL2FkZC5jOjMwMAorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0LjQtyDQstGB0LXRhSDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDQuCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2FkZC5jOjMwMworbXNnaWQgImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0L/Rg9GC0Lgg0YPQtNCw0LvQtdC90L3Ri9C1INC40Lcg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwICjRgtC+0LbQtSwg0YfRgtC+INC4IC0tbm8tYWxsKSIKKworIzogYnVpbHRpbi9hZGQuYzozMDUKK21zZ2lkICJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgItC90LUg0LTQvtCx0LDQstC70Y/RgtGMLCDRgtC+0LvRjNC60L4g0L7QsdC90L7QstC40YLRjCDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzA2Cittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GB0LrQsNGC0Ywg0YTQsNC50LvRiywg0LrQvtGC0L7RgNGL0LUg0L3QtSDQvNC+0LPRg9GCINCx0YvRgtGMINC00L7QsdCw0LLQu9C10L3RiyDQuNC3LdC30LAg0L7RiNC40LHQvtC6IgorCisjOiBidWlsdGluL2FkZC5jOjMwNworbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAi0YPQtNC+0YHRgtC+0LLQtdGA0LjRgtGM0YHRjywg0YfRgtC+INC00LDQttC1INC90LXQtNC+0YHRgtCw0Y7RidC40LUg0YTQsNC50LvRiyDQsdGD0LTRg9GCINC/0YDQvtC40LPQvdC+0YDQuNGA0L7QstCw0L3RiyDQv9GA0LggINC/0YDQvtCx0L3QvtC8INC30LDQv9GD0YHQutC1IgorCisjOiBidWlsdGluL2FkZC5jOjMwOSBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDEKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAi0L/QtdGA0LXQvtC/0YDQtdC00LXQu9C40YLRjCDQsdC40YIg0LLRi9C/0L7Qu9C90LXQvdC40Y8g0L3QsCDRg9C60LDQt9Cw0L3QvdGL0YUg0YTQsNC50LvQsNGFIgorCisjOiBidWlsdGluL2FkZC5jOjMxMQorbXNnaWQgIndhcm4gd2hlbiBhZGRpbmcgYW4gZW1iZWRkZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0L/RgNC10LTRg9C/0YDQtdC20LTQsNGC0Ywg0L/RgNC4INC00L7QsdCw0LLQu9C10L3QuNC4INCy0YHRgtGA0L7QtdC90L3QvtCz0L4gZ2l0INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIklmIHlvdSBhZGRlZCB0aGlzIHBhdGggYnkgbWlzdGFrZSwgeW91IGNhbiByZW1vdmUgaXQgZnJvbSB0aGVcbiIKKyJpbmRleCB3aXRoOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2VlIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICLQktGLINC00L7QsdCw0LLQuNC70Lgg0LTRgNGD0LPQvtC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkgZ2l0INCy0L3Rg9GC0YDQuCDRgtC10LrRg9GJ0LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y9cbtCa0LvQvtC90Ysg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPINC90LUg0LHRg9C00YPRgiDRgdC+0LTQtdGA0LbQsNGC0Ywg0LLQvdGD0YLRgNC10L3QvdC40LlcbtGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0Lgg0L3QtSDQsdGD0LTRg9GCINC30L3QsNGC0Ywg0LrQsNC6INC10LPQviDQv9C+0LvRg9GH0LjRgtGMLlxu0JXRgdC70Lgg0LLRiyDRhdC+0YLQtdC70Lgg0LTQvtCx0LDQstC40YLRjCDQv9C+0LTQvNC+0LTRg9C70YwsINGC0L4g0LfQsNC/0YPRgdGC0LjRgtC1OlxuXG5cdGdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG5cbtCV0YHQu9C4INCx0Ysg0LTQvtCx0LDQstC40LvQuCDRjdGC0L7RgiDQv9GD0YLRjCDQv9C+INC+0YjQuNCx0LrQtSwg0YLQviDQstGLINC80L7QttC10YLQtSDRg9C00LDQu9C40YLRjCDQtdCz0L5cbtC40Lcg0LjQvdC00LXQutGB0LAg0YEg0L/QvtC80L7RidGM0Y46XG5cblx0Z2l0IHJtIC0tY2FjaGVkICVzXG5cbtCU0LvRjyDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4INGB0LzQvtGC0YDQuNGC0LUgwqtnaXQgaGVscCBzdWJtb2R1bGXCuy4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZyBlbWJlZGRlZCBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgItC00L7QsdCw0LLQu9C10L3QuNC1INCy0YHRgtGA0L7QtdC90L3QvtCz0L4gZ2l0INGA0LXQv9C+0LfQuNGC0L7RgNC40Y86ICVzIgorCisjOiBidWlsdGluL2FkZC5jOjM3MgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9GD0LnRgtC1IC1mLCDQtdGB0LvQuCDQstGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQtNC+0LHQsNCy0LjRgtGMINC40YUuXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mzc5Cittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAi0L7RiNC40LHQutCwINC/0YDQuCDQtNC+0LHQsNCy0LvQtdC90LjQuCDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDE5Cittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi1BINC4IC11INC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBidWlsdGluL2FkZC5jOjQyNgorbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgItCe0L/RhtC40Y8gLS1pZ25vcmUtbWlzc2luZyDQvNC+0LbQtdGCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0YLQvtC70YzQutC+INCy0LzQtdGB0YLQtSDRgSAtLWRyeS1ydW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tY2htb2QgcGFyYW0gJyVzJyBtdXN0IGJlIGVpdGhlciAteCBvciAreCIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRgCAtLWNobW9kIMKrJXPCuyDQtNC+0LvQttC10L0g0LHRi9GC0YwgLXgg0LjQu9C4ICt4IgorCisjOiBidWlsdGluL2FkZC5jOjQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAi0J3QuNGH0LXQs9C+INC90LUg0YPQutCw0LfQsNC90L4sINC90LjRh9C10LPQviDQvdC1INC00L7QsdCw0LLQu9C10L3Qvi5cbiIKKworIzogYnVpbHRpbi9hZGQuYzo0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCittc2dzdHIgItCS0L7Qt9C80L7QttC90L4sINCy0Ysg0LjQvNC10LvQuCDQsiDQstC40LTRgyDCq2dpdCBhZGQgLsK7P1xuIgorCisjOiBidWlsdGluL2FtLmM6MzQ4Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGF1dGhvciBzY3JpcHQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINGB0YbQtdC90LDRgNC40Lkg0LDQstGC0L7RgNGB0YLQstCwIgorCisjOiBidWlsdGluL2FtLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgIsKrJXPCuyDQsdGL0Lsg0YPQtNCw0LvQtdC9INC/0LXRgNC10YXQstCw0YLRh9C40LrQvtC8IGFwcGx5cGF0Y2gtbXNnIgorCisjOiBidWlsdGluL2FtLmM6NDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINGB0YLRgNC+0LrQsCDQstCy0L7QtNCwOiDCqyVzwrsuIgorCisjOiBidWlsdGluL2FtLmM6NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0LfQsNC80LXRgtC60YMg0LjQtyDCqyVzwrsg0LIgwqslc8K7IgorCisjOiBidWlsdGluL2FtLmM6NTM4Cittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0LLRi9C/0L7Qu9C90LXQvdC40LggZnNlZWsiCisKKyM6IGJ1aWx0aW4vYW0uYzo3MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhdGNoICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC/0LDRgtGHIMKrJXPCuyIKKworIzogYnVpbHRpbi9hbS5jOjc5MQorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICLQotC+0LvRjNC60L4g0YHQtdGA0LjRjyDQv9Cw0YLRh9C10LkgU3RHSVQg0LzQvtC20LXRgiDQsdGL0YLRjCDQv9GA0LjQvNC10L3QtdC90LAg0LfQsCDRgNCw0LciCisKKyM6IGJ1aWx0aW4vYW0uYzo4MzkKK21zZ2lkICJpbnZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAi0L3QtdC00L7Qv9GD0YHRgtC40LzQsNGPINC80LXRgtC60LAg0LTQsNGC0Ysv0LLRgNC10LzQtdC90LgiCisKKyM6IGJ1aWx0aW4vYW0uYzo4NDQgYnVpbHRpbi9hbS5jOjg1NgorbXNnaWQgImludmFsaWQgRGF0ZSBsaW5lIgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNCw0Y8g0YHRgtGA0L7QutCwINC00LDRgtGLIgorCisjOiBidWlsdGluL2FtLmM6ODUxCittc2dpZCAiaW52YWxpZCB0aW1lem9uZSBvZmZzZXQiCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80L7QtSDRgdC80LXRidC10L3QuNC1INGH0LDRgdC+0LLQvtCz0L4g0L/QvtGP0YHQsCIKKworIzogYnVpbHRpbi9hbS5jOjk0NAorbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAi0KHQsdC+0Lkg0L7Qv9GA0LXQtNC10LvQtdC90LjRjyDRhNC+0YDQvNCw0YLQsCDQv9Cw0YLRh9CwLiIKKworIzogYnVpbHRpbi9hbS5jOjk0OSBidWlsdGluL2Nsb25lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LrQsNGC0LDQu9C+0LMgwqslc8K7IgorCisjOiBidWlsdGluL2FtLmM6OTU0Cittc2dpZCAiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C00LXQu9C40YLRjCDQv9Cw0YLRh9C4INC90LAg0YfQsNGB0YLQuC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg0IGJ1aWx0aW4vY29tbWl0LmM6MzcxCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGluZGV4IGZpbGUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIlcyAtLWNvbnRpbnVlXCIuIgorbXNnc3RyICLQmtC+0LPQtNCwINCy0Ysg0YPRgdGC0YDQsNC90LjRgtC1INGN0YLRgyDQv9GA0L7QsdC70LXQvNGDLCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqslcyAtLWNvbnRpbnVlwrsuIgorCisjOiBidWlsdGluL2FtLmM6MTA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJXMgLS1za2lwXCIgaW5zdGVhZC4iCittc2dzdHIgItCV0YHQu9C4INCy0Ysg0YXQvtGC0LjRgtC1INC/0YDQvtC/0YPRgdGC0LjRgtGMINGN0YLQvtGCINC/0LDRgtGHLCDRgtC+INC30LDQv9GD0YHRgtC40YLQtSDCqyVzIC0tc2tpcMK7LiIKKworIzogYnVpbHRpbi9hbS5jOjExMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIlcyAtLWFib3J0XCIuIgorbXNnc3RyICLQp9GC0L7QsdGLINCy0LXRgNC90YPRgtGM0YHRjyDQvdCwINC/0YDQtdC00YvQtNGD0YnRg9GOINCy0LXRgtC60YMg0Lgg0L7RgdGC0LDQvdC+0LLQuNGC0Ywg0L/RgNC40LzQtdC90LXQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5LCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqslcyAtLWFib3J0wrsuIgorCisjOiBidWlsdGluL2FtLmM6MTE4MworbXNnaWQgIiIKKyJQYXRjaCBzZW50IHdpdGggZm9ybWF0PWZsb3dlZDsgc3BhY2UgYXQgdGhlIGVuZCBvZiBsaW5lcyBtaWdodCBiZSBsb3N0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTIxMQorbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAi0J/QsNGC0Ycg0L/Rg9GB0YLQvtC5LiIKKworIzogYnVpbHRpbi9hbS5jOjEyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlLipzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdCw0Y8g0YHRgtGA0L7QutCwINC40LTQtdC90YLQuNGE0LjQutCw0YbQuNC4OiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQutC+0LzQvNC40YIgJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDk1Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAi0JIg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGCINC00LLQvtC40YfQvdGL0LUg0L7QsdGK0LXQutGC0YssINC90LXQvtCx0YXQvtC00LjQvNGL0LUg0LTQu9GPINC+0YLQutCw0YLQsCDQuiDRgtGA0LXRhdGF0L7QtNC+0LLQvtC80YMg0YHQu9C40Y/QvdC40Y4uIgorCisjOiBidWlsdGluL2FtLmM6MTQ5NworbXNnaWQgIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iCittc2dzdHIgItCY0YHQv9C+0LvRjNC30YPRjiDQuNC90LTQtdC60YEg0LTQu9GPINGA0LXQutC+0L3RgdGC0YDRg9C60YbQuNC4INCx0LDQt9C+0LLQvtCz0L4g0LTQtdGA0LXQstCw4oCmIgorCisjOiBidWlsdGluL2FtLmM6MTUxNgorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgItCS0Ysg0LLRgNGD0YfQvdGD0Y4g0LjQt9C80LXQvdGP0LvQuCDQv9Cw0YLRhz9cbtCe0L0g0L3QtSDQvdCw0LrQu9Cw0LTRi9Cy0LDQtdGC0YHRjyDQsdC10Lcg0L7RiNC40LHQvtC6INC90LAg0LTQstC+0LjRh9C90YvQtSDQvtCx0YrQtdC60YLRiywg0LfQsNC/0LjRgdCw0L3QvdGL0LUg0LIg0LXQs9C+INC30LDQs9C+0LvQvtCy0LrQtS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTIyCittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICLQntGC0LrQsNGCINC6INC/0YDQuNC80LXQvdC10L3QuNGOINC40LfQvNC10L3QtdC90LjQuSDQuiDQsdCw0LfQvtCy0L7QvNGDINC60L7QvNC80LjRgtGDINGBINC/0L7QvNC+0YnRjNGOINGC0YDQtdGF0YXQvtC00L7QstC+0LPQviDRgdC70LjRj9C90LjRj+KApiIKKworIzogYnVpbHRpbi9hbS5jOjE1NDgKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0LvQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogYnVpbHRpbi9hbS5jOjE1ODAKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICLQv9GA0LjQvNC10L3QtdC90LjQtSDQuiDQv9GD0YHRgtC+0Lkg0LjRgdGC0L7RgNC40LgiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjI3IGJ1aWx0aW4vYW0uYzoxNjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN1bWU6ICVzIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC/0YDQvtC00L7Qu9C20L3QuNGC0Yw6ICVzINC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIgIgorCisjOiBidWlsdGluL2FtLmM6MTY0NworbXNnaWQgImNhbm5vdCBiZSBpbnRlcmFjdGl2ZSB3aXRob3V0IHN0ZGluIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+0LUg0L/QvtCy0LXQtNC10L3QuNC1LCDQsdC10Lcgc3RkaW4g0L/QvtC00LrQu9GO0YfQtdC90L3QvtCz0L4g0Log0YLQtdGA0LzQuNC90LDQu9GDLiIKKworIzogYnVpbHRpbi9hbS5jOjE2NTIKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgItCi0LXQu9C+INC60L7QvNC80LjRgtCwOiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisjLiBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyMuIGlucHV0IGF0IHRoaXMgcG9pbnQuCisjOiBidWlsdGluL2FtLmM6MTY2MgorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgItCf0YDQuNC80LXQvdC40YLRjD8gW3ldIC0g0LTQsC9bbl0gLSDQvdC10YIvW2VdIC0g0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YwvW3ZdIC0g0L/RgNC+0YHQvNC+0YLRgNC10YLRjCDQv9Cw0YLRhy9bYV0gLSDQv9GA0LjQvNC10L3QuNGC0Ywg0LLRgdGROiAiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAi0JjQvdC00LXQutGBINC40LfQvNC10L3RkdC9OiDQvdC10LvRjNC30Y8g0L/RgNC40LzQtdC90Y/RgtGMINC/0LDRgtGH0LggKNC40LfQvNC10L3QtdC90L46ICVzKSIKKworIzogYnVpbHRpbi9hbS5jOjE3NTIgYnVpbHRpbi9hbS5jOjE4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICUuKnMiCittc2dzdHIgItCf0YDQuNC80LXQvdC10L3QuNC1OiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc2OQorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAi0J3QtdGCINC40LfQvNC10L3QtdC90LjQuSDigJQg0J/QsNGC0Ycg0YPQttC1INC/0YDQuNC80LXQvdC10L0uIgorCisjOiBidWlsdGluL2FtLmM6MTc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQuNC80LXQvdC10L3QuNGPINC40LfQvNC10L3QtdC90LjQuSDQvdCwICVzICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzc5Cittc2dpZCAiVXNlICdnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2gnIHRvIHNlZSB0aGUgZmFpbGVkIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODIzCittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICLQndC10YIg0LjQt9C80LXQvdC10L3QuNC5IOKAlCDQstC+0LfQvNC+0LbQvdC+LCDQstGLINC30LDQsdGL0LvQuCDQstGL0LfQstCw0YLRjCDCq2dpdCBhZGTCuz9cbtCV0YHQu9C4INC90LjRh9C10LPQviDQvdC1INC+0YHRgtCw0LvQvtGB0Ywg0LTQu9GPINC40L3QtNC10LrRgdCw0YbQuNC4LCDRgtC+LCDRgdC60L7RgNC10LUg0LLRgdC10LPQviwg0YfRgtC+LdGC0L4g0LTRgNGD0LPQvtC1INGD0LbQtSDRgdC00LXQu9Cw0LvQviDRgtC1INC20LUg0LjQt9C80LXQvdC10L3QuNGPOyDQstC+0LfQvNC+0LbQvdC+LCDQstCw0Lwg0YHQu9C10LTRg9C10YIg0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0Y3RgtC+0YIg0L/QsNGC0YcuIgorCisjOiBidWlsdGluL2FtLmM6MTgzMAorbXNnaWQgIiIKKyJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4LlxuIgorIllvdSBzaG91bGQgJ2dpdCBhZGQnIGVhY2ggZmlsZSB3aXRoIHJlc29sdmVkIGNvbmZsaWN0cyB0byBtYXJrIHRoZW0gYXMgc3VjaC5cbiIKKyJZb3UgbWlnaHQgcnVuIGBnaXQgcm1gIG9uIGEgZmlsZSB0byBhY2NlcHQgXCJkZWxldGVkIGJ5IHRoZW1cIiBmb3IgaXQuIgorbXNnc3RyICLQoyDQstCw0YEg0LXRgdGC0Ywg0L3QtSDRgdC70LjRgtGL0LUg0L/Rg9GC0Lgg0LIg0LjQvdC00LXQutGB0LUuXG7QktGLINC00L7Qu9C20L3RiyDQstGL0L/QvtC70L3QuNGC0YwgwqtnaXQgYWRkwrsg0LTQu9GPINC60LDQttC00L7Qs9C+INGE0LDQudC70LAg0YEg0YDQsNC30YDQtdGI0LXQvdC90YvQvNC4INC60L7QvdGE0LvQuNC60YLQsNC80LgsINGH0YLQvtCx0Ysg0L/QvtC80LXRgtC40YLRjCDQuNGFINGC0LDQutC+0LLRi9C80LguXG7QktGLINC80L7QttC10YLQtSDQt9Cw0L/Rg9GB0YLQuNGC0YwgwqtnaXQgcm3CuyDRgSDQuNC80LXQvdC10Lwg0YTQsNC50LvQsCwg0YfRgtC+0LHRiyDQv9C+0LzQtdGC0LjRgtGMINC10LPQviDQutCw0LogwqvRg9C00LDQu9C10L3QviDQuNC80LjCuy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTM3IGJ1aWx0aW4vYW0uYzoxOTQxIGJ1aWx0aW4vYW0uYzoxOTUzIGJ1aWx0aW4vcmVzZXQuYzozMjkKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0L7QsdGK0LXQutGCIMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTg5Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YfQuNGB0YLQuNGC0Ywg0LjQvdC00LXQutGBIgorCisjOiBidWlsdGluL2FtLmM6MjAzMworbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICLQn9C+0YXQvtC20LUsINGH0YLQviDQstGLINC/0LXRgNC10LzQtdGB0YLQuNC70LggSEVBRCDRgSDQvNC+0LzQtdC90YLQsCDQv9C+0YHQu9C10LTQvdC10Lkg0L7RiNC40LHQutC4INCy0YvQv9C+0LvQvdC10L3QuNGPIMKrYW3Cuy5cbtCf0LXRgNC10LzQvtGC0LrQsCDQvdCwIE9SSUdfSEVBRCDQvdC1INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIC0tcGF0Y2gtZm9ybWF0OiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LTQu9GPIC0tcGF0Y2gtZm9ybWF0OiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjIxNjYKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXSIKK21zZ3N0ciAiZ2l0IGFtIFs80L7Qv9GG0LjQuD5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KeKApl0iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTY3Cittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCittc2dzdHIgImdpdCBhbSBbPNC+0L/RhtC40Lg+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorCisjOiBidWlsdGluL2FtLmM6MjE3MworbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICLQt9Cw0L/Rg9GB0YLQuNGC0Ywg0LIg0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+0Lwg0YDQtdC20LjQvNC1IgorCisjOiBidWlsdGluL2FtLmM6MjE3NQorbXNnaWQgImhpc3RvcmljYWwgb3B0aW9uIC0tIG5vLW9wIgorbXNnc3RyICLQuNGB0YLQvtGA0LjRh9C10YHQutCw0Y8g0L7Qv9GG0LjRjyDigJQg0L3QuNGH0LXQs9C+INC90LUg0LTQtdC70LDQtdGCIgorCisjOiBidWlsdGluL2FtLmM6MjE3NworbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0L7RgtC60LDRgtC40YLRjNGB0Y8g0Log0YLRgNC10YXRhdC+0LTQvtCy0L7QvNGDINGB0LvQuNGP0L3QuNGOLCDQtdGB0LvQuCDQvdGD0LbQvdC+IgorCisjOiBidWlsdGluL2FtLmM6MjE3OCBidWlsdGluL2luaXQtZGIuYzo0OTQgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1OAorIzogYnVpbHRpbi9yZXBhY2suYzozMDYgYnVpbHRpbi9zdGFzaC5jOjgwNQorbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICLRgtC40YXQuNC5INGA0LXQttC40LwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTgwCittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDRgdGC0YDQvtC60YMgU2lnbmVkLW9mZi1ieSDQuiDRgdC+0L7QsdGJ0LXQvdC40Y4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTgzCittc2dpZCAicmVjb2RlIGludG8gdXRmOCAoZGVmYXVsdCkiCittc2dzdHIgItC/0LXRgNC10LrQvtC00LjRgNC+0LLQsNGC0Ywg0LIgdXRmOCAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4pIgorCisjOiBidWlsdGluL2FtLmM6MjE4NQorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgItC/0LXRgNC10LTQsNGC0Ywg0YTQu9Cw0LMgLWsg0LIgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE4NworbXNnaWQgInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgItC/0LXRgNC10LTQsNGC0Ywg0YTQu9Cw0LMgLWIg0LIgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE4OQorbXNnaWQgInBhc3MgLW0gZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgItC/0LXRgNC10LTQsNGC0Ywg0YTQu9Cw0LMgLW0g0LIgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE5MQorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgItC/0LXRgNC10LTQsNGC0Ywg0YTQu9Cw0LMgLS1rZWVwLWNyINCyIGdpdC1tYWlsc3BsaXQg0LTQu9GPINGE0L7RgNC80LDRgtCwIG1ib3giCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTk0Cittc2dpZCAiZG8gbm90IHBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudCBvZiBhbS5rZWVwY3IiCittc2dzdHIgItC90LUg0L/QtdGA0LXQtNCw0LLQsNGC0YwgLS1rZWVwLWNyINGE0LvQsNCzINCyIGdpdC1tYWlsc3BsaXQg0LLQvdC1INC30LDQstC40YHQuNC80L7RgdGC0Lgg0L7RgiBhbS5rZWVwY3IiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTk3Cittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICLQvtCx0YDQtdC30LDRgtGMINCy0YHQtSDQtNC+INGB0YLRgNC+0LrQuCDQvtCx0YDQtdC30LrQuCIKKworIzogYnVpbHRpbi9hbS5jOjIxOTkgYnVpbHRpbi9hbS5jOjIyMDIgYnVpbHRpbi9hbS5jOjIyMDUgYnVpbHRpbi9hbS5jOjIyMDgKKyM6IGJ1aWx0aW4vYW0uYzoyMjExIGJ1aWx0aW4vYW0uYzoyMjE0IGJ1aWx0aW4vYW0uYzoyMjE3IGJ1aWx0aW4vYW0uYzoyMjIwCisjOiBidWlsdGluL2FtLmM6MjIyNgorbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgItC/0LXRgNC10LTQsNGC0Ywg0LXQs9C+INCyIGdpdC1hcHBseSIKKworIzogYnVpbHRpbi9hbS5jOjIyMTYgYnVpbHRpbi9jb21taXQuYzoxMzQ4IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MQorIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc0IGJ1aWx0aW4vZ3JlcC5jOjg3OSBidWlsdGluL21lcmdlLmM6MjQ3CisjOiBidWlsdGluL3B1bGwuYzoxNTggYnVpbHRpbi9wdWxsLmM6MjE3IGJ1aWx0aW4vcmViYXNlLmM6MTQxMgorIzogYnVpbHRpbi9yZXBhY2suYzozMTcgYnVpbHRpbi9yZXBhY2suYzozMjEgYnVpbHRpbi9yZXBhY2suYzozMjMKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTEgYnVpbHRpbi9zaG93LXJlZi5jOjE3MiBidWlsdGluL3RhZy5jOjM5NworIzogcGFyc2Utb3B0aW9ucy5oOjE0MSBwYXJzZS1vcHRpb25zLmg6MTYyIHBhcnNlLW9wdGlvbnMuaDozMTEKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2FtLmM6MjIyMiBidWlsdGluL2JyYW5jaC5jOjY1MyBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTQgYnVpbHRpbi90YWcuYzo0MzEgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzkKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgItGE0L7RgNC80LDRgiIKKworIzogYnVpbHRpbi9hbS5jOjIyMjMKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgItGE0L7RgNC80LDRgiwg0LIg0LrQvtGC0L7RgNC+0Lwg0L3QsNGF0L7QtNGP0YLRgdGPINC/0LDRgtGH0LgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI5Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICLQv9C10YDQtdC+0L/RgNC10LTQtdC70LjRgtGMINGB0L7QvtCx0YnQtdC90LjQtSDQvtCxINC+0YjQuNCx0LrQtSwg0LXRgdC70Lgg0L3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LvQvtC20LjRgtGMINC40LfQvNC10L3QtdC90LjRjyIKKworIzogYnVpbHRpbi9hbS5jOjIyMzEKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICLQv9GA0L7QtNC+0LvQttC40YLRjCDQv9GA0LjQvNC10L3QtdC90LjQtSDQuNC30LzQtdC90LXQvdC40Lkg0L/QvtGB0LvQtSDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC40LvQuNC60YLQsCIKKworIzogYnVpbHRpbi9hbS5jOjIyMzQKK21zZ2lkICJzeW5vbnltcyBmb3IgLS1jb250aW51ZSIKK21zZ3N0ciAi0YHQuNC90L7QvdC40Lwg0LTQu9GPIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM3Cittc2dpZCAic2tpcCB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0YLQtdC60YPRidC40Lkg0L/QsNGC0YciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQwCittc2dpZCAicmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLiIKK21zZ3N0ciAi0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC+0YDQuNCz0LjQvdCw0LvRjNC90YPRjiDQstC10YLQutGDINC4INC+0YLQvNC10L3QuNGC0Ywg0L7Qv9C10YDQsNGG0LjRjiDQv9GA0LjQvNC10L3QtdC90LjRjyDQuNC30LzQtdC90LXQvdC40LkuIgorCisjOiBidWlsdGluL2FtLmM6MjI0MworbXNnaWQgImFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24gYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyNDYKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBiZWluZyBhcHBsaWVkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI1MAorbXNnaWQgImxpZSBhYm91dCBjb21taXR0ZXIgZGF0ZSIKK21zZ3N0ciAi0YHQvtCy0YDQsNGC0Ywg0L4g0LTQsNGC0LUg0LrQvtC80LzQuNGC0LXRgNCwIgorCisjOiBidWlsdGluL2FtLmM6MjI1MgorbXNnaWQgInVzZSBjdXJyZW50IHRpbWVzdGFtcCBmb3IgYXV0aG9yIGRhdGUiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC10LrRg9GJ0LXQtSDQstGA0LXQvNGPINC60LDQuiDQstGA0LXQvNGPINCw0LLRgtC+0YDRgdGC0LLQsCIKKworIzogYnVpbHRpbi9hbS5jOjIyNTQgYnVpbHRpbi9jb21taXQtdHJlZS5jOjEyMCBidWlsdGluL2NvbW1pdC5jOjE0OTEKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODIgYnVpbHRpbi9wdWxsLmM6MTkyIGJ1aWx0aW4vcmViYXNlLmM6NDg5CisjOiBidWlsdGluL3JlYmFzZS5jOjE0NTMgYnVpbHRpbi9yZXZlcnQuYzoxMTYgYnVpbHRpbi90YWcuYzo0MTIKK21zZ2lkICJrZXktaWQiCittc2dzdHIgImtleS1pZCIKKworIzogYnVpbHRpbi9hbS5jOjIyNTUgYnVpbHRpbi9yZWJhc2UuYzo0OTAgYnVpbHRpbi9yZWJhc2UuYzoxNDU0Cittc2dpZCAiR1BHLXNpZ24gY29tbWl0cyIKK21zZ3N0ciAi0L/QvtC00L/QuNGB0LDRgtGMINC60L7QvNC80LjRgtGLINGBINC/0L7QvNC+0YnRjNGOIEdQRyIKKworIzogYnVpbHRpbi9hbS5jOjIyNTgKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAiKNCy0L3Rg9GC0YDQtdC90L3QtdC1INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC1INC00LvRjyBnaXQtcmViYXNlKSIKKworIzogYnVpbHRpbi9hbS5jOjIyNzYKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgItCe0L/RhtC40Y8gLWIvLS1iaW5hcnkg0YPQttC1INC00L7Qu9Cz0L7QtSDQstGA0LXQvNGPINC90LjRh9C10LPQviDQvdC1INC00LXQu9Cw0LXRgiDQuCDQsdGD0LTQtdGCINGD0LTQsNC70LXQvdCwINGBINGB0LvQtdC00YPRjtGJ0LjRhSDQstC10YDRgdC40Y/RhSBHaXQuINCf0L7QttCw0LvRg9C50YHRgtCwLCDQvdC1INC40YHQv9C+0LvRjNC30YPQudGC0LUg0LXQtS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjgzCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICLRgdCx0L7QuSDRh9GC0LXQvdC40Y8g0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJXMgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAi0L/RgNC10LTRi9C00YPRidC40Lkg0LrQsNGC0LDQu9C+0LMg0L/QtdGA0LXQvNC10YnQtdC90LjRjyAlcyDQtdGJ0LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIsINC90L4g0L/QtdGA0LXQtNCw0L0gbWJveC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICLQndCw0LnQtNC10L0g0LfQsNCx0YvRgtGL0Lkg0LrQsNGC0LDQu9C+0LMgJXMuXG7QmNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IGFtIC0tYWJvcnTCuywg0YfRgtC+0LHRiyDRg9C00LDQu9C40YLRjCDQtdCz0L4uIgorCisjOiBidWlsdGluL2FtLmM6MjMyOAorbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgItCe0L/QtdGA0LDRhtC40Y8g0YDQsNC30YDQtdGI0LXQvdC40Y8g0LrQvtC90YTQu9C40LrRgtC+0LIg0L3QtSDQsiDQv9GA0L7RhtC10YHRgdC1INCy0YvQv9C+0LvQvdC10L3QuNGPLCDQvdC1INC/0YDQvtC00L7Qu9C20LDQtdC8LiIKKworIzogYnVpbHRpbi9hcHBseS5jOjgKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzzQvtC/0YbQuNC4Pl0gWzzQv9Cw0YLRhz7igKZdIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINGE0LDQudC7INCw0YDRhdC40LLQsCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC90LDQv9GA0LDQstC40YLRjCDQstGL0LLQvtC0IgorCisjOiBidWlsdGluL2FyY2hpdmUuYzozNworbXNnaWQgImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgImdpdCBhcmNoaXZlOiDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INCx0LXQtyBVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6INC+0LbQuNC00LDQtdGC0YHRjyBBQ0svTkFLLCDQv9C+0LvRg9GH0LXQvSDQv9Cw0LrQtdGCINGB0LHRgNC+0YHQsCDQsdGD0YTQtdGA0LAiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjUKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlOiDQvtGI0LjQsdC60LAg0L/RgNC+0YLQvtC60L7Qu9CwIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2OQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIgorbXNnc3RyICJnaXQgYXJjaGl2ZTog0L7QttC40LTQsNC70YHRjyDRgdCx0YDQvtGBINCx0YPRhNC10YDQsCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxiYWRfdGVybT4gPGdvb2RfdGVybT4iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDzQv9C70L7RhdC+0LUt0L7Qv9GA0LXQtNC10LvQtdC90LjQtT4gPNGF0L7RgNC+0YjQtdC1LdC+0L/RgNC10LTQtdC70LXQvdC40LU+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjQKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXJlc2V0IFs8Y29tbWl0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI2Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSBbLS1uby1sb2ddIDxzdGF0ZT4gPHJldmlzaW9uPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjcKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPGNvbW1hbmQ+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOAorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrIDxnb29kX3Rlcm0+IDxiYWRfdGVybT4gWzx0ZXJtPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC10ZXJtcyBbLS10ZXJtLWdvb2QgfCAtLXRlcm0tb2xkIHwgLS10ZXJtLWJhZCB8ICIKKyItLXRlcm0tbmV3XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzAKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gIgorIi0tdGVybS17bmV3LGJhZH09PHRlcm0+XVstLW5vLWNoZWNrb3V0XSBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gIgorIls8cGF0aHM+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0ZXJtIgorbXNnc3RyICLCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC00L7Qv9GD0YHRgtC40LzRi9C8INC+0L/RgNC10LTQtdC70LXQvdC40LXQvCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHVzZSB0aGUgYnVpbHRpbiBjb21tYW5kICclcycgYXMgYSB0ZXJtIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCy0YHRgtGA0L7QtdC90L3Rg9GOINC60L7QvNCw0L3QtNGDIMKrJXPCuyDQutCw0Log0L7Qv9GA0LXQtNC10LvQtdC90LjQtSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIHRlcm0gJyVzJyIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC40LfQvNC10L3QuNGC0Ywg0LfQvdCw0YfQtdC90LjQtSDQvtC/0YDQtdC00LXQu9C10L3QuNGPIMKrJXPCuyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExMQorbXNnaWQgInBsZWFzZSB1c2UgdHdvIGRpZmZlcmVudCB0ZXJtcyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQtNCy0LAg0YDQsNC30L3Ri9GFINC+0L/RgNC10LTQtdC70LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTgKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0aGUgZmlsZSBCSVNFQ1RfVEVSTVMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0YTQsNC50LsgQklTRUNUX1RFUk1TIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICclcycuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBnZXQgdGhlIG9pZCBvZiB0aGUgcmV2ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBvcGVuIHRoZSBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAlcy8lcyBiaXNlY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgImJpc2VjdGluZyBvbmx5IHdpdGggYSAlcyBjb21taXQiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzI5Cittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgItCS0Ysg0YPQstC10YDQtdC90YsgW1kgLSDQtNCwL24gLSDQvdC10YJdPyAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozNzYKK21zZ2lkICJubyB0ZXJtcyBkZWZpbmVkIgorbXNnc3RyICLQvtC/0YDQtdC00LXQu9C10L3QuNGPINC90LUg0LfQsNC00LDQvdGLIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGN1cnJlbnQgdGVybXMgYXJlICVzIGZvciB0aGUgb2xkIHN0YXRlXG4iCisiYW5kICVzIGZvciB0aGUgbmV3IHN0YXRlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgYXJndW1lbnQgJXMgZm9yICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6IC0tdGVybS1nb29kfC0tdGVybS1vbGQgYW5kIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgb3B0aW9uOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTExCittc2dpZCAiYmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hlY2tpbmcgb3V0ICclcycgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3Qgc3RhcnQgPHZhbGlkLWJyYW5jaD4nLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTQ3Cittc2dpZCAid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINCy0YvQv9C+0LvQvdC40YLRjCDQtNCy0L7QuNGH0L3Ri9C5INC/0L7QuNGB0Log0L3QsCDQtNC10YDQtdCy0LUg0L/QvtGB0LvQtSBjZy1zZWVrIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTUwCittc2dpZCAiYmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjI3Cittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAi0LLRi9C/0L7Qu9C90LjRgtGMIMKrZ2l0IGJpc2VjdCBuZXh0wrsiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MjkKK21zZ2lkICJ3cml0ZSB0aGUgdGVybXMgdG8gLmdpdC9CSVNFQ1RfVEVSTVMiCittc2dzdHIgItC30LDQv9C40YHQsNGC0Ywg0L7Qv9GA0LXQtNC10LvQtdC90LjRjyDQsiAuZ2l0L0JJU0VDVF9URVJNUyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMQorbXNnaWQgImNsZWFudXAgdGhlIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAi0L7Rh9C40YHRgtC40YLRjCDRgdC+0YHRgtC+0Y/QvdC40LUg0LTQstC+0LjRh9C90L7Qs9C+INC/0L7QuNGB0LrQsCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMworbXNnaWQgImNoZWNrIGZvciBleHBlY3RlZCByZXZzIgorbXNnc3RyICLQv9GA0L7QstC10YDQuNGC0Ywg0L7QttC40LTQsNC10LzRi9C1INGA0LXQtNCw0LrRhtC40LgiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzUKK21zZ2lkICJyZXNldCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzcKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGJpc2VjdGlvbiBzdGF0ZSBpbiBCSVNFQ1RfTE9HIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzkKK21zZ2lkICJjaGVjayBhbmQgc2V0IHRlcm1zIGluIGEgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDEKK21zZ2lkICJjaGVjayB3aGV0aGVyIGJhZCBvciBnb29kIHRlcm1zIGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDMKK21zZ2lkICJwcmludCBvdXQgdGhlIGJpc2VjdCB0ZXJtcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ1Cittc2dpZCAic3RhcnQgdGhlIGJpc2VjdCBzZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDcKK21zZ2lkICJ1cGRhdGUgQklTRUNUX0hFQUQgaW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMIEJJU0VDVF9IRUFEINCy0LzQtdGB0YLQviDQv9C10YDQtdGF0L7QtNCwINC90LAg0YLQtdC60YPRidC40Lkg0LrQvtC80LzQuNGCIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ5Cittc2dpZCAibm8gbG9nIGZvciBCSVNFQ1RfV1JJVEUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY2NgorbXNnaWQgIi0td3JpdGUtdGVybXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS13cml0ZS10ZXJtcyDRgtGA0LXQsdGD0LXRgiDRg9C60LDQt9Cw0L3QuNGPINC00LLRg9GFINC/0LDRgNCw0LzQtdGC0YDQvtCyIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjcwCittc2dpZCAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgcmVxdWlyZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWJpc2VjdC1jbGVhbi1zdGF0ZSDQvdC1INGC0YDQtdCx0YPQtdGCINGD0LrQsNC30LDQvdC40Y8g0L/QsNGA0LDQvNC10YLRgNC+0LIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzcKK21zZ2lkICItLWJpc2VjdC1yZXNldCByZXF1aXJlcyBlaXRoZXIgbm8gYXJndW1lbnQgb3IgYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4MQorbXNnaWQgIi0tYmlzZWN0LXdyaXRlIHJlcXVpcmVzIGVpdGhlciA0IG9yIDUgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODcKK21zZ2lkICItLWNoZWNrLWFuZC1zZXQtdGVybXMgcmVxdWlyZXMgMyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY5MworbXNnaWQgIi0tYmlzZWN0LW5leHQtY2hlY2sgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njk5Cittc2dpZCAiLS1iaXNlY3QtdGVybXMgcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMgorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJsYW1lIFs80L7Qv9GG0LjQuD5dIFs80L7Qv9GG0LjQuC3RgNC10LTQsNC60YbQuNC4Pl0gWzzRgNC10LTQsNC60YbQuNGPPl0gWy0tXSA80YTQsNC50Ls+IgorCisjOiBidWlsdGluL2JsYW1lLmM6MzcKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAiPNC+0L/RhtC40LgtcmV2LWxpc3Q+INC00L7QutGD0LzQtdC90YLQuNGA0L7QstCw0L3RiyDQsiBnaXQtcmV2LWxpc3QoMSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0aW5nIGEgY29sb3I6ICVzIgorbXNnc3RyICLQvtC20LjQtNCw0LXRgtGB0Y8g0YbQstC10YI6ICVzIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDE0Cittc2dpZCAibXVzdCBlbmQgd2l0aCBhIGNvbG9yIgorbXNnc3RyICLQtNC+0LvQttC90L4g0LfQsNC60LDQvdGH0LjQstCw0YLRjNGB0Y8g0L3QsCDRhtCy0LXRgiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yICclcycgaW4gY29sb3IuYmxhbWUucmVwZWF0ZWRMaW5lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzE5Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgYmxhbWUuY29sb3JpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5NAorbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LfQsNC/0LjRgdC4INCw0LLRgtC+0YDRgdGC0LLQsCDQv9C+0YHRgtC10L/QtdC90L3Qviwg0LIg0L/RgNC+0YbQtdGB0YHQtSDQvdCw0YXQvtC20LTQtdC90LjRjyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5NQorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgItCd0LUg0L/QvtC60LDQt9GL0LLQsNGC0YwgU0hBLTEg0LTQu9GPINC60L7QvNC80LjRgtC+0LIsINC90LUg0LLRhdC+0LTRj9GJ0LjRhSDQsiDQs9GA0LDQvdC40YbRiyDQt9Cw0L/RgNC+0YHQsCAo0J/QviDRg9C80L7Qu9GH0LDQvdC40Y46INC+0YLQutC70Y7Rh9C10L3QvikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3OTYKK21zZ2lkICJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgItCd0LUg0LLQvtGB0L/RgNC40L3QuNC80LDRgtGMINC60L7RgNC90LXQstGL0LUg0LrQvtC80LzQuNGC0Ysg0LrQsNC6INCz0YDQsNC90LjRh9C90YvQtSAo0J/QviDRg9C80L7Qu9GH0LDQvdC40Y46INC+0YLQutC70Y7Rh9C10L3QvikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3OTcKK21zZ2lkICJTaG93IHdvcmsgY29zdCBzdGF0aXN0aWNzIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINGB0YLQsNGC0LjRgdGC0LjQutGDINGA0LDRgdGF0L7QtNC+0LIg0L3QsCDQstGL0L/QvtC70L3QtdC90LjQtSDQt9Cw0L/RgNC+0YHQsCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi0J/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4g0LLRi9Cy0L7QtNC40YLRjCDQv9GA0L7Qs9GA0LXRgdGBINCy0YvQv9C+0LvQvdC10L3QuNGPIgorCisjOiBidWlsdGluL2JsYW1lLmM6Nzk5Cittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0L7RhtC10L3QutGDINC00LvRjyDQt9Cw0L/QuNGB0LXQuSDQsNCy0YLQvtGA0YHRgtCy0LAiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MDAKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQvtGA0LjQs9C40L3QsNC70YzQvdC+0LUg0LjQvNGPINGE0LDQudC70LAgKNCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MDEKK21zZ2lkICJTaG93IG9yaWdpbmFsIGxpbmVudW1iZXIgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0L7RgNC40LPQuNC90LDQu9GM0L3Ri9C1INC90L7QvNC10YDQsCDRgdGC0YDQvtC6ICjQn9C+INGD0LzQvtC70YfQsNC90LjRjjog0L7RgtC60LvRjtGH0LXQvdC+KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgwMgorbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LIg0YTQvtGA0LzQsNGC0LUg0LTQu9GPINC/0YDQvtCz0YDQsNC80LzQvdC+0LPQviDRgNCw0LfQsdC+0YDQsCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgwMworbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQsiDQvNCw0YjQuNC90L7Rh9C40YLQsNC10LzQvtC8INGE0L7RgNC80LDRgtC1LCDRgSDQv9C+0YHRgtGA0L7Rh9C90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQtdC5INC+INC60L7QvNC80LjRgtC1IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODA0Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGC0LDQutC+0Lkg0LbQtSDRhNC+0YDQvNCw0YIg0LLRi9Cy0L7QtNCwLCDQutCw0Log0LggZ2l0LWFubm90YXRlICjQn9C+INGD0LzQvtC70YfQsNC90LjRjjog0L7RgtC60LvRjtGH0LXQvdC+KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgwNQorbXNnaWQgIlNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQvdC10L7QsdGA0LDQsdC+0YLQsNC90L3Ri9C1INCy0YDQtdC80LXQvdC90YvQtSDQvNC10YLQutC4ICjQn9C+INGD0LzQvtC70YfQsNC90LjRjjog0L7RgtC60LvRjtGH0LXQvdC+KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgwNgorbXNnaWQgIlNob3cgbG9uZyBjb21taXQgU0hBMSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQtNC70LjQvdC90YvQuSBTSEExINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC60L7QvNC80LjRgtCwICjQn9C+INGD0LzQvtC70YfQsNC90LjRjjog0L7RgtC60LvRjtGH0LXQvdC+KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgwNworbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgItCd0LUg0L/QvtC60LDQt9GL0LLQsNGC0Ywg0LjQvNGPINCw0LLRgtC+0YDQsCDQuCDQstGA0LXQvNC10L3QvdGL0LUg0LzQtdGC0LrQuCAo0J/QviDRg9C80L7Qu9GH0LDQvdC40Y46INC+0YLQutC70Y7Rh9C10L3QvikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MDgKK21zZ2lkICJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0L/QvtGH0YLRgyDQsNCy0YLQvtGA0LAg0LLQvNC10YHRgtC+INC40LzQtdC90LggKNCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiDQvtGC0LrQu9GO0YfQtdC90L4pIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODA5Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgItCY0LPQvdC+0YDQuNGA0L7QstCw0YLRjCDRgNCw0LfQu9C40YfQuNGPINCyINC/0YDQvtCx0LXQu9Cw0YUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MTAKK21zZ2lkICJjb2xvciByZWR1bmRhbnQgbWV0YWRhdGEgZnJvbSBwcmV2aW91cyBsaW5lIGRpZmZlcmVudGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MTEKK21zZ2lkICJjb2xvciBsaW5lcyBieSBhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgxOAorbXNnaWQgIlVzZSBhbiBleHBlcmltZW50YWwgaGV1cmlzdGljIHRvIGltcHJvdmUgZGlmZnMiCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDRjdC60YHQv9C10YDQtdC80LXQvdGC0LDQu9GM0L3Rg9GOINGN0LLRgNC40YHRgtC40LrRgywg0YfRgtC+0LHRiyDRg9C70YPRh9GI0LjRgtGMINGE0LDQudC70Ysg0YHQv9C40YHQutCwINC40LfQvNC10L3QtdC90LjQuSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgyMAorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAi0J/QvtGC0YDQsNGC0LjRgtGMINCx0L7Qu9GM0YjQtSDQstGA0LXQvNC10L3QuCwg0LTQu9GPINC90LDRhdC+0LbQtNC10L3QuNGPINC70YPRh9GI0LjRhSDRgdC+0LLQv9Cw0LTQtdC90LjQuSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgyMQorbXNnaWQgIlVzZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4gaW5zdGVhZCBvZiBjYWxsaW5nIGdpdC1yZXYtbGlzdCIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGA0LXQtNCw0LrRhtC40Lgg0LjQtyA80YTQsNC50LvQsD4g0LLQvNC10YHRgtC+INCy0YvQt9C+0LLQsCBnaXQtcmV2LWxpc3QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjIKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YHQvtC00LXRgNC20LjQvNC+0LUgPNGE0LDQudC70LA+INC60LDQuiDRhNC40L3QsNC70YzQvdGL0Lkg0YHQvdC40LzQvtC6IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIzIGJ1aWx0aW4vYmxhbWUuYzo4MjQKK21zZ2lkICJzY29yZSIKK21zZ3N0ciAi0LzQuNC9LdC00LvQuNC90LAiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjMKK21zZ2lkICJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICLQndCw0LnRgtC4INC60L7Qv9C40YDQvtCy0LDQvdC40LUg0YHRgtGA0L7QuiDQsiDQv9GA0LXQtNC10LvQsNGFINC4INC80LXQttC00YMg0YTQsNC50LvQsNC80LgiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjQKK21zZ2lkICJGaW5kIGxpbmUgbW92ZW1lbnRzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICLQndCw0LnRgtC4INC/0LXRgNC10LzQtdGJ0LXQvdC40Y8g0YHRgtGA0L7QuiDQsiDQv9GA0LXQtNC10LvQsNGFINC4INC80LXQttC00YMg0YTQsNC50LvQsNC80LgiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjUKK21zZ2lkICJuLG0iCittc2dzdHIgItC90LDRh9Cw0LvQvizQutC+0L3QtdGGIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODI1Cittc2dpZCAiUHJvY2VzcyBvbmx5IGxpbmUgcmFuZ2UgbixtLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgItCe0LHRgNCw0LHQvtGC0LDRgtGMINGC0L7Qu9GM0LrQviDRgdGC0YDQvtC60Lgg0LIg0LTQuNCw0L/QsNC30L7QvdC1INC90LDRh9Cw0LvQvizQutC+0L3QtdGGLCDQvdCw0YfQuNC90LDRjyDRgSAxIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODc2Cittc2dpZCAiLS1wcm9ncmVzcyBjYW4ndCBiZSB1c2VkIHdpdGggLS1pbmNyZW1lbnRhbCBvciBwb3JjZWxhaW4gZm9ybWF0cyIKK21zZ3N0ciAiLS1wcm9ncmVzcyDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSAtLWluY3JlbWVudGFsINC40LvQuCDQvNCw0YjQuNC90L7Rh9C40YLQsNC10LzRi9C8IChwb3JjZWxhaW4pINGE0L7RgNC80LDRgtC+0LwiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlCisjLiBtYXhpbXVtIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluCisjLiAiZ2l0IGJsYW1lIiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMQorIy4gbW9udGhzIGFnbyIsIHdoaWNoIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QKKyMuIGFtb25nIHZhcmlvdXMgZm9ybXMgb2YgcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0CisjLiB5b3VyIGxhbmd1YWdlIG1heSBuZWVkIG1vcmUgb3IgZmV3ZXIgZGlzcGxheQorIy4gY29sdW1ucy4KKyM6IGJ1aWx0aW4vYmxhbWUuYzo5MjcKK21zZ2lkICI0IHllYXJzLCAxMSBtb250aHMgYWdvIgorbXNnc3RyICI0INCz0L7QtNCwINC4IDExINC80LXRgdGP0YbQtdCyINC90LDQt9Cw0LQiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmUiCittc2dpZF9wbHVyYWwgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmVzIgorbXNnc3RyWzBdICLRhNCw0LnQuyAlcyDRgdC+0LTQtdGA0LbQuNGCINGC0L7Qu9GM0LrQviAlbHUg0YHRgtGA0L7QutGDIgorbXNnc3RyWzFdICLRhNCw0LnQuyAlcyDRgdC+0LTQtdGA0LbQuNGCINGC0L7Qu9GM0LrQviAlbHUg0YHRgtGA0L7QutC4IgorbXNnc3RyWzJdICLRhNCw0LnQuyAlcyDRgdC+0LTQtdGA0LbQuNGCINGC0L7Qu9GM0LrQviAlbHUg0YHRgtGA0L7QuiIKK21zZ3N0clszXSAi0YTQsNC50LsgJXMg0YHQvtC00LXRgNC20LjRgiDRgtC+0LvRjNC60L4gJWx1INGB0YLRgNC+0LrQuCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjEwNzcKK21zZ2lkICJCbGFtaW5nIGxpbmVzIgorbXNnc3RyICLQn9GA0L7RgdC80L7RgtGAINCw0LLRgtC+0YDQvtCyINGB0YLRgNC+0LoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjkKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggWzzQvtC/0YbQuNC4Pl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs80L7Qv9GG0LjQuD5dIFstbF0gWy1mXSA80LjQvNGPLdCy0LXRgtC60Lg+IFs80YLQvtGH0LrQsC3QvdCw0YfQsNC70LA+XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaC1uYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPNC+0L/RhtC40Lg+XSBbLXJdICgtZCB8IC1EKSA80LjQvNGPLdCy0LXRgtC60Lg+4oCmIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMyCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLW0gfCAtTSkgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs80L7Qv9GG0LjQuD5dICgtbSB8IC1NKSBbPNGB0YLQsNGA0LDRjy3QstC10YLQutCwPl0gPNC90L7QstCw0Y8t0LLQtdGC0LrQsD4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzMKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtYyB8IC1DKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzzQvtC/0YbQuNC4Pl0gKC1jIHwgLUMpIFs80YHRgtCw0YDQsNGPLdCy0LXRgtC60LA+XSA80L3QvtCy0LDRjy3QstC10YLQutCwPiIKKworIzogYnVpbHRpbi9icmFuY2guYzozNAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzzQvtC/0YbQuNC4Pl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzUKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1mb3JtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs80L7Qv9GG0LjQuD5dIFstciB8IC1hXSBbLS1mb3JtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBidXQgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgItGD0LTQsNC70LXQvdC40LUg0LLQtdGC0LrQuCDCqyVzwrssINC60L7RgtC+0YDQsNGPINCx0YvQu9CwINGB0LvQuNGC0LAg0YFcbiAgICAgICAgIMKrJXPCuywg0L3QviDQvdC1INGB0LvQuNGC0LAg0YEgSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C10L3QuNC1INCy0LXRgtC60Lggwqslc8K7LCDQutC+0YLQvtGA0LDRjyDQtdGJ0LUg0L3QtSDRgdC70LjRgtCwINGBXG4gICAgICAgICDCqyVzwrssINGF0L7RgtGPINGD0LbQtSDRgdC70LjRgtCwINGBIEhFQUQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDQvtCx0YrQtdC60YIg0LrQvtC80LzQuNGC0LAg0LTQu9GPIMKrJXPCuyIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICLQktC10YLQutCwIMKrJXPCuyDQvdC1INGB0LvQuNGC0LAg0L/QvtC70L3QvtGB0YLRjNGOLlxu0JXRgdC70Lgg0LLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSDQtdC1INGD0LTQsNC70LjRgtGMLCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgYnJhbmNoIC1EICVzwrsuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4NgorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDRhNCw0LnQuyDQutC+0L3RhNC40LPRg9GA0LDRhtC40LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjE3Cittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDQutC70Y7Rh9C4IC1hINC4IC1kIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyMworbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INC+0LHRitC10LrRgiDQutC+0LzQvNC40YLQsCDQtNC70Y8gSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSBicmFuY2ggJyVzJyBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICLQndC10LvRjNC30Y8g0YPQtNCw0LvQuNGC0Ywg0LLQtdGC0LrRgyDCqyVzwrsg0YIu0LouINC+0L3QsCDQsNC60YLQuNCy0L3QsCDQvdCwIMKrJXPCuyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgItCy0L3QtdGI0L3Rj9GPINC+0YLRgdC70LXQttC40LLQsNC10LzQsNGPINCy0LXRgtC60LAgwqslc8K7INC90LUg0L3QsNC50LTQtdC90LAuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICLQstC10YLQutCwIMKrJXPCuyDQvdC1INC90LDQudC00LXQvdCwLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICLQntGI0LjQsdC60LAg0YPQtNCw0LvQtdC90LjRjyDQstC90LXRiNC90LXQuSDQvtGC0YHQu9C10LbQuNCy0LDQtdC80L7QuSDQstC10YLQutC4IMKrJXPCuyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgYnJhbmNoICclcyciCittc2dzdHIgItCe0YjQuNCx0LrQsCDRg9C00LDQu9C10L3QuNGPINCy0LXRgtC60Lggwqslc8K7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZS10cmFja2luZyBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgItCS0L3QtdGI0L3Rj9GPINC+0YLRgdC70LXQttC40LLQsNC10LzQsNGPINCy0LXRgtC60LAgJXMg0YPQtNCw0LvQtdC90LAgKNCx0YvQu9CwICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgItCS0LXRgtC60LAgJXMg0YPQtNCw0LvQtdC90LAgKNCx0YvQu9CwICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjEgYnVpbHRpbi90YWcuYzo2MAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDRgdGC0YDQvtC60YMg0YTQvtGA0LzQsNGC0LAiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDUyCittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEICglcykgcG9pbnRzIG91dHNpZGUgb2YgcmVmcy9oZWFkcy8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIHJlYmFzZWQgYXQgJXMiCittc2dzdHIgItCf0YDQvtC40LfQstC+0LTQuNGC0YHRjyDQv9C10YDQtdC80LXRidC10L3QuNC1INCy0LXRgtC60LggJXMg0L3QsCAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIGJpc2VjdGVkIGF0ICVzIgorbXNnc3RyICLQn9GA0L7QuNC30LLQvtC00LjRgtGB0Y8g0LTQstC+0LjRh9C90YvQuSDQv9C+0LjRgdC6INCyINCy0LXRgtC60LUgJXMg0L3QsCAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0OTQKK21zZ2lkICJjYW5ub3QgY29weSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgItC90LXQstC+0LfQvNC+0LbQvdC+INGB0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgywg0LXRgdC70Lgg0LLRiyDQvdC1INC90LDRhdC+0LTQuNGC0LXRgdGMINC90Lgg0L3QsCDQvtC00L3QvtC5INC40Lcg0LLQtdGC0L7Qui4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDk2Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgItC90LXQstC+0LfQvNC+0LbQvdC+INC/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMINGC0LXQutGD0YnRg9GOINCy0LXRgtC60YMsINC10YHQu9C4INCy0Ysg0L3QtSDQvdCw0YXQvtC00LjRgtC10YHRjCDQvdC4INC90LAg0L7QtNC90L7QuSDQuNC3INC90LjRhS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYnJhbmNoIG5hbWU6ICclcyciCittc2dzdHIgItCd0LXQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QvtC1INC40LzRjyDQstC10YLQutC4OiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTM0Cittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgItCh0LHQvtC5INC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40Y8g0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MzYKK21zZ2lkICJCcmFuY2ggY29weSBmYWlsZWQiCittc2dzdHIgItCh0LHQvtC5INC60L7Qv9C40YDQvtCy0LDQvdC40Y8g0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhIGNvcHkgb2YgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LAg0LrQvtC/0LjRjyDQvdC10L/RgNCw0LLQuNC70YzQvdC+INC90LDQt9Cy0LDQvdC90L7QuSDQstC10YLQutC4IMKrJXPCuyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgItCf0LXRgNC10LjQvNC10L3QvtCy0LDQvdCwINC90LXQv9GA0LDQstC40LvRjNC90L4g0L3QsNC30LLQsNC90L3QsNGPINCy0LXRgtC60LAgwqslc8K7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICLQktC10YLQutCwINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdCwINCyICVzLCDQvdC+IEhFQUQg0L3QtSDQvtCx0L3QvtCy0LvQtdC9ISIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTgKK21zZ2lkICJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgItCS0LXRgtC60LAg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LAsINC90L4g0L/RgNC+0LjQt9C+0YjQtdC7INGB0LHQvtC5INC+0LHQvdC+0LLQu9C10L3QuNGPINGE0LDQudC70LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2MAorbXNnaWQgIkJyYW5jaCBpcyBjb3BpZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICLQktC10YLQutCwINGB0LrQvtC/0LjRgNC+0LLQsNC90LAsINC90L4g0L/RgNC+0LjQt9C+0YjQtdC7INGB0LHQvtC5INC+0LHQvdC+0LLQu9C10L3QuNGPINGE0LDQudC70LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoXG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIHN0cmlwcGVkLlxuIgorbXNnc3RyICLQmNC30LzQtdC90LjRgtC1INC+0L/QuNGB0LDQvdC40LUg0LTQu9GPINCy0LXRgtC60Lg6XG4gICVzXG7QodGC0YDQvtC60LgsINC90LDRh9C40L3QsNGO0YnQuNC10YHRjyDRgSDCqyVjwrsg0LHRg9C00YPRgiDQstGL0YDQtdC30LDQvdGLLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxMAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAi0J7QsdGJ0LjQtSDQv9Cw0YDQsNC80LXRgtGA0YsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjEyCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgItC/0L7QutCw0LfRi9Cy0LDRgtGMINGF0LXRiC3RgdGD0LzQvNGDINC4INGC0LXQvNGDLCDRg9C60LDQttC40YLQtSDQtNCy0LDQttC00Ysg0LTQu9GPINCy0YvRiNC10YHRgtC+0Y/RidC10Lkg0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTMKK21zZ2lkICJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90YvQtSDRgdC+0L7QsdGJ0LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjE0Cittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtcHVsbCgxKSkiCittc2dzdHIgItGD0YHRgtCw0L3QvtCy0LjRgtGMINGA0LXQttC40Lwg0L7RgtGB0LvQtdC20LjQstCw0L3QuNGPINCy0YvRiNC10YHRgtC+0Y/RidC10Lkg0LLQtdGC0LrQuCAo0YHQvC4gZ2l0LXB1bGwoMSkpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxNgorbXNnaWQgImRvIG5vdCB1c2UiCittc2dzdHIgItC90LUg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTggYnVpbHRpbi9yZWJhc2UuYzo0ODUKK21zZ2lkICJ1cHN0cmVhbSIKK21zZ3N0ciAi0LLRi9GI0LXRgdGC0L7Rj9GJ0LDRjyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTgKK21zZ2lkICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgItC40LfQvNC10L3QuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC1IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOQorbXNnaWQgIlVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICLQo9Cx0YDQsNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC1IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMAorbXNnaWQgInVzZSBjb2xvcmVkIG91dHB1dCIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGG0LLQtdGC0L3QvtC5INCy0YvQstC+0LQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIxCittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi0LLRi9C/0L7Qu9C90LjRgtGMINC00LXQudGB0YLQstC40Y8g0L3QsCDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDQstC90LXRiNC90LjRhSDQstC10YLQutCw0YUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIzIGJ1aWx0aW4vYnJhbmNoLmM6NjI1Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgtC+0LvRjNC60L4g0LLQtdGC0L7Quiwg0LrQvtGC0L7RgNGL0LUg0YHQvtC00LXRgNC20LDRgiDQutC+0LzQvNC40YIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI0IGJ1aWx0aW4vYnJhbmNoLmM6NjI2Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgtC+0LvRjNC60L4g0LLQtdGC0L7Quiwg0LrQvtGC0L7RgNGL0LUg0L3QtSDRgdC+0LTQtdGA0LbQsNGCINC60L7QvNC80LjRgiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjkKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICLQodC/0LXRhtC40YTQuNGH0L3Ri9C1INC00LvRjyBnaXQtYnJhbmNoINC00LXQudGB0YLQstC40Y86IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMAorbXNnaWQgImxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGB0L/QuNGB0L7QuiDQuCDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDQuCDQu9C+0LrQsNC70YzQvdGL0YUg0LLQtdGC0L7QuiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzIKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0Ywg0L/QvtC70L3QvtGB0YLRjNGOINGB0LvQuNGC0YPRjiDQstC10YLQutGDIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMworbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgItGD0LTQsNC70LjRgtGMINCy0LXRgtC60YMgKNC00LDQttC1INC90LjQutGD0LTQsCDQvdC1INGB0LvQuNGC0YPRjikiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM0Cittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgItC/0LXRgNC10LzQtdGB0YLQuNGC0Ywv0L/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0Ywg0LLQtdGC0LrQuCDQuCDQtdC1INC20YPRgNC90LDQuyDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM1Cittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi0L/QtdGA0LXQvNC10YHRgtC40YLRjC/Qv9C10YDQtdC40LzQtdC90L7QstCw0YLRjCDQstC10YLQutGDLCDQtNCw0LbQtSDQtdGB0LvQuCDRhtC10LvQtdCy0L7QtSDQuNC80Y8g0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzNgorbXNnaWQgImNvcHkgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgItGB0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0LLQtdGC0LrRgyDQuCDQtdGRINC20YPRgNC90LDQuyDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM3Cittc2dpZCAiY29weSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICLRgdC60L7Qv9C40YDQvtCy0LDRgtGMINCy0LXRgtC60YMsINC00LDQttC1INC10YHQu9C4INGG0LXQu9C10LLQvtC1INC40LzRjyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM4Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0YHQv9C40YHQvtC6INC40LzQtdC9INCy0LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM5Cittc2dpZCAic2hvdyBjdXJyZW50IGJyYW5jaCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQwCittc2dpZCAiY3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2ciCittc2dzdHIgItGB0L7Qt9C00LDRgtGMINC20YPRgNC90LDQuyDRgdGB0YvQu9C+0Log0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDIKK21zZ2lkICJlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCIKK21zZ3N0ciAi0LjQt9C80LXQvdC40YLRjCDQvtC/0LjRgdCw0L3QuNC1INCy0LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQzCittc2dpZCAiZm9yY2UgY3JlYXRpb24sIG1vdmUvcmVuYW1lLCBkZWxldGlvbiIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L7QtSDRgdC+0LfQtNCw0L3QuNC1LCDQv9C10YDQtdC80LXRidC10L3QuNC1INC40LvQuCDRg9C00LDQu9C10L3QuNC1INCy0LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ0Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgItCy0YvQstC+0LQg0YLQvtC70YzQutC+INGB0LvQuNGC0YvRhSDQstC10YLQvtC6IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NQorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgtC+0LvRjNC60L4g0L3QtSDRgdC70LjRgtGL0YUg0LLQtdGC0L7QuiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDYKK21zZ2lkICJsaXN0IGJyYW5jaGVzIGluIGNvbHVtbnMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0YHQv9C40YHQvtC6INCy0LXRgtC+0Log0L/QviDRgdGC0L7Qu9Cx0YbQsNC8IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0OSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQyIGJ1aWx0aW4vbm90ZXMuYzo0MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTggYnVpbHRpbi9ub3Rlcy5jOjU4MSBidWlsdGluL25vdGVzLmM6NTg0CisjOiBidWlsdGluL3RhZy5jOjQyNworbXNnaWQgIm9iamVjdCIKK21zZ3N0ciAi0L7QsdGK0LXQutGCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MAorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgtC+0LvRjNC60L4g0LLQtdGC0L7Quiwg0L7Qv9GA0LXQtNC10LvQtdC90L3QvtCz0L4g0L7QsdGK0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUyIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDggYnVpbHRpbi90YWcuYzo0MzQKK21zZ2lkICJzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgYXJlIGNhc2UgaW5zZW5zaXRpdmUiCittc2dzdHIgItGB0L7RgNGC0LjRgNC+0LLQutCwINC4INGE0LjQu9GM0YLRgNCw0YbQuNGPINC90LUg0LfQsNCy0LjRgdGP0YIg0L7RgiDRgNC10LPQuNGB0YLRgNCwIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MyBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4IGJ1aWx0aW4vdGFnLmM6NDMyCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozOQorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRhNC+0YDQvNCw0YIg0LTQu9GPINCy0YvQstC+0LTQsCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NzYgYnVpbHRpbi9jbG9uZS5jOjc0OAorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICJIRUFEINC90LUg0L3QsNC50LTQtdC9INCyIHJlZnMvaGVhZHMhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcwMAorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4g0LggLS12ZXJib3NlINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcxNSBidWlsdGluL2JyYW5jaC5jOjc2OSBidWlsdGluL2JyYW5jaC5jOjc3OAorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICLRgtGA0LXQsdGD0LXRgtGB0Y8g0LjQvNGPINCy0LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzQ1Cittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINC00LDRgtGMINC+0L/QuNGB0LDQvdC40LUg0L7RgtC00LXQu9GR0L3QvdC+0LzRgyBIRUFEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1MAorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjQt9C80LXQvdC40YLRjCDQvtC/0LjRgdCw0L3QuNC1INCx0L7Qu9C10LUg0L7QtNC90L7QuSDQstC10YLQutC4INC30LAg0YDQsNC3IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIKK21zZ3N0ciAi0JXRidC1INC90LXRgiDQutC+0LzQvNC40YLQsCDQvdCwINCy0LXRgtC60LUgwqslc8K7LiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gYnJhbmNoIG5hbWVkICclcycuIgorbXNnc3RyICLQndC10YIg0LLQtdGC0LrQuCDRgSDQuNC80LXQvdC10Lwgwqslc8K7LiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NzUKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyBmb3IgYSBjb3B5IG9wZXJhdGlvbiIKK21zZ3N0ciAi0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDQstC10YLQvtC6INC00LvRjyDQvtC/0LXRgNCw0YbQuNC4INC60L7Qv9C40YDQvtCy0LDQvdC40Y8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzg0Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgItGB0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0LDRgNCz0YPQvNC10L3RgtC+0LIg0LTQu9GPINC+0L/QtdGA0LDRhtC40Lgg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3ODkKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAi0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDQsNGA0LPRg9C80LXQvdGC0L7QsiDQtNC70Y8g0YPQutCw0LfQsNC90LjRjyDQvdC+0LLQvtC5INCy0YvRiNC10YHRgtC+0Y/RidC10Lkg0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICLQvdC10LLQvtC30LzQvtC20L3QviDRg9GB0YLQsNC90L7QstC40YLRjCDQstGL0YjQtdGB0YLQvtGP0YnQuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LTQu9GPIEhFQUQg0L3QsCAlcywg0YLQsNC6INC60LDQuiDQvtC9INC90LUg0YPQutCw0LfRi9Cy0LDQtdGCINC90Lgg0L3QsCDQvtC00L3RgyDQstC10YLQutGDLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTYgYnVpbHRpbi9icmFuY2guYzo4MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAi0L3QtdGCINGC0LDQutC+0Lkg0LLQtdGC0LrQuCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQstC10YLQutCwIMKrJXPCuyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxMworbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAi0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDQsNGA0LPRg9C80LXQvdGC0L7QsiDQtNC70Y8g0YHQsdGA0L7RgdCwINGD0LrQsNC30LDQvdC40Y8g0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxNworbXNnaWQgImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgItC90LXQstC+0LfQvNC+0LbQvdC+INGD0LHRgNCw0YLRjCDQstGL0YjQtdGB0YLQvtGP0YnQuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LTQu9GPIEhFQUQsINGC0LDQuiDQutCw0Log0L7QvSDQvdC1INGD0LrQsNC30YvQstCw0LXRgiDQvdC4INC90LAg0L7QtNC90YMg0LLQtdGC0LrRgy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0JLQtdGC0LrQsCDCqyVzwrsg0L3QtSDQuNC80LXQtdGCINC40L3RhNC+0YDQvNCw0YbQuNC4INC+INCy0YvRiNC10YHRgtC+0Y/RidC10Lkg0LLQtdGC0LrQtSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MzMKK21zZ2lkICItYSBhbmQgLXIgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IG1ha2Ugc2Vuc2Ugd2l0aCBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGA0YsgLWEg0LggLXIg0LTQu9GPIMKrZ2l0IGJyYW5jaMK7INC90LUg0LjQvNC10Y7RgiDRgdC80YvRgdC70LAg0YEg0YPQutCw0LfQsNC90LjQtdC8INC40LzQtdC90Lgg0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MzYKK21zZ2lkICIiCisidGhlICctLXNldC11cHN0cmVhbScgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgJy0tdHJhY2snIG9yICIKKyInLS1zZXQtdXBzdHJlYW0tdG8nIGluc3RlYWQuIgorbXNnc3RyICLQvtC/0YbQuNGPIC0tc2V0LXVwc3RyZWFtINCx0L7Qu9GM0YjQtSDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y8uINCS0LzQtdGB0YLQviDQvdC10ZEg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCqy0tdHJhY2vCuyDQuNC70LggwqstLXNldC11cHN0cmVhbS10b8K7IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAiJXMg0LIg0L/QvtGA0Y/QtNC60LVcbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo1OAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgItCi0YDQtdCx0YPQtdGC0YHRjyDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC00LvRjyDRgdC+0LfQtNCw0L3QuNGPINC/0LDQutC10YLQsC4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjIKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iCittc2dzdHIgItCi0YDQtdCx0YPQtdGC0YHRjyDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC00LvRjyDRgNCw0YHQv9Cw0LrQvtCy0LrQuC4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTMKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgIgorIi1wIHwgPHR5cGU+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD08cGF0aD5dIDxvYmplY3Q+IgorbXNnc3RyICJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtcCB8IDzRgtC40L8+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD080L/Rg9GC0Yw+XSA80L7QsdGK0LXQutGCPiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NAorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgIgorIi0tZmlsdGVyc10iCittc2dzdHIgImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gWy0tdGV4dGNvbnYgfCAtLWZpbHRlcnNdIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjE1Cittc2dpZCAib25seSBvbmUgYmF0Y2ggb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzMworbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiPNGC0LjQvz4g0LzQvtC20LXRgiDQsdGL0YLRjCDQvtC00L3QuNC8INC40Lc6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM0Cittc2dpZCAic2hvdyBvYmplY3QgdHlwZSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDRgtC40L8g0L7QsdGK0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzUKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGA0LDQt9C80LXRgCDQvtCx0YrQtdC60YLQsCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNworbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAi0LLRi9C50YLQuCDRgSDQvdGD0LvQtdCy0YvQvCDQutC+0LTQvtC8INCy0L7Qt9Cy0YDQsNGC0LAsINC10YHQu9C4INC90LXRgiDQvtGI0LjQsdC60LgiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzgKK21zZ2lkICJwcmV0dHktcHJpbnQgb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAi0YHRgtGA0YPQutGC0YPRgNC40YDQvtCy0LDQvdC90YvQuSDQstGL0LLQvtC0INGB0L7QtNC10YDQttC40LzQvtCz0L4g0L7QsdGK0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDAKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAi0LfQsNC/0YPRgdGC0LjRgtGMIHRleGNvbnYg0L3QsCDRgdC+0LTQtdGA0LbQuNC80L7QvCDQtNCy0L7QuNGH0L3Ri9GFINC+0LHRitC10LrRgtC+0LIgIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQyCittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIGZpbHRlcnMgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAi0LfQsNC/0YPRgdC6INGE0LjQu9GM0YLRgNC+0LIg0L3QsCDRgdC+0LTQtdGA0LbQuNC80L7QvCDQtNCy0L7QuNGH0L3Ri9GFINC+0LHRitC10LrRgtC+0LIgIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQzIGdpdC1zdWJtb2R1bGUuc2g6OTM2Cittc2dpZCAiYmxvYiIKK21zZ3N0ciAi0LTQstC+0LjRh9C90YvQuSDQvtCx0YrQtdC60YIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDQKK21zZ2lkICJ1c2UgYSBzcGVjaWZpYyBwYXRoIGZvciAtLXRleHRjb252Ly0tZmlsdGVycyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0L/RgNC10LTQtdC70LXQvdC90YvQuSDQv9GD0YLRjCDQtNC70Y8gLS10ZXh0Y29udi8tLWZpbHRlcnMiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDYKK21zZ2lkICJhbGxvdyAtcyBhbmQgLXQgdG8gd29yayB3aXRoIGJyb2tlbi9jb3JydXB0IG9iamVjdHMiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCAtcyDQuCAtdCDRgNCw0LHQvtGC0LDRgtGMINGBINC/0L7QstGA0LXQttC00ZHQvdC90YvQvNC4INC+0LHRitC10LrRgtCw0LzQuCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NworbXNnaWQgImJ1ZmZlciAtLWJhdGNoIG91dHB1dCIKK21zZ3N0ciAi0LHRg9GE0YTQtdGA0LjRgNC+0LLQsNGC0Ywg0LLRi9Cy0L7QtCAtLWJhdGNoIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ5Cittc2dpZCAic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC4INGB0L7QtNC10YDQttC40LzQvtC1INC+0LHRitC10LrRgtC+0LIsINC/0LXRgNC10LTQsNC90L3Ri9GFINC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTMKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L7QsSDQvtCx0YrQtdC60YLQsNGFLCDQv9C10YDQtdC00LDQvdC90YvRhSDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU3Cittc2dpZCAiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIgorbXNnc3RyICLQv9C10YDQtdGF0L7QtNC40YLRjCDQv9C+INGB0LjQvNCy0L7Qu9GM0L3Ri9C8INGB0YHRi9C70LrQsNC8INCy0L3Rg9GC0YDQuCDQtNC10YDQtdCy0LAgKNC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDRgSDQvtC/0YbQuNGP0LzQuCAtLWJhdGNoINC4IC0tYmF0Y2gtY2hlY2spIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU5Cittc2dpZCAic2hvdyBhbGwgb2JqZWN0cyB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjayIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQstGB0LUg0L7QsdGK0LXQutGC0Ysg0YEg0L7Qv9GG0LjRj9C80LggLS1iYXRjaCDQuNC70LggLS1iYXRjaC1jaGVjayIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MQorbXNnaWQgImRvIG5vdCBvcmRlciAtLWJhdGNoLWFsbC1vYmplY3RzIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMworbXNnaWQgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxwYXRobmFtZT4uLi4iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPNCw0YLRgNC40LHRg9GCPuKApl0gWy0tXSA80L/Rg9GC0Yw+4oCmIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxNAorbXNnaWQgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDzQsNGC0YDQuNCx0YPRgj7igKZdIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0LLRgdC1INCw0YLRgNC40LHRg9GC0Ysg0YPRgdGC0LDQvdC+0LLQu9C10L3QvdGL0LUg0LTQu9GPINGE0LDQudC70LAiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIyCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4gLmdpdGF0dHJpYnV0ZXMg0LjQtyDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNSBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAyCittc2dpZCAicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iCittc2dzdHIgItC/0YDQvtGH0LjRgtCw0YLRjCDQuNC80LXQvdCwINGE0LDQudC70L7QsiDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyNSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI3Cittc2dpZCAidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgItC+0LrQvtC90YfQsNC90LjQtSDQstCy0L7QtNCwINC4INCy0YvQstC+0LTQsCDQt9Cw0L/QuNGB0LXQuSDQv9C+INCd0KPQm9CV0JLQntCc0KMg0YHQuNC80LLQvtC70YMiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjEgYnVpbHRpbi9jaGVja291dC5jOjEzNTUgYnVpbHRpbi9nYy5jOjUzOAorIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5OQorbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMINC/0YDQvtCz0YDQtdGB0YEg0LLRi9C/0L7Qu9C90LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjkKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBpbnB1dCBwYXRocyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQvdC1INGB0L7QstC/0LDQtNCw0Y7RidC40LUg0LLQstC10LTQtdC90L3Ri9C1INC/0YPRgtC4IgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjMxCittc2dpZCAiaWdub3JlIGluZGV4IHdoZW4gY2hlY2tpbmciCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQuNC90LTQtdC60YEg0L/RgNC4INC/0YDQvtCy0LXRgNC60LUiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYwCittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINGD0LrQsNC30YvQstCw0YLRjCDQv9GD0YLQuCDQstC80LXRgdGC0LUg0YEg0L/QsNGA0LDQvNC10YLRgNC+0LwgLS1zdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICIteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiLXog0LjQvNC10LXRgiDRgdC80YvRgdC7INGC0L7Qu9GM0LrQviDQstC80LXRgdGC0LUg0YEg0L/QsNGA0LDQvNC10YLRgNC+0LwgLS1zdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjUKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZCIKK21zZ3N0ciAi0L3QtSDRg9C60LDQt9Cw0L0g0L/Rg9GC0YwiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY5Cittc2dpZCAiLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCittc2dzdHIgIi0tcXVpZXQg0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INC/0YDQuCDRg9C60LDQt9Cw0L3QuNC4INC+0LTQvdC+0LPQviDQv9GD0YLQuCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzEKK21zZ2lkICJjYW5ub3QgaGF2ZSBib3RoIC0tcXVpZXQgYW5kIC0tdmVyYm9zZSIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4gLS1xdWlldCDQuCAtLXZlcmJvc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc0Cittc2dpZCAiLS1ub24tbWF0Y2hpbmcgaXMgb25seSB2YWxpZCB3aXRoIC0tdmVyYm9zZSIKK21zZ3N0ciAiLS1ub24tbWF0Y2hpbmcg0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INCy0LzQtdGB0YLQtSDRgSAtLXZlcmJvc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjkKK21zZ2lkICJnaXQgY2hlY2stbWFpbG1hcCBbPG9wdGlvbnM+XSA8Y29udGFjdD4uLi4iCittc2dzdHIgImdpdCBjaGVjay1tYWlsbWFwIFs80L7Qv9GG0LjQuD5dIDzQutC+0L3RgtCw0LrRgj7igKYiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjE0Cittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgItGC0LDQutC20LUg0YfQuNGC0LDRgtGMINC60L7QvdGC0LDQutGC0Ysg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQutC+0L3RgtCw0LrRgjogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjQ4Cittc2dpZCAibm8gY29udGFjdHMgc3BlY2lmaWVkIgorbXNnc3RyICLQvdC1INGD0LrQsNC30LDQvdGLINC60L7QvdGC0LDQutGC0YsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMzEKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFs80L7Qv9GG0LjQuD5dIFstLV0gWzzRhNCw0LnQuz7igKZdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTQ4Cittc2dpZCAic3RhZ2Ugc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMyBvciBhbGwiCittc2dzdHIgItC40L3QtNC10LrRgSDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0LzQtdC20LTRgyAxINC4IDMg0LjQu9C4IGFsbCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICLQv9C10YDQtdC60LvRjtGH0LjRgtGM0YHRjyDQvdCwINGB0L7RgdGC0L7Rj9C90LjQtSDQstGB0LXRhSDRhNCw0LnQu9C+0LIg0LjQtyDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NQorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBleGlzdGluZyBmaWxlcyIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90LDRjyDQv9C10YDQtdC30LDQv9C40YHRjCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40YUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY3Cittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMINC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y8g0LTQu9GPINGB0YPRidC10YHRgtCy0YPRjtGJ0LjRhSDQuCDQvdC10L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9GFINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2OQorbXNnaWQgImRvbid0IGNoZWNrb3V0IG5ldyBmaWxlcyIKK21zZ3N0ciAi0L3QtSDRgdC+0LfQtNCw0LLQsNGC0Ywg0L3QvtCy0YvQtSDRhNCw0LnQu9GLIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTcxCittc2dpZCAidXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGZpbGUiCittc2dzdHIgItC+0LHQvdC+0LLQuNGC0Ywg0YHRgtCw0YLQuNGB0YLQuNC60YMg0LTQvtGB0YLRg9C/0LAg0LIg0YTQsNC50LvQtSDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINGB0L/QuNGB0L7QuiDQv9GD0YLQtdC5INC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzcKK21zZ2lkICJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiCittc2dzdHIgItC30LDQv9C40YHQsNGC0Ywg0YHQvtC00LXRgNC20LjQvNC+0LUg0LLQviDQstGA0LXQvNC10L3QvdGL0LUg0YTQsNC50LvRiyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3OCBidWlsdGluL2NvbHVtbi5jOjMxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM3MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM3NQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODMgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NTYKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NzIKK21zZ2lkICJzdHJpbmciCittc2dzdHIgItGB0YLRgNC+0LrQsCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3OQorbXNnaWQgIndoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4iCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0YHQv9C10YDQtdC00LggPNGB0YLRgNC+0LrRgz4g0L/RgNC4INGB0L7Qt9C00LDQvdC40Lgg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTgxCittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgItC60L7Qv9C40YDQvtCy0LDRgtGMINGE0LDQudC70Ysg0LjQtyDRg9C60LDQt9Cw0L3QvdC+0LPQviDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMyCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIDxicmFuY2g+IgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzzQvtC/0YbQuNC4Pl0gPNCy0LXRgtC60LA+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzMKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gWzxicmFuY2g+XSAtLSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBjaGVja291dCBbPNC+0L/RhtC40Lg+XSBbPNCy0LXRgtC60LA+XSAtLSA80YTQsNC50Ls+4oCmIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgItC/0YPRgtGMIMKrJXPCuyDQvdC1INC40LzQtdC10YIg0L3QsNGI0LXQuSDQstC10YDRgdC40LgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTMgYnVpbHRpbi9jaGVja291dC5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICLQv9GD0YLRjCDCqyVzwrsg0L3QtSDQuNC80LXQtdGCINC40YUg0LLQtdGA0YHQuNC4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgItC/0YPRgtGMIMKrJXPCuyDQvdC1INC40LzQtdC10YIg0LLRgdC10YUg0L3QtdC+0LHRhdC+0LTQuNC80YvRhSDQstC10YDRgdC40LkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLQv9GD0YLRjCDCqyVzwrsg0L3QtSDQuNC80LXQtdGCINC90LXQvtCx0YXQvtC00LjQvNGL0YUg0LLQtdGA0YHQuNC5IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJzogY2Fubm90IG1lcmdlIgorbXNnc3RyICLQv9GD0YLRjCDCqyVzwrs6INC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQu9C40YLRjCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQtNC+0LHQsNCy0LjRgtGMINGA0LXQt9GD0LvRjNGC0LDRgiDRgdC70LjRj9C90LjRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMzEgYnVpbHRpbi9jaGVja291dC5jOjMzNCBidWlsdGluL2NoZWNrb3V0LmM6MzM3CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiwqslc8K7INC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L/RgNC4INC+0LHQvdC+0LLQu9C10L3QuNC4INC/0YPRgtC10LkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozNDMgYnVpbHRpbi9jaGVja291dC5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIsKrJXPCuyDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iCittc2dzdHIgItCd0LXQu9GM0LfRjyDQvtCx0L3QvtCy0LvRj9GC0Ywg0L/Rg9GC0Lgg0Lgg0L/QtdGA0LXQutC70Y7Rh9Cw0YLRjNGB0Y8g0L3QsCDQstC10YLQutGDIMKrJXPCuyDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzk2IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICLQv9GD0YLRjCDCqyVzwrsg0L3QtSDRgdC70LjRgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdHMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorbXNnc3RyWzJdICIiCittc2dzdHJbM10gIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkICVkIHBhdGggZnJvbSAlcyIKK21zZ2lkX3BsdXJhbCAiVXBkYXRlZCAlZCBwYXRocyBmcm9tICVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKK21zZ3N0clsyXSAiIgorbXNnc3RyWzNdICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKK21zZ3N0clsyXSAiIgorbXNnc3RyWzNdICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2OTUKK21zZ2lkICJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAi0YHQvdCw0YfQsNC70LAg0L3Rg9C20L3QviDRgNCw0LfRgNC10YjQuNGC0Ywg0LrQvtC90YTQu9C40LrRgtGLINCyINCy0LDRiNC10Lwg0YLQtdC60YPRidC10Lwg0LjQvdC00LXQutGB0LUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBjb250aW51ZSB3aXRoIHN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjc1MQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFnZWQgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIGZpbGVzIG1heSBiZSBsb3N0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINC20YPRgNC90LDQuyDRgdGB0YvQu9C+0Log0LTQu9GPIMKrJXPCuzogJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5MAorbXNnaWQgIkhFQUQgaXMgbm93IGF0IgorbXNnc3RyICJIRUFEINGB0LXQudGH0LDRgSDQvdCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk0IGJ1aWx0aW4vY2xvbmUuYzo3MDEKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIEhFQUQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCBIRUFEIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgItCh0LHRgNC+0YEg0LLQtdGC0LrQuCDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAi0KPQttC1INC90LAgwqslc8K7XG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgItCf0LXRgNC10LrQu9GO0YfQtdC90LjQtSDQuCDRgdCx0YDQvtGBINCy0LXRgtC60Lggwqslc8K7XG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5MDcgYnVpbHRpbi9jaGVja291dC5jOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi0J/QtdGA0LXQutC70Y7Rh9C10L3QviDQvdCwINC90L7QstGD0Y4g0LLQtdGC0LrRgyDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLQn9C10YDQtdC60LvRjtGH0LXQvdC+INC90LAg0LLQtdGC0LrRgyDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgLi4uIGFuZCAlZCBtb3JlLlxuIgorbXNnc3RyICIg4oCmINC4INC10YnQtSAlZC5cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAi0J/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtTog0LLRiyDQvtGB0YLQsNCy0LvRj9C10YLQtSDQv9C+0LfQsNC00LggJWQg0LrQvtC80LzQuNGCINC90LUg0YHQvtC10LTQuNC90LXQvdC90YPRjiDQvdC4INGBINC+0LTQvdC+0Lkg0LjQtyDQstCw0YjQuNGFINCy0LXRgtC+0Lo6XG5cbiVzXG4iCittc2dzdHJbMV0gItCf0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6INCy0Ysg0L7RgdGC0LDQstC70Y/QtdGC0LUg0L/QvtC30LDQtNC4ICVkINC60L7QvNC80LjRgtCwINC90LUg0YHQvtC10LTQuNC90LXQvdC90YvQtSDQvdC4INGBINC+0LTQvdC+0Lkg0LjQtyDQstCw0YjQuNGFINCy0LXRgtC+0Lo6XG5cbiVzXG4iCittc2dzdHJbMl0gItCf0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6INCy0Ysg0L7RgdGC0LDQstC70Y/QtdGC0LUg0L/QvtC30LDQtNC4ICVkINC60L7QvNC80LjRgtC+0LIg0L3QtSDRgdC+0LXQtNC40L3QtdC90L3Ri9C1INC90Lgg0YEg0L7QtNC90L7QuSDQuNC3INCy0LDRiNC40YUg0LLQtdGC0L7QujpcblxuJXNcbiIKK21zZ3N0clszXSAi0J/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtTog0LLRiyDQvtGB0YLQsNCy0LvRj9C10YLQtSDQv9C+0LfQsNC00LggJWQg0LrQvtC80LzQuNGC0L7QsiDQvdC1INGB0L7QtdC00LjQvdC10L3QvdGL0LUg0L3QuCDRgSDQvtC00L3QvtC5INC40Lcg0LLQsNGI0LjRhSDQstC10YLQvtC6OlxuXG4lc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAi0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0YHQvtGF0YDQsNC90LjRgtGMINC40YUg0YEg0L/QvtC80L7RidGM0Y4g0YHQvtC30LTQsNC90LjRjyDQvdC+0LLQvtC5INCy0LXRgtC60LgsINGC0L4g0YHQtdC50YfQsNGBINGB0LDQvNC+0LUg0LLRgNC10LzRj1xu0YHQtNC10LvQsNGC0Ywg0Y3RgtC+INGBINC/0L7QvNC+0YnRjNGOOlxuXG4gZ2l0IGJyYW5jaCA80LjQvNGPLdC90L7QstC+0Lkt0LLQtdGC0LrQuD4gJXNcbiIKK21zZ3N0clsxXSAi0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0YHQvtGF0YDQsNC90LjRgtGMINC40YUg0YEg0L/QvtC80L7RidGM0Y4g0YHQvtC30LTQsNC90LjRjyDQvdC+0LLQvtC5INCy0LXRgtC60LgsINGC0L4g0YHQtdC50YfQsNGBINGB0LDQvNC+0LUg0LLRgNC10LzRj1xu0YHQtNC10LvQsNGC0Ywg0Y3RgtC+INGBINC/0L7QvNC+0YnRjNGOOlxuXG4gZ2l0IGJyYW5jaCA80LjQvNGPLdC90L7QstC+0Lkt0LLQtdGC0LrQuD4gJXNcbiIKK21zZ3N0clsyXSAi0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0YHQvtGF0YDQsNC90LjRgtGMINC40YUg0YEg0L/QvtC80L7RidGM0Y4g0YHQvtC30LTQsNC90LjRjyDQvdC+0LLQvtC5INCy0LXRgtC60LgsINGC0L4g0YHQtdC50YfQsNGBINGB0LDQvNC+0LUg0LLRgNC10LzRj1xu0YHQtNC10LvQsNGC0Ywg0Y3RgtC+INGBINC/0L7QvNC+0YnRjNGOOlxuXG4gZ2l0IGJyYW5jaCA80LjQvNGPLdC90L7QstC+0Lkt0LLQtdGC0LrQuD4gJXNcbiIKK21zZ3N0clszXSAi0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0YHQvtGF0YDQsNC90LjRgtGMINC40YUg0YEg0L/QvtC80L7RidGM0Y4g0YHQvtC30LTQsNC90LjRjyDQvdC+0LLQvtC5INCy0LXRgtC60LgsINGC0L4g0YHQtdC50YfQsNGBINGB0LDQvNC+0LUg0LLRgNC10LzRj1xu0YHQtNC10LvQsNGC0Ywg0Y3RgtC+INGBINC/0L7QvNC+0YnRjNGOOlxuXG4gZ2l0IGJyYW5jaCA80LjQvNGPLdC90L7QstC+0Lkt0LLQtdGC0LrQuD4gJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTcKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICLQstC90YPRgtGA0LXQvdC90Y/RjyDQvtGI0LjQsdC60LAg0L/RgNC4INGF0L7QttC00LXQvdC40Lgg0L/QviDRgNC10LTQsNC60YbQuNGP0LwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDIxCittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgItCf0YDQtdC00YvQtNGD0YnQsNGPINC/0L7Qt9C40YbQuNGPIEhFQUQg0LHRi9C70LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDUyIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjc4Cittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAi0JLRiyDQvdCw0YXQvtC00LjRgtC10YHRjCDQvdCwINC10YnQtSDQvdC1INGB0L7Qt9C00LDQvdC90L7QuSDQstC10YLQutC1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE3MworIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIKK21zZ3N0ciAi0L7QttC40LTQsNC10YLRgdGPINGC0L7Qu9GM0LrQviDQvtC00L3QsCDRgdGB0YvQu9C60LAsINCwINC/0LXRgNC10LTQsNC90L4gJWQuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBjb3VsZCBiZSBib3RoIGEgbG9jYWwgZmlsZSBhbmQgYSB0cmFja2luZyBicmFuY2guXG4iCisiUGxlYXNlIHVzZSAtLSAoYW5kIG9wdGlvbmFsbHkgLS1uby1ndWVzcykgdG8gZGlzYW1iaWd1YXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjIyIGJ1aWx0aW4vd29ya3RyZWUuYzoyOTAgYnVpbHRpbi93b3JrdHJlZS5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90LDRjyDRgdGB0YvQu9C60LA6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiCittc2dzdHIgItCyINC00LXRgNC10LLQtSDQvdC10YIg0YLQsNC60L7QuSDRgdGB0YvQu9C60Lg6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI5MgorbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC/0YPRgtC4INC/0YDQuCDQv9C10YDQtdC60LvRjtGH0LXQvdC40Lgg0LLQtdGC0L7QuiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyOTUgYnVpbHRpbi9jaGVja291dC5jOjEyOTkgYnVpbHRpbi9jaGVja291dC5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDCqyVzwrsg0L/RgNC4INC/0LXRgNC10LrQu9GO0YfQtdC90LjQuCDQstC10YLQvtC6IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMwNyBidWlsdGluL2NoZWNrb3V0LmM6MTMxMCBidWlsdGluL2NoZWNrb3V0LmM6MTMxNQorIzogYnVpbHRpbi9jaGVja291dC5jOjEzMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIsKrJXPCuyDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICLQndC10LvRjNC30Y8g0L/QtdGA0LXQutC70Y7Rh9C40YLRjCDQstC10YLQutGDINC90LAg0L3QtSDQutC+0LzQvNC40YIgwqslc8K7IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1NiBidWlsdGluL2NoZWNrb3V0LmM6MTM1OCBidWlsdGluL2Nsb25lLmM6MTE4CisjOiBidWlsdGluL3JlbW90ZS5jOjE2OSBidWlsdGluL3JlbW90ZS5jOjE3MSBidWlsdGluL3dvcmt0cmVlLmM6NDkyCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk0Cittc2dpZCAiYnJhbmNoIgorbXNnc3RyICLQstC10YLQutCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1NworbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICLRgdC+0LfQtNCw0YLRjCDQuCDQv9C10YDQtdC60LvRjtGH0LjRgtGM0YHRjyDQvdCwINC90L7QstGD0Y4g0LLQtdGC0LrRgyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNTkKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIGNoZWNrb3V0IGEgYnJhbmNoIgorbXNnc3RyICLRgdC+0LfQtNCw0YLRjC/RgdCx0YDQvtGB0LjRgtGMINC4INC/0LXRgNC60LvRjtGH0LjRgtGM0YHRjyDQvdCwINC90L7QstGD0Y4g0LLQtdGC0LrRgyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjAKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLRgdC+0LfQtNCw0YLRjCDQttGD0YDQvdCw0Lsg0YHRgdGL0LvQvtC6INC00LvRjyDQvdC+0LLQvtC5INCy0LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzYxIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTYKK21zZ2lkICJkZXRhY2ggSEVBRCBhdCBuYW1lZCBjb21taXQiCittc2dzdHIgItC+0YLRgdC+0LXQtNC40L3QuNGC0YwgSEVBRCDQvdCwINGD0LrQsNC30LDQvdC90L7QvCDQutC+0LzQvNC40YLQtSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjIKK21zZ2lkICJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAi0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC1INC00LvRjyDQvdC+0LLQvtC5INCy0LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY0Cittc2dpZCAibmV3LWJyYW5jaCIKK21zZ3N0ciAi0L3QvtCy0LDRjy3QstC10YLQutCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2NAorbXNnaWQgIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIKK21zZ3N0ciAi0L3QvtCy0LDRjyDQstC10YLQutCwINCx0LXQtyDRgNC+0LTQuNGC0LXQu9C10LkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY2Cittc2dpZCAiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICLQv9C10YDQtdC60LvRjtGH0LjRgtGM0YHRjyDQvdCwINC90LDRiNGDINCy0LXRgNGB0LjRjiDQtNC70Y8g0L3QtSDRgdC70LjRgtGL0YUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2OQorbXNnaWQgImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICLQv9C10YDQtdC60LvRjtGH0LjRgtGM0YHRjyDQvdCwINC40YUg0LLQtdGA0YHQuNGOINC00LvRjyDQvdC1INGB0LvQuNGC0YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzcxCittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+0LUg0L/QtdGA0LXQutC70Y7Rh9C10L3QuNC1INC90LAg0YHQvtGB0YLQvtGP0L3QuNC1ICjQvtGC0LHRgNCw0YHRi9Cy0LDQtdGCINCy0YHQtSDQu9C+0LrQsNC70YzQvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzMKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAi0LLRi9C/0L7Qu9C90LjRgtGMINGC0YDQtdGF0YXQvtC00L7QstC+0LUg0YHQu9C40Y/QvdC40LUg0YEg0L3QvtCy0L7QuSDQstC10YLQutC+0LkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzc1IGJ1aWx0aW4vbWVyZ2UuYzoyODQKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgItC+0LHQvdC+0LLQuNGC0Ywg0LjQs9C90L7RgNC40YDRg9C10LzRi9C1INGE0LDQudC70YsgKNC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzcgYnVpbHRpbi9sb2cuYzoxNTk0IHBhcnNlLW9wdGlvbnMuaDozMTcKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAi0YHRgtC40LvRjCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzgKK21zZ2lkICJjb25mbGljdCBzdHlsZSAobWVyZ2Ugb3IgZGlmZjMpIgorbXNnc3RyICLRgdGC0LjQu9GMINC60L7QvdGE0LvQuNC60YLQvtCyINGB0LvQuNGP0L3QuNGPIChtZXJnZSDQuNC70LggZGlmZjMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4MQorbXNnaWQgImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIKK21zZ3N0ciAi0L3QtSDQvtCz0YDQsNC90LjRh9C40LLQsNGC0Ywg0YHQv9C10YbQuNGE0LjQutCw0YLQvtGA0Ysg0L/Rg9GC0Lgg0YLQvtC70YzQutC+INGH0LDRgdGC0LjRh9C90YvQvNC4INC30LDQv9C40YHRj9C80LgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgzCittc2dpZCAiZG8gbm90IHNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzg1Cittc2dpZCAiZG8gbm90IGNoZWNrIGlmIGFub3RoZXIgd29ya3RyZWUgaXMgaG9sZGluZyB0aGUgZ2l2ZW4gcmVmIgorbXNnc3RyICLQvdC1INC/0YDQvtCy0LXRgNGP0YLRjCwg0YfRgtC+INC00YDRg9Cz0L7QtSDQtNC10YDQtdCy0L4g0YPQttC1INGB0L7QtNC10YDQttC40YIg0YPQutCw0LfQsNC90L3Rg9GOINGB0YHRi9C70LrRgyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODkgYnVpbHRpbi9jbG9uZS5jOjg4IGJ1aWx0aW4vZmV0Y2guYzoxNDEKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODEgYnVpbHRpbi9wdWxsLmM6MTM2IGJ1aWx0aW4vcHVzaC5jOjU3NQorIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzQKK21zZ2lkICJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+INCy0YvQstC+0LTQuNGC0Ywg0L/RgNC+0LPRgNC10YHRgSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzOTAKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQyMgorbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWIsIC1CINC4IC0tb3JwaGFuINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQyNQorbXNnaWQgIi1wIGFuZCAtLW92ZXJsYXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ0MgorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS10cmFjayDRgtGA0LXQsdGD0LXRgiDQuNC80Y8g0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NDcKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgItC/0YDQvtC/0YPRidC10L3QviDQuNC80Y8g0LLQtdGC0LrQuDsg0L/QvtC/0YDQvtCx0YPQudGC0LUgLWIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg0Cittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80YvQuSDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YAg0L/Rg9GC0LgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIsKrJXPCuyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LrQvtC80LzQuNGC0L7QvCwg0L/QvtGN0YLQvtC80YMg0L3QtdCy0L7Qt9C80L7QttC90L4g0YHQvtC30LTQsNGC0Ywg0LjQtyDQvdC10LPQviDQstC10YLQutGDIMKrJXPCuyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoINC90LUg0L/RgNC40L3QuNC80LDQtdGCINC/0YPRgtGMIMKrJXPCuyDQutCw0Log0LDRgNCz0YPQvNC10L3RgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0OTkKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INC/0YDQuCDQv9GA0LjQvNC10L3QtdC90LjQuCDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQvdC00LXQutGB0LAuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBtYXRjaGVkIG1vcmUgdGhhbiBvbmUgcmVtb3RlIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJXZSBmb3VuZCAlZCByZW1vdGVzIHdpdGggYSByZWZlcmVuY2UgdGhhdCBtYXRjaGVkLiBTbyB3ZSBmZWxsIGJhY2tcbiIKKyJvbiB0cnlpbmcgdG8gcmVzb2x2ZSB0aGUgYXJndW1lbnQgYXMgYSBwYXRoLCBidXQgZmFpbGVkIHRoZXJlIHRvbyFcbiIKKyJcbiIKKyJJZiB5b3UgbWVhbnQgdG8gY2hlY2sgb3V0IGEgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBvbiwgZS5nLiAnb3JpZ2luJyxcbiIKKyJ5b3UgY2FuIGRvIHNvIGJ5IGZ1bGx5IHF1YWxpZnlpbmcgdGhlIG5hbWUgd2l0aCB0aGUgLS10cmFjayBvcHRpb246XG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtZT5cbiIKKyJcbiIKKyJJZiB5b3UnZCBsaWtlIHRvIGFsd2F5cyBoYXZlIGNoZWNrb3V0cyBvZiBhbiBhbWJpZ3VvdXMgPG5hbWU+IHByZWZlclxuIgorIm9uZSByZW1vdGUsIGUuZy4gdGhlICdvcmlnaW4nIHJlbW90ZSwgY29uc2lkZXIgc2V0dGluZ1xuIgorImNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIGluIHlvdXIgY29uZmlnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MjgKK21zZ2lkICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA80YjQsNCx0LvQvtC9Pl0gWy14IHwgLVhdIFstLV0gPNC/0YPRgtC4PuKApiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICLQkdGD0LTQtdGCINGD0LTQsNC70LXQvdC+ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgItCf0YDQvtC/0YPRgdC6INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICLQkdGD0LTQtdGCINC/0YDQvtC/0YPRidC10L0g0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAi0YHQsdC+0Lkg0YPQtNCw0LvQtdC90LjRjyAlcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjI5OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nXG4iCittc2dzdHIgItCh0L/RgNCw0LLQutCwINC/0L4g0LLRi9C00LXQu9C10L3QuNGOOlxuMSAgICAgICAgICAtINCy0YvQsdGA0LDRgtGMINGD0LrQsNC30LDQvdC90YvQuSDRjdC70LXQvNC10L3RglxuZm9vICAgICAgICAtINCy0YvQsdGA0LDRgtGMINGN0LvQtdC80LXQvdGCINGBINGD0LrQsNC30LDQvdC90YvQvCDQv9GA0LXRhNC40LrRgdC+0LxcbiAgICAgICAgICAgLSAo0L/Rg9GB0YLQvikg0L3QtSDQstGL0LHQuNGA0LDRgtGMINC90LjRh9C10LPQvlxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzAzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZ1xuIgorbXNnc3RyICLQodC/0YDQsNCy0LrQsCDQv9C+INCy0YvQtNC10LvQtdC90LjRjjpcbjEgICAgICAgICAgLSDQstGL0LHRgNCw0YLRjCDQvtC00LjQvSDRjdC70LXQvNC10L3RglxuMy01ICAgICAgICAtINCy0YvQsdGA0LDRgtGMINC00LjQsNC/0LDQt9C+0L0g0Y3Qu9C10LzQtdC90YLQvtCyXG4yLTMsNi05ICAgIC0g0LLRi9Cx0YDQsNGC0Ywg0L3QtdGB0LrQvtC70YzQutC+INC00LjQsNC/0LDQt9C+0L3QvtCyXG5mb28gICAgICAgIC0g0LLRi9Cx0YDQsNGC0Ywg0Y3Qu9C10LzQtdC90YIg0YEg0YPQutCw0LfQsNC90L3Ri9C8INC/0YDQtdGE0LjQutGB0L7QvFxuLeKApiAgICAgICAtINGD0LHRgNCw0YLRjCDQstGL0LTQtdC70LXQvdC40LUg0YEg0YPQutCw0LfQsNC90L3Ri9GFINGN0LvQtdC80LXQvdGC0L7QslxuKiAgICAgICAgICAtINCy0YvQsdGA0LDRgtGMINCy0YHQtSDRjdC70LXQvNC10L3RgtGLXG4gICAgICAgICAgIC0gKNC/0YPRgdGC0L4pINC30LDQstC10YDRiNC40YLRjCDQstGL0LTQtdC70LXQvdC40LVcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjUxOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU1NAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NTkKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpP1xuIgorbXNnc3RyICLQpdC8ICglcyk/XG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIgorbXNnc3RyICLQqNCw0LHQu9C+0L3RiyDQuNCz0L3QvtGA0LjRgNC+0LLQsNC90LjRjyDQstCy0L7QtNCwPj4gIgorCisjOiBidWlsdGluL2NsZWFuLmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0Y3Qu9C10LzQtdC90YLRiyDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC40LU6ICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzE5Cittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAi0KPQutCw0LbQuNGC0LUg0Y3Qu9C10LzQtdC90YLRiyDQtNC70Y8g0YPQtNCw0LvQtdC90LjRjyIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBrZWVwIFt5L05dIGFzIGlzCisjOiBidWlsdGluL2NsZWFuLmM6NzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92ZSAlcyBbeS9OXT8gIgorbXNnc3RyICLQo9C00LDQu9C40YLRjCAlcyBbeSAtINC00LAvTiAtINC90LXRgl0/ICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjc4NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnllLlxuIgorbXNnc3RyICLQlNC+INGB0LLQuNC00LDQvdC40Y8uXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3OTMKK21zZ2lkICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKK21zZ3N0ciAiY2xlYW4gICAgICAgICAgICAgICAtINC90LDRh9Cw0YLRjCDQvtGH0LjRgdGC0LrRg1xuZmlsdGVyIGJ5IHBhdHRlcm4gICAtINC40YHQutC70Y7Rh9C40YLRjCDRg9C00LDQu9C10L3QuNC1INGN0LvQtdC80LXQvdGC0L7Qslxuc2VsZWN0IGJ5IG51bWJlcnMgICAtINC40YHQutC70Y7Rh9C40YLRjCDRg9C00LDQu9C10L3QuNC1INGN0LvQtdC80LXQvdGC0L7QsiDQv9C+INC90L7QvNC10YDQsNC8XG5hc2sgZWFjaCAgICAgICAgICAgIC0g0LfQsNC/0YDQsNGI0LjQstCw0YLRjCDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjQtSDQvdCwINGD0LTQsNC70LXQvdC40LUg0LrQsNC20LTQvtCz0L4g0Y3Qu9C10LzQtdC90YLQsCAo0LrQsNC6IMKrcm0gLWnCuylcbnF1aXQgICAgICAgICAgICAgICAgLSDQv9GA0LXQutGA0LDRgtC40YLRjCDQvtGH0LjRgdGC0LrRg1xuaGVscCAgICAgICAgICAgICAgICAtINGN0YLQvtGCINGN0LrRgNCw0L1cbj8gICAgICAgICAgICAgICAgICAgLSDRgdC/0YDQsNCy0LrQsCDQv9C+INCy0YvQtNC10LvQtdC90LjRjiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgyMCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTMKK21zZ2lkICIqKiogQ29tbWFuZHMgKioqIgorbXNnc3RyICIqKiog0JrQvtC80LDQvdC00YsgKioqIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODIxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5MAorbXNnaWQgIldoYXQgbm93IgorbXNnc3RyICLQp9GC0L4g0YLQtdC/0LXRgNGMIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODI5Cittc2dpZCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbToiCittc2dpZF9wbHVyYWwgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW1zOiIKK21zZ3N0clswXSAi0KPQtNCw0LvQuNGC0Ywg0YHQu9C10LTRg9GO0YnQuNC1INGN0LvQtdC80LXQvdGC0Ys6IgorbXNnc3RyWzFdICLQo9C00LDQu9C40YLRjCDRgdC70LXQtNGD0Y7RidC40LUg0Y3Qu9C10LzQtdC90YLRizoiCittc2dzdHJbMl0gItCj0LTQsNC70LjRgtGMINGB0LvQtdC00YPRjtGJ0LjQtSDRjdC70LXQvNC10L3RgtGLOiIKK21zZ3N0clszXSAi0KPQtNCw0LvQuNGC0Ywg0YHQu9C10LTRg9GO0YnQuNC1INGN0LvQtdC80LXQvdGC0Ys6IgorCisjOiBidWlsdGluL2NsZWFuLmM6ODQ1Cittc2dpZCAiTm8gbW9yZSBmaWxlcyB0byBjbGVhbiwgZXhpdGluZy4iCittc2dzdHIgItCR0L7Qu9GM0YjQtSDQvdC10YIg0YTQsNC50LvQvtCyINC00LvRjyDQvtGH0LjRgdGC0LrQuCwg0LLRi9GF0L7QtNC40LwuIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA3Cittc2dpZCAiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiCittc2dzdHIgItC90LUg0LLRi9Cy0L7QtNC40YLRjCDQuNC80LXQvdCwINGD0LTQsNC70Y/QtdC80YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDkKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTAKK21zZ2lkICJpbnRlcmFjdGl2ZSBjbGVhbmluZyIKK21zZ3N0ciAi0LjQvdGC0LXRgNCw0LrRgtC40LLQvdCw0Y8g0L7Rh9C40YHRgtC60LAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTIKK21zZ2lkICJyZW1vdmUgd2hvbGUgZGlyZWN0b3JpZXMiCittc2dzdHIgItGD0LTQsNC70LjRgtGMINC60LDRgtCw0LvQvtCz0Lgg0L/QvtC70L3QvtGB0YLRjNGOIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTEzIGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDYgYnVpbHRpbi9kZXNjcmliZS5jOjU0OAorIzogYnVpbHRpbi9ncmVwLmM6ODk3IGJ1aWx0aW4vbG9nLmM6MTcxIGJ1aWx0aW4vbG9nLmM6MTczCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MTcgYnVpbHRpbi9uYW1lLXJldi5jOjQxOQorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgItGI0LDQsdC70L7QvSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNAorbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMIDzRiNCw0LHQu9C+0L0+INCyINC/0YDQsNCy0LjQu9CwINC40LPQvdC+0YDQuNGA0L7QstCw0L3QuNGPIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1Cittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAi0YLQsNC60LbQtSDRg9C00LDQu9C40YLRjCDQuNCz0L3QvtGA0LjRgNGD0LXQvNGL0LUg0YTQsNC50LvRiyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNworbXNnaWQgInJlbW92ZSBvbmx5IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgItGD0LTQsNC70LjRgtGMINGC0L7Qu9GM0LrQviDQuNCz0L3QvtGA0LjRgNGD0LXQvNGL0LUg0YTQsNC50LvRiyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkzNQorbXNnaWQgIi14IGFuZCAtWCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4gLXgg0LggLVgiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzkKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byIKKyIgY2xlYW4iCittc2dzdHIgImNsZWFuLnJlcXVpcmVGb3JjZSDRg9GB0YLQsNC90L7QstC70LXQvSDQutCw0LogdHJ1ZSDQuCDQvdC4INC+0LTQvdCwINC40Lcg0L7Qv9GG0LjQuSAtaSwgLW4g0LjQu9C4IC1mINC90LUg0YPQutCw0LfQsNC90LA7INC+0YLQutCw0Lcg0L7Rh9C40YHRgtC60LgiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDIKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKyJyZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiY2xlYW4ucmVxdWlyZUZvcmNlINGD0YHRgtCw0L3QvtCy0LvQtdC9INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOINC60LDQuiB0cnVlINC4INC90Lgg0L7QtNC90LAg0LjQtyDQvtC/0YbQuNC5IC1pLCAtbiDQuNC70LggLWYg0L3QtSDRg9C60LDQt9Cw0L3QsDsg0L7RgtC60LDQtyDQvtGH0LjRgdGC0LrQuCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ0Cittc2dpZCAiZ2l0IGNsb25lIFs8b3B0aW9ucz5dIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgImdpdCBjbG9uZSBbPNC+0L/RhtC40Lg+XSBbLS1dIDzRgNC10L/QvtC30LjRgtC+0YDQuNC5PiBbPNC60LDRgtCw0LvQvtCzPl0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MAorbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICLQvdC1INC/0LXRgNC10LrQu9GO0YfQsNGC0Ywg0YDQsNCx0L7Rh9GD0Y4g0LrQvtC/0LjRjiDQvdCwIEhFQUQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MSBidWlsdGluL2Nsb25lLmM6OTMgYnVpbHRpbi9pbml0LWRiLmM6NDg5Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICLRgdC+0LfQtNCw0YLRjCDQs9C+0LvRi9C5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NQorbXNnaWQgImNyZWF0ZSBhIG1pcnJvciByZXBvc2l0b3J5IChpbXBsaWVzIGJhcmUpIgorbXNnc3RyICLRgdC+0LfQtNCw0YLRjCDQt9C10YDQutCw0LvQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPICjQstC60LvRjtGH0LDQtdGCINCyINGB0LXQsdGPINC4INC/0LDRgNCw0LzQtdGC0YAgYmFyZSkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NworbXNnaWQgInRvIGNsb25lIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLQtNC70Y8g0LrQu9C+0L3QuNGA0L7QstCw0L3QuNGPINC40Lcg0LvQvtC60LDQu9GM0L3QvtCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5Cittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgItC90LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC20LXRgdGC0LrQuNC1INGB0YHRi9C70LrQuCwg0LLRgdC10LPQtNCwINC60L7Qv9C40YDQvtCy0LDRgtGMINGE0LDQudC70YsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDEKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0L3QsNGB0YLRgNC+0LjRgtGMINC60LDQuiDQvtCx0YnQtdC00L7RgdGC0YPQv9C90YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA0Cittc2dpZCAicGF0aHNwZWMiCittc2dzdHIgItGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgC3Qv9GD0YLQuCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNAorbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgItC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDRgtGMINC/0L7QtNC80L7QtNGD0LvQuCDQsiDQutC70L7QvdC1IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgY2xvbmVkIGluIHBhcmFsbGVsIgorbXNnc3RyICLQutC+0LvQuNGH0LXRgdGC0LLQviDQv9C+0LTQvNC+0LTRg9C70LXQuSwg0LrQvtGC0L7RgNGL0LUg0LHRg9C00YPRgiDQutC70L7QvdC40YDQvtCy0LDQvdGLINC/0LDRgNGA0LDQu9C10LvRjNC90L4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDggYnVpbHRpbi9pbml0LWRiLmM6NDg2Cittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICLQutCw0YLQsNC70L7Qsy3RiNCw0LHQu9C+0L3QvtCyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA5IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NworbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgItC60LDRgtCw0LvQvtCzLCDRiNCw0LHQu9C+0L3RiyDQuNC3INC60L7RgtC+0YDQvtCz0L4g0LHRg9C00YPRgiDQuNGB0L/QvtC70YzQt9C+0LLQsNC90YsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTEgYnVpbHRpbi9jbG9uZS5jOjExMyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM3OQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NTkKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0YHRgdGL0LvQsNC10LzRi9C5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODYxCittc2dpZCAidXNlIC0tcmVmZXJlbmNlIG9ubHkgd2hpbGUgY2xvbmluZyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSAtLXJlZmVyZW5jZSDRgtC+0LvRjNC60L4g0L/RgNC4INC60LvQvtC90LjRgNC+0LLQsNC90LjQuCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNiBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ2CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDYgYnVpbHRpbi9yZXBhY2suYzozMjkKK21zZ2lkICJuYW1lIgorbXNnc3RyICLQuNC80Y8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTcKK21zZ2lkICJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCA80LjQvNGPPiDQstC80LXRgdGC0L4gwqtvcmlnaW7CuyDQtNC70Y8g0L7RgtGB0LvQtdC20LjQstCw0L3QuNGPINCy0YvRiNC10YHRgtC+0Y/RidC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE5Cittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAi0L/QtdGA0LXQutC70Y7Rh9C40YLRjNGB0Y8g0L3QsCA80LLQtdGC0LrRgz4sINCy0LzQtdGB0YLQviBIRUFEINCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMQorbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgItC/0YPRgtGMINC6IGdpdC11cGxvYWQtcGFjayDQvdCwINCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjIgYnVpbHRpbi9mZXRjaC5jOjE0MiBidWlsdGluL2dyZXAuYzo4MzYKKyM6IGJ1aWx0aW4vcHVsbC5jOjIyNQorbXNnaWQgImRlcHRoIgorbXNnc3RyICLQs9C70YPQsdC40L3QsCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMworbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAi0YHQtNC10LvQsNGC0Ywg0YfQsNGB0YLQuNGH0L3Ri9C5INC60LvQvtC9INGD0LrQsNC30LDQvdC90L7QuSDQs9C70YPQsdC40L3RiyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNCBidWlsdGluL2ZldGNoLmM6MTQ0IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NQorbXNnaWQgInRpbWUiCittc2dzdHIgItCy0YDQtdC80Y8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjUKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIHNpbmNlIGEgc3BlY2lmaWMgdGltZSIKK21zZ3N0ciAi0YHQtNC10LvQsNGC0Ywg0YfQsNGB0YLQuNGH0L3Ri9C5INC60LvQvtC9INC00L4g0L7Qv9GA0LXQtNC10LvQtdC90L3QvtCz0L4g0LLRgNC10LzQtdC90LgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjYgYnVpbHRpbi9mZXRjaC5jOjE0NiBidWlsdGluL2ZldGNoLmM6MTY5CisjOiBidWlsdGluL3JlYmFzZS5jOjEzODkKK21zZ2lkICJyZXZpc2lvbiIKK21zZ3N0ciAi0YDQtdC00LDQutGG0LjRjyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNyBidWlsdGluL2ZldGNoLmM6MTQ3Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSwgZXhjbHVkaW5nIHJldiIKK21zZ3N0ciAi0YPQs9C70YPQsdC40YLRjCDQuNGB0YLQvtGA0LjRjiDRh9Cw0YHRgtC40YfQvdC+0LPQviDQutC70L7QvdCwINC40YHQutC70Y7Rh9Cw0Y8g0YDQtdC00LDQutGG0LjRjiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOQorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAi0LrQu9C+0L3QuNGA0L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0L7QtNC90YMg0LLQtdGC0LrRgywgSEVBRCDQuNC70LggLS1icmFuY2giCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzEKK21zZ2lkICJkb24ndCBjbG9uZSBhbnkgdGFncywgYW5kIG1ha2UgbGF0ZXIgZmV0Y2hlcyBub3QgdG8gZm9sbG93IHRoZW0iCittc2dzdHIgItC90LUg0LrQu9C+0L3QuNGA0L7QstCw0YLRjCDQvNC10YLQutC4LCDQsCDRgtCw0LrQttC1INC90LDRgdGC0YDQvtC40YLRjCwg0YfRgtC+0LHRiyDQvdC1INC60LvQvtC90LjRgNC+0LLQsNC70LjRgdGMINC4INCyINC00LDQu9GM0L3QtdC50YjQtdC8IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMzCittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgYmUgc2hhbGxvdyIKK21zZ3N0ciAi0LLRgdC1INGB0LrQu9C+0L3QuNGA0L7QstCw0L3QvdGL0LUg0L/QvtC00LzQvtC00YPQu9C4INCx0YPQtNGD0YIg0YfQsNGB0YLQuNGH0L3Ri9C80Lgg0LrQu9C+0L3QsNC80LgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzQgYnVpbHRpbi9pbml0LWRiLmM6NDk1Cittc2dpZCAiZ2l0ZGlyIgorbXNnc3RyICLQutCw0YLQsNC70L7Qsy1naXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzUgYnVpbHRpbi9pbml0LWRiLmM6NDk2Cittc2dpZCAic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0YDQsNC30LzQtdGB0YLQuNGC0Ywg0LrQsNGC0LDQu9C+0LMgZ2l0INC+0YLQtNC10LvRjNC90L4g0L7RgiDRgNCw0LHQvtGH0LXQuSDQutC+0L/QuNC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM2Cittc2dpZCAia2V5PXZhbHVlIgorbXNnc3RyICLQutC70Y7Rhz3Qt9C90LDRh9C10L3QuNC1IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3Cittc2dpZCAic2V0IGNvbmZpZyBpbnNpZGUgdGhlIG5ldyByZXBvc2l0b3J5IgorbXNnc3RyICLRg9GB0YLQsNC90L7QstC40YLRjCDQv9Cw0YDQsNC80LXRgtGA0Ysg0LLQvdGD0YLRgNC4INC90L7QstC+0LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM5IGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorIzogYnVpbHRpbi9wdXNoLmM6NTg1IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTcyCittc2dpZCAic2VydmVyLXNwZWNpZmljIgorbXNnc3RyICLQt9Cw0LLQuNGB0LjRgi3QvtGCLdGB0LXRgNCy0LXRgNCwIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM5IGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorIzogYnVpbHRpbi9wdXNoLmM6NTg1IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTczCittc2dpZCAib3B0aW9uIHRvIHRyYW5zbWl0IgorbXNnc3RyICLQv9C10YDQtdC00LDQstCw0LXQvNGL0LUg0L7Qv9GG0LjQuCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MCBidWlsdGluL2ZldGNoLmM6MTY1IGJ1aWx0aW4vcHVsbC5jOjIzOAorIzogYnVpbHRpbi9wdXNoLmM6NTg2Cittc2dpZCAidXNlIElQdjQgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4gSVB2NCDQsNC00YDQtdGB0LAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE2NyBidWlsdGluL3B1bGwuYzoyNDEKKyM6IGJ1aWx0aW4vcHVzaC5jOjU4OAorbXNnaWQgInVzZSBJUHY2IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+IElQdjYg0LDQtNGA0LXRgdCwIgorCisjOiBidWlsdGluL2Nsb25lLmM6MjgwCittc2dpZCAiIgorIk5vIGRpcmVjdG9yeSBuYW1lIGNvdWxkIGJlIGd1ZXNzZWQuXG4iCisiUGxlYXNlIHNwZWNpZnkgYSBkaXJlY3Rvcnkgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAi0JjQvNGPINC60LDRgtCw0LvQvtCz0LAg0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINGD0LPQsNC00LDQvdC+Llxu0KPQutCw0LbQuNGC0LUg0LjQvNGPINC60LDRgtCw0LvQvtCz0LAg0YEg0L/QvtC80L7RidGM0Y4g0L/QsNGA0LDQvNC10YLRgNCwINC60L7QvNCw0L3QtNC90L7QuSDRgdGC0YDQvtC60LgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbzogQ291bGQgbm90IGFkZCBhbHRlcm5hdGUgZm9yICclcyc6ICVzXG4iCittc2dzdHIgItC40L3RhNC+0YDQvNCw0YbQuNGPOiDQndC1INGD0LTQsNC70L7RgdGMINC00L7QsdCw0LLQuNGC0Ywg0LDQu9GM0YLQtdGA0L3QsNGC0LjQstGDINC00LvRjyDCqyVzwrs6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiDQuCDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LrQsNGC0LDQu9C+0LPQvtC8IgorCisjOiBidWlsdGluL2Nsb25lLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzXG4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIHN0YXQgJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgItGB0LHQvtC5INC+0YLRgdC+0LXQtNC40L3QtdC90LjRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0YHRgdGL0LvQutGDIMKrJXPCuyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0YTQsNC50Lsg0LIgwqslc8K7IgorCisjOiBidWlsdGluL2Nsb25lLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgItCz0L7RgtC+0LLQvi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ5MworbXNnaWQgIiIKKyJDbG9uZSBzdWNjZWVkZWQsIGJ1dCBjaGVja291dCBmYWlsZWQuXG4iCisiWW91IGNhbiBpbnNwZWN0IHdoYXQgd2FzIGNoZWNrZWQgb3V0IHdpdGggJ2dpdCBzdGF0dXMnXG4iCisiYW5kIHJldHJ5IHRoZSBjaGVja291dCB3aXRoICdnaXQgY2hlY2tvdXQgLWYgSEVBRCdcbiIKK21zZ3N0ciAi0JrQu9C+0L3QuNGA0L7QstCw0L3QuNC1INC/0YDQvtGI0LvQviDRg9GB0L/QtdGI0L3Qviwg0L3QviDQstC+INCy0YDQtdC80Y8g0L/QtdGA0LXQutC70Y7Rh9C10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDQv9GA0L7QuNC30L7RiNC70LAg0L7RiNC40LHQutCwLlxu0KEg0L/QvtC80L7RidGMINC60L7QvNCw0L3QtNGLIMKrZ2l0IHN0YXR1c8K7INCy0Ysg0LzQvtC20LXRgtC1INC/0YDQvtGB0LzQvtGC0YDQtdGC0YwsINC60LDQutC40LUg0YTQsNC50LvRiyDQsdGL0LvQuCDQvtCx0L3QvtCy0LvQtdC90YssXG7QsCDRgSDQv9C+0LzQvtGJ0YzRjiDCq2dpdCBjaGVja291dCAtZiBIRUFEwrsg0LzQvtC20L3QviDQv9C+0LLRgtC+0YDQuNGC0Ywg0L/QvtC/0YvRgtC60YMg0L/QtdGA0LXQutC70Y7Rh9C10L3QuNGPINC90LAg0LLQtdGC0LrRgyBcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU3MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INCy0L3QtdGI0L3RjtGOINCy0LXRgtC60YMgJXMg0LTQu9GPINC60LvQvtC90LjRgNC+0LLQsNC90LjRjy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMICVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzM5Cittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICLQstC90LXRiNC90LjQuSBIRUFEINGB0YHRi9C70LDQtdGC0YHRjyDQvdCwINC90LXRgdGD0YnQtdGB0YLQstGD0Y7RidGD0Y4g0YHRgdGL0LvQutGDLCDQvdC10LvRjNC30Y8g0L/QtdGA0LXQutC70Y7Rh9C40YLRjNGB0Y8g0L3QsCDRgtCw0LrRg9GOINCy0LXRgNGB0LjRji5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc3MAorbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQutC70Y7Rh9C40YLRjNGB0Y8g0L3QsCDQstC10YDRgdC40Y4g0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgxNQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0L/QsNGA0LDQvNC10YLRgNGLINCyINGE0LDQudC7INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg3OAorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMINC/0LXRgNC10L/QsNC60L7QstC60YMg0LTQu9GPINC+0YfQuNGB0YLQutC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODgwCittc2dpZCAiY2Fubm90IHVubGluayB0ZW1wb3JhcnkgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLRgdC+0LXQtNC40L3QuNGC0Ywg0LLRgNC10LzQtdC90L3Ri9C1INCw0LvRjNGC0LXRgNC90LDRgtC40LLQvdGL0LUg0YTQsNC50LvRiyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyMCBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NTIKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICLQodC70LjRiNC60L7QvCDQvNC90L7Qs9C+INCw0YDQs9GD0LzQtdC90YLQvtCyLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNAorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAi0JLRiyDQtNC+0LvQttC90Ysg0YPQutCw0LfQsNGC0Ywg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQtNC70Y8g0LrQu9C+0L3QuNGA0L7QstCw0L3QuNGPLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkzNworIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIi0tYmFyZSDQuCAtLW9yaWdpbiAlcyDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NDAKK21zZ2lkICItLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpciBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiLS1iYXJlINC4IC0tc2VwYXJhdGUtZ2l0LWRpciDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLRgNC10L/QvtC30LjRgtC+0YDQuNC5IMKrJXPCuyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTU5IGJ1aWx0aW4vZmV0Y2guYzoxNjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAi0LPQu9GD0LHQuNC90LAgJXMg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3Ri9C8INGH0LjRgdC70L7QvCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2OQorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICLRhtC10LvQtdCy0L7QuSDQv9GD0YLRjCDCqyVzwrsg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCINC4INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQv9GD0YHRgtGL0Lwg0LrQsNGC0LDQu9C+0LPQvtC8LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3b3JraW5nIHRyZWUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIMKrJXPCuyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTk0IGJ1aWx0aW4vY2xvbmUuYzoxMDE1IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNjQKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyOTYgYnVpbHRpbi93b3JrdHJlZS5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDRgNC+0LTQuNGC0LXQu9GM0YHQutC40LUg0LrQsNGC0LDQu9C+0LPQuCDQtNC70Y8gwqslc8K7IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTk5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIMKrJXPCuyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnJXMnLi4uXG4iCittc2dzdHIgItCa0LvQvtC90LjRgNC+0LLQsNC90LjQtSDQsiDQs9C+0LvRi9C5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkgwqslc8K74oCmXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgItCa0LvQvtC90LjRgNC+0LLQsNC90LjQtSDQsiDCqyVzwrvigKZcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNDUKK21zZ2lkICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBib3RoIC0tcmVmZXJlbmNlIGFuZCAtLXJlZmVyZW5jZS0iCisiaWYtYWJsZSIKK21zZ3N0ciAi0LrQu9C+0L3QuNGA0L7QstCw0L3QuNC1INGBINC/0LDRgNCw0LzQtdGC0YDQvtC8IC0tcmVjdXJzaXZlINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INC90Lgg0YEgLS1yZWZlcmVuY2UsINC90Lgg0YEgLS1yZWZlcmVuY2UtaWYtYWJsZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMDYKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1kZXB0aCDQuNCz0L3QvtGA0LjRgNGD0LXRgtGB0Y8g0L3QsCDQu9C+0LrQsNC70YzQvdGL0YUg0LrQu9C+0L3QsNGFOyDQstC80LXRgdGC0L4g0Y3RgtC+0LPQviDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IGZpbGU6Ly8uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEwOAorbXNnaWQgIi0tc2hhbGxvdy1zaW5jZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tc2hhbGxvdy1zaW5jZSDQuNCz0L3QvtGA0LjRgNGD0LXRgtGB0Y8g0L3QsCDQu9C+0LrQsNC70YzQvdGL0YUg0LrQu9C+0L3QsNGFOyDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IGZpbGU6Ly8g0LLQvNC10YHRgtC+INGN0YLQvtCz0L4uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTExMAorbXNnaWQgIi0tc2hhbGxvdy1leGNsdWRlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1zaGFsbG93LWV4Y2x1ZGUg0LjQs9C90L7RgNC40YDRg9C10YLRgdGPINC90LAg0LvQvtC60LDQu9GM0L3Ri9GFINC60LvQvtC90LDRhTsg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSBmaWxlOi8vINCy0LzQtdGB0YLQviDRjdGC0L7Qs9C+LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMTIKK21zZ2lkICItLWZpbHRlciBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMTUKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICLQuNGB0YXQvtC00L3Ri9C5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0Y/QstC70Y/QtdGC0YHRjyDRh9Cw0YHRgtC40YfQvdGL0LwsIC0tbG9jYWwg0LjQs9C90L7RgNC40YDRg9C10YLRgdGPIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEyMAorbXNnaWQgIi0tbG9jYWwgaXMgaWdub3JlZCIKK21zZ3N0ciAiLS1sb2NhbCDQuNCz0L3QvtGA0LjRgNGD0LXRgtGB0Y8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTk3IGJ1aWx0aW4vY2xvbmUuYzoxMjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW90ZSBicmFuY2ggJXMgbm90IGZvdW5kIGluIHVwc3RyZWFtICVzIgorbXNnc3RyICLQktC90LXRiNC90Y/RjyDQstC10YLQutCwICVzINC90LUg0L3QsNC50LTQtdC90LAg0LIg0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4ICVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIwOAorbXNnaWQgIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iCittc2dzdHIgItCf0L7RhdC+0LbQtSwg0YfRgtC+INCy0Ysg0LrQu9C+0L3QuNGA0L7QstCw0LvQuCDQv9GD0YHRgtC+0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuS4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MTAKK21zZ2lkICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29sdW1uIFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICLQt9Cw0L/RgNC+0YHQuNGC0Ywg0L/QtdGA0LXQvNC10L3QvdGL0LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI4IGJ1aWx0aW4vY29sdW1uLmM6MjkKK21zZ2lkICJsYXlvdXQgdG8gdXNlIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YHRhdC10LzRgyDRgNCw0YHQv9C+0LvQvtC20LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJNYXhpbXVtIHdpZHRoIgorbXNnc3RyICLQnNCw0LrRgdC40LzQsNC70YzQvdCw0Y8g0YjQuNGA0LjQvdCwIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMxCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIKK21zZ3N0ciAi0KDQsNGB0YHRgtC+0Y/QvdC40LUg0L7RgtGB0YLRg9C/0LAg0YHQu9C10LLQsCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMgorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICLQoNCw0YHRgdGC0L7Rj9C90LjQtSDQvtGC0YHRgtGD0L/QsCDRgdC/0YDQsNCy0LAiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzMKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAi0KDQsNGB0YHRgtC+0Y/QvdC40LUg0L7RgtGB0YLRg9C/0LAg0LzQtdC20LTRgyDQutC+0LvQvtC90LrQsNC80LgiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgItC/0LDRgNCw0LzQtdGC0YAgLS1jb21tYW5kINC00L7Qu9C20LXQvSDQsdGL0YLRjCDQv9C10YDQstGL0LwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxOAorbXNnaWQgIiIKKyJnaXQgY29tbWl0LXRyZWUgWygtcCA8cGFyZW50PikuLi5dIFstU1s8a2V5aWQ+XV0gWygtbSA8bWVzc2FnZT4pLi4uXSBbKC1GICIKKyI8ZmlsZT4pLi4uXSA8dHJlZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBwYXJlbnQgJXMgaWdub3JlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6NTYgYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzNiBidWlsdGluL2xvZy5jOjUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIGNsb3NlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExMQorbXNnaWQgInBhcmVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTEyCittc2dpZCAiaWQgb2YgYSBwYXJlbnQgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE0IGJ1aWx0aW4vY29tbWl0LmM6MTQ4MCBidWlsdGluL21lcmdlLmM6MjY4CisjOiBidWlsdGluL25vdGVzLmM6NDA5IGJ1aWx0aW4vbm90ZXMuYzo1NzUgYnVpbHRpbi9zdGFzaC5jOjE0NzMKKyM6IGJ1aWx0aW4vdGFnLmM6NDA2Cittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAi0YHQvtC+0LHRidC10L3QuNC1IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE1IGJ1aWx0aW4vY29tbWl0LmM6MTQ4MAorbXNnaWQgImNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTgKK21zZ2lkICJyZWFkIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEyMSBidWlsdGluL2NvbW1pdC5jOjE0OTIgYnVpbHRpbi9tZXJnZS5jOjI4MworIzogYnVpbHRpbi9wdWxsLmM6MTkzIGJ1aWx0aW4vcmV2ZXJ0LmM6MTE3Cittc2dpZCAiR1BHIHNpZ24gY29tbWl0IgorbXNnc3RyICLQv9C+0LTQv9C40YHQsNGC0Ywg0LrQvtC80LzQuNGCINGBINC/0L7QvNC+0YnRjNGOIEdQRyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzMworbXNnaWQgIm11c3QgZ2l2ZSBleGFjdGx5IG9uZSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxNDAKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDEKK21zZ2lkICJnaXQgY29tbWl0IFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGNvbW1pdCBbPNC+0L/RhtC40Lg+XSBbLS1dIDzRgdC/0LXRhtC40YTQuNC60LDRgtC+0YAt0L/Rg9GC0Lg+4oCmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2Cittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBzdGF0dXMgWzzQvtC/0YbQuNC4Pl0gWy0tXSA80YHQv9C10YbQuNGE0LjQutCw0YLQvtGALdC/0YPRgtC4PuKApiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MQorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gYW1lbmQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2VcbiIKKyJpdCBlbXB0eS4gWW91IGNhbiByZXBlYXQgeW91ciBjb21tYW5kIHdpdGggLS1hbGxvdy1lbXB0eSwgb3IgeW91IGNhblxuIgorInJlbW92ZSB0aGUgY29tbWl0IGVudGlyZWx5IHdpdGggXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKK21zZ3N0ciAi0JLRiyDQv9C+0L/RgNC+0YHQuNC70Lgg0LjRgdC/0YDQsNCy0LjRgtGMINC/0L7RgdC70LXQtNC90LjQuSDQutC+0LzQvNC40YIsINC90L4g0LTQtdC70LDRjyDRjdGC0L4g0LLRiyDRgdC00LXQu9Cw0LXRgtC1XG7Qv9GD0YHRgtC+0Lkg0LrQvtC80LzQuNGCLiDQktGLINC80L7QttC10YLQtSDQv9C+0LLRgtC+0YDQuNGC0Ywg0Y3RgtGDINC60L7QvNCw0L3QtNGDINGBINC+0L/RhtC40LXQuSAtLWFsbG93LWVtcHR5XG7QuNC70Lgg0LLRiyDQvNC+0LbQtdGC0LUg0YPQtNCw0LvQuNGC0Ywg0LrQvtC80LzQuNGCINC/0L7Qu9C90L7RgdGC0YzRjiDRgSDQv9C+0LzQvtGJ0YzRjiDQutC+0LzQsNC90LTRiyBcbsKrZ2l0IHJlc2V0IEhFQURewrsuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTYKK21zZ2lkICIiCisiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKK21zZ3N0ciAi0JrQvtC/0LjRgNGD0LXQvNGL0Lkg0LrQvtC80LzQuNGCINGC0LXQv9C10YDRjCDQv9GD0YHRgiwg0LLQvtC30LzQvtC20L3QviDQv9C+0YHQu9C1INGA0LDQt9GA0LXRiNC10L3QuNGPINC60L7QvdGE0LvQuNC60YLQvtCyLlxu0JXRgdC70Lgg0LLRiyDQstGB0LUg0YDQsNCy0L3QviDRhdC+0YLQuNGC0LUg0YHQtNC10LvQsNGC0Ywg0L/Rg9GB0YLQvtC5INC60L7QvNC80LjRgiwg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtTpcblxuICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjMKK21zZ2lkICJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIKK21zZ3N0ciAi0JIg0L/RgNC+0YLQuNCy0L3QvtC8INGB0LvRg9GH0LDQtSwg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCByZXNldMK7XG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjYKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgcmVzZXRcbiIKKyJcbiIKKyJUaGVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB3aWxsIHJlc3VtZSBjaGVycnktcGlja2luZ1xuIgorInRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKK21zZ3N0ciAi0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0L/RgNC+0L/Rg9GB0YLQuNGCINGN0YLQvtGCINC60L7QvNC80LjRgiwg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQutC+0LzQsNC90LTRgzpcblxuICAgIGdpdCByZXNldFxuXG7Qn9C+0YHQu9C1INGN0YLQvtCz0L4gwqtnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZcK7INC/0YDQvtC00L7Qu9C20LjRgiDQutC+0L/QuNGA0L7QstCw0L3QuNC1INC+0YHRgtCw0LLRiNC40YXRgdGPINC60L7QvNC80LjRgtC+0LIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzEyCittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICLRgdCx0L7QuSDRgNCw0YHQv9Cw0LrQvtCy0LrQuCDQvtCx0YrQtdC60YLQsCDQtNC10YDQtdCy0LAgSEVBRCIKKworIzogYnVpbHRpbi9jb21taXQuYzozNTMKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQstGA0LXQvNC10L3QvdGL0Lkg0LjQvdC00LXQutGBIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1OQorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INC40L3RgtC10YDQsNC60YLQuNCy0L3QvtCz0L4g0LTQvtCx0LDQstC70LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzczCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDQstGA0LXQvNC10L3QvdGL0Lkg0LjQvdC00LXQutGBIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM3NQorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICLQodCx0L7QuSDQv9GA0Lgg0L7QsdC90L7QstC70LXQvdC40Lgg0L7RgdC90L7QstC90L7Qs9C+INC60Y3RiNCwINC00LXRgNC10LLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MDAgYnVpbHRpbi9jb21taXQuYzo0MjMgYnVpbHRpbi9jb21taXQuYzo0NjkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDRhNCw0LnQuyBuZXdfaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDUyCittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0YHQvtC30LTQsNGC0Ywg0YfQsNGB0YLQuNGH0L3Ri9C5INC60L7QvNC80LjRgiDQstC+INCy0YDQtdC80Y8g0YHQu9C40Y/QvdC40Y8uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ1NAorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINGB0L7Qt9C00LDRgtGMINGH0LDRgdGC0LjRh9C90YvQuSDQutC+0LzQvNC40YIg0LLQviDQstGA0LXQvNGPINC60L7Qv9C40YDQvtCy0LDQvdC40Y8g0LrQvtC80LzQuNGC0LAuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2MgorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0LjQvdC00LXQutGBIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4MQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINCy0YDQtdC80LXQvdC90YvQuSDRhNCw0LnQuyDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgbGFja3MgYXV0aG9yIGhlYWRlciIKK21zZ3N0ciAi0YMg0LrQvtC80LzQuNGC0LAgwqslc8K7INC+0YLRgdGD0YLRgdGC0LLRg9C10YIg0LDQstGC0L7RgCDQsiDQt9Cw0LPQvtC70L7QstC60LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGhhcyBtYWxmb3JtZWQgYXV0aG9yIGxpbmUiCittc2dzdHIgItGDINC60L7QvNC80LjRgtCwIMKrJXPCuyDRgdGC0YDQvtC60LAg0LDQstGC0L7RgNCwINCyINC90LXQv9GA0LDQstC40LvRjNC90L7QvCDRhNC+0YDQvNCw0YLQtSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDAKK21zZ2lkICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGAIC0tYXV0aG9yINCyINC90LXQv9GA0LDQstC40LvRjNC90L7QvCDRhNC+0YDQvNCw0YLQtSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NTMKK21zZ2lkICIiCisidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKyJpbiB0aGUgY3VycmVudCBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINCy0YvQsdGA0LDRgtGMINGB0LjQvNCy0L7QuyDQutC+0LzQvNC10L3RgtCw0YDQuNGPLCDQutC+0YLQvtGA0YvQuVxu0L3QtSDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LIg0YLQtdC60YPRidC10Lwg0YHQvtC+0LHRidC10L3QuNC4INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY5MSBidWlsdGluL2NvbW1pdC5jOjcyNCBidWlsdGluL2NvbW1pdC5jOjEwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0YDQvtGB0LjRgtGMINC60L7QvNC80LjRgiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDMgYnVpbHRpbi9zaG9ydGxvZy5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIo0YfRgtC10L3QuNC1INGE0LDQudC70LAg0LbRg9GA0L3QsNC70LAg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsClcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDUKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YTQsNC50Lsg0LbRg9GA0L3QsNC70LAg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YTQsNC50Lsg0LbRg9GA0L3QsNC70LAgwqslc8K7IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc0MCBidWlsdGluL2NvbW1pdC5jOjc1NgorbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzQ3Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCBNRVJHRV9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODA3Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINGI0LDQsdC70L7QvSDQvtC/0LjRgdCw0L3QuNGPINC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIlxu0J/QvtGF0L7QttC1LCDRh9GC0L4g0LLRiyDQv9GL0YLQsNC10YLQtdGB0Ywg0LfQsNC60L7QvNC80LjRgtC40YLRjCDRgdC70LjRj9C90LjQtS5cbtCV0YHQu9C4INGN0YLQviDQvtGI0LjQsdC60LAsINC/0L7QttCw0LvRg9C50YHRgtCwINGD0LTQsNC70LjRgtC1INGE0LDQudC7XG5cdCVzXG7QuCDQv9C+0L/RgNC+0LHRg9C50YLQtSDRgdC90L7QstCwLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIlxu0J/QvtGF0L7QttC1LCDRh9GC0L4g0LLRiyDQv9GL0YLQsNC10YLQtdGB0Ywg0LfQsNC60L7QvNC80LjRgtC40YLRjCDQv9GA0Lgg0LrQvtC/0LjRgNC+0LLQsNC90LjQuCDQutC+0LzQvNC40YLQsC5cbtCV0YHQu9C4INGN0YLQviDQvdC1INGC0LDQuiwg0YLQviDRg9C00LDQu9C40YLQtSDRhNCw0LnQu1xuXHQlc1xu0Lgg0L/QvtC/0YDQvtCx0YPQudGC0LUg0YHQvdC+0LLQsC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCDQtNC70Y8g0LLQsNGI0LjRhSDQuNC30LzQtdC90LXQvdC40LkuINCh0YLRgNC+0LrQuCxcbtC90LDRh9C40L3QsNGO0YnQuNC10YHRjyDRgSDCqyVjwrsg0LHRg9C00YPRgiDQv9GA0L7QuNCz0L3QvtGA0LjRgNC+0LLQsNC90YssINCwINC/0YPRgdGC0L7QtSDRgdC+0L7QsdGJ0LXQvdC40LVcbtC+0YLQvNC10L3Rj9C10YIg0L/RgNC+0YbQtdGB0YEg0LrQvtC80LzQuNGC0LAuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwINC00LvRjyDQstCw0YjQuNGFINC40LfQvNC10L3QtdC90LjQuS4g0KHRgtGA0L7QutC4LFxu0L3QsNGH0LjQvdCw0Y7RidC40LXRgdGPINGBIMKrJWPCuyDQsdGD0LTRg9GCINC+0YHRgtCw0LLQu9C10L3Rizsg0LLRiyDQvNC+0LbQtdGC0LUg0YPQtNCw0LvQuNGC0Ywg0LjRhSDQstGA0YPRh9C90YPRjixcbtC10YHQu9C4INGF0L7RgtC40YLQtS4g0J/Rg9GB0YLQvtC1INGB0L7QvtCx0YnQtdC90LjQtSDQvtGC0LzQtdC90Y/QtdGCINC/0YDQvtGG0LXRgdGBINC60L7QvNC80LjRgtCwLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlc0F1dGhvcjogICAgJS4qcyA8JS4qcz4iCittc2dzdHIgIiVz0JDQstGC0L7RgDogICAgICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg3NworIywgYy1mb3JtYXQKK21zZ2lkICIlc0RhdGU6ICAgICAgJXMiCittc2dzdHIgIiVz0JTQsNGC0LA6ICAgICAgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPQmtC+0LzQvNC40YLQtdGAOiAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTAyCittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi9jb21taXQuYzo5NjkKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQuCDQv9C+0YHRgtGA0L7QtdC90LjQuCDQtNC10YDQtdCy0YzQtdCyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk4MyBidWlsdGluL3RhZy5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgItCf0L7QttCw0LvRg9C50YHRgtCwLCDRg9C60LDQttC40YLQtSDRgdC+0L7QsdGJ0LXQvdC40LUsINC/0YDQuCDRg9C60LDQt9Cw0L3QuNC4INC+0L/RhtC40LkgLW0g0LjQu9C4IC1GLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1hdXRob3IgJyVzJyBpcyBub3QgJ05hbWUgPGVtYWlsPicgYW5kIG1hdGNoZXMgbm8gZXhpc3RpbmcgYXV0aG9yIgorbXNnc3RyICItLWF1dGhvciDCqyVzwrsg0L3QtSDQsiDRhNC+0YDQvNCw0YLQtSDCq9CY0LzRjyA80L/QvtGH0YLQsD7CuyDQuCDQvdC1INGB0L7QstC/0LDQtNCw0LXRgiDRgSDRgdGD0YnQtdGB0YLQstGD0Y7RidC40Lwg0LDQstGC0L7RgNC+0LwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA0MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlnbm9yZWQgbW9kZSAnJXMnIgorbXNnc3RyICLQndC10LTQvtC/0YPRgdGC0LjQvNGL0Lkg0YDQtdC20LjQvCDQv9C+0LrQsNC30LAg0LjQs9C90L7RgNC40YDRg9C10LzRi9GFINGE0LDQudC70L7QsiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1OSBidWlsdGluL2NvbW1pdC5jOjEyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0YDQtdC20LjQvCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YTQsNC50LvQvtCyIMKrJXPCuyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDk3Cittc2dpZCAiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWxvbmcg0LggLXog0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEzMAorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgItCj0LrQsNC30LDQvdC40LUg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INC+0L/RhtC40LkgLS1yZXNldC1hdXRob3Ig0LggLS1hdXRob3Ig0L3QtSDQuNC80LXQtdGCINGB0LzRi9GB0LvQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTM5Cittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgItCd0LXRh9C10LPQviDQuNGB0L/RgNCw0LLQu9GP0YLRjC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE0MgorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgItCS0Ysg0LIg0L/RgNC+0YbQtdGB0YHQtSDRgdC70LjRj9C90LjRjyDigJQgINGB0LXQudGH0LDRgSDQvdC10LvRjNC30Y8g0LjRgdC/0YDQsNCy0LvRj9GC0YwuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNDQKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLQktGLINCyINC/0YDQvtGG0LXRgdGB0LUg0LrQvtC/0LjRgNC+0LLQsNC90LjRjyDQutC+0LzQvNC40YLQsCDigJQgINGB0LXQudGH0LDRgSDQvdC10LvRjNC30Y8g0LjRgdC/0YDQsNCy0LvRj9GC0YwuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNDcKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLQntC/0YbQuNC4IC0tc3F1YXNoINC4IC0tZml4dXAg0L3QtSDQvNC+0LPRg9GCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNTcKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAi0JzQvtC20LXRgiDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YzRgdGPINGC0L7Qu9GM0LrQviDQvtC00L3QsCDQuNC3INC+0L/RhtC40LkgLWMvLUMvLUYvLS1maXh1cC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE1OQorbXNnaWQgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTY3Cittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiLS1yZXNldC1hdXRob3Ig0LzQvtC20LXRgiDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YzRgdGPINGC0L7Qu9GM0LrQviDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0YEg0L7Qv9GG0LjRj9C80LggLUMsIC1jINC40LvQuCAtLWFtZW5kLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTg0Cittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICLQnNC+0LbQtdGCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0YLQvtC70YzQutC+INC+0LTQvdCwINC40Lcg0L7Qv9GG0LjQuSAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4NgorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAi0KPQutCw0LfQsNC90LjQtSDQv9GD0YLQtdC5INC60LDRgtCw0LvQvtCz0L7QsiDRgSDQvtC/0YbQuNGP0LzQuCAtLWluY2x1ZGUvLS1vbmx5INC90LUg0LjQvNC10LXRgiDRgdC80YvRgdC70LAuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHMgJyVzIC4uLicgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMxOSBidWlsdGluL2NvbW1pdC5jOjE1MDMKK21zZ2lkICJzaG93IHN0YXR1cyBjb25jaXNlbHkiCittc2dzdHIgItC60YDQsNGC0LrQviDQv9C+0LrQsNC30LDRgtGMINGB0YLQsNGC0YPRgSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzIxIGJ1aWx0aW4vY29tbWl0LmM6MTUwNQorbXNnaWQgInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+INCy0LXRgNGB0LjQuCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzIzCittc2dpZCAic2hvdyBzdGFzaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDRgdC/0YDRj9GC0LDQvdC90L7QvCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzI1IGJ1aWx0aW4vY29tbWl0LmM6MTUwNworbXNnaWQgImNvbXB1dGUgZnVsbCBhaGVhZC9iZWhpbmQgdmFsdWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyNworbXNnaWQgInZlcnNpb24iCittc2dzdHIgItCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzI3IGJ1aWx0aW4vY29tbWl0LmM6MTUwOSBidWlsdGluL3B1c2guYzo1NjEKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NDMKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAi0LzQsNGI0LjQvdC+0YfQuNGC0LDQtdC80YvQuSDQstGL0LLQvtC0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzAgYnVpbHRpbi9jb21taXQuYzoxNTExCittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGB0YLQsNGC0YPRgSDQsiDQtNC70LjQvdC90L7QvCDRhNC+0YDQvNCw0YLQtSAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4pIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzMgYnVpbHRpbi9jb21taXQuYzoxNTE0Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgItC30LDQstC10YDRiNCw0YLRjCDQt9Cw0L/QuNGB0Lgg0J3Qo9Cb0JXQktCr0Jwg0LHQsNC50YLQvtC8IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzUgYnVpbHRpbi9jb21taXQuYzoxMzM5IGJ1aWx0aW4vY29tbWl0LmM6MTUxNworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwODUgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwODggYnVpbHRpbi9yZWJhc2UuYzoxNDY1CisjOiBwYXJzZS1vcHRpb25zLmg6MzMxCittc2dpZCAibW9kZSIKK21zZ3N0ciAi0YDQtdC20LjQvCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM2IGJ1aWx0aW4vY29tbWl0LmM6MTUxNworbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiywg0L7Qv9GG0LjQvtC90LDQu9GM0L3Ri9C1INGA0LXQttC40LzRizogYWxsICjQstGB0LUpLCBub3JtYWwgKNC60LDQuiDQvtCx0YvRh9C90L4pLCBubyAo0L3QtdGCKS4gKNCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNDAKK21zZ2lkICIiCisic2hvdyBpZ25vcmVkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogdHJhZGl0aW9uYWwsIG1hdGNoaW5nLCBuby4gKERlZmF1bHQ6ICIKKyJ0cmFkaXRpb25hbCkiCittc2dzdHIgItC/0L7QutCw0LfRi9Cy0LDRgtGMINC40LPQvdC+0YDQuNGA0YPQtdC80YvQtSDRhNCw0LnQu9GLLCDRgSDQvtC/0YbQuNC+0L3QsNC70YzQvdGL0Lwg0YDQtdC20LjQvNC+0Lw6IHRyYWRpdGlvbmFsICjRgtGA0LDQtNC40YbQuNC+0L3QvdGL0LkpLCBtYXRjaGluZyAo0YLQvtC70YzQutC+INGB0L7QstC/0LDQtNCw0Y7RidC40LUpLCBubyAo0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCkuICjQn9C+INGD0LzQvtC70YfQsNC90LjRjjogdHJhZGl0aW9uYWwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNDIgcGFyc2Utb3B0aW9ucy5oOjE3OQorbXNnaWQgIndoZW4iCittc2dzdHIgItC60L7Qs9C00LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MworbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC40LfQvNC10L3QtdC90LjRjyDQsiDQv9C+0LTQvNC+0LTRg9C70Y/RhSwg0L7Qv9GG0LjQvtC90LDQu9GM0L3QviDQutC+0LPQtNCwOiBhbGwgKNCy0YHQtdCz0LTQsCksIGRpcnR5ICjQuNC30LzQtdC90ZHQvdC90YvQtSksIHVudHJhY2tlZCAo0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1KS4gKNCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNDUKK21zZ2lkICJsaXN0IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLINC/0L4g0YHRgtC+0LvQsdGG0LDQvCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQ2Cittc2dpZCAiZG8gbm90IGRldGVjdCByZW5hbWVzIgorbXNnc3RyICLQvdC1INC+0L/RgNC10LTQtdC70Y/RgtGMINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40Y8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0OAorbXNnaWQgImRldGVjdCByZW5hbWVzLCBvcHRpb25hbGx5IHNldCBzaW1pbGFyaXR5IGluZGV4IgorbXNnc3RyICLQvtC/0YDQtdC00LXQu9GP0YLRjCDQv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNGPLCDQvtC/0YbQuNC+0L3QsNC70YzQvdC+INGD0YHRgtCw0L3QsNCy0LvQuNCy0LDRgtGMINGA0LXQudGC0LjQvdCzINGB0YXQvtC00YHRgtCy0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2OAorbXNnaWQgIlVuc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIGlnbm9yZWQgYW5kIHVudHJhY2tlZC1maWxlcyBhcmd1bWVudHMiCittc2dzdHIgItCd0LXQv9C+0LTQtNC10YDQttC40LLQsNC10LzQsNGPINC60L7QvNCx0LjQvdCw0YbQuNGPINCw0YDQs9GD0LzQtdC90YLQvtCyINC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0LjQs9C90L7RgNC40YDRg9C10LzRi9GFINC4INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3MworbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgItC90LUg0LLRi9Cy0L7QtNC40YLRjCDRgdCy0L7QtNC60YMg0LjQt9C80LXQvdC10L3QuNC5INC/0L7RgdC70LUg0YPRgdC/0LXRiNC90L7Qs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzQKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQsiDRiNCw0LHQu9C+0L0g0YHQvtC+0LHRidC10L3QuNGPINC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzYKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICLQntC/0YbQuNC4INGB0L7QvtCx0YnQtdC90LjRjyDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc3IGJ1aWx0aW4vbWVyZ2UuYzoyNzIgYnVpbHRpbi90YWcuYzo0MDgKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0YHQvtC+0LHRidC10L3QuNC1INC40Lcg0YTQsNC50LvQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc4Cittc2dpZCAiYXV0aG9yIgorbXNnc3RyICLQsNCy0YLQvtGAIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzgKK21zZ2lkICJvdmVycmlkZSBhdXRob3IgZm9yIGNvbW1pdCIKK21zZ3N0ciAi0L/QvtC00LzQtdC90LjRgtGMINCw0LLRgtC+0YDQsCDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc5IGJ1aWx0aW4vZ2MuYzo1MzkKK21zZ2lkICJkYXRlIgorbXNnc3RyICLQtNCw0YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc5Cittc2dpZCAib3ZlcnJpZGUgZGF0ZSBmb3IgY29tbWl0IgorbXNnc3RyICLQv9C+0LTQvNC10L3QuNGC0Ywg0LTQsNGC0YMg0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4MSBidWlsdGluL2NvbW1pdC5jOjE0ODIgYnVpbHRpbi9jb21taXQuYzoxNDgzCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODQgcGFyc2Utb3B0aW9ucy5oOjMyMyByZWYtZmlsdGVyLmg6OTIKK21zZ2lkICJjb21taXQiCittc2dzdHIgItC60L7QvNC80LjRgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDgxCittc2dpZCAicmV1c2UgYW5kIGVkaXQgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQuCDQvtGC0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0YHQvtC+0LHRidC10L3QuNC1INC+0YIg0YPQutCw0LfQsNC90L3QvtCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4MgorbXNnaWQgInJldXNlIG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YHQvtC+0LHRidC10L3QuNC1INGD0LrQsNC30LDQvdC90L7Qs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODMKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90L3QvtC1INGB0L7QvtCx0YnQtdC90LjQtSDQsNCy0YLQvtGD0L/Qu9C+0YLQvdC10L3QuNGPINC00LvRjyDQuNGB0L/RgNCw0LLQu9C10L3QuNGPINGD0LrQsNC30LDQvdC90L7Qs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODQKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC90L7QtSDRgdC+0L7QsdGJ0LXQvdC40LUg0LDQstGC0L7Rg9C/0LvQvtGC0L3QtdC90LjRjyDQtNC70Y8g0YPQv9C70L7RgtC90LXQvdC40Y8g0YPQutCw0LfQsNC90L3QvtCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4NQorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgItC60L7QvNC80LjRgiDRgtC10L/QtdGA0Ywg0LfQsCDQvNC+0LjQvCDQsNCy0YLQvtGA0YHRgtCy0L7QvCAo0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINGBIC1DLy1jLy0tYW1lbmQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODYgYnVpbHRpbi9sb2cuYzoxNTQxIGJ1aWx0aW4vbWVyZ2UuYzoyODUKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2MiBidWlsdGluL3JldmVydC5jOjEwOQorbXNnaWQgImFkZCBTaWduZWQtb2ZmLWJ5OiIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCBTaWduZWQtb2ZmLWJ5OiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDg3Cittc2dpZCAidXNlIHNwZWNpZmllZCB0ZW1wbGF0ZSBmaWxlIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YPQutCw0LfQsNC90L3Ri9C5INGE0LDQudC7INGI0LDQsdC70L7QvdCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODgKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4g0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0LrQvtC80LzQuNGCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTAKK21zZ2lkICJpbmNsdWRlIHN0YXR1cyBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjCDRgdGC0LDRgtGD0YEg0YTQsNC50LvQvtCyINCyINGI0LDQsdC70L7QvSDRgdC+0L7QsdGJ0LXQvdC40Y8g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NQorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICLQntC/0YbQuNC4INGB0L7QtNC10YDQttC40LzQvtCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NgorbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAi0LfQsNC60L7QvNC80LjRgtC40YLRjCDQstGB0LUg0LjQt9C80LXQvdC10L3QvdGL0LUg0YTQsNC50LvRiyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk3Cittc2dpZCAiYWRkIHNwZWNpZmllZCBmaWxlcyB0byBpbmRleCBmb3IgY29tbWl0IgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMINGD0LrQsNC30LDQvdC90YvQtSDRhNCw0LnQu9GLINCyINC40L3QtNC10LrRgSDQtNC70Y8g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OAorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGZpbGVzIgorbXNnc3RyICLQuNC90YLQtdGA0LDQutGC0LjQstC90L7QtSDQtNC+0LHQsNCy0LvQtdC90LjQtSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QvtC1INC00L7QsdCw0LLQu9C10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAwCittc2dpZCAiY29tbWl0IG9ubHkgc3BlY2lmaWVkIGZpbGVzIgorbXNnc3RyICLQt9Cw0LrQvtC80LzQuNGC0LjRgtGMINGC0L7Qu9GM0LrQviDRg9C60LDQt9Cw0L3QvdGL0LUg0YTQsNC50LvRiyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAxCittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgItC/0YDQvtC/0YPRgdGC0LjRgtGMINC/0LXRgNC10YXQstCw0YLRh9C40LogcHJlLWNvbW1pdCDQuCBjb21taXQtbXNnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDIKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMLCDRh9GC0L4g0LHRg9C00LXRgiDQt9Cw0LrQvtC80LzQuNGH0LXQvdC+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTUKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgItC40YHQv9GA0LDQstC40YLRjCDQv9GA0LXQtNGL0LTRg9GJ0LjQuSDQutC+0LzQvNC40YIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNgorbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0L/QtdGA0LXRhdCy0LDRgtGH0LjQuiBwb3N0LXJld3JpdGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMQorbXNnaWQgIm9rIHRvIHJlY29yZCBhbiBlbXB0eSBjaGFuZ2UiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDQt9Cw0L/QuNGB0Ywg0L/Rg9GB0YLQvtCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMworbXNnaWQgIm9rIHRvIHJlY29yZCBhIGNoYW5nZSB3aXRoIGFuIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDQt9Cw0L/QuNGB0Ywg0LjQt9C80LXQvdC10L3QuNC5INGBINC/0YPRgdGC0YvQvCDRgdC+0L7QsdGJ0LXQvdC40LXQvCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgItCk0LDQudC7IE1FUkdFX0hFQUQg0L/QvtCy0YDQtdC20LTQtdC9ICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYwMworbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMIE1FUkdFX01PREUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwOiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iCittc2dzdHIgItCe0YLQvNC10L3QsCDQutC+0LzQvNC40YLQsCDQuNC3LdC30LAg0L/Rg9GB0YLQvtCz0L4g0YHQvtC+0LHRidC10L3QuNGPINC60L7QvNC80LjRgtCwLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICLQntGC0LzQtdC90LAg0LrQvtC80LzQuNGC0LA7INCy0Ysg0L3QtSDQuNC30LzQtdC90LjQu9C4INGB0L7QvtCx0YnQtdC90LjQtS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjY4Cittc2dpZCAiIgorInJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgYW5kIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXNldCBIRUFEXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgItGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LHRi9C7INC+0LHQvdC+0LLQu9C10L0sINC90L4g0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINGE0LDQudC7IG5ld19pbmRleC4g0KPQtNC+0YHRgtC+0LLQtdGA0YzRgtC10YHRjCwg0YfRgtC+INC90LAg0LTQuNGB0LrQtSDQtdGB0YLRjCDRgdCy0L7QsdC+0LTQvdC+0LUg0LzQtdGB0YLQviDQuCDQutCy0L7RgtCwINC90LUg0LjRgdGH0LXRgNC/0LDQvdCwLCDQsCDQv9C+0YHQu9C1INGN0YLQvtCz0L4g0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IHJlc2V0IEhFQUTCuyDQtNC70Y8g0LLQvtGB0YHRgtCw0L3QvtCy0LvQtdC90LjRjy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTAKK21zZ2lkICJnaXQgY29tbWl0LWdyYXBoIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIgorbXNnc3RyICJnaXQgY29tbWl0LWdyYXBoIFstLW9iamVjdC1kaXIgPNC60LDRgtCw0LvQvtCzLdC+0LHRitC10LrRgtC+0LI+XSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIzCittc2dpZCAiZ2l0IGNvbW1pdC1ncmFwaCByZWFkIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIgorbXNnc3RyICJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA80LrQsNGC0LDQu9C+0LMt0L7QsdGK0LXQutGC0L7Qsj5dIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTgKK21zZ2lkICJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIKK21zZ3N0ciAiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA80LrQsNGC0LDQu9C+0LMt0L7QsdGK0LXQutGC0L7Qsj5dIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjgKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmRdIFstLXJlYWNoYWJsZSIKKyJ8LS1zdGRpbi1wYWNrc3wtLXN0ZGluLWNvbW1pdHNdIgorbXNnc3RyICJnaXQgY29tbWl0LWdyYXBoIHdyaXRlIFstLW9iamVjdC1kaXIgPNC60LDRgtCw0LvQvtCzLdC+0LHRitC10LrRgtC+0LI+XSBbLS1hcHBlbmRdIFstLXJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzo4OQorIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNDcgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoyMDUgYnVpbHRpbi9mZXRjaC5jOjE1MworIzogYnVpbHRpbi9sb2cuYzoxNTYxCittc2dpZCAiZGlyIgorbXNnc3RyICLQutCw0YLQsNC70L7QsyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo1MiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjkwCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE0OCBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIwNgorbXNnaWQgIlRoZSBvYmplY3QgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBncmFwaCIKK21zZ3N0ciAi0JrQsNGC0LDQu9C+0LMg0L7QsdGK0LXQutGC0L7QsiDQtNC70Y8g0YHQvtGF0YDQsNC90LXQvdC40Y8g0LPRgNCw0YTQsCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo2OCBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBjb21taXQtZ3JhcGggJyVzJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRhNCw0LnQuyBjb21taXQtZ3JhcGggwqslc8K7IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE1MAorbXNnaWQgInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiCittc2dzdHIgItC90LDRh9Cw0YLRjCDRgdC+INCy0YHQtdGFINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNTIKK21zZ2lkICJzY2FuIHBhY2staW5kZXhlcyBsaXN0ZWQgYnkgc3RkaW4gZm9yIGNvbW1pdHMiCittc2dzdHIgItC40YHQutCw0YLRjCDQutC+0LzQvNC40YLRiyDQsiBwYWNrLWluZGV4ZXMsINC/0LXRgNC10YfQuNGB0LvQtdC90L3Ri9GFINC90LAg0YHRgtCw0L3QtNCw0YDRgtC90L7QvCDQstCy0L7QtNC1IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE1NAorbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgItC90LDRh9Cw0YLRjCDRgSDQutC+0LzQvNC40YLQvtCyLCDQv9C10YDQtdGH0LjRgdC70LXQvdC90YvRhSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC+0Lwg0LLQstC+0LTQtSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNTYKK21zZ2lkICJpbmNsdWRlIGFsbCBjb21taXRzIGFscmVhZHkgaW4gdGhlIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGMINCy0YHQtSDQutC+0LzQvNC40YLRiywg0LrQvtGC0L7RgNGL0LUg0YPQttC1INC10YHRgtGMINCyINGE0LDQudC70LUgY29tbWl0LWdyYXBoIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE2NQorbXNnaWQgInVzZSBhdCBtb3N0IG9uZSBvZiAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzLCBvciAtLXN0ZGluLXBhY2tzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9GD0LnRgtC1INGH0YLQvi3RgtC+INC+0LTQvdC+INC40LcgLS1yZWFjaGFibGUsIC0tc3RkaW4tY29tbWl0cyDQuCAtLXN0ZGluLXBhY2tzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExCittc2dpZCAiZ2l0IGNvbmZpZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbmZpZyBbPNC+0L/RhtC40Lg+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIC0tdHlwZSBhcmd1bWVudCwgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMTUKK21zZ2lkICJvbmx5IG9uZSB0eXBlIGF0IGEgdGltZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNAorbXNnaWQgIkNvbmZpZyBmaWxlIGxvY2F0aW9uIgorbXNnc3RyICLQoNCw0LfQvNC10YnQtdC90LjQtSDRhNCw0LnQu9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjUKK21zZ2lkICJ1c2UgZ2xvYmFsIGNvbmZpZyBmaWxlIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LPQu9C+0LHQsNC70YzQvdGL0Lkg0YTQsNC50Lsg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNgorbXNnaWQgInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgdC40YHRgtC10LzQvdGL0Lkg0YTQsNC50Lsg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNworbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YTQsNC50Lsg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI4Cittc2dpZCAidXNlIHBlci13b3JrdHJlZSBjb25maWcgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOQorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGD0LrQsNC30LDQvdC90YvQuSDRhNCw0LnQuyDQutC+0L3RhNC40LPRg9GA0LDRhtC40LgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAiYmxvYi1pZCIKK21zZ3N0ciAi0LjQtNC10L3Rgi3QtNCy0L7QuNGH0L0t0L7QsdGK0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINC90LDRgdGC0YDQvtC50LrQuCDQuNC3INGD0LrQsNC30LDQvdC90L7Qs9C+INC00LLQvtC40YfQvdC+0LPQviDQvtCx0YrQtdC60YLQsCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzEKK21zZ2lkICJBY3Rpb24iCittc2dzdHIgItCU0LXQudGB0YLQstC40LUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMyCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgItC/0L7Qu9GD0YfQuNGC0Ywg0LfQvdCw0YfQtdC90LjQtTog0LjQvNGPIFvRiNCw0LHQu9C+0L0t0LfQvdCw0YfQtdC90LjQuV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMzCittc2dpZCAiZ2V0IGFsbCB2YWx1ZXM6IGtleSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLQv9C+0LvRg9GH0LjRgtGMINCy0YHQtSDQt9C90LDRh9C10L3QuNGPOiDQutC70Y7RhyBb0YjQsNCx0LvQvtC9LdC30L3QsNGH0LXQvdC40LldIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNAorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLQv9C+0LvRg9GH0LjRgtGMINC30L3QsNGH0LXQvdC40Y8g0L/QviDRiNCw0LHQu9C+0L3Rgzog0YjQsNCx0LvQvtC9LdC40LzQtdC9IFvRiNCw0LHQu9C+0L0t0LfQvdCw0YfQtdC90LjQuV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM1Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAi0L/QvtC70YPRh9C40YLRjCDQt9C90LDRh9C10L3QuNC1LCDRgdC/0LXRhtC40YTQuNGH0L3QvtC1INC00LvRjyBVUkw6INGA0LDQt9C00LXQu1su0L/QtdGA0LXQvNC10L3QvdCw0Y9dIFVSTCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzYKK21zZ2lkICJyZXBsYWNlIGFsbCBtYXRjaGluZyB2YXJpYWJsZXM6IG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XSIKK21zZ3N0ciAi0LfQsNC80LXQvdC40YLRjCDQstGB0LUg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNC1INC/0LXRgNC10LzQtdC90L3Ri9C1OiDQuNC80Y8g0LfQvdCw0YfQtdC90LjQtSBb0YjQsNCx0LvQvtC9LdC30L3QsNGH0LXQvdC40LldIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNworbXNnaWQgImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQvdC+0LLRg9GOINC/0LXRgNC10LzQtdC90L3Rg9GOOiDQuNC80Y8g0LfQvdCw0YfQtdC90LjQtSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzgKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDQv9C10YDQtdC80LXQvdC90YPRjjog0LjQvNGPIFvRiNCw0LHQu9C+0L0t0LfQvdCw0YfQtdC90LjQuV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM5Cittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgItGD0LTQsNC70LjRgtGMINCy0YHQtSDRgdC+0LLQv9Cw0LTQsNGO0YnQuNC1OiDQuNC80Y8gW9GI0LDQsdC70L7QvS3Qt9C90LDRh9C10L3QuNC5XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDAKK21zZ2lkICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiCittc2dzdHIgItC/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMINGA0LDQt9C00LXQuzog0YHRgtCw0YDQvtC1LdC40LzRjyDQvdC+0LLQvtC1LdC40LzRjyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDEKK21zZ2lkICJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDRgNCw0LfQtNC10Ls6INC40LzRjyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDIKK21zZ2lkICJsaXN0IGFsbCIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQstC10YHRjCDRgdC/0LjRgdC+0LoiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQzCittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgItC+0YLQutGA0YvRgtGMINCyINGA0LXQtNCw0LrRgtC+0YDQtSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDQKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAi0L3QsNC50YLQuCDQvdCw0YHRgtGA0L7QtdC90L3Ri9C5INGG0LLQtdGCOiDRgNCw0LfQtNC10LsgW9C/0L4t0YPQvNC+0LvRh9Cw0L3QuNGOXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDUKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LjRgtGMLCDRgdGD0YnQtdGB0YLQstGD0LXRgiDQu9C4INC90LDRgdGC0YDQvtC10L3QvdGL0Lkg0YbQstC10YI6INGA0LDQt9C00LXQuyBbc3Rkb3V0LdC10YHRgtGMLXR0eV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ2Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAi0KLQuNC/IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NworbXNnaWQgInZhbHVlIGlzIGdpdmVuIHRoaXMgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OAorbXNnaWQgInZhbHVlIGlzIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIKK21zZ3N0ciAi0LfQvdCw0YfQtdC90LjQtSDigJQg0Y3RgtC+IMKrdHJ1ZcK7ICjQv9GA0LDQstC00LApINC40LvQuCDCq2ZhbHNlwrsgKNC70L7QttGMKSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDkKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAi0LfQvdCw0YfQtdC90LjQtSDigJQg0Y3RgtC+INC00LXRgdGP0YLQuNGH0L3QvtC1INGH0LjRgdC70L4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUwCittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICLQt9C90LDRh9C10L3QuNC1IOKAlCDRjdGC0L4gLS1ib29sINC40LvQuCAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTEKK21zZ2lkICJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIgorbXNnc3RyICLQt9C90LDRh9C10L3QuNC1IOKAlCDRjdGC0L4g0L/Rg9GC0YwgKNC6INGE0LDQudC70YMg0LjQu9C4INC60LDRgtCw0LvQvtCz0YMpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MgorbXNnaWQgInZhbHVlIGlzIGFuIGV4cGlyeSBkYXRlIgorbXNnc3RyICLQt9C90LDRh9C10L3QuNC1IC0g0Y3RgtC+INC00LDRgtCwINC+0LrQvtC90YfQsNC90LjRjyDRgdGA0L7QutCwINC00LXQudGB0YLQstC40Y8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUzCittc2dpZCAiT3RoZXIiCittc2dzdHIgItCU0YDRg9Cz0L7QtSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTQKK21zZ2lkICJ0ZXJtaW5hdGUgdmFsdWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgItC30LDQstC10YDRiNCw0YLRjCDQt9C90LDRh9C10L3QuNGPINCd0KPQm9CV0JLQq9CcINCx0LDQudGC0L7QvCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTUKK21zZ2lkICJzaG93IHZhcmlhYmxlIG5hbWVzIG9ubHkiCittc2dzdHIgItC/0L7QutCw0LfRi9Cy0LDRgtGMINGC0L7Qu9GM0LrQviDQuNC80LXQvdCwINC/0LXRgNC10LzQtdC90L3Ri9GFIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NgorbXNnaWQgInJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzIG9uIGxvb2t1cCIKK21zZ3N0ciAi0YPRh9C40YLRi9Cy0LDRgtGMINC00LjRgNC10LrRgtC40LLRiyBpbmNsdWRlICjQstC60LvRjtGH0LXQvdC40Y8g0YTQsNC50LvQvtCyKSDQv9GA0Lgg0LfQsNC/0YDQvtGB0LUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU3Cittc2dpZCAic2hvdyBvcmlnaW4gb2YgY29uZmlnIChmaWxlLCBzdGFuZGFyZCBpbnB1dCwgYmxvYiwgY29tbWFuZCBsaW5lKSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQuNGB0YLQvtGH0L3QuNC6INC90LDRgdGC0YDQvtC50LrQuCAo0YTQsNC50LssINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0LLQstC+0LQsINC00LLQvtC40YfQvdGL0Lkg0L7QsdGK0LXQutGCLCDQutC+0LzQsNC90LTQvdCw0Y8g0YHRgtGA0L7QutCwKSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTgKK21zZ2lkICJ2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OAorbXNnaWQgIndpdGggLS1nZXQsIHVzZSBkZWZhdWx0IHZhbHVlIHdoZW4gbWlzc2luZyBlbnRyeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlIGZyb20gJWQgdG8gJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZvcm1hdCBkZWZhdWx0IGNvbmZpZyB2YWx1ZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGNvbG9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo0NDMKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0LfQvdCw0YfQtdC90LjQtSDRhtCy0LXRgtCwINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ5NiBidWlsdGluL2NvbmZpZy5jOjc0MgorbXNnaWQgIm5vdCBpbiBhIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo0OTkKK21zZ2lkICJ3cml0aW5nIHRvIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MDIKK21zZ2lkICJ3cml0aW5nIGNvbmZpZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiMg0K3RgtC+INGE0LDQudC7INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gR2l0LlxuW3VzZXJdXG4jINCf0L7QttCw0LvRg9C50YHRgtCwLCDQsNC00LDQv9GC0LjRgNGD0LnRgtC1INC4INGA0LDRgdC60L7QvNC80LXQvdGC0LjRgNGD0LnRgtC1INGB0LvQtdC00YPRjtGJ0LjQtSDRgdGC0YDQvtC60Lg6XG4jXHR1c2VyID0gJXNcbiNcdGVtYWlsID0gJXNcbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTEKK21zZ2lkICJvbmx5IG9uZSBjb25maWcgZmlsZSBhdCBhIHRpbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTYKK21zZ2lkICItLWxvY2FsIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tbG9jYWwg0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INCy0L3Rg9GC0YDQuCBnaXQg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTkKK21zZ2lkICItLWJsb2IgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYzOAorbXNnaWQgIiRIT01FIG5vdCBzZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NTgKK21zZ2lkICIiCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Njg4Cittc2dpZCAiLS1nZXQtY29sb3IgYW5kIHZhcmlhYmxlIHR5cGUgYXJlIGluY29oZXJlbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OTMKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzA2Cittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTIKK21zZ2lkICIiCisiLS1zaG93LW9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwLCBhbmQgIgorIi0tbGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxOAorbXNnaWQgIi0tZGVmYXVsdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29uZmlnIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczNAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDQKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDYKK21zZ2lkICJlZGl0aW5nIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0YTQsNC50Lsg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IG92ZXJ3cml0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBhIHNpbmdsZSB2YWx1ZVxuIgorIiAgICAgICBVc2UgYSByZWdleHAsIC0tYWRkIG9yIC0tcmVwbGFjZS1hbGwgdG8gY2hhbmdlICVzLiIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC/0LXRgNC10LfQsNC/0LjRgdCw0YLRjCDQvdC10YHQutC+0LvRjNC60L4g0LfQvdCw0YfQtdC90LjQuSDQvtC00L3QuNC8XG4gICAgICAg0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDRgNC10LPRg9C70Y/RgNC90YvQtSDQstGL0YDQsNC20LXQvdC40Y8sINC/0LDRgNCw0LzQtdGC0YDRiyAtLWFkZCDQuNC70LggLS1yZXBsYWNlLWFsbCwg0YfRgtC+0LHRiyDQuNC30LzQtdC90LjRgtGMICVzLiIKKworIzogYnVpbHRpbi9jb25maWcuYzo4NDcgYnVpbHRpbi9jb25maWcuYzo4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBzZWN0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5MAorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjEwMAorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgNCw0LfQvNC10YDQvtCyINCyINGD0LTQvtCx0L7Rh9C40YLQsNC10LzQvtC8INC00LvRjyDRh9C10LvQvtCy0LXQutCwINCy0LjQtNC1IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gWzxjb21taXQtaXNoPi4uLl0iCittc2dzdHIgImdpdCBkZXNjcmliZSBbPNC+0L/RhtC40Lg+XSBbPNGD0LrQsNC30LDRgtC10LvRjC3QutC+0LzQvNC40YLQsD7igKZdIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjgKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gLS1kaXJ0eSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs80L7Qv9GG0LjQuD5dIC0tZGlydHkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MworbXNnaWQgImhlYWQiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRjCDQvdCwINCy0LXRgtC60YMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MworbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICLQu9C10LPQutC+0LLQtdGB0L3Ri9C5IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjMKK21zZ2lkICJhbm5vdGF0ZWQiCittc2dzdHIgItCw0L3QvdC+0YLQuNGA0L7QstCw0L3QvdGL0LkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICLQsNC90L3QvtGC0LjRgNC+0LLQsNC90L3QsNGPINC80LXRgtC60LAgJXMg0L3QtSDQtNC+0YHRgtGD0L/QvdCwIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgItCw0L3QvdC+0YLQuNGA0L7QstCw0L3QvdCw0Y8g0LzQtdGC0LrQsCAlcyDQvdC1INGB0L7QtNC10YDQttC40YIg0LLRgdGC0YDQvtC10L3QvdC+0LPQviDQvdCw0LfQstCw0L3QuNGPIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgItC80LXRgtC60LAgwqslc8K7INGD0LbQtSDQt9C00LXRgdGMIMKrJXPCuyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgItC90LXRgiDQvNC10YLQvtC6LCDRgtC+0YfQvdC+INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LjRhSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAi0J3QtdGCINGC0L7Rh9C90YvRhSDRgdC+0LLQv9Cw0LTQtdC90LjQuSDQv9C+INGB0YHRi9C70LrQsNC8INC40LvQuCDRgtC10LPQsNC8LCDQuNGJ0YMg0L7Qv9C40YHQsNC90LjRj1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICLQv9C+0LjRgdC6INC+0LrQvtC90YfQtdC9INC90LAgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAi0J3QtdGCINCw0L3QvdC+0YLQuNGA0L7QstCw0L3QvdGL0YUg0LzQtdGC0L7Quiwg0LrQvtGC0L7RgNGL0LUg0LzQvtCz0YPRgiDQvtC/0LjRgdCw0YLRjCDCqyVzwrsuXG7QndC+INC40LzQtdGO0YLRgdGPINC90LXQsNC90L3QvtGC0LjRgNC+0LLQsNC90L3Ri9C1INC80LXRgtC60Lg6INC/0L7Qv9GA0L7QsdGD0LnRgtC1INC00L7QsdCw0LLQuNGC0Ywg0L/QsNGA0LDQvNC10YLRgCAtLXRhZ3MuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iCittc2dzdHIgItCd0LXRgiDQvNC10YLQvtC6LCDQutC+0YLQvtGA0YvQtSDQvNC+0LPRg9GCINC+0L/QuNGB0LDRgtGMIMKrJXPigKYuXG7Qn9C+0L/RgNC+0LHRg9C50YLQtSDQtNC+0LHQsNCy0LjRgtGMINC/0LDRgNCw0LzQtdGC0YAgLS1hbHdheXMg0LjQu9C4INGB0L7Qt9C00LDRgtGMINC60LDQutC40LUt0L3QuNCx0YPQtNGMINC80LXRgtC60LguIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICLQv9C+0YHQtdGJ0LXQvdC+ICVsdSDQutC+0LzQvNC40YLQvtCyXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm1vcmUgdGhhbiAlaSB0YWdzIGZvdW5kOyBsaXN0ZWQgJWkgbW9zdCByZWNlbnRcbiIKKyJnYXZlIHVwIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICLQsdC+0LvQtdC1ICVpINC80LXRgtC+0Log0L3QsNC50LTQtdC90L47INC/0L7QutCw0LfQsNC90L4g0L/QvtGB0LvQtdC00L3QuNC1ICVpXG7QvtGB0YLQsNC90L7QstC70LXQvSDQv9C+0LjRgdC6INC/0L7RgdC70LUgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUxMAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXNjcmliZSAlc1xuIgorbXNnc3RyICLQvtC/0LjRgdCw0YLRjCAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLQndC10LTQvtC/0YPRgdGC0LjQvNC+0LUg0LjQvNGPINC+0LHRitC10LrRgtCwICVzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5laXRoZXIgYSBjb21taXQgbm9yIGJsb2IiCittc2dzdHIgIiVzINC90LUg0Y/QstC70Y/QtdGC0YHRjyDQutC+0LzQvNC40YLQvtC8INC40LvQuCDQtNCy0L7QuNGH0L3Ri9C8INC+0LHRitC10LrRgtC+0LwiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzUKK21zZ2lkICJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IgorbXNnc3RyICLQv9C+0LjRgdC6INC80LXRgtC60LgsINC60L7RgtC+0YDQsNGPINC40LTQtdGCINC/0L7RgdC70LUg0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzYKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICLQstGL0LLQvtC0INC+0YLQu9Cw0LTQvtGH0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4INGB0YLRgNCw0YLQtdCz0LjQuCDQv9C+0LjRgdC60LAg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INCy0YvQstC+0LQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzcKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC70Y7QsdGD0Y4g0YHRgdGL0LvQutGDIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM4Cittc2dpZCAidXNlIGFueSB0YWcsIGV2ZW4gdW5hbm5vdGF0ZWQiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQu9GO0LHRg9GOINC80LXRgtC60YMsINC00LDQttC1INC90LXQsNC90L3QvtGC0LjRgNC+0LLQsNC90L3Rg9GOIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM5Cittc2dpZCAiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIKK21zZ3N0ciAi0LLRgdC10LPQtNCwINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQtNC70LjQvdC90YvQuSDRhNC+0YDQvNCw0YIg0LLRi9Cy0L7QtNCwIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQwCittc2dpZCAib25seSBmb2xsb3cgZmlyc3QgcGFyZW50IgorbXNnc3RyICLRgdC70LXQtNC+0LLQsNGC0Ywg0YLQvtC70YzQutC+INC30LAg0L/QtdGA0LLRi9C8INGA0L7QtNC40YLQtdC70LXQvCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MworbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0YLQvtC70YzQutC+INGC0L7Rh9C90YvQtSDRgdC+0LLQv9Cw0LTQtdC90LjRjyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0NQorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgItGA0LDRgdGB0LzQsNGC0YDQuNCy0LDRgtGMINC/0L7RgdC70LXQtNC90LjQtSA8bj4g0LzQtdGC0L7QuiAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y46IDEwKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0NworbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgItGA0LDRgdGB0LzQsNGC0YDQuNCy0LDRgtGMINGC0L7Qu9GM0LrQviDQvNC10YLQutC4INC/0L4gPNGI0LDQsdC70L7QvdGDPiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0OQorbXNnaWQgImRvIG5vdCBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAi0L3QtSDRg9GH0LjRgtGL0LLQsNGC0Ywg0LzQtdGC0LrQuCwg0LrQvtGC0L7RgNGL0LUg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YIgPNGI0LDQsdC70L7QvdGDPiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MSBidWlsdGluL25hbWUtcmV2LmM6NDI2Cittc2dpZCAic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIgorbXNnc3RyICLQtdGB0LvQuCDQvdC1INC90LDQudC00LXQvdC+LCDQv9C+0LrQsNC30LDRgtGMINGB0L7QutGA0LDRidC10L3QvdGL0Lkg0L3QvtC80LXRgCDRgNC10LTQsNC60YbQuNC4INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUyIGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTUKK21zZ2lkICJtYXJrIgorbXNnc3RyICLQv9C+0LzQtdGC0LrQsCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MworbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCA80L/QvtC80LXRgtC60YM+INC/0YDQuCDQuNC30LzQtdC90ZHQvdC90L7QvCDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1ICjQv9C+INGD0LzQvtC70YfQsNC90LjRjjogwqstZGlydHnCuykiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTYKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGJyb2tlbiB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWJyb2tlblwiKSIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCA80L/QvtC80LXRgtC60YM+INC90LAg0L/QvtCy0YDQtdC20LTRkdC90L3QvtC1INGA0LDQsdC+0YfQtdC1INC00LXRgNC10LLQviAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y46IMKrLWJyb2tlbsK7KSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU3NAorbXNnaWQgIi0tbG9uZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFiYnJldj0wIgorbXNnc3RyICItLWxvbmcg0L3QtdGB0L7QstC80LXRgdGC0LjQvNC+INGBIC0tYWJicmV2PTAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MDMKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAi0JjQvNC10L3QsCDQvdC1INC90LDQudC00LXQvdGLLCDQvdC1INC80L7Qs9GDINC90LjRh9C10LPQviDQvtC/0LjRgdCw0YLRjC4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NTQKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1kaXJ0eSDQvdC10YHQvtCy0LzQtdGB0YLQuNC80L4g0YEg0YPQutCw0LfQsNC90LjQtdC8INGD0LrQsNC30LDRgtC10LvQtdC5INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NTYKK21zZ2lkICItLWJyb2tlbiBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tYnJva2VuINC90LXRgdC+0LLQvNC10YHRgtC40LzQviDRgSDRg9C60LDQt9Cw0L3QuNC10Lwg0YPQutCw0LfQsNGC0LXQu9C10Lkg0LrQvtC80LzQuNGC0L7QsiIKKworIzogYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiCittc2dzdHIgIsKrJXPCuzog0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC+0LHRi9GH0L3Ri9C8INGE0LDQudC70L7QvCDQuNC70Lgg0YHQuNC80LLQvtC70YzQvdC+0Lkg0YHRgdGL0LvQutC+0LkiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDQv9Cw0YDQsNC80LXRgtGAOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzUwCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgItCd0LUg0L3QsNC50LTQtdC9IGdpdCDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBidWlsdGluL2RpZmYuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgItC/0LXRgNC10LTQsNC9INC90LXQv9GA0LDQstC40LvRjNC90YvQuSDQvtCx0YrQtdC60YIgwqslc8K7LiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgItC/0LXRgNC10LTQsNC90L4g0LHQvtC70YzRiNC1INC00LLRg9GFINC00LLQvtC40YfQvdGL0YUg0L7QsdGK0LXQutGC0L7Qsjogwqslc8K7IgorCisjOiBidWlsdGluL2RpZmYuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0L0g0L3QtdC+0LHRgNCw0LHQvtGC0LDQvdC90YvQuSDQvtCx0YrQtdC60YIgwqslc8K7LiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwCittc2dpZCAiZ2l0IGRpZmZ0b29sIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZGlmZnRvb2wgWzzQvtC/0YbQuNC4Pl0gWzzQutC+0LzQvNC40YI+IFs80LrQvtC80LzQuNGCPl1dIFstLV0gWzzQv9GD0YLRjD7igKZdIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZDogJWQiCittc2dzdHIgItGB0LHQvtC5OiAlZCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRgdC40LzQstC+0LvRjNC90YPRjiDRgdGB0YvQu9C60YMgJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayBmaWxlICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRhNCw0LnQuyDRgdC40LzQstC+0LvRjNC90L7QuSDRgdGB0YvQu9C60LggJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIGZvciBzeW1saW5rICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDQvtCx0YrQtdC60YIgJXMg0LTQu9GPINGB0LjQvNCy0L7Qu9GM0L3QvtC5INGB0YHRi9C70LrQuCAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjQwNgorbXNnaWQgIiIKKyJjb21iaW5lZCBkaWZmIGZvcm1hdHMoJy1jJyBhbmQgJy0tY2MnKSBhcmUgbm90IHN1cHBvcnRlZCBpblxuIgorImRpcmVjdG9yeSBkaWZmIG1vZGUoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4iCittc2dzdHIgItC60L7QvNCx0LjQvdC40YDQvtCy0LDQvdC90YvQtSDRhNC+0YDQvNCw0YLRiyDRhNCw0LnQu9C+0LIg0YHQv9C40YHQutCwINC40LfQvNC10L3QtdC90LjQuSjCqy1jwrsg0LggwqstLWNjwrspINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDRjtGC0YHRjyDQsiDRgNC10LbQuNC80LUg0YHRgNCw0LLQvdC10L3QuNGPINC60LDRgtCw0LvQvtCz0L7QsijCqy1kwrsg0LggwqstLWRpci1kaWZmwrspLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJib3RoIGZpbGVzIG1vZGlmaWVkOiAnJXMnIGFuZCAnJXMnLiIKK21zZ3N0ciAi0L7QsdCwINGE0LDQudC70LAg0LjQt9C80LXQvdC10L3Rizogwqslc8K7INC4IMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MjgKK21zZ2lkICJ3b3JraW5nIHRyZWUgZmlsZSBoYXMgYmVlbiBsZWZ0LiIKK21zZ3N0ciAi0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMg0LHRi9C7INC/0L7QutC40L3Rg9GCLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wb3JhcnkgZmlsZXMgZXhpc3QgaW4gJyVzJy4iCittc2dzdHIgItCy0YDQtdC80LXQvdC90YvQtSDRhNCw0LnQu9GLINGD0LbQtSDQvdCw0YXQvtC00Y/RgtGB0Y8g0LIgwqslc8K7LiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0MAorbXNnaWQgInlvdSBtYXkgd2FudCB0byBjbGVhbnVwIG9yIHJlY292ZXIgdGhlc2UuIgorbXNnc3RyICLQstC+0LfQvNC+0LbQvdC+INCy0Ysg0YXQvtGC0LjRgtC1INC40YUg0YPQtNCw0LvQuNGC0Ywg0LjQu9C4INCy0L7RgdGB0YLQsNC90L7QstC40YLRjC4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2ODkKK21zZ2lkICJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIMKrZGlmZi5ndWl0b29swrsg0LLQvNC10YHRgtC+IMKrZGlmZi50b29swrsiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTEKK21zZ2lkICJwZXJmb3JtIGEgZnVsbC1kaXJlY3RvcnkgZGlmZiIKK21zZ3N0ciAi0LLRi9C/0L7Qu9C90LjRgtGMINC/0L7RhNCw0LnQu9C+0LLQvtC1INGB0YDQsNCy0L3QtdC90LjQtSDQstGB0LXQs9C+INC60LDRgtCw0LvQvtCz0LAiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTMKK21zZ2lkICJkbyBub3QgcHJvbXB0IGJlZm9yZSBsYXVuY2hpbmcgYSBkaWZmIHRvb2wiCittc2dzdHIgItC90LUg0YHQv9GA0LDRiNC40LLQsNGC0Ywg0L/QtdGA0LXQtCDQt9Cw0L/Rg9GB0LrQvtC8INGD0YLQuNC70LjRgtGLINGB0YDQsNCy0L3QtdC90LjRjyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5OAorbXNnaWQgInVzZSBzeW1saW5rcyBpbiBkaXItZGlmZiBtb2RlIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YHQuNC80LLQvtC70YzQvdGL0LUg0YHRgdGL0LvQutC4INCyINGA0LXQttC40LzQtSDRgdGA0LDQstC90LXQvdC40Y8g0LrQsNGC0LDQu9C+0LPQsCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5OQorbXNnaWQgInRvb2wiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwMAorbXNnaWQgInVzZSB0aGUgc3BlY2lmaWVkIGRpZmYgdG9vbCIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGD0LrQsNC30LDQvdC90YPRjiDRg9GC0LjQu9C40YLRgyDRgdGA0LDQstC90LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDIKK21zZ2lkICJwcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggYC0tdG9vbGAiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGB0L/QuNGB0L7QuiDRg9GC0LjQu9C40YIsINC60L7RgtC+0YDRi9C1INC80L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGBINC/0LDRgNCw0LzQtdGC0YDQvtC8IMKrLS10b29swrsiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDUKK21zZ2lkICIiCisibWFrZSAnZ2l0LWRpZmZ0b29sJyBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbiAtIHplcm8gZXhpdCIKKyIgY29kZSIKK21zZ3N0ciAi0LLRi9GF0L7QtNC40YLRjCDQuNC3IMKrZ2l0LWRpZmZ0b29swrssINC10YHQu9C4INCy0YvQt9Cy0LDQvdC90LDRjyDRg9GC0LjQu9C40YLQsCDRgdGA0LDQstC90LXQvdC40Y8g0LLQtdGA0L3Rg9C70LAg0L3QtSDQvdGD0LvQtdCy0L7QuSDQutC+0LQg0LLQvtC30LLRgNCw0YLQsCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwOAorbXNnaWQgInNwZWNpZnkgYSBjdXN0b20gY29tbWFuZCBmb3Igdmlld2luZyBkaWZmcyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0YHQvtCx0YPRjiDQutC+0LzQsNC90LTRgyDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINC40LfQvNC10L3QtdC90LjQuSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwOQorbXNnaWQgInBhc3NlZCB0byBgZGlmZmAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcyNAorbXNnaWQgImRpZmZ0b29sIHJlcXVpcmVzIHdvcmt0cmVlIG9yIC0tbm8taW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjczMQorbXNnaWQgIi0tZGlyLWRpZmYgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzM0Cittc2dpZCAiLS1ndWksIC0tdG9vbCBhbmQgLS1leHRjbWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzQyCittc2dpZCAibm8gPHRvb2w+IGdpdmVuIGZvciAtLXRvb2w9PHRvb2w+IgorbXNnc3RyICLQvdC1INC/0LXRgNC10LTQsNC90LAgPNGD0YLQuNC70LjRgtCwPiDQtNC70Y8gLS10b29sPTzRg9GC0LjQu9C40YLQsD4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NDkKK21zZ2lkICJubyA8Y21kPiBnaXZlbiBmb3IgLS1leHRjbWQ9PGNtZD4iCittc2dzdHIgItC90LUg0L/QtdGA0LXQtNCw0L3QsCA80LrQvtC80LDQvdC00LA+INC00LvRjyAtLWV4dGNtZD080LrQvtC80LDQvdC00LA+IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjkKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICJnaXQgZmFzdC1leHBvcnQgW9C+0L/RhtC40LgtcmV2LWxpc3RdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTA4NAorbXNnaWQgInNob3cgcHJvZ3Jlc3MgYWZ0ZXIgPG4+IG9iamVjdHMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0L/RgNC+0LPRgNC10YHRgSDQv9C+0YHQu9C1IDxuPiDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTA4NgorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIKK21zZ3N0ciAi0LLRi9Cx0L7RgCDQvtCx0YDQsNCx0L7RgtC60Lgg0L/QvtC00L/QuNGB0LDQvdC90YvRhSDQvNC10YLQvtC6IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTA4OQorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgItCy0YvQsdC+0YAg0L7QsdGA0LDQsdC+0YLQutC4INC80LXRgtC+0LosINC60L7RgtC+0YDRi9C80Lgg0L/QvtC80LXRh9C10L3RiyDQvtGC0YTQuNC70YzRgtGA0L7QstCw0L3QvdGL0LUg0L7QsdGK0LXQutGC0YsiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDkyCittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgItCX0LDQv9C40YHQsNGC0Ywg0L/QvtC80LXRgtC60Lgg0LIg0Y3RgtC+0YIg0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDk0Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICLQmNC80L/QvtGA0YLQuNGA0L7QstCw0YLRjCDQv9C+0LzQtdGC0LrQuCDQuNC3INGN0YLQvtCz0L4g0YTQsNC50LvQsCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwOTYKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAi0J/QvtC00LTQtdC70LDRgtGMINCw0LLRgtC+0YDQsCDQvNC10YLQutC4LCDQtdGB0LvQuCDRgyDQvNC10YLQutC4INC+0L0g0L7RgtGB0YPRgtGB0YLQstGD0LXRgiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwOTgKK21zZ2lkICJPdXRwdXQgZnVsbCB0cmVlIGZvciBlYWNoIGNvbW1pdCIKK21zZ3N0ciAi0JLRi9Cy0LXRgdGC0Lgg0L/QvtC70L3QvtC1INC00LXRgNC10LLQviDQtNC70Y8g0LrQsNC20LTQvtCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTAwCittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDQv9C+0LzQtdGC0LrRgyDQt9Cw0LLQtdGA0YjQtdC90LjRjyDQsiDQutC+0L3RhtC1INC/0L7RgtC+0LrQsCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExMDEKK21zZ2lkICJTa2lwIG91dHB1dCBvZiBibG9iIGRhdGEiCittc2dzdHIgItCf0YDQvtC/0YPRgdGC0LjRgtGMINCy0YvQstC+0LQg0LTQsNC90L3Ri9GFINC00LLQvtC40YfQvdGL0YUg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExMDIgYnVpbHRpbi9sb2cuYzoxNjA5Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAi0YHQv9C10YbQuNGE0LjQutCw0YLQvtGAINGB0YHRi9C70LrQuCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExMDMKK21zZ2lkICJBcHBseSByZWZzcGVjIHRvIGV4cG9ydGVkIHJlZnMiCittc2dzdHIgItCf0YDQuNC80LXQvdC40YLRjCDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YAg0YHRgdGL0LvQutC4INC6INGN0LrRgdC/0L7RgNGC0LjRgNGD0LXQvNGL0Lwg0YHRgdGL0LvQutCw0LwiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTA0Cittc2dpZCAiYW5vbnltaXplIG91dHB1dCIKK21zZ3N0ciAi0YHQtNC10LvQsNGC0Ywg0LLRi9Cy0L7QtCDQsNC90L7QvdC40LzQvdGL0LwiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTA2Cittc2dpZCAiUmVmZXJlbmNlIHBhcmVudHMgd2hpY2ggYXJlIG5vdCBpbiBmYXN0LWV4cG9ydCBzdHJlYW0gYnkgb2JqZWN0IGlkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTA4Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBvYmplY3QgaWRzIG9mIGJsb2JzL2NvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI4Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgZmV0Y2ggWzzQvtC/0YbQuNC4Pl0gWzzRgNC10L/QvtC30LjRgtC+0YDQuNC5PiBbPNGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgC3RgdGB0YvQu9C60Lg+4oCmXV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyOQorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IgorbXNnc3RyICJnaXQgZmV0Y2ggWzzQvtC/0YbQuNC4Pl0gPNCz0YDRg9C/0L/QsD4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozMAorbXNnaWQgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPNC+0L/RhtC40Lg+XSBbKDzRgNC10L/QvtC30LjRgtC+0YDQuNC5PiB8IDzQs9GA0YPQv9C/0LA+KeKApl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozMQorbXNnaWQgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tYWxsIFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE1IGJ1aWx0aW4vcHVsbC5jOjIwMgorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgItC40LfQstC70LXRh9GMINGB0L4g0LLRgdC10YUg0LLQvdC10YjQvdC40YUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdCyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE3IGJ1aWx0aW4vcHVsbC5jOjIwNQorbXNnaWQgImFwcGVuZCB0byAuZ2l0L0ZFVENIX0hFQUQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyIKK21zZ3N0ciAi0LTQvtC/0LjRgdCw0YLRjCDQuiAuZ2l0L0ZFVENIX0hFQUQg0LLQvNC10YHRgtC+INC/0LXRgNC10LfQsNC/0LjRgdC4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE5IGJ1aWx0aW4vcHVsbC5jOjIwOAorbXNnaWQgInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIKK21zZ3N0ciAi0L/Rg9GC0Ywg0Log0L/RgNC+0LPRgNCw0LzQvNC1INGD0L/QsNC60L7QstC60Lgg0L/QsNC60LXRgtCwINC90LAg0LzQsNGI0LjQvdC1INGBINCy0L3QtdGI0L3QuNC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LXQvCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMAorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMgorbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAi0LjQt9Cy0LvQtdGH0Ywg0YEg0L3QtdGB0LrQvtC70YzQutC40YUg0LLQvdC10YjQvdC40YUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdCyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI0IGJ1aWx0aW4vcHVsbC5jOjIxMgorbXNnaWQgImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgItC40LfQstC70LXRh9GMINCy0YHQtSDQvNC10YLQutC4INC4INGB0LLRj9C30LDQvdC90YvQtSDQvtCx0YrQtdC60YLRiyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyNgorbXNnaWQgImRvIG5vdCBmZXRjaCBhbGwgdGFncyAoLS1uby10YWdzKSIKK21zZ3N0ciAi0L3QtSDQuNC30LLQu9C10LrQsNGC0Ywg0LLRgdC1INC80LXRgtC60LggKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjgKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBmZXRjaGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICLQutC+0LvQuNGH0LXRgdGC0LLQviDQv9C+0LTQvNC+0LTRg9C70LXQuSwg0LrQvtGC0L7RgNGL0LUg0LHRg9C00YPRgiDRgdC60LDRh9Cw0L3RiyDQv9Cw0YDRgNCw0LvQtdC70YzQvdC+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTMwIGJ1aWx0aW4vcHVsbC5jOjIxNQorbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICLQv9C+0YfQuNGB0YLQuNGC0Ywg0L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0LLQvdC10YjQvdC40LUg0LLQtdGC0LrQuCwg0LrQvtGC0L7RgNGL0YUg0YPQttC1INC90LXRgiDQvdCwINCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzIKK21zZ2lkICJwcnVuZSBsb2NhbCB0YWdzIG5vIGxvbmdlciBvbiByZW1vdGUgYW5kIGNsb2JiZXIgY2hhbmdlZCB0YWdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzMgYnVpbHRpbi9mZXRjaC5jOjE1NiBidWlsdGluL3B1bGwuYzoxMzkKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgItC/0L4g0YLRgNC10LHQvtCy0LDQvdC40Y4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzQKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLRg9C/0YDQsNCy0LvQtdC90LjQtSDRgNC10LrRg9GA0YHQuNCy0L3Ri9C8INC40LfQstC70LXRh9C10L3QuNC10Lwg0L/QvtC00LzQvtC00YPQu9C10LkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzggYnVpbHRpbi9wdWxsLmM6MjIzCittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgItC+0YHRgtCw0LLQuNGC0Ywg0LfQsNCz0YDRg9C20LXQvdC90YvQuSDQv9Cw0LrQtdGCINC00LDQvdC90YvRhSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MAorbXNnaWQgImFsbG93IHVwZGF0aW5nIG9mIEhFQUQgcmVmIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0L7QsdC90L7QstC70LXQvdC40LUg0YHRgdGL0LvQutC4IEhFQUQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMgYnVpbHRpbi9mZXRjaC5jOjE0OSBidWlsdGluL3B1bGwuYzoyMjYKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIgorbXNnc3RyICLRg9C70YPQs9GD0LHQuNGC0Ywg0LjRgdGC0L7RgNC40Y4g0YfQsNGB0YLQuNGH0L3QvtCz0L4g0LrQu9C+0L3QsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NQorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aW1lIgorbXNnc3RyICLRg9Cz0LvRg9Cx0LjRgtGMINC40YHRgtC+0YDQuNGOINGH0LDRgdGC0LjRh9C90L7Qs9C+INC60LvQvtC90LAg0L7RgdC90L7QstGL0LLQsNGP0YHRjCDQvdCwINCy0YDQtdC80LXQvdC4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUxIGJ1aWx0aW4vcHVsbC5jOjIyOQorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICLQv9GA0LXQvtCx0YDQsNC30L7QstCw0YLRjCDQsiDQv9C+0LvQvdGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NAorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgItC/0YDQuNGB0L7QtdC00LjQvdGP0YLRjCDRjdGC0L4g0YHQv9C10YDQtdC00Lgg0Log0LLRi9Cy0L7QtNGDINC/0YPRgtC10Lkg0L/QvtC00LzQvtC00YPQu9GPIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU3Cittc2dpZCAiIgorImRlZmF1bHQgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIChsb3dlciBwcmlvcml0eSB0aGFuIGNvbmZpZyAiCisiZmlsZXMpIgorbXNnc3RyICLQvdCw0YHRgtGA0L7QuNGC0Ywg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4g0YDQtdC60YPRgNGB0LjQstC90L7QtSDQuNC30LLQu9C10YfQtdC90LjQtSDQv9C+0LTQvNC+0LTRg9C70LXQuSAo0LHQvtC70LXQtSDQvdC40LfQutC40Lkg0L/RgNC40L7RgNC40YLQtdGCLCDRh9C10Lwg0YTQsNC50LvRiyDQutC+0L3RhNC40LPRg9GA0LDRhtC40LgpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYxIGJ1aWx0aW4vcHVsbC5jOjIzMgorbXNnaWQgImFjY2VwdCByZWZzIHRoYXQgdXBkYXRlIC5naXQvc2hhbGxvdyIKK21zZ3N0ciAi0L/RgNC40L3QuNC80LDRgtGMINGB0YHRi9C70LrQuCwg0LrQvtGC0L7RgNGL0LUg0L7QsdC90L7QstC70Y/RjtGCIC5naXQvc2hhbGxvdyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2MiBidWlsdGluL3B1bGwuYzoyMzQKK21zZ2lkICJyZWZtYXAiCittc2dzdHIgItGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtS3RgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjMgYnVpbHRpbi9wdWxsLmM6MjM1Cittc2dpZCAic3BlY2lmeSBmZXRjaCByZWZtYXAiCittc2dzdHIgItGD0LrQsNC30LDRgtGMINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDRgdGB0YvQu9C+0Log0L/RgNC4INC40LfQstC70LXRh9C10L3QuNC4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcwCittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ2OQorbXNnaWQgIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0YHRgdGL0LvQutGDIEhFQUQg0L3QsCDQstC90LXRiNC90LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgorCisjOiBidWlsdGluL2ZldGNoLmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZpZ3VyYXRpb24gZmV0Y2gub3V0cHV0IGNvbnRhaW5zIGludmFsaWQgdmFsdWUgJXMiCittc2dzdHIgItC+0L/RhtC40Y8gZmV0Y2gub3V0cHV0INGB0L7QtNC10YDQttC40YIg0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LTQu9GPICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgItC+0LHRitC10LrRgiAlcyDQvdC1INC90LDQudC00LXQvSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcwOQorbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW9Cw0LrRgtGD0LDQu9GM0L3Qvl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MjIgYnVpbHRpbi9mZXRjaC5jOjczOCBidWlsdGluL2ZldGNoLmM6ODAxCittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiW9C+0YLQutC70L7QvdC10L3Qvl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MjMKK21zZ2lkICJjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC40LfQstC70LXRh9GMINGC0LXQutGD0YnRg9GOINCy0LXRgtC60YMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MzMKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIlvQvtCx0L3QvtCy0LvQtdC90LjQtSDQvNC10YLQutC4XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjczNCBidWlsdGluL2ZldGNoLmM6NzcxIGJ1aWx0aW4vZmV0Y2guYzo3ODQKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3OTYKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINC70L7QutCw0LvRjNC90YPRjiDRgdGB0YvQu9C60YMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MzgKK21zZ2lkICJ3b3VsZCBjbG9iYmVyIGV4aXN0aW5nIHRhZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzYwCittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICJb0L3QvtCy0LDRjyDQvNC10YLQutCwXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2MworbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW9C90L7QstCw0Y8g0LLQtdGC0LrQsF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NjYKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIlvQvdC+0LLQsNGPINGB0YHRi9C70LrQsF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3OTYKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QvtC1INC+0LHQvdC+0LLQu9C10L3QuNC1IgorCisjOiBidWlsdGluL2ZldGNoLmM6ODAxCittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAi0LHQtdC3INC/0LXRgNC10LzQvtGC0LrQuCDQstC/0LXRgNC10LQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIlcyDQvdC1INC+0YLQv9GA0LDQstC40Lsg0LLRgdC1INC90LXQvtCx0YXQvtC00LjQvNGL0LUg0L7QsdGK0LXQutGC0YtcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg2OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWplY3QgJXMgYmVjYXVzZSBzaGFsbG93IHJvb3RzIGFyZSBub3QgYWxsb3dlZCB0byBiZSB1cGRhdGVkIgorbXNnc3RyICIlcyDQvtGC0LrQu9C+0L3QtdC90L4g0LjQty3Qt9CwINGC0L7Qs9C+LCDRh9GC0L4g0YfQsNGB0YLQuNGH0L3Ri9C1INC60L7RgNC90Lgg0L3QtSDRgNCw0LfRgNC10YjQtdC90L4g0L7QsdC90L7QstC70Y/RgtGMIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTU5IGJ1aWx0aW4vZmV0Y2guYzoxMDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gJS4qc1xuIgorbXNnc3RyICLQmNC3ICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0L3QtdC60L7RgtC+0YDRi9C1INC70L7QutCw0LvRjNC90YvQtSDRgdGB0YvQu9C60Lg7INC/0L7Qv9GA0L7QsdGD0LnRgtC1INC30LDQv9GD0YHRgtC40YLRjCDCq2dpdCByZW1vdGUgcHJ1bmUgJXPCuywg0YfRgtC+0LHRiyDQv9C+0YfQuNGB0YLQuNGC0Ywg0YHRgtCw0YDRi9C1LCDQutC+0L3RhNC70LjQutGC0YPRjtGJ0LjQtSDQstC10YLQutC4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMg0LHRg9C00LXRgiDQstC40YHRj9GJ0LXQuSDQstC10YLQutC+0LkpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyDRgdGC0LDQu9CwINCy0LjRgdGP0YnQtdC5INCy0LXRgtC60L7QuSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDg0Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICJb0YPQtNCw0LvQtdC90L5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA4NSBidWlsdGluL3JlbW90ZS5jOjEwMzYKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIijQvdC10YIpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgItCe0YLQutCw0Lcg0L/QvtC70YPRh9C10L3QuNGPINCyINGC0LXQutGD0YnRg9GOINCy0LXRgtC60YMgJXMg0L3QtSDQs9C+0LvQvtCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUgwqslMiRzwrsg0LTQu9GPINC/0LDRgNCw0LzQtdGC0YDQsCDCqyUxJHPCuyDQtNC70Y8gJTMkcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICLQn9Cw0YDQsNC80LXRgtGAIMKrJXPCuyDQuNCz0L3QvtGA0LjRgNGD0LXRgtGB0Y8g0LTQu9GPICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgItCY0LfQstC70LXRh9C10L3QuNC1INC40LcgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzYgYnVpbHRpbi9yZW1vdGUuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC40LfQstC70LXRh9GMICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ4MgorbXNnaWQgIiIKKyItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSBjb25maWd1cmVkIGluICIKKyJleHRlbnNpb25zLnBhcnRpYWxDbG9uZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUwNgorbXNnaWQgIiIKKyJObyByZW1vdGUgcmVwb3NpdG9yeSBzcGVjaWZpZWQuICBQbGVhc2UsIHNwZWNpZnkgZWl0aGVyIGEgVVJMIG9yIGFcbiIKKyJyZW1vdGUgbmFtZSBmcm9tIHdoaWNoIG5ldyByZXZpc2lvbnMgc2hvdWxkIGJlIGZldGNoZWQuIgorbXNnc3RyICLQndC1INGD0LrQsNC30LDQvSDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5LiDQo9C60LDQttC40YLQtSBVUkwg0LjQu9C4INC40LzRjyDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0LjQtyDQutC+0YLQvtGA0L7Qs9C+INC00L7Qu9C20L3RiyDQuNC30LLQu9C10LrQsNGC0YzRgdGPINC90L7QstGL0LUg0YDQtdC00LDQutGG0LjQuC4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTQzCittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAi0JLQsNC8INC90YPQttC90L4g0YPQutCw0LfQsNGC0Ywg0LjQvNGPINC80LXRgtC60LguIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU5NAorbXNnaWQgIk5lZ2F0aXZlIGRlcHRoIGluIC0tZGVlcGVuIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgItCe0YLRgNC40YbQsNGC0LXQu9GM0L3QsNGPINCz0YDRg9Cx0LjQvdCwINC00LvRjyAtLWRlZXBlbiDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTk2Cittc2dpZCAiLS1kZWVwZW4gYW5kIC0tZGVwdGggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1kZWVwZW4g0LggLS1kZXB0aCDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2MDEKK21zZ2lkICItLWRlcHRoIGFuZCAtLXVuc2hhbGxvdyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4gLS1kZXB0aCDQuCAtLXVuc2hhbGxvdyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2MDMKK21zZ2lkICItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS11bnNoYWxsb3cg0L3QtSDQuNC80LXQtdGCINGB0LzRi9GB0LvQsCDQvdCwINC/0L7Qu9C90L7QvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYxOQorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICJmZXRjaCAtLWFsbCDQvdC1INC/0YDQuNC90LjQvNCw0LXRgiDQuNC80Y8g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQutCw0Log0LDRgNCz0YPQvNC10L3RgiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2MjEKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgImZldGNoIC0tYWxsINC90LUg0LjQvNC10LXRgiDRgdC80YvRgdC70LAg0L/RgNC4INGD0LrQsNC30LDQvdC40Lgg0YHQv9C10YbQuNGE0LjQutCw0YLQvtGA0L7QsiDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgItCd0LXRgiDRgtCw0LrQvtCz0L4g0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPINC40LvQuCDQs9GA0YPQv9C/0Ys6ICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYzNworbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi0J/QvtC70YPRh9C10L3QuNC1INCz0YDRg9C/0L/RiyDQuCDRg9C60LDQt9Cw0L3QuNC1INGB0L/QtdGG0LjRhNC40LrQsNGG0LjQuSDRgdGB0YvQu9C+0Log0L3QtSDQuNC80LXQtdGCINGB0LzRi9GB0LvQsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2NTMKK21zZ2lkICIiCisiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiAiCisiZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTgKK21zZ2lkICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDzRgdC+0L7QsdGJ0LXQvdC40LU+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA80YTQsNC50Ls+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcyCittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICLQvtGC0L/RgNCw0LLQuNGC0Ywg0LIg0LbRg9GA0L3QsNC7IDxuPiDQt9Cw0L/QuNGB0LXQuSDQuNC3INC60L7RgNC+0YLQutC+0LPQviDQttGD0YDQvdCw0LvQsCIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc1Cittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAi0YHQvtC60YDQsNGJ0LXQvdC40LUg0LTQu9GPIC0tbG9nICjRg9GB0YLQsNGA0LXQstGI0LXQtSkiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3OAorbXNnaWQgInRleHQiCittc2dzdHIgItGC0LXQutGB0YIiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3OQorbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIDzRgtC10LrRgdGCPiDQutCw0Log0L3QsNGH0LDQu9GM0L3QvtC1INGB0L7QvtCx0YnQtdC90LjQtSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjgwCittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgItGE0LDQudC7INC00LvRjyDRh9GC0LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFs8b3B0aW9ucz5dIFs8cGF0dGVybj5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFs80L7Qv9GG0LjQuD5dIFs80YjQsNCx0LvQvtC9Pl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTEKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDzQvtCx0YrQtdC60YI+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMgorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbW1pdD5dXSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs80LrQvtC80LzQuNGCPl1dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEzCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPGNvbW1pdD5dXSBbLS1uby1jb250YWlucyBbPGNvbW1pdD5dXSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPNC60L7QvNC80LjRgj5dXSBbLS1uby1jb250YWlucyBbPNC60L7QvNC80LjRgj5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINGD0LrQsNC30LDRgtC10LvQuCDQvNC10YHRgtCwINC30LDQv9C+0LvQvdC10L3QuNGPINCyINC/0L7QtNGF0L7QtNGP0YnQtdC8INGE0L7RgNC80LDRgtC1INC00LvRjyDQutC+0LzQsNC90LTQvdC+0LPQviDQv9GA0L7RhtC10YHRgdC+0YDQsCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDRg9C60LDQt9Cw0YLQtdC70Lgg0LzQtdGB0YLQsCDQt9Cw0L/QvtC70L3QtdC90LjRjyDQsiDQv9C+0LTRhdC+0LTRj9GJ0LXQvCDRhNC+0YDQvNCw0YLQtSDQtNC70Y8gcGVybCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINGD0LrQsNC30LDRgtC10LvQuCDQvNC10YHRgtCwINC30LDQv9C+0LvQvdC10L3QuNGPINCyINC/0L7QtNGF0L7QtNGP0YnQtdC8INGE0L7RgNC80LDRgtC1INC00LvRjyBweXRob24iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDRg9C60LDQt9Cw0YLQtdC70Lgg0LzQtdGB0YLQsCDQt9Cw0L/QvtC70L3QtdC90LjRjyDQsiDQv9C+0LTRhdC+0LTRj9GJ0LXQvCDRhNC+0YDQvNCw0YLQtSDQtNC70Y8gVGNsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM3Cittc2dpZCAic2hvdyBvbmx5IDxuPiBtYXRjaGVkIHJlZnMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0YLQvtC70YzQutC+IDxuPiDRgdC+0LLQv9Cw0LTQsNGO0YnQuNGFINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOSBidWlsdGluL3RhZy5jOjQzMworbXNnaWQgInJlc3BlY3QgZm9ybWF0IGNvbG9ycyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGG0LLQtdGC0LAg0LjQtyDRhNC+0YDQvNCw0YLQsCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBwb2ludHMgYXQgdGhlIGdpdmVuIG9iamVjdCIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgtC+0LvRjNC60L4g0YHRgdGL0LvQvtC6LCDQutC+0YLQvtGA0YvQtSDRg9C60LDQt9GL0LLQsNGO0YIg0L3QsCDQv9C10YDQtdC00LDQvdC90YvQuSDQvtCx0YrQtdC60YIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDQKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICLQstGL0LLQvtC0INGC0L7Qu9GM0LrQviDRgdC70LjRgtGL0YUg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ1Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgItCy0YvQstC+0LQg0YLQvtC70YzQutC+INC90LUg0YHQu9C40YLRi9GFINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgItCy0YvQstC+0LQg0YLQvtC70YzQutC+INGB0YHRi9C70L7Quiwg0LrQvtGC0L7RgNGL0LUg0YHQvtC00LXRgNC20LDRgiDQutC+0LzQvNC40YIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDcKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLQstGL0LLQvtC0INGC0L7Qu9GM0LrQviDRgdGB0YvQu9C+0LosINC60L7RgtC+0YDRi9C1INC90LUg0YHQvtC00LXRgNC20LDRgiDQutC+0LzQvNC40YIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg4IGJ1aWx0aW4vZnNjay5jOjE2MCBidWlsdGluL2ZzY2suYzoxNjEKK21zZ2lkICJ1bmtub3duIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIGVycm9yIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjEyMCBidWlsdGluL2ZzY2suYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gJXMgJXM6ICVzIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIHdhcm5pbmcgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmcgaW4gJXMgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE1NyBidWlsdGluL2ZzY2suYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MTY4Cittc2dpZCAid3Jvbmcgb2JqZWN0IHR5cGUgaW4gbGluayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImJyb2tlbiBsaW5rIGZyb20gJTdzICVzXG4iCisiICAgICAgICAgICAgICB0byAlN3MgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6Mjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVhY2hhYmxlICVzICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJkYW5nbGluZyAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzozNDkKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxvc3QtZm91bmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LrQvtC90YfQuNGC0YwgJyVzJyIKKworIzogYnVpbHRpbi9mc2NrLmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkgKCVkIG9iamVjdHMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo0MzgKK21zZ2lkICJicm9rZW4gbGlua3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInJvb3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZ2dlZCAlcyAlcyAoJXMpIGluICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgcmVmbG9nIGVudHJ5ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZWZsb2cgJXMtPiVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjE5Cittc2dpZCAibm90aWNlOiBObyBkZWZhdWx0IHJlZmVyZW5jZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3VsZCBub3QgYmUgcGFyc2VkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNoYTEgZmlsZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjgyCittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2ODUKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0LrQsNGC0LDQu9C+0LPQvtCyINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyBsaW5rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwNSBidWlsdGluL2luZGV4LXBhY2suYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIHRvIHNvbWV0aGluZyBzdHJhbmdlICglcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkZXRhY2hlZCBIRUFEIHBvaW50cyBhdCBub3RoaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RpY2U6ICVzIHBvaW50cyB0byBhbiB1bmJvcm4gYnJhbmNoICglcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzM0Cittc2dpZCAiQ2hlY2tpbmcgY2FjaGUgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyIGluIGNhY2hlLXRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzUwCittc2dpZCAibm9uLXRyZWUgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODEKK21zZ2lkICJnaXQgZnNjayBbPG9wdGlvbnM+XSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgZnNjayBbPNC+0L/RhtC40Lg+XSBbPNC+0LHRitC10LrRgj7igKZdIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODcKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0L3QtdC00L7RgdGC0YPQv9C90YvQtSDQvtCx0YrQtdC60YLRiyIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg4Cittc2dpZCAic2hvdyBkYW5nbGluZyBvYmplY3RzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC+0LHRitC10LrRgtGLLCDQvdCwINC60L7RgtC+0YDRi9C1INC90LXRgiDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4OQorbXNnaWQgInJlcG9ydCB0YWdzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDQvtGC0YfQtdGCINC/0L4g0LzQtdGC0LrQsNC8IgorCisjOiBidWlsdGluL2ZzY2suYzo3OTAKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0L7RgtGH0LXRgiDQv9C+INC60L7RgNC90LXQstGL0Lwg0YPQt9C70LDQvCIKKworIzogYnVpbHRpbi9mc2NrLmM6NzkxCittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgItCy0L7RgdC/0YDQuNC90LjQvNCw0YLRjCDQvtCx0YrQtdC60YLRiyDQsiDQuNC90LTQtdC60YHQtSDQutCw0Log0LrQvtGA0L3QtdCy0YvQtSDRg9C30LvRiyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzkyCittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICLRgdC+0LfQtNCw0YLRjCDQutC+0YDQvdC10LLRi9C1INGD0LfQu9GLINC20YPRgNC90LDQu9C+0LIg0YHRgdGL0LvQvtC6ICjQv9C+INGD0LzQvtC70YfQsNC90LjRjikiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc5MworbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICLRgtCw0LrQttC1INC/0YDQvtCy0LXRgNGP0YLRjCDQv9Cw0LrQtdGC0Ysg0Lgg0LDQu9GM0YLQtdGA0L3QsNGC0LjQstC90YvQtSDQvtCx0YrQtdC60YLRiyIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzk0Cittc2dpZCAiY2hlY2sgb25seSBjb25uZWN0aXZpdHkiCittc2dzdHIgItGC0L7Qu9GM0LrQviDQv9GA0L7QstC10YDQuNGC0Ywg0YHQvtC10LTQuNC90LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc5NQorbXNnaWQgImVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCx0L7Qu9C10LUg0YHRgtGA0L7Qs9GD0Y4g0L/RgNC+0LLQtdGA0LrRgyIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzk3Cittc2dpZCAid3JpdGUgZGFuZ2xpbmcgb2JqZWN0cyBpbiAuZ2l0L2xvc3QtZm91bmQiCittc2dzdHIgItC30LDQv9C40YHQsNGC0Ywg0L7QsdGK0LXQutGC0Ysg0L3QsCDQutC+0YLQvtGA0YvQtSDQvdC10YIg0YHRgdGL0LvQvtC6INCyIC5naXQvbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzk4IGJ1aWx0aW4vcHJ1bmUuYzoxMzIKK21zZ2lkICJzaG93IHByb2dyZXNzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC/0YDQvtCz0YDQtdGB0YEg0LLRi9C/0L7Qu9C90LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc5OQorbXNnaWQgInNob3cgdmVyYm9zZSBuYW1lcyBmb3IgcmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0L/QvtC00YDQvtCx0L3Ri9C1INC40LzQtdC90LAg0LTQu9GPINC90LXQtNC+0YHRgtGD0L/QvdGL0YUg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9mc2NrLmM6ODU5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyNAorbXNnaWQgIkNoZWNraW5nIG9iamVjdHMiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9mc2NrLmM6ODg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgbWlzc2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo4OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXI6IGV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzozNAorbXNnaWQgImdpdCBnYyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGdjIFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL2djLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZzdGF0ICVzOiAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0YwgZnN0YXQgJXM6ICVzIgorCisjOiBidWlsdGluL2djLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAnJXMnIHZhbHVlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjQ3NiBidWlsdGluL2luaXQtZGIuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGF0INC00LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0ODUgYnVpbHRpbi9ub3Rlcy5jOjI0MCBidWlsdGluL3RhZy5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBsYXN0IGdjIHJ1biByZXBvcnRlZCB0aGUgZm9sbG93aW5nLiBQbGVhc2UgY29ycmVjdCB0aGUgcm9vdCBjYXVzZVxuIgorImFuZCByZW1vdmUgJXMuXG4iCisiQXV0b21hdGljIGNsZWFudXAgd2lsbCBub3QgYmUgcGVyZm9ybWVkIHVudGlsIHRoZSBmaWxlIGlzIHJlbW92ZWQuXG4iCisiXG4iCisiJXMiCittc2dzdHIgItCf0L7RgdC70LXQtNC90LjQuSDQt9Cw0L/Rg9GB0LogZ2Mg0YHQvtC+0LHRidC40Lsg0YHQu9C10LTRg9GO0YnQtdC1LiDQn9C+0LbQsNC70YPQudGB0YLQsCwg0LjRgdC/0YDQsNCy0YzRgtC1INC+0YjQuNCx0LrRgyDQuCDRg9C00LDQu9C40YLQtSAlcy5cbtCQ0LLRgtC+0LzQsNGC0LjRh9C10YHQutCw0Y8g0L7Rh9C40YHRgtC60LAg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQvdC1INCx0YPQtNC10YIg0L/RgNC+0LjQt9Cy0L7QtNC40YLRjNGB0Y8sINC/0L7QutCwINGN0YLQvtGCINGE0LDQudC7INC90LUg0YPQtNCw0LvRkdC9LlxuXG4lcyIKKworIzogYnVpbHRpbi9nYy5jOjU0MAorbXNnaWQgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICLQv9C+0YfQuNGB0YLQuNGC0Ywg0L7QsdGK0LXQutGC0YssINC90LAg0LrQvtGC0L7RgNGL0LUg0L3QtdGCINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9nYy5jOjU0MgorbXNnaWQgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0Y/RgtGMINCx0L7Qu9C10LUg0LLQvdC40LzQsNGC0LXQu9GM0L3QviAo0LfQsNC90LjQvNCw0LXRgiDQsdC+0LvRjNGI0LUg0LLRgNC10LzQtdC90LgpIgorCisjOiBidWlsdGluL2djLmM6NTQzCittc2dpZCAiZW5hYmxlIGF1dG8tZ2MgbW9kZSIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjCDRgNC10LbQuNC8IGF1dG8tZ2MiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDYKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4g0LfQsNC/0YPRgdGC0LjRgtGMIGdjLCDQtNCw0LbQtSDQtdGB0YLRjCDQtNGA0YPQs9Cw0Y8g0LrQvtC/0LjRjyBnYyDRg9C20LUg0LfQsNC/0YPRidC10L3QsCIKKworIzogYnVpbHRpbi9nYy5jOjU0OQorbXNnaWQgInJlcGFjayBhbGwgb3RoZXIgcGFja3MgZXhjZXB0IHRoZSBsYXJnZXN0IHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgZ2MubG9nZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIHBydW5lIGV4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICLQkNCy0YLQvtC80LDRgtC40YfQtdGB0LrQsNGPINGD0L/QsNC60L7QstC60LAg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQsiDRhNC+0L3QtSwg0LTQu9GPINC+0L/RgtC40LzQsNC70YzQvdC+0Lkg0L/RgNC+0LjQt9Cy0L7QtNC40YLQtdC70YzQvdC+0YHRgtC4LlxuIgorCisjOiBidWlsdGluL2djLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAi0JDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LDRjyDRg9C/0LDQutC+0LLQutCwINGA0LXQv9C+0LfQuNGC0L7RgNC40Y8sINC00LvRjyDQvtC/0YLQuNC80LDQu9GM0L3QvtC5INC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLQuC5cbiIKKworIzogYnVpbHRpbi9nYy5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIgorbXNnc3RyICLQodC80L7RgtGA0LjRgtC1IMKrZ2l0IGhlbHAgZ2PCuyDRgNGD0LrQvtCy0L7QtNGB0YLQstCwINC/0L4g0YDRg9GH0L3QvtC5INC+0YfQuNGB0YLQutC1LlxuIgorCisjOiBidWlsdGluL2djLmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnYyBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gbWFjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBpZiBub3QpIgorbXNnc3RyICJnYyDRg9C20LUg0LfQsNC/0YPRidC10L0g0L3QsCDRjdGC0L7QvCDQutC+0LzQv9GM0Y7RgtC10YDQtSDCqyVzwrsgcGlkICU8UFJJdU1BWD4gKNC10YHQu9C4INC90LXRgiwg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSAtLWZvcmNlKSIKKworIzogYnVpbHRpbi9nYy5jOjY5MworbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSAiCisidGhlbS4iCittc2dzdHIgItCY0LzQtdC10YLRgdGPINGB0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0L7QsdGK0LXQutGC0L7Qsiwg0L3QsCDQutC+0YLQvtGA0YvQtSDQvdC10YIg0YHRgdGL0LvQvtC6OyDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgcHJ1bmXCuyDQtNC70Y8g0LjRhSDRg9C00LDQu9C10L3QuNGPLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MjkKK21zZ2lkICJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBncmVwIFs80L7Qv9GG0LjQuD5dIFstZV0gPNGI0LDQsdC70L7QvT4gWzzRgNC10LTQsNC60YbQuNGPPuKApl0gW1stLV0gPNC/0YPRgtGMPuKApl0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXA6INGB0LHQvtC5INGB0L7Qt9C00LDQvdC40Y8g0L/QvtGC0L7QutCwOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkgZm9yICVzIgorbXNnc3RyICLRg9C60LDQt9Cw0L3QviDQvdC10LTQvtC/0YPRgdGC0LjQvNC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0L/QvtGC0L7QutC+0LIgKCVkKSDQtNC70Y8gJXMiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBpcyB0aGUgY29uZmlndXJhdGlvbgorIy4gdmFyaWFibGUgZm9yIHR3ZWFraW5nIHRocmVhZHMsIGN1cnJlbnRseQorIy4gZ3JlcC50aHJlYWRzCisjOiBidWlsdGluL2dyZXAuYzoyODcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUxNCBidWlsdGluL2luZGV4LXBhY2suYzoxNzA1CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAi0L3QtdGCINC/0L7QtNC00LXRgNC20LrQuCDQv9C+0YLQvtC60L7Qsiwg0LjQs9C90L7RgNC40YDQvtCy0LDQvdC40LUgJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ2NiBidWlsdGluL2dyZXAuYzo1OTAgYnVpbHRpbi9ncmVwLmM6NjMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0LTQtdGA0LXQstC+ICglcykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBncmVwINC40Lcg0L7QsdGK0LXQutGC0LAg0YLQuNC/0LAgJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGAIMKrJWPCuyDQvtC20LjQtNCw0LXRgiDRh9C40YHQu9C+0LLQvtC1INC30L3QsNGH0LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxMQorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgItC40YHQutCw0YLRjCDQsiDQuNC90LTQtdC60YHQtSwg0LAg0L3QtSDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBidWlsdGluL2dyZXAuYzo4MTMKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAi0LjRgdC60LDRgtGMINCyINGB0L7QtNC10YDQttC40LzQvtC8INC90LUg0YPQv9GA0LDQstC70Y/QtdC80YvQvCBnaXQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNQorbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi0LjRgdC60LDRgtGMINC4INCyINC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFLCDQuCDQsiDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YTQsNC50LvQsNGFIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTcKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDRhNCw0LnQu9GLINGD0LrQsNC30LDQvdC90YvQtSDQsiDCqy5naXRpZ25vcmXCuyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE5Cittc2dpZCAicmVjdXJzaXZlbHkgc2VhcmNoIGluIGVhY2ggc3VibW9kdWxlIgorbXNnc3RyICLRgNC10LrRg9GA0YHQuNCy0L3Ri9C5INC/0L7QuNGB0Log0L/QviDQstGB0LXQvCDQv9C+0LTQvNC+0LTRg9C70Y/QvCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIyCittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgItC40YHQutCw0YLRjCDQsiDQvdC10YHQvtCy0L/QsNC00LDRjtGJ0LjRhSDRgdGC0YDQvtC60LDRhSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI0Cittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAi0LHQtdC3INGD0YfQtdGC0LAg0YDQtdCz0LjRgdGC0YDQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI2Cittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgItC40YHQutCw0YLRjCDRgdC+0LLQv9Cw0LTQtdC90LjRjyDRiNCw0LHQu9C+0L3QsCDRgtC+0LvRjNC60L4g0L3QsCDQs9GA0LDQvdC40YbQsNGFINGB0LvQvtCyIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjgKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICLQvtCx0YDQsNCx0L7RgtC60LAg0LTQstC+0LjRh9C90YvRhSDRhNCw0LnQu9C+0LIg0LrQsNC6INGC0LXQutGB0YLQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODMwCittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICLQvdC1INC40YHQutCw0YLRjCDRgdC+0LLQv9Cw0LTQtdC90LjRjyDRiNCw0LHQu9C+0L3QsCDQsiDQtNCy0L7QuNGH0L3Ri9GFINGE0LDQudC70LDRhSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODMzCittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgd2l0aCB0ZXh0Y29udiBmaWx0ZXJzIgorbXNnc3RyICLQvtCx0YDQsNCx0LDRgtGL0LLQsNGC0YzRgdGPINC00LLQvtC40YfQvdGL0LUg0YTQsNC50LvRiyDRgSDQv9C+0LzQvtGJ0YzRjiDRhNC40LvRjNGC0YDQvtCyIHRleHRjb252IgorCisjOiBidWlsdGluL2dyZXAuYzo4MzUKK21zZ2lkICJzZWFyY2ggaW4gc3ViZGlyZWN0b3JpZXMgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNworbXNnaWQgImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIKK21zZ3N0ciAi0L3QsCDQs9C70YPQsdC40L3QtSDQvNCw0LrRgdC40LzRgyA80LPQu9GD0LHQuNC90LA+INGD0YDQvtCy0L3QtdC5IgorCisjOiBidWlsdGluL2dyZXAuYzo4NDEKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGA0LDRgdGI0LjRgNC10L3QvdGL0LUg0YDQtdCz0YPQu9GP0YDQvdGL0LUg0LLRi9GA0LDQttC10L3QuNGPIFBPU0lYIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDQKK21zZ2lkICJ1c2UgYmFzaWMgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyAoZGVmYXVsdCkiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQsdCw0LfQvtCy0YvQtSDRgNC10LPRg9C70Y/RgNC90YvQtSDQstGL0YDQsNC20LXQvdC40Y8gUE9TSVggKNC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOKSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ3Cittc2dpZCAiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiCittc2dzdHIgItC40L3RgtC10YDQv9GA0LXRgtC40YDQvtCy0LDRgtGMINGI0LDQsdC70L7QvdGLINC60LDQuiDRhNC40LrRgdC40YDQvtCy0LDQvdC90YvQtSDRgdGC0YDQvtC60LgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MAorbXNnaWQgInVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIFBlcmwt0YHQvtCy0LzQtdGB0YLQuNC80YvQtSDRgNC10LPRg9C70Y/RgNC90YvQtSDQstGL0YDQsNC20LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MworbXNnaWQgInNob3cgbGluZSBudW1iZXJzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDQvdC+0LzQtdGA0LAg0YHRgtGA0L7QuiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU0Cittc2dpZCAic2hvdyBjb2x1bW4gbnVtYmVyIG9mIGZpcnN0IG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NQorbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0Ywg0LjQvNC10L3QsCDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NgorbXNnaWQgInNob3cgZmlsZW5hbWVzIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINC40LzQtdC90LAg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTgKK21zZ2lkICJzaG93IGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINC40LzQtdC90LAg0YTQsNC50LvQvtCyINC+0YLQvdC+0YHQuNGC0LXQu9GM0L3QviDQutCw0YLQsNC70L7Qs9CwINGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MAorbXNnaWQgInNob3cgb25seSBmaWxlbmFtZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDRgtC+0LvRjNC60L4g0LjQvNC10L3QsCDRhNCw0LnQu9C+0LIsINCwINC90LUg0YHQvtCy0L/QsNC00LDRjtGJ0LjQtSDRgdGC0YDQvtC60LgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MgorbXNnaWQgInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorbXNnc3RyICLRgdC40L3QvtC90LjQvCDQtNC70Y8gLS1maWxlcy13aXRoLW1hdGNoZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NQorbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDRgtC+0LvRjNC60L4g0L3QtdGB0L7QstC/0LDQtNCw0Y7RidC40LUg0LjQvNC10L3QsCDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NworbXNnaWQgInByaW50IE5VTCBhZnRlciBmaWxlbmFtZXMiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0LTQstC+0LjRh9C90YvQuSDQndCe0JvQrCDQv9C+0YHQu9C1INGB0L/QuNGB0LrQsCDQuNC80LXQvSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3MAorbXNnaWQgInNob3cgb25seSBtYXRjaGluZyBwYXJ0cyBvZiBhIGxpbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODcyCittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdC+0LLQv9Cw0LTQtdC90LjQuSwg0LAg0L3QtSDRgdC+0LLQv9Cw0LTQsNGO0YnQuNC1INGB0YLRgNC+0LrQuCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODczCittc2dpZCAiaGlnaGxpZ2h0IG1hdGNoZXMiCittc2dzdHIgItC/0L7QtNGB0LLQtdGH0LjQstCw0YLRjCDRgdC+0LLQv9Cw0LTQtdC90LjRjyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc1Cittc2dpZCAicHJpbnQgZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0L/Rg9GB0YLRg9GOINGB0YLRgNC+0LrRgyDQv9C+0YHQu9C1INGB0L7QstC/0LDQtNC10L3QuNC5INC40Lcg0YDQsNC30L3Ri9GFINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc3Cittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDQuNC80Y8g0YTQsNC50LvQsCDRgtC+0LvRjNC60L4g0YDQsNC3INC90LAg0L3QtdGB0LrQvtC70YzQutC+INGB0L7QstC/0LDQtNC10L3QuNC5INCyINC+0LTQvdC+0Lwg0YTQsNC50LvQtSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgwCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0YwgPG4+INGB0YLRgNC+0Log0LrQvtC90YLQtdC60YHRgtCwINC/0LXRgNC10LQg0Lgg0L/QvtGB0LvQtSDRgdC+0LLQv9Cw0LTQtdC90LjRjyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgzCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCA8bj4g0YHRgtGA0L7QuiDQutC+0L3RgtC10LrRgdGC0LAg0L/QtdGA0LXQtCDRgdC+0LLQv9Cw0LTQtdC90LjQtdC8IgorCisjOiBidWlsdGluL2dyZXAuYzo4ODUKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0YwgPG4+INGB0YLRgNC+0Log0LrQvtC90YLQtdC60YHRgtCwINC/0L7RgdC70LUg0YHQvtCy0L/QsNC00LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4NworbXNnaWQgInVzZSA8bj4gd29ya2VyIHRocmVhZHMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCA80LrQvtC7PiDRgNCw0LHQvtGH0LjRhSDQv9C+0YLQvtC60L7QsiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg4Cittc2dpZCAic2hvcnRjdXQgZm9yIC1DIE5VTSIKK21zZ3N0ciAi0YLQvtC20LUsINGH0YLQviDQuCAtQyDQmtCe0JvQmNCn0JXQodCi0JLQniIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkxCittc2dpZCAic2hvdyBhIGxpbmUgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDRgdGC0YDQvtC60YMg0YEg0LjQvNC10L3QtdC8INGE0YPQvdC60YbQuNC4INC/0LXRgNC10LQg0YHQvtCy0L/QsNC00LXQvdC40LXQvCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkzCittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0L7QutGA0YPQttCw0Y7RidGD0Y4g0YTRg9C90LrRhtC40Y4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5NgorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0YjQsNCx0LvQvtC90Ysg0LjQtyDRhNCw0LnQu9CwIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTgKK21zZ2lkICJtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgItC/0L7QuNGB0Log0YHQvtC+0YLQstC10YLRgdGC0LLQuNC5INGBIDzRiNCw0LHQu9C+0L3QvtC8PiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAwCittc2dpZCAiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIKK21zZ3N0ciAi0L7QsdGK0LXQtNC40L3QuNGC0Ywg0YjQsNCx0LvQvtC90Ysg0YPQutCw0LfQsNC90L3Ri9C1INGBINC/0L7QvNC+0YnRjNGOIC1lIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTIKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAi0L3QuNGH0LXQs9C+INC90LUg0LLRi9Cy0L7QtNC40YLRjCwg0YPQutCw0LfQsNGC0Ywg0L3QsCDRgdC+0LLQv9Cw0LTQtdC90LjQtSDRgSDQv9C+0LzQvtGJ0YzRjiDQutC+0LTQsCDQstGL0YXQvtC00LAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxNAorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0YLQvtC70YzQutC+INGB0L7QstC/0LDQtNC10L3QuNGPINC40Lcg0YTQsNC50LvQvtCyINCyINC60L7RgtC+0YDRi9GFINGB0L7QstC/0LDQtNCw0Y7RgiDQstGB0LUg0YjQsNCx0LvQvtC90YsiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxNgorbXNnaWQgInNob3cgcGFyc2UgdHJlZSBmb3IgZ3JlcCBleHByZXNzaW9uIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC00LXRgNC10LLQviDRgNCw0LfQsdC+0YDQsCDQtNC70Y8g0LLRi9GA0LDQttC10L3QuNGPINC/0L7QuNGB0LrQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6OTIwCittc2dpZCAicGFnZXIiCittc2dzdHIgItC/0LXQudC00LbQtdGAIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjAKK21zZ2lkICJzaG93IG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDRgdC+0LLQv9Cw0LTQsNGO0YnQuNC1INGE0LDQudC70Ysg0YEg0L/QvtC80L7RidGM0Y4g0L/RgNC+0LPRgNCw0LzQvNGLLdC/0LXQudC00LbQtdGA0LAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyNAorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINCy0YvQt9C+0LIgZ3JlcCgxKSAo0LjQs9C90L7RgNC40YDRg9C10YLRgdGPINCyINGN0YLQvtC5INGB0LHQvtGA0LrQtSkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk4OAorbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAyNAorbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzIgorbXNnc3RyICItLW5vLWluZGV4INC40LvQuCAtLXVudHJhY2tlZCDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSDRg9C60LDQt9Cw0L3QuNC10Lwg0YDQtdCy0LjQt9C40LgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgcmV2aXNpb246ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0L/RgNC10LTQtdC70LjRgtGMINGA0LXQtNCw0LrRhtC40Y46ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDYzCittc2dpZCAiaW52YWxpZCBvcHRpb24gY29tYmluYXRpb24sIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwMworbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICLQvdC10YIg0L/QvtC00LTQtdGA0LbQutC4INC/0L7RgtC+0LrQvtCyLCDQuNCz0L3QvtGA0LjRgNC+0LLQsNC90LjQtSAtLXRocmVhZHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjkgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUxMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSIKK21zZ3N0ciAi0YPQutCw0LfQsNC90L4g0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INC/0L7RgtC+0LrQvtCyICglZCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwOTIKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIi0tb3Blbi1maWxlcy1pbi1wYWdlciDRgNCw0LHQvtGC0LDQtdGCINGC0L7Qu9GM0LrQviDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBidWlsdGluL2dyZXAuYzoxMTE1Cittc2dpZCAib3B0aW9uIG5vdCBzdXBwb3J0ZWQgd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTIxCittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMjcKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTM1Cittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4NQorbXNnaWQgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0eXBlPl0gWy13XSBbLS1wYXRoPTxmaWxlPiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dICIKKyJbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGhhc2gtb2JqZWN0IFstdCA80YLQuNC/Pl0gWy13XSBbLS1wYXRoPTzRhNCw0LnQuz4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSBbLS1dIDzRhNCw0LnQuz7igKYiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4NgorbXNnaWQgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyIKK21zZ3N0ciAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTgKK21zZ2lkICJ0eXBlIgorbXNnc3RyICLRgtC40L8iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICLRgtC40L8g0L7QsdGK0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLQt9Cw0L/QuNGB0Ywg0L7QsdGK0LXQutGC0LAg0LIg0LHQsNC30YMg0LTQsNC90L3Ri9GFINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDEKK21zZ2lkICJyZWFkIHRoZSBvYmplY3QgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINC+0LHRitC10LrRgiDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAzCittc2dpZCAic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiCittc2dzdHIgItGB0L7RhdGA0LDQvdC40YLRjCDRhNCw0LnQuyDQsdC10Lcg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0YTQuNC70YzRgtGA0L7QsiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNAorbXNnaWQgIiIKKyJqdXN0IGhhc2ggYW55IHJhbmRvbSBnYXJiYWdlIHRvIGNyZWF0ZSBjb3JydXB0IG9iamVjdHMgZm9yIGRlYnVnZ2luZyBHaXQiCittc2dzdHIgItGF0LXRiNC40YDQvtCy0LDRgtGMINC70Y7QsdC+0Lkg0LzRg9GB0L7RgCDQuCDRgdC+0LfQtNCw0LLQsNGC0Ywg0L/QvtCy0YDQtdC20LTQtdC90L3Ri9C1INC+0LHRitC10LrRgtGLINC00LvRjyDQvtGC0LvQsNC00LrQuCBHaXQiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAi0L7QsdGA0LDQsdC+0YLQsNGC0Ywg0YTQsNC50Lsg0YLQsNC6LCDQsdGD0LTRgtC+INC+0L0g0L3QsNGF0L7QtNC40YLRgdGPINC/0L4g0YPQutCw0LfQsNC90L3QvtC80YMg0L/Rg9GC0LgiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2Cittc2dpZCAicHJpbnQgYWxsIGF2YWlsYWJsZSBjb21tYW5kcyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHQv9C40YHQvtC6INCy0YHQtdGFINC00L7RgdGC0YPQv9C90YvRhSDQutC+0LzQsNC90LQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3Cittc2dpZCAiZXhjbHVkZSBndWlkZXMiCittc2dzdHIgItC40YHQutC70Y7Rh9C40YLRjCDRgNGD0LrQvtCy0L7QtNGB0YLQstCwIgorCisjOiBidWlsdGluL2hlbHAuYzo0OAorbXNnaWQgInByaW50IGxpc3Qgb2YgdXNlZnVsIGd1aWRlcyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHQv9C40YHQvtC6INC/0L7Qu9C10LfQvdGL0YUg0YDRg9C60L7QstC+0LTRgdGC0LIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ5Cittc2dpZCAicHJpbnQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTEKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICLQvtGC0LrRgNGL0YLRjCDRgNGD0LrQvtCy0L7QtNGB0YLQstC+INCyINGE0L7RgNC80LDRgtC1IG1hbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTIKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAi0L7RgtC60YDRi9GC0Ywg0YDRg9C60L7QstC+0LTRgdGC0LLQviDQsiDQstC10LEt0LHRgNCw0YPQt9C10YDQtSIKKworIzogYnVpbHRpbi9oZWxwLmM6NTQKK21zZ2lkICJzaG93IGluZm8gcGFnZSIKK21zZ3N0ciAi0L7RgtC60YDRi9GC0Ywg0YDRg9C60L7QstC+0LTRgdGC0LLQviDQsiDRhNC+0YDQvNCw0YLQtSBpbmZvIgorCisjOiBidWlsdGluL2hlbHAuYzo1NgorbXNnaWQgInByaW50IGNvbW1hbmQgZGVzY3JpcHRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NjEKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs80LrQvtC80LDQvdC00LA+XSIKKworIzogYnVpbHRpbi9oZWxwLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgItC90LXQvtC/0L7Qt9C90LDQvdC90YvQuSDRhNC+0YDQvNCw0YIg0YDRg9C60L7QstC+0LTRgdGC0LLQsCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEwNAorbXNnaWQgIkZhaWxlZCB0byBzdGFydCBlbWFjc2NsaWVudC4iCittc2dzdHIgItCh0LHQvtC5INC/0YDQuCDQt9Cw0L/Rg9GB0LrQtSBlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExNworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAi0KHQsdC+0Lkg0L/RgNC4INC+0L/RgNC10LTQtdC70LXQvdC40Lgg0LLQtdGA0YHQuNC4IGVtYWNzY2xpZW50LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iCittc2dzdHIgItCy0LXRgNGB0LjRjyBlbWFjc2NsaWVudCDCqyVkwrsg0YHQu9C40YjQutC+0Lwg0YHRgtCw0YDQsNGPICg8IDIyKS4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjE0MyBidWlsdGluL2hlbHAuYzoxNjUgYnVpbHRpbi9oZWxwLmM6MTc1IGJ1aWx0aW4vaGVscC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0LfQsNC/0YPRgdC60LUgwqslc8K7IgorCisjOiBidWlsdGluL2hlbHAuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIsKrJXPCuzog0L/Rg9GC0Ywg0LTQu9GPINC90LXQv9C+0LTQtNC10YDQttC40LLQsNC10LzQvtC5INC/0YDQvtCz0YDQsNC80LzRiyDQv9GA0L7RgdC80L7RgtGA0LAgbWFuLlxu0JLQvNC10YHRgtC+INGN0YLQvtCz0L4g0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq21hbi480L/RgNC+0LPRgNCw0LzQvNCwPi5jbWTCuy4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogY21kIGZvciBzdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iCittc2dzdHIgIsKrJXPCuzog0LrQvtC80LDQvdC00LAg0LTQu9GPINC90LXQv9C+0LTQtNC10YDQttC40LLQsNC10LzQvtC5INC/0YDQvtCz0YDQsNC80LzRiyDQv9GA0L7RgdC80L7RgtGA0LAgbWFuLlxu0JLQvNC10YHRgtC+INGN0YLQvtCz0L4g0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq21hbi480L/RgNC+0LPRgNCw0LzQvNCwPi5wYXRowrsuIgorCisjOiBidWlsdGluL2hlbHAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAiwqslc8K7OiDQvdC10LjQt9Cy0LXRgdGC0L3QsNGPINC/0YDQvtCz0YDQsNC80LzQsCDQv9GA0L7RgdC80L7RgtGA0LAgbWFuLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzY3Cittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICLQv9GA0L7Qs9GA0LDQvNC80LAg0L/RgNC+0YHQvNC+0YLRgNCwIG1hbiDQvdC1INC+0LHRgNCw0LHQvtGC0LDQu9CwINC30LDQv9GA0L7RgSIKKworIzogYnVpbHRpbi9oZWxwLmM6Mzc1Cittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAi0L/RgNC+0LPRgNCw0LzQvNCwINC/0YDQvtGB0LzQvtGC0YDQsCBpbmZvINC90LUg0L7QsdGA0LDQsdC+0YLQsNC70LAg0LfQsNC/0YDQvtGBIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzQgYnVpbHRpbi9oZWxwLmM6NDQ1IGdpdC5jOjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFsaWFzZWQgdG8gJyVzJyIKK21zZ3N0ciAiwqslc8K7IOKAlCDRjdGC0L4g0YHQvtC60YDQsNGJ0LXQvdC40LUg0LTQu9GPIMKrJXPCuyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ4IGdpdC5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo0NzcgYnVpbHRpbi9oZWxwLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtTogJXMlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkxCittc2dpZCAiJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCB0eXBlIG1pc21hdGNoIGF0ICVzIgorbXNnc3RyICLQvdC10YHQvtC+0YLQstC10YLRgdGC0LLQuNC1INGC0LjQv9CwINC+0LHRitC10LrRgtCwINC90LAgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHJlY2VpdmUgZXhwZWN0ZWQgb2JqZWN0ICVzIgorbXNnc3RyICLQvtC20LjQtNCw0LXQvNGL0Lkg0L7QsdGK0LXQutGCINC90LUg0L/QvtC70YPRh9C10L0g0L3QsCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiCittc2dzdHIgItC+0LHRitC10LrRgiAlczog0L7QttC40LTQsNC10LzRi9C5INGC0LjQvyAlcywg0L/QvtC70YPRh9C10L0gJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QvtC70L3QuNGC0YwgJWQg0LHQsNC50YIiCittc2dzdHJbMV0gItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0L7Qu9C90LjRgtGMICVkINCx0LDQudGC0LAiCittc2dzdHJbMl0gItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0L7Qu9C90LjRgtGMICVkINCx0LDQudGC0L7QsiIKK21zZ3N0clszXSAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QvtC70L3QuNGC0YwgJWQg0LHQsNC50YLQvtCyIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjcKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgItC90LXQvtC20LjQtNCw0L3QvdGL0Lkg0LrQvtC90LXRhiDRhNCw0LnQu9CwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjgKK21zZ2lkICJyZWFkIGVycm9yIG9uIGlucHV0IgorbXNnc3RyICLQvtGI0LjQsdC60LAg0YfRgtC10L3QuNGPINCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4MAorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNC90L4g0LHQvtC70YzRiNC1INCx0LDQudGCLCDRh9C10Lwg0LHRi9C70L4g0LTQvtGB0YLRg9C/0L3QviIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjg3IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NjAwCittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAi0L/QsNC60LXRgiDRgdC70LjRiNC60L7QvCDQsdC+0LvRjNGI0L7QuSDQtNC70Y8g0YLQtdC60YPRidC10LPQviDQvtC/0YDQtdC00LXQu9C10L3QuNGPIG9mZl90IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTAgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjk0Cittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICLRgNCw0LfQvNC10YAg0L/QsNC60LXRgtCwINC/0YDQtdCy0YvRiNCw0LXRgiDQvNCw0LrRgdC40LzQsNC70YzQvdGL0Lkg0LTQvtC/0YPRgdGC0LjQvNGL0LkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMwNSBidWlsdGluL3JlcGFjay5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywgwqslc8K7IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRhNCw0LnQuyDQv9Cw0LrQtdGC0LAgwqslc8K7IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMjUKK21zZ2lkICJwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCIKK21zZ3N0ciAi0L3QtdGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDQv9C+0LTQv9C40YHQuCDQv9Cw0LrQtdGC0LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIHZlcnNpb24gJTxQUkl1MzI+IHVuc3VwcG9ydGVkIgorbXNnc3RyICLQstC10YDRgdC40Y8g0L/QsNC60LXRgtCwICU8UFJJdTMyPiDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKK21zZ3N0ciAi0L/QsNC60LXRgiDRgdC+0LTQtdGA0LbQuNGCINC/0LvQvtGF0L7QuSDQvtCx0YrQtdC60YIg0L/QviDRgdC80LXRidC10L3QuNGOICU8UFJJdU1BWD46ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAi0L/RgNC+0LPRgNCw0LzQvNCwINGB0LbQsNGC0LjRjyDQstC10YDQvdGD0LvQsCAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTE0Cittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAi0L/QtdGA0LXQv9C+0LvQvdC10L3QuNC1INC30L3QsNGH0LXQvdC40Y8g0YHQvNC10YnQtdC90LjRjyDRgyDQsdCw0LfQvtCy0L7Qs9C+INC+0LHRitC10LrRgtCwINC00LXQu9GM0YLRiyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIyCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICLRgdC80LXRidC10L3QuNC1INCx0LDQt9C+0LLQvtC5INC00LXQu9GM0YLRiyDQstGL0YjQu9C+INC30LAg0LTQvtC/0YPRgdGC0LjQvNGL0LUg0L/RgNC10LTQtdC70YsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3Ri9C5INGC0LjQvyDQvtCx0YrQtdC60YLQsCAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTYxCittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0YwgcHJlYWQg0LTQu9GPINGE0LDQudC70LAg0L/QsNC60LXRgtCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZSBtaXNzaW5nIgorbXNnaWRfcGx1cmFsICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICLQv9GA0LXQttC00LXQstGA0LXQvNC10L3QvdC+0LUg0L7QutC+0L3Rh9Cw0L3QuNC1INGE0LDQudC70LAg0L/QsNC60LXRgtCwLCAlPFBSSXVNQVg+INCx0LDQudGCINC+0YLRgdGD0YLRgdGC0LLRg9C10YIiCittc2dzdHJbMV0gItC/0YDQtdC20LTQtdCy0YDQtdC80LXQvdC90L7QtSDQvtC60L7QvdGH0LDQvdC40LUg0YTQsNC50LvQsCDQv9Cw0LrQtdGC0LAsICU8UFJJdU1BWD4g0LHQsNC50YLQsCDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCIgorbXNnc3RyWzJdICLQv9GA0LXQttC00LXQstGA0LXQvNC10L3QvdC+0LUg0L7QutC+0L3Rh9Cw0L3QuNC1INGE0LDQudC70LAg0L/QsNC60LXRgtCwLCAlPFBSSXVNQVg+INCx0LDQudGC0L7QsiDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCIgorbXNnc3RyWzNdICLQv9GA0LXQttC00LXQstGA0LXQvNC10L3QvdC+0LUg0L7QutC+0L3Rh9Cw0L3QuNC1INGE0LDQudC70LAg0L/QsNC60LXRgtCwLCAlPFBSSXVNQVg+INCx0LDQudGC0L7QsiDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1ODkKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAi0YHQtdGA0YzQtdC30L3QvtC1INC90LXRgdC+0L7RgtCy0LXRgtGB0YLQstC40LUg0L/RgNC4INGA0LDRgdC/0LDQutC+0LLQutC1IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzQgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQwIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc2MworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODAyIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMQorIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgItCd0JDQmdCU0JXQndCQINCa0J7Qm9Cb0JjQl9CY0K8gU0hBMSDQoSAlcyAhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzcgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNTMKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjEzIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCBpbmZvICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDRgdGD0YnQtdGB0YLQstGD0Y7RidC10LPQviDQvtCx0YrQtdC60YLQsCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC5INC+0LHRitC10LrRgiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvYiBvYmplY3QgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDRhNCw0LnQuyDQtNCy0L7QuNGH0L3QvtCz0L4g0L7QsdGK0LXQutGC0LAgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyNSBidWlsdGluL2luZGV4LXBhY2suYzo4NDQKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2tlZCBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhbGwgY2hpbGQgb2JqZWN0cyBvZiAlcyBhcmUgcmVhY2hhYmxlIgorbXNnc3RyICLQndC1INCy0YHQtSDQtNC+0YfQtdGA0L3QuNC1INC+0LHRitC10LrRgtGLICVzINC00L7RgdGC0LjQttC40LzRiyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTE4IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk0OQorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INC/0YDQuNC80LXQvdC10L3QuNC4INC00LXQu9GM0YLRiyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExNworbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC40LUg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExNworbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgItCY0L3QtNC10LrRgdC40YDQvtCy0LDQvdC40LUg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1MQorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAi0L/QsNC60LXRgiDQv9C+0LLRgNC10LbQtNC10L0gKNC90LXRgdC+0L7RgtCy0LXRgtGB0YLQstC40LUgU0hBMSkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTYKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIGZzdGF0INC00LvRjyDRhNCw0LnQu9CwINC/0LDQutC10YLQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1OQorbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAi0YTQsNC50Lsg0L/QsNC60LXRgtCwINGB0L7QtNC10YDQttC40YIg0LzRg9GB0L7RgCDQsiDQutC+0L3RhtC1IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTcxCittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSBpbiBwYXJzZV9wYWNrX29iamVjdHMoKSIKK21zZ3N0ciAi0LHQtdC30YPQvNC90LDRjyDQv9GD0YLQsNC90LjRhtCwINCyIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTk0Cittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAi0J7Qv9GA0LXQtNC10LvQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMDQgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQv9C+0YLQvtC6OiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI0NQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiCittc2dzdHIgItCx0LXQt9GD0LzQvdCw0Y8g0L/Rg9GC0LDQvdC40YbQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3QiCittc2dpZF9wbHVyYWwgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdHMiCittc2dzdHJbMF0gItC30LDQstC10YDRiNC10L3QviDRgSAlZCDQu9C+0LrQsNC70YzQvdGL0Lwg0L7QsdGK0LXQutGC0L7QvCIKK21zZ3N0clsxXSAi0LfQsNCy0LXRgNGI0LXQvdC+INGBICVkINC70L7QutCw0LvRjNC90YvQvNC4INC+0LHRitC10LrRgtCw0LzQuCIKK21zZ3N0clsyXSAi0LfQsNCy0LXRgNGI0LXQvdC+INGBICVkINC70L7QutCw0LvRjNC90YvQvNC4INC+0LHRitC10LrRgtCw0LzQuCIKK21zZ3N0clszXSAi0LfQsNCy0LXRgNGI0LXQvdC+INGBICVkINC70L7QutCw0LvRjNC90YvQvNC4INC+0LHRitC10LrRgtCw0LzQuCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHRhaWwgY2hlY2tzdW0gZm9yICVzIChkaXNrIGNvcnJ1cHRpb24/KSIKK21zZ3N0ciAi0J3QtdC+0LbQuNC00LDQvdC90LDRjyDQutC+0L3RgtGA0L7Qu9GM0L3QsNGPINGB0YPQvNC80LAg0LIg0LrQvtC90YbQtSAlcyAo0LTQuNGB0Log0L/QvtCy0YDQtdC20LTQtdC9PykiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gItC/0LDQutC10YIg0YHQvtC00LXRgNC20LjRgiAlZCDQvdC10YDQsNC30YDQtdGI0LXQvdC90YPRjiDQtNC10LvRjNGC0YMiCittc2dzdHJbMV0gItC/0LDQutC10YIg0YHQvtC00LXRgNC20LjRgiAlZCDQvdC10YDQsNC30YDQtdGI0LXQvdC90YvQtSDQtNC10LvRjNGC0YsiCittc2dzdHJbMl0gItC/0LDQutC10YIg0YHQvtC00LXRgNC20LjRgiAlZCDQvdC10YDQsNC30YDQtdGI0LXQvdC90YvRhSDQtNC10LvRjNGCIgorbXNnc3RyWzNdICLQv9Cw0LrQtdGCINGB0L7QtNC10YDQttC40YIgJWQg0L3QtdGA0LDQt9GA0LXRiNC10L3QvdGL0YUg0LTQtdC70YzRgiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBhcHBlbmRlZCBvYmplY3QgKCVkKSIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINGB0LbQsNGC0Ywg0L/RgNC40YHQvtC10LTQuNC90LXQvdC90YvQuSDQvtCx0YrQtdC60YIgKCVkKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAi0LvQvtC60LDQu9GM0L3Ri9C5INC+0LHRitC10LrRgiAlcyDQv9C+0LLRgNC10LbQtNC10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgItC40LzRjyDQv9Cw0LrQtdGC0LAgwqslc8K7INC90LUg0L7QutCw0L3Rh9C40LLQsNC10YLRgdGPINC90LAgwqsucGFja8K7IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAlcyBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiAlcyBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQzOQorbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0L/RgNC4INC30LDQutGA0YvRgtC40Lgg0YTQsNC50LvQsCDQv9Cw0LrQtdGC0LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NTMKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDRhNCw0LnQuyDQv9Cw0LrQtdGC0LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NjEKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0YXRgNCw0L3QuNGC0Ywg0YTQsNC50Lsg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MDUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCittc2dzdHIgItC/0LvQvtGF0L7QuSBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC5INGE0LDQudC7INC/0LDQutC10YLQsCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40Lkg0YTQsNC50Lsg0LjQvdC00LXQutGB0LAg0LTQu9GPIMKrJXPCuyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTYyMworIywgYy1mb3JtYXQKK21zZ2lkICJub24gZGVsdGE6ICVkIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAibm9uIGRlbHRhOiAlZCBvYmplY3RzIgorbXNnc3RyWzBdICLQvdC1INC00LXQu9GM0YLRizogJWQg0L7QsdGK0LXQutGCIgorbXNnc3RyWzFdICLQvdC1INC00LXQu9GM0YLRizogJWQg0L7QsdGK0LXQutGC0LAiCittc2dzdHJbMl0gItC90LUg0LTQtdC70YzRgtGLOiAlZCDQvtCx0YrQtdC60YLQvtCyIgorbXNnc3RyWzNdICLQvdC1INC00LXQu9GM0YLRizogJWQg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTYzMAorIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICLQtNC70LjQvdCwINGG0LXQv9C+0YfQutC4ID0gJWQ6ICVsdSDQvtCx0YrQtdC60YIiCittc2dzdHJbMV0gItC00LvQuNC90LAg0YbQtdC/0L7Rh9C60LggPSAlZDogJWx1INC+0LHRitC10LrRgtCwIgorbXNnc3RyWzJdICLQtNC70LjQvdCwINGG0LXQv9C+0YfQutC4ID0gJWQ6ICVsdSDQvtCx0YrQtdC60YLQvtCyIgorbXNnc3RyWzNdICLQtNC70LjQvdCwINGG0LXQv9C+0YfQutC4ID0gJWQ6ICVsdSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjY3Cittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLQtdGA0L3Rg9GC0YzRgdGPINCyINGC0LXQutGD0YnQuNC5INGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzE2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MTkKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MzUgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTczOQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgItC/0LvQvtGF0L7QuSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc1NQorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LHQtdC3IC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NTcKK21zZ2lkICItLXN0ZGluIHJlcXVpcmVzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgItC+0L/RhtC40Y8gLS1zdGRpbiDRgtGA0LXQsdGD0LXRgiDQvdCw0LvQuNGH0LjRjyDRgNC10L/QvtC30LjRgtC+0YDQuNGPIGdpdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc2MworbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiLS12ZXJpZnkg0LHQtdC3INGD0LrQsNC30LDQvdC40Y8g0LjQvNC10L3QuCDRhNCw0LnQu9CwINC/0LDQutC10YLQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTgxMSBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTgwCittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgdGVtcGxhdGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywgc3RhdCDQtNC70Y8g0YjQsNCx0LvQvtC90LAgwqslc8K7IgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbmRpciAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBvcGVuZGlyINC00LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCByZWFkbGluayDQtNC70Y8gwqslc8K7IgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0YHQuNC80LLQvtC70YzQvdGD0Y4g0YHRgdGL0LvQutGDIMKrJXPCuyDQvdCwIMKrJXPCuyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0YTQsNC50Lsgwqslc8K7INCyIMKrJXPCuyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdGVtcGxhdGUgJXMiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0L3QuNC1INGI0LDQsdC70L7QvdCwICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIGZyb20gJyVzJzogJXMiCittc2dzdHIgItC90LUg0LrQvtC/0LjRgNGD0Y4g0YjQsNCx0LvQvtC90Ysg0LjQtyDCqyVzwrs6ICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgItC90LUg0YPQtNCw0LXRgtGB0Y8g0L7QsdGA0LDQsdC+0YLQsNGC0Ywg0YTQsNC50Lsg0YLQuNC/0LAgJWQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQtdGC0YHRjyDQv9C10YDQtdC80LXRgdGC0LjRgtGMINGE0LDQudC7ICVzINCyICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNTQgYnVpbHRpbi9pbml0LWRiLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIlcyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgItCf0LXRgNC10LjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNC9INGB0YPRidC10YHRgtCy0YPRjtGJ0LjQuSDQvtCx0YnQuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkgR2l0INCyICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICLQn9C10YDQtdC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDQvSDRgdGD0YnQtdGB0YLQstGD0Y7RidC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSBHaXQg0LIgJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAi0JjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNC9INC/0YPRgdGC0L7QuSDQvtCx0YnQuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkgR2l0INCyICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAi0JjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNC9INC/0YPRgdGC0L7QuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IEdpdCDQsiAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ2OAorbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gIgorIlstLXNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTzQutCw0YLQsNC70L7Qsy3RiNCw0LHQu9C+0L3QvtCyPl0gWy0tc2hhcmVkWz080L/RgNCw0LLQsC3QtNC+0YHRgtGD0L/QsD5dXSBbPNC60LDRgtCw0LvQvtCzPl0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MQorbXNnaWQgInBlcm1pc3Npb25zIgorbXNnc3RyICLQv9GA0LDQstCwLdC00L7RgdGC0YPQv9CwIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTIKK21zZ2lkICJzcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMiCittc2dzdHIgItGD0LrQsNC20LjRgtC1LCDQtdGB0LvQuCDRgNC10L/QvtC30LjRgtC+0YDQuNC5IGdpdCDQsdGD0LTQtdGCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0L3QtdGB0LrQvtC70YzQutC40LzQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y/QvNC4IgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MjYgYnVpbHRpbi9pbml0LWRiLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0YwgbWtkaXIgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIGNoZGlyINCyICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAiJXMgKNC40LvQuCAtLXdvcmstdHJlZT080LrQsNGC0LDQu9C+0LM+KSDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCx0LXQtyDRg9C60LDQt9Cw0L3QuNGPICVzICjQuNC70LggLS1naXQtZGlyPTzQutCw0YLQsNC70L7Qsz4pIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINC00L7RgdGC0YPQvyDQuiDRgNCw0LHQvtGH0LXQvNGDINC60LDRgtCw0LvQvtCz0YMgwqslc8K7IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjE1Cittc2dpZCAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgPNC60LvRjtGHPlsoPXw6KTzQt9C90LDRh9C10L3QuNC1Pl0p4oCmXSBbPNGE0LDQudC7PuKApl0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTQKK21zZ2lkICJlZGl0IGZpbGVzIGluIHBsYWNlIgorbXNnc3RyICLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRhNCw0LnQu9GLINC90LAg0LzQtdGB0YLQtSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NQorbXNnaWQgInRyaW0gZW1wdHkgdHJhaWxlcnMiCittc2dzdHIgItGD0LTQsNC70Y/RgtGMINC/0YPRgdGC0YvQtSDQt9Cw0LLQtdGA0YjQuNGC0LXQu9C4IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk4Cittc2dpZCAid2hlcmUgdG8gcGxhY2UgdGhlIG5ldyB0cmFpbGVyIgorbXNnc3RyICLQs9C00LUg0L/QvtC80LXRgdGC0LjRgtGMINC90L7QstGL0Lkg0LfQsNCy0LXRgNGI0LjRgtC10LvRjCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDAKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi0LTQtdC50YHRgtCy0LjQtSwg0LXRgdC70Lgg0LfQsNCy0LXRgNGI0LjRgtC10LvRjCDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAyCittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgaXMgbWlzc2luZyIKK21zZ3N0ciAi0LTQtdC50YHRgtCy0LjQtSwg0LXRgdC70Lgg0LfQsNCy0LXRgNGI0LjRgtC10LvRjCDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNAorbXNnaWQgIm91dHB1dCBvbmx5IHRoZSB0cmFpbGVycyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YLQvtC70YzQutC+INC30LDQstC10YDRiNC40YLQtdC70LgiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA1Cittc2dpZCAiZG8gbm90IGFwcGx5IGNvbmZpZyBydWxlcyIKK21zZ3N0ciAi0L3QtSDQv9GA0LjQvNC10L3Rj9GC0Ywg0L/RgNCw0LLQuNC70LAg0LjQtyDRhNCw0LnQu9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDYKK21zZ2lkICJqb2luIHdoaXRlc3BhY2UtY29udGludWVkIHZhbHVlcyIKK21zZ3N0ciAi0L7QsdGK0LXQtNC40L3QuNGC0Ywg0LfQvdCw0YfQtdC90LjRjyDRgNCw0LfQtNC10LvQtdC90L3Ri9C1INC/0YDQvtCx0LXQu9C+0LwiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA3Cittc2dpZCAic2V0IHBhcnNpbmcgb3B0aW9ucyIKK21zZ3N0ciAi0YPQutCw0LfQsNC90LjQtSDQvtC/0YbQuNC5INGA0LDQt9Cx0L7RgNCwIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwOQorbXNnaWQgImRvIG5vdCB0cmVhdCAtLS0gc3BlY2lhbGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEwCittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAi0LfQsNCy0LXRgNGI0LjRgtC10LvRjCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTEKK21zZ2lkICJ0cmFpbGVyKHMpIHRvIGFkZCIKK21zZ3N0ciAi0LfQsNCy0LXRgNGI0LjRgtC10LvQuCDQtNC70Y8g0LTQvtCx0LDQstC70LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTIwCittc2dpZCAiLS10cmFpbGVyIHdpdGggLS1vbmx5LWlucHV0IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tdHJhaWxlciDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0YEgLS1vbmx5LWlucHV0INC90LUg0LjQvNC10LXRgiDRgdC80YvRgdC70LAiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTMwCittc2dpZCAibm8gaW5wdXQgZmlsZSBnaXZlbiBmb3IgaW4tcGxhY2UgZWRpdGluZyIKK21zZ3N0ciAi0L3QuNGH0LXQs9C+INC90LUg0L/QtdGA0LXQtNCw0L3Qviwg0LTQu9GPINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0YTQsNC50LvQvtCyINC90LAg0LzQtdGB0YLQtSIKKworIzogYnVpbHRpbi9sb2cuYzo1NQorbXNnaWQgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBsb2cgWzzQvtC/0YbQuNC4Pl0gWzzQtNC40LDQv9Cw0LfQvtC9LdGA0LXQtNCw0LrRhtC40Lk+XSBbWy0tXSA80L/Rg9GC0Yw+4oCmXSIKKworIzogYnVpbHRpbi9sb2cuYzo1NgorbXNnaWQgImdpdCBzaG93IFs8b3B0aW9ucz5dIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgc2hvdyBbPNC+0L/RhtC40Lg+XSA80L7QsdGK0LXQutGCPuKApiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLWRlY29yYXRlIG9wdGlvbjogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDQv9Cw0YDQsNC80LXRgtGAINC00LvRjyAtLWRlY29yYXRlOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQuNGB0YLQvtGH0L3QuNC6IgorCisjOiBidWlsdGluL2xvZy5jOjE2OQorbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YTQsNC50Lsg0YHQvtC+0YLQstC10YLRgdGC0LLQuNGPINC/0L7Rh9GC0L7QstGL0YUg0LDQtNGA0LXRgdC+0LIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcxCittc2dpZCAib25seSBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICLQtNC10LrQvtGA0LjRgNC+0LLQsNGC0Ywg0YLQvtC70YzQutC+INGB0YHRi9C70LrQuCDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC40LUgPNGI0LDQsdC70L7QvdGDPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzMKK21zZ2lkICJkbyBub3QgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAi0L3QtSDQtNC10LrQvtGA0LjRgNC+0LLQsNGC0Ywg0YHRgdGL0LvQutC4INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LjQtSA80YjQsNCx0LvQvtC90YM+IgorCisjOiBidWlsdGluL2xvZy5jOjE3NAorbXNnaWQgImRlY29yYXRlIG9wdGlvbnMiCittc2dzdHIgItC+0L/RhtC40Lgg0YTQvtGA0LzQsNGC0LAg0LLRi9Cy0L7QtNCwINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzcKK21zZ2lkICJQcm9jZXNzIGxpbmUgcmFuZ2UgbixtIGluIGZpbGUsIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAi0J7QsdGA0LDQsdC+0YLQsNGC0Ywg0LTQuNCw0L/QsNC30L7QvSDRgdGC0YDQvtC6IG4sbSDQuNC3INGE0LDQudC70LAsINC90LDRh9C40L3QsNGPINGBIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmFsIG91dHB1dDogJWQgJXNcbiIKK21zZ3N0ciAi0KTQuNC90LDQu9GM0L3Ri9C5INCy0YvQstC+0LQ6ICVkICVzXG4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBzaG93ICVzOiBiYWQgZmlsZSIKK21zZ3N0ciAiZ2l0IHNob3cgJXM6INC/0LvQvtGF0L7QuSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9sb2cuYzo1NDQgYnVpbHRpbi9sb2cuYzo2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdHlwZTogJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo3ODQKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICLQsiBmb3JtYXQuaGVhZGVycyDQvdC1INGD0LrQsNC30LDQvdC+INC30L3QsNGH0LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODg1Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICLRgdC70LjRiNC60L7QvCDQtNC70LjQvdC90L7QtSDQuNC80Y8g0LLRi9GF0L7QtNC90L7Qs9C+INC60LDRgtCw0LvQvtCz0LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo5MTgKK21zZ2lkICJuZWVkIGV4YWN0bHkgb25lIHJhbmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTI4Cittc2dpZCAibm90IGEgcmFuZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDUxCittc2dpZCAiY292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEwNTcKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGNvdmVyLWxldHRlciBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmUgaW4tcmVwbHktdG86ICVzIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0LIg0L/QvtC70LUgaW4tcmVwbHktdG86ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjExNjMKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggWzzQvtC/0YbQuNC4Pl0gWzzQvdCw0YfQuNC90LDRjy3RgT4gfCA80LTQuNCw0L/QsNC30L7QvS3RgNC10LTQsNC60YbQuNC5Pl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyMQorbXNnaWQgInR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMzMiBidWlsdGluL2xvZy5jOjIwNzYgYnVpbHRpbi9sb2cuYzoyMDc4IGJ1aWx0aW4vbG9nLmM6MjA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEzNDIgYnVpbHRpbi9yZXBsYWNlLmM6NTggYnVpbHRpbi9yZXBsYWNlLmM6MjA3CisjOiBidWlsdGluL3JlcGxhY2UuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEzNDcKK21zZ2lkICJjb3VsZCBub3QgZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM1MQorbXNnaWQgIiIKKyJmYWlsZWQgdG8gZ2V0IHVwc3RyZWFtLCBpZiB5b3Ugd2FudCB0byByZWNvcmQgYmFzZSBjb21taXQgYXV0b21hdGljYWxseSxcbiIKKyJwbGVhc2UgdXNlIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gdG8gdHJhY2sgYSByZW1vdGUgYnJhbmNoLlxuIgorIk9yIHlvdSBjb3VsZCBzcGVjaWZ5IGJhc2UgY29tbWl0IGJ5IC0tYmFzZT08YmFzZS1jb21taXQtaWQ+IG1hbnVhbGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM3MQorbXNnaWQgImZhaWxlZCB0byBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzgyCittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkIGJlIHRoZSBhbmNlc3RvciBvZiByZXZpc2lvbiBsaXN0IgorbXNnc3RyICLQsdCw0LfQvtCy0YvQuSDQutC+0LzQvNC40YIg0LTQvtC70LbQtdC9INCx0YvRgtGMINC/0YDQtdC00LrQvtC8INGB0L/QuNGB0LrQsCDRgNC10LTQsNC60YbQuNC5IgorCisjOiBidWlsdGluL2xvZy5jOjEzODYKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGRuJ3QgYmUgaW4gcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAi0LHQsNC30L7QstGL0Lkg0LrQvtC80LzQuNGCINC90LUg0LTQvtC70LbQtdC9INCx0YvRgtGMINCyINGB0L/QuNGB0LrQtSDRgNC10LTQsNC60YbQuNC5IgorCisjOiBidWlsdGluL2xvZy5jOjE0MzkKK21zZ2lkICJjYW5ub3QgZ2V0IHBhdGNoIGlkIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L/QsNGC0YfQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDkxCittc2dpZCAiZmFpbGVkIHRvIGluZmVyIHJhbmdlLWRpZmYgcmFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzNgorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgItCy0YvQstC+0LTQuNGC0YwgW1BBVENIIG4vbV0g0LTQsNC20LUg0LrQvtCz0LTQsCDQvtC00LjQvSDQv9Cw0YLRhyIKKworIzogYnVpbHRpbi9sb2cuYzoxNTM5Cittc2dpZCAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0YwgW1BBVENIXSDQtNCw0LbQtSDQutC+0LPQtNCwINC90LXRgdC60L7Qu9GM0LrQviDQv9Cw0YLRh9C10LkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU0MworbXNnaWQgInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINC/0LDRgtGH0Lgg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INCy0YvQstC+0LQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU0NQorbXNnaWQgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIgorbXNnc3RyICLRgdC+0LfQtNCw0YLRjCDRgdC+0L/RgNC+0LLQvtC00LjRgtC10LvRjNC90L7QtSDQv9C40YHRjNC80L4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU0NworbXNnaWQgInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC/0YDQvtGB0YLRg9GOINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLRjCDRh9C40YHQtdC7INC00LvRjyDQuNC80LXQvSDQstGL0YXQvtC00L3Ri9GFINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTQ4Cittc2dpZCAic2Z4IgorbXNnc3RyICLRgdGD0YTRhNC40LrRgSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTQ5Cittc2dpZCAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgdGD0YTRhNC40LrRgSA80YHRg9GE0YTQuNC60YE+INCy0LzQtdGB0YLQviDCqy5wYXRjaMK7IgorCisjOiBidWlsdGluL2xvZy5jOjE1NTEKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICLQvdCw0YfQsNGC0Ywg0L3Rg9C80LXRgNCw0YbQuNGOINC/0LDRgtGH0LXQuSDRgSA8bj4sINCwINC90LUg0YEgMSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTUzCittc2dpZCAibWFyayB0aGUgc2VyaWVzIGFzIE50aCByZS1yb2xsIgorbXNnc3RyICLQv9C+0LzQtdGC0LjRgtGMINGB0LXRgNC40Y4g0LrQsNC6INGN0L3QvdGD0Y4g0L/QvtC/0YvRgtC60YMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU1NQorbXNnaWQgIlVzZSBbUkZDIFBBVENIXSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCBbUkZDIFBBVENIXSDQstC80LXRgdGC0L4gW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTU4Cittc2dpZCAiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgWzzQv9GA0LXRhNC40LrRgT5dINCy0LzQtdGB0YLQviBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjE1NjEKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgItGB0L7RhdGA0LDQvdC40YLRjCDRgNC10LfRg9C70YzRgtC40YDRg9GO0YnQuNC1INGE0LDQudC70Ysg0LIgPNC60LDRgtCw0LvQvtCzPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTY0Cittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgItC90LUg0L7QsdGA0LXQt9Cw0YLRjC/QtNC+0LHQsNCy0LvRj9GC0YwgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTY3Cittc2dpZCAiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMINC00LLQvtC40YfQvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBidWlsdGluL2xvZy5jOjE1NjkKK21zZ2lkICJvdXRwdXQgYWxsLXplcm8gaGFzaCBpbiBGcm9tIGhlYWRlciIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDQvdGD0LvQtdCy0YPRjiDRhdC10Ygt0YHRg9C80LzRgyDQsiDQt9Cw0LPQvtC70L7QstC60LUgRnJvbSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTcxCittc2dpZCAiZG9uJ3QgaW5jbHVkZSBhIHBhdGNoIG1hdGNoaW5nIGEgY29tbWl0IHVwc3RyZWFtIgorbXNnc3RyICLQvdC1INCy0LrQu9GO0YfQsNGC0Ywg0L/QsNGC0YcsINC10YHQu9C4INC60L7QvNC80LjRgiDRg9C20LUg0LXRgdGC0Ywg0LIg0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC1IgorCisjOiBidWlsdGluL2xvZy5jOjE1NzMKK21zZ2lkICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0LIg0YTQvtGA0LzQsNGC0LUg0L/QsNGC0YfQsCwg0LAg0L3QtSDQsiDRgdGC0LDQvdC00LDRgNGC0L3QvtC8ICjQv9Cw0YLRhyArINGB0YLQsNGC0LjRgdGC0LjQutCwKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTc1Cittc2dpZCAiTWVzc2FnaW5nIgorbXNnc3RyICLQn9C10YDQtdC00LDRh9CwINGB0L7QvtCx0YnQtdC90LjQuSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTc2Cittc2dpZCAiaGVhZGVyIgorbXNnc3RyICLQt9Cw0LPQvtC70L7QstC+0LoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU3NworbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0LfQsNCz0L7Qu9C+0LLQvtC6INGB0L7QvtCx0YnQtdC90LjRjyIKKworIzogYnVpbHRpbi9sb2cuYzoxNTc4IGJ1aWx0aW4vbG9nLmM6MTU4MAorbXNnaWQgImVtYWlsIgorbXNnc3RyICLQv9C+0YfRgtCwIgorCisjOiBidWlsdGluL2xvZy5jOjE1NzgKK21zZ2lkICJhZGQgVG86IGhlYWRlciIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQt9Cw0LPQvtC70L7QstC+0LogVG86IgorCisjOiBidWlsdGluL2xvZy5jOjE1ODAKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQt9Cw0LPQvtC70L7QstC+0LogQ2M6IgorCisjOiBidWlsdGluL2xvZy5jOjE1ODIKK21zZ2lkICJpZGVudCIKK21zZ3N0ciAi0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU4MworbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgItGD0YHRgtCw0L3QvtCy0LjRgtGMINCw0LTRgNC10YEg0L7RgtC/0YDQsNCy0LjRgtC10LvRjyDQvdCwIDzQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgD4gKNC40LvQuCDQvdCwINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC60L7QvNC80LjRgtC10YDQsCwg0LXRgdC70Lgg0L7RgtGB0YPRgtGB0YLQstGD0LXRgikiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU4NQorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgItC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGALdGB0L7QvtCx0YnQtdC90LjRjyIKKworIzogYnVpbHRpbi9sb2cuYzoxNTg2Cittc2dpZCAibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IgorbXNnc3RyICLRgdC00LXQu9Cw0YLRjCDQv9C10YDQstC+0LUg0L/QuNGB0YzQvNC+INC+0YLQstC10YLQvtC8INC90LAgPNC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGALdGB0L7QvtCx0YnQtdC90LjRjz4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU4NyBidWlsdGluL2xvZy5jOjE1OTAKK21zZ2lkICJib3VuZGFyeSIKK21zZ3N0ciAi0LLQu9C+0LbQtdC90LjQtSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTg4Cittc2dpZCAiYXR0YWNoIHRoZSBwYXRjaCIKK21zZ3N0ciAi0L/RgNC40LvQvtC20LjRgtGMINC/0LDRgtGHIgorCisjOiBidWlsdGluL2xvZy5jOjE1OTEKK21zZ2lkICJpbmxpbmUgdGhlIHBhdGNoIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGMINC/0LDRgtGHINCyINGC0LXQutGB0YIg0L/QuNGB0YzQvNCwIgorCisjOiBidWlsdGluL2xvZy5jOjE1OTUKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjCDQsiDQv9C40YHRjNC80LDRhSDQuNC10YDQsNGA0YXQuNGH0L3QvtGB0YLRjCwg0YHRgtC40LvQuDogc2hhbGxvdyAo0YfQsNGB0YLQuNGH0L3Rg9GOKSwgZGVlcCAo0LPQu9GD0LHQvtC60YPRjikiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU5NworbXNnaWQgInNpZ25hdHVyZSIKK21zZ3N0ciAi0L/QvtC00L/QuNGB0YwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU5OAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQv9C+0LTQv9C40YHRjCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTk5Cittc2dpZCAiYmFzZS1jb21taXQiCittc2dzdHIgItCx0LDQt9C+0LLRi9C5INC60L7QvNC80LjRgiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjAwCittc2dpZCAiYWRkIHByZXJlcXVpc2l0ZSB0cmVlIGluZm8gdG8gdGhlIHBhdGNoIHNlcmllcyIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDRgtGA0LXQsdC+0LLQsNC90LjQuCDQtNC10YDQtdCy0LAg0Log0YHQtdGA0LjQuCDQv9Cw0YLRh9C10LkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYwMgorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSBmcm9tIGEgZmlsZSIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQv9C+0LTQv9C40YHRjCDQuNC3INGE0LDQudC70LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYwMworbXNnaWQgImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiCittc2dzdHIgItC90LUg0LLRi9Cy0L7QtNC40YLRjCDQuNC80LXQvdCwINGE0LDQudC70L7QsiDQv9Cw0YLRh9C10LkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYwNQorbXNnaWQgInNob3cgcHJvZ3Jlc3Mgd2hpbGUgZ2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC/0YDQvtCz0YDQtdGB0YEg0LLRi9C/0L7Qu9C90LXQvdC40Y8g0LLQviDRgdC+0LfQtNCw0L3QuNGPINC/0LDRgtGH0LXQuSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjA2Cittc2dpZCAicmV2IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYwNworbXNnaWQgInNob3cgY2hhbmdlcyBhZ2FpbnN0IDxyZXY+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjEwCittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJlZnNwZWM+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjEyCittc2dpZCAicGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINGB0YLRgNC+0LrQsCDQuNC00LXQvdGC0LjRhNC40LrQsNGG0LjQuDogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMgorbXNnaWQgIi1uIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwNAorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzEyCittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHkg0L3QtSDQuNC80LXQtdGCINGB0LzRi9GB0LvQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzE0Cittc2dpZCAiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtc3RhdHVzINC90LUg0LjQvNC10LXRgiDRgdC80YvRgdC70LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcxNgorbXNnaWQgIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1jaGVjayDQvdC1INC40LzQtdC10YIg0YHQvNGL0YHQu9CwIgorCisjOiBidWlsdGluL2xvZy5jOjE3NDgKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAi0YHRgtCw0L3QtNCw0YDRgtC90YvQuSDQstGL0LLQvtC0INC40LvQuCDQutCw0YLQsNC70L7Qsz8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgzNworbXNnaWQgIi0taW50ZXJkaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4NDEKK21zZ2lkICJJbnRlcmRpZmY6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg0MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlcmRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg0OAorbXNnaWQgIi0tY3JlYXRpb24tZmFjdG9yIHJlcXVpcmVzIC0tcmFuZ2UtZGlmZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4NTIKK21zZ2lkICItLXJhbmdlLWRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg2MAorbXNnaWQgIlJhbmdlLWRpZmY6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJSYW5nZS1kaWZmIGFnYWluc3QgdiVkOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YTQsNC50Lsg0L/QvtC00L/QuNGB0Lggwqslc8K7IgorCisjOiBidWlsdGluL2xvZy5jOjE5MDgKK21zZ2lkICJHZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgItCh0L7Qt9C00LDQvdC40LUg0L/QsNGC0YfQtdC5IgorCisjOiBidWlsdGluL2xvZy5jOjE5NTIKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjIwMTEKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs80LLRi9GI0LXRgdGC0L7Rj9GJ0LDRjy3QstC10YLQutCwPiBbPNGA0LXQtNCw0LrRhtC40Y8+IFs80L7Qs9GA0LDQvdC40YfQtdC90LjQtT5dXV0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjA2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gIgorIm1hbnVhbGx5LlxuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0L7RgtGB0LvQtdC20LjQstCw0LXQvNGD0Y4g0LLQvdC10YjQvdGO0Y4g0LLQtdGC0LrRgywg0YPQutCw0LbQuNGC0LUgPNCy0YvRiNC10YHRgtC+0Y/RidGD0Y4t0LLQtdGC0LrRgz4g0LLRgNGD0YfQvdGD0Y4uXG4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzAKK21zZ2lkICJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBscy1maWxlcyBbPNC+0L/RhtC40Lg+XSBbPNGE0LDQudC7PuKApl0iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjYKK21zZ2lkICJpZGVudGlmeSB0aGUgZmlsZSBzdGF0dXMgd2l0aCB0YWdzIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINC40LzQtdC90LAg0YTQsNC50LvQvtCyINGBINC80LXRgtC60LDQvNC4IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI4Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgdC40LzQstC+0LvRiyDQsiDQvdC40LbQvdC10Lwg0YDQtdCz0LjRgdGC0YDQtSDQtNC70Y8gwqvQv9GA0LXQtNC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3QviDQsdC10Lcg0LjQt9C80LXQvdC10L3QuNC5wrsg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMwCittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnZnNtb25pdG9yIGNsZWFuJyBmaWxlcyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGB0LjQvNCy0L7Qu9GLINC90LjQttC90LXQs9C+INGA0LXQs9C40YHRgtGA0LAg0LTQu9GPINGE0LDQudC70L7QsiDCq2ZzbW9uaXRvciBjbGVhbsK7IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMyCittc2dpZCAic2hvdyBjYWNoZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZGVmYXVsdCkiCittc2dzdHIgItC/0L7QutCw0LfRi9Cy0LDRgtGMINC60Y3RiNC40YDQvtCy0LDQvdC90YvQtSDRhNCw0LnQu9GLINC/0YDQuCDQstGL0LLQvtC00LUgKNC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOKSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNAorbXNnaWQgInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQv9C+0LrQsNC30YvQstCw0YLRjCDRg9C00LDQu9C10L3QvdGL0LUg0YTQsNC50LvRiyDQv9GA0Lgg0LLRi9Cy0L7QtNC1IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM2Cittc2dpZCAic2hvdyBtb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQv9C+0LrQsNC30YvQstCw0YLRjCDQuNC30LzQtdC90LXQvdC90YvQtSDRhNCw0LnQu9GLINC/0YDQuCDQstGL0LLQvtC00LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzgKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgItC/0L7QutCw0LfRi9Cy0LDRgtGMINC00YDRg9Cz0LjQtSDRhNCw0LnQu9GLINC/0YDQuCDQstGL0LLQvtC00LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDAKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi0L/QvtC60LDQt9GL0LLQsNGC0Ywg0LjQs9C90L7RgNC40YDRg9C10LzRi9C1INGE0LDQudC70Ysg0L/RgNC4INCy0YvQstC+0LTQtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MworbXNnaWQgInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQv9C+0LrQsNC30YvQstCw0YLRjCDQuNC80Y8g0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3QvtCz0L4g0L7QsdGK0LXQutGC0LAg0L3QsCDQstGL0LLQvtC00LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDUKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICLQv9C+0LrQsNC30YvQstCw0YLRjCDRhNCw0LnQu9GLINCyINGE0LDQudC70L7QstC+0Lkg0YHQuNGB0YLQtdC80LUsINC60L7RgtC+0YDRi9C1INC00L7Qu9C20L3RiyDQsdGL0YLRjCDRg9C00LDQu9C10L3RiyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NworbXNnaWQgInNob3cgJ290aGVyJyBkaXJlY3RvcmllcycgbmFtZXMgb25seSIKK21zZ3N0ciAi0L/QvtC60LDQt9GL0LLQsNGC0Ywg0YLQvtC70YzQutC+INC40LzQtdC90LAg0YMgwqvQtNGA0YPQs9C40YXCuyDQutCw0YLQsNC70L7Qs9C+0LIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDkKK21zZ2lkICJzaG93IGxpbmUgZW5kaW5ncyBvZiBmaWxlcyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQutC+0L3RhtGLINGB0YLRgNC+0Log0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTUxCittc2dpZCAiZG9uJ3Qgc2hvdyBlbXB0eSBkaXJlY3RvcmllcyIKK21zZ3N0ciAi0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCDQv9GD0YHRgtGL0LUg0LrQsNGC0LDQu9C+0LPQuCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi0L/QvtC60LDQt9GL0LLQsNGC0Ywg0L3QtSDRgdC70LjRgtGL0LUg0YTQsNC50LvRiyDQvdCwINCy0YvQstC+0LTQtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NgorbXNnaWQgInNob3cgcmVzb2x2ZS11bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICLQv9C+0LrQsNC30YvQstCw0YLRjCDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDRgNCw0LfRgNC10YjQtdC90LjQuCDQutC+0L3RhNC70LjQutGC0L7QsiDQuCDQvtGC0LzQtdC90LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTgKK21zZ2lkICJza2lwIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4iCittc2dzdHIgItC/0YDQvtC/0YPRgdGC0LjRgtGMINGE0LDQudC70YssINGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LjQtSDRiNCw0LHQu9C+0L3RgyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2MQorbXNnaWQgImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iCittc2dzdHIgItC/0YDQvtGH0LjRgtCw0YLRjCDRiNCw0LHQu9C+0L3RiyDQuNGB0LrQu9GO0YfQtdC90LjRjyDQuNC3IDzRhNCw0LnQuz4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjQKK21zZ2lkICJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0LUg0L/QvtC60LDRgtCw0LvQvtC20L3Ri9C1INGI0LDQsdC70L7QvdGLINC40YHQutC70Y7Rh9C10L3QuNGPINC40LcgPNGE0LDQudC7PiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NgorbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0YHRgtCw0L3QtNCw0YDRgtC90YvQtSDQuNGB0LrQu9GO0YfQtdC90LjRjyBnaXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzAKK21zZ2lkICJtYWtlIHRoZSBvdXRwdXQgcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDQv9GD0YLQuCDQvtGC0L3QvtGB0LjRgtC10LvRjNC90L4g0LrQvtGA0L3QtdCy0L7Qs9C+INC60LDRgtCw0LvQvtCz0LAg0L/RgNC+0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzMKK21zZ2lkICJyZWN1cnNlIHRocm91Z2ggc3VibW9kdWxlcyIKK21zZ3N0ciAi0YDQtdC60YPRgNGB0LjQstC90L4g0L/QviDQv9C+0LTQvNC+0LTRg9C70Y/QvCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NQorbXNnaWQgImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIKK21zZ3N0ciAi0LXRgdC70Lgg0LrQsNC60L7QuS3Qu9C40LHQviA80YTQsNC50Ls+INC90LUg0LIg0LjQvdC00LXQutGB0LUsINGB0YfQuNGC0LDRgtGMINGN0YLQviDQvtGI0LjQsdC60L7QuSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NgorbXNnaWQgInRyZWUtaXNoIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Ywt0LTQtdGA0LXQstCwIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc3Cittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAi0L/RgNC40YLQstC+0YDQuNGC0YzRgdGPLCDRh9GC0L4g0L/Rg9GC0Lgg0YPQtNCw0LvQtdC90YssINGCLtC6LiA80YPQutCw0LfQsNGC0LXQu9GMLdC00LXRgNC10LLQsD4g0LXRidC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc5Cittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQvtGC0LvQsNC00L7Rh9C90YPRjiDQuNC90YTQvtGA0LzQsNGG0LjRjiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo5Cittc2dpZCAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPHJlcG9zaXRvcnk+IFs8cmVmcz4uLi5dXSIKK21zZ3N0ciAiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PNC30LDQv9GD0YHQuj5dXG4gICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4gICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs80YDQtdC/0L7Qt9C40YLQvtGA0LjQuT4gWzzRgdGB0YvQu9C60Lg+4oCmXV0iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMIFVSTCDQstC90LXRiNC90LjRhSDRgNC10L/QvtC30LjRgtC+0YDQuNC10LIiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAgYnVpbHRpbi9scy1yZW1vdGUuYzo2MiBidWlsdGluL3JlYmFzZS5jOjE0NTgKK21zZ2lkICJleGVjIgorbXNnc3RyICLQt9Cw0L/Rg9GB0LoiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjEgYnVpbHRpbi9scy1yZW1vdGUuYzo2MworbXNnaWQgInBhdGggb2YgZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUgaG9zdCIKK21zZ3N0ciAi0L/Rg9GC0Ywg0LogZ2l0LXVwbG9hZC1wYWNrINC90LAg0LLQvdC10YjQvdC10Lwg0YHQtdGA0LLQtdGA0LUiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjUKK21zZ2lkICJsaW1pdCB0byB0YWdzIgorbXNnc3RyICLQvtCz0YDQsNC90LjRh9C40YLRjCDQstGL0LLQvtC0INC80LXRgtC60LDQvNC4IgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY2Cittc2dpZCAibGltaXQgdG8gaGVhZHMiCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LjRgtGMINCy0YvQstC+0LQg0YPQutCw0LfQsNGC0LXQu9GP0LzQuCDQvdCwINCy0LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjcKK21zZ2lkICJkbyBub3Qgc2hvdyBwZWVsZWQgdGFncyIKK21zZ3N0ciAi0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCDRg9C00LDQu9GR0L3QvdGL0LUg0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2OQorbXNnaWQgInRha2UgdXJsLjxiYXNlPi5pbnN0ZWFkT2YgaW50byBhY2NvdW50IgorbXNnc3RyICLRg9GH0LjRgtGL0LLQsNGC0YwgdXJsLjzQsdCw0LfQsD4uaW5zdGVhZE9mIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjcyCittc2dpZCAiZXhpdCB3aXRoIGV4aXQgY29kZSAyIGlmIG5vIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kIgorbXNnc3RyICLQstGL0YXQvtC00LjRgtGMINGBINC60L7QtNC+0LwgMiwg0LXRgdC70Lgg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNC1INGB0YHRi9C70LrQuCDQvdC1INC90LDQudC00LXQvdGLIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjc1Cittc2dpZCAic2hvdyB1bmRlcmx5aW5nIHJlZiBpbiBhZGRpdGlvbiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgYnkgaXQiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0YLQsNC60LbQtSDQstC90YPRgtGA0LXQvdC90Y7RjiDRgdGB0YvQu9C60YMg0LIg0LTQvtC/0L7Qu9C90LXQvdC40LUg0Log0L7QsdGK0LXQutGC0YMsINC90LAg0LrQvtGC0L7RgNGL0Lkg0L7QvdCwINGD0LrQsNC30YvQstCw0LXRgiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MzAKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBbPNC+0L/RhtC40Lg+XSA80YPQutCw0LfQsNGC0LXQu9GMLdC00LXRgNC10LLQsD4gWzzQv9GD0YLRjD7igKZdIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjgKK21zZ2lkICJvbmx5IHNob3cgdHJlZXMiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0YLQvtC70YzQutC+INC00LXRgNC10LLRjNGPIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzAKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgItC/0YDQvtGF0L7QtNC40YLRjCDRgNC10LrRg9GA0YHQuNCy0L3QviDQsiDQv9C+0LTQtNC10YDQtdCy0YzRjyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMyCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDQtNC10YDQtdCy0YzRjyDQv9GA0Lgg0YDQtdC60YPRgNGB0LjQstC90L7QvCDQv9GA0L7RhdC+0LTQtSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAi0YDQsNC30LTQtdC70Y/RgtGMINC30LDQv9C40YHQuCDRgSDQv9C+0LzQvtGJ0YzRjiDQndCj0JvQldCS0J7Qk9CeINCx0LDQudGC0LAiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNgorbXNnaWQgImluY2x1ZGUgb2JqZWN0IHNpemUiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywg0YDQsNC30LzQtdGAINC+0LHRitC10LrRgtCwIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzggYnVpbHRpbi9scy10cmVlLmM6MTQwCittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDRgtC+0LvRjNC60L4g0LjQvNC10L3QsCDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MworbXNnaWQgInVzZSBmdWxsIHBhdGggbmFtZXMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQv9C+0LvQvdGL0LUg0L/Rg9GC0LgiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0NQorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0L/QvtC70L3QvtC1INC00LXRgNC10LLQvjsg0L3QtSDRgtC+0LvRjNC60L4g0YLQtdC60YPRidC40Lkg0LrQsNGC0LDQu9C+0LMgKNCy0LrQu9GO0YfQsNC10YIg0LIg0YHQtdCx0Y8gLS1mdWxsLW5hbWUpIgorCisjOiBidWlsdGluL21haWxzcGxpdC5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBtYm94OiAnJXMnIgorbXNnc3RyICLQv9GD0YHRgtC+0LkgbWJveDogwqslc8K7IgorCisjOiBidWlsdGluL21lcmdlLmM6NTQKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IG1lcmdlIFs80L7Qv9GG0LjQuD5dIFs80LrQvtC80LzQuNGCPuKApl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NQorbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU2Cittc2dpZCAiZ2l0IG1lcmdlIC0tY29udGludWUiCittc2dzdHIgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE2Cittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICLQv9GA0Lgg0YPQutCw0LfQsNC90LjQuCDQv9Cw0YDQsNC80LXRgtGA0LAgwqttwrsg0YLRgNC10LHRg9C10YLRgdGPINGD0LrQsNC30LDRgtGMINC30L3QsNGH0LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDRgdGC0YDQsNGC0LXQs9C40Y4g0YHQu9C40Y/QvdC40Y8gwqslc8K7LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgItCU0L7RgdGC0YPQv9C90YvQtSDRgdGC0YDQsNGC0LXQs9C40Lg6IgorCisjOiBidWlsdGluL21lcmdlLmM6MTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICLQlNC+0YHRgtGD0L/QvdGL0LUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0YHQutC40LUg0YHRgtGA0LDRgtC10LPQuNC4OiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0MiBidWlsdGluL3B1bGwuYzoxNTAKK21zZ2lkICJkbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0Ywg0YHRgtCw0YLQuNGB0YLQuNC60YMg0LjQt9C80LXQvdC10L3QuNC5INC/0L7RgdC70LUg0L7QutC+0L3Rh9Cw0L3QuNGPINGB0LvQuNGP0L3QuNGPIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ1IGJ1aWx0aW4vcHVsbC5jOjE1MworbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHRgtCw0YLQuNGB0YLQuNC60YMg0LjQt9C80LXQvdC10L3QuNC5INC/0L7RgdC70LUg0L7QutC+0L3Rh9Cw0L3QuNGPINGB0LvQuNGP0L3QuNGPIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ2IGJ1aWx0aW4vcHVsbC5jOjE1NgorbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIijRgdC40L3QvtC90LjQvCDQtNC70Y8gLS1zdGF0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0OCBidWlsdGluL3B1bGwuYzoxNTkKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0YwgKNC80LDQutGB0LjQvNGD0LwgPG4+KSDQt9Cw0L/QuNGB0LXQuSDQuNC3INC60L7RgNC+0YLQutC+0LPQviDQttGD0YDQvdCw0LvQsCDQsiDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0YMg0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTEgYnVpbHRpbi9wdWxsLmM6MTY1Cittc2dpZCAiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiCittc2dzdHIgItGB0L7Qt9C00LDRgtGMINC+0LTQuNC9INC60L7QvNC80LjRgiwg0LLQvNC10YHRgtC+INCy0YvQv9C+0LvQvdC10L3QuNGPINGB0LvQuNGP0L3QuNGPIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUzIGJ1aWx0aW4vcHVsbC5jOjE2OAorbXNnaWQgInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIKK21zZ3N0ciAi0YHQtNC10LvQsNGC0Ywg0LrQvtC80LzQuNGCLCDQtdGB0LvQuCDRgdC70LjRj9C90LjQtSDQv9GA0L7RiNC70L4g0YPRgdC/0LXRiNC90L4gKNC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NSBidWlsdGluL3B1bGwuYzoxNzEKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgItC+0YLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0L/QtdGA0LXQtCDQstGL0L/QvtC70L3QtdC90LjQtdC8INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU3Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KSIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINC/0LXRgNC10LzQvtGC0LrRgyDQstC/0LXRgNC10LQgKNC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1OSBidWlsdGluL3B1bGwuYzoxNzgKK21zZ2lkICJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIgorbXNnc3RyICLQvtGC0LzQtdC90LjRgtGMINCy0YvQv9C+0LvQvdC10L3QuNC1INGB0LvQuNGP0L3QuNGPLCDQtdGB0LvQuCDQv9C10YDQtdC80L7RgtC60LAg0LLQv9C10YDQtdC0INC90LXQstC+0LfQvNC+0LbQvdCwIgorCisjOiBidWlsdGluL21lcmdlLmM6MjYzIGJ1aWx0aW4vcHVsbC5jOjE4MQorbXNnaWQgInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LjRgtGMLCDRh9GC0L4g0YPQutCw0LfQsNC90L3Ri9C5INC60L7QvNC80LjRgiDQuNC80LXQtdGCINCy0LXRgNC90YPRjiDRjdC70LXQutGC0YDQvtC90L3Rg9GOINC/0L7QtNC/0LjRgdGMIEdQRyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NCBidWlsdGluL25vdGVzLmM6Nzg3IGJ1aWx0aW4vcHVsbC5jOjE4NQorIzogYnVpbHRpbi9yZWJhc2UuYzo0OTIgYnVpbHRpbi9yZWJhc2UuYzoxNDcxIGJ1aWx0aW4vcmV2ZXJ0LmM6MTEzCittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgItGB0YLRgNCw0YLQtdCz0LjRjyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NSBidWlsdGluL3B1bGwuYzoxODYKK21zZ2lkICJtZXJnZSBzdHJhdGVneSB0byB1c2UiCittc2dzdHIgItC40YHQv9C+0LvRjNC30YPQtdC80LDRjyDRgdGC0YDQsNGC0LXQs9C40Y8g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjYgYnVpbHRpbi9wdWxsLmM6MTg5Cittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICLQvtC/0YbQuNGPPdC30L3QsNGH0LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjcgYnVpbHRpbi9wdWxsLmM6MTkwCittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi0L7Qv9GG0LjQuCDQtNC70Y8g0LLRi9Cx0YDQsNC90L3QvtC5INGB0YLRgNCw0YLQtdCz0LjQuCDRgdC70LjRj9C90LjRjyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OQorbXNnaWQgIm1lcmdlIGNvbW1pdCBtZXNzYWdlIChmb3IgYSBub24tZmFzdC1mb3J3YXJkIG1lcmdlKSIKK21zZ3N0ciAi0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwINC00LvRjyDRgdC70LjRj9C90LjRjyAo0LTQu9GPINGB0LvQuNGP0L3QuNGPINCx0LXQtyDQv9C10YDQtdC80L7RgtC60Lgg0LLQv9C10YDQtdC0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3NgorbXNnaWQgImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICLQvtGC0LzQtdC90LjRgtGMINCy0YvQv9C+0LvQvdC10L3QuNC1INC/0YDQvtC40YHRhdC+0LTRj9GJ0LXQs9C+INGB0LvQuNGP0L3QuNGPIgorCisjOiBidWlsdGluL21lcmdlLmM6Mjc4Cittc2dpZCAiY29udGludWUgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgItC/0YDQvtC00L7Qu9C20LjRgtGMINCy0YvQv9C+0LvQvdC10L3QuNC1INC/0YDQvtC40YHRhdC+0LTRj9GJ0LXQs9C+INGB0LvQuNGP0L3QuNGPIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgwIGJ1aWx0aW4vcHVsbC5jOjE5NworbXNnaWQgImFsbG93IG1lcmdpbmcgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINGB0LvQuNGP0L3QuNC1INC90LXRgdCy0Y/Qt9Cw0L3QvdGL0YUg0LjRgdGC0L7RgNC40Lkg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBidWlsdGluL21lcmdlLmM6Mjg2Cittc2dpZCAidmVyaWZ5IGNvbW1pdC1tc2cgaG9vayIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LjRgtGMINC/0LXRgNC10YXQstCw0YLRh9C40LogY29tbWl0LW1zZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxMQorbXNnaWQgImNvdWxkIG5vdCBydW4gc3Rhc2guIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGFzaC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTYKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INC/0YDQuCDQstGL0L/QvtC70L3QtdC90LjQuCBzdGFzaCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0L7QsdGK0LXQutGCOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM0MyBidWlsdGluL21lcmdlLmM6MzYwCittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INCy0YvQv9C+0LvQvdC10L3QuNC4IHJlYWQtdHJlZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM5MAorbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKNC90LXRh9C10LPQviDRg9C/0LvQvtGC0L3Rj9GC0YwpIgorCisjOiBidWlsdGluL21lcmdlLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAi0KPQv9C70L7RgtC90LXQvdC40LUg0LrQvtC80LzQuNGC0LAg4oCUINC90LUg0L7QsdC90L7QstC70Y/RjyBIRUFEXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICLQndC10YIg0YHQvtC+0LHRidC10L3QuNGPINGB0LvQuNGP0L3QuNGPIOKAlCDQvdC1INC+0LHQvdC+0LLQu9GP0LXQvCBIRUFEXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAiwqslc8K7INC90LUg0YPQutCw0LfRi9Cy0LDQtdGCINC90LAg0LrQvtC80LzQuNGCIgorCisjOiBidWlsdGluL21lcmdlLmM6NTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90LDRjyDRgdGC0YDQvtC60LAgYnJhbmNoLiVzLm1lcmdlb3B0aW9uczogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MTIKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICLQndC1INC+0LHRgNCw0LHQsNGC0YvQstCw0Y4g0L3QuNGH0LXQs9C+LCDQutGA0L7QvNC1INGB0LvQuNGP0L3QuNGPINC00LLRg9GFINGD0LrQsNC30LDRgtC10LvQtdC5INC90LAg0LLQtdGC0LrQuC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAi0J3QtdC40LfQstC10YHRgtC90YvQuSDQv9Cw0YDQsNC80LXRgtGAIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc5MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQtdGB0YLRjCDQuNC3IMKrJXPCuyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgItCd0LUg0LLRi9C/0L7Qu9C90Y/RjiDQutC+0LzQvNC40YIg0YHQu9C40Y/QvdC40Y87INC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgY29tbWl0wrsg0LTQu9GPINC30LDQstC10YDRiNC10L3QuNGPINGB0LvQuNGP0L3QuNGPLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA4Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODEzCittc2dpZCAiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NTcKK21zZ2lkICJFbXB0eSBjb21taXQgbWVzc2FnZS4iCittc2dzdHIgItCf0YPRgdGC0L7QtSDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAi0J/RgNC10LrRgNCw0YHQvdC+LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0LLQtdGB0YLQuCDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtC1INGB0LvQuNGP0L3QuNC1OyDQuNGB0L/RgNCw0LLRjNGC0LUg0LrQvtC90YTQu9C40LrRgtGLINC4INGB0LTQtdC70LDQudGC0LUg0LrQvtC80LzQuNGCINGA0LXQt9GD0LvRjNGC0LDRgtCwLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTc1Cittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICLQndC10YIg0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQuC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NzcKK21zZ2lkICJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgItCjINGC0LXQutGD0YnQtdC5INCy0LXRgtC60Lgg0L3QtdGCINCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NzkKK21zZ2lkICJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgItCU0LvRjyDRgtC10LrRg9GJ0LXQuSDQstC10YLQutC4INC90LUg0YPQutCw0LfQsNC90LAg0LLRi9GI0LXRgdGC0L7Rj9GJ0LDRjyDQstC10YLQutCwINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICLQndC1INGD0LrQsNC30LDQvdCwINCy0L3QtdGI0L3Rj9GPINC+0YLRgdC70LXQttC40LLQsNC10LzQsNGPINCy0LXRgtC60LAg0LTQu9GPICVzINC90LAgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciCittc2dzdHIgItCf0LvQvtGF0L7QtSDQt9C90LDRh9C10L3QuNC1IMKrJXPCuyDQsiDQv9C10YDQtdC80LXQvdC90L7QuSDQvtC60YDRg9C20LXQvdC40Y8gwqslc8K7IgorCisjOiBidWlsdGluL21lcmdlLmM6MTE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSBpbiAlczogJXMiCittc2dzdHIgItC90LUg0Y/QstC70Y/QtdGC0YHRjyDRgtC10LwsINGH0YLQviDQvNC+0LbQvdC+INGB0LvQuNGC0Ywg0LIgJXM6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE3OAorbXNnaWQgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICLQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0YLQtdC8LCDRh9GC0L4g0LzQvtC20L3QviDRgdC70LjRgtGMIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI4MQorbXNnaWQgIi0tYWJvcnQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgItC+0L/RhtC40Y8gLS1hYm9ydCDQvdC1INC/0YDQuNC90LjQvNCw0LXRgiDQsNGA0LPRg9C80LXQvdGC0YsiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjg1Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICLQndC10YIg0YHQu9C40Y/QvdC40Y8sINC60L7RgtC+0YDQvtC1INC80L7QttC90L4g0L7RgtC80LXQvdC40YLRjCAo0L7RgtGB0YPRgtGB0YLQstGD0LXRgiDRhNCw0LnQuyBNRVJHRV9IRUFEKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk3Cittc2dpZCAiLS1jb250aW51ZSBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAi0L7Qv9GG0LjRjyAtLWNvbnRpbnVlINC90LUg0L/RgNC40L3QuNC80LDQtdGCINCw0YDQs9GD0LzQtdC90YLRiyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMDEKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgItCh0LXQudGH0LDRgSDQvdC1INC/0YDQvtC40YHRhdC+0LTQuNGCINGB0LvQuNGP0L3QuNC1ICjQvtGC0YHRg9GC0YHRgtCy0YPQtdGCINGE0LDQudC7IE1FUkdFX0hFQUQpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTcKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICLQktGLINC90LUg0LfQsNCy0LXRgNGI0LjQu9C4INGB0LvQuNGP0L3QuNC1ICjQv9GA0LjRgdGD0YLRgdGC0LLRg9C10YIg0YTQsNC50LsgTUVSR0VfSEVBRCkuXG7QktGL0L/QvtC70L3QuNGC0LUg0LrQvtC80LzQuNGCINCy0LDRiNC40YUg0LjQt9C80LXQvdC10L3QuNC5LCDQv9C10YDQtdC0INGB0LvQuNGP0L3QuNC10LwuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMyNAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgItCS0Ysg0L3QtSDQt9Cw0LLQtdGA0YjQuNC70Lgg0LrQvtC/0LjRgNC+0LLQsNC90LjQtSDQutC+0LzQvNC40YLQsCAo0L/RgNC40YHRg9GC0YHRgtCy0YPQtdGCINGE0LDQudC7IENIRVJSWV9QSUNLX0hFQUQpLlxu0J/QvtC20LDQu9GD0LnRgdGC0LAsINC30LDQutC+0LzQvNC40YLRjNGC0LUg0LLQsNGI0Lgg0LjQt9C80LXQvdC10L3QuNGPLCDQv9C10YDQtdC0INGB0LvQuNGP0L3QuNC10LwuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMyNworbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAi0JLRiyDQvdC1INC30LDQstC10YDRiNC40LvQuCDQutC+0L/QuNGA0L7QstCw0L3QuNC1INC60L7QvNC80LjRgtCwICjQv9GA0LjRgdGD0YLRgdGC0LLRg9C10YIg0YTQsNC50LsgQ0hFUlJZX1BJQ0tfSEVBRCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM0MQorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorbXNnc3RyICLQndC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviAtLXNxdWFzaCDQuCAtLW5vLWZmLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNDkKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAi0JrQvtC80LzQuNGCINC90LUg0YPQutCw0LfQsNC9INC4INC/0LDRgNCw0LzQtdGC0YAgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0g0L3QtSDRg9GB0YLQsNC90L7QstC70LXQvS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzY2Cittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgItCj0L/Qu9C+0YLQvdC10L3QuNC1INC60L7QvNC80LjRgtCwINCyINC/0YPRgdGC0YPRjiDQstC10YLQutGDINC10YnQtSDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzY4Cittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgItCa0L7QvNC80LjRgiwg0L3QtSDRj9Cy0LvRj9GO0YnQuNC50YHRjyDQv9C10YDQtdC80L7RgtC60L7QuSDQstC/0LXRgNC10LQsINC90LXRgiDRgdC80YvRgdC70LAg0LTQtdC70LDRgtGMINCyINC/0YPRgdGC0YPRjiDQstC10YLQutGDLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINGC0LXQvCwg0YfRgtC+INC80L7QttC90L4g0YHQu9C40YLRjCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNzUKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICLQnNC+0LbQvdC+INGC0L7Qu9GM0LrQviDQvtC00LjQvSDQutC+0LzQvNC40YIg0LIg0L/Rg9GB0YLRg9GOINCy0LXRgtC60YMuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ1NAorbXNnaWQgInJlZnVzaW5nIHRvIG1lcmdlIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgItC+0YLQutCw0Lcg0YHQu9C40Y/QvdC40Y8g0L3QtdGB0LLRj9C30LDQvdC90YvRhSDQuNGB0YLQvtGA0LjQuSDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDYzCittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiIKK21zZ3N0ciAi0KPQttC1INC+0LHQvdC+0LLQu9C10L3Qvi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDczCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjQtSAlcy4uJXNcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iCittc2dzdHIgItCf0L7Qv9GL0YLQutCwINGC0YDQuNCy0LjQsNC70YzQvdC+0LPQviDRgdC70LjRj9C90LjRjyDQsiDQuNC90LTQtdC60YHQteKAplxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICLQndC1INCy0YvRiNC70L4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTQ3Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiBZZWVhaCEiCittc2dzdHIgItCj0LbQtSDQvtCx0L3QvtCy0LvQtdC90L4uINCa0YDRg9GC0L4hIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU1MworbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAi0J/QtdGA0LXQvNC+0YLQutCwINCy0L/QtdGA0LXQtCDQvdC10LLQvtC30LzQvtC20L3QsCwg0L7RgtC80LXQvdCwLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NzYgYnVpbHRpbi9tZXJnZS5jOjE2NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgItCf0LXRgNC10LzQvtGC0LrQsCDQtNC10YDQtdCy0LAg0Log0LjRgdGF0L7QtNC90L7QvNGDINGB0L7RgdGC0L7Rj9C90LjRjuKAplxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAi0J/QvtC/0YvRgtC60LAg0YHQu9C40Y/QvdC40Y8g0YEg0L/QvtC80L7RidGM0Y4g0YHRgtGA0LDRgtC10LPQuNC4ICVz4oCmXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICLQndC4INC+0LTQvdCwINGB0YLRgNCw0YLQtdCz0LjRjyDRgdC70LjRj9C90LjRjyDQvdC1INC+0LHRgNCw0LHQvtGC0LDQu9CwINGB0LvQuNGP0L3QuNC1LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAi0KHQsdC+0Lkg0L/RgNC4INGB0LvQuNGP0L3QuNC4INGBINC/0L7QvNC+0YnRjNGOINGB0YLRgNCw0YLQtdCz0LjQuCAlcy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgItCY0YHQv9C+0LvRjNC30YPRjiAlcyDQtNC70Y8g0L/QvtC00LPQvtGC0L7QstC60Lgg0YDRg9GH0L3QvtCz0L4g0YDQsNC30YDQtdGI0LXQvdC40Y8g0LrQvtC90YTQu9C40LrRgtC+0LIuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgItCQ0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LUg0YHQu9C40Y/QvdC40LUg0L/RgNC+0YjQu9C+INGD0YHQv9C10YjQvdC+OyDQutCw0Log0Lgg0LfQsNC/0YDQsNGI0LjQstCw0LvQuCwg0L7RgdGC0LDQvdC+0LLQu9C10L3QviDQv9C10YDQtdC0INCy0YvQv9C+0LvQvdC10L3QuNC10Lwg0LrQvtC80LzQuNGC0LBcbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzIKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA80LrQvtC80LzQuNGCPiA80LrQvtC80LzQuNGCPuKApiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDzQutC+0LzQvNC40YI+4oCmIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNAorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPNC60L7QvNC80LjRgj7igKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM1Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA80LrQvtC80LzQuNGCPiA80LrQvtC80LzQuNGCPiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzYKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDzRgdGB0YvQu9C60LA+IFs80LrQvtC80LzQuNGCPl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1MworbXNnaWQgIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0LLRgdC10YUg0L7QsdGJ0LjRhSDQv9GA0LXQtNC60L7QsiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU1Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDQv9GA0LXQtNC60L7QsiDQtNC70Y8g0L7QtNC90L7Qs9C+INC80L3QvtCz0L7RhdC+0LTQvtCy0L7Qs9C+INGB0LvQuNGP0L3QuNGPIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTcKK21zZ2lkICJsaXN0IHJldnMgbm90IHJlYWNoYWJsZSBmcm9tIG90aGVycyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHQv9C40YHQvtC6INGA0LXQtNCw0YbQuNC5LCDQutC+0YLQvtGA0YvQtSDQvdC1INC00L7RgdGC0LjQttC40LzRiyDQuNC3INC00YDRg9CzINC00YDRg9Cz0LAiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1OQorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAi0Y/QstC70Y/QtdGC0YHRjyDQv9C10YDQstGL0Lwg0L/RgNC10LTQutC+0Lwg0LLRgtC+0YDQvtCz0L4g0YPQutCw0LfQsNC90L3QvtCz0L4g0LrQvtC80LzQuNGC0LA/IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNjEKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAi0L3QsNC50YLQuCDQttGD0YDQvdCw0LvQtSDRgdGB0YvQu9C+0LogPNGB0YHRi9C70LrQsD4g0LPQtNC1INC40LzQtdC90L3QviA80LrQvtC80LzQuNGCPiDRgNCw0LfQstC10YLQstC40LvRgdGPIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo5Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiAiCisiPG9yaWctZmlsZT4gPGZpbGUyPiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWZpbGUgWzzQvtC/0YbQuNC4Pl0gWy1MINC40LzRjzEgWy1MIG9yaWcgWy1MINC40LzRjzJdXV0gPNGE0LDQudC7MT4gPNC+0YDQuNCzLdGE0LDQudC7PiA80YTQsNC50LsyPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgNC10LfRg9C70YzRgtCw0YIg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INCy0YvQstC+0LQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM2Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCBkaWZmMyDRgdC70LjRj9C90LjQtSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgItC/0YDQuCDQstC+0LfQvdC40LrQvdC+0LLQtdC90LjQuCDQutC+0L3RhNC70LjQutGC0L7Qsiwg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC90LDRiNGDINCy0LXRgNGB0LjRjiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAi0L/RgNC4INCy0L7Qt9C90LjQutC90L7QstC10L3QuNC4INC60L7QvdGE0LvQuNC60YLQvtCyLCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LjRhSDQstC10YDRgdC40Y4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQxCittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIGEgdW5pb24gdmVyc2lvbiIKK21zZ3N0ciAi0L/RgNC4INCy0L7Qt9C90LjQutC90L7QstC10L3QuNC4INC60L7QvdGE0LvQuNC60YLQvtCyLCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QsdC1INCy0LXRgNGB0LjQuCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAi0L/RgNC4INCy0L7Qt9C90LjQutC90L7QstC10L3QuNC4INC60L7QvdGE0LvQuNC60YLQvtCyLCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0Y3RgtC+0YIg0YDQsNC30LzQtdGAINC80LDRgNC60LXRgNCwIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAi0L3QtSDQv9GA0LXQtNGD0L/RgNC10LbQtNCw0YLRjCDQviDQutC+0L3RhNC70LjQutGC0LDRhSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDcKK21zZ2lkICJzZXQgbGFiZWxzIGZvciBmaWxlMS9vcmlnLWZpbGUvZmlsZTIiCittc2dzdHIgItGD0YHRgtCw0L3QvtCy0LjRgtGMINC80LXRgtC60Lgg0LTQu9GPINGE0LDQudC7MS/QvtGA0LjQsy3RhNCw0LnQuy/RhNCw0LnQuzIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gJXMiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdCw0Y8g0L7Qv9GG0LjRjyAlcyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC+0LHRitC10LrRgiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZS4gSWdub3JpbmcgJXMuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlcy4gSWdub3JpbmcgJXMuIgorbXNnc3RyWzBdICLQvdC10LLQvtC30LzQvtC20L3QviDQvtCx0YDQsNCx0L7RgtCw0YLRjCDQsdC+0LvRjNGI0LUgJWQg0LHQsNC30YsuINCY0LPQvdC+0YDQuNGA0YPRjiAlcy4iCittc2dzdHJbMV0gItC90LXQstC+0LfQvNC+0LbQvdC+INC+0LHRgNCw0LHQvtGC0LDRgtGMINCx0L7Qu9GM0YjQtSAlZCDQsdCw0LcuINCY0LPQvdC+0YDQuNGA0YPRjiAlcy4iCittc2dzdHJbMl0gItC90LXQstC+0LfQvNC+0LbQvdC+INC+0LHRgNCw0LHQvtGC0LDRgtGMINCx0L7Qu9GM0YjQtSAlZCDQsdCw0LcuINCY0LPQvdC+0YDQuNGA0YPRjiAlcy4iCittc2dzdHJbM10gItC90LXQstC+0LfQvNC+0LbQvdC+INC+0LHRgNCw0LHQvtGC0LDRgtGMINCx0L7Qu9GM0YjQtSAlZCDQsdCw0LfRiy4g0JjQs9C90L7RgNC40YDRg9GOICVzLiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo2NAorbXNnaWQgIm5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgItC90LUg0L7QsdGA0LDQsdCw0YLRi9Cy0LDRjiDQvdC40YfQtdCz0L4sINC60YDQvtC80LUg0YHQu9C40Y/QvdC40Y8g0LTQstGD0YUg0YPQutCw0LfQsNGC0LXQu9C10Lkg0L3QsCDQstC10YLQutC4LiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3MCBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDRgdC/0L7Qt9C90LDRgtGMINGB0YHRi9C70LrRgyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzXG4iCittc2dzdHIgItCh0LvQuNGP0L3QuNC1ICVzINC4ICVzXG4iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6NjYKK21zZ2lkICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorbXNnc3RyICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NAorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICLQstCy0L7QtCDQvtGC0LTQtdC70ZHQvdC90YvQuSDQndCj0JvQldCS0KvQnNCYINGB0LjQvNCy0L7Qu9Cw0LzQuCIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTUgYnVpbHRpbi93cml0ZS10cmVlLmM6MjYKK21zZ2lkICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgItC00L7Qv9GD0YHRgtC40YLRjCDQvtGC0YHRg9GC0YHRgtCy0LjQtSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NgorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAi0LTQvtC/0YPRgdGC0LjRgtGMINGB0L7Qt9C00LDQvdC40LUg0LHQvtC70LXQtSDQvtC00L3QvtCz0L4g0LTQtdGA0LXQstCwIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo5Cittc2dpZCAiZ2l0IG11bHRpLXBhY2staW5kZXggWy0tb2JqZWN0LWRpcj08ZGlyPl0gKHdyaXRlfHZlcmlmeSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjIKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2V0IG9mIHBhY2tmaWxlIGFuZCBwYWNrLWluZGV4IHBhaXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjQwIGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NjcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHZlcmI6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOAorbXNnaWQgImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICJnaXQgbXYgWzzQvtC/0YbQuNC4Pl0gPNC40YHRgtC+0YfQvdC40Lo+4oCmIDzQvdCw0LfQvdCw0YfQtdC90LjQtT4iCisKKyM6IGJ1aWx0aW4vbXYuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgItCa0LDRgtCw0LvQvtCzICVzINCyINC40L3QtNC10LrRgdC1INC4INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQv9C+0LTQvNC+0LTRg9C70LXQvD8iCisKKyM6IGJ1aWx0aW4vbXYuYzo4NQorbXNnaWQgIlBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICLQp9GC0L7QsdGLINC/0YDQvtC00L7Qu9C20LjRgtGMLCDQv9GA0L7QuNC90LTQtdC60YHQuNGA0YPQudGC0LUg0LjQu9C4INGB0L/RgNGP0YfRjNGC0LUg0LLQsNGI0Lgg0LjQt9C80LXQvdC10L3QuNGPINCyINGE0LDQudC70LUgLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiJS4qcyDQsiDQuNC90LTQtdGB0LUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjUKK21zZ2lkICJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+INC/0LXRgNC10LzQtdGJ0LDRgtGML9C/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMLCDQtNCw0LbQtSDQtdGB0LvQuCDRhtC10LvRjCDRgdGD0YnQtdGB0YLQstGD0LXRgiIKKworIzogYnVpbHRpbi9tdi5jOjEyNworbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICLQv9GA0L7Qv9GD0YHQutCw0YLRjCDQvtGI0LjQsdC60Lgg0L/RgNC4INC/0LXRgNC10LzQtdGJ0LXQvdC40Lgv0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQuCIKKworIzogYnVpbHRpbi9tdi5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAi0YbQtdC70LXQstC+0Lkg0L/Rg9GC0Ywgwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQutCw0YLQsNC70L7Qs9C+0LwiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40Y8g0LjQtyDCqyVzwrsg0LIgwqslc8K7XG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxODQKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICLQv9C70L7RhdC+0Lkg0LjRgdGC0L7Rh9C90LjQuiIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgItC90LXQu9GM0LfRjyDQv9C10YDQtdC80LXRgdGC0LjRgtGMINC60LDRgtCw0LvQvtCzINCyINGB0LDQvNC+0LPQviDRgdC10LHRjyIKKworIzogYnVpbHRpbi9tdi5jOjE5MAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgItC90LXQu9GM0LfRjyDQv9C10YDQtdC80LXRgdGC0LjRgtGMINC60LDRgtCw0LvQvtCzINCyINGE0LDQudC7IgorCisjOiBidWlsdGluL212LmM6MTk5Cittc2dpZCAic291cmNlIGRpcmVjdG9yeSBpcyBlbXB0eSIKK21zZ3N0ciAi0LjRgdGF0L7QtNC90YvQuSDQutCw0YLQsNC70L7QsyDQv9GD0YHRgiIKKworIzogYnVpbHRpbi9tdi5jOjIyNAorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgItC90LUg0L/QvtC0INCy0LXRgNGB0LjQvtC90L3Ri9C8INC60L7QvdGC0YDQvtC70LXQvCIKKworIzogYnVpbHRpbi9tdi5jOjIyNworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAi0YbQtdC70LXQstC+0Lkg0L/Rg9GC0Ywg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL212LmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgItC/0LXRgNC10LfQsNC/0LjRgdGMIMKrJXPCuyIKKworIzogYnVpbHRpbi9tdi5jOjIzOAorbXNnaWQgIkNhbm5vdCBvdmVyd3JpdGUiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQt9Cw0L/QuNGB0LDRgtGMIgorCisjOiBidWlsdGluL212LmM6MjQxCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICLQvdC10YHQutC+0LvRjNC60L4g0LjRgdGC0L7Rh9C90LjQutC+0LIg0LTQu9GPINC+0LTQvdC+0LPQviDRhtC10LvQtdCy0L7Qs9C+INC/0YPRgtC4IgorCisjOiBidWlsdGluL212LmM6MjQzCittc2dpZCAiZGVzdGluYXRpb24gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLRhtC10LvQtdCy0L7QuSDQutCw0YLQsNC70L7QsyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL212LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIlcywg0L7RgtC60YPQtNCwPSVzLCDQutGD0LTQsD0lcyIKKworIzogYnVpbHRpbi9tdi5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICLQn9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC1ICVzINCyICVzXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzcgYnVpbHRpbi9yZW1vdGUuYzo3MTcgYnVpbHRpbi9yZXBhY2suYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INC/0YDQuCDQv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC4IMKrJXPCuyIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjM1NQorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs80L7Qv9GG0LjQuD5dIDzQutC+0LzQvNC40YI+4oCmIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzU2Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzQvtC/0YbQuNC4Pl0gLS1hbGwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozNTcKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs80L7Qv9GG0LjQuD5dIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MTUKK21zZ2lkICJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0YLQvtC70YzQutC+INC40LzQtdC90LAgKNCx0LXQtyBTSEEtMSkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MTYKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0LzQtdGC0LrQuCDQtNC70Y8g0LjQvNC10L3QvtCy0LDQvdC40Y8g0LrQvtC80LzQuNGC0L7QsiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQxOAorbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INGB0YHRi9C70LrQuCwg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNC1IDzRiNCw0LHQu9C+0L3Rgz4gIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDIwCittc2dpZCAiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0YHRgdGL0LvQutC4LCDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC40LUgPNGI0LDQsdC70L7QvdGDPiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQyMgorbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGB0L/QuNGB0L7QuiDQstGB0LXRhSDQutC+0LzQvNC40YLQvtCyLCDQtNC+0YHRgtC40LbQuNC80YvRhSDRgdC+INCy0YHQtdGFINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQyMworbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MjQKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDQstGL0LLQvtC0IMKrdW5kZWZpbmVkwrssINC10YHQu9C4INC90LUg0L3QsNC50LTQtdC90L4gKNC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQzMAorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW4gdGhlIGlucHV0IChpbnRlcm5hbCB1c2UpIgorbXNnc3RyICLRgNCw0LfRi9C80LXQvdC+0LLRi9Cy0LDRgtGMINCy0LLQtdC00LXQvdC90YvQtSDQvNC10YLQutC4ICjQtNC70Y8g0LLQvdGD0YLRgNC10L3QvdC10LPQviDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjykiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzRgdGB0YvQu9C60LAt0L3QsC3Qt9Cw0LzQtdGC0LrRgz5dIFtsaXN0IFs80L7QsdGK0LXQutGCPl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjkKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiIKKyIgfCAoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA80YHQvtC+0LHRidC10L3QuNC1PiB8IC1GIDzRhNCw0LnQuz4gfCAoLWMgfCAtQykgPNC+0LHRitC10LrRgj5dIFs80L7QsdGK0LXQutGCPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzRgdGB0YvQu9C60LAt0L3QsC3Qt9Cw0LzQtdGC0LrRgz5dIGNvcHkgWy1mXSA80LjQty3QvtCx0YrQtdC60YLQsD4gPNCyLdC+0LHRitC10LrRgj4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8IgorIiAoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPNGB0L7QvtCx0YnQtdC90LjQtT4gfCAtRiA80YTQsNC50Ls+IHwgKC1jIHwgLUMpIDzQvtCx0YrQtdC60YI+XSBbPNC+0LHRitC10LrRgj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzIKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzRgdGB0YvQu9C60LAt0L3QsC3Qt9Cw0LzQtdGC0LrRgz5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs80L7QsdGK0LXQutGCPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMworbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA80YHRgdGL0LvQutCwLdC90LAt0LfQsNC80LXRgtC60YM+XSBzaG93IFs80L7QsdGK0LXQutGCPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzRgdGB0YvQu9C60LAt0L3QsC3Qt9Cw0LzQtdGC0LrRgz5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPNGB0YLRgNCw0YLQtdCz0LjRjz5dIDzRgdGB0YvQu9C60LAt0L3QsC3Qt9Cw0LzQtdGC0LrRgz4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNQorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSByZW1vdmUgWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA80YHRgdGL0LvQutCwLdC90LAt0LfQsNC80LXRgtC60YM+XSByZW1vdmUgWzzQvtCx0YrQtdC60YI+4oCmXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcHJ1bmUgWy1uXSBbLXZdIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzQuNC80Y8t0LfQsNC80LXRgtC60Lg+XSBwcnVuZSBbLW5dIFstdl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPl0gZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0Cittc2dpZCAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgW2xpc3QgWzzQvtCx0YrQtdC60YI+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OQorbXNnaWQgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFkZCBbPNC+0L/RhtC40Lg+XSBbPNC+0LHRitC10LrRgj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NTQKK21zZ2lkICJnaXQgbm90ZXMgY29weSBbPG9wdGlvbnM+XSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICJnaXQgbm90ZXMgY29weSBbPNC+0L/RhtC40Lg+XSA80LjQty3QvtCx0YrQtdC60YLQsD4gPNCyLdC+0LHRitC10LrRgj4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NQorbXNnaWQgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD5dLi4uIgorbXNnc3RyICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs80LjQty3QvtCx0YrQtdC60YLQsD4gPNCyLdC+0LHRitC10LrRgj5d4oCmIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAKK21zZ2lkICJnaXQgbm90ZXMgYXBwZW5kIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhcHBlbmQgWzzQvtC/0YbQuNC4Pl0gWzzQvtCx0YrQtdC60YI+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY1Cittc2dpZCAiZ2l0IG5vdGVzIGVkaXQgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGVkaXQgWzzQvtCx0YrQtdC60YI+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwCittc2dpZCAiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHNob3cgWzzQvtCx0YrQtdC60YI+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgWzzQvtC/0YbQuNC4Pl0gPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzzQvtC/0YbQuNC4Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPNC+0L/RhtC40Lg+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgyCittc2dpZCAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgcmVtb3ZlIFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODcKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBwcnVuZSBbPNC+0L/RhtC40Lg+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkyCittc2dpZCAiZ2l0IG5vdGVzIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6OTcKK21zZ2lkICJXcml0ZS9lZGl0IHRoZSBub3RlcyBmb3IgdGhlIGZvbGxvd2luZyBvYmplY3Q6IgorbXNnc3RyICLQl9Cw0L/QuNGB0LDRgtGML9C40LfQvNC10L3QuNGC0Ywg0LfQsNC80LXRgtC60Lgg0LTQu9GPINGB0LvQtdC00YPRjtGJ0LXQs9C+INC+0LHRitC10LrRgtCwOiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/Rg9GB0YLQuNGC0YwgwqtzaG93wrsg0LTQu9GPINC+0LHRitC10LrRgtCwIMKrJXPCuyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1NAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdzaG93JyBvdXRwdXQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINCy0YvQstC+0LQgwqtzaG93wrsiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQstC10YDRiNC40YLRjCDCq3Nob3fCuyDQtNC70Y8g0L7QsdGK0LXQutGC0LAgwqslc8K7IgorCisjOiBidWlsdGluL25vdGVzLmM6MTk3Cittc2dpZCAicGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICLQv9C+0LbQsNC70YPQudGB0YLQsCwg0YPQutCw0LbQuNGC0LUg0YHQvtC00LXRgNC20LjQvNC+0LUg0LfQsNC80LXRgtC60LgsINC40YHQv9C+0LvRjNC30YPRjyDQvtC/0YbQuNGOIC1tINC40LvQuCAtRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwNgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINC+0LHRitC10LrRgiDQt9Cw0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAi0YHQvtC00LXRgNC20LjQvNC+0LUg0LfQsNC80LXRgtC60Lgg0L7RgdGC0LDQu9C+0YHRjCDQsiAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI0MiBidWlsdGluL3RhZy5jOjUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0LjQu9C4INC/0YDQvtGH0LjRgtCw0YLRjCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjMgYnVpbHRpbi9ub3Rlcy5jOjMxMyBidWlsdGluL25vdGVzLmM6MzE1CisjOiBidWlsdGluL25vdGVzLmM6MzgzIGJ1aWx0aW4vbm90ZXMuYzo0MzggYnVpbHRpbi9ub3Rlcy5jOjUyNgorIzogYnVpbHRpbi9ub3Rlcy5jOjUzMSBidWlsdGluL25vdGVzLmM6NjEwIGJ1aWx0aW4vbm90ZXMuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30YDQtdGI0LjRgtGMIMKrJXPCuyDQutCw0Log0YHRgdGL0LvQutGDLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINC+0LHRitC10LrRgiDCqyVzwrsuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG5vdGUgZGF0YSBmcm9tIG5vbi1ibG9iIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0LTQsNC90L3Ri9C1INC30LDQvNC10YLQutC4INC40Lcg0L3QtdC00LLQvtC40YfQvdC+0LPQviDQvtCx0YrQtdC60YLQsCDCqyVzwrsuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINCy0LLQtdC00LXQvdC90LDRjyDRgdGC0YDQvtC60LA6IMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQutC+0L/QuNGA0L7QstCw0YLRjCDQt9Cw0LzQtdGC0LrRgyDQuNC3IMKrJXPCuyDQsiDCqyVzwrsiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgZmlyc3QgJXMgd2lsbCBiZSByZXBsYWNlZCBieSBhIGdpdAorIy4gbm90ZXMgY29tbWFuZDogJ2FkZCcsICdtZXJnZScsICdyZW1vdmUnLCBldGMuCisjOiBidWlsdGluL25vdGVzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvICVzIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAi0L7RgtC60LDQtyDQsiDQv9C10YDQtdC30LDQv9C40YHQuCAlcyDQt9Cw0LzQtdGC0L7QuiDQsiAlcyAo0LfQsCDQv9GA0LXQtNC10LvQsNC80LggcmVmcy9ub3Rlcy8pIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzc2IGJ1aWx0aW4vbm90ZXMuYzo0MzEgYnVpbHRpbi9ub3Rlcy5jOjUwOQorIzogYnVpbHRpbi9ub3Rlcy5jOjUyMSBidWlsdGluL25vdGVzLmM6NTk4IGJ1aWx0aW4vbm90ZXMuYzo2NjUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTUgYnVpbHRpbi9ub3Rlcy5jOjk2MyBidWlsdGluL25vdGVzLmM6OTg1Cittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0L3QviDRgdC70LjRiNC60L7QvCDQvNC90L7Qs9C+INC/0LDRgNCw0LzQtdGC0YDQvtCyIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzg5IGJ1aWx0aW4vbm90ZXMuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIKK21zZ3N0ciAi0L3QtSDQvdCw0LnQtNC10L3QsCDQt9Cw0LzQtdGC0LrQsCDQtNC70Y8g0L7QsdGK0LXQutGC0LAgJXMuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEwIGJ1aWx0aW4vbm90ZXMuYzo1NzYKK21zZ2lkICJub3RlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIgorbXNnc3RyICLRgtC10LrRgdGC0L7QstC+0LUg0YHQvtC00LXRgNC20LjQvNC+0LUg0LfQsNC80LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTMgYnVpbHRpbi9ub3Rlcy5jOjU3OQorbXNnaWQgIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIgorbXNnc3RyICLRgdC+0LTQtdGA0LbQuNC80L7QtSDQt9Cw0LzQtdGC0LrQuCDQsiDRhNCw0LnQu9C1IgorCisjOiBidWlsdGluL25vdGVzLmM6NDE2IGJ1aWx0aW4vbm90ZXMuYzo1ODIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQuCDQvtGC0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0YPQutCw0LfQsNC90L3Ri9C5INC+0LHRitC10LrRgiDQt9Cw0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxOSBidWlsdGluL25vdGVzLmM6NTg1Cittc2dpZCAicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YPQutCw0LfQsNC90L3Ri9C5INC+0LHRitC10LrRgiDQt9Cw0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyMiBidWlsdGluL25vdGVzLmM6NTg4Cittc2dpZCAiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0YHQvtGF0YDQsNC90LXQvdC40LUg0L/Rg9GB0YLQvtC5INC30LDQvNC10YLQutC4IgorCisjOiBidWlsdGluL25vdGVzLmM6NDIzIGJ1aWx0aW4vbm90ZXMuYzo0OTYKK21zZ2lkICJyZXBsYWNlIGV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICLQt9Cw0LzQtdC90LjRgtGMINGB0YPRidC10YHRgtCy0YPRjtGJ0LjQtSDQt9Cw0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQtNC+0LHQsNCy0LjRgtGMINC30LDQvNC10YLQutGDLiDQndCw0LnQtNC10L3QsCDRgdGD0YnQtdGB0YLQstGD0Y7RidCw0Y8g0LfQsNC80LXRgtC60LAg0YMg0L7QsdGK0LXQutGC0LAgJXMuINCY0YHQv9C+0LvRjNC30YPQudGC0LUg0L/QsNGA0LDQvNC10YLRgCDCqy1mwrsg0LTQu9GPINC/0LXRgNC10LfQsNC/0LjRgdC4INGB0YPRidC10YHRgtCy0YPRjtGJ0LjRhSDQt9Cw0LzQtdGC0L7Qui4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjMgYnVpbHRpbi9ub3Rlcy5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgItCf0LXRgNC10LfQsNC/0LjRgdGMINGB0YPRidC10YHRgtCy0YPRjtGJ0LjRhSDQt9Cw0LzQtdGC0L7QuiDRgyDQvtCx0YrQtdC60YLQsCAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDc1IGJ1aWx0aW4vbm90ZXMuYzo2MzcgYnVpbHRpbi9ub3Rlcy5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDQt9Cw0LzQtdGC0LrQuCDRgyDQvtCx0YrQtdC60YLQsCAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDk3Cittc2dpZCAicmVhZCBvYmplY3RzIGZyb20gc3RkaW4iCittc2dzdHIgItC/0YDQvtGH0LjRgtCw0YLRjCDQvtCx0YrQtdC60YLRiyDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL25vdGVzLmM6NDk5Cittc2dpZCAibG9hZCByZXdyaXRpbmcgY29uZmlnIGZvciA8Y29tbWFuZD4gKGltcGxpZXMgLS1zdGRpbikiCittc2dzdHIgItC30LDQs9GA0YPQt9C40YLRjCDQvdCw0YHRgtGA0L7QudC60Lgg0L/QtdGA0LXQt9Cw0L/QuNGB0Lgg0LTQu9GPINC60L7QvNCw0L3QtNGLIDzQutC+0LzQsNC90LTQsD4gKNCy0LrQu9GO0YfQsNC10YIg0LIg0YHQtdCx0Y8gLS1zdGRpbikiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTcKK21zZ2lkICJ0b28gZmV3IHBhcmFtZXRlcnMiCittc2dzdHIgItC/0LXRgNC10LTQsNC90L4g0YHQu9C40YjQutC+0Lwg0LzQsNC70L4g0L/QsNGA0LDQvNC10YLRgNC+0LIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUiCisiIGV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0LfQsNC80LXRgtC60YMuINCd0LDQudC00LXQvdCwINGB0YPRidC10YHRgtCy0YPRjtGJ0LDRjyDQt9Cw0LzQtdGC0LrQsCDRgyDQvtCx0YrQtdC60YLQsCAlcy4g0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQv9Cw0YDQsNC80LXRgtGAIMKrLWbCuyDQtNC70Y8g0L/QtdGA0LXQt9Cw0L/QuNGB0Lgg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNGFINC30LDQvNC10YLQvtC6LiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG5vdGVzIG9uIHNvdXJjZSBvYmplY3QgJXMuIENhbm5vdCBjb3B5LiIKK21zZ3N0ciAi0L3QtdGCINC30LDQvNC10YLQvtC6INGDINC40YHRhdC+0LTQvdC+0LPQviDQvtCx0YrQtdC60YLQsCAlcy4g0J3QtdC70YzQt9GPINGB0LrQvtC/0LjRgNC+0LLQsNGC0YwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgItCe0L/RhtC40LggLW0vLUYvLWMvLUMg0LTQu9GPINC/0L7QtNC60L7QvNCw0L3QtNGLIMKrZWRpdMK7INGD0YHRgtCw0YDQtdC70LguXG7QmNGB0L/QvtC70YzQt9GD0LnRgtC1INCy0LzQtdGB0YLQviDQvdC40YUgwqtnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DwrsuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OTgKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMINGB0YHRi9C70LrRgyBOT1RFU19NRVJHRV9QQVJUSUFMIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAwCittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMINGB0YHRi9C70LrRgyBOT1RFU19NRVJHRV9SRUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDIKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICdnaXQgbm90ZXMgbWVyZ2UnIHdvcmt0cmVlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIMKrZ2l0IG5vdGVzIG1lcmdlwrsiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjIKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YHRgdGL0LvQutGDIE5PVEVTX01FUkdFX1BBUlRJQUwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INC60L7QvNC80LjRgiDQuNC3IE5PVEVTX01FUkdFX1BBUlRJQUwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQutC+0LzQvNC40YIg0LjQtyBOT1RFU19NRVJHRV9QQVJUSUFMLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjczOQorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlIE5PVEVTX01FUkdFX1JFRiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfRgNC10YjQuNGC0YwgTk9URVNfTUVSR0VfUkVGIgorCisjOiBidWlsdGluL25vdGVzLmM6NzQyCittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplIG5vdGVzIG1lcmdlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQstC10YDRiNC40YLRjCDRgdC70LjQvdC40LUg0LfQsNC80LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub3RlcyBtZXJnZSBzdHJhdGVneSAlcyIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90LDRjyDRgdGC0YDQsNGC0LXQs9C40Y8g0YHQu9C40Y/QvdC40Y8g0LfQsNC80LXRgtC+0LogJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODQKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgItCe0LHRidC40LUg0L7Qv9GG0LjQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NgorbXNnaWQgIk1lcmdlIG9wdGlvbnMiCittc2dzdHIgItCe0L/RhtC40Lgg0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODgKK21zZ2lkICIiCisicmVzb2x2ZSBub3RlcyBjb25mbGljdHMgdXNpbmcgdGhlIGdpdmVuIHN0cmF0ZWd5ICIKKyIobWFudWFsL291cnMvdGhlaXJzL3VuaW9uL2NhdF9zb3J0X3VuaXEpIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0LrQvtC90YTQu9C40LrRgtGLINC30LDQvNC10YLQvtC6INGBINC/0L7QvNC+0YnRjNGOINGD0LrQsNC30LDQvdC90L7QuSDRgdGC0YDQsNGC0LXQs9C40LggKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi9jYXRfc29ydF91bmlxKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MAorbXNnaWQgIkNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgItCa0L7QvNC80LjRgiDQvdC1INGB0LvQuNGC0YvRhSDQt9Cw0LzQtdGC0L7QuiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MgorbXNnaWQgImZpbmFsaXplIG5vdGVzIG1lcmdlIGJ5IGNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgItC30LDQstC10YDRiNC40YLRjCDRgdC70LjRj9C90LjQtSDQt9Cw0LzQtdGC0L7QuiDQutC+0LzQvNC40YLQvtC8INC90LUg0YHQu9C40YLRi9GFINC30LDQvNC10YLQvtC6IgorCisjOiBidWlsdGluL25vdGVzLmM6Nzk0Cittc2dpZCAiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAi0J7RgtC80LXQvdCwINGA0LDQt9GA0LXRiNC10L3QuNGPINGB0LvQuNGP0L3QuNGPINC30LDQvNC10YLQvtC6IgorCisjOiBidWlsdGluL25vdGVzLmM6Nzk2Cittc2dpZCAiYWJvcnQgbm90ZXMgbWVyZ2UiCittc2dzdHIgItC+0YLQvNC10L3QuNGC0Ywg0YHQu9C40Y/QvdC40LUg0LfQsNC80LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MDcKK21zZ2lkICJjYW5ub3QgbWl4IC0tY29tbWl0LCAtLWFib3J0IG9yIC1zLy0tc3RyYXRlZ3kiCittc2dzdHIgItC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IC0tY29tbWl0LCAtLWFib3J0INC4IC1zLy0tc3RyYXRlZ3kiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTIKK21zZ2lkICJtdXN0IHNwZWNpZnkgYSBub3RlcyByZWYgdG8gbWVyZ2UiCittc2dzdHIgItCy0Ysg0LTQvtC70LbQvdGLINGD0LrQsNC30LDRgtGMINGB0YHRi9C70LrRgyDQt9Cw0LzQtdGC0LrQuCDQtNC70Y8g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAtcy8tLXN0cmF0ZWd5OiAlcyIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90YvQuSDQv9Cw0YDQsNC80LXRgtGAINC00LvRjyAtcy8tLXN0cmF0ZWd5OiAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJhIG5vdGVzIG1lcmdlIGludG8gJXMgaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBhdCAlcyIKK21zZ3N0ciAi0YHQu9C40Y/QvdC40LUg0LfQsNC80LXRgtC+0Log0LIgJXMg0YPQttC1INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0L3QsCAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RvcmUgbGluayB0byBjdXJyZW50IG5vdGVzIHJlZiAoJXMpIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDQsNC00YDQtdGBINGC0LXQutGD0YnQtdC5INGB0YHRi9C70LrQuCDQvdCwINC30LDQvNC10YLQutGDICglcykiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF1dG9tYXRpYyBub3RlcyBtZXJnZSBmYWlsZWQuIEZpeCBjb25mbGljdHMgaW4gJXMgYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGgiCisiICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvciBhYm9ydCB0aGUgbWVyZ2Ugd2l0aCAnZ2l0IG5vdGVzIG1lcmdlICIKKyItLWFib3J0Jy5cbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDRgdC70LjRgtGMINC30LDQvNC10YLQutC4LiDQmNGB0L/RgNCw0LLRjNGC0LUg0LrQvtC90YTQu9C40LrRgtGLINCyICVzINC4INC30LDQutC+0LzQvNC40YLRjNGC0LUg0YDQtdC30YPQu9GM0YLQsNGCINGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0wrssINC40LvQuCDQv9GA0LXRgNCy0LjRgtC1INC/0YDQvtGG0LXRgdGBINGB0LvQuNGP0L3QuNGPINGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnTCuy5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5NyBidWlsdGluL3RhZy5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfRgNC10YjQuNGC0Ywgwqslc8K7INC60LDQuiDRgdGB0YvQu9C60YMuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICLQoyDQvtCx0YrQtdC60YLQsCAlcyDQvdC10YIg0LfQsNC80LXRgtC60LhcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxMgorbXNnaWQgImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIKK21zZ3N0ciAi0L/QvtC/0YvRgtC60LAg0YPQtNCw0LvQtdC90LjRjyDQvdC10YHRg9GJ0LXRgdGC0LLRg9GO0YnQtdC5INC30LDQvNC10YLQutC4INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQvtGI0LjQsdC60L7QuSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxNQorbXNnaWQgInJlYWQgb2JqZWN0IG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0LjQvNC10L3QsCDQvtCx0YrQtdC60YLQvtCyINC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTQgYnVpbHRpbi9wcnVuZS5jOjEzMCBidWlsdGluL3dvcmt0cmVlLmM6MTY1Cittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICLQvdC1INGD0LTQsNC70Y/RgtGMLCDRgtC+0LvRjNC60L4g0L/QvtC60LDQt9Cw0YLRjCDRgdC/0LjRgdC+0LoiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTUKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG5vdGVzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdC/0LjRgdC+0Log0YPQtNCw0LvQtdC90L3Ri9GFINC30LDQvNC10YLQvtC6IgorCisjOiBidWlsdGluL25vdGVzLmM6OTk4Cittc2dpZCAibm90ZXMtcmVmIgorbXNnc3RyICLRgdGB0YvQu9C60LAt0L3QsC3Qt9Cw0LzQtdGC0LrRgyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OQorbXNnaWQgInVzZSBub3RlcyBmcm9tIDxub3Rlcy1yZWY+IgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LfQsNC80LXRgtC60YMg0LjQtyA80YHRgdGL0LvQutCwLdC90LAt0LfQsNC80LXRgtC60YM+IgorCisjOiBidWlsdGluL25vdGVzLmM6MTAzNCBidWlsdGluL3N0YXNoLmM6MTYxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3QsNGPINC/0L7QtNC60L7QvNCw0L3QtNCwOiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1MgorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3B0aW9ucz4uLi5dIFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs80L7Qv9GG0LjQuD7igKZdIFs8IDzRgdC/0LjRgdC+0Lot0YHRgdGL0LvQvtC6PiB8IDwgPNGB0L/QuNGB0L7Qui3QvtCx0YrQtdC60YLQvtCyPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTMKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9wdGlvbnM+Li4uXSA8YmFzZS1uYW1lPiBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiZ2l0IHBhY2stb2JqZWN0cyBbPNC+0L/RhtC40Lg+4oCmXSA80LjQvNGPLdCx0LDQt9GLPiBbPCA80YHQv9C40YHQvtC6LdGB0YHRi9C70L7Quj4gfCA8IDzRgdC/0LjRgdC+0Lot0L7QsdGK0LXQutGC0L7Qsj5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGFja2VkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGRlbHRhIGRldGVjdGVkIGZvciBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAib3JkZXJlZCAldSBvYmplY3RzLCBleHBlY3RlZCAlPFBSSXUzMj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgaXMgaW52YWxpZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcGFja2ZpbGUgZm9yIHJldXNlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc5OAorbXNnaWQgInVuYWJsZSB0byBzZWVrIGluIHJldXNlZCBwYWNrZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjgwOQorbXNnaWQgInVuYWJsZSB0byByZWFkIGZyb20gcmV1c2VkIHBhY2tmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODM3Cittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBwYWNrcyBhcmUgc3BsaXQgZHVlIHRvIHBhY2sucGFja1NpemVMaW1pdCIKK21zZ3N0ciAi0L7RgtC60LvRjtGH0LXQvdC40LUg0LfQsNC/0LjRgdC4INCx0LjRgtC+0LLRi9GFINC60LDRgNGCLCDRgtCw0Log0LrQsNC6INC60LDRgNGC0Ysg0LHRi9C70Lgg0YDQsNC30LHQuNGC0Ysg0L3QsCDRh9Cw0YHRgtC4INC40Lct0LfQsCBwYWNrLnBhY2tTaXplTGltaXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODUwCittc2dpZCAiV3JpdGluZyBvYmplY3RzIgorbXNnc3RyICLQl9Cw0L/QuNGB0Ywg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5MTIgYnVpbHRpbi91cGRhdGUtaW5kZXguYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywgc3RhdCAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvdGUgJTxQUkl1MzI+IG9iamVjdHMgd2hpbGUgZXhwZWN0aW5nICU8UFJJdTMyPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjExNjEKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIGFzIHNvbWUgb2JqZWN0cyBhcmUgbm90IGJlaW5nIHBhY2tlZCIKK21zZ3N0ciAi0L7RgtC60LvRjtGH0LXQvdC40LUg0LfQsNC/0LjRgdC4INCx0LjRgtC+0LLRi9GFINC60LDRgNGCLCDRgtCw0Log0LrQsNC6INC90LXQutC+0YLQvtGA0YvQtSDQvtCx0YrQtdC60YLRiyDQvdC1INCx0YvQu9C4INGD0L/QsNC60L7QstCw0L3RiyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG92ZXJmbG93IGluIHBhY2sgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdXQgb2YgYm91bmQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTg2NworbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgItCf0L7QtNGB0YfQtdGCINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTk5NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHNpemUgb2YgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDRgNCw0LfQvNC10YAgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0IGhlYWRlciBvZiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0LfQsNCz0L7Qu9C+0LLQvtC6INC+0LHRitC10LrRgtCwICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwODIgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDk4CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjA4NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGluY29uc2lzdGVudCBvYmplY3QgbGVuZ3RoICglPFBSSXVNQVg+IHZzICU8UFJJdU1BWD4pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjEyMgorbXNnaWQgInN1Ym9wdGltYWwgcGFjayAtIG91dCBvZiBtZW1vcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbHRhIGNvbXByZXNzaW9uIHVzaW5nIHVwIHRvICVkIHRocmVhZHMiCittc2dzdHIgItCf0YDQuCDRgdC20LDRgtC40Lgg0LjQt9C80LXQvdC10L3QuNC5INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC+ICVkINC/0L7RgtC+0LrQvtCyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhY2sgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0YWcgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjY3Cittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi0KHQttCw0YLQuNC1INC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY3MworbXNnaWQgImluY29uc2lzdGVuY3kgd2l0aCBkZWx0YSBjb3VudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIGVkZ2Ugb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NTgKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAtLW1pc3NpbmciCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80L7QtSDQt9C90LDRh9C10L3QuNC1INC00LvRjyAtLW1pc3NpbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkxNyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwMjUKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjk0OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgYXQgJXMgY291bGQgbm90IGJlIGV4YW1pbmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzAzMworbXNnaWQgInVuYWJsZSB0byBmb3JjZSBsb29zZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJldiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTMKK21zZ2lkICJ1bmFibGUgdG8gYWRkIHJlY2VudCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIgorbXNnc3RyICLQvdC10L/QvtC00LTQtdGA0LbQuNCy0LDQtdC80LDRjyDQstC10YDRgdC40Y8g0LjQvdC00LXQutGB0LAgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICLQv9C70L7RhdCw0Y8g0LLQtdGA0YHQuNGPINC40L3QtNC10LrRgdCwIMKrJXPCuyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQwCittc2dpZCAiZG8gbm90IHNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgItC90LUg0LLRi9Cy0L7QtNC40YLRjCDQv9GA0L7Qs9GA0LXRgdGBINCy0YvQv9C+0LvQvdC10L3QuNGPIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDIKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC/0YDQvtCz0YDQtdGB0YEg0LLRi9C/0L7Qu9C90LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0NAorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC/0YDQvtCz0YDQtdGB0YEg0LLRi9C/0L7Qu9C90LXQvdC40Y8g0LLQviDQstGA0LXQvNGPINC30LDQv9C40YHQuCDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDcKK21zZ2lkICJzaW1pbGFyIHRvIC0tYWxsLXByb2dyZXNzIHdoZW4gcHJvZ3Jlc3MgbWV0ZXIgaXMgc2hvd24iCittc2dzdHIgItC/0L7RhdC+0LbQtSDQvdCwIC0tYWxsLXByb2dyZXNzINC/0YDQuCDQstC60LvRjtGH0LXQvdC90L7QvCDQv9GA0L7Qs9GA0LXRgdGB0LUg0LLRi9C/0L7Qu9C90LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0OAorbXNnaWQgIjx2ZXJzaW9uPlssPG9mZnNldD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0OQorbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgItC30LDQv9C40YHQsNGC0Ywg0YTQsNC50Lsg0LjQvdC00LXQutGB0LAg0L/QsNC60LXRgtCwINCyINGD0LrQsNC30LDQvdC90L7QuSDQstC10YDRgdC40Lgg0YTQvtGA0LzQsNGC0LAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1MgorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgItC80LDQutGB0LjQvNCw0LvRjNC90YvQuSDRgNCw0LfQvNC10YAg0LrQsNC20LTQvtCz0L4g0LLRi9GF0L7QtNC90L7Qs9C+INGE0LDQudC70LAg0L/QsNC60LXRgtCwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTQKK21zZ2lkICJpZ25vcmUgYm9ycm93ZWQgb2JqZWN0cyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDRh9GD0LbQuNC1INC+0LHRitC10LrRgtGLLCDQstC30Y/RgtGL0LUg0LjQtyDQsNC70YzRgtC10YDQvdCw0YLQuNCy0L3QvtCz0L4g0YXRgNCw0L3QuNC70LjRidCwINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1NgorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINGD0L/QsNC60L7QstCw0L3QvdGL0LUg0L7QsdGK0LXQutGC0YsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1OAorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LjRgtGMINC+0LrQvdC+INC/0LDQutC10YLQsCDQv9C+INC60L7Qu9C40YfQtdGB0YLQstGDINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MAorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgItC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+INC6INC60L7Qu9C40YfQtdGB0YLQstGDINC+0LHRitC10LrRgtC+0LIg0L7Qs9GA0LDQvdC40YfQuNGC0Ywg0L7QutC90L4g0L/QsNC60LXRgtCwINC/0L4g0L/QsNC80Y/RgtC4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjIKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9GM0L3QsNGPINGA0LDQt9GA0LXRiNC10L3QvdCw0Y8g0LTQu9C40L3QsCDRhtC10L/QvtGH0LrQuCDQtNC10LvRjNGCINCyINGA0LXQt9GD0LvRjNGC0LjRgNGD0Y7RidC10Lwg0L/QsNC60LXRgtC1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjQKK21zZ2lkICJyZXVzZSBleGlzdGluZyBkZWx0YXMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQv9C+0LLRgtC+0YDQvdC+INGB0YPRidC10YHRgtCy0YPRjtGJ0LjQtSDQtNC10LvRjNGC0YsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2NgorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQv9C+0LLRgtC+0YDQvdC+INGB0YPRidC10YHRgtCy0YPRjtGJ0LjQtSDQvtCx0YrQtdC60YLRiyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjY4Cittc2dpZCAidXNlIE9GU19ERUxUQSBvYmplY3RzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QsdGK0LXQutGC0YsgT0ZTX0RFTFRBIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzAKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LzQvdC+0LPQvtC/0L7RgtC+0YfQvdC+0YHRgtGMINC/0YDQuCDQv9C+0LjRgdC60LUg0LvRg9GH0YjQuNGFINGB0L7QstC/0LDQtNC10L3QuNC5INC00LXQu9GM0YIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3MgorbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgItC90LUg0YHQvtC30LTQsNCy0LDRgtGMINC/0YPRgdGC0YvQtSDQstGL0YXQvtC00L3Ri9C1INC/0LDQutC10YLRiyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc0Cittc2dpZCAicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINCw0YDQs9GD0LzQtdC90YLRiyDRgNC10LTQsNC60YbQuNC5INC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3NgorbXNnaWQgImxpbWl0IHRoZSBvYmplY3RzIHRvIHRob3NlIHRoYXQgYXJlIG5vdCB5ZXQgcGFja2VkIgorbXNnc3RyICLQvtCz0YDQsNC90LjRh9C40YLRjNGB0Y8g0L7QsdGK0LXQutGC0LDQvNC4LCDQutC+0YLQvtGA0YvQtSDQtdGJ0LUg0L3QtSDRg9C/0LDQutC+0LLQsNC90YsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3OQorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWFjaGFibGUgZnJvbSBhbnkgcmVmZXJlbmNlIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGMINC+0LHRitC10LrRgtGLLCDQutC+0YLQvtGA0YvQtSDQtNC+0YHRgtC40LbQuNC80Ysg0L/QviDQu9GO0LHQvtC5INC40Lcg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODIKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywg0L7QsdGK0LXQutGC0YssINC90LAg0LrQvtGC0L7RgNGL0LUg0YHRgdGL0LvQsNGO0YLRgdGPINC30LDQv9C40YHQuCDQttGD0YDQvdCw0LvQsCDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4NQorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywg0L7QsdGK0LXQutGC0YssINC90LAg0LrQvtGC0L7RgNGL0LUg0YHRgdGL0LvQsNC10YLRgdGPINC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg4Cittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDQv9Cw0LrQtdGCINC90LAgINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0LLRi9Cy0L7QtCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkwCittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGMINC+0LHRitC10LrRgtGLINC80LXRgtC+0LosINC60L7RgtC+0YDRi9C1INGB0YHRi9C70LDRjtGC0YHRjyDQvdCwINGD0L/QsNC60L7QstGL0LLQsNC10LzRi9C1INC+0LHRitC10LrRgtGLIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTIKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgItGB0L7RhdGA0LDQvdGP0YLRjCDRgdGB0YvQu9C60Lgg0L3QsCDQvdC10LTQvtGB0YLRg9C/0L3Ri9C1INC+0LHRitC10LrRgtGLIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTQKK21zZ2lkICJwYWNrIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgItC/0LDQutC+0LLQsNGC0Ywg0L3QtdC00L7RgdGC0LjQttC40LzRi9C1INC+0LHRitC10LrRgtGLIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTYKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAi0YDQsNGB0L/QsNC60L7QstCw0YLRjCDQvdC10LTQvtGB0YLRg9C/0L3Ri9C1INC+0LHRitC10LrRgtGLLCDQutC+0YLQvtGA0YvQtSDQvdC+0LLQtdC1LCDRh9C10LwgPNCy0YDQtdC80Y8+IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTkKK21zZ2lkICJ1c2UgdGhlIHNwYXJzZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMwMQorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICLRgdC+0LfQtNCw0LLQsNGC0Ywg0YLQvtC90LrQuNC1INC/0LDQutC10YLRiyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzAzCittc2dpZCAiY3JlYXRlIHBhY2tzIHN1aXRhYmxlIGZvciBzaGFsbG93IGZldGNoZXMiCittc2dzdHIgItGB0L7Qt9C00LDQstCw0YLRjCDQv9Cw0LrQtdGC0YssINC/0L7QtNGF0L7QtNGP0YnQuNC1INC00LvRjyDRh9Cw0YHRgtC40YfQvdGL0YUg0LjQt9Cy0LvQtdGH0LXQvdC40LkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMwNQorbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQv9Cw0LrQtdGC0YssINGA0Y/QtNC+0Lwg0YEg0LrQvtGC0L7RgNGL0LzQuCDQu9C10LbQuNGCIC5rZWVwINGE0LDQudC7IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDcKK21zZ2lkICJpZ25vcmUgdGhpcyBwYWNrIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0Y3RgtC+0YIg0L/QsNC60LXRgiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzA5Cittc2dpZCAicGFjayBjb21wcmVzc2lvbiBsZXZlbCIKK21zZ3N0ciAi0YPRgNC+0LLQtdC90Ywg0YHQttCw0YLQuNGPINC/0LDQutC10YLQsCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzExCittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgItC90LUg0YHQutGA0YvQstCw0YLRjCDQutC+0LzQvNC40YLRiyDRgdGA0LDRidC10L3QuNGP0LzQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzEzCittc2dpZCAidXNlIGEgYml0bWFwIGluZGV4IGlmIGF2YWlsYWJsZSB0byBzcGVlZCB1cCBjb3VudGluZyBvYmplY3RzIgorbXNnc3RyICLQv9C+INCy0L7Qt9C80L7QttC90L7RgdGC0Lgg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC40L3QtNC10LrRgSDQsiDQsdC40YLQvtCy0YvRhSDQutCw0YDRgtCw0YUsINC00LvRjyDRg9GB0LrQvtGA0LXQvdC40Y8g0L/QvtC00YHRh9C10YLQsCDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTUKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IgorbXNnc3RyICLQt9Cw0L/QuNGB0Ywg0LjQvdC00LXQutGB0LAg0LIg0LHQuNGC0L7QstGL0YUg0LrQsNGA0YLQsNGFINCy0LzQtdGB0YLQtSDRgSDQuNC90LTQtdC60YHQvtC8INC/0LDQutC10YLQsCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzE4Cittc2dpZCAiaGFuZGxpbmcgZm9yIG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi0L7QsdGA0LDQsdC+0YLQutCwINC+0YLRgdGD0YLRgdGC0LLRg9GO0YnQuNGFINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMyMQorbXNnaWQgImRvIG5vdCBwYWNrIG9iamVjdHMgaW4gcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICLQvdC1INGD0L/QsNC60L7QstGL0LLQsNGC0Ywg0L7QsdGK0LXQutGC0Ysg0LIgcHJvbWlzb3Ig0YTQsNC50LvRiyDQv9Cw0LrQtdGC0L7QsiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzIzCittc2dpZCAicmVzcGVjdCBpc2xhbmRzIGR1cmluZyBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgY2hhaW4gZGVwdGggJWQgaXMgdG9vIGRlZXAsIGZvcmNpbmcgJWQiCittc2dzdHIgItCz0LvRg9Cx0LjQvdCwINGG0LXQv9C+0YfQutC4INC40LfQvNC10L3QtdC90LjQuSAlZCDRgdC70LjRiNC60L7QvCDQsdC+0LvRjNGI0LDRjywg0LjRgdC/0L7Qu9GM0LfRg9GOINC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+ICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjay5kZWx0YUNhY2hlTGltaXQgaXMgdG9vIGhpZ2gsIGZvcmNpbmcgJWQiCittc2dzdHIgItC70LjRgdC40YIgcGFjay5kZWx0YUNhY2hlTGltaXQg0YHQu9C40YjQutC+0Lwg0LLRi9GB0L7QutC40LksINC40YHQv9C+0LvRjNC30YPRjiDQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QviAlZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA3Cittc2dpZCAiLS1tYXgtcGFjay1zaXplIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGEgcGFjayBmb3IgdHJhbnNmZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA5Cittc2dpZCAibWluaW11bSBwYWNrIHNpemUgbGltaXQgaXMgMSBNaUIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDE0Cittc2dpZCAiLS10aGluIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGFuIGluZGV4YWJsZSBwYWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQxNworbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLS11bnBhY2stdW5yZWFjaGFibGUgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjMKK21zZ2lkICJjYW5ub3QgdXNlIC0tZmlsdGVyIHdpdGhvdXQgLS1zdGRvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDg0Cittc2dpZCAiRW51bWVyYXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0J/QtdGA0LXRh9C40YHQu9C10L3QuNC1INC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJUb3RhbCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHJldXNlZCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPikiCittc2dzdHIgItCS0YHQtdCz0L4gJTxQUkl1MzI+ICjQuNC30LzQtdC90LXQvdC40Y8gJTxQUkl1MzI+KSwg0L/QvtCy0YLQvtGA0L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNC90L4gJTxQUkl1MzI+ICjQuNC30LzQtdC90LXQvdC40Y8gJTxQUkl1MzI+KSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzo4Cittc2dpZCAiZ2l0IHBhY2stcmVmcyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHBhY2stcmVmcyBbPNC+0L/RhtC40Lg+XSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAi0L/QsNC60L7QstCw0YLRjCDQstGB0ZEiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTcKK21zZ2lkICJwcnVuZSBsb29zZSByZWZzIChkZWZhdWx0KSIKK21zZ3N0ciAi0L/QvtGH0LjRgdGC0LjRgtGMINGB0LvQsNCx0YvQtSDRgdGB0YvQu9C60LggKNC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOKSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo5Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDIKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDQtNGD0LHQu9C40YDRg9GO0YnQuNGF0YHRjyDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPNCy0YDQtdC80Y8+XSBbLS1dIFs80YDQtdC00LDQutGG0LjRjz7igKZdIgorCisjOiBidWlsdGluL3BydW5lLmM6MTMxCittc2dpZCAicmVwb3J0IHBydW5lZCBvYmplY3RzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdC/0LjRgdC+0Log0YPQtNCw0LvQtdC90L3Ri9GFINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0Ywg0L7QsdGK0LXQutGC0Ysg0YHRgtCw0YDQtdC1INGH0LXQvCA80LTQsNGC0LAt0L7QutC+0L3Rh9Cw0L3QuNGPPiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNgorbXNnaWQgImxpbWl0IHRyYXZlcnNhbCB0byBvYmplY3RzIG91dHNpZGUgcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICLQvtCz0YDQsNC90LjRh9C40YLRjCDQvtCx0YXQvtC0INC+0LHRitC10LrRgtCw0LzQuCDQstC90LUgcHJvbWlzb3Ig0YTQsNC50LvQvtCyINC/0LDQutC10YLQvtCyIgorCisjOiBidWlsdGluL3BydW5lLmM6MTUwCittc2dpZCAiY2Fubm90IHBydW5lIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0L/QvtGH0LjRgdGC0LjRgtGMINC90LXQuNGB0L/QvtC70YzQt9GD0LXQvNGL0LUg0L7QsdGK0LXQutGC0Ysg0LIgcHJlY2lvdXMtb2JqZWN0cyDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgorCisjOiBidWlsdGluL3B1bGwuYzo2NiBidWlsdGluL3B1bGwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90L7QtSDQt9C90LDRh9C10L3QuNC1ICVzOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODgKK21zZ2lkICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1bGwgWzzQvtC/0YbQuNC4Pl0gWzzRgNC10L/QvtC30LjRgtC+0YDQuNC5PiBbPNGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgC3RgdGB0YvQu9C60Lg+4oCmXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0MAorbXNnaWQgImNvbnRyb2wgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLRg9C/0YDQsNCy0LvQtdC90LjQtSDRgNC10LrRg9GA0YHQuNCy0L3Ri9C8INC40LfQstC70LXRh9C10L3QuNC10Lwg0L/QvtC00LzQvtC00YPQu9C10LkiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0NAorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBtZXJnaW5nIgorbXNnc3RyICLQntC/0YbQuNC4LCDRgdCy0Y/Qt9Cw0L3QvdGL0LUg0YHQviDRgdC70LjRj9C90LjQtdC8IgorCisjOiBidWlsdGluL3B1bGwuYzoxNDcKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgItC30LDQsdGA0LDRgtGMINC40LfQvNC10L3QtdC90LjRjyDRgSDQv9C+0LzQvtGJ0YzRjiDQv9C10YDQtdC80LXRidC10L3QuNGPLCDQsCDQvdC1INGB0LvQuNGP0L3QuNGPIgorCisjOiBidWlsdGluL3B1bGwuYzoxNzUgYnVpbHRpbi9yZWJhc2UuYzo0NDcgYnVpbHRpbi9yZXZlcnQuYzoxMjUKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDQv9C10YDQtdC80L7RgtC60YMg0LLQv9C10YDQtdC0IgorCisjOiBidWlsdGluL3B1bGwuYzoxODQKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIHJlYmFzZSIKK21zZ3N0ciAi0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60Lgg0LLRi9C/0L7Qu9C90Y/RgtGMIHN0YXNoL3N0YXNoIHBvcCDQtNC+INC4INC/0L7RgdC70LUg0L/QtdGA0LXQvNC10YnQtdC90LjRjyIKKworIzogYnVpbHRpbi9wdWxsLmM6MjAwCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nIgorbXNnc3RyICLQntC/0YbQuNC4LCDRgdCy0Y/Qt9Cw0L3QvdGL0LUg0YEg0LjQt9Cy0LvQtdGH0LXQvdC40LXQvCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIxMAorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70YzQvdCw0Y8g0L/QtdGA0LXQt9Cw0L/QuNGB0Ywg0LvQvtC60LDQu9GM0L3QvtC5INCy0LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIxOAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIHB1bGxlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAi0LrQvtC70LjRh9C10YHRgtCy0L4g0L/QvtC00LzQvtC00YPQu9C10LksINC60L7RgtC+0YDRi9C1INCx0YPQtNGD0YIg0L/QvtC70YPRh9C10L3RiyDQv9Cw0YDRgNCw0LvQtdC70YzQvdC+IgorCisjOiBidWlsdGluL3B1bGwuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgcHVsbC5mZjogJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90L7QtSDQt9C90LDRh9C10L3QuNC1INC00LvRjyBwdWxsLmZmOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NDMwCittc2dpZCAiIgorIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0ICIKKyJmZXRjaGVkLiIKK21zZ3N0ciAi0J3QtdGCINC/0YDQtdGC0LXQvdC00LXQvdGC0L7QsiDQtNC70Y8g0L/QtdGA0LXQvNC10YnQtdC90LjRjyDRgdGA0LXQtNC4INGB0YHRi9C70L7Quiwg0LrQvtGC0L7RgNGL0LUg0LLRiyDRgtC+0LvRjNC60L4g0YfRgtC+INC/0L7Qu9GD0YfQuNC70LguIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzIKK21zZ2lkICIiCisiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCBmZXRjaGVkLiIKK21zZ3N0ciAi0J3QtdGCINC/0YDQtdGC0LXQvdC00LXQvdGC0L7QsiDQtNC70Y8g0YHQu9C40Y/QvdC40Y8g0YHRgNC10LTQuCDRgdGB0YvQu9C+0LosINC60L7RgtC+0YDRi9C1INCy0Ysg0YLQvtC70YzQutC+INGH0YLQviDQv9C+0LvRg9GH0LjQu9C4LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDMzCittc2dpZCAiIgorIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKyJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKK21zZ3N0ciAi0J7QsdGL0YfQvdC+INGN0YLQviDQvtC30L3QsNGH0LDQtdGCLCDRh9GC0L4g0LLRiyDQv9C10YDQtdC00LDQu9C4INGB0L/QtdGG0LjRhNC40LrQsNGG0LjRjiDRgdGB0YvQu9C60Lgg0YEg0L/QvtC80L7RidGM0Y4g0YjQsNCx0LvQvtC90LAg0Lgg0Y3RgtC+0YIg0YjQsNCx0LvQvtC9INC90Lgg0YEg0YfQtdC8INC90LUg0YHQvtCy0L/QsNC7INC90LAg0LLQvdC10YjQvdC10Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKyJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICLQktGLINC/0L7Qv9GA0L7RgdC40LvQuCDQv9C+0LvRg9GH0LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDRgdC+INCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDCqyVzwrssINC90L4g0L3QtSDRg9C60LDQt9Cw0LvQuCDQstC10YLQutGDLiDQotCw0Log0LrQsNC6INGN0YLQviDQvdC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4g0LTQu9GPICDQstCw0YjQtdC5INGC0LXQutGD0YnQtdC5INCy0LXRgtC60LgsINCy0Ysg0LTQvtC70LbQvdGLINGD0LrQsNC30LDRgtGMINCy0LXRgtC60YMg0LIg0LrQvtC80LDQvdC00L3QvtC5INGB0YLRgNC+0LrQtS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MSBidWlsdGluL3JlYmFzZS5jOjEzMjEgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3MworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgItCS0Ysg0YHQtdC50YfQsNGBINC90Lgg0L3QsCDQvtC00L3QvtC5INC40Lcg0LLQtdGC0L7Qui4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MyBidWlsdGluL3B1bGwuYzo0NTggZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgItCf0L7QttCw0LvRg9C50YHRgtCwLCDRg9C60LDQttC40YLQtSDQvdCwINC60LDQutGD0Y4g0LLQtdGC0LrRgyDQstGLINGF0L7RgtC40YLQtSDQv9C10YDQtdC80LXRgdGC0LjRgtGMINC40LfQvNC10L3QtdC90LjRjy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NSBidWlsdGluL3B1bGwuYzo0NjAgZ2l0LXBhcnNlLXJlbW90ZS5zaDo4MgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKK21zZ3N0ciAi0J/QvtC20LDQu9GD0LnRgdGC0LAsINGD0LrQsNC20LjRgtC1INGBINC60LDQutC+0Lkg0LLQtdGC0LrQvtC5INCy0Ysg0YXQvtGC0LjRgtC1INGB0LvQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ2IGJ1aWx0aW4vcHVsbC5jOjQ2MQorbXNnaWQgIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgItCU0LvRjyDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4LCDRgdC80L7RgtGA0LjRgtC1IGdpdC1wdWxsKDEpLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ4IGJ1aWx0aW4vcHVsbC5jOjQ1NCBidWlsdGluL3B1bGwuYzo0NjMKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTMyNyBnaXQtcGFyc2UtcmVtb3RlLnNoOjY0Cittc2dpZCAiPHJlbW90ZT4iCittc2dzdHIgIjzQstC90LXRiNC90LjQuS3RgNC10L/QvtC30LjRgtC+0YDQuNC5PiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ4IGJ1aWx0aW4vcHVsbC5jOjQ2MyBidWlsdGluL3B1bGwuYzo0NjgKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6NjUKK21zZ2lkICI8YnJhbmNoPiIKK21zZ3N0ciAiPNCy0LXRgtC60LA+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NTYgYnVpbHRpbi9yZWJhc2UuYzoxMzE5IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzUKK21zZ2lkICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi0KMg0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQuCDQvdC10YIg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L7QsSDQvtGC0YHQu9C10LbQuNCy0LDQvdC40LguIgorCisjOiBidWlsdGluL3B1bGwuYzo0NjUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo5NQorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDoiCittc2dzdHIgItCV0YHQu9C4INCy0Ysg0YXQvtGC0LjRgtC1INGD0LrQsNC30LDRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+INC+0YLRgdC70LXQttC40LLQsNC10LzQvtC5INCy0LXRgtC60LUsINCy0YvQv9C+0LvQvdC40YLQtToiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAi0JLQsNGI0LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGPINGD0LrQsNC30YvQstCw0LXRgiwg0YfRgtC+INC90YPQttC90L4g0YHQu9C40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0YHQviDRgdGB0YvQu9C60L7QuVxuwqslc8K7INC40Lcg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPLCDQvdC+INGC0LDQutCw0Y8g0YHRgdGL0LvQutCwINC90LUg0LHRi9C70LAg0L/QvtC70YPRh9C10L3QsC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjU3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo4NTQKK21zZ2lkICJpZ25vcmluZyAtLXZlcmlmeS1zaWduYXR1cmVzIGZvciByZWJhc2UiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0L3QuNC1IC0tdmVyaWZ5LXNpZ25hdHVyZXMg0L/RgNC4INC/0LXRgNC10LzQtdGJ0LXQvdC40LgiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkwOQorbXNnaWQgIi0tW25vLV1hdXRvc3Rhc2ggb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXJlYmFzZS4iCittc2dzdHIgIi0tW25vLV1hdXRvc3Rhc2gg0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INCy0LzQtdGB0YLQtSDRgSAtLXJlYmFzZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkxNworbXNnaWQgIlVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleC4iCittc2dzdHIgItCe0LHQvdC+0LLQu9C10L3QuNC1INC10YnQtSDQvdC1INC90LDRh9Cw0LLRiNC10LnRgdGPINCy0LXRgtC60Lgg0YEg0LjQt9C80LXQvdC10L3QuNGP0LzQuCwg0LTQvtCx0LDQstC70LXQvdC90YvQvNC4INCyINC40L3QtNC10LrRgS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyMQorbXNnaWQgInB1bGwgd2l0aCByZWJhc2UiCittc2dzdHIgItC/0L7Qu9GD0YfQtdC90LjQtSDRgSDQv9C10YDQtdC80LXRidC10L3QuNC10LwiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyMgorbXNnaWQgInBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgItGB0LTQtdC70LDQudGC0LUg0LrQvtC80LzQuNGCINC40LvQuCDRgdC/0YDRj9GH0YzRgtC1INC40YUuIgorCisjOiBidWlsdGluL3B1bGwuYzo5NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuXG4iCisiZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb21cbiIKKyJjb21taXQgJXMuIgorbXNnc3RyICLQuNC30LLQu9C10YfQtdC90LjQtSDQvtCx0L3QvtCy0LjQu9C+INGD0LrQsNC30LDRgtC10LvRjCDQvdCwINCy0LDRiNGDINGC0LXQutGD0YnRg9GOINCy0LXRgtC60YMuXG7Qv9C10YDQtdC80L7RgtC60LAg0LLQsNGI0LXQs9C+INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsFxu0YEg0LrQvtC80LzQuNGC0LAgJXMuIgorCisjOiBidWlsdGluL3B1bGwuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10LzQvtGC0LDRgtGMINCy0L/QtdGA0ZHQtCDQuNC30LzQtdC90LXQvdC40Y8g0LIg0LLQsNGI0LXQvCDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1Llxu0J/QvtGB0LvQtSDRgtC+0LPQviwg0LrQsNC6INCy0Ysg0YPQsdC10LTQuNGC0LXRgdGMLCDRh9GC0L4g0LLRiyDRgdC+0YXRgNCw0L3QuNC70Lgg0LLRgdGRINC90LXQvtCx0YXQvtC00LjQvNC+0LUg0LjQtyDQstGL0LLQvtC00LBcbiQgZ2l0IGRpZmYgJXNcbiwg0LfQsNC/0YPRgdGC0LjRgtC1XG4kIGdpdCByZXNldCAtLWhhcmRcbtC00LvRjyDQstC+0YHRgdGC0LDQvdC+0LLQu9C10L3QuNGPINC40YHRhdC+0LTQvdC+0LPQviDRgdC+0YHRgtC+0Y/QvdC40Y8uIgorCisjOiBidWlsdGluL3B1bGwuYzo5NjgKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkLiIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINGB0LvQuNGC0Ywg0L3QtdGB0LrQvtC70YzQutC+INCy0LXRgtC+0Log0LIg0L/Rg9GB0YLQvtC5INGD0LrQsNC30LDRgtC10LvRjCDQvdCwINCy0LXRgtC60YMuIgorCisjOiBidWlsdGluL3B1bGwuYzo5NzIKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQv9C10YDQtdC80LXRgdGC0LjRgtGMINC90LDQtCDQvdC10YHQutC+0LvRjNC60LjQvNC4INCy0LXRgtC60LDQvNC4LiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTc5Cittc2dpZCAiY2Fubm90IHJlYmFzZSB3aXRoIGxvY2FsbHkgcmVjb3JkZWQgc3VibW9kdWxlIG1vZGlmaWNhdGlvbnMiCittc2dzdHIgItC90LXQstC+0LfQvNC+0LbQvdC+INCy0YvQv9C+0LvQvdC40YLRjCDQv9C10YDQtdC80LXRidC10L3QuNC1INGBINC30LDQv9C40YHQsNC90L3Ri9C80Lgg0LvQvtC60LDQu9GM0L3Ri9C80Lgg0LjQt9C80LXQvdC10L3QuNGP0LzQuCDQsiDQv9C+0LTQvNC+0LTRg9C70Y/RhSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTkKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1c2ggWzzQvtC/0YbQuNC4Pl0gWzzRgNC10L/QvtC30LjRgtC+0YDQuNC5PiBbPNGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgC3RgdGB0YvQu9C60Lg+4oCmXV0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjExMQorbXNnaWQgInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIKK21zZ3N0ciAi0YPQutCw0LfQsNC90L4g0YHQvtC60YDQsNGJ0LXQvdC40LUgdGFnLCDQvdC+INC90LUg0YPQutCw0LfQsNC90LAg0YHQsNC80LAgPNC80LXRgtC60LA+IgorCisjOiBidWlsdGluL3B1c2guYzoxMjEKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAi0L7Qv9GG0LjRjyAtLWRlbGV0ZSDQv9GA0LjQvdC40LzQsNC10YIg0YLQvtC70YzQutC+INC/0YDQvtGB0YLRi9C1INGG0LXQu9C10LLRi9C1INC40LzQtdC90LAg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL3B1c2guYzoxNjcKK21zZ2lkICIiCisiXG4iCisiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksIHNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIgorbXNnc3RyICJcbtCn0YLQvtCx0Ysg0LLRi9Cx0YDQsNGC0Ywg0LvRjtCx0YPRjiDQuNC3INC+0L/RhtC40Lkg0L3QsCDQv9C+0YHRgtC+0Y/QvdC90L7QuSDQvtGB0L3QvtCy0LUsINGB0LzQvtGC0YDQuNGC0LUgcHVzaC5kZWZhdWx0INCyIMKrZ2l0IGhlbHAgY29uZmlnwrsuIgorCisjOiBidWlsdGluL3B1c2guYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEXG4iCisiJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAi0JLRiyDRgdC10LnRh9Cw0YEg0L3QtSDQvdCw0YXQvtC00LjRgtC10YHRjCDQvdC4INC90LAg0L7QtNC90L7QuSDQuNC3INCy0LXRgtC+0LouXG7Qp9GC0L7QsdGLINC+0YLQv9GA0LDQstC40YLRjCDQuNGB0YLQvtGA0LjRjiwg0LLQtdC00YPRidGD0Y4g0Log0YLQtdC60YPRidC10LzRgyAo0L7RgtC00LXQu9GR0L3QvdGL0LkgSEVBRCkg0YHQvtGB0YLQvtGP0L3QuNGOLCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1XG5cbiAgICBnaXQgcHVzaCAlcyBIRUFEOjzQuNC80Y8t0LLQvdC10YjQvdC10Lkt0LLQtdGC0LrQuD5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG5vIHVwc3RyZWFtIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgc2V0IHRoZSByZW1vdGUgYXMgdXBzdHJlYW0sIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorbXNnc3RyICLQotC10LrRg9GJ0LDRjyDQstC10YLQutCwICVzINC90LUg0LjQvNC10LXRgiDQstGL0YjQtdGB0YLQvtGP0YnQtdC5INCy0LXRgtC60LguXG7Qp9GC0L7QsdGLINC+0YLQv9GA0LDQstC40YLRjCDRgtC10LrRg9GJ0YPRjiDQstC10YLQutGDINC4INGD0YHRgtCw0L3QvtCy0LjRgtGMINCy0L3QtdGI0L3RjtGOINCy0LXRgtC60YMg0LrQsNC6INCy0YvRiNC10YHRgtC+0Y/RidGD0Y4g0LTQu9GPINGN0YLQvtC5INCy0LXRgtC60LgsINC40YHQv9C+0LvRjNC30YPQudGC0LVcblxuICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBtdWx0aXBsZSB1cHN0cmVhbSBicmFuY2hlcywgcmVmdXNpbmcgdG8gcHVzaC4iCittc2dzdHIgItCS0LDRiNCwINGC0LXQutGD0YnQsNGPINCy0LXRgtC60LAgJXMg0LjQvNC10LXRgiDQvdC10YHQutC+0LvRjNC60L4g0LLRi9GI0LXRgdGC0L7Rj9GJ0LjRhSDQstC10YLQvtC6LCDQvtGC0LrQsNC3INCyINC+0YLQv9GA0LDQstC60LUg0LjQt9C80LXQvdC10L3QuNC5LiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIHB1c2hpbmcgdG8gcmVtb3RlICclcycsIHdoaWNoIGlzIG5vdCB0aGUgdXBzdHJlYW0gb2ZcbiIKKyJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycsIHdpdGhvdXQgdGVsbGluZyBtZSB3aGF0IHRvIHB1c2hcbiIKKyJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iCittc2dzdHIgItCS0Ysg0YHQtdC50YfQsNGBINC+0YLQv9GA0LDQstC70Y/QtdGC0LUg0LjQt9C80LXQvdC10L3QuNGPINC90LAg0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDCqyVzwrssINC60L7RgtC+0YDRi9C5INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQstGL0YjQtdGB0YLQvtGP0YnQuNC8INC00LvRjyDQstCw0YjQtdC5INGC0LXQutGD0YnQtdC5INCy0LXRgtC60Lggwqslc8K7LCDQsdC10Lcg0YPQutCw0LfQsNC90LjRjyDRgtC+0LPQviwg0YfRgtC+INC+0YLQv9GA0LDQstC70Y/RgtGMINC4INCyINC60LDQutGD0Y4g0LLQvdC10YjQvdGO0Y4g0LLQtdGC0LrRgy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI2OQorbXNnaWQgIllvdSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVmc3BlY3MgdG8gcHVzaCwgYW5kIHB1c2guZGVmYXVsdCBpcyBcIm5vdGhpbmdcIi4iCittc2dzdHIgItCS0Ysg0L3QtSDRg9C60LDQt9Cw0LvQuCDRgdC/0LXRhtC40YTQuNC60LDRhtC40Y4g0YHRgdGL0LvQutC4INC00LvRjyDQvtGC0L/RgNCw0LLQutC4LCDQsCBwdXNoLmRlZmF1bHQg0YPQutCw0LfQsNC9INC60LDQuiDCq25vdGhpbmfCuy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3NgorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gSW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLlxuIgorIidnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAi0J7QsdC90L7QstC70LXQvdC40Y8g0LHRi9C70Lgg0L7RgtC60LvQvtC90LXQvdGLLCDRgtCw0Log0LrQsNC6INCy0LXRgNGF0YPRiNC60LAg0LLQsNGI0LXQuSDRgtC10LrRg9GJ0LXQuSDQstC10YLQutC4XG7Qv9C+0LfQsNC00Lgg0LXQtSDQstC90LXRiNC90LXQuSDRh9Cw0YHRgtC4LiDQl9Cw0LHQtdGA0LjRgtC1INC4INGB0LvQtdC50YLQtSDQstC90LXRiNC90LjQtSDQuNC30LzQtdC90LXQvdC40Y8gXG4o0L3QsNC/0YDQuNC80LXRgCwg0YEg0L/QvtC80L7RidGM0Y4gwqtnaXQgcHVsbCDigKbCuykg0L/QtdGA0LXQtCDQv9C+0LLRgtC+0YDQvdC+0Lkg0L/QvtC/0YvRgtC60L7QuSDQvtGC0L/RgNCw0LLQutC4XG7QuNC30LzQtdC90LXQvdC40LkuXG7QlNC70Y8g0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQuCwg0YHQvNC+0YLRgNC40YLQtSDCq05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkc8K7XG7QsiDCq2dpdCBwdXNoIC0taGVscMK7LiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjgyCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjRjyDQsdGL0LvQuCDQvtGC0LrQu9C+0L3QtdC90YssINGC0LDQuiDQutCw0Log0LLQtdGA0YXRg9GI0LrQsCDQvtGC0L/RgNCw0LLQu9GP0LXQvNC+0Lkg0LLQtdGC0LrQuFxu0L/QvtC30LDQtNC4INC10LUg0LLQvdC10YjQvdC10Lkg0YfQsNGB0YLQuC4g0J/QtdGA0LXQutC70Y7Rh9C40YLQtdGB0Ywg0L3QsCDQstC10YLQutGDINC4INC30LDQsdC10YDQuNGC0LUg0LLQvdC10YjQvdC40LVcbtC40LfQvNC10L3QtdC90LjRjyAo0L3QsNC/0YDQuNC80LXRgCwg0YEg0L/QvtC80L7RidGM0Y4gwqtnaXQgcHVsbCDigKbCuykg0L/QtdGA0LXQtCDQv9C+0LLRgtC+0YDQvdC+0LlcbtC/0L7Qv9GL0YLQutC+0Lkg0L7RgtC/0YDQsNCy0LrQuCDQuNC30LzQtdC90LXQvdC40LkuXG7QlNC70Y8g0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQuCwg0YHQvNC+0YLRgNC40YLQtSDCq05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkc8K7XG7QsiDCq2dpdCBwdXNoIC0taGVscMK7LiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg4Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAi0J7QsdC90L7QstC70LXQvdC40Y8g0LHRi9C70Lgg0L7RgtC60LvQvtC90LXQvdGLLCDRgtCw0Log0LrQsNC6INCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0YHQvtC00LXRgNC20LjRglxu0LjQt9C80LXQvdC10L3QuNGPLCDQutC+0YLQvtGA0YvRhSDRgyDQstCw0YEg0L3QtdGCINCyINCy0LDRiNC10Lwg0LvQvtC60LDQu9GM0L3QvtC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LguXG7QntCx0YvRh9C90L4sINGN0YLQviDRgdCy0Y/Qt9Cw0L3QvdC+INGBINGC0LXQvCwg0YfRgtC+INC60YLQvi3RgtC+INGD0LbQtSDQvtGC0L/RgNCw0LLQuNC7INC40LfQvNC10L3QtdC90LjRjyDQsiBcbtGC0L4g0LbQtSDQvNC10YHRgtC+LiDQn9C10YDQtdC0INC/0L7QstGC0L7RgNC90L7QuSDQvtGC0L/RgNCw0LLQutC+0Lkg0LLQsNGI0LjRhSDQuNC30LzQtdC90LXQvdC40LksINCy0LDQvCDQvdGD0LbQvdC+XG7Qt9Cw0LHRgNCw0YLRjCDQuCDRgdC70LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDQuNC3INCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDRgdC10LHQtVxuKNC90LDQv9GA0LjQvNC10YAsINGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IHB1bGwg4oCmwrspLlxu0JTQu9GPINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+0Lkg0LjQvdGE0L7RgNC80LDRhtC40LgsINGB0LzQvtGC0YDQuNGC0LUgwqtOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHPCu1xu0LIgwqtnaXQgcHVzaCAtLWhlbHDCuy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5NQorbXNnaWQgIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0YWcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlbW90ZS4iCittc2dzdHIgItCe0LHQvdC+0LLQu9C10L3QuNGPINCx0YvQu9C4INC+0YLQutC70L7QvdC10L3Riywg0YLQsNC6INC60LDQuiDQvNC10YLQutCwINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiDQstC+INCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LguIgorCisjOiBidWlsdGluL3B1c2guYzoyOTgKK21zZ2lkICIiCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAi0JLRiyDQvdC1INC80L7QttC10YLQtSDQvtCx0L3QvtCy0LjRgtGMINCy0L3QtdGI0L3RjtGOINGB0YHRi9C70LrRgywg0LrQvtGC0L7RgNCw0Y8g0YPQutCw0LfRi9Cy0LDQtdGCINC90LAg0L7QsdGK0LXQutGCLCDQvdC1INGP0LLQu9GP0Y7RidC40LnRgdGPINC60L7QvNC80LjRgtC+0Lwg0LjQu9C4INC+0LHQvdC+0LLQuNGC0Ywg0LLQvdC10YjQvdGO0Y4g0YHRgdGL0LvQutGDINGC0LDQuiwg0YfRgtC+0LHRiyDQvtC90LAg0YPQutCw0LfRi9Cy0LDQu9CwINC90LAg0L7QsdGK0LXQutGCLCDQvdC1INGP0LLQu9GP0Y7RidC40LnRgdGPINC60L7QvNC80LjRgtC+0LwsINCx0LXQtyDRg9C60LDQt9Cw0L3QuNGPINC+0L/RhtC40LggwqstLWZvcmNlwrsuXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgItCe0YLQv9GA0LDQstC60LAg0LIgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQv9GA0LDQstC40YLRjCDQvdC10LrQvtGC0L7RgNGL0LUg0YHRgdGL0LvQutC4INCyIMKrJXPCuyIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBvc2l0b3J5ICclcyciCittc2dzdHIgItC/0LvQvtGF0L7QuSDRgNC10L/QvtC30LjRgtC+0YDQuNGPIMKrJXPCuyIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzk5Cittc2dpZCAiIgorIk5vIGNvbmZpZ3VyZWQgcHVzaCBkZXN0aW5hdGlvbi5cbiIKKyJFaXRoZXIgc3BlY2lmeSB0aGUgVVJMIGZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBjb25maWd1cmUgYSByZW1vdGUgcmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAi0J3QtSDQvdCw0YHRgtGA0L7QtdC90LAg0YLQvtGH0LrQsCDQvdCw0LfQvdCw0YfQtdC90LjRjyDQtNC70Y8g0L7RgtC/0YDQsNCy0LrQuC5cbtCb0LjQsdC+INGD0LrQsNC20LjRgtC1IFVSTCDRgSDQv9C+0LzQvtGJ0YzRjiDQutC+0LzQsNC90LTQvdC+0Lkg0YHRgtGA0L7QutC4LCDQu9C40LHQviDQvdCw0YHRgtGA0L7QudGC0LUg0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDRgSDQv9C+0LzQvtGJ0YzRjlxuXG4gICAgZ2l0IHJlbW90ZSBhZGQgPNC40LzRjz4gPNCw0LTRgNC10YE+XG5cbtCwINC30LDRgtC10Lwg0L7RgtC/0YDQsNCy0YzRgtC1INC40LfQvNC10L3QtdC90LjRjyDRgSDQv9C+0LzQvtGJ0YzRjiDQuNC80LXQvdC4INCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRj1xuXG4gICAgZ2l0IHB1c2ggPNC40LzRjz5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU0Cittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAi0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU1IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY0Cittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAi0L7RgtC/0YDQsNCy0LjRgtGMINCy0YHQtSDRgdGB0YvQu9C60LgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NiBidWlsdGluL3NlbmQtcGFjay5jOjE2NgorbXNnaWQgIm1pcnJvciBhbGwgcmVmcyIKK21zZ3N0ciAi0YHQtNC10LvQsNGC0Ywg0LfQtdGA0LrQsNC70L4g0LLRgdC10YUg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL3B1c2guYzo1NTgKK21zZ2lkICJkZWxldGUgcmVmcyIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0Ywg0YHRgdGL0LvQutC4IgorCisjOiBidWlsdGluL3B1c2guYzo1NTkKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgItC+0YLQv9GA0LDQstC40YLRjCDQvNC10YLQutC4ICjQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCy0LzQtdGB0YLQtSDRgSAtLWFsbCDQuNC70LggLS1taXJyb3IpIgorCisjOiBidWlsdGluL3B1c2guYzo1NjIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjcKK21zZ2lkICJmb3JjZSB1cGRhdGVzIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QvtC1INC+0LHQvdC+0LLQu9C10L3QuNC1IgorCisjOiBidWlsdGluL3B1c2guYzo1NjQgYnVpbHRpbi9zZW5kLXBhY2suYzoxODEKK21zZ2lkICI8cmVmbmFtZT46PGV4cGVjdD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY1IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgyCittc2dpZCAicmVxdWlyZSBvbGQgdmFsdWUgb2YgcmVmIHRvIGJlIGF0IHRoaXMgdmFsdWUiCittc2dzdHIgItGC0YDQtdCx0L7QstCw0YLRjCwg0YfRgtC+0LHRiyDRgdGC0LDRgNC+0LUg0LfQvdCw0YfQtdC90LjQtSDRgdGB0YvQu9C60Lgg0LHRi9C70L4g0L7QttC40LTQsNC10LzRi9C8IgorCisjOiBidWlsdGluL3B1c2guYzo1NjgKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgItGD0L/RgNCw0LLQu9C10L3QuNC1INGA0LXQutGD0YDRgdC40LLQvdC+0Lkg0L7RgtC/0YDQsNCy0LrQvtC5INC/0L7QtNC80L7QtNGD0LvQtdC5IgorCisjOiBidWlsdGluL3B1c2guYzo1NzAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzUKK21zZ2lkICJ1c2UgdGhpbiBwYWNrIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC90LrQuNC1INC/0LDQutC10YLRiyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTcxIGJ1aWx0aW4vcHVzaC5jOjU3MiBidWlsdGluL3NlbmQtcGFjay5jOjE2MQorIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjIKK21zZ2lkICJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIKK21zZ3N0ciAi0L/Rg9GC0Ywg0Log0L/RgNC+0LPRgNCw0LzQvNC1INGD0L/QsNC60L7QstC60Lgg0L3QsCDRgdC10YDQstC10YDQtSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTczCittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgItGD0YHRgtCw0L3QvtCy0LjRgtGMINCy0YvRiNC10YHRgtC+0Y/RidGD0Y4g0LLQtdGC0LrRgyDQtNC70Y8gZ2l0IHB1bGwvc3RhdHVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NzYKK21zZ2lkICJwcnVuZSBsb2NhbGx5IHJlbW92ZWQgcmVmcyIKK21zZ3N0ciAi0L/QvtGH0LjRgdGC0LjRgtGMINC70L7QutCw0LvRjNC90L4g0YPQtNCw0LvQtdC90L3Ri9C1INGB0YHRi9C70LrQuCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTc4Cittc2dpZCAiYnlwYXNzIHByZS1wdXNoIGhvb2siCittc2dzdHIgItC/0YDQvtC/0YPRgdGC0LjRgtGMINC/0LXRgNC10YXQstCw0YLRh9C40LogcHJlLXB1c2giCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3OQorbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAi0L7RgtC/0YDQsNCy0LjRgtGMINC/0YDQvtC/0YPRidC10L3QvdGL0LUsINC90L4g0L3Rg9C20L3Ri9C1INC80LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU4MiBidWlsdGluL3NlbmQtcGFjay5jOjE2OQorbXNnaWQgIkdQRyBzaWduIHRoZSBwdXNoIgorbXNnc3RyICLQv9C+0LTQv9C40YHQsNGC0Ywg0L7RgtC/0YDQsNCy0LrRgyDRgSDQv9C+0LzQvtGJ0YzRjiBHUEciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU4NCBidWlsdGluL3NlbmQtcGFjay5jOjE3NgorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICLQt9Cw0L/RgNC+0YHQuNGC0Ywg0LLRi9C/0L7Qu9C90LXQvdC40LUg0LDRgtC+0LzQsNGA0L3QvtC5INGC0YDQsNC90LfQsNC60YbQuNC4INC90LAg0LLQvdC10YjQvdC10Lkg0YHRgtC+0YDQvtC90LUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYwMgorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICItLWRlbGV0ZSDQvdC10YHQvtCy0LzQtdGB0YLQuNC80L4g0YEgIC0tYWxsLCAtLW1pcnJvciDQuCAtLXRhZ3MiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYwNAorbXNnaWQgIi0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IGFueSByZWZzIgorbXNnc3RyICItLWRlbGV0ZSDQvdC1INC40LzQtdC10YIg0YHQvNGL0YHQu9CwINCx0LXQtyDRg9C60LDQt9Cw0L3QuNGPINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjA3Cittc2dpZCAiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCDQuCAtLXRhZ3Mg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYwOQorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tYWxsINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LLQvNC10YHRgtC1INGB0L4g0YHQv9C10YbQuNGE0LjQutCw0YLQvtGA0LDQvNC4INGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjEzCittc2dpZCAiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLW1pcnJvciDQuCAtLXRhZ3Mg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxNQorbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tbWlycm9yINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LLQvNC10YHRgtC1INGB0L4g0YHQv9C10YbQuNGE0LjQutCw0YLQvtGA0LDQvNC4INGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjE4Cittc2dpZCAiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsINC4IC0tbWlycm9yINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBidWlsdGluL3B1c2guYzo2MzcKK21zZ2lkICJwdXNoIG9wdGlvbnMgbXVzdCBub3QgaGF2ZSBuZXcgbGluZSBjaGFyYWN0ZXJzIgorbXNnc3RyICLQvtC/0YbQuNC4INC00LvRjyDQvtGC0L/RgNCw0LLQutC4INC90LUg0LTQvtC70LbQvdGLINGB0L7QtNC10YDQttCw0YLRjCDRgdC40LzQstC+0LvRiyDQv9C10YDQtdCy0L7QtNCwINGB0YLRgNC+0LoiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjgKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLWJhc2U+Li48b2xkLXRpcD4gPG5ldy1iYXNlPi4uPG5ldy10aXA+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjkKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLXRpcD4uLi48bmV3LXRpcD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MTAKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8YmFzZT4gPG9sZC10aXA+IDxuZXctdGlwPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyMQorbXNnaWQgIlBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjMKK21zZ2lkICJ1c2Ugc2ltcGxlIGRpZmYgY29sb3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjQ2IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIC4uIGluIHJhbmdlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjYwCittc2dpZCAic2luZ2xlIGFyZyBmb3JtYXQgbXVzdCBiZSBzeW1tZXRyaWMgcmFuZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NzUKK21zZ2lkICJuZWVkIHR3byBjb21taXQgcmFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6NDEKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSIKKyIgWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gIgorIlstLWluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTzQv9GA0LXRhNC40LrRgT4pIFstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLWluZGV4LW91dHB1dD080YTQsNC50Ls+XSAoLS1lbXB0eSB8IDzRg9C60LDQt9Cw0YLQtdC70Ywt0LTQtdGA0LXQstCwLTE+IFs80YPQutCw0LfQsNGC0LXQu9GMLdC00LXRgNC10LLQsC0yPiBbPNGD0LrQsNC30LDRgtC10LvRjC3QtNC10YDQtdCy0LAtMz5dXSkiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAi0LfQsNC/0LjRgdCw0YLRjCDRgNC10LfRg9C70YzRgtC40YDRg9GO0YnQuNC5INC40L3QtNC10LrRgSDQsiA80YTQsNC50Ls+IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICLQv9GA0L7RgdGC0L4g0L7Rh9C40YHRgtC40YLRjCDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI5Cittc2dpZCAiTWVyZ2luZyIKIG1zZ3N0ciAi0KHQu9C40Y/QvdC40LUiCiAKLSM6IGdpdC1ndWkuc2g6MjQ2NSBsaWIvY2hvb3NlX3Jldi50Y2w6NTU3Ci1tc2dpZCAiUmVtb3RlIgotbXNnc3RyICLQktC90LXRiNC90LjQtSDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgorIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzEKK21zZ2lkICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIgorbXNnc3RyICLQstGL0L/QvtC70L3QuNGC0Ywg0YHQu9C40Y/QvdC40LUg0LIg0LTQvtC/0L7Qu9C90LXQvdC40LUg0Log0YfRgtC10L3QuNGOIgogCi0jOiBnaXQtZ3VpLnNoOjI0NjgKLW1zZ2lkICJUb29scyIKLW1zZ3N0ciAi0JLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3Ri9C1INC+0L/QtdGA0LDRhtC40LgiCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMworbXNnaWQgIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIKK21zZ3N0ciAi0YLRgNC10YXRhdC+0LTQvtCy0L7QtSDRgdC70LjRj9C90LjQtSwg0LXRgdC70Lgg0L3QtSDRgtGA0LXQsdGD0LXRgtGB0Y8g0YHQu9C40Y/QvdC40LUg0L3QsCDRg9GA0L7QstC90LUg0YTQsNC50LvQvtCyIgogCi0jOiBnaXQtZ3VpLnNoOjI0NzcKLW1zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKLW1zZ3N0ciAi0J/RgNC+0YHQvNC+0YLRgCDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAiCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgIjMtd2F5IG1lcmdlIGluIHByZXNlbmNlIG9mIGFkZHMgYW5kIHJlbW92ZXMiCittc2dzdHIgItGC0YDQtdGF0YXQvtC00L7QstC+0LUg0YHQu9C40Y/QvdC40LUg0LIg0YHQu9GD0YfQsNC1INC/0YDQuNGB0YPRgtGB0YLQstC40Y8g0LTQvtCx0LDQstC70LXQvdC40Lkg0LjQu9C4INGD0LTQsNC70LXQvdC40Lkg0YTQsNC50LvQvtCyIgogCi0jOiBnaXQtZ3VpLnNoOjI0ODMKLW1zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKLW1zZ3N0ciAi0J/RgNC+0YHQvNC+0YLRgNC10YLRjCDRhNCw0LnQu9GLINGC0LXQutGD0YnQtdC5INCy0LXRgtC60LgiCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgItGC0L7QttC1LCDRh9GC0L4g0LggLW0sINC90L4g0L7RgtC80LXQvdGP0LXRgiDQuNC30LzQtdC90LXQvdC40Y8g0L3QtSDRgdC70LjRgtGL0YUg0LfQsNC/0LjRgdC10LkiCiAKLSM6IGdpdC1ndWkuc2g6MjQ4NwotbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0YTQsNC50LvRiyDQstC10YLQutC44oCmIgorIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzgKK21zZ2lkICI8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIjzQv9C+0LTQutCw0YLQsNC70L7Qsz4vIgogCi0jOiBnaXQtZ3VpLnNoOjI0OTIKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgotbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YDQuNGOINGC0LXQutGD0YnQtdC5INCy0LXRgtC60LgiCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOQorbXNnaWQgInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0LTQtdGA0LXQstC+INCyINC40L3QtNC10LrRgSDQsiA80L/QvtC00LrQsNGC0LDQu9C+0LM+LyIKIAotIzogZ2l0LWd1aS5zaDoyNDk2Ci1tc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKLW1zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQuNGB0YLQvtGA0LjRjiDQstGB0LXRhSDQstC10YLQvtC6IgorIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDIKK21zZ2lkICJ1cGRhdGUgd29ya2luZyB0cmVlIHdpdGggbWVyZ2UgcmVzdWx0IgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzINGA0LXQt9GD0LvRjNGC0LDRgtC+0Lwg0YHQu9C40Y/QvdC40Y8iCiAKLSM6IGdpdC1ndWkuc2g6MjUwMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgotbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINGE0LDQudC70Ysg0LLQtdGC0LrQuCAlcyIKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ0Cittc2dpZCAiZ2l0aWdub3JlIgorbXNnc3RyICJnaXRpZ25vcmUiCiAKLSM6IGdpdC1ndWkuc2g6MjUwNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LjRgdGC0L7RgNC40Y4g0LLQtdGC0LrQuCAlcyIKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ1Cittc2dpZCAiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0L/QtdGA0LXQt9Cw0L/QuNGB0Ywg0Y/QstC90L4g0LjQs9C90L7RgNC40YDRg9C10LzRi9GFINGE0LDQudC70L7QsiIKIAotIzogZ2l0LWd1aS5zaDoyNTEwIGxpYi9kYXRhYmFzZS50Y2w6MjcgbGliL2RhdGFiYXNlLnRjbDo2NwotbXNnaWQgIkRhdGFiYXNlIFN0YXRpc3RpY3MiCi1tc2dzdHIgItCh0YLQsNGC0LjRgdGC0LjQutCwINCx0LDQt9GLINC00LDQvdC90YvRhSIKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ4Cittc2dpZCAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIgorbXNnc3RyICLQvdC1INC/0YDQvtCy0LXRgNGP0YLRjCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQv9C+0YHQu9C1INGB0LvQuNGP0L3QuNGPIgogCi0jOiBnaXQtZ3VpLnNoOjI1MTMgbGliL2RhdGFiYXNlLnRjbDozNAotbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgotbXNnc3RyICLQodC20LDRgtGMINCx0LDQt9GDINC00LDQvdC90YvRhSIKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ5Cittc2dpZCAiZG9uJ3QgdXBkYXRlIHRoZSBpbmRleCBvciB0aGUgd29yayB0cmVlIgorbXNnc3RyICLQvdC1INC+0LHQvdC+0LLQu9GP0YLRjCDQuNC90LTQtdC60YEg0LjQu9C4INGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIgogCi0jOiBnaXQtZ3VpLnNoOjI1MTYKLW1zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCi1tc2dzdHIgItCf0YDQvtCy0LXRgNC40YLRjCDQsdCw0LfRgyDQtNCw0L3QvdGL0YUiCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MQorbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0L/RgNC40LzQtdC90LXQvdC40LUg0YTQuNC70YzRgtGA0LAg0YfQsNGB0YLQuNGH0L3QvtCz0L4g0L/QtdGA0LXQutC70Y7Rh9C10L3QuNGPINC90LAg0YHQvtGB0YLQvtGP0L3QuNC1IgogCi0jOiBnaXQtZ3VpLnNoOjI1MjMgZ2l0LWd1aS5zaDoyNTI3IGdpdC1ndWkuc2g6MjUzMSBsaWIvc2hvcnRjdXQudGNsOjgKLSM6IGxpYi9zaG9ydGN1dC50Y2w6NDAgbGliL3Nob3J0Y3V0LnRjbDo3MgotbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCi1tc2dzdHIgItCh0L7Qt9C00LDRgtGMINGP0YDQu9GL0Log0L3QsCDRgNCw0LHQvtGH0LXQvCDRgdGC0L7Qu9C1IgorIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTMKK21zZ2lkICJkZWJ1ZyB1bnBhY2stdHJlZXMiCittc2dzdHIgItC+0YLQu9Cw0LTQutCwIHVucGFjay10cmVlcyIKIAotIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCi1tc2dpZCAiUXVpdCIKLW1zZ3N0ciAi0JLRi9GF0L7QtCIKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTU3Cittc2dpZCAic3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMiCittc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDoyNTQ3Ci1tc2dpZCAiVW5kbyIKLW1zZ3N0ciAi0J7RgtC80LXQvdC40YLRjCIKLQotIzogZ2l0LWd1aS5zaDoyNTUwCi1tc2dpZCAiUmVkbyIKLW1zZ3N0ciAi0J/QvtCy0YLQvtGA0LjRgtGMIgotCi0jOiBnaXQtZ3VpLnNoOjI1NTQgZ2l0LWd1aS5zaDozMTA5Ci1tc2dpZCAiQ3V0IgotbXNnc3RyICLQktGL0YDQtdC30LDRgtGMIgotCi0jOiBnaXQtZ3VpLnNoOjI1NTcgZ2l0LWd1aS5zaDozMTEyIGdpdC1ndWkuc2g6MzE4NiBnaXQtZ3VpLnNoOjMyNTkKLSM6IGxpYi9jb25zb2xlLnRjbDo2OQotbXNnaWQgIkNvcHkiCi1tc2dzdHIgItCa0L7Qv9C40YDQvtCy0LDRgtGMIgotCi0jOiBnaXQtZ3VpLnNoOjI1NjAgZ2l0LWd1aS5zaDozMTE1Ci1tc2dpZCAiUGFzdGUiCi1tc2dzdHIgItCS0YHRgtCw0LLQuNGC0YwiCi0KLSM6IGdpdC1ndWkuc2g6MjU2MyBnaXQtZ3VpLnNoOjMxMTggbGliL2JyYW5jaF9kZWxldGUudGNsOjI2Ci0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM4Ci1tc2dpZCAiRGVsZXRlIgotbXNnc3RyICLQo9C00LDQu9C40YLRjCIKLQotIzogZ2l0LWd1aS5zaDoyNTY3IGdpdC1ndWkuc2g6MzEyMiBnaXQtZ3VpLnNoOjMyNjMgbGliL2NvbnNvbGUudGNsOjcxCi1tc2dpZCAiU2VsZWN0IEFsbCIKLW1zZ3N0ciAi0JLRi9C00LXQu9C40YLRjCDQstGB0LUiCi0KLSM6IGdpdC1ndWkuc2g6MjU3NgotbXNnaWQgIkNyZWF0ZS4uLiIKLW1zZ3N0ciAi0KHQvtC30LTQsNGC0YzigKYiCi0KLSM6IGdpdC1ndWkuc2g6MjU4MgotbXNnaWQgIkNoZWNrb3V0Li4uIgotbXNnc3RyICLQn9C10YDQtdC50YLQuOKApiIKLQotIzogZ2l0LWd1aS5zaDoyNTg4Ci1tc2dpZCAiUmVuYW1lLi4uIgotbXNnc3RyICLQn9C10YDQtdC40LzQtdC90L7QstCw0YLRjOKApiIKLQotIzogZ2l0LWd1aS5zaDoyNTkzCi1tc2dpZCAiRGVsZXRlLi4uIgotbXNnc3RyICLQo9C00LDQu9C40YLRjOKApiIKLQotIzogZ2l0LWd1aS5zaDoyNTk4Ci1tc2dpZCAiUmVzZXQuLi4iCi1tc2dzdHIgItCh0LHRgNC+0YHQuNGC0YzigKYiCi0KLSM6IGdpdC1ndWkuc2g6MjYwOAotbXNnaWQgIkRvbmUiCi1tc2dzdHIgItCX0LDQstC10YDRiNC10L3QviIKLQotIzogZ2l0LWd1aS5zaDoyNjEwCi1tc2dpZCAiQ29tbWl0QEB2ZXJiIgotbXNnc3RyICLQl9Cw0LrQvtC80LzQuNGC0LjRgtGMIgotCi0jOiBnaXQtZ3VpLnNoOjI2MTkgZ2l0LWd1aS5zaDozMDUwCi1tc2dpZCAiTmV3IENvbW1pdCIKLW1zZ3N0ciAi0J3QvtCy0YvQuSDQutC+0LzQvNC40YIiCi0KLSM6IGdpdC1ndWkuc2g6MjYyNyBnaXQtZ3VpLnNoOjMwNTcKLW1zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKLW1zZ3N0ciAi0JjRgdC/0YDQsNCy0LjRgtGMINC/0L7RgdC70LXQtNC90LjQuSDQutC+0LzQvNC40YIiCi0KLSM6IGdpdC1ndWkuc2g6MjYzNyBnaXQtZ3VpLnNoOjMwMTEgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQotbXNnaWQgIlJlc2NhbiIKLW1zZ3N0ciAi0J/QtdGA0LXRh9C40YLQsNGC0YwiCi0KLSM6IGdpdC1ndWkuc2g6MjY0MwotbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKLW1zZ3N0ciAi0JTQvtCx0LDQstC40YLRjCDQsiDQuNC90LTQtdC60YEiCi0KLSM6IGdpdC1ndWkuc2g6MjY0OQotbXNnaWQgIlN0YWdlIENoYW5nZWQgRmlsZXMgVG8gQ29tbWl0IgotbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGMINC40LfQvNC10L3RkdC90L3Ri9C1INGE0LDQudC70Ysg0LIg0LjQvdC00LXQutGBIgotCi0jOiBnaXQtZ3VpLnNoOjI2NTUKLW1zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgotbXNnc3RyICLQo9Cx0YDQsNGC0Ywg0LjQtyDQuNC30LTQtdC60YHQsCIKLQotIzogZ2l0LWd1aS5zaDoyNjYxIGxpYi9pbmRleC50Y2w6NDEyCi1tc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCi1tc2dzdHIgItCe0LHRgNCw0YLQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPIgotCi0jOiBnaXQtZ3VpLnNoOjI2NjkgZ2l0LWd1aS5zaDozMzEwIGdpdC1ndWkuc2g6MzM0MQotbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgotbXNnc3RyICLQnNC10L3RjNGI0LUg0LrQvtC90YLQtdC60YHRgtCwIgotCi0jOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQotbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgotbXNnc3RyICLQkdC+0LvRjNGI0LUg0LrQvtC90YLQtdC60YHRgtCwIgotCi0jOiBnaXQtZ3VpLnNoOjI2ODAgZ2l0LWd1aS5zaDozMDI0IGdpdC1ndWkuc2g6MzEzMwotbXNnaWQgIlNpZ24gT2ZmIgotbXNnc3RyICLQktGB0YLQsNCy0LjRgtGMIFNpZ25lZC1vZmYtYnkiCi0KLSM6IGdpdC1ndWkuc2g6MjY5NgotbXNnaWQgIkxvY2FsIE1lcmdlLi4uIgotbXNnc3RyICLQm9C+0LrQsNC70YzQvdC+0LUg0YHQu9C40Y/QvdC40LXigKYiCi0KLSM6IGdpdC1ndWkuc2g6MjcwMQotbXNnaWQgIkFib3J0IE1lcmdlLi4uIgotbXNnc3RyICLQn9GA0LXRgNCy0LDRgtGMINGB0LvQuNGP0L3QuNC14oCmIgotCi0jOiBnaXQtZ3VpLnNoOjI3MTMgZ2l0LWd1aS5zaDoyNzQxCi1tc2dpZCAiQWRkLi4uIgotbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGM4oCmIgotCi0jOiBnaXQtZ3VpLnNoOjI3MTcKLW1zZ2lkICJQdXNoLi4uIgotbXNnc3RyICLQntGC0L/RgNCw0LLQuNGC0YzigKYiCi0KLSM6IGdpdC1ndWkuc2g6MjcyMQotbXNnaWQgIkRlbGV0ZSBCcmFuY2guLi4iCi1tc2dzdHIgItCj0LTQsNC70LjRgtGMINCy0LXRgtC60YPigKYiCi0KLSM6IGdpdC1ndWkuc2g6MjczMSBnaXQtZ3VpLnNoOjMyOTIKLW1zZ2lkICJPcHRpb25zLi4uIgotbXNnc3RyICLQndCw0YHRgtGA0L7QudC60LjigKYiCi0KLSM6IGdpdC1ndWkuc2g6Mjc0MgotbXNnaWQgIlJlbW92ZS4uLiIKLW1zZ3N0ciAi0KPQtNCw0LvQuNGC0YzigKYiCi0KLSM6IGdpdC1ndWkuc2g6Mjc1MSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwCi1tc2dpZCAiSGVscCIKLW1zZ3N0ciAi0J/QvtC80L7RidGMIgotCi0jOiBnaXQtZ3VpLnNoOjI3NTUgZ2l0LWd1aS5zaDoyNzU5IGxpYi9hYm91dC50Y2w6MTQKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFib3V0ICVzIgotbXNnc3RyICLQniAlcyIKLQotIzogZ2l0LWd1aS5zaDoyNzgzCi1tc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCi1tc2dzdHIgItCU0L7QutGD0LzQtdC90YLQsNGG0LjRjyDQsiDQuNC90YLQtdGA0L3QtdGC0LUiCi0KLSM6IGdpdC1ndWkuc2g6Mjc4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTYKLW1zZ2lkICJTaG93IFNTSCBLZXkiCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LrQu9GO0YcgU1NIIgotCi0jOiBnaXQtZ3VpLnNoOjI4OTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKLW1zZ3N0ciAi0LrRgNC40YLQuNGH0LXRgdC60LDRjyDQvtGI0LjQsdC60LA6ICVzOiDQvdC10YIg0YLQsNC60L7Qs9C+INGE0LDQudC70LAg0LjQu9C4INC60LDRgtCw0LvQvtCz0LAiCi0KLSM6IGdpdC1ndWkuc2g6MjkyNgotbXNnaWQgIkN1cnJlbnQgQnJhbmNoOiIKLW1zZ3N0ciAi0KLQtdC60YPRidCw0Y8g0LLQtdGC0LrQsDoiCi0KLSM6IGdpdC1ndWkuc2g6Mjk0NwotbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCi1tc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjyDQsiDQuNC90LTQtdC60YHQtSAo0LHRg9C00YPRgiDQt9Cw0LrQvtC80LzQuNGH0LXQvdGLKSIKLQotIzogZ2l0LWd1aS5zaDoyOTY3Ci1tc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKLW1zZ3N0ciAi0JjQt9C80LXQvdC10L3QviAo0L3QtSDQsdGD0LTQtdGCINGB0L7RhdGA0LDQvdC10L3QvikiCi0KLSM6IGdpdC1ndWkuc2g6MzAxNwotbXNnaWQgIlN0YWdlIENoYW5nZWQiCi1tc2dzdHIgItCY0L3QtNC10LrRgdC40YDQvtCy0LDRgtGMINCy0YHRkSIKLQotIzogZ2l0LWd1aS5zaDozMDM2IGxpYi90cmFuc3BvcnQudGNsOjEwNCBsaWIvdHJhbnNwb3J0LnRjbDoxOTMKLW1zZ2lkICJQdXNoIgotbXNnc3RyICLQntGC0L/RgNCw0LLQuNGC0YwiCi0KLSM6IGdpdC1ndWkuc2g6MzA3MQotbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICLQodC+0L7QsdGJ0LXQvdC40LUg0L/QtdGA0LLQvtCz0L4g0LrQvtC80LzQuNGC0LA6IgotCi0jOiBnaXQtZ3VpLnNoOjMwNzIKLW1zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAi0KHQvtC+0LHRidC10L3QuNC1INC40YHQv9GA0LDQstC70LXQvdC90L7Qs9C+INC60L7QvNC80LjRgtCwOiIKLQotIzogZ2l0LWd1aS5zaDozMDczCi1tc2dpZCAiQW1lbmRlZCBJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAi0KHQvtC+0LHRidC10L3QuNC1INC40YHQv9GA0LDQstC70LXQvdC90L7Qs9C+INC/0LXRgNCy0L7Qs9C+INC60L7QvNC80LjRgtCwOiIKLQotIzogZ2l0LWd1aS5zaDozMDc0Ci1tc2dpZCAiQW1lbmRlZCBNZXJnZSBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgItCh0L7QvtCx0YnQtdC90LjQtSDQuNGB0L/RgNCw0LLQu9C10L3QvdC+0LPQviDRgdC70LjRj9C90LjRjzoiCi0KLSM6IGdpdC1ndWkuc2g6MzA3NQotbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAi0KHQvtC+0LHRidC10L3QuNC1INGB0LvQuNGP0L3QuNGPOiIKLQotIzogZ2l0LWd1aS5zaDozMDc2Ci1tc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICLQodC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LA6IgotCi0jOiBnaXQtZ3VpLnNoOjMxMjUgZ2l0LWd1aS5zaDozMjY3IGxpYi9jb25zb2xlLnRjbDo3MwotbXNnaWQgIkNvcHkgQWxsIgotbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0YLRjCDQstGB0LUiCi0KLSM6IGdpdC1ndWkuc2g6MzE0OSBsaWIvYmxhbWUudGNsOjEwNAotbXNnaWQgIkZpbGU6IgotbXNnc3RyICLQpNCw0LnQuzoiCi0KLSM6IGdpdC1ndWkuc2g6MzI1NQotbXNnaWQgIlJlZnJlc2giCi1tc2dzdHIgItCe0LHQvdC+0LLQuNGC0YwiCi0KLSM6IGdpdC1ndWkuc2g6MzI3NgotbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKLW1zZ3N0ciAi0KPQvNC10L3RjNGI0LjRgtGMINGA0LDQt9C80LXRgCDRiNGA0LjRhNGC0LAiCi0KLSM6IGdpdC1ndWkuc2g6MzI4MAotbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKLW1zZ3N0ciAi0KPQstC10LvQuNGH0LjRgtGMINGA0LDQt9C80LXRgCDRiNGA0LjRhNGC0LAiCi0KLSM6IGdpdC1ndWkuc2g6MzI4OCBsaWIvYmxhbWUudGNsOjI4MQotbXNnaWQgIkVuY29kaW5nIgotbXNnc3RyICLQmtC+0LTQuNGA0L7QstC60LAiCi0KLSM6IGdpdC1ndWkuc2g6MzI5OQotbXNnaWQgIkFwcGx5L1JldmVyc2UgSHVuayIKLW1zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGML9Cj0LHRgNCw0YLRjCDQuNC30LzQtdC90LXQvdC40LUiCi0KLSM6IGdpdC1ndWkuc2g6MzMwNAotbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKLW1zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGML9Cj0LHRgNCw0YLRjCDRgdGC0YDQvtC60YMiCi0KLSM6IGdpdC1ndWkuc2g6MzMyMwotbXNnaWQgIlJ1biBNZXJnZSBUb29sIgotbXNnc3RyICLQl9Cw0L/Rg9GB0YLQuNGC0Ywg0L/RgNC+0LPRgNCw0LzQvNGDINGB0LvQuNGP0L3QuNGPIgotCi0jOiBnaXQtZ3VpLnNoOjMzMjgKLW1zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCi1tc2dzdHIgItCS0LfRj9GC0Ywg0LLQvdC10YjQvdGO0Y4g0LLQtdGA0YHQuNGOIgotCi0jOiBnaXQtZ3VpLnNoOjMzMzIKLW1zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKLW1zZ3N0ciAi0JLQt9GP0YLRjCDQu9C+0LrQsNC70YzQvdGD0Y4g0LLQtdGA0YHQuNGOIgotCi0jOiBnaXQtZ3VpLnNoOjMzMzYKLW1zZ2lkICJSZXZlcnQgVG8gQmFzZSIKLW1zZ3N0ciAi0J7QsdGA0LDRgtC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8iCi0KLSM6IGdpdC1ndWkuc2g6MzM1NAotbXNnaWQgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0Y3RgtC4INC40LfQvNC10L3QtdC90LjRjyDQv9C+0LTQvNC+0LTRg9C70Y8iCi0KLSM6IGdpdC1ndWkuc2g6MzM1OAotbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LjRgdGC0L7RgNC40Y4g0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQuCDQv9C+0LTQvNC+0LTRg9C70Y8iCi0KLSM6IGdpdC1ndWkuc2g6MzM2MgotbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQuNGB0YLQvtGA0LjRjiDQstGB0LXRhSDQstC10YLQvtC6INC/0L7QtNC80L7QtNGD0LvRjyIKLQotIzogZ2l0LWd1aS5zaDozMzY3Ci1tc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICLQl9Cw0L/Rg9GB0YLQuNGC0YwgZ2l0IGd1aSDQsiDQv9C+0LTQvNC+0LTRg9C70LUiCi0KLSM6IGdpdC1ndWkuc2g6MzM4OQotbXNnaWQgIlVuc3RhZ2UgSHVuayBGcm9tIENvbW1pdCIKLW1zZ3N0ciAi0KPQsdGA0LDRgtGMINCx0LvQvtC6INC40Lcg0LjQvdC00LXQutGB0LAiCi0KLSM6IGdpdC1ndWkuc2g6MzM5MQotbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCi1tc2dzdHIgItCj0LHRgNCw0YLRjCDRgdGC0YDQvtC60Lgg0LjQtyDQuNC90LTQtdC60YHQsCIKLQotIzogZ2l0LWd1aS5zaDozMzkzCi1tc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgotbXNnc3RyICLQo9Cx0YDQsNGC0Ywg0YHRgtGA0L7QutGDINC40Lcg0LjQvdC00LXQutGB0LAiCi0KLSM6IGdpdC1ndWkuc2g6MzM5NgotbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKLW1zZ3N0ciAi0JTQvtCx0LDQstC40YLRjCDQsdC70L7QuiDQsiDQuNC90LTQtdC60YEiCi0KLSM6IGdpdC1ndWkuc2g6MzM5OAotbXNnaWQgIlN0YWdlIExpbmVzIEZvciBDb21taXQiCi1tc2dzdHIgItCU0L7QsdCw0LLQuNGC0Ywg0YHRgtGA0L7QutC4INCyINC40L3QtNC10LrRgSIKLQotIzogZ2l0LWd1aS5zaDozNDAwCi1tc2dpZCAiU3RhZ2UgTGluZSBGb3IgQ29tbWl0IgotbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGMINGB0YLRgNC+0LrRgyDQsiDQuNC90LTQtdC60YEiCi0KLSM6IGdpdC1ndWkuc2g6MzQyNAotbXNnaWQgIkluaXRpYWxpemluZy4uLiIKLW1zZ3N0ciAi0JjQvdC40YbQuNCw0LvQuNC30LDRhtC40Y/igKYiCi0KLSM6IGdpdC1ndWkuc2g6MzU0MQotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9yZWJhc2UuYzozMgogbXNnaWQgIiIKLSJQb3NzaWJsZSBlbnZpcm9ubWVudCBpc3N1ZXMgZXhpc3QuXG4iCi0iXG4iCi0iVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHByb2JhYmx5XG4iCi0iZ29pbmcgdG8gYmUgaWdub3JlZCBieSBhbnkgR2l0IHN1YnByb2Nlc3MgcnVuXG4iCi0iYnkgJXM6XG4iCi0iXG4iCi1tc2dzdHIgItCS0L7Qt9C80L7QttC90Ysg0L7RiNC40LHQutC4INCyINC/0LXRgNC10LzQtdC90L3Ri9GFINC+0LrRgNGD0LbQtdC90LjRjy5cblxu0J/QtdGA0LXQvNC10L3QvdGL0LUg0L7QutGA0YPQttC10L3QuNGPLCDQutC+0YLQvtGA0YvQtSDQstC+0LfQvNC+0LbQvdC+XG7QsdGD0LTRg9GCINC/0YDQvtC40LPQvdC+0YDQuNGA0L7QstCw0L3RiyDQutC+0LzQsNC90LTQsNC80LggR2l0LFxu0LfQsNC/0YPRidC10L3QvdGL0LzQuCDQuNC3ICVzXG5cbiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XSBbPHVwc3RyZWFtPl0gIgorIls8YnJhbmNoPl0iCittc2dzdHIgIiIKIAotIzogZ2l0LWd1aS5zaDozNTcwCisjOiBidWlsdGluL3JlYmFzZS5jOjM0Cittc2dpZCAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dIC0tcm9vdCAiCisiWzxicmFuY2g+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2Cittc2dpZCAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU4IGJ1aWx0aW4vcmViYXNlLmM6MTgyIGJ1aWx0aW4vcmViYXNlLmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQuNCz0L7QtNC90YvQuSDQtNC70Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0YHQv9C40YHQvtC6INC00LXQuzogwqslc8K7IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NyBidWlsdGluL3JlYmFzZS5jOjE5MyBidWlsdGluL3JlYmFzZS5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyNTIKK21zZ2lkICJubyBIRUFEPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjI4NQorbXNnaWQgImNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzQzCittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIHRvZG8gbGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM4MgorbXNnaWQgImEgYmFzZSBjb21taXQgbXVzdCBiZSBwcm92aWRlZCB3aXRoIC0tdXBzdHJlYW0gb3IgLS1vbnRvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDM3Cittc2dpZCAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NDkKK21zZ2lkICJrZWVwIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgItC+0YHRgtCw0LLQuNGC0Ywg0L/Rg9GB0YLRi9C1INC60L7QvNC80LjRgtGLIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ1MSBidWlsdGluL3JldmVydC5jOjEyNworbXNnaWQgImFsbG93IGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINC60L7QvNC80LjRgtGLINGBINC/0YPRgdGC0YvQvNC4INGB0L7QvtCx0YnQtdC90LjRj9C80LgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDUyCittc2dpZCAicmViYXNlIG1lcmdlIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NTQKK21zZ2lkICJrZWVwIG9yaWdpbmFsIGJyYW5jaCBwb2ludHMgb2YgY291c2lucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ1NgorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NTcKK21zZ2lkICJzaWduIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NTkgYnVpbHRpbi9yZWJhc2UuYzoxMzk3Cittc2dpZCAiZGlzcGxheSBhIGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ2MQorbXNnaWQgImNvbnRpbnVlIHJlYmFzZSIKK21zZ3N0ciAi0L/RgNC+0LTQvtC70LbQuNGC0Ywg0L/QtdGA0LXQvNC10YnQtdC90LjQtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NjMKK21zZ2lkICJza2lwIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ2NAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ2NgorbXNnaWQgInNob3cgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NjkKK21zZ2lkICJzaG9ydGVuIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0LrQvtGA0L7RgtC60LjQtSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGLINC60L7QvNC80LjRgtC+0LIg0LIg0YHQv9C40YHQutC1INC00LXQudGB0YLQstC40LkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDcxCittc2dpZCAiZXhwYW5kIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0L/QvtC70L3Ri9C1INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0Ysg0LrQvtC80LzQuNGC0L7QsiDQsiDRgdC/0LjRgdC60LUg0LTQtdC50YHRgtCy0LjQuSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzMKK21zZ2lkICJjaGVjayB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICLQv9GA0L7QstC10YDQuNGC0Ywg0YHQv9C40YHQvtC6INC00LXQuyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzUKK21zZ2lkICJyZWFycmFuZ2UgZml4dXAvc3F1YXNoIGxpbmVzIgorbXNnc3RyICLQv9C10YDQtdGB0YLQsNCy0LjRgtGMINGB0YLRgNC+0LrQuCBmaXh1cC9zcXVhc2giCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc3Cittc2dpZCAiaW5zZXJ0IGV4ZWMgY29tbWFuZHMgaW4gdG9kbyBsaXN0IgorbXNnc3RyICLQstGB0YLQsNCy0LjRgtGMINC60L7QvNCw0L3QtNGLINC40YHQv9C+0LvQvdC10L3QuNGPINC60L7QvNC80LjRgtC+0LIg0LIg0YHQv9C40YHQutC1INC00LXQudGB0YLQstC40LkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc4Cittc2dpZCAib250byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4MQorbXNnaWQgInJlc3RyaWN0LXJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgxCittc2dpZCAicmVzdHJpY3QgcmV2aXNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODMKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NAorbXNnaWQgInNxdWFzaCBvbnRvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg2Cittc2dpZCAidGhlIHVwc3RyZWFtIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4OAorbXNnaWQgImhlYWQtbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4OAorbXNnaWQgImhlYWQgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MworbXNnaWQgInJlYmFzZSBzdHJhdGVneSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NAorbXNnaWQgInN0cmF0ZWd5LW9wdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTUKK21zZ2lkICJzdHJhdGVneSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk2Cittc2dpZCAic3dpdGNoLXRvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk3Cittc2dpZCAidGhlIGJyYW5jaCBvciBjb21taXQgdG8gY2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTgKK21zZ2lkICJvbnRvLW5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTgKK21zZ2lkICJvbnRvIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTkKK21zZ2lkICJjbWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTkKK21zZ2lkICJ0aGUgY29tbWFuZCB0byBydW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDIgYnVpbHRpbi9yZWJhc2UuYzoxNDgwCittc2dpZCAiYXV0b21hdGljYWxseSByZS1zY2hlZHVsZSBhbnkgYGV4ZWNgIHRoYXQgZmFpbHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTgKK21zZ2lkICItLVtuby1dcmViYXNlLWNvdXNpbnMgaGFzIG5vIGVmZmVjdCB3aXRob3V0IC0tcmViYXNlLW1lcmdlcyIKK21zZ3N0ciAiLS1bbm8tXXJlYmFzZS1jb3VzaW5zINC90LUg0LjQvNC10LXRgiDRgdC80YvRgdC70LAg0LHQtdC3INGD0LrQsNC30LDQvdC40Y8gLS1yZWJhc2UtbWVyZ2VzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUzNCBidWlsdGluL3JlYmFzZS5jOjE3ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgJ29udG8nOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3JpZy1oZWFkOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGludmFsaWQgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo4MTcKK21zZ2lkICJjb3VsZCBub3QgZGV0ZXJtaW5lIEhFQUQgcmV2aXNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo5NDAKK21zZ2lkICIiCisiUmVzb2x2ZSBhbGwgY29uZmxpY3RzIG1hbnVhbGx5LCBtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgd2l0aFxuIgorIlwiZ2l0IGFkZC9ybSA8Y29uZmxpY3RlZF9maWxlcz5cIiwgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJZb3UgY2FuIGluc3RlYWQgc2tpcCB0aGlzIGNvbW1pdDogcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIi5cbiIKKyJUbyBhYm9ydCBhbmQgZ2V0IGJhY2sgdG8gdGhlIHN0YXRlIGJlZm9yZSBcImdpdCByZWJhc2VcIiwgcnVuIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIuIgorbXNnc3RyICLQoNCw0LfRgNC10YjQuNGC0LUg0LLRgdC1INC60L7QvdGE0LvQuNC60YLRiyDQstGA0YPRh9C90YPRjiwg0L/QvtC80LXRgtGM0YLQtSDQuNGFINGA0LDQt9GA0LXRiNGR0L3QvdGL0LzQuCDRgSDQv9C+0LzQvtGJ0YzRjiDCq2dpdCBhZGQvcm0gPNC60L7QvdGE0LvQuNC60YLRg9GO0YnQuNC1LdGE0LDQudC70Ys+wrssINCwINC30LDRgtC10Lwg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IHJlYmFzZSAtLWNvbnRpbnVlwrsuXG7QldGB0LvQuCDQstGLINGF0L7RgtC40YLQtSDQv9GA0L7Qv9GD0YHRgtC40YLRjCDRjdGC0L7RgiDQutC+0LzQvNC40YIsINGC0L4g0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IHJlYmFzZSAtLXNraXDCuy5cbtCn0YLQvtCx0Ysg0LLQtdGA0L3Rg9GC0YzRgdGPINC90LAg0YHQvtGB0YLQvtGP0L3QuNC1INC00L4gwqtnaXQgcmViYXNlwrssINC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCByZWJhc2UgLS1hYm9ydMK7LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMDIxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKICJcbiIKLSJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCi0iVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgotbXNnc3RyICJcbtCt0YLQviDQuNC30LLQtdGB0YLQvdCw0Y8g0L/RgNC+0LHQu9C10LzQsCDRgSBUY2wsXG7RgNCw0YHQv9GA0L7RgdGC0YDQsNC90Y/QtdC80YvQvCBDeWd3aW4uIgorImdpdCBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSBwcmVwYXJpbmcgdGhlIHBhdGNoZXMgdG8gcmVwbGF5XG4iCisidGhlc2UgcmV2aXNpb25zOlxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIkFzIGEgcmVzdWx0LCBnaXQgY2Fubm90IHJlYmFzZSB0aGVtLiIKK21zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjM1NzUKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTMxMworIywgYy1mb3JtYXQKIG1zZ2lkICIiCisiJXNcbiIKKyJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuXG4iCisiU2VlIGdpdC1yZWJhc2UoMSkgZm9yIGRldGFpbHMuXG4iCiAiXG4iCisiICAgIGdpdCByZWJhc2UgJzxicmFuY2g+J1xuIgogIlxuIgotIkEgZ29vZCByZXBsYWNlbWVudCBmb3IgJXNcbiIKLSJpcyBwbGFjaW5nIHZhbHVlcyBmb3IgdGhlIHVzZXIubmFtZSBhbmRcbiIKLSJ1c2VyLmVtYWlsIHNldHRpbmdzIGludG8geW91ciBwZXJzb25hbFxuIgotIn4vLmdpdGNvbmZpZyBmaWxlLlxuIgotbXNnc3RyICJcblxu0JLQvNC10YHRgtC+INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPICVzINC80L7QttC90L5cbtGB0L7RhdGA0LDQvdC40YLRjCDQt9C90LDRh9C10L3QuNGPIHVzZXIubmFtZSDQuFxudXNlci5lbWFpbCDQsiDQktCw0YjQtdC8INC/0LXRgNGB0L7QvdCw0LvRjNC90L7QvFxu0YTQsNC50LvQtSB+Ly5naXRjb25maWcuXG4iCittc2dzdHIgIiIKIAotIzogbGliL2Fib3V0LnRjbDoyNgotbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKLW1zZ3N0ciAiZ2l0LWd1aSAtINCz0YDQsNGE0LjRh9C10YHQutC40Lkg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0YHQutC40Lkg0LjQvdGC0LXRgNGE0LXQudGBINC6IEdpdC4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6NzIKLW1zZ2lkICJGaWxlIFZpZXdlciIKLW1zZ3N0ciAi0J/RgNC+0YHQvNC+0YLRgCDRhNCw0LnQu9CwIgotCi0jOiBsaWIvYmxhbWUudGNsOjc4Ci1tc2dpZCAiQ29tbWl0OiIKLW1zZ3N0ciAi0JrQvtC80LzQuNGCOiIKLQotIzogbGliL2JsYW1lLnRjbDoyNzEKLW1zZ2lkICJDb3B5IENvbW1pdCIKLW1zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNGC0YwgU0hBLTEiCi0KLSM6IGxpYi9ibGFtZS50Y2w6Mjc1Ci1tc2dpZCAiRmluZCBUZXh0Li4uIgotbXNnc3RyICLQndCw0LnRgtC4INGC0LXQutGB0YLigKYiCi0KLSM6IGxpYi9ibGFtZS50Y2w6Mjg0Ci1tc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKLW1zZ3N0ciAi0J/RgNC+0LLQtdGB0YLQuCDQv9C+0LvQvdGL0Lkg0L/QvtC40YHQuiDQutC+0L/QuNC5IgotCi0jOiBsaWIvYmxhbWUudGNsOjI4OAotbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgotbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YDQuNGH0LXRgdC60LjQuSDQutC+0L3RgtC10LrRgdGCIgotCi0jOiBsaWIvYmxhbWUudGNsOjI5MQotbXNnaWQgIkJsYW1lIFBhcmVudCBDb21taXQiCi1tc2dzdHIgItCQ0LLRgtC+0YDRiyDRgNC+0LTQuNGC0LXQu9GM0YHQutC+0LPQviDQutC+0LzQvNC40YLQsCIKLQotIzogbGliL2JsYW1lLnRjbDo0NTAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZWFkaW5nICVzLi4uIgotbXNnc3RyICLQp9GC0LXQvdC40LUgJXPigKYiCi0KLSM6IGxpYi9ibGFtZS50Y2w6NTU3Ci1tc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCi1tc2dzdHIgItCX0LDQs9GA0YPQt9C60LAg0LDQvdC90L7RgtCw0YbQuNC4INC60L7Qv9C40YDQvtCy0LDQvdC40Lkv0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQueKApiIKLQotIzogbGliL2JsYW1lLnRjbDo1NzcKLW1zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCi1tc2dzdHIgItGB0YLRgNC+0Log0L/RgNC+0LrQvtC80LzQtdC90YLQuNGA0L7QstCw0L3QviIKLQotIzogbGliL2JsYW1lLnRjbDo3NjkKLW1zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgotbXNnc3RyICLQl9Cw0LPRgNGD0LfQutCwINCw0L3QvdC+0YLQsNGG0LjQuSDQv9C10YDQstC+0L3QsNGH0LDQu9GM0L3QvtCz0L4g0L/QvtC70L7QttC10L3QuNGPINC+0LHRitC10LrRgtCw4oCmIgotCi0jOiBsaWIvYmxhbWUudGNsOjc3MgotbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgotbXNnc3RyICLQkNC90L3QvtGC0LDRhtC40Y8g0LfQsNCy0LXRgNGI0LXQvdCwLiIKLQotIzogbGliL2JsYW1lLnRjbDo4MDIKLW1zZ2lkICJCdXN5IgotbXNnc3RyICLQl9Cw0L3Rj9GCIgotCi0jOiBsaWIvYmxhbWUudGNsOjgwMwotbXNnaWQgIkFubm90YXRpb24gcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcuIgotbXNnc3RyICLQkNC90L3QvtGC0LDRhtC40Y8g0YPQttC1INC30LDQv9GD0YnQtdC90LAiCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODQyCi1tc2dpZCAiUnVubmluZyB0aG9yb3VnaCBjb3B5IGRldGVjdGlvbi4uLiIKLW1zZ3N0ciAi0JLRi9C/0L7Qu9C90LXQvdC40LUg0L/QvtC70L3QvtCz0L4g0L/QvtC40YHQutCwINC60L7Qv9C40LnigKYiCi0KLSM6IGxpYi9ibGFtZS50Y2w6OTEwCi1tc2dpZCAiTG9hZGluZyBhbm5vdGF0aW9uLi4uIgotbXNnc3RyICLQl9Cw0LPRgNGD0LfQutCwINCw0L3QvdC+0YLQsNGG0LjQuOKApiIKLQotIzogbGliL2JsYW1lLnRjbDo5NjMKLW1zZ2lkICJBdXRob3I6IgotbXNnc3RyICLQkNCy0YLQvtGAOiIKLQotIzogbGliL2JsYW1lLnRjbDo5NjcKLW1zZ2lkICJDb21taXR0ZXI6IgotbXNnc3RyICLQmtC+0LzQvNC40YLQtdGAOiIKLQotIzogbGliL2JsYW1lLnRjbDo5NzIKLW1zZ2lkICJPcmlnaW5hbCBGaWxlOiIKLW1zZ3N0ciAi0JjRgdGF0L7QtNC90YvQuSDRhNCw0LnQuzoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTAyMAotbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INGC0LXQutGD0YnQtdC1INGB0L7RgdGC0L7Rj9C90LjQtToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTA3NQotbXNnaWQgIkNhbm5vdCBmaW5kIHBhcmVudCBjb21taXQ6IgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0YDQvtC00LjRgtC10LvRjNGB0LrQvtC1INGB0L7RgdGC0L7Rj9C90LjQtToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTA5MAotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQv9C+0LrQsNC30LDRgtGMINC/0YDQtdC00LrQsCIKLQotIzogbGliL2JsYW1lLnRjbDoxMDkxIGxpYi9kaWZmLnRjbDozMjAKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgotbXNnc3RyICLQntGI0LjQsdC60LAg0LfQsNCz0YDRg9C30LrQuCDQuNC30LzQtdC90LXQvdC40Lk6IgotCi0jOiBsaWIvYmxhbWUudGNsOjEyMzEKLW1zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKLW1zZ3N0ciAi0JjRgdGC0L7Rh9C90LjQujoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTIzNwotbXNnaWQgIkluIEZpbGU6IgotbXNnc3RyICLQpNCw0LnQuzoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTI0MgotbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKLW1zZ3N0ciAi0KHQutC+0L/QuNGA0L7QstCw0L3Qvi/Qv9C10YDQtdC80LXRidC10L3QviDQsjoiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE0IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE5Ci1tc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgotbXNnc3RyICLQn9C10YDQtdC50YLQuCDQvdCwINCy0LXRgtC60YMiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjIzCi1tc2dpZCAiQ2hlY2tvdXQiCi1tc2dzdHIgItCf0LXRgNC10LnRgtC4IgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzUKLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozMiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzAgbGliL2Jyb3dzZXIudGNsOjI4MgotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzkgbGliL2Nob29zZV9mb250LnRjbDo0MyBsaWIvbWVyZ2UudGNsOjE3MgotIzogbGliL29wdGlvbi50Y2w6MTI1IGxpYi9yZW1vdGVfYWRkLnRjbDozMiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQyCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo0MCBsaWIvdG9vbHNfZGxnLnRjbDoyMDQgbGliL3Rvb2xzX2RsZy50Y2w6MzUyCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDgKLW1zZ2lkICJDYW5jZWwiCi1tc2dzdHIgItCe0YLQvNC10L3QsCIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzIgbGliL2Jyb3dzZXIudGNsOjI4NyBsaWIvdG9vbHNfZGxnLnRjbDozMjgKLW1zZ2lkICJSZXZpc2lvbiIKLW1zZ3N0ciAi0JLQtdGA0YHQuNGPIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkgbGliL29wdGlvbi50Y2w6MjgwCi1tc2dpZCAiT3B0aW9ucyIKLW1zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4IgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTIKLW1zZ2lkICJGZXRjaCBUcmFja2luZyBCcmFuY2giCi1tc2dzdHIgItCY0LfQstC70LXRh9GMINC40LfQvNC10L3QtdC90LjRjyDQuNC3INCy0L3QtdGI0L3QtdC5INCy0LXRgtC60LgiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ0Ci1tc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgotbXNnc3RyICLQntGC0YHQvtC10LTQuNC90LjRgtGMINC+0YIg0LvQvtC60LDQu9GM0L3QvtC5INCy0LXRgtC60LgiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMgotbXNnaWQgIkNyZWF0ZSBCcmFuY2giCi1tc2dzdHIgItCh0L7Qt9C00LDRgtGMINCy0LXRgtC60YMiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyNwotbXNnaWQgIkNyZWF0ZSBOZXcgQnJhbmNoIgotbXNnc3RyICLQodC+0LfQtNCw0YLRjCDQvdC+0LLRg9GOINCy0LXRgtC60YMiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MQotbXNnaWQgIkNyZWF0ZSIKLW1zZ3N0ciAi0KHQvtC30LTQsNGC0YwiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MAotbXNnaWQgIkJyYW5jaCBOYW1lIgotbXNnc3RyICLQmNC80Y8g0LLQtdGC0LrQuCIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQzIGxpYi9yZW1vdGVfYWRkLnRjbDozOSBsaWIvdG9vbHNfZGxnLnRjbDo1MAotbXNnaWQgIk5hbWU6IgotbXNnc3RyICLQndCw0LfQstCw0L3QuNC1OiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjU4Ci1tc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoIE5hbWUiCi1tc2dzdHIgItCh0L7QvtGC0LLQtdGC0YHRgtCy0L7QstCw0YLRjCDQuNC80LXQvdC4INC+0YLRgdC70LXQttC40LLQsNC10LzQvtC5INCy0LXRgtC60LgiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2NgotbXNnaWQgIlN0YXJ0aW5nIFJldmlzaW9uIgotbXNnc3RyICLQndCw0YfQsNC70YzQvdCw0Y8g0LLQtdGA0YHQuNGPIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzIKLW1zZ2lkICJVcGRhdGUgRXhpc3RpbmcgQnJhbmNoOiIKLW1zZ3N0ciAi0J7QsdC90L7QstC40YLRjCDQuNC80LXRjtGJ0YPRjtGB0Y8g0LLQtdGC0LrRgzoiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQotbXNnaWQgIk5vIgotbXNnc3RyICLQndC10YIiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAotbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgotbXNnc3RyICLQotC+0LvRjNC60L4gRmFzdCBGb3J3YXJkIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1NzEKLW1zZ2lkICJSZXNldCIKLW1zZ3N0ciAi0KHQsdGA0L7RgSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Ci1tc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCi1tc2dzdHIgItCf0L7RgdC70LUg0YHQvtC30LTQsNC90LjRjyDRgdC00LXQu9Cw0YLRjCDRgtC10LrRg9GJ0LXQuSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMQotbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgotbXNnc3RyICLQo9C60LDQttC40YLQtSDQvtGC0LvQtdC20LjQstCw0LXQvNGD0Y4g0LLQtdGC0LrRgy4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCi1tc2dzdHIgItCe0YLRgdC70LXQttC40LLQsNC10LzQsNGPINCy0LXRgtC60LAgJXMg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINCy0LXRgtC60L7QuSDQvdCwINCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LguIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTUzIGxpYi9icmFuY2hfcmVuYW1lLnRjbDo4NgotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBicmFuY2ggbmFtZS4iCi1tc2dzdHIgItCj0LrQsNC20LjRgtC1INC40LzRjyDQstC10YLQutC4LiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTA2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCi1tc2dzdHIgItCd0LXQtNC+0L/Rg9GB0YLQuNC80L7QtSDQuNC80Y8g0LLQtdGC0LrQuCDCqyVzwrsuIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTUKLW1zZ2lkICJEZWxldGUgQnJhbmNoIgotbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INCy0LXRgtC60LgiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMAotbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCi1tc2dzdHIgItCj0LTQsNC70LjRgtGMINC70L7QutCw0LvRjNC90YPRjiDQstC10YLQutGDIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzcKLW1zZ2lkICJMb2NhbCBCcmFuY2hlcyIKLW1zZ3N0ciAi0JvQvtC60LDQu9GM0L3Ri9C1INCy0LXRgtC60LgiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MgotbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgotbXNnc3RyICLQo9C00LDQu9C40YLRjCDRgtC+0LvRjNC60L4g0LIg0YHQu9GD0YfQsNC1LCDQtdGB0LvQuCDQsdGL0LvQviDRgdC70LjRj9C90LjQtSDRgSIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Ci1tc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgotbXNnc3RyICLQktGB0LXQs9C00LAgKNC90LUg0LLRi9C/0L7Qu9C90Y/RgtGMINC/0YDQvtCy0LXRgNC60YMg0L3QsCDRgdC70LjRj9C90LjQtSkiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCi1tc2dzdHIgItCS0LXRgtC60LgsINC60L7RgtC+0YDRi9C1INC90LUg0L/QvtC70L3QvtGB0YLRjNGOINGB0LvQuNCy0LDRjtGC0YHRjyDRgSAlczoiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTMyOQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDpcbiIKICJcbiIKLSJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKLW1zZ3N0ciAi0JLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINGD0LTQsNC70LXQvdC90YvQtSDQstC10YLQutC4INGB0LvQvtC20L3Qvi5cblxu0J/RgNC+0LTQvtC70LbQuNGC0Yw/IgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCittc2dzdHIgIiIKIAotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE0MQotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9yZWJhc2UuYzoxMzU5Cittc2dpZCAiZXhlYyBjb21tYW5kcyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzNjMKK21zZ2lkICJlbXB0eSBleGVjIGNvbW1hbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMzkwCittc2dpZCAicmViYXNlIG9udG8gZ2l2ZW4gYnJhbmNoIGluc3RlYWQgb2YgdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMzkyCittc2dpZCAiYWxsb3cgcHJlLXJlYmFzZSBob29rIHRvIHJ1biIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzOTQKK21zZ2lkICJiZSBxdWlldC4gaW1wbGllcyAtLW5vLXN0YXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDAwCittc2dpZCAiZG8gbm90IHNob3cgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQwMworbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnk6IGxpbmUgdG8gZWFjaCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDA1IGJ1aWx0aW4vcmViYXNlLmM6MTQwOSBidWlsdGluL3JlYmFzZS5jOjE0MTEKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBhbSciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDEzIGJ1aWx0aW4vcmViYXNlLmM6MTQxNQorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFwcGx5JyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTcgYnVpbHRpbi9yZWJhc2UuYzoxNDIwCittc2dpZCAiY2hlcnJ5LXBpY2sgYWxsIGNvbW1pdHMsIGV2ZW4gaWYgdW5jaGFuZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQyMgorbXNnaWQgImNvbnRpbnVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQyNQorbXNnaWQgInNraXAgY3VycmVudCBwYXRjaCBhbmQgY29udGludWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDI3Cittc2dpZCAiYWJvcnQgYW5kIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQzMAorbXNnaWQgImFib3J0IGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDMxCittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IGR1cmluZyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDM0Cittc2dpZCAic2hvdyB0aGUgcGF0Y2ggZmlsZSBiZWluZyBhcHBsaWVkIG9yIG1lcmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MzcKK21zZ2lkICJ1c2UgbWVyZ2luZyBzdHJhdGVnaWVzIHRvIHJlYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDEKK21zZ2lkICJsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbGlzdCBvZiBjb21taXRzIHRvIHJlYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDUKK21zZ2lkICIoREVQUkVDQVRFRCkgdHJ5IHRvIHJlY3JlYXRlIG1lcmdlcyBpbnN0ZWFkIG9mIGlnbm9yaW5nIHRoZW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ5Cittc2dpZCAicHJlc2VydmUgZW1wdHkgY29tbWl0cyBkdXJpbmcgcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MQorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEgdW5kZXIgLWkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDU3Cittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NTkKK21zZ2lkICJhZGQgZXhlYyBsaW5lcyBhZnRlciBlYWNoIGNvbW1pdCBvZiB0aGUgZWRpdGFibGUgbGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjMKK21zZ2lkICJhbGxvdyByZWJhc2luZyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDY2Cittc2dpZCAidHJ5IHRvIHJlYmFzZSBtZXJnZXMgaW5zdGVhZCBvZiBza2lwcGluZyB0aGVtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2OQorbXNnaWQgInVzZSAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIHRvIHJlZmluZSB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzEKK21zZ2lkICJ1c2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3MyBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAi0L7Qv9GG0LjRjyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDc0Cittc2dpZCAicGFzcyB0aGUgYXJndW1lbnQgdGhyb3VnaCB0byB0aGUgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDc3Cittc2dpZCAicmViYXNlIGFsbCByZWFjaGFibGUgY29tbWl0cyB1cCB0byB0aGUgcm9vdChzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTgKIG1zZ2lkICIiCi0iRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKLSIlcyIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCDQstC10YLQutC4OlxuJXMiCisidGhlIHJlYmFzZS51c2VCdWlsdGluIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCFcbiIKKyJTZWUgaXRzIGVudHJ5IGluICdnaXQgaGVscCBjb25maWcnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjIyCi1tc2dpZCAiUmVuYW1lIEJyYW5jaCIKLW1zZ3N0ciAi0J/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSDQstC10YLQutC4IgorIzogYnVpbHRpbi9yZWJhc2UuYzoxNTA0Cittc2dpZCAiSXQgbG9va3MgbGlrZSAnZ2l0IGFtJyBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgItCf0L7RhdC+0LbQtSwg0YfRgtC+INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8gwqtnaXQgYW3Cuy4g0J3QtdCy0L7Qt9C80L7QttC90L4g0LLRi9C/0L7Qu9C90LjRgtGMINC/0LXRgNC10LzQtdGJ0LXQvdC40LUuIgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjYKLW1zZ2lkICJSZW5hbWUiCi1tc2dzdHIgItCf0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzYKLW1zZ2lkICJCcmFuY2g6IgotbXNnc3RyICLQktC10YLQutCwOiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM5Ci1tc2dpZCAiTmV3IE5hbWU6IgotbXNnc3RyICLQndC+0LLQvtC1INC90LDQt9Cy0LDQvdC40LU6IgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NzUKLW1zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCi1tc2dzdHIgItCj0LrQsNC20LjRgtC1INCy0LXRgtC60YMg0LTQu9GPINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40Y8uIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgItCS0LXRgtC60LAgwqslc8K7INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMIMKrJXPCuy4gIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTcKLW1zZ2lkICJTdGFydGluZy4uLiIKLW1zZ3N0ciAi0JfQsNC/0YPRgdC64oCmIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MjYKLW1zZ2lkICJGaWxlIEJyb3dzZXIiCi1tc2dzdHIgItCf0YDQvtGB0LzQvtGC0YAg0YHQv9C40YHQutCwINGE0LDQudC70L7QsiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjEyNiBsaWIvYnJvd3Nlci50Y2w6MTQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyAlcy4uLiIKLW1zZ3N0ciAi0JfQsNCz0YDRg9C30LrQsCAlc+KApiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjE4NwotbXNnaWQgIltVcCBUbyBQYXJlbnRdIgotbXNnc3RyICJb0J3QsCDRg9GA0L7QstC10L3RjCDQstGL0YjQtV0iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNjcgbGliL2Jyb3dzZXIudGNsOjI3MwotbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0YTQsNC50LvRiyDQstC10YLQutC4IgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk4Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI4Ci1tc2dpZCAiQnJvd3NlIgotbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKLW1zZ3N0ciAi0JjQt9Cy0LvQtdGH0LXQvdC40LUgJXMg0LjQtyAlcyAiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgotbXNnc3RyICLQutGA0LjRgtC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsDog0L3QtdCy0L7Qt9C80L7QttC90L4g0YDQsNC30YDQtdGI0LjRgtGMICVzIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQotIzogbGliL3NzaGtleS50Y2w6NTMKLW1zZ2lkICJDbG9zZSIKLW1zZ3N0ciAi0JfQsNC60YDRi9GC0YwiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgotbXNnc3RyICLQktC10YLQutCwIMKrJXPCuyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgotbXNnc3RyICLQntGI0LjQsdC60LAg0YHQvtC30LTQsNC90LjRjyDRg9C/0YDQvtGJ0ZHQvdC90L7QuSDQutC+0L3RhNC40LPRg9GA0LDRhtC40LggZ2l0IHB1bGwg0LTQu9GPIMKrJXPCuy4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3JlYmFzZS5jOjE1NDUKIG1zZ2lkICIiCi0iQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCi0iXG4iCi0iSXQgY2Fubm90IGZhc3QtZm9yd2FyZCB0byAlcy5cbiIKLSJBIG1lcmdlIGlzIHJlcXVpcmVkLiIKLW1zZ3N0ciAi0JLQtdGC0LrQsCDCqyVzwrsg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLlxuXG7QntC90LAg0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINC/0LXRgNC10LzQvtGC0LDQvdCwINCy0L/QtdGA0LXQtCDQuiAlcy5cbtCi0YDQtdCx0YPQtdGC0YHRjyDRgdC70LjRj9C90LjQtS4iCisiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyBpcyBkZXByZWNhdGVkLiBVc2UgLS1yZWJhc2UtbWVyZ2VzIGluc3RlYWQuIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAi0J3QtdC40LfQstC10YHRgtC90LDRjyDRgdGC0YDQsNGC0LXQs9C40Y8g0YHQu9C40Y/QvdC40Y8gwqslc8K7LiIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU0OQorbXNnaWQgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCittc2dzdHIgItCd0LXRgiDQv9C10YDQtdC80LXRidC10L3QuNGPINCyINC/0YDQvtGG0LXRgdGB0LU/IgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDCqyVzwrsuIgorIzogYnVpbHRpbi9yZWJhc2UuYzoxNTUzCittc2dpZCAiVGhlIC0tZWRpdC10b2RvIGFjdGlvbiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnRlcmFjdGl2ZSByZWJhc2UuIgorbXNnc3RyICLQlNC10LnRgdGC0LLQuNC1IC0tZWRpdC10b2RvINC80L7QttC10YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjyDRgtC+0LvRjNC60L4g0L/RgNC4INC40L3RgtC10YDQsNC60YLQuNCy0L3QvtC8INC/0LXRgNC10LzQtdGJ0LXQvdC40LguIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3NAotbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKLW1zZ3N0ciAi0KDQsNCx0L7Rh9Cw0Y8g0L7QsdC70LDRgdGC0Ywg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNC90LAg0LTRgNGD0LPQuNC8INC/0YDQvtGG0LXRgdGB0L7QvC4iCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzYKK21zZ2lkICJDYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCBIRUFEIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI4OQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNTg4CiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSByZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKLW1zZ3N0ciAi0J/QvtGB0LvQtdC00L3QtdC1INC/0YDQvtGH0LjRgtCw0L3QvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0L3QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDRgtC10LrRg9GJ0LXQvNGDLlxuXG7QoSDQvNC+0LzQtdC90YLQsCDQv9C+0YHQu9C10LTQvdC10Lkg0L/RgNC+0LLQtdGA0LrQuCDRgNC10L/QvtC30LjRgtC+0YDQuNC5INCx0YvQuyDQuNC30LzQtdC90LXQvSDQtNGA0YPQs9C+0Lkg0L/RgNC+0LPRgNCw0LzQvNC+0LkgR2l0LiDQndC10L7QsdGF0L7QtNC40LzQviDQv9C10YDQtdGH0LjRgtCw0YLRjCDRgNC10L/QvtC30LjRgtC+0YDQuNC5LCDQv9GA0LXQttC00LUg0YfQtdC8INGC0LXQutGD0YnQsNGPINCy0LXRgtC60LAg0LzQvtC20LXRgiDQsdGL0YLRjCDQuNC30LzQtdC90LXQvdCwLlxuXG7QrdGC0L4g0LHRg9C00LXRgiDRgdC00LXQu9Cw0L3QviDRgdC10LnRh9Cw0YEg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LguXG4iCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgItCS0Ysg0LTQvtC70LbQvdGLINC+0YLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDQstGB0LVcbtC60L7QvdGE0LvQuNC60YLRiyDRgdC70LjRj9C90LjRjywg0LAg0L/QvtGC0L7QvCDQv9C+0LzQtdGC0LjRgtGMXG7QuNGFINC60LDQuiDRgNCw0LfRgNC10YjQtdC90L3Ri9C1INGBINC/0L7QvNC+0YnRjNGOIGdpdCBhZGQiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKLW1zZ3N0ciAi0J7QsdC90L7QstC70LXQvdC40LUg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwINC40Lcgwqslc8K74oCmIgorIzogYnVpbHRpbi9yZWJhc2UuYzoxNjA3Cittc2dpZCAiY291bGQgbm90IGRpc2NhcmQgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgotbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgotbXNnc3RyICLRhNCw0LnQu9GLINC40LfQstC70LXRh9C10L3RiyIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbW92ZSBiYWNrIHRvICVzIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKLW1zZ3N0ciAi0J/RgNC10YDQstCw0L0g0L/QtdGA0LXRhdC+0LQg0L3QsCDCqyVzwrsgKNGC0YDQtdCx0YPQtdGC0YHRjyDRgdC70LjRj9C90LjQtSDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INGE0LDQudC70L7QsikiCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MzcgYnVpbHRpbi9ybS5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywgwqslc8K7IgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NwotbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgotbXNnc3RyICLQotGA0LXQsdGD0LXRgtGB0Y8g0YHQu9C40Y/QvdC40LUg0YHQvtC00LXRgNC20LDQvdC40Y8g0YTQsNC50LvQvtCyLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDozODEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKLW1zZ3N0ciAi0JLQtdGC0LrQsCDCqyVzwrsg0L7RgdGC0LDRkdGC0YHRjyDRgtC10LrRg9GJ0LXQuS4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDUyCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NjMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIllvdSBhcmUgbm8gbG9uZ2VyIG9uIGEgbG9jYWwgYnJhbmNoLlxuIgotIlxuIgotIklmIHlvdSB3YW50ZWQgdG8gYmUgb24gYSBicmFuY2gsIGNyZWF0ZSBvbmUgbm93IHN0YXJ0aW5nIGZyb20gJ1RoaXMgRGV0YWNoZWQgQ2hlY2tvdXQnLiIKLW1zZ3N0ciAi0JLRiyDQsdC+0LvQtdC1INC90LUg0L3QsNGF0L7QtNC40YLQtdGB0Ywg0L3QsCDQu9C+0LrQsNC70YzQvdC+0Lkg0LLQtdGC0LrQtS5cblxu0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0YHQvdC+0LLQsCDQstC10YDQvdGD0YLRjNGB0Y8g0Log0LrQsNC60L7QuS3QvdC40LHRg9C00Ywg0LLQtdGC0LrQtSwg0YHQvtC30LTQsNC50YLQtSDQtdGRINGB0LXQudGH0LDRgSwg0L3QsNGH0LjQvdCw0Y8g0YEgwqvQotC10LrRg9GJ0LXQs9C+INC+0YLRgdC+0LXQtNC40L3QtdC90L3QvtCz0L4g0YHQvtGB0YLQvtGP0L3QuNGPwrsuIgorIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICVzIGRpcmVjdG9yeSwgYW5kXG4iCisiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyJjYXNlLCBwbGVhc2UgdHJ5XG4iCisiXHQlc1xuIgorIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyJcdCVzXG4iCisiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyJ2YWx1YWJsZSB0aGVyZS5cbiIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMyBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgotbXNnc3RyICLQktGL0L/QvtC70L3QtdC9INC/0LXRgNC10YXQvtC0INC90LAgwqslc8K7LiIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY4NAorbXNnaWQgInN3aXRjaCBgQycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0dGluZyAnJXMnIHRvICclcycgd2lsbCBsb3NlIHRoZSBmb2xsb3dpbmcgY29tbWl0czoiCi1tc2dzdHIgItCh0LHRgNC+0YEgwqslc8K7ICDQvdCwIMKrJXPCuyDQv9GA0LjQstC10LTQtdGCINC6INC/0L7RgtC10YDQtSDRgdC70LXQtNGD0Y7RidC40YUg0LrQvtC80LzQuNGC0L7QsjoiCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBtb2RlOiAlcyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU1NwotbXNnaWQgIlJlY292ZXJpbmcgbG9zdCBjb21taXRzIG1heSBub3QgYmUgZWFzeS4iCi1tc2dzdHIgItCS0L7RgdGB0YLQsNC90L7QstC40YLRjCDQv9C+0YLQtdGA0Y/QvdC90YvQtSDQutC+0LzQvNC40YLRiyDQsdGD0LTQtdGCINGB0LvQvtC20L3Qvi4iCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NDcKK21zZ2lkICItLXN0cmF0ZWd5IHJlcXVpcmVzIC0tbWVyZ2Ugb3IgLS1pbnRlcmFjdGl2ZSIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0ICclcyc/IgotbXNnc3RyICLQodCx0YDQvtGB0LjRgtGMIMKrJXPCuz8iCisjOiBidWlsdGluL3JlYmFzZS5jOjE3OTYKK21zZ2lkICJjYW5ub3QgY29tYmluZSBhbSBvcHRpb25zIHdpdGggZWl0aGVyIGludGVyYWN0aXZlIG9yIG1lcmdlIG9wdGlvbnMiCittc2dzdHIgIiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjcgbGliL21lcmdlLnRjbDoxNjQgbGliL3Rvb2xzX2RsZy50Y2w6MzQzCi1tc2dpZCAiVmlzdWFsaXplIgotbXNnc3RyICLQndCw0LPQu9GP0LTQvdC+IgorIzogYnVpbHRpbi9yZWJhc2UuYzoxODE1Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3JlYmFzZS5jOjE4MTkKIG1zZ2lkICIiCi0iRmFpbGVkIHRvIHNldCBjdXJyZW50IGJyYW5jaC5cbiIKLSJcbiIKLSJUaGlzIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG9ubHkgcGFydGlhbGx5IHN3aXRjaGVkLiAgV2Ugc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgeW91ciBmaWxlcywgYnV0IGZhaWxlZCB0byB1cGRhdGUgYW4gaW50ZXJuYWwgR2l0IGZpbGUuXG4iCi0iXG4iCi0iVGhpcyBzaG91bGQgbm90IGhhdmUgb2NjdXJyZWQuICAlcyB3aWxsIG5vdyBjbG9zZSBhbmQgZ2l2ZSB1cC4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgy5cblxu0JLQsNGIINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzINC+0LHQvdC+0LLQu9GR0L0g0YLQvtC70YzQutC+INGH0LDRgdGC0LjRh9C90L4uINCR0YvQu9C4INC+0LHQvdC+0LLQu9C10L3RiyDQstGB0LUg0YTQsNC50LvRiyDQutGA0L7QvNC1INGB0LvRg9C20LXQsdC90YvRhSDRhNCw0LnQu9C+0LIgR2l0LiBcblxu0K3RgtC+0LPQviDQvdC1INC00L7Qu9C20L3QviDQsdGL0LvQviDQv9GA0L7QuNC30L7QudGC0LguICVzINC30LDQstC10YDRiNCw0LXRgtGB0Y8uIgorImVycm9yOiBjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyciCittc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDozOQotbXNnaWQgIlNlbGVjdCIKLW1zZ3N0ciAi0JLRi9Cx0YDQsNGC0YwiCisjOiBidWlsdGluL3JlYmFzZS5jOjE4MjUKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1yZWJhc2UtbWVyZ2VzJyB3aXRoICctLXN0cmF0ZWd5LW9wdGlvbiciCittc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo1MwotbXNnaWQgIkZvbnQgRmFtaWx5IgotbXNnc3RyICLQqNGA0LjRhNGCIgorIzogYnVpbHRpbi9yZWJhc2UuYzoxODI4Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcmViYXNlLW1lcmdlcycgd2l0aCAnLS1zdHJhdGVneSciCittc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo3NAotbXNnaWQgIkZvbnQgU2l6ZSIKLW1zZ3N0ciAi0KDQsNC30LzQtdGAINGI0YDQuNGE0YLQsCIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICclcyciCittc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo5MQotbXNnaWQgIkZvbnQgRXhhbXBsZSIKLW1zZ3N0ciAi0J/RgNC40LzQtdGAINGC0LXQutGB0YLQsCIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg1OAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgbmV3IHJvb3QgY29tbWl0IgorbXNnc3RyICIiCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTAzCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg4MworIywgYy1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2gvY29tbWl0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTE2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozOAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZWY6ICVzIgorbXNnc3RyICLQndC10YIg0YLQsNC60L7QuSDRgdGB0YvQu9C60Lg6ICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MjcKK21zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHRvIGEgcmV2aXNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTY4Cittc2dpZCAiQ2Fubm90IGF1dG9zdGFzaCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDRgdC/0YDRj9GC0LDRgtGMINC40LfQvNC10L3QtdC90LjRjyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgc3Rhc2ggcmVzcG9uc2U6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODMKK21zZ2lkICJjb3VsZCBub3QgcmVzZXQgLS1oYXJkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk4NCBidWlsdGluL3Jlc2V0LmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJIRUFEINGB0LXQudGH0LDRgSDQvdCwICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMDAKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICLQodC00LXQu9Cw0LnRgtC1INC60L7QvNC80LjRgiDQuNC70Lgg0YHQv9GA0Y/Rh9GM0YLQtSDQuNGFLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3dpdGNoIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1MQorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkhFQUQg0YPQttC1INCyINCw0LrRgtGD0LDQu9GM0L3QvtC8INGB0L7RgdGC0L7Rj9C90LjQuC4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1MworIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAlcyBpcyB1cCB0byBkYXRlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA2MQorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCittc2dzdHIgIkhFQUQg0YPQttC1INCyINCw0LrRgtGD0LDQu9GM0L3QvtC8INGB0L7RgdGC0L7Rj9C90LjQuCwg0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L7QtSDQv9C10YDQtdC80LXRidC10L3QuNC1LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDcxCittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgItCf0LXRgNC10YXQstCw0YLRh9C40LogcHJlLXJlYmFzZSDQvtGC0LrQsNC30LDQuyDQsiDQv9C10YDQtdC80LXRidC10L3QuNC4LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgdG8gJXM6XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAlcyB0byAlczpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTE1Cittc2dpZCAiQ291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAlcyB0byAlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjMzCittc2dpZCAiZ2l0IHJlY2VpdmUtcGFjayA8Z2l0LWRpcj4iCittc2dzdHIgImdpdCByZWNlaXZlLXBhY2sgPNC60LDRgtCw0LvQvtCzLWdpdD4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODMzCiBtc2dpZCAiIgotIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgotIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCi1tc2dzdHIgItCt0YLQviDQv9GA0LjQvNC10YAg0YLQtdC60YHRgtCwLlxu0JXRgdC70Lgg0JLQsNC8INC90YDQsNCy0LjRgtGB0Y8g0Y3RgtC+0YIg0YLQtdC60YHRgiwg0Y3RgtC+INC80L7QttC10YIg0LHRi9GC0Ywg0JLQsNGIINGI0YDQuNGE0YIuIgorIkJ5IGRlZmF1bHQsIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnlcbiIKKyJpcyBkZW5pZWQsIGJlY2F1c2UgaXQgd2lsbCBtYWtlIHRoZSBpbmRleCBhbmQgd29yayB0cmVlIGluY29uc2lzdGVudFxuIgorIndpdGggd2hhdCB5b3UgcHVzaGVkLCBhbmQgd2lsbCByZXF1aXJlICdnaXQgcmVzZXQgLS1oYXJkJyB0byBtYXRjaFxuIgorInRoZSB3b3JrIHRyZWUgdG8gSEVBRC5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCB0aGUgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVcbiIKKyJ0byAnaWdub3JlJyBvciAnd2FybicgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IHB1c2hpbmcgaW50b1xuIgorIml0cyBjdXJyZW50IGJyYW5jaDsgaG93ZXZlciwgdGhpcyBpcyBub3QgcmVjb21tZW5kZWQgdW5sZXNzIHlvdVxuIgorImFycmFuZ2VkIHRvIHVwZGF0ZSBpdHMgd29yayB0cmVlIHRvIG1hdGNoIHdoYXQgeW91IHB1c2hlZCBpbiBzb21lXG4iCisib3RoZXIgd2F5LlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2aW91ciwgc2V0XG4iCisiJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gJ3JlZnVzZScuIgorbXNnc3RyICLQn9C+INGD0LzQvtC70YfQsNC90LjRjiwg0L7QsdC90L7QstC70Y/RgtGMINGC0LXQutGD0YnRg9GOINCy0LXRgtC60YMg0LIg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCDRgSDRgNCw0LHQvtGH0LXQuVxu0LrQvtC/0LjQtdC5ICjQvdC1INCz0L7Qu9C+0LwpINC30LDQv9GA0LXRidC10L3Qviwg0YLQsNC6INC60LDQuiDRjdGC0L4g0YHQtNC10LvQsNC10YIg0YHQvtGB0YLQvtGP0L3QuNC1INC40L3QtNC10LrRgdCwXG7QuCDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAg0L/RgNC+0YLQuNCy0L7RgNC10YfQuNCy0YvQvCwg0Lgg0LLQsNC8INC/0YDQuNC50LTQtdGC0YHRjyDQstGL0L/QvtC70L3QuNGC0YxcbsKrZ2l0IHJlc2V0IC0taGFyZMK7LCDRh9GC0L7QsdGLINGB0L7RgdGC0L7Rj9C90LjQtSDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAg0YHQvdC+0LLQsFxu0YHQvtC+0YLQstC10YLRgdGC0LLQvtCy0LDQu9C+IEhFQUQuXG5cbtCS0Ysg0LzQvtC20LXRgtC1INGD0YHRgtCw0L3QvtCy0LjRgtGMINC30L3QsNGH0LXQvdC40LUg0L7Qv9GG0LjQuCDCq3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2jCu1xu0LIgwqtpZ25vcmXCuyDQuNC70Lggwqt3YXJuwrsg0LLQviDQstC90LXRiNC90LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4LCDRh9GC0L7QsdGLINGA0LDQt9GA0LXRiNC40YLRjFxu0L7RgtC/0YDQsNCy0LrRgyDQsiDQtdCz0L4g0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgzsg0L3QviDRjdGC0L4g0L3QtSDRgNC10LrQvtC80LXQvdC00YPQtdGC0YHRjywg0LXRgdC70Lgg0YLQvtC70YzQutC+XG7QstGLINC90LUg0L3QsNC80LXRgNC10L3RiyDQvtCx0L3QvtCy0LjRgtGMINC10LPQviDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDRgdC/0L7RgdC+0LHQvtC8INC/0L7QtNC+0LHQvdGL0LxcbtCy0YvRiNC10L7Qv9C40YHQsNC90L3QvtC80YMuXG5cbtCn0YLQvtCx0Ysg0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0Y3RgtC+INGB0L7QvtCx0YnQtdC90LjQtSDQuCDQstGB0LUg0YDQsNCy0L3QviDQvtGB0YLQsNCy0LjRgtGMINC/0L7QstC10LTQtdC90LjQtVxu0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4sINGD0YHRgtCw0L3QvtCy0LjRgtC1INC30L3QsNGH0LXQvdC40LUg0L7Qv9GG0LjQuCDCq3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2jCu1xu0LIgwqtyZWZ1c2XCuy4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjgKLW1zZ2lkICJHaXQgR3VpIgotbXNnc3RyICJHaXQgR3VpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg2Ci1tc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgotbXNnc3RyICLQodC+0LfQtNCw0YLRjCDQvdC+0LLRi9C5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMKLW1zZ2lkICJOZXcuLi4iCi1tc2dzdHIgItCd0L7QstGL0LnigKYiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcxCi1tc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAi0KHQutC70L7QvdC40YDQvtCy0LDRgtGMINGB0YPRidC10YHRgtCy0YPRjtGJ0LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNgotbXNnaWQgIkNsb25lLi4uIgotbXNnc3RyICLQmtC70L7QvdC40YDQvtCy0LDRgtGM4oCmIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTYKLW1zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgItCS0YvQsdGA0LDRgtGMINGB0YPRidC10YHRgtCy0YPRjtGJ0LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExOQotbXNnaWQgIk9wZW4uLi4iCi1tc2dzdHIgItCe0YLQutGA0YvRgtGM4oCmIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzMgotbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCi1tc2dzdHIgItCd0LXQtNCw0LLQvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzgKLW1zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKLW1zZ3N0ciAi0J7RgtC60YDRi9GC0Ywg0L/QvtGB0LvQtdC00L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzA2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzEzCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSAlczoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzkxCi1tc2dpZCAiRGlyZWN0b3J5OiIKLW1zZ3N0ciAi0JrQsNGC0LDQu9C+0LM6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQyMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1MAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDUyCi1tc2dpZCAiR2l0IFJlcG9zaXRvcnkiCi1tc2dzdHIgItCg0LXQv9C+0LfQuNGC0L7RgNC40LkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQ4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAi0JrQsNGC0LDQu9C+0LMgJyVzJyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ1MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZpbGUgJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICLQpNCw0LnQuyAnJXMnINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDY2Ci1tc2dpZCAiQ2xvbmUiCi1tc2dzdHIgItCh0LrQu9C+0L3QuNGA0L7QstCw0YLRjCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzkKLW1zZ2lkICJTb3VyY2UgTG9jYXRpb246IgotbXNnc3RyICLQmNGB0YXQvtC00L3QvtC1INC/0L7Qu9C+0LbQtdC90LjQtToiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkwCi1tc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCi1tc2dzdHIgItCa0LDRgtCw0LvQvtCzINC90LDQt9C90LDRh9C10L3QuNGPOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDIKLW1zZ2lkICJDbG9uZSBUeXBlOiIKLW1zZ3N0ciAi0KLQuNC/INC60LvQvtC90LA6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwOAotbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKLW1zZ3N0ciAi0KHRgtCw0L3QtNCw0YDRgtC90YvQuSAo0JHRi9GB0YLRgNGL0LksINC/0L7Qu9GD0LjQt9Cx0YvRgtC+0YfQvdGL0LksIMKr0LbQtdGB0YLQutC40LXCuyDRgdGB0YvQu9C60LgpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxNAotbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKLW1zZ3N0ciAi0J/QvtC70L3QsNGPINC60L7Qv9C40Y8gKNCc0LXQtNC70LXQvdC90YvQuSwg0YHQvtC30LTQsNC10YIg0YDQtdC30LXRgNCy0L3Rg9GOINC60L7Qv9C40Y4pIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyMAotbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgotbXNnc3RyICLQntCx0YnQuNC5ICjQodCw0LzRi9C5INCx0YvRgdGC0YDRi9C5LCDQvdC1INGA0LXQutC+0LzQtdC90LTRg9C10YLRgdGPLCDQsdC10Lcg0YDQtdC30LXRgNCy0L3QvtC5INC60L7Qv9C40LgpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYwMwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTkKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCi1tc2dzdHIgItCa0LDRgtCw0LvQvtCzINC90LUg0Y/QstC70Y/QtdGC0YHRjyDRgNC10L/QvtC30LjRgtC+0YDQuNC10Lw6ICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5MgotbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKLW1zZ3N0ciAi0KHRgtCw0L3QtNCw0YDRgtC90YvQuSDQutC70L7QvSDQstC+0LfQvNC+0LbQtdC9INGC0L7Qu9GM0LrQviDQtNC70Y8g0LvQvtC60LDQu9GM0L3QvtCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk2Ci1tc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKLW1zZ3N0ciAi0J7QsdGJ0LjQuSDQutC70L7QvSDQstC+0LfQvNC+0LbQtdC9INGC0L7Qu9GM0LrQviDQtNC70Y8g0LvQvtC60LDQu9GM0L3QvtCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICLQn9GD0YLRjCAnJXMnINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI4Ci1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0YHQutC+0L3RhNC40LPRg9GA0LjRgNC+0LLQsNGC0Ywg0LjRgdGF0L7QtNC90YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5LiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDAKLW1zZ2lkICJDb3VudGluZyBvYmplY3RzIgotbXNnc3RyICLQodGH0LjRgtCw0Y4g0L7QsdGK0LXQutGC0YsiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQxCi1tc2dpZCAiYnVja2V0cyIKLW1zZ3N0ciAi0LHQu9C+0LrQuCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0YHQutC+0L/QuNGA0L7QstCw0YLRjCBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKLW1zZ3N0ciAi0J3QtdGH0LXQs9C+INC60LvQvtC90LjRgNC+0LLQsNGC0Ywg0YEgJXMuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjkKLW1zZ2lkICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iCi1tc2dzdHIgItCd0LUg0LjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNC90LAg0LLQtdGC0LLRjCDCq21hc3RlcsK7LiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MTYKLW1zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgotbXNnc3RyICLCq9CW0LXRgdGC0LrQuNC1INGB0YHRi9C70LrQuMK7INC90LXQtNC+0YHRgtGD0L/QvdGLLiDQkdGD0LTQtdGCINC40YHQv9C+0LvRjNC30L7QstCw0L3QviDQutC+0L/QuNGA0L7QstCw0L3QuNC1LiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MjgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDbG9uaW5nIGZyb20gJXMiCi1tc2dzdHIgItCa0LvQvtC90LjRgNC+0LLQsNC90LjQtSAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTkKLW1zZ2lkICJDb3B5aW5nIG9iamVjdHMiCi1tc2dzdHIgItCa0L7Qv9C40YDQvtCy0LDQvdC40LUgb2JqZWN0cyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NjAKLW1zZ2lkICJLaUIiCi1tc2dzdHIgItCa0JEiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzg0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDRgdC60L7Qv9C40YDQvtCy0LDRgtGMINC+0LHRitC10LrRgjogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk0Ci1tc2dpZCAiTGlua2luZyBvYmplY3RzIgotbXNnc3RyICLQodC+0LfQtNCw0L3QuNC1INGB0YHRi9C70L7QuiDQvdCwIG9iamVjdHMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk1Ci1tc2dpZCAib2JqZWN0cyIKLW1zZ3N0ciAi0L7QsdGK0LXQutGC0YsiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0YHQvtC30LTQsNGC0YwgwqvQttC10YHRgtC60YPRjiDRgdGB0YvQu9C60YPCuyDQvdCwINC+0LHRitC10LrRgjogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU4Ci1tc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNC30LLQu9C10YfRjCDQstC10YLQutC4INC4INC+0LHRitC10LrRgtGLLiDQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QsNGPINC40L3RhNC+0YDQvNCw0YbQuNGPINC90LAg0LrQvtC90YHQvtC70LguIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg2OQotbXNnaWQgIkNhbm5vdCBmZXRjaCB0YWdzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNC30LLQu9C10YfRjCDQvNC10YLQutC4LiDQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QsNGPINC40L3RhNC+0YDQvNCw0YbQuNGPINC90LAg0LrQvtC90YHQvtC70LguIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg5MwotbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0L7Qv9GA0LXQtNC10LvQuNGC0YwgSEVBRC4g0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90LDRjyDQuNC90YTQvtGA0LzQsNGG0LjRjyDQvdCwINC60L7QvdGB0L7Qu9C4LiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY2xlYW51cCAlcyIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQvtGH0LjRgdGC0LjRgtGMICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOAotbXNnaWQgIkNsb25lIGZhaWxlZC4iCi1tc2dzdHIgItCa0LvQvtC90LjRgNC+0LLQsNC90LjQtSDQvdC1INGD0LTQsNC70L7RgdGMLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTUKLW1zZ2lkICJObyBkZWZhdWx0IGJyYW5jaCBvYnRhaW5lZC4iCi1tc2dzdHIgItCS0LXRgtC60LAg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4g0L3QtSDQsdGL0LvQsCDQv9C+0LvRg9GH0LXQvdCwLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0YDQsNGB0L/QvtC30L3QsNGC0YwgJXMg0LrQsNC6INC60L7QvNC80LjRgi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM4Ci1tc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCi1tc2dzdHIgItCh0L7Qt9C00LDRjiDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzkgbGliL2luZGV4LnRjbDo2NyBsaWIvaW5kZXgudGNsOjEzMAotIzogbGliL2luZGV4LnRjbDoxOTgKLW1zZ2lkICJmaWxlcyIKLW1zZ3N0ciAi0YTQsNC50LvQvtCyIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2OAotbXNnaWQgIkluaXRpYWwgZmlsZSBjaGVja291dCBmYWlsZWQuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0L3QsNGH0LDQu9GM0L3QvtC1INGB0L7RgdGC0L7Rj9C90LjQtSDRhNCw0LnQu9C+0LIg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxMQotbXNnaWQgIk9wZW4iCi1tc2dzdHIgItCe0YLQutGA0YvRgtGMIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjEKLW1zZ2lkICJSZXBvc2l0b3J5OiIKLW1zZ3N0ciAi0KDQtdC/0L7Qt9C40YLQvtGA0LjQuToiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINGA0LXQv9C+0LfQuNGC0L7RgNC40LkgJXM6IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMKLW1zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgotbXNnc3RyICLQotC10LrRg9GJ0LXQtSDQvtGC0YHQvtC10LTQuNC90LXQvdC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo2MAotbXNnaWQgIlJldmlzaW9uIEV4cHJlc3Npb246IgotbXNnc3RyICLQktGL0YDQsNC20LXQvdC40LUg0LTQu9GPINC+0L/RgNC10LTQtdC70LXQvdC40Y8g0LLQtdGA0YHQuNC4OiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjc0Ci1tc2dpZCAiTG9jYWwgQnJhbmNoIgotbXNnc3RyICLQm9C+0LrQsNC70YzQvdCw0Y8g0LLQtdGC0LrQsDoiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3OQotbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKLW1zZ3N0ciAi0J7RgtGB0LvQtdC20LjQstCw0LXQvNCw0Y8g0LLQtdGC0LrQsCIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjg0IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzgKLW1zZ2lkICJUYWciCi1tc2dzdHIgItCc0LXRgtC60LAiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKLW1zZ3N0ciAi0J3QtdCy0LXRgNC90LDRjyDQstC10YDRgdC40Y86ICVzIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzM4Ci1tc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgotbXNnc3RyICLQktC10YDRgdC40Y8g0L3QtSDRg9C60LDQt9Cw0L3QsC4iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDYKLW1zZ2lkICJSZXZpc2lvbiBleHByZXNzaW9uIGlzIGVtcHR5LiIKLW1zZ3N0ciAi0J/Rg9GB0YLQvtC1INCy0YvRgNCw0LbQtdC90LjQtSDQtNC70Y8g0L7Qv9GA0LXQtNC10LvQtdC90LjRjyDQstC10YDRgdC40LguIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMxCi1tc2dpZCAiVXBkYXRlZCIKLW1zZ3N0ciAi0J7QsdC90L7QstC70LXQvdC+IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTU5Ci1tc2dpZCAiVVJMIgotbXNnc3RyICLQodGB0YvQu9C60LAiCi0KLSM6IGxpYi9jb21taXQudGNsOjkKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODUzCiBtc2dpZCAiIgotIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCisiQnkgZGVmYXVsdCwgZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGRlbmllZCwgYmVjYXVzZSB0aGUgbmV4dFxuIgorIidnaXQgY2xvbmUnIHdvbid0IHJlc3VsdCBpbiBhbnkgZmlsZSBjaGVja2VkIG91dCwgY2F1c2luZyBjb25mdXNpb24uXG4iCiAiXG4iCi0iWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzIHRvIGFtZW5kLlxuIgotbXNnc3RyICLQntGC0YHRg9GC0YHRgtCy0YPQtdGCINC60L7QvNC80LjRgtGLINC00LvRjyDQuNGB0L/RgNCw0LLQu9C10L3QuNGPLlxuXG7QktGLINGB0L7Qt9C00LDQtdGC0LUg0L3QsNGH0LDQu9GM0L3Ri9C5INC60L7QvNC80LjRgiwg0LfQtNC10YHRjCDQtdGJ0LUg0L3QtdGH0LXQs9C+INC40YHQv9GA0LDQstC70Y/RgtGMLlxuIgorIllvdSBjYW4gc2V0ICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvXG4iCisiJ3dhcm4nIG9yICdpZ25vcmUnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBkZWxldGluZyB0aGVcbiIKKyJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlLCB5b3UgY2FuIHNldCBpdCB0byAncmVmdXNlJy4iCittc2dzdHIgItCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLCDRg9C00LDQu9C10L3QuNC1INGC0LXQutGD0YnQtdC5INCy0LXRgtC60Lgg0LfQsNC/0YDQtdGJ0LXQvdC+LCDRgtCw0Log0LrQsNC6INC/0L7RgdC70LXQtNGD0Y7RidC40LlcbsKrZ2l0IGNsb25lwrsg0L3QtSDRgdC80L7QttC10YIg0L/QvtC70YPRh9C40YLRjCDQvdC40LrQsNC60LjRhSDRhNCw0LnQu9C+0LIsINGH0YLQviDQv9GA0LjQstC10LTQtdGCINC6INC/0YPRgtCw0L3QuNGG0LUuXG5cbtCS0Ysg0LzQvtC20LXRgtC1INGD0YHRgtCw0L3QvtCy0LjRgtGMINC30L3QsNGH0LXQvdC40LUg0L7Qv9GG0LjQuCDCq3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnTCu1xu0LIgwqt3YXJuwrsg0LjQu9C4IMKraWdub3JlwrssINCy0L4g0LLQvdC10YjQvdC10Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCwgINGH0YLQvtCx0Ysg0YDQsNC30YDQtdGI0LjRgtGMXG7Rg9C00LDQu9C10L3QuNC1INGC0LXQutGD0YnQtdC5INCy0LXRgtC60Lgg0YEg0LjQu9C4INCx0LXQtyDQv9GA0LXQtNGD0L/RgNC10LbQtNCw0Y7RidC10LPQviDRgdC+0L7QsdGJ0LXQvdC40Y8uXG5cbtCn0YLQvtCx0Ysg0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0Y3RgtC+INGB0L7QvtCx0YnQtdC90LjQtSwg0LLRiyDQvNC+0LbQtdGC0LUg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LfQvdCw0YfQtdC90LjQtSDQvtC/0YbQuNC4XG7QsiDCq3JlZnVzZcK7LiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTgKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk0MAorbXNnaWQgInF1aWV0IgorbXNnc3RyICLRgtC40YXQuNC5INGA0LXQttC40LwiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1NAorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIgorbXNnc3RyICLQktGLINC00L7Qu9C20L3RiyDRg9C60LDQt9Cw0YLRjCDQutCw0YLQsNC70L7Qsy4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MTcKIG1zZ2lkICIiCi0iQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCi0iXG4iCi0iWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5IGNvbXBsZXRlZC4gIFlvdSBjYW5ub3QgYW1lbmQgdGhlIHByaW9yIGNvbW1pdCB1bmxlc3MgeW91IGZpcnN0IGFib3J0IHRoZSBjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgotbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQuNGB0L/RgNCw0LLQuNGC0Ywg0LrQvtC80LzQuNGCINCy0L4g0LLRgNC10LzRjyDRgdC70LjRj9C90LjRjy5cblxu0KLQtdC60YPRidC10LUg0YHQu9C40Y/QvdC40LUg0L3QtSDQt9Cw0LLQtdGA0YjQtdC90L4uINCd0LXQstC+0LfQvNC+0LbQvdC+INC40YHQv9GA0LDQstC40YLRjCDQv9GA0LXQtNGL0LTRg9C40Lkg0LrQvtC80LzQuNGCLCDQvdC1INC/0YDQtdGA0YvQstCw0Y8g0Y3RgtGDINC+0L/QtdGA0LDRhtC40Y4uXG4iCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0aW1lPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0gIgorIlstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0iCisiIDxyZWZzPi4uLiIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDo0OAotbXNnaWQgIkVycm9yIGxvYWRpbmcgY29tbWl0IGRhdGEgZm9yIGFtZW5kOiIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQuCDQt9Cw0LPRgNGD0LfQutC1INC00LDQvdC90YvRhSDQtNC70Y8g0LjRgdC/0YDQsNCy0LvQtdC90LjRjyDQutC+0LzQvNC40YLQsDoiCi0KLSM6IGxpYi9jb21taXQudGNsOjc1Ci1tc2dpZCAiVW5hYmxlIHRvIG9idGFpbiB5b3VyIGlkZW50aXR5OiIKLW1zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0L/QvtC70YPRh9C40YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINCw0LLRgtC+0YDRgdGC0LLQtToiCi0KLSM6IGxpYi9jb21taXQudGNsOjgwCi1tc2dpZCAiSW52YWxpZCBHSVRfQ09NTUlUVEVSX0lERU5UOiIKLW1zZ3N0ciAi0J3QtdC00L7Qv9GD0YHRgtC40LzRi9C5IEdJVF9DT01NSVRURVJfSURFTlQ6IgotCi0jOiBsaWIvY29tbWl0LnRjbDoxMjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJ3YXJuaW5nOiBUY2wgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyAnJXMnLiIKLW1zZ3N0ciAi0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtTogVGNsINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC60L7QtNC40YDQvtCy0LrRgyDCqyVzwrsuIgotCi0jOiBsaWIvY29tbWl0LnRjbDoxNDkKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjIKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBIHJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCi1tc2dzdHIgItCf0L7RgdC70LXQtNC90LXQtSDQv9GA0L7Rh9C40YLQsNC90L3QvtC1INGB0L7RgdGC0L7Rj9C90LjQtSDRgNC10L/QvtC30LjRgtC+0YDQuNGPINC90LUg0YHQvtC+0YLQstC10YLRgdGC0LLRg9C10YIg0YLQtdC60YPRidC10LzRgy5cblxu0KEg0LzQvtC80LXQvdGC0LAg0L/QvtGB0LvQtdC00L3QtdC5INC/0YDQvtCy0LXRgNC60Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQsdGL0Lsg0LjQt9C80LXQvdC10L0g0LTRgNGD0LPQvtC5INC/0YDQvtCz0YDQsNC80LzQvtC5IEdpdC4g0J3QtdC+0LHRhdC+0LTQuNC80L4g0L/QtdGA0LXRh9C40YLQsNGC0Ywg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSwg0L/RgNC10LbQtNC1INGH0LXQvCDQuNC30LzQtdC90Y/RgtGMINGC0LXQutGD0YnRg9GOINCy0LXRgtCy0YwuIFxuXG7QrdGC0L4g0LHRg9C00LXRgiDRgdC00LXQu9Cw0L3QviDRgdC10LnRh9Cw0YEg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LguXG4iCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTcyCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3JlZmxvZy5jOjI1Cittc2dpZCAiZ2l0IHJlZmxvZyBleGlzdHMgPHJlZj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo1NjcgYnVpbHRpbi9yZWZsb2cuYzo1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIsKrJXPCuyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LTQvtC/0YPRgdGC0LjQvNC+0Lkg0LzQtdGC0LrQvtC5INC00LDRgtGLL9Cy0YDQtdC80LXQvdC4IgorCisjOiBidWlsdGluL3JlZmxvZy5jOjYwNQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nIHJlYWNoYWJsZSBvYmplY3RzLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyBub3doZXJlISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY5NQorbXNnaWQgIm5vIHJlZmxvZyBzcGVjaWZpZWQgdG8gZGVsZXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJlZmxvZzogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVmbG9nIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmIGZvcm1hdDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NjQKK21zZ2lkICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNwogbXNnaWQgIiIKLSJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgotIlxuIgotIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4gIFlvdSBtdXN0IHJlc29sdmUgdGhlbSBhbmQgc3RhZ2UgdGhlIGZpbGUgYmVmb3JlIGNvbW1pdHRpbmcuXG4iCi1tc2dzdHIgItCd0LXQu9GM0LfRjyDQstGL0L/QvtC70L3QuNGC0Ywg0LrQvtC80LzQuNGCINGBINC90LXQt9Cw0LLQtdGA0YjRkdC90L3QvtC5INC+0L/QtdGA0LDRhtC40LXQuSDRgdC70LjRj9C90LjRjy5cblxu0JTQu9GPINGE0LDQudC70LAgJXMg0LLQvtC30L3QuNC6INC60L7QvdGE0LvQuNC60YIg0YHQu9C40Y/QvdC40Y8uINCg0LDQt9GA0LXRiNC40YLQtSDQutC+0L3RhNC70LjQutGCINC4INC00L7QsdCw0LLRjNGC0LUg0LjRhSDQsiDQuNC90LTQtdC60YEg0L/QtdGA0LXQtCDQstGL0L/QvtC70L3QtdC90LjQtdC8INC60L7QvNC80LjRgtCwLlxuIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdICIKKyJbLS1taXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFstdCA80LLQtdGC0LrQsD5dIFstbSA80LzQsNGB0YLQtdGALdCy0LXRgtC60LA+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLW1pcnJvcj08ZmV0Y2h8cHVzaD5dIDzQuNC80Y8+IDzQsNC00YDQtdGBPiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTgwCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3JlbW90ZS5jOjE4IGJ1aWx0aW4vcmVtb3RlLmM6MzgKK21zZ2lkICJnaXQgcmVtb3RlIHJlbmFtZSA8b2xkPiA8bmV3PiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW5hbWUgPNGB0YLQsNGA0L7QtS3QvdCw0LfQstCw0L3QuNC1PiA80L3QvtCy0L7QtS3QvdCw0LfQstCw0L3QuNC1PiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOSBidWlsdGluL3JlbW90ZS5jOjQzCittc2dpZCAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbW92ZSA80LjQvNGPPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMCBidWlsdGluL3JlbW90ZS5jOjQ4Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA80LjQvNGPPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPNCy0LXRgtC60LA+KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMQorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDzQuNC80Y8+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIyCittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDzQuNC80Y8+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzCiBtc2dpZCAiIgotIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKLSJcbiIKLSJGaWxlICVzIGNhbm5vdCBiZSBjb21taXR0ZWQgYnkgdGhpcyBwcm9ncmFtLlxuIgotbXNnc3RyICLQntCx0L3QsNGA0YPQttC10L3QviDQvdC10LjQt9Cy0LXRgdGC0L3QvtC1INGB0L7RgdGC0L7Rj9C90LjQtSDRhNCw0LnQu9CwICVzLlxuXG7QpNCw0LnQuyAlcyDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0LfQsNC60L7QvNC80LjRh9C10L0g0Y3RgtC+0Lkg0L/RgNC+0LPRgNCw0LzQvNC+0LkuXG4iCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dIgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPNCz0YDRg9C/0L/QsD4gfCA80LjQvNGPLdCy0L3QtdGI0L3QtdCz0L4t0YDQtdC/0L7Qt9C40YLQvtGA0LjRjz4p4oCmXSIKIAotIzogbGliL2NvbW1pdC50Y2w6MTg4CisjOiBidWlsdGluL3JlbW90ZS5jOjI0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPNC40LzRjz4gPNCy0LXRgtC60LA+4oCmIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI1IGJ1aWx0aW4vcmVtb3RlLmM6NzQKK21zZ2lkICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDzQuNC80Y8+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI2IGJ1aWx0aW4vcmVtb3RlLmM6NzkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+IFs8b2xkdXJsPl0iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA80LjQvNGPPiA80L3QvtCy0YvQuS11cmw+IFs80YHRgtCw0YDRi9C5LXVybD5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI3IGJ1aWx0aW4vcmVtb3RlLmM6ODAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPNC40LzRjz4gPNC90L7QstGL0LktdXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOCBidWlsdGluL3JlbW90ZS5jOjgxCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDzQuNC80Y8+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjMzCittc2dpZCAiZ2l0IHJlbW90ZSBhZGQgWzxvcHRpb25zPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIGFkZCBbPNC+0L/RhtC40Lg+XSA80LjQvNGPPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1MworbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPNC40LzRjz4gPNCy0LXRgtC60LA+4oCmIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA80LjQvNGPPiA80LLQtdGC0LrQsD7igKYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTkKK21zZ2lkICJnaXQgcmVtb3RlIHNob3cgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNob3cgWzzQvtC/0YbQuNC4Pl0gPNC40LzRjz4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbPNC+0L/RhtC40Lg+XSA80LjQvNGPPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2OQorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBbPNC+0L/RhtC40Lg+XSBbPNCz0YDRg9C/0L/QsD4gfCA80LjQvNGPLdCy0L3QtdGI0L3QtdCz0L4t0YDQtdC/0L7Qt9C40YLQvtGA0LjRjz5d4oCmIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjQtSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzAKIG1zZ2lkICIiCi0iTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCi0iXG4iCi0iWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC5cbiIKLW1zZ3N0ciAi0J7RgtGB0YPRgtGB0YLQstGD0Y7RgiDQuNC30LzQtdC90LXQvdC40Y8g0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPLlxuXG7QlNC+0LHQsNCy0YzRgtC1INCyINC40L3QtNC10LrRgSDRhdC+0YLRjyDQsdGLINC+0LTQuNC9INGE0LDQudC7INC/0LXRgNC10LQg0LLRi9C/0L7Qu9C90LXQvdC40LXQvCDQutC+0LzQvNC40YLQsC5cbiIKKyItLW1pcnJvciBpcyBkYW5nZXJvdXMgYW5kIGRlcHJlY2F0ZWQ7IHBsZWFzZVxuIgorIlx0IHVzZSAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoIGluc3RlYWQiCittc2dzdHIgItC60LvRjtGHIC0tbWlycm9yINC90LXQsdC10LfQvtC/0LDRgdC10L0g0Lgg0L3QtSDRgNC10LrQvtC80LXQvdC00YPQtdGC0YHRjyDQuiDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjjtcbtC40YHQv9C+0LvRjNC30YPQudGC0LUg0LLQvNC10YHRgtC+INC90LXQs9C+IC0tbWlycm9yPWZldGNoINC40LvQuCAtLW1pcnJvcj1wdXNoIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMDMKLW1zZ2lkICIiCi0iUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgotIlxuIgotIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCi0iXG4iCi0iLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgotIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCi0iLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgotbXNnc3RyICLQo9C60LDQttC40YLQtSDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAuXG5cbtCg0LXQutC+0LzQtdC90LTRg9C10YLRgdGPINGB0LvQtdC00YPRjtGJ0LjQuSDRhNC+0YDQvNCw0YIg0YHQvtC+0LHRidC10L3QuNGPOlxuXG4tINCyINC/0LXRgNCy0L7QuSDRgdGC0YDQvtC60LUg0LrRgNCw0YLQutC+0LUg0L7Qv9C40YHQsNC90LjQtSDRgdC00LXQu9Cw0L3QvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5XG4tINCy0YLQvtGA0LDRjyDRgdGC0YDQvtC60LAg0L/Rg9GB0YLQsNGPXG4tINCyINC+0YHRgtCw0LLRiNC40YXRgdGPINGB0YLRgNC+0LrQsNGFINC+0L/QuNGI0LjRgtC1LCDRh9GC0L4g0LTQsNGO0YIg0LLQsNGI0Lgg0LjQt9C80LXQvdC10L3QuNGPXG4iCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdGL0Lkg0LDRgNCz0YPQvNC10L3RgiDQtNC70Y8gbWlycm9yOiAlcyIKIAotIzogbGliL2NvbW1pdC50Y2w6MjM0Ci1tc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCi1tc2dzdHIgItCS0YvQt9C+0LIg0L/QtdGA0LXRhdCy0LDRgtGH0LjQutCwIHByZS1jb21taXTigKYiCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MworbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgItC40LfQstC70LXRh9GMINCy0L3QtdGI0L3QuNC1INCy0LXRgtC60LgiCiAKLSM6IGxpYi9jb21taXQudGNsOjI0OQotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgotbXNnc3RyICLQmtC+0LzQvNC40YIg0L/RgNC10YDQstCw0L0g0L/QtdGA0LXQstCw0YLRh9C40LrQvtC8IHByZS1jb21taXQuIgorIzogYnVpbHRpbi9yZW1vdGUuYzoxNjUKK21zZ2lkICJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIgorbXNnc3RyICLQuNC80L/QvtGA0YLQuNGA0L7QstCw0YLRjCDQstGB0LUg0LzQtdGC0LrQuCDQuCDQsNGB0YHQvtGG0LjQuNGA0L7QstCw0L3QvdGL0LUg0L7QsdGK0LXQutGC0Ysg0L/RgNC4INC40LfQstC70LXRh9C10L3QuNC4IgogCi0jOiBsaWIvY29tbWl0LnRjbDoyNzIKLW1zZ2lkICJDYWxsaW5nIGNvbW1pdC1tc2cgaG9vay4uLiIKLW1zZ3N0ciAi0JLRi9C30L7QsiDQv9C10YDQtdGF0LLQsNGC0YfQuNC60LAgY29tbWl0LW1zZ+KApiIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY4Cittc2dpZCAib3IgZG8gbm90IGZldGNoIGFueSB0YWcgYXQgYWxsICgtLW5vLXRhZ3MpIgorbXNnc3RyICLQuNC70Lgg0L3QtSDQuNC30LLQu9C10LrQsNGC0Ywg0LzQtdGC0LrQuCDQstC+0L7QsdGJ0LUgKC0tbm8tdGFncykiCiAKLSM6IGxpYi9jb21taXQudGNsOjI4NwotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgotbXNnc3RyICLQmtC+0LzQvNC40YIg0L/RgNC10YDQstCw0L0g0L/QtdGA0LXQstCw0YLRh9C40LrQvtC8IGNvbW1pdC1tc2ciCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MAorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgItC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INCy0LXRgtC60LgiCiAKLSM6IGxpYi9jb21taXQudGNsOjMwMAotbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKLW1zZ3N0ciAi0JrQvtC80LzQuNGCINC40LfQvNC10L3QtdC90LjQueKApiIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcxCittc2dpZCAibWFzdGVyIGJyYW5jaCIKK21zZ3N0ciAi0LzQsNGB0YLQtdGAINCy0LXRgtC60LAiCiAKLSM6IGxpYi9jb21taXQudGNsOjMxNgotbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwIHdyaXRlLXRyZWUg0LfQsNCy0LXRgNGI0LjQu9Cw0YHRjCDRgSDQvtGI0LjQsdC60L7QuToiCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MworbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICLQvdCw0YHRgtGA0L7QuNGC0Ywg0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQutCw0Log0LfQtdGA0LrQsNC70L4g0LTQu9GPINC+0YLQv9GA0LDQstC60Lgg0LjQu9C4INC40LfQstC70LXRh9C10L3QuNGPINC40LfQvNC10L3QtdC90LjQuSIKIAotIzogbGliL2NvbW1pdC50Y2w6MzE3IGxpYi9jb21taXQudGNsOjM2MSBsaWIvY29tbWl0LnRjbDozODIKLW1zZ2lkICJDb21taXQgZmFpbGVkLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LrQvtC80LzQuNGC0LjRgtGMINC40LfQvNC10L3QtdC90LjRjy4iCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NQorbXNnaWQgInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiCittc2dzdHIgItGD0LrQsNC30LDQvdC40LUg0LzQsNGB0YLQtdGAINCy0LXRgtC60Lgg0L3QtSDQuNC80LXQtdGCINGB0LzRi9GB0LvQsCDRgSDQv9Cw0YDQsNC80LXRgtGA0L7QvCAtLW1pcnJvciIKIAotIzogbGliL2NvbW1pdC50Y2w6MzM0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ29tbWl0ICVzIGFwcGVhcnMgdG8gYmUgY29ycnVwdCIKLW1zZ3N0ciAi0JrQvtC80LzQuNGCICVzINC/0L7RhdC+0LbQtSDQv9C+0LLRgNC10LbQtNC10L0iCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NworbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgItGD0LrQsNC30LDQvdC40LUg0L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0LLQtdGC0L7QuiDQuNC80LXQtdGCINGB0LzRi9GB0Lsg0YLQvtC70YzQutC+INC/0YDQuCDQt9C10YDQutCw0LvRjNC90L7QvCDQuNC30LLQu9C10YfQtdC90LjQuCIKIAotIzogbGliL2NvbW1pdC50Y2w6MzM5Ci1tc2dpZCAiIgotIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgotIlxuIgotIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCi0iXG4iCi0iQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgotbXNnc3RyICLQndC10YIg0LjQt9C80LXQvdC10L3QuNGPINC00LvRjyDQutC+0LzQvNC40YLQsC5cblxu0J3QuCDQvtC00LjQvSDRhNCw0LnQuyDQvdC1INCx0YvQuyDQuNC30LzQtdC90LXQvSDQuCDQvdC1INCx0YvQu9C+INGB0LvQuNGP0L3QuNGPLlxuXG7QodC10LnRh9Cw0YEg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60Lgg0LfQsNC/0YPRgdGC0LjRgtGB0Y8g0L/QtdGA0LXRh9C40YLRi9Cy0LDQvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjy5cbiIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk0IGJ1aWx0aW4vcmVtb3RlLmM6NjM2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkgJXMg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCIgogCi0jOiBsaWIvY29tbWl0LnRjbDozNDYKLW1zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCi1tc2dzdHIgItCd0LXRgiDQuNC30LzQtdC90LXQvdC40Y8g0LTQu9GPINC60L7QvNC80LjRgtCwLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzYwCi1tc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwIGNvbW1pdC10cmVlINC30LDQstC10YDRiNC40LvQsNGB0Ywg0YEg0L7RiNC40LHQutC+0Lk6IgotCi0jOiBsaWIvY29tbWl0LnRjbDozODEKLW1zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCi1tc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCB1cGRhdGUtcmVmINC30LDQstC10YDRiNC40LvQsNGB0Ywg0YEg0L7RiNC40LHQutC+0Lk6IgotCi0jOiBsaWIvY29tbWl0LnRjbDo0NjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCi1tc2dzdHIgItCh0L7Qt9C00LDQvSDQutC+0LzQvNC40YIgJXM6ICVzICIKLQotIzogbGliL2NvbnNvbGUudGNsOjU5Ci1tc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAi0JIg0L/RgNC+0YbQtdGB0YHQteKApiDQv9C+0LbQsNC70YPQudGB0YLQsCwg0LbQtNC40YLQteKApiIKLQotIzogbGliL2NvbnNvbGUudGNsOjE4NgotbXNnaWQgIlN1Y2Nlc3MiCi1tc2dzdHIgItCf0YDQvtGG0LXRgdGBINGD0YHQv9C10YjQvdC+INC30LDQstC10YDRiNC10L0iCi0KLSM6IGxpYi9jb25zb2xlLnRjbDoyMDAKLW1zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCi1tc2dzdHIgItCe0YjQuNCx0LrQsDog0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywg0LrQvtC80LDQvdC00YMiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDMKLW1zZ2lkICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyIKLW1zZ3N0ciAi0JrQvtC70LjRh9C10YHRgtCy0L4g0L3QtdGB0LLRj9C30LDQvdC90YvRhSDQvtCx0YrQtdC60YLQvtCyIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ0Ci1tc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCi1tc2dzdHIgItCe0LHRitC10Lwg0LTQuNGB0LrQvtCy0L7Qs9C+INC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQsCwg0LfQsNC90Y/RgtGL0Lkg0L3QtdGB0LLRj9C30LDQvdC90YvQvNC4INC+0LHRitC10LrRgtCw0LzQuCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NQotbXNnaWQgIk51bWJlciBvZiBwYWNrZWQgb2JqZWN0cyIKLW1zZ3N0ciAi0JrQvtC70LjRh9C10YHRgtCy0L4g0YPQv9Cw0LrQvtCy0LDQvdC90YvRhSDQvtCx0YrQtdC60YLQvtCyIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ2Ci1tc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgotbXNnc3RyICLQmtC+0LvQuNGH0LXRgdGC0LLQviBwYWNrLdGE0LDQudC70L7QsiIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NwotbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBwYWNrZWQgb2JqZWN0cyIKLW1zZ3N0ciAi0J7QsdGK0LXQvCDQtNC40YHQutC+0LLQvtCz0L4g0L/RgNC+0YHRgtGA0LDQvdGB0YLQstCwLCDQt9Cw0L3Rj9GC0YvQuSDRg9C/0LDQutC+0LLQsNC90L3Ri9C80Lgg0L7QsdGK0LXQutGC0LDQvNC4IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ4Ci1tc2dpZCAiUGFja2VkIG9iamVjdHMgd2FpdGluZyBmb3IgcHJ1bmluZyIKLW1zZ3N0ciAi0J3QtdGB0LLRj9C30LDQvdC90YvQtSDQvtCx0YrQtdC60YLRiywg0LrQvtGC0L7RgNGL0LUg0LzQvtC20L3QviDRg9C00LDQu9C40YLRjCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0OQotbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCi1tc2dzdHIgItCc0YPRgdC+0YAiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NzIKLW1zZ2lkICJDb21wcmVzc2luZyB0aGUgb2JqZWN0IGRhdGFiYXNlIgotbXNnc3RyICLQodC20LDRgtC40LUg0LHQsNC30Ysg0L7QsdGK0LXQutGC0L7QsiIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo4MwotbXNnaWQgIlZlcmlmeWluZyB0aGUgb2JqZWN0IGRhdGFiYXNlIHdpdGggZnNjay1vYmplY3RzIgotbXNnc3RyICLQn9GA0L7QstC10YDQutCwINCx0LDQt9GLINC+0LHRitC10LrRgtC+0LIg0L/RgNC4INC/0L7QvNC+0YnQuCBmc2NrIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjEwNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCi0iXG4iCi0iVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyB0aGUgZGF0YWJhc2UuXG4iCi0iXG4iCi0iQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCi1tc2dzdHIgItCt0YLQvtGCINGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0YHQtdC50YfQsNGBINGB0L7QtNC10YDQttC40YIg0L/RgNC40LzQtdGA0L3QviAlaSDRgdCy0L7QsdC+0LTQvdGL0YUg0L7QsdGK0LXQutGC0L7QslxuXG7QlNC70Y8g0LvRg9GH0YjQtdC5INC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLQuCDRgNC10LrQvtC80LXQvdC00YPQtdGC0YHRjyDRgdC20LDRgtGMINCx0LDQt9GDINC00LDQvdC90YvRhS5cblxu0KHQttCw0YLRjCDQsdCw0LfRgyDQtNCw0L3QvdGL0YUg0YHQtdC50YfQsNGBPyIKLQotIzogbGliL2RhdGUudGNsOjI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKLW1zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINC00LDRgtCwINCyINGA0LXQv9C+0LfQuNGC0L7RgNC40Lg6ICVzIgotCi0jOiBsaWIvZGlmZi50Y2w6NjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCi0iXG4iCi0iJXMgaGFzIG5vIGNoYW5nZXMuXG4iCi0iXG4iCi0iVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgdGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKLSJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlIHRoZSBzYW1lIHN0YXRlLiIKLW1zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNC5INC90LUg0L7QsdC90LDRgNGD0LbQtdC90L4uXG5cbtCyICVzINC+0YLRgdGD0YLRgdGC0LLRg9GO0YIg0LjQt9C80LXQvdC10L3QuNGPLlxuXG7QlNCw0YLQsCDQuNC30LzQtdC90LXQvdC40Y8g0YTQsNC50LvQsCDQsdGL0LvQsCDQvtCx0L3QvtCy0LvQtdC90LAg0LTRgNGD0LPQvtC5INC/0YDQvtCz0YDQsNC80LzQvtC5LCDQvdC+INGB0L7QtNC10YDQttC40LzQvtC1INGE0LDQudC70LAg0L7RgdGC0LDQu9C+0YHRjCDQv9GA0LXQttC90LjQvC5cblxu0KHQtdC50YfQsNGBINCx0YPQtNC10YIg0LfQsNC/0YPRidC10L3QviDQv9C10YDQtdGH0LjRgtGL0LLQsNC90LjQtSDRgNC10L/QvtC30LjRgtC+0YDQuNGPLCDRh9GC0L7QsdGLINC90LDQudGC0Lgg0L/QvtC00L7QsdC90YvQtSDRhNCw0LnQu9GLLiIKLQotIzogbGliL2RpZmYudGNsOjEwNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKLW1zZ3N0ciAi0JfQsNCz0YDRg9C30LrQsCDQuNC30LzQtdC90LXQvdC40LkgJXPigKYiCi0KLSM6IGxpYi9kaWZmLnRjbDoxMjUKLW1zZ2lkICIiCi0iTE9DQUw6IGRlbGV0ZWRcbiIKLSJSRU1PVEU6XG4iCi1tc2dzdHIgItCb0J7QmtCQ0JvQrNCd0J46INGD0LTQsNC70ZHQvVxu0JLQndCV0KjQndCY0Jk6XG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoxMzAKLW1zZ2lkICIiCi0iUkVNT1RFOiBkZWxldGVkXG4iCi0iTE9DQUw6XG4iCi1tc2dzdHIgItCS0J3QldCo0J3QmNCZOiDRg9C00LDQu9GR0L1cbtCb0J7QmtCQ0JvQrNCd0J46XG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoxMzcKLW1zZ2lkICJMT0NBTDpcbiIKLW1zZ3N0ciAi0JvQntCa0JDQm9Cs0J3QnjpcbiIKLQotIzogbGliL2RpZmYudGNsOjE0MAotbXNnaWQgIlJFTU9URTpcbiIKLW1zZ3N0ciAi0JLQndCV0KjQndCY0Jk6XG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoyMDIgbGliL2RpZmYudGNsOjMxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgotbXNnc3RyICLQndC1INC80L7Qs9GDINC/0L7QutCw0LfQsNGC0YwgJXMiCi0KLSM6IGxpYi9kaWZmLnRjbDoyMDMKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgotbXNnc3RyICLQntGI0LjQsdC60LAg0LfQsNCz0YDRg9C30LrQuCDRhNCw0LnQu9CwOiIKLQotIzogbGliL2RpZmYudGNsOjIxMAotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKLW1zZ3N0ciAi0KDQtdC/0L7Qt9C40YLQvtGA0LjQuSBHaXQgKNC/0L7QtNC/0YDQvtC10LrRgikiCi0KLSM6IGxpYi9kaWZmLnRjbDoyMjIKLW1zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCi1tc2dzdHIgIiog0JTQstC+0LjRh9C90YvQuSDRhNCw0LnQuyAo0YHQvtC00LXRgNC20LjQvNC+0LUg0L3QtSDQv9C+0LrQsNC30LDQvdC+KSIKLQotIzogbGliL2RpZmYudGNsOjIyNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgotIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgotbXNnc3RyICIqINCg0LDQt9C80LXRgCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNC+0LPQviDRhNCw0LnQu9CwICVkINCx0LDQudGCLlxuKiDQn9C+0LrQsNC30LDQvdC+INC/0LXRgNCy0YvRhSAlZCDQsdCw0LnRgi5cbiIKLQotIzogbGliL2RpZmYudGNsOjIzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJcbiIKLSIqIFVudHJhY2tlZCBmaWxlIGNsaXBwZWQgaGVyZSBieSAlcy5cbiIKLSIqIFRvIHNlZSB0aGUgZW50aXJlIGZpbGUsIHVzZSBhbiBleHRlcm5hbCBlZGl0b3IuXG4iCi1tc2dzdHIgIlxuKiDQndC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0Lkg0YTQsNC50Lsg0L7QsdGA0LXQt9Cw0L06ICVzLlxuKiDQp9GC0L7QsdGLINGD0LLQuNC00LXRgtGMINCy0LXRgdGMINGE0LDQudC7LCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1INCy0L3QtdGI0L3QuNC5INGA0LXQtNCw0LrRgtC+0YAuXG4iCi0KLSM6IGxpYi9kaWZmLnRjbDo0ODIKLW1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNGB0LrQu9GO0YfQuNGC0Ywg0LLRi9Cx0YDQsNC90L3Rg9GOINGH0LDRgdGC0YwuIgotCi0jOiBsaWIvZGlmZi50Y2w6NDg5Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDRgtGMINCy0YvQsdGA0LDQvdC90YvQuSDQsdC70L7QuiDQuNC30LzQtdC90LXQvdC40LkuIgotCi0jOiBsaWIvZGlmZi50Y2w6NTY4Ci1tc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LjRgdC60LvRjtGH0LjRgtGMINCy0YvQsdGA0LDQvdC90YPRjiDRgdGC0YDQvtC60YMuIgotCi0jOiBsaWIvZGlmZi50Y2w6NTc2Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDRgtGMINCy0YvQsdGA0LDQvdC90YPRjiDRgdGC0YDQvtC60YMuIgotCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ0MwotbXNnaWQgIkRlZmF1bHQiCi1tc2dzdHIgItCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIgotCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ0OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN5c3RlbSAoJXMpIgotbXNnc3RyICLQodC40YHRgtC10LzQvdCw0Y8gKCVzKSIKLQotIzogbGliL2VuY29kaW5nLnRjbDo0NTkgbGliL2VuY29kaW5nLnRjbDo0NjUKLW1zZ2lkICJPdGhlciIKLW1zZ3N0ciAi0JTRgNGD0LPQsNGPIgotCi0jOiBsaWIvZXJyb3IudGNsOjIwIGxpYi9lcnJvci50Y2w6MTE0Ci1tc2dpZCAiZXJyb3IiCi1tc2dzdHIgItC+0YjQuNCx0LrQsCIKLQotIzogbGliL2Vycm9yLnRjbDozNgotbXNnaWQgIndhcm5pbmciCi1tc2dzdHIgItC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LUiCi0KLSM6IGxpYi9lcnJvci50Y2w6OTQKLW1zZ2lkICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIgotbXNnc3RyICLQn9C10YDQtdC0INC60L7QvNC80LjRgtC+0LwsINC40YHQv9GA0LDQstGM0YLQtSDQstGL0YjQtdGD0LrQsNC30LDQvdC90YvQtSDQvtGI0LjQsdC60LguIgotCi0jOiBsaWIvaW5kZXgudGNsOjYKLW1zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjCDQuNC90LTQtdC60YEiCi0KLSM6IGxpYi9pbmRleC50Y2w6MTUKLW1zZ2lkICJJbmRleCBFcnJvciIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINCyINC40L3QtNC10LrRgdC1IgotCi0jOiBsaWIvaW5kZXgudGNsOjE3Ci1tc2dpZCAiIgotIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgotInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDQuNC90LTQtdC60YEgR2l0LiDQodC+0YHRgtC+0Y/QvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQsdGD0LTQtdGCINC/0LXRgNC10YfQuNGC0LDQvdC+INCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4LiIKLQotIzogbGliL2luZGV4LnRjbDoyOAotbXNnaWQgIkNvbnRpbnVlIgotbXNnc3RyICLQn9GA0L7QtNC+0LvQttC40YLRjCIKLQotIzogbGliL2luZGV4LnRjbDozMQotbXNnaWQgIlVubG9jayBJbmRleCIKLW1zZ3N0ciAi0KDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjCDQuNC90LTQtdC60YEiCi0KLSM6IGxpYi9pbmRleC50Y2w6Mjg5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5zdGFnaW5nICVzIGZyb20gY29tbWl0IgotbXNnc3RyICLQo9C00LDQu9C10L3QuNC1ICVzINC40Lcg0LjQvdC00LXQutGB0LAiCi0KLSM6IGxpYi9pbmRleC50Y2w6MzI4Ci1tc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKLW1zZ3N0ciAi0JPQvtGC0L7QsiDQtNC70Y8g0LrQvtC80LzQuNGC0LAuIgotCi0jOiBsaWIvaW5kZXgudGNsOjM0MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFkZGluZyAlcyIKLW1zZ3N0ciAi0JTQvtCx0LDQstC70LXQvdC40LUgJXPigKYiCi0KLSM6IGxpYi9pbmRleC50Y2w6Mzk4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCi1tc2dzdHIgItCe0LHRgNCw0YLQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINCyINGE0LDQudC70LUgJXM/IgotCi0jOiBsaWIvaW5kZXgudGNsOjQwMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKLW1zZ3N0ciAi0J7QsdGA0LDRgtC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0LIgJWkg0YTQsNC50LvQtSgt0LDRhSk/IgotCi0jOiBsaWIvaW5kZXgudGNsOjQwOAotbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKLW1zZ3N0ciAi0JvRjtCx0YvQtSDQvdC10L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjywg0LHRg9C00YPRgiDQv9C+0YLQtdGA0Y/QvdGLINC/0YDQuCDQvtCx0YDQsNGJ0LXQvdC40Lgg0LjQt9C80LXQvdC10L3QuNC5LiIKLQotIzogbGliL2luZGV4LnRjbDo0MTEKLW1zZ2lkICJEbyBOb3RoaW5nIgotbXNnc3RyICLQndC40YfQtdCz0L4g0L3QtSDQtNC10LvQsNGC0YwiCi0KLSM6IGxpYi9pbmRleC50Y2w6NDI5Ci1tc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgotbXNnc3RyICLQntCx0YDQsNGJ0LXQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5INCyINCy0YvQsdGA0LDQvdC90YvRhSDRhNCw0LnQu9Cw0YUiCi0KLSM6IGxpYi9pbmRleC50Y2w6NDMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0aW5nICVzIgotbXNnc3RyICLQntCx0YDQsNGJ0LXQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5INCyICVzIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEzCi1tc2dpZCAiIgotIkNhbm5vdCBtZXJnZSB3aGlsZSBhbWVuZGluZy5cbiIKLSJcbiIKLSJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGFueSB0eXBlIG9mIG1lcmdlLlxuIgotbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQstGL0L/QvtC70L3QuNGC0Ywg0YHQu9C40Y/QvdC40LUg0LLQviDQstGA0LXQvNGPINC40YHQv9GA0LDQstC70LXQvdC40Y8uXG5cbtCX0LDQstC10YDRiNC40YLQtSDQuNGB0L/RgNCw0LLQu9C10L3QuNC1INC00LDQvdC90L7Qs9C+INC60L7QvNC80LjRgtCwINC/0LXRgNC10LQg0LLRi9C/0L7Qu9C90LXQvdC40LXQvCDQvtC/0LXRgNCw0YbQuNC4INGB0LvQuNGP0L3QuNGPLlxuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjI3Ci1tc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSByZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGEgbWVyZ2UgY2FuIGJlIHBlcmZvcm1lZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKLW1zZ3N0ciAi0J/QvtGB0LvQtdC00L3QtdC1INC/0YDQvtGH0LjRgtCw0L3QvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0L3QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDRgtC10LrRg9GJ0LXQvNGDLlxuXG7QoSDQvNC+0LzQtdC90YLQsCDQv9C+0YHQu9C10LTQvdC10Lkg0L/RgNC+0LLQtdGA0LrQuCDRgNC10L/QvtC30LjRgtC+0YDQuNC5INCx0YvQuyDQuNC30LzQtdC90LXQvSDQtNGA0YPQs9C+0Lkg0L/RgNC+0LPRgNCw0LzQvNC+0LkgR2l0LiDQndC10L7QsdGF0L7QtNC40LzQviDQv9C10YDQtdGH0LjRgtCw0YLRjCDRgNC10L/QvtC30LjRgtC+0YDQuNC5LCDQv9GA0LXQttC00LUg0YfQtdC8INGB0LvQuNGP0L3QuNC1INC80L7QttC10YIg0LHRi9GC0Ywg0YHQtNC10LvQsNC90L4uXG5cbtCt0YLQviDQsdGD0LTQtdGCINGB0LTQtdC70LDQvdC+INGB0LXQudGH0LDRgSDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuC5cbiIKLQotIzogbGliL21lcmdlLnRjbDo0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjb25mbGljdGVkIG1lcmdlLlxuIgotIlxuIgotIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy5cbiIKLSJcbiIKLSJZb3UgbXVzdCByZXNvbHZlIHRoZW0sIHN0YWdlIHRoZSBmaWxlLCBhbmQgY29tbWl0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50IG1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKLW1zZ3N0ciAi0J/RgNC10LTRi9C00YPRidC10LUg0YHQu9C40Y/QvdC40LUg0L3QtSDQt9Cw0LLQtdGA0YjQtdC90L4g0LjQty3Qt9CwINC60L7QvdGE0LvQuNC60YLQsC5cblxu0JTQu9GPINGE0LDQudC70LAgJXMg0LLQvtC30L3QuNC6INC60L7QvdGE0LvQuNC60YIg0YHQu9C40Y/QvdC40Y8uXG5cbtCg0LDQt9GA0LXRiNC40YLQtSDQutC+0L3RhNC70LjQutGCLCDQtNC+0LHQsNCy0YzRgtC1INGE0LDQudC7INCyINC40L3QtNC10LrRgSDQuCDQt9Cw0LrQvtC80LzQuNGC0YzRgtC1LiDQotC+0LvRjNC60L4g0L/QvtGB0LvQtSDRjdGC0L7Qs9C+INC80L7QttC90L4g0L3QsNGH0LDRgtGMINGB0LvQtdC00YPRjtGJ0LXQtSDRgdC70LjRj9C90LjQtS5cbiIKLQotIzogbGliL21lcmdlLnRjbDo1NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCi0iXG4iCi0iRmlsZSAlcyBpcyBtb2RpZmllZC5cbiIKLSJcbiIKLSJZb3Ugc2hvdWxkIGNvbXBsZXRlIHRoZSBjdXJyZW50IGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYSBtZXJnZS4gIERvaW5nIHNvIHdpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKLW1zZ3N0ciAi0JLRiyDQvdCw0YXQvtC00LjRgtC10YHRjCDQsiDQv9GA0L7RhtC10YHRgdC1INC40LfQvNC10L3QtdC90LjQuS5cblxu0KTQsNC50LsgJXMg0LjQt9C80LXQvdGR0L0uXG5cbtCS0Ysg0LTQvtC70LbQvdGLINC30LDQstC10YDRiNC40YLRjCDRgtC10LrRg9GJ0LjQuSDQutC+0LzQvNC40YIg0L/QtdGA0LXQtCDQvdCw0YfQsNC70L7QvCDRgdC70LjRj9C90LjRjy4g0JIg0YHQu9GD0YfQsNC1INC90LXQvtCx0YXQvtC00LjQvNC+0YHRgtC4LCDRjdGC0L4g0L/QvtC30LLQvtC70LjRgiDQv9GA0LXRgNCy0LDRgtGMINC+0L/QtdGA0LDRhtC40Y4g0YHQu9C40Y/QvdC40Y8uXG4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgb2YgJXMiCi1tc2dzdHIgIiVzINC40LcgJXMiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTIwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2luZyAlcyBhbmQgJXMuLi4iCi1tc2dzdHIgItCh0LvQuNGP0L3QuNC1ICVzINC4ICVz4oCmIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEzMQotbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgotbXNnc3RyICLQodC70LjRj9C90LjQtSDRg9GB0L/QtdGI0L3QviDQt9Cw0LLQtdGA0YjQtdC90L4uIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEzMwotbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQstC10YDRiNC40YLRjCDRgdC70LjRj9C90LjQtS4g0KLRgNC10LHRg9C10YLRgdGPINGA0LDQt9GA0LXRiNC10L3QuNC1INC60L7QvdGE0LvQuNC60YLQsC4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTU4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2UgSW50byAlcyIKLW1zZ3N0ciAi0KHQu9C40Y/QvdC40LUg0YEgJXMiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTc3Ci1tc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCi1tc2dzdHIgItCS0LXRgNGB0LjRjywg0YEg0LrQvtGC0L7RgNC+0Lkg0L/RgNC+0LLQtdGB0YLQuCDRgdC70LjRj9C90LjQtSIKLQotIzogbGliL21lcmdlLnRjbDoyMTIKLW1zZ2lkICIiCi0iQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgotIlxuIgotIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKLW1zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0L/RgNC10YDQstCw0YLRjCDQuNGB0L/RgNCw0LLQu9C10L3QuNC1LlxuXG7Ql9Cw0LLQtdGA0YjQuNGC0LUg0YLQtdC60YPRidC10LUg0LjRgdC/0YDQsNCy0LvQtdC90LjQtSDQutC+0LzQvNC40YLQsC5cbiIKLQotIzogbGliL21lcmdlLnRjbDoyMjIKLW1zZ2lkICIiCi0iQWJvcnQgbWVyZ2U/XG4iCi0iXG4iCi0iQWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2Ugd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCi0iXG4iCi0iQ29udGludWUgd2l0aCBhYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZT8iCi1tc2dzdHIgItCf0YDQtdGA0LLQsNGC0Ywg0L7Qv9C10YDQsNGG0LjRjiDRgdC70LjRj9C90LjRjz9cblxu0J/RgNC10YDRi9Cy0LDQvdC40LUg0YLQtdC60YPRidC10LPQviDRgdC70LjRj9C90LjRjyDQv9GA0LjQstC10LTQtdGCINC6INC/0L7RgtC10YDQtSAq0JLQodCV0KUqINC90LXRgdC+0YXRgNCw0L3QtdC90L3Ri9GFINC40LfQvNC10L3QtdC90LjQuS5cblxu0J/RgNC+0LTQvtC70LbQuNGC0Yw/IgotCi0jOiBsaWIvbWVyZ2UudGNsOjIyOAotbXNnaWQgIiIKLSJSZXNldCBjaGFuZ2VzP1xuIgotIlxuIgotIlJlc2V0dGluZyB0aGUgY2hhbmdlcyB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKLSJcbiIKLSJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKLW1zZ3N0ciAi0KHQsdGA0L7RgdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8/XG5cbtCh0LHRgNC+0YEg0LjQt9C80LXQvdC10L3QuNC5INC/0YDQuNCy0LXQtNC10YIg0Log0L/QvtGC0LXRgNC1ICrQktCh0JXQpSog0L3QtdGB0L7RhdGA0LDQvdC10L3QvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5LlxuXG7Qn9GA0L7QtNC+0LvQttC40YLRjD8iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MjM5Ci1tc2dpZCAiQWJvcnRpbmciCi1tc2dzdHIgItCf0YDQtdGA0YvQstCw0Y4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MjM5Ci1tc2dpZCAiZmlsZXMgcmVzZXQiCi1tc2dzdHIgItC40LfQvNC10L3QtdC90LjRjyDQsiDRhNCw0LnQu9Cw0YUg0L7RgtC80LXQvdC10L3RiyIKLQotIzogbGliL21lcmdlLnRjbDoyNjcKLW1zZ2lkICJBYm9ydCBmYWlsZWQuIgotbXNnc3RyICLQn9GA0LXRgNCy0LDRgtGMINC90LUg0YPQtNCw0LvQvtGB0YwuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjI2OQotbXNnaWQgIkFib3J0IGNvbXBsZXRlZC4gIFJlYWR5LiIKLW1zZ3N0ciAi0J/RgNC10YDQstCw0L3Qvi4iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjgKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBiYXNlIHZlcnNpb24/IgotbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LHQsNC30L7QstGD0Y4g0LLQtdGA0YHQuNGOINC00LvRjyDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC70LjQutGC0LA/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo5Ci1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCi1tc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDQstC10YDRgdC40Y4g0LjQtyDRjdGC0L7QuSDQstC10YLQutC4INC00LvRjyDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC70LjQutGC0LA/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxMAotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIG90aGVyIGJyYW5jaD8iCi1tc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDQstC10YDRgdC40Y4g0LjQtyDQtNGA0YPQs9C+0Lkg0LLQtdGC0LrQuCDQtNC70Y8g0YDQsNC30YDQtdGI0LXQvdC40Y8g0LrQvtC90YTQu9C40LrRgtCwPyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MTQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKLSJcbiIKLSIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgotIlxuIgotIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCi1tc2dzdHIgItCS0L3QuNC80LDQvdC40LUhINCh0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L/QvtC60LDQt9GL0LLQsNC10YIg0YLQvtC70YzQutC+INC60L7QvdGE0LvQuNC60YLRg9GO0YnQuNC1INC+0YLQu9C40YfQuNGPLlxuXG4lcyDQsdGD0LTQtdGCINC/0LXRgNC10L/QuNGB0LDQvS5cblxu0K3RgtC+INC00LXQudGB0YLQstC40LUg0LzQvtC20L3QviDQvtGC0LzQtdC90LjRgtGMINGC0L7Qu9GM0LrQviDQv9C10YDQtdC30LDQv9GD0YHQutC+0Lwg0L7Qv9C10YDQsNGG0LjQuCDRgdC70LjRj9C90LjRjy4iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmlsZSAlcyBzZWVtcyB0byBoYXZlIHVucmVzb2x2ZWQgY29uZmxpY3RzLCBzdGlsbCBzdGFnZT8iCi1tc2dzdHIgItCf0L7RhdC+0LbQtSwg0YfRgtC+INGE0LDQudC7ICVzINGB0L7QtNC10YDQttC40YIg0L3QtdGA0LDQt9GA0LXRiNC10L3QvdGL0LUg0LrQvtC90YTQu9C40LrRgtGLLiDQn9GA0L7QtNC+0LvQttC40YLRjCDQuNC90LTQtdC60YHQsNGG0LjRjj8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWRkaW5nIHJlc29sdXRpb24gZm9yICVzIgotbXNnc3RyICLQlNC+0LHQsNCy0LvRj9GOINGA0LXQt9GD0LvRjNGC0LDRgiDRgNCw0LfRgNC10YjQtdC90LjRjyDQtNC70Y8gJXMiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQotbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKLW1zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwINGB0LvQuNGP0L3QuNGPINC90LUg0L7QsdGA0LDQsdCw0YLRi9Cy0LDQtdGCINC60L7QvdGE0LvQuNC60YLRiyDRgSDRg9C00LDQu9C10L3QuNC10Lwg0LjQu9C4INGD0YfQsNGB0YLQuNC10Lwg0YHRgdGL0LvQvtC6IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKLW1zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgotbXNnc3RyICLQmtC+0L3RhNC70LjQutGC0YPRjtGJ0LjQuSDRhNCw0LnQuyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKLW1zZ3N0ciAiwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQv9GA0L7Qs9GA0LDQvNC80L7QuSDRgdC70LjRj9C90LjRjyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MjY4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgotbXNnc3RyICLQndC10L/QvtC00LTQtdGA0LbQuNCy0LDQtdC80LDRjyDQv9GA0L7Qs9GA0LDQvNC80LAg0YHQu9C40Y/QvdC40Y8gwqslc8K7IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozMDMKLW1zZ2lkICJNZXJnZSB0b29sIGlzIGFscmVhZHkgcnVubmluZywgdGVybWluYXRlIGl0PyIKLW1zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwINGB0LvQuNGP0L3QuNGPINGD0LbQtSDRgNCw0LHQvtGC0LDQtdGCLiDQn9GA0LXRgNCy0LDRgtGMPyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MzIzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIkVycm9yIHJldHJpZXZpbmcgdmVyc2lvbnM6XG4iCi0iJXMiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQv9C+0LvRg9GH0LXQvdC40Y8g0LLQtdGA0YHQuNC5OlxuJXMiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM0MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCi0iXG4iCi0iJXMiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0L/Rg9GB0LrQsCDQv9GA0L7Qs9GA0LDQvNC80Ysg0YHQu9C40Y/QvdC40Y86XG5cbiVzIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozNDcKLW1zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCi1tc2dzdHIgItCX0LDQv9GD0YHQuiDQv9GA0L7Qs9GA0LDQvNC80Ysg0YHQu9C40Y/QvdC40Y/igKYiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM3NSBsaWIvbWVyZ2V0b29sLnRjbDozODMKLW1zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQv9GA0L7Qs9GA0LDQvNC80Ysg0YHQu9C40Y/QvdC40Y8uIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgZ2xvYmFsIGVuY29kaW5nICclcyciCi1tc2dzdHIgItCd0LXQstC10YDQvdCw0Y8g0LPQu9C+0LHQsNC70YzQvdCw0Y8g0LrQvtC00LjRgNC+0LLQutCwIMKrJXPCuyIKLQotIzogbGliL29wdGlvbi50Y2w6MTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKLW1zZ3N0ciAi0J3QtdCy0LXRgNC90LDRjyDQutC+0LTQuNGA0L7QstC60LAg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDCqyVzwrsiCi0KLSM6IGxpYi9vcHRpb24udGNsOjExNwotbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCi1tc2dzdHIgItCS0L7RgdGB0YLQsNC90L7QstC40YLRjCDQvdCw0YHRgtGA0L7QudC60Lgg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjEyMQotbXNnaWQgIlNhdmUiCi1tc2dzdHIgItCh0L7RhdGA0LDQvdC40YLRjCIKLQotIzogbGliL29wdGlvbi50Y2w6MTMxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgUmVwb3NpdG9yeSIKLW1zZ3N0ciAi0JTQu9GPINGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gJXMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjEzMgotbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCi1tc2dzdHIgItCe0LHRidC40LUgKNC00LvRjyDQstGB0LXRhSDRgNC10L/QvtC30LjRgtC+0YDQuNC10LIpIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMzgKLW1zZ2lkICJVc2VyIE5hbWUiCi1tc2dzdHIgItCY0LzRjyDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8iCi0KLSM6IGxpYi9vcHRpb24udGNsOjEzOQotbXNnaWQgIkVtYWlsIEFkZHJlc3MiCi1tc2dzdHIgItCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDEKLW1zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKLW1zZ3N0ciAi0KHRg9C80LzQsNGA0L3QvtC1INGB0L7QvtCx0YnQtdC90LjQtSDQv9GA0Lgg0YHQu9C40Y/QvdC40LgiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0MgotbXNnaWQgIk1lcmdlIFZlcmJvc2l0eSIKLW1zZ3N0ciAi0KPRgNC+0LLQtdC90Ywg0LTQtdGC0LDQu9GM0L3QvtGB0YLQuCDRgdC+0L7QsdGJ0LXQvdC40Lkg0L/RgNC4INGB0LvQuNGP0L3QuNC4IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDMKLW1zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgotbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC+0YLRh9C10YIg0L7QsSDQuNC30LzQtdC90LXQvdC40Y/RhSDQv9C+0YHQu9C1INGB0LvQuNGP0L3QuNGPIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDQKLW1zZ2lkICJVc2UgTWVyZ2UgVG9vbCIKLW1zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC00LvRjyDRgdC70LjRj9C90LjRjyDQv9GA0L7Qs9GA0LDQvNC80YMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0NgotbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCi1tc2dzdHIgItCU0L7QstC10YDRj9GC0Ywg0LLRgNC10LzQtdC90Lgg0LzQvtC00LjRhNC40LrQsNGG0LjQuCDRhNCw0LnQu9CwIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDcKLW1zZ2lkICJQcnVuZSBUcmFja2luZyBCcmFuY2hlcyBEdXJpbmcgRmV0Y2giCi1tc2dzdHIgItCn0LjRgdGC0LrQsCDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDQstC10YLQvtC6INC/0YDQuCDQuNC30LLQu9C10YfQtdC90LjQuCDQuNC30LzQtdC90LXQvdC40LkiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0OAotbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgotbXNnc3RyICLQotCw0LrQvtC1INC20LUg0LjQvNGPLCDQutCw0Log0Lgg0YMg0L7RgtGB0LvQtdC20LjQstCw0LXQvNC+0Lkg0LLQtdGC0LrQuCIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ5Ci1tc2dpZCAiQmxhbWUgQ29weSBPbmx5IE9uIENoYW5nZWQgRmlsZXMiCi1tc2dzdHIgItCf0L7QuNGB0Log0LrQvtC/0LjQuSDRgtC+0LvRjNC60L4g0LIg0LjQt9C80LXQvdGR0L3QvdGL0YUg0YTQsNC50LvQsNGFIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTAKLW1zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKLW1zZ3N0ciAi0JzQuNC90LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdC40LzQstC+0LvQvtCyINC00LvRjyDQv9C+0LjRgdC60LAg0LrQvtC/0LjQuSIKLQotIzogbGliL29wdGlvbi50Y2w6MTUxCi1tc2dpZCAiQmxhbWUgSGlzdG9yeSBDb250ZXh0IFJhZGl1cyAoZGF5cykiCi1tc2dzdHIgItCg0LDQtNC40YPRgSDQuNGB0YLQvtGA0LjRh9C10YHQutC+0LPQviDQutC+0L3RgtC10LrRgdGC0LAgKNCyINC00L3Rj9GFKSIKLQotIzogbGliL29wdGlvbi50Y2w6MTUyCi1tc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKLW1zZ3N0ciAi0KfQuNGB0LvQviDRgdGC0YDQvtC6INCyINC60L7QvdGC0LXQutGB0YLQtSBkaWZmIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTMKLW1zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgotbXNnc3RyICLQqNC40YDQuNC90LAg0YLQtdC60YHRgtCwINGB0L7QvtCx0YnQtdC90LjRjyDQutC+0LzQvNC40YLQsCIKLQotIzogbGliL29wdGlvbi50Y2w6MTU0Ci1tc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgotbXNnc3RyICLQqNCw0LHQu9C+0L0g0LTQu9GPINC40LzQtdC90Lgg0L3QvtCy0L7QuSDQstC10YLQutC4IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTUKLW1zZ2lkICJEZWZhdWx0IEZpbGUgQ29udGVudHMgRW5jb2RpbmciCi1tc2dzdHIgItCa0L7QtNC40YDQvtCy0LrQsCDRgdC+0LTQtdGA0LbQsNC90LjRjyDRhNCw0LnQu9CwINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyMDMKLW1zZ2lkICJDaGFuZ2UiCi1tc2dzdHIgItCY0LfQvNC10L3QuNGC0YwiCi0KLSM6IGxpYi9vcHRpb24udGNsOjIzMAotbXNnaWQgIlNwZWxsaW5nIERpY3Rpb25hcnk6IgotbXNnc3RyICLQodC70L7QstCw0YDRjCDQtNC70Y8g0L/RgNC+0LLQtdGA0LrQuCDQv9GA0LDQstC+0L/QuNGB0LDQvdC40Y86IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyNTQKLW1zZ2lkICJDaGFuZ2UgRm9udCIKLW1zZ3N0ciAi0JjQt9C80LXQvdC40YLRjCIKLQotIzogbGliL29wdGlvbi50Y2w6MjU4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hvb3NlICVzIgotbXNnc3RyICLQktGL0LHQtdGA0LjRgtC1ICVzIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyNjQKLW1zZ2lkICJwdC4iCi1tc2dzdHIgInB0LiIKLQotIzogbGliL29wdGlvbi50Y2w6Mjc4Ci1tc2dpZCAiUHJlZmVyZW5jZXMiCi1tc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCIKLQotIzogbGliL29wdGlvbi50Y2w6MzE0Ci1tc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvQvdC+0YHRgtGM0Y4g0YHQvtGF0YDQsNC90LjRgtGMINC90LDRgdGC0YDQvtC50LrQuDoiCi0KLSM6IGxpYi9yZW1vdGUudGNsOjE2MwotbXNnaWQgIlJlbW92ZSBSZW1vdGUiCi1tc2dzdHIgItCj0LTQsNC70LjRgtGMINGB0YHRi9C70LrRgyDQvdCwINCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCi0KLSM6IGxpYi9yZW1vdGUudGNsOjE2OAotbXNnaWQgIlBydW5lIGZyb20iCi1tc2dzdHIgItCn0LjRgdGC0LrQsCIKLQotIzogbGliL3JlbW90ZS50Y2w6MTczCi1tc2dpZCAiRmV0Y2ggZnJvbSIKLW1zZ3N0ciAi0JjQt9Cy0LvQtdGH0LXQvdC40LUg0LjQtyIKLQotIzogbGliL3JlbW90ZS50Y2w6MjE1Ci1tc2dpZCAiUHVzaCB0byIKLW1zZ3N0ciAi0J7RgtC/0YDQsNCy0LjRgtGMIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTkKLW1zZ2lkICJBZGQgUmVtb3RlIgotbXNnc3RyICLQl9Cw0YDQtdCz0LjRgdGC0YDQuNGA0L7QstCw0YLRjCDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjQKLW1zZ2lkICJBZGQgTmV3IFJlbW90ZSIKLW1zZ3N0ciAi0JTQvtCx0LDQstC40YLRjCDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjggbGliL3Rvb2xzX2RsZy50Y2w6MzYKLW1zZ2lkICJBZGQiCi1tc2dzdHIgItCU0L7QsdCw0LLQuNGC0YwiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDozNwotbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgotbXNnc3RyICLQmNC90YTQvtGA0LzQsNGG0LjRjyDQviDQstC90LXRiNC90LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKLW1zZ2lkICJMb2NhdGlvbjoiCi1tc2dzdHIgItCf0L7Qu9C+0LbQtdC90LjQtToiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MgotbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgotbXNnc3RyICLQodC70LXQtNGD0Y7RidCw0Y8g0L7Qv9C10YDQsNGG0LjRjyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjY1Ci1tc2dpZCAiRmV0Y2ggSW1tZWRpYXRlbHkiCi1tc2dzdHIgItCh0YDQsNC30YMg0LjQt9Cy0LvQtdGH0Ywg0LjQt9C80LXQvdC10L3QuNGPIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzEKLW1zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgotbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0YLRjCDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC4INC+0YLQv9GA0LDQstC40YLRjCIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjc3Ci1tc2dpZCAiRG8gTm90aGluZyBFbHNlIE5vdyIKLW1zZ3N0ciAi0JHQvtC70YzRiNC1INC90LjRh9C10LPQviDQvdC1INC00LXQu9Cw0YLRjCIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMQotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCi1tc2dzdHIgItCj0LrQsNC20LjRgtC1INC90LDQt9Cy0LDQvdC40LUg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjExNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgcmVtb3RlIG5hbWUuIgorIzogYnVpbHRpbi9yZW1vdGUuYzoxOTggYnVpbHRpbi9yZW1vdGUuYzo2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIKIG1zZ3N0ciAiwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNC+0L/Rg9GB0YLQuNC80YvQvCDQuNC80LXQvdC10Lwg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPLiIKIAotIzogbGliL3JlbW90ZV9hZGQudGNsOjEyNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBhZGQgcmVtb3RlICclcycgb2YgbG9jYXRpb24gJyVzJy4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LTQvtCx0LDQstC40YLRjCDCqyVzwrsg0LjQtyDCqyVzwrsuICIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0YHRgtGA0L7QuNGC0Ywg0LzQsNGB0YLQtdGAINCy0LXRgtC60YMgwqslc8K7IgogCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMzIGxpYi90cmFuc3BvcnQudGNsOjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmZXRjaCAlcyIKLW1zZ3N0ciAi0LjQt9Cy0LvQtdGH0LXQvdC40LUgJXMiCisjOiBidWlsdGluL3JlbW90ZS5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNC30LLQu9C10YfRjCDQutCw0YDRgtGDINC00LvRjyDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YDQsCDRgdGB0YvQu9C60LggJXMiCiAKLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyB0aGUgJXMiCi1tc2dzdHIgItCY0LfQstC70LXRh9C10L3QuNC1ICVzIgorIzogYnVpbHRpbi9yZW1vdGUuYzo0NDMgYnVpbHRpbi9yZW1vdGUuYzo0NTEKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICIo0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQsNGPKSIKIAotIzogbGliL3JlbW90ZV9hZGQudGNsOjE1NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRvIG5vdCBrbm93IGhvdyB0byBpbml0aWFsaXplIHJlcG9zaXRvcnkgYXQgbG9jYXRpb24gJyVzJy4iCi1tc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDRgtGMINGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LIgwqslc8K7LiIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDU1Cittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIijRg9C00LDQu9C10L3QvdCw0Y8pIgogCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzIGxpYi90cmFuc3BvcnQudGNsOjI1IGxpYi90cmFuc3BvcnQudGNsOjYzCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo4MQotIywgdGNsLWZvcm1hdAotbXNnaWQgInB1c2ggJXMiCi1tc2dzdHIgItC+0YLQv9GA0LDQstC40YLRjCAlcyIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjI5IGJ1aWx0aW4vcmVtb3RlLmM6NzY1IGJ1aWx0aW4vcmVtb3RlLmM6ODY0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAnJXMnIgorbXNnc3RyICIiCiAKLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHVwIHRoZSAlcyAoYXQgJXMpIgotbXNnc3RyICLQndCw0YHRgtGA0L7QudC60LAgJXMgKNCyICVzKSIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMINGB0LXQutGG0LjRjiDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lgg0YEgwqslc8K7INC90LAgwqslc8K7IgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKLW1zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgotbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INCy0LXRgtC60Lgg0LLQviDQstC90LXRiNC90LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQ3Ci1tc2dpZCAiRnJvbSBSZXBvc2l0b3J5IgotbXNnc3RyICLQmNC3INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTAgbGliL3RyYW5zcG9ydC50Y2w6MTM0Ci1tc2dpZCAiUmVtb3RlOiIKLW1zZ3N0ciAi0LLQvdC10YjQvdC40Lk6IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjE0OQotbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCi1tc2dzdHIgItCj0LrQsNC30LDQvdC90L7QtSDQv9C+0LvQvtC20LXQvdC40LU6IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg0Ci1tc2dpZCAiQnJhbmNoZXMiCi1tc2dzdHIgItCS0LXRgtC60LgiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTA5Ci1tc2dpZCAiRGVsZXRlIE9ubHkgSWYiCi1tc2dzdHIgItCj0LTQsNC70LjRgtGMINGC0L7Qu9GM0LrQviDQsiDRgdC70YPRh9Cw0LUsINC10YHQu9C4IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMQotbXNnaWQgIk1lcmdlZCBJbnRvOiIKLW1zZ3N0ciAi0KHQu9C40Y/QvdC40LUg0YE6IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MgotbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKLW1zZ3N0ciAi0JTQu9GPINC+0L/QtdGA0LDRhtC40LggwqvQodC70LjRj9C90LjQtSDRgcK7INGC0YDQtdCx0YPQtdGC0YHRjyDRg9C60LDQt9Cw0YLRjCDQstC10YLQutGDLiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODQKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjY2CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKLSJcbiIKLSIgLSAlcyIKLW1zZ3N0ciAi0KHQu9C10LTRg9GO0YnQuNC1INCy0LXRgtC60Lgg0LzQvtCz0YPRgiDQsdGL0YLRjCDQvtCx0YrQtdC00LjQvdC10L3RiyDRgSAlcyDQv9GA0Lgg0L/QvtC80L7RidC4INC+0L/QtdGA0LDRhtC40Lgg0YHQu9C40Y/QvdC40Y86XG5cbiAtICVzIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICLQndC1INC+0LHQvdC+0LLQu9GP0Y4g0L3QtdGB0YLQsNC90LTQsNGA0YLQvdGD0Y4g0YHQv9C10YbQuNGE0LjQutCw0YLQvtGAINGB0YHRi9C70LrQuCDQtNC70Y8g0LjQt9Cy0LvQtdGH0LXQvdC40Y9cblx0JXNcblx00J/QvtC20LDQu9GD0LnRgdGC0LAsINC10YHQu9C4INGC0YDQtdCx0YPQtdGC0YHRjywg0L7QsdC90L7QstC40YLQtSDQutC+0L3RhNC40LPRg9GA0LDRhtC40Y4g0LLRgNGD0YfQvdGD0Y4uIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4OQotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9yZW1vdGUuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywgwqslc8K7IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODAyCiBtc2dpZCAiIgotIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgotIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgotbXNnc3RyICLQndC10LrQvtGC0L7RgNGL0LUg0YLQtdGB0YLRiyDQvdCwINGB0LvQuNGP0L3QuNC1INC90LUg0L/RgNC+0YjQu9C4LCDQv9C+0YLQvtC80YMg0YfRgtC+INCy0Ysg0L3QtSDQuNC30LLQu9C10LrQu9C4INC90LXQvtCx0YXQvtC00LjQvNGL0LUg0LrQvtC80LzQuNGC0YsuINCf0L7Qv9GL0YLQsNC50YLQtdGB0Ywg0LjQt9Cy0LvQtdGH0Ywg0LjRhSDQuNC3ICVzLiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICLQn9GA0LjQvNC10YfQsNC90LjQtTog0J3QtdC60L7RgtC+0YDRi9C1INCy0LXRgtC60Lgg0LLQvdC1INC40LXRgNCw0YDRhdC40LggcmVmcy9yZW1vdGVzLyDQvdC1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90Ys7XG7Rh9GC0L7QsdGLINGD0LTQsNC70LjRgtGMINC40YUsINC40YHQv9C+0LvRjNC30YPQudGC0LU6IgorbXNnc3RyWzFdICLQn9GA0LjQvNC10YfQsNC90LjQtTog0J3QtdC60L7RgtC+0YDRi9C1INCy0LXRgtC60Lgg0LLQvdC1INC40LXRgNCw0YDRhdC40LggcmVmcy9yZW1vdGVzLyDQvdC1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90Ys7XG7Rh9GC0L7QsdGLINGD0LTQsNC70LjRgtGMINC40YUsINC40YHQv9C+0LvRjNC30YPQudGC0LU6IgorbXNnc3RyWzJdICLQn9GA0LjQvNC10YfQsNC90LjQtTog0J3QtdC60L7RgtC+0YDRi9C1INCy0LXRgtC60Lgg0LLQvdC1INC40LXRgNCw0YDRhdC40LggcmVmcy9yZW1vdGVzLyDQvdC1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90Ys7XG7Rh9GC0L7QsdGLINGD0LTQsNC70LjRgtGMINC40YUsINC40YHQv9C+0LvRjNC30YPQudGC0LU6IgorbXNnc3RyWzNdICLQn9GA0LjQvNC10YfQsNC90LjQtTog0J3QtdC60L7RgtC+0YDRi9C1INCy0LXRgtC60Lgg0LLQvdC1INC40LXRgNCw0YDRhdC40LggcmVmcy9yZW1vdGVzLyDQvdC1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90Ys7XG7Rh9GC0L7QsdGLINGD0LTQsNC70LjRgtGMINC40YUsINC40YHQv9C+0LvRjNC30YPQudGC0LU6IgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNwotbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKLW1zZ3N0ciAi0KPQutCw0LbQuNGC0LUg0L7QtNC90YMg0LjQu9C4INC90LXRgdC60L7Qu9GM0LrQviDQstC10YLQvtC6INC00LvRjyDRg9C00LDQu9C10L3QuNGPLiIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCDRgdC10LrRhtC40Y4g0YTQsNC50LvQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lggwqslc8K7IgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCi1tc2dzdHIgItCj0LTQsNC70LXQvdC40LUg0LLQtdGC0L7QuiDQuNC3ICVzIgorIzogYnVpbHRpbi9yZW1vdGUuYzo5MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvJXMpIgorbXNnc3RyICIg0L3QvtCy0LDRjyAo0YHQu9C10LTRg9GO0YnQtdC1INC40LfQstC70LXRh9C10L3QuNC1INGB0L7RhdGA0LDQvdC40YIg0LXQtSDQsiByZW1vdGVzLyVzKSIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTIKLW1zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKLW1zZ3N0ciAi0J3QtSDRg9C60LDQt9Cw0L0g0YDQtdC/0L7Qt9C40YLQvtGA0LjQuS4iCisjOiBidWlsdGluL3JlbW90ZS5jOjkyMAorbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIg0L7RgtGB0LvQtdC20LjQstCw0LXRgtGB0Y8iCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCi1tc2dzdHIgItCf0LXRgNC10YfQuNGC0YvQstCw0L3QuNC1ICVz4oCmIgorIzogYnVpbHRpbi9yZW1vdGUuYzo5MjIKK21zZ2lkICIgc3RhbGUgKHVzZSAnZ2l0IHJlbW90ZSBwcnVuZScgdG8gcmVtb3ZlKSIKK21zZ3N0ciAiINC90LXQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QsCAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCByZW1vdGUgcHJ1bmXCuywg0YfRgtC+0LHRiyDRg9C00LDQu9C40YLRjCkiCiAKLSM6IGxpYi9zZWFyY2gudGNsOjIxCi1tc2dpZCAiRmluZDoiCi1tc2dzdHIgItCf0L7QuNGB0Lo6IgorIzogYnVpbHRpbi9yZW1vdGUuYzo5MjQKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgogCi0jOiBsaWIvc2VhcmNoLnRjbDoyMwotbXNnaWQgIk5leHQiCi1tc2dzdHIgItCU0LDQu9GM0YjQtSIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYnJhbmNoLiVzLm1lcmdlOyBjYW5ub3QgcmViYXNlIG9udG8gPiAxIGJyYW5jaCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IGJyYW5jaC4lcy5tZXJnZTsg0L3QtdCy0L7Qt9C80L7QttC90L4g0L/QtdGA0LXQvNC10YHRgtC40YLRjCDQsdC+0LvQtdC1INGH0LXQvCDQvdCw0LQgMSDQstC10YLQutC+0LkiCiAKLSM6IGxpYi9zZWFyY2gudGNsOjI0Ci1tc2dpZCAiUHJldiIKLW1zZ3N0ciAi0J7QsdGA0LDRgtC90L4iCisjOiBidWlsdGluL3JlbW90ZS5jOjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgb250byByZW1vdGUgJXMiCittc2dzdHIgItC/0LXRgNC10LzQtdGJ0LDQtdGC0YHRjyDQuNC90YLQtdGA0LDQutGC0LjQstC90L4g0L3QsNC0INCy0L3QtdGI0L3QtdC5INCy0LXRgtC60L7QuSAlcyIKIAotIzogbGliL3NlYXJjaC50Y2w6MjUKLW1zZ2lkICJDYXNlLVNlbnNpdGl2ZSIKLW1zZ3N0ciAi0JjQs9C9LiDQsdC+0LvRjNGI0LjQtS/QvNCw0LvQtdC90YzQutC40LUiCisjOiBidWlsdGluL3JlbW90ZS5jOjk3NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgKHdpdGggbWVyZ2VzKSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvc2hvcnRjdXQudGNsOjIxIGxpYi9zaG9ydGN1dC50Y2w6NjIKLW1zZ2lkICJDYW5ub3Qgd3JpdGUgc2hvcnRjdXQ6IgotbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQt9Cw0L/QuNGB0LDRgtGMINGB0YHRi9C70LrRgzoiCisjOiBidWlsdGluL3JlbW90ZS5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICLQv9C10YDQtdC80LXRidCw0LXRgtGB0Y8g0L3QsNC0INCy0L3QtdGI0L3QtdC5INCy0LXRgtC60L7QuSAlcyIKIAotIzogbGliL3Nob3J0Y3V0LnRjbDoxMzcKLW1zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCi1tc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC30LDQv9C40YHQsNGC0Ywg0LfQvdCw0YfQvtC6OiIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiDQsdGD0LTQtdGCINGB0LvQuNGC0LAg0YEg0LLQvdC10YjQvdC10Lkg0LLQtdGC0LrQvtC5ICVzIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKLW1zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICLQndC10L/QvtC00LTQtdGA0LbQuNCy0LDQtdC80LDRjyDQv9GA0L7Qs9GA0LDQvNC80LAg0L/RgNC+0LLQtdGA0LrQuCDQv9GA0LDQstC+0L/QuNGB0LDQvdC40Y8iCisjOiBidWlsdGluL3JlbW90ZS5jOjk4NgorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgItCx0YPQtNC10YIg0YHQu9C40YLQsCDRgSDQstC90LXRiNC90LXQuSDQstC10YLQutC+0LkgJXMiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQotbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgotbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC/0YDQsNCy0L7Qv9C40YHQsNC90LjRjyDQvdC1INC00L7RgdGC0YPQv9C90LAiCisjOiBidWlsdGluL3JlbW90ZS5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlLSpzICAgIGFuZCB3aXRoIHJlbW90ZSAlc1xuIgorbXNnc3RyICIlLSpzICAgINC4INGBINCy0L3QtdGI0L3QtdC5INCy0LXRgtC60L7QuSAlc1xuIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NjgKLW1zZ2lkICJJbnZhbGlkIHNwZWxsIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24iCi1tc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90LDRjyDQutC+0L3RhNC40LPRg9GA0LDRhtC40Y8g0L/RgNC+0LPRgNCw0LzQvNGLINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPIgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMDMyCittc2dpZCAiY3JlYXRlIgorbXNnc3RyICLRgdC+0LfQtNCw0L3QsCIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgotbXNnc3RyICLQodC70L7QstCw0YDRjCDQstC10YDQvdGD0YIg0LogJXMuIgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMDM1Cittc2dpZCAiZGVsZXRlIgorbXNnc3RyICLRg9C00LDQu9C10L3QsCIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjczCi1tc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKLW1zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPINC90LUg0YHQvNC+0LPQu9CwINC30LDQv9GD0YHRgtC40YLRjNGB0Y8iCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzkKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICLRg9C20LUg0LDQutGC0YPQsNC70YzQvdCwIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6ODAKLW1zZ2lkICJVbnJlY29nbml6ZWQgc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAi0J3QtdGA0LDRgdC/0L7Qt9C90LDQvdC90LDRjyDQv9GA0L7Qs9GA0LDQvNC80LAg0L/RgNC+0LLQtdGA0LrQuCDQv9GA0LDQstC+0L/QuNGB0LDQvdC40Y8iCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDIKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICLQstC+0LfQvNC+0LbQvdCwINC/0LXRgNC10LzQvtGC0LrQsCDQstC/0LXRgNC10LQiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDoxODYKLW1zZ2lkICJObyBTdWdnZXN0aW9ucyIKLW1zZ3N0ciAi0JjRgdC/0YDQsNCy0LvQtdC90LjQuSDQvdC1INC90LDQudC00LXQvdC+IgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQ1Cittc2dpZCAibG9jYWwgb3V0IG9mIGRhdGUiCittc2dzdHIgItC70L7QutCw0LvRjNC90LDRjyDQstC10YLQutCwINGD0YHRgtCw0YDQtdC70LAiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKLW1zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCDQv9GA0L7QstC10YDQutC4INC/0YDQsNCy0L7Qv9C40YHQsNC90LjRjyDQv9GA0LXRgNCy0LDQu9CwINC/0LXRgNC10LTQsNGH0YMg0LTQsNC90L3Ri9GFIgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzINCx0YPQtNC10YIg0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4g0L7RgtC/0YDQsNCy0LvQtdC90LAg0LIgJS0qcyAoJXMpIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6MzkyCi1tc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQv9GA0L7QstC10YDQutC4INC/0YDQsNCy0L7Qv9C40YHQsNC90LjRjyIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyDQsdGD0LTQtdGCINC+0YLQv9GA0LDQstC70LXQvdCwINCyICUtKnMgKCVzKSIKIAotIzogbGliL3NzaGtleS50Y2w6MzEKLW1zZ2lkICJObyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAi0JrQu9GO0Ycg0L3QtSDQvdCw0LnQtNC10L0iCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyDQsdGD0LTQtdGCINC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+INC+0YLQv9GA0LDQstC70LXQvdCwINCyICVzIgogCi0jOiBsaWIvc3Noa2V5LnRjbDozNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZvdW5kIGEgcHVibGljIGtleSBpbjogJXMiCi1tc2dzdHIgItCf0YPQsdC70LjRh9C90YvQuSDQutC70Y7RhyDQuNC3ICVzIgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMg0LHRg9C00LXRgiDQvtGC0L/RgNCw0LLQu9C10L3QsCDQsiAlcyIKIAotIzogbGliL3NzaGtleS50Y2w6NDAKLW1zZ2lkICJHZW5lcmF0ZSBLZXkiCi1tc2dzdHIgItCh0L7Qt9C00LDRgtGMINC60LvRjtGHIgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMTMwCittc2dpZCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiCittc2dzdHIgItC90LUg0L7Qv9GA0LDRiNC40LLQsNGC0Ywg0LLQvdC10YjQvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKIAotIzogbGliL3NzaGtleS50Y2w6NTYKLW1zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKLW1zZ3N0ciAi0KHQutC+0L/QuNGA0L7QstCw0YLRjCDQsiDQsdGD0YTQtdGAINC+0LHQvNC10L3QsCIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NworIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAiKiDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5ICVzIgogCi0jOiBsaWIvc3Noa2V5LnRjbDo3MAotbXNnaWQgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5IgotbXNnc3RyICLQktCw0Ygg0L/Rg9Cx0LvQuNGH0L3Ri9C5INC60LvRjtGHIE9wZW5TU0giCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIFVSTCDQtNC70Y8g0LjQt9Cy0LvQtdGH0LXQvdC40Y86ICVzIgogCi0jOiBsaWIvc3Noa2V5LnRjbDo3OAotbXNnaWQgIkdlbmVyYXRpbmcuLi4iCi1tc2dzdHIgItCh0L7Qt9C00LDQvdC40LXigKYiCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTkgYnVpbHRpbi9yZW1vdGUuYzoxMTc1IGJ1aWx0aW4vcmVtb3RlLmM6MTMxNAorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIo0L3QtdGCIFVSTCkiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjg0Ci0jLCB0Y2wtZm9ybWF0CisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uICc6JyBzaG91bGQgYWxpZ24KKyMuIHdpdGggdGhlIG9uZSBpbiAiIEZldGNoIFVSTDogJXMiCisjLiB0cmFuc2xhdGlvbi4KKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3MyBidWlsdGluL3JlbW90ZS5jOjExNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIgICAgVVJMINC00LvRjyDQvtGC0L/RgNCw0LLQutC4OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc3IGJ1aWx0aW4vcmVtb3RlLmM6MTE3OSBidWlsdGluL3JlbW90ZS5jOjExODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaDogJXMiCittc2dzdHIgIiAgSEVBRCDQstC10YLQutCwOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc3Cittc2dpZCAiKG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiKNC90LUg0LfQsNC/0YDQsNGI0LjQstCw0LvRgdGPKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc5Cittc2dpZCAiKHVua25vd24pIgorbXNnc3RyICIo0L3QtdC40LfQstC10YHRgtC90L4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIgIEhFQUQg0LLQtdGC0LrQsCAoSEVBRCDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0L3QtdC+0LTQvdC+0LfQvdCw0YfQvdGL0LksINC80L7QttC10YIg0LHRi9GC0Ywg0L7QtNC90LjQvCDQuNC3KTpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAg0JLQvdC10YjQvdGP0Y8g0LLQtdGC0LrQsDolcyIKK21zZ3N0clsxXSAiICDQktC90LXRiNC90LjQtSDQstC10YLQutC4OiVzIgorbXNnc3RyWzJdICIgINCS0L3QtdGI0L3QuNC1INCy0LXRgtC60Lg6JXMiCittc2dzdHJbM10gIiAg0JLQvdC10YjQvdC40LUg0LLQtdGC0LrQuDolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTk4IGJ1aWx0aW4vcmVtb3RlLmM6MTIyNAorbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiICjRgdGC0LDRgtGD0YEg0L3QtSDQt9Cw0L/RgNCw0YjQuNCy0LDQu9GB0Y8pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDcKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiICDQm9C+0LrQsNC70YzQvdCw0Y8g0LLQtdGC0LrQsCwg0L3QsNGB0YLRgNC+0LXQvdC90LDRjyDQtNC70Y8gwqtnaXQgcHVsbMK7OiIKK21zZ3N0clsxXSAiICDQm9C+0LrQsNC70YzQvdGL0LUg0LLQtdGC0LrQuCwg0L3QsNGB0YLRgNC+0LXQvdC90YvQtSDQtNC70Y8gwqtnaXQgcHVsbMK7OiIKK21zZ3N0clsyXSAiICDQm9C+0LrQsNC70YzQvdGL0LUg0LLQtdGC0LrQuCwg0L3QsNGB0YLRgNC+0LXQvdC90YvQtSDQtNC70Y8gwqtnaXQgcHVsbMK7OiIKK21zZ3N0clszXSAiICDQm9C+0LrQsNC70YzQvdGL0LUg0LLQtdGC0LrQuCwg0L3QsNGB0YLRgNC+0LXQvdC90YvQtSDQtNC70Y8gwqtnaXQgcHVsbMK7OiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjE1Cittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiINCb0L7QutCw0LvRjNC90YvQtSDRgdGB0YvQu9C60LgsINC30LXRgNC60LDQu9C40YDRg9C10LzRi9C1INGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IHB1c2jCuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzBdICIgINCb0L7QutCw0LvRjNC90LDRjyDRgdGB0YvQu9C60LAsINC90LDRgdGC0YDQvtC10L3QvdCw0Y8g0LTQu9GPIMKrZ2l0IHB1c2jCuyVzOiIKK21zZ3N0clsxXSAiICDQm9C+0LrQsNC70YzQvdGL0LUg0YHRgdGL0LvQutC4LCDQvdCw0YHRgtGA0L7QtdC90L3Ri9C1INC00LvRjyDCq2dpdCBwdXNowrslczoiCittc2dzdHJbMl0gIiAg0JvQvtC60LDQu9GM0L3Ri9C1INGB0YHRi9C70LrQuCwg0L3QsNGB0YLRgNC+0LXQvdC90YvQtSDQtNC70Y8gwqtnaXQgcHVzaMK7JXM6IgorbXNnc3RyWzNdICIgINCb0L7QutCw0LvRjNC90YvQtSDRgdGB0YvQu9C60LgsINC90LDRgdGC0YDQvtC10L3QvdGL0LUg0LTQu9GPIMKrZ2l0IHB1c2jCuyVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQyCittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICLRg9GB0YLQsNC90L7QstC40YLRjCByZWZzL3JlbW90ZXMvPNC40LzRjz4vSEVBRCDQsiDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC4INC+0YIg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDQKK21zZ2lkICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCByZWZzL3JlbW90ZXMvPNC40LzRjz4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU5Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtC/0YDQtdC00LXQu9C40YLRjCDQstC90LXRiNC90LjQuSBIRUFEIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNjEKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAi0J3QtdGB0LrQvtC70YzQutC+INCy0L3QtdGI0L3QuNGFIEhFQUQg0LLQtdGC0L7Qui4g0KPQutCw0LbQuNGC0LUg0Y/QstC90L4g0L7QtNC90YMg0LjQtyDQvdC40YU6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIHJlZjogJXMiCittc2dzdHIgItCd0LXQtNC+0L/Rg9GB0YLQuNC80LDRjyDRgdGB0YvQu9C60LA6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDRgdGC0YDQvtC40YLRjCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyDQsdGD0LTQtdGCINCy0LjRgdGP0YnQtdC5INCy0LXRgtC60L7QuSEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwMAorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyDRgdGC0LDQu9CwINCy0LjRgdGP0YnQtdC5INCy0LXRgtC60L7QuSEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICLQntGH0LjRgdGC0LrQsCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzExCisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIlVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyNworIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIgKiBb0LHRg9C00LXRgiDRg9C00LDQu9C10L3QsF0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMzMAorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiICogW9GD0LTQsNC70LXQvdCwXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzc1Cittc2dpZCAicHJ1bmUgcmVtb3RlcyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAi0L/QvtGH0LjRgdGC0LjRgtGMINCy0L3QtdGI0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Lgg0L/QvtGB0LvQtSDQuNC30LLQu9C10YfQtdC90LjRjyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDM4IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5MiBidWlsdGluL3JlbW90ZS5jOjE1NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAi0J3QtdGCINGC0LDQutC+0LPQviDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gwqslc8K7IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTQKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMINCy0LXRgtC60YMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ2MQorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgItC90LUg0YPQutCw0LfQsNC9INCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3OAorbXNnaWQgInF1ZXJ5IHB1c2ggVVJMcyByYXRoZXIgdGhhbiBmZXRjaCBVUkxzIgorbXNnc3RyICLQt9Cw0L/RgNC+0YHQuNGC0YwgVVJMINC+0YLQv9GA0LDQstC60LgsINCy0LzQtdGB0YLQviBVUkwg0LjQt9Cy0LvQtdGH0LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4MAorbXNnaWQgInJldHVybiBhbGwgVVJMcyIKK21zZ3N0ciAi0LLQtdGA0L3Rg9GC0Ywg0LLRgdC1IFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIFVSTHMgY29uZmlndXJlZCBmb3IgcmVtb3RlICclcyciCittc2dzdHIgIlVSTCDQvdC1INC90LDRgdGC0YDQvtC10L3RiyDQtNC70Y8g0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM0Cittc2dpZCAibWFuaXB1bGF0ZSBwdXNoIFVSTHMiCittc2dzdHIgItGD0L/RgNCw0LLQu9C10L3QuNC1IFVSTCDQvtGC0L/RgNCw0LLQutC4IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzYKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMIFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM4Cittc2dpZCAiZGVsZXRlIFVSTHMiCittc2dzdHIgItGD0LTQsNC70LjRgtGMIFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTQ1Cittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWFkZCDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSAtLWRlbGV0ZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2xkIFVSTCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INGI0LDQsdC70L7QvSDRgdGC0LDRgNC+0LPQviBVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIgorbXNnc3RyICLQndC1INC90LDQudC00LXQvdGLINGB0L7QstC/0LDQtNC10L3QuNGPIFVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU5NAorbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINGD0LTQsNC70LjRgtGMINCy0YHQtSBVUkwg0L3QtS3QvtGC0L/RgNCw0LLQutC4IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MTAKK21zZ2lkICJiZSB2ZXJib3NlOyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYSBzdWJjb21tYW5kIgorbXNnc3RyICLQsdGL0YLRjCDQvNC90L7Qs9C+0YHQu9C+0LLQvdC10LU7INC00L7Qu9C20L3QviDRgdGC0L7Rj9GC0Ywg0L/QtdGA0LXQtCDQv9C+0LTQutC+0LzQsNC90LTQvtC5IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAi0J3QtdC40LfQstC10YHRgtC90LDRjyDQv9C+0LTQutC+0LzQsNC90LTQsDogJXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjIKK21zZ2lkICJnaXQgcmVwYWNrIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmVwYWNrIFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI3CiBtc2dpZCAiIgotIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuIgotIlxuIgorIkluY3JlbWVudGFsIHJlcGFja3MgYXJlIGluY29tcGF0aWJsZSB3aXRoIGJpdG1hcCBpbmRleGVzLiAgVXNlXG4iCisiLS1uby13cml0ZS1iaXRtYXAtaW5kZXggb3IgZGlzYWJsZSB0aGUgcGFjay53cml0ZWJpdG1hcHMgY29uZmlndXJhdGlvbi4iCittc2dzdHIgItCY0L3QutGA0LXQvNC10L3RgtCw0LvRjNC90YvQtSDQv9C10YDQtdC/0LDQutC+0LLQutC4INC90LUg0YHQvtCy0LzQtdGB0YLQuNC80Ysg0YEg0LjQvdC00LXQutGB0LDQvNC4INCyINCx0LjRgtC+0LLRi9GFINC60LDRgNGC0LDRhS4gINCY0YHQv9C+0LvRjNC30YPQudGC0LUg0L7Qv9GG0LjRjiAtLW5vLXdyaXRlLWJpdG1hcC1pbmRleCDQuNC70Lgg0L7RgtC60LvRjtGH0LjRgtC1INC/0LDRgNCw0LzQtdGC0YAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IHBhY2sud3JpdGViaXRtYXBzLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMDAKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjM5IGJ1aWx0aW4vcmVwYWNrLmM6NDE0Cittc2dpZCAicmVwYWNrOiBFeHBlY3RpbmcgZnVsbCBoZXggb2JqZWN0IElEIGxpbmVzIG9ubHkgZnJvbSBwYWNrLW9iamVjdHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjU2Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTQKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAi0YPQv9Cw0LrQvtCy0LDRgtGMINCy0YHRkSDQsiDQvtC00LjQvSDQv9Cw0LrQtdGCIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NgorbXNnaWQgInNhbWUgYXMgLWEsIGFuZCB0dXJuIHVucmVhY2hhYmxlIG9iamVjdHMgbG9vc2UiCittc2dzdHIgItGC0L7QttC1LCDRh9GC0L4g0LggLWEsINC90L4g0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L4g0L7RgtCx0YDQvtGB0LjRgtGMINC90LXQtNC+0YHRgtC40LbQuNC80YvQtSDQvtCx0YrQtdC60YLRiyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTkKK21zZ2lkICJyZW1vdmUgcmVkdW5kYW50IHBhY2tzLCBhbmQgcnVuIGdpdC1wcnVuZS1wYWNrZWQiCittc2dzdHIgItGD0LTQsNC70LjRgtC1INC70LjRiNC90LjQtSDQv9Cw0LrQtdGC0Ysg0Lgg0LfQsNC/0YPRgdGC0LjRgtC1IGdpdC1wcnVuZS1wYWNrZWQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzAxCittc2dpZCAicGFzcyAtLW5vLXJldXNlLWRlbHRhIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgItC/0LXRgNC10LTQsNGC0Ywg0L7Qv9GG0LjRjiAtLW5vLXJldXNlLWRlbHRhINCyIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzAzCittc2dpZCAicGFzcyAtLW5vLXJldXNlLW9iamVjdCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICLQv9C10YDQtdC00LDRgtGMINC+0L/RhtC40Y4gLS1uby1yZXVzZS1vYmplY3Qg0LIgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDUKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgItC90LUg0LfQsNC/0YPRgdC60LDRgtGMIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA4Cittc2dpZCAicGFzcyAtLWxvY2FsIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgItC/0LXRgNC10LTQsNGC0Ywg0L7Qv9GG0LjRjiAtLWxvY2FsINCyIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzEwCittc2dpZCAid3JpdGUgYml0bWFwIGluZGV4IgorbXNnc3RyICLQt9Cw0L/QuNGB0Ywg0LjQvdC00LXQutGB0LAg0LIg0LHQuNGC0L7QstGL0YUg0LrQsNGA0YLQsNGFIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMgorbXNnaWQgInBhc3MgLS1kZWx0YS1pc2xhbmRzIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTMKK21zZ2lkICJhcHByb3hpZGF0ZSIKK21zZ3N0ciAi0L/RgNC40LzQtdGA0L3QsNGPLdC00LDRgtCwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNAorbXNnaWQgIndpdGggLUEsIGRvIG5vdCBsb29zZW4gb2JqZWN0cyBvbGRlciB0aGFuIHRoaXMiCittc2dzdHIgItGBINC+0L/RhtC40LXQuSAtQSwg0L3QtSDQvtGC0LHRgNCw0YHRi9Cy0LDRgtGMINC+0LHRitC10LrRgtGLINGB0YLQsNGA0LXQtSwg0YfQtdC8INGD0LrQsNC30LDQvdC+IgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNgorbXNnaWQgIndpdGggLWEsIHJlcGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLRgSDQv9Cw0YDQsNC80LXRgtGA0L7QvCAtYSwg0L/QtdGA0LXQv9Cw0LrQvtCy0LDRgtGMINC90LXQtNC+0YHRgtGD0L/QvdGL0LUg0L7QsdGK0LXQutGC0YsiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE4Cittc2dpZCAic2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICLRgNCw0LfQvNC10YAg0L7QutC90LAsINC40YHQv9C+0LvRjNC30YPQtdC80YvQuSDQtNC70Y8g0LrQvtC80L/RgNC10YHRgdC40Lgg0LTQtdC70YzRgiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTkgYnVpbHRpbi9yZXBhY2suYzozMjUKK21zZ2lkICJieXRlcyIKK21zZ3N0ciAi0LrQvtC70LjRh9C10YHRgtCy0L4t0LHQsNC50YIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzIwCittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgItGC0L7QttC1LCDRh9GC0L4g0Lgg0LLRi9GI0LUsINC90L4g0L7Qs9GA0LDQvdC40YfQuNGC0Ywg0YDQsNC30LzQtdGAINC/0LDQvNGP0YLQuCwg0LAg0L3QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDQt9Cw0L/QuNGB0LXQuSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjIKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgiCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LXQvdC40LUg0L3QsCDQvNCw0LrRgdC40LzQsNC70YzQvdGD0Y4g0LPQu9GD0LHQuNC90YMg0LTQtdC70YzRgiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjQKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMiCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LXQvdC40LUg0L3QsCDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0L/QvtGC0L7QutC+0LIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI2Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggcGFja2ZpbGUiCittc2dzdHIgItC80LDQutGB0LjQvNCw0LvRjNC90YvQuSDRgNCw0LfQvNC10YAg0LrQsNC20LTQvtCz0L4g0LjQtyDRhNCw0LnQu9C+0LIg0L/QsNC60LXRgtCwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyOAorbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICLQv9C10YDQtdGD0L/QsNC60L7QstCw0YLRjCDQvtCx0YrQtdC60YLRiyDQsiDQv9Cw0LrQtdGC0YssINC/0L7QvNC10YfQtdC90L3Ri9C1INGE0LDQudC70L7QvCAua2VlcCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMzAKK21zZ2lkICJkbyBub3QgcmVwYWNrIHRoaXMgcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjM0MAorbXNnaWQgImNhbm5vdCBkZWxldGUgcGFja3MgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgItC90LXQu9GM0LfRjyDRg9C00LDQu9GP0YLRjCDQv9Cw0LrQtdGC0Ysg0LIgcHJlY2lvdXMtb2JqZWN0cyDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgorCisjOiBidWlsdGluL3JlcGFjay5jOjM0NAorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLUEgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1rZWVwLXVucmVhY2hhYmxlINC4IC1BINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBidWlsdGluL3JlcGFjay5jOjQyMworbXNnaWQgIk5vdGhpbmcgbmV3IHRvIHBhY2suIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBTb21lIHBhY2tzIGluIHVzZSBoYXZlIGJlZW4gcmVuYW1lZCBieVxuIgorIldBUk5JTkc6IHByZWZpeGluZyBvbGQtIHRvIHRoZWlyIG5hbWUsIGluIG9yZGVyIHRvXG4iCisiV0FSTklORzogcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZVxuIgorIldBUk5JTkc6IGZpbGUuICBCdXQgdGhlIG9wZXJhdGlvbiBmYWlsZWQsIGFuZCB0aGVcbiIKKyJXQVJOSU5HOiBhdHRlbXB0IHRvIHJlbmFtZSB0aGVtIGJhY2sgdG8gdGhlaXJcbiIKKyJXQVJOSU5HOiBvcmlnaW5hbCBuYW1lcyBhbHNvIGZhaWxlZC5cbiIKKyJXQVJOSU5HOiBQbGVhc2UgcmVuYW1lIHRoZW0gaW4gJXMgbWFudWFsbHk6XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnJXMnIgorbXNnc3RyICLRgdCx0L7QuSDRg9C00LDQu9C10L3QuNGPIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPNC+0LHRitC10LrRgj4gPNC30LDQvNC10L3QsD4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDzQvtCx0YrQtdC60YI+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNAorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPNC60L7QvNC80LjRgj4gWzzRgNC+0LTQuNGC0LXQu9GMPuKApl0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNgorbXNnaWQgImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgcmVwbGFjZSAtZCA80L7QsdGK0LXQutGCPuKApiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcKK21zZ2lkICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFstbCBbPHBhdHRlcm4+XV0iCittc2dzdHIgImdpdCByZXBsYWNlIFstLWZvcm1hdD080YTQvtGA0LzQsNGCPl0gWy1sIFs80YjQsNCx0LvQvtC9Pl1dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCByZXBsYWNlIGZvcm1hdCAnJXMnXG4iCisidmFsaWQgZm9ybWF0cyBhcmUgJ3Nob3J0JywgJ21lZGl1bScgYW5kICdsb25nJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVwbGFjZSByZWYgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk9iamVjdHMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlLlxuIgorIiclcycgcG9pbnRzIHRvIGEgcmVwbGFjZWQgb2JqZWN0IG9mIHR5cGUgJyVzJ1xuIgorIndoaWxlICclcycgcG9pbnRzIHRvIGEgcmVwbGFjZW1lbnQgb2JqZWN0IG9mIHR5cGUgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0MgorbXNnaWQgImNhdC1maWxlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3MgorbXNnaWQgInVuYWJsZSB0byBzcGF3biBta3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjc2Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgZnJvbSBta3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjg1Cittc2dpZCAibWt0cmVlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjg5Cittc2dpZCAibWt0cmVlIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZnN0YXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzAzCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG9iamVjdCB0byBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjIgYnVpbHRpbi9yZXBsYWNlLmM6Mzc3IGJ1aWx0aW4vcmVwbGFjZS5jOjQyMgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IG9iamVjdCB0eXBlIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNDIKK21zZ2lkICJlZGl0aW5nIG9iamVjdCBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIGFzIGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgItC/0LvQvtGF0LDRjyDQvNC10YLQutCwINGB0LvQuNGP0L3QuNGPINCyINC60L7QvNC80LjRgtC1IMKrJXPCuyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAi0L/QvtCy0YDQtdC20LTRkdC90L3QsNGPINC80LXRgtC60LAg0YHQu9C40Y/QvdC40Y8g0LIg0LrQvtC80LzQuNGC0LUgwqslc8K7IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9yaWdpbmFsIGNvbW1pdCAnJXMnIGNvbnRhaW5zIG1lcmdldGFnICclcycgdGhhdCBpcyBkaXNjYXJkZWQ7IHVzZSAtLWVkaXQgIgorImluc3RlYWQgb2YgLS1ncmFmdCIKK21zZ3N0ciAi0L7RgNC40LPQuNC90LDQu9GM0L3Ri9C5INC60L7QvNC80LjRgiDCqyVzwrsg0YHQvtC00LXRgNC20LjRgiDQvNC10YLQutGDINGB0LvQuNGP0L3QuNGPIMKrJXPCuywg0LrQvtGC0L7RgNCw0Y8g0LHRi9C70LAg0L7RgtCx0YDQvtGI0LXQvdCwOyDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IC0tZWRpdCDQstC80LXRgdGC0L4gLS1ncmFmdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBvcmlnaW5hbCBjb21taXQgJyVzJyBoYXMgYSBncGcgc2lnbmF0dXJlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ2OAorbXNnaWQgInRoZSBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSByZXBsYWNlbWVudCBjb21taXQhIgorbXNnc3RyICLQv9C+0LTQv9C40YHRjCDQsdGD0LTQtdGCINGD0LTQsNC70LXQvdCwINCyINC30LDQvNC10L3QtdC90L3QvtC8INC60L7QvNC80LjRgtC1ISIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSByZXBsYWNlbWVudCBjb21taXQgZm9yOiAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0LfQsNC80LXQvdGDINC00LvRjyDQutC+0LzQvNC40YLQsDogwqslc8K7IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JhZnQgZm9yICclcycgdW5uZWNlc3NhcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBjb21taXQgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmU6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY29udmVydCB0aGUgZm9sbG93aW5nIGdyYWZ0KHMpOlxuIgogIiVzIgotbXNnc3RyICLQntGI0LjQsdC60LAg0LfQsNC/0YPRgdC60LAgc3NoLWtleWdlbjpcblxuJXMiCittc2dzdHIgIiIKIAotIzogbGliL3NzaGtleS50Y2w6MTExCi1tc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgotbXNnc3RyICLQmtC70Y7RhyDQvdC1INGB0L7Qt9C00LDQvS4iCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDYKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHQv9C40YHQvtC6INC30LDQvNC10L3Rj9C10LzRi9GFINGB0YHRi9C70L7QuiIKIAotIzogbGliL3NzaGtleS50Y2w6MTE4Ci1tc2dpZCAiR2VuZXJhdGlvbiBzdWNjZWVkZWQsIGJ1dCBubyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAi0KHQvtC30LTQsNC90LjQtSDQutC70Y7Rh9CwINC30LDQstC10YDRiNC40LvQvtGB0YwsINC90L4g0YDQtdC30YPQu9GM0YLQsNGCINC90LUg0LHRi9C7INC90LDQudC00LXQvSIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0NworbXNnaWQgImRlbGV0ZSByZXBsYWNlIHJlZnMiCittc2dzdHIgItGD0LTQsNC70LXQvdC40LUg0LfQsNC80LXQvdGP0LXQvNGL0YUg0YHRgdGL0LvQvtC6IgogCi0jOiBsaWIvc3Noa2V5LnRjbDoxMjEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJZb3VyIGtleSBpcyBpbjogJXMiCi1tc2dzdHIgItCS0LDRiCDQutC70Y7RhyDQvdCw0YXQvtC00LjRgtGB0Y8g0LI6ICVzIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ4Cittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgItC40LfQvNC10L3QtdC90LjQtSDRgdGD0YnQtdGB0YLQstGD0Y7RidC10LPQviDQvtCx0YrQtdC60YLQsCIKIAotIzogbGliL3N0YXR1c19iYXIudGNsOjgzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKLW1zZ3N0ciAiJXMg4oCmICUqaSDQuNC3ICUqaSAlcyAoJTNpJSUpIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ5Cittc2dpZCAiY2hhbmdlIGEgY29tbWl0J3MgcGFyZW50cyIKK21zZ3N0ciAi0LjQt9C80LXQvdC10L3QuNC1INGA0L7QtNC40YLQtdC70Y8g0LrQvtC80LzQuNGC0LAiCiAKLSM6IGxpYi90b29scy50Y2w6NzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCi1tc2dzdHIgItCX0LDQv9GD0YHQuiAlcyDRgtGA0LXQsdGD0LXRgiDQstGL0LHRgNCw0L3QvdC+0LPQviDRhNCw0LnQu9CwLiIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MAorbXNnaWQgImNvbnZlcnQgZXhpc3RpbmcgZ3JhZnQgZmlsZSIKK21zZ3N0ciAiIgogCi0jOiBsaWIvdG9vbHMudGNsOjkwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCi1tc2dzdHIgItCU0LXQudGB0YLQstC40YLQtdC70YzQvdC+INC30LDQv9GD0YHRgtC40YLRjCAlcz8iCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTEKK21zZ2lkICJyZXBsYWNlIHRoZSByZWYgaWYgaXQgZXhpc3RzIgorbXNnc3RyICLQt9Cw0LzQtdC90LAg0YHRgdGL0LvQutC4LCDQtdGB0LvQuCDQvtC90LAg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCiAKLSM6IGxpYi90b29scy50Y2w6MTEwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbDogJXMiCi1tc2dzdHIgItCS0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90LDRjyDQvtC/0LXRgNCw0YbQuNGPOiAlcyIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MworbXNnaWQgImRvIG5vdCBwcmV0dHktcHJpbnQgY29udGVudHMgZm9yIC0tZWRpdCIKK21zZ3N0ciAi0L3QtSDQtNC10LvQsNGC0Ywg0YHRgtGA0YPQutGC0YPRgNC40YDQvtCy0LDQvdC90YvQuSDQstGL0LLQvtC0INGB0L7QtNC10YDQttC40LzQvtCz0L4g0LTQu9GPIC0tZWRpdCIKIAotIzogbGliL3Rvb2xzLnRjbDoxMTEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSdW5uaW5nOiAlcyIKLW1zZ3N0ciAi0JLRi9C/0L7Qu9C90LXQvdC40LU6ICVzIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU0Cittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0Y3RgtC+0YIg0YTQvtGA0LzQsNGCIgogCi0jOiBsaWIvdG9vbHMudGNsOjE0OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCi1tc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCAlcyDQt9Cw0LLQtdGA0YjQuNC70LDRgdGMINGD0YHQv9C10YjQvdC+LiIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU2NworbXNnaWQgIi0tZm9ybWF0IGNhbm5vdCBiZSB1c2VkIHdoZW4gbm90IGxpc3RpbmciCittc2dzdHIgIiIKIAotIzogbGliL3Rvb2xzLnRjbDoxNTEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGZhaWxlZDogJXMiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQv9GA0L7Qs9GA0LDQvNC80Ys6ICVzIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTc1Cittc2dpZCAiLWYgb25seSBtYWtlcyBzZW5zZSB3aGVuIHdyaXRpbmcgYSByZXBsYWNlbWVudCIKK21zZ3N0ciAiIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgotbXNnaWQgIkFkZCBUb29sIgotbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGMINCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90YPRjiDQvtC/0LXRgNCw0YbQuNGOIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTc5Cittc2dpZCAiLS1yYXcgb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyOAotbXNnaWQgIkFkZCBOZXcgVG9vbCBDb21tYW5kIgotbXNnc3RyICLQndC+0LLQsNGPINCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90LDRjyDQvtC/0LXRgNCw0YbQuNGPIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTg1Cittc2dpZCAiLWQgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICIiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjMzCi1tc2dpZCAiQWRkIGdsb2JhbGx5IgotbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGMINC00LvRjyDQstGB0LXRhSDRgNC10L/QvtC30LjRgtC+0YDQuNC10LIiCisjOiBidWlsdGluL3JlcGxhY2UuYzo1OTEKK21zZ2lkICJiYWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo0NQotbXNnaWQgIlRvb2wgRGV0YWlscyIKLW1zZ3N0ciAi0J7Qv9C40YHQsNC90LjQtSDQstGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdC+0Lkg0L7Qv9C10YDQsNGG0LjQuCIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU5NworbXNnaWQgIi1lIG5lZWRzIGV4YWN0bHkgb25lIGFyZ3VtZW50IgorbXNnc3RyICIiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjQ4Ci1tc2dpZCAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiCi1tc2dzdHIgItCY0YHQv9C+0LvRjNC30YPQudGC0LUgwqsvwrsg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8g0L/QvtC00LzQtdC90Y4iCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MDMKK21zZ2lkICItZyBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6NjEKLW1zZ2lkICJDb21tYW5kOiIKLW1zZ3N0ciAi0JrQvtC80LDQvdC00LA6IgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NjA5Cittc2dpZCAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgdGFrZXMgbm8gYXJndW1lbnQiCittc2dzdHIgIiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6NzQKLW1zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgotbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC00LjQsNC70L7QsyDQv9C10YDQtdC0INC30LDQv9GD0YHQutC+0LwiCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTUKK21zZ2lkICJvbmx5IG9uZSBwYXR0ZXJuIGNhbiBiZSBnaXZlbiB3aXRoIC1sIgorbXNnc3RyICIiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjgwCi1tc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCi1tc2dzdHIgItCX0LDQv9GA0L7RgSDQvdCwINCy0YvQsdC+0YAg0LLQtdGA0YHQuNC4ICjRg9GB0YLQsNC90LDQstC70LjQstCw0LXRgiAkUkVWSVNJT04pIgorIzogYnVpbHRpbi9yZXJlcmUuYzoxMworbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxwYXRoPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDzQv9GD0YLRjD7igKYgfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo4NQotbXNnaWQgIkFzayB0aGUgdXNlciBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgKHNldHMgJEFSR1MpIgotbXNnc3RyICLQl9Cw0L/RgNC+0YEg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvRhSDQsNGA0LPRg9C80LXQvdGC0L7QsiAo0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIgJEFSR1MpIgorIzogYnVpbHRpbi9yZXJlcmUuYzo2MAorbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICLQt9Cw0L/QuNGB0LDRgtGMINGH0LjRgdGC0YvQtSDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC70LjQutGC0L7QsiDQsiDQuNC90LTQtdC60YEiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjkyCi1tc2dpZCAiRG9uJ3Qgc2hvdyB0aGUgY29tbWFuZCBvdXRwdXQgd2luZG93IgotbXNnc3RyICLQndC1INC/0L7QutCw0LfRi9Cy0LDRgtGMINC+0LrQvdC+INCy0YvQstC+0LTQsCDQutC+0LzQsNC90LTRiyIKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NzkKK21zZ2lkICInZ2l0IHJlcmVyZSBmb3JnZXQnIHdpdGhvdXQgcGF0aHMgaXMgZGVwcmVjYXRlZCIKK21zZ3N0ciAiIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo5NwotbXNnaWQgIlJ1biBvbmx5IGlmIGEgZGlmZiBpcyBzZWxlY3RlZCAoJEZJTEVOQU1FIG5vdCBlbXB0eSkiCi1tc2dzdHIgItCX0LDQv9GD0YHQuiDRgtC+0LvRjNC60L4g0LXRgdC70Lgg0L/QvtC60LDQt9Cw0L0g0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSAoJEZJTEVOQU1FINC90LUg0L/Rg9GB0YLQvikiCisjOiBidWlsdGluL3JlcmVyZS5jOjExMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZiBmb3IgJyVzJyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjEKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgbmFtZSBmb3IgdGhlIHRvb2wuIgotbXNnc3RyICLQo9C60LDQttC40YLQtSDQvdCw0LfQstCw0L3QuNC1INCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90L7QuSDQvtC/0LXRgNCw0YbQuNC4LiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAi0JLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3QsNGPINC+0L/QtdGA0LDRhtC40Y8gwqslc8K7INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjE1MQotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9yZXNldC5jOjMyCiBtc2dpZCAiIgotIkNvdWxkIG5vdCBhZGQgdG9vbDpcbiIKLSIlcyIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC00L7QsdCw0LLQu9C10L3QuNGPINC/0YDQvtCz0YDQsNC80LzRizpcbiVzIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPNC60L7QvNC80LjRgj5dIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTAKLW1zZ2lkICJSZW1vdmUgVG9vbCIKLW1zZ3N0ciAi0KPQtNCw0LvQuNGC0Ywg0L/RgNC+0LPRgNCw0LzQvNGDIgorIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gWzzRg9C60LDQt9Cw0YLQtdC70Ywt0LTQtdGA0LXQstCwPl0gWy0tXSA80L/Rg9GC0Lg+4oCmIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTYKLW1zZ2lkICJSZW1vdmUgVG9vbCBDb21tYW5kcyIKLW1zZ3N0ciAi0KPQtNCw0LvQuNGC0Ywg0LrQvtC80LDQvdC00Ysg0L/RgNC+0LPRgNCw0LzQvNGLIgorIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICJnaXQgcmVzZXQgLS1wYXRjaCBbPNGD0LrQsNC30LDRgtC10LvRjC3QtNC10YDQtdCy0LA+XSBbLS1dIFs80L/Rg9GC0Lg+4oCmXSIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjAwCi1tc2dpZCAiUmVtb3ZlIgotbXNnc3RyICLQo9C00LDQu9C40YLRjCIKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MAorbXNnaWQgIm1peGVkIgorbXNnc3RyICLRgdC80LXRiNCw0L3QvdGL0LkiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjIzNgotbXNnaWQgIihCbHVlIGRlbm90ZXMgcmVwb3NpdG9yeS1sb2NhbCB0b29scykiCi1tc2dzdHIgIijQodC40L3QuNC8INCy0YvQtNC10LvQtdC90Ysg0L/RgNC+0LPRgNCw0LzQvNGLINC70L7QutCw0LvRjNC90YvQtSDRgNC10L/QvtC30LjRgtC+0YDQuNGOKSIKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MAorbXNnaWQgInNvZnQiCittc2dzdHIgItC80Y/Qs9C60LjQuSIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6Mjk3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVuIENvbW1hbmQ6ICVzIgotbXNnc3RyICLQl9Cw0L/Rg9GB0Log0LrQvtC80LDQvdC00Ys6ICVzIgorIzogYnVpbHRpbi9yZXNldC5jOjQwCittc2dpZCAiaGFyZCIKK21zZ3N0ciAi0LbQtdGB0YLQutC40LkiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjMxMQotbXNnaWQgIkFyZ3VtZW50cyIKLW1zZ3N0ciAi0JDRgNCz0YPQvNC10L3RgtGLIgorIzogYnVpbHRpbi9yZXNldC5jOjQwCittc2dpZCAibWVyZ2UiCittc2dzdHIgItGB0LvQuNGP0L3QuNC10LwiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjM0OAotbXNnaWQgIk9LIgotbXNnc3RyICJPSyIKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MAorbXNnaWQgImtlZXAiCittc2dzdHIgItC+0YHRgtCw0LLQu9C10L3QuNC10LwiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgotbXNnc3RyICLQmNC30LLQu9C10YfQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40Lkg0LjQtyAlcyAiCisjOiBidWlsdGluL3Jlc2V0LmM6ODEKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFELiIKK21zZ3N0ciAi0KMg0LLQsNGBINC90LXRgiDQstC10YDQvdC+0LPQviBIRUFELiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCi1tc2dzdHIgItGH0LjRgdGC0LrQsCDQstC90LXRiNC90LXQs9C+ICVzIgorIzogYnVpbHRpbi9yZXNldC5jOjgzCittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INC00LXRgNC10LLQviDRgyBIRUFELiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKLW1zZ3N0ciAi0KfQuNGB0YLQutCwINC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINCy0LXRgtC+0LosINGD0LTQsNC70ZHQvdC90YvRhSDQuNC3ICVzIgorIzogYnVpbHRpbi9yZXNldC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0LTQtdGA0LXQstC+INGDICVzLiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQdXNoaW5nIGNoYW5nZXMgdG8gJXMiCi1tc2dzdHIgItCe0YLQv9GA0LDQstC60LAg0LjQt9C80LXQvdC10L3QuNC5INCyICVzICIKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINCy0YvQv9C+0LvQvdC40YLRjCDRgdCx0YDQvtGBINCyINGA0LXQttC40LzQtSDCqyVzwrsg0LLQviDQstGA0LXQvNGPINGB0LvQuNGP0L3QuNGPLiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6NjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCi1tc2dzdHIgItCi0L7Rh9C90L7QtSDQutC+0L/QuNGA0L7QstCw0L3QuNC1INCyICVzIgorIzogYnVpbHRpbi9yZXNldC5jOjI5MyBidWlsdGluL3N0YXNoLmM6NTE0IGJ1aWx0aW4vc3Rhc2guYzo1ODkKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MTMKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICLRgtC40YXQuNC5INGA0LXQttC40LwsINCy0YvQstC+0LTQuNGC0Ywg0YLQvtC70YzQutC+INC+0YjQuNCx0LrQuCIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6ODIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQdXNoaW5nICVzICVzIHRvICVzIgotbXNnc3RyICLQntGC0L/RgNCw0LLQutCwICVzICVzINCyICVzIgorIzogYnVpbHRpbi9yZXNldC5jOjI5NQorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICLRgdCx0YDQvtGB0LjRgtGMIEhFQUQg0Lgg0LjQvdC00LXQutGBIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDAKLW1zZ2lkICJQdXNoIEJyYW5jaGVzIgotbXNnc3RyICLQntGC0L/RgNCw0LLQuNGC0Ywg0LLQtdGC0LrQuCIKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTYKK21zZ2lkICJyZXNldCBvbmx5IEhFQUQiCittc2dzdHIgItGB0LHRgNC+0YHQuNGC0Ywg0YLQvtC70YzQutC+IEhFQUQiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjExNAotbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKLW1zZ3N0ciAi0JjRgdGF0L7QtNC90YvQtSDQstC10YLQutC4IgorIzogYnVpbHRpbi9yZXNldC5jOjI5OCBidWlsdGluL3Jlc2V0LmM6MzAwCittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0YHQsdGA0L7RgdC40YLRjCBIRUFELCDQuNC90LTQtdC60YEg0Lgg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjEzMQotbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCi1tc2dzdHIgItCg0LXQv9C+0LfQuNGC0L7RgNC40Lkg0L3QsNC30L3QsNGH0LXQvdC40Y8iCisjOiBidWlsdGluL3Jlc2V0LmM6MzAyCittc2dpZCAicmVzZXQgSEVBRCBidXQga2VlcCBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICLRgdCx0YDQvtGB0LjRgtGMIEhFQUQsINC90L4g0L7RgdGC0LDQstC40YLRjCDQu9C+0LrQsNC70YzQvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjkKLW1zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgotbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0L7RgtC/0YDQsNCy0LrQuCIKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDgKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAi0LfQsNC/0LjRgdCw0YLRjCDRgtC+0LvRjNC60L4g0YTQsNC60YIg0YLQvtCz0L4sINGH0YLQviDRg9C00LDQu9C10L3QvdGL0LUg0L/Rg9GC0Lgg0LHRg9C00YPRgiDQtNC+0LHQsNCy0LvQtdC90Ysg0L/QvtC30LbQtSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTcxCi1tc2dpZCAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiCi1tc2dzdHIgItCf0YDQuNC90YPQtNC40YLQtdC70YzQvdC+INC/0LXRgNC10LfQsNC/0LjRgdCw0YLRjCDRgdGD0YnQtdGB0YLQstGD0Y7RidGD0Y4g0LLQtdGC0LrRgyAo0LLQvtC30LzQvtC20L3QsCDQv9C+0YLQtdGA0Y8g0LjQt9C80LXQvdC10L3QuNC5KSIKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0YHQv9C+0LfQvdCw0YLRjCDCqyVzwrsg0LrQsNC6INC00LXQudGB0YLQstC40YLQtdC70YzQvdGD0Y4g0YDQtdC00LDQutGG0LjRji4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE3NQotbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgotbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgdGhpbiBwYWNrICjQtNC70Y8g0LzQtdC00LvQtdC90L3Ri9GFINGB0LXRgtC10LLRi9GFINC/0L7QtNC60LvRjtGH0LXQvdC40LkpIgorIzogYnVpbHRpbi9yZXNldC5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNGB0L/QvtC30L3QsNGC0Ywgwqslc8K7INC60LDQuiDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QvtC1INC00LXRgNC10LLQvi4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE3OQotbXNnaWQgIkluY2x1ZGUgdGFncyIKLW1zZ3N0ciAi0J/QtdGA0LXQtNCw0YLRjCDQvNC10YLQutC4IgorIzogYnVpbHRpbi9yZXNldC5jOjM0MworbXNnaWQgIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggLS17aGFyZCxtaXhlZCxzb2Z0fSIKK21zZ3N0ciAiLS1wYXRjaCDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSAtLXtoYXJkLG1peGVkLHNvZnR9IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUzCittc2dpZCAiLS1taXhlZCB3aXRoIHBhdGhzIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnZ2l0IHJlc2V0IC0tIDxwYXRocz4nIGluc3RlYWQuIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtSDQvtC/0YbQuNC4IC0tbWl4ZWQg0YEg0L/Rg9GC0Y/QvNC4INGD0YHRgtCw0YDQtdC70L47INC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcmVzZXQgLS0gPNC/0YPRgtC4PsK7IGluc3RlYWQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINCy0YvQv9C+0LvQvdC40YLRjCDRgdCx0YDQvtGBINCyINGA0LXQttC40LzQtSDCqyVzwrsg0LLQvNC10YHRgtC1INGBINGD0LrQsNC30LDQvdC40LXQvCDQv9GD0YLQuC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgItGB0LHRgNC+0YEgwqslc8K7INGA0LDQt9GA0LXRiNC10L0g0YLQvtC70YzQutC+INGBINCz0L7Qu9GL0Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdC8IgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mzc0Cittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgIi1OINC80L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCy0LzQtdGB0YLQtSDRgSAtLW1peGVkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mzk1Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgItCd0LXQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINC/0L7RgdC70LUg0YHQsdGA0L7RgdCwOiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQuICBZb3UgY2FuXG4iCisidXNlICctLXF1aWV0JyB0byBhdm9pZCB0aGlzLiAgU2V0IHRoZSBjb25maWcgc2V0dGluZyByZXNldC5xdWlldCB0byB0cnVlXG4iCisidG8gbWFrZSB0aGlzIHRoZSBkZWZhdWx0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQsdGA0L7RgdC40YLRjCDRhNCw0LnQuyDQuNC90LTQtdC60YHQsCDQvdCwINGA0LXQtNCw0LrRhtC40Y4gwqslc8K7LiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxMgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQvdC+0LLRi9C5INGE0LDQudC7INC40L3QtNC10LrRgdCwLiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQwNQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGFuZCAtLW1pc3NpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ2NgorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmcgcmVxdWlyZXMgLS1vYmplY3RzIgorbXNnc3RyICLRhNC40LvRjNGC0YDQsNGG0LjRjyDQvtCx0YrQtdC60YLQvtCyINGC0YDQtdCx0YPQtdGCINGD0LrQsNC30LDQvdC40Y8g0L/QsNGA0LDQvNC10YLRgNCwIC0tb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNwYXJzZSB2YWx1ZSAnJXMnIgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNC+0LUg0YfQsNGB0YLQuNGH0L3QvtC1INC30L3QsNGH0LXQvdC40LUgwqslc8K7IgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NTEwCittc2dpZCAicmV2LWxpc3QgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5IG9mIG5vdGVzIgorbXNnc3RyICJyZXYtbGlzdCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDQvtGC0L7QsdGA0LDQttC10L3QuNC1INC30LDQvNC10YLQvtC6IgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NTEzCittc2dpZCAiY2Fubm90IGNvbWJpbmUgLS11c2UtYml0bWFwLWluZGV4IHdpdGggb2JqZWN0IGZpbHRlcmluZyIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCAtLXVzZS1iaXRtYXAtaW5kZXgg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INGBINGE0LjQu9GM0YLRgNCw0YbQuNC10Lkg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MDgKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPNC+0L/RhtC40Lg+XSAtLSBbPNCw0YDQs9GD0LzQtdC90YLRiz7igKZdIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxMworbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0LLQsNGC0Ywg0LTQsNC70LXQtSDCqy0twrsg0LrQsNC6INCw0YDQs9GD0LzQtdC90YIiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDE1Cittc2dpZCAic3RvcCBwYXJzaW5nIGFmdGVyIHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IgorbXNnc3RyICLQvtGB0YLQsNC90L7QstC40YLRjCDRgNCw0LfQsdC+0YAg0L/QvtGB0LvQtSDQv9C10YDQstC+0LPQviDQsNGA0LPRg9C80LXQvdGC0LAg0L3QtSDRj9Cy0LvRj9GO0YnQtdCz0L7RgdGPINC+0L/RhtC40LXQuSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTgKK21zZ2lkICJvdXRwdXQgaW4gc3R1Y2sgbG9uZyBmb3JtIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINCw0YDQs9GD0LzQtdC90YLRiyDQsiDQtNC70LjQvdC90L7QvCDRhNC+0YDQvNCw0YLQtSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1NTEKK21zZ2lkICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPNC+0L/RhtC40Lg+XSAtLSBbPNCw0YDQs9GD0LzQtdC90YLRiz7igKZdXG4gICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs80LDRgNCz0YPQvNC10L3Rgj7igKZdXG4gICBvcjogZ2l0IHJldi1wYXJzZSBbPNC+0L/RhtC40Lg+XSBbPNCw0YDQs9GD0LzQtdC90YI+4oCmXVxuXG7Ql9Cw0L/Rg9GB0YLQuNGC0LUg0LrQvtC80LDQvdC00YMgwqtnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWjCuyDQtNC70Y8g0L/QvtC70YPRh9C10L3QuNGPINC/0L7QtNGA0L7QsdC90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDQv9C10YDQstC+0Lwg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LguIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0Cittc2dpZCAiZ2l0IHJldmVydCBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCByZXZlcnQgWzzQvtC/0YbQuNC4Pl0gPNGD0LrQsNC30LDRgtC10LvRjC3QutC+0LzQvNC40YLQsD7igKYiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjUKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHJldmVydCA80L/QvtC00LrQvtC80LDQvdC00LA+IgorCisjOiBidWlsdGluL3JldmVydC5jOjMwCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIFs80L7Qv9GG0LjQuD5dIDzRg9C60LDQt9Cw0YLQtdC70Ywt0LrQvtC80LzQuNGC0LA+4oCmIgorCisjOiBidWlsdGluL3JldmVydC5jOjMxCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIDzQv9C+0LTQutC+0LzQsNC90LTQsD4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWJlciBncmVhdGVyIHRoYW4gemVybyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIlczogJXMg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0YEgJXMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAyCittc2dpZCAiZW5kIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi0LrQvtC90LXRhiDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0Lgg0LrQvtC/0LjRgNC+0LLQsNC90LjRjyDQuNC70Lgg0L7QsdGA0LDRidC10L3QuNGPINC40LfQvNC10L3QtdC90LjQuSDQutC+0LzQvNC40YLQvtCyIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMworbXNnaWQgInJlc3VtZSByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgItC/0YDQvtC00L7Qu9C20LjRgtGMINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLRjCDQutC+0L/QuNGA0L7QstCw0L3QuNGPINC40LvQuCDQvtCx0YDQsNGJ0LXQvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA0Cittc2dpZCAiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi0L7RgtC80LXQvdCwINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQuCDQutC+0L/QuNGA0L7QstCw0L3QuNGPINC40LvQuCDQvtCx0YDQsNGJ0LXQvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA2Cittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgItC90LUg0LrQvtC80LzQuNGC0LjRgtGMINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4IgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLQuNC30LzQtdC90LjRgtGMINGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTAKK21zZ2lkICJwYXJlbnQtbnVtYmVyIgorbXNnc3RyICLQvdC+0LzQtdGALdGA0L7QtNC40YLQtdC70Y8iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTExCittc2dpZCAic2VsZWN0IG1haW5saW5lIHBhcmVudCIKK21zZ3N0ciAi0LLRi9Cx0L7RgCDQvtGB0L3QvtCy0L3QvtCz0L4g0YDQvtC00LjRgtC10LvRjyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTMKK21zZ2lkICJtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi0YHRgtGA0LDRgtC10LPQuNGPINGB0LvQuNGP0L3QuNGPIgorCisjOiBidWlsdGluL3JldmVydC5jOjExNQorbXNnaWQgIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgItC+0L/RhtC40Y8g0LTQu9GPINGB0YLRgNCw0YLQtdCz0LjQuCDRgdC70LjRj9C90LjRjyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjQKK21zZ2lkICJhcHBlbmQgY29tbWl0IG5hbWUiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0LjQvNGPINC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICLRgdC+0YXRgNCw0L3QuNGC0Ywg0LjQt9C90LDRh9Cw0LvRjNC90L4g0L/Rg9GB0YLRi9C1INC60L7QvNC80LjRgtGLIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyOAorbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICLQvtGB0YLQsNCy0LjRgtGMINC40LfQsdGL0YLQvtGH0L3Ri9C1LCDQv9GD0YHRgtGL0LUg0LrQvtC80LzQuNGC0YsiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjI3Cittc2dpZCAicmV2ZXJ0IGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0L7QsdGA0LDRidC10L3QuNGPINC40LfQvNC10L3QtdC90LjQuSDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNDAKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INC/0YDQuCDQutC+0L/QuNGA0L7QstCw0L3QuNC4INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL3JtLmM6MTkKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBbPNC+0L/RhtC40Lg+XSBbLS1dIDzRhNCw0LnQuz7igKYiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMDcKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAi0YHQu9C10LTRg9GO0YnQuNC1INGE0LDQudC70Ysg0YHQvtC00LXRgNC20LDRgiDQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINC+0YLQu9C40YfQsNGO0YnQuNC10YHRjyDQuCDQvtGCINGE0LDQudC70LAsINC4INC+0YIgSEVBRDoiCittc2dzdHJbMV0gItGB0LvQtdC00YPRjtGJ0LjQtSDRhNCw0LnQu9GLINGB0L7QtNC10YDQttCw0YIg0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQvtGC0LvQuNGH0LDRjtGJ0LjQtdGB0Y8g0Lgg0L7RgiDRhNCw0LnQu9CwLCDQuCDQvtGCIEhFQUQ6IgorbXNnc3RyWzJdICLRgdC70LXQtNGD0Y7RidC40LUg0YTQsNC50LvRiyDRgdC+0LTQtdGA0LbQsNGCINC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0L7RgtC70LjRh9Cw0Y7RidC40LXRgdGPINC4INC+0YIg0YTQsNC50LvQsCwg0Lgg0L7RgiBIRUFEOiIKK21zZ3N0clszXSAi0YHQu9C10LTRg9GO0YnQuNC1INGE0LDQudC70Ysg0YHQvtC00LXRgNC20LDRgiDQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINC+0YLQu9C40YfQsNGO0YnQuNC10YHRjyDQuCDQvtGCINGE0LDQudC70LAsINC4INC+0YIgSEVBRDoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTIKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiXG4o0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQvtC/0YbQuNGOIMKrLWbCuyDQtNC70Y8g0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L7Qs9C+INGD0LTQsNC70LXQvdC40Y8pIgorCisjOiBidWlsdGluL3JtLmM6MjE2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ3N0clswXSAi0YHQu9C10LTRg9GO0YnQuNC1INGE0LDQudC70Ysg0YHQvtC00LXRgNC20LDRgiDQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCyINC40L3QtNC10LrRgdC1OiIKK21zZ3N0clsxXSAi0YHQu9C10LTRg9GO0YnQuNC1INGE0LDQudC70Ysg0YHQvtC00LXRgNC20LDRgiDQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCyINC40L3QtNC10LrRgdC1OiIKK21zZ3N0clsyXSAi0YHQu9C10LTRg9GO0YnQuNC1INGE0LDQudC70Ysg0YHQvtC00LXRgNC20LDRgiDQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCyINC40L3QtNC10LrRgdC1OiIKK21zZ3N0clszXSAi0YHQu9C10LTRg9GO0YnQuNC1INGE0LDQudC70Ysg0YHQvtC00LXRgNC20LDRgiDQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCyINC40L3QtNC10LrRgdC1OiIKKworIzogYnVpbHRpbi9ybS5jOjIyMCBidWlsdGluL3JtLmM6MjI5Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIlxuKNC40YHQv9C+0LvRjNC30YPQudGC0LUg0L7Qv9GG0LjRjiDCqy0tY2FjaGVkwrsg0LTQu9GPINC+0YHRgtCw0LLQu9C10L3QuNGPINGE0LDQudC70LAsINC40LvQuCDCqy1mwrsg0LTQu9GPINC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+0LPQviDRg9C00LDQu9C10L3QuNGPKSIKKworIzogYnVpbHRpbi9ybS5jOjIyNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ3N0clswXSAi0YHQu9C10LTRg9GO0YnQuNC1INGE0LDQudC70Ysg0YHQvtC00LXRgNC20LDRgiDQu9C+0LrQsNC70YzQvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPOiIKK21zZ3N0clsxXSAi0YHQu9C10LTRg9GO0YnQuNC1INGE0LDQudC70Ysg0YHQvtC00LXRgNC20LDRgiDQu9C+0LrQsNC70YzQvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPOiIKK21zZ3N0clsyXSAi0YHQu9C10LTRg9GO0YnQuNC1INGE0LDQudC70Ysg0YHQvtC00LXRgNC20LDRgiDQu9C+0LrQsNC70YzQvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPOiIKK21zZ3N0clszXSAi0YHQu9C10LTRg9GO0YnQuNC1INGE0LDQudC70Ysg0YHQvtC00LXRgNC20LDRgiDQu9C+0LrQsNC70YzQvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPOiIKKworIzogYnVpbHRpbi9ybS5jOjI0MgorbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgItC90LUg0LLRi9Cy0L7QtNC40YLRjCDRgdC/0LjRgdC+0Log0YPQtNCw0LvQtdC90L3Ri9GFINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDRgtC+0LvRjNC60L4g0LjQtyDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9ybS5jOjI0NAorbXNnaWQgIm92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrIgorbXNnc3RyICLQv9GA0L7Qv9GD0YHRgtC40YLRjCDQv9GA0L7QstC10YDQutGDINCw0LrRgtGD0LDQu9GM0L3QvtGB0YLQuCIKKworIzogYnVpbHRpbi9ybS5jOjI0NQorbXNnaWQgImFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0YDQtdC60YPRgNGB0LjQstC90L7QtSDRg9C00LDQu9C10L3QuNC1IgorCisjOiBidWlsdGluL3JtLmM6MjQ3Cittc2dpZCAiZXhpdCB3aXRoIGEgemVybyBzdGF0dXMgZXZlbiBpZiBub3RoaW5nIG1hdGNoZWQiCittc2dzdHIgItCy0YvRhdC+0LQg0YEg0L3Rg9C70LXQstGL0Lwg0LrQvtC00L7QvCDQstC+0LfQstGA0LDRgtCwLCDQtNCw0LbQtSDQtdGB0LvQuCDQvdC40YfQtdCz0L4g0L3QtSDQvdCw0LnQtNC10L3QviIKKworIzogYnVpbHRpbi9ybS5jOjI4OQorbXNnaWQgInBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9GP0Y4g0YDQtdC60YPRgNGB0LjQstC90L4gwqslc8K7INCx0LXQtyDRg9C60LDQt9Cw0L3QuNGPINC+0L/RhtC40LggLXIiCisKKyM6IGJ1aWx0aW4vcm0uYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJnaXQgcm06INC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0YwgJXMiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MjAKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxob3N0PjpdPGRpcmVjdG9yeT4gWzxyZWY+Li4uXVxuIgorIiAgLS1hbGwgYW5kIGV4cGxpY2l0IDxyZWY+IHNwZWNpZmljYXRpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs80YHQtdGA0LLQtdGAPjpdPNC60LDRgtCw0LvQvtCzPiBbPNGB0YHRi9C70LrQsD7igKZdXG4gIC0tYWxsINC4INGP0LLQvdGL0Lkg0YHQv9C10YbQuNGE0LjQutCw0YLQvtGAIDzRgdGB0YvQu9C60Lg+INCy0LfQsNC40LzQvdC+INC40YHQutC70Y7Rh9Cw0Y7RidC40LUuIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MworbXNnaWQgInJlbW90ZSBuYW1lIgorbXNnc3RyICLQuNC80Y8g0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NworbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICLQv9GA0L7RgtC+0LrQvtC7INCx0LXQtyDRgdC+0YXRgNCw0L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LTQu9GPIFJQQyIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzgKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINGB0YHRi9C70LrQuCDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OQorbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGB0YLQsNGC0YPRgSDQvtGCINGB0LrRgNC40L/RgtCwINCy0L3QtdGI0L3QtdCz0L4g0YHQtdGA0LLQtdGA0LAiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNAorbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHNob3J0bG9nIFs80L7Qv9GG0LjQuD5dIFs80LTQuNCw0L/QsNC30L7QvS3RgNC10LTQsNC60YbQuNC5Pl0gW1stLV0gPNC/0YPRgtGMPuKApl0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNQorbXNnaWQgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzzQvtC/0YbQuNC4Pl0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjQKK21zZ2lkICJHcm91cCBieSBjb21taXR0ZXIgcmF0aGVyIHRoYW4gYXV0aG9yIgorbXNnc3RyICLQk9GA0YPQv9C/0LjRgNC+0LLQsNGC0Ywg0L/QviDQutC+0LzQvNC40YLQtdGA0YMsINCwINC90LUg0L/QviDQsNCy0YLQvtGA0YMiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjYKK21zZ2lkICJzb3J0IG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBjb21taXRzIHBlciBhdXRob3IiCittc2dzdHIgItC+0YLRgdC+0YDRgtC40YDQvtCy0LDRgtGMINCy0YvQstC+0LQg0L/QviDQutC+0LvQuNGH0LXRgdGC0LLRgyDQutC+0LzQvNC40YLQvtCyINGDINCw0LLRgtC+0YDQsCIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2OAorbXNnaWQgIlN1cHByZXNzIGNvbW1pdCBkZXNjcmlwdGlvbnMsIG9ubHkgcHJvdmlkZXMgY29tbWl0IGNvdW50IgorbXNnc3RyICLQndC1INCy0YvQstC+0LTQuNGC0Ywg0L7Qv9C40YHQsNC90LjRjyDQutC+0LzQvNC40YLQvtCyLCDQsCDRgtC+0LvRjNC60L4g0LjRhSDQutC+0LvQuNGH0LXRgdGC0LLQviIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0L/QvtGH0YLRgyDQutCw0LbQtNC+0LPQviDQuNC3INCw0LLRgtC+0YDQvtCyIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcxCittc2dpZCAiPHc+Wyw8aTE+Wyw8aTI+XV0iCittc2dzdHIgIjx3PlssPGkxPlssPGkyPl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcyCittc2dpZCAiTGluZXdyYXAgb3V0cHV0IgorbXNnc3RyICLQn9C10YDQtdC90L7RgSDRgdGC0YDQvtC6INC90LAg0LLRi9Cy0L7QtNC1IgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MzAxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGdpdmVuIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTMKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KS4uLl0iCittc2dzdHIgImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz080LrQvtCz0LTQsD5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cblx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg80YDQtdC00LDQutGG0LjRjz4gfCA80YjQsNCx0LvQvtC9PinigKZdIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTcKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPNCx0LDQt9CwPl1dIFstLWxpc3RdIFs80YHRgdGL0LvQutCwPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZnMiCittc2dzdHJbMF0gItC40LPQvdC+0YDQuNGA0L7QstCw0L3QuNC1ICVzOyDQvdC10LLQvtC30LzQvtC20L3QviDQvtCx0YDQsNCx0L7RgtCw0YLRjCDQsdC+0LvRjNGI0LUgJWQg0YHRgdGL0LvQutC4IgorbXNnc3RyWzFdICLQuNCz0L3QvtGA0LjRgNC+0LLQsNC90LjQtSAlczsg0L3QtdCy0L7Qt9C80L7QttC90L4g0L7QsdGA0LDQsdC+0YLQsNGC0Ywg0LHQvtC70YzRiNC1ICVkINGB0YHRi9C70L7QuiIKK21zZ3N0clsyXSAi0LjQs9C90L7RgNC40YDQvtCy0LDQvdC40LUgJXM7INC90LXQstC+0LfQvNC+0LbQvdC+INC+0LHRgNCw0LHQvtGC0LDRgtGMINCx0L7Qu9GM0YjQtSAlZCDRgdGB0YvQu9C+0LoiCittc2dzdHJbM10gItC40LPQvdC+0YDQuNGA0L7QstCw0L3QuNC1ICVzOyDQvdC10LLQvtC30LzQvtC20L3QviDQvtCx0YDQsNCx0L7RgtCw0YLRjCDQsdC+0LvRjNGI0LUgJWQg0YHRgdGL0LvQutC4IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG1hdGNoaW5nIHJlZnMgd2l0aCAlcyIKK21zZ3N0ciAi0L3QtdGCINGB0L7QstC/0LDQtNCw0Y7RidC40YUg0LfQsNC/0LjRgdC10Lkg0YEgJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDYKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0YHQv9C40YHQvtC6INC4INC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINCy0L3QtdGI0L3QuNGFINC4INC70L7QutCw0LvRjNC90YvRhSDQstC10YLQvtC6IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ4Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0YHQv9C40YHQvtC6INC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINCy0L3QtdGI0L3QuNGFINCy0LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAKK21zZ2lkICJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIgorbXNnc3RyICLQvtC60YDQsNGI0LjQstCw0YLRjCDCqyohKy3CuyDQsiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Lgg0YEg0LLQtdGC0LrQvtC5IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUyCittc2dpZCAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0YwgPG4+INC60L7QvNC80LjRgtC+0LIg0L/QvtGB0LvQtSDQvtCx0YnQtdCz0L4g0L/RgNC10LTQutCwIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU0Cittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICLRgdC40L3QvtC90LjQvCDQtNC70Y8gbW9yZT0tMSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NQorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0Ywg0LjQvNC10L3QvtCy0LDQvdC90YvQtSDRgdGC0YDQvtC60LgiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTcKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjCDQsiDQstGL0LLQvtC0INGC0LXQutGD0YnRg9GOINCy0LXRgtC60YMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTkKK21zZ2lkICJuYW1lIGNvbW1pdHMgd2l0aCB0aGVpciBvYmplY3QgbmFtZXMiCittc2dzdHIgItC40LzQtdC90L7QstCw0YLRjCDQutC+0LzQvNC40YLRiyDQuNGFINC40LzQtdC90LDQvNC4INC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjEKK21zZ2lkICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDQstC+0LfQvNC+0LbQvdGL0LUg0LHQsNC30Ysg0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjMKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdGB0YvQu9C60LgsINC90LXQtNC+0YHRgtGD0L/QvdGL0LUg0LjQtyDQu9GO0LHRi9GFINC00YDRg9Cz0LjRhSDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjUKK21zZ2lkICJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgItCy0YvQstC10YHRgtC4INC60L7QvNC80LjRgtGLINCyINGC0L7Qv9C+0LvQvtCz0LjRh9C10YHQutC+0Lwg0L/QvtGA0Y/QtNC60LUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjgKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YLQvtC70YzQutC+INC60L7QvNC80LjRgtGLLCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjQtSDQsiDQv9C10YDQstC+0Lkg0LLQtdGC0LrQtSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MAorbXNnaWQgInNob3cgbWVyZ2VzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lIHRpcCIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHQu9C40Y/QvdC40Y8sINC00L7RgdGC0LjQttC40LzRi9C1INGC0L7Qu9GM0LrQviDQuNC3INC+0LTQvdC+0Lkg0LjQtyDQstC10YDRhdGD0YjQtdC6IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcyCittc2dpZCAidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyIHdoZXJlIHBvc3NpYmxlIgorbXNnc3RyICLRgtC+0L/QvtC70L7Qs9C40YfQtdGB0LrQsNGPINGB0L7RgNGC0LjRgNC+0LLQutCwLCDRgSDRgdC+0YXRgNCw0L3QtdC90LjQtdC8INC/0L7RgNGP0LTQutCwINC00LDRgiwg0LXRgdC70Lgg0LLQvtC30LzQvtC20L3QviIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NQorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw80LHQsNC30LA+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NgorbXNnaWQgInNob3cgPG4+IG1vc3QgcmVjZW50IHJlZi1sb2cgZW50cmllcyBzdGFydGluZyBhdCBiYXNlIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMIDxuPiDQv9C+0YHQu9C10LTQvdC40YUg0LfQsNC/0LjRgdC10Lkg0LIg0LbRg9GA0L3QsNC70LUg0YHRgdGL0LvQvtC6LCDQvdCw0YfQuNC90LDRjyDRgSDQsdCw0LfRiyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjcxMgorbXNnaWQgIiIKKyItLXJlZmxvZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50IG9yIC0tbWVyZ2UtIgorImJhc2UiCittc2dzdHIgIi0tcmVmbG9nINC90LXRgdC+0LLQvNC10YHRgtC40LzQviDRgSAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50INC4IC0tbWVyZ2UtYmFzZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczNgorbXNnaWQgIm5vIGJyYW5jaGVzIGdpdmVuLCBhbmQgSEVBRCBpcyBub3QgdmFsaWQiCittc2dzdHIgItC90LUg0YPQutCw0LfQsNC90Ysg0LLQtdGC0LrQuCDQuCBIRUFEINC90LUg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQuSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczOQorbXNnaWQgIi0tcmVmbG9nIG9wdGlvbiBuZWVkcyBvbmUgYnJhbmNoIG5hbWUiCittc2dzdHIgItC/0LDRgNCw0LzQtdGC0YAgLS1yZWZsb2cg0YLRgNC10LHRg9C10YIg0YPQutCw0LfQsNC90LjRjyDQuNC80LXQvdC4INC+0LTQvdC+0Lkg0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5ICVkIGVudHJ5IGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dpZF9wbHVyYWwgIm9ubHkgJWQgZW50cmllcyBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnc3RyWzBdICLRgtC+0LvRjNC60L4gJWQg0LfQsNC/0LjRgdGMINC80L7QttC10YIg0LHRi9GC0Ywg0L/QvtC60LDQt9Cw0L3QsCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4uIgorbXNnc3RyWzFdICLRgtC+0LvRjNC60L4gJWQg0LfQsNC/0LjRgdC4INC80L7Qs9GD0YIg0LHRi9GC0Ywg0L/QvtC60LDQt9Cw0L3RiyDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4uIgorbXNnc3RyWzJdICLRgtC+0LvRjNC60L4gJWQg0LfQsNC/0LjRgdC10Lkg0LzQvtCz0YPRgiDQsdGL0YLRjCDQv9C+0LrQsNC30LDQvdGLINC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvi4iCittc2dzdHJbM10gItGC0L7Qu9GM0LrQviAlZCDQt9Cw0L/QuNGB0Lgg0LzQvtCz0YPRgiDQsdGL0YLRjCDQv9C+0LrQsNC30LDQvdGLINC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvi4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWYgJXMiCittc2dzdHIgItC90LXRgiDRgtCw0LrQvtC5INGB0YHRi9C70LrQuCAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXYuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXZzLiIKK21zZ3N0clswXSAi0L3QtdCy0L7Qt9C80L7QttC90L4g0L7QsdGA0LDQsdC+0YLQsNGC0Ywg0LHQvtC70YzRiNC1ICVkINGA0LXQtNCw0LrRhtC40LguIgorbXNnc3RyWzFdICLQvdC10LLQvtC30LzQvtC20L3QviDQvtCx0YDQsNCx0L7RgtCw0YLRjCDQsdC+0LvRjNGI0LUgJWQg0YDQtdC00LDQutGG0LjQuS4iCittc2dzdHJbMl0gItC90LXQstC+0LfQvNC+0LbQvdC+INC+0LHRgNCw0LHQvtGC0LDRgtGMINCx0L7Qu9GM0YjQtSAlZCDRgNC10LTQsNC60YbQuNC5LiIKK21zZ3N0clszXSAi0L3QtdCy0L7Qt9C80L7QttC90L4g0L7QsdGA0LDQsdC+0YLQsNGC0Ywg0LHQvtC70YzRiNC1ICVkINGA0LXQtNCw0LrRhtC40LguIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNC+0L/Rg9GB0YLQuNC80L7QuSDRgdGB0YvQu9C60L7QuSDQvdCwINC60L7QvNC80LjRgi4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgY29tbWl0ICVzICglcykiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDQutC+0LzQvNC40YIgJXMgKCVzKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjEyCittc2dpZCAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8ICIKKyItLWhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0taGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPNGI0LDQsdC70L7QvT7igKZdIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTMKK21zZ2lkICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dIgorbXNnc3RyICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz080YjQsNCx0LvQvtC9Pl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjIKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgtC+0LvRjNC60L4g0LzQtdGC0LrQuCAo0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INGBIC0taGVhZHMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYzCittc2dpZCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YLQvtC70YzQutC+INCz0L7Qu9C+0LLRiyAo0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INGBIC0tdGFncykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjQKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICLQsdC+0LvQtdC1INGB0YLRgNC+0LPQsNGPINC/0YDQvtCy0LXRgNC60LAg0YHRgdGL0LvQvtC6LCDRgtGA0LXQsdGD0LXRgiDRgtC+0YfQvdGL0Lkg0L/Rg9GC0Ywg0YHRgdGL0LvQutC4IgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY3IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjkKK21zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSwgZXZlbiBpZiBpdCB3b3VsZCBiZSBmaWx0ZXJlZCBvdXQiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGB0YHRi9C70LrRgyBIRUFELCDQtNCw0LbQtSDQtdGB0LvQuCDQvtC90LAg0LHRg9C00LXRgiDQvtGC0YTQuNC70YzRgtGA0L7QstCw0L3QsCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIgorbXNnc3RyICLRgNCw0LfRi9C80LXQvdC+0LLQsNGC0Ywg0LzQtdGC0LrQuCDQsiDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGLINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzMKK21zZ2lkICJvbmx5IHNob3cgU0hBMSBoYXNoIHVzaW5nIDxuPiBkaWdpdHMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCA8bj4g0YHQuNC80LLQvtC70L7QsiDQtNC70Y8g0LLRi9Cy0L7QtNCwIFNIQS0xINGF0LXRiC3RgdGD0LzQvNGLIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc3Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgItC90LUg0L/QtdGH0LDRgtCw0YLRjCDRgNC10LfRg9C70YzRgtCw0YIg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INCy0YvQstC+0LQgKNC/0L7Qu9C10LfQvdC+INGBINC+0L/RhtC40LXQuSDCqy0tdmVyaWZ5wrspIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHRgdGL0LvQutC4INGB0L4g0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAsINC60L7RgtC+0YDRi9GFINC90LXRgiDQsiDQu9C+0LrQsNC70YzQvdC+0Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyIGJ1aWx0aW4vc3Rhc2guYzozNworbXNnaWQgImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgc3Rhc2ggbGlzdCBbPNC+0L/RhtC40Lg+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIzIGJ1aWx0aW4vc3Rhc2guYzo0MgorbXNnaWQgImdpdCBzdGFzaCBzaG93IFs8b3B0aW9ucz5dIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHNob3cgWzzQvtC/0YbQuNC40Lg+XSBbPNGB0L/RgNGP0YLQsNC90L3Ri9C1LdC40LfQvNC10L3QtdC90LjRjz5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjQgYnVpbHRpbi9zdGFzaC5jOjQ3Cittc2dpZCAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs80YHQv9GA0Y/RgtCw0L3QvdGL0LUt0LjQt9C80LXQvdC10L3QuNGPPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNQorbXNnaWQgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPNGB0L/RgNGP0YLQsNC90L3Ri9C1LdC40LfQvNC10L3QtdC90LjRjz5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjYgYnVpbHRpbi9zdGFzaC5jOjYyCittc2dpZCAiZ2l0IHN0YXNoIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggYnJhbmNoIDzQuNC80Y8t0LLQtdGC0LrQuD4gWzzRgdC/0YDRj9GC0LDQvdC90YvQtS3QuNC30LzQtdC90LXQvdC40Y8+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI3IGJ1aWx0aW4vc3Rhc2guYzo2NworbXNnaWQgImdpdCBzdGFzaCBjbGVhciIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjggYnVpbHRpbi9zdGFzaC5jOjc3Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPNGB0L7QvtCx0YnQtdC90LjQtT5dXG4gICAgICAgICAgWy0tXSBbPNGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgC3Qv9GD0YLQuD7igKZdXSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjMxIGJ1aWx0aW4vc3Rhc2guYzo4NAorbXNnaWQgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZXNzYWdlPl0iCittc2dzdHIgImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs80YHQvtC+0LHRidC10L3QuNC1Pl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MgorbXNnaWQgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPNGB0L/RgNGP0YLQsNC90L3Ri9C1LdC40LfQvNC10L3QtdC90LjRjz5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTcKK21zZ2lkICJnaXQgc3Rhc2ggYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs80YHQv9GA0Y/RgtCw0L3QvdGL0LUt0LjQt9C80LXQvdC10L3QuNGPPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3MgorbXNnaWQgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IgorbXNnc3RyICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA80YHQvtC+0LHRidC10L3QuNC1Pl0gWy1xfC0tcXVpZXRdIDzQutC+0LzQvNC40YI+IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIsKrJXPCuyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LrQvtC80LzQuNGC0L7QvCDRgdC+INGB0L/RgNGP0YLQsNC90L3Ri9C80Lgg0LjQt9C80LXQvdC10L3QuNGP0LzQuCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiVzIgorbXNnc3RyICLQn9C10YDQtdC00LDQvdC+INGB0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0YDQtdC00LDQutGG0LjQuTolcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjU0OAorbXNnaWQgIk5vIHN0YXNoIGVudHJpZXMgZm91bmQuIgorbXNnc3RyICLQndC1INC90LDQudC00LXQvdGLINGB0L/RgNGP0YLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjy4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIlcyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LTQvtC/0YPRgdGC0LjQvNC+0Lkg0YHRgdGL0LvQutC+0Lkg0L3QsCDQutC+0LzQvNC40YIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMjQgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3NQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiZ2l0IHN0YXNoINC+0YfQuNGB0YLQutCwINGBINC/0LDRgNCw0LzQtdGC0YDQsNC80Lgg0L3QtSDRgNC10LDQu9C40LfQvtCy0LDQvdCwIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDAzCittc2dpZCAiY2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0L/RgNC40LzQtdC90LjRgtGMINGB0L/RgNGP0YLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQstC+INCy0YDQtdC80Y8g0LLRi9C/0L7Qu9C90LXQvdC40Y8g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIGRpZmYgJXNeIS4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQs9C10L3QtdGA0LjRgNC+0LLQsNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSAlc14hLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyMQorbXNnaWQgImNvbmZsaWN0cyBpbiBpbmRleC5Ucnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAi0LrQvtC90YTQu9C40LrRgtGLINCyINC40L3QtNC10LrRgdC1LiDQn9C+0L/RgNC+0LHRg9C50YLQtSDQsdC10LcgLS1pbmRleC4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjcKK21zZ2lkICJjb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDQtNC10YDQtdCy0L4g0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MzQKK21zZ2lkICJjb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCIKK21zZ3N0ciAi0L3QtdCy0L7Qt9C80L7QttC90L4g0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLINC40Lcg0YHQv9GA0Y/RgtCw0L3QvdGL0YUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgd2l0aCAlcyIKK21zZ3N0ciAi0KHQu9C40Y/QvdC40LUgJXMg0LggJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NTggZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2ODAKK21zZ2lkICJJbmRleCB3YXMgbm90IHVuc3Rhc2hlZC4iCittc2dzdHIgItCY0L3QtNC10LrRgSDQvdC1INCx0YvQuyDQuNC30LLQu9C10YfRkdC9INC40Lcg0YHQv9GA0Y/RgtCw0L3QvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5LiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUxNiBidWlsdGluL3N0YXNoLmM6NjE1Cittc2dpZCAiYXR0ZW1wdCB0byByZWNyZWF0ZSB0aGUgaW5kZXgiCittc2dzdHIgItC/0L7Qv9GL0YLQutCwINC/0LXRgNC10YHQvtC30LTQsNC90LjRjyDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICVzICglcykiCittc2dzdHIgItCe0YLQsdGA0L7RiNC10L3QviAlcyAoJXMpIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJXM6INCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtCx0YDQvtGB0LjRgtGMINC30LDQv9C40YHRjCDQuNC3INGB0L/RgNGP0YLQsNC90L3Ri9GFINC40LfQvNC10L3QtdC90LjQuSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU3NworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDRgdGB0YvQu9C60L7QuSDQvdCwINGB0L/RgNGP0YLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjYyNyBnaXQtbGVnYWN5LXN0YXNoLnNoOjY5NAorbXNnaWQgIlRoZSBzdGFzaCBlbnRyeSBpcyBrZXB0IGluIGNhc2UgeW91IG5lZWQgaXQgYWdhaW4uIgorbXNnc3RyICLQodC/0YDRj9GC0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0YHQvtGF0YDQsNC90LXQvdGLLCDQvdCwINGB0LvRg9GH0LDQuSDQtdGB0LvQuCDQvtC90Lgg0YHQvdC+0LLQsCDQstCw0Lwg0L/QvtC90LDQtNC+0LHRj9GC0YHRjy4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2NTAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MTIKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgItCd0LUg0YPQutCw0LfQsNC90L4g0LjQvNGPINCy0LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3ODkgYnVpbHRpbi9zdGFzaC5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICVzIHdpdGggJXMiCittc2dzdHIgItCd0LUg0YPQtNC+0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCAlcyDRgSAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgwNyBidWlsdGluL3N0YXNoLmM6MTQ3NCBidWlsdGluL3N0YXNoLmM6MTUxMAorbXNnaWQgInN0YXNoIG1lc3NhZ2UiCittc2dzdHIgItC+0L/QuNGB0LDQvdC40LUg0YHQv9GA0Y/RgtCw0L3QvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBidWlsdGluL3N0YXNoLmM6ODE3Cittc2dpZCAiXCJnaXQgc3Rhc2ggc3RvcmVcIiByZXF1aXJlcyBvbmUgPGNvbW1pdD4gYXJndW1lbnQiCittc2dzdHIgIsKrZ2l0IHN0YXNoIHN0b3Jlwrsg0YLRgNC10LHRg9C10YIg0YPQutCw0LfQsNC90LjRjyDQvtC00L3QvtCz0L4g0LDRgNCz0YPQvNC10L3RgtCwIDzQutC+0LzQvNC40YI+IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTAzOSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxNworbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjyDQvdC1INCy0YvQsdGA0LDQvdGLIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTEzNSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE1MAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICLQoyDQstCw0YEg0LXRidC1INC90LXRgiDQvdCw0YfQsNC70YzQvdC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNjIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNjUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0YXRgNCw0L3QuNGC0Ywg0YLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE3MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE4MAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INGB0L7RhdGA0LDQvdC40YLRjCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExODIgYnVpbHRpbi9zdGFzaC5jOjExOTEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMDAKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjEzCittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtGF0YDQsNC90LjRgtGMINGC0LXQutGD0YnQtdC1INGB0L7RgdGC0L7Rj9C90LjQtSDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjE5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjMzCittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDRgdC+0YHRgtC+0Y/QvdC40LUg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI2OCBnaXQtbGVnYWN5LXN0YXNoLnNoOjMzNworbXNnaWQgIkNhbid0IHVzZSAtLXBhdGNoIGFuZCAtLWluY2x1ZGUtdW50cmFja2VkIG9yIC0tYWxsIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgItCd0LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgLS1wYXRjaCDQuCAtLWluY2x1ZGUtdW50cmFja2VkINC40LvQuCAtLWFsbCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjg0Cittc2dpZCAiRGlkIHlvdSBmb3JnZXQgdG8gJ2dpdCBhZGQnPyIKK21zZ3N0ciAi0JLQvtC30LzQvtC20L3Qviwg0LLRiyDQt9Cw0LHRi9C70Lgg0LLRi9C/0L7Qu9C90LjRgtGMIMKrZ2l0IGFkZMK7PyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOTkgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNDUKK21zZ2lkICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiCittc2dzdHIgItCd0LXRgiDQu9C+0LrQsNC70YzQvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5INC00LvRjyDRgdC+0YXRgNCw0L3QtdC90LjRjyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMDYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTAKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0YLRjCDRgdC/0YDRj9GC0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzIxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU0Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDRgtC10LrRg9GJ0LjQuSDRgdGC0LDRgtGD0YEiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAlcyIKK21zZ3N0ciAi0KDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMg0Lgg0YHQvtGB0YLQvtGP0L3QuNC1INC40L3QtNC10LrRgdCwINGB0L7RhdGA0LDQvdC10L3RiyAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0MzAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozODQKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjUgYnVpbHRpbi9zdGFzaC5jOjE1MDEKK21zZ2lkICJrZWVwIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDY3IGJ1aWx0aW4vc3Rhc2guYzoxNTAzCittc2dpZCAic3Rhc2ggaW4gcGF0Y2ggbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2OCBidWlsdGluL3N0YXNoLmM6MTUwNAorbXNnaWQgInF1aWV0IG1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NzAgYnVpbHRpbi9zdGFzaC5jOjE1MDYKK21zZ2lkICJpbmNsdWRlIHVudHJhY2tlZCBmaWxlcyBpbiBzdGFzaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3MiBidWlsdGluL3N0YXNoLmM6MTUwOAorbXNnaWQgImluY2x1ZGUgaWdub3JlIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBleGVjICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM3Cittc2dpZCAic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIgorbXNnc3RyICLQv9GA0L7Qv9GD0YHRgtC40YLRjCDQuCDRg9C00LDQu9C40YLRjCDQstGB0LUg0YHRgtGA0L7QutC4LCDQvdCw0YfQuNC90LDRjtGJ0LjQtdGB0Y8g0YEg0YHQuNC80LLQvtC70LAg0LrQvtC80LzQtdGC0LDRgNC40Y8iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjQwCittc2dpZCAicHJlcGVuZCBjb21tZW50IGNoYXJhY3RlciBhbmQgc3BhY2UgdG8gZWFjaCBsaW5lIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMINC/0LXRgNC10LQg0LrQsNC20LTQvtC5INGB0YLRgNC+0LrQvtC5INGB0LjQvNCy0L7QuyDQutC+0LzQvNC10YLQsNGA0LjRjyDQuCDQv9GA0L7QsdC10LsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk0MgorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiCittc2dzdHIgItCe0LbQuNC00LDQu9C+0YHRjCDQv9C+0LvQvdC+0LUg0LjQvNGPINGB0YHRi9C70LrQuCwg0LAg0L/QvtC70YPRh9C10L3QviAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYyCittc2dpZCAic3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUgdGFrZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0LHRgNC10LfQsNGC0Ywg0L7QtNC40L0g0LrQvtC80L/QvtC90LXQvdGCIHVybCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MDggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNjcKK21zZ2lkICJhbHRlcm5hdGl2ZSBhbmNob3IgZm9yIHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICLQsNC70YzRgtC10YDQvdCw0YLQuNCy0L3Ri9C5INGB0LjQvNCy0L7QuyDQtNC70Y8g0L7RgtC90L7RgdC40YLQtdC70YzQvdGL0YUg0L/Rg9GC0LXQuSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxMworbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PNC/0YPRgtGMPl0gWzzQv9GD0YLRjD7igKZdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MjcKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICJVUkwg0LTQu9GPINC/0L7QtNC80L7QtNGD0LvRjyDQv9C+INC/0YPRgtC4IMKrJXPCuyDQvdC1INC90LDQudC00LXQvSDQsiAuZ2l0bW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRlcmluZyAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIGZvciAlc1xuIgorIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIHdoaWxlIHJlY3Vyc2luZyBpbiB0aGUgbmVzdGVkIHN1Ym1vZHVsZXMgb2YgJXNcbiIKKyIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NjIKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2YgZW50ZXJpbmcgZWFjaCBzdWJtb2R1bGUgY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDQ5Cittc2dpZCAiUmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NjkKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDxjb21tYW5kPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgbG9vayB1cCBjb25maWd1cmF0aW9uICclcycuIEFzc3VtaW5nIHRoaXMgcmVwb3NpdG9yeSBpcyBpdHMgb3duICIKKyJhdXRob3JpdGF0aXZlIHVwc3RyZWFtLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgItCh0LHQvtC5INGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0LDQtNGA0LXRgdCwINC00LvRjyDQv9GD0YLQuCDQv9C+0LTQvNC+0LTRg9C70Y8gwqslc8K7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgItCf0L7QtNC80L7QtNGD0LvRjCDCqyVzwrsgKCVzKSDQt9Cw0YDQtdCz0LjRgdGC0YDQuNGA0L7QstCw0L0g0L/QviDQv9GD0YLQuCDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBjb21tYW5kIHVwZGF0ZSBtb2RlIHN1Z2dlc3RlZCBmb3Igc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAi0LLQvdC40LzQsNC90LjQtTog0L/RgNC10LTQv9C+0LvQsNCz0LDQtdC80YvQuSDRgNC10LbQuNC8INC+0LHQvdC+0LLQu9C10L3QuNGPINC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8gwqslc8K7XG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICLQodCx0L7QuSDRgNC10LPQuNGB0YLRgNCw0YbQuNC4INGA0LXQttC40LzQsCDQvtCx0L3QvtCy0LvQtdC90LjRjyDQtNC70Y8g0L/Rg9GC0Lgg0L/QvtC00LzQvtC00YPQu9GPIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcwNworbXNnaWQgIlN1cHByZXNzIG91dHB1dCBmb3IgaW5pdGlhbGl6aW5nIGEgc3VibW9kdWxlIgorbXNnc3RyICLQndC1INCy0YvQstC+0LTQuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0LjQvdC40YbQuNCw0LvQuNC30LDRhtC40Lgg0L/QvtC00LzQvtC00YPQu9GPIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzEyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzxvcHRpb25zPl0gWzxwYXRoPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjc4NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICclcyciCittc2dzdHIgItC90LUg0L3QsNC50LTQtdC90L4g0YHQvtC+0YLQstC10YLRgdGC0LLQuNC1INC/0L7QtNC80L7QtNGD0LvQtdC5INCyIC5naXRtb2R1bGVzINC00LvRjyDQv9GD0YLQuCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCByZWYgaW5zaWRlIHRoZSBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4IEhFQUQg0YHRgdGL0LvQutGDINCy0L3Rg9GC0YDQuCDQv9C+0LTQvNC+0LTRg9C70Y8gwqslc8K7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODUwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDE5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQudGC0Lgg0LLQs9C70YPQsdGMINC/0L7QtNC80L7QtNGD0LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NzQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExODUKK21zZ2lkICJTdXBwcmVzcyBzdWJtb2R1bGUgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAi0J3QtSDQstGL0LLQvtC00LjRgtGMINGB0YLQsNGC0YPRgSDQv9C+0LTQvNC+0LTRg9C70Y8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NzUKK21zZ2lkICIiCisiVXNlIGNvbW1pdCBzdG9yZWQgaW4gdGhlIGluZGV4IGluc3RlYWQgb2YgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIHN1Ym1vZHVsZSAiCisiSEVBRCIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC60L7QvNC80LjRgiDRhdGA0LDQvdGP0YnQuNC50YHRjyDQsiDQuNC90LTQtdC60YHQtSDQstC80LXRgdGC0L4g0LrQvtC80LzQuNGC0LAg0YXRgNCw0L3Rj9GJ0LXQs9C+0YHRjyDQsiBIRUFEINC/0L7QtNC80L7QtNGD0LvRjyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg3NgorbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAi0L/RgNC+0YXQvtC00LjRgtGMINCy0LPQu9GD0LHRjCDQstC70L7QttC10L3QvdGL0YUg0L/QvtC00LzQvtC00YPQu9C10LkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODEKK21zZ2lkICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs80L/Rg9GC0Yw+4oCmXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkwNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPNC/0YPRgtGMPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk2OQorIywgYy1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDQ3Cittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IG9mIHN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA1NAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPNC/0YPRgtGMPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSAodXNlICdybSAtcmYnIGlmIHlvdSAiCisicmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgbG9jYWwgbW9kaWZpY2F0aW9uczsgdXNlICctZicgdG8gZGlzY2FyZCAiCisidGhlbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmVkIGRpcmVjdG9yeSAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBzdWJtb2R1bGUgd29yayB0cmVlICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGVtcHR5IHN1Ym1vZHVsZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTg2Cittc2dpZCAiUmVtb3ZlIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWVzIGV2ZW4gaWYgdGhleSBjb250YWluIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExODcKK21zZ2lkICJVbnJlZ2lzdGVyIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTkyCittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8cGF0aD4uLi5dXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzzQv9GD0YLRjD7igKZdXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMDYKK21zZ2lkICJVc2UgJy0tYWxsJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGVpbml0aWFsaXplIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrLS1hbGzCuywg0LXRgdC70Lgg0LLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0LTQtdC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDRgtGMINCy0YHQtSDQv9C+0LTQvNC+0LTRg9C70LgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzAxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBhZGQgYWx0ZXJuYXRlOiAlcyIKK21zZ3N0ciAi0L/QvtC00LzQvtC00YPQu9GOIMKrJXPCuyDQvdC1INGD0LTQsNC70L7RgdGMINC00L7QsdCw0LLQuNGC0Ywg0LDQu9GM0YLQtdGA0L3QsNGC0LjQstGDOiAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgaXMgbm90IHJlY29nbml6ZWQiCittc2dzdHIgItCX0L3QsNGH0LXQvdC40LUgwqslc8K7INC00LvRjyDQv9Cw0YDQsNC80LXRgtGA0LAgc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kg0L3QtSDRgNCw0L/QvtC30L3QsNC90L4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAi0JfQvdCw0YfQtdC90LjQtSDCqyVzwrsg0LTQu9GPINC/0LDRgNCw0LzQtdGC0YDQsCBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24g0L3QtSDRgNCw0L/QvtC30L3QsNC90L4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzcwCittc2dpZCAid2hlcmUgdGhlIG5ldyBzdWJtb2R1bGUgd2lsbCBiZSBjbG9uZWQgdG8iCittc2dzdHIgItC60YPQtNCwINC00L7Qu9C20LXQvSDQsdGL0YLRjCDRgdC60LvQvtC90LjRgNC+0LLQsNC9INC90L7QstGL0Lkg0L/QvtC00LzQvtC00YPQu9GMIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM3MworbXNnaWQgIm5hbWUgb2YgdGhlIG5ldyBzdWJtb2R1bGUiCittc2dzdHIgItC40LzRjyDQvdC+0LLQvtCz0L4g0L/QvtC00LzQvtC00YPQu9GPIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM3NgorbXNnaWQgInVybCB3aGVyZSB0byBjbG9uZSB0aGUgc3VibW9kdWxlIGZyb20iCittc2dzdHIgInVybCDQvtGC0LrRg9C00LAg0LTQvtC70LbQtdC9INCx0YvQuyDRgdC60LvQvtC90LjRgNC+0LLQsNC9INC90L7QstGL0Lkg0L/QvtC00LzQvtC00YPQu9GMIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4NAorbXNnaWQgImRlcHRoIGZvciBzaGFsbG93IGNsb25lcyIKK21zZ3N0ciAi0LPQu9GD0LHQuNC90LAg0LTQu9GPINGH0LDRgdGC0LjRh9C90L7Qs9C+INC60LvQvtC90LAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODcxCittc2dpZCAiZm9yY2UgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4g0LLRi9Cy0L7QtNC40YLRjCDQv9GA0L7Qs9GA0LXRgdGBINC60LvQvtC90LjRgNC+0LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTIKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD08cGF0aD5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxyZXBvc2l0b3J5Pl0gWy0tbmFtZSA8bmFtZT5dIFstLWRlcHRoIDxkZXB0aD5dIC0tdXJsIDx1cmw+IC0tcGF0aCA8cGF0aD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PNC/0YPRgtGMPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSA80YDQtdC/0L7Qt9C40YLQvtGA0LjQuT5dIFstLW5hbWUgPNC40LzRjz5dIFstLWRlcHRoIDzQs9C70YPQsdC40L3QsD5dIC0tdXJsIDx1cmw+IC0tcGF0aCA80L/Rg9GC0Yw+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQyMworIywgYy1mb3JtYXQKK21zZ2lkICJjbG9uZSBvZiAnJXMnIGludG8gc3VibW9kdWxlIHBhdGggJyVzJyBmYWlsZWQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LrQu9C+0L3QuNGA0L7QstCw0YLRjCDCqyVzwrsg0LIg0L/QvtC00LzQvtC00YPQu9GMINC/0L4g0L/Rg9GC0Lggwqslc8K7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQutCw0YLQsNC70L7QsyDQtNC70Y8g0L/QvtC00LzQvtC00YPQu9GPIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICclcycgbm90IGluaXRpYWxpemVkIgorbXNnc3RyICLQn9C+0LTQvNC+0LTRg9C70Ywg0L/QviDQv9GD0YLQuCDCqyVzwrsg0L3QtSDQuNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0L0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTc0Cittc2dpZCAiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgItCS0L7Qt9C80L7QttC90L4sINCy0Ysg0YXQvtGC0LXQu9C4INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDCq3VwZGF0ZSAtLWluaXTCuz8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHVubWVyZ2VkIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GB0Log0L3QtSDRgdC70LjRgtC+0LPQviDQv9C+0LTQvNC+0LTRg9C70Y8gJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLQn9GA0L7Qv9GD0YHQuiDQv9C+0LTQvNC+0LTRg9C70Y8gwqslc8K7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTc3NworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJy4gUmV0cnkgc2NoZWR1bGVkIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC60LvQvtC90LjRgNC+0LLQsNGC0Ywgwqslc8K7LiDQl9Cw0L/Qu9Cw0L3QuNGA0L7QstCw0L3QsCDQv9C+0LLRgtC+0YDQvdCw0Y8g0L/QvtC/0YvRgtC60LAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnIGEgc2Vjb25kIHRpbWUsIGFib3J0aW5nIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC60LvQvtC90LjRgNC+0LLQsNGC0Ywgwqslc8K7INGB0L4g0LLRgtC+0YDQvtC5INC/0L7Qv9GL0YLQutC4LCDQvtGC0LzQtdC90LAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODUwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDkyCittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgItC/0YPRgtGMINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODUzCittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUsIGFjcm9zcyBuZXN0ZWQgc3VibW9kdWxlIGJvdW5kYXJpZXMiCittc2dzdHIgItC/0YPRgtGMINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUsINCyINC/0YDQtdC00LXQu9Cw0YUg0LPRgNCw0L3QuNGGINC/0L7QtNC80L7QtNGD0LvRjyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NTcKK21zZ2lkICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvciBub25lIgorbXNnc3RyICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCDQuNC70Lggbm9uZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NjMKK21zZ2lkICJDcmVhdGUgYSBzaGFsbG93IGNsb25lIHRydW5jYXRlZCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXZpc2lvbnMiCittc2dzdHIgItCh0L7Qt9C00LDRgtGMINGH0LDRgdGC0LjRh9C90YvQuSDQutC70L7QvSwg0L7Qs9GA0LDQvdC40YfQtdC90L3Ri9C5INGD0LrQsNC30LDQvdC90YvQvCDQutC+0LvQuNGH0LXRgdGC0LLQvtC8INGA0LXQtNCw0LrRhtC40LkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODY2Cittc2dpZCAicGFyYWxsZWwgam9icyIKK21zZ3N0ciAi0L/QsNGA0LDQu9C70LXQu9GM0L3Ri9C1INC30LDQtNCw0YfQuCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NjgKK21zZ2lkICJ3aGV0aGVyIHRoZSBpbml0aWFsIGNsb25lIHNob3VsZCBmb2xsb3cgdGhlIHNoYWxsb3cgcmVjb21tZW5kYXRpb24iCittc2dzdHIgItC00L7Qu9C20LXQvSDQu9C4INC40LfQvdCw0YfQsNC70YzQvdGL0Lkg0L/RgNC+0YbQtdGB0YEg0LrQu9C+0L3QuNGA0L7QstCw0L3QuNGPINGB0LvQtdC00L7QstCw0YLRjCDRgNC10LrQvtC80LXQvdC00LDRhtC40Lgg0L4g0YfQsNGB0YLQuNGH0L3QvtGB0YLQuCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NjkKK21zZ2lkICJkb24ndCBwcmludCBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICLQstGLINCy0YvQstC+0LTQuNGC0Ywg0L/RgNC+0LPRgNC10YHRgSDQutC70L7QvdC40YDQvtCy0LDQvdC40Y8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc2Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZV9jbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZV9jbG9uZSBbLS1wcmVmaXg9PNC/0YPRgtGMPl0gWzzQv9GD0YLRjD7igKZdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4OQorbXNnaWQgImJhZCB2YWx1ZSBmb3IgdXBkYXRlIHBhcmFtZXRlciIKK21zZ3N0ciAi0L/Qu9C+0YXQvtC1INC30L3QsNGH0LXQvdC40LUg0LTQu9GPINC/0LDRgNCw0LzQtdGC0YDQsCB1cGRhdGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0IGJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0ICIKKyJ0aGUgc3VwZXJwcm9qZWN0IGlzIG5vdCBvbiBhbnkgYnJhbmNoIgorbXNnc3RyICLQktC10YLQutCwINC/0L7QtNC80L7QtNGD0LvRjyAoJXMpINC90LDRgdGC0YDQvtC10L3QsCDQvdCwINC90LDRgdC70LXQtNC+0LLQsNC90LjQtSDQstC10YLQutC4INC40Lcg0YDQvtC00LjRgtC10LvRjNGB0LrQvtCz0L4g0L/RgNC+0LXQutGC0LAsINC90L4g0L7QvSDQvdC1INC90LDRhdC+0LTQuNGC0YHRjyDQvdC4INC90LAg0L7QtNC90L7QuSDQstC10YLQutC1IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGEgcmVwb3NpdG9yeSBoYW5kbGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDkzCittc2dpZCAicmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMiCittc2dzdHIgItGA0LXQutGD0YDRgdC40LLQvdC+INC/0L4g0L/QvtC00LzQvtC00YPQu9GP0LwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDk5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPNC+0L/RhtC40Lg+XSBbPNC/0YPRgtGMPuKApl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTU2Cittc2dpZCAiY2hlY2sgaWYgaXQgaXMgc2FmZSB0byB3cml0ZSB0byB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE1OQorbXNnaWQgInVuc2V0IHRoZSBjb25maWcgaW4gdGhlIC5naXRtb2R1bGVzIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNjQKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIDxuYW1lPiBbPHZhbHVlPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgPNC40LzRjz4gWzzQt9C90LDRh9C10L3QuNC1Pl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTY1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLXVuc2V0IDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLXVuc2V0IDzQuNC80Y8+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE2NgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUiCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTg1IGdpdC1zdWJtb2R1bGUuc2g6MTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJwbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIC5naXRtb2R1bGVzIGZpbGUgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIzNSBnaXQuYzo0MzMgZ2l0LmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXNuJ3Qgc3VwcG9ydCAtLXN1cGVyLXByZWZpeCIKK21zZ3N0ciAiJXMg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0L/QsNGA0LDQvNC10YLRgCAtLXN1cGVyLXByZWZpeCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBzdWJtb2R1bGUtLWhlbHBlciBzdWJjb21tYW5kIgorbXNnc3RyICLCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC/0L7QtNC60L7QvNCw0L3QtNC+0Lkgc3VibW9kdWxlLS1oZWxwZXIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OAorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgWzzQvtC/0YbQuNC4Pl0gPNC40LzRjz4gWzzRgdGB0YvQu9C60LA+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDzQuNC80Y8+IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwCittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMINGB0L7QvtCx0YnQtdC90LjRjyDQvtCxINC+0YjQuNCx0LrQsNGFINC00LvRjyDQvdC10YHQuNC80LLQvtC70YzQvdGL0YUgKNC+0YLRgdC+0LXQtNC40L3QtdC90L3Ri9GFKSDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDEKK21zZ2lkICJkZWxldGUgc3ltYm9saWMgcmVmIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDRgdC40LzQstC+0LvRjNC90YvQtSDRgdGB0YvQu9C60LgiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDIKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgItGD0LrQvtGA0L7Rh9C10L3QvdGL0Lkg0LLRi9Cy0L7QtCDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIgorbXNnc3RyICLQv9GA0LjRh9C40L3QsCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAi0L/RgNC40YfQuNC90LAg0L7QsdC90L7QstC70LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjUKK21zZ2lkICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl1cbiIKKyJcdFx0PHRhZ25hbWU+IFs8aGVhZD5dIgorbXNnc3RyICJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDzRgdC+0L7QsdGJ0LXQvdC40LU+IHwgLUYgPNGE0LDQudC7Pl1cblx0XHQ80LjQvNGPLdC80LXRgtC60LA+IFs80YDQtdC00LDQutGG0LjRjz5dIgorCisjOiBidWlsdGluL3RhZy5jOjI3Cittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLWQgPNC40LzRjy3QvNC10YLQutC4PuKApiIKKworIzogYnVpbHRpbi90YWcuYzoyOAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0gWy0tcG9pbnRzLWF0IDxvYmplY3Q+XVxuIgorIlx0XHRbLS1mb3JtYXQ9PGZvcm1hdD5dIFstLVtuby1dbWVyZ2VkIFs8Y29tbWl0Pl1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICJnaXQgdGFnIC1sIFstbls80LrQvtC70LjRh9C10YHRgtCy0L4+XV0gWy0tY29udGFpbnMgPNC60L7QvNC80LjRgj5dIFstLW5vLWNvbnRhaW5zIDzQutC+0LzQvNC40YI+XSBbLS1wb2ludHMtYXQgPNC+0LHRitC10LrRgj5dXG5cdFx0Wy0tZm9ybWF0PTzRhNC+0YDQvNCw0YI+XSBbLS1bbm8tXW1lcmdlZCBbPNC60L7QvNC80LjRgj5dXSBbPNGI0LDQsdC70L7QvT7igKZdIgorCisjOiBidWlsdGluL3RhZy5jOjMwCittc2dpZCAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PNGE0L7RgNC80LDRgj5dIDzQuNC80Y8t0LzQtdGC0LrQuD7igKYiCisKKyM6IGJ1aWx0aW4vdGFnLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAi0LzQtdGC0LrQsCAgwqslc8K7INC90LUg0L3QsNC50LTQtdC90LAuIgorCisjOiBidWlsdGluL3RhZy5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgItCc0LXRgtC60LAgwqslc8K7INGD0LTQsNC70LXQvdCwICjQsdGL0LvQsCAlcylcbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLlxuIgorbXNnc3RyICJcbtCS0LLQtdC00LjRgtC1INGB0L7QvtCx0YnQtdC90LjQtSDQtNC70Y8g0LzQtdGC0LrQuDpcbiAgJXNcbtCh0YLRgNC+0LrQuCwg0L3QsNGH0LjQvdCw0Y7RidC40LXRgdGPINGBIMKrJWPCuyDQsdGD0LTRg9GCINC/0YDQvtC40LPQvdC+0YDQuNGA0L7QstCw0L3Riy5cbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIgorbXNnc3RyICJcbtCS0LLQtdC00LjRgtC1INGB0L7QvtCx0YnQtdC90LjQtSDQtNC70Y8g0LzQtdGC0LrQuDpcbiAgJXNcbtCh0YLRgNC+0LrQuCwg0L3QsNGH0LjQvdCw0Y7RidC40LXRgdGPINGBIMKrJWPCuyDQsdGD0LTRg9GCINC+0YHRgtCw0LLQu9C10L3Rizsg0LLRiyDQvNC+0LbQtdGC0LUg0YPQtNCw0LvQuNGC0Ywg0LjRhSDQstGA0YPRh9C90YPRjiwg0LXRgdC70Lgg0YXQvtGC0LjRgtC1LlxuIgorCisjOiBidWlsdGluL3RhZy5jOjE5MgorbXNnaWQgInVuYWJsZSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC00L/QuNGB0LDRgtGMINC80LXRgtC60YMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTk0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0YTQsNC50Lsg0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi90YWcuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIGNyZWF0ZWQgYSBuZXN0ZWQgdGFnLiBUaGUgb2JqZWN0IHJlZmVycmVkIHRvIGJ5IHlvdXIgbmV3IHRhZyBpc1xuIgorImFscmVhZHkgYSB0YWcuIElmIHlvdSBtZWFudCB0byB0YWcgdGhlIG9iamVjdCB0aGF0IGl0IHBvaW50cyB0bywgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIyNgorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDRgtC40L8g0L7QsdGK0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mjc4Cittc2dpZCAibm8gdGFnIG1lc3NhZ2U/IgorbXNnc3RyICLQvdC10YIg0L7Qv9C40YHQsNC90LjRjyDQvNC10YLQutC4PyIKKworIzogYnVpbHRpbi90YWcuYzoyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAi0KHQvtC+0LHRidC10L3QuNC1INC80LXRgtC60Lgg0LHRi9C70L4g0L7RgdGC0LDQstC70LXQvdC+INCyICVzXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mzk2Cittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgItGB0L/QuNGB0L7QuiDQvdCw0LfQstCw0L3QuNC5INC80LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mzk4Cittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgItC/0LXRh9Cw0YLQsNGC0YwgPG4+INGB0YLRgNC+0Log0L7Qv9C40YHQsNC90LjRjyDQvtGCINC60LDQttC00L7QuSDQvNC10YLQutC4IgorCisjOiBidWlsdGluL3RhZy5jOjQwMAorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDQvNC10YLQutC4IgorCisjOiBidWlsdGluL3RhZy5jOjQwMQorbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICLQv9GA0L7QstC10YDQuNGC0Ywg0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi90YWcuYzo0MDMKK21zZ2lkICJUYWcgY3JlYXRpb24gb3B0aW9ucyIKK21zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4INGB0L7Qt9C00LDQvdC40Y8g0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi90YWcuYzo0MDUKK21zZ2lkICJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiCittc2dzdHIgItC00LvRjyDQsNC90L3QvtGC0LjRgNC+0LLQsNC90L3QvtC5INC80LXRgtC60Lgg0L3Rg9C20L3QviDRgdC+0L7QsdGJ0LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA3Cittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgItC+0L/QuNGB0LDQvdC40LUg0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi90YWcuYzo0MDkKK21zZ2lkICJmb3JjZSBlZGl0IG9mIHRhZyBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDEwCittc2dpZCAiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIKK21zZ3N0ciAi0LDQvdC90L7RgtC40YDQvtCy0LDQvdC90LDRjyDQuCDQv9C+0LTQv9C40YHQsNC90L3QsNGPINGBINC/0L7QvNC+0YnRjNGOIEdQRyDQvNC10YLQutCwIgorCisjOiBidWlsdGluL3RhZy5jOjQxMworbXNnaWQgInVzZSBhbm90aGVyIGtleSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQtNGA0YPQs9C+0Lkg0LrQu9GO0Ycg0LTQu9GPINC/0L7QtNC/0LjRgdCw0L3QuNGPINC80LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE0Cittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAi0LfQsNC80LXQvdCwINC80LXRgtC60LgsINC10YHQu9C4INC+0L3QsCDRgdGD0YnQtdGB0YLQstGD0LXRgiIKKworIzogYnVpbHRpbi90YWcuYzo0MTUgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY5Cittc2dpZCAiY3JlYXRlIGEgcmVmbG9nIgorbXNnc3RyICLRgdC+0LfQtNCw0YLRjCDQttGD0YDQvdCw0Lsg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL3RhZy5jOjQxNworbXNnaWQgIlRhZyBsaXN0aW5nIG9wdGlvbnMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCDQstGL0LLQvtC00LAg0YHQv9C40YHQutCwINC80LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE4Cittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGB0L/QuNGB0L7QuiDQvNC10YLQvtC6INC/0L4g0YHRgtC+0LvQsdGG0LDQvCIKKworIzogYnVpbHRpbi90YWcuYzo0MTkgYnVpbHRpbi90YWcuYzo0MjEKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgItCy0YvQstC+0LQg0YLQvtC70YzQutC+INC80LXRgtC+0LosINC60L7RgtC+0YDRi9C1INGB0L7QtNC10YDQttCw0YIg0LrQvtC80LzQuNGCIgorCisjOiBidWlsdGluL3RhZy5jOjQyMCBidWlsdGluL3RhZy5jOjQyMgorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgtC+0LvRjNC60L4g0LzQtdGC0L7Quiwg0LrQvtGC0L7RgNGL0LUg0L3QtSDRgdC+0LTQtdGA0LbQsNGCINC60L7QvNC80LjRgiIKKworIzogYnVpbHRpbi90YWcuYzo0MjMKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICLQstGL0LLQvtC0INGC0L7Qu9GM0LrQviDRgdC70LjRgtGL0YUg0LzQtdGC0L7QuiIKKworIzogYnVpbHRpbi90YWcuYzo0MjQKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgtC+0LvRjNC60L4g0L3QtSDRgdC70LjRgtGL0YUg0LzQtdGC0L7QuiIKKworIzogYnVpbHRpbi90YWcuYzo0MjgKK21zZ2lkICJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgtC+0LvRjNC60L4g0LzQtdGC0L7Quiwg0L7Qv9GA0LXQtNC10LvQtdC90L3QvtCz0L4g0L7QsdGK0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDcyCittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uINC4IC1uINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBidWlsdGluL3RhZy5jOjQ5NAorbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICLQvtC/0YbQuNGOIC1uINC80L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGC0L7Qu9GM0LrQviDQsiDRgNC10LbQuNC80LUg0YHQv9C40YHQutCwIgorCisjOiBidWlsdGluL3RhZy5jOjQ5NgorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgItC+0L/RhtC40Y4gLS1jb250YWlucyDQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0LIg0YDQtdC20LjQvNC1INGB0L/QuNGB0LrQsCIKKworIzogYnVpbHRpbi90YWcuYzo0OTgKK21zZ2lkICItLW5vLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICLQvtC/0YbQuNGOIC0tbm8tY29udGFpbnMg0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INCyINGA0LXQttC40LzQtSDRgdC/0LjRgdC60LAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTAwCittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgItC+0L/RhtC40Y4gLS1wb2ludHMtYXQg0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INCyINGA0LXQttC40LzQtSDRgdC/0LjRgdC60LAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTAyCittc2dpZCAiLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgItC+0L/RhtC40LggLS1tZXJnZWQg0LggLS1uby1tZXJnZWQg0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INCyINGA0LXQttC40LzQtSDRgdC/0LjRgdC60LAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEzCittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICItRiDQuCAtbSDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTMyCittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICLQv9C10YDQtdC00LDQvdC+INGB0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0L/QsNGA0LDQvNC10YLRgNC+0LIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICLCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC00L7Qv9GD0YHRgtC40LzRi9C8INC40LzQtdC90LXQvCDQvNC10YLQutC4LiIKKworIzogYnVpbHRpbi90YWcuYzo1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgItC80LXRgtC60LAgwqslc8K7INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiIKKworIzogYnVpbHRpbi90YWcuYzo1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICLQnNC10YLQutCwIMKrJXPCuyDQvtCx0L3QvtCy0LvQtdC90LAgKNCx0YvQu9CwICVzKVxuIgorCisjOiBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTAwCittc2dpZCAiVW5wYWNraW5nIG9iamVjdHMiCittc2dzdHIgItCg0LDRgdC/0LDQutC+0LLQutCwINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LrQsNGC0LDQu9C+0LMgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINGE0LDQudC7ICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGZpbGUgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0YTQsNC50LsgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE0IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMINC60LDRgtCw0LvQvtCzICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJUZXN0aW5nIG10aW1lIGluICclcycgIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwIG10aW1lINCyIMKrJXPCuyAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTUzCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGZpbGUiCittc2dzdHIgItC40L3RhNC+0YDQvNCw0YbQuNGPINGB0YLQsNGC0LjRgdGC0LjQutC4INC60LDRgtCw0LvQvtCz0LAg0L3QtSDQuNC30LzQtdC90Y/QtdGC0YHRjyDQv9C+0YHQu9C1INC00L7QsdCw0LLQu9C10L3QuNGPINC90L7QstC+0LPQviDRhNCw0LnQu9CwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE2NgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgItC40L3RhNC+0YDQvNCw0YbQuNGPINGB0YLQsNGC0LjRgdGC0LjQutC4INC60LDRgtCw0LvQvtCz0LAg0L3QtSDQuNC30LzQtdC90Y/QtdGC0YHRjyDQv9C+0YHQu9C1INC00L7QsdCw0LLQu9C10L3QuNGPINC90L7QstC+0LPQviDQutCw0YLQsNC70L7Qs9CwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE3OQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciB1cGRhdGluZyBhIGZpbGUiCittc2dzdHIgItC40L3RhNC+0YDQvNCw0YbQuNGPINGB0YLQsNGC0LjRgdGC0LjQutC4INC60LDRgtCw0LvQvtCz0LAg0LjQt9C80LXQvdGP0LXRgtGB0Y8g0L/QvtGB0LvQtSDQtNC+0LHQsNCy0LvQtdC90LjRjyDQvdC+0LLQvtCz0L4g0YTQsNC50LvQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxOTAKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgYWRkaW5nIGEgZmlsZSBpbnNpZGUgc3ViZGlyZWN0b3J5IgorbXNnc3RyICLQuNC90YTQvtGA0LzQsNGG0LjRjyDRgdGC0LDRgtC40YHRgtC40LrQuCDQutCw0YLQsNC70L7Qs9CwINC40LfQvNC10L3Rj9C10YLRgdGPINC/0L7RgdC70LUg0LTQvtCx0LDQstC70LXQvdC40Y8g0L3QvtCy0L7Qs9C+INGE0LDQudC70LAg0LLQvdGD0YLRgNC4INC/0L7QtNC60LDRgtCw0LvQvtCz0LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjAxCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBmaWxlIgorbXNnc3RyICLQuNC90YTQvtGA0LzQsNGG0LjRjyDRgdGC0LDRgtC40YHRgtC40LrQuCDQutCw0YLQsNC70L7Qs9CwINC90LUg0LjQt9C80LXQvdGP0LXRgtGB0Y8g0L/QvtGB0LvQtSDRg9C00LDQu9C10L3QuNGPINGE0LDQudC70LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjE0Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBkaXJlY3RvcnkiCittc2dzdHIgItC40L3RhNC+0YDQvNCw0YbQuNGPINGB0YLQsNGC0LjRgdGC0LjQutC4INC60LDRgtCw0LvQvtCz0LAg0L3QtSDQuNC30LzQtdC90Y/QtdGC0YHRjyDQv9C+0YHQu9C1INGD0LTQsNC70LXQvdC40Y8g0LrQsNGC0LDQu9C+0LPQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMjEKK21zZ2lkICIgT0siCittc2dzdHIgIiBPSyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo1ODkKK21zZ2lkICJnaXQgdXBkYXRlLWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCB1cGRhdGUtaW5kZXggWzzQvtC/0YbQuNC4Pl0gWy0tXSBbPNGE0LDQudC7PuKApl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTcxCittc2dpZCAiY29udGludWUgcmVmcmVzaCBldmVuIHdoZW4gaW5kZXggbmVlZHMgdXBkYXRlIgorbXNnc3RyICLQv9GA0L7QtNC+0LvQttC40YLRjCDQvtCx0L3QvtCy0LvQtdC90LjQtSwg0LTQsNC20LUg0LXRgdC70Lgg0LjQvdC00LXQutGBINGC0YDQtdCx0YPQtdGCINC+0LHQvdC+0LLQu9C10L3QuNGPIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NAorbXNnaWQgInJlZnJlc2g6IGlnbm9yZSBzdWJtb2R1bGVzIgorbXNnc3RyICLQvtCx0L3QvtCy0LvQtdC90LjQtTog0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC/0L7QtNC80L7QtNGD0LvQuCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzcKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAi0L3QtSDQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0L3QvtCy0YvQtSDRhNCw0LnQu9GLIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3OQorbXNnaWQgImxldCBmaWxlcyByZXBsYWNlIGRpcmVjdG9yaWVzIGFuZCB2aWNlLXZlcnNhIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0YTQsNC50LvQsNC8INC30LDQvNC10L3Rj9GC0Ywg0LrQsNGC0LDQu9C+0LPQuCDQuCDQvdCw0L7QsdC+0YDQvtGCIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MQorbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgItC30LDQvNC10YfQsNGC0Ywg0YTQsNC50LvRiyDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjQtSDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MworbXNnaWQgInJlZnJlc2ggZXZlbiBpZiBpbmRleCBjb250YWlucyB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMLCDQtNCw0LbQtSDQtdGB0LvQuCDQsiDQuNC90LTQtdC60YHQtSDQuNC80LXRjtGC0YHRjyDQvdC1INGB0LvQuNGC0YvQtSDQt9Cw0L/QuNGB0LgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg2Cittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+INGB0YLQsNGC0YPRgdC1INGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTAKK21zZ2lkICJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciCittc2dzdHIgItC60LDQuiAtLXJlZnJlc2gsINC90L4g0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC90LDRgdGC0YDQvtC50LrRgyBhc3N1bWUtdW5jaGFuZ2VkIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NAorbXNnaWQgIjxtb2RlPiw8b2JqZWN0Piw8cGF0aD4iCittc2dzdHIgIjzRgNC10LbQuNC8INC00L7RgdGC0YPQv9CwPiw80L7QsdGK0LXQutGCPiw80L/Rg9GC0Yw+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NQorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDRg9C60LDQt9Cw0L3QvdGD0Y4g0LfQsNC/0LjRgdGMINCyINC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA1Cittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICLQv9C+0LzQtdGC0LjRgtGMINGE0LDQudC70Ysg0LrQsNC6IMKr0L3QtSDQuNC30LzQtdC90LXQvdC90YvQtcK7IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDgKK21zZ2lkICJjbGVhciBhc3N1bWVkLXVuY2hhbmdlZCBiaXQiCittc2dzdHIgItGD0LHRgNCw0YLRjCDQv9C+0LzQtdGC0LrRgyBhc3N1bWVkLXVuY2hhbmdlZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDExCittc2dpZCAibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIKK21zZ3N0ciAi0L/QvtC80LXRgtC40YLRjCDRhNCw0LnQu9GLINC60LDQuiDCq9GC0L7Qu9GM0LrQviDQsiDQuNC90LTQtdC60YHQtcK7IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTQKK21zZ2lkICJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIKK21zZ3N0ciAi0YPQsdGA0LDRgtGMINC/0L7QvNC10YLQutGDIHNraXAtd29ya3RyZWUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNworbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLRgtC+0LvRjNC60L4g0LTQvtCx0LDQstC40YLRjCDQsiDQuNC90LTQtdC60YE7INC90LUg0LTQvtCx0LDQstC70Y/RgtGMINGB0L7QtNC10YDQttC40LzQvtC1INCyINCx0LDQt9GDINC00LDQvdC90YvRhSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTkKK21zZ2lkICJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDRg9C60LDQt9Cw0L3QvdGL0LUg0L/Rg9GC0LgsINC00LDQttC1INC10YHQu9C4INC+0L3QuCDRgdGD0YnQtdGB0YLQstGD0Y7RgiDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjEKK21zZ2lkICJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiCittc2dzdHIgItGBINC+0L/RhtC40LXQuSAtLXN0ZGluOiDRgdGC0YDQvtC60Lgg0L3QsCDQstCy0L7QtNC1INC+0YLQtNC10LvRj9GO0YLRgdGPINCd0KPQm9CV0JLQq9CcINCx0LDQudGC0L7QvCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIzCittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIHRvIGJlIHVwZGF0ZWQgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINGB0L/QuNGB0L7QuiDQvtCx0L3QvtCy0LvRj9C10LzRi9GFINC/0YPRgtC10Lkg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI3Cittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0LfQsNC/0LjRgdC4INC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAg0LIg0LjQvdC00LXQutGBIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzEKK21zZ2lkICJyZXBvcHVsYXRlIHN0YWdlcyAjMiBhbmQgIzMgZm9yIHRoZSBsaXN0ZWQgcGF0aHMiCittc2dzdHIgItC30LDQvdC+0LLQviDQt9Cw0L/QvtC70L3QuNGC0Ywg0LjQvdC00LXQutGBICMyINC4ICMzINC00LvRjyDRg9C60LDQt9Cw0L3QvdGL0YUg0L/Rg9GC0LXQuSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDM1Cittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgItC+0LHQvdC+0LLQuNGC0Ywg0YLQvtC70YzQutC+INC30LDQv9C40YHQuCwg0LrQvtGC0L7RgNGL0LUg0L7RgtC70LjRh9Cw0Y7RgtGB0Y8g0L7RgiBIRUFEIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzkKK21zZ2lkICJpZ25vcmUgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0YTQsNC50LvRiywg0L7RgtGB0YPRgtGB0YLQstGD0Y7RidC40LUg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQyCittc2dpZCAicmVwb3J0IGFjdGlvbnMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDQstGL0L/QvtC70L3Rj9C10LzRi9C1INC00LXQudGB0YLQstC40Y8g0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INCy0YvQstC+0LQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NAorbXNnaWQgIihmb3IgcG9yY2VsYWlucykgZm9yZ2V0IHNhdmVkIHVucmVzb2x2ZWQgY29uZmxpY3RzIgorbXNnc3RyICIo0LTQu9GPINC80LDRiNC40L3QvdC+0Lkg0L7QsdGA0LDQsdC+0YLQutC4KSDQt9Cw0LHRi9GC0Ywg0YHQvtGF0YDQsNC90LXQvdC90YvQtSDQvdC10YDQsNC30YDQtdGI0LXQvdC90YvQtSDQutC+0L3RhNC70LjQutGC0YsiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0OAorbXNnaWQgIndyaXRlIGluZGV4IGluIHRoaXMgZm9ybWF0IgorbXNnc3RyICLQt9Cw0L/QuNGB0LDRgtGMINC40L3QtNC10LrRgSDQsiDRg9C60LDQt9Cw0L3QvdC+0Lwg0YTQvtGA0LzQsNGC0LUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1MAorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0LjQu9C4INC30LDQv9GA0LXRgtC40YLRjCDRgNCw0LfQtNC10LvRjNC90YvQuSDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1MgorbXNnaWQgImVuYWJsZS9kaXNhYmxlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjC/QvtGC0LrQu9GO0YfQuNGC0Ywg0LrRjdGIINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1NAorbXNnaWQgInRlc3QgaWYgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICLQv9GA0L7QstC10YDQuNGC0YwsINGH0YLQviDRhNCw0LnQu9C+0LLQsNGPINGB0LjRgdGC0LXQvNCwINC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDQutGN0Ygg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU2Cittc2dpZCAiZW5hYmxlIHVudHJhY2tlZCBjYWNoZSB3aXRob3V0IHRlc3RpbmcgdGhlIGZpbGVzeXN0ZW0iCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywg0LrRjdGIINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRhNCw0LnQu9C+0LIg0LHQtdC3INC/0YDQvtCy0LXRgNC60Lgg0YTQsNC50LvQvtCy0L7QuSDRgdC40YHRgtC10LzRiyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU4Cittc2dpZCAid3JpdGUgb3V0IHRoZSBpbmRleCBldmVuIGlmIGlzIG5vdCBmbGFnZ2VkIGFzIGNoYW5nZWQiCittc2dzdHIgItC30LDQv9C40YHQsNGC0Ywg0LjQvdC00LXQutGBLCDQtNCw0LbQtSDQtdGB0LvQuCDQvtC9INC90LUg0L/QvtC80LXRh9C10L0g0LrQsNC6INC40LfQvNC10L3QtdC90L3Ri9C5IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjAKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBmaWxlIHN5c3RlbSBtb25pdG9yIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGMINC40LvQuCDQstGL0LrQu9GO0YfQuNGC0Ywg0LzQvtC90LjRgtC+0YDQuNC90LMg0YTQsNC50LvQvtCy0L7QuSDRgdC40YHRgtC10LzRiyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDYyCittc2dpZCAibWFyayBmaWxlcyBhcyBmc21vbml0b3IgdmFsaWQiCittc2dzdHIgItC/0L7QvNC10YLQuNGC0Ywg0YTQsNC50Lsg0LrQsNC6INC00LXQudGB0YLQstC40YLQtdC70YzQvdGL0Lkg0LIg0LzQvtC90LjRgtC+0YDQtSDRhNCw0LnQu9C+0LLQvtC5INGB0LjRgdGC0LXQvNGLIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjUKK21zZ2lkICJjbGVhciBmc21vbml0b3IgdmFsaWQgYml0IgorbXNnc3RyICLRgdC90Y/RgtGMINC/0L7QvNC10YLQutGDINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+0YHRgtC4INC80L7QvdC40YLQvtGA0LUg0YTQsNC50LvQvtCy0L7QuSDRgdC40YHRgtC10LzRiyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTY4Cittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZW5hYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGAICBjb3JlLnNwbGl0SW5kZXgg0YPRgdGC0LDQvdC+0LLQu9C10L0g0LIgZmFsc2U7INGD0LTQsNC70LjRgtC1INC40LvQuCDQuNC30LzQtdC90LjRgtC1INC10LPQviwg0LXRgdC70Lgg0LLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0LLQutC70Y7Rh9C40YLRjCDRgNCw0LfQtNC10LvQtdC90L3Ri9C5INC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTc3Cittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGAICBjb3JlLnNwbGl0SW5kZXgg0YPRgdGC0LDQvdC+0LLQu9C10L0g0LIgdHJ1ZTsg0YPQtNCw0LvQuNGC0LUg0LjQu9C4INC40LfQvNC10L3QuNGC0LUg0LXQs9C+LCDQtdGB0LvQuCDQstGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQvtGC0LrQu9GO0YfQuNGC0Ywg0YDQsNC30LTQtdC70LXQvdC90YvQuSDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE4OAorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGRpc2FibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRgCBjb3JlLnVudHJhY2tlZENhY2hlINGD0YHRgtCw0L3QvtCy0LvQtdC9IHRydWU7INGD0LTQsNC70LjRgtC1INC40LvQuCDQuNC30LzQtdC90LjRgtC1INC10LPQviwg0LXRgdC70Lgg0LLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0LrRjdGIINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE5MgorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAi0JrRjdGIINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRhNCw0LnQu9C+0LIg0L7RgtC60LvRjtGH0LXQvSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjAwCittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQiCisiIHRvIGVuYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGAIGNvcmUudW50cmFja2VkQ2FjaGUg0YPRgdGC0LDQvdC+0LLQu9C10L0gZmFsc2U7INGD0LTQsNC70LjRgtC1INC40LvQuCDQuNC30LzQtdC90LjRgtC1INC10LPQviwg0LXRgdC70Lgg0LLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0LLQutC70Y7Rh9C40YLRjCDQutGN0Ygg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICLQmtGN0Ygg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINGE0LDQudC70L7QsiDQstC60LvRjtGH0LXQvSDQtNC70Y8gwqslc8K7IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMTIKK21zZ2lkICJjb3JlLmZzbW9uaXRvciBpcyB1bnNldDsgc2V0IGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBlbmFibGUgZnNtb25pdG9yIgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGAIGNvcmUuZnNtb25pdG9yINC90LUg0YPRgdGC0LDQvdC+0LLQu9C10L07INGD0YHRgtCw0L3QvtCy0LjRgtC1INC10LPQviDQtdGB0LvQuCDQstGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQstC60LvRjtGH0LjRgtGMINC80L7QvdC40YLQvtGA0LjQvdCzINGE0LDQudC70L7QstC+0Lkg0YHQuNGB0YLQtdC80YsiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxNgorbXNnaWQgImZzbW9uaXRvciBlbmFibGVkIgorbXNnc3RyICLQvNC+0L3QuNGC0L7RgNC40L3QsyDRhNCw0LnQu9C+0LLQvtC5INGB0LjRgdGC0LXQvNGLINCy0LrQu9GO0YfRkdC9IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMTkKK21zZ2lkICIiCisiY29yZS5mc21vbml0b3IgaXMgc2V0OyByZW1vdmUgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGRpc2FibGUgZnNtb25pdG9yIgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGAIGNvcmUuZnNtb25pdG9yINGD0YHRgtCw0L3QvtCy0LvQtdC9OyDRg9C00LDQu9C40YLQtSDQtdCz0L4g0LXRgdC70Lgg0LLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0LLRi9C60LvRjtGH0LjRgtGMINC80L7QvdC40YLQvtGA0LjQvdCzINGE0LDQudC70L7QstC+0Lkg0YHQuNGB0YLQtdC80YsiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyMworbXNnaWQgImZzbW9uaXRvciBkaXNhYmxlZCIKK21zZ3N0ciAi0LzQvtC90LjRgtC+0YDQuNC90LMg0YTQsNC50LvQvtCy0L7QuSDRgdC40YHRgtC10LzRiyDQstGL0LrQu9GO0YfRkdC9IgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMAorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC1kIDxyZWZuYW1lPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzzQvtC/0YbQuNC4Pl0gLWQgPNC40LzRjy3RgdGB0YvQu9C60Lg+IFs80YHRgtCw0YDQvtC1LdC30L3QsNGH0LXQvdC40LU+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPNC+0L/RhtC40Lg+XSAgICA80LjQvNGPLdGB0YHRi9C70LrQuD4gPNC90L7QstC+0LUt0LfQvdCw0YfQtdC90LjQtT4gWzzRgdGC0LDRgNC+0LUt0LfQvdCw0YfQtdC90LjQtT5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMgorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzzQvtC/0YbQuNC4Pl0gLS1zdGRpbiBbLXpdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjQKK21zZ2lkICJkZWxldGUgdGhlIHJlZmVyZW5jZSIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0Ywg0YHRgdGL0LvQutGDIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjYKK21zZ2lkICJ1cGRhdGUgPHJlZm5hbWU+IG5vdCB0aGUgb25lIGl0IHBvaW50cyB0byIKK21zZ3N0ciAi0L7QsdC90L7QstC40YLRjCA80LjQvNGPLdGB0YHRi9C70LrQuD4g0LAg0L3QtSDRgtC+LCDQvdCwINGH0YLQviDQvtC90LAg0YPQutCw0LfRi9Cy0LDQtdGCIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjcKK21zZ2lkICJzdGRpbiBoYXMgTlVMLXRlcm1pbmF0ZWQgYXJndW1lbnRzIgorbXNnc3RyICLQstCy0L7QtCDQvtGC0LTQtdC70ZHQvdC90YvQuSDQndCj0JvQldCS0KvQnNCYINGB0LjQvNCy0L7Qu9Cw0LzQuCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgItC/0YDQvtGH0LjRgtCw0YLRjCDQvtCx0L3QvtCy0LvQtdC90LjRjyDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjcKK21zZ2lkICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6MTUKK21zZ2lkICJ1cGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoIgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+INGB0LXRgNCy0LXRgNCw0YUg0YEg0L3Rg9C70Y8iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoxMQorbXNnaWQgImdpdCB1cGxvYWQtcGFjayBbPG9wdGlvbnM+XSA8ZGlyPiIKK21zZ3N0ciAiZ2l0IHVwbG9hZC1wYWNrIFs80L7Qv9GG0LjQuD5dIDzQutCw0YLQsNC70L7Qsz4iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyMyB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTcKK21zZ2lkICJxdWl0IGFmdGVyIGEgc2luZ2xlIHJlcXVlc3QvcmVzcG9uc2UgZXhjaGFuZ2UiCittc2dzdHIgItCy0YvRhdC+0LQg0L/QvtGB0LvQtSDQvtCx0LzQtdC90LAg0L7QtNC90LjQvCDQt9Cw0L/RgNC+0YHQvtC8L9C+0YLQstC10YLQvtC8IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjUKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGluaXRpYWwgcmVmIGFkdmVydGlzZW1lbnQiCittc2dzdHIgItCy0YvRhdC+0LTQuNGC0Ywg0YHRgNCw0LfRgyDQv9C+0YHQu9C1INC90LDRh9Cw0LvRjNC90L7Qs9C+INC+0LHRitGP0LLQu9C10L3QuNGPINGB0L/QuNGB0LrQsCDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyNworbXNnaWQgImRvIG5vdCB0cnkgPGRpcmVjdG9yeT4vLmdpdC8gaWYgPGRpcmVjdG9yeT4gaXMgbm8gR2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAi0L3QtSDQv9GA0L7QstC10YDRj9GC0YwgPNC60LDRgtCw0LvQvtCzPi8uZ2l0LyDQtdGB0LvQuCA80LrQsNGC0LDQu9C+0LM+INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQutCw0YLQsNC70L7Qs9C+0LwgR2l0IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjkKK21zZ2lkICJpbnRlcnJ1cHQgdHJhbnNmZXIgYWZ0ZXIgPG4+IHNlY29uZHMgb2YgaW5hY3Rpdml0eSIKK21zZ3N0ciAi0L/RgNC10YDQstCw0YLRjCDQv9C10YDQtdC00LDRh9GDINC/0L7RgdC70LUgPNC60L7Quz4g0YHQtdC60YPQvdC0INC/0YDQvtGB0YLQvtGPIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoyMAorbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPNC60L7QvNC80LjRgj7igKYiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjc2Cittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdC+0LTQtdGA0LbQuNC80L7QtSDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NzcgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0YHRi9GA0L7QuSDQstGL0LLQvtC0INGB0YLQsNGC0YPRgdCwINC+0YIgZ3BnIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NTUKK21zZ2lkICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPNC/0LDQutC10YI+4oCmIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjUKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICLQsdGL0YLRjCDQvNC90L7Qs9C+0YHQu9C+0LLQvdC10LUiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NworbXNnaWQgInNob3cgc3RhdGlzdGljcyBvbmx5IgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgtC+0LvRjNC60L4g0YHRgtCw0YLQuNGB0YLQuNC60YMiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjE5Cittc2dpZCAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWc+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD080YTQvtGA0LzQsNGCPl0gPNC80LXRgtC60LA+4oCmIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozNworbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHQvtC00LXRgNC20LjQvNC+0LUg0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE4Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gWzxjb21taXQtaXNoPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBhZGQgWzzQvtC/0YbQuNC4Pl0gPNC/0YPRgtGMPiBbPNGD0LrQsNC30LDRgtC10LvRjC3QutC+0LzQvNC40YLQsD5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTkKK21zZ2lkICJnaXQgd29ya3RyZWUgbGlzdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxpc3QgWzzQvtC/0YbQuNC4Pl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMAorbXNnaWQgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B0aW9ucz5dIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxvY2sgWzzQvtC/0YbQuNC4Pl0gPNC/0YPRgtGMPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIxCittc2dpZCAiZ2l0IHdvcmt0cmVlIG1vdmUgPHdvcmt0cmVlPiA8bmV3LXBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbW92ZSA80YDQsNCx0L7Rh9C40Lkt0LrQsNGC0LDQu9C+0LM+IDzQvdC+0LLRi9C5LdC/0YPRgtGMPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIyCittc2dpZCAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgcHJ1bmUgWzzQvtC/0YbQuNC4Pl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMworbXNnaWQgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHRpb25zPl0gPHdvcmt0cmVlPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPNC+0L/RhtC40Lg+XSA80YDQsNCx0L7Rh9C40Lkt0LrQsNGC0LDQu9C+0LM+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjQKK21zZ2lkICJnaXQgd29ya3RyZWUgdW5sb2NrIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHVubG9jayA80L/Rg9GC0Yw+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjEgYnVpbHRpbi93b3JrdHJlZS5jOjg5MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywgwqslc8K7IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBub3QgYSB2YWxpZCBkaXJlY3RvcnkiCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUg0YDQsNCx0L7Rh9C40YUg0LrQsNGC0LDQu9C+0LPQvtCyLyVzOiDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LrQsNGC0LDQu9C+0LPQvtC8IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDRgNCw0LHQvtGH0LjRhSDQutCw0YLQsNC70L7Qs9C+0LIvJXM6INGE0LDQudC7IGdpdGRpciDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTEgYnVpbHRpbi93b3JrdHJlZS5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHVuYWJsZSB0byByZWFkIGdpdGRpciBmaWxlICglcykiCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUg0YDQsNCx0L7Rh9C40YUg0LrQsNGC0LDQu9C+0LPQvtCyLyVzOiDQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRhNCw0LnQuyBnaXRkaXIgKCVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBzaG9ydCByZWFkIChleHBlY3RlZCAlPFBSSXVNQVg+IGJ5dGVzLCByZWFkICIKKyIlPFBSSXVNQVg+KSIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAvJXM6INC/0YDQvtGH0LjRgtCw0L3QviDQvNCw0LvQviDQtNCw0L3QvdGL0YUgKNC+0LbQuNC00LDQu9C+0YHRjCAlPFBSSXVNQVg+INCx0LDQudGCLCDQv9GA0L7Rh9C40YLQsNC90L4gJTxQUkl1TUFYPikiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INGA0LDQsdC+0YfQuNGFINC60LDRgtCw0LvQvtCz0L7Qsi8lczog0L3QtdC00LXQudGB0YLQstC40YLQtdC70YzQvdGL0Lkg0YTQsNC50LsgZ2l0ZGlyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgcG9pbnRzIHRvIG5vbi1leGlzdGVudCBsb2NhdGlvbiIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDRgNCw0LHQvtGH0LjRhSDQutCw0YLQsNC70L7Qs9C+0LIvJXM6IGdpdGRpciDRg9C60LDQt9GL0LLQsNC10YIg0L3QsCDQvdC10YHRg9GJ0LXRgdGC0LLRg9GO0YnQtdC1INGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NgorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHQv9C40YHQvtC6INGD0LTQsNC70LXQvdC90YvRhSDRgNCw0LHQvtGH0LjRhSDQutCw0YLQsNC70L7Qs9C+0LIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNjgKK21zZ2lkICJleHBpcmUgd29ya2luZyB0cmVlcyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0Ywg0YDQsNCx0L7Rh9C40LUg0LrQsNGC0LDQu9C+0LPQuCDRgdGC0LDRgNC10LUg0YfQtdC8IDzQtNCw0YLQsC3QvtC60L7QvdGH0LDQvdC40Y8+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIsKrJXPCuyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlLWFkZCB3b3JrdHJlZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBsb2NrZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYgLWYnIHRvIG92ZXJyaWRlLCBvciAndW5sb2NrJyBhbmQgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgYWxyZWFkeSByZWdpc3RlcmVkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mJyB0byBvdmVycmlkZSwgb3IgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IG9mICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LrQsNGC0LDQu9C+0LMgwqslc8K7IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDMyIGJ1aWx0aW4vd29ya3RyZWUuYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChuZXcgYnJhbmNoICclcycpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChyZXNldHRpbmcgYnJhbmNoICclcyc7IHdhcyBhdCAlcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGNoZWNraW5nIG91dCAnJXMnKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoZGV0YWNoZWQgSEVBRCAlcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5MAorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGV2ZW4gaWYgYWxyZWFkeSBjaGVja2VkIG91dCBpbiBvdGhlciB3b3JrdHJlZSIKK21zZ3N0ciAi0L/QtdGA0LXQutC70Y7Rh9C40YLRjNGB0Y8g0L3QsCA80LLQtdGC0LrQsD4g0LTQsNC20LUg0LXRgdC70Lgg0L7QvdCwINGD0LbQtSDQsNC60YLQuNCy0L3QsCDQsiDQtNGA0YPQs9C+0Lwg0YDQsNCx0L7Rh9C10YHQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDkzCittc2dpZCAiY3JlYXRlIGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAi0YHQvtC30LTQsNGC0Ywg0L3QvtCy0YPRjiDQstC10YLQutGDIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk1Cittc2dpZCAiY3JlYXRlIG9yIHJlc2V0IGEgYnJhbmNoIgorbXNnc3RyICLRgdC+0LfQtNCw0YLRjCDQuNC70Lgg0L/QtdGA0LXQudGC0Lgg0L3QsCDQstC10YLQutGDIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk3Cittc2dpZCAicG9wdWxhdGUgdGhlIG5ldyB3b3JraW5nIHRyZWUiCittc2dzdHIgItC90LDQv9C+0LvQvdC40YLRjCDQvdC+0LLRi9C5INGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk4Cittc2dpZCAia2VlcCB0aGUgbmV3IHdvcmtpbmcgdHJlZSBsb2NrZWQiCittc2dzdHIgItC00LXRgNC20LDRgtGMINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzINC30LDQsdC70L7QutC40YDQvtCy0LDQvdC90YvQvCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwMQorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LWJyYW5jaCgxKSkiCittc2dzdHIgItC90LDRgdGC0YDQvtC40YLRjCDRgNC10LbQuNC8INC+0YLRgdC70LXQttC40LLQsNC90LjRjyDQstC10YLQutC4ICjRgdC80L7RgtGA0LjRgtC1IGdpdC1icmFuY2goMSkpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA0Cittc2dpZCAidHJ5IHRvIG1hdGNoIHRoZSBuZXcgYnJhbmNoIG5hbWUgd2l0aCBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgItC/0YvRgtCw0YLRjNGB0Y8g0L3QsNC50YLQuCDRgdC+0L7RgtCy0LXRgtGB0YLQstC40LUg0LjQvNC10L3QuCDQvdC+0LLQvtC5INCy0LXRgtC60Lgg0YEg0LjQvNC10L3QtdC8INCy0L3QtdGI0L3QtdC5INCy0LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MTIKK21zZ2lkICItYiwgLUIsIGFuZCAtLWRldGFjaCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYiwgLUIg0LggLS1kZXRhY2gg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1NzMKK21zZ2lkICItLVtuby1ddHJhY2sgY2FuIG9ubHkgYmUgdXNlZCBpZiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCIKK21zZ3N0ciAiLS1bbm8tXXRyYWNrINC80L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGC0L7Qu9GM0LrQviDQutC+0LPQtNCwINCy0Ysg0YHQvtC30LTQsNGR0YLQtSDQvdC+0LLRg9GOINCy0LXRgtC60YMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NzMKK21zZ2lkICJyZWFzb24gZm9yIGxvY2tpbmciCittc2dzdHIgItC/0YDQuNGH0LjQvdCwINCx0LvQvtC60LjRgNC+0LLQutC4IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njg1IGJ1aWx0aW4vd29ya3RyZWUuYzo3MTggYnVpbHRpbi93b3JrdHJlZS5jOjc5MgorIzogYnVpbHRpbi93b3JrdHJlZS5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDRgNCw0LHQvtGH0LjQvCDQutCw0YLQsNC70L7Qs9C+0LwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2ODcgYnVpbHRpbi93b3JrdHJlZS5jOjcyMAorbXNnaWQgIlRoZSBtYWluIHdvcmtpbmcgdHJlZSBjYW5ub3QgYmUgbG9ja2VkIG9yIHVubG9ja2VkIgorbXNnc3RyICLQk9C70LDQstC90YvQuSDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNC9INC40LvQuCDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDQvSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkLCByZWFzb246ICVzIgorbXNnc3RyICLCqyVzwrsg0YPQttC1INC30LDQsdC70L7QutC40YDQvtCy0LDQvSwg0L/RgNC40YfQuNC90LA6ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiCittc2dzdHIgIsKrJXPCuyDRg9C20LUg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNC9IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiwqslc8K7INC90LUg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNC9IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzYzCittc2dpZCAid29ya2luZyB0cmVlcyBjb250YWluaW5nIHN1Ym1vZHVsZXMgY2Fubm90IGJlIG1vdmVkIG9yIHJlbW92ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc3MQorbXNnaWQgImZvcmNlIG1vdmUgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5NCBidWlsdGluL3dvcmt0cmVlLmM6OTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYSBtYWluIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaWd1cmUgb3V0IGRlc3RpbmF0aW9uIG5hbWUgZnJvbSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFyZ2V0ICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXNcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODE1Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODE4CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG1vdmUgJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgZGlydHksIHVzZSAtLWZvcmNlIHRvIGRlbGV0ZSBpdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJ2dpdCBzdGF0dXMnIG9uICclcycsIGNvZGUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkwMworbXNnaWQgImZvcmNlIHJlbW92YWwgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkyOAorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCByZW1vdmUgd29ya2luZyB0cmVlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoxNQorbXNnaWQgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PNC/0YDQtdGE0LjQutGBPi9dIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOAorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiPNC/0YDQtdGE0LjQutGBPi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI5Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDQvtCx0YrQtdC60YIg0LTQtdGA0LXQstCwINC00LvRjyDQv9C+0LTQutCw0YLQsNC70L7Qs9CwINGBIDzQv9GA0LXRhNC40LrRgT4iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjMxCittc2dpZCAib25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINGC0L7Qu9GM0LrQviDQv9GA0Lgg0L7RgtC70LDQtNC60LUiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHBlcm1pc3Npb25zIG9uIHlvdXIgc29ja2V0IGRpcmVjdG9yeSBhcmUgdG9vIGxvb3NlOyBvdGhlclxuIgorInVzZXJzIG1heSBiZSBhYmxlIHRvIHJlYWQgeW91ciBjYWNoZWQgY3JlZGVudGlhbHMuIENvbnNpZGVyIHJ1bm5pbmc6XG4iCisiXG4iCisiXHRjaG1vZCAwNzAwICVzIgorbXNnc3RyICLQn9GA0LDQstCwINC00L7RgdGC0YPQv9CwINC6INCy0LDRiNC10LzRgyDQutCw0YLQsNC70L7Qs9GDINGB0L7QutC10YLQvtCyINGB0LvQuNGI0LrQvtC8INGB0LLQvtCx0L7QtNC90Ys7INC00YDRg9Cz0LUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C4INC80L7Qs9GD0Lgg0YfQuNGC0LDRgtGMINCy0LDRiNC4INC30LDQutGN0YjQuNGA0L7QstCw0L3QvdGL0LUg0L/QsNGA0L7Qu9C4INC00L7RgdGC0YPQv9CwLiDQntCx0LTRg9C80LDQudGC0LUg0LfQsNC/0YPRgdC6INC60L7QvNCw0L3QtNGLOlxuXG5cdGNobW9kIDA3MDAgJXMiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjI3MgorbXNnaWQgInByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyB0byBzdGRlcnIiCittc2dzdHIgItCy0YvQstC+0LQg0L7RgtC70LDQtNC+0YfQvdGL0YUg0YHQvtC+0LHRidC10L3QuNC5INC90LAgc3RkZXJyIgorCisjOiB0L2hlbHBlci90ZXN0LXJlYWNoLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBpcyBub3QgbWFya2VkIHJlYWNoYWJsZSIKK21zZ3N0ciAiIgorCisjOiB0L2hlbHBlci90ZXN0LXJlYWNoLmM6MTYyCittc2dpZCAidG9vIG1hbnkgY29tbWl0cyBtYXJrZWQgcmVhY2hhYmxlIgorbXNnc3RyICIiCisKKyM6IHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzo3Cittc2dpZCAidGVzdC10b29sIHNlcnZlLXYyIFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzoxOQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWR2ZXJ0aXNpbmcgY2FwYWJpbGl0aWVzIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjI3Cittc2dpZCAiIgorImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPHBhdGg+XSBbLWMgPG5hbWU+PTx2YWx1ZT5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTxwYXRoPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tcGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PHBhdGg+XSBbLS13b3JrLXRyZWU9PHBhdGg+XSBbLS1uYW1lc3BhY2U9PG5hbWU+XVxuIgorIiAgICAgICAgICAgPGNvbW1hbmQ+IFs8YXJncz5dIgorbXNnc3RyICJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDzQv9GD0YLRjD5dIFstYyA80LjQvNGPPj080LfQvdCw0YfQtdC90LjQtT5dXG4gICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PNC/0YPRgtGMPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tcGF0aF1cbiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS1iYXJlXVxuICAgICAgICAgICBbLS1naXQtZGlyPTzQv9GD0YLRjD5dIFstLXdvcmstdHJlZT080L/Rg9GC0Yw+XSBbLS1uYW1lc3BhY2U9PNC40LzRjz5dXG4gICAgICAgICAgIDzQutC+0LzQsNC90LTQsD4gWzzQsNGA0LPRg9C80LXQvdGC0Ys+XSIKKworIzogZ2l0LmM6MzQKK21zZ2lkICIiCisiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJ0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCBvciBjb25jZXB0LiIKK21zZ3N0ciAiwqtnaXQgaGVscCAt0LDCuyDQuCDCq2dpdCBoZWxwIC1nwrsg0LLRi9Cy0L7QtNC40YIg0YHQv9C40YHQvtC6INC00L7RgdGC0YPQv9C90YvRhSDQv9C+0LTQutC+0LzQsNC90LQg0LhcbtC90LXQutC+0YLQvtGA0YvQtSDRgNGD0LrQvtCy0L7QtNGB0YLQstCwINC/0L4g0YLQtdC80LDQvC4g0JfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IGhlbHAgPNC60L7QvNCw0L3QtNCwPsK7INC40LvQuFxuwqtnaXQgaGVscCA80YLQtdGA0LzQuNC9PsK7LCDRh9GC0L7QsdGLINC/0YDQvtGH0LXRgdGC0Ywg0L4g0LrQvtC90LrRgNC10YLQvdGL0YUg0L/QvtC00LrQvtC80LDQvdC00LUg0LjQu9C4INGC0LXQvNC1LiIKKworIzogZ2l0LmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS1naXQtZGlyXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6MTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5hbWVzcGFjZSBnaXZlbiBmb3IgLS1uYW1lc3BhY2VcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLXdvcmstdHJlZVxuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjIyNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcmVmaXggZ2l2ZW4gZm9yIC0tc3VwZXItcHJlZml4XG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIi1jIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIHN0cmluZ1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC1DXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgYWxpYXMgJyVzJzogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFsaWFzICclcycgY2hhbmdlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4iCisiWW91IGNhbiB1c2UgJyFnaXQnIGluIHRoZSBhbGlhcyB0byBkbyB0aGlzIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBhbGlhcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZ2l0LmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBhbGlhczogJXMiCittc2dzdHIgIiIKKworIzogZ2l0LmM6NDU5Cittc2dpZCAid3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogZ2l0LmM6NDYxCittc2dpZCAidW5rbm93biB3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo0NjMKK21zZ2lkICJjbG9zZSBmYWlsZWQgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBsb29wIGRldGVjdGVkOiBleHBhbnNpb24gb2YgJyVzJyBkb2VzIG5vdCB0ZXJtaW5hdGU6JXMiCittc2dzdHIgIiIKKworIzogZ2l0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgJXMgYXMgYSBidWlsdGluIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjg2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidXNhZ2U6ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGFuc2lvbiBvZiBhbGlhcyAnJXMnIGZhaWxlZDsgJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZFxuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuIGNvbW1hbmQgJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5lZ2F0aXZlIHZhbHVlIGZvciBodHRwLnBvc3RidWZmZXI7IGRlZmF1bHRpbmcgdG8gJWQiCittc2dzdHIgItC+0YLRgNC40YbQsNGC0LXQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUgaHR0cC5wb3N0YnVmZmVyOyDQuNGB0L/QvtC70YzQt9GD0Y4g0YHRgtCw0L3QtNCw0YDRgtC90L7QtSDQt9C90LDRh9C10L3QuNC1ICVkIgorCisjOiBodHRwLmM6Mzk5Cittc2dpZCAiRGVsZWdhdGlvbiBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4yMi4wIgorbXNnc3RyICLQlNC10LvQtdCz0LDRhtC40Y8g0L/RgNC+0LLQtdGA0LrQuCDQv9C+0LvQvdC+0LzQvtGH0LjQuSDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y8g0YEgY1VSTCA8IDcuMjIuMCIKKworIzogaHR0cC5jOjQwOAorbXNnaWQgIlB1YmxpYyBrZXkgcGlubmluZyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiUHVibGljIGtleSBwaW5uaW5nINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjyDRgSBjVVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6ODc2Cittc2dpZCAiQ1VSTFNTTE9QVF9OT19SRVZPS0Ugbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIiIKKworIzogaHR0cC5jOjk0OQorbXNnaWQgIlByb3RvY29sIHJlc3RyaWN0aW9ucyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMTkuNCIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6MTA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJVbnN1cHBvcnRlZCBTU0wgYmFja2VuZCAnJXMnLiBTdXBwb3J0ZWQgU1NMIGJhY2tlbmRzOiIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6MTA5MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGNVUkwgd2FzIGJ1aWx0IHdpdGhvdXQgU1NMIGJhY2tlbmRzIgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzoxMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogYWxyZWFkeSBzZXQiCittc2dzdHIgIiIKKworIzogaHR0cC5jOjE5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byB1cGRhdGUgdXJsIGJhc2UgZnJvbSByZWRpcmVjdGlvbjpcbiIKKyIgIGFza2VkIGZvcjogJXNcbiIKKyIgICByZWRpcmVjdDogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDQsdCw0LfQvtCy0YvQuSB1cmwg0LjQtyDQv9C10YDQtdCw0LTRgNC10YHQsNGG0LjQuDpcbiAg0LfQsNC/0YDQvtGI0LXQvdC+OiAlc1xuICAg0L/QtdGA0LXQsNC00YDQtdGB0L7QstCw0L3QvjogJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcXVvdGluZyBpbiBwdXNoLW9wdGlvbiB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlc2luZm8vcmVmcyBub3QgdmFsaWQ6IGlzIHRoaXMgYSBnaXQgcmVwb3NpdG9yeT8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzozNTUKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZXhwZWN0ZWQgc2VydmljZSwgZ290IGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZ290ICclcyciCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yICclcyciCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnOiAlcyIKK21zZ3N0ciAiwqslc8K7INC90LXQtNC+0YHRgtGD0L/QvdC+OiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgdG8gJXMiCittc2dzdHIgItC/0LXRgNC10LDQtNGA0LXRgdCw0YbQuNGPINC90LAgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6NTg0Cittc2dpZCAic2hvdWxkbid0IGhhdmUgRU9GIHdoZW4gbm90IGdlbnRsZSBvbiBFT0YiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo2NjQKK21zZ2lkICJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUlBDIGZhaWxlZDsgJXMiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo3NjQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIHB1c2hlcyB0aGlzIGJpZyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjg3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGRlZmxhdGUgZXJyb3IgJWQiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBlbmQgZXJyb3IgJWQiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDE0Cittc2dpZCAiZHVtYiBodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2FwYWJpbGl0aWVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTAyOAorbXNnaWQgImZldGNoIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDc2Cittc2dpZCAiY2Fubm90IGZldGNoIGJ5IHNoYTEgb3ZlciBzbWFydCBodHRwIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTEyMCByZW1vdGUtY3VybC5jOjExMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTEzOCByZW1vdGUtY3VybC5jOjEyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaHR0cCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCAlcyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjExNzQKK21zZ2lkICJnaXQtaHR0cC1wdXNoIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjEzNjAKK21zZ2lkICJyZW1vdGUtY3VybDogdXNhZ2U6IGdpdCByZW1vdGUtY3VybCA8cmVtb3RlPiBbPHVybD5dIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM5MgorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM5OQorbXNnaWQgInJlbW90ZS1jdXJsOiBmZXRjaCBhdHRlbXB0ZWQgd2l0aG91dCBhIGxvY2FsIHJlcG8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxNDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS1jdXJsOiB1bmtub3duIGNvbW1hbmQgJyVzJyBmcm9tIGdpdCIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo2MQorbXNnaWQgImFyZ3MiCittc2dzdHIgItCw0YDQs9GD0LzQtdC90YLRiyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6NjIKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICLRhNC40LvRjNGC0YDQsNGG0LjRjyDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTcwCittc2dpZCAiZXhwaXJ5LWRhdGUiCittc2dzdHIgItC00LDRgtCwLdC+0LrQvtC90YfQsNC90LjRjyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE4NAorbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAi0L3QuNGH0LXQs9C+INC90LUg0LTQtdC70LDQtdGCICjQvtGB0YLQsNCy0LvQtdC90L4g0LTQu9GPINC+0LHRgNCw0YLQvdC+0Lkg0YHQvtCy0LzQtdGB0YLQuNC80L7RgdGC0LgpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzA0Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICLQsdGL0YLRjCDQvNC90L7Qs9C+0YHQu9C+0LLQvdC10LUiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMDYKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICLRgtC40YXQuNC5INGA0LXQttC40LwiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTIKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIDxuPiDRhtC40YTRgCDQtNC70Y8g0LLRi9Cy0L7QtNCwIFNIQS0xIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzMxCittc2dpZCAiaG93IHRvIHN0cmlwIHNwYWNlcyBhbmQgI2NvbW1lbnRzIGZyb20gbWVzc2FnZSIKK21zZ3N0ciAi0LrQsNC6INGD0LTQsNC70Y/RgtGMINC/0YDQvtCx0LXQu9GLINC4ICPQutC+0LzQvNC10L3RgtCw0YDQuNC4INC40Lcg0YHQvtC+0LHRidC10L3QuNGPINC60L7QvNC80LjRgtCwIgorCisjOiByZWYtZmlsdGVyLmg6MTAxCittc2dpZCAia2V5IgorbXNnc3RyICLQutC70Y7RhyIKKworIzogcmVmLWZpbHRlci5oOjEwMQorbXNnaWQgImZpZWxkIG5hbWUgdG8gc29ydCBvbiIKK21zZ3N0ciAi0LjQvNGPINC/0L7Qu9GPLCDQv9C+INC60L7RgtC+0YDQvtC80YMg0LLRi9C/0L7Qu9C90LjRgtGMINGB0L7RgNGC0LjRgNC+0LLQutGDIgorCisjOiByZXJlcmUuaDo0NAorbXNnaWQgInVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZXVzZWQgY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZSIKK21zZ3N0ciAi0L7QsdC90L7QstC40YLRjCDQuNC90LTQtdC60YEg0YEg0L/QvtC80L7RidGM0Y4g0L/QtdGA0LXQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC70LjQutGC0LAsINC10YHQu9C4INCy0L7Qt9C80L7QttC90L4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUwCittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIGluZGV4IgorbXNnc3RyICLQlNC+0LHQsNCy0LvQtdC90LjQtSDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INGE0LDQudC70LAg0LIg0LjQvdC00LXQutGBIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MQorbXNnaWQgIkFwcGx5IGEgc2VyaWVzIG9mIHBhdGNoZXMgZnJvbSBhIG1haWxib3giCittc2dzdHIgItCf0YDQuNC80LXQvdC10L3QuNC1INGB0LXRgNC40Lgg0L/QsNGC0YfQtdC5INC40Lcg0L/QvtGH0YLQvtCy0L7Qs9C+INGB0L7QvtCx0YnQtdC90LjRjyIKKworIzogY29tbWFuZC1saXN0Lmg6NTIKK21zZ2lkICJBbm5vdGF0ZSBmaWxlIGxpbmVzIHdpdGggY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICLQkNC90L3QvtGC0LjRgNC+0LLQsNC90LjQtSDRgdGC0YDQvtC6INGE0LDQudC70LAg0LjQvdGE0L7RgNC80LDRhtC40LXQuSDQviDQutC+0LzQvNC40YLQsNGFIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MworbXNnaWQgIkFwcGx5IGEgcGF0Y2ggdG8gZmlsZXMgYW5kL29yIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LXQvdC40LUg0L/QsNGC0YfQsCDQuiDRhNCw0LnQu9Cw0Lwg0Lgv0LjQu9C4INC40L3QtNC10LrRgdGDIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NAorbXNnaWQgIkltcG9ydCBhIEdOVSBBcmNoIHJlcG9zaXRvcnkgaW50byBHaXQiCittc2dzdHIgItCY0LzQv9C+0YDRgtC40YDQvtCy0LDQvdC40LUgR05VIEFyY2gg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQsiBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU1Cittc2dpZCAiQ3JlYXRlIGFuIGFyY2hpdmUgb2YgZmlsZXMgZnJvbSBhIG5hbWVkIHRyZWUiCittc2dzdHIgItCh0L7Qt9C00LDQvdC40LUg0LDRgNGF0LjQstCwINGE0LDQudC70L7QsiDQuNC3INGD0LrQsNC30LDQvdC90L7Qs9C+INC00LXRgNC10LLQsCIKKworIzogY29tbWFuZC1saXN0Lmg6NTYKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICLQktGL0L/QvtC70L3QtdC90LjQtSDQtNCy0L7QuNGH0L3QvtCz0L4g0L/QvtC40YHQutCwINC60L7QvNC80LjRgtCwLCDQutC+0YLQvtGA0YvQuSDQstC90L7RgdC40YIg0L7RiNC40LHQutGDIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NworbXNnaWQgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIKK21zZ3N0ciAi0J/QvtC60LDQtyDRgNC10LTQsNC60YbQuNC4INC4INCw0LLRgtC+0YDQsCDQv9C+0YHQu9C10LTQvdC10LPQviDQuNC30LzQtdC90LjQstGI0LXQs9C+INC60LDQttC00YPRjiDRgdGC0YDQvtC60YMg0YTQsNC50LvQsCIKKworIzogY29tbWFuZC1saXN0Lmg6NTgKK21zZ2lkICJMaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcyIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDRgdC/0LjRgdC60LAsINGB0L7Qt9C00LDQvdC40LUg0LjQu9C4INGD0LTQsNC70LXQvdC40LUg0LLQtdGC0L7QuiIKKworIzogY29tbWFuZC1saXN0Lmg6NTkKK21zZ2lkICJNb3ZlIG9iamVjdHMgYW5kIHJlZnMgYnkgYXJjaGl2ZSIKK21zZ3N0ciAi0J/QtdGA0LXQvNC10YnQtdC90LjQtSDQvtCx0YrQtdC60YLQvtCyINC4INGB0YHRi9C70L7QuiDQv9C+INCw0YDRhdC40LLRgyIKKworIzogY29tbWFuZC1saXN0Lmg6NjAKK21zZ2lkICJQcm92aWRlIGNvbnRlbnQgb3IgdHlwZSBhbmQgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVwb3NpdG9yeSBvYmplY3RzIgorbXNnc3RyICLQktGL0LLQvtC0INGB0L7QtNC10YDQttC40LzQvtCz0L4g0LjQu9C4INGC0LjQv9CwINC4INC40L3RhNC+0YDQvNCw0YbQuNC4INC+INGA0LDQt9C80LXRgNC1INC00LvRjyDQvtCx0YrQtdC60YLQvtCyINGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYxCittc2dpZCAiRGlzcGxheSBnaXRhdHRyaWJ1dGVzIGluZm9ybWF0aW9uIgorbXNnc3RyICLQktGL0LLQvtC0INC40L3RhNC+0YDQvNCw0YbQuNC4INC40LcgZ2l0YXR0cmlidXRlcyIKKworIzogY29tbWFuZC1saXN0Lmg6NjIKK21zZ2lkICJEZWJ1ZyBnaXRpZ25vcmUgLyBleGNsdWRlIGZpbGVzIgorbXNnc3RyICLQntGC0LvQsNC00LrQsCDRhNCw0LnQu9C+0LIgZ2l0aWdub3JlIC8gZXhjbHVkZSIKKworIzogY29tbWFuZC1saXN0Lmg6NjMKK21zZ2lkICJTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzIgorbXNnc3RyICLQktGL0LLQvtC0INC60LDQvdC+0L3QuNGH0L3Ri9GFINC40LzRkdC9INC4INCw0LTRgNC10YHQvtCyINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiyDQutC+0L3RgtCw0LrRgtC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY0Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIG9yIHJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICLQn9C10YDQtdC60LvRjtGH0LXQvdC40LUg0LLQtdGC0L7QuiDQuNC70Lgg0LLQvtGB0YHRgtCw0L3QvtCy0LvQtdC90LjQtSDRhNCw0LnQu9C+0LIg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSIKKworIzogY29tbWFuZC1saXN0Lmg6NjUKK21zZ2lkICJDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgItCa0L7Qv9C40YDQvtCy0LDQvdC40LUg0YTQsNC50LvQvtCyINC40Lcg0LjQvdC00LXQutGB0LAg0LIg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY2Cittc2dpZCAiRW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIG5hbWUgaXMgd2VsbCBmb3JtZWQiCittc2dzdHIgItCj0LTQvtGB0YLQvtCy0LXRgNC40YLRjNGB0Y8sINGH0YLQviDQuNC80Y8g0YHRgdGL0LvQutC4INC/0YDQsNCy0LjQu9GM0L3QviDRgdGE0L7RgNC80LjRgNC+0LLQsNC90L4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY3Cittc2dpZCAiRmluZCBjb21taXRzIHlldCB0byBiZSBhcHBsaWVkIHRvIHVwc3RyZWFtIgorbXNnc3RyICLQn9C+0LjRgdC6INC60L7QvNC80LjRgtC+0LIg0LrQvtGC0L7RgNGL0LUg0LXRidC1INC90LUg0L/RgNC40LzQtdC90LXQvdGLINCy0YvRiNC10YHRgtC+0Y/RidC40Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdC8IgorCisjOiBjb21tYW5kLWxpc3QuaDo2OAorbXNnaWQgIkFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICLQn9GA0LjQvNC10L3QtdC90LjQtSDQuNC30LzQtdC90LXQvdC40LksINGB0LTQtdC70LDQvdC90YvRhSDQsiDQutCw0LrQvtC8LdGC0L4g0YHRg9GJ0LXRgdGC0LLRg9GO0YnQtdC8INC60L7QvNC80LjRgtC1IgorCisjOiBjb21tYW5kLWxpc3QuaDo2OQorbXNnaWQgIkdyYXBoaWNhbCBhbHRlcm5hdGl2ZSB0byBnaXQtY29tbWl0IgorbXNnc3RyICLQk9GA0LDRhNC40YfQtdGB0LrQsNGPINCw0LvRjNGC0LXRgNC90LDRgtC40LLQsCDQtNC70Y8gZ2l0LWNvbW1pdCIKKworIzogY29tbWFuZC1saXN0Lmg6NzAKK21zZ2lkICJSZW1vdmUgdW50cmFja2VkIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YTQsNC50LvQvtCyINC40Lcg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MQorbXNnaWQgIkNsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAi0JrQu9C+0L3QuNGA0L7QstCw0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0LIg0L3QvtCy0YvQuSDQutCw0YLQsNC70L7QsyIKKworIzogY29tbWFuZC1saXN0Lmg6NzIKK21zZ2lkICJEaXNwbGF5IGRhdGEgaW4gY29sdW1ucyIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDQtNCw0L3QvdGL0YUg0L/QviDQutC+0LvQvtC90LrQsNC8IgorCisjOiBjb21tYW5kLWxpc3QuaDo3MworbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICLQl9Cw0L/QuNGB0Ywg0LjQt9C80LXQvdC10L3QuNC5INCyINGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc0Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBHaXQgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICLQl9Cw0L/QuNGB0Ywg0Lgg0L/RgNC+0LLQtdGA0LrQsCBjb21taXQtZ3JhcGgg0YTQsNC50LvQvtCyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6NzUKK21zZ2lkICJDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtSDQvdC+0LLQvtCz0L4g0L7QsdGK0LXQutGC0LAg0LrQvtC80LzQuNGC0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc2Cittc2dpZCAiR2V0IGFuZCBzZXQgcmVwb3NpdG9yeSBvciBnbG9iYWwgb3B0aW9ucyIKK21zZ3N0ciAi0J/QvtC70YPRh9C10L3QuNC1INC4INGD0YHRgtCw0L3QvtCy0LrQsCDQs9C70L7QsdCw0LvRjNC90YvRhSDQvtC/0YbQuNC5INC40LvQuCDQvtC/0YbQuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc3Cittc2dpZCAiQ291bnQgdW5wYWNrZWQgbnVtYmVyIG9mIG9iamVjdHMgYW5kIHRoZWlyIGRpc2sgY29uc3VtcHRpb24iCittc2dzdHIgItCf0L7QtNGB0YfQtdGCINC60L7Qu9C40YfQtdGB0YLQstCwINC90LXRg9C/0LDQutC+0LLQsNC90L3Ri9GFINC+0LHRitC10LrRgtC+0LIg0Lgg0LjRhSDQv9C+0YLRgNC10LHQu9C10L3QuNGPINC00LjRgdC60LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc4Cittc2dpZCAiUmV0cmlldmUgYW5kIHN0b3JlIHVzZXIgY3JlZGVudGlhbHMiCittc2dzdHIgItCf0L7Qu9GD0YfQtdC90LjQtSDQuCDRgdC+0YXRgNCw0L3QtdC90LjQtSDRg9GH0LXRgtC90YvRhSDQt9Cw0L/QuNGB0LXQuSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc5Cittc2dpZCAiSGVscGVyIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHBhc3N3b3JkcyBpbiBtZW1vcnkiCittc2dzdHIgItCf0L7QvNC+0YnQvdC40Log0LTQu9GPINCy0YDQtdC80LXQvdC90L7Qs9C+INGF0YDQsNC90LXQvdC40Y8g0L/QsNGA0L7Qu9C10Lkg0LIg0L/QsNC80Y/RgtC4IgorCisjOiBjb21tYW5kLWxpc3QuaDo4MAorbXNnaWQgIkhlbHBlciB0byBzdG9yZSBjcmVkZW50aWFscyBvbiBkaXNrIgorbXNnc3RyICLQn9C+0LzQvtGJ0L3QuNC6INC00LvRjyDRhdGA0LDQvdC10L3QuNGPINGD0YfQtdGC0L3Ri9GFINC30LDQv9C40YHQtdC5INC90LAg0LTQuNGB0LrQtSIKKworIzogY29tbWFuZC1saXN0Lmg6ODEKK21zZ2lkICJFeHBvcnQgYSBzaW5nbGUgY29tbWl0IHRvIGEgQ1ZTIGNoZWNrb3V0IgorbXNnc3RyICLQrdC60YHQv9C+0YDRgiDQtdC00LjQvdGB0YLQstC10L3QvdC+0LPQviDQutC+0LzQvNC40YLQsCDQsiDQstC40LTQtSDRgNCw0LHQvtGH0LXQuSDQutC+0L/QuNC4IENWUyIKKworIzogY29tbWFuZC1saXN0Lmg6ODIKK21zZ2lkICJTYWx2YWdlIHlvdXIgZGF0YSBvdXQgb2YgYW5vdGhlciBTQ00gcGVvcGxlIGxvdmUgdG8gaGF0ZSIKK21zZ3N0ciAi0KHQv9Cw0YHQtdC90LjQtSDQstCw0YjQuNGFINC00LDQvdC90YvRhSDQuNC3INC00YDRg9Cz0L7QuSDQodCa0JIg0LrQvtGC0L7RgNGD0Y4g0LvRjtC00Lgg0LvRjtCx0Y/RgiDQvdC10L3QsNCy0LjQtNC10YLRjCIKKworIzogY29tbWFuZC1saXN0Lmg6ODMKK21zZ2lkICJBIENWUyBzZXJ2ZXIgZW11bGF0b3IgZm9yIEdpdCIKK21zZ3N0ciAi0K3QvNGD0LvRj9GC0L7RgCDRgdC10YDQstC10YDQsCBDVlMg0LTQu9GPIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODQKK21zZ2lkICJBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHaXQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICLQntGH0LXQvdGMINC/0YDQvtGB0YLQvtC5INGB0LXRgNCy0LXRgCDQtNC70Y8gR2l0INGA0LXQv9C+0LfQuNGC0L7RgNC40LXQsiIKKworIzogY29tbWFuZC1saXN0Lmg6ODUKK21zZ2lkICJHaXZlIGFuIG9iamVjdCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgYmFzZWQgb24gYW4gYXZhaWxhYmxlIHJlZiIKK21zZ3N0ciAi0J/RgNC40YHQstC+0LXQvdC40LUg0L7QsdGK0LXQutGC0YMg0YPQtNC+0LHQvtGH0LjRgtCw0LXQvNC+0LUg0LjQvNGPINC90LAg0L7RgdC90L7QstC1INC00L7RgdGC0YPQv9C90L7QuSDRgdGB0YvQu9C60LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg2Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDRgNCw0LfQvdC40YbRiyDQvNC10LbQtNGDINC60L7QvNC80LjRgtCw0LzQuCwg0LrQvtC80LzQuNGC0L7QvCDQuCDRgNCw0LHQvtGH0LjQvCDQutCw0YLQsNC70L7Qs9C+0Lwg0Lgg0YIu0LQuIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NworbXNnaWQgIkNvbXBhcmVzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCIKK21zZ3N0ciAi0KHRgNCw0LLQvdC10L3QuNC1INGB0LXQtNC10YDQttC40LzQvtCz0L4g0YTQsNC50LvQvtCyINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUg0YEg0YTQsNC50LvQsNC80Lgg0LIg0LjQvdC00LXQutGB0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg4Cittc2dpZCAiQ29tcGFyZSBhIHRyZWUgdG8gdGhlIHdvcmtpbmcgdHJlZSBvciBpbmRleCIKK21zZ3N0ciAi0KHRgNCw0LLQvdC10L3QuNC1INC00LXRgNC10LLQsCDRhNCw0LnQu9C+0LIg0YEg0YDQsNCx0L7Rh9C40Lwg0LrQsNGC0LDQu9C+0LPQvtC8INC40LvQuCDQuNC90LTQtdC60YHQvtC8IgorCisjOiBjb21tYW5kLWxpc3QuaDo4OQorbXNnaWQgIkNvbXBhcmVzIHRoZSBjb250ZW50IGFuZCBtb2RlIG9mIGJsb2JzIGZvdW5kIHZpYSB0d28gdHJlZSBvYmplY3RzIgorbXNnc3RyICLQodGA0LDQstC90LXQvdC40LUg0YHQvtC00LXRgNC20LjQvNC+0LPQviDQuCDRgNC10LbQuNC80LAg0LTQstC+0LjRh9C90YvRhSDQvtCx0YrQtdC60YLQvtCyLCDQvdCw0LnQtNC10L3QvdGL0YUg0L/QviDQtNCy0YPQvCDQvtCx0YrQtdC60YLQsNC8INC00LXRgNC10LLQsCIKKworIzogY29tbWFuZC1saXN0Lmg6OTAKK21zZ2lkICJTaG93IGNoYW5nZXMgdXNpbmcgY29tbW9uIGRpZmYgdG9vbHMiCittc2dzdHIgItCf0L7QutCw0Lcg0LjQt9C80LXQvdC10L3QuNC5INGBINC/0L7QvNC+0YnRjNGOINGA0LDRgdC/0YDQvtGB0YLRgNCw0L3QtdC90L3Ri9GFINGD0YLQuNC70LjRgiDRgdGA0LDQstC90LXQvdC40Y8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkxCittc2dpZCAiR2l0IGRhdGEgZXhwb3J0ZXIiCittc2dzdHIgItCt0LrRgdC/0L7RgNGCINC00LDQvdC90YvRhSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkyCittc2dpZCAiQmFja2VuZCBmb3IgZmFzdCBHaXQgZGF0YSBpbXBvcnRlcnMiCittc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3QuNC5INC40L3RgtC10YDRhNC10LnRgSDQtNC70Y8g0LHRi9GB0YLRgNC+0LPQviDQuNC80L/QvtGA0YLQsCDQtNCw0L3QvdGL0YUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo5MworbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgItCX0LDQs9GA0YPQt9C60LAg0L7QsdGK0LXQutGC0L7QsiDQuCDRgdGB0YvQu9C+0Log0LjQtyDQtNGA0YPQs9C+0LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC40LUg0L3QtdC00L7RgdGC0LDRjtGJ0LjRhSDQvtCx0YrQtdC60YLQvtCyINC40Lcg0LTRgNGD0LPQvtCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogY29tbWFuZC1saXN0Lmg6OTUKK21zZ2lkICJSZXdyaXRlIGJyYW5jaGVzIgorbXNnc3RyICLQn9C10YDQtdC30LDQv9C40YHRjCDQstC10YLQvtC6IgorCisjOiBjb21tYW5kLWxpc3QuaDo5NgorbXNnaWQgIlByb2R1Y2UgYSBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtSDRgdC+0L7QsdGJ0LXQvdC40Y8g0LrQvtC80LzQuNGC0LAg0LTQu9GPINGB0LvQuNGP0L3QuNGPIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NworbXNnaWQgIk91dHB1dCBpbmZvcm1hdGlvbiBvbiBlYWNoIHJlZiIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDQutCw0LbQtNC+0Lkg0YHRgdGL0LvQutC1IgorCisjOiBjb21tYW5kLWxpc3QuaDo5OAorbXNnaWQgIlByZXBhcmUgcGF0Y2hlcyBmb3IgZS1tYWlsIHN1Ym1pc3Npb24iCittc2dzdHIgItCf0L7QtNCz0L7RgtC+0LLQutCwINC/0LDRgtGH0LXQuSDQtNC70Y8g0L7RgtC/0YDQsNCy0LrQuCDQv9C+INGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLQtSIKKworIzogY29tbWFuZC1saXN0Lmg6OTkKK21zZ2lkICJWZXJpZmllcyB0aGUgY29ubmVjdGl2aXR5IGFuZCB2YWxpZGl0eSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgZGF0YWJhc2UiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0YHQstGP0LfQvdC+0YHRgtC4INC4INCy0LDQu9C40LTQvdC+0YHRgtC4INC+0LHRitC10LrRgtC+0LIg0LIg0LHQsNC30LUg0LTQsNC90L3Ri9GFIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDAKK21zZ2lkICJDbGVhbnVwIHVubmVjZXNzYXJ5IGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0J7Rh9C40YHRgtC60LAg0L3QtdC90YPQttC90YvRhSDRhNCw0LnQu9C+0LIg0Lgg0L7Qv9GC0LjQvNC40LfQsNGG0LjRjyDQu9C+0LrQsNC70YzQvdC+0LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDEKK21zZ2lkICJFeHRyYWN0IGNvbW1pdCBJRCBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCB1c2luZyBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAi0JjQt9Cy0LvQtdGH0LXQvdC40LUg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQsCDQutC+0LzQvNC40YLQsCDQuNC3INCw0YDRhdC40LLQsCwg0YHQvtC30LTQsNC90L3QvtCz0L4g0YEg0L/QvtC80L7RidGM0Y4gZ2l0LWFyY2hpdmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMgorbXNnaWQgIlByaW50IGxpbmVzIG1hdGNoaW5nIGEgcGF0dGVybiIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDRgdGC0YDQvtC6LCDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC40YUg0YjQsNCx0LvQvtC90YMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMworbXNnaWQgIkEgcG9ydGFibGUgZ3JhcGhpY2FsIGludGVyZmFjZSB0byBHaXQiCittc2dzdHIgItCf0L7RgNGC0LDRgtC40LLQvdGL0Lkg0LPRgNCw0YTQuNGH0LXRgdC60LjQuSDQuNC90YLQtdGA0YTQtdC50YEg0LTQu9GPIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA0Cittc2dpZCAiQ29tcHV0ZSBvYmplY3QgSUQgYW5kIG9wdGlvbmFsbHkgY3JlYXRlcyBhIGJsb2IgZnJvbSBhIGZpbGUiCittc2dzdHIgItCS0YvRh9C40YHQu9C10L3QuNC1INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LAg0L7QsdGK0LXQutGC0LAg0Lgg0LLQvtC30LzQvtC20L3QvtC1INGB0L7Qt9C00LDQvdC40LUg0LTQstC+0LjRh9C90L7Qs9C+INC+0LHRitC10LrRgtCwINC40Lcg0YTQsNC50LvQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA1Cittc2dpZCAiRGlzcGxheSBoZWxwIGluZm9ybWF0aW9uIGFib3V0IEdpdCIKK21zZ3N0ciAi0J7RgtC+0LHRgNCw0LbQtdC90LjQtSDRgdC/0YDQsNCy0L7Rh9C90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNgorbXNnaWQgIlNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdpdCBvdmVyIEhUVFAiCittc2dzdHIgItCh0LXRgNCy0LXRgNC90LDRjyDRgNC10LDQu9C40LfQsNGG0LjRjyDQv9GA0L7RgtC+0LrQvtC70LAgR2l0INC90LDQtCBIVFRQIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDcKK21zZ2lkICJEb3dubG9hZCBmcm9tIGEgcmVtb3RlIEdpdCByZXBvc2l0b3J5IHZpYSBIVFRQIgorbXNnc3RyICLQl9Cw0LPRgNGD0LfQutCwINC40Lcg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIEdpdCDRgSDQv9C+0LzQvtGJ0YzRjiBIVFRQIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDgKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBIVFRQL0RBViB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgItCe0YLQv9GA0LDQstC60LAg0L7QsdGK0LXQutGC0L7QsiDQsiDQtNGA0YPQs9C+0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDRgSDQv9C+0LzQvtGJ0YzRjiBIVFRQL0RBViIKKworIzogY29tbWFuZC1saXN0Lmg6MTA5Cittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBmcm9tIHN0ZGluIHRvIGFuIElNQVAgZm9sZGVyIgorbXNnc3RyICLQntGC0L/RgNCw0LLQutCwINC60L7Qu9C70LXQutGG0LjQuCDQv9Cw0YLRh9C10Lkg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCDQsiDQv9Cw0L/QutGDIElNQVAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgItCf0L7RgdGC0YDQvtC10L3QuNC1INGE0LDQudC70LAg0LjQvdC00LXQutGB0LAg0LTQu9GPINGB0YPRidC10YHRgtCy0YPRjtGJ0LXQs9C+INGD0L/QsNC60L7QstCw0L3QvdC+0LPQviDQsNGA0YXQuNCy0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMQorbXNnaWQgIkNyZWF0ZSBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeSBvciByZWluaXRpYWxpemUgYW4gZXhpc3Rpbmcgb25lIgorbXNnc3RyICLQodC+0LfQtNCw0L3QuNC1INC/0YPRgdGC0L7Qs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gR2l0INC40LvQuCDQv9C10YDQtdC40L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGPINGB0YPRidC10YHRgtCy0YPRjtGJ0LXQs9C+IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTIKK21zZ2lkICJJbnN0YW50bHkgYnJvd3NlIHlvdXIgd29ya2luZyByZXBvc2l0b3J5IGluIGdpdHdlYiIKK21zZ3N0ciAi0JzQs9C90L7QstC10L3QvdGL0Lkg0L/RgNC+0YHQvNC+0YLRgCDQstCw0YjQtdCz0L4g0YDQsNCx0L7Rh9C10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPINCyIGdpdHdlYiIKKworIzogY29tbWFuZC1saXN0Lmg6MTEzCittc2dpZCAiQWRkIG9yIHBhcnNlIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gaW4gY29tbWl0IG1lc3NhZ2VzIgorbXNnc3RyICLQlNC+0LHQsNCy0LvQtdC90LjQtSDQuNC70Lgg0YDQsNC30LHQvtGAINGB0YLRgNGD0LrRgtGD0YDQuNGA0L7QstCw0L3QvdC+0Lkg0LjQvdGE0L7RgNC80LDRhtC40Lgg0LIg0YHQvtC+0LHRidC10L3QuNGP0YUg0LrQvtC80LzQuNGC0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNAorbXNnaWQgIlRoZSBHaXQgcmVwb3NpdG9yeSBicm93c2VyIgorbXNnc3RyICLQkdGA0LDRg9C30LXRgCDRgNC10L/QvtC30LjRgtC+0YDQuNGPIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE1Cittc2dpZCAiU2hvdyBjb21taXQgbG9ncyIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDQuNGB0YLQvtGA0LjQuCDQutC+0LzQvNC40YLQvtCyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTYKK21zZ2lkICJTaG93IGluZm9ybWF0aW9uIGFib3V0IGZpbGVzIGluIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDRhNCw0LnQu9Cw0YUg0LIg0LjQvdC00LXQutGB0LUg0Lgg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTE3Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkiCittc2dzdHIgItCS0YvQstC+0LQg0YHQv9C40YHQutCwINGB0YHRi9C70L7QuiDQstC+INCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOAorbXNnaWQgIkxpc3QgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QiCittc2dzdHIgItCS0YvQstC+0LQg0YHQvtC00LXRgNC20LjQvNC+0LPQviDQvtCx0YrQtdC60YLQsCDQtNC10YDQtdCy0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOQorbXNnaWQgIkV4dHJhY3RzIHBhdGNoIGFuZCBhdXRob3JzaGlwIGZyb20gYSBzaW5nbGUgZS1tYWlsIG1lc3NhZ2UiCittc2dzdHIgItCY0LfQstC70LXQutCw0LXRgiDQv9Cw0YLRhyDQuCDQsNCy0YLQvtGA0YHRgtCy0L4g0LjQtyDQvtC00L3QvtCz0L4g0YHQvtC+0LHRidC10L3QuNGPINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiyIKKworIzogY29tbWFuZC1saXN0Lmg6MTIwCittc2dpZCAiU2ltcGxlIFVOSVggbWJveCBzcGxpdHRlciBwcm9ncmFtIgorbXNnc3RyICLQn9GA0L7RgdGC0LDRjyDQv9GA0L7Qs9GA0LDQvNC80LAgVU5JWCDQtNC70Y8g0YDQsNC30LHQvtGA0LAg0YTQsNC50LvQsCBtYm94IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjEKK21zZ2lkICJKb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlciIKK21zZ3N0ciAi0J7QsdGK0LXQtNC40L3QtdC90LjQtSDQvtC00L3QvtC5INC40LvQuCDQvdC10YHQutC+0LvRjNC60LjRhSDQuNGB0YLQvtGA0LjQuSDRgNCw0LfRgNCw0LHQvtGC0LrQuCDQstC80LXRgdGC0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMgorbXNnaWQgIkZpbmQgYXMgZ29vZCBjb21tb24gYW5jZXN0b3JzIGFzIHBvc3NpYmxlIGZvciBhIG1lcmdlIgorbXNnc3RyICLQn9C+0LjRgdC6INC/0L7QtNGF0L7QtNGP0YnQuNGFINC+0LHRidC40YUg0L/RgNC10LTQutC+0LIg0LTQu9GPINCy0L7Qt9C80L7QttC90L7Qs9C+INGB0LvQuNGP0L3QuNGPIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjMKK21zZ2lkICJSdW4gYSB0aHJlZS13YXkgZmlsZSBtZXJnZSIKK21zZ3N0ciAi0JfQsNC/0YPRgdC6INGC0YDRkdGF0YXQvtC00L7QstC+0LPQviDRgdC70LjRj9C90LjRjyDRhNCw0LnQu9C+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNAorbXNnaWQgIlJ1biBhIG1lcmdlIGZvciBmaWxlcyBuZWVkaW5nIG1lcmdpbmciCittc2dzdHIgItCX0LDQv9GD0YHQuiDRgdC70LjRj9C90LjRjyDQtNC70Y8g0YTQsNC50LvQvtCyLCDQutC+0YLQvtGA0YvQtSDRgtGA0LXQsdGD0Y7RgiDRgdC70LjRj9C90LjRjyIKKworIzogY29tbWFuZC1saXN0Lmg6MTI1Cittc2dpZCAiVGhlIHN0YW5kYXJkIGhlbHBlciBwcm9ncmFtIHRvIHVzZSB3aXRoIGdpdC1tZXJnZS1pbmRleCIKK21zZ3N0ciAi0KHRgtCw0L3QtNCw0YDRgtC90LDRjyDQv9GA0L7Qs9GA0LDQvNC80LAt0L/QvtC80L7RidC90LjQuiDQtNC70Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0YHQvtCy0LzQtdGB0YLQvdC+INGBIGdpdC1tZXJnZS1pbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI2Cittc2dpZCAiUnVuIG1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb24gdG9vbHMgdG8gcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMiCittc2dzdHIgItCX0LDQv9GD0YHQuiDQuNC90YHRgtGA0YPQvNC10L3RgtC+0LIg0YDQsNC30YDQtdGI0LXQvdC40Y8g0LrQvtC90YTQu9C40LrRgtC+0LIg0YHQu9C40Y/QvdC40Y8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNworbXNnaWQgIlNob3cgdGhyZWUtd2F5IG1lcmdlIHdpdGhvdXQgdG91Y2hpbmcgaW5kZXgiCittc2dzdHIgItCS0YvQstC+0LQg0YLRgNGR0YXRhdC+0LTQvtCy0L7Qs9C+INGB0LvQuNGP0L3QuNC1INCx0LXQtyDQt9Cw0YLRgNCw0LPQuNCy0LDQvdC40Y8g0LjQvdC00LXQutGB0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgbXVsdGktcGFjay1pbmRleGVzIgorbXNnc3RyICLQl9Cw0L/QuNGB0Ywg0Lgg0L/RgNC+0LLQtdGA0LrQsCDRhNCw0LnQu9C+0LIgbXVsdGktcGFjay1pbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI5Cittc2dpZCAiQ3JlYXRlcyBhIHRhZyBvYmplY3QiCittc2dzdHIgItCh0L7Qt9C00LDQvdC40LUg0L7QsdGK0LXQutGC0L7QsiDQvNC10YLQvtC6IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzAKK21zZ2lkICJCdWlsZCBhIHRyZWUtb2JqZWN0IGZyb20gbHMtdHJlZSBmb3JtYXR0ZWQgdGV4dCIKK21zZ3N0ciAi0J/QvtGB0YLRgNC+0LXQvdC40LUg0L7QsdGK0LXQutGC0LAg0LTQtdGA0LXQstCwINC40Lcg0YLQtdC60YHRgtCwINGE0L7RgNC80LDRgtCwIGxzLXRyZWUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMQorbXNnaWQgIk1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgYSBkaXJlY3RvcnksIG9yIGEgc3ltbGluayIKK21zZ3N0ciAi0J/QtdGA0LXQvNC10YnQtdC90LjQtSDQuNC70Lgg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSDRhNCw0LnQu9CwLCDQutCw0YLQsNC70L7Qs9CwINC40LvQuCDRgdC40LzQstC+0LvRjNC90L7QuSDRgdGB0YvQu9C60LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMgorbXNnaWQgIkZpbmQgc3ltYm9saWMgbmFtZXMgZm9yIGdpdmVuIHJldnMiCittc2dzdHIgItCf0L7QuNGB0Log0YHQuNC80LLQvtC70YzQvdGL0YUg0LjQvNGR0L0g0LTQu9GPINGD0LrQsNC30LDQvdC90YvRhSDRgNC10LTQsNC60YbQuNC5IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzMKK21zZ2lkICJBZGQgb3IgaW5zcGVjdCBvYmplY3Qgbm90ZXMiCittc2dzdHIgItCU0L7QsdCw0LLQu9C10L3QuNC1INC40LvQuCDQv9GA0L7RgdC80L7RgtGAINC30LDQvNC10YLQvtC6INC+0LHRitC10LrRgtCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzQKK21zZ2lkICJJbXBvcnQgZnJvbSBhbmQgc3VibWl0IHRvIFBlcmZvcmNlIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAi0JjQvNC/0L7RgNGCINC4INC+0YLQv9GA0LDQstC60LAg0LIg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCBQZXJmb3JjZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM1Cittc2dpZCAiQ3JlYXRlIGEgcGFja2VkIGFyY2hpdmUgb2Ygb2JqZWN0cyIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtSDRg9C/0LDQutC+0LLQsNC90L3QvtCz0L4g0LDRgNGF0LjQstCwINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNgorbXNnaWQgIkZpbmQgcmVkdW5kYW50IHBhY2sgZmlsZXMiCittc2dzdHIgItCf0L7QuNGB0Log0LjQt9Cx0YvRgtC+0YfQvdGL0YUg0YTQsNC50LvQvtCyINC/0LDQutC10YLQvtCyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzcKK21zZ2lkICJQYWNrIGhlYWRzIGFuZCB0YWdzIGZvciBlZmZpY2llbnQgcmVwb3NpdG9yeSBhY2Nlc3MiCittc2dzdHIgItCj0L/QsNC60L7QstC60LAg0YPQutCw0LfQsNGC0LXQu9C10Lkg0L3QsCDQstC10YLQutC4INC4INC80LXRgtC+0Log0LTQu9GPINGN0YTRhNC10LrRgtC40LLQvdC+0LPQviDQtNC+0YHRgtGD0L/QsCDQuiDRgNC10L/QvtC30LjRgtC+0YDQuNGOIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzgKK21zZ2lkICJSb3V0aW5lcyB0byBoZWxwIHBhcnNpbmcgcmVtb3RlIHJlcG9zaXRvcnkgYWNjZXNzIHBhcmFtZXRlcnMiCittc2dzdHIgItCf0L7QtNC/0YDQvtCz0YDQsNC80LzRiyDQtNC70Y8g0L/QvtC80L7RidC4INGA0LDQt9Cx0L7RgNCwINC/0LDRgNCw0LzQtdGC0YDQvtCyINC00L7RgdGC0YPQv9CwINCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogY29tbWFuZC1saXN0Lmg6MTM5Cittc2dpZCAiQ29tcHV0ZSB1bmlxdWUgSUQgZm9yIGEgcGF0Y2giCittc2dzdHIgItCS0YvRh9C40YHQu9C10L3QuNC1INGD0L3QuNC60LDQu9GM0L3QvtCz0L4g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQsCDQtNC70Y8g0L/QsNGC0YfQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQwCittc2dpZCAiUHJ1bmUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLQntGH0LjRgdGC0LrQsCDQstGB0LXRhSDQvdC10LTQvtGB0YLQuNC20LjQvNGL0YUg0L7QsdGK0LXQutGC0L7QsiDQuNC3INCx0LDQt9GLINC00LDQvdC90YvRhSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDEKK21zZ2lkICJSZW1vdmUgZXh0cmEgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGluIHBhY2sgZmlsZXMiCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvRhSDQvtCx0YrQtdC60YLQvtCyLCDQutC+0YLQvtGA0YvQtSDRg9C20LUg0YHQvtC00LXRgNC20LDRgtGB0Y8g0LIg0YTQsNC50LvQsNGFINC/0LDQutC10YLQvtCyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDIKK21zZ2lkICJGZXRjaCBmcm9tIGFuZCBpbnRlZ3JhdGUgd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgItCY0LfQstC70LXRh9C10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQuCDQvtCx0YrQtdC00LjQvdC10L3QuNC1INGBINC00YDRg9Cz0LjQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC10Lwg0LjQu9C4INC70L7QutCw0LvRjNC90L7QuSDQstC10YLQutC+0LkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MworbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAi0J7QsdC90L7QstC70LXQvdC40LUg0LLQvdC10YjQvdC40YUg0YHRgdGL0LvQvtC6INC4INGB0LLRj9C30LDQvdC90YvRhSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDQKK21zZ2lkICJBcHBsaWVzIGEgcXVpbHQgcGF0Y2hzZXQgb250byB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgItCf0YDQuNC80LXQvdC10L3QuNC1INGD0L/QvtGA0Y/QtNC+0YfQtdC90L3QvtCz0L4g0YHQv9C40YHQutCwINC/0LDRgtGH0LXQuSDQvdCw0LQg0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQvtC5IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDUKK21zZ2lkICJDb21wYXJlIHR3byBjb21taXQgcmFuZ2VzIChlLmcuIHR3byB2ZXJzaW9ucyBvZiBhIGJyYW5jaCkiCittc2dzdHIgItCh0YDQsNCy0L3QtdC90LjQtSDQtNCy0YPRhSDQtNC40LDQv9Cw0LfQvtC90L7QsiDQutC+0LzQvNC40YLQvtCyICjQvdCw0L/RgNC40LzQtdGAINC00LLRg9GFINCy0LXRgNGB0LjQuSDQstC10YLQutC4KSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ2Cittc2dpZCAiUmVhZHMgdHJlZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBpbmRleCIKK21zZ3N0ciAi0KfRgtC10L3QuNC1INC40L3RhNC+0YDQvNCw0YbQuNC4INC+INC00LXRgNC10LLQtSDQsiDQuNC90LTQtdC60YEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NworbXNnaWQgIlJlYXBwbHkgY29tbWl0cyBvbiB0b3Agb2YgYW5vdGhlciBiYXNlIHRpcCIKK21zZ3N0ciAi0J/QvtCy0YLQvtGA0L3QvtC1INC/0YDQuNC80LXQvdC10L3QuNC1INC60L7QvNC80LjRgtC+0LIg0L3QsNC0INCy0LXRgNGF0YPRiNC60L7QuSDQtNGA0YPQs9C+0Lkg0LLQtdGC0LrQuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ4Cittc2dpZCAiUmVjZWl2ZSB3aGF0IGlzIHB1c2hlZCBpbnRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC40LUg0YLQvtCz0L4sINGH0YLQviDQsdGL0LvQviDQvtGC0L/RgNCw0LLQu9C10L3QviDQsiDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDkKK21zZ2lkICJNYW5hZ2UgcmVmbG9nIGluZm9ybWF0aW9uIgorbXNnc3RyICLQo9C/0YDQsNCy0LvQtdC90LjQtSDQuNC90YTQvtGA0LzQsNGG0LjQtdC5INC20YPRgNC90LDQu9CwINGB0YHRi9C70L7QuiIKKworIzogY29tbWFuZC1saXN0Lmg6MTUwCittc2dpZCAiTWFuYWdlIHNldCBvZiB0cmFja2VkIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAi0KPQv9GA0LDQstC70LXQvdC40LUg0L3QsNCx0L7RgNC+0Lwg0L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdCyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTEKK21zZ2lkICJQYWNrIHVucGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5IgorbXNnc3RyICLQo9C/0LDQutC+0LLQutCwINC90LXRg9C/0LDQutC+0LLQsNC90L3Ri9GFINC+0LHRitC10LrRgtC+0LIg0LIg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTUyCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgcmVmcyB0byByZXBsYWNlIG9iamVjdHMiCittc2dzdHIgItCh0L7Qt9C00LDQvdC40LUsINCy0YvQstC+0LQg0YHQv9C40YHQutCwLCDRg9C00LDQu9C10L3QuNC1INGB0YHRi9C70L7QuiDQtNC70Y8g0LfQsNC80LXQvdGLINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MworbXNnaWQgIkdlbmVyYXRlcyBhIHN1bW1hcnkgb2YgcGVuZGluZyBjaGFuZ2VzIgorbXNnc3RyICLQk9C10L3QtdGA0LDRhtC40Y8g0YHQstC+0LTQutC4INC/0YDQtdC00YHRgtC+0Y/RidC40YUg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTQKK21zZ2lkICJSZXVzZSByZWNvcmRlZCByZXNvbHV0aW9uIG9mIGNvbmZsaWN0ZWQgbWVyZ2VzIgorbXNnc3RyICLQn9C+0LLRgtC+0YDQvdC+0LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LUg0LfQsNC/0LjRgdCw0L3QvdGL0YUg0YDQsNC30YDQtdGI0LXQvdC40Lkg0LrQvtC90YTQu9C40LrRgtC+0LIg0L/RgNC4INGB0LvQuNGP0L3QuNGP0YUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NQorbXNnaWQgIlJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlIgorbXNnc3RyICLQodCx0YDQvtGBINGC0LXQutGD0YnQtdCz0L4g0YHQvtGB0YLQvtGP0L3QuNGPIEhFQUQg0L3QsCDRg9C60LDQt9Cw0L3QvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTYKK21zZ2lkICJSZXZlcnQgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICLQntCx0YDQsNGJ0LXQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5INGB0YPRidC10YHRgtCy0YPRjtGJ0LjRhSDQutC+0LzQvNC40YLQvtCyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTcKK21zZ2lkICJMaXN0cyBjb21taXQgb2JqZWN0cyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgItCS0YvQstC+0LQg0YHQv9C40YHQutCwINC+0LHRitC10LrRgtC+0LIg0LrQvtC80LzQuNGC0LAg0LIg0L7QsdGA0LDRgtC90L7QvCDRhdGA0L7QvdC+0LvQvtCz0LjRh9C10YHQutC+0Lwg0L/QvtGA0Y/QtNC60LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OAorbXNnaWQgIlBpY2sgb3V0IGFuZCBtYXNzYWdlIHBhcmFtZXRlcnMiCittc2dzdHIgItCg0LDQt9Cx0L7RgCDQuCDQvtCx0YDQsNCx0L7RgtC60LAg0L/QsNGA0LDQvNC10YLRgNC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OQorbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INGE0LDQudC70L7QsiDQuNC3INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCDQuCDQuNC90LTQtdC60YHQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTYwCittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBhcyBlbWFpbHMiCittc2dzdHIgItCe0YLQv9GA0LDQstC60LAg0LrQvtC70LvQtdC60YbQuNC4INC/0LDRgtGH0LXQuSDQvdCwINGN0LvQtdC60YLRgNC+0L3QvdGD0Y4g0L/QvtGH0YLRgyIKKworIzogY29tbWFuZC1saXN0Lmg6MTYxCittc2dpZCAiUHVzaCBvYmplY3RzIG92ZXIgR2l0IHByb3RvY29sIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LrQsCDQvtCx0YrQtdC60YLQvtCyINCyINC00YDRg9Cz0L7QuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INGBINC/0L7QvNC+0YnRjNGOINC/0YDQvtGC0L7QutC+0LvQsCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MgorbXNnaWQgIlJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdpdC1vbmx5IFNTSCBhY2Nlc3MiCittc2dzdHIgItCe0LPRgNCw0L3QuNGH0LXQvdC90LDRjyDQvtCx0L7Qu9C+0YfQutCwINCy0YXQvtC00LAg0LIg0YHQuNGB0YLQtdC80YMg0LTQu9GPINC00L7RgdGC0YPQv9CwIEdpdCDRh9C10YDQtdC3IFNTSCIKKworIzogY29tbWFuZC1saXN0Lmg6MTYzCittc2dpZCAiU3VtbWFyaXplICdnaXQgbG9nJyBvdXRwdXQiCittc2dzdHIgItCe0LHQvtCx0YnQtdC90LjQtSDQstGL0LLQvtC00LAgwqtnaXQgbG9nwrsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NAorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICLQktGL0LLQvtC0INGA0LDQt9C70LjRh9C90YvRhSDRgtC40L/QvtCyINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NQorbXNnaWQgIlNob3cgYnJhbmNoZXMgYW5kIHRoZWlyIGNvbW1pdHMiCittc2dzdHIgItCS0YvQstC+0LQg0LLQtdGC0L7QuiDQuCDQuNGFINC60L7QvNC80LjRgtC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NgorbXNnaWQgIlNob3cgcGFja2VkIGFyY2hpdmUgaW5kZXgiCittc2dzdHIgItCS0YvQstC+0LQg0LjQvdC00LXQutGB0LAg0YPQv9Cw0LrQvtCy0LDQvdC90L7Qs9C+INCw0YDRhdC40LLQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY3Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDRgdGB0YvQu9C+0Log0LIg0LvQvtC60LDQu9GM0L3QvtC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OAorbXNnaWQgIkdpdCdzIGkxOG4gc2V0dXAgY29kZSBmb3Igc2hlbGwgc2NyaXB0cyIKK21zZ3N0ciAi0JrQvtC0INC90LDRgdGC0YDQvtC50LrQuCDQuNC90YLQtdGA0L3QsNGG0LjQvtC90LDQu9C40LfQsNGG0LjQuCDQtNC70Y8g0YHRhtC10L3QsNGA0LjQtdCyINC+0LHQvtC70L7Rh9C60LggR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjkKK21zZ2lkICJDb21tb24gR2l0IHNoZWxsIHNjcmlwdCBzZXR1cCBjb2RlIgorbXNnc3RyICLQntCx0YnQuNC5INC60L7QtCDQvdCw0YHRgtGA0L7QudC60Lgg0LTQu9GPINGB0YbQtdC90LDRgNC40LXQsiDQvtCx0L7Qu9C+0YfQutC4IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTcwCittc2dpZCAiU3Rhc2ggdGhlIGNoYW5nZXMgaW4gYSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeSBhd2F5IgorbXNnc3RyICLQodC/0YDRj9GC0LDRgtGMINC40LfQvNC10L3QtdC90LjRjyDQsiDQuNC30LzQtdC90ZHQvdC90L7QvCDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzEKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgc3RhZ2luZyBhcmVhIgorbXNnc3RyICLQlNC+0LHQsNCy0LvQtdC90LjQtSDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INGE0LDQudC70L7QsiDQsiDQuNC90LTQtdC60YEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MgorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgItCS0YvQstC+0LQg0YHQvtGB0YLQvtGP0L3QuNGPINGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTczCittc2dpZCAiUmVtb3ZlIHVubmVjZXNzYXJ5IHdoaXRlc3BhY2UiCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUg0L3QtdC90YPQttC90YvRhSDQv9GA0L7QsdC10LvQvtCyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzQKK21zZ2lkICJJbml0aWFsaXplLCB1cGRhdGUgb3IgaW5zcGVjdCBzdWJtb2R1bGVzIgorbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQsNGG0LjRjywg0L7QsdC90L7QstC70LXQvdC40LUg0LjQu9C4INC/0YDQvtGB0LzQvtGC0YAg0L/QvtC00LzQvtC00YPQu9C10LkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NQorbXNnaWQgIkJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYW5kIEdpdCIKK21zZ3N0ciAi0JTQstGD0YXRgdGC0L7RgNC+0L3QvdC40LUg0L7Qv9C10YDQsNGG0LjQuCDQvNC10LbQtNGDINGA0LXQv9C+0LfQuNGC0L7RgNC40Y/QvNC4IFN1YnZlcnNpb24g0LggR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzYKK21zZ2lkICJSZWFkLCBtb2RpZnkgYW5kIGRlbGV0ZSBzeW1ib2xpYyByZWZzIgorbXNnc3RyICLQp9GC0LXQvdC40LUsINC40LfQvNC10L3QtdC90LjQtSDQuCDRg9C00LDQu9C10L3QuNC1INGB0LjQvNCy0L7Qu9C40YfQtdGB0LrQuNGFINGB0YHRi9C70L7QuiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc3Cittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgItCh0L7Qt9C00LDQvdC40LUsINCy0YvQstC+0LQg0YHQv9C40YHQutCwLCDRg9C00LDQu9C10L3QuNC1INC40LvQuCDQv9GA0L7QstC10YDQutCwINC80LXRgtC60LgsINC/0L7QtNC/0LjRgdCw0L3QvdC+0Lkg0YEg0L/QvtC80L7RidGM0Y4gR1BHIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzgKK21zZ2lkICJDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBhIGJsb2IncyBjb250ZW50cyIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtSDQstGA0LXQvNC10L3QvdC+0LPQviDRhNCw0LnQu9CwINGBINGB0L7QtNC10YDQttC40LzRi9C8INC00LLQvtC40YfQvdC+0LPQviDQvtCx0YrQtdC60YLQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc5Cittc2dpZCAiVW5wYWNrIG9iamVjdHMgZnJvbSBhIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICLQoNCw0YHQv9Cw0LrQvtCy0LrQsCDQvtCx0YrQtdC60YLQvtCyINC40Lcg0YPQv9Cw0LrQvtCy0LDQvdC90L7Qs9C+INCw0YDRhdC40LLQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTgwCittc2dpZCAiUmVnaXN0ZXIgZmlsZSBjb250ZW50cyBpbiB0aGUgd29ya2luZyB0cmVlIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi0KDQtdCz0LjRgdGC0YDQsNGG0LjRjyDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INGE0LDQudC70LAg0LjQtyDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAg0LIg0LjQvdC00LXQutGBIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODEKK21zZ2lkICJVcGRhdGUgdGhlIG9iamVjdCBuYW1lIHN0b3JlZCBpbiBhIHJlZiBzYWZlbHkiCittc2dzdHIgItCR0LXQt9C+0L/QsNGB0L3QvtC1INC+0LHQvdC+0LLQu9C10L3QuNC1INC40LzQtdC90Lgg0L7QsdGK0LXQutGC0LAg0YXRgNCw0L3Rj9GJ0LXQs9C+0YHRjyDQsiDRgdGB0YvQu9C60LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MgorbXNnaWQgIlVwZGF0ZSBhdXhpbGlhcnkgaW5mbyBmaWxlIHRvIGhlbHAgZHVtYiBzZXJ2ZXJzIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjQtSDRhNCw0LnQu9CwINGB0L4g0LLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC10Lkg0LTQu9GPINCz0LvRg9C/0YvRhSDRgdC10YDQstC10YDQvtCyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODMKK21zZ2lkICJTZW5kIGFyY2hpdmUgYmFjayB0byBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LrQsCDQsNGA0YXQuNCy0LAg0L7QsdGA0LDRgtC90L4g0LIgZ2l0LWFyY2hpdmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NAorbXNnaWQgIlNlbmQgb2JqZWN0cyBwYWNrZWQgYmFjayB0byBnaXQtZmV0Y2gtcGFjayIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LrQsCDRg9C/0LDQutC+0LLQsNC90L3Ri9GFINC+0LHRitC10LrRgtC+0LIg0L7QsdGA0LDRgtC90L4g0LIgZ2l0LWZldGNoLXBhY2siCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NQorbXNnaWQgIlNob3cgYSBHaXQgbG9naWNhbCB2YXJpYWJsZSIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDQu9C+0LPQuNGH0LXRgdC60L7QuSDQv9C10YDQtdC80LXQvdC90L7QuSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NgorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIGNvbW1pdHMiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L/QvtC00L/QuNGB0LggR1BHINC60L7QvNC80LjRgtC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NworbXNnaWQgIlZhbGlkYXRlIHBhY2tlZCBHaXQgYXJjaGl2ZSBmaWxlcyIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDRhNCw0LnQu9C+0LIg0YPQv9Cw0LrQvtCy0LDQvdC90YvRhSDQsNGA0YXQuNCy0L7QsiBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OAorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIHRhZ3MiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L/QvtC00L/QuNGB0LggR1BHINC80LXRgtC+0LoiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OQorbXNnaWQgIkdpdCB3ZWIgaW50ZXJmYWNlICh3ZWIgZnJvbnRlbmQgdG8gR2l0IHJlcG9zaXRvcmllcykiCittc2dzdHIgItCS0LXQsSDQuNC90YLQtdGA0YTQtdC50YEgR2l0ICjQstC10LEt0LjQvdGC0LXRgNGE0LXQudGBINC00LvRjyBHaXQg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdCyKSIKKworIzogY29tbWFuZC1saXN0Lmg6MTkwCittc2dpZCAiU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIgorbXNnc3RyICLQktGL0LLQvtC0INC20YPRgNC90LDQu9CwINGBINC40LfQvNC10L3QtdC90LjRj9C80LgsINC60L7RgtC+0YDRi9C1INCy0LLQvtC00LjQuyDQutCw0LbQtNGL0Lkg0LjQtyDQutC+0LzQvNC40YLQvtCyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTEKK21zZ2lkICJNYW5hZ2UgbXVsdGlwbGUgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAi0KPQv9GA0LDQstC70LXQvdC40LUg0L3QtdGB0LrQvtC70YzQutC40LzQuCDRgNCw0LHQvtGH0LjQvNC4INC60LDRgtCw0LvQvtCz0LDQvNC4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTIKK21zZ2lkICJDcmVhdGUgYSB0cmVlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICLQodC+0LfQtNCw0L3QuNC1INC+0LHRitC10LrRgtCwINC00LXRgNC10LLQsCDQuNC3INGC0LXQutGD0YnQtdCz0L4g0LjQvdC00LXQutGB0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MworbXNnaWQgIkRlZmluaW5nIGF0dHJpYnV0ZXMgcGVyIHBhdGgiCittc2dzdHIgItCe0L/RgNC10LTQtdC70LXQvdC40LUg0LDRgtGA0LjQsdGD0YLQvtCyINC00LvRjyDQv9GD0YLQtdC5INGE0LDQudC70L7QsiDQuNC70Lgg0LrQsNGC0LDQu9C+0LPQvtCyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTQKK21zZ2lkICJHaXQgY29tbWFuZC1saW5lIGludGVyZmFjZSBhbmQgY29udmVudGlvbnMiCittc2dzdHIgItCY0L3RgtC10YDRhNC10LnRgSDQutC+0LzQvNCw0L3QtNC90L7QuSDRgdGC0YDQvtC60LggR2l0INC4INGB0L7Qs9C70LDRiNC10L3QuNGPIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTUKK21zZ2lkICJBIEdpdCBjb3JlIHR1dG9yaWFsIGZvciBkZXZlbG9wZXJzIgorbXNnc3RyICLQo9GH0LXQsdC90LjQuiDQv9C+INGP0LTRgNGDIEdpdCDQtNC70Y8g0YDQsNC30YDQsNCx0L7RgtGH0LjQutC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NgorbXNnaWQgIkdpdCBmb3IgQ1ZTIHVzZXJzIgorbXNnc3RyICJHaXQg0LTQu9GPINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5IENWUyIKKworIzogY29tbWFuZC1saXN0Lmg6MTk3Cittc2dpZCAiVHdlYWtpbmcgZGlmZiBvdXRwdXQiCittc2dzdHIgItCf0L7QtNGB0YLRgNC+0LnQutCwINCy0YvQstC+0LTQsCDRgdC/0LjRgdC60LAg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTgKK21zZ2lkICJBIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcyBmb3IgRXZlcnlkYXkgR2l0IgorbXNnc3RyICLQn9C+0LvQtdC30L3Ri9C5INC80LjQvdC40LzRg9C8INC60L7QvNCw0L3QtCDQtNC70Y8g0LrQsNC20LTQvtC00L3QtdCy0L3QvtCz0L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTkKK21zZ2lkICJBIEdpdCBHbG9zc2FyeSIKK21zZ3N0ciAi0JPQu9C+0YHRgdCw0YDQuNC5IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjAwCittc2dpZCAiSG9va3MgdXNlZCBieSBHaXQiCittc2dzdHIgItCf0LXRgNC10YXQstCw0YLRh9C40LrQuCDQuNGB0L/QvtC70YzQt9GD0LXQvNGL0LUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDEKK21zZ2lkICJTcGVjaWZpZXMgaW50ZW50aW9uYWxseSB1bnRyYWNrZWQgZmlsZXMgdG8gaWdub3JlIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QuNC1INGB0L/QtdGG0LjQsNC70YzQvdC+INC40LPQvdC+0YDQuNGA0YPQtdC80YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMgorbXNnaWQgIkRlZmluaW5nIHN1Ym1vZHVsZSBwcm9wZXJ0aWVzIgorbXNnc3RyICLQntC/0YDQtdC00LXQu9C10L3QuNC1INGB0LLQvtC50YHRgtCyINC/0L7QtNC80L7QtNGD0LvQtdC5IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDMKK21zZ2lkICJHaXQgbmFtZXNwYWNlcyIKK21zZ3N0ciAi0J/RgNC+0YHRgtGA0LDQvdGB0YLQstCwINC40LzRkdC9IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA0Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICLQodC+0LTQtdGA0LbQuNC80L7QtSDRgNC10L/QvtC30LjRgtC+0YDQuNGPIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA1Cittc2dpZCAiU3BlY2lmeWluZyByZXZpc2lvbnMgYW5kIHJhbmdlcyBmb3IgR2l0IgorbXNnc3RyICLQo9C60LDQt9Cw0L3QuNC1INGA0LXQtNCw0LrRhtC40Lkg0Lgg0LTQuNCw0L/QsNC30L7QvdC+0LIg0LTQu9GPIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA2Cittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0OiBwYXJ0IHR3byIKK21zZ3N0ciAi0J7QsdGD0YfQsNGO0YnQtdC1INCy0LLQtdC00LXQvdC40LUg0LIgR2l0OiDRh9Cw0YHRgtGMINCy0YLQvtGA0LDRjyIKKworIzogY29tbWFuZC1saXN0Lmg6MjA3Cittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0IgorbXNnc3RyICLQntCx0YPRh9Cw0Y7RidC10LUg0LLQstC10LTQtdC90LjQtSDQsiBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOAorbXNnaWQgIkFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cyB3aXRoIEdpdCIKK21zZ3N0ciAi0J7QsdC30L7RgCDRgNC10LrQvtC80LXQvdC00YPQtdC80YvRhSDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0LXQuSDQstGL0L/QvtC70L3Rj9C10LzRi9GFINC00LXQudGB0YLQstC40Lkg0YEgR2l0IgorCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgItCS0LDQvCDQvdGD0LbQvdC+INC90LDRh9Cw0YLRjCDRgSDQv9C+0LzQvtGJ0YzRjiDCq2dpdCBiaXNlY3Qgc3RhcnTCuyIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjYwCittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICLQktGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1LCDRh9GC0L7QsdGLINGPINGB0LTQtdC70LDQuyDRjdGC0L4gW1kgLSDQtNCwL24gLSDQvdC10YJdPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICLQn9C70L7RhdC+0Lkg0LLQstC+0LQg0L3QvtC80LXRgNCwINGA0LXQtNCw0LrRhtC40Lg6ICRhcmciCisKKyM6IGdpdC1iaXNlY3Quc2g6MTIxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYmlzZWN0ZWRfaGVhZCIKK21zZ3N0ciAi0J/Qu9C+0YXQvtC5INCy0LLQvtC0INC90L7QvNC10YDQsCDRgNC10LTQsNC60YbQuNC4OiAkYmlzZWN0ZWRfaGVhZCIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgItCf0LvQvtGF0L7QuSDQstCy0L7QtCDQvdC+0LzQtdGA0LAg0YDQtdC00LDQutGG0LjQuDogJHJldiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICLCq2dpdCBiaXNlY3QgJFRFUk1fQkFEwrsg0LzQvtC20LXRgiDQv9GA0LjQvdC40LzQsNGC0Ywg0YLQvtC70YzQutC+INC+0LTQuNC9INCw0YDQs9GD0LzQtdC90YIuIgorCisjOiBnaXQtYmlzZWN0LnNoOjIwOQorbXNnaWQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iCittc2dzdHIgItCd0LUg0L/QtdGA0LXQtNCw0L0g0YTQsNC50Lsg0LbRg9GA0L3QsNC70LAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCAkZmlsZSDQtNC70Y8g0L/QvtCy0YLQvtGA0LAg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMgorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiPz8g0LLRiyDQviDRh9C10Lw/IgorCisjOiBnaXQtYmlzZWN0LnNoOjI0MQorbXNnaWQgImJpc2VjdCBydW4gZmFpbGVkOiBubyBjb21tYW5kIHByb3ZpZGVkLiIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INCy0YvQv9C+0LvQvdC10L3QuNC4INC00LLQvtC40YfQvdC+0LPQviDQv9C+0LjRgdC60LA6INC90LUg0L/QtdGA0LXQtNCw0L3QsCDQutC+0LzQsNC90LTQsC4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQ2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICLQt9Cw0L/Rg9GB0LrQsNGOICRjb21tYW5kIgorCisjOiBnaXQtYmlzZWN0LnNoOjI1MworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCDQtNCy0L7QuNGH0L3Ri9C5INC/0L7QuNGB0Lo6XG7QutC+0LQg0LfQsNCy0LXRgNGI0LXQvdC40Y8gJHJlcyDQvtGCIMKrJGNvbW1hbmTCuyDQvtC60LDQt9Cw0LvRgdGPIDwgMCDQuNC70LggPj0gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJiaXNlY3QgcnVuINCx0L7Qu9GM0YjQtSDQvdC1INC80L7QttC10YIg0L/RgNC+0LTQvtC70LbQsNGC0YwiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjg1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHJlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywg0LTQstC+0LjRh9C90YvQuSDQv9C+0LjRgdC6OlxuwqtiaXNlY3Rfc3RhdGUgJHN0YXRlwrsg0LfQsNCy0LXRgNGI0LjQu9GB0Y8g0YEg0LrQvtC00L7QvCDQvtGI0LjQsdC60LggJHJlcyIKKworIzogZ2l0LWJpc2VjdC5zaDoyOTIKK21zZ2lkICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCittc2dzdHIgImJpc2VjdCBydW4g0LLRi9C/0L7Qu9C90LXQvSDRg9GB0L/QtdGI0L3QviIKKworIzogZ2l0LWJpc2VjdC5zaDozMDAKK21zZ2lkICJXZSBhcmUgbm90IGJpc2VjdGluZy4iCittc2dzdHIgItCS0Ysg0YHQtdC50YfQsNGBINC90LUg0LIg0L/RgNC+0YbQtdGB0YHQtSDQsdC40L3QsNGA0L3QvtCz0L4g0L/QvtC40YHQutCwLiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NDYKK21zZ2lkICIiCisiRXJyb3I6IFlvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJtZXJnZSIKK21zZ3N0ciAi0J7RiNC40LHQutCwOiDQktCw0YjQuCDQu9C+0LrQsNC70YzQvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCyINGD0LrQsNC30LDQvdC90YvRhSDRhNCw0LnQu9Cw0YUg0LHRg9C00YPRgiDQv9C10YDQtdC30LDQv9C40YHQsNC90Ysg0L/RgNC4INGB0LvQuNGP0L3QuNC4IgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MQorbXNnaWQgIkF1dG9tYXRlZCBtZXJnZSBkaWQgbm90IHdvcmsuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4INGB0LvQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjIKK21zZ2lkICJTaG91bGQgbm90IGJlIGRvaW5nIGFuIG9jdG9wdXMuIgorbXNnc3RyICLQlNC+0LvQttC90L4g0LHRi9GC0Ywgb2N0b3B1cyDQvdC1INC/0L7QtNGF0L7QtNC40YIuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INC+0LHRidC40Lkg0LrQvtC80LzQuNGCINGBICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAi0KPQttC1INC+0LHQvdC+0LLQu9C10L3QviDQsiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Lgg0YEgJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHRvOiAkcHJldHR5X25hbWUiCittc2dzdHIgItCf0LXRgNC10LzQvtGC0LrQsCDQstC/0LXRgNC10LQg0LTQvjogJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo5NworIywgc2gtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAi0J/QvtC/0YvRgtC60LAg0L/RgNC+0YHRgtC+0LPQviDRgdC70LjRj9C90LjRjyDRgSAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjEwMgorbXNnaWQgIlNpbXBsZSBtZXJnZSBkaWQgbm90IHdvcmssIHRyeWluZyBhdXRvbWF0aWMgbWVyZ2UuIgorbXNnc3RyICLQn9GA0L7RgdGC0L7QtSDRgdC70LjRj9C90LjQtSDQvdC1INGD0LTQsNC70L7RgdGMLCDQv9C+0L/Ri9GC0LrQsCDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtCz0L4g0YHQu9C40Y/QvdC40Y8uIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIyMAorbXNnaWQgIkNhbm5vdCByZW1vdmUgdGVtcG9yYXJ5IGluZGV4IChjYW4ndCBoYXBwZW4pIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMINCy0YDQtdC80LXQvdC90YvQuSDQuNC90LTQtdC60YEgKNC90LUg0LTQvtC70LbQvdC+INGB0LvRg9GH0LDRgtGM0YHRjykiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCAkcmVmX3N0YXNoINGBINC/0L7QvNC+0YnRjNGOICR3X2NvbW1pdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHB1c2gnOiAkb3B0aW9uIgorbXNnc3RyICLQvtGI0LjQsdC60LA6INC90LXQuNC30LLQtdGB0YLQvdGL0Lkg0L/QsNGA0LDQvNC10YLRgCDQtNC70Y8gwqtzdGFzaCBwdXNowrs6ICRvcHRpb24iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJHN0YXNoX21zZyIKK21zZ3N0ciAi0KDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMg0Lgg0YHQvtGB0YLQvtGP0L3QuNC1INC40L3QtNC10LrRgdCwINGB0L7RhdGA0LDQvdC10L3RiyAkc3Rhc2hfbXNnIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjUzNQorIywgc2gtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICRvcHQiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdCw0Y8g0L7Qv9GG0LjRjzogJG9wdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6ICRSRVYiCittc2dzdHIgItCf0LXRgNC10LTQsNC90L4g0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDRgNC10LTQsNC60YbQuNC5OiAkUkVWIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiRyZWZlcmVuY2Ug0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+0Lkg0YHRgdGL0LvQutC+0LkiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTk4CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICLCqyRhcmdzwrsg0L3QtSDQv9C+0YXQvtC20LUg0L3QsCDQutC+0LzQvNC40YIg0YHQviDRgdC/0YDRj9GC0LDQvdC90YvQvNC4INC40LfQvNC10L3QtdC90LjRj9C80LgiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjA5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiwqskYXJnc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDRgdGB0YvQu9C60L7QuSDQvdCwINGB0L/RgNGP0YLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MTcKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINC40L3QtNC10LrRgSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MjEKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgItCd0LXQu9GM0LfRjyDQv9GA0LjQvNC10L3QuNGC0Ywg0YHQv9GA0Y/RgtCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCy0L4g0LLRgNC10LzRjyDQstGL0L/QvtC70L3QtdC90LjRjyDRgdC70LjRj9C90LjRjyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MjkKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICLQmtC+0L3RhNC70LjQutGC0Ysg0LIg0LjQvdC00LXQutGB0LUuINCf0L7Qv9GA0L7QsdGD0LnRgtC1INCx0LXQtyAtLWluZGV4LiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzEKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDQtNC10YDQtdCy0L4g0LjQvdC00LXQutGB0LAiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjQwCittc2dpZCAiQ291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2ggZW50cnkiCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INCy0L7RgdGB0YLQsNC90L7QstC40YLRjCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyDQuNC3INGB0L/RgNGP0YLQsNC90L3Ri9GFINC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NjUKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0YPQsdGA0LDRgtGMINC40Lcg0LjQvdC00LXQutGB0LAg0LjQt9C80LXQvdC10L3QvdGL0LUg0YTQsNC50LvRiyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgItCe0YLQsdGA0L7RiNC10L3QviAke1JFVn0gKCRzKSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiR7UkVWfTog0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LHRgNC+0YHQuNGC0Ywg0LfQsNC/0LjRgdGMINC40Lcg0YHQv9GA0Y/RgtCw0L3QvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjc5MQorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAiKNCn0YLQvtCx0Ysg0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC40YUsINC90LDQsdC10YDQuNGC0LUgwqtnaXQgc3Rhc2ggYXBwbHnCuykiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjAwCittc2dpZCAiUmVsYXRpdmUgcGF0aCBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgItCe0YLQvdC+0YHQuNGC0LXQu9GM0L3Ri9C5INC/0YPRgtGMINC80L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGC0L7Qu9GM0LrQviDQvdCw0YXQvtC00Y/RgdGMINC90LAg0LLQtdGA0YjQuNC90LUg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMAorIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAiVVJMINGA0LXQv9C+0LfQuNGC0L7RgNC40Y86IMKrJHJlcG/CuyDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0LDQsdGB0L7Qu9GO0YLQvdGL0Lwg0LjQu9C4INC90LDRh9C40L3QsNGC0YzRgdGPINGBIC4vfC4uLyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMjkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IgorbXNnc3RyICLCqyRzbV9wYXRowrsg0YPQttC1INGB0L7QtNC10YDQttC40YLRgdGPINCyINC40L3QtNC10LrRgdC1IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzMgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiwqskc21fcGF0aMK7INGD0LbQtSDRgdC+0LTQtdGA0LbQuNGC0YHRjyDQsiDQuNC90LTQtdC60YHQtSDQuCDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0L/QvtC00LzQvtC00YPQu9C10LwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjM5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorIiRzbV9wYXRoXG4iCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorbXNnc3RyICLQodC70LXQtNGD0Y7RidC40LUg0L/Rg9GC0Lgg0LjQs9C90L7RgNC40YDRg9GO0YLRgdGPINC+0LTQvdC40Lwg0LjQtyDQstCw0YjQuNGFINGE0LDQudC70L7QsiAuZ2l0aWdub3JlOlxuJHNtX3BhdGhcbtCY0YHQv9C+0LvRjNC30YPQudGC0LUg0L7Qv9GG0LjRjiAtZiwg0LXRgdC70Lgg0LLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0LXQs9C+INC00L7QsdCw0LLQuNGC0YwuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI2OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgItCU0L7QsdCw0LLQu9GP0Y4g0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LjQtyDCqyRzbV9wYXRowrsg0LIg0LjQvdC00LXQutGBIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIsKrJHNtX3BhdGjCuyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIg0Lgg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC00LXQudGB0YLQstC40YLQtdC70YzQvdGL0Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdC8IGdpdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAi0JrQsNGC0LDQu9C+0LMgZ2l0INC00LvRjyDCqyRzbV9uYW1lwrsg0L3QsNC50LTQtdC9INC70L7QutCw0LvRjNC90L4g0L3QsCDQstC90LXRiNC90LjRhSDRgNC10L/QvtC30LjRgtC+0YDQuNGP0YU6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbVxuIgorIiAgJHJlYWxyZXBvXG4iCisidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgcmVwb1xuIgorIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnIG9wdGlvbi4iCittc2dzdHIgItCV0YHQu9C4INCy0Ysg0YXQvtGC0LjRgtC1INC/0L7QstGC0L7RgNC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC70L7QutCw0LvRjNC90YvQuSDQutCw0YLQsNC70L7QsyBnaXQg0LLQvNC10YHRgtC+INC/0L7QstGC0L7RgNC90L7Qs9C+INC60LvQvtC90LjRgNC+0LLQsNC90LjRjyDQuNC3XG4gICRyZWFscmVwb1xu0YLQviDQuNGB0L/QvtC70YzQt9GD0LnRgtC1INC/0LDRgNCw0LzQtdGC0YAgwqstLWZvcmNlwrsuINCV0YHQu9C4INC20LUg0LvQvtC60LDQu9GM0L3Ri9C5INC60LDRgtCw0LvQvtCzIGdpdCDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0L3Rg9C20L3Ri9C8INGA0LXQv9C+0LfQuNGC0L7RgNC40LXQvCDQuNC70Lgg0LXRgdC70Lgg0LLRiyDQvdC1INGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0Y3RgtC+INC30L3QsNGH0LjRgiwg0YLQviDRg9C60LDQttC40YLQtSDQtNGA0YPQs9C+0LUg0LjQvNGPINC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0YEg0L/QvtC80L7RidGM0Y4g0L/QsNGA0LDQvNC10YLRgNCwIMKrLS1uYW1lwrsuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4NgorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnJHNtX25hbWUnLiIKK21zZ3N0ciAi0JLQvtGB0YHRgtCw0L3QvtCy0LvQtdC90LjQtSDQu9C+0LrQsNC70YzQvdC+0LPQviDQutCw0YLQsNC70L7Qs9CwIGdpdCDQtNC70Y8g0L/QvtC00LzQvtC00YPQu9GPIMKrJHNtX25hbWXCuy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjk4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQutC70Y7Rh9C40YLRjNGB0Y8g0L3QsCDRgdC+0YHRgtC+0Y/QvdC40LUg0YMg0L/QvtC00LzQvtC00YPQu9GPIMKrJHNtX3BhdGjCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgItCh0LHQvtC5INC00L7QsdCw0LLQu9C10L3QuNGPINC/0L7QtNC80L7QtNGD0LvRjyDCqyRzbV9wYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNGA0LXQs9C40YHRgtGA0LjRgNC+0LLQsNGC0Ywg0L/QvtC00LzQvtC00YPQu9GMIMKrJHNtX3BhdGjCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDRgtC10LrRg9GJ0YPRjiDRgNC10LTQsNC60YbQuNGOINC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0L/QviDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU4MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMINC40LfQstC70LXRh9C10L3QuNC1INC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0L/QviDQv9GD0YLQuCDCqyRzbV9wYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTg4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZpbmQgY3VycmVudCAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0gcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggIgorIickc21fcGF0aCciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDRgtC10LrRg9GJ0YPRjiDRgNC10LTQsNC60YbQuNGOICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSDQtNC70Y8g0L/QvtC00LzQvtC00YPQu9GPINC/0L4g0L/Rg9GC0Lggwqskc21fcGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYwNgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzsgdHJ5aW5nIHRvIGRpcmVjdGx5IGZldGNoICIKKyIkc2hhMToiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJGZXRjaGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnLCBidXQgaXQgZGlkIG5vdCBjb250YWluICRzaGExLiAiCisiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iCittc2dzdHIgItCf0L7Qu9GD0YfQtdC9INC/0L4g0L/Rg9GC0Lgg0L/QvtC00LzQvtC00YPQu9GPIMKrJGRpc3BsYXlwYXRowrssINC90L4g0L3QtSDRgdC+0LTQtdGA0LbQuNGCICRzaGExLiDQodCx0L7QuSDQv9GA0Lgg0L/RgNGP0LzQvtC8INC/0L7Qu9GD0YfQtdC90LjQuCDQutC+0LzQvNC40YLQsC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjE5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC60LvRjtGH0LjRgtGM0YHRjyDQvdCwINGB0L7RgdGC0L7Rj9C90LjQtSDCqyRzaGExwrsg0LTQu9GPINC/0L7QtNC80L7QtNGD0LvRjyDQv9C+INC/0YPRgtC4IMKrJGRpc3BsYXlwYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjIwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAi0J/QvtC00LzQvtC00YPQu9GMINC/0L4g0L/Rg9GC0LggwqskZGlzcGxheXBhdGjCuzog0LfQsNCx0YDQsNC90L4g0YHQvtGB0YLQvtGP0L3QuNC1IMKrJHNoYTHCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC80LXRgdGC0LjRgtGMIMKrJHNoYTHCuyDQtNC70Y8g0L/QvtC00LzQvtC00YPQu9GPINC/0L4g0L/Rg9GC0LggwqskZGlzcGxheXBhdGjCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAi0J/QvtC00LzQvtC00YPQu9GMINC/0L4g0L/Rg9GC0LggwqskZGlzcGxheXBhdGjCuzog0L/QtdGA0LXQvNC10YnQtdC9INC90LDQtCDCqyRzaGExwrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywg0YHQu9C40Y/QvdC40LUg0YEgwqskc2hhMcK7INC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0L/QviDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICLQn9C+0LTQvNC+0LTRg9C70Ywg0L/QviDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7OiDRgdC70LjRgtC+INGBIMKrJHNoYTHCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBvZiAnJGNvbW1hbmQgJHNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi0KHQsdC+0Lkg0LLRi9C/0L7Qu9C90LXQvdC40Y8gwqskY29tbWFuZCAkc2hhMcK7INC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0L/QviDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNworIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6ICckY29tbWFuZCAkc2hhMSciCittc2dzdHIgItCf0L7QtNC80L7QtNGD0LvRjCDQv9C+INC/0YPRgtC4IMKrJGRpc3BsYXlwYXRowrs6IMKrJGNvbW1hbmQgJHNoYTHCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMINGA0LXQutGD0YDRgdC40LLQvdC+INC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0L/QviDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjgzMAorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgItCe0L/RhtC40Y4gLS1jYWNoZWQg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0YEg0L7Qv9GG0LjQtdC5IC0tZmlsZXMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODgyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG1vZGUgJG1vZF9kc3QiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdGL0Lkg0YDQtdC20LjQvCAkbW9kX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX3NyYyIKK21zZ3N0ciAiICDQn9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiAkZGlzcGxheV9uYW1lINC90LUg0YHQvtC00LXRgNC20LjRgiDQutC+0LzQvNC40YIgJHNoYTFfc3JjIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgINCf0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6ICRkaXNwbGF5X25hbWUg0L3QtSDRgdC+0LTQtdGA0LbQuNGCINC60L7QvNC80LjRgiAkc2hhMV9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiAg0J/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtTogJGRpc3BsYXlfbmFtZSDQvdC1INGB0L7QtNC10YDQttC40YIg0LrQvtC80LzQuNGC0YsgJHNoYTFfc3JjINC4ICRzaGExX2RzdCIKKworIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU2VlIGdpdC0ke2NtZH0oMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICLQlNC70Y8g0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQuCwg0YHQvNC+0YLRgNC40YLQtSBnaXQtJHtjbWR9KDEpLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNpbmcgKCRuZXdfY291bnQvJHRvdGFsKSIKK21zZ3N0ciAi0J/QtdGA0LXQvNC10YnQtdC90LjQtSAoJG5ld19jb3VudC8kdG90YWwpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTUyCittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiXG7QmtC+0LzQsNC90LTRizpcbnAsIHBpY2sgPNC60L7QvNC80LjRgj4gPSDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LrQvtC80LzQuNGCXG5yLCByZXdvcmQgPNC60L7QvNC80LjRgj4gPSDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LrQvtC80LzQuNGCLCDQvdC+INC40LfQvNC10L3QuNGC0Ywg0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwXG5lLCBlZGl0IDzQutC+0LzQvNC40YI+ID0g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC60L7QvNC80LjRgiwg0L3QviDQvtGB0YLQsNC90L7QstC40YLRjNGB0Y8g0LTQu9GPINC40YHQv9GA0LDQstC70LXQvdC40Y9cbnMsIHNxdWFzaCA80LrQvtC80LzQuNGCPiA9INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQutC+0LzQvNC40YIsINC90L4g0L7QsdGK0LXQtNC40L3QuNGC0Ywg0YEg0L/RgNC10LTRi9C00YPRidC40Lwg0LrQvtC80LzQuNGC0L7QvFxuZiwgZml4dXAgPNC60L7QvNC80LjRgj4gPSDQutCw0LogwqtzcXVhc2jCuywg0L3QviDQv9GA0L7Qv9GD0YHRgtC40YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LBcbngsIGV4ZWMgPNC60L7QvNCw0L3QtNCwPiA9INCy0YvQv9C+0LvQvdC40YLRjCDQutC+0LzQsNC90LTRgyAo0L7RgdGC0LDRgtC+0Log0YHRgtGA0L7QutC4KSDRgSDQv9C+0LzQvtGJ0YzRjiDQutC+0LzQsNC90LTQvdC+0Lkg0L7QsdC+0LvQvtGH0LrQuFxuZCwgZHJvcCA80LrQvtC80LzQuNGCPiA9INGD0LTQsNC70LjRgtGMINC60L7QvNC80LjRglxubCwgbGFiZWwgPNC80LXRgtC60LA+ID0g0LTQsNGC0Ywg0LjQvNGPINGC0LXQutGD0YnQtdC80YMgSEVBRFxudCwgcmVzZXQgPNC80LXRgtC60LA+ID0g0YHQsdGA0L7RgdC40YLRjCBIRUFEINC6INGD0LrQsNC30LDQvdC90L7QuSDQvNC10YLQutC1XG5tLCBtZXJnZSBbLUMgPNC60L7QvNC80LjRgj4gfCAtYyA80LrQvtC80LzQuNGCPl0gPNC80LXRgtC60LA+IFsjIDzRgdGC0YDQvtC60LA+XVxuLiDRgdC+0LfQtNCw0YLRjCDRgdC70LjRj9C90LjQtSDQuNGB0L/QvtC70YzQt9GD0Y8g0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwINC+0YDQuNCz0LjQvdCw0LvRjNC90L7Qs9C+XG4uINGB0LvQuNGP0L3QuNGPICjQuNC70Lgg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGD0LrQsNC30LDQvdC90YPRjiDRgdGC0YDQvtC60YMsINC10YHQu9C4INC+0YDQuNCz0LjQvdCw0LvRjNC90L7QtVxuLiDRgdC70LjRj9C90LjQtSDQvdC1INGD0LrQsNC30LDQvdC+KS4g0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSAtYyA80LrQvtC80LzQuNGCPiDRh9GC0L7QsdGLINC40LfQvNC10L3QuNGC0Yxcbi4g0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwLlxuXG7QrdGC0Lgg0YHRgtGA0L7QutC4INC80L7QttC90L4g0L/QtdGA0LXQvNC10YnQsNGC0Yw7INC+0L3QuCDQsdGD0LTRg9GCINCy0YvQv9C+0LvQvdC10L3RiyDRgdCy0LXRgNGF0YMg0LLQvdC40LcuXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAi0KLQtdC/0LXRgNGMINCy0Ysg0LzQvtC20LXRgtC1INC40YHQv9GA0LDQstC40YLRjCDQutC+0LzQvNC40YIg0YEg0L/QvtC80L7RidGM0Y5cblxuXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcblxu0JrQsNC6INGC0L7Qu9GM0LrQviDQstGLINCx0YPQtNC10YLQtSDQtNC+0LLQvtC70YzQvdGLINGA0LXQt9GD0LvRjNGC0LDRgtC+0LwsINC30LDQv9GD0YHRgtC40YLQtVxuXG5cdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjI0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiJHNoYTE6IG5vdCBhIGNvbW1pdCB0aGF0IGNhbiBiZSBwaWNrZWQiCittc2dzdHIgIiRzaGExOiDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LrQvtC80LzQuNGC0L7QvCwg0LrQvtGC0L7RgNGL0Lkg0LzQvtC20L3QviDQstC30Y/RgtGMIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Mjc5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKK21zZ3N0ciAi0J3QtdC00L7Qv9GD0YHRgtC40LzQvtC1INC40LzRjyDQutC+0LzQvNC40YLQsDogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozMDkKK21zZ2lkICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0LfQsNC80LXQvdGDIHNoYTEg0YLQtdC60YPRidC10LPQviDQutC+0LzQvNC40YLQsCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjM2MAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICLQn9C10YDQtdC80L7RgtC60LAg0LLQv9C10YDQtdC0INC00L4gJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozNjIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQvNC+0YLQsNGC0Ywg0LLQv9C10YDQtdC0INC00L4gJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozNzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBtb3ZlIEhFQUQgdG8gJGZpcnN0X3BhcmVudCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC80LXRgdGC0LjRgtGMIEhFQUQg0L3QsCAkZmlyc3RfcGFyZW50IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Mzc2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBzcXVhc2ggYSBtZXJnZTogJHNoYTEiCittc2dzdHIgItCd0LXQu9GM0LfRjyDRg9C/0LvQvtGC0L3QuNGC0Ywg0YHQu9C40Y/QvdC40LU6ICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Mzk0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWRvaW5nIG1lcmdlICRzaGExIgorbXNnc3RyICLQntGI0LjQsdC60LAg0L/RgNC4INC/0L7QstGC0L7RgNC10L3QuNC4INGB0LvQuNGP0L3QuNGPICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDAzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGljayAkc2hhMSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstC30Y/RgtGMICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJHtufToiCittc2dzdHIgItCt0YLQviDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0L3QvtC80LXRgCAjJHtufToiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJHtufSB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICLQodC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0L3QvtC80LXRgCAjJHtufSDQsdGD0LTQtdGCINC/0YDQvtC/0YPRidC10L3QvjoiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0LiIKK21zZ2lkX3BsdXJhbCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXRzLiIKK21zZ3N0clswXSAi0K3RgtC+INC+0LHRitC10LTQuNC90LXQvdC40LUgJGNvdW50INC60L7QvNC80LjRgtCwIgorbXNnc3RyWzFdICLQrdGC0L4g0L7QsdGK0LXQtNC40L3QtdC90LjQtSAkY291bnQg0LrQvtC80LzQuNGC0L7QsiIKK21zZ3N0clsyXSAi0K3RgtC+INC+0LHRitC10LTQuNC90LXQvdC40LUgJGNvdW50INC60L7QvNC80LjRgtC+0LIiCittc2dzdHJbM10gItCt0YLQviDQvtCx0YrQtdC00LjQvdC10L3QuNC1ICRjb3VudCDQutC+0LzQvNC40YLQvtCyIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgJGZpeHVwX21zZyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMICRmaXh1cF9tc2ciCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NDAKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgMiBjb21taXRzLiIKK21zZ3N0ciAi0K3RgtC+INC+0LHRitC10LTQuNC90LXQvdC40LUgMiDQutC+0LzQvNC40YLQvtCyIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDgxIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1MjQKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1MjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAkc2hhMS4uLiAkcmVzdCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0LjQvNC10L3QuNGC0YwgJHNoYTHigKYgJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1NTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgYW1lbmQgY29tbWl0IGFmdGVyIHN1Y2Nlc3NmdWxseSBwaWNraW5nICRzaGExLi4uICRyZXN0XG4iCisiVGhpcyBpcyBtb3N0IGxpa2VseSBkdWUgdG8gYW4gZW1wdHkgY29tbWl0IG1lc3NhZ2UsIG9yIHRoZSBwcmUtY29tbWl0IGhvb2tcbiIKKyJmYWlsZWQuIElmIHRoZSBwcmUtY29tbWl0IGhvb2sgZmFpbGVkLCB5b3UgbWF5IG5lZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUgYmVmb3JlXG4iCisieW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNGB0L/RgNCw0LLQuNGC0Ywg0LrQvtC80LzQuNGCINC/0L7RgdC70LUg0YPRgdC/0LXRiNC90L7Qs9C+INC/0LXRgNC10YXQvtC00LAg0L3QsCAkc2hhMeKApiAkcmVzdFxu0K3RgtC+INC/0YDQvtC40LfQvtGI0LvQviwg0YHQutC+0YDQtdC1INCy0YHQtdCz0L4sINC40Lct0LfQsCDQv9GD0YHRgtC+0LPQviDRgdC+0L7QsdGJ0LXQvdC40Y8g0LrQvtC80LzQuNGC0LAg0LjQu9C4INC40Lct0LfQsCDQv9C10YDQtdGF0LLQsNGC0YfQuNC60LAg0L/QtdGA0LXQtCDQutC+0LzQvNC40YLQvtC8LiDQldGB0LvQuCDQttC1INGN0YLQviDQv9GA0L7QuNC30L7RiNC70L4g0LjQty3Qt9CwINC/0LXRgNC10YXQstCw0YLRh9C40LrQsCDQv9C10YDQtdC0INC60L7QvNC80LjRgtC+0LwsINGC0L4g0LLQsNC8INC90YPQttC90L4g0YDQtdGI0LjRgtGMINGBINC90LjQvCDQv9GA0L7QsdC70LXQvNGDINC4INC/0L7QstGC0L7RgNC40YLRjCDQv9C+0L/Ri9GC0LrRgyDRgdC90L7QstCwLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCittc2dzdHIgItCe0YHRgtCw0L3QvtCy0LvQtdC90L4g0L3QsCAkc2hhMV9hYmJyZXbigKYgJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1ODYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAnJHNxdWFzaF9zdHlsZScgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINGB0LTQtdC70LDRgtGMIMKrJHNxdWFzaF9zdHlsZcK7INCx0LXQtyDRg9C60LDQt9Cw0L3QuNGPINC/0YDQtdC00YvQtNGD0YnQtdCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZzogJHJlc3QiCittc2dzdHIgItCS0YvQv9C+0LvQvdC10L3QuNC1OiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIGZhaWxlZDogJHJlc3QiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMOiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYzOAorbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLQuCDQsdGL0LvQuCDRgdC00LXQu9Cw0L3RiyDQuNC30LzQtdC90LXQvdC40Y8g0LIg0LjQvdC00LXQutGB0LUg0Lgv0LjQu9C4INCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2NDAKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICLQktGLINC80L7QttC10YLQtSDQuNGB0L/RgNCw0LLQuNGC0Ywg0L7RiNC40LHQutGDLCDQsCDQt9Cw0YLQtdC8INC30LDQv9GD0YHRgtC40YLRjFxuXG5cdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIy4gVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2NTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gc3VjY2VlZGVkOiAkcmVzdFxuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgItCj0YHQv9C10YjQvdC+0LUg0LLRi9C/0L7Qu9C90LXQvdC40LU6ICRyZXN0XG7QvdC+INC+0YHRgtCw0LvQuNGB0Ywg0LjQt9C80LXQvdC10L3QuNGPINCyINC40L3QtNC10LrRgdC1INC4L9C40LvQuCDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1XG7QodC00LXQu9Cw0LnRgtC1INC60L7QvNC80LjRgiDQuNC70Lgg0YHQv9GA0Y/Rh9GM0YLQtSDQstCw0YjQuCDQuNC30LzQtdC90LXQvdC40Y8sINCwINC30LDRgtC10Lwg0LLRi9C/0L7Qu9C90LjRgtC1XG5cblx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjY0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1hbmQ6ICRjb21tYW5kICRzaGExICRyZXN0IgorbXNnc3RyICLQndC10L7Qv9C+0LfQvdCw0L3QvdCw0Y8g0LrQvtC80LDQvdC00LA6ICRjb21tYW5kICRzaGExICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjY1Cittc2dpZCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgItCf0L7QttCw0LvRg9C50YHRgtCwINC40YHQv9GA0LDQstGM0YLQtSDRjdGC0L4g0YEg0L/QvtC80L7RidGM0Y4gwqtnaXQgcmViYXNlIC0tZWRpdC10b2RvwrsuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCAkaGVhZF9uYW1lLiIKK21zZ3N0ciAi0KPRgdC/0LXRiNC90L4g0L/QtdGA0LXQvNC10YnRkdC9INC4INC+0LHQvdC+0LLQu9GR0L0gJGhlYWRfbmFtZS4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NTcKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0YwgQ0hFUlJZX1BJQ0tfSEVBRCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc2MgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlXG4iCisic3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAi0KMg0LLQsNGBINC40LzQtdGO0YLRgdGPINC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtS5cbtCV0YHQu9C4INGN0YLQuCDQuNC30LzQtdC90LXQvdC40Y8g0LTQvtC70LbQvdGLINCx0YvRgtGMINC+0LHRitC10LTQtdC90LXQvdGLINGBINC/0YDQtdC00YvQtNGD0YnQuNC8INC60L7QvNC80LjRgtC+0LwsINGC0L4g0LfQsNC/0YPRgdGC0LjRgtC1OlxuXG4gIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuXG7QldGB0LvQuCDQttC1INC+0L3QuCDQtNC+0LvQttC90Ysg0LHRi9GC0Ywg0L/QvtC80LXRidC10L3RiyDQsiDQvdC+0LLRi9C5INC60L7QvNC80LjRgiwg0YLQviDQt9Cw0L/Rg9GB0YLQuNGC0LU6XG5cbiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuXG7QkiDQu9GO0LHQvtC8INGB0LvRg9GH0LDQtSwg0L/QvtGB0LvQtSDRgtC+0LPQviDQutCw0Log0LLRiyDQt9Cw0LrQvtC90YfQuNGC0LUsINC/0YDQvtC00L7Qu9C20LjRgtGMINC/0LXRgNC10LzQtdGJ0LXQvdC40LUg0LzQvtC20L3QviDQstGL0L/QvtC70L3QuNCyOlxuXG4gIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Nzc5Cittc2dpZCAiRXJyb3IgdHJ5aW5nIHRvIGZpbmQgdGhlIGF1dGhvciBpZGVudGl0eSB0byBhbWVuZCBjb21taXQiCittc2dzdHIgItCf0YDQvtC40LfQvtGI0LvQsCDQvtGI0LjQsdC60LAg0L/RgNC4INC/0L7QuNGB0LrQtSDQsNCy0YLQvtGA0LAg0LTQu9GPINC40YHQv9GA0LDQstC70LXQvdC40Y8g0LrQvtC80LzQuNGC0LAiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3ODQKK21zZ2lkICIiCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAi0KMg0LLQsNGBINC40LzQtdGO0YLRgdGPINC90LXQt9Cw0LrQvtC80LzQuNGH0LXQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtS4g0KHQtNC10LvQsNC50YLQtSDQutC+0LzQvNC40YIsINCwINC30LDRgtC10Lwg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IHJlYmFzZSAtLWNvbnRpbnVlwrsg0YHQvdC+0LLQsC4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3ODkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc5MworbXNnaWQgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQutC+0LzQvNC40YLQuNGC0Ywg0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MjQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkxMAorbXNnaWQgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/Rg9GB0YLQuNGC0Ywg0YDQtdC00LDQutGC0L7RgCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0NQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQudGC0Lgg0L3QsCDQstC10YDRgdC40Y4gJHN3aXRjaF90byIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg1MgorbXNnaWQgIk5vIEhFQUQ/IgorbXNnc3RyICLQndC10YIg0YPQutCw0LfQsNGC0LXQu9GPIEhFQUQ/IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAkc3RhdGVfZGlyIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINCy0YDQtdC80LXQvdC90YvQuSDQutCw0YLQsNC70L7QsyAkc3RhdGVfZGlyIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODU2Cittc2dpZCAiQ291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC80LXRgtC40YLRjCDQutCw0Log0LjQvdGC0LXRgNCw0LrRgtC40LLQvdGL0LkiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4ODgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmQpIgorbXNnaWRfcGx1cmFsICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kcykiCittc2dzdHJbMF0gItCf0LXRgNC10LzQtdGJ0LXQvdC40LUgJHNob3J0cmV2aXNpb25zINC90LDQtCAkc2hvcnRvbnRvICgkdG9kb2NvdW50INC60L7QvNCw0L3QtNCwKSIKK21zZ3N0clsxXSAi0J/QtdGA0LXQvNC10YnQtdC90LjQtSAkc2hvcnRyZXZpc2lvbnMg0L3QsNC0ICRzaG9ydG9udG8gKCR0b2RvY291bnQg0LrQvtC80LDQvdC00YspIgorbXNnc3RyWzJdICLQn9C10YDQtdC80LXRidC10L3QuNC1ICRzaG9ydHJldmlzaW9ucyDQvdCw0LQgJHNob3J0b250byAoJHRvZG9jb3VudCDQutC+0LzQsNC90LQpIgorbXNnc3RyWzNdICLQn9C10YDQtdC80LXRidC10L3QuNC1ICRzaG9ydHJldmlzaW9ucyDQvdCw0LQgJHNob3J0b250byAoJHRvZG9jb3VudCDQutC+0LzQsNC90LQpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTQyIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDcKK21zZ2lkICJDb3VsZCBub3QgaW5pdCByZXdyaXR0ZW4gY29tbWl0cyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0YLRjCDQv9C10YDQtdC30LDQv9C40YHQsNC90L3Ri9C1INC60L7QvNC80LjRgtGLIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6ODkgZ2l0LXNoLXNldHVwLnNoOjk0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJGRhc2hsZXNzICRVU0FHRSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LU6ICRkYXNobGVzcyAkVVNBR0UiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoxOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBjaGRpciB0byAkY2R1cCwgdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIGNoZGlyINCyICRjZHVwLCDQstC10YDRiNC40L3RgyDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMDAgZ2l0LXNoLXNldHVwLnNoOjIwNworIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6ICRwcm9ncmFtX25hbWUgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgItC60YDQuNGC0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwOiAkcHJvZ3JhbV9uYW1lINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L3QtSDQuNC80LXRjyDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjIxCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMINC/0LXRgNC10LzQtdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0L7Qsjog0KMg0LLQsNGBINC10YHRgtGMINC90LXQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNAorbXNnaWQgIkNhbm5vdCByZXdyaXRlIGJyYW5jaGVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywg0L/QtdGA0LXQt9Cw0L/QuNGB0Ywg0LLQtdGC0L7Qujog0KMg0LLQsNGBINC10YHRgtGMINC90LXQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNworbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINGBINC/0LXRgNC10LzQtdGJ0LXQvdC40LXQvDog0KMg0LLQsNGBINC10YHRgtGMINC90LXQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICRhY3Rpb246IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCAkYWN0aW9uOiDQoyDQstCw0YEg0LXRgdGC0Ywg0L3QtdC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQzCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywg0L/QtdGA0LXQvNC10YnQtdC90LjQtSDQutC+0LzQvNC40YLQvtCyOiDQkiDQstCw0YjQtdC8INC40L3QtNC10LrRgdC1INC10YHRgtGMINC90LXQt9Cw0LrQvtC80LzQuNGH0LXQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ2Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDRgSDQv9C10YDQtdC80LXRidC10L3QuNC10Lw6INCSINCy0LDRiNC10Lwg0LjQvdC00LXQutGB0LUg0LXRgdGC0Ywg0L3QtdC30LDQutC+0LzQvNC40YfQtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCAkYWN0aW9uOiDQkiDQstCw0YjQtdC8INC40L3QtNC10LrRgdC1INC10YHRgtGMINC90LXQt9Cw0LrQvtC80LzQuNGH0LXQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjUzCittc2dpZCAiQWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLQmiDRgtC+0LzRgyDQttC1LCDQsiDQstCw0YjQtdC8INC40L3QtNC10LrRgdC1INC10YHRgtGMINC90LXQt9Cw0LrQvtC80LzQuNGH0LXQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MzczCittc2dpZCAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAi0JLQsNC8INC90YPQttC90L4g0LfQsNC/0YPRgdC60LDRgtGMINGN0YLRgyDQutC+0LzQsNC90LTRgyDQvdCw0YXQvtC00Y/RgdGMINC90LAg0LLQtdGA0YjQuNC90LUg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3OAorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgYWJzb2x1dGUgcGF0aCBvZiBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0L/RgNC10LTQtdC70LjRgtGMINCw0LHRgdC+0LvRjtGC0L3Ri9C5INC/0YPRgtGMINC6INC60LDRgtCw0LvQvtCz0YMgZ2l0IgorCisjLiBUUkFOU0xBVE9SUzogeW91IGNhbiBhZGp1c3QgdGhpcyB0byBhbGlnbiAiZ2l0IGFkZCAtaSIgc3RhdHVzIG1lbnUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTk2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiUxMnMgJTEycyAlcyIKK21zZ3N0ciAiJTEycyAlMTJzICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE5NworbXNnaWQgInN0YWdlZCIKK21zZ3N0ciAi0LIg0LjQvdC00LXQutGB0LUiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTk3Cittc2dpZCAidW5zdGFnZWQiCittc2dzdHIgItC90LUg0LIg0LjQvdC00LXQutGB0LUiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjUzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjc4Cittc2dpZCAiYmluYXJ5IgorbXNnc3RyICLQtNCy0L7QuNGH0L3Ri9C5IgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMxNgorbXNnaWQgIm5vdGhpbmciCittc2dzdHIgItC90LjRh9C10LPQviIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyOTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMTMKK21zZ2lkICJ1bmNoYW5nZWQiCittc2dzdHIgItC90LXRgiDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjA5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImFkZGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAiYWRkZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi0LTQvtCx0LDQstC70LXQvSAlZCDQv9GD0YLRjFxuIgorbXNnc3RyWzFdICLQtNC+0LHQsNCy0LvQtdC90L4gJWQg0L/Rg9GC0LhcbiIKK21zZ3N0clsyXSAi0LTQvtCx0LDQstC70LXQvdC+ICVkINC/0YPRgtC10LlcbiIKK21zZ3N0clszXSAi0LTQvtCx0LDQstC70LXQvdC+ICVkINC/0YPRgtC4XG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVwZGF0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ1cGRhdGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gItC+0LHQvdC+0LLQu9GR0L0gJWQg0L/Rg9GC0YxcbiIKK21zZ3N0clsxXSAi0L7QsdC90L7QstC70LXQvdC+ICVkINC/0YPRgtC4XG4iCittc2dzdHJbMl0gItC+0LHQvdC+0LLQu9C10L3QviAlZCDQv9GD0YLQtdC5XG4iCittc2dzdHJbM10gItC+0LHQvdC+0LLQu9C10L3QviAlZCDQv9GD0YLQuFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYxNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJyZXZlcnRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInJldmVydGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gItC+0LHRgNCw0YnQtdC90Ysg0LjQt9C80LXQvdC10L3QuNGPICVkINC/0YPRgtC4XG4iCittc2dzdHJbMV0gItC+0LHRgNCw0YnQtdC90Ysg0LjQt9C80LXQvdC10L3QuNGPICVkINC/0YPRgtC10LlcbiIKK21zZ3N0clsyXSAi0L7QsdGA0LDRidC10L3RiyDQuNC30LzQtdC90LXQvdC40Y8gJWQg0L/Rg9GC0LXQuVxuIgorbXNnc3RyWzNdICLQvtCx0YDQsNGJ0LXQvdGLINC40LfQvNC10L3QtdC90LjRjyAlZCDQv9GD0YLQtdC5XG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInRvdWNoZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ0b3VjaGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gItGC0YDQvtC90YPRgiAlZCDQv9GD0YLRjFxuIgorbXNnc3RyWzFdICLRgtGA0L7QvdGD0YLRiyAlZCDQv9GD0YLQuFxuIgorbXNnc3RyWzJdICLRgtGA0L7QvdGD0YLRiyAlZCDQv9GD0YLQtdC5XG4iCittc2dzdHJbM10gItGC0YDQvtC90YPRgtGLICVkINC/0YPRgtC4XG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI3Cittc2dpZCAiVXBkYXRlIgorbXNnc3RyICLQntCx0L3QvtCy0LjRgtGMIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzOQorbXNnaWQgIlJldmVydCIKK21zZ3N0ciAi0J7QsdGA0LDRgtC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjYyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIm5vdGU6ICVzIGlzIHVudHJhY2tlZCBub3cuXG4iCittc2dzdHIgItC/0YDQuNC80LXRh9Cw0L3QuNC1OiAlcyDRgtC10L/QtdGA0Ywg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C5LlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY3MworbXNnaWQgIkFkZCB1bnRyYWNrZWQiCittc2dzdHIgItCU0L7QsdCw0LLQuNGC0Ywg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C5IgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY3OQorbXNnaWQgIk5vIHVudHJhY2tlZCBmaWxlcy5cbiIKK21zZ3N0ciAi0J3QtdGCINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRhNCw0LnQu9C+0LIuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTAzMworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy4iCittc2dzdHIgItCV0YHQu9C4INC/0LDRgtGHINC/0YDQuNC80LXQvdGP0LXRgtGB0Y8g0LHQtdC3INC+0YjQuNCx0L7Quiwg0YLQviDQuNC30LzQtdC90ZHQvdC90YvQuSDQsdC70L7QuiDQsdGD0LTQtdGCINGB0YDQsNC30YMg0L/QvtC80LXRh9C10L0g0LTQu9GPINC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC40Y8uIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwMzYKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YXNoaW5nLiIKK21zZ3N0ciAi0JXRgdC70Lgg0L/QsNGC0Ycg0L/RgNC40LzQtdC90Y/QtdGC0YHRjyDQsdC10Lcg0L7RiNC40LHQvtC6LCDRgtC+INC40LfQvNC10L3RkdC90L3Ri9C5INCx0LvQvtC6INCx0YPQtNC10YIg0YHRgNCw0LfRgyDQv9C+0LzQtdGH0LXQvSDQtNC70Y8g0L/RgNGP0YLQsNC90YzRjy4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTAzOQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgdW5zdGFnaW5nLiIKK21zZ3N0ciAi0JXRgdC70Lgg0L/QsNGC0Ycg0L/RgNC40LzQtdC90Y/QtdGC0YHRjyDQsdC10Lcg0L7RiNC40LHQvtC6LCDRgtC+INC40LfQvNC10L3RkdC90L3Ri9C5INCx0LvQvtC6INCx0YPQtNC10YIg0YHRgNCw0LfRgyDQv9C+0LzQtdGH0LXQvSDQtNC70Y8g0YPQsdC40YDQsNC90LjRjyDQuNC3INC40L3QtNC10LrRgdCwLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDQyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1MQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgYXBwbHlpbmcuIgorbXNnc3RyICLQldGB0LvQuCDQv9Cw0YLRhyDQv9GA0LjQvNC10L3Rj9C10YLRgdGPINCx0LXQtyDQvtGI0LjQsdC+0LosINGC0L4g0LjQt9C80LXQvdGR0L3QvdGL0Lkg0LHQu9C+0Log0LHRg9C00LXRgiDRgdGA0LDQt9GDINC/0L7QvNC10YfQtdC9INC00LvRjyDQv9GA0LjQvNC10L3QtdC90LjRjy4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA0NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNDgKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGRpc2NhcmRpbmcuIgorbXNnc3RyICLQldGB0LvQuCDQv9Cw0YLRhyDQv9GA0LjQvNC10L3Rj9C10YLRgdGPINCx0LXQtyDQvtGI0LjQsdC+0LosINGC0L4g0LjQt9C80LXQvdGR0L3QvdGL0Lkg0LHQu9C+0Log0LHRg9C00LXRgiDRgdGA0LDQt9GDINC/0L7QvNC10YfQtdC9INC00LvRjyDQvtGC0LzQtdC90Ysg0LjQt9C80LXQvdC10L3QuNC5LiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDg1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRhNCw0LnQuyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINCx0LvQvtC60LAg0LjQt9C80LXQvdC10L3QuNC5INC00LvRjyDQt9Cw0L/QuNGB0Lg6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwODYKK21zZ2lkICJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgYSBxdWljayBndWlkZS5cbiIKK21zZ3N0ciAi0KDRg9GH0L3QvtC5INGA0LXQttC40Lwg0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDQsdC70L7QutCwINC40LfQvNC10L3QtdC90LjQuSDigJQg0YHQvNC+0YLRgNC40YLQtSDQvdC40LbQtSDQtNC70Y8g0L3QtdCx0L7Qu9GM0YjQvtCz0L4g0YDRg9C60L7QstC+0LTRgdGC0LLQsC5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDkyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJXMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICItLS1cbtCn0YLQvtCx0Ysg0YPQtNCw0LvQuNGC0Ywgwqslc8K7INGB0YLRgNC+0LrQuCwg0YHQtNC10LvQsNC50YLQtSDQuNGFICcgJyDRgdGC0YDQvtC60LDQvNC4ICjQutC+0L3RgtC10LrRgdGCKS5cbtCn0YLQvtCx0Ysg0YPQtNCw0LvQuNGC0Ywgwqslc8K7INGB0YLRgNC+0LrQuCwg0YPQtNCw0LvQuNGC0LUg0LjRhS5cbtCh0YLRgNC+0LrQuCwg0L3QsNGH0LjQvdCw0Y7RidC40LXRgdGPINGBICVzINCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90YsuXG4iCisKKyMuIFRSQU5TTEFUT1JTOiAnaXQnIHJlZmVycyB0byB0aGUgcGF0Y2ggbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBtZXNzYWdlcy4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTEwMAorbXNnaWQgIiIKKyJJZiBpdCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCB5b3Ugd2lsbCBiZSBnaXZlbiBhbiBvcHBvcnR1bml0eSB0b1xuIgorImVkaXQgYWdhaW4uICBJZiBhbGwgbGluZXMgb2YgdGhlIGh1bmsgYXJlIHJlbW92ZWQsIHRoZW4gdGhlIGVkaXQgaXNcbiIKKyJhYm9ydGVkIGFuZCB0aGUgaHVuayBpcyBsZWZ0IHVuY2hhbmdlZC5cbiIKK21zZ3N0ciAi0JXRgdC70Lgg0L/QsNGC0Ycg0L3QtSDQv9GA0LjQvNC10L3Rj9C10YLRgdGPINCx0LXQtyDQvtGI0LjQsdC+0LosINCy0LDQvCDQsdGD0LTQtdGCINC00LDQvdCwXG7QstC+0LfQvNC+0LbQvdC+0YHRgtGMINC40LfQvNC10L3QuNGC0Ywg0LXQs9C+INGB0L3QvtCy0LAuINCV0YHQu9C4INCy0YHQtSDRgdGC0YDQvtC60Lgg0LHQu9C+0LrQsFxu0LjQt9C80LXQvdC10L3QuNC5INGD0LTQsNC70LXQvdGLLCDRgtC+INGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUg0LHRg9C00LXRgiDQvtGC0LzQtdC90LXQvdC+XG7QuCDQsdC70L7QuiDQvtGB0YLQsNC90LXRgtGB0Y8g0LHQtdC3INC40LfQvNC10L3QtdC90LjQuS5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTE0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciByZWFkaW5nOiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRhNCw0LnQuyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINCx0LvQvtC60LAg0LjQt9C80LXQvdC10L3QuNC5INC00LvRjyDRh9GC0LXQvdC40Y86ICVzIgorCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIy4gQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKyMuIChzYXlpbmcgIm4iIGZvciAibm8iIGRpc2NhcmRzISkgaWYgdGhlIHRyYW5zbGF0aW9uCisjLiBvZiB0aGUgd29yZCAibm8iIGRvZXMgbm90IHN0YXJ0IHdpdGggbi4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIxMworbXNnaWQgIiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/IgorIiAiCittc2dzdHIgItCY0LfQvNC10L3RkdC90L3Ri9C5INCy0LDQvNC4INCx0LvQvtC6INC90LUg0L/RgNC40LzQtdC90Y/QtdGC0YHRjy4g0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0YHQvdC+0LLQsCAo0L7RgtCy0LXRgiDCq3nCuyDQvtC30L3QsNGH0LDQtdGCIMKr0L3QtdGCwrshKSBbeS9uXT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyMjIKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgInkgLSDQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0YLRjCDQsdC70L7QuiDQuNC30LzQtdC90LXQvdC40Llcbm4gLSDQvdC1INC40L3QtNC10LrRgdC40YDQvtCy0LDRgtGMINGN0YLQvtGCINCx0LvQvtC6INC40LfQvNC10L3QtdC90LjQuVxucSAtINCy0YvRhdC+0LQ7INC90LUg0LjQvdC00LXQutGB0LjRgNC+0LLQsNGC0Ywg0Y3RgtC+0YIg0Lgg0L/QvtGB0LvQtdC00YPRjtGJ0LjQtSDQsdC70L7QutC4XG5hIC0g0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNGC0Ywg0Y3RgtC+0YIg0Lgg0LLRgdC1INC/0L7RgdC70LXQtNGD0Y7RidC40LUg0LHQu9C+0LrQuCDRhNCw0LnQu9CwXG5kIC0g0L3QtSDQuNC90LTQtdC60YHQuNGA0L7QstCw0YLRjCDRjdGC0L7RgiDQuCDQv9C+0YHQu9C10LTRg9GO0YnQuNC1INCx0LvQvtC60Lgg0YTQsNC50LvQsCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjI4Cittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICJ5IC0g0YHQv9GA0Y/RgtCw0YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0LHQu9C+0LrQsFxucSAtINCy0YvRhdC+0LQ7INC90LUg0L/RgNGP0YLQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGN0YLQvtCz0L4g0Lgg0L/QvtGB0LvQtdC00YPRjtGJ0LjRhSDQsdC70L7QutC+0LJcbmEgLSDRgdC/0YDRj9GC0LDRgtGMINGN0YLQvtGCINC4INCy0YHQtSDQv9C+0YHQu9C10LTRg9GO0YnQuNC1INCx0LvQvtC60Lgg0YTQsNC50LvQsFxuZCAtINC90LUg0L/RgNGP0YLQsNGC0Ywg0Y3RgtC+0YIg0Lgg0L/QvtGB0LvQtdC00YPRjtGJ0LjQtSDQsdC70L7QutC4INGE0LDQudC70LAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIzNAorbXNnaWQgIiIKKyJ5IC0gdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHVuc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgInkgLSDRg9Cx0YDQsNGC0Ywg0LjQtyDQuNC90LTQtdC60YHQsCDRjdGC0L7RgiDQsdC70L7QuiDQuNC30LzQtdC90LXQvdC40Llcbm4gLSDQvdC1INGD0LHQuNGA0LDRgtGMINC40Lcg0LjQvdC00LXQutGB0LAg0Y3RgtC+0YIg0LHQu9C+0Log0LjQt9C80LXQvdC10L3QuNC5XG5xIC0g0LLRi9GF0L7QtDsg0L3QtSDRg9Cx0LjRgNCw0YLRjCDQuNC3INC40L3QtNC10LrRgdCwINGN0YLQvtGCINC4INC/0L7RgdC70LXQtNGD0Y7RidC40LUg0LHQu9C+0LrQuFxuYSAtINGD0LHRgNCw0YLRjCDQuNC3INC40L3QtNC10LrRgdCwINGN0YLQvtGCINC4INCy0YHQtSDQv9C+0YHQu9C10LTRg9GO0YnQuNC1INCx0LvQvtC60Lgg0YTQsNC50LvQsFxuZCAtINC90LUg0YPQsdC40YDQsNGC0Ywg0LjQtyDQuNC90LTQtdC60YHQsCDRjdGC0L7RgiDQuCDQv9C+0YHQu9C10LTRg9GO0YnQuNC1INCx0LvQvtC60Lgg0YTQsNC50LvQsCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjQwCittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICJ5IC0g0L/RgNC40LzQtdC90LjRgtGMINCx0LvQvtC6INC40LfQvNC10L3QtdC90LjQuSDQuiDQuNC90LTQtdC60YHRg1xubiAtINC90LUg0L/RgNC40LzQtdC90Y/RgtGMINGN0YLQvtGCINCx0LvQvtC6INC40LfQvNC10L3QtdC90LjQuSDQuiDQuNC90LTQtdC60YHRg1xucSAtINCy0YvRhdC+0LQ7INC90LUg0L/RgNC40LzQtdC90Y/RgtGMINGN0YLQvtGCINC4INC/0L7RgdC70LXQtNGD0Y7RidC40LUg0LHQu9C+0LrQuFxuYSAtINC/0YDQuNC80LXQvdC40YLRjCDRjdGC0L7RgiDQsdC70L7QuiDQuCDQstGB0LUg0L/QvtGB0LvQtdC00YPRjtGJ0LjQtSDQsdC70L7QutC4INGE0LDQudC70LBcbmQgLSDQvdC1INC/0YDQuNC80LXQvdGP0YLRjCDRjdGC0L7RgiDQuCDQv9C+0YHQu9C10LTRg9GO0YnQuNC1INCx0LvQvtC60Lgg0YTQsNC50LvQsCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjQ2Cittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgInkgLSDQvtGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDRjdGC0L7Qs9C+INCx0LvQvtC60LAg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtVxubiAtINC90LUg0L7RgtC80LXQvdGP0YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0Y3RgtC+0LPQviDQsdC70L7QutCwINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LVcbnEgLSDQstGL0YXQvtC0OyDQvdC1INC+0YLQvNC10L3Rj9GC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGN0YLQvtCz0L4g0LHQu9C+0LrQsCDQuCDQstGB0LXRhSDQv9C+0YHQu9C10LTRg9GO0YnQuNGFXG5hIC0g0L7RgtC80LXQvdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0Y3RgtC+0LPQviDQuCDQstGB0LXRhSDQv9C+0YHQu9C10LTRg9GO0YnQuNGFINCx0LvQvtC60L7QsiDRhNCw0LnQu9CwXG5kIC0g0L3QtSDQvtGC0LzQtdC90Y/RgtGMINC40LfQvNC10L3QtdC90LjRjyDRjdGC0L7Qs9C+INC4INCy0YHQtdGFINC/0L7RgdC70LXQtNGD0Y7RidC40YUg0LHQu9C+0LrQvtCyINGE0LDQudC70LAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI1MgorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgInkgLSDQvtGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDRjdGC0L7Qs9C+INCx0LvQvtC60LAg0LIg0LjQvdC00LXQutGB0LUg0Lgg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtVxubiAtINC90LUg0L7RgtC80LXQvdGP0YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0Y3RgtC+0LPQviDQsdC70L7QutCwINCyINC40L3QtNC10LrRgdC1INC4INGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LVcbnEgLSDQstGL0YXQvtC0OyDQvdC1INC+0YLQvNC10L3Rj9GC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGN0YLQvtCz0L4g0LHQu9C+0LrQsCDQuCDQstGB0LXRhSDQv9C+0YHQu9C10LTRg9GO0YnQuNGFXG5hIC0g0L7RgtC80LXQvdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0Y3RgtC+0LPQviDQuCDQstGB0LXRhSDQv9C+0YHQu9C10LTRg9GO0YnQuNGFINCx0LvQvtC60L7QsiDRhNCw0LnQu9CwXG5kIC0g0L3QtSDQvtGC0LzQtdC90Y/RgtGMINC40LfQvNC10L3QtdC90LjRjyDRjdGC0L7Qs9C+INC4INCy0YHQtdGFINC/0L7RgdC70LXQtNGD0Y7RidC40YUg0LHQu9C+0LrQvtCyINGE0LDQudC70LAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI1OAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICJ5IC0g0L/RgNC40LzQtdC90LjRgtGMINCx0LvQvtC6INC40LfQvNC10L3QtdC90LjQuSDQuiDQuNC90LTQtdC60YHRgyDQuCDRgNCw0LHQvtGH0LXQvNGDINC60LDRgtCw0LvQvtCz0YNcbm4gLSDQvdC1INC/0YDQuNC80LXQvdGP0YLRjCDRjdGC0L7RgiDQsdC70L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0Log0LjQvdC00LXQutGB0YMg0Lgg0YDQsNCx0L7Rh9C10LzRgyDQutCw0YLQsNC70L7Qs9GDXG5xIC0g0LLRi9GF0L7QtDsg0L3QtSDQv9GA0LjQvNC10L3Rj9GC0Ywg0Y3RgtC+0YIg0Lgg0L/QvtGB0LvQtdC00YPRjtGJ0LjQtSDQsdC70L7QutC4XG5hIC0g0L/RgNC40LzQtdC90LjRgtGMINGN0YLQvtGCINCx0LvQvtC6INC4INCy0YHQtSDQv9C+0YHQu9C10LTRg9GO0YnQuNC1INCx0LvQvtC60Lgg0YTQsNC50LvQsFxuZCAtINC90LUg0L/RgNC40LzQtdC90Y/RgtGMINGN0YLQvtGCINC4INC/0L7RgdC70LXQtNGD0Y7RidC40LUg0LHQu9C+0LrQuCDRhNCw0LnQu9CwIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzMKK21zZ2lkICIiCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgImcgLSDQstGL0LHRgNCw0YLRjCDQsdC70L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L3QsCDQutC+0YLQvtGA0YvQuSDQvdGD0LbQvdC+INC/0LXRgNC10LnRgtC4XG4vIC0g0L/QvtC40YHQuiDQsdC70L7QutCwINC40LfQvNC10L3QtdC90LjQuSDRgSDQv9C+0LzQvtGJ0YzRjiDRgNC10LPRg9C70Y/RgNC90L7Qs9C+INCy0YvRgNCw0LbQtdC90LjRj1xuaiAtINC90LUg0L/RgNC40L3QuNC80LDRgtGMINGA0LXRiNC10L3QuNC1INC/0L4g0Y3RgtC+0LzRgyDQsdC70L7QutGDLCDQv9C10YDQtdC50YLQuCDQvdCwINGB0LvQtdC00YPRjtGJ0LjQuSDQsdC10Lcg0YDQtdGI0LXQvdC40Y9cbkogLSDQvdC1INC/0YDQuNC90LjQvNCw0YLRjCDRgNC10YjQtdC90LjQtSDQv9C+INGN0YLQvtC80YMg0LHQu9C+0LrRgywg0L/QtdGA0LXQudGC0Lgg0L3QsCDRgdC70LXQtNGD0Y7RidC40LlcbmsgLSDQvdC1INC/0YDQuNC90LjQvNCw0YLRjCDRgNC10YjQtdC90LjQtSDQv9C+INGN0YLQvtC80YMg0LHQu9C+0LrRgywg0L/QtdGA0LXQudGC0Lgg0L3QsCDQv9GA0LXQtNGL0LTRg9GJ0LjQuSDQsdC10Lcg0YDQtdGI0LXQvdC40Y9cbksgLSDQvdC1INC/0YDQuNC90LjQvNCw0YLRjCDRgNC10YjQtdC90LjQtSDQv9C+INGN0YLQvtC80YMg0LHQu9C+0LrRgywg0L/QtdGA0LXQudGC0Lgg0L3QsCDQv9GA0LXQtNGL0LTRg9GJ0LjQuVxucyAtINGA0LDQt9C00LXQu9C40YLRjCDRgtC10LrRg9GJ0LjQuSDQsdC70L7QuiDQvdCwINCx0LvQvtC60Lgg0LzQtdC90YzRiNC10LPQviDRgNCw0LfQvNC10YDQsFxuZSAtINCy0YDRg9GH0L3Rg9GOINC+0YLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgtC10LrRg9GJ0LjQuSDQsdC70L7QulxuPyAtINCy0YvQstC10YHRgtC4INGB0L/RgNCw0LLQutGDXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMwNAorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIgorbXNnc3RyICLQktGL0LHRgNCw0L3QvdGL0LUg0LHQu9C+0LrQuCDQvdC1INC/0YDQuNC80LXQvdGP0Y7RgtGB0Y8g0LHQtdC3INC+0YjQuNCx0L7QuiDQuiDQuNC90LTQtdC60YHRgyFcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzA1Cittc2dpZCAiQXBwbHkgdGhlbSB0byB0aGUgd29ya3RyZWUgYW55d2F5PyAiCittc2dzdHIgItCS0YHQtSDRgNCw0LLQvdC+INC/0YDQuNC80LXQvdC40YLRjCDQuNGFINC6INGA0LDQsdC+0YfQtdC80YMg0LrQsNGC0LDQu9C+0LPRgz8iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMwOAorbXNnaWQgIk5vdGhpbmcgd2FzIGFwcGxpZWQuXG4iCittc2dzdHIgItCd0LjRh9C10LPQviDQvdC1INC/0YDQuNC80LXQvdC10L3Qvi5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzE5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlc1xuIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNGD0Y4g0L3QtSDRgdC70LjRgtC+0LU6ICVzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMyOAorbXNnaWQgIk9ubHkgYmluYXJ5IGZpbGVzIGNoYW5nZWQuXG4iCittc2dzdHIgItCi0L7Qu9GM0LrQviDQuNC30LzQtdC90LXQvdC40Y8g0LTQstC+0LjRh9C90YvRhSDRhNCw0LnQu9C+0LIuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMzMAorbXNnaWQgIk5vIGNoYW5nZXMuXG4iCittc2dzdHIgItCd0LXRgiDQuNC30LzQtdC90LXQvdC40LkuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMzOAorbXNnaWQgIlBhdGNoIHVwZGF0ZSIKK21zZ3N0ciAi0J7QsdC90L7QstC70LXQvdC40LUg0L/QsNGC0YfQsCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzkwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQn9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0YLRjCDQuNC30LzQtdC90LXQvdC40LUg0YDQtdC20LjQvNCwINC00L7RgdGC0YPQv9CwIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzOTEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCf0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDRgtGMINGD0LTQsNC70LXQvdC40LUgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM5MgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCf0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDRgtGMINGN0YLQvtGCINCx0LvQvtC6INC40LfQvNC10L3QtdC90LjQuSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzk1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQodC/0YDRj9GC0LDRgtGMINC40LfQvNC10L3QtdC90LjQtSDRgNC10LbQuNC80LAg0LTQvtGB0YLRg9C/0LAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM5NgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0KHQv9GA0Y/RgtCw0YLRjCDRg9C00LDQu9C10L3QuNC1INGE0LDQudC70LAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM5NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCh0L/RgNGP0YLQsNGC0Ywg0Y3RgtC+0YIg0LHQu9C+0Log0LjQt9C80LXQvdC10L3QuNC5IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0KPQsdGA0LDRgtGMINC40LfQvNC10L3QtdC90LjRjyDRgNC10LbQuNC80LAg0LTQvtGB0YLRg9C/0LAg0LjQtyDQuNC90LTQtdC60YHQsCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDAxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCj0LHRgNCw0YLRjCDRg9C00LDQu9C10L3QuNC1INC40Lcg0LjQvdC00LXQutGB0LAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQwMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0KPQsdGA0LDRgtGMINC40Lcg0LjQvdC00LXQutGB0LAg0Y3RgtC+0YIg0LHQu9C+0Log0LjQt9C80LXQvdC40LkgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQwNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjQtSDRgNC10LbQuNC80LAg0LTQvtGB0YLRg9C/0LAg0Log0LjQvdC00LXQutGB0YMgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQwNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGMINGD0LTQsNC70LXQvdC40LUg0Log0LjQvdC00LXQutGB0YMgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQwNworIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCf0YDQuNC80LXQvdC40YLRjCDRjdGC0L7RgiDQsdC70L7QuiDQuiDQuNC90LTQtdC60YHRgyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDEwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J7RgtC80LXQvdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0YDQtdC20LjQvNCwINC00L7RgdGC0YPQv9CwINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQxMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCe0YLQvNC10L3QuNGC0Ywg0YPQtNCw0LvQtdC90LjQtSDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J7RgtC80LXQvdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0Y3RgtC+0LPQviDQsdC70L7QutCwINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQxNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQntGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDRgNC10LbQuNC80LAg0LTQvtGB0YLRg9C/0LAg0LIg0LjQvdC00LXQutGB0LUg0Lgg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDE2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCe0YLQvNC10L3QuNGC0Ywg0YPQtNCw0LvQtdC90LjQtSDQsiDQuNC90LTQtdC60YHQtSDQuCDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCe0YLQvNC10L3QuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGN0YLQvtCz0L4g0LHQu9C+0LrQsCDQsiDQuNC90LTQtdC60YHQtSDQuCDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQn9GA0LjQvNC10L3QuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGA0LXQttC40LzQsCDQtNC+0YHRgtGD0L/QsCDQuiDQuNC90LTQtdC60YHRgyDQuCDRgNCw0LHQvtGH0LXQvNGDINC60LDRgtCw0LvQvtCz0YMgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCf0YDQuNC80LXQvdC40YLRjCDRg9C00LDQu9C10L3QuNC1INC6INC40L3QtNC10LrRgdGDINC4INGA0LDQsdC+0YfQtdC80YMg0LrQsNGC0LDQu9C+0LPRgyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDIyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCf0YDQuNC80LXQvdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0Y3RgtC+0LPQviDQsdC70L7QutCwINC6INC40L3QtNC10LrRgdGDINC4INGA0LDQsdC+0YfQtdC80YMg0LrQsNGC0LDQu9C+0LPRgyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTIyCittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290b1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTUyOQorbXNnaWQgImdvIHRvIHdoaWNoIGh1bmsgKDxyZXQ+IHRvIHNlZSBtb3JlKT8gIgorbXNnc3RyICLQvdCwINC60LDQutC+0Lkg0LHQu9C+0Log0L/QtdGA0LXQudGC0LggKNC90LDQttC80LjRgtC1IDzQstCy0L7QtD4g0YfRgtC+0LHRiyDRg9Cy0LjQtNC10YLRjCDQtdGJ0LUpPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTUzMQorbXNnaWQgImdvIHRvIHdoaWNoIGh1bms/ICIKK21zZ3N0ciAi0L3QsCDQutCw0LrQvtC5INCx0LvQvtC6INC/0LXRgNC10LnRgtC4PyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJ1xuIgorbXNnc3RyICLQndC10LLQtdGA0L3Ri9C5INC90L7QvNC10YA6IMKrJXPCu1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NDUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU29ycnksIG9ubHkgJWQgaHVuayBhdmFpbGFibGUuXG4iCittc2dpZF9wbHVyYWwgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS5cbiIKK21zZ3N0clswXSAi0J/RgNC+0YHRgtC40YLQtSwg0L3QviDRgtC+0LvRjNC60L4gJWQg0LHQu9C+0Log0LjQt9C80LXQvdC10L3QuNC5INC00L7RgdGC0YPQv9C10L0uXG4iCittc2dzdHJbMV0gItCf0YDQvtGB0YLQuNGC0LUsINC90L4g0YLQvtC70YzQutC+ICVkINCx0LvQvtC60LAg0LjQt9C80LXQvdC10L3QuNC5INC00L7RgdGC0YPQv9C90L4uXG4iCittc2dzdHJbMl0gItCf0YDQvtGB0YLQuNGC0LUsINC90L4g0YLQvtC70YzQutC+ICVkINCx0LvQvtC60L7QsiDQuNC30LzQtdC90LXQvdC40Lkg0LTQvtGB0YLRg9C/0L3Qvi5cbiIKK21zZ3N0clszXSAi0J/RgNC+0YHRgtC40YLQtSwg0L3QviDRgtC+0LvRjNC60L4gJWQg0LHQu9C+0LrQsCDQuNC30LzQtdC90LXQvdC40Lkg0LTQvtGB0YLRg9C/0L3Qvi5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTcxCittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc1Cittc2dpZCAic2VhcmNoIGZvciByZWdleD8gIgorbXNnc3RyICLQuNGB0LrQsNGC0Ywg0YEg0L/QvtC80L7RidGM0Y4g0YDQtdCz0YPQu9GP0YDQvdC+0LPQviDQstGL0YDQsNC20LXQvdC40Y8/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTg4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlc1xuIgorbXNnc3RyICLQoNC10LPRg9C70Y/RgNC90L7QtSDQstGL0YDQsNC20LXQvdC40LUg0LTQu9GPINC/0L7QuNGB0LrQsCDQsiDQvdC10LLQtdGA0L3QvtC8INGE0L7RgNC80LDRgtC1ICVzOiAlc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1OTgKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm5cbiIKK21zZ3N0ciAi0J3QtSDQvdCw0LnQtNC10L3RiyDQsdC70L7QutC4LCDQutC+0YLQvtGA0YvQtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RgiDRg9C60LDQt9Cw0L3QvdC+0LzRgyDRiNCw0LHQu9C+0L3Rg1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjMyCittc2dpZCAiTm8gcHJldmlvdXMgaHVua1xuIgorbXNnc3RyICLQndC10YIg0L/RgNC10LTRi9C00YPRidC10LPQviDQsdC70L7QutCwXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYxOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MzgKK21zZ2lkICJObyBuZXh0IGh1bmtcbiIKK21zZ3N0ciAi0J3QtSDRgdC70LXQtNGD0Y7RidC10LPQviDQsdC70L7QutCwXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY0NAorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjUwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVuay5cbiIKK21zZ2lkX3BsdXJhbCAiU3BsaXQgaW50byAlZCBodW5rcy5cbiIKK21zZ3N0clswXSAi0KDQsNC30LHQuNGC0L4g0L3QsCAlZCDQsdC70L7QuiDQuNC30LzQtdC90LXQvdC40LkuXG4iCittc2dzdHJbMV0gItCg0LDQt9Cx0LjRgtC+INC90LAgJWQg0LHQu9C+0LrQsCDQuNC30LzQtdC90LXQvdC40LkuXG4iCittc2dzdHJbMl0gItCg0LDQt9Cx0LjRgtC+INC90LAgJWQg0LHQu9C+0LrQvtCyINC40LfQvNC10L3QtdC90LjQuS5cbiIKK21zZ3N0clszXSAi0KDQsNC30LHQuNGC0L4g0L3QsCAlZCDQsdC70L7QutCwINC40LfQvNC10L3QtdC90LjQuS5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjYwCittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcwNgorbXNnaWQgIlJldmlldyBkaWZmIgorbXNnc3RyICLQn9GA0L7RgdC80L7RgtGA0LXRgtGMINC40LfQvNC10L3QtdC90LjRjyIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBkbyBub3QgdHJhbnNsYXRlIHRoZSBjb21tYW5kIG5hbWVzCisjLiAnc3RhdHVzJywgJ3VwZGF0ZScsICdyZXZlcnQnLCBldGMuCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3MjUKK21zZ2lkICIiCisic3RhdHVzICAgICAgICAtIHNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzXG4iCisidXBkYXRlICAgICAgICAtIGFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlc1xuIgorInJldmVydCAgICAgICAgLSByZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvblxuIgorInBhdGNoICAgICAgICAgLSBwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHlcbiIKKyJkaWZmICAgICAgICAgIC0gdmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXhcbiIKKyJhZGQgdW50cmFja2VkIC0gYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzXG4iCittc2dzdHIgInN0YXR1cyAgICAgICAgLSDQv9C+0LrQsNC30LDRgtGMINC/0YPRgtC4INGBINC40LfQvNC10L3QtdC90LjRj9C80LhcbnVwZGF0ZSAgICAgICAgLSDQtNC+0LHQsNCy0LjRgtGMINGB0L7RgdGC0L7Rj9C90LjQtSDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAg0LjQvdC00LXQutGBXG5yZXZlcnQgICAgICAgIC0g0LLQtdGA0L3Rg9GC0Ywg0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C5INC90LDQsdC+0YAg0LjQt9C80LXQvdC10L3QuNC5INC6IEhFQUQg0LLQtdGA0YHQuNC4XG5wYXRjaCAgICAgICAgIC0g0LLRi9Cx0YDQsNGC0Ywg0Lgg0LLRi9Cx0L7RgNC+0YfQvdC+INC+0LHQvdC+0LLQuNGC0Ywg0LHQu9C+0LrQuFxuZGlmZiAgICAgICAgICAtINC/0YDQvtGB0LzQvtGC0YDQtdGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINC80LXQttC00YMgSEVBRCDQuCDQuNC90LTQtdC60YHQvtC8XG5hZGQgdW50cmFja2VkIC0g0LTQvtCx0LDQstC40YLRjCDRgdC+0LTQtdGA0LbQuNC80L7QtSDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YTQsNC50LvQvtCyINCyINC40L3QtNC10LrRgVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NDIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzQ3CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzU3CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzY3Cittc2dpZCAibWlzc2luZyAtLSIKK21zZ3N0ciAi0L7RgtGB0YPRgtGB0YLQstGD0LXRgiAtLSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVua25vd24gLS1wYXRjaCBtb2RlOiAlcyIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90YvQuSDRgNC10LbQuNC8INC00LvRjyAtLXBhdGNoOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzY5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc3NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzLCBleHBlY3RpbmcgLS0iCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80YvQuSDQsNGA0LPRg9C80LXQvdGCICVzLCDQvtC20LjQtNCw0LXRgtGB0Y8gLS0iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM4Cittc2dpZCAibG9jYWwgem9uZSBkaWZmZXJzIGZyb20gR01UIGJ5IGEgbm9uLW1pbnV0ZSBpbnRlcnZhbFxuIgorbXNnc3RyICLQu9C+0LrQsNC70YzQvdGL0Lkg0YfQsNGB0L7QstC+0Lkg0L/QvtGP0YEg0L7RgtC70LjRh9Cw0LXRgtGB0Y8g0L7RgiBHTVQg0L3QsCDQvdC1INC80LjQvdGD0YLQvdGL0Lkg0LjQvdGC0LXRgNCy0LDQu1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MQorbXNnaWQgImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIgorbXNnc3RyICLQu9C+0LrQsNC70YzQvdGL0Lkg0YHQtNCy0LjQsyDQstGA0LXQvNC10L3QuCDQsdC+0LvRjNGI0LUg0LjQu9C4INGA0LDQstC10L0gMjQg0YfQsNGB0LBcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoyMTkgZ2l0LXNlbmQtZW1haWwucGVybDoyMjUKK21zZ2lkICJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciCittc2dzdHIgItGA0LXQtNCw0LrRgtC+0YAg0LHRi9C7INC30LDQstC10YDRiNC10L0g0YEg0L7RiNC40LHQutC+0LksINC+0YLQvNC10L3Rj9GOINCy0YHRkSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMDIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJyVzJyBjb250YWlucyBhbiBpbnRlcm1lZGlhdGUgdmVyc2lvbiBvZiB0aGUgZW1haWwgeW91IHdlcmUgY29tcG9zaW5nLlxuIgorbXNnc3RyICLCqyVzwrsg0YHQvtC00LXRgNC20LjRgiDQv9GA0L7QvNC10LbRg9GC0L7Rh9C90YPRjiDQstC10YDRgdC40Y4g0L/QuNGB0YzQvNCwLCDQutC+0YLQvtGA0L7QtSDQstGLINCz0L7RgtC+0LLQuNGC0LUuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzA3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiclcy5maW5hbCcgY29udGFpbnMgdGhlIGNvbXBvc2VkIGVtYWlsLlxuIgorbXNnc3RyICLCqyVzLmZpbmFswrsg0YHQvtC00LXRgNC20LjRgiDQv9C+0LTQs9C+0YLQvtCy0LvQtdC90L3QvtC1INC/0LjRgdGM0LzQvi5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMjYKK21zZ2lkICItLWR1bXAtYWxpYXNlcyBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBvcHRpb25zXG4iCittc2dzdHIgIi0tZHVtcC1hbGlhc2VzINC90LUg0YHQvtCy0LzQtdGB0YLQuNC80L4g0YEg0LTRgNGD0LPQuNC80Lgg0L7Qv9GG0LjRj9C80LhcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozOTUgZ2l0LXNlbmQtZW1haWwucGVybDo2NTYKK21zZ2lkICJDYW5ub3QgcnVuIGdpdCBmb3JtYXQtcGF0Y2ggZnJvbSBvdXRzaWRlIGEgcmVwb3NpdG9yeVxuIgorbXNnc3RyICLQndC10LvRjNC30Y8g0LfQsNC/0YPRgdC60LDRgtGMIGdpdCBmb3JtYXQtcGF0Y2gg0LLQvdC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y9cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozOTgKK21zZ2lkICIiCisiYGJhdGNoLXNpemVgIGFuZCBgcmVsb2dpbmAgbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgKHZpYSBjb21tYW5kLWxpbmUgb3IgIgorImNvbmZpZ3VyYXRpb24gb3B0aW9uKVxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDcwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1zdXBwcmVzcy1jYyBmaWVsZDogJyVzJ1xuIgorbXNnc3RyICLQndC10LjQt9Cy0LXRgdGC0L3QvtC1INC/0L7Qu9C1IC0tc3VwcHJlc3MtY2M6IMKrJXPCu1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUwMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tY29uZmlybSBzZXR0aW5nOiAnJXMnXG4iCittc2dzdHIgItCd0LXQuNC30LLQtdGB0YLQvdGL0Lkg0L/QsNGA0LDQvNC10YLRgCAtLWNvbmZpcm06IMKrJXPCu1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUyOQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBhbGlhcyB3aXRoIHF1b3RlcyBpcyBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICLQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiDRgdC+0LrRgNCw0YnQtdC90LjQtSDQtNC70Y8gc2VuZG1haWwg0YEg0LrQsNCy0YvRh9C60LDQvNC4INC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjzogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MzEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYDppbmNsdWRlOmAgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAi0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtTogwqs6aW5jbHVkZTrCuyDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y86ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGAvZmlsZWAgb3IgYHxwaXBlYCByZWRpcmVjdGlvbiBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICLQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiDQv9C10YDQtdC90LDQv9GA0LDQstC70LXQvdC40LUgwqsvZmlsZcK7INC40LvQuCDCq3xwaXBlwrsg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUzOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBsaW5lIGlzIG5vdCByZWNvZ25pemVkOiAlc1xuIgorbXNnc3RyICLQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiDRgdGC0YDQvtC60LAgc2VuZG1haWwg0L3QtSDRgNCw0YHQv9C+0LfQvdCw0L3QsDogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2MjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgJyVzJyBleGlzdHMgYnV0IGl0IGNvdWxkIGFsc28gYmUgdGhlIHJhbmdlIG9mIGNvbW1pdHNcbiIKKyJ0byBwcm9kdWNlIHBhdGNoZXMgZm9yLiAgUGxlYXNlIGRpc2FtYmlndWF0ZSBieS4uLlxuIgorIlxuIgorIiAgICAqIFNheWluZyBcIi4vJXNcIiBpZiB5b3UgbWVhbiBhIGZpbGU7IG9yXG4iCisiICAgICogR2l2aW5nIC0tZm9ybWF0LXBhdGNoIG9wdGlvbiBpZiB5b3UgbWVhbiBhIHJhbmdlLlxuIgorbXNnc3RyICLQpNCw0LnQuyDCqyVzwrsg0YHRg9GJ0LXRgdGC0LLRg9C10YIsINC90L4g0Y3RgtC+INGC0LDQutC20LUg0LzQvtC20LXRgiDQsdGL0YLRjCDQuFxu0LTQuNCw0L/QsNC30L7QvdC+0Lwg0LrQvtC80LzQuNGC0L7QsiDQtNC70Y8g0LrQvtGC0L7RgNGL0YUg0L3Rg9C20L3QviDRgdC00LXQu9Cw0YLRjCDQv9Cw0YLRh9C4LiBcbtCj0YHRgtGA0LDQvdC40YLQtSDQvdC10L7QtNC90L7Qt9C90LDRh9C90L7RgdGC0YzigKZcblxuICAgICog0KPQutCw0LfQsNCyIFwiLi8lc1wiINC10YHQu9C4INCy0Ysg0LjQvNC10LXRgtC1INCyINCy0LjQtNGDINC40LzRjyDRhNCw0LnQu9CwOyDQuNC70LhcbiAgICAqINCf0LXRgNC10LTQsNCyINC+0L/RhtC40Y4gLS1mb3JtYXQtcGF0Y2gg0LXRgdC70Lgg0LLRiyDQuNC80LXQtdGC0LUg0LIg0LLQuNC00YMg0LTQuNCw0L/QsNC30L7QvSDQutC+0LzQvNC40YLQvtCyLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY0MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbmRpciAlczogJXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIG9wZW5kaXIgJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY2NworIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiZmF0YWw6ICVzOiAlc1xuIgorIndhcm5pbmc6IG5vIHBhdGNoZXMgd2VyZSBzZW50XG4iCittc2dzdHIgItC60YDQuNGC0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwOiAlczogJXNcbtC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6INC/0LDRgtGH0Lgg0L3QtSDQsdGL0LvQuCDQvtGC0L/RgNCw0LLQu9C10L3Ri1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY3OAorbXNnaWQgIiIKKyJcbiIKKyJObyBwYXRjaCBmaWxlcyBzcGVjaWZpZWQhXG4iCisiXG4iCittc2dzdHIgIlxu0KTQsNC50Lsg0YEg0L/QsNGC0YfQtdC8INC90LUg0YPQutCw0LfQsNC9IVxuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjkxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk5vIHN1YmplY3QgbGluZSBpbiAlcz8iCittc2dzdHIgItCd0LXRgiDRgdGC0YDQvtC60Lgg0YEg0YLQtdC80L7QuSDQsiAlcz8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzAxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuIGZvciB3cml0aW5nICVzOiAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDQtNC70Y8g0LfQsNC/0LjRgdC4ICVzOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MTIKK21zZ2lkICIiCisiTGluZXMgYmVnaW5uaW5nIGluIFwiR0lUOlwiIHdpbGwgYmUgcmVtb3ZlZC5cbiIKKyJDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50c1xuIgorImZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLlxuIgorIlxuIgorIkNsZWFyIHRoZSBib2R5IGNvbnRlbnQgaWYgeW91IGRvbid0IHdpc2ggdG8gc2VuZCBhIHN1bW1hcnkuXG4iCittc2dzdHIgItCh0YLRgNC+0LrQuCwg0L3QsNGH0LjQvdCw0Y7RidC40LXRgdGPINGBIMKrR0lUOsK7INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90YsuXG7QktC+0LfQvNC+0LbQvdC+INCx0YPQtNC10YIg0L/QvtC70LXQt9C90L4g0LLQutC70Y7Rh9C40YLRjCDRgdGC0LDRgtC40YHRgtC40LrRgyDQtNC+0LHQsNCy0LvQtdC90LjQuVxu0Lgg0YPQtNCw0LvQtdC90LjQuSDQuNC70Lgg0YLQsNCx0LvQuNGG0YMg0YHQvtC00LXRgNC20LjQvNC+0LPQviDQuiDRgdC+0LfQtNCw0LLQsNC10LzQvtC80YMg0L/QsNGC0YfRgy5cblxu0J7Rh9C40YHRgtC40YLQtSDRgdC+0LTQtdGA0LbQuNC80L7QtSwg0LXRgdC70Lgg0LLRiyDQvdC1INGF0L7RgtC40YLQtSDQvtGC0L/RgNCw0LLQu9GP0YLRjCDQv9C40YHRjNC80L4g0YHQviDRgdCy0L7QtNC60L7QuSDQuNC30LzQtdC90LXQvdC40LkuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzM2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzOiAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCAlczogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzLmZpbmFsOiAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCAlcy5maW5hbDogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6Nzk2Cittc2dpZCAiU3VtbWFyeSBlbWFpbCBpcyBlbXB0eSwgc2tpcHBpbmcgaXRcbiIKK21zZ3N0ciAi0J/QuNGB0YzQvNC+INGB0L4g0YHQstC+0LTQutC+0Lkg0LjQt9C80LXQvdC10L3QuNC5INC/0YPRgdGC0L7QtSwg0L/QvtC/0YPRgdC60LDRjiDQtdCz0L5cbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwIFt5L05dIGFzIGlzLgorIzogZ2l0LXNlbmQtZW1haWwucGVybDo4MzEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVzZSA8JXM+IFt5L05dPyAiCittc2dzdHIgItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIDwlcz4gW3kvTl0/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4ODYKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgOGJpdCwgYnV0IGRvIG5vdCBkZWNsYXJlIGEgQ29udGVudC1UcmFuc2Zlci0iCisiRW5jb2RpbmcuXG4iCittc2dzdHIgItCh0LvQtdC00YPRjtGJ0LjQtSDRhNCw0LnQu9GLIDgg0LHQuNGC0L3Ri9C1LCDQvdC+INC90LUg0YHQvtC00LXRgNC20LDRgiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg5MQorbXNnaWQgIldoaWNoIDhiaXQgZW5jb2Rpbmcgc2hvdWxkIEkgZGVjbGFyZSBbVVRGLThdPyAiCittc2dzdHIgItCa0LDQutGD0Y4gOCDQsdC40YLQvdGD0Y4g0LrQvtC00LjRgNC+0LLQutGDINC90YPQttC90L4g0YPQutCw0LfQsNGC0YwgW1VURi04XT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg5OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuIgorIlx0JXNcbiIKKyJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgd2FudCB0byBzZW5kLlxuIgorbXNnc3RyICLQntGC0LrQsNC30YvQstCw0Y7RgdGMINC+0YLQv9GA0LDQstC40YLRjCwg0YIu0LouINC/0LDRgtGHXG5cdCVzXG7RgdC+0LTQtdGA0LbQuNGCINGI0LDQsdC70L7QvdC90YvQuSDQt9Cw0LPQvtC70L7QstC+0LogwqsqKiogU1VCSkVDVCBIRVJFICoqKsK7LiDQo9C60LDQttC40YLQtSDQv9Cw0YDQsNC80LXRgtGAIC0tZm9yY2UsINC10YHQu9C4INCy0YsgINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQvtGC0L/RgNCw0LLQuNGC0Ywg0LXQs9C+LlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxOAorbXNnaWQgIlRvIHdob20gc2hvdWxkIHRoZSBlbWFpbHMgYmUgc2VudCAoaWYgYW55b25lKT8iCittc2dzdHIgItCa0L7QvNGDINC00L7Qu9C20L3RiyDQsdGL0YLRjCDQvtGC0L/RgNCw0LLQu9C10L3RiyDQv9C40YHRjNC80LAgKNC10YHQu9C4INC90YPQttC90L4pPyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MzYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmF0YWw6IGFsaWFzICclcycgZXhwYW5kcyB0byBpdHNlbGZcbiIKK21zZ3N0ciAi0LrRgNC40YLQuNGH0LXRgdC60LDRjyDQvtGI0LjQsdC60LA6INGB0L7QutGA0LDRidC10L3QuNC1IMKrJXPCuyDRgNCw0YHQutGA0YvQstCw0LXRgtGB0Y8g0YHQsNC80L4g0LIg0YHQtdCx0Y9cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NDgKK21zZ2lkICJNZXNzYWdlLUlEIHRvIGJlIHVzZWQgYXMgSW4tUmVwbHktVG8gZm9yIHRoZSBmaXJzdCBlbWFpbCAoaWYgYW55KT8gIgorbXNnc3RyICJNZXNzYWdlLUlEINC60L7RgtC+0YDRi9C5INC90YPQttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCyINC/0L7Qu9C1IEluLVJlcGx5LVRvINC00LvRjyDQv9C10YDQstC+0LPQviDQv9C40YHRjNC80LAgKNC10YHQu9C4INC90YPQttC90L4pPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTAwNiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwMTQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVuYWJsZSB0byBleHRyYWN0IGEgdmFsaWQgYWRkcmVzcyBmcm9tOiAlc1xuIgorbXNnc3RyICLQvtGI0LjQsdC60LA6INC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C00LXQu9C40YLRjCDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C5INCw0LTRgNC10YEg0LjQtzogJXNcbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtxXSBbZF0gW2VdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwMTgKK21zZ2lkICJXaGF0IHRvIGRvIHdpdGggdGhpcyBhZGRyZXNzPyAoW3FddWl0fFtkXXJvcHxbZV1kaXQpOiAiCittc2dzdHIgItCn0YLQviDQvdGD0LbQvdC+INGB0LTQtdC70LDRgtGMINGBINGN0YLQuNC8INCw0LTRgNC10YHQvtC8PyAoW3FdIC0g0LLRi9GF0L7QtHxbZF0gLSDQvtGC0LHRgNC+0YHQuNGC0Yx8W2VdIC0g0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YwpOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTMzNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJDQSBwYXRoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi0L/Rg9GC0YwgQ0Egwqslc8K7INC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQxOAorbXNnaWQgIiIKKyIgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbFxuIgorIiAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0XG4iCisiICAgIHNlbmQtZW1haWwgcHJvbXB0cyBiZWZvcmUgc2VuZGluZyB3aGVuZXZlciB0aGlzIG9jY3Vycy5cbiIKKyIgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybVxuIgorIiAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4iCisiXG4iCisiICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLFxuIgorIiAgICBydW4gJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCittc2dzdHIgIiAgICDQodC/0LjRgdC+0LogQ2MgKNC/0L7Qu9GD0YfQsNGC0LXQu9C10Lkg0LrQvtC/0LjQuCDQv9C40YHRjNC80LApINCx0YvQuyDRgNCw0YHRiNC40YDQtdC9INC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0LzQuFxuICAgINCw0LTRgNC10YHQsNC80LgsINC90LDQudC00LXQvdC90YvQvNC4INCyINGB0L7QvtCx0YnQtdC90LjQuCDQutC+0LzQvNC40YLQsCDQv9Cw0YLRh9CwLiDQn9C+INGD0LzQvtC70YfQsNC90LjRjlxuICAgIHNlbmQtZW1haWwg0L/QtdGA0LXRgdC/0YDQsNGI0LjQstCw0LXRgiDQv9C10YDQtdC0INC+0YLQv9GA0LDQstC60L7QuSwg0LrQvtCz0LTQsCDQvtC90LAg0L/RgNC+0LjRgdGF0L7QtNC40YIuXG4gICDQrdGC0L4g0L/QvtCy0LXQtNC10L3QuNC1INC80L7QttC10YIg0LHRi9GC0Ywg0LjQt9C80LXQvdC10L3QviDQv9Cw0YDQsNC80LXRgtGA0L7QvCDRhNCw0LnQu9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuFxuICAgIHNlbmRlbWFpbC5jb25maXJtLlxuXG4gICAg0JTQu9GPINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+0Lkg0LjQvdGE0L7RgNC80LDRhtC40LgsINC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCBzZW5kLWVtYWlsIC0taGVscMK7LlxuICAgINCn0YLQvtCx0Ysg0L7RgdGC0LDQstC40YLRjCDRgtC10LrRg9GJ0LXQtSDQv9C+0LLQtdC00LXQvdC40LUsINC90L4g0YHQutGA0YvRgtGMINGN0YLQviDRgdC+0L7QsdGJ0LXQvdC40LUsXG4gICAg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvwrsuXG5cbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSBbbl0gW2VdIFtxXSBbYV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQzMworbXNnaWQgIlNlbmQgdGhpcyBlbWFpbD8gKFt5XWVzfFtuXW98W2VdZGl0fFtxXXVpdHxbYV1sbCk6ICIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LjRgtGMINGN0YLQviDQv9C40YHRjNC80L4/IChbeV0gLSDQtNCwfFtuXSAtINC90LXRgnxbZV0gLSDQuNC30LzQtdC90LjRgtGMfFtxXSAtINCy0YvRhdC+0LR8W2FdIC0g0LLRgdC1KTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0MzYKK21zZ2lkICJTZW5kIHRoaXMgZW1haWwgcmVwbHkgcmVxdWlyZWQiCittc2dzdHIgItCe0YLQv9GA0LDQstC60LAg0Y3RgtC+0LPQviDQvtGC0LLQtdGC0LAg0L3QsCDQv9C40YHRjNC80L4g0L7QsdGP0LfQsNGC0LXQu9GM0L3QsCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDY0Cittc2dpZCAiVGhlIHJlcXVpcmVkIFNNVFAgc2VydmVyIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkLiIKK21zZ3N0ciAi0KLRgNC10LHRg9C10LzRi9C5IFNNVFAg0YHQtdGA0LLQtdGAINC90LUg0LHRi9C7INC/0YDQsNCy0LjQu9GM0L3QviDQvtCx0YrRj9Cy0LvQtdC9LiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTExCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFNUQVJUVExTISAlcyIKK21zZ3N0ciAi0KHQtdGA0LLQtdGAINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCIFNUQVJUVExTISAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTE2IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUyMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTVEFSVFRMUyBmYWlsZWQhICVzIgorbXNnc3RyICLQntGI0LjQsdC60LAgU1RBUlRUTFMhICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MjkKK21zZ2lkICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTTVRQIHByb3Blcmx5LiBDaGVjayBjb25maWcgYW5kIHVzZSAtLXNtdHAtZGVidWcuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDRgtGMIFNNVFAuINCf0YDQvtCy0LXRgNGM0YLQtSDQstCw0YjQuCDQvdCw0YHRgtGA0L7QudC60Lgg0Lgg0L/QvtC/0YDQvtCx0YPQudGC0LUg0LfQsNC/0YPRgdGC0LjRgtGMINCyINC/0LDRgNCw0LzQtdGC0YDQvtC8IC0tc210cC1kZWJ1Zy4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gc2VuZCAlc1xuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQv9GA0LDQstC40YLRjCAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NTAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRHJ5LVNlbnQgJXNcbiIKK21zZ3N0ciAi0JjQvNC40YLQsNGG0LjRjyDQvtGC0L/RgNCw0LLQutC4ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU1MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZW50ICVzXG4iCittc2dzdHIgItCe0YLQv9GA0LDQstC70LXQvdC+ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU1MgorbXNnaWQgIkRyeS1PSy4gTG9nIHNheXM6XG4iCittc2dzdHIgItCY0LzQuNGC0LDRhtC40Y8gT0suINCW0YPRgNC90LDQuyDRgdC+0LTQtdGA0LbQuNGCOlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NTIKK21zZ2lkICJPSy4gTG9nIHNheXM6XG4iCittc2dzdHIgIk9LLiDQltGD0YDQvdCw0Lsg0YHQvtC00LXRgNC20LjRgjpcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTY0Cittc2dpZCAiUmVzdWx0OiAiCittc2dzdHIgItCg0LXQt9GD0LvRjNGC0LDRgjogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NjcKK21zZ2lkICJSZXN1bHQ6IE9LXG4iCittc2dzdHIgItCg0LXQt9GD0LvRjNGC0LDRgjogT0tcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTg1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRhNCw0LnQuyAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjMyIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY1MgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkg0JTQvtCx0LDQstC70LXQvdC40LUgY2M6ICVzINGB0L4g0YHRgtGA0L7QutC4IMKrJXPCu1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyB0bzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpINCU0L7QsdCw0LLQu9C10L3QuNC1IHRvOiAlcyDRgdC+INGB0YLRgNC+0LrQuCDCqyVzwrtcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjkxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobm9uLW1ib3gpINCU0L7QsdCw0LLQu9C10L3QuNC1IGNjOiAlcyDRgdC+INGB0YLRgNC+0LrQuCDCqyVzwrtcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzI2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihib2R5KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihib2R5KSDQlNC+0LHQsNCy0LvQtdC90LjQtSBjYzogJXMg0YHQviDRgdGC0YDQvtC60Lggwqslc8K7XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTgzNworIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIENvdWxkIG5vdCBleGVjdXRlICclcyciCittc2dzdHIgIiglcykg0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywgwqslc8K7IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NDQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIKK21zZ3N0ciAiKCVzKSDQlNC+0LHQsNCy0LvQtdC90LjQtSAlczogJXMg0LjQtzogwqslc8K7XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg0OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIGZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICclcyciCittc2dzdHIgIiglcykg0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LrRgNGL0YLRjCDQv9C+0YLQvtC6INC6IMKrJXPCuyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODc4Cittc2dpZCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQv9GA0LDQstC40YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0LIgNyDQsdC40YLQvdC+0Lkg0LrQvtC00LjRgNC+0LLQutC1IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4ODYKK21zZ2lkICJpbnZhbGlkIHRyYW5zZmVyIGVuY29kaW5nIgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNCw0Y8g0LrQvtC00LjRgNC+0LLQutCwINC/0LXRgNC10LTQsNGH0LgiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkyNyBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzkgZ2l0LXNlbmQtZW1haWwucGVybDoxOTg5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzOiAlc1xuIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMICVzOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGNvbnRhaW5zIGEgbGluZSBsb25nZXIgdGhhbiA5OTggY2hhcmFjdGVycyIKK21zZ3N0ciAiJXM6INC/0LDRgtGHINGB0L7QtNC10YDQttC40YIg0YHRgtGA0L7QutGDINC00LvQuNC90L3QtdC1INGH0LXQvCA5OTgg0YHQuNC80LLQvtC70L7QsiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTQ3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nICVzIHdpdGggYmFja3VwIHN1ZmZpeCAnJXMnLlxuIgorbXNnc3RyICLQn9GA0L7Qv9GD0YHQutCw0Y4gJXMg0YEg0L7QutC+0L3Rh9Cw0L3QuNC10Lwg0YDQtdC30LXRgNCy0L3QvtC5INC60L7Qv9C40Lggwqslc8K7LlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAlcz8gW3l8Tl06ICIKK21zZ3N0ciAi0JLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0L7RgtC/0YDQsNCy0LjRgtGMICVzPyBbeSAtINC00LB8TiAtINC90LXRgl06ICIKZGlmZiAtLWdpdCBhL3BvL3N2LnBvIGIvcG8vc3YucG8KaW5kZXggMWI0YWQ4My4uMDZhNTg2YSAxMDA2NDQKLS0tIGEvcG8vc3YucG8KKysrIGIvcG8vc3YucG8KQEAgLTEsMTYgKzEsMTQgQEAKLSMgU3dlZGlzaCB0cmFuc2xhdGlvbiBvZiBnaXQtZ3VpLgotIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTaGF3biBQZWFyY2UsIGV0IGFsLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWd1aSBwYWNrYWdlLgotIwotIyBNaWthZWwgTWFnbnVzc29uIDxtaWthY2h1QGdtYWlsLmNvbT4sIDIwMDguCi0jIFBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPiwgMjAwNy0yMDA4LCAyMDE1LgorIyBTd2VkaXNoIHRyYW5zbGF0aW9ucyBmb3IgR2l0LgorIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBQZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEdpdCBwYWNrYWdlLgorIyBQZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT4sIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQsIDIwMTUsIDIwMTYsIDIwMTcsIDIwMTgsIDIwMTksIDIwMjAuCiAjCiBtc2dpZCAiIgogbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBzdlxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wMy0yNyAxMDoxNSswMTAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0wMy0yNyAxMDoyNCswMTAwXG4iCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQgMi4yNi4wXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMjAtMDMtMTEgMTU6MjYrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMjAtMDMtMTcgMTg6MzArMDEwMFxuIgogIkxhc3QtVHJhbnNsYXRvcjogUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+XG4iCiAiTGFuZ3VhZ2UtVGVhbTogU3dlZGlzaCA8dHAtc3ZAbGlzdG9yLnRwLXN2LnNlPlxuIgogIkxhbmd1YWdlOiBzdlxuIgpAQCAtMTgsMjcxOSArMTYsMjU5MzEgQEAKICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiAiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCi0iWC1HZW5lcmF0b3I6IEd0cmFuc2xhdG9yIDIuOTEuNlxuIgorIlgtR2VuZXJhdG9yOiBHdHJhbnNsYXRvciAyLjkxLjdcbiIKIAotIzogZ2l0LWd1aS5zaDo4NjEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGZvbnQgc3BlY2lmaWVkIGluICVzOiIKLW1zZ3N0ciAiT2dpbHRpZ3QgdGVja2Vuc25pdHQgYW5naXZldCBpICVzOiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT8iCittc2dzdHIgIlZhZMOlICglcyk/IgogCi0jOiBnaXQtZ3VpLnNoOjkxNQotbXNnaWQgIk1haW4gRm9udCIKLW1zZ3N0ciAiSHV2dWR0ZWNrZW5zbml0dCIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjUyMSBhZGQtaW50ZXJhY3RpdmUuYzo4MjIgc2VxdWVuY2VyLmM6MzEyNAorIzogc2VxdWVuY2VyLmM6MzU2MiBidWlsdGluL3JlYmFzZS5jOjg3NSBidWlsdGluL3JlYmFzZS5jOjE2ODcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA4NiBidWlsdGluL3JlYmFzZS5jOjIxMzAKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBpbmRleGV0IgogCi0jOiBnaXQtZ3VpLnNoOjkxNgotbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgotbXNnc3RyICJEaWZmL2tvbnNvbHRlY2tlbnNuaXR0IgorIzogYWRkLWludGVyYWN0aXZlLmM6NTc2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjY5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI5NAorbXNnaWQgImJpbmFyeSIKK21zZ3N0ciAiYmluw6RyIgogCi0jOiBnaXQtZ3VpLnNoOjkzMSBnaXQtZ3VpLnNoOjk0NSBnaXQtZ3VpLnNoOjk1OCBnaXQtZ3VpLnNoOjEwNDgKLSM6IGdpdC1ndWkuc2g6MTA2NyBnaXQtZ3VpLnNoOjMxMjUKLW1zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKLW1zZ3N0ciAiZ2l0LWd1aTogw7ZkZXNkaWdlcnQgZmVsIgorIzogYWRkLWludGVyYWN0aXZlLmM6NjM0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjc4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMzMgorbXNnaWQgIm5vdGhpbmciCittc2dzdHIgImluZ2VudGluZyIKIAotIzogZ2l0LWd1aS5zaDo5MzIKLW1zZ2lkICJDYW5ub3QgZmluZCBnaXQgaW4gUEFUSC4iCi1tc2dzdHIgIkhpdHRhciBpbnRlIGdpdCBpIFBBVEguIgorIzogYWRkLWludGVyYWN0aXZlLmM6NjM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzE0CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMyOQorbXNnaWQgInVuY2hhbmdlZCIKK21zZ3N0ciAib8OkbmRyYWQiCiAKLSM6IGdpdC1ndWkuc2g6OTU5Ci1tc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCi1tc2dzdHIgIkthbiBpbnRlIHRvbGthIHZlcnNpb25zc3Ryw6RuZyBmcsOlbiBHaXQ6IgotCi0jOiBnaXQtZ3VpLnNoOjk4NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKLSJcbiIKLSIlcyBjbGFpbXMgaXQgaXMgdmVyc2lvbiAnJXMnLlxuIgotIlxuIgotIiVzIHJlcXVpcmVzIGF0IGxlYXN0IEdpdCAxLjUuMCBvciBsYXRlci5cbiIKLSJcbiIKLSJBc3N1bWUgJyVzJyBpcyB2ZXJzaW9uIDEuNS4wP1xuIgotbXNnc3RyICIiCi0iS2FuIGludGUgYXZnw7ZyYSBHaXRzIHZlcnNpb24uXG4iCi0iXG4iCi0iJXMgc8OkZ2VyIGF0dCBkZXNzIHZlcnNpb24gw6RyIFwiJXNcIi5cbiIKLSJcbiIKLSIlcyBrcsOkdmVyIG1pbnN0IEdpdCAxLjUuMCBlbGxlciBzZW5hcmUuXG4iCi0iXG4iCi0iQW50YSBhdHQgXCIlc1wiIMOkciB2ZXJzaW9uIDEuNS4wP1xuIgotCi0jOiBnaXQtZ3VpLnNoOjEyODEKLW1zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCi1tc2dzdHIgIkdpdC1rYXRhbG9nZW4gaGl0dGFkZXMgaW50ZToiCi0KLSM6IGdpdC1ndWkuc2g6MTMxNQotbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCi1tc2dzdHIgIkthbiBpbnRlIGfDpSB0aWxsIGLDtnJqYW4gcMOlIGFyYmV0c2thdGFsb2dlbjoiCi0KLSM6IGdpdC1ndWkuc2g6MTMyMwotbXNnaWQgIkNhbm5vdCB1c2UgYmFyZSByZXBvc2l0b3J5OiIKLW1zZ3N0ciAiS2FuIGludGUgYW52w6RuZGEgbmFrZXQgYXJraXY6IgotCi0jOiBnaXQtZ3VpLnNoOjEzMzEKLW1zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAiSW5nZW4gYXJiZXRza2F0YWxvZyIKLQotIzogZ2l0LWd1aS5zaDoxNTAzIGxpYi9jaGVja291dF9vcC50Y2w6MzA2Ci1tc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKLW1zZ3N0ciAiVXBwZGF0ZXJhciBmaWxzdGF0dXMuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MTU2MwotbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCi1tc2dzdHIgIlPDtmtlciBlZnRlciDDpG5kcmFkZSBmaWxlci4uLiIKLQotIzogZ2l0LWd1aS5zaDoxNjM5Ci1tc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKLW1zZ3N0ciAiIgotIkFucm9wYXIga3Jva2VuIGbDtnIgZsO2cmJlcmVkZWxzZSBhdiBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIChwcmVwYXJlLWNvbW1pdC0iCi0ibXNnKS4uLiIKLQotIzogZ2l0LWd1aS5zaDoxNjU2Ci1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAiIgotIkluY2hlY2tuaW5nZW4gYXZ2aXNhZGVzIGF2IGtyb2tlbiBmw7ZyIGbDtnJiZXJlZGVsc2UgYXYgaW5jaGVja25pbmdzbWVkZGVsYW5kZSAiCi0iKHByZXBhcmUtY29tbWl0LW1zZykuIgotCi0jOiBnaXQtZ3VpLnNoOjE4MTQgbGliL2Jyb3dzZXIudGNsOjI1MgotbXNnaWQgIlJlYWR5LiIKLW1zZ3N0ciAiS2xhci4iCi0KLSM6IGdpdC1ndWkuc2g6MTk3OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJEaXNwbGF5IGxpbWl0IChndWkubWF4ZmlsZXNkaXNwbGF5ZWQgPSAlcykgcmVhY2hlZCwgbm90IHNob3dpbmcgYWxsICVzIGZpbGVzLiIKLW1zZ3N0ciAiIgotIlZpc25pbmdzZ3LDpG5zIChndWkubWF4ZmlsZXNkaXNwbGF5ZWQgPSAlcykgbsOlZGQsIHZpc2FyZSBpbnRlIHNhbXRsaWdhICVzICIKLSJmaWxlci4iCi0KLSM6IGdpdC1ndWkuc2g6MjEwMQotbXNnaWQgIlVubW9kaWZpZWQiCi1tc2dzdHIgIk9mw7Zyw6RuZHJhZGUiCi0KLSM6IGdpdC1ndWkuc2g6MjEwMwotbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICJGw7Zyw6RuZHJhZGUsIGVqIGvDtmFkZSIKLQotIzogZ2l0LWd1aS5zaDoyMTA0IGdpdC1ndWkuc2g6MjExNgotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICJLw7ZhZGUgZsO2ciBpbmNoZWNrbmluZyIKLQotIzogZ2l0LWd1aS5zaDoyMTA1IGdpdC1ndWkuc2g6MjExNwotbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICJEZWxhciBrw7ZhZGUgZsO2ciBpbmNoZWNrbmluZyIKLQotIzogZ2l0LWd1aS5zaDoyMTA2IGdpdC1ndWkuc2g6MjExOAotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgotbXNnc3RyICJLw7ZhZGUgZsO2ciBpbmNoZWNrbmluZywgc2FrbmFkZSIKLQotIzogZ2l0LWd1aS5zaDoyMTA4Ci1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIkZpbHR5cCDDpG5kcmFkLCBlaiBrw7ZhZGUiCi0KLSM6IGdpdC1ndWkuc2g6MjEwOSBnaXQtZ3VpLnNoOjIxMTAKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgb2xkIHR5cGUgc3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIkZpbHR5cCDDpG5kcmFkLCBnYW1tYWwgdHlwIGvDtmFkZSBmw7ZyIGluY2hlY2tuaW5nIgotCi0jOiBnaXQtZ3VpLnNoOjIxMTEKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgotbXNnc3RyICJGaWx0eXAgw6RuZHJhZCwga8O2YWRlIgotCi0jOiBnaXQtZ3VpLnNoOjIxMTIKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlIHN0YWdlZCwgbW9kaWZpY2F0aW9uIG5vdCBzdGFnZWQiCi1tc2dzdHIgIkZpbHR5cHPDpG5kcmluZ2FyIGvDtmFkZSwgaW5uZWjDpWxsc8OkbmRyaW5nYXIgZWoga8O2YWRlIgotCi0jOiBnaXQtZ3VpLnNoOjIxMTMKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlIHN0YWdlZCwgZmlsZSBtaXNzaW5nIgotbXNnc3RyICJGaWx0eXBzw6RuZHJpbmdhciBrw7ZhZGUsIGZpbCBzYWtuYXMiCi0KLSM6IGdpdC1ndWkuc2g6MjExNQotbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAiRWogc3DDpXJhZGUsIGVqIGvDtmFkZSIKLQotIzogZ2l0LWd1aS5zaDoyMTIwCi1tc2dpZCAiTWlzc2luZyIKLW1zZ3N0ciAiU2FrbmFkZSIKLQotIzogZ2l0LWd1aS5zaDoyMTIxCi1tc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsIgotbXNnc3RyICJLw7ZhZGUgZsO2ciBib3J0dGFnbmluZyIKLQotIzogZ2l0LWd1aS5zaDoyMTIyCi1tc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgotbXNnc3RyICJLw7ZhZGUgZsO2ciBib3J0dGFnbmluZywgZm9ydGZhcmFuZGUgbsOkcnZhcmFuZGUiCi0KLSM6IGdpdC1ndWkuc2g6MjEyNCBnaXQtZ3VpLnNoOjIxMjUgZ2l0LWd1aS5zaDoyMTI2IGdpdC1ndWkuc2g6MjEyNwotIzogZ2l0LWd1aS5zaDoyMTI4IGdpdC1ndWkuc2g6MjEyOQotbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCi1tc2dzdHIgIktyw6R2ZXIga29uZmxpa3RoYW50ZXJpbmcgZWZ0ZXIgc2FtbWFuc2xhZ25pbmciCi0KLSM6IGdpdC1ndWkuc2g6MjE2NAotbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCi1tc2dzdHIgIlN0YXJ0YXIgZ2l0ay4uLiB2w6RudGEuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjE3NgotbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgotbXNnc3RyICJIaXR0YWRlIGludGUgZ2l0ayBpIFBBVEguIgotCi0jOiBnaXQtZ3VpLnNoOjIyMzUKLW1zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKLW1zZ3N0ciAiSGl0dGFkZSBpbnRlIGdpdCBndWkgaSBQQVRILiIKLQotIzogZ2l0LWd1aS5zaDoyNjU0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDEKLW1zZ2lkICJSZXBvc2l0b3J5IgotbXNnc3RyICJBcmtpdiIKLQotIzogZ2l0LWd1aS5zaDoyNjU1Ci1tc2dpZCAiRWRpdCIKLW1zZ3N0ciAiUmVkaWdlcmEiCi0KLSM6IGdpdC1ndWkuc2g6MjY1NyBsaWIvY2hvb3NlX3Jldi50Y2w6NTY3Ci1tc2dpZCAiQnJhbmNoIgotbXNnc3RyICJHcmVuIgotCi0jOiBnaXQtZ3VpLnNoOjI2NjAgbGliL2Nob29zZV9yZXYudGNsOjU1NAotbXNnaWQgIkNvbW1pdEBAbm91biIKLW1zZ3N0ciAiSW5jaGVja25pbmciCi0KLSM6IGdpdC1ndWkuc2g6MjY2MyBsaWIvbWVyZ2UudGNsOjEyMyBsaWIvbWVyZ2UudGNsOjE1MiBsaWIvbWVyZ2UudGNsOjE3MAotbXNnaWQgIk1lcmdlIgotbXNnc3RyICJTbMOlIGlob3AiCi0KLSM6IGdpdC1ndWkuc2g6MjY2NCBsaWIvY2hvb3NlX3Jldi50Y2w6NTYzCi1tc2dpZCAiUmVtb3RlIgotbXNnc3RyICJGasOkcnJhcmtpdiIKLQotIzogZ2l0LWd1aS5zaDoyNjY3Ci1tc2dpZCAiVG9vbHMiCi1tc2dzdHIgIlZlcmt0eWciCi0KLSM6IGdpdC1ndWkuc2g6MjY3NgotbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgotbXNnc3RyICJVdGZvcnNrYSBhcmJldHNrb3BpYSIKLQotIzogZ2l0LWd1aS5zaDoyNjgyCi1tc2dpZCAiR2l0IEJhc2giCi1tc2dzdHIgIkdpdCBCYXNoIgotCi0jOiBnaXQtZ3VpLnNoOjI2OTIKLW1zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKLW1zZ3N0ciAiQmzDpGRkcmEgaSBncmVuZW5zIGZpbGVyIgotCi0jOiBnaXQtZ3VpLnNoOjI2OTYKLW1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzLi4uIgotbXNnc3RyICJCbMOkZGRyYSBmaWxlciBww6UgZ3Jlbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzAxCi1tc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKLW1zZ3N0ciAiVmlzdWFsaXNlcmEgZ3JlbmVucyBoaXN0b3JpayIKLQotIzogZ2l0LWd1aS5zaDoyNzA1Ci1tc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKLW1zZ3N0ciAiVmlzdWFsaXNlcmEgYWxsYSBncmVuYXJzIGhpc3RvcmlrIgotCi0jOiBnaXQtZ3VpLnNoOjI3MTIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKLW1zZ3N0ciAiQmzDpGRkcmEgaSBmaWxlciBmw7ZyICVzIgotCi0jOiBnaXQtZ3VpLnNoOjI3MTQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgotbXNnc3RyICJWaXN1YWxpc2VyYSBoaXN0b3JpayBmw7ZyICVzIgotCi0jOiBnaXQtZ3VpLnNoOjI3MTkgbGliL2RhdGFiYXNlLnRjbDo0MCBsaWIvZGF0YWJhc2UudGNsOjY2Ci1tc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKLW1zZ3N0ciAiRGF0YWJhc3N0YXRpc3RpayIKLQotIzogZ2l0LWd1aS5zaDoyNzIyIGxpYi9kYXRhYmFzZS50Y2w6MzMKLW1zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKLW1zZ3N0ciAiS29tcHJpbWVyYSBkYXRhYmFzIgotCi0jOiBnaXQtZ3VpLnNoOjI3MjUKLW1zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCi1tc2dzdHIgIlZlcmlmaWVyYSBkYXRhYmFzIgotCi0jOiBnaXQtZ3VpLnNoOjI3MzIgZ2l0LWd1aS5zaDoyNzM2IGdpdC1ndWkuc2g6Mjc0MCBsaWIvc2hvcnRjdXQudGNsOjgKLSM6IGxpYi9zaG9ydGN1dC50Y2w6NDAgbGliL3Nob3J0Y3V0LnRjbDo3MgotbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCi1tc2dzdHIgIlNrYXBhIHNrcml2Ym9yZHNpa29uIgotCi0jOiBnaXQtZ3VpLnNoOjI3NDggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyMDEKLW1zZ2lkICJRdWl0IgotbXNnc3RyICJBdnNsdXRhIgotCi0jOiBnaXQtZ3VpLnNoOjI3NTYKLW1zZ2lkICJVbmRvIgotbXNnc3RyICLDhW5ncmEiCi0KLSM6IGdpdC1ndWkuc2g6Mjc1OQotbXNnaWQgIlJlZG8iCi1tc2dzdHIgIkfDtnIgb20iCi0KLSM6IGdpdC1ndWkuc2g6Mjc2MyBnaXQtZ3VpLnNoOjMzNjgKLW1zZ2lkICJDdXQiCi1tc2dzdHIgIktsaXBwIHV0IgotCi0jOiBnaXQtZ3VpLnNoOjI3NjYgZ2l0LWd1aS5zaDozMzcxIGdpdC1ndWkuc2g6MzQ0NSBnaXQtZ3VpLnNoOjM1MzAKLSM6IGxpYi9jb25zb2xlLnRjbDo2OQotbXNnaWQgIkNvcHkiCi1tc2dzdHIgIktvcGllcmEiCi0KLSM6IGdpdC1ndWkuc2g6Mjc2OSBnaXQtZ3VpLnNoOjMzNzQKLW1zZ2lkICJQYXN0ZSIKLW1zZ3N0ciAiS2xpc3RyYSBpbiIKLQotIzogZ2l0LWd1aS5zaDoyNzcyIGdpdC1ndWkuc2g6MzM3NyBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM5Ci0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjgKLW1zZ2lkICJEZWxldGUiCi1tc2dzdHIgIlRhIGJvcnQiCi0KLSM6IGdpdC1ndWkuc2g6Mjc3NiBnaXQtZ3VpLnNoOjMzODEgZ2l0LWd1aS5zaDozNTM0IGxpYi9jb25zb2xlLnRjbDo3MQotbXNnaWQgIlNlbGVjdCBBbGwiCi1tc2dzdHIgIk1hcmtlcmEgYWxsYSIKLQotIzogZ2l0LWd1aS5zaDoyNzg1Ci1tc2dpZCAiQ3JlYXRlLi4uIgotbXNnc3RyICJTa2FwYS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzkxCi1tc2dpZCAiQ2hlY2tvdXQuLi4iCi1tc2dzdHIgIkNoZWNrYSB1dC4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzk3Ci1tc2dpZCAiUmVuYW1lLi4uIgotbXNnc3RyICJCeXQgbmFtbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyODAyCi1tc2dpZCAiRGVsZXRlLi4uIgotbXNnc3RyICJUYSBib3J0Li4uIgotCi0jOiBnaXQtZ3VpLnNoOjI4MDcKLW1zZ2lkICJSZXNldC4uLiIKLW1zZ3N0ciAiw4V0ZXJzdMOkbGwuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjgxNwotbXNnaWQgIkRvbmUiCi1tc2dzdHIgIkbDpHJkaWciCi0KLSM6IGdpdC1ndWkuc2g6MjgxOQotbXNnaWQgIkNvbW1pdEBAdmVyYiIKLW1zZ3N0ciAiQ2hlY2thIGluIgotCi0jOiBnaXQtZ3VpLnNoOjI4MjggZ2l0LWd1aS5zaDozMzA5Ci1tc2dpZCAiTmV3IENvbW1pdCIKLW1zZ3N0ciAiTnkgaW5jaGVja25pbmciCi0KLSM6IGdpdC1ndWkuc2g6MjgzNiBnaXQtZ3VpLnNoOjMzMTYKLW1zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKLW1zZ3N0ciAiTMOkZ2cgdGlsbCBmw7ZyZWfDpWVuZGUgaW5jaGVja25pbmciCi0KLSM6IGdpdC1ndWkuc2g6Mjg0NiBnaXQtZ3VpLnNoOjMyNzAgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDEKLW1zZ2lkICJSZXNjYW4iCi1tc2dzdHIgIlPDtmsgcMOlIG55dHQiCi0KLSM6IGdpdC1ndWkuc2g6Mjg1MgotbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKLW1zZ3N0ciAiS8O2YSBmw7ZyIGluY2hlY2tuaW5nIgotCi0jOiBnaXQtZ3VpLnNoOjI4NTgKLW1zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKLW1zZ3N0ciAiS8O2YSDDpG5kcmFkZSBmaWxlciBmw7ZyIGluY2hlY2tuaW5nIgotCi0jOiBnaXQtZ3VpLnNoOjI4NjQKLW1zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgotbXNnc3RyICJUYSBib3J0IGZyw6VuIGluY2hlY2tuaW5nc2vDtiIKLQotIzogZ2l0LWd1aS5zaDoyODcwIGxpYi9pbmRleC50Y2w6NDQyCi1tc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCi1tc2dzdHIgIsOFdGVyc3TDpGxsIMOkbmRyaW5nYXIiCi0KLSM6IGdpdC1ndWkuc2g6Mjg3OCBnaXQtZ3VpLnNoOjM1ODEgZ2l0LWd1aS5zaDozNjEyCi1tc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCi1tc2dzdHIgIlZpc2EgbWluZHJlIHNhbW1hbmhhbmciCi0KLSM6IGdpdC1ndWkuc2g6Mjg4MiBnaXQtZ3VpLnNoOjM1ODUgZ2l0LWd1aS5zaDozNjE2Ci1tc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCi1tc2dzdHIgIlZpc2EgbWVyIHNhbW1hbmhhbmciCi0KLSM6IGdpdC1ndWkuc2g6Mjg4OSBnaXQtZ3VpLnNoOjMyODMgZ2l0LWd1aS5zaDozMzkyCi1tc2dpZCAiU2lnbiBPZmYiCi1tc2dzdHIgIlNrcml2IHVuZGVyIgotCi0jOiBnaXQtZ3VpLnNoOjI5MDUKLW1zZ2lkICJMb2NhbCBNZXJnZS4uLiIKLW1zZ3N0ciAiTG9rYWwgc2FtbWFuc2xhZ25pbmcuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjkxMAotbXNnaWQgIkFib3J0IE1lcmdlLi4uIgotbXNnc3RyICJBdmJyeXQgc2FtbWFuc2xhZ25pbmcuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjkyMiBnaXQtZ3VpLnNoOjI5NTAKLW1zZ2lkICJBZGQuLi4iCi1tc2dzdHIgIkzDpGdnIHRpbGwuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjkyNgotbXNnaWQgIlB1c2guLi4iCi1tc2dzdHIgIlPDpG5kLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI5MzAKLW1zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgotbXNnc3RyICJUYSBib3J0IGdyZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjk0MCBnaXQtZ3VpLnNoOjM1NjMKLW1zZ2lkICJPcHRpb25zLi4uIgotbXNnc3RyICJBbHRlcm5hdGl2Li4uIgotCi0jOiBnaXQtZ3VpLnNoOjI5NTEKLW1zZ2lkICJSZW1vdmUuLi4iCi1tc2dzdHIgIlRhIGJvcnQuLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjk2MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1Ci1tc2dpZCAiSGVscCIKLW1zZ3N0ciAiSGrDpGxwIgotCi0jOiBnaXQtZ3VpLnNoOjI5NjQgZ2l0LWd1aS5zaDoyOTY4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTggbGliL2Fib3V0LnRjbDoxNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFib3V0ICVzIgotbXNnc3RyICJPbSAlcyIKLQotIzogZ2l0LWd1aS5zaDoyOTkyCi1tc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCi1tc2dzdHIgIldlYmJkb2t1bWVudGF0aW9uIgotCi0jOiBnaXQtZ3VpLnNoOjI5OTUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxCi1tc2dpZCAiU2hvdyBTU0ggS2V5IgotbXNnc3RyICJWaXNhIFNTSC1ueWNrZWwiCi0KLSM6IGdpdC1ndWkuc2g6MzAxNCBnaXQtZ3VpLnNoOjMxNDYKLW1zZ2lkICJVc2FnZSIKLW1zZ3N0ciAiQW52w6RuZG5pbmciCi0KLSM6IGdpdC1ndWkuc2g6MzA5NSBsaWIvYmxhbWUudGNsOjU3MwotbXNnaWQgIkVycm9yIgotbXNnc3RyICJGZWwiCi0KLSM6IGdpdC1ndWkuc2g6MzEyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgImZhdGFsOiBjYW5ub3Qgc3RhdCBwYXRoICVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgotbXNnc3RyICIiCi0iw7ZkZXNkaWdlcnQ6IGt1bmRlIGludGUgdGEgc3RhdHVzIHDDpSBzw7ZrdsOkZ2VuICVzOiBGaWwgZWxsZXIga2F0YWxvZyBzYWtuYXMiCi0KLSM6IGdpdC1ndWkuc2g6MzE1OQotbXNnaWQgIkN1cnJlbnQgQnJhbmNoOiIKLW1zZ3N0ciAiQWt0dWVsbCBncmVuOiIKLQotIzogZ2l0LWd1aS5zaDozMTg1Ci1tc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKLW1zZ3N0ciAiS8O2YWRlIMOkbmRyaW5nYXIgKGtvbW1lciBhdHQgY2hlY2thcyBpbikiCi0KLSM6IGdpdC1ndWkuc2g6MzIwNQotbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCi1tc2dzdHIgIk9rw7ZhZGUgw6RuZHJpbmdhciIKLQotIzogZ2l0LWd1aS5zaDozMjc2Ci1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKLW1zZ3N0ciAiS8O2YSDDpG5kcmFkZSIKLQotIzogZ2l0LWd1aS5zaDozMjk1IGxpYi90cmFuc3BvcnQudGNsOjEzNyBsaWIvdHJhbnNwb3J0LnRjbDoyMjkKLW1zZ2lkICJQdXNoIgotbXNnc3RyICJTw6RuZCIKLQotIzogZ2l0LWd1aS5zaDozMzMwCi1tc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIklubGVkYW5kZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKLQotIzogZ2l0LWd1aS5zaDozMzMxCi1tc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIlV0w7ZrYXQgaW5jaGVja25pbmdzbWVkZGVsYW5kZToiCi0KLSM6IGdpdC1ndWkuc2g6MzMzMgotbXNnaWQgIkFtZW5kZWQgSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIlV0w7ZrYXQgaW5sZWRhbmRlIGluY2hlY2tuaW5nc21lZGRlbGFuZGU6IgotCi0jOiBnaXQtZ3VpLnNoOjMzMzMKLW1zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiVXTDtmthdCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIGbDtnIgc2FtbWFuc2xhZ25pbmc6IgotCi0jOiBnaXQtZ3VpLnNoOjMzMzQKLW1zZ2lkICJNZXJnZSBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIkluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciBzYW1tYW5zbGFnbmluZzoiCi0KLSM6IGdpdC1ndWkuc2g6MzMzNQotbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiSW5jaGVja25pbmdzbWVkZGVsYW5kZToiCi0KLSM6IGdpdC1ndWkuc2g6MzM4NCBnaXQtZ3VpLnNoOjM1MzggbGliL2NvbnNvbGUudGNsOjczCi1tc2dpZCAiQ29weSBBbGwiCi1tc2dzdHIgIktvcGllcmEgYWxsYSIKLQotIzogZ2l0LWd1aS5zaDozNDA4IGxpYi9ibGFtZS50Y2w6MTA1Ci1tc2dpZCAiRmlsZToiCi1tc2dzdHIgIkZpbDoiCi0KLSM6IGdpdC1ndWkuc2g6MzUyNgotbXNnaWQgIlJlZnJlc2giCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NzIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NDMKK21zZ2lkICJVcGRhdGUiCiBtc2dzdHIgIlVwcGRhdGVyYSIKIAotIzogZ2l0LWd1aS5zaDozNTQ3Ci1tc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICJNaW5za2EgdGVja2Vuc25pdHRzc3RvcmxlayIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY4OSBhZGQtaW50ZXJhY3RpdmUuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YWdlICclcyciCittc2dzdHIgImt1bmRlIGludGUga8O2YSBcIiVzXCIiCiAKLSM6IGdpdC1ndWkuc2g6MzU1MQotbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKLW1zZ3N0ciAiw5ZrYSB0ZWNrZW5zbml0dHNzdG9ybGVrIgorIzogYWRkLWludGVyYWN0aXZlLmM6Njk1IGFkZC1pbnRlcmFjdGl2ZS5jOjg4NCBzZXF1ZW5jZXIuYzozMzE3CisjOiBidWlsdGluL3JlYmFzZS5jOjg5OQorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBpbmRleCIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgaW5kZXhldCIKIAotIzogZ2l0LWd1aS5zaDozNTU5IGxpYi9ibGFtZS50Y2w6Mjk0Ci1tc2dpZCAiRW5jb2RpbmciCi1tc2dzdHIgIlRlY2tlbmtvZG5pbmciCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInVwZGF0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ1cGRhdGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gInVwcGRhdGVyYWRlICVkIHPDtmt2w6RnXG4iCittc2dzdHJbMV0gInVwcGRhdGVyYWRlICVkIHPDtmt2w6RnYXJcbiIKIAotIzogZ2l0LWd1aS5zaDozNTcwCi1tc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgotbXNnc3RyICJBbnbDpG5kL8OldGVyc3TDpGxsIGRlbCIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcxNiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY3OAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAibm90ZTogJXMgaXMgdW50cmFja2VkIG5vdy5cbiIKK21zZ3N0ciAib2JzZXJ2ZXJhOiAlcyBzcMOlcmFzIGludGUgbMOkbmdyZS5cbiIKIAotIzogZ2l0LWd1aS5zaDozNTc1Ci1tc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgotbXNnc3RyICJBbnbDpG5kL8OldGVyc3TDpGxsIHJhZCIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcyMSBhcHBseS5jOjQxMTAgYnVpbHRpbi9jaGVja291dC5jOjI4MQorIzogYnVpbHRpbi9yZXNldC5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICJtYWtlX2NhY2hlX2VudHJ5IG1pc3NseWNrYWRlcyBmw7ZyIHPDtmt2w6RnZW4gXCIlc1wiIgogCi0jOiBnaXQtZ3VpLnNoOjM1OTQKLW1zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKLW1zZ3N0ciAiU3RhcnRhIHZlcmt0eWcgZsO2ciBzYW1tYW5zbGFnbmluZyIKLQotIzogZ2l0LWd1aS5zaDozNTk5Ci1tc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgotbXNnc3RyICJBbnbDpG5kIHZlcnNpb25lbiBmcsOlbiBmasOkcnJhcmtpdmV0IgotCi0jOiBnaXQtZ3VpLnNoOjM2MDMKLW1zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKLW1zZ3N0ciAiQW52w6RuZCBsb2thbGEgdmVyc2lvbmVuIgotCi0jOiBnaXQtZ3VpLnNoOjM2MDcKLW1zZ2lkICJSZXZlcnQgVG8gQmFzZSIKLW1zZ3N0ciAiw4V0ZXJzdMOkbGwgdGlsbCBiYXN2ZXJzaW9uZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzYyNQotbXNnaWQgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgIlZpc3VhbGlzZXJhIMOkbmRyaW5nYXJuYSBpIHVuZGVybW9kdWxlbiIKLQotIzogZ2l0LWd1aS5zaDozNjI5Ci1tc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiVmlzdWFsaXNlcmEgZ3JlbmVucyBoaXN0b3JpayBpIHVuZGVybW9kdWxlbiIKLQotIzogZ2l0LWd1aS5zaDozNjMzCi1tc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJWaXN1YWxpc2VyYSBhbGxhIGdyZW5hcnMgaGlzdG9yaWsgaSB1bmRlcm1vZHVsZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzYzOAotbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiU3RhcnRhIGdpdCBndWkgaSB1bmRlcm1vZHVsZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzY3MwotbXNnaWQgIlVuc3RhZ2UgSHVuayBGcm9tIENvbW1pdCIKLW1zZ3N0ciAiVGEgYm9ydCBkZWwgdXIgaW5jaGVja25pbmdza8O2IgotCi0jOiBnaXQtZ3VpLnNoOjM2NzUKLW1zZ2lkICJVbnN0YWdlIExpbmVzIEZyb20gQ29tbWl0IgotbXNnc3RyICJUYSBib3J0IHJhZGVyIHVyIGluY2hlY2tuaW5nc2vDtiIKLQotIzogZ2l0LWd1aS5zaDozNjc3Ci1tc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgotbXNnc3RyICJUYSBib3J0IHJhZCB1ciBpbmNoZWNrbmluZ3Nrw7YiCi0KLSM6IGdpdC1ndWkuc2g6MzY4MAotbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKLW1zZ3N0ciAiU3TDpGxsIGRlbCBpIGluY2hlY2tuaW5nc2vDtiIKLQotIzogZ2l0LWd1aS5zaDozNjgyCi1tc2dpZCAiU3RhZ2UgTGluZXMgRm9yIENvbW1pdCIKLW1zZ3N0ciAiU3TDpGxsIHJhZGVyIGkgaW5jaGVja25pbmdza8O2IgotCi0jOiBnaXQtZ3VpLnNoOjM2ODQKLW1zZ2lkICJTdGFnZSBMaW5lIEZvciBDb21taXQiCi1tc2dzdHIgIlN0w6RsbCByYWQgaSBpbmNoZWNrbmluZ3Nrw7YiCi0KLSM6IGdpdC1ndWkuc2g6MzcwOQotbXNnaWQgIkluaXRpYWxpemluZy4uLiIKLW1zZ3N0ciAiSW5pdGllcmFyLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjM4NTIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgotIlxuIgotIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgotImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgotImJ5ICVzOlxuIgotIlxuIgotbXNnc3RyICIiCi0iRGV0IGZpbm5zIG3DtmpsaWdhIHByb2JsZW0gbWVkIG1pbGrDtnZhcmlhYmxlci5cbiIKLSJcbiIKLSJGw7ZsamFuZGUgbWlsasO2dmFyaWFibGVyIGtvbW1lciB0cm9saWdlbiBhdHRcbiIKLSJpZ25vcmVyYXMgYXYgYWxsYSBHaXQtdW5kZXJwcm9jZXNzZXIgc29tIGvDtnJzXG4iCi0iYXYgJXM6XG4iCi0iXG4iCi0KLSM6IGdpdC1ndWkuc2g6Mzg4MQotbXNnaWQgIiIKLSJcbiIKLSJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCi0iVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgotbXNnc3RyICIiCi0iXG4iCi0iRGV0dGEgYmVyb3IgcMOlIGV0dCBrw6RudCBwcm9ibGVtIG1lZFxuIgotIlRjbC1iaW7DpHJlbiBzb20gZsO2bGplciBtZWQgQ3lnd2luLiIKLQotIzogZ2l0LWd1aS5zaDozODg2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIlxuIgotIlxuIgotIkEgZ29vZCByZXBsYWNlbWVudCBmb3IgJXNcbiIKLSJpcyBwbGFjaW5nIHZhbHVlcyBmb3IgdGhlIHVzZXIubmFtZSBhbmRcbiIKLSJ1c2VyLmVtYWlsIHNldHRpbmdzIGludG8geW91ciBwZXJzb25hbFxuIgotIn4vLmdpdGNvbmZpZyBmaWxlLlxuIgotbXNnc3RyICIiCi0iXG4iCi0iXG4iCi0iRHUga2FuIGVyc8OkdHRhICVzXG4iCi0ibWVkIGF0dCBsw6RnZ2EgaW4gdsOkcmRlbiBmw7ZyIGluc3TDpGxsbmluZ2FybmFcbiIKLSJ1c2VyLm5hbWUgb2NoIHVzZXIuZW1haWwgaSBkaW4gcGVyc29ubGlnYVxuIgotIn4vLmdpdGNvbmZpZy1maWwuXG4iCi0KLSM6IGxpYi9saW5lLnRjbDoxNwotbXNnaWQgIkdvdG8gTGluZToiCi1tc2dzdHIgIkfDpSB0aWxsIHJhZDoiCi0KLSM6IGxpYi9saW5lLnRjbDoyMwotbXNnaWQgIkdvIgotbXNnc3RyICJHw6UiCi0KLSM6IGxpYi9jb25zb2xlLnRjbDo1OQotbXNnaWQgIldvcmtpbmcuLi4gcGxlYXNlIHdhaXQuLi4iCi1tc2dzdHIgIkFyYmV0YXIuLi4gdsOkbnRhLi4uIgotCi0jOiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2NoZWNrb3V0X29wLnRjbDoxNDYgbGliL3NzaGtleS50Y2w6NTUKLSM6IGxpYi9kYXRhYmFzZS50Y2w6MzAKLW1zZ2lkICJDbG9zZSIKLW1zZ3N0ciAiU3TDpG5nIgotCi0jOiBsaWIvY29uc29sZS50Y2w6MTg2Ci1tc2dpZCAiU3VjY2VzcyIKLW1zZ3N0ciAiTHlja2FkZXMiCi0KLSM6IGxpYi9jb25zb2xlLnRjbDoyMDAKLW1zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCi1tc2dzdHIgIkZlbDogS29tbWFuZG8gbWlzc2x5Y2thZGVzIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKLW1zZ3N0ciAiSMOkbXRhciAlcyBmcsOlbiAlcyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCi1tc2dzdHIgIsO2ZGVzZGlnZXJ0OiBLdW5kZSBpbnRlIHNsw6UgdXBwICVzIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKLW1zZ3N0ciAiR3JlbmVuIFwiJXNcIiBmaW5ucyBpbnRlLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgotbXNnc3RyICJLdW5kZSBpbnRlIGtvbmZpZ3VyZXJhIGbDtnJlbmtsYWQgZ2l0LXB1bGwgZsO2ciAnJXMnLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMDIgbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiR3JlbmVuIFwiJXNcIiBmaW5ucyByZWRhbi4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgotIlxuIgotIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCi0iQSBtZXJnZSBpcyByZXF1aXJlZC4iCi1tc2dzdHIgIiIKLSJHcmVuZW4gXCIlc1wiIGZpbm5zIHJlZGFuLlxuIgotIlxuIgotIkRlbiBrYW4gaW50ZSBzbmFiYnNwb2xhcyB0aWxsICVzLlxuIgotIkVuIHNhbW1hbnNsYWduaW5nIGtyw6R2cy4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiU2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2luIFwiJXNcIiBzdMO2ZHMgaW50ZS4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKLW1zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQgdXBwZGF0ZXJhIFwiJXNcIi4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjc0Ci1tc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgotbXNnc3RyICJLw7ZvbXLDpWRldCAoaW5kZXgpIMOkciByZWRhbiBsw6VzdC4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5Ci1tc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCi1tc2dzdHIgIiIKLSJEZXQgc2VuYXN0ZSBpbmzDpHN0YSB0aWxsc3TDpW5kZXQgbW90c3ZhcmFyIGludGUgdGlsbHN0w6VuZGV0IGkgYXJraXZldC5cbiIKLSJcbiIKLSJFdHQgYW5uYXQgR2l0LXByb2dyYW0gaGFyIMOkbmRyYXQgYXJraXZldCBzZWRhbiBzZW5hc3RlIGF2c8O2a25pbmdlbi4gRHUgbcOlc3RlICIKLSJ1dGbDtnJhIGVuIG55IHPDtmtuaW5nIGlubmFuIGRlbiBha3R1ZWxsYSBncmVuZW4ga2FuIMOkbmRyYXMuXG4iCi0iXG4iCi0iU8O2a25pbmdlbiBrb21tZXIgYXR0IHN0YXJ0YXMgYXV0b21hdGlza3QgbnUuXG4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKLW1zZ3N0ciAiVXBwZGF0ZXJhciBhcmJldHNrYXRhbG9nZW4gdGlsbCBcIiVzXCIuLi4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Ci1tc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCi1tc2dzdHIgImZpbGVyIHV0Y2hlY2thZGUiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKLW1zZ3N0ciAiQXZicnl0ZXIgdXRjaGVja25pbmcgYXYgXCIlc1wiIChzYW1tYW5zbGFnbmluZyBww6UgZmlsbml2w6Uga3LDpHZzKS4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc3Ci1tc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCi1tc2dzdHIgIlNhbW1hbnNsYWduaW5nIHDDpSBmaWxuaXbDpSBrcsOkdnMuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgotbXNnc3RyICJTdGFubmFyIHDDpSBncmVuZW4gXCIlc1wiLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKLW1zZ2lkICIiCi0iWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCi0iXG4iCi0iSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCi0iQ2hlY2tvdXQnLiIKLW1zZ3N0ciAiIgotIkR1IMOkciBpbnRlIGzDpG5ncmUgcMOlIGVuIGxva2FsIGdyZW4uXG4iCi0iXG4iCi0iT20gZHUgdmlsbGUgdmFyYSBww6UgZW4gZ3JlbiBza2FwYXIgZHUgZW4gbnUsIGJhc2VyYWQgcMOlIFwiRGVubmEgZnLDpW5rb3BwbGFkZSAiCi0idXRjaGVja25pbmdcIi4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCi1tc2dzdHIgIkNoZWNrYWRlIHV0IFwiJXNcIi4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKLW1zZ3N0ciAiIgotIk9tIGR1IMOldGVyc3TDpGxsZXIgXCIlc1wiIHRpbGwgXCIlc1wiIGfDpXIgZsO2bGphbmRlIGluY2hlY2tuaW5nYXIgZsO2cmxvcmFkZToiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Ci1tc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKLW1zZ3N0ciAiRGV0IGthbnNrZSBpbnRlIMOkciBzw6UgZW5rZWx0IGF0dCDDpXRlcnNrYXBhIGbDtnJsb3JhZGUgaW5jaGVja25pbmdhci4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXQgJyVzJz8iCi1tc2dzdHIgIsOFdGVyc3TDpGxsYSBcIiVzXCI/IgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NiBsaWIvdG9vbHNfZGxnLnRjbDozMzYKLW1zZ2lkICJWaXN1YWxpemUiCi1tc2dzdHIgIlZpc3VhbGlzZXJhIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUKLW1zZ2lkICJSZXNldCIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjc1MSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY1NQorbXNnaWQgIlJldmVydCIKIG1zZ3N0ciAiw4V0ZXJzdMOkbGwiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTc5IGxpYi90cmFuc3BvcnQudGNsOjE0MSBsaWIvcmVtb3RlX2FkZC50Y2w6MzQKLSM6IGxpYi9icm93c2VyLnRjbDoyOTIgbGliL21lcmdlLnRjbDoxNzQgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NDUgbGliL29wdGlvbi50Y2w6MTI3IGxpYi90b29sc19kbGcudGNsOjQxCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMDIgbGliL3Rvb2xzX2RsZy50Y2w6MzQ1IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMgotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzcKLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozNAotbXNnaWQgIkNhbmNlbCIKLW1zZ3N0ciAiQXZicnl0IgorIzogYWRkLWludGVyYWN0aXZlLmM6NzY3Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIEhFQURee3RyZWV9IgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIEhFQURee3RyZWV9IgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYzNQotIywgdGNsLWZvcm1hdAorIzogYWRkLWludGVyYWN0aXZlLmM6ODA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjMxCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJyZXZlcnRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInJldmVydGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIsOldGVyc3TDpGxsZGUgJWQgc8O2a3bDpGdcbiIKK21zZ3N0clsxXSAiw6V0ZXJzdMOkbGxkZSAlZCBzw7ZrdsOkZ2FyXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg1NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyB1bnRyYWNrZWQgZmlsZXMuXG4iCittc2dzdHIgIkluZ2Egb3Nww6VyYWRlIGZpbGVyLlxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4NjAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2ODkKK21zZ2lkICJBZGQgdW50cmFja2VkIgorbXNnc3RyICJMw6RnZyB0aWxsIG9zcMOlcmFkIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgImFkZGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAiYWRkZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAibGFkZSB0aWxsICVkIHPDtmt2w6RnXG4iCittc2dzdHJbMV0gImxhZGUgdGlsbCAlZCBzw7ZrdsOkZ2FyXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkxNworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXMiCittc2dzdHIgImlnbm9yZXJhciBlaiBzYW1tYW5zbGFnZW46ICVzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MjkgYWRkLXBhdGNoLmM6MTY3NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAiRW5kYXN0IGJpbsOkcmEgZmlsZXIgw6RuZHJhZGUuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkzMSBhZGQtcGF0Y2guYzoxNjczIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjaGFuZ2VzLlxuIgorbXNnc3RyICJJbmdhIMOkbmRyaW5nYXIuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkzNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNzYKK21zZ2lkICJQYXRjaCB1cGRhdGUiCittc2dzdHIgIlVwcGRhdGVyYSBwYXRjaCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTc0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc1NAorbXNnaWQgIlJldmlldyBkaWZmIgorbXNnc3RyICJHcmFuc2thIGRpZmYiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDIKK21zZ2lkICJzaG93IHBhdGhzIHdpdGggY2hhbmdlcyIKK21zZ3N0ciAidmlzYSBzw7ZrdsOkZ2FyIG1lZCDDpG5kcmluZ2FyIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA0Cittc2dpZCAiYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICJsw6RnZyBhcmJldHNrYXRhbG9nZW5zIHRpbGxzdMOlbmQgdGlsbCBrw7ZhZGUgw6RuZHJpbmdhciIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNgorbXNnaWQgInJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uIgorbXNnc3RyICLDpXRlcnN0w6RsbCBrw7ZhZGUgw6RuZHJpbmdhciB0aWxsYmFrYSB0aWxsIEhFQUQtdmVyc2lvbmVuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA4Cittc2dpZCAicGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5IgorbXNnc3RyICJ2w6RsaiBzdHlja2VuIG9jaCB1cHBkYXRlcmEgc2VsZWt0aXZ0IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEwCittc2dpZCAidmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgInZpc2Egc2tpbGxuYWQgbWVsbGFuIEhFQUQgb2NoIGluZGV4IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEyCittc2dpZCAiYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICJsw6RnZyBpbm5laMOlbGwgaSBvc3DDpXJhZGUgZmlsZXIgdGlsbCBrw7ZhZGUgw6RuZHJpbmdhciIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAyMCBhZGQtaW50ZXJhY3RpdmUuYzoxMDY5Cittc2dpZCAiUHJvbXB0IGhlbHA6IgorbXNnc3RyICJLb21tYW5kb3JhZHNoasOkbHA6IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDIyCittc2dpZCAic2VsZWN0IGEgc2luZ2xlIGl0ZW0iCittc2dzdHIgIm1hcmtlcmEgZW4gcG9zdCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAyNAorbXNnaWQgInNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zIgorbXNnc3RyICJtYXJrZXJhIGludGVydmFsbCBhdiBwb3N0ZXIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMjYKK21zZ2lkICJzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzIgorbXNnc3RyICJtYXJrZXJhIGZsZXJhIGludGVydmFsbCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAyOCBhZGQtaW50ZXJhY3RpdmUuYzoxMDczCittc2dpZCAic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIKK21zZ3N0ciAibWFya2VyYSBwb3N0IGJhc2VyYWQgcMOlIHVuaWt0IHByZWZpeCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAzMAorbXNnaWQgInVuc2VsZWN0IHNwZWNpZmllZCBpdGVtcyIKK21zZ3N0ciAiYXZtYXJrZXJhIGFuZ2l2bmEgcG9zdGVyIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDMyCittc2dpZCAiY2hvb3NlIGFsbCBpdGVtcyIKK21zZ3N0ciAidsOkbGogYWxsYSBwb3N0ZXIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMzQKK21zZ2lkICIoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIih0b210KSBhdnNsdXRhIG1hcmtlcmluZyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA3MQorbXNnaWQgInNlbGVjdCBhIG51bWJlcmVkIGl0ZW0iCittc2dzdHIgIm1hcmtlcmEgZW4gbnVtcmVyYWQgcG9zdCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA3NQorbXNnaWQgIihlbXB0eSkgc2VsZWN0IG5vdGhpbmciCittc2dzdHIgIih0b210KSBtYXJrZXJhIGluZ2VudGluZyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA4MyBidWlsdGluL2NsZWFuLmM6ODIyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg1MQorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiBLb21tYW5kb24gKioqIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDg0IGJ1aWx0aW4vY2xlYW4uYzo4MjMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODQ4Cittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgIlZhZCBudSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTEzNiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInN0YWdlZCIKK21zZ3N0ciAia8O2YWQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMzYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJ1bnN0YWdlZCIKK21zZ3N0ciAiZWoga8O2YWQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMzYgYXBwbHkuYzo0OTY3IGFwcGx5LmM6NDk3MCBidWlsdGluL2FtLmM6MjI1MQorIzogYnVpbHRpbi9hbS5jOjIyNTQgYnVpbHRpbi9jbG9uZS5jOjEyMyBidWlsdGluL2ZldGNoLmM6MTQ0CisjOiBidWlsdGluL21lcmdlLmM6Mjc0IGJ1aWx0aW4vcHVsbC5jOjE4OSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDA5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDUKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTQ4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAicGF0aCIKK21zZ3N0ciAic8O2a3bDpGciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExNDMKK21zZ2lkICJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAia3VuZGUgaW50ZSB1cHBkYXRlcmEgaW5kZXhldCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTE1NyBidWlsdGluL2NsZWFuLmM6Nzg3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJCeWUuXG4iCittc2dzdHIgIkhlaiBkw6UuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjMzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkvDtmEgw6RuZHJhdCBsw6RnZSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MzQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI5CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiS8O2YSBib3J0dGFnbmluZyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMwCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkvDtmEgc3R5Y2tldCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MzcKIG1zZ2lkICIiCi0iRmFpbGVkIHRvIHNldCBjdXJyZW50IGJyYW5jaC5cbiIKLSJcbiIKLSJUaGlzIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG9ubHkgcGFydGlhbGx5IHN3aXRjaGVkLiAgV2Ugc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgIgotInlvdXIgZmlsZXMsIGJ1dCBmYWlsZWQgdG8gdXBkYXRlIGFuIGludGVybmFsIEdpdCBmaWxlLlxuIgotIlxuIgotIlRoaXMgc2hvdWxkIG5vdCBoYXZlIG9jY3VycmVkLiAgJXMgd2lsbCBub3cgY2xvc2UgYW5kIGdpdmUgdXAuIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorInN0YWdpbmcuIgogbXNnc3RyICIiCi0iS3VuZGUgaW50ZSBzdMOkbGxhIGluIGFrdHVlbGwgZ3Jlbi5cbiIKLSJcbiIKLSJBcmJldHNrYXRhbG9nZW4gaGFyIGJhcmEgdsOkeGxhdHMgZGVsdmlzLiBWaSB1cHBkYXRlcmFkZSBmaWxlcm5hIHV0YW4gIgotInByb2JsZW0sIG1lbiBrdW5kZSBpbnRlIHVwcGRhdGVyYSBlbiBpbnRlcm4gZmlsIGkgR2l0LlxuIgotIlxuIgotIkRldHRhIHNrdWxsZSBpbnRlIGhhIGjDpG50LiAlcyBrb21tZXIgbnUgc3TDpG5nYXMgb2NoIGdlIHVwcC4iCisiT20gcGF0Y2hlbiBrYW4gYXBwbGljZXJhcyByZW50IGtvbW1lciBkZXQgcmVkaWdlcmFkZSBzdHlja2V0IGF0dCBrw7ZhcyAiCisib21lZGVsYmFydC4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjYgbGliL3JlbW90ZV9hZGQudGNsOjEzMgotIywgdGNsLWZvcm1hdAotbXNnaWQgImZldGNoICVzIgotbXNnc3RyICJow6RtdGEgJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgotbXNnc3RyICJIw6RtdGFyIG55YSDDpG5kcmluZ2FyIGZyw6VuICVzIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxOAotIywgdGNsLWZvcm1hdAotbXNnaWQgInJlbW90ZSBwcnVuZSAlcyIKLW1zZ3N0ciAiZmrDpHJyYm9ydHRhZ25pbmcgJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjE5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gJXMiCi1tc2dzdHIgIlRhciBib3J0IHNww6VyYW5kZSBncmVuYXIgc29tIHRhZ2l0cyBib3J0IGZyw6VuICVzIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyNQotbXNnaWQgImZldGNoIGFsbCByZW1vdGVzIgotbXNnc3RyICJow6RtdGEgYWxsYSBmasOkcnJhcmtpdiIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MjYKLW1zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tIGFsbCByZW1vdGVzIgotbXNnc3RyICJIw6RtdGFyIG55YSDDpG5kcmluZ2FyIGZyw6VuIGFsbGEgZmrDpHJyYXJraXYiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjQwCi1tc2dpZCAicmVtb3RlIHBydW5lIGFsbCByZW1vdGVzIgotbXNnc3RyICJyZW5zYSBhbGxhIGZqw6RycmFya2l2IgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo0MQotbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tIGFsbCByZW1vdGVzIgotbXNnc3RyICJSZW5zYXIgc3DDpXJhbmRlIGdyZW5hciBzb20gdGFnaXRzIGJvcnQsIGZyw6VuIGFsbGEgZmrDpHJyYXJraXYiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjU0IGxpYi90cmFuc3BvcnQudGNsOjkyIGxpYi90cmFuc3BvcnQudGNsOjExMAotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgInB1c2ggJXMiCi1tc2dzdHIgInPDpG5kICVzIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo1NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKLW1zZ3N0ciAiU8OkbmRlciDDpG5kcmluZ2FyIHRpbGwgJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjkzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWlycm9yaW5nIHRvICVzIgotbXNnc3RyICJTcGVnbGFyIHRpbGwgJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjExMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlB1c2hpbmcgJXMgJXMgdG8gJXMiCi1tc2dzdHIgIlPDpG5kZXIgJXMgJXMgdGlsbCAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTMyCi1tc2dpZCAiUHVzaCBCcmFuY2hlcyIKLW1zZ3N0ciAiU8OkbmQgZ3JlbmFyIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNDcKLW1zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCi1tc2dzdHIgIkvDpGxsZ3JlbmFyIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjIKLW1zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgotbXNnc3RyICJEZXN0aW5hdGlvbnNhcmtpdiIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTY1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTEKLW1zZ2lkICJSZW1vdGU6IgotbXNnc3RyICJGasOkcnJhcmtpdjoiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjE4NyBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjcyCi1tc2dpZCAiQXJiaXRyYXJ5IExvY2F0aW9uOiIKLW1zZ3N0ciAiR29kdHlja2xpZyBwbGF0czoiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjIwNQotbXNnaWQgIlRyYW5zZmVyIE9wdGlvbnMiCi1tc2dzdHIgIsOWdmVyZsO2cmluZ3NhbHRlcm5hdGl2IgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyMDcKLW1zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKLW1zZ3N0ciAiVHZpbmdhIMO2dmVyc2tyaXZuaW5nIGF2IGJlZmludGxpZyBncmVuIChrYW4ga2FzdGEgYm9ydCDDpG5kcmluZ2FyKSIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MjExCi1tc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCi1tc2dzdHIgIkFudsOkbmQgdHVudCBwYWtldCAoZsO2ciBsw6VuZ3NhbW1hIG7DpHR2ZXJrc2Fuc2x1dG5pbmdhcikiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjIxNQotbXNnaWQgIkluY2x1ZGUgdGFncyIKLW1zZ3N0ciAiVGEgbWVkIHRhZ2dhciIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjIwCi1tc2dpZCAiQWRkIFJlbW90ZSIKLW1zZ3N0ciAiTMOkZ2cgdGlsbCBmasOkcnJhcmtpdiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjI1Ci1tc2dpZCAiQWRkIE5ldyBSZW1vdGUiCi1tc2dzdHIgIkzDpGdnIHRpbGwgbnl0dCBmasOkcnJhcmtpdiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjMwIGxpYi90b29sc19kbGcudGNsOjM3Ci1tc2dpZCAiQWRkIgotbXNnc3RyICJMw6RnZyB0aWxsIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzkKLW1zZ2lkICJSZW1vdGUgRGV0YWlscyIKLW1zZ3N0ciAiRGV0YWxqZXIgZsO2ciBmasOkcnJhcmtpdiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjQxIGxpYi90b29sc19kbGcudGNsOjUxIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0NAotbXNnaWQgIk5hbWU6IgotbXNnc3RyICJOYW1uOiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjUwCi1tc2dpZCAiTG9jYXRpb246IgotbXNnc3RyICJQbGF0czoiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MAotbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgotbXNnc3RyICJZdHRlcmxpZ2FyZSDDpXRnw6RyZCIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjYzCi1tc2dpZCAiRmV0Y2ggSW1tZWRpYXRlbHkiCi1tc2dzdHIgIkjDpG10YSBvbWVkZWxiYXJ0IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjkKLW1zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgotbXNnc3RyICJJbml0aWVyYSBmasOkcnJhcmtpdiBvY2ggc8OkbmQgdGlsbCIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjc1Ci1tc2dpZCAiRG8gTm90aGluZyBFbHNlIE5vdyIKLW1zZ3N0ciAiR8O2ciBpbmdlbnQgbWVyIG51IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTAwCi1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIHJlbW90ZSBuYW1lLiIKLW1zZ3N0ciAiQW5nZSBldHQgbmFtbiBmw7ZyIGZqw6RycmFya2l2ZXQuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTEzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCi1tc2dzdHIgIlwiJXNcIiBrYW4gaW50ZSBhbnbDpG5kYXMgc29tIG5hbW4gcMOlIGZqw6RycmFya2l2ZXQuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTI0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBsw6RnZ2EgdGlsbCBmasOkcnJhcmtpdmV0IFwiJXNcIiBww6UgcGxhdHNlbiBcIiVzXCIuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgdGhlICVzIgotbXNnc3RyICJIw6RtdGFyICVzIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKLW1zZ3N0ciAiVmV0IGludGUgaHVyIGFya2l2ZXQgcMOlIHBsYXRzZW4gXCIlc1wiIHNrYWxsIGluaXRpZXJhcy4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHVwIHRoZSAlcyAoYXQgJXMpIgotbXNnc3RyICJLb25maWd1cmVyYXIgJXMgKHDDpSAlcykiCi0KLSM6IGxpYi9icm93c2VyLnRjbDoxNwotbXNnaWQgIlN0YXJ0aW5nLi4uIgotbXNnc3RyICJTdGFydGFyLi4uIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MjcKLW1zZ2lkICJGaWxlIEJyb3dzZXIiCi1tc2dzdHIgIkZpbGJsw6RkZHJhcmUiCi0KLSM6IGxpYi9icm93c2VyLnRjbDoxMzIgbGliL2Jyb3dzZXIudGNsOjE0OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvYWRpbmcgJXMuLi4iCi1tc2dzdHIgIkzDpHNlciAlcy4uLiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjE5MwotbXNnaWQgIltVcCBUbyBQYXJlbnRdIgotbXNnc3RyICJbVXBwIHRpbGwgZsO2csOkbGRlcl0iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNzUgbGliL2Jyb3dzZXIudGNsOjI4MgotbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCi1tc2dzdHIgIkJsw6RkZHJhIGZpbGVyIHDDpSBncmVuZW4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyODggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MjIKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE4Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNzQKLW1zZ2lkICJCcm93c2UiCi1tc2dzdHIgIkJsw6RkZHJhIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6Mjk3IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM1IGxpYi90b29sc19kbGcudGNsOjMyMQotbXNnaWQgIlJldmlzaW9uIgotbXNnc3RyICJSZXZpc2lvbiIKLQotIzogbGliL21lcmdlLnRjbDoxMworIzogYWRkLXBhdGNoLmM6NDAKIG1zZ2lkICIiCi0iQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgotIlxuIgotIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKIG1zZ3N0ciAiIgotIkthbiBpbnRlIHNsw6UgaWhvcCB2aWQgdXTDtmtuaW5nLlxuIgotIlxuIgotIkR1IG3DpXN0ZSBnw7ZyYSBmw6RyZGlnIHV0w7ZrbmluZ2VuIGF2IGluY2hlY2tuaW5nZW4gaW5uYW4gZHUgcMOlYsO2cmphciBuw6Vnb24gIgotInNsYWdzIHNhbW1hbnNsYWduaW5nLlxuIgorInkgLSBrw7ZhIHN0eWNrZXRcbiIKKyJuIC0ga8O2YSBpbnRlIHN0eWNrZXRcbiIKKyJxIC0gYXZzbHV0YTsga8O2YSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZVxuIgorImEgLSBrw7ZhIHN0eWNrZXQgb2NoIGFsbGEgZsO2bGphbmRlIGkgZmlsZW5cbiIKKyJkIC0ga8O2YSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZSBpIGZpbGVuXG4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjcKKyM6IGFkZC1wYXRjaC5jOjU0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMworIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIlN0YXNoOmEgw6RuZHJhdCBsw6RnZSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiU3Rhc2g6YSBib3J0dGFnbmluZyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NTYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIlN0YXNoOmEgc3R5Y2tldCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NTgKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGEgbWVyZ2UgY2FuIGJlIHBlcmZvcm1lZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJzdGFzaGluZy4iCiBtc2dzdHIgIiIKLSJEZXQgc2VuYXN0ZSBpbmzDpHN0YSB0aWxsc3TDpW5kZXQgbW90c3ZhcmFyIGludGUgdGlsbHN0w6VuZGV0IGkgYXJraXZldC5cbiIKLSJcbiIKLSJFdHQgYW5uYXQgR2l0LXByb2dyYW0gaGFyIMOkbmRyYXQgYXJraXZldCBzZWRhbiBzZW5hc3RlIGF2c8O2a25pbmdlbi4gRHUgbcOlc3RlICIKLSJ1dGbDtnJhIGVuIG55IHPDtmtuaW5nIGlubmFuIGR1IGthbiB1dGbDtnJhIGVuIHNhbW1hbnNsYWduaW5nLlxuIgotIlxuIgotIlPDtmtuaW5nZW4ga29tbWVyIGF0dCBzdGFydGFzIGF1dG9tYXRpc2t0IG51LlxuIgorIk9tIHBhdGNoZW4ga2FuIGFwcGxpY2VyYXMgcmVudCBrb21tZXIgZGV0IHJlZGlnZXJhZGUgc3R5Y2tldCBhdHQgbMOkZ2dhcyB0aWxsICIKKyJpIFwic3Rhc2hcIiBvbWVkZWxiYXJ0LiIKIAotIzogbGliL21lcmdlLnRjbDo0NQotIywgdGNsLWZvcm1hdAorIzogYWRkLXBhdGNoLmM6NjEKIG1zZ2lkICIiCi0iWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKLSJcbiIKLSJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCi0iXG4iCi0iWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCi0ibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCiBtc2dzdHIgIiIKLSJEdSDDpHIgbWl0dCBpIGVuIHNhbW1hbnNsYWduaW5nIG1lZCBrb25mbGlrdGVyLlxuIgotIlxuIgotIkZpbGVuICVzIGhhciBzYW1tYW5zbGFnbmluZ3Nrb25mbGlrdGVyLlxuIgotIlxuIgotIkR1IG3DpXN0ZSBsw7ZzYSBkZW0sIGvDtmEgZmlsZW4gb2NoIGNoZWNrYSBpbiBmw7ZyIGF0dCBmdWxsYm9yZGEgZGVuIGFrdHVlbGxhICIKLSJzYW1tYW5zbGFnbmluZ2VuLiBOw6RyIGR1IGdqb3J0IGRldCBrYW4gZHUgcMOlYsO2cmphIGVuIG55IHNhbW1hbnNsYWduaW5nLlxuIgorInkgLSBcInN0YXNoXCI6YSBzdHlja2V0XG4iCisibiAtIFwic3Rhc2hcIjphIGludGUgc3R5Y2tldFxuIgorInEgLSBhdnNsdXRhOyBcInN0YXNoXCI6YSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZVxuIgorImEgLSBcInN0YXNoXCI6YSBzdHlja2V0IG9jaCBhbGxhIGbDtmxqYW5kZSBpIGZpbGVuXG4iCisiZCAtIFwic3Rhc2hcIjphIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlIGkgZmlsZW5cbiIKIAotIzogbGliL21lcmdlLnRjbDo1NQotIywgdGNsLWZvcm1hdAorIzogYWRkLXBhdGNoLmM6NzcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJUYSBib3J0IMOkbmRyYXQgbMOkZ2UgZnLDpW4ga8O2biBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NzggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM5CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJUYSBib3J0IGJvcnR0YWduaW5nIGZyw6VuIGvDtm4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjc5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIlRhIGJvcnQgc3R5Y2tldCBmcsOlbiBrw7ZuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzo4MQogbXNnaWQgIiIKLSJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCi0iXG4iCi0iRmlsZSAlcyBpcyBtb2RpZmllZC5cbiIKLSJcbiIKLSJZb3Ugc2hvdWxkIGNvbXBsZXRlIHRoZSBjdXJyZW50IGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYSBtZXJnZS4gIERvaW5nIHNvICIKLSJ3aWxsIGhlbHAgeW91IGFib3J0IGEgZmFpbGVkIG1lcmdlLCBzaG91bGQgdGhlIG5lZWQgYXJpc2UuXG4iCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisidW5zdGFnaW5nLiIKIG1zZ3N0ciAiIgotIkR1IMOkciBtaXR0IGkgZW4gw6RuZHJpbmcuXG4iCi0iXG4iCi0iRmlsZW4gJXMgaGFyIMOkbmRyaW5nYXIuXG4iCi0iXG4iCi0iRHUgYsO2ciBmdWxsYm9yZGEgZGVuIGFrdHVlbGxhIGluY2hlY2tuaW5nZW4gaW5uYW4gZHUgcMOlYsO2cmphciBlbiAiCi0ic2FtbWFuc2xhZ25pbmcuIE9tIGR1IGfDtnIgZGV0IGJsaXIgZGV0IGVua2xhcmUgYXR0IGF2YnJ5dGEgZW4gbWlzc2x5Y2thZCAiCi0ic2FtbWFuc2xhZ25pbmcsIG9tIGRldCBza3VsbGUgdmFyYSBuw7ZkdsOkbmRpZ3QuXG4iCisiT20gcGF0Y2hlbiBrYW4gYXBwbGljZXJhcyByZW50IGtvbW1lciBkZXQgcmVkaWdlcmFkZSBzdHlja2V0IGF0dCB0YXMgYm9ydCAiCisiZnLDpW4ga8O2biBvbWVkZWxiYXJ0LiIKIAotIzogbGliL21lcmdlLnRjbDoxMDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyBvZiAlcyIKLW1zZ3N0ciAiJXMgYXYgJXMiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTIyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2luZyAlcyBhbmQgJXMuLi4iCi1tc2dzdHIgIlNsw6VyIGlob3AgJXMgb2NoICVzLi4uIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEzMwotbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgotbXNnc3RyICJTYW1tYW5zbGFnbmluZ2VuIGF2c2x1dGFkZXMgZnJhbWfDpW5nc3Jpa3QuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEzNQotbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgotbXNnc3RyICJTYW1tYW5zbGFnbmluZ2VuIG1pc3NseWNrYWRlcy4gRHUgbcOlc3RlIGzDtnNhIGtvbmZsaWt0ZXJuYS4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTYwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2UgSW50byAlcyIKLW1zZ3N0ciAiU2zDpSBpaG9wIGkgJXMiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTc5Ci1tc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCi1tc2dzdHIgIlJldmlzaW9uZXIgYXR0IHNsw6UgaWhvcCIKLQotIzogbGliL21lcmdlLnRjbDoyMTQKKyM6IGFkZC1wYXRjaC5jOjg0CiBtc2dpZCAiIgotIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKLSJcbiIKLSJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuXG4iCisieSAtIHVuc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSB1bnN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCiBtc2dzdHIgIiIKLSJLYW4gaW50ZSBhdmJyeXRhIHZpZCB1dMO2a25pbmcuXG4iCi0iXG4iCi0iRHUgbcOlc3RlIGfDtnJhIGRpZyBmw6RyZGlnIG1lZCBhdHQgdXTDtmthIGluY2hlY2tuaW5nZW4uXG4iCisieSAtIHRhIGJvcnQgc3R5Y2tldCBmcsOlbiBrw7ZuXG4iCisibiAtIHRhIGludGUgYm9ydCBzdHlja2V0IGZyw6VuIGvDtm5cbiIKKyJxIC0gYXZzbHV0YTsgdGEgaW50ZSBib3J0IHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZSBmcsOlbiBrw7ZuXG4iCisiYSAtIHRhIGJvcnQgc3R5Y2tldCBvY2ggYWxsYSBmw7ZsamFuZGUgaSBmaWxlbiBmcsOlbiBrw7ZuXG4iCisiZCAtIHRhIGludGUgYm9ydCBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBmw7ZsamFuZGUgaSBmaWxlbiBmcsOlbiBrw7ZuXG4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjI0CisjOiBhZGQtcGF0Y2guYzo5OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcHBsaWNlcmEgw6RuZHJhdCBsw6RnZSBww6UgaW5kZXhldCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTAwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwcGxpY2VyYSBib3J0dGFnbmluZyBww6UgaW5kZXhldCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcHBsaWNlcmEgc3R5Y2tldCBww6UgaW5kZXhldCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTAzIGFkZC1wYXRjaC5jOjE2OCBhZGQtcGF0Y2guYzoyMTEKIG1zZ2lkICIiCi0iQWJvcnQgbWVyZ2U/XG4iCi0iXG4iCi0iQWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2Ugd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCi0iXG4iCi0iQ29udGludWUgd2l0aCBhYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZT8iCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisiYXBwbHlpbmcuIgogbXNnc3RyICIiCi0iQXZicnl0IHNhbW1hbnNsYWduaW5nP1xuIgotIlxuIgotIk9tIGR1IGF2YnJ5dGVyIHNhbW1hbnNsYWduaW5nZW4ga29tbWVyICpBTExBKiBlaiBpbmNoZWNrYWRlIMOkbmRyaW5nYXIgYXR0IGfDpSAiCi0iZsO2cmxvcmFkZS5cbiIKLSJcbiIKLSJHw6UgdmlkYXJlIG1lZCBhdHQgYXZicnl0YSBkZW4gYWt0dWVsbGEgc2FtbWFuc2xhZ25pbmdlbj8iCisiT20gcGF0Y2hlbiBrYW4gYXBwbGljZXJhcyByZW50IGtvbW1lciBkZXQgcmVkaWdlcmFkZSBzdHlja2V0IGF0dCBtYXJrZXJhcyAiCisiZsO2ciBhcHBsaWNlcmluZyBvbWVkZWxiYXJ0LiIKIAotIzogbGliL21lcmdlLnRjbDoyMzAKKyM6IGFkZC1wYXRjaC5jOjEwNgogbXNnaWQgIiIKLSJSZXNldCBjaGFuZ2VzP1xuIgotIlxuIgotIlJlc2V0dGluZyB0aGUgY2hhbmdlcyB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKLSJcbiIKLSJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgogbXNnc3RyICIiCi0iw4V0ZXJzdMOkbGwgw6RuZHJpbmdhcj9cbiIKLSJcbiIKLSJPbSBkdSDDpXRlcnN0w6RsbGVyIMOkbmRyaW5nYXJuYSBrb21tZXIgKkFMTEEqIGVqIGluY2hlY2thZGUgw6RuZHJpbmdhciBhdHQgZ8OlICIKLSJmw7ZybG9yYWRlLlxuIgotIlxuIgotIkfDpSB2aWRhcmUgbWVkIGF0dCDDpXRlcnN0w6RsbGEgZGUgYWt0dWVsbGEgw6RuZHJpbmdhcm5hPyIKKyJ5IC0gYXBwbGljZXJhIHN0eWNrZXQgcMOlIGluZGV4ZXRcbiIKKyJuIC0gYXBwbGljZXJhIGludGUgc3R5Y2tldCBww6UgaW5kZXhldFxuIgorInEgLSBhdnNsdXRhOyBhcHBsaWNlcmEgaW50ZSBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBmw7ZsamFuZGVcbiIKKyJhIC0gYXBwbGljZXJhIHN0eWNrZXQgb2NoIGFsbGEgZsO2bGphbmRlIGkgZmlsZW5cbiIKKyJkIC0gYXBwbGljZXJhIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlIGkgZmlsZW5cbiIKIAotIzogbGliL21lcmdlLnRjbDoyNDEKLW1zZ2lkICJBYm9ydGluZyIKLW1zZ3N0ciAiQXZicnl0ZXIiCisjOiBhZGQtcGF0Y2guYzoxMjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiS2FzdGEgw6RuZHJhdCBsw6RnZSBmcsOlbiBhcmJldHNrYXRhbG9nZW4gW3ksbixxLGEsZCVzLD9dPyAiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjQxCi1tc2dpZCAiZmlsZXMgcmVzZXQiCi1tc2dzdHIgImZpbGVyIMOldGVyc3TDpGxsZGEiCisjOiBhZGQtcGF0Y2guYzoxMjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjQKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiS2FzdGEgYm9ydHRhZ25pbmcgZnLDpW4gYXJiZXRza2F0YWxvZ2VuIFt5LG4scSxhLGQlcyw/XT8gIgogCi0jOiBsaWIvbWVyZ2UudGNsOjI2OQotbXNnaWQgIkFib3J0IGZhaWxlZC4iCi1tc2dzdHIgIk1pc3NseWNrYWRlcyBhdmJyeXRhLiIKKyM6IGFkZC1wYXRjaC5jOjEyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiS2FzdGEgc3R5Y2tldCBmcsOlbiBhcmJldHNrYXRhbG9nZW4gW3ksbixxLGEsZCVzLD9dPyAiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjcxCi1tc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgotbXNnc3RyICJBdmJyeXRuaW5nIGZ1bGxib3JkYWQuIFJlZG8uIgotCi0jOiBsaWIvdG9vbHMudGNsOjc1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVubmluZyAlcyByZXF1aXJlcyBhIHNlbGVjdGVkIGZpbGUuIgotbXNnc3RyICJGw7ZyIGF0dCBzdGFydGEgJXMgbcOlc3RlIGR1IHbDpGxqYSBlbiBmaWwuIgotCi0jOiBsaWIvdG9vbHMudGNsOjkxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlMSRzIG9uIGZpbGUgXCIlMiRzXCI/IgotbXNnc3RyICLDhHIgZHUgc8Oka2VyIHDDpSBhdHQgZHUgdmlsbCBzdGFydGEgJTEkcyBtZWQgZmlsZW4gXCIlMiRzXCI/IgotCi0jOiBsaWIvdG9vbHMudGNsOjk1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCi1tc2dzdHIgIsOEciBkdSBzw6RrZXIgcMOlIGF0dCBkdSB2aWxsIHN0YXJ0YSAlcz8iCi0KLSM6IGxpYi90b29scy50Y2w6MTE2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbDogJXMiCi1tc2dzdHIgIlZlcmt0eWc6ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjExNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmc6ICVzIgotbXNnc3RyICJFeGVrdmVyYXI6ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjE1NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCi1tc2dzdHIgIlZlcmt0eWdldCBhdnNsdXRhZGVzIGZyYW1nw6VuZ3NyaWt0OiAlcyIKLQotIzogbGliL3Rvb2xzLnRjbDoxNTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGZhaWxlZDogJXMiCi1tc2dzdHIgIlZlcmt0eWdldCBtaXNzbHlja2FkZXM6ICVzIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoxNiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyMQotbXNnaWQgIkNoZWNrb3V0IEJyYW5jaCIKLW1zZ3N0ciAiQ2hlY2thIHV0IGdyZW4iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI2Ci1tc2dpZCAiQ2hlY2tvdXQiCi1tc2dzdHIgIkNoZWNrYSB1dCIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzkgbGliL29wdGlvbi50Y2w6MzEwIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2OQotbXNnaWQgIk9wdGlvbnMiCi1tc2dzdHIgIkFsdGVybmF0aXYiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgotbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKLW1zZ3N0ciAiSMOkbXRhIHNww6VyYW5kZSBncmVuIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0NwotbXNnaWQgIkRldGFjaCBGcm9tIExvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiS29wcGxhIGJvcnQgZnLDpW4gbG9rYWwgZ3JlbiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiU3Rhdm5pbmdza29udHJvbGxwcm9ncmFtbWV0IHN0w7ZkcyBpbnRlIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NjUKLW1zZ2lkICJTcGVsbCBjaGVja2luZyBpcyB1bmF2YWlsYWJsZSIKLW1zZ3N0ciAiU3Rhdm5pbmdza29udHJvbGwgw6RyIGVqIHRpbGxnw6RuZ2xpZyIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjY4Ci1tc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgotbXNnc3RyICJPZ2lsdGlnIGluc3TDpGxsbmluZyBmw7ZyIHN0YXZuaW5nc2tvbnRyb2xsIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCi1tc2dzdHIgIsOFdGVyc3TDpGxsZXIgb3JkbGlzdGFuIHRpbGwgJXMuIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKLW1zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgotbXNnc3RyICJTdGF2bmluZ3Nrb250cm9sbCBtaXNzbHlja2FkZXMgdHlzdCB2aWQgc3RhcnQiCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAotbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJTdGF2bmluZ3Nrb250cm9sbHByb2dyYW1tZXQga8Okbm5zIGludGUgaWdlbiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgotbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgotbXNnc3RyICJJbmdhIGbDtnJzbGFnIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg4Ci1tc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJPdsOkbnRhdCBmaWxzbHV0IGZyw6VuIHN0YXZuaW5nc2tvbnRyb2xsIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6MzkyCi1tc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCi1tc2dzdHIgIlN0YXZuaW5nc2tvbnRyb2xsIG1pc3NseWNrYWRlcyIKLQotIzogbGliL3N0YXR1c19iYXIudGNsOjg3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKLW1zZ3N0ciAiJXMuLi4gJSppIGF2ICUqaSAlcyAoJTNpJSUpIgotCi0jOiBsaWIvZGlmZi50Y2w6NzcKLSMsIHRjbC1mb3JtYXQKKyM6IGFkZC1wYXRjaC5jOjEyNSBhZGQtcGF0Y2guYzoxNDcgYWRkLXBhdGNoLmM6MTkwCiBtc2dpZCAiIgotIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgotIlxuIgotIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgotIlxuIgotIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKLSJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgotIlxuIgotIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgotInRoZSBzYW1lIHN0YXRlLiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJkaXNjYXJkaW5nLiIKIG1zZ3N0ciAiIgotIkhpdHRhZGUgaW5nYSBza2lsbG5hZGVyLlxuIgotIlxuIgotIiVzIGlubmVow6VsbGVyIGluZ2Egw6RuZHJpbmdhci5cbiIKLSJcbiIKLSJNb2RpZmllcmluZ3NkYXR1bSBmw7ZyIGZpbGVuIHVwcGRhdGVyYWRlcyBhdiBldHQgYW5uYXQgcHJvZ3JhbSwgbWVuICIKLSJpbm5laMOlbGxldCBpIGZpbGVuIGhhciBpbnRlIMOkbmRyYXRzLlxuIgotIlxuIgotIkVuIHPDtmtuaW5nIGtvbW1lciBhdXRvbWF0aXNrdCBhdHQgc3RhcnRhcyBmw7ZyIGF0dCBoaXR0YSBhbmRyYSBmaWxlciBzb20ga2FuICIKLSJ2YXJhIGkgc2FtbWEgdGlsbHN0w6VuZC4iCisiT20gcGF0Y2hlbiBrYW4gYXBwbGljZXJhcyByZW50IGtvbW1lciBkZXQgcmVkaWdlcmFkZSBzdHlja2V0IGF0dCBtYXJrZXJhcyAiCisiZsO2ciBrYXN0YSBvbWVkZWxiYXJ0LiIKIAotIzogbGliL2RpZmYudGNsOjExNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKLW1zZ3N0ciAiTMOkc2VyIGRpZmZlcmVucyBmw7ZyICVzLi4uIgotCi0jOiBsaWIvZGlmZi50Y2w6MTQwCisjOiBhZGQtcGF0Y2guYzoxMjggYWRkLXBhdGNoLmM6MTkzCiBtc2dpZCAiIgotIkxPQ0FMOiBkZWxldGVkXG4iCi0iUkVNT1RFOlxuIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKIG1zZ3N0ciAiIgotIkxPS0FMOiBib3J0dGFnZW5cbiIKLSJGSsOEUlI6XG4iCisieSAtIGbDtnJrYXN0YSBzdHlja2V0IGZyw6VuIGFyYmV0c2thdGFsb2dlblxuIgorIm4gLSBmw7Zya2FzdGEgaW50ZSBzdHlja2V0IGZyw6VuIGFyYmV0c2thdGFsb2dlblxuIgorInEgLSBhdnNsdXRhOyBmw7Zya2FzdGEgaW50ZSBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBmw7ZsamFuZGVcbiIKKyJhIC0gZsO2cmthc3RhIHN0eWNrZXQgb2NoIGFsbGEgZsO2bGphbmRlIGkgZmlsZW5cbiIKKyJkIC0gZsO2cmthc3RhIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlIGkgZmlsZW5cbiIKIAotIzogbGliL2RpZmYudGNsOjE0NQorIzogYWRkLXBhdGNoLmM6MTQzIGFkZC1wYXRjaC5jOjE4NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkthc3RhIMOkbmRyYXQgbMOkZ2UgZnLDpW4gaW5kZXhldCBvY2ggYXJiZXRza2F0YWxvZ2VuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNDQgYWRkLXBhdGNoLmM6MTg3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiS2FzdGEgYm9ydHRhZ25pbmcgZnLDpW4gaW5kZXhldCBvY2ggYXJiZXRza2F0YWxvZ2VuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNDUgYWRkLXBhdGNoLmM6MTg4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkthc3RhIHN0eWNrZXQgZnLDpW4gaW5kZXhldCBvY2ggYXJiZXRza2F0YWxvZ2VuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNTAKIG1zZ2lkICIiCi0iUkVNT1RFOiBkZWxldGVkXG4iCi0iTE9DQUw6XG4iCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCiBtc2dzdHIgIiIKLSJGSsOEUlI6IGJvcnR0YWdlblxuIgotIkxPS0FMOlxuIgorInkgLSBmw7Zya2FzdGEgc3R5Y2tldCBmcsOlbiBpbmRleGV0IG9jaCBhcmJldHNrYXRhbG9nZW5cbiIKKyJuIC0gZsO2cmthc3RhIGludGUgc3R5Y2tldCBmcsOlbiBpbmRleGV0IG9jaCBhcmJldHNrYXRhbG9nZW5cbiIKKyJxIC0gYXZzbHV0YTsgZsO2cmthc3RhIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlXG4iCisiYSAtIGbDtnJrYXN0YSBzdHlja2V0IG9jaCBhbGxhIGbDtmxqYW5kZSBpIGZpbGVuXG4iCisiZCAtIGbDtnJrYXN0YSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZSBpIGZpbGVuXG4iCiAKLSM6IGxpYi9kaWZmLnRjbDoxNTIKLW1zZ2lkICJMT0NBTDpcbiIKLW1zZ3N0ciAiTE9LQUw6XG4iCisjOiBhZGQtcGF0Y2guYzoxNjQgYWRkLXBhdGNoLmM6MjA3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcHBsaWNlcmEgw6RuZHJhdCBsw6RnZSBww6UgaW5kZXhldCBvY2ggYXJiZXRza2F0YWxvZ2VuIFt5LG4scSxhLGQlcyw/XT8gIgogCi0jOiBsaWIvZGlmZi50Y2w6MTU1Ci1tc2dpZCAiUkVNT1RFOlxuIgotbXNnc3RyICJGSsOEUlI6XG4iCisjOiBhZGQtcGF0Y2guYzoxNjUgYWRkLXBhdGNoLmM6MjA4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcHBsaWNlcmEgYm9ydHRhZ25pbmcgcMOlIGluZGV4ZXQgb2NoIGFyYmV0c2thdGFsb2dlbiBbeSxuLHEsYSxkJXMsP10/ICIKIAotIzogbGliL2RpZmYudGNsOjIxNyBsaWIvZGlmZi50Y2w6MzU1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCi1tc2dzdHIgIkthbiBpbnRlIHZpc2EgJXMiCisjOiBhZGQtcGF0Y2guYzoxNjYgYWRkLXBhdGNoLmM6MjA5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBwbGljZXJhIHN0eWNrZXQgcMOlIGluZGV4ZXQgb2NoIGFyYmV0c2thdGFsb2dlbiBbeSxuLHEsYSxkJXMsP10/ICIKIAotIzogbGliL2RpZmYudGNsOjIxOAotbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCi1tc2dzdHIgIkZlbCB2aWQgbMOkc25pbmcgYXYgZmlsOiIKLQotIzogbGliL2RpZmYudGNsOjIyNQotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKLW1zZ3N0ciAiR2l0YXJraXYgKHVuZGVycHJvamVrdCkiCi0KLSM6IGxpYi9kaWZmLnRjbDoyMzcKLW1zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCi1tc2dzdHIgIiogQmluw6RyZmlsICh2aXNhciBpbnRlIGlubmVow6VsbGV0KS4iCi0KLSM6IGxpYi9kaWZmLnRjbDoyNDIKLSMsIHRjbC1mb3JtYXQKKyM6IGFkZC1wYXRjaC5jOjE3MQogbXNnaWQgIiIKLSIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgotIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKIG1zZ3N0ciAiIgotIiogRGVuIG9zcMOlcmFkZSBmaWxlbiDDpHIgJWQgYnl0ZS5cbiIKLSIqIFZpc2FyIGVuZGFzdCBpbmxlZGFuZGUgJWQgYnl0ZS5cbiIKKyJ5IC0gYXBwbGljZXJhIHN0eWNrZXQgcMOlIGluZGV4ZXQgb2NoIGFyYmV0c2thdGFsb2dlblxuIgorIm4gLSBhcHBsaWNlcmEgaW50ZSBzdHlja2V0IHDDpSBpbmRleGV0IG9jaCBhcmJldHNrYXRhbG9nZW5cbiIKKyJxIC0gYXZzbHV0YTsgYXBwbGljZXJhIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlXG4iCisiYSAtIGFwcGxpY2VyYSBzdHlja2V0IG9jaCBhbGxhIGbDtmxqYW5kZSBpIGZpbGVuXG4iCisiZCAtIGFwcGxpY2VyYSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZSBpIGZpbGVuXG4iCiAKLSM6IGxpYi9kaWZmLnRjbDoyNDgKLSMsIHRjbC1mb3JtYXQKKyM6IGFkZC1wYXRjaC5jOjIxNAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIGFwcGxpY2VyYSBzdHlja2V0IHDDpSBhcmJldHNrYXRhbG9nZW5cbiIKKyJuIC0gYXBwbGljZXJhIGludGUgc3R5Y2tldCBww6UgYXJiZXRza2F0YWxvZ2VuXG4iCisicSAtIGF2c2x1dGE7IGFwcGxpY2VyYSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZVxuIgorImEgLSBhcHBsaWNlcmEgc3R5Y2tldCBvY2ggYWxsYSBmw7ZsamFuZGUgaSBmaWxlblxuIgorImQgLSBhcHBsaWNlcmEgaW50ZSBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBmw7ZsamFuZGUgaSBmaWxlblxuIgorCisjOiBhZGQtcGF0Y2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBzdHlja2VodXZ1ZGV0IFwiJS4qc1wiIgorCisjOiBhZGQtcGF0Y2guYzozMzcgYWRkLXBhdGNoLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBmw6RyZ2F0IHN0eWNrZWh1dnVkIFwiJS4qc1wiIgorCisjOiBhZGQtcGF0Y2guYzozOTUKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZGlmZiIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBkaWZmIgorCisjOiBhZGQtcGF0Y2guYzo0MTQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBkaWZmIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGbDpHJnYWQgZGlmZiIKKworIzogYWRkLXBhdGNoLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGF0dCBrw7ZyYSBcIiVzXCIiCisKKyM6IGFkZC1wYXRjaC5jOjU4NworbXNnaWQgIm1pc21hdGNoZWQgb3V0cHV0IGZyb20gaW50ZXJhY3RpdmUuZGlmZkZpbHRlciIKK21zZ3N0ciAib21ha2EgdXRkYXRhIGZyw6VuIGludGVyYWN0aXZlLmRpZmZGaWx0ZXIiCisKKyM6IGFkZC1wYXRjaC5jOjU4OAorbXNnaWQgIiIKKyJZb3VyIGZpbHRlciBtdXN0IG1haW50YWluIGEgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZVxuIgorImJldHdlZW4gaXRzIGlucHV0IGFuZCBvdXRwdXQgbGluZXMuIgorbXNnc3RyICIiCisiQWxsYSByYWRlciBpIGluZGF0YSBtw6VzdGUgaGEgZW4gbW90c3ZhcmFuZGUgcmFkIGkgdXRkYXRhIGZyw6VuXG4iCisiZGl0dCBmaWx0ZXIuIgorCisjOiBhZGQtcGF0Y2guYzo3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIGNvbnRleHQgbGluZSAjJWQgaW5cbiIKKyIlLipzIgorbXNnc3RyICIiCisiZsO2cnbDpG50YWRlIHNhbW1hbmhhbmdzcmFkICVkIGlcbiIKKyIlLipzIgorCisjOiBhZGQtcGF0Y2guYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImh1bmtzIGRvIG5vdCBvdmVybGFwOlxuIgorIiUuKnNcbiIKKyJcdGRvZXMgbm90IGVuZCB3aXRoOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyJzdHlja2VuIMO2dmVybGFwcGFyIGludGU6XG4iCisiJS4qc1xuIgorIlx0YXZzbHV0YXMgaW50ZSBtZWQ6XG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6MTA1MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTIKK21zZ2lkICJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgYSBxdWljayBndWlkZS5cbiIKK21zZ3N0ciAiTWFudWVsbHQgc3R5Y2tlcmVkaWdlcmluZ3Nsw6RnZSAtLSBzZSBuZWRlcnN0IGbDtnIgc25hYmJndWlkZS5cbiIKKworIzogYWRkLXBhdGNoLmM6MTA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclYycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVjIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorIi0tLVxuIgorIlRhIGJvcnQgXCIlY1wiIHJhZGVyIGdlbm9tIGF0dCBnw7ZyYSBkZW0gXCIgXCItcmFkZXIgKHNhbW1hbmhhbmcpLlxuIgorIlRhIGJvcnQgXCIlY1wiIHJhZGVyIGdlbm9tIGF0dCByYWRlcmEgZGVtLlxuIgorIlJhZGVyIHNvbSBiw7ZyamFyIG1lZCAlYyBrb21tZXIgYXR0IHRhcyBib3J0LlxuIgorCisjLiBUUkFOU0xBVE9SUzogJ2l0JyByZWZlcnMgdG8gdGhlIHBhdGNoIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgbWVzc2FnZXMuCisjOiBhZGQtcGF0Y2guYzoxMDcwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTEyNgorbXNnaWQgIiIKKyJJZiBpdCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCB5b3Ugd2lsbCBiZSBnaXZlbiBhbiBvcHBvcnR1bml0eSB0b1xuIgorImVkaXQgYWdhaW4uICBJZiBhbGwgbGluZXMgb2YgdGhlIGh1bmsgYXJlIHJlbW92ZWQsIHRoZW4gdGhlIGVkaXQgaXNcbiIKKyJhYm9ydGVkIGFuZCB0aGUgaHVuayBpcyBsZWZ0IHVuY2hhbmdlZC5cbiIKK21zZ3N0ciAiIgorIk9tIHBhdGNoZW4gaW50ZSBrYW4gYXBwbGljZXJhcyByZW50IGtvbW1lciBkdSBmw6UgZW4gbcO2amxpZ2hldCBhdHRcbiIKKyJyZWRpZ2VyYSBkZW4gaWdlbi4gT20gYWxsYSByYWRlciBpIGV0dCBzdHlja2UgdGFzIGJvcnQgYXZicnl0c1xuIgorInJlZGlnZXJpbmdlbiBvY2ggc3R5Y2tldCBsw6RtbmFzIG9mw7Zyw6RuZHJhdC5cbiIKKworIzogYWRkLXBhdGNoLmM6MTEwMworbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBzdHlja2VodXZ1ZCIKKworIzogYWRkLXBhdGNoLmM6MTE0OAorbXNnaWQgIidnaXQgYXBwbHkgLS1jYWNoZWQnIGZhaWxlZCIKK21zZ3N0ciAiXCJnaXQgYXBwbHkgLS1jYWNoZWRcIiBtaXNzbHlja2FkZXMiCisKKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjLgorIy4gVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKyMuIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgdGhhdCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjOiBhZGQtcGF0Y2guYzoxMjE4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIzOQorbXNnaWQgIiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/ICIKK21zZ3N0ciAiIgorIkRpdHQgcmVkaWdlcmFkZSBzdHlja2Uga2FuIGludGUgYXBwbGljZXJhcy4gUmVkaWdlcmEgaWdlbiAoXCJuZWpcIiBrYXN0YXIhKSAiCisiW3kvbl0/ICIKKworIzogYWRkLXBhdGNoLmM6MTI2MQorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4ISIKK21zZ3N0ciAiTWFya2VyYWRlIHN0eWNrZW4ga2FuIGludGUgYXBwbGljZXJhcyBww6UgaW5kZXhldCEiCisKKyM6IGFkZC1wYXRjaC5jOjEyNjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQzCittc2dpZCAiQXBwbHkgdGhlbSB0byB0aGUgd29ya3RyZWUgYW55d2F5PyAiCittc2dzdHIgIkFwcGxpY2VyYSBkZW0gcMOlIGFyYmV0c2thdGFsb2dlbiB0cm90cyBkZXQ/ICIKKworIzogYWRkLXBhdGNoLmM6MTI2OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDYKK21zZ2lkICJOb3RoaW5nIHdhcyBhcHBsaWVkLlxuIgorbXNnc3RyICJJbmdlbnRpbmcgYXBwbGljZXJhZGVzLlxuIgorCisjOiBhZGQtcGF0Y2guYzoxMzI2Cittc2dpZCAiIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiaiAtIGzDpG1uYSBzdHlja2V0IG9iZXN0w6RtdCwgc2UgbsOkc3RhIG9iZXN0w6RtZGEgc3R5Y2tlXG4iCisiSiAtIGzDpG1uYSBzdHlja2V0IG9iZXN0w6RtdCwgc2UgbsOkc3RhIHN0eWNrZVxuIgorImsgLSBsw6RtbmEgc3R5Y2tldCBvYmVzdMOkbXQsIHNlIGbDtnJlZ8OlZW5kZSBvYmVzdMOkbWRhIHN0eWNrZVxuIgorIksgLSBsw6RtbmEgc3R5Y2tldCBvYmVzdMOkbXQsIHNlIGbDtnJlZ8OlZW5kZSBzdHlja2VcbiIKKyJnIC0gdsOkbGogZXR0IHN0eWNrZSBhdHQgZ8OlIHRpbGxcbiIKKyIvIC0gc8O2ayBlZnRlciBzdHlja2Ugc29tIG1vdHN2YXJhciBhbmdpdmV0IHJlZ3VsasOkcnQgdXR0cnlja1xuIgorInMgLSBkZWxhIGFrdHVlbGx0IHN0eWNrZSBpIG1pbmRyZSBzdHlja2Vuc1xuIgorImUgLSByZWRpZ2VyYSBha3R1ZWxsdCBzdHlja2UgbWFudWVsbHRcbiIKKyI/IC0gdmlzYSBoasOkbHBcbiIKKworIzogYWRkLXBhdGNoLmM6MTQ0NyBhZGQtcGF0Y2guYzoxNDU3Cittc2dpZCAiTm8gcHJldmlvdXMgaHVuayIKK21zZ3N0ciAiSW5nZXQgZsO2cmVnw6VlbmRlIHN0eWNrZSIKKworIzogYWRkLXBhdGNoLmM6MTQ1MiBhZGQtcGF0Y2guYzoxNDYyCittc2dpZCAiTm8gbmV4dCBodW5rIgorbXNnc3RyICJJbmdldCBmw7ZsamFuZGUgc3R5Y2tlIgorCisjOiBhZGQtcGF0Y2guYzoxNDY4Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290byIKK21zZ3N0ciAiSW5nYSBhbmRyYSBzdHlja2VuIGF0dCBnw6UgdGlsbCIKKworIzogYWRkLXBhdGNoLmM6MTQ3OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzcKK21zZ2lkICJnbyB0byB3aGljaCBodW5rICg8cmV0PiB0byBzZWUgbW9yZSk/ICIKK21zZ3N0ciAiZ8OlIHRpbGwgdmlsa2V0IHN0eWNrZSAoPHJldD4gZsO2ciBhdHQgc2UgZmxlcik/ICIKKworIzogYWRkLXBhdGNoLmM6MTQ4MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzkKK21zZ2lkICJnbyB0byB3aGljaCBodW5rPyAiCittc2dzdHIgImfDpSB0aWxsIHZpbGtldCBzdHlja2U/ICIKKworIzogYWRkLXBhdGNoLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJyIKK21zZ3N0ciAiT2dpbHRpZ3Qgc2lmZmVydsOkcmRlOiBcIiVzXCIiCisKKyM6IGFkZC1wYXRjaC5jOjE0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU29ycnksIG9ubHkgJWQgaHVuayBhdmFpbGFibGUuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuIgorbXNnc3RyWzBdICJCZWtsYWdhciwgZGV0IGZpbm5zIGJhcmEgJWQgc3R5Y2tlLiIKK21zZ3N0clsxXSAiQmVrbGFnYXIsIGRldCBmaW5ucyBiYXJhICVkIHN0eWNrZW4uIgorCisjOiBhZGQtcGF0Y2guYzoxNTA1Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoIgorbXNnc3RyICJJbmdhIGFuZHJhIHN0eWNrZW4gYXR0IHPDtmthIGVmdGVyIgorCisjOiBhZGQtcGF0Y2guYzoxNTExIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYyMworbXNnaWQgInNlYXJjaCBmb3IgcmVnZXg/ICIKK21zZ3N0ciAic8O2ayBlZnRlciByZWd1bGrDpHJ0IHV0dHJ5Y2s/ICIKKworIzogYWRkLXBhdGNoLmM6MTUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAlczogJXMiCittc2dzdHIgIkZlbGFrdGlndCBmb3JtYXQgcMOlIHJlZ3VsasOkcnQgc8O2a3V0dHJ5Y2sgJXM6ICVzIgorCisjOiBhZGQtcGF0Y2guYzoxNTQzCittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuIgorbXNnc3RyICJJbmdhIHN0eWNrZW4gbW90c3ZhcmFyIGdpdmV0IG3Dtm5zdGVyIgorCisjOiBhZGQtcGF0Y2guYzoxNTUwCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmsiCittc2dzdHIgIkJla2xhZ2FyLCBrYW4gaW50ZSBkZWxhIHN0eWNrZXQiCisKKyM6IGFkZC1wYXRjaC5jOjE1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rcy4iCittc2dzdHIgIkRlbGEgaSAlZCBzdHlja2VuLiIKKworIzogYWRkLXBhdGNoLmM6MTU1OAorbXNnaWQgIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmsiCittc2dzdHIgIkJla2xhZ2FyLCBrYW4gaW50ZSByZWRpZ2VyYSBzdHlja2V0IgorCisjOiBhZGQtcGF0Y2guYzoxNjA5Cittc2dpZCAiJ2dpdCBhcHBseScgZmFpbGVkIgorbXNnc3RyICJcImdpdCBhcHBseVwiIG1pc3NseWNrYWRlcyIKKworIzogYWR2aWNlLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaGludDogJS4qcyVzXG4iCittc2dzdHIgIiVzdGlwczogJS4qcyVzXG4iCisKKyM6IGFkdmljZS5jOjE2OAorbXNnaWQgIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIkR1IGthbiBpbnRlIHV0ZsO2cmEgZW4gY2hlcnJ5LXBpY2sgZWZ0ZXJzb20gZHUgaGFyIGZpbGVyIHNvbSBpbnRlIHNsYWdpdHMgIgorInNhbW1hbi4iCisKKyM6IGFkdmljZS5jOjE3MAorbXNnaWQgIkNvbW1pdHRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiRHUga2FuIGludGUgdXRmw7ZyYSBlbiBpbmNoZWNrbmluZyBlZnRlcnNvbSBkdSBoYXIgZmlsZXIgc29tIGludGUgc2xhZ2l0cyAiCisic2FtbWFuLiIKKworIzogYWR2aWNlLmM6MTcyCittc2dpZCAiTWVyZ2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKyJEdSBrYW4gaW50ZSB1dGbDtnJhIGVuIHNhbW1hbnNsYWduaW5nIGVmdGVyc29tIGR1IGhhciBmaWxlciBzb20gaW50ZSBzbGFnaXRzICIKKyJzYW1tYW4uIgorCisjOiBhZHZpY2UuYzoxNzQKK21zZ2lkICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIkR1IGthbiBpbnRlIHV0ZsO2cmEgZW4gXCJwdWxsXCIgZWZ0ZXJzb20gZHUgaGFyIGZpbGVyIHNvbSBpbnRlIHNsYWdpdHMgc2FtbWFuLiIKKworIzogYWR2aWNlLmM6MTc2Cittc2dpZCAiUmV2ZXJ0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIkR1IGthbiBpbnRlIHV0ZsO2cmEgZW4gXCJyZXZlcnRcIiBlZnRlcnNvbSBkdSBoYXIgZmlsZXIgc29tIGludGUgc2xhZ2l0cyAiCisic2FtbWFuLiIKKworIzogYWR2aWNlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkl0IGlzIG5vdCBwb3NzaWJsZSB0byAlcyBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIkR1IGthbiBpbnRlIHV0ZsO2cmEgZW4gXCIlc1wiIGVmdGVyc29tIGR1IGhhciBmaWxlciBzb20gaW50ZSBzbGFnaXRzIHNhbW1hbi4iCisKKyM6IGFkdmljZS5jOjE4NgorbXNnaWQgIiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCittc2dzdHIgIiIKKyJSw6R0dGEgZGVtIGkgZGluIGFyYmV0c2thdGFsb2cgb2NoIGFudsOkbmQgc2VkYW4gXCJnaXQgYWRkL3JtIDxmaWw+XCJcbiIKKyJzb20gbMOkbXBsaWd0IGbDtnIgYXR0IGFuZ2UgbMO2c25pbmcgb2NoIGNoZWNrYSBpbi4iCisKKyM6IGFkdmljZS5jOjE5NAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiBhbiB1bnJlc29sdmVkIGNvbmZsaWN0LiIKK21zZ3N0ciAiQXZzbHV0YXIgcMOlIGdydW5kIGF2IG9sw7ZzdCBrb25mbGlrZ3QuIgorCisjOiBhZHZpY2UuYzoxOTkgYnVpbHRpbi9tZXJnZS5jOjEzMzUKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIkR1IGhhciBpbnRlIGF2c2x1dGF0IHNhbW1hbnNsYWduaW5nZW4gKE1FUkdFX0hFQUQgZmlubnMpLiIKKworIzogYWR2aWNlLmM6MjAxCittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSBtZXJnaW5nLiIKK21zZ3N0ciAiQ2hlY2thIGluIGRpbmEgw6RuZHJpbmdhciBpbm5hbiBkdSB1dGbDtnIgc2FtbWFuc2xhZ25pbmdlbi4iCisKKyM6IGFkdmljZS5jOjIwMgorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiB1bmZpbmlzaGVkIG1lcmdlLiIKK21zZ3N0ciAiQXZzbHV0YXIgcMOlIGdydW5kIGF2IG9mdWxsYm9yZGFkIHNhbW1hbnNsYWduaW5nLiIKKworIzogYWR2aWNlLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBzd2l0Y2hpbmcgdG8gJyVzJy5cbiIKKyJcbiIKKyJZb3UgYXJlIGluICdkZXRhY2hlZCBIRUFEJyBzdGF0ZS4gWW91IGNhbiBsb29rIGFyb3VuZCwgbWFrZSBleHBlcmltZW50YWxcbiIKKyJjaGFuZ2VzIGFuZCBjb21taXQgdGhlbSwgYW5kIHlvdSBjYW4gZGlzY2FyZCBhbnkgY29tbWl0cyB5b3UgbWFrZSBpbiB0aGlzXG4iCisic3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHN3aXRjaGluZyBiYWNrIHRvIGEgYnJhbmNoLlxuIgorIlxuIgorIklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gcmV0YWluIGNvbW1pdHMgeW91IGNyZWF0ZSwgeW91IG1heVxuIgorImRvIHNvIChub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1jIHdpdGggdGhlIHN3aXRjaCBjb21tYW5kLiBFeGFtcGxlOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyA8bmV3LWJyYW5jaC1uYW1lPlxuIgorIlxuIgorIk9yIHVuZG8gdGhpcyBvcGVyYXRpb24gd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLVxuIgorIlxuIgorIlR1cm4gb2ZmIHRoaXMgYWR2aWNlIGJ5IHNldHRpbmcgY29uZmlnIHZhcmlhYmxlIGFkdmljZS5kZXRhY2hlZEhlYWQgdG8gIgorImZhbHNlXG4iCisiXG4iCittc2dzdHIgIiIKKyJPYnNlcnZlcmE6IGNoZWNrYXIgdXQgXCIlc1wiLlxuIgorIlxuIgorIkR1IGhhciBudSBldHQgXCJmcsOlbmtvcHBsYXQgSEVBRFwiLiBEdSBrYW4gc2UgZGlnIG9ta3JpbmcsIGV4cGVyaW1lbnRlcmFcbiIKKyJtZWQgw6RuZHJpbmdhciBvY2ggY2hlY2thIGluIGRlbSwgb2NoIGR1IGthbiBrYXN0YSBpbmNoZWNrbmluZ2FyIGR1IGfDtnJcbiIKKyJpIGRldCBow6RyIGzDpGdldCB1dGFuIGF0dCBkZXQgcMOldmVya2FyIGdyZW5hciBnZW5vbSBhdHQgdsOkeGxhIHRpbGxiYWthXG4iCisidGlsbCBlbiBncmVuLlxuIgorIlxuIgorIk9tIGR1IHZpbGwgc2thcGEgZW4gbnkgZ3JlbiBmw7ZyIGF0dCBiZWjDpWxsYSDDpG5kcmluZ2FybmEgZHUgc2thcGFyLCBrYW5cbiIKKyJkdSBnw7ZyYSBkZXQgKG51IGVsbGVyIHNlbmFyZSkgZ2Vub20gYXR0IGFudsOkbmRhIHN3aXRjaC1rb21tYW5kb3QgbWVkIC1jLlxuIgorIkV4ZW1wZWw6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jIDxuYW1uLXDDpS1ueS1ncmVuPlxuIgorIlxuIgorIkVsbGVyIGfDtnIgZGVuIGjDpHIgw6RuZHJpbmdlbiBvZ2pvcmQgbWVkOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtXG4iCisiXG4iCisiU3TDpG5nIGF2IGRlbiBow6RyIGhqw6RscHRleHRlbiBnZW5vbSBhdHQgc8OkdHRhIGtvbmZpZ3VyYXRpb25zdmFyaWFiZWxuXG4iCisiYWR2aWNlLmRldGFjaGVkSGVhZCB0aWxsIGZhbHNlXG4iCisiXG4iCisKKyM6IGFsaWFzLmM6NTAKK21zZ2lkICJjbWRsaW5lIGVuZHMgd2l0aCBcXCIKK21zZ3N0ciAia29tbWFuZG9yYWQgYXZzbHV0YXMgbWVkIFxcIgorCisjOiBhbGlhcy5jOjUxCittc2dpZCAidW5jbG9zZWQgcXVvdGUiCittc2dzdHIgImNpdGF0IGVqIHN0w6RuZ3QiCisKKyM6IGFwcGx5LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciCittc2dzdHIgIm9rw6RudCBhbHRlcm5hdGl2IGbDtnIgd2hpdGVzcGFjZTogXCIlc1wiIgorCisjOiBhcHBseS5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAib2vDpG50IGFsdGVybmF0aXYgZsO2ciBpZ25vcmUtd2hpdGVzcGFjZTogXCIlc1wiIgorCisjOiBhcHBseS5jOjEzNQorbXNnaWQgIi0tcmVqZWN0IGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICItLXJlamVjdCBvY2ggLS0zd2F5IGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QuIgorCisjOiBhcHBseS5jOjEzNworbXNnaWQgIi0tY2FjaGVkIGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICItLWNhY2hlZCBvY2ggLS0zd2F5IGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QuIgorCisjOiBhcHBseS5jOjE0MAorbXNnaWQgIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS0zd2F5IHV0YW5mw7ZyIGFya2l2IgorCisjOiBhcHBseS5jOjE1MQorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0taW5kZXggdXRhbmbDtnIgYXJraXYiCisKKyM6IGFwcGx5LmM6MTU0Cittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tY2FjaGVkIHV0YW5mw7ZyIGFya2l2IgorCisjOiBhcHBseS5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICJLYW4gaW50ZSBmw7ZyYmVyZWRhIHJlZ3VsasOkcnQgdXR0cnljayBmw7ZyIHRpZHNzdMOkbXBlbG4gJXMiCisKKyM6IGFwcGx5LmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIKK21zZ3N0ciAicmVnZXhlYyByZXR1cm5lcmFkZSAlZCBmw7ZyIGluZGF0YTogJXMiCisKKyM6IGFwcGx5LmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgImthbiBpbnRlIGhpdHRhIGZpbG5hbW4gaSBwYXRjaGVuIHDDpSByYWQgJWQiCisKKyM6IGFwcGx5LmM6OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBkw6VsaWcgZ2l0LWRpZmYgLSBmw7ZydsOkbnRhZGUgL2Rldi9udWxsLCBmaWNrICVzIHDDpSByYWQgJWQiCisKKyM6IGFwcGx5LmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGTDpWxpZyBnaXQtZGlmZiAtIG1vdHPDpGdhbmRlIG55dHQgZmlsbmFtbiBww6UgcmFkICVkIgorCisjOiBhcHBseS5jOjkyOQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBkw6VsaWcgZ2l0LWRpZmYgLSBtb3Rzw6RnYW5kZSBnYW1tYWx0IGZpbG5hbW4gcMOlIHJhZCAlZCIKKworIzogYXBwbHkuYzo5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBkw6VsaWcgZ2l0LWRpZmYgLSBmw7ZydsOkbnRhZGUgL2Rldi9udWxsIHDDpSByYWQgJWQiCisKKyM6IGFwcGx5LmM6OTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBvbiBsaW5lICVkOiAlcyIKK21zZ3N0ciAib2dpbHRpZ3QgbMOkZ2UgcMOlIHJhZCAlZDogJXMiCisKKyM6IGFwcGx5LmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvbnNpc3RlbnQgaGVhZGVyIGxpbmVzICVkIGFuZCAlZCIKK21zZ3N0ciAiaHV2dWRldCDDpHIgaW5rb25zZWt2ZW50IG1lbGxhbiByYWQgJWQgb2NoICVkIgorCisjOiBhcHBseS5jOjEzNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAiIgorImdpdC1kaWZmLWh1dnVkZXQgc2FrbmFyIGZpbG5hbW5zaW5mb3JtYXRpb24gbsOkciAlZCBsZWRhbmRlIHPDtmt2w6Rnc2tvbXBvbmVudFxuIgorInRhcyBib3J0IChyYWQgJWQpIgorbXNnc3RyWzFdICIiCisiZ2l0LWRpZmYtaHV2dWRldCBzYWtuYXIgZmlsbmFtbnNpbmZvcm1hdGlvbiBuw6RyICVkIGxlZGFuZGUgIgorInPDtmt2w6Rnc2tvbXBvbmVudGVyXG4iCisidGFzIGJvcnQgKHJhZCAlZCkiCisKKyM6IGFwcGx5LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gKGxpbmUgJWQpIgorbXNnc3RyICJnaXQtZGlmZi1odXZ1ZGV0IHNha25hciBmaWxuYW1uc2luZm9ybWF0aW9uIChyYWQgJWQpIgorCisjOiBhcHBseS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJyZWNvdW50OiBmw7ZydsOkbnRhZGUgcmFkOiAlLipzIgorCisjOiBhcHBseS5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAicGF0Y2gtZnJhZ21lbnQgdXRhbiBodXZ1ZCBww6UgcmFkICVkOiAlLipzIgorCisjOiBhcHBseS5jOjE3NTMKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAibnkgZmlsIGJlcm9yIHDDpSBnYW1tYWx0IGlubmVow6VsbCIKKworIzogYXBwbHkuYzoxNzU1Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiYm9ydHRhZ2VuIGZpbCBoYXIgZm9ydGZhcmFuZGUgaW5uZWjDpWxsIgorCisjOiBhcHBseS5jOjE3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJ0cmFzaWcgcGF0Y2ggcMOlIHJhZCAlZCIKKworIzogYXBwbHkuYzoxODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJueWEgZmlsZW4gJXMgYmVyb3IgcMOlIGdhbW1hbHQgaW5uZWjDpWxsIgorCisjOiBhcHBseS5jOjE4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiYm9ydHRhZ25hIGZpbGVuICVzIGhhciBmb3J0ZmFyYW5kZSBpbm5laMOlbGwiCisKKyM6IGFwcGx5LmM6MTgzMQorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIqKiB2YXJuaW5nOiBmaWxlbiAlcyBibGlyIHRvbSBtZW4gaGFyIGludGUgdGFnaXRzIGJvcnQiCisKKyM6IGFwcGx5LmM6MTk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJ0cmFzaWcgYmluw6RycGF0Y2ggcMOlIHJhZCAlZDogJS4qcyIKKworIzogYXBwbHkuYzoyMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAiYmluw6RycGF0Y2hlbiBww6UgcmFkICVkIGvDpG5ucyBpbnRlIGlnZW4iCisKKyM6IGFwcGx5LmM6MjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICJwYXRjaCBtZWQgYmFyYSBza3LDpHAgcMOlIHJhZCAlZCIKKworIzogYXBwbHkuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2Egc3ltYm9saXNrYSBsw6Rua2VuICVzIgorCisjOiBhcHBseS5jOjIyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDtnBwbmEgZWxsZXIgbMOkc2EgJXMiCisKKyM6IGFwcGx5LmM6MjkzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgImZlbGFrdGlnIGlubGVkbmluZyBww6UgcmFkOiBcIiVjXCIiCisKKyM6IGFwcGx5LmM6MzA1NworIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iCittc2dpZF9wbHVyYWwgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iCittc2dzdHJbMF0gIlN0eWNrZSAlZCBseWNrYWRlcyBww6UgJWQgKG9mZnNldCAlZCByYWQpLiIKK21zZ3N0clsxXSAiU3R5Y2tlICVkIGx5Y2thZGVzIHDDpSAlZCAob2Zmc2V0ICVkIHJhZGVyKS4iCisKKyM6IGFwcGx5LmM6MzA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICJTYW1tYW5oYW5nIHJlZHVjZXJhdCB0aWxsICglbGQvJWxkKSBmw7ZyIGF0dCB0aWxsw6RtcGEgZnJhZ21lbnQgdmlkICVkIgorCisjOiBhcHBseS5jOjMwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndoaWxlIHNlYXJjaGluZyBmb3I6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorInZpZCBzw7ZrbmluZyBlZnRlcjpcbiIKKyIlLipzIgorCisjOiBhcHBseS5jOjMwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAic2FrbmFyIGJpbsOkcmEgcGF0Y2hkYXRhIGbDtnIgXCIlc1wiIgorCisjOiBhcHBseS5jOjMxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJldmVyc2UtYXBwbHkgYSBiaW5hcnkgcGF0Y2ggd2l0aG91dCB0aGUgcmV2ZXJzZSBodW5rIHRvICclcyciCittc2dzdHIgIiIKKyJrYW4gaW50ZSBhcHBsaWNlcmEgZW4gYmluw6RycGF0Y2ggYmFrbMOkbmdlcyB1dGFuIGRlbiBvbXbDpG5kYSBwYXRjaGVuIGbDtnIgXCIlcyIKKyJcIiIKKworIzogYXBwbHkuYzozMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhcHBseSBiaW5hcnkgcGF0Y2ggdG8gJyVzJyB3aXRob3V0IGZ1bGwgaW5kZXggbGluZSIKK21zZ3N0ciAiIgorImthbiBpbnRlIGFwcGxpY2VyYSBiaW7DpHJwYXRjaCBww6UgXCIlc1wiIHV0YW4gZGVuIGZ1bGxzdMOkbmRpZ2EgaW5kZXhyYWRlbiIKKworIzogYXBwbHkuYzozMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgcGF0Y2ggYXBwbGllcyB0byAnJXMnICglcyksIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IGNvbnRlbnRzLiIKK21zZ3N0ciAiIgorInBhdGNoZW4gYXBwbGljZXJhcyBww6UgXCIlc1wiICglcyksIHNvbSBpbnRlIG1vdHN2YXJhciBkZXQgbnV2YXJhbmRlICIKKyJpbm5laMOlbGxldC4iCisKKyM6IGFwcGx5LmM6MzE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcGF0Y2ggYXBwbGllcyB0byBhbiBlbXB0eSAnJXMnIGJ1dCBpdCBpcyBub3QgZW1wdHkiCittc2dzdHIgInBhdGNoZW4gYXBwbGljZXJhcyBww6UgZW4gdG9tIFwiJXNcIiwgbWVuIGRlbiDDpHIgaW50ZSB0b20iCisKKyM6IGFwcGx5LmM6MzE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbmVjZXNzYXJ5IHBvc3RpbWFnZSAlcyBmb3IgJyVzJyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAibsO2ZHbDpG5kaWcgZWZ0ZXJiaWxkICVzIGbDtnIgXCIlc1wiIGthbiBpbnRlIGzDpHNhcyIKKworIzogYXBwbHkuYzozMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICJiaW7DpHJwYXRjaGVuIGthbiBpbnRlIHRpbGzDpG1wYXMgcMOlIFwiJXNcIiIKKworIzogYXBwbHkuYzozMjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCB0byAnJXMnIGNyZWF0ZXMgaW5jb3JyZWN0IHJlc3VsdCAoZXhwZWN0aW5nICVzLCBnb3QgJXMpIgorbXNnc3RyICJiaW7DpHJwYXRjaGVuIHDDpSBcIiVzXCIgZ2VyIGZlbGFrdGlndCByZXN1bHRhdCAoZsO2cnbDpG50YWRlICVzLCBmaWNrICVzKSIKKworIzogYXBwbHkuYzozMjMwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICJwYXRjaCBtaXNzbHlja2FkZXM6ICVzOiVsZCIKKworIzogYXBwbHkuYzozMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAia2FuIGludGUgY2hlY2thIHV0ICVzIgorCisjOiBhcHBseS5jOjM0MDUgYXBwbHkuYzozNDE2IGFwcGx5LmM6MzQ2MiBtaWR4LmM6NjEgc2V0dXAuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyBsw6RzYSAlcyIKKworIzogYXBwbHkuYzozNDEzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgImzDpHNlciBmcsOlbiBcIiVzXCIgc29tIMOkciBww6UgYW5kcmEgc2lkYW4gYXYgZW4gc3ltYm9saXNrIGzDpG5rIgorCisjOiBhcHBseS5jOjM0NDIgYXBwbHkuYzozNjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIgorbXNnc3RyICJzw7ZrdsOkZ2VuICVzIGhhciDDpG5kcmF0IG5hbW4vdGFnaXRzIGJvcnQiCisKKyM6IGFwcGx5LmM6MzUyOCBhcHBseS5jOjM3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IgorbXNnc3RyICIlczogZmlubnMgaW50ZSBpIGluZGV4ZXQiCisKKyM6IGFwcGx5LmM6MzUzNyBhcHBseS5jOjM3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IgorbXNnc3RyICIlczogbW90c3ZhcmFyIGludGUgaW5kZXhldCIKKworIzogYXBwbHkuYzozNTcyCittc2dpZCAicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorImFya2l2ZXQgc2FrbmFyIG9iamVrdCBzb20gYmVow7Z2cyBmw7ZyIGF0dCBmYWxsYSB0aWxsYmFrYSBww6UgMy0iCisidsOkZ3NzYW1tYW5zbGFnbmluZy4iCisKKyM6IGFwcGx5LmM6MzU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIkZhbGxlciB0aWxsYmFrYSBww6UgdHJldsOkZ3NzYW1tYW5zbGFnbmluZy4uLlxuIgorCisjOiBhcHBseS5jOjM1OTEgYXBwbHkuYzozNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgYWt0dWVsbHQgaW5uZWjDpWxsIGkgXCIlc1wiIgorCisjOiBhcHBseS5jOjM2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZhbGwgYmFjayBvbiB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGZhbGxhIHRpbGxiYWthIHDDpSB0cmV2w6Rnc3NhbW1hbnNsYWduaW5nLi4uXG4iCisKKyM6IGFwcGx5LmM6MzYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgd2l0aCBjb25mbGljdHMuXG4iCittc2dzdHIgIkFwcGxpY2VyYWRlIHBhdGNoZW4gcMOlIFwiJXNcIiBtZWQga29uZmxpa3Rlci5cbiIKKworIzogYXBwbHkuYzozNjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICJUaWxsw6RtcGFkZSBwYXRjaGVuIHDDpSAgXCIlc1wiIHJlbnQuXG4iCisKKyM6IGFwcGx5LmM6MzY1MgorbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgInBhdGNoIGbDtnIgYm9ydHRhZ25pbmcgbMOkbW5hciBrdmFyIGZpbGlubmVow6VsbCIKKworIzogYXBwbHkuYzozNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3cm9uZyB0eXBlIgorbXNnc3RyICIlczogZmVsIHR5cCIKKworIzogYXBwbHkuYzozNzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMgaGFyIHR5cGVuICVvLCBmw7ZydsOkbnRhZGUgJW8iCisKKyM6IGFwcGx5LmM6Mzg3OCBhcHBseS5jOjM4ODAgcmVhZC1jYWNoZS5jOjgzMCByZWFkLWNhY2hlLmM6ODU2CisjOiByZWFkLWNhY2hlLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdGggJyVzJyIKK21zZ3N0ciAib2dpbHRpZyBzw7ZrdsOkZyBcIiVzXCIiCisKKyM6IGFwcGx5LmM6MzkzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgiCittc2dzdHIgIiVzOiBmaW5ucyByZWRhbiBpIGluZGV4ZXQiCisKKyM6IGFwcGx5LmM6MzkzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiVzOiBmaW5ucyByZWRhbiBpIGFyYmV0c2thdGFsb2dlbiIKKworIzogYXBwbHkuYzozOTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSIKK21zZ3N0ciAibnl0dCBsw6RnZSAoJW8pIGbDtnIgJXMgbW90c3ZhcmFyIGludGUgZ2FtbWFsdCBsw6RnZSAoJW8pIgorCisjOiBhcHBseS5jOjM5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICJueXR0IGzDpGdlICglbykgZsO2ciAlcyBtb3RzdmFyYXIgaW50ZSBnYW1tYWx0IGzDpGdlICglbykgZsO2ciAlcyIKKworIzogYXBwbHkuYzozOTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImFmZmVjdGVkIGZpbGUgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJkZW4gYmVyw7ZyZGEgZmlsZW4gXCIlc1wiIMOkciBww6UgYW5kcmEgc2lkYW4gYXYgZW4gc3ltYm9saXNrIGzDpG5rIgorCisjOiBhcHBseS5jOjM5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIlczogcGF0Y2hlbiBrYW4gaW50ZSB0aWxsw6RtcGFzIgorCisjOiBhcHBseS5jOjQwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIktvbnRyb2xsZXJhciBwYXRjaGVuICVzLi4uIgorCisjOiBhcHBseS5jOjQwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAic2hhMS1pbmZvcm1hdGlvbmVuIHNha25hcyBlbGxlciDDpHIgb2FudsOkbmRiYXIgZsO2ciB1bmRlcm1vZHVsZW4gJXMiCisKKyM6IGFwcGx5LmM6NDEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtb2RlIGNoYW5nZSBmb3IgJXMsIHdoaWNoIGlzIG5vdCBpbiBjdXJyZW50IEhFQUQiCittc2dzdHIgIm55dHQgbMOkZ2UgZsO2ciAlcywgc29tIGludGUgZmlubnMgaSBudXZhcmFuZGUgSEVBRCIKKworIzogYXBwbHkuYzo0MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzICglcykuIgorbXNnc3RyICJzaGExLWluZm9ybWF0aW9uZW4gc2FrbmFzIGVsbGVyIMOkciBvYW52w6RuZGJhciAoJXMpLiIKKworIzogYXBwbHkuYzo0MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhZGQgJXMgdG8gdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpGdnYSB0aWxsICVzIHRpbGwgdGVtcG9yw6RydCBpbmRleCIKKworIzogYXBwbHkuYzo0MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggdG8gJXMiCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIHRlbXBvcsOkcnQgaW5kZXggdGlsbCAlcyIKKworIzogYXBwbHkuYzo0MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAia2FuIGludGUgdGEgYm9ydCAlcyBmcsOlbiBpbmRleGV0IgorCisjOiBhcHBseS5jOjQyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICJ0cmFzaWcgcGF0Y2ggZsO2ciB1bmRlcm1vZHVsZW4gJXMiCisKKyM6IGFwcGx5LmM6NDMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgdGEgc3RhdHVzIHDDpSBueWxpZ2VuIHNrYXBhZGUgZmlsZW4gXCIlc1wiIgorCisjOiBhcHBseS5jOjQzMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlIGZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiCittc2dzdHIgImthbiBpbnRlIHNrYXBhIHPDpGtlcmhldHNtaW5uZSBmw7ZyIG55bGlnZW4gc2thcGFkZSBmaWxlbiAlcyIKKworIzogYXBwbHkuYzo0MzE2IGFwcGx5LmM6NDQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAia2FuIGludGUgbMOkZ2dhIHRpbGwgY2FjaGVwb3N0IGbDtnIgJXMiCisKKyM6IGFwcGx5LmM6NDM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrcml2YSB0aWxsIFwiJXNcIiIKKworIzogYXBwbHkuYzo0MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICJzdMOkbmdlciBmaWxlbiBcIiVzXCIiCisKKyM6IGFwcGx5LmM6NDQzMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgImthbiBpbnRlIHNrcml2YSBmaWxlbiBcIiVzXCIgbMOkZ2UgJW8iCisKKyM6IGFwcGx5LmM6NDUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICJUaWxsw6RtcGFkZSBwYXRjaGVuICVzIHJlbnQuIgorCisjOiBhcHBseS5jOjQ1MzkKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiaW50ZXJudCBmZWwiCisKKyM6IGFwcGx5LmM6NDU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gIlRpbGzDpG1wYWRlIHBhdGNoZW4gJSVzIG1lZCAlZCByZWZ1c2VyYWQuLi4iCittc2dzdHJbMV0gIlRpbGzDpG1wYWRlIHBhdGNoZW4gJSVzIG1lZCAlZCByZWZ1c2VyYWRlLi4uIgorCisjOiBhcHBseS5jOjQ1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICJ0cnVua2VyYXIgLnJlai1maWxuYW1uZXQgdGlsbCAlLipzLnJlaiIKKworIzogYXBwbHkuYzo0NTYxIGJ1aWx0aW4vZmV0Y2guYzo5MDEgYnVpbHRpbi9mZXRjaC5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXMiCittc2dzdHIgImthbiBpbnRlIMO2cHBuYSAlcyIKKworIzogYXBwbHkuYzo0NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIlN0eWNrZSAlZCB0aWxsw6RtcGFkZXMgcmVudC4iCisKKyM6IGFwcGx5LmM6NDU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIlJlZnVzZXJhciBzdHlja2UgJWQuIgorCisjOiBhcHBseS5jOjQ2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCBwYXRjaCAnJXMnLiIKK21zZ3N0ciAiSWdub3JlcmFyIHBhdGNoIFwiJXNcIi4iCisKKyM6IGFwcGx5LmM6NDcwNgorbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAiaW5kYXRhIGvDpG5ucyBpbnRlIGlnZW4iCisKKyM6IGFwcGx5LmM6NDcyNgorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgImthbiBpbnRlIGzDpHNhIGluZGV4ZmlsZW4iCisKKyM6IGFwcGx5LmM6NDg4MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIHBhdGNoICclcyc6ICVzIgorbXNnc3RyICJrYW4gaW50ZSDDtnBwbmEgcGF0Y2hlbiBcIiVzXCI6ICVzIgorCisjOiBhcHBseS5jOjQ5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAidW5kZXJ0cnlja3RlICVkIGZlbCBpIGJsYW5rc3RlZyIKK21zZ3N0clsxXSAidW5kZXJ0cnlja3RlICVkIGZlbCBpIGJsYW5rc3RlZyIKKworIzogYXBwbHkuYzo0OTE2IGFwcGx5LmM6NDkzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCByYWQgbMOkZ2dlciB0aWxsIGZlbCBpIGJsYW5rc3RlZy4iCittc2dzdHJbMV0gIiVkIHJhZGVyIGzDpGdnZXIgdGlsbCBmZWwgaSBibGFua3N0ZWcuIgorCisjOiBhcHBseS5jOjQ5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQgcmFkIGFwcGxpY2VyYWRlIGVmdGVyIGF0dCBoYSByw6R0dGF0IGZlbCBpIGJsYW5rc3RlZy4iCittc2dzdHJbMV0gIiVkIHJhZGVyIGFwcGxpY2VyYWRlIGVmdGVyIGF0dCBoYSByw6R0dGF0IGZlbCBpIGJsYW5rc3RlZy4iCisKKyM6IGFwcGx5LmM6NDk0MCBidWlsdGluL2FkZC5jOjYxMiBidWlsdGluL212LmM6MzAxIGJ1aWx0aW4vcm0uYzo0MDYKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIkt1bmRlIGludGUgc2tyaXZhIG55IGluZGV4ZmlsIgorCisjOiBhcHBseS5jOjQ5NjgKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJ0aWxsw6RtcGEgaW50ZSDDpG5kcmluZ2FyIHNvbSBtb3RzdmFyYXIgZ2l2ZW4gc8O2a3bDpGciCisKKyM6IGFwcGx5LmM6NDk3MQorbXNnaWQgImFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgInRpbGzDpG1wYSDDpG5kcmluZ2FyIHNvbSBtb3RzdmFyYXIgZ2l2ZW4gc8O2a3bDpGciCisKKyM6IGFwcGx5LmM6NDk3MyBidWlsdGluL2FtLmM6MjI2MAorbXNnaWQgIm51bSIKK21zZ3N0ciAiYW50YWwiCisKKyM6IGFwcGx5LmM6NDk3NAorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICJ0YSBib3J0IDxhbnRhbD4gaW5sZWRhbmRlIHNuZWRzdHJlY2sgZnLDpW4gdHJhZGl0aW9uZWxsYSBkaWZmLXPDtmt2w6RnYXIiCisKKyM6IGFwcGx5LmM6NDk3NworbXNnaWQgImlnbm9yZSBhZGRpdGlvbnMgbWFkZSBieSB0aGUgcGF0Y2giCittc2dzdHIgImlnbm9yZXJhIHRpbGzDpGdnIGdqb3JkYSBhdiBwYXRjaGVuIgorCisjOiBhcHBseS5jOjQ5NzkKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiCittc2dzdHIgImlzdMOkbGxldCBmw7ZyIGF0dCB0aWxsw6RtcGEgcGF0Y2hlbiwgc2tyaXYgdXQgZGlmZnN0YXQgZsO2ciBpbmRhdGEiCisKKyM6IGFwcGx5LmM6NDk4MworbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgInZpc2EgYW50YWwgdGlsbGFnZGEgb2NoIGJvcnR0YWduYSByYWRlciBkZWNpbWFsdCIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiaXN0w6RsbGV0IGbDtnIgYXR0IHRpbGzDpG1wYSBwYXRjaGVuLCBza3JpdiB1dCBlbiBzdW1tZXJpbmcgYXYgaW5kYXRhIgorCisjOiBhcHBseS5jOjQ5ODcKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIgorbXNnc3RyICJpc3TDpGxsZXQgZsO2ciBhdHQgdGlsbMOkbXBhIHBhdGNoZW4sIHNlIG9tIHBhdGNoZW4ga2FuIHRpbGzDpG1wYXMiCisKKyM6IGFwcGx5LmM6NDk4OQorbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAic2UgdGlsbCBhdHQgcGF0Y2hlbiBrYW4gdGlsbMOkbXBhcyBww6UgYWt0dWVsbHQgaW5kZXgiCisKKyM6IGFwcGx5LmM6NDk5MQorbXNnaWQgIm1hcmsgbmV3IGZpbGVzIHdpdGggYGdpdCBhZGQgLS1pbnRlbnQtdG8tYWRkYCIKK21zZ3N0ciAibWFya2VyYSBueWEgZmlsZXIgbWVkIFwiZ2l0IGFkZCAtLWludGVudC10by1hZGRcIiIKKworIzogYXBwbHkuYzo0OTkzCittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgInRpbGzDpG1wYSBlbiBwYXRjaCB1dGFuIGF0dCByw7ZyYSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGFwcGx5LmM6NDk5NQorbXNnaWQgImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiCittc2dzdHIgImdvZHRhIGVuIHBhdGNoIHNvbSByw7ZyIGZpbGVyIHV0YW5mw7ZyIGFyYmV0c2thdGFsb2dlbiIKKworIzogYXBwbHkuYzo0OTk4Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgInRpbGzDpG1wYSBvY2tzw6UgcGF0Y2hlbiAoYW52w6RuZCBtZWQgLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKKworIzogYXBwbHkuYzo1MDAwCittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiZsO2cnPDtmsgZW4gdHJldsOkZ3NzYW1tYW5zbGFnbmluZyBvbSBwYXRjaGVuIGludGUga2FuIHRpbGzDpG1wYXMiCisKKyM6IGFwcGx5LmM6NTAwMgorbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICJieWdnIGV0dCB0ZW1wb3LDpHJ0IGluZGV4IGJhc2VyYXQgcMOlIGluYnlnZ2QgaW5kZXhpbmZvcm1hdGlvbiIKKworIzogYXBwbHkuYzo1MDA1IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzMgYnVpbHRpbi9scy1maWxlcy5jOjUyNAorbXNnaWQgInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJzw7ZrdsOkZ2FyIGF2ZGVsYXMgbWVkIE5VTC10ZWNrZW4iCisKKyM6IGFwcGx5LmM6NTAwNworbXNnaWQgImVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2YgY29udGV4dCBtYXRjaCIKK21zZ3N0ciAic2UgdGlsbCBhdHQgw6V0bWluc3RvbmUgPG4+IHJhZGVyIHNhbW1hbmhhbmcgw6RyIGxpa2EiCisKKyM6IGFwcGx5LmM6NTAwOCBidWlsdGluL2FtLmM6MjIzOSBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk4CisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMCBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDU3IGJ1aWx0aW4vcmViYXNlLmM6MTUwOAorbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAiw6V0Z8OkcmQiCisKKyM6IGFwcGx5LmM6NTAwOQorbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICJkZXRla3RlcmEgbnlhIGVsbGVyIMOkbmRyYWRlIHJhZGVyIHNvbSBoYXIgZmVsIGkgYmxhbmt0ZWNrZW4iCisKKyM6IGFwcGx5LmM6NTAxMiBhcHBseS5jOjUwMTUKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICJpZ25vcmVyYSDDpG5kcmluZ2FyIGkgYmxhbmt0ZWNrZW4gZsO2ciBzYW1tYW5oYW5nIgorCisjOiBhcHBseS5jOjUwMTgKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAidGlsbMOkbXBhIHBhdGNoZW4gYmFrbMOkbmdlcyIKKworIzogYXBwbHkuYzo1MDIwCittc2dpZCAiZG9uJ3QgZXhwZWN0IGF0IGxlYXN0IG9uZSBsaW5lIG9mIGNvbnRleHQiCittc2dzdHIgImbDtnJ2w6RudGEgaW50ZSBtaW5zdCBlbiByYWQgc2FtbWFuaGFuZyIKKworIzogYXBwbHkuYzo1MDIyCittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgImzDpG1uYSByZWZ1c2VyYWRlIHN0eWNrZW4gaSBtb3RzdmFyYW5kZSAqLnJlai1maWxlciIKKworIzogYXBwbHkuYzo1MDI0Cittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgInRpbGzDpXQgw7Z2ZXJsYXBwYW5kZSBzdHlja2VuIgorCisjOiBhcHBseS5jOjUwMjUgYnVpbHRpbi9hZGQuYzozMjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMgorIzogYnVpbHRpbi9jb21taXQuYzoxMzYwIGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk4IGJ1aWx0aW4vZnNjay5jOjc3NAorIzogYnVpbHRpbi9sb2cuYzoyMTY2IGJ1aWx0aW4vbXYuYzoxMjMgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICJ2YXIgcHJhdHNhbSIKKworIzogYXBwbHkuYzo1MDI3Cittc2dpZCAidG9sZXJhdGUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIGZpbGUiCittc2dzdHIgInRvbGVyZXJhIGZlbGFrdGlndCBkZXRla3RlcmFkZSBzYWtuYWRlIG55cmFkc3RlY2tlbiB2aWQgZmlsc2x1dCIKKworIzogYXBwbHkuYzo1MDMwCittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICJsaXRlIGludGUgcMOlIGFudGFsZXQgbGluamVyIGkgc3R5Y2tlaHV2dWRlbiIKKworIzogYXBwbHkuYzo1MDMyIGJ1aWx0aW4vYW0uYzoyMjQ4Cittc2dpZCAicm9vdCIKK21zZ3N0ciAicm90IgorCisjOiBhcHBseS5jOjUwMzMKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICJsw6RnZyB0aWxsIDxyb3Q+IGkgYWxsYSBmaWxuYW1uIgorCisjOiBhcmNoaXZlLmM6MTQKK21zZ2lkICJnaXQgYXJjaGl2ZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgYXJjaGl2ZSBbPGZsYWdnb3I+XSA8dHLDpGQtaWd0PiBbPHPDtmt2w6RnPi4uLl0iCisKKyM6IGFyY2hpdmUuYzoxNQorbXNnaWQgImdpdCBhcmNoaXZlIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MTYKK21zZ2lkICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8YXJraXY+IFstLWV4ZWMgPGttZD5dIFs8ZmxhZ2dvcj5dIDx0csOkZC1pZ3Q+ICIKKyJbPHPDtmt2w6RnPi4uLl0iCisKKyM6IGFyY2hpdmUuYzoxNworbXNnaWQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxhcmtpdj4gWy0tZXhlYyA8a21kPl0gLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MzcyIGJ1aWx0aW4vYWRkLmM6MTgxIGJ1aWx0aW4vYWRkLmM6NTg4IGJ1aWx0aW4vcm0uYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAic8O2a3bDpGdzYW5naXZlbHNlbiBcIiVzXCIgbW90c3ZhcmFkZSBpbnRlIG7DpWdyYSBmaWxlciIKKworIzogYXJjaGl2ZS5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZjogJS4qcyIKK21zZ3N0ciAiaW5nZW4gc8OlZGFuIHJlZmVyZW5zOiAlLipzIgorCisjOiBhcmNoaXZlLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAlcyIKK21zZ3N0ciAib2JqZWt0bmFtbmV0IMOkciBpbnRlIGdpbHRpZ3Q6ICVzIgorCisjOiBhcmNoaXZlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHRyZWUgb2JqZWN0OiAlcyIKK21zZ3N0ciAiaW50ZSBldHQgdHLDpGRvYmpla3Q6ICVzIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgImFrdHVlbGwgYXJiZXRza2F0YWxvZyDDpHIgaW50ZSBzcMOlcmFkIgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiZm10IgorbXNnc3RyICJmbXQiCisKKyM6IGFyY2hpdmUuYzo0NTcKK21zZ2lkICJhcmNoaXZlIGZvcm1hdCIKK21zZ3N0ciAiYXJraXZmb3JtYXQiCisKKyM6IGFyY2hpdmUuYzo0NTggYnVpbHRpbi9sb2cuYzoxNjUzCittc2dpZCAicHJlZml4IgorbXNnc3RyICJwcmVmaXgiCisKKyM6IGFyY2hpdmUuYzo0NTkKK21zZ2lkICJwcmVwZW5kIHByZWZpeCB0byBlYWNoIHBhdGhuYW1lIGluIHRoZSBhcmNoaXZlIgorbXNnc3RyICJsw6RnZyB0aWxsIHByZWZpeCB0aWxsIHZhcmplIHPDtmt2w6RnIGkgYXJraXZldCIKKworIzogYXJjaGl2ZS5jOjQ2MCBidWlsdGluL2JsYW1lLmM6ODYxIGJ1aWx0aW4vYmxhbWUuYzo4NjUgYnVpbHRpbi9ibGFtZS5jOjg2NgorIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNyBidWlsdGluL2NvbmZpZy5jOjEzMCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjQgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjggYnVpbHRpbi9ncmVwLmM6ODg3CisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjAgYnVpbHRpbi9scy1maWxlcy5jOjU2MworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMiBidWlsdGluL25vdGVzLmM6NTc4IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIzCisjOiBwYXJzZS1vcHRpb25zLmg6MTkwCittc2dpZCAiZmlsZSIKK21zZ3N0ciAiZmlsIgorCisjOiBhcmNoaXZlLmM6NDYxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJza3JpdiBhcmtpdmV0IHRpbGwgZmlsZW4iCisKKyM6IGFyY2hpdmUuYzo0NjMKK21zZ2lkICJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJsw6RzIC5naXRhdHRyaWJ1dGVzIGkgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBhcmNoaXZlLmM6NDY0Cittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAicmFwcG9ydGVyYSBhcmtpdmVyYWRlIGZpbGVyIHDDpSBzdGFuZGFyZCBmZWwiCisKKyM6IGFyY2hpdmUuYzo0NjUKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICJlbmRhc3Qgc3BhcmEiCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgImtvbXByaW1lcmEgc25hYmJhcmUiCisKKyM6IGFyY2hpdmUuYzo0NzQKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgImtvbXByaW1lcmEgYsOkdHRyZSIKKworIzogYXJjaGl2ZS5jOjQ3NworbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAidmlzYSB1bmRlcnN0w7ZkZGEgYXJraXZmb3JtYXQiCisKKyM6IGFyY2hpdmUuYzo0NzkgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9jbG9uZS5jOjExMyBidWlsdGluL2Nsb25lLmM6MTE2CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMQorbXNnaWQgInJlcG8iCittc2dzdHIgImFya2l2IgorCisjOiBhcmNoaXZlLmM6NDgwIGJ1aWx0aW4vYXJjaGl2ZS5jOjkyCittc2dpZCAicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iCittc2dzdHIgImjDpG10YSBhcmtpdmV0IGZyw6VuIGZqw6RycmFya2l2ZXQgPGFya2l2PiIKKworIzogYXJjaGl2ZS5jOjQ4MSBidWlsdGluL2FyY2hpdmUuYzo5MyBidWlsdGluL2RpZmZ0b29sLmM6NzE1CisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAia29tbWFuZG8iCisKKyM6IGFyY2hpdmUuYzo0ODIgYnVpbHRpbi9hcmNoaXZlLmM6OTQKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgInPDtmt2w6RnIHRpbGwga29tbWFuZG90IGdpdC11cGxvYWQtYXJjaGl2ZSBww6UgZmrDpHJyZW4iCisKKyM6IGFyY2hpdmUuYzo0ODkKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLXJlbW90ZSIKK21zZ3N0ciAiT3bDpG50YWQgZmxhZ2dhIC0tcmVtb3RlIgorCisjOiBhcmNoaXZlLmM6NDkxCittc2dpZCAiT3B0aW9uIC0tZXhlYyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1yZW1vdGUiCittc2dzdHIgIkZsYWdnYW4gLS1leGVjIGthbiBlbmRhc3QgYW52w6RuZGFzIHRpbGxzYW1tYW5zIG1lZCAtLXJlbW90ZSIKKworIzogYXJjaGl2ZS5jOjQ5MworbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tb3V0cHV0IgorbXNnc3RyICJPdsOkbnRhZCBmbGFnZ2EgLS1vdXRwdXQiCisKKyM6IGFyY2hpdmUuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBhcmNoaXZlIGZvcm1hdCAnJXMnIgorbXNnc3RyICJPa8OkbnQgYXJraXZmb3JtYXQgXCIlc1wiIgorCisjOiBhcmNoaXZlLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiCittc2dzdHIgIkFyZ3VtZW50ZXQgc3TDtmQgaW50ZSBmw7ZyIGZvcm1hdGV0IFwiJXNcIjogLSVkIgorCisjOiBhcmNoaXZlLXRhci5jOjEyNSBhcmNoaXZlLXppcC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyZWFtIGJsb2IgJXMiCittc2dzdHIgImthbiBpbnRlIHN0csO2bW1hIGJsb2I6ZW4gJXMiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjY2IGFyY2hpdmUtemlwLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiCittc2dzdHIgImZpbGVucyBsw6RnZSBzdMO2ZHMgZWo6IDAlbyAoU0hBMTogJXMpIgorCisjOiBhcmNoaXZlLXRhci5jOjI5MyBhcmNoaXZlLXppcC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlcyIKK21zZ3N0ciAia2FuIGludGUgbMOkc2EgJXMiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnJXMnIGZpbHRlciIKK21zZ3N0ciAia3VuZGUgaW50ZSBzdGFydGEgZmlsdHJldCBcIiVzXCIiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY4Cittc2dpZCAidW5hYmxlIHRvIHJlZGlyZWN0IGRlc2NyaXB0b3IiCittc2dzdHIgImthbiBpbnRlIG9tZGlyaWdlcmEgaGFuZHRhZyIKKworIzogYXJjaGl2ZS10YXIuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWx0ZXIgcmVwb3J0ZWQgZXJyb3IiCittc2dzdHIgImZpbHRyZXQgXCIlc1wiIHJhcHBvcnRlcmFkZSBmZWwiCisKKyM6IGFyY2hpdmUtemlwLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggaXMgbm90IHZhbGlkIFVURi04OiAlcyIKK21zZ3N0ciAic8O2a3bDpGdlbiDDpHIgaW50ZSBnaWx0aWcgVVRGLTg6ICVzIgorCisjOiBhcmNoaXZlLXppcC5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoIHRvbyBsb25nICglZCBjaGFycywgU0hBMTogJXMpOiAlcyIKK21zZ3N0ciAic8O2a3bDpGdlbiBmw7ZyIGzDpW5nICglZCB0ZWNrZW4sIFNIQTE6ICVzKTogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6NDgwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMxIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGUgZXJyb3IgKCVkKSIKK21zZ3N0ciAiZmVsIGkgZGVmbGF0ZSAoJWQpIgorCisjOiBhcmNoaXZlLXppcC5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lc3RhbXAgdG9vIGxhcmdlIGZvciB0aGlzIHN5c3RlbTogJTxQUkl1TUFYPiIKK21zZ3N0ciAidGlkc3N0w6RtcGVsbiBmw7ZyIHN0b3IgZsO2ciBkZXR0YSBzeXN0ZW06ICU8UFJJdU1BWD4iCisKKyM6IGF0dHIuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZSIKK21zZ3N0ciAiJS0qcyDDpHIgaW50ZSBldHQgZ2lsdGlndCBuYW1uIHDDpSBhdHRyaWJ1dCIKKworIzogYXR0ci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBub3QgYWxsb3dlZDogJXM6JWQiCittc2dzdHIgIiVzIGludGUgdGlsbMOldGV0OiAlczolZCIKKworIzogYXR0ci5jOjQwOQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorIk5lZ2F0aXZhIG3Dtm5zdGVyIGlnbm9yZXJhcyBpIGdpdC1hdHRyaWJ1dFxuIgorIkFudsOkbmQgJ1xcIScgZsO2ciBhdHQgaW5sZWRhIG1lZCBldHQgdXRyb3BzdGVja2VuLiIKKworIzogYmlzZWN0LmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiCittc2dzdHIgIkZlbGFrdGlndCBjaXRlcmF0IGlubmVow6VsbCBpIGZpbGVuIFwiJXNcIjogJXMiCisKKyM6IGJpc2VjdC5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhXG4iCittc2dzdHIgIkRldCBmaW5ucyBpbnRlIG1lciBhdHQgZ8O2cmEgXCJiaXNlY3RcIiBww6UhXG4iCisKKyM6IGJpc2VjdC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBjb21taXQgbmFtZSAlcyIKK21zZ3N0ciAiTmFtbmV0IHDDpSBpbmNoZWNrbmluZ2VuIMOkciBpbnRlIGdpbHRpZ3Q6ICVzIgorCisjOiBiaXNlY3QuYzo3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIGJhZC5cbiIKKyJUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIlNhbW1hbnNsYWduaW5nc2Jhc2VuICVzIMOkciB0cmFzaWcuXG4iCisiRGV0IGJldHlkZXIgYXR0IGZlbGV0IGhhciByw6R0dGF0cyBtZWxsYW4gJXMgb2NoIFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgbmV3LlxuIgorIlRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiU2FtbWFuc2xhZ25pbmdzYmFzZW4gJXMgw6RyIG55LlxuIgorIkVnZW5za2FwZW4gaGFyIMOkbmRyYXRzIG1lbGxhbiAlcyBvY2ggWyVzXS5cbiIKKworIzogYmlzZWN0LmM6NzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyAlcy5cbiIKKyJUaGlzIG1lYW5zIHRoZSBmaXJzdCAnJXMnIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiU2FtbWFuc2xhZ25pbmdzYmFzZW4gJXMgw6RyICVzLlxuIgorIkRldCBiZXR5ZGVyIGF0dCBkZW4gZsO2cnN0YSBcIiVzXCIgaW5jaGVja25pbmdlbiDDpHIgbWVsbGFuICVzIG9jaCBbJXNdLlxuIgorCisjOiBiaXNlY3QuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNvbWUgJXMgcmV2cyBhcmUgbm90IGFuY2VzdG9ycyBvZiB0aGUgJXMgcmV2LlxuIgorImdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLlxuIgorIk1heWJlIHlvdSBtaXN0b29rICVzIGFuZCAlcyByZXZzP1xuIgorbXNnc3RyICIiCisiTsOlZ3JhICVzLXJldmlzaW9uZXIgw6RyIGludGUgZsO2csOkbGRyYXIgdGlsbCAlcy1yZXZpc2lvbmVuLlxuIgorImdpdCBiaXNlY3Qga2FuIGludGUgZnVuZ2VyYSBrb3JyZWt0IGkgZGV0dGEgZmFsbC5cbiIKKyJLYW5za2UgZHUgc2tyZXYgZmVsICVzLSBvY2ggJXMtcmV2aXNpb25lcj9cbiIKKworIzogYmlzZWN0LmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdIG11c3QgYmUgc2tpcHBlZC5cbiIKKyJTbyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGUgZmlyc3QgJXMgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kICVzLlxuIgorIldlIGNvbnRpbnVlIGFueXdheS4iCittc2dzdHIgIiIKKyJzYW1tYW5zbGFnbmluZ3NiYXNlbiBtZWxsYW4gJXMgb2NoIFslc10gbcOlc3RlIGhvcHBhcyDDtnZlci5cbiIKKyJWaSBrYW4gaW50ZSB2YXJhIHPDpGtyYSBww6UgYXR0IGRlbiBmw7Zyc3RhICVzIGluY2hlY2tuaW5nZW4gw6RyIG1lbGxhbiAlcyBvY2ggIgorIiVzLlxuIgorIlZpIGZvcnRzw6R0dGVyIMOkbmTDpS4iCisKKyM6IGJpc2VjdC5jOjg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6IGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZFxuIgorbXNnc3RyICJCaXNlY3Q6IGVuIHNhbW1hbnNsYWduaW5nc2JhcyBtw6VzdGUgdGVzdGFzXG4iCisKKyM6IGJpc2VjdC5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJhICVzIHJldmlzaW9uIGlzIG5lZWRlZCIKK21zZ3N0ciAiZW4gJXMtcmV2aXNpb24gYmVow7Z2cyIKKworIzogYmlzZWN0LmM6OTIwIGJ1aWx0aW4vbm90ZXMuYzoxNzcgYnVpbHRpbi90YWcuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUgc2thcGEgZmlsZW4gXCIlc1wiIgorCisjOiBiaXNlY3QuYzo5NjYgYnVpbHRpbi9tZXJnZS5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgZmlsZW4gXCIlc1wiIgorCisjOiBiaXNlY3QuYzo5OTcKK21zZ2lkICJyZWFkaW5nIGJpc2VjdCByZWZzIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGzDpHNhIGJpc2VjdC1yZWZlcmVuc2VyIgorCisjOiBiaXNlY3QuYzoxMDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHdhcyBib3RoICVzIGFuZCAlc1xuIgorbXNnc3RyICIlcyB2YXIgYsOlZGUgJXMgb2NoICVzXG4iCisKKyM6IGJpc2VjdC5jOjEwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKyJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iCittc2dzdHIgIiIKKyJJbmdlbiB0ZXN0YmFyIGluY2hlY2tuaW5nIGhpdHRhZGVzLlxuIgorIkthbnNrZSBkdSBzdGFydGFkZSBtZWQgZmVsYWt0aWdhIHPDtmt2w6Rnc3BhcmFtZXRyYXI/XG4iCisKKyM6IGJpc2VjdC5jOjEwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJvdWdobHkgJWQgc3RlcCkiCittc2dpZF9wbHVyYWwgIihyb3VnaGx5ICVkIHN0ZXBzKSIKK21zZ3N0clswXSAiKHVuZ2Vmw6RyICVkIHN0ZWcpIgorbXNnc3RyWzFdICIodW5nZWbDpHIgJWQgc3RlZykiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgbGFzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggIihyb3VnaGx5ICVkCisjLiBzdGVwcykiIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJpc2VjdC5jOjEwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICJCaXNlY3Q6ICVkIHJldmlzaW9uIGt2YXIgYXR0IHRlc3RhIGVmdGVyIGRlbm5hICVzXG4iCittc2dzdHJbMV0gIkJpc2VjdDogJWQgcmV2aXNpb25lciBrdmFyIGF0dCB0ZXN0YSBlZnRlciBkZW5uYSAlc1xuIgorCisjOiBibGFtZS5jOjI3MDAKK21zZ2lkICItLWNvbnRlbnRzIGFuZCAtLXJldmVyc2UgZG8gbm90IGJsZW5kIHdlbGwuIgorbXNnc3RyICItLWNvbnRlbnRzIG9jaCAtLXJldmVyc2UgZnVuZ2VyYXIgaW50ZSBzw6UgYnJhIHRpbGxzYW1tYW5zLiIKKworIzogYmxhbWUuYzoyNzE0Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbnRlbnRzIHdpdGggZmluYWwgY29tbWl0IG9iamVjdCBuYW1lIgorbXNnc3RyICJrYW4gaW50ZSBhbnbDpG5kYSAtLWNvbnRlbnRzIG1lZCBuYW1uIHDDpSBzbHV0Z2lsdGlndCBpbmNoZWNrbmluZ3NvYmpla3QiCisKKyM6IGJsYW1lLmM6MjczNQorbXNnaWQgIi0tcmV2ZXJzZSBhbmQgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSBzcGVjaWZpZWQgbGF0ZXN0IGNvbW1pdCIKK21zZ3N0ciAiIgorIi0tcmV2ZXJzZSBvY2ggLS1maXJzdC1wYXJlbnQgdGlsbHNhbW1hbnMga3LDpHZlciBhdHQgZHUgYW5nZXIgc2VuYXN0ZSAiCisiaW5jaGVja25pbmdlbiIKKworIzogYmxhbWUuYzoyNzQ0IGJ1bmRsZS5jOjE2NyByZWYtZmlsdGVyLmM6MjIwMyByZW1vdGUuYzoxOTQyIHNlcXVlbmNlci5jOjIwMDYKKyM6IHNlcXVlbmNlci5jOjQzNTggc3VibW9kdWxlLmM6ODQ3IGJ1aWx0aW4vY29tbWl0LmM6MTA0NSBidWlsdGluL2xvZy5jOjM4OAorIzogYnVpbHRpbi9sb2cuYzo5OTEgYnVpbHRpbi9sb2cuYzoxNTIwIGJ1aWx0aW4vbG9nLmM6MTkyNSBidWlsdGluL2xvZy5jOjIyMTUKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0MTIgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MAorIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE5MgorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2thcGEgcmV2aXNpb25zdHJhdmVyc2VyaW5nIgorCisjOiBibGFtZS5jOjI3NjIKK21zZ2lkICIiCisiLS1yZXZlcnNlIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgcmFuZ2UgYWxvbmcgZmlyc3QtcGFyZW50IGNoYWluIgorbXNnc3RyICIiCisiLS1yZXZlcnNlIC0tZmlyc3QtcGFyZW50IHRpbGxzYW1tYW5zIGtyw6R2ZXIgZXR0IGludGVydmFsbCBww6UgZsO2cnN0YS1mw7Zyw6RsZGVyLSIKKyJrZWRqYW4iCisKKyM6IGJsYW1lLmM6Mjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHBhdGggJXMgaW4gJXMiCittc2dzdHIgInPDtmt2w6RnZW4gJXMgaSAlcyBmaW5ucyBpbnRlIgorCisjOiBibGFtZS5jOjI3ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgYmxvYiAlcyBmb3IgcGF0aCAlcyIKK21zZ3N0ciAia2FuIGludGUgbMOkc2Egb2JqZWt0ZXQgJXMgZsO2ciBzw7ZrdsOkZ2VuICVzIgorCisjOiBicmFuY2guYzo1MworIywgYy1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCi0iKiBVbnRyYWNrZWQgZmlsZSBjbGlwcGVkIGhlcmUgYnkgJXMuXG4iCi0iKiBUbyBzZWUgdGhlIGVudGlyZSBmaWxlLCB1c2UgYW4gZXh0ZXJuYWwgZWRpdG9yLlxuIgorIkFmdGVyIGZpeGluZyB0aGUgZXJyb3IgY2F1c2UgeW91IG1heSB0cnkgdG8gZml4IHVwXG4iCisidGhlIHJlbW90ZSB0cmFja2luZyBpbmZvcm1hdGlvbiBieSBpbnZva2luZ1xuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIi4iCiBtc2dzdHIgIiIKICJcbiIKLSIqIERlbiBvc3DDpXJhZGUgZmlsZW4ga2xpcHB0ZXMgaMOkciBhdiAlcy5cbiIKLSIqIEbDtnIgYXR0IHNlIGhlbGEgZmlsZW4sIGFudsOkbmQgZXR0IGV4dGVybnQgcmVkaWdlcmluZ3Nwcm9ncmFtLlxuIgorIk7DpHIgZHUgaGFyIHLDpHR0YXQgZmVsb3JzYWtlbiBrYW4gZHUgZsO2cnPDtmthIHLDpHR0YVxuIgorImZqw6RycnNww6VybmluZ3NpbmZvcm1hdGlvbmVuIGdlbm9tIGF0dCB1dGbDtnJhXG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiLiIKIAotIzogbGliL2RpZmYudGNsOjM1NiBsaWIvYmxhbWUudGNsOjExMjgKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgotbXNnc3RyICJGZWwgdmlkIGlubMOkc25pbmcgYXYgZGlmZmVyZW5zOiIKKyM6IGJyYW5jaC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAiU3TDpGxsZXIgaW50ZSBpbiBncmVuZW4gJXMgc29tIHNpbiBlZ2VuIHVwcHN0csO2bXNncmVuLiIKIAotIzogbGliL2RpZmYudGNsOjU3OAotbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICJLdW5kZSBpbnRlIHRhIGJvcnQgZGVuIHZhbGRhIGRlbGVuIGZyw6VuIGvDtm4uIgotCi0jOiBsaWIvZGlmZi50Y2w6NTg1Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICJLdW5kZSBpbnRlIGzDpGdnYSB0aWxsIGRlbiB2YWxkYSBkZWxlbiB0aWxsIGvDtm4uIgotCi0jOiBsaWIvZGlmZi50Y2w6NjY0Ci1tc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCi1tc2dzdHIgIkt1bmRlIGludGUgdGEgYm9ydCBkZW4gdmFsZGEgcmFkZW4gZnLDpW4ga8O2bi4iCi0KLSM6IGxpYi9kaWZmLnRjbDo2NzIKLW1zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCi1tc2dzdHIgIkt1bmRlIGludGUgbMOkZ2dhIHRpbGwgZGVuIHZhbGRhIHJhZGVuIHRpbGwga8O2bi4iCi0KLSM6IGxpYi9yZW1vdGUudGNsOjIwMAotbXNnaWQgIlB1c2ggdG8iCi1tc2dzdHIgIlPDpG5kIHRpbGwiCi0KLSM6IGxpYi9yZW1vdGUudGNsOjIxOAotbXNnaWQgIlJlbW92ZSBSZW1vdGUiCi1tc2dzdHIgIlRhIGJvcnQgZmrDpHJyYXJraXYiCi0KLSM6IGxpYi9yZW1vdGUudGNsOjIyMwotbXNnaWQgIlBydW5lIGZyb20iCi1tc2dzdHIgIlRhIGJvcnQgZnLDpW4iCi0KLSM6IGxpYi9yZW1vdGUudGNsOjIyOAotbXNnaWQgIkZldGNoIGZyb20iCi1tc2dzdHIgIkjDpG10YSBmcsOlbiIKLQotIzogbGliL2Nob29zZV9mb250LnRjbDo0MQotbXNnaWQgIlNlbGVjdCIKLW1zZ3N0ciAiVsOkbGoiCi0KLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NTUKLW1zZ2lkICJGb250IEZhbWlseSIKLW1zZ3N0ciAiVGVja2Vuc25pdHRzZmFtaWxqIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjc2Ci1tc2dpZCAiRm9udCBTaXplIgotbXNnc3RyICJTdG9ybGVrIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjkzCi1tc2dpZCAiRm9udCBFeGFtcGxlIgotbXNnc3RyICJFeGVtcGVsIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwNQotbXNnaWQgIiIKLSJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKLSJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorIzogYnJhbmNoLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycgYnkgcmViYXNpbmcuIgogbXNnc3RyICIiCi0iRGV0dGEgw6RyIGVuIGV4ZW1wZWx0ZXh0LlxuIgotIk9tIGR1IHR5Y2tlciBvbSBkZW4gaMOkciB0ZXh0ZW4ga2FuIGRlbiB2YXJhIGRpdHQgdGVja2Vuc25pdHQuIgorIkdyZW5lbiAlcyBzdMOkbGxkZXMgaW4gYXR0IHNww6VyYSBmasOkcnJncmVuZW4gXCIlc1wiIGZyw6VuIFwiJXNcIiBnZW5vbSAiCisib21iYXNlcmluZy4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKLW1zZ3N0ciAiRGVuIGdsb2JhbGEgdGVja2Vua29kbmluZ2VuIFwiJXNcIiDDpHIgb2dpbHRpZyIKKyM6IGJyYW5jaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnLiIKK21zZ3N0ciAiR3JlbmVuICVzIHN0w6RsbGRlcyBpbiBhdHQgc3DDpXJhIGZqw6RycmdyZW5lbiBcIiVzXCIgZnLDpW4gXCIlc1wiLiIKIAotIzogbGliL29wdGlvbi50Y2w6MTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKLW1zZ3N0ciAiQXJraXZldHMgdGVja2Vua29kbmluZyBcIiVzXCIgw6RyIG9naWx0aWciCi0KLSM6IGxpYi9vcHRpb24udGNsOjExOQotbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCi1tc2dzdHIgIsOFdGVyc3TDpGxsIHN0YW5kYXJkdsOkcmRlbiIKLQotIzogbGliL29wdGlvbi50Y2w6MTIzCi1tc2dpZCAiU2F2ZSIKLW1zZ3N0ciAiU3BhcmEiCi0KLSM6IGxpYi9vcHRpb24udGNsOjEzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIFJlcG9zaXRvcnkiCi1tc2dzdHIgIkFya2l2ZXQgJXMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjEzNAotbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCi1tc2dzdHIgIkdsb2JhbHQgKGFsbGEgYXJraXYpIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDAKLW1zZ2lkICJVc2VyIE5hbWUiCi1tc2dzdHIgIkFudsOkbmRhcm5hbW4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0MQotbXNnaWQgIkVtYWlsIEFkZHJlc3MiCi1tc2dzdHIgIkUtcG9zdGFkcmVzcyIKLQotIzogbGliL29wdGlvbi50Y2w6MTQzCi1tc2dpZCAiU3VtbWFyaXplIE1lcmdlIENvbW1pdHMiCi1tc2dzdHIgIlN1bW1lcmEgc2FtbWFuc2xhZ25pbmdzaW5jaGVja25pbmdhciIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ0Ci1tc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgotbXNnc3RyICJQcmF0c2FtaGV0IGbDtnIgc2FtbWFuc2xhZ25pbmdhciIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ1Ci1tc2dpZCAiU2hvdyBEaWZmc3RhdCBBZnRlciBNZXJnZSIKLW1zZ3N0ciAiVmlzYSBkaWZmc3RhdGlzdGlrIGVmdGVyIHNhbW1hbnNsYWduaW5nIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDYKLW1zZ2lkICJVc2UgTWVyZ2UgVG9vbCIKLW1zZ3N0ciAiQW52w6RuZCB2ZXJrdHlnIGbDtnIgc2FtbWFuc2xhZ25pbmciCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0OAotbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCi1tc2dzdHIgIkxpdGEgcMOlIGZpbMOkbmRyaW5nc3RpZHNzdMOkbXBsYXIiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0OQotbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKLW1zZ3N0ciAiU3TDpGRhIHNww6VyYWRlIGdyZW5hciB2aWQgaMOkbXRuaW5nIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTAKLW1zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2hlcyIKLW1zZ3N0ciAiTWF0Y2hhIHNww6VyYWRlIGdyZW5hciIKLQotIzogbGliL29wdGlvbi50Y2w6MTUxCi1tc2dpZCAiVXNlIFRleHRjb252IEZvciBEaWZmcyBhbmQgQmxhbWVzIgotbXNnc3RyICJBbnbDpG5kIFRleHRjb252IGbDtnIgZGlmZiBvY2gga2xhbmRyaW5nIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTIKLW1zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKLW1zZ3N0ciAiS2xhbmRyYSBrb3BpZXJpbmcgYmFyYSBpIMOkbmRyYWRlIGZpbGVyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTMKLW1zZ2lkICJNYXhpbXVtIExlbmd0aCBvZiBSZWNlbnQgUmVwb3NpdG9yaWVzIExpc3QiCi1tc2dzdHIgIk1heCBsw6RuZ2QgZsO2ciBsaXN0YSDDtnZlciB0aWRpZ2FyZSBhcmtpdiIKLQotIzogbGliL29wdGlvbi50Y2w6MTU0Ci1tc2dpZCAiTWluaW11bSBMZXR0ZXJzIFRvIEJsYW1lIENvcHkgT24iCi1tc2dzdHIgIk1pbnN0YSBhbnRhbCB0ZWNrZW4gYXR0IGtsYW5kcmEga29waWVyaW5nIGbDtnIiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1NQotbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgotbXNnc3RyICJIaXN0b3Jpa3JhZGllIGbDtnIga2xhbmRyaW5nIChkYWdhcikiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1NgotbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCi1tc2dzdHIgIkFudGFsIHJhZGVyIHNhbW1hbmhhbmcgaSBkaWZmZXJlbnNlciIKLQotIzogbGliL29wdGlvbi50Y2w6MTU3Ci1tc2dpZCAiQWRkaXRpb25hbCBEaWZmIFBhcmFtZXRlcnMiCi1tc2dzdHIgIll0dGVybGlnYXJlIGRpZmYtcGFyYW1ldHJhciIKLQotIzogbGliL29wdGlvbi50Y2w6MTU4Ci1tc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKLW1zZ3N0ciAiVGV4dGJyZWRkIGbDtnIgaW5jaGVja25pbmdzbWVkZGVsYW5kZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTU5Ci1tc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgotbXNnc3RyICJNYWxsIGbDtnIgbmFtbiBww6UgbnlhIGdyZW5hciIKLQotIzogbGliL29wdGlvbi50Y2w6MTYwCi1tc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgotbXNnc3RyICJTdGFuZGFyZHRlY2tlbmtvZG5pbmcgZsO2ciBmaWxpbm5laMOlbGwiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE2MQotbXNnaWQgIldhcm4gYmVmb3JlIGNvbW1pdHRpbmcgdG8gYSBkZXRhY2hlZCBoZWFkIgotbXNnc3RyICJWYXJuYSBmw7ZyIGluY2hlY2tuaW5nIHDDpSBmcsOlbmtvcHBsYXQgaHV2dWQiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE2MgotbXNnaWQgIlN0YWdpbmcgb2YgdW50cmFja2VkIGZpbGVzIgotbXNnc3RyICJLw7ZhIG9zcMOlcmFkZSBmaWxlciIKLQotIzogbGliL29wdGlvbi50Y2w6MTYzCi1tc2dpZCAiU2hvdyB1bnRyYWNrZWQgZmlsZXMiCi1tc2dzdHIgIlZpc2Egb3Nww6VyYWRlIGZpbGVyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNjQKLW1zZ2lkICJUYWIgc3BhY2luZyIKLW1zZ3N0ciAiQmxhbmtzdGVnIGbDtnIgdGFidWxhdG9ydGVja2VuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyMTAKLW1zZ2lkICJDaGFuZ2UiCi1tc2dzdHIgIsOEbmRyYSIKLQotIzogbGliL29wdGlvbi50Y2w6MjU0Ci1tc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCi1tc2dzdHIgIlN0YXZuaW5nc29yZGxpc3RhOiIKLQotIzogbGliL29wdGlvbi50Y2w6Mjg0Ci1tc2dpZCAiQ2hhbmdlIEZvbnQiCi1tc2dzdHIgIkJ5dCB0ZWNrZW5zbml0dCIKLQotIzogbGliL29wdGlvbi50Y2w6Mjg4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hvb3NlICVzIgotbXNnc3RyICJWw6RsaiAlcyIKLQotIzogbGliL29wdGlvbi50Y2w6Mjk0Ci1tc2dpZCAicHQuIgotbXNnc3RyICJwLiIKLQotIzogbGliL29wdGlvbi50Y2w6MzA4Ci1tc2dpZCAiUHJlZmVyZW5jZXMiCi1tc2dzdHIgIkluc3TDpGxsbmluZ2FyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDozNDUKLW1zZ2lkICJGYWlsZWQgdG8gY29tcGxldGVseSBzYXZlIG9wdGlvbnM6IgotbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCBoZWx0IHNwYXJhIGFsdGVybmF0aXY6IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo4Ci1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKLW1zZ3N0ciAiVHZpbmdhIGzDtnNuaW5nIGF0dCBhbnbDpG5kYSBiYXN2ZXJzaW9uZW4/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo5Ci1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCi1tc2dzdHIgIlR2aW5nYSBsw7ZzbmluZyBhdHQgYW52w6RuZGEgZGVuIGFrdHVlbGxhIGdyZW5lbj8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCi1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKLW1zZ3N0ciAiVHZpbmdhIGzDtnNuaW5nIGF0dCBhbnbDpG5kYSBkZW4gYW5kcmEgZ3JlbmVuPyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MTQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKLSJcbiIKLSIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgotIlxuIgotIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCisjOiBicmFuY2guYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycgYnkgcmViYXNpbmcuIgogbXNnc3RyICIiCi0iT2JzZXJ2ZXJhIGF0dCBkaWZmZW4gZW5kYXN0IHZpc2FyIGRlIMOkbmRyaW5nYXIgc29tIHN0w6VyIGkga29uZmxpa3QuXG4iCi0iXG4iCi0iJXMga29tbWVyIGF0dCBza3JpdmFzIMO2dmVyLlxuIgotIlxuIgotIkR1IG3DpXN0ZSBzdGFydGEgb20gc2FtbWFuc2xhZ25pbmdlbiBmw7ZyIGF0dCBnw7ZyYSBkZW4gaMOkciBvcGVyYXRpb25lbiBvZ2pvcmQuIgorIkdyZW5lbiBcIiVzXCIgc3TDpGxsZGVzIGluIGF0dCBzcMOlcmEgZGVuIGxva2FsYSBncmVuZW4gXCIlc1wiICBnZW5vbSAiCisib21iYXNlcmluZy4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmlsZSAlcyBzZWVtcyB0byBoYXZlIHVucmVzb2x2ZWQgY29uZmxpY3RzLCBzdGlsbCBzdGFnZT8iCi1tc2dzdHIgIkZpbGVuICVzIHZlcmthciBpbm5laMOlbGxhIG9sw7ZzdGEga29uZmxpa3Rlci4gVmlsbCBkdSBrw7ZhIMOkbmTDpT8iCisjOiBicmFuY2guYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycuIgorbXNnc3RyICJHcmVuZW4gXCIlc1wiIHN0w6RsbGRlcyBpbiBhdHQgc3DDpXJhIGRlbiBsb2thbGEgZ3JlbmVuIFwiJXNcIi4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWRkaW5nIHJlc29sdXRpb24gZm9yICVzIgotbXNnc3RyICJMw6RnZ2VyIHRpbGwgbMO2c25pbmcgZsO2ciAlcyIKKyM6IGJyYW5jaC5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIkdyZW5lbiBcIiVzXCIgc3TDpGxsZGVzIGluIGF0dCBzcMOlcmEgZmrDpHJyZWZlcmVuc2VuIFwiJXNcIiBnZW5vbSBvbWJhc2VyaW5nLiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MTQxCi1tc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgotbXNnc3RyICJLYW4gaW50ZSBsw7ZzYSBib3J0dGFnbmluZ3MtIGVsbGVyIGzDpG5ra29uZmxpa3RlciBtZWQgZXR0IHZlcmt0eWciCisjOiBicmFuY2guYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJy4iCittc2dzdHIgIkdyZW5lbiBcIiVzXCIgc3TDpGxsZGVzIGluIGF0dCBzcMOlcmEgZmrDpHJyZWZlcmVuc2VuIFwiJXNcIi4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0NgotbXNnaWQgIkNvbmZsaWN0IGZpbGUgZG9lcyBub3QgZXhpc3QiCi1tc2dzdHIgIktvbmZsaWt0ZmlsIGV4aXN0ZXJhciBpbnRlIgorIzogYnJhbmNoLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJHcmVuZW4gXCIlc1wiIHN0w6RsbGRlcyBpbiBhdHQgc3DDpXJhIGRlbiBsb2thbGEgcmVmZXJlbnNlbiBcIiVzXCIgZ2Vub20gIgorIm9tYmFzZXJpbmcuIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoyNDYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKLW1zZ3N0ciAiSW50ZSBldHQgZ3JhZmlza3QgdmVya3R5ZyBmw7ZyIHNhbW1hbnNsYWduaW5nOiAlcyIKKyM6IGJyYW5jaC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycuIgorbXNnc3RyICJHcmVuZW4gXCIlc1wiIHN0w6RsbGRlcyBpbiBhdHQgc3DDpXJhIGRlbiBsb2thbGEgcmVmZXJlbnNlbiBcIiVzXCIuIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoyNzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbnN1cHBvcnRlZCBtZXJnZSB0b29sICclcyciCi1tc2dzdHIgIlZlcmt0eWdldCBcIiVzXCIgZsO2ciBzYW1tYW5zbGFnbmluZyBzdMO2ZHMgaW50ZSIKKyM6IGJyYW5jaC5jOjExOQorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhIGluc3TDpGxsbmluZ2FyIGbDtnIgdXBwc3Ryw7Ztc2dyZW4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjMxMAotbXNnaWQgIk1lcmdlIHRvb2wgaXMgYWxyZWFkeSBydW5uaW5nLCB0ZXJtaW5hdGUgaXQ/IgotbXNnc3RyICJWZXJrdHlnZXQgZsO2ciBzYW1tYW5zbGFnbmluZyBrw7ZycyByZWRhbi4gVmlsbCBkdSBhdnNsdXRhIGRldD8iCisjOiBicmFuY2guYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAiU3DDpXJhciBpbnRlOiB0dmV0eWRpZyBpbmZvcm1hdGlvbiBmw7ZyIHJlZmVyZW5zZW4gJXMiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjMzMAotIywgdGNsLWZvcm1hdAorIzogYnJhbmNoLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgYnJhbmNoIG5hbWUuIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZXR0IGdpbHRpZ3QgZ3Jlbm5hbW4uIgorCisjOiBicmFuY2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkRldCBmaW5ucyByZWRhbiBlbiBncmVuIHNvbSBoZXRlciBcIiVzXCIuIgorCisjOiBicmFuY2guYzoyMTMKK21zZ2lkICJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIkthbiBpbnRlIHR2aW5nYSB1cHBkYXRlcmluZyBhdiBha3R1ZWxsIGdyZW4uIgorCisjOiBicmFuY2guYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iCittc2dzdHIgIkthbiBpbnRlIHN0w6RsbGEgaW4gc3DDpXJuaW5nOyBzdGFydHB1bmt0ZW4gXCIlc1wiIMOkciBpbnRlIGVuIGdyZW4uIgorCisjOiBicmFuY2guYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHJlcXVlc3RlZCB1cHN0cmVhbSBicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiZGVuIGVmdGVyZnLDpWdhZGUgdXBwc3Ryw7Ztc2dyZW5lbiBcIiVzXCIgZmlubnMgaW50ZSIKKworIzogYnJhbmNoLmM6MjM3CiBtc2dpZCAiIgotIkVycm9yIHJldHJpZXZpbmcgdmVyc2lvbnM6XG4iCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyBvbiBiYXNpbmcgeW91ciB3b3JrIG9uIGFuIHVwc3RyZWFtXG4iCisiYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXQgdGhlIHJlbW90ZSwgeW91IG1heSBuZWVkIHRvXG4iCisicnVuIFwiZ2l0IGZldGNoXCIgdG8gcmV0cmlldmUgaXQuXG4iCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyB0byBwdXNoIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggdGhhdFxuIgorIndpbGwgdHJhY2sgaXRzIHJlbW90ZSBjb3VudGVycGFydCwgeW91IG1heSB3YW50IHRvIHVzZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB0byBzZXQgdGhlIHVwc3RyZWFtIGNvbmZpZyBhcyB5b3UgcHVzaC4iCittc2dzdHIgIiIKKyJcbiIKKyJPbSBkdSBoYXIgdMOkbmt0IGJhc2VyYSBkaXR0IGFyYmV0ZSBww6UgZW4gdXBwc3Ryw7Ztc2dyZW5cbiIKKyJzb20gcmVkYW4gZmlubnMgcMOlIGZqw6RycmVuIGthbiBkdSBiZWjDtnZhIGvDtnJhIFwiZ2l0IGZldGNoXCJcbiIKKyJmw7ZyIGF0dCBow6RtdGEgZGVuLlxuIgorIlxuIgorIk9tIGR1IGhhciB0w6Rua3Qgc8OkbmRhIGluIGVuIG55IGxva2FsIGdyZW4gc29tIHNrYVxuIgorInNww6VyYSBkZXNzIGZqw6Rycm1vdHN2YXJpZ2hldCBrYW4gZHUgYW52w6RuZGEgXCJnaXQgcHVzaCAtdVwiXG4iCisiZsO2ciBhdHQgc3TDpGxsYSBpbiB1cHBzdHLDtm1za29uZmlndXJhdGlvbmVuIG7DpHIgZHUgc8OkbmRlciBpbi4iCisKKyM6IGJyYW5jaC5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIk9iamVrdG5hbW5ldCDDpHIgaW50ZSBnaWx0aWd0OiBcIiVzXCIuIgorCisjOiBicmFuY2guYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAiT2JqZWt0bmFtbmV0IMOkciB0dmV0eWRpZ3Q6IFwiJXNcIi4iCisKKyM6IGJyYW5jaC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBicmFuY2ggcG9pbnQ6ICclcycuIgorbXNnc3RyICJBdmdyZW5pbmdzcHVua3RlbiDDpHIgaW50ZSBnaWx0aWc6IFwiJXNcIi4iCisKKyM6IGJyYW5jaC5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiXCIlc1wiIMOkciByZWRhbiB1dGNoZWNrYWQgcMOlIFwiJXNcIiIKKworIzogYnJhbmNoLmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgb2Ygd29ya2luZyB0cmVlICVzIGlzIG5vdCB1cGRhdGVkIgorbXNnc3RyICJIRUFEIGkgYXJiZXRza2F0YWxvZ2VuICVzIGhhciBpbnRlIHVwcGRhdGVyYXRzIgorCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICInJXMnIHNlciBpbnRlIHV0IHNvbSBlbiB2Mi1idW5kbGUtZmlsIgorCisjOiBidW5kbGUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgIm9rw6RudCBodXZ1ZDogJXMlcyAoJWQpIgorCisjOiBidW5kbGUuYzo5MCByZXJlcmUuYzo0ODAgcmVyZXJlLmM6NjkwIHNlcXVlbmNlci5jOjIyNTggc2VxdWVuY2VyLmM6MzAxNgorIzogYnVpbHRpbi9jb21taXQuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDtnBwbmEgXCIlc1wiIgorCisjOiBidW5kbGUuYzoxNDMKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiQXJraXZldCBzYWtuYXIgZGVzc2EgbsO2ZHbDpG5kaWdhIGluY2hlY2tuaW5nYXI6IgorCisjOiBidW5kbGUuYzoxNDYKK21zZ2lkICJuZWVkIGEgcmVwb3NpdG9yeSB0byB2ZXJpZnkgYSBidW5kbGUiCittc2dzdHIgImJlaMO2dmVyIGV0dCBhcmtpdiBmw7ZyIGF0dCB2ZXJpZmllcmEgZXR0IHBha2V0IChidW5kbGUpLiIKKworIzogYnVuZGxlLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJQYWtldGV0IChidW5kbGVuKSBpbm5laMOlbGxlciBkZW5uYSByZWZlcmVuczoiCittc2dzdHJbMV0gIlBha2V0ZXQgKGJ1bmRsZW4pIGlubmVow6VsbGVyIGRlc3NhICVkIHJlZmVyZW5zZXI6IgorCisjOiBidW5kbGUuYzoyMDQKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAiUGFrZXRldCAoYnVuZGxlbikgYmVza3JpdmVyIGVuIGtvbXBsZXR0IGhpc3RvcmlrLiIKKworIzogYnVuZGxlLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJQYWtldGV0IChidW5kbGVuKSBrcsOkdmVyIGRlbm5hIHJlZmVyZW5zOiIKK21zZ3N0clsxXSAiUGFrZXRldCAoYnVuZGxlbikga3LDpHZlciBkZXNzYSAlZCByZWZlcmVuc2VyOiIKKworIzogYnVuZGxlLmM6MjczCittc2dpZCAidW5hYmxlIHRvIGR1cCBidW5kbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAia2FuIGludGUgZHVwbGljZXJhIHBha2V0aGFuZHRhZyIKKworIzogYnVuZGxlLmM6MjgwCittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzdGFydGEgcGFjay1vYmplY3RzIgorCisjOiBidW5kbGUuYzoyOTEKK21zZ2lkICJwYWNrLW9iamVjdHMgZGllZCIKK21zZ3N0ciAicGFjay1vYmplY3RzIG1pc3NseWNrYWRlcyIKKworIzogYnVuZGxlLmM6MzMzCittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAicmV2LWxpc3QgZG9nIgorCisjOiBidW5kbGUuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiCittc2dzdHIgInJlZmVyZW5zZW4gXCIlc1wiIGV4a2x1ZGVyYXMgYXYgYXJndW1lbnRlbiB0aWxsIHJldi1saXN0IgorCisjOiBidW5kbGUuYzo0NjEgYnVpbHRpbi9sb2cuYzoyMDMgYnVpbHRpbi9sb2cuYzoxODE0IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAib2vDpG50IGFyZ3VtZW50OiAlcyIKKworIzogYnVuZGxlLmM6NDY5Cittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgIlbDpGdyYXIgc2thcGEgZXR0IHRvbXQgcGFrZXQgKGJ1bmRsZSkuIgorCisjOiBidW5kbGUuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSBza2FwYSBcIiVzXCIiCisKKyM6IGJ1bmRsZS5jOjUwNAorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAiaW5kZXgtcGFjayBkb2ciCisKKyM6IGNvbG9yLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgImZlbGFrdGlndCBmw6RyZ3bDpHJkZTogJS4qcyIKKworIzogY29tbWl0LmM6NTEgc2VxdWVuY2VyLmM6MjcxOSBidWlsdGluL2FtLmM6MzU5IGJ1aWx0aW4vYW0uYzo0MDMKKyM6IGJ1aWx0aW4vYW0uYzoxMzcxIGJ1aWx0aW4vYW0uYzoyMDE0IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgJXMiCisKKyM6IGNvbW1pdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzIMOkciBpbnRlIGVuIGluY2hlY2tuaW5nISIKKworIzogY29tbWl0LmM6MTkzCittc2dpZCAiIgorIlN1cHBvcnQgZm9yIDxHSVRfRElSPi9pbmZvL2dyYWZ0cyBpcyBkZXByZWNhdGVkXG4iCisiYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBHaXQgdmVyc2lvbi5cbiIKKyJcbiIKKyJQbGVhc2UgdXNlIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIlxuIgorInRvIGNvbnZlcnQgdGhlIGdyYWZ0cyBpbnRvIHJlcGxhY2UgcmVmcy5cbiIKKyJcbiIKKyJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiIgorbXNnc3RyICIiCisiU3TDtmQgZsO2ciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgYXZyw6VkcyBmcsOlbiBvY2hcbiIKKyJrb21tZXIgdGFzIGJvcnQgaSBlbiBmcmFtdGlkYSB2ZXJzaW9uIGF2IEdpdC5cbiIKKyJcbiIKKyJBbnbDpG5kIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIlxuIgorImbDtnIgYXR0IG9tdmFuZGxhIGdyYWZ0cyB0aWxsIGVyc8OkdHRuaW5nc3JlZmVyZW5zZXIuXG4iCisiXG4iCisiU2zDpSBhdiBkZXR0YSBtZWRkZWxhbmRlIGdlbm9tIGF0dCBza3JpdmFcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIiIKKworIzogY29tbWl0LmM6MTE1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlLCBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICIiCisiSW5jaGVja25pbmdlbiAlcyBoYXIgZW4gb2JldHJvZGQgR1BHLXNpZ25hdHVyIHNvbSBww6VzdMOlcyB2YXJhIGdqb3JkIGF2ICVzLiIKKworIzogY29tbWl0LmM6MTE1NworIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiIgorIkluY2hlY2tuaW5nZW4gJXMgaGFyIGVuIGZlbGFrdGlnIEdQRy1zaWduYXR1ciBzb20gcMOlc3TDpXMgdmFyYSBnam9yZCBhdiAlcy4iCisKKyM6IGNvbW1pdC5jOjExNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlLiIKK21zZ3N0ciAiSW5jaGVja25pbmcgJXMgaGFyIGludGUgbsOlZ29uIEdQRy1zaWduYXR1ci4iCisKKyM6IGNvbW1pdC5jOjExNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSBieSAlc1xuIgorbXNnc3RyICJJbmNoZWNrbmluZ2VuICVzIGhhciBlbiBrb3JyZWt0IEdQRy1zaWduYXR1ciBhdiAlc1xuIgorCisjOiBjb21taXQuYzoxNDE3Cittc2dpZCAiIgorIldhcm5pbmc6IGNvbW1pdCBtZXNzYWdlIGRpZCBub3QgY29uZm9ybSB0byBVVEYtOC5cbiIKKyJZb3UgbWF5IHdhbnQgdG8gYW1lbmQgaXQgYWZ0ZXIgZml4aW5nIHRoZSBtZXNzYWdlLCBvciBzZXQgdGhlIGNvbmZpZ1xuIgorInZhcmlhYmxlIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gdGhlIGVuY29kaW5nIHlvdXIgcHJvamVjdCB1c2VzLlxuIgorbXNnc3RyICIiCisiVmFybmluZzogaW5jaGVja25pbmdzbWVkZGVsYW5kZXQgw6RyIGludGUga29ycmVrdCBVVEYtOC5cbiIKKyJVcHBkYXRlcmEgZGV0IGVmdGVyIGF0dCBoYSByw6R0dGF0IG1lZGRlbGFuZGV0LCBlbGxlciDDpG5kcmEgdmFyaWFiZWxuXG4iCisiaTE4bi5jb21taXRlbmNvZGluZyB0aWxsIGRlbiB0ZWNrZW5rb2RuaW5nIHNvbSBhbnbDpG5kcyBpIGRpdHQgcHJvamVrdC5cbiIKKworIzogY29tbWl0LWdyYXBoLmM6MTIyCittc2dpZCAiY29tbWl0LWdyYXBoIGZpbGUgaXMgdG9vIHNtYWxsIgorbXNnc3RyICJpbmNoZWNrbmluZ3NncmFmZmlsZW4gJXMgw6RyIGbDtnIgbGl0ZW4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggc2lnbmF0dXJlICVYIGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAlWCIKK21zZ3N0ciAiaW5jaGVja25pbmdzZ3JhZmVucyBzaWduYXR1ciAlWCBzdMOkbW1lciBpbnRlIG1lZCBzaWduYXR1cmVuICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAiaW5jaGVja25pbmdzZ3JhZmVucyB2ZXJzaW9uICVYIHN0w6RtbWVyIGludGUgbWVkIHZlcnNpb25lbiAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXNoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAiaW5jaGVja25pbmdzZ3JhZmVucyBoYXNodmVyc2lvbiAlWCBzdMOkbW1lciBpbnRlIG1lZCB2ZXJzaW9uZW4gJVgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIyNgorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBsb29rdXAgdGFibGUgZW50cnkgbWlzc2luZzsgZmlsZSBtYXkgYmUgaW5jb21wbGV0ZSIKK21zZ3N0ciAiIgorImluY2hlY2tuaW5nc2dyYWZlbiBzYWtuYXIgcG9zdCBpIHN0eWNrZXVwcHNsYWduaW5nc3RhYmVsbDsgZmlsZW4ga2FuIHZhcmEgIgorIm9mdWxsc3TDpG5kaWciCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaW1wcm9wZXIgY2h1bmsgb2Zmc2V0ICUwOHglMDh4IgorbXNnc3RyICJmZWxha3RpZ3Qgb2Zmc2V0IGbDtnIgc3R5Y2tlICUwOHglMDh4IGkgaW5jaGVja25pbmdzZ3JhZmZpbGVuIgorCisjOiBjb21taXQtZ3JhcGguYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGlkICUwOHggYXBwZWFycyBtdWx0aXBsZSB0aW1lcyIKK21zZ3N0ciAiaW5jaGVja25pbmdzZ3JhZmVucyBzdHlja2UtaWQgJTA4eCBmw7ZyZWtvbW1lciBmbGVyYSBnw6VuZ2VyIgorCisjOiBjb21taXQtZ3JhcGguYzozNDMKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIG5vIGJhc2UgZ3JhcGhzIGNodW5rIgorbXNnc3RyICJpbmNoZWNrbmluZ3NncmFmZW4gaGFyIGluZ2EgYmFzLWdyYWYtc3R5Y2tlbiIKKworIzogY29tbWl0LWdyYXBoLmM6MzUzCittc2dpZCAiY29tbWl0LWdyYXBoIGNoYWluIGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJpbmNoZWNrbmluZ3NncmFmZW5zIGtlZGphIHN0w6RtbWVyIGludGUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdC1ncmFwaCBjaGFpbjogbGluZSAnJXMnIG5vdCBhIGhhc2giCittc2dzdHIgIm9naWx0aWcgaW5jaGVja2luZ3NncmFma2VkamE6IHJhZCBcIiVzXCIgw6RyIGludGUgZXR0IGhhc2gtdsOkcmRlIgorCisjOiBjb21taXQtZ3JhcGguYzo0MjUKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBhbGwgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICJrYW4gaW50ZSBoaXR0YSBhbGxhIGluY2hlY2tpbmdzZ3JhZmZpbGVyIgorCisjOiBjb21taXQtZ3JhcGguYzo1NTggY29tbWl0LWdyYXBoLmM6NjE4Cittc2dpZCAiaW52YWxpZCBjb21taXQgcG9zaXRpb24uIGNvbW1pdC1ncmFwaCBpcyBsaWtlbHkgY29ycnVwdCIKK21zZ3N0ciAib2dpbHRpZyBpbmNoZWNrbmluZ3Nwb3NpdGlvbi4gaW5jaGVja25pbmdzZ3JhZmVuIMOkciB0cm9saWd0dmlzIHRyYXNpZyIKKworIzogY29tbWl0LWdyYXBoLmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBoaXR0YSBpbmNoZWNrbmluZ2VuICVzIgorCisjOiBjb21taXQtZ3JhcGguYzo4NTIgYnVpbHRpbi9hbS5jOjEyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBpbmNoZWNrbmluZ2VuICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDExIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHR5cGUgb2Ygb2JqZWN0ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIGjDpG10YSB0eXAgZsO2ciBvYmpla3RldCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTA0MworbXNnaWQgIkxvYWRpbmcga25vd24gY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIkzDpHNlciBpbiBrw6RuZGEgaW5jaGVja25pbmdhciBpIGluY2hlY2tuaW5nc2dyYWYiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNjAKK21zZ2lkICJFeHBhbmRpbmcgcmVhY2hhYmxlIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJFeHBhbmRlcmFyIG7DpWJhcmEgaW5jaGVja25pbmdhciBpIGluY2hlY2tuaW5nc2dyYWYiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNzkKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJSZW5zYXIgaW5jaGVja25pbmdzbcOkcmtlbiBpIGluY2hlY2tuaW5nc2dyYWYiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwOTgKK21zZ2lkICJDb21wdXRpbmcgY29tbWl0IGdyYXBoIGdlbmVyYXRpb24gbnVtYmVycyIKK21zZ3N0ciAiQmVyw6RrbmFyIGdlbmVyYXRpb25zdsOkcmRlbiBmw7ZyIGluY2hlY2tuaW5nc2dyYWYiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFjayIKK21zZ2lkX3BsdXJhbCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFja3MiCittc2dzdHJbMF0gIlPDtmtlciBpbmNoZWNrbmluZ2FyIGbDtnIgaW5jaGVja2luZ3NncmFmIGkgJWQgcGFrZXQiCittc2dzdHJbMV0gIlPDtmtlciBpbmNoZWNrbmluZ2FyIGbDtnIgaW5jaGVja2luZ3NncmFmIGkgJWQgcGFrZXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgYWRkaW5nIHBhY2sgJXMiCittc2dzdHIgImZlbCB2aWQgdGlsbMOkZ2cgYXYgcGFrZXRldCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBvcGVuaW5nIGluZGV4IGZvciAlcyIKK21zZ3N0ciAiZmVsIHZpZCDDtnBwbmluZyBhdiBpbmRleGV0IGbDtnIgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmcyIKK21zZ3N0clswXSAiU8O2a2VyIGluY2hlY2tuaW5nYXIgZsO2ciBpbmNoZWNraW5nc2dyYWYgZnLDpW4gJWQgcmVmZXJlbnMiCittc2dzdHJbMV0gIlPDtmtlciBpbmNoZWNrbmluZ2FyIGbDtnIgaW5jaGVja2luZ3NncmFmIGZyw6VuICVkIHJlZmVyZW5zZXIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgb2JqZWN0IGlkOiAlcyIKK21zZ3N0ciAib2dpbHRpZ3QgaW5jaGVja25pbmdzLW9iamVrdC1pZCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTI0OQorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGFtb25nIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJTw7ZrZXIgaW5jaGVja25pbmdhciBmw7ZyIGluY2hlY2tpbmdzZ3JhZiBpIHBhY2thZGUgb2JqZWt0IgorCisjOiBjb21taXQtZ3JhcGguYzoxMjY0Cittc2dpZCAiQ291bnRpbmcgZGlzdGluY3QgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIlLDpGtuYXIgb2xpa2EgaW5jaGVja25pbmdhciBpIGluY2hlY2tuaW5nc2dyYWYiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyOTQKK21zZ2lkICJGaW5kaW5nIGV4dHJhIGVkZ2VzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiU8O2a2VyIHl0dGVybGlnYXJlIGthbnRlciBpIGluY2hlY2tpbmdzZ3JhZiIKKworIzogY29tbWl0LWdyYXBoLmM6MTM0MAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb3JyZWN0IG51bWJlciBvZiBiYXNlIGdyYXBoIGlkcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEga29ycmVrdCBhbnRhbCBiYXMtZ3JhZi1pZDpuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzczIG1pZHguYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIGlubGVkYW5kZSBrYXRhbG9nZXIgZsO2ciAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTM4NSBidWlsdGluL2luZGV4LXBhY2suYzozMDYgYnVpbHRpbi9yZXBhY2suYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIFwiJXNcIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzcyIKK21zZ2lkX3BsdXJhbCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3NlcyIKK21zZ3N0clswXSAiU2tyaXZlciB1dCBpbmNoZWNrbmluZ3NncmFmIGkgJWQgcGFzcyIKK21zZ3N0clsxXSAiU2tyaXZlciB1dCBpbmNoZWNrbmluZ3NncmFmIGkgJWQgcGFzcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ4NgorbXNnaWQgInVuYWJsZSB0byBvcGVuIGNvbW1pdC1ncmFwaCBjaGFpbiBmaWxlIgorbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSBpbmNoZWNrbmluZ3NncmFma2VkamVmaWxlbiIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ5OAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgYmFzZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBieXRhIG5hbW4gcMOlIGJhcy1pbmNoZWNraW5nc2dyYWZmaWxlbiIKKworIzogY29tbWl0LWdyYXBoLmM6MTUxOAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgdGVtcG9yYXJ5IGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICJrdW5kZSBpbnRlIGJ5dGEgbmFtbiBww6UgdGVtcG9yw6RyIGluY2hlY2tuaW5nc2dyYWZmaWwiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2MzEKK21zZ2lkICJTY2FubmluZyBtZXJnZWQgY29tbWl0cyIKK21zZ3N0ciAiU8O2a2VyIHNhbW1hbnNsYWduYSBpbmNoZWNrbmluZ2FyIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZHVwbGljYXRlIGNvbW1pdCBpZCAlcyIKK21zZ3N0ciAib3bDpG50YXQgZHVwbGljZXJhdCBpbmNoZWNrbmluZ3MtaWQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NjUKK21zZ2lkICJNZXJnaW5nIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiU2zDpXIgaWhvcCBpbmNoZWNrbmluZ3NncmFmIgorCisjOiBjb21taXQtZ3JhcGguYzoxODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBjb21taXQgZ3JhcGggZm9ybWF0IGNhbm5vdCB3cml0ZSAlZCBjb21taXRzIgorbXNnc3RyICJmb3JtYXRldCBww6UgaW5jaGVja25pbmdzZ3JhZmVuIGthbiBpbnRlIHZpc2EgJWQgaW5jaGVja25pbmdhciIKKworIzogY29tbWl0LWdyYXBoLmM6MTg1NQorbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgdG8gd3JpdGUgZ3JhcGgiCittc2dzdHIgImbDtnIgbcOlbmdhIGluY2hlY2tuaW5nYXIgZsO2ciBhdHQgc2tyaXZhIGdyYWYiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NDQKK21zZ2lkICJ0aGUgY29tbWl0LWdyYXBoIGZpbGUgaGFzIGluY29ycmVjdCBjaGVja3N1bSBhbmQgaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgIiIKKyJmaWxlbiBtZWQgaW5jaGVja25pbmdzZ3JhZiBoYXIgZmVsYWt0aWcgY2hlY2tzdW1tYSBvY2ggw6RyIHRyb2xpZ3R2aXMgdHJhc2lnIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IE9JRCBvcmRlcjogJXMgdGhlbiAlcyIKK21zZ3N0ciAiaW5jaGVja25pbmdzZ3JhZmVuIGhhciBmZWxha3RpZyBPSUQtb3JkbmluZzogJXMgc8OlICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTY0IGNvbW1pdC1ncmFwaC5jOjE5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgZmFub3V0IHZhbHVlOiBmYW5vdXRbJWRdID0gJXUgIT0gJXUiCittc2dzdHIgIiIKKyJpbmNoZWNrbmluZ3NncmFmZW4gaGFyIGZlbGFrdGlnIHV0YnJlZG5pbmdzdsOkcmRlOiBmYW5vdXRbJWRdID0gJXUgIT0gJXUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBpbmNoZWNrbmluZyAlcyBmcsOlbiBpbmNoZWNrbmluZ3NncmFmIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTg5Cittc2dpZCAiVmVyaWZ5aW5nIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJCZWtyw6RmdGFyIGluY2hlY2tuaW5nYXIgaSBpbmNoZWNrbmluZ3NncmFmZW4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIG9iamVjdCBkYXRhYmFzZSBmb3IgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisibWlzc2x5Y2thZGVzIHRvbGthIGluY2hlY2tuaW5nICVzIGZyw6VuIG9iamVrdGRhdGFiYXNlbiBmw7ZyIGluY2hlY2tuaW5nc2dyYWYiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlcyAhPSAlcyIKK21zZ3N0ciAicm90LXRyw6RkZXRzIE9JRCBmw7ZyIGluY2hlY2tuaW5nZW4gJXMgaSBpbmNoZWNrbmluZ3NncmFmZW4gw6RyICVzICE9ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIGlzIHRvbyBsb25nIgorbXNnc3RyICJpbmNoZWNrbmluZ3NncmFmZW5zIGbDtnLDpGxkcmFsaXN0YSBmw7ZyIGluY2hlY2tuaW5nZW4gJXMgw6RyIGbDtnIgbMOlbmciCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBmb3IgJXMgaXMgJXMgIT0gJXMiCittc2dzdHIgImluY2hlY2tuaW5nc2dyYWZlbnMgZsO2csOkbGRlciBmw7ZyICVzIMOkciAlcyAhPSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjA0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyB0ZXJtaW5hdGVzIGVhcmx5IgorbXNnc3RyICIiCisiaW5jaGVja25pbmdzZ3JhZmVucyBmw7Zyw6RsZHJhbGlzdGEgZsO2ciBpbmNoZWNrbmluZ2VuICVzIGF2c2x1dGFzIGbDtnIgdGlkaWd0IgorCisjOiBjb21taXQtZ3JhcGguYzoyMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb21taXQtZ3JhcGggaGFzIGdlbmVyYXRpb24gbnVtYmVyIHplcm8gZm9yIGNvbW1pdCAlcywgYnV0IG5vbi16ZXJvIGVsc2V3aGVyZSIKK21zZ3N0ciAiIgorImluY2hlY2tuaW5nc2dyYWZlbiBoYXIgZ2VuZXJhdGlvbnNudW1tZXIgbm9sbCBmw7ZyIGluY2hlY2tuaW5nZW4gJXMsIG1lbiBpY2tlLSIKKyJub2xsIHDDpSBhbm5hbiBwbGF0cyIKKworIzogY29tbWl0LWdyYXBoLmM6MjA1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY29tbWl0LWdyYXBoIGhhcyBub24temVybyBnZW5lcmF0aW9uIG51bWJlciBmb3IgY29tbWl0ICVzLCBidXQgemVybyBlbHNld2hlcmUiCittc2dzdHIgIiIKKyJpbmNoZWNrbmluZ3NncmFmZW4gaGFyIGdlbmVyYXRpb25zbnVtbWVyIHNraWx0IGZyw6VuIG5vbGwgZsO2ciBpbmNoZWNrbmluZ2VuICIKKyIlcywgbWVuIG5vbGwgcMOlIGFubmFuIHBsYXRzIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBnZW5lcmF0aW9uIGZvciBjb21taXQgJXMgaXMgJXUgIT0gJXUiCittc2dzdHIgImluY2hlY2tuaW5nc2dyYWZlbnMgZ2VuZXJhdGlvbiBmw7ZyIGluY2hlY2tuaW5nZW4gJXMgw6RyICV1ICE9ICV1IgorCisjOiBjb21taXQtZ3JhcGguYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCBkYXRlIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKK21zZ3N0ciAiIgorImluY2hlY2tuaW5nc2RhdHVtZXQgZsO2ciBpbmNoZWNrbmluZ2VuICVzIGkgaW5jaGVja25pbmdzZ3JhZmVuIMOkciAlPFBSSXVNQVg+ICEiCisiPSAlPFBSSXVNQVg+IgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1pbm5ldCBzbHV0IgorCisjOiBjb25maWcuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4Y2VlZGVkIG1heGltdW0gaW5jbHVkZSBkZXB0aCAoJWQpIHdoaWxlIGluY2x1ZGluZ1xuIgorIlx0JXNcbiIKKyJmcm9tXG4iCisiXHQlc1xuIgorIlRoaXMgbWlnaHQgYmUgZHVlIHRvIGNpcmN1bGFyIGluY2x1ZGVzLiIKK21zZ3N0ciAiIgorIsO2dmVyc2tyZWQgbWF4aW1hbHQgaW5rbHVkZXJpbmdzZGp1cCAoJWQpIG7DpHJcbiIKKyJcdCVzXG4iCisiaW5rbHVkZXJhZGVzIGZyw6VuXG4iCisiXHQlc1xuIgorIkRldCBrYW4gYmVybyBww6UgY2lya3Vsw6RyYSBpbmtsdWRlcmluZ2FyLiIKKworIzogY29uZmlnLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBleHBhbmQgaW5jbHVkZSBwYXRoICclcyciCittc2dzdHIgImt1bmRlIGludGUgZXhwYW5kZXJhIGlua2x1ZGVyaW5nc3PDtmt2w6RnIFwiJXNcIiIKKworIzogY29uZmlnLmM6MTUxCittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICJyZWxhdGl2YSBrb25maWd1cmVyaW5nc2lua2x1ZGVyaW5nYXIgbcOlc3RlIGtvbW1hIGZyw6VuIGZpbGVyIgorCisjOiBjb25maWcuYzoxOTcKK21zZ2lkICJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZSBjb25kaXRpb25hbHMgbXVzdCBjb21lIGZyb20gZmlsZXMiCittc2dzdHIgInJlbGF0aXZhIGtvbmZpZ3VyZXJpbmdzaW5rbHVkZXJpbmdzdmlsbGtvciBtw6VzdGUga29tbWEgZnLDpW4gZmlsZXIiCisKKyM6IGNvbmZpZy5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiBhIHNlY3Rpb246ICVzIgorbXNnc3RyICJueWNrZWxuIGlubmVow6VsbGVyIGludGUgZXR0IHN0eWNrZTogJXMiCisKKyM6IGNvbmZpZy5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiB2YXJpYWJsZSBuYW1lOiAlcyIKK21zZ3N0ciAibnlja2VsbiBpbm5laMOlbGxlciBpbnRlIHZhcmlhYmVsbmFtbjogJXMiCisKKyM6IGNvbmZpZy5jOjQwNiBzZXF1ZW5jZXIuYzoyNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAiZmVsYWt0aWcgbnlja2VsOiAlcyIKKworIzogY29uZmlnLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IChuZXdsaW5lKTogJXMiCittc2dzdHIgIm9naWx0aWcgbnlja2VsIChueXJhZHN0ZWNrZW4pOiAlcyIKKworIzogY29uZmlnLmM6NDQ4IGNvbmZpZy5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBjb25maWcgcGFyYW1ldGVyOiAlcyIKK21zZ3N0ciAiZmFsc2sga29uZmlndXJlcmluZ3NwYXJhbWV0ZXI6ICVzIgorCisjOiBjb25maWcuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgZm9ybWF0IGluICVzIgorbXNnc3RyICJmZWxha3RpZ3QgZm9ybWF0IGkgJXMiCisKKyM6IGNvbmZpZy5jOjgyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gYmxvYiAlcyIKK21zZ3N0ciAiZmVsYWt0aWcga29uZmlndXJhdGlvbnNmaWwgcmFkICVkIGkgYmxvYjplbiAlcyIKKworIzogY29uZmlnLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBmaWxlICVzIgorbXNnc3RyICJmZWxha3RpZyBrb25maWd1cmF0aW9uc2ZpbCByYWQgJWQgaSBmaWxlbiAlcyIKKworIzogY29uZmlnLmM6ODI5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiZmVsYWt0aWcga29uZmlndXJhdGlvbnNmaWwgcmFkICVkIGkgc3RhbmRhcmQgaW4iCisKKyM6IGNvbmZpZy5jOjgzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3VibW9kdWxlLWJsb2IgJXMiCittc2dzdHIgImZlbGFrdGlnIGtvbmZpZ3VyYXRpb25zZmlsIHJhZCAlZCBpIHVuZGVybW9kdWxzLWJsb2I6ZW4gJXMiCisKKyM6IGNvbmZpZy5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gY29tbWFuZCBsaW5lICVzIgorbXNnc3RyICJmZWxha3RpZyBrb25maWd1cmF0aW9uc2ZpbCByYWQgJWQgaSBrb21tYW5kb3JhZGVuICVzIgorCisjOiBjb25maWcuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIgorbXNnc3RyICJmZWxha3RpZyBrb25maWd1cmF0aW9uc2ZpbCByYWQgJWQgaSAlcyIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAib3V0IG9mIHJhbmdlIgorbXNnc3RyICJ1dGFuZsO2ciBpbnRlcnZhbGxldCIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAiaW52YWxpZCB1bml0IgorbXNnc3RyICJvZ2lsdGlnIGVuaGV0IgorCisjOiBjb25maWcuYzo5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6ICVzIgorbXNnc3RyICJmZWxha3RpZ3QgbnVtZXJpc2t0IGtvbmZpZ3VyYXRpb25zdsOkcmRlIFwiJXNcIiBmw7ZyIFwiJXNcIjogJXMiCisKKyM6IGNvbmZpZy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBibG9iICVzOiAlcyIKK21zZ3N0ciAiIgorImZlbGFrdGlndCBudW1lcmlza3Qga29uZmlndXJhdGlvbnN2w6RyZGUgXCIlc1wiIGbDtnIgXCIlc1wiIGkgYmxvYjplbiAlczogJXMiCisKKyM6IGNvbmZpZy5jOjEwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gZmlsZSAlczogJXMiCittc2dzdHIgIiIKKyJmZWxha3RpZ3QgbnVtZXJpc2t0IGtvbmZpZ3VyYXRpb25zdsOkcmRlIFwiJXNcIiBmw7ZyIFwiJXNcIiBpIGZpbGVuICVzOiAlcyIKKworIzogY29uZmlnLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogJXMiCittc2dzdHIgIiIKKyJmZWxha3RpZ3QgbnVtZXJpc2t0IGtvbmZpZ3VyYXRpb25zdsOkcmRlIFwiJXNcIiBmw7ZyIFwiJXNcIiBpIHN0YW5kYXJkIGluOiAlcyIKKworIzogY29uZmlnLmM6MTAwNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdWJtb2R1bGUtYmxvYiAlczogJXMiCittc2dzdHIgIiIKKyJmZWxha3RpZ3QgbnVtZXJpc2t0IGtvbmZpZ3VyYXRpb25zdsOkcmRlIFwiJXNcIiBmw7ZyIFwiJXNcIiBpIHVuZGVybW9kdWwtYmxvYjoiCisiZW4gJXM6ICVzIgorCisjOiBjb25maWcuYzoxMDEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiCittc2dzdHIgIiIKKyJmZWxha3RpZ3QgbnVtZXJpc2t0IGtvbmZpZ3VyYXRpb25zdsOkcmRlIFwiJXNcIiBmw7ZyIFwiJXNcIiBpIGtvbW1hbmRvcmFkZW4gIgorIiVzOiAlcyIKKworIzogY29uZmlnLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgImZlbGFrdGlndCBudW1lcmlza3Qga29uZmlndXJhdGlvbnN2w6RyZGUgXCIlc1wiIGbDtnIgXCIlc1wiIGkgJXM6ICVzIgorCisjOiBjb25maWcuYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleHBhbmQgdXNlciBkaXIgaW46ICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBleHBhbmRlcmEgYW52w6RuZGFya2F0YWxvZyBpOiBcIiVzXCIiCisKKyM6IGNvbmZpZy5jOjExMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmb3IgJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIlwiJXNcIiBmw7ZyIFwiJXNcIiDDpHIgaW50ZSBlbiBnaWx0aWcgdGlkc3N0w6RtcGVsIgorCisjOiBjb25maWcuYzoxMjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYnJldiBsZW5ndGggb3V0IG9mIHJhbmdlOiAlZCIKK21zZ3N0ciAiZsO2cmtvcnRuaW5nc2zDpG5nZCB1dGFuZsO2ciBpbnRlcnZhbGxldDogJWQiCisKKyM6IGNvbmZpZy5jOjEyMjIgY29uZmlnLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAiZmVsYWt0aWd0IHpsaWIta29tcHJpbWVyaW5nc2dyYWQgJWQiCisKKyM6IGNvbmZpZy5jOjEzMjUKK21zZ2lkICJjb3JlLmNvbW1lbnRDaGFyIHNob3VsZCBvbmx5IGJlIG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgImNvcmUuY29tbWVudENoYXIga2FuIGJhcmEgdmFyYSBldHQgdGVja2VuIgorCisjOiBjb25maWcuYzoxMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIKK21zZ3N0ciAiZmVsYWt0aWd0IGzDpGdlIGbDtnIgc2thcGFuZGUgYXYgb2JqZWt0OiAlcyIKKworIzogY29uZmlnLmM6MTQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICJmZWxmb3JtYXQgdsOkcmRlIGbDtnIgJXMiCisKKyM6IGNvbmZpZy5jOjE0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgImZlbGZvcm1hdCB2w6RyZGUgZsO2ciAlczogJXMiCisKKyM6IGNvbmZpZy5jOjE0NTcKK21zZ2lkICJtdXN0IGJlIG9uZSBvZiBub3RoaW5nLCBtYXRjaGluZywgc2ltcGxlLCB1cHN0cmVhbSBvciBjdXJyZW50IgorbXNnc3RyICJtw6VzdGUgdmFyYSBlbiBhdiBub3RoaW5nLCBtYXRjaGluZywgc2ltcGxlLCB1cHN0cmVhbSBlbGxlciBjdXJyZW50IgorCisjOiBjb25maWcuYzoxNTE4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjayBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAiZmVsYWt0aWcgcGFrZXRrb21wcmltZXJpbmdzZ3JhZCAlZCIKKworIzogY29uZmlnLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBjb25maWcgYmxvYiBvYmplY3QgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBrb25maWd1cmVyaW5ncy1ibG9ib2JqZWt0ZXQgXCIlc1wiIgorCisjOiBjb25maWcuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgYmxvYiIKK21zZ3N0ciAicmVmZXJlbnNlbiBcIiVzXCIgcGVrYXIgaW50ZSBww6UgZW4gYmxvYiIKKworIzogY29uZmlnLmM6MTY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBjb25maWcgYmxvYiAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSBzbMOlIHVwcCBrb25maWd1cmVyaW5ncy1ibG9iZW4gXCIlc1wiIgorCisjOiBjb25maWcuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSAlcyIKKworIzogY29uZmlnLmM6MTc0MworbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICJrYW4gaW50ZSB0b2xrYSBrb21tYW5kb3JhZHNrb25maWd1cmF0aW9uIgorCisjOiBjb25maWcuYzoyMDk3Cittc2dpZCAidW5rbm93biBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIgorbXNnc3RyICJva8OkbnQgZmVsIHVwcHN0b2QgdmlkIGzDpHNuaW5nIGF2IGtvbmZpZ3VyYXRpb25zZmlsZXJuYSIKKworIzogY29uZmlnLmM6MjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICJGZWxha3RpZ3QgJXM6IFwiJXNcIiIKKworIzogY29uZmlnLmM6MjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgdmFsdWUgJyVkJyBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxMDAiCittc2dzdHIgInbDpHJkZXQgXCIlZFwiIGbDtnIgc3BsaXRJbmRleC5tYXhQZXJjZW50YWdlIGJvcmRlIHZhcmEgbWVsbGFuIDAgb2NoIDEwMCIKKworIzogY29uZmlnLmM6MjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyVzJyBmcm9tIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgdsOkcmRldCBcIiVzXCIgZnLDpW4ga29tbWFuZG9yYWRza29uZmlndXJhdGlvbiIKKworIzogY29uZmlnLmM6MjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIHZhcmlhYmxlICclcycgaW4gZmlsZSAnJXMnIGF0IGxpbmUgJWQiCittc2dzdHIgImZlbGFrdGlnIGtvbmZpZ3VyYXRpb25zdmFyaWFiZWwgXCIlc1wiIGkgZmlsZW4gXCIlc1wiIHDDpSByYWQgJWQiCisKKyM6IGNvbmZpZy5jOjI0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWUgJyVzJyIKK21zZ3N0ciAiZmVsYWt0aWd0IHNla3Rpb25zbmFtbiBcIiVzXCIiCisKKyM6IGNvbmZpZy5jOjI0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiJXMgaGFyIGZsZXJhIHbDpHJkZW4iCisKKyM6IGNvbmZpZy5jOjI1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIG5ldyBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgImthbiBpbnRlIHNrcml2YSBueWEga29uZmlndXJhdGlvbnNmaWxlbiBcIiVzXCIiCisKKyM6IGNvbmZpZy5jOjI3NTQgY29uZmlnLmM6MzA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6VzYSBrb25maWd1cmF0aW9uc2ZpbGVuICVzIgorCisjOiBjb25maWcuYzoyNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgJXMiCittc2dzdHIgIsO2cHBuYXIgJXMiCisKKyM6IGNvbmZpZy5jOjI4MDAgYnVpbHRpbi9jb25maWcuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAib2dpbHRpZ3QgbcO2bnN0ZXI6ICVzIgorCisjOiBjb25maWcuYzoyODI1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIm9naWx0aWcga29uZmlndXJhdGlvbnNmaWw6IFwiJXNcIiIKKworIzogY29uZmlnLmM6MjgzOCBjb25maWcuYzozMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgImZzdGF0IG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiZnN0YXQgbWlzc2x5Y2thZGVzIHDDpSAlcyIKKworIzogY29uZmlnLmM6Mjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHV0ZsO2cmEgbW1hcCBww6UgXCIlc1wiIgorCisjOiBjb25maWcuYzoyODU4IGNvbmZpZy5jOjMwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2htb2Qgb24gJXMgZmFpbGVkIgorbXNnc3RyICJjaG1vZCBtaXNzbHlja2FkZXMgcMOlICVzIgorCisjOiBjb25maWcuYzoyOTQzIGNvbmZpZy5jOjMxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSBrb25maWd1cmF0aW9uc2ZpbGVuICVzIgorCisjOiBjb25maWcuYzoyOTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgJyVzJyB0byAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHN0w6RsbGEgaW4gXCIlc1wiIHRpbGwgXCIlc1wiIgorCisjOiBjb25maWcuYzoyOTc5IGJ1aWx0aW4vcmVtb3RlLmM6NjU1IGJ1aWx0aW4vcmVtb3RlLmM6ODQ5IGJ1aWx0aW4vcmVtb3RlLmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1bnNldCAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHRhIGJvcnQgaW5zdMOkbGxuaW5nIGbDtnIgXCIlc1wiIgorCisjOiBjb25maWcuYzozMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lOiAlcyIKK21zZ3N0ciAiZmVsYWt0aWd0IG5hbW4gcMOlIHN0eWNrZTogJXMiCisKKyM6IGNvbmZpZy5jOjMyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyB2YWx1ZSBmb3IgJyVzJyIKK21zZ3N0ciAidsOkcmRlIHNha25hcyBmw7ZyIFwiJXNcIiIKKworIzogY29ubmVjdC5jOjYxCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1cG9uIGluaXRpYWwgY29udGFjdCIKK21zZ3N0ciAiZmrDpHJyZW4gbGFkZSBww6UgdmlkIGlubGVkYW5kZSBrb250YWt0IgorCisjOiBjb25uZWN0LmM6NjMKK21zZ2lkICIiCisiQ291bGQgbm90IHJlYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS5cbiIKKyJcbiIKKyJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHNcbiIKKyJhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLiIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgbMOkc2EgZnLDpW4gZmrDpHJyYXJraXYuXG4iCisiXG4iCisiU2UgdGlsbCBhdHQgZHUgaGFyIGtvcnJla3Qgw6V0a29tc3RiZWjDtnJpZ2hldFxuIgorIm9jaCBhdHQgYXJraXZldCBleGlzdGVyYXIuIgorCisjOiBjb25uZWN0LmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCAnJXMnIgorbXNnc3RyICJTZXJ2ZXJuIHN0w7ZkZXIgaW50ZSBcIiVzXCIiCisKKyM6IGNvbm5lY3QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBmZWF0dXJlICclcyciCittc2dzdHIgInNlcnZlcm4gc3TDtmRlciBpbnRlIGZ1bmt0aW9uZW4gXCIlc1wiIgorCisjOiBjb25uZWN0LmM6MTE0Cittc2dpZCAiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgY2FwYWJpbGl0aWVzIgorbXNnc3RyICJmw7ZydsOkbnRhZGUgXCJmbHVzaFwiIGVmdGVyIGbDtnJtw6Vnb3IiCisKKyM6IGNvbm5lY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgY2FwYWJpbGl0aWVzIGFmdGVyIGZpcnN0IGxpbmUgJyVzJyIKK21zZ3N0ciAiaWdub3JlcmFyIGbDtnJtw6Vnb3IgZWZ0ZXIgZsO2cnN0YSByYWRlbiBcIiVzXCIiCisKKyM6IGNvbm5lY3QuYzoyNTIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCBjYXBhYmlsaXRpZXNee30iCittc2dzdHIgInByb3Rva29sbGZlbDogZsO2cnbDpG50YWRlIGludGUgY2FwYWJpbGl0aWVzXnt9IgorCisjOiBjb25uZWN0LmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGFsbG93IHNoYS0xLCBnb3QgJyVzJyIKK21zZ3N0ciAicHJvdG9rb2xsZmVsOiBmw7ZydsOkbnRhZGUgXCJzaGFsbG93IHNoYS0xXCIgZmljayBcIiVzXCIiCisKKyM6IGNvbm5lY3QuYzoyNzUKK21zZ2lkICJyZXBvc2l0b3J5IG9uIHRoZSBvdGhlciBlbmQgY2Fubm90IGJlIHNoYWxsb3ciCittc2dzdHIgImFya2l2ZXQgcMOlIGFuZHJhIHNpZGFuIGthbiBpbnRlIHZhcmEgZ3J1bnQiCisKKyM6IGNvbm5lY3QuYzozMTMKK21zZ2lkICJpbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAib2dpbHRpZ3QgcGFrZXQiCisKKyM6IGNvbm5lY3QuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgJyVzJyIKK21zZ3N0ciAicHJvdG9rb2xsZmVsOiBmw7ZydsOkbnRhZGUgaW50ZSBcIiVzXCIiCisKKyM6IGNvbm5lY3QuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBscy1yZWZzIHJlc3BvbnNlOiAlcyIKK21zZ3N0ciAib2dpbHRpZ3Qgc3ZhciBww6UgbHMtcmVmczogJXMiCisKKyM6IGNvbm5lY3QuYzo0NDUKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciByZWYgbGlzdGluZyIKK21zZ3N0ciAib3bDpG50YWQgXCJmbHVzaFwiIGVmdGVyIHJlZi1saXN0YW4iCisKKyM6IGNvbm5lY3QuYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgJyVzJyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJwcm90b2tvbGxldCBcIiVzXCIgc3TDtmRzIGludGUiCisKKyM6IGNvbm5lY3QuYzo1OTUKK21zZ2lkICJ1bmFibGUgdG8gc2V0IFNPX0tFRVBBTElWRSBvbiBzb2NrZXQiCittc2dzdHIgImt1bmRlIGludGUgc8OkdHRhIFNPX0tFRVBBTElWRSBww6UgdXR0YWdldCIKKworIzogY29ubmVjdC5jOjYzNSBjb25uZWN0LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkxvb2tpbmcgdXAgJXMgLi4uICIKK21zZ3N0ciAiU2zDpXIgdXBwICVzLi4uIgorCisjOiBjb25uZWN0LmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIgorbXNnc3RyICJrYW4gaW50ZSBzbMOlIHVwcCAlcyAocG9ydCAlcykgKCVzKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiTG9va2luZyB1cCAlcyAuLi4gIgorIzogY29ubmVjdC5jOjY0MyBjb25uZWN0LmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkb25lLlxuIgorIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCittc2dzdHIgIiIKKyJrbGFydC5cbiIKKyJBbnNsdXRlciB0aWxsICVzIChwb3J0ICVzKS4uLiIKKworIzogY29ubmVjdC5jOjY2NSBjb25uZWN0LmM6NzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gY29ubmVjdCB0byAlczpcbiIKICIlcyIKIG1zZ3N0ciAiIgotIkZlbCB2aWQgaMOkbXRuaW5nIGF2IHZlcnNpb25lcjpcbiIKKyJrdW5kZSBpbnRlIGFuc2x1dGEgdGlsbCAlczpcbiIKICIlcyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzUwCi0jLCB0Y2wtZm9ybWF0CisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgorIzogY29ubmVjdC5jOjY3MSBjb25uZWN0LmM6NzQ4Cittc2dpZCAiZG9uZS4iCittc2dzdHIgImtsYXJ0LiIKKworIzogY29ubmVjdC5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIgorbXNnc3RyICJrdW5kZSBpbnRlIHNsw6UgdXBwICVzICglcykiCisKKyM6IGNvbm5lY3QuYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwb3J0ICVzIgorbXNnc3RyICJva8OkbmQgcG9ydCAlcyIKKworIzogY29ubmVjdC5jOjg0NSBjb25uZWN0LmM6MTE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIGhvc3RuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAia29uc3RpZ3QgdsOkcmRuYW1uIFwiJXNcIiBibG9ja2VyYXQiCisKKyM6IGNvbm5lY3QuYzo4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBwb3J0ICclcycgYmxvY2tlZCIKK21zZ3N0ciAia29uc3RpZyBwb3J0IFwiJXNcIiBibG9ja2VyYWQiCisKKyM6IGNvbm5lY3QuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXJ0IHByb3h5ICVzIgorbXNnc3RyICJrYW4gaW50ZSBzdGFydGEgbWVsbGFuc2VydmVyIChwcm94eSkgJXMiCisKKyM6IGNvbm5lY3QuYzo5MjgKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZDsgc2VlICdnaXQgaGVscCBwdWxsJyBmb3IgdmFsaWQgdXJsIHN5bnRheCIKK21zZ3N0ciAiaW5nZW4gc8O2a3bDpGcgYW5nYXZzOyBzZSBcImdpdCBoZWxwIHB1bGxcIiBmw7ZyIGdpbHRpZyBVUkwtc3ludGF4IgorCisjOiBjb25uZWN0LmM6MTEyMworbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTQiCittc2dzdHIgInNzaC12YXJpYW50ZW4gXCJzaW1wbGVcIiBzdMO2ZGVyIGludGUgLTQiCisKKyM6IGNvbm5lY3QuYzoxMTM1Cittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNiIKK21zZ3N0ciAic3NoLXZhcmlhbnRlbiBcInNpbXBsZVwiIHN0w7ZkZXIgaW50ZSAtNiIKKworIzogY29ubmVjdC5jOjExNTIKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgcG9ydCIKK21zZ3N0ciAic3NoLXZhcmlhbnRlbiBcInNpbXBsZVwiIHN0w7ZkZXIgaW50ZSB2YWwgYXYgcG9ydCIKKworIzogY29ubmVjdC5jOjEyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBwYXRobmFtZSAnJXMnIGJsb2NrZWQiCittc2dzdHIgImtvbnN0aWd0IHPDtmt2w6Rnc25hbW4gXCIlc1wiIGJsb2NrZXJhdCIKKworIzogY29ubmVjdC5jOjEzMTEKK21zZ2lkICJ1bmFibGUgdG8gZm9yayIKK21zZ3N0ciAia3VuZGUgaW50ZSBncmVuYSAoZm9yaykiCisKKyMgVmFndWUgb3JpZ2luYWwsIG5vdCBuZXR3b3JraW5nLXJlbGF0ZWQsIGJ1dCByYXRoZXIgcmVsYXRlZCB0byB0aGUgYWN0dWFsCisjIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlLgorIzogY29ubmVjdGVkLmM6OTggYnVpbHRpbi9mc2NrLmM6MjA4IGJ1aWx0aW4vcHJ1bmUuYzo0MworbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAiS29udHJvbGxlcmFyIGtvbm5la3Rpdml0ZXQiCisKKyM6IGNvbm5lY3RlZC5jOjExMAorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgIkt1bmRlIGludGUga8O2cmEgXCJnaXQgcmV2LWxpc3RcIiIKKworIzogY29ubmVjdGVkLmM6MTMwCittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0IgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSB0aWxsIHJldi1saXN0IgorCisjOiBjb25uZWN0ZWQuYzoxMzcKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbiIKK21zZ3N0ciAia3VuZGUgaW50ZSBzdMOkbmdhIHJldi1saXN0OnMgc3RhbmRhcmQgaW4iCisKKyM6IGNvbnZlcnQuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBjcmxmX2FjdGlvbiAlZCIKK21zZ3N0ciAiZmVsYWt0aWcgY3JsZl9hY3Rpb24gJWQiCisKKyM6IGNvbnZlcnQuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1JMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcyIKK21zZ3N0ciAiQ1JMRiBza3VsbGUgZXJzw6R0dGFzIGF2IExGIGkgJXMiCisKKyM6IGNvbnZlcnQuYzoyMDkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNvdWxkIG5vdCBzdGFydCB0aGUgbWVyZ2UgdG9vbDpcbiIKLSJcbiIKKyJDUkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMuXG4iCisiVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIkNSTEYga29tbWVyIGF0dCBlcnPDpHR0YXMgYXYgTEYgaSAlcy5cbiIKKyJGaWxlbiBrb21tZXIgYXR0IGhhIHNpbmEgdXJzcHJ1bmdsaWdhIHJhZGJyeXRuaW5nYXIgaSBkaW4gYXJiZXRza2F0YWxvZyIKKworIzogY29udmVydC5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIgorbXNnc3RyICJMRiBza3VsbGUgZXJzw6R0dGFzIGF2IENSTEYgaSAlcyIKKworIzogY29udmVydC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJMRiBrb21tZXIgYXR0IGVyc8OkdHRhcyBhdiBDUkxGIGkgJXMuXG4iCisiRmlsZW4ga29tbWVyIGF0dCBoYSBzaW5hIHVyc3BydW5nbGlnYSByYWRicnl0bmluZ2FyIGkgZGluIGFyYmV0c2thdGFsb2ciCisKKyM6IGNvbnZlcnQuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHByb2hpYml0ZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICJCT00gw6RyIGbDtnJianVkZXQgaSBcIiVzXCIgb20ga29kYXQgc29tICVzIgorCisjOiBjb252ZXJ0LmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lLipzIGFzICIKKyJ3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisiRmlsZW4gXCIlc1wiIGlubmVow6VsbGVyIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gQW52w6RuZCBVVEYtJS4qcyBzb20gIgorInRlY2tlbmtvZG5pbmcgaSBhcmJldHNrYXRhbG9nZW4uIgorCisjOiBjb252ZXJ0LmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyByZXF1aXJlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIkJPTSBrcsOkdnMgb20gXCIlc1wiIGtvZGFzIHNvbSAlcyIKKworIzogY29udmVydC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBpcyBtaXNzaW5nIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lc0JFIG9yIFVURi0iCisiJXNMRSAoZGVwZW5kaW5nIG9uIHRoZSBieXRlIG9yZGVyKSBhcyB3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisiRmlsZW4gXCIlc1wiIHNha25hciBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIEFudsOkbmQgVVRGLSVzQkUgZWxsZXIgVVRGLSVzTEUgIgorIihiZXJvZW5kZSBww6UgYnl0ZW9yZG5pbmcpIHNvbSB0ZWNrZW5rb2RuaW5nIGkgYXJiZXRza2F0YWxvZ2VuLiIKKworIzogY29udmVydC5jOjQxOSBjb252ZXJ0LmM6NDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBlbmNvZGUgJyVzJyBmcm9tICVzIHRvICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgb21rb2RhIFwiJXNcIiBmcsOlbiAlcyB0aWxsICVzIgorCisjOiBjb252ZXJ0LmM6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVuY29kaW5nICclcycgZnJvbSAlcyB0byAlcyBhbmQgYmFjayBpcyBub3QgdGhlIHNhbWUiCittc2dzdHIgIiIKKyJvbWtvZG5pbmcgYXYgXCIlc1wiIGZyw6VuICVzIHRpbGwgJXMgb2NoIHRpbGxiYWthIGdlciBpbnRlIHNhbW1hIHJlc3VsdGF0IgorCisjOiBjb252ZXJ0LmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmb3JrIHRvIHJ1biBleHRlcm5hbCBmaWx0ZXIgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgZ3JlbmEgKGZvcmspIGbDtnIgYXR0IGvDtnJhIGV4dGVybnQgZmlsdGVyIFwiJXNcIiIKKworIzogY29udmVydC5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmVlZCB0aGUgaW5wdXQgdG8gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgImt1bmRlIGludGUgc2tpY2thIGluZGF0YSB0aWxsIGV4dGVybnQgZmlsdGVyIFwiJXNcIiIKKworIzogY29udmVydC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQgJWQiCittc2dzdHIgImV4dGVybnQgZmlsdGVyIFwiJXNcIiBtaXNzbHlja2FkZXMgJWQiCisKKyM6IGNvbnZlcnQuYzo3MzAgY29udmVydC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIGZyb20gZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICJsw6RzbmluZyBmcsOlbiBleHRlcm50IGZpbHRlciBcIiVzXCIgbWlzc2x5Y2thZGVzIgorCisjOiBjb252ZXJ0LmM6NzM2IGNvbnZlcnQuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICJleHRlcm50IGZpbHRlciBcIiVzXCIgbWlzc2x5Y2thZGVzIgorCisjOiBjb252ZXJ0LmM6ODM5Cittc2dpZCAidW5leHBlY3RlZCBmaWx0ZXIgdHlwZSIKK21zZ3N0ciAib3bDpG50YWQgZmlsdGVydHlwIgorCisjOiBjb252ZXJ0LmM6ODUwCittc2dpZCAicGF0aCBuYW1lIHRvbyBsb25nIGZvciBleHRlcm5hbCBmaWx0ZXIiCittc2dzdHIgInPDtmt2w6RnZW4gZsO2ciBsw6VuZyBmw7ZyIGV4dGVybnQgZmlsdGVyIgorCisjOiBjb252ZXJ0LmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHRlcm5hbCBmaWx0ZXIgJyVzJyBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUgYWx0aG91Z2ggbm90IGFsbCBwYXRocyBoYXZlICIKKyJiZWVuIGZpbHRlcmVkIgorbXNnc3RyICIiCisiZXh0ZXJudCBmaWx0ZXIgXCIlc1wiIMOkciBpbnRlIGzDpG5ncmUgdGlsbGfDpG5nbGlndCB0cm90cyBhdHQgYWxsYSBzw7ZrdsOkZ2FyICIKKyJpbnRlIGhhciBmaWx0cmVyYXRzIgorCisjOiBjb252ZXJ0LmM6MTIyMworbXNnaWQgInRydWUvZmFsc2UgYXJlIG5vIHZhbGlkIHdvcmtpbmctdHJlZS1lbmNvZGluZ3MiCittc2dzdHIgInRydWUvZmFsc2Ugw6RyIGludGUgZ2lsdGlnIHRlY2tlbmtvZG5pbmcgZsO2ciBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGNvbnZlcnQuYzoxNDExIGNvbnZlcnQuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIiVzOiBcImNsZWFuXCItZmlsdHJldCBcIiVzXCIgbWlzc2x5Y2thZGVzIgorCisjOiBjb252ZXJ0LmM6MTQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogc211ZGdlIGZpbHRlciAlcyBmYWlsZWQiCittc2dzdHIgIiVzOiBcInNtdWRnZVwiLWZpbHRyZXQgXCIlc1wiIG1pc3NseWNrYWRlcyIKKworIzogZGF0ZS5jOjEzOAorbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgImkgZnJhbXRpZGVuIgorCisjOiBkYXRlLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiBzZWt1bmQgc2VkYW4iCittc2dzdHJbMV0gIiU8UFJJdU1BWD4gc2VrdW5kZXIgc2VkYW4iCisKKyM6IGRhdGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtaW51dGUgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IG1pbnV0IHNlZGFuIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IG1pbnV0ZXIgc2VkYW4iCisKKyM6IGRhdGUuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBob3VycyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gdGltbWUgc2VkYW4iCittc2dzdHJbMV0gIiU8UFJJdU1BWD4gdGltbWFyIHNlZGFuIgorCisjOiBkYXRlLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBkYXlzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiBkYWcgc2VkYW4iCittc2dzdHJbMV0gIiU8UFJJdU1BWD4gZGFnYXIgc2VkYW4iCisKKyM6IGRhdGUuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB3ZWVrcyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gdmVja2Egc2VkYW4iCittc2dzdHJbMV0gIiU8UFJJdU1BWD4gdmVja29yIHNlZGFuIgorCisjOiBkYXRlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gbcOlbmFkIHNlZGFuIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IG3DpW5hZGVyIHNlZGFuIgorCisjOiBkYXRlLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4geWVhciIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiDDpXIiCittc2dzdHJbMV0gIiU8UFJJdU1BWD4gw6VyIgorCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVzLCAlPFBSSXVNQVg+IG3DpW5hZCBzZWRhbiIKK21zZ3N0clsxXSAiJXMsICU8UFJJdU1BWD4gbcOlbmFkZXIgc2VkYW4iCisKKyM6IGRhdGUuYzoxOTcgZGF0ZS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiDDpXIgc2VkYW4iCittc2dzdHJbMV0gIiU8UFJJdU1BWD4gw6VyIHNlZGFuIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MjcyCittc2dpZCAiUHJvcGFnYXRpbmcgaXNsYW5kIG1hcmtzIgorbXNnc3RyICJTcHJpZGVyIMO2LW1hcmtlcmluZ2FyIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB0cmVlIG9iamVjdCAlcyIKK21zZ3N0ciAiZmVsYWt0aWd0IHRyw6Rkb2JqZWt0ZXQgJXMiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgaXNsYW5kIHJlZ2V4IGZvciAnJXMnOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBow6RtdGEgw7YtcmVnZXggZsO2ciBcIiVzXCI6ICVzIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlzbGFuZCByZWdleCBmcm9tIGNvbmZpZyBoYXMgdG9vIG1hbnkgY2FwdHVyZSBncm91cHMgKG1heD0lZCkiCittc2dzdHIgIsO2LXJlZ2V4IGZyw6VuIGtvbmZpZ3VyYXRpb24gaGFyIGbDtnIgbcOlbmdhIGbDpW5nc3RncnVwcGVyIChtYXg9JWQpIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtlZCAlZCBpc2xhbmRzLCBkb25lLlxuIgorbXNnc3RyICJNYXJrZXJhZGUgJWQgw7Zhciwga2xhci5cbiIKKworIzogZGlmZmNvcmUtb3JkZXIuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvcmRlcmZpbGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBvcmRlcmZpbGVuIFwiJXNcIiIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTQzCittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIlV0ZsO2ciBvbsO2amFrdGlnIG5hbW5ieXRlc2RldGVrdGVyaW5nIgorCisjOiBkaWZmLW5vLWluZGV4LmM6MjM4Cittc2dpZCAiZ2l0IGRpZmYgLS1uby1pbmRleCBbPG9wdGlvbnM+XSA8cGF0aD4gPHBhdGg+IgorbXNnc3RyICJnaXQgZGlmZiAtLW5vLWluZGV4IFs8ZmxhZ2dvcj5dIDxzw7ZrdsOkZz4gPHPDtmt2w6RnPiIKKworIzogZGlmZi1uby1pbmRleC5jOjI2MworbXNnaWQgIiIKKyJOb3QgYSBnaXQgcmVwb3NpdG9yeS4gVXNlIC0tbm8taW5kZXggdG8gY29tcGFyZSB0d28gcGF0aHMgb3V0c2lkZSBhIHdvcmtpbmcgIgorInRyZWUiCittc2dzdHIgIiIKKyJJbnRlIGV0dCBnaXQtYXJraXYuIEFudsOkbmQgLS1uby1pbmRleCBmw7ZyIGF0dCBqw6RtZsO2cmEgdHbDpSBzw7ZrdsOkZ2FyIHV0YW5mw7ZyICIKKyJlbiBhcmJldHNrYXRhbG9nLiIKKworIzogZGlmZi5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJXMnXG4iCittc2dzdHIgIiAgTWlzc2x5Y2thZGVzIHRvbGthIGRpcnN0YXQtYXZza8Okcm5pbmdzcHJvY2VudGFuZGVsIFwiJXNcIlxuIgorCisjOiBkaWZmLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgVW5rbm93biBkaXJzdGF0IHBhcmFtZXRlciAnJXMnXG4iCittc2dzdHIgIiAgT2vDpG5kIGRpcnN0YXQtcGFyYW1ldGVyIFwiJXNcIlxuIgorCisjOiBkaWZmLmM6Mjk2Cittc2dpZCAiIgorImNvbG9yIG1vdmVkIHNldHRpbmcgbXVzdCBiZSBvbmUgb2YgJ25vJywgJ2RlZmF1bHQnLCAnYmxvY2tzJywgJ3plYnJhJywgIgorIidkaW1tZWQtemVicmEnLCAncGxhaW4nIgorbXNnc3RyICIiCisiZsOkcmdpbnN0w6RsbG5pbmdlbiBmw7ZyIGZseXR0YWRlIGJsb2NrIG3DpXN0ZSB2YXJhIGVuIGF2IFwibm9cIiwgXCJkZWZhdWx0XCIsICIKKyJcImJsb2Nrc1wiLCBcInplYnJhXCIsIFwiZGltbWVkX3plYnJhXCIsIFwicGxhaW5cIiIKKworIzogZGlmZi5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcycsIHBvc3NpYmxlIHZhbHVlcyBhcmUgJ2lnbm9yZS1zcGFjZS1jaGFuZ2UnLCAiCisiJ2lnbm9yZS1zcGFjZS1hdC1lb2wnLCAnaWdub3JlLWFsbC1zcGFjZScsICdhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UnIgorbXNnc3RyICIiCisib2vDpG50IGzDpGdlIFwiJXNcIiBmw7ZyIGNvbG9yLW1vdmVkLXdzLCBtw7ZqbGlnYSB2w6RyZGVuIMOkciBcImlnbm9yZS1zcGFjZS1jaGFuZ2UiCisiXCIsIFwiaWdub3JlLXNwYWNlLWF0LWVvbFwiLCBcImlnbm9yZS1hbGwtc3BhY2VcIiwgXCJhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UiCisiXCIiCisKKyM6IGRpZmYuYzozMzIKK21zZ2lkICIiCisiY29sb3ItbW92ZWQtd3M6IGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciAiCisid2hpdGVzcGFjZSBtb2RlcyIKK21zZ3N0ciAiIgorImNvbG9yLW1vdmVkLXdzOiBhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2Uga2FuIGludGUga29tYmluZXJhcyBtZWQgYW5kcmEgIgorImJsYW5rc3RlZ3Nsw6RnZW4iCisKKyM6IGRpZmYuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIk9rw6RudCB2w6RyZGUgZsO2ciBrb25maWd1cmF0aW9uc3ZhcmlhYmVsbiBcImRpZmYuc3VibW9kdWxlXCI6IFwiJXNcIiIKKworIzogZGlmZi5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKICIlcyIKIG1zZ3N0ciAiIgotIkt1bmRlIGludGUgc3RhcnRhIHZlcmt0eWcgZsO2ciBzYW1tYW5zbGFnbmluZzpcbiIKLSJcbiIKKyJIaXR0YWRlIGZlbCBpIGtvbmZpZ3VyYXRpb25zdmFyaWFiZWxuIFwiZGlmZi5kaXJzdGF0XCI6XG4iCiAiJXMiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM1NAotbXNnaWQgIlJ1bm5pbmcgbWVyZ2UgdG9vbC4uLiIKLW1zZ3N0ciAiS8O2ciB2ZXJrdHlnIGbDtnIgc2FtbWFuc2xhZ25pbmcuLi4iCisjOiBkaWZmLmM6NDIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICJleHRlcm4gZGlmZiBkb2csIHN0YW5uYXIgdmlkICVzIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozODIgbGliL21lcmdldG9vbC50Y2w6MzkwCi1tc2dpZCAiTWVyZ2UgdG9vbCBmYWlsZWQuIgotbXNnc3RyICJWZXJrdHlnZXQgZsO2ciBzYW1tYW5zbGFnbmluZyBtaXNzbHlja2FkZXMuIgorIzogZGlmZi5jOjQ1NDcKK21zZ2lkICItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayBhbmQgLXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC1jaGVjayBvY2ggLXMgw6RyIMO2bXNlc2lkaWd0IHV0ZXNsdXRhbmRlIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgotbXNnaWQgIkFkZCBUb29sIgotbXNnc3RyICJMw6RnZyB0aWxsIHZlcmt0eWciCisjOiBkaWZmLmM6NDU1MAorbXNnaWQgIi1HLCAtUyBhbmQgLS1maW5kLW9iamVjdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItRywgLVMgb2NoIC0tZmluZC1vYmplY3Qgw6RyIMO2bXNlc2lkaWd0IHV0ZXNsdXRhbmRlIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyOAotbXNnaWQgIkFkZCBOZXcgVG9vbCBDb21tYW5kIgotbXNnc3RyICJMw6RnZyB0aWxsIG55dHQgdmVya3R5Z3Nrb21tYW5kbyIKKyM6IGRpZmYuYzo0NjI4Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIi0tZm9sbG93IGtyw6R2ZXIgZXhha3QgZW4gc8O2a3bDpGdzYW5naXZlbHNlIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDozNAotbXNnaWQgIkFkZCBnbG9iYWxseSIKLW1zZ3N0ciAiTMOkZ2cgdGlsbCBnbG9iYWx0IgorIzogZGlmZi5jOjQ2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLXN0YXQgdmFsdWU6ICVzIgorbXNnc3RyICJvZ2lsdGlndCB2w6RyZGUgZsO2ciAtLXN0YXQ6ICVzIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo0NgotbXNnaWQgIlRvb2wgRGV0YWlscyIKLW1zZ3N0ciAiRGV0YWxqZXIgZsO2ciB2ZXJrdHlnIgorIzogZGlmZi5jOjQ2ODEgZGlmZi5jOjQ2ODYgZGlmZi5jOjQ2OTEgZGlmZi5jOjQ2OTYgZGlmZi5jOjUyMDkKKyM6IHBhcnNlLW9wdGlvbnMuYzoxOTcgcGFyc2Utb3B0aW9ucy5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICIlcyBmw7ZydsOkbnRhciBldHQgbnVtZXJpc2t0IHbDpHJkZSIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6NDkKLW1zZ2lkICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiIKLW1zZ3N0ciAiQW52w6RuZCBcIi9cIi1hdmRlbGFyZSBmw7ZyIGF0dCBza2FwYSBldHQgdW5kZXJtZW55dHLDpGQ6IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo2MAotbXNnaWQgIkNvbW1hbmQ6IgotbXNnc3RyICJLb21tYW5kbzoiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjcxCi1tc2dpZCAiU2hvdyBhIGRpYWxvZyBiZWZvcmUgcnVubmluZyIKLW1zZ3N0ciAiVmlzYSBkaWFsb2cgaW5uYW4gcHJvZ3JhbW1ldCBzdGFydGFzIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo3NwotbXNnaWQgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyAkUkVWSVNJT04pIgotbXNnc3RyICJCZSBhbnbDpG5kYXJlbiB2w6RsamEgZW4gdmVyc2lvbiAoc8OkdHRlciAkUkVWSVNJT04pIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo4MgotbXNnaWQgIkFzayB0aGUgdXNlciBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgKHNldHMgJEFSR1MpIgotbXNnc3RyICJCZSBhbnbDpG5kYXJlbiBvbSB5dHRlcmxpZ2FyZSBwYXJhbWV0cmFyIChzw6R0dGVyICRBUkdTKSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6ODkKLW1zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCi1tc2dzdHIgIlZpc2EgaW50ZSBrb21tYW5kb3RzIHV0ZGF0YWbDtm5zdGVyIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo5NAotbXNnaWQgIlJ1biBvbmx5IGlmIGEgZGlmZiBpcyBzZWxlY3RlZCAoJEZJTEVOQU1FIG5vdCBlbXB0eSkiCi1tc2dzdHIgIkvDtnIgZW5kYXN0IG9tIGVuIGRpZmYgaGFyIG1hcmtlcmF0cyAoJEZJTEVOQU1FIMOkciBpbnRlIHRvbXQpIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxMTgKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgbmFtZSBmb3IgdGhlIHRvb2wuIgotbXNnc3RyICJBbmdlIGV0dCBuYW1uIGbDtnIgdmVya3R5Z2V0LiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiVmVya3R5Z2V0IFwiJXNcIiBmaW5ucyByZWRhbi4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjE0OAotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjQ3MTMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNvdWxkIG5vdCBhZGQgdG9vbDpcbiIKKyJGYWlsZWQgdG8gcGFyc2UgLS1kaXJzdGF0Ly1YIG9wdGlvbiBwYXJhbWV0ZXI6XG4iCiAiJXMiCiBtc2dzdHIgIiIKLSJLdW5kZSBpbnRlIGzDpGdnYSB0aWxsIHZlcmt0eWdldDpcbiIKKyJNaXNzbHlja2FkZXMgdG9sa2EgYXJndW1lbnQgdGlsbCBmbGFnZ2FuIC0tZGlyc3RhdC8tWDtcbiIKICIlcyIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTg3Ci1tc2dpZCAiUmVtb3ZlIFRvb2wiCi1tc2dzdHIgIlRhIGJvcnQgdmVya3R5ZyIKKyM6IGRpZmYuYzo0Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY2hhbmdlIGNsYXNzICclYycgaW4gLS1kaWZmLWZpbHRlcj0lcyIKK21zZ3N0ciAib2vDpG5kIMOkbmRyaW5nc2tsYXNzIFwiJWNcIiBpIC0tZGlmZi1maWx0ZXI9JXMiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjE5MwotbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgotbXNnc3RyICJUYSBib3J0IHZlcmt0eWdza29tbWFuZG9uIgorIzogZGlmZi5jOjQ4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBhZnRlciB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIKK21zZ3N0ciAib2vDpG50IHbDpHJkZSBlZnRlciB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk4Ci1tc2dpZCAiUmVtb3ZlIgotbXNnc3RyICJUYSBib3J0IgorIzogZGlmZi5jOjQ4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzbMOlIHVwcCBcIiVzXCIiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjIzMQotbXNnaWQgIihCbHVlIGRlbm90ZXMgcmVwb3NpdG9yeS1sb2NhbCB0b29scykiCi1tc2dzdHIgIihCbMOldHQgYW5nZXIgdmVya3R5ZyBsb2thbGEgZsO2ciBhcmtpdmV0KSIKKyM6IGRpZmYuYzo0ODg2IGRpZmYuYzo0ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgPG4+LzxtPiBmb3JtIgorbXNnc3RyICIlcyBmw7ZydsOkbnRhciBmb3JtZW4gPG4+LzxtPiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjkyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVuIENvbW1hbmQ6ICVzIgotbXNnc3RyICJLw7ZyIGtvbW1hbmRvdDogJXMiCisjOiBkaWZmLmM6NDkwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgY2hhcmFjdGVyLCBnb3QgJyVzJyIKK21zZ3N0ciAiJXMgZsO2cnbDpG50YXIgZXR0IHRlY2tlbiwgZmljayBcIiVzXCIiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjMwNgotbXNnaWQgIkFyZ3VtZW50cyIKLW1zZ3N0ciAiQXJndW1lbnQiCisjOiBkaWZmLmM6NDkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS1jb2xvci1tb3ZlZCBhcmd1bWVudDogJXMiCittc2dzdHIgImZlbGFrdGlndCBhcmd1bWVudCB0aWxsIC0tY29sb3ItbW92ZWQ6ICVzIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDozNDEKLW1zZ2lkICJPSyIKLW1zZ3N0ciAiT0siCisjOiBkaWZmLmM6NDk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgJyVzJyBpbiAtLWNvbG9yLW1vdmVkLXdzIgorbXNnc3RyICJvZ2lsdGlndCBsw6RnZSAlc1wiIGkgLS1jb2xvci1tb3ZlZC13cyIKIAotIzogbGliL3NlYXJjaC50Y2w6NDgKLW1zZ2lkICJGaW5kOiIKLW1zZ3N0ciAiU8O2azoiCi0KLSM6IGxpYi9zZWFyY2gudGNsOjUwCi1tc2dpZCAiTmV4dCIKLW1zZ3N0ciAiTsOkc3RhIgotCi0jOiBsaWIvc2VhcmNoLnRjbDo1MQotbXNnaWQgIlByZXYiCi1tc2dzdHIgIkbDtnJlZyIKLQotIzogbGliL3NlYXJjaC50Y2w6NTIKLW1zZ2lkICJSZWdFeHAiCi1tc2dzdHIgIlJlZy51dHRyLiIKLQotIzogbGliL3NlYXJjaC50Y2w6NTQKLW1zZ2lkICJDYXNlIgotbXNnc3RyICJTa2lmdGzDpGdlIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTUgbGliL2JyYW5jaF9yZW5hbWUudGNsOjIzCi1tc2dpZCAiUmVuYW1lIEJyYW5jaCIKLW1zZ3N0ciAiQnl0IG5hbW4gcMOlIGdyZW4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyOAotbXNnaWQgIlJlbmFtZSIKLW1zZ3N0ciAiQnl0IG5hbW4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozOAotbXNnaWQgIkJyYW5jaDoiCi1tc2dzdHIgIkdyZW46IgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NDYKLW1zZ2lkICJOZXcgTmFtZToiCi1tc2dzdHIgIk55dHQgbmFtbjoiCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo4MQotbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKLW1zZ3N0ciAiVsOkbGogZW4gZ3JlbiBhdHQgYnl0YSBuYW1uIHDDpS4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo5MiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTU0Ci1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKLW1zZ3N0ciAiQW5nZSBldHQgbmFtbiBmw7ZyIGdyZW5lbi4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMTIgbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIgotbXNnc3RyICJcIiVzXCIga2FuIGludGUgYW52w6RuZGFzIHNvbSBuYW1uIHDDpSBncmVuZW4uIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTIzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHJlbmFtZSAnJXMnLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBieXRhIG5hbW4gcMOlIFwiJXNcIi4iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozNAotbXNnaWQgIkRlbGV0ZSBCcmFuY2ggUmVtb3RlbHkiCi1tc2dzdHIgIlRhIGJvcnQgZ3JlbiBmcsOlbiBmasOkcnJhcmtpdiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0OAotbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKLW1zZ3N0ciAiRnLDpW4gYXJraXYiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6ODgKLW1zZ2lkICJCcmFuY2hlcyIKLW1zZ3N0ciAiR3JlbmFyIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMAotbXNnaWQgIkRlbGV0ZSBPbmx5IElmIgotbXNnc3RyICJUYSBlbmRhc3QgYm9ydCBvbSIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTIKLW1zZ2lkICJNZXJnZWQgSW50bzoiCi1tc2dzdHIgIlNhbW1hbnNsYWdlbiBpOiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMjAgbGliL2JyYW5jaF9kZWxldGUudGNsOjUzCi1tc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgotbXNnc3RyICJBbGx0aWQgKHV0ZsO2ciBpbnRlIHNhbW1hbnNsYWduaW5nc3Rlc3QpIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MwotbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKLW1zZ3N0ciAiRW4gZ3JlbiBrcsOkdnMgZsO2ciBcIlNhbW1hbnNsYWdlbiBpXCIuIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NQotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjQ5ODQKIG1zZ2lkICIiCi0iVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6XG4iCi0iXG4iCi0iIC0gJXMiCisib3B0aW9uIGRpZmYtYWxnb3JpdGhtIGFjY2VwdHMgXCJteWVyc1wiLCBcIm1pbmltYWxcIiwgXCJwYXRpZW5jZVwiIGFuZCAiCisiXCJoaXN0b2dyYW1cIiIKIG1zZ3N0ciAiIgotIkbDtmxqYW5kZSBncmVuYXIgaGFyIGludGUgaGVsdCBzbGFnaXRzIHNhbW1hbiBpICVzOlxuIgotIlxuIgotIiAtICVzIgorImZsYWdnYW4gZGlmZi1hbGdvcml0aG0gZ29kdGFyXCJteWVyc1wiLCBcIm1pbmltYWxcIiwgXCJwYXRpZW5jZVwiIG9jaCAiCisiXCJoaXN0b2dyYW1cIiIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxOTAKLSMsIHRjbC1mb3JtYXQKKyM6IGRpZmYuYzo1MDIwIGRpZmYuYzo1MDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgdG8gJXMiCittc2dzdHIgIm9naWx0aWd0IGFyZ3VtZW50IGbDtnIgJXMiCisKKyM6IGRpZmYuYzo1MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAtLXN1Ym1vZHVsZSBvcHRpb24gcGFyYW1ldGVyOiAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdG9sa2EgYXJndW1lbnQgdGlsbCBmbGFnZ2FuIC0tc3VibW9kdWxlOiBcIiVzXCIiCisKKyM6IGRpZmYuYzo1MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLXdvcmQtZGlmZiBhcmd1bWVudDogJXMiCittc2dzdHIgImZlbGFrdGlndCBhcmd1bWVudCAtLXdvcmQtZGlmZjogJXMiCisKKyM6IGRpZmYuYzo1MjU3Cittc2dpZCAiRGlmZiBvdXRwdXQgZm9ybWF0IG9wdGlvbnMiCittc2dzdHIgIkZvcm1hdGZsYWdnb3IgZsO2ciBkaWZmLXV0ZGF0YSIKKworIzogZGlmZi5jOjUyNTkgZGlmZi5jOjUyNjUKK21zZ2lkICJnZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAic2thcGFyIHBhdGNoIgorCisjOiBkaWZmLmM6NTI2MiBidWlsdGluL2xvZy5jOjE3MworbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICJ1bmRlcnRyeWNrIGRpZmYtdXRkYXRhIgorCisjOiBkaWZmLmM6NTI2NyBkaWZmLmM6NTM4MSBkaWZmLmM6NTM4OAorbXNnaWQgIjxuPiIKK21zZ3N0ciAiPG4+IgorCisjOiBkaWZmLmM6NTI2OCBkaWZmLmM6NTI3MQorbXNnaWQgImdlbmVyYXRlIGRpZmZzIHdpdGggPG4+IGxpbmVzIGNvbnRleHQiCittc2dzdHIgInNrYXBhIGRpZmZhciBtZWQgPG4+IHJhZGVyIHNhbW1hbmhhbmciCisKKyM6IGRpZmYuYzo1MjczCittc2dpZCAiZ2VuZXJhdGUgdGhlIGRpZmYgaW4gcmF3IGZvcm1hdCIKK21zZ3N0ciAiZ2VuZXJlcmEgZGlmZiBpIHLDpWZvcm1hdCIKKworIzogZGlmZi5jOjUyNzYKK21zZ2lkICJzeW5vbnltIGZvciAnLXAgLS1yYXcnIgorbXNnc3RyICJzeW5vbnltIHRpbGwgXCItcCAtLXJhd1wiIgorCisjOiBkaWZmLmM6NTI4MAorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXN0YXQnIgorbXNnc3RyICJzeW5vbnltIHRpbGwgXCItcCAtLXN0YXRcIiIKKworIzogZGlmZi5jOjUyODQKK21zZ2lkICJtYWNoaW5lIGZyaWVuZGx5IC0tc3RhdCIKK21zZ3N0ciAibWFza2lubMOkc2JhciAtLXN0YXQiCisKKyM6IGRpZmYuYzo1Mjg3Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIGxhc3QgbGluZSBvZiAtLXN0YXQiCittc2dzdHIgInNrcml2IGJhcmEgdXQgZGVuIHNpc3RhIHJhZGVuIGbDtnIgLS1zdGF0IgorCisjOiBkaWZmLmM6NTI4OSBkaWZmLmM6NTI5NworbXNnaWQgIjxwYXJhbTEscGFyYW0yPi4uLiIKK21zZ3N0ciAiPHBhcmFtMSxwYXJhbTI+Li4uIgorCisjOiBkaWZmLmM6NTI5MAogbXNnaWQgIiIKLSJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKLSJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKKyJvdXRwdXQgdGhlIGRpc3RyaWJ1dGlvbiBvZiByZWxhdGl2ZSBhbW91bnQgb2YgY2hhbmdlcyBmb3IgZWFjaCBzdWItZGlyZWN0b3J5IgogbXNnc3RyICIiCi0iRW4gZWxsZXIgZmxlcmEgYXYgc2FtbWFuc2xhZ25pbmdzdGVzdGVybmEgbWlzc2x5Y2thZGVzIGVmdGVyc29tIGR1IGludGUgaGFyICIKLSJow6RtdGF0IGRlIG7DtmR2w6RuZGlnYSBpbmNoZWNrbmluZ2FybmEuIEbDtnJzw7ZrIGjDpG10YSBmcsOlbiAlcyBmw7Zyc3QuIgorInNrcml2IHV0IGRpc3RyaWJ1dGlvbmVuIGF2IHJlbGF0aXZhIG3DpG5nZGVyIMOkbmRyaW5nYXIgZsO2ciB2YXJqZSB1bmRlcmthdGFsb2ciCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjA4Ci1tc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgotbXNnc3RyICJWw6RsaiBlbiBlbGxlciBmbGVyYSBncmVuYXIgYXR0IHRhIGJvcnQuIgorIzogZGlmZi5jOjUyOTQKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSIKK21zZ3N0ciAic3lub255bSBmw7ZyIC0tZGlyc3RhdD1jdW11bGF0aXZlIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1CisjOiBkaWZmLmM6NTI5OAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1maWxlcyxwYXJhbTEscGFyYW0yLi4uIgorbXNnc3RyICJzeW5vbnltIGbDtnIgLS1kaXJzdGF0PWZpbGVyLHBhcmFtMSxwYXJhbTIuLi4iCisKKyM6IGRpZmYuYzo1MzAyCittc2dpZCAid2FybiBpZiBjaGFuZ2VzIGludHJvZHVjZSBjb25mbGljdCBtYXJrZXJzIG9yIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICJ2YXJuYSBvbSDDpG5kcmluZ2FyIGludHJvZHVjZXJhciBrb25mbGlrdG1hcmvDtnJlciBlbGxlciBibGFua3N0ZWdzZmVsIgorCisjOiBkaWZmLmM6NTMwNQorbXNnaWQgImNvbmRlbnNlZCBzdW1tYXJ5IHN1Y2ggYXMgY3JlYXRpb25zLCByZW5hbWVzIGFuZCBtb2RlIGNoYW5nZXMiCittc2dzdHIgImtvcnRmYXR0YWQgc3VtbWVyaW5nIHPDpXNvbSBza2FwYWRlLCBuYW1uYnl0ZW4gb2NoIMOkbmRyYWRlIGzDpGdlbiIKKworIzogZGlmZi5jOjUzMDgKK21zZ2lkICJzaG93IG9ubHkgbmFtZXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAidmlzYSBlbmRhc3QgbmFtbmVuIHDDpSDDpG5kcmFkZSBmaWxlciIKKworIzogZGlmZi5jOjUzMTEKK21zZ2lkICJzaG93IG9ubHkgbmFtZXMgYW5kIHN0YXR1cyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJ2aXNhIGVuZGFzdCBuYW1uIG9jaCBzdGF0dXMgZsO2ciDDpG5kcmFkZSBmaWxlciIKKworIzogZGlmZi5jOjUzMTMKK21zZ2lkICI8d2lkdGg+Wyw8bmFtZS13aWR0aD5bLDxjb3VudD5dXSIKK21zZ3N0ciAiPGJyZWRkPlssPG5hbW4tYnJlZGQ+Wyw8YW50YWw+XV0iCisKKyM6IGRpZmYuYzo1MzE0Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQiCittc2dzdHIgInNrYXBhIGRpZmZzdGF0IgorCisjOiBkaWZmLmM6NTMxNiBkaWZmLmM6NTMxOSBkaWZmLmM6NTMyMgorbXNnaWQgIjx3aWR0aD4iCittc2dzdHIgIjxicmVkZD4iCisKKyM6IGRpZmYuYzo1MzE3Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIHdpZHRoIgorbXNnc3RyICJnZW5lcmVyYSBlbiBkaWZmc3RhdCBtZWQgZ2l2ZW4gYnJlZGQiCisKKyM6IGRpZmYuYzo1MzIwCittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIG5hbWUgd2lkdGgiCittc2dzdHIgImdlbmVyZXJhIGVuIGRpZmZzdGF0IG1lZCBnaXZlbiBuYW1uYnJlZGQiCisKKyM6IGRpZmYuYzo1MzIzCittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIGdyYXBoIHdpZHRoIgorbXNnc3RyICJnZW5lcmVyYSBlbiBkaWZmc3RhdCBtZWQgZ2l2ZW4gZ3JhZmJyZWRkIgorCisjOiBkaWZmLmM6NTMyNQorbXNnaWQgIjxjb3VudD4iCittc2dzdHIgIjxhbnRhbD4iCisKKyM6IGRpZmYuYzo1MzI2Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBsaW1pdGVkIGxpbmVzIgorbXNnc3RyICJnZW5lcmVyYSBkaWZmc3RhdCBtZWQgYmVncsOkbnNhZGUgcmFkZXIiCisKKyM6IGRpZmYuYzo1MzI5Cittc2dpZCAiZ2VuZXJhdGUgY29tcGFjdCBzdW1tYXJ5IGluIGRpZmZzdGF0IgorbXNnc3RyICJza2FwYSBrb21wYWt0IMO2dmVyc2lrdCBpIGRpZmZzdGF0IgorCisjOiBkaWZmLmM6NTMzMgorbXNnaWQgIm91dHB1dCBhIGJpbmFyeSBkaWZmIHRoYXQgY2FuIGJlIGFwcGxpZWQiCittc2dzdHIgInNrYXBhIGVuIGJpbsOkcmRpZmYgc29tIGthbiBhcHBsaWNlcmFzIgorCisjOiBkaWZmLmM6NTMzNQorbXNnaWQgInNob3cgZnVsbCBwcmUtIGFuZCBwb3N0LWltYWdlIG9iamVjdCBuYW1lcyBvbiB0aGUgXCJpbmRleFwiIGxpbmVzIgorbXNnc3RyICIiCisidmlzYSBmdWxsc3TDpG5kaWdhIG9iamVrdG5hbW4gaSBcImluZGV4XCItcmFkZXIgZsO2ciBsw6RnZXQgYsOlZGUgZsO2cmUgb2NoIGVmdGVyIgorCisjOiBkaWZmLmM6NTMzNworbXNnaWQgInNob3cgY29sb3JlZCBkaWZmIgorbXNnc3RyICJ2aXNhIGbDpHJnYWQgZGlmZiIKKworIzogZGlmZi5jOjUzMzgKK21zZ2lkICI8a2luZD4iCittc2dzdHIgIjx0eXA+IgorCisjOiBkaWZmLmM6NTMzOQogbXNnaWQgIiIKLSJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgotIlxuIgotIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorImhpZ2hsaWdodCB3aGl0ZXNwYWNlIGVycm9ycyBpbiB0aGUgJ2NvbnRleHQnLCAnb2xkJyBvciAnbmV3JyBsaW5lcyBpbiB0aGUgIgorImRpZmYiCiBtc2dzdHIgIiIKLSJEZXQga2FuIHZhcmEgc3bDpXJ0IGF0dCDDpXRlcnN0w6RsbGEgYm9ydHRhZ25hIGdyZW5hci5cbiIKLSJcbiIKLSJUYSBib3J0IGRlIHZhbGRhIGdyZW5hcm5hPyIKKyJsanVzbWFya2VyYSBibGFua3N0ZWdzZmVsIGkgXCJjb250ZXh0XCIgKHNhbW1hbmhhbmcpLCBcIm9sZFwiIChnYW1sYSkgZWxsZXIgIgorIlwibmV3XCIgKG55YSkgcmFkZXIgaSBkaWZmZW4iCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKLW1zZ3N0ciAiVGFyIGJvcnQgZ3JlbmFyIGZyw6VuICVzIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjMwMAotbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgotbXNnc3RyICJJbmdldCBhcmtpdiBtYXJrZXJhdC4iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzA1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCi1tc2dzdHIgIlPDtmtlciAlcy4uLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMwotbXNnaWQgIkdpdCBHdWkiCi1tc2dzdHIgIkdpdCBHdWkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MTIKLW1zZ2lkICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiCi1tc2dzdHIgIlNrYXBhIG55dHQgYXJraXYiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgKLW1zZ2lkICJOZXcuLi4iCi1tc2dzdHIgIk55dHQuLi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk2Ci1tc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiS2xvbmEgYmVmaW50bGlndCBhcmtpdiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTYKLW1zZ2lkICJDbG9uZS4uLiIKLW1zZ3N0ciAiS2xvbmEuLi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2NAotbXNnaWQgIk9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiw5ZwcG5hIGJlZmludGxpZ3QgYXJraXYiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTI5Ci1tc2dpZCAiT3Blbi4uLiIKLW1zZ3N0ciAiw5ZwcG5hLi4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE0MgotbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCi1tc2dzdHIgIlNlbmFzdGUgYXJraXZlbiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxNDgKLW1zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKLW1zZ3N0ciAiw5ZwcG5hIHRpZGlnYXJlIGFya2l2OiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMjMKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzMwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBza2FwYSBhcmtpdmV0ICVzOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MDcgbGliL2JyYW5jaF9jcmVhdGUudGNsOjMzCi1tc2dpZCAiQ3JlYXRlIgotbXNnc3RyICJTa2FwYSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MTcKLW1zZ2lkICJEaXJlY3Rvcnk6IgotbXNnc3RyICJLYXRhbG9nOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NzMKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA5OAotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgotbXNnc3RyICJHaXRhcmtpdiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJLYXRhbG9nZW4gJXMgZmlubnMgcmVkYW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZpbGUgJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJGaWxlbiAlcyBmaW5ucyByZWRhbi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkxCi1tc2dpZCAiQ2xvbmUiCi1tc2dzdHIgIktsb25hIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwNAotbXNnaWQgIlNvdXJjZSBMb2NhdGlvbjoiCi1tc2dzdHIgIlBsYXRzIGbDtnIga8OkbGxrb2Q6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxMwotbXNnaWQgIlRhcmdldCBEaXJlY3Rvcnk6IgotbXNnc3RyICJNw6Vsa2F0YWxvZzoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTIzCi1tc2dpZCAiQ2xvbmUgVHlwZToiCi1tc2dzdHIgIlR5cCBhdiBrbG9uOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjgKLW1zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCi1tc2dzdHIgIlN0YW5kYXJkIChzbmFiYiwgc2VtaXJlZHVuZGFudCwgaMOlcmRhIGzDpG5rYXIpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzMwotbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKLW1zZ3N0ciAiRnVsbCBrb3BpYSAobMOlbmdzYW1tYXJlLCByZWR1bmRhbnQgc8Oka2VyaGV0c2tvcGlhKSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MzgKLW1zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKLW1zZ3N0ciAiRGVsYWQgKHNuYWJiYXN0LCByZWtvbW1lbmRlcmFzIGVqLCBpbmdlbiBzw6RrZXJoZXRza29waWEpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU0NQotbXNnaWQgIlJlY3Vyc2l2ZWx5IGNsb25lIHN1Ym1vZHVsZXMgdG9vIgotbXNnc3RyICJLbG9uYSDDpHZlbiByZWt1cnNpdnQgdW5kZXJtb2R1bGVyIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU3OSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyNgotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NzIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NDIKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEwNCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMTIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCi1tc2dzdHIgIkludGUgZXR0IEdpdGFya2l2OiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTUKLW1zZ2lkICJTdGFuZGFyZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIlN0YW5kYXJkIMOkciBlbmRhc3QgdGlsbGfDpG5nbGlndCBmw7ZyIGxva2FsYSBhcmtpdi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE5Ci1tc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKLW1zZ3N0ciAiRGVsYXQgw6RyIGVuZGFzdCB0aWxsZ8OkbmdsaWd0IGbDtnIgbG9rYWxhIGFya2l2LiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2NhdGlvbiAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIlBsYXRzZW4gJXMgZmlubnMgcmVkYW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY1MQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgotbXNnc3RyICJLdW5kZSBpbnRlIGtvbmZpZ3VyZXJhIHVyc3BydW5nIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2MwotbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCi1tc2dzdHIgIlLDpGtuYXIgb2JqZWt0IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NAotbXNnaWQgImJ1Y2tldHMiCi1tc2dzdHIgImhpbmthciIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2ODgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCi1tc2dzdHIgIkt1bmRlIGludGUga29waWVyYSBvYmpla3QvaW5mby9hbHRlcm5hdGl2OiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgotbXNnc3RyICJJbmdlbnRpbmcgYXR0IGtsb25hIGZyw6VuICVzLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MjYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NDAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTUyCi1tc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgotbXNnc3RyICJHcmVuZW4gXCJtYXN0ZXJcIiBoYXIgaW50ZSBpbml0aWVyYXRzLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MzkKLW1zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgotbXNnc3RyICJIw6VyZGEgbMOkbmthciDDpHIgaW50ZSB0aWxsZ8OkbmdsaWdhLiBGYWxsZXIgdGlsbGJha2EgcMOlIGtvcGllcmluZy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzUxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2xvbmluZyBmcm9tICVzIgotbXNnc3RyICJLbG9uYXIgZnLDpW4gJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzgyCi1tc2dpZCAiQ29weWluZyBvYmplY3RzIgotbXNnc3RyICJLb3BpZXJhciBvYmpla3QiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzgzCi1tc2dpZCAiS2lCIgotbXNnc3RyICJLaUIiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBrb3BpZXJhIG9iamVrdDogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODE3Ci1tc2dpZCAiTGlua2luZyBvYmplY3RzIgotbXNnc3RyICJMw6Rua2FyIG9iamVrdCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTgKLW1zZ2lkICJvYmplY3RzIgotbXNnc3RyICJvYmpla3QiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODI2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCi1tc2dzdHIgIkt1bmRlIGludGUgaMOlcmRsw6Rua2Egb2JqZWt0OiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4ODEKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggYnJhbmNoZXMgYW5kIG9iamVjdHMuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgotbXNnc3RyICJLdW5kZSBpbnRlIGjDpG10YSBncmVuYXIgb2NoIG9iamVrdC4gU2Uga29uc29sdXRkYXRhIGbDtnIgZGV0YWxqZXIuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg5MgotbXNnaWQgIkNhbm5vdCBmZXRjaCB0YWdzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBow6RtdGEgdGFnZ2FyLiBTZSBrb25zb2x1dGRhdGEgZsO2ciBkZXRhbGplci4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE2Ci1tc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBhdmfDtnJhIEhFQUQuIFNlIGtvbnNvbHV0ZGF0YSBmw7ZyIGRldGFsamVyLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY2xlYW51cCAlcyIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBzdMOkZGEgdXBwICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzMQotbXNnaWQgIkNsb25lIGZhaWxlZC4iCi1tc2dzdHIgIktsb25pbmcgbWlzc2x5Y2thZGVzLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzgKLW1zZ2lkICJObyBkZWZhdWx0IGJyYW5jaCBvYnRhaW5lZC4iCi1tc2dzdHIgIkjDpG10YWRlIGluZ2VuIHN0YW5kYXJkZ3Jlbi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTQ5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgotbXNnc3RyICJLdW5kZSBpbnRlIHNsw6UgdXBwICVzIHRpbGwgbsOlZ29uIGluY2hlY2tuaW5nLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjEKLW1zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAiU2thcGFyIGFyYmV0c2thdGFsb2ciCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTYyIGxpYi9pbmRleC50Y2w6NzAgbGliL2luZGV4LnRjbDoxMzYKLSM6IGxpYi9pbmRleC50Y2w6MjA3Ci1tc2dpZCAiZmlsZXMiCi1tc2dzdHIgImZpbGVyIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk4MQotbXNnaWQgIkNhbm5vdCBjbG9uZSBzdWJtb2R1bGVzLiIKLW1zZ3N0ciAiS2FuIGludGUga2xvbmEgdW5kZXJtb2R1bGVyLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5OTAKLW1zZ2lkICJDbG9uaW5nIHN1Ym1vZHVsZXMiCi1tc2dzdHIgIktsb25hciB1bmRlcm1vZHVsZXIiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNQotbXNnaWQgIkluaXRpYWwgZmlsZSBjaGVja291dCBmYWlsZWQuIgotbXNnc3RyICJJbmxlZGFuZGUgZmlsdXRjaGVja25pbmcgbWlzc2x5Y2thZGVzLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDU5Ci1tc2dpZCAiT3BlbiIKLW1zZ3N0ciAiw5ZwcG5hIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjkKLW1zZ2lkICJSZXBvc2l0b3J5OiIKLW1zZ3N0ciAiQXJraXY6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSDDtnBwbmEgYXJraXZldCAlczoiCi0KLSM6IGxpYi9hYm91dC50Y2w6MjYKLW1zZ2lkICJnaXQtZ3VpIC0gYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIEdpdC4iCi1tc2dzdHIgImdpdC1ndWkgLSBldHQgZ3JhZmlza3QgYW52w6RuZGFyZ3LDpG5zc25pdHQgZsO2ciBHaXQuIgotCi0jOiBsaWIvYmxhbWUudGNsOjczCi1tc2dpZCAiRmlsZSBWaWV3ZXIiCi1tc2dzdHIgIkZpbHZpc2FyZSIKLQotIzogbGliL2JsYW1lLnRjbDo3OQotbXNnaWQgIkNvbW1pdDoiCi1tc2dzdHIgIkluY2hlY2tuaW5nOiIKLQotIzogbGliL2JsYW1lLnRjbDoyODAKLW1zZ2lkICJDb3B5IENvbW1pdCIKLW1zZ3N0ciAiS29waWVyYSBpbmNoZWNrbmluZyIKLQotIzogbGliL2JsYW1lLnRjbDoyODQKLW1zZ2lkICJGaW5kIFRleHQuLi4iCi1tc2dzdHIgIlPDtmsgdGV4dC4uLiIKLQotIzogbGliL2JsYW1lLnRjbDoyODgKLW1zZ2lkICJHb3RvIExpbmUuLi4iCi1tc2dzdHIgIkfDpSB0aWxsIHJhZC4uLiIKLQotIzogbGliL2JsYW1lLnRjbDoyOTcKLW1zZ2lkICJEbyBGdWxsIENvcHkgRGV0ZWN0aW9uIgotbXNnc3RyICJHw7ZyIGZ1bGwga29waWVyaW5nc2lnZW5rw6RubmluZyIKLQotIzogbGliL2JsYW1lLnRjbDozMDEKLW1zZ2lkICJTaG93IEhpc3RvcnkgQ29udGV4dCIKLW1zZ3N0ciAiVmlzYSBoaXN0b3Jpa3NhbW1hbmhhbmciCi0KLSM6IGxpYi9ibGFtZS50Y2w6MzA0Ci1tc2dpZCAiQmxhbWUgUGFyZW50IENvbW1pdCIKLW1zZ3N0ciAiS2xhbmRyYSBmw7Zyw6RsZHJhaW5jaGVja25pbmciCi0KLSM6IGxpYi9ibGFtZS50Y2w6NDY2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVhZGluZyAlcy4uLiIKLW1zZ3N0ciAiTMOkc2VyICVzLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjU5NAotbXNnaWQgIkxvYWRpbmcgY29weS9tb3ZlIHRyYWNraW5nIGFubm90YXRpb25zLi4uIgotbXNnc3RyICJMw6RzZXIgYW5ub3RlcmluZ2FyIGbDtnIga29waWVyaW5nL2ZseXR0bmluZy4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo2MTQKLW1zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCi1tc2dzdHIgInJhZGVyIGFubm90ZXJhZGUiCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODA2Ci1tc2dpZCAiTG9hZGluZyBvcmlnaW5hbCBsb2NhdGlvbiBhbm5vdGF0aW9ucy4uLiIKLW1zZ3N0ciAiTMOkc2VyIGluIGFubm90ZXJpbmcgYXYgb3JpZ2luYWxwbGFjZXJpbmcuLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODA5Ci1tc2dpZCAiQW5ub3RhdGlvbiBjb21wbGV0ZS4iCi1tc2dzdHIgIkFubm90ZXJpbmcgZnVsbGJvcmRhZC4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODM5Ci1tc2dpZCAiQnVzeSIKLW1zZ3N0ciAiVXBwdGFnZW4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODQwCi1tc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCi1tc2dzdHIgIkFubm90ZXJpbmdzcHJvY2VzcyBrw7ZycyByZWRhbi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODc5Ci1tc2dpZCAiUnVubmluZyB0aG9yb3VnaCBjb3B5IGRldGVjdGlvbi4uLiIKLW1zZ3N0ciAiS8O2ciBncnVuZGxpZyBrb3BpZXJpbmdzaWdlbmvDpG5uaW5nLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjk0NwotbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKLW1zZ3N0ciAiTMOkc2VyIGluIGFubm90ZXJpbmcuLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTAwMAotbXNnaWQgIkF1dGhvcjoiCi1tc2dzdHIgIkbDtnJmYXR0YXJlOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDA0Ci1tc2dpZCAiQ29tbWl0dGVyOiIKLW1zZ3N0ciAiSW5jaGVja2FyZToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTAwOQotbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgotbXNnc3RyICJVcnNwcnVuZ2xpZyBmaWw6IgotCi0jOiBsaWIvYmxhbWUudGNsOjEwNTcKLW1zZ2lkICJDYW5ub3QgZmluZCBIRUFEIGNvbW1pdDoiCi1tc2dzdHIgIkhpdHRhciBpbnRlIGluY2hlY2tuaW5nIGbDtnIgSEVBRDoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTExMgotbXNnaWQgIkNhbm5vdCBmaW5kIHBhcmVudCBjb21taXQ6IgotbXNnc3RyICJIaXR0YXIgaW50ZSBmw7Zyw6RsZHJhaW5jaGVja25pbmc6IgotCi0jOiBsaWIvYmxhbWUudGNsOjExMjcKLW1zZ2lkICJVbmFibGUgdG8gZGlzcGxheSBwYXJlbnQiCi1tc2dzdHIgIkthbiBpbnRlIHZpc2EgZsO2csOkbGRlciIKLQotIzogbGliL2JsYW1lLnRjbDoxMjY5Ci1tc2dpZCAiT3JpZ2luYWxseSBCeToiCi1tc2dzdHIgIlVyc3BydW5nbGlnZW4gYXY6IgotCi0jOiBsaWIvYmxhbWUudGNsOjEyNzUKLW1zZ2lkICJJbiBGaWxlOiIKLW1zZ3N0ciAiSSBmaWxlbjoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTI4MAotbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKLW1zZ3N0ciAiS29waWVyYWQgZWxsZXIgZmx5dHRhZCBoaXQgYXY6IgotCi0jOiBsaWIvc3Noa2V5LnRjbDozMQotbXNnaWQgIk5vIGtleXMgZm91bmQuIgotbXNnc3RyICJJbmdhIG55Y2tsYXIgaGl0dGFkZXMuIgotCi0jOiBsaWIvc3Noa2V5LnRjbDozNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZvdW5kIGEgcHVibGljIGtleSBpbjogJXMiCi1tc2dzdHIgIkhpdHRhZGUgw7ZwcGVuIG55Y2tlbCBpOiAlcyIKLQotIzogbGliL3NzaGtleS50Y2w6NDAKLW1zZ2lkICJHZW5lcmF0ZSBLZXkiCi1tc2dzdHIgIlNrYXBhIG55Y2tlbCIKLQotIzogbGliL3NzaGtleS50Y2w6NTgKLW1zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKLW1zZ3N0ciAiS29waWVyYSB0aWxsIFVya2xpcHAiCi0KLSM6IGxpYi9zc2hrZXkudGNsOjcyCi1tc2dpZCAiWW91ciBPcGVuU1NIIFB1YmxpYyBLZXkiCi1tc2dzdHIgIkRpbiDDtnBwbmEgT3BlblNTSC1ueWNrZWwiCi0KLSM6IGxpYi9zc2hrZXkudGNsOjgwCi1tc2dpZCAiR2VuZXJhdGluZy4uLiIKLW1zZ3N0ciAiU2thcGFyLi4uIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo4NgotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjUzNDIKIG1zZ2lkICIiCi0iQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCi0iXG4iCi0iJXMiCisiZG8gbm90IG11bmdlIHBhdGhuYW1lcyBhbmQgdXNlIE5VTHMgYXMgb3V0cHV0IGZpZWxkIHRlcm1pbmF0b3JzIGluIC0tcmF3IG9yICIKKyItLW51bXN0YXQiCiBtc2dzdHIgIiIKLSJLdW5kZSBpbnRlIHN0YXJ0YSBzc2gta2V5Z2VuOlxuIgotIlxuIgotIiVzIgorInNrcml2IGludGUgb20gc8O2a3bDpGdzbmFtbiBvY2ggYW52w6RuZCBOVUwtdGVja2VuIHNvbSBmw6RsdHNlcGFyZXJhcmUgaSAtLXJhdyAiCisiZWxsZXIgLS1udW1zdGF0IgogCi0jOiBsaWIvc3Noa2V5LnRjbDoxMTMKLW1zZ2lkICJHZW5lcmF0aW9uIGZhaWxlZC4iCi1tc2dzdHIgIk1pc3NseWNrYWRlcyBtZWQgYXR0IHNrYXBhLiIKKyM6IGRpZmYuYzo1MzQ1IGRpZmYuYzo1MzQ4IGRpZmYuYzo1MzUxIGRpZmYuYzo1NDU3Cittc2dpZCAiPHByZWZpeD4iCittc2dzdHIgIjxwcmVmaXg+IgogCi0jOiBsaWIvc3Noa2V5LnRjbDoxMjAKLW1zZ2lkICJHZW5lcmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vIGtleXMgZm91bmQuIgotbXNnc3RyICJMeWNrYWRlcyBza2FwYSBueWNrZWxuLCBtZW4gaGl0dGFyIGludGUgbsOlZ29uIG55Y2tlbC4iCisjOiBkaWZmLmM6NTM0NgorbXNnaWQgInNob3cgdGhlIGdpdmVuIHNvdXJjZSBwcmVmaXggaW5zdGVhZCBvZiBcImEvXCIiCittc2dzdHIgInZpc2EgZ2l2ZXQga8OkbGxwcmVmaXggaXN0w6RsbGV0IGbDtnIgXCJhL1wiIgogCi0jOiBsaWIvc3Noa2V5LnRjbDoxMjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJZb3VyIGtleSBpcyBpbjogJXMiCi1tc2dzdHIgIkRpbiBueWNrZWwgZmlubnMgaTogJXMiCisjOiBkaWZmLmM6NTM0OQorbXNnaWQgInNob3cgdGhlIGdpdmVuIGRlc3RpbmF0aW9uIHByZWZpeCBpbnN0ZWFkIG9mIFwiYi9cIiIKK21zZ3N0ciAidmlzYSBnaXZldCBtw6VscHJlZml4IGlzdMOkbGxldCBmw7ZyIFwiYi9cIiIKIAotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIzCi1tc2dpZCAiQ3JlYXRlIEJyYW5jaCIKLW1zZ3N0ciAiU2thcGEgZ3JlbiIKKyM6IGRpZmYuYzo1MzUyCittc2dpZCAicHJlcGVuZCBhbiBhZGRpdGlvbmFsIHByZWZpeCB0byBldmVyeSBsaW5lIG9mIG91dHB1dCIKK21zZ3N0ciAibMOkZ2cgdGlsbCB5dHRlcmxpZ2FyZSBwcmVmaXggcMOlIGFsbGEgcmFkZXIgaSB1dGRhdGEiCiAKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyOAotbXNnaWQgIkNyZWF0ZSBOZXcgQnJhbmNoIgotbXNnc3RyICJTa2FwYSBueSBncmVuIgorIzogZGlmZi5jOjUzNTUKK21zZ2lkICJkbyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeCIKK21zZ3N0ciAidmlzYSBpbnRlIGvDpGxsLSBlbGxlciBtw6VscHJlZml4IgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDIKLW1zZ2lkICJCcmFuY2ggTmFtZSIKLW1zZ3N0ciAiTmFtbiBww6UgZ3JlbiIKKyM6IGRpZmYuYzo1MzU4Cittc2dpZCAic2hvdyBjb250ZXh0IGJldHdlZW4gZGlmZiBodW5rcyB1cCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBsaW5lcyIKK21zZ3N0ciAidmlzYSBzYW1tbmhhbmcgbWVsbGFuIGRpZmYtc3R5Y2tlbiB1cHAgdGlsbCBhbmdpdmV0IGFudGFsIHJhZGVyIgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTcKLW1zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKLW1zZ3N0ciAiQW52w6RuZCBuYW1uIHDDpSBzcMOlcmFkIGdyZW4iCisjOiBkaWZmLmM6NTM2MiBkaWZmLmM6NTM2NyBkaWZmLmM6NTM3MgorbXNnaWQgIjxjaGFyPiIKK21zZ3N0ciAiPHRlY2tlbj4iCiAKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2NgotbXNnaWQgIlN0YXJ0aW5nIFJldmlzaW9uIgotbXNnc3RyICJJbmxlZGFuZGUgcmV2aXNpb24iCisjOiBkaWZmLmM6NTM2MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIG5ldyBsaW5lIGluc3RlYWQgb2YgJysnIgorbXNnc3RyICJhbmdlIHRlY2tlbiBmw7ZyIGF0dCBhbmdlIG55IHJhZCBpc3TDpGxsZXQgZsO2ciBcIitcIiIKIAotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjcyCi1tc2dpZCAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiCi1tc2dzdHIgIlVwcGRhdGVyYSBiZWZpbnRsaWcgZ3JlbjoiCisjOiBkaWZmLmM6NTM2OAorbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhbiBvbGQgbGluZSBpbnN0ZWFkIG9mICctJyIKK21zZ3N0ciAiYW5nZSB0ZWNrZW4gZsO2ciBhdHQgYW5nZSBnYW1tYWwgcmFkIGlzdMOkbGxldCBmw7ZyIFwiLVwiIgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzUKLW1zZ2lkICJObyIKLW1zZ3N0ciAiTmVqIgorIzogZGlmZi5jOjUzNzMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBjb250ZXh0IGluc3RlYWQgb2YgJyAnIgorbXNnc3RyICJhbmdlIHRlY2tlbiBmw7ZyIGF0dCBhbmdlIHNhbW1hbmhhbmcgaXN0w6RsbGV0IGbDtnIgXCIgXCIiCiAKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAotbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgotbXNnc3RyICJFbmRhc3Qgc25hYmJzcG9sbmluZyIKKyM6IGRpZmYuYzo1Mzc2Cittc2dpZCAiRGlmZiByZW5hbWUgb3B0aW9ucyIKK21zZ3N0ciAiRGlmZi1uYW1uYnl0ZXNmbGFnZ29yIgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTcKLW1zZ2lkICJDaGVja291dCBBZnRlciBDcmVhdGlvbiIKLW1zZ3N0ciAiQ2hlY2thIHV0IG7DpHIgc2thcGFkIgorIzogZGlmZi5jOjUzNzcKK21zZ2lkICI8bj5bLzxtPl0iCittc2dzdHIgIjxuPlsvPG0+XSIKIAotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMgotbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgotbXNnc3RyICJWw6RsaiBlbiBncmVuIGF0dCBzcMOlcmEuIgorIzogZGlmZi5jOjUzNzgKK21zZ2lkICJicmVhayBjb21wbGV0ZSByZXdyaXRlIGNoYW5nZXMgaW50byBwYWlycyBvZiBkZWxldGUgYW5kIGNyZWF0ZSIKK21zZ3N0ciAiZGVsYSB1cHAga29tcGxldHRhIG9tc2tyaXZuaW5nYXIgdGlsbCB0YSBib3J0IG9jaCBza2FwYS1wYXIiCiAKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIkRlbiBzcMOlcmFkZSBncmVuZW4gJXMgw6RyIGludGUgZW4gZ3JlbiBpIGZqw6RycmFya2l2ZXQuIgorIzogZGlmZi5jOjUzODIKK21zZ2lkICJkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAiZGV0ZWt0ZXJhIG5hbW7DpG5kcmluZ2FyIgogCi0jOiBsaWIvc2hvcnRjdXQudGNsOjIxIGxpYi9zaG9ydGN1dC50Y2w6NjIKLW1zZ2lkICJDYW5ub3Qgd3JpdGUgc2hvcnRjdXQ6IgotbXNnc3RyICJLYW4gaW50ZSBza3JpdmEgZ2VudsOkZzoiCisjOiBkaWZmLmM6NTM4NgorbXNnaWQgIm9taXQgdGhlIHByZWltYWdlIGZvciBkZWxldGVzIgorbXNnc3RyICJ0YSBib3J0IGbDtnItdmVyc2lvbiBmw7ZyIGJvcnR0YWduaW5nYXIiCiAKLSM6IGxpYi9zaG9ydGN1dC50Y2w6MTM3Ci1tc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgotbXNnc3RyICJLYW4gaW50ZSBza3JpdmEgaWtvbjoiCisjOiBkaWZmLmM6NTM4OQorbXNnaWQgImRldGVjdCBjb3BpZXMiCittc2dzdHIgImRldGVrdGVyYSBrb3Bpb3IiCiAKLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MgotbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCi1tc2dzdHIgIkRlbm5hIGZyw6Vua29wcGxhZGUgdXRjaGVja25pbmciCisjOiBkaWZmLmM6NTM5MworbXNnaWQgInVzZSB1bm1vZGlmaWVkIGZpbGVzIGFzIHNvdXJjZSB0byBmaW5kIGNvcGllcyIKK21zZ3N0ciAiYW52w6RuZCBvZsO2csOkbmRyYWRlIHNvbSBrw6RsbGEgZsO2ciBhdHQgaGl0dGEga29waW9yIgogCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKLW1zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKLW1zZ3N0ciAiUmV2aXNpb25zdXR0cnljazoiCisjOiBkaWZmLmM6NTM5NQorbXNnaWQgImRpc2FibGUgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAiaW5ha3RpdmVyYSBkZXRla3RlcmluZyBhdiBuYW1uYnl0ZW4iCiAKLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3MgotbXNnaWQgIkxvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiTG9rYWwgZ3JlbiIKKyM6IGRpZmYuYzo1Mzk4Cittc2dpZCAidXNlIGVtcHR5IGJsb2JzIGFzIHJlbmFtZSBzb3VyY2UiCittc2dzdHIgImFudsOkbmQgdG9tbWEgYmxvYjphciBzb20gbmFtbsOkbmRyaW5nc2vDpGxsYSIKIAotIzogbGliL2Nob29zZV9yZXYudGNsOjc3Ci1tc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgotbXNnc3RyICJTcMOlcmFuZGUgZ3JlbiIKKyM6IGRpZmYuYzo1NDAwCittc2dpZCAiY29udGludWUgbGlzdGluZyB0aGUgaGlzdG9yeSBvZiBhIGZpbGUgYmV5b25kIHJlbmFtZXMiCittc2dzdHIgImZvcnRzw6R0dCBsaXN0YSBoaXN0b3Jpa2VuIGbDtnIgZW4gZmlsIGJvcnRvbSBuYW1uw6RuZHJpbmdhciIKIAotIzogbGliL2Nob29zZV9yZXYudGNsOjgyIGxpYi9jaG9vc2VfcmV2LnRjbDo1NDQKLW1zZ2lkICJUYWciCi1tc2dzdHIgIlRhZ2ciCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMjEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKLW1zZ3N0ciAiT2dpbHRpZyByZXZpc2lvbjogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDIKLW1zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCi1tc2dzdHIgIkluZ2VuIHJldmlzaW9uIHZhbGQuIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzUwCi1tc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCi1tc2dzdHIgIlJldmlzaW9uc3V0dHJ5Y2tldCDDpHIgdG9tdC4iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzcKLW1zZ2lkICJVcGRhdGVkIgotbXNnc3RyICJVcHBkYXRlcmFkIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTY1Ci1tc2dpZCAiVVJMIgotbXNnc3RyICJXZWJiYWRyZXNzIgotCi0jOiBsaWIvY29tbWl0LnRjbDo5CisjOiBkaWZmLmM6NTQwMwogbXNnaWQgIiIKLSJUaGVyZSBpcyBub3RoaW5nIHRvIGFtZW5kLlxuIgotIlxuIgotIllvdSBhcmUgYWJvdXQgdG8gY3JlYXRlIHRoZSBpbml0aWFsIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGNvbW1pdCBiZWZvcmUgdGhpcyAiCi0idG8gYW1lbmQuXG4iCisicHJldmVudCByZW5hbWUvY29weSBkZXRlY3Rpb24gaWYgdGhlIG51bWJlciBvZiByZW5hbWUvY29weSB0YXJnZXRzIGV4Y2VlZHMgIgorImdpdmVuIGxpbWl0IgogbXNnc3RyICIiCi0iRGV0IGZpbm5zIGluZ2VudGluZyBhdHQgdXTDtmthLlxuIgotIlxuIgotIkR1IGjDpWxsZXIgcMOlIGF0dCBza2FwYSBkZW4gaW5sZWRhbmRlIGluY2hlY2tuaW5nZW4uIERldCBmaW5ucyBpbmdlbiB0aWRpZ2FyZSAiCi0iaW5jaGVja25pbmcgYXR0IHV0w7ZrYS5cbiIKKyJmw7ZyaGluZHJhIG5hbW5ieXRlL2tvcGllLWRldGVrdGVyaW5nIG9tIGFudGFsZXQgbmFtbmJ5dGVuL2tvcGlvciDDtnZlcnNrcml2ZXIgIgorImdpdmVuIGdyw6RucyIKIAotIzogbGliL2NvbW1pdC50Y2w6MTgKKyM6IGRpZmYuYzo1NDA1Cittc2dpZCAiRGlmZiBhbGdvcml0aG0gb3B0aW9ucyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiBmw7ZyIGRpZmYtYWxnb3JpdG0iCisKKyM6IGRpZmYuYzo1NDA3Cittc2dpZCAicHJvZHVjZSB0aGUgc21hbGxlc3QgcG9zc2libGUgZGlmZiIKK21zZ3N0ciAic2thcGEgbWluc3RhIG3DtmpsaWdhIGRpZmYiCisKKyM6IGRpZmYuYzo1NDEwCittc2dpZCAiaWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgbGluZXMiCittc2dzdHIgImlnbm9yZXJhIGJsYW5rdGVja2VuIHZpZCByYWRqw6RtZsO2cmVsc2UiCisKKyM6IGRpZmYuYzo1NDEzCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gYW1vdW50IG9mIHdoaXRlc3BhY2UiCittc2dzdHIgImlnbm9yZXJhIMOkbmRyaW5nYXIgaSBhbnRhbCBibGFua3RlY2tlbiB2aWQgcmFkasOkbWbDtnJlbHNlIgorCisjOiBkaWZmLmM6NTQxNgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgYXQgRU9MIgorbXNnc3RyICJpZ25vcmVyYSBibGFua3RlY2tlbiB2aWQgcmFkc2x1dCIKKworIzogZGlmZi5jOjU0MTkKK21zZ2lkICJpZ25vcmUgY2Fycmllci1yZXR1cm4gYXQgdGhlIGVuZCBvZiBsaW5lIgorbXNnc3RyICJpZ25vcmVyYSBDUi10ZWNrZW4gdmlkIHJhZHNsdXQiCisKKyM6IGRpZmYuYzo1NDIyCittc2dpZCAiaWdub3JlIGNoYW5nZXMgd2hvc2UgbGluZXMgYXJlIGFsbCBibGFuayIKK21zZ3N0ciAiaWdub3JlcmEgw6RuZHJpbmdhciBpIHJhZGVyIHNvbSDDpHIgaGVsdCBibGFua2EiCisKKyM6IGRpZmYuYzo1NDI1Cittc2dpZCAiaGV1cmlzdGljIHRvIHNoaWZ0IGRpZmYgaHVuayBib3VuZGFyaWVzIGZvciBlYXN5IHJlYWRpbmciCittc2dzdHIgImhldXJpc3RpayBmw7ZyIGF0dCBmbHl0dGEgZGlmZi1ncsOkbnNlciBmw7ZyIGzDpHR0YXJlIGzDpHNuaW5nIgorCisjOiBkaWZmLmM6NTQyOAorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwicGF0aWVuY2UgZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAic2thcGEgZGlmZmFyIG1lZCBhbGdvcml0bWVuIFwicGF0aWVuY2UgZGlmZlwiIgorCisjOiBkaWZmLmM6NTQzMgorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwiaGlzdG9ncmFtIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgInNrYXBhIGRpZmZhciBtZWQgYWxnb3JpdG1lbiBcImhpc3RvZ3JhbSBkaWZmXCIiCisKKyM6IGRpZmYuYzo1NDM0Cittc2dpZCAiPGFsZ29yaXRobT4iCittc2dzdHIgIjxhbGdvcml0bT4iCisKKyM6IGRpZmYuYzo1NDM1Cittc2dpZCAiY2hvb3NlIGEgZGlmZiBhbGdvcml0aG0iCittc2dzdHIgInbDpGxqIGVuIGRpZmYtYWxnb3JpdG0iCisKKyM6IGRpZmYuYzo1NDM3Cittc2dpZCAiPHRleHQ+IgorbXNnc3RyICI8dGV4dD4iCisKKyM6IGRpZmYuYzo1NDM4Cittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJhbmNob3JlZCBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICJza2FwYSBkaWZmYXIgbWVkIGFsZ29yaXRtZW4gXCJhbmNob3JlZCBkaWZmXCIiCisKKyM6IGRpZmYuYzo1NDQwIGRpZmYuYzo1NDQ5IGRpZmYuYzo1NDUyCittc2dpZCAiPG1vZGU+IgorbXNnc3RyICI8bMOkZ2U+IgorCisjOiBkaWZmLmM6NTQ0MQorbXNnaWQgInNob3cgd29yZCBkaWZmLCB1c2luZyA8bW9kZT4gdG8gZGVsaW1pdCBjaGFuZ2VkIHdvcmRzIgorbXNnc3RyICJ2aXNhIG9yZGRpZmYsIGTDpHIgPGzDpGdlPiBhdmdyw6Ruc2FyIMOkbmRyYWRlIG9yZCIKKworIzogZGlmZi5jOjU0NDMgZGlmZi5jOjU0NDYgZGlmZi5jOjU0OTEKK21zZ2lkICI8cmVnZXg+IgorbXNnc3RyICI8cmVndXR0cj4iCisKKyM6IGRpZmYuYzo1NDQ0Cittc2dpZCAidXNlIDxyZWdleD4gdG8gZGVjaWRlIHdoYXQgYSB3b3JkIGlzIgorbXNnc3RyICJhbnbDpG5kIDxyZWd1dHRyPiBmw7ZyIGF0dCBiZXN0w6RtbWEgdmFkIHNvbSDDpHIgZXR0IG9yZCIKKworIzogZGlmZi5jOjU0NDcKK21zZ2lkICJlcXVpdmFsZW50IHRvIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxyZWdleD4iCittc2dzdHIgIm1vdHN2YXJhciAtLXdvcmQtZGlmZj1jb2xvciAtLXdvcmQtZGlmZi1yZWdleD08cmVndXR0cj4iCisKKyM6IGRpZmYuYzo1NDUwCittc2dpZCAibW92ZWQgbGluZXMgb2YgY29kZSBhcmUgY29sb3JlZCBkaWZmZXJlbnRseSIKK21zZ3N0ciAiZmx5dHRhZGUga29kcmFkZXIgZsOkcmdhcyBww6UgYW5uYXQgc8OkdHQiCisKKyM6IGRpZmYuYzo1NDUzCittc2dpZCAiaG93IHdoaXRlIHNwYWNlcyBhcmUgaWdub3JlZCBpbiAtLWNvbG9yLW1vdmVkIgorbXNnc3RyICJodXIgYmxhbmt0ZWNrZW4gaWdub3JlcmFzIGkgLS1jb2xvci1tb3ZlZCIKKworIzogZGlmZi5jOjU0NTYKK21zZ2lkICJPdGhlciBkaWZmIG9wdGlvbnMiCittc2dzdHIgIkFuZHJhIGRpZmYtZmxhZ2dvciIKKworIzogZGlmZi5jOjU0NTgKK21zZ2lkICJ3aGVuIHJ1biBmcm9tIHN1YmRpciwgZXhjbHVkZSBjaGFuZ2VzIG91dHNpZGUgYW5kIHNob3cgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgIiIKKyJ2aWQgc3RhcnQgZnLDpW4gdW5kZXJrYXRhbG9nLCB1dGVzbHV0IMOkbmRyaW5nYXIgdXRhbmbDtnIgb2NoIHZpc2EgcmVsYXRpdmEgIgorInPDtmt2w6RnYXIiCisKKyM6IGRpZmYuYzo1NDYyCittc2dpZCAidHJlYXQgYWxsIGZpbGVzIGFzIHRleHQiCittc2dzdHIgImhhbnRlcmEgYWxsYSBmaWxlciBzb20gdGV4dCIKKworIzogZGlmZi5jOjU0NjQKK21zZ2lkICJzd2FwIHR3byBpbnB1dHMsIHJldmVyc2UgdGhlIGRpZmYiCittc2dzdHIgInbDpHhsYSB0dsOlIGluZGF0YWZpbGVyLCB2w6RuZCBkaWZmZW4iCisKKyM6IGRpZmYuYzo1NDY2Cittc2dpZCAiZXhpdCB3aXRoIDEgaWYgdGhlcmUgd2VyZSBkaWZmZXJlbmNlcywgMCBvdGhlcndpc2UiCittc2dzdHIgImF2c2x1dGEgbWVkIDEgdmlkIMOkbmRyaW5nYXIsIGFubmFycyAwIgorCisjOiBkaWZmLmM6NTQ2OAorbXNnaWQgImRpc2FibGUgYWxsIG91dHB1dCBvZiB0aGUgcHJvZ3JhbSIKK21zZ3N0ciAic2zDpSBhdiBhbGxhIHV0ZGF0YSBmcsOlbiBwcm9ncmFtbWV0IgorCisjOiBkaWZmLmM6NTQ3MAorbXNnaWQgImFsbG93IGFuIGV4dGVybmFsIGRpZmYgaGVscGVyIHRvIGJlIGV4ZWN1dGVkIgorbXNnc3RyICJ0aWxsw6V0IGvDtnJhIGVuIGV4dGVybiBkaWZmLWhqw6RscGFyZSIKKworIzogZGlmZi5jOjU0NzIKK21zZ2lkICJydW4gZXh0ZXJuYWwgdGV4dCBjb252ZXJzaW9uIGZpbHRlcnMgd2hlbiBjb21wYXJpbmcgYmluYXJ5IGZpbGVzIgorbXNnc3RyICJrw7ZyIGV4dGVybnQgdGV4dGtvbnZlcnRlcmluZ3NmaWxlciBuw6RyIGJpbsOkcmZpbGVyIGrDpG1mw7ZycyIKKworIzogZGlmZi5jOjU0NzQKK21zZ2lkICI8d2hlbj4iCittc2dzdHIgIjxuw6RyPiIKKworIzogZGlmZi5jOjU0NzUKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzIGluIHRoZSBkaWZmIGdlbmVyYXRpb24iCittc2dzdHIgImlnbm9yZXJhIMOkbmRyaW5nYXIgaSB1bmRlcm1vZHVsZXIgbsOkciBkaWZmZW4gc2thcGFzIgorCisjOiBkaWZmLmM6NTQ3OAorbXNnaWQgIjxmb3JtYXQ+IgorbXNnc3RyICI8Zm9ybWF0PiIKKworIzogZGlmZi5jOjU0NzkKK21zZ2lkICJzcGVjaWZ5IGhvdyBkaWZmZXJlbmNlcyBpbiBzdWJtb2R1bGVzIGFyZSBzaG93biIKK21zZ3N0ciAiYW5nZSBodXIgw6RuZHJpbmdhciBpIHVuZGVybW9kdWxlciB2aXNhcyIKKworIzogZGlmZi5jOjU0ODMKK21zZ2lkICJoaWRlICdnaXQgYWRkIC1OJyBlbnRyaWVzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJkw7ZsaiBcImdpdCBhZGQgLU5cIi1wb3N0ZXIgZnLDpW4gaW5kZXhldCIKKworIzogZGlmZi5jOjU0ODYKK21zZ2lkICJ0cmVhdCAnZ2l0IGFkZCAtTicgZW50cmllcyBhcyByZWFsIGluIHRoZSBpbmRleCIKK21zZ3N0ciAidG9sa2EgXCJnaXQgYWRkIC1OXCItcG9zdGVyIHNvbSDDpGt0YSBpIGluZGV4ZXQiCisKKyM6IGRpZmYuYzo1NDg4Cittc2dpZCAiPHN0cmluZz4iCittc2dzdHIgIjxzdHLDpG5nPiIKKworIzogZGlmZi5jOjU0ODkKIG1zZ2lkICIiCi0iQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCi0iXG4iCi0iWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKLSJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgotImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCi1tc2dzdHIgIiIKLSJLYW4gaW50ZSB1dMO2a2EgdmlkIHNhbW1hbnNsYWduaW5nLlxuIgotIlxuIgotIkR1IMOkciBpIG1pdHRlbiBhdiBlbiBzYW1tYW5zbGFnbmluZyBzb20gaW50ZSDDpHIgZnVsbGJvcmRhZC4gRHUga2FuIGludGUgIgotInV0w7ZrYSB0aWRpZ2FyZSBpbmNoZWNrbmluZ2FyIG9tIGR1IGludGUgZsO2cnN0IGF2YnJ5dGVyIGRlbiBww6Vnw6VlbmRlICIKLSJzYW1tYW5zbGFnbmluZ2VuLlxuIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisic3RyaW5nIgorbXNnc3RyICJzZSBlZnRlciDDpG5kcmluZ2FyIHNvbSDDpG5kcmFyIGFudGFsZXQgZsO2cmVrb21zdGVyIGF2IGFuZ2l2ZW4gc3Ryw6RuZyIKIAotIzogbGliL2NvbW1pdC50Y2w6NDgKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCi1tc2dzdHIgIkZlbCB2aWQgaW5sw6RzbmluZyBhdiBpbmNoZWNrbmluZ3NkYXRhIGbDtnIgdXTDtmtuaW5nOiIKLQotIzogbGliL2NvbW1pdC50Y2w6NzUKLW1zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgotbXNnc3RyICJLdW5kZSBpbnRlIGjDpG10YSBkaW4gaWRlbnRpdGV0OiIKLQotIzogbGliL2NvbW1pdC50Y2w6ODAKLW1zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgotbXNnc3RyICJGZWxha3RpZyBHSVRfQ09NTUlUVEVSX0lERU5UOiIKLQotIzogbGliL2NvbW1pdC50Y2w6MTI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCi1tc2dzdHIgInZhcm5pbmc6IFRjbCBzdMO2ZGVyIGludGUgdGVja2Vua29kbmluZ2VuIFwiJXNcIi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjE0OQorIzogZGlmZi5jOjU0OTIKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisicmVnZXgiCiBtc2dzdHIgIiIKLSJEZXQgc2VuYXN0ZSBpbmzDpHN0YSB0aWxsc3TDpW5kZXQgbW90c3ZhcmFyIGludGUgdGlsbHN0w6VuZGV0IGkgYXJraXZldC5cbiIKLSJcbiIKLSJFdHQgYW5uYXQgR2l0LXByb2dyYW0gaGFyIMOkbmRyYXQgYXJraXZldCBzZWRhbiBzZW5hc3RlIGF2c8O2a25pbmdlbi4gRHUgbcOlc3RlICIKLSJ1dGbDtnJhIGVuIG55IHPDtmtuaW5nIGlubmFuIGR1IGthbiBnw7ZyYSBlbiBueSBpbmNoZWNrbmluZy5cbiIKLSJcbiIKLSJTw7ZrbmluZ2VuIGtvbW1lciBhdHQgc3RhcnRhcyBhdXRvbWF0aXNrdCBudS5cbiIKKyJzZSBlZnRlciDDpG5kcmluZ2FyIHNvbSDDpG5kcmFyIGFudGFsZXQgZsO2cmVrb21zdGVyIGF2IGFuZ2l2ZXQgcmVndWxqw6RydCAiCisidXR0cnljayIKIAotIzogbGliL2NvbW1pdC50Y2w6MTczCi0jLCB0Y2wtZm9ybWF0CisjOiBkaWZmLmM6NTQ5NQorbXNnaWQgInNob3cgYWxsIGNoYW5nZXMgaW4gdGhlIGNoYW5nZXNldCB3aXRoIC1TIG9yIC1HIgorbXNnc3RyICJ2aXNhIGFsbGEgw6RuZHJpbmdhciBpIMOkbmRyaW5nc3VwcHPDpHR0bmluZ2VuIG1lZCAtUyBlbGxlciAtRyIKKworIzogZGlmZi5jOjU0OTgKK21zZ2lkICJ0cmVhdCA8c3RyaW5nPiBpbiAtUyBhcyBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgInRvbGthIDxzdHLDpG5nPiBpIC1TIHNvbSB1dMO2a2FkZSBQT1NJWC1yZWd1bGrDpHJhIHV0dHJ5Y2siCisKKyM6IGRpZmYuYzo1NTAxCittc2dpZCAiY29udHJvbCB0aGUgb3JkZXIgaW4gd2hpY2ggZmlsZXMgYXBwZWFyIGluIHRoZSBvdXRwdXQiCittc2dzdHIgInN0eXIgb3JkbmluZ2VuIGkgdmlsa2VuIGZpbGVyIHZpc2FzIGkgdXRkYXRhIgorCisjOiBkaWZmLmM6NTUwMgorbXNnaWQgIjxvYmplY3QtaWQ+IgorbXNnc3RyICI8b2JqZWt0LWlkPiIKKworIzogZGlmZi5jOjU1MDMKIG1zZ2lkICIiCi0iVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKLSJcbiIKLSJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIHN0YWdlIHRoZSBmaWxlICIKLSJiZWZvcmUgY29tbWl0dGluZy5cbiIKLW1zZ3N0ciAiIgotIk9zYW1tYW5zbGFnbmEgZmlsZXIga2FuIGludGUgY2hlY2thcyBpbi5cbiIKLSJcbiIKLSJGaWxlbiAlcyBoYXIgc2FtbWFuc2xhZ25pbmdza29uZmxpa3Rlci4gRHUgbcOlc3RlIGzDtnNhIGRlbSBvY2gga8O2YSBmaWxlbiAiCi0iaW5uYW4gZHUgY2hlY2thciBpbiBkZW4uXG4iCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJvYmplY3QiCittc2dzdHIgInNlIGVmdGVyIMOkbmRyaW5nYXIgc29tIMOkbmRyYXIgYW50YWxldCBmw7ZyZWtvbXN0ZXIgYXYgYW5naXZldCBvYmpla3QiCiAKLSM6IGxpYi9jb21taXQudGNsOjE4MQotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjU1MDUKK21zZ2lkICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCittc2dzdHIgIlsoQXxDfER8TXxSfFR8VXxYfEIpLi4uWypdXSIKKworIzogZGlmZi5jOjU1MDYKK21zZ2lkICJzZWxlY3QgZmlsZXMgYnkgZGlmZiB0eXBlIgorbXNnc3RyICJ2w6RsaiBmaWx0ZXIgZWZ0ZXIgZGlmZi10eXAiCisKKyM6IGRpZmYuYzo1NTA4Cittc2dpZCAiPGZpbGU+IgorbXNnc3RyICI8ZmlsPiIKKworIzogZGlmZi5jOjU1MDkKK21zZ2lkICJPdXRwdXQgdG8gYSBzcGVjaWZpYyBmaWxlIgorbXNnc3RyICJTa3JpdiB1dGRhdGEgdGlsbCBlbiBzcGVjaWZpayBmaWwiCisKKyM6IGRpZmYuYzo2MTY0Cittc2dpZCAiaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIHdhcyBza2lwcGVkIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgIiIKKyJvbsO2amFrdGlnIG5hbW5ieXRlc2RldGVrdGVyaW5nIHV0ZsO2cmRlcyBpbnRlIHDDpSBncnVuZCBhdiBmw7ZyIG3DpW5nYSBmaWxlci4iCisKKyM6IGRpZmYuYzo2MTY3Cittc2dpZCAib25seSBmb3VuZCBjb3BpZXMgZnJvbSBtb2RpZmllZCBwYXRocyBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICJoaXR0YWRlIGJhcmEga29waW9yIGZyw6VuIMOkbmRyYWRlIHPDtmt2w6RnYXIgcMOlIGdydW5kIGF2IGbDtnIgbcOlbmdhIGZpbGVyLiIKKworIzogZGlmZi5jOjYxNzAKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKLSJcbiIKLSJGaWxlICVzIGNhbm5vdCBiZSBjb21taXR0ZWQgYnkgdGhpcyBwcm9ncmFtLlxuIgorInlvdSBtYXkgd2FudCB0byBzZXQgeW91ciAlcyB2YXJpYWJsZSB0byBhdCBsZWFzdCAlZCBhbmQgcmV0cnkgdGhlIGNvbW1hbmQuIgogbXNnc3RyICIiCi0iT2vDpG5kIGZpbHN0YXR1cyAlcyB1cHB0w6Rja3QuXG4iCi0iXG4iCi0iRmlsZW4gJXMga2FuIGludGUgY2hlY2thcyBpbiBhdiBwcm9ncmFtbWV0LlxuIgorImR1IGthbiBzw6R0dGEgdmFyaWFiZWxuICVzIHRpbGwgw6V0bWluc3RvbmUgJWQgb2NoIGbDtnJzw7ZrYSBrb21tYW5kb3QgcMOlIG55dHQuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODkKKyM6IGRpci5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGUocykga25vd24gdG8gZ2l0IgorbXNnc3RyICJzw7ZrdsOkZ3NhbmdpdmVsc2VuIFwiJXNcIiBtb3RzdmFyYWRlIGludGUgbsOlZ3JhIGF2IGdpdCBrw6RuZGEgZmlsZXIiCisKKyM6IGRpci5jOjY5NSBkaXIuYzo3MjQgZGlyLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICJva8OkbnQgbcO2bnN0ZXI6ICVzIgorCisjOiBkaXIuYzo3NTQgZGlyLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICJva8OkbnQgbmVnYXRpdnQgbcO2bnN0ZXI6ICVzIgorCisjOiBkaXIuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgaGF2ZSBpc3N1ZXM6IHBhdHRlcm4gJyVzJyBpcyByZXBlYXRlZCIKK21zZ3N0ciAiIgorImRpbiBcInNwYXJzZS1jaGVja291dFwiLWZpbCBrYW4gaGEgcHJvYmxlbTogbcO2bnN0cmV0IFwiJXNcIiBmw7ZyZWtvbW1lciBmbGVyYSAiCisiZ8OlbmdlciIKKworIzogZGlyLmM6Nzk2Cittc2dpZCAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIKK21zZ3N0ciAiaW5ha3RpdmVyYXIga29ubcO2bnN0ZXJtYXRjaG5pbmciCisKKyM6IGRpci5jOjExNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiCittc2dzdHIgImthbiBpbnRlIGFudsOkbmRhICVzIHNvbSBleGtsdWRlcmluZ3NmaWwiCisKKyM6IGRpci5jOjIxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gZGlyZWN0b3J5ICclcyciCittc2dzdHIgImt1bmRlIGludGUgw7ZwcG5hIGthdGFsb2dlbiBcIiVzXCIiCisKKyM6IGRpci5jOjI0NzkKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IGtlcm5lbCBuYW1lIGFuZCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGjDpG10YSBrw6RybmFucyBuYW1uIG9jaCBpbmZvcm1hdGlvbiIKKworIzogZGlyLmM6MjYwMworbXNnaWQgInVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbSBvciBsb2NhdGlvbiIKK21zZ3N0ciAib3Nww6VyYWQgY2FjaGUgw6RyIGluYWt0aXZlcmFkIHDDpSBzeXN0ZW1ldCBlbGxlciBwbGF0c2VuIgorCisjOiBkaXIuYzozNDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCBpbiByZXBvICVzIgorbXNnc3RyICJpbmRleGZpbGVuIHRyYXNpZyBpIGFya2l2ZXQgJXMiCisKKyM6IGRpci5jOjM0NTIgZGlyLmM6MzQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBrYXRhbG9nZXIgZsO2ciAlcyIKKworIzogZGlyLmM6MzQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbWlncmF0ZSBnaXQgZGlyZWN0b3J5IGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIG1pZ3JlcmEgZ2l0LWthdGFsb2cgZnLDpW4gXCIlc1wiIHRpbGwgXCIlc1wiIgorCisjOiBlZGl0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiBXYWl0aW5nIGZvciB5b3VyIGVkaXRvciB0byBjbG9zZSB0aGUgZmlsZS4uLiVjIgorbXNnc3RyICJ0aXBzOiBWw6RudGFyIHDDpSBhdHQgdGV4dHJlZGlnZXJpbmdzcHJvZ3JhbW1ldCBza2Egc3TDpG5nYSBmaWxlbi4uLiVjIgorCisjOiBlbnRyeS5jOjE3OAorbXNnaWQgIkZpbHRlcmluZyBjb250ZW50IgorbXNnc3RyICJGaWx0cmVyYXIgaW5uZWjDpWxsIgorCisjOiBlbnRyeS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCBmaWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUgdGEgc3RhdHVzIHDDpSBmaWxlbiBcIiVzXCIiCisKKyM6IGVudmlyb25tZW50LmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaXQgbmFtZXNwYWNlIHBhdGggXCIlc1wiIgorbXNnc3RyICJmZWxha3RpZyBnaXQtbmFtbnJ5bWRzc8O2a3bDpGcgXCIlc1wiIgorCisjOiBlbnZpcm9ubWVudC5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0IEdJVF9ESVIgdG8gJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzdMOkbGxhIGluIEdJVF9ESVIgdGlsbCBcIiVzXCIiCisKKyM6IGV4ZWMtY21kLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3MgdG8gcnVuICVzIgorbXNnc3RyICJmw7ZyIG3DpW5nYSBmbGFnZ29yIGbDtnIgYXR0IGvDtnJhICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTUwCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IGbDtnJ2w6RudGFkZSBncnVuZCBsaXN0YSIKKworIzogZmV0Y2gtcGFjay5jOjE1MworbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBhIGZsdXNoIHBhY2tldCBhZnRlciBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBmw7ZydsOkbnRhZGUgZXR0IGZsdXNoLXBha2V0IGVmdGVyIGdydW5kIGxpc3RhIgorCisjOiBmZXRjaC1wYWNrLmM6MTY0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IGbDtnJ2w6RudGFkZSBBQ0svTkFLLCBmaWNrIGZsdXNoLXBha2V0IgorCisjOiBmZXRjaC1wYWNrLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgJyVzJyIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IGbDtnJ2w6RudGFkZSBBQ0svTkFLLCBmaWNrIFwiJXNcIiIKKworIzogZmV0Y2gtcGFjay5jOjE5NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0byByZW1vdGUiCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIHRpbGwgZmrDpHJyZW4iCisKKyM6IGZldGNoLXBhY2suYzoyNTcKK21zZ2lkICItLXN0YXRlbGVzcy1ycGMgcmVxdWlyZXMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICItLXN0YXRlbGVzcy1ycGMga3LDpHZlciBcIm11bHRpX2Fja19kZXRhaWxlZFwiIgorCisjOiBmZXRjaC1wYWNrLmM6MzU2IGZldGNoLXBhY2suYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAib2dpbHRpZyBcInNoYWxsb3dcIi1yYWQ6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzYyIGZldGNoLXBhY2suYzoxMzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdW5zaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICJvZ2lsdGlnIFwidW5zaGFsbG93XCItcmFkOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NCBmZXRjaC1wYWNrLmM6MTM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3Qgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAib2JqZWt0ZXQgaGl0dGFkZXMgaW50ZTogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjcgZmV0Y2gtcGFjay5jOjEzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gb2JqZWN0OiAlcyIKK21zZ3N0ciAiZmVsIGkgb2JqZWt0OiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2OSBmZXRjaC1wYWNrLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaGFsbG93IGZvdW5kOiAlcyIKK21zZ3N0ciAiaW5nZW4gXCJzaGFsbG93XCIgaGl0dGFkZXM6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzcyIGZldGNoLXBhY2suYzoxMzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHNoYWxsb3cvdW5zaGFsbG93LCBnb3QgJXMiCittc2dzdHIgImbDtnJ2w6RudGFkZSBzaGFsbG93L3Vuc2hhbGxvdywgZmljayAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgJWQgJXMiCittc2dzdHIgImZpY2sgJXMgJWQgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgJXMiCittc2dzdHIgIm9naWx0aWcgaW5jaGVja25pbmcgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0NjIKK21zZ2lkICJnaXZpbmcgdXAiCittc2dzdHIgImdlciB1cHAiCisKKyM6IGZldGNoLXBhY2suYzo0NzUgcHJvZ3Jlc3MuYzozMjMKK21zZ2lkICJkb25lIgorbXNnc3RyICJrbGFydCIKKworIzogZmV0Y2gtcGFjay5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgKCVkKSAlcyIKK21zZ3N0ciAiZmljayAlcyAoJWQpICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgJXMgYXMgY29tcGxldGUiCittc2dzdHIgIk1hcmtlcmFyICVzIHNvbSBrb21wbGV0dCIKKworIzogZmV0Y2gtcGFjay5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJhbHJlYWR5IGhhdmUgJXMgKCVzKSIKK21zZ3N0ciAiaGFyIHJlZGFuICVzICglcykiCisKKyM6IGZldGNoLXBhY2suYzo4MTgKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiZmV0Y2gtcGF0Y2g6IGt1bmRlIGludGUgZ3JlbmEgYXYgc2lkYmFuZHNtdWx0aXBsZXhhcmUiCisKKyM6IGZldGNoLXBhY2suYzo4MjYKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIHBhY2sgaGVhZGVyIgorbXNnc3RyICJwcm90b2tvbGxmZWw6IGZlbGFrdGlndCBwYWNraHV2dWQiCisKKyM6IGZldGNoLXBhY2suYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIgorbXNnc3RyICJmZXRjaC1wYXRjaDoga3VuZGUgaW50ZSBncmVuYSBhdiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBmYWlsZWQiCittc2dzdHIgIiVzIG1pc3NseWNrYWRlcyIKKworIzogZmV0Y2gtcGFjay5jOjkxOAorbXNnaWQgImVycm9yIGluIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgImZlbCBpIHNpZGJhbmRzLWF2bXVsdGlwbGV4YXJlIgorCisjOiBmZXRjaC1wYWNrLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uIGlzICUuKnMiCittc2dzdHIgIlNlcnZlcnZlcnNpb25lbiDDpHIgJS4qcyIKKworIzogZmV0Y2gtcGFjay5jOjk3MCBmZXRjaC1wYWNrLmM6OTc2IGZldGNoLXBhY2suYzo5NzkgZmV0Y2gtcGFjay5jOjk4NQorIzogZmV0Y2gtcGFjay5jOjk4OSBmZXRjaC1wYWNrLmM6OTkzIGZldGNoLXBhY2suYzo5OTcgZmV0Y2gtcGFjay5jOjEwMDEKKyM6IGZldGNoLXBhY2suYzoxMDA1IGZldGNoLXBhY2suYzoxMDA5IGZldGNoLXBhY2suYzoxMDEzIGZldGNoLXBhY2suYzoxMDE3CisjOiBmZXRjaC1wYWNrLmM6MTAyMyBmZXRjaC1wYWNrLmM6MTAyOSBmZXRjaC1wYWNrLmM6MTAzNCBmZXRjaC1wYWNrLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgJXMiCittc2dzdHIgIlNlcnZlcm4gc3TDtmRlciAlcyIKKworIzogZmV0Y2gtcGFjay5jOjk3MgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2xpZW50cyIKK21zZ3N0ciAiU2VydmVybiBzdMO2ZGVyIGludGUga2xpZW50ZXIgbWVkIGdydW5kYSBhcmtpdiIKKworIzogZmV0Y2gtcGFjay5jOjEwMzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctc2luY2UiCittc2dzdHIgIlNlcnZlcm4gc3TDtmRlciBpbnRlIC0tc2hhbGxvdy1zaW5jZSIKKworIzogZmV0Y2gtcGFjay5jOjEwMzcKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIKK21zZ3N0ciAiU2VydmVybiBzdMO2ZGVyIGludGUgLS1zaGFsbG93LWV4Y2x1ZGUiCisKKyM6IGZldGNoLXBhY2suYzoxMDQxCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1kZWVwZW4iCittc2dzdHIgIlNlcnZlcm4gc3TDtmRlciBpbnRlIC0tZGVlcGVuIgorCisjOiBmZXRjaC1wYWNrLmM6MTA1OAorbXNnaWQgIm5vIGNvbW1vbiBjb21taXRzIgorbXNnc3RyICJpbmdhIGdlbWVuc2FtbWEgaW5jaGVja25pbmdhciIKKworIzogZmV0Y2gtcGFjay5jOjEwNzAgZmV0Y2gtcGFjay5jOjE1MzYKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhdGNoOiBow6RtdG5pbmcgbWlzc2x5Y2thZGVzLiIKKworIzogZmV0Y2gtcGFjay5jOjEyMDkKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IHJlcXVlc3RzIgorbXNnc3RyICJTZXJ2ZXJuIHN0w7ZkZXIgaW50ZSBncnVuZGEgZsO2cmZyw6VnbmluZ2FyIgorCisjOiBmZXRjaC1wYWNrLmM6MTIxNgorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBmaWx0ZXIiCittc2dzdHIgIlNlcnZlcm4gc3TDtmRlciBmaWx0ZXIiCisKKyM6IGZldGNoLXBhY2suYzoxMjM5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcXVlc3QgdG8gcmVtb3RlIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSBhbnJvcCB0aWxsIGZqw6RycmVuIgorCisjOiBmZXRjaC1wYWNrLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIHNlY3Rpb24gaGVhZGVyICclcyciCittc2dzdHIgImZlbCB2aWQgbMOkc25pbmcgYXYgc3R5Y2tlaHV2dWRldCBcIiVzXCIiCisKKyM6IGZldGNoLXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciCittc2dzdHIgImbDtnJ2w6RudGFkZSBcIiVzXCIsIHRvZyBlbW90IFwiJXNcIiIKKworIzogZmV0Y2gtcGFjay5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBhY2tub3dsZWRnbWVudCBsaW5lOiAnJXMnIgorbXNnc3RyICJmw7ZydsOkbnRhZGUgYmVrcsOkZnRlbHNlcmFkOiBcIiVzXCIiCisKKyM6IGZldGNoLXBhY2suYzoxMzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgYWNrczogJWQiCittc2dzdHIgImZlbCB2aWQgaGFudGVyaW5nIGF2IGJla3LDpGZ0ZWxzZXI6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTMxOAorbXNnaWQgImV4cGVjdGVkIHBhY2tmaWxlIHRvIGJlIHNlbnQgYWZ0ZXIgJ3JlYWR5JyIKK21zZ3N0ciAidsOkbnRhZGUgYXR0IHBha2V0ZmlsIHNrdWxsZSBzw6RuZGFzIGVmdGVyIFwicmVhZHlcIiIKKworIzogZmV0Y2gtcGFjay5jOjEzMjAKK21zZ2lkICJleHBlY3RlZCBubyBvdGhlciBzZWN0aW9ucyB0byBiZSBzZW50IGFmdGVyIG5vICdyZWFkeSciCittc2dzdHIgIiIKKyJ2w6RudGFkZSBpbnRlIGF0dCBuw6VncmEgeXR0ZXJsaWdhcmUgc2VrdGlvbmVyIHNrdWxsZSBzw6RuZGFzIGVmdGVyIFwicmVhZHlcIiIKKworIzogZmV0Y2gtcGFjay5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBzaGFsbG93IGluZm86ICVkIgorbXNnc3RyICJmZWwgdmlkIGhhbnRlcmluZyBhdiBncnVuZCAoXCJzaGFsbG93XCIpIGluZm86ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCB3YW50ZWQtcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAiZsO2cnbDpG50YWRlIHdhbnRlZC1yZWYsIGZpY2sgJXMiCisKKyM6IGZldGNoLXBhY2suYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgd2FudGVkLXJlZjogJyVzJyIKK21zZ3N0ciAib3bDpG50YWQgd2FudGVkLXJlZjogXCIlc1wiIgorCisjOiBmZXRjaC1wYWNrLmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHdhbnRlZCByZWZzOiAlZCIKK21zZ3N0ciAiZmVsIHZpZCBoYW50ZXJpbmcgYXYgw7Zuc2thZGUgcmVmZXJlbnNlcjogJWQiCisKKyM6IGZldGNoLXBhY2suYzoxNzYyCittc2dpZCAibm8gbWF0Y2hpbmcgcmVtb3RlIGhlYWQiCittc2dzdHIgImluZ2V0IG1vdHN2YXJhbmRlIGZqw6Rycmh1dnVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTc4NSBidWlsdGluL2Nsb25lLmM6Njg5Cittc2dpZCAicmVtb3RlIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHMiCittc2dzdHIgImZqw6RycmVuIHPDpG5kZSBpbnRlIGFsbGEgbsO2ZHbDpG5kaWdhIG9iamVrdCIKKworIzogZmV0Y2gtcGFjay5jOjE4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZW1vdGUgcmVmICVzIgorbXNnc3RyICJpbmdlbiBzw6VkYW4gZmrDpHJyZWZlcmVuczogJXMiCisKKyM6IGZldGNoLXBhY2suYzoxODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICJTZXJ2ZXJuIHRpbGzDpXRlciBpbnRlIGbDtnJmcsOlZ2FuIG9tIGVqIHRpbGxrw6RubmFnaXZldCBvYmpla3QgJXMiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzo0MDgKK21zZ2lkICJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiCittc2dzdHIgImdwZyBtaXNzbHlja2FkZXMgc2lnbmVyYSBkYXRhIgorCisjOiBncGctaW50ZXJmYWNlLmM6NDM0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSB0ZW1wb3LDpHJhIGZpbCIKKworIzogZ3BnLWludGVyZmFjZS5jOjQzNworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrcml2YSBmcmlzdMOlZW5kZSBzaWduYXR1ciB0aWxsIFwiJXNcIiIKKworIzogZ3JhcGguYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmUgaW52YWxpZCBjb2xvciAnJS4qcycgaW4gbG9nLmdyYXBoQ29sb3JzIgorbXNnc3RyICJpZ25vcmVyYSBmZWxha3RpZyBmw6RyZyBcIiUuKnNcIiBpIGxvZy5ncmFwaENvbG9ycyIKKworIzogZ3JlcC5jOjY2OAogbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorImdpdmVuIHBhdHRlcm4gY29udGFpbnMgTlVMTCBieXRlICh2aWEgLWYgPGZpbGU+KS4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCAiCisid2l0aCAtUCB1bmRlciBQQ1JFIHYyIgogbXNnc3RyICIiCi0iSW5nYSDDpG5kcmluZ2FyIGF0dCBjaGVja2EgaW4uXG4iCi0iXG4iCi0iRHUgbcOlc3RlIGvDtmEgw6V0bWluc3RvbmUgZW4gZmlsIGlubmFuIGR1IGthbiBjaGVja2EgaW4uXG4iCisiYW5naXZldCBtw7Zuc3RlciBpbm5laMOlbGxlciBOVUxMLWJ5dGUgKHZpYSAtZiA8ZmlsPikuIERldHRhIHN0w7ZkcyBlbmRhc3QgbWVkIC0iCisiUCB1bmRlciBQQ1JFIHYyIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMDQKKyM6IGdyZXAuYzoyMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICJcIiVzXCIga3VuZGUgaW50ZSBsw6RzYSAlcyIKKworIzogZ3JlcC5jOjIxNDUgc2V0dXAuYzoxNjYgYnVpbHRpbi9jbG9uZS5jOjQxMSBidWlsdGluL2RpZmYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgc3RhdHVzIHDDpSBcIiVzXCIiCisKKyM6IGdyZXAuYzoyMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQiCittc2dzdHIgIlwiJXNcIjoga29ydCBsw6RzbmluZyIKKworIzogaGVscC5jOjIzCittc2dpZCAic3RhcnQgYSB3b3JraW5nIGFyZWEgKHNlZSBhbHNvOiBnaXQgaGVscCB0dXRvcmlhbCkiCittc2dzdHIgInN0YXJ0YSBhcmJldHNrYXRhbG9nIChzZSBvY2tzw6U6IGdpdCBoZWxwIHR1dG9yaWFsKSIKKworIzogaGVscC5jOjI0Cittc2dpZCAid29yayBvbiB0aGUgY3VycmVudCBjaGFuZ2UgKHNlZSBhbHNvOiBnaXQgaGVscCBldmVyeWRheSkiCittc2dzdHIgImpvYmJhIG1lZCBha3R1ZWxsIGbDtnLDpG5kcmluZyAoc2Ugb2Nrc8OlOiBnaXQgaGVscCBldmVyeWRheSkiCisKKyM6IGhlbHAuYzoyNQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAidXRmb3Jza2EgaGlzdG9yaWtlbiBvY2ggdGlsbHN0w6VuZGV0IChzZSBvY2tzw6U6IGdpdCBoZWxwIHJldmlzaW9ucykiCisKKyM6IGhlbHAuYzoyNgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgInV0w7ZrYSwgbWFya2VyYSBvY2gganVzdGVyYSBkaW4gZ2VtZW5zYW1tYSBoaXN0b3JpayIKKworIzogaGVscC5jOjI3Cittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICJzYW1hcmJldGEgKHNlIG9ja3PDpTogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKKworIzogaGVscC5jOjMxCittc2dpZCAiTWFpbiBQb3JjZWxhaW4gQ29tbWFuZHMiCittc2dzdHIgIkh1dnVkc2FrbGlnYSBwb3JzbGluc2tvbW1hbmRvbiIKKworIzogaGVscC5jOjMyCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICJUaWxsw6RnZ3Nrb21tYW5kb24gLyBtYW5pcHVsZXJhcmUiCisKKyM6IGhlbHAuYzozMworbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIlRpbGzDpGdnc2tvbW1hbmRvbiAvIGZyw6VnYXJlIgorCisjOiBoZWxwLmM6MzQKK21zZ2lkICJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIKK21zZ3N0ciAiSW50ZXJha3Rpb24gbWVkIGFuZHJhIgorCisjOiBoZWxwLmM6MzUKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIkzDpWduaXbDpWtvbW1hbmRvbiAvIG1hbml1cHVsZXJhcmUiCisKKyM6IGhlbHAuYzozNgorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIkzDpWduaXbDpWtvbW1hbmRvbiAvIGZyw6VnYXJlIgorCisjOiBoZWxwLmM6MzcKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBTeW5jaW5nIFJlcG9zaXRvcmllcyIKK21zZ3N0ciAiTMOlZ25pdsOla29tbWFuZG9uIC8gc3lua2EgYXJraXYiCisKKyM6IGhlbHAuYzozOAorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVybmFsIEhlbHBlcnMiCittc2dzdHIgIkzDpWduaXbDpWtvbW1hbmRvbiAvIGludGVybmEgaGrDpGxwYXJlIgorCisjOiBoZWxwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiZ2l0LWtvbW1hbmRvbiB0aWxsZ8OkbmdsaWdhIGkgXCIlc1wiIgorCisjOiBoZWxwLmM6MzA1Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICJnaXQta29tbWFuZG9uIGZyw6VuIGFuZHJhIHBsYXRzZXIgaSBkaW4gJFBBVEgiCisKKyM6IGhlbHAuYzozMTQKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIkRlc3NhIHZhbmxpZ2EgR2l0LWtvbW1hbmRvbiBhbnbDpG5kcyBpIG9saWthIHNpdHVhdGlvbmVyOiIKKworIzogaGVscC5jOjM2MyBnaXQuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBjb21tYW5kIGxpc3RpbmcgdHlwZSAnJXMnIgorbXNnc3RyICJva8OkbmQga29tbWFuZG9saXN0dHlwIFwiJXNcIiIKKworIzogaGVscC5jOjQwMworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6IgorbXNnc3RyICJEZSB2YW5saWdhIEdpdC12w6RnbGVkbmluZ2FybmEgw6RyOiIKKworIzogaGVscC5jOjUxMgorbXNnaWQgIlNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyB0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCIKK21zZ3N0ciAiU2UgXCJnaXQgaGVscCA8a29tbWFuZG8+XCIgZsO2ciBhdHQgbMOkc2Egb20gZXR0IHNwZWNpZmlrdCB1bmRlcmtvbW1hbmRvIgorCisjOiBoZWxwLmM6NTE3Cittc2dpZCAiRXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIkV4dGVybmEga29tbWFuZG9uIgorCisjOiBoZWxwLmM6NTMyCittc2dpZCAiQ29tbWFuZCBhbGlhc2VzIgorbXNnc3RyICJLb21tYWRvYWxpYXMiCisKKyM6IGhlbHAuYzo1OTYKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKLSJcbiIKLSJBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuIgotIlxuIgotIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKLSItIFNlY29uZCBsaW5lOiBCbGFua1xuIgotIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKKyInJXMnIGFwcGVhcnMgdG8gYmUgYSBnaXQgY29tbWFuZCwgYnV0IHdlIHdlcmUgbm90XG4iCisiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIKIG1zZ3N0ciAiIgotIkFuZ2UgZXR0IGluY2hlY2tuaW5nc21lZGRlbGFuZGUuXG4iCi0iXG4iCi0iRXR0IGJyYSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIGhhciBmw7ZsamFuZGUgZm9ybWF0OlxuIgotIlxuIgotIi0gRsO2cnN0YSByYWRlbjogQmVza3JpdiBpIGVuIG1lbmluZyB2YWQgZHUgZ2pvcmRlLlxuIgotIi0gQW5kcmEgcmFkZW46IFRvbVxuIgotIi0gRsO2bGphbmRlIHJhZGVyOiBCZXNrcml2IHZhcmbDtnIgZGV0IGjDpHIgw6RyIGVuIGJyYSDDpG5kcmluZy5cbiIKKyJcIiVzXCIgdmVya2FyIHZhcmEgZXR0IGdpdC1rb21tYW5kbywgbWVuIHZpIGthbiBpbnRlXG4iCisia8O2cmEgZGV0LiBLYW5za2UgZ2l0LSVzIMOkciB0cmFzaWd0PyIKIAotIzogbGliL2NvbW1pdC50Y2w6MjM1Ci1tc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCi1tc2dzdHIgIkFucm9wYXIga3Jva2VuIGbDtnJlIGluY2hlY2tuaW5nIChwcmUtY29tbWl0KS4uLiIKKyM6IGhlbHAuYzo2NTUKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAiT2ogZMOlLiBEaXR0IHN5c3RlbSByYXBwb3J0ZXJhciBpbmdhIEdpdC1rb21tYW5kb24gYWxscy4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI1MAotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgotbXNnc3RyICJJbmNoZWNrbmluZ2VuIGF2dmlzYWRlcyBhdiBrcm9rZW4gZsO2cmUgaW5jaGVja25pbmcgKHByZS1jb21taXQpLiIKKyM6IGhlbHAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiVkFSTklORzogRHUgYW5yb3BhZGUgZXR0IEdpdC1rb21tYW5kbyB2aWQgbmFtbiBcIiVzXCIsIHNvbSBpbnRlIGZpbm5zLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MjY5CisjOiBoZWxwLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgIkZvcnRzw6R0dGVyIHVuZGVyIGbDtnJ1dHPDpHR0bmluZ2VuIGF0dCBkdSBtZW5hZGUgXCIlc1wiLiIKKworIzogaGVscC5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIGluICUwLjFmIHNlY29uZHMsIGFzc3VtaW5nIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICIiCisiRm9ydHPDpHR0ZXIgb20gJTAuMWYgc2VrdW5kZXIsIHVuZGVyIGbDtnJ1dHPDpHR0bmluZ2VuIGF0dCBkdSBtZW5hZGUgXCIlc1wiLiIKKworIzogaGVscC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6IFwiJXNcIiDDpHIgaW50ZSBldHQgZ2l0LWtvbW1hbmRvLiBTZSBcImdpdCAtLWhlbHBcIi4iCisKKyM6IGhlbHAuYzo2OTkKIG1zZ2lkICIiCi0iWW91IGFyZSBhYm91dCB0byBjb21taXQgb24gYSBkZXRhY2hlZCBoZWFkLiBUaGlzIGlzIGEgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzICIKLSJ0aGluZyB0byBkbyBiZWNhdXNlIGlmIHlvdSBzd2l0Y2ggdG8gYW5vdGhlciBicmFuY2ggeW91IHdpbGwgbG9zZSB5b3VyICIKLSJjaGFuZ2VzIGFuZCBpdCBjYW4gYmUgZGlmZmljdWx0IHRvIHJldHJpZXZlIHRoZW0gbGF0ZXIgZnJvbSB0aGUgcmVmbG9nLiBZb3UgIgotInNob3VsZCBwcm9iYWJseSBjYW5jZWwgdGhpcyBjb21taXQgYW5kIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gY29udGludWUuXG4iCi0iIFxuIgotIiBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gcHJvY2VlZCB3aXRoIHlvdXIgQ29tbWl0PyIKLW1zZ3N0ciAiIgotIkR1IMOkciBww6UgdsOkZyBhdHQgY2hlY2thIGluIHDDpSBldHQgZnLDpW5rb3BwbGF0IGh1dnVkLiBEZXQga2FuIHBvdGVudGllbGx0ICIKLSJ2YXJhIGZhcmxpZ3QsIGVmdGVyc29tIGR1IGtvbW1lciBmw7ZybG9yYSBkaW5hIMOkbmRyaW5nYXIgb20gZHUgdsOkeGxhciB0aWxsIGVuICIKLSJhbm5hbiBncmVuIG9jaCBkZXQga2FuIHZhcmEgc3bDpXJ0IGF0dCBow6RtdGEgZGVtIHNlbmFyZSBmcsOlbiByZWYtbG9nZ2VuLiBEdSAiCi0iYsO2ciB0cm9saWdlbiBhdmJyeXRhIGluY2hlY2tuaW5nZW4gb2NoIHNrYXBhIGVuIG55IGdyZW4gZsO2ciBhdHQgZm9ydHPDpHR0YS5cbiIKLSIgXG4iCi0iIFZpbGwgZHUgdmVya2xpZ2VuIGZvcnRzw6R0dGEgY2hlY2thIGluPyIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmRzIGFyZSIKK21zZ3N0clswXSAiIgorIlxuIgorIk1lc3QgbGlrdCBrb21tYW5kbyDDpHIiCittc2dzdHJbMV0gIiIKKyJcbiIKKyJNZXN0IGxpa2Ega29tbWFuZG9uIMOkciIKIAotIzogbGliL2NvbW1pdC50Y2w6MjkwCi1tc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCi1tc2dzdHIgIkFucm9wYXIga3Jva2VuIGbDtnIgaW5jaGVja25pbmdzbWVkZGVsYW5kZSAoY29tbWl0LW1zZykuLi4iCisjOiBoZWxwLmM6NzE0Cittc2dpZCAiZ2l0IHZlcnNpb24gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB2ZXJzaW9uIFs8ZmxhZ2dvcj5dIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMDUKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAiSW5jaGVja25pbmcgYXZ2aXNhZCBhdiBrcm9rZW4gZsO2ciBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIChjb21taXQtbXNnKS4iCisjOiBoZWxwLmM6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIlczogJXMgLSAlcyIKIAotIzogbGliL2NvbW1pdC50Y2w6MzE4Ci1tc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgotbXNnc3RyICJDaGVja2FyIGluIMOkbmRyaW5nYXIuLi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjMzNAotbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAid3JpdGUtdHJlZSBtaXNzbHlja2FkZXM6IgotCi0jOiBsaWIvY29tbWl0LnRjbDozMzUgbGliL2NvbW1pdC50Y2w6Mzc5IGxpYi9jb21taXQudGNsOjQwMAotbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgotbXNnc3RyICJJbmNoZWNrbmluZ2VuIG1pc3NseWNrYWRlcy4iCi0KLSM6IGxpYi9jb21taXQudGNsOjM1MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCi1tc2dzdHIgIkluY2hlY2tuaW5nZW4gJXMgdmVya2FyIHZhcmEgdHJhc2lnIgotCi0jOiBsaWIvY29tbWl0LnRjbDozNTcKKyM6IGhlbHAuYzo3ODcKIG1zZ2lkICIiCi0iTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCiAiXG4iCi0iTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKICJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCi1tc2dzdHIgIiIKLSJJbmdhIMOkbmRyaW5nYXIgYXR0IGNoZWNrYSBpbi5cbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgogIlxuIgotIkluZ2EgZmlsZXIgw6RuZHJhZGVzIGF2IGluY2hlY2tuaW5nZW4gb2NoIGRldCB2YXIgaW50ZSBlbiBzYW1tYW5zbGFnbmluZy5cbiIKKyJNZW5hZGUgZHUgZGV0dGE/IgorbXNnc3RyWzFdICIiCiAiXG4iCi0iRW4gc8O2a25pbmcga29tbWVyIGF0dCBzdGFydGFzIGF1dG9tYXRpc2t0IG51LlxuIgorIk1lbmFkZSBkdSBldHQgYXYgZGVzc2E/IgogCi0jOiBsaWIvY29tbWl0LnRjbDozNjQKLW1zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCi1tc2dzdHIgIkluZ2Egw6RuZHJpbmdhciBhdHQgY2hlY2thIGluLiIKLQotIzogbGliL2NvbW1pdC50Y2w6Mzc4Ci1tc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAiY29tbWl0LXRyZWUgbWlzc2x5Y2thZGVzOiIKLQotIzogbGliL2NvbW1pdC50Y2w6Mzk5Ci1tc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgotbXNnc3RyICJ1cGRhdGUtcmVmIG1pc3NseWNrYWRlczoiCi0KLSM6IGxpYi9jb21taXQudGNsOjQ5MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKLW1zZ3N0ciAiU2thcGFkZSBpbmNoZWNrbmluZ2VuICVzOiAlcyIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE2Ci1tc2dpZCAiRGVsZXRlIEJyYW5jaCIKLW1zZ3N0ciAiVGEgYm9ydCBncmVuIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjEKLW1zZ2lkICJEZWxldGUgTG9jYWwgQnJhbmNoIgotbXNnc3RyICJUYSBib3J0IGxva2FsIGdyZW4iCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozOQotbXNnaWQgIkxvY2FsIEJyYW5jaGVzIgotbXNnc3RyICJMb2thbGEgZ3JlbmFyIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTEKLW1zZ2lkICJEZWxldGUgT25seSBJZiBNZXJnZWQgSW50byIKLW1zZ3N0ciAiVGEgYmFyYSBib3J0IG9tIHNhbW1hbnNsYWdlbiBtZWQiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCi1tc2dzdHIgIkbDtmxqYW5kZSBncmVuYXIgw6RyIGludGUgdGlsbCBmdWxsbyBzYW1tYW5zbGFnbmEgbWVkICVzOiIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE0MQotIywgdGNsLWZvcm1hdAorIzogaWRlbnQuYzozNDkKIG1zZ2lkICIiCi0iRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKLSIlcyIKKyJcbiIKKyIqKiogUGxlYXNlIHRlbGwgbWUgd2hvIHlvdSBhcmUuXG4iCisiXG4iCisiUnVuXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIlxuIgorInRvIHNldCB5b3VyIGFjY291bnQncyBkZWZhdWx0IGlkZW50aXR5LlxuIgorIk9taXQgLS1nbG9iYWwgdG8gc2V0IHRoZSBpZGVudGl0eSBvbmx5IGluIHRoaXMgcmVwb3NpdG9yeS5cbiIKKyJcbiIKIG1zZ3N0ciAiIgotIkt1bmRlIGludGUgdGEgYm9ydCBncmVuYXI6XG4iCi0iJXMiCisiXG4iCisiKioqIFbDpG5saWdlbiBiZXLDpHR0YSB2ZW0gZHUgw6RyLlxuIgorIlxuIgorIkvDtnJcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcImR1QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiRGl0dCBOYW1uXCJcbiIKKyJcbiIKKyJmw7ZyIGF0dCBzdMOkbGxhIGluIGRpdHQga29udG9zIHN0YW5kYXJkaWRlbnRpdGV0LlxuIgorIkvDtnIgdXRhbiAtLWdsb2JhbCBmw7ZyIGF0dCBlbmRhc3Qgw6RuZHJhIGkgYWt0dWVsbHQgYXJraXYuXG4iCisiXG4iCiAKLSM6IGxpYi9pbmRleC50Y2w6NgotbXNnaWQgIlVuYWJsZSB0byB1bmxvY2sgdGhlIGluZGV4LiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBsw6VzYSB1cHAgaW5kZXhldC4iCisjOiBpZGVudC5jOjM3OQorbXNnaWQgIm5vIGVtYWlsIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiCittc2dzdHIgImluZ2VuIGUtcG9zdCBhbmdhdnMgb2NoIGF1dG9kZXRla3RlcmluZyDDpHIgaW5ha3RpdmVyYWQiCiAKLSM6IGxpYi9pbmRleC50Y2w6MTcKLW1zZ2lkICJJbmRleCBFcnJvciIKLW1zZ3N0ciAiSW5kZXhmZWwiCisjOiBpZGVudC5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgZW1haWwgYWRkcmVzcyAoZ290ICclcycpIgorbXNnc3RyICJrdW5kZSBpbnRlIGF1dG9kZXRla3RlcmEgZS1wb3N0YWRyZXNzIChmaWNrIFwiJXNcIikiCiAKLSM6IGxpYi9pbmRleC50Y2w6MTkKKyM6IGlkZW50LmM6NDAxCittc2dpZCAibm8gbmFtZSB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICJpbmdldCBuYW1uIGFuZ2F2cyBvY2ggYXV0b2RldGVrdGVyaW5nIMOkciBpbmFrdGl2ZXJhZCIKKworIzogaWRlbnQuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IG5hbWUgKGdvdCAnJXMnKSIKK21zZ3N0ciAia3VuZGUgaW50ZSBhdXRvZGV0ZWt0ZXJhIG5hbW4gKGZpY2sgXCIlc1wiKSIKKworIzogaWRlbnQuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgaWRlbnQgbmFtZSAoZm9yIDwlcz4pIG5vdCBhbGxvd2VkIgorbXNnc3RyICJ0b210IGlkZW50LW5hbW4gKGbDtnIgPCVzPikgZWogdGlsbMOldGV0IgorCisjOiBpZGVudC5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lIGNvbnNpc3RzIG9ubHkgb2YgZGlzYWxsb3dlZCBjaGFyYWN0ZXJzOiAlcyIKK21zZ3N0ciAibmFtbmV0IGJlc3TDpXIgZW5iYXJ0IGF2IGVqIHRpbGzDpXRuYSB0ZWNrZW46ICVzIgorCisjOiBpZGVudC5jOjQzNiBidWlsdGluL2NvbW1pdC5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAiZmVsYWt0aWd0IGRhdHVtZm9ybWF0OiAlcyIKKworIzogbGlzdC1vYmplY3RzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgdHJlZSBtb2RlLCBidXQgaXMgbm90IGEgdHJlZSIKK21zZ3N0ciAicG9zdGVuIFwiJXNcIiBpIHRyw6RkZXQgJXMgaGFyIHRyw6RkLWzDpGdlLCBtZW4gw6RyIGludGUgZXR0IHRyw6RkIgorCisjOiBsaXN0LW9iamVjdHMuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyBibG9iIG1vZGUsIGJ1dCBpcyBub3QgYSBibG9iIgorbXNnc3RyICJwb3N0ZW4gXCIlc1wiIGkgdHLDpGRldCAlcyBoYXIgYmxvYi1sw6RnZSwgbWVuIMOkciBpbnRlIGVuIGJsb2IiCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCByb290IHRyZWUgZm9yIGNvbW1pdCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBpbiByb3QtdHLDpGRldCBmw7ZyIGluY2hlY2tuaW5nZW4gJXMiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBzcGFyc2UgYmxvYiBpbiAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIG7DpSBnbGVzIGJsb2IgcMOlIFwiJXNcIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugc3BhcnNlIGZpbHRlciBkYXRhIGluICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGdsZXMgZmlsdGVyZGF0YSBpICVzIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo1OAorbXNnaWQgImV4cGVjdGVkICd0cmVlOjxkZXB0aD4nIgorbXNnc3RyICJmw7ZydsOkbnRhZGUgXCJ0cmVlOjxkanVwPlwiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo3MworbXNnaWQgInNwYXJzZTpwYXRoIGZpbHRlcnMgc3VwcG9ydCBoYXMgYmVlbiBkcm9wcGVkIgorbXNnc3RyICJzcGFyc2U6c8O2a3bDpGctZmlsdGVyIHN0w7ZkcyBpbnRlIGzDpG5ncmUiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsdGVyLXNwZWMgJyVzJyIKK21zZ3N0ciAiZmVsYWt0aWcgZmlsdGVyc3BlY2lmaWthdGlvbjogXCIlc1wiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVzdCBlc2NhcGUgY2hhciBpbiBzdWItZmlsdGVyLXNwZWM6ICclYyciCittc2dzdHIgIm3DpXN0ZSBhbnbDpG5kYSBzcGVjaWFsc2VrdmVucyBpIGRlbGZpbHRlci1zcGVjOiBcIiVjXCIiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjE0NAorbXNnaWQgImV4cGVjdGVkIHNvbWV0aGluZyBhZnRlciBjb21iaW5lOiIKK21zZ3N0ciAiZsO2cnbDpG50YWRlIG7DpWdvbnRpbmcgZWZ0ZXIgY29tYmluZToiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjIyNgorbXNnaWQgIm11bHRpcGxlIGZpbHRlci1zcGVjcyBjYW5ub3QgYmUgY29tYmluZWQiCittc2dzdHIgImZsZXJhIGZpbHRlcnNwZWNpZmlrYXRpb25lciBrYW4gaW50ZSBrb21iaW5lcmFzIgorCisjOiBsb2NrZmlsZS5jOjE1MQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCi0icmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKKyJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMuXG4iCisiXG4iCisiQW5vdGhlciBnaXQgcHJvY2VzcyBzZWVtcyB0byBiZSBydW5uaW5nIGluIHRoaXMgcmVwb3NpdG9yeSwgZS5nLlxuIgorImFuIGVkaXRvciBvcGVuZWQgYnkgJ2dpdCBjb21taXQnLiBQbGVhc2UgbWFrZSBzdXJlIGFsbCBwcm9jZXNzZXNcbiIKKyJhcmUgdGVybWluYXRlZCB0aGVuIHRyeSBhZ2Fpbi4gSWYgaXQgc3RpbGwgZmFpbHMsIGEgZ2l0IHByb2Nlc3NcbiIKKyJtYXkgaGF2ZSBjcmFzaGVkIGluIHRoaXMgcmVwb3NpdG9yeSBlYXJsaWVyOlxuIgorInJlbW92ZSB0aGUgZmlsZSBtYW51YWxseSB0byBjb250aW51ZS4iCiBtc2dzdHIgIiIKLSJNaXNzbHlja2FkZXMgbWVkIGF0dCB1cHBkYXRlcmEgR2l0aW5kZXhldC4gRW4gb21zw7ZrbmluZyBrb21tZXIgYXR0IHN0YXJ0YXMgIgotImF1dG9tYXRpc2t0IGbDtnIgYXR0IHN5bmtyb25pc2VyYSBvbSBnaXQtZ3VpLiIKKyJLdW5kZSBpbnRlIHNrYXBhIFwiJXMubG9ja1wiOiAlcy5cbiIKKyJcbiIKKyJEZXQgdmVya2FyIHNvbSBlbiBhbm5hbiBnaXQtcHJvY2VzcyBrw7ZyIGkgZGV0IGjDpHIgYXJraXZldCwgdC5leC5cbiIKKyJldHQgdGV4dHJlZGlnZXJpbmdzcHJvZ3JhbSBzdGFydGF0IGF2IFwiZ2l0IGNvbW1pdFwiLiBTZSB0aWxsIGF0dFxuIgorImFsbGEgcHJvY2Vzc2VyIGF2c2x1dGF0cyBvY2ggZsO2cnPDtmsgc2VkYW4gaWdlbi4gT20gZGV0IGZvcnRmYXJhbmRlXG4iCisibWlzc2x5Y2thcyBrYW5za2UgZW4gZ2l0LXByb2Nlc3MgaGFyIGtyYXNjaGF0IGkgZGV0IGjDpHIgYXJraXZldFxuIgorInRpZGlnYXJlOlxuIgorInRhIGJvcnQgZmlsZW4gbWFudWVsbHQgZsO2ciBhdHQgZm9ydHPDpHR0YS4iCiAKLSM6IGxpYi9pbmRleC50Y2w6MzAKLW1zZ2lkICJDb250aW51ZSIKLW1zZ3N0ciAiRm9ydHPDpHR0IgorIzogbG9ja2ZpbGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIHNrYXBhIFwiJXMubG9ja1wiOiAlcyIKIAotIzogbGliL2luZGV4LnRjbDozMwotbXNnaWQgIlVubG9jayBJbmRleCIKLW1zZ3N0ciAiTMOlcyB1cHAgaW5kZXgiCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICJtaXNzbHlja2FkZXMgbMOkc2EgY2FjaGVuIgogCi0jOiBsaWIvaW5kZXgudGNsOjI5OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKLW1zZ3N0ciAiVGFyIGJvcnQgJXMgZsO2ciBpbmNoZWNrbmluZ3Nrw7ZuIgorIzogbWVyZ2UuYzoxMDcgcmVyZXJlLmM6NzIwIGJ1aWx0aW4vYW0uYzoxODc5IGJ1aWx0aW4vYW0uYzoxOTEzCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTQxIGJ1aWx0aW4vY2hlY2tvdXQuYzo4MDAgYnVpbHRpbi9jbG9uZS5jOjgxMAorIzogYnVpbHRpbi9zdGFzaC5jOjI2NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgbnkgaW5kZXhmaWwiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzM3Ci1tc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKLW1zZ3N0ciAiUmVkbyBhdHQgY2hlY2thIGluLiIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1NgorbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIoZmVsYWt0aWcgaW5jaGVja25pbmcpXG4iCiAKLSM6IGxpYi9pbmRleC50Y2w6MzUwCi0jLCB0Y2wtZm9ybWF0CisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICIiCisiYWRkX2NhaGNlaW5mbyBtaXNzbHlja2FkZXMgZsO2ciBzw7ZrdsOkZ2VuIFwiJXNcIjsgYXZzbHV0YXIgc2FtbWFuc2xhZ25pbmdlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRfY2FjaGVpbmZvIGZhaWxlZCB0byByZWZyZXNoIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiIgorImFkZF9jYWNoZWluZm8gbWlzc2x5Y2thZGVzIHVwcGRhdGVyYSBmw7ZyIHPDtmt2w6RnZW4gXCIlc1wiOyBhdnNsdXRhciAiCisic2FtbWFuc2xhZ25pbmdlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIHBhdGggJyVzJyVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2thcGEgc8O2a3bDpGdlbiBcIiVzXCIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIHRvIG1ha2Ugcm9vbSBmb3Igc3ViZGlyZWN0b3J5XG4iCittc2dzdHIgIlRhciBib3J0ICVzIGbDtnIgYXR0IGfDtnJhIHBsYXRzIGbDtnIgdW5kZXJrYXRhbG9nXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg5OSBtZXJnZS1yZWN1cnNpdmUuYzo5MTgKK21zZ2lkICI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IgorbXNnc3RyICI6IGthbnNrZSBlbiBLL0Yta29uZmxpa3Q/IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICJ2w6RncmFyIGbDtnJsb3JhIG9zcMOlcmFkIGZpbCB2aWQgXCIlc1wiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NDkgYnVpbHRpbi9jYXQtZmlsZS5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBvYmpla3RldCAlczogXCIlc1wiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAiYmxvYiBmw7ZydsOkbnRhZGVzIGbDtnIgJXMgXCIlc1wiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJzogJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyDDtnBwbmEgXCIlc1wiOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyc6ICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2thcGEgc3ltYm9saXNrYSBsw6Rua2VuIFwiJXNcIjogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIgorbXNnc3RyICJ2ZXQgaW50ZSBodXIgJTA2byAlcyBcIiVzXCIgc2thIGhhbnRlcmFzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBjaGVja2VkIG91dCkiCittc2dzdHIgIk1pc3NseWNrYWRlcyBzbMOlIGlob3AgdW5kZXJtb2R1bGVuICVzIChlaiB1dGNoZWNrYWQpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgbm90IHByZXNlbnQpIgorbXNnc3RyICJNaXNzbHlja2FkZXMgc2zDpSBpaG9wIHVuZGVybW9kdWxlbiAlcyAoaW5jaGVja25pbmdhciBzYWtuYXMpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgZG9uJ3QgZm9sbG93IG1lcmdlLWJhc2UpIgorbXNnc3RyICIiCisiTWlzc2x5Y2thZGVzIHNsw6UgaWhvcCB1bmRlcm1vZHVsZW4gJXMgKGluY2hlY2tuaW5nYXIgZsO2bGplciBpbnRlICIKKyJzYW1tYW5zbGFnbmluZ3NiYXNlbikiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMTMgbWVyZ2UtcmVjdXJzaXZlLmM6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIHRvIHRoZSBmb2xsb3dpbmcgY29tbWl0OiIKK21zZ3N0ciAiU25hYmJzcG9sYXIgdW5kZXJtb2R1bGVuICVzIHRpbGwgZsO2bGphbmRlIGluY2hlY2tuaW5nOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxNiBtZXJnZS1yZWN1cnNpdmUuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMiCittc2dzdHIgIlNuYWJic3BvbGFyIHVuZGVybW9kdWxlbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtZXJnZSBmb2xsb3dpbmcgY29tbWl0cyBub3QgZm91bmQpIgorbXNnc3RyICIiCisiTWlzc2x5Y2thZGVzIHNsw6UgaWhvcCB1bmRlcm1vZHVsZW4gJXMgKHNhbW1hbnNsYWduaW5nIGVmdGVyIGluY2hlY2tuaW5nYXIgIgorImhpdHRhZGVzIGludGUpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBmYXN0LWZvcndhcmQpIgorbXNnc3RyICJNaXNzbHlja2FkZXMgc2zDpSBpaG9wIHVuZGVybW9kdWxlbiAlcyAoZWogc25hYmJzcG9sbmluZykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTYKK21zZ2lkICJGb3VuZCBhIHBvc3NpYmxlIG1lcmdlIHJlc29sdXRpb24gZm9yIHRoZSBzdWJtb2R1bGU6XG4iCittc2dzdHIgIkhpdHRhZGUgZW4gbcO2amxpZyBsw7ZzbmluZyBhdiBzYW1tYW5zbGFnbmluZyBmw7ZyIHVuZGVybW9kdWxlbjpcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgdGhpcyBpcyBjb3JyZWN0IHNpbXBseSBhZGQgaXQgdG8gdGhlIGluZGV4IGZvciBleGFtcGxlXG4iCisiYnkgdXNpbmc6XG4iCisiXG4iCisiICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcbiIKKyJcbiIKKyJ3aGljaCB3aWxsIGFjY2VwdCB0aGlzIHN1Z2dlc3Rpb24uXG4iCittc2dzdHIgIiIKKyJPbSBkZXR0YSDDpHIgcmlrdGlndCBsw6RnZ2VyIGR1IGJhcmEgdGlsbCBkZXQgaSBpbmRleGV0LCB0aWxsXG4iCisiZXhlbXBlbCBzw6UgaMOkcjpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorInZpbGtldCBnb2R0YXIgbMO2c25pbmdlbi5cbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtdWx0aXBsZSBtZXJnZXMgZm91bmQpIgorbXNnc3RyICIiCisiTWlzc2x5Y2thZGVzIHNsw6UgaWhvcCB1bmRlcm1vZHVsZW4gJXMgKGZsZXJhIHNhbW1hbnNsYWduaW5nYXIgaGl0dGFkZXMpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzQxCittc2dpZCAiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiCittc2dzdHIgIk1pc3NseWNrYWRlcyBleGVrdmVyYSBpbnRlcm4gc2FtbWFuc2xhZ25pbmciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6RnZ2EgdGlsbCAlcyB0aWxsIGRhdGFiYXNlbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvLW1lcmdpbmcgJXMiCittc2dzdHIgIlNsw6VyIGlob3AgJXMgYXV0b21hdGlza3QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IFJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IHdyaXRpbmcgdG8gJXMgaW5zdGVhZC4iCittc2dzdHIgIkZlbDogVsOkZ3JhciBmw7ZybG9yYSBvc3DDpXJhZCBmaWwgdmlkICVzOyBza3JpdmVyIHRpbGwgJXMgaXN0w6RsbGV0LiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisiS09ORkxJS1QgKCVzL3JhZGVyYSk6ICVzIHJhZGVyYWQgaSAlcyBvY2ggJXMgaSAlcy4gVmVyc2lvbmVuICVzIGF2ICVzIGzDpG1uYWQgIgorImkgdHLDpGRldC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlLiIKK21zZ3N0ciAiIgorIktPTkZMSUtUICglcy9yYWRlcmEpOiAlcyByYWRlcmFkIGkgJXMgb2NoICVzIHRpbGwgJXMgaSAlcy4gVmVyc2lvbmVuICVzIGF2ICIKKyIlcyBsw6RtbmFkIGkgdHLDpGRldC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIktPTkZMSUtUICglcy9yYWRlcmEpOiAlcyByYWRlcmFkIGkgJXMgb2NoICVzIGkgJXMuIFZlcnNpb25lbiAlcyBhdiAlcyBsw6RtbmFkICIKKyJpIHRyw6RkZXQgdmlkICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisiS09ORkxJS1QgKCVzL3JhZGVyYSk6ICVzIHJhZGVyYWQgaSAlcyBvY2ggJXMgdGlsbCAlcyBpICVzLiBWZXJzaW9uZW4gJXMgYXYgIgorIiVzIGzDpG1uYWQgaSB0csOkZGV0IHZpZCAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjYKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgIm5hbW5ieXRlIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI2Cittc2dpZCAicmVuYW1lZCIKK21zZ3N0ciAibmFtbmJ5dHQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NzcgbWVyZ2UtcmVjdXJzaXZlLmM6MjQ3MiBtZXJnZS1yZWN1cnNpdmUuYzozMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCAlcyIKK21zZ3N0ciAiVsOkZ3JhciBmw7ZybG9yYSBsb3J0aWcgZmlsIHZpZCBcIiVzXCIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAiVsOkZ3JhciBmw7ZybG9yYSBvc3DDpXJhZCBmaWwgdmlkICVzLCB0cm90cyBhdHQgZGVuIMOkciBpIHbDpGdlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAgQWRkZWQgJXMgaW4gJXMiCittc2dzdHIgIktPTkZMSUtUIChuYW1uYnl0ZS90aWxsw6RnZyk6IE5hbW5ieXRlICVzLT4lcyBpICVzLiBMYWRlIHRpbGwgJXMgaSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiJXMgw6RyIGVuIGthdGFsb2cgaSAlcyBsw6RnZ2VyIHRpbGwgc29tICVzIGlzdMOkbGxldCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY4MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiVsOkZ3JhciBmw7ZybG9yYSBvc3DDpXJhZCBmaWwgdmlkICVzOyBsw6RnZ2VyIHRpbGwgc29tICVzIGlzdMOkbGxldCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgorbXNnc3RyICIiCisiS09ORkxJS1QgKG5hbW5ieXRlL25hbW5ieXRlKTogTmFtbmJ5dGUgXCIlc1wiLT5cIiVzXCIgcMOlIGdyZW5lbiBcIiVzXCIgIgorIm5hbW5ieXRlIFwiJXNcIi0+XCIlc1wiIGkgXCIlc1wiJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MTMKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAobMOkbW5hZCBvbMO2c3QpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIktPTkZMSUtUIChuYW1uYnl0ZS9uYW1uYnl0ZSk6IE5hbW5ieXRlICVzLT4lcyBpICVzLiBOYW1uYnl0ZSAlcy0+JXMgaSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGRpcmVjdG9yeSByZW5hbWUgc3BsaXQpOiBVbmNsZWFyIHdoZXJlIHRvIHBsYWNlICVzIGJlY2F1c2UgIgorImRpcmVjdG9yeSAlcyB3YXMgcmVuYW1lZCB0byBtdWx0aXBsZSBvdGhlciBkaXJlY3Rvcmllcywgd2l0aCBubyBkZXN0aW5hdGlvbiAiCisiZ2V0dGluZyBhIG1ham9yaXR5IG9mIHRoZSBmaWxlcy4iCittc2dzdHIgIiIKKyJLT05GTElLVCAobmFtbsOkbmRyYWQgZGVsYWQga2F0YWxvZyk6IE9zw6RrZXIgcMOlIHZhciAlcyBza2EgcGxhY2VyYXMgZMOlICIKKyJrYXRhbG9nZW4gJXMgYnl0dGUgbmFtbiB0aWxsIGZsZXJhIGFuZHJhIGthdGFsb2dlciwgdXRhbiBhdHQgbsOlZ29uICIKKyJkZXN0aW5hdGlvbiBmaWNrIGVuIG1ham9yaXRldCBhdiBmaWxlcm5hLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBFeGlzdGluZyBmaWxlL2RpciBhdCAlcyBpbiB0aGUgd2F5IG9mICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lKHMpIHB1dHRpbmcgdGhlIGZvbGxvd2luZyBwYXRoKHMpIHRoZXJlOiAlcy4iCittc2dzdHIgIiIKKyJLT05GTElLVCAoaW1wbGljaXQgbsOkbW7DpG5kcmFkIGthdCk6IEJlZmludGxpZyBmaWwva2F0IHZpZCAlcyDDpHIgaSB2w6RnZW4gZsO2ciAiCisiaW1wbGljaXQgbmFtbsOkbmRyYWQoZSkga2F0YWxvZyhlcikgc29tIGzDpGdnZXIgZGl0IGbDtmxqYW5kZSBzw7ZrdsOkZyhhcik6ICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBDYW5ub3QgbWFwIG1vcmUgdGhhbiBvbmUgcGF0aCB0byAlczsgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzIHRyaWVkIHRvIHB1dCB0aGVzZSBwYXRocyB0aGVyZTogJXMiCittc2dzdHIgIiIKKyJLT05GTElLVCAoaW1wbGljaXQgbmFtbsOkbmRyYWQga2F0KTogS2FuIGludGUga29wcGxhIG1lciDDpG4gZW4gc8O2a3bDpGcgdGlsbCAiCisiJXM7IGltcGxpY2l0YSBrYXRhbG9nbmFtbsOkbmRyaW5nYXIgZsO2cnPDtmt0ZSBsw6RnZ2EgZsO2bGphbmRlIHPDtmt2w6RnYXIgZMOkcjogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIGRpcmVjdG9yeSAlcy0+JXMgaW4gJXMuIFJlbmFtZSBkaXJlY3RvcnkgJXMtIgorIj4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIktPTkZMSUtUIChuYW1uYnl0ZS9uYW1uYnl0ZSk6IE5hbW5ieXR0IGthdGFsb2cgJXMtPiVzIGkgJXMuIE5hbW5ieXR0IGthdGFsb2cgIgorIiVzLT4lcyBpICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNDM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBBdm9pZGluZyBhcHBseWluZyAlcyAtPiAlcyByZW5hbWUgdG8gJXMsIGJlY2F1c2UgJXMgaXRzZWxmIHdhcyAiCisicmVuYW1lZC4iCittc2dzdHIgIiIKKyJWQVJOSU5HOiBVbmR2aWtlciBhdHQgYXBwbGljZXJhIG5hbW7DpG5kcmluZyAlcyAtPiAlcyBww6UgJXMsIGTDpSAlcyBzasOkbHYgaGFyICIKKyJieXR0IG5hbW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyOTYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAia2FuIGludGUgbMOkc2Egb2JqZWt0ZXQgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIm9iamVrdGV0ICVzIMOkciBpbnRlIGVuIGJsb2IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMjgKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgIsOkbmRyYSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyOAorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICLDpG5kcmFkIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDQwCittc2dpZCAiY29udGVudCIKK21zZ3N0ciAiaW5uZWjDpWxsIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDQ0Cittc2dpZCAiYWRkL2FkZCIKK21zZ3N0ciAidGlsbMOkZ2cvdGlsbMOkZ2ciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIgorbXNnc3RyICJIb3BwYWRlIMO2dmVyICVzIChzYW1tYW5zbGFnZW4gc2FtbWEgc29tIGJlZmludGxpZykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODkgZ2l0LXN1Ym1vZHVsZS5zaDoxMDAzCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJ1bmRlcm1vZHVsIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJLT05GTElLVCAoJXMpOiBTYW1tYW5zbGFnbmluZ3Nrb25mbGlrdCBpICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICJMw6RnZ2VyIHRpbGwgc29tICVzIGlzdMOkbGxldCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAlczsgIgorIm1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKyJVcHBkYXRlcmFkIHPDtmt2w6RnOiAlcyBsYWRlIHRpbGwgJXMgaW51dGkgZW4ga2F0YWxvZyBzb20gYnl0dGUgbmFtbiBpICVzOyAiCisiZmx5dHRhciBkZW4gdGlsbCAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgYWRkZWQgaW4gJXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgIgorImluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorIktPTkZMSUtUIChmaWxwbGFjZXJpbmcpOiAlcyBsYWRlIHRpbGwgJXMgaW51dGkgZW4ga2F0YWxvZyBzb20gYnl0dGUgbmFtbiBpICIKKyIlcywgZsO2cmVzbMOlciBhdHQgZGVuIGLDtnIgZmx5dHRhcyB0aWxsJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICIKKyIlczsgbW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorIlVwcGRhdGVyYWQgc8O2a3bDpGc6ICVzIGJ5dHRlIG5hbW4gdGlsbCAlcyBpICVzLCBpbnV0aSBlbiBrYXRhbG9nIHNvbSBieXR0ZSAiCisibmFtbiBpICVzOyBmbHl0dGFyIGRlbiB0aWxsICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCAiCisid2FzIHJlbmFtZWQgaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisiS09ORkxJS1QgKGZpbHBsYWNlcmluZyk6ICVzIGJ5dHRlIG5hbW4gdGlsbCAlcyBpICVzLCBpbnV0aSBlbiBrYXRhbG9nIHNvbSAiCisiYnl0dGUgbmFtbiBpICVzOyBmbHl0dGFyIGRlbiB0aWxsICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzMyNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAiVGFyIGJvcnQgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNTAKK21zZ2lkICJmaWxlL2RpcmVjdG9yeSIKK21zZ3N0ciAiZmlsL2thdGFsb2ciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNTUKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAia2F0YWxvZy9maWwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiBBZGRpbmcgJXMgYXMgJXMiCittc2dzdHIgIiIKKyJLT05GTElLVCAoJXMpOiBEZXQgZmlubnMgZW4ga2F0YWxvZyBtZWQgbmFtbmV0ICVzIGkgJXMuIEzDpGdnZXIgdGlsbCAlcyBzb20gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNzEKKyMsIGMtZm9ybWF0CiBtc2dpZCAiQWRkaW5nICVzIgogbXNnc3RyICJMw6RnZ2VyIHRpbGwgJXMiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzgwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU3RhZ2UgJWQgdW50cmFja2VkIGZpbGVzPyIKLW1zZ3N0ciAiS8O2YSAlZCBvc3DDpXJhZGUgZmlsZXI/IgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoYWRkL2FkZCk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJLT05GTElLVCAodGlsbMOkZ2cvdGlsbMOkZ2cpOiBTYW1tYW5zbGFnbmluZ3Nrb25mbGlrdCBpICVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjQyOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIGZpbGUgJXM/IgotbXNnc3RyICLDhXRlcnN0w6RsbCDDpG5kcmluZ2FybmEgaSBmaWxlbiAlcz8iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDI0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlISIKK21zZ3N0ciAiUmVkYW4gw6Agam91ciEiCiAKLSM6IGxpYi9pbmRleC50Y2w6NDMwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgotbXNnc3RyICLDhXRlcnN0w6RsbCDDpG5kcmluZ2FybmEgaSBkZXNzYSAlaSBmaWxlcj8iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDMzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAic2FtbWFuc2xhZ25pbmcgYXYgdHLDpGRlbiAlcyBvY2ggJXMgbWlzc2x5Y2thZGVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjQzOAotbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKLW1zZ3N0ciAiIgotIkFsbGEgb2vDtmFkZSDDpG5kcmluZ2FyIGtvbW1lciBwZXJtYW5lbnQgZ8OlIGbDtnJsb3JhZGUgdmlkIMOldGVyc3TDpGxsbmluZ2VuLiIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1MzcKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAiU2zDpXIgaWhvcDoiCiAKLSM6IGxpYi9pbmRleC50Y2w6NDQxCi1tc2dpZCAiRG8gTm90aGluZyIKLW1zZ3N0ciAiR8O2ciBpbmdlbnRpbmciCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICJoaXR0YWRlICV1IGdlbWVuc2FtIGbDtnJmYWRlcjoiCittc2dzdHJbMV0gImhpdHRhZGUgJXUgZ2VtZW5zYW1tYSBmw7ZyZsOkZGVyOiIKIAotIzogbGliL2luZGV4LnRjbDo0NTkKLW1zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCi1tc2dzdHIgIsOFdGVyc3TDpGxsZXIgdmFsZGEgZmlsZXIiCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjAwCittc2dpZCAibWVyZ2UgcmV0dXJuZWQgbm8gY29tbWl0IgorbXNnc3RyICJzYW1tYW5zbGFnbmluZ2VuIHJldHVybmVyYWRlIGluZ2VuIGluY2hlY2tuaW5nIgogCi0jOiBsaWIvaW5kZXgudGNsOjQ2MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydGluZyAlcyIKLW1zZ3N0ciAiw4V0ZXJzdMOkbGxlciAlcyIKLQotIzogbGliL2VuY29kaW5nLnRjbDo0NDMKLW1zZ2lkICJEZWZhdWx0IgotbXNnc3RyICJTdGFuZGFyZCIKLQotIzogbGliL2VuY29kaW5nLnRjbDo0NDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTeXN0ZW0gKCVzKSIKLW1zZ3N0ciAiU3lzdGVtZXRzICglcykiCi0KLSM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Ci1tc2dpZCAiT3RoZXIiCi1tc2dzdHIgIkFubmFuIgotCi0jOiBsaWIvZGF0ZS50Y2w6MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgotbXNnc3RyICJPZ2lsdGlndCBkYXR1bSBmcsOlbiBHaXQ6ICVzIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQyCi1tc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCi1tc2dzdHIgIkFudGFsIGzDtnNhIG9iamVrdCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0MwotbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBsb29zZSBvYmplY3RzIgotbXNnc3RyICJEaXNrdXRyeW1tZSBhbnbDpG50IGF2IGzDtnNhIG9iamVrdCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NAotbXNnaWQgIk51bWJlciBvZiBwYWNrZWQgb2JqZWN0cyIKLW1zZ3N0ciAiQW50YWwgcGFja2FkZSBvYmpla3QiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKLW1zZ2lkICJOdW1iZXIgb2YgcGFja3MiCi1tc2dzdHIgIkFudGFsIHBha2V0IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ2Ci1tc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICJEaXNrdXRyeW1tZSBhbnbDpG50IGF2IHBhY2thZGUgb2JqZWt0IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ3Ci1tc2dpZCAiUGFja2VkIG9iamVjdHMgd2FpdGluZyBmb3IgcHJ1bmluZyIKLW1zZ3N0ciAiUGFja2FkZSBvYmpla3Qgc29tIHbDpG50YXIgcMOlIHN0w6RkbmluZyIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0OAotbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCi1tc2dzdHIgIlNrcsOkcGZpbGVyIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjcyCi1tc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKLW1zZ3N0ciAiS29tcHJpbWVyYXIgb2JqZWt0ZGF0YWJhc2VuIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjgzCi1tc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCi1tc2dzdHIgIlZlcmlmaWVyYXIgb2JqZWt0ZGF0YWJhc2VuIG1lZCBmc2NrLW9iamVjdHMiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3Ci0jLCB0Y2wtZm9ybWF0CisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjU5CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCi0iXG4iCi0iVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyAiCi0idGhlIGRhdGFiYXNlLlxuIgotIlxuIgotIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiAgJXMiCiBtc2dzdHIgIiIKLSJBcmtpdmV0IGhhciBmw7ZyIG7DpHJ2YXJhbmRlIG9ta3JpbmcgJWkgbMO2c2Egb2JqZWt0LlxuIgorIkRpbmEgbG9rYWxhIMOkbmRyaW5nYXIgYXYgZsO2bGphbmRlIGZpbGVyIHNrdWxsZSBza3JpdmFzIMO2dmVyIGF2ICIKKyJzYW1tYW5zbGFnbmluZzpcbiIKKyIgICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0b2xrYSBvYmpla3RldCBcIiVzXCIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM3NzQgYnVpbHRpbi9tZXJnZS5jOjY5NyBidWlsdGluL21lcmdlLmM6ODc3Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza3JpdmEgaW5kZXhldC4iCisKKyM6IG1pZHguYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4ZmlsZW4gJXMgw6RyIGbDtnIgbGl0ZW4iCisKKyM6IG1pZHguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSAweCUwOHggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleHNpZ25hdHVyZW4gMHglMDh4IHN0w6RtbWVyIGludGUgbWVkIHNpZ25hdHVyZW4gMHglMDh4IgorCisjOiBtaWR4LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCB2ZXJzaW9uICVkIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4dmVyc2lvbmVuICVkIHN0w7ZkcyBpbnRlIgorCisjOiBtaWR4LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCB2ZXJzaW9uICV1IGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJoYXNoLXZlcnNpb25lbiAldSBzdMOkbW1lciBpbnRlIgorCisjOiBtaWR4LmM6MTA4Cittc2dpZCAiaW52YWxpZCBjaHVuayBvZmZzZXQgKHRvbyBsYXJnZSkiCittc2dzdHIgImZlbGFrdGlndCBvZmZzZXQgZsO2ciBzdHlja2UgKGbDtnIgc3RvcnQpIgorCisjOiBtaWR4LmM6MTMyCittc2dpZCAidGVybWluYXRpbmcgbXVsdGktcGFjay1pbmRleCBjaHVuayBpZCBhcHBlYXJzIGVhcmxpZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiYXZzbHV0YW5kZSBtdWx0aS1wYWNrLWluZGV4LXN0eWNrZS1pZCBmw7ZyZWtvbW1lciB0aWRpZ2FyZSDDpG4gZsO2cnbDpG50YXQiCisKKyM6IG1pZHguYzoxNDUKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgcGFjay1uYW1lIGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IHNha25hciBrcsOkdmQgcGFrZXRuYW1uLXN0eWNrZSIKKworIzogbWlkeC5jOjE0NworbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgZmFub3V0IGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IHNha25hciBrcsOkdnQgT0lELXV0YnJlZG5pbmdzc3R5Y2tlIgorCisjOiBtaWR4LmM6MTQ5Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBsb29rdXAgY2h1bmsiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXggc2FrbmFyIGtyw6R2dCBPSUQtdXBwc2xhZ25pZ25zc3R5Y2tlIgorCisjOiBtaWR4LmM6MTUxCittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBvZmZzZXRzIGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IHNha25hciBrcsOkdnQgb2JqZWt0LW9mZnNldHN0eWNrZSIKKworIzogbWlkeC5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHBhY2sgbmFtZXMgb3V0IG9mIG9yZGVyOiAnJXMnIGJlZm9yZSAnJXMnIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4LXBha2V0bmFtbiBpIGZlbCBvcmRuaW5nOiBcIiVzXCIgZsO2cmUgXCIlc1wiIgorCisjOiBtaWR4LmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLWludC1pZDogJXUgKCV1IHRvdGFsIHBhY2tzKSIKK21zZ3N0ciAiYmFkIHBhY2staW50LWlkOiAldSAoJXUgcGFrZXQgdG90YWx0KSIKKworIzogbWlkeC5jOjI2MAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc3RvcmVzIGEgNjQtYml0IG9mZnNldCwgYnV0IG9mZl90IGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCBza3JpdmVyIDY0LWJpdGFycyBvZmZzZXQsIG1lbiBvZmZfdCDDpHIgZsO2ciBsaXRlbiIKKworIzogbWlkeC5jOjI4OAorbXNnaWQgImVycm9yIHByZXBhcmluZyBwYWNrZmlsZSBmcm9tIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgImZlbCBuw6RyIHBha2V0ZmlsZXIgZnLDpW4gbXVsdGktcGFjay1pbmRleCBza3VsbGUgZsO2cmJlcmVkYXMiCisKKyM6IG1pZHguYzo0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFkZCBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgbMOkc2EgcGFrZXRmaWxlbiBcIiVzXCIiCisKKyM6IG1pZHguYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGFjay1pbmRleCAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgw7ZwcG5hIHBha2V0aW5kZXhldCBcIiVzXCIiCisKKyM6IG1pZHguYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvY2F0ZSBvYmplY3QgJWQgaW4gcGFja2ZpbGUiCittc2dzdHIgIm1pc3NseWNrYWRlcyBoaXR0YSBvYmpla3QgJWQgaSBwYWtldGZpbGVuIgorCisjOiBtaWR4LmM6ODQyCittc2dpZCAiQWRkaW5nIHBhY2tmaWxlcyB0byBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJMw6RnZ2VyIHRpbGwgcGFrZXRmaWxlciB0aWxsIG11bHRpLXBhY2staW5kZXgiCisKKyM6IG1pZHguYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCBzZWUgcGFjay1maWxlICVzIHRvIGRyb3AiCittc2dzdHIgInPDpWcgaW50ZSBwYWtldGZpbGVuICVzIHNvbSBza3VsbGUga2FzdGFzIgorCisjOiBtaWR4LmM6OTczCittc2dpZCAiV3JpdGluZyBjaHVua3MgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiU2tyaXZlciBzdHlja2VuIHRpbGwgbXVsdGktcGFjay1pbmRleCIKKworIzogbWlkeC5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyBzdMOkZGEgbXVsdGktcGFjay1pbmRleCBww6UgJXMiCisKKyM6IG1pZHguYzoxMTA4Cittc2dpZCAiTG9va2luZyBmb3IgcmVmZXJlbmNlZCBwYWNrZmlsZXMiCittc2dzdHIgIlNlciBlZnRlciByZWZlcmVyYWRlIHBhY2tmaWxlciIKKworIzogbWlkeC5jOjExMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9pZCBmYW5vdXQgb3V0IG9mIG9yZGVyOiBmYW5vdXRbJWRdID0gJTxQUkl4MzI+ID4gJTxQUkl4MzI+ID0gZmFub3V0WyVkXSIKK21zZ3N0ciAiIgorIm9pZC11dGJyZWRuaW5nIGkgZmVsIG9yZG5pbmc6IGZhbm91dFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSBmYW5vdXRbJWRdIgorCisjOiBtaWR4LmM6MTEyOAorbXNnaWQgIlZlcmlmeWluZyBPSUQgb3JkZXIgaW4gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiQmVrcsOkZnRhciBPSUQtb3JkbmluZyBpIG11bHRpLXBhY2staW5kZXgiCisKKyM6IG1pZHguYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9pZCBsb29rdXAgb3V0IG9mIG9yZGVyOiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorbXNnc3RyICJvaWQtdXBwc2xhZ25pbmcgaSBmZWwgb3JkbmluZzogb2lkWyVkXSA9ICVzID49ICVzID0gb2lkWyVkXSIKKworIzogbWlkeC5jOjExNTcKK21zZ2lkICJTb3J0aW5nIG9iamVjdHMgYnkgcGFja2ZpbGUiCittc2dzdHIgIlNvcnRlcmFyIG9iamVrdCBlZnRlciBwYWNrZmlsIgorCisjOiBtaWR4LmM6MTE2NAorbXNnaWQgIlZlcmlmeWluZyBvYmplY3Qgb2Zmc2V0cyIKK21zZ3N0ciAiQmVrcsOkZnRhciBvZmZzZXQgZsO2ciBvYmpla3QiCisKKyM6IG1pZHguYzoxMTgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2sgZW50cnkgZm9yIG9pZFslZF0gPSAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGzDpHNhIHBha2V0cG9zdCBmw7ZyIG9pZFslZF0gPSAlcyIKKworIzogbWlkeC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgcGFjay1pbmRleCBmb3IgcGFja2ZpbGUgJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyBsw6RzYSBwYWtldGluZGV4IGbDtnIgcGFrZXRmaWwgJXMiCisKKyM6IG1pZHguYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImluY29ycmVjdCBvYmplY3Qgb2Zmc2V0IGZvciBvaWRbJWRdID0gJXM6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCittc2dzdHIgImZlbGFrdGlndCBvYmpla3Qtb2Zmc2V0IGbDtnIgb2lkWyVkXSA9ICVzOiAlPFBSSXg2ND4gIT0gJTxQUkl4NjQ+IgorCisjOiBtaWR4LmM6MTIyMAorbXNnaWQgIkNvdW50aW5nIHJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAiUsOka25hciByZWZlcmVyYWRlIG9iamVrdCIKKworIzogbWlkeC5jOjEyMzAKK21zZ2lkICJGaW5kaW5nIGFuZCBkZWxldGluZyB1bnJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICJTZXIgZWZ0ZXIgb2NoIHRhciBib3J0IG9yZWZlcmVyYWRlIHBhY2tmaWxlciIKKworIzogbWlkeC5jOjEzODgKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIgorbXNnc3RyICJrdW5kZSBpbnRlIHN0YXJ0YSBwYWNrLW9iamVjdHMiCisKKyM6IG1pZHguYzoxNDA3Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMiCittc2dzdHIgImt1bmRlIGludGUgYXZzbHV0YSBwYWNrLW9iamVjdHMiCisKKyM6IG5hbWUtaGFzaC5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfZGlyIHRocmVhZDogJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBsYXp5X2Rpci10csOlZDogJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2thcGEgbGF6eV9uYW1lLXRyw6VkOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdXRmw7ZyYSBqb2luIHDDpSBsYXp5X25hbWUtdHLDpWQ6ICVzIgorCisjOiBub3Rlcy1tZXJnZS5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIHByZXZpb3VzIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLlxuIgorIlBsZWFzZSwgdXNlICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG9yICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcgdG8gIgorImNvbW1pdC9hYm9ydCB0aGUgcHJldmlvdXMgbWVyZ2UgYmVmb3JlIHlvdSBzdGFydCBhIG5ldyBub3RlcyBtZXJnZS4iCittc2dzdHIgIiIKKyJEdSBoYXIgaW50ZSBhdnNsdXRhdCBmw7ZyZWfDpWVuZGUgYW50ZWNrbmluZ3Mtc2FtbWFuc2xhZ25pbmcgKCVzIGZpbm5zKS5cbiIKKyJBbnbDpG5kIFwiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0XCIgZWxsZXIgXCJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydFwiIGbDtnIgIgorImF0dCBjaGVja2EgaW4gZWxsZXIgYXZicnl0YSBmw7ZyZWfDpWVuZGUgc2FtbWFuc2xhZ25pbmcgaW5uYW4gZHUgcMOlYsO2cmphciBlbiAiCisibnkgYW50ZWNrbmluZ3Mtc2FtbWFuc2xhZ25pbmcuIgorCisjOiBub3Rlcy1tZXJnZS5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuIgorbXNnc3RyICJEdSBoYXIgaW50ZSBhdnNsdXRhdCBhbnRlY2tuaW5ncy1zYW1tYW5zbGFnbmluZ2VuICglcyBmaW5ucykuIgorCisjOiBub3Rlcy11dGlscy5jOjQ2Cittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICJLYW4gaW50ZSBjaGVja2EgaW4gb2luaXRpZXJhdC9vcmVmZXJlcmF0IGFudGVja25pbmdzdHLDpGQiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiRmVsYWt0aWd0IHbDpHJkZSBmw7ZyIG5vdGVzLnJld3JpdGVNb2RlOiAnJXMnIgorCisjOiBub3Rlcy11dGlscy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiVsOkZ3JhciBza3JpdmEgw7Z2ZXIgYW50ZWNrbmluZ2FyIGkgJXMgKHV0YW5mw7ZyIHJlZnMvbm90ZXMvKSIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZgorIy4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzCisjLiBpdHMgdmFsdWUuCisjLgorIzogbm90ZXMtdXRpbHMuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICJGZWxha3RpZ3QgdsOkcmRlIHDDpSAlczogXCIlc1wiIgorCisjOiBvYmplY3QuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIFwiJXNcIiIKK21zZ3N0ciAib2dpbHRpZyBvYmpla3R0eXAgXCIlc1wiIgorCisjOiBvYmplY3QuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIGEgJXMsIG5vdCBhICVzIgorbXNnc3RyICJvYmpla3RldCAlcyDDpHIgZW4gJXMsIGludGUgZW4gJXMiCisKKyM6IG9iamVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaGFzIHVua25vd24gdHlwZSBpZCAlZCIKK21zZ3N0ciAib2JqZWt0ZXQgJXMgaGFyIG9rw6RuZCB0eXAtaWQgJWQiCisKKyM6IG9iamVjdC5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBvYmpla3RldDogJXMiCisKKyM6IG9iamVjdC5jOjI2NiBvYmplY3QuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCAlcyIKK21zZ3N0ciAiaGFzaHbDpHJkZSBzdMOkbW1lciBpbnRlIMO2dmVyZW5zICVzIgorCisjOiBwYWNrZmlsZS5jOjYyOQorbXNnaWQgIm9mZnNldCBiZWZvcmUgZW5kIG9mIHBhY2tmaWxlIChicm9rZW4gLmlkeD8pIgorbXNnc3RyICJvZmZzZXQgZsO2cmUgc2x1dGV0IGF2IHBhY2tmaWxlbiAodHJhc2lnIC5pZHg/KSIKKworIzogcGFja2ZpbGUuYzoxODk5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZWZvcmUgc3RhcnQgb2YgcGFjayBpbmRleCBmb3IgJXMgKGNvcnJ1cHQgaW5kZXg/KSIKK21zZ3N0ciAib2Zmc2V0IGbDtnJlIHNsdXRldCBhdiBwYWNraW5kZXggZsO2ciAlcyAodHJhc2lndCBpbmRleD8pIgorCisjOiBwYWNrZmlsZS5jOjE5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFjayBpbmRleCBmb3IgJXMgKHRydW5jYXRlZCBpbmRleD8pIgorbXNnc3RyICJvZmZzZXQgYm9ydG9uIHNsdXRldCBhdiBwYWNraW5kZXggZsO2ciAlcyAodHJ1bmtlcmF0IGluZGV4PykiCisKKyM6IHBhY2stYml0bWFwLmM6ODAwIHBhY2stYml0bWFwLmM6ODA2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHNpemUgb2YgJXMiCittc2dzdHIgImthbiBpbnRlIGjDpG10YSBzdG9ybGVrIHDDpSAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIiVzIGJlaMO2dmVyIGV0dCB2w6RyZGUiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAlcyIKK21zZ3N0ciAiJXMgw6RyIGlua29tcGF0aWJlbCBtZWQgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IGluY29tcGF0aWJsZSB3aXRoIHNvbWV0aGluZyBlbHNlIgorbXNnc3RyICIlczogaW5rb21wYXRpYmVsdCBtZWQgbsOlZ290IGFubmF0IgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTIgcGFyc2Utb3B0aW9ucy5jOjk2IHBhcnNlLW9wdGlvbnMuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGFrZXMgbm8gdmFsdWUiCittc2dzdHIgIiVzIHRhciBpbmdldCB2w6RyZGUiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpc24ndCBhdmFpbGFibGUiCittc2dzdHIgIiVzIMOkciBpbnRlIHRpbGxnw6RuZ2xpZ3QiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIHdpdGggYW4gb3B0aW9uYWwgay9tL2cgc3VmZml4IgorbXNnc3RyICIlcyBmw7ZydsOkbnRhciBldHQgaWNrZS1uZWdhdGl2dCBoZWx0YWxzdsOkcmRlLCBtZWQgdmFsZnJpdHQgay9tL2ctc3VmZml4IgorCisjOiBwYXJzZS1vcHRpb25zLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyBvcHRpb246ICVzIChjb3VsZCBiZSAtLSVzJXMgb3IgLS0lcyVzKSIKK21zZ3N0ciAidHZldHlkaWcgZmxhZ2dhOiAlcyAoa2FuIHZhcmEgLS0lcyVzIGVsbGVyIC0tJXMlcykiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo0MjAgcGFyc2Utb3B0aW9ucy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgeW91IG1lYW4gYC0tJXNgICh3aXRoIHR3byBkYXNoZXMpPyIKK21zZ3N0ciAibWVuYWRlIGR1IFwiLS0lc1wiIChtZWQgdHbDpSBiaW5kZXN0cmVjayk/IgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uIGAlcyciCittc2dzdHIgIm9rw6RuZCBmbGFnZ2EgXCIlc1wiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3dpdGNoIGAlYyciCittc2dzdHIgIm9rw6RuZCBmbGFnZ2EgXCIlY1wiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm9uLWFzY2lpIG9wdGlvbiBpbiBzdHJpbmc6IGAlcyciCittc2dzdHIgIm9rw6RuZCBpY2tlLWFzY2lpLWZsYWdnYSBpIHN0csOkbmdlbjogXCIlc1wiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODg1Cittc2dpZCAiLi4uIgorbXNnc3RyICIuLi4iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzIgorbXNnc3RyICJhbnbDpG5kbmluZzogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBwYXJzZS1vcHRpb25zLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICAgICBlbGxlcjogJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICVzIgorbXNnc3RyICIgICAgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NTIKK21zZ2lkICItTlVNIgorbXNnc3RyICItVEFMIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIG9mIC0tJXMiCittc2dzdHIgImFsaWFzIGbDtnIgLS0lcyIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjIwIHBhcnNlLW9wdGlvbnMtY2IuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJmbGFnZ2FuIFwiJXNcIiBhbnRhciBldHQgbnVtZXJpc2t0IHbDpHJkZSIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBleHBpcmF0aW9uIGRhdGUgJyVzJyIKK21zZ3N0ciAidHJhc2lndCB1dGzDtnBzZGF0dW06IFwiJXNcIiIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgXCJhbHdheXNcIiwgXCJhdXRvXCIsIG9yIFwibmV2ZXJcIiIKK21zZ3N0ciAiIgorImZsYWdnYW4gXCIlc1wiIGFudGFyIFwiYWx3YXlzXCIgKGFsbHRpZCksIFwiYXV0b1wiIGVsbGVyIFwibmV2ZXJcIiAoYWxkcmlnKSIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjEzMCBwYXJzZS1vcHRpb25zLWNiLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICJmZWxmb3JtYXQgb2JqZWt0bmFtbiBcIiVzXCIiCisKKyM6IHBhdGguYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgIkt1bmRlIGludGUgZ8O2cmEgJXMgc2tyaXZiYXIgZsO2ciBncnVwcGVuIgorCisjOiBwYXRoc3BlYy5jOjEzMAorbXNnaWQgIkVzY2FwZSBjaGFyYWN0ZXIgJ1xcJyBub3QgYWxsb3dlZCBhcyBsYXN0IGNoYXJhY3RlciBpbiBhdHRyIHZhbHVlIgorbXNnc3RyICJTcGVjaWFsdGVja25ldCBcIlxcXCIgdGlsbMOldHMgaW50ZSBzb20gc2lzdGEgdGVja2VuIGkgYXR0cmlidXR2w6RyZGUiCisKKyM6IHBhdGhzcGVjLmM6MTQ4Cittc2dpZCAiT25seSBvbmUgJ2F0dHI6JyBzcGVjaWZpY2F0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJFbmRhc3QgZW4gXCJhdHRyOlwiLWFuZ2l2ZWxzZSB0aWxsw6V0ZW4uIgorCisjOiBwYXRoc3BlYy5jOjE1MQorbXNnaWQgImF0dHIgc3BlYyBtdXN0IG5vdCBiZSBlbXB0eSIKK21zZ3N0ciAiYXR0ci1hbmdpdmVsc2Uga2FuIGludGUgdmFyYSB0b20iCisKKyM6IHBhdGhzcGVjLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIG5hbWUgJXMiCittc2dzdHIgIm9naWx0aWd0IGF0dHJpYnV0bmFtbiAlcyIKKworIzogcGF0aHNwZWMuYzoyNTkKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisiZGUgZ2xvYmFsYSBzw7ZrdsOkZ3NpbnN0w6RsbG5pbmdhcm5hIFwiZ2xvYlwiIG9jaCBcIm5vZ2xvYlwiIMOkciBpbmtvbXBhdGlibGEiCisKKyM6IHBhdGhzcGVjLmM6MjY2Cittc2dpZCAiIgorImdsb2JhbCAnbGl0ZXJhbCcgcGF0aHNwZWMgc2V0dGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgZ2xvYmFsICIKKyJwYXRoc3BlYyBzZXR0aW5ncyIKK21zZ3N0ciAiIgorImRlbiBnbG9iYWxhIHPDtmt2w6Rnc2luc3TDpGxsbmluZ2VuIFwibGl0ZXJhbFwiIMOkciBpbmtvbXBhdGliZWwgbWVkIGFsbGEgYW5kcmEgIgorImdsb2JhbGEgc8O2a3bDpGdzaW5zdMOkbGxuaW5nYXIiCisKKyM6IHBhdGhzcGVjLmM6MzA2Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICJvZ2lsdGlnIHBhcmFtZXRlciBmw7ZyIHPDtmt2w6Rnc3V0dHJ5Y2tldCBmw7ZyIFwicHJlZml4XCIiCisKKyM6IHBhdGhzcGVjLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIkZlbGFrdGlndCBzw7ZrdsOkZ3N1dHRyeWNrIFwiJS4qc1wiIGkgXCIlc1wiIgorCisjOiBwYXRoc3BlYy5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcpJyBhdCB0aGUgZW5kIG9mIHBhdGhzcGVjIG1hZ2ljIGluICclcyciCittc2dzdHIgIlwiKVwiIHNha25hcyBpIHNsdXRldCBhdiBzw7ZrdsOkZ3N1dHRyeWNrZXQgZsO2ciBcIiVzXCIiCisKKyM6IHBhdGhzcGVjLmM6MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaW1wbGVtZW50ZWQgcGF0aHNwZWMgbWFnaWMgJyVjJyBpbiAnJXMnIgorbXNnc3RyICJFaiBpbXBsZW1lbnRlcmF0IHPDtmt2w6Rnc3V0dHJ5Y2ttYWdpIFwiJWNcIiBpIFwiJXNcIiIKKworIzogcGF0aHNwZWMuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICdsaXRlcmFsJyBhbmQgJ2dsb2InIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiVzOiBcImxpdGVyYWxcIiBvY2ggXCJnbG9iXCIgw6RyIGlua29tcGF0aWJsYSIKKworIzogcGF0aHNwZWMuYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IGF0ICclcyciCittc2dzdHIgIiVzOiBcIiVzXCIgw6RyIHV0YW5mw7ZyIGFya2l2ZXQgcMOlIFwiJXNcIiIKKworIzogcGF0aHNwZWMuYzo1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyAobW5lbW9uaWM6ICclYycpIgorbXNnc3RyICJcIiVzXCIgKG1pbm5lc3N0w7ZkOiBcIiVjXCIpIgorCisjOiBwYXRoc3BlYy5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIlczogc8O2a3bDpGdzdXR0cnlja2V0IGhhbnRlcmFzIGludGUgYXYgZGV0IGjDpHIga29tbWFuZG90OiAlcyIKKworIzogcGF0aHNwZWMuYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJzw7ZrdsOkZ3NhbmdpdmVsc2VuIFwiJXNcIiDDpHIgcMOlIGFuZHJhIHNpZGFuIGF2IGVuIHN5bWJvbGlzayBsw6RuayIKKworIzogcGF0aHNwZWMuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBpcyBiYWRseSBxdW90ZWQ6ICVzIgorbXNnc3RyICJsaW5qZW4gZXIgZmVsYWt0aWd0IGNpdGVyYWQ6ICVzIgorCisjOiBwa3QtbGluZS5jOjkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAia2FuIGludGUgc2tyaXZhIGZsdXNoLXBha2V0IgorCisjOiBwa3QtbGluZS5jOjk5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGRlbGltIHBhY2tldCIKK21zZ3N0ciAia2FuIGludGUgc2tyaXZhIGRlbGltLXBha2V0IgorCisjOiBwa3QtbGluZS5jOjEwNgorbXNnaWQgImZsdXNoIHBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgImZlbCB2aWQgc2tyaXZuaW5nIGF2IFwiZmx1c2hcIi1wYWtldCIKKworIzogcGt0LWxpbmUuYzoxNDYgcGt0LWxpbmUuYzoyMzIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiCittc2dzdHIgInByb3Rva29sbGZlbDogb23DtmpsaWd0IGzDpW5nIHJhZCIKKworIzogcGt0LWxpbmUuYzoxNjIgcGt0LWxpbmUuYzoxNjQKK21zZ2lkICJwYWNrZXQgd3JpdGUgd2l0aCBmb3JtYXQgZmFpbGVkIgorbXNnc3RyICJwYWtldHNrcml2bmluZyBtZWQgZm9ybWF0IG1pc3NseWNrYWRlcyIKKworIzogcGt0LWxpbmUuYzoxOTYKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIC0gZGF0YSBleGNlZWRzIG1heCBwYWNrZXQgc2l6ZSIKK21zZ3N0ciAicGFrZXRza3Jpdm5pbmcgbWlzc2x5Y2thZGVzIC0gZGF0YSDDtnZlcnNrcmlkZXIgbWF4aW1hbCBwYWtldHN0b3JsZWsiCisKKyM6IHBrdC1saW5lLmM6MjAzIHBrdC1saW5lLmM6MjEwCittc2dpZCAicGFja2V0IHdyaXRlIGZhaWxlZCIKK21zZ3N0ciAicGFrZXRza3Jpdm5pbmcgbWlzc2x5Y2thZGVzIgorCisjOiBwa3QtbGluZS5jOjI5NQorbXNnaWQgInJlYWQgZXJyb3IiCittc2dzdHIgImzDpHNmZWwiCisKKyM6IHBrdC1saW5lLmM6MzAzCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiCittc2dzdHIgImZqw6RycmVuIGxhZGUgcMOlIG92w6RudGF0IgorCisjOiBwa3QtbGluZS5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIGxpbmUgbGVuZ3RoIGNoYXJhY3RlcjogJS40cyIKK21zZ3N0ciAicHJvdG9rb2xsZmVsOiBmZWxha3RpZyByYWRsw6RuZ2RzdGVja2VuOiAlLjRzIgorCisjOiBwa3QtbGluZS5jOjM0MSBwa3QtbGluZS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIGxpbmUgbGVuZ3RoICVkIgorbXNnc3RyICJwcm90b2tvbGxmZWw6IGZlbGFrdGlnIHJhZGzDpG5nZDogJWQiCisKKyM6IHBrdC1saW5lLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgImZqw6RycmZlbDogJXMiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMTkKK21zZ2lkICJSZWZyZXNoaW5nIGluZGV4IgorbXNnc3RyICJVcHBkYXRlcmFyIGluZGV4ZXQiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWRlZCBsc3RhdDogJXMiCittc2dzdHIgImt1bmRlIGludGUgc2thcGEgdHLDpWRhZCBsc3RhdDogJXMiCisKKyM6IHByZXR0eS5jOjk4MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgZm9ybWF0IGbDtnIgLS1wcmV0dHkiCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjIzCittc2dpZCAiUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJGasOkcnIgdXRhbiBVUkwiCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21pc29yIHJlbW90ZSBuYW1lIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgImtvbnRyYWt0c2Zqw6RyciBrYW4gaW50ZSBiw7ZyamEgbWVkIFwiL1wiOiAlcyIKKworIzogcmFuZ2UtZGlmZi5jOjc1Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGBsb2dgIgorbXNnc3RyICJrdW5kZSBpbnRlIHN0YXJ0YSBcImxvZ1wiIgorCisjOiByYW5nZS1kaWZmLmM6NzcKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBgbG9nYCBvdXRwdXQiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgdXRkYXRhIGZyw6VuIFwibG9nXCIiCisKKyM6IHJhbmdlLWRpZmYuYzo5NiBzZXF1ZW5jZXIuYzo1MDIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBpbmNoZWNrbmluZ2VuIFwiJXNcIiIKKworIzogcmFuZ2UtZGlmZi5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZ2l0IGhlYWRlciAnJS4qcyciCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgZ2l0LWh1dnVkZXQgXCIlLipzXCIiCisKKyM6IHJhbmdlLWRpZmYuYzoyODUKK21zZ2lkICJmYWlsZWQgdG8gZ2VuZXJhdGUgZGlmZiIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrYXBhIGRpZmYiCisKKyM6IHJhbmdlLWRpZmYuYzo1MTggcmFuZ2UtZGlmZi5jOjUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbG9nIGZvciAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGxvZ2dlbiBmw7ZyIFwiJXNcIiIKKworIzogcmVhZC1jYWNoZS5jOjY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBhZGQgZmlsZSBhbGlhcyAnJXMnICgnJXMnIGFscmVhZHkgZXhpc3RzIGluIGluZGV4KSIKK21zZ3N0ciAibMOkZ2dlciBpbnRlIHRpbGwgZmlsYWxpYXMgXCIlc1wiIChcIiVzXCIgZmlubnMgcmVkYW4gaSBpbmRleGV0KSIKKworIzogcmVhZC1jYWNoZS5jOjY5NgorbXNnaWQgImNhbm5vdCBjcmVhdGUgYW4gZW1wdHkgYmxvYiBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJrYW4gaW50ZSBza2FwYSB0b20gYmxvYiBpIG9iamVrdGRhdGFiYXNlbiIKKworIzogcmVhZC1jYWNoZS5jOjcxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuIG9ubHkgYWRkIHJlZ3VsYXIgZmlsZXMsIHN5bWJvbGljIGxpbmtzIG9yIGdpdC1kaXJlY3RvcmllcyIKK21zZ3N0ciAiIgorIiVzOiBrYW4gYmFyYSBsw6RnZ2EgdGlsbCB2YW5saWdhIGZpbGVyLCBzeW1ib2xpc2thIGzDpG5rYXIgb2NoIGdpdC1rYXRhbG9nZXIiCisKKyM6IHJlYWQtY2FjaGUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0IgorbXNnc3RyICJcIiVzXCIgaGFyIGludGUgbsOlZ29uIHV0Y2hlY2thZCBpbmNoZWNrbmluZyIKKworIzogcmVhZC1jYWNoZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaW5kZXggZmlsZSAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSBpbmRleGVyYSBmaWxlbiBcIiVzXCIiCisKKyM6IHJlYWQtY2FjaGUuYzo3OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCAnJXMnIHRvIGluZGV4IgorbXNnc3RyICJrYW4gaW50ZSBsw6RnZ2EgdGlsbCBcIiVzXCIgdGlsbCBpbmRleGV0IgorCisjOiByZWFkLWNhY2hlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0ICclcyciCittc2dzdHIgImthbiBpbnRlIHRhIHN0YXR1cyBww6UgXCIlc1wiIgorCisjOiByZWFkLWNhY2hlLmM6MTMzMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFwcGVhcnMgYXMgYm90aCBhIGZpbGUgYW5kIGFzIGEgZGlyZWN0b3J5IgorbXNnc3RyICJcIiVzXCIgZmlubnMgYsOlZGUgc29tIGVuIGZpbCBvY2ggZW4ga2F0YWxvZyIKKworIzogcmVhZC1jYWNoZS5jOjE1MzYKK21zZ2lkICJSZWZyZXNoIGluZGV4IgorbXNnc3RyICJVcHBkYXRlcmEgaW5kZXhldCIKKworIzogcmVhZC1jYWNoZS5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorImluZGV4LnZlcnNpb24gc2F0dCwgbWVuIHbDpHJkZXQgw6RyIG9naWx0aWd0LlxuIgorIkFudsOkbmRlciB2ZXJzaW9uICVpIgorCisjOiByZWFkLWNhY2hlLmM6MTY2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR0lUX0lOREVYX1ZFUlNJT04gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIHNhdHQsIG1lbiB2w6RyZGV0IMOkciBvZ2lsdGlndC5cbiIKKyJBbnbDpG5kZXIgdmVyc2lvbiAlaSIKKworIzogcmVhZC1jYWNoZS5jOjE3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgImZlbGFrdGlnIHNpZ25hdHVyIDB4JTA4eCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJWQiCittc2dzdHIgImZlbGFrdGlnIGluZGV4dmVyc2lvbiAlZCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjkKK21zZ2lkICJiYWQgaW5kZXggZmlsZSBzaGExIHNpZ25hdHVyZSIKK21zZ3N0ciAiZmVsYWt0aWcgc2hhMS1zaWduYXR1ciBmw7ZyIGluZGV4ZmlsIgorCisjOiByZWFkLWNhY2hlLmM6MTc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCB1c2VzICUuNHMgZXh0ZW5zaW9uLCB3aGljaCB3ZSBkbyBub3QgdW5kZXJzdGFuZCIKK21zZ3N0ciAiaW5kZXggYW52w6RuZGVyIGZpbHRpbGzDpGdnZXQgJS40cywgdmlsa2V0IHZpIGludGUgZsO2cnN0w6VyIgorCisjOiByZWFkLWNhY2hlLmM6MTc2MQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlLjRzIGV4dGVuc2lvbiIKK21zZ3N0ciAiaWdub3JlcmFyIGZpbHRpbGzDpGdnZXQgJS40cyIKKworIzogcmVhZC1jYWNoZS5jOjE3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbmRleCBlbnRyeSBmb3JtYXQgMHglMDh4IgorbXNnc3RyICJva8OkbnQgZm9ybWF0IDB4JTA4eCBww6UgaW5kZXhwb3N0IgorCisjOiByZWFkLWNhY2hlLmM6MTgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbmFtZSBmaWVsZCBpbiB0aGUgaW5kZXgsIG5lYXIgcGF0aCAnJXMnIgorbXNnc3RyICJmZWxmb3JtYXQgbmFtbmbDpGx0IGkgaW5kZXhldCwgbsOkcmEgc8O2a3bDpGdlbiBcIiVzXCIiCisKKyM6IHJlYWQtY2FjaGUuYzoxODcxCittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgaW4gaW5kZXgiCittc2dzdHIgIm9zb3J0ZXJhZGUga8O2cG9zdGVyIGkgaW5kZXgiCisKKyM6IHJlYWQtY2FjaGUuYzoxODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHN0YWdlIGVudHJpZXMgZm9yIG1lcmdlZCBmaWxlICclcyciCittc2dzdHIgImZsZXJhIGvDtnBvc3RlciBmw7ZyIGRlbiBzYW1tYW5zbGFnbmEgZmlsZW4gXCIlc1wiIgorCisjOiByZWFkLWNhY2hlLmM6MTg3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBmb3IgJyVzJyIKK21zZ3N0ciAib3NvcnRlcmFkZSBrw7Zwb3N0ZXIgZsO2ciBcIiVzXCIiCisKKyM6IHJlYWQtY2FjaGUuYzoxOTgzIHJlYWQtY2FjaGUuYzoyMjcxIHJlcmVyZS5jOjU2NSByZXJlcmUuYzo1OTkgcmVyZXJlLmM6MTExMQorIzogc3VibW9kdWxlLmM6MTYxOSBidWlsdGluL2FkZC5jOjUzMiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE4MQorIzogYnVpbHRpbi9jaGVja291dC5jOjQ3MCBidWlsdGluL2NoZWNrb3V0LmM6NjU2IGJ1aWx0aW4vY2xlYW4uYzo5NjcKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY3IGJ1aWx0aW4vZGlmZi10cmVlLmM6MTIwIGJ1aWx0aW4vZ3JlcC5jOjQ4NQorIzogYnVpbHRpbi9tdi5jOjE0NSBidWlsdGluL3Jlc2V0LmM6MjQ2IGJ1aWx0aW4vcm0uYzoyOTAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozMzIKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQiCittc2dzdHIgImluZGV4ZmlsZW4gdHJhc2lnIgorCisjOiByZWFkLWNhY2hlLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIGluIGNhY2hlX2VudHJpZXMtdHLDpWRlbjogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHV0ZsO2cmEgam9pbiBww6UgY2FjaGVfZW50cmllcy10csOlZGVuOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgb3BlbiBmYWlsZWQiCittc2dzdHIgIiVzOiDDtnBwbmluZyBhdiBpbmRleGZpbGVuIG1pc3NseWNrYWRlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4IgorbXNnc3RyICIlczoga2FuIGludGUgdGEgc3RhcnR1cyBww6UgZGV0IMO2cHBuYSBpbmRleGV0IgorCisjOiByZWFkLWNhY2hlLmM6MjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW5kZXggZmlsZSBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQiCittc2dzdHIgIiVzOiBpbmRleGZpbGVuIG1pbmRyZSDDpG4gZsO2cnbDpG50YXQiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmFibGUgdG8gbWFwIGluZGV4IGZpbGUiCittc2dzdHIgIiVzOiBrYW4gaW50ZSBrb3BwbGEgaW5kZXhmaWxlbiIKKworIzogcmVhZC1jYWNoZS5jOjIyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2luZGV4X2V4dGVuc2lvbnMgdGhyZWFkOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBsb2FkX2luZGV4X2V4dGVuc2lvbnMtdHLDpWRlbjogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHV0ZsO2cmEgam9pbiBww6UgbG9hZF9pbmRleF9leHRlbnNpb25zLXRyw6VkZW46ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI4MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZnJlc2hlbiBzaGFyZWQgaW5kZXggJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSB1cHBkYXRlcmEgZGVsYXQgaW5kZXggXCIlc1wiIgorCisjOiByZWFkLWNhY2hlLmM6MjMzMAorIywgYy1mb3JtYXQKK21zZ2lkICJicm9rZW4gaW5kZXgsIGV4cGVjdCAlcyBpbiAlcywgZ290ICVzIgorbXNnc3RyICJ0cmFzaWd0IGluZGV4LCBmw7ZydsOkbnRhZGUgJXMgaSAlcywgZmljayAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMwMjYgc3RyYnVmLmM6MTE2MCB3cmFwcGVyLmM6NjIyIGJ1aWx0aW4vbWVyZ2UuYzoxMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHN0w6RuZ2EgXCIlc1wiIgorCisjOiByZWFkLWNhY2hlLmM6MzEyOSBzZXF1ZW5jZXIuYzoyMzQzIHNlcXVlbmNlci5jOjM5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0YSBzdGF0dXMgcMOlIFwiJXNcIiIKKworIzogcmVhZC1jYWNoZS5jOjMxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gZ2l0IGRpcjogJXMiCittc2dzdHIgImt1bmRlIGludGUgw7ZwcG5hIGdpdC1rYXRhbG9nOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVubGluazogJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBib3J0IGzDpG5rZW46ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MzE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZml4IHBlcm1pc3Npb24gYml0cyBvbiAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSByw6R0dGEgYmVow7ZyaWdoZXRzYml0YXIgcMOlIFwiJXNcIiIKKworIzogcmVhZC1jYWNoZS5jOjMzMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBkcm9wIHRvIHN0YWdlICMwIgorbXNnc3RyICIlczoga2FuIGludGUgw6V0ZXJnw6UgdGlsbCBrw7YgMCIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTEKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhpcyB3aXRoICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS0iCisiY29udGludWUnLlxuIgorIk9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLlxuIgorbXNnc3RyICIiCisiRHUga2FuIHLDpHR0YSBkZXR0YSBtZWQgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgZsO2bGp0IGF2IFwiZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZVwiLlxuIgorIkF2YnJ5dCBvbWJhc2VyaW5nZW4gbWVkIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIuXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bnJlY29nbml6ZWQgc2V0dGluZyAlcyBmb3Igb3B0aW9uIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiBJZ25vcmluZy4iCittc2dzdHIgIiIKKyJva8OkbmQgaW5zdMOkbGxuaW5nICVzIGbDtnIgZmxhZ2dhbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JlcmFyLiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NDIKK21zZ2lkICIiCiAiXG4iCi0iRsO2ciBhdHQgYmliZWjDpWxsYSBvcHRpbWFsIHByZXN0YW5kYSByZWtvbW1lbmRlcmFzIGRldCDDpSBkZXQgYmVzdMOkbWRhc3RlIGF0dCAiCi0iZHUga29tcHJpbWVyYXIgZGF0YWJhc2VuLlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21tYW5kPiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJiLCBicmVhayA9IHN0b3AgaGVyZSAoY29udGludWUgcmViYXNlIGxhdGVyIHdpdGggJ2dpdCByZWJhc2UgLS1jb250aW51ZScpXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKICJcbiIKLSJLb21wcmltZXJhIGRhdGFiYXNlbiBudT8iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIktvbW1hbmRvbjpcbiIKKyJwLCBwaWNrIDxpbmNoZWNrbmluZz4gPSBhbnbDpG5kIGluY2hlY2tuaW5nXG4iCisiciwgcmV3b3JkIDxpbmNoZWNrbmluZz4gPSBhbnbDpG5kIGluY2hlY2tuaW5nLCBtZW4gcmVkaWdlcmEgIgorImluY2hlY2tuaW5nc21lZGRlbGFuZGV0XG4iCisiZSwgZWRpdCA8aW5jaGVja25pbmc+ID0gYW52w6RuZCBpbmNoZWNrbmluZywgbWVuIHN0YW5uYSBmw7ZyIHRpbGzDpGdnXG4iCisicywgc3F1YXNoIDxpbmNoZWNrbmluZz4gPSBhbnbDpG5kIGluY2hlY2tuaW5nLCBtZW4gaW5mb2dhIGkgZsO2cmVnw6VlbmRlICIKKyJpbmNoZWNrbmluZ1xuIgorImYsIGZpeHVwIDxpbmNoZWNrbmluZz4gPSBzb20gXCJzcXVhc2hcIiwgbWVuIGbDtnJrYXN0YSAiCisiaW5jaGVja25pbmdzbWVkZGVsYW5kZXRcbiIKKyJ4LCBleGVjIDxrb21tYW5kbz4gPSBrw7ZyIGtvbW1hbmRvIChyZXN0ZW4gYXYgcmFkZW4pIGkgc2thbGV0XG4iCisiYiwgYnJlYWsgPSBzdG9wcGEgaMOkciAoZm9ydHPDpHR0IG9tYmFzZXJpbmdlbiBzZW5hcmUgbWVkIFwiZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZVwiKVxuIgorImQsIGRyb3AgPGluY2hlY2tuaW5nPiA9IHRhIGJvcnQgaW5jaGVja25pbmdcbiIKKyJsLCBsYWJlbCA8ZXRpa2V0dD4gPSBnZSBha3R1ZWxsdCBIRUFEIGV0dCBuYW1uXG4iCisidCwgcmVzZXQgPGV0aWtldHQ+ID0gw6V0ZXJzdMOkbGwgSEVBRCB0aWxsIGVuIGV0aWtldHRcbiIKKyJtLCBtZXJnZSBbLUMgPGluY2hlY2tuaW5nPiB8IC1jIDxpbmNoZWNrbmluZz5dIDxldGlrZXR0PiBbIyA8ZW5yYWRzPl1cbiIKKyIuICAgICAgIHNrYXBhIGVuIHNhbW1hbnNsYWduaW5nIG1lZCB1cnNwcnVuZ2xpZ3QgbWVkZGVsYW5kZSAoZWxsZXJcbiIKKyIuICAgICAgIGVucmFkcywgb20gaW5nZXQgaW5jaGVja25pbmdzbWVkZGVsYW5kZSBhbmdhdnMpLiBBbnbDpG5kXG4iCisiLiAgICAgICAtdiA8aW5jaGVja25pbmc+IGbDtnIgYXR0IHNrcml2YSBvbSBtZWRkZWxhbmRldC5cbiIKKyJcbiIKKyJEdSBrYW4gYnl0YSBvcmRuaW5nIHDDpSByYWRlcm5hOyBkZSB1dGbDtnJzIHVwcGlmcsOlbiBvY2ggbmVkLlxuIgogCi0jOiBsaWIvZXJyb3IudGNsOjIwIGxpYi9lcnJvci50Y2w6MTE2Ci1tc2dpZCAiZXJyb3IiCi1tc2dzdHIgImZlbCIKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmRzKSIKK21zZ3N0clswXSAiT21iYXNlcmEgJXMgcMOlICVzICglZCBrb21tYW5kbykiCittc2dzdHJbMV0gIk9tYmFzZXJhICVzIHDDpSAlcyAoJWQga29tbWFuZG9uKSIKIAotIzogbGliL2Vycm9yLnRjbDozNgotbXNnaWQgIndhcm5pbmciCi1tc2dzdHIgInZhcm5pbmciCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo3MiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjI4Cittc2dpZCAiIgorIlxuIgorIkRvIG5vdCByZW1vdmUgYW55IGxpbmUuIFVzZSAnZHJvcCcgZXhwbGljaXRseSB0byByZW1vdmUgYSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJUYSBpbnRlIGJvcnQgcmFkZXIuIEFudsOkbmQgXCJkcm9wXCIgZsO2ciBhdHQgc3BlY2lmaWt0IGbDtnJrYXN0YSBlbiAiCisiaW5jaGVja25pbmcuXG4iCiAKLSM6IGxpYi9lcnJvci50Y2w6OTYKLW1zZ2lkICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIgotbXNnc3RyICJEdSBtw6VzdGUgcsOkdHRhIHRpbGwgZmVsZW4gb3ZhbiBpbm5hbiBkdSBjaGVja2FyIGluLiIKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc1IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMzIKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPbSBkdSB0YXIgYm9ydCBlbiByYWQgS09NTUVSIERFTiBJTkNIRUNLTklOR0VOIEFUVCBGw5ZSTE9SQVMuXG4iCiAKLSN+IG1zZ2lkICJEaXNwbGF5aW5nIG9ubHkgJXMgb2YgJXMgZmlsZXMuIgotI34gbXNnc3RyICJWaXNhciBlbmRhc3QgJXMgYXYgJXMgZmlsZXIuIgorIzogcmViYXNlLWludGVyYWN0aXZlLmM6ODEgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg3MQorbXNnaWQgIiIKKyJcbiIKKyJZb3UgYXJlIGVkaXRpbmcgdGhlIHRvZG8gZmlsZSBvZiBhbiBvbmdvaW5nIGludGVyYWN0aXZlIHJlYmFzZS5cbiIKKyJUbyBjb250aW51ZSByZWJhc2UgYWZ0ZXIgZWRpdGluZywgcnVuOlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkR1IHJlZGlnZXJhciBcInRvZG9cIi1maWxlbiBmw7ZyIGVuIHDDpWfDpWVuZGUgaW50ZXJha3RpdiBvbWJhc2VyaW5nLlxuIgorIkbDtnIgYXR0IGZvcnPDpHR0YSBvbWJhc2VyYSBlZnRlciByZWRpZ2VyaW5nZW4sIGvDtnI6XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgogCi0jfiBtc2dpZCAiQ2FzZS1TZW5zaXRpdmUiCi0jfiBtc2dzdHIgIlNraWxqIHDDpSBWRVJTQUxFUi9nZW1lbmVyIgorIzogcmViYXNlLWludGVyYWN0aXZlLmM6ODYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0OAorbXNnaWQgIiIKKyJcbiIKKyJIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiT21iYXNlcmluZ2VuIGtvbW1lciBkb2NrIGF0dCBhdmJyeXRhcyBvbSBkdSB0YXIgYm9ydCBhbGx0aW5nLlxuIgorIlxuIgogCi0jfiBtc2dpZCAiQ2Fubm90IHVzZSBmdW5ueSAuZ2l0IGRpcmVjdG9yeToiCi0jfiBtc2dzdHIgIkthbiBpbnRlIGFudsOkbmRhIHVuZGVybGlnIC5naXQta2F0YWxvZzoiCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMTAgcmVyZXJlLmM6NDg1IHJlcmVyZS5jOjY5MiBzZXF1ZW5jZXIuYzozNDQ0CisjOiBzZXF1ZW5jZXIuYzozNDcwIHNlcXVlbmNlci5jOjUxMjUgYnVpbHRpbi9mc2NrLmM6MzQ2IGJ1aWx0aW4vcmViYXNlLmM6MjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSBcIiVzXCIiCiAKLSN+IG1zZ2lkICJQcmVmZXJlbmNlcy4uLiIKLSN+IG1zZ3N0ciAiSW5zdMOkbGxuaW5nYXIuLi4iCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMTYgYnVpbHRpbi9yZWJhc2UuYzoxODQgYnVpbHRpbi9yZWJhc2UuYzoyMTAKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnLiIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgXCIlc1wiLiIKIAotI34gbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgdGVzdC4pIgotI34gbXNnc3RyICJBbGx0aWQgKHV0ZsO2ciBpbnRlIHNhbW1hbnNsYWduaW5nc3Rlc3QpLiIKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc29tZSBjb21taXRzIG1heSBoYXZlIGJlZW4gZHJvcHBlZCBhY2NpZGVudGFsbHkuXG4iCisiRHJvcHBlZCBjb21taXRzIChuZXdlciB0byBvbGRlcik6XG4iCittc2dzdHIgIiIKKyJWYXJuaW5nOiB2aXNzYSBpbmNoZWNrbmluZ2FyIGthbiBhdiBtaXNzdGFnIGhhIHRhcHBhdHMuXG4iCisiVGFwcGFkZSBpbmNoZWNrbmluZ2FyIChueWFzdGUgZsO2cnN0KTpcbiIKIAotI34gbXNnaWQgIlVSTDoiCi0jfiBtc2dzdHIgIldlYmJhZHJlc3M6IgorIzogcmViYXNlLWludGVyYWN0aXZlLmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSBcImRyb3BcIiB0byBleHBsaWNpdGx5IHJlbW92ZSBhIGNvbW1pdC5cbiIKKyJcbiIKKyJVc2UgJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2YgIgorIndhcm5pbmdzLlxuIgorIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkbDtnIgYXR0IHVuZHZpa2EgZGV0IGjDpHIgbWVkZGVsYW5kZXQga2FuIGR1IGFudsOkbmRhIFwiZHJvcFwiIGbDtnIgYXR0ICIKKyJleHBsaWNpdFxuIgorImthc3RhIGVuIGluY2hlY2tuaW5nLlxuIgorIlxuIgorIkFudsOkbmQgXCJnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrXCIgZsO2ciBhdHQgw6RuZHJhICIKKyJ2YXJuaW5nc25pdsOlbi5cbiIKKyJNw7ZqbGlnYSBiZXR0ZW5kZW4gw6RyOiBcImlnbm9yZVwiIChpZ25vcmVyYSksIFwid2FyblwiICh2YXJuYSksIFwiZXJyb3IiCisiXCIgKGZlbCkuXG4iCisiXG4iCiAKLSN+IG1zZ2lkICJEZWxldGUgUmVtb3RlIEJyYW5jaCIKLSN+IG1zZ3N0ciAiVGEgYm9ydCBmasOkcnJncmVuIgorIzogcmViYXNlLWludGVyYWN0aXZlLmM6MjMzIHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjIzOCBzZXF1ZW5jZXIuYzoyMjYyCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MCBidWlsdGluL3JlYmFzZS5jOjE5NSBidWlsdGluL3JlYmFzZS5jOjIyMQorIzogYnVpbHRpbi9yZWJhc2UuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJy4iCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgXCIlc1wiLiIKKworIzogcmVmcy5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIG9iamVjdCEiCittc2dzdHIgIlwiJXNcIiBwZWthciBpbnRlIHDDpSBldHQgZ2lsdGlndCBvYmpla3QhIgorCisjOiByZWZzLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGRhbmdsaW5nIHN5bXJlZiAlcyIKK21zZ3N0ciAiaWdub3JlcmFyIGRpbmdsYW5kZSBzeW1ib2xpc2sgcmVmZXJlbnMgJXMiCisKKyM6IHJlZnMuYzo2NjkgcmVmLWZpbHRlci5jOjIwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIKK21zZ3N0ciAiaWdub3JlcmFyIHRyYXNpZyByZWZlcmVucyAlcyIKKworIzogcmVmcy5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDtnBwbmEgXCIlc1wiIGbDtnIgc2tyaXZuaW5nOiAlcyIKKworIzogcmVmcy5jOjgxNCByZWZzLmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpHNhIHJlZmVyZW5zZW4gXCIlc1wiIgorCisjOiByZWZzLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJyZWZlcmVuc2VuIFwiJXNcIiBmaW5ucyByZWRhbiIKKworIzogcmVmcy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG9iamVjdCBJRCB3aGVuIHdyaXRpbmcgJyVzJyIKK21zZ3N0ciAib3bDpG50YXQgb2JqZWt0LWlkIHZpZCBza3Jpdm5pbmcgXCIlc1wiIgorCisjOiByZWZzLmM6ODMzIHNlcXVlbmNlci5jOjQwNyBzZXF1ZW5jZXIuYzoyNzAxIHNlcXVlbmNlci5jOjI5MDUKKyM6IHNlcXVlbmNlci5jOjI5MTkgc2VxdWVuY2VyLmM6MzE3NyBzZXF1ZW5jZXIuYzo1MDM2IHN0cmJ1Zi5jOjExNTcKKyM6IHdyYXBwZXIuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIHRpbGwgXCIlc1wiIgorCisjOiByZWZzLmM6ODYwIHN0cmJ1Zi5jOjExNTUgd3JhcHBlci5jOjE4OCB3cmFwcGVyLmM6MzU4IGJ1aWx0aW4vYW0uYzo3MTkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTAyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSBcIiVzXCIgZsO2ciBza3Jpdm5pbmciCisKKyM6IHJlZnMuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiBkZWxldGluZyAnJXMnIgorbXNnc3RyICJvdsOkbnRhdCBvYmpla3QtaWQgdmlkIGJvcnR0YWduaW5nIFwiJXNcIiIKKworIzogcmVmcy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyBoYXMgZ2FwIGFmdGVyICVzIgorbXNnc3RyICJsb2dnZW4gZsO2ciByZWZlcmVuc2VuICVzIGhhciBsdWNrYSBlZnRlciAlcyIKKworIzogcmVmcy5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgdW5leHBlY3RlZGx5IGVuZGVkIG9uICVzIgorbXNnc3RyICJsb2dnZW4gZsO2ciByZWZlcmVuc2VuICVzIHNsdXRhZGUgb3bDpG50YXQgcMOlICVzIgorCisjOiByZWZzLmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICVzIGlzIGVtcHR5IgorbXNnc3RyICJsb2dnZW4gZsO2ciAlcyDDpHIgdG9tIgorCisjOiByZWZzLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byB1cGRhdGUgcmVmIHdpdGggYmFkIG5hbWUgJyVzJyIKK21zZ3N0ciAidsOkZ3JhciB1cHBkYXRlcmEgcmVmZXJlbnMgbWVkIHRyYXNpZ3QgbmFtbiBcIiVzXCIiCisKKyM6IHJlZnMuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVwZGF0ZV9yZWYgZmFpbGVkIGZvciByZWYgJyVzJzogJXMiCittc2dzdHIgInVwZGF0ZV9yZWYgbWlzc2x5Y2thZGVzIGbDtnIgcmVmZXJlbnNlbiBcIiVzXCI6ICVzIgorCisjOiByZWZzLmM6MjAyMworIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSB1cGRhdGVzIGZvciByZWYgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAiZmxlcmEgdXBwZGF0ZXJpbmdhciBmw7ZyIHJlZmVyZW5zZW4gXCIlc1wiIHRpbGzDpXRzIGludGUiCisKKyM6IHJlZnMuYzoyMDU1Cittc2dpZCAicmVmIHVwZGF0ZXMgZm9yYmlkZGVuIGluc2lkZSBxdWFyYW50aW5lIGVudmlyb25tZW50IgorbXNnc3RyICJyZWZlcmVuc3VwcGRhdGVyaW5nYXIgZsO2cmJqdWRuYSBpIGthcmFudMOkbm1pbGrDtiIKKworIzogcmVmcy5jOjIxNTEgcmVmcy5jOjIxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiXCIlc1wiIGZpbm5zOyBrYW4gaW50ZSBza2FwYSBcIiVzXCIiCisKKyM6IHJlZnMuYzoyMTU3IHJlZnMuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAia2FuIGludGUgaGFudGVyYSBcIiVzXCIgb2NoIFwiJXNcIiBzYW10aWRpZ3QiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgImt1bmRlIGludGUgdGEgYm9ydCByZWZlcmVuc2VuICVzIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjQ3IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTQxCisjOiByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZSAlczogJXMiCittc2dzdHIgImt1bmRlIGludGUgdGEgYm9ydCByZWZlcmVuc2VuICVzOiAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI1MCByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZXM6ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHRhIGJvcnQgcmVmZXJlbnNlcjogJXMiCisKKyM6IHJlZnNwZWMuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZzcGVjICclcyciCittc2dzdHIgImZlbGFrdGlnIHJlZmVyZW5zc3BlY2lmaWthdGlvbjogXCIlc1wiIgorCisjOiByZWYtZmlsdGVyLmM6NDIgd3Qtc3RhdHVzLmM6MTkzOAorbXNnaWQgImdvbmUiCittc2dzdHIgImbDtnJzdnVubmVuIgorCisjOiByZWYtZmlsdGVyLmM6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQiCittc2dzdHIgImbDtnJlICVkIgorCisjOiByZWYtZmlsdGVyLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmVoaW5kICVkIgorbXNnc3RyICJiYWtvbSAlZCIKKworIzogcmVmLWZpbHRlci5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWQiCittc2dzdHIgImbDtnJlICVkLCBiYWtvbSAlZCIKKworIzogcmVmLWZpbHRlci5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGNvbG9yOjxjb2xvcj4pIgorbXNnc3RyICJmw7ZydsOkbnRhdCBmb3JtYXQ6ICUlKGNvbG9yOjxjb2xvcj4pIgorCisjOiByZWYtZmlsdGVyLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBjb2xvcjogJSUoY29sb3I6JXMpIgorbXNnc3RyICJva8OkbmQgZsOkcmc6ICUlKGNvbG9yOiVzKSIKKworIzogcmVmLWZpbHRlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6bHN0cmlwPSVzIgorbXNnc3RyICJIZWx0YWxzdsOkcmRlIGbDtnJ2w6RudGFkZXMgcmVmbmFtZTpsc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOnJzdHJpcD0lcyIKK21zZ3N0ciAiSGVsdGFsc3bDpHJkZSBmw7ZydsOkbnRhZGVzIHJlZm5hbWU6cnN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJSglcykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJva8OkbnQgJSUoJXMpLWFyZ3VtZW50OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShvYmplY3R0eXBlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUob2JqZWN0dHlwZSkgdGFyIGludGUgYXJndW1lbnQiCisKKyM6IHJlZi1maWx0ZXIuYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdHNpemUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAib2vDpG50ICUlKG9iamVjdHNpemUpLWFyZ3VtZW50OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShkZWx0YWJhc2UpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShkZWx0YWJhc2UpIHRhciBpbnRlIGFyZ3VtZW50IgorCisjOiByZWYtZmlsdGVyLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGJvZHkpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShib2R5KSB0YXIgaW50ZSBhcmd1bWVudCIKKworIzogcmVmLWZpbHRlci5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlJShzdWJqZWN0KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoc3ViamVjdCkgdGFyIGludGUgYXJndW1lbnQiCisKKyM6IHJlZi1maWx0ZXIuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAlJSh0cmFpbGVycykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJva8OkbnQgJSUodHJhaWxlcnMpLWFyZ3VtZW50OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAicG9zaXRpdnQgdsOkcmRlIGbDtnJ2w6RudGF0IGNvbnRlbnRzOmxpbmVzPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShjb250ZW50cykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJva8OkbnQgJSUoY29udGVudHMpLWFyZ3VtZW50OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBvYmplY3RuYW1lOnNob3J0PSVzIgorbXNnc3RyICJwb3NpdGl2dCB2w6RyZGUgZsO2cnbDpG50YXQgb2JqZWN0bmFtZTpzaG9ydD0lcyIKKworIzogcmVmLWZpbHRlci5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0bmFtZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJva8OkbnQgJSUob2JqZWN0bmFtZSktYXJndW1lbnQ6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoYWxpZ246PHdpZHRoPiw8cG9zaXRpb24+KSIKK21zZ3N0ciAiZsO2cnbDpG50YXQgZm9ybWF0OiAlJShhbGlnbjo8YnJlZGQ+LDxwb3NpdGlvbj4pIgorCisjOiByZWYtZmlsdGVyLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwb3NpdGlvbjolcyIKK21zZ3N0ciAib2vDpG5kIHBvc2l0aW9uOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAib2vDpG5kIGJyZWRkOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJva8OkbnQgJSUoYWxpZ24pLWFyZ3VtZW50OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB3aWR0aCBleHBlY3RlZCB3aXRoIHRoZSAlJShhbGlnbikgYXRvbSIKK21zZ3N0ciAicG9zaXRpdiBicmVkZCBmw7ZydsOkbnRhZCBtZWQgYXRvbWVuICUlKGFsaWduKSIKKworIzogcmVmLWZpbHRlci5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoaWYpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAib2vDpG50ICUlKGlmKS1hcmd1bWVudDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgImZlbGZvcm1hdCBmw6RsdG5hbW46ICUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICJva8OkbnQgZsOkbHRuYW1uOiAlLipzIgorCisjOiByZWYtZmlsdGVyLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSwgYnV0IHRoZSBmaWVsZCAnJS4qcycgcmVxdWlyZXMgYWNjZXNzIHRvIG9iamVjdCBkYXRhIgorbXNnc3RyICIiCisiaW50ZSBldHQgZ2l0LWFya2l2LCBtZW4gZsOkbHRldCBcIiUuKnNcIiBrcsOkdmVyIHRpbGxnw6VuZyB0aWxsIG9iamVrdGRhdGEiCisKKyM6IHJlZi1maWx0ZXIuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShpZikgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICJmb3JtYXQ6IGF0b21lbiAlJShpZikgYW52w6RuZCB1dGFuIGVuICUlKHRoZW4pLWF0b20iCisKKyM6IHJlZi1maWx0ZXIuYzo3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0OiBhdG9tZW4gJSUodGhlbikgYW52w6RuZCB1dGFuIGVuICUlKGlmKS1hdG9tIgorCisjOiByZWYtZmlsdGVyLmM6Nzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICJmb3JtYXQ6IGF0b21lbiAlJSh0aGVuKSBhbnbDpG5kIG1lciDDpG4gZW4gZ8OlbmciCisKKyM6IHJlZi1maWx0ZXIuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgYWZ0ZXIgJSUoZWxzZSkiCittc2dzdHIgImZvcm1hdDogYXRvbWVuICUlKHRoZW4pIGFudsOkbmQgZWZ0ZXIgJSUoZWxzZSkiCisKKyM6IHJlZi1maWx0ZXIuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0OiBhdG9tZW4gJSUoZWxzZSkgYW52w6RuZCB1dGFuIGVuICUlKGlmKS1hdG9tIgorCisjOiByZWYtZmlsdGVyLmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICJmb3JtYXQ6IGF0b21lbiAlJShlbHNlKSBhbnbDpG5kIHV0YW4gZW4gJSUodGhlbiktYXRvbSIKKworIzogcmVmLWZpbHRlci5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAiZm9ybWF0OiBhdG9tZW4gJSUoZWxzZSkgYW52w6RuZCBtZXIgw6RuIGVuIGfDpW5nIgorCisjOiByZWYtZmlsdGVyLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIHVzZWQgd2l0aG91dCBjb3JyZXNwb25kaW5nIGF0b20iCittc2dzdHIgImZvcm1hdDogYXRvbWVuICUlKGVuZCkgYW52w6RuZCB1dGFuIG1vdHN2YXJhbmRlIGF0b20iCisKKyM6IHJlZi1maWx0ZXIuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgImZlbGZvcm1hZCBmb3JtYXRzdHLDpG5nICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIHJlYmFzaW5nICVzIgorbXNnc3RyICJpbmdlbiBncmVuLCBvbWJhc2VyYXIgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgcmViYXNpbmcgZGV0YWNoZWQgSEVBRCAlcyIKK21zZ3N0ciAiaW5nZW4gZ3Jlbiwgb21iYXNlcmFyIGZyw6Vua29wcGxhdCBIRUFEICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIGJpc2VjdCBzdGFydGVkIG9uICVzIgorbXNnc3RyICJpbmdlbiBncmVuLCBcImJpc2VjdFwiIHN0YXJ0YWQgcMOlICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTUwNAorbXNnaWQgIm5vIGJyYW5jaCIKK21zZ3N0ciAiaW5nZW4gZ3JlbiIKKworIzogcmVmLWZpbHRlci5jOjE1NDAgcmVmLWZpbHRlci5jOjE3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBvYmplY3QgJXMgZm9yICVzIgorbXNnc3RyICJvYmpla3RldCAlcyBzYWtuYXMgZsO2ciAlcyIKKworIzogcmVmLWZpbHRlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWlsZWQgb24gJXMgZm9yICVzIgorbXNnc3RyICJwYXJzZV9vYmplY3RfYnVmZmVyIG1pc3NseWNrYWRlcyBww6UgJXMgZsO2ciAlcyIKKworIzogcmVmLWZpbHRlci5jOjIwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICJmZWxmb3JtYXQgb2JqZWt0IHZpZCBcIiVzXCIiCisKKyM6IHJlZi1maWx0ZXIuYzoyMDkzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHJlZiB3aXRoIGJyb2tlbiBuYW1lICVzIgorbXNnc3RyICJpZ25vcmVyYXIgcmVmZXJlbnMgbWVkIHRyYXNpZ3QgbmFtbiAlcyIKKworIzogcmVmLWZpbHRlci5jOjIzODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gbWlzc2luZyIKK21zZ3N0ciAiZm9ybWF0OiBhdG9tZW4gJSUoZW5kKSBzYWtuYXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbWVyZ2VkIgorbXNnc3RyICJmbGFnZ2FuIFwiJXNcIiDDpHIgaW5rb21wYXRpYmVsIG1lZCAtLW1lcmdlZCIKKworIzogcmVmLWZpbHRlci5jOjI0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1tZXJnZWQiCittc2dzdHIgImZsYWdnYW4gXCIlc1wiIMOkciBpbmtvbXBhdGliZWwgbWVkIC0tbm8tbWVyZ2VkIgorCisjOiByZWYtZmlsdGVyLmM6MjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgImZlbGZvcm1hdCBvYmpla3RuYW1uICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBtdXN0IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICJmbGFnZ2FuIFwiJXNcIiBtw6VzdGUgcGVrYSBww6UgZW4gaW5jaGVja25pbmciCisKKyM6IHJlbW90ZS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICJrb25maWd1cmVyYWQga29ydGZvcm0gZsO2ciBmasOkcnIga2FuIGludGUgYsO2cmphIG1lZCBcIi9cIjogJXMiCisKKyM6IHJlbW90ZS5jOjQxNAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgcmVjZWl2ZXBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAibWVyIMOkbiBlbiByZWNlaXZlcGFjayBhbmdhdnMsIGFudsOkbmRlciBkZW4gZsO2cnN0YSIKKworIzogcmVtb3RlLmM6NDIyCittc2dpZCAibW9yZSB0aGFuIG9uZSB1cGxvYWRwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgIm1lciDDpG4gZW4gdXBsb2FkcGFjayBhbmdhdnMsIGFudsOkbmRlciBkZW4gZsO2cnN0YSIKKworIzogcmVtb3RlLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAiS2FuIGludGUgaMOkbXRhIGLDpWRlICVzIG9jaCAlcyB0aWxsICVzIgorCisjOiByZW1vdGUuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMgc3DDpXJhciB2YW5saWd0dmlzICVzLCBpbnRlICVzIgorCisjOiByZW1vdGUuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlcyBzcMOlcmFyIGLDpWRlICVzIG9jaCAlcyIKKworIzogcmVtb3RlLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImtleSAnJXMnIG9mIHBhdHRlcm4gaGFkIG5vICcqJyIKK21zZ3N0ciAibnlja2VsbiBcIiVzXCIgaSBtw7Zuc3RyZXQgaW5uZWjDpWxsZXIgaW5nZW4gXCIqXCIiCisKKyM6IHJlbW90ZS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIKK21zZ3N0ciAidsOkcmRldCBcIiVzXCIgaSBtw7Zuc3RyZXQgaW5uZWjDpWxsZXIgaW5nZW4gXCIqXCIiCisKKyM6IHJlbW90ZS5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgZG9lcyBub3QgbWF0Y2ggYW55IgorbXNnc3RyICJrw6RsbC1yZWZlcmVuc3NwZWNpZmlrYXRpb25lbiAlcyBtb3RzdmFyYXIgaW5nZW4iCisKKyM6IHJlbW90ZS5jOjEwMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICJrw6RsbC1yZWZlcmVuc3NwZWNpZmlrYXRpb25lbiAlcyBtb3RzdmFyYXIgbWVyIMOkbiBlbiIKKworIy4gVFJBTlNMQVRPUlM6ICJtYXRjaGVzICclcyclIiBpcyB0aGUgPGRzdD4gcGFydCBvZiAiZ2l0IHB1c2gKKyMuIDxyZW1vdGU+IDxzcmM+Ojxkc3Q+IiBwdXNoLCBhbmQgImJlaW5nIHB1c2hlZCAoJyVzJykiIGlzCisjLiB0aGUgPHNyYz4uCisjLgorIzogcmVtb3RlLmM6MTAyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRlc3RpbmF0aW9uIHlvdSBwcm92aWRlZCBpcyBub3QgYSBmdWxsIHJlZm5hbWUgKGkuZS4sXG4iCisic3RhcnRpbmcgd2l0aCBcInJlZnMvXCIpLiBXZSB0cmllZCB0byBndWVzcyB3aGF0IHlvdSBtZWFudCBieTpcbiIKKyJcbiIKKyItIExvb2tpbmcgZm9yIGEgcmVmIHRoYXQgbWF0Y2hlcyAnJXMnIG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyItIENoZWNraW5nIGlmIHRoZSA8c3JjPiBiZWluZyBwdXNoZWQgKCclcycpXG4iCisiICBpcyBhIHJlZiBpbiBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBJZiBzbyB3ZSBhZGQgYSBjb3JyZXNwb25kaW5nXG4iCisiICByZWZzL3toZWFkcyx0YWdzfS8gcHJlZml4IG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyJcbiIKKyJOZWl0aGVyIHdvcmtlZCwgc28gd2UgZ2F2ZSB1cC4gWW91IG11c3QgZnVsbHkgcXVhbGlmeSB0aGUgcmVmLiIKK21zZ3N0ciAiIgorIk3DpWxldCBkdSBhbmdhdiDDpHIgaW50ZSBldHQga29tcGxldHQgcmVmZXJlbnNhbW4gKGR2cy4sXG4iCisic3RhcnRhciBtZWQgXCJyZWZzL1wiKS4gVmkgZsO2cnPDtmt0ZSBnaXNzYSB2YWQgZHUgbWVuYWRlIGdlbm9tIGF0dDpcbiIKKyJcbiIKKyItIFNlIGVmdGVyIGVuIHJlZmVyZW5zIHNvbSBtb3RzdmFyYXIgXCIlc1wiIHDDpSBmasOkcnJzaWRhbi5cbiIKKyItIFNlIG9tIDxrw6RsbGFuPiBzb20gc8OkbmRzIChcIiVzXCIpXG4iCisiICDDpHIgZW4gcmVmZXJlbnMgaSBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBPbSBzw6UgbMOkZ2dlciB2aSB0aWxsXG4iCisiICBtb3RzdmFyYW5kZSByZWZzL3toZWFkcyx0YWdzfS8tcHJlZml4IHDDpSBmasOkcnJzaWRhbi5cbiIKKyJcbiIKKyJJbmdldCBhdiBkZW0gZnVuZ2VyYWRlLCBzw6UgdmkgZ2F2IHVwcC4gQW5nZSBmdWxsc3TDpG5kaWcgcmVmZXJlbnMuIgorCisjOiByZW1vdGUuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGNvbW1pdCBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL2hlYWRzLyVzJz8iCittc2dzdHIgIiIKKyI8S8OkbGxhPi1kZWxlbiBhdiByZWYuc3BlYy1lbiDDpHIgZXR0IGluY2hlY2tuaW5nc29iamVrdC5cbiIKKyJWYXIgZGV0IG1lbmluZ2VuIGF0dCBza2FwYSBlbiBueSBncmVuIGdlbm9tIGF0dCBzw6RuZGFcbiIKKyJ0aWxsIFwiJXM6cmVmcy9oZWFkcy8lc1wiPyIKKworIzogcmVtb3RlLmM6MTA0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0YWcgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgdGFnIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyI8S8OkbGxhPi1kZWxlbiBhdiByZWYuc3BlYy1lbiDDpHIgZXR0IHRhZ2dvYmpla3QuXG4iCisiVmFyIGRldCBtZW5pbmdlbiBhdHQgc2thcGEgZW4gbnkgdGFnZyBnZW5vbSBhdHQgc8OkbmRhXG4iCisidGlsbCBcIiVzOnJlZnMvdGFncy8lc1wiPyIKKworIzogcmVtb3RlLmM6MTA1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IHRyZWUgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIjxLw6RsbGE+LWRlbGVuIGF2IHJlZi5zcGVjLWVuIMOkciBldHQgdHLDpGRvYmpla3QuXG4iCisiVmFyIGRldCBtZW5pbmdlbiBhdHQgdGFnZ2EgZXR0IG55dHQgdHLDpGQgZ2Vub20gYXR0IHPDpG5kYVxuIgorInRpbGwgXCIlczpyZWZzL3RhZ3MvJXNcIj8iCisKKyM6IHJlbW90ZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgYmxvYiBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyBibG9iIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyI8S8OkbGxhPi1kZWxlbiBhdiByZWYuc3BlYy1lbiDDpHIgZXR0IGJsb2JvYmpla3QuXG4iCisiVmFyIGRldCBtZW5pbmdlbiBhdHQgdGFnZ2EgZW4gbnkgYmxvYiBnZW5vbSBhdHQgc8OkbmRhXG4iCisidGlsbCBcIiVzOnJlZnMvdGFncy8lc1wiPyIKKworIzogcmVtb3RlLmM6MTA5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYnJhbmNoIgorbXNnc3RyICIlcyBrYW4gaW50ZSBzbMOlcyB1cHAgdGlsbCBlbiBncmVuIgorCisjOiByZW1vdGUuYzoxMTA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWxldGUgJyVzJzogcmVtb3RlIHJlZiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAia2FuIGludGUgdGEgYm9ydCBcIiVzXCI6IGZqw6RycmVmZXJlbnNlbiBmaW5ucyBpbnRlIgorCisjOiByZW1vdGUuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAiZmrDpHJyLXJlZmVyZW5zc3BlY2lmaWthdGlvbmVuIFwiJXNcIiBtb3RzdmFyYXIgbWVyIMOkbiBlbiIKKworIzogcmVtb3RlLmM6MTEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmICVzIHJlY2VpdmVzIGZyb20gbW9yZSB0aGFuIG9uZSBzcmMiCittc2dzdHIgImZqw6Ryci1yZWZlcmVuc2VuIFwiJXNcIiBow6RtdGFyIGZyw6VuIG1lciDDpG4gZW4ga8OkbGxhIgorCisjOiByZW1vdGUuYzoxNjI4IHJlbW90ZS5jOjE3MjkKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICJIRUFEIHBla2FyIGludGUgcMOlIGVuIGdyZW4iCisKKyM6IHJlbW90ZS5jOjE2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgIm9rw6RuZCBncmVuOiBcIiVzXCIiCisKKyM6IHJlbW90ZS5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICclcyciCittc2dzdHIgImluZ2VuIHN0YW5kYXJkdXBwc3Ryw7ZtIGFuZ2l2ZW4gZsO2ciBncmVuZW4gXCIlc1wiIgorCisjOiByZW1vdGUuYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJ1cHBzdHLDtm1zZ3JlbmVuIFwiJXNcIiDDpHIgaW50ZSBsYWdyYWQgc29tIGVuIGZqw6RycnNww6VyYW5kZSBncmVuIgorCisjOiByZW1vdGUuYzoxNjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggZGVzdGluYXRpb24gJyVzJyBvbiByZW1vdGUgJyVzJyBoYXMgbm8gbG9jYWwgdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJwdXNoLW3DpWxldCBcIiVzXCIgcMOlIGZqw6RycmVuIFwiJXNcIiBoYXIgaW5nZW4gbG9rYWx0IHNww6VyYW5kZSBncmVuIgorCisjOiByZW1vdGUuYzoxNjczCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciCittc2dzdHIgImdyZW5lbiBcIiVzXCIgaGFyIGluZ2VuIGZqw6RyciBmw7ZyIFwicHVzaFwiIgorCisjOiByZW1vdGUuYzoxNjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggcmVmc3BlY3MgZm9yICclcycgZG8gbm90IGluY2x1ZGUgJyVzJyIKK21zZ3N0ciAiXCJwdXNoXCItcmVmZXJlbnNzcGVjaWZpa2F0aW9uIGbDtnIgXCIlc1wiIGlubmVow6VsbGVyIGludGUgXCIlc1wiIgorCisjOiByZW1vdGUuYzoxNjk2Cittc2dpZCAicHVzaCBoYXMgbm8gZGVzdGluYXRpb24gKHB1c2guZGVmYXVsdCBpcyAnbm90aGluZycpIgorbXNnc3RyICJcInB1c2hcIiBoYXIgaW5nZXQgbcOlbCAocHVzaC5kZWZhdWx0IMOkciBcImluZ2VudGluZ1wiKSIKKworIzogcmVtb3RlLmM6MTcxOAorbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgIlwiZW5rZWwgcHVzaFwiIG1vdHN2YXJhciBmbGVyYSBvbGlrYSBtw6VsIgorCisjOiByZW1vdGUuYzoxODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSBmasOkcnItcmVmZXJlbnNlbiAlcyIKKworIzogcmVtb3RlLmM6MTg1NworIywgYy1mb3JtYXQKK21zZ2lkICIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiCittc2dzdHIgIiogSWdub3JlcmFyIG3DpHJrbGlnIHJlZmVyZW5zIFwiJXNcIiBsb2thbHQiCisKKyM6IHJlbW90ZS5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICJEaW4gZ3JlbiDDpHIgYmFzZXJhZCBww6UgXCIlc1wiLCBtZW4gZGVuIGhhciBmw7Zyc3Z1bm5pdCB1cHBzdHLDtm1zLlxuIgorCisjOiByZW1vdGUuYzoyMDI0Cittc2dpZCAiICAodXNlIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgdG8gZml4dXApXG4iCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiBmw7ZyIGF0dCByw6R0dGEpXG4iCisKKyM6IHJlbW90ZS5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAgdG8gZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgIkRpbiBncmVuIMOkciDDoCBqb3VyIG1lZCBcIiVzXCIuXG4iCisKKyM6IHJlbW90ZS5jOjIwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggYW5kICclcycgcmVmZXIgdG8gZGlmZmVyZW50IGNvbW1pdHMuXG4iCittc2dzdHIgIkRpbiBncmVuIG9jaCBcIiVzXCIgcGVrYXIgcMOlIG9saWthIGluY2hlY2tuaW5nYXIuXG4iCisKKyM6IHJlbW90ZS5jOjIwMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiJXNcIiBmb3IgZGV0YWlscylcbiIKK21zZ3N0ciAiICAoYW52w6RuZCBcIiVzXCIgZsO2ciBkZXRhbGplcilcbiIKKworIzogcmVtb3RlLmM6MjAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICJEaW4gZ3JlbiBsaWdnZXIgZsO2cmUgXCIlc1wiIG1lZCAlZCBpbmNoZWNrbmluZy5cbiIKK21zZ3N0clsxXSAiRGluIGdyZW4gbGlnZ2VyIGbDtnJlIFwiJXNcIiBtZWQgJWQgaW5jaGVja25pbmdhci5cbiIKKworIzogcmVtb3RlLmM6MjA0NAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgcHVzaFwiIGbDtnIgYXR0IHB1YmxpY2VyYSBkaW5hIGxva2FsYSBpbmNoZWNrbmluZ2FyKVxuIgorCisjOiByZW1vdGUuYzoyMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKKyJEaW4gZ3JlbiBsaWdnZXIgZWZ0ZXIgXCIlc1wiIG1lZCAlZCBpbmNoZWNrbmluZywgb2NoIGthbiBzbmFiYnNwb2xhcy5cbiIKK21zZ3N0clsxXSAiIgorIkRpbiBncmVuIGxpZ2dlciBlZnRlciBcIiVzXCIgbWVkICVkIGluY2hlY2tuaW5nYXIsIG9jaCBrYW4gc25hYmJzcG9sYXMuXG4iCisKKyM6IHJlbW90ZS5jOjIwNTUKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCBwdWxsXCIgZsO2ciBhdHQgdXBwZGF0ZXJhIGRpbiBsb2thbGEgZ3JlbilcbiIKKworIzogcmVtb3RlLmM6MjA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKKyJEaW4gZ3JlbiBvY2ggXCIlc1wiIGhhciBkaXZlcmdlcmF0LFxuIgorIm9jaCBoYXIgJWQgcmVzcGVrdGl2ZSAlZCBvbGlrYSBpbmNoZWNrbmluZy5cbiIKK21zZ3N0clsxXSAiIgorIkRpbiBncmVuIG9jaCBcIiVzXCIgaGFyIGRpdmVyZ2VyYXQsXG4iCisib2NoIGhhciAlZCByZXNwZWt0aXZlICVkIG9saWthIGluY2hlY2tuaW5nYXIuXG4iCisKKyM6IHJlbW90ZS5jOjIwNjgKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpXG4iCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgcHVsbFwiIGbDtnIgYXR0IHNsw6UgaWhvcCBmasOkcnJncmVuZW4gbWVkIGRpbiBlZ2VuKVxuIgorCisjOiByZW1vdGUuYzoyMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBleHBlY3RlZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSB0b2xrYSBmw7ZydsOkbnRhdCBvYmpla3RuYW1uIFwiJXNcIiIKKworIzogcmVwbGFjZS1vYmplY3QuYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiCittc2dzdHIgImZlbGFrdGlnIGVyc8OkdHRuaW5nc3JlZmVyZW5zbmFtbjogJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAiZHVwbGljZXJhdCBlcnPDpHR0bmluZ3NyZWZlcmVuc25hbW46ICVzIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgZGVwdGggdG9vIGhpZ2ggZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAiZXJzw6R0dG5pbmdzZGp1cGV0IGbDtnIgaMO2Z3QgZsO2ciBvYmpla3RldCAlcyIKKworIzogcmVyZXJlLmM6MjE3IHJlcmVyZS5jOjIyNiByZXJlcmUuYzoyMjkKK21zZ2lkICJjb3JydXB0IE1FUkdFX1JSIgorbXNnc3RyICJ0cmFzaWcgTUVSR0VfUlIiCisKKyM6IHJlcmVyZS5jOjI2NCByZXJlcmUuYzoyNjkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVyZXJlIHJlY29yZCIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgcmVyZXJlLXBvc3QiCisKKyM6IHJlcmVyZS5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICclcycgKCVzKSIKK21zZ3N0ciAiZmVsIHZpZCBza3Jpdm5pbmcgYXYgXCIlc1wiICglcykiCisKKyM6IHJlcmVyZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmx1c2ggJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNwb2xhIFwiJXNcIiIKKworIzogcmVyZXJlLmM6NTAzIHJlcmVyZS5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbmZsaWN0IGh1bmtzIGluICclcyciCittc2dzdHIgImt1bmRlIGludGUgdG9sa2Ega29uZmxpa3Qtc3R5Y2tldCBpIFwiJXNcIiIKKworIzogcmVyZXJlLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB1dGltZSgpIG9uICclcyciCittc2dzdHIgIlwidXRpbWUoKVwiIG1pc3NseWNrYWRlcyBww6UgXCIlc1wiIgorCisjOiByZXJlcmUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrcml2YSBcIiVzXCIiCisKKyM6IHJlcmVyZS5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAiS8O2YWRlIFwiJXNcIiBtZWQgc3BhcmFkIGzDtnNuaW5nLiIKKworIzogcmVyZXJlLmM6NzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHJlc29sdXRpb24gZm9yICclcycuIgorbXNnc3RyICJTcGFyYWRlIGzDtnNuaW5nIGbDtnIgXCIlc1wiLiIKKworIzogcmVyZXJlLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc29sdmVkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIkzDtnN0ZSBcIiVzXCIgbWVkIHRpZGlnYXJlIGzDtnNuaW5nLiIKKworIzogcmVyZXJlLmM6ODAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgc3RyYXkgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgdGEgYm9ydCBsw7ZzIGzDpG5rIFwiJXNcIiIKKworIzogcmVyZXJlLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICJTcGFyYWRlIGbDtnJoYW5kc2JpbGQgZsO2ciBcIiVzXCIiCisKKyM6IHJlcmVyZS5jOjg4MSBzdWJtb2R1bGUuYzoyMDc4IGJ1aWx0aW4vbG9nLmM6MTg3MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBrYXRhbG9nZW4gXCIlc1wiIgorCisjOiByZXJlcmUuYzoxMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgY29uZmxpY3RlZCBzdGF0ZSBpbiAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdXBwZGF0ZXJhIHRpbGxzdMOlbmQgZsO2ciBzYW1tYW5zbGFnbmluZ3Nwcm9ibGVtIGkgXCIlc1wiIgorCisjOiByZXJlcmUuYzoxMDY4IHJlcmVyZS5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIgorbXNnc3RyICJpbmdldCBzcGFyYXQgc2FtbWFuc2xhZ25pbmdzcmVzdWx0YXQgZsO2ciBcIiVzXCIiCisKKyM6IHJlcmVyZS5jOjEwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSB0YSBib3J0IGzDpG5rZW4gXCIlc1wiIgorCisjOiByZXJlcmUuYzoxMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIlVwcGRhdGVyYWRlIGbDtnJoYW5kc2JpbGQgZsO2ciBcIiVzXCIiCisKKyM6IHJlcmVyZS5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9yZ290IHJlc29sdXRpb24gZm9yICclcydcbiIKK21zZ3N0ciAiR2zDtm1kZSBsw7ZzbmluZyBmw7ZyIFwiJXNcIlxuIgorCisjOiByZXJlcmUuYzoxMTk5Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcnItY2FjaGUgZGlyZWN0b3J5IgorbXNnc3RyICJrYW4gaW50ZSB1cHBkYXRlcmEga2F0YWxvZ2VuIHJyLWNhY2hlIgorCisjOiByZXZpc2lvbi5jOjI0OTcKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoIGFwcGVhcnMgdG8gYmUgYnJva2VuIgorbXNnc3RyICJkaW4gbnV2YXJhbmRlIGdyZW4gdmVya2FyIHZhcmEgdHJhc2lnIgorCisjOiByZXZpc2lvbi5jOjI1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdHMgeWV0IgorbXNnc3RyICJkaW4gbnV2YXJhbmRlIGdyZW4gXCIlc1wiIGlubmVow6VsbGVyIMOkbm51IGludGUgbsOlZ3JhIGluY2hlY2tuaW5nYXIiCisKKyM6IHJldmlzaW9uLmM6MjcwOAorbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnc3RyICItLWZpcnN0LXBhcmVudCDDpHIgaW5rb21wYXRpYmVsdCBtZWQgLS1iaXNlY3QiCisKKyM6IHJldmlzaW9uLmM6MjcxMgorbXNnaWQgIi1MIGRvZXMgbm90IHlldCBzdXBwb3J0IGRpZmYgZm9ybWF0cyBiZXNpZGVzIC1wIGFuZCAtcyIKK21zZ3N0ciAiLUwgc3TDtmRlciDDpG5udSBpbnRlIGFuZHJhIGRpZmYtZm9ybWF0IMOkbiAtcCBvY2ggLXMiCisKKyM6IHJ1bi1jb21tYW5kLmM6NzYzCittc2dpZCAib3BlbiAvZGV2L251bGwgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgw7ZwcG5hIC9kZXYvbnVsbCIKKworIzogcnVuLWNvbW1hbmQuYzoxMjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYXN5bmMgdGhyZWFkOiAlcyIKK21zZ3N0ciAia2FuIGludGUgc2thcGEgYXN5bmtyb24gdHLDpWQ6ICVzIgorCisjOiBydW4tY29tbWFuZC5jOjEzMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAnJXMnIGhvb2sgd2FzIGlnbm9yZWQgYmVjYXVzZSBpdCdzIG5vdCBzZXQgYXMgZXhlY3V0YWJsZS5cbiIKKyJZb3UgY2FuIGRpc2FibGUgdGhpcyB3YXJuaW5nIHdpdGggYGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlYC4iCittc2dzdHIgIiIKKyJLcm9rZW4gXCIlc1wiIGlnbm9yZXJhZGVzIGVmdGVyc29tIGRlbiBpbnRlIMOkciBtYXJrZXJhZCBzb20ga8O2cmJhci5cbiIKKyJEdSBrYW4gaW5ha3RpdmVyYSB2YXJuaW5nZW4gbWVkIFwiZ2l0IGNvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgZmFsc2VcIi4iCisKKyM6IHNlbmQtcGFjay5jOjE0NAorbXNnaWQgInVuZXhwZWN0ZWQgZmx1c2ggcGFja2V0IHdoaWxlIHJlYWRpbmcgcmVtb3RlIHVucGFjayBzdGF0dXMiCittc2dzdHIgIm92w6RudGF0IGZsdXNoLXBha2V0IHZpZCBsw6RzbmluZyBhdiBmasOkcnJ1cHBhY2tuaW5nc3N0YXR1cyIKKworIzogc2VuZC1wYWNrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSByZW1vdGUgdW5wYWNrIHN0YXR1czogJXMiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgZmrDpHJydXBwYWNrbmluZ3NzdGF0dXM6ICVzIgorCisjOiBzZW5kLXBhY2suYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIHVucGFjayBmYWlsZWQ6ICVzIgorbXNnc3RyICJmasOkcnJ1cHBhY2tuaW5nIG1pc3NseWNrYWRlczogJXMiCisKKyM6IHNlbmQtcGFjay5jOjMwOQorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdW5kZXJ0ZWNrbmEgcHVzaC1jZXJ0aWZpa2F0ZXQiCisKKyM6IHNlbmQtcGFjay5jOjQyMworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAibW90dGFnYXJzaWRhbiBzdMO2ZGVyIGludGUgcHVzaCBtZWQgLS1zaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQyNQorbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLSIKKyJzaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorInPDpG5kZXIgaW50ZSBwdXNoLWNlcnRpZmlrYXQgZWZ0ZXJzb20gbW90dGFnYXJzaWRhbiBpbnRlIHN0bGRlciBwdXNoIG1lZCAtLSIKKyJzaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQzNworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMgcHVzaCIKK21zZ3N0ciAibW90dGFnYXJzaWRhbiBzdMO2ZGVyIGludGUgcHVzaCBtZWQgLS1hdG9taWMiCisKKyM6IHNlbmQtcGFjay5jOjQ0MgorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgcHVzaCBvcHRpb25zIgorbXNnc3RyICJtb3R0YWdhcnNpZGFuIHN0w7ZkZXIgaW50ZSBwdXNoLWZsYWdnb3IiCisKKyM6IHNlcXVlbmNlci5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSAnJXMnIgorbXNnc3RyICJmZWxha3RpZ3QgaW5jaGVja25pbmdzbWVkZGVsYW5kZXN0w6RkbmluZ3Nsw6RnZSBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlICclcyciCittc2dzdHIgImt1bmRlIGludGUgdGEgYm9ydCBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjMxNSBidWlsdGluL3JlYmFzZS5jOjc4NSBidWlsdGluL3JlYmFzZS5jOjE3NTAgYnVpbHRpbi9ybS5jOjM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlICclcyciCittc2dzdHIgImt1bmRlIGludGUgdGEgYm9ydCBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjMyNQorbXNnaWQgInJldmVydCIKK21zZ3N0ciAicmV2ZXJ0IgorCisjOiBzZXF1ZW5jZXIuYzozMjcKK21zZ2lkICJjaGVycnktcGljayIKK21zZ3N0ciAiY2hlcnJ5LXBpY2siCisKKyM6IHNlcXVlbmNlci5jOjMyOQorbXNnaWQgInJlYmFzZSIKK21zZ3N0ciAicmViYXNlIgorCisjOiBzZXF1ZW5jZXIuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBhY3Rpb246ICVkIgorbXNnc3RyICJva8OkbmQgZnVua3Rpb246ICVkIgorCisjOiBzZXF1ZW5jZXIuYzozODkKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JyIKK21zZ3N0ciAiIgorImVmdGVyIGF0dCBoYSBsw7ZzdCBrb25mbGlrdGVybmEsIG1hcmtlcmEgZGUgcsOkdHRhZGUgc8O2a3bDpGdhcm5hXG4iCisibWVkIFwiZ2l0IGFkZCA8c8O2a3bDpGdhcj5cIiBlbGxlciBcImdpdCBybSA8c8O2a3bDpGdhcj5cIiIKKworIzogc2VxdWVuY2VyLmM6MzkyCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKyJlZnRlciBhdHQgaGEgbMO2c3Qga29uZmxpa3Rlcm5hLCBtYXJrZXJhIGRlIHLDpHR0YWRlIHPDtmt2w6RnYXJuYVxuIgorIm1lZCBcImdpdCBhZGQgPHPDtmt2w6RnYXI+XCIgZWxsZXIgXCJnaXQgcm0gPHPDtmt2w6RnYXI+XCJcbiIKKyJvY2ggY2hlY2thIGluIHJlc3VsdGF0ZXQgbWVkIFwiZ2l0IGNvbW1pdFwiIgorCisjOiBzZXF1ZW5jZXIuYzo0MDUgc2VxdWVuY2VyLmM6MjkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpXNhIFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBlb2wgdG8gJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgcmFkc2x1dCB0aWxsIFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6NDE3IHNlcXVlbmNlci5jOjI3MDYgc2VxdWVuY2VyLmM6MjkwNyBzZXF1ZW5jZXIuYzoyOTIxCisjOiBzZXF1ZW5jZXIuYzozMTg1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5hbGl6ZSAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgZsOkcmRpZ3N0w6RsbGEgXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzo0NDAgc2VxdWVuY2VyLmM6MTYxMyBzZXF1ZW5jZXIuYzoyNzI2IHNlcXVlbmNlci5jOjMxNjcKKyM6IHNlcXVlbmNlci5jOjMyNzYgYnVpbHRpbi9hbS5jOjI0OSBidWlsdGluL2NvbW1pdC5jOjc4NyBidWlsdGluL21lcmdlLmM6MTEyMAorIzogYnVpbHRpbi9yZWJhc2UuYzo1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXMuIgorbXNnc3RyICJkaW5hIGxva2FsYSDDpG5kcmluZ2FyIHNrdWxsZSBza3JpdmFzIMO2dmVyIGF2ICVzLiIKKworIzogc2VxdWVuY2VyLmM6NDcwCittc2dpZCAiY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICJjaGVja2EgaW4gZGluYSDDpG5kcmluZ2FyIGVsbGVyIGFudsOkbmQgXCJzdGFzaFwiIGbDtnIgYXR0IGZvcnRzw6R0dGEuIgorCisjOiBzZXF1ZW5jZXIuYzo1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiJXM6IHNuYWJic3BvbGEiCisKKyM6IHNlcXVlbmNlci5jOjU0MSBidWlsdGluL3RhZy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiRmVsYWt0aWd0IHN0w6RkbmluZ3Nsw6RnZSAlcyIKKworIy4gVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIsICJjaGVycnktcGljayIgb3IKKyMuICJyZWJhc2UiLgorIy4KKyM6IHNlcXVlbmNlci5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlczogS3VuZGUgaW50ZSBza3JpdmEgbnkgaW5kZXhmaWwiCisKKyM6IHNlcXVlbmNlci5jOjY1MgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZSIKK21zZ3N0ciAia2FuIGludGUgdXBwZGF0ZXJhIGNhY2hldHLDpGQiCisKKyM6IHNlcXVlbmNlci5jOjY2NgorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICJrdW5kZSBpbnRlIGJlc3TDpG1tYSBIRUFEOnMgaW5jaGVja25pbmciCisKKyM6IHNlcXVlbmNlci5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBrZXkgcHJlc2VudCBpbiAnJS4qcyciCittc2dzdHIgImluZ2VuIG55Y2tlbCBpICBcIiUuKnNcIiIKKworIzogc2VxdWVuY2VyLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZXF1b3RlIHZhbHVlIG9mICclcyciCittc2dzdHIgImthbiBpbnRlIHRhIGJvcnQgY2l0ZXJpbmcgYXYgdsOkcmRldCBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjc5NCB3cmFwcGVyLmM6MTkwIHdyYXBwZXIuYzozNjAgYnVpbHRpbi9hbS5jOjcxMAorIzogYnVpbHRpbi9hbS5jOjgwMiBidWlsdGluL21lcmdlLmM6MTExNyBidWlsdGluL3JlYmFzZS5jOjEwNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDtnBwbmEgXCIlc1wiIGbDtnIgbMOkc25pbmciCisKKyM6IHNlcXVlbmNlci5jOjgwNAorbXNnaWQgIidHSVRfQVVUSE9SX05BTUUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIlwiR0lUX0FVVEhPUl9OQU1FXCIgaGFyIHJlZGFuIGFuZ2l2aXRzIgorCisjOiBzZXF1ZW5jZXIuYzo4MDkKK21zZ2lkICInR0lUX0FVVEhPUl9FTUFJTCcgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiXCJHSVRfQVVUSE9SX0VNQUlMXCIgaGFyIHJlZGFuIGFuZ2l2aXRzIgorCisjOiBzZXF1ZW5jZXIuYzo4MTQKK21zZ2lkICInR0lUX0FVVEhPUl9EQVRFJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICJcIkdJVF9BVVRIT1JfREFURVwiIGhhciByZWRhbiBhbmdpdml0cyIKKworIzogc2VxdWVuY2VyLmM6ODE4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFyaWFibGUgJyVzJyIKK21zZ3N0ciAib2vDpG5kIHZhcmlhYmVsIFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6ODIzCittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9OQU1FJyIKK21zZ3N0ciAiXCJHSVRfQVVUSE9SX05BTUVcIiBzYWtuYXMiCisKKyM6IHNlcXVlbmNlci5jOjgyNQorbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfRU1BSUwnIgorbXNnc3RyICJcIkdJVF9BVVRIT1JfRU1BSUxcIiBzYWtuYXMiCisKKyM6IHNlcXVlbmNlci5jOjgyNworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfREFURSciCittc2dzdHIgIlwiR0lUX0FVVEhPUl9EQVRFXCIgc2FrbmFzIgorCisjOiBzZXF1ZW5jZXIuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInlvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmUgc3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorImR1IGhhciBrw7ZhZGUgw6RuZHJpbmdhciBpIGRpbiBhcmJldHNrYXRhbG9nLlxuIgorIk9tIMOkbmRyaW5nYXJuYSBza2EgbMOkZ2dhcyBpbiBpIGbDtnJlZ8OlZW5kZSBpbmNoZWNrbmluZywga8O2cjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk9tIGRlIHNrYSBjaGVja2FzIGluIGkgZW4gZWdlbiBpbmNoZWNrbmluZywga8O2cjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJPYXZzZXR0IHZpbGtldCwgbsOkciBkdSDDpHIgZsOkcmRpZyBmb3J0c8OkdHRlciBkdSBtZWQ6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6MTE0OAorbXNnaWQgIidwcmVwYXJlLWNvbW1pdC1tc2cnIGhvb2sgZmFpbGVkIgorbXNnc3RyICJrcm9rZW4gXCJwcmVwYXJlLWNvbW1pdC1tc2dcIiBtaXNzbHlja2FkZXMiCisKKyM6IHNlcXVlbmNlci5jOjExNTQKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5LiBSdW4gdGhlXG4iCisiZm9sbG93aW5nIGNvbW1hbmQgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHlvdXIgZWRpdG9yIHRvIGVkaXRcbiIKKyJ5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyJEaXR0IG5hbW4gb2NoIGUtcG9zdGFkcmVzcyBrb25maWd1cmVyYWRlcyBhdXRvbWF0aXNrdCBiYXNlcmF0IHDDpVxuIgorImRpdHQgYW52w6RuZGFyLWlkIG9jaCB2w6RyZG5hbW4uIEtvbnRyb2xsZXJhIGF0dCBkZSDDpHIgcmlrdGlnYS4gRHVcbiIKKyJrYW4gZsO2cmhpbmRyYSBkZXQgaMOkciBtZWRkZWxhbmRldCBnZW5vbSBhdHQgc3TDpGxsYSBkZW0gZXhwbGljaXQuXG4iCisiS8O2ciBmw7ZsamFuZGUga29tbWFuZG9uIG9jaCBmw7ZsaiBpbnN0cnVrdGlvbmVybmEgaSB0ZXh0cmVkaWdlcmFyZW5cbiIKKyJmw7ZyIGF0dCByZWRpZ2VyYSBkaW4ga29uZmlndXJhdGlvbnNmaWw6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiTsOkciBkdSBnam9ydCBkZXQga2FuIGR1IHLDpHR0YSBpZGVudGl0ZXRlbiBzb20gYW52w6RuZGVzIGbDtnIgZGVuIGjDpHJcbiIKKyJpbmNoZWNrbmluZ2VuIG1lZDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjExNjcKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyJEaXR0IG5hbW4gb2NoIGUtcG9zdGFkcmVzcyBrb25maWd1cmVyYWRlcyBhdXRvbWF0aXNrdCBiYXNlcmF0IHDDpVxuIgorImRpdHQgYW52w6RuZGFyLWlkIG9jaCB2w6RyZG5hbW4uIEtvbnRyb2xsZXJhIGF0dCBkZSDDpHIgcmlrdGlnYS4gRHVcbiIKKyJrYW4gZsO2cmhpbmRyYSBkZXQgaMOkciBtZWRkZWxhbmRldCBnZW5vbSBhdHQgc3TDpGxsYSBkZW0gZXhwbGljaXQ6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiRGl0dCBuYW1uXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIGR1QGV4YW1wbGUuY29tXG4iCisiXG4iCisiTsOkciBkdSBnam9ydCBkZXQga2FuIGR1IHLDpHR0YSBpZGVudGl0ZXRlbiBzb20gYW52w6RuZGVzIGbDtnIgZGVuIGjDpHJcbiIKKyJpbmNoZWNrbmluZ2VuIG1lZDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyMDkKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJrdW5kZSBpbnRlIHNsw6UgdXBwIGVuIHByZWNpcyBza2FwYWQgaW5jaGVja25pbmciCisKKyM6IHNlcXVlbmNlci5jOjEyMTEKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgZW4gcHJlY2lzIHNrYXBhZCBpbmNoZWNrbmluZyIKKworIzogc2VxdWVuY2VyLmM6MTI1NworbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICJrdW5kZSBpbnRlIGJlc3TDpG1tYSBIRUFEIGVmdGVyIGF0dCBoYSBza2FwYXQgaW5jaGVja25pbmciCisKKyM6IHNlcXVlbmNlci5jOjEyNTkKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJmcsOlbmtvcHBsYWQgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTI2MworbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIgKHJvdGluY2hlY2tuaW5nKSIKKworIzogc2VxdWVuY2VyLmM6MTI4NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjEyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICJIRUFEICVzIMOkciBpbnRlIGVuIGluY2hlY2tuaW5nISIKKworIzogc2VxdWVuY2VyLmM6MTI5MCBzZXF1ZW5jZXIuYzoxMzY0IGJ1aWx0aW4vY29tbWl0LmM6MTU3NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBIRUFEOnMgaW5jaGVja25pbmciCisKKyM6IHNlcXVlbmNlci5jOjEzNDIgc2VxdWVuY2VyLmM6MTk2OAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgYXV0aG9yIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGluY2hlY2tuaW5nZW5zIGbDtnJmYXR0YXJlIgorCisjOiBzZXF1ZW5jZXIuYzoxMzUzIGJ1aWx0aW4vYW0uYzoxNTY2IGJ1aWx0aW4vbWVyZ2UuYzo2ODcKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBtaXNzbHlja2FkZXMgc2tyaXZhIGV0dCB0csOkZCIKKworIzogc2VxdWVuY2VyLmM6MTM4NiBzZXF1ZW5jZXIuYzoxNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbW1pdCBtZXNzYWdlIGZyb20gJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIGZyw6VuIFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6MTQxMyBidWlsdGluL2FtLmM6MTU4OCBidWlsdGluL2NvbW1pdC5jOjE2NzMgYnVpbHRpbi9tZXJnZS5jOjg4NgorIzogYnVpbHRpbi9tZXJnZS5jOjkxMQorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSBpbmNoZWNrbmluZ3NvYmpla3QiCisKKyM6IHNlcXVlbmNlci5jOjE0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBpbmNoZWNrbmluZ2VuICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGbDtnLDpGxkcmFpbmNoZWNrbmluZ2VuICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNTYyIHNlcXVlbmNlci5jOjE2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kOiAlZCIKK21zZ3N0ciAib2vDpG50IGtvbW1hbmRvOiAlZCIKKworIzogc2VxdWVuY2VyLmM6MTYyMCBzZXF1ZW5jZXIuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAlZCBjb21taXRzLiIKK21zZ3N0ciAiRGV0IGjDpHIgw6RyIGVuIGtvbWJpbmF0aW9uIGF2ICVkIGluY2hlY2tuaW5nYXIuIgorCisjOiBzZXF1ZW5jZXIuYzoxNjMwCittc2dpZCAibmVlZCBhIEhFQUQgdG8gZml4dXAiCittc2dzdHIgImJlaMO2dmVyIGVuIEhFQUQtaW5jaGVja25pbmcgYXR0IHLDpHR0YSIKKworIzogc2VxdWVuY2VyLmM6MTYzMiBzZXF1ZW5jZXIuYzozMjEyCittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNjM0Cittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCdzIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIEhFQUQ6cyBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIgorCisjOiBzZXF1ZW5jZXIuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSBza3JpdmEgXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzoxNjQ3IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTYKK21zZ2lkICJUaGlzIGlzIHRoZSAxc3QgY29tbWl0IG1lc3NhZ2U6IgorbXNnc3RyICJEZXQgaMOkciDDpHIgMTphIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0OiIKKworIzogc2VxdWVuY2VyLmM6MTY1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZSBvZiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIGbDtnIgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyVkOiIKK21zZ3N0ciAiRGV0IGjDpHIgw6RyIGluY2hlY2tuaW5nc21lZGRlbGFuZGUgJWQ6IgorCisjOiBzZXF1ZW5jZXIuYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJWQgd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiSW5jaGVja25pbmdzbWVkZGVsYW5kZSAlZCBrb21tZXIgaG9wcGFzIMO2dmVyOiIKKworIzogc2VxdWVuY2VyLmM6MTc1NgorbXNnaWQgInlvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgImRpbiBpbmRleGZpbCBoYXIgaW50ZSBzbGFnaXRzIGlob3AuIgorCisjOiBzZXF1ZW5jZXIuYzoxNzYzCittc2dpZCAiY2Fubm90IGZpeHVwIHJvb3QgY29tbWl0IgorbXNnc3RyICJrYW4gaW50ZSBnw7ZyYSBcImZpeHVwXCIgcMOlIHJvdGluY2hlY2tuaW5nIgorCisjOiBzZXF1ZW5jZXIuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAiaW5jaGVja25pbmcgJXMgw6RyIGVuIHNhbW1hbnNsYWduaW5nLCBtZW4gZmxhZ2dhbiAtbSBhbmdhdnMgaW50ZS4iCisKKyM6IHNlcXVlbmNlci5jOjE3OTAgc2VxdWVuY2VyLmM6MTc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgImluY2hlY2tuaW5nICVzIGhhciBpbnRlIGbDtnLDpGxkZXIgJWQiCisKKyM6IHNlcXVlbmNlci5jOjE4MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgImthbiBpbnRlIGjDpG10YSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIGbDtnIgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgd2lsbCBiZSBhICJ0b2RvIiBjb21tYW5kIGxpa2UKKyMuICJyZXZlcnQiIG9yICJwaWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEuCisjOiBzZXF1ZW5jZXIuYzoxODIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiJXM6IGthbiBpbnRlIHRvbGthIGbDtnLDpGxkcmFpbmNoZWNrbmluZ2VuICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgJyVzJyB0byAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGJ5dGEgbmFtbiBww6UgXCIlc1wiIHRpbGwgXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzoxOTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXZlcnQgJXMuLi4gJXMiCittc2dzdHIgImt1bmRlIGludGUgw6VuZ3JhICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxOTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhcHBseSAlcy4uLiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0aWxsw6RtcGEgJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHJvcHBpbmcgJXMgJXMgLS0gcGF0Y2ggY29udGVudHMgYWxyZWFkeSB1cHN0cmVhbVxuIgorbXNnc3RyICJ1dGVsw6RtbmFyICVzICVzIC0tIHBhdGNoaW5uZWjDpWxsZXQgZmlubnMgcmVkYW4gdXBwc3Ryw7Ztc1xuIgorCisjOiBzZXF1ZW5jZXIuYzoyMDE4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IG1pc3NseWNrYWRlcyBsw6RzYSBpbmRleGV0IgorCisjOiBzZXF1ZW5jZXIuYzoyMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IG1pc3NseWNrYWRlcyB1cHBkYXRlcmEgaW5kZXhldCIKKworIzogc2VxdWVuY2VyLmM6MjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBhY2NlcHQgYXJndW1lbnRzOiAnJXMnIgorbXNnc3RyICIlcyB0YXIgaW50ZSBhcmd1bWVudDogXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzoyMTExCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnRzIGZvciAlcyIKK21zZ3N0ciAiYXJndW1lbnQgc2FrbmFzIGbDtnIgJXMiCisKKyM6IHNlcXVlbmNlci5jOjIxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICclcyciCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzoyMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAib2dpbHRpZyByYWQgJWQ6ICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjIyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAia2FuIGludGUgdXRmw7ZyYSBcIiVzXCIgdXRhbiBlbiBmw7ZyZWfDpWVuZGUgaW5jaGVja25pbmciCisKKyM6IHNlcXVlbmNlci5jOjIyOTgKK21zZ2lkICJjYW5jZWxsaW5nIGEgY2hlcnJ5IHBpY2tpbmcgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImF2YnJ5dGVyIHDDpWfDpWVuZGUgXCJjaGVycnktcGlja1wiIgorCisjOiBzZXF1ZW5jZXIuYzoyMzA1Cittc2dpZCAiY2FuY2VsbGluZyBhIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiYXZicnl0ZXIgcMOlZ8OlZW5kZSBcInJldmVydFwiIgorCisjOiBzZXF1ZW5jZXIuYzoyMzQ5Cittc2dpZCAicGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgInLDpHR0YSBkZXQgbWVkIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiLiIKKworIzogc2VxdWVuY2VyLmM6MjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJyVzJyIKK21zZ3N0ciAib2FudsOkbmRiYXJ0IG1hbnVzOiBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjIzNTYKK21zZ2lkICJubyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgImluZ2EgaW5jaGVja25pbmdhciBsw6RzdGVzLiIKKworIzogc2VxdWVuY2VyLmM6MjM2NworbXNnaWQgImNhbm5vdCBjaGVycnktcGljayBkdXJpbmcgYSByZXZlcnQuIgorbXNnc3RyICJrYW4gaW50ZSB1dGbDtnJhIFwiY2hlcnJ5LXBpY2tcIiB1bmRlciBlbiBcInJldmVydFwiLiIKKworIzogc2VxdWVuY2VyLmM6MjM2OQorbXNnaWQgImNhbm5vdCByZXZlcnQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICJrYW4gaW50ZSB1dGbDtnJhIFwicmV2ZXJ0XCIgdW5kZXIgZW4gXCJjaGVycnktcGlja1wiLiIKKworIzogc2VxdWVuY2VyLmM6MjQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgImZlbGFrdGlndCB2w6RyZGUgZsO2ciAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjI1NDAKK21zZ2lkICJ1bnVzYWJsZSBzcXVhc2gtb250byIKK21zZ3N0ciAib2FudsOkbmRiYXIgc3F1YXNoLW9udG8iCisKKyM6IHNlcXVlbmNlci5jOjI1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICclcyciCittc2dzdHIgInRyYXNpZ3QgbWFudXM6IFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6MjY0NCBzZXF1ZW5jZXIuYzo0MzYxCittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgImRlbiBhbmdpdm5hIHVwcHPDpHR0bmluZ2VuIGluY2hlY2tuaW5nYXIgw6RyIHRvbSIKKworIzogc2VxdWVuY2VyLmM6MjY2MAorbXNnaWQgInJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJlbiBcInJldmVydFwiIHDDpWfDpXIgcmVkYW4iCisKKyM6IHNlcXVlbmNlci5jOjI2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IHJldmVydCAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAidGVzdGEgXCJnaXQgcmV2ZXJ0ICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorCisjOiBzZXF1ZW5jZXIuYzoyNjY1Cittc2dpZCAiY2hlcnJ5LXBpY2sgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiZW4gXCJjaGVycnktcGlja1wiIHDDpWfDpXIgcmVkYW4iCisKKyM6IHNlcXVlbmNlci5jOjI2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICJ0ZXN0YSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKKworIzogc2VxdWVuY2VyLmM6MjY4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBcInNlcXVlbmNlclwiLWthdGFsb2dlbiBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjI2OTYKK21zZ2lkICJjb3VsZCBub3QgbG9jayBIRUFEIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpXNhIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI3NTYgc2VxdWVuY2VyLmM6NDA5OQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiaW5nZW4gXCJjaGVycnktcGlja1wiIGVsbGVyIFwicmV2ZXJ0XCIgcMOlZ8OlciIKKworIzogc2VxdWVuY2VyLmM6Mjc1OCBzZXF1ZW5jZXIuYzoyNzY5Cittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAia2FuIGludGUgYmVzdMOkbW1hIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI3NjAgc2VxdWVuY2VyLmM6MjgwNAorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJrYW4gaW50ZSBhdmJyeXRhIGZyw6VuIGVuIGdyZW4gc29tIMOkbm51IGludGUgw6RyIGbDtmRkIgorCisjOiBzZXF1ZW5jZXIuYzoyNzkwIGJ1aWx0aW4vZ3JlcC5jOjcyNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSDDtnBwbmEgXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzoyNzkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyc6ICVzIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBcIiVzXCI6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyNzkzCittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAib3bDpG50YXQgZmlsc2x1dCIKKworIzogc2VxdWVuY2VyLmM6Mjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiCittc2dzdHIgInNwYXJhZCBIRUFELWZpbCBmcsOlbiBmw7ZyZSBcImNoZXJyeS1waWNrXCIsIFwiJXNcIiwgw6RyIHRyYXNpZyIKKworIzogc2VxdWVuY2VyLmM6MjgxMAorbXNnaWQgIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRC4gTm90IHJld2luZGluZywgY2hlY2sgeW91ciBIRUFEISIKK21zZ3N0ciAiIgorIkR1IHZlcmthciBoYSBmbHl0dGF0IEhFQUQuXG4iCisiU3BvbGFyIGludGUgdGlsbGJha2EsIGtvbnRyb2xsZXJhIEhFQUQhIgorCisjOiBzZXF1ZW5jZXIuYzoyODUxCittc2dpZCAibm8gcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJpbmdlbiBcInJldmVyc1wiIHDDpWfDpXIiCisKKyM6IHNlcXVlbmNlci5jOjI4NTkKK21zZ2lkICJubyBjaGVycnktcGljayBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiaW5nZW4gXCJjaGVycnktcGlja1wiIHDDpWfDpXIiCisKKyM6IHNlcXVlbmNlci5jOjI4NjkKK21zZ2lkICJmYWlsZWQgdG8gc2tpcCB0aGUgY29tbWl0IgorbXNnc3RyICJrdW5kZSBpbnRlIGhvcHBhIMO2dmVyIGluY2hlY2tuaW5nZW4iCisKKyM6IHNlcXVlbmNlci5jOjI4NzYKK21zZ2lkICJ0aGVyZSBpcyBub3RoaW5nIHRvIHNraXAiCittc2dzdHIgImluZ2VudGluZyBhdHQgaG9wcGEgw7Z2ZXIiCisKKyM6IHNlcXVlbmNlci5jOjI4NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImhhdmUgeW91IGNvbW1pdHRlZCBhbHJlYWR5P1xuIgorInRyeSBcImdpdCAlcyAtLWNvbnRpbnVlXCIiCittc2dzdHIgIiIKKyJoYXIgZHUgcmVkYW4gY2hlY2thdCBpbj9cbiIKKyJ0ZXN0YSBcImdpdCAlcyAtLWNvbnRpbnVlXCIiCisKKyM6IHNlcXVlbmNlci5jOjMwMDMgc2VxdWVuY2VyLmM6NDAxMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHVwcGRhdGVyYSAlcyIKKworIzogc2VxdWVuY2VyLmM6MzA0MiBzZXF1ZW5jZXIuYzozOTkxCittc2dpZCAiY2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAia2FuIGludGUgbMOkc2EgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MzA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY29weSAnJXMnIHRvICclcyciCittc2dzdHIgImthbiBpbnRlIGtvcGllcmEgaW4gXCIlc1wiIHRpbGwgXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzozMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisiRHUga2FuIHV0w7ZrYSBpbmNoZWNrbmluZ2VuIG51LCBtZWRcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk7DpHIgZHUgw6RyIG7DtmpkIG1lZCBkaW5hIMOkbmRyaW5nYXIga8O2ciBkdVxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjMwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICVzLi4uICUuKnMiCittc2dzdHIgIkt1bmRlIGludGUgdGlsbMOkbXBhICVzLi4uICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjMwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1lcmdlICUuKnMiCittc2dzdHIgIkt1bmRlIGludGUgc2zDpSBpaG9wICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjMwOTggc2VxdWVuY2VyLmM6MzEwMiBidWlsdGluL2RpZmZ0b29sLmM6NjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBrb3BpZXJhIGluIFwiJXNcIiB0aWxsIFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6MzEyOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIGZhaWxlZDogJXNcbiIKKyIlc1lvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisia8O2cm5pbmdlbiBtaXNzbHlja2FkZXM6ICVzXG4iCisiJXNEdSBrYW4gcsOkdHRhIHByb2JsZW1ldCBvY2ggc2VkYW4ga8O2cmFcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMTM1Cittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKK21zZ3N0ciAib2NoIGdqb3JkZSDDpG5kcmluZ2FyIHRpbGwgaW5kZXhldCBvY2gvZWxsZXIgYXJiZXRza2F0YWxvZ2VuXG4iCisKKyM6IHNlcXVlbmNlci5jOjMxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICVzXG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisia8O2cm5pbmdlbiBseWNrYWRlczogJXNcbiIKKyJtZW4gbMOkbW5hZGUga3ZhciDDpG5kcmluZ2FyIGkgaW5kZXhldCBvY2gvZWxsZXIgYXJiZXRza2F0YWxvZ2VuXG4iCisiQ2hlY2thIGluIGVsbGVyIHV0ZsO2ciBcInN0YXNoXCIgcMOlIMOkbmRyaW5nYXJuYSBvY2gga8O2ciBzZWRhblxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBsYWJlbCBuYW1lOiAnJS4qcyciCittc2dzdHIgIm9naWx0aWd0IGV0aWtldHRuYW1uOiBcIiUuKnNcIiIKKworIzogc2VxdWVuY2VyLmM6MzI1NgorbXNnaWQgIndyaXRpbmcgZmFrZSByb290IGNvbW1pdCIKK21zZ3N0ciAic2tyaXZlciBmZWprYWQgcm90aW5jaGVja25pbmciCisKKyM6IHNlcXVlbmNlci5jOjMyNjEKK21zZ2lkICJ3cml0aW5nIHNxdWFzaC1vbnRvIgorbXNnc3RyICJza3JpdmVyIHNxdWFzaC1vbnRvIgorCisjOiBzZXF1ZW5jZXIuYzozMjk5IGJ1aWx0aW4vcmViYXNlLmM6ODgwIGJ1aWx0aW4vcmViYXNlLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiCittc2dzdHIgImt1bmRlIGludGUgaGl0dGEgdHLDpGRldCBmw7ZyICVzLiIKKworIzogc2VxdWVuY2VyLmM6MzM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHVwcGzDtnNhIFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6MzM3NQorbXNnaWQgImNhbm5vdCBtZXJnZSB3aXRob3V0IGEgY3VycmVudCByZXZpc2lvbiIKK21zZ3N0ciAia2FuIGludGUgc2zDpSBpaG9wIHV0YW4gZW4gYWt0dWVsbCBpbmNoZWNrbmluZyIKKworIzogc2VxdWVuY2VyLmM6MzM5NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyUuKnMnIgorbXNnc3RyICJrYW4gaW50ZSB0b2xrYSBcIiUuKnNcIiIKKworIzogc2VxdWVuY2VyLmM6MzQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIG1lcmdlOiAnJS4qcyciCittc2dzdHIgImluZ2V0IGF0dCBzbMOlIHNhbW1hbjogXCIlLipzXCIiCisKKyM6IHNlcXVlbmNlci5jOjM0MTgKK21zZ2lkICJvY3RvcHVzIG1lcmdlIGNhbm5vdCBiZSBleGVjdXRlZCBvbiB0b3Agb2YgYSBbbmV3IHJvb3RdIgorbXNnc3RyICJcIm9jdG9wdXNcIi1zYW1tYW5zbGFnbmluZyBrYW4gaW50ZSBrw7ZyYXMgb3ZhbnDDpSBlbiBbbnkgcm90XSIKKworIzogc2VxdWVuY2VyLmM6MzQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIG9mICclcyciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgaW5jaGVja25pbmdzbWVkZGVsYW5kZSBmw7ZyIFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6MzU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXZlbiBhdHRlbXB0IHRvIG1lcmdlICclLipzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBlbnMgZsO2cnPDtmthIHNsw6UgaWhvcCBcIiUuKnNcIiIKKworIzogc2VxdWVuY2VyLmM6MzYxMAorbXNnaWQgIm1lcmdlOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgInNhbW1hbnNsYWduaW5nOiBLdW5kZSBpbnRlIHNrcml2YSBueSBpbmRleGZpbCIKKworIzogc2VxdWVuY2VyLmM6MzY3OSBidWlsdGluL3JlYmFzZS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC5cbiIKK21zZ3N0ciAiVGlsbMOkbXBhZGUgYXV0b3N0YXNoLlxuIgorCisjOiBzZXF1ZW5jZXIuYzozNjkxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAia2FuIGludGUgc3BhcmEgJXMiCisKKyM6IHNlcXVlbmNlci5jOjM2OTQgYnVpbHRpbi9yZWJhc2UuYzo3NTMgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKyJZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLlxuIgorIllvdSBjYW4gcnVuIFwiZ2l0IHN0YXNoIHBvcFwiIG9yIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdCBhbnkgdGltZS5cbiIKK21zZ3N0ciAiIgorIlRpbGzDpG1wbmluZyBhdiBhdXRvc3Rhc2ggZ2F2IGtvbmZsaWt0ZXIuXG4iCisiRGluYSDDpG5kcmluZ2FyIMOkciBzw6RrcmEgaSBzdGFzaGVuLlxuIgorIkR1IGthbiBuw6RyIHNvbSBoZWxzdCBhbnbDpG5kYSBcImdpdCBzdGFzaCBwb3BcIiBlbGxlciBcImdpdCBzdGFzaCBkcm9wXCIuXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIHZhbGlkIE9JRCIKK21zZ3N0ciAiJXM6IGludGUgZXR0IGdpbHRpZ3QgT0lEIgorCisjOiBzZXF1ZW5jZXIuYzozNzYwIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NzkKK21zZ2lkICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgImt1bmRlIGludGUga29wcGxhIGZyw6VuIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjM3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCBIRUFEXG4iCittc2dzdHIgIlN0b3BwYWRlIHDDpSBIRUFEXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAlc1xuIgorbXNnc3RyICJTdG9wcGFkZSBww6UgJXNcbiIKKworIzogc2VxdWVuY2VyLmM6Mzc4NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGV4ZWN1dGUgdGhlIHRvZG8gY29tbWFuZFxuIgorIlxuIgorIiAgICAlLipzXG4iCisiSXQgaGFzIGJlZW4gcmVzY2hlZHVsZWQ7IFRvIGVkaXQgdGhlIGNvbW1hbmQgYmVmb3JlIGNvbnRpbnVpbmcsIHBsZWFzZVxuIgorImVkaXQgdGhlIHRvZG8gbGlzdCBmaXJzdDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUga8O2cmEgdG9kby1rb21tYW5kb3RcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkRldCBoYXIgbGFndHMgdGlsbGJha2EgaSBrw7ZuOyBGw7ZyIGF0dCByZWRpZ2VyYSBrb21tYW5kb3QgaW5uYW4gZHVcbiIKKyJmb3J0c8OkdHRlciwgcmVkaWdlcmEgZsO2cnN0IGF0dGfDtnJhLWxpc3RhbjpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6Mzg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzLi4uICAlLipzXG4iCittc2dzdHIgIlN0b3BwYWRlIHDDpSAlcy4uLiAlLipzXG4iCisKKyM6IHNlcXVlbmNlci5jOjM5NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kICVkIgorbXNnc3RyICJva8OkbnQga29tbWFuZG8gJWQiCisKKyM6IHNlcXVlbmNlci5jOjM5OTkKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvcmlnLWhlYWQiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2Egb3JpZy1oZWFkIgorCisjOiBzZXF1ZW5jZXIuYzo0MDA0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ29udG8nIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIFwib250b1wiIgorCisjOiBzZXF1ZW5jZXIuYzo0MDE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgSEVBRCB0byAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB1cHBkYXRlcmEgSEVBRCB0aWxsICVzIgorCisjOiBzZXF1ZW5jZXIuYzo0MTExCittc2dpZCAiY2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgImthbiBpbnRlIG9tYmFzZXJhOiBEdSBoYXIgb2vDtmFkZSDDpG5kcmluZ2FyLiIKKworIzogc2VxdWVuY2VyLmM6NDEyMAorbXNnaWQgImNhbm5vdCBhbWVuZCBub24tZXhpc3RpbmcgY29tbWl0IgorbXNnc3RyICJrYW4gaW50ZSBsw6RnZ2EgdGlsbCBpbmNoZWNrbmluZyBzb20gaW50ZSBmaW5ucyIKKworIzogc2VxdWVuY2VyLmM6NDEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbGU6ICclcyciCittc2dzdHIgIm9naWx0aWcgZmlsOiBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjQxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb250ZW50czogJyVzJyIKK21zZ3N0ciAib2dpbHRpZ3QgaW5uZWjDpWxsOiBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjQxMjcKK21zZ2lkICIiCisiXG4iCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlLCBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJcbiIKKyJEdSBoYXIgw6RuZHJpbmdhciBpIGFyYmV0c2thdGFsb2dlbiBzb20gaW50ZSBjaGVja2F0cyBpbi4gQ2hlY2thIGluIGRlbVxuIgorImbDtnJzdCBvY2gga8O2ciBzZWRhbiBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIGlnZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo0MTYzIHNlcXVlbmNlci5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGZpbGU6ICclcyciCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIGZpbDogXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzo0MjE3Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIgorbXNnc3RyICJrdW5kZSBpbnRlIHRhIGJvcnQgQ0hFUlJZX1BJQ0tfSEVBRCIKKworIzogc2VxdWVuY2VyLmM6NDIyNAorbXNnaWQgImNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJrdW5kZSBpbnRlIGNoZWNrYSBpbiBrw7ZhZGUgw6RuZHJpbmdhci4iCisKKyM6IHNlcXVlbmNlci5jOjQzMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbid0IGNoZXJyeS1waWNrIGEgJXMiCittc2dzdHIgIiVzOiBrYW4gaW50ZSBnw7ZyYSBcImNoZXJyeS1waWNrXCIgcMOlIHR5cGVuIFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6NDM0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlczogZmVsYWt0aWcgcmV2aXNpb24iCisKKyM6IHNlcXVlbmNlci5jOjQzNzcKK21zZ2lkICJjYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgImthbiBpbnRlIMOlbmdyYSBzb20gZsO2cnN0YSBpbmNoZWNrbmluZyIKKworIzogc2VxdWVuY2VyLmM6NDg0NgorbXNnaWQgIm1ha2Vfc2NyaXB0OiB1bmhhbmRsZWQgb3B0aW9ucyIKK21zZ3N0ciAibWFrZV9zY3JpcHQ6IGZsYWdnb3Igc29tIGludGUgc3TDtmRzIgorCisjOiBzZXF1ZW5jZXIuYzo0ODQ5Cittc2dpZCAibWFrZV9zY3JpcHQ6IGVycm9yIHByZXBhcmluZyByZXZpc2lvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB0OiBmZWwgbsOkciByZXZpc2lvbmVyIHNrdWxsZSBmw7ZyYmVyZWRhcyIKKworIzogc2VxdWVuY2VyLmM6NTA4MyBzZXF1ZW5jZXIuYzo1MTAwCittc2dpZCAibm90aGluZyB0byBkbyIKK21zZ3N0ciAiaW5nZXQgYXR0IGfDtnJhIgorCisjOiBzZXF1ZW5jZXIuYzo1MTE5Cittc2dpZCAiY291bGQgbm90IHNraXAgdW5uZWNlc3NhcnkgcGljayBjb21tYW5kcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBob3BwYSDDtnZlciBvbsO2ZGlnYSBcInBpY2tcIi1rb21tYW5kb24iCisKKyM6IHNlcXVlbmNlci5jOjUyMTMKK21zZ2lkICJ0aGUgc2NyaXB0IHdhcyBhbHJlYWR5IHJlYXJyYW5nZWQuIgorbXNnc3RyICJza3JpcHRldCBoYXIgcmVkYW4gb21vcmRuYXRzLiIKKworIzogc2V0dXAuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkgYXQgJyVzJyIKK21zZ3N0ciAiXCIlc1wiIMOkciB1dGFuZsO2ciBhcmtpdmV0IHDDpSBcIiVzXCIiCisKKyM6IHNldHVwLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogbm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICdnaXQgPGNvbW1hbmQ+IC0tIDxwYXRoPi4uLicgdG8gc3BlY2lmeSBwYXRocyB0aGF0IGRvIG5vdCBleGlzdCBsb2NhbGx5LiIKK21zZ3N0ciAiIgorIiVzOiBzw7ZrdsOkZ2VuIGZpbm5zIGludGUgaSBhcmJldHNrYXRhbG9nZW4uXG4iCisiQW52w6RuZCBcImdpdCA8a29tbWFuZG8+IC0tIDxzw7ZrdsOkZz4uLlwiIGbDtnIgYXR0IGFuZ2Ugc8O2a3bDpGdhciBzb20gaW50ZSBmaW5ucyAiCisibG9rYWx0LiIKKworIzogc2V0dXAuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiB1bmtub3duIHJldmlzaW9uIG9yIHBhdGggbm90IGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisidHZldHlkaWd0IGFyZ3VtZW50IFwiJXNcIjogb2vDpG5kIHJldmlzaW9uIGVsbGVyIHPDtmt2w6RnIGludGUgaSAiCisiYXJiZXRza2F0YWxvZ2VuLlxuIgorIkFudsOkbmQgXCItLVwiIGbDtnIgYXR0IHNraWxqYSBzw7ZrdsOkZ2FyIGZyw6VuIHJldmlzaW9uZXIsIHPDpSBow6RyOlxuIgorIlwiZ2l0IDxrb21tYW5kbz4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsPi4uLl1cIiIKKworIzogc2V0dXAuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICclcycgbXVzdCBjb21lIGJlZm9yZSBub24tb3B0aW9uIGFyZ3VtZW50cyIKK21zZ3N0ciAiZmxhZ2dhbiBcIiVzXCIgbcOlc3RlIGFuZ2VzIGbDtnJlIGFyZ3VtZW50IHNvbSBpbnRlIMOkciBmbGFnZ29yIgorCisjOiBzZXR1cC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisidHZldHlkaWd0IGFyZ3VtZW50IFwiJXNcIjogYsOlZGUgcmV2aXNpb24gb2NoIGZpbG5hbW5cbiIKKyJBbnbDpG5kIFwiLS1cIiBmw7ZyIGF0dCBza2lsamEgc8O2a3bDpGdhciBmcsOlbiByZXZpc2lvbmVyLCBzw6UgaMOkcjpcbiIKKyJcImdpdCA8a29tbWFuZG8+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbD4uLi5dXCIiCisKKyM6IHNldHVwLmM6NDA5Cittc2dpZCAidW5hYmxlIHRvIHNldCB1cCB3b3JrIHRyZWUgdXNpbmcgaW52YWxpZCBjb25maWciCittc2dzdHIgImthbiBpbnRlIHNrYXBhIGFyYmV0c2thdGFsb2cgbWVkIGZlbGFrdGlnIGtvbmZpZ3VyYXRpb24iCisKKyM6IHNldHVwLmM6NDEzCittc2dpZCAidGhpcyBvcGVyYXRpb24gbXVzdCBiZSBydW4gaW4gYSB3b3JrIHRyZWUiCittc2dzdHIgImZ1bmt0aW9uZW4gbcOlc3RlIGvDtnJhcyBpIGVuIGFyYmV0c2thdGFsb2ciCisKKyM6IHNldHVwLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIgorbXNnc3RyICJGw7ZydsOkbnRhZGUgZ2l0LWFya2l2dmVyc2lvbiA8PSAlZCwgaGl0dGFkZSAlZCIKKworIzogc2V0dXAuYzo1NjcKK21zZ2lkICJ1bmtub3duIHJlcG9zaXRvcnkgZXh0ZW5zaW9ucyBmb3VuZDoiCittc2dzdHIgIm9rw6RuZGEgYXJraXZ1dMO2a25pbmdhciBoaXR0YWRlczoiCisKKyM6IHNldHVwLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAiZmVsIHZpZCDDtnBwbmluZyBhdiBcIiVzXCIiCisKKyM6IHNldHVwLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBsYXJnZSB0byBiZSBhIC5naXQgZmlsZTogJyVzJyIKK21zZ3N0ciAiZsO2ciBzdG9yIGbDtnIgYXR0IHZhcmEgZW4gLmdpdC1maWw6IFwiJXNcIiIKKworIzogc2V0dXAuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyAlcyIKK21zZ3N0ciAiZmVsIHZpZCBsw6RzbmluZyBhdiAlcyIKKworIzogc2V0dXAuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBnaXRmaWxlIGZvcm1hdDogJXMiCittc2dzdHIgIm9naWx0aWd0IGdpdGZpbGZvcm1hdDogJXMiCisKKyM6IHNldHVwLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHBhdGggaW4gZ2l0ZmlsZTogJXMiCittc2dzdHIgImluZ2VuIHPDtmt2w6RnIGkgZ2l0ZmlsOiAlcyIKKworIzogc2V0dXAuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICJpbnRlIGV0dCBnaXQtYXJraXY6ICVzIgorCisjOiBzZXR1cC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICInJCVzJyB0b28gYmlnIgorbXNnc3RyICJcIiQlc1wiIGbDtnIgc3RvciIKKworIzogc2V0dXAuYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciCittc2dzdHIgImludGUgZXR0IGdpdC1hcmtpdjogXCIlc1wiIgorCisjOiBzZXR1cC5jOjczOCBzZXR1cC5jOjc0MCBzZXR1cC5jOjc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJyVzJyIKK21zZ3N0ciAia2FuIGludGUgYnl0YSBrYXRhbG9nIChjaGRpcikgdGlsbCBcIiVzXCIiCisKKyM6IHNldHVwLmM6NzQzIHNldHVwLmM6Nzk5IHNldHVwLmM6ODA5IHNldHVwLmM6ODQ4IHNldHVwLmM6ODU2Cittc2dpZCAiY2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgImthbiBpbnRlIGfDpSB0aWxsYmFrYSB0aWxsIGFyYmV0c2thdGFsb2dlbiAoY3dkKSIKKworIzogc2V0dXAuYzo4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyUqcyVzJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgc3RhdHVzIHDDpSBcIiUqc3MlcyVzXCIiCisKKyM6IHNldHVwLmM6MTEwOAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIkthbiBpbnRlIGzDpHNhIGFrdHVlbGwgYXJiZXRza2F0YWxvZyIKKworIzogc2V0dXAuYzoxMTE3IHNldHVwLmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hhbmdlIHRvICclcyciCittc2dzdHIgImthbiBpbnRlIGJ5dGEgdGlsbCBcIiVzXCIiCisKKyM6IHNldHVwLmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMpOiAlcyIKK21zZ3N0ciAiaW50ZSBldHQgZ2l0LWFya2l2IChlbGxlciBuw6Vnb24gYXYgZsO2csOkbGRyYWthdGFsb2dlcm5hKTogJXMiCisKKyM6IHNldHVwLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisiU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS4iCittc2dzdHIgIiIKKyJpbnRlIGV0dCBnaXQtYXJraXYgKGVsbGVyIG7DpWdvbiBhdiBmw7Zyw6RsZHJha2F0YWxvZ2VybmEgdXBwIHRpbGwgIgorIm1vbnRlcmluZ3NwdW5rdGVuICVzKVxuIgorIlN0b3BwYXIgdmlkIGZpbHN5c3RlbXNncsOkbnMgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gw6RyIGludGUgc2F0dCkuIgorCisjOiBzZXR1cC5jOjEyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgKDAlLjNvKS5cbiIKKyJUaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKyJwcm9ibGVtIG1lZCBmaWxsw6RnZXMtdsOkcmRldCBpIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSAoMCUuM28pLlxuIgorIsOEZ2FyZW4gYXYgZmlsZXJuYSBtw6VzdGUgYWxsdGlkIGhhIGzDpHMtIG9jaCBza3JpdmJlaMO2cmlnaGV0LiIKKworIzogc2V0dXAuYzoxMjg5Cittc2dpZCAib3BlbiAvZGV2L251bGwgb3IgZHVwIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIMO2cHBuYSAvZGV2L251bGwgZWxsZXIgXCJkdXBcIiIKKworIzogc2V0dXAuYzoxMzA0Cittc2dpZCAiZm9yayBmYWlsZWQiCittc2dzdHIgIlwiZm9ya1wiIG1pc3NseWNrYWRlcyIKKworIzogc2V0dXAuYzoxMzA5Cittc2dpZCAic2V0c2lkIGZhaWxlZCIKK21zZ3N0ciAiXCJzZXRzaWRcIiBtaXNzbHlja2FkZXMiCisKKyM6IHNoYTEtZmlsZS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0OyBjaGVjayAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorbXNnc3RyICJvYmpla3RrYXRhbG9nZW4gJXMgZmlubnMgaW50ZTsgc2UgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKKworIzogc2hhMS1maWxlLmM6NTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgYWx0ZXJuYXRlIG9iamVjdCBwYXRoOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBub3JtYWxpc2VyYSBzdXBwbGVyYW5kZSBvYmpla3Rzw7ZrdsOkZzogJXMiCisKKyM6IHNoYTEtZmlsZS5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWdub3JpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIiVzOiBpZ25vcmVyYXIgc3VwcGxlcmFuZGUgb2JqZWt0bGFnZXIsIGbDtnIgZGp1cCBuw6RzdGxpbmciCisKKyM6IHNoYTEtZmlsZS5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIG9iamVjdCBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJrYW4gaW50ZSBub3JtYWxpc2VyYSBvYmpla3RrYXRhbG9nZW46ICVzIgorCisjOiBzaGExLWZpbGUuYzo2MjUKK21zZ2lkICJ1bmFibGUgdG8gZmRvcGVuIGFsdGVybmF0ZXMgbG9ja2ZpbGUiCittc2dzdHIgImthbiBpbnRlIHV0ZsO2cmEgXCJmZG9wZW5cIiBww6Ugc3VwcGxlYW50bMOlc2ZpbCIKKworIzogc2hhMS1maWxlLmM6NjQzCittc2dpZCAidW5hYmxlIHRvIHJlYWQgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBcImFsdGVybmF0ZXNcIi1maWxlbiIKKworIzogc2hhMS1maWxlLmM6NjUwCittc2dpZCAidW5hYmxlIHRvIG1vdmUgbmV3IGFsdGVybmF0ZXMgZmlsZSBpbnRvIHBsYWNlIgorbXNnc3RyICJrYW4gaW50ZSBmbHl0dGEgbnkgXCJhbHRlcm5hdGVzXCItZmlsIHDDpSBwbGF0cyIKKworIzogc2hhMS1maWxlLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAic8O2a3bDpGdlbiBcIiVzXCIgZmlubnMgaW50ZSIKKworIzogc2hhMS1maWxlLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgYXMgYSBsaW5rZWQgY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIgorbXNnc3RyICJyZWZlcmVuc2Fya2l2ZXQgXCIlc1wiIHNvbSBlbiBsw6Rua2FkIHV0Y2hlY2tuaW5nIHN0w7ZkcyBpbnRlIMOkbm51LiIKKworIzogc2hhMS1maWxlLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgInJlZmVyZW5zYXJraXZldCBcIiVzXCIgw6RyIGludGUgZXR0IGxva2FsdCBhcmtpdi4iCisKKyM6IHNoYTEtZmlsZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgInJlZmVyZW5zYXJraXZldCBcIiVzXCIgw6RyIGdydW50IgorCisjOiBzaGExLWZpbGUuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICJyZWZlcmVuc2Fya2l2ZXQgXCIlc1wiIMOkciB5bXBhdCIKKworIzogc2hhMS1maWxlLmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSB3aGlsZSBwYXJzaW5nIGFsdGVybmF0ZSByZWZzOiAlcyIKK21zZ3N0ciAiZmVsYWt0aWcgcmFkIHZpZCB0b2xrbmluZyBhdiBzdXBwbGVyYW5kZSByZWZlcmVuc2VyOiAlcyIKKworIzogc2hhMS1maWxlLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAiZsO2cnPDtmsgYXR0IHV0ZsO2cmEgXCJtbWFwXCIgcMOlICU8UFJJdU1BWD4gw7Z2ZXIgZ3LDpG5zZW4gJTxQUkl1TUFYPiIKKworIzogc2hhMS1maWxlLmM6OTY0Cittc2dpZCAibW1hcCBmYWlsZWQiCittc2dzdHIgIm1tYXAgbWlzc2x5Y2thZGVzIgorCisjOiBzaGExLWZpbGUuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBmaWxlICVzIGlzIGVtcHR5IgorbXNnc3RyICJvYmpla3RmaWxlbiAlcyDDpHIgdG9tIgorCisjOiBzaGExLWZpbGUuYzoxMjYzIHNoYTEtZmlsZS5jOjI0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBsb29zZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAidHJhc2lndCBsw7ZzdCBvYmpla3QgXCIlc1wiIgorCisjOiBzaGExLWZpbGUuYzoxMjY1IHNoYTEtZmlsZS5jOjI0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2FyYmFnZSBhdCBlbmQgb2YgbG9vc2Ugb2JqZWN0ICclcyciCittc2dzdHIgInNrcsOkcCBpIHNsdXRldCBhdiBsw7ZzdCBvYmpla3QgXCIlc1wiIgorCisjOiBzaGExLWZpbGUuYzoxMzA3Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSIKK21zZ3N0ciAiZmVsYWt0aWcgb2JqZWt0dHlwIgorCisjOiBzaGExLWZpbGUuYzoxMzkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgImthbiBpbnRlIHBhY2thIHVwcCAlcy1odXZ1ZCBtZWQgLS1hbGxvdy11bmtub3duLXR5cGUiCisKKyM6IHNoYTEtZmlsZS5jOjEzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIiCittc2dzdHIgImthbiBpbnRlIHBhY2thIHVwcCAlcy1odXZ1ZGV0IgorCisjOiBzaGExLWZpbGUuYzoxNDAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAia2FuIGludGUgdG9sa2EgJXMtaHV2dWQgbWVkIC0tYWxsb3ctdW5rbm93bi10eXBlIgorCisjOiBzaGExLWZpbGUuYzoxNDAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIiCittc2dzdHIgImthbiBpbnRlIHRvbGthICVzLWh1dnVkIgorCisjOiBzaGExLWZpbGUuYzoxNjI5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGzDpHNhIG9iamVrdGV0ICVzIgorCisjOiBzaGExLWZpbGUuYzoxNjMzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2VtZW50ICVzIG5vdCBmb3VuZCBmb3IgJXMiCittc2dzdHIgImVyc8OkdHRuaW5nZW4gJXMgaGl0dGFkZXMgaW50ZSBmw7ZyICVzIgorCisjOiBzaGExLWZpbGUuYzoxNjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImxvb3NlIG9iamVjdCAlcyAoc3RvcmVkIGluICVzKSBpcyBjb3JydXB0IgorbXNnc3RyICJsw7ZzdCBvYmpla3QgJXMgKGxhZ3JhdCBpICVzKSDDpHIgdHJhc2lndCIKKworIzogc2hhMS1maWxlLmM6MTY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZWQgb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgInBhY2thdCBvYmpla3QgJXMgKGxhZ3JhdCBpICVzKSDDpHIgdHJhc2lndCIKKworIzogc2hhMS1maWxlLmM6MTc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgZmlsZW4gJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBwZXJtaXNzaW9uIHRvICclcyciCittc2dzdHIgImthbiBpbnRlIHPDpHR0YSBiZWjDtnJpZ2hldGVuIHRpbGwgXCIlc1wiIgorCisjOiBzaGExLWZpbGUuYzoxNzYwCittc2dpZCAiZmlsZSB3cml0ZSBlcnJvciIKK21zZ3N0ciAiZmVsIHZpZCBza3Jpdm5pbmcgYXYgZmlsIgorCisjOiBzaGExLWZpbGUuYzoxNzgwCittc2dpZCAiZXJyb3Igd2hlbiBjbG9zaW5nIGxvb3NlIG9iamVjdCBmaWxlIgorbXNnc3RyICJmZWwgdmlkIHN0w6RuZ25pbmcgYXYgZmlsIGbDtnIgbMO2c3Qgb2JqZWt0IgorCisjOiBzaGExLWZpbGUuYzoxODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImluc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciBhZGRpbmcgYW4gb2JqZWN0IHRvIHJlcG9zaXRvcnkgZGF0YWJhc2UgJXMiCittc2dzdHIgIiIKKyJvdGlsbHLDpGNrbGlnIGJlaMO2cmlnaGV0IGbDtnIgYXR0IGzDpGdnYSB0aWxsIG9iamVrdCB0aWxsIGFya2l2ZGF0YWJhc2VuICVzIgorCisjOiBzaGExLWZpbGUuYzoxODQ3Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAia2FuIGludGUgc2thcGEgdGVtcG9yw6RyIGZpbCIKKworIzogc2hhMS1maWxlLmM6MTg3MQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgZmlsIGbDtnIgbMO2c3Qgb2JqZWt0IgorCisjOiBzaGExLWZpbGUuYzoxODc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIG5ldyBvYmplY3QgJXMgKCVkKSIKK21zZ3N0ciAia2FuIGludGUgdXRmw7ZyYSBcImRlZmxhdGVcIiBww6Ugbnl0dCBvYmpla3QgJXMgKCVkKSIKKworIzogc2hhMS1maWxlLmM6MTg4MQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlRW5kIG9uIG9iamVjdCAlcyBmYWlsZWQgKCVkKSIKK21zZ3N0ciAiXCJkZWZsYXRlZW5kXCIgcMOlIG9iamVrdGV0ICVzIG1pc3NseWNrYWRlcyAoJWQpIgorCisjOiBzaGExLWZpbGUuYzoxODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZ1c2VkIGJ5IHVuc3RhYmxlIG9iamVjdCBzb3VyY2UgZGF0YSBmb3IgJXMiCittc2dzdHIgImbDtnJ2aXJyYWQgYXYgaW5zdGFiaWwgb2JqZWt0a8OkbGxkYXRhIGbDtnIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE4OTUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB1dGltZSgpIG9uICVzIgorbXNnc3RyICJcInV0aW1lKClcIiBtaXNzbHlja2FkZXMgcMOlICVzIgorCisjOiBzaGExLWZpbGUuYzoxOTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgImthbiBpbnRlIGzDpHNhIG9iamVrdCBmw7ZyICVzIgorCisjOiBzaGExLWZpbGUuYzoyMDExCittc2dpZCAiY29ycnVwdCBjb21taXQiCittc2dzdHIgInRyYXNpayBpbmNoZWNrbmluZyIKKworIzogc2hhMS1maWxlLmM6MjAxOQorbXNnaWQgImNvcnJ1cHQgdGFnIgorbXNnc3RyICJ0cmFzaWcgdGFnZyIKKworIzogc2hhMS1maWxlLmM6MjExOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIGVycm9yIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICJsw6RzZmVsIHZpZCBpbmRleGVyaW5nIGF2ICVzIgorCisjOiBzaGExLWZpbGUuYzoyMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IHJlYWQgd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgImbDtnIgbGl0ZSBsw6RzdGVzIHZpZCBpbmRleGVyaW5nIGF2ICVzIgorCisjOiBzaGExLWZpbGUuYzoyMTk1IHNoYTEtZmlsZS5jOjIyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIKK21zZ3N0ciAiJXM6IG1pc3NseWNrYWRlcyBsw6RnZ2EgaW4gaSBkYXRhYmFzZW4iCisKKyM6IHNoYTEtZmlsZS5jOjIyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIKK21zZ3N0ciAiJXM6IGZpbHR5cGVuIHN0w7ZkcyBlaiIKKworIzogc2hhMS1maWxlLmM6MjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCBvYmplY3QiCittc2dzdHIgIiVzIMOkciBpbnRlIGV0dCBnaWx0aWd0IG9iamVrdCIKKworIzogc2hhMS1maWxlLmM6MjIzNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiJXMgw6RyIGludGUgZXR0IGdpbHRpZ3QgXCIlc1wiLW9iamVrdCIKKworIzogc2hhMS1maWxlLmM6MjI2NCBidWlsdGluL2luZGV4LXBhY2suYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgImthbiBpbnRlIMO2cHBuYSAlcyIKKworIzogc2hhMS1maWxlLmM6MjQ1NCBzaGExLWZpbGUuYzoyNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggZm9yICVzIChleHBlY3RlZCAlcykiCittc2dzdHIgImhhc2ggc3TDpG1tZXIgaW50ZSBmw7ZyICVzIChmw7ZydsOkbnRhZGUgJXMpIgorCisjOiBzaGExLWZpbGUuYzoyNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICVzIgorbXNnc3RyICJrYW4gaW50ZSB1dGbDtnJhIFwibW1hcFwiIGbDtnIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayBoZWFkZXIgb2YgJXMiCittc2dzdHIgImthbiBpbnRlIHBhY2thIHVwcCBodXZ1ZCBmw7ZyICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBoZWFkZXIgb2YgJXMiCittc2dzdHIgImthbiBpbnRlIHRvbGthIGh1dnVkIGbDtnIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayBjb250ZW50cyBvZiAlcyIKK21zZ3N0ciAia2FuIGludGUgdG9sa2EgaW5uZWjDpWxsIGkgJXMiCisKKyM6IHNoYTEtbmFtZS5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCBTSEExICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAia29ydCBTSEExICVzIMOkciB0dmV0eWRpZyIKKworIzogc2hhMS1uYW1lLmM6NDk3Cittc2dpZCAiVGhlIGNhbmRpZGF0ZXMgYXJlOiIKK21zZ3N0ciAiS2FuZGlkYXRlcm5hIMOkcjoiCisKKyM6IHNoYTEtbmFtZS5jOjc5NgorbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisid2hlcmUgXCIkYnJcIiBpcyBzb21laG93IGVtcHR5IGFuZCBhIDQwLWhleCByZWYgaXMgY3JlYXRlZC4gUGxlYXNlXG4iCisiZXhhbWluZSB0aGVzZSByZWZzIGFuZCBtYXliZSBkZWxldGUgdGhlbS4gVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5XG4iCisicnVubmluZyBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiCittc2dzdHIgIiIKKyJHaXQgc2thcGFyIG5vcm1hbHQgYWxkcmlnIHJlZmVyZW5zZXIgc29tIHNsdXRhciBtZWQgNDAgaGV4YWRlY2ltYWxhXG4iCisidGVja2VuLCBkw6UgZGV0dGEgaWdub3JlcmFzIG7DpHIgZHUgYW5nZXIgNDAtaGV4IGVuYmFydC4gRGVzc2FcbiIKKyJyZWZlcmVuc2VyIGthbiBza2FwYXMgYXYgbWlzc3RhZy4gVGlsbCBleGVtcGVsLCBmw7ZyXG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorIlxuIgorImTDpHIgXCIkYnJcIiBww6UgbsOlZ290IHPDpHR0IGJsaXZpdCB0b210IG9jaCBlbiA0MC1oZXgtcmVmZXJlbnMgc2thcGF0cy5cbiIKKyJVbmRlcnPDtmsgcmVmZXJlbnNlcm5hIG9jaCB0YSBrYW5za2UgYm9ydCBkZW0uIFN0w6RuZyBhdiBtZWRkZWxhbmRldFxuIgorImdlbm9tIGF0dCBrw7ZyYSBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiCisKKyM6IHNoYTEtbmFtZS5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICclLipzJyBvbmx5IGdvZXMgYmFjayB0byAlcyIKK21zZ3N0ciAibG9nZ2VuIGbDtnIgXCIlLipzXCIgcsOkY2tlciBiYXJhIHRpbGxiYWthIHRpbGwgJXMiCisKKyM6IHNoYTEtbmFtZS5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICclLipzJyBvbmx5IGhhcyAlZCBlbnRyaWVzIgorbXNnc3RyICJsb2dnZW4gZsO2ciBcIiUuKnNcIiBoYXIgYmFyYSAlZCBwb3N0ZXIiCisKKyM6IHNoYTEtbmFtZS5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGV4aXN0cyBvbiBkaXNrLCBidXQgbm90IGluICclLipzJyIKK21zZ3N0ciAiU8O2a3bDpGdlbiBcIiVzXCIgZmlubnMgcMOlIGRpc2tlbiwgbWVuIGludGUgaSBcIiUuKnNcIiIKKworIzogc2hhMS1uYW1lLmM6MTY5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicGF0aCAnJXMnIGV4aXN0cywgYnV0IG5vdCAnJXMnXG4iCisiaGludDogRGlkIHlvdSBtZWFuICclLipzOiVzJyBha2EgJyUuKnM6Li8lcyc/IgorbXNnc3RyICIiCisic8O2a3bDpGdlbiBcIiVzXCIgZmlubnMsIG1lbiBpbnRlIGkgXCIlc1wiXG4iCisidGlwczogTWVuYWRlIGR1IFwiJS4qczolc1wiLCDDpHZlbiBrw6RuZCBzb20gXCIlLipzOi4vJXNcIj8iCisKKyM6IHNoYTEtbmFtZS5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IGluICclLipzJyIKK21zZ3N0ciAic8O2a3bDpGdlbiBcIiVzXCIgZmlubnMgaW50ZSBpIFwiJS4qc1wiIgorCisjOiBzaGExLW5hbWUuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXRoICclcycgaXMgaW4gdGhlIGluZGV4LCBidXQgbm90IGF0IHN0YWdlICVkXG4iCisiaGludDogRGlkIHlvdSBtZWFuICc6JWQ6JXMnPyIKK21zZ3N0ciAiIgorInPDtmt2w6RnZW4gXCIlc1wiIGZpbm5zIGkgaW5kZXhldCBtZW4gaW50ZSBpIGV0YXBwICVkXG4iCisidGlwczogTWVuYWRlIGR1IFwiOiVkOiVzXCI/IgorCisjOiBzaGExLW5hbWUuYzoxNzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXRoICclcycgaXMgaW4gdGhlIGluZGV4LCBidXQgbm90ICclcydcbiIKKyJoaW50OiBEaWQgeW91IG1lYW4gJzolZDolcycgYWthICc6JWQ6Li8lcyc/IgorbXNnc3RyICIiCisic8O2a3bDpGdlbiBcIiVzXCIgZmlubnMgaSBpbmRleGV0LCBtZW4gaW50ZSBpIFwiJXNcIlxuIgorInRpcHM6IE1lbmFkZSBkdSBcIjolZDolc1wiLCDDpHZlbiBrw6RuZCBzb20gXCI6JWQ6Li8lc1wiPyIKKworIzogc2hhMS1uYW1lLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gdGhlIGluZGV4IgorbXNnc3RyICJzw7ZrdsOkZ2VuIFwiJXNcIiBmaW5ucyBww6UgZGlzaywgbWVuIGludGUgaSBpbmRleGV0IgorCisjOiBzaGExLW5hbWUuYzoxNzU4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCAobmVpdGhlciBvbiBkaXNrIG5vciBpbiB0aGUgaW5kZXgpIgorbXNnc3RyICJzw7ZrdsOkZ2VuIFwiJXNcIiBmaW5ucyBpbnRlICh2YXJrZW4gaSBkaXNrZW4gZWxsZXIgaSBpbmRleGV0KSIKKworIzogc2hhMS1uYW1lLmM6MTc3MQorbXNnaWQgInJlbGF0aXZlIHBhdGggc3ludGF4IGNhbid0IGJlIHVzZWQgb3V0c2lkZSB3b3JraW5nIHRyZWUiCittc2dzdHIgInJlbGF0aXYgc8O2a3bDpGcga2FuIGludGUgYW52w6RuZGFzIHV0YW5mw7ZyIGFyYmV0c2thdGFsb2dlbiIKKworIzogc2hhMS1uYW1lLmM6MTkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCBuYW1lICclLipzJy4iCittc2dzdHIgImZlbGFrdGlndCBvYmpla3RuYW1uIFwiJS4qc1wiLiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlCisjOiBzdHJidWYuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCIgorbXNnc3RyICIldSwlMi4ydSBHaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIvcyIKK21zZ3N0ciAiJXUsJTIuMnUgR2lCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZQorIzogc3RyYnVmLmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQiIKK21zZ3N0ciAiJXUsJTIuMnUgTWlCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCL3MiCittc2dzdHIgIiV1LCUyLjJ1IE1pQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBLaUIiCittc2dzdHIgIiV1LCUyLjJ1IEtpQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQi9zIgorbXNnc3RyICIldSwlMi4ydSBLaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUKKyM6IHN0cmJ1Zi5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlIgorbXNnaWRfcGx1cmFsICIldSBieXRlcyIKK21zZ3N0clswXSAiJXUgYnl0ZSIKK21zZ3N0clsxXSAiJXUgYnl0ZXMiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUvcyIKK21zZ2lkX3BsdXJhbCAiJXUgYnl0ZXMvcyIKK21zZ3N0clswXSAiJXUgYnl0ZS9zIgorbXNnc3RyWzFdICIldSBieXRlcy9zIgorCisjOiBzdHJidWYuYzoxMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBlZGl0ICclcyciCittc2dzdHIgImt1bmRlIGludGUgcmVkaWdlcmEgXCIlc1wiIgorCisjOiBzdWJtb2R1bGUuYzoxMTQgc3VibW9kdWxlLmM6MTQzCittc2dpZCAiQ2Fubm90IGNoYW5nZSB1bm1lcmdlZCAuZ2l0bW9kdWxlcywgcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMgZmlyc3QiCittc2dzdHIgIiIKKyJLYW4gaW50ZSDDpG5kcmEgLmdpdG1vZHVsZXMtZmlsIHNvbSBpbnRlIHNsYWdpdHMgaWhvcCwgbMO2cyAiCisic2FtbWFuc2xhZ25pbmdza29uZmxpa3RlciBmw7Zyc3QiCisKKyM6IHN1Ym1vZHVsZS5jOjExOCBzdWJtb2R1bGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIgorbXNnc3RyICJIaXR0YWRlIGludGUgbsOlZ29uIHNla3Rpb24gaSAuZ2l0bW9kdWxlcyBkw6RyIHPDtmt2w6RnPSVzIgorCisjOiBzdWJtb2R1bGUuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSAuZ2l0bW9kdWxlcyBlbnRyeSBmb3IgJXMiCittc2dzdHIgIkt1bmRlIGludGUgdGEgYm9ydCAuZ2l0bW9kdWxlcy1wb3N0ZW4gZsO2ciAlcyIKKworIzogc3VibW9kdWxlLmM6MTY1Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGvDtmEgdXBwZGF0ZXJhZCAuZ2l0bW9kdWxlcyIKKworIzogc3VibW9kdWxlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJpIGVqIHV0Y2hlY2thZCB1bmRlcm1vZHVsIFwiJXNcIiIKKworIzogc3VibW9kdWxlLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAiU8O2a3bDpGdzYW5naXZlbHNlbiBcIiVzXCIgw6RyIGkgdW5kZXJtb2R1bGVuIFwiJS4qc1wiIgorCisjOiBzdWJtb2R1bGUuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0taWdub3JlLXN1Ym1vZHVsZXMgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJmZWxha3RpZ3QgYXJndW1lbnQgdGlsbCAtLWlnbm9yZS1zdWJtb2R1bGVzOiAlcyIKKworIzogc3VibW9kdWxlLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgaW4gY29tbWl0ICVzIGF0IHBhdGg6ICclcycgY29sbGlkZXMgd2l0aCBhIHN1Ym1vZHVsZSBuYW1lZCB0aGUgIgorInNhbWUuIFNraXBwaW5nIGl0LiIKK21zZ3N0ciAiIgorIlVuZGVybW9kdWxlbiBpIGluY2hlY2tuaW5nICVzIHDDpSBzw7ZrdsOkZ2VuOiBcIiVzXCIga3JvY2thciBtZWQgZW4gdW5kZXJtb2R1bCAiCisibWVkIHNhbW1hIG5hbW4uIEhvcHBhciDDtnZlciBkZW4uIgorCisjOiBzdWJtb2R1bGUuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGVudHJ5ICclcycgKCVzKSBpcyBhICVzLCBub3QgYSBjb21taXQiCittc2dzdHIgInVuZGVybW9kdWxwb3N0ZW4gXCIlc1wiICglcykgw6RyIGVuICVzLCBpbnRlIGVuIGluY2hlY2tuaW5nIgorCisjOiBzdWJtb2R1bGUuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCA8Y29tbWl0cz4gLS1ub3QgLS1yZW1vdGVzIC1uIDEnIGNvbW1hbmQgaW4gIgorInN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorImt1bmRlIGludGUga8O2cmEgXCJnaXQgcmV2LWxpc3QgPGluY2hlY2tuaW5nYXI+IC0tbm90IC0tcmVtb3RlcyAtbiAxXCIgaSAiCisidW5kZXJtb2R1bGVuIFwiJXNcIiIKKworIzogc3VibW9kdWxlLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9jZXNzIGZvciBzdWJtb2R1bGUgJyVzJyBmYWlsZWQiCittc2dzdHIgInByb2Nlc3MgZsO2ciB1bmRlcm1vZHVsZW4gXCIlc1wiIG1pc3NseWNrYWRlcyIKKworIzogc3VibW9kdWxlLmM6MTE0NyBidWlsdGluL2JyYW5jaC5jOjY4MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjA0NQorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgc2zDpSB1cHAgSEVBRCBzb20gZ2lsdGlnIHJlZmVyZW5zLiIKKworIzogc3VibW9kdWxlLmM6MTE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIlPDpG5kZXIgdW5kZXJtb2R1bGVuIFwiJXNcIlxuIgorCisjOiBzdWJtb2R1bGUuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBwdXNoIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIkt1bmRlIGludGUgc8OkbmRhIHVuZGVybW9kdWxlbiBcIiVzXCJcbiIKKworIzogc3VibW9kdWxlLmM6MTQ1MworIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyBzdWJtb2R1bGUgJXMlc1xuIgorbXNnc3RyICJIw6RtdGFyIHVuZGVybW9kdWxlbiAlcyVzXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjE0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFjY2VzcyBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICJLdW5kZSBpbnRlIGtvbW1hIMOldCB1bmRlcm1vZHVsZW4gXCIlc1wiXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjE2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9ycyBkdXJpbmcgc3VibW9kdWxlIGZldGNoOlxuIgorIiVzIgorbXNnc3RyICIiCisiRmVsIHZpZCBow6RtdG5pbmcgYXYgdW5kZXJtb2R1bDpcbiIKKyIlcyIKKworIzogc3VibW9kdWxlLmM6MTY2MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG5vdCByZWNvZ25pemVkIGFzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIlwiJXNcIiBrw6RubnMgaW50ZSBpZ2VuIHNvbSBldHQgZ2l0LWFya2l2IgorCisjOiBzdWJtb2R1bGUuYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49MicgaW4gc3VibW9kdWxlICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIGvDtnJhIFwiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj0yXCIgaSB1bmRlcm1vZHVsZW4gXCIlc1wiIgorCisjOiBzdWJtb2R1bGUuYzoxNzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIidnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTInIGZhaWxlZCBpbiBzdWJtb2R1bGUgJXMiCittc2dzdHIgIlwiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj0yXCIgbWlzc2x5Y2thZGVzIGkgdW5kZXJtb2R1bGVuIFwiJXNcIiIKKworIzogc3VibW9kdWxlLmM6MTgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHN0YXJ0YSBcImdpdCBzdGF0dXNcIiBpIHVuZGVybW9kdWxlbiBcIiVzXCIiCisKKyM6IHN1Ym1vZHVsZS5jOjE4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUga8O2cmEgXCJnaXQgc3RhdHVzXCIgaSB1bmRlcm1vZHVsZW4gXCIlc1wiIgorCisjOiBzdWJtb2R1bGUuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIkt1bmRlIGludGUgdGEgYm9ydCBpbnN0w6RsbG5pbmdlbiBjb3JlLndvcmt0cmVlIGkgdW5kZXJtb2R1bGVuIFwiJXNcIiIKKworIzogc3VibW9kdWxlLmM6MTg1NSBzdWJtb2R1bGUuYzoyMTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUgcmVrdXJzZXJhIGluIGkgdW5kZXJtb2R1bGVuIFwiJXNcIiIKKworIzogc3VibW9kdWxlLmM6MTg3NgorbXNnaWQgImNvdWxkIG5vdCByZXNldCBzdWJtb2R1bGUgaW5kZXgiCittc2dzdHIgImt1bmRlIGludGUgw6V0ZXJzdMOkbGxhIGluZGV4ZXQgaSB1bmRlcm1vZHVsIgorCisjOiBzdWJtb2R1bGUuYzoxOTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGhhcyBkaXJ0eSBpbmRleCIKK21zZ3N0ciAidW5kZXJtb2R1bGVuIFwiJXNcIiBoYXIgZXR0IHNtdXRzaWd0IGluZGV4IgorCisjOiBzdWJtb2R1bGUuYzoxOTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnIGNvdWxkIG5vdCBiZSB1cGRhdGVkLiIKK21zZ3N0ciAiVW5kZXJtb2R1bGVyIFwiJXNcIiBrdW5kZSBpbnRlIHVwcGRhdGVyYXMuIgorCisjOiBzdWJtb2R1bGUuYzoyMDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSBnaXQgZGlyICclcycgaXMgaW5zaWRlIGdpdCBkaXIgJyUuKnMnIgorbXNnc3RyICJ1bmRlcm1vZHVsLWdpdGthdGFsb2dlbiBcIiVzXCIgw6RyIGludXRpIGdpdGthdGFsb2dlbiBcIiUuKnNcIiIKKworIzogc3VibW9kdWxlLmM6MjA1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicmVsb2NhdGVfZ2l0ZGlyIGZvciBzdWJtb2R1bGUgJyVzJyB3aXRoIG1vcmUgdGhhbiBvbmUgd29ya3RyZWUgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorInJlbG9jYXRlX2dpdGRpciBmw7ZyIHVuZGVybW9kdWxlbiBcIiVzXCIsIHNvbSBoYXIgbWVyIMOkbiBlbiBhcmJldHNrYXRhbG9nLCAiCisic3TDtmRzIGVqIgorCisjOiBzdWJtb2R1bGUuYzoyMDcxIHN1Ym1vZHVsZS5jOjIxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBuYW1lIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzbMOlIHVwcCBuYW1uZXQgZsO2ciB1bmRlcm1vZHVsZW4gXCIlc1wiIgorCisjOiBzdWJtb2R1bGUuYzoyMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG1vdmUgJyVzJyBpbnRvIGFuIGV4aXN0aW5nIGdpdCBkaXIiCittc2dzdHIgInbDpGdyYXIgZmx5dHRhIFwiJXNcIiB0aWxsIGVuIGJlZmludGxpZyBnaXRrYXRhbG9nIgorCisjOiBzdWJtb2R1bGUuYzoyMDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNaWdyYXRpbmcgZ2l0IGRpcmVjdG9yeSBvZiAnJXMlcycgZnJvbVxuIgorIiclcycgdG9cbiIKKyInJXMnXG4iCittc2dzdHIgIiIKKyJNaWdyZXJhciBnaXQta2F0YWxvZ2VuIGbDtnIgXCIlcyVzXCIgZnLDpW5cbiIKKyJcIiVzXCIgdGlsbFxuIgorIlwiJXNcIlxuIgorCisjOiBzdWJtb2R1bGUuYzoyMjA5Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGxzLWZpbGVzIGluIC4uIgorbXNnc3RyICJrdW5kZSBpbnRlIHN0YXJ0YSBscy1maWxlcyBpIC4uIgorCisjOiBzdWJtb2R1bGUuYzoyMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImxzLXRyZWUgcmV0dXJuZWQgdW5leHBlY3RlZCByZXR1cm4gY29kZSAlZCIKK21zZ3N0ciAibHMtdHJlZSByZXR1cm5lcmFkZSBlbiBvdsOkbnRhZCByZXR1cmtvZCAlZCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBzdXNwaWNpb3VzIHN1Ym1vZHVsZSBuYW1lOiAlcyIKK21zZ3N0ciAiaWdub3JlcmFyIG1pc3N0w6Rua3QgdW5kZXJtb2R1bG5hbW46ICVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MzAzCittc2dpZCAibmVnYXRpdmUgdmFsdWVzIG5vdCBhbGxvd2VkIGZvciBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorbXNnc3RyICJuZWdhdGl2YSB2w6RyZGVuIMOkciBpbnRlIHRpbGzDpXRuYSBmw7ZyIHN1Ym1vZHVsZS5mZXRjaGpvYnMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJyVzJyB3aGljaCBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uOiAlcyIKK21zZ3N0ciAiaWdub3JlcmFyIFwiJXNcIiBzb20ga2FuIHRvbGthcyBzb20gZW4ga29tbWFuZG9yYWRzZmxhZ2dhOiAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAib2dpbHRpZ3QgdsOkcmRlIGbDtnIgJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSAuZ2l0bW9kdWxlcyBlbnRyeSAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSB1cHBkYXRlcmEgLmdpdG1vZHVsZXMtcG9zdGVuICVzIgorCisjOiB0cmFpbGVyLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgdHJhaWxlciBjb21tYW5kICclcycgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdXRmw7ZyYSBcInRyYWlsZXJcIi1rb21tYW5kb3QgXCIlc1wiIgorCisjOiB0cmFpbGVyLmM6NDg1IHRyYWlsZXIuYzo0OTAgdHJhaWxlci5jOjQ5NSB0cmFpbGVyLmM6NTQ5IHRyYWlsZXIuYzo1NTMKKyM6IHRyYWlsZXIuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAib2vDpG50IHbDpHJkZSBcIiVzXCIgZsO2ciBueWNrZWxuIFwiJXNcIiIKKworIzogdHJhaWxlci5jOjUzOSB0cmFpbGVyLmM6NTQ0IGJ1aWx0aW4vcmVtb3RlLmM6Mjk4IGJ1aWx0aW4vcmVtb3RlLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgIm1lciDDpG4gZW4gJXMiCisKKyM6IHRyYWlsZXIuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgdHJhaWxlciB0b2tlbiBpbiB0cmFpbGVyICclLipzJyIKK21zZ3N0ciAidG9tIHNsw6RwcmFkc3N5bWJvbCBpIHNsw6RwcmFkZW4gXCIlLipzXCIiCisKKyM6IHRyYWlsZXIuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIGluZGF0YWZpbGVuIFwiJXNcIiIKKworIzogdHJhaWxlci5jOjc1MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgZnLDpW4gc3RhbmRhcmQgaW4iCisKKyM6IHRyYWlsZXIuYzoxMDExIHdyYXBwZXIuYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJXMiCittc2dzdHIgImt1bmRlIGludGUgdGEgc3RhdHVzIHDDpSAlcyIKKworIzogdHJhaWxlci5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUiCittc2dzdHIgImZpbGVuICVzIMOkciBpbnRlIGVuIG5vcm1hbCBmaWwiCisKKyM6IHRyYWlsZXIuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IHdyaXRhYmxlIGJ5IHVzZXIiCittc2dzdHIgImZpbGVuICVzIMOkciBpbnRlIHNrcml2YmFyIGF2IGFudsOkbmRhcmVuIgorCisjOiB0cmFpbGVyLmM6MTAyNworbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSB0ZW1wb3LDpHIgZmlsIgorCisjOiB0cmFpbGVyLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIGJ5dGEgbmFtbiBww6UgdGVtcG9yw6RyIGZpbCB0aWxsICVzIgorCisjOiB0cmFuc3BvcnQuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2V0IHVwc3RyZWFtIG9mICclcycgdG8gJyVzJyBvZiAnJXMnXG4iCittc2dzdHIgIlNrdWxsZSBzw6R0dGEgdXBwc3Ryw7ZtcyBmw7ZyIFwiJXNcIiB0aWxsIFwiJXNcIiBmcsOlbiBcIiVzXCJcbiIKKworIzogdHJhbnNwb3J0LmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGJ1bmRsZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIHBha2V0ZXQgKGJ1bmRsZW4pIFwiJXNcIiIKKworIzogdHJhbnNwb3J0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIKK21zZ3N0ciAidHJhbnNwb3J0OiBvZ2lsdGlnIGZsYWdnYSBmw7ZyIGRlcHRoOiBcIiVzXCIiCisKKyM6IHRyYW5zcG9ydC5jOjI2NgorbXNnaWQgInNlZSBwcm90b2NvbC52ZXJzaW9uIGluICdnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGRldGFpbHMiCittc2dzdHIgInNlIHByb3RvY29sLnZlcnNpb24gaSBcImdpdCBoZWxwIGNvbmZpZ1wiIGbDtnIgbWVyIGluZm9ybWF0aW9uIgorCisjOiB0cmFuc3BvcnQuYzoyNjcKK21zZ2lkICJzZXJ2ZXIgb3B0aW9ucyByZXF1aXJlIHByb3RvY29sIHZlcnNpb24gMiBvciBsYXRlciIKK21zZ3N0ciAic2VydmVyZmxhZ2dvciBrcsOkdmVyIHByb3Rva29sbHZlcnNpb24gMiBlbGxlciBzZW5hcmUiCisKKyM6IHRyYW5zcG9ydC5jOjYzMgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSB0cmFuc3BvcnQuY29sb3IuKiBjb25maWciCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgaW5zdMOkbGxuaW5nZW4gZsO2ciB0cmFuc3BvcnQuY29sb3IuKiIKKworIzogdHJhbnNwb3J0LmM6NzA1Cittc2dpZCAic3VwcG9ydCBmb3IgcHJvdG9jb2wgdjIgbm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAic3TDtmQgZsO2ciBwcm90b2tvbGwgdjIgw6RubnUgZWogaW1wbGVtZW50ZXJhdCIKKworIzogdHJhbnNwb3J0LmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgZm9yIGNvbmZpZyAnJXMnOiAlcyIKK21zZ3N0ciAib2vDpG50IHbDpHJkZSBmw7ZyIGluc3TDpGxsbmluZ2VuIFwiJXNcIjogJXMiCisKKyM6IHRyYW5zcG9ydC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAidHJhbnNwb3J0ZW4gXCIlc1wiIHRpbGzDpXRzIGludGUiCisKKyM6IHRyYW5zcG9ydC5jOjk0OQorbXNnaWQgImdpdC1vdmVyLXJzeW5jIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiCittc2dzdHIgImdpdC1vdmVyLXJzeW5jIHN0w7ZkcyBpbnRlIGzDpG5ncmUiCisKKyM6IHRyYW5zcG9ydC5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgc3VibW9kdWxlIHBhdGhzIGNvbnRhaW4gY2hhbmdlcyB0aGF0IGNhblxuIgorIm5vdCBiZSBmb3VuZCBvbiBhbnkgcmVtb3RlOlxuIgorbXNnc3RyICIiCisiRsO2bGphbmRlIHVuZGVybW9kdWxzw7ZrdsOkZ2FyIGlubmVow6VsbGVyIMOkbmRyaW5nYXIgc29tXG4iCisiaW50ZSBrYW4gaGl0dGFzIGF2IGZqw6RycmFybmE6XG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBsZWFzZSB0cnlcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisidG8gcHVzaCB0aGVtIHRvIGEgcmVtb3RlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiVGVzdGFcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorImVsbGVyIGNkIHRpbGwgc8O2a3bDpGdlbiBvY2ggYW52w6RuZFxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyJmw7ZyIGF0dCBzw6RuZGEgZGVtIHRpbGwgZmrDpHJyZW4uXG4iCisiXG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwNTYKK21zZ2lkICJBYm9ydGluZy4iCittc2dzdHIgIkF2YnJ5dGVyLiIKKworIzogdHJhbnNwb3J0LmM6MTIwMQorbXNnaWQgImZhaWxlZCB0byBwdXNoIGFsbCBuZWVkZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzw6RuZGEgYWxsYSBuw7ZkdsOkbmRpZ2EgdW5kZXJtb2R1bGVyIgorCisjOiB0cmFuc3BvcnQuYzoxMzQ1IHRyYW5zcG9ydC1oZWxwZXIuYzo2NTcKK21zZ2lkICJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAiZnVua3Rpb25lbiBzdMO2ZHMgaW50ZSBhdiBwcm90b2tvbGxldCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxIHRyYW5zcG9ydC1oZWxwZXIuYzo5MAorbXNnaWQgImZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiCittc2dzdHIgImtvbXBsZXR0IHNrcml2bmluZyB0aWxsIGZqw6Rycmhqw6RscGFyZSBtaXNzbHlja2FkZXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgcmVtb3RlIGhlbHBlciBmb3IgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgaGl0dGEgZmrDpHJyaGrDpGxwYXJlIGbDtnIgXCIlc1wiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTYwIHRyYW5zcG9ydC1oZWxwZXIuYzo1NzEKK21zZ2lkICJjYW4ndCBkdXAgaGVscGVyIG91dHB1dCBmZCIKK21zZ3N0ciAia3VuZGUgaW50ZSBkdXBsaWNlcmEgdXRkYXRhLWZpbGhhbmR0YWciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVua25vd24gbWFuZGF0b3J5IGNhcGFiaWxpdHkgJXM7IHRoaXMgcmVtb3RlIGhlbHBlciBwcm9iYWJseSBuZWVkcyBuZXdlciAiCisidmVyc2lvbiBvZiBHaXQiCittc2dzdHIgIiIKKyJva8OkbmQga3LDpHZkIGbDtnJtw6VnYSAoY2FwYWJpbGl0eSkgJXM7IGZqw6Rycmhqw6RscGFyZW4gYmVow7Z2ZXIgYW50YWdsaWdlbiBlbiAiCisibnlhcmUgdmVyc2lvbiBhdiBHaXQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyMTcKK21zZ2lkICJ0aGlzIHJlbW90ZSBoZWxwZXIgc2hvdWxkIGltcGxlbWVudCByZWZzcGVjIGNhcGFiaWxpdHkiCittc2dzdHIgIiIKKyJmasOkcnJoasOkbHBhcmVuIGJlaMO2dmVyIGltcGxlbWVudGVyYSBmw7ZybcOlZ2EgZsO2ciByZWZlcmVuc3NwZWNpZmlrYXRpb25lciAiCisiKHJlZnNwZWMpIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6Mjg0IHRyYW5zcG9ydC1oZWxwZXIuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdW5leHBlY3RlZGx5IHNhaWQ6ICclcyciCittc2dzdHIgIiVzIHNhZGUgb3bDpG50YXQ6IFwiJXNcIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHNvIGxvY2tlZCAlcyIKK21zZ3N0ciAiJXMgbMOlc3RlIG9ja3PDpSAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjQ5MworbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWltcG9ydCIKK21zZ3N0ciAia3VuZGUgaW50ZSBrw7ZyYSBmYXN0LWltcG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjUxNgorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1pbXBvcnQiCittc2dzdHIgImZlbCBuw6RyIGZhc3QtaW1wb3J0IGvDtnJkZXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1NDUgdHJhbnNwb3J0LWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIHJlZmVyZW5zZW4gJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biByZXNwb25zZSB0byBjb25uZWN0OiAlcyIKK21zZ3N0ciAib2vDpG50IHN2YXIgcMOlIGFuc2x1bnRuaW5nOiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxMgorbXNnaWQgInNldHRpbmcgcmVtb3RlIHNlcnZpY2UgcGF0aCBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIgorbXNnc3RyICJwcm90a29sbGV0IHN0w7ZkZXIgaW50ZSBhdHQgc8OkdHRhIHPDtmt2w6RnIHRpbGwgZmrDpHJydGrDpG5zdCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxNAorbXNnaWQgImludmFsaWQgcmVtb3RlIHNlcnZpY2UgcGF0aCIKK21zZ3N0ciAiZmVsYWt0aWcgc8O2a3bDpGcgdGlsbCBmasOkcnJ0asOkbnN0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNvbm5lY3QgdG8gc3Vic2VydmljZSAlcyIKK21zZ3N0ciAia2FuIGludGUgYW5zbHV0YSB0aWxsIHVuZGVydGrDpG5zdGVuICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIG9rL2Vycm9yLCBoZWxwZXIgc2FpZCAnJXMnIgorbXNnc3RyICJmw7ZydsOkbnRhZGUgb2svZXJyb3IsIGhqw6RscHByb2dyYW1tZXQgc3ZhcmFkZSBcIiVzXCIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyIHJlcG9ydGVkIHVuZXhwZWN0ZWQgc3RhdHVzIG9mICVzIgorbXNnc3RyICJoasOkbHBhcmVuIHJldHVybmVyYWRlIG92w6RudGFkIHN0YXR1cyAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCBkcnktcnVuIgorbXNnc3RyICJoasOkbHBhcmVuICVzIHN0w7ZkZXIgaW50ZSBkcnktcnVuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIgorbXNnc3RyICJoasOkbHBhcmVuICVzIHN0w7ZkZXIgaW50ZSAtLXNpZ25lZCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZD1pZi1hc2tlZCIKK21zZ3N0ciAiaGrDpGxwYXJlbiAlcyBzdMO2ZGVyIGludGUgLS1zaWduZWQ9aWYtYXNrZWQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMiCittc2dzdHIgImhqw6RscGFyZW4gJXMgc3TDtmRlciBpbnRlIC0tYXRvbWljIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdwdXNoLW9wdGlvbiciCittc2dzdHIgImhqw6RscGFyZW4gJXMgc3TDtmRlciBpbnRlIFwicHVzaC1vcHRpb25cIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk2NQorbXNnaWQgInJlbW90ZS1oZWxwZXIgZG9lc24ndCBzdXBwb3J0IHB1c2g7IHJlZnNwZWMgbmVlZGVkIgorbXNnc3RyICJmasOkcnJoasOkbHBhcmVuIHN0w7ZkZXIgaW50ZSBwdXNoOyByZWZlcmVuc3NwZWNpZmlrYXRpb24ga3LDpHZzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTcwCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdmb3JjZSciCittc2dzdHIgImhqw6RscGFyZW4gJXMgc3TDtmRlciBpbnRlIFwiZm9yY2VcIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwMTcKK21zZ2lkICJjb3VsZG4ndCBydW4gZmFzdC1leHBvcnQiCittc2dzdHIgImt1bmRlIGludGUga8O2cmEgZmFzdC1leHBvcnQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDIyCittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWV4cG9ydCIKK21zZ3N0ciAiZmVsIHZpZCBrw7ZybmluZyBhdiBmYXN0LWV4cG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHJlZnMgaW4gY29tbW9uIGFuZCBub25lIHNwZWNpZmllZDsgZG9pbmcgbm90aGluZy5cbiIKKyJQZXJoYXBzIHlvdSBzaG91bGQgc3BlY2lmeSBhIGJyYW5jaCBzdWNoIGFzICdtYXN0ZXInLlxuIgorbXNnc3RyICIiCisiSW5nYSBnZW1lbnNhbW1hIHJlZmVyZW5zZXIgb2NoIGluZ2EgYW5nYXZzOyBnw7ZyIGluZ2V0LlxuIgorIkR1IGthbnNrZSBib3JkZSBhbmdlIGVuIGdyZW4gc8Olc29tIFwibWFzdGVyXCIuXG4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCByZXNwb25zZSBpbiByZWYgbGlzdDogJXMiCittc2dzdHIgImZlbGZvcm1hdCBzdmFyIGkgcmVmZXJlbnNsaXN0YW46ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkKCVzKSBmYWlsZWQiCittc2dzdHIgImzDpHMoJXMpIG1pc3NseWNrYWRlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGUoJXMpIGZhaWxlZCIKK21zZ3N0ciAic2tyaXYoJXMpIG1pc3NseWNrYWRlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGhyZWFkIGZhaWxlZCIKK21zZ3N0ciAiJXMtdHLDpWRlbiBtaXNzbHlja2FkZXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiCittc2dzdHIgIiVzLXRyw6VkZW4gbWlzc2x5Y2thZGVzIGFuc2x1dGE6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM3MSB0cmFuc3BvcnQtaGVscGVyLmM6MTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YTogJXMiCittc2dzdHIgImthbiBpbnRlIHN0YXJ0YSB0csOlZCBmw7ZyIGtvcGllcmluZyBhdiBkYXRhOiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQgdG8gd2FpdCIKK21zZ3N0ciAicHJvY2Vzc2VuICVzIG1pc3NseWNrYWRlcyB2w6RudGEiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICJwcm9jZXNzZW4gJXMgbWlzc2x5Y2thZGVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQzNCB0cmFuc3BvcnQtaGVscGVyLmM6MTQ0MworbXNnaWQgImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhIgorbXNnc3RyICJrYW4gaW50ZSBza2FwYSB0csOlZCBmw7ZyIGtvcGllcmluZyBhdiBkYXRhIgorCisjOiB0cmVlLXdhbGsuYzozMgorbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAidHLDpGRvYmpla3QgZsO2ciBrb3J0IgorCisjOiB0cmVlLXdhbGsuYzozOAorbXNnaWQgIm1hbGZvcm1lZCBtb2RlIGluIHRyZWUgZW50cnkiCittc2dzdHIgImZlbGZvcm1hdCBsw6RnZSBpIHRyw6RkcG9zdCIKKworIzogdHJlZS13YWxrLmM6NDIKK21zZ2lkICJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICJ0b210IGZpbG5hbW4gaSB0csOkZHBvc3QiCisKKyM6IHRyZWUtd2Fsay5jOjExNworbXNnaWQgInRvby1zaG9ydCB0cmVlIGZpbGUiCittc2dzdHIgInRyw6RkZmlsIGbDtnIga29ydCIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkRpbmEgbG9rYWxhIMOkbmRyaW5nYXIgYXYgZsO2bGphbmRlIGZpbGVyIHNrdWxsZSBza3JpdmFzIMO2dmVyIGF2IHV0Y2hlY2tuaW5nOlxuIgorIiUlc0NoZWNrYSBpbiBkaW5hIMOkbmRyaW5nYXIgZWxsZXIgYW52w6RuZCBcInN0YXNoXCIgaW5uYW4gZHUgYnl0ZXIgZ3Jlbi4iCisKKyM6IHVucGFjay10cmVlcy5jOjExMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRGluYSBsb2thbGEgw6RuZHJpbmdhciBhdiBmw7ZsamFuZGUgZmlsZXIgc2t1bGxlIHNrcml2YXMgw7Z2ZXIgYXYgdXRjaGVja25pbmc6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJEaW5hIGxva2FsYSDDpG5kcmluZ2FyIGF2IGbDtmxqYW5kZSBmaWxlciBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiAiCisic2FtbWFuc2xhZ25pbmc6XG4iCisiJSVzQ2hlY2thIGluIGRpbmEgw6RuZHJpbmdhciBlbGxlciBhbnbDpG5kIFwic3Rhc2hcIiBpbm5hbiBkdSBieXRlciBncmVuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJEaW5hIGxva2FsYSDDpG5kcmluZ2FyIGF2IGbDtmxqYW5kZSBmaWxlciBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiAiCisic2FtbWFuc2xhZ25pbmc6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyJEaW5hIGxva2FsYSDDpG5kcmluZ2FyIGF2IGbDtmxqYW5kZSBmaWxlciBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiBcIiVzXCI6XG4iCisiJSVzQ2hlY2thIGluIGRpbmEgw6RuZHJpbmdhciBlbGxlciBhbnbDpG5kIFwic3Rhc2hcIiBpbm5hbiBkdSBcIiVzXCIuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkRpbmEgbG9rYWxhIMOkbmRyaW5nYXIgYXYgZsO2bGphbmRlIGZpbGVyIHNrdWxsZSBza3JpdmFzIMO2dmVyIGF2IFwiJXNcIjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVtOlxuIgorIiVzIgorbXNnc3RyICIiCisiVXBwZGF0ZXJpbmcgYXYgZsO2bGphbmRlIGthdGFsb2dlciBnw7ZyIGF0dCBvc3DDpXJhZGUgZmlsZXIgZ8OlciBmw7ZybG9yYWRlIGkgIgorImRlbTpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgb3Nww6VyYWRlIGZpbGVyIGkgYXJiZXRza2F0YWxvZ2VuIHNrdWxsZSB0YXMgYm9ydCBhdiB1dGNoZWNrbmluZ2VuOlxuIgorIiUlc0ZseXR0YSBlbGxlciB0YSBib3J0IGRlbSBpbm5hbiBkdSBieXRlciBncmVuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgb3Nww6VyYWRlIGZpbGVyIGkgYXJiZXRza2F0YWxvZ2VuIHNrdWxsZSB0YXMgYm9ydCBhdiB1dGNoZWNrbmluZ2VuOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkbDtmxqYW5kZSBvc3DDpXJhZGUgZmlsZXIgaSBhcmJldHNrYXRhbG9nZW4gc2t1bGxlIHRhcyBib3J0IGF2ICIKKyJzYW1tYW5zbGFnbmluZ2VuOlxuIgorIiUlc0ZseXR0YSBlbGxlciB0YSBib3J0IGRlbSBpbm5hbiBkdSBzbMOlciBzYW1tYW4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkbDtmxqYW5kZSBvc3DDpXJhZGUgZmlsZXIgaSBhcmJldHNrYXRhbG9nZW4gc2t1bGxlIHRhcyBib3J0IGF2ICIKKyJzYW1tYW5zbGFnbmluZ2VuOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIkbDtmxqYW5kZSBvc3DDpXJhZGUgZmlsZXIgaSBhcmJldHNrYXRhbG9nZW4gc2t1bGxlIHRhcyBib3J0IGF2IFwiJXNcIjpcbiIKKyIlJXNGbHl0dGEgZWxsZXIgdGEgYm9ydCBkZW0gaW5uYW4gZHUgXCIlc1wiLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgb3Nww6VyYWRlIGZpbGVyIGkgYXJiZXRza2F0YWxvZ2VuIHNrdWxsZSB0YXMgYm9ydCBhdiBcIiVzXCI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiRsO2bGphbmRlIG9zcMOlcmFkZSBmaWxlciBpIGFyYmV0c2thdGFsb2dlbiBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiAiCisidXRjaGVja25pbmdlbjpcbiIKKyIlJXNGbHl0dGEgZWxsZXIgdGEgYm9ydCBkZW0gaW5uYW4gZHUgYnl0ZXIgZ3Jlbi4iCisKKyM6IHVucGFjay10cmVlcy5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgb3Nww6VyYWRlIGZpbGVyIGkgYXJiZXRza2F0YWxvZ2VuIHNrdWxsZSBza3JpdmFzIMO2dmVyIGF2ICIKKyJ1dGNoZWNrbmluZ2VuOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgb3Nww6VyYWRlIGZpbGVyIGkgYXJiZXRza2F0YWxvZ2VuIHNrdWxsZSBza3JpdmFzIMO2dmVyIGF2ICIKKyJzYW1tYW5zbGFnbmluZ2VuOlxuIgorIiUlc0ZseXR0YSBlbGxlciB0YSBib3J0IGRlbSBpbm5hbiBkdSBieXRlciBncmVuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRsO2bGphbmRlIG9zcMOlcmFkZSBmaWxlciBpIGFyYmV0c2thdGFsb2dlbiBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiAiCisic2FtbWFuc2xhZ25pbmdlbjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiRsO2bGphbmRlIG9zcMOlcmFkZSBmaWxlciBpIGFyYmV0c2thdGFsb2dlbiBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiBcIiVzXCI6XG4iCisiJSVzRmx5dHRhIGVsbGVyIHRhIGJvcnQgZGVtIGlubmFuIGR1IFwiJXNcIi4iCisKKyM6IHVucGFjay10cmVlcy5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkbDtmxqYW5kZSBvc3DDpXJhZGUgZmlsZXIgaSBhcmJldHNrYXRhbG9nZW4gc2t1bGxlIHNrcml2YXMgw7Z2ZXIgYXYgXCIlc1wiOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudHJ5ICclcycgb3ZlcmxhcHMgd2l0aCAnJXMnLiAgQ2Fubm90IGJpbmQuIgorbXNnc3RyICJQb3N0ZW4gXCIlc1wiIMO2dmVybGFwcGFyIFwiJXNcIi4gS2FuIGludGUgYmluZGEuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0OiB0aGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIG5vdCB1cCB0byBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiS2FuIGludGUgdXBwZGF0ZXJhIGdsZXMgdXRjaGVja25pbmc6IGbDtmxqYW5kZSBwb3N0ZXIgw6RyIGludGUgw6Agam91cjpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkbDtmxqYW5kZSBmaWxlciBpIGFyYmV0c2thdGFsb2dlbiBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiB1cHBkYXRlcmluZyBhdiBnbGVzICIKKyJ1dGNoZWNrbmluZzpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiRsO2bGphbmRlIGZpbGVyIGkgYXJiZXRza2F0YWxvZ2VuIHNrdWxsZSB0YXMgYm9ydCBhdiB1cHBkYXRlcmluZyBhdiBnbGVzICIKKyJ1dGNoZWNrbmluZzpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHN1Ym1vZHVsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkthbiBpbnRlIHVwcGRhdGVyYSB1bmRlcm1vZHVsOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmdcbiIKK21zZ3N0ciAiQXZicnl0ZXJcbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MzE3Cittc2dpZCAiVXBkYXRpbmcgZmlsZXMiCittc2dzdHIgIlVwcGRhdGVyYXIgZmlsZXIiCisKKyM6IHVucGFjay10cmVlcy5jOjM0OQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHBhdGhzIGhhdmUgY29sbGlkZWQgKGUuZy4gY2FzZS1zZW5zaXRpdmUgcGF0aHNcbiIKKyJvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSkgYW5kIG9ubHkgb25lIGZyb20gdGhlIHNhbWVcbiIKKyJjb2xsaWRpbmcgZ3JvdXAgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZTpcbiIKK21zZ3N0ciAiIgorImbDtmxqYW5kZSBzw7ZrdsOkZ2FyIGhhciBrb2xsaWRlcmF0ICh0LmV4LiBza2lmdGzDpGdlc2vDpG5zbGlnYVxuIgorInPDtmt2w6RnYXIgcMOlIGV0dCBva8OkbnNsaWd0IGZpbHN5c3RlbSkgb2NoIGVuZGFzdCBlbiBmcsOlbiBzYW1tYVxuIgorImtvbGxpc2lvbnNncnVwcCBmaW5ucyBpIGFyYmV0c2thdGFsb2dlbjpcbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ0NQorbXNnaWQgIlVwZGF0aW5nIGluZGV4IGZsYWdzIgorbXNnc3RyICJVcHBkYXRlcmFyIGluZGV4ZmxhZ2dvciIKKworIzogdXJsbWF0Y2guYzoxNjMKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAib2dpbHRpZyBVUkwtc2NoZW1hbmFtbiBlbGxlciBzYWtuYXQgXCI6Ly9cIi1zdWZmaXgiCisKKyM6IHVybG1hdGNoLmM6MTg3IHVybG1hdGNoLmM6MzQ2IHVybG1hdGNoLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJVhYIGVzY2FwZSBzZXF1ZW5jZSIKK21zZ3N0ciAib2dpbHRpZyAlWFgtdGVja2Vuc2VrdmVucyIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAidsOkcmQgc2FrbmFzIG9jaCBzY2hlbWF0IMOkciBpbnRlIFwiZmlsZTpcIiIKKworIzogdXJsbWF0Y2guYzoyMzIKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICJlbiBcImZpbGU6XCItVVJMIGthbiBpbnRlIGlubmVow6VsbGEgcG9ydG51bW1lciIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICJvZ2lsdGlnYSB0ZWNrZW4gaSB2w6RyZG5hbW5ldCIKKworIzogdXJsbWF0Y2guYzoyOTIgdXJsbWF0Y2guYzozMDMKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJmZWxha3RpZ3QgcG9ydG51bW1lciIKKworIzogdXJsbWF0Y2guYzozNzEKK21zZ2lkICJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50IgorbXNnc3RyICJmZWxha3RpZ3QgXCIuLlwiLXPDtmt2w6Rnc3NlZ21lbnQiCisKKyM6IHdhbGtlci5jOjE3MAorbXNnaWQgIkZldGNoaW5nIG9iamVjdHMiCittc2dzdHIgIkjDpG10YXIgb2JqZWt0IgorCisjOiB3b3JrdHJlZS5jOjI1OSBidWlsdGluL2FtLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgbMOkc2EgXCIlc1wiIgorCisjOiB3b3JrdHJlZS5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGF0IG1haW4gd29ya2luZyB0cmVlIGlzIG5vdCB0aGUgcmVwb3NpdG9yeSBkaXJlY3RvcnkiCittc2dzdHIgIlwiJXNcIiBpIGh1dnVkYXJiZXRza2F0YWxvZ2VuIMOkciBpbnRlIGFya2l2a2F0YWxvZ2VuIgorCisjOiB3b3JrdHJlZS5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbGUgZG9lcyBub3QgY29udGFpbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB3b3JraW5nIHRyZWUgbG9jYXRpb24iCittc2dzdHIgImZpbGVuIFwiJXNcIiBpbm5laMOlbGxlciBpbnRlIGFic29sdXQgc8O2a3bDpGcgdGlsbCBhcmJldHNrYXRhbG9nZW4iCisKKyM6IHdvcmt0cmVlLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlwiJXNcIiBmaW5ucyBpbnRlIgorCisjOiB3b3JrdHJlZS5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIC5naXQgZmlsZSwgZXJyb3IgY29kZSAlZCIKK21zZ3N0ciAiXCIlc1wiIMOkciBpbnRlIGVuIC5naXQtZmlsLCBmZWxrb2QgJWQiCisKKyM6IHdvcmt0cmVlLmM6MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgYmFjayB0byAnJXMnIgorbXNnc3RyICJcIiVzXCIgcGVrYXIgaW50ZSB0aWxsYmFrYSB0aWxsIFwiJXNcIiIKKworIzogd3JhcHBlci5jOjE4NiB3cmFwcGVyLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgImt1bmRlIGludGUgw7ZwcG5hIFwiJXNcIiBmw7ZyIGzDpHNuaW5nIG9jaCBza3Jpdm5pbmciCisKKyM6IHdyYXBwZXIuYzozODcgd3JhcHBlci5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyciCittc2dzdHIgImthbiBpbnRlIGtvbW1hIMOldCBcIiVzXCIiCisKKyM6IHdyYXBwZXIuYzo1OTYKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImthbiBpbnRlIGjDpG10YSBha3R1ZWxsIGFyYmV0c2thdGFsb2ciCisKKyM6IHd0LXN0YXR1cy5jOjE1OAorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiRWogc2FtbWFuc2xhZ25hIHPDtmt2w6RnYXI6IgorCisjOiB3dC1zdGF0dXMuYzoxODcgd3Qtc3RhdHVzLmM6MjE5Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsPi4uLlwiIGbDtnIgYXR0IHRhIGJvcnQgZnLDpW4ga8O2KSIKKworIzogd3Qtc3RhdHVzLmM6MTkwIHd0LXN0YXR1cy5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXNvdXJjZT0lcyAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorIiAgKGFudsOkbmQgXCJnaXQgcmVzdG9yZSAtLXNvdXJjZT0lcyAtLXN0YWdlZCA8ZmlsPi4uLlwiIGbDtnIgYXR0IHRhIGJvcnQgZnLDpW4gIgorImvDtikiCisKKyM6IHd0LXN0YXR1cy5jOjE5MyB3dC1zdGF0dXMuYzoyMjUKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbD4uLi5cIiBmw7ZyIGF0dCB0YSBib3J0IGZyw6VuIGvDtikiCisKKyM6IHd0LXN0YXR1cy5jOjE5NworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCBhZGQgPGZpbD4uLi5cIiBmw7ZyIGF0dCBhbmdlIGzDtnNuaW5nKSIKKworIzogd3Qtc3RhdHVzLmM6MTk5IHd0LXN0YXR1cy5jOjIwMworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCBhZGQvcm0gPGZpbD4uLi5cIiBzb20gbMOkbXBsaWd0IGbDtnIgYXR0IGFuZ2UgbMO2c25pbmcpIgorCisjOiB3dC1zdGF0dXMuYzoyMDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCBybSA8ZmlsPi4uLlwiIGbDtnIgYXR0IGFuZ2UgbMO2c25pbmcpIgorCisjOiB3dC1zdGF0dXMuYzoyMTEgd3Qtc3RhdHVzLmM6MTA3NAorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiw4RuZHJpbmdhciBhdHQgY2hlY2thIGluOiIKKworIzogd3Qtc3RhdHVzLmM6MjM0IHd0LXN0YXR1cy5jOjEwODMKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIsOEbmRyaW5nYXIgZWogaSBpbmNoZWNrbmluZ3Nrw7ZuOiIKKworIzogd3Qtc3RhdHVzLmM6MjM4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgIChhbnbDpG5kIFwiZ2l0IGFkZCA8ZmlsPi4uLlwiIGbDtnIgYXR0IHVwcGRhdGVyYSB2YWQgc29tIHNrYSBjaGVja2FzIGluKSIKKworIzogd3Qtc3RhdHVzLmM6MjQwCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgIChhbnbDpG5kIFwiZ2l0IGFkZC9ybSA8ZmlsPi4uLlwiIGbDtnIgYXR0IHVwcGRhdGVyYSB2YWQgc29tIHNrYSBjaGVja2FzIGluKSIKKworIzogd3Qtc3RhdHVzLmM6MjQxCittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZXN0b3JlIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiCittc2dzdHIgIiIKKyIgIChhbnbDpG5kIFwiZ2l0IHJlc3RvcmUgPGZpbD4uLi5cIiBmw7ZyIGF0dCBmw7Zya2FzdGEgw6RuZHJpbmdhciBpICIKKyJhcmJldHNrYXRhbG9nZW4pIgorCisjOiB3dC1zdGF0dXMuYzoyNDMKK21zZ2lkICIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiCittc2dzdHIgIiIKKyIgIChjaGVja2EgaW4gZWxsZXIgZsO2cmthc3RhIG9zcMOlcmF0IGVsbGVyIMOkbmRyYXQgaW5uZWjDpWxsIGkgdW5kZXJtb2R1bGVyKSIKKworIzogd3Qtc3RhdHVzLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAoYW52w6RuZCBcImdpdCAlcyA8ZmlsPi4uLlwiIGbDtnIgYXR0IHRhIG1lZCBpIGRldCBzb20gc2thIGNoZWNrYXMgaW4pIgorCisjOiB3dC1zdGF0dXMuYzoyNjgKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICJib3J0dGFnZXQgYXYgYsOkZ2dlOiIKKworIzogd3Qtc3RhdHVzLmM6MjcwCittc2dpZCAiYWRkZWQgYnkgdXM6IgorbXNnc3RyICJ0aWxsYWd0IGF2IG9zczoiCisKKyM6IHd0LXN0YXR1cy5jOjI3MgorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgImJvcnR0YWdldCBhdiBkZW06IgorCisjOiB3dC1zdGF0dXMuYzoyNzQKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAidGlsbGFndCBhdiBkZW06IgorCisjOiB3dC1zdGF0dXMuYzoyNzYKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAiYm9ydHRhZ2V0IGF2IG9zczoiCisKKyM6IHd0LXN0YXR1cy5jOjI3OAorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICJ0aWxsYWd0IGF2IGLDpGdnZToiCisKKyM6IHd0LXN0YXR1cy5jOjI4MAorbXNnaWQgImJvdGggbW9kaWZpZWQ6IgorbXNnc3RyICLDpG5kcmF0IGF2IGLDpGdnZToiCisKKyM6IHd0LXN0YXR1cy5jOjI5MAorbXNnaWQgIm5ldyBmaWxlOiIKK21zZ3N0ciAibnkgZmlsOiIKKworIzogd3Qtc3RhdHVzLmM6MjkyCittc2dpZCAiY29waWVkOiIKK21zZ3N0ciAia29waWVyYWQ6IgorCisjOiB3dC1zdGF0dXMuYzoyOTQKK21zZ2lkICJkZWxldGVkOiIKK21zZ3N0ciAiYm9ydHRhZ2VuOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk2Cittc2dpZCAibW9kaWZpZWQ6IgorbXNnc3RyICLDpG5kcmFkOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk4Cittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgIm5hbW5ieXR0OiIKKworIzogd3Qtc3RhdHVzLmM6MzAwCittc2dpZCAidHlwZWNoYW5nZToiCittc2dzdHIgInR5cGJ5dGU6IgorCisjOiB3dC1zdGF0dXMuYzozMDIKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAib2vDpG5kOiIKKworIzogd3Qtc3RhdHVzLmM6MzA0Cittc2dpZCAidW5tZXJnZWQ6IgorbXNnc3RyICJvc2FtbWFuc2xhZ2VuOiIKKworIzogd3Qtc3RhdHVzLmM6Mzg0Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAibnlhIGluY2hlY2tuaW5nYXIsICIKKworIzogd3Qtc3RhdHVzLmM6Mzg2Cittc2dpZCAibW9kaWZpZWQgY29udGVudCwgIgorbXNnc3RyICLDpG5kcmF0IGlubmVow6VsbCwgIgorCisjOiB3dC1zdGF0dXMuYzozODgKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICJvc3DDpXJhdCBpbm5laMOlbGwsICIKKworIzogd3Qtc3RhdHVzLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJpZXMiCittc2dzdHJbMF0gIlN0YXNoZW4gaW5uZWjDpWxsZXIganVzdCBudSAlZCBwb3N0IgorbXNnc3RyWzFdICJTdGFzaGVuIGlubmVow6VsbGVyIGp1c3QgbnUgJWQgcG9zdGVyIgorCisjOiB3dC1zdGF0dXMuYzo5MzgKK21zZ2lkICJTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKK21zZ3N0ciAiVW5kZXJtb2R1bGVyIMOkbmRyYWRlIG1lbiBpbnRlIHVwcGRhdGVyYWRlOiIKKworIzogd3Qtc3RhdHVzLmM6OTQwCittc2dpZCAiU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiVW5kZXJtb2R1bGVycyDDpG5kcmluZ2FyIGF0dCBjaGVja2EgaW46IgorCisjOiB3dC1zdGF0dXMuYzoxMDIyCittc2dpZCAiIgorIkRvIG5vdCBtb2RpZnkgb3IgcmVtb3ZlIHRoZSBsaW5lIGFib3ZlLlxuIgorIkV2ZXJ5dGhpbmcgYmVsb3cgaXQgd2lsbCBiZSBpZ25vcmVkLiIKK21zZ3N0ciAiIgorIlJhZGVuIG92YW4gZsOlciBpbnRlIMOkbmRyYXMgZWxsZXIgdGFzIGJvcnQuXG4iCisiQWxsdCB1bmRlciBkZW4ga29tbWVyIHRhcyBib3J0LiIKKworIzogd3Qtc3RhdHVzLmM6MTExNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gY29tcHV0ZSB0aGUgYnJhbmNoIGFoZWFkL2JlaGluZCB2YWx1ZXMuXG4iCisiWW91IGNhbiB1c2UgJy0tbm8tYWhlYWQtYmVoaW5kJyB0byBhdm9pZCB0aGlzLlxuIgorbXNnc3RyICIiCisiXG4iCisiRGV0IHRvZyAlLjJmIHNla3VuZGVyIGF0dCByw6RrbmEgZsO2cmUvYmFrb20tdsOkcmRlbi5cbiIKKyJEdSBrYW4gYW52w6RuZGEgXCItLW5vLWFoZWFkLWJlaGluZFwiIGbDtnIgdW5kdmlrYSBkZXR0YS5cbiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NAorbXNnaWQgIllvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLiIKK21zZ3N0ciAiRHUgaGFyIGVqIHNhbW1hbnNsYWduYSBzw7ZrdsOkZ2FyLiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiAgKHLDpHR0YSBrb25mbGlrdGVyIG9jaCBrw7ZyIFwiZ2l0IGNvbW1pdFwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTE0OQorbXNnaWQgIiAgKHVzZSBcImdpdCBtZXJnZSAtLWFib3J0XCIgdG8gYWJvcnQgdGhlIG1lcmdlKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCBtZXJnZSAtLWFib3J0XCIgZsO2ciBhdHQgYXZicnl0YSBzYW1tYW5zbGFnbmluZ2VuKSIKKworIzogd3Qtc3RhdHVzLmM6MTE1MworbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgIkFsbGEga29uZmxpa3RlciBoYXIgcsOkdHRhdHMgbWVuIGR1IMOkciBmb3J0ZmFyYW5kZSBpIGVuIHNhbW1hbnNsYWduaW5nLiIKKworIzogd3Qtc3RhdHVzLmM6MTE1NgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgY29tbWl0XCIgZsO2ciBhdHQgc2x1dGbDtnJhIHNhbW1hbnNsYWduaW5nZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMTY1Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uIgorbXNnc3RyICJEdSDDpHIgaSBtaXR0ZW4gYXYgZW4ga8O2cm5pbmcgYXYgXCJnaXQgYW1cIi4iCisKKyM6IHd0LXN0YXR1cy5jOjExNjgKK21zZ2lkICJUaGUgY3VycmVudCBwYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgIkFrdHVlbGwgcGF0Y2ggw6RyIHRvbS4iCisKKyM6IHd0LXN0YXR1cy5jOjExNzIKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChyw6R0dGEga29uZmxpa3RlciBvY2gga8O2ciBzZWRhbiBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTc0Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgYW0gLS1za2lwXCIgZsO2ciBhdHQgaG9wcGEgw7Z2ZXIgcGF0Y2hlbikiCisKKyM6IHd0LXN0YXR1cy5jOjExNzYKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgYW0gLS1hYm9ydFwiIGbDtnIgYXR0IMOldGVyc3TDpGxsYSB1cnNwcnVuZ3NncmVuZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMzA5Cittc2dpZCAiZ2l0LXJlYmFzZS10b2RvIGlzIG1pc3NpbmcuIgorbXNnc3RyICJnaXQtcmViYXNlLXRvZG8gc2FrbmFzLiIKKworIzogd3Qtc3RhdHVzLmM6MTMxMQorbXNnaWQgIk5vIGNvbW1hbmRzIGRvbmUuIgorbXNnc3RyICJJbmdhIGtvbW1hbmRvbiB1dGbDtnJkYS4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGFzdCBjb21tYW5kIGRvbmUgKCVkIGNvbW1hbmQgZG9uZSk6IgorbXNnaWRfcGx1cmFsICJMYXN0IGNvbW1hbmRzIGRvbmUgKCVkIGNvbW1hbmRzIGRvbmUpOiIKK21zZ3N0clswXSAiU2lzdGEga29tbWFuZG90IHV0ZsO2cnQgKCVkIGtvbW1hbmRvIHV0ZsO2cnQpOiIKK21zZ3N0clsxXSAiU2lzdGEga29tbWFuZG90IHV0ZsO2cnQgKCVkIGtvbW1hbmRvbiB1dGbDtnJ0KToiCisKKyM6IHd0LXN0YXR1cy5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAoc2VlIG1vcmUgaW4gZmlsZSAlcykiCittc2dzdHIgIiAgKHNlIGZsZXIgaSBmaWxlbiAlcykiCisKKyM6IHd0LXN0YXR1cy5jOjEzMzAKK21zZ2lkICJObyBjb21tYW5kcyByZW1haW5pbmcuIgorbXNnc3RyICJJbmdhIGtvbW1hbmRvbiDDpXRlcnN0w6VyLiIKKworIzogd3Qtc3RhdHVzLmM6MTMzMworIywgYy1mb3JtYXQKK21zZ2lkICJOZXh0IGNvbW1hbmQgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kKToiCittc2dpZF9wbHVyYWwgIk5leHQgY29tbWFuZHMgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kcyk6IgorbXNnc3RyWzBdICJOw6RzdGEga29tbWFuZG8gYXR0IHV0ZsO2cmEgKCVkIGtvbW1hbmRvIMOldGVyc3TDpXIpOiIKK21zZ3N0clsxXSAiRsO2bGphbmRlIGtvbW1hbmRvbiBhdHQgdXRmw7ZyYSAoJWQga29tbWFuZG9uIMOldGVyc3TDpXIpOiIKKworIzogd3Qtc3RhdHVzLmM6MTM0MQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiB0byB2aWV3IGFuZCBlZGl0KSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiBmw7ZyIGF0dCB2aXNhIG9jaCByZWRpZ2VyYSkiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIkR1IGjDpWxsZXIgcMOlIGF0dCBvbWJhc2VyYSBncmVuZW4gXCIlc1wiIG92YW5ww6UgXCIlc1wiLiIKKworIzogd3Qtc3RhdHVzLmM6MTM1OAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nLiIKK21zZ3N0ciAiRHUgaMOlbGxlciBww6UgbWVkIGVuIG9tYmFzZXJpbmcuIgorCisjOiB3dC1zdGF0dXMuYzoxMzcxCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHLDpHR0YSBrb25mbGlrdGVyIG9jaCBrw7ZyIHNlZGFuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzczCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiBmw7ZyIGF0dCBob3BwYSDDtnZlciBwYXRjaGVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTM3NQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCByZWJhc2UgLS1hYm9ydFwiIGbDtnIgYXR0IGNoZWNrYSB1dCB1cnNwcnVuZ3NncmVuZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMzgyCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChhbGxhIGtvbmZsaWt0ZXIgcsOkdHRhZGU6IGvDtnIgXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIkR1IGjDpWxsZXIgcMOlIGF0dCBkZWxhIHVwcCBlbiBpbmNoZWNrbmluZyBtZWRhbiBkdSBvbWJhc2VyYXIgZ3JlbmVuIFwiJXNcIiAiCisib3ZhbnDDpSBcIiVzXCIuIgorCisjOiB3dC1zdGF0dXMuYzoxMzkxCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIkR1IGjDpWxsZXIgcMOlIGF0dCBkZWxhIHVwcCBlbiBpbmNoZWNrbmluZyBpIGVuIG9tYmFzZXJpbmcuIgorCisjOiB3dC1zdGF0dXMuYzoxMzk0Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKFPDpSBmb3J0IGRpbiBhcmJldHNrYXRhbG9nIMOkciByZW4sIGvDtnIgXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIkR1IGjDpWxsZXIgcMOlIGF0dCByZWRpZ2VyYSBlbiBpbmNoZWNrbmluZyBtZWRhbiBkdSBvbWJhc2VyYXIgZ3JlbmVuIFwiJXNcIiAiCisib3ZhbnDDpSBcIiVzXCIuIgorCisjOiB3dC1zdGF0dXMuYzoxNDAzCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICJEdSBow6VsbGVyIHDDpSBhdHQgcmVkaWdlcmEgZW4gaW5jaGVja25pbmcgdW5kZXIgZW4gb21iYXNlcmluZy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIgorbXNnc3RyICIiCisiICAoYW52w6RuZCBcImdpdCBjb21taXQgLS1hbWVuZFwiIGbDtnIgYXR0IGzDpGdnYSB0aWxsIHDDpSBha3R1ZWxsIGluY2hlY2tuaW5nKSIKKworIzogd3Qtc3RhdHVzLmM6MTQwOAorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG7DpHIgZHUgw6RyIG7DtmpkIG1lZCBkaW5hIMOkbmRyaW5nYXIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDE5Cittc2dpZCAiQ2hlcnJ5LXBpY2sgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiQ2hlcnJ5LXBpY2sgcMOlZ8Olci4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAiRHUgaMOlbGxlciBww6UgbWVkIGVuIFwiY2hlcnJ5LXBpY2tcIiBhdiBpbmNoZWNrbmluZ2VuICVzLiIKKworIzogd3Qtc3RhdHVzLmM6MTQyOQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChyw6R0dGEga29uZmxpa3RlciBvY2gga8O2ciBzZWRhbiBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDMyCittc2dpZCAiICAocnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB0byBjb250aW51ZSkiCittc2dzdHIgIiAgKGvDtnIgXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIGbDtnIgYXR0IGZvcnRzw6R0dGEpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM1Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKGFsbGEga29uZmxpa3RlciByw6R0dGFkZToga8O2ciBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM3Cittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCIgZsO2ciBhdHQgaG9wcGEgw7Z2ZXIgcGF0Y2hlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzkKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorIiAgKGFudsOkbmQgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIGbDtnIgYXR0IGF2YnJ5dGEgXCJjaGVycnktcGlja1wiLSIKKyJvcGVyYXRpb25lbikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NDkKK21zZ2lkICJSZXZlcnQgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiw4VuZ3JpbmcgcMOlZ8Olci4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIkR1IGjDpWxsZXIgcMOlIG1lZCBhdHQgw6VuZ3JhIGluY2hlY2tuaW5nZW4gJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxNDU4Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChyw6R0dGEga29uZmxpa3RlciBvY2gga8O2ciBzZWRhbiBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2MQorbXNnaWQgIiAgKHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIHRvIGNvbnRpbnVlKSIKK21zZ3N0ciAiICAoa8O2ciBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIGbDtnIgYXR0IGZvcnRzw6R0dGEpIgorCisjOiB3dC1zdGF0dXMuYzoxNDY0Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChhbGxhIGtvbmZsaWt0ZXIgcsOkdHRhZGU6IGvDtnIgXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjYKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgcmV2ZXJ0IC0tc2tpcFwiIGbDtnIgYXR0IGhvcHBhIMO2dmVyIHBhdGNoZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxNDY4Cittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCByZXZlcnQgLS1hYm9ydFwiIGbDtnIgYXR0IGF2YnJ5dGEgw6VuZ3JhbmRldCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLCBzdGFydGVkIGZyb20gYnJhbmNoICclcycuIgorbXNnc3RyICJEdSBow6VsbGVyIHDDpSBtZWQgZW4gXCJiaXNlY3RcIiwgc3RhcnRhZCBmcsOlbiBncmVuZW4gXCIlc1wiLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4MgorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgIkR1IGjDpWxsZXIgcMOlIG1lZCBlbiBcImJpc2VjdFwiLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4NQorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKGFudsOkbmQgXCJnaXQgYmlzZWN0IHJlc2V0XCIgZsO2ciBhdHQga29tbWEgdGlsbGJha2EgdGlsbCB1cnNwcnVuZ3NncmVuZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxNjk0Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAiUMOlIGdyZW5lbiAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDEKK21zZ2lkICJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICJpbnRlcmFrdGl2IG9tYmFzZXJpbmcgcMOlZ8Olcjsgb3ZhbnDDpSAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDMKK21zZ2lkICJyZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICJvbWJhc2VyaW5nIHDDpWfDpXI7IG92YW5ww6UgIgorCisjOiB3dC1zdGF0dXMuYzoxNzEzCittc2dpZCAiTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiSW50ZSBww6UgbsOlZ29uIGdyZW4gZsO2ciBuw6RydmFyYW5kZS4iCisKKyM6IHd0LXN0YXR1cy5jOjE3MzAKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiRsO2cnN0YSBpbmNoZWNrbmluZyIKKworIzogd3Qtc3RhdHVzLmM6MTczMQorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IgorbXNnc3RyICJJbmdhIGluY2hlY2tuaW5nYXIgw6RubnUiCisKKyM6IHd0LXN0YXR1cy5jOjE3NDUKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIk9zcMOlcmFkZSBmaWxlciIKKworIzogd3Qtc3RhdHVzLmM6MTc0NworbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgIklnbm9yZXJhZGUgZmlsZXIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICdzdGF0dXMgLXVubydcbiIKKyJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkXG4iCisibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKK21zZ3N0ciAiIgorIkRldCB0b2cgJS4yZiBzZWt1bmRlciBhdHQgcsOka25hIHVwcCBvc3DDpXJhZGUgZmlsZXIuIFwic3RhdHVzIC11bm9cIlxuIgorImthbiBnw6Ugc25hYmJhcmUsIG1lbiBkdSBtw6VzdGUgdmFyYSBmw7Zyc2lrdGlnIHPDpSBkdSBpbnRlIGdsw7ZtbWVyXG4iCisibMOkZ2dhIHRpbGwgbnlhIGZpbGVyIHNqw6RsdiAoc2UgXCJnaXQgaGVscCBzdGF0dXNcIikuIgorCisjICVzIMOkciBuw6RzdGEgc3Ryw6RuZyBlbGxlciB0b20uCisjOiB3dC1zdGF0dXMuYzoxNzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIk9zcMOlcmFkZSBmaWxlciB2aXNhcyBlaiVzIgorCisjOiB3dC1zdGF0dXMuYzoxNzU5Cittc2dpZCAiICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAiIChhbnbDpG5kIGZsYWdnYW4gLXUgZsO2ciBhdHQgdmlzYSBvc3DDpXJhZGUgZmlsZXIpIgorCisjOiB3dC1zdGF0dXMuYzoxNzY1Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiSW5nYSDDpG5kcmluZ2FyIgorCisjOiB3dC1zdGF0dXMuYzoxNzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICIiCisiaW5nYSDDpG5kcmluZ2FyIGF0dCBjaGVja2EgaW4gKGFudsOkbmQgXCJnaXQgYWRkXCIgb2NoL2VsbGVyIFwiZ2l0IGNvbW1pdCAtYSIKKyJcIilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdFxuIgorbXNnc3RyICJpbmdhIMOkbmRyaW5nYXIgYXR0IGNoZWNrYSBpblxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIiIKKyJpbmdldCBrw7ZhdCBmw7ZyIGluY2hlY2tuaW5nLCBtZW4gb3Nww6VyYWRlIGZpbGVyIGZpbm5zIChzcMOlcmEgbWVkIFwiZ2l0IGFkZCIKKyJcIilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAiaW5nZXQga8O2YXQgZsO2ciBpbmNoZWNrbmluZywgbWVuIG9zcMOlcmFkZSBmaWxlciBmaW5uc1xuIgorCisjOiB3dC1zdGF0dXMuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0IChjcmVhdGUvY29weSBmaWxlcyBhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIgorbXNnc3RyICJpbmdldCBhdHQgY2hlY2thIGluIChza2FwYS9rb3BpZXJhIGZpbGVyIG9jaCBzcMOlcmEgbWVkIFwiZ2l0IGFkZFwiKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzg1IHd0LXN0YXR1cy5jOjE3OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXRcbiIKK21zZ3N0ciAiaW5nZXQgYXR0IGNoZWNrYSBpblxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpXG4iCittc2dzdHIgImluZ2V0IGF0dCBjaGVja2EgaW4gKGFudsOkbmQgLXUgZsO2ciBhdHQgdmlzYSBvc3DDpXJhZGUgZmlsZXIpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhblxuIgorbXNnc3RyICJpbmdldCBhdHQgY2hlY2thIGluLCBhcmJldHNrYXRhbG9nZW4gcmVuXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE5MDUKK21zZ2lkICJObyBjb21taXRzIHlldCBvbiAiCittc2dzdHIgIkluZ2EgaW5jaGVja25pbmdhciDDpG5udSBww6UgIgorCisjOiB3dC1zdGF0dXMuYzoxOTA5Cittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRCAoaW5nZW4gZ3JlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDAKK21zZ2lkICJkaWZmZXJlbnQiCittc2dzdHIgIm9saWthIgorCisjOiB3dC1zdGF0dXMuYzoxOTQyIHd0LXN0YXR1cy5jOjE5NTAKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICJlZnRlciAiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDUgd3Qtc3RhdHVzLmM6MTk0OAorbXNnaWQgImFoZWFkICIKK21zZ3N0ciAiZsO2cmUgIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGFjdGlvbiBpcyBlLmcuICJwdWxsIHdpdGggcmViYXNlIgorIzogd3Qtc3RhdHVzLmM6MjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJrYW4gaW50ZSAlczogRHUgaGFyIG9rw7ZhZGUgw6RuZHJpbmdhci4iCisKKyM6IHd0LXN0YXR1cy5jOjI0NzYKK21zZ2lkICJhZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgImRlc3N1dG9tIGlubmVow6VsbGVyIGRpdCBpbmRleCDDpG5kcmluZ2FyIHNvbSBpbnRlIGhhciBjaGVja2F0cyBpbi4iCisKKyM6IHd0LXN0YXR1cy5jOjI0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICJrYW4gaW50ZSAlczogRGl0dCBpbmRleCBpbm5laMOlbGxlciDDpG5kcmluZ2FyIHNvbSBpbnRlIGNoZWNrYXRzIGluLiIKKworIzogY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jOjU4IGJ1aWx0aW4vY2xvbmUuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgYm9ydCBsw6Rua2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9hZGQuYzoyNgorbXNnaWQgImdpdCBhZGQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgYWRkIFs8ZmxhZ2dvcj5dIFstLV0gPHPDtmt2w6RnPi4uLiIKKworIzogYnVpbHRpbi9hZGQuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICJkaWZmLXN0YXR1cyAlYyBmw7ZydsOkbnRhZGVzIGludGUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6OTMgYnVpbHRpbi9jb21taXQuYzoyODgKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIm1pc3NseWNrYWRlcyB1cHBkYXRlcmEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgInRhIGJvcnQgXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc4Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIk9rw7ZhZGUgw6RuZHJpbmdhciBlZnRlciBhdHQgaGEgdXBwZGF0ZXJhdCBpbmRleGV0OiIKKworIzogYnVpbHRpbi9hZGQuYzoyNjYgYnVpbHRpbi9yZXYtcGFyc2UuYzo4OTkKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIkt1bmRlIGludGUgbMOkc2EgaW5kZXhldCIKKworIzogYnVpbHRpbi9hZGQuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIkt1bmRlIGludGUgw7ZwcG5hIFwiJXNcIiBmw7ZyIHNrcml2bmluZy4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjgxCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHBhdGNoIgorbXNnc3RyICJLdW5kZSBpbnRlIHNrcml2YSBwYXRjaCIKKworIzogYnVpbHRpbi9hZGQuYzoyODQKK21zZ2lkICJlZGl0aW5nIHBhdGNoIGZhaWxlZCIKK21zZ3N0ciAicmVkaWdlcmluZyBhdiBwYXRjaCBtaXNzbHlja2FkZXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIkt1bmRlIGludGUgdGEgc3RhdHVzIHDDpSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg5Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICJUb20gcGF0Y2guIEF2YnJ5dGVyLiIKKworIzogYnVpbHRpbi9hZGQuYzoyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICclcyciCittc2dzdHIgIkt1bmRlIGludGUgdGlsbMOkbXBhIFwiJXNcIiIKKworIzogYnVpbHRpbi9hZGQuYzozMDIKK21zZ2lkICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCittc2dzdHIgIkbDtmxqYW5kZSBzw7ZrdsOkZ2FyIGlnbm9yZXJhcyBhdiBlbiBhdiBkaW5hIC5naXRpZ25vcmUtZmlsZXI6XG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIyIGJ1aWx0aW4vY2xlYW4uYzo5MTAgYnVpbHRpbi9mZXRjaC5jOjE2MyBidWlsdGluL212LmM6MTI0CisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU2IGJ1aWx0aW4vcHVsbC5jOjIwMyBidWlsdGluL3B1c2guYzo1NDgKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQyMSBidWlsdGluL3JtLmM6MjQyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY1Cittc2dpZCAiZHJ5IHJ1biIKK21zZ3N0ciAidGVzdGvDtnJuaW5nIgorCisjOiBidWlsdGluL2FkZC5jOjMyNQorbXNnaWQgImludGVyYWN0aXZlIHBpY2tpbmciCittc2dzdHIgInBsb2NrYSBpbnRlcmFrdGl2dCIKKworIzogYnVpbHRpbi9hZGQuYzozMjYgYnVpbHRpbi9jaGVja291dC5jOjE1MTEgYnVpbHRpbi9yZXNldC5jOjMwNworbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJ2w6RsaiBzdHlja2VuIGludGVyYWt0aXZ0IgorCisjOiBidWlsdGluL2FkZC5jOjMyNworbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAicmVkaWdlcmEgYWt0dWVsbCBkaWZmIG9jaCBhcHBsaWNlcmEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI4Cittc2dpZCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJ0aWxsw6V0IGzDpGdnYSB0aWxsIGFubmFycyBpZ25vcmVyYWRlIGZpbGVyIgorCisjOiBidWlsdGluL2FkZC5jOjMyOQorbXNnaWQgInVwZGF0ZSB0cmFja2VkIGZpbGVzIgorbXNnc3RyICJ1cHBkYXRlcmEgc3DDpXJhZGUgZmlsZXIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMwCittc2dpZCAicmVub3JtYWxpemUgRU9MIG9mIHRyYWNrZWQgZmlsZXMgKGltcGxpZXMgLXUpIgorbXNnc3RyICLDpXRlcm5vcm1hbGlzZXJhIHJhZHNsdXQgaSBzcMOlcmFkZSBmaWxlciAoaW1wbGljZXJhciAtdSkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMxCittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCB0aGUgcGF0aCB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICJyZWdpc3RyZXJhIGVuZGFzdCBhdHQgc8O2a3bDpGdlbiBrb21tZXIgbMOkZ2dhcyB0aWxsIHNlbmFyZSIKKworIzogYnVpbHRpbi9hZGQuYzozMzIKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgImzDpGdnIHRpbGwgw6RuZHJpbmdhciBmcsOlbiBhbGxhIHNww6VyYWRlIG9jaCBvc3DDpXJhZGUgZmlsZXIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM1Cittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgImlnbm9yZXJhIHPDtmt2w6RnYXIgYm9ydHRhZ25hIGkgYXJiZXRza2F0YWxvZ2VuIChzYW1tYSBzb20gLS1uby1hbGwpIgorCisjOiBidWlsdGluL2FkZC5jOjMzNworbXNnaWQgImRvbid0IGFkZCwgb25seSByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAibMOkZ2cgaW50ZSB0aWxsLCB1cHBkYXRlcmEgZW5kYXN0IGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM4Cittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAiaG9wcGEgYmFyYSDDtnZlciBmaWxlciBzb20gaW50ZSBrYW4gbMOkZ2dhcyB0aWxsIHDDpSBncnVuZCBhdiBmZWwiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM5Cittc2dpZCAiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIgorbXNnc3RyICJzZSBvbSAtIMOkdmVuIHNha25hZGUgLSBmaWxlciBpZ25vcmVyYXMgaSB0ZXN0a8O2cm5pbmciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQxIGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwNAorbXNnaWQgIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIgorbXNnc3RyICLDtnZlcnN0eXIgZXhla3ZlcmluZ3NiaXRlbiBmw7ZyIGFuZ2l2bmEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQzCittc2dpZCAid2FybiB3aGVuIGFkZGluZyBhbiBlbWJlZGRlZCByZXBvc2l0b3J5IgorbXNnc3RyICJ2YXJuYSBuw6RyIGV0dCBpbmJ5Z2d0IGFya2l2IGzDpGdncyB0aWxsIgorCisjOiBidWlsdGluL2FkZC5jOjM0NQorbXNnaWQgImJhY2tlbmQgZm9yIGBnaXQgc3Rhc2ggLXBgIgorbXNnc3RyICJiYWvDpG5kYSBmw7ZyIFwiZ2l0IHN0YXNoIC1wXCIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIklmIHlvdSBhZGRlZCB0aGlzIHBhdGggYnkgbWlzdGFrZSwgeW91IGNhbiByZW1vdmUgaXQgZnJvbSB0aGVcbiIKKyJpbmRleCB3aXRoOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2VlIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiRHUgaGFyIGxhZ3QgdGlsbCBldHQgYW5uYXQgZ2l0LWFya2l2IGludXRpIGFrdHVlbGx0IGFya2l2LlxuIgorIktsb25lciBhdiBkZXQgeXR0cmUgYXJraXZldCBrb21tZXIgaW50ZSBpbm5laMOlbGxhIGlubmVow6VsbGV0IGZyw6VuXG4iCisiZGV0IGluYsOkZGRhZGUgYXJraXZldCBlbGxlciB2ZXRhIGh1ciBtYW4gZsOlciB0YWcgcMOlIGRldC5cbiIKKyJPbSBkdSB0w6Rua3RlIGzDpGdnYSB0aWxsIGVuIHVuZGVybW9kdWwsIHNrcmV2OlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyJPbSBkdSBsYWRlIHRpbGwgc8O2a3bDpGdlbiBhdiBtaXNzdGFnIHRhciBkdSBib3J0IGRlbiBmcsOlbiBpbmRleGV0XG4iCisibWVkOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2UgXCJnaXQgaGVscCBzdWJtb2R1bGVcIiBmw7ZyIHl0dGVybGlnYXJlIGluZm9ybWF0aW9uLiIKKworIzogYnVpbHRpbi9hZGQuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5nIGVtYmVkZGVkIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAibMOkZ2dlciB0aWxsIGluYsOkZGRhdCBnaXQtYXJraXY6ICVzIgorCisjOiBidWlsdGluL2FkZC5jOjQxMAorbXNnaWQgIiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5hZGRJZ25vcmVkRmlsZSBmYWxzZVwiIgorbXNnc3RyICIiCisiQW52w6RuZCAtZiBvbSBkdSB2ZXJrbGlnZW4gdmlsbCBsw6RnZ2EgdGlsbCBkZW0uXG4iCisiU2zDpSBhdiBkZXR0YSBtZWRkZWxhbmRlIG1lZFxuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkSWdub3JlZEZpbGUgZmFsc2VcIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MTkKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgbMOkZ2dhIHRpbGwgZmlsZXIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ3IGJ1aWx0aW4vY29tbWl0LmM6MzQ4Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSDDpHIgaW5rb21wYXRpYmVsdCBtZWQgLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjQ2NAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgw6RyIGlua29tcGF0aWJlbHQgbWVkIC0tZWRpdCIKKworIzogYnVpbHRpbi9hZGQuYzo0NzYKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLUEgb2NoIC11IMOkciDDtm1zZXNpZGlndCBpbmtvbXBhdGlibGEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDc5Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAiRmxhZ2dhbiAtLWlnbm9yZS1taXNzaW5nIGthbiBlbmRhc3QgYW52w6RuZGFzIHRpbGxzYW1tYW5zIG1lZCAtLWRyeS1ydW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tY2htb2QgcGFyYW0gJyVzJyBtdXN0IGJlIGVpdGhlciAteCBvciAreCIKK21zZ3N0ciAiLS1jaG1vZC1wYXJhbWV0ZXJuIFwiJXNcIiBtw6VzdGUgYW50aW5nZW4gdmFyYSAteCBlbGxlciAreCIKKworIzogYnVpbHRpbi9hZGQuYzo1MDEgYnVpbHRpbi9jaGVja291dC5jOjE2NzUgYnVpbHRpbi9jb21taXQuYzozNTQKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjcgYnVpbHRpbi9ybS5jOjI3MiBidWlsdGluL3N0YXNoLmM6MTUwOQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgw6RyIGlua29tcGF0aWJlbHQgbWVkIHPDtmt2w6Rnc2FuZ2l2ZWxzZXNwYXJhbWV0cmFyIgorCisjOiBidWlsdGluL2FkZC5jOjUwOCBidWlsdGluL2NoZWNrb3V0LmM6MTY4NyBidWlsdGluL2NvbW1pdC5jOjM2MAorIzogYnVpbHRpbi9yZXNldC5jOjMzMyBidWlsdGluL3JtLmM6Mjc4IGJ1aWx0aW4vc3Rhc2guYzoxNTE1Cittc2dpZCAiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIKK21zZ3N0ciAiLS1wYXRoc3BlYy1maWxlLW51bCBrcsOkdmVyIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorCisjOiBidWlsdGluL2FkZC5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAiSW5nZXQgYW5naXZldCwgaW5nZXQgdGlsbGFndC5cbiIKKworIzogYnVpbHRpbi9hZGQuYzo1MTQKK21zZ2lkICIiCisiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZEVtcHR5UGF0aHNwZWMgZmFsc2VcIiIKK21zZ3N0ciAiIgorIlTDpG5rdGUgZHUga2Fuc2tlIHPDpGdhIFwiZ2l0IGFkZCAuXCI/XG4iCisiU2zDpSBhdiBkZXR0YSBtZWRkZWxhbmRlIGdlbm9tIGF0dCBrw7ZyYVxuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkRW1wdHlQYXRoc3BlYyBmYWxzZVwiIgorCisjOiBidWlsdGluL2FtLmM6MzUyCittc2dpZCAiY291bGQgbm90IHBhcnNlIGF1dGhvciBzY3JpcHQiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgZsO2cmZhdHRhcnNrcmlwdCIKKworIzogYnVpbHRpbi9hbS5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICJcIiVzXCIgdG9ncyBib3J0IGF2IGtyb2tlbiBhcHBseXBhdGNoLW1zZyIKKworIzogYnVpbHRpbi9hbS5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIkZlbGFrdGlnIGluZGF0YXJhZDogXCIlc1wiLiIKKworIzogYnVpbHRpbi9hbS5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGtvcGllcmEgYW50ZWNrbmluZ2FyIGZyw6VuIFwiJXNcIiB0aWxsIFwiJXNcIiIKKworIzogYnVpbHRpbi9hbS5jOjU0MgorbXNnaWQgImZzZWVrIGZhaWxlZCIKK21zZ3N0ciAiXCJmc2Vla1wiIG1pc3NseWNrYWRlcyIKKworIzogYnVpbHRpbi9hbS5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBwYXRjaGVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9hbS5jOjc5NQorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICJFbmRhc3QgZW4gU3RHSVQtcGF0Y2hzZXJpZSBrYW4gdGlsbMOkbXBhcyDDpXQgZ8OlbmdlbiIKKworIzogYnVpbHRpbi9hbS5jOjg0MworbXNnaWQgImludmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICJvZ2lsdGlnIHRpZHNzdMOkbXBlbCIKKworIzogYnVpbHRpbi9hbS5jOjg0OCBidWlsdGluL2FtLmM6ODYwCittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgIm9naWx0aWcgXCJEYXRlXCItcmFkIgorCisjOiBidWlsdGluL2FtLmM6ODU1Cittc2dpZCAiaW52YWxpZCB0aW1lem9uZSBvZmZzZXQiCittc2dzdHIgIm9naWx0aWcgdGlkc3pvbnMtb2Zmc2V0IgorCisjOiBidWlsdGluL2FtLmM6OTQ4Cittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgZGV0ZWt0ZXJhIHBhdGNoZm9ybWF0LiIKKworIzogYnVpbHRpbi9hbS5jOjk1MyBidWlsdGluL2Nsb25lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBrYXRhbG9nZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2FtLmM6OTU4Cittc2dpZCAiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgZGVsYSBwYXRjaGFyLiIKKworIzogYnVpbHRpbi9hbS5jOjEwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiVzIC0tY29udGludWVcIi4iCittc2dzdHIgIk7DpHIgZHUgaGFyIGzDtnN0IHByb2JsZW1ldCwga8O2ciBcIiVzIC0tY29udGludWVcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIlcyAtLXNraXBcIiBpbnN0ZWFkLiIKK21zZ3N0ciAiT20gZHUgaGVsbHJlIHZpbGwgaG9wcGEgw7Z2ZXIgcGF0Y2hlbiwga8O2ciBcIiVzIC0tc2tpcFwiIGkgc3TDpGxsZXQuIgorCisjOiBidWlsdGluL2FtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iCittc2dzdHIgIiIKKyJGw7ZyIGF0dCDDpXRlcmfDpSB0aWxsIHVyc3BydW5nbGlnIGdyZW4gb2NoIHNsdXRhIHBhdGNoYSwga8O2ciBcIiVzIC0tYWJvcnRcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTc0Cittc2dpZCAiUGF0Y2ggc2VudCB3aXRoIGZvcm1hdD1mbG93ZWQ7IHNwYWNlIGF0IHRoZSBlbmQgb2YgbGluZXMgbWlnaHQgYmUgbG9zdC4iCittc2dzdHIgIiIKKyJQYXRjaCBzw6RuZCBtZWQgZm9ybWF0PWZsb3dlZDsgYmxhbmtzdGVnIHDDpSBzbHV0IGF2IHJhZGVyIGthbiBoYSB0YXBwYXRzLiIKKworIzogYnVpbHRpbi9hbS5jOjEyMDIKK21zZ2lkICJQYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgIlBhdGNoZW4gw6RyIHRvbS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYXV0aG9yIGxpbmUgaW4gY29tbWl0ICVzIgorbXNnc3RyICJzYWtuYWQgXCJhdXRob3JcIi1yYWQgaSBpbmNoZWNrbmluZ2VuICVzIgorCisjOiBidWlsdGluL2FtLmM6MTI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICUuKnMiCittc2dzdHIgIm9naWx0aWcgaWRlbnQtcmFkOiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTQ4OQorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIiIKKyJBcmtpdmV0IHNha25hciBvYmpla3Qgc29tIGJlaMO2dnMgZsO2ciBhdHQgZmFsbGEgdGlsbGJha2EgcMOlIDMtIgorInbDpGdzc2FtbWFuc2xhZ25pbmcuIgorCisjOiBidWlsdGluL2FtLmM6MTQ5MQorbXNnaWQgIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iCittc2dzdHIgIkFudsOkbmRlciBpbmRleGluZm8gZsO2ciBhdHQgw6V0ZXJza2FwYSBldHQgYmFzdHLDpGQuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTEwCittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorIkhhciBkdSBoYW5kcmVkaWdlcmF0IGRpbiBwYXRjaD9cbiIKKyJEZW4ga2FuIGludGUgdGlsbMOkbXBhcyBww6UgYmxvYmJhciBzb20gYW50ZWNrbmF0cyBpIGRlc3MgaW5kZXguIgorCisjOiBidWlsdGluL2FtLmM6MTUxNgorbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAiIgorIkZhbGxlciB0aWxsYmFrYSBww6UgYXR0IHBhdGNoYSBncnVuZHZlcnNpb25lbiBvY2ggdHJldsOkZ3NzYW1tYW5zbGFnbmluZy4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE1NDIKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgc2zDpSBpaG9wIMOkbmRyaW5nYXJuYS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTc0Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAidGlsbMOkbXBhciBww6UgZW4gdG9tIGhpc3RvcmlrIgorCisjOiBidWlsdGluL2FtLmM6MTYyMSBidWlsdGluL2FtLmM6MTYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgImthbiBpbnRlIMOldGVydXBwdGE6ICVzIGZpbm5zIGludGUuIgorCisjOiBidWlsdGluL2FtLmM6MTY0MworbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAiSW5jaGVja25pbmdza3JvcHBlbiDDpHI6IgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2FtLmM6MTY1MworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorbXNnc3RyICJUaWxsw6RtcGE/IFk9amEvTj1uZWovRT1yZWRpZ2VyYS9WPXZpc2EgcGF0Y2gvQT1nb2R0YSBhbGxhOiAiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzAwIGJ1aWx0aW4vY29tbWl0LmM6Mzk4Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGluZGV4IGZpbGUiCittc2dzdHIgImthbiBpbnRlIHNrcml2YSBpbmRleGZpbCIKKworIzogYnVpbHRpbi9hbS5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJXMpIgorbXNnc3RyICJTbXV0c2lndCBpbmRleDoga2FuIGludGUgdGlsbMOkbXBhIHBhdGNoYXIgKHNtdXRzaWdhOiAlcykiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzQ0IGJ1aWx0aW4vYW0uYzoxODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICJUaWxsw6RtcGFyOiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc2MQorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAiSW5nYSDDpG5kcmluZ2FyIC0tIFBhdGNoZW4gaGFyIHJlZGFuIHRpbGzDpG1wYXRzLiIKKworIzogYnVpbHRpbi9hbS5jOjE3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICVzICUuKnMiCittc2dzdHIgIlBhdGNoIG1pc3NseWNrYWRlcyBww6UgJXMgJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE3NzEKK21zZ2lkICJVc2UgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaD1kaWZmJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAiIgorIkFudsOkbmQgXCJnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2g9ZGlmZlwiIGbDtnIgYXR0IHNlIHBhdGNoZW4gc29tICIKKyJtaXNzbHlja2FkZXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODE1Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisiSW5nYSDDpG5kcmluZ2FyIC0gZ2zDtm1kZSBkdSBhdHQgYW52w6RuZGEgXCJnaXQgYWRkXCI/XG4iCisiT20gZGV0IGludGUgw6RyIG7DpWdvdCBrdmFyIGF0dCBrw7ZhIGthbiBkZXQgaMOkbmRhIGF0dCBuw6Vnb3QgYW5uYXQgcmVkYW5cbiIKKyJpbnRyb2R1Y2VyYXQgc2FtbWEgw6RuZHJpbmdhcjsga2Fuc2tlIGR1IGLDtnIgaG9wcGEgw7Z2ZXIgcGF0Y2hlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODIyCittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisiWW91IHNob3VsZCAnZ2l0IGFkZCcgZWFjaCBmaWxlIHdpdGggcmVzb2x2ZWQgY29uZmxpY3RzIHRvIG1hcmsgdGhlbSBhcyAiCisic3VjaC5cbiIKKyJZb3UgbWlnaHQgcnVuIGBnaXQgcm1gIG9uIGEgZmlsZSB0byBhY2NlcHQgXCJkZWxldGVkIGJ5IHRoZW1cIiBmb3IgaXQuIgorbXNnc3RyICIiCisiRHUgaGFyIGZvcnRmYXJhbmRlIGVqIHNhbW1hbnNsYWduYSBzw7ZrdsOkZ2FyIGkgaW5kZXhldC5cbiIKKyJEdSBiw7ZyIGvDtnJhIFwiZ2l0IGFkZFwiIHDDpSBmaWxlciBtZWQgbMO2c3RhIGtvbmZsaWt0ZXIgZsO2ciBhdHQgYW5nZSBkZW0gc29tICIKKyJsw7ZzdGEuXG4iCisiRHUga2FuIGvDtnJhIFwiZ2l0IHJtXCIgZsO2ciBhdHQgZ29kdGEgXCJib3J0dGFnZW4gYXYgZGVtXCIgZsO2ciBkZW4uIgorCisjOiBidWlsdGluL2FtLmM6MTkyOSBidWlsdGluL2FtLmM6MTkzMyBidWlsdGluL2FtLmM6MTk0NSBidWlsdGluL3Jlc2V0LmM6MzQ2CisjOiBidWlsdGluL3Jlc2V0LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIkthbiBpbnRlIHRvbGthIG9iamVrdGV0IFwiJXNcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTgxCittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICJtaXNzbHlja2FkZXMgc3TDpGRhIHVwcCBpbmRleGV0IgorCisjOiBidWlsdGluL2FtLmM6MjAyNQorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICIiCisiRHUgdmVya2FyIGhhIGZseXR0YXQgSEVBRCBzZWRhbiBcImFtXCIgc2lzdCBtaXNzbHlja2FkZXMuXG4iCisiw4V0ZXJzdMOkbGxlciBpbnRlIHRpbGwgT1JJR19IRUFEIgorCisjOiBidWlsdGluL2FtLmM6MjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXBhdGNoLWZvcm1hdDogJXMiCittc2dzdHIgIkZlbGFrdGlndCB2w6RyZGUgZsO2ciAtLXBhdGNoLWZvcm1hdDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIC0tc2hvdy1jdXJyZW50LXBhdGNoOiAlcyIKK21zZ3N0ciAiRmVsYWt0aWd0IHbDpHJkZSBmw7ZyIC0tc2hvdy1jdXJyZW50LXBhdGNoOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjIxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMiCittc2dzdHIgIi0tc2hvdy1jdXJyZW50LXBhdGNoPSVzIMOkciBpbmtvbXBhdGliZWx0IG1lZCAtLXNob3ctY3VycmVudC1wYXRjaD0lcyIKKworIzogYnVpbHRpbi9hbS5jOjIyMDcKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXSIKK21zZ3N0ciAiZ2l0IGFtIFs8ZmxhZ2dvcj5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA4Cittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCittc2dzdHIgImdpdCBhbSBbPGZsYWdnb3I+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorCisjOiBidWlsdGluL2FtLmM6MjIxNAorbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJrw7ZyIGludGVyYWt0aXZ0IgorCisjOiBidWlsdGluL2FtLmM6MjIxNgorbXNnaWQgImhpc3RvcmljYWwgb3B0aW9uIC0tIG5vLW9wIgorbXNnc3RyICJoaXN0b3Jpc2sgZmxhZ2dhIC0tIG5vLW9wIgorCisjOiBidWlsdGluL2FtLmM6MjIxOAorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICJ0aWxsw6V0IGZhbGxhIHRpbGxiYWthIHDDpSB0cmV2w6Rnc3NhbW1hbnNsYWduaW5nIG9tIG7DtmR2w6RuZGlndCIKKworIzogYnVpbHRpbi9hbS5jOjIyMTkgYnVpbHRpbi9pbml0LWRiLmM6NDk0IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTgKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA0IGJ1aWx0aW4vc3Rhc2guYzo4MTIKK21zZ2lkICJiZSBxdWlldCIKK21zZ3N0ciAidmFyIHR5c3QiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIxCittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAibMOkZ2cgdGlsbCBcIlNpZ25lZC1vZmYtYnlcIi1yYWQgaSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjQKK21zZ2lkICJyZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KSIKK21zZ3N0ciAia29kYSBvbSB0aWxsIHV0ZjggKHN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjYKK21zZ2lkICJwYXNzIC1rIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJzw6RuZCBmbGFnZ2FuIC1rIHRpbGwgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjIyOAorbXNnaWQgInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInPDpG5kIGZsYWdnYW4gLWIgdGlsbCBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAic8OkbmQgZmxhZ2dhbiAtbSB0aWxsIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIyMzIKK21zZ2lkICJwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgZm9yIG1ib3ggZm9ybWF0IgorbXNnc3RyICJzw6RuZCBmbGFnZ2FuIC0ta2VlcC1jciB0aWxsIGdpdC1tYWlsc3BsaXQgZsO2ciBtYm94LWZvcm1hdGV0IgorCisjOiBidWlsdGluL2FtLmM6MjIzNQorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICJzw6RuZCBpbnRlIGZsYWdnYW4gLS1rZWVwLWNyIHRpbGwgZ2l0LW1haWxzcGxpdCBvYmVyb2VuZGUgYXYgYW0ua2VlcGNyIgorCisjOiBidWlsdGluL2FtLmM6MjIzOAorbXNnaWQgInN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSIKK21zZ3N0ciAidGEgYm9ydCBhbGx0aW5nIGbDtnJlIGVuIHNheGxpbmplIgorCisjOiBidWlsdGluL2FtLmM6MjI0MCBidWlsdGluL2FtLmM6MjI0MyBidWlsdGluL2FtLmM6MjI0NiBidWlsdGluL2FtLmM6MjI0OQorIzogYnVpbHRpbi9hbS5jOjIyNTIgYnVpbHRpbi9hbS5jOjIyNTUgYnVpbHRpbi9hbS5jOjIyNTggYnVpbHRpbi9hbS5jOjIyNjEKKyM6IGJ1aWx0aW4vYW0uYzoyMjY3Cittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAic8OkbmQgZGV0IGdlbm9tIGdpdC1hcHBseSIKKworIzogYnVpbHRpbi9hbS5jOjIyNTcgYnVpbHRpbi9jb21taXQuYzoxMzkxIGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MAorIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczIGJ1aWx0aW4vZ3JlcC5jOjg3MSBidWlsdGluL21lcmdlLmM6MjUwCisjOiBidWlsdGluL3B1bGwuYzoxNDAgYnVpbHRpbi9wdWxsLmM6MTk5IGJ1aWx0aW4vcmViYXNlLmM6MTUwNQorIzogYnVpbHRpbi9yZXBhY2suYzozMTUgYnVpbHRpbi9yZXBhY2suYzozMTkgYnVpbHRpbi9yZXBhY2suYzozMjEKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAgYnVpbHRpbi9zaG93LXJlZi5jOjE3MiBidWlsdGluL3RhZy5jOjQwMworIzogcGFyc2Utb3B0aW9ucy5oOjE1NCBwYXJzZS1vcHRpb25zLmg6MTc1IHBhcnNlLW9wdGlvbnMuaDozMTYKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2FtLmM6MjI2MyBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTYgYnVpbHRpbi90YWcuYzo0MzcgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgImZvcm1hdCIKKworIzogYnVpbHRpbi9hbS5jOjIyNjQKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgImZvcm1hdCBmw7ZyIHBhdGNoKGFyKSIKKworIzogYnVpbHRpbi9hbS5jOjIyNzAKK21zZ2lkICJvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMiCittc2dzdHIgIsO2dmVyc3R5ciBmZWxtZWRkZWxhbmRlbiBuw6RyIHBhdGNoZmVsIHVwcHN0w6VyIgorCisjOiBidWlsdGluL2FtLmM6MjI3MgorbXNnaWQgImNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QiCittc2dzdHIgImZvcnRzw6R0dCBhcHBsaWNlcmEgcGF0Y2hhciBlZnRlciBhdHQgaGEgbMO2c3QgZW4ga29uZmxpa3QiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc1Cittc2dpZCAic3lub255bXMgZm9yIC0tY29udGludWUiCittc2dzdHIgInN5bm9ueW1lciB0aWxsIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc4Cittc2dpZCAic2tpcCB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAiaG9wcGEgw7Z2ZXIgZGVuIGFrdHVlbGxhIGdyZW5lbiIKKworIzogYnVpbHRpbi9hbS5jOjIyODEKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICLDpXRlcnN0w6RsbCBvcmlnaW5hbGdyZW5lbiBvY2ggYXZicnl0IHBhdGNobmluZ2VuLiIKKworIzogYnVpbHRpbi9hbS5jOjIyODQKK21zZ2lkICJhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uIGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMuIgorbXNnc3RyICJhdmJyeXQgcGF0Y2huaW5nZW4gbWVuIGJlaMOlbGwgSEVBRCBkw6RyIGRldCDDpHIuIgorCisjOiBidWlsdGluL2FtLmM6MjI4OAorbXNnaWQgInNob3cgdGhlIHBhdGNoIGJlaW5nIGFwcGxpZWQiCittc2dzdHIgInZpc2EgcGF0Y2hlbiBzb20gdGlsbMOkbXBhcyIKKworIzogYnVpbHRpbi9hbS5jOjIyOTMKK21zZ2lkICJsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUiCittc2dzdHIgImxqdWcgb20gaW5jaGVja25pbmdzZGF0dW0iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk1Cittc2dpZCAidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIKK21zZ3N0ciAiYW52w6RuZCBudXZhcmFuZGUgdGlkc3N0w6RtcGVsIGbDtnIgZsO2cmZhdHRhcmRhdHVtIgorCisjOiBidWlsdGluL2FtLmM6MjI5NyBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIwIGJ1aWx0aW4vY29tbWl0LmM6MTUxMgorIzogYnVpbHRpbi9tZXJnZS5jOjI4NyBidWlsdGluL3B1bGwuYzoxNzQgYnVpbHRpbi9yZWJhc2UuYzo1MTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NiBidWlsdGluL3JldmVydC5jOjExNyBidWlsdGluL3RhZy5jOjQxOAorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAibnlja2VsLWlkIgorCisjOiBidWlsdGluL2FtLmM6MjI5OCBidWlsdGluL3JlYmFzZS5jOjUxOCBidWlsdGluL3JlYmFzZS5jOjE1NTcKK21zZ2lkICJHUEctc2lnbiBjb21taXRzIgorbXNnc3RyICJHUEctc2lnbmVyYSBpbmNoZWNrbmluZ2FyIgorCisjOiBidWlsdGluL2FtLmM6MjMwMQorbXNnaWQgIihpbnRlcm5hbCB1c2UgZm9yIGdpdC1yZWJhc2UpIgorbXNnc3RyICIoYW52w6RuZHMgaW50ZXJudCBhdiBnaXQtcmViYXNlKSIKKworIzogYnVpbHRpbi9hbS5jOjIzMTkKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKyJGbGFnZ2FuIC1iLy0tYmluYXJ5IGhhciB2YXJpdCB1dGFuIGZ1bmt0aW9uIGzDpG5nZSwgb2NoXG4iCisia29tbWVyIHRhcyBib3J0LiBWaSBiZXIgZGlnIGF0dCBpbnRlIGFudsOkbmRhIGRlbiBsw6RuZ3JlLiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjYKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIm1pc3NseWNrYWRlcyBsw6RzYSBpbmRleGV0IgorCisjOiBidWlsdGluL2FtLmM6MjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICVzIHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgInRpZGlnYXJlIHJlYmFzZS1rYXRhbG9nICVzIGZpbm5zIGZvcnRmYXJhbmRlLCBtZW4gbWJveCBhbmdhdnMuIgorCisjOiBidWlsdGluL2FtLmM6MjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3RyYXkgJXMgZGlyZWN0b3J5IGZvdW5kLlxuIgorIlVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIKK21zZ3N0ciAiIgorIkt2YXJibGl2ZW4ga2F0YWxvZyAlcyBoaXR0YWRlcy5cbiIKKyJBbnbDpG5kIFwiZ2l0IGFtIC0tYWJvcnRcIiBmw7ZyIGF0dCB0YSBib3J0IGRlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzcxCittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiTMO2c25pbmdzb3BlcmF0aW9uIHDDpWfDpXIgaW50ZSwgdmkgw6V0ZXJ1cHB0YXIgaW50ZS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzgxCittc2dpZCAiaW50ZXJhY3RpdmUgbW9kZSByZXF1aXJlcyBwYXRjaGVzIG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgImludGVyYWt0aXZ0IGzDpGdlIGtyw6R2ZXIgcGF0Y2hhciBww6Uga29tbWFuZG9yYWRlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjgKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzxmbGFnZ29yPl0gWzxwYXRjaD4uLi5dIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIGFya2l2ZmlsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgImt1bmRlIGludGUgb21kaXJpZ2VyYSB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IEZqw6RyciB1dGFuIFVSTCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjEKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICJnaXQgYXJjaGl2ZTogZsO2cnbDpG50YWRlIEFDSy9OQUssIGZpY2sgZmx1c2gtcGFrZXQiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjUKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlOiBwcm90b2tvbGxmZWwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY5Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlOiBmw7ZydsOkbnRhZGUgZW4gdMO2bW5pbmcgKGZsdXNoKSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxiYWRfdGVybT4gPGdvb2RfdGVybT4iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDx0ZXJtLWbDtnItZmVsPiA8dGVybS1mw7ZyLXLDpHR0PiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI0Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNQorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzxpbmNoZWNrbmluZz5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjYKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPHN0YXRlPiA8cmV2aXNpb24+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPHRpbGxzdMOlbmQ+IDxyZXZpc2lvbj4gPHRlcm0tIgorImbDtnItcsOkdHQ+IDx0ZXJtLWbDtnItZmVsPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI3Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxjb21tYW5kPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxrb21tYWRubz4gPHRlcm0tZsO2ci1yw6R0dD4gIgorIjx0ZXJtLWbDtnItZmVsPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPGdvb2RfdGVybT4gPGJhZF90ZXJtPiBbPHRlcm0+XSIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrIDx0ZXJtLWbDtnItcsOkdHQ+IDx0ZXJtLWbDtnItZmVsPiA8ZXRlcm0+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorbXNnc3RyICIiCisiZ2l0LWJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzAKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PHRlcm0+XVstLW5vLWNoZWNrb3V0XSBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PHRlcm0+XVstLW5vLWNoZWNrb3V0XSBbPGZlbD4gWzxyw6R0dD4uLi5dXSBbLS1dIFs8c8O2a3bDpGdhcj4uLi5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0ZXJtIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZW4gZ2lsdGlnIHRlcm0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnJXMnIGFzIGEgdGVybSIKK21zZ3N0ciAia2FuIGludGUgYW52w6RuZGEgZGV0IGluYnlnZ2RhIGtvbW1hbmRvdCBcIiVzXCIgc29tIHRlcm0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSB0ZXJtICclcyciCittc2dzdHIgImthbiBpbnRlIMOkbmRyYSBiZXR5ZGVsc2VuIGF2IHRlcm1lbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTEKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgInRlcm1lcm5hIG3DpXN0ZSB2YXJhIG9saWthIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTE4Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGhlIGZpbGUgQklTRUNUX1RFUk1TIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSBmaWxlbiBCSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuXG4iCittc2dzdHIgIlZpIHV0ZsO2ciBpbmdlbiBiaXNlY3QgZsO2ciB0aWxsZsOkbGxldC5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiXCIlc1wiIMOkciBpbnRlIGVuIGdpbHRpZyBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICclcycuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisiS3VuZGUgaW50ZSBjaGVja2EgdXQgb3JpZ2luYWwtSEVBRCBcIiVzXCIuIEbDtnJzw7ZrIFwiZ2l0IGJpc2VjdCByZXNldCAiCisiPGluY2hlY2tuaW5nPlwiLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRmVsYWt0aWd0IGFyZ3VtZW50IHRpbGwgYmlzZWN0X3dyaXRlOiAlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBnZXQgdGhlIG9pZCBvZiB0aGUgcmV2ICclcyciCittc2dzdHIgImthbiBpbnRlIGzDpHNhIG9pZCBmw7ZyIHJlZmVyZW5zZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IG9wZW4gdGhlIGZpbGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDtnBwbmEgZmlsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWFuZDogeW91J3JlIGN1cnJlbnRseSBpbiBhICVzLyVzIGJpc2VjdCIKK21zZ3N0ciAiT2dpbHRpZ3Qga29tbWFuZG86IGR1IHV0ZsO2ciBqdXN0IG51IGVuIFwiYmlzZWN0XCIgbWVkICVzLyVzLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyJEdSBtw6VzdGUgYW5nZSDDpXRtaW5zdG9uZSBlbiAlcyBvY2ggZW4gJXMgdmVyc2lvbi5cbiIKKyIoRHUga2FuIGFudsOkbmRhIFwiZ2l0IGJpc2VjdCAlc1wiIG9jaCBcImdpdCBiaXNlY3QgJXNcIiBmw7ZyIGRldHRhLikiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyJEdSBtw6VzdGUgc3RhcnRhIG1lZCBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJEdSBtw6VzdGUgc2VkYW4gYW5nZSDDpXRtaW5zdG9uZSBlbiAlcyBvY2ggZW4gJXMgdmVyc2lvbi5cbiIKKyIoRHUga2FuIGFudsOkbmRhIFwiZ2l0IGJpc2VjdCAlc1wiIG9jaCBcImdpdCBiaXNlY3QgJXNcIiBmw7ZyIGRldHRhLikiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzZWN0aW5nIG9ubHkgd2l0aCBhICVzIGNvbW1pdCIKK21zZ3N0ciAidXRmw7ZyIGJpc2VjdCBtZWQgZW5kYXN0IGVuICVzIGluY2hlY2tuaW5nIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzE4Cittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIsOEciBkdSBzw6RrZXIgW1k9amEvTj1uZWpdPyAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozNzkKK21zZ2lkICJubyB0ZXJtcyBkZWZpbmVkIgorbXNnc3RyICJpbmdhIHRlcm1lciBhbmdpdm5hIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGN1cnJlbnQgdGVybXMgYXJlICVzIGZvciB0aGUgb2xkIHN0YXRlXG4iCisiYW5kICVzIGZvciB0aGUgbmV3IHN0YXRlLlxuIgorbXNnc3RyICIiCisiQWt0dWVsbGEgdGVybWVyIMOkciAlcyBmw7ZyIGRldCBnYW1sYSB0aWxsc3TDpW5kZXRcbiIKKyJvY2ggJXMgZsO2ciBkZXQgbnlhIHRpbGxzdMOlbmRldC5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM5MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIlN1cHBvcnRlZCBvcHRpb25zIGFyZTogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBhbmQgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKK21zZ3N0ciAiIgorIm9naWx0aWd0IGFyZ3VtZW50ICVzIGbDtnIgXCJnaXQgYmlzZWN0IHRlcm1zXCIuXG4iCisiRmxhZ2dvciBzb20gc3TDtmRzIMOkcjogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBvY2ggLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgb3B0aW9uOiAnJXMnIgorbXNnc3RyICJva8OkbmQgZmxhZ2dhOiAlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICJcIiVzXCIgdmVya2FyIGludGUgdmFyYSBlbiBnaWx0aWcgcmV2aXNpb24iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MTQKK21zZ2lkICJiYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgImZlbGFrdGlndCBIRUFEIC0gSmFnIGJlaMO2dmVyIGV0dCBIRUFEIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNoZWNraW5nIG91dCAnJXMnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHN0YXJ0IDx2YWxpZC1icmFuY2g+Jy4iCittc2dzdHIgIiIKKyJtaXNzbHlja2FkZXMgY2hlY2thIHV0IFwiJXNcIi4gRsO2cnPDtmsgXCJnaXQgYmlzZWN0IHJlc2V0IDxnaWx0aWdfZ3Jlbj5cIi4iCisKKyMgY29naXRvLXJlbGF0ZXJhdAorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MAorbXNnaWQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiCittc2dzdHIgImvDtnIgaW50ZSBcImJpc2VjdFwiIHDDpSB0csOkZCBkw6RyIFwiY2ctc2Vla1wiIGFudsOkbnRzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTUzCittc2dpZCAiYmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiZmVsYWt0aWd0IEhFQUQgLSBrb25zdGlnIHN5bWJvbGlzayByZWZlcmVucyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU3NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZjogJyVzJyIKK21zZ3N0ciAib2dpbHRpZyByZWZlcmVuczogXCIlc1wiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMzCittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAidXRmw7ZyICdnaXQgYmlzZWN0IG5leHQnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM1Cittc2dpZCAid3JpdGUgdGhlIHRlcm1zIHRvIC5naXQvQklTRUNUX1RFUk1TIgorbXNnc3RyICJza3JpdiB0ZXJtZXJuYSBpIC5naXQvQklTRUNUX1RFUk1TIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM3Cittc2dpZCAiY2xlYW51cCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICJzdMOkZGFyIHVwcCBiaXNlY3QtdGlsbHN0w6VuZCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzOQorbXNnaWQgImNoZWNrIGZvciBleHBlY3RlZCByZXZzIgorbXNnc3RyICJrb250cm9sbGVyYSBmw7ZyIGbDtnJ2w6RudGFkZSB2ZXJzaW9uZXIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDEKK21zZ2lkICJyZXNldCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICLDpXRlcnN0w6RsbCBiaXNlY3QtdGlsbHN0w6VuZCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MworbXNnaWQgIndyaXRlIG91dCB0aGUgYmlzZWN0aW9uIHN0YXRlIGluIEJJU0VDVF9MT0ciCittc2dzdHIgInNrcml2ZXIgYmlzZWN0LXRpbGxzdMOlbmRldCBpIEJJU0VDVF9MT0ciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDUKK21zZ2lkICJjaGVjayBhbmQgc2V0IHRlcm1zIGluIGEgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICJ2aXNhIG9jaCBhbmdlIHRlcm1lciBmw7ZyIGJpc2VjdC10aWxsc3TDpW5kIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ3Cittc2dpZCAiY2hlY2sgd2hldGhlciBiYWQgb3IgZ29vZCB0ZXJtcyBleGlzdCIKK21zZ3N0ciAic2UgZWZ0ZXIgb20gdGVybWVyIGbDtnIgcsOkdHQgb2NoIGZlbCBmaW5ucyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0OQorbXNnaWQgInByaW50IG91dCB0aGUgYmlzZWN0IHRlcm1zIgorbXNnc3RyICJza3JpdiB1dCB0ZXJtZXIgZsO2ciBiaXNlY3QiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTEKK21zZ2lkICJzdGFydCB0aGUgYmlzZWN0IHNlc3Npb24iCittc2dzdHIgInDDpWLDtnJqYSBiaXNlY3Qta8O2cm5pbmdlbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MworbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgInVwcGRhdGVyYSBCSVNFQ1RfSEVBRCBpc3TDpGxsZXQgZsO2ciBhdHQgY2hlY2thIHV0IGFrdHVlbGwgaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTUKK21zZ2lkICJubyBsb2cgZm9yIEJJU0VDVF9XUklURSIKK21zZ3N0ciAiaW5nZW4gbG9nZyBmw7ZyIEJJU0VDVF9XUklURSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3MworbXNnaWQgIi0td3JpdGUtdGVybXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS13cml0ZS10ZXJtcyBrcsOkdmVyIHR2w6UgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzcKK21zZ2lkICItLWJpc2VjdC1jbGVhbi1zdGF0ZSByZXF1aXJlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIHRhciBpbmdhIGFyZ3VtZW50IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg0Cittc2dpZCAiLS1iaXNlY3QtcmVzZXQgcmVxdWlyZXMgZWl0aGVyIG5vIGFyZ3VtZW50IG9yIGEgY29tbWl0IgorbXNnc3RyICItLWJpc2VjdC1yZXNldCBrcsOkdmVyIGFudGluZ2VuIGluZ2V0IGFyZ3VtZW50IGVsbGVyIGVuIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg4Cittc2dpZCAiLS1iaXNlY3Qtd3JpdGUgcmVxdWlyZXMgZWl0aGVyIDQgb3IgNSBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LXdyaXRlIGtyw6R2ZXIgYW50aW5nZW4gNCBlbGxlciA1IGFyZ3VtZW50IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njk0Cittc2dpZCAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIHJlcXVpcmVzIDMgYXJndW1lbnRzIgorbXNnc3RyICItLWNoZWNrLWFuZC1zZXQtdGVybXMga3LDpHZlciB0cmUgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3MDAKK21zZ2lkICItLWJpc2VjdC1uZXh0LWNoZWNrIHJlcXVpcmVzIDIgb3IgMyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LW5leHQtY2hlY2sga3LDpHZlciAyIGVsbGVyIDMgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3MDYKK21zZ2lkICItLWJpc2VjdC10ZXJtcyByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnQiCittc2dzdHIgIi0tYmlzZWN0LXRlcm1zIGtyw6R2ZXIgbm9sbCBlbGxlciBldHQgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMQorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJsYW1lIFs8ZmxhZ2dvcj5dIFs8cmV2LWZsYWdnb3I+XSBbPHJldj5dIFstLV0gPGZpbD4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozNgorbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICI8cmV2LWZsYWdnb3I+IGRva3VtZW50ZXJhcyBpIGdpdC1yZXYtbGlzdCgxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RpbmcgYSBjb2xvcjogJXMiCittc2dzdHIgImbDtnJ2w6RudGFkZSBlbiBmw6RyZzogJXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MTYKK21zZ2lkICJtdXN0IGVuZCB3aXRoIGEgY29sb3IiCittc2dzdHIgIm3DpXN0ZSBzbHV0YSBtZWQgZW4gZsOkcmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciAnJXMnIGluIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCittc2dzdHIgImZlbGFrdGlnIGbDpHJnIFwiJXNcIiBpIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3NDcKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciBibGFtZS5jb2xvcmluZyIKK21zZ3N0ciAib2dpbHRpZ3QgdsOkcmRlIGbDtnIgYmxhbWUuY29sb3JpbmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgcmV2aXNpb24gJXMgdG8gaWdub3JlIgorbXNnc3RyICJrYW4gaW50ZSBoaXR0YSByZXZpc2lvbiAlcyBhdHQgaWdub3JlcmEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDQKK21zZ2lkICJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IgorbXNnc3RyICJWaXNhIGtsYW5kcmluZ3Nwb3N0ZXIgbsOkciB2aSBoaXR0YXIgZGVtLCBpbnRlcmFrdGl2dCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NQorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIlZpc2EgYmxhbmsgU0hBLTEgZsO2ciBncsOkbnNpbmNoZWNrbmluZ2FyIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ2Cittc2dpZCAiRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJCZWhhbmRsYSBpbnRlIHJvdGluY2hlY2tuaW5nYXIgc29tIGdyw6Ruc2VyIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ3Cittc2dpZCAiU2hvdyB3b3JrIGNvc3Qgc3RhdGlzdGljcyIKK21zZ3N0ciAiVmlzYSBzdGF0aXN0aWsgw7Z2ZXIgYXJiZXRza29zdG5hZCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiVHZpbmdhIGbDtnJsb3Bwc3JhcHBvcnRlcmluZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OQorbXNnaWQgIlNob3cgb3V0cHV0IHNjb3JlIGZvciBibGFtZSBlbnRyaWVzIgorbXNnc3RyICJWaXNhIHV0ZGF0YXBvw6RuZyBmw7ZyIGtsYW5kcmluZ3Nwb3N0ZXIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTAKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAiVmlzYSBvcmlnaW5hbGZpbG5hbW4gKFN0YW5kYXJkOiBhdXRvKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MQorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVmlzYSB1cnNwcnVuZ2xpZ3QgcmFkbnVtbWVyIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUyCittc2dpZCAiU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiIKK21zZ3N0ciAiVmlzYSBpIGV0dCBmb3JtYXQgYXZzZXR0IGbDtnIgbWFza2lua29uc3VtdGlvbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MworbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiVmlzYSBwb3JzbGluc2Zvcm1hdCBtZWQgcGVyLXJhZC1pbmNoZWNrbmluZ3NpbmZvcm1hdGlvbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NAorbXNnaWQgIlVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBnaXQtYW5ub3RhdGUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkFudsOkbmQgc2FtbWEgdXRkYXRhbMOkZ2Ugc29tIGdpdC1hbm5vdGF0ZSAoU3RhbmRhcmQ6IGF2KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NQorbXNnaWQgIlNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVmlzYSByw6UgdGlkc3N0w6RtcGVsIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU2Cittc2dpZCAiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJWaXNhIGzDpW5nIGluY2hlY2tuaW5ncy1TSEExIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU3Cittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVW5kZXJ0cnljayBmw7ZyZmF0dGFybmFtbiBvY2ggdGlkc3N0w6RtcGVsIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU4Cittc2dpZCAiU2hvdyBhdXRob3IgZW1haWwgaW5zdGVhZCBvZiBuYW1lIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJWaXNhIGbDtnJmYXR0YXJlbnMgZS1wb3N0IGlzdMOkbGxldCBmw7ZyIG5hbW4gKFN0YW5kYXJkOiBhdikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTkKK21zZ2lkICJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIKK21zZ3N0ciAiSWdub3JlcmEgw6RuZHJpbmdhciBpIGJsYW5rc3RlZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MCBidWlsdGluL2xvZy5jOjE3MDIKK21zZ2lkICJyZXYiCittc2dzdHIgInJldiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MAorbXNnaWQgIklnbm9yZSA8cmV2PiB3aGVuIGJsYW1pbmciCittc2dzdHIgImlnbm9yZXJhIDxyZXY+IHZpZCBrbGFuZHJlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MQorbXNnaWQgIklnbm9yZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4iCittc2dzdHIgImlnbm9yZXJhIHJldmlzaW9uZXIgZnLDpW4gPGZpbD4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjIKK21zZ2lkICJjb2xvciByZWR1bmRhbnQgbWV0YWRhdGEgZnJvbSBwcmV2aW91cyBsaW5lIGRpZmZlcmVudGx5IgorbXNnc3RyICJmw6RyZ2zDpGdnIHJlZHVuZGFudCBtZXRhZGF0YSBmcsOlbiB0aWRpZ2FyZSByYWRlciBhbm5vcmx1bmRhIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYzCittc2dpZCAiY29sb3IgbGluZXMgYnkgYWdlIgorbXNnc3RyICJmw6RyZ2zDpGdnIHJhZGVyIGVmdGVyIMOlbGRlciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NAorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAiU2zDtnNhIGV4dHJhIGN5a2xlciBtZWQgYXR0IGhpdHRhIGLDpHR0cmUgdHLDpGZmIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY1Cittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICJBbnbDpG5kIHJldmlzaW9uZXIgZnLDpW4gPGZpbD4gaXN0w6RsbGV0IGbDtnIgYXR0IGFucm9wYSBnaXQtcmV2LWxpc3QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjYKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICJBbnbDpG5kIDxmaWw+cyBpbm5laMOlbGwgc29tIHNsdXRnaWx0aWcgYmlsZCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NyBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAic2NvcmUiCittc2dzdHIgInBvw6RuZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NworbXNnaWQgIkZpbmQgbGluZSBjb3BpZXMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIkhpdHRhIGtvcGllcmFkZSByYWRlciBpbnV0aSBvY2ggbWVsbGFuIGZpbGVyIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiSGl0dGEgZmx5dHRhZGUgcmFkZXIgaW51dGkgb2NoIG1lbGxhbiBmaWxlciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIm4sbSIKK21zZ3N0ciAibixtIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAiUHJvY2VzcyBvbmx5IGxpbmUgcmFuZ2UgbixtLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIkJlaGFuZGxhIGVuZGFzdCByYWRpbnRlcnZhbGxldCBuLG0sIG1lZCBiw7ZyamFuIHDDpSAxIgorCisjOiBidWlsdGluL2JsYW1lLmM6OTIxCittc2dpZCAiLS1wcm9ncmVzcyBjYW4ndCBiZSB1c2VkIHdpdGggLS1pbmNyZW1lbnRhbCBvciBwb3JjZWxhaW4gZm9ybWF0cyIKK21zZ3N0ciAiLS1wcm9ncmVzcyBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIC0taW5jcmVtZW50YWwgZWxsZXIgcG9yc2xpbnNmb3JtYXQiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlCisjLiBtYXhpbXVtIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluCisjLiAiZ2l0IGJsYW1lIiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMQorIy4gbW9udGhzIGFnbyIsIHdoaWNoIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QKKyMuIGFtb25nIHZhcmlvdXMgZm9ybXMgb2YgcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0CisjLiB5b3VyIGxhbmd1YWdlIG1heSBuZWVkIG1vcmUgb3IgZmV3ZXIgZGlzcGxheQorIy4gY29sdW1ucy4KKyMuCisjOiBidWlsdGluL2JsYW1lLmM6OTcyCittc2dpZCAiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIKK21zZ3N0ciAiNCDDpXIsIDExIG3DpW5hZGVyIHNlZGFuIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lIgorbXNnaWRfcGx1cmFsICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIKK21zZ3N0clswXSAiZmlsZW4gJXMgaGFyIGJhcmEgJWx1IHJhZCIKK21zZ3N0clsxXSAiZmlsZW4gJXMgaGFyIGJhcmEgJWx1IHJhZGVyIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTEyNQorbXNnaWQgIkJsYW1pbmcgbGluZXMiCittc2dzdHIgIktsYW5kcmEgcmFkZXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjkKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxmbGFnZ29yPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8ZmxhZ2dvcj5dIFstbF0gWy1mXSA8Z3Jlbm5hbW4+IFs8c3RhcnRwdW5rdD5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMxCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8ZmxhZ2dvcj5dIFstcl0gKC1kIHwgLUQpIDxncmVubmFtbj4uLi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzIKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzxmbGFnZ29yPl0gKC1tIHwgLU0pIFs8Z2FtbWFsX2dyZW4+XSA8bnlfZ3Jlbj4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzMKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtYyB8IC1DKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzxmbGFnZ29yPl0gKC1jIHwgLUMpIFs8Z2FtbWFsX2dyZW4+XSA8bnlfZ3Jlbj4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8ZmxhZ2dvcj5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPGZsYWdnb3I+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisidGFyIGJvcnQgZ3JlbmVuIFwiJXNcIiBzb20gaGFyIHNsYWdpdHMgaWhvcCBtZWRcbiIKKyIgICAgICAgICBcIiVzXCIsIG1lbiDDpG5udSBpbnRlIHNsYWdpdHMgaWhvcCBtZWQgSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorInRhciBpbnRlIGJvcnQgZ3JlbmVuIFwiJXNcIiBzb20gaW50ZSBoYXIgc2xhZ2l0cyBpaG9wIG1lZFxuIgorIiAgICAgICAgIFwiJXNcIiwgdHJvdHMgYXR0IGRlbiBoYXIgc2xhZ2l0cyBpaG9wIG1lZCBIRUFELiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHNsw6UgdXBwIGluY2hlY2tuaW5nc29iamVrdCBmw7ZyIFwiJXNcIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisiR3JlbmVuIFwiJXNcIiBoYXIgaW50ZSBzbGFnaXRzIHNhbW1hbiBpIHNpbiBoZWxoZXQuXG4iCisiT20gZHUgw6RyIHPDpGtlciBww6UgYXR0IGR1IHZpbGwgdGEgYm9ydCBkZW4sIGvDtnIgXCJnaXQgYnJhbmNoIC1EICVzXCIuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4OQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIk1pc3NseWNrYWRlcyB1cHBkYXRlcmEga29uZmlndXJhdGlvbnNmaWwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjIwCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICJrYW4gaW50ZSBhbmdlIC1hIG1lZCAtZCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjYKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgIkt1bmRlIGludGUgc2zDpSB1cHAgaW5jaGVja25pbmdzb2JqZWt0IGbDtnIgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSBicmFuY2ggJyVzJyBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICJLYW4gaW50ZSB0YSBib3J0IGdyZW5lbiBcIiVzXCIgc29tIMOkciB1dGNoZWNrYWQgcMOlIFwiJXNcIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgImZqw6RycnNww6VyYW5kZSBncmVuZW4gXCIlc1wiIGhpdHRhZGVzIGludGUuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJncmVuZW4gXCIlc1wiIGhpdHRhZGVzIGludGUuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkZlbCB2aWQgYm9ydHRhZ25pbmcgYXYgZmrDpHJyc3DDpXJhbmRlIGdyZW5lbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICJGZWwgdmlkIGJvcnR0YWduaW5nIGF2IGdyZW5lbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiVG9nIGJvcnQgZmrDpHJyc3DDpXJhbmRlIGdyZW5lbiAlcyAodmFyICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIlRvZyBib3J0IGdyZW5lbiAlcyAodmFyICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjkgYnVpbHRpbi90YWcuYzo2MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJrYW4gaW50ZSB0b2xrYSBmb3JtYXRzdHLDpG5nIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2MAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgImt1bmRlIGludGUgc2zDpSB1cHAgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAoJXMpIHBvaW50cyBvdXRzaWRlIG9mIHJlZnMvaGVhZHMvIgorbXNnc3RyICJIRUFEICglcykgcGVrYXIgdXRlbmbDtnIgcmVmcy9oZWFkcy8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyByZWJhc2VkIGF0ICVzIgorbXNnc3RyICJHcmVuZW4gJXMgb21iYXNlcmFzIHDDpSAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIGJpc2VjdGVkIGF0ICVzIgorbXNnc3RyICJHcmVuZW4gJXMgw6RyIGkgZW4gXCJiaXNlY3RcIiBww6UgJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTAyCittc2dpZCAiY2Fubm90IGNvcHkgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICJrdW5kZSBpbnRlIGtvcGllcmEgYWt0dWVsbCBncmVuIG7DpHIgZHUgaW50ZSBiZWZpbm5lciBkaWcgcMOlIG7DpWdvbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTA0Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIiIKKyJrdW5kZSBpbnRlIGJ5dGEgbmFtbiBww6UgYWt0dWVsbCBncmVuIG7DpHIgZHUgaW50ZSBiZWZpbm5lciBkaWcgcMOlIG7DpWdvbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYnJhbmNoIG5hbWU6ICclcyciCittc2dzdHIgIkZlbGFrdGlndCBuYW1uIHDDpSBncmVuOiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQyCittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIk1pc3NseWNrYWRlcyBieXRhIG5hbW4gcMOlIGdyZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ0Cittc2dpZCAiQnJhbmNoIGNvcHkgZmFpbGVkIgorbXNnc3RyICJNaXNzbHlja2FkZXMga29waWVyYSBncmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGEgY29weSBvZiBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIgorbXNnc3RyICJTa2FwYWRlIGtvcGlhIGF2IGZlbGFrdGlndCBuYW1uZ2l2ZW4gZ3JlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICJCeXR0ZSBib3J0IG5hbW4gcMOlIGVuIGZlbGFrdGlndCBuYW1uZ2l2ZW4gZ3JlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIkdyZW5lbiBuYW1uYnl0dCB0aWxsICVzLCBtZW4gSEVBRCBoYXIgaW50ZSB1cHBkYXRlcmF0cyEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY2Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJHcmVuZW4gbmFtbmJ5dHQsIG1lbiBtaXNzbHlja2FkZXMgdXBwZGF0ZXJhIGtvbmZpZ3VyYXRpb25zZmlsZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY4Cittc2dpZCAiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIkdyZW5lbiBrb3BpZXJhZGVzLCBtZW4gbWlzc2x5Y2thZGVzIHVwcGRhdGVyYSBrb25maWd1cmF0aW9uc2ZpbGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoXG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIHN0cmlwcGVkLlxuIgorbXNnc3RyICIiCisiUmVkaWdlcmEgYmVza3Jpdm5pbmdlbiBmw7ZyIGdyZW5lblxuIgorIiAgJXNcbiIKKyJSYWRlciBzb20gaW5sZWRzIG1lZCBcIiVjXCIgaWdub3JlcmFzLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiQWxsbcOkbm5hIGZsYWdnb3IiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIwCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgInZpc2EgaGFzaCBvY2ggw6RyZW5kZXJhZCwgYW5nZSB0dsOlIGfDpW5nZXIgZsO2ciB1cHBzdHLDtm1zZ3JlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjEKK21zZ2lkICJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIgorbXNnc3RyICJ1bmRlcnRyeWNrIGluZm9ybWF0aW9uc21lZGRlbGFuZGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJzdMOkbGwgaW4gc3DDpXJuaW5nc2zDpGdlIChzZSBnaXQtcHVsbCgxKSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI0Cittc2dpZCAiZG8gbm90IHVzZSIKK21zZ3N0ciAiYW52w6RuZCBlaiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYgYnVpbHRpbi9yZWJhc2UuYzo1MTMKK21zZ2lkICJ1cHN0cmVhbSIKK21zZ3N0ciAidXBwc3Ryw7ZtcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYKK21zZ2lkICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgIsOkbmRyYSB1cHBzdHLDtm1zaW5mb3JtYXRpb25lbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjcKK21zZ2lkICJ1bnNldCB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAidGEgYm9ydCB1cHBzdHLDtm1zaW5mb3JtYXRpb25lbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjgKK21zZ2lkICJ1c2UgY29sb3JlZCBvdXRwdXQiCittc2dzdHIgImFudsOkbmQgZsOkcmdhZCB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI5Cittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiYXJiZXRhIHDDpSBmasOkcnJzcMOlcmFuZGUgZ3JlbmFyIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMSBidWlsdGluL2JyYW5jaC5jOjYzMworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgInZpc2EgZW5kYXN0IGdyZW5hciBzb20gaW5uZWjDpWxsZXIgaW5jaGVja25pbmdlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzIgYnVpbHRpbi9icmFuY2guYzo2MzQKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJ2aXNhIGVuZGFzdCBncmVuYXIgc29tIGludGUgaW5uZWjDpWxsZXIgaW5jaGVja25pbmdlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzcKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICJTcGVjaWZpa2EgZ2l0LWJyYW5jaC3DpXRnw6RyZGVyOiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzgKK21zZ2lkICJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAidmlzYSBiw6VkZSBmasOkcnJzcMOlcmFuZGUgb2NoIGxva2FsYSBncmVuYXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQwCittc2dpZCAiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giCittc2dzdHIgInRhIGJvcnQgaGVsdCBzYW1tYW5zbGFnZW4gZ3JlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDEKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICJ0YSBib3J0IGdyZW4gKMOkdmVuIG9tIGludGUgaGVsdCBzYW1tYW5zbGFnZW4pIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MgorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJmbHl0dGEvdGEgYm9ydCBlbiBncmVuIG9jaCBkZXNzIHJlZmxvZ2ciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiZmx5dHRhL3RhIGJvcnQgZW4gZ3Jlbiwgw6R2ZW4gb20gbcOlbGV0IGZpbm5zIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NAorbXNnaWQgImNvcHkgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgImtvcGllcmEgZW4gZ3JlbiBvY2ggZGVzcyByZWZsb2dnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NQorbXNnaWQgImNvcHkgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAia29waWVyYSBlbiBncmVuLCDDpHZlbiBvbSBtw6VsZXQgZmlubnMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ2Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgImxpc3RhIG5hbW4gcMOlIGdyZW5hciIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IGN1cnJlbnQgYnJhbmNoIG5hbWUiCittc2dzdHIgInZpc2EgbmFtbiBww6UgYWt0dWVsbCBncmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0OAorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICJza2FwYSBncmVuZW5zIHJlZmxvZ2ciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUwCittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgInJlZGlnZXJhIGJlc2tyaXZuaW5nIGbDtnIgZ3JlbmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MQorbXNnaWQgImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iCittc2dzdHIgInR2aW5nYSBza2FwYW5kZSwgZmx5dHQvbmFtbsOkbmRyaW5nLCBib3J0dGFnYW5kZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTIKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAidmlzYSBlbmRhc3Qgc2FtbWFuc2xhZ25hIGdyZW5hciIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgInZpc2EgZW5kYXN0IGVqIHNhbW1hbnNsYWduYSBncmVuYXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU0Cittc2dpZCAibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJ2aXNhIGdyZW5hciBpIHNwYWx0ZXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU3IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIgYnVpbHRpbi9ub3Rlcy5jOjQxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQxOCBidWlsdGluL25vdGVzLmM6NTgxIGJ1aWx0aW4vbm90ZXMuYzo1ODQKKyM6IGJ1aWx0aW4vdGFnLmM6NDMzCittc2dpZCAib2JqZWN0IgorbXNnc3RyICJvYmpla3QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU4Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJ2aXNhIGVuZGFzdCBncmVuYXIgZsO2ciBvYmpla3RldCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NjAgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0OCBidWlsdGluL3RhZy5jOjQ0MAorbXNnaWQgInNvcnRpbmcgYW5kIGZpbHRlcmluZyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSIKK21zZ3N0ciAic29ydGVyaW5nIG9jaCBmaWx0cmVyaW5nIHNraWxqZXIgZ2VtZW5lciBvY2ggVkVSU0FMRVIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzggYnVpbHRpbi90YWcuYzo0MzgKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAiZm9ybWF0IGF0dCBhbnbDpG5kYSBmw7ZyIHV0ZGF0YSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2ODQgYnVpbHRpbi9jbG9uZS5jOjc4NQorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICJIRUFEIGhpdHRhZGVzIGludGUgdW5kZXIgcmVmcy9oZWFkcyEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzA4Cittc2dpZCAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiBvY2ggLS12ZXJib3NlIMOkciBpbmtvbXBhdGlibGEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzIzIGJ1aWx0aW4vYnJhbmNoLmM6Nzc3IGJ1aWx0aW4vYnJhbmNoLmM6Nzg2Cittc2dpZCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgImdyZW5uYW1uIGtyw6R2cyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTMKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJLYW4gaW50ZSBiZXNrcml2YSBmcsOlbmtvcHBsYWQgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTgKK21zZ2lkICJjYW5ub3QgZWRpdCBkZXNjcmlwdGlvbiBvZiBtb3JlIHRoYW4gb25lIGJyYW5jaCIKK21zZ3N0ciAia2FuIGludGUgcmVkaWdlcmEgYmVza3Jpdm5pbmcgZsO2ciBtZXIgw6RuIGVuIGdyZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIgorbXNnc3RyICJJbmdhIGluY2hlY2tuaW5nYXIgcMOlIGdyZW5lbiBcIiVzXCIgw6RubnUuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBicmFuY2ggbmFtZWQgJyVzJy4iCittc2dzdHIgIkluZ2VuIGdyZW4gdmlkIG5hbW5ldCBcIiVzXCIuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4MworbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIGNvcHkgb3BlcmF0aW9uIgorbXNnc3RyICJmw7ZyIG3DpW5nYSBncmVuYXIgZsO2ciBrb3BpZXJpbmciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzkyCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgImbDtnIgbcOlbmdhIGZsYWdnb3IgZsO2ciBuYW1uYnl0ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAiZsO2ciBtw6VuZ2EgZmxhZ2dvciBmw7ZyIGF0dCBieXRhIHVwcHN0csO2bSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisia3VuZGUgaW50ZSBzw6R0dGEgdXBwc3Ryw7ZtIGbDtnIgSEVBRCB0aWxsICVzIG7DpHIgZGV0IGludGUgcGVrYXIgbW90IG7DpWdvbiBncmVuLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDQgYnVpbHRpbi9icmFuY2guYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAib2vDpG5kIGdyZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiZ3JlbmVuIFwiJXNcIiBmaW5ucyBpbnRlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAiZsO2ciBtw6VuZ2EgZmxhZ2dvciBmw7ZyIGF0dCB0YSBib3J0IHVwcHN0csO2bSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjUKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisia3VuZGUgaW50ZSB0YSBib3J0IHVwcHN0csO2bSBmw7ZyIEhFQUQgbsOkciBkZXQgaW50ZSBwZWthciBtb3QgbsOlZ29uIGdyZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iCittc2dzdHIgIkdyZW5lbiBcIiVzXCIgaGFyIGluZ2VuIHVwcHN0csO2bXNpbmZvcm1hdGlvbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDEKK21zZ2lkICIiCisiVGhlIC1hLCBhbmQgLXIsIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCB0YWtlIGEgYnJhbmNoIG5hbWUuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHVzZTogLWF8LXIgLS1saXN0IDxwYXR0ZXJuPj8iCittc2dzdHIgIiIKKyJGbGFnZ29ybmEgLWEgb2NoIC1yIHDDpSBcImdpdCBicmFuY2hcIiB0YXIgaW50ZSBldHQgbmFtbiBww6UgZ3Jlbi5cbiIKKyJNZW5hZGUgZHUgYXR0IGFudsOkbmRhOiAtYXwtciAtLWxpc3QgPG3Dtm5zdGVyPj8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ1Cittc2dpZCAiIgorInRoZSAnLS1zZXQtdXBzdHJlYW0nIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBQbGVhc2UgdXNlICctLXRyYWNrJyBvciAiCisiJy0tc2V0LXVwc3RyZWFtLXRvJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIkZsYWdnYW4gLS1zZXQtdXBzdHJlYW0gcmVrb21tZW5kZXJhcyBlaiBvY2gga29tbWVyIHRhcyBib3J0LiBBbnbDpG5kIC0tdHJhY2sgIgorImVsbGVyIC0tc2V0LXVwc3RyZWFtLXRvIGlzdMOkbGxldC4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTUgYnVpbHRpbi9idW5kbGUuYzoyMworbXNnaWQgImdpdCBidW5kbGUgY3JlYXRlIFs8b3B0aW9ucz5dIDxmaWxlPiA8Z2l0LXJldi1saXN0IGFyZ3M+IgorbXNnc3RyICJnaXQgYnVuZGxlIGNyZWF0ZSBbPGZsYWdnb3I+XSA8ZmlsPiA8Z2l0LXJldi1saXN0LWZsYWdnb3I+IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2IGJ1aWx0aW4vYnVuZGxlLmM6MjgKK21zZ2lkICJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmlsZT4iCittc2dzdHIgImdpdCBidW5kbGUgdmVyaWZ5IFs8ZmxhZ2dvcj5dIDxmaWw+IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE3IGJ1aWx0aW4vYnVuZGxlLmM6MzMKK21zZ2lkICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbD4gWzxyZWZuYW1uPi4uLl0iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTggYnVpbHRpbi9idW5kbGUuYzozOAorbXNnaWQgImdpdCBidW5kbGUgdW5idW5kbGUgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWw+IFs8cmVmbmFtbj4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM3NQorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJ2aXNhIGludGUgZsO2cmxvcHBzaW5kaWthdG9yIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM3NworbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgInZpc2EgZsO2cmxvcHBzaW5kaWthdG9yIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM3OQorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICJ2aXNhIGbDtnJsb3Bwc2luZGlrYXRvciB1bmRlciBvYmpla3Rza3Jpdm5pbmdzZmFzZW4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzgyCittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICJzb20gLS1hbGwtcHJvZ3Jlc3MgbsOkciBmw7ZybG9wcHNpbmRpa2F0b3JuIHZpc2FzIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjkzCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAiQmVow7Z2ZXIgZXR0IGFya2l2IGbDtnIgYXR0IHNrYXBhIGV0dCBwYWtldCAoYnVuZGxlKS4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTA0Cittc2dpZCAiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiCittc2dzdHIgInZpc2EgaW50ZSBwYWtldGRldGFsamVyIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBva2F5XG4iCittc2dzdHIgIiVzIMOkciBva2VqXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICJCZWjDtnZlciBldHQgYXJraXYgZsO2ciBhdHQgcGFja2EgdXBwIGV0dCBwYWtldCAoYnVuZGxlKS4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTY4NgorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgInZhciBwcmF0c2FtOyBtw6VzdGUgc2tyaXZhcyBmw7ZyZSBldHQgdW5kZXJrb21tYW5kbyIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzoxNzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIk9rw6RudCB1bmRlcmtvbW1hbmRvOiAlcyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NQorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8dHlwZT4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxwYXRoPl0gPG9iamVjdD4iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8dHlwPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHPDtmt2w6RnPl0gPG9iamVrdD4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTYKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjE3Cittc2dpZCAib25seSBvbmUgYmF0Y2ggb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQiCittc2dzdHIgImVuZGFzdCBlbiBidW50ZmxhZ2dhIGthbiBhbmdlcyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNQorbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiPHR5cD4ga2FuIHZhcmEgZW4gYXY6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM2Cittc2dpZCAic2hvdyBvYmplY3QgdHlwZSIKK21zZ3N0ciAidmlzYSBvYmpla3R0eXAiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzcKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICJ2aXNhIG9iamVrdHN0b3JsZWsiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzkKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgImF2c2x1dGEgbWVkIG5vbGwgbsOkciBkZXQgaW50ZSB1cHBzdMOldHQgbsOlZ290IGZlbCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MAorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJ2aXNhIG9iamVrdGV0cyBpbm5laMOlbGwgc255Z2d0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQyCittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgImbDtnIgYmxvYi1vYmpla3QsIGvDtnIgZmlsdGVyIHDDpSBvYmpla3RldHMgaW5uZWjDpWxsIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ0Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIGZpbHRlcnMgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiZsO2ciBibG9iLW9iamVrdCwga8O2ciBmaWxnZXIgcMOlIG9iamVrdGV0cyBpbm5laMOlbGwiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDUgZ2l0LXN1Ym1vZHVsZS5zaDoxMDAyCittc2dpZCAiYmxvYiIKK21zZ3N0ciAiYmxvYiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NgorbXNnaWQgInVzZSBhIHNwZWNpZmljIHBhdGggZm9yIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorbXNnc3RyICJhbnbDpG5kIHNwZWNpZmlrIHPDtmt2w6RnIGbDtnIgLS10ZXh0Y29udi8tLWZpbHRlcnMiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDgKK21zZ2lkICJhbGxvdyAtcyBhbmQgLXQgdG8gd29yayB3aXRoIGJyb2tlbi9jb3JydXB0IG9iamVjdHMiCittc2dzdHIgImzDpXRlciAtcyBvY2ggLXQgYXR0IGZ1bmdlcmEgbWVkIHRyYXNpZ2Evc8O2bmRlcnNrcml2bmEgb2JqZWt0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ5Cittc2dpZCAiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IgorbXNnc3RyICJidWZmcmEgdXRkYXRhIGZyw6VuIC0tYmF0Y2giCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTEKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgInZpc2EgaW5mb3JtYXRpb24gb2NoIGlubmVow6VsbCBmw7ZyIG9iamVrdCBzb20gbGlzdGFzIHDDpSBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1NQorbXNnaWQgInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAidmlzYSBpbmZvcm1hdGlvbiBmw7ZyIG9iamVrdCBzb20gbGlzdGFzIHDDpSBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1OQorbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAiIgorImbDtmxqIHN5bWJvbGlza2EgbMOkbmthciBpIHRyw6RkZXQgKGFudsOkbmQgbWVkIC0tYmF0Y2ggZWxsZXIgLS1iYXRjaC1jaGVjaykiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjEKK21zZ2lkICJzaG93IGFsbCBvYmplY3RzIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrIgorbXNnc3RyICJ2aXNhIGFsbGEgb2JqZWt0IG1lZCAtLWJhdGNoIGVsbGVyIC0tYmF0Y2gtY2hlY2siCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjMKK21zZ2lkICJkbyBub3Qgb3JkZXIgLS1iYXRjaC1hbGwtb2JqZWN0cyBvdXRwdXQiCittc2dzdHIgIm9yZG5hIGludGUgLS1iYXRjaC1hbGwtb2JqZWN0cyBvdXRwdXQiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjEzCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHPDtmt2w6RnPi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTQKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAidmlzYSBhbGxhIGF0dHJpYnV0IHNvbSBzYXR0cyBww6UgZmlsZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIyCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgImFudsOkbmQgLmdpdGF0dHJpYnV0ZXMgZW5kYXN0IGZyw6VuIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjUgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMgorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICJsw6RzIGZpbG5hbW4gZnLDpW4gc3RhbmRhcmQgaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjI1IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjcKK21zZ2lkICJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiYXZzbHV0YSBpbi0gb2NoIHV0ZGF0YXBvc3RlciBtZWQgTlVMLXRlY2tlbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMSBidWlsdGluL2NoZWNrb3V0LmM6MTQ2NCBidWlsdGluL2djLmM6NTM3CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk5Cittc2dpZCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJ1bmRlcnRyeWNrIGbDtnJsb3Bwc3JhcHBvcnRlcmluZyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOQorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICJ2aXNhIGluZGF0YXPDtmt2w6RnYXIgc29tIGludGUgdHLDpGZmYXMiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MzEKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAiaWdub3JlcmEgaW5kZXggdmlkIGtvbnRyb2xsIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MworbXNnaWQgImNhbm5vdCBzcGVjaWZ5IHBhdGhuYW1lcyB3aXRoIC0tc3RkaW4iCittc2dzdHIgImthbiBpbnRlIGFuZ2Ugc8O2a3bDpGdzbmFtbiBtZWQgLS1zdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjYKK21zZ2lkICIteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiLXoga2FuIGVuZGFzdCBhbnbDpG5kYXMgdGlsbHNhbW1hbnMgbWVkIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY4Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgImluZ2VuIHPDtmt2w6RnIGFuZ2F2cyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzIKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAiLS1xdWlldCBrYW4gZW5kYXN0IGFudsOkbmRhcyBtZWQgZXR0IGVua2VsdCBzw7ZrdsOkZ3NuYW1uIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3NAorbXNnaWQgImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIgorbXNnc3RyICJrYW4gaW50ZSBhbnbDpG5kYSBiw6VkZSAtLXF1aWV0IG9jaCAtLXZlcmJvc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc3Cittc2dpZCAiLS1ub24tbWF0Y2hpbmcgaXMgb25seSB2YWxpZCB3aXRoIC0tdmVyYm9zZSIKK21zZ3N0ciAiLS1ub24tbWF0Y2hpbmcgw6RyIGVuZGFzdCBnaWx0aWcgbWVkIC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OQorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgWzxmbGFnZ29yPl0gPGtvbnRha3Q+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoxNAorbXNnaWQgImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICJsw6RzIMOkdmVuIGtvbnRha3RlciBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGtvbnRha3Q6ICVzIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0OAorbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAiaW5nYSBrb250YWt0ZXIgYW5nYXZzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTMxCittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBjaGVja291dC1pbmRleCBbPGZsYWdnb3I+XSBbLS1dIFs8ZmlsPi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNDgKK21zZ2lkICJzdGFnZSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzIG9yIGFsbCIKK21zZ3N0ciAiZXRhcHAgbcOlc3RlIHZhcmEgbWVsbGFuIDEgb2NoIDMgZWxsZXIgXCJhbGxcIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICJjaGVja2EgdXQgYWxsYSBmaWxlciBpIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjUKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMiCittc2dzdHIgInR2aW5nYSDDtnZlcnNrcml2bmluZyBhdiBiZWZpbnRsaWdhIGZpbGVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY3Cittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAiaW5nZW4gdmFybmluZyBmw7ZyIGV4aXN0ZXJhbmRlIGZpbGVyIG9jaCBmaWxlciBlaiBpIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjkKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgImNoZWNrYSBpbnRlIHV0IG55YSBmaWxlciIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MQorbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICJ1cHBkYXRlcmEgc3RhdC1pbmZvcm1hdGlvbiBpIGluZGV4ZmlsZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzUKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImzDpHMgbGlzdGFuIMO2dmVyIHPDtmt2w6RnYXIgZnLDpW4gc3RhbmRhcmQgaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzcKK21zZ2lkICJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiCittc2dzdHIgInNrcml2IGlubmVow6VsbCB0aWxsIHRlbXBvcsOkcmEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzggYnVpbHRpbi9jb2x1bW4uYzozMQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDMKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDExIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjcyCittc2dpZCAic3RyaW5nIgorbXNnc3RyICJzdHLDpG5nIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc5Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAibsOkciBmaWxlciBza2FwYXMsIGzDpGdnIHRpbGwgPHN0csOkbmc+IGbDtnJzdCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE4MQorbXNnaWQgImNvcHkgb3V0IHRoZSBmaWxlcyBmcm9tIG5hbWVkIHN0YWdlIgorbXNnc3RyICJrb3BpZXJhIHV0IGZpbGVyIGZyw6VuIG5hbW5naXZlbiBldGFwcCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMxCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIDxicmFuY2g+IgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxmbGFnZ29yPl0gPGdyZW4+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzIKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gWzxicmFuY2g+XSAtLSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBjaGVja291dCBbPGZsYWdnb3I+XSBbPGdyZW4+XSAtLSA8ZmlsPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3Cittc2dpZCAiZ2l0IHN3aXRjaCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIgorbXNnc3RyICJnaXQgc3dpdGNoIFs8ZmxhZ2dvcj5dIFs8Z3Jlbj5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIKK21zZ2lkICJnaXQgcmVzdG9yZSBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PGJyYW5jaD5dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc3RvcmUgWzxmbGFnZ29yPl0gWy0tc291cmNlPTxncmVuPl0gPGZpbD4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzUgYnVpbHRpbi9jaGVja291dC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAic8O2a3bDpGdlbiBcIiVzXCIgaGFyIGludGUgdsOlciB2ZXJzaW9uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAic8O2a3bDpGdlbiBcIiVzXCIgaGFyIGludGUgZGVyYXMgdmVyc2lvbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJzw7ZrdsOkZ2VuIFwiJXNcIiBpbm5laMOlbGxlciBpbnRlIGFsbGEgbsO2ZHbDpG5kaWdhIHZlcnNpb25lciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgInPDtmt2w6RnZW4gXCIlc1wiIGlubmVow6VsbGVyIGludGUgbsO2ZHbDpG5kaWdhIHZlcnNpb25lciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAic8O2a3bDpGcgXCIlc1wiOiBrYW4gaW50ZSBzbMOlIGlob3AiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgIkt1bmRlIGludGUgbMOkZ2dhIHRpbGwgc2FtbWFuc2xhZ25pbmdzcmVzdWx0YXQgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICLDhXRlcnNrYXBhZGUgJWQgc2FtbWFuc2xhZ25pbmdza29uZmxpa3QiCittc2dzdHJbMV0gIsOFdGVyc2thcGFkZSAlZCBzYW1tYW5zbGFnbmluZ3Nrb25mbGlrdGVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tICVzIgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gJXMiCittc2dzdHJbMF0gIlVwcGRhdGVyYWRlICVkIHPDtmt2w6RnIGZyw6VuICVzIgorbXNnc3RyWzFdICJVcHBkYXRlcmFkZSAlZCBzw7ZrdsOkZ2FyIGZyw6VuICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tIHRoZSBpbmRleCIKK21zZ2lkX3BsdXJhbCAiVXBkYXRlZCAlZCBwYXRocyBmcm9tIHRoZSBpbmRleCIKK21zZ3N0clswXSAiVXBwZGF0ZXJhZGUgJWQgc8O2a3bDpGcgZnLDpW4gaW5kZXhldCIKK21zZ3N0clsxXSAiVXBwZGF0ZXJhZGUgJWQgc8O2a3bDpGdhciBmcsOlbiBpbmRleGV0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDEyIGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTUgYnVpbHRpbi9jaGVja291dC5jOjQxOAorIzogYnVpbHRpbi9jaGVja291dC5jOjQyMgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiCittc2dzdHIgIlwiJXNcIiBrYW4gaW50ZSBhbnbDpG5kYXMgdmlkIHVwcGRhdGVyaW5nIGF2IHPDtmt2w6RnYXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjUgYnVpbHRpbi9jaGVja291dC5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIlwiJXNcIiBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAiS2FuIGludGUgdXBwZGF0ZXJhIHPDtmt2w6RnYXIgb2NoIHbDpHhsYSB0aWxsIGdyZW5lbiBcIiVzXCIgc2FtdGlkaWd0LiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZWl0aGVyICclcycgb3IgJyVzJyBpcyBzcGVjaWZpZWQiCittc2dzdHIgInZhcmtlbiBcIiVzXCIgZWxsZXIgXCIlc1wiIGhhciBhbmdpdml0cyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgdXNlZCB3aGVuICclcycgaXMgbm90IHNwZWNpZmllZCIKK21zZ3N0ciAiXCIlc1wiIG3DpXN0ZSBhbnbDpG5kYXMgbsOkciBcIiVzXCIgaW50ZSBhbmdlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0NSBidWlsdGluL2NoZWNrb3V0LmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgb3IgJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICJcIiVzXCIgZWxsZXIgXCIlc1wiIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MDkgYnVpbHRpbi9jaGVja291dC5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgaXMgdW5tZXJnZWQiCittc2dzdHIgInPDtmt2w6RnZW4gXCIlc1wiIGhhciBpbnRlIHNsYWdpdHMgaWhvcCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY4NCBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjEwNgorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICJkdSBtw6VzdGUgbMO2c2EgZGl0dCBiZWZpbnRsaWdhIGluZGV4IGbDtnJzdCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IGNvbnRpbnVlIHdpdGggc3RhZ2VkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyBmaWxlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorImthbiBpbnRlIGZvcnRzw6R0dGEgbWVkIGvDtmFkZSDDpG5kcmluZ2FyIGkgZsO2bGphbmRlIGZpbGVyOlxuIgorIiVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICJLYW4gaW50ZSBza2FwYSByZWZlcmVuc2xvZ2cgZsO2ciBcIiVzXCI6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NzkKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCDDpHIgbnUgcMOlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODgzIGJ1aWx0aW4vY2xvbmUuYzo3MTcKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIEhFQUQiCittc2dzdHIgImthbiBpbnRlIHVwcGRhdGVyYSBIRUFEIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIsOFdGVyc3TDpGxsIGdyZW4gXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSBvbiAnJXMnXG4iCittc2dzdHIgIlJlZGFuIHDDpSBcIiVzXCJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiVsOkeGxhZGUgdGlsbCBvY2ggbm9sbHN0w6RsbGRlIGdyZW5lbiBcIiVzXCJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NiBidWlsdGluL2NoZWNrb3V0LmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJWw6R4bGFkZSB0aWxsIGVuIG55IGdyZW4gXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiVsOkeGxhZGUgdGlsbCBncmVuZW4gXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIC4uLiBhbmQgJWQgbW9yZS5cbiIKK21zZ3N0ciAiIC4uLiBvY2ggJWQgdGlsbC5cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorIlZhcm5pbmc6IGR1IGzDpG1uYXIgJWQgaW5jaGVja25pbmcgYmFrb20gZGlnIHNvbSBpbnRlIMOkciBhbnNsdXRlbiB0aWxsXG4iCisibsOlZ29uIGF2IGRpbmEgZ3JlbmFyOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMV0gIiIKKyJWYXJuaW5nOiBkdSBsw6RtbmFyICVkIGluY2hlY2tuaW5nYXIgYmFrb20gZGlnIHNvbSBpbnRlIMOkciBhbnNsdXRhIHRpbGxcbiIKKyJuw6Vnb24gYXYgZGluYSBncmVuYXI6XG4iCisiXG4iCisiJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCBpdCBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnaWRfcGx1cmFsICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCB0aGVtIGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dzdHJbMF0gIiIKKyJPbSBkdSB2aWxsIGJlaMOlbGxhIGRlbiBnZW5vbSBhdHQgc2thcGEgZW4gbnkgZ3JlbiDDpHIgbnUgZW4gYnJhIHRpZHB1bmt0XG4iCisiYXR0IGfDtnJhIHPDpSwgbWVkOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxueXR0X2dyZW5uYW1uPiAlc1xuIgorIlxuIgorbXNnc3RyWzFdICIiCisiT20gZHUgdmlsbCBiZWjDpWxsYSBkZW0gZ2Vub20gYXR0IHNrYXBhIGVuIG55IGdyZW4gw6RyIG51IGVuIGJyYSB0aWRwdW5rdFxuIgorImF0dCBnw7ZyYSBzw6UsIG1lZDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bnl0dF9ncmVubmFtbj4gJXNcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDkKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICJpbnRlcm50IGZlbCB2aWQgZ2Vub21nw6VuZyBhdiByZXZpc2lvbmVyIChyZXZpc2lvbiB3YWxrKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTMKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAiVGlkaWdhcmUgcG9zaXRpb24gZsO2ciBIRUFEIHZhciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTMgYnVpbHRpbi9jaGVja291dC5jOjEzMTUKK21zZ2lkICJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJEdSDDpHIgcMOlIGVuIGdyZW4gc29tIMOkbm51IGludGUgw6RyIGbDtmRkIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBjb3VsZCBiZSBib3RoIGEgbG9jYWwgZmlsZSBhbmQgYSB0cmFja2luZyBicmFuY2guXG4iCisiUGxlYXNlIHVzZSAtLSAoYW5kIG9wdGlvbmFsbHkgLS1uby1ndWVzcykgdG8gZGlzYW1iaWd1YXRlIgorbXNnc3RyICIiCisiXCIlc1wiIGthbiB2YXJhIGLDpWRlIGVuIGxva2FsIGZpbCBvY2ggZW4gc3DDpXJhbmRlIGdyZW4uXG4iCisiQW52w6RuZCAtLSAob2NoIG3DtmpsaWdlbiAtLW5vLWd1ZXNzKSBmw7ZyIGF0dCBnw7ZyYSBvdHZldHlkaWciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM1Cittc2dpZCAiIgorIklmIHlvdSBtZWFudCB0byBjaGVjayBvdXQgYSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIG9uLCBlLmcuICdvcmlnaW4nLFxuIgorInlvdSBjYW4gZG8gc28gYnkgZnVsbHkgcXVhbGlmeWluZyB0aGUgbmFtZSB3aXRoIHRoZSAtLXRyYWNrIG9wdGlvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luLzxuYW1lPlxuIgorIlxuIgorIklmIHlvdSdkIGxpa2UgdG8gYWx3YXlzIGhhdmUgY2hlY2tvdXRzIG9mIGFuIGFtYmlndW91cyA8bmFtZT4gcHJlZmVyXG4iCisib25lIHJlbW90ZSwgZS5nLiB0aGUgJ29yaWdpbicgcmVtb3RlLCBjb25zaWRlciBzZXR0aW5nXG4iCisiY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW4gaW4geW91ciBjb25maWcuIgorbXNnc3RyICIiCisiT20gZHUgbWVuYWRlIGNoZWNrYSB1dCBlbiBzcMOlcmFkIGZqw6RycmdyZW4gcMOlIHQuZXggXCJvcmlnaW5cIiwga2FuIGR1XG4iCisiZ8O2cmEgZGV0IGdlbm9tIGF0dCBhbmdlIGhlbGEgbmFtbmV0IG1lZCBmbGFnZ2FuIC0tdHJhY2s6XG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtbj5cbiIKKyJcbiIKKyJPbSBkdSBhbGx0aWQgdmlsbCBhdHQgdXRjaGVja25pbmdhciBtZWQgdHZldHlkaWdhIDxuYW1uPiBza2FcbiIKKyJmw7ZyZWRyYSBlbiBmasOkcnIsIHQuZXggZmrDpHJyZW4gXCJvcmlnaW5cIiBrYW4gZHUgc3TDpGxsYSBpblxuIgorImNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIGkgZGluIGtvbmZpZ3VyYXRpb24uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG1hdGNoZWQgbXVsdGlwbGUgKCVkKSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIlwiJXNcIiBtb3RzdmFyYXIgZmxlcmEgKCVkKSBzcMOlcmFkZSBmasOkcnJncmVuYXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjExCittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkIgorbXNnc3RyICJlbmRhc3QgZW4gcmVmZXJlbnMgZsO2cnbDpG50YWRlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iCittc2dzdHIgImVuZGFzdCBlbiByZWZlcmVucyBmw7ZydsOkbnRhZGVzLCAlZCBnYXZzLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNzQgYnVpbHRpbi93b3JrdHJlZS5jOjI4MyBidWlsdGluL3dvcmt0cmVlLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiZmVsYWt0aWcgcmVmZXJlbnM6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI4NyBidWlsdGluL2NoZWNrb3V0LmM6MTY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiCittc2dzdHIgInJlZmVyZW5zZW4gw6RyIGludGUgZXR0IHRyw6RkOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCB0YWcgJyVzJyIKK21zZ3N0ciAiZsO2cnbDpG50YWRlIGdyZW4sIGZpY2sgdGFnZ2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCByZW1vdGUgYnJhbmNoICclcyciCittc2dzdHIgImbDtnJ2w6RudGFkZSBncmVuLCBmaWNrIGZqw6RycmdyZW5lbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgJyVzJyIKK21zZ3N0ciAiZsO2cnbDpG50YWRlIGdyZW4sIGZpY2sgXCIlc1wiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IGNvbW1pdCAnJXMnIgorbXNnc3RyICJmw7ZydsOkbnRhZGUgZ3JlbiwgZmljayBpbmNoZWNrbmluZ2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNTYKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgbWVyZ2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IG1lcmdlIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorImthbiBpbnRlIHbDpHhsYSBncmVuIHZpZCBzYW1tYW5zbGFnbmluZ1xuIgorIsOWdmVydsOkZyBcImdpdCBtZXJnZSAtLXF1aXRcIiBlbGxlciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzYwCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvblxuIgorIkNvbnNpZGVyIFwiZ2l0IGFtIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorImthbiBpbnRlIHbDpHhsYSBncmVuIG1pdHQgaSBlbiBcImFtXCIta8O2cm5pbmdcbiIKKyLDlnZlcnbDpGcgXCJnaXQgYW0gLS1xdWl0XCIgZWxsZXIgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2NAorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSByZWJhc2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJlYmFzZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJrYW4gaW50ZSB2w6R4bGEgZ3JlbiB2aWQgb21iYXNlcmluZ1xuIgorIsOWdmVydsOkZyBcImdpdCByZWJhc2UgLS1xdWl0XCIgZWxsZXIgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2OAorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSBjaGVycnktcGlja2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorImthbiBpbnRlIHbDpHhsYSBncmVuIGkgZW4gXCJjaGVycnktcGlja1wiXG4iCisiw5Z2ZXJ2w6RnIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIGVsbGVyIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzIKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmV2ZXJ0aW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgcmV2ZXJ0IC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorImthbiBpbnRlIHbDpHhsYSBncmVuIGkgZW4gXCJyZXZlcnRcIlxuIgorIsOWdmVydsOkZyBcImdpdCByZXZlcnQgLS1xdWl0XCIgZWxsZXIgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM3NgorbXNnaWQgInlvdSBhcmUgc3dpdGNoaW5nIGJyYW5jaCB3aGlsZSBiaXNlY3RpbmciCittc2dzdHIgImTDpSB2w6R4bGFyIGdyZW5hciBtZWRhbiBkdSBnw7ZyIGVuIFwiYmlzZWN0XCIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgzCittc2dpZCAicGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgInPDtmt2w6RnYXIga2FuIGludGUgYW52w6RuZGFzIHZpZCBieXRlIGF2IGdyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzg2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzkwIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIlwiJXNcIiBrYW4gaW50ZSBhbnbDpG5kYXMgdmlkIGJ5dGUgYXYgZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzOTggYnVpbHRpbi9jaGVja291dC5jOjE0MDEgYnVpbHRpbi9jaGVja291dC5jOjE0MDQKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDA5IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIgorbXNnc3RyICJcIiVzXCIga2FuIGludGUgYW52w6RuZGFzIG1lZCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IHRha2UgPHN0YXJ0LXBvaW50PiIKK21zZ3N0ciAiXCIlc1wiIGthbiBpbnRlIHRhIDxzdGFydHB1bmt0PiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0ICclcyciCittc2dzdHIgIkthbiBpbnRlIHbDpHhsYSBncmVuIHRpbGwgaWNrZS1pbmNoZWNrbmluZ2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MjYKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBvciBjb21taXQgYXJndW1lbnQiCittc2dzdHIgInNha25hciBncmVuLSBlbGxlciBpbmNoZWNraW5nc2FyZ3VtZW50IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ2OCBidWlsdGluL2Nsb25lLmM6OTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzo3MgorIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzUgYnVpbHRpbi9mZXRjaC5jOjE2NyBidWlsdGluL21lcmdlLmM6Mjg2CisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNyBidWlsdGluL3B1bGwuYzoxMTggYnVpbHRpbi9wdXNoLmM6NTYzCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NAorbXNnaWQgImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAidHZpbmdhIGbDtnJsb3Bwc3JhcHBvcnRlcmluZyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjkKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAidXRmw7ZyIGVuIDMtdsOkZ3NzYW1tYW5zbGFnbmluZyBmw7ZyIGRlbiBueWEgZ3JlbmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ3MCBidWlsdGluL2xvZy5jOjE2OTAgcGFyc2Utb3B0aW9ucy5oOjMyMgorbXNnaWQgInN0eWxlIgorbXNnc3RyICJzdGlsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ3MQorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgImtvbmZsaWt0c3RpbCAobWVyZ2UgZWxsZXIgZGlmZjMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MyBidWlsdGluL3dvcmt0cmVlLmM6NDk2Cittc2dpZCAiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICJrb3BwbGEgZnLDpW4gSEVBRCB2aWQgbmFtbmdpdmVuIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4NAorbXNnaWQgInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICJzw6R0dCB1cHBzdHLDtm1zaW5mb3JtYXRpb24gZsO2ciBueSBncmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4NgorbXNnaWQgImZvcmNlIGNoZWNrb3V0ICh0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMpIgorbXNnc3RyICJ0dmluZ2EgdXRjaGVja25pbmcgKGthc3RhIGJvcnQgbG9rYWxhIMOkbmRyaW5nYXIpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4OAorbXNnaWQgIm5ldy1icmFuY2giCittc2dzdHIgIm55LWdyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg4Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICJueSBncmVuIHV0YW4gZsO2csOkbGRlciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0OTAgYnVpbHRpbi9tZXJnZS5jOjI4OQorbXNnaWQgInVwZGF0ZSBpZ25vcmVkIGZpbGVzIChkZWZhdWx0KSIKK21zZ3N0ciAidXBwZGF0ZXJhIGlnbm9yZXJhZGUgZmlsZXIgKHN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0OTMKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgIiIKKyJrb250cm9sbGVyYSBpbnRlIG9tIGVuIGFubmFuIGFyYmV0c2thdGFsb2cgaMOlbGxlciBkZW4gYW5naXZuYSByZWZlcmVuc2VuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUwNgorbXNnaWQgImNoZWNrb3V0IG91ciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiY2hlY2thIHV0IHbDpXIgdmVyc2lvbiBmw7ZyIGVqIHNhbW1hbnNsYWduYSBmaWxlciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MDkKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiY2hlY2thIHV0IGRlcmFzIHZlcnNpb24gZsO2ciBlaiBzYW1tYW5zbGFnbmEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTEzCittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICJiZWdyw6Ruc2EgaW50ZSBzw7ZrdsOkZ2FyIHRpbGwgZW5kYXN0IGdsZXNhIHBvc3RlciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NjUKK21zZ2lkICItYiwgLUIgYW5kIC0tb3JwaGFuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1iLCAtQiBvY2ggLS1vcnBoYW4gw6RyIMO2bXNlc2lkaWd0IHV0ZXNsdXRhbmRlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU2OAorbXNnaWQgIi1wIGFuZCAtLW92ZXJsYXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLXAgb2NoIC0tb3ZlcmxheSDDpHIgw7Ztc2VzaWRpZ3QgdXRlc2x1dGFuZGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjA1Cittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICItLXRyYWNrIGJlaMO2dmVyIGV0dCBuYW1uIHDDpSBlbiBncmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYxMAorbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAiZ3Jlbm5hbW4gc2FrbmFzOyBmw7Zyc8O2ayBtZWQgLWIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHVwcGzDtnNhICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY1OAorbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICJmZWxha3RpZyBzw7ZrdsOkZ3NhbmdpdmVsc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIiIKKyJcIiVzXCIgw6RyIGludGUgZW4gaW5jaGVja25pbmcgb2NoIGdyZW5lbiBcIiVzXCIga2FuIGludGUgc2thcGFzIGZyw6VuIGRlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIHRhciBpbnRlIGVuIHPDtmt2w6RnIHNvbSBhcmd1bWVudCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjc4Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1kZXRhY2giCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIMOkciBpbmtvbXBhdGliZWx0IG1lZCAtLWRldGFjaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2ODEgYnVpbHRpbi9yZXNldC5jOjMyNCBidWlsdGluL3N0YXNoLmM6MTUwNgorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIMOkciBpbmtvbXBhdGliZWx0IG1lZCAtLXBhdGNoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY5MgorbXNnaWQgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIG9jaCAtLW1lcmdlIMOkciBpbmtvbXBhdGlibGEgbsOkclxuIgorImR1IGNoZWNrYXIgdXQgZnLDpW4gaW5kZXhldC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjk3Cittc2dpZCAieW91IG11c3Qgc3BlY2lmeSBwYXRoKHMpIHRvIHJlc3RvcmUiCittc2dzdHIgImR1IG3DpXN0ZSBhbmdlIGthdGFsb2coZXIpIGF0dCDDpXRlcnN0w6RsbGEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI1IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3NiBidWlsdGluL2Nsb25lLmM6MTIxIGJ1aWx0aW4vcmVtb3RlLmM6MTcwCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MiBidWlsdGluL3dvcmt0cmVlLmM6NDkyIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTQKK21zZ2lkICJicmFuY2giCittc2dzdHIgImdyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI0Cittc2dpZCAiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giCittc2dzdHIgInNrYXBhIG9jaCBjaGVja2EgdXQgZW4gbnkgZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjYKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIGNoZWNrb3V0IGEgYnJhbmNoIgorbXNnc3RyICJza2FwYS9ub2xsc3TDpGxsIG9jaCBjaGVja2EgdXQgZW4gZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjcKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICJza2FwYSByZWZsb2dnIGbDtnIgbnkgZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjkKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBjaGVja291dCA8bm8tc3VjaC1icmFuY2g+JyAoZGVmYXVsdCkiCittc2dzdHIgImbDtnJ1dHNww6UgXCJnaXQgY2hlY2tvdXQgPGdyZW4tc2FrbmFzPlwiIChmw7ZydmFsKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MzAKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIChkZWZhdWx0KSIKK21zZ3N0ciAiYW52w6RuZCDDtnZlcmzDpGdnc2zDpGdlIChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc1Cittc2dpZCAiY3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoIgorbXNnc3RyICJza2FwYSBvY2ggdsOkeGxhIHRpbGwgZW4gbnkgZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzcKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIHN3aXRjaCB0byBhIGJyYW5jaCIKK21zZ3N0ciAic2thcGEvbm9sbHN0w6RsbCBvY2ggdsOkeGxhIHRpbGwgZW4gZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzkKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBzd2l0Y2ggPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgImbDtnJ1dHNww6UgXCJnaXQgY2hlY2tvdXQgPGdyZW4tc2FrbmFzPlwiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc4MQorbXNnaWQgInRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAia2FzdGEgYm9ydCBsb2thbGEgw6RuZHJpbmdhciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTMKK21zZ2lkICJ3aGljaCB0cmVlLWlzaCB0byBjaGVja291dCBmcm9tIgorbXNnc3RyICJ2aWxrZW4gdHLDpGQtaWd0IGF0dCBjaGVja2EgdXQgZnLDpW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODE1Cittc2dpZCAicmVzdG9yZSB0aGUgaW5kZXgiCittc2dzdHIgIsOldGVyc3TDpGxsIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODE3Cittc2dpZCAicmVzdG9yZSB0aGUgd29ya2luZyB0cmVlIChkZWZhdWx0KSIKK21zZ3N0ciAiw6V0ZXJzdMOkbGwgYXJiZXRza2F0YWxvZ2VuIChmw7ZydmFsKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTkKK21zZ2lkICJpZ25vcmUgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiaWdub3JlcmEgZWogc2FtbWFuc2xhZ25hIHBvc3RlciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MjAKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIgorbXNnc3RyICJhbnbDpG5kIMO2dmVybMOkZ2dzbMOkZ2UiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOAorbXNnaWQgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8bcO2bnN0ZXI+XSBbLXggfCAtWF0gWy0tXSAiCisiPHPDtmt2w6RnYXI+Li4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiVGFyIGJvcnQgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICJTa3VsbGUgdGEgYm9ydCAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJIb3BwYXIgw7Z2ZXIgYXJraXZldCAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIlNrdWxsZSBob3BwYSDDtnZlciBhcmtpdmV0ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgYm9ydCAlcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsc3RhdCAlc1xuIgorbXNnc3RyICJrdW5kZSBpbnRlIHRhIHN0YXR1cyAoXCJsc3RhdFwiKSBww6UgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nXG4iCittc2dzdHIgIiIKKyJLb21tYW5kb2hqw6RscDpcbiIKKyIxICAgICAgICAgIC0gbWFya2VyYSBlbiBudW1yZXJhZCBwb3N0XG4iCisiZm9vICAgICAgICAtIG1hcmtlcmEgcG9zdCBiYXNlcmFkIHDDpSB1bmlrdCBwcmVmaXhcbiIKKyIgICAgICAgICAgIC0gKHRvbXQpIG1hcmtlcmEgaW5nZW50aW5nXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbVxuIgorIjMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtc1xuIgorIjItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyItLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zXG4iCisiKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXNcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nXG4iCittc2dzdHIgIiIKKyJLb21tYW5kb2hqw6RscDpcbiIKKyIxICAgICAgICAgIC0gbWFya2VyYSBlbiBlbnNhbSBwb3N0XG4iCisiMy01ICAgICAgICAtIG1hcmtlcmEgZXR0IGludGVydmFsbCBtZWQgcG9zdGVyXG4iCisiMi0zLDYtOSAgICAtIG1hcmtlcmEgZmxlcmEgaW50ZXJ2YWxsXG4iCisiZm9vICAgICAgICAtIG1hcmtlcmEgcG9zdCBiYXNlcmFkIHDDpSB1bmlrdCBwcmVmaXhcbiIKKyItLi4uICAgICAgIC0gYXZtYXJrZXJhIHNwZWNpZmlrYSBwb3N0ZXJcbiIKKyIqICAgICAgICAgIC0gdsOkbGogYWxsYSBwb3N0ZXJcbiIKKyIgICAgICAgICAgIC0gKHRvbXQpIGF2c2x1dGEgbWFya2VyaW5nXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTc1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT9cbiIKK21zZ3N0ciAiVmFkw6UgKCVzKT9cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnB1dCBpZ25vcmUgcGF0dGVybnM+PiAiCittc2dzdHIgIkFuZ2UgaWdub3JlcmluZ3Ntw7Zuc3Rlcj4+IgorCisjOiBidWlsdGluL2NsZWFuLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICJWQVJOSU5HOiBIaXR0YXIgaW50ZSBwb3N0ZXIgc29tIG1vdHN2YXJhcjogJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MjEKK21zZ2lkICJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlIgorbXNnc3RyICJWw6RsaiBwb3N0ZXIgYXR0IHRhIGJvcnQiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiVGEgYm9ydCAlcyBbWT1qYSAvIE49bmVqXT8gIgorCisjOiBidWlsdGluL2NsZWFuLmM6Nzk1Cittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gYsO2cmphIHN0w6RkYVxuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSB1dGVzbHV0IHBvc3RlciBmcsOlbiBib3J0dGFnbmluZ1xuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBtYXJrZXJhIHBvc3RlciBzb20gc2thIHRhcyBib3J0IG1lZCBzaWZmcm9yXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGJla3LDpGZ0YSB2YXJqZSBib3J0dGFnbmluZyAoc29tIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gc2x1dGEgc3TDpGRhXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIGRlbm5hIHNrw6RybVxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBoasOkbHAgZsO2ciBrb21tYW5kb3ZhbCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzMQorbXNnaWQgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IgorbXNnaWRfcGx1cmFsICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiCittc2dzdHJbMF0gIlNrdWxsZSB0YSBib3J0IGbDtmxqYW5kZSBwb3N0OiIKK21zZ3N0clsxXSAiU2t1bGxlIHRhIGJvcnQgZsO2bGphbmRlIHBvc3RlcjoiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDcKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAiSW5nYSBmbGVyIGZpbGVyIGF0dCBzdMOkZGEsIGF2c2x1dGFyLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwOQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICJza3JpdiBpbnRlIHV0IG5hbW4gcMOlIGJvcnR0YWduYSBmaWxlciIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMQorbXNnaWQgImZvcmNlIgorbXNnc3RyICJ0dmluZ2EiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTIKK21zZ2lkICJpbnRlcmFjdGl2ZSBjbGVhbmluZyIKK21zZ3N0ciAic3TDpGRhIGludGVyYWt0aXZ0IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE0Cittc2dpZCAicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIgorbXNnc3RyICJ0YSBib3J0IGhlbGEga2F0YWxvZ2VyIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjIgYnVpbHRpbi9kZXNjcmliZS5jOjU2NAorIzogYnVpbHRpbi9ncmVwLmM6ODg5IGJ1aWx0aW4vbG9nLmM6MTc3IGJ1aWx0aW4vbG9nLmM6MTc5CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjYgYnVpbHRpbi9uYW1lLXJldi5jOjUyOAorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgIm3Dtm5zdGVyIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE2Cittc2dpZCAiYWRkIDxwYXR0ZXJuPiB0byBpZ25vcmUgcnVsZXMiCittc2dzdHIgImzDpGdnIHRpbGwgPG3Dtm5zdGVyPiB0aWxsIGlnbm9yZXJpbmdzcmVnbGVyIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE3Cittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAidGEgw6R2ZW4gYm9ydCBpZ25vcmVyYWRlIGZpbGVyIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE5Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAidGEgZW5kYXN0IGJvcnQgaWdub3JlcmFkZSBmaWxlciIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkzNworbXNnaWQgIi14IGFuZCAtWCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLXggb2NoIC1YIGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDEKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2F0dCB0aWxsIHRydWUsIG1lbiB2YXJrZW4gLWksIC1uIGVsbGVyIC1mIGFuZ2F2czsgdsOkZ3JhciAiCisic3TDpGRhIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTQ0Cittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0cyB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyAiCisicmVmdXNpbmcgdG8gY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgaGFyIHN0YW5kYXJkdsOkcmRldCB0cnVlIG9jaCB2YXJrZW4gLWksIC1uIGVsbGVyIC1mICIKKyJhbmdhdnM7IHbDpGdyYXIgc3TDpGRhIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDUKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs8ZmxhZ2dvcj5dIFstLV0gPGFya2l2PiBbPGthdD5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAic2thcGEgaW50ZSBuw6Vnb24gdXRjaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NCBidWlsdGluL2Nsb25lLmM6OTYgYnVpbHRpbi9pbml0LWRiLmM6NDg5Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJza2FwYSBldHQgbmFrZXQgKFwiYmFyZVwiKSBhcmtpdiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgInNrYXBhIGV0dCBzcGVnZWxhcmtpdiAoaW1wbGljZXJhciBcImJhcmVcIikiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDAKK21zZ2lkICJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiZsO2ciBhdHQga2xvbmEgZnLDpW4gZXR0IGxva2FsdCBhcmtpdiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMgorbXNnaWQgImRvbid0IHVzZSBsb2NhbCBoYXJkbGlua3MsIGFsd2F5cyBjb3B5IgorbXNnc3RyICJza2FwYSBpbnRlIGxva2FsYSBow6VyZGEgbMOkbmthciwga29waWVyYSBhbGx0aWQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAic2thcGEgc29tIGV0dCBkZWxhdCBhcmtpdiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgInBhdGhzcGVjIgorbXNnc3RyICJzw7ZrdsOkZ3NhbmdpdmVsc2UiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICJpbml0aWVyYSB1bmRlcm1vZHVsZXIgaSBrbG9uZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgImFudGFsIHVuZGVybW9kdWxlciBzb20ga2xvbmFzIHBhcmFsbGVsbHQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTEgYnVpbHRpbi9pbml0LWRiLmM6NDg2Cittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICJtYWxsa2F0YWxvZyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMiBidWlsdGluL2luaXQtZGIuYzo0ODcKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICJrYXRhbG9nIGF0dCBhbnbDpG5kYSBtYWxsYXIgZnLDpW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTQgYnVpbHRpbi9jbG9uZS5jOjExNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTIKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSIKK21zZ3N0ciAicmVmZXJlbnNhcmtpdiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTQKK21zZ2lkICJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIgorbXNnc3RyICJhbnbDpG5kIC0tcmVmZXJlbmNlIGVuZGFzdCB1bmRlciBrbG9uaW5nZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTkgYnVpbHRpbi9jb2x1bW4uYzoyNyBidWlsdGluL21lcmdlLWZpbGUuYzo0NgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQxIGJ1aWx0aW4vcmVwYWNrLmM6MzI3Cittc2dpZCAibmFtZSIKK21zZ3N0ciAibmFtbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMAorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAiYW52w6RuZCA8bmFtbj4gaXN0w6RsbGV0IGbDtnIgXCJvcmlnaW5cIiBmw7ZyIGF0dCBzcMOlcmEgdXBwc3Ryw7ZtcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMgorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgImNoZWNrYSB1dCA8Z3Jlbj4gaXN0w6RsbGV0IGbDtnIgZmrDpHJyZW5zIEhFQUQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQKK21zZ2lkICJwYXRoIHRvIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIgorbXNnc3RyICJzw7ZrdsOkZyB0aWxsIGdpdC11cGxvYWQtcGFjayBww6UgZmrDpHJyZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjUgYnVpbHRpbi9mZXRjaC5jOjE2OCBidWlsdGluL2dyZXAuYzo4MjgKKyM6IGJ1aWx0aW4vcHVsbC5jOjIwNworbXNnaWQgImRlcHRoIgorbXNnc3RyICJkanVwIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI2Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICJza2FwYSBlbiBncnVuZCBrbG9uIHDDpSBkZXR0YSBkanVwIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI3IGJ1aWx0aW4vZmV0Y2guYzoxNzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDMwCittc2dpZCAidGltZSIKK21zZ3N0ciAidGlkIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgInNrYXBhIGVuIGdydW5kIGtsb24gZnLDpW4gZW4gYW5naXZlbiB0aWRwdW5rdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOSBidWlsdGluL2ZldGNoLmM6MTcyIGJ1aWx0aW4vZmV0Y2guYzoxOTUKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MAorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICJyZXZpc2lvbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMCBidWlsdGluL2ZldGNoLmM6MTczCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSwgZXhjbHVkaW5nIHJldiIKK21zZ3N0ciAiZsO2cmRqdXBhIGhpc3RvcmlrIGbDtnIgZ3J1bmQga2xvbiwgZXhrbHVkZXJhIHJldmlzaW9uZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTI4Cittc2dpZCAiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIgorbXNnc3RyICJrbG9uYSBlbmRhc3QgZW4gZ3JlbiwgSEVBRCBlbGxlciAtLWJyYW5jaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNAorbXNnaWQgImRvbid0IGNsb25lIGFueSB0YWdzLCBhbmQgbWFrZSBsYXRlciBmZXRjaGVzIG5vdCB0byBmb2xsb3cgdGhlbSIKK21zZ3N0ciAia2xvbmEgaW5nYSB0YWdnYXIgb2NoIGfDtnIgYXR0IHNlbmFyZSBow6RtdG5pbmdhciBpbnRlIGbDtmxqZXIgZGVtIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM2Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgYmUgc2hhbGxvdyIKK21zZ3N0ciAia2xvbmFkZSB1bmRlcm1vZHVsZXIga29tbWVyIHZhcmEgZ3J1bmRhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiZ2l0a2F0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM4IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NgorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgInNlcGFyZXJhIGdpdGthdGFsb2dlbiBmcsOlbiBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzkKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgIm55Y2tlbD12w6RyZGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDAKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgInN0w6RsbCBpbiBrb25maWd1cmF0aW9uIGkgZGV0IG55YSBhcmtpdmV0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQyIGJ1aWx0aW4vZmV0Y2guYzoxOTAgYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorIzogYnVpbHRpbi9wdXNoLmM6NTczIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTcyCittc2dpZCAic2VydmVyLXNwZWNpZmljIgorbXNnc3RyICJzZXJ2ZXJzcGVjaWZpayIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgIm9wdGlvbiB0byB0cmFuc21pdCIKK21zZ3N0ciAiIgorImluZ2V0IGF0dCBjaGVja2EgaW5cbiIKKyJmbGFnZ2EgYXR0IHPDpG5kYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MyBidWlsdGluL2ZldGNoLmM6MTkxIGJ1aWx0aW4vcHVsbC5jOjIyMAorIzogYnVpbHRpbi9wdXNoLmM6NTc0Cittc2dpZCAidXNlIElQdjQgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgImFudsOkbmQgZW5kYXN0IElQdjQtYWRyZXNzZXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDUgYnVpbHRpbi9mZXRjaC5jOjE5MyBidWlsdGluL3B1bGwuYzoyMjMKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3NgorbXNnaWQgInVzZSBJUHY2IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICJhbnbDpG5kIGVuZGFzdCBJUHY2LWFkcmVzc2VyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ5Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgdXNlIHRoZWlyIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgImtsb25hZGUgdW5kZXJtb2R1bGVyIGtvbW1lciBhbnbDpG5kYSBzaW4gZmrDpHJyc3DDpXJuaW5nc2dyZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNTEKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCBmaWxlIHRvIGluY2x1ZGUgb25seSBmaWxlcyBhdCByb290IgorbXNnc3RyICJpbml0aWVyYSBzcGFyc2UtY2hlY2tvdXQtZmlsZW4gdGlsbCBhdHQgYmFyYSBpbmtsdWRlcmEgZmlsZXIgaSByb3RlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI4NworbXNnaWQgIiIKKyJObyBkaXJlY3RvcnkgbmFtZSBjb3VsZCBiZSBndWVzc2VkLlxuIgorIlBsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKyJLdW5kZSBpbnRlIGdpc3NhIGthdGFsb2duYW1uLlxuIgorIkFuZ2UgZW4ga2F0YWxvZyBww6Uga29tbWFuZG9yYWRlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZvOiBDb3VsZCBub3QgYWRkIGFsdGVybmF0ZSBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiaW5mbzogS2FuIGludGUgc2thcGEgc3VwcGxlYW50IGbDtnIgXCIlc1wiOiAlc1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIlcyBmaW5ucyBvY2ggw6RyIGluZ2VuIGthdGFsb2ciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXJ0IGl0ZXJhdG9yIG92ZXIgJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHN0YXJ0YSBpdGVyYXRvciDDtnZlciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBsw6Rua2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBrb3BpZXJhIGZpbGVuIHRpbGwgXCIlc1wiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBpdGVyYXRlIG92ZXIgJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGl0ZXJlcmEgw7Z2ZXIgXCIlc1wiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgImtsYXJ0LlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTA4Cittc2dpZCAiIgorIkNsb25lIHN1Y2NlZWRlZCwgYnV0IGNoZWNrb3V0IGZhaWxlZC5cbiIKKyJZb3UgY2FuIGluc3BlY3Qgd2hhdCB3YXMgY2hlY2tlZCBvdXQgd2l0aCAnZ2l0IHN0YXR1cydcbiIKKyJhbmQgcmV0cnkgd2l0aCAnZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LydcbiIKK21zZ3N0ciAiIgorIktsb25lbiBseWNrYWRlcywgbWVuIHV0Y2hlY2tuaW5nZW4gbWlzc2x5Y2thZGVzLlxuIgorIkR1IGthbiBpbnNwZWt0ZXJhIGRldCBzb20gY2hlY2thZGVzIHV0IG1lZCBcImdpdCBzdGF0dXNcIlxuIgorIm9jaCBmw7Zyc8O2a2EgbWVkIFwiZ2l0IHJlc3RvcmUgLXNvdXJjZT1IRUFEIDovXCJcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSBmasOkcnJncmVuZW4gJXMgZsO2ciBhdHQga2xvbmEuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgJXMiCittc2dzdHIgImthbiBpbnRlIHVwcGRhdGVyYSAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc1MworbXNnaWQgImZhaWxlZCB0byBpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGluaXRpZXJhIHNwYXJzZS1jaGVja291dCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc3NgorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAiIgorIkhFQUQgaG9zIGZqw6RycmVuIHBla2FyIHDDpSBlbiBvYmVmaW50bGlnIHJlZmVyZW5zLCBrYW4gaW50ZSBjaGVja2EgdXQuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MDcKK21zZ2lkICJ1bmFibGUgdG8gY2hlY2tvdXQgd29ya2luZyB0cmVlIgorbXNnc3RyICJrdW5kZSBpbnRlIGNoZWNrYSB1dCBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NjIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcGFyYW1ldGVycyB0byBjb25maWcgZmlsZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgcGFyYW1ldHJhciB0aWxsIGtvbmZpZ3VyYXRpb25zZmlsZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjUKK21zZ2lkICJjYW5ub3QgcmVwYWNrIHRvIGNsZWFuIHVwIgorbXNnc3RyICJrYW4gaW50ZSBwYWNrYSBvbSBmw7ZyIGF0dCBzdMOkZGEgdXBwIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTI3Cittc2dpZCAiY2Fubm90IHVubGluayB0ZW1wb3JhcnkgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICJrdW5kZSBpbnRlIHRhIGJvcnQgdGVtcG9yw6RyIFwiYWx0ZXJuYXRlc1wiLWZpbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2NSBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NTAKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICJGw7ZyIG3DpW5nYSBhcmd1bWVudC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjkKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIkR1IG3DpXN0ZSBhbmdlIGV0dCBhcmtpdiBhdHQga2xvbmEuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiZmxhZ2dvcm5hIC0tYmFyZSBvY2ggLS1vcmlnaW4gJXMgw6RyIGlua29tcGF0aWJsYS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5ODUKK21zZ2lkICItLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpciBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiZmxhZ2dvcm5hIC0tYmFyZSBvY2ggLS1zZXBhcmF0ZS1naXQtZGlyIMOkciBpbmtvbXBhdGlibGEuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiYXJraXZldCBcIiVzXCIgZmlubnMgaW50ZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMDQgYnVpbHRpbi9mZXRjaC5jOjE3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVwdGggJXMgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICJkanVwZXQgJXMgw6RyIGludGUgZXR0IHBvc2l0aXZ0IHRhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAiZGVzdGluYXRpb25zc8O2a3bDpGdlbiBcIiVzXCIgZmlubnMgcmVkYW4gb2NoIMOkciBpbnRlIGVuIHRvbSBrYXRhbG9nLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJhcmJldHN0csOkZGV0IFwiJXNcIiBmaW5ucyByZWRhbi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDM5IGJ1aWx0aW4vY2xvbmUuYzoxMDYwIGJ1aWx0aW4vZGlmZnRvb2wuYzoyNzEKKyM6IGJ1aWx0aW4vbG9nLmM6MTg2NiBidWlsdGluL3dvcmt0cmVlLmM6Mjk1IGJ1aWx0aW4vd29ya3RyZWUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgImt1bmRlIGludGUgc2thcGEgaW5sZWRhbmRlIGthdGFsb2dlciBmw7ZyIFwiJXNcIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgImt1bmRlIGludGUgc2thcGEgYXJiZXRza2F0YWxvZ2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnJXMnLi4uXG4iCittc2dzdHIgIktsb25hciB0aWxsIGV0dCBuYWtldCBhcmtpdiBcIiVzXCIuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAiS2xvbmFyIHRpbGwgXCIlc1wiLi4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDkwCittc2dpZCAiIgorImNsb25lIC0tcmVjdXJzaXZlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggYm90aCAtLXJlZmVyZW5jZSBhbmQgLS1yZWZlcmVuY2UtaWYtIgorImFibGUiCittc2dzdHIgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSDDpHIgaW50ZSBrb21wYXRpYmVsIG1lZCAtLXJlZmVyZW5jZSBvY2ggLS1yZWZlcmVuY2UtaWYtYWJsZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTQKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1kZXB0aCBpZ25vcmVyYXMgaSBsb2thbGEga2xvbmluZ2FyOyBhbnbDpG5kIGZpbGU6Ly8gaXN0w6RsbGV0LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTYKK21zZ2lkICItLXNoYWxsb3ctc2luY2UgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLXNoYWxsb3ctc2luY2UgaWdub3JlcmFzIGkgbG9rYWxhIGtsb25pbmdhcjsgYW52w6RuZCBmaWxlOi8vIGlzdMOkbGxldC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU4Cittc2dpZCAiLS1zaGFsbG93LWV4Y2x1ZGUgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisiLS1zaGFsbG93LWV4Y2x1ZGUgaWdub3JlcmFzIGkgbG9rYWxhIGtsb25pbmdhcjsgYW52w6RuZCBmaWxlOi8vIGlzdMOkbGxldC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTYwCittc2dpZCAiLS1maWx0ZXIgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLWZpbHRlciBpZ25vcmVyYXMgaSBsb2thbGEga2xvbmluZ2FyOyBhbnbDpG5kIGZpbGU6Ly8gaXN0w6RsbGV0LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjMKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICJrw6RsbGFya2l2ZXQgw6RyIGdydW50LCBpZ25vcmVyYXIgLS1sb2NhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjgKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwgaWdub3JlcmFzIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0MyBidWlsdGluL2Nsb25lLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAiRmrDpHJyZ3JlbmVuICVzIGhpdHRhZGVzIGludGUgaSB1cHBzdHLDtm1zYXJraXZldCAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNTQKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJEdSB2ZXJrYXIgaGEga2xvbmF0IGV0dCB0b210IGFya2l2LiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoxMAorbXNnaWQgImdpdCBjb2x1bW4gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb2x1bW4gWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjcKK21zZ2lkICJsb29rdXAgY29uZmlnIHZhcnMiCittc2dzdHIgInNsw6UgdXBwIGtvbmZpZ3VyYXRpb25zdmFyaWFibGVyIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI4IGJ1aWx0aW4vY29sdW1uLmM6MjkKK21zZ2lkICJsYXlvdXQgdG8gdXNlIgorbXNnc3RyICJ1dHNlZW5kZSBhdHQgYW52w6RuZGEiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJNYXhpbXVtIHdpZHRoIgorbXNnc3RyICJNYXhpbWFsIGJyZWRkIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMxCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIKK21zZ3N0ciAiU3BhbHRmeWxsbmFkIGkgdsOkbnN0ZXJrYW50ZW4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIHJpZ2h0IGJvcmRlciIKK21zZ3N0ciAiU3BhbHRmeWxsbmFkIGkgaMO2Z2Vya2FudGVuIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMzCittc2dpZCAiUGFkZGluZyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMiCittc2dzdHIgIlNwYWx0ZnlsbG5hZCBtZWxsYW4gc3BhbHRlciIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo1MQorbXNnaWQgIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb21tYW5kIG3DpXN0ZSB2YXJhIGbDtnJzdGEgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxOAorbXNnaWQgIiIKKyJnaXQgY29tbWl0LXRyZWUgWygtcCA8cGFyZW50PikuLi5dIFstU1s8a2V5aWQ+XV0gWygtbSA8bWVzc2FnZT4pLi4uXSBbKC1GICIKKyI8ZmlsZT4pLi4uXSA8dHJlZT4iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LXRyZWUgWygtcCA8ZsO2csOkbGRyZXI+KS4uLl0gWy1TWzxueWNrZWxpZD5dXSBbKC1tICIKKyI8bWVkZGVsYW5kZT4pLi4uXSBbKC1GIDxmaWw+KS4uLl0gPHRyw6RkPiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBwYXJlbnQgJXMgaWdub3JlZCIKK21zZ3N0ciAiZHVwbGljZXJhZCBmw7Zyw6RsZGVyICVzIGlnbm9yZXJhZGVzIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6NTYgYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzNiBidWlsdGluL2xvZy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAib2JqZWt0bmFtbmV0IMOkciBpbnRlIGdpbHRpZ3Q6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IG1pc3NseWNrYWRlcyDDtnBwbmEgXCIlc1wiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IG1pc3NseWNrYWRlcyBsw6RzYSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBjbG9zZSAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IG1pc3NseWNrYWRlcyBzdMOkbmdhIFwiJXNcIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExMQorbXNnaWQgInBhcmVudCIKK21zZ3N0ciAiZsO2csOkbGRlciIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExMgorbXNnaWQgImlkIG9mIGEgcGFyZW50IGNvbW1pdCBvYmplY3QiCittc2dzdHIgImlkIHDDpSBldHQgZsO2csOkbGRlcmluY2hlY2tuaW5nc29iamVrdCIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNCBidWlsdGluL2NvbW1pdC5jOjE1MDEgYnVpbHRpbi9tZXJnZS5jOjI3MQorIzogYnVpbHRpbi9ub3Rlcy5jOjQwOSBidWlsdGluL25vdGVzLmM6NTc1IGJ1aWx0aW4vc3Rhc2guYzoxNDc3CisjOiBidWlsdGluL3RhZy5jOjQxMgorbXNnaWQgIm1lc3NhZ2UiCittc2dzdHIgIm1lZGRlbGFuZGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTUgYnVpbHRpbi9jb21taXQuYzoxNTAxCittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImluY2hlY2tuaW5nc21lZGRlbGFuZGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTgKK21zZ2lkICJyZWFkIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgImzDpHMgaW5jaGVja25pbmdzbG9nZ21lZGRlbGFuZGUgZnLDpW4gZmlsIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIxIGJ1aWx0aW4vY29tbWl0LmM6MTUxMyBidWlsdGluL21lcmdlLmM6Mjg4CisjOiBidWlsdGluL3B1bGwuYzoxNzUgYnVpbHRpbi9yZXZlcnQuYzoxMTgKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgIkdQRy1zaWduZXJhIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTMzCittc2dpZCAibXVzdCBnaXZlIGV4YWN0bHkgb25lIHRyZWUiCittc2dzdHIgIm3DpXN0ZSBhbmdlIGV4YWt0IGV0dCB0csOkZCIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjE0MAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQiCittc2dzdHIgImdpdCBjb21taXQtdHJlZTogbWlzc2x5Y2thZGVzIGzDpHNhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQxCittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzxmbGFnZ29yPl0gWy0tXSA8c8O2a3bDpGc+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2Cittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBzdGF0dXMgWzxmbGFnZ29yPl0gWy0tXSA8c8O2a3bDpGc+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUxCittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisiRHUgYmFkIG9tIGF0dCB1dMO2a2EgZGVuIHNlbmFzdGUgaW5jaGVja25pbmdlbiwgbWVuIG9tIGR1IGfDtnIgZGV0XG4iCisiYmxpciBkZW4gdG9tLiBEdSBrYW4ga8O2cmEga29tbWFuZG90IHDDpSBueXR0IG1lZCAtLWFsbG93LWVtcHR5LCBlbGxlclxuIgorInPDpSBrYW4gZHUgdGEgYm9ydCBpbmNoZWNrbmluZ2VuIGhlbHQgbWVkIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTYKK21zZ2lkICIiCisiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRlbiB0aWRpZ2FyZSBcImNoZXJyeS1waWNrXCI6ZW4gw6RyIG51IHRvbSwga2Fuc2tlIHDDpSBncnVuZCBhdiBlbiBsw7ZzdFxuIgorImtvbmZsaWt0LiBPbSBkdSB2aWxsIGNoZWNrYSBpbiBkZW4gw6RuZMOlIGFudsOkbmRlciBkdTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjMKK21zZ2lkICJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCBjaGVycnktcGljayAtLXNraXAnXG4iCittc2dzdHIgIkFudsOkbmQgYW5uYXJzIFwiZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFwiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjYKK21zZ2lkICIiCisiYW5kIHRoZW4gdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorInRvIHJlc3VtZSBjaGVycnktcGlja2luZyB0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCittc2dzdHIgIiIKKyJvY2ggc2VkYW46XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCisiXG4iCisiZsO2ciBhdHQgZm9ydHPDpHR0YSBcImNoZXJyeS1waWNrXCIgbWVkIHJlc3RlcmFuZGUgaW5jaGVja25pbmdhci5cbiIKKyJPbSBkdSB2aWxsIGhvcHBhIMO2dmVyIGRlbiBow6RyIGluY2hlY2tuaW5nZW4sIGFudsOkbmQ6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLXNraXBcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMTUKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgIm1pc3NseWNrYWRlcyBwYWNrYSB1cHAgSEVBRDpzIHRyw6Rkb2JqZWt0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgbWVkIC1hIGdlciBpbmdlbiBtZW5pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY0Cittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICJEdSBtw6VzdGUgYW5nZSBzw7ZrdsOkZ2FyIHRpbGxzYW1tYW5zIG1lZCAtLWluY2x1ZGUvLS1vbmx5LiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNzYKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSB0ZW1wb3LDpHIgaW5kZXhmaWwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzg1Cittc2dpZCAiaW50ZXJhY3RpdmUgYWRkIGZhaWxlZCIKK21zZ3N0ciAiaW50ZXJha3RpdiB0aWxsw6RnZ25pbmcgbWlzc2x5Y2thZGVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQwMAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJrYW4gaW50ZSB1cHBkYXRlcmEgdGVtcG9yw6RydCBpbmRleCIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MDIKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIHVwcGRhdGVyYSBodXZ1ZC1jYWNoZXRyw6RkZXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDI3IGJ1aWx0aW4vY29tbWl0LmM6NDUwIGJ1aWx0aW4vY29tbWl0LmM6NDk2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSBmaWxlbiBuZXdfaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc5Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICJrYW4gaW50ZSB1dGbDtnJhIGVuIGRlbHZpcyBpbmNoZWNrbmluZyB1bmRlciBlbiBzYW1tYW5zbGFnbmluZy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDgxCittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICJrYW4gaW50ZSB1dGbDtnJhIGVuIGRlbHZpcyBpbmNoZWNrbmluZyB1bmRlciBlbiBjaGVycnktcGljay4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDg5Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBpbmRleGV0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUwOAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgdGVtcG9yw6RyIGluZGV4ZmlsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICJpbmNoZWNrbmluZ2VuIFwiJXNcIiBzYWtuYXIgZsO2cmZhdHRhcmh1dnVkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBoYXMgbWFsZm9ybWVkIGF1dGhvciBsaW5lIgorbXNnc3RyICJpbmNoZWNrbmluZ2VuIFwiJXNcIiBoYXIgZmVsZm9ybWF0ZXJhdCBmw7ZyZmF0dGFyaHV2dWQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjI3Cittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAiZmVsZm9ybWFkIFwiLS1hdXRob3JcIi1mbGFnZ2EiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjgwCittc2dpZCAiIgorInVuYWJsZSB0byBzZWxlY3QgYSBjb21tZW50IGNoYXJhY3RlciB0aGF0IGlzIG5vdCB1c2VkXG4iCisiaW4gdGhlIGN1cnJlbnQgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyJrdW5kZSBpbnRlIHbDpGxqYSBldHQga29tbWVudGFyc3RlY2tlbiBzb20gaW50ZSBhbnbDpG50c1xuIgorImkgZGV0IGJlZmludGxpZ2EgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzE4IGJ1aWx0aW4vY29tbWl0LmM6NzUxIGJ1aWx0aW4vY29tbWl0LmM6MTA5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzbMOlIHVwcCBpbmNoZWNrbmluZ2VuICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMCBidWlsdGluL3Nob3J0bG9nLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIihsw6RzZXIgbG9nZ21lZGRlbGFuZGUgZnLDpW4gc3RhbmRhcmQgaW4pXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMyCittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgbG9nZyBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBsb2dnZmlsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc2NyBidWlsdGluL2NvbW1pdC5jOjc4MworbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NzQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzNAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIGluY2hlY2tuaW5nc21hbGwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkRldCB2ZXJrYXIgc29tIGR1IGNoZWNrYXIgaW4gZW4gc2FtbWFuc2xhZ25pbmcuXG4iCisiT20gZGV0IGludGUgc3TDpG1tZXIgdGFyIGR1IGJvcnQgZmlsZW5cbiIKKyJcdCVzXG4iCisib2NoIGbDtnJzw7ZrZXIgaWdlbi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgY2hlcnJ5LXBpY2suXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiRGV0IHZlcmthciBzb20gZHUgY2hlY2thciBpbiBlbiBjaGVycnktcGljay5cbiIKKyJPbSBkZXQgaW50ZSBzdMOkbW1lciB0YXIgZHUgYm9ydCBmaWxlblxuIgorIlx0JXNcbiIKKyJvY2ggZsO2cnPDtmtlciBpZ2VuLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiQW5nZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCBmw7ZyIGRpbmEgw6RuZHJpbmdhci4gUmFkZXIgc29tIGlubGVkc1xuIgorIm1lZCBcIiVjXCIga29tbWVyIGlnbm9yZXJhcywgb2NoIGV0dCB0b210IG1lZGRlbGFuZGUgYXZicnl0ZXIgIgorImluY2hlY2tuaW5nZW4uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiQW5nZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCBmw7ZyIGRpbmEgw6RuZHJpbmdhci4gUmFkZXIgc29tIGlubGVkc1xuIgorIm1lZCBcIiVjXCIga29tbWVyIGJlaMOlbGxhczsgZHUga2FuIHNqw6RsdiB0YSBib3J0IGRlbSBvbSBkdSB2aWxsLlxuIgorIkV0dCB0b210IG1lZGRlbGFuZGUgYXZicnl0ZXIgaW5jaGVja25pbmdlbi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNBdXRob3I6ICAgICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc0bDtnJmYXR0YXJlOiAlLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNEYXRlOiAgICAgICVzIgorbXNnc3RyICIlc0RhdHVtOiAgICAgICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzSW5jaGVja2FyZTogJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTI5Cittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgIkthbiBpbnRlIGzDpHNhIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTk3Cittc2dpZCAiRXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgIkZlbCB2aWQgYnlnZ2FuZGUgYXYgdHLDpGQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAxMSBidWlsdGluL3RhZy5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIkFuZ2UgbWVkZGVsYW5kZXQgZW4gYXYgZmxhZ2dvcm5hIC1tIGVsbGVyIC1GLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1hdXRob3IgJyVzJyBpcyBub3QgJ05hbWUgPGVtYWlsPicgYW5kIG1hdGNoZXMgbm8gZXhpc3RpbmcgYXV0aG9yIgorbXNnc3RyICIiCisiLS1hdXRob3IgJyVzJyDDpHIgaW50ZSAnTmFtbiA8ZXBvc3Q+JyBvY2ggbWF0Y2hhciBpbmdlbiBiZWZpbnRsaWcgZsO2cmZhdHRhcmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlnbm9yZWQgbW9kZSAnJXMnIgorbXNnc3RyICJPZ2lsdGlndCBpZ25vcmVyYXQgbMOkZ2UgXCIlc1wiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODcgYnVpbHRpbi9jb21taXQuYzoxMzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAiT2dpbHRpZ3QgbMOkZ2UgZsO2ciBvc3DDpXJhZGUgZmlsZXI6IFwiJXNcIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTI3Cittc2dpZCAiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWxvbmcgb2NoIC16IMOkciBpbmtvbXBhdGlibGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3MQorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIkthbiBpbnRlIGFudsOkbmRhIGLDpWRlIC0tcmVzZXQtYXV0aG9yIG9jaCAtLWF1dGhvciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgwCittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgIkR1IGhhciBpbmdldCBhdHQgdXTDtmthLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgzCittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiRHUgw6RyIGkgbWl0dGVuIGF2IGVuIHNhbW1hbnNsYWduaW5nIC0tIGthbiBpbnRlIHV0w7ZrYS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIkR1IMOkciBpIG1pdHRlbiBhdiBlbiBjaGVycnktcGljayAtLSBrYW4gaW50ZSB1dMO2a2EuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODgKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICJGbGFnZ29ybmEgLS1zcXVhc2ggb2NoIC0tZml4dXAga2FuIGludGUgYW52w6RuZGFzIHNhbXRpZGlndCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk4Cittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIkVuZGFzdCBlbiBhdiAtYy8tQy8tRi8tLWZpeHVwIGthbiBhbnbDpG5kYXMuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDAKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYuIgorbXNnc3RyICJGbGFnZ2FuIC1tIGthbiBpbnRlIGtvbWJpbmVyYXMgbWVkIC1jLy1DLy1GLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjA4Cittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiLS1yZXNldC1hdXRob3Iga2FuIGVuZGFzdCBhbnbDpG5kYXMgbWVkIC1DLCAtYyBlbGxlciAtLWFtZW5kLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjI1Cittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisiRW5kYXN0IGVuIGF2IC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGthbiBhbnbDpG5kYXMuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHMgJyVzIC4uLicgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJzw7ZrdsOkZ2FybmEgXCIlcyAuLi5cIiBtZWQgLWEgZ2VyIGluZ2VuIG1lbmluZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYyIGJ1aWx0aW4vY29tbWl0LmM6MTUyNAorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAidmlzYSBrb25jaXMgc3RhdHVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjQgYnVpbHRpbi9jb21taXQuYzoxNTI2Cittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgInZpc2EgaW5mb3JtYXRpb24gb20gZ3JlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY2Cittc2dpZCAic2hvdyBzdGFzaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAidmlzYSBpbmZvcm1hdGlvbiBvbSBzdGFzaCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY4IGJ1aWx0aW4vY29tbWl0LmM6MTUyOAorbXNnaWQgImNvbXB1dGUgZnVsbCBhaGVhZC9iZWhpbmQgdmFsdWVzIgorbXNnc3RyICJiZXLDpGtuYSBmdWxsc3TDpG5kaWdhIGbDtnJlLS9lZnRlci12w6RyZGVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzAKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzaW9uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzAgYnVpbHRpbi9jb21taXQuYzoxNTMwIGJ1aWx0aW4vcHVzaC5jOjU0OQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY0MworbXNnaWQgIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IgorbXNnc3RyICJtYXNraW5sw6RzYmFyIHV0ZGF0YSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzczIGJ1aWx0aW4vY29tbWl0LmM6MTUzMgorbXNnaWQgInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIKK21zZ3N0ciAidmlzYSBzdGF0dXMgaSBsw6VuZ3QgZm9ybWF0IChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3NiBidWlsdGluL2NvbW1pdC5jOjE1MzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAidGVybWluZXJhIHBvc3RlciBtZWQgTlVMIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzggYnVpbHRpbi9jb21taXQuYzoxMzgyIGJ1aWx0aW4vY29tbWl0LmM6MTUzOAorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTMgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTYKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU5IGJ1aWx0aW4vcmViYXNlLmM6MTU2OSBwYXJzZS1vcHRpb25zLmg6MzM2Cittc2dpZCAibW9kZSIKK21zZ3N0ciAibMOkZ2UiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OSBidWlsdGluL2NvbW1pdC5jOjE1MzgKK21zZ2lkICJzaG93IHVudHJhY2tlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IGFsbCwgbm9ybWFsLCBuby4gKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgInZpc2Egb3Nww6VyYWRlIGZpbGVyLCB2YWxmcmlhIGzDpGdlbjogYWxsLCBub3JtYWwsIG5vLiAoU3RhbmRhcmQ6IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MworbXNnaWQgIiIKKyJzaG93IGlnbm9yZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAoRGVmYXVsdDogIgorInRyYWRpdGlvbmFsKSIKK21zZ3N0ciAiIgorInZpc2EgaWdub3JlcmFkZSBmaWxlciwgdmFsZnJpYSBsw6RnZW46IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8gKFN0YW5kYXJkOiAiCisidHJhZGl0aW9uYWwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODUgcGFyc2Utb3B0aW9ucy5oOjE5MgorbXNnaWQgIndoZW4iCittc2dzdHIgIm7DpHIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4NgorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorImlnbm9yZXJhIMOkbmRyaW5nYXIgaSB1bmRlcm1vZHVsZXIsIHZhbGZyaXR0IG7DpHI6IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODgKK21zZ2lkICJsaXN0IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJ2aXNhIG9zcMOlcmFkZSBmaWxlciBpIHNwYWx0ZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4OQorbXNnaWQgImRvIG5vdCBkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAiZGV0ZWt0ZXJhIGludGUgbmFtbsOkbmRyaW5nYXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM5MQorbXNnaWQgImRldGVjdCByZW5hbWVzLCBvcHRpb25hbGx5IHNldCBzaW1pbGFyaXR5IGluZGV4IgorbXNnc3RyICJkZXRla3RlcmEgbmFtbsOkbmRyaW5nYXIsIG3DtmpsaWdlbiBzw6R0dCBsaWtoZXRzaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQxMQorbXNnaWQgIlVuc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIGlnbm9yZWQgYW5kIHVudHJhY2tlZC1maWxlcyBhcmd1bWVudHMiCittc2dzdHIgIktvbWJpbmF0aW9uZW4gYXYgYXJndW1lbnQgZsO2ciBpZ25vcmVyYWRlIG9jaCBvc3DDpXJhZGUgZmlsZXIgc3TDtmRzIGVqIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTQKK21zZ2lkICJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IgorbXNnc3RyICJ1bmRlcnRyeWNrIHNhbW1hbmZhdHRuaW5nIGVmdGVyIGZyYW1nw6VuZ3NyaWsgaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NQorbXNnaWQgInNob3cgZGlmZiBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAidmlzYSBkaWZmIGkgbWFsbGVuIGbDtnIgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NworbXNnaWQgIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiCittc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTggYnVpbHRpbi9tZXJnZS5jOjI3NSBidWlsdGluL3RhZy5jOjQxNAorbXNnaWQgInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgImzDpHMgbWVkZGVsYW5kZSBmcsOlbiBmaWwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorbXNnaWQgImF1dGhvciIKK21zZ3N0ciAiZsO2cmZhdHRhcmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICLDtnZlcnN0eXIgZsO2cmZhdHRhcmUgZsO2ciBpbmNoZWNrbmluZ2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAgYnVpbHRpbi9nYy5jOjUzOAorbXNnaWQgImRhdGUiCittc2dzdHIgImRhdHVtIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgIsO2dmVyc3R5ciBkYXR1bSBmw7ZyIGluY2hlY2tuaW5nZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMiBidWlsdGluL2NvbW1pdC5jOjE1MDMgYnVpbHRpbi9jb21taXQuYzoxNTA0CisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDUgcGFyc2Utb3B0aW9ucy5oOjMyOCByZWYtZmlsdGVyLmg6OTIKK21zZ2lkICJjb21taXQiCittc2dzdHIgImluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiw6V0ZXJhbnbDpG5kIG9jaCByZWRpZ2VyYSBtZWRkZWxhbmRlIGZyw6VuIGFuZ2l2ZW4gaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMworbXNnaWQgInJldXNlIG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLDpXRlcmFudsOkbmQgbWVkZGVsYW5kZSBmcsOlbiBhbmdpdmVuIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDQKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisiYW52w6RuZCBhdXRvc3F1YXNoLWZvcm1hdGVyYXQgbWVkZGVsYW5kZSBmw7ZyIGF0dCBmaXhhIGFuZ2l2ZW4gaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNQorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisiYW52w6RuZCBhdXRvc3F1YXNoLWZvcm1hdGVyYXQgbWVkZGVsYW5kZSBmw7ZyIGF0dCBzbMOlIGlob3AgbWVkIGFuZ2l2ZW4gIgorImluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDYKK21zZ2lkICJ0aGUgY29tbWl0IGlzIGF1dGhvcmVkIGJ5IG1lIG5vdyAodXNlZCB3aXRoIC1DLy1jLy0tYW1lbmQpIgorbXNnc3RyICJqYWcgw6RyIG51IGbDtnJmYXR0YXJlIGF2IGluY2hlY2tuaW5nZW4gKGFudsOkbmRzIG1lZCAtQy8tYy8tLWFtZW5kKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA3IGJ1aWx0aW4vbG9nLmM6MTYzNCBidWlsdGluL21lcmdlLmM6MjkwCisjOiBidWlsdGluL3B1bGwuYzoxNDQgYnVpbHRpbi9yZXZlcnQuYzoxMTAKK21zZ2lkICJhZGQgU2lnbmVkLW9mZi1ieToiCittc2dzdHIgImzDpGdnIHRpbGwgU2lnbmVkLW9mZi1ieToiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwOAorbXNnaWQgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIKK21zZ3N0ciAiYW52w6RuZCBhbmdpdmVuIG1hbGxmaWwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwOQorbXNnaWQgImZvcmNlIGVkaXQgb2YgY29tbWl0IgorbXNnc3RyICJ0dmluZ2EgcmVkaWdlcmluZyBhdiBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTExCittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgImlua2x1ZGVyYSBzdGF0dXMgaSBtYWxsZW4gZsO2ciBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE2Cittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBpbmNoZWNrbmluZ2VucyBpbm5laMOlbGwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNworbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiY2hlY2thIGluIGFsbGEgw6RuZHJhZGUgZmlsZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxOAorbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAibMOkZ2cgdGlsbCBhbmdpdm5hIGZpbGVyIHRpbGwgaW5kZXhldCBmw7ZyIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTkKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAibMOkZ2cgdGlsbCBmaWxlciBpbnRlcmFrdGl2dCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIwCittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAibMOkZ2cgdGlsbCDDpG5kcmluZ2FyIGludGVyYWt0aXZ0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjEKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgImNoZWNrYSBlbmRhc3QgaW4gYW5naXZuYSBmaWxlciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIyCittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgImbDtnJiaWfDpSBwcmUtY29tbWl0LSBvY2ggY29tbWl0LW1zZy1rcm9rYXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMworbXNnaWQgInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiCittc2dzdHIgInZpc2EgdmFkIHNvbSBza3VsbGUgY2hlY2thcyBpbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM2Cittc2dpZCAiYW1lbmQgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICJsw6RnZyB0aWxsIGbDtnJlZ8OlZW5kZSBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM3Cittc2dpZCAiYnlwYXNzIHBvc3QtcmV3cml0ZSBob29rIgorbXNnc3RyICJmw7ZyYmlnw6UgcG9zdC1yZXdyaXRlLWtyb2siCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU0NAorbXNnaWQgIm9rIHRvIHJlY29yZCBhbiBlbXB0eSBjaGFuZ2UiCittc2dzdHIgIm9rIGF0dCByZWdpc3RyZXJhIGVuIHRvbSDDpG5kcmluZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTQ2Cittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAib2sgYXR0IHJlZ2lzdHJlcmEgZW4gw6RuZHJpbmcgbWVkIHRvbXQgbWVkZGVsYW5kZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIlRyYXNpZyBNRVJHRV9IRUFELWZpbCAoJXMpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MjYKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIE1FUkdFX01PREUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgaW5jaGVja25pbmdzbWVkZGVsYW5kZTogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJBdmJyeXRlciBww6UgZ3J1bmQgYXYgdG9tdCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICJBdmJyeXRlciBpbmNoZWNrbmluZzsgbWVkZGVsYW5kZXQgaW50ZSByZWRpZ2VyYXQuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY5MQorbXNnaWQgIiIKKyJyZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisiYXJraXZldCBoYXIgdXBwZGF0ZXJhdHMsIG1lbiBrdW5kZSBpbnRlIHNrcml2YSBmaWxlblxuIgorIm5ld19pbmRleC4gS29udHJvbGxlcmEgYXR0IGRpc2tlbiBpbnRlIMOkciBmdWxsIG9jaFxuIgorImF0dCBrdm90ZW4gaW50ZSBoYXIgw7Z2ZXJza3JpZGl0cywgb2NoIGvDtnIgc2VkYW5cbiIKKyJcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDovXCIgZsO2ciBhdHQgw6V0ZXJzdMOkbGxhLiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE3Cittc2dpZCAiIgorImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLXNoYWxsb3ddIFstLVtuby1dcHJvZ3Jlc3NdIgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2Jqa2F0Pl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTIgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoyMgorbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHdyaXRlIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLWFwcGVuZHwtLXNwbGl0XSBbLS0iCisicmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSBbLS1bbm8tXXByb2dyZXNzXSA8c3BsaXQgb3B0aW9ucz4iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHdyaXRlIFstLW9iamVjdC1kaXIgPG9iamthdD5dIFstLWFwcGVuZHwtLXNwbGl0XSBbLS0iCisicmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSBbLS1bbm8tXXByb2dyZXNzXSA8ZGVsbmluZ3MtZmxhZ2dvcj4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmQgb2JqZWN0IGRpcmVjdG9yeSBtYXRjaGluZyAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBoaXR0YSBvYmpla3RrYXRhbG9nIGbDtnIgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NjggYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMjUKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjEwIGJ1aWx0aW4vZmV0Y2guYzoxNzkgYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAiZGlyIgorbXNnc3RyICJrYXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NjkgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMjYKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjExCittc2dpZCAiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIgorbXNnc3RyICJPYmpla3RrYXRhbG9nZW4gZMOkciBncmFmZW4gc2thIGxhZ3JhcyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo3MQorbXNnaWQgImlmIHRoZSBjb21taXQtZ3JhcGggaXMgc3BsaXQsIG9ubHkgdmVyaWZ5IHRoZSB0aXAgZmlsZSIKK21zZ3N0ciAib20gaW5jaGVja25pZ25zZ3JhZmVuIMOkciBkZWxhZCwga29udHJvbGxlcmEgYmFyYSBzcGV0c2ZpbGVuIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjk0IHQvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGNvbW1pdC1ncmFwaCAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSBpbmNoZWNrbmluZ3NncmFmZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyOAorbXNnaWQgInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiCittc2dzdHIgInN0YXJ0YSB0cmF2ZXJzZXJpbmcgdmlkIGFsbGEgcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzAKK21zZ2lkICJzY2FuIHBhY2staW5kZXhlcyBsaXN0ZWQgYnkgc3RkaW4gZm9yIGNvbW1pdHMiCittc2dzdHIgInPDtmsgcGFrZXRpbmRleCBsaXN0YWRlIHDDpSBzdGFuZGFyZCBpbiBlZnRlciBpbmNoZWNrbmluZ2FyIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzMgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgImLDtnJqYSBnw6UgZ2Vub20gaW5jaGVja25pbmdhciBsaXN0YWRlIHDDpSBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzQKK21zZ2lkICJpbmNsdWRlIGFsbCBjb21taXRzIGFscmVhZHkgaW4gdGhlIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICJ0YSBtZWQgYWxsYSBpbmNoZWNrbmluZ2FyIHJlZGFuIGkgZmlsZW4gY29tbWl0LWdyYXBoIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNworbXNnaWQgImFsbG93IHdyaXRpbmcgYW4gaW5jcmVtZW50YWwgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgInRpbGzDpXQgc2tyaXZhIGVuIGlua3JlbWVudGVsbCBpbmNoZWNrbmluZ3NncmFmZmlsIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzOSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE0MworbXNnaWQgIm1heGltdW0gbnVtYmVyIG9mIGNvbW1pdHMgaW4gYSBub24tYmFzZSBzcGxpdCBjb21taXQtZ3JhcGgiCittc2dzdHIgIiIKKyJtYXhpbWFsdCBhbnRhbCBpbmNoZWNrbmluZ2FyIGkgZW4gZGVsYWQgaW5jaGVja2luZ3NncmFmIHNvbSBpbnRlIMOkciBiYWQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTQxCittc2dpZCAibWF4aW11bSByYXRpbyBiZXR3ZWVuIHR3byBsZXZlbHMgb2YgYSBzcGxpdCBjb21taXQtZ3JhcGgiCittc2dzdHIgIm1heGltYWx0IGbDtnJow6VsbGFuZGUgbWVsbGFuIHR2w6Ugbml2w6VlciBhdiBlbiBkZWxhZCBpbmNoZWNrbmluZ3NncmFmIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE1OQorbXNnaWQgInVzZSBhdCBtb3N0IG9uZSBvZiAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzLCBvciAtLXN0ZGluLXBhY2tzIgorbXNnc3RyICJhbnbDpG5kIHNvbSBtZXN0IGVuIGF2IC0tcmVhY2hhYmxlLCAtLXN0ZGluLWNvbW1pdCBvY2ggLS1zdGRpbi1wYWNrcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMQorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb25maWcgWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTA0IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgLS10eXBlIGFyZ3VtZW50LCAlcyIKK21zZ3N0ciAib2vDpG50IGFyZ3VtZW50IGbDtnIgLS10eXBlLCAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMTYKK21zZ2lkICJvbmx5IG9uZSB0eXBlIGF0IGEgdGltZSIKK21zZ3N0ciAiZW5kYXN0IGVuIHR5cCDDpXQgZ8OlbmdlbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjUKK21zZ2lkICJDb25maWcgZmlsZSBsb2NhdGlvbiIKK21zZ3N0ciAiS29uZmlndXJhdGlvbnNmaWxlbnMgcGxhdHMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI2Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAiYW52w6RuZCBnbG9iYWwga29uZmlndXJhdGlvbnNmaWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI3Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAiYW52w6RuZCBzeXN0ZW1ldHMga29uZmlndXJhdGlvbnNmaWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI4Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgImFudsOkbmQgYXJraXZldHMga29uZmlndXJhdGlvbnNmaWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI5Cittc2dpZCAidXNlIHBlci13b3JrdHJlZSBjb25maWcgZmlsZSIKK21zZ3N0ciAiYW52w6RuZCBhcmJldHNrYXRhbG9nZW5zIGtvbmZpZ3VyYXRpb25zZmlsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMAorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAiYW52w6RuZCBhbmdpdmVuIGtvbmZpZ3VyYXRpb25zZmlsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgImJsb2ItaWQiCittc2dzdHIgImJsb2ItaWQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMxCittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAibMOkcyBrb25maWd1cmF0aW9uIGZyw6VuIGdpdmV0IGJsb2Itb2JqZWt0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMgorbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAiw4V0Z8OkcmQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMzCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImjDpG10YSB2w6RyZGU6IG5hbW4gW3bDpHJkZS1yZWd1dHRyXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzQKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImjDpG10YSBhbGxhIHbDpHJkZW46IG55Y2tlbCBbdsOkcmRlLXJlZ3V0dHJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNQorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJow6RtdGEgdsOkcmRlbiBmw7ZyIHJlZ3V0dHI6IG5hbW4tcmVndXR0ciBbdsOkcmRlLXJlZ3V0dHJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNgorbXNnaWQgImdldCB2YWx1ZSBzcGVjaWZpYyBmb3IgdGhlIFVSTDogc2VjdGlvblsudmFyXSBVUkwiCittc2dzdHIgImjDpG10YSB2w6RyZGUgc3BlY2lmaWt0IFVSTDplbjogc2VrdGlvblsudmFyXSBVUkwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM3Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgImVyc8OkdHQgYWxsYSBtb3RzdmFyYW5kZSB2YXJpYWJsZXI6IG5hbW4gdsOkcmRlIFt2w6RyZGUtcmVndXR0cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM4Cittc2dpZCAiYWRkIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIgorbXNnc3RyICJsw6RnZyB0aWxsIGVuIG55IHZhcmlhYmVsOiBuYW1uIHbDpHJkZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzkKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJ0YSBib3J0IGVuIHZhcmlhYmVsOiBuYW1uIFt2w6RyZGUtcmVndXR0cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQwCittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgInRhIGJvcnQgYWxsYSB0csOkZmZhcjogbmFtbiBbdsOkcmRlLXJlZ3V0dHJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MQorbXNnaWQgInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIKK21zZ3N0ciAiYnl0IG5hbW4gcMOlIHNla3Rpb246IGdhbW1hbHQtbmFtbiBueXR0LW5hbW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQyCittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAidGEgYm9ydCBlbiBzZWt0aW9uOiBuYW1uIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MworbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICJ2aXNhIGFsbGEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ0Cittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgIsO2cHBuYSB0ZXh0cmVkaWdlcmluZ3Nwcm9ncmFtIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NQorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICJoaXR0YSBkZW4gaW5zdMOkbGxkYSBmw6RyZ2VuOiBzbG90IFtkZWZhdWx0XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDYKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAiaGl0dGEgZsOkcmdpbnN0w6RsbG5pbmdlbjogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ3Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVHlwIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OCBidWlsdGluL2Vudi0taGVscGVyLmM6MzgKK21zZ2lkICJ2YWx1ZSBpcyBnaXZlbiB0aGlzIHR5cGUiCittc2dzdHIgInbDpHJkZXQgaGFyIGdpdml0cyBkZW5uYSB0eXAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ5Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICJ2w6RyZGV0IMOkciBcInRydWVcIiBlbGxlciBcImZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUwCittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgInbDpHJkZXQgw6RyIGV0dCBkZWNpbWFsdCB0YWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUxCittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICJ2w6RyZGV0IMOkciAtLWJvb2wgZWxsZXIgLS1pbnQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUyCittc2dpZCAidmFsdWUgaXMgYSBwYXRoIChmaWxlIG9yIGRpcmVjdG9yeSBuYW1lKSIKK21zZ3N0ciAidsOkcmRldCDDpHIgZW4gc8O2a3bDpGcgKGZpbC0gZWxsZXIga2F0YWxvZ25hbW4pIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MworbXNnaWQgInZhbHVlIGlzIGFuIGV4cGlyeSBkYXRlIgorbXNnc3RyICJ2w6RyZGV0IMOkciBldHQgdXRnw6VuZ3NkYXR1bSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTQKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAiQW5kcmEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU1Cittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJ0ZXJtaW5lcmEgdsOkcmRlbiBtZWQgTlVMLWJ5dGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU2Cittc2dpZCAic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IgorbXNnc3RyICJ2aXNhIGVuZGFzdCB2YXJpYWJlbG5hbW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU3Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICJyZXNwZWt0ZXJhIGlua2x1ZGVyaW5nc2RpcmVrdGl2IHZpZCB1cHBzbGFnIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OAorbXNnaWQgInNob3cgb3JpZ2luIG9mIGNvbmZpZyAoZmlsZSwgc3RhbmRhcmQgaW5wdXQsIGJsb2IsIGNvbW1hbmQgbGluZSkiCittc2dzdHIgInZpc2Ega29uZmlndXJhdGlvbnNrw6RsbGEgKGZpbCwgc3RhbmRhcmQgaW4sIGJsb2IsIGtvbW1hbmRvcmFkKSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTkKK21zZ2lkICJzaG93IHNjb3BlIG9mIGNvbmZpZyAod29ya3RyZWUsIGxvY2FsLCBnbG9iYWwsIHN5c3RlbSwgY29tbWFuZCkiCittc2dzdHIgIiIKKyJ2aXNhIG9tZsOlbmcgZsO2ciBrb25maWd1cmF0aW9uIChhcmJldHNrYXRhbG9nLCBsb2thbHQsIGdsb2JhbHQsIHN5c3RlbSwgIgorImtvbW1hbmRvKSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNjAgYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQwCittc2dpZCAidmFsdWUiCittc2dzdHIgInbDpHJkZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNjAKK21zZ2lkICJ3aXRoIC0tZ2V0LCB1c2UgZGVmYXVsdCB2YWx1ZSB3aGVuIG1pc3NpbmcgZW50cnkiCittc2dzdHIgIm1lZCAtLWdldCwgYW52w6RuZCBzdGFuZGFyZHbDpHJkZSB2aWQgc2FrbmFkIHBvc3QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIHNob3VsZCBiZSAlZCIKK21zZ3N0ciAiZmVsIGFudGFsIGFyZ3VtZW50LCBza3VsbGUgdmFyYSAlZCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlIGZyb20gJWQgdG8gJWQiCittc2dzdHIgImZlbCBhbnRhbCBhcmd1bWVudCwgc2t1bGxlIHZhcmEgZnLDpW4gJWQgdGlsbCAlZCIKKworIzogYnVpbHRpbi9jb25maWcuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgImZlbGFrdGlndCBueWNrZWxtw7Zuc3RlcjogJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmb3JtYXQgZGVmYXVsdCBjb25maWcgdmFsdWU6ICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgZm9ybWF0ZXJhIHN0YW5kYXJka29uZmlndXJhdGlvbnN2w6RyZGU6ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcGFyc2UgY29sb3IgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgdG9sa2EgZsOkcmdlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDU5Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGRlZmF1bHQgY29sb3IgdmFsdWUiCittc2dzdHIgImthbiBpbnRlIHRvbGthIHN0YW5kYXJkZsOkcmd2w6RyZGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTEyIGJ1aWx0aW4vY29uZmlnLmM6NzY4Cittc2dpZCAibm90IGluIGEgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiaW50ZSBpIGVuIGdpdC1rYXRhbG9nIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUxNQorbXNnaWQgIndyaXRpbmcgdG8gc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAic2tyaXZhIHRpbGwgc3RhbmRhcmQgaW4gc3TDtmRzIGludGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTE4Cittc2dpZCAid3JpdGluZyBjb25maWcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAic2tyaXZhIGtvbmZpZ3VyYXRpb25zLWJsb2JiYXIgc3TDtmRzIGludGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiIKKyIjIERldHRhIMOkciBHaXRzIGFudsOkbmRhcnNwZWNpZmlrYSBrb25maWd1cmF0aW9uc2ZpbFxuIgorIlt1c2VyXVxuIgorIiMgSnVzdGVyYSBvY2ggdGEgYm9ydCBrb21tZW50ZXJpbmdzbcOkcmtldCBmcsOlbiBmw7ZsamFuZGUgcmFkZXI6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYyNworbXNnaWQgIm9ubHkgb25lIGNvbmZpZyBmaWxlIGF0IGEgdGltZSIKK21zZ3N0ciAiZW5kYXN0IGVuIGtvbmZpZ3VyYXRpb25zZmlsIMOldCBnw6VuZ2VuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYzMgorbXNnaWQgIi0tbG9jYWwgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1sb2NhbCBrYW4gYmFyYSBhbnbDpG5kYXMgaW51dGkgZXR0IGdpdC1hcmtpdiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MzUKK21zZ2lkICItLWJsb2IgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1ibG9iIGthbiBiYXJhIGFudsOkbmRhcyBpbnV0aSBldHQgZ2l0LWFya2l2IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1NQorbXNnaWQgIiRIT01FIG5vdCBzZXQiCittc2dzdHIgIiRIT01FIGludGUgc2F0dCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NzkKK21zZ2lkICIiCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgorbXNnc3RyICIiCisiLS13b3JrdHJlZSBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIGZsZXJhIGFyYmV0c2thdGFsb2dlciBvbSBpbnRlXG4iCisia29uZmlndXJhdGlvbnN1dMO2a25pZ25lbiB3b3JrdHJlZUNvbmZpZyBoYXIgYWt0aXZlcmF0cy4gTMOkc2Egc3R5Y2tldFxuIgorIlwiS09ORklHVVJBVElPTlNGSUxcIiBpIFwiZ2l0IGhlbHAgd29ya3RyZWVcIiBmw7ZyIGRldGFsamVyIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxNAorbXNnaWQgIi0tZ2V0LWNvbG9yIGFuZCB2YXJpYWJsZSB0eXBlIGFyZSBpbmNvaGVyZW50IgorbXNnc3RyICItLWdldC1jb2xvciBvY2ggdmFyaWFiZWx0eXAgc3TDpG1tZXIgaW50ZSDDtnZlcmVucyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTkKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICJlbmRhc3QgZW4gw6V0Z8OkcmQgw6V0IGfDpW5nZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzMyCittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIi0tbmFtZS1vbmx5IGfDpGxsZXIgYmFyYSBmw7ZyIC0tbGlzdCBlbGxlciAtLWdldC1yZWdleHAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzM4Cittc2dpZCAiIgorIi0tc2hvdy1vcmlnaW4gaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0LCAtLWdldC1hbGwsIC0tZ2V0LXJlZ2V4cCwgYW5kIC0tIgorImxpc3QiCittc2dzdHIgIiIKKyItLXNob3ctb3JpZ2luIGfDpGxsZXIgYmFyYSBmw7ZyIC0tZ2V0LCAtLWdldC1hbGwsIC0tZ2V0LXJlZ2V4cCBvY2ggLS1saXN0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0NAorbXNnaWQgIi0tZGVmYXVsdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQiCittc2dzdHIgIi0tZGVmYXVsdCBnw6RsbGVyIGJhcmEgZsO2ciAtLWdldCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29uZmlnIGZpbGUgJyVzJyIKK21zZ3N0ciAia2FuIGludGUga29uZmlndXJhdGlvbnNmaWwgXCIlc1wiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2MAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiCittc2dzdHIgImZlbCB2aWQgaGFudGVyaW5nIGF2IGtvbmZpZ3VyYXRpb25zZmlsKGVyKSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzAKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgInJlZGlnZXJpbmcgYXYgc3RhbmRhcmQgaW4gc3TDtmRzIGVqIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3MgorbXNnaWQgImVkaXRpbmcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAicmVkaWdlcmluZyBhdiBibG9iYmFyIHN0w7ZkcyBlaiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgImthbiBpbnRlIHNrYXBhIGtvbmZpZ3VyYXRpb25zZmlsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IG92ZXJ3cml0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBhIHNpbmdsZSB2YWx1ZVxuIgorIiAgICAgICBVc2UgYSByZWdleHAsIC0tYWRkIG9yIC0tcmVwbGFjZS1hbGwgdG8gY2hhbmdlICVzLiIKK21zZ3N0ciAiIgorImthbiBpbnRlIHNrcml2YSDDtnZlciBmbGVyYSB2w6RyZGVuIG1lZCBldHQgZW5zYW10IHbDpHJkZVxuIgorIiAgICAgICBBbnbDpG5kIGVuIHJlZ2V4cCwgLS1hZGQgZWxsZXIgLS1yZXBsYWNlLWFsbCBmw7ZyIGF0dCDDpG5kcmEgJXMuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjg3MyBidWlsdGluL2NvbmZpZy5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHNlY3Rpb246ICVzIgorbXNnc3RyICJpbmdlbiBzw6VkYW4gc2VrdGlvbjogJXMiCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjkwCittc2dpZCAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKK21zZ3N0ciAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6MTAwCittc2dpZCAicHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0IgorbXNnc3RyICJza3JpdiBzdG9ybGVrYXIgaSBtw6Rubmlza29sw6RzYmFydCBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNgorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8ZmxhZ2dvcj5dIFs8aW5jaGVja25pbmctaWd0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxmbGFnZ29yPl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiaGVhZCIKK21zZ3N0ciAiaHV2dWQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICJsw6R0dHZpa3RpZyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiYW5ub3RhdGVkIgorbXNnc3RyICJhbm5vdGVyYWQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJkZW4gYW5ub3RlcmFkZSB0YWdnZW4gJXMgaW50ZSB0aWxsZ8OkbmdsaWciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAiZGVuIGFubm90ZXJhZGUgdGFnZ2VuICVzIGhhciBpbmdldCBpbmLDpGRkYXQgbmFtbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICJ0YWdnZW4gXCIlc1wiIMOkciBpIHZlcmtsaWdoZXRlbiBcIiVzXCIgaMOkciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgImluZ2VuIHRhZ2cgbW90c3ZhcmFyIFwiJXNcIiBleGFrdCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJObyBleGFjdCBtYXRjaCBvbiByZWZzIG9yIHRhZ3MsIHNlYXJjaGluZyB0byBkZXNjcmliZVxuIgorbXNnc3RyICIiCisiSW5nZW4gZXhha3QgdHLDpGZmIG1vdCByZWZlcmVuc2VyIGVsbGVyIHRhZ2dhciwgc8O2a2VyIGbDtnIgYXR0IGJlc2tyaXZhXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgImF2c2x1dGFkZSBzw7ZrbmluZyBww6UgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorIkluZ2EgYW5ub3RlcmFkZSB0YWdnYXIga2FuIGJlc2tyaXZhIFwiJXNcIi5cbiIKKyJEZXQgZmlubnMgZG9jayBvYW5ub3RlcmFkZSB0YWdnYXI6IHRlc3RhIC0tdGFncy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorIkluZ2EgdGFnZ2FyIGthbiBiZXNrcml2YSBcIiVzXCIuXG4iCisiVGVzdGEgLS1hbHdheXMsIGVsbGVyIHNrYXBhIG7DpWdyYSB0YWdnYXIuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICJ0cmF2ZXJzZXJhZGUgJWx1IGluY2hlY2tuaW5nYXJcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKyJtZXIgw6RuICVpIHRhZ2dhciBoaXR0YWRlczsgbGlzdGFyIGRlICVpIHNlbmFzdGVcbiIKKyJnYXYgdXBwIHPDtmtuaW5nZW4gdmlkICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAiYmVza3JpdmEgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiT2JqZWt0bmFtbmV0IMOkciBpbnRlIGdpbHRpZ3Q6ICVzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5laXRoZXIgYSBjb21taXQgbm9yIGJsb2IiCittc2dzdHIgIiVzIMOkciB2YXJrZW4gaW5jaGVja25pbmcgZWxsZXIgYmxvYiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MQorbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgImhpdHRhIHRhZ2dlbiBzb20ga29tbWVyIGVmdGVyIGluY2hlY2tuaW5nZW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTIKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICJmZWxzw7ZrIHPDtmtzdHJhdGVnaW4gcMOlIHN0YW5kYXJkIGZlbCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MworbXNnaWQgInVzZSBhbnkgcmVmIgorbXNnc3RyICJhbnbDpG5kIGFsbGEgcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NAorbXNnaWQgInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIgorbXNnc3RyICJhbnbDpG5kIGFsbGEgdGFnZ2FyLCDDpHZlbiBvYW5ub3RlcmFkZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NQorbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgImFudsOkbmQgYWxsdGlkIGzDpW5ndCBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTYKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgImbDtmxqIGVuZGFzdCBmw7Zyc3RhIGbDtnLDpGxkZXJuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU5Cittc2dpZCAib25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyIKK21zZ3N0ciAic2tyaXYgZW5kYXN0IHV0IGV4YWt0YSB0csOkZmZhciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2MQorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgIsO2dmVydsOkZyBkZSA8bj4gbnlhc3RlIHRhZ2dhcm5hIChzdGFuZGFyZDogMTApIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTYzCittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiw7Z2ZXJ2w6RnIGVuZGFzdCB0YWdnYXIgc29tIG1vdHN2YXJhciA8bcO2bnN0ZXI+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY1Cittc2dpZCAiZG8gbm90IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLDtnZlcnbDpGcgaW50ZSB0YWdnYXIgc29tIG1vdHN2YXJhciA8bcO2bnN0ZXI+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY3IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzUKK21zZ2lkICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siCittc2dzdHIgInZpc2EgZsO2cmtvcnRhZGUgaW5jaGVja25pbmdzb2JqZWt0IHNvbSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2OCBidWlsdGluL2Rlc2NyaWJlLmM6NTcxCittc2dpZCAibWFyayIKK21zZ3N0ciAibcOkcmtlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY5Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICJsw6RnZyB0aWxsIDxtw6Rya2U+IHDDpSBsb3J0aWd0IGFyYmV0c3Ryw6RkIChzdGFuZGFyZDogXCItZGlydHlcIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NzIKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGJyb2tlbiB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWJyb2tlblwiKSIKK21zZ3N0ciAibMOkZ2cgdGlsbCA8bcOkcmtlPiBww6UgdHJhc2lndCBhcmJldHN0csOkZCAoc3RhbmRhcmQ6IFwiLWJyb2tlblwiKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU5MAorbXNnaWQgIi0tbG9uZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFiYnJldj0wIgorbXNnc3RyICItLWxvbmcgw6RyIGlua29tcGF0aWJlbCBtZWQgLS1hYmJyZXY9MCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYxOQorbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICJJbmdhIG5hbW4gaGl0dGFkZXMsIGthbiBpbnRlIGJlc2tyaXZhIG7DpWdvdC4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NzAKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1kaXJ0eSDDpHIgaW5rb21wYXRpYmVsdCBtZWQgXCJjb21taXQtaXNoXCItdsOkcmRlbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY3MgorbXNnaWQgIi0tYnJva2VuIGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1icm9rZW4gw6RyIGlua29tcGF0aWJlbHQgbWVkIFwiY29tbWl0LWlzaFwiLXbDpHJkZW4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICJcIiVzXCI6IGludGUgZW4gbm9ybWFsIGZpbCBlbGxlciBzeW1ib2xpc2sgbMOkbmsiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIm9naWx0aWcgZmxhZ2dhOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzUwCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIkludGUgZXR0IGdpdC1hcmtpdiIKKworIzogYnVpbHRpbi9kaWZmLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJvYmpla3RldCBcIiVzXCIgc29tIGFuZ2F2cyDDpHIgZmVsYWt0aWd0LiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIm1lciDDpG4gdHbDpSBibG9iYmFyIGFuZ2F2czogXCIlc1wiIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAiZWogaGFudGVyYXQgb2JqZWt0IFwiJXNcIiBhbmdhdnMuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAKK21zZ2lkICJnaXQgZGlmZnRvb2wgWzxvcHRpb25zPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgZGlmZnRvb2wgWzxmbGFnZ29yPl0gWzxpbmNoZWNrbmluZz4gWzxpbmNoZWNrbmluZz5dXSBbLS1dIFs8c8O2a3bDpGc+Li4uXSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQ6ICVkIgorbXNnc3RyICJtaXNzbHlja2FkZXM6ICVkIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2Egc3ltYm9saXNrYSBsw6Rua2VuICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgZmlsZSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBzeW1ib2xpc2sgbMOkbmstZmlsICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyBmb3Igc3ltbGluayAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBvYmpla3RldCAlcyBmw7ZyIHN5bWJvbGlza2EgbMOkbmtlbiAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjQxMworbXNnaWQgIiIKKyJjb21iaW5lZCBkaWZmIGZvcm1hdHMoJy1jJyBhbmQgJy0tY2MnKSBhcmUgbm90IHN1cHBvcnRlZCBpblxuIgorImRpcmVjdG9yeSBkaWZmIG1vZGUoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4iCittc2dzdHIgIiIKKyJrb21iaW5lcmFkZSBkaWZmLWZvcm1hdCAoXCItY1wiIG9jaCBcIi0tY2NcIikgc3TDtmRzIGludGUgaVxuIgorImthdGFsb2dkaWZmbMOkZ2UgKFwiLWRcIiBvY2ggXCItLWRpci1kaWZmXCIpLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJib3RoIGZpbGVzIG1vZGlmaWVkOiAnJXMnIGFuZCAnJXMnLiIKK21zZ3N0ciAiYsOkZ2dlIGZpbGVybmEgw6RuZHJhZGU6IFwiJXNcIiBvY2ggXCIlc1wiLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNgorbXNnaWQgIndvcmtpbmcgdHJlZSBmaWxlIGhhcyBiZWVuIGxlZnQuIgorbXNnc3RyICJmaWxlbiBpIGFyYmV0c2thdGFsb2dlbiBsw6RtbmFkZXMga3Zhci4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcG9yYXJ5IGZpbGVzIGV4aXN0IGluICclcycuIgorbXNnc3RyICJ0ZW1wb3LDpHJhIGZpbGVyIGZpbm5zIGkgXCIlc1wiLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0OAorbXNnaWQgInlvdSBtYXkgd2FudCB0byBjbGVhbnVwIG9yIHJlY292ZXIgdGhlc2UuIgorbXNnc3RyICJkdSBrYW5za2UgdmlsbCBzdMOkZGEgZWxsZXIgcsOkZGRhIGRlbS4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTcKK21zZ2lkICJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIKK21zZ3N0ciAiYW52w6RuZCBcImRpZmYuZ3VpdG9vbFwiIGlzdMOkbGxldCBmw7ZyIFwiZGlmZi50b29sXCIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTkKK21zZ2lkICJwZXJmb3JtIGEgZnVsbC1kaXJlY3RvcnkgZGlmZiIKK21zZ3N0ciAidXRmw7ZyIGRpZmYgZsO2ciBoZWxhIGthdGFsb2dlbiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwMQorbXNnaWQgImRvIG5vdCBwcm9tcHQgYmVmb3JlIGxhdW5jaGluZyBhIGRpZmYgdG9vbCIKK21zZ3N0ciAiZnLDpWdhIGludGUgdmlkIHN0YXJ0IGF2IGRpZmYtdmVya3R5ZyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNgorbXNnaWQgInVzZSBzeW1saW5rcyBpbiBkaXItZGlmZiBtb2RlIgorbXNnc3RyICJhbnbDpG5kIHN5bWJvbGlza2EgbMOkbmthciBpIGthdGFsb2dkaWZmbMOkZ2UiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDcKK21zZ2lkICJ0b29sIgorbXNnc3RyICJ2ZXJrdHlnIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA4Cittc2dpZCAidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIgorbXNnc3RyICJhbnbDpG5kIGFuZ2l2ZXQgZGlmZi12ZXJrdHlnIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEwCittc2dpZCAicHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgIgorbXNnc3RyICJ2aXNhIGVuIGxpc3RhIMO2dmVyIGRpZmYtdmVya3R5ZyBzb20ga2FuIGFudsOkbmRhcyBtZWQgXCItLXRvb2xcIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxMworbXNnaWQgIiIKKyJtYWtlICdnaXQtZGlmZnRvb2wnIGV4aXQgd2hlbiBhbiBpbnZva2VkIGRpZmYgdG9vbCByZXR1cm5zIGEgbm9uIC0gemVybyBleGl0ICIKKyJjb2RlIgorbXNnc3RyICIiCisibMOldCBcImdpdC1kaWZmdG9vbFwiIGF2YnJ5dGEgbsOkciBldHQgYW5yb3BhdCBkaWZmLXZlcmt0eWcgZ2VyIHJldHVydsOkcmRlICIKKyJza2lsdCBmcsOlbiBub2xsIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE2Cittc2dpZCAic3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzIgorbXNnc3RyICJhbmdlIGVnZXQga29tbWFuZG8gZsO2ciBhdHQgdmlzYSBkaWZmYXIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTcKK21zZ2lkICJwYXNzZWQgdG8gYGRpZmZgIgorbXNnc3RyICJzw6RuZGVzIHRpbGwgXCJkaWZmXCIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzIKK21zZ2lkICJkaWZmdG9vbCByZXF1aXJlcyB3b3JrdHJlZSBvciAtLW5vLWluZGV4IgorbXNnc3RyICJkaWZmdG9vbCBrcsOkdmVyIGVuIGFyYmV0c2thdGFsb2cgZWxsZXIgLS1uby1pbmRleCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjczOQorbXNnaWQgIi0tZGlyLWRpZmYgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiLS1kaXItZGlmZiDDpHIgaW5rb21wYXRpYmVsdCBtZWQgLS1uby1pbmRleCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc0MgorbXNnaWQgIi0tZ3VpLCAtLXRvb2wgYW5kIC0tZXh0Y21kIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tZ3VpLCAtLXRvb2wgb2NoIC0tZXh0Y21kIMOkciDDtm1zZXNpZGlndCB1dGVzbHV0YW5kZSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1MAorbXNnaWQgIm5vIDx0b29sPiBnaXZlbiBmb3IgLS10b29sPTx0b29sPiIKK21zZ3N0ciAiaW5nZXQgPHZlcmt0eWc+IGFuZ2F2cyBmw7ZyIC0tdG9vbD08dmVya3R5Zz4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NTcKK21zZ2lkICJubyA8Y21kPiBnaXZlbiBmb3IgLS1leHRjbWQ9PGNtZD4iCittc2dzdHIgImluZ2V0IDxrb21tYW5kbz4gYW5nYXZzIGbDtnIgLS1leHRjbWQ9PGtvbW1hbmRvPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYKK21zZ2lkICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3B0aW9ucz4gPGVudi12YXI+IgorbXNnc3RyICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8ZmxhZ2dvcj4gPG1pbGrDtnZhcmlhYmVsPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjM3IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgInR5cGUiCittc2dzdHIgInR5cCIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQxCittc2dpZCAiZGVmYXVsdCBmb3IgZ2l0X2Vudl8qKC4uLikgdG8gZmFsbCBiYWNrIG9uIgorbXNnc3RyICJzdGFuZGFyZCBmw7ZyIGdpdF9lbnZfKiguLi4pIGF0dCBmYWxsYSB0aWxsYmFrYSBww6UiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MworbXNnaWQgImJlIHF1aWV0IG9ubHkgdXNlIGdpdF9lbnZfKigpIHZhbHVlIGFzIGV4aXQgY29kZSIKK21zZ3N0ciAidmFyIHR5c3QsIGFudsOkbmQgYmFyYSBnaXRfZW52XyooKSBzb20gcmVzdWx0YXR2w6RyZGUiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYC0tZGVmYXVsdCcgZXhwZWN0cyBhIGJvb2xlYW4gdmFsdWUgd2l0aCBgLS10eXBlPWJvb2xgLCBub3QgYCVzYCIKK21zZ3N0ciAiIgorImZsYWdnYW4gXCItLWRlZmF1bHRcIiBmw7ZydsOkbnRhciBldHQgc2FubmluZ3N2w6RyZGUgbWVkIFwiLS10eXBlPWJvb2xcIiwgaW50ZSAiCisiXCIlc1wiIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGFuIHVuc2lnbmVkIGxvbmcgdmFsdWUgd2l0aCBgLS10eXBlPXVsb25nYCwgbm90IGAiCisiJXNgIgorbXNnc3RyICIiCisiZmxhZ2dhbiBcIi0tZGVmYXVsdFwiIGbDtnJ2w6RudGFyIGV0dCB0ZWNrZW5sw7ZzdCBsw6VuZ3QgdsOkcmRlIG1lZCBcIi0tdHlwZT11bG9uZyIKKyJcIiwgaW50ZSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyOQorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3QtZmxhZ2dvcl0iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo4NTMKK21zZ2lkICJFcnJvcjogQ2Fubm90IGV4cG9ydCBuZXN0ZWQgdGFncyB1bmxlc3MgLS1tYXJrLXRhZ3MgaXMgc3BlY2lmaWVkLiIKK21zZ3N0ciAiRmVsOiBLYW4gaW50ZSBleHBvcnRlcmEgbsOkc3RsYWRlIHRhZ2dhciBzw6V2aWRhIGludGUgLS1tYXJrLXRhZ3MgYW5nZXMuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgYWZ0ZXIgPG4+IG9iamVjdHMiCittc2dzdHIgInZpc2EgZsO2cmxvcHAgZWZ0ZXIgPG4+IG9iamVrdCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTQKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgInbDpGxqIGhhbnRlcmluZyBhdiBzaWduZXJhZGUgdGFnZ2FyIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NworbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgInbDpGxqIGhhbnRlcmluZyBhdiB0YWdnYXIgc29tIGhhciB0YWdnZmlsdHJlcmFkZSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYwCittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIGNvbW1pdCBtZXNzYWdlcyBpbiBhbiBhbHRlcm5hdGUgZW5jb2RpbmciCittc2dzdHIgInbDpGxqIGhhbnRlcmluZyBhdiBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlbiBpIGFsdGVybmF0aXYgdGVja2Vua29kbmluZyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjMKK21zZ2lkICJEdW1wIG1hcmtzIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAiRHVtcGEgbcOkcmtlbiB0aWxsIGZpbGVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2NQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSIKK21zZ3N0ciAiSW1wb3J0ZXJhIG3DpHJrZW4gZnLDpW4gZmlsZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY5Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAiSW1wb3J0ZXJhIG3DpHJrZW4gZnLDpW4gZmlsZW4sIG9tIGRlbiBmaW5ucyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzEKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAiRmVqa2EgdGFnZ2FyZSBuw6RyIHRhZ2dlbiBzYWtuYXIgZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTczCittc2dpZCAiT3V0cHV0IGZ1bGwgdHJlZSBmb3IgZWFjaCBjb21taXQiCittc2dzdHIgIlNrcml2IHV0IGhlbGEgdHLDpGRldCBmw7ZyIHZhcmplIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NQorbXNnaWQgIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIgorbXNnc3RyICJBbnbDpG5kIGRvbmUtZnVua3Rpb25lbiBmw7ZyIGF0dCBhdnNsdXRhIHN0csO2bW1lbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzYKK21zZ2lkICJTa2lwIG91dHB1dCBvZiBibG9iIGRhdGEiCittc2dzdHIgIkhvcHBhIMO2dmVyIHNrcml2bmluZyBhdiBibG9iLWRhdGEiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc3IGJ1aWx0aW4vbG9nLmM6MTcwNQorbXNnaWQgInJlZnNwZWMiCittc2dzdHIgInJlZmVyZW5zc3BlY2lmaWthdGlvbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzgKK21zZ2lkICJBcHBseSByZWZzcGVjIHRvIGV4cG9ydGVkIHJlZnMiCittc2dzdHIgIkFwcGxpY2VyYSByZWZlcmVuc3NwZWNpZmlrYXRpb24gcMOlIGV4cG9ydGVyYWRlIHJlZmVyZW5zZXIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc5Cittc2dpZCAiYW5vbnltaXplIG91dHB1dCIKK21zZ3N0ciAiYW5vbnltaXNlcmEgdXRkYXRhIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MQorbXNnaWQgIlJlZmVyZW5jZSBwYXJlbnRzIHdoaWNoIGFyZSBub3QgaW4gZmFzdC1leHBvcnQgc3RyZWFtIGJ5IG9iamVjdCBpZCIKK21zZ3N0ciAiUmVmZXJlcmEgZsO2csOkbGRyYXIgc29tIGludGUgZmlubnMgaSBmYXN0LWV4cG9ydC1zdHLDtm0gbWVkIG9iamVrdC1pZCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODMKK21zZ2lkICJTaG93IG9yaWdpbmFsIG9iamVjdCBpZHMgb2YgYmxvYnMvY29tbWl0cyIKK21zZ3N0ciAiVmlzYSB1cnNwcnVuZ2xpZ2Egb2JqZWt0LWlkIGbDtnIgYmxvYmJhci9pbmNoZWNrbmluZ2FyIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4NQorbXNnaWQgIkxhYmVsIHRhZ3Mgd2l0aCBtYXJrIGlkcyIKK21zZ3N0ciAiTcOkcmsgdGFnZ2FyIG1lZCBtw6Rya2UtaWQiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMjIwCittc2dpZCAiQ2Fubm90IHBhc3MgYm90aCAtLWltcG9ydC1tYXJrcyBhbmQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorbXNnc3RyICJLYW4gaW50ZSBhbmdlIGLDpWRlIC0taW1wb3J0LW1hcmtzIG9jaCAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNAorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8ZmxhZ2dvcj5dIFs8YXJraXY+IFs8cmVmc3BlYz4uLi5dXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cD4iCittc2dzdHIgImdpdCBmZXRjaCBbPGZsYWdnb3I+XSA8Z3J1cHA+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MzYKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxmbGFnZ29yPl0gWyg8YXJraXY+IHwgPGdydXBwPikuLi5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzcKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBmZXRjaCAtLWFsbCBbPGZsYWdnb3I+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNgorbXNnaWQgImZldGNoLnBhcmFsbGVsIGNhbm5vdCBiZSBuZWdhdGl2ZSIKK21zZ3N0ciAiZmV0Y2gucGFyYWxsZWwga2FuIGludGUgdmFyYSBuZWdhdGl2dCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzOSBidWlsdGluL3B1bGwuYzoxODQKK21zZ2lkICJmZXRjaCBmcm9tIGFsbCByZW1vdGVzIgorbXNnc3RyICJow6RtdGEgZnLDpW4gYWxsYSBmasOkcnJhciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MSBidWlsdGluL3B1bGwuYzoyMjgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL2ZldGNoIgorbXNnc3RyICJzdMOkbGwgaW4gdXBwc3Ryw7ZtIGbDtnIgZ2l0IHB1bGwvZmV0Y2giCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMgYnVpbHRpbi9wdWxsLmM6MTg3Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICJsw6RnZyB0aWxsIGkgLmdpdC9GRVRDSF9IRUFEIGlzdMOkbGxldCBmw7ZyIGF0dCBza3JpdmEgw7Z2ZXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDUgYnVpbHRpbi9wdWxsLmM6MTkwCittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICJzw7ZrdsOkZyB0aWxsIHVwbG9hZCBwYWNrIHDDpSBmasOkcnJlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NgorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCByZWZlcmVuY2UiCittc2dzdHIgInR2aW5nYSDDtnZlcnNrcml2bmluZyBhdiBsb2thbCByZWZlcmVucyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0OAorbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAiaMOkbXRhIGZyw6VuIGZsZXJhIGZqw6RycmFyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUwIGJ1aWx0aW4vcHVsbC5jOjE5NAorbXNnaWQgImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgImjDpG10YSBhbGxhIHRhZ2dhciBvY2ggYXNzb2NpZXJhZGUgb2JqZWt0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUyCittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICJow6RtdGEgaW50ZSBhbGxhIHRhZ2dhciAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgImFudGFsIHVuZGVybW9kdWxlciBzb20gaMOkbXRhcyBwYXJhbGxlbGx0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2IGJ1aWx0aW4vcHVsbC5jOjE5NworbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICJyZW5zYSBmasOkcnJzcMOlcmFuZGUgZ3JlbmFyIGVqIGzDpG5ncmUgcMOlIGZqw6RycmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4Cittc2dpZCAicHJ1bmUgbG9jYWwgdGFncyBubyBsb25nZXIgb24gcmVtb3RlIGFuZCBjbG9iYmVyIGNoYW5nZWQgdGFncyIKK21zZ3N0ciAiIgorInJlbnNhIGxva2FsYSB0YWdnYXIgaW50ZSBsw6RuZ3JlIHDDpSBmasOkcnJlbiBvY2ggc2tyaXYgw7Z2ZXIgw6RuZHJhZGUgdGFnZ2FyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU5IGJ1aWx0aW4vZmV0Y2guYzoxODIgYnVpbHRpbi9wdWxsLmM6MTIxCittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICJvbi1kZW1hbmQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjAKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJzdHlyIHJla3Vyc2l2IGjDpG10bmluZyBhdiB1bmRlcm1vZHVsZXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9wdWxsLmM6MjA1Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgImJlaMOlbGwgaMOkbXRhZGUgcGFrZXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjYKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAidGlsbMOldCB1cHBkYXRlcmluZyBhdiBIRUFELXJlZmVyZW5zIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY5IGJ1aWx0aW4vZmV0Y2guYzoxNzUgYnVpbHRpbi9wdWxsLmM6MjA4Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAiZsO2cmRqdXBhIGhpc3RvcmlrIGbDtnIgZ3J1bmQga2xvbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MQorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aW1lIgorbXNnc3RyICJmw7ZyZGp1cGEgaGlzdG9yaWsgZsO2ciBncnVuZCBrbG9uIGJhc2VyYWQgcMOlIHRpZCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NyBidWlsdGluL3B1bGwuYzoyMTEKK21zZ2lkICJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAia29udmVydGVyYSB0aWxsIGtvbXBsZXR0IGFya2l2IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwCittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAibMOkZ2cgdGlsbCBpIGLDtnJqYW4gYXYgdW5kZXJtb2R1bGVucyBzw7ZrdsOkZ3N1dGRhdGEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODMKK21zZ2lkICIiCisiZGVmYXVsdCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKGxvd2VyIHByaW9yaXR5IHRoYW4gY29uZmlnICIKKyJmaWxlcykiCittc2dzdHIgIiIKKyJzdGFuZGFyZCBmw7ZyIHJla3Vyc2l2IGjDpG10bmluZyBhdiB1bmRlcm1vZHVsZXIgKGzDpGdyZSBwcmlvcml0ZXQgw6RuICIKKyJrb25maWd1cmF0aW9uc2ZpbGVyKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NyBidWlsdGluL3B1bGwuYzoyMTQKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgInRhciBlbW90IHJlZmVyZW5zZXIgc29tIHVwcGRhdGVyYXIgLmdpdC9zaGFsbG93IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg4IGJ1aWx0aW4vcHVsbC5jOjIxNgorbXNnaWQgInJlZm1hcCIKK21zZ3N0ciAicmVmZXJlbnNrYXJ0YSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OSBidWlsdGluL3B1bGwuYzoyMTcKK21zZ2lkICJzcGVjaWZ5IGZldGNoIHJlZm1hcCIKK21zZ3N0ciAiYW5nZSByZWZlcmVuc2thcnRhIGbDtnIgXCJmZXRjaFwiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk2Cittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgInJhcHBvcnRlcmEgYXR0IHZpIGJhcmEgaGFyIG9iamVrdCBuw6ViYXJhIGZyw6VuIGRldHRhIG9iamVrdGV0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk5Cittc2dpZCAicnVuICdnYyAtLWF1dG8nIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJrw7ZyIFwiZ2MgLS1hdXRvXCIgZWZ0ZXIgaMOkbXRuaW5nIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAxIGJ1aWx0aW4vcHVsbC5jOjIyNgorbXNnaWQgImNoZWNrIGZvciBmb3JjZWQtdXBkYXRlcyBvbiBhbGwgdXBkYXRlZCBicmFuY2hlcyIKK21zZ3N0ciAic2UgZWZ0ZXIgdHZpbmdhZGUgdXBwZGF0ZXJpbmdhciBpIGFsbGEgdXBwZGF0ZXJhZGUgZ3JlbmFyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAzCittc2dpZCAid3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAic2tyaXYgaW5jaGVja2luZ3NncmFmZW4gZWZ0ZXIgaMOkbXRuaW5nIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEzCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIkt1bmRlIGludGUgaGl0dGEgZmrDpHJyLXJlZmVyZW5zZW4gSEVBRCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWd1cmF0aW9uIGZldGNoLm91dHB1dCBjb250YWlucyBpbnZhbGlkIHZhbHVlICVzIgorbXNnc3RyICJrb25maWd1cmF0aW9uZW4gZsO2ciBmZXRjaC5vdXRwdXQgaW5uZWjDpWxsZXIgb2dpbHRpZ3QgdsOkcmRlICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgIm9iamVrdGV0ICVzIGhpdHRhZGVzIGludGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTUKK21zZ2lkICJbdXAgdG8gZGF0ZV0iCittc2dzdHIgIlvDoGpvdXJdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY4IGJ1aWx0aW4vZmV0Y2guYzo3ODQgYnVpbHRpbi9mZXRjaC5jOjg1NgorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIltyZWZ1c2VyYWRdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY5Cittc2dpZCAiY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2giCittc2dzdHIgImthbiBpbnRlIGjDpG10YSBpIGFrdHVlbGwgZ3JlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc3OQorbXNnaWQgIlt0YWcgdXBkYXRlXSIKK21zZ3N0ciAiW3VwcGRhdGVyYWQgdGFnZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODAgYnVpbHRpbi9mZXRjaC5jOjgxNyBidWlsdGluL2ZldGNoLmM6ODM5CisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgImt1bmRlIGludGUgdXBwZGF0ZXJhIGxva2FsIHJlZiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4NAorbXNnaWQgIndvdWxkIGNsb2JiZXIgZXhpc3RpbmcgdGFnIgorbXNnc3RyICJza3VsbGUgc2tyaXZhIMO2dmVyIGJlZmludGxpZyB0YWdnIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODA2Cittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICJbbnkgdGFnZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDkKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIltueSBncmVuXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMgorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiW255IHJlZl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICJ0dmluZ2FkIHVwcGRhdGVyaW5nIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiZWogc25hYmJzcG9sYWQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NzcKK21zZ2lkICIiCisiRmV0Y2ggbm9ybWFsbHkgaW5kaWNhdGVzIHdoaWNoIGJyYW5jaGVzIGhhZCBhIGZvcmNlZCB1cGRhdGUsXG4iCisiYnV0IHRoYXQgY2hlY2sgaGFzIGJlZW4gZGlzYWJsZWQuIFRvIHJlLWVuYWJsZSwgdXNlICctLXNob3ctZm9yY2VkLXVwZGF0ZXMnXG4iCisiZmxhZyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgdHJ1ZScuIgorbXNnc3RyICIiCisiRmV0Y2ggdmlzYXIgbm9ybWFsdCB2aWxrYSBncmVuYXIgc29tIHR2w6VuZ3N1cHBkYXRlcmF0cywgbWVuIHRlc3RldCBoYXIgIgorInNsYWdpdHNcbiIKKyJhdi4gRsO2ciBhdHQgc2zDpSBww6UgaWdlbiwgYW52w6RuZCBmbGFnZ2FuIFwiLS1zaG93LWZvcmNlZC11cGRhdGVzXCIgZWxsZXIga8O2clxuIgorIlwiZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlXCIuIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjaGVjayBmb3JjZWQgdXBkYXRlcy4gWW91IGNhbiB1c2VcbiIKKyInLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgIgorImZhbHNlJ1xuIgorIiB0byBhdm9pZCB0aGlzIGNoZWNrLlxuIgorbXNnc3RyICIiCisiRGV0IHRvZyAlLjJmIHNla3VuZGVyIGF0dCBzZSBlZnRlciB0dsOlbmdzdXBwZGF0ZXJpbmdhci4gRHUga2FuIGFudsOkbmRhXG4iCisiXCItLW5vLXNob3ctZm9yY2VkLXVwZGF0ZXNcIiBlbGxlciBrw7ZyYSBcImdpdCBjb25maWcgZmV0Y2guIgorInNob3dGb3JjZWRVcGRhdGVzXG4iCisiZmFsc2VcIiBmw7ZyIGF0dCB1bmR2aWthIHRlc3RldC5cbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzIHPDpG5kZSBpbnRlIGFsbGEgbsO2ZHbDpG5kaWdhIG9iamVrdFxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTQxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgImF2dmlzYSAlcyBkw6UgZ3J1bmRhIHLDtnR0ZXIgaW50ZSBrYW4gdXBwZGF0ZXJhcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMjYgYnVpbHRpbi9mZXRjaC5jOjExNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIkZyw6VuICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorInZpc3NhIGxva2FsYSByZWZlcmVuc2VyIGt1bmRlIGludGUgdXBwZGF0ZXJhczsgdGVzdGEgYXR0IGvDtnJhXG4iCisiIFwiZ2l0IHJlbW90ZSBwcnVuZSAlc1wiIGbDtnIgYXR0IHRhIGJvcnQgZ2FtbGEgZ3JlbmFyIHNvbSBzdMOlciBpIGtvbmZsaWt0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMga29tbWVyIGJsaSBkaW5nbGFuZGUpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyBoYXIgYmxpdml0IGRpbmdsYW5kZSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTY3Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICJbYm9ydHRhZ2VuXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNjggYnVpbHRpbi9yZW1vdGUuYzoxMTEyCittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIoaW5nZW4pIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIlbDpGdyYXIgaMOkbXRhIHRpbGwgYWt0dWVsbCBncmVuICVzIGkgZXR0IGlja2UtbmFrZXQgYXJraXYiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIkZsYWdnYW4gXCIlc1wiIG9jaCB2w6RyZGV0IFwiJXNcIiDDpHIgaW50ZSBnaWx0aWd0IGbDtnIgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAiRmxhZ2dhbiBcIiVzXCIgaWdub3JlcmFzIGbDtnIgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MjEKK21zZ2lkICJtdWx0aXBsZSBicmFuY2hlcyBkZXRlY3RlZCwgaW5jb21wYXRpYmxlIHdpdGggLS1zZXQtdXBzdHJlYW0iCittc2dzdHIgImZsZXJhIGdyZW5hciB1cHB0w6Rja3RlcywgaW5rb21wYXRpYmVsdCBtZWQgLS1zZXQtdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDM2Cittc2dpZCAibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgInN0w6RsbGVyIGludGUgaW4gdXBwc3Ryw7Ztc2dyZW4gZsO2ciBlbiBmasOkcnJzcMOlcmFuZGUgZ3JlbiBww6UgZmrDpHJyZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDM4Cittc2dpZCAibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHRhZyIKK21zZ3N0ciAic3TDpGxsZXIgaW50ZSBpbiB1cHBzdHLDtm0gZsO2ciBlbiBmasOkcnJ0YWciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDQwCittc2dpZCAidW5rbm93biBicmFuY2ggdHlwZSIKK21zZ3N0ciAib2vDpG5kIGdyZW50eXAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDQyCittc2dpZCAiIgorIm5vIHNvdXJjZSBicmFuY2ggZm91bmQuXG4iCisieW91IG5lZWQgdG8gc3BlY2lmeSBleGFjdGx5IG9uZSBicmFuY2ggd2l0aCB0aGUgLS1zZXQtdXBzdHJlYW0gb3B0aW9uLiIKK21zZ3N0ciAiIgorImhpdHRhZGUgaW5nZW4ga8OkbGxncmVuLlxuIgorImR1IG3DpXN0ZSBhbmdlIGV4YWt0IGVuIGdyZW4gbWVkIGZsYWdnYW4gLS1zZXQtdXBzdHJlYW0uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2OCBidWlsdGluL2ZldGNoLmM6MTYzMQorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICJIw6RtdGFyICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTc4IGJ1aWx0aW4vZmV0Y2guYzoxNjMzIGJ1aWx0aW4vcmVtb3RlLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBow6RtdGEgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmZXRjaCAnJXMnIChleGl0IGNvZGU6ICVkKVxuIgorbXNnc3RyICJrdW5kZSBpbnRlIGjDpG10YSBcIiVzXCIgKGZlbGtvZDogJWQpXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjkzCittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJJbmdldCBmasOkcnJhcmtpdiBhbmdhdnMuIEFuZ2UgYW50aW5nZW4gZW4gVVJMIGVsbGVyIG5hbW5ldCBww6UgZXR0XG4iCisiZmrDpHJyYXJraXYgc29tIG55YSBpbmNoZWNrbmluZ2FyIHNrYSBow6RtdGFzIGZyw6VuLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MzAKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICJEdSBtw6VzdGUgYW5nZSBuYW1uZXQgcMOlIGVuIHRhZ2cuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc4MAorbXNnaWQgIk5lZ2F0aXZlIGRlcHRoIGluIC0tZGVlcGVuIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIk5lZ2F0aXZhIGRqdXAgc3TDtmRzIGludGUgaSAtLWRlZXBlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODIKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWRlZXBlbiBvY2ggLS1kZXB0aCDDpHIgw7Ztc2VzaWRpZ3QgdXRlc2x1dGFuZGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzg3Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi0tZGVwdGggb2NoIC0tdW5zaGFsbG93IGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzg5Cittc2dpZCAiLS11bnNoYWxsb3cgb24gYSBjb21wbGV0ZSByZXBvc2l0b3J5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tdW5zaGFsbG93IGthbiBpbnRlIGFudsOkbmRhcyBww6UgZXR0IGtvbXBsZXR0IGFya2l2IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwNQorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICJmZXRjaCAtLWFsbCB0YXIgaW50ZSBuYW1uZXQgcMOlIGV0dCBhcmtpdiBzb20gYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODA3Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJmZXRjaCAtLWFsbCBrYW4gaW50ZSBhbmdlcyBtZWQgcmVmZXJlbnNzcGVjaWZpa2F0aW9uZXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODE2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgIkZqw6RycmVuIGVsbGVyIGZqw6RycmdydXBwZW4gZmlubnMgaW50ZTogJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODIzCittc2dpZCAiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJLYW4gaW50ZSBow6RtdGEgZnLDpW4gZ3J1cHAgb2NoIGFuZ2UgcmVmZXJlbnNzcGVjaWZpa2F0aW9uZXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODQxCittc2dpZCAiIgorIi0tZmlsdGVyIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgcmVtb3RlIGNvbmZpZ3VyZWQgaW4gZXh0ZW5zaW9ucy4iCisicGFydGlhbGNsb25lIgorbXNnc3RyICIiCisiLS1maWx0ZXIga2FuIGVuZGFzdCBhbnbDpG5kYXMgbWVkIGZqw6RycmVuIGtvbmZpZ3VyZXJhZCBpIGV4dGVuc2lvbnMuIgorInBhcnRpYWxjbG9uZSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTgKK21zZ2lkICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVkZGVsYW5kZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWw+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcxCittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICJmeWxsIGkgbG9nZ2VuIG1lZCBzb20gbWVzdCA8bj4gcG9zdGVyIGZyw6VuIHNob3J0bG9nIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzQKK21zZ2lkICJhbGlhcyBmb3IgLS1sb2cgKGRlcHJlY2F0ZWQpIgorbXNnc3RyICJhbGlhcyBmw7ZyIC0tbG9nIChhdnLDpWRzKSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc3Cittc2dpZCAidGV4dCIKK21zZ3N0ciAidGV4dCIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc4Cittc2dpZCAidXNlIDx0ZXh0PiBhcyBzdGFydCBvZiBtZXNzYWdlIgorbXNnc3RyICJpbmxlZCBtZWRkZWxhbmRlIG1lZCA8dGV4dD4iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3OQorbXNnaWQgImZpbGUgdG8gcmVhZCBmcm9tIgorbXNnc3RyICJmaWwgYXR0IGzDpHNhIGZyw6VuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbPGZsYWdnb3I+XSBbPG3Dtm5zdGVyPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTEKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMgorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbW1pdD5dXSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8aW5jaGVja25pbmc+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTMKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIFstLW5vLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIgorbXNnc3RyICIiCisiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPGluY2hlY2tuaW5nPl1dIFstLW5vLWNvbnRhaW5zIFs8aW5jaGVja25pbmc+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjgKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAiY2l0ZXJhIHBsYXRzaMOlbGxhcmUgcGFzc2FuZGUgZsO2ciBza2FsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMwCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBwZXJsIgorbXNnc3RyICJjaXRlcmEgcGxhdHNow6VsbGFyZSBwYXNzYW5kZSBmw7ZyIHBlcmwiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzIKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHB5dGhvbiIKK21zZ3N0ciAiY2l0ZXJhIHBsYXRzaMOlbGxhcmUgcGFzc2FuZGUgZsO2ciBweXRob24iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAiY2l0ZXJhIHBsYXRzaMOlbGxhcmUgcGFzc2FuZGUgZsO2ciBUY2wiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzcKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAidmlzYSBlbmRhc3QgPG4+IHRyw6RmZmFkZSByZWZzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM5IGJ1aWx0aW4vdGFnLmM6NDM5Cittc2dpZCAicmVzcGVjdCBmb3JtYXQgY29sb3JzIgorbXNnc3RyICJhbnbDpG5kIGZvcm1hdGbDpHJnZXIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggcG9pbnRzIGF0IHRoZSBnaXZlbiBvYmplY3QiCittc2dzdHIgInZpc2EgZW5kYXN0IHJlZmVyZW5zZXIgc29tIHBla2FyIHDDpSBvYmpla3RldCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NAorbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgInZpc2EgZW5kYXN0IHJlZmVyZW5zZXIgc29tIHNsYWdpdHMgc2FtbWFuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ1Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgInZpc2EgZW5kYXN0IHJlZmVyZW5zZXIgc29tIGVqIHNsYWdpdHMgc2FtbWFuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ2Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgcmVmZXJlbnNlciBzb20gaW5uZWjDpWxsZXIgaW5jaGVja25pbmdlbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NworbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgInZpc2EgZW5kYXN0IHJlZmVyZW5zZXIgc29tIGludGUgaW5uZWjDpWxsZXIgaW5jaGVja25pbmdlbiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjggYnVpbHRpbi9mc2NrLmM6MTQ3IGJ1aWx0aW4vZnNjay5jOjE0OAorbXNnaWQgInVua25vd24iCittc2dzdHIgIm9rw6RuZCIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTAwIGJ1aWx0aW4vZnNjay5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiAlcyAlczogJXMiCittc2dzdHIgImZlbCBpICVzICVzOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gd2FybmluZyBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+CisjOiBidWlsdGluL2ZzY2suYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZyBpbiAlcyAlczogJXMiCittc2dzdHIgInZhcm5pbmcgaSAlcyAlczogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE0MyBidWlsdGluL2ZzY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXMiCittc2dzdHIgInRyYXNpZyBsw6RuayBmcsOlbiAlN3MgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE1NQorbXNnaWQgIndyb25nIG9iamVjdCB0eXBlIGluIGxpbmsiCittc2dzdHIgImZlbCBvYmpla3R0eXAgaSBsw6RuayIKKworIzogYnVpbHRpbi9mc2NrLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJicm9rZW4gbGluayBmcm9tICU3cyAlc1xuIgorIiAgICAgICAgICAgICAgdG8gJTdzICVzIgorbXNnc3RyICIiCisidHJhc2lnIGzDpG5rIGZyw6VuICU3cyAlc1xuIgorIiAgICAgICAgICAgIHRpbGwgJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyAlcyIKK21zZ3N0ciAic2FrbmF0ICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWFjaGFibGUgJXMgJXMiCittc2dzdHIgIm9uw6ViYXJ0ICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGFuZ2xpbmcgJXMgJXMiCittc2dzdHIgImjDpG5nYW5kZSAlcyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzM5Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsb3N0LWZvdW5kIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIGxvc3QtZm91bmQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoICclcyciCittc2dzdHIgImt1bmRlIGludGUgYXZzbHV0YSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyIKK21zZ3N0ciAiS29udHJvbGxlcmFyICVzIgorCisjIFZhZ3VlIG9yaWdpbmFsLCBub3QgbmV0d29ya2luZy1yZWxhdGVkLCBidXQgcmF0aGVyIHJlbGF0ZWQgdG8gdGhlIGFjdHVhbAorIyBvYmplY3RzIGluIHRoZSBkYXRhYmFzZS4KKyM6IGJ1aWx0aW4vZnNjay5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkgKCVkIG9iamVjdHMpIgorbXNnc3RyICJLb250cm9sbGVyYXIga29ubmVrdGl2aXRldCAoJWQgb2JqZWt0KSIKKworIzogYnVpbHRpbi9mc2NrLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzICVzIgorbXNnc3RyICJLb250cm9sbGVyYXIgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyOQorbXNnaWQgImJyb2tlbiBsaW5rcyIKK21zZ3N0ciAidHJhc2lnYSBsw6Rua2FyIgorCisjOiBidWlsdGluL2ZzY2suYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCAlcyIKK21zZ3N0ciAicm90ZW4gJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWdnZWQgJXMgJXMgKCVzKSBpbiAlcyIKK21zZ3N0ciAidGFnZ2FkICVzICVzICglcykgaSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nIgorbXNnc3RyICIlczogb2JqZWt0IHRyYXNpZ3QgZWxsZXIgc2FrbmFzIgorCisjOiBidWlsdGluL2ZzY2suYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgcmVmbG9nIGVudHJ5ICVzIgorbXNnc3RyICIlczogb2dpbHRpZyByZWZsb2ctcG9zdCAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlZmxvZyAlcy0+JXMiCittc2dzdHIgIktvbnRyb2xsZXJhciByZWZsb2cgJXMtPiVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyICVzIgorbXNnc3RyICIlczogb2dpbHRpZyBzaGExLXBla2FyZSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSBjb21taXQiCittc2dzdHIgIiVzOiBpbnRlIGVuIGluY2hlY2tuaW5nISIKKworIzogYnVpbHRpbi9mc2NrLmM6NjA5Cittc2dpZCAibm90aWNlOiBObyBkZWZhdWx0IHJlZmVyZW5jZXMiCittc2dzdHIgIm9iczogSW5nYSBmw7ZydmFsZGEgcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9mc2NrLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiJXM6IG9iamVrdGV0IHRyYXNpZ3QgZWxsZXIgc2FrbmFzOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY291bGQgbm90IGJlIHBhcnNlZDogJXMiCittc2dzdHIgIiVzOiBvYmpla3RldCBrdW5kZSBpbnRlIHRvbGthczogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY1NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc2hhMSBmaWxlOiAlcyIKK21zZ3N0ciAib2dpbHRpZyBzaGExLWZpbDogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3MgorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcnkiCittc2dzdHIgIktvbnRyb2xsZXJhciBvYmpla3RrYXRhbG9nIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzUKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgIktvbnRyb2xsZXJhciBvYmpla3RrYXRhbG9nZXIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyBsaW5rIgorbXNnc3RyICJLb250cm9sbGVyYXIgJXMtbMOkbmsiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY5NSBidWlsdGluL2luZGV4LXBhY2suYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyIKK21zZ3N0ciAib2dpbHRpZ3QgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIKK21zZ3N0ciAiJXMgcGVrYXIgcMOlIG7DpWdvdCBrb25zdGlndCAoJXMpIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRldGFjaGVkIEhFQUQgcG9pbnRzIGF0IG5vdGhpbmciCittc2dzdHIgIiVzOiBmcsOlbmtvcHBsYXQgSEVBRCBwZWthciBww6UgaW5nZW50aW5nIgorCisjOiBidWlsdGluL2ZzY2suYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aWNlOiAlcyBwb2ludHMgdG8gYW4gdW5ib3JuIGJyYW5jaCAoJXMpIgorbXNnc3RyICJvYnM6ICVzIHBla2FyIHDDpSBlbiBvZsO2ZGQgZ3JlbiAoJXMpIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjQKK21zZ2lkICJDaGVja2luZyBjYWNoZSB0cmVlIgorbXNnc3RyICJLb250cm9sbGVyYXIgY2FjaGV0csOkZCIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciBpbiBjYWNoZS10cmVlIgorbXNnc3RyICIlczogb2dpbHRpZyBzaGExLXBla2FyZSBpIGNhY2hldHLDpGQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjczOAorbXNnaWQgIm5vbi10cmVlIGluIGNhY2hlLXRyZWUiCittc2dzdHIgImlja2UtdHLDpGQgaSBjYWNoZXRyw6RkIgorCisjOiBidWlsdGluL2ZzY2suYzo3NjkKK21zZ2lkICJnaXQgZnNjayBbPG9wdGlvbnM+XSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgZnNjayBbPGZsYWdnb3I+XSBbPG9iamVrdD4uLi5dIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzUKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgInZpc2Egb27DpWJhcmEgb2JqZWt0IgorCisjOiBidWlsdGluL2ZzY2suYzo3NzYKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgInZpc2EgZGluZ2xhbmRlIG9iamVrdCIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc3Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgInJhcHBvcnRlcmEgdGFnZ2FyIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzgKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAicmFwcG9ydGVyYSByb3Rub2RlciIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc5Cittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgImfDtnIgaW5kZXhvamVrdCB0aWxsIGh1dnVkbm9kZXIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MAorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAiZ8O2ciByZWZsb2dnYXIgdGlsbCBodXZ1ZG5vZGVyIChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MQorbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICJ0YSDDpHZlbiBow6Ruc3luIHRpbGwgcGFrZXQgb2NoIHN1cHBsZXJhbmRlIG9iamVrdCIKKworIyBWYWd1ZSBvcmlnaW5hbCwgbm90IG5ldHdvcmtpbmctcmVsYXRlZCwgYnV0IHJhdGhlciByZWxhdGVkIHRvIHRoZSBhY3R1YWwKKyMgb2JqZWN0cyBpbiB0aGUgZGF0YWJhc2UuCisjOiBidWlsdGluL2ZzY2suYzo3ODIKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAia29udHJvbGxlcmEgZW5kYXN0IGtvbm5la3Rpdml0ZXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MworbXNnaWQgImVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZyIKK21zZ3N0ciAiYWt0aXZlcmEgc3RyaWt0YXJlIGtvbnRyb2xsIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODUKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAic2tyaXYgZGluZ2xhbmRlIG9iamVrdCBpIC5naXQvbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg2IGJ1aWx0aW4vcHJ1bmUuYzoxMzIKK21zZ2lkICJzaG93IHByb2dyZXNzIgorbXNnc3RyICJ2aXNhIGbDtnJsb3BwIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODcKK21zZ2lkICJzaG93IHZlcmJvc2UgbmFtZXMgZm9yIHJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJ2aXNhIG9yZHJpa2EgbmFtbiBmw7ZyIG7DpWJhcmEgb2JqZWt0IgorCisjOiBidWlsdGluL2ZzY2suYzo4NDYgYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI1Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiS29udHJvbGxlcmFyIG9iamVrdCIKKworIzogYnVpbHRpbi9mc2NrLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgbWlzc2luZyIKK21zZ3N0ciAiJXM6IG9iamVrdCBzYWtuYXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlcjogZXhwZWN0ZWQgc2hhMSwgZ290ICclcyciCittc2dzdHIgIm9naWx0aWcgcGFyYW1ldGVyOiBmw7ZydsOkbnRhZGUgc2hhMSwgZmljayBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vZ2MuYzozNQorbXNnaWQgImdpdCBnYyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGdjIFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL2djLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZzdGF0ICVzOiAlcyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIHRhIHN0YXR1cyAoZnN0YXQpIHDDpSAlczogJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlICclcycgdmFsdWUgJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRvbGthIFwiJXNcIiB2w6RyZGUgXCIlc1wiIgorCisjOiBidWlsdGluL2djLmM6NDc1IGJ1aWx0aW4vaW5pdC1kYi5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgImthbiBpbnRlIHRhIHN0YXR1cyBww6UgXCIlc1wiIgorCisjOiBidWlsdGluL2djLmM6NDg0IGJ1aWx0aW4vbm90ZXMuYzoyNDAgYnVpbHRpbi90YWcuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBsYXN0IGdjIHJ1biByZXBvcnRlZCB0aGUgZm9sbG93aW5nLiBQbGVhc2UgY29ycmVjdCB0aGUgcm9vdCBjYXVzZVxuIgorImFuZCByZW1vdmUgJXMuXG4iCisiQXV0b21hdGljIGNsZWFudXAgd2lsbCBub3QgYmUgcGVyZm9ybWVkIHVudGlsIHRoZSBmaWxlIGlzIHJlbW92ZWQuXG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJTZW5hc3RlIGvDtnJuaW5nZW4gYXYgZ2l0IGdjIHJhcHBvcnRlcmFkZSBmw7ZsamFuZGUuIEZpeGEgZ3J1bmRwcm9ibGVtZXRcbiIKKyJvY2ggdGEgYm9ydCAlcy5cbiIKKyJBdXRvbWF0aXNrIHN0w6RkbmluZyBrb21tZXIgaW50ZSB1dGbDtnJhcyBmw7ZycsOkbiBmaWxlbiB0YXMgYm9ydC5cbiIKKyJcbiIKKyIlcyIKKworIzogYnVpbHRpbi9nYy5jOjUzOQorbXNnaWQgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICJyZW5zYSBlaiByZWZlcmVyYWRlIG9iamVrdCIKKworIzogYnVpbHRpbi9nYy5jOjU0MQorbXNnaWQgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIKK21zZ3N0ciAidmFyIG1lciBncnVuZGxpZyAow7ZrYXIga8O2cnRpZGVuKSIKKworIzogYnVpbHRpbi9nYy5jOjU0MgorbXNnaWQgImVuYWJsZSBhdXRvLWdjIG1vZGUiCittc2dzdHIgImFrdGl2ZXJhIGF1dG8tZ2MtbMOkZ2UiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDUKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAidHZpbmdhIGdjLWvDtnJuaW5nIMOkdmVuIG9tIGVuIGFubmFuIGdjIGthbnNrZSBrw7ZycyIKKworIzogYnVpbHRpbi9nYy5jOjU0OAorbXNnaWQgInJlcGFjayBhbGwgb3RoZXIgcGFja3MgZXhjZXB0IHRoZSBsYXJnZXN0IHBhY2siCittc2dzdHIgInBhY2thIG9tIGFsbGEgcGFrZXQgZsO2cnV0b20gZGV0IHN0w7Zyc3RhIHBha2V0ZXQiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGdjLmxvZ2V4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSB2w6RyZGV0ICVzIGbDtnIgZ2MubG9nZXhwaXJ5IgorCisjOiBidWlsdGluL2djLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBwcnVuZSBleHBpcnkgdmFsdWUgJXMiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgdsOkcmRldCAlcyBmw7ZyIHBydW5lIGV4cGlyeSIKKworIzogYnVpbHRpbi9nYy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaW4gYmFja2dyb3VuZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiUGFja2FyIGFya2l2ZXQgYXV0b21hdGlza3QgaSBiYWtncnVuZGVuIGbDtnIgb3B0aW1hbCBwcmVzdGFuZGEuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICJQYWNrYXIgYXJraXZldCBhdXRvbWF0aXNrdCBmw7ZyIG9wdGltYWwgcHJlc3RhbmRhLlxuIgorCisjOiBidWlsdGluL2djLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1hbnVhbCBob3VzZWtlZXBpbmcuXG4iCittc2dzdHIgIlNlIFwiZ2l0IGhlbHAgZ2NcIiBmw7ZyIG1hbnVlbGwgaHVzaMOlbGxuaW5nLlxuIgorCisjOiBidWlsdGluL2djLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnYyBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gbWFjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBpZiBub3QpIgorbXNnc3RyICIiCisiZ2Mga8O2cnMgcmVkYW4gcMOlIG1hc2tpbmVuIFwiJXNcIiBwaWQgJTxQUkl1TUFYPiAoYW52w6RuZCAtLWZvcmNlIG9tIHPDpSBpbnRlICIKKyLDpHIgZmFsbGV0KSIKKworIzogYnVpbHRpbi9nYy5jOjY5NAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorIkRldCBmaW5ucyBmw7ZyIG3DpW5nYSBvbsOlYmFyYSBsw7ZzYSBvYmpla3Q7IGvDtnIgXCJnaXQgcHJ1bmVcIiBmw7ZyIGF0dCB0YSBib3J0ICIKKyJkZW0uIgorCisjOiBidWlsdGluL2dyZXAuYzozMAorbXNnaWQgImdpdCBncmVwIFs8b3B0aW9ucz5dIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGdyZXAgWzxmbGFnZ29yPl0gWy1lXSA8bcO2bnN0ZXI+IFs8cmV2Pi4uLl0gW1stLV0gPHPDtmt2w6RnPi4uLl0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXA6IG1pc3NseWNrYWRlcyBza2FwYSB0csOlZC4gJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIGZvciAlcyIKK21zZ3N0ciAiZmVsYWt0aWd0IGFudGFsIHRyw6VkYXIgYW5naXZldCAoJWQpIGbDtnIgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBpcyB0aGUgY29uZmlndXJhdGlvbgorIy4gdmFyaWFibGUgZm9yIHR3ZWFraW5nIHRocmVhZHMsIGN1cnJlbnRseQorIy4gZ3JlcC50aHJlYWRzCisjLgorIzogYnVpbHRpbi9ncmVwLmM6Mjg3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzggYnVpbHRpbi9pbmRleC1wYWNrLmM6MTczMQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiCittc2dzdHIgInRyw6Vkc3TDtmQgc2FrbmFzLCBpZ25vcmVyYXIgJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ1MyBidWlsdGluL2dyZXAuYzo1NzggYnVpbHRpbi9ncmVwLmM6NjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSB0csOkZCAoJXMpIgorCisjOiBidWlsdGluL2dyZXAuYzo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBcImdyZXBcIiBmcsOlbiBvYmpla3QgYXYgdHlwZW4gJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJmbGFnZ2FuIFwiJWNcIiBhbnRhciBldHQgbnVtZXJpc2t0IHbDpHJkZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODAzCittc2dpZCAic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAic8O2ayBpIGluZGV4ZXQgaXN0w6RsbGV0IGbDtnIgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwNQorbXNnaWQgImZpbmQgaW4gY29udGVudHMgbm90IG1hbmFnZWQgYnkgZ2l0IgorbXNnc3RyICJzw7ZrIGkgaW5uZWjDpWxsIHNvbSBpbnRlIGhhbnRlcmFzIGF2IGdpdCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODA3Cittc2dpZCAic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJzw7ZrIGkgYsOlZGUgc3DDpXJhZGUgb2NoIG9zcMOlcmFkZSBmaWxlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODA5Cittc2dpZCAiaWdub3JlIGZpbGVzIHNwZWNpZmllZCB2aWEgJy5naXRpZ25vcmUnIgorbXNnc3RyICJpZ25vcmVyYSBmaWxlciBhbmdpdm5hIGkgXCIuZ2l0aWdub3JlXCIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxMQorbXNnaWQgInJlY3Vyc2l2ZWx5IHNlYXJjaCBpbiBlYWNoIHN1Ym1vZHVsZSIKK21zZ3N0ciAic8O2ayB2YXJqZSB1bmRlcm1vZHVsIHJla3Vyc2l2dCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE0Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgInZpc2EgcmFkZXIgc29tIGludGUgdHLDpGZmYXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNgorbXNnaWQgImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciCittc2dzdHIgInNraWZ0bMOkZ2Vzb2vDpG5zbGlnIHPDtmtuaW5nIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTgKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAibWF0Y2hhIGVuZGFzdCBtw7Zuc3RlciB2aWQgb3JkZ3LDpG5zZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMAorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgImhhbnRlcmEgYmluw6RyZmlsZXIgc29tIHRleHQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMgorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAidHLDpGZmYSBpbnRlIG3Dtm5zdGVyIGkgYmluw6RyZmlsZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNQorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAiaGFudGVyYSBiaW7DpHJmaWxlciBtZWQgdGV4dGNvbnYtZmlsdGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjcKK21zZ2lkICJzZWFyY2ggaW4gc3ViZGlyZWN0b3JpZXMgKGRlZmF1bHQpIgorbXNnc3RyICJzw7ZrIGkgdW5kZXJrYXRhbG9nZXIgKHN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI5Cittc2dpZCAiZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4gbGV2ZWxzIgorbXNnc3RyICJnw6Ugc29tIG1lc3QgbmVkIDxkanVwPiBuaXbDpWVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzMKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAiYW52w6RuZCB1dMO2a2FkZSBQT1NJWC1yZWd1bGrDpHJhIHV0dHJ5Y2siCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNgorbXNnaWQgInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIKK21zZ3N0ciAiYW52w6RuZCBncnVuZGzDpGdnYW5kZSBQT1NJWC1yZWd1bGrDpHJhIHV0dHJ5Y2sgKHN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM5Cittc2dpZCAiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiCittc2dzdHIgInRvbGthIG3Dtm5zdGVyIHNvbSBmaXhlcmFkZSBzdHLDpG5nYXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0MgorbXNnaWQgInVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAiYW52w6RuZCBQZXJsa29tcGF0aWJsYSByZWd1bGrDpHJhIHV0dHJ5Y2siCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NQorbXNnaWQgInNob3cgbGluZSBudW1iZXJzIgorbXNnc3RyICJ2aXNhIHJhZG51bW1lciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ2Cittc2dpZCAic2hvdyBjb2x1bW4gbnVtYmVyIG9mIGZpcnN0IG1hdGNoIgorbXNnc3RyICJ2aXNhIGtvbHVtbm51bW1lciBmw7ZyIGbDtnJzdGEgdHLDpGZmIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDcKK21zZ2lkICJkb24ndCBzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAidmlzYSBpbnRlIGZpbG5hbW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0OAorbXNnaWQgInNob3cgZmlsZW5hbWVzIgorbXNnc3RyICJ2aXNhIGZpbG5hbW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgInZpc2EgZmlsbmFtbiByZWxhdGl2YSB0aWxsIHRvcHBrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MgorbXNnaWQgInNob3cgb25seSBmaWxlbmFtZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAidmlzYSBlbmRhc3QgZmlsbmFtbiBpc3TDpGxsZXQgZsO2ciB0csOkZmZhZGUgcmFkZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorbXNnc3RyICJzeW5vbnltIGbDtnIgLS1maWxlcy13aXRoLW1hdGNoZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NworbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgbmFtbiBww6UgZmlsZXIgdXRhbiB0csOkZmZhciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU5Cittc2dpZCAicHJpbnQgTlVMIGFmdGVyIGZpbGVuYW1lcyIKK21zZ3N0ciAic2tyaXYgTlVMIGVmdGVyIGZpbG5hbW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MgorbXNnaWQgInNob3cgb25seSBtYXRjaGluZyBwYXJ0cyBvZiBhIGxpbmUiCittc2dzdHIgInZpc2EgZW5kYXN0IHRyw6RmZmFkZSBkZWxhciBhdiByYWRlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY0Cittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAidmlzYSBhbnRhbCB0csOkZmZhciBpc3TDpGxsZXQgZsO2ciB0csOkZmZhZGUgcmFkZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NQorbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICJsanVzbWFya2VyYSB0csOkZmZhciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY3Cittc2dpZCAicHJpbnQgZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMiCittc2dzdHIgInNrcml2IHRvbW1hIHJhZGVyIG1lbGxhbiB0csOkZmZhciBmcsOlbiBvbGlrYSBmaWxlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY5Cittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAidmlzYSBmaWxuYW1uIGVuZGFzdCBlbiBnw6VuZyBvdmFuZsO2ciB0csOkZmZhciBmcsOlbiBzYW1tYSBmaWwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3MgorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICJ2aXNhIDxuPiByYWRlciBzYW1tYW5oYW5nIGbDtnJlIG9jaCBlZnRlciB0csOkZmZhciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc1Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAidmlzYSA8bj4gcmFkZXIgc2FtbWFuaGFuZyBmw7ZyZSB0csOkZmZhciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc3Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICJ2aXNhIDxuPiByYWRlciBzYW1tYW5oYW5nIGVmdGVyIHRyw6RmZmFyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzkKK21zZ2lkICJ1c2UgPG4+IHdvcmtlciB0aHJlYWRzIgorbXNnc3RyICJhbnbDpG5kIDxuPiBqb2JidHLDpWRhciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgwCittc2dpZCAic2hvcnRjdXQgZm9yIC1DIE5VTSIKK21zZ3N0ciAiZ2VudsOkZyBmw7ZyIC1DIE5VTSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgzCittc2dpZCAic2hvdyBhIGxpbmUgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAidmlzYSBlbiByYWQgbWVkIGZ1bmt0aW9uc25hbW5ldCBmw7ZyZSB0csOkZmZlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg1Cittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgInZpc2EgZGVuIG9ta3JpbmdsaWdnYW5kZSBmdW5rdGlvbmVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODgKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIKK21zZ3N0ciAibMOkcyBtw7Zuc3RlciBmcsOlbiBmaWwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MAorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAidHLDpGZmYSA8bcO2bnN0ZXI+IgorCisjOiBidWlsdGluL2dyZXAuYzo4OTIKK21zZ2lkICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIgorbXNnc3RyICJrb21iaW5lcmEgbcO2bnN0ZXIgc29tIGFuZ2VzIG1lZCAtZSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTA0Cittc2dpZCAiaW5kaWNhdGUgaGl0IHdpdGggZXhpdCBzdGF0dXMgd2l0aG91dCBvdXRwdXQiCittc2dzdHIgImFuZ2UgdHLDpGZmIG1lZCBzbHV0c3RhdHVza29kIHV0YW4gdXRkYXRhIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDYKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hlcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2ggYWxsIHBhdHRlcm5zIgorbXNnc3RyICJ2aXNhIGVuZGFzdCB0csOkZmZhciBmcsOlbiBmaWxlciBzb20gdHLDpGZmYXIgYWxsYSBtw7Zuc3RlciIKKworIzogYnVpbHRpbi9ncmVwLmM6OTA4Cittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgInZpc2EgYW5hbHlzdHLDpGQgZsO2ciBncmVwLXV0dHJ5Y2siCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxMgorbXNnaWQgInBhZ2VyIgorbXNnc3RyICJibMOkZGRyYXJlIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTIKK21zZ2lkICJzaG93IG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciIKK21zZ3N0ciAidmlzYSB0csOkZmZhZGUgZmlsZXIgaSBmaWxibMOkZGRyYXJlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTE2Cittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICJ0aWxsw6V0IGFucm9wYSBncmVwKDEpIChpZ25vcmVyYXMgYXYgZGV0dGEgYnlnZ2UpIgorCisjOiBidWlsdGluL2dyZXAuYzo5ODMKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuIgorbXNnc3RyICJpbmdldCBtw7Zuc3RlciBhbmdhdnMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMTkKK21zZ2lkICItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cyIKK21zZ3N0ciAiLS1uby1pbmRleCBvY2ggLS11bnRyYWNrZWQga2FuIGludGUgYW52w6RuZGFzIG1lZCByZXZpc2lvbmVyIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAia2FuIGludGUgc2zDpSB1cHAgcmV2aXNpb246ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDU3Cittc2dpZCAiLS11bnRyYWNrZWQgbm90IHN1cHBvcnRlZCB3aXRoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIgorbXNnc3RyICItLXVudHJhY2tlZCBzdMO2ZHMgaW50ZSBtZWQgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjEKK21zZ2lkICJpbnZhbGlkIG9wdGlvbiBjb21iaW5hdGlvbiwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICJvZ2lsdGlnIGtvbWJpbmF0aW9uIGF2IGZsYWdnb3IsIGlnbm9yZXJhciAtLXRocmVhZHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjQgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTQ3Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgInRyw6Vkc3TDtmQgc2FrbmFzLCBpZ25vcmVyYXIgLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODUxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgImZlbGFrdGlndCBhbnRhbCB0csOlZGFyIGFuZ2l2ZXQgKCVkKSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEwMQorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIGZ1bmdlcmFyIGVuZGFzdCBpIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEyNworbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiLS1jYWNoZWQgb2NoIC0tdW50cmFja2VkIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgLS1uby1pbmRleCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEzMworbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzIgorbXNnc3RyICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBrYW4gaW50ZSBhbnbDpG5kYXMgZsO2ciBzcMOlcmF0IGlubmVow6VsbCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTE0MQorbXNnaWQgImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbiIKK21zZ3N0ciAiYsOlZGUgLS1jYWNoZWQgb2NoIHRyw6RkIGFuZ2F2cyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg1Cittc2dpZCAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGZpbGU+Li4uIgorbXNnc3RyICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwPl0gWy13XSBbLS1wYXRoPTxmaWw+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gWy0tXSAiCisiPGZpbD4uLi4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4NgorbXNnaWQgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyIKK21zZ3N0ciAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTgKK21zZ2lkICJvYmplY3QgdHlwZSIKK21zZ3N0ciAib2JqZWt0dHlwIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAic2tyaXYgb2JqZWt0ZXQgdGlsbCBvYmpla3RkYXRhYmFzZW4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDEKK21zZ2lkICJyZWFkIHRoZSBvYmplY3QgZnJvbSBzdGRpbiIKK21zZ3N0ciAibMOkcyBvYmpla3RldCBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMworbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICJzcGFyYSBmaWxlbiBzb20gZGVuIMOkciB1dGFuIGZpbGVyIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA0Cittc2dpZCAiIgorImp1c3QgaGFzaCBhbnkgcmFuZG9tIGdhcmJhZ2UgdG8gY3JlYXRlIGNvcnJ1cHQgb2JqZWN0cyBmb3IgZGVidWdnaW5nIEdpdCIKK21zZ3N0ciAiIgorImhhc2hhIHNsdW1wbcOkc3NpZ3Qgc2tyw6RwIGbDtnIgYXR0IHNrYXBhIGtvcnJ1cHRhIG9iamVrdCBmw7ZyIGZlbHPDtmtuaW5nIGF2IEdpdCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNQorbXNnaWQgInByb2Nlc3MgZmlsZSBhcyBpdCB3ZXJlIGZyb20gdGhpcyBwYXRoIgorbXNnc3RyICJoYW50ZXJhIGZpbGVuIHNvbSBvbSBkZW4ga29tIGZyw6VuIHPDtmt2w6RnZW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2Cittc2dpZCAicHJpbnQgYWxsIGF2YWlsYWJsZSBjb21tYW5kcyIKK21zZ3N0ciAidmlzYSBhbGxhIHRpbGxnw6RuZ2xpZ2Ega29tbWFuZG9uIgorCisjOiBidWlsdGluL2hlbHAuYzo0NworbXNnaWQgImV4Y2x1ZGUgZ3VpZGVzIgorbXNnc3RyICJ1dGVzbHV0IHbDpGdsZWRuaW5nYXIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ4Cittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICJsaXN0YSBhbnbDpG5kYmFyYSB2w6RnbGVkbmluZ2FyIgorCisjOiBidWlsdGluL2hlbHAuYzo0OQorbXNnaWQgInByaW50IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIgorbXNnc3RyICJ2aXNhIG5hbW4gcMOlIGFsbGEga29uZmlndXJhdGlvbnN2YXJpYWJsZXIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUxCittc2dpZCAic2hvdyBtYW4gcGFnZSIKK21zZ3N0ciAidmlzYSBtYW51YWxzaWRhIgorCisjOiBidWlsdGluL2hlbHAuYzo1MgorbXNnaWQgInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIgorbXNnc3RyICJ2aXNhIG1hbnVhbCBpIHdlYmJsw6RzYXJlIgorCisjOiBidWlsdGluL2hlbHAuYzo1NAorbXNnaWQgInNob3cgaW5mbyBwYWdlIgorbXNnc3RyICJ2aXNhIGluZm8tc2lkYSIKKworIzogYnVpbHRpbi9oZWxwLmM6NTYKK21zZ2lkICJwcmludCBjb21tYW5kIGRlc2NyaXB0aW9uIgorbXNnc3RyICJ2aXNhIGtvbW1hbmRvYmVza3Jpdm5pbmciCisKKyM6IGJ1aWx0aW4vaGVscC5jOjYxCittc2dpZCAiZ2l0IGhlbHAgWy0tYWxsXSBbLS1ndWlkZXNdIFstLW1hbiB8IC0td2ViIHwgLS1pbmZvXSBbPGNvbW1hbmQ+XSIKK21zZ3N0ciAiZ2l0IGhlbHAgWy0tYWxsXSBbLS1ndWlkZXNdIFstLW1hbiB8IC0td2ViIHwgLS1pbmZvXSBbPGtvbW1hbmRvPl0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICJva8OkbnQgaGrDpGxwZm9ybWF0OiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEwNAorbXNnaWQgIkZhaWxlZCB0byBzdGFydCBlbWFjc2NsaWVudC4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBzdGFydGEgZW1hY3NjbGllbnQuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMTcKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZW1hY3NjbGllbnQgdmVyc2lvbi4iCittc2dzdHIgIkt1bmRlIGludGUgdG9sa2EgZW1hY3NjbGllbnQtdmVyc2lvbi4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICJlbWFjc2NsaWVudCB2ZXJzaW9uIFwiJWRcIiBmw7ZyIGdhbW1hbCAoPCAyMikuIgorCisjOiBidWlsdGluL2hlbHAuYzoxNDMgYnVpbHRpbi9oZWxwLmM6MTY1IGJ1aWx0aW4vaGVscC5jOjE3NSBidWlsdGluL2hlbHAuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWMgJyVzJyIKK21zZ3N0ciAiZXhlYyBtaXNzbHlja2FkZXMgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIlwiJXNcIjogc8O2a3bDpGcgZsO2ciBtYW4tdmlzYXJlIHNvbSBlaiBzdMO2ZHMuXG4iCisiQW52w6RuZCBcIm1hbi48dmVya3R5Zz4uY21kXCIgaXN0w6RsbGV0LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIlwiJXNcIjoga29tbWFuZG8gZsO2ciBtYW4tdmlzYXJlIHNvbSBzdMO2ZHMuXG4iCisiQW52w6RuZCBcIm1hbi48dmVya3R5Zz4ucGF0aFwiIGlzdMOkbGxldC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICJcIiVzXCI6IG9rw6RuZCBtYW4tdmlzYXJlLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzY3Cittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJpbmdlbiBtYW4tdmlzYXJlIGhhbnRlcmFkZSBmw7ZyZnLDpWdhbiIKKworIzogYnVpbHRpbi9oZWxwLmM6Mzc1Cittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAiaW5nZW4gaW5mby12aXNhcmUgaGFudGVyYWRlIGbDtnJmcsOlZ2FuIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzQgYnVpbHRpbi9oZWxwLmM6NDQ1IGdpdC5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFsaWFzZWQgdG8gJyVzJyIKK21zZ3N0ciAiXCIlc1wiIMOkciBldHQgYWxpYXMgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0OCBnaXQuYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGFsaWFzLiVzIHN0cmluZzogJXMiCittc2dzdHIgImZlbGFrdGlnIGFsaWFzLiVzLXN0csOkbmc6ICVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NzcgYnVpbHRpbi9oZWxwLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICJhbnbDpG5kbmluZzogJXMlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkxCittc2dpZCAiJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgaW5mb3JtYXRpb24iCittc2dzdHIgIlwiZ2l0IGhlbHAgY29uZmlnXCIgZsO2ciBtZXIgaW5mb3JtYXRpb24iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAib2JqZWt0dHlwIHN0w6RtbWVyIGludGUgw7Z2ZXJlbnMgdmlkICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIG9iamVjdCAlcyIKK21zZ3N0ciAiZW1vdHRvZyBpbnRlIGRldCBmw7ZydsOkbnRhZGUgb2JqZWt0ZXQgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXM6IGV4cGVjdGVkIHR5cGUgJXMsIGZvdW5kICVzIgorbXNnc3RyICJvYmpla3RldCAlczogZsO2cnbDpG50YWQgdHlwICVzLCBzw6VnICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gImthbiBpbnRlIGZ5bGxhICVkIGJ5dGUiCittc2dzdHJbMV0gImthbiBpbnRlIGZ5bGxhICVkIGJ5dGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2OAorbXNnaWQgImVhcmx5IEVPRiIKK21zZ3N0ciAidGlkaWd0IGZpbHNsdXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2OQorbXNnaWQgInJlYWQgZXJyb3Igb24gaW5wdXQiCittc2dzdHIgImluZGF0YWzDpHNmZWwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4MQorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICJhbnbDpG5kZSBmbGVyIGJ5dGUgw6RuIHRpbGxnw6RuZ2xpZ3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4OCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjYwNgorbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgInBha2V0IGbDtnIgc3RvcnQgZsO2ciBudXZhcmFuZGUgZGVmaW5pdGlvbiBhdiBvZmZfdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjkxIGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo5NQorbXNnaWQgInBhY2sgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZSIKK21zZ3N0ciAicGFrZXQgw6RyIHN0w7ZycmUgw6RuIHRpbGzDpXRlbiBtYXhpbWFsIHN0b3JsZWsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSDDtnBwbmEgcGFrZXRmaWxlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyNgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICJwYWtldHNpZ25hdHVyIHN0w6RtbWVyIGludGUgw7Z2ZXJlbnMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIHZlcnNpb24gJTxQUkl1MzI+IHVuc3VwcG9ydGVkIgorbXNnc3RyICJwYWtldHZlcnNpb24gJTxQUkl1MzI+IHN0w7ZkcyBlaiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICU8UFJJdU1BWD46ICVzIgorbXNnc3RyICJwYWtldGV0IGhhciBmZWxha3RpZ3Qgb2JqZWt0IHZpZCBpbmRleCAlPFBSSXVNQVg+OiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmxhdGUgcmV0dXJuZWQgJWQiCittc2dzdHIgImluZmxhdGUgcmV0dXJuZXJhZGUgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUxNQorbXNnaWQgIm9mZnNldCB2YWx1ZSBvdmVyZmxvdyBmb3IgZGVsdGEgYmFzZSBvYmplY3QiCittc2dzdHIgImluZGV4dsOkcmRlc3BpbGwgZsO2ciBkZWx0YWJhc29iamVrdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIzCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICJkZWx0YWJhc2luZGV4IHV0YW5mw7ZyIGdyw6Ruc2VuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAib2vDpG5kIG9iamVrdHR5cCAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTYyCittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAia2FuIGludGUgdXRmw7ZyYSBcInByZWFkXCIgcMOlIHBha2V0ZmlsIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZSBtaXNzaW5nIgorbXNnaWRfcGx1cmFsICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICJmw7ZyIHRpZGlndCBzbHV0IHDDpSBwYWtldGZpbGVuLCAlPFBSSXVNQVg+IGJ5dGUgc2FrbmFzIgorbXNnc3RyWzFdICJmw7ZyIHRpZGlndCBzbHV0IHDDpSBwYWtldGZpbGVuLCAlPFBSSXVNQVg+IGJ5dGUgc2FrbmFzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1OTAKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAiYWxsdmFybGlnIGluZmxhdGUtaW5rb25zZWt2ZW5zIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzUgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc2NQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgIlNIQTEtS09MTElTSU9OIFVQUFTDhENLVCBWSUQgJXMgISIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU4CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCBpbmZvICVzIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBpbmZvcm1hdGlvbiBvbSBiZWZpbnRsaWd0IG9iamVrdCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAia2FuIGludGUgbMOkc2EgYmVmaW50bGlndCBvYmpla3QgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICJvZ2lsdGlndCBibG9iLW9iamVrdCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NgorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFja2VkIG9iamVjdCIKK21zZ3N0ciAiZnNjay1mZWwgaSBwYWNrYXQgb2JqZWt0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgIkludGUgYWxsYSBiYXJub2JqZWt0IGbDtnIgJXMga2FuIG7DpXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjkyMCBidWlsdGluL2luZGV4LXBhY2suYzo5NTEKK21zZ2lkICJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiCittc2dzdHIgIm1pc3NseWNrYWRlcyB0aWxsw6RtcGEgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjEKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAiVGFyIGVtb3Qgb2JqZWt0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTIxCittc2dpZCAiSW5kZXhpbmcgb2JqZWN0cyIKK21zZ3N0ciAiU2thcGFyIGluZGV4IGbDtnIgb2JqZWt0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTU1Cittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICJwYWtldGV0IMOkciB0cmFzaWd0IChTSEExIHN0w6RtbWVyIGludGUpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTYwCittc2dpZCAiY2Fubm90IGZzdGF0IHBhY2tmaWxlIgorbXNnc3RyICJrYW4gaW50ZSB1dGbDtnJhIFwiZnN0YXRcIiBww6UgcGFrZXRmaWwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjMKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgInBha2V0IGhhciBza3LDpHAgaSBzbHV0ZXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNzUKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICJmw7ZydmlycmFkIGJvcnRvbSB2YW52ZXR0IGkgcGFyc2VfcGFja19vYmplY3RzKCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExOTgKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICJBbmFseXNlcmFyIGRlbHRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjA4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImt1bmRlIGludGUgc2thcGEgdHLDpWQ6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjQ5Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAiZsO2cnZpcnJhZCBib3J0b20gdmFudmV0dCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3QiCittc2dpZF9wbHVyYWwgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdHMiCittc2dzdHJbMF0gInNsdXRmw7ZyZGVzIG1lZCAlZCBsb2thbHQgb2JqZWt0IgorbXNnc3RyWzFdICJzbHV0ZsO2cmRlcyBtZWQgJWQgbG9rYWxhIG9iamVrdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHRhaWwgY2hlY2tzdW0gZm9yICVzIChkaXNrIGNvcnJ1cHRpb24/KSIKK21zZ3N0ciAiT3bDpG50YWQgc3ZhbnNjaGVja3N1bW1hIGbDtnIgJXMgKHRyYXNpZyBkaXNrPykiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gInBha2V0ZXQgaGFyICVkIG9hbmFseXNlcmF0IGRlbHRhIgorbXNnc3RyWzFdICJwYWtldGV0IGhhciAlZCBvYW5hbHlzZXJhZGUgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgImt1bmRlIGludGUgdXRmw7ZyYSBcImRlZmxhdGVcIiBww6UgdGlsbGFndCBvYmpla3QgKCVkKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAibG9rYWx0IG9iamVrdCAlcyDDpHIgdHJhc2lndCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAicGFrZXRmaWxuYW1uZXQgXCIlc1wiIHNsdXRhciBpbnRlIG1lZCBcIi5wYWNrXCIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgdGEgc2tyaXZhICVzLWZpbCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIHdyaXR0ZW4gJXMgZmlsZSAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSBzdMOkbmdhIHNrcml2ZW4gJXMtZmlsIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ2MworbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICJmZWwgdmlkIHN0w6RuZ25pbmcgYXYgcGFrZXRmaWwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzcKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICJrYW4gaW50ZSBzcGFyYSBwYWtldGZpbCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ4NQorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICJrYW4gaW50ZSBzcGFyYSBpbmRleGZpbCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUyOSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAiZmVsYWt0aWcgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICJLYW4gaW50ZSDDtnBwbmEgYmVmaW50bGlnIHBha2V0ZmlsIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIgorbXNnc3RyICJLYW4gaW50ZSDDtnBwbmEgYmVmaW50bGlnIHBha2V0LWlkeC1maWwgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAiaWNrZS1kZWx0YTogJWQgb2JqZWt0IgorbXNnc3RyWzFdICJpY2tlLWRlbHRhOiAlZCBvYmpla3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAia2VkamVsw6RuZ2QgPSAlZDogJWx1IG9iamVrdCIKK21zZ3N0clsxXSAia2VkamVsw6RuZ2QgPSAlZDogJWx1IG9iamVrdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY5MworbXNnaWQgIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICJLYW4gaW50ZSBnw6UgdGlsbGJha2EgdGlsbCBhcmJldHNrYXRhbG9nZW4gKGN3ZCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NDIgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc0NQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc2MSBidWlsdGluL2luZGV4LXBhY2suYzoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAiZmVsYWt0aWcgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3ODEKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAiLS1maXgtdGhpbiBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3ODMKK21zZ2lkICItLXN0ZGluIHJlcXVpcmVzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tc3RkaW4ga3LDpHZlciBldHQgZ2l0LWFya2l2IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzg5Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICItLXZlcmlmeSBhbmdhdnMgdXRhbiBwYWtldGZpbG5hbW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4MzcgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjU4MgorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFjayBvYmplY3RzIgorbXNnc3RyICJmc2NrLWZlbCBpIHBhY2thdCBvYmpla3QiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgImthbiBpbnRlIHRhIHN0YXR1cyBww6UgbWFsbGVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgw7ZwcG5hIGthdGFsb2dlbiAob3BlbmRpcikgXCIlc1wiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgbMOkc2EgbMOkbmsgKHJlYWRsaW5rKSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgc2thcGEgc3ltYm9saXNrIGzDpG5rIFwiJXNcIiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAia2FuIGludGUga29waWVyYSBcIiVzXCIgdGlsbCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICJpZ25vcmVyYXIgbWFsbGVuICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCBpbiAlcyIKK21zZ3N0ciAibWFsbGFybmEgaGl0dGFkZXMgaW50ZSBpICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIGZyb20gJyVzJzogJXMiCittc2dzdHIgImtvcGllcmFkZSBpbnRlIG1hbGxhciBmcsOlbiBcIiVzXCI6ICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgImthbiBpbnRlIGhhbnRlcmEgZmlsdHlwICVkIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgImthbiBpbnRlIGZseXR0YSAlcyB0aWxsICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNTQgYnVpbHRpbi9pbml0LWRiLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIlcyBmaW5ucyByZWRhbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiT21pbml0aWVyYWRlIGJlZmludGxpZ3QgZGVsYXQgR2l0LWFya2l2IGkgJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIk9taW5pdGllcmFkZSBiZWZpbnRsaWd0IEdpdC1hcmtpdiBpICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkluaXRpZXJhZGUgdG9tdCBkZWxhdCBHaXQtYXJraXYgaSAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkluaXRpZXJhZGUgdG9tdCBHaXQtYXJraXYgaSAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ2OAorbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08bWFsbGthdGFsb2c+XSBbLS0iCisic2hhcmVkWz08YmVow7ZyaWdoZXRlcj5dXSBbPGthdGFsb2c+XSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkxCittc2dpZCAicGVybWlzc2lvbnMiCittc2dzdHIgImJlaMO2cmlnaGV0ZXIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MgorbXNnaWQgInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIKK21zZ3N0ciAiYW5nZSBhdHQgZ2l0LWFya2l2ZXQgc2thIGRlbGFzIGJsYW5kIGZsZXJhIGFudsOkbmRhcmUiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyOSBidWlsdGluL2luaXQtZGIuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICJrYW4gaW50ZSBza2FwYSBrYXRhbG9nZW4gKG1rZGlyKSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAia2FuIGludGUgYnl0YSBrYXRhbG9nIChjaGRpcikgdGlsbCAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgc3BlY2lmeWluZyAlcyAob3IgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIiIKKyIlcyAoZWxsZXIgLS13b3JrLXRyZWU9PGthdGFsb2c+KSBpbnRlIHRpbGzDpXRldCB1dGFuIGF0dCBhbmdlICVzIChlbGxlciAtLWdpdC0iCisiZGlyPTxrYXRhbG9nPikiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICJLYW4gaW50ZSBrb21tYSDDpXQgYXJiZXRza2F0YWxvZ2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNgorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHRva2VuPlsoPXw6KTx2YWx1ZT5dKS4uLl0gWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHN5bWJvbD5bKD18Oik8dsOkcmRlPl0pLi4uXSBbPGZpbD4uLi5dIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk1Cittc2dpZCAiZWRpdCBmaWxlcyBpbiBwbGFjZSIKK21zZ3N0ciAicmVkaWdlcmEgZmlsZXIgcMOlIHBsYXRzIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk2Cittc2dpZCAidHJpbSBlbXB0eSB0cmFpbGVycyIKK21zZ3N0ciAidGEgYm9ydCB0b21tYSBzbMOkcHJhZGVyIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk5Cittc2dpZCAid2hlcmUgdG8gcGxhY2UgdGhlIG5ldyB0cmFpbGVyIgorbXNnc3RyICJ2YXIgbnlhIHNsw6RwcmFkZXIgc2thIHBsYWNlcmFzIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMQorbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJhdHQgZ8O2cmEgb20gc2zDpHByYWRlciByZWRhbiBmaW5ucyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDMKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBpcyBtaXNzaW5nIgorbXNnc3RyICJhdHQgZ8O2cmEgb20gc2zDpHByYWRlciBzYWtuYXMiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA1Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIHRyYWlsZXJzIgorbXNnc3RyICJ2aXNhIGVuZGFzdCBzbMOkcHJhZGVyIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNgorbXNnaWQgImRvIG5vdCBhcHBseSBjb25maWcgcnVsZXMiCittc2dzdHIgImFudsOkbmQgaW50ZSByZWdsZXIgZnLDpW4ga29uZmlndXJhdGlvbmVuIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNworbXNnaWQgImpvaW4gd2hpdGVzcGFjZS1jb250aW51ZWQgdmFsdWVzIgorbXNnc3RyICJzbMOlIGlob3AgdsOkcmRlbiBhdmRlbGFkZSBtZWQgYmxhbmtzdGVnIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwOAorbXNnaWQgInNldCBwYXJzaW5nIG9wdGlvbnMiCittc2dzdHIgInbDpGxqIHRvbGtuaW5nc2FsdGVybmF0aXYiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEwCittc2dpZCAiZG8gbm90IHRyZWF0IC0tLSBzcGVjaWFsbHkiCittc2dzdHIgInRvbGthIGludGUgLS0tIHNwZWNpZWxsdCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTEKK21zZ2lkICJ0cmFpbGVyIgorbXNnc3RyICJzbMOkcHJhZCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTIKK21zZ2lkICJ0cmFpbGVyKHMpIHRvIGFkZCIKK21zZ3N0ciAic2zDpHByYWQoZXIpIGF0dCBsw6RnZ2EgdGlsbCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMjMKK21zZ2lkICItLXRyYWlsZXIgd2l0aCAtLW9ubHktaW5wdXQgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS10cmFpbGVyIG1lZCAtLW9ubHktaW5wdXQgZ2VyIGluZ2VuIG1lbmluZyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMzMKK21zZ2lkICJubyBpbnB1dCBmaWxlIGdpdmVuIGZvciBpbi1wbGFjZSBlZGl0aW5nIgorbXNnc3RyICJpbmdlbiBpbmRhdGFmaWwgYW5naXZlbiBmw7ZyIHJlZGlnZXJpbmcgcMOlIHBsYXRzIgorCisjOiBidWlsdGluL2xvZy5jOjU2Cittc2dpZCAiZ2l0IGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxvZyBbPGZsYWdnb3I+XSBbPHZlcnNpb25zaW50ZXJ2YWxsPl0gW1stLV0gPHPDtmt2w6RnPi4uLl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTcKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzxmbGFnZ29yPl0gPG9iamVrdD4uLi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICJvZ2lsdGlnIGZsYWdnYSBmw7ZyIC0tZGVjb3JhdGU6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE3NAorbXNnaWQgInNob3cgc291cmNlIgorbXNnc3RyICJ2aXNhIGvDpGxsa29kIgorCisjOiBidWlsdGluL2xvZy5jOjE3NQorbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICJBbnbDpG5kIGUtcG9zdG1hcHBuaW5nc2ZpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzcKK21zZ2lkICJvbmx5IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgImRla29yZXJhIGVuZGFzdCByZWZlcmVuc2VyIHNvbSBtb3RzdmFyYXIgPG3Dtm5zdGVyPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzkKK21zZ2lkICJkbyBub3QgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiZGVrb3JlcmEgaW50ZSByZWZlcmVuc2VyIHNvbSBtb3RzdmFyYXIgPG3Dtm5zdGVyPiIKKworIzogYnVpbHRpbi9sb2cuYzoxODAKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICJkZWtvcmVyaW5nc2ZsYWdnb3IiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgzCittc2dpZCAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIkJlaGFuZGxhIHJhZGludGVydmFsbGV0IG4sbSBpIGZpbGVuLCBtZWQgYsO2cmphbiBww6UgMSIKKworIzogYnVpbHRpbi9sb2cuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICJTbHV0dXRkYXRhOiAlZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgImdpdCBzaG93ICVzOiBmZWxha3RpZyBmaWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTUwIGJ1aWx0aW4vbG9nLmM6NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBvYmpla3RldCAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB0eXBlOiAlZCIKK21zZ3N0ciAib2vDpG5kIHR5cDogJWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIGNvdmVyIGZyb20gZGVzY3JpcHRpb24gbW9kZSIKK21zZ3N0ciAiJXM6IG9naWx0aWd0IG9tc2xhZyBmcsOlbiBiZXNrcml2bmluZ3Nsw6RnZSIKKworIzogYnVpbHRpbi9sb2cuYzo4MjEKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyB1dGFuIHbDpHJkZSIKKworIzogYnVpbHRpbi9sb2cuYzo5MzYKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgIm5hbW5ldCBww6UgdXRkYXRha2F0YWxvZ2VuIMOkciBmw7ZyIGzDpW5ndCIKKworIzogYnVpbHRpbi9sb2cuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAia2FuIGludGUgw7ZwcG5hIHBhdGNoZmlsZW4gJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTY5Cittc2dpZCAibmVlZCBleGFjdGx5IG9uZSByYW5nZSIKK21zZ3N0ciAiYmVow7Z2ZXIgcHJlY2lzIGV0dCBpbnRlcnZhbGwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTc5Cittc2dpZCAibm90IGEgcmFuZ2UiCittc2dzdHIgImludGUgZXR0IGludGVydmFsbCIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQzCittc2dpZCAiY292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAib21zbGFnc2JyZXZldCBiZWjDtnZlciBlLXBvc3Rmb3JtYXQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0OQorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgY292ZXItbGV0dGVyIGZpbGUiCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBmaWwgZsO2ciBvbXNsYWdzYnJldiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgInRva2lndCBpbi1yZXBseS10bzogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NQorbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHRpb25zPl0gWzxzaW5jZT4gfCA8cmV2aXNpb24tcmFuZ2U+XSIKK21zZ3N0ciAiZ2l0IGZvcm1hdC1wYXRjaCBbPGZsYWdnb3I+XSBbPHNlZGFuPiB8IDxyZXZpc2lvbnNpbnRlcnZhbGw+XSIKKworIzogYnVpbHRpbi9sb2cuYzoxMzEzCittc2dpZCAidHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgInR2w6UgdXRkYXRha2F0YWxvZ2VyPyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDI0IGJ1aWx0aW4vbG9nLmM6MjE5NyBidWlsdGluL2xvZy5jOjIxOTkgYnVpbHRpbi9sb2cuYzoyMjExCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWl0ICVzIgorbXNnc3RyICJva8OkbmQgaW5jaGVja25pbmcgJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzNCBidWlsdGluL3JlcGxhY2UuYzo1OCBidWlsdGluL3JlcGxhY2UuYzoyMDcKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2zDpSB1cHAgXCIlc1wiIHNvbSBlbiBnaWx0aWcgcmVmZXJlbnMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzOQorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgImt1bmRlIGludGUgaGl0dGEgZXhha3Qgc2FtbWFuc2xhZ25pbmdzYmFzIgorCisjOiBidWlsdGluL2xvZy5jOjE0NDMKK21zZ2lkICIiCisiZmFpbGVkIHRvIGdldCB1cHN0cmVhbSwgaWYgeW91IHdhbnQgdG8gcmVjb3JkIGJhc2UgY29tbWl0IGF1dG9tYXRpY2FsbHksXG4iCisicGxlYXNlIHVzZSBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIHRvIHRyYWNrIGEgcmVtb3RlIGJyYW5jaC5cbiIKKyJPciB5b3UgY291bGQgc3BlY2lmeSBiYXNlIGNvbW1pdCBieSAtLWJhc2U9PGJhc2UtY29tbWl0LWlkPiBtYW51YWxseSIKK21zZ3N0ciAiIgorImt1bmRlIGludGUgaMOkbXRhIHVwcHN0csO2bSwgb20gZHUgdmlsbCBsYWdyYSBiYXNpbmNoZWNrbmluZ2VuIGF1dG9tYXRpc2t0LFxuIgorImFudsOkbmQgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBmw7ZyIGF0dCBzcMOlcmEgZW4gZmrDpHJyZ3Jlbi5cbiIKKyJFbGxlciBzw6Uga2FuIGR1IGFuZ2UgYmFzaW5jaGVja25pbmcgbWVkIC0tYmFzZT08YmFzLWluY2hlY2tuaW5ncy1pZD4gbWFudWVsbHQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2MworbXNnaWQgImZhaWxlZCB0byBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgImt1bmRlIGludGUgaGl0dGEgZXhha3Qgc2FtbWFuc2xhZ25pbmdzYmFzIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzQKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGQgYmUgdGhlIGFuY2VzdG9yIG9mIHJldmlzaW9uIGxpc3QiCittc2dzdHIgImJhc2luY2hlY2tuaW5nZW4gYsO2ciB2YXJhIGbDtnJmYWRlciB0aWxsIHJldmlzaW9uc2xpc3RhbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc4Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkbid0IGJlIGluIHJldmlzaW9uIGxpc3QiCittc2dzdHIgImJhc2luY2hlY2tuaW5nZW4gYsO2ciBpbnRlIHZhcmEgaSByZXZpc2lvbnNsaXN0YW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzMQorbXNnaWQgImNhbm5vdCBnZXQgcGF0Y2ggaWQiCittc2dzdHIgImthbiBpbnRlIGjDpG10YSBwYXRjaC1pZCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTgzCittc2dpZCAiZmFpbGVkIHRvIGluZmVyIHJhbmdlLWRpZmYgcmFuZ2VzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgcsOka25hIHV0IGludGVydmFsbCByYW5nZS1kaWZmIgorCisjOiBidWlsdGluL2xvZy5jOjE2MjkKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICJhbnbDpG5kIFtQQVRDSCBuL21dIMOkdmVuIGbDtnIgZW4gZW5zYW0gcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzMgorbXNnaWQgInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIgorbXNnc3RyICJhbnbDpG5kIFtQQVRDSF0gw6R2ZW4gZsO2ciBmbGVyYSBwYXRjaGFyIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzYKK21zZ2lkICJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIKK21zZ3N0ciAic2tyaXYgcGF0Y2hhcm5hIHDDpSBzdGFuZGFyZCB1dCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjM4Cittc2dpZCAiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiCittc2dzdHIgImdlbmVyZXJhIGV0dCBmw7ZsamVicmV2IgorCisjOiBidWlsdGluL2xvZy5jOjE2NDAKK21zZ2lkICJ1c2Ugc2ltcGxlIG51bWJlciBzZXF1ZW5jZSBmb3Igb3V0cHV0IGZpbGUgbmFtZXMiCittc2dzdHIgImFudsOkbmQgZW5rZWwgbnVtbWVyc2VrdmVucyBmw7ZyIHV0ZGF0YWZpbG5hbW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MQorbXNnaWQgInNmeCIKK21zZ3N0ciAic2Z4IgorCisjOiBidWlsdGluL2xvZy5jOjE2NDIKK21zZ2lkICJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIKK21zZ3N0ciAiYW52w6RuZCA8c2Z4PiBpc3TDpGxsZXQgZsO2ciBcIi5wYXRjaFwiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDQKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICJiw7ZyamEgbnVtcmVyYSBwYXRjaGFyIHDDpSA8bj4gaXN0w6RsbGV0IGbDtnIgMSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ2Cittc2dpZCAibWFyayB0aGUgc2VyaWVzIGFzIE50aCByZS1yb2xsIgorbXNnc3RyICJtYXJrZXJhIHNlcmllbiBzb20gTjp0ZSBmw7Zyc8O2ayIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ4Cittc2dpZCAiVXNlIFtSRkMgUEFUQ0hdIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiQW52w6RuZCAgW1JGQyBQQVRDSF0gaXN0w6RsbGV0IGbDtnIgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUxCittc2dpZCAiY292ZXItZnJvbS1kZXNjcmlwdGlvbi1tb2RlIgorbXNnc3RyICJjb3Zlci1mcm9tLWRlc2NyaXB0aW9uLWzDpGdlIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTIKK21zZ2lkICJnZW5lcmF0ZSBwYXJ0cyBvZiBhIGNvdmVyIGxldHRlciBiYXNlZCBvbiBhIGJyYW5jaCdzIGRlc2NyaXB0aW9uIgorbXNnc3RyICJza2FwYSBkZWxhciBhdiBvbXNsYWdzYnJldmV0IGJhc2VyYXQgcMOlIGdyZW5iZXNrcml2ZWxzZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NAorbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiQW52w6RuZCBbPHByZWZpeD5dIGlzdMOkbGxldCBmw7ZyIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIKK21zZ3N0ciAic3BhcmEgZmlsZXJuYSBpIDxrYXRhbG9nPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYwCittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgInRhIGludGUgYm9ydCBlbGxlciBsw6RnZyB0aWxsIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MworbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgInNrcml2IGludGUgYmluw6RyYSBkaWZmYXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NQorbXNnaWQgIm91dHB1dCBhbGwtemVybyBoYXNoIGluIEZyb20gaGVhZGVyIgorbXNnc3RyICJhbnbDpG5kIGhhc2h2w6RyZGUgbWVkIG5vbGxvciBpIEZyb20taHV2dWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NworbXNnaWQgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIKK21zZ3N0ciAidGEgaW50ZSBtZWQgcGF0Y2hhciBzb20gbW90c3ZhcmFyIGVuIHVwcHN0csO2bXNpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY5Cittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICJ2aXNhIHBhdGNoZm9ybWF0IGlzdMOkbGxldCBmw7ZyIHN0YW5kYXJkIChwYXRjaCArIHN0YXQpIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzEKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIkUtcG9zdCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjcyCittc2dpZCAiaGVhZGVyIgorbXNnc3RyICJodXZ1ZCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjczCittc2dpZCAiYWRkIGVtYWlsIGhlYWRlciIKK21zZ3N0ciAibMOkZ2cgdGlsbCBlLXBvc3RodXZ1ZCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0IGJ1aWx0aW4vbG9nLmM6MTY3NgorbXNnaWQgImVtYWlsIgorbXNnc3RyICJlcG9zdCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0Cittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgImzDpGdnIHRpbGwgbW90dGFnYXJodXZ1ZCAoXCJUbzpcIikiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NgorbXNnaWQgImFkZCBDYzogaGVhZGVyIgorbXNnc3RyICJsw6RnZyB0aWxsIGtvcGllaHV2dWQgKFwiQ2M6XCIpIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzgKK21zZ2lkICJpZGVudCIKK21zZ3N0ciAiaWRlbnQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3OQorbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgInPDpHR0IEZyw6VuLWFkcmVzcyB0aWxsIDxpZGVudD4gKGVsbGVyIGluY2hlY2thcmUgb20gaWRlbnQgc2FrbmFzKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgxCittc2dpZCAibWVzc2FnZS1pZCIKK21zZ3N0ciAibWVkZGVsYW5kZS1pZCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgyCittc2dpZCAibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IgorbXNnc3RyICJnw7ZyIGRldCBmw7Zyc3RhIGJyZXZldCBldHQgc3ZhciB0aWxsIDxtZWRkZWxhbmRlLWlkPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgzIGJ1aWx0aW4vbG9nLmM6MTY4NgorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICJncsOkbnMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NAorbXNnaWQgImF0dGFjaCB0aGUgcGF0Y2giCittc2dzdHIgImJpZm9nYSBwYXRjaGVuIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODcKK21zZ2lkICJpbmxpbmUgdGhlIHBhdGNoIgorbXNnc3RyICJnw7ZyIHBhdGNoZW4gZXR0IGlubGluZS1vYmpla3QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5MQorbXNnaWQgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIgorbXNnc3RyICJha3RpdmVyYSBicmV2dHLDpWRuaW5nLCB0eXBlcjogc2hhbGxvdywgZGVlcCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkzCittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICJzaWduYXR1ciIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk0Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICJsw6RnZyB0aWxsIHNpZ25hdHVyIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTUKK21zZ2lkICJiYXNlLWNvbW1pdCIKK21zZ3N0ciAiYmFzaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NgorbXNnaWQgImFkZCBwcmVyZXF1aXNpdGUgdHJlZSBpbmZvIHRvIHRoZSBwYXRjaCBzZXJpZXMiCittc2dzdHIgImzDpGdnIHRpbGwgZsO2cmhhbmRza3LDpHZkIHRyw6RkaW5mbyBpIHBhdGNoc2VyaWVuIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTgKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUgZnJvbSBhIGZpbGUiCittc2dzdHIgImzDpGdnIHRpbGwgc2lnbmF0dXIgZnLDpW4gZmlsIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTkKK21zZ2lkICJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIgorbXNnc3RyICJ2aXNhIGludGUgZmlsbmFtbiBmw7ZyIHBhdGNoYXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMQorbXNnaWQgInNob3cgcHJvZ3Jlc3Mgd2hpbGUgZ2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICJ2aXNhIGbDtnJsb3Bwc2luZGlrYXRvciBtZWRhbiBwYXRjaGFyIHNrYXBhcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAzCittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJldj4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAidmlzYSDDpG5kcmluZ2FyIG1vdCA8cmV2PiBpIG9tc2xhZ3NicmV2IGVsbGVyIGVuc2FtIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDYKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmVmc3BlYz4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAidmlzYSDDpG5kcmluZ2FyIG1vdCA8cmVmc3BlYz4gaSBvbXNsYWdzYnJldiBlbGxlciBlbnNhbSBwYXRjaCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA4Cittc2dpZCAicGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAicHJvY2VudCBzb20gc2thcGVsc2UgdsOkZ3MgbWVkIgorCisjOiBidWlsdGluL2xvZy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAib2dpbHRpZyBpZGVudC1yYWQ6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE4MDcKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLW4gb2NoIC1rIGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwOQorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgb2NoIC1rIGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxNworbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgImthbiBpbnRlIGFudsOkbmRhIC0tbmFtZS1vbmx5IgorCisjOiBidWlsdGluL2xvZy5jOjE4MTkKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgImthbiBpbnRlIGFudsOkbmRhIC0tbmFtZS1zdGF0dXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgyMQorbXNnaWQgIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAia2FuIGludGUgYW52w6RuZGEgLS1jaGVjayIKKworIzogYnVpbHRpbi9sb2cuYzoxODU0Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgInN0YW5kYXJkIHV0LCBlbGxlciBrYXRhbG9nLCB2aWxrZW4gc2thIGRldCB2YXJhPyIKKworIzogYnVpbHRpbi9sb2cuYzoxOTU4Cittc2dpZCAiLS1pbnRlcmRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICItLWludGVyZGlmZiBrcsOkdmVyIC0tY292ZXItbGV0dGVyIGVsbGVyIGVuc2FtIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE5NjIKK21zZ2lkICJJbnRlcmRpZmY6IgorbXNnc3RyICJJbnRlcmRpZmY6IgorCisjOiBidWlsdGluL2xvZy5jOjE5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJkaWZmIGFnYWluc3QgdiVkOiIKK21zZ3N0ciAiSW50ZXJkaWZmIG1vdCB2JWQ6IgorCisjOiBidWlsdGluL2xvZy5jOjE5NjkKK21zZ2lkICItLWNyZWF0aW9uLWZhY3RvciByZXF1aXJlcyAtLXJhbmdlLWRpZmYiCittc2dzdHIgIi0tY3JlYXRpb24tZmFjdG9yIGtyw6R2ZXIgLS1yYW5nZS1kaWZmIgorCisjOiBidWlsdGluL2xvZy5jOjE5NzMKK21zZ2lkICItLXJhbmdlLWRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICItLXJhbmdlLWRpZmYga3LDpHZlciAtLWNvdmVyLWxldHRlciBlbGxlciBlbnNhbSBwYXRjaCIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgxCittc2dpZCAiUmFuZ2UtZGlmZjoiCittc2dzdHIgIkludGVydmFsbC1kaWZmOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJhbmdlLWRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICJJbnRlcnZhbGwtZGlmZiBtb3QgdiVkOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2Egc2lnbmF0dXJmaWwgXCIlc1wiIgorCisjOiBidWlsdGluL2xvZy5jOjIwMjkKK21zZ2lkICJHZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgIlNrYXBhciBwYXRjaGFyIgorCisjOiBidWlsdGluL2xvZy5jOjIwNzMKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrYXBhIHV0ZGF0YWZpbGVyIgorCisjOiBidWlsdGluL2xvZy5jOjIxMzIKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs8dXBwc3Ryw7ZtPiBbPGh1dnVkPiBbPGdyw6Rucz5dXV0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIkt1bmRlIGludGUgaGl0dGEgZW4gc3DDpXJhZCBmasOkcnJncmVuLCBhbmdlIDx1cHBzdHLDtm0+IG1hbnVlbGx0LlxuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDcwCittc2dpZCAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgbHMtZmlsZXMgWzxmbGFnZ29yPl0gWzxmaWw+Li4uXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyNgorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgImlkZW50aWZpZXJhIGZpbHN0YXR1cyBtZWQgdGFnZ2FyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI4Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgImFudsOkbmQgc23DpSBib2tzdMOkdmVyIGbDtnIgXCJhbnRhIG9mw7Zyw6RuZHJhZGVcIi1maWxlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzMAorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2ZzbW9uaXRvciBjbGVhbicgZmlsZXMiCittc2dzdHIgImFudsOkbmQgc23DpSBib2tzdMOkdmVyIGbDtnIgXCJmc21vbml0b3IgY2xlYW5cIi1maWxlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzMgorbXNnaWQgInNob3cgY2FjaGVkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGRlZmF1bHQpIgorbXNnc3RyICJ2aXNhIGNhY2hhZGUgZmlsZXIgaSB1dGRhdGEgKHN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNAorbXNnaWQgInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJ2aXNhIGJvcnR0YWduYSBmaWxlciBpIHV0ZGF0YSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNgorbXNnaWQgInNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAidmlzYSBtb2RpZmllcmFkZSBmaWxlciBpIHV0ZGF0YSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzOAorbXNnaWQgInNob3cgb3RoZXIgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAidmlzYSBhbmRyYSBmaWxlciBpIHV0ZGF0YSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MAorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJ2aXNhIGlnbm9yZXJhZGUgZmlsZXIgaSB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDMKK21zZ2lkICJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAidmlzYSBrw7ZhdCBpbm5laMOlbGxzIG9iamVrdG5hbW4gaSB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDUKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICJ2aXNhIGZpbGVyIGkgZmlsc3lzdGVtZXQgc29tIGJlaMO2dmVyIHRhcyBib3J0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ3Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICJ2aXNhIGVuZGFzdCBuYW1uIGbDtnIgXCJhbmRyYVwiIGthdGFsb2dlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0OQorbXNnaWQgInNob3cgbGluZSBlbmRpbmdzIG9mIGZpbGVzIgorbXNnc3RyICJ2aXNhIHJhZHNsdXQgaSBmaWxlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1MQorbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgInZpc2EgaW50ZSB0b21tYSBrYXRhbG9nZXIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTQKK21zZ2lkICJzaG93IHVubWVyZ2VkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgInZpc2EgZWogc2FtbWFuc2xhZ25hIGZpbGVyIGkgdXRkYXRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU2Cittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgInZpc2EgXCJyZXNvbHZlLXVuZG9cIi1pbmZvcm1hdGlvbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1OAorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAiaG9wcGEgw7Z2ZXIgZmlsZXIgc29tIG1vdHN2YXJhciBtw7Zuc3RlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2MQorbXNnaWQgImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iCittc2dzdHIgImV4a2x1ZGVyYSBtw7Zuc3RlciBzb20gbMOkc2VzIGZyw6VuIDxmaWw+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY0Cittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgImzDpHMgeXR0ZXJsaWdhcmUgcGVyLWthdGFsb2ctZXhrbHVkZXJpbmdzbcO2bnN0ZXIgZnLDpW4gPGZpbD4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjYKK21zZ2lkICJhZGQgdGhlIHN0YW5kYXJkIGdpdCBleGNsdXNpb25zIgorbXNnc3RyICJsw6RnZyB0aWxsIGdpdDpzIHN0YW5kYXJkZXhrbHVkZXJpbmdhciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MAorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJnw7ZyIHV0ZGF0YSByZWxhdGl2IHRpbGwgcHJvamVrdGV0cyB0b3Bwa2F0YWxvZyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MworbXNnaWQgInJlY3Vyc2UgdGhyb3VnaCBzdWJtb2R1bGVzIgorbXNnc3RyICJyZWt1cnNlcmEgbmVyIGkgdW5kZXJtb2R1bGVyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc1Cittc2dpZCAiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIgorbXNnc3RyICJvbSBlbiA8ZmlsPiBpbnRlIMOkciBpbmRleGV0LCBiZXRyYWt0YSBkZXQgc29tIGV0dCBmZWwiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzYKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAidHLDpGQtaWd0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc3Cittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAibMOldHNhcyBhdHQgc8O2a3bDpGdhciBib3J0dGFnbmEgc2VkYW4gPHRyw6RkLWlndD4gZm9ydGZhcmFuZGUgZmlubnMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzkKK21zZ2lkICJzaG93IGRlYnVnZ2luZyBkYXRhIgorbXNnc3RyICJ2aXNhIGZlbHPDtmtuaW5nc3V0ZGF0YSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo5Cittc2dpZCAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPHJlcG9zaXRvcnk+IFs8cmVmcz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPGFya2l2PiBbPHJlZmVyZW5zZXI+Li4uXV0iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAidmlzYSBpbnRlIGZqw6Ryci1VUkwiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAgYnVpbHRpbi9scy1yZW1vdGUuYzo2MiBidWlsdGluL3JlYmFzZS5jOjE1NjEKK21zZ2lkICJleGVjIgorbXNnc3RyICJleGVjIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYxIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjMKK21zZ2lkICJwYXRoIG9mIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIGhvc3QiCittc2dzdHIgInPDtmt2w6RnIHRpbGwgZ2l0LXVwbG9hZC1wYWNrIHDDpSBmasOkcnJlbiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NQorbXNnaWQgImxpbWl0IHRvIHRhZ3MiCittc2dzdHIgImJlZ3LDpG5zYSB0aWxsIHRhZ2dhciIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NgorbXNnaWQgImxpbWl0IHRvIGhlYWRzIgorbXNnc3RyICJiZWdyw6Ruc2EgdGlsbCBodXZ1ZGVuIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY3Cittc2dpZCAiZG8gbm90IHNob3cgcGVlbGVkIHRhZ3MiCittc2dzdHIgInZpc2EgaW50ZSBhdnNrYWxhZGUgdGFnZ2FyIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY5Cittc2dpZCAidGFrZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiBpbnRvIGFjY291bnQiCittc2dzdHIgInRhIGjDpG5zeW4gdGlsbCB1cmwuPGJhcz4uaW5zdGVhZE9mIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjcyCittc2dpZCAiZXhpdCB3aXRoIGV4aXQgY29kZSAyIGlmIG5vIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kIgorbXNnc3RyICJhdnNsdXRhIG1lZCBmZWxrb2QgMiBvbSBtb3RzdmFyYW5kZSByZWZlcmVuc2VyIGludGUgaGl0dGFzIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjc1Cittc2dpZCAic2hvdyB1bmRlcmx5aW5nIHJlZiBpbiBhZGRpdGlvbiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgYnkgaXQiCittc2dzdHIgInZpc2EgdW5kZXJsaWdnYW5kZSByZWZlcmVucyBvY2ggb2JqZWt0ZXQgZGV0IHBla2FyIHDDpSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MzAKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBbPGZsYWdnb3I+XSA8dHLDpGQtaWd0PiBbPHPDtmt2w6RnPi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOAorbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAidmlzYSBlbmRhc3QgdHLDpGQiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMAorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIKK21zZ3N0ciAicmVrdXJzZXJhIG5lciBpIHVuZGVydHLDpGQiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMgorbXNnaWQgInNob3cgdHJlZXMgd2hlbiByZWN1cnNpbmciCittc2dzdHIgInZpc2EgdHLDpGQgbWVkYW4gcmVrdXJzZXJpbmciCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNQorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgInRlcm1pbmVyYSBwb3N0ZXIgbWVkIE5VTC1ieXRlIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzYKK21zZ2lkICJpbmNsdWRlIG9iamVjdCBzaXplIgorbXNnc3RyICJpbmtsdWRlcmEgb2JqZWt0c3RvcmxlayIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM4IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MAorbXNnaWQgImxpc3Qgb25seSBmaWxlbmFtZXMiCittc2dzdHIgInZpc2EgZW5kYXN0IGZpbG5hbW4iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MworbXNnaWQgInVzZSBmdWxsIHBhdGggbmFtZXMiCittc2dzdHIgImFudsOkbmQgZnVsbHN0w6RuZGlnYSBzw7ZrdsOkZ3NuYW1uIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDUKK21zZ2lkICJsaXN0IGVudGlyZSB0cmVlOyBub3QganVzdCBjdXJyZW50IGRpcmVjdG9yeSAoaW1wbGllcyAtLWZ1bGwtbmFtZSkiCittc2dzdHIgInZpc2EgaGVsYSB0csOkZGV0OyBpbnRlIGJhcmEgYWt0dWVsbCBrYXRhbG9nIChpbXBsaWNlcmFyIC0tZnVsbC1uYW1lKSIKKworIzogYnVpbHRpbi9tYWlsc3BsaXQuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgbWJveDogJyVzJyIKK21zZ3N0ciAidG9tIG1ib3g6IFwiJXNcIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU1Cittc2dpZCAiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIFs8Y29tbWl0Pi4uLl0iCittc2dzdHIgImdpdCBtZXJnZSBbPGZsYWdnb3I+XSBbPGluY2hlY2tuaW5nPi4uLl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NgorbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU3Cittc2dpZCAiZ2l0IG1lcmdlIC0tY29udGludWUiCittc2dzdHIgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE5Cittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJmbGFnZ2FuIFwibVwiIGJlaMO2dmVyIGV0dCB2w6RyZGUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiZmxhZ2dhbiBcIiVzXCIgYmVow7Z2ZXIgZXR0IHbDpHJkZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBtZXJnZSBzdHJhdGVneSAnJXMnLlxuIgorbXNnc3RyICJLdW5kZSBpbnRlIGhpdHRhIHNhbW1hbnNsYWduaW5nc3N0cmF0ZWdpbiBcIiVzXCIuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiVGlsbGfDpG5nbGlnYSBzdHJhdGVnaWVyIMOkcjoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIlRpbGxnw6RuZ2xpZ2Egc2tyw6RkZGFyc3lkZGEgc3RyYXRlZ2llciDDpHI6IgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ1IGJ1aWx0aW4vcHVsbC5jOjEzMgorbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgInZpc2EgaW50ZSBlbiBkaWZmc3RhdCBuw6RyIHNhbW1hbnNsYWduaW5nZW4gw6RyIGbDpHJkaWciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDggYnVpbHRpbi9wdWxsLmM6MTM1Cittc2dpZCAic2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICJ2aXNhIGVuIGRpZmZzdGF0IG7DpHIgc2FtbWFuc2xhZ25pbmdlbiDDpHIgZsOkcmRpZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0OSBidWlsdGluL3B1bGwuYzoxMzgKK21zZ2lkICIoc3lub255bSB0byAtLXN0YXQpIgorbXNnc3RyICIoc3lub255bSB0aWxsIC0tc3RhdCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTEgYnVpbHRpbi9wdWxsLmM6MTQxCittc2dpZCAiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisibMOkZ2cgdGlsbCAoc29tIG1lc3QgPG4+KSBwb3N0ZXIgZnLDpW4gc2hvcnRsb2cgdGlsbCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NCBidWlsdGluL3B1bGwuYzoxNDcKK21zZ2lkICJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIKK21zZ3N0ciAic2thcGEgZW4gZW5zYW0gaW5jaGVja25pbmcgaXN0w6RsbGV0IGbDtnIgZW4gc2FtbWFuc2xhZ25pbmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTYgYnVpbHRpbi9wdWxsLmM6MTUwCittc2dpZCAicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIgorbXNnc3RyICJ1dGbDtnIgZW4gaW5jaGVja25pbmcgb20gc2FtbWFuc2xhZ25pbmdlbiBseWNrYWRlcyAoc3RhbmRhcmQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU4IGJ1aWx0aW4vcHVsbC5jOjE1MworbXNnaWQgImVkaXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyIKK21zZ3N0ciAicmVkaWdlcmEgbWVkZGVsYW5kZSBpbm5hbiBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MAorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgInRpbGzDpXQgc25hYmJzcG9sbmluZyAoc3RhbmRhcmQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjYyIGJ1aWx0aW4vcHVsbC5jOjE2MAorbXNnaWQgImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiCittc2dzdHIgImF2YnJ5dCBvbSBzbmFiYnNwb2xuaW5nIGludGUgw6RyIG3DtmpsaWciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjYgYnVpbHRpbi9wdWxsLmM6MTYzCittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICJiZWtyw6RmdGEgYXR0IGRlbiBuYW1uZ2l2bmEgaW5jaGVja25pbmdlbiBoYXIgZW4gZ2lsdGlnIEdQRy1zaWduYXR1ciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NyBidWlsdGluL25vdGVzLmM6Nzg3IGJ1aWx0aW4vcHVsbC5jOjE2NworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjAgYnVpbHRpbi9yZWJhc2UuYzoxNTc1IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgInN0cmF0ZWdpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY4IGJ1aWx0aW4vcHVsbC5jOjE2OAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAic2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2kgYXR0IGFudsOkbmRhIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY5IGJ1aWx0aW4vcHVsbC5jOjE3MQorbXNnaWQgIm9wdGlvbj12YWx1ZSIKK21zZ3N0ciAiYWx0ZXJuYXRpdj12w6RyZGUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzAgYnVpbHRpbi9wdWxsLmM6MTcyCittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiYWx0ZXJuYXRpdiBmw7ZyIHZhbGQgc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2kiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzIKK21zZ2lkICJtZXJnZSBjb21taXQgbWVzc2FnZSAoZm9yIGEgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZSkiCittc2dzdHIgImluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciAoaWNrZSBzbmFiYnNwb2xhbmRlKSBzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3OQorbXNnaWQgImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICJhdmJyeXQgZGVuIHDDpWfDpWVuZGUgc2FtbWFuc2xhZ25pbmdlbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MQorbXNnaWQgIi0tYWJvcnQgYnV0IGxlYXZlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgYWxvbmUiCittc2dzdHIgIi0tYWJvcnQgbWVuIGzDpG1uYSBpbmRleCBvY2ggYXJiZXRza2F0YWxvZyBlbnNhbW1hIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgzCittc2dpZCAiY29udGludWUgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgImZvcnRzw6R0dCBkZW4gcMOlZ8OlZW5kZSBzYW1tYW5zbGFnbmluZ2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6Mjg1IGJ1aWx0aW4vcHVsbC5jOjE3OQorbXNnaWQgImFsbG93IG1lcmdpbmcgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAidGlsbMOldCBzYW1tYW5zbGFnbmluZyBhdiBvcmVsYXRlcmFkZSBoaXN0b3JpZXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyOTEKK21zZ2lkICJieXBhc3MgcHJlLW1lcmdlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAiZsO2cmJpZ8OlIHByZS1tZXJnZS1jb21taXQtIG9jaCBjb21taXQtbXNnLWtyb2thciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMwOAorbXNnaWQgImNvdWxkIG5vdCBydW4gc3Rhc2guIgorbXNnc3RyICJrdW5kZSBrw7ZyYSBzdGFzaC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTMKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgInN0YXNoIG1pc3NseWNrYWRlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICJpbnRlIGV0dCBnaWx0aWd0IG9iamVrdDogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNDAgYnVpbHRpbi9tZXJnZS5jOjM1NworbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgInJlYWQtdHJlZSBtaXNzbHlja2FkZXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozODcKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiIChpbmdldCBhdHQgcGxhdHRhIHRpbGwpIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiVGlsbHBsYXR0bmluZ3NpbmNoZWNrbmluZyAtLSB1cHBkYXRlcmFyIGludGUgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiSW5nZXQgc2FtbWFuc2xhZ25pbmdzbWVkZGVsYW5kZSAtLSB1cHBkYXRlcmFyIGludGUgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIlwiJXNcIiB2ZXJrYXIgaW50ZSBwZWthIHDDpSBlbiBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBzdHJpbmc6ICVzIgorbXNnc3RyICJGZWxha3RpZyBicmFuY2guJXMubWVyZ2VvcHRpb25zLXN0csOkbmc6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzA4Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiSGFudGVyYXIgaW50ZSBuw6Vnb3QgYW5uYXQgw6RuIGVuIHNhbW1hbnNsYWduaW5nIGF2IHR2w6UgaHV2dWRlbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiRmVsYWt0aWcgZmxhZ2dhIGbDtnIgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpHNhIGZyw6VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyJDaGVja2FyIGludGUgaW4gc2FtbWFuc2xhZ25pbmdlbjsgYW52w6RuZCBcImdpdCBjb21taXRcIiBmw7ZyIGF0dCBzbHV0ZsO2cmEgIgorImRlbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwNAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCittc2dzdHIgIiIKKyJBbmdlIGV0dCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIGbDtnIgYXR0IGbDtnJrbGFyYSB2YXJmw7ZyIHNhbW1hbnNsYWduaW5nZW5cbiIKKyLDpHIgbsO2ZHbDpG5kaWcsIHNwZWNpZWxsdCBvbSBkZW4gc2zDpXIgaW4gZW4gdXBwZGF0ZXJhZCB1cHBzdHLDtm0gaSBlblxuIgorInRlbWFncmVuLlxuIgorIlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA5Cittc2dpZCAiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiRXR0IHRvbXQgbWVkZGVsYW5kZSBhdmJyeXRlciBpbmNoZWNrbmluZ2VuLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiUmFkZXIgc29tIGlubGVkcyBtZWQgXCIlY1wiIGtvbW1lciBpZ25vcmVyYXMsIG9jaCBldHQgdG9tdCBtZWRkZWxhbmRlXG4iCisiYXZicnl0ZXIgaW5jaGVja25pbmdlbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg2NQorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAiVG9tdCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIlVuZGVyYmFydC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk0MQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LlxuIgorbXNnc3RyICIiCisiS3VuZGUgaW50ZSBzbMOlIGlob3AgYXV0b21hdGlza3Q7IGZpeGEga29uZmxpa3RlciBvY2ggY2hlY2thIGluIHJlc3VsdGF0ZXQuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODAKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIkludGUgcMOlIG7DpWdvbiBncmVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4MgorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiSW5nZW4gZmrDpHJyIGbDtnIgYWt0dWVsbCBncmVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4NAorbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiSW5nZW4gc3RhbmRhcmR1cHBzdHLDtm0gYW5naXZlbiBmw7ZyIGFrdHVlbGwgZ3Jlbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAiSW5nZW4gZmrDpHJyc3DDpXJhbmRlIGdyZW4gZsO2ciAlcyBmcsOlbiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIHZhbHVlICclcycgaW4gZW52aXJvbm1lbnQgJyVzJyIKK21zZ3N0ciAiRmVsYWt0aWd0IHbDpHJkZSBcIiVzXCIgaSBtaWxqw7Z2YXJpYWJlbG4gXCIlc1wiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSBpbiAlczogJXMiCittc2dzdHIgImludGUgbsOlZ290IHZpIGthbiBzbMOlIGlob3AgbWVkICVzOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExODMKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiaW50ZSBuw6Vnb3Qgdmkga2FuIHNsw6UgaWhvcCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODYKK21zZ2lkICItLWFib3J0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWFib3J0IHRhciBpbmdhIGFyZ3VtZW50IgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5MAorbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIHRvIGFib3J0IChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiSW5nZW4gc2FtbWFuc2xhZ25pbmcgYXR0IGF2YnJ5dGEgKE1FUkdFX0hFQUQgc2FrbmFzKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk5Cittc2dpZCAiLS1xdWl0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLXF1aXQgdGFyIGluZ2EgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzEyCittc2dpZCAiLS1jb250aW51ZSBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1jb250aW51ZSB0YXIgaW5nYSBhcmd1bWVudCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTYKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIkluZ2VuIHNhbW1hbnNsYWduaW5nIHDDpWfDpXIgKE1FUkdFX0hFQUQgc2FrbmFzKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzMyCittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkR1IGhhciBpbnRlIGF2c2x1dGF0IHNhbW1hbnNsYWduaW5nZW4gKE1FUkdFX0hFQUQgZmlubnMpLlxuIgorIkNoZWNrYSBpbiBkaW5hIMOkbmRyaW5nYXIgaW5uYW4gZHUgc2zDpXIgaWhvcC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM5Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkR1IGhhciBpbnRlIGF2c2x1dGF0IGRpbiBcImNoZXJyeS1waWNrXCIgKENIRVJSWV9QSUNLX0hFQUQgZmlubnMpLlxuIgorIkNoZWNrYSBpbiBkaW5hIMOkbmRyaW5nYXIgaW5uYW4gZHUgc2zDpXIgaWhvcC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzQyCittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICJEdSBoYXIgaW50ZSBhdnNsdXRhdCBkaW4gXCJjaGVycnktcGlja1wiIChDSEVSUllfUElDS19IRUFEIGZpbm5zKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzU2Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCittc2dzdHIgIkR1IGthbiBpbnRlIGtvbWJpbmVyYSAtLXNxdWFzaCBtZWQgLS1uby1mZi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzU4Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1jb21taXQuIgorbXNnc3RyICJEdSBrYW4gaW50ZSBrb21iaW5lcmEgLS1zcXVhc2ggbWVkIC0tY29tbWl0LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNzQKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiSW5nZW4gaW5jaGVja25pbmcgYW5naXZlbiBvY2ggbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gw6RyIGVqIHNhdHQuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5MQorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICJTdMO2ZGVyIGludGUgZW4gdGlsbHBsYXR0bmluZ3NpbmNoZWNrbmluZyBww6UgZXR0IHRvbXQgaHV2dWQgw6RubnUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkzCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIklja2Utc25hYmJzcG9sYWQgaW5jaGVja25pbmcga2FuIGludGUgYW52w6RuZGFzIG1lZCBldHQgdG9tdCBodXZ1ZCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSBpbnRlIG7DpWdvdCB2aSBrYW4gc2zDpSBpaG9wIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQwMAorbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIkthbiBlbmRhc3Qgc2zDpSBpaG9wIGVuIGVuZGEgaW5jaGVja25pbmcgaSBldHQgdG9tdCBodXZ1ZCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0ODEKK21zZ2lkICJyZWZ1c2luZyB0byBtZXJnZSB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJ2w6RncmFyIHNsw6Ugc2FtbWFuIG9yZWxhdGVyYWQgaGlzdG9yaWsiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDkwCittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiIKK21zZ3N0ciAiUmVkYW4gw6Agam91ci4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICJVcHBkYXRlcmFyICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAiRsO2cnPDtmtlciByaWt0aWd0IGVua2VsIHNhbW1hbnNsYWduaW5nIGkgaW5kZXhldC4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICJOZWouXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTc0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiBZZWVhaCEiCittc2dzdHIgIlJlZGFuIMOgIGpvdXIuIFRvcHBlbiEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTgwCittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICJLYW4gaW50ZSBzbmFiYnNwb2xhLCBhdmJyeXRlci4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjAzIGJ1aWx0aW4vbWVyZ2UuYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICLDhXRlcnNwb2xhciB0csOkZGV0IHRpbGwgb3LDtnJ0Li4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICJGw7Zyc8O2a2VyIHNhbW1hbnNsYWduaW5nc3N0cmF0ZWdpbiAlcy4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiSW5nZW4gc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2kgaGFudGVyYWRlIHNhbW1hbnNsYWduaW5nZW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICJTYW1tYW5zbGFnbmluZyBtZWQgc3RyYXRlZ2luICVzIG1pc3NseWNrYWRlcy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIkFudsOkbmRlciAlcyBmw7ZyIGF0dCBmw7ZyYmVyZWRhIGzDtnNuaW5nIGbDtnIgaGFuZC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAiIgorIkF1dG9tYXRpc2sgc2FtbWFuc2xhZ25pbmcgbHlja2FkZXM7IHN0b3BwYXIgZsO2cmUgaW5jaGVja25pbmcgc29tIMO2bnNrYXRcbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzIKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8aW5jaGVja25pbmc+IDxpbmNoZWNrbmluZz4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMzCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8aW5jaGVja25pbmc+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNAorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGluY2hlY2tuaW5nPi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzUKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxpbmNoZWNrbmluZz4gPGluY2hlY2tuaW5nPiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzYKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8aW5jaGVja25pbmc+XSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTUzCittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICJza3JpdiB1dCBhbGxhIGdlbWVuc2FtbWEgYW5mw6RkZXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NQorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAiaGl0dGEgYW5mYWRlciBmw7ZyIGVua2VsIG4tdsOkZ3NzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU3Cittc2dpZCAibGlzdCByZXZzIG5vdCByZWFjaGFibGUgZnJvbSBvdGhlcnMiCittc2dzdHIgInZpc2EgcmV2aXNpb25lciBzb20gaW50ZSBrYW4gbsOlcyBmcsOlbiBhbmRyYSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU5Cittc2dpZCAiaXMgdGhlIGZpcnN0IG9uZSBhbmNlc3RvciBvZiB0aGUgb3RoZXI/IgorbXNnc3RyICLDpHIgZGVuIGbDtnJzdGEgYW5mYWRlciB0aWxsIGRlbiBhbmRyYT8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE2MQorbXNnaWQgImZpbmQgd2hlcmUgPGNvbW1pdD4gZm9ya2VkIGZyb20gcmVmbG9nIG9mIDxyZWY+IgorbXNnc3RyICJzZSB2YXIgPGluY2hlY2tuaW5nPiBncmVuYWRlcyBhdiBmcsOlbiByZWZlcmVuc2xvZ2dlbiBmcsOlbiA8cmVmPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6OQorbXNnaWQgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPG9wdGlvbnM+XSBbLUwgPG5hbWUxPiBbLUwgPG9yaWc+IFstTCA8bmFtZTI+XV1dIDxmaWxlMT4gIgorIjxvcmlnLWZpbGU+IDxmaWxlMj4iCittc2dzdHIgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPGFsdGVybmF0aXY+XSBbLUwgPG5hbW4xPiBbLUwgPG9yaWc+IFstTCA8bmFtbjI+XV1dIDxmaWwxPiAiCisiPG9yaWdmaWw+IDxmaWwyPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJzw6RuZCByZXN1bHRhdCB0aWxsIHN0YW5kYXJkIHV0IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNgorbXNnaWQgInVzZSBhIGRpZmYzIGJhc2VkIG1lcmdlIgorbXNnc3RyICJhbnbDpG5kIGRpZmYzLWJhc2VyYWQgc2FtbWFuc2xhZ25pbmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM3Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIgorbXNnc3RyICJmw7ZyIGtvbmZsaWt0ZXIsIGFudsOkbmQgdsOlciB2ZXJzaW9uIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozOQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJmw7ZyIGtvbmZsaWt0ZXIsIGFudsOkbmQgZGVyYXMgdmVyc2lvbiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDEKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIgorbXNnc3RyICJmw7ZyIGtvbmZsaWt0ZXIsIGFudsOkbmQgZW4gZsO2cmVuYWQgdmVyc2lvbiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAiZsO2ciBrb25mbGlrdGVyLCBhbnbDpG5kIGRlbm5hIG1hcmvDtnJzdG9ybGVrIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAidmFybmEgaW50ZSBvbSBrb25mbGlrdGVyIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NworbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIKK21zZ3N0ciAic8OkdHQgZXRpa2V0dGVyIGbDtnIgZmlsMS9vcmlnZmlsL2ZpbDIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gJXMiCittc2dzdHIgIm9rw6RuZCBmbGFnZ2EgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIG9iamVrdGV0IFwiJXNcIiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiBJZ25vcmluZyAlcy4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiBJZ25vcmluZyAlcy4iCittc2dzdHJbMF0gImthbiBpbnRlIGhhbnRlcmEgbWVyIMOkbiAlZCBiYXMuIElnbm9yZXJhciAlcy4iCittc2dzdHJbMV0gImthbiBpbnRlIGhhbnRlcmEgbWVyIMOkbiAlZCBiYXNlci4gSWdub3JlcmFyICVzLiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo2NQorbXNnaWQgIm5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgImhhbnRlcmFyIGludGUgbsOlZ290IGFubmF0IMOkbiBlbiBzYW1tYW5zbGFnbmluZyBhdiB0dsOlIGh1dnVkZW4uIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjc0IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgcmVmICclcyciCittc2dzdHIgImt1bmRlIGludGUgYmVzdMOkbW1hIHJlZmVyZW5zZW4gXCIlc1wiIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgd2l0aCAlc1xuIgorbXNnc3RyICJTbMOlciBpaG9wICVzIG1lZCAlc1xuIgorCisjOiBidWlsdGluL21rdHJlZS5jOjY2Cittc2dpZCAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKK21zZ3N0ciAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTQKK21zZ2lkICJpbnB1dCBpcyBOVUwgdGVybWluYXRlZCIKK21zZ3N0ciAiaW5kYXRhIMOkciBOVUwtdGVybWluZXJhZCIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTUgYnVpbHRpbi93cml0ZS10cmVlLmM6MjYKK21zZ2lkICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgInRpbGzDpXQgc2FrbmFkZSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU2Cittc2dpZCAiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIgorbXNnc3RyICJ0aWxsw6V0IHNrYXBhIG1lciDDpG4gZXR0IHRyw6RkIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo5Cittc2dpZCAiIgorImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8b3B0aW9ucz5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTxzaXplPikiCittc2dzdHIgIiIKKyJnaXQgbXVsdGktcGFjay1pbmRleCBbPGZsYWdnb3I+XSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC0iCisic2l6ZT08c3Rvcmxlaz4pIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNgorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiCittc2dzdHIgIm9iamVrdGthdGFsb2cgbWVkIHVwcHPDpHR0bmluZyBhdiBwYXIgbWVkIHBha2V0ZmlsZXIgb2NoIHBhY2staW5kZXgiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI5Cittc2dpZCAiIgorImR1cmluZyByZXBhY2ssIGNvbGxlY3QgcGFjay1maWxlcyBvZiBzbWFsbGVyIHNpemUgaW50byBhIGJhdGNoIHRoYXQgaXMgIgorImxhcmdlciB0aGFuIHRoaXMgc2l6ZSIKK21zZ3N0ciAiIgorInZpZCBvbXBhY2tuaW5nLCBzYW1sYSBtaW5kcmUgcGFrZXRmaWxlciBpIGVuIGJ1bnQgc29tIMOkciBzdMO2cnJlIMOkbiBkZW5uYSAiCisic3Rvcmxla3QiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjUwIGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NjcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgImbDtnIgbcOlbmdhIGFyZ3VtZW50IgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo2MAorbXNnaWQgIi0tYmF0Y2gtc2l6ZSBvcHRpb24gaXMgb25seSBmb3IgJ3JlcGFjaycgc3ViY29tbWFuZCIKK21zZ3N0ciAiZmxhZ2dhbiAtLWJhdGNoLXNpemUgYW52w6RuZHMgYmFyYSBpIHVuZGVya29tbWFuZG90IFwicmVwYWNrXCIiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAib2vDpG50IHVuZGVya29tbWFuZG86ICVzIgorCisjOiBidWlsdGluL212LmM6MTgKK21zZ2lkICJnaXQgbXYgWzxvcHRpb25zPl0gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIKK21zZ3N0ciAiZ2l0IG12IFs8ZmxhZ2dvcj5dIDxrw6RsbGE+Li4uIDxtw6VsPiIKKworIzogYnVpbHRpbi9tdi5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBpcyBpbiBpbmRleCBhbmQgbm8gc3VibW9kdWxlPyIKK21zZ3N0ciAiS2F0YWxvZ2VuICVzIMOkciBpIGluZGV4ZXQgb2NoIGludGUgZW4gdW5kZXJtb2R1bD8iCisKKyM6IGJ1aWx0aW4vbXYuYzo4NQorbXNnaWQgIlBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisiS8O2YSBkaW5hIMOkbmRyaW5nYXIgaSAuZ2l0bW9kdWxlcyBlbGxlciBhbnbDpG5kIFwic3Rhc2hcIiBmw7ZyIGF0dCBmb3J0c8OkdHRhIgorCisjOiBidWlsdGluL212LmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgaW4gaW5kZXgiCittc2dzdHIgIiUuKnMgw6RyIGkgaW5kZXhldCIKKworIzogYnVpbHRpbi9tdi5jOjEyNQorbXNnaWQgImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAidHZpbmdhIGZseXR0YS/DpG5kcmEgbmFtbiDDpHZlbiBvbSBtw6VsZXQgZmlubnMiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjcKK21zZ2lkICJza2lwIG1vdmUvcmVuYW1lIGVycm9ycyIKK21zZ3N0ciAiaG9wcGEgw7Z2ZXIgZmVsIHZpZCBmbHl0dC9uYW1uw6RuZHJpbmciCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gJyVzJyBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgImRlc3RpbmF0aW9uZW4gXCIlc1wiIMOkciBpbmdlbiBrYXRhbG9nIgorCisjOiBidWlsdGluL212LmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlbmFtZSBvZiAnJXMnIHRvICclcydcbiIKK21zZ3N0ciAiS29udHJvbGxlcmFyIG5hbW5ieXRlIGF2IFwiJXNcIiB0aWxsIFwiJXNcIlxuIgorCisjOiBidWlsdGluL212LmM6MTg0Cittc2dpZCAiYmFkIHNvdXJjZSIKK21zZ3N0ciAiZmVsYWt0aWcga8OkbGxhIgorCisjOiBidWlsdGluL212LmM6MTg3Cittc2dpZCAiY2FuIG5vdCBtb3ZlIGRpcmVjdG9yeSBpbnRvIGl0c2VsZiIKK21zZ3N0ciAia2FuIGludGUgZmx5dHRhIGthdGFsb2cgdGlsbCBzaWcgc2rDpGx2IgorCisjOiBidWlsdGluL212LmM6MTkwCittc2dpZCAiY2Fubm90IG1vdmUgZGlyZWN0b3J5IG92ZXIgZmlsZSIKK21zZ3N0ciAia2FuIGludGUgZmx5dHRhIGthdGFsb2cgw7Z2ZXIgZmlsIgorCisjOiBidWlsdGluL212LmM6MTk5Cittc2dpZCAic291cmNlIGRpcmVjdG9yeSBpcyBlbXB0eSIKK21zZ3N0ciAia8OkbGxrYXRhbG9nZW4gw6RyIHRvbSIKKworIzogYnVpbHRpbi9tdi5jOjIyNAorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgImludGUgdmVyc2lvbnNoYW50ZXJhZCIKKworIzogYnVpbHRpbi9tdi5jOjIyNworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAiZGVzdGluYXRpb25lbiBmaW5ucyIKKworIzogYnVpbHRpbi9tdi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICJza3JpdmVyIMO2dmVyIFwiJXNcIiIKKworIzogYnVpbHRpbi9tdi5jOjIzOAorbXNnaWQgIkNhbm5vdCBvdmVyd3JpdGUiCittc2dzdHIgIkthbiBpbnRlIHNrcml2YSDDtnZlciIKKworIzogYnVpbHRpbi9tdi5jOjI0MQorbXNnaWQgIm11bHRpcGxlIHNvdXJjZXMgZm9yIHRoZSBzYW1lIHRhcmdldCIKK21zZ3N0ciAiZmxlcmEga8OkbGxvciBmw7ZyIHNhbW1hIG3DpWwiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDMKK21zZ2lkICJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImRlc3RpbmF0aW9uc2thdGFsb2dlbiBmaW5ucyBpbnRlIgorCisjOiBidWlsdGluL212LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIlcywga8OkbGxhPSVzLCBtw6VsPSVzIgorCisjOiBidWlsdGluL212LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIkJ5dGVyIG5hbW4gcMOlICVzIHRpbGwgJXNcbiIKKworIzogYnVpbHRpbi9tdi5jOjI3NyBidWlsdGluL3JlbW90ZS5jOjc4MSBidWlsdGluL3JlcGFjay5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGJ5dGEgbmFtbiBww6UgXCIlc1wiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY1Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxmbGFnZ29yPl0gPGluY2hlY2tuaW5nPi4uLiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NgorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8ZmxhZ2dvcj5dIC0tYWxsIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY3Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tc3RkaW4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPGZsYWdnb3I+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI0Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICJza3JpdiBlbmRhc3QgbmFtbiAoaW5nZW4gU0hBLTEpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI1Cittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICJhbnbDpG5kIGVuZGFzdCB0YWdnYXIgZsO2ciBhdHQgbmFtbmdlIGluY2hlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjcKK21zZ2lkICJvbmx5IHVzZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiYW52w6RuZCBlbmRhc3QgcmVmZXJlbnNlciBzb20gbW90c3ZhcmFyIDxtw7Zuc3Rlcj4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjkKK21zZ2lkICJpZ25vcmUgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgImlnbm9yZXJhIHJlZmVyZW5zZXIgc29tIG1vdHN2YXJhciA8bcO2bnN0ZXI+IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTMxCittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAibGlzdGEgYWxsYSBpbmNoZWNrbmluZ2FyIHNvbSBrYW4gbsOlcyBhbGxhIHJlZmVyZW5zZXIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzIKK21zZ2lkICJyZWFkIGZyb20gc3RkaW4iCittc2dzdHIgImzDpHMgZnLDpW4gc3RhbmRhcmQgaW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzMKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgInRpbGzDpXQgYXR0IHNrcml2YSBcIm9kZWZpbmllcmFkZVwiIG5hbW4gKHN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUzOQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW4gdGhlIGlucHV0IChpbnRlcm5hbCB1c2UpIgorbXNnc3RyICJhdnJlZmVyZXJhIHRhZ2dhciBpIGluZGF0YSAoYW52w6RuZHMgaW50ZXJudCkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIFtsaXN0IFs8b2JqZWt0Pl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjkKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiAiCisifCAoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPG1lZGQ+IHwgLUYgIgorIjxmaWw+IHwgKC1jIHwgLUMpIDxvYmpla3Q+XSBbPG9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzAKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPGFudGVja25pbmdzcmVmPl0gY29weSBbLWZdIDxmcsOlbi1vYmpla3Q+IDx0aWxsLW9iamVrdD4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICIKKyIoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtZWRkPiB8IC1GICIKKyI8ZmlsPiB8ICgtYyB8IC1DKSA8b2JqZWt0Pl0gWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8YW50ZWNrbmluZ3NyZWY+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzMKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPGFudGVja25pbmdzcmVmPl0gc2hvdyBbPG9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPGFudGVja25pbmdzcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ2k+XSAiCisiPGFudGVja25pbmdzcmVmPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNworbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHJlbW92ZSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIHJlbW92ZSBbPG9iamVrdD4uLi5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW5dIFstdl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPGFudGVja25pbmdzcmVmPl0gcHJ1bmUgWy1uXSBbLXZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzkKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NAorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZWt0Pl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6NDkKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhZGQgWzxmbGFnZ29yPl0gWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgWzxmbGFnZ29yPl0gPGZyw6VuLW9iamVrdD4gPHRpbGwtb2JqZWt0PiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxmcsOlbi1vYmpla3Q+IDx0aWxsLW9iamVrdD5dLi4uIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAKK21zZ2lkICJnaXQgbm90ZXMgYXBwZW5kIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhcHBlbmQgWzxmbGFnZ29yPl0gWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY1Cittc2dpZCAiZ2l0IG5vdGVzIGVkaXQgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGVkaXQgWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwCittc2dpZCAiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHNob3cgWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgWzxmbGFnZ29yPl0gPGFudGVja25pbmdzcmVmPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPGZsYWdnb3I+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgyCittc2dpZCAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NworbXNnaWQgImdpdCBub3RlcyBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHBydW5lIFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6OTIKK21zZ2lkICJnaXQgbm90ZXMgZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NworbXNnaWQgIldyaXRlL2VkaXQgdGhlIG5vdGVzIGZvciB0aGUgZm9sbG93aW5nIG9iamVjdDoiCittc2dzdHIgIlNrcml2L3JlZGlnZXJhIGFudGVja25pbmdhciBmw7ZyIGbDtmxqYW5kZSBvYmpla3Q6IgorCisjOiBidWlsdGluL25vdGVzLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHN0YXJ0YSBcInNob3dcIiBmw7ZyIG9iamVrdGV0IFwiJXNcIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1NAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdzaG93JyBvdXRwdXQiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgdXRkYXRhIGZyw6VuIFwic2hvd1wiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5pc2ggJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBhdnNsdXRhIFwic2hvd1wiIGbDtnIgb2JqZWt0ZXQgXCIlc1wiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTk3Cittc2dpZCAicGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICJhbmdlIGlubmVow6VsbCBmw7ZyIGFudGVja25pbmdlbiBtZWQgYW50aW5nZW4gLW0gZWxsZXIgLUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbm90ZSBvYmplY3QiCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIGFudGVja25pbmdzb2JqZWt0IgorCisjOiBidWlsdGluL25vdGVzLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBub3RlIGNvbnRlbnRzIGhhdmUgYmVlbiBsZWZ0IGluICVzIgorbXNnc3RyICJhbnRlY2tuaW5nZW5zIGlubmVow6VsbCBoYXIgbMOkbW5hdHMga3ZhciBpICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6MjQyIGJ1aWx0aW4vdGFnLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDtnBwbmEgZWxsZXIgbMOkc2EgXCIlc1wiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYzIGJ1aWx0aW4vbm90ZXMuYzozMTMgYnVpbHRpbi9ub3Rlcy5jOjMxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjM4MyBidWlsdGluL25vdGVzLmM6NDM4IGJ1aWx0aW4vbm90ZXMuYzo1MjYKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzEgYnVpbHRpbi9ub3Rlcy5jOjYxMCBidWlsdGluL25vdGVzLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJrdW5kZSBpbnRlIHNsw6UgdXBwIFwiJXNcIiBzb20gZW4gZ2lsdGlnIHJlZmVyZW5zLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgImt1bmRlIGludGUgbMOkc2Egb2JqZWt0ZXQgXCIlc1wiLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iCittc2dzdHIgImthbiBpbnRlIGzDpHNhIGFudGVja25pbmdzZGF0YSBmcsOlbiBpY2tlLWJsb2Itb2JqZWt0ZXQgXCIlc1wiLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgImZlbGFrdGlnIGluZGF0YXJhZDogXCIlc1wiLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGtvcGllcmEgYW50ZWNrbmluZ2FyIGZyw6VuIFwiJXNcIiB0aWxsIFwiJXNcIiIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBmaXJzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgZ2l0CisjLiBub3RlcyBjb21tYW5kOiAnYWRkJywgJ21lcmdlJywgJ3JlbW92ZScsIGV0Yy4KKyMuCisjOiBidWlsdGluL25vdGVzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvICVzIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAidsOkZ3JhciB1dGbDtnJhIFwiJXNcIiBww6UgYW50ZWNrbmluZ2FyIGkgJXMgKHV0YW5mw7ZyIHJlZnMvbm90ZXMvKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3NiBidWlsdGluL25vdGVzLmM6NDMxIGJ1aWx0aW4vbm90ZXMuYzo1MDkKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MjEgYnVpbHRpbi9ub3Rlcy5jOjU5OCBidWlsdGluL25vdGVzLmM6NjY1CisjOiBidWlsdGluL25vdGVzLmM6ODE1IGJ1aWx0aW4vbm90ZXMuYzo5NjMgYnVpbHRpbi9ub3Rlcy5jOjk4NQorbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgImbDtnIgbcOlbmdhIHBhcmFtZXRyYXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODkgYnVpbHRpbi9ub3Rlcy5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICJpbmdhIGFudGVja25pbmdhciBoaXR0YWRlcyBmw7ZyIG9iamVrdGV0ICVzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMCBidWlsdGluL25vdGVzLmM6NTc2Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAiYW50ZWNrbmluZ3Npbm5laMOlbGwgc29tIHN0csOkbmciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTMgYnVpbHRpbi9ub3Rlcy5jOjU3OQorbXNnaWQgIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIgorbXNnc3RyICJhbnRlY2tuaW5nc2lubmVow6VsbCBpIGVuIGZpbCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxNiBidWlsdGluL25vdGVzLmM6NTgyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICLDpXRlcmFudsOkbmQgb2NoIHJlZGlnZXJhIGFuZ2l2ZXQgYW50ZWNrbmluZ3NvYmpla3QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTkgYnVpbHRpbi9ub3Rlcy5jOjU4NQorbXNnaWQgInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAiw6V0ZXJhbnbDpG5kIGFuZ2l2ZXQgYW50ZWNrbmluZ3NvYmpla3QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MjIgYnVpbHRpbi9ub3Rlcy5jOjU4OAorbXNnaWQgImFsbG93IHN0b3JpbmcgZW1wdHkgbm90ZSIKK21zZ3N0ciAidGlsbMOldCBsYWdyYSB0b20gYW50ZWNrbmluZyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyMyBidWlsdGluL25vdGVzLmM6NDk2Cittc2dpZCAicmVwbGFjZSBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiZXJzw6R0dCBiZWZpbnRsaWdhIGFudGVja25pbmdhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGzDpGdnYSB0aWxsIGFudGVja25pbmdhci4gSGl0dGFkZSBiZWZpbnRsaWdhIGFudGVja25pbmdhciBmw7ZyICIKKyJvYmpla3RldCAlcy4gQW52w6RuZCBcIi1mXCIgZsO2ciBhdHQgc2tyaXZhIMO2dmVyIGJlZmludGxpZ2EgYW50ZWNrbmluZ2FyIgorCisjOiBidWlsdGluL25vdGVzLmM6NDYzIGJ1aWx0aW4vbm90ZXMuYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICJTa3JpdmVyIMO2dmVyIGJlZmludGxpZ2EgYW50ZWNrbmluZ2FyIGbDtnIgb2JqZWt0ZXQgJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3NSBidWlsdGluL25vdGVzLmM6NjM3IGJ1aWx0aW4vbm90ZXMuYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIlRhciBib3J0IGFudGVja25pbmcgZsO2ciBvYmpla3RldCAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDk3Cittc2dpZCAicmVhZCBvYmplY3RzIGZyb20gc3RkaW4iCittc2dzdHIgImzDpHMgb2JqZWt0IGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL25vdGVzLmM6NDk5Cittc2dpZCAibG9hZCByZXdyaXRpbmcgY29uZmlnIGZvciA8Y29tbWFuZD4gKGltcGxpZXMgLS1zdGRpbikiCittc2dzdHIgImzDpHMgb21za3Jpdm5pbmdzaW5zdMOkbGxuaW5nIGbDtnIgPGtvbW1hbmRvPiAoaW1wbGljZXJhciAtLXN0ZGluKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxNworbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAiZsO2ciBmw6UgcGFyYW1ldHJhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyJLYW4gaW50ZSBrb3BpZXJhIGFudGVja25pbmdhci4gSGl0dGFkZSBiZWZpbnRsaWdhIGFudGVja25pbmdhciBmw7ZyIG9iamVrdGV0ICIKKyIlcy4gQW52w6RuZCBcIi1mXCIgZsO2ciBhdHQgc2tyaXZhIMO2dmVyIGJlZmludGxpZ2EgYW50ZWNrbmluZ2FyIgorCisjOiBidWlsdGluL25vdGVzLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICJhbnRlY2tuaW5nYXIgcMOlIGvDpGxsb2JqZWt0ZXQgJXMgc2FrbmFzLiBLYW4gaW50ZSBrb3BpZXJhLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKyJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIgorbXNnc3RyICIiCisiRmxhZ2dvcm5hIC1tLy1GLy1jLy1DIHJla29tbWVuZGVyYXMgaW50ZSBmw7ZyIHVuZGVya29tbWFuZG90IFwiZWRpdFwiLlxuIgorIkFudsOkbmQgXCJnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DXCIgaXN0w6RsbGV0LlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6Njk4Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRhIGJvcnQgcmVmZXJlbnNlbiBOT1RFU19NRVJHRV9QQVJUSUFMIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAwCittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgYm9ydCByZWZlcmVuc2VuIE5PVEVTX01FUkdFX1JFRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwMgorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJ2dpdCBub3RlcyBtZXJnZScgd29ya3RyZWUiCittc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBib3J0IGFyYmV0c2thdGFsb2dlbiBmw7ZyIFwiZ2l0IG5vdGVzIG1lcmdlXCIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjIKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGzDpHNhIHJlZmVyZW5jZXMgTk9URVNfTUVSR0VfUEFSVElBTCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyNAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICJrdW5kZSBpbnRlIGhpdHRhIGluY2hlY2tuaW5nIGZyw6VuIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGluY2hlY2tuaW5nIGZyw6VuIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzM5Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICJtaXNzbHlja2FkZXMgYmVzdMOkbW1hIE5PVEVTX01FUkdFX1JFRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc0MgorbXNnaWQgImZhaWxlZCB0byBmaW5hbGl6ZSBub3RlcyBtZXJnZSIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGbDpHJkaWdzdMOkbGxhIHNhbW1hbnNsYWduaW5nIGF2IGFudGVja25pbmdhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vdGVzIG1lcmdlIHN0cmF0ZWd5ICVzIgorbXNnc3RyICJva8OkbmQgc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2kgZsO2ciBhbnRlY2tuaW5nYXI6ICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg0Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJBbGxtw6RubmEgZmxhZ2dvciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NgorbXNnaWQgIk1lcmdlIG9wdGlvbnMiCittc2dzdHIgIkZsYWdnb3IgZsO2ciBzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4OAorbXNnaWQgIiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCittc2dzdHIgIiIKKyJsw6RzIGtvbmZsaWt0ZXIgaSBhbnRlY2tuaW5nYXIgbWVkIGFuZ2l2ZW4gc3RyYXRlZ2kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTAKK21zZ2lkICJDb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICJDaGVja2FyIGluIGVqIHNhbW1hbnNsYWduYSBhbnRlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTIKK21zZ2lkICJmaW5hbGl6ZSBub3RlcyBtZXJnZSBieSBjb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICIiCisiZsOkcmRpZ3N0w6RsbCBzYW1tYW5zbGFnbmluZyBhdiBhbnRlY2tuaW5nYXIgZ2Vub20gYXR0IGNoZWNrYSBpbiBlaiAiCisic2FtbWFuc2xhZ25hIGFudGVja25pbmdhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NAorbXNnaWQgIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIkF2YnJ5dCBsw7ZzbmluZyBhdiBzYW1tYW5zbGFnbmluZyBhdiBhbnRlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTYKK21zZ2lkICJhYm9ydCBub3RlcyBtZXJnZSIKK21zZ3N0ciAiYXZicnl0IHNhbW1hbnNsYWduaW5nIGF2IGFudGVja25pbmdhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgwNworbXNnaWQgImNhbm5vdCBtaXggLS1jb21taXQsIC0tYWJvcnQgb3IgLXMvLS1zdHJhdGVneSIKK21zZ3N0ciAia2FuIGludGUgYmxhbmRhIC0tY29tbWl0LCAtLWFib3J0IGVsbGVyIC1zLy0tc3RyYXRlZ3kiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTIKK21zZ2lkICJtdXN0IHNwZWNpZnkgYSBub3RlcyByZWYgdG8gbWVyZ2UiCittc2dzdHIgIm3DpXN0ZSBhbmdlIGVuIGFudGVja25pbmdzLXJlZmVyZW5zIGF0dCBzbMOlIGlob3AiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAtcy8tLXN0cmF0ZWd5OiAlcyIKK21zZ3N0ciAib2vDpG5kIC1zLy0tc3RyYXRlZ3k6ICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgImEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICJzYW1tYW5zbGFnbmluZyBhdiBhbnRlY2tuaW5nYXIgdGlsbCAlcyDDpHIgcmVkYW4gaWfDpW5nc2F0dCBww6UgJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0b3JlIGxpbmsgdG8gY3VycmVudCBub3RlcyByZWYgKCVzKSIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGxhZ3JhIGzDpG5rIHRpbGwgYWt0dWVsbCBhbnRlY2tuaW5nc3JlZmVyZW5zICglcykiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF1dG9tYXRpYyBub3RlcyBtZXJnZSBmYWlsZWQuIEZpeCBjb25mbGljdHMgaW4gJXMgYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggIgorIidnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvciBhYm9ydCB0aGUgbWVyZ2Ugd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tIgorImFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIkF1dG9tYXRpc2sgc2FtbWFuc2xhZ25pbmcgYXYgYW50ZWNrbmluZ2FyIG1pc3NseWNrYWRlcy4gUsOkdHRhIGtvbmZsaWt0ZXIgaSAiCisiJXMgb2NoIGNoZWNrYSBpbiByZXN1bHRhdGV0IG1lZCBcImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdFwiLCBlbGxlciBhdmJyeXQgIgorInNhbW1hbnNsYWduaW5nZW4gbWVkIFwiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnRcIi5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5NyBidWlsdGluL3RhZy5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzbMOlIHVwcCBcIiVzXCIgc29tIGVuIGdpbHRpZyByZWZlcmVucy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgIk9iamVrdGV0ICVzIGhhciBpbmdlbiBhbnRlY2tuaW5nXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MTIKK21zZ2lkICJhdHRlbXB0IHRvIHJlbW92ZSBub24tZXhpc3RlbnQgbm90ZSBpcyBub3QgYW4gZXJyb3IiCittc2dzdHIgImbDtnJzw7ZrIGF0dCB0YSBib3J0IGlja2UtZXhpc3RlcmFuZGUgYW50ZWNrbmluZ2FyIMOkciBpbnRlIGV0dCBmZWwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MTUKK21zZ2lkICJyZWFkIG9iamVjdCBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibMOkcyBvYmpla3RuYW1uIGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL25vdGVzLmM6OTU0IGJ1aWx0aW4vcHJ1bmUuYzoxMzAgYnVpbHRpbi93b3JrdHJlZS5jOjE2NAorbXNnaWQgImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIKK21zZ3N0ciAidGEgaW50ZSBib3J0LCBiYXJhIHZpc2EiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTUKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG5vdGVzIgorbXNnc3RyICJyYXBwb3J0ZXJhIGJvcnR0YWduYSBhbnRlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTgKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgImFudGVja25pbmdhci1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTkKK21zZ2lkICJ1c2Ugbm90ZXMgZnJvbSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiYW52w6RuZCBhbnRlY2tuaW5nYXIgZnLDpW4gPGFudGVja25pbmdzcmVmPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEwMzQgYnVpbHRpbi9zdGFzaC5jOjE2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAib2vDpG50IHVuZGVya29tbWFuZG86ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUyCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8ZmxhZ2dvcj4uLi5dIFs8IDxyZWZsaXN0YT4gfCA8IDxvYmpla3RsaXN0YT5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUzCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs8ZmxhZ2dvcj4uLi5dIDxiYXNuYW1uPiBbPCA8cmVmbGlzdGE+IHwgPCA8b2JqZWt0bGlzdGE+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2tlZCBvYmplY3QgQ1JDIGZvciAlcyIKK21zZ3N0ciAiZmVsYWt0aWcgQ1JDIGbDtnIgcGFja2F0IG9iamVrdCAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYWNrZWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAidHJhc2lndCBwYWNrYXQgb2JqZWt0IGbDtnIgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBkZWx0YSBkZXRlY3RlZCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICJyZWt1cnNpdnQgZGVsdGEgdXBwdMOkY2t0ZXMgZsO2ciBvYmpla3RldCAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAib3JkZXJlZCAldSBvYmplY3RzLCBleHBlY3RlZCAlPFBSSXUzMj4iCittc2dzdHIgIm9yZG5hZGUgJXUgb2JqZWt0LCBmw7ZydsOkbnRhZGUgJTxQUkl1MzI+IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk3MgorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgcGFja3MgYXJlIHNwbGl0IGR1ZSB0byBwYWNrLnBhY2tTaXplTGltaXQiCittc2dzdHIgIiIKKyJpbmFrdGl2ZXJhciBza3Jpdm5pbmcgYXYgYml0a2FydGEsIHBha2V0IGRlbGFzIHDDpSBncnVuZCBhdiBwYWNrLnBhY2tTaXplTGltaXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTg1Cittc2dpZCAiV3JpdGluZyBvYmplY3RzIgorbXNnc3RyICJTa3JpdmVyIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDQ2IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBzdGF0dXMgcMOlICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvdGUgJTxQUkl1MzI+IG9iamVjdHMgd2hpbGUgZXhwZWN0aW5nICU8UFJJdTMyPiIKK21zZ3N0ciAic2tyZXYgJTxQUkl1MzI+IG9iamVrdCBtZWRhbiAlPFBSSXUzMj4gZsO2cnbDpG50YWRlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMjk3Cittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgImluYWt0aXZlcmFyIHNrcml2bmluZyBhdiBiaXRrYXJ0YSBkw6UgbsOlZ3JhIG9iamVrdCBpbnRlIHBhY2thcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG92ZXJmbG93IGluIHBhY2sgZm9yICVzIgorbXNnc3RyICJkZWx0YWJhc29mZnNldCB1dGFuZsO2ciBncsOkbnNlbiBpIHBhY2sgZsO2ciAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG91dCBvZiBib3VuZCBmb3IgJXMiCittc2dzdHIgImRlbHRhYmFzb2Zmc2V0IHV0YW5mw7ZyIGdyw6Ruc3bDpHJkZW4gZsO2ciAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDA0Cittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUsOka25hciBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0IGhlYWRlciBvZiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBvYmpla3RodXZ1ZCBmw7ZyICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyMTkgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjM1CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICJvYmpla3RldCAlcyBrdW5kZSBpbnRlIGzDpHNhcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjIyIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGggKCU8UFJJdU1BWD4gdnMgJTxQUkl1TUFYPikiCittc2dzdHIgIm9iamVrdGV0ICVzIGhhciBpbmtvbnNpc3RlbnQgb2JqZWt0bMOkbmdkICglPFBSSXVNQVg+IG1vdCAlPFBSSXVNQVg+KSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjU5Cittc2dpZCAic3Vib3B0aW1hbCBwYWNrIC0gb3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiaWNrZS1vcHRpbWFsdCBwYWNrIC0gbWlubmV0IHNsdXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU3NAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWx0YSBjb21wcmVzc2lvbiB1c2luZyB1cCB0byAlZCB0aHJlYWRzIgorbXNnc3RyICJEZWx0YWtvbXByaW1lcmluZyBhbnbDpG5kZXIgdXBwIHRpbGwgJWQgdHLDpWRhciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYWNrIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGFnICVzIgorbXNnc3RyICJrYW4gaW50ZSBwYWNrYSBvYmpla3QgbsOlYmFyYSBmcsOlbiB0YWdnZW4gJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjgwMQorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIktvbXByaW1lcmFyIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODA3Cittc2dpZCAiaW5jb25zaXN0ZW5jeSB3aXRoIGRlbHRhIGNvdW50IgorbXNnc3RyICJkZWx0YXLDpGtuYXJlbiDDpHIgaW5rb25zZWt2ZW50IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIGVkZ2Ugb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCittc2dzdHIgIiIKKyJmw7ZydsOkbnRhZGUga2FudC1vYmpla3QtaWQsIGZpY2sgc2tyw6RwOlxuIgorIiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorImbDtnJ2w6RudGFkZSBvYmpla3QtaWQsIGZpY2sgc2tyw6RwOlxuIgorIiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTkyCittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICJvZ2lsdGlndCB2w6RyZGUgZsO2ciAtLW1pc3NpbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA1MSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTkKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4IgorbXNnc3RyICJrYW4gaW50ZSDDtnBwbmEgcGFrZXRmaWxlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMDgyCisjLCBjLWZvcm1hdAorbXNnaWQgImxvb3NlIG9iamVjdCBhdCAlcyBjb3VsZCBub3QgYmUgZXhhbWluZWQiCittc2dzdHIgImzDtnNhIG9iamVrdCBww6UgJXMga3VuZGUgaW50ZSB1bmRlcsO2a2FzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNjcKK21zZ2lkICJ1bmFibGUgdG8gZm9yY2UgbG9vc2Ugb2JqZWN0IgorbXNnc3RyICJrYW4gaW50ZSB0dmluZ2EgbMO2c2Egb2JqZWt0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmV2ICclcyciCittc2dzdHIgImludGUgZW4gcmVmZXJlbnMgXCIlc1wiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uICclcyciCittc2dzdHIgImZlbGFrdGlnIHJldmlzaW9uIFwiJXNcIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg4Cittc2dpZCAidW5hYmxlIHRvIGFkZCByZWNlbnQgb2JqZWN0cyIKK21zZ3N0ciAia2FuIGludGUgbMOkZ2dhIHRpbGwgbnlhIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgImluZGV4dmVyc2lvbmVuICVzIHN0w7ZkcyBlaiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgImZlbGFrdGlnIGluZGV4dmVyc2lvbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4MworbXNnaWQgIjx2ZXJzaW9uPlssPG9mZnNldD5dIgorbXNnc3RyICI8dmVyc2lvbj5bLDxvZmZzZXQ+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg0Cittc2dpZCAid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIKK21zZ3N0ciAic2tyaXYgcGFrZXRpbmRleGZpbGVuIGkgYW5naXZlbiBpbmRleGZvcm1hdHZlcnNpb24iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4NworbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgIm1heGltYWwgc3RvcmxlayBww6UgdmFyamUgdXRkYXRhcGFrZXRmaWwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4OQorbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAiaWdub3JlcmEgbMOlbmFkZSBvYmpla3QgZnLDpW4gc3VwcGxlcmFuZGUgb2JqZWt0bGFnZXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5MQorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiaWdub3JlcmEgcGFja2FkZSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5MworbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgImJlZ3LDpG5zYSBwYWtldGbDtm5zdGVyIGVmdGVyIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk1Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAiYmVncsOkbnNhIHBha2V0ZsO2bnN0ZXIgZWZ0ZXIgbWlubmUgZsO2cnV0b20gb2JqZWt0Z3LDpG5zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTcKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAibWF4aW1hbCBsw6RuZ2QgcMOlIGRlbHRha2VkamEgdGlsbMOldGVuIGkgc2x1dGxpZ3QgcGFrZXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5OQorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAiw6V0ZXJhbnbDpG5kIGJlZmludGxpZ2EgZGVsdGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwMQorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgIsOldGVyYW52w6RuZCBiZWZpbnRsaWdhIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDAzCittc2dpZCAidXNlIE9GU19ERUxUQSBvYmplY3RzIgorbXNnc3RyICJhbnbDpG5kIE9GU19ERUxUQS1vYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNQorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgImFudsOkbmQgdHLDpWRhciB2aWQgc8O2a25pbmcgZWZ0ZXIgYsOkc3RhIGRlbHRhdHLDpGZmYXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNworbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgImbDtnJzw7ZrIGludGUgc2thcGEgdG9tIHBha2V0dXRkYXRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDkKK21zZ2lkICJyZWFkIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsw6RzIHJldmlzaW9uc2FyZ3VtZW50IGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTEKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAiYmVncsOkbnNhIG9iamVrdCB0aWxsIGRlbSBzb20gw6RubnUgaW50ZSBwYWNrYXRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTQKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAiaW5rbHVkZXJhIG9iamVrdCBzb20ga2FuIG7DpXMgZnLDpW4gbsOlZ29uIHJlZmVyZW5zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiCittc2dzdHIgImlua2x1ZGVyYSBvYmpla3Qgc29tIHJlZmVyZXJhcyBmcsOlbiByZWZlcmVuc2xvZ2dwb3N0ZXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgImlua2x1ZGVyYSBvYmpla3Qgc29tIHJlZmVyZXJhcyBmcsOlbiBpbmRleGV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjMKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgInNrcml2IHBha2V0IHDDpSBzdGFuZGFyZCB1dCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI1Cittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICJpbmtsdWRlcmEgdGFnZ29iamVrdCBzb20gcmVmZXJlcmFyIG9iamVrdCBzb20gc2thIHBhY2thcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI3Cittc2dpZCAia2VlcCB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJiZWjDpWxsIG9uw6ViYXJhIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI5Cittc2dpZCAicGFjayBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJwYWNrYSBsw7ZzYSBvbsOlYmFyYSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzMQorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICJwYWNrYSB1cHAgb27DpWJhcmEgb2JqZWt0IG55YXJlIMOkbiA8dGlkPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDM0Cittc2dpZCAidXNlIHRoZSBzcGFyc2UgcmVhY2hhYmlsaXR5IGFsZ29yaXRobSIKK21zZ3N0ciAiYW52w6RuZCBnbGVzLW7DpWJhcmhldHNhbGdvcml0bWVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzYKK21zZ2lkICJjcmVhdGUgdGhpbiBwYWNrcyIKK21zZ3N0ciAic2thcGEgdHVubmEgcGFrZXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzOAorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICJza2FwYSBwYWNrZmlsZXIgbMOkbXBhZGUgZsO2ciBncnVuZGEgaMOkbXRuaW5nYXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0MAorbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgImlnbm9yZXJhIHBha2V0IHNvbSBoYXIgdGlsbGjDtnJhbmRlIC5rZWVwLWZpbCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQyCittc2dpZCAiaWdub3JlIHRoaXMgcGFjayIKK21zZ3N0ciAiaWdub3JlcmEgZGV0dGEgcGFrZXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0NAorbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgImtvbXByaW1lcmluZ3NncmFkIGbDtnIgcGFrZXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0NgorbXNnaWQgImRvIG5vdCBoaWRlIGNvbW1pdHMgYnkgZ3JhZnRzIgorbXNnc3RyICJnw7ZtIGludGUgaW5jaGVja25pbmdhciBtZWQgeW1wbmluZ2FyIChcImdyYWZ0c1wiKSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQ4Cittc2dpZCAidXNlIGEgYml0bWFwIGluZGV4IGlmIGF2YWlsYWJsZSB0byBzcGVlZCB1cCBjb3VudGluZyBvYmplY3RzIgorbXNnc3RyICJhbnbDpG5kIGJpdGthcnRpbmRleCBvbSB0aWxsZ8OkbmdsaWd0IGbDtnIgYXR0IHLDpGtuYSBvYmpla3Qgc25hYmJhcmUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1MAorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgImFudsOkbmQgYml0a2FydGluZGV4IHRpbGxzYW1tYW5zIG1lZCBwYWNraW5kZXhldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDU0Cittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggaWYgcG9zc2libGUiCittc2dzdHIgInNrcml2IGJpdGthcnRpbmRleCBvbSBtw7ZqbGlndCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDU4Cittc2dpZCAiaGFuZGxpbmcgZm9yIG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiaGFudGVyaW5nIGF2IHNha25hZGUgb2JqZWt0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NjEKK21zZ2lkICJkbyBub3QgcGFjayBvYmplY3RzIGluIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAicGFja2EgaW50ZSBvYmpla3QgaSBrb250cmFrdHNwYWNrZmlsZXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ2MworbXNnaWQgInJlc3BlY3QgaXNsYW5kcyBkdXJpbmcgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgInJlc3Bla3RlcmEgw7ZhciB1bmRlciBkZWx0YWtvbXByaW1lcmluZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGNoYWluIGRlcHRoICVkIGlzIHRvbyBkZWVwLCBmb3JjaW5nICVkIgorbXNnc3RyICJkZWx0YWtlZGplZGp1cGV0ICVkIMOkciBmw7ZyIGRqdXB0LCBww6V0dmluZ2FyICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjay5kZWx0YUNhY2hlTGltaXQgaXMgdG9vIGhpZ2gsIGZvcmNpbmcgJWQiCittc2dzdHIgInBhY2suZGVsdGFDYWNoZUxpbWl0IMOkciBmw7ZyIGjDtmd0LCBww6V0dmluZ2FyICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NTEKK21zZ2lkICItLW1heC1wYWNrLXNpemUgY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYSBwYWNrIGZvciB0cmFuc2ZlciIKK21zZ3N0ciAiIgorIi0tbWF4LXBhY2stc2l6ZSBrYW4gaW50ZSBhbnbDpG5kYXMgZsO2ciBhdHQgYnlnZ2EgZXR0IHBha2V0IHNvbSBza2Egw7Z2ZXJmw7ZyYXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU1MworbXNnaWQgIm1pbmltdW0gcGFjayBzaXplIGxpbWl0IGlzIDEgTWlCIgorbXNnc3RyICJtaW5zdGEgcGFja3N0b3JsZWsgw6RyIDEgTWlCIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NTgKK21zZ2lkICItLXRoaW4gY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYW4gaW5kZXhhYmxlIHBhY2siCittc2dzdHIgIi0tdGhpbiBrYW4gaW50ZSBhbnbDpG5kYXMgZsO2ciBhdHQgYnlnZ2EgZXR0IGluZGV4ZXJiYXJ0IHBha2V0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NjEKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC0tdW5wYWNrLXVucmVhY2hhYmxlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSBvY2ggLXVucGFjay11bnJlYWNoYWJsZSBrYW4gaW50ZSBhbnbDpG5kYXMgc2FtdGlkaWd0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NjcKK21zZ2lkICJjYW5ub3QgdXNlIC0tZmlsdGVyIHdpdGhvdXQgLS1zdGRvdXQiCittc2dzdHIgImthbiBpbnRlIGFudsOkbmRhIC0tZmlsdGVyIHV0YW4gLS1zdGRvdXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzYyNworbXNnaWQgIkVudW1lcmF0aW5nIG9iamVjdHMiCittc2dzdHIgIlLDpGtuYXIgdXBwIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUb3RhbCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHJldXNlZCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHBhY2stIgorInJldXNlZCAlPFBSSXUzMj4iCittc2dzdHIgIiIKKyJUb3RhbHQgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pLCDDpXRlcmFudsOkbmRlICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgIgorInBha2V0LcOldGVyYW52w6RuZGEgJTxQUkl1MzI+IgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjgKK21zZ2lkICJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcGFjay1yZWZzIFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE2Cittc2dpZCAicGFjayBldmVyeXRoaW5nIgorbXNnc3RyICJwYWNrYSBhbGx0IgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE3Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgInRhIGJvcnQgbMO2c2EgcmVmZXJlbnNlciAoc3RhbmRhcmQpIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjkKK21zZ2lkICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCittc2dzdHIgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo0MgorbXNnaWQgIlJlbW92aW5nIGR1cGxpY2F0ZSBvYmplY3RzIgorbXNnc3RyICJUYXIgYm9ydCBkdXBsaWNlcmFkZSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMgorbXNnaWQgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSA8dGltZT5dIFstLV0gWzxoZWFkPi4uLl0iCittc2dzdHIgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSA8dGlkPl0gWy0tXSBbPGh1dnVkPi4uLl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzEKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgInJhcHBvcnRlcmEgYm9ydHRhZ25hIG9iamVrdCIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNAorbXNnaWQgImV4cGlyZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICJsw6V0IHRpZCBnw6UgdXQgZsO2ciBvYmpla3Qgw6RsZHJlIMOkbiA8dGlkPiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNgorbXNnaWQgImxpbWl0IHRyYXZlcnNhbCB0byBvYmplY3RzIG91dHNpZGUgcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICJiZWdyw6Ruc2EgdmFuZHJpbmcgYXYgb2JqZWt0IHV0YW5mw7ZyIGtvbnRyYWt0c3BhY2tmaWxlci4iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxNTAKK21zZ2lkICJjYW5ub3QgcHJ1bmUgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgImthbiBpbnRlIHJlbnNhIGkgZXR0IFwicHJlY2lvdXMtb2JqZWt0XCItYXJraXYiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1IGJ1aWx0aW4vcHVsbC5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiRmVsYWt0aWd0IHbDpHJkZSBmw7ZyICVzOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NjcKK21zZ2lkICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1bGwgWzxmbGFnZ29yPl0gWzxhcmtpdj4gWzxyZWZzcGVjPi4uLl1dIgorCisjOiBidWlsdGluL3B1bGwuYzoxMjIKK21zZ2lkICJjb250cm9sIGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAic3R5cm5pbmcgZsO2ciByZWt1cnNpdiBow6RtdG5pbmcgYXYgdW5kZXJtb2R1bGVyIgorCisjOiBidWlsdGluL3B1bGwuYzoxMjYKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gbWVyZ2luZyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiBnw6RsbGFuZGUgc2FtbWFuc2xhZ25pbmciCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjEyOQorbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAiaW5sZW1tYSDDpG5kcmluZ2FyIGdlbm9tIG9tYmFzZXJpbmcgaSBzdMOkbGxldCBmw7ZyIHNhbW1hbnNsYWduaW5nIgorCisjOiBidWlsdGluL3B1bGwuYzoxNTcgYnVpbHRpbi9yZWJhc2UuYzo0NzEgYnVpbHRpbi9yZXZlcnQuYzoxMjYKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgInRpbGzDpXQgc25hYmJzcG9sbmluZyIKKworIzogYnVpbHRpbi9wdWxsLmM6MTY2Cittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciByZWJhc2UiCittc2dzdHIgInV0ZsO2ciBhdXRvbWF0aXNrdCBzdGFzaC9zdGFzaCBwb3AgZsO2cmUgb2NoIGVmdGVyIG9tYmFzZXJpbmciCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE4MgorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiBnw6RsbGFuZGUgaMOkbXRuaW5nYXIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE5MgorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giCittc2dzdHIgInR2aW5nYSDDtnZlcnNrcml2bmluZyBhdiBsb2thbCBncmVuIgorCisjOiBidWlsdGluL3B1bGwuYzoyMDAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBwdWxsZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgImFudGFsIHVuZGVybW9kdWxlciBzb20gaMOkbXRhcyBwYXJhbGxlbGx0IgorCisjOiBidWlsdGluL3B1bGwuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgcHVsbC5mZjogJXMiCittc2dzdHIgIkZlbGFrdGlndCB2w6RyZGUgZsO2ciBwdWxsLmZmOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI2Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0ICIKKyJmZXRjaGVkLiIKK21zZ3N0ciAiIgorIkRldCBmaW5ucyBpbmdlbiBrYW5kaWRhdCBmw7ZyIG9tYmFzZXJpbmcgYmxhbmQgcmVmZXJlbnNlcm5hIGR1IHByZWNpcyBoYXIgIgorImjDpG10YXQuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MjgKK21zZ2lkICIiCisiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIkRldCBmaW5ucyBpbmdlbiBrYW5kaWRhdCBmw7ZyIHNhbW1hbnNsYWduaW5nIGJsYW5kIHJlZmVyZW5zZXJuYSBkdSBwcmVjaXMgaGFyICIKKyJow6RtdGF0LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI5Cittc2dpZCAiIgorIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKyJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKK21zZ3N0ciAiIgorIkRldCBiZXR5ZGVyIHZhbmxpZ3R2aXMgYXR0IGR1IGFudsOkbnQgZW4gam9rZXJ0ZWNrZW4tcmVmc3BlYyBzb20gaW50ZVxuIgorIm1vdHN2YXJhZGUgbsOlZ290IGkgZmrDpHJyw6RuZGVuLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIiIKKyJEdSBiYWQgb20gYXR0IGjDpG10YSBmcsOlbiBmasOkcnJlbiBcIiVzXCIsIG1lbiBhbmdhdiBpbnRlIG7DpWdvblxuIgorImdyZW4uIEVmdGVyc29tIGRldCBpbnRlIMOkciBkZW4gZmrDpHJyIHNvbSDDpHIga29uZmlndXJlcmFkIHNvbVxuIgorInN0YW5kYXJkIGbDtnIgYWt0dWVsbCBncmVuIG3DpXN0ZSBkdSBhbmdlIGVuIGdyZW4gcMOlIGtvbW1hbmRvcmFkZW4uIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzcgYnVpbHRpbi9yZWJhc2UuYzoxNDA5IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzMKK21zZ2lkICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIgorbXNnc3RyICJEdSDDpHIgaW50ZSBww6UgbsOlZ29uIGdyZW4gZsO2ciBuw6RydmFyYW5kZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOSBidWlsdGluL3B1bGwuYzo0NTQgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIkFuZ2Ugdmlsa2VuIGdyZW4gZHUgdmlsbCBvbWJhc2VyYSBtb3QuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDEgYnVpbHRpbi9wdWxsLmM6NDU2IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODIKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iCittc2dzdHIgIkFuZ2Ugdmlsa2VuIGdyZW4gZHUgdmlsbCBzbMOlIHNhbW1hbiBtZWQuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDIgYnVpbHRpbi9wdWxsLmM6NDU3Cittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiU2UgZ2l0LXB1bGwoMSkgZsO2ciBkZXRhbGplci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NCBidWlsdGluL3B1bGwuYzo0NTAgYnVpbHRpbi9wdWxsLmM6NDU5CisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NAorbXNnaWQgIjxyZW1vdGU+IgorbXNnc3RyICI8ZmrDpHJyPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ0IGJ1aWx0aW4vcHVsbC5jOjQ1OSBidWlsdGluL3B1bGwuYzo0NjQKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6NjUKK21zZ2lkICI8YnJhbmNoPiIKK21zZ3N0ciAiPGdyZW4+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NTIgYnVpbHRpbi9yZWJhc2UuYzoxNDA3IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzUKK21zZ2lkICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiRGV0IGZpbm5zIGluZ2VuIHNww6VybmluZ3NpbmZvcm1hdGlvbiBmw7ZyIGFrdHVlbGwgZ3Jlbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2MSBnaXQtcGFyc2UtcmVtb3RlLnNoOjk1Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOiIKK21zZ3N0ciAiT20gZHUgdmlsbCBhbmdlIHNww6VybmluZ3NpbmZvcm1hdGlvbiBmw7ZyIGdyZW5lbiBrYW4gZHUgZ8O2cmEgZGV0IG1lZDoiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIkRpbmEgaW5zdMOkbGxuaW5nYXIgYW5nZXIgc2FtbWFuc2xhZ25pbmcgbWVkIHJlZmVyZW5zZW4gXCIlc1wiXG4iCisiZnLDpW4gZmrDpHJyZW4sIG1lbiBuw6Vnb24gc8OlZGFuIHJlZmVyZW5zIHRvZ3MgaW50ZSBlbW90LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgY29tbWl0ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIGtvbW1hIMOldCBpbmNoZWNrbmluZ2VuICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo4NTcKK21zZ2lkICJpZ25vcmluZyAtLXZlcmlmeS1zaWduYXR1cmVzIGZvciByZWJhc2UiCittc2dzdHIgImlnbm9yZXJhIC0tdmVyaWZ5LXNpZ25hdHVyZXMgZsO2ciBvbWJhc2VyaW5nIgorCisjOiBidWlsdGluL3B1bGwuYzo5MTIKK21zZ2lkICItLVtuby1dYXV0b3N0YXNoIG9wdGlvbiBpcyBvbmx5IHZhbGlkIHdpdGggLS1yZWJhc2UuIgorbXNnc3RyICItLVtuby1dYXV0b3N0YXNoIMOkciBlbmRhc3QgZ2lsdGlnIG1lZCAtLXJlYmFzZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyMAorbXNnaWQgIlVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleC4iCittc2dzdHIgIlVwcGRhdGVyYXIgZW4gb2bDtmRkIGdyZW4gbWVkIMOkbmRyaW5nYXIgc29tIGxhZ3RzIHRpbGwgaSBpbmRleGV0LiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTI0Cittc2dpZCAicHVsbCB3aXRoIHJlYmFzZSIKK21zZ3N0ciAicHVsbCBtZWQgb21iYXNlcmluZyIKKworIzogYnVpbHRpbi9wdWxsLmM6OTI1Cittc2dpZCAicGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAiY2hlY2thIGluIGVsbGVyIGFudsOkbmQgXCJzdGFzaFwiIHDDpSBkZW0uIgorCisjOiBidWlsdGluL3B1bGwuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuXG4iCisiZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb21cbiIKKyJjb21taXQgJXMuIgorbXNnc3RyICIiCisiZmV0Y2ggdXBwZGF0ZXJhZGUgaHV2dWRldCBmw7ZyIGFrdHVlbGwgZ3Jlbi5cbiIKKyJzbmFiYnNwb2xhciBkaW4gYXJiZXRza2F0YWxvZyBmcsOlblxuIgorImluY2hlY2tuaW5nZW4gJXMuIgorCisjOiBidWlsdGluL3B1bGwuYzo5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICIiCisiS2FuIGludGUgc25hYmJzcG9sYSBkaW4gYXJiZXRza2F0YWxvZy5cbiIKKyJOw6RyIGR1IMOkciBzw6RrZXIgcMOlIGF0dCBkdSBoYXIgc3BhcmF0IGFsbHQgdsOkcmRlZnVsbHQgaSB1dGRhdGEgZnLDpW5cbiIKKyIkIGdpdCBkaWZmICVzXG4iCisia8O2ciBkdVxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorImbDtnIgYXR0IMOldGVyZ8OlLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTcxCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIkthbiBpbnRlIHNsw6UgaWhvcCBmbGVyYSBncmVuYXIgaSBldHQgdG9tdCBodXZ1ZC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk3NQorbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcy4iCittc2dzdHIgIkthbiBpbnRlIG9tYmFzZXJhIG92YW5ww6UgZmxlcmEgZ3JlbmFyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTgyCittc2dpZCAiY2Fubm90IHJlYmFzZSB3aXRoIGxvY2FsbHkgcmVjb3JkZWQgc3VibW9kdWxlIG1vZGlmaWNhdGlvbnMiCittc2dzdHIgImthbiBpbnRlIG9tYmFzZXJhIG1lZCBsb2thbHQgbGFncmFkZSDDpG5kcmluZ2FyIGkgdW5kZXJtb2Z1bCIKKworIzogYnVpbHRpbi9wdXNoLmM6MTkKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1c2ggWzxmbGFnZ29yPl0gWzxhcmtpdj4gWzxyZWZzcGVjPi4uLl1dIgorCisjOiBidWlsdGluL3B1c2guYzoxMTIKK21zZ2lkICJ0YWcgc2hvcnRoYW5kIHdpdGhvdXQgPHRhZz4iCittc2dzdHIgInRhZ2dmw7Zya29ydG5pbmcgdXRhbiA8dGFnZz4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyMgorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICItLWRlbGV0ZSBnb2R0YXIgZW5kYXN0IGVua2xhIG3DpWxyZWZlcmVuc25hbW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE2OAorbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKyJcbiIKKyJGw7ZyIGF0dCB2w6RsamEgZXR0IGF2IGFsdGVybmF0aXZlbiBwZXJtYW5lbnQsIHNlIHB1c2guZGVmYXVsdCBpIFwiZ2l0IGhlbHAgIgorImNvbmZpZ1wiLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRFxuIgorIiVzIgorbXNnc3RyICIiCisiVXBwc3Ryw7Ztc2dyZW5lbiBmw7ZyIGRpbiBudXZhcmFuZGUgZ3JlbiBzdMOkbW1lciBpbnRlIMO2dmVyZW5zXG4iCisibWVkIG5hbW5ldCBww6UgZGluIGFrdHVlbGxhIGdyZW4uIEbDtnIgYXR0IHPDpG5kYSB0aWxsIHVwcHN0csO2bXNncmVuZW5cbiIKKyJpIGZqw6RycmFya2l2ZXQgYW52w6RuZGVyIGR1XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJGw7ZyIGF0dCBzw6RuZGEgdGlsbCBncmVuZW4gbWVkIHNhbW1hIG5hbW4gaSBmasOkcnJhcmtpdmV0IGFudsOkbmRlciBkdVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCittc2dzdHIgIiIKKyJEdSDDpHIgaW50ZSBww6UgbsOlZ29uIGdyZW4gZsO2ciBuw6RydmFyYW5kZS5cbiIKKyJGw7ZyIGF0dCBzw6RuZGEgaW4gaGlzdG9yaWtlbiBzb20gbGVkZXIgdGlsbCBkZW4gYWt0dWVsbGEgKGZyw6Vua29wcGxhdFxuIgorIkhFQUQpIHNpdHVhdGlvbmVuIGFudsOkbmRlciBkdVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1uLXDDpS1masOkcnJncmVuPlxuIgorCisjOiBidWlsdGluL3B1c2guYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgIiIKKyJEZW4gYWt0dWVsbGEgZ3JlbmVuICVzIGhhciBpbmdlbiB1cHBzdHLDtm1zZ3Jlbi5cbiIKKyJGw7ZyIGF0dCBzw6RuZGEgYWt0dWVsbCBncmVuIG9jaCBhbmdlIGZqw6RycmFya2l2IHNvbSB1cHBzdHLDtm0gYW52w6RuZGVyIGR1XG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAiRGVuIGFrdHVlbGxhIGdyZW5lbiAlcyBoYXIgZmxlcmEgdXBwc3Ryw7Ztc2dyZW5hciwgdsOkZ3JhciBzw6RuZGEuIgorCisjOiBidWlsdGluL3B1c2guYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKK21zZ3N0ciAiIgorIkR1IHPDpG5kZXIgdGlsbCBmasOkcnJlbiBcIiVzXCIsIHNvbSBpbnRlIMOkciB1cHBzdHLDtm1zIGbDtnIgZGVuXG4iCisiYWt0dWVsbGEgZ3JlbmVuIFwiJXNcIiwgdXRhbiBhdHQgdGFsYSBvbSBmw7ZyIG1pZyB2YWQgc29tXG4iCisic2thIHPDpG5kYXMgZsO2ciBhdHQgdXBwZGF0ZXJhIGZqw6RycmdyZW5lbi4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3MAorbXNnaWQgIiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisiRHUgYW5nYXYgaW5nYSByZWZlcmVuc3NwZWNpZmlrYXRpb25lciBhdHQgc8OkbmRhLCBvY2ggcHVzaC5kZWZhdWx0IMOkciAiCisiXCJub3RoaW5nXCIuIgorCisjOiBidWlsdGluL3B1c2guYzoyNzcKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIEludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy5cbiIKKyInZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJVcHBkYXRlcmluZ2FyIGF2dmlzYWRlcyBkw6Ugw6RuZGVuIHDDpSBkaW4gYmVmaW50bGlnYSBncmVuIMOkciBiYWtvbVxuIgorImRlc3MgZmrDpHJybW90c3ZhcmlnaGV0LiBJbnRlZ3JlcmEgZmrDpHJyw6RuZHJpbmdhcm5hICh0LmV4XG4iCisiXCJnaXQgcHVsbCAuLi4uXCIpIGlubmFuIGR1IHPDpG5kZXIgaWdlbi5cbiIKKyJTZSBhdnNuaXR0ZXQgXCJOb3RlIGFib3V0IGZhc3QtZm9yd2FyZFwiIGkgXCJnaXQgcHVzaCAtLWhlbHBcIiBmw7ZyIGRldGFsamVyLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjgzCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiVXBwZGF0ZXJpbmdhciBhdnZpc2FkZXMgZMOlIMOkbmRlbiBww6UgZW4gZ3JlbiBzb20gc8OkbmRzIGluIMOkciBiYWtvbSBkZXNzXG4iCisiZmrDpHJybW90c3ZhcmlnaGV0LiBDaGVja2EgdXQgZ3JlbmVuIG9jaCBpbnRlZ3JlcmEgZmrDpHJyw6RuZHJpbmdhcm5hICh0LmV4LlxuIgorIlwiZ2l0IHB1bGwgLi4uXCIpIGlubmFuIGR1IHPDpG5kZXIgaWdlbi5cbiIKKyJTZSBhdnNuaXR0ZXQgXCJOb3RlIGFib3V0IGZhc3QtZm9yd2FyZFwiIGkgXCJnaXQgcHVzaCAtLWhlbHBcIiBmw7ZyIGRldGFsamVyLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg5Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIlVwcGRhdGVyaW5nYXIgYXZ2aXNhZGVzIGTDpSBmasOkcnJlbiBpbm5laMOlbGxlciDDpG5kcmluZ2FyIHNvbSBkdSBpbnRlXG4iCisiaGFyIGxva2FsdC4gRGV0IGJlcm9yIG9mdGFzdCBww6UgYXR0IGV0dCBhbm5hdCBhcmtpdiBoYXIgc8OkbnQgaW4gc2FtbWFcbiIKKyJyZWZlcmVuc2VyLiBEZXQga2FuIHZhcmEgZW4gaWTDqSBhdHQgZsO2cnN0IGludGVncmVyYSBmasOkcnLDpG5kcmluZ2FybmFcbiIKKyIodC5leC4gXCJnaXQgcHVsbCAuLi5cIikgaW5uYW4gZHUgc8OkbmRlciBpZ2VuLlxuIgorIlNlIGF2c25pdHRldCBcIk5vdGUgYWJvdXQgZmFzdC1mb3J3YXJkc1wiIGkgXCJnaXQgcHVzaCAtLWhlbHBcIiBmw7ZyIGRldGFsamVyLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk2Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAiVXBwZGF0ZXJpbmdhcm5hIGF2dmlzYWRlcyBlZnRlcnNvbSB0YWdnZW4gcmVkYW4gZmlubnMgcMOlIGZqw6RycmVuLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk5Cittc2dpZCAiIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgIiIKKyJEdSBrYW4gaW50ZSB1cHBkYXRlcmEgZW4gZmrDpHJyLXJlZmVyZW5zIHNvbSBwZWthciBww6UgZXR0IG9iamVrdCBzb21cbiIKKyJpbnRlIMOkciBlbiBpbmNoZWNrbmluZywgZWxsZXIgdXBwZGF0ZXJhIGVuIGZqw6Ryci1yZWZlcmVucyBzw6UgYXR0IGRlblxuIgorInBla2FyIHDDpSBuw6Vnb3Qgc29tIGludGUgw6RyIGVuIGluY2hlY2tuaW5nLCB1dGFuIGF0dCBhbnbDpG5kYSBmbGFnZ2FuXG4iCisiXCItLWZvcmNlXCIuXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIlPDpG5kZXIgdGlsbCAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBzw6RuZGEgdmlzc2EgcmVmZXJlbnNlciB0aWxsIFwiJXNcIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQyCittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAiYXJraXYiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MyBidWlsdGluL3NlbmQtcGFjay5jOjE2NAorbXNnaWQgInB1c2ggYWxsIHJlZnMiCittc2dzdHIgInPDpG5kIGFsbGEgcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ0IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY2Cittc2dpZCAibWlycm9yIGFsbCByZWZzIgorbXNnc3RyICJzcGVnbGEgYWxsYSByZWZlcmVuc2VyIgorCisjOiBidWlsdGluL3B1c2guYzo1NDYKK21zZ2lkICJkZWxldGUgcmVmcyIKK21zZ3N0ciAidGEgYm9ydCByZWZlcmVuc2VyIgorCisjOiBidWlsdGluL3B1c2guYzo1NDcKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgInPDpG5kIHRhZ2dhciAoa2FuIGludGUgYW52w6RuZGFzIG1lZCAtLWFsbCBlbGxlciAtLW1pcnJvcikiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MCBidWlsdGluL3NlbmQtcGFjay5jOjE2NworbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgInR2aW5nYSB1cHBkYXRlcmluZ2FyIgorCisjOiBidWlsdGluL3B1c2guYzo1NTIgYnVpbHRpbi9zZW5kLXBhY2suYzoxODEKK21zZ2lkICI8cmVmbmFtZT46PGV4cGVjdD4iCittc2dzdHIgIjxyZWZuYW1uPjo8ZsO2cnbDpG50YT4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MyBidWlsdGluL3NlbmQtcGFjay5jOjE4MgorbXNnaWQgInJlcXVpcmUgb2xkIHZhbHVlIG9mIHJlZiB0byBiZSBhdCB0aGlzIHZhbHVlIgorbXNnc3RyICJrcsOkdiBhdHQgcmVmOnMgdGlkaWdhcmUgdsOkcmRlIMOkciBkZXR0YSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU2Cittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJzdHlyIHJla3Vyc2l2IGluc8OkbmRuaW5nIGF2IHVuZGVybW9kdWxlciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU4IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAiYW52w6RuZCB0dW5uYSBwYWtldCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU5IGJ1aWx0aW4vcHVzaC5jOjU2MCBidWlsdGluL3NlbmQtcGFjay5jOjE2MQorIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjIKK21zZ2lkICJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIKK21zZ3N0ciAicHJvZ3JhbSBmw7ZyIGF0dCB0YSBlbW90IHBha2V0IgorCisjOiBidWlsdGluL3B1c2guYzo1NjEKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL3N0YXR1cyIKK21zZ3N0ciAic3TDpGxsIGluIHVwcHN0csO2bSBmw7ZyIGdpdCBwdWxsL3N0YXR1cyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY0Cittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgInRhIGJvcnQgbG9rYWx0IGJvcnR0YWduYSByZWZlcmVuc2VyIgorCisjOiBidWlsdGluL3B1c2guYzo1NjYKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAiZsO2cmJpZ8OlIHByZS1wdXNoLWtyb2siCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NworbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAic8OkbmQgaW4gc2FrbmFkZSBtZW4gcmVsZXZhbnRhIHRhZ2dhciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTcwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY5Cittc2dpZCAiR1BHIHNpZ24gdGhlIHB1c2giCittc2dzdHIgIkdQRy1zaWduZXJhIGluc8OkbmRuaW5nZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MiBidWlsdGluL3NlbmQtcGFjay5jOjE3NgorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICJiZWfDpHIgYXRvbWlza2EgdHJhbnNha3Rpb25lciBww6UgZmrDpHJyc2lkYW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU5MAorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICItLWRlbGV0ZSDDpHIgaW5rb21wYXRpYmVsIG1lZCAtLWFsbCwgLS1taXJyb3Igb2NoIC0tdGFncyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTkyCittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIi0tZGVsZXRlIGthbiBpbnRlIGFudsOkbmRhcyB1dGFuIHJlZmVyZW5zZXIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICJmZWxha3RpZ3QgYXJraXYgXCIlc1wiIgorCisjOiBidWlsdGluL3B1c2guYzo2MTMKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSAiCisicmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAiIgorIkluZ2VuIGRlc3RpbmF0aW9uIGhhciBhbmdpdml0cy5cbiIKKyJBbmdlIGFudGluZ2VuIFVSTDplbiBww6Uga29tbWFuZG9yYWRlbiBlbGxlciBzdMOkbGwgaW4gZXR0IHVwcHN0csO2bXNhcmtpdiBtZWRcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbW4+IDx1cmw+XG4iCisiXG4iCisib2NoIHPDpG5kIHNlZGFuIG1lZCBoasOkbHAgYXYgZmrDpHJybmFtbmV0XG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1uPlxuIgorCisjOiBidWlsdGluL3B1c2guYzo2MjgKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIG9jaCAtLXRhZ3Mgw6RyIGlua29tcGF0aWJsYSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjMwCittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1hbGwga2FuIGludGUga29tYmluZXJhcyBtZWQgcmVmZXJlbnNzcGVjaWZpa2F0aW9uZXIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzNAorbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1taXJyb3Igb2NoIC0tdGFncyDDpHIgaW5rb21wYXRpYmxhIgorCisjOiBidWlsdGluL3B1c2guYzo2MzYKK21zZ2lkICItLW1pcnJvciBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLW1pcnJvciBrYW4gaW50ZSBrb21iaW5lcmFzIG1lZCByZWZlcmVuc3NwZWNpZmlrYXRpb25lciIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM5Cittc2dpZCAiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIG9jaCAtLW1pcnJvciDDpHIgaW5rb21wYXRpYmxhIgorCisjOiBidWlsdGluL3B1c2guYzo2NDMKK21zZ2lkICJwdXNoIG9wdGlvbnMgbXVzdCBub3QgaGF2ZSBuZXcgbGluZSBjaGFyYWN0ZXJzIgorbXNnc3RyICJwdXNoLWZsYWdnb3Iga2FuIGludGUgaW5uZWjDpWxsYSByYWRicnl0bmluZyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtYmFzZT4uLjxvbGQtdGlwPiA8bmV3LWJhc2U+Li48bmV3LXRpcD4iCittc2dzdHIgIiIKKyJnaXQgcmFuZ2UtZGlmZiBbPGZsYWdnb3I+XSA8Z2FtbWFsLWJhcz4uLjxnYW1tYWwtw6RuZGE+IDxueS1iYXM+Li48bnktw6RuZGE+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo5Cittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPG9sZC10aXA+Li4uPG5ldy10aXA+IgorbXNnc3RyICJnaXQgcmFuZ2UtZGlmZiBbPGZsYWdnb3I+XSA8Z2FtbWFsLWJhcz4uLjxueS3DpG5kYT4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjEwCittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPGJhc2U+IDxvbGQtdGlwPiA8bmV3LXRpcD4iCittc2dzdHIgImdpdCByYW5nZS1kaWZmIFs8ZmxhZ2dvcj5dIDxiYXM+IDxnYW1tYWwtw6RuZGE+IDxueS3DpG5kYT4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjIyCittc2dpZCAiUGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAiUHJvY2VudCBzb20gc2thcGVsc2UgdsOkZ3MgbWVkIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyNAorbXNnaWQgInVzZSBzaW1wbGUgZGlmZiBjb2xvcnMiCittc2dzdHIgImFudsOkbmQgZW5rbGEgZGlmZi1mw6RyZ2VyIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyNgorbXNnaWQgIm5vdGVzIgorbXNnc3RyICJhbnRlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAicGFzc2VkIHRvICdnaXQgbG9nJyIKK21zZ3N0ciAic8OkbmRzIHRpbGwgXCJnaXQgbG9nXCIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjUwIGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIC4uIGluIHJhbmdlOiAnJXMnIgorbXNnc3RyICIuLiBzYWtuYXMgaSBpbnRlcnZhbGw6IFwiJXNcIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NjQKK21zZ2lkICJzaW5nbGUgYXJnIGZvcm1hdCBtdXN0IGJlIHN5bW1ldHJpYyByYW5nZSIKK21zZ3N0ciAiZW5zYW10IGFyZ3VtZW50IG3DpXN0ZSB2YXJhIHN5bW1ldHJpc2t0IGludGVydmFsbCIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NzkKK21zZ2lkICJuZWVkIHR3byBjb21taXQgcmFuZ2VzIgorbXNnc3RyICJiZWjDtnZlciB0dsOlIGluY2hlY2tuaW5nc2ludGVydmFsbCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzo0MQorbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsPl0gKC0tZW1wdHkgfCA8dHLDpGQtaWd0MT4gWzx0csOkZC1pZ3QyPiBbPHRyw6RkLWlndDM+XV0pIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNAorbXNnaWQgIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iCittc2dzdHIgInNrcml2IHJlc3VsdGVyYW5kZSBpbmRleCB0aWxsIDxmaWw+IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICJ0w7ZtIGJhcmEgaW5kZXhldCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjkKK21zZ2lkICJNZXJnaW5nIgorbXNnc3RyICJTYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzEKK21zZ2lkICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIgorbXNnc3RyICJ1dGbDtnIgZW4gc2FtbWFuc2xhZ25pbmcgaSB0aWxsw6RnZyB0aWxsIGVuIGzDpHNuaW5nIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMworbXNnaWQgIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIKK21zZ3N0ciAiMy12w6Rnc3NhbW1hbnNsYWduaW5nIG9tIHNhbW1hbnNsYWduaW5nIHDDpSBmaWxuaXbDpSBlaiBrcsOkdnMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM1Cittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAiMy12w6Rnc3NhbW1hbnNsYWduaW5nIG7DpHIgZGV0IGZpbm5zIHRpbGzDpGdnIG9jaCBib3J0dGFnbmluZ2FyIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgInNvbSAtbSwgbWVuIGthc3RhIGJvcnQgZWogc2FtbWFuc2xhZ25hIHBvc3RlciIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzgKK21zZ2lkICI8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIjx1bmRlcmthdGFsb2c+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzkKK21zZ2lkICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAibMOkcyBpbiB0csOkZGV0IGkgaW5kZXhldCB1bmRlciA8dW5kZXJrYXRhbG9nPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQyCittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAidXBwZGF0ZXJhIGFyYmV0c2thdGFsb2dlbiBtZWQgcmVzdWx0YXRldCBmcsOlbiBzYW1tYW5zbGFnbmluZ2VuIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiZ2l0aWdub3JlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAidGlsbMOldCBleHBsaWNpdCBpZ25vcmVyYWRlIGZpbGVyIGF0dCBza3JpdmFzIMO2dmVyIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OAorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAia29udHJvbGxlcmEgaW50ZSBhcmJldHNrYXRhbG9nZW4gZWZ0ZXIgc2FtbWFuc2xhZ25pbmciCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ5Cittc2dpZCAiZG9uJ3QgdXBkYXRlIHRoZSBpbmRleCBvciB0aGUgd29yayB0cmVlIgorbXNnc3RyICJ1cHBkYXRlcmEgaW50ZSBpbmRleGV0IGVsbGVyIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTEKK21zZ2lkICJza2lwIGFwcGx5aW5nIHNwYXJzZSBjaGVja291dCBmaWx0ZXIiCittc2dzdHIgImhvcHBhIMO2dmVyIGF0dCBhcHBsaWNlcmEgZmlsdGVyIGbDtnIgZ2xlcyB1dGNoZWNrbmluZyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTMKK21zZ2lkICJkZWJ1ZyB1bnBhY2stdHJlZXMiCittc2dzdHIgImZlbHPDtmsgdW5wYWNrLXRyZWVzIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1NworbXNnaWQgInN1cHByZXNzIGZlZWRiYWNrIG1lc3NhZ2VzIgorbXNnc3RyICJ1bmRlcnRyeWNrIMOldGVya29wcGxpbmdzbWVkZGVsYW5kZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTg4Cittc2dpZCAiWW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIkR1IG3DpXN0ZSBsw7ZzYSBkaXR0IGJlZmludGxpZ2EgaW5kZXggZsO2cnN0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMyCittc2dpZCAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT4gfCAtLWtlZXAtYmFzZV0gIgorIls8dXBzdHJlYW0+IFs8YnJhbmNoPl1dIgorbXNnc3RyICIiCisiZ2l0IHJlYmFzZSBbLWldIFtmbGFnZ29yXSBbLS1leGVjIDxrbWQ+XSBbLS1vbnRvIDxueWJhcz4gfCAtLWtlZXAtYmFzZV0gIgorIls8dXBwc3Ryw7ZtPiBbPGdyZW4+XV0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPl0gLS1yb290IFs8YnJhbmNoPl0iCittc2dzdHIgIiIKKyJnaXQgcmViYXNlIFstaV0gW2ZsYWdnb3JdIFstLWV4ZWMgPGttZD5dIFstLW9udG8gPG55YmFzPl0gLS1yb290IFs8Z3Jlbj5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2Cittc2dpZCAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorbXNnc3RyICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc1IGJ1aWx0aW4vcmViYXNlLmM6MTk5IGJ1aWx0aW4vcmViYXNlLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAib2FudsOkbmRiYXIgdG9kby1saXN0YTogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIHRlbXBvcsOkciAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyOTgKK21zZ2lkICJjb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBtYXJrZXJhIHNvbSBpbnRlcmFrdGl2IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM1MgorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSB0b2RvIGxpc3QiCittc2dzdHIgIkt1bmRlIGludGUgc2thcGEgYXR0Z8O2cmEtbGlzdGEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzkxCittc2dpZCAiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iCittc2dzdHIgImVuIGJhc2luY2hlY2tuaW5nIG3DpXN0ZSBhbmdlcyBtZWQgLS11cHN0cmVhbSBlbGxlciAtLW9udG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDYxCittc2dpZCAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NCBidWlsdGluL3JlYmFzZS5jOjE1NTAKK21zZ2lkICIoREVQUkVDQVRFRCkga2VlcCBlbXB0eSBjb21taXRzIgorbXNnc3RyICIoRsOWUsOFTERSQUQpIGJlaMOlbGwgdG9tbWEgaW5jaGVja25pbmdhciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzggYnVpbHRpbi9yZXZlcnQuYzoxMjgKK21zZ2lkICJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgInRpbGzDpXQgaW5jaGVja25pbmdhciBtZWQgdG9tdCBtZWRkZWxhbmRlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4MAorbXNnaWQgInJlYmFzZSBtZXJnZSBjb21taXRzIgorbXNnc3RyICJvbWJhc2VyYSBzYW1tYW5zbGFnbmluZ2FyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4MgorbXNnaWQgImtlZXAgb3JpZ2luYWwgYnJhbmNoIHBvaW50cyBvZiBjb3VzaW5zIgorbXNnc3RyICJiZWjDpWxsIHVyc3BydW5nbGlnYSBmw7ZyZ3JlbmluZ3NwdW5rdGVyIGbDtnIga3VzaW5lciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODQKK21zZ2lkICJtb3ZlIGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHNxdWFzaCEvZml4dXAhIgorbXNnc3RyICJmbHl0dGEgaW5jaGVja25pbmdhciBzb20gaW5sZWRzIG1lZCBzcXVhc2ghL2ZpeHVwISIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODUKK21zZ2lkICJzaWduIGNvbW1pdHMiCittc2dzdHIgInNpZ25lcmEgaW5jaGVja25pbmdhciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODcgYnVpbHRpbi9yZWJhc2UuYzoxNDkwCittc2dpZCAiZGlzcGxheSBhIGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAidmlzIGRpZmZzdGF0IGbDtnIgdmFkIHNvbSDDpG5kcmF0cyB1cHBzdHLDtm1zIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4OQorbXNnaWQgImNvbnRpbnVlIHJlYmFzZSIKK21zZ3N0ciAiZm9ydHPDpHR0IG9tYmFzZXJpbmciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkxCittc2dpZCAic2tpcCBjb21taXQiCittc2dzdHIgImhvcHBhIMO2dmVyIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MgorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAicmVkaWdlcmEgYXR0Z8O2cmEtbGlzdGFuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NAorbXNnaWQgInNob3cgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgInZpc2EgbnV2YXJhbmRlIHBhdGNoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NworbXNnaWQgInNob3J0ZW4gY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJmw7Zya29ydGEgaW5jaGVja25pbmdzLWlkIGkgdG9kby1saXN0YW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk5Cittc2dpZCAiZXhwYW5kIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAidXTDtmthIGluY2hlY2tuaW5ncy1pZCBpIHRvZG8tbGlzdGFuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMQorbXNnaWQgImNoZWNrIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgImtvbnRyb2xsZXJhIHRvZG8tbGlzdGFuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMworbXNnaWQgInJlYXJyYW5nZSBmaXh1cC9zcXVhc2ggbGluZXMiCittc2dzdHIgIm9yZG5hIG9tIGZpeHVwLS9zcXVhc2gtcmFkZXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA1Cittc2dpZCAiaW5zZXJ0IGV4ZWMgY29tbWFuZHMgaW4gdG9kbyBsaXN0IgorbXNnc3RyICJsw6RnZyBpbiBleGVjLWtvbW1hbmRvbiBpIHRvZG8tbGlzdGFuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwNgorbXNnaWQgIm9udG8iCittc2dzdHIgIm92YW5ww6UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA5Cittc2dpZCAicmVzdHJpY3QtcmV2aXNpb24iCittc2dzdHIgInJlc3RyaWN0LXJldmlzaW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwOQorbXNnaWQgInJlc3RyaWN0IHJldmlzaW9uIgorbXNnc3RyICJiZWdyw6Ruc2EgcmV2aXNpb24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTExCittc2dpZCAic3F1YXNoLW9udG8iCittc2dzdHIgInNxdWFzaC1vbnRvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxMgorbXNnaWQgInNxdWFzaCBvbnRvIgorbXNnc3RyICJ0cnljayBpaG9wIG92YW5ww6UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE0Cittc2dpZCAidGhlIHVwc3RyZWFtIGNvbW1pdCIKK21zZ3N0ciAidXBwc3Ryw7Ztc2luY2hlY2tuaW5nZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE2Cittc2dpZCAiaGVhZC1uYW1lIgorbXNnc3RyICJoZWFkLW5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE2Cittc2dpZCAiaGVhZCBuYW1lIgorbXNnc3RyICJuYW1uIHDDpSBodXZ1ZCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjEKK21zZ2lkICJyZWJhc2Ugc3RyYXRlZ3kiCittc2dzdHIgInNhbW1hbnNsYWduaW5nc3N0cmF0ZWdpIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMgorbXNnaWQgInN0cmF0ZWd5LW9wdHMiCittc2dzdHIgInN0cmF0ZWd5LW9wdHMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIzCittc2dpZCAic3RyYXRlZ3kgb3B0aW9ucyIKK21zZ3N0ciAic3RyYXRlZ2lmbGFnZ29yIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNAorbXNnaWQgInN3aXRjaC10byIKK21zZ3N0ciAic3dpdGNoLXRvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNQorbXNnaWQgInRoZSBicmFuY2ggb3IgY29tbWl0IHRvIGNoZWNrb3V0IgorbXNnc3RyICJncmVuIGVsbGVyIGluY2hlY2tpbmcgYXR0IGNoZWNrYSB1dCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjYKK21zZ2lkICJvbnRvLW5hbWUiCittc2dzdHIgIm9udG8tbmFtZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjYKK21zZ2lkICJvbnRvIG5hbWUiCittc2dzdHIgInDDpS1uYW1uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNworbXNnaWQgImNtZCIKK21zZ3N0ciAia21kIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNworbXNnaWQgInRoZSBjb21tYW5kIHRvIHJ1biIKK21zZ3N0ciAia29tbWFuZG8gYXR0IGvDtnJhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUzMCBidWlsdGluL3JlYmFzZS5jOjE1ODQKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHJlLXNjaGVkdWxlIGFueSBgZXhlY2AgdGhhdCBmYWlscyIKK21zZ3N0ciAia8O2ciBhdXRvbWF0aXNrdCBhbGxhIFwiZXhlY1wiIHNvbSBtaXNzbHlja2FzIHDDpSBueXR0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU0NgorbXNnaWQgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1yZWJhc2UtbWVyZ2VzIgorbXNnc3RyICItLVtuby1dcmViYXNlLWNvdXNpbnMgaGFyIGluZ2VuIGVmZmVrdCB1dGFuIC0tcmViYXNlLW1lcmdlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICIlcyBrcsOkdmVyIGVuIGludGVyYWt0aXYgb21iYXNlcmluZyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCAnb250byc6ICclcyciCittc2dzdHIgImt1bmRlIGludGUgaMOkbXRhIFwib250b1wiOiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjI3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3JpZy1oZWFkOiAnJXMnIgorbXNnc3RyICJvZ2lsdGlndCBvcmlnLWhlYWQ6IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgaW52YWxpZCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogJyVzJyIKK21zZ3N0ciAiaWdub3JlcmEgb2dpbHRpZ3QgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU6IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo3MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6RzYSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAiS2FuIGludGUgc3BhcmEgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODUzCittc2dpZCAiY291bGQgbm90IGRldGVybWluZSBIRUFEIHJldmlzaW9uIgorbXNnc3RyICJrdW5kZSBpbnRlIGJlc3TDpG1tYSBIRUFELXJldmlzaW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjk3NiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEKK21zZ2lkICIiCisiUmVzb2x2ZSBhbGwgY29uZmxpY3RzIG1hbnVhbGx5LCBtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgd2l0aFxuIgorIlwiZ2l0IGFkZC9ybSA8Y29uZmxpY3RlZF9maWxlcz5cIiwgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJZb3UgY2FuIGluc3RlYWQgc2tpcCB0aGlzIGNvbW1pdDogcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIi5cbiIKKyJUbyBhYm9ydCBhbmQgZ2V0IGJhY2sgdG8gdGhlIHN0YXRlIGJlZm9yZSBcImdpdCByZWJhc2VcIiwgcnVuIFwiZ2l0IHJlYmFzZSAtLSIKKyJhYm9ydFwiLiIKK21zZ3N0ciAiIgorIkzDtnMgYWxsYSBrb25mbGlrdGVyIG1hbnVlbGx0LCBtw6RyayBkZW0gc29tIGzDtnN0YSBtZWRcbiIKKyJcImdpdCBhZGQvcm0gPGZpbGVyX2lfa29uZmxpa3Q+XCIsIGvDtnIgc2VkYW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJEdSBrYW4gaG9wcGEgw7Z2ZXIgaW5jaGVja25pbmdlbiBpc3TDpGxsZXQ6IGvDtnIgXCJnaXQgcmViYXNlIC0tc2tpcFwiLlxuIgorIkbDtnIgYXR0IGF2YnJ5dGEgb2NoIMOldGVyZ8OlIHRpbGwgZMOkciBkdSB2YXIgZsO2cmUgb21iYXNlcmluZ2VuLCBrw7ZyIFwiZ2l0ICIKKyJyZWJhc2UgLS1hYm9ydFwiLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJnaXQgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgcHJlcGFyaW5nIHRoZSBwYXRjaGVzIHRvIHJlcGxheVxuIgorInRoZXNlIHJldmlzaW9uczpcbiIKKyJcbiIKKyIgICAgJXNcbiIKKyJcbiIKKyJBcyBhIHJlc3VsdCwgZ2l0IGNhbm5vdCByZWJhc2UgdGhlbS4iCittc2dzdHIgIiIKKyJcbiIKKyJnaXQgdXBwdMOkY2t0ZSBldHQgZmVsIG7DpHIgZGV0IHNrdWxsZSBmw7ZyYmVyZWRhIHBhdGNoYXIgZsO2ciBhdHRcbiIKKyLDpXRlcnNrYXBhIGRlc3NhIHJldmlzaW9uZXI6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiRMOkcmbDtnIga2FuIGludGUgZ2l0IG9tYmFzZXJhIGRlc3NhLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bnJlY29nbml6ZWQgZW1wdHkgdHlwZSAnJXMnOyB2YWxpZCB2YWx1ZXMgYXJlIFwiZHJvcFwiLCBcImtlZXBcIiwgYW5kIFwiYXNrIgorIlwiLiIKK21zZ3N0ciAiIgorIm9rw6RuZCB0b20tdHlwIFwiJXNcIjsgZ2lsdGlnYSB2w6RyZGVuIMOkciBcImRyb3BcIiwgXCJrZWVwXCIgb2NoIFwiYXNrXCIuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzXG4iCisiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LlxuIgorIlNlZSBnaXQtcmViYXNlKDEpIGZvciBkZXRhaWxzLlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlICc8YnJhbmNoPidcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzXG4iCisiQW5nZSB2aWxrZW4gZ3JlbiBkdSB2aWxsIG9tYmFzZXJhIG1vdC5cbiIKKyJTZSBnaXQtcmViYXNlKDEpIGbDtnIgZGV0YWxqZXIuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxncmVuPidcbiIKKyJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiT20gZHUgdmlsbCBhbmdlIHNww6VybmluZ3NpbmZvcm1hdGlvbiBmw7ZyIGdyZW5lbiBrYW4gZHUgZ8O2cmEgZGV0IG1lZDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88Z3Jlbj4gJXNcbiIKKyJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ3Cittc2dpZCAiZXhlYyBjb21tYW5kcyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAiZXhlYy1rb21tYW5kb24ga2FuIGludGUgaW5uZWjDpWxsYSBueXJhZHN0ZWNrZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MQorbXNnaWQgImVtcHR5IGV4ZWMgY29tbWFuZCIKK21zZ3N0ciAidG9tdCBleGVjLWtvbW1hbmRvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODEKK21zZ2lkICJyZWJhc2Ugb250byBnaXZlbiBicmFuY2ggaW5zdGVhZCBvZiB1cHN0cmVhbSIKK21zZ3N0ciAib21iYXNlcmEgbW90IGdpdmVuIGdyZW5lbiBpc3TDpGxsZXQgZsO2ciB1cHBzdHLDtm0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MworbXNnaWQgInVzZSB0aGUgbWVyZ2UtYmFzZSBvZiB1cHN0cmVhbSBhbmQgYnJhbmNoIGFzIHRoZSBjdXJyZW50IGJhc2UiCittc2dzdHIgImFudsOkbmQgc2FtbWFuc2xhZ25pbmdzYmFzZW4gbWVsbGFuIHVwcHN0csO2bXMgb2NoIGdyZW4gc29tIGFrdHVlbGwgYmFzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODUKK21zZ2lkICJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIgorbXNnc3RyICJ0aWxsw6V0IHByZS1yZWJhc2Uta3JvayBhdHQga8O2cmEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4NworbXNnaWQgImJlIHF1aWV0LiBpbXBsaWVzIC0tbm8tc3RhdCIKK21zZ3N0ciAidmFyIHR5c3QuIGltcGxpY2VyYXIgLS1uby1zdGF0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTMKK21zZ2lkICJkbyBub3Qgc2hvdyBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgInZpc2EgaW50ZSBlbiBkaWZmc3RhdCBmw7ZyIHZhZCBzb20gw6RuZHJhdHMgdXBwc3Ryw7ZtcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDk2Cittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieTogbGluZSB0byBlYWNoIGNvbW1pdCIKK21zZ3N0ciAibMOkZ2cgXCJTaWduZWQtb2ZmLWJ5OlwiLXJhZCB0aWxsIHZhcmplIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTggYnVpbHRpbi9yZWJhc2UuYzoxNTAyIGJ1aWx0aW4vcmViYXNlLmM6MTUwNAorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFtJyIKK21zZ3N0ciAic8OkbmRzIHRpbGwgXCJnaXQgYW1cIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTA2IGJ1aWx0aW4vcmViYXNlLmM6MTUwOAorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFwcGx5JyIKK21zZ3N0ciAic8OkbmRzIHRpbGwgXCJnaXQgYXBwbHlcIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTEwIGJ1aWx0aW4vcmViYXNlLmM6MTUxMworbXNnaWQgImNoZXJyeS1waWNrIGFsbCBjb21taXRzLCBldmVuIGlmIHVuY2hhbmdlZCIKK21zZ3N0ciAidXRmw7ZyIGNoZXJyeS1waWNrIHDDpSBhbGxhIGluY2hlY2tuaW5nYXIsIMOkdmVuIG9tIG/DpG5kcmFkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTUKK21zZ2lkICJjb250aW51ZSIKK21zZ3N0ciAiZm9ydHPDpHR0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTgKK21zZ2lkICJza2lwIGN1cnJlbnQgcGF0Y2ggYW5kIGNvbnRpbnVlIgorbXNnc3RyICJob3BwYSDDtnZlciBudXZhcmFuZGUgcGF0Y2ggb2NoIGZvcnRzw6R0dCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTIwCittc2dpZCAiYWJvcnQgYW5kIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIgorbXNnc3RyICJhdmJyeXQgb2NoIGNoZWNrYSB1dCB1cnNwcnVuZ3NncmVuZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyMworbXNnaWQgImFib3J0IGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMiCittc2dzdHIgImF2YnJ5dCBtZW4gYmVow6VsbCBIRUFEIGTDpHIgZGV0IMOkciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTI0Cittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IGR1cmluZyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UiCittc2dzdHIgInJlZGlnZXJhIGF0dGfDtnJhLWxpc3RhbiB1bmRlciBpbnRlcmFrdGl2IG9tYmFzZXJpbmcuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjcKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBmaWxlIGJlaW5nIGFwcGxpZWQgb3IgbWVyZ2VkIgorbXNnc3RyICJ2aXNhIHBhdGNoZW4gc29tIHRpbGzDpG1wYXMgZWxsZXIgc2zDpXMgc2FtbWFuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzAKK21zZ2lkICJ1c2UgYXBwbHkgc3RyYXRlZ2llcyB0byByZWJhc2UiCittc2dzdHIgImFudsOkbmQgYXBwbGljZXJpbmdzdHJhdGVnaWVyIGbDtnIgb21iYXNlcmluZyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTM0Cittc2dpZCAidXNlIG1lcmdpbmcgc3RyYXRlZ2llcyB0byByZWJhc2UiCittc2dzdHIgImFudsOkbmQgc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2llciBmw7ZyIG9tYmFzZXJpbmciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzOAorbXNnaWQgImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIgorbXNnc3RyICJsw6V0IGFudsOkbmRhcmVuIHJlZGlnZXJhIGxpc3RhbiDDtnZlciBpbmNoZWNrbmluZ2FyIGF0dCBvbWJhc2VyYSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTQyCittc2dpZCAiKERFUFJFQ0FURUQpIHRyeSB0byByZWNyZWF0ZSBtZXJnZXMgaW5zdGVhZCBvZiBpZ25vcmluZyB0aGVtIgorbXNnc3RyICIiCisiKEFWUsOFRFMpIGbDtnJzw7ZrIMOldGVyc2thcGEgc2FtbWFuc2xhZ25pbmdhciBpc3TDpGxsZXQgZsO2ciBhdHQgaWdub3JlcmEgZGVtIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NDcKK21zZ2lkICJob3cgdG8gaGFuZGxlIGNvbW1pdHMgdGhhdCBiZWNvbWUgZW1wdHkiCittc2dzdHIgImh1ciBpbmNoZWNrbmluZ2FyIHNvbSBibGlyIHRvbW1hIHNrYSBoYW50ZXJhcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTU0Cittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISB1bmRlciAtaSIKK21zZ3N0ciAiZmx5dHRhIGluY2hlY2tuaW5nYXIgc29tIGLDtnJqYXIgbWVkIHNxdWFzaCEvZml4dXAhIHVuZGVyIC1pIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NjAKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIgorbXNnc3RyICJ1dGbDtnIgYXV0b21hdGlza3Qgc3Rhc2gvc3Rhc2ggcG9wIGbDtnJlIG9jaCBlZnRlciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTYyCittc2dpZCAiYWRkIGV4ZWMgbGluZXMgYWZ0ZXIgZWFjaCBjb21taXQgb2YgdGhlIGVkaXRhYmxlIGxpc3QiCittc2dzdHIgImzDpGdnIHRpbGwgZXhlYy1yYWRlciBlZnRlciB2YXJqZSBpbmNoZWNrbmluZyBpIGRlbiByZWRpZ2VyYmFyYSBsaXN0YW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2NgorbXNnaWQgImFsbG93IHJlYmFzaW5nIGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAidGlsbMOldCBvbWJhc2VyaW5nIGF2IGluY2hlY2tuaW5nYXIgbWVkIHRvbXQgbWVkZGVsYW5kZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTcwCittc2dpZCAidHJ5IHRvIHJlYmFzZSBtZXJnZXMgaW5zdGVhZCBvZiBza2lwcGluZyB0aGVtIgorbXNnc3RyICJmw7Zyc8O2ayBvbWJhc2VyYSBzYW1tYW5zbGFnbmluZ2FyIGlzdMOkbGxldCBmw7ZyIGF0dCBpZ25vcmVyYSBkZW0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3MworbXNnaWQgInVzZSAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIHRvIHJlZmluZSB1cHN0cmVhbSIKK21zZ3N0ciAiYW52w6RuZCBcIm1lcmdlLWJhc2UgLS1mb3JrLXBvaW50XCIgZsO2ciBhdHQgZsO2cmZpbmEgdXBwc3Ryw7ZtIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzUKK21zZ2lkICJ1c2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJhbnbDpG5kIGFuZ2l2ZW4gc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2kiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3NyBidWlsdGluL3JldmVydC5jOjExNQorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAiYWx0ZXJuYXRpdiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTc4Cittc2dpZCAicGFzcyB0aGUgYXJndW1lbnQgdGhyb3VnaCB0byB0aGUgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInPDpG5kIGZsYWdnYW4gdGlsbCBzYW1tYW5zbGFnbmluZ3NzdHJhdGVnaW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU4MQorbXNnaWQgInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiCittc2dzdHIgIm9tYmFzZXJhIGFsbGEgbsOlYmFyYSBpbmNoZWNrbmluZ2FyIHVwcCB0aWxsIHJvdGVuL3LDtnR0ZXJuYSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTk4Cittc2dpZCAiIgorInRoZSByZWJhc2UudXNlQnVpbHRpbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQhXG4iCisiU2VlIGl0cyBlbnRyeSBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJzdMO2ZGV0IGbDtnIgcmViYXNlLnVzZUJ1aWx0aW4gaGFyIHRhZ2l0cyBib3J0IVxuIgorIlNlIHBvc3RlbiBmw7ZyIGRldCBpIFwiZ2l0IGhlbHAgY29uZmlnXCIgZsO2ciBkZXRhbGplci4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwNAorbXNnaWQgIkl0IGxvb2tzIGxpa2UgJ2dpdCBhbScgaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIgorbXNnc3RyICJEZXQgdmVya2FyIHNvbSBlbiBcImdpdCBhbVwiIGvDtnJzLiBLYW4gaW50ZSBvbWJhc2VyYS4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY0NQorbXNnaWQgIiIKKyJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIGlzIGRlcHJlY2F0ZWQuIFVzZSAtLXJlYmFzZS1tZXJnZXMgaW5zdGVhZC4iCittc2dzdHIgIiIKKyJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIGF2csOlZHMgZnLDpW4uIEFudsOkbmQgLS1yZWJhc2UtbWVyZ2VzIGlzdMOkbGxldC4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1MAorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1vbnRvJyIKK21zZ3N0ciAia2FuIGludGUga29tYmluZXJhIFwiLS1rZWVwLWJhc2VcIiBtZWQgXCItLW9udG9cIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjUyCittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0ta2VlcC1iYXNlJyB3aXRoICctLXJvb3QnIgorbXNnc3RyICJrYW4gaW50ZSBrb21iaW5lcmEgXCItLWtlZXAtYmFzZVwiIG1lZCBcIi0tcm9vdFwiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTYKK21zZ2lkICJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IgorbXNnc3RyICJJbmdlbiBvbWJhc2VyaW5nIHDDpWfDpXI/IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NjAKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIsOFdGfDpHJkZW4gLS1lZGl0LXRvZG8ga2FuIGVuZGFzdCBhbnbDpG5kYXMgdW5kZXIgaW50ZXJha3RpdiBvbWJhc2VyaW5nLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjgzCittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiS2FuIGludGUgbMOkc2EgSEVBRCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjk1Cittc2dpZCAiIgorIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlblxuIgorIm1hcmsgdGhlbSBhcyByZXNvbHZlZCB1c2luZyBnaXQgYWRkIgorbXNnc3RyICIiCisiRHUgbcOlc3RlIHJlZGlnZXJhIGFsbGEgc2FtbWFuc2xhZ25pbmdza29uZmxpa3RlciBvY2hcbiIKKyJkw6RyZWZ0ZXIgbWFya2VyYSBkZW0gc29tIGzDtnN0YSBtZWQgZ2l0IGFkZCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzE0Cittc2dpZCAiY291bGQgbm90IGRpc2NhcmQgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBrYXN0YSDDpG5kcmluZ2FyIGkgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1vdmUgYmFjayB0byAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBmbHl0dGEgdGlsbGJha2EgdGlsbCAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAlcyBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JXNcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQlc1xuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuXG4iCittc2dzdHIgIiIKKyJEZXQgdmVya2FyIHNvbSBrYXRhbG9nZW4gJXMgcmVkYW4gZXhpc3RlcmFyLCBvY2hcbiIKKyJqYWcgdW5kcmFyIG9tIGR1IHJlZGFuIMOkciBtaXR0IGkgZW4gYW5uYW4gb21iYXNlcmluZy4gT20gc8OlIMOkclxuIgorImZhbGxldCwgZsO2cnPDtmtcbiIKKyJcdCVzXG4iCisiT20gc8OlIGludGUgw6RyIGZhbGxldCwga8O2clxuIgorIlx0JXNcbiIKKyJvY2gga8O2ciBwcm9ncmFtbWV0IGlnZW4uIEphZyBhdnNsdXRhciBpZmFsbCBkdSBmb3J0ZmFyYW5kZSBoYXJcbiIKKyJuw6Vnb3QgYXYgdsOkcmRlIGTDpHIuXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTgwNgorbXNnaWQgInN3aXRjaCBgQycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiZmxhZ2dhbiBcIkNcIiBmw7ZydsOkbnRhciBldHQgbnVtZXJpc2t0IHbDpHJkZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gbW9kZTogJXMiCittc2dzdHIgIk9rw6RudCBsw6RnZTogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg2OQorbXNnaWQgIi0tc3RyYXRlZ3kgcmVxdWlyZXMgLS1tZXJnZSBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXN0cmF0ZWd5IGtyw6R2ZXIgLS1tZXJnZSBlbGxlciAtLWludGVyYWN0aXZlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4OTkKK21zZ2lkICJjYW5ub3QgY29tYmluZSBhcHBseSBvcHRpb25zIHdpdGggbWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAia2FuIGludGUga29tYmluZXJhIGFwcGx5LWZsYWdnb3IgbWVkIG1lcmdlLWZsYWdnb3IiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHJlYmFzZSBiYWNrZW5kOiAlcyIKK21zZ3N0ciAiT2vDpG5kIHJlYmFzZS1iYWvDpG5kYTogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkzNworbXNnaWQgIi0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyByZXF1aXJlcyAtLWV4ZWMgb3IgLS1pbnRlcmFjdGl2ZSIKK21zZ3N0ciAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIGtyw6R2ZXIgLS1leGVjIGVsbGVyIC0taW50ZXJhY3RpdmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1NworbXNnaWQgImNhbm5vdCBjb21iaW5lICctLXByZXNlcnZlLW1lcmdlcycgd2l0aCAnLS1yZWJhc2UtbWVyZ2VzJyIKK21zZ3N0ciAia2FuIGludGUga29tYmluZXJhIFwiLS1wcmVzZXJ2ZS1tZXJnZXNcIiBtZWQgXCItLXJlYmFzZS1tZXJnZXNcIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTYxCittc2dpZCAiIgorImVycm9yOiBjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyciCittc2dzdHIgIiIKKyJmZWw6IGthbiBpbnRlIGtvbWJpbmVyYSBcIi0tcHJlc2VydmUtbWVyZ2VzXCIgbWVkIFwiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIgorIlwiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJXMnIgorbXNnc3RyICJmZWxha3RpZyB1cHBzdHLDtm0gXCIlc1wiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5OTEKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIG5ldyByb290IGNvbW1pdCIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBueSByb3RpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSB3aXRoIGJyYW5jaCIKK21zZ3N0ciAiXCIlc1wiOiBiZWjDtnZlciBwcmVjaXMgZW4gc2FtbWFuc2xhZ25pbmdzYmFzIG1lZCBncmVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIgorbXNnc3RyICJcIiVzXCI6IGJlaMO2dmVyIHByZWNpcyBlbiBzYW1tYW5zbGFnbmluZ3NiYXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjAyOAorIywgYy1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdCAnJXMnIgorbXNnc3RyICJQZWthciBpbnRlIHDDpSBlbiBnaWx0aWcgaW5jaGVja25pbmc6IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaC9jb21taXQgJyVzJyIKK21zZ3N0ciAiw7ZkZXNkaWdlcnQ6IGluZ2VuIHPDpWRhbiBncmVuL2luY2hlY2tuaW5nOiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA2MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVmOiAlcyIKK21zZ3N0ciAiSW5nZW4gc8OlZGFuIHJlZmVyZW5zOiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDczCittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCB0byBhIHJldmlzaW9uIgorbXNnc3RyICJLdW5kZSBpbnRlIGJlc3TDpG1tYSBIRUFEOnMgaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjExMQorbXNnaWQgIkNhbm5vdCBhdXRvc3Rhc2giCittc2dzdHIgIkthbiBpbnRlIHV0ZsO2cmEgXCJhdXRvc3Rhc2hcIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgc3Rhc2ggcmVzcG9uc2U6ICclcyciCittc2dzdHIgIk92w6RudGF0IHN2YXIgZnLDpW4gc3Rhc2g6IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHNrYXBhIGthdGFsb2cgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyMworIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJXNcbiIKK21zZ3N0ciAiU2thcGFkZSBhdXRvc3Rhc2g6ICVzXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyNgorbXNnaWQgImNvdWxkIG5vdCByZXNldCAtLWhhcmQiCittc2dzdHIgImt1bmRlIGludGUgdXRmw7ZyYSBcInJlc2V0IC0taGFyZFwiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMzUKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJDaGVja2EgaW4gZWxsZXIgYW52w6RuZCBcInN0YXNoXCIgcMOlIGRlbS4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3dpdGNoIHRvICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHbDpHhsYSB0aWxsICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxODAKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUuIgorbXNnc3RyICJIRUFEIMOkciDDoCBqb3VyLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUuXG4iCittc2dzdHIgIkFrdHVlbGwgZ3JlbiAlcyDDpHIgw6Agam91ci5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTkwCittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiSEVBRCDDpHIgw6Agam91ciwgb21iYXNlcmluZyBmcmFtdHZpbmdhZC4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAlcyBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLlxuIgorbXNnc3RyICJBa3R1ZWxsIGdyZW4gJXMgw6RyIMOgIGpvdXIsIG9tYmFzZXJpbmcgZnJhbXR2aW5nYWQuXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjIwMAorbXNnaWQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIgorbXNnc3RyICJLcm9rZW4gcHJlLXJlYmFzZSB2w6RncmFkZSBvbWJhc2VyaW5nZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyB0byAlczpcbiIKK21zZ3N0ciAiw4RuZHJpbmdhciB0aWxsICVzOlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIgorbXNnc3RyICLDhG5kcmluZ2FyIGZyw6VuICVzIHRpbGwgJXM6XG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi5cbiIKK21zZ3N0ciAiIgorIkbDtnJzdCwgc3BvbGFyIHRpbGxiYWthIGh1dnVkZXQgZsO2ciBhdHQgc3BlbGEgYXYgZGl0dCBhcmJldGUgb3ZhbnDDpSBkZXQuLi5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjQ0Cittc2dpZCAiQ291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICJLdW5kZSBpbnRlIGtvcHBsYSBmcsOlbiBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkZWQgJXMgdG8gJXMuXG4iCittc2dzdHIgIlNuYWJic3BvbGFkZSAlcyB0aWxsICVzLlxuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjMzCittc2dpZCAiZ2l0IHJlY2VpdmUtcGFjayA8Z2l0LWRpcj4iCittc2dzdHIgImdpdCByZWNlaXZlLXBhY2sgPGdpdC1rYXRhbG9nPiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4MjEKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeVxuIgorImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisid2l0aCB3aGF0IHlvdSBwdXNoZWQsIGFuZCB3aWxsIHJlcXVpcmUgJ2dpdCByZXNldCAtLWhhcmQnIHRvIG1hdGNoXG4iCisidGhlIHdvcmsgdHJlZSB0byBIRUFELlxuIgorIlxuIgorIllvdSBjYW4gc2V0IHRoZSAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvXG4iCisiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWVcbiIKKyJvdGhlciB3YXkuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXRcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyJOb3JtYWx0IHRpbGzDpXRzIGludGUgdXBwZGF0ZXJpbmcgYXYgYWt0dWVsbCBncmVuIGkgZXR0IGlja2UtbmFrZXRcbiIKKyJhcmtpdiwgZMOlIGluZGV4IG9jaCBhcmJldHNrYXRhbG9nIGludGUga29tbWVyIHN0w6RtbWEgbWVkIGRldCBkdVxuIgorInPDpG5kZSBvY2ggXCJnaXQgcmVzZXQgLS1oYXJkXCIga3LDpHZzIGbDtnIgYXR0IGbDpSBhcmJldHNrYXRhbG9nZW4gb2NoXG4iCisiSEVBRCBhdHQgc3TDpG1tYSDDtnZlcmVucy5cbiIKKyJcbiIKKyJEdSBrYW4gc3TDpGxsYSBpbiB2YXJpYWJlbG4gXCJyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoXCIgdGlsbFxuIgorIlwiaWdub3JlXCIgZWxsZXIgXCJ3YXJuXCIgaSBmasOkcnJhcmtpdmV0IGbDtnIgYXR0IHRpbGzDpXRhIHPDpG5kbmluZyB0aWxsXG4iCisiZGVzcyBha3R1ZWxsYSBncmVuOyBkZXR0YSByZWtvbW1lbmRlcmFzIGRvY2sgaW50ZSBzw6V2aWRhIGR1IGludGVcbiIKKyJzZXR0IHRpbGwgYXR0IGRlc3MgYXJiZXRza2F0YWxvZyB1cHBkYXRlcmFzIHRpbGwgZGV0IHR1IHPDpG5kZSBpblxuIgorInDDpSBhbm5hdCBzw6R0dC5cbiIKKyJcbiIKKyJGw7ZyIGF0dCB1bmR2aWthIGRldHRhIG1lZGRlbGFuZGUgb2NoIGZvcnRmYXJhbmRlIGJlaMOlbGxhIGRldFxuIgorIm5vcm1hbGEgYmV0ZWVuZGV0LCBzw6R0dCBcInJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2hcIiB0aWxsIFwicmVmdXNlXCIuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjg0MQorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCBkZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggaXMgZGVuaWVkLCBiZWNhdXNlIHRoZSBuZXh0XG4iCisiJ2dpdCBjbG9uZScgd29uJ3QgcmVzdWx0IGluIGFueSBmaWxlIGNoZWNrZWQgb3V0LCBjYXVzaW5nIGNvbmZ1c2lvbi5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0b1xuIgorIid3YXJuJyBvciAnaWdub3JlJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgZGVsZXRpbmcgdGhlXG4iCisiY3VycmVudCBicmFuY2gsIHdpdGggb3Igd2l0aG91dCBhIHdhcm5pbmcgbWVzc2FnZS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSwgeW91IGNhbiBzZXQgaXQgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisiTm9ybWFsdCB0aWxsw6V0cyBpbnRlIHJhZGVyaW5nIGF2IGFrdHVlbGwgZ3JlbiwgZWZ0ZXJzb20gbsOkc3RhXG4iCisiXCJnaXQgY2xvbmVcIiBpbnRlIGtvbW1lciBpbm5lYsOkcmEgYXR0IG7DpWdyYSBmaWxlciBjaGVja2FzIHV0LFxuIgorInZpbGtldCDDpHIgZsO2cnZpcnJhbmRlLlxuIgorIlxuIgorIkR1IGthbiBzdMOkbGxhIGluIHZhcmlhYmVsbiBcInJlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnRcIiB0aWxsXG4iCisiXCJ3YXJuXCIgZWxsZXIgXCJpZ25vcmVcIiBpIGZqw6RycmFya2l2ZXQgZsO2ciBhdHQgdGlsbMOldGEgYm9ydHRhZ25pbmdcbiIKKyJhdiBha3R1ZWxsIGdyZW4sIG1lZCBlbGxlciB1dGFuIHZhcm5pbmdzbWVkZGVsYW5kZS5cbiIKKyJcbiIKKyJGw7ZyIGF0dCB1bmR2aWthIGRldHRhIG1lZGRlbGFuZGUga2FuIGR1IHPDpHR0YSBkZXQgdGlsbCBcInJlZnVzZVwiLiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTM4Cittc2dpZCAicXVpZXQiCittc2dzdHIgInR5c3QiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MgorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIgorbXNnc3RyICJEdSBtw6VzdGUgYW5nZSBlbiBrYXRhbG9nLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoxNworbXNnaWQgIiIKKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9PHRpbWU+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHRpbWU+XSBbLS0iCisicmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gWy0tYWxsXSAiCisiPHJlZnM+Li4uIgorbXNnc3RyICIiCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0aWQ+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHRpZD5dIFstLXJld3JpdGVdICIKKyJbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGxdICIKKyI8cmVmZXJlbnNlcj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjIKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gIgorIjxyZWZlcmVuc2VyPi4uLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoyNQorbXNnaWQgImdpdCByZWZsb2cgZXhpc3RzIDxyZWY+IgorbXNnc3RyICJnaXQgcmVmbG9nIGV4aXN0cyA8cmVmZXJlbnM+IgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU2OCBidWlsdGluL3JlZmxvZy5jOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiXCIlc1wiIMOkciBpbnRlIGVuIGdpbHRpZyB0aWRzc3TDpG1wZWwiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgcmVhY2hhYmxlIG9iamVjdHMuLi4iCittc2dzdHIgIk1hcmtlcmFyIG7DpWJhcmEgb2JqZWt0Li4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgbm93aGVyZSEiCittc2dzdHIgIiVzIHBla2FyIGluZ2Vuc3RhbnMhIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY5NgorbXNnaWQgIm5vIHJlZmxvZyBzcGVjaWZpZWQgdG8gZGVsZXRlIgorbXNnc3RyICJpbmdlbiByZWZlcmVuc2xvZ2cgYXR0IHRhIGJvcnQgYW5nYXZzIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSByZWZsb2c6ICVzIgorbXNnc3RyICJpbnRlIGVuIHJlZmVyZW5zbG9nZzogJXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlZmxvZyBmb3IgJyVzJyIKK21zZ3N0ciAiaW5nZW4gcmVmZXJlbnNsb2dnIGbDtnIgXCIlc1wiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZiBmb3JtYXQ6ICVzIgorbXNnc3RyICJmZWxha3RpZ3QgcmVmZXJlbnNmb3JtYXQ6ICVzIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc2NQorbXNnaWQgImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iCittc2dzdHIgImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOAorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxncmVuPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtbj4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkgYnVpbHRpbi9yZW1vdGUuYzozOQorbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSA8Z2FtbWFsPiA8bnk+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NDQKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1uPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMSBidWlsdGluL3JlbW90ZS5jOjQ5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtbj4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxncmVuPikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjMKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbW4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0Cittc2dpZCAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3JvdXA+IHwgPHJlbW90ZT4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3J1cHA+IHwgPGZqw6Rycj4pLi4uXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNQorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxuYW1uPiA8Z3Jlbj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjYgYnVpbHRpbi9yZW1vdGUuYzo3NQorbXNnaWQgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbW4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI3IGJ1aWx0aW4vcmVtb3RlLmM6ODAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+IFs8b2xkdXJsPl0iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtbj4gPG55dXJsPiBbPGdhbW1hbHVybD5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI4IGJ1aWx0aW4vcmVtb3RlLmM6ODEKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbW4+IDxueXVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjkgYnVpbHRpbi9yZW1vdGUuYzo4MgorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtbj4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzQKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs8ZmxhZ2dvcj5dIDxuYW1uPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbW4+IDxncmVuPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NQorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbW4+IDxncmVuPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MAorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2hvdyBbPGZsYWdnb3I+XSA8bmFtbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjUKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbPGZsYWdnb3I+XSA8bmFtbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzAKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxmbGFnZ29yPl0gWzxncnVwcD4gfCA8ZmrDpHJyPl0uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIlVwcGRhdGVyYXIgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorIi0tbWlycm9yIMOkciBmYXJsaWcgb2NoIGbDtnLDpWxkcmFkOyBhbnbDpG5kXG4iCisiXHQgLS1taXJyb3I9ZmV0Y2ggZWxsZXIgLS1taXJyb3I9cHVzaCBpc3TDpGxsZXQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAib2vDpG50IGFyZ3VtZW50IHRpbGwgbWlycm9yOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjQKK21zZ2lkICJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIgorbXNnc3RyICJow6RtdGEgZmrDpHJyZ3JlbmFybmEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2Cittc2dpZCAiaW1wb3J0IGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMgd2hlbiBmZXRjaGluZyIKK21zZ3N0ciAiaW1wb3J0ZXJhIGFsbGEgdGFnZ2FyIG9jaCBhc3NvY2llcmFkZSBvYmpla3QgdmlkIGjDpG10bmluZyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjkKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgImVsbGVyIGjDpG10YSBpbnRlIG7DpWdyYSB0YWdnYXIgYWxscyAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEKK21zZ2lkICJicmFuY2goZXMpIHRvIHRyYWNrIgorbXNnc3RyICJncmVuKGFyKSBhdHQgc3DDpXJhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MgorbXNnaWQgIm1hc3RlciBicmFuY2giCittc2dzdHIgImh1dnVkZ3JlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzQKK21zZ2lkICJzZXQgdXAgcmVtb3RlIGFzIGEgbWlycm9yIHRvIHB1c2ggdG8gb3IgZmV0Y2ggZnJvbSIKK21zZ3N0ciAic3TDpGxsIGluIGFya2l2IHNvbSBzcGVnZWwgYXR0IHPDpG5kYSBlbGxlciB0YSBlbW90IGZyw6VuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NgorbXNnaWQgInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiCittc2dzdHIgImF0dCBhbmdlIGVuIG1hc3Rlci1ncmVuIGdlciBpbmdlbiBtZW5pbmcgbWVkIC0tbWlycm9yIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4OAorbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgImF0dCBhbmdlIGdyZW5hciBhdHQgc3DDpXJhIGdlciBtZW5pbmcgYmFyYSBtZWQgaMOkbXRuaW5nc3NwZWdsYXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk1IGJ1aWx0aW4vcmVtb3RlLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgImZqw6RycmFya2l2ZXQgJXMgZmlubnMgcmVkYW4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5OSBidWlsdGluL3JlbW90ZS5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZXR0IGdpbHRpZ3QgbmFtbiBww6UgZmrDpHJyYXJraXYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza2FwYSBtYXN0ZXIgXCIlc1wiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBow6RtdGEgbWFwcG5pbmcgZsO2ciByZWZlcmVuc3NwZWNpZmlrYXRpb24gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDUzIGJ1aWx0aW4vcmVtb3RlLmM6NDYxCittc2dpZCAiKG1hdGNoaW5nKSIKK21zZ3N0ciAiKG1hdGNoYW5kZSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDY1Cittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIih0YSBib3J0KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHN0w6RsbGEgaW4gXCIlc1wiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlICVzIGNvbmZpZ3VyYXRpb24gcmVtb3RlLnB1c2hEZWZhdWx0IGluOlxuIgorIlx0JXM6JWRcbiIKKyJub3cgbmFtZXMgdGhlIG5vbi1leGlzdGVudCByZW1vdGUgJyVzJyIKK21zZ3N0ciAiIgorIktvbmZpZ3VyYXRpb25lbiBmw7ZyICVzIGbDtnIgcmVtb3RlLnB1c2hEZWZhdWx0IGk6XG4iCisiXHQlczolZFxuIgorImFuZ2VyIG51IGRlbiBpY2tlLWV4aXN0ZXJhbmRlIGZqw6RycmVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2ODkgYnVpbHRpbi9yZW1vdGUuYzo4MzIgYnVpbHRpbi9yZW1vdGUuYzo5NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICclcyciCittc2dzdHIgIkluZ2VuIHPDpWRhbiBmasOkcnI6IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIkt1bmRlIGludGUgYnl0YSBuYW1uIHDDpSBrb25maWd1cmF0aW9uc3Nla3Rpb25lbiBcIiVzXCIgdGlsbCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorIlVwcGRhdGVyYXIgaW50ZSBpY2tlLXN0YW5kYXJkIGjDpG10bmluZ3NyZWZlcmVuc3NwZWNpZmlrYXRpb25cbiIKKyJcdCVzXG4iCisiXHRVcHBkYXRlcmEga29uZmlndXJhdGlvbmVuIG1hbnVlbGx0IG9tIG7DtmR2w6RuZGlndC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgYm9ydCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2thcGEgXCIlc1wiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjg3NgorbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICIiCisiT2JzZXJ2ZXJhOiBFbiBncmVuIHV0YW5mw7ZyIGhpZXJhcmtpbiByZWZzL3JlbW90ZXMvIHRvZ3MgaW50ZSBib3J0O1xuIgorImbDtnIgYXR0IHRhIGJvcnQgZGVuLCBhbnbDpG5kOiIKK21zZ3N0clsxXSAiIgorIk9ic2VydmVyYTogTsOlZ3JhIGdyZW5hciB1dGFuZsO2ciBoaWVyYXJraW4gcmVmcy9yZW1vdGVzLyB0b2dzIGludGUgYm9ydDtcbiIKKyJmw7ZyIGF0dCB0YSBib3J0IGRlbSwgYW52w6RuZDoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0YSBib3J0IGtvbmZpZ3VyYXRpb25zc2VrdGlvbmVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvJXMpIgorbXNnc3RyICIgbnkgKG7DpHN0YSBow6RtdG5pbmcgc3BhcmFyIGkgcmVtb3Rlcy8lcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTk2Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiBzcMOlcmFkIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5OAorbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIgZsO2cmxlZ2FkIChhbnbDpG5kIFwiZ2l0IHJlbW90ZSBwcnVuZVwiIGbDtnIgYXR0IHRhIGJvcnQpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDAKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICJvZ2lsdGlnIGJyYW5jaC4lcy5tZXJnZTsga2FuIGludGUgb21iYXNlcmEgw7Z2ZXIgPiAxIGdyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgb250byByZW1vdGUgJXMiCittc2dzdHIgIm9tYmFzZXJhcyBpbnRlcmFrdGl2dCBww6UgZmrDpHJyZW4gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgKHdpdGggbWVyZ2VzKSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAib21iYXNlcmFzIGludGVyYWt0aXZ0IChtZWQgc2FtbWFuc2xhZ25pbmdhcikgcMOlIGZqw6RycmVuICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAib21iYXNlcmFzIHDDpSBmasOkcnJlbiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiBzYW1tYW5zbMOlcyBtZWQgZmrDpHJyZW4gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgInNhbW1hbnNsw6VzIG1lZCBmasOkcnJlbiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtKnMgICAgYW5kIHdpdGggcmVtb3RlICVzXG4iCittc2dzdHIgIiUtKnMgICAgb2NoIG1lZCBmasOkcnJlbiAlc1xuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMDgKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgInNrYXBhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTEKK21zZ2lkICJkZWxldGUiCittc2dzdHIgInRhIGJvcnQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTExNQorbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgIsOgam91ciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE4Cittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAia2FuIHNuYWJic3BvbGFzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjEKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAibG9rYWwgZsO2csOlbGRyYWQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyB0dmluZ2FyIHRpbGwgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgc8OkbmRlciB0aWxsICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgdHZpbmdhciB0aWxsICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyBzw6RuZGVyIHRpbGwgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwNgorbXNnaWQgImRvIG5vdCBxdWVyeSByZW1vdGVzIgorbXNnc3RyICJmcsOlZ2EgaW50ZSBmasOkcnJhciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqIGZqw6RyciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmV0Y2ggVVJMOiAlcyIKK21zZ3N0ciAiICBIw6RtdC1VUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzUgYnVpbHRpbi9yZW1vdGUuYzoxMjUxIGJ1aWx0aW4vcmVtb3RlLmM6MTM5MAorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIoaW5nZW4gVVJMKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiAnOicgc2hvdWxkIGFsaWduCisjLiB3aXRoIHRoZSBvbmUgaW4gIiBGZXRjaCBVUkw6ICVzIgorIy4gdHJhbnNsYXRpb24uCisjLgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQ5IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAgU8OkbmQtVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjUzIGJ1aWx0aW4vcmVtb3RlLmM6MTI1NSBidWlsdGluL3JlbW90ZS5jOjEyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaDogJXMiCittc2dzdHIgIiAgSEVBRC1ncmVuOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjUzCittc2dpZCAiKG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiKGludGUgZsO2cmZyw6VnYWQpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTUKK21zZ2lkICIodW5rbm93bikiCittc2dzdHIgIihva8OkbmQpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIKK21zZ3N0ciAiICBIRUFELWdyZW4gKEhFQUQgcMOlIGZqw6RyciDDpHIgdHZldHlkaWcsIGthbiB2YXJhIGVuIGF2IGbDtmxqYW5kZSk6XG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIEZqw6RycmdyZW46JXMiCittc2dzdHJbMV0gIiAgRmrDpHJyZ3JlbmFyOiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzQgYnVpbHRpbi9yZW1vdGUuYzoxMzAwCittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKHN0YXR1cyBpbnRlIGbDtnJmcsOlZ2FkKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgzCittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAgTG9rYWwgZ3JlbiBrb25maWd1cmVyYWQgZsO2ciBcImdpdCBwdWxsXCI6IgorbXNnc3RyWzFdICIgIExva2FsYSBncmVuYXIga29uZmlndXJlcmFkZSBmw7ZyIFwiZ2l0IHB1bGxcIjoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5MQorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiAgTG9rYWxhIHJlZmVyZW5zZXIgc3BlZ2xhcyBhdiBcImdpdCBwdXNoXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5NworIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICBMb2thbCByZWZlcmVucyBrb25maWd1cmVyYWQgZsO2ciBcImdpdCBwdXNoXCIlczoiCittc2dzdHJbMV0gIiAgTG9rYWxhIHJlZmVyZW5zZXIga29uZmlndXJlcmFkZSBmw7ZyIFwiZ2l0IHB1c2hcIiVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzE4Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICJzw6R0dCByZWZzL3JlbW90ZXMvPG5hbW4+L0hFQUQgZW5saWd0IGZqw6RycmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjAKK21zZ2lkICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorbXNnc3RyICJ0YSBib3J0IHJlZnMvcmVtb3Rlcy88bmFtbj4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzM1Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiS2FuIGludGUgYmVzdMOkbW1hIEhFQUQgcMOlIGZqw6RycmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMzcKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiRmxlcmEgSEVBRC1ncmVuYXIgcMOlIGZqw6RycmVuLiBWw6RsaiBlbiBleHBsaWNpdCBtZWQ6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0YSBib3J0ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAiSW50ZSBlbiBnaWx0aWcgcmVmZXJlbnM6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIHN0w6RsbGEgaW4gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMga29tbWVyIGJsaSBkaW5nbGFuZGUhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMgaGFyIGJsaXZpdCBkaW5nbGFuZGUhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAiUmVuc2FyICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAiVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFtza3VsbGUgcmVuc2FdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3BydW5lZF0gJXMiCittc2dzdHIgIiAqIFtyZW5zYWRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTEKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJyZW5zYSBmasOkcnJhciBlZnRlciBow6RtdG5pbmciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUxNCBidWlsdGluL3JlbW90ZS5jOjE1NjggYnVpbHRpbi9yZW1vdGUuYzoxNjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIkluZ2VuIHPDpWRhbiBmasOkcnIgXCIlc1wiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzAKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICJsw6RnZyB0aWxsIGdyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNworbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgImluZ2VuIGZqw6RyciBhbmdhdnMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU1NAorbXNnaWQgInF1ZXJ5IHB1c2ggVVJMcyByYXRoZXIgdGhhbiBmZXRjaCBVUkxzIgorbXNnc3RyICJmcsOlZ2Egc8OkbmQtVVJMOmVyIGlzdMOkbGxldCBmw7ZyIGjDpG10YS1VUkw6ZXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU1NgorbXNnaWQgInJldHVybiBhbGwgVVJMcyIKK21zZ3N0ciAicmV0dXJuZXJhIGFsbGEgVVJMOmVyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gVVJMcyBjb25maWd1cmVkIGZvciByZW1vdGUgJyVzJyIKK21zZ3N0ciAiaW5nZW4gVVJMOmVyIGFuZ2l2bmEgZsO2ciBmasOkcnJlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxMAorbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICJtYW5pcHVsZXJhIFVSTDphciBmw7ZyIHPDpG5kbmluZyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjEyCittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAibMOkZ2cgdGlsbCBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxNAorbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICJ0YSBib3J0IFVSTDphciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjIxCittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWFkZCAtLWRlbGV0ZSBnZXIgaW5nZW4gbWVuaW5nIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICJGZWxha3RpZyBnYW1tYWx0IFVSTC1tw7Zuc3RlcjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgIkluZ2VuIHPDpWRhbiBVUkwgaGl0dGFkZXM6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NzAKK21zZ2lkICJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiCittc2dzdHIgIktvbW1lciBpbnRlIHRhIGJvcnQgYWxsYSBpY2tlLXPDpG5kLVVSTDplciIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZXBhY2sgWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjgKK21zZ2lkICIiCisiSW5jcmVtZW50YWwgcmVwYWNrcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggYml0bWFwIGluZGV4ZXMuICBVc2VcbiIKKyItLW5vLXdyaXRlLWJpdG1hcC1pbmRleCBvciBkaXNhYmxlIHRoZSBwYWNrLndyaXRlYml0bWFwcyBjb25maWd1cmF0aW9uLiIKK21zZ3N0ciAiIgorIklua3JlbWVudGVsbGEgb21wYWNrbmluZ2FyIMOkciBpbnRlIGtvbXBhdGlibGEgbWVkIGJpdG1hcHAtaW5kZXguXG4iCisiQW52w6RuZCAtLW5vLXdyaXRlLWJpdG1hcC1pbmRleCBlbGxlciBpbmFrdGl2ZXJhIGluc3TDpGxsbmluZ2VuXG4iCisicGFjay53cml0ZWJpdG1hcHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTkxCittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzdGFydGEgcGFjay1vYmplY3RzIGbDtnIgYXR0IHBhY2thIG9tIGtvbnRyYWt0c29iamVrdCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMzAgYnVpbHRpbi9yZXBhY2suYzo0MTYKK21zZ2lkICJyZXBhY2s6IEV4cGVjdGluZyBmdWxsIGhleCBvYmplY3QgSUQgbGluZXMgb25seSBmcm9tIHBhY2stb2JqZWN0cy4iCittc2dzdHIgIiIKKyJyZXBhY2s6IEbDtnJ2w6RudGFyIGtvbXBsZXR0YSBoZXgtb2JqZWt0LWlkLXJhZGVyIGVuZGFzdCBmcsOlbiBwYWNrLW9iamVjdHMuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI1NAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICJrdW5kZSBpbnRlIGF2c2x1dGEgcGFjay1vYmplY3RzIGbDtnIgYXR0IHBhY2thIG9tIGtvbnRyYWt0c29iamVrdCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTIKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAicGFja2EgYWxsdCBpIGV0dCBlbmRhIHBha2V0IgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NAorbXNnaWQgInNhbWUgYXMgLWEsIGFuZCB0dXJuIHVucmVhY2hhYmxlIG9iamVjdHMgbG9vc2UiCittc2dzdHIgInNhbW1hIHNvbSAtYSwgb2NoIGfDtnIgb27DpWJhcmEgb2JqZWt0IGzDtnNhIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NworbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAidGEgYm9ydCDDtnZlcmZsw7ZkaWdhIHBha2V0LCBvY2gga8O2ciBnaXQtcHJ1bmUtcGFja2VkIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5OQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJzw6RuZCAtLW5vLXJldXNlLWRlbHRhIHRpbGwgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDEKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgInPDpG5kIC0tbm8tcmV1c2Utb2JqZWN0IHRpbGwgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDMKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgImvDtnIgaW50ZSBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwNgorbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJzw6RuZCAtLWxvY2FsIHRpbGwgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDgKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgInNrcml2IGJpdGthcnRpbmRleCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTAKK21zZ2lkICJwYXNzIC0tZGVsdGEtaXNsYW5kcyB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJzw6RuZCAtLWRlbHRhLWlzbGFuZHMgdGlsbCBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMQorbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICJjaXJrYWRhdHVtIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMgorbXNnaWQgIndpdGggLUEsIGRvIG5vdCBsb29zZW4gb2JqZWN0cyBvbGRlciB0aGFuIHRoaXMiCittc2dzdHIgIm1lZCAtQSwgbMO2cyBpbnRlIHVwcCBvYmpla3Qgw6RsZHJlIMOkbiBkZXR0YSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTQKK21zZ2lkICJ3aXRoIC1hLCByZXBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAibWVkIC1hLCBwYWNrYSBvbSBvbsOlYmFyYSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE2Cittc2dpZCAic2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICJzdG9ybGVrIHDDpSBmw7Zuc3RlciBhbnbDpG50IGbDtnIgZGVsdGFrb21wcmltZXJpbmciCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE3IGJ1aWx0aW4vcmVwYWNrLmM6MzIzCittc2dpZCAiYnl0ZXMiCittc2dzdHIgImJ5dGUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE4Cittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgInNhbW1hIHNvbSBvdmFuLCBtZW4gYmVncsOkbnNhIG1pbm5lc3N0b3JsZWtlbiBpc3TDpGxsZXQgZsO2ciBwb3N0YW50YWwiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzIwCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIgorbXNnc3RyICJiZWdyw6Ruc2EgbWF4aW1hbHQgZGVsdGFkanVwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMgorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyIKK21zZ3N0ciAiYmVncsOkbnNhciBtYXhpbWFsdCBhbnRhbCB0csOlZGFyIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICJtYXhpbWFsIHN0b3JsZWsgcMOlIHZhcmplIHBha2V0ZmlsIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNgorbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICJwYWNrYSBvbSBvYmpla3QgaSBwYWtldCBtw6Rya3RhIG1lZCAua2VlcCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjgKK21zZ2lkICJkbyBub3QgcmVwYWNrIHRoaXMgcGFjayIKK21zZ3N0ciAicGFja2EgaW50ZSBvbSBkZXR0YSBwYWtldCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMzgKK21zZ2lkICJjYW5ub3QgZGVsZXRlIHBhY2tzIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICJrYW4gaW50ZSB0YSBib3J0IHBha2V0IGkgZXR0IFwicHJlY2lvdXMtb2JqZWN0c1wiLWFya2l2IgorCisjOiBidWlsdGluL3JlcGFjay5jOjM0MgorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLUEgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1rZWVwLXVucmVhY2hhYmxlIG9jaCAtQSBrYW4gaW50ZSBhbnbDpG5kYXMgc2FtdGlkaWd0IgorCisjOiBidWlsdGluL3JlcGFjay5jOjQyNQorbXNnaWQgIk5vdGhpbmcgbmV3IHRvIHBhY2suIgorbXNnc3RyICJJbmdldCBueXR0IGF0dCBwYWNrYS4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBTb21lIHBhY2tzIGluIHVzZSBoYXZlIGJlZW4gcmVuYW1lZCBieVxuIgorIldBUk5JTkc6IHByZWZpeGluZyBvbGQtIHRvIHRoZWlyIG5hbWUsIGluIG9yZGVyIHRvXG4iCisiV0FSTklORzogcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZVxuIgorIldBUk5JTkc6IGZpbGUuICBCdXQgdGhlIG9wZXJhdGlvbiBmYWlsZWQsIGFuZCB0aGVcbiIKKyJXQVJOSU5HOiBhdHRlbXB0IHRvIHJlbmFtZSB0aGVtIGJhY2sgdG8gdGhlaXJcbiIKKyJXQVJOSU5HOiBvcmlnaW5hbCBuYW1lcyBhbHNvIGZhaWxlZC5cbiIKKyJXQVJOSU5HOiBQbGVhc2UgcmVuYW1lIHRoZW0gaW4gJXMgbWFudWFsbHk6XG4iCittc2dzdHIgIiIKKyJWQVJOSU5HOiBOYW1uZW4gcMOlIG7DpWdyYSBwYWtldCBoYXIgYnl0dHMgZ2Vub20gYXR0XG4iCisiVkFSTklORzogbMOkZ2dhIHRpbGwgb2xkLSBmw7ZyZSBuYW1uZW4sIGbDtnIgYXR0IGJ5dGFcbiIKKyJWQVJOSU5HOiBkZW0gbW90IGRlbiBueWEgdmVyc2lvbmVuIGF2IGZpbGVuLiBNZW5cbiIKKyJWQVJOSU5HOiBvcGVyYXRpb25lbiBtaXNzbHlja2FkZXMsIG9jaCBmw7Zyc8O2a2V0IGF0dFxuIgorIlZBUk5JTkc6IGJ5dGEgdGlsbGJha2EgdGlsbCBkZXQgdXJzcHJ1bmdsaWdhXG4iCisiVkFSTklORzogbmFtbmV0IG1pc3NseWNrYWRlcyBvY2tzw6UuXG4iCisiVkFSTklORzogQnl0IG5hbW4gcMOlIGRlbSBpICVzIG1hbnVlbGx0OlxuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBib3J0IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPG9iamVrdD4gPGVyc8OkdHRuaW5nPiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjMKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVrdD4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8aW5jaGVja25pbmc+IFs8ZsO2csOkbGRlcj4uLi5dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI2Cittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCByZXBsYWNlIC1kIDxvYmpla3Q+Li4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNworbXNnaWQgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxtw7Zuc3Rlcj5dXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgcmVwbGFjZSBmb3JtYXQgJyVzJ1xuIgorInZhbGlkIGZvcm1hdHMgYXJlICdzaG9ydCcsICdtZWRpdW0nIGFuZCAnbG9uZyciCittc2dzdHIgIiIKKyJvZ2lsdGlndCBlcnPDpHR0bmluZ3Nmb3JtYXQgXCIlc1wiXG4iCisiZ2lsdGlnYSBmb3JtYXQgw6RyIFwic2hvcnRcIiwgXCJtZWRpdW1cIiBvY2ggXCJsb25nXCIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAiZXJzw6R0dG5pbmdzcmVmZXJlbnNlbiBcIiVzXCIgaGl0dGFkZXMgaW50ZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVwbGFjZSByZWYgJyVzJyIKK21zZ3N0ciAiVG9nIGJvcnQgZXJzw6R0dG5pbmdzcmVmZXJlbnNlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZiBuYW1lIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZXR0IGdpbHRpZ3QgcmVmZXJlbnNuYW1uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiZXJzw6R0dG5pbmdzcmVmZXJlbnNlbiBcIiVzXCIgZmlubnMgcmVkYW4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4iCisiJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlZCBvYmplY3Qgb2YgdHlwZSAnJXMnXG4iCisid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgdHlwZSAnJXMnLiIKK21zZ3N0ciAiIgorIk9iamVrdCBtw6VzdGUgdmFyYSBhdiBzYW1tYSB0eXAuXG4iCisiXCIlc1wiIHBla2FyIHDDpSBldHQgZXJzYXR0IG9iamVrdCBtZWQgdHlwZW4gXCIlc1wiXG4iCisibWVkYW4gXCIlc1wiIHBla2FyIHDDpSBldHQgZXJzw6R0dG5pbmdzb2JqZWt0IGF2IHR5cGVuIFwiJXNcIi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAia2FuIGludGUgw7ZwcG5hICVzIGbDtnIgc2tyaXZuaW5nIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNDIKK21zZ2lkICJjYXQtZmlsZSByZXBvcnRlZCBmYWlsdXJlIgorbXNnc3RyICJjYXQtZmlsZSByYXBwb3J0ZXJhZGUgbWlzc2x5Y2thbmRlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgImthbiBpbnRlIMO2cHBuYSAlcyBmw7ZyIGzDpHNuaW5nIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNzIKK21zZ2lkICJ1bmFibGUgdG8gc3Bhd24gbWt0cmVlIgorbXNnc3RyICJrYW4gaW50ZSBzdGFydGEgbWt0cmVlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNzYKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIG1rdHJlZSIKK21zZ3N0ciAia2FuIGludGUgbMOkc2EgZnLDpW4gbWt0cmVlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODUKK21zZ2lkICJta3RyZWUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAibWt0cmVlIHJhcHBvcnRlcmFkZSBtaXNzbHlja2FuZGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4OQorbXNnaWQgIm1rdHJlZSBkaWQgbm90IHJldHVybiBhbiBvYmplY3QgbmFtZSIKK21zZ3N0ciAibWt0cmVlIHJldHVybmVyYWRlIGludGUgZXR0IG9iamVrdG5hbW4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZnN0YXQgJXMiCittc2dzdHIgImthbiBpbnRlIHV0ZsO2cmEgXCJmc3RhdFwiIHDDpSAlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzAzCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG9iamVjdCB0byBkYXRhYmFzZSIKK21zZ3N0ciAia2FuIGludGUgc2tyaXZhIG9iamVrdGV0IHRpbGwgZGF0YWJhc2VuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjIgYnVpbHRpbi9yZXBsYWNlLmM6Mzc4IGJ1aWx0aW4vcmVwbGFjZS5jOjQyNAorIzogYnVpbHRpbi9yZXBsYWNlLmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICJvYmpla3RuYW1uZXQgw6RyIGludGUgZ2lsdGlndDogXCIlc1wiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBvYmplY3QgdHlwZSBmb3IgJXMiCittc2dzdHIgImthbiBpbnRlIGzDpHNhIG9iamVrdHR5cCBmw7ZyICVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNDIKK21zZ2lkICJlZGl0aW5nIG9iamVjdCBmaWxlIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHJlZGlnZXJhIG9iamVrdGZpbGVuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAibnl0dCBvYmpla3Qgw6RyIHNhbW1hIHNvbSBkZXQgZ2FtbGE6IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyBhcyBhIGNvbW1pdCIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSAlcyBzb20gaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgImZlbGFrdGlnIHNhbW1hbnNsYWduaW5nc3RhZ2cgaSBpbmNoZWNrbmluZ2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAiZmVsZm9ybWFkIHNhbW1hbnNsYWduaW5nc3RhZ2cgaSBpbmNoZWNrbmluZ2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcmlnaW5hbCBjb21taXQgJyVzJyBjb250YWlucyBtZXJnZXRhZyAnJXMnIHRoYXQgaXMgZGlzY2FyZGVkOyB1c2UgLS1lZGl0ICIKKyJpbnN0ZWFkIG9mIC0tZ3JhZnQiCittc2dzdHIgIiIKKyJkZW4gdXJzcHJ1bmdsaWdhIGluY2hlY2tuaW5nZW4gXCIlc1wiIGlubmVow6VsbGVyIHNhbW1hbnNsYWduaW5nc3RhZ2dlbiBcIiVzIgorIlwiIHNvbSBoYXIgZsO2cmthc3RhdHM7IGFudsOkbmQgLS1lZGl0IGlzdMOkbGxldCBmw7ZyIC0tZ3JhZnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgb3JpZ2luYWwgY29tbWl0ICclcycgaGFzIGEgZ3BnIHNpZ25hdHVyZSIKK21zZ3N0ciAiZGVuIHVyc3BydW5nbGlnYSBpbmNoZWNrbmluZ2VuIFwiJXNcIiBoYXIgZW4gZ3BnLXNpZ25hdHVyIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NzAKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAic2lnbmF0dXJlbiBrb21tZXIgYXR0IHRhcyBib3J0IGkgZXJzw6R0dG5pbmdzaW5jaGVja25pbmdlbiEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgZXJzw6R0dG5pbmdzaW5jaGVja25pbmcgZsO2cjogXCIlc1wiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JhZnQgZm9yICclcycgdW5uZWNlc3NhcnkiCittc2dzdHIgInltcG5pbmcgZsO2ciBcIiVzXCIgYmVow7Z2cyBpbnRlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGNvbW1pdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAibnkgaW5jaGVja25pbmcgw6RyIHNhbW1hIHNvbSBkZW4gZ2FtbGE6IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY29udmVydCB0aGUgZm9sbG93aW5nIGdyYWZ0KHMpOlxuIgorIiVzIgorbXNnc3RyICIiCisia3VuZGUgaW50ZSBrb252ZXJ0ZXJhIGbDtmxqYW5kZSB5bXBuaW5nKGFyKTpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ4Cittc2dpZCAibGlzdCByZXBsYWNlIHJlZnMiCittc2dzdHIgInZpc2EgZXJzw6R0dG5pbmdzcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ5Cittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAidGEgYm9ydCBlcnPDpHR0bmluZ3NyZWZlcmVuc2VyIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTAKK21zZ2lkICJlZGl0IGV4aXN0aW5nIG9iamVjdCIKK21zZ3N0ciAicmVkaWdlcmEgYmVmaW50bGlndCBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MQorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgIsOkbmRyYSBlbiBpbmNoZWNrbmluZ3MgZsO2csOkbGRyYXIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MgorbXNnaWQgImNvbnZlcnQgZXhpc3RpbmcgZ3JhZnQgZmlsZSIKK21zZ3N0ciAia29udmVydGVyYSBiZWZpbnRsaWcgeW1wbmluZ3NmaWwiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MworbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgImVyc8OkdHQgcmVmZXJlbnNlbiBvbSBkZW4gZmlubnMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NQorbXNnaWQgImRvIG5vdCBwcmV0dHktcHJpbnQgY29udGVudHMgZm9yIC0tZWRpdCIKK21zZ3N0ciAiYW52w6RuZCBpbnRlIHNueWdnIHZpc25pbmcgYXYgaW5uZWjDpWxsIGbDtnIgLS1lZGl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTYKK21zZ2lkICJ1c2UgdGhpcyBmb3JtYXQiCittc2dzdHIgImFudsOkbmQgZGV0dGEgZm9ybWF0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NjkKK21zZ2lkICItLWZvcm1hdCBjYW5ub3QgYmUgdXNlZCB3aGVuIG5vdCBsaXN0aW5nIgorbXNnc3RyICItLWZvcm1hdCBrYW4gaW50ZSBhbnbDpG5kYXMgdXRhbmbDtnIgbGlzdG5pbmciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU3NworbXNnaWQgIi1mIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB3cml0aW5nIGEgcmVwbGFjZW1lbnQiCittc2dzdHIgIi1mIGthbiBlbmRhc3QgYW52w6RuZGFzIHZpZCBza3Jpdm5pbmcgYXYgZXJzw6R0dG5pbmciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU4MQorbXNnaWQgIi0tcmF3IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLWVkaXQiCittc2dzdHIgIi0tcmF3IGthbiBiYXJhIGFudsOkbmRhcyBtZWQgLS1lZGl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODcKK21zZ2lkICItZCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1kIGJlaMO2dmVyIG1pbnN0IGV0dCBhcmd1bWVudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTkzCittc2dpZCAiYmFkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgImZlbCBhbnRhbCBhcmd1bWVudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk5Cittc2dpZCAiLWUgbmVlZHMgZXhhY3RseSBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1lIHRhciBleGFrdCBldHQgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYwNQorbXNnaWQgIi1nIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWcgdGFyIG1pbnN0IGV0dCBhcmd1bWVudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjExCittc2dpZCAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgdGFrZXMgbm8gYXJndW1lbnQiCittc2dzdHIgIi0tY29udmVydC1ncmFmdC1maWxlIHRhciBpbmdhIGFyZ3VtZW50IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTcKK21zZ2lkICJvbmx5IG9uZSBwYXR0ZXJuIGNhbiBiZSBnaXZlbiB3aXRoIC1sIgorbXNnc3RyICJlbmRhc3QgZXR0IG3Dtm5zdGVyIGthbiBhbmdlcyBtZWQgLWwiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTMKK21zZ2lkICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorbXNnc3RyICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjYwCittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgInJlZ2lzdHJlcmEgcmVuYSBsw7ZzbmluZ2FyIGkgaW5kZXhldCIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo3OQorbXNnaWQgIidnaXQgcmVyZXJlIGZvcmdldCcgd2l0aG91dCBwYXRocyBpcyBkZXByZWNhdGVkIgorbXNnc3RyICJcImdpdCByZXJlcmUgZm9yZ2V0XCIgdXRhbiBzw7ZrdsOkZ2FyIMOkciBmw7Zyw6VsZHJhdCIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgZm9yICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBkaWZmIGbDtnIgXCIlc1wiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGluY2hlY2tuaW5nPl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgImdpdCByZXNldCBbLXFdIFs8dHJlZS1pc2g+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCByZXNldCBbLXFdIFs8dHLDpGQtaWd0Pl0gWy0tXSA8c8O2a3bDpGdhcj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyZWUtaXNoPl0iCittc2dzdHIgIiIKKyJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyw6RkLWlndD5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0iCittc2dzdHIgImdpdCByZXNldCAtLXBhdGNoIFs8dHLDpGQtaWd0Pl0gWy0tXSBbPHPDtmt2w6RnYXI+Li4uXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWl4ZWQiCittc2dzdHIgImJsYW5kYWQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgInNvZnQiCittc2dzdHIgIm1qdWsiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImhhcmQiCittc2dzdHIgImjDpXJkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAic2FtbWFuc2xhZ25pbmciCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImtlZXAiCittc2dzdHIgImJlaMOlbGwiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4MgorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICJEdSBoYXIgaW50ZSBlbiBnaWx0aWcgSEVBRC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4NAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgSEVBRC4iCittc2dzdHIgIkt1bmRlIGludGUgaGl0dGEgdHLDpGRldCBmw7ZyIEhFQUQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIkt1bmRlIGludGUgaGl0dGEgdHLDpGRldCBmw7ZyICVzLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBRCDDpHIgbnUgcMOlICVzIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgIkthbiBpbnRlIHV0ZsO2cmEgZW4gJXMgw6V0ZXJzdMOkbGxuaW5nIG1pdHQgaSBlbiBzYW1tYW5zbGFnbmluZy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTQgYnVpbHRpbi9zdGFzaC5jOjUyMCBidWlsdGluL3N0YXNoLmM6NTk1CisjOiBidWlsdGluL3N0YXNoLmM6NjE5Cittc2dpZCAiYmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycyIKK21zZ3N0ciAidmFyIHR5c3QsIHJhcHBvcnRlcmEgZW5kYXN0IGZlbCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NgorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICLDpXRlcnN0w6RsbCBIRUFEIG9jaCBpbmRleCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NworbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAiw6V0ZXJzdMOkbGwgZW5kYXN0IEhFQUQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTkgYnVpbHRpbi9yZXNldC5jOjMwMQorbXNnaWQgInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiCittc2dzdHIgIsOldGVyc3TDpGxsIEhFQUQsIGluZGV4IG9jaCBhcmJldHNrYXRhbG9nIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzAzCittc2dpZCAicmVzZXQgSEVBRCBidXQga2VlcCBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICLDpXRlcnN0w6RsbCBIRUFEIG1lbiBiZWjDpWxsIGxva2FsYSDDpG5kcmluZ2FyIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA5Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCByZW1vdmVkIHBhdGhzIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgInJlZ2lzdHJlcmEgZW5kYXN0IGF0dCBib3J0dGFnbmEgc8O2a3bDpGdhciBrb21tZXIgbMOkZ2dhcyB0aWxsIHNlbmFyZSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmV2aXNpb24uIgorbXNnc3RyICJLdW5kZSBpbnRlIHNsw6UgdXBwIFwiJXNcIiBzb20gZW4gZ2lsdGlnIHJldmlzaW9uLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIkt1bmRlIGludGUgc2zDpSB1cHAgXCIlc1wiIHNvbSBldHQgZ2lsdGlndCB0csOkZC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjAKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2ggw6RyIGlua29tcGF0aWJlbCBtZWQgLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tbWl4ZWQgcmVrb21tZW5kZXJhcyBpbnRlIG1lZCBzw7ZrdsOkZ2FyOyBhbnbDpG5kIFwiZ2l0IHJlc2V0IC0tIDxzw7ZrdsOkZ2FyPlwiLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIkthbiBpbnRlIGfDtnJhICVzIMOldGVyc3TDpGxsbmluZyBtZWQgc8O2a3bDpGdhci4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzIMOldGVyc3TDpGxsbmluZyB0aWxsw6V0cyBpbnRlIGkgZXR0IG5ha2V0IGFya2l2IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzkxCittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgIi1OIGthbiBlbmRhc3QgYW52w6RuZGFzIG1lZCAtLW1peGVkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIk9rw7ZhZGUgw6RuZHJpbmdhciBlZnRlciDDpXRlcnN0w6RsbG5pbmc6IgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldC4gIFlvdSBjYW5cbiIKKyJ1c2UgJy0tcXVpZXQnIHRvIGF2b2lkIHRoaXMuICBTZXQgdGhlIGNvbmZpZyBzZXR0aW5nIHJlc2V0LnF1aWV0IHRvIHRydWVcbiIKKyJ0byBtYWtlIHRoaXMgdGhlIGRlZmF1bHQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEZXQgdG9nICUuMmYgc2VrdW5kZXIgYXR0IHLDpGtuYSB1cHAgb2vDtmFkZSDDpG5kcmluZ2FyIGVmdGVyIMOldGVyc3TDpGxsbmluZy5cbiIKKyJEdSBrYW4gYW52w6RuZGEgXCItLXF1aWV0XCIgZsO2ciBhdHQgZsO2cmhpbmRyYSBkZXR0YS4gU3TDpGxsICIKKyJrb25maWd1cmF0aW9uc3ZhcmlhYmVsblxuIgorInJlc2V0LnF1aWV0IHRpbGwgdHJ1ZSBmw7ZyIGF0dCBnw7ZyYSBkZXR0YSB0aWxsIGbDtnJ2YWwuXG4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIkt1bmRlIGludGUgw6V0ZXJzdMOkbGxhIGluZGV4ZmlsZW4gdGlsbCB2ZXJzaW9uZW4gXCIlc1wiLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyOQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIkt1bmRlIGludGUgc2tyaXZhIG55IGluZGV4ZmlsLiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ5OQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGFuZCAtLW1pc3NpbmciCittc2dzdHIgImthbiBpbnRlIGtvbWJpbmVyYSAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBvY2ggLS1taXNzaW5nIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NTYwCittc2dpZCAib2JqZWN0IGZpbHRlcmluZyByZXF1aXJlcyAtLW9iamVjdHMiCittc2dzdHIgIm9iamVrdGZpbHRyZXJpbmcga3LDpHZlciAtLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo2MTAKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgInJldi1saXN0IHN0w7ZkZXIgaW50ZSB2aXNuaW5nIGF2IGFudGVja25pbmdhciIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjYxNQorbXNnaWQgIm1hcmtlZCBjb3VudGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW9iamVjdHMiCittc2dzdHIgIm1hcmtlcmFkIHLDpGtuaW5nIMOkciBpbmtvbXBhdGliZWx0IG1lZCAtLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDA4Cittc2dpZCAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dIgorbXNnc3RyICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmd1bWVudD4uLi5dIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxMworbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAiYmVow6VsbCBcIi0tXCIgc8OkbnQgc29tIGFyZ3VtZW50IgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxNQorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAic2x1dGEgdG9sa2EgZWZ0ZXIgZsO2cnN0YSBhcmd1bWVudCBzb20gaW50ZSDDpHIgZmxhZ2dhIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxOAorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgInV0ZGF0YSBmYXN0IGkgbMOlbmcgZm9ybSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1NTEKK21zZ2lkICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxmbGFnZ29yPl0gLS0gWzxhcmd1bWVudD4uLi5dXG4iCisiICAgICBlbGxlcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJndW1lbnQ+Li4uXVxuIgorIiAgICAgZWxsZXI6IGdpdCByZXYtcGFyc2UgWzxmbGFnZ29yPl0gWzxhcmd1bWVudD4uLi5dXG4iCisiXG4iCisiS8O2ciBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGbDtnIgbWVyIGluZm9ybWF0aW9uIG9tIGRlbiBmw7Zyc3RhICIKKyJ2YXJpYW50ZW4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0Cittc2dpZCAiZ2l0IHJldmVydCBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCByZXZlcnQgWzxmbGFnZ29yPl0gPGluY2hlY2tuaW5nLWlndD4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjUKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHJldmVydCA8dW5kZXJrb21tYW5kbz4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzAKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzxmbGFnZ29yPl0gPGluY2hlY2tuaW5nLWlndD4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzEKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPHVuZGVya29tbWFuZG8+IgorCisjOiBidWlsdGluL3JldmVydC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8iCittc2dzdHIgImZsYWdnYW4gXCIlc1wiIGFudGFyIGV0dCBudW1lcmlza3QgdsOkcmRlIHN0w7ZycmUgw6RuIG5vbGwiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzOiAlcyBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkICVzIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMgorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImF2c2x1dGEgcmV2ZXJ0LSBlbGxlciBjaGVycnktcGljay1zZWt2ZW5zIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMworbXNnaWQgInJlc3VtZSByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIsOldGVydXBwdGEgcmV2ZXJ0LSBlbGxlciBjaGVycnktcGljay1zZWt2ZW5zIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImF2YnJ5dCByZXZlcnQtIGVsbGVyIGNoZXJyeS1waWNrLXNla3ZlbnMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA1Cittc2dpZCAic2tpcCBjdXJyZW50IGNvbW1pdCBhbmQgY29udGludWUiCittc2dzdHIgImhvcHBhIMO2dmVyIG51dmFyYW5kZSBpbmNoZWNrbmluZyBvY2ggZm9ydHPDpHR0IgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICJjaGVja2EgaW50ZSBpbiBhdXRvbWF0aXNrdCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDgKK21zZ2lkICJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAicmVkaWdlcmEgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTExCittc2dpZCAicGFyZW50LW51bWJlciIKK21zZ3N0ciAibnVtbWVyLXDDpS1mw7Zyw6RsZGVyIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMgorbXNnaWQgInNlbGVjdCBtYWlubGluZSBwYXJlbnQiCittc2dzdHIgInbDpGxqIGbDtnLDpGxkZXIgZsO2ciBodXZ1ZGxpbmplIgorCisjOiBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJzYW1tYW5zbGFnbmluZ3NzdHJhdGVnaSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTYKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJhbHRlcm5hdGl2IGbDtnIgc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2kiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI1Cittc2dpZCAiYXBwZW5kIGNvbW1pdCBuYW1lIgorbXNnc3RyICJsw6RnZyB0aWxsIGluY2hlY2tuaW5nc25hbW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI3Cittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgImJlaMOlbGwgaW5jaGVja25pbmdhciBzb20gYsO2cmphciBzb20gdG9tbWEiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI5Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgImJlaMOlbGwgcmVkdW5kYW50YSwgdG9tbWEgaW5jaGVja25pbmdhciIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzIKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJcInJldmVydFwiIG1pc3NseWNrYWRlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNDUKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgIlwiY2hlcnJ5LXBpY2tcIiBtaXNzbHlja2FkZXMiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOQorbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJtIFs8ZmxhZ2dvcj5dIFstLV0gPGZpbD4uLi4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyMDcKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorImbDtmxqYW5kZSBmaWwgaGFyIGvDtmF0IGlubmVow6VsbCBzb20gc2tpbGplciBzaWcgYsOlZGUgZnLDpW4gZmlsZW4gb2NoIEhFQUQ6IgorbXNnc3RyWzFdICIiCisiZsO2bGphbmRlIGZpbGVyIGhhciBrw7ZhdCBpbm5laMOlbGwgc29tIHNraWxqZXIgc2lnIGLDpWRlIGZyw6VuIGZpbGVuIG9jaCBIRUFEOiIKKworIzogYnVpbHRpbi9ybS5jOjIxMgorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKGFudsOkbmQgLWYgZsO2ciBhdHQgdHZpbmdhIGJvcnR0YWduaW5nKSIKKworIzogYnVpbHRpbi9ybS5jOjIxNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gImbDtmxqYW5kZSBmaWwgaGFyIMOkbmRyaW5nYXIga8O2YWRlIGkgaW5kZXhldDoiCittc2dzdHJbMV0gImbDtmxqYW5kZSBmaWxlciBoYXIgw6RuZHJpbmdhciBrw7ZhZGUgaSBpbmRleGV0OiIKKworIzogYnVpbHRpbi9ybS5jOjIyMCBidWlsdGluL3JtLmM6MjI5Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIoYW52w6RuZCAtLWNhY2hlZCBmw7ZyIGF0dCBiZWjDpWxsYSBmaWxlbiBlbGxlciAtZiBmw7ZyIGF0dCB0dmluZ2EgYm9ydHRhZ25pbmcpIgorCisjOiBidWlsdGluL3JtLmM6MjI2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICJmw7ZsamFuZGUgZmlsIGhhciBsb2thbGEgw6RuZHJpbmdhcjoiCittc2dzdHJbMV0gImbDtmxqYW5kZSBmaWxlciBoYXIgbG9rYWxhIMOkbmRyaW5nYXI6IgorCisjOiBidWlsdGluL3JtLmM6MjQzCittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAibGlzdGEgaW50ZSBib3J0dGFnbmEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDQKK21zZ2lkICJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAidGEgYmFyYSBib3J0IGZyw6VuIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDUKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAiw7Z2ZXJzdHlyIMOgam91ci10ZXN0ZXQiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDYKK21zZ2lkICJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIKK21zZ3N0ciAidGlsbMOldCByZWt1cnNpdiBib3J0dGFnbmluZyIKKworIzogYnVpbHRpbi9ybS5jOjI0OAorbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICJhdnNsdXRhIG1lZCBub2xsc3RhdHVzIMOkdmVuIG9tIGluZ2V0IHRyw6RmZmFkZXMiCisKKyM6IGJ1aWx0aW4vcm0uYzoyODIKK21zZ2lkICJObyBwYXRoc3BlYyB3YXMgZ2l2ZW4uIFdoaWNoIGZpbGVzIHNob3VsZCBJIHJlbW92ZT8iCittc2dzdHIgIkluZ2VuIHPDtmt2w6Rnc2FuZ2l2ZWxzZSBnYXZzLiBWaWxrYSBmaWxlciBza2EgamFnIHRhIGJvcnQ/IgorCisjOiBidWlsdGluL3JtLmM6MzA1Cittc2dpZCAicGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJsw7ZhIGRpbmEgw6RuZHJpbmdhciBpIC5naXRtb2R1bGVzIGVsbGVyIGFudsOkbmQgXCJzdGFzaFwiIGbDtnIgYXR0IGZvcnRzw6R0dGEiCisKKyM6IGJ1aWx0aW4vcm0uYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAidGFyIGludGUgYm9ydCBcIiVzXCIgcmVrdXJzaXZ0IHV0YW4gLXIiCisKKyM6IGJ1aWx0aW4vcm0uYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJnaXQgcm06IGthbiBpbnRlIHRhIGJvcnQgJXMiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MjAKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPHbDpHJkPjpdPGthdGFsb2c+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBvY2ggZXhwbGljaXQgYW5naXZlbiA8cmVmPiDDpHIgw7Ztc2VzaWRpZ3QgdXRlc2x1dGFuZGUuIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MworbXNnaWQgInJlbW90ZSBuYW1lIgorbXNnc3RyICJmasOkcnJuYW1uIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NworbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICJhbnbDpG5kIHRpbGxzdMOlbmRzbMO2c3QgUlBDLXByb3Rva29sbCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzgKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibMOkcyByZWZlcmVuc2VyIGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OQorbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgInZpc2Egc3RhdHVzIGZyw6VuIGZqw6Rycmhqw6RscGFyZSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE0Cittc2dpZCAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc2hvcnRsb2cgWzxmbGFnZ29yPl0gWzx2ZXJzaW9uc2ludGVydmFsbD5dIFtbLS1dIDxzw7ZrdsOkZz4uLi5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTUKK21zZ2lkICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY0Cittc2dpZCAiR3JvdXAgYnkgY29tbWl0dGVyIHJhdGhlciB0aGFuIGF1dGhvciIKK21zZ3N0ciAiR3J1cHBlcmEgZWZ0ZXIgaW5jaGVja2FyZSBpc3TDpGxsZXQgZsO2ciBmw7ZyZmF0dGFyZSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NgorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAic29ydGVyYSB1dGRhdGEgZW5saWd0IGFudGFsIGluY2hlY2tuaW5nYXIgcGVyIGbDtnJmYXR0YXJlIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY4Cittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgIlVuZGVydHJ5Y2sgYmVza3Jpdm5pbmdhciwgdmlzYSBiYXJhIGFudGFsIGluY2hlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzAKK21zZ2lkICJTaG93IHRoZSBlbWFpbCBhZGRyZXNzIG9mIGVhY2ggYXV0aG9yIgorbXNnc3RyICJWaXNhIGUtcG9zdGFkcmVzcyBmw7ZyIHZhcmplIGbDtnJmYXR0YXJlIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcxCittc2dpZCAiPHc+Wyw8aTE+Wyw8aTI+XV0iCittc2dzdHIgIjx3PlssPGkxPlssPGkyPl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcyCittc2dpZCAiTGluZXdyYXAgb3V0cHV0IgorbXNnc3RyICJSYWRicnl0IHV0ZGF0YSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjMwMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBnaXZlbiBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgImbDtnIgbcOlbmdhIGZsYWdnb3IgZ2l2bmEgdXRhbmbDtnIgYXJraXZldCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjEzCittc2dpZCAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08bsOkcj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPG3Dtm5zdGVyPikuLi5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTcKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhcz5dXSBbLS1saXN0XSBbPHJlZj5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWYiCittc2dpZF9wbHVyYWwgImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWZzIgorbXNnc3RyWzBdICJpZ25vcmVyYXIgJXM7IGthbiBpbnRlIGhhbnRlcmEgbWVyIMOkbiAlZCByZWZlcmVucyIKK21zZ3N0clsxXSAiaWdub3JlcmFyICVzOyBrYW4gaW50ZSBoYW50ZXJhIG1lciDDpG4gJWQgcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBtYXRjaGluZyByZWZzIHdpdGggJXMiCittc2dzdHIgImluZ2EgbW90c3ZhcmFuZGUgcmVmZXJlbnNlciBtZWQgJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDUKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgInZpc2EgZmrDpHJyc3DDpXJhbmRlIG9jaCBsb2thbGEgZ3JlbmFyIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ3Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgInZpc2EgZmrDpHJyc3DDpXJhbmRlIGdyZW5hciIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0OQorbXNnaWQgImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giCittc2dzdHIgImbDpHJnYSBcIiohKy1cIiBlbmxpZ3QgZ3JlbmVuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUxCittc2dpZCAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiCittc2dzdHIgInZpc2EgPG4+IHl0dGVybGlnYXJlIGluY2hlY2tuaW5nYXIgZWZ0ZXIgZ2VtZW5zYW0gYW5mYWRlciIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MworbXNnaWQgInN5bm9ueW0gdG8gbW9yZT0tMSIKK21zZ3N0ciAic3lub255bSB0aWxsIG1vcmU9LTEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTQKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAidW5kZXJ0eWNrIG5hbW5zdHLDpG5nYXIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTYKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiaW5rbHVkZXJhIGFrdHVlbGwgZ3JlbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1OAorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAibmFtbmdlIGluY2hlY2tuaW5nYXIgbWVkIGRlcmFzIG9iamVrdG5hbW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjAKK21zZ2lkICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIgorbXNnc3RyICJ2aXNhIG3DtmpsaWdhIHNhbW1hbnNsYWduaW5nc2Jhc2VyIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYyCittc2dpZCAic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIKK21zZ3N0ciAidmlzYSByZWZlcmVuc2VyIHNvbSBpbnRlIGthbiBuw6VzIGZyw6VuIG7DpWdvbiBhbm5hbiByZWZlcmVucyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NAorbXNnaWQgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIKK21zZ3N0ciAidmlzYSBpbmNoZWNrbmluZ2FyIGkgdG9wb2xvZ2lzayBvcmRuaW5nIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY3Cittc2dpZCAic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giCittc2dzdHIgInZpc2EgZW5kYXN0IGluY2hlY2tuaW5nYXIgaW50ZSBww6UgZGVuIGbDtnJzdGEgZ3JlbmVuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY5Cittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICJ2aXNhIHNhbW1hbnNsYWduaW5nYXIgc29tIGVuZGFzdCBrYW4gbsOlcyBmcsOlbiBlbiBzcGV0cyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MQorbXNnaWQgInRvcG9sb2dpY2FsbHkgc29ydCwgbWFpbnRhaW5pbmcgZGF0ZSBvcmRlciB3aGVyZSBwb3NzaWJsZSIKK21zZ3N0ciAic29ydGVyYSB0b3BvbG9naXNrdCwgYmVow6VsbCBkYXR1bW9yZG5pbmcgbsOkciBtw7ZqbGlndCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw8YmFzPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzUKK21zZ2lkICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgYmFzZSIKK21zZ3N0ciAidmlzYSA8bj4gbnlhc3RlIHJlZmxvZ2dwb3N0ZXIgbWVkIGLDtnJqYW4gcMOlIGJhcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjcxMQorbXNnaWQgIiIKKyItLXJlZmxvZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50IG9yIC0tbWVyZ2UtYmFzZSIKK21zZ3N0ciAiIgorIi0tcmVmbG9nIMOkciBpbmtvbXBhdGliZWwgbWVkIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQgZWxsZXIgLS1tZXJnZS0iCisiYmFzZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczNQorbXNnaWQgIm5vIGJyYW5jaGVzIGdpdmVuLCBhbmQgSEVBRCBpcyBub3QgdmFsaWQiCittc2dzdHIgImluZ2EgZ3JlbmFyIGFuZ2F2cywgb2NoIEhFQUQgw6RyIGludGUgZ2lsdGlndCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczOAorbXNnaWQgIi0tcmVmbG9nIG9wdGlvbiBuZWVkcyBvbmUgYnJhbmNoIG5hbWUiCittc2dzdHIgIi0tcmVmbG9nIGJlaMO2dmVyIGV0dCBuYW1uIHDDpSBlbiBncmVuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgJWQgZW50cnkgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ2lkX3BsdXJhbCAib25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dzdHJbMF0gIm1heGltYWx0ICVkIHBvc3RlciBrYW4gdmlzYXMgc2FtdGlkaWd0LiIKK21zZ3N0clsxXSAibWF4aW1hbHQgJWQgcG9zdGVyIGthbiB2aXNhcyBzYW10aWRpZ3QuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmICVzIgorbXNnc3RyICJpbmdlbiBzw6VkYW4gcmVmZXJlbnMgJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2LiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2cy4iCittc2dzdHJbMF0gImthbiBpbnRlIGhhbnRlcmEgbWVyIMOkbiAlZCByZXZpc2lvbi4iCittc2dzdHJbMV0gImthbiBpbnRlIGhhbnRlcmEgbWVyIMOkbiAlZCByZXZpc2lvbmVyLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIlwiJXNcIiDDpHIgaW50ZSBlbiBnaWx0aWcgcmVmZXJlbnMuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIGNvbW1pdCAlcyAoJXMpIgorbXNnc3RyICJoaXR0YXIgaW50ZSBpbmNoZWNrbmluZyAlcyAoJXMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTIKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxtw7Zuc3Rlcj4uLi5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTMKK21zZ2lkICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dIgorbXNnc3RyICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08bcO2bnN0ZXI+XSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MgorbXNnaWQgIm9ubHkgc2hvdyB0YWdzIChjYW4gYmUgY29tYmluZWQgd2l0aCBoZWFkcykiCittc2dzdHIgInZpc2EgZW5kYXN0IHRhZ2dhciAoa2FuIGtvbWJpbmVyYXMgbWVkIGh1dnVkZW4pIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYzCittc2dpZCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIKK21zZ3N0ciAidmlzYSBlbmRhc3QgaHV2dWRlbiAoa2FuIGtvbWJpbmVyYXMgbWVkIHRhZ2dhcikiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjQKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICJzdHJpa3RhcmUgcmVmZXJlbnNrb250cm9sbCwga3LDpHZlciBleGFrdCByZWZlcmVuc3PDtmt2w6RnIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY3IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjkKK21zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSwgZXZlbiBpZiBpdCB3b3VsZCBiZSBmaWx0ZXJlZCBvdXQiCittc2dzdHIgInZpc2EgSEVBRC1yZWZyZW5zLCDDpHZlbiBuw6RyIGRlbiBza3VsbGUgZmlsdHJlcmFzIHV0IgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcxCittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMiCittc2dzdHIgImF2cmVmZXJlcmEgdGFnZ2FyIHRpbGwgb2JqZWt0LWlkIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTczCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICJ2aXNhIFNIQTEtaGFzaCBlbmRhc3QgbWVkIDxuPiBzaWZmcm9yIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc3Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgInZpc2EgaW50ZSByZXN1bHRhdCBww6Ugc3RhbmRhcmQgdXQgKGFudsOkbmRiYXJ0IG1lZCAtLXZlcmlmeSkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJ2aXNhIHJlZmVyZW5zZXIgZnLDpW4gc3RhbmRhcmQgaW4gc29tIGludGUgZmlubnMgaSBsb2thbHQgYXJraXYiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjEKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGFkZHxkaXNhYmxlKSA8b3B0aW9ucz4iCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgKGluaXR8bGlzdHxzZXR8YWRkfGRpc2FibGUpIDxmbGFnZ29yPiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo2NAorbXNnaWQgInRoaXMgd29ya3RyZWUgaXMgbm90IHNwYXJzZSAoc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IG5vdCBleGlzdCkiCittc2dzdHIgIiIKKyJhcmJldHNrYXRhbG9nZW4gw6RyIGludGUgZ2xlc3QgKHNwYXJzZS1jaGVja291dC1maWxlbiBrYW5za2UgaW50ZSBmaW5ucykiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjI1Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yIHNwYXJzZS1jaGVja291dCBmaWxlIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2thcGEga2F0YWxvZyBmw7ZyIFwic3BhcnNlLWNoZWNrb3V0XCItZmlsZW4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjY2Cittc2dpZCAiZmFpbGVkIHRvIHNldCBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIHNldHRpbmciCittc2dzdHIgIm1pc3NseWNrYWRlcyDDpG5kcmEgaW5zdMOkbGxuaW5nZW4gZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyODMKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCBbLS1jb25lXSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozMDIKK21zZ2lkICJpbml0aWFsaXplIHRoZSBzcGFyc2UtY2hlY2tvdXQgaW4gY29uZSBtb2RlIgorbXNnc3RyICJpbml0aWVyYSBzcGFyc2UtY2hlY2tvdXQgaSBrb25sw6RnZSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozMDgKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiaW5pdGllcmEgc3BhcnNlLWNoZWNrb3V0IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgw7ZwcG5hIFwiJXNcIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG5vcm1hbGl6ZSBwYXRoICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIG5vcm1hbGlzZXJhIHPDtmt2w6RnZW4gXCIlc1wiIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjQxMAorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgKHNldHxhZGQpICgtLXN0ZGluIHwgPHBhdHRlcm5zPikiCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgKHNldHxhZGQpICgtLXN0ZGluIHwgPG3Dtm5zdGVyPikiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDM1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnF1b3RlIEMtc3R5bGUgc3RyaW5nICclcyciCittc2dzdHIgImthbiBpbnRlIHRhIGJvcnQgY2l0ZXJpbmcgYXYgQy1zdHLDpG5nIFwiJXNcIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0ODkgYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1MTMKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBleGlzdGluZyBzcGFyc2UtY2hlY2tvdXQgcGF0dGVybnMiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgaW4gZXhpc3RlcmFuZGUgbcO2bnN0ZXIgZsO2ciBnbGVzIHV0Y2hlY2tuaW5nIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjU1OAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBzdGFuZGFyZCBpbiIKK21zZ3N0ciAibMOkcyBtw7Zuc3RlciBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1NjQKK21zZ2lkICJzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICJzdMOkbGwgaW4gZmlsdGVyIGbDtnIgZ2xlcyB1dGNoZWNrbmluZyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1ODEKK21zZ2lkICJkaXNhYmxlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiaW5ha3RpdmVyYSBnbGVzIHV0Y2hlY2tuaW5nIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjU5MworbXNnaWQgImVycm9yIHdoaWxlIHJlZnJlc2hpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImZlbCB2aWQgdXBwZGF0ZXJpbmcgYXYgYXJiZXRza2F0YWxvZyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyIGJ1aWx0aW4vc3Rhc2guYzozOAorbXNnaWQgImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgc3Rhc2ggbGlzdCBbPGZsYWdnb3I+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIzIGJ1aWx0aW4vc3Rhc2guYzo0MworbXNnaWQgImdpdCBzdGFzaCBzaG93IFs8b3B0aW9ucz5dIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHNob3cgWzxmbGFnZ29yPl0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjQgYnVpbHRpbi9zdGFzaC5jOjQ4Cittc2dpZCAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI1Cittc2dpZCAiZ2l0IHN0YXNoICggcG9wIHwgYXBwbHkgKSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoICggcG9wIHwgYXBwbHkgKSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI2IGJ1aWx0aW4vc3Rhc2guYzo2MworbXNnaWQgImdpdCBzdGFzaCBicmFuY2ggPGJyYW5jaG5hbWU+IFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGJyYW5jaCA8Z3Jlbm5hbW4+IFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI3IGJ1aWx0aW4vc3Rhc2guYzo2OAorbXNnaWQgImdpdCBzdGFzaCBjbGVhciIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjgKK21zZ2lkICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl1cbiIKKyIgICAgICAgICAgWy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPiBbLS1wYXRoc3BlYy1maWxlLW51bF1dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVkZGVsYW5kZT5dXG4iCisiICAgICAgICAgIFstLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsPiBbLS1wYXRoc3BlYy1maWxlLW51bF1dXG4iCisiICAgICAgICAgIFstLV0gWzxzw7ZrdsOkZz4uLi5dXSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjMyIGJ1aWx0aW4vc3Rhc2guYzo4NQorbXNnaWQgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZXNzYWdlPl0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZWRkZWxhbmRlPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MworbXNnaWQgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1OAorbXNnaWQgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NzMKK21zZ2lkICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dIFstcXwtLXF1aWV0XSA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IHN0YXNoIHN0b3JlIFstbXwtLW1lc3NhZ2UgPG1lZGRlbGFuZGU+XSBbLXF8LS1xdWlldF0gPGluY2hlY2tuaW5nPiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjc4Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVkZGVsYW5kZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxzw7ZrdsOkZz4uLi5dXSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZW4gXCJzdGFzaFwiLWxpa25hbmRlIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6JXMiCittc2dzdHIgIkbDtnIgbcOlbmdhIHJldmlzaW9uZXIgYW5naXZuYTolcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU0OQorbXNnaWQgIk5vIHN0YXNoIGVudHJpZXMgZm91bmQuIgorbXNnc3RyICJJbmdhIFwic3Rhc2hcIi1wb3N0ZXIgaGl0dGFkZXMuIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJXMgw6RyIGludGUgZW4gZ2lsdGlndCByZWZlcmVucyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyNSBnaXQtbGVnYWN5LXN0YXNoLnNoOjc1Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIgorbXNnc3RyICJcImdpdCBzdGFzaCBjbGVhclwiIG1lZCBwYXJhbWV0cmFyIGhhciBpbnRlIGltcGxlbWVudGVyYXRzIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDA0Cittc2dpZCAiY2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJrYW4gaW50ZSB0aWxsw6RtcGEgZW4gXCJzdGFzaFwiIG1pdHQgaSBlbiBzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgZGlmZiAlc14hLiIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBkaWZmICVzXiEuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDIyCittc2dpZCAiY29uZmxpY3RzIGluIGluZGV4LlRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICJrb25mbGlrdGVyIGkgaW5kZXhldC4gVGVzdGEgdXRhbiAtLWluZGV4LiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyOAorbXNnaWQgImNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgImt1bmRlIGludGUgc3BhcmEgaW5kZXh0csOkZCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQzNworbXNnaWQgImNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIgorbXNnc3RyICJrdW5kZSBpbnRlIMOldGVyc3TDpGxsYSBvc3DDpXJhZGUgZmlsZXIgZnLDpW4gc3Rhc2gtcG9zdCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXMiCittc2dzdHIgIlNsw6VyIGlob3AgJXMgbWVkICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDYxIGdpdC1sZWdhY3ktc3Rhc2guc2g6NjgxCittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICJJbmRleGV0IGhhciBpbnRlIHRhZ2l0cyB1cHAgdXIgXCJzdGFzaFwiOmVuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTIyIGJ1aWx0aW4vc3Rhc2guYzo2MjEKK21zZ2lkICJhdHRlbXB0IHRvIHJlY3JlYXRlIHRoZSBpbmRleCIKK21zZ3N0ciAiZsO2cnPDtmsgw6V0ZXJza2FwYSBpbmRleGV0IgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJXMgKCVzKSIKK21zZ3N0ciAiS2FzdGFkZSAlcyAoJXMpIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJXM6IEt1bmRlIGludGUga2FzdGEgXCJzdGFzaFwiLXBvc3QiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIlwiJXNcIiDDpHIgaW50ZSBlbiBcInN0YXNoXCItcmVmZXJlbnMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MzMgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2OTUKK21zZ2lkICJUaGUgc3Rhc2ggZW50cnkgaXMga2VwdCBpbiBjYXNlIHlvdSBuZWVkIGl0IGFnYWluLiIKK21zZ3N0ciAiU3Rhc2gtcG9zdGVuIGJlaMOlbGxzIGlmYWxsIGR1IGJlaMO2dmVyIGRlbiBpZ2VuLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjY1NiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcxMworbXNnaWQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiSW5nZXQgZ3Jlbm5hbW4gYW5nYXZzIgorCisjOiBidWlsdGluL3N0YXNoLmM6Nzk2IGJ1aWx0aW4vc3Rhc2guYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAlcyB3aXRoICVzIgorbXNnc3RyICJLYW4gaW50ZSB1cHBkYXRlcmEgJXMgbWVkICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODE0IGJ1aWx0aW4vc3Rhc2guYzoxNDc4IGJ1aWx0aW4vc3Rhc2guYzoxNTQzCittc2dpZCAic3Rhc2ggbWVzc2FnZSIKK21zZ3N0ciAiXCJzdGFzaFwiLW1lZGRlbGFuZGUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo4MjQKK21zZ2lkICJcImdpdCBzdGFzaCBzdG9yZVwiIHJlcXVpcmVzIG9uZSA8Y29tbWl0PiBhcmd1bWVudCIKK21zZ3N0ciAiXCJnaXQgc3Rhc2ggc3RvcmVcIiBrcsOkdmVyIGV0dCA8aW5jaGVja25pbmc+LWFyZ3VtZW50IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTA0OSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxOAorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgIkluZ2Egw6RuZHJpbmdhciB2YWxkYSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNDkgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNTAKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgdGhlIGluaXRpYWwgY29tbWl0IHlldCIKK21zZ3N0ciAiRHUgaGFyIGludGUgZGVuIGbDtnJzdGEgaW5jaGVja25pbmdlbiDDpG5udSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNzYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNjUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAiS2FuIGludGUgc3BhcmEgYWt0dWVsbHQgdGlsbHN0w6VuZCBmw7ZyIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTg1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MTgwCittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiS2FuIGludGUgc3BhcmEgb3Nww6VyYWRlIGZpbGVyIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE5NiBidWlsdGluL3N0YXNoLmM6MTIwNSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIwMQorIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTQKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAiS2FuIGludGUgc3BhcmEgYWt0dWVsbHQgdGlsbHN0w6VuZCBmw7ZyIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyMzMgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMzQKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAiS2FuIGludGUgcmVnaXN0cmVyYSB0aWxsc3TDpW5kIGbDtnIgYXJiZXRza2F0YWxvZyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyODIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMzgKK21zZ2lkICJDYW4ndCB1c2UgLS1wYXRjaCBhbmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICJLYW4gaW50ZSBhbnbDpG5kYSAtLXBhdGNoIG9jaCAtLWluY2x1ZGUtdW50cmFja2VkIGVsbGVyIC0tYWxsIHNhbXRpZGlndCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOTgKK21zZ2lkICJEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/IgorbXNnc3RyICJHbMO2bWRlIGR1IGFudsOkbmRhIFwiZ2l0IGFkZFwiPyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMTMgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNDYKK21zZ2lkICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiCittc2dzdHIgIkluZ2EgbG9rYWxhIMOkbmRyaW5nYXIgYXR0IHNwYXJhIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMyMCBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1MQorbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICJLYW4gaW50ZSBpbml0aWVyYSBcInN0YXNoXCIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzM1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICJLYW4gaW50ZSBzcGFyYSBha3R1ZWxsIHN0YXR1cyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICVzIgorbXNnc3RyICJTcGFyYWRlIGFyYmV0c2thdGFsb2dlbiBvY2ggaW5kZXhzdGF0dXMgJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDMwIGdpdC1sZWdhY3ktc3Rhc2guc2g6Mzg1Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJLYW4gaW50ZSB0YSBib3J0IMOkbmRyaW5nYXIgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDY5IGJ1aWx0aW4vc3Rhc2guYzoxNTM0Cittc2dpZCAia2VlcCBpbmRleCIKK21zZ3N0ciAiYmVow6VsbCBpbmRleGV0IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3MSBidWlsdGluL3N0YXNoLmM6MTUzNgorbXNnaWQgInN0YXNoIGluIHBhdGNoIG1vZGUiCittc2dzdHIgIlwic3Rhc2hcIiBpIFwicGF0Y2hcIi1sw6RnZSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NzIgYnVpbHRpbi9zdGFzaC5jOjE1MzcKK21zZ2lkICJxdWlldCBtb2RlIgorbXNnc3RyICJ0eXN0IGzDpGdlIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3NCBidWlsdGluL3N0YXNoLmM6MTUzOQorbXNnaWQgImluY2x1ZGUgdW50cmFja2VkIGZpbGVzIGluIHN0YXNoIgorbXNnc3RyICJ0YSBtZWQgb3Nww6VyYWRlIGZpbGVyIGkgXCJzdGFzaFwiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3NiBidWlsdGluL3N0YXNoLmM6MTU0MQorbXNnaWQgImluY2x1ZGUgaWdub3JlIGZpbGVzIgorbXNnc3RyICJ0YSBtZWQgaWdub3JlcmFkZSBmaWxlciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4ZWMgJXMiCittc2dzdHIgImt1bmRlIGludGUga8O2cmEgJXMiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM3Cittc2dpZCAic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIgorbXNnc3RyICJob3BwYSDDtnZlciBvY2ggdGEgYm9ydCBhbGxhIHJhZGVyIHNvbSBpbmxlZHMgbWVkIGtvbW1lbnRhcnN0ZWNrZW4iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjQwCittc2dpZCAicHJlcGVuZCBjb21tZW50IGNoYXJhY3RlciBhbmQgc3BhY2UgdG8gZWFjaCBsaW5lIgorbXNnc3RyICJsw6RnZyBpbiBrb21tZW50YXJzdGVja2VuIG9jaCBibGFua3N0ZWcgZsO2cnN0IHDDpSB2YXJqZSByYWQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiCittc2dzdHIgIkbDtnJ2w6RudGFkZSBmdWxsdCByZWZlcmVuc25hbW4sIGZpY2sgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NAorbXNnaWQgInN1Ym1vZHVsZS0taGVscGVyIHByaW50LWRlZmF1bHQtcmVtb3RlIHRha2VzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAic3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUgdGFyIGluZ2EgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSB0YSBib3J0IGVuIGtvbXBvbmVudCBmcsOlbiB1cmw6ZW4gXCIlc1wiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDEwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk1Cittc2dpZCAiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAiYWx0ZXJuYXRpdmEgYW5rYXJlIGbDtnIgcmVsYXRpdmEgc8O2a3bDpGdhciIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHPDtmt2w6RnPl0gWzxzw7ZrdsOkZz4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICJIaXR0YWRlIGluZ2VuIHVybCBmw7ZyIHVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJXNcIiBpIC5naXRtb2R1bGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICclcydcbiIKK21zZ3N0ciAiR8OlciBpbiBpIFwiJXNcIlxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgZm9yICVzXG4iCisiLiIKK21zZ3N0ciAiIgorInJ1bl9jb21tYW5kIHJldHVybmVyYWRlIGlja2Utbm9sbHN0YXR1cyBmw7ZyICVzXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIHdoaWxlIHJlY3Vyc2luZyBpbiB0aGUgbmVzdGVkICIKKyJzdWJtb2R1bGVzIG9mICVzXG4iCisiLiIKK21zZ3N0ciAiIgorInJ1bl9jb21tYW5kIHJldHVybmVyYWRlIGlja2Utbm9sbHN0YXR1cyB2aWQgcmVrdXJzZXJpbmcgaW4gaSBuw6RzdGxhZGUgIgorInVuZGVybW9kdWxlciBmw7ZyICVzXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBlbnRlcmluZyBlYWNoIHN1Ym1vZHVsZSBjb21tYW5kIgorbXNnc3RyICJEw7ZsaiB1dGRhdGEgZnLDpW4gZsO2ciB2YXJqZSB1bmRlcm1vZHVsc2tvbW1hbmRvIHNvbSBzdGFydGFzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDYzCittc2dpZCAiUmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzIgorbXNnc3RyICJSZWt1cnNlcmEgaW4gaSBuw6RzdGxhZGUgdW5kZXJtb2R1bGVyIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTcyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWy0tXSA8Y29tbWFuZD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gWzxrb21tYW5kbz5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgbG9vayB1cCBjb25maWd1cmF0aW9uICclcycuIEFzc3VtaW5nIHRoaXMgcmVwb3NpdG9yeSBpcyBpdHMgb3duICIKKyJhdXRob3JpdGF0aXZlIHVwc3RyZWFtLiIKK21zZ3N0ciAiIgorImt1bmRlIGludGUgc2zDpSB1cHAga29uZmlndXJhdGlvbmVuIFwiJXNcIi4gQW50YXIgYXR0IGFya2l2ZXQgw6RyIHNpbiBlZ2V0ICIKKyJvZmZpY2llbGxhIHVwcHN0csO2bS4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIHJlZ2lzdHJlcmEgdXJsIGbDtnIgdW5kZXJtb2R1bHPDtmt2w6RnIFwiJXNcIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIgorbXNnc3RyICJVbmRlcm1vZHVsZW4gXCIlc1wiICglcykgcmVnaXN0cmVyYWQgZsO2ciBzw7ZrdsOkZ2VuIFwiJXNcIlxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGNvbW1hbmQgdXBkYXRlIG1vZGUgc3VnZ2VzdGVkIGZvciBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICJ2YXJuaW5nOiBrb21tYW5kb3VwcGRhdGVyaW5nc2zDpGdlIGbDtnJlc2xvZ3MgZsO2ciB1bmRlcm1vZHVsZW4gXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJNaXNzbHlja2FkZXMgcmVnaXN0cmVyYSB1cHBkYXRlcmluZ3Nsw6RnZSBmw7ZyIHVuZGVybW9kdWxzw7ZrdsOkZyBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTAKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiRMO2bGogdXRkYXRhIGZyw6VuIGluaXRpZXJpbmcgYXYgdW5kZXJtb2R1bCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8b3B0aW9ucz5dIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPGZsYWdnb3I+XSBbPHPDtmt2w6RnPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3ODkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICJoaXR0YWRlIGluZ2VuIHVuZGVybW9kdWxtYXBwbmluZyBpIC5naXRtb2R1bGVzIGbDtnIgc8O2a3bDpGdlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCByZWYgaW5zaWRlIHRoZSBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBiZXN0w6RtbWEgSEVBRDpzIGluY2hlY2tuaW5nIGkgdW5kZXJtb2R1bGVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg2NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAzMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgcmVrdXJzZXJhIGluIGkgdW5kZXJtb2R1bGVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4OCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5OQorbXNnaWQgIlN1cHByZXNzIHN1Ym1vZHVsZSBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICJIaW5kcmEgc3RhdHVzdXRza3JpZnQgZsO2ciB1bmRlcm1vZHVsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODg5Cittc2dpZCAiIgorIlVzZSBjb21taXQgc3RvcmVkIGluIHRoZSBpbmRleCBpbnN0ZWFkIG9mIHRoZSBvbmUgc3RvcmVkIGluIHRoZSBzdWJtb2R1bGUgIgorIkhFQUQiCittc2dzdHIgIiIKKyJWaXNhIGluY2hlY2tuaW5nIGZyw6VuIGluZGV4ZXQgaXN0w6RsbGV0IGbDtnIgZGVuIHNvbSBsYWdyYXRzIGkgdW5kZXJtb2R1bGVucyAiCisiSEVBRCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg5MAorbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAicmVrdXJzZXJhIGluIGkgbsOkc3RsYWRlIHVuZGVybW9kdWxlciIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg5NQorbXNnaWQgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aXRldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8c8O2a3bDpGc+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkxOQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHPDtmt2w6RnPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk4MworIywgYy1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICclcydcbiIKK21zZ3N0ciAiU3lua3JvbmlzZXJhciB1bmRlcm1vZHVsLXVybCBmw7ZyIFwiJXNcIlxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyByZWdpc3RyZXJhIHVybCBmw7ZyIHVuZGVybW9kdWxzw7ZrdsOkZyBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGjDpG10YSBzdGFuZGFyZGZqw6RyciBmw7ZyIHVuZGVybW9kdWxzw7ZrdsOkZyBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHVwcGRhdGVyYSBmasOkcnIgZsO2ciB1bmRlcm1vZHVsc8O2a3bDpGcgXCIlc1wiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA2MQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBzeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwiCittc2dzdHIgIkTDtmxqIHV0ZGF0YSBmcsOlbiBzeW5rcm9uaWVyaW5nIGF2IHVuZGVybW9kdWwtdXJsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA2OAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPHPDtmt2w6RnPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSAodXNlICdybSAtcmYnIGlmIHlvdSAiCisicmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIgorbXNnc3RyICIiCisiVW5kZXJtb2R1bHNhcmJldHNrYXRhbG9nZW4gXCIlc1wiIGlubmVow6VsbGVyIGVuIC5naXQta2F0YWxvZyAoYW52w6RuZCBcInJtIC1yZiIKKyJcIiBvbSBkdSB2ZXJrbGlnZW4gdmlsbCB0YSBib3J0IGRlbiBvY2ggYWxsIGRlc3MgaGlzdG9yaWspIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvIGRpc2NhcmQgIgorInRoZW0iCittc2dzdHIgIiIKKyJVbmRlcm1vZHVsZW5zIGFyYmV0c2thdGFsb2cgXCIlc1wiIGhhciBsb2thbGEgw6RuZHJpbmdhcjsgXCItZlwiIGthc3RhciBib3J0ICIKKyJkZW0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIKK21zZ3N0ciAiUmVuc2FkZSBrYXRhbG9nZW4gXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgc3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnXG4iCittc2dzdHIgIkt1bmRlIGludGUgdGEgYm9ydCB1bmRlcm1vZHVsZW5zIGFyYmV0c2thdGFsb2cgXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZW1wdHkgc3VibW9kdWxlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSB0b20gdW5kZXJtb2R1bHNrYXRhbG9nICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIlVuZGVybW9kdWxlbiBcIiVzXCIgKCVzKSByZWdpc3RyZXJhZCBmw7ZyIHPDtmt2w6RnZW4gXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjAwCittc2dpZCAiUmVtb3ZlIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWVzIGV2ZW4gaWYgdGhleSBjb250YWluIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIiIKKyJUYSBib3J0IHVuZGVybW9kdWxlcnMgYXJiZXRza2F0YWxvZ2VyIMOkdmVuIG9tIGRlIGlubmVow6VsbGVyIGxva2FsYSDDpG5kcmluZ2FyIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIwMQorbXNnaWQgIlVucmVnaXN0ZXIgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgIkF2cmVnaXN0cmVyYSBhbGxhIHVuZGVybW9kdWxlciIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMDYKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzxwYXRoPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzxzw7ZrdsOkZz4uLi5dXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMjAKK21zZ2lkICJVc2UgJy0tYWxsJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGVpbml0aWFsaXplIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICJBbnbDpG5kIFwiLS1hbGxcIiBvbSBkdSB2ZXJrbGlnZW4gdmlsbCBhdmluaXRpZXJhIGFsbGEgdW5kZXJtb2R1bGVyIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTI4OQorbXNnaWQgIiIKKyJBbiBhbHRlcm5hdGUgY29tcHV0ZWQgZnJvbSBhIHN1cGVycHJvamVjdCdzIGFsdGVybmF0ZSBpcyBpbnZhbGlkLlxuIgorIlRvIGFsbG93IEdpdCB0byBjbG9uZSB3aXRob3V0IGFuIGFsdGVybmF0ZSBpbiBzdWNoIGEgY2FzZSwgc2V0XG4iCisic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgdG8gJ2luZm8nIG9yLCBlcXVpdmFsZW50bHksIGNsb25lIHdpdGhcbiIKKyInLS1yZWZlcmVuY2UtaWYtYWJsZScgaW5zdGVhZCBvZiAnLS1yZWZlcmVuY2UnLiIKK21zZ3N0ciAiIgorIkVuIHN1cHBsZWFudCBiZXLDpGtuYWQgZnLDpW4gw7Z2ZXJwcm9qZWt0ZXRzIHN1cHBsZWFudCDDpHIgb2dpbHRpZy5cbiIKKyJGw7ZyIGF0dCBpIHPDpSBmYWxsIGzDpXRhIEdpdCBrbG9uYSB1dGFuIGV0dCBzdXBwbGVhbnQsIHPDpHR0XG4iCisic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgdGlsbCBcImluZm9cIiBlbGxlciwgbGlrdsOkcmRpZ3QsIGtsb25hXG4iCisibWVkIFwiLS1yZWZlcmVuY2UtaWYtYWJsZVwiIGlzdMOkbGxldCBmw7ZyIFwiLS1yZWZlcmVuY2VcIi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzI4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBhZGQgYWx0ZXJuYXRlOiAlcyIKK21zZ3N0ciAidW5kZXJtb2R1bGVuIFwiJXNcIiBrYW4gaW50ZSBsw6RnZ2EgdGlsbCBzdXBwbGVhbnQ6ICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM2NworIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAiVsOkcmRldCBcIiVzXCIgaSBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBmw7Zyc3TDpXMgaW50ZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJWw6RyZGV0IFwiJXNcIiBpIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBmw7Zyc3TDpXMgaW50ZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTgKK21zZ2lkICJ3aGVyZSB0aGUgbmV3IHN1Ym1vZHVsZSB3aWxsIGJlIGNsb25lZCB0byIKK21zZ3N0ciAidmFyIGRlbiBueWEgdW5kZXJtb2R1bGVuIHNrYSBrbG9uYXMgdGlsbCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDEKK21zZ2lkICJuYW1lIG9mIHRoZSBuZXcgc3VibW9kdWxlIgorbXNnc3RyICJuYW1uIHDDpSBkZW4gbnlhIHVuZGVybW9kdWxlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDQKK21zZ2lkICJ1cmwgd2hlcmUgdG8gY2xvbmUgdGhlIHN1Ym1vZHVsZSBmcm9tIgorbXNnc3RyICJVUkwgYXR0IGtsb25hIHVuZGVybW9kdWxlbiBmcsOlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTIKK21zZ2lkICJkZXB0aCBmb3Igc2hhbGxvdyBjbG9uZXMiCittc2dzdHIgImRqdXAgZsO2ciBncnVuZGEga2xvbmVyIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxNSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyNAorbXNnaWQgImZvcmNlIGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgInR2aW5nYSBrbG9uaW5nc2bDtnJsb3BwIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxNyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyNgorbXNnaWQgImRpc2FsbG93IGNsb25pbmcgaW50byBub24tZW1wdHkgZGlyZWN0b3J5IgorbXNnc3RyICJmw7ZyaGluZHJhIGtsb25pbmcgdGlsbCBpY2tlLXRvbSBrYXRhbG9nIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQyNAorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxuYW1lPl0gWy0tZGVwdGggPGRlcHRoPl0gWy0tc2luZ2xlLWJyYW5jaF0gLS11cmwgIgorIjx1cmw+IC0tcGF0aCA8cGF0aD4iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxzw7ZrdsOkZz5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxhcmtpdj5dIFstLW5hbWUgPG5hbW4+XSBbLS1kZXB0aCA8ZGp1cD5dIFstLXNpbmdsZS1icmFuY2hdIC0tdXJsIDx1cmw+IC0tIgorInBhdGggPHPDtmt2w6RnPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gY3JlYXRlL3VzZSAnJXMnIGluIGFub3RoZXIgc3VibW9kdWxlJ3MgZ2l0IGRpciIKK21zZ3N0ciAidsOkZ3JhciBza2FwYS9hbnbDpG5kYSBcIiVzXCIgaSBlbiBhbm5hbiB1bmRlcm1vZHVscyBnaXRrYXRhbG9nIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9uZSBvZiAnJXMnIGludG8gc3VibW9kdWxlIHBhdGggJyVzJyBmYWlsZWQiCittc2dzdHIgIm1pc3NseWNrYWRlcyBrbG9uYSBcIiVzXCIgdGlsbCB1bmRlcm1vZHVsc8O2a3bDpGdlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDY0CisjLCBjLWZvcm1hdAorbXNnaWQgImRpcmVjdG9yeSBub3QgZW1wdHk6ICclcyciCittc2dzdHIgImthdGFsb2dlbiBpbnRlIHRvbTogXCIlc1wiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgImt1bmRlIGludGUgZsOlIHRhZyBpIHVuZGVybW9kdWxrYXRhbG9nIGbDtnIgXCIlc1wiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIk9naWx0aWd0IHVwcGRhdGVyaW5nc2zDpGdlIFwiJXNcIiBmw7ZyIHVuZGVybW9kdWxzw7ZrdsOkZyBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisiT2dpbHRpZ3QgdXBwZGF0ZXJpbmdzbMOkZ2UgXCIlc1wiIGtvbmZpZ3VyZXJhdCBmw7ZyIHVuZGVybW9kdWxzw7ZrdsOkZyBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICclcycgbm90IGluaXRpYWxpemVkIgorbXNnc3RyICJVbmRlcm1vZHVsc8O2a3bDpGdlbiBcIiVzXCIgaGFyIGludGUgaW5pdGllcmF0cyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MjEKK21zZ2lkICJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAiS2Fuc2tlIG1lbmFkZSBkdSBhdHQgYW52w6RuZGEgXCJ1cGRhdGUgLS1pbml0XCI/IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyB1bm1lcmdlZCBzdWJtb2R1bGUgJXMiCittc2dzdHIgIkhvcHBhciDDtnZlciBlaiBzYW1tYW5zbGFnZW4gdW5kZXJtb2R1bCAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgc3VibW9kdWxlICclcyciCittc2dzdHIgIkhvcHBhciDDtnZlciB1bmRlcm1vZHVsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJy4gUmV0cnkgc2NoZWR1bGVkIgorbXNnc3RyICJNaXNzbHlja2FkZXMga2xvbmEgXCIlc1wiLiBOeXR0IGbDtnJzw7ZrIHBsYW5sYWd0IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJyBhIHNlY29uZCB0aW1lLCBhYm9ydGluZyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGtsb25hIFwiJXNcIiBmw7ZyIGFuZHJhIGfDpW5nZW4sIGF2YnJ5dGVyIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwMyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE0OQorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJzw7ZrdsOkZyBpbnV0aSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA2Cittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUsIGFjcm9zcyBuZXN0ZWQgc3VibW9kdWxlIGJvdW5kYXJpZXMiCittc2dzdHIgInPDtmt2w6RnIGludXRpIGFyYmV0c2thdGFsb2dlbiwgZ2Vub20gbsOkc3RsYWRlIHVuZGVybW9kdWxncsOkbnNlciIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTAKK21zZ2lkICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvciBub25lIgorbXNnc3RyICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBlbGxlciBub25lIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxNgorbXNnaWQgIkNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgdHJ1bmNhdGVkIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldmlzaW9ucyIKK21zZ3N0ciAiU2thcGEgZW4gZ3J1bmQga2xvbiB0cnVua2VyYWQgdGlsbCBhbmdpdmV0IGFudGFsIHJldmlzaW9uZXIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE5Cittc2dpZCAicGFyYWxsZWwgam9icyIKK21zZ3N0ciAicGFyYWxsZWxsYSBqb2JiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyMQorbXNnaWQgIndoZXRoZXIgdGhlIGluaXRpYWwgY2xvbmUgc2hvdWxkIGZvbGxvdyB0aGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiIKK21zZ3N0ciAib20gZGVuIGbDtnJzdGEga2xvbmVuIHNrYSBmw7ZsamEgcmVrb21tZW5kYXRpb24gZsO2ciBncnVuZCBrbG9uaW5nIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyMgorbXNnaWQgImRvbid0IHByaW50IGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgInNrcml2IGludGUga2xvbmbDtnJsb3BwIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkzMworbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciB1cGRhdGUtY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciB1cGRhdGUtY2xvbmUgWy0tcHJlZml4PTxzw7ZrdsOkZz5dIFs8c8O2a3bDpGc+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5NDYKK21zZ2lkICJiYWQgdmFsdWUgZm9yIHVwZGF0ZSBwYXJhbWV0ZXIiCittc2dzdHIgImZlbGFrdGlndCB2w6RyZGUgZsO2ciBwYXJhbWV0ZXJuIHVwZGF0ZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSAoJXMpIGJyYW5jaCBjb25maWd1cmVkIHRvIGluaGVyaXQgYnJhbmNoIGZyb20gc3VwZXJwcm9qZWN0LCBidXQgIgorInRoZSBzdXBlcnByb2plY3QgaXMgbm90IG9uIGFueSBicmFuY2giCittc2dzdHIgIiIKKyJVbmRlcm1vZHVsZW5zICglcykgZ3JlbiBpbnN0w6RsbGQgcMOlIGF0dCDDpHJ2YSBncmVuIGZyw6VuIGh1dnVkcHJvamVrdGV0LCBtZW4gIgorImh1dnVkcHJvamVrdGV0IMOkciBpbnRlIHDDpSBuw6Vnb24gZ3JlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBhIHJlcG9zaXRvcnkgaGFuZGxlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBmw6UgdGFnIGkgYXJraXZoYW5kdGFnIGbDtnIgdW5kZXJtb2R1bGVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNTAKK21zZ2lkICJyZWN1cnNlIGludG8gc3VibW9kdWxlcyIKK21zZ3N0ciAicmVrdXJzZXJhIG5lciBpIHVuZGVybW9kdWxlciIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNTYKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgYWJzb3JiLWdpdC1kaXJzIFs8b3B0aW9ucz5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgYWJzb3JiLWdpdC1kaXIgWzxmbGFnZ29yPl0gWzxzw7ZrdsOkZz4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIxMgorbXNnaWQgImNoZWNrIGlmIGl0IGlzIHNhZmUgdG8gd3JpdGUgdG8gdGhlIC5naXRtb2R1bGVzIGZpbGUiCittc2dzdHIgInNlIG9tIGRldCDDpHIgc8Oka2VydCBhdHQgc2tyaXZhIHRpbGwgLmdpdG1vZHVsZXMtZmlsZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjE1Cittc2dpZCAidW5zZXQgdGhlIGNvbmZpZyBpbiB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAidGEgYm9ydCBrb25maWd1cmF0aW9uZW4gZnLDpW4gLmdpdG1vZHVsZXMtZmlsZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjIwCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA8bmFtZT4gWzx2YWx1ZT5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIDxuYW1uPiBbPHbDpHJkZT5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIyMQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS11bnNldCA8bmFtZT4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS11bnNldCA8bmFtbj4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjIyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyNDEgZ2l0LXN1Ym1vZHVsZS5zaDoxNzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpcyBpbiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJzZSB0aWxsIGF0dCAuZ2l0bW9kdWxlcyBmaW5ucyBpIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyOTEgZ2l0LmM6NDMzIGdpdC5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2Vzbid0IHN1cHBvcnQgLS1zdXBlci1wcmVmaXgiCittc2dzdHIgIiVzIHN0w7ZkZXIgaW50ZSAtLXN1cGVyLXByZWZpeCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBzdWJtb2R1bGUtLWhlbHBlciBzdWJjb21tYW5kIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZXR0IGdpbHRpZ3QgdW5kZXJrb21tYW5kbyB0aWxsIHN1Ym1vZHVsZS0taGVscGVyIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjgKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIDxuYW1lPiBbPHJlZj5dIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIFs8ZmxhZ2dvcj5dIDxuYW1uPiBbPHJlZj5dIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjkKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0gPG5hbWU+IgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0gPG5hbW4+IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwCittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAiIgorInVuZGVydHJ5Y2sgZmVsbWVkZGVsYW5kZW4gZsO2ciBpY2tlLXN5bWJvbGlza2EgKGZyw6Vua29wcGxhZGUpIHJlZmVyZW5zZXIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDEKK21zZ2lkICJkZWxldGUgc3ltYm9saWMgcmVmIgorbXNnc3RyICJ0YSBib3J0IHN5bWJvbGlzayByZWZlcmVucyIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MgorbXNnaWQgInNob3J0ZW4gcmVmIG91dHB1dCIKK21zZ3N0ciAiZsO2cmtvcnRhIHJlZi11dGRhdGEiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIgorbXNnc3RyICJza8OkbCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAic2vDpGwgdGlsbCB1cHBkYXRlcmluZ2VuIgorCisjOiBidWlsdGluL3RhZy5jOjI1Cittc2dpZCAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dXG4iCisiXHRcdDx0YWduYW1lPiBbPGhlYWQ+XSIKK21zZ3N0ciAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8bnlja2VsLWlkPl0gWy1mXSBbLW0gPG1lZGQ+IHwgLUYgPGZpbD5dXG4iCisiXHRcdDx0YWdnbmFtbj4gWzxodXZ1ZD5dIgorCisjOiBidWlsdGluL3RhZy5jOjI3Cittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLWQgPHRhZ2duYW1uPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzoyOAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0gWy0tIgorInBvaW50cy1hdCA8b2JqZWN0Pl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCB0YWcgLWwgWy1uWzxhbnRhbD5dXSBbLS1jb250YWlucyA8aW5jaGVja25pbmc+XSBbLS1uby1jb250YWlucyAiCisiPGluY2hlY2tuaW5nPl0gWy0tcG9pbnRzLWF0IDxvYmpla3Q+XVxuIgorIlx0XHRbLS1mb3JtYXQ9PGZvcm1hdD5dIFstLVtuby1dbWVyZ2VkIFs8aW5jaGVja25pbmc+XV0gWzxtw7Zuc3Rlcj4uLi5dIgorCisjOiBidWlsdGluL3RhZy5jOjMwCittc2dpZCAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWdnbmFtbj4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAidGFnZ2VuIFwiJXNcIiBoaXR0YWRlcyBpbnRlLiIKKworIzogYnVpbHRpbi90YWcuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICJUb2cgYm9ydCB0YWdnIFwiJXNcIiAodmFyICVzKVxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTa3JpdiBldHQgbWVkZGVsYW5kZSBmw7ZyIHRhZ2dlbjpcbiIKKyIgICVzXG4iCisiUmFkZXIgc29tIGlubGVkcyBtZWQgXCIlY1wiIGlnbm9yZXJhcy5cbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNrcml2IGV0dCBtZWRkZWxhbmRlIGbDtnIgdGFnZ2VuOlxuIgorIiAgJXNcbiIKKyJSYWRlciBzb20gaW5sZWRzIG1lZCBcIiVjXCIga29tbWVyIGJlaMOlbGxhczsgZHUga2FuIHNqw6RsdiB0YSBib3J0IGRlbSBvbVxuIgorImR1IHZpbGwuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTk4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzaWduZXJhIHRhZ2dlbiIKKworIzogYnVpbHRpbi90YWcuYzoyMDAKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIHRhZ2ctZmlsZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBjcmVhdGVkIGEgbmVzdGVkIHRhZy4gVGhlIG9iamVjdCByZWZlcnJlZCB0byBieSB5b3VyIG5ldyB0YWcgaXNcbiIKKyJhbHJlYWR5IGEgdGFnLiBJZiB5b3UgbWVhbnQgdG8gdGFnIHRoZSBvYmplY3QgdGhhdCBpdCBwb2ludHMgdG8sIHVzZTpcbiIKKyJcbiIKKyJcdGdpdCB0YWcgLWYgJXMgJXNee30iCittc2dzdHIgIiIKKyJEdSBoYXIgc2thcGF0IGVuIG7DpHN0bGFkIHRhZ2cuIE9iamVrdGV0IHNvbSByZWZlcmVyYXMgYXYgZGluIG55YSB0YWdnIMOkclxuIgorInJlZGFuIGVuIHRhZ2cuIE9tIGR1IHNrdWxsZSB0YWdnYSBvYmpla3RldCBkZW4gcGVrYXIgcMOlLCBhbnbDpG5kOlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKKworIzogYnVpbHRpbi90YWcuYzoyMzIKK21zZ2lkICJiYWQgb2JqZWN0IHR5cGUuIgorbXNnc3RyICJmZWxha3RpZyBvYmpla3R0eXAuIgorCisjOiBidWlsdGluL3RhZy5jOjI4NAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAiaW5nZXQgdGFnZ21lZGRlbGFuZGU/IgorCisjOiBidWlsdGluL3RhZy5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgdGFnIG1lc3NhZ2UgaGFzIGJlZW4gbGVmdCBpbiAlc1xuIgorbXNnc3RyICJUYWdnbWVkZGVsYW5kZXQgaGFyIGzDpG1uYXRzIGkgJXNcbiIKKworIzogYnVpbHRpbi90YWcuYzo0MDIKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAibGlzdGEgdGFnZ25hbW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA0Cittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgInZpc2EgPG4+IHJhZGVyIGZyw6VuIHZhcmplIHRhZ2dtZWRkZWxhbmRlIgorCisjOiBidWlsdGluL3RhZy5jOjQwNgorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICJ0YSBib3J0IHRhZ2dhciIKKworIzogYnVpbHRpbi90YWcuYzo0MDcKK21zZ2lkICJ2ZXJpZnkgdGFncyIKK21zZ3N0ciAidmVyaWZpZXJhIHRhZ2dhciIKKworIzogYnVpbHRpbi90YWcuYzo0MDkKK21zZ2lkICJUYWcgY3JlYXRpb24gb3B0aW9ucyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiBmw7ZyIGF0dCBza2FwYSB0YWdnYXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDExCittc2dpZCAiYW5ub3RhdGVkIHRhZywgbmVlZHMgYSBtZXNzYWdlIgorbXNnc3RyICJhbm5vdGVyYWQgdGFnZywgYmVow7Z2ZXIgbWVkZGVsYW5kZSIKKworIzogYnVpbHRpbi90YWcuYzo0MTMKK21zZ2lkICJ0YWcgbWVzc2FnZSIKK21zZ3N0ciAidGFnZ21lZGRlbGFuZGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE1Cittc2dpZCAiZm9yY2UgZWRpdCBvZiB0YWcgbWVzc2FnZSIKK21zZ3N0ciAidHZpbmdhIHJlZGlnZXJpbmcgYXYgaW5jaGVja25pbmdzbWVkZGVsYW5kZSIKKworIzogYnVpbHRpbi90YWcuYzo0MTYKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICJhbm5vdGVyYWQgb2NoIEdQRy1zaWduZXJhZCB0YWdnIgorCisjOiBidWlsdGluL3RhZy5jOjQxOQorbXNnaWQgInVzZSBhbm90aGVyIGtleSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgImFudsOkbmQgYW5uYW4gbnlja2VsIGbDtnIgYXR0IHNpZ25lcmEgdGFnZ2VuIgorCisjOiBidWlsdGluL3RhZy5jOjQyMAorbXNnaWQgInJlcGxhY2UgdGhlIHRhZyBpZiBleGlzdHMiCittc2dzdHIgImVyc8OkdHQgdGFnZ2VuIG9tIGRlbiBmaW5ucyIKKworIzogYnVpbHRpbi90YWcuYzo0MjEgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY5Cittc2dpZCAiY3JlYXRlIGEgcmVmbG9nIgorbXNnc3RyICJza2FwYSBlbiByZWZsb2ciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIzCittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiBmw7ZyIGxpc3RuaW5nIGF2IHRhZ2dhciIKKworIzogYnVpbHRpbi90YWcuYzo0MjQKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgImxpc3RhIHRhZ2dhciBpIHNwYWx0ZXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI1IGJ1aWx0aW4vdGFnLmM6NDI3Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJ2aXNhIGVuZGFzdCB0YWdnYXIgc29tIGlubmVow6VsbGVyIGluY2hlY2tuaW5nZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI2IGJ1aWx0aW4vdGFnLmM6NDI4Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJ2aXNhIGVuZGFzdCB0YWdnYXIgc29tIGludGUgaW5uZWjDpWxsZXIgaW5jaGVja25pbmdlbiIKKworIzogYnVpbHRpbi90YWcuYzo0MjkKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJ2aXNhIGVuZGFzdCB0YWdnYXIgc29tIHNsYWdpdHMgc2FtbWFuIgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJ2aXNhIGVuZGFzdCB0YWdnYXIgc29tIGVqIHNsYWdpdHMgc2FtbWFuIgorCisjOiBidWlsdGluL3RhZy5jOjQzNAorbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJ2aXNhIGVuZGFzdCB0YWdnYXIgZsO2ciBvYmpla3RldCIKKworIzogYnVpbHRpbi90YWcuYzo0ODIKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gb2NoIC1uIMOkciBpbmtvbXBhdGlibGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA0Cittc2dpZCAiLW4gb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIkZsYWdnYW4gLW4gw6RyIGVuZGFzdCB0aWxsw6V0ZW4gaSBsaXN0bMOkZ2UiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA2Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiRmxhZ2dhbiAtLWNvbnRhaW5zIMOkciBlbmRhc3QgdGlsbMOldGVuIGkgbGlzdGzDpGdlIgorCisjOiBidWlsdGluL3RhZy5jOjUwOAorbXNnaWQgIi0tbm8tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIkZsYWdnYW4gLS1uby1jb250YWlucyDDpHIgZW5kYXN0IHRpbGzDpXRlbiBpIGxpc3Rsw6RnZSIKKworIzogYnVpbHRpbi90YWcuYzo1MTAKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiRmxhZ2dhbiAtLXBvaW50cy1hdCDDpHIgZW5kYXN0IHRpbGzDpXRlbiBpIGxpc3Rsw6RnZSIKKworIzogYnVpbHRpbi90YWcuYzo1MTIKK21zZ2lkICItLW1lcmdlZCBhbmQgLS1uby1tZXJnZWQgb3B0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiRmxhZ2dvcm5hIC0tbWVyZ2VkIG9jaCAtLW5vLW1lcmdlZCDDpHIgZW5kYXN0IHRpbGzDpXRuYSBpIGxpc3Rsw6RnZSIKKworIzogYnVpbHRpbi90YWcuYzo1MjMKK21zZ2lkICJvbmx5IG9uZSAtRiBvciAtbSBvcHRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgImVuZGFzdCBlbiBhdiBmbGFnZ29ybmEgLUYgZWxsZXIgLW0gdGlsbMOldHMuIgorCisjOiBidWlsdGluL3RhZy5jOjU0MgorbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAiZsO2ciBtw6VuZ2EgcGFyYW1ldHJhciIKKworIzogYnVpbHRpbi90YWcuYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iCittc2dzdHIgIlwiJXNcIiDDpHIgaW50ZSBldHQgZ2lsdGlndCB0YWdnbmFtbi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJ0YWdnZW4gXCIlc1wiIGZpbm5zIHJlZGFuIgorCisjOiBidWlsdGluL3RhZy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlVwcGRhdGVyYWQgdGFnZyBcIiVzXCIgKHZhciAlcylcbiIKKworIzogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjUwMgorbXNnaWQgIlVucGFja2luZyBvYmplY3RzIgorbXNnc3RyICJQYWNrYXIgdXBwIG9iamVrdCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrYXBhIGthdGFsb2dlbiAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2thcGEgZmlsZW4gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRhIGJvcnQgZmlsZW4gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE1IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgYm9ydCBrYXRhbG9nZW4gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRlc3RpbmcgbXRpbWUgaW4gJyVzJyAiCittc2dzdHIgIlRlc3RhciBtdGltZSBpIFwiJXNcIiAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTU0Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGZpbGUiCittc2dzdHIgInN0YXQtaW5mb3JtYXRpb25lbiBmw7ZyIGVuIGthdGFsb2cgw6RuZHJhcyBpbnRlIG7DpHIgbnlhIGZpbGVyIGzDpGdncyB0aWxsIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE2NworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJzdGF0LWluZm9ybWF0aW9uZW4gZsO2ciBlbiBrYXRhbG9nIMOkbmRyYXMgaW50ZSBuw6RyIG55YSBrYXRhbG9nZXIgbMOkZ2dzIHRpbGwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTgwCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIHVwZGF0aW5nIGEgZmlsZSIKK21zZ3N0ciAic3RhdC1pbmZvcm1hdGlvbmVuIGbDtnIgZW4ga2F0YWxvZyDDpG5kcmFzIG7DpHIgZmlsZXIgdXBwZGF0ZXJhcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxOTEKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgYWRkaW5nIGEgZmlsZSBpbnNpZGUgc3ViZGlyZWN0b3J5IgorbXNnc3RyICIiCisic3RhdC1pbmZvcm1hdGlvbmVuIGbDtnIgZW4ga2F0YWxvZyDDpG5kcmFzIG7DpHIgZmlsZXIgbMOkZ2dzIHRpbGwgaSBlbiAiCisidW5kZXJrYXRhbG9nIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIwMgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZmlsZSIKK21zZ3N0ciAic3RhdC1pbmZvcm1hdGlvbmVuIGbDtnIgZW4ga2F0YWxvZyDDpG5kcmFzIGludGUgbsOkciBlbiBmaWwgdGFzIGJvcnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjE1Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBkaXJlY3RvcnkiCittc2dzdHIgInN0YXQtaW5mb3JtYXRpb25lbiBmw7ZyIGVuIGthdGFsb2cgw6RuZHJhcyBpbnRlIG7DpHIgZW4ga2F0YWxvZyB0YXMgYm9ydCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMjIKK21zZ2lkICIgT0siCittc2dzdHIgIiBPSyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo1OTEKK21zZ2lkICJnaXQgdXBkYXRlLWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCB1cGRhdGUtaW5kZXggWzxmbGFnZ29yPl0gWy0tXSBbPGZpbD4uLi5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NAorbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAiZm9ydHPDpHR0IHVwcGRhdGVyYSDDpHZlbiBuw6RyIGluZGV4IGludGUgw6RyIMOgam91ciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzcKK21zZ2lkICJyZWZyZXNoOiBpZ25vcmUgc3VibW9kdWxlcyIKK21zZ3N0ciAicmVmcmVzaDogaWdub3JlcmEgdW5kZXJtb2R1bGVyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MAorbXNnaWQgImRvIG5vdCBpZ25vcmUgbmV3IGZpbGVzIgorbXNnc3RyICJpZ25vcmVyYSBpbnRlIG55YSBmaWxlciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODIKK21zZ2lkICJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIKK21zZ3N0ciAibMOldCBmaWxlciBlcnPDpHR0YSBrYXRhbG9nZXIgb2NoIG9tdsOkbnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg0Cittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAibMOkZ2cgbcOkcmtlIHRpbGwgZmlsZXIgc29tIHNha25hcyBpIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODYKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAidXBwZGF0ZXJhIMOkdmVuIG9tIGluZGV4ZXQgaW5uZWjDpWxsZXIgZWogc2FtbWFuc2xhZ25hIHBvc3RlciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODkKK21zZ2lkICJyZWZyZXNoIHN0YXQgaW5mb3JtYXRpb24iCittc2dzdHIgInVwcGRhdGVyYSBzdGF0dXNpbmZvcm1hdGlvbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTMKK21zZ2lkICJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciCittc2dzdHIgInNvbSAtLXJlZnJlc2gsIG1lbiBpZ25vcmVyYSBhc3N1bWUtdW5jaGFuZ2VkLWluc3TDpGxsbmluZyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTcKK21zZ2lkICI8bW9kZT4sPG9iamVjdD4sPHBhdGg+IgorbXNnc3RyICI8bMOkZ2U+LDxvYmpla3Q+LDxzw7ZrdsOkZz4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk4Cittc2dpZCAiYWRkIHRoZSBzcGVjaWZpZWQgZW50cnkgdG8gdGhlIGluZGV4IgorbXNnc3RyICJsw6RnZyB0aWxsIGFuZ2l2ZW4gcG9zdCBpIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwOAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAibWFya2VyYSBmaWxlciBzb20gXCLDpG5kcmFzIGludGVcIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDExCittc2dpZCAiY2xlYXIgYXNzdW1lZC11bmNoYW5nZWQgYml0IgorbXNnc3RyICJyZW5zYSBcImFzc3VtZS11bmNoYW5nZWRcIi1iaXRlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE0Cittc2dpZCAibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIKK21zZ3N0ciAibWFya2VyYSBmaWxlciBzb20gXCJlbmRhc3QgaW5kZXhcIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE3Cittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgInTDtm0gXCJza2lwLXdvcmt0cmVlXCItYml0ZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMAorbXNnaWQgImRvIG5vdCB0b3VjaCBpbmRleC1vbmx5IGVudHJpZXMiCittc2dzdHIgInLDtnIgaW50ZSBcImVuZGFzdCBpbmRleFwiLXBvc3RlciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIyCittc2dpZCAiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgImzDpGdnIGVuZGFzdCB0aWxsIGluZGV4ZXQ7IGzDpGdnIGludGUgdGlsbCBpbm5laMOlbGxldCBpIG9iamVrdGRhdGFiYXNlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI0Cittc2dpZCAicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIKK21zZ3N0ciAidGEgYm9ydCBuYW1uZ2l2bmEgc8O2a3bDpGdhciDDpHZlbiBvbSBkZSBmaW5ucyBpIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI2Cittc2dpZCAid2l0aCAtLXN0ZGluOiBpbnB1dCBsaW5lcyBhcmUgdGVybWluYXRlZCBieSBudWxsIGJ5dGVzIgorbXNnc3RyICJtZWQgLS1zdGRpbjogaW5kYXRhcmFkZXIgdGVybWluZXJhcyBtZWQgbnVsbC1ieXRlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjgKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsw6RzIGxpc3RhIMO2dmVyIHPDtmt2w6RnYXIgYXR0IHVwcGRhdGVyYSBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDMyCittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgImzDpGdnIHBvc3RlciBmcsOlbiBzdGFuZGFyZCBpbiB0aWxsIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzNgorbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiw6V0ZXJmeWxsIGV0YXBwIDIgb2NoIDMgZnLDpW4gYW5naXZuYSBzw7ZrdsOkZ2FyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDAKK21zZ2lkICJvbmx5IHVwZGF0ZSBlbnRyaWVzIHRoYXQgZGlmZmVyIGZyb20gSEVBRCIKK21zZ3N0ciAidXBwZGF0ZXJhIGVuZGFzdCBwb3N0ZXIgc29tIHNraWxqZXIgc2lnIGZyw6VuIEhFQUQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NAorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImlnbm9yZXJhIGZpbGVyIHNvbSBzYWtuYXMgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NworbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAicmFwcG9ydGVyYSDDpXRnw6RyZGVyIHDDpSBzdGFuZGFyZCB1dCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ5Cittc2dpZCAiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiCittc2dzdHIgIihmw7ZyIHBvcnNsaW4pIGdsw7ZtIHNwYXJhZGUgb2zDtnN0YSBrb25mbGlrdGVyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTMKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAic2tyaXYgaW5kZXggaSBkZXR0YSBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICJha3RpdmVyYSBlbGxlciBpbmFrdGl2ZXJhIGRlbGF0IGluZGV4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTcKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgImFrdGl2ZXJhL2luYWt0aXZlcmEgb3Nww6VyYWQgY2FjaGUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1OQorbXNnaWQgInRlc3QgaWYgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICJ0ZXN0YSBvbSBmaWxzeXN0ZW1ldCBzdMO2ZGVyIG9zcMOlcmFkIGNhY2hlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjEKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiYWt0aXZlcmEgb3Nww6VyYWQgY2FjaGUgdXRhbiBhdHQgdGVzdGEgZmlsc3lzdGVtZXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2MworbXNnaWQgIndyaXRlIG91dCB0aGUgaW5kZXggZXZlbiBpZiBpcyBub3QgZmxhZ2dlZCBhcyBjaGFuZ2VkIgorbXNnc3RyICJza3JpdiB1dCBpbmRleGV0IMOkdmVuIG9tIGRldCBpbnRlIGFuZ2l2aXRzIHNvbSDDpG5kcmF0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjUKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBmaWxlIHN5c3RlbSBtb25pdG9yIgorbXNnc3RyICJha3RpdmVyYSBlbGxlciBpbmFrdGl2ZXJhIGZpbHN5c3RlbXPDtnZlcnZha25pbmciCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NworbXNnaWQgIm1hcmsgZmlsZXMgYXMgZnNtb25pdG9yIHZhbGlkIgorbXNnc3RyICJtYXJrZXJhIGZpbGVyIHNvbSBcImZzbW9uaXRvciB2YWxpZFwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNzAKK21zZ2lkICJjbGVhciBmc21vbml0b3IgdmFsaWQgYml0IgorbXNnc3RyICJ0w7ZtIFwiZnNtb25pdG9yIHZhbGlkXCItYml0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNzMKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJlbmFibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggw6RyIHNhdHQgdGlsbCBmYWxzZTsgdGEgYm9ydCBlbGxlciDDpG5kcmEgZGV0IG9tIGR1IHZlcmtsaWdlbiAiCisidmlsbCBha3RpdmVyYSBkZWxhdCBpbmRleCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTgyCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IMOkciBzYXR0IHRpbGwgdHJ1ZTsgdGEgYm9ydCBlbGxlciDDpG5kcmEgZGV0IG9tIGR1IHZlcmtsaWdlbiAiCisidmlsbCBpbmFrdGl2ZXJhIGRlbGF0IGluZGV4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTQKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBkaXNhYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIMOkciBzYXR0IHRpbGwgdHJ1ZTsgdGEgYm9ydCBlbGxlciDDpG5kcmEgZGV0IG9tIGR1ICIKKyJ2ZXJrbGlnZW4gdmlsbCBpbmFrdGl2ZXJhIGRlbiBvc3DDpXJhZGUgY2FjaGVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTgKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIk9zcMOlcmFkIGNhY2hlIMOkciBpbmFrdGl2ZXJhZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjA2Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGVuYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSDDpHIgc2F0dCB0aWxsIGZhbHNlOyB0YSBib3J0IGVsbGVyIMOkbmRyYSBkZXQgb20gZHUgIgorInZlcmtsaWdlbiB2aWxsIGFrdGl2ZXJhIGRlbiBvc3DDpXJhZGUgY2FjaGVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGVuYWJsZWQgZm9yICclcyciCittc2dzdHIgIk9zcMOlcmFkIGNhY2hlIMOkciBha3RpdmVyYWQgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxOAorbXNnaWQgImNvcmUuZnNtb25pdG9yIGlzIHVuc2V0OyBzZXQgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGVuYWJsZSBmc21vbml0b3IiCittc2dzdHIgImNvcmUuZnNtb25pdG9yIGludGUgc2F0dDsgc8OkdHQgb20gZHUgdmVya2xpZ2VuIHZpbGwgYWt0aXZlcmEgZnNtb25pdG9yIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjIKK21zZ2lkICJmc21vbml0b3IgZW5hYmxlZCIKK21zZ3N0ciAiZnNtb25pdG9yIGFrdGl2ZXJhdCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjI1Cittc2dpZCAiIgorImNvcmUuZnNtb25pdG9yIGlzIHNldDsgcmVtb3ZlIGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBkaXNhYmxlIGZzbW9uaXRvciIKK21zZ3N0ciAiIgorImNvcmUuZnNtb25pdG9yIMOkciBzYXR0OyB0YSBib3J0IG9tIGR1IHZlcmtsaWdlbiB2aWxsIGluYWt0aXZlcmEgZnNtb25pdG9yIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjkKK21zZ2lkICJmc21vbml0b3IgZGlzYWJsZWQiCittc2dzdHIgImZzbW9uaXRvciBpbmFrdGl2ZXJhdCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8ZmxhZ2dvcj5dIC1kIDxyZWZuYW1uPiBbPGdhbW1hbHR2w6RyZGU+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPGZsYWdnb3I+XSAgICA8cmVmbmFtbj4gPGdhbW1hbHR2w6RyZGU+IFs8bnl0dHbDpHJkZT5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMgorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxmbGFnZ29yPl0gLS1zdGRpbiBbLXpdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjQKK21zZ2lkICJkZWxldGUgdGhlIHJlZmVyZW5jZSIKK21zZ3N0ciAidGEgYm9ydCByZWZlcmVuc2VuIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjYKK21zZ2lkICJ1cGRhdGUgPHJlZm5hbWU+IG5vdCB0aGUgb25lIGl0IHBvaW50cyB0byIKK21zZ3N0ciAidXBwZGF0ZXJhIDxyZWZuYW1uPiBpbnRlIGRldCBkZW4gcGVrYXIgcMOlIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjcKK21zZ2lkICJzdGRpbiBoYXMgTlVMLXRlcm1pbmF0ZWQgYXJndW1lbnRzIgorbXNnc3RyICJzdGFuZGFyZCBpbiBoYXIgTlVMLXRlcm1pbmVyYWRlIGFyZ3VtZW50IgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjgKK21zZ2lkICJyZWFkIHVwZGF0ZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibMOkcyB1cHBkYXRlcmluZ2FyIGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjcKK21zZ2lkICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6MTUKK21zZ2lkICJ1cGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoIgorbXNnc3RyICJ1cHBkYXRlcmEgaW5mb3JtYXRpb25zZmlsZXJuYSBmcsOlbiBncnVuZGVuIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MTEKK21zZ2lkICJnaXQgdXBsb2FkLXBhY2sgWzxvcHRpb25zPl0gPGRpcj4iCittc2dzdHIgImdpdCB1cGxvYWQtcGFjayBbPGZsYWdnb3I+XSA8a2F0YWxvZz4iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyMyB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTcKK21zZ2lkICJxdWl0IGFmdGVyIGEgc2luZ2xlIHJlcXVlc3QvcmVzcG9uc2UgZXhjaGFuZ2UiCittc2dzdHIgImF2c2x1dGEgb21lZGVsYmFydCBlZnRlciBmw7Zyc3RhIGFucm9wL3N2YXItdXR2w6R4bGluZyIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI1Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBpbml0aWFsIHJlZiBhZHZlcnRpc2VtZW50IgorbXNnc3RyICJhdnNsdXRhIG9tZWRlbGJhcnQgZWZ0ZXIgaW5sZWRhbmRlIGt1bmfDtnJlbHNlIGF2IHJlZmVyZW5zZXIiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyNworbXNnaWQgImRvIG5vdCB0cnkgPGRpcmVjdG9yeT4vLmdpdC8gaWYgPGRpcmVjdG9yeT4gaXMgbm8gR2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAidGVzdGEgaW50ZSA8a2F0YWxvZz4vLmdpdC8gb20gPGthdGFsb2c+IGludGUgw6RyIGVuIEdpdC1rYXRhbG9nIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjkKK21zZ2lkICJpbnRlcnJ1cHQgdHJhbnNmZXIgYWZ0ZXIgPG4+IHNlY29uZHMgb2YgaW5hY3Rpdml0eSIKK21zZ3N0ciAiYXZicnl0IMO2dmVyZsO2cmluZ2VuIGVmdGVyIDxuPiBzZWt1bmRlcnMgaW5ha3Rpdml0ZXQiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjE5Cittc2dpZCAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8aW5jaGVja25pbmc+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo2OAorbXNnaWQgInByaW50IGNvbW1pdCBjb250ZW50cyIKK21zZ3N0ciAidmlzYSBpbm5laMOlbGwgZsO2ciBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjkgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzcKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgInZpc2EgcsOlYSBncGctc3RhdHVzZGF0YSIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU1Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWtldD4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NQorbXNnaWQgInZlcmJvc2UiCittc2dzdHIgInByYXRzYW0iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NworbXNnaWQgInNob3cgc3RhdGlzdGljcyBvbmx5IgorbXNnc3RyICJ2aXNhIGVuZGFzdCBzdGF0aXN0aWsiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjE4Cittc2dpZCAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWc+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD08Zm9ybWF0XSA8dGFnZz4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM2Cittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICJ2aXNhIGlubmVow6VsbCBmw7ZyIHRhZyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE3Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gWzxjb21taXQtaXNoPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBhZGQgWzxmbGFnZ29yPl0gPHPDtmt2w6RnPiBbPGluY2hlY2tuaW5nLWlndD5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTgKK21zZ2lkICJnaXQgd29ya3RyZWUgbGlzdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxpc3QgWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOQorbXNnaWQgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B0aW9ucz5dIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxmbGFnZ29yPl0gPHPDtmt2w6RnPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIwCittc2dpZCAiZ2l0IHdvcmt0cmVlIG1vdmUgPHdvcmt0cmVlPiA8bmV3LXBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbW92ZSA8YXJiZXRza2F0YWxvZz4gPG55LXPDtmt2w6RnPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIxCittc2dpZCAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMgorbXNnaWQgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHRpb25zPl0gPHdvcmt0cmVlPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPGZsYWdnb3I+XSA8YXJiZXRza2F0YWxvZz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMworbXNnaWQgImdpdCB3b3JrdHJlZSB1bmxvY2sgPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgdW5sb2NrIDxzw7ZrdsOkZz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2MCBidWlsdGluL3dvcmt0cmVlLmM6ODkxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRhIGJvcnQgXCIlc1wiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBub3QgYSB2YWxpZCBkaXJlY3RvcnkiCittc2dzdHIgIlRhciBib3J0IHdvcmt0cmVlcy8lczogaW50ZSBlbiBnaWx0aWcga2F0YWxvZyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlRhciBib3J0IHdvcmt0cmVlcy8lczogZ2l0ZGlyLWZpbGVuIGV4aXN0ZXJhciBpbnRlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTAgYnVpbHRpbi93b3JrdHJlZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIKK21zZ3N0ciAiVGFyIGJvcnQgd29ya3RyZWVzLyVzOiBrYW4gaW50ZSBsw6RzYSBnaXRkaXItZmlsZW4gKCVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBzaG9ydCByZWFkIChleHBlY3RlZCAlPFBSSXVNQVg+IGJ5dGVzLCByZWFkICIKKyIlPFBSSXVNQVg+KSIKK21zZ3N0ciAiIgorIlRhciBib3J0IHdvcmt0cmVlcy8lczoga29ydCBsw6RzbmluZyAoZsO2cnbDpG50YWRlICU8UFJJdU1BWD4gYnl0ZSwgbMOkc3RlICIKKyIlPFBSSXVNQVg+KSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgIlRhciBib3J0IHdvcmt0cmVlcy8lczogZmVsYWt0aWcgZ2l0ZGlyLWZpbCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIHBvaW50cyB0byBub24tZXhpc3RlbnQgbG9jYXRpb24iCittc2dzdHIgIlRhciBib3J0IHdvcmt0cmVlcy8lczogZ2l0ZGlyLWZpbGVuIHBla2FyIHDDpSBlbiBpY2tlZXhpc3RlcmFuZGUgcGxhdHMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNjUKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIHdvcmtpbmcgdHJlZXMiCittc2dzdHIgInJhcHBvcnRlcmEgYm9ydHRhZ25hIGFyYmV0c2thdGFsb2dlciIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NworbXNnaWQgImV4cGlyZSB3b3JraW5nIHRyZWVzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICJsw6V0IHRpZCBnw6UgdXQgZsO2ciBhcmJldHNrYXRhbG9nZXIgw6RsZHJlIMOkbiA8dGlkPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJcIiVzXCIgZmlubnMgcmVkYW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlLWFkZCB3b3JrdHJlZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpGdnYSBpbiBhcmJldHNrYXRhbG9nZW4gXCIlc1wiIGlnZW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBsb2NrZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYgLWYnIHRvIG92ZXJyaWRlLCBvciAndW5sb2NrJyBhbmQgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIlwiJXNcIiDDpHIgZW4gc2FrbmFkIG1lbiBsw6VzdCBhcmJldHNrYXRhbG9nO1xuIgorImFudsOkbmQgXCJhZGQgLWYgLWZcIiBmw7ZyIGF0dCDDtnZlcnN0eXJhLCBlbGxlciBcInVubG9ja1wiIG9jaCBcInBydW5lXCIgZWxsZXIgIgorIlwicmVtb3ZlXCIgZsO2ciBhdHQgcmVuc2EiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBhbHJlYWR5IHJlZ2lzdGVyZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYnIHRvIG92ZXJyaWRlLCBvciAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisiXCIlc1wiIMOkciBlbiBzYWtuYWQgbWVuIHJlZGFuIHJlZ2lzdHJlcmFkIGFyYmV0c2thdGFsb2c7XG4iCisiYW52w6RuZCBcImFkZCAtZlwiIGbDtnIgYXR0IMO2dmVyc3R5cmEsIGVsbGVyIFwicHJ1bmVcIiBlbGxlciBcInJlbW92ZVwiIGbDtnIgIgorImF0dCByZW5zYSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIGthdGFsb2dlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzIgYnVpbHRpbi93b3JrdHJlZS5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKG5ldyBicmFuY2ggJyVzJykiCittc2dzdHIgIkbDtnJiZXJlZGVyIGFyYmV0c2thdGFsb2cgKG55IGdyZW4gXCIlc1wiKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKHJlc2V0dGluZyBicmFuY2ggJyVzJzsgd2FzIGF0ICVzKSIKK21zZ3N0ciAiRsO2cmJlcmVkZXIgYXJiZXRza2F0YWxvZyAow6V0ZXJzdMOkbGxlciBncmVuIFwiJXNcIjsgdmFyIHDDpSAlcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChjaGVja2luZyBvdXQgJyVzJykiCittc2dzdHIgIkbDtnJiZXJlZGVyIGFyYmV0c2thdGFsb2cgKGNoZWNrYXIgdXQgXCIlc1wiKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGRldGFjaGVkIEhFQUQgJXMpIgorbXNnc3RyICJGw7ZyYmVyZWRlciBhcmJldHNrYXRhbG9nIChmcsOlbmtvcHBsYXQgSEVBRCAlcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTAKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBldmVuIGlmIGFscmVhZHkgY2hlY2tlZCBvdXQgaW4gb3RoZXIgd29ya3RyZWUiCittc2dzdHIgIiIKKyJjaGVja2EgdXQgPGdyZW4+IMOkdmVuIG9tIGRlbiByZWRhbiDDpHIgdXRjaGVja2FkIGkgZW4gYW5uYW4gYXJiZXRza2F0YWxvZyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5MworbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgInNrYXBhIGVuIG55IGdyZW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTUKK21zZ2lkICJjcmVhdGUgb3IgcmVzZXQgYSBicmFuY2giCittc2dzdHIgInNrYXBhIGVsbGVyIMOldGVyc3TDpGxsIGVuIGdyZW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTcKK21zZ2lkICJwb3B1bGF0ZSB0aGUgbmV3IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiYmVmb2xrYSBkZW4gbnlhIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5OAorbXNnaWQgImtlZXAgdGhlIG5ldyB3b3JraW5nIHRyZWUgbG9ja2VkIgorbXNnc3RyICJsw6V0IGFyYmV0c2thdGFsb2dlbiBmw7ZyYmxpIGzDpXN0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAxCittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtYnJhbmNoKDEpKSIKK21zZ3N0ciAic3TDpGxsIGluIHNww6VybmluZ3Nsw6RnZSAoc2UgZ2l0LWJyYW5jaCgxKSkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDQKK21zZ2lkICJ0cnkgdG8gbWF0Y2ggdGhlIG5ldyBicmFuY2ggbmFtZSB3aXRoIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiZsO2cnPDtmsgbWF0Y2hhIG5hbW4gcMOlIG55IGdyZW4gbW90IGVuIGZqw6RycnNww6VyYW5kZSBncmVuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTEyCittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWIsIC1CIG9jaCAtLWRldGFjaCDDpHIgw7Ztc2VzaWRpZ3QgdXRlc2x1dGFuZGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1NzMKK21zZ2lkICItLVtuby1ddHJhY2sgY2FuIG9ubHkgYmUgdXNlZCBpZiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCIKK21zZ3N0ciAiLS1bbm8tXXRyYWNrIGthbiBlbmRhc3QgYW52w6RuZGFzIG7DpHIgbnkgZ3JhbiBza2FwYXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NzMKK21zZ2lkICJyZWFzb24gZm9yIGxvY2tpbmciCittc2dzdHIgIm9yc2FrIHRpbGwgbMOlcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4NSBidWlsdGluL3dvcmt0cmVlLmM6NzE4IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTIKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB3b3JraW5nIHRyZWUiCittc2dzdHIgIlwiJXNcIiDDpHIgaW50ZSBlbiBhcmJldHNrYXRhbG9nIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njg3IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjAKK21zZ2lkICJUaGUgbWFpbiB3b3JraW5nIHRyZWUgY2Fubm90IGJlIGxvY2tlZCBvciB1bmxvY2tlZCIKK21zZ3N0ciAiSHV2dWRhcmJldHNrYXRhbG9nZW4ga2FuIGludGUgbMOlc2FzIGVsbGVyIGzDpXNhcyB1cHAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCwgcmVhc29uOiAlcyIKK21zZ3N0ciAiXCIlc1wiIMOkciByZWRhbiBsw6VzdCwgb3JzYWs6ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiCittc2dzdHIgIlwiJXNcIiDDpHIgcmVkYW4gbMOlc3QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgbG9ja2VkIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgbMOlc3QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NjMKK21zZ2lkICJ3b3JraW5nIHRyZWVzIGNvbnRhaW5pbmcgc3VibW9kdWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVtb3ZlZCIKK21zZ3N0ciAiYXJiZXRza2F0YWxvZ2VyIG1lZCB1bmRlcm1vZHVsZXIga2FuIGludGUgZmx5dHRhcyBlbGxlciB0YXMgYm9ydCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc3MQorbXNnaWQgImZvcmNlIG1vdmUgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgInR2aW5nYSBmbHl0dG5pbmcgw6R2ZW4gb20gYXJiZXRza2F0YWxvZ2VuIMOkciBzbXV0c2lnIGVsbGVyIGzDpXN0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzk0IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZW4gaHV2dWRhcmJldHNrYXRhbG9nIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaWd1cmUgb3V0IGRlc3RpbmF0aW9uIG5hbWUgZnJvbSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGxpc3RhIHV0IG3DpWxuYW1uIGZyw6VuIFwiJXNcIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YXJnZXQgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAibcOlbGV0IFwiJXNcIiBmaW5ucyByZWRhbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXNcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorImthbiBpbnRlIGZseXR0YSBlbiBsw6VzdCBhcmJldHNrYXRhbG9nLCBvcnNhayB0aWxsIGzDpXM6ICVzXG4iCisiYW52w6RuZCBcIm1vdmUgLWYgLWZcIiBmw7ZyIGF0dCDDtnZlcnN0eXJhLCBlbGxlciBsw6VzIHVwcCBmw7Zyc3QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTUKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisia2FuIGludGUgZmx5dHRhIGVuIGzDpXN0IGFyYmV0c2thdGFsb2c7XG4iCisiYW52w6RuZCBcIm1vdmUgLWYgLWZcIiBmw7ZyIGF0dCDDtnZlcnN0eXJhLCBlbGxlciBsw6VzIHVwcCBmw7Zyc3QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCBtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgImtvbnRyb2xsIG1pc3NseWNrYWRlcywga2FuIGludGUgZmx5dHRhIGFyYmV0c2thdGFsb2c6ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBtb3ZlICclcycgdG8gJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGZseXR0YSBcIiVzXCIgdGlsbCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGvDtnJhIFwiZ2l0IHN0YXR1c1wiIHDDpSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjb250YWlucyBtb2RpZmllZCBvciB1bnRyYWNrZWQgZmlsZXMsIHVzZSAtLWZvcmNlIHRvIGRlbGV0ZSBpdCIKK21zZ3N0ciAiIgorIlwiJXNcIiBpbm5laMOlbGxlciDDpG5kcmFkZSBlbGxlciBvc3DDpXJhZGUgZmlsZXIsIGFudsOkbmQgLS1mb3JjZSBmw7ZyIGF0dCB0YSAiCisiYm9ydCBkZXQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJywgY29kZSAlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGvDtnJhIFwiZ2l0IHN0YXR1c1wiIHDDpSBcIiVzXCIsIGtvZCAlZCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkwMworbXNnaWQgImZvcmNlIHJlbW92YWwgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgInR2aW5nYSB0YSBib3J0IMOkdmVuIG9tIGFyYmV0c2thdGFsb2dlbiDDpHIgc211dHNpZyBlbGxlciBsw6VzdCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJrYW4gaW50ZSB0YSBib3J0IGVuIGzDpXN0IGFyYmV0c2thdGFsb2csIG9yc2FrIHRpbGwgbMOlc2V0OiAlc1xuIgorImFudsOkbmQgXCJyZW1vdmUgLWYgLWZcIiBmw7ZyIGF0dCDDtnZlcnN0eXJhLCBlbGxlciBsw6VzIHVwcCBmw7Zyc3QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjgKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWU7XG4iCisidXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorImthbiBpbnRlIHRhIGJvcnQgZW4gbMOlc3QgYXJiZXRza2F0YWxvZztcbiIKKyJhbnbDpG5kIFwicmVtb3ZlIC1mIC1mXCIgZsO2ciBhdHQgw7Z2ZXJzdHlyYSwgZWxsZXIgbMOlcyB1cHAgZsO2cnN0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgcmVtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgImtvbnRyb2xsIG1pc3NseWNrYWRlcywga2FuIGludGUgdGEgYm9ydCBhcmJldHNrYXRhbG9nOiAlcyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MTUKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI4Cittc2dpZCAiPHByZWZpeD4vIgorbXNnc3RyICI8cHJlZml4Pi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI5Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICJ2aXNhIHRyw6Rkb2JqZWt0IGbDtnIgdW5kZXJrYXRhbG9nZW4gPHByZWZpeD4iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjMxCittc2dpZCAib25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyIKK21zZ3N0ciAiZW5kYXN0IGFudsOkbmRiYXJ0IHZpZCBmZWxzw7ZrbmluZyIKKworIzogZmFzdC1pbXBvcnQuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICdtYXJrJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgIkbDtnJ2w6RudGFkZSBcIm1hcmtcIi1rb21tYW5kbywgZmljayAlcyIKKworIzogZmFzdC1pbXBvcnQuYzozMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICd0bycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICJGw7ZydsOkbnRhZGUgXCJ0b1wiLWtvbW1hbmRvLCBmaWNrICVzIgorCisjOiBmYXN0LWltcG9ydC5jOjMyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmVhdHVyZSAnJXMnIGZvcmJpZGRlbiBpbiBpbnB1dCB3aXRob3V0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIgorbXNnc3RyICJmdW5rdGlvbmVuIFwiJXNcIiBmw7ZyYmp1ZGVuIGkgaW5kYXRhIHV0YW4gLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHBlcm1pc3Npb25zIG9uIHlvdXIgc29ja2V0IGRpcmVjdG9yeSBhcmUgdG9vIGxvb3NlOyBvdGhlclxuIgorInVzZXJzIG1heSBiZSBhYmxlIHRvIHJlYWQgeW91ciBjYWNoZWQgY3JlZGVudGlhbHMuIENvbnNpZGVyIHJ1bm5pbmc6XG4iCisiXG4iCisiXHRjaG1vZCAwNzAwICVzIgorbXNnc3RyICIiCisiQmVow7ZyaWdoZXRlbiBww6UgZGluIHV0dGFncy1rYXRhbG9nIChzb2NrZXQpIMOkciBmw7ZyIGzDtnM7IGFuZHJhXG4iCisiYW52w6RuZGFyZSBrYW4gbMOkc2EgZGluYSBjYWNoYWRlIGlubG9nZ25pbmdzdXBwZ2lmdGVyLiBEdSBiw7ZyIGvDtnJhOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjcyCittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAic2tyaXYgZmVsc8O2a25pbmdzbWVkZGVsYW5kZW4gcMOlIHN0YW5kYXJkIGZlbCIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgbm90IG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgImluY2hlY2tuaW5nICVzIMOkciBpbnRlIG3DpHJrdCBuw6ViYXIiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNjIKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgImbDtnIgbcOlbmdhIGluY2hlY2tuaW5nYXIgbWFya2VyYWRlIG7DpWJhcmEiCisKKyM6IHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzo3Cittc2dpZCAidGVzdC10b29sIHNlcnZlLXYyIFs8b3B0aW9ucz5dIgorbXNnc3RyICJ0ZXN0LXRvb2wgc2VydmUtdjIgWzxmbGFnZ29yPl0iCisKKyM6IHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzoxOQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWR2ZXJ0aXNpbmcgY2FwYWJpbGl0aWVzIgorbXNnc3RyICJhdnNsdXRhIG9tZWRlbGJhcnQgZWZ0ZXIga3VuZ8O2cmVsc2UgYXYga2FwYWJpbGl0ZXRlciIKKworIzogZ2l0LmM6MjcKK21zZ2lkICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8cGF0aD5dIFstYyA8bmFtZT49PHZhbHVlPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PHBhdGg+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PHBhdGg+XSBbLS13b3JrLXRyZWU9PHBhdGg+XSBbLS1uYW1lc3BhY2U9PG5hbWU+XVxuIgorIiAgICAgICAgICAgPGNvbW1hbmQ+IFs8YXJncz5dIgorbXNnc3RyICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8c8O2a3bDpGc+XSBbLWMgPG5hbW4+PTx2w6RyZGU+XVxuIgorIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08c8O2a3bDpGc+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby0iCisicGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tIgorImJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPTxzw7ZrdsOkZz5dIFstLXdvcmstdHJlZT08c8O2a3bDpGc+XSBbLS1uYW1lc3BhY2U9PG5hbW4+XVxuIgorIiAgICAgICAgICAgPGtvbW1hbmRvPiBbPGZsYWdnb3I+XSIKKworIzogZ2l0LmM6MzQKK21zZ2lkICIiCisiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJ0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCBvciBjb25jZXB0LlxuIgorIlNlZSAnZ2l0IGhlbHAgZ2l0JyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS4iCittc2dzdHIgIiIKKyJcImdpdCBoZWxwIC1hXCIgb2NoIFwiZ2l0IGhlbHAgLWdcIiB2aXNhciB0aWxsZ8OkbmdsaWdhIHVuZGVya29tbWFuZG9uIG9jaFxuIgorIm7DpWdyYSBrb25jZXB0dsOkZ2xlZG5pbmdhci4gU2UgXCJnaXQgaGVscCA8a29tbWFuZG8+XCIgZWxsZXIgXCJnaXQgaGVscFxuIgorIjxrb25jZXB0PlwiIGbDtnIgYXR0IGzDpHNhIG1lciBvbSBzcGVjaWZpa2EgdW5kZXJrb21tYW5kb24gb2NoIGtvbmNlcHQuXG4iCisiU2VlIFwiZ2l0IGhlbHAgZ2l0XCIgZsO2ciBlbiDDtnZlcnNpa3Qgw7Z2ZXIgc3lzdGVtZXQuIgorCisjOiBnaXQuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLWdpdC1kaXJcbiIKK21zZ3N0ciAiaW5nZW4ga2F0YWxvZyBhbmdhdnMgZsO2ciAtLWdpdC1kaXJcbiIKKworIzogZ2l0LmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5hbWVzcGFjZSBnaXZlbiBmb3IgLS1uYW1lc3BhY2VcbiIKK21zZ3N0ciAiaW5nZW4gbmFtbnJ5bWQgYW5nYXZzIGbDtnIgLS1uYW1lc3BhY2VcbiIKKworIzogZ2l0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS13b3JrLXRyZWVcbiIKK21zZ3N0ciAiaW5nZW4ga2F0YWxvZyBhbmdhdnMgZsO2ciAtLXdvcmstdHJlZVxuIgorCisjOiBnaXQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJlZml4IGdpdmVuIGZvciAtLXN1cGVyLXByZWZpeFxuIgorbXNnc3RyICJpbmdldCBwcmVmaXggYW5nYXZzIGbDtnIgLS1zdXBlci1wcmVmaXhcbiIKKworIzogZ2l0LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi1jIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIHN0cmluZ1xuIgorbXNnc3RyICItYyBmw7ZydsOkbnRhciBlbiBrb25maWd1cmF0aW9uc3N0csOkbmdcbiIKKworIzogZ2l0LmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLUNcbiIKK21zZ3N0ciAiaW5nZW4ga2F0YWxvZyBhbmdhdnMgZsO2ciAtQ1xuIgorCisjOiBnaXQuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgIm9rw6RuZCBmbGFnZ2E6ICVzXG4iCisKKyM6IGdpdC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgYWxpYXMgJyVzJzogJyVzJyIKK21zZ3N0ciAidmlkIGV4cGFuZGVyaW5nIGF2IGFsaWFzZXQgXCIlc1wiOiBcIiVzXCIiCisKKyM6IGdpdC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYWxpYXMgJyVzJyBjaGFuZ2VzIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiIKKyJZb3UgY2FuIHVzZSAnIWdpdCcgaW4gdGhlIGFsaWFzIHRvIGRvIHRoaXMiCittc2dzdHIgIiIKKyJhbGlhc2V0IFwiJXNcIiDDpG5kcmFyIG1pbGrDtnZhcmlhYmxlci5cbiIKKyJEdSBrYW4gYW52w6RuZGEgXCIhZ2l0XCIgaSBhbGlhc2V0IGbDtnIgYXR0IGfDtnJhIGRldCIKKworIzogZ2l0LmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGFsaWFzIGZvciAlcyIKK21zZ3N0ciAidG9tdCBhbGlhcyBmw7ZyICVzIgorCisjOiBnaXQuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGFsaWFzOiAlcyIKK21zZ3N0ciAicmVrdXJzaXZ0IGFsaWFzOiAlcyIKKworIzogZ2l0LmM6NDU5Cittc2dpZCAid3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgInNrcml2ZmVsIHDDpSBzdGFuZGFyZCB1dCIKKworIzogZ2l0LmM6NDYxCittc2dpZCAidW5rbm93biB3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAib2vDpG50IHNrcml2ZmVsIHDDpSBzdGFuZGFyZCB1dCIKKworIzogZ2l0LmM6NDYzCittc2dpZCAiY2xvc2UgZmFpbGVkIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAic3TDpG5nIG1pc3NseWNrYWRlcyBww6Ugc3RhbmRhcmQgdXQiCisKKyM6IGdpdC5jOjc5MworIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBsb29wIGRldGVjdGVkOiBleHBhbnNpb24gb2YgJyVzJyBkb2VzIG5vdCB0ZXJtaW5hdGU6JXMiCittc2dzdHIgImFsaWFzLXNsaW5nYSBkZXRla3RlcmFkZXM6IGV4cGFuc2lvbmVuIGF2IFwiJXNcIiBhdnNsdXRhcyBhbGRyaWc6JXMiCisKKyM6IGdpdC5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlICVzIGFzIGEgYnVpbHRpbiIKK21zZ3N0ciAia2FuIGludGUgaGFudGVyYSAlcyBzb20gaW5ieWdnZCIKKworIzogZ2l0LmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1c2FnZTogJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorImFudsOkbmRuaW5nOiAlc1xuIgorIlxuIgorCisjOiBnaXQuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwYW5zaW9uIG9mIGFsaWFzICclcycgZmFpbGVkOyAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kXG4iCittc2dzdHIgIiIKKyJleHBhbmRlcmluZyBhdiBhbGlhcyBcIiVzXCIgbWlzc2x5Y2thZGVzOyBcIiVzXCIgw6RyIGludGUgZXR0IGdpdC1rb21tYW5kb1xuIgorCisjOiBnaXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iCittc2dzdHIgIm1pc3NseWNrYWRlcyBrw7ZyYSBrb21tYW5kb3QgXCIlc1wiOiAlc1xuIgorCisjOiBodHRwLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5lZ2F0aXZlIHZhbHVlIGZvciBodHRwLnBvc3RidWZmZXI7IGRlZmF1bHRpbmcgdG8gJWQiCittc2dzdHIgImh0dHAucG9zdGJ1ZmZlciBoYXIgbmVnYXRpdnQgdsOkcmRlOyBhbnbDpG5kZXIgZsO2cnZhbGV0ICVkIgorCisjOiBodHRwLmM6Mzk5Cittc2dpZCAiRGVsZWdhdGlvbiBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4yMi4wIgorbXNnc3RyICJEZWxlZ2VyYWQgc3R5cm5pbmcgc3TDtmRzIGludGUgYXYgY1VSTCA8IDcuMjIuMCIKKworIzogaHR0cC5jOjQwOAorbXNnaWQgIlB1YmxpYyBrZXkgcGlubmluZyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiRmFzdG7DpWxuaW5nIGF2IMO2cHBlbiBueWNrZWwgc3TDtmRzIGludGUgYXYgY1VSTCA8IDcuNDQuMCIKKworIzogaHR0cC5jOjg3NgorbXNnaWQgIkNVUkxTU0xPUFRfTk9fUkVWT0tFIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy40NC4wIgorbXNnc3RyICJDVVJMU1NMT1BUX05PX1JFVk9LRSBzdMO2ZHMgaW50ZSBhdiBjVVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6OTQ5Cittc2dpZCAiUHJvdG9jb2wgcmVzdHJpY3Rpb25zIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4xOS40IgorbXNnc3RyICJQcnRva29sbGJlZ3LDpG5zbmluZ2FyIHN0w7ZkcyBpbnRlIGF2IGNVUkwgPCA3LjE5LjQiCisKKyM6IGh0dHAuYzoxMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuc3VwcG9ydGVkIFNTTCBiYWNrZW5kICclcycuIFN1cHBvcnRlZCBTU0wgYmFja2VuZHM6IgorbXNnc3RyICJTU0wtYmFrw6RuZGFuIFwiJXNcIiBzdMO2ZHMgaW50ZS4gRGVzc2EgU1NMLWJha8OkbmRvciBzdMO2ZHM6IgorCisjOiBodHRwLmM6MTA5MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGNVUkwgd2FzIGJ1aWx0IHdpdGhvdXQgU1NMIGJhY2tlbmRzIgorbXNnc3RyICJLYW4gaW50ZSBzw6R0dGEgU1NMLWJha8OkbmRhIHRpbGwgXCIlc1wiOiBjVVJMIGJ5Z2dkZXMgdXRhbiBTU0wtYmFrw6RuZG9yIgorCisjOiBodHRwLmM6MTA5NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGFscmVhZHkgc2V0IgorbXNnc3RyICJLdW5kZSBpbnRlIHPDpHR0YSBTU0wtYmFrw6RuZGEgdGlsbCBcIiVzXCI6IHJlZGFuIHZhbHQiCisKKyM6IGh0dHAuYzoxOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gdXBkYXRlIHVybCBiYXNlIGZyb20gcmVkaXJlY3Rpb246XG4iCisiICBhc2tlZCBmb3I6ICVzXG4iCisiICAgcmVkaXJlY3Q6ICVzIgorbXNnc3RyICIiCisia2FuIGludGUgdXBwZGF0ZXJhIHVybGJhcyBmcsOlbiBvbWRpcmlnZXJpbjpcbiIKKyIgICAgICAgIGJhZCBvbTogJXNcbiIKKyIgIG9tZGlyaWdlcmluZzogJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcXVvdGluZyBpbiBwdXNoLW9wdGlvbiB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiZmVsYWt0aWcgY2l0ZXJpbmcgcMOlIHbDpHJkZSBmw7ZyIHB1c2gtb3B0aW9uOiBcIiVzXCIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaW5mby9yZWZzIG5vdCB2YWxpZDogaXMgdGhpcyBhIGdpdCByZXBvc2l0b3J5PyIKK21zZ3N0ciAiJXNpbmZvL3JlZnMgaW50ZSBnaWx0aWc6IMOkciBkZXR0YSBldHQgZ2l0LWFya2l2PyIKKworIzogcmVtb3RlLWN1cmwuYzozNjQKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZXhwZWN0ZWQgc2VydmljZSwgZ290IGZsdXNoIHBhY2tldCIKK21zZ3N0ciAib2dpbHRpZ3Qgc3ZhciBmcsOlbiBzZXJ2ZXJuOyBmw7ZydsOkbnRhZGUgdGrDpG5zdCwgZmljayBmbHVzaC1wYWtldCIKKworIzogcmVtb3RlLWN1cmwuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGdvdCAnJXMnIgorbXNnc3RyICJvZ2lsdGlndCBzdmFyIGZyw6VuIHNlcnZlcm47IGZpY2sgXCIlc1wiIgorCisjOiByZW1vdGUtY3VybC5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgbm90IGZvdW5kIgorbXNnc3RyICJhcmtpdmV0IFwiJXNcIiBoaXR0YWRlcyBpbnRlIgorCisjOiByZW1vdGUtY3VybC5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yICclcyciCittc2dzdHIgIkF1dGVudGlzZXJpbmcgbWlzc2x5Y2thZGVzIFwiJXNcIiIKKworIzogcmVtb3RlLWN1cmwuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnOiAlcyIKK21zZ3N0ciAia2FuIGludGUga29tbWEgw6V0IFwiJXNcIjogJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIHRvICVzIgorbXNnc3RyICJvbWRpcmlnZXJhciB0aWxsICVzIgorCisjOiByZW1vdGUtY3VybC5jOjU5MworbXNnaWQgInNob3VsZG4ndCBoYXZlIEVPRiB3aGVuIG5vdCBnZW50bGUgb24gRU9GIgorbXNnc3RyICJib3JkZSBpbnRlIGhhIEVPRiBuw6RyIGludGUgZsO2cnNpa3RpZyBww6UgRU9GIgorCisjOiByZW1vdGUtY3VybC5jOjY3MworbXNnaWQgInVuYWJsZSB0byByZXdpbmQgcnBjIHBvc3QgZGF0YSAtIHRyeSBpbmNyZWFzaW5nIGh0dHAucG9zdEJ1ZmZlciIKK21zZ3N0ciAia3VuZGUgaW50ZSBzcG9sYSB0aWxsYmFrYSBycGMtcG9zdGRhdGEgLSBmw7Zyc8O2ayDDtmthIGh0dHAucG9zdEJ1ZmZlciIKKworIzogcmVtb3RlLWN1cmwuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUlBDIGZhaWxlZDsgJXMiCittc2dzdHIgIlJQQyBtaXNzbHlja2FkZXM7ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjc3MworbXNnaWQgImNhbm5vdCBoYW5kbGUgcHVzaGVzIHRoaXMgYmlnIgorbXNnc3RyICJrYW4gaW50ZSBoYW50ZXJhIHPDpSBzdG9yYSBzw6RuZG5pbmdhciIKKworIzogcmVtb3RlLWN1cmwuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBkZWZsYXRlIGVycm9yICVkIgorbXNnc3RyICJrYW4gaW50ZSBwYWNrYSB1cHAgYW5yb3A7IHpsaWItZGVmbGF0ZS1mZWwgJWQiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZW5kIGVycm9yICVkIgorbXNnc3RyICJrYW4gaW50ZSBwYWNrYSB1cHAgYW5yb3A7IHpsaWItc2x1dGZlbCAlZCIKKworIzogcmVtb3RlLWN1cmwuYzoxMDIzCittc2dpZCAiZHVtYiBodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2FwYWJpbGl0aWVzIgorbXNnc3RyICJkdW0gaHR0cC10cmFuc3BvcnQgc3TDtmRlciBpbnRlIGdydW5kYSBhcmtpdiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDM4Cittc2dpZCAiZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAibW90dGFnbmluZyBtaXNzbHlja2FkZXMuIgorCisjOiByZW1vdGUtY3VybC5jOjEwODYKK21zZ2lkICJjYW5ub3QgZmV0Y2ggYnkgc2hhMSBvdmVyIHNtYXJ0IGh0dHAiCittc2dzdHIgImthbiBpbnRlIGjDpG10YSBtZWQgc2hhMSDDtnZlciBzbWFydCBodHRwIgorCisjOiByZW1vdGUtY3VybC5jOjExMzAgcmVtb3RlLWN1cmwuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAicHJvdG9rb2xsZmVsOiBmw7ZydsOkbnRhZGUgc2hhL3JlZiwgZmljayBcIiVzXCIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE0OCByZW1vdGUtY3VybC5jOjEyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaHR0cCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCAlcyIKK21zZ3N0ciAiaHR0cC10cmFuc3BvcnRlbiBzdMO2ZGVyIGludGUgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE4NAorbXNnaWQgImdpdC1odHRwLXB1c2ggZmFpbGVkIgorbXNnc3RyICJnaXQtaHR0cC1wdXNoIG1pc3NseWNrYWRlcyIKKworIzogcmVtb3RlLWN1cmwuYzoxMzY5Cittc2dpZCAicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPHJlbW90ZT4gWzx1cmw+XSIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IGFudsOkbmRuaW5nOiBnaXQgcmVtb3RlLWN1cmwgPGZqw6Rycj4gWzx1cmw+XSIKKworIzogcmVtb3RlLWN1cmwuYzoxNDAxCittc2dpZCAicmVtb3RlLWN1cmw6IGVycm9yIHJlYWRpbmcgY29tbWFuZCBzdHJlYW0gZnJvbSBnaXQiCittc2dzdHIgInJlbW90ZS1jdXJsOiBmZWwgdmlkIGzDpHNuaW5nIGF2IGtvbW1hbmRvc3Ryw7ZtIGZyw6VuIGdpdCIKKworIzogcmVtb3RlLWN1cmwuYzoxNDA4Cittc2dpZCAicmVtb3RlLWN1cmw6IGZldGNoIGF0dGVtcHRlZCB3aXRob3V0IGEgbG9jYWwgcmVwbyIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IGbDtnJzw7ZrdGUgdGEgZW1vdCB1dGFuIGxva2FsdCBhcmtpdiIKKworIzogcmVtb3RlLWN1cmwuYzoxNDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS1jdXJsOiB1bmtub3duIGNvbW1hbmQgJyVzJyBmcm9tIGdpdCIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IG9rw6RudCBrb21tYW5kbyBcIiVzXCIgZnLDpW4gZ2l0IgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NQorbXNnaWQgImFyZ3MiCittc2dzdHIgImFyZ3VtZW50IgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NgorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgIm9iamVrdGZpbHRyZXJpbmciCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxODMKK21zZ2lkICJleHBpcnktZGF0ZSIKK21zZ3N0ciAiZ2lsdGlnLXRpbGwiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxOTcKK21zZ2lkICJuby1vcCAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSkiCittc2dzdHIgImluZ2VuIGZ1bmt0aW9uIChiYWvDpXRrb21wYXRpYmlsaXRldCkiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMDkKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgInZhciBtZXIgcHJhdHNhbSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxMQorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgInZhciBtZXIgdHlzdCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxNworbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICJhbnbDpG5kIDxuPiBzaWZmcm9yIGbDtnIgYXR0IHZpc2EgU0hBLTE6b3IiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICJodXIgYmxhbmtzdGVnIG9jaCAja29tbWVudGFyZXIgc2thIHRhcyBib3J0IGZyw6VuIG1lZGRlbGFuZGUiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzcKK21zZ2lkICJyZWFkIHBhdGhzcGVjIGZyb20gZmlsZSIKK21zZ3N0ciAibMOkcyBzw7ZrdsOkZ3NhbmdpdmVsc2UgZnLDpW4gZmlsIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM4Cittc2dpZCAiIgorIndpdGggLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHBhdGhzcGVjIGVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJtZWQgLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHPDtmt2w6Rnc2FuZ2l2ZWxzZXIgYXZkZWxhcyBtZWQgTlVMLXRlY2tlbiIKKworIzogcmVmLWZpbHRlci5oOjEwMQorbXNnaWQgImtleSIKK21zZ3N0ciAibnlja2VsIgorCisjOiByZWYtZmlsdGVyLmg6MTAxCittc2dpZCAiZmllbGQgbmFtZSB0byBzb3J0IG9uIgorbXNnc3RyICJmw6RsdG5hbW4gYXR0IHNvcnRlcmEgcMOlIgorCisjOiByZXJlcmUuaDo0NAorbXNnaWQgInVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZXVzZWQgY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZSIKK21zZ3N0ciAidXBwZGF0ZXJhIGluZGV4ZXQgbWVkIMOldGVyYW52w6RuZCBrb25mbGlrdGzDtnNuaW5nIG9tIG3DtmpsaWd0IgorCisjOiB3dC1zdGF0dXMuaDo2NworbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICJIRUFEIGZyw6Vua29wcGxhZCB2aWQgIgorCisjOiB3dC1zdGF0dXMuaDo2OAorbXNnaWQgIkhFQUQgZGV0YWNoZWQgZnJvbSAiCittc2dzdHIgIkhFQUQgZnLDpW5rb3BwbGFkIGZyw6VuICIKKworIzogY29tbWFuZC1saXN0Lmg6NTAKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkzDpGdnIGZpbGlubmVow6VsbCB0aWxsIGluZGV4ZXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUxCittc2dpZCAiQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBmcm9tIGEgbWFpbGJveCIKK21zZ3N0ciAiVGlsbMOkbXBhIGVuIHNlcmllIHBhdGNoYXIgZnLDpW4gZW4gYnJldmzDpWRhIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MgorbXNnaWQgIkFubm90YXRlIGZpbGUgbGluZXMgd2l0aCBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIktvbW1lbnRlcmEgZmlscmFkZXIgbWVkIGluY2hlY2tuaW5nc2luZm9ybWF0aW9uIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MworbXNnaWQgIkFwcGx5IGEgcGF0Y2ggdG8gZmlsZXMgYW5kL29yIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiVGlsbMOkbXBhIGVuIHBhdGNoIHDDpSBmaWxlciBvY2gvZWxsZXIgaW5kZXhldCIKKworIzogY29tbWFuZC1saXN0Lmg6NTQKK21zZ2lkICJJbXBvcnQgYSBHTlUgQXJjaCByZXBvc2l0b3J5IGludG8gR2l0IgorbXNnc3RyICJJbXBvcnRlcmEgZXR0IEdOVSBBcmNoLWFya2l2IHRpbGwgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo1NQorbXNnaWQgIkNyZWF0ZSBhbiBhcmNoaXZlIG9mIGZpbGVzIGZyb20gYSBuYW1lZCB0cmVlIgorbXNnc3RyICJTa2FwYSBldHQgYXJraXYgw7Z2ZXIgZmlsZXIgZnLDpW4gZXR0IG5hbW5naXZldCB0csOkZCIKKworIzogY29tbWFuZC1saXN0Lmg6NTYKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICJBbnbDpG5kIGJpbsOkcnPDtmtuaW5nIGbDtnIgYXR0IGhpdHRhIMOkbmRyaW5nZW4gc29tIGludHJvZHVjZXJhZGUgZXR0IGZlbCIKKworIzogY29tbWFuZC1saXN0Lmg6NTcKK21zZ2lkICJTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUiCittc2dzdHIgIlZpc2EgdmVyc2lvbiBvY2ggZsO2cmZhdHRhcmUgc29tIHNpc3QgbW9kaWZpZXJhZGUgdmFyamUgcmFkIGkgZW4gZmlsIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OAorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICJWaXNhLCBza2FwYSBlbGxlciB0YSBib3J0IGdyZW5hciIKKworIzogY29tbWFuZC1saXN0Lmg6NTkKK21zZ2lkICJNb3ZlIG9iamVjdHMgYW5kIHJlZnMgYnkgYXJjaGl2ZSIKK21zZ3N0ciAiRmx5dHRhIG9iamVrdCBvY2ggcmVmZXJlbnNlciBlZnRlciBhcmtpdiIKKworIzogY29tbWFuZC1saXN0Lmg6NjAKK21zZ2lkICJQcm92aWRlIGNvbnRlbnQgb3IgdHlwZSBhbmQgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVwb3NpdG9yeSBvYmplY3RzIgorbXNnc3RyICIiCisiVmlzYSBpbm5laMOlbGxlciBlbGxlciB0eXAtIG9jaCBzdG9ybGVrc2luZm9ybWF0aW9uIGbDtnIgb2JqZWt0IGkgYXJraXZldCIKKworIzogY29tbWFuZC1saXN0Lmg6NjEKK21zZ2lkICJEaXNwbGF5IGdpdGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24iCittc2dzdHIgIlZpc2EgaW5mb3JtYXRpb24gZnLDpW4gZ2l0YXR0cmlidXRlcyIKKworIzogY29tbWFuZC1saXN0Lmg6NjIKK21zZ2lkICJEZWJ1ZyBnaXRpZ25vcmUgLyBleGNsdWRlIGZpbGVzIgorbXNnc3RyICJGZWxzw7ZrIGdpdGlnbm9yZSAvIGV4a2x1ZGVyaW5ncy1maWxlciIKKworIzogY29tbWFuZC1saXN0Lmg6NjMKK21zZ2lkICJTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzIgorbXNnc3RyICJWaXNhIGthbm9uaXNrYSBuYW1uIG9jaCBlLXBvc3RhZHJlc3NlciBmw7ZyIGtvbnRha3RlciIKKworIzogY29tbWFuZC1saXN0Lmg6NjQKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIkJ5dCB0aWxsIGVuIG55IGdyZW4gZWxsZXIgw6V0ZXJzdMOkbGwgZmlsZXIgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY1Cittc2dpZCAiQ29weSBmaWxlcyBmcm9tIHRoZSBpbmRleCB0byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJLb3BpZXJhIGZpbGVyIGZyw6VuIGluZGV4ZXQgdGlsbCBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY2Cittc2dpZCAiRW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIG5hbWUgaXMgd2VsbCBmb3JtZWQiCittc2dzdHIgIlNlIHRpbGwgYXR0IHJlZmVyZW5zZW4gw6RyIHbDpGxmb3JtYWQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY3Cittc2dpZCAiRmluZCBjb21taXRzIHlldCB0byBiZSBhcHBsaWVkIHRvIHVwc3RyZWFtIgorbXNnc3RyICJIaXR0YSBpbmNoZWNrbmluZ2FyIHNvbSDDpG5udSBpbnRlIGFwcGxpY2VyYXRzIHVwcHN0csO2bXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY4Cittc2dpZCAiQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIkFwcGxpY2VyYSDDpG5kcmluZ2FybmEgaW50cm9kdWNlcmFkZSBhdiBiZWZpbnRsaWdhIGluY2hlY2tuaW5nYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY5Cittc2dpZCAiR3JhcGhpY2FsIGFsdGVybmF0aXZlIHRvIGdpdC1jb21taXQiCittc2dzdHIgIkdyYWZpc2t0IGFsdGVybmF0aXYgdGlsbCBnaXQtY29tbWl0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3MAorbXNnaWQgIlJlbW92ZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJUYSBib3J0IG9zcMOlcmFkZSBmaWxlciBmcsOlbiBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcxCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICJLbG9uYSBldHQgYXJraXYgdGlsbCBlbiBueSBrYXRhbG9nIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MgorbXNnaWQgIkRpc3BsYXkgZGF0YSBpbiBjb2x1bW5zIgorbXNnc3RyICJWaXNhIGRhdGEgaSBrb2x1bW5lciIKKworIzogY29tbWFuZC1saXN0Lmg6NzMKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUHJvdG9rb2xsZsO2ciDDpG5kcmluZ2FyIGkgYXJraXZldCIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIlNrcml2IG9jaCB2ZXJpZmllcmEgR2l0LWluY2hlY2tuaW5nc2dyYWZmaWxlciIKKworIzogY29tbWFuZC1saXN0Lmg6NzUKK21zZ2lkICJDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiU2thcGEgZXR0IG55dHQgaW5jaGVja25pbmdzb2JqZWt0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgIkzDpHMgb2NoIHNrcml2IGFsdGVybmF0aXYgZsO2ciBhcmtpdiBlbGxlciBnbG9iYWx0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NworbXNnaWQgIkNvdW50IHVucGFja2VkIG51bWJlciBvZiBvYmplY3RzIGFuZCB0aGVpciBkaXNrIGNvbnN1bXB0aW9uIgorbXNnc3RyICJSw6RrbmEgYW50YWwgb3BhY2thZGUgb2JqZWt0IG9jaCBtw6RuZ2QgZGlza3V0cnltbWUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc4Cittc2dpZCAiUmV0cmlldmUgYW5kIHN0b3JlIHVzZXIgY3JlZGVudGlhbHMiCittc2dzdHIgIkjDpG10YSBvY2ggc3BhcmEgYW52w6RuZGFycmVmZXJlbnNlciIKKworIzogY29tbWFuZC1saXN0Lmg6NzkKK21zZ2lkICJIZWxwZXIgdG8gdGVtcG9yYXJpbHkgc3RvcmUgcGFzc3dvcmRzIGluIG1lbW9yeSIKK21zZ3N0ciAiSGrDpGxwcHJvZ3JhbSBmw7ZyIGF0dCB0aWxsZsOkbGxpZ3QgbGFncmEgbMO2c2Vub3JkIGkgbWlubmV0IgorCisjOiBjb21tYW5kLWxpc3QuaDo4MAorbXNnaWQgIkhlbHBlciB0byBzdG9yZSBjcmVkZW50aWFscyBvbiBkaXNrIgorbXNnc3RyICJIasOkbHBwcm9ncmFtIGbDtnIgYXR0IGxhZ3JhIGFudsOkbmRhcnJlZmVyZW5zZXIgcMOlIGRpc2siCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgxCittc2dpZCAiRXhwb3J0IGEgc2luZ2xlIGNvbW1pdCB0byBhIENWUyBjaGVja291dCIKK21zZ3N0ciAiRXhwb3J0ZXJhIGVuIGVua2VsIGluY2hlY2tuaW5nIGkgZW4gQ1ZTLXV0Y2hlY2tuaW5nIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MgorbXNnaWQgIlNhbHZhZ2UgeW91ciBkYXRhIG91dCBvZiBhbm90aGVyIFNDTSBwZW9wbGUgbG92ZSB0byBoYXRlIgorbXNnc3RyICJSw6RkZGEgZGluYSBkYXRhIHV0IHVyIGFuZHJhIFNDTSBmb2xrIMOkbHNrYXIgYXR0IGhhdGEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgzCittc2dpZCAiQSBDVlMgc2VydmVyIGVtdWxhdG9yIGZvciBHaXQiCittc2dzdHIgIkVuIENWUy1zZXJ2ZXJlbXVsYXRvciBmw7ZyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODQKK21zZ2lkICJBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHaXQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJFbiByaWt0aWd0IGVua2VsIHNlcnZlciBmw7ZyIEdpdC1hcmtpdiIKKworIzogY29tbWFuZC1saXN0Lmg6ODUKK21zZ2lkICJHaXZlIGFuIG9iamVjdCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgYmFzZWQgb24gYW4gYXZhaWxhYmxlIHJlZiIKK21zZ3N0ciAiR2UgZXR0IG9iamVrdCBhbnbDpG5kYXJsw6RzYmFyYSBuYW1uIGJhc2VyYWRlIHDDpSBlbiB0aWxsZ8OkbmdsaWcgcmVmZXJlbnMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg2Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiVmlzYSDDpG5kcmluZ2FyIG1lbGxhbiBpbmNoZWNrbmluZ2FyLCBtZWQgYXJiZXRza2F0YWxvZ2VuLCBvc3YiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg3Cittc2dpZCAiQ29tcGFyZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IgorbXNnc3RyICJKw6RtZsO2ciBmaWxlciBpIGFyYmV0c2thdGFsb2dlbiBvY2ggaW5kZXhldCIKKworIzogY29tbWFuZC1saXN0Lmg6ODgKK21zZ2lkICJDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4IgorbXNnc3RyICJKw6RtZsO2ciBlbiB0csOkZCBtZWQgYXJiZXRza2F0YWxvZ2VuIGVsbGVyIGluZGV4ZXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg5Cittc2dpZCAiQ29tcGFyZXMgdGhlIGNvbnRlbnQgYW5kIG1vZGUgb2YgYmxvYnMgZm91bmQgdmlhIHR3byB0cmVlIG9iamVjdHMiCittc2dzdHIgIlZpc2FyIGlubmVow6VsbCBvY2ggbMOkZ2UgZsO2ciBibG9iYmFyIHNvbSBoaXR0YXRzIHZpYSB0dsOlIHRyw6Rkb2JqZWt0IgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAiVmlzYSDDpG5kcmluZ2FyIG1lZCB2YW5saWdhIGRpZmYtdmVya3R5ZyIKKworIzogY29tbWFuZC1saXN0Lmg6OTEKK21zZ2lkICJHaXQgZGF0YSBleHBvcnRlciIKK21zZ3N0ciAiRXhwb3J0ZXJhcmUgZsO2ciBHaXQtZGF0YSIKKworIzogY29tbWFuZC1saXN0Lmg6OTIKK21zZ2lkICJCYWNrZW5kIGZvciBmYXN0IEdpdCBkYXRhIGltcG9ydGVycyIKK21zZ3N0ciAiQmFrw6RuZGEgZsO2ciBzbmFiYmEgR2l0LWRhdGFpbXBvcnRlcmFyZSIKKworIzogY29tbWFuZC1saXN0Lmg6OTMKK21zZ2lkICJEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJIw6RtdGEgb2JqZWt0IG9jaCByZWZlcmVuc2VyIGZyw6VuIGFubmF0IGFya2l2IgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJUYSBlbW90IHNha25hZGUgb2JqZWt0IGZyw6VuIGFubmF0IGFya2l2IgorCisjOiBjb21tYW5kLWxpc3QuaDo5NQorbXNnaWQgIlJld3JpdGUgYnJhbmNoZXMiCittc2dzdHIgIlNrcml2IG9tIGdyZW5hciIKKworIzogY29tbWFuZC1saXN0Lmg6OTYKK21zZ2lkICJQcm9kdWNlIGEgbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIlNrYXBhIGluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciBlbiBzYW1tYW5zbGFnbmluZyIKKworIzogY29tbWFuZC1saXN0Lmg6OTcKK21zZ2lkICJPdXRwdXQgaW5mb3JtYXRpb24gb24gZWFjaCByZWYiCittc2dzdHIgIlZpc2EgaW5mb3JtYXRpb24gZsO2ciB2YXJqZSByZWZlcmVucyIKKworIzogY29tbWFuZC1saXN0Lmg6OTgKK21zZ2lkICJQcmVwYXJlIHBhdGNoZXMgZm9yIGUtbWFpbCBzdWJtaXNzaW9uIgorbXNnc3RyICJGw7ZyYmVyZWQgcGF0Y2hhciBmw7ZyIGluc8OkbmRuaW5nIHZpYSBlLXBvc3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk5Cittc2dpZCAiVmVyaWZpZXMgdGhlIGNvbm5lY3Rpdml0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlIgorbXNnc3RyICJCZWtyw6RmdGFyIGtvbm5la3Rpdml0ZXQgb2NoIHZhbGlkaXRldCBmw7ZyIG9iamVrdGV0IGkgZGF0YWJhc2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDAKK21zZ2lkICJDbGVhbnVwIHVubmVjZXNzYXJ5IGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiU3TDpGRhIG9uw7ZkaWdhIGZpbGVyIG9jaCBvcHRpbWVyYSBkZXQgbG9rYWxhIGFya2l2ZXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMQorbXNnaWQgIkV4dHJhY3QgY29tbWl0IElEIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIHVzaW5nIGdpdC1hcmNoaXZlIgorbXNnc3RyICJIw6RtdGEgaW5jaGVja25pbmdzLWlkIGZyw6VuIGV0dCBhcmtpdiBza2FwYXQgbWVkIGdpdC1hcmNoaXZlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDIKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIlZpc2EgcmFkZXIgc29tIG1vdHN2YXJhciBtw7Zuc3RlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTAzCittc2dpZCAiQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdCIKK21zZ3N0ciAiRXR0IHBvcnRhYmVsdCBncmFmaXNrdCBncsOkbnNzbml0dCBmw7ZyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA0Cittc2dpZCAiQ29tcHV0ZSBvYmplY3QgSUQgYW5kIG9wdGlvbmFsbHkgY3JlYXRlcyBhIGJsb2IgZnJvbSBhIGZpbGUiCittc2dzdHIgIkJlcsOka25hIG9iamVrdC1pZCBvY2ggbcO2amxpZ2VuIHNrYXBhIGVuIGJsb2IgZnLDpW4gZW4gZmlsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDUKK21zZ2lkICJEaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gYWJvdXQgR2l0IgorbXNnc3RyICJWaXNhIGhqw6RscGluZm9ybWF0aW9uIG9tIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA2Cittc2dpZCAiU2VydmVyIHNpZGUgaW1wbGVtZW50YXRpb24gb2YgR2l0IG92ZXIgSFRUUCIKK21zZ3N0ciAiU2VydmVyc2lkZWltcGxlbWVudGF0aW9uIGF2IEdpdCDDtnZlciBIVFRQIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDcKK21zZ2lkICJEb3dubG9hZCBmcm9tIGEgcmVtb3RlIEdpdCByZXBvc2l0b3J5IHZpYSBIVFRQIgorbXNnc3RyICJIw6RtdGEgb2JqZWt0IG9jaCByZWZlcmVuc2VyIGZyw6VuIGFubmF0IEdpdC1hcmtpdiDDtnZlciBIVFRQIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDgKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBIVFRQL0RBViB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIlPDpG5kIG9iamVrdCDDtnZlciBIVFRQL0RBViB0aWxsIGV0dCBhbm5hdCBhcmtpdiIKKworIzogY29tbWFuZC1saXN0Lmg6MTA5Cittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBmcm9tIHN0ZGluIHRvIGFuIElNQVAgZm9sZGVyIgorbXNnc3RyICJTw6RuZCBlbiBzYW1saW5nIHBhdGNoYXIgZnLDpW4gc3RkaW4gdGlsbCBlbiBJTUFQLW1hcHAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIlNLYXBhIHBhY2staW5kZXhmaWxlciBmw7ZyIGV0dCBiZWZpbnRsaWd0IHBhY2thdCBhcmtpdiIKKworIzogY29tbWFuZC1saXN0Lmg6MTExCittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIlNrYXBhIHRvbXQgR2l0LWFya2l2IGVsbGVyIG9taW5pdGllcmEgZXR0IGJlZmludGxpZ3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMgorbXNnaWQgIkluc3RhbnRseSBicm93c2UgeW91ciB3b3JraW5nIHJlcG9zaXRvcnkgaW4gZ2l0d2ViIgorbXNnc3RyICJPbWVkZWxiYXJ0IGJsw6RkZHJhIGkgZGluIGFyYmV0c2thdGFsb2cgbWVkIGdpdHdlYiIKKworIzogY29tbWFuZC1saXN0Lmg6MTEzCittc2dpZCAiQWRkIG9yIHBhcnNlIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gaW4gY29tbWl0IG1lc3NhZ2VzIgorbXNnc3RyICIiCisiTMOkZ2cgdGlsbCBlbGxlciB0b2xrYSBzdHJ1a3R1cmVyYWQgaW5mb3JtYXRpb24gaSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTE0Cittc2dpZCAiVGhlIEdpdCByZXBvc2l0b3J5IGJyb3dzZXIiCittc2dzdHIgIkJsw6RkZHJhcmVuIGbDtnIgR2l0LWFya2l2IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTUKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJWaXNhIGluY2hlY2tuaW5nc2xvZ2dhciIKKworIzogY29tbWFuZC1saXN0Lmg6MTE2Cittc2dpZCAiU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBpbiB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIlZpc2EgaW5mb3JtYXRpb24gb20gZmlsZXIgaSBpbmRleGV0IG9jaCBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNworbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIHJlbW90ZSByZXBvc2l0b3J5IgorbXNnc3RyICJMaXN0YSByZWZlcmVuc2VyIGkgZXR0IGZqw6RycmFya2l2IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTgKK21zZ2lkICJMaXN0IHRoZSBjb250ZW50cyBvZiBhIHRyZWUgb2JqZWN0IgorbXNnc3RyICJWaXNhIGlubmVow6VsbGV0IGkgZXR0IHRyw6Rkb2JqZWt0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTkKK21zZ2lkICJFeHRyYWN0cyBwYXRjaCBhbmQgYXV0aG9yc2hpcCBmcm9tIGEgc2luZ2xlIGUtbWFpbCBtZXNzYWdlIgorbXNnc3RyICJIw6RtdGEgcGF0Y2ggb2NoIMOkZ2Fyc2thcCBmcsOlbiBldHQgZW5rZWx0IGUtcG9zdG1lZGRlbGFuZGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMAorbXNnaWQgIlNpbXBsZSBVTklYIG1ib3ggc3BsaXR0ZXIgcHJvZ3JhbSIKK21zZ3N0ciAiRW5rZWx0IHByb2dyYW0gZsO2ciBhdHQgZGVsYSBlbiBVTklYIG1ib3giCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMQorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICJTbMOlIGlob3AgdHbDpSBlbGxlciBmbGVyYSB1dHZlY2tsaW5nc2hpc3RvcmllciIKKworIzogY29tbWFuZC1saXN0Lmg6MTIyCittc2dpZCAiRmluZCBhcyBnb29kIGNvbW1vbiBhbmNlc3RvcnMgYXMgcG9zc2libGUgZm9yIGEgbWVyZ2UiCittc2dzdHIgIkhpdHRhIGVuIHPDpSBicmEgYW5mYWRlciBzb20gbcO2amxpZ3QgZsO2ciBzYW1tYW5zbGFnbmluZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTIzCittc2dpZCAiUnVuIGEgdGhyZWUtd2F5IGZpbGUgbWVyZ2UiCittc2dzdHIgIkvDtnIgZW4gdHJldsOkZ3MtZmlsc2FtbWFuc2xhZ25pbmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNAorbXNnaWQgIlJ1biBhIG1lcmdlIGZvciBmaWxlcyBuZWVkaW5nIG1lcmdpbmciCittc2dzdHIgIkvDtnIgZW4gc2FtbWFuc2xhZ25pbmcgZsO2ciBmaWxlciBzb20gYmVow7Z2ZXIgZGV0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjUKK21zZ2lkICJUaGUgc3RhbmRhcmQgaGVscGVyIHByb2dyYW0gdG8gdXNlIHdpdGggZ2l0LW1lcmdlLWluZGV4IgorbXNnc3RyICJGw7ZydmFsdCBoasOkbHBwcm9ncmFtIGF0dCBhbnbDpG5kYSB0aWxsc2FtbWFucyBtZWQgZ2l0LW1lcmdlLWluZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjYKK21zZ2lkICJSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0ciAiS8O2ciB2ZXJrdHlnIGbDtnIgbMO2c25pbmcgYXYgc2FtbWFuc2xhZ25pbmdza29uZmxpa3RlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTI3Cittc2dpZCAiU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleCIKK21zZ3N0ciAiVmlzYSB0cmV2w6Rnc3NhbW1hbnNsYWduaW5nIHV0YW4gYXR0IHLDtnJhIGluZGV4ZXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgbXVsdGktcGFjay1pbmRleGVzIgorbXNnc3RyICJTa3JpdiBvY2ggdmVyaWZpZXJhIG11bHRpLXBhY2staW5kZXgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOQorbXNnaWQgIkNyZWF0ZXMgYSB0YWcgb2JqZWN0IgorbXNnc3RyICJTa2FwYXIgZXR0IHRhZ2dvYmpla3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMAorbXNnaWQgIkJ1aWxkIGEgdHJlZS1vYmplY3QgZnJvbSBscy10cmVlIGZvcm1hdHRlZCB0ZXh0IgorbXNnc3RyICJCeWdnIGV0dCB0csOkZG9iamVrdCBmcsOlbiBscy10cmVlLWZvcm1hdGVyYWQgdGV4dCIKKworIzogY29tbWFuZC1saXN0Lmg6MTMxCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICJGbHl0dGEgZWxsZXIgYnl0IG5hbW4gcMOlIGVuIGZpbCwga2F0YWxvZyBlbGxlciBzeW1ib2xpc2sgbMOkbmsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMgorbXNnaWQgIkZpbmQgc3ltYm9saWMgbmFtZXMgZm9yIGdpdmVuIHJldnMiCittc2dzdHIgIkhpdHRhIHN5bWJvbGlza2EgbmFtbiBmw7ZyIGdpdm5hIHJlZmVyZW5zZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMworbXNnaWQgIkFkZCBvciBpbnNwZWN0IG9iamVjdCBub3RlcyIKK21zZ3N0ciAiTMOkZ2cgdGlsbCBlbGxlciBpbnNwZWt0ZXJhIG9iamVrdGFudGVja25pbmdhciIKKworIzogY29tbWFuZC1saXN0Lmg6MTM0Cittc2dpZCAiSW1wb3J0IGZyb20gYW5kIHN1Ym1pdCB0byBQZXJmb3JjZSByZXBvc2l0b3JpZXMiCittc2dzdHIgIkltcG9ydGVyYSBmcsOlbiBlbGxlciBzw6RuZCB0aWxsIFBlcmZvcmNlLWFya2l2IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzUKK21zZ2lkICJDcmVhdGUgYSBwYWNrZWQgYXJjaGl2ZSBvZiBvYmplY3RzIgorbXNnc3RyICJTa2FwYSBldHQgcGFja2F0IGFya2l2IG1lZCBvYmpla3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNgorbXNnaWQgIkZpbmQgcmVkdW5kYW50IHBhY2sgZmlsZXMiCittc2dzdHIgIkhpdHRhIHJlZHVuZGFudGEgcGFjay1maWxlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTM3Cittc2dpZCAiUGFjayBoZWFkcyBhbmQgdGFncyBmb3IgZWZmaWNpZW50IHJlcG9zaXRvcnkgYWNjZXNzIgorbXNnc3RyICJQYWNrYSBodXZ1ZGVuIG9jaCB0YWdnYXIgZsO2ciBlZmZla3RpdiBhcmtpdsOldGtvbXN0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzgKK21zZ2lkICJSb3V0aW5lcyB0byBoZWxwIHBhcnNpbmcgcmVtb3RlIHJlcG9zaXRvcnkgYWNjZXNzIHBhcmFtZXRlcnMiCittc2dzdHIgIiIKKyJSdXRpbmVyIGbDtnIgYXR0IGfDtnJhIGRldCBsw6R0dGFyZSBhdHQgdG9sa2Egw6V0a29tc3RwYXJhbWV0cmFyIGbDtnIgZmrDpHJyYXJraXYiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOQorbXNnaWQgIkNvbXB1dGUgdW5pcXVlIElEIGZvciBhIHBhdGNoIgorbXNnc3RyICJCZXLDpGtuYSB1bmlrIElEIGbDtnIgZW4gcGF0Y2giCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MAorbXNnaWQgIlBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiVGEgYm9ydCBhbGxhIG9uw6ViYXJhIG9iamVrdCBmcsOlbiBvYmpla3RkYXRhYmFzZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MQorbXNnaWQgIlJlbW92ZSBleHRyYSBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgaW4gcGFjayBmaWxlcyIKK21zZ3N0ciAiVGEgYm9ydCBleHRyYW9iamVrdCBzb20gcmVkYW4gZmlubnMgaSBwYWNrLWZpbGVybmEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MgorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiSMOkbXRhIGZyw6VuIG9jaCBpbnRlZ3JlcmEgbWVkIGFubmF0IGFya2l2IGVsbGVyIGVuIGxva2FsIGdyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MworbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiVXBwZGF0ZXJhIGZqw6Ryci1yZWZlcmVuc2VyIG9jaCB0aWxsaMO2cmFuZGUgb2JqZWt0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDQKK21zZ2lkICJBcHBsaWVzIGEgcXVpbHQgcGF0Y2hzZXQgb250byB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgIlRpbGzDpG1wYXIgZW4gcXVpbHQtcGF0Y2h1cHBzw6R0dG5pbmcgcMOlIGFrdGl2IGdyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NQorbXNnaWQgIkNvbXBhcmUgdHdvIGNvbW1pdCByYW5nZXMgKGUuZy4gdHdvIHZlcnNpb25zIG9mIGEgYnJhbmNoKSIKK21zZ3N0ciAiSsOkbWbDtnIgdHbDpSBpbmNoZWNrbmluZ3NpbnRlcnZhbGwgKGR2cy4gdHbDpSB2ZXJzaW9uZXIgYXYgZW4gZ3JlbikiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NgorbXNnaWQgIlJlYWRzIHRyZWUgaW5mb3JtYXRpb24gaW50byB0aGUgaW5kZXgiCittc2dzdHIgIkzDpHNlciB0csOkZGluZm9ybWF0aW9uIGluIGkgaW5kZXhldCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ3Cittc2dpZCAiUmVhcHBseSBjb21taXRzIG9uIHRvcCBvZiBhbm90aGVyIGJhc2UgdGlwIgorbXNnc3RyICJBcHBsaWNlcmEgaW5jaGVja25pbmdhciBww6Ugbnl0dCBvdmFucMOlIGVuIGFubmFuIGJhc3RvcHAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OAorbXNnaWQgIlJlY2VpdmUgd2hhdCBpcyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiVGEgZW1vdCBkZXQgc29tIHPDpG5kcyB0aWxsIGFya2l2ZXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OQorbXNnaWQgIk1hbmFnZSByZWZsb2cgaW5mb3JtYXRpb24iCittc2dzdHIgIkhhbnRlcmEgcmVmZXJlbnNsb2dnLWluZm9ybWF0aW9uIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTAKK21zZ2lkICJNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJIYW50ZXJhIHVwcHPDpHR0bmluZ2VuIHNww6VyYWRlIGFya2l2IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTEKK21zZ2lkICJQYWNrIHVucGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5IgorbXNnc3RyICJQYWNrYSBvcGFja2FkZSBvYmpla3QgaSBldHQgYXJraXYiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MgorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIHJlZnMgdG8gcmVwbGFjZSBvYmplY3RzIgorbXNnc3RyICJTa2FwYSwgdmlzYSwgdGEgYm9ydCByZWZlcmVuc2VyIGbDtnIgYXR0IGVyc8OkdHRhIG9iamVrdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTUzCittc2dpZCAiR2VuZXJhdGVzIGEgc3VtbWFyeSBvZiBwZW5kaW5nIGNoYW5nZXMiCittc2dzdHIgIlNrYXBhciBlbiBzYW1tYW5mYXR0bmluZyBhdiB2w6RudGFuZGUgw6RuZHJpbmdhciIKKworIzogY29tbWFuZC1saXN0Lmg6MTU0Cittc2dpZCAiUmV1c2UgcmVjb3JkZWQgcmVzb2x1dGlvbiBvZiBjb25mbGljdGVkIG1lcmdlcyIKK21zZ3N0ciAiw4V0ZXJhbnbDpG5kIHNwYXJhZCBsw7ZzbmluZyBhdiBzYW1tYW5zbGFnbmluZ3Nrb25mbGlrdGVyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTUKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwgYWt0dWVsbCBIRUFEIHRpbGwgYW5naXZldCB0aWxsc3TDpW5kIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTYKK21zZ2lkICJSZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwgZmlsZXIgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NworbXNnaWQgIlJldmVydCBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIsOFdGVyc3TDpGxsIG7DpWdyYSBiZWZpbnRsaWdhIGluY2hlY2tuaW5nYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OAorbXNnaWQgIkxpc3RzIGNvbW1pdCBvYmplY3RzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiVmlzYSBpbmNoZWNrbmluZ3NvYmpla3QgaSBvbXbDpG5kIGtyb25vbG9naXNrIG9yZG5pbmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OQorbXNnaWQgIlBpY2sgb3V0IGFuZCBtYXNzYWdlIHBhcmFtZXRlcnMiCittc2dzdHIgIlBsb2NrYSB1dCBvY2ggbWFzc2VyYSBwYXJhbWV0cmFyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjAKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiVGEgYm9ydCBmaWxlciBmcsOlbiBhcmJldHNrYXRhbG9nZW4gb2NoIGZyw6VuIGluZGV4ZXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MQorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgYXMgZW1haWxzIgorbXNnc3RyICJTw6RuZCBlbiB1cHBzw6R0dG5pbmcgcGF0Y2hhciBzb20gZS1wb3N0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjIKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBHaXQgcHJvdG9jb2wgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJTw6RuZCBvYmpla3Qgw7Z2ZXIgR2l0LXByb3Rva29sbGV0IHRpbGwgYW5uYXQgYXJraXYiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MworbXNnaWQgIlJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdpdC1vbmx5IFNTSCBhY2Nlc3MiCittc2dzdHIgIkJlZ3LDpG5zYXQgaW5sb2dnbmluZ3Nza2FsIGbDtnIgU1NILcOldGtvbXN0IHRpbGwgYmFyYSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NAorbXNnaWQgIlN1bW1hcml6ZSAnZ2l0IGxvZycgb3V0cHV0IgorbXNnc3RyICJTdW1tZXJhIFwiZ2l0IGxvZ1wiLXV0ZGF0YSIKKworIzogY29tbWFuZC1saXN0Lmg6MTY1Cittc2dpZCAiU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMiCittc2dzdHIgIlZpc2Egb2xpa2Egc29ydGVycyBvYmpla3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NgorbXNnaWQgIlNob3cgYnJhbmNoZXMgYW5kIHRoZWlyIGNvbW1pdHMiCittc2dzdHIgIlZpc2EgZ3JlbmFyIG9jaCBkZXJhcyBpbmNoZWNrbmluZ2FyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjcKK21zZ2lkICJTaG93IHBhY2tlZCBhcmNoaXZlIGluZGV4IgorbXNnc3RyICJTa2FwYSBwYWNrYXQgYXJraXZpbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY4Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiVmlzYSByZWZlcmVuc2VyIGkgZXR0IGxva2FsdCBhcmtpdiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY5Cittc2dpZCAiR2l0J3MgaTE4biBzZXR1cCBjb2RlIGZvciBzaGVsbCBzY3JpcHRzIgorbXNnc3RyICJHaXQ6cyBpMThuLXN0YXJ0a29kIGbDtnIgc2thbHNrcmlwdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTcwCittc2dpZCAiQ29tbW9uIEdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZSIKK21zZ3N0ciAiR2VtZW5zYW0gc2tyaXB0c3RhcnRrb2QgZsO2ciBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MQorbXNnaWQgIkluaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJJbml0aWVyYSBvY2ggbW9kaWZpZXJhIHNwYXJzZS1jaGVja291dCIKKworIzogY29tbWFuZC1saXN0Lmg6MTcyCittc2dpZCAiU3Rhc2ggdGhlIGNoYW5nZXMgaW4gYSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeSBhd2F5IgorbXNnc3RyICJTcGFyYSB1bmRhbiDDpG5kcmluZ2FyIGkgZW4gbG9ydGlnIGFyYmV0c2thdGFsb2ciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MworbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBzdGFnaW5nIGFyZWEiCittc2dzdHIgIkzDpGdnIGZpbGlubmVow6VsbGV0IHRpbGwgaW5kZXhldCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc0Cittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAiVmlzYSBzdGF0dXMgZsO2ciBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NQorbXNnaWQgIlJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIgorbXNnc3RyICJUYSBib3J0IG9uw7ZkaWdhIGJsYW5rc3RlZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTc2Cittc2dpZCAiSW5pdGlhbGl6ZSwgdXBkYXRlIG9yIGluc3BlY3Qgc3VibW9kdWxlcyIKK21zZ3N0ciAiSW5pdGllcmEsIHVwcGRhdGVyYSBlbGxlciBpbnNwZWt0ZXJhIHVuZGVybW9kdWxlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTc3Cittc2dpZCAiQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhbmQgR2l0IgorbXNnc3RyICJEdWJiZWxyaWt0YWQgdmVya2FuIG1lbGxhbiBldHQgU3VidmVyc2lvbi1hcmtpdiBvY2ggR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzgKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMiCittc2dzdHIgIkJ5dCBncmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzkKK21zZ2lkICJSZWFkLCBtb2RpZnkgYW5kIGRlbGV0ZSBzeW1ib2xpYyByZWZzIgorbXNnc3RyICJMw6RzLCBtb2RpZmllcmEgZWxsZXIgdGEgYm9ydCBzeW1ib2xpc2sgcmVmZXJlbnMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MAorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIG9yIHZlcmlmeSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHIgorbXNnc3RyICJTa2FwYSwgdmlzYSwgdGEgYm9ydCBlbGxlciB2ZXJpZmllcmEgR1BHLXNpZ25lcmF0IHRhZ2dvYmpla3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MQorbXNnaWQgIkNyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGEgYmxvYidzIGNvbnRlbnRzIgorbXNnc3RyICJTa2FwYXIgdGVtcG9yw6RyYSBmaWxlciBtZWQgaW5uZWjDpWxsZXQgZnLDpW4gZW4gYmxvYiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgyCittc2dpZCAiVW5wYWNrIG9iamVjdHMgZnJvbSBhIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICJQYWNrYSB1cHAgb2JqZWt0IGZyw6VuIGV0dCBwYWthdCBhcmtpdiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgzCittc2dpZCAiUmVnaXN0ZXIgZmlsZSBjb250ZW50cyBpbiB0aGUgd29ya2luZyB0cmVlIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiUmVnaXN0cmVyYSBmaWxpbm5laMOlbGxldCBmcsOlbiBhcmJldHNrYXRhbG9nZW4gaSBpbmRleGV0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxODQKK21zZ2lkICJVcGRhdGUgdGhlIG9iamVjdCBuYW1lIHN0b3JlZCBpbiBhIHJlZiBzYWZlbHkiCittc2dzdHIgIlVwcGRhdGVyYSBvYmpla3RuYW1uZXQgaSBlbiByZWZlcmVucyBww6UgZXR0IHPDpGtlcnQgc8OkdHQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NQorbXNnaWQgIlVwZGF0ZSBhdXhpbGlhcnkgaW5mbyBmaWxlIHRvIGhlbHAgZHVtYiBzZXJ2ZXJzIgorbXNnc3RyICJVcHBkYXRlcmEgdGlsbMOkZ2dzaW5mb2ZpbCBmw7ZyIGF0dCBoasOkbHBhIGR1bW1hIHNlcnZyYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NgorbXNnaWQgIlNlbmQgYXJjaGl2ZSBiYWNrIHRvIGdpdC1hcmNoaXZlIgorbXNnc3RyICJTw6RuZCBhcmtpdmV0IHRpbGxiYWthIHRpbGwgZ2l0LWFyY2hpdmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NworbXNnaWQgIlNlbmQgb2JqZWN0cyBwYWNrZWQgYmFjayB0byBnaXQtZmV0Y2gtcGFjayIKK21zZ3N0ciAiU8OkbmQgcGFja2FkZSBvYmpla3QgdGlsbGJha2EgdGlsbCBnaXQtZmV0Y2gtcGFjayIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiU2hvdyBhIEdpdCBsb2dpY2FsIHZhcmlhYmxlIgorbXNnc3RyICJWaXNhIGVuIGxvZ2lzayBHaXQtdmFyaWFiZWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OQorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIGNvbW1pdHMiCittc2dzdHIgIktvbnRyb2xsZXJhIEdQRy1zaWduYXR1cmVyIGbDtnIgaW5jaGVja25pbmdhciIKKworIzogY29tbWFuZC1saXN0Lmg6MTkwCittc2dpZCAiVmFsaWRhdGUgcGFja2VkIEdpdCBhcmNoaXZlIGZpbGVzIgorbXNnc3RyICJCZWtyw6RmdGEgcGFja2FkZSBHaXQtYXJraXZmaWxlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTkxCittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgdGFncyIKK21zZ3N0ciAiS29udHJvbGxlcmEgR1BHLXNpZ25hdHVyZXIgaSB0YWdnYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MgorbXNnaWQgIkdpdCB3ZWIgaW50ZXJmYWNlICh3ZWIgZnJvbnRlbmQgdG8gR2l0IHJlcG9zaXRvcmllcykiCittc2dzdHIgIkdpdC13ZWJiZ3LDpG5zc25pdHQgKHdlYmJmcmFtw6RuZGEgZsO2ciBHaXQtYXJraXYpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTMKK21zZ2lkICJTaG93IGxvZ3Mgd2l0aCBkaWZmZXJlbmNlIGVhY2ggY29tbWl0IGludHJvZHVjZXMiCittc2dzdHIgIlZpc2EgbG9nZ2FyIG1lZCBkaWZmZXJlbnNlciB2YXJqZSBpbmNoZWNrbmluZyBpbnRyb2R1Y2VyYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NAorbXNnaWQgIk1hbmFnZSBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIgorbXNnc3RyICJIYW50ZXJhIHl0dGVybGlnYXJlIGFyYmV0c2thdGFsb2dlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTk1Cittc2dpZCAiQ3JlYXRlIGEgdHJlZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAiU2thcGEgZXR0IHRyw6Rkb2JqZWt0IGZyw6VuIGFrdHVlbGx0IGluZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTYKK21zZ2lkICJEZWZpbmluZyBhdHRyaWJ1dGVzIHBlciBwYXRoIgorbXNnc3RyICJEZWZpbmllcmFyIGF0dHJpYnV0IHBlciBzw7ZrdsOkZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTk3Cittc2dpZCAiR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zIgorbXNnc3RyICJHaXRzIGtvbW1hbmRvcmFkc2dyw6Ruc3NuaXR0IG9jaCAta29udmVudGlvbmVyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTgKK21zZ2lkICJBIEdpdCBjb3JlIHR1dG9yaWFsIGZvciBkZXZlbG9wZXJzIgorbXNnc3RyICJHcnVuZGzDpGdnYW5kZSBHaXQtaGFuZGxlZG5pbmcgZsO2ciB1dHZlY2tsYXJlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTkKK21zZ2lkICJHaXQgZm9yIENWUyB1c2VycyIKK21zZ3N0ciAiR2l0IGbDtnIgQ1ZTLWFudsOkbmRhcmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMAorbXNnaWQgIlR3ZWFraW5nIGRpZmYgb3V0cHV0IgorbXNnc3RyICJKdXN0cmVhIGRpZmYtdXRkYXRhIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDEKK21zZ2lkICJBIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcyBmb3IgRXZlcnlkYXkgR2l0IgorbXNnc3RyICJFdHQgYW52w6RuZGJhcnQgbWluc3RhIHVwcHPDpHR0bmluZyBrb21tYW5kb24gZsO2ciB2YXJkYWdzLUdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjAyCittc2dpZCAiQSBHaXQgR2xvc3NhcnkiCittc2dzdHIgIkVuIEdpdC1vcmRsaXN0YSIKKworIzogY29tbWFuZC1saXN0Lmg6MjAzCittc2dpZCAiSG9va3MgdXNlZCBieSBHaXQiCittc2dzdHIgIktyb2thciBzb20gYW52w6RuZHMgYXYgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDQKK21zZ2lkICJTcGVjaWZpZXMgaW50ZW50aW9uYWxseSB1bnRyYWNrZWQgZmlsZXMgdG8gaWdub3JlIgorbXNnc3RyICJBbmdlIGF2c2lrdGxpZ2VuIG9zcMOlcmFkZSBmaWxlciBhdHQgaWdub3JlcmEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNQorbXNnaWQgIkRlZmluaW5nIHN1Ym1vZHVsZSBwcm9wZXJ0aWVzIgorbXNnc3RyICJBbmdlIGVnZW5za2FwZXIgZsO2ciB1bmRlcm1vZHVsZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNgorbXNnaWQgIkdpdCBuYW1lc3BhY2VzIgorbXNnc3RyICJHaXQtbmFtbnJ5bWRlciIKKworIzogY29tbWFuZC1saXN0Lmg6MjA3Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICJHaXRzIGFya2l2bGF5b3V0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDgKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgIkFuZ2UgdmVyc2lvbmVyIG9jaCBpbnRlcnZhbGwgaSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOQorbXNnaWQgIk1vdW50aW5nIG9uZSByZXBvc2l0b3J5IGluc2lkZSBhbm90aGVyIgorbXNnc3RyICJNb250ZXJhciBldHQgYXJraXYgaW51dGkgZXR0IGFubmF0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTAKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQ6IHBhcnQgdHdvIgorbXNnc3RyICJJbnRyb2R1a3Rpb24gdGlsbCBHaXQ6IGRlbCB0dsOlIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTEKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQiCittc2dzdHIgIkludHJvZHVrdGlvbiB0aWxsIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjEyCittc2dpZCAiQW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQgd29ya2Zsb3dzIHdpdGggR2l0IgorbXNnc3RyICLDlnZlcnNpa3Qgw7Z2ZXIgcmVrb21tZW5kZXJhZGUgYXJiZXRzZmzDtmRlbiBtZWQgR2l0IgorCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgIkR1IG3DpXN0ZSBzdGFydGEgbWVkIFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6NjAKK21zZ2lkICJEbyB5b3Ugd2FudCBtZSB0byBkbyBpdCBmb3IgeW91IFtZL25dPyAiCittc2dzdHIgIlZpbGwgZHUgYXR0IGphZyBza2EgZ8O2cmEgZGV0IMOldCBkaWcgW1k9amEvTj1uZWpdPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICJGZWxha3RpZyByZXYtaW5kYXRhOiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGJpc2VjdGVkX2hlYWQiCittc2dzdHIgIkZlbGFrdGlnIHJldi1pbmRhdGE6ICRiaXNlY3RlZF9oZWFkIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAiRmVsYWt0aWcgcmV2LWluZGF0YTogJHJldiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICJcImdpdCBiaXNlY3QgJFRFUk1fQkFEXCIga2FuIGJhcmEgdGEgZXR0IGFyZ3VtZW50LiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMDkKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJJbmdlbiBsb2dnZmlsIGFuZ2l2ZW4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSAkZmlsZSBmw7ZyIHVwcHNwZWxuaW5nIgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMgorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiPz8gdmFkIG1lbmFyIGR1PyIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDEKK21zZ2lkICJiaXNlY3QgcnVuIGZhaWxlZDogbm8gY29tbWFuZCBwcm92aWRlZC4iCittc2dzdHIgImJpc2VjdC1rw7ZybmluZyBtaXNzbHlja2FkZXM6IGluZ2V0IGtvbW1hbmRvIGdhdnMuIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0NgorIywgc2gtZm9ybWF0Cittc2dpZCAicnVubmluZyAkY29tbWFuZCIKK21zZ3N0ciAia8O2ciAkY29tbWFuZCIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyJleGl0IGNvZGUgJHJlcyBmcm9tICckY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIKK21zZ3N0ciAiIgorIlwiYmlzZWN0XCIta8O2cm5pbmdlbiBtaXNzbHlja2FkZXM6XG4iCisiZmVsa29kICRyZXMgZnLDpW4gXCIkY29tbWFuZFwiIMOkciA8IDAgZWxsZXIgPj0gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJcImJpc2VjdFwiLWvDtnJuaW5nZW4ga2FuIGludGUgZm9ydHPDpHR0YSBsw6RuZ3JlIgorCisjOiBnaXQtYmlzZWN0LnNoOjI4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyJcImJpc2VjdFwiLWvDtnJuaW5nZW4gbWlzc2x5Y2thZGVzOlxuIgorIlwiYmlzZWN0X3N0YXRlICRzdGF0ZVwiIGF2c2x1dGFkZXMgbWVkIGZlbGtvZGVuICRyZXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjkyCittc2dpZCAiYmlzZWN0IHJ1biBzdWNjZXNzIgorbXNnc3RyICJcImJpc2VjdFwiLWvDtnJuaW5nZW4gbHlja2FkZXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzAwCittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICJWaSB1dGbDtnIgaW5nZW4gYmlzZWN0IGbDtnIgdGlsbGbDpGxsZXQuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICIiCisiRmVsOiBEaW5hIGxva2FsYSDDpG5kcmluZ2FyIGF2IGbDtmxqYW5kZSBmaWxlciBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiAiCisic2FtbWFuc2xhZ25pbmciCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIkF1dG9tYXRpc2sgc2FtbWFuc2xhZ25pbmcgbWlzc2x5Y2thZGVzLiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjIKK21zZ2lkICJTaG91bGQgbm90IGJlIGRvaW5nIGFuIG9jdG9wdXMuIgorbXNnc3RyICJCb3JkZSBpbnRlIGFudsOkbmRhIG9jdG9wdXMuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSBnZW1lbnNhbSBpbmNoZWNrbmluZyBtZWQgJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3NworIywgc2gtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICJSZWRhbiDDoCBqb3VyIG1lZCAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgdG86ICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiU25hYmJzcG9sYXIgdGlsbDogJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo5NworIywgc2gtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiRsO2cnPDtmsgZW5rZWwgc2FtbWFuc2xhZ25pbmcgbWVkICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6MTAyCittc2dpZCAiU2ltcGxlIG1lcmdlIGRpZCBub3Qgd29yaywgdHJ5aW5nIGF1dG9tYXRpYyBtZXJnZS4iCittc2dzdHIgIkVua2VsIHNhbW1hbnNsYWduaW5nIG1pc3NseWNrYWRlcywgZsO2cnPDtmtlciBhdXRvbWF0aXNrIHNhbW1hbnNsYWduaW5nLiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiS2FuIGludGUgdGEgYm9ydCB0ZW1wb3LDpHJ0IGluZGV4IChrYW4gaW50ZSBpbnRyw6RmZmEpIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjI3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAkcmVmX3N0YXNoIHdpdGggJHdfY29tbWl0IgorbXNnc3RyICJLYW4gaW50ZSB1cHBkYXRlcmEgJHJlZl9zdGFzaCBtZWQgJHdfY29tbWl0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCittc2dzdHIgImZlbDogb2vDpG5kIGZsYWdnYSBmw7ZyIFwic3Rhc2ggcHVzaFwiOiAkb3B0aW9uIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICRzdGFzaF9tc2ciCittc2dzdHIgIlNwYXJhZGUgYXJiZXRza2F0YWxvZ2VuIG9jaCBpbmRleHN0YXR1cyAkc3Rhc2hfbXNnIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjUzNgorIywgc2gtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICRvcHQiCittc2dzdHIgIm9rw6RuZCBmbGFnZ2E6ICRvcHQiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICJGw7ZyIG3DpW5nYSByZXZpc2lvbmVyIGFuZ2l2bmE6ICRSRVYiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZSDDpHIgaW50ZSBlbiBnaWx0aWcgcmVmZXJlbnMiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICJcIiRhcmdzXCIgw6RyIGludGUgZW4gXCJzdGFzaFwiLWxpa25hbmRlIGluY2hlY2tuaW5nIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIlwiJGFyZ3NcIiDDpHIgaW50ZSBlbiBcInN0YXNoXCItcmVmZXJlbnMiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjE4Cittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgImthbiBpbnRlIHVwcGRhdGVyYSBpbmRleGV0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYyMgorbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAiS2FuIGludGUgdGlsbMOkbXBhIGVuIFwic3Rhc2hcIiBtaXR0IGkgZW4gc2FtbWFuc2xhZ25pbmciCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMwCittc2dpZCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiS29uZmxpa3RlciBpIGluZGV4ZXQuIFRlc3RhIHV0YW4gLS1pbmRleC4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMyCittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzcGFyYSBpbmRleHRyw6RkIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY0MQorbXNnaWQgIkNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIGVudHJ5IgorbXNnc3RyICJLdW5kZSBpbnRlIMOldGVyc3TDpGxsYSBvc3DDpXJhZGUgZmlsZXIgZnLDpW4gc3Rhc2gtcG9zdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NjYKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiS2FuIGludGUgdGEgYm9ydCDDpG5kcmFkZSBmaWxlciB1ciBrw7ZuIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAiS2FzdGFkZSAke1JFVn0gKCRzKSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiR7UkVWfTogS3VuZGUgaW50ZSBrYXN0YSBcInN0YXNoXCItcG9zdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3OTIKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIihGw7ZyIGF0dCDDpXRlcnN0w6RsbGEgZGVtLCBza3JpdiBcImdpdCBzdGFzaCBhcHBseVwiKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMDMKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiUmVsYXRpdiBzw7ZrdsOkZyBrYW4gZW5kYXN0IGFudsOkbmRhcyBmcsOlbiBhcmJldHNrYXRhbG9nZW5zIHRvcHBuaXbDpSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgImFya2l2LVVSTDogXCIkcmVwb1wiIG3DpXN0ZSB2YXJhIGFic29sdXQgZWxsZXIgYsO2cmphIG1lZCAuL3wuLi8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjMyCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiXCIkc21fcGF0aFwiIGZpbm5zIHJlZGFuIGkgaW5kZXhldCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IGFuZCBpcyBub3QgYSBzdWJtb2R1bGUiCittc2dzdHIgIlwiJHNtX3BhdGhcIiBmaW5ucyByZWRhbiBpIGluZGV4ZXQgb2NoIMOkciBpbnRlIGVuIHVuZGVybW9kdWwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIlwiJHNtX3BhdGhcIiBoYXIgaW50ZSBuw6Vnb24gdXRjaGVja2FkIGluY2hlY2tuaW5nIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MworIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkzDpGdnZXIgdGlsbCBiZWZpbnRsaWd0IGFya2l2IGkgXCIkc21fcGF0aFwiIGkgaW5kZXhldCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICJcIiRzbV9wYXRoXCIgZmlubnMgcmVkYW4gb2NoIMOkciBpbnRlIGV0dCBnaWx0aWd0IGdpdC1hcmtpdiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAiRW4gZ2l0LWthdGFsb2cgZsO2ciBcIiRzbV9uYW1lXCIgaGl0dGFkZXMgbG9rYWx0IG1lZCBmasOkcnIoYXIpOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb21cbiIKKyIgICRyZWFscmVwb1xuIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0ICIKKyJyZXBvXG4iCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorIm9wdGlvbi4iCittc2dzdHIgIiIKKyJPbSBkdSB2aWxsIMOldGVyYW52w6RuZGEgZGVuIGxva2FsYSBnaXQta2F0YWxvZ2VuIGluc3TDpGxsZXQgZsO2ciBhdHQga2xvbmEgcMOlICIKKyJueXR0IGZyw6VuXG4iCisiICAkcmVhbHJlcG9cbiIKKyJrYW4gZHUgYW52w6RuZGEgZmxhZ2dhbiBcIi0tZm9yY2VcIi4gT20gZGVuIGxva2FsYSBnaXQta2F0YWxvZ2VuIGludGUgw6RyICIKKyJrb3JyZWt0XG4iCisiYXJraXYgZWxsZXIgb20gZHUgw6RyIG9zw6RrZXIgcMOlIHZhZCBkZXQgaMOkciBiZXR5ZGVyLCB2w6RsaiBldHQgYW5uYXQgbmFtbiBtZWRcbiIKKyJmbGFnZ2FuIFwiLS1uYW1lXCIuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnJHNtX25hbWUnLiIKK21zZ3N0ciAiQWt0aXZlcmFyIGxva2FsIGdpdC1rYXRhbG9nIGbDtnIgdW5kZXJtb2R1bGVuIFwiJHNtX25hbWVcIiBww6Ugbnl0dC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzAzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIkthbiBpbnRlIGNoZWNrYSB1dCB1bmRlcm1vZHVsZW4gXCIkc21fcGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGzDpGdnYSB0aWxsIHVuZGVybW9kdWxlbiBcIiRzbV9wYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIk1pc3NseWNrYWRlcyByZWdpc3RyZXJhIHVuZGVybW9kdWxlbiBcIiRzbV9wYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJLYW4gaW50ZSBoaXR0YSBha3R1ZWxsIHJldmlzaW9uIGkgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJLYW4gaW50ZSBow6RtdGEgaSB1bmRlcm1vZHVsc8O2a3bDpGcgXCIkc21fcGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICIKKyInJHNtX3BhdGgnIgorbXNnc3RyICIiCisiS2FuIGludGUgaGl0dGEgYWt0dWVsbCByZXZpc2lvbiBmw7ZyICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSBpICIKKyJ1bmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRzbV9wYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjIzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOyB0cnlpbmcgdG8gZGlyZWN0bHkgZmV0Y2ggIgorIiRzaGExOiIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGjDpG10YSBpIHVuZGVybW9kdWxzw7ZrdsOkZyBcIiRkaXNwbGF5cGF0aFwiOyBmw7Zyc8O2a3RlIGjDpG10YSAkc2hhMSAiCisiZGlyZWt0OiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJGZXRjaGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnLCBidXQgaXQgZGlkIG5vdCBjb250YWluICRzaGExLiAiCisiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iCittc2dzdHIgIiIKKyJIw6RtdGFkZSBpIHVuZGVybW9kdWxzc8O2a3bDpGdlbiBcIiRkaXNwbGF5cGF0aFwiLCBtZW4gZGVuIGlubmVow7ZsbCBpbnRlICRzaGExLiAiCisiRGlyZWt0IGjDpG10bmluZyBhdiBpbmNoZWNrbmluZ2VuIG1pc3NseWNrYWRlcy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiS2FuIGludGUgY2hlY2thIHV0IFwiJHNoYTFcIiBpIHVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJGRpc3BsYXlwYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAiVW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIjogY2hlY2thZGUgdXQgXCIkc2hhMVwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJLYW4gaW50ZSBvbWJhc2VyYSBcIiRzaGExXCIgaSB1bmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRkaXNwbGF5cGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICJVbmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRkaXNwbGF5cGF0aFwiOiBvbWJhc2VyYWRlIGluIGkgXCIkc2hhMVwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0NworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIkthbiBpbnRlIHNsw6UgaWhvcCBcIiRzaGExXCIgaSB1bmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRkaXNwbGF5cGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0OAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICJVbmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRkaXNwbGF5cGF0aFwiOiBzYW1tYW5zbGFnZW4gaSBcIiRzaGExXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gb2YgJyRjb21tYW5kICRzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJNaXNzbHlja2FkZXMga8O2cmEgXCIkY29tbWFuZCAkc2hhMVwiIGkgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICJVbmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRkaXNwbGF5cGF0aFwiOiBcIiRjb21tYW5kICRzaGExXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Njg1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJNaXNzbHlja2FkZXMgcmVrdXJzZXJhIGluIGkgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTYKK21zZ2lkICJUaGUgLS1jYWNoZWQgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC0tZmlsZXMgb3B0aW9uIgorbXNnc3RyICJGbGFnZ2FuIC0tY2FjaGVkIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgZmxhZ2dhbiAtLWZpbGVzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk0OAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICJvdsOkbnRhdCBsw6RnZSAkbW9kX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX3NyYyIKK21zZ3N0ciAiICBWYXJuaW5nOiAkZGlzcGxheV9uYW1lIGlubmVow6VsbGVyIGludGUgaW5jaGVja25pbmdlbiAkc2hhMV9zcmMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiAgVmFybmluZzogJGRpc3BsYXlfbmFtZSBpbm5laMOlbGxlciBpbnRlIGluY2hlY2tuaW5nZW4gJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisiICBWYXJuaW5nOiAkZGlzcGxheV9uYW1lIGlubmVow6VsbGVyIGludGUgaW5jaGVja25pbmdhcm5hICRzaGExX3NyYyBvY2ggIgorIiRzaGExX2RzdCIKKworIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU2VlIGdpdC0ke2NtZH0oMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICJTZSBnaXQtJHtjbWR9KDEpIGbDtnIgZGV0YWxqZXIuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTA5Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guIgorbXNnc3RyICJUaWxsw6RtcGFkZSBhdXRvc3Rhc2guIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgIkthbiBpbnRlIHNwYXJhICRzdGFzaF9zaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2luZyAoJG5ld19jb3VudC8kdG90YWwpIgorbXNnc3RyICJPbWJhc2VyYXIgKCRuZXdfY291bnQvJHRvdGFsKSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIwNworbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNlIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdFxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisieCwgZXhlYyA8Y29tbWl0PiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJLb21tYW5kb246XG4iCisicCwgcGljayA8aW5jaGVja25pbmc+ID0gYW52w6RuZCBpbmNoZWNrbmluZ1xuIgorInIsIHJld29yZCA8aW5jaGVja25pbmc+ID0gYW52w6RuZCBpbmNoZWNrbmluZywgbWVuIHJlZGlnZXJhICIKKyJpbmNoZWNrbmluZ3NtZWRkZWxhbmRldFxuIgorImUsIGVkaXQgPGluY2hlY2tuaW5nPiA9IGFudsOkbmQgaW5jaGVja25pbmcsIG1lbiBzdGFubmEgZsO2ciB0aWxsw6RnZ1xuIgorInMsIHNxdWFzaCA8aW5jaGVja25pbmc+ID0gYW52w6RuZCBpbmNoZWNrbmluZywgbWVuIGluZm9nYSBpIGbDtnJlZ8OlZW5kZSAiCisiaW5jaGVja25pbmdcbiIKKyJmLCBmaXh1cCA8aW5jaGVja25pbmc+ID0gc29tIFwic3F1YXNoXCIsIG1lbiBmw7Zya2FzdGEgIgorImluY2hlY2tuaW5nc21lZGRlbGFuZGV0XG4iCisieCwgZXhlYyA8aW5jaGVja25pbmc+ID0ga8O2ciBrb21tYW5kbyAocmVzdGVuIGF2IHJhZGVuKSBpIHNrYWxldFxuIgorImQsIGRyb3AgPGluY2hlY2tuaW5nPiA9IHRhIGJvcnQgaW5jaGVja25pbmdcbiIKKyJsLCBsYWJlbCA8ZXRpa2V0dD4gPSBnZSBha3R1ZWxsdCBIRUFEIGV0dCBuYW1uXG4iCisidCwgcmVzZXQgPGV0aWtldHQ+ID0gw6V0ZXJzdMOkbGwgSEVBRCB0aWxsIGVuIGV0aWtldHRcbiIKKyJtLCBtZXJnZSBbLUMgPGluY2hlY2tuaW5nPiB8IC1jIDxpbmNoZWNrbmluZz5dIDxldGlrZXR0PiBbIyA8ZW5yYWRzPl1cbiIKKyIuICAgICAgIHNrYXBhIGVuIHNhbW1hbnNsYWduaW5nIG1lZCB1cnNwcnVuZ2xpZ3QgbWVkZGVsYW5kZSAoZWxsZXJcbiIKKyIuICAgICAgIGVucmFkcywgb20gaW5nZXQgaW5jaGVja25pbmdzbWVkZGVsYW5kZSBhbmdhdnMpLiBBbnbDpG5kXG4iCisiLiAgICAgICAtdiA8aW5jaGVja25pbmc+IGbDtnIgYXR0IHNrcml2YSBvbSBtZWRkZWxhbmRldC5cbiIKKyJcbiIKKyJEdSBrYW4gYnl0YSBvcmRuaW5nIHDDpSByYWRlcm5hOyBkZSB1dGbDtnJzIHVwcGlmcsOlbiBvY2ggbmVkLlxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJEdSBrYW4gdXTDtmthIGluY2hlY2tuaW5nZW4gbnUsIG1lZFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiTsOkciBkdSDDpHIgbsO2amQgbWVkIGRpbmEgw6RuZHJpbmdhciBrw7ZyIGR1XG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyOTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRzaGExOiBub3QgYSBjb21taXQgdGhhdCBjYW4gYmUgcGlja2VkIgorbXNnc3RyICIkc2hhMTogaW50ZSBlbiBpbmNoZWNrbmluZyBzb20ga2FuIHbDpGxqYXMiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozMzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWl0IG5hbWU6ICRzaGExIgorbXNnc3RyICJGZWxha3RpZ3QgaW5jaGVja25pbmdzbmFtbjogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozNjQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIgorbXNnc3RyICJLYW4gaW50ZSBza3JpdmEgZXJzw6R0dG5pbmdzLXNoYTEgZsO2ciBha3R1ZWxsIGluY2hlY2tuaW5nIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIlNuYWJic3BvbGFkZSB0aWxsICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICJLYW4gaW50ZSBzbmFiYnNwb2xhIHRpbGwgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBtb3ZlIEhFQUQgdG8gJGZpcnN0X3BhcmVudCIKK21zZ3N0ciAiS2FuIGludGUgZmx5dHRhIEhFQUQgdGlsbCAkZmlyc3RfcGFyZW50IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBzcXVhc2ggYSBtZXJnZTogJHNoYTEiCittc2dzdHIgIlbDpGdyYXIgdXRmw7ZyYSBcInNxdWFzaFwiIHDDpSBlbiBzYW1tYW5zbGFnbmluZzogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCittc2dzdHIgIkZlbCBuw6RyIHNhbW1hbnNsYWduaW5nZW4gJHNoYTEgc2t1bGxlIGfDtnJhcyBvbSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBpY2sgJHNoYTEiCittc2dzdHIgIkt1bmRlIGludGUgdsOkbGphICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJHtufToiCittc2dzdHIgIkRldCBow6RyIMOkciBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlICR7bn06IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyR7bn0gd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiSW5jaGVja25pbmdzbWVkZGVsYW5kZSAke259IGtvbW1lciBob3BwYXMgw7Z2ZXI6IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdC4iCittc2dpZF9wbHVyYWwgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0cy4iCittc2dzdHJbMF0gIkRldCBow6RyIMOkciBlbiBrb21iaW5hdGlvbiBhdiAkY291bnQgaW5jaGVja25pbmcuIgorbXNnc3RyWzFdICJEZXQgaMOkciDDpHIgZW4ga29tYmluYXRpb24gYXYgJGNvdW50IGluY2hlY2tuaW5nYXIuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgJGZpeHVwX21zZyIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhICRmaXh1cF9tc2ciCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTUKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgMiBjb21taXRzLiIKK21zZ3N0ciAiRGV0IGjDpHIgw6RyIGVuIGtvbWJpbmF0aW9uIGF2IDIgaW5jaGVja25pbmdhci4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1MzYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU3OQorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICRzaGExLi4uICRyZXN0IgorbXNnc3RyICJLdW5kZSBpbnRlIHRpbGzDpG1wYSAkc2hhMS4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhbWVuZCBjb21taXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBpY2tpbmcgJHNoYTEuLi4gJHJlc3RcbiIKKyJUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9va1xuIgorImZhaWxlZC4gSWYgdGhlIHByZS1jb21taXQgaG9vayBmYWlsZWQsIHlvdSBtYXkgbmVlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSAiCisiYmVmb3JlXG4iCisieW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgdXTDtmthIGluY2hlY2tuaW5nIGVmdGVyIGF0dCBoYSBseWNrYXRzIHbDpGxqYSAkc2hhMS4uLiAkcmVzdFxuIgorIkRldCDDpHIgYW50YWdsaWdlbiBww6UgZ3J1bmQgYXYgZXR0IHRvbXQgaW5jaGVja25pbmdzbWVkZGVsYW5kZSwgZWxsZXIgYXR0XG4iCisicHJlLWNvbW1pdC1rcm9rZW4gbWlzc2x5Y2thZGVzLiBPbSBwcmUtY29tbWl0LWtyb2tlbiBtaXNzbHlja2FkZXMga2Fuc2tlXG4iCisiZHUgbcOlc3RlIGzDtnNhIHByb2JsZW1ldCBpbm5hbiBkdSBrYW4gc2tyaXZhIG9tIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCittc2dzdHIgIlN0b3BwYWRlIHDDpSAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAnJHNxdWFzaF9zdHlsZScgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiS2FuIGludGUgdXRmw7ZyYSBcIiRzcXVhc2hfc3R5bGVcIiB1dGFuIGVuIGbDtnJlZ8OlZW5kZSBpbmNoZWNrbmluZyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY4MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nOiAkcmVzdCIKK21zZ3N0ciAiS8O2cjogJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBmYWlsZWQ6ICRyZXN0IgorbXNnc3RyICJLw7ZybmluZyBtaXNzbHlja2FkZXM6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkzCittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIm9jaCBnam9yZGUgw6RuZHJpbmdhciB0aWxsIGluZGV4ZXQgb2NoL2VsbGVyIGFyYmV0c2thdGFsb2dlbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5NQorbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJEdSBrYW4gcsOkdHRhIHByb2JsZW1ldCBvY2ggc2VkYW4ga8O2cmFcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIy4gVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gc3VjY2VlZGVkOiAkcmVzdFxuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJLw7ZybmluZ2VuIGx5Y2thZGVzOiAkcmVzdFxuIgorIm1lbiBsw6RtbmFkZSBrdmFyIMOkbmRyaW5nYXIgaSBpbmRleGV0IG9jaC9lbGxlciBhcmJldHNrYXRhbG9nZW5cbiIKKyJDaGVja2EgaW4gZWxsZXIgdXRmw7ZyIFwic3Rhc2hcIiBww6Ugw6RuZHJpbmdhcm5hIG9jaCBrw7ZyIHNlZGFuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWFuZDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCittc2dzdHIgIk9rw6RudCBrb21tYW5kbzogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MjAKK21zZ2lkICJQbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAiUsOkdHRhIGRldCBtZWQgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzU1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCAkaGVhZF9uYW1lLiIKK21zZ3N0ciAiTHlja2FkZXMgb21iYXNlcmEgb2NoIHVwcGRhdGVyYSAkaGVhZF9uYW1lLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxMgorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0YSBib3J0IENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZVxuIgorInNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJEdSBoYXIga8O2YWRlIMOkbmRyaW5nYXIgaSBkaW4gYXJiZXRza2F0YWxvZy5cbiIKKyJPbSBkZXQgw6RyIG1lbmluZ2VuIGF0dCDDpG5kcmluZ2FybmFcbiIKKyJza2EgbMOkZ2dhcyBpbiBpIGbDtnJlZ8OlZW5kZSBpbmNoZWNrbmluZywga8O2cjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIk9tIGRlIHNrYSBjaGVja2FzIGluIGkgZW4gZWdlbiBpbmNoZWNrbmluZywga8O2cjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJPYXZzZXR0IHZpbGtldCwgbsOkciBkdSDDpHIgZsOkcmRpZyBmb3J0c8OkdHRlciBkdSBtZWQ6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgzNAorbXNnaWQgIkVycm9yIHRyeWluZyB0byBmaW5kIHRoZSBhdXRob3IgaWRlbnRpdHkgdG8gYW1lbmQgY29tbWl0IgorbXNnc3RyICJGZWwgdmlkIGbDtnJzw7ZrIGF0dCBoaXR0YSBmw7ZyZmF0dGFyaWRlbnRpdGV0IGbDtnIgYXR0IHV0w7ZrYSBpbmNoZWNrbmluZyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgzOQorbXNnaWQgIiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisiRHUgaGFyIMOkbmRyaW5nYXIgaSBhcmJldHNrYXRhbG9nZW4gc29tIGludGUgY2hlY2thdHMgaW4uIENoZWNrYSBpbiBkZW1cbiIKKyJmw7Zyc3Qgb2NoIGvDtnIgc2VkYW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBpZ2VuLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0NCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ4Cittc2dpZCAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIkt1bmRlIGludGUgY2hlY2thIGluIGvDtmFkZSDDpG5kcmluZ2FyLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg3OSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTY1Cittc2dpZCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIgorbXNnc3RyICJLdW5kZSBpbnRlIHN0YXJ0YSB0ZXh0cmVkaWdlcmFyZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCittc2dzdHIgIkt1bmRlIGludGUgY2hlY2thIHV0ICRzd2l0Y2hfdG8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDcKK21zZ2lkICJObyBIRUFEPyIKK21zZ3N0ciAiSW5nZXQgSEVBRD8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICRzdGF0ZV9kaXIiCittc2dzdHIgIkt1bmRlIGludGUgc2thcGEgdGVtcG9yw6RyICRzdGF0ZV9kaXIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MTEKK21zZ2lkICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAiS3VuZGUgaW50ZSBtYXJrZXJhIHNvbSBpbnRlcmFrdGl2IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZHMpIgorbXNnc3RyWzBdICJPbWJhc2VyYSAkc2hvcnRyZXZpc2lvbnMgcMOlICRzaG9ydG9udG8gKCR0b2RvY291bnQgaW5jaGVja25pbmcpIgorbXNnc3RyWzFdICJPbWJhc2VyYSAkc2hvcnRyZXZpc2lvbnMgcMOlICRzaG9ydG9udG8gKCR0b2RvY291bnQgaW5jaGVja25pbmdhcikiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NTUKK21zZ2lkICJOb3RlIHRoYXQgZW1wdHkgY29tbWl0cyBhcmUgY29tbWVudGVkIG91dCIKK21zZ3N0ciAiT2JzZXJ2ZXJhIGF0dCB0b21tYSBpbmNoZWNrbmluZ2FyIMOkciB1dGtvbW1lbnRlcmFkZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk5NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTAwMgorbXNnaWQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorbXNnc3RyICJLdW5kZSBpbnRlIGluaXRpZXJhIG9tc2tyaXZuYSBpbmNoZWNrbmluZ2FyIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6ODkgZ2l0LXNoLXNldHVwLnNoOjk0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJGRhc2hsZXNzICRVU0FHRSIKK21zZ3N0ciAiYW52w6RuZDogJGRhc2hsZXNzICRVU0FHRSIKKworIzogZ2l0LXNoLXNldHVwLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGNoZGlyIHRvICRjZHVwLCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiS3VuZGUgaW50ZSBieXRhIGthdGFsb2cgdGlsbCAkY2R1cCwgdG9wcG5pdsOlbiBww6UgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjAwIGdpdC1zaC1zZXR1cC5zaDoyMDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiAkcHJvZ3JhbV9uYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICLDtmRlc2RpZ2V0cnQ6ICRwcm9ncmFtX25hbWUga2FuIGludGUgYW52w6RuZGFzIHV0YW4gYXJiZXRza2F0YWxvZy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiS2FuIGludGUgb21iYXNlcmE6IER1IGhhciBva8O2YWRlIMOkbmRyaW5nYXIuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI0Cittc2dpZCAiQ2Fubm90IHJld3JpdGUgYnJhbmNoZXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJLYW4gaW50ZSBza3JpdmEgb20gZ3JlbmFyOiBEdSBoYXIgb2vDtmFkZSDDpG5kcmluZ2FyLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNworbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiS2FuIGludGUgaMOkbXRhIG1lZCBvbWJhc2VyaW5nOiBEdSBoYXIgb2vDtmFkZSDDpG5kcmluZ2FyLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICRhY3Rpb246IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJLYW4gaW50ZSAkYWN0aW9uOiBEdSBoYXIgb2vDtmFkZSDDpG5kcmluZ2FyLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0MworbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJLYW4gaW50ZSBvbWJhc2VyYTogRGl0dCBpbmRleCBpbm5laMOlbGxlciDDpG5kcmluZ2FyIHNvbSBpbnRlIGNoZWNrYXRzIGluLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0NgorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiS2FuIGludGUgaMOkbXRhIG1lZCBvbWJhc2VyaW5nOiBEaXR0IGluZGV4IGlubmVow6VsbGVyIG9pbmNoZWNrYWRlIMOkbmRyaW5nYXIuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIkthbiBpbnRlICRhY3Rpb246IERpdHQgaW5kZXggaW5uZWjDpWxsZXIgw6RuZHJpbmdhciBzb20gaW50ZSBjaGVja2F0cyBpbi4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTMKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIkRlc3N1dG9tIGlubmVow6VsbGVyIGRpdCBpbmRleCDDpG5kcmluZ2FyIHNvbSBpbnRlIGhhciBjaGVja2F0cyBpbi4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDozNzMKK21zZ2lkICJZb3UgbmVlZCB0byBydW4gdGhpcyBjb21tYW5kIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICJEdSBtw6VzdGUga8O2cmEga29tbWFuZG90IGZyw6VuIGFyYmV0c2thdGFsb2dlbnMgdG9wcG5pdsOlLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3OAorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgYWJzb2x1dGUgcGF0aCBvZiBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICJLdW5kZSBpbnRlIGJlc3TDpG1tYSBhYnNvbHV0IHPDtmt2w6RnIHRpbGwgZ2l0LWthdGFsb2dlbiIKKworIy4gVFJBTlNMQVRPUlM6IHlvdSBjYW4gYWRqdXN0IHRoaXMgdG8gYWxpZ24gImdpdCBhZGQgLWkiIHN0YXR1cyBtZW51CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIlMTJzICUxMnMgJXMiCittc2dzdHIgIiUxMnMgJTEycyAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidG91Y2hlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInRvdWNoZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAicsO2cmRlICVkIHPDtmt2w6RnXG4iCittc2dzdHJbMV0gInLDtnJkZSAlZCBzw7ZrdsOkZ2FyXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1MworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy4iCittc2dzdHIgIiIKKyJPbSBwYXRjaGVuIGthbiBhcHBsaWNlcmFzIHJlbnQga29tbWVyIGRldCByZWRpZ2VyYWRlIHN0eWNrZXQgYXR0XG4iCisia8O2YXMgb21lZGVsYmFydC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1NgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3Rhc2hpbmcuIgorbXNnc3RyICIiCisiT20gcGF0Y2hlbiBrYW4gYXBwbGljZXJhcyByZW50IGtvbW1lciBkZXQgcmVkaWdlcmFkZSBzdHlja2V0IGF0dFxuIgorImzDpGdnYXMgdGlsbCBpIFwic3Rhc2hcIiBvbWVkZWxiYXJ0LiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDU5Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciB1bnN0YWdpbmcuIgorbXNnc3RyICIiCisiT20gcGF0Y2hlbiBrYW4gYXBwbGljZXJhcyByZW50IGtvbW1lciBkZXQgcmVkaWdlcmFkZSBzdHlja2V0IGF0dFxuIgorInRhcyBib3J0IGZyw6VuIGvDtm4gb21lZGVsYmFydC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzEKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgYXBwbHlpbmcuIgorbXNnc3RyICIiCisiT20gcGF0Y2hlbiBrYW4gYXBwbGljZXJhcyByZW50IGtvbW1lciBkZXQgcmVkaWdlcmFkZSBzdHlja2V0IGF0dFxuIgorIm1hcmtlcmFzIGbDtnIgYXBwbGljZXJpbmcgb21lZGVsYmFydC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NAorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgZGlzY2FyZGluZy4iCittc2dzdHIgIiIKKyJPbSBwYXRjaGVuIGthbiBhcHBsaWNlcmFzIHJlbnQga29tbWVyIGRldCByZWRpZ2VyYWRlIHN0eWNrZXQgYXR0XG4iCisibWFya2VyYXMgZsO2ciBrYXN0YSBvbWVkZWxiYXJ0LiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTExCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIMO2cHBuYSBzdHlja2VyZWRpZ2VyaW5nc2ZpbCBmw7ZyIHNrcml2bmluZzogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVzIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorIi0tLVxuIgorIlRhIGJvcnQgXCIlc1wiIHJhZGVyIGdlbm9tIGF0dCBnw7ZyYSBkZW0gXCIgXCItcmFkZXIgKHNhbW1hbmhhbmcpLlxuIgorIlRhIGJvcnQgXCIlc1wiIHJhZGVyIGdlbm9tIGF0dCByYWRlcmEgZGVtLlxuIgorIlJhZGVyIHNvbSBiw7ZyamFyIG1lZCAlcyBrb21tZXIgYXR0IHRhcyBib3J0LlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExNDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHJlYWRpbmc6ICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgw7ZwcG5hIHN0eWNrZXNyZWRpZ2VyaW5nc2ZpbCBmw7ZyIGzDpHNuaW5nOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjQ4Cittc2dpZCAiIgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGvDtmEgc3R5Y2tldFxuIgorIm4gLSBrw7ZhIGludGUgc3R5Y2tldFxuIgorInEgLSBhdnNsdXRhOyBrw7ZhIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlXG4iCisiYSAtIGvDtmEgc3R5Y2tldCBvY2ggYWxsYSBmw7ZsamFuZGUgaSBmaWxlblxuIgorImQgLSBrw7ZhIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlIGkgZmlsZW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI1NAorbXNnaWQgIiIKKyJ5IC0gc3Rhc2ggdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YXNoIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBcInN0YXNoXCI6YSBzdHlja2V0XG4iCisibiAtIFwic3Rhc2hcIjphIGludGUgc3R5Y2tldFxuIgorInEgLSBhdnNsdXRhOyBcInN0YXNoXCI6YSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZVxuIgorImEgLSBcInN0YXNoXCI6YSBzdHlja2V0IG9jaCBhbGxhIGbDtmxqYW5kZSBpIGZpbGVuXG4iCisiZCAtIFwic3Rhc2hcIjphIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlIGkgZmlsZW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2MAorbXNnaWQgIiIKKyJ5IC0gdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHVuc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gdGEgYm9ydCBzdHlja2V0IGZyw6VuIGvDtm5cbiIKKyJuIC0gdGEgaW50ZSBib3J0IHN0eWNrZXQgZnLDpW4ga8O2blxuIgorInEgLSBhdnNsdXRhOyB0YSBpbnRlIGJvcnQgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlIGZyw6VuIGvDtm5cbiIKKyJhIC0gdGEgYm9ydCBzdHlja2V0IG9jaCBhbGxhIGbDtmxqYW5kZSBpIGZpbGVuIGZyw6VuIGvDtm5cbiIKKyJkIC0gdGEgaW50ZSBib3J0IHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZSBpIGZpbGVuIGZyw6VuIGvDtm4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBhcHBsaWNlcmEgc3R5Y2tldCBww6UgaW5kZXhldFxuIgorIm4gLSBhcHBsaWNlcmEgaW50ZSBzdHlja2V0IHDDpSBpbmRleGV0XG4iCisicSAtIGF2c2x1dGE7IGFwcGxpY2VyYSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZVxuIgorImEgLSBhcHBsaWNlcmEgc3R5Y2tldCBvY2ggYWxsYSBmw7ZsamFuZGUgaSBmaWxlblxuIgorImQgLSBhcHBsaWNlcmEgaW50ZSBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBmw7ZsamFuZGUgaSBmaWxlbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5MAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGbDtnJrYXN0YSBzdHlja2V0IGZyw6VuIGFyYmV0c2thdGFsb2dlblxuIgorIm4gLSBmw7Zya2FzdGEgaW50ZSBzdHlja2V0IGZyw6VuIGFyYmV0c2thdGFsb2dlblxuIgorInEgLSBhdnNsdXRhOyBmw7Zya2FzdGEgaW50ZSBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBmw7ZsamFuZGVcbiIKKyJhIC0gZsO2cmthc3RhIHN0eWNrZXQgb2NoIGFsbGEgZsO2bGphbmRlIGkgZmlsZW5cbiIKKyJkIC0gZsO2cmthc3RhIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlIGkgZmlsZW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3OAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gZsO2cmthc3RhIHN0eWNrZXQgZnLDpW4gaW5kZXhldCBvY2ggYXJiZXRza2F0YWxvZ2VuXG4iCisibiAtIGbDtnJrYXN0YSBpbnRlIHN0eWNrZXQgZnLDpW4gaW5kZXhldCBvY2ggYXJiZXRza2F0YWxvZ2VuXG4iCisicSAtIGF2c2x1dGE7IGbDtnJrYXN0YSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZVxuIgorImEgLSBmw7Zya2FzdGEgc3R5Y2tldCBvY2ggYWxsYSBmw7ZsamFuZGUgaSBmaWxlblxuIgorImQgLSBmw7Zya2FzdGEgaW50ZSBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBmw7ZsamFuZGUgaSBmaWxlbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjg0Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYXBwbGljZXJhIHN0eWNrZXQgcMOlIGluZGV4ZXQgb2NoIGFyYmV0c2thdGFsb2dlblxuIgorIm4gLSBhcHBsaWNlcmEgaW50ZSBzdHlja2V0IHDDpSBpbmRleGV0IG9jaCBhcmJldHNrYXRhbG9nZW5cbiIKKyJxIC0gYXZzbHV0YTsgYXBwbGljZXJhIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlXG4iCisiYSAtIGFwcGxpY2VyYSBzdHlja2V0IG9jaCBhbGxhIGbDtmxqYW5kZSBpIGZpbGVuXG4iCisiZCAtIGFwcGxpY2VyYSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZSBpIGZpbGVuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyOTYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYXBwbGljZXJhIHN0eWNrZXQgcMOlIGFyYmV0c2thdGFsb2dlblxuIgorIm4gLSBhcHBsaWNlcmEgaW50ZSBzdHlja2V0IHDDpSBhcmJldHNrYXRhbG9nZW5cbiIKKyJxIC0gYXZzbHV0YTsgYXBwbGljZXJhIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlXG4iCisiYSAtIGFwcGxpY2VyYSBzdHlja2V0IG9jaCBhbGxhIGbDtmxqYW5kZSBpIGZpbGVuXG4iCisiZCAtIGFwcGxpY2VyYSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZSBpIGZpbGVuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMTEKK21zZ2lkICIiCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJnIC0gdsOkbGogZXR0IHN0eWNrZSBhdHQgZ8OlIHRpbGxcbiIKKyIvIC0gc8O2ayBlZnRlciBzdHlja2Ugc29tIG1vdHN2YXJhciBhbmdpdmV0IHJlZ3VsasOkcnQgdXR0cnlja1xuIgorImogLSBsw6RtbmEgc3R5Y2tldCBvYmVzdMOkbXQsIHNlIG7DpHN0YSBvYmVzdMOkbWRhIHN0eWNrZVxuIgorIkogLSBsw6RtbmEgc3R5Y2tldCBvYmVzdMOkbXQsIHNlIG7DpHN0YSBzdHlja2VcbiIKKyJrIC0gbMOkbW5hIHN0eWNrZXQgb2Jlc3TDpG10LCBzZSBmw7ZyZWfDpWVuZGUgb2Jlc3TDpG1kYSBzdHlja2VcbiIKKyJLIC0gbMOkbW5hIHN0eWNrZXQgb2Jlc3TDpG10LCBzZSBmw7ZyZWfDpWVuZGUgc3R5Y2tlXG4iCisicyAtIGRlbGEgYWt0dWVsbHQgc3R5Y2tlIGkgbWluZHJlIHN0eWNrZW5zXG4iCisiZSAtIHJlZGlnZXJhIGFrdHVlbGx0IHN0eWNrZSBtYW51ZWxsdFxuIgorIj8gLSB2aXNhIGhqw6RscFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDIKK21zZ2lkICJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCFcbiIKK21zZ3N0ciAiTWFya2VyYWRlIHN0eWNrZW4ga2FuIGludGUgYXBwbGljZXJhcyBww6UgaW5kZXhldCFcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzU3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlc1xuIgorbXNnc3RyICJpZ25vcmVyYXIgZWogc2FtbWFuc2xhZ2VuOiAlc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwcGxpY2VyYSDDpG5kcmF0IGzDpGdlIHDDpSBhcmJldHNrYXRhbG9nZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBwbGljZXJhIGJvcnR0YWduaW5nIHDDpSBhcmJldHNrYXRhbG9nZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwcGxpY2VyYSBzdHlja2V0IHDDpSBhcmJldHNrYXRhbG9nZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3MAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG9cbiIKK21zZ3N0ciAiSW5nYSBhbmRyYSBzdHlja2VuIGF0dCBnw6UgdGlsbFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1ODgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXI6ICclcydcbiIKK21zZ3N0ciAiT2dpbHRpZ3Qgc2lmZmVydsOkcmRlOiBcIiVzXCJcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTkzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLlxuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuXG4iCittc2dzdHJbMF0gIkJla2xhZ2FyLCBkZXQgZmlubnMgYmFyYSAlZCBzdHlja2UuXG4iCittc2dzdHJbMV0gIkJla2xhZ2FyLCBkZXQgZmlubnMgYmFyYSAlZCBzdHlja2VuLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MTkKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBzZWFyY2hcbiIKK21zZ3N0ciAiSW5nYSBhbmRyYSBzdHlja2VuIGF0dCBzw7ZrYSBlZnRlclxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MzYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzXG4iCittc2dzdHIgIkZlbGFrdGlndCBmb3JtYXQgcMOlIHJlZ3VsasOkcnQgc8O2a3V0dHJ5Y2sgJXM6ICVzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY0NgorbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVyblxuIgorbXNnc3RyICJJbmdhIHN0eWNrZW4gbW90c3ZhcmFyIGdpdmV0IG3Dtm5zdGVyXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY1OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODAKK21zZ2lkICJObyBwcmV2aW91cyBodW5rXG4iCittc2dzdHIgIkluZ2V0IGbDtnJlZ8OlZW5kZSBzdHlja2VcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjY3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY4NgorbXNnaWQgIk5vIG5leHQgaHVua1xuIgorbXNnc3RyICJJbmdldCBmw7ZsamFuZGUgc3R5Y2tlXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5MgorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIkJla2xhZ2FyLCBrYW4gaW50ZSBkZWxhIHN0eWNrZXRcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjk4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVuay5cbiIKK21zZ2lkX3BsdXJhbCAiU3BsaXQgaW50byAlZCBodW5rcy5cbiIKK21zZ3N0clswXSAiRGVsYSBpICVkIHN0eWNrZS5cbiIKK21zZ3N0clsxXSAiRGVsYSBpICVkIHN0eWNrZW4uXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcwOAorbXNnaWQgIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmtcbiIKK21zZ3N0ciAiQmVrbGFnYXIsIGthbiBpbnRlIHJlZGlnZXJhIHN0eWNrZXRcbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBkbyBub3QgdHJhbnNsYXRlIHRoZSBjb21tYW5kIG5hbWVzCisjLiAnc3RhdHVzJywgJ3VwZGF0ZScsICdyZXZlcnQnLCBldGMuCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NzMKK21zZ2lkICIiCisic3RhdHVzICAgICAgICAtIHNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzXG4iCisidXBkYXRlICAgICAgICAtIGFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlc1xuIgorInJldmVydCAgICAgICAgLSByZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvblxuIgorInBhdGNoICAgICAgICAgLSBwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHlcbiIKKyJkaWZmICAgICAgICAgIC0gdmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXhcbiIKKyJhZGQgdW50cmFja2VkIC0gYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiAiCisiY2hhbmdlc1xuIgorbXNnc3RyICIiCisic3RhdHVzICAgICAgICAtIHZpc2Egc8O2a3bDpGdhciBtZWQgw6RuZHJpbmdhclxuIgorInVwZGF0ZSAgICAgICAgLSBsw6RnZyBhcmJldHNrYXRhbG9nZW5zIHRpbGxzdMOlbmQgdGlsbCBrw7ZhZGUgw6RuZHJpbmdhclxuIgorInJldmVydCAgICAgICAgLSDDpXRlcnN0w6RsbCBrw7ZhZGUgw6RuZHJpbmdhciB0aWxsIEhFQUQtdmVyc2lvbmVuXG4iCisicGF0Y2ggICAgICAgICAtIHbDpGxqIG9jaCB1cHBkYXRlcmEgdmFsZGEgc3R5Y2tlblxuIgorImRpZmYgICAgICAgICAgLSB2aXNhIGRpZmYgbWVsbGFuIEhFQUQgb2NoIGluZGV4XG4iCisiYWRkIHVudHJhY2tlZCAtIGzDpGdnIHRpbGwgaW5uZWjDpWxsIGkgb3Nww6VyYWRlIGZpbGVyIHRpbGwga8O2YWRlIMOkbmRyaW5nYXJcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzkwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5NQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgwNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgxNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNQorbXNnaWQgIm1pc3NpbmcgLS0iCittc2dzdHIgInNha25hZCAtLSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODIxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVua25vd24gLS1wYXRjaCBtb2RlOiAlcyIKK21zZ3N0ciAib2vDpG50IGzDpGdlIGbDtnIgLS1wYXRjaDogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcywgZXhwZWN0aW5nIC0tIgorbXNnc3RyICJmZWxha3RpZ3QgYXJndW1lbnQgJXMsIGbDtnJ2w6RudGFyIC0tIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzOAorbXNnaWQgImxvY2FsIHpvbmUgZGlmZmVycyBmcm9tIEdNVCBieSBhIG5vbi1taW51dGUgaW50ZXJ2YWxcbiIKK21zZ3N0ciAibG9rYWwgem9uIHNraWxqZXIgc2lnIGZyw6VuIEdNVCBtZWQgZGVsYXIgYXYgbWludXRlclxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MQorbXNnaWQgImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIgorbXNnc3RyICJsb2thbCB0aWRzem9uZsO2cnNranV0bmluZyBzdMO2cnJlIMOkbiBlbGxlciBsaWthIG1lZCAyNCB0aW1tYXJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoyMjMgZ2l0LXNlbmQtZW1haWwucGVybDoyMjkKK21zZ2lkICJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciCittc2dzdHIgInRleHRyZWRpZ2VyaW5nc3Byb2dyYW1tZXQgYXZzbHV0YWRlcyBtZWQgZmVsLCBhdmJyeXRlciBhbGx0aW5nIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMxMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBjb250YWlucyBhbiBpbnRlcm1lZGlhdGUgdmVyc2lvbiBvZiB0aGUgZW1haWwgeW91IHdlcmUgY29tcG9zaW5nLlxuIgorbXNnc3RyICIiCisiXCIlc1wiIGlubmVow6VsbGVyIGVuIG1lbGxhbmxpZ2dhbmRlIHZlcnNpb24gYXYgZS1wb3N0YnJldmV0IGR1IHNrcmV2LlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMxNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICInJXMuZmluYWwnIGNvbnRhaW5zIHRoZSBjb21wb3NlZCBlbWFpbC5cbiIKK21zZ3N0ciAiXCIlcy5maW5hbFwiIGlubmVow6VsbGVyIGRldCBza3Jpdm5hIGJyZXZldC5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0MDgKK21zZ2lkICItLWR1bXAtYWxpYXNlcyBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBvcHRpb25zXG4iCittc2dzdHIgIi0tZHVtcC1hbGlhcyDDpHIgaW5rb21wYXRpYmVsdCBtZWQgYW5kcmEgZmxhZ2dvclxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4MSBnaXQtc2VuZC1lbWFpbC5wZXJsOjY4MworbXNnaWQgIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iCittc2dzdHIgIkthbiBpbnRlIGvDtnJhIGdpdCBmb3JtYXQtcGF0Y2ggZnLDpW4gdXRhbmbDtnIgYXJraXZldFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4NAorbXNnaWQgIiIKKyJgYmF0Y2gtc2l6ZWAgYW5kIGByZWxvZ2luYCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciAodmlhIGNvbW1hbmQtbGluZSBvciAiCisiY29uZmlndXJhdGlvbiBvcHRpb24pXG4iCittc2dzdHIgIiIKKyJcImJhdGNoLXNpemVcIiBvY2ggXCJyZWxvZ2luXCIgbcOlc3RlIGFuZ2VzIHRpbGxzYW1tYW5zICh2aWEga29tbWFuZG9yYWQgIgorImVsbGVyIGtvbmZpZ3VyYXRpb25zZmxhZ2dhKVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ5NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tc3VwcHJlc3MtY2MgZmllbGQ6ICclcydcbiIKK21zZ3N0ciAiT2vDpG50IGbDpGx0IGkgLS1zdXBwcmVzcy1jYzogXCIlc1wiXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTI4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1jb25maXJtIHNldHRpbmc6ICclcydcbiIKK21zZ3N0ciAiT2vDpG5kIGluc3TDpGxsbmluZyBpIC0tY29uZmlybTogXCIlc1wiXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGFsaWFzIHdpdGggcXVvdGVzIGlzIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgInZhcm5pbmc6IHNlbmRtYWlsLWFsaWFzIG1lZCBjaXRhdGlvbnN0ZWNrZW4gc3TDtmRzIGludGUuICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGA6aW5jbHVkZTpgIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgInZhcm5pbmc6IFwiOmluY2x1ZGU6XCIgc3TDtmRzIGludGU6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTYwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGAvZmlsZWAgb3IgYHxwaXBlYCByZWRpcmVjdGlvbiBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICJ2YXJuaW5nOiBvbWRpcmlnZXJpbmcgdGlsIFwiL2ZpbFwiIGVsbGVyIFwifHLDtnJcIiBzdMO2ZHMgaW50ZTogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgbGluZSBpcyBub3QgcmVjb2duaXplZDogJXNcbiIKK21zZ3N0ciAidmFybmluZzogc2VuZG1haWwtcmFkZW4ga8Okbm5zIGludGUgaWdlbjogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NDkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgJyVzJyBleGlzdHMgYnV0IGl0IGNvdWxkIGFsc28gYmUgdGhlIHJhbmdlIG9mIGNvbW1pdHNcbiIKKyJ0byBwcm9kdWNlIHBhdGNoZXMgZm9yLiAgUGxlYXNlIGRpc2FtYmlndWF0ZSBieS4uLlxuIgorIlxuIgorIiAgICAqIFNheWluZyBcIi4vJXNcIiBpZiB5b3UgbWVhbiBhIGZpbGU7IG9yXG4iCisiICAgICogR2l2aW5nIC0tZm9ybWF0LXBhdGNoIG9wdGlvbiBpZiB5b3UgbWVhbiBhIHJhbmdlLlxuIgorbXNnc3RyICIiCisiRmlsZW4gXCIlc1wiIGZpbm5zIG1lbiBrYW4gb2Nrc8OlIHZhcmEgZXR0IGluY2hlY2tuaW5nc2ludGVydmFsbFxuIgorImF0dCBza2FwYSBwYXRjaGFyIGbDtnIuIEfDtnIgb3R2ZXR5ZGlndCBnZW5vbSBhdHQuLi5cbiIKKyJcbiIKKyIgICAgKiBTw6RnYSBcIi4vJXNcIiBvbSBkdSBtZW5hciBlbiBmaWw7IGVsbGVyXG4iCisiICAgICogQW5nZSBmbGFnZ2FuIC0tZm9ybWF0LXBhdGNoIG9tIGR1IG1lbmFyIGV0dCBpbnRlcnZhbGwuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjcwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuZGlyICVzOiAlcyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIHV0ZsO2cmEgb3BlbmRpciAlczogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6Njk0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJmYXRhbDogJXM6ICVzXG4iCisid2FybmluZzogbm8gcGF0Y2hlcyB3ZXJlIHNlbnRcbiIKK21zZ3N0ciAiIgorIsO2ZGVzZGlnZXJ0OiAlczogJXNcbiIKKyJ2YXJuaW5nOiBpbmdhIHBhdGNoYXIgaGFyIHPDpG50c1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcwNQorbXNnaWQgIiIKKyJcbiIKKyJObyBwYXRjaCBmaWxlcyBzcGVjaWZpZWQhXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJJbmdhIHBhdGNoZmlsZXIgYW5nYXZzIVxuIgorIlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJObyBzdWJqZWN0IGxpbmUgaW4gJXM/IgorbXNnc3RyICJJbmdlbiDDpHJlbmRlcmFkIGkgJXM/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAlczogJXMiCittc2dzdHIgIkt1bmRlIGludGUgw7ZwcG5hIGbDtnIgc2tyaXZuaW5nICVzOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MzkKK21zZ2lkICIiCisiTGluZXMgYmVnaW5uaW5nIGluIFwiR0lUOlwiIHdpbGwgYmUgcmVtb3ZlZC5cbiIKKyJDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50c1xuIgorImZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLlxuIgorIlxuIgorIkNsZWFyIHRoZSBib2R5IGNvbnRlbnQgaWYgeW91IGRvbid0IHdpc2ggdG8gc2VuZCBhIHN1bW1hcnkuXG4iCittc2dzdHIgIiIKKyJSYWRlciBzb20gYsO2cmphciBtZWQgXCJHSVQ6XCIga29tbWVyIHRhcyBib3J0LlxuIgorIsOWdmVydsOkZyBhdHQgdGEgbWVkIGVuIMO2dmVyZ3JpcGFuZGUgZGlmZnN0YXR1cyBlbGxlclxuIgorImlubmVow6VsbHNmw7ZydGVja25pbmcgZsO2ciBwYXRjaGVuIGR1IHNrcml2ZXIuXG4iCisiXG4iCisiUmVuc2EgYnJldmtyb3BwZW4gb20gZHUgaW50ZSB2aWxsIHPDpG5kYSBuw6Vnb24gc2FtbWFuZmF0dG5pbmcuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzOiAlcyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIMO2cHBuYSAlczogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzgwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzLmZpbmFsOiAlcyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIMO2cHBuYSAlcy5maW5hbDogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODIzCittc2dpZCAiU3VtbWFyeSBlbWFpbCBpcyBlbXB0eSwgc2tpcHBpbmcgaXRcbiIKK21zZ3N0ciAiU2FtbWFuZmF0dGFuZGUgYnJldiB0b210LCBob3BwYXIgw7Z2ZXJcbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwIFt5L05dIGFzIGlzLgorIzogZ2l0LXNlbmQtZW1haWwucGVybDo4NTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVzZSA8JXM+IFt5L05dPyAiCittc2dzdHIgIsOEciBkdSBzw6RrZXIgcMOlIGF0dCBkdSB2aWxsIGFudsOkbmRhIDwlcz4gW1k9amEsIE49bmVqXT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxMworbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGZpbGVzIGFyZSA4Yml0LCBidXQgZG8gbm90IGRlY2xhcmUgYSBDb250ZW50LVRyYW5zZmVyLSIKKyJFbmNvZGluZy5cbiIKK21zZ3N0ciAiIgorIkbDtmxqYW5kZSBmaWxlciDDpHIgw6V0dGFiaXRhcnMsIG1lbiBhbmdlciBpbnRlIGVuIENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTE4Cittc2dpZCAiV2hpY2ggOGJpdCBlbmNvZGluZyBzaG91bGQgSSBkZWNsYXJlIFtVVEYtOF0/ICIKK21zZ3N0ciAiVmlsa2VuIMOldHRhYml0YXJzdGVja2Vua29kbmluZyBza2EgamFnIGFuZ2UgW1VURi04XT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkyNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuIgorIlx0JXNcbiIKKyJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgIgorIndhbnQgdG8gc2VuZC5cbiIKK21zZ3N0ciAiIgorIlbDpGdyYXIgc8OkbmRhIGVmdGVyc29tIHBhdGNoZW5cbiIKKyJcdCVzXG4iCisiaGFyIG1hbGzDpHJlbmRldCBcIioqKiBTVUJKRUNUIEhFUkUgKioqXCIuIEFudsOkbmQgLS1mb3JjZSBvbSBkdSB2ZXJrbGlnZW4gIgorInZpbGwgc8OkbmRhLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk0NQorbXNnaWQgIlRvIHdob20gc2hvdWxkIHRoZSBlbWFpbHMgYmUgc2VudCAoaWYgYW55b25lKT8iCittc2dzdHIgIlRpbGwgdmVtIHNrYSBicmV2ZW4gc8OkbmRhcyAob20gbsOlZ29uKT8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBhbGlhcyAnJXMnIGV4cGFuZHMgdG8gaXRzZWxmXG4iCittc2dzdHIgIsO2ZGVzZGlnZXJ0OiBhbGlhc2V0IFwiJXNcIiBleHBhbmRlcmFyIHRpbGwgc2lnIHNqw6RsdlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk3NQorbXNnaWQgIk1lc3NhZ2UtSUQgdG8gYmUgdXNlZCBhcyBJbi1SZXBseS1UbyBmb3IgdGhlIGZpcnN0IGVtYWlsIChpZiBhbnkpPyAiCittc2dzdHIgIiIKKyJNZXNzYWdlLUlEIGF0dCBhbnbDpG5kYSBzb20gSW4tUmVwbHktVG8gZsO2ciBkZXQgZsO2cnN0YSBicmV2ZXQgKG9tIG7DpWdvdCk/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDMzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJlcnJvcjogdW5hYmxlIHRvIGV4dHJhY3QgYSB2YWxpZCBhZGRyZXNzIGZyb206ICVzXG4iCittc2dzdHIgImZlbDoga3VuZGUgaW50ZSBmw6UgZnJhbSBlbiBnaWx0aWcgYWRyZXNzIGZyw6VuOiAlc1xuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3FdIFtkXSBbZV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0NQorbXNnaWQgIldoYXQgdG8gZG8gd2l0aCB0aGlzIGFkZHJlc3M/IChbcV11aXR8W2Rdcm9wfFtlXWRpdCk6ICIKK21zZ3N0ciAiVmFkIHZpbGwgZHUgZ8O2cmEgbWVkIGFkcmVzc2VuPyAocT1hdnNsdXRhLCBkPWthc3RhLCBlPXJlZGlnZXJhKTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzNjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQ0EgcGF0aCBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkNBLXPDtmt2w6RnZW4gXCIlc1wiIGZpbm5zIGludGUiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ0NQorbXNnaWQgIiIKKyIgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbFxuIgorIiAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0XG4iCisiICAgIHNlbmQtZW1haWwgcHJvbXB0cyBiZWZvcmUgc2VuZGluZyB3aGVuZXZlciB0aGlzIG9jY3Vycy5cbiIKKyIgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybVxuIgorIiAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4iCisiXG4iCisiICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLFxuIgorIiAgICBydW4gJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCittc2dzdHIgIiIKKyIgICAgS29waWVsaXN0YW4gb3ZhbiBoYXIgdXTDtmthdHMgYXYgeXR0ZXJsaWdhcmUgYWRyZXNzZXJcbiIKKyIgICAgZnVubmEgaSBwYXRjaGVucyBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlLiBTZW5kLWVtYWlsXG4iCisiICAgIGZyw6VnYXIgc29tIHN0YW5kYXJkIGlubmFuIHPDpG5kbmluZyBuw6RyIGRldHRhIHNrZXIuXG4iCisiICAgIEJldGVlbmRldCBzdHlycyBhdiBrb25maWd1cmF0aW9uc2luc3TDpGxsbmluZ2VuXG4iCisiICAgIHNlbmRlbWFpbC5jb25maXJtXG4iCisiXG4iCisiICAgIEbDtnIgeXR0ZXJsaWdhcmUgaW5mb3JtYXRpb24sIGvDtnIgXCJnaXQgc2VuZC1lbWFpbCAtLWhlbHBcIi5cbiIKKyIgICAgRsO2ciBhdHQgYmVow6VsbGEgbnV2YXJhbmRlIGJldGVlbmRlLCBtZW4gZMO2bGphIGRldHRhXG4iCisiICAgIG1lZGRlbGFuZGUsIGvDtnIgXCJnaXQgY29uZmlnIC0tZ2xvYmFsIHNlbmRlbWFpbC5jb25maXJtIGF1dG9cIi5cbiIKKyJcbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSBbbl0gW2VdIFtxXSBbYV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ2MAorbXNnaWQgIlNlbmQgdGhpcyBlbWFpbD8gKFt5XWVzfFtuXW98W2VdZGl0fFtxXXVpdHxbYV1sbCk6ICIKK21zZ3N0ciAiU8OkbmRhIGJyZXZldD8gKHk9amEsIG49bmVqLCBlPXJlZGlnZXJhLCBxPWF2c2x1dGEsIGE9YWxsYSk6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDYzCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsIHJlcGx5IHJlcXVpcmVkIgorbXNnc3RyICJTdmFyIGtyw6R2cyBww6UgZnLDpWdhbiBcIlPDpG5kYSBicmV2ZXQ/XCIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ5MQorbXNnaWQgIlRoZSByZXF1aXJlZCBTTVRQIHNlcnZlciBpcyBub3QgcHJvcGVybHkgZGVmaW5lZC4iCittc2dzdHIgIk7DtmR2w6RuZGlnIFNNVFAtc2VydmVyIGhhciBpbnRlIGFuZ2l2aXRzIGtvcnJla3QuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1RBUlRUTFMhICVzIgorbXNnc3RyICJTZXJ2ZXJuIHN0w7ZkZXIgaW50ZSBTTUFSVFRMUyEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0MyBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU1RBUlRUTFMgZmFpbGVkISAlcyIKK21zZ3N0ciAiU1RBUlRUTFMgbWlzc2x5Y2thZGVzISAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTU2Cittc2dpZCAiVW5hYmxlIHRvIGluaXRpYWxpemUgU01UUCBwcm9wZXJseS4gQ2hlY2sgY29uZmlnIGFuZCB1c2UgLS1zbXRwLWRlYnVnLiIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGluaXRpZXJhIFNNVFAga29ycmVrdC4gS29udHJvbGxlcmEgaW5zdMOkbGxuaW5nYXJuYSBvY2ggYW52w6RuZCAtLSIKKyJzbXRwLWRlYnVnLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBzZW5kICVzXG4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBzw6RuZGEgJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRyeS1TZW50ICVzXG4iCittc2dzdHIgIlRlc3QtU8OkbmRlICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZW50ICVzXG4iCittc2dzdHIgIlPDpG5kZSAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJEcnktT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICJUZXN0LU9LLiBMb2dnZW4gc8OkZ2VyOlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJPSy4gTG9nIHNheXM6XG4iCittc2dzdHIgIk9LLiBMb2dnZW4gc8OkZ2VyOlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1OTEKK21zZ2lkICJSZXN1bHQ6ICIKK21zZ3N0ciAiUmVzdWx0YXQ6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTk0Cittc2dpZCAiUmVzdWx0OiBPS1xuIgorbXNnc3RyICJSZXN1bHRhdDogT0tcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAia2FuIGludGUgw7ZwcG5hIGZpbGVuICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NTkgZ2l0LXNlbmQtZW1haWwucGVybDoxNjc5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihtYm94KSBMw6RnZ2VyIHRpbGwgY2M6ICVzIGZyw6VuIHJhZGVuIFwiJXNcIlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyB0bzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIEzDpGdnZXIgdGlsbCB0bzogJXMgZnLDpW4gcmFkZW4gXCIlc1wiXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobm9uLW1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKGlja2UtbWJveCkgTMOkZ2dlciB0aWxsIGNjOiAlcyBmcsOlbiByYWRlbiBcIiVzXCJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihib2R5KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihrcm9wcCkgTMOkZ2dlciB0aWxsIGNjOiAlcyBmcsOlbiByYWRlbiBcIiVzXCJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODY0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQ291bGQgbm90IGV4ZWN1dGUgJyVzJyIKK21zZ3N0ciAiKCVzKSBLdW5kZSBpbnRlIGvDtnJhIFwiJXNcIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODcxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQWRkaW5nICVzOiAlcyBmcm9tOiAnJXMnXG4iCittc2dzdHIgIiglcykgTMOkZ2dlciB0aWxsICVzOiAlcyBmcsOlbjogXCIlc1wiXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg3NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIGZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICclcyciCittc2dzdHIgIiglcykgbWlzc2x5Y2thZGVzIHN0w6RuZ2EgcsO2cmV0IHRpbGwgXCIlc1wiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MDUKK21zZ2lkICJjYW5ub3Qgc2VuZCBtZXNzYWdlIGFzIDdiaXQiCittc2dzdHIgImthbiBpbnRlIHPDpG5kYSBicmV2IHNvbSBzanViaXRhcnMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkxMworbXNnaWQgImludmFsaWQgdHJhbnNmZXIgZW5jb2RpbmciCittc2dzdHIgIm9naWx0aWcgw7Z2ZXJmw7ZyaW5nc2tvbmRuaW5nIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NTQgZ2l0LXNlbmQtZW1haWwucGVybDoyMDA2IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjAxNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlczogJXNcbiIKK21zZ3N0ciAia3VuZGUgaW50ZSDDtnBwbmEgJXM6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlczogcGF0Y2hlbiBpbm5laMOlbGxlciBlbiByYWQgbMOkbmdyZSDDpG4gOTk4IHRlY2tlbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nICVzIHdpdGggYmFja3VwIHN1ZmZpeCAnJXMnLlxuIgorbXNnc3RyICIiCisiSG9wcGFyIMO2dmVyICVzIG1lZCBmaWxuYW1uc3RpbGzDpGdnZXQgXCIlc1wiIHNvbSBhbnbDpG5kcyBmw7ZyICIKKyJzw6RrZXJoZXRza29waW9yLlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk3OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAlcz8gW3l8Tl06ICIKK21zZ3N0ciAiVmlsbCBkdSB2ZXJrbGlnZW4gc8OkbmRhICVzPyBbeT1qYSwgbj1uZWpdOiAiCisKKyN+IG1zZ2lkICJ7ZHJvcCxrZWVwLGFza30iCisjfiBtc2dzdHIgIntkcm9wLGtlZXAsYXNrfSIKKworI34gbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4sYSxxLGQlcyw/XT8gIgorI34gbXNnc3RyICJLw7ZhIMOkbmRyYXQgbMOkZ2UgW3ksbixhLHEsZCVzLD9dPyAiCisKKyN+IG1zZ2lkICJTdGFnZSBkZWxldGlvbiBbeSxuLGEscSxkJXMsP10/ICIKKyN+IG1zZ3N0ciAiS8O2YSBib3J0dGFnbmluZyBbeSxuLGEscSxkJXMsP10/ICIKKworI34gbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLGEscSxkJXMsP10/ICIKKyN+IG1zZ3N0ciAiS8O2YSBzdHlja2V0IFt5LG4sYSxxLGQlcyw/XT8gIgogCiAjfiBtc2dpZCAiIgotI34gIlVuYWJsZSB0byBzdGFydCBnaXRrOlxuIgotI34gIlxuIgotI34gIiVzIGRvZXMgbm90IGV4aXN0IgorI34gIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisjfiAibWFya2VkIGZvciBzdGFnaW5nLlxuIgogI34gbXNnc3RyICIiCi0jfiAiS2FuIGludGUgc3RhcnRhIGdpdGs6XG4iCisjfiAiT20gcGF0Y2hlbiBrYW4gYXBwbGljZXJhcyByZW50IGtvbW1lciBkZXQgcmVkaWdlcmFkZSBzdHlja2V0IGF0dFxuIgorI34gImvDtmFzIG9tZWRlbGJhcnQuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorI34gIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisjfiAicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorI34gImEgLSBzdGFnZSB0aGlzIGFuZCBhbGwgdGhlIHJlbWFpbmluZyBodW5rc1xuIgorI34gImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG5vciBhbnkgb2YgdGhlIHJlbWFpbmluZyBodW5rc1xuIgorI34gbXNnc3RyICIiCisjfiAieSAtIGvDtmEgc3R5Y2tldFxuIgorI34gIm4gLSBrw7ZhIGludGUgc3R5Y2tldFxuIgorI34gInEgLSBhdnNsdXRhOyBrw7ZhIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlXG4iCisjfiAiYSAtIGvDtmEgZGV0dGEgb2NoIGFsbGEgZsO2bGphbmRlIHN0eWNrZW5cbiIKKyN+ICJkIC0ga8O2YSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIHN0eWNrZW4gc29tIGbDtmxqZXJcbiIKKworI34gbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJy4iCisjfiBtc2dzdHIgImt1bmRlIGludGUga29waWVyYSBcIiVzXCIgdGlsbCBcIiVzXCIuIgorCisjfiBtc2dpZCAibWFsZm9ybWVkIGlkZW50IGxpbmUiCisjfiBtc2dzdHIgImZlbGFrdGlnIGlkZW50LXJhZCIKKworI34gbXNnaWQgImNvcnJ1cHRlZCBhdXRob3Igd2l0aG91dCBkYXRlIGluZm9ybWF0aW9uIgorI34gbXNnc3RyICJ0cmFzaWcgZsO2cmZhdHRhcmUgdXRhbiBkYXR1bWluZm9ybWF0aW9uIgorCisjfiBtc2dpZCAiY291bGQgbm90IHBhcnNlICclLipzJyIKKyN+IG1zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBcIiUuKnNcIiIKKworI34gbXNnaWQgImNvdWxkIG5vdCBjaGVja291dCAlcyIKKyN+IG1zZ3N0ciAia3VuZGUgaW50ZSBjaGVja2EgdXQgJXMiCisKKyN+IG1zZ2lkICJmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IGNvbnRhaW5zIGJhY2tzbGFzaDogJyVzJyIKKyN+IG1zZ3N0ciAiZmlsbmFtbmV0IGkgdHLDpGRldCBpbm5laMOlbGxlciBvbXbDpG50IHNuZWRzdHJlY2s6IFwiJXNcIiIKKworI34gbXNnaWQgIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCisjfiBtc2dzdHIgIkFudsOkbmQgLWYgb20gZHUgdmVya2xpZ2VuIHZpbGwgbMOkZ2dhIHRpbGwgZGVtLlxuIgorCisjfiBtc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCisjfiBtc2dzdHIgIkthbnNrZSBtZW5hZGUgZHUgYXR0IHNrcml2YSBcImdpdCBhZGQgLlwiP1xuIgorCisjfiBtc2dpZCAicGFja2ZpbGUgaXMgaW52YWxpZDogJXMiCisjfiBtc2dzdHIgInBhY2tmaWwgw6RyIG9naWx0aWc6ICVzIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIG9wZW4gcGFja2ZpbGUgZm9yIHJldXNlOiAlcyIKKyN+IG1zZ3N0ciAia2FuIGludGUgw7ZwcG5hIHBhY2tmaWwgZsO2ciDDpXRlcmFudsOkbmRuaW5nOiAlcyIKKworI34gbXNnaWQgInVuYWJsZSB0byBzZWVrIGluIHJldXNlZCBwYWNrZmlsZSIKKyN+IG1zZ3N0ciAia2FuIGludGUgc8O2a2EgaSDDpXRlcmFudsOkbmQgcGFja2ZpbCIKKworI34gbXNnaWQgInVuYWJsZSB0byByZWFkIGZyb20gcmV1c2VkIHBhY2tmaWxlIgorI34gbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBmcsOlbiDDpXRlcmFudsOkbmQgcGFja2ZpbCIKKworI34gbXNnaWQgIm5vIEhFQUQ/IgorI34gbXNnc3RyICJpbmdldCBIRUFEPyIKKworI34gbXNnaWQgIm1ha2UgY29tbWl0dGVyIGRhdGUgbWF0Y2ggYXV0aG9yIGRhdGUiCisjfiBtc2dzdHIgInPDpHR0IGluY2hlY2tuaW5nc2RhdHVtIHRpbGwgZsO2cmZhdHRhcmRhdHVtIgorCisjfiBtc2dpZCAiaWdub3JlIGF1dGhvciBkYXRlIGFuZCB1c2UgY3VycmVudCBkYXRlIgorI34gbXNnc3RyICJpZ25vcmVyYSBmw7ZyZmF0dGFyZGF0dW0gb2NoIGFudsOkbmQgbnV2YXJhbmRlIgorCisjfiBtc2dpZCAic3lub255bSBvZiAtLXJlc2V0LWF1dGhvci1kYXRlIgorI34gbXNnc3RyICJzeW5vbnltIGbDtnIgLS1yZXNldC1hdXRob3ItZGF0ZSIKKworI34gbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UiCisjfiBtc2dzdHIgImlnbm9yZXJhIMOkbmRyaW5nYXIgaSBibGFua3N0ZWciCisKKyN+IG1zZ2lkICJwcmVzZXJ2ZSBlbXB0eSBjb21taXRzIGR1cmluZyByZWJhc2UiCisjfiBtc2dzdHIgImJlaMOlbGwgdG9tbWEgaW5jaGVja25pbmdhciB1bmRlciBvbWJhc2VyaW5nIgorCisjfiBtc2dpZCAiY2Fubm90IGNvbWJpbmUgLS11c2UtYml0bWFwLWluZGV4IHdpdGggb2JqZWN0IGZpbHRlcmluZyIKKyN+IG1zZ3N0ciAia2FuIGludGUga29tYmluZXJhIC0tdXNlLWJpdG1hcC1pbmRleCBtZWQgb2JqZWt0ZmlsdHJlcmluZyIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorI34gIiRzbV9wYXRoXG4iCisjfiAiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorI34gbXNnc3RyICIiCisjfiAiRsO2bGphbmRlIHPDtmt2w6RnYXIgaWdub3JlcmFzIGF2IGVuIGF2IGRpbmEgLmdpdGlnbm9yZS1maWxlcjpcbiIKKyN+ICIkc21fcGF0aFxuIgorI34gIkFudsOkbmQgLWYgb20gZHUgdmVya2xpZ2VuIHZpbGwgbMOkZ2dhIHRpbGwgZGVuLiIKKworI34gbXNnaWQgInVuYWJsZSB0byBnZXQgdHJlZSBmb3IgJXMiCisjfiBtc2dzdHIgImt1bmRlIGludGUgaMOkbXRhIHRyw6RkZXQgcMOlICVzIgorCisjfiBtc2dpZCAiVXNlIGFuIGV4cGVyaW1lbnRhbCBoZXVyaXN0aWMgdG8gaW1wcm92ZSBkaWZmcyIKKyN+IG1zZ3N0ciAiQW52w6RuZCBlbiBleHBlcmltZW50ZWxsIGFsZ29yaXRtIGbDtnIgYXR0IGbDtnJiw6R0dHJhIGRpZmZhciIKKworI34gbXNnaWQgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCisjfiBtc2dzdHIgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA8b2Jqa2F0Pl0iCisKKyN+IG1zZ2lkICJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCisjfiBtc2dzdHIgImdpdCBjb21taXQtZ3JhcGggcmVhZCBbLS1vYmplY3QtZGlyIDxvYmprYXQ+XSIKKworI34gbXNnaWQgInVua25vd24gY29yZS51bnRyYWNrZWRDYWNoZSB2YWx1ZSAnJXMnOyB1c2luZyAna2VlcCcgZGVmYXVsdCB2YWx1ZSIKKyN+IG1zZ3N0ciAiIgorI34gIm9rw6RudCB2w6RyZGUgXCIlc1wiIGbDtnIgY29yZS51bnRyYWNrZWRDYWNoZTsgYW52w6RuZGVyIHN0YW5kYXJkdsOkcmRldCBcImtlZXAiCisjfiAiXCIiCisKKyN+IG1zZ2lkICJjYW5ub3QgY2hhbmdlIHBhcnRpYWwgY2xvbmUgcHJvbWlzb3IgcmVtb3RlIgorI34gbXNnc3RyICJrYW4gaW50ZSDDpG5kcmEga29udHJha3RzZmrDpHJyIGbDtnIgZGVsdmlzIGtsb25pbmciCisKKyN+IG1zZ2lkICJlcnJvciBidWlsZGluZyB0cmVlcyIKKyN+IG1zZ3N0ciAiZmVsIHZpZCBieWdnYW5kZSBhdiB0csOkZCIKKworI34gbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQgJyVzJyBpbiAnJXMnIgorI34gbXNnc3RyICJvZ2lsdGlndCBkYXR1bWZvcm1hdCBcIiVzXCIgaSBcIiVzXCIiCisKKyN+IG1zZ2lkICJ3cml0aW5nIHJvb3QgY29tbWl0IgorI34gbXNnc3RyICJza3JpdmVyIHJvdGluY2hlY2tuaW5nIgorCisjfiBtc2dpZCAic3RhZ2VkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyBmaWxlcyBtYXkgYmUgbG9zdDogJXMiCisjfiBtc2dzdHIgImvDtmFkZSDDpG5kcmluZ2FyIGkgZsO2bGphbmRlIGZpbGVyIGthbiBnw6UgZsO2cmxvcmFkZTogJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyN+ICJwYXJ0aWFsQ2xvbmUiCisjfiBtc2dzdHIgIiIKKyN+ICItLWZpbHRlciBrYW4gZW5kYXN0IGFudsOkbmRhcyBtZWQgZmrDpHJyZW4ga29uZmlndXJlcmFkIGkgZXh0ZW5zaW9ucy4iCisjfiAicGFydGlhbENsb25lIgorCisjfiBtc2dpZCAidmVyaWZ5IGNvbW1pdC1tc2cgaG9vayIKKyN+IG1zZ3N0ciAiYmVrcsOkZnRhIGNvbW1pdC1tc2cta3JvayIKKworI34gbXNnaWQgImNhbm5vdCBjb21iaW5lICctLXJlYmFzZS1tZXJnZXMnIHdpdGggJy0tc3RyYXRlZ3ktb3B0aW9uJyIKKyN+IG1zZ3N0ciAia2FuIGludGUga29tYmluZXJhIFwiLS1yZWJhc2UtbWVyZ2VzXCIgbWVkIFwiLS1zdHJhdGVneS1vcHRpb25cIiIKKworI34gbXNnaWQgImludmFsaWQgc3BhcnNlIHZhbHVlICclcyciCisjfiBtc2dzdHIgIm9naWx0aWd0IHbDpHJkZSBmw7ZyIHNwYXJzZTogXCIlc1wiIgorCisjfiBtc2dpZCAiIgorI34gIkZldGNoIG5vcm1hbGx5IGluZGljYXRlcyB3aGljaCBicmFuY2hlcyBoYWQgYSBmb3JjZWQgdXBkYXRlLCBidXQgdGhhdCAiCisjfiAiY2hlY2sgaGFzIGJlZW4gZGlzYWJsZWQuIgorI34gbXNnc3RyICIiCisjfiAiSMOkbXRuaW5nIHZpc2FyIHZhbmxpZ3R2aXMgdmlsa2EgZ3JlbmFyIHNvbSBoYXIgZW4gdHZpbmdhZCB1cHBkYXRlcmluZywgIgorI34gIm1lbiBkZXQgdGVzdGV0IGhhciBzbGFnaXRzIGF2LiIKKworI34gbXNnaWQgIiIKKyN+ICJvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgZmFsc2UnIHRvIGF2b2lkIHRoaXMgY2hlY2suXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJlbGxlciBrw7ZyIFwiZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyBmYWxzZVwiIGbDtnIgdW5kdmlrYSAiCisjfiAidGVzdGV0LlxuIgorCisjfiBtc2dpZCAiIgorI34gImxvZy5tYWlsbWFwIGlzIG5vdCBzZXQ7IGl0cyBpbXBsaWNpdCB2YWx1ZSB3aWxsIGNoYW5nZSBpbiBhblxuIgorI34gInVwY29taW5nIHJlbGVhc2UuIFRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBwcmVzZXJ2ZSBjdXJyZW50XG4iCisjfiAiYmVoYXZpb3VyLCBzZXQgdGhlIGxvZy5tYWlsbWFwIGNvbmZpZ3VyYXRpb24gdmFsdWUgdG8gZmFsc2UuXG4iCiAjfiAiXG4iCi0jfiAiJXMgZmlubnMgaW50ZSIKKyN+ICJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgYWRvcHQgdGhlIG5ldyBiZWhhdmlvdXIgbm93LCBzZXQgdGhlXG4iCisjfiAibG9nLm1haWxtYXAgY29uZmlndXJhdGlvbiB2YWx1ZSB0byB0cnVlLlxuIgorI34gIlxuIgorI34gIlNlZSAnZ2l0IGhlbHAgY29uZmlnJyBhbmQgc2VhcmNoIGZvciAnbG9nLm1haWxtYXAnIGZvciBmdXJ0aGVyICIKKyN+ICJpbmZvcm1hdGlvbi4iCisjfiBtc2dzdHIgIiIKKyN+ICJsb2cubWFpbG1hcCBoYXIgaW50ZSBzYXR0czogZsO2cnZhbGV0IGtvbW1lciDDpG5kcmFzIGkgZW4ga29tbWFuZGVcbiIKKyN+ICJ2ZXJzaW9uLiBGw7ZyIGF0dCBkw7ZsamEgZGV0IGjDpHIgbWVkZGVsYW5kZXQgb2NoIGJlaMOlbGxhIG51dmFyYW5kZVxuIgorI34gImJldGVlbmRlLCBzw6R0dCBrb25maWd1cmF0aW9uc3ZhcmlhYmVsbiBsb2cubWFpbG1hcCB0aWxsIGZhbHNlLlxuIgorI34gIlxuIgorI34gIkbDtnIgYXR0IGTDtmxqYSBkZXQgaMOkciBtZWRkZWxhbmRldCBvY2ggYW52w6RuZGEgZGV0IG55YSBiZXRlZW5kZXQsXG4iCisjfiAic8OkdHQga29uZmlndXJhdGlvbnN2YXJpYWJlbG4gbG9nLm1haWxtYXAgdGlsbCB0cnVlLlxuIgorI34gIlxuIgorI34gIlNlIFwiZ2l0IGhlbHAgY29uZmlnXCIgb2NoIHPDtmsgZWZ0ZXIgXCJsb2cubWFpbG1hcFwiIGbDtnIgbWVyIGluZm9ybWF0aW9uLiIKIAotI34gbXNnaWQgIkFwcGxlIgotI34gbXNnc3RyICLDhHBwbGUiCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2Fja19kZXRhaWxlZCIKKyN+IG1zZ3N0ciAiU2VydmVybiBzdMO2ZGVyIFwibXVsdGlfYWNrX2RldGFpbGVkXCIiCiAKLSN+IG1zZ2lkICJOb3QgY29ubmVjdGVkIHRvIGFzcGVsbCIKLSN+IG1zZ3N0ciAiSW50ZSBhbnNsdXRlbiB0aWxsIGFzcGVsbCIKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgbm8tZG9uZSIKKyN+IG1zZ3N0ciAiU2VydmVybiBzdMO2ZGVyIFwibm8tZG9uZVwiIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2FjayIKKyN+IG1zZ3N0ciAiU2VydmVybiBzdMO2ZGVyIFwibXVsdGlfYWNrXCIiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kLTY0ayIKKyN+IG1zZ3N0ciAiU2VydmVybiBzdMO2ZGVyIFwic2lkZS1iYW5kLTY0a1wiIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIHNpZGUtYmFuZCIKKyN+IG1zZ3N0ciAiU2VydmVybiBzdMO2ZGVyIFwic2lkZS1iYW5kXCIiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgYWxsb3ctdGlwLXNoYTEtaW4td2FudCIKKyN+IG1zZ3N0ciAiU2VydmVybiBzdMO2ZGVyIFwiYWxsb3ctdGlwLXNoYTEtaW4td2FudFwiIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIGFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQiCisjfiBtc2dzdHIgIlNlcnZlcm4gc3TDtmRlciBcImFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnRcIiIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBvZnMtZGVsdGEiCisjfiBtc2dzdHIgIlNlcnZlcm4gc3TDtmRlciBcIm9mcy1kZWx0YVwiIgorCisjfiBtc2dpZCAiKEhFQUQgZGV0YWNoZWQgYXQgJXMpIgorI34gbXNnc3RyICIoSEVBRCBmcsOlbmtvcHBsYXQgdmlkICVzKSIKKworI34gbXNnaWQgIihIRUFEIGRldGFjaGVkIGZyb20gJXMpIgorI34gbXNnc3RyICIoSEVBRCBmcsOlbmtvcHBsYXQgZnLDpW4gJXMpIgorCisjfiBtc2dpZCAiQ2hlY2tpbmcgb3V0IGZpbGVzIgorI34gbXNnc3RyICJDaGVja2FyIHV0IGZpbGVyIgorCisjfiBtc2dpZCAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorI34gbXNnc3RyICIiCisjfiAia2FuIGludGUgdmFyYSBpbnRlcmFrdGl2IG9tIHN0YW5kYXJkIGluIGludGUgw6RyIGFuc2x1dGVuIHRpbGwgZW4gdGVybWluYWwuIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKKyN+IG1zZ3N0ciAibWlzc2x5Y2thZGVzIHRhIHN0YXR1cyBww6UgJXNcbiIKKworI34gbXNnaWQgIiIKKyN+ICJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisjfiAiXG4iCisjfiAiICAgIGdpdCByZXNldFxuIgorI34gIlxuIgorI34gIlRoZW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHdpbGwgcmVzdW1lIGNoZXJyeS1waWNraW5nXG4iCisjfiAidGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorI34gbXNnc3RyICIiCisjfiAiT20gZHUgdmlsbCBob3BwYSDDtnZlciBpbmNoZWNrbmluZ2VuLCBhbnbDpG5kOlxuIgorI34gIlxuIgorI34gIiAgICBnaXQgcmVzZXRcbiIKKyN+ICJcbiIKKyN+ICJcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIga29tbWVyIGTDpHJlZnRlciBhdHQgw6V0ZXJ1cHB0YVxuIgorI34gImNoZXJyeS1waWNrIGbDtnIgw6V0ZXJzdMOlZW5kZSBpbmNoZWNrbmluZ2FyLlxuIgorCisjfiBtc2dpZCAidW5yZWNvZ25pemVkIHZlcmI6ICVzIgorI34gbXNnc3RyICJva8OkbnQgdmVyYjogJXMiCisKKyN+IG1zZ2lkICJoYXNoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKKyN+IG1zZ3N0ciAiaGFzaC12ZXJzaW9uZW4gJVggc3TDpG1tZXIgaW50ZSBtZWQgdmVyc2lvbmVuICVYIgorCisjfiBtc2dpZCAib3B0aW9uICclcycgcmVxdWlyZXMgYSB2YWx1ZSIKKyN+IG1zZ3N0ciAiZmxhZ2dhbiBcIiVzXCIgYmVow7Z2ZXIgZXR0IHbDpHJkZSIKKworI34gbXNnaWQgImNvdWxkIG5vdCB0cmFuc2Zvcm0gdGhlIHRvZG8gbGlzdCIKKyN+IG1zZ3N0ciAia3VuZGUgaW50ZSB0cmFuc2Zvcm1lcmEgYXR0IGfDtnJhLWxpc3RhbiIKKworI34gbXNnaWQgImRlZmF1bHQiCisjfiBtc2dzdHIgInN0YW5kYXJkIgorCisjfiBtc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKKyN+IG1zZ3N0ciAiS3VuZGUgaW50ZSBza2FwYSBrYXRhbG9nZW4gXCIlc1wiIgorCisjfiBtc2dpZCAiYWxsb3cgcmVyZXJlIHRvIHVwZGF0ZSBpbmRleCB3aXRoIHJlc29sdmVkIGNvbmZsaWN0IgorI34gbXNnc3RyICJ0aWxsw6V0IHJlcmVyZSBhdHQgdXBwZGF0ZXJhIGluZGV4IG1lZCBsw7ZzYSBrb25mbGlrdGVyIgorCisjfiBtc2dpZCAiY291bGQgbm90IG9wZW4gJXMiCisjfiBtc2dzdHIgImt1bmRlIGludGUgw7ZwcG5hICVzIgorCisjfiBtc2dpZCAiQ291bGQgbm90IG1vdmUgYmFjayB0byAkaGVhZF9uYW1lIgorI34gbXNnc3RyICJLdW5kZSBpbnRlIGZseXR0YSB0aWxsYmFrYSB0aWxsICRoZWFkX25hbWUiCisKKyN+IG1zZ2lkICIiCisjfiAiSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJHN0YXRlX2Rpcl9iYXNlIGRpcmVjdG9yeSwgYW5kXG4iCisjfiAiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyN+ICJjYXNlLCBwbGVhc2UgdHJ5XG4iCisjfiAiXHQkY21kX2xpdmVfcmViYXNlXG4iCisjfiAiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZVxuIgorI34gIlx0JGNtZF9jbGVhcl9zdGFsZV9yZWJhc2VcbiIKKyN+ICJhbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZ1xuIgorI34gInZhbHVhYmxlIHRoZXJlLiIKKyN+IG1zZ3N0ciAiIgorI34gIkRldCB2ZXJrYXIgc29tIGthdGFsb2dlbiAkc3RhdGVfZGlyX2Jhc2UgcmVkYW4gZXhpc3RlcmFyLCBvY2hcbiIKKyN+ICJqYWcgdW5kcmFyIG9tIGR1IHJlZGFuIMOkciBtaXR0IGkgZW4gYW5uYW4gb21iYXNlcmluZy4gT20gc8OlIMOkclxuIgorI34gImZhbGxldCwgZsO2cnPDtmtcbiIKKyN+ICJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyN+ICJPbSBzw6UgaW50ZSDDpHIgZmFsbGV0LCBrw7ZyXG4iCisjfiAiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorI34gIm9jaCBrw7ZyIHByb2dyYW1tZXQgaWdlbi4gSmFnIGF2c2x1dGFyIGlmYWxsIGR1IGZvcnRmYXJhbmRlIGhhclxuIgorI34gIm7DpWdvdCBhdiB2w6RyZGUgZMOkci4iCisKKyN+IG1zZ2lkICIiCisjfiAiZmF0YWw6IGNhbm5vdCBjb21iaW5lIGFtIG9wdGlvbnMgd2l0aCBlaXRoZXIgaW50ZXJhY3RpdmUgb3IgbWVyZ2Ugb3B0aW9ucyIKKyN+IG1zZ3N0ciAiIgorI34gIsO2ZGVzZGlnZXJ0OiBrYW4gaW50ZSBrb21iaW5lcmEgYW0tZmxhZ2dvciBtZWQgYW50aW5nZW4gaW50ZXJha3Rpdi0gZWxsZXIgIgorI34gInNhbW1hbnNsYWduaW5nc2ZsYWdnb3IiCisKKyN+IG1zZ2lkICJmYXRhbDogY2Fubm90IGNvbWJpbmUgJy0tc2lnbm9mZicgd2l0aCAnLS1wcmVzZXJ2ZS1tZXJnZXMnIgorI34gbXNnc3RyICIiCisjfiAiw7ZkZXNkaWdlcnQ6IGthbiBpbnRlIGtvbWJpbmVyYSBcIi0tc2lnbm9mZlwiIG1lZCBcIi0tcHJlc2VydmUtbWVyZ2VzXCIiCisKKyN+IG1zZ2lkICJmYXRhbDogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorI34gbXNnc3RyICIiCisjfiAiw7ZkZXNkaWdlcnQ6IGthbiBpbnRlIGtvbWJpbmVyYSBcIi0tcHJlc2VydmUtbWVyZ2VzXCIgbWVkIFwiLS1yZWJhc2UtbWVyZ2VzIgorI34gIlwiIgorCisjfiBtc2dpZCAiZmF0YWw6IGNhbm5vdCBjb21iaW5lICctLXJlYmFzZS1tZXJnZXMnIHdpdGggJy0tc3RyYXRlZ3ktb3B0aW9uJyIKKyN+IG1zZ3N0ciAiIgorI34gIsO2ZGVzZGlnZXJ0OiBrYW4gaW50ZSBrb21iaW5lcmEgXCItLXJlYmFzZS1tZXJnZXNcIiBtZWQgXCItLXN0cmF0ZWd5LW9wdGlvbiIKKyN+ICJcIiIKKworI34gbXNnaWQgImZhdGFsOiBjYW5ub3QgY29tYmluZSAnLS1yZWJhc2UtbWVyZ2VzJyB3aXRoICctLXN0cmF0ZWd5JyIKKyN+IG1zZ3N0ciAiIgorI34gIsO2ZGVzZGlnZXJ0OiBrYW4gaW50ZSBrb21iaW5lcmEgXCItLXJlYmFzZS1tZXJnZXNcIiBtZWQgXCItLXN0cmF0ZWd5XCIiCisKKyN+IG1zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICckdXBzdHJlYW1fbmFtZSciCisjfiBtc2dzdHIgIm9naWx0aWcgdXBwc3Ryw7ZtIFwiJHVwc3RyZWFtX25hbWVcIiIKKworI34gbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIG1lcmdlIGJhc2VzIgorI34gbXNnc3RyICIkb250b19uYW1lOiBtZXIgw6RuIGVuIHNhbW1hbnNsYWduaW5nc2JhcyBmaW5ucyIKKworI34gbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGlzIG5vIG1lcmdlIGJhc2UiCisjfiBtc2dzdHIgIiRvbnRvX25hbWU6IGluZ2VuIHNhbW1hbnNsYWduaW5nc2JhcyBmaW5ucyIKKworI34gbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0OiAkb250b19uYW1lIgorI34gbXNnc3RyICJQZWthIHDDpSBlbiBnaWx0aWcgaW5jaGVja25pbmc6ICRvbnRvX25hbWUiCisKKyN+IG1zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2gvY29tbWl0ICckYnJhbmNoX25hbWUnIgorI34gbXNnc3RyICLDtmRlc2RpZ2VydDogaW5nZW4gc8OlZGFuIGdyZW4vaW5jaGVja25pbmc6ICRicmFuY2hfbmFtZSIKKworI34gbXNnaWQgIkNyZWF0ZWQgYXV0b3N0YXNoOiAkc3Rhc2hfYWJicmV2IgorI34gbXNnc3RyICJTa2FwYWRlIGF1dG9zdGFzaDogJHN0YXNoX2FiYnJldiIKKworI34gbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLiIKKyN+IG1zZ3N0ciAiQWt0dWVsbCBncmVuICRicmFuY2hfbmFtZSDDpHIgw6Agam91ci4iCisKKyN+IG1zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCisjfiBtc2dzdHIgIkFrdHVlbGwgZ3JlbiAkYnJhbmNoX25hbWUgw6RyIMOgIGpvdXIsIG9tYmFzZXJpbmcgZnJhbXR2aW5nYWQuIgorCisjfiBtc2dpZCAiQ2hhbmdlcyB0byAkb250bzoiCisjfiBtc2dzdHIgIsOEbmRyaW5nYXIgdGlsbCAkb250bzoiCisKKyN+IG1zZ2lkICJDaGFuZ2VzIGZyb20gJG1iIHRvICRvbnRvOiIKKyN+IG1zZ3N0ciAiw4RuZHJpbmdhciBmcsOlbiAkbWIgdGlsbCAkb250bzoiCisKKyN+IG1zZ2lkICJGYXN0LWZvcndhcmRlZCAkYnJhbmNoX25hbWUgdG8gJG9udG9fbmFtZS4iCisjfiBtc2dzdHIgIlNuYWJic3BvbGFkZSAkYnJhbmNoX25hbWUgdGlsbCAkb250b19uYW1lLiIKKworI34gbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKKyN+IG1zZ3N0ciAiIgorI34gIkbDtnJzdCwgc3BvbGFyIHRpbGxiYWthIGh1dnVkZXQgZsO2ciBhdHQgc3BlbGEgYXYgZGl0dCBhcmJldGUgb3ZhbnDDpSBkZXQuLi4iCisKKyN+IG1zZ2lkICJpZ25vcmluZyB1bmtub3duIGNvbG9yLW1vdmVkLXdzIG1vZGUgJyVzJyIKKyN+IG1zZ3N0ciAiaWdub3JlcmFyIG9rw6RudCBsw6RnZSBmw7ZyIGNvbG9yLW1vZGUtd3MgXCIlc1wiIgorCisjfiBtc2dpZCAib25seSAndHJlZTowJyBpcyBzdXBwb3J0ZWQiCisjfiBtc2dzdHIgImVuZGFzdCBcInRyZWU6MFwiIHN0w7ZkcyIKKworI34gbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzIGFuZCAlcyB0byAlcyBpbnN0ZWFkIgorI34gbXNnc3RyICJCeXRlciBuYW1uIHDDpSAlcyB0aWxsICVzIG9jaCAlcyB0aWxsICVzIGlzdMOkbGxldCIKKworI34gbXNnaWQgIkFkZGluZyBtZXJnZWQgJXMiCisjfiBtc2dzdHIgIkzDpGdnZXIgdGlsbCBzYW1tYW5zbGFnZW4gJXMiCisKKyN+IG1zZ2lkICJJbnRlcm5hbCBlcnJvciIKKyN+IG1zZ3N0ciAiSW50ZXJudCBmZWwiCisKKyN+IG1zZ2lkICJtYWlubGluZSB3YXMgc3BlY2lmaWVkIGJ1dCBjb21taXQgJXMgaXMgbm90IGEgbWVyZ2UuIgorI34gbXNnc3RyICJodXZ1ZGxpbmplIGFuZ2F2cywgbWVuIGluY2hlY2tuaW5nZW4gJXMgw6RyIGludGUgZW4gc2FtbWFuc2xhZ25pbmcuIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIHdyaXRlIHNoYTEgZmlsZW5hbWUgJXMiCisjfiBtc2dzdHIgImthbiBpbnRlIHNrcml2YSBzaGExLWZpbG5hbW4gJXMiCisKKyN+IG1zZ2lkICJjYW5ub3QgcmVhZCBzaGExX2ZpbGUgZm9yICVzIgorI34gbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBzaGExX2ZpbGUgZsO2ciAlcyIKKworI34gbXNnaWQgIiIKKyN+ICJlcnJvcjogY2Fubm90IGNvbWJpbmUgaW50ZXJhY3RpdmUgb3B0aW9ucyAoLS1pbnRlcmFjdGl2ZSwgLS1leGVjLCAtLSIKKyN+ICJyZWJhc2UtbWVyZ2VzLCAtLXByZXNlcnZlLW1lcmdlcywgLS1rZWVwLWVtcHR5LCAtLXJvb3QgKyAtLW9udG8pIHdpdGggYW0gIgorI34gIm9wdGlvbnMgKCVzKSIKKyN+IG1zZ3N0ciAiIgorI34gImZlbDoga2FuIGludGUga29tYmluZXJhIGludGVyYWt0aXZhIGZsYWdnb3IgKC0taW50ZXJhY3RpdmUsIC0tZXhlYywgLS0iCisjfiAicmViYXNlLW1lcmdlcywgLS1wcmVzZXJ2ZS1tZXJnZXMsIC0ta2VlcC1lbXB0eSwgLS1yb290ICsgLS1vbnRvKSBtZWQgYW0tIgorI34gImZsYWdnb3IgKCVzKSIKKworI34gbXNnaWQgIiIKKyN+ICJlcnJvcjogY2Fubm90IGNvbWJpbmUgbWVyZ2Ugb3B0aW9ucyAoLS1tZXJnZSwgLS1zdHJhdGVneSwgLS1zdHJhdGVneS0iCisjfiAib3B0aW9uKSB3aXRoIGFtIG9wdGlvbnMgKCVzKSIKKyN+IG1zZ3N0ciAiIgorI34gImZlbDoga2FuIGludGUga29tYmluZXJhIHNhbW1hbnNsYWduaW5nc2ZsYWdnb3IgKC0tbWVyZ2UsIC0tc3RyYXRlZ3ksIC0tIgorI34gInN0cmF0ZWd5LW9wdGlvbikgbWVkIGFtLWZsYWdnb3IgKCVzKSIKKworI34gbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKKyN+IG1zZ3N0ciAiZmxhZ2dhbiBrw6RubnMgaW50ZSBpZ2VuOiBcIiRhcmdcIiIKKworI34gbXNnaWQgIickaW52YWxpZCcgaXMgbm90IGEgdmFsaWQgY29tbWl0IgorI34gbXNnc3RyICJcIiRpbnZhbGlkXCIgw6RyIGludGUgZW4gZ2lsdGlnIGluY2hlY2tuaW5nIgorCisjfiBtc2dpZCAiY291bGQgbm90IHBhcnNlICclcycgKGxvb2tpbmcgZm9yICclcycpIgorI34gbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIFwiJXNcIiAobGV0YXIgZWZ0ZXIgXCIlc1wiKSIKKworI34gbXNnaWQgImRlcHJlY2F0ZWQgc3lub255bSBmb3IgLS1jcmVhdGUtcmVmbG9nIgorI34gbXNnc3RyICJhdnLDpWRkIHN5bm9ueW0gZsO2ciAtLWNyZWF0ZS1yZWZsb2ciCisKKyN+IG1zZ2lkICJDYW4ndCBzdGF0ICVzIgorI34gbXNnc3RyICJLYW4gaW50ZSB0YSBzdGF0dXMgcMOlICVzIgorCisjfiBtc2dpZCAiYWJvcnQgcmViYXNlIgorI34gbXNnc3RyICJhdmJyeXQgb21iYXNlcmluZyIKKworI34gbXNnaWQgIm1ha2UgcmViYXNlIHNjcmlwdCIKKyN+IG1zZ3N0ciAic2thcGEgb21iYXNlcmluZ3Nza3JpcHQiCisKKyN+IG1zZ2lkICJObyBzdWNoIHJlbW90ZTogJXMiCisjfiBtc2dzdHIgIkluZ2V0IHPDpWRhbnQgZmrDpHJyYXJraXY6ICVzIgorCisjfiBtc2dpZCAiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlIgorI34gbXNnc3RyICJrYW4gaW50ZSBmbHl0dGEgZW4gbMOlc3QgYXJiZXRza2F0YWxvZyIKKworI34gbXNnaWQgImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlIgorI34gbXNnc3RyICJrYW4gaW50ZSB0YSBib3J0IGVuIGzDpXN0IGFyYmV0c2thdGFsb2ciCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiXHRIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorI34gIlxuIgorI34gIlx0IgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiXHRPbWJhc2VyaW5nZW4ga29tbWVyIGRvY2sgYXR0IGF2YnJ5dGFzIG9tIGR1IHRhciBib3J0IGFsbHRpbmcuXG4iCisjfiAiXG4iCisjfiAiXHQiCisKKyN+IG1zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IG1lcmdlIChkaXJ0eTogJXMpIgorI34gbXNnc3RyICJTbXV0c2lndCBpbmRleDoga2FuIGludGUgc2zDpSBpaG9wIChzbXV0c2lnYTogJXMpIgorCisjfiBtc2dpZCAiKCsvLSl4IgorI34gbXNnc3RyICIoKy8tKXgiCisKKyN+IG1zZ2lkICI8Y29tbWFuZD4iCisjfiBtc2dzdHIgIjxrb21tYW5kbz4iCisKKyN+IG1zZ2lkICJwdXNofGZldGNoIgorI34gbXNnc3RyICJwdXNofGZldGNoIgorCisjfiBtc2dpZCAid1ssaTFbLGkyXV0iCisjfiBtc2dzdHIgIndbLGkxWyxpMl1dIgorCisjfiBtc2dpZCAiRW50ZXJpbmcgJyRkaXNwbGF5cGF0aCciCisjfiBtc2dzdHIgIkfDpXIgaW4gaSBcIiRkaXNwbGF5cGF0aFwiIgorCisjfiBtc2dpZCAiU3RvcHBpbmcgYXQgJyRkaXNwbGF5cGF0aCc7IHNjcmlwdCByZXR1cm5lZCBub24temVybyBzdGF0dXMuIgorI34gbXNnc3RyICIiCisjfiAiU3RvcHBhciBww6UgXCIkZGlzcGxheXBhdGhcIjsgc2tyaXB0ZXQgcmV0dXJuZXJhZGUgZW4gc3RhdHVzIHNraWxkIGZyw6VuICIKKyN+ICJub2xsLiIKKworI34gbXNnaWQgIkV2ZXJ5ZGF5IEdpdCBXaXRoIDIwIENvbW1hbmRzIE9yIFNvIgorI34gbXNnc3RyICJHaXQgZsO2ciBkYWdsaWd0IGJydWsgaSB1bmdlZsOkciAyMCBrb21tYW5kb24iCisKKyN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorI34gbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSBcIiVzXCIgZsO2ciBza3Jpdm5pbmciCisKKyN+IG1zZ2lkICIiCisjfiAidW5leHBlY3RlZCAxc3QgbGluZSBvZiBzcXVhc2ggbWVzc2FnZTpcbiIKKyN+ICJcbiIKKyN+ICJcdCUuKnMiCisjfiBtc2dzdHIgIiIKKyN+ICJvdsOkbnRhZCBmw7Zyc3RhIHJhZCBpIHNxdWFzaC1tZWRkZWxhbmRlOlxuIgorI34gIlxuIgorI34gIlx0JS4qcyIKKworI34gbXNnaWQgIiIKKyN+ICJpbnZhbGlkIDFzdCBsaW5lIG9mIHNxdWFzaCBtZXNzYWdlOlxuIgorI34gIlxuIgorI34gIlx0JS4qcyIKKyN+IG1zZ3N0ciAiIgorI34gIm9naWx0aWcgZsO2cnN0YSByYWQgaSBzcXVhc2gtbWVkZGVsYW5kZTpcbiIKKyN+ICJcbiIKKyN+ICJcdCUuKnMiCisKKyN+IG1zZ2lkICJCVUc6IHJldHVybmVkIHBhdGggc3RyaW5nIGRvZXNuJ3QgbWF0Y2ggY3dkPyIKKyN+IG1zZ3N0ciAiQlVHOiByZXR1cm5lcmFkIHPDtmt2w6Rnc3N0csOkbmcgbWF0Y2hhciBpbnRlIGN3ZD8iCisKKyN+IG1zZ2lkICJFcnJvciBpbiBvYmplY3QiCisjfiBtc2dzdHIgIkZlbCBpIG9iamVrdCIKKworI34gbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIgorI34gbXNnc3RyICJnaXQgZmV0Y2gtcGF0Y2g6IGbDtnJ2w6RudGFkZSBBQ0svTkFLLCBmaWNrIEVPRiIKKworI34gbXNnaWQgImludmFsaWQgZmlsdGVyLXNwZWMgZXhwcmVzc2lvbiAnJXMnIgorI34gbXNnc3RyICJvZ2lsdGlnIGZpbHRlcnNwZWMtdXRyeWNrIFwiJXNcIiIKKworI34gbXNnaWQgIlRoZSBjb3B5IG9mIHRoZSBwYXRjaCB0aGF0IGZhaWxlZCBpcyBmb3VuZCBpbjogJXMiCisjfiBtc2dzdHIgIkVuIGtvcGlhIGF2IHBhdGNoZW4gc29tIG1pc3NseWNrYWRlcyBmaW5ucyBpOiAlcyIKKworI34gbXNnaWQgInBhdGhzcGVjIGFuZCAtLWFsbCBhcmUgaW5jb21wYXRpYmxlIgorI34gbXNnc3RyICJzw7ZrdsOkZ3NhbmdpdmVsc2Ugb2NoIC0tYWxsIMOkciBpbmtvbXBhdGlibGEiCisKKyN+IG1zZ2lkICJTdWJtb2R1bGUgJyRuYW1lJyAoJHVybCkgdW5yZWdpc3RlcmVkIGZvciBwYXRoICckZGlzcGxheXBhdGgnIgorI34gbXNnc3RyICIiCisjfiAiVW5kZXJtb2R1bGVuIFwiJG5hbWVcIiAoJHVybCkgYXZyZWdpc3RyZXJhZCBmw7ZyIHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIiIKKworI34gbXNnaWQgIlRvL0NjL0JjYyBmaWVsZHMgYXJlIG5vdCBpbnRlcnByZXRlZCB5ZXQsIHRoZXkgaGF2ZSBiZWVuIGlnbm9yZWRcbiIKKyN+IG1zZ3N0ciAiRsOkbHRlbiBUby9DYy9CY2MgdG9sa2FzIGludGUgw6RubnUsIGRlIGhhciBpZ25vcmVyYXRzXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiZW1wdHkgc3RyaW5ncyBhcyBwYXRoc3BlY3Mgd2lsbCBiZSBtYWRlIGludmFsaWQgaW4gdXBjb21pbmcgcmVsZWFzZXMuICIKKyN+ICJwbGVhc2UgdXNlIC4gaW5zdGVhZCBpZiB5b3UgbWVhbnQgdG8gbWF0Y2ggYWxsIHBhdGhzIgorI34gbXNnc3RyICIiCisjfiAidG9tbWEgc3Ryw6RuZ2FyIHNvbSBzw7ZrdsOkZ3NhbmdpdmVsc2VyIGtvbW1lciBibGkgb2dpbHRpZ2EgaSBlbiBrb21tYW5kZSAiCisjfiAidXRnw6V2YS4gYW52w6RuZCBpc3TDpGxsZXQgLiBvbSBkdSB2aWxsIHRyw6RmZmEgYWxsYSBzw7ZrdsOkZ2FyIgorCisjfiBtc2dpZCAiY291bGQgbm90IHRydW5jYXRlICclcyciCisjfiBtc2dzdHIgImt1bmRlIGludGUgdHJ1bmtlcmEgXCIlc1wiIgorCisjfiBtc2dpZCAiY291bGQgbm90IGNsb3NlICVzIgorI34gbXNnc3RyICJrdW5kZSBpbnRlIHN0w6RuZ2EgJXMiCisKKyN+IG1zZ2lkICJDb3BpZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorI34gbXNnc3RyICJLb3BpZXJhZGUgYm9ydCBlbiBmZWxha3RpZ3QgbmFtbmdpdmVuIGdyZW4gXCIlc1wiIgorCisjfiBtc2dpZCAiaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBjcmVhdGUgJ0hFQUQnIG1hbnVhbGx5IgorI34gbXNnc3RyICJrYW4gaW50ZSBza2FwYSBcIkhFQURcIiBtYW51ZWxsdCIKKworI34gbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGNsb25lICVzIgorI34gbXNnc3RyICJWZXQgaW50ZSBodXIgbWFuIGtsb25hciAlcyIKKworI34gbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGZldGNoIGZyb20gJXMiCisjfiBtc2dzdHIgIlZldCBpbnRlIGh1ciBtYW4gaMOkbXRhciBmcsOlbiAlcyIKKworI34gbXNnaWQgIickdGVybScgaXMgbm90IGEgdmFsaWQgdGVybSIKKyN+IG1zZ3N0ciAiXCIkdGVybVwiIMOkciBpbnRlIGVuIGdpbHRpZyB0ZXJtIgorCisjfiBtc2dpZCAiIgorI34gImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAkb3B0aW9uXG4iCisjfiAiICAgICAgIFRvIHByb3ZpZGUgYSBtZXNzYWdlLCB1c2UgZ2l0IHN0YXNoIHNhdmUgLS0gJyRvcHRpb24nIgorI34gbXNnc3RyICIiCisjfiAiZmVsOiBmZWxha3RpZyBmbGFnZ2EgZsO2ciBcInN0YXNoIHNhdmVcIjogJG9wdGlvblxuIgorI34gIiAgICAgRsO2ciBhdHQgYW5nZSBldHQgbWVkZGVsYW5kZSwgYW52w6RuZCBnaXQgc3Rhc2ggc2F2ZSAtLSBcIiRvcHRpb25cIiIKKworI34gbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKKyN+IG1zZ3N0ciAiTWlzc2x5Y2thZGVzIHJla3Vyc2VyYSBpbiBpIHVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJHNtX3BhdGhcIiIKKworI34gbXNnaWQgIiUlKHRyYWlsZXJzKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKKyN+IG1zZ3N0ciAiJSUodHJhaWxlcnMpIHRhciBpbnRlIGFyZ3VtZW50IgorCisjfiBtc2dpZCAiIgorI34gInVucmVjb2duaXplZCBzZXR0aW5nICVzIGZvciBvcHRpb25yZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JpbmcuIgorI34gbXNnc3RyICIiCisjfiAib2vDpG5kIGluc3TDpGxsbmluZyAlcyBmw7ZyIGZsYWdnYW4gcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suIElnbm9yZXJhci4iCisKKyN+IG1zZ2lkICIlIgorI34gbXNnaWRfcGx1cmFsICIlIgorI34gbXNnc3RyWzBdICIlIgorI34gbXNnc3RyWzFdICIlIgorCisjfiBtc2dpZCAiJXMsICUiCisjfiBtc2dpZF9wbHVyYWwgIiVzLCAlIgorI34gbXNnc3RyWzBdICIlcy4gJSIKKyN+IG1zZ3N0clsxXSAiJXMuICUiCisKKyN+IG1zZ2lkICJzdWJtb2R1bGUgdXBkYXRlIHN0cmF0ZWd5IG5vdCBzdXBwb3J0ZWQgZm9yIHN1Ym1vZHVsZSAnJXMnIgorI34gbXNnc3RyICIiCisjfiAidXBwZGF0ZXJpbmdzc3RyYXRlZ2kgZsO2ciB1bmRlcm1vZHVsIHN0w7ZkcyBpbnRlIGbDtnIgdW5kZXJtb2R1bGVuIFwiJXNcIiIKKworI34gbXNnaWQgImNoYW5nZSB1cHN0cmVhbSBpbmZvIgorI34gbXNnc3RyICLDpG5kcmEgdXBwc3Ryw7Ztc2luZm9ybWF0aW9uIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIklmIHlvdSB3YW50ZWQgdG8gbWFrZSAnJXMnIHRyYWNrICclcycsIGRvIHRoaXM6XG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJPbSBkdSB2aWxsIGfDtnJhIHPDpSBhdHQgXCIlc1wiIHNww6VyYXIgXCIlc1wiIGfDtnIgZHUgc8OlIGjDpHI6XG4iCisjfiAiXG4iCisKKyN+IG1zZ2lkICJiYXNlbmFtZSIKKyN+IG1zZ3N0ciAiYmFzbmFtbiIKKworI34gbXNnaWQgIiIKKyN+ICJXYXJuaW5nOiB0aGUgU0hBLTEgaXMgbWlzc2luZyBvciBpc24ndCBhIGNvbW1pdCBpbiB0aGUgZm9sbG93aW5nIGxpbmU6XG4iCisjfiAiIC0gJGxpbmUiCisjfiBtc2dzdHIgIiIKKyN+ICJWYXJuaW5nOiBTSEEtMSBzYWtuYXMgZWxsZXIgaW50ZSBlbiBpbmNoZWNrbmluZyBww6UgZsO2bGphbmRlIHJhZDpcbiIKKyN+ICIgLSAkbGluZSIKKworI34gbXNnaWQgIiIKKyN+ICJXYXJuaW5nOiB0aGUgY29tbWFuZCBpc24ndCByZWNvZ25pemVkIGluIHRoZSBmb2xsb3dpbmcgbGluZTpcbiIKKyN+ICIgLSAkbGluZSIKKyN+IG1zZ3N0ciAiIgorI34gIlZhcm5pbmc6IGtvbW1hbmRvdCBrw6RuZGVzIGludGUgaWdlbiBww6UgZsO2bGphbmRlIHJhZDpcbiIKKyN+ICIgLSAkbGluZSIKKworI34gbXNnaWQgIk9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLiIKKyN+IG1zZ3N0ciAiRWxsZXIgc8OlIGthbiBkdSBhdmJyeXRhIG9tYmFzZXJpbmdlbiBtZWQgXCJnaXQgcmViYXNlIC0tYWJvcnRcIi4iCisKKyN+IG1zZ2lkICJpbiAlMC4xZiBzZWNvbmRzIGF1dG9tYXRpY2FsbHkuLi4iCisjfiBtc2dzdHIgImF1dG9tYXRpc2t0IG9tICUwLjFmIHNla3VuZGVyLi4uIgorCisjfiBtc2dpZCAiZHVwMiglZCwlZCkgZmFpbGVkIgorI34gbXNnc3RyICJkdXAyKCVkLCVkKSBtaXNzbHlja2FkZXMiCisKKyN+IG1zZ2lkICJJbml0aWFsIGNvbW1pdCBvbiAiCisjfiBtc2dzdHIgIkbDtnJzdGEgaW5jaGVja25pbmcgcMOlICIKKworI34gbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiBXYXMgaXQgc3BsaXQgd3Jvbmc/IgorI34gbXNnc3RyICJQYXRjaGVuIMOkciB0b20uIERlbGFkZXMgZGVuIHVwcCBmZWxha3RpZ3Q/IgorCisjfiBtc2dpZCAiIgorI34gIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisjfiAiRGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz8iCisjfiBtc2dzdHIgIiIKKyN+ICJEdSBoYXIgZm9ydGZhcmFuZGUgc8O2a3bDpGdhciBzb20gaW50ZSBzbGFnaXRzIHNhbW1hbiBpIGRpdHQgaW5kZXguXG4iCisjfiAiR2zDtm1kZSBkdSBhdHQgYW52w6RuZGEgXCJnaXQgYWRkXCI/IgorCisjfiBtc2dpZCAiIgorI34gIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLlxuIgorI34gIkRpZCB5b3UgaW50ZW5kIHRvIGNoZWNrb3V0ICclcycgd2hpY2ggY2FuIG5vdCBiZSByZXNvbHZlZCBhcyBjb21taXQ/IgorI34gbXNnc3RyICIiCisjfiAiS2FuIGludGUgdXBwZGF0ZXJhIHPDtmt2w6RnYXIgb2NoIHbDpHhsYSB0aWxsIGdyZW5lbiBcIiVzXCIgc2FtdGlkaWd0LlxuIgorI34gIlZpbGxlIGR1IGNoZWNrYSB1dCBcIiVzXCIgc29tIGludGUga2FuIGzDtnNhcyBzb20gZW4gdXRjaGVja25pbmc/IgorCisjfiBtc2dpZCAiRXhwbGljaXQgcGF0aHMgc3BlY2lmaWVkIHdpdGhvdXQgLWkgb3IgLW87IGFzc3VtaW5nIC0tb25seSBwYXRocy4uLiIKKyN+IG1zZ3N0ciAiIgorI34gIkV4cGxpY2l0YSBzw7ZrdsOkZ2FyIGFuZ2F2cyB1dGFuIC1pIGVsbGVyIC1vOyBhbnRhciAtLW9ubHkgc8O2a3bDpGdhci4uLiIKKworI34gbXNnaWQgImRlZmF1bHQgbW9kZSBmb3IgcmVjdXJzaW9uIgorI34gbXNnc3RyICJzdGFuZGFyZGzDpGdlIGbDtnIgcmVrdXJzaW9uIgorCisjfiBtc2dpZCAic3VibW9kdWxlLS1oZWxwZXIgc3ViY29tbWFuZCBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgc3ViY29tbWFuZCIKKyN+IG1zZ3N0ciAiIgorI34gInVuZGVya29tbWFuZG90IHN1Ym1vZHVsZS0taGVscGVyIG3DpXN0ZSBhbnJvcGFzIG1lZCBldHQgdW5kZXJrb21tYW5kbyIKKworI34gbXNnaWQgImNvdWxkIG5vdCBzdGF0ICclcyIKKyN+IG1zZ3N0ciAia3VuZGUgaW50ZSB0YSBzdGF0dXMgcMOlIFwiJXNcIiIKKworI34gbXNnaWQgInRhZzogdGFnZ2luZyAiCisjfiBtc2dzdHIgInRhZzogdGFnZ2FyIgorCisjfiBtc2dpZCAiY29tbWl0IG9iamVjdCIKKyN+IG1zZ3N0ciAiaW5jaGVja25pbmdzb2JqZWt0IgorCisjfiBtc2dpZCAidHJlZSBvYmplY3QiCisjfiBtc2dzdHIgInRyw6Rkb2JqZWt0IgorCisjfiBtc2dpZCAiYmxvYiBvYmplY3QiCisjfiBtc2dzdHIgImJsb2Itb2JqZWt0IgorCisjfiBtc2dpZCAiIgorI34gIlRoZXJlIGlzIG5vdGhpbmcgdG8gZXhjbHVkZSBmcm9tIGJ5IDooZXhjbHVkZSkgcGF0dGVybnMuXG4iCisjfiAiUGVyaGFwcyB5b3UgZm9yZ290IHRvIGFkZCBlaXRoZXIgJzovJyBvciAnLicgPyIKKyN+IG1zZ3N0ciAiIgorI34gIkluZ2VudGluZyBhdHQgZXhrbHVkZXJhIGZyw6VuIG1lZCA6KGV4a2x1ZGVyYSktbcO2bnN0ZXIuXG4iCisjfiAiR2zDtm1kZSBkdSBrYW5za2UgYXR0IGFudGluZ2VuIGzDpGdnYSB0aWxsIFwiOi9cIiBlbGxlciBcIi5cIj8iCisKKyN+IG1zZ2lkICJ1bnJlY29nbml6ZWQgZm9ybWF0OiAlJSglcykiCisjfiBtc2dzdHIgIm9rw6RudCBmb3JtYXQ6ICUlKCVzKSIKKworI34gbXNnaWQgIjpzdHJpcD0gcmVxdWlyZXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGFyZ3VtZW50IgorI34gbXNnc3RyICI6c3RyaXA9IGtyw6R2ZXIgZXR0IHBvc2l0aXZ0IGhlbHRhbHNhcmd1bWVudCIKKworI34gbXNnaWQgInJlZiAnJXMnIGRvZXMgbm90IGhhdmUgJWxkIGNvbXBvbmVudHMgdG8gOnN0cmlwIgorI34gbXNnc3RyICJyZWZlcmVuc2VuIFwiJXNcIiBoYXIgaW50ZSAlbGQga29tcG9uZW50ZXIgZsO2ciA6c3RyaXAiCisKKyN+IG1zZ2lkICJbJXM6IGdvbmVdIgorI34gbXNnc3RyICJbJXM6IGbDtnJzdnVubmVuXSIKKworI34gbXNnaWQgIlslc10iCisjfiBtc2dzdHIgIlslc10iCisKKyN+IG1zZ2lkICJbJXM6IGJlaGluZCAlZF0iCisjfiBtc2dzdHIgIlslczogYmFrb20gJWRdICIKKworI34gbXNnaWQgIlslczogYWhlYWQgJWRdIgorI34gbXNnc3RyICJbJXM6IGbDtnJlICVkXSAiCisKKyN+IG1zZ2lkICJbJXM6IGFoZWFkICVkLCBiZWhpbmQgJWRdIgorI34gbXNnc3RyICJbJXM6IGbDtnJlICVkLCBiYWtvbSAlZF0gIgorCisjfiBtc2dpZCAiICoqKiogaW52YWxpZCByZWYgKioqKiIKKyN+IG1zZ3N0ciAiICoqKiogb2dpbHRpZyByZWYgKioqKiIKKworI34gbXNnaWQgImluc2FuZWx5IGxvbmcgb2JqZWN0IGRpcmVjdG9yeSAlLipzIgorI34gbXNnc3RyICJ0b2tpZ3QgbMOlbmcgb2JqZWt0a2F0YWxvZyAlLipzIgorCisjfiBtc2dpZCAiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIDxtc2c+IEhFQUQgPGNvbW1pdD4iCisjfiBtc2dzdHIgImdpdCBtZXJnZSBbPGZsYWdnb3I+XSA8bWVkZGVsYW5kZT4gSEVBRCA8aW5jaGVja25pbmc+IgorCisjfiBtc2dpZCAidGFnIG5hbWUgdG9vIGxvbmc6ICUuKnMuLi4iCisjfiBtc2dzdHIgInRhZ2duYW1uZXQgZsO2ciBsw6VuZ3Q6ICUuKnMuLi4iCisKKyN+IG1zZ2lkICJ0YWcgaGVhZGVyIHRvbyBiaWcuIgorI34gbXNnc3RyICJ0YWdnaHV2dWQgZsO2ciBzdG9ydC4iCisKKyN+IG1zZ2lkICIiCisjfiAiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyN+ICJtYXJrZWQgZm9yIGRpc2NhcmRpbmciCisjfiBtc2dzdHIgIiIKKyN+ICJPbSBwYXRjaGVuIGthbiBhcHBsaWNlcmFzIHJlbnQga29tbWVyIGRldCByZWRpZ2VyYWRlIHN0eWNrZXQgYXR0XG4iCisjfiAibWFya2VyYXMgZsO2ciBrYXN0YSBvbWVkZWxiYXJ0IgorCisjfiBtc2dpZCAiVXNlIGFuIGV4cGVyaW1lbnRhbCBibGFuay1saW5lLWJhc2VkIGhldXJpc3RpYyB0byBpbXByb3ZlIGRpZmZzIgorI34gbXNnc3RyICIiCisjfiAiQW52w6RuZCBlbiBleHBlcmltZW50ZWxsIGFsZ29yaXRtIGJhc2VyYWQgcMOlIHRvbW1hIHJhZGVyIGbDtnIgYXR0IGbDtnJiw6R0dHJhICIKKyN+ICJkaWZmYXIiCisKKyN+IG1zZ2lkICJDbGV2ZXIuLi4gYW1lbmRpbmcgdGhlIGxhc3Qgb25lIHdpdGggZGlydHkgaW5kZXguIgorI34gbXNnc3RyICJTbWFydC4uLiB1dMO2a2EgZGVuIHNlbmFzdGUgbWVkIHNtdXRzaWd0IGluZGV4LiIKKworI34gbXNnaWQgIiIKKyN+ICJ0aGUgZm9sbG93aW5nIHN1Ym1vZHVsZSAob3Igb25lIG9mIGl0cyBuZXN0ZWQgc3VibW9kdWxlcylcbiIKKyN+ICJ1c2VzIGEgLmdpdCBkaXJlY3Rvcnk6IgorI34gbXNnaWRfcGx1cmFsICIiCisjfiAidGhlIGZvbGxvd2luZyBzdWJtb2R1bGVzIChvciBvbmUgb2YgdGhlaXIgbmVzdGVkIHN1Ym1vZHVsZXMpXG4iCisjfiAidXNlIGEgLmdpdCBkaXJlY3Rvcnk6IgorI34gbXNnc3RyWzBdICIiCisjfiAiZsO2bGphbmRlIHVuZGVybW9kdWwgKGVsbGVyIGVuIGF2IGRlc3MgbsOkc3RsYWRlIHVuZGVybW9kdWxlcilcbiIKKyN+ICJhbnbDpG5kZXIgZW4gLmdpdC1rYXRhbG9nOiIKKyN+IG1zZ3N0clsxXSAiIgorI34gImbDtmxqYW5kZSB1bmRlcm1vZHVsZXIgKGVsbGVyIGVuIGF2IGRlcmFzIG7DpHN0bGFkZSB1bmRlcm1vZHVsZXIpXG4iCisjfiAiYW52w6RuZGVyIGVuIC5naXQta2F0YWxvZzoiCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiKHVzZSAncm0gLXJmJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzICIKKyN+ICJoaXN0b3J5KSIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIihhbnbDpG5kIFwicm0gLXJmXCIgb20gZHUgdmVya2xpZ2VuIHZpbGwgdGEgYm9ydCBkZW4gb2NoIGFsbCBkZXNzIGhpc3RvcmlrKSIKKworI34gbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzLiIKKyN+IG1zZ3N0ciAiRmVsIHZpZCBvbWJyeXRuaW5nIGF2ICVzLiIKKworI34gbXNnaWQgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVycnktcGljay4iCisjfiBtc2dzdHIgIkRpbmEgbG9rYWxhIMOkbmRyaW5nYXIgc2t1bGxlIHNrcml2YXMgw7Z2ZXIgYXYgXCJjaGVycnktcGlja1wiLiIKKworI34gbXNnaWQgIkNhbm5vdCByZXZlcnQgZHVyaW5nIGFub3RoZXIgcmV2ZXJ0LiIKKyN+IG1zZ3N0ciAiS2FuIGludGUgdXRmw7ZyYSBcInJldmVydFwiIHVuZGVyIGVuIGFubmFuIFwicmV2ZXJ0XCIuIgorCisjfiBtc2dpZCAiQ2Fubm90IGNoZXJyeS1waWNrIGR1cmluZyBhbm90aGVyIGNoZXJyeS1waWNrLiIKKyN+IG1zZ3N0ciAiS2FuIGludGUgdXRmw7ZyYSBcImNoZXJyeS1waWNrXCIgdW5kZXIgZW4gYW5uYW4gXCJjaGVycnktcGlja1wiLiIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuICVzIgorI34gbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSAlcyIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBmb3JtYXQgJXMuIgorI34gbXNnc3RyICJLdW5kZSBpbnRlIGZvcm1hdGVyYSAlcy4iCisKKyN+IG1zZ2lkICIlczogJXMiCisjfiBtc2dzdHIgIiVzOiAlcyIKKworI34gbXNnaWQgIllvdSBuZWVkIHRvIHNldCB5b3VyIGNvbW1pdHRlciBpbmZvIGZpcnN0IgorI34gbXNnc3RyICJEdSBtw6VzdGUgc3TDpGxsYSBpbiBkaW4gaW5jaGVja2FyaW5mb3JtYXRpb24gZsO2cnN0IgorCisjfiBtc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6IGludmFsaWQgdW5pdCIKKyN+IG1zZ3N0ciAiIgorI34gImZlbGFrdGlndCBudW1lcmlza3Qga29uZmlndXJhdGlvbnN2w6RyZGUgXCIlc1wiIGbDtnIgXCIlc1wiOiBvZ2lsdGlnIGVuaGV0IgorCisjfiBtc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gYmxvYiAlczogaW52YWxpZCB1bml0IgorI34gbXNnc3RyICIiCisjfiAiZmVsYWt0aWd0IG51bWVyaXNrdCBrb25maWd1cmF0aW9uc3bDpHJkZSBcIiVzXCIgZsO2ciBcIiVzXCIgaSBibG9iOmVuICVzOiAiCisjfiAib2dpbHRpZyBlbmhldCIKKworI34gbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6IGludmFsaWQgdW5pdCIKKyN+IG1zZ3N0ciAiIgorI34gImZlbGFrdGlndCBudW1lcmlza3Qga29uZmlndXJhdGlvbnN2w6RyZGUgXCIlc1wiIGbDtnIgXCIlc1wiIGkgZmlsZW4gJXM6ICIKKyN+ICJvZ2lsdGlnIGVuaGV0IgorCisjfiBtc2dpZCAiIgorI34gImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN0YW5kYXJkIGlucHV0OiBpbnZhbGlkIHVuaXQiCisjfiBtc2dzdHIgIiIKKyN+ICJmZWxha3RpZ3QgbnVtZXJpc2t0IGtvbmZpZ3VyYXRpb25zdsOkcmRlIFwiJXNcIiBmw7ZyIFwiJXNcIiBpIHN0YW5kYXJkIGluOiAiCisjfiAib2dpbHRpZyBlbmhldCIKKworI34gbXNnaWQgIiIKKyN+ICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdWJtb2R1bGUtYmxvYiAlczogaW52YWxpZCB1bml0IgorI34gbXNnc3RyICIiCisjfiAiZmVsYWt0aWd0IG51bWVyaXNrdCBrb25maWd1cmF0aW9uc3bDpHJkZSBcIiVzXCIgZsO2ciBcIiVzXCIgaSB1bmRlcm1vZHVsLSIKKyN+ICJibG9iOmVuICVzOiBvZ2lsdGlnIGVuaGV0IgorCisjfiBtc2dpZCAiIgorI34gImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogaW52YWxpZCB1bml0IgorI34gbXNnc3RyICIiCisjfiAiZmVsYWt0aWd0IG51bWVyaXNrdCBrb25maWd1cmF0aW9uc3bDpHJkZSBcIiVzXCIgZsO2ciBcIiVzXCIgaSBrb21tYW5kb3JhZGVuICIKKyN+ICIlczogb2dpbHRpZyBlbmhldCIKKworI34gbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiBpbnZhbGlkIHVuaXQiCisjfiBtc2dzdHIgIiIKKyN+ICJmZWxha3RpZ3QgbnVtZXJpc2t0IGtvbmZpZ3VyYXRpb25zdsOkcmRlIFwiJXNcIiBmw7ZyIFwiJXNcIiBpICVzOiBvZ2lsdGlnICIKKyN+ICJlbmhldCIKKworI34gbXNnaWQgIlRoaXMgaXMgdGhlIDJuZCBjb21taXQgbWVzc2FnZToiCisjfiBtc2dzdHIgIkRldCBow6RyIMOkciAyOmEgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgM3JkIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRGV0IGjDpHIgw6RyIDM6ZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSA0dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJEZXQgaMOkciDDpHIgNDplIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0OiIKKworI34gbXNnaWQgIlRoaXMgaXMgdGhlIDV0aCBjb21taXQgbWVzc2FnZToiCisjfiBtc2dzdHIgIkRldCBow6RyIMOkciA1OmUgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgNnRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRGV0IGjDpHIgw6RyIDY6ZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSA3dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJEZXQgaMOkciDDpHIgNzplIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0OiIKKworI34gbXNnaWQgIlRoaXMgaXMgdGhlIDh0aCBjb21taXQgbWVzc2FnZToiCisjfiBtc2dzdHIgIkRldCBow6RyIMOkciA4OmUgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgOXRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRGV0IGjDpHIgw6RyIDk6ZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAxMHRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRGV0IGjDpHIgw6RyIDEwOmUgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgJHtufXRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRGV0IGjDpHIgw6RyICR7bn06ZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAke259c3QgY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJEZXQgaMOkciDDpHIgJHtufTphIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0OiIKKworI34gbXNnaWQgIlRoaXMgaXMgdGhlICR7bn1uZCBjb21taXQgbWVzc2FnZToiCisjfiBtc2dzdHIgIkRldCBow6RyIMOkciAke259OmEgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgJHtufXJkIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRGV0IGjDpHIgw6RyICR7bn06ZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldDoiCisKKyN+IG1zZ2lkICJUaGUgMXN0IGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIjE6YSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCBrb21tZXIgaG9wcGFzIMO2dmVyOiIKKworI34gbXNnaWQgIlRoZSAybmQgY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiMjphIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IGtvbW1lciBob3BwYXMgw7Z2ZXI6IgorCisjfiBtc2dpZCAiVGhlIDNyZCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICIzOmUgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQga29tbWVyIGhvcHBhcyDDtnZlcjoiCisKKyN+IG1zZ2lkICJUaGUgNHRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIjQ6ZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCBrb21tZXIgaG9wcGFzIMO2dmVyOiIKKworI34gbXNnaWQgIlRoZSA1dGggY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiNTplIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IGtvbW1lciBob3BwYXMgw7Z2ZXI6IgorCisjfiBtc2dpZCAiVGhlIDZ0aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICI2OmUgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQga29tbWVyIGhvcHBhcyDDtnZlcjoiCisKKyN+IG1zZ2lkICJUaGUgN3RoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIjc6ZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCBrb21tZXIgaG9wcGFzIMO2dmVyOiIKKworI34gbXNnaWQgIlRoZSA4dGggY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiODplIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IGtvbW1lciBob3BwYXMgw7Z2ZXI6IgorCisjfiBtc2dpZCAiVGhlIDl0aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICI5OmUgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQga29tbWVyIGhvcHBhcyDDtnZlcjoiCisKKyN+IG1zZ2lkICJUaGUgMTB0aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICIxMDplIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IGtvbW1lciBob3BwYXMgw7Z2ZXI6IgorCisjfiBtc2dpZCAiVGhlICR7bn10aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICIke259OmUgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQga29tbWVyIGhvcHBhcyDDtnZlcjoiCisKKyN+IG1zZ2lkICJUaGUgJHtufXN0IGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIiR7bn06YSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCBrb21tZXIgaG9wcGFzIMO2dmVyOiIKKworI34gbXNnaWQgIlRoZSAke259bmQgY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiJHtufTphIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IGtvbW1lciBob3BwYXMgw7Z2ZXI6IgorCisjfiBtc2dpZCAiVGhlICR7bn1yZCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICIke259OmUgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQga29tbWVyIGhvcHBhcyDDtnZlcjoiCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgcnVuIGdwZy4iCisjfiBtc2dzdHIgImt1bmRlIGludGUga8O2cmEgZ3BnLiIKKworI34gbXNnaWQgImdwZyBkaWQgbm90IGFjY2VwdCB0aGUgZGF0YSIKKyN+IG1zZ3N0ciAiZ3BnIGdvZHRvZyBpbnRlIGRhdGEiCisKKyN+IG1zZ2lkICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSBpbiB0aGUgdHJlZSIKKyN+IG1zZ3N0ciAib2JqZWt0dHlwIHNvbSBlaiBzdMO2ZHMgdXBwdMOkY2t0ZXMgaSB0csOkZGV0IgorCisjfiBtc2dpZCAiRmF0YWwgbWVyZ2UgZmFpbHVyZSwgc2hvdWxkbid0IGhhcHBlbi4iCisjfiBtc2dzdHIgIsOWZGVzZGlnZXJ0IHNhbW1hbnNsYWduaW5nc2ZlbCwgYm9yZGUgaW50ZSBpbnRyw6RmZmEuIgorCisjfiBtc2dpZCAiVW5wcm9jZXNzZWQgcGF0aD8/PyAlcyIKKyN+IG1zZ3N0ciAiT2JlaGFuZGxhZCBzw7ZrdsOkZz8/PyAlcyIKKworI34gbXNnaWQgIkNhbm5vdCAlcyBkdXJpbmcgYSAlcyIKKyN+IG1zZ3N0ciAia2FuIGludGUgJXMgdW5kZXIgZW4gJXMiCisKKyN+IG1zZ2lkICJDYW4ndCBjaGVycnktcGljayBpbnRvIGVtcHR5IGhlYWQiCisjfiBtc2dzdHIgIkthbiBpbnRlIGfDtnJhIFwiY2hlcnJ5LXBpY2tcIiBpIGV0dCB0b210IGh1dnVkIgorCisjfiBtc2dpZCAiY291bGQgbm90IG9wZW4gJXMgZm9yIHdyaXRpbmciCisjfiBtc2dzdHIgImt1bmRlIGludGUgw7ZwcG5hICVzIGbDtnIgc2tyaXZuaW5nIgorCisjfiBtc2dpZCAiYnVnOiB1bmhhbmRsZWQgdW5tZXJnZWQgc3RhdHVzICV4IgorI34gbXNnc3RyICJwcm9ncmFtZmVsOiBlaiBoYW50ZXJhZCBcInVubWVyZ2VkXCItc3RhdHVzICV4IgorCisjfiBtc2dpZCAiYnVnOiB1bmhhbmRsZWQgZGlmZiBzdGF0dXMgJWMiCisjfiBtc2dzdHIgInByb2dyYW1mZWw6IGRpZmYtc3RhdHVzICVjIGVqIGhhbnRlcmFkIgorCisjfiBtc2dpZCAiY291bGQgbm90IHdyaXRlIGJyYW5jaCBkZXNjcmlwdGlvbiB0ZW1wbGF0ZSIKKyN+IG1zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgZ3JlbmJlc2tyaXZuaW5nc21hbGwiCisKKyN+IG1zZ2lkICJjb3JydXB0IGluZGV4IGZpbGUiCisjfiBtc2dzdHIgImluZGV4ZmlsZW4gw6RyIHRyYXNpZyIKKworI34gbXNnaWQgImRldGFjaCB0aGUgSEVBRCBhdCBuYW1lZCBjb21taXQiCisjfiBtc2dzdHIgImtvcHBsYSBmcsOlbiBIRUFEIHZpZCBuYW1uZ2l2ZW4gaW5jaGVja25pbmciCisKKyMgVmFndWUgb3JpZ2luYWwsIG5vdCBuZXR3b3JraW5nLXJlbGF0ZWQsIGJ1dCByYXRoZXIgcmVsYXRlZCB0byB0aGUgYWN0dWFsCisjIG9iamVjdHMgZG93bmxvYWRlZC4KKyN+IG1zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkuLi4gIgorI34gbXNnc3RyICJLb250cm9sbGVyYXIgb20gdmkgZmljayBhbGxhIG9iamVrdC4uLiIKKworI34gbXNnaWQgIiAgKHVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmKSIKKyN+IG1zZ3N0ciAiICAoa3VuZGUgaW50ZSB1cHBkYXRlcmEgbG9rYWwgcmVmKSIKKworI34gbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciCisjfiBtc2dzdHIgIk9taW5pdGllcmFkZSBiZWZpbnRsaWd0IgorCisjfiBtc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkiCisjfiBtc2dzdHIgIkluaXRpZXJhZGUgdG9tdCIKKworI34gbXNnaWQgIiBzaGFyZWQiCisjfiBtc2dzdHIgIiBkZWxhdCIKKworI34gbXNnaWQgIlZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKKyN+IG1zZ3N0ciAiQmVrcsOkZnRhIGF0dCBkZW4gbmFtbmdpdm5hIGluY2hlY2tuaW5nZW4gaGFyIGVuIGdpbHRpZyBHUEctc2lnbmF0dXIiCisKKyN+IG1zZ2lkICJXcml0aW5nIFNRVUFTSF9NU0ciCisjfiBtc2dzdHIgIlNrcml2ZXIgU1FVQVNIX01TRyIKKworI34gbXNnaWQgIkZpbmlzaGluZyBTUVVBU0hfTVNHIgorI34gbXNnc3RyICJBdnNsdXRhciBTUVVBU0hfTVNHIgorCisjfiBtc2dpZCAiICAgYW5kIHdpdGggcmVtb3RlIgorI34gbXNnc3RyICIgICBvY2ggbWVkIGZqw6RycmVuIgorCisjfiBtc2dpZCAicmVtb3ZpbmcgJyVzJyBmYWlsZWQiCisjfiBtc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBib3J0IFwiJXNcIiIKKworI34gbXNnaWQgIlBsZWFzZSBjYWxsICdiaXNlY3Rfc3RhdGUnIHdpdGggYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIKKyN+IG1zZ3N0ciAiQW5yb3BhIFwiYmlzZWN0X3N0YXRlXCIgbWVkIG1pbnN0IGV0dCBhcmd1bWVudC4iCisKKyN+IG1zZ2lkICIiCisjfiAiSWYgeW91IHdhbnQgdG8gcmV1c2UgdGhpcyBsb2NhbCBnaXQgZGlyZWN0b3J5IGluc3RlYWQgb2YgY2xvbmluZyBhZ2FpbiAiCisjfiAiZnJvbSIKKyN+IG1zZ3N0ciAiIgorI34gIkbDtnIgYXR0IMOldGVyYW52w6RuZGEgZGVuIGxva2FsYSBnaXQta2F0YWxvZ2VuIGlzdMOkbGxldCBmw7ZyIGF0dCBww6Ugbnl0dCAiCisjfiAia2xvbmEgZnLDpW4iCisKKyN+IG1zZ2lkICIiCisjfiAidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgIgorI34gInJlcG8iCisjfiBtc2dzdHIgIiIKKyN+ICJhbnbDpG5kIGZsYWdnYW4gXCItLWZvcmNlXCIuIE9tIGRlbiBsb2thbGEgZ2l0LWthdGFsb2dlbiBpbnRlIMOkciByaWt0aWd0ICIKKyN+ICJhcmtpdiIKKworI34gbXNnaWQgIiIKKyN+ICJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyAiCisjfiAib3B0aW9uLiIKKyN+IG1zZ3N0ciAiIgorI34gImVsbGVyIG9tIGR1IMOkciBvc8Oka2VyIHDDpSB2YWQgZGV0IGlubmViw6RyLCB2w6RsaiBueXR0IG5hbW4gbWVkIGZsYWdnYW4gXCItLSIKKyN+ICJuYW1lXCIuIgorCisjfiBtc2dpZCAiU3VibW9kdWxlIHdvcmsgdHJlZSAnJGRpc3BsYXlwYXRoJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5IgorI34gbXNnc3RyICIiCisjfiAiVW5kZXJtb2R1bGVucyBhcmJldHNrYXRhbG9nIFwiJGRpc3BsYXlwYXRoXCIgaW5uZWjDpWxsZXIga2F0YWxvZ2VuIFwiLmdpdFwiIgorCisjfiBtc2dpZCAiIgorI34gIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyAiCisjfiAiaGlzdG9yeSkiCisjfiBtc2dzdHIgIiIKKyN+ICIoYW52w6RuZCBcInJtIC1yZlwiIG9tIGR1IHZlcmtsaWdlbiB2aWxsIHRhIGJvcnQgZGVuIG9jaCBhbGwgZGVzcyBoaXN0b3JpaykiCisKKyN+IG1zZ2lkICInJXMnOiAlcyIKKyN+IG1zZ3N0ciAiXCIlc1wiOiAlcyIKKworI34gbXNnaWQgIiAgICBnaXQgYnJhbmNoIC1kICVzXG4iCisjfiBtc2dzdHIgIiAgICBnaXQgYnJhbmNoIC1kICVzXG4iCisKKyN+IG1zZ2lkICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgorI34gbXNnc3RyICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgorCisjfiBtc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzXG4iCisjfiBtc2dzdHIgImthbiBpbnRlIMO2cHBuYSAlczogJXNcbiIKKworI34gbXNnaWQgIlBsZWFzZSwgc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKKyN+IG1zZ3N0ciAiIgorI34gIkvDtmEgZGluYSDDpG5kcmluZ2FyIGkgLmdpdG1vZHVsZXMgZWxsZXIgYW52w6RuZCBcInN0YXNoXCIgZsO2ciBhdHQgZm9ydHPDpHR0YSIKKworI34gbXNnaWQgImZhaWxlZCB0byByZW1vdmU6ICVzIgorI34gbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgYm9ydDogJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcgbm90IGluaXRpYWxpemVkXG4iCisjfiAiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCisjfiBtc2dzdHIgIiIKKyN+ICJVbmRlcm1vZHVsZW4gXCIkZGlzcGxheXBhdGhcIiBoYXIgaW50ZSBpbml0aWVyYXRzXG4iCisjfiAiS2Fuc2tlIGR1IHZpbGwga8O2cmEgXCJ1cGRhdGUgLS1pbml0XCI/IgorCisjfiBtc2dpZCAiRm9yd2FyZC1wb3J0IGxvY2FsIGNvbW1pdHMgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0gaGVhZCIKKyN+IG1zZ3N0ciAiRnJhbcOldGFucGFzc2EgbG9rYWxhIGtvbW1hbmRvbiBww6UgdXBwZGF0ZXJhdCB1cHBzdHLDtm1zaHV2dWQiCisKKyN+IG1zZ2lkICJpbXByb3BlciBmb3JtYXQgZW50ZXJlZCBhbGlnbjolcyIKKyN+IG1zZ3N0ciAiZmVsYWt0aWd0IGZvcm1hdCBhbmdpdmV0IGFsaWduOiVzIgorCisjfiBtc2dpZCAiIgorI34gInB1c2guZGVmYXVsdCBpcyB1bnNldDsgaXRzIGltcGxpY2l0IHZhbHVlIGhhcyBjaGFuZ2VkIGluXG4iCisjfiAiR2l0IDIuMCBmcm9tICdtYXRjaGluZycgdG8gJ3NpbXBsZScuIFRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlXG4iCisjfiAiYW5kIG1haW50YWluIHRoZSB0cmFkaXRpb25hbCBiZWhhdmlvciwgdXNlOlxuIgorI34gIlxuIgorI34gIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgbWF0Y2hpbmdcbiIKKyN+ICJcbiIKKyN+ICJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgYWRvcHQgdGhlIG5ldyBiZWhhdmlvciBub3csIHVzZTpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IHNpbXBsZVxuIgorI34gIlxuIgorI34gIldoZW4gcHVzaC5kZWZhdWx0IGlzIHNldCB0byAnbWF0Y2hpbmcnLCBnaXQgd2lsbCBwdXNoIGxvY2FsIGJyYW5jaGVzXG4iCisjfiAidG8gdGhlIHJlbW90ZSBicmFuY2hlcyB0aGF0IGFscmVhZHkgZXhpc3Qgd2l0aCB0aGUgc2FtZSBuYW1lLlxuIgorI34gIlxuIgorI34gIlNpbmNlIEdpdCAyLjAsIEdpdCBkZWZhdWx0cyB0byB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgJ3NpbXBsZSdcbiIKKyN+ICJiZWhhdmlvciwgd2hpY2ggb25seSBwdXNoZXMgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBjb3JyZXNwb25kaW5nXG4iCisjfiAicmVtb3RlIGJyYW5jaCB0aGF0ICdnaXQgcHVsbCcgdXNlcyB0byB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLlxuIgorI34gIlxuIgorI34gIlNlZSAnZ2l0IGhlbHAgY29uZmlnJyBhbmQgc2VhcmNoIGZvciAncHVzaC5kZWZhdWx0JyBmb3IgZnVydGhlciAiCisjfiAiaW5mb3JtYXRpb24uXG4iCisjfiAiKHRoZSAnc2ltcGxlJyBtb2RlIHdhcyBpbnRyb2R1Y2VkIGluIEdpdCAxLjcuMTEuIFVzZSB0aGUgc2ltaWxhciBtb2RlXG4iCisjfiAiJ2N1cnJlbnQnIGluc3RlYWQgb2YgJ3NpbXBsZScgaWYgeW91IHNvbWV0aW1lcyB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0KSIKKyN+IG1zZ3N0ciAiIgorI34gInB1c2guZGVmYXVsdCBoYXIgaW50ZSBzdMOkbGx0cyBpbjsgZGVzcyB1bmRlcmbDtnJzdMOlZGRhIHbDpHJkZVxuIgorI34gIsOkbmRyYXMgaSBHaXQgMi4wIGZyw6VuIFwibWF0Y2hpbmdcIiB0aWxsIFwic2ltcGxlXCIuIEbDtnIgYXR0XG4iCisjfiAidW5kZXJ0cnlja2EgZGV0IGjDpHIgbWVkZGVsYW5kZXQgb2NoIGJlaMOlbGxhIHRyYWRpdGlvbmVsbHQgYmV0ZWVuZGVcbiIKKyN+ICJza3JpdmVyIGR1OlxuIgorI34gIlxuIgorI34gIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgbWF0Y2hpbmdcbiIKKyN+ICJcbiIKKyN+ICJGw7ZyIGF0dCB1bmRlcnRyeWNrYSBtZWRkZWxhbmRldCBvY2ggdsOkbGphIGRldCBueWEgYmV0ZWVuZGV0IG51IHNrcml2ZXIgIgorI34gImR1OlxuIgorI34gIlxuIgorI34gIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgc2ltcGxlXG4iCisjfiAiXG4iCisjfiAiTsOkciBwdXNoLmRlZmF1bHQgw6RyIHNhdHQgdGlsbCBcIm1hdGNoaW5nXCIga29tbWVyIGdpdCBhdHQgc8OkbmRhIGxva2FsYSAiCisjfiAiZ3JlbmFyXG4iCisjfiAidGlsbCBmasOkcnJncmVuYXIgc29tIHJlZGFuIGZpbm5zIG9jaCBzb20gaGFyIHNhbW1hIG5hbW4uXG4iCisjfiAiXG4iCisjfiAiR2l0IDIuMCBrb21tZXIgc29tIHN0YW5kYXJkIHbDpGxqYSBkZW4gbWVyIGtvbnNlcnZhdGl2YSBpbnN0w6RsbG5pbmdlblxuIgorI34gIlwic2ltcGxlXCIsIHZpbGtldCBiYXJhIHPDpG5kZXIgaW4gZGVuIGFrdHVlbGxhIGdyZW5lbiB0aWxsIGRlbiAiCisjfiAibW90c3ZhcmFuZGVcbiIKKyN+ICJmasOkcnJncmVuIFwiZ2l0IHB1bGxcIiBhbnbDpG5kZXIgZsO2ciBhdHQgdXBwZGF0ZXJhIGRlbiBha3R1ZWxsYSBncmVuZW4uXG4iCisjfiAiXG4iCisjfiAiU2UgXCJnaXQgaGVscCBjb25maWdcIiBvY2ggc8O2ayBlZnRlciBcInB1c2guZGVmYXVsdFwiIGbDtnIgeXR0ZXJsaWdhcmUgXG4iCisjfiAiaW5mb3JtYXRpb24uIChMw6RnZXQgXCJzaW1wbGVcIiBpbnRyb2R1Y2VyYWRlcyBpIEdpdCAxLjcuMTEuIEFudsOkbmQgZGV0XG4iCisjfiAibGlrbmFuZGUgbMOkZ2V0IFwiY3VycmVudFwiIGlzdMOkbGxldCBmw7ZyIFwic2ltcGxlXCIgb20gZHUgaWJsYW5kIGFudsOkbmRlclxuIgorI34gIsOkbGRyZSB2ZXJzaW9uZXIgYXYgR2l0LikiCisKKyN+IG1zZ2lkICJjaGVja3xvbi1kZW1hbmR8bm8iCisjfiBtc2dzdHIgImNoZWNrfG9uLWRlbWFuZHxubyIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyIKKyN+IG1zZ3N0ciAiS3VuZGUgaW50ZSBsw6RnZ2EgdGlsbCBww6UgXCIlc1wiIgorCisjfiBtc2dpZCAiVGVzdGluZyAiCisjfiBtc2dzdHIgIlRlc3RhciIKKworI34gbXNnaWQgInVuYWJsZSB0byBsb29rIHVwIGN1cnJlbnQgdXNlciBpbiB0aGUgcGFzc3dkIGZpbGU6ICVzIgorI34gbXNnc3RyICJrYW4gaW50ZSBzbMOlIHVwcCBha3R1ZWxsIGFudsOkbmRhcmUgaSBwYXNzd2QtZmlsZW46ICVzIgorCisjfiBtc2dpZCAibm8gc3VjaCB1c2VyIgorI34gbXNnc3RyICJva8OkbmQgYW52w6RuZGFyZSIKKworI34gbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IHBvaW50IGF0IGEgY29tbWl0IgorI34gbXNnc3RyICJncmVuZW4gXCIlc1wiIHBla2FyIGludGUgcMOlIGVuIGluY2hlY2tuaW5nIgorCisjfiBtc2dpZCAicHJpbnQgb25seSBtZXJnZWQgYnJhbmNoZXMiCisjfiBtc2dzdHIgInZpc2EgZW5kYXN0IHNhbW1hbnNsYWduYSBncmVuYXIiCisKKyN+IG1zZ2lkICItLWRpc3NvY2lhdGUgZ2l2ZW4sIGJ1dCB0aGVyZSBpcyBubyAtLXJlZmVyZW5jZSIKKyN+IG1zZ3N0ciAiLS1kaXNzb2NpYXRlIGFuZ2F2cywgbWVuIC0tcmVmZXJlbmNlIGhhciBpbnRlIGFuZ2l2aXRzIgorCisjfiBtc2dpZCAic2hvdyB1c2FnZSIKKyN+IG1zZ3N0ciAidmlzYSBhbnbDpG5kbmluZyIKKworI34gbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgbmFtZSAlcyIKKyN+IG1zZ3N0ciAidG9raWd0IGzDpW5ndCBuYW1uIHDDpSBtYWxsZW4gJXMiCisKKyN+IG1zZ2lkICJpbnNhbmVseSBsb25nIHN5bWxpbmsgJXMiCisjfiBtc2dzdHIgInRva2lndCBsw6VuZyBzeW1ib2xpc2sgbMOkbmsgJXMiCisKKyN+IG1zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIHBhdGggJXMiCisjfiBtc2dzdHIgInRva2lndCBsw6VuZyBtYWxsc8O2a3bDpGcgJXMiCisKKyN+IG1zZ2lkICJmYWxzZXx0cnVlfHByZXNlcnZlIgorI34gbXNnc3RyICJmYWxzZXx0cnVlfHByZXNlcnZlIgorCisjfiBtc2dpZCAidW5zdXBwb3J0ZWQgc29ydCBzcGVjaWZpY2F0aW9uICclcyciCisjfiBtc2dzdHIgInNvcnRlcmluZ3NhbmdpdmVsc2VuIFwiJXNcIiBzdMO2ZHMgZWoiCisKKyN+IG1zZ2lkICJ1bnN1cHBvcnRlZCBzb3J0IHNwZWNpZmljYXRpb24gJyVzJyBpbiB2YXJpYWJsZSAnJXMnIgorI34gbXNnc3RyICJzb3J0ZXJpbmdzYW5naXZlbHNlbiBcIiVzXCIgaSB2YXJpYWJlbG4gXCIlc1wiIHN0w7ZkcyBlaiIKKworI34gbXNnaWQgInN3aXRjaCAncG9pbnRzLWF0JyByZXF1aXJlcyBhbiBvYmplY3QiCisjfiBtc2dzdHIgImZsYWdnYW4gXCJwb2ludHMtYXRcIiBiZWjDtnZlciBldHQgb2JqZWt0IgorCisjfiBtc2dpZCAiLS1zb3J0IGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorI34gbXNnc3RyICItLXNvcnQgb2NoIC1uIMOkciBpbmtvbXBhdGlibGEiCisKKyN+IG1zZ2lkICJHaXRkaXIgJyRhJyBpcyBwYXJ0IG9mIHRoZSBzdWJtb2R1bGUgcGF0aCAnJGInIG9yIHZpY2UgdmVyc2EiCisjfiBtc2dzdHIgIkdpdGthdGFsb2cgXCIkYVwiIGluZ8OlciBpIHVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJGJcIiBlbGxlciBvbXbDpG50IgorCisjfiBtc2dpZCAiQlVHOiByZW9wZW4gYSBsb2NrZmlsZSB0aGF0IGlzIHN0aWxsIG9wZW4iCisjfiBtc2dzdHIgIkZFTDogw6V0ZXLDtnBwbmEgZW4gbMOlc2ZpbCBzb20gZm9ydGZhcmFuZGUgw6RyIMO2cHBlbiIKKworI34gbXNnaWQgIkJVRzogcmVvcGVuIGEgbG9ja2ZpbGUgdGhhdCBoYXMgYmVlbiBjb21taXR0ZWQiCisjfiBtc2dzdHIgIkZFTDogw6V0ZXLDtnBwbmEgZW4gbMOlc2ZpbCBzb20gaGFyIMO2dmVybMOkbW5hdHMiCisKKyN+IG1zZ2lkICJvcHRpb24gJXMgZG9lcyBub3QgYWNjZXB0IG5lZ2F0aXZlIGZvcm0iCisjfiBtc2dzdHIgImZsYWdnYW4gJXMgZ29kdGFyIGludGUgbmVnYXRpdiBmb3JtIgorCisjfiBtc2dpZCAiLWIgYW5kIC1CIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCisjfiBtc2dzdHIgIi1iIG9jaCAtQiBrYW4gaW50ZSBhbnbDpG5kYXMgc2FtdGlkaWd0IgorCisjfiBtc2dpZCAiIgorI34gIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIkY21kbGluZSAtLWNvbnRpbnVlXCIuXG4iCisjfiAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiRjbWRsaW5lIC0tc2tpcFwiIGluc3RlYWQuXG4iCisjfiAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIkY21kbGluZSAtLWFib3J0IgorI34gIlwiLiIKKyN+IG1zZ3N0ciAiIgorI34gIk7DpHIgZHUgaGFyIGzDtnN0IHByb2JsZW1ldCBrw7ZyIGR1IFwiJGNtZGxpbmUgLS1jb250aW51ZVwiLlxuIgorI34gIk9tIGR1IHZpbGwgaG9wcGEgw7Z2ZXIgcGF0Y2hlbiBrw7ZyIGR1IGlzdMOkbGxldCBcIiRjbWRsaW5lIC0tc2tpcFwiLlxuIgorI34gIkbDtnIgYXR0IMOldGVyc3TDpGxsYSBvcmlnaW5hbGdyZW5lbiBvY2ggYXZicnl0YSBrw7ZyIGR1IFwiJGNtZGxpbmUgLS1hYm9ydFwiLiIKKworI34gbXNnaWQgIlBhdGNoIGZvcm1hdCAkcGF0Y2hfZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIgorI34gbXNnc3RyICJQYXRjaGZvcm1hdGV0ICRwYXRjaF9mb3JtYXQgc3TDtmRzIGludGUuIgorCisjfiBtc2dpZCAiUGxlYXNlIG1ha2UgdXAgeW91ciBtaW5kLiAtLXNraXAgb3IgLS1hYm9ydD8iCisjfiBtc2dzdHIgIkJlc3TDpG0gZGlnLiAtLXNraXAgZWxsZXIgLS1hYm9ydD8iCisKKyN+IG1zZ2lkICIiCisjfiAiUGF0Y2ggaXMgZW1wdHkuICBXYXMgaXQgc3BsaXQgd3Jvbmc/XG4iCisjfiAiSWYgeW91IHdvdWxkIHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIGluc3RlYWQgcnVuIFwiJGNtZGxpbmUgLS1za2lwXCIuXG4iCisjfiAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nIHJ1biBcIiRjbWRsaW5lIC0tYWJvcnRcIi4iCisjfiBtc2dzdHIgIiIKKyN+ICJQYXRjaGVuIMOkciB0b20uIERlbGFkZXMgZGVuIHVwcCBmZWxha3RpZ3Q/XG4iCisjfiAiT20gZHUgdmlsbCBob3BwYSDDtnZlciBwYXRjaGVuIGvDtnIgZHUgaXN0w6RsbGV0IFwiJGNtZGxpbmUgLS1za2lwXCIuXG4iCisjfiAiRsO2ciBhdHQgw6V0ZXJzdMOkbGxhIG9yaWdpbmFsZ3JlbmVuIG9jaCBhdmJyeXRhIGvDtnIgZHUgXCIkY21kbGluZSAtLWFib3J0XCIuIgorCisjfiBtc2dpZCAiUGF0Y2ggZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLiIKKyN+IG1zZ3N0ciAiUGF0Y2hlbiBoYXIgaW50ZSBuw6Vnb24gZ2lsdGlnIGUtcG9zdGFkcmVzcy4iCisKKyN+IG1zZ2lkICJBcHBseWluZzogJEZJUlNUTElORSIKKyN+IG1zZ3N0ciAiVGlsbMOkbXBhcjogJEZJUlNUTElORSIKKworI34gbXNnaWQgIlBhdGNoIGZhaWxlZCBhdCAkbXNnbnVtICRGSVJTVExJTkUiCisjfiBtc2dzdHIgIlBhdGNoZW4gbWlzc2x5Y2thZGVzIHZpZCAkbXNnbnVtICRGSVJTVExJTkUiCisKKyN+IG1zZ2lkICIiCisjfiAiUHVsbCBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy5cbiIKKyN+ICJQbGVhc2UsIGZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisjfiAiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKKyN+IG1zZ3N0ciAiIgorI34gIkR1IGthbiBpbnRlIGfDtnJhIGVuIFwicHVsbFwiIGTDpSBkdSBoYXIgw6RuZHJpbmdhciBzb20gaW50ZSBjaGVja2F0cyBpbi5cbiIKKyN+ICJSw6R0dGEgZGVtIGkgZGluIGFyYmV0c2thdGFsb2cgb2NoIGFudsOkbmQgc2VkYW4gXCJnaXQgYWRkL3JtIDxmaWw+XCJcbiIKKyN+ICJkw6RyIGRldCDDpHIgbMOkbXBsaWd0IGbDtnIgYXR0IGFuZ2UgbMO2c25pbmcgb2NoIGNoZWNrYSBpbi4iCisKKyN+IG1zZ2lkICJubyBicmFuY2ggc3BlY2lmaWVkIgorI34gbXNnc3RyICJpbmdldCBncmVubmFtbiBhbmdhdnMiCisKKyN+IG1zZ2lkICJwcnVuZSAuZ2l0L3dvcmt0cmVlcyIKKyN+IG1zZ3N0ciAicmVuc2EgLmdpdC93b3JrdHJlZXMiCisKKyN+IG1zZ2lkICJUaGUgbW9zdCBjb21tb25seSB1c2VkIGdpdCBjb21tYW5kcyBhcmU6IgorI34gbXNnc3RyICJEZSBtZXN0IGFudsOkbmRhIGdpdC1rb21tYW5kb25hIMOkcjoiCisKKyN+IG1zZ2lkICJObyBzdWNoIGJyYW5jaDogJyVzJyIKKyN+IG1zZ3N0ciAiT2vDpG5kIGdyZW46IFwiJXNcIiIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZ2l0IGxpbmsgJXMiCisjfiBtc2dzdHIgIkt1bmRlIGludGUgc2thcGEgZ2l0bMOkbmsgJXMiCisKKyN+IG1zZ2lkICJJbnZhbGlkIGdjLnBydW5lZXhwaXJlOiAnJXMnIgorI34gbXNnc3RyICJPZ2lsdGlnIGdjLnBydW5lZXhwaXJlOiAnJXMnIgorCisjfiBtc2dpZCAiKGRldGFjaGVkIGZyb20gJXMpIgorI34gbXNnc3RyICIoZnLDpW5rb3BwbGFkIGZyw6VuICVzKSIKKworI34gbXNnaWQgIk5vIGV4aXN0aW5nIGF1dGhvciBmb3VuZCB3aXRoICclcyciCisjfiBtc2dzdHIgIkhpdHRhZGUgaW5nZW4gYmVmaW50bGlnIGbDtnJmYXR0YXJlIG1lZCBcIiVzXCIiCisKKyN+IG1zZ2lkICJzZWFyY2ggYWxzbyBpbiBpZ25vcmVkIGZpbGVzIgorI34gbXNnc3RyICJzw7ZrIMOkdmVuIGkgaWdub3JlcmFkZSBmaWxlciIKKworI34gbXNnaWQgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfDxicmFuY2g+KSIKKyN+IG1zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtbj4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxncmVuPikiCisKKyN+IG1zZ2lkICJubyBmaWxlcyBhZGRlZCIKKyN+IG1zZ3N0ciAiaW5nYSBmaWxlciBoYXIgbGFndHMgdGlsbCIKKworI34gbXNnaWQgInNsb3QiCisjfiBtc2dzdHIgInBsYXRzIgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIGxvY2sgcmVmIGZvciB1cGRhdGUiCisjfiBtc2dzdHIgIk1pc3NseWNrYWRlcyBsw6VzYSByZWZlcmVucyBmw7ZyIHVwcGRhdGVyaW5nIgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIHdyaXRlIHJlZiIKKyN+IG1zZ3N0ciAiTWlzc2x5Y2thZGVzIHNrcml2YSByZWZlcmVucyIKKworI34gbXNnaWQgIkZhaWxlZCB0byBsb2NrIEhFQUQgZHVyaW5nIGZhc3RfZm9yd2FyZF90byIKKyN+IG1zZ3N0ciAiTWlzc2x5Y2thZGVzIGzDpXNhIEhFQUQgdW5kZXIgXCJmYXN0X2ZvcndhcmRfdG9cIiIKKworI34gbXNnaWQgImNhbm5vdCBsb2NrIEhFQUQgcmVmIgorI34gbXNnc3RyICJrdW5kZSBpbnRlIGzDpXNhIEhFQUQtcmVmZXJlbnMiCisKKyN+IG1zZ2lkICJjYW5ub3QgdXBkYXRlIEhFQUQgcmVmIgorI34gbXNnc3RyICJrdW5kZSBpbnRlIHVwcGRhdGVyYSBIRUFELXJlZmVyZW5zIgorCisjfiBtc2dpZCAiJXM6IGNhbm5vdCBsb2NrIHRoZSByZWYiCisjfiBtc2dzdHIgIiVzOiBrYW4gaW50ZSBsw6VzYSByZWZlcmVuc2VuIgorCisjfiBtc2dpZCAiY29tbWl0IGhhcyBlbXB0eSBtZXNzYWdlIgorI34gbXNnc3RyICJpbmNoZWNrbmluZ2VuIGhhciBldHQgdG9tdCBtZWRkZWxhbmRlIgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIGNoZGlyOiAlcyIKKyN+IG1zZ3N0ciAiS3VuZGUgaW50ZSBieXRhIGthdGFsb2cgKGNoZGlyKTogJXMiCisKKyN+IG1zZ2lkICJUcmFja2luZyBub3Qgc2V0IHVwOiBuYW1lIHRvbyBsb25nOiAlcyIKKyN+IG1zZ3N0ciAiU3DDpXJuaW5nIGhhciBpbnRlIHN0w6RsbHRzIGluOiBuYW1uZXQgZsO2ciBsw6VuZ3Q6ICVzIgorCisjfiBtc2dpZCAiY291bGQgbm90IGZpbmQgLmdpdG1vZHVsZXMgaW4gaW5kZXgiCisjfiBtc2dzdHIgImt1bmRlIGludGUgaGl0dGEgLmdpdG1vZHVsZXMgaSBpbmRleGV0IgorCisjfiBtc2dpZCAicmVhZGluZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKKyN+IG1zZ3N0ciAibWlzc2x5Y2thZGVzIGzDpHNhIHVwcGRhdGVyYWQgLmdpdG1vZHVsZXMiCisKKyN+IG1zZ2lkICJ1bmFibGUgdG8gc3RhdCB1cGRhdGVkIC5naXRtb2R1bGVzIgorI34gbXNnc3RyICJrYW4gaW50ZSB0YSBzdGF0dXMgcMOlIHVwcGRhdGVyYWQgLmdpdG1vZHVsZXMiCisKKyN+IG1zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlIC5naXRtb2R1bGVzIGZyb20gaW5kZXgiCisjfiBtc2dzdHIgImthbiBpbnRlIHRhIGJvcnQgLmdpdG1vZHVsZXMgZnLDpW4gaW5kZXhldCIKKworI34gbXNnaWQgImFkZGluZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKKyN+IG1zZ3N0ciAibWlzc2x5Y2thZGVzIGzDpGdnYSB0aWxsIHVwcGRhdGVyYWQgLmdpdG1vZHVsZXMiCisKKyN+IG1zZ2lkICJidWciCisjfiBtc2dzdHIgInByb2dyYW1mZWwiCisKKyN+IG1zZ2lkICIsIGJlaGluZCAiCisjfiBtc2dzdHIgIiwgZWZ0ZXIgIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBiZWhhdmlvciBvZiAnZ2l0IGFkZCAlcyAob3IgJXMpJyB3aXRoIG5vIHBhdGggYXJndW1lbnQgZnJvbSBhXG4iCisjfiAic3ViZGlyZWN0b3J5IG9mIHRoZSB0cmVlIHdpbGwgY2hhbmdlIGluIEdpdCAyLjAgYW5kIHNob3VsZCBub3QgYmUgdXNlZCAiCisjfiAiYW55bW9yZS5cbiIKKyN+ICJUbyBhZGQgY29udGVudCBmb3IgdGhlIHdob2xlIHRyZWUsIHJ1bjpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBhZGQgJXMgOi9cbiIKKyN+ICIgIChvciBnaXQgYWRkICVzIDovKVxuIgorI34gIlxuIgorI34gIlRvIHJlc3RyaWN0IHRoZSBjb21tYW5kIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgcnVuOlxuIgorI34gIlxuIgorI34gIiAgZ2l0IGFkZCAlcyAuXG4iCisjfiAiICAob3IgZ2l0IGFkZCAlcyAuKVxuIgorI34gIlxuIgorI34gIldpdGggdGhlIGN1cnJlbnQgR2l0IHZlcnNpb24sIHRoZSBjb21tYW5kIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIGN1cnJlbnQgIgorI34gImRpcmVjdG9yeS5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkJldGVlbmRldCBmw7ZyIFwiZ2l0IGFkZCAlcyAoZWxsZXIgJXMpXCIgdXRhbiBzw7ZrdsOkZ3Nhcmd1bWVudCBmcsOlbiBlblxuIgorI34gInVuZGVya2F0YWxvZyBpIGV0dCB0csOkZCBrb21tZXIgw6RuZHJhcyBpIEdpdCAyLjAgb2NoIGLDtnIgaW50ZSBsw6RuZ3JlICIKKyN+ICJhbnbDpG5kYXMuXG4iCisjfiAiRsO2ciBhdHQgbMOkZ2dhIHRpbGwgaW5uZWjDpWxsZXQgZsO2ciBoZWxhIHRyw6RkZXQsIGFudsOkbmQ6XG4iCisjfiAiXG4iCisjfiAiICBnaXQgYWRkICVzIDovXG4iCisjfiAiICAoZWxsZXIgZ2l0IGFkZCAlcyA6LylcbiIKKyN+ICJcbiIKKyN+ICJGw7ZyIGF0dCBiZWdyw6Ruc2Ega29tbWFuZG90IHRpbGwgYWt0dWVsbCBrYXRhbG9nLCBhbnbDpG5kOlxuIgorI34gIlxuIgorI34gIiAgZ2l0IGFkZCAlcyAuXG4iCisjfiAiICAoZWxsZXIgZ2l0IGFkZCAlcyAuKVxuIgorI34gIlxuIgorI34gIkkgbnV2YXJhbmRlIHZlcnNpb24gYXYgR2l0IGJlZ3LDpG5zYXMga29tbWFuZG90IHRpbGwgYWt0dWVsbCBrYXRhbG9nLlxuIgorCisjfiBtc2dpZCAiIgorI34gIllvdSByYW4gJ2dpdCBhZGQnIHdpdGggbmVpdGhlciAnLUEgKC0tYWxsKScgb3IgJy0taWdub3JlLXJlbW92YWwnLFxuIgorI34gIndob3NlIGJlaGF2aW91ciB3aWxsIGNoYW5nZSBpbiBHaXQgMi4wIHdpdGggcmVzcGVjdCB0byBwYXRocyB5b3UgIgorI34gInJlbW92ZWQuXG4iCisjfiAiUGF0aHMgbGlrZSAnJXMnIHRoYXQgYXJlXG4iCisjfiAicmVtb3ZlZCBmcm9tIHlvdXIgd29ya2luZyB0cmVlIGFyZSBpZ25vcmVkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIEdpdC5cbiIKKyN+ICJcbiIKKyN+ICIqICdnaXQgYWRkIC0taWdub3JlLXJlbW92YWwgPHBhdGhzcGVjPicsIHdoaWNoIGlzIHRoZSBjdXJyZW50IGRlZmF1bHQsXG4iCisjfiAiICBpZ25vcmVzIHBhdGhzIHlvdSByZW1vdmVkIGZyb20geW91ciB3b3JraW5nIHRyZWUuXG4iCisjfiAiXG4iCisjfiAiKiAnZ2l0IGFkZCAtLWFsbCA8cGF0aHNwZWM+JyB3aWxsIGxldCB5b3UgYWxzbyByZWNvcmQgdGhlIHJlbW92YWxzLlxuIgorI34gIlxuIgorI34gIlJ1biAnZ2l0IHN0YXR1cycgdG8gY2hlY2sgdGhlIHBhdGhzIHlvdSByZW1vdmVkIGZyb20geW91ciB3b3JraW5nIHRyZWUuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJEdSBrw7ZyZGUgXCJnaXQgYWRkXCIgdXRhbiB2YXJrZW4gXCItQSAoLS1hbGwpXCIgZWxsZXIgXCItLWlnbm9yZS1yZW1vdmFsIgorI34gIlwiLlxuIgorI34gIkJldGVlbmRldCBrb21tZXIgw6RuZHJhcyBpIEdpdCAyLjAgdmFkIGfDpGxsZXIgc8O2a3bDpGdhciBkdSB0YWdpdCBib3J0LlxuIgorI34gIlPDtmt2w6RnYXIgc29tIFwiJXNcIiwgc29tIGhhclxuIgorI34gInRhZ2l0cyBib3J0IGZyw6VuIGRpbiBhcmJldHNrYXRhbG9nIGlnbm9yZXJhcyBpIGRlbiBow6RyIHZlcnNpb25lbiBhdiBHaXQuXG4iCisjfiAiXG4iCisjfiAiKiBcImdpdCBhZGQgLS1pZ25vcmUtcmVtb3ZhbCA8c8O2a3bDpGc+XCIsIHNvbSDDpHIgZsO2cnZhbGV0IGp1c3QgbnUsXG4iCisjfiAiICBpZ25vcmVyYXIgc8O2a3bDpGdhciBkdSBoYXIgdGFnaXQgYm9ydCBmcsOlbiBhcmJldHNrYXRhbG9nZW4uXG4iCisjfiAiXG4iCisjfiAiKiBcImdpdCBhZGQgLS1hbGwgPHPDtmt2w6RnPlwiIGzDpXRlciBkaWcgw6R2ZW4gcmVnaXN0cmVyYSBib3J0dGFnbmluZ2FybmEuXG4iCisjfiAiXG4iCisjfiAiS8O2ciBcImdpdCBzdGF0dXNcIiBmw7ZyIGF0dCBrb250cm9sbGVyYSBzw7ZrdsOkZ2FybmEgZHUgdGFnaXQgYm9ydCBmcsOlblxuIgorI34gImFyYmV0c2thdGFsb2dlbi5cbiIKKworI34gbXNnaWQgImtleSBpZCIKKyN+IG1zZ3N0ciAibnlja2VsLWlkIgorCisjfiBtc2dpZCAiIgorI34gIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS4gWW91IG1heSBhbHNvXG4iCisjfiAicnVuIFwiZ2l0IGdjXCIgbWFudWFsbHkuIFNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJQYWNrYXIgYXJraXZldCBhdXRvbWF0aXNrdCBmw7ZyIG9wdGltYWwgcHJlc3RhbmRhLiBEdSBrYW4gw6R2ZW5cbiIKKyN+ICJrw7ZyYSBcImdpdCBnY1wiIG1hbnVlbGx0LiBTZSBcImdpdCBoZWxwIGdjXCIgZsO2ciBtZXIgaW5mb3JtYXRpb24uXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorI34gImNvdW50ZXJwYXJ0LiBJZiB5b3UgZGlkIG5vdCBpbnRlbmQgdG8gcHVzaCB0aGF0IGJyYW5jaCwgeW91IG1heSB3YW50IHRvXG4iCisjfiAic3BlY2lmeSBicmFuY2hlcyB0byBwdXNoIG9yIHNldCB0aGUgJ3B1c2guZGVmYXVsdCcgY29uZmlndXJhdGlvbiAiCisjfiAidmFyaWFibGVcbiIKKyN+ICJ0byAnc2ltcGxlJywgJ2N1cnJlbnQnIG9yICd1cHN0cmVhbScgdG8gcHVzaCBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaC4iCisjfiBtc2dzdHIgIiIKKyN+ICJVcHBkYXRlcmluZ2FyIGF2dmlzYWRlcyBkw6Ugw6RuZGVuIHDDpSBlbiBpbnPDpG5kIGdyZW4gw6RyIGJha29tIGRlc3NcbiIKKyN+ICJmasOkcnJtb3RzdmFyaWdoZXQuIE9tIGRldCBpbnRlIHZhciBtZW5pbmdlbiBhdHQgc8OkbmRhIGluIGdyZW5lbiwgYsO2clxuIgorI34gImR1IHNwZWNpZmljZXJhIGdyZW5hciBhdHQgc8OkbmRhLCBlbGxlciDDpG5kcmEgaW5zdMOkbGxuaW5nc3ZhcmlhYmVsblxuIgorI34gIlwicHVzaC1kZWZhdWx0XCIgdGlsbCBcInNpbXBsZVwiLCBcImN1cnJlbnRcIiBlbGxlciBcInVwc3RyZWFtXCIgZsO2ciBhdHQgIgorI34gImVuZGFzdFxuIgorI34gInPDpG5kYSBha3R1ZWxsIGdyZW4uIgorCisjfiBtc2dpZCAiY29waWVkOiAgICAgJXMgLT4gJXMiCisjfiBtc2dzdHIgImtvcGllcmFkOiAgICVzIC0+ICVzIgorCisjfiBtc2dpZCAiZGVsZXRlZDogICAgJXMiCisjfiBtc2dzdHIgImJvcnR0YWdlbjogICVzIgorCisjfiBtc2dpZCAibW9kaWZpZWQ6ICAgJXMiCisjfiBtc2dzdHIgIsOkbmRyYWQ6ICAgICAlcyIKKworI34gbXNnaWQgInJlbmFtZWQ6ICAgICVzIC0+ICVzIgorI34gbXNnc3RyICJuYW1uYnl0ZTogICAlcyAtPiAlcyIKKworI34gbXNnaWQgInVubWVyZ2VkOiAgICVzIgorI34gbXNnc3RyICJvc2FtbWFuc2wuOiAlcyIKKworI34gbXNnaWQgImlucHV0IHBhdGhzIGFyZSB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBjaGFyYWN0ZXIiCisjfiBtc2dzdHIgInPDtmt2w6RnYXIgYXZkZWxhcyBtZWQgbnVsbC10ZWNrZW4iCisKKyN+IG1zZ2lkICIiCisjfiAiQWJvcnRpbmcuIENvbnNpZGVyIHVzaW5nIGVpdGhlciB0aGUgLS1mb3JjZSBvciAtLWluY2x1ZGUtdW50cmFja2VkIG9wdGlvbi4iCisjfiBtc2dzdHIgIiIKKyN+ICJBdmJyeXRlci4gw5Z2ZXJ2w6RnIGF0dCBhbnbDpG5kYSBhbnRpbmdlbiBmbGFnZ2FuIC0tZm9yY2UgZWxsZXIgLS1pbmNsdWRlLSIKKyN+ICJ1bnRyYWNrZWQuIgorCisjfiBtc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1yZXNvbHZlZFwiKSIKKyN+IG1zZ3N0ciAiICAocsOkdHRhIGtvbmZsaWt0ZXIgb2NoIGvDtnIgc2VkYW4gXCJnaXQgYW0gLS1yZXNvbHZlZFwiKSIKKworI34gbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjb21taXRcIikiCisjfiBtc2dzdHIgIiAgKGFsbGEga29uZmxpa3RlciBoYXIgcsOkdHRhdHM6IGvDtnIgXCJnaXQgY29tbWl0XCIpIgorCisjfiBtc2dpZCAibW9yZSB0aGFuICVkIHRyZWVzIGdpdmVuOiAnJXMnIgorI34gbXNnc3RyICJtZXIgw6RuICVkIHRyw6RkIGFuZ2F2czogXCIlc1wiIgorCisjfiBtc2dpZCAiIgorI34gIiclcycgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleFxuIgorI34gIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCisjfiBtc2dzdHIgIiIKKyN+ICJcIiVzXCIgaGFyIGvDtmFkZSDDpG5kcmluZ2FyIGkgaW5kZXhldFxuIgorI34gIihhbnbDpG5kIC0tY2FjaGVkIGbDtnIgYXR0IGJlaMOlbGxhIGZpbGVuIGVsbGVyIC1mIGbDtnIgYXR0IHR2aW5nYSAiCisjfiAiYm9ydHRhZ25pbmcpIgorCisjfiBtc2dpZCAic2hvdyBjb21taXRzIHdoZXJlIG5vIHBhcmVudCBjb21lcyBiZWZvcmUgaXRzIGNoaWxkcmVuIgorI34gbXNnc3RyICJ2aXNhIGluY2hlY2tuaW5nYXIgZMOkciBpbmdlbiBmw7Zyw6RsZGVyIGtvbW1lciBmw7ZyZSBkZXNzIGJhcm4iCisKKyN+IG1zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSIKKyN+IG1zZ3N0ciAidmlzYSBIRUFELXJlZmVyZW5zZW4iCisKKyN+IG1zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRwcmVmaXgkc21fcGF0aCciCisjfiBtc2dzdHIgIkthbiBpbnRlIGjDpG10YSBpIHVuZGVybW9kdWxzw7ZrdsOkZyBcIiRwcmVmaXgkc21fcGF0aFwiIgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJHByZWZpeCRzbV9wYXRoJyIKKyN+IG1zZ3N0ciAiTWlzc2x5Y2thZGVzIHJla3Vyc2VyYSBpbiBpIHVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJHByZWZpeCRzbV9wYXRoXCIiCisKKyN+IG1zZ2lkICJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW50cmFja2VkIGZpbGVzLiAgJ3N0YXR1cyAtdW5vJyIKKyN+IG1zZ3N0ciAiRGV0IHRvZyAlLjJmIHNla3VuZGVyIGF0dCByw6RrbmEgb3Nww6VyYWRlIGZpbGVyLiBcInN0YXR1cyAtdW5vXCIiCisKKyN+IG1zZ2lkICJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkIgorI34gbXNnc3RyICJrYW5za2UgZ8O2ciBkZXQgc25hYmJhcmUsIG1lbiBkdSBtw6VzdGUgdmFyYSBmw7Zyc2lrdGlnIHPDpSBhdHQgZHUiCisKKyN+IG1zZ2lkICJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorI34gbXNnc3RyICJpbnRlIGdsw7ZtbWVyIGzDpGdnYSB0aWxsIGZpbGVyIHNqw6RsdiAoc2UgXCJnaXQgaGVscCBzdGF0dXNcIikiCisKKyN+IG1zZ2lkICJnaXQgc2hvcnRsb2cgWy1uXSBbLXNdIFstZV0gWy13XSBbcmV2LW9wdHNdIFstLV0gWzxjb21taXQtaWQ+Li4uIF0iCisjfiBtc2dzdHIgIiIKKyN+ICJnaXQgc2hvcnRsb2cgWy1uXSBbLXNdIFstZV0gWy13XSBbcmV2LWZsYWdnb3JdIFstLV0gWzxpbmNoZWNrbmluZy1pZD4uLi4gXSIKKworI34gbXNnaWQgInVzZSBhbnkgcmVmIGluIC5naXQvcmVmcyIKKyN+IG1zZ3N0ciAiYW52w6RuZCBhbGxhIHJlZmVyZW5zZXIgaSAuZ2l0L3JlZnMiCisKKyN+IG1zZ2lkICJ1c2UgYW55IHRhZyBpbiAuZ2l0L3JlZnMvdGFncyIKKyN+IG1zZ3N0ciAiYW52w6RuZCBhbGxhIHRhZ2dhciBpIC5naXQvcmVmcy90YWdzIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKKyN+IG1zZ3N0ciAia3VuZGUgaW50ZSBzdMOkbmdhIHLDtnJldCB0aWxsIFwic2hvd1wiIGbDtnIgb2JqZWt0ZXQgXCIlc1wiIgorCisjfiBtc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRCIKKyN+IG1zZ3N0ciAiRHUgaGFyIGluZ2VuIGdpbHRpZyBIRUFEIgorCisjfiBtc2dpZCAib29wcyIKKyN+IG1zZ3N0ciAiaG9wcHNhbiIKKworI34gbXNnaWQgIk5vdCByZW1vdmluZyAlc1xuIgorI34gbXNnc3RyICJUYXIgaW50ZSBib3J0ICVzXG4iCisKKyN+IG1zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtZCB8IDxicmFuY2g+XSkiCisjfiBtc2dzdHIgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbW4+ICgtYSB8IC1kIHwgPGdyZW4+XSkiCisKKyN+IG1zZ2lkICIgJWQgZmlsZSBjaGFuZ2VkIgorI34gbXNnaWRfcGx1cmFsICIgJWQgZmlsZXMgY2hhbmdlZCIKKyN+IG1zZ3N0clswXSAiICVkIGZpbCDDpG5kcmFkIgorI34gbXNnc3RyWzFdICIgJWQgZmlsZXIgw6RuZHJhZGUiCisKKyN+IG1zZ2lkICIsICVkIGluc2VydGlvbigrKSIKKyN+IG1zZ2lkX3BsdXJhbCAiLCAlZCBpbnNlcnRpb25zKCspIgorI34gbXNnc3RyWzBdICIsICVkIHRpbGzDpGdnKCspIgorI34gbXNnc3RyWzFdICIsICVkIHRpbGzDpGdnKCspIgorCisjfiBtc2dpZCAiLCAlZCBkZWxldGlvbigtKSIKKyN+IG1zZ2lkX3BsdXJhbCAiLCAlZCBkZWxldGlvbnMoLSkiCisjfiBtc2dzdHJbMF0gIiwgJWQgYm9ydHRhZ25pbmcoLSkiCisjfiBtc2dzdHJbMV0gIiwgJWQgYm9ydHRhZ25pbmdhcigtKSIKKworI34gbXNnaWQgIiAodXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKSIKKyN+IG1zZ3N0ciAiIChzcMOlcmEgbWVkIFwiZ2l0IGFkZFwiKSIKKworI34gbXNnaWQgIi0tZGV0YWNoIGNhbm5vdCBiZSB1c2VkIHdpdGggLWIvLUIvLS1vcnBoYW4iCisjfiBtc2dzdHIgIi0tZGV0Y2FoIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgLWIvLUIvLS1vcnBoYW4iCisKKyN+IG1zZ2lkICItLWRldGFjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIC10IgorI34gbXNnc3RyICItLWRldGFjaCBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIC10IgorCisjfiBtc2dpZCAiLS1vcnBoYW4gYW5kIC1ifC1CIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCisjfiBtc2dzdHIgIi0tb3JwaGFuIG9jaCAtYnwtQiBrYW4gaW50ZSBhbnbDpG5kYXMgc2FtdGlkaWd0IgorCisjfiBtc2dpZCAiLS1vcnBoYW4gY2Fubm90IGJlIHVzZWQgd2l0aCAtdCIKKyN+IG1zZ3N0ciAiLS1vcnBoYW4ga2FuIGludGUgYW52w6RuZGFzIG1lZCAtdCIKKworI34gbXNnaWQgImdpdCBjaGVja291dDogLWYgYW5kIC1tIGFyZSBpbmNvbXBhdGlibGUiCisjfiBtc2dzdHIgImdpdCBjaGVja291dDogLWYgb2NoIC1tIMOkciBpbmtvbXBhdGlibGEiCisKKyN+IG1zZ2lkICIiCisjfiAiZ2l0IGNoZWNrb3V0OiB1cGRhdGluZyBwYXRocyBpcyBpbmNvbXBhdGlibGUgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMuIgorI34gbXNnc3RyICIiCisjfiAiZ2l0IGNoZWNrb3V0OiB1cHBkYXRlcmEgc8O2a3bDpGdhciDDpHIgaW5rb21wYXRpYmVsdCBtZWQgYXR0IHbDpHhsYSBncmVuLiIKKworI34gbXNnaWQgImRpZmYgc2V0dXAgZmFpbGVkIgorI34gbXNnc3RyICJtaXNzbHlja2FkZXMgc8OkdHRhIHVwcCBmw7ZyIGRpZmYiCisKKyN+IG1zZ2lkICJtZXJnZS1yZWN1cnNpdmU6IGRpc2sgZnVsbD8iCisjfiBtc2dzdHIgIm1lcmdlLXJlY3Vyc2l2ZTogZGlzayBmdWxsPyIKKworI34gbXNnaWQgImRpZmZfc2V0dXBfZG9uZSBmYWlsZWQiCisjfiBtc2dzdHIgImRpZmZfc2V0dXBfZG9uZSBtaXNzbHlja2FkZXMiCisKKyN+IG1zZ2lkICIlczogaGFzIGJlZW4gZGVsZXRlZC9yZW5hbWVkIgorI34gbXNnc3RyICIlczogaGFyIHRhZ2l0cyBib3J0L8OkbmRyYXQgbmFtbiIKKworI34gbXNnaWQgIiclcyc6IG5vdCBhIGRvY3VtZW50YXRpb24gZGlyZWN0b3J5LiIKKyN+IG1zZ3N0ciAiXCIlc1wiOiBpbnRlIGVuIGRva3VtZW50YXRpb25za2F0YWxvZy4iCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgZXh0cmFjdCBlbWFpbCBmcm9tIGNvbW1pdHRlciBpZGVudGl0eS4iCisjfiBtc2dzdHIgIkt1bmRlIGludGUgZXh0cmFoZXJhIGUtcG9zdGFkcmVzcyBmcsOlbiBpbmNoZWNrYXJlbnMgaWRlbnRpdGV0LiIKKworI34gbXNnaWQgIi0tIgorI34gbXNnc3RyICItLSIKKworI34gbXNnaWQgIiMgQ2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorI34gbXNnc3RyICIjIMOEbmRyYWRlIG1lbiBpbnRlIHVwcGRhdGVyYWRlOiIKKworI34gbXNnaWQgImdpdCBjaGVja291dDogd2UgZG8gbm90IGxpa2UgJyVzJyBhcyBhIGJyYW5jaCBuYW1lLiIKKyN+IG1zZ3N0ciAiZ2l0IGNoZWNrb3V0OiB2aSB0eWNrZXIgaW50ZSBvbSBcIiVzXCIgc29tIG5hbW4gcMOlIGVuIGdyZW4uIgorCisjfiBtc2dpZCAiZ2l0IGNoZWNrb3V0OiBicmFuY2ggJXMgYWxyZWFkeSBleGlzdHMiCisjfiBtc2dzdHIgImdpdCBjaGVja291dDogZ3JlbmVuICVzIGZpbm5zIHJlZGFuIgorCisjfiBtc2dpZCAiUGF0aHMgd2l0aCAtLWludGVyYWN0aXZlIGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorI34gbXNnc3RyICJLYW4gaW50ZSBhbmdlIHPDtmt2w6RnYXIgbWVkIC0taW50ZXJhY3RpdmUuIgorCisjfiBtc2dpZCAiTm8gSEVBRCBjb21taXQgdG8gY29tcGFyZSB3aXRoICh5ZXQpIgorI34gbXNnc3RyICJJbmdlbiBIRUFELWluY2hlY2tuaW5nIGF0dCBqw6RtZsO2cmEgbWVkICjDpG5udSkiCisKKyN+IG1zZ2lkICJjYW5ub3QgbWl4IC0tZml4ZWQtc3RyaW5ncyBhbmQgcmVnZXhwIgorI34gbXNnc3RyICJrYW4gaW50ZSBibGFuZGEgLS1maXhlZC1zdHJpbmdzIG9jaCByZWd1bGrDpHJhIHV0dHJ5Y2siCisKKyN+IG1zZ2lkICIlczsgd2lsbCBvdmVyd3JpdGUhIgorI34gbXNnc3RyICIlczsga29tbWVyIHNrcml2YSDDtnZlciEiCmRpZmYgLS1naXQgYS9wby90ci5wbyBiL3BvL3RyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NDgyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9wby90ci5wbwpAQCAtMCwwICsxLDI0NTYzIEBACisjIFR1cmtpc2ggdHJhbnNsYXRpb25zIGZvciBHaXQKKyMgR2l0IFTDvHJrw6dlIMOnZXZpcmlsZXJpCisjIENvcHlyaWdodCAoQykgMjAyMCBFbWlyIFNBUkkgPGJpdGlnY2hpQG1lLmNvbT4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEdpdCBwYWNrYWdlLgorIyBFbWlyIFNBUkkgPGJpdGlnY2hpQG1lLmNvbT4sIDIwMjAKKyMKKyMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICMKKyMgICAgIEdpdCBUw7xya8OnZSBrYXZyYW1sYXIgZGl6aW5pIC8gR2l0IFR1cmtpc2ggR2xvc3NhcnkgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyDEsG5naWxpemNlICAgICAgICAgICAgICAgICAgIHwgVMO8cmvDp2UgICAgICAgICAgICAgICAgICAgICAgIworIyDigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJPigJMjCisjIDMtd2F5IG1lcmdlICAgICAgICAgICAgICAgICB8IDMgecO2bmzDvCBiaXJsZcWfdGlybWUgICAgICAgICAjCisjIGJhcmUgcmVwb3NpdG9yeSAgICAgICAgICAgICB8IMOnxLFwbGFrIGRlcG8gICAgICAgICAgICAgICAgICMKKyMgYmxvYiBvYmplY3QgICAgICAgICAgICAgICAgIHwgaWtpbGkgbmVzbmUgICAgICAgICAgICAgICAgICMKKyMgYnJhbmNoICAgICAgICAgICAgICAgICAgICAgIHwgZGFsICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgYnVuZGxlICAgICAgICAgICAgICAgICAgICAgIHwgZGVtZXQgICAgICAgICAgICAgICAgICAgICAgICMKKyMgY2hlY2tvdXQgICAgICAgICAgICAgICAgICAgIHwgw6fEsWvEscWfIHlhcMSxbS95YXBtYWsgICAgICAgICAgIworIyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgfCBpcmkgcGFyw6dhICAgICAgICAgICAgICAgICAgICMKKyMgY2xvbmUgICAgICAgICAgICAgICAgICAgICAgIHwga2xvbihsYW1haykgICAgICAgICAgICAgICAgICMKKyMgY29tbWl0IChhZCkgICAgICAgICAgICAgICAgIHwgZ8O2bmRlcmkgICAgICAgICAgICAgICAgICAgICAjCisjIGNvbW1pdCAoZXlsLikgICAgICAgICAgICAgICB8IGfDtm5kZXJtZWsgICAgICAgICAgICAgICAgICAgIworIyBjb21taXRpc2ggICAgICAgICAgICAgICAgICAgfCBnw7ZuZGVyaW1zaSAgICAgICAgICAgICAgICAgICMKKyMgY29uZmxpY3QgICAgICAgICAgICAgICAgICAgIHwgw6dha8SxxZ9tYSAgICAgICAgICAgICAgICAgICAgICMKKyMgZGFuZ2xpbmcgb2JqZWN0ICAgICAgICAgICAgIHwgc2FsbGFuYW4gbmVzbmUgICAgICAgICAgICAgICMKKyMgZGV0YWNoZWQgSEVBRCAgICAgICAgICAgICAgIHwgYXlyxLFrIEhFQUQgICAgICAgICAgICAgICAgICAjCisjIGRpcnR5ICAgICAgICAgICAgICAgICAgICAgICB8IGtpcmxpICAgICAgICAgICAgICAgICAgICAgICAjCisjIGV2aWwgbWVyZ2UgICAgICAgICAgICAgICAgICB8IHXEn3Vyc3V6IGJpcmxlxZ90aXJtZSAgICAgICAgICMKKyMgZmFzdC1mb3J3YXJkICAgICAgICAgICAgICAgIHwgaWxlcmkgc2FyxLFtL3Nhcm1hayAgICAgICAgICAjCisjIGZldGNoICAgICAgICAgICAgICAgICAgICAgICB8IGdldGlybWUoaykgICAgICAgICAgICAgICAgICAjCisjIGZpeHVwICAgICAgICAgICAgICAgICAgICAgICB8IGTDvHplbHRtZWsgICAgICAgICAgICAgICAgICAgIworIyBncmFmdCAgICAgICAgICAgICAgICAgICAgICAgfCBhxZ/EsSAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIGhhc2ggICAgICAgICAgICAgICAgICAgICAgICB8IHNhxJ9sYW1hICAgICAgICAgICAgICAgICAgICAgIworIyBoZWFkICAgICAgICAgICAgICAgICAgICAgICAgfCBkYWwgdWN1ICAgICAgICAgICAgICAgICAgICAgIworIyBodW5rICAgICAgICAgICAgICAgICAgICAgICAgfCBwYXLDp2EgICAgICAgICAgICAgICAgICAgICAgICMKKyMgaW5mbGF0ZSAgICAgICAgICAgICAgICAgICAgIHwgc8O2bmTDvHJtZWsgICAgICAgICAgICAgICAgICAgIworIyBpbml0ICAgICAgICAgICAgICAgICAgICAgICAgfCBpbGtsZW5kaXJtZWsgICAgICAgICAgICAgICAgIworIyBtYXJrICAgICAgICAgICAgICAgICAgICAgICAgfCBpbShsZW1laykgICAgICAgICAgICAgICAgICAgIworIyBtZXJnZSAgICAgICAgICAgICAgICAgICAgICAgfCBiaXJsZcWfdGlybWUoaykgICAgICAgICAgICAgICMKKyMgb2N0b3B1cyAgICAgICAgICAgICAgICAgICAgIHwgYWh0YXBvdCAgICAgICAgICAgICAgICAgICAgICMKKyMgb3ZlcmxheSAgICAgICAgICAgICAgICAgICAgIHwgeWVycGF5bGHFn8SxbSAgICAgICAgICAgICAgICAgIworIyBwYWNrICAgICAgICAgICAgICAgICAgICAgICAgfCBwYWtldCAgICAgICAgICAgICAgICAgICAgICAgIworIyBwYXJlbnQgICAgICAgICAgICAgICAgICAgICAgfCDDvHN0IMO2Z2UgICAgICAgICAgICAgICAgICAgICAjCisjIHBhdGNoICAgICAgICAgICAgICAgICAgICAgICB8IHlhbWEgICAgICAgICAgICAgICAgICAgICAgICAjCisjIHBhdGhzcGVjICAgICAgICAgICAgICAgICAgICB8IHlvbCBiZWxpcnRlY2kgICAgICAgICAgICAgICAjCisjIHBhdHRlcm4gICAgICAgICAgICAgICAgICAgICB8IGRpemdpICAgICAgICAgICAgICAgICAgICAgICAjCisjIHBvcmNlbGFpbiAgICAgICAgICAgICAgICAgICB8IG9rdW5hYmlsaXIgICAgICAgICAgICAgICAgICAjCisjIHBydW5lICAgICAgICAgICAgICAgICAgICAgICB8IGJ1ZGFtYWsgICAgICAgICAgICAgICAgICAgICAjCisjIHBzZXVkb3JlZiAgICAgICAgICAgICAgICAgICB8IHlhbGFuY8Sxa3RhbiBiYcWfdnVydSAgICAgICAgICMKKyMgcHVsbCAgICAgICAgICAgICAgICAgICAgICAgIHwgw6dla21lKGspICAgICAgICAgICAgICAgICAgICAjCisjIHB1c2ggICAgICAgICAgICAgICAgICAgICAgICB8IGl0bWUoaykgICAgICAgICAgICAgICAgICAgICAjCisjIHJlYmFzZSAgICAgICAgICAgICAgICAgICAgICB8IHllbmlkZW4gdGVtZWxsZW5kaXJtZShrKSAgICAjCisjIHJlY29yZCAgICAgICAgICAgICAgICAgICAgICB8IGthecSxdCB5YXoobWFrKSAgICAgICAgICAgICAgIworIyByZWYgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYcWfdnVydSAgICAgICAgICAgICAgICAgICAgICMKKyMgcmVmbG9nICAgICAgICAgICAgICAgICAgICAgIHwgYmHFn3Z1cnUgZ8O8bmzDvMSfw7wgICAgICAgICAgICAgIworIyByZWZzcGVjICAgICAgICAgICAgICAgICAgICAgfCBiYcWfdnVydSBiZWxpcnRlY2kgICAgICAgICAgICMKKyMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgIHwga2F5xLF0IHlhcChtYWspICAgICAgICAgICAgICAjCisjIHJlbW90ZSAgICAgICAgICAgICAgICAgICAgICB8IHV6YWsga29udW0gICAgICAgICAgICAgICAgICAjCisjIHJlbW90ZSByZXBvc2l0b3J5ICAgICAgICAgICB8IHV6YWsgZGVwbyAgICAgICAgICAgICAgICAgICAjCisjIHJlbW90ZS10cmFja2luZyBicmFuY2ggICAgICB8IHV6YWsgaXpsZW1lIGRhbMSxICAgICAgICAgICAgIworIyByZXBvc2l0b3J5ICAgICAgICAgICAgICAgICAgfCBkZXBvICAgICAgICAgICAgICAgICAgICAgICAgIworIyByZXNvbHZlICAgICAgICAgICAgICAgICAgICAgfCDDp8O2esO8bS/Dp8O2em1layAgICAgICAgICAgICAgICAjCisjIHJldmVydCAgICAgICAgICAgICAgICAgICAgICB8IGdlcmkgYWwobWFrKSAgICAgICAgICAgICAgICAjCisjIHJld2luZCAgICAgICAgICAgICAgICAgICAgICB8IGdlcmkgc2FyKG1haykgICAgICAgICAgICAgICAjCisjIHNhdmUgICAgICAgICAgICAgICAgICAgICAgICB8IGtheWRldChtZWspICAgICAgICAgICAgICAgICAjCisjIHNoYWxsb3cgY2xvbmUgICAgICAgICAgICAgICB8IHPEscSfIGtsb24gICAgICAgICAgICAgICAgICAgICMKKyMgc2hhbGxvdyByZXBvc2l0b3J5ICAgICAgICAgIHwgc8SxxJ8gZGVwbyAgICAgICAgICAgICAgICAgICAgIworIyBzcGFyc2UtY2hlY2tvdXQgICAgICAgICAgICAgfCBhcmFsxLFrbMSxIMOnxLFrxLHFnyAgICAgICAgICAgICAgIworIyBzcXVhc2ggICAgICAgICAgICAgICAgICAgICAgfCB0xLFrxLHFn3TEsXIobWFrKSAgICAgICAgICAgICAgICMKKyMgc3RhZ2UgICAgICAgICAgICAgICAgICAgICAgIHwgaGF6xLFybGEobWFrKSAgICAgICAgICAgICAgICAjCisjIHN0YWdpbmcgYXJlYSAgICAgICAgICAgICAgICB8IChnw7ZuZGVyaSkgaGF6xLFybGFtYSBhbGFuxLEgICAjCisjIHN0YXNoICAgICAgICAgICAgICAgICAgICAgICB8IHp1bGEobGFtYWspICAgICAgICAgICAgICAgICAjCisjIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICB8IGRpemkgICAgICAgICAgICAgICAgICAgICAgICAjCisjIHN1YmRpcmVjdG9yeSAgICAgICAgICAgICAgICB8IGFsdGRpemluICAgICAgICAgICAgICAgICAgICAjCisjIHN1Ym1vZHVsZSAgICAgICAgICAgICAgICAgICB8IGFsdG1vZMO8bCAgICAgICAgICAgICAgICAgICAgIworIyBzeW1saW5rICAgICAgICAgICAgICAgICAgICAgfCBzZW1ib2xpayBiYcSfICAgICAgICAgICAgICAgICMKKyMgc3ltcmVmICAgICAgICAgICAgICAgICAgICAgIHwgc2VtYm9saWsgYmHFn3Z1cnUgICAgICAgICAgICAjCisjIHRhZyAgICAgICAgICAgICAgICAgICAgICAgICB8IGV0aWtldCAgICAgICAgICAgICAgICAgICAgICAjCisjIHRlbXBsYXRlICAgICAgICAgICAgICAgICAgICB8IMWfYWJsb24gICAgICAgICAgICAgICAgICAgICAgIworIyB0b3BpYyBicmFuY2ggICAgICAgICAgICAgICAgfCBracWfaXNlbCBkYWwgICAgICAgICAgICAgICAgICMKKyMgdHJhaWxlciAgICAgICAgICAgICAgICAgICAgIHwgYXJ0YmlsZ2kgICAgICAgICAgICAgICAgICAgICMKKyMgdHJlZSAgICAgICAgICAgICAgICAgICAgICAgIHwgYcSfYcOnICAgICAgICAgICAgICAgICAgICAgICAgIworIyB0cmVlaXNoICAgICAgICAgICAgICAgICAgICAgfCBhxJ9hY8SxbXPEsSAgICAgICAgICAgICAgICAgICAgIworIyB1bnN0YWdlICAgICAgICAgICAgICAgICAgICAgfCBoYXrEsXJsxLFrdGFuIMOnxLFrYXIobWFrKSAgICAgICMKKyMgdXBzdHJlYW0gICAgICAgICAgICAgICAgICAgIHwgw7xzdGtheW5hayAgICAgICAgICAgICAgICAgICAjCisjIHdvcmt0cmVlL3dvcmtpbmcgdHJlZSAgICAgICB8IMOnYWzEscWfbWEgYcSfYWPEsSAgICAgICAgICAgICAgICMKKyMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICMKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEdpdCBUdXJraXNoIExvY2FsaXphdGlvbiBQcm9qZWN0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMjAtMDMtMTEgMTU6MjYrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMjAtMDMtMTAgMjM6MDArMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogRW1pciBTQVJJIDxiaXRpZ2NoaUBtZS5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogVHVya2lzaCAoaHR0cHM6Ly9naXRodWIuY29tL2JpdGlnY2hpL2dpdC1wby8pXG4iCisiTGFuZ3VhZ2U6IHRyXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT8iCittc2dzdHIgIlBhcmRvbiAoJXMpPyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NTIxIGFkZC1pbnRlcmFjdGl2ZS5jOjgyMiBzZXF1ZW5jZXIuYzozMTI0CisjOiBzZXF1ZW5jZXIuYzozNTYyIGJ1aWx0aW4vcmViYXNlLmM6ODc1IGJ1aWx0aW4vcmViYXNlLmM6MTY4NworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDg2IGJ1aWx0aW4vcmViYXNlLmM6MjEzMAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICJpbmRla3Mgb2t1bmFtYWTEsSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NTc2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjY5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI5NAorbXNnaWQgImJpbmFyeSIKK21zZ3N0ciAiaWtpbGkiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYzNCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI3OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMzIKK21zZ2lkICJub3RoaW5nIgorbXNnc3RyICJoacOnYmlyIMWfZXkiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYzNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMxNAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMjkKK21zZ2lkICJ1bmNoYW5nZWQiCittc2dzdHIgImRlxJ9pxZ90aXJpbG1lbWnFnyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjQzCittc2dpZCAiVXBkYXRlIgorbXNnc3RyICJHw7xuY2VsbGUiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY4OSBhZGQtaW50ZXJhY3RpdmUuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YWdlICclcyciCittc2dzdHIgIiclcycgaGF6xLFybGFuYW1hZMSxIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTUgYWRkLWludGVyYWN0aXZlLmM6ODg0IHNlcXVlbmNlci5jOjMzMTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODk5Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGluZGV4IgorbXNnc3RyICJpbmRla3MgeWF6xLFsYW1hZMSxIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInVwZGF0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ1cGRhdGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIHlvbCBnw7xuY2VsbGVuZGlcbiIKK21zZ3N0clsxXSAiJWQgeW9sIGfDvG5jZWxsZW5kaVxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3MTYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NzgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIm5vdGU6ICVzIGlzIHVudHJhY2tlZCBub3cuXG4iCittc2dzdHIgIm5vdDogJXMgYXJ0xLFrIGl6bGVubWl5b3IuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcyMSBhcHBseS5jOjQxMTAgYnVpbHRpbi9jaGVja291dC5jOjI4MQorIzogYnVpbHRpbi9yZXNldC5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICInJXMnIHlvbHUgacOnaW4gbWFrZV9jYWNoZV9lbnRyeSBiYcWfYXLEsXPEsXogb2xkdSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzUxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjU1Cittc2dpZCAiUmV2ZXJ0IgorbXNnc3RyICJHZXJpIGFsIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NjcKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgSEVBRF57dHJlZX0iCittc2dzdHIgIkhFQURee3RyZWV9IGF5csSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4MDUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MzEKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInJldmVydGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAicmV2ZXJ0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiJWQgeW9sIGdlcmkgYWzEsW5kxLFcbiIKK21zZ3N0clsxXSAiJWQgeW9sIGdlcmkgYWzEsW5kxLFcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODU2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVudHJhY2tlZCBmaWxlcy5cbiIKK21zZ3N0ciAixLB6bGVubWV5ZW4gZG9zeWEgeW9rLlxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4NjAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2ODkKK21zZ2lkICJBZGQgdW50cmFja2VkIgorbXNnc3RyICLEsHpsZW5tZXllbmxlcmkgZWtsZSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODg3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJhZGRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgImFkZGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIHlvbCBla2xlbmRpXG4iCittc2dzdHJbMV0gIiVkIHlvbCBla2xlbmRpXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkxNworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXMiCittc2dzdHIgImJpcmxlxZ90aXJpbG1leWVubGVyIHlvayBzYXnEsWzEsXlvcjogJXMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkyOSBhZGQtcGF0Y2guYzoxNjc1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkLlxuIgorbXNnc3RyICJZYWxuxLF6Y2EgaWtpbGkgZG9zeWFsYXIgZGXEn2nFn3RpcmlsZGkuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkzMSBhZGQtcGF0Y2guYzoxNjczIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjaGFuZ2VzLlxuIgorbXNnc3RyICJEZcSfacWfaWtsaWsgeW9rLlxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzc2Cittc2dpZCAiUGF0Y2ggdXBkYXRlIgorbXNnc3RyICJZYW1hIGfDvG5jZWxsZW1lc2kiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk3NCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NTQKK21zZ2lkICJSZXZpZXcgZGlmZiIKK21zZ3N0ciAiZGlmZidpIGfDtnpkZW4gZ2XDp2lyIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDAyCittc2dpZCAic2hvdyBwYXRocyB3aXRoIGNoYW5nZXMiCittc2dzdHIgImRlxJ9pxZ90aXJpbG1pxZ8geW9sbGFyxLEgZ8O2c3RlciIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNAorbXNnaWQgImFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAiaGF6xLFybGFuYW4gZGXEn2nFn2lrbGlrbGVyZSDDp2FsxLHFn21hIGHEn2FjxLEgZHVydW11bnUgZWtsZSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNgorbXNnaWQgInJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uIgorbXNnc3RyICJoYXrEsXJsYW5hbiBkZcSfacWfaWtsaWtsZXJpIEhFQUQgc8O8csO8bcO8bmUgZ2VyaSBhbCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwOAorbXNnaWQgInBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseSIKK21zZ3N0ciAicGFyw6dhbGFyxLEgc2XDpyB2ZSBzZcOnZXJlayBnw7xuY2VsbGUiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTAKK21zZ2lkICJ2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAiSEVBRCB2ZSBpbmRla3MgYXJhc8SxbmRha2kgZGlmZidpIGfDtnIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTIKK21zZ2lkICJhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiCittc2dzdHIgIml6bGVubWV5ZW4gZG9zeWFsYXLEsW4gacOnZXJpxJ9pbmkgaGF6xLFybGFuYW4gZGXEn2nFn2lrbGlrbGVyZSBla2xlIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDIwIGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjkKK21zZ2lkICJQcm9tcHQgaGVscDoiCittc2dzdHIgIsSwc3RlbSB5YXJkxLFtxLE6IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDIyCittc2dpZCAic2VsZWN0IGEgc2luZ2xlIGl0ZW0iCittc2dzdHIgInRlayBiaXIgw7ZnZSBzZcOnIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI0Cittc2dpZCAic2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXMiCittc2dzdHIgImJpciDDtmdlIGVyaW1pIHNlw6ciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMjYKK21zZ2lkICJzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzIgorbXNnc3RyICJiaXJkZW4gw6dvayBlcmltIHNlw6ciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMjggYWRkLWludGVyYWN0aXZlLmM6MTA3MworbXNnaWQgInNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXgiCittc2dzdHIgImJlbnplcnNpeiDDtm5la2UgZGF5YW5hcmFrIMO2Z2Ugc2XDpyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAzMAorbXNnaWQgInVuc2VsZWN0IHNwZWNpZmllZCBpdGVtcyIKK21zZ3N0ciAiYmVsaXJ0aWxlbiDDtmdlbGVyaW4gc2XDp2ltaW5pIGthbGTEsXIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMzIKK21zZ2lkICJjaG9vc2UgYWxsIGl0ZW1zIgorbXNnc3RyICJ0w7xtIMO2Z2VsZXJpIHNlw6ciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMzQKK21zZ2lkICIoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIihib8WfKSBzZcOnaW1pIGJpdGlyIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDcxCittc2dpZCAic2VsZWN0IGEgbnVtYmVyZWQgaXRlbSIKK21zZ3N0ciAibnVtYXJhbGFuZMSxcsSxbG3EscWfIGJpciDDtmdlIHNlw6ciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNzUKK21zZ2lkICIoZW1wdHkpIHNlbGVjdCBub3RoaW5nIgorbXNnc3RyICIoYm/FnykgaGnDp2JpciDFn2V5IHNlw6dtZSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA4MyBidWlsdGluL2NsZWFuLmM6ODIyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg1MQorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiBLb211dGxhciAqKioiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwODQgYnVpbHRpbi9jbGVhbi5jOjgyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NDgKK21zZ2lkICJXaGF0IG5vdyIKK21zZ3N0ciAixZ5pbWRpIG5lIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAic3RhZ2VkIgorbXNnc3RyICJoYXrEsXJsYW5txLHFnyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTEzNiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInVuc3RhZ2VkIgorbXNnc3RyICJoYXrEsXJsYW5tYW3EscWfIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGFwcGx5LmM6NDk2NyBhcHBseS5jOjQ5NzAgYnVpbHRpbi9hbS5jOjIyNTEKKyM6IGJ1aWx0aW4vYW0uYzoyMjU0IGJ1aWx0aW4vY2xvbmUuYzoxMjMgYnVpbHRpbi9mZXRjaC5jOjE0NAorIzogYnVpbHRpbi9tZXJnZS5jOjI3NCBidWlsdGluL3B1bGwuYzoxODkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTcKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTAyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA1CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE0OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInBhdGgiCittc2dzdHIgInlvbCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTE0MworbXNnaWQgImNvdWxkIG5vdCByZWZyZXNoIGluZGV4IgorbXNnc3RyICJpbmRla3MgeWVuaWxlbmVtZWRpIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTU3IGJ1aWx0aW4vY2xlYW4uYzo3ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJ5ZS5cbiIKK21zZ3N0ciAiSG/Fn8OnYSBrYWwuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjMzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIktpcCBkZcSfacWfaW1pIGhhesSxcmxhbnPEsW4gbcSxIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzozNCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjkKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJTaWxtZSBoYXrEsXJsYW5zxLFuIG3EsSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMwCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkJ1IHBhcsOnYSBoYXrEsXJsYW5zxLFuIG3EsSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MzcKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisic3RhZ2luZy4iCittc2dzdHIgIiIKKyJFxJ9lciB5YW1hIHNvcnVuc3V6Y2EgdXlndWxhbsSxcnNhIGTDvHplbmxlbmVuIHBhcsOnYSBkZXJoYWwgaGF6xLFybGFtYSBpw6dpbiAiCisiaW1sZW5lY2VrdGlyLiIKKworIzogYWRkLXBhdGNoLmM6NDAKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkgLSBidSBwYXLDp2F5xLEgaGF6xLFybGFcbiIKKyJuIC0gYnUgcGFyw6dhecSxIGhhesSxcmxhbWFcbiIKKyJxIC0gw6fEsWs7IGJ1IHBhcsOnYXnEsSB2ZXlhIGthbGFubGFyZGFuIGhlcmhhbmdpIGJpcmluaSBoYXrEsXJsYW1hXG4iCisiYSAtIGJ1IHBhcsOnYXnEsSB2ZSBzb25yYWtpIHTDvG0gcGFyw6dhbGFyxLEgaGF6xLFybGFcbiIKKyJkIC0gYnUgcGFyw6dhecSxIHZleWEgc29ucmFraSBwYXLDp2FsYXJkYW4gaGVyaGFuZ2kgYmlyaW5pIGhhesSxcmxhbWFcbiIKKworIzogYWRkLXBhdGNoLmM6NTQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMzCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiS2lwIGRlxJ9pxZ9pbWkgenVsYWxhbnPEsW4gbcSxIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzo1NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzQKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJTaWxtZSB6dWxhbGFuc8SxbiBtxLEgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjU2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJCdSBwYXLDp2EgenVsYWxhbnPEsW4gbcSxIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzo1OAorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJzdGFzaGluZy4iCittc2dzdHIgIiIKKyJFxJ9lciB5YW1hIHNvcnVuc3V6Y2EgdXlndWxhbsSxcnNhIGTDvHplbmxlbmVuIHBhcsOnYSBkZXJoYWwgenVsYWxhbWEgacOnaW4gIgorImltbGVuZWNla3Rpci4iCisKKyM6IGFkZC1wYXRjaC5jOjYxCittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gYnUgcGFyw6dhecSxIHp1bGFsYVxuIgorIm4gLSBidSBwYXLDp2F5xLEgenVsYWxhbWFcbiIKKyJxIC0gw6fEsWs7IGJ1IHBhcsOnYXnEsSB2ZXlhIGthbGFubGFyZGFuIGhlcmhhbmdpIGJpcmluaSB6dWxhbGFtYVxuIgorImEgLSBidSBwYXLDp2F5xLEgdmUgc29ucmFraSB0w7xtIHBhcsOnYWxhcsSxIHp1bGFsYVxuIgorImQgLSBidSBwYXLDp2F5xLEgdmV5YSBzb25yYWtpIHBhcsOnYWxhcmRhbiBoZXJoYW5naSBiaXJpbmkgenVsYWxhbWFcbiIKKworIzogYWRkLXBhdGNoLmM6NzcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJLaXAgZGXEn2nFn2ltaSBoYXrEsXJsxLFrdGFuIMOnxLFrYXLEsWxzxLFuIG3EsSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NzggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM5CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJTaWxtZSBoYXrEsXJsxLFrdGFuIMOnxLFrYXLEsWxzxLFuIG3EsSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NzkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQwCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQnUgcGFyw6dhIGhhesSxcmzEsWt0YW4gw6fEsWthcsSxbHPEsW4gbcSxIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzo4MQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJ1bnN0YWdpbmcuIgorbXNnc3RyICIiCisiRcSfZXIgeWFtYSBzb3J1bnN1emNhIHV5Z3VsYW7EsXJzYSwgZMO8emVubGVuZW4gcGFyw6dhIGRlcmhhbCBoYXrEsXJsxLFrdGFuICIKKyLDp8Sxa2FyxLFtIGnDp2luIGltbGVuZWNla3Rpci4iCisKKyM6IGFkZC1wYXRjaC5jOjg0Cittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIGJ1IHBhcsOnYXnEsSBoYXrEsXJsxLFrdGFuIMOnxLFrYXJcbiIKKyJuIC0gYnUgcGFyw6dhecSxIGhhesSxcmzEsWt0YW4gw6fEsWthcm1hXG4iCisicSAtIMOnxLFrOyBidSBwYXLDp2F5xLEgdmV5YSBrYWxhbmxhcmRhbiBoZXJoYW5naSBiaXJpbmkgaGF6xLFybMSxa3RhbiDDp8Sxa2FybWFcbiIKKyJhIC0gYnUgcGFyw6dhecSxIHZlIHNvbnJha2kgdMO8bSBwYXLDp2FsYXLEsSBoYXrEsXJsxLFrdGFuIMOnxLFrYXJcbiIKKyJkIC0gYnUgcGFyw6dhecSxIHZleWEgc29ucmFraSBwYXLDp2FsYXJkYW4gaGVyaGFuZ2kgYmlyaW5pIGhhesSxcmzEsWt0YW4gw6fEsWthcm1hXG4iCisKKyM6IGFkZC1wYXRjaC5jOjk5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MworIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIktpcCBkZcSfacWfaW1pIGluZGVrc2UgdXlndWxhbnPEsW4gbcSxIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMDAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiU2lsbWUgaW5kZWtzZSB1eWd1bGFuc8SxbiBtxLEgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQnUgcGFyw6dhIGluZGVrc2UgdXlndWxhbnPEsW4gbcSxIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMDMgYWRkLXBhdGNoLmM6MTY4IGFkZC1wYXRjaC5jOjIxMQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJhcHBseWluZy4iCittc2dzdHIgIiIKKyJFxJ9lciB5YW1hIHNvcnVuc3V6Y2EgdXlndWxhbsSxcnNhIGTDvHplbmxlbmVuIHBhcsOnYSBkZXJoYWwgdXlndWxhbWEgacOnaW4gIgorImltbGVuZWNla3Rpci4iCisKKyM6IGFkZC1wYXRjaC5jOjEwNgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIGJ1IHBhcsOnYXnEsSBpbmRla3NlIHV5Z3VsYVxuIgorIm4gLSBidSBwYXLDp2F5xLEgaW5kZWtzZSB1eWd1bGFtYVxuIgorInEgLSDDp8SxazsgYnUgcGFyw6dhecSxIHZleWEga2FsYW5sYXJkYW4gaGVyaGFuZ2kgYmlyaW5pIHV5Z3VsYW1hXG4iCisiYSAtIGJ1IHBhcsOnYXnEsSB2ZSBzb25yYWtpIHTDvG0gcGFyw6dhbGFyxLEgdXlndWxhXG4iCisiZCAtIGJ1IHBhcsOnYXnEsSB2ZXlhIHNvbnJha2kgcGFyw6dhbGFyZGFuIGhlcmhhbmdpIGJpcmluaSB1eWd1bGFtYVxuIgorCisjOiBhZGQtcGF0Y2guYzoxMjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiS2lwIGRlxJ9pxZ9pbWkgw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhbiBhdMSxbHPEsW4gbcSxIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjQKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiU2lsbWUgw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhbiBhdMSxbHPEsW4gbcSxIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUwCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkJ1IHBhcsOnYSDDp2FsxLHFn21hIGHEn2FjxLFuZGFuIGF0xLFsc8SxbiBtxLEgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyNSBhZGQtcGF0Y2guYzoxNDcgYWRkLXBhdGNoLmM6MTkwCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorImRpc2NhcmRpbmcuIgorbXNnc3RyICIiCisiRcSfZXIgeWFtYSBzb3J1bnN1emNhIHV5Z3VsYW7EsXJzYSBkw7x6ZW5sZW5lbiBwYXLDp2EgZGVyaGFsIMSxc2thcnRheWEgw6fEsWthcsSxbSAiCisiacOnaW4gaW1sZW5lY2VrdGlyLiIKKworIzogYWRkLXBhdGNoLmM6MTI4IGFkZC1wYXRjaC5jOjE5MworbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gYnUgcGFyw6dhecSxIMOnYWzEscWfbWEgYcSfYWPEsW5kYW4gYXRcbiIKKyJuIC0gYnUgcGFyw6dhecSxIMOnYWzEscWfbWEgYcSfYWPEsW5kYW4gYXRtYVxuIgorInEgLSDDp8SxazsgYnUgcGFyw6dhecSxIHZleWEga2FsYW5sYXJkYW4gaGVyaGFuZ2kgYmlyaW5pIGF0bWFcbiIKKyJhIC0gYnUgcGFyw6dhecSxIHZlIHNvbnJha2kgdMO8bSBwYXLDp2FsYXLEsSBhdFxuIgorImQgLSBidSBwYXLDp2F5xLEgdmV5YSBzb25yYWtpIHBhcsOnYWxhcmRhbiBoZXJoYW5naSBiaXJpbmkgYXRtYVxuIgorCisjOiBhZGQtcGF0Y2guYzoxNDMgYWRkLXBhdGNoLmM6MTg2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1MworIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIktpcCBkZcSfacWfaW1pIGluZGVrc3RlbiB2ZSDDp2FsxLHFn21hIGHEn2FjxLFuZGFuIGF0xLFsc8SxbiBtxLEgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE0NCBhZGQtcGF0Y2guYzoxODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJTaWxtZSBpbmRla3N0ZW4gdmUgw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhbiBhdMSxbHPEsW4gbcSxIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNDUgYWRkLXBhdGNoLmM6MTg4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkJ1IHBhcsOnYSBpbmRla3N0ZW4gdmUgw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhbiBhdMSxbHPEsW4gbcSxIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNTAKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gYnUgcGFyw6dhecSxIMOnYWzEscWfbWEgYcSfYWPEsW5kYW4gdmUgaW5kZWtzdGVuIGF0XG4iCisibiAtIGJ1IHBhcsOnYXnEsSDDp2FsxLHFn21hIGHEn2FjxLFuZGFuIHZlIGluZGVrc3RlbiBhdG1hXG4iCisicSAtIMOnxLFrOyBidSBwYXLDp2F5xLEgdmV5YSBrYWxhbmxhcmRhbiBoZXJoYW5naSBiaXJpbmkgYXRtYVxuIgorImEgLSBidSBwYXLDp2F5xLEgdmUgc29ucmFraSB0w7xtIHBhcsOnYWxhcsSxIGF0XG4iCisiZCAtIGJ1IHBhcsOnYXnEsSB2ZXlhIHNvbnJha2kgcGFyw6dhbGFyZGFuIGhlcmhhbmdpIGJpcmluaSBhdG1hXG4iCisKKyM6IGFkZC1wYXRjaC5jOjE2NCBhZGQtcGF0Y2guYzoyMDcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyJLaXAgZGXEn2nFn2ltaSBpbmRla3NlIHZlIMOnYWzEscWfbWEgYcSfYWPEsW5hIHV5Z3VsYW5zxLFuIG3EsSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTY1IGFkZC1wYXRjaC5jOjIwOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTkKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiU2lsbWUgaW5kZWtzZSB2ZSDDp2FsxLHFn21hIGHEn2FjxLFuYSB1eWd1bGFuc8SxbiBtxLEgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE2NiBhZGQtcGF0Y2guYzoyMDkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYwCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJCdSBwYXLDp2EgaW5kZWtzZSB2ZSDDp2FsxLHFn21hIGHEn2FjxLFuYSB1eWd1bGFuc8SxbiBtxLEgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE3MQorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gYnUgcGFyw6dhecSxIGluZGVrc2UgdmUgw6dhbMSxxZ9tYSBhxJ9hY8SxbmEgdXlndWxhXG4iCisibiAtIGJ1IHBhcsOnYXnEsSBpbmRla3NlIHZlIMOnYWzEscWfbWEgYcSfYWPEsW5hIHV5Z3VsYW1hXG4iCisicSAtIMOnxLFrOyBidSBwYXLDp2F5xLEgdmV5YSBrYWxhbmxhcmRhbiBoZXJoYW5naSBiaXJpbmkgdXlndWxhbWFcbiIKKyJhIC0gYnUgcGFyw6dhecSxIHZlIHNvbnJha2kgdMO8bSBwYXLDp2FsYXLEsSB1eWd1bGFcbiIKKyJkIC0gYnUgcGFyw6dhecSxIHZleWEgc29ucmFraSBwYXLDp2FsYXJkYW4gaGVyaGFuZ2kgYmlyaW5pIHV5Z3VsYW1hXG4iCisKKyM6IGFkZC1wYXRjaC5jOjIxNAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIGJ1IHBhcsOnYXnEsSDDp2FsxLHFn21hIGHEn2FjxLFuYSB1eWd1bGFcbiIKKyJuIC0gYnUgcGFyw6dhecSxIMOnYWzEscWfbWEgYcSfYWPEsW5hIHV5Z3VsYW1hXG4iCisicSAtIMOnxLFrOyBidSBwYXLDp2F5xLEgdmV5YSBrYWxhbmxhcmRhbiBoZXJoYW5naSBiaXJpbmkgdXlndWxhbWFcbiIKKyJhIC0gYnUgcGFyw6dhecSxIHZlIHNvbnJha2kgdMO8bSBwYXLDp2FsYXLEsSB1eWd1bGFcbiIKKyJkIC0gYnUgcGFyw6dhecSxIHZleWEgc29ucmFraSBwYXLDp2FsYXJkYW4gaGVyaGFuZ2kgYmlyaW5pIHV5Z3VsYW1hXG4iCisKKyM6IGFkZC1wYXRjaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICJwYXLDp2Egw7xzdGJpbGdpc2kgJyUuKnMnIGF5csSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiBhZGQtcGF0Y2guYzozMzcgYWRkLXBhdGNoLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAicmVua2xlbmRpcmlsbWnFnyBwYXLDp2Egw7xzdGJpbGdpc2kgJyUuKnMnIGF5csSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiBhZGQtcGF0Y2guYzozOTUKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZGlmZiIKK21zZ3N0ciAiZGlmZiBheXLEscWfdMSxcsSxbGFtYWTEsSIKKworIzogYWRkLXBhdGNoLmM6NDE0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAicmVua2xlbmRpcmlsbWnFnyBkaWZmIGF5csSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiBhZGQtcGF0Y2guYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnJXMnIgorbXNnc3RyICInJXMnIMOnYWzEscWfdMSxcsSxbGFtYWTEsSIKKworIzogYWRkLXBhdGNoLmM6NTg3Cittc2dpZCAibWlzbWF0Y2hlZCBvdXRwdXQgZnJvbSBpbnRlcmFjdGl2ZS5kaWZmRmlsdGVyIgorbXNnc3RyICJpbnRlcmFjdGl2ZS5kaWZmRmlsdGVyIMO2Z2VzaW5kZW4gZcWfbGXFn21leWVuIMOnxLFrdMSxIgorCisjOiBhZGQtcGF0Y2guYzo1ODgKK21zZ2lkICIiCisiWW91ciBmaWx0ZXIgbXVzdCBtYWludGFpbiBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2VcbiIKKyJiZXR3ZWVuIGl0cyBpbnB1dCBhbmQgb3V0cHV0IGxpbmVzLiIKK21zZ3N0ciAiIgorIlPDvHpnZWNpbml6IGtlbmRpc2luaW4gZ2lyZGkgdmUgw6fEsWt0xLEgc2F0xLFybGFyxLEgYXJhc8SxbmRhXG4iCisiYmlyZWJpciBrYXLFn8SxbMSxayBzYcSfbGFtYWzEsWTEsXIuIgorCisjOiBhZGQtcGF0Y2guYzo3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIGNvbnRleHQgbGluZSAjJWQgaW5cbiIKKyIlLipzIgorbXNnc3RyICIiCisixZ91cmFkYSBiYcSfbGFtIHNhdMSxcsSxICMlZCBiZWtsZW5peW9yZHU6XG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJodW5rcyBkbyBub3Qgb3ZlcmxhcDpcbiIKKyIlLipzXG4iCisiXHRkb2VzIG5vdCBlbmQgd2l0aDpcbiIKKyIlLipzIgorbXNnc3RyICIiCisicGFyw6dhbGFyIMO8c3Qgw7xzdGUgYmlubWl5b3I6XG4iCisiJS4qc1xuIgorIlx0xZ91bnVubGEgYml0bWl5b3I6XG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6MTA1MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTIKK21zZ2lkICJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgYSBxdWljayBndWlkZS5cbiIKK21zZ3N0ciAiRWwgaWxlIHBhcsOnYSBkw7x6ZW5sZW1lIGtpcGkgLS0gaMSxemzEsWNhIMO2xJ9yZW5tZWsgacOnaW4gYcWfYcSfxLF5YSBiYWvEsW4uXG4iCisKKyM6IGFkZC1wYXRjaC5jOjEwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlYyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKyItLS1cbiIKKyInJWMnIHNhdMSxciBrYWxkxLFybWFrIGnDp2luIG9ubGFyxLEgJyAnIHNhdMSxciB5YXDEsW4gKGJhxJ9sYW0pLlxuIgorIiclYycgc2F0xLFyIGthbGTEsXJtYWsgacOnaW4gb25sYXLEsSBzaWxpbi5cbiIKKyIlYyBrYWxkxLFyxLFsYWNhay5cbiIKKworIy4gVFJBTlNMQVRPUlM6ICdpdCcgcmVmZXJzIHRvIHRoZSBwYXRjaCBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIG1lc3NhZ2VzLgorIzogYWRkLXBhdGNoLmM6MTA3MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMjYKK21zZ2lkICIiCisiSWYgaXQgZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgeW91IHdpbGwgYmUgZ2l2ZW4gYW4gb3Bwb3J0dW5pdHkgdG9cbiIKKyJlZGl0IGFnYWluLiAgSWYgYWxsIGxpbmVzIG9mIHRoZSBodW5rIGFyZSByZW1vdmVkLCB0aGVuIHRoZSBlZGl0IGlzXG4iCisiYWJvcnRlZCBhbmQgdGhlIGh1bmsgaXMgbGVmdCB1bmNoYW5nZWQuXG4iCittc2dzdHIgIiIKKyJFxJ9lciBzb3J1bnN1emNhIHV5Z3VsYW5hbWF6c2EgeWVuaWRlbiBkw7x6ZW5sZW1lbml6IGnDp2luIGJpciBvbGFuYWtcbiIKKyJzdW51bGFjYWt0xLFyLiBQYXLDp2FuxLFuIHTDvG0gc2F0xLFybGFyxLEga2FsZMSxcsSxbMSxcnNhIGTDvHplbmxlbWUgZHVyZHVydWx1clxuIgorInZlIHBhcsOnYSBkZcSfacWfdGlyaWxtZWRlbiBixLFyYWvEsWzEsXIuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjExMDMKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIiCittc2dzdHIgInBhcsOnYSDDvHN0YmlsZ2lzaSBheXLEscWfdMSxcsSxbGFtYWTEsSIKKworIzogYWRkLXBhdGNoLmM6MTE0OAorbXNnaWQgIidnaXQgYXBwbHkgLS1jYWNoZWQnIGZhaWxlZCIKK21zZ3N0ciAiJ2dpdCBhcHBseSAtLWNhY2hlZCcgYmHFn2FyxLFzxLF6IG9sZHUiCisKKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjLgorIy4gVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKyMuIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgdGhhdCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjOiBhZGQtcGF0Y2guYzoxMjE4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIzOQorbXNnaWQgIiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/ICIKK21zZ3N0ciAiIgorIkTDvHplbmxlZGnEn2luaXogcGFyw6dhIHV5Z3VsYW5hbcSxeW9yLiBZZW5pZGVuIGTDvHplbmxlbnNpbiBtaSAoXCJuIChoYXnEsXIpXCIgIgorImRlbWVrIGlwdGFsIGVkZXIhKSBbeS9uXT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjYxCittc2dpZCAiVGhlIHNlbGVjdGVkIGh1bmtzIGRvIG5vdCBhcHBseSB0byB0aGUgaW5kZXghIgorbXNnc3RyICJTZcOnaWxpIHBhcsOnYWxhciBpbmRla3NlIHV5Z3VsYW5hbcSxeW9yISIKKworIzogYWRkLXBhdGNoLmM6MTI2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDMKK21zZ2lkICJBcHBseSB0aGVtIHRvIHRoZSB3b3JrdHJlZSBhbnl3YXk/ICIKK21zZ3N0ciAiw4dhbMSxxZ9tYSBhxJ9hY8SxbmEgeWluZSBkZSB1eWd1bGFuc8SxbiBtxLE/ICIKKworIzogYWRkLXBhdGNoLmM6MTI2OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDYKK21zZ2lkICJOb3RoaW5nIHdhcyBhcHBsaWVkLlxuIgorbXNnc3RyICJIacOnYmlyIMWfZXkgdXlndWxhbm1hZMSxLlxuIgorCisjOiBhZGQtcGF0Y2guYzoxMzI2Cittc2dpZCAiIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiaiAtIGJ1IHBhcsOnYSBpw6dpbiBzb25yYSBrYXJhciB2ZXIsIGJpciBzb25yYWtpIGthcmFyIHZlcmlsbWVtacWfIHBhcsOnYXnEsSBnw7ZyXG4iCisiSiAtIGJ1IHBhcsOnYSBpw6dpbiBzb25yYSBrYXJhciB2ZXIsIGJpciBzb25yYWtpIHBhcsOnYXnEsSBnw7ZyXG4iCisiayAtIGJ1IHBhcsOnYSBpw6dpbiBzb25yYSBrYXJhciB2ZXIsIGJpciDDtm5jZWtpIGthcmFyIHZlcmlsbWVtacWfIHBhcsOnYXnEsSBnw7ZyXG4iCisiSyAtIGJ1IHBhcsOnYSBpw6dpbiBzb25yYSBrYXJhciB2ZXIsIGJpciDDtm5jZWtpIHBhcsOnYXnEsSBnw7ZyXG4iCisiZyAtIGdpZGlsZWNlayBiaXIgcGFyw6dhIHNlw6dcbiIKKyIvIC0gdmVyaWxlbiBkw7x6ZW5saSBpZmFkZSBpbGUgZcWfbGXFn2VuIGJpciBwYXLDp2EgYXJhXG4iCisicyAtIGdlw6dlcmxpIHBhcsOnYXnEsSBkYWhhIHVmYWsgcGFyw6dhbGFyYSBiw7ZsXG4iCisiZSAtIGdlw6dlcmxpIHBhcsOnYXnEsSBlbCBpbGUgZMO8emVubGVcbiIKKyI/IC0geWFyZMSxbcSxIHlhemTEsXJcbiIKKworIzogYWRkLXBhdGNoLmM6MTQ0NyBhZGQtcGF0Y2guYzoxNDU3Cittc2dpZCAiTm8gcHJldmlvdXMgaHVuayIKK21zZ3N0ciAiw5ZuY2VzaW5kZSBwYXLDp2EgeW9rIgorCisjOiBhZGQtcGF0Y2guYzoxNDUyIGFkZC1wYXRjaC5jOjE0NjIKK21zZ2lkICJObyBuZXh0IGh1bmsiCittc2dzdHIgIlNvbnJhc8SxbmRhIHBhcsOnYSB5b2siCisKKyM6IGFkZC1wYXRjaC5jOjE0NjgKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvIgorbXNnc3RyICJHaWRpbGVjZWsgYmHFn2thIGJpciBwYXLDp2EgeW9rIgorCisjOiBhZGQtcGF0Y2guYzoxNDc5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3NworbXNnaWQgImdvIHRvIHdoaWNoIGh1bmsgKDxyZXQ+IHRvIHNlZSBtb3JlKT8gIgorbXNnc3RyICJoYW5naSBwYXLDp2F5YSBnaWRpbHNpbiAoZGFoYSBmYXpsYSBnw7ZybWVrIGnDp2luIDxyZXQ+KT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNDgwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3OQorbXNnaWQgImdvIHRvIHdoaWNoIGh1bms/ICIKK21zZ3N0ciAiaGFuZ2kgcGFyw6dheWEgZ2lkaWxzaW4/ICIKKworIzogYWRkLXBhdGNoLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJyIKK21zZ3N0ciAiR2XDp2Vyc2l6IHNhecSxOiAnJXMnIgorCisjOiBhZGQtcGF0Y2guYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLiIKK21zZ3N0clswXSAiw5x6Z8O8bsO8bSwgeWFsbsSxemNhICVkIHBhcsOnYSBrdWxsYW7EsWxhYmlsaXIuIgorbXNnc3RyWzFdICLDnHpnw7xuw7xtLCB5YWxuxLF6Y2EgJWQgcGFyw6dhIGt1bGxhbsSxbGFiaWxpci4iCisKKyM6IGFkZC1wYXRjaC5jOjE1MDUKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBzZWFyY2giCittc2dzdHIgIkFyYW5hY2FrIGJhxZ9rYSBwYXLDp2EgeW9rIgorCisjOiBhZGQtcGF0Y2guYzoxNTExIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYyMworbXNnaWQgInNlYXJjaCBmb3IgcmVnZXg/ICIKK21zZ3N0ciAiZMO8emVubGkgaWZhZGUgYXJhbnPEsW4gbcSxPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzIgorbXNnc3RyICJIYXRhbMSxIG9sdcWfdHVydWxtdcWfIGTDvHplbmxpIGlmYWRlICVzOiAlcyIKKworIzogYWRkLXBhdGNoLmM6MTU0MworbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybiIKK21zZ3N0ciAiVmVyaWxlbiBkaXpnaSBpbGUgZcWfbGXFn2VuIGJpciBwYXLDp2EgeW9rIgorCisjOiBhZGQtcGF0Y2guYzoxNTUwCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmsiCittc2dzdHIgIsOcemfDvG7DvG0sIGJ1IHBhcsOnYSBiw7Zsw7xuZW1peW9yIgorCisjOiBhZGQtcGF0Y2guYzoxNTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVua3MuIgorbXNnc3RyICIlZCBwYXLDp2F5YSBiw7Zsw7xuZMO8LiIKKworIzogYWRkLXBhdGNoLmM6MTU1OAorbXNnaWQgIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmsiCittc2dzdHIgIsOcemfDvG7DvG0sIGJ1IHBhcsOnYSBkw7x6ZW5sZW5lbWl5b3IiCisKKyM6IGFkZC1wYXRjaC5jOjE2MDkKK21zZ2lkICInZ2l0IGFwcGx5JyBmYWlsZWQiCittc2dzdHIgIidnaXQgYXBwbHknIGJhxZ9hcsSxc8SxeiBvbGR1IgorCisjOiBhZHZpY2UuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNoaW50OiAlLipzJXNcbiIKK21zZ3N0ciAiJXNpcHVjdTogJS4qcyVzXG4iCisKKyM6IGFkdmljZS5jOjE2OAorbXNnaWQgIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiU2XDpy1hbCB5YXDEsWxhbcSxeW9yIMOnw7xua8O8IGJpcmxlxZ90aXJpbG1lbWnFnyBkb3N5YWxhcsSxbsSxeiB2YXIuIgorCisjOiBhZHZpY2UuYzoxNzAKK21zZ2lkICJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiR8O2bmRlcmkgeWFwxLFsYW3EsXlvciDDp8O8bmvDvCBiaXJsZcWfdGlyaWxtZW1pxZ8gZG9zeWFsYXLEsW7EsXogdmFyLiIKKworIzogYWR2aWNlLmM6MTcyCittc2dpZCAiTWVyZ2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIkJpcmxlxZ90aXJtZSB5YXDEsWxhbcSxeW9yIMOnw7xua8O8IGJpcmxlxZ90aXJpbG1lbWnFnyBkb3N5YWxhcsSxbsSxeiB2YXIuIgorCisjOiBhZHZpY2UuYzoxNzQKK21zZ2lkICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiw4dla21lIHlhcMSxbGFtxLF5b3Igw6fDvG5rw7wgYmlybGXFn3RpcmlsbWVtacWfIGRvc3lhbGFyxLFuxLF6IHZhci4iCisKKyM6IGFkdmljZS5jOjE3NgorbXNnaWQgIlJldmVydGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIkdlcml5ZSBhbG1hIHlhcMSxbGFtxLF5b3Igw6fDvG5rw7wgYmlybGXFn3RpcmlsbWVtacWfIGRvc3lhbGFyxLFuxLF6IHZhci4iCisKKyM6IGFkdmljZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJJdCBpcyBub3QgcG9zc2libGUgdG8gJXMgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiVzIHlhcMSxbGFtxLF5b3Igw6fDvG5rw7wgYmlybGXFn3RpcmlsbWVtacWfIGRvc3lhbGFyxLFuxLF6IHZhci4iCisKKyM6IGFkdmljZS5jOjE4NgorbXNnaWQgIiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCittc2dzdHIgIiIKKyJPbmxhcsSxIMOnYWzEscWfbWEgYcSfYWPEsW5kYSBvbmFyxLFuLCBhcmTEsW5kYW4gaGF6xLFybMSxxJ/EsSBiaXRpcm1layBpw6dpbiB1eWd1blxuIgorImfDtnLDvGxkw7zEn8O8IGJpw6dpbWRlICdnaXQgYWRkL3JtIDxkb3N5YT4nIHlhcHTEsWt0YW4gc29ucmEgYmlyIGfDtm5kZXJpIHlhcMSxbi4iCisKKyM6IGFkdmljZS5jOjE5NAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiBhbiB1bnJlc29sdmVkIGNvbmZsaWN0LiIKK21zZ3N0ciAiw4fDtnrDvG1lIGthdnXFn3R1cnVsbWFtxLHFnyBiaXIgw6dha8SxxZ9tYWRhbiBkb2xhecSxIMOnxLFrxLFsxLF5b3IuIgorCisjOiBhZHZpY2UuYzoxOTkgYnVpbHRpbi9tZXJnZS5jOjEzMzUKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIkJpcmxlxZ90aXJtZW5pemkgc29udcOnbGFuZMSxcm1hZMSxbsSxeiAoTUVSR0VfSEVBRCBtZXZjdXQpLiIKKworIzogYWR2aWNlLmM6MjAxCittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSBtZXJnaW5nLiIKK21zZ3N0ciAiQmlybGXFn3Rpcm1lIMO2bmNlc2luZGUgZGXEn2nFn2lrbGlrbGVyaW5pemkgZ8O2bmRlcmluLiIKKworIzogYWR2aWNlLmM6MjAyCittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIHVuZmluaXNoZWQgbWVyZ2UuIgorbXNnc3RyICJUYW1hbWxhbm1hbcSxxZ8gYmlybGXFn3Rpcm1lZGVuIGRvbGF5xLEgw6fEsWvEsWzEsXlvci4iCisKKyM6IGFkdmljZS5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogc3dpdGNoaW5nIHRvICclcycuXG4iCisiXG4iCisiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisiY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpc1xuIgorInN0YXRlIHdpdGhvdXQgaW1wYWN0aW5nIGFueSBicmFuY2hlcyBieSBzd2l0Y2hpbmcgYmFjayB0byBhIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKyJkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYyB3aXRoIHRoZSBzd2l0Y2ggY29tbWFuZC4gRXhhbXBsZTpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPG5ldy1icmFuY2gtbmFtZT5cbiIKKyJcbiIKKyJPciB1bmRvIHRoaXMgb3BlcmF0aW9uIHdpdGg6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyJUdXJuIG9mZiB0aGlzIGFkdmljZSBieSBzZXR0aW5nIGNvbmZpZyB2YXJpYWJsZSBhZHZpY2UuZGV0YWNoZWRIZWFkIHRvICIKKyJmYWxzZVxuIgorIlxuIgorbXNnc3RyICIiCisiTm90OiDFnnVyYXlhIGdlw6dpbGl5b3I6ICclcycuXG4iCisiXG4iCisixZ51IGFuZGEgJ2F5csSxayBIRUFEJyBkdXJ1bXVuZGFzxLFuxLF6LiBPcmF5YSBidXJheWEgYmFrYWJpbGlyLCBkZW5leXNlbFxuIgorImRlxJ9pxZ9pa2xpa2xlciB5YXDEsXAgZ8O2bmRlcmViaWxpciB2ZXlhIGJhxZ9rYSBiaXIgZGFsYSBnZcOnZXJlayB5YXB0xLHEn8SxbsSxelxuIgorInTDvG0gZ8O2bmRlcmlsZXJpIGJhxZ9rYSBoacOnYmlyIGRhbGEgZXRraSBldG1lZGVuIGdlcmkgYWxhYmlsaXJzaW5pei5cbiIKKyJcbiIKKyJZYXB0xLHEn8SxbsSxeiBnw7ZuZGVyaWxlcmkgdHV0bWFrIGnDp2luIHllbmkgYmlyIGRhbCBvbHXFn3R1cm1hayBpc3RlcnNlbml6IGJ1bnVcbiIKKyLFn2ltZGkgdmV5YSBkYWhhIHNvbnJhIHN3aXRjaCBrb211dHVuYSAtYyBla2xleWVyZWsgeWFwYWJpbGlyc2luaXouIMOWcm5lazpcbiIKKyJcbiIKKyJcdGdpdCBzd2l0Y2ggLWMgPHllbmktZGFsLWFkxLE+XG4iCisiXG4iCisiQnUgacWfbGVtaSDFn3VudW5sYSBnZXJpIGFsYWJpbGlyc2luaXo6XG4iCisiXG4iCisiXHRnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyJCdSDDtsSfw7xkw7wgYWR2aWNlLmRldGFjaGVkSGVhZCB5YXDEsWxhbmTEsXJtYSBkZcSfacWfa2VuaW5pIGZhbHNlIHlhcGFyYWtcbiIKKyJrYXBhdGFiaWxpcnNpbml6LlxuIgorIlxuIgorCisjOiBhbGlhcy5jOjUwCittc2dpZCAiY21kbGluZSBlbmRzIHdpdGggXFwiCittc2dzdHIgImtvbXV0IHNhdMSxcsSxIFxcIGlsZSBiaXRpeW9yIgorCisjOiBhbGlhcy5jOjUxCittc2dpZCAidW5jbG9zZWQgcXVvdGUiCittc2dzdHIgImthcGF0xLFsbWFtxLHFnyB0xLFybmFrIgorCisjOiBhcHBseS5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJ0YW7EsW1sYW5hbWF5YW4gYm/Fn2x1ayBzZcOnZW5lxJ9pICclcyciCisKKyM6IGFwcGx5LmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJ0YW7EsW1sYW5hbWF5YW4gYm/Fn2x1ayB5b2sgc2F5bWEgc2XDp2VuZcSfaSAnJXMnIgorCisjOiBhcHBseS5jOjEzNQorbXNnaWQgIi0tcmVqZWN0IGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICItLXJlamVjdCB2ZSAtLTN3YXkgYmlybGlrdGUga3VsbGFuxLFsYW1hei4iCisKKyM6IGFwcGx5LmM6MTM3Cittc2dpZCAiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tY2FjaGVkIHZlIC0tM3dheSBiaXJsaWt0ZSBrdWxsYW7EsWxhbWF6LiIKKworIzogYXBwbHkuYzoxNDAKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0zd2F5IGJpciBkZXBvIGTEscWfxLFuZGEiCisKKyM6IGFwcGx5LmM6MTUxCittc2dpZCAiLS1pbmRleCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1pbmRleCBiaXIgZGVwbyBkxLHFn8SxbmRhIgorCisjOiBhcHBseS5jOjE1NAorbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWNhY2hlZCBiaXIgZGVwbyBkxLHFn8SxbmRhIgorCisjOiBhcHBseS5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICJaYW1hbiBkYW1nYXPEsSBkw7x6ZW5saSBpZmFkZXNpICVzIGhhesSxcmxhbmFtxLF5b3IiCisKKyM6IGFwcGx5LmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIKK21zZ3N0ciAiZMO8emVubGkgaWZhZGUgZ2lyZGkgacOnaW4gJWQgZMO2bmTDvHJkw7w6ICVzIgorCisjOiBhcHBseS5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJ5YW1hbsSxbiAlZC4gc2F0xLFyxLFuZGEgZG9zeWEgYWTEsSBidWx1bmFtxLF5b3IgIgorCisjOiBhcHBseS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IGhhdGFsxLEgZ2l0LWRpZmYgLSAvZGV2L251bGwgYmVrbGVuaXlvcmR1LCAlcyBhbMSxbmTEsSwgc2F0xLFyICVkIgorCisjOiBhcHBseS5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBoYXRhbMSxIGdpdC1kaWZmIC0gJWQuIHNhdMSxcmRhIHR1dGFyc8SxeiB5ZW5pIGRvc3lhIGFkxLEiCisKKyM6IGFwcGx5LmM6OTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGhhdGFsxLEgZ2l0LWRpZmYgLSAlZC4gc2F0xLFyZGEgdHV0YXJzxLF6IGVza2kgZG9zeWEgYWTEsSIKKworIzogYXBwbHkuYzo5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBoYXRhbMSxIGdpdC1kaWZmIC0gJWQuIHNhdMSxcmRhIC9kZXYvbnVsbCBiZWtsZW5peW9yZHUiCisKKyM6IGFwcGx5LmM6OTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBvbiBsaW5lICVkOiAlcyIKK21zZ3N0ciAiJWQuIHNhdMSxcmRhIGdlw6dlcnNpeiBraXA6ICVzIgorCisjOiBhcHBseS5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb25zaXN0ZW50IGhlYWRlciBsaW5lcyAlZCBhbmQgJWQiCittc2dzdHIgInR1dGFyc8SxeiDDvHN0YmlsZ2kgc2F0xLFybGFyxLEgJWQgdmUgJWQiCisKKyM6IGFwcGx5LmM6MTM3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCisiJWQgw7ZuY8O8IHlvbCBhZMSxIGJpbGXFn2VuaSBrYWxkxLFyxLFsxLFya2VuIGdpdCBkaWZmIMO8c3RiaWxnaXNpIGRvc3lhIGFkxLEgIgorImJpbGdpc2luZSBpeWUgZGXEn2lsICglZC4gc2F0xLFyKSIKK21zZ3N0clsxXSAiIgorIiVkIMO2bmPDvCB5b2wgYWTEsSBiaWxlxZ9lbmkga2FsZMSxcsSxbMSxcmtlbiBnaXQgZGlmZiDDvHN0YmlsZ2lzaSBkb3N5YSBhZMSxICIKKyJiaWxnaXNpbmUgaXllIGRlxJ9pbCAoJWQuIHNhdMSxcikiCisKKyM6IGFwcGx5LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gKGxpbmUgJWQpIgorbXNnc3RyICJnaXQgZGlmZiDDvHN0YmlsZ2lzaSBkb3N5YSBhZMSxIGJpbGdpc2luZSBpeWUgZGXEn2lsICglZC4gc2F0xLFyKSIKKworIzogYXBwbHkuYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAicmVjb3VudDogYmVrbGVubWVkaWsgc2F0xLFyOiAlLipzIgorCisjOiBhcHBseS5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiJWQuIHNhdMSxcmRhIMO8c3RiaWxnaXNpIG9sbWF5YW4geWFtYSBwYXLDp2FjxLHEn8SxOiAlLipzIgorCisjOiBhcHBseS5jOjE3NTMKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAieWVuaSBkb3N5YSBlc2tpIGnDp2VyacSfZSBnZXJla3NpbmltIGR1eXV5b3IiCisKKyM6IGFwcGx5LmM6MTc1NQorbXNnaWQgImRlbGV0ZWQgZmlsZSBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgInNpbGluZW4gZG9zeWEgacOnaW5kZSBow6Jsw6IgYmlyIMWfZXlsZXIgdmFyIgorCisjOiBhcHBseS5jOjE3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJoYXNhcmzEsSB5YW1hLCAlZC4gc2F0xLFyIgorCisjOiBhcHBseS5jOjE4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIiVzIHllbmkgZG9zeWFzxLEgZXNraSBpw6dlcmnEn2UgZ2VyZWtzaW5pbSBkdXl1eW9yIgorCisjOiBhcHBseS5jOjE4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiJXMgc2lsaW5lbiBkb3N5YXPEsW7EsW4gacOnaW5kZSBow6Jsw6IgYmlyIMWfZXlsZXIgdmFyIgorCisjOiBhcHBseS5jOjE4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiKiogdXlhcsSxOiAlcyBkb3N5YXPEsSBib8WfIGR1cnVtYSBnZWxpciBhbmNhayBzaWxpbm1leiIKKworIzogYXBwbHkuYzoxOTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgImhhc2FybMSxIGlraWxpIHlhbWEsICVkLiBzYXTEsXI6ICUuKnMiCisKKyM6IGFwcGx5LmM6MjAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgInRhbsSxbWxhbmFtYXlhbiBpa2lsaSB5YW1hLCAlZC4gc2F0xLFyIgorCisjOiBhcHBseS5jOjIxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIKK21zZ3N0ciAieWFsbsSxemNhIGFubGFtc8SxeiB2ZXJpIGnDp2VyZW4geWFtYSwgJWQuIHNhdMSxciIKKworIzogYXBwbHkuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIiVzIHNlbWJvbGlrIGJhxJ/EsSBva3VuYW3EsXlvciIKKworIzogYXBwbHkuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgIiVzIGHDp8SxbGFtxLF5b3IgdmV5YSBva3VuYW3EsXlvciIKKworIzogYXBwbHkuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAiZ2XDp2Vyc2l6IHNhdMSxciBiYcWfbGFuZ8SxY8SxOiAnJWMnIgorCisjOiBhcHBseS5jOjMwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICJQYXLDp2EgIyVkIGJhxZ9hcsSxbMSxIG9sZHUsICVkICglZCBzYXTEsXIgb2ZzZXQpLiIKK21zZ3N0clsxXSAiUGFyw6dhICMlZCBiYcWfYXLEsWzEsSBvbGR1LCAlZCAoJWQgc2F0xLFyIG9mc2V0KS4iCisKKyM6IGFwcGx5LmM6MzA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICIiCisiQmHEn2xhbSDFn3VuYSBpbmRpcmlsZGk6ICglbGQvJWxkKSAoJWQga29udW11bmRha2kgcGFyw6dhY8SxxJ/EsSB1eWd1bGFtYWsgacOnaW4pIgorCisjOiBhcHBseS5jOjMwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndoaWxlIHNlYXJjaGluZyBmb3I6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorIsWfdW51IGFyYXJrZW46XG4iCisiJS4qcyIKKworIzogYXBwbHkuYzozMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgIiclcycgacOnaW4gaWtpbGkgeWFtYSB2ZXJpc2kgZWtzaWsiCisKKyM6IGFwcGx5LmM6MzEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmV2ZXJzZS1hcHBseSBhIGJpbmFyeSBwYXRjaCB3aXRob3V0IHRoZSByZXZlcnNlIGh1bmsgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJyBwYXLDp2FzxLEgZ2VyaSBhbMSxbm1hZGFuIGJpciBpa2lsaSB5YW1hIHJldmVyc2UtYXBwbHkgeWFwxLFsYW3EsXlvciIKKworIzogYXBwbHkuYzozMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhcHBseSBiaW5hcnkgcGF0Y2ggdG8gJyVzJyB3aXRob3V0IGZ1bGwgaW5kZXggbGluZSIKK21zZ3N0ciAidGFtIGluZGVrcyBzYXTEsXLEsSBvbG1hZGFuICclcycgw7x6ZXJpbmUgYmlyIGlraWxpIHlhbWEgdXlndWxhbmFtxLF5b3IiCisKKyM6IGFwcGx5LmM6MzE2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIHBhdGNoIGFwcGxpZXMgdG8gJyVzJyAoJXMpLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBjb250ZW50cy4iCittc2dzdHIgIkJ1IHlhbWEgZ2XDp2VybGkgacOnZXJpayBpbGUgZcWfbGXFn21leWVuICclcycgw7x6ZXJpbmUgdXlndWxhbsSxciAoJXMpLiIKKworIzogYXBwbHkuYzozMTcxCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBwYXRjaCBhcHBsaWVzIHRvIGFuIGVtcHR5ICclcycgYnV0IGl0IGlzIG5vdCBlbXB0eSIKK21zZ3N0ciAieWFtYSBib8WfIGJpciAnJXMnIMO8emVyaW5lIHV5Z3VsYW7EsXIsIGFuY2FrIG8gYm/FnyBkZcSfaWwiCisKKyM6IGFwcGx5LmM6MzE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbmVjZXNzYXJ5IHBvc3RpbWFnZSAlcyBmb3IgJyVzJyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAiZ2VyZWtlbiBzb25nw7Zyw7xudMO8ICVzICgnJXMnIGnDp2luKSBva3VuYW3EsXlvciIKKworIzogYXBwbHkuYzozMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICJpa2lsaSB5YW1hICclcycgw7x6ZXJpbmUgdXlndWxhbmFtxLF5b3IiCisKKyM6IGFwcGx5LmM6MzIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKK21zZ3N0ciAiIgorIiclcycgw7x6ZXJpbmUgaWtpbGkgeWFtYSB5YW5sxLHFnyBzb251w6cgZG/En3VydXlvciAoJXMgYmVrbGVuaXlvcmR1LCAlcyBhbMSxbmTEsSkiCisKKyM6IGFwcGx5LmM6MzIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIKK21zZ3N0ciAieWFtYSBiYcWfYXLEsXPEsXogb2xkdTogJXM6JWxkIgorCisjOiBhcHBseS5jOjMzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICIlcyDDp8Sxa8SxxZ/EsSB5YXDEsWxhbcSxeW9yIgorCisjOiBhcHBseS5jOjM0MDUgYXBwbHkuYzozNDE2IGFwcGx5LmM6MzQ2MiBtaWR4LmM6NjEgc2V0dXAuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXMiCittc2dzdHIgIiVzIG9rdW5hbWFkxLEiCisKKyM6IGFwcGx5LmM6MzQxMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGZyb20gJyVzJyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICInJXMnIGJpciBzZW1ib2xpayBiYcSfxLFuIMO2dGVzaW5kZW4gb2t1bnV5b3IiCisKKyM6IGFwcGx5LmM6MzQ0MiBhcHBseS5jOjM2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgIiVzIHlvbHUgeWVuaWRlbiBhZGxhbmTEsXLEsWxkxLEvc2lsaW5kaSIKKworIzogYXBwbHkuYzozNTI4IGFwcGx5LmM6MzcwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzOiBpbmRla3N0ZSBidWx1bm11eW9yIgorCisjOiBhcHBseS5jOjM1MzcgYXBwbHkuYzozNzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXM6IGluZGVrcyBpbGUgZcWfbGXFn21peW9yIgorCisjOiBhcHBseS5jOjM1NzIKK21zZ2lkICJyZXBvc2l0b3J5IGxhY2tzIHRoZSBuZWNlc3NhcnkgYmxvYiB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisiRGVwbyAzIHnDtm5sw7wgYmlybGXFn3Rpcm1leWUgZ2VyaSDDp2VraWxlYmlsbWUgacOnaW4gZ2VyZWtlbiBpa2lsaSBuZXNuZXllIGl5ZSAiCisiZGXEn2lsLiIKKworIzogYXBwbHkuYzozNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhbGxpbmcgYmFjayB0byB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiMyB5w7ZubMO8IGJpcmxlxZ90aXJtZXllIGdlcmkgw6dla2lsaW5peW9yLi4uXG4iCisKKyM6IGFwcGx5LmM6MzU5MSBhcHBseS5jOjM1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgJyVzJyIKK21zZ3N0ciAiJyVzJyDDtmdlc2luaW4gZ2XDp2VybGkgacOnZXJpxJ9pIG9rdW5hbcSxeW9yIgorCisjOiBhcHBseS5jOjM2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZhbGwgYmFjayBvbiB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiMyB5w7ZubMO8IGJpcmxlxZ90aXJtZXllIGdlcmkgw6dla2luaWxlbWVkaS4uLlxuIgorCisjOiBhcHBseS5jOjM2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIHdpdGggY29uZmxpY3RzLlxuIgorbXNnc3RyICInJXMnIMO8emVyaW5lIHlhbWEgw6dha8SxxZ9tYWxhcmxhIGJpcmxpa3RlIHV5Z3VsYW5kxLEuXG4iCisKKyM6IGFwcGx5LmM6MzYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgY2xlYW5seS5cbiIKK21zZ3N0ciAiJyVzJyDDvHplcmluZSB5YW1hIHNvcnVuc3V6Y2EgdXlndWxhbmTEsS5cbiIKKworIzogYXBwbHkuYzozNjUyCittc2dpZCAicmVtb3ZhbCBwYXRjaCBsZWF2ZXMgZmlsZSBjb250ZW50cyIKK21zZ3N0ciAia2FsZMSxcm1hIHlhbWFzxLEgZG9zeWEgacOnZXJpxJ9pbmkgYsSxcmFrxLFyIgorCisjOiBhcHBseS5jOjM3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiVzOiB5YW5sxLHFnyB0w7xyIgorCisjOiBhcHBseS5jOjM3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvIgorbXNnc3RyICIlcywgJW8gdMO8csO8bmUgaXllLCAlbyBiZWtsZW5peW9yZHUiCisKKyM6IGFwcGx5LmM6Mzg3OCBhcHBseS5jOjM4ODAgcmVhZC1jYWNoZS5jOjgzMCByZWFkLWNhY2hlLmM6ODU2CisjOiByZWFkLWNhY2hlLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdGggJyVzJyIKK21zZ3N0ciAiZ2XDp2Vyc2l6IHlvbCAnJXMnIgorCisjOiBhcHBseS5jOjM5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IgorbXNnc3RyICIlczogaW5kZWtzdGUgaGFsaWhhesSxcmRhIHZhciIKKworIzogYXBwbHkuYzozOTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXM6IMOnYWzEscWfbWEgZGl6aW5pbmRlIGhhbGloYXrEsXJkYSB2YXIiCisKKyM6IGFwcGx5LmM6Mzk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgIsWfdW51biB5ZW5pIGtpcGkgKCVvKTogJXMsIGVza2kga2lwICglbykgaWxlIGXFn2xlxZ9taXlvciAiCisKKyM6IGFwcGx5LmM6Mzk2NAorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykgb2YgJXMiCittc2dzdHIgIsWfdW51biB5ZW5pIGtpcGkgKCVvKTogJXMsIMWfdW51biBlc2tpIGtpcGkgKCVvKTogJXMsIGlsZSBlxZ9sZcWfbWl5b3IiCisKKyM6IGFwcGx5LmM6Mzk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiZXRraWxlbmVuIGRvc3lhICclcycgYmlyIHNlbWJvbGlrIGJhxJ/EsW4gw7Z0ZXNpbmRlIgorCisjOiBhcHBseS5jOjM5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIlczogeWFtYSB1eWd1bGFuYW3EsXlvciIKKworIzogYXBwbHkuYzo0MDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHBhdGNoICVzLi4uIgorbXNnc3RyICIlcyB5YW1hc8SxIGRlbmV0bGVuaXlvci4uLiIKKworIzogYXBwbHkuYzo0MDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgIiVzIGFsdG1vZMO8bMO8IGnDp2luIHNoYTEgYmlsZ2lzaSBla3NpayB2ZXlhIHlhcmFyc8SxeiIKKworIzogYXBwbHkuYzo0MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGUgY2hhbmdlIGZvciAlcywgd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgSEVBRCIKK21zZ3N0ciAiZ2XDp2VybGkgSEVBRCdkZSBvbG1heWFuICVzIGnDp2luIGtpcCBkZcSfacWfaW1pIgorCisjOiBhcHBseS5jOjQxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgKCVzKS4iCittc2dzdHIgInNoYTEgYmlsZ2lzaSBla3NpayB2ZXlhIHlhcmFyc8SxeiAoJXMpLiIKKworIzogYXBwbHkuYzo0MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhZGQgJXMgdG8gdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICIlcyBnZcOnaWNpIGluZGVrc2UgZWtsZW5lbWVkaSIKKworIzogYXBwbHkuYzo0MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggdG8gJXMiCittc2dzdHIgImdlw6dpY2kgaW5kZWtzIMWfdXJheWEgeWF6xLFsYW1hZMSxOiAlcyIKKworIzogYXBwbHkuYzo0MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAiJXMgaW5kZWtzdGVuIGthbGTEsXLEsWxhbcSxeW9yIgorCisjOiBhcHBseS5jOjQyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICIlcyBhbHRtb2TDvGzDvCBpw6dpbiBoYXNhcmzEsSB5YW1hIgorCisjOiBhcHBseS5jOjQzMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgInllbmkgb2x1xZ90dXJ1bGFuICclcycgZG9zeWFzxLFuxLFuIGJpbGdpbGVyaSBhbMSxbmFtxLF5b3IiCisKKyM6IGFwcGx5LmM6NDMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAieWVuaSBvbHXFn3R1cnVsYW4gJXMgZG9zeWFzxLEgacOnaW4geWFyZMSxbWPEsSBiZWxsZWsgb2x1xZ90dXJ1bGFtxLF5b3IiCisKKyM6IGFwcGx5LmM6NDMxNiBhcHBseS5jOjQ0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiCittc2dzdHIgIiVzIGnDp2luIMO2bmJlbGxlayBnaXJkaXNpIGVrbGVuZW1peW9yIgorCisjOiBhcHBseS5jOjQzNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIHRvICclcyciCittc2dzdHIgIsWfdXJheWEgeWF6xLFsYW1hZMSxOiAnJXMnIgorCisjOiBhcHBseS5jOjQzNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2xvc2luZyBmaWxlICclcyciCittc2dzdHIgIiclcycgZG9zeWFzxLEga2FwYXTEsWzEsXlvciIKKworIzogYXBwbHkuYzo0NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIKK21zZ3N0ciAiJyVzJyBkb3N5YXPEsSB5YXrEsWxhbcSxeW9yLCAlbyBraXBpIgorCisjOiBhcHBseS5jOjQ1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIKK21zZ3N0ciAiJXMgeWFtYXPEsSBzb3J1bnN1emNhIHV5Z3VsYW5kxLEuIgorCisjOiBhcHBseS5jOjQ1MzkKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiacOnIGhhdGEiCisKKyM6IGFwcGx5LmM6NDU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gIiUlcyB5YW1hc8SxICVkIGdlcmkgw6dldmlybWUgaWxlIHV5Z3VsYW7EsXlvci4uLiIKK21zZ3N0clsxXSAiJSVzIHlhbWFzxLEgJWQgZ2VyaSDDp2V2aXJtZSBpbGUgdXlndWxhbsSxeW9yLi4uIgorCisjOiBhcHBseS5jOjQ1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICIucmVqIGRvc3lhIGFkxLEgJS4qcy5yZWogb2xhcmFrIGvEsXNhbHTEsWzEsXlvciIKKworIzogYXBwbHkuYzo0NTYxIGJ1aWx0aW4vZmV0Y2guYzo5MDEgYnVpbHRpbi9mZXRjaC5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXMiCittc2dzdHIgIiVzIGHDp8SxbGFtxLF5b3IiCisKKyM6IGFwcGx5LmM6NDU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICJQYXLDp2EgIyVkIHNvcnVuc3V6Y2EgdXlndWxhbmTEsS4iCisKKyM6IGFwcGx5LmM6NDU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIlBhcsOnYSAlZCBnZXJpIMOnZXZyaWxkaS4iCisKKyM6IGFwcGx5LmM6NDY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkIHBhdGNoICclcycuIgorbXNnc3RyICInJXMnIHlhbWFzxLEgYXRsYW5kxLEuIgorCisjOiBhcHBseS5jOjQ3MDYKK21zZ2lkICJ1bnJlY29nbml6ZWQgaW5wdXQiCittc2dzdHIgInRhbsSxbWxhbmFtYXlhbiBnaXJkaSIKKworIzogYXBwbHkuYzo0NzI2Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAiaW5kZWtzIGRvc3lhc8SxIG9rdW5hbcSxeW9yIgorCisjOiBhcHBseS5jOjQ4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnOiAlcyIKK21zZ3N0ciAiJyVzJyB5YW1hc8SxIGHDp8SxbGFtxLF5b3I6ICVzIgorCisjOiBhcHBseS5jOjQ5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAiJWQgYm/Fn2x1ayBoYXRhc8SxIHN1c3R1cnVsZHUiCittc2dzdHJbMV0gIiVkIGJvxZ9sdWsgaGF0YXPEsSBzdXN0dXJ1bGR1IgorCisjOiBhcHBseS5jOjQ5MTYgYXBwbHkuYzo0OTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIHNhdMSxciBib8WfbHVrIGhhdGFzxLEgZWtsaXlvci4iCittc2dzdHJbMV0gIiVkIHNhdMSxciBib8WfbHVrIGhhdGFzxLEgZWtsaXlvci4iCisKKyM6IGFwcGx5LmM6NDkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICJCb8WfbHVrIGhhdGFsYXLEsSBkw7x6ZWx0aWxkaWt0ZW4gc29ucmEgJWQgc2F0xLFyIHV5Z3VsYW5kxLEuIgorbXNnc3RyWzFdICJCb8WfbHVrIGhhdGFsYXLEsSBkw7x6ZWx0aWxkaWt0ZW4gc29ucmEgJWQgc2F0xLFyIHV5Z3VsYW5kxLEuIgorCisjOiBhcHBseS5jOjQ5NDAgYnVpbHRpbi9hZGQuYzo2MTIgYnVpbHRpbi9tdi5jOjMwMSBidWlsdGluL3JtLmM6NDA2Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJZZW5pIGluZGVrcyBkb3N5YXPEsSB5YXrEsWxhbcSxeW9yIgorCisjOiBhcHBseS5jOjQ5NjgKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJ2ZXJpbGVuIHlvbCBpbGUgZcWfbGXFn2VuIGRlxJ9pxZ9pa2xpa2xlcmkgdXlndWxhbWEiCisKKyM6IGFwcGx5LmM6NDk3MQorbXNnaWQgImFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgInZlcmlsZW4geW9sIGlsZSBlxZ9sZcWfZW4gZGXEn2nFn2lrbGlrbGVyaSB1eWd1bGEiCisKKyM6IGFwcGx5LmM6NDk3MyBidWlsdGluL2FtLmM6MjI2MAorbXNnaWQgIm51bSIKK21zZ3N0ciAic2F5xLEiCisKKyM6IGFwcGx5LmM6NDk3NAorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICJnZWxlbmVrc2VsIGRpZmYgeW9sbGFyxLFuZGFuIDxzYXnEsT4gw7ZuY8O8IGXEn2lrIMOnaXpnaXlpIGthbGTEsXIiCisKKyM6IGFwcGx5LmM6NDk3NworbXNnaWQgImlnbm9yZSBhZGRpdGlvbnMgbWFkZSBieSB0aGUgcGF0Y2giCittc2dzdHIgInlhbWFuxLFuIHlhcHTEscSfxLEgZWtsZW1lbGVyaSB5b2sgc2F5IgorCisjOiBhcHBseS5jOjQ5NzkKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiCittc2dzdHIgInlhbWF5xLEgdXlndWxhbWEgeWVyaW5lIGdpcmRpIGnDp2luIGRpZmZzdGF0J8SxIMOnxLFrdMSxIHZlciIKKworIzogYXBwbHkuYzo0OTgzCittc2dpZCAic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAiZWtsZW5lbiB2ZSBzaWxpbmVuIHNhdMSxcmxhcsSxbiBzYXnEsXPEsW7EsSBvbmx1ayBiaXJpbWRlIGfDtnN0ZXIiCisKKyM6IGFwcGx5LmM6NDk4NQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgInlhbWF5xLEgdXlndWxhbWEgeWVyaW5lIGdpcmRpIGnDp2luIGJpciDDtnpldCDDp8Sxa3TEsXPEsSB2ZXIiCisKKyM6IGFwcGx5LmM6NDk4NworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUiCittc2dzdHIgInlhbWF5xLEgdXlndWxhbWEgeWVyaW5lIHlhbWFuxLFuIHV5Z3VsYW5hYmlsaXIgb2x1cCBvbG1hZMSxxJ/EsW5hIGJhayIKKworIzogYXBwbHkuYzo0OTg5Cittc2dpZCAibWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICJ5YW1hbsSxbiBnZcOnZXJsaSBpbmRla3NlIHV5Z3VsYW5hYmlsaXIgb2xkdcSfdW5kYW4gZW1pbiBvbCIKKworIzogYXBwbHkuYzo0OTkxCittc2dpZCAibWFyayBuZXcgZmlsZXMgd2l0aCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorbXNnc3RyICJ5ZW5pIGRvc3lhbGFyxLEgYGdpdCBhZGQgLS1pbnRlbnQtdG8tYWRkYCBpbGUgaW1sZSIKKworIzogYXBwbHkuYzo0OTkzCittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIsOnYWzEscWfbWEgYcSfYWPEsW5hIGRva3VubWFkYW4gYmlyIHlhbWEgdXlndWxhIgorCisjOiBhcHBseS5jOjQ5OTUKK21zZ2lkICJhY2NlcHQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgb3V0c2lkZSB0aGUgd29ya2luZyBhcmVhIgorbXNnc3RyICLDp2FsxLHFn21hIGHEn2FjxLFuxLFuIGTEscWfxLFuYSBkb2t1bmFuIGJpciB5YW1hecSxIGthYnVsIGV0IgorCisjOiBhcHBseS5jOjQ5OTgKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAiZWsgb2xhcmFrIHlhbWF5xLEgZGEgdXlndWxhICgtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2sgaWxlIGt1bGxhbikiCisKKyM6IGFwcGx5LmM6NTAwMAorbXNnaWQgImF0dGVtcHQgdGhyZWUtd2F5IG1lcmdlIGlmIGEgcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgImJpciB5YW1hIHV5Z3VsYW5hbcSxeW9yc2EgMyB5w7ZubMO8IGJpcmxlxZ90aXJtZSBkZW5lIgorCisjOiBhcHBseS5jOjUwMDIKK21zZ2lkICJidWlsZCBhIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiBlbWJlZGRlZCBpbmRleCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiZ8O2bcO8bMO8IGluZGVrcyBiaWxnaXNpbmkgdGVtZWwgYWxhbiBnZcOnaWNpIGJpciBpbmRla3Mgb2x1xZ90dXIiCisKKyM6IGFwcGx5LmM6NTAwNSBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTczIGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjQKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAieW9sbGFyIE5VTCBrYXJha3RlcmkgaWxlIGF5csSxbMSxciIKKworIzogYXBwbHkuYzo1MDA3Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICJlbiBheiA8bj4gYmHEn2xhbSBzYXTEsXLEsW7EsW4gZcWfbGXFn3RpxJ9pbmRlbiBlbWluIG9sIgorCisjOiBhcHBseS5jOjUwMDggYnVpbHRpbi9hbS5jOjIyMzkgYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OAorIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDAgYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1NyBidWlsdGluL3JlYmFzZS5jOjE1MDgKK21zZ2lkICJhY3Rpb24iCittc2dzdHIgImV5bGVtIgorCisjOiBhcHBseS5jOjUwMDkKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAiYm/Fn2x1ayBoYXRhc8SxIGnDp2VyZW4geWVuaSB2ZXlhIGRlxJ9pxZ90aXJpbG1pxZ8gc2F0xLFybGFyxLEgYWxnxLFsYSIKKworIzogYXBwbHkuYzo1MDEyIGFwcGx5LmM6NTAxNQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgImJhxJ9sYW0gYnVsdXJrZW4gYm/Fn2x1ayBkZcSfacWfaWtsaWtsZXJpbmkgeW9rIHNheSIKKworIzogYXBwbHkuYzo1MDE4Cittc2dpZCAiYXBwbHkgdGhlIHBhdGNoIGluIHJldmVyc2UiCittc2dzdHIgInlhbWF5xLEgdGVyc3RlbiB1eWd1bGEiCisKKyM6IGFwcGx5LmM6NTAyMAorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICJlbiBheiBiaXIgc2F0xLFyIGJhxJ9sYW0gYmVrbGVtZSIKKworIzogYXBwbHkuYzo1MDIyCittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgInJlZGRlZGlsbWnFnyBwYXLDp2FsYXLEsSBpbGdpbGkgKi5yZWogZG9zeWFsYXLEsW5kYSBixLFyYWsiCisKKyM6IGFwcGx5LmM6NTAyNAorbXNnaWQgImFsbG93IG92ZXJsYXBwaW5nIGh1bmtzIgorbXNnc3RyICLDvHN0IMO8c3RlIGJpbmVuIHBhcsOnYWxhcmEgaXppbiB2ZXIiCisKKyM6IGFwcGx5LmM6NTAyNSBidWlsdGluL2FkZC5jOjMyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIyCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjAgYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTggYnVpbHRpbi9mc2NrLmM6Nzc0CisjOiBidWlsdGluL2xvZy5jOjIxNjYgYnVpbHRpbi9tdi5jOjEyMyBidWlsdGluL3JlYWQtdHJlZS5jOjEyOAorbXNnaWQgImJlIHZlcmJvc2UiCittc2dzdHIgImF5csSxbnTEsSB2ZXIiCisKKyM6IGFwcGx5LmM6NTAyNworbXNnaWQgInRvbGVyYXRlIGluY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgbmV3LWxpbmUgYXQgdGhlIGVuZCBvZiBmaWxlIgorbXNnc3RyICJkb3N5YSBzb251bmRhIHlhbmzEscWfbMSxa2xhIGFsZ8SxbGFuYW4gZWtzaWsgeWVuaXNhdMSxcsSxIGhvxZ8gZ8O2ciIKKworIzogYXBwbHkuYzo1MDMwCittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICJwYXLDp2Egw7xzdGJpbGdpc2luZGVraSBzYXTEsXIgc2F5xLFtxLFuYSBnw7x2ZW5tZSIKKworIzogYXBwbHkuYzo1MDMyIGJ1aWx0aW4vYW0uYzoyMjQ4Cittc2dpZCAicm9vdCIKK21zZ3N0ciAia8O2ayIKKworIzogYXBwbHkuYzo1MDMzCittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAidMO8bSBkb3N5YSBhZGxhcsSxbsSxbiBiYcWfxLFuYSA8a8O2az4gZWtsZSIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgWzxzZcOnZW5la2xlcj5dIDxhxJ9hY8SxbXPEsT4gWzx5b2w+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE1Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzoxNgorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxkZXBvPiBbLS1leGVjIDxrb211dD5dIFs8c8Onbmtscj5dIDxhxJ9hY8SxbXPEsT4gWzx5b2w+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE3Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPGRlcG8+IFstLWV4ZWMgPGtvbXV0Pl0gLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MzcyIGJ1aWx0aW4vYWRkLmM6MTgxIGJ1aWx0aW4vYWRkLmM6NTg4IGJ1aWx0aW4vcm0uYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAieW9sIGJlbGlydGVjaSAnJXMnIGhpw6diaXIgZG9zeWEgaWxlIGXFn2xlxZ9tZWRpIgorCisjOiBhcmNoaXZlLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmOiAlLipzIgorbXNnc3RyICJiw7Z5bGUgYmlyIGJhxZ92dXJ1IHlvazogJS4qcyIKKworIzogYXJjaGl2ZS5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJXMiCittc2dzdHIgImdlw6dlcmxpIGJpciBuZXNuZSBhZMSxIGRlxJ9pbDogJXMiCisKKyM6IGFyY2hpdmUuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdHJlZSBvYmplY3Q6ICVzIgorbXNnc3RyICJiaXIgYcSfYcOnIG5lc25lc2kgZGXEn2lsOiAlcyIKKworIzogYXJjaGl2ZS5jOjQyNgorbXNnaWQgImN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgdW50cmFja2VkIgorbXNnc3RyICJnZcOnZXJsaSDDp2FsxLHFn21hIGRpemluaSBpemxlbm1peW9yIgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiZm10IgorbXNnc3RyICJiacOnaW0iCisKKyM6IGFyY2hpdmUuYzo0NTcKK21zZ2lkICJhcmNoaXZlIGZvcm1hdCIKK21zZ3N0ciAiYXLFn2l2IGJpw6dpbWkiCisKKyM6IGFyY2hpdmUuYzo0NTggYnVpbHRpbi9sb2cuYzoxNjUzCittc2dpZCAicHJlZml4IgorbXNnc3RyICLDtm5layIKKworIzogYXJjaGl2ZS5jOjQ1OQorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgIsO2bmVraSBhcsWfaXZkZWtpIHTDvG0geW9sIGFkbGFyxLFuxLFuIGJhxZ/EsW5hIGVrbGUiCisKKyM6IGFyY2hpdmUuYzo0NjAgYnVpbHRpbi9ibGFtZS5jOjg2MSBidWlsdGluL2JsYW1lLmM6ODY1IGJ1aWx0aW4vYmxhbWUuYzo4NjYKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTcgYnVpbHRpbi9jb25maWcuYzoxMzAgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY0IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY4IGJ1aWx0aW4vZ3JlcC5jOjg4NworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNSBidWlsdGluL2xzLWZpbGVzLmM6NTYwIGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjMKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTIgYnVpbHRpbi9ub3Rlcy5jOjU3OCBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworIzogcGFyc2Utb3B0aW9ucy5oOjE5MAorbXNnaWQgImZpbGUiCittc2dzdHIgImRvc3lhIgorCisjOiBhcmNoaXZlLmM6NDYxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJhcsWfaXZpIGJ1IGRvc3lheWEgeWF6IgorCisjOiBhcmNoaXZlLmM6NDYzCittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiw6dhbMSxxZ9tYSBkaXppbmluZGVraSAuZ2l0YXR0cmlidXRlcyd1IG9rdSIKKworIzogYXJjaGl2ZS5jOjQ2NAorbXNnaWQgInJlcG9ydCBhcmNoaXZlZCBmaWxlcyBvbiBzdGRlcnIiCittc2dzdHIgImFyxZ9pdmxlbm1pxZ8gZG9zeWFsYXLEsSBzdGRlcnInZGUgcmFwb3JsYSIKKworIzogYXJjaGl2ZS5jOjQ2NQorbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgInlhbG7EsXpjYSBkZXBvbGEiCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgImRhaGEgaMSxemzEsSBzxLFrxLHFn3TEsXIiCisKKyM6IGFyY2hpdmUuYzo0NzQKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgImRhaGEgaXlpIHPEsWvEscWfdMSxciIKKworIzogYXJjaGl2ZS5jOjQ3NworbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAiZGVzdGVrbGVuZW4gYXLFn2l2IGJpw6dpbWxlcmluaSBsaXN0ZWxlIgorCisjOiBhcmNoaXZlLmM6NDc5IGJ1aWx0aW4vYXJjaGl2ZS5jOjkxIGJ1aWx0aW4vY2xvbmUuYzoxMTMgYnVpbHRpbi9jbG9uZS5jOjExNgorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTEKK21zZ2lkICJyZXBvIgorbXNnc3RyICJkZXBvIgorCisjOiBhcmNoaXZlLmM6NDgwIGJ1aWx0aW4vYXJjaGl2ZS5jOjkyCittc2dpZCAicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iCittc2dzdHIgImFyxZ9pdmkgdXphayBrb251bSBkZXBvc3UgPGRlcG8+J2RhbiBhbCIKKworIzogYXJjaGl2ZS5jOjQ4MSBidWlsdGluL2FyY2hpdmUuYzo5MyBidWlsdGluL2RpZmZ0b29sLmM6NzE1CisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAia29tdXQiCisKKyM6IGFyY2hpdmUuYzo0ODIgYnVpbHRpbi9hcmNoaXZlLmM6OTQKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgInV6YWsga29udW0ga29tdXR1IGdpdC11cGxvYWQtYXJjaGl2ZSdlIG9sYW4geW9sIgorCisjOiBhcmNoaXZlLmM6NDg5Cittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1yZW1vdGUiCittc2dzdHIgIkJla2xlbm1lZGlrIHNlw6dlbmVrIC0tcmVtb3RlIgorCisjOiBhcmNoaXZlLmM6NDkxCittc2dpZCAiT3B0aW9uIC0tZXhlYyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1yZW1vdGUiCittc2dzdHIgIi0tZXhlYyBzZcOnZW5lxJ9pIHlhbG7EsXpjYSAtLXJlbW90ZSBpbGUgYmlybGlrdGUga3VsbGFuxLFsYWJpbGlyIgorCisjOiBhcmNoaXZlLmM6NDkzCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIkJla2xlbm1lZGlrIHNlw6dlbmVrIC0tb3V0cHV0IgorCisjOiBhcmNoaXZlLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIKK21zZ3N0ciAiQmlsaW5tZXllbiBhcsWfaXYgYmnDp2ltaSAnJXMnIgorCisjOiBhcmNoaXZlLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiCittc2dzdHIgIiclcycgYmnDp2ltaSBpw6dpbiBkZXN0ZWtsZW5tZXllbiBkZcSfacWfa2VuOiAtJWQiCisKKyM6IGFyY2hpdmUtdGFyLmM6MTI1IGFyY2hpdmUtemlwLmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJlYW0gYmxvYiAlcyIKK21zZ3N0ciAiJXMgaWtpbGkgbmVzbmVzaSBha8SxdMSxbGFtxLF5b3IiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjY2IGFyY2hpdmUtemlwLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiCittc2dzdHIgImRlc3Rla2xlbm1leWVuIGRvc3lhIGtpcGk6IDAlbyAoU0hBMTogJXMpIgorCisjOiBhcmNoaXZlLXRhci5jOjI5MyBhcmNoaXZlLXppcC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlcyIKK21zZ3N0ciAiJXMgb2t1bmFtxLF5b3IiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnJXMnIGZpbHRlciIKK21zZ3N0ciAiJyVzJyBzw7x6Z2VjaSBiYcWfbGF0xLFsYW3EsXlvciIKKworIzogYXJjaGl2ZS10YXIuYzo0NjgKK21zZ2lkICJ1bmFibGUgdG8gcmVkaXJlY3QgZGVzY3JpcHRvciIKK21zZ3N0ciAiYcOnxLFrbGF5xLFjxLEgeWVuaWRlbiB5w7ZubGVuZGlyaWxlbWl5b3IiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsdGVyIHJlcG9ydGVkIGVycm9yIgorbXNnc3RyICInJXMnIHPDvHpnZWNpIGhhdGEgYmlsZGlyZGkiCisKKyM6IGFyY2hpdmUtemlwLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggaXMgbm90IHZhbGlkIFVURi04OiAlcyIKK21zZ3N0ciAieW9sIGdlw6dlcmxpIFVURi04IGRlxJ9pbDogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICJ5b2wgw6dvayB1enVuICglZCBrYXJha3RlciwgU0hBMTogJXMpOiAlcyIKKworIzogYXJjaGl2ZS16aXAuYzo0ODAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzEgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICJzw7ZuZMO8cm1lIGhhdGFzxLEgKCVkKSIKKworIzogYXJjaGl2ZS16aXAuYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZXN0YW1wIHRvbyBsYXJnZSBmb3IgdGhpcyBzeXN0ZW06ICU8UFJJdU1BWD4iCittc2dzdHIgInphbWFuIGRhbWdhc8SxIGJ1IHNpc3RlbSBpw6dpbiDDp29rIGLDvHnDvGs6ICU8UFJJdU1BWD4iCisKKyM6IGF0dHIuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZSIKK21zZ3N0ciAiJS4qcyBnZcOnZXJsaSBiaXIgw7Z6bml0ZWxpayBhZMSxIGRlxJ9pbCIKKworIzogYXR0ci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBub3QgYWxsb3dlZDogJXM6JWQiCittc2dzdHIgIiVzIGl6aW4gdmVyaWxtaXlvcjogJXM6JWQiCisKKyM6IGF0dHIuYzo0MDkKK21zZ2lkICIiCisiTmVnYXRpdmUgcGF0dGVybnMgYXJlIGlnbm9yZWQgaW4gZ2l0IGF0dHJpYnV0ZXNcbiIKKyJVc2UgJ1xcIScgZm9yIGxpdGVyYWwgbGVhZGluZyBleGNsYW1hdGlvbi4iCittc2dzdHIgIiIKKyJOZWdhdGlmIGRpemdpbGVyIGdpdCDDtnpuaXRlbGlrbGVyaW5kZSB5b2sgc2F5xLFsxLFyLlxuIgorIkdlcsOnZWsgw7ZuY8O8IMO8bmxlbSBpw6dpbiAnXFwhJyBrdWxsYW7EsW4uIgorCisjOiBiaXNlY3QuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkbHkgcXVvdGVkIGNvbnRlbnQgaW4gZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAiJyVzJyBkb3N5YXPEsW5kYSBoYXRhbMSxIHTEsXJuYcSfYSBhbMSxbm3EscWfIGnDp2VyaWs6ICVzIgorCisjOiBiaXNlY3QuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICJEYWhhIGZhemxhIGlraWxpIGFyYW1hIHlhcGFtxLF5b3J1eiFcbiIKKworIzogYmlzZWN0LmM6NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICJHZcOnZXJsaSBiaXIgZ8O2bmRlcmkgYWTEsSBkZcSfaWw6ICVzIgorCisjOiBiaXNlY3QuYzo3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIGJhZC5cbiIKKyJUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIkJpcmxlxZ90aXJtZSB0ZW1lbGkgJXMgaGF0YWzEsS5cbiIKKyJCdSBkZW1layBvbHV5b3Iga2kgaGF0YSAlcyB2ZSBbJXNdIGFyYXPEsW5kYSBkw7x6ZWx0aWxtacWfLlxuIgorCisjOiBiaXNlY3QuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIG5ldy5cbiIKKyJUaGUgcHJvcGVydHkgaGFzIGNoYW5nZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIkJpcmxlxZ90aXJtZSB0ZW1lbGkgJXMgeWVuaS5cbiIKKyLDlnplbGxpayAlcyB2ZSBbJXNdIGFyYXPEsW5kYSBkZcSfacWfbWnFny5cbiIKKworIzogYmlzZWN0LmM6NzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyAlcy5cbiIKKyJUaGlzIG1lYW5zIHRoZSBmaXJzdCAnJXMnIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiQmlybGXFn3Rpcm1lIHRlbWVsaSAlcyAlcy5cbiIKKyJCdSBkZW1layBvbHV5b3Iga2kgaWxrICclcycgZ8O2bmRlcmlzaSAlcyB2ZSBbJXNdIGFyYXPEsW5kYS5cbiIKKworIzogYmlzZWN0LmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTb21lICVzIHJldnMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlICVzIHJldi5cbiIKKyJnaXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS5cbiIKKyJNYXliZSB5b3UgbWlzdG9vayAlcyBhbmQgJXMgcmV2cz9cbiIKK21zZ3N0ciAiIgorIkJhesSxICVzIHJldml6eW9ubGFyxLEgJXMgcmV2aXp5b251bnVuIGF0YXPEsSBkZcSfaWwuXG4iCisiZ2l0IGJpc2VjdCBidSBkdXJ1bWRhIGTDvHpnw7xuY2Ugw6dhbMSxxZ9hbWF6LlxuIgorIiVzIHZlICVzIHJldml6eW9ubGFyxLFuxLEgYmlyYmlyaW5lIG1pIGthcsSxxZ90xLFyZMSxbsSxej9cbiIKKworIzogYmlzZWN0LmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdIG11c3QgYmUgc2tpcHBlZC5cbiIKKyJTbyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGUgZmlyc3QgJXMgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kICVzLlxuIgorIldlIGNvbnRpbnVlIGFueXdheS4iCittc2dzdHIgIiIKKyIlcyB2ZSBbJXNdIGFyYXPEsW5kYWtpIGJpcmxlxZ90aXJtZSB0ZW1lbGkgYXRsYW5tYWzEsS5cbiIKKyIlcyBnw7ZuZGVyaXNpbmluICVzIHZlIFslc10gYXJhc8SxbmRhIG9sZHXEn3VuZGFuIGVtaW4gb2xhbcSxeW9ydXouXG4iCisiWWluZSBkZSBzw7xyZMO8cmVjZcSfaXouIgorCisjOiBiaXNlY3QuYzo4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIKK21zZ3N0ciAixLBraWxpIGFyYW1hOiBCaXIgYmlybGXFn3Rpcm1lIHRlbWVsaSBzxLFuYW5tYWzEsVxuIgorCisjOiBiaXNlY3QuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSAlcyByZXZpc2lvbiBpcyBuZWVkZWQiCittc2dzdHIgImJpciAlcyByZXZpenlvbnUgZ2VyZWtpeW9yIgorCisjOiBiaXNlY3QuYzo5MjAgYnVpbHRpbi9ub3Rlcy5jOjE3NyBidWlsdGluL3RhZy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAiJyVzJyBkb3N5YXPEsSBvbHXFn3R1cnVsYW1hZMSxIgorCisjOiBiaXNlY3QuYzo5NjYgYnVpbHRpbi9tZXJnZS5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciCittc2dzdHIgIiclcycgZG9zeWFzxLEgb2t1bmFtYWTEsSIKKworIzogYmlzZWN0LmM6OTk3Cittc2dpZCAicmVhZGluZyBiaXNlY3QgcmVmcyBmYWlsZWQiCittc2dzdHIgImlraWxpIGFyYW1hIGJhxZ92dXJ1bGFyxLFuxLEgb2t1bWEgYmHFn2FyxLFzxLF6IG9sZHUiCisKKyM6IGJpc2VjdC5jOjEwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgd2FzIGJvdGggJXMgYW5kICVzXG4iCittc2dzdHIgIiVzIGhlbSAlcyBoZW0gJXMgaWRpXG4iCisKKyM6IGJpc2VjdC5jOjEwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKyJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iCittc2dzdHIgIiIKKyJTxLFuYW5hYmlsaXIgYmlyIGfDtm5kZXJpIGJ1bHVuYW1hZMSxLlxuIgorIkhhdGFsxLEgeW9sIHBhcmFtZXRyZWxlcmkgaWxlIG1pIGJhxZ9sYWTEsW7EsXo/XG4iCisKKyM6IGJpc2VjdC5jOjEwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJvdWdobHkgJWQgc3RlcCkiCittc2dpZF9wbHVyYWwgIihyb3VnaGx5ICVkIHN0ZXBzKSIKK21zZ3N0clswXSAiKGHFn2HEn8SxIHl1a2FyxLEgJWQgYWTEsW0pIgorbXNnc3RyWzFdICIoYcWfYcSfxLEgeXVrYXLEsSAlZCBhZMSxbSkiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgbGFzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggIihyb3VnaGx5ICVkCisjLiBzdGVwcykiIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJpc2VjdC5jOjEwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICLEsGtpbGkgYXJhbWE6IMWedW5kYW4gc29ucmEgc8SxbmFuYWNhayAlZCByZXZpenlvbiBrYWxkxLE6ICVzXG4iCittc2dzdHJbMV0gIsSwa2lsaSBhcmFtYTogxZ51bmRhbiBzb25yYSBzxLFuYW5hY2FrICVkIHJldml6eW9uIGthbGTEsTogJXNcbiIKKworIzogYmxhbWUuYzoyNzAwCittc2dpZCAiLS1jb250ZW50cyBhbmQgLS1yZXZlcnNlIGRvIG5vdCBibGVuZCB3ZWxsLiIKK21zZ3N0ciAiLS1jb250ZW50cyB2ZSAtLXJldmVyc2UgYmlybGlrdGUgcGVrIGl5aSBnaXRtaXlvci4iCisKKyM6IGJsYW1lLmM6MjcxNAorbXNnaWQgImNhbm5vdCB1c2UgLS1jb250ZW50cyB3aXRoIGZpbmFsIGNvbW1pdCBvYmplY3QgbmFtZSIKK21zZ3N0ciAiLS1jb250ZW50cyBzb24gZ8O2bmRlcmkgbmVzbmVzaSBhZMSxIGlsZSBrdWxsYW7EsWxhbcSxeW9yIgorCisjOiBibGFtZS5jOjI3MzUKK21zZ2lkICItLXJldmVyc2UgYW5kIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgc3BlY2lmaWVkIGxhdGVzdCBjb21taXQiCittc2dzdHIgIiIKKyItLXJldmVyc2UgdmUgLS1maXJzdC1wYXJlbnQgYmlybGlrdGUgZW4gc29uIGfDtm5kZXJpbmluIGJlbGlydGlsbWVzaSBnZXJlayIKKworIzogYmxhbWUuYzoyNzQ0IGJ1bmRsZS5jOjE2NyByZWYtZmlsdGVyLmM6MjIwMyByZW1vdGUuYzoxOTQyIHNlcXVlbmNlci5jOjIwMDYKKyM6IHNlcXVlbmNlci5jOjQzNTggc3VibW9kdWxlLmM6ODQ3IGJ1aWx0aW4vY29tbWl0LmM6MTA0NSBidWlsdGluL2xvZy5jOjM4OAorIzogYnVpbHRpbi9sb2cuYzo5OTEgYnVpbHRpbi9sb2cuYzoxNTIwIGJ1aWx0aW4vbG9nLmM6MTkyNSBidWlsdGluL2xvZy5jOjIyMTUKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0MTIgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MAorIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE5MgorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICJyZXZpenlvbmRhIGdlemlubWUgYXlhcmxhbWFzxLEgYmHFn2FyxLFzxLF6IG9sZHUiCisKKyM6IGJsYW1lLmM6Mjc2MgorbXNnaWQgIiIKKyItLXJldmVyc2UgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSByYW5nZSBhbG9uZyBmaXJzdC1wYXJlbnQgY2hhaW4iCittc2dzdHIgIiIKKyItLXJldmVyc2UgLS1maXJzdC1wYXJlbnQgYmlybGlrdGUgaWxrIMO8c3Qgw7ZnZSB6aW5jaXJpbmluIHlhbsSxbmRhIGVyaW0gIgorImdlcmVrdGlyaXlvciIKKworIzogYmxhbWUuYzoyNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcGF0aCAlcyBpbiAlcyIKK21zZ3N0ciAixZ91cmFkYSAlcyB5b2x1IGJ1bHVuYW1hZMSxOiAlcyIKKworIzogYmxhbWUuYzoyNzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGJsb2IgJXMgZm9yIHBhdGggJXMiCittc2dzdHIgIiVzIGlraWxpIG5lc25lc2kgJXMgeW9sdW5kYSBva3VuYW3EsXlvciIKKworIzogYnJhbmNoLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkFmdGVyIGZpeGluZyB0aGUgZXJyb3IgY2F1c2UgeW91IG1heSB0cnkgdG8gZml4IHVwXG4iCisidGhlIHJlbW90ZSB0cmFja2luZyBpbmZvcm1hdGlvbiBieSBpbnZva2luZ1xuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIi4iCittc2dzdHIgIiIKKyJcbiIKKyJIYXRhIG5lZGVuaW5pIG9ydGFkYW4ga2FsZMSxcmTEsWt0YW4gc29ucmEgdXphayBrb251bSBpemxlbWVcbiIKKyJiaWxnaXNpbmkgb25hcm1hecSxIMWfdW51IMOnYWzEscWfdMSxcmFyYWsgZGVuZXllYmlsaXJzaW5pejpcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgorCisjOiBicmFuY2guYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3Qgc2V0dGluZyBicmFuY2ggJXMgYXMgaXRzIG93biB1cHN0cmVhbS4iCittc2dzdHIgIiVzIGRhbMSxIGtlbmRpIMO8c3Qga2F5bmHEn8SxIG9sYXJhayBheWFybGFuYW1hei4iCisKKyM6IGJyYW5jaC5jOjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIiclcycgZGFsxLEgJyVzJyB1emFrIGRhbMSxbsSxIHllbmlkZW4gdGVtZWxsZW5kaXJtZSBpbGUgJXMga29udW11bmRhbiBpemxlbWVrICIKKyLDvHplcmUgYXlhcmxhbmTEsS4iCisKKyM6IGJyYW5jaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnLiIKK21zZ3N0ciAiJyVzJyBkYWzEsSAnJXMnIHV6YWsgZGFsxLFuxLEgJXMga29udW11bmRhbiBpemxlbWVrIMO8emVyZSBheWFybGFuZMSxLiIKKworIzogYnJhbmNoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIiclcycgZGFsxLEgJyVzJyB5ZXJlbCBkYWzEsW7EsSB5ZW5pZGVuIHRlbWVsbGVuZGlybWUgaWxlIGl6bGVtZWsgw7x6ZXJlIGF5YXJsYW5kxLEiCisKKyM6IGJyYW5jaC5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJy4iCittc2dzdHIgIiclcycgZGFsxLEgJyVzJyB5ZXJlbCBkYWzEsW7EsSBpemxlbWVrIMO8emVyZSBheWFybGFuZMSxLiIKKworIzogYnJhbmNoLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiJyVzJyBkYWzEsSAnJXMnIHV6YWsgYmHFn3Z1cnVzdW51IHllbmlkZW4gdGVtZWxsZW5kaXJtZSBpbGUgaXpsZW1layDDvHplcmUgIgorImF5YXJsYW5kxLEuIgorCisjOiBicmFuY2guYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJy4iCittc2dzdHIgIiclcycgZGFsxLEgJyVzJyB1emFrIGJhxZ92dXJ1c3VudSBpemxlbWVrIMO8emVyZSBheWFybGFuZMSxLiIKKworIzogYnJhbmNoLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyInJXMnIGRhbMSxICclcycgeWVyZWwgYmHFn3Z1cnVzdW51IHllbmlkZW4gdGVtZWxsZW5kaXJtZSBpbGUgaXpsZW1layDDvHplcmUgIgorImF5YXJsYW5kxLEuIgorCisjOiBicmFuY2guYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAnJXMnLiIKK21zZ3N0ciAiJyVzJyBkYWzEsSAnJXMnIHllcmVsIGJhxZ92dXJ1c3VudSBpemxlbWVrIMO8emVyZSBheWFybGFuZMSxLiIKKworIzogYnJhbmNoLmM6MTE5Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIHVwc3RyZWFtIGJyYW5jaCBjb25maWd1cmF0aW9uIgorbXNnc3RyICLDnHN0a2F5bmFrIGRhbCB5YXDEsWxhbmTEsXJtYXPEsSB5YXrEsWxhbcSxeW9yIgorCisjOiBicmFuY2guYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAixLB6bGVubWl5b3I6ICVzIGJhxZ92dXJ1c3UgacOnaW4gYmVsaXJzaXogYmlsZ2kiCisKKyM6IGJyYW5jaC5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiJyVzJyBnZcOnZXJsaSBiaXIgZGFsIGFkxLEgZGXEn2lsLiIKKworIzogYnJhbmNoLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkEgYnJhbmNoIG5hbWVkICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICInJXMnIGFkxLFuZGEgYmlyIGRhbCBoYWxpaGF6xLFyZGEgdmFyLiIKKworIzogYnJhbmNoLmM6MjEzCittc2dpZCAiQ2Fubm90IGZvcmNlIHVwZGF0ZSB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJHZcOnZXJsaSBkYWwgem9ybGEgZ8O8bmNlbGxlbmVtaXlvci4iCisKKyM6IGJyYW5jaC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50ICclcycgaXMgbm90IGEgYnJhbmNoLiIKK21zZ3N0ciAixLB6bGVtZSBiaWxnaXNpIGF5YXJsYW5hbcSxeW9yOyBiYcWfbGFuZ8Sxw6cgbm9rdGFzxLEgJyVzJyBiaXIgZGFsIGRlxJ9pbC4iCisKKyM6IGJyYW5jaC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJpc3RlbmVuIMO8c3RrYXluYWsgZGFsxLEgJyVzJyBtZXZjdXQgZGXEn2lsIgorCisjOiBicmFuY2guYzoyMzcKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyBvbiBiYXNpbmcgeW91ciB3b3JrIG9uIGFuIHVwc3RyZWFtXG4iCisiYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXQgdGhlIHJlbW90ZSwgeW91IG1heSBuZWVkIHRvXG4iCisicnVuIFwiZ2l0IGZldGNoXCIgdG8gcmV0cmlldmUgaXQuXG4iCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyB0byBwdXNoIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggdGhhdFxuIgorIndpbGwgdHJhY2sgaXRzIHJlbW90ZSBjb3VudGVycGFydCwgeW91IG1heSB3YW50IHRvIHVzZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB0byBzZXQgdGhlIHVwc3RyZWFtIGNvbmZpZyBhcyB5b3UgcHVzaC4iCittc2dzdHIgIiIKKyJcbiIKKyJFxJ9lciDDp2FsxLHFn21hbsSxesSxIHV6YWsga29udW1kYSBoYWxpaGF6xLFyZGEgdmFyIG9sYW4gYmlyIGRhbFxuIgorIsO8emVyaW5lIHRlbWVsbGVuZGlybWV5aSB0YXNhcmzEsXlvcnNhbsSxeiDDtm5jZSBcImdpdCBmZXRjaFwiXG4iCisiw6dhbMSxxZ90xLFyYXJhayBvbnUgZ2V0aXJtZW5peiBnZXJla2ViaWxpci5cbiIKKyJcbiIKKyJFxJ9lciB1emFrIGtvbnVtZGFraSBlxZ9pbmkgaXpsZXllY2VrIHllcmVsIGJpciBkYWwgaXRtZXlpXG4iCisidGFzYXJsxLF5b3JzYW7EsXogaXRtZSBzxLFyYXPEsW5kYSDDvHN0a2F5bmFrIHlhcMSxbGFuZMSxcm1hc8SxbsSxXG4iCisiZGEgYXlhcmxhbWFrIGnDp2luIFwiZ2l0IHB1c2ggLXVcIiBrdWxsYW5tYWsgaXN0ZXllYmlsaXJzaW5pei4iCisKKyM6IGJyYW5jaC5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIkdlw6dlcmxpIGJpciBuZXNuZSBhZMSxIGRlxJ9pbDogJyVzJy4iCisKKyM6IGJyYW5jaC5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJCZWxpcnNpeiBuZXNuZSBhZMSxOiAnJXMnLiIKKworIzogYnJhbmNoLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIkdlw6dlcmxpIGJpciBkYWwgbm9rdGFzxLEgZGXEn2lsOiAnJXMnLiIKKworIzogYnJhbmNoLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICInJXMnIMOnxLFrxLHFn8SxICclcycga29udW11bmRhIGhhbGloYXrEsXJkYSB5YXDEsWxtxLHFnyIKKworIzogYnJhbmNoLmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgb2Ygd29ya2luZyB0cmVlICVzIGlzIG5vdCB1cGRhdGVkIgorbXNnc3RyICIlcyDDp2FsxLHFn21hIGHEn2FjxLFuxLFuIEhFQUQnaSBnw7xuY2VsbGVubWVtacWfIgorCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICInJXMnIGJpciB2MiBkZW1ldCBkb3N5YXPEsSBnaWJpIGfDtnLDvG5tw7x5b3IiCisKKyM6IGJ1bmRsZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAidGFuxLFtbGFuYW1heWFuIMO8c3RiaWxnaTogJXMlcyAoJWQpIgorCisjOiBidW5kbGUuYzo5MCByZXJlcmUuYzo0ODAgcmVyZXJlLmM6NjkwIHNlcXVlbmNlci5jOjIyNTggc2VxdWVuY2VyLmM6MzAxNgorIzogYnVpbHRpbi9jb21taXQuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAiJyVzJyBhw6fEsWxhbWFkxLEiCisKKyM6IGJ1bmRsZS5jOjE0MworbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICJEZXBvIGHFn2HEn8SxZGFraSDDtm5jZWRlbiBnZXJla2VuIGfDtm5kZXJpbGVyZSBpeWUgZGXEn2lsOiIKKworIzogYnVuZGxlLmM6MTQ2Cittc2dpZCAibmVlZCBhIHJlcG9zaXRvcnkgdG8gdmVyaWZ5IGEgYnVuZGxlIgorbXNnc3RyICJiaXIgZGVtZXRpIGRvxJ9ydWxhbWFrIGnDp2luIGJpciBkZXBvIGdlcmVraXlvciIKKworIzogYnVuZGxlLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJEZW1ldCDFn3UgYmHFn3Z1cnV5dSBpw6dlcml5b3I6IgorbXNnc3RyWzFdICJEZW1ldCDFn3UgJWQgYmHFn3Z1cnV5dSBpw6dlcml5b3I6IgorCisjOiBidW5kbGUuYzoyMDQKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAiRGVtZXQgdGFtIGJpciBnZcOnbWnFnyBrYXlkxLFuxLEgeWF6YXIuIgorCisjOiBidW5kbGUuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIkRlbWV0IMWfdSBnw7ZuZGVyaXlpIGdlcmVrdGlyaXlvcjoiCittc2dzdHJbMV0gIkRlbWV0IMWfdSAlZCBnw7ZuZGVyaXlpIGdlcmVrdGlyaXlvcjoiCisKKyM6IGJ1bmRsZS5jOjI3MworbXNnaWQgInVuYWJsZSB0byBkdXAgYnVuZGxlIGRlc2NyaXB0b3IiCittc2dzdHIgImRlbWV0IGHDp8Sxa2xhecSxY8Sxc8SxIMOnb8SfYWx0xLFsYW3EsXlvciIKKworIzogYnVuZGxlLmM6MjgwCittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFjay1vYmplY3RzIG9ydGF5YSDDp8Sxa2FyxLFsYW1hZMSxIgorCisjOiBidW5kbGUuYzoyOTEKK21zZ2lkICJwYWNrLW9iamVjdHMgZGllZCIKK21zZ3N0ciAicGFjay1vYmplY3RzIHNvbmxhbmTEsSIKKworIzogYnVuZGxlLmM6MzMzCittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAicmV2LWxpc3Qgc29ubGFuZMSxIgorCisjOiBidW5kbGUuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiCittc2dzdHIgIiclcycgYmHFn3Z1cnVzdSByZXZpenlvbiBsaXN0ZXNpIHNlw6dlbmVrbGVyaSB0YXJhZsSxbmRhbiBkxLHFn2xhbmTEsSIKKworIzogYnVuZGxlLmM6NDYxIGJ1aWx0aW4vbG9nLmM6MjAzIGJ1aWx0aW4vbG9nLmM6MTgxNCBidWlsdGluL3Nob3J0bG9nLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgInRhbsSxbWxhbmFtYXlhbiBkZcSfacWfa2VuOiAlcyIKKworIzogYnVuZGxlLmM6NDY5Cittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgIkJvxZ8gZGVtZXQgb2x1xZ90dXJtYSByZWRkZWRpbGl5b3IuIgorCisjOiBidW5kbGUuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICInJXMnIG9sdcWfdHVydWxhbcSxeW9yIgorCisjOiBidW5kbGUuYzo1MDQKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgImluZGV4LXBhY2sgc29ubGFuZMSxIgorCisjOiBjb2xvci5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yIHZhbHVlOiAlLipzIgorbXNnc3RyICJnZcOnZXJzaXogcmVuayBkZcSfZXJpOiAlLipzIgorCisjOiBjb21taXQuYzo1MSBzZXF1ZW5jZXIuYzoyNzE5IGJ1aWx0aW4vYW0uYzozNTkgYnVpbHRpbi9hbS5jOjQwMworIzogYnVpbHRpbi9hbS5jOjEzNzEgYnVpbHRpbi9hbS5jOjIwMTQgYnVpbHRpbi9yZXBsYWNlLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAiJXMgYXlyxLHFn3TEsXLEsWxhbWFkxLEiCisKKyM6IGNvbW1pdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzIGJpciBnw7ZuZGVyaSBkZcSfaWwhIgorCisjOiBjb21taXQuYzoxOTMKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIGlzIGRlcHJlY2F0ZWRcbiIKKyJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIEdpdCB2ZXJzaW9uLlxuIgorIlxuIgorIlBsZWFzZSB1c2UgXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiXG4iCisidG8gY29udmVydCB0aGUgZ3JhZnRzIGludG8gcmVwbGFjZSByZWZzLlxuIgorIlxuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCittc2dzdHIgIiIKKyI8R0lUX0RJUj4vaW5mby9ncmFmdHMgZGVzdGXEn2kgYXJ0xLFrIGt1bGxhbsSxbSBkxLHFn8SxXG4iCisidmUgaWxlcmlraSBiaXIgR2l0IHPDvHLDvG3DvG5kZSBrYWxkxLFyxLFsYWNhay5cbiIKKyJcbiIKKyJBxZ/EsWxhcsSxIGRlxJ9pxZ90aXJtZSBiYcWfdnVydWxhcsSxbmEgZMO2bsO8xZ90w7xybWVrIGnDp2luXG4iCisibMO8dGZlbiBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCIga3VsbGFuxLFuLlxuIgorIlxuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiXG4iCisia3VsbGFuYXJhayBidSBpbGV0aXlpIGthcGF0YWJpbGlyc2luaXouIgorCisjOiBjb21taXQuYzoxMTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIiIKKyIlcyBnw7ZuZGVyaXNpbmluIGfDvHZlbmlsbWV5ZW4gYmlyIEdQRyBpbXphc8SxIHZhciwgaWRkaWF5YSBnw7ZyZSAlcyB0YXJhZsSxbmRhbi4iCisKKyM6IGNvbW1pdC5jOjExNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIiVzIGfDtm5kZXJpc2luaW4gaGF0YWzEsSBiaXIgR1BHIGltemFzxLEgdmFyLCBpZGRpYXlhIGfDtnJlICVzIHRhcmFmxLFuZGFuLiIKKworIzogY29tbWl0LmM6MTE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIgorbXNnc3RyICIlcyBnw7ZuZGVyaXNpbmluIGJpciBHUEcgaW16YXPEsSB5b2suIgorCisjOiBjb21taXQuYzoxMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAiJXMgZ8O2bmRlcmlzaW5pbiAlcyB0YXJhZsSxbmRhbiBzYcSfbGFuYW4gZMO8emfDvG4gYmlyIEdQRyBpbXphc8SxIHZhclxuIgorCisjOiBjb21taXQuYzoxNDE3Cittc2dpZCAiIgorIldhcm5pbmc6IGNvbW1pdCBtZXNzYWdlIGRpZCBub3QgY29uZm9ybSB0byBVVEYtOC5cbiIKKyJZb3UgbWF5IHdhbnQgdG8gYW1lbmQgaXQgYWZ0ZXIgZml4aW5nIHRoZSBtZXNzYWdlLCBvciBzZXQgdGhlIGNvbmZpZ1xuIgorInZhcmlhYmxlIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gdGhlIGVuY29kaW5nIHlvdXIgcHJvamVjdCB1c2VzLlxuIgorbXNnc3RyICIiCisiVXlhcsSxOiBHw7ZuZGVyaSBpbGV0aXNpIFVURi04J2UgdXltYWTEsS5cbiIKKyLEsGxldGl5aSBkw7x6ZWx0dGlrdGVuIHNvbnJhIGJ1bnUgZGXEn2nFn3Rpcm1layBpc3RleWViaWxpciB2ZXlhXG4iCisiaTE4bi5jb21taXRlbmNvZGluZyB5YXDEsWxhbmTEsXJtYSBkZcSfacWfa2VuaW5pIHByb2plbml6aW4ga3VsbGFuZMSxxJ/EsVxuIgorImtvZGxhbWEgaWxlIGRlxJ9pxZ90aXJtZWsgaXN0ZXllYmlsaXJzaW5pei5cbiIKKworIzogY29tbWl0LWdyYXBoLmM6MTIyCittc2dpZCAiY29tbWl0LWdyYXBoIGZpbGUgaXMgdG9vIHNtYWxsIgorbXNnc3RyICJjb21taXQtZ3JhcGggZG9zeWFzxLEgcGVrIGvDvMOnw7xrIgorCisjOiBjb21taXQtZ3JhcGguYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHNpZ25hdHVyZSAlWCBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUgJVgiCittc2dzdHIgImNvbW1pdC1ncmFwaCBpbXphc8SxICVYLCAlWCBpbGUgZcWfbGXFn21peW9yIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAiY29tbWl0LWdyYXBoIHPDvHLDvG3DvCAleCwgJVggaWxlIGXFn2xlxZ9taXlvciIKKworIzogY29tbWl0LWdyYXBoLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXNoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAiY29tbWl0LWdyYXBoIHNhxJ9sYW1hIHPDvHLDvG3DvCAlWCwgJVggaWxlIGXFn2xlxZ9taXlvciIKKworIzogY29tbWl0LWdyYXBoLmM6MjI2Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGxvb2t1cCB0YWJsZSBlbnRyeSBtaXNzaW5nOyBmaWxlIG1heSBiZSBpbmNvbXBsZXRlIgorbXNnc3RyICIiCisiY29tbWl0LWdyYXBoIGlyaSBwYXLDp2EgYXJhbWEgdGFibG9zdSBnaXJkaXNpIGVrc2lrOyBkb3N5YSB0YW0gb2xtYXlhYmlsaXIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaW1wcm9wZXIgY2h1bmsgb2Zmc2V0ICUwOHglMDh4IgorbXNnc3RyICJjb21taXQtZ3JhcGggYmnDp2ltc2l6IGlyaSBwYXLDp2Egb2ZzZXRpICUwOHglMDh4IgorCisjOiBjb21taXQtZ3JhcGguYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGlkICUwOHggYXBwZWFycyBtdWx0aXBsZSB0aW1lcyIKK21zZ3N0ciAiY29tbWl0LWdyYXBoIGlyaSBwYXLDp2EgbnVtYXJhc8SxICUwOHggYmlyZGVuIMOnb2sgZ8O2csO8bsO8eW9yIgorCisjOiBjb21taXQtZ3JhcGguYzozNDMKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIG5vIGJhc2UgZ3JhcGhzIGNodW5rIgorbXNnc3RyICJjb21taXQtZ3JhcGggdGVtZWwgZ3JhZmnEn2kgaXJpIHBhcsOnYXPEsW5hIGl5ZSBkZcSfaWwiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM1MworbXNnaWQgImNvbW1pdC1ncmFwaCBjaGFpbiBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAiY29tbWl0LWdyYXBoIHppbmNpcmkgZcWfbGXFn21peW9yIgorCisjOiBjb21taXQtZ3JhcGguYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQtZ3JhcGggY2hhaW46IGxpbmUgJyVzJyBub3QgYSBoYXNoIgorbXNnc3RyICJnZcOnZXJzaXogY29tbWl0LWdyYXBoIHppbmNpcmk6ICclcycuIHNhdMSxciBiaXIgc2HEn2xhbWEgZGXEn2lsIgorCisjOiBjb21taXQtZ3JhcGguYzo0MjUKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBhbGwgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICJ0w7xtIGNvbW1pdC1ncmFwaCBkb3N5YWxhcsSxIGJ1bHVuYW3EsXlvciIKKworIzogY29tbWl0LWdyYXBoLmM6NTU4IGNvbW1pdC1ncmFwaC5jOjYxOAorbXNnaWQgImludmFsaWQgY29tbWl0IHBvc2l0aW9uLiBjb21taXQtZ3JhcGggaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgImdlw6dlcnNpeiBnw7ZuZGVyaSBrb251bXUuIGNvbW1pdC1ncmFwaCBiw7x5w7xrIG9sYXPEsWzEsWtsYSBoYXNhciBnw7ZybcO8xZ8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiCittc2dzdHIgIiVzIGfDtm5kZXJpc2kgYnVsdW5hbWFkxLEiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjg1MiBidWlsdGluL2FtLmM6MTI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICIlcyBnw7ZuZGVyaXNpIGF5csSxxZ90xLFyxLFsYW3EsXlvciIKKworIzogY29tbWl0LWdyYXBoLmM6MTAxMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCB0eXBlIG9mIG9iamVjdCAlcyIKK21zZ3N0ciAiJXMgbmVzbmVzaW5pbiB0w7xyw7wgYWzEsW5hbcSxeW9yIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDQzCittc2dpZCAiTG9hZGluZyBrbm93biBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiR8O2bmRlcmkgZ3JhZmnEn2luZGVraSBiaWxpbmVuIGfDtm5kZXJpbGVyIHnDvGtsZW5peW9yIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDYwCittc2dpZCAiRXhwYW5kaW5nIHJlYWNoYWJsZSBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiR8O2bmRlcmkgZ3JhZmnEn2luZGVraSB1bGHFn8SxbGFiaWxpciBnw7ZuZGVyaWxlciBnZW5pxZ9sZXRpbGl5b3IiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNzkKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJHw7ZuZGVyaSBncmFmacSfaW5kZWtpIGfDtm5kZXJpIGltbGVyaSB0ZW1pemxlbml5b3IiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwOTgKK21zZ2lkICJDb21wdXRpbmcgY29tbWl0IGdyYXBoIGdlbmVyYXRpb24gbnVtYmVycyIKK21zZ3N0ciAiR8O2bmRlcmkgZ3JhZmnEn2kga3XFn2FrIHNhecSxbGFyxLEgaGVzYXBsYW7EsXlvciIKKworIzogY29tbWl0LWdyYXBoLmM6MTE3MworIywgYy1mb3JtYXQKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrcyIKK21zZ3N0clswXSAiR8O2bmRlcmkgZ3JhZmnEn2kgacOnaW4gZ8O2bmRlcmlsZXIgJWQgcGFrZXR0ZSBidWx1bnV5b3IiCittc2dzdHJbMV0gIkfDtm5kZXJpIGdyYWZpxJ9pIGnDp2luIGfDtm5kZXJpbGVyICVkIHBha2V0dGUgYnVsdW51eW9yIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGFkZGluZyBwYWNrICVzIgorbXNnc3RyICIlcyBwYWtldGkgZWtsZW5pcmtlbiBoYXRhIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgaW5kZXggZm9yICVzIgorbXNnc3RyICIlcyBpw6dpbiBpbmRla3MgYcOnxLFsxLFya2VuIGhhdGEiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmcyIKK21zZ3N0clswXSAiR8O2bmRlcmkgZ3JhZmnEn2kgacOnaW4gZ8O2bmRlcmlsZXIgJWQgYmHFn3Z1cnVkYW4gYnVsdW51eW9yIgorbXNnc3RyWzFdICJHw7ZuZGVyaSBncmFmacSfaSBpw6dpbiBnw7ZuZGVyaWxlciAlZCBiYcWfdnVydWRhbiBidWx1bnV5b3IiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgb2JqZWN0IGlkOiAlcyIKK21zZ3N0ciAiZ2XDp2Vyc2l6IGfDtm5kZXJpIG5lc25lIG51bWFyYXPEsTogJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNDkKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBhbW9uZyBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorIkfDtm5kZXJpIGdyYWZpxJ9pIGnDp2luIGfDtm5kZXJpbGVyIHBha2V0bGVubWnFnyBuZXNuZWxlciBhcmFzxLFuZGFuIGJ1bHVudXlvciIKKworIzogY29tbWl0LWdyYXBoLmM6MTI2NAorbXNnaWQgIkNvdW50aW5nIGRpc3RpbmN0IGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJHw7ZuZGVyaSBncmFmacSfaW5kZWtpIGJlbGlyZ2luIGfDtm5kZXJpbGVyIHNhecSxbMSxeW9yIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjk0Cittc2dpZCAiRmluZGluZyBleHRyYSBlZGdlcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIkfDtm5kZXJpIGdyYWZpxJ9pbmRla2kgZWsgc8SxbsSxcmxhciBidWx1bnV5b3IiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNDAKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29ycmVjdCBudW1iZXIgb2YgYmFzZSBncmFwaCBpZHMiCittc2dzdHIgInRlbWVsIGdyYWZpxJ9pIG51bWFyYWxhcsSxbsSxbiBkb8SfcnUgc2F5xLFzxLEgeWF6xLFsYW1hZMSxIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzczIG1pZHguYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIgorbXNnc3RyICIlcyDDtm5jw7wgZGl6aW5sZXJpIG9sdcWfdHVydWxhbcSxeW9yIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzg1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMwNiBidWlsdGluL3JlcGFjay5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgIiclcycgb2x1xZ90dXJ1bGFtxLF5b3IiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3MiCittc2dpZF9wbHVyYWwgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzZXMiCittc2dzdHJbMF0gIkfDtm5kZXJpIGdyYWZpxJ9pICVkIGdlw6dpxZ90ZSB5YXrEsWzEsXlvciIKK21zZ3N0clsxXSAiR8O2bmRlcmkgZ3JhZmnEn2kgJWQgZ2XDp2nFn3RlIHlhesSxbMSxeW9yIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDg2Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gY29tbWl0LWdyYXBoIGNoYWluIGZpbGUiCittc2dzdHIgImNvbW1pdC1ncmFwaCB6aW5jaXIgZG9zeWFzxLEgYcOnxLFsYW3EsXlvciIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ5OAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgYmFzZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAidGVtZWwgY29tbWl0LWdyYXBoIGRvc3lhc8SxIHllbmlkZW4gYWRsYW5kxLFyxLFsYW1hZMSxIgorCisjOiBjb21taXQtZ3JhcGguYzoxNTE4Cittc2dpZCAiZmFpbGVkIHRvIHJlbmFtZSB0ZW1wb3JhcnkgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgImdlw6dpY2kgY29tbWl0LWdyYXBoIGRvc3lhc8SxIHllbmlkZW4gYWRsYW5kxLFyxLFsYW1hZMSxIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjMxCittc2dpZCAiU2Nhbm5pbmcgbWVyZ2VkIGNvbW1pdHMiCittc2dzdHIgIkJpcmxlxZ90aXJpbGVuIGfDtm5kZXJpbGVyIHRhcmFuxLF5b3IiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkdXBsaWNhdGUgY29tbWl0IGlkICVzIgorbXNnc3RyICJiZWtsZW5tZWRpayB5aW5lbGVubWnFnyBnw7ZuZGVyaSBudW1hcmFzxLEgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NjUKK21zZ2lkICJNZXJnaW5nIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiY29tbWl0LWdyYXBoIGJpcmxlxZ90aXJpbGl5b3IiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIGNvbW1pdCBncmFwaCBmb3JtYXQgY2Fubm90IHdyaXRlICVkIGNvbW1pdHMiCittc2dzdHIgImfDtm5kZXJpIGdyYWZpxJ9pIGJpw6dpbWkgJWQgZ8O2bmRlcml5aSB5YXphbcSxeW9yIgorCisjOiBjb21taXQtZ3JhcGguYzoxODU1Cittc2dpZCAidG9vIG1hbnkgY29tbWl0cyB0byB3cml0ZSBncmFwaCIKK21zZ3N0ciAiZ3JhZmlrIHlhemFiaWxtZWsgacOnaW4gw6dvayBmYXpsYSBnw7ZuZGVyaSIKKworIzogY29tbWl0LWdyYXBoLmM6MTk0NAorbXNnaWQgInRoZSBjb21taXQtZ3JhcGggZmlsZSBoYXMgaW5jb3JyZWN0IGNoZWNrc3VtIGFuZCBpcyBsaWtlbHkgY29ycnVwdCIKK21zZ3N0ciAiIgorImNvbW1pdC1ncmFwaCBkb3N5YXPEsW7EsW4gc2HEn2xhbWEgdG9wbGFtxLEgeWFubMSxxZ8gdmUgYsO8ecO8ayBvbGFzxLFsxLFrbGEgaGFzYXIgIgorImfDtnJtw7zFnyIKKworIzogY29tbWl0LWdyYXBoLmM6MTk1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBPSUQgb3JkZXI6ICVzIHRoZW4gJXMiCittc2dzdHIgImNvbW1pdC1ncmFwaCBoYXRhbMSxIG5lc25lIHRhbsSxbWxhecSxY8SxIHPEsXJhc8SxbmEgaXllOiAlcywgc29ucmEgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NjQgY29tbWl0LWdyYXBoLmM6MTk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBmYW5vdXQgdmFsdWU6IGZhbm91dFslZF0gPSAldSAhPSAldSIKK21zZ3N0ciAiY29tbWl0LWdyYXBoIGhhdGFsxLEgZmFub3V0IGRlxJ9lcmluZSBpeWU6IGZhbm91dFslZF0gPSAldSAhPSAldSIKKworIzogY29tbWl0LWdyYXBoLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gY29tbWl0LWdyYXBoIgorbXNnc3RyICIlcyBnw7ZuZGVyaXNpIGNvbW1pdC1ncmFwaCd0YW4gYXlyxLHFn3TEsXLEsWxhbWFkxLEiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5ODkKK21zZ2lkICJWZXJpZnlpbmcgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIkfDtm5kZXJpIGdyYWZpxJ9pbmRla2kgZ8O2bmRlcmlsZXIgZG/En3J1bGFuxLF5b3IiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIG9iamVjdCBkYXRhYmFzZSBmb3IgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisiJXMgZ8O2bmRlcmlzaSBjb21taXQtZ3JhcGggacOnaW4gb2xhbiBuZXNuZSB2ZXJpdGFiYW7EsW5kYW4gYXlyxLHFn3TEsXLEsWxhbWFkxLEiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiIgorImNvbW1pdC1ncmFwaCd0ZWtpICVzIGfDtm5kZXJpc2kgacOnaW4gb2xhbiBrw7ZrIGHEn2HDpyBuZXNuZSB0YW7EsW1sYXnEsWPEsXPEsSAlcyAhPSAiCisiJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBsaXN0IGZvciBjb21taXQgJXMgaXMgdG9vIGxvbmciCittc2dzdHIgIiVzIGfDtm5kZXJpc2kgacOnaW4gb2xhbiBjb21taXQtZ3JhcGggw7xzdCDDtmdlIGxpc3Rlc2kgw6dvayB1enVuIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgZm9yICVzIGlzICVzICE9ICVzIgorbXNnc3RyICIlcyBpw6dpbiBvbGFuIGNvbW1pdC1ncmFwaCDDvHN0IMO2Z2VzaSAlcyAhPSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjA0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyB0ZXJtaW5hdGVzIGVhcmx5IgorbXNnc3RyICIiCisiJXMgZ8O2bmRlcmlzaSBpw6dpbiBvbGFuIGNvbW1pdC1ncmFwaCDDvHN0IMO2Z2UgbGlzdGVzaSBlcmtlbmRlbiBzb25sYW7EsXlvciIKKworIzogY29tbWl0LWdyYXBoLmM6MjA0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY29tbWl0LWdyYXBoIGhhcyBnZW5lcmF0aW9uIG51bWJlciB6ZXJvIGZvciBjb21taXQgJXMsIGJ1dCBub24temVybyBlbHNld2hlcmUiCittc2dzdHIgIiIKKyIlcyBnw7ZuZGVyaXNpIGnDp2luIGNvbW1pdC1ncmFwaCBrdcWfYWsgc2F5xLFzxLEgc8SxZsSxciBhbmNhayBiYcWfa2EgeWVybGVyZGUgIgorInPEsWbEsXJkYW4gZmFya2zEsSIKKworIzogY29tbWl0LWdyYXBoLmM6MjA1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY29tbWl0LWdyYXBoIGhhcyBub24temVybyBnZW5lcmF0aW9uIG51bWJlciBmb3IgY29tbWl0ICVzLCBidXQgemVybyBlbHNld2hlcmUiCittc2dzdHIgIiIKKyIlcyBnw7ZuZGVyaXNpIGnDp2luIGNvbW1pdC1ncmFwaCBrdcWfYWsgc2F5xLFzxLEgc8SxZsSxcmRhbiBmYXJrbMSxLCBhbmNhayBiYcWfa2EgIgorInllcmxlcmRlIHPEsWbEsXIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGdlbmVyYXRpb24gZm9yIGNvbW1pdCAlcyBpcyAldSAhPSAldSIKK21zZ3N0ciAiJXMgZ8O2bmRlcmlzaSBpw6dpbiBjb21taXQtZ3JhcGgga3XFn2HEn8SxICV1ICE9ICV1IgorCisjOiBjb21taXQtZ3JhcGguYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCBkYXRlIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKK21zZ3N0ciAiIgorIiVzIGfDtm5kZXJpc2kgacOnaW4gY29tbWl0LWdyYXBoIGnDp2luZGVraSBnw7ZuZGVyaSB0YXJpaGkgJTxQUkl1TUFYPiAhPSAiCisiJTxQUkl1TUFYPiIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJiZWxsZWsgdMO8a2VuZGkiCisKKyM6IGNvbmZpZy5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhjZWVkZWQgbWF4aW11bSBpbmNsdWRlIGRlcHRoICglZCkgd2hpbGUgaW5jbHVkaW5nXG4iCisiXHQlc1xuIgorImZyb21cbiIKKyJcdCVzXG4iCisiVGhpcyBtaWdodCBiZSBkdWUgdG8gY2lyY3VsYXIgaW5jbHVkZXMuIgorbXNnc3RyICIiCisixZ91IGnDp2VyaWxpcmtlbiBvbGFiaWxlY2VrIGVuIMOnb2sgacOnZXJtZSBkZXJpbmxpxJ9pICglZCkgYcWfxLFsZMSxXG4iCisiXHQlc1xuIgorIsWfdXJhZGFuOlxuIgorIlx0JXNcbiIKKyJCdSBkYWlyZXNlbCBpw6dlcm1lbGVyZGVuIGRvbGF5xLEgb2xhYmlsaXIuIgorCisjOiBjb25maWcuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4cGFuZCBpbmNsdWRlIHBhdGggJyVzJyIKK21zZ3N0ciAiacOnZXJtZSB5b2x1ICclcycgZ2VuacWfbGV0aWxlbWVkaSIKKworIzogY29uZmlnLmM6MTUxCittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICJnw7ZyZWNlbGkgeWFwxLFsYW5kxLFybWEgacOnZXJtZWxlcmkgZG9zeWFsYXJkYW4gZ2VsbWVsaSIKKworIzogY29uZmlnLmM6MTk3Cittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGUgY29uZGl0aW9uYWxzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICJnw7ZyZWNlbGkgeWFwxLFsYW5kxLFybWEgacOnZXJtZSBrb8WfdWxsdWxhcsSxIGRvc3lhbGFyZGFuIGdlbG1lbGkiCisKKyM6IGNvbmZpZy5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiBhIHNlY3Rpb246ICVzIgorbXNnc3RyICJhbmFodGFyIGJpciBiw7Zsw7xtIGnDp2VybWl5b3I6ICVzIgorCisjOiBjb25maWcuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gdmFyaWFibGUgbmFtZTogJXMiCittc2dzdHIgImFuYWh0YXIgYmlyIGRlxJ9pxZ9rZW4gYWTEsSBpw6dlcm1peW9yOiAlcyIKKworIzogY29uZmlnLmM6NDA2IHNlcXVlbmNlci5jOjI0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICJnZcOnZXJzaXogYW5haHRhcjogJXMiCisKKyM6IGNvbmZpZy5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIgorbXNnc3RyICJnZcOnZXJzaXogYW5haHRhciAoeWVuaXNhdMSxcik6ICVzIgorCisjOiBjb25maWcuYzo0NDggY29uZmlnLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGNvbmZpZyBwYXJhbWV0ZXI6ICVzIgorbXNnc3RyICJkw7x6bWVjZSB5YXDEsWxhbmTEsXJtYSBwYXJhbWV0cmVzaTogJXMiCisKKyM6IGNvbmZpZy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBmb3JtYXQgaW4gJXMiCittc2dzdHIgIiVzIGnDp2luZGUgZMO8em1lY2UgYmnDp2ltIgorCisjOiBjb25maWcuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGJsb2IgJXMiCittc2dzdHIgImhhdGFsxLEgeWFwxLFsYW5kxLFybWEgc2F0xLFyxLEgJWQsICVzIGlraWxpIG5lc25lc2kgacOnaW5kZSIKKworIzogY29uZmlnLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBmaWxlICVzIgorbXNnc3RyICJoYXRhbMSxIHlhcMSxbGFuZMSxcm1hIHNhdMSxcsSxICVkLCAlcyBkb3N5YXPEsSBpw6dpbmRlIgorCisjOiBjb25maWcuYzo4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJzdGFuZGFydCBnaXJkaSBpw6dpbmRlIGhhdGFsxLEgeWFwxLFsYW5kxLFybWEgc2F0xLFyxLEgJWQiCisKKyM6IGNvbmZpZy5jOjgzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3VibW9kdWxlLWJsb2IgJXMiCittc2dzdHIgImhhdGFsxLEgeWFwxLFsYW5kxLFybWEgc2F0xLFyxLEgJWQsICVzIGFsdG1vZMO8bCBpa2lsaSBuZXNuZXNpIGnDp2luZGUiCisKKyM6IGNvbmZpZy5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gY29tbWFuZCBsaW5lICVzIgorbXNnc3RyICJoYXRhbMSxIHlhcMSxbGFuZMSxcm1hIHNhdMSxcsSxICVkLCAlcyBrb211dCBzYXTEsXLEsSBpw6dpbmRlIgorCisjOiBjb25maWcuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIgorbXNnc3RyICJoYXRhbMSxIHlhcMSxbGFuZMSxcm1hIHNhdMSxcsSxICVkLCAlcyBpw6dpbmRlIgorCisjOiBjb25maWcuYzo5NzgKK21zZ2lkICJvdXQgb2YgcmFuZ2UiCittc2dzdHIgImVyaW0gZMSxxZ/EsSIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAiaW52YWxpZCB1bml0IgorbXNnc3RyICJnZcOnZXJzaXogYmlyaW0iCisKKyM6IGNvbmZpZy5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogJXMiCittc2dzdHIgImhhdGFsxLEgc2F5xLFzYWwgeWFwxLFsYW5kxLFybWEgZGXEn2VyaSAnJXMnLCAnJXMnIGnDp2luOiAlcyIKKworIzogY29uZmlnLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGJsb2IgJXM6ICVzIgorbXNnc3RyICIiCisiaGF0YWzEsSBzYXnEsXNhbCB5YXDEsWxhbmTEsXJtYSBkZcSfZXJpICclcycsICclcycgacOnaW4sICVzIGlraWxpIG5lc25lc2kgacOnaW5kZTogIgorIiVzIgorCisjOiBjb25maWcuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIgorbXNnc3RyICIiCisiaGF0YWzEsSBzYXnEsXNhbCB5YXDEsWxhbmTEsXJtYSBkZcSfZXJpICclcycsICclcycgacOnaW4sICVzIGRvc3lhc8SxIGnDp2luZGU6ICVzIgorCisjOiBjb25maWcuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN0YW5kYXJkIGlucHV0OiAlcyIKK21zZ3N0ciAiIgorImhhdGFsxLEgc2F5xLFzYWwgeWFwxLFsYW5kxLFybWEgZGXEn2VyaSAnJXMnLCAnJXMnIGnDp2luLCBzdGFuZGFydCBnaXJkaSBpw6dpbmRlOiAlcyIKKworIzogY29uZmlnLmM6MTAwNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdWJtb2R1bGUtYmxvYiAlczogJXMiCittc2dzdHIgIiIKKyJoYXRhbMSxIHNhecSxc2FsIHlhcMSxbGFuZMSxcm1hIGRlxJ9lcmkgJyVzJywgJyVzJyBpw6dpbiwgJXMgYWx0bW9kw7xsIGlraWxpICIKKyJuZXNuZXNpIGnDp2luZGU6ICVzIgorCisjOiBjb25maWcuYzoxMDEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiCittc2dzdHIgIiIKKyJoYXRhbMSxIHNhecSxc2FsIHlhcMSxbGFuZMSxcm1hIGRlxJ9lcmkgJyVzJywgJyVzJyBpw6dpbiwgJXMga29tdXQgc2F0xLFyxLEgacOnaW5kZTogIgorIiVzIgorCisjOiBjb25maWcuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiAlcyIKK21zZ3N0ciAiaGF0YWzEsSBzYXnEsXNhbCB5YXDEsWxhbmTEsXJtYSBkZcSfZXJpICclcycsICclcycgacOnaW4sICVzIGnDp2luZGU6ICVzIgorCisjOiBjb25maWcuYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleHBhbmQgdXNlciBkaXIgaW46ICclcyciCittc2dzdHIgIsWfdXJhZGFraSBrdWxsYW7EsWPEsSBkaXppbmkgZ2VuacWfbGV0aWxlbWVkaTogJyVzJyIKKworIzogY29uZmlnLmM6MTExNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZvciAnJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJXMnLCAnJXMnIGnDp2luIGdlw6dlcmxpIGJpciB6YW1hbiBkYW1nYXPEsSBkZcSfaWwiCisKKyM6IGNvbmZpZy5jOjEyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJicmV2IGxlbmd0aCBvdXQgb2YgcmFuZ2U6ICVkIgorbXNnc3RyICJrxLFzYWx0bWEgdXp1bmx1xJ91IGVyaW0gZMSxxZ/EsW5kYTogJWQiCisKKyM6IGNvbmZpZy5jOjEyMjIgY29uZmlnLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAiaGF0YWzEsSB6bGliIHPEsWvEscWfdMSxcm1hIGTDvHpleWkgJWQiCisKKyM6IGNvbmZpZy5jOjEzMjUKK21zZ2lkICJjb3JlLmNvbW1lbnRDaGFyIHNob3VsZCBvbmx5IGJlIG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgImNvcmUuY29tbWVudENoYXIgeWFsbsSxemNhIGJpciBrYXJha3RlciBvbG1hbMSxIgorCisjOiBjb25maWcuYzoxMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIKK21zZ3N0ciAibmVzbmUgb2x1xZ90dXJtYSBpw6dpbiBnZcOnZXJzaXoga2lwOiAlcyIKKworIzogY29uZmlnLmM6MTQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICIlcyBpw6dpbiBoYXRhbMSxIG9sdcWfdHVydWxtdcWfIGRlxJ9lciIKKworIzogY29uZmlnLmM6MTQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiJXMgacOnaW4gaGF0YWzEsSBvbHXFn3R1cnVsbXXFnyBkZcSfZXI6ICVzIgorCisjOiBjb25maWcuYzoxNDU3Cittc2dpZCAibXVzdCBiZSBvbmUgb2Ygbm90aGluZywgbWF0Y2hpbmcsIHNpbXBsZSwgdXBzdHJlYW0gb3IgY3VycmVudCIKK21zZ3N0ciAibm90aGluZywgbWF0Y2hpbmcsIHNpbXBsZSwgdXBzdHJlYW0gdmV5YSBjdXJyZW50IGnDp2luZGVuIGJpcmkgb2xtYWzEsSIKKworIzogY29uZmlnLmM6MTUxOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgImhhdGFsxLEgcGFrZXQgc8Sxa8SxxZ90xLFybWEgZMO8emV5aSAlZCIKKworIzogY29uZmlnLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBjb25maWcgYmxvYiBvYmplY3QgJyVzJyIKK21zZ3N0ciAiJyVzJyB5YXDEsWxhbmTEsXJtYSBpa2lsaSBuZXNuZXNpIHnDvGtsZW5lbWl5b3IiCisKKyM6IGNvbmZpZy5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBibG9iIgorbXNnc3RyICInJXMnIGJhxZ92dXJ1c3UgaWtpbGkgYmlyIG5lc25leWUgacWfYXJldCBldG1peW9yIgorCisjOiBjb25maWcuYzoxNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIGNvbmZpZyBibG9iICclcyciCittc2dzdHIgIiclcycgeWFwxLFsYW5kxLFybWEgaWtpbGkgbmVzbmVzaSDDp8O2esO8bGVtaXlvciIKKworIzogY29uZmlnLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJXMiCittc2dzdHIgIiVzIGF5csSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiBjb25maWcuYzoxNzQzCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgImtvbXV0IHNhdMSxcsSxIHlhcMSxbGFuZMSxcm1hc8SxIGF5csSxxZ90xLFyxLFsYW3EsXlvciIKKworIzogY29uZmlnLmM6MjA5NworbXNnaWQgInVua25vd24gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyIKK21zZ3N0ciAieWFwxLFsYW5kxLFybWEgZG9zeWFsYXLEsSBva3VudXJrZW4gYmVrbGVubWVkaWsgYmlyIGhhdGEgb2x1xZ90dSIKKworIzogY29uZmlnLmM6MjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICJHZcOnZXJzaXogJXM6ICclcyciCisKKyM6IGNvbmZpZy5jOjIzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIHZhbHVlICclZCcgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwIgorbXNnc3RyICJzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgZGXEn2VyaSAnJWQnIDAgdmUgMTAwIGFyYXPEsW5kYSBvbG1hbMSxIgorCisjOiBjb25maWcuYzoyMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJXMnIGZyb20gY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAiJyVzJyBrb211dCBzYXTEsXLEsSB5YXDEsWxhbmTEsXJtYXPEsW5kYW4gYXlyxLHFn3TEsXLEsWxhbcSxeW9yIgorCisjOiBjb25maWcuYzoyMzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgdmFyaWFibGUgJyVzJyBpbiBmaWxlICclcycgYXQgbGluZSAlZCIKK21zZ3N0ciAiaGF0YWzEsSB5YXDEsWxhbmTEsXJtYSBkZcSfacWfa2VuaSAnJXMnLCAnJXMnIGRvc3lhc8SxICVkLiBzYXTEsXJkYSIKKworIzogY29uZmlnLmM6MjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZSAnJXMnIgorbXNnc3RyICJnZcOnZXJzaXogYsO2bMO8bSBhZMSxICclcyciCisKKyM6IGNvbmZpZy5jOjI0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiJXMgYmlyZGVuIMOnb2sgZGXEn2VyZSBpeWUiCisKKyM6IGNvbmZpZy5jOjI1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIG5ldyBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgInllbmkgeWFwxLFsYW5kxLFybWEgZG9zeWFzxLEgJXMgeWF6xLFsYW1hZMSxIgorCisjOiBjb25maWcuYzoyNzU0IGNvbmZpZy5jOjMwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIiVzIHlhcMSxbGFuZMSxcm1hIGRvc3lhc8SxIGtpbGl0bGVuZW1lZGkiCisKKyM6IGNvbmZpZy5jOjI3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyAlcyIKK21zZ3N0ciAiJXMgYcOnxLFsxLF5b3IiCisKKyM6IGNvbmZpZy5jOjI4MDAgYnVpbHRpbi9jb25maWcuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiZ2XDp2Vyc2l6IGRpemdpOiAlcyIKKworIzogY29uZmlnLmM6MjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICJnZcOnZXJzaXogeWFwxLFsYW5kxLFybWEgZG9zeWFzxLEgJXMiCisKKyM6IGNvbmZpZy5jOjI4MzggY29uZmlnLmM6MzA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJmc3RhdCBvbiAlcyBmYWlsZWQiCittc2dzdHIgIiVzIMO8emVyaW5kZSBmc3RhdCBiYcWfYXLEsXPEsXogb2xkdSIKKworIzogY29uZmlnLmM6Mjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAnJXMnIgorbXNnc3RyICInJXMnIG1tYXAgeWFwxLFsYW3EsXlvciIKKworIzogY29uZmlnLmM6Mjg1OCBjb25maWcuYzozMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNobW9kIG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiJXMgw7x6ZXJpbmRlIGNobW9kIGJhxZ9hcsSxc8SxeiBvbGR1IgorCisjOiBjb25maWcuYzoyOTQzIGNvbmZpZy5jOjMxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICIlcyB5YXDEsWxhbmTEsXJtYSBkb3N5YXPEsSB5YXrEsWxhbWFkxLEiCisKKyM6IGNvbmZpZy5jOjI5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIHRvICclcyciCittc2dzdHIgIiclcycsICclcycgb2xhcmFrIGF5YXJsYW5hbWFkxLEiCisKKyM6IGNvbmZpZy5jOjI5NzkgYnVpbHRpbi9yZW1vdGUuYzo2NTUgYnVpbHRpbi9yZW1vdGUuYzo4NDkgYnVpbHRpbi9yZW1vdGUuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVuc2V0ICclcyciCittc2dzdHIgIiclcycgYXlhcsSxIGdlcmkgYWzEsW5hbWFkxLEiCisKKyM6IGNvbmZpZy5jOjMwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWU6ICVzIgorbXNnc3RyICJnZcOnZXJzaXogYsO2bMO8bSBhZMSxOiAlcyIKKworIzogY29uZmlnLmM6MzIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIHZhbHVlIGZvciAnJXMnIgorbXNnc3RyICInJXMnIGnDp2luIGRlxJ9lciBla3NpayIKKworIzogY29ubmVjdC5jOjYxCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1cG9uIGluaXRpYWwgY29udGFjdCIKK21zZ3N0ciAidXphayB1w6cgaWxrIGlsZXRpxZ9pbWxlIGJpcmxpa3RlIGhhdHTEsSBrYXBhdHTEsSIKKworIzogY29ubmVjdC5jOjYzCittc2dpZCAiIgorIkNvdWxkIG5vdCByZWFkIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkuXG4iCisiXG4iCisiUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBhY2Nlc3MgcmlnaHRzXG4iCisiYW5kIHRoZSByZXBvc2l0b3J5IGV4aXN0cy4iCittc2dzdHIgIiIKKyJVemFrIGtvbnVtIGRlcG9zdSBva3VuYW1hZMSxLlxuIgorIlxuIgorIkzDvHRmZW4gZG/En3J1IGVyacWfaW0gaGFrbGFyxLFuYSBpeWUgb2xkdcSfdW51emRhbiB2ZVxuIgorImRlcG9udW4gdmFyIG9sZHXEn3VuZGFuIGVtaW4gb2x1bi4iCisKKyM6IGNvbm5lY3QuYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0ICclcyciCittc2dzdHIgInN1bnVjdSAnJXMnIGRlc3Rla2xlbWl5b3IiCisKKyM6IGNvbm5lY3QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBmZWF0dXJlICclcyciCittc2dzdHIgInN1bnVjdSAnJXMnIMO2emVsbGnEn2luaSBkZXN0ZWtsZW1peW9yIgorCisjOiBjb25uZWN0LmM6MTE0Cittc2dpZCAiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgY2FwYWJpbGl0aWVzIgorbXNnc3RyICJ5ZXRlbmVrbGVyZGVuIHNvbnJhIGZsb8WfIGJla2xlbml5b3JkdSIKKworIzogY29ubmVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBjYXBhYmlsaXRpZXMgYWZ0ZXIgZmlyc3QgbGluZSAnJXMnIgorbXNnc3RyICInJXMnIGlsayBzYXTEsXLEsW5kYW4gc29ucmEgeWV0ZW5la2xlciB5b2sgc2F5xLFsxLF5b3IiCisKKyM6IGNvbm5lY3QuYzoyNTIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCBjYXBhYmlsaXRpZXNee30iCittc2dzdHIgInByb3Rva29sIGhhdGFzxLE6IGJla2xlbm1lZGlrIHlldGVuZWtsZXJee30iCisKKyM6IGNvbm5lY3QuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYWxsb3cgc2hhLTEsIGdvdCAnJXMnIgorbXNnc3RyICJwcm90b2tvbCBoYXRhc8SxOiBzxLHEnyBzaGEtMSBiZWtsZW5peW9yZHUsICclcycgYWzEsW5kxLEiCisKKyM6IGNvbm5lY3QuYzoyNzUKK21zZ2lkICJyZXBvc2l0b3J5IG9uIHRoZSBvdGhlciBlbmQgY2Fubm90IGJlIHNoYWxsb3ciCittc2dzdHIgImRpxJ9lciB1w6d0YWtpIGRlcG8gc8SxxJ8gb2xhbWF6IgorCisjOiBjb25uZWN0LmM6MzEzCittc2dpZCAiaW52YWxpZCBwYWNrZXQiCittc2dzdHIgImdlw6dlcnNpeiBwYWtldCIKKworIzogY29ubmVjdC5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCAnJXMnIgorbXNnc3RyICJwcm90b2tvbCBoYXRhc8SxOiBiZWtsZW5tZWRpayAnJXMnIgorCisjOiBjb25uZWN0LmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbHMtcmVmcyByZXNwb25zZTogJXMiCittc2dzdHIgImdlw6dlcnNpeiBscy1yZWZzIHlhbsSxdMSxOiAlcyIKKworIzogY29ubmVjdC5jOjQ0NQorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIHJlZiBsaXN0aW5nIgorbXNnc3RyICJiYcWfdnVydSBsaXN0ZWxlbWVzaW5kZW4gc29ucmEgZmxvxZ8gYmVrbGVuaXlvcmR1IgorCisjOiBjb25uZWN0LmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sICclcycgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiJyVzJyBwcm90b2tvbMO8IGRlc3Rla2xlbm1peW9yIgorCisjOiBjb25uZWN0LmM6NTk1Cittc2dpZCAidW5hYmxlIHRvIHNldCBTT19LRUVQQUxJVkUgb24gc29ja2V0IgorbXNnc3RyICJzb2tldCDDvHplcmluZGUgU09fS0VFUEFMSVZFIGF5YXJsYW5hbcSxeW9yIgorCisjOiBjb25uZWN0LmM6NjM1IGNvbm5lY3QuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9va2luZyB1cCAlcyAuLi4gIgorbXNnc3RyICIlcyBhcmFuxLF5b3IuLi4iCisKKyM6IGNvbm5lY3QuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgJXMgKHBvcnQgJXMpICglcykiCittc2dzdHIgIiVzIGFyYW5hbcSxeW9yIChrYXDEsSAlcykgKCVzKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiTG9va2luZyB1cCAlcyAuLi4gIgorIzogY29ubmVjdC5jOjY0MyBjb25uZWN0LmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkb25lLlxuIgorIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCittc2dzdHIgIiIKKyJiaXR0aS5cbiIKKyLFnnVyYXlhIGJhxJ9sYW7EsXlvcjogJXMgKGthcMSxICVzKS4uLiIKKworIzogY29ubmVjdC5jOjY2NSBjb25uZWN0LmM6NzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gY29ubmVjdCB0byAlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIsWfdXJheWEgYmHEn2xhbmFtxLF5b3I6ICVzOlxuIgorIiVzIgorCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgorIzogY29ubmVjdC5jOjY3MSBjb25uZWN0LmM6NzQ4Cittc2dpZCAiZG9uZS4iCittc2dzdHIgImJpdHRpLiIKKworIzogY29ubmVjdC5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIgorbXNnc3RyICIlcyBhcmFuYW3EsXlvciAoJXMpIgorCisjOiBjb25uZWN0LmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcG9ydCAlcyIKK21zZ3N0ciAiYmlsaW5tZXllbiBrYXDEsSAlcyIKKworIzogY29ubmVjdC5jOjg0NSBjb25uZWN0LmM6MTE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIGhvc3RuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAiZ2FyaXAgbWFraW5lIGFkxLEgJyVzJyBlbmdlbGxlbmRpIgorCisjOiBjb25uZWN0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcG9ydCAnJXMnIGJsb2NrZWQiCittc2dzdHIgImdhcmlwIGthcMSxICclcycgZW5nZWxsZW5kaSIKKworIzogY29ubmVjdC5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhcnQgcHJveHkgJXMiCittc2dzdHIgInZla2lsICVzIGJhxZ9sYXTEsWxhbcSxeW9yIgorCisjOiBjb25uZWN0LmM6OTI4Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQ7IHNlZSAnZ2l0IGhlbHAgcHVsbCcgZm9yIHZhbGlkIHVybCBzeW50YXgiCittc2dzdHIgInlvbCBiZWxpcnRpbG1lZGk7IGdlw6dlcmxpIHVybCBzw7Z6ZGl6aW1pIGnDp2luICdnaXQgaGVscCBwdWxsJyB5YXrEsW4iCisKKyM6IGNvbm5lY3QuYzoxMTIzCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNCIKK21zZ3N0ciAic3NoIGRlxJ9pxZ9payBiacOnaW1pICdzaW1wbGUnIC00IGRlc3Rla2xlbWl5b3IiCisKKyM6IGNvbm5lY3QuYzoxMTM1Cittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNiIKK21zZ3N0ciAic3NoIGRlxJ9pxZ9payBiacOnaW1pICdzaW1wbGUnIC02IGRlc3Rla2xlbWl5b3IiCisKKyM6IGNvbm5lY3QuYzoxMTUyCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIHBvcnQiCittc2dzdHIgInNzaCBkZcSfacWfaWsgYmnDp2ltaSAnc2ltcGxlJyBrYXDEsSBheWFybGFtYXnEsSBkZXN0ZWtsZW1peW9yIgorCisjOiBjb25uZWN0LmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBhdGhuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAiZ2FyaXAgeW9sIGFkxLEgJyVzJyBlbmdlbGxlbmRpIgorCisjOiBjb25uZWN0LmM6MTMxMQorbXNnaWQgInVuYWJsZSB0byBmb3JrIgorbXNnc3RyICLDp2F0YWxsYW5hbcSxeW9yIgorCisjOiBjb25uZWN0ZWQuYzo5OCBidWlsdGluL2ZzY2suYzoyMDggYnVpbHRpbi9wcnVuZS5jOjQzCittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IgorbXNnc3RyICJCYcSfbGFudMSxIGRlbmV0bGVuaXlvciIKKworIzogY29ubmVjdGVkLmM6MTEwCittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiJ2dpdCByZXYtbGlzdCcgw6dhbMSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiBjb25uZWN0ZWQuYzoxMzAKK21zZ2lkICJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3QiCittc2dzdHIgInJldi1saXN0IHlhesSxbGFtYWTEsSIKKworIzogY29ubmVjdGVkLmM6MTM3Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgInJldi1saXN0J2luIHN0ZGluJ2kga2FwYXTEsWxhbWFkxLEiCisKKyM6IGNvbnZlcnQuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBjcmxmX2FjdGlvbiAlZCIKK21zZ3N0ciAiaXppbiB2ZXJpbG1leWVuIGNybGZfYWN0aW9uICVkIgorCisjOiBjb252ZXJ0LmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNSTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMiCittc2dzdHIgIkNSTEYgJXMgacOnaW5kZSBMRiBpbGUgZGXEn2nFn3RpcmlsZWNlayIKKworIzogY29udmVydC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJDUkxGICVzIGnDp2luZGUgTEYgaWxlIGRlxJ9pxZ90aXJpbGVjZWsuXG4iCisiRG9zeWEgc2l6aW4gw6dhbMSxxZ9tYSBkaXppbmluaXpkZSBrZW5kaSBvcmlqaW5hbCBzYXTEsXIgc29ubGFyxLFuYSBpeWUgb2xhY2FrLiIKKworIzogY29udmVydC5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIgorbXNnc3RyICJMRiAlcyBpw6dpbmRlIENSTEYgaWxlIGRlxJ9pxZ90aXJpbGVjZWsiCisKKyM6IGNvbnZlcnQuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiTEYgJXMgacOnaW5kZSBDUkxGIGlsZSBkZcSfacWfdGlyaWxlY2VrLlxuIgorIkRvc3lhIHNpemluIMOnYWzEscWfbWEgZGl6aW5pbml6ZGUga2VuZGkgb3JpamluYWwgc2F0xLFyIHNvbmxhcsSxbmEgaXllIG9sYWNhay4iCisKKyM6IGNvbnZlcnQuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHByb2hpYml0ZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICJCT00gJyVzJyBpw6dpbmRlIHlhc2FrbMSxLCBlxJ9lciAlcyBvbGFyYWsga29kbGFubcSxxZ9zYSIKKworIzogY29udmVydC5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBjb250YWlucyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJS4qcyBhcyAiCisid29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAiIgorIiclcycgZG9zeWFzxLEgYmlyIGJheXQgc8SxcmEgaW1pIChCT00pIGnDp2VyaXlvci4gTMO8dGZlbiDDp2FsxLHFn21hIGHEn2FjxLEgIgorImtvZGxhbWFzxLEgacOnaW4gVVRGLSUuKnMga3VsbGFuxLFuLiIKKworIzogY29udmVydC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcmVxdWlyZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICJCT00gJyVzJyBpw6dpbmRlIGdlcmVrbGksIGXEn2VyICVzIG9sYXJhayBrb2RsYW5txLHFn3NhIgorCisjOiBjb252ZXJ0LmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGlzIG1pc3NpbmcgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSVzQkUgb3IgVVRGLSIKKyIlc0xFIChkZXBlbmRpbmcgb24gdGhlIGJ5dGUgb3JkZXIpIGFzIHdvcmtpbmctdHJlZS1lbmNvZGluZy4iCittc2dzdHIgIiIKKyInJXMnIGRvc3lhc8SxbmRhIGJpciBiYXl0IHPEsXJhIGltaSAoQk9NKSBla3Npay4gTMO8dGZlbiDDp2FsxLHFn21hIGHEn2FjxLEgIgorImtvZGxhbWFzxLEgacOnaW4gVVRGLSVzQkUgdmV5YSBVVEYtJXNMRSAoYmF5dCBzxLFyYXPEsW5hIGfDtnJlKSBrdWxsYW7EsW4uIgorCisjOiBjb252ZXJ0LmM6NDE5IGNvbnZlcnQuYzo0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGVuY29kZSAnJXMnIGZyb20gJXMgdG8gJXMiCittc2dzdHIgIiclcycsICVzIGRlxJ9lcmluZGVuICVzIGRlxJ9lcmluZSBrb2RsYW5hbWFkxLEiCisKKyM6IGNvbnZlcnQuYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW5jb2RpbmcgJyVzJyBmcm9tICVzIHRvICVzIGFuZCBiYWNrIGlzIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiIgorIiclcycga29kbGFtYXPEsW7EsSAlcyAtPiAlcyBiacOnaW1pbmRlIHlhcMSxcCB0ZXJzaW5lIGTDtm5kw7xybWVrIGF5bsSxIMWfZXkgZGXEn2lsIgorCisjOiBjb252ZXJ0LmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmb3JrIHRvIHJ1biBleHRlcm5hbCBmaWx0ZXIgJyVzJyIKK21zZ3N0ciAiJyVzJyBkxLHFnyBzw7x6Z2VjaW5pIMOnYWzEscWfdMSxcm1hayBpw6dpbiDDp2F0YWxsYW1hIHlhcMSxbGFtxLF5b3IiCisKKyM6IGNvbnZlcnQuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZlZWQgdGhlIGlucHV0IHRvIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICJnaXJkaSAnJXMnIGTEscWfIHPDvHpnZWNpbmUgYmVzbGVuZW1peW9yIgorCisjOiBjb252ZXJ0LmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCAlZCIKK21zZ3N0ciAiJyVzJyBkxLHFnyBzw7x6Z2VjaSAlZCBpw6dpbiBiYcWfYXLEsXPEsXogb2xkdSIKKworIzogY29udmVydC5jOjczMCBjb252ZXJ0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZnJvbSBleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIiclcycgZMSxxZ8gc8O8emdlY2luZGVuIG9rdW1hIGJhxZ9hcsSxc8SxeiBvbGR1IgorCisjOiBjb252ZXJ0LmM6NzM2IGNvbnZlcnQuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICInJXMnIGTEscWfIHPDvHpnZWNpIGJhxZ9hcsSxc8SxeiBvbGR1IgorCisjOiBjb252ZXJ0LmM6ODM5Cittc2dpZCAidW5leHBlY3RlZCBmaWx0ZXIgdHlwZSIKK21zZ3N0ciAiYmVrbGVubWVkaWsgc8O8emdlw6cgdMO8csO8IgorCisjOiBjb252ZXJ0LmM6ODUwCittc2dpZCAicGF0aCBuYW1lIHRvbyBsb25nIGZvciBleHRlcm5hbCBmaWx0ZXIiCittc2dzdHIgImTEscWfIHPDvHpnZcOnIGnDp2luIHlvbCBhZMSxIHBlayB1enVuIgorCisjOiBjb252ZXJ0LmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHRlcm5hbCBmaWx0ZXIgJyVzJyBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUgYWx0aG91Z2ggbm90IGFsbCBwYXRocyBoYXZlICIKKyJiZWVuIGZpbHRlcmVkIgorbXNnc3RyICIiCisiJyVzJyBkxLHFnyBzw7x6Z2VjaSBhcnTEsWsga3VsbGFuxLFsYW3EsXlvciwgYW5jYWsgdMO8bSB5b2xsYXLEsW4gc8O8esO8bcO8IGJpdG1lZGkiCisKKyM6IGNvbnZlcnQuYzoxMjIzCittc2dpZCAidHJ1ZS9mYWxzZSBhcmUgbm8gdmFsaWQgd29ya2luZy10cmVlLWVuY29kaW5ncyIKK21zZ3N0ciAiZG/En3J1L3lhbmzEscWfIGdlw6dlcmxpIGJpciDDp2FsxLHFn21hIGHEn2FjxLEga29kbGFtYXPEsSBkZcSfaWwiCisKKyM6IGNvbnZlcnQuYzoxNDExIGNvbnZlcnQuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIiVzOiB0ZW1peiBzw7x6Z2XDpyAnJXMnIGJhxZ9hcsSxc8SxeiBvbGR1IgorCisjOiBjb252ZXJ0LmM6MTQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogc211ZGdlIGZpbHRlciAlcyBmYWlsZWQiCittc2dzdHIgIiVzOiBraXIgc8O8emdlY2kgJXMgYmHFn2FyxLFzxLF6IG9sZHUiCisKKyM6IGRhdGUuYzoxMzgKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICJnZWxlY2VrdGUiCisKKyM6IGRhdGUuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBzZWNvbmQgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IHNhbml5ZSDDtm5jZSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBzYW5peWUgw7ZuY2UiCisKKyM6IGRhdGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtaW51dGUgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IGRha2lrYSDDtm5jZSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBkYWtpa2Egw7ZuY2UiCisKKyM6IGRhdGUuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBob3VycyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gc2FhdCDDtm5jZSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBzYWF0IMO2bmNlIgorCisjOiBkYXRlLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBkYXlzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiBnw7xuIMO2bmNlIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IGfDvG4gw7ZuY2UiCisKKyM6IGRhdGUuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB3ZWVrcyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gaGFmdGEgw7ZuY2UiCittc2dzdHJbMV0gIiU8UFJJdU1BWD4gaGFmdGEgw7ZuY2UiCisKKyM6IGRhdGUuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiBheSDDtm5jZSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBheSDDtm5jZSIKKworIzogZGF0ZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIiCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMiCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gecSxbCIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiB5xLFsIgorCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVzLCAlPFBSSXVNQVg+IGF5IMO2bmNlIgorbXNnc3RyWzFdICIlcywgJTxQUkl1TUFYPiBheSDDtm5jZSIKKworIzogZGF0ZS5jOjE5NyBkYXRlLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4geWVhciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IHnEsWwgw7ZuY2UiCittc2dzdHJbMV0gIiU8UFJJdU1BWD4gecSxbCDDtm5jZSIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI3MgorbXNnaWQgIlByb3BhZ2F0aW5nIGlzbGFuZCBtYXJrcyIKK21zZ3N0ciAiRGVsdGEgYWRhc8SxIGltbGVyaSB5YXnEsWzEsXlvciIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdHJlZSBvYmplY3QgJXMiCittc2dzdHIgImhhdGFsxLEgYcSfYcOnIG5lc25lc2kgJXMiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgaXNsYW5kIHJlZ2V4IGZvciAnJXMnOiAlcyIKK21zZ3N0ciAiJyVzJyBpw6dpbiBkZWx0YSBhZGFzxLEgZMO8emVubGkgaWZhZGVzaSB5w7xrbGVuZW1lZGk6ICVzIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlzbGFuZCByZWdleCBmcm9tIGNvbmZpZyBoYXMgdG9vIG1hbnkgY2FwdHVyZSBncm91cHMgKG1heD0lZCkiCittc2dzdHIgIiIKKyJ5YXDEsWxhbmTEsXJtYW7EsW4gZGVsdGEgYWRhc8SxIGTDvHplbmxpIGlmYWRlc2luZGUgw6dvayBmYXpsYSB5YWthbGFtYSBncnVidSB2YXIgIgorIihlbiDDp29rICVkKSIKKworIzogZGVsdGEtaXNsYW5kcy5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJrZWQgJWQgaXNsYW5kcywgZG9uZS5cbiIKK21zZ3N0ciAiJWQgZGVsdGEgYWRhc8SxIGltbGVuZGksIGJpdHRpLlxuIgorCisjOiBkaWZmY29yZS1vcmRlci5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9yZGVyZmlsZSAnJXMnIgorbXNnc3RyICJvcmRlcmZpbGUgJyVzJyBva3VuYW1hZMSxIgorCisjOiBkaWZmY29yZS1yZW5hbWUuYzo1NDMKK21zZ2lkICJQZXJmb3JtaW5nIGluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAiS2VzaW4gb2xtYXlhbiB5ZW5pZGVuIGFkbGFuZMSxcm1hIGFsZ8SxbGFtYXPEsSBnZXLDp2VrbGXFn3RpcmlsaXlvciIKKworIzogZGlmZi1uby1pbmRleC5jOjIzOAorbXNnaWQgImdpdCBkaWZmIC0tbm8taW5kZXggWzxvcHRpb25zPl0gPHBhdGg+IDxwYXRoPiIKK21zZ3N0ciAiZ2l0IGRpZmYgLS1uby1pbmRleCBbPHNlw6dlbmVrbGVyPl0gPHlvbD4gPHlvbD4iCisKKyM6IGRpZmYtbm8taW5kZXguYzoyNjMKK21zZ2lkICIiCisiTm90IGEgZ2l0IHJlcG9zaXRvcnkuIFVzZSAtLW5vLWluZGV4IHRvIGNvbXBhcmUgdHdvIHBhdGhzIG91dHNpZGUgYSB3b3JraW5nICIKKyJ0cmVlIgorbXNnc3RyICIiCisiQmlyIGdpdCBkZXBvc3UgZGXEn2lsLiBCaXIgw6dhbMSxxZ9tYSBhxJ9hY8SxbsSxbiBkxLHFn8SxbmRha2kgaWtpIHlvbHUga2FyxZ/EsWxhxZ90xLFybWFrICIKKyJpw6dpbiAtLW5vLWluZGV4IGt1bGxhbsSxbi4iCisKKyM6IGRpZmYuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIgorbXNnc3RyICIgIGRpcnN0YXQga2VzaW0gecO8emRlc2kgJyVzJyBheXLEscWfdMSxcsSxbGFtYWTEsVxuIgorCisjOiBkaWZmLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgVW5rbm93biBkaXJzdGF0IHBhcmFtZXRlciAnJXMnXG4iCittc2dzdHIgIiAgQmlsaW5tZXllbiBkaXJzdGF0IHBhcmFtZXRyZXNpICclcydcbiIKKworIzogZGlmZi5jOjI5NgorbXNnaWQgIiIKKyJjb2xvciBtb3ZlZCBzZXR0aW5nIG11c3QgYmUgb25lIG9mICdubycsICdkZWZhdWx0JywgJ2Jsb2NrcycsICd6ZWJyYScsICIKKyInZGltbWVkLXplYnJhJywgJ3BsYWluJyIKK21zZ3N0ciAiIgorIlwiY29sb3ItbW92ZWRcIiBheWFyxLEgJ25vJywgJ2RlZmF1bHQnLCAnYmxvY2tzJywgJ3plYnJhJywgJ2RpbW1lZC16ZWJyYScsICIKKyIncGxhaW4nIHNlw6dlbmVrbGVyaW5kZW4gYmlyaSBvbG1hbMSxZMSxciIKKworIzogZGlmZi5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcycsIHBvc3NpYmxlIHZhbHVlcyBhcmUgJ2lnbm9yZS1zcGFjZS1jaGFuZ2UnLCAiCisiJ2lnbm9yZS1zcGFjZS1hdC1lb2wnLCAnaWdub3JlLWFsbC1zcGFjZScsICdhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UnIgorbXNnc3RyICIiCisiYmlsaW5tZXllbiBjb2xvci1tb3ZlZC13cyBraXBpICclcycsIG9sYWJpbGVjZWsgZGXEn2VybGVyOiAnaWdub3JlLXNwYWNlLSIKKyJjaGFuZ2UnLCAnaWdub3JlLXNwYWNlLWF0LWVvbCcsICdpZ25vcmUtYWxsLXNwYWNlJyAnYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlJyIKKworIzogZGlmZi5jOjMzMgorbXNnaWQgIiIKKyJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyICIKKyJ3aGl0ZXNwYWNlIG1vZGVzIgorbXNnc3RyICIiCisiY29sb3ItbW92ZWQtd3M6IGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBkacSfZXIgYm/Fn2x1ayBraXBsZXJpIGlsZSBiaXJsaWt0ZSAiCisia3VsbGFuxLFsYW1heiIKKworIzogZGlmZi5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHZhbHVlIGZvciAnZGlmZi5zdWJtb2R1bGUnIGNvbmZpZyB2YXJpYWJsZTogJyVzJyIKK21zZ3N0ciAiJ2RpZmYuc3VibW9kdWxlJyB5YXDEsWxhbmTEsXJtYSBkZcSfacWfa2VuaSBpw6dpbiBiaWxpbm1leWVuIGRlxJ9lcjogJyVzJyIKKworIzogZGlmZi5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIidkaWZmLmRpcnN0YXQnIHlhcMSxbGFuZMSxcm1hIGRlxJ9pxZ9rZW5pbmRlIGhhdGFsYXIgYnVsdW5kdTpcbiIKKyIlcyIKKworIzogZGlmZi5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZGlmZiBkaWVkLCBzdG9wcGluZyBhdCAlcyIKK21zZ3N0ciAiZMSxxZ8gZGlmZiBzb25sYW5kxLEsICVzIGtvbnVtdW5kYSBkdXJkdSIKKworIzogZGlmZi5jOjQ1NDcKK21zZ2lkICItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayBhbmQgLXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgdmUgLXMgYmlybGlrdGUga3VsbGFuxLFsbWF6IgorCisjOiBkaWZmLmM6NDU1MAorbXNnaWQgIi1HLCAtUyBhbmQgLS1maW5kLW9iamVjdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItRywgLVMgdmUgLS1maW5kLW9iamVjdCBiaXJsaWt0ZSBrdWxsYW7EsWxtYXoiCisKKyM6IGRpZmYuYzo0NjI4Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIi0tZm9sbG93IHRhbSBvbGFyYWsgeWFsbsSxemNhIGJpciB5b2wgYmVsaXJ0ZWNpIGdlcmVrdGlyaXlvciIKKworIzogZGlmZi5jOjQ2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLXN0YXQgdmFsdWU6ICVzIgorbXNnc3RyICJnZcOnZXJzaXogLS1zdGF0IGRlxJ9lcmk6ICVzIgorCisjOiBkaWZmLmM6NDY4MSBkaWZmLmM6NDY4NiBkaWZmLmM6NDY5MSBkaWZmLmM6NDY5NiBkaWZmLmM6NTIwOQorIzogcGFyc2Utb3B0aW9ucy5jOjE5NyBwYXJzZS1vcHRpb25zLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiVzIGJpciBzYXnEsXNhbCBkZcSfZXIgYmVrbGl5b3IiCisKKyM6IGRpZmYuYzo0NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gcGFyc2UgLS1kaXJzdGF0Ly1YIG9wdGlvbiBwYXJhbWV0ZXI6XG4iCisiJXMiCittc2dzdHIgIiIKKyItLWRpcnN0YXQvLVggc2XDp2VuZWsgcGFyYW1ldHJlc2kgYXlyxLHFn3TEsXLEsWxhbWFkxLE6XG4iCisiJXMiCisKKyM6IGRpZmYuYzo0Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY2hhbmdlIGNsYXNzICclYycgaW4gLS1kaWZmLWZpbHRlcj0lcyIKK21zZ3N0ciAixZ91cmFkYSBiaWxpbm1leWVuIGRlxJ9pxZ9pa2xpayBzxLFuxLFmxLEgJyVjJzogLWRpZmYtZmlsdGVyPSVzIgorCisjOiBkaWZmLmM6NDgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGFmdGVyIHdzLWVycm9yLWhpZ2hsaWdodD0lLipzIgorbXNnc3RyICLFn3VuZGFuIHNvbnJhIGJpbGlubWV5ZW4gZGXEn2VyOiB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIKKworIzogZGlmZi5jOjQ4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiJyVzJyDDp8O2esO8bGVtaXlvciIKKworIzogZGlmZi5jOjQ4ODYgZGlmZi5jOjQ4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyA8bj4vPG0+IGZvcm0iCittc2dzdHIgIiVzIDxuPi88bT4gYmnDp2ltaSBiZWtsaXlvciIKKworIzogZGlmZi5jOjQ5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIGNoYXJhY3RlciwgZ290ICclcyciCittc2dzdHIgIiVzIGJpciBrYXJha3RlciBiZWtsaXlvciwgJyVzJyBhbGTEsSIKKworIzogZGlmZi5jOjQ5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0tY29sb3ItbW92ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJoYXRhbMSxIC0tY29sb3ItbW92ZWQgZGXEn2nFn2tlbmk6ICVzIgorCisjOiBkaWZmLmM6NDk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgJyVzJyBpbiAtLWNvbG9yLW1vdmVkLXdzIgorbXNnc3RyICItLWNvbG9yLW1vdmVkLXdzIGnDp2luZGUgZ2XDp2Vyc2l6IGtpcCAnJXMnIgorCisjOiBkaWZmLmM6NDk4NAorbXNnaWQgIiIKKyJvcHRpb24gZGlmZi1hbGdvcml0aG0gYWNjZXB0cyBcIm15ZXJzXCIsIFwibWluaW1hbFwiLCBcInBhdGllbmNlXCIgYW5kICIKKyJcImhpc3RvZ3JhbVwiIgorbXNnc3RyICIiCisiZGlmZi1hbGdvcml0aG0gc2XDp2VuZcSfaSDFn3VubGFyxLEga2FidWwgZWRlcjogXCJteWVyc1wiLCBcIm1pbmltYWxcIiwgIgorIlwicGF0aWVuY2VcIiB2ZSBcImhpc3RvZ3JhbVwiIgorCisjOiBkaWZmLmM6NTAyMCBkaWZmLmM6NTA0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50IHRvICVzIgorbXNnc3RyICIlcyBpw6dpbiBnZcOnZXJzaXogZGXEn2nFn2tlbiIKKworIzogZGlmZi5jOjUxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIC0tc3VibW9kdWxlIG9wdGlvbiBwYXJhbWV0ZXI6ICclcyciCittc2dzdHIgIi0tc3VibW9kdWxlIHNlw6dlbmVrIHBhcmFtZXRyZXNpIGF5csSxxZ90xLFyxLFsYW1hZMSxOiAnJXMnIgorCisjOiBkaWZmLmM6NTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS13b3JkLWRpZmYgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJoYXRhbMSxIC0td29yZC1kaWZmIGRlxJ9pxZ9rZW5pOiAlcyIKKworIzogZGlmZi5jOjUyNTcKK21zZ2lkICJEaWZmIG91dHB1dCBmb3JtYXQgb3B0aW9ucyIKK21zZ3N0ciAiRGlmZiDDp8Sxa3TEsXPEsSBiacOnaW1sZW5kaXJtZSBzZcOnZW5la2xlcmkiCisKKyM6IGRpZmYuYzo1MjU5IGRpZmYuYzo1MjY1Cittc2dpZCAiZ2VuZXJhdGUgcGF0Y2giCittc2dzdHIgInlhbWEgb2x1xZ90dXIiCisKKyM6IGRpZmYuYzo1MjYyIGJ1aWx0aW4vbG9nLmM6MTczCittc2dpZCAic3VwcHJlc3MgZGlmZiBvdXRwdXQiCittc2dzdHIgImRpZmYgw6fEsWt0xLFzxLFuxLEgZ2l6bGUiCisKKyM6IGRpZmYuYzo1MjY3IGRpZmYuYzo1MzgxIGRpZmYuYzo1Mzg4Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGRpZmYuYzo1MjY4IGRpZmYuYzo1MjcxCittc2dpZCAiZ2VuZXJhdGUgZGlmZnMgd2l0aCA8bj4gbGluZXMgY29udGV4dCIKK21zZ3N0ciAiZGlmZidsZXJpIDxuPiBzYXTEsXIgYmHEn2xhbWzEsSBvbHXFn3R1ciIKKworIzogZGlmZi5jOjUyNzMKK21zZ2lkICJnZW5lcmF0ZSB0aGUgZGlmZiBpbiByYXcgZm9ybWF0IgorbXNnc3RyICJkaWZmJ2kgaGFtIGJpw6dpbWRlIG9sdcWfdHVyIgorCisjOiBkaWZmLmM6NTI3NgorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXJhdyciCittc2dzdHIgIictcCAtLXJhdyBlxZ9hbmxhbWzEsXPEsSIKKworIzogZGlmZi5jOjUyODAKK21zZ2lkICJzeW5vbnltIGZvciAnLXAgLS1zdGF0JyIKK21zZ3N0ciAiJy1wIC0tc3RhdCBlxZ9hbmxhbWzEsXPEsSIKKworIzogZGlmZi5jOjUyODQKK21zZ2lkICJtYWNoaW5lIGZyaWVuZGx5IC0tc3RhdCIKK21zZ3N0ciAibWFraW5lZGUgb2t1bmFiaWxlbiAtLXN0YXQiCisKKyM6IGRpZmYuYzo1Mjg3Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIGxhc3QgbGluZSBvZiAtLXN0YXQiCittc2dzdHIgIi0tc3RhdCfEsW4geWFsbsSxemNhIHNvbiBzYXTEsXLEsW7EsSDDp8Sxa3TEsSB2ZXIiCisKKyM6IGRpZmYuYzo1Mjg5IGRpZmYuYzo1Mjk3Cittc2dpZCAiPHBhcmFtMSxwYXJhbTI+Li4uIgorbXNnc3RyICI8cGFyYW0xLHBhcmFtMj4uLi4iCisKKyM6IGRpZmYuYzo1MjkwCittc2dpZCAiIgorIm91dHB1dCB0aGUgZGlzdHJpYnV0aW9uIG9mIHJlbGF0aXZlIGFtb3VudCBvZiBjaGFuZ2VzIGZvciBlYWNoIHN1Yi1kaXJlY3RvcnkiCittc2dzdHIgIiIKKyJoZXIgYWx0IGRpemluIGnDp2luIGfDtnJlY2VsaSBiaXIgbWlrdGFyIGRlxJ9pxZ9pa2xpxJ9pbiBkYcSfxLF0xLFtxLFuxLEgw6fEsWt0xLEgdmVyIgorCisjOiBkaWZmLmM6NTI5NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1jdW11bGF0aXZlIgorbXNnc3RyICItLWRpcnN0YXQtY3VtdWxhdGl2ZSBlxZ9hbmxhbWzEsXPEsSIKKworIzogZGlmZi5jOjUyOTgKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9ZmlsZXMscGFyYW0xLHBhcmFtMi4uLiIKK21zZ3N0ciAiLS1kaXJzdGF0PWZpbGVzLHBhcmFtMSxwYXJhbTIuLi4gZcWfYW5sYW1sxLFzxLEiCisKKyM6IGRpZmYuYzo1MzAyCittc2dpZCAid2FybiBpZiBjaGFuZ2VzIGludHJvZHVjZSBjb25mbGljdCBtYXJrZXJzIG9yIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICIiCisiZGXEn2nFn2lrbGlrbGVyIMOnYWvEscWfbWEgaW1sZXlpY2lsZXJpIHZleWEgYm/Fn2x1ayBoYXRhbGFyxLEgZG/En3VydXlvcnNhIHV5YXIiCisKKyM6IGRpZmYuYzo1MzA1Cittc2dpZCAiY29uZGVuc2VkIHN1bW1hcnkgc3VjaCBhcyBjcmVhdGlvbnMsIHJlbmFtZXMgYW5kIG1vZGUgY2hhbmdlcyIKK21zZ3N0ciAiIgorInPEsWvEscWfxLFrIMO2emV0OyDDtnJuLiBvbHXFn3VtbGFyLCB5ZW5pZGVuIGFkbGFuZMSxcm1hbGFyIHZlIGtpcCBkZcSfacWfaWtsaWtsZXJpIgorCisjOiBkaWZmLmM6NTMwOAorbXNnaWQgInNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJ5YWxuxLF6Y2EgZGXEn2nFn3RpcmlsZW4gZG9zeWFsYXLEsW4gYWRsYXLEsW7EsSBnw7ZzdGVyIgorCisjOiBkaWZmLmM6NTMxMQorbXNnaWQgInNob3cgb25seSBuYW1lcyBhbmQgc3RhdHVzIG9mIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgInlhbG7EsXpjYSBkZcSfacWfdGlyaWxlbiBkb3N5YWxhcsSxbiBhZGxhcsSxbsSxIHZlIGR1cnVtbGFyxLFuxLEgZ8O2c3RlciIKKworIzogZGlmZi5jOjUzMTMKK21zZ2lkICI8d2lkdGg+Wyw8bmFtZS13aWR0aD5bLDxjb3VudD5dXSIKK21zZ3N0ciAiPGdlbmnFn2xpaz5bLDxhZC1nZW5pxZ9saWs+Wyw8c2F5xLFtPl1dIgorCisjOiBkaWZmLmM6NTMxNAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IgorbXNnc3RyICJkaWZmc3RhdCBvbHXFn3R1ciIKKworIzogZGlmZi5jOjUzMTYgZGlmZi5jOjUzMTkgZGlmZi5jOjUzMjIKK21zZ2lkICI8d2lkdGg+IgorbXNnc3RyICI8Z2VuacWfbGlrPiIKKworIzogZGlmZi5jOjUzMTcKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gd2lkdGgiCittc2dzdHIgImRpZmZzdGF0J8SxIHZlcmlsbWnFnyBiaXIgZ2VuacWfbGlrIGlsZSBvbHXFn3R1ciIKKworIzogZGlmZi5jOjUzMjAKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gbmFtZSB3aWR0aCIKK21zZ3N0ciAiZGlmZnN0YXQnxLEgdmVyaWxtacWfIGJpciBhZCBnZW5pxZ9sacSfaSBpbGUgb2x1xZ90dXIiCisKKyM6IGRpZmYuYzo1MzIzCittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIGdyYXBoIHdpZHRoIgorbXNnc3RyICJkaWZmc3RhdCfEsSB2ZXJpbG1pxZ8gYmlyIGdyYWZpayBnZW5pxZ9sacSfaSBpbGUgb2x1xZ90dXIiCisKKyM6IGRpZmYuYzo1MzI1Cittc2dpZCAiPGNvdW50PiIKK21zZ3N0ciAiPHNhecSxbT4iCisKKyM6IGRpZmYuYzo1MzI2Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBsaW1pdGVkIGxpbmVzIgorbXNnc3RyICJkaWZmc3RhdCfEsSBrxLFzxLF0bMSxIHNhdMSxcmxhcmxhIG9sdcWfdHVyIgorCisjOiBkaWZmLmM6NTMyOQorbXNnaWQgImdlbmVyYXRlIGNvbXBhY3Qgc3VtbWFyeSBpbiBkaWZmc3RhdCIKK21zZ3N0ciAiZGlmZnN0YXQgacOnaW5kZSB1ZmFrIMO2emV0IG9sdcWfdHVyIgorCisjOiBkaWZmLmM6NTMzMgorbXNnaWQgIm91dHB1dCBhIGJpbmFyeSBkaWZmIHRoYXQgY2FuIGJlIGFwcGxpZWQiCittc2dzdHIgInV5Z3VsYW5hYmlsaXIgYmlyIGlraWxpIGRpZmYgw6fEsWt0xLFzxLEgdmVyIgorCisjOiBkaWZmLmM6NTMzNQorbXNnaWQgInNob3cgZnVsbCBwcmUtIGFuZCBwb3N0LWltYWdlIG9iamVjdCBuYW1lcyBvbiB0aGUgXCJpbmRleFwiIGxpbmVzIgorbXNnc3RyICJcImluZGV4XCIgc2F0xLFybGFyxLFuZGEgdGFtIMO2biB2ZSBzb25nw7Zyw7xudMO8IG5lc25lIGFkbGFyxLFuxLEgZ8O2c3RlciIKKworIzogZGlmZi5jOjUzMzcKK21zZ2lkICJzaG93IGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAicmVua2xpIGRpZmYgZ8O2c3RlciIKKworIzogZGlmZi5jOjUzMzgKK21zZ2lkICI8a2luZD4iCittc2dzdHIgIjx0w7xyPiIKKworIzogZGlmZi5jOjUzMzkKK21zZ2lkICIiCisiaGlnaGxpZ2h0IHdoaXRlc3BhY2UgZXJyb3JzIGluIHRoZSAnY29udGV4dCcsICdvbGQnIG9yICduZXcnIGxpbmVzIGluIHRoZSAiCisiZGlmZiIKK21zZ3N0ciAiIgorImRpZmYndGVraSBib8WfbHVrIGhhdGFsYXLEsW7EsSAnY29udGV4dCcsICdvbGQnIHZleWEgJ25ldycgc2F0xLFybGFyxLFuZGEgdnVyZ3VsYSIKKworIzogZGlmZi5jOjUzNDIKK21zZ2lkICIiCisiZG8gbm90IG11bmdlIHBhdGhuYW1lcyBhbmQgdXNlIE5VTHMgYXMgb3V0cHV0IGZpZWxkIHRlcm1pbmF0b3JzIGluIC0tcmF3IG9yICIKKyItLW51bXN0YXQiCittc2dzdHIgIiIKKyItLXJhdyB2ZXlhIC0tbnVtc3RhdCBpw6dpbmRlIHlvbCBhZGxhcsSxbsSxIHRhaHJpcCBldG1lIHZlIMOnxLFrdMSxIGFsYW7EsSAiCisic29ubGFuZMSxcsSxY8SxbGFyxLEgb2xhcmFrIE5VTCdsYXLEsSBrdWxsYW4iCisKKyM6IGRpZmYuYzo1MzQ1IGRpZmYuYzo1MzQ4IGRpZmYuYzo1MzUxIGRpZmYuYzo1NDU3Cittc2dpZCAiPHByZWZpeD4iCittc2dzdHIgIjzDtm5laz4iCisKKyM6IGRpZmYuYzo1MzQ2Cittc2dpZCAic2hvdyB0aGUgZ2l2ZW4gc291cmNlIHByZWZpeCBpbnN0ZWFkIG9mIFwiYS9cIiIKK21zZ3N0ciAiXCJhL1wiIHllcmluZSB2ZXJpbG1pxZ8ga2F5bmFrIMO2bmVraW5pIGfDtnN0ZXIiCisKKyM6IGRpZmYuYzo1MzQ5Cittc2dpZCAic2hvdyB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gcHJlZml4IGluc3RlYWQgb2YgXCJiL1wiIgorbXNnc3RyICJcImIvXCJ5ZXJpbmUgdmVyaWxtacWfIGtheW5hayDDtm5la2luaSBnw7ZzdGVyIgorCisjOiBkaWZmLmM6NTM1MgorbXNnaWQgInByZXBlbmQgYW4gYWRkaXRpb25hbCBwcmVmaXggdG8gZXZlcnkgbGluZSBvZiBvdXRwdXQiCittc2dzdHIgIsOnxLFrdMSxbsSxbiBoZXIgc2F0xLFyxLFuxLFuIGJhxZ/EsW5hIGVrIGJpciDDtm5layBla2xlIgorCisjOiBkaWZmLmM6NTM1NQorbXNnaWQgImRvIG5vdCBzaG93IGFueSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcHJlZml4IgorbXNnc3RyICJoacOnYmlyIGtheW5hayB2ZSBoZWRlZiDDtm5la2luaSBnw7ZzdGVybWUiCisKKyM6IGRpZmYuYzo1MzU4Cittc2dpZCAic2hvdyBjb250ZXh0IGJldHdlZW4gZGlmZiBodW5rcyB1cCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBsaW5lcyIKK21zZ3N0ciAiZGlmZiBwYXLDp2FsYXLEsSBhcmFzxLFuZGFraSBiYcSfbGFtxLEgYmVsaXJ0aWxlbiBzYXTEsXIgc2F5xLFzxLEga2FkYXIgZ8O2c3RlciIKKworIzogZGlmZi5jOjUzNjIgZGlmZi5jOjUzNjcgZGlmZi5jOjUzNzIKK21zZ2lkICI8Y2hhcj4iCittc2dzdHIgIjxrYXJha3Rlcj4iCisKKyM6IGRpZmYuYzo1MzYzCittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGEgbmV3IGxpbmUgaW5zdGVhZCBvZiAnKyciCittc2dzdHIgInllbmkgc2F0xLFyxLEgYmVsaXJ0bWVrIGnDp2luICcrJyB5ZXJpbmUga3VsbGFuxLFsYWNhayBrYXJha3RlcmkgYmVsaXJsZSIKKworIzogZGlmZi5jOjUzNjgKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYW4gb2xkIGxpbmUgaW5zdGVhZCBvZiAnLSciCittc2dzdHIgImVza2kgc2F0xLFyxLEgYmVsaXJ0bWVrIGnDp2luICctJyB5ZXJpbmUga3VsbGFuxLFsYWNhayBrYXJha3RlcmkgYmVsaXJsZSIKKworIzogZGlmZi5jOjUzNzMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBjb250ZXh0IGluc3RlYWQgb2YgJyAnIgorbXNnc3RyICJiYcSfbGFtIGJlbGlydG1layBpw6dpbiAnICcgeWVyaW5lIGt1bGxhbsSxbGFjYWsga2FyYWt0ZXJpIGJlbGlybGUiCisKKyM6IGRpZmYuYzo1Mzc2Cittc2dpZCAiRGlmZiByZW5hbWUgb3B0aW9ucyIKK21zZ3N0ciAiRGlmZiB5ZW5pZGVuIGFkbGFuZMSxcm1hIHNlw6dlbmVrbGVyaSIKKworIzogZGlmZi5jOjUzNzcKK21zZ2lkICI8bj5bLzxtPl0iCittc2dzdHIgIjxuPlsvPG0+XSIKKworIzogZGlmZi5jOjUzNzgKK21zZ2lkICJicmVhayBjb21wbGV0ZSByZXdyaXRlIGNoYW5nZXMgaW50byBwYWlycyBvZiBkZWxldGUgYW5kIGNyZWF0ZSIKK21zZ3N0ciAidGFtIHllbmlkZW4geWF6xLFtIGRlxJ9pxZ9pa2xpa2xlcmluaSBzaWxtZSB2ZSBvbHXFn3R1cm1hIG9sYXJhayBhecSxciIKKworIzogZGlmZi5jOjUzODIKK21zZ2lkICJkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAieWVuaWRlbiBhZGxhbmTEsXJtYWxhcsSxIGFsZ8SxbGEiCisKKyM6IGRpZmYuYzo1Mzg2Cittc2dpZCAib21pdCB0aGUgcHJlaW1hZ2UgZm9yIGRlbGV0ZXMiCittc2dzdHIgInNpbG1lbGVyIGnDp2luIMO2bmfDtnLDvG50w7x5w7wgYXRsYSIKKworIzogZGlmZi5jOjUzODkKK21zZ2lkICJkZXRlY3QgY29waWVzIgorbXNnc3RyICJrb3B5YWxhcsSxIGFsZ8SxbGEiCisKKyM6IGRpZmYuYzo1MzkzCittc2dpZCAidXNlIHVubW9kaWZpZWQgZmlsZXMgYXMgc291cmNlIHRvIGZpbmQgY29waWVzIgorbXNnc3RyICJkZcSfacWfdGlyaWxtZW1pxZ8gZG9zeWFsYXLEsSBrb3B5YWxhcsSxIGJ1bG1hayBpw6dpbiBrYXluYWsgb2xhcmFrIGt1bGxhbiIKKworIzogZGlmZi5jOjUzOTUKK21zZ2lkICJkaXNhYmxlIHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgInllbmlkZW4gYWRsYW5kxLFybWEgYWxnxLFsYW1hc8SxbsSxIGRldnJlIGTEscWfxLEgYsSxcmFrIgorCisjOiBkaWZmLmM6NTM5OAorbXNnaWQgInVzZSBlbXB0eSBibG9icyBhcyByZW5hbWUgc291cmNlIgorbXNnc3RyICJib8WfIGlraWxpIG5lc25lbGVyaSB5ZW5pZGVuIGFkbGFuZMSxcm1hIGtheW5hxJ/EsSBvbGFyYWsga3VsbGFuIgorCisjOiBkaWZmLmM6NTQwMAorbXNnaWQgImNvbnRpbnVlIGxpc3RpbmcgdGhlIGhpc3Rvcnkgb2YgYSBmaWxlIGJleW9uZCByZW5hbWVzIgorbXNnc3RyICIiCisiYmlyIGRvc3lhbsSxbiBnZcOnbWnFn2luaSBsaXN0ZWxlbWV5aSB5ZW5pZGVuIGFkbGFuZMSxcm1hbGFyxLFuIMO2dGVzaW5kZSBzw7xyZMO8ciIKKworIzogZGlmZi5jOjU0MDMKK21zZ2lkICIiCisicHJldmVudCByZW5hbWUvY29weSBkZXRlY3Rpb24gaWYgdGhlIG51bWJlciBvZiByZW5hbWUvY29weSB0YXJnZXRzIGV4Y2VlZHMgIgorImdpdmVuIGxpbWl0IgorbXNnc3RyICIiCisiZcSfZXIgeWVuaWRlbiBhZGxhbmTEsXJtYS9rb3B5YWxhbWEgaGVkZWZsZXJpbmluIHNhecSxc8SxIHZlcmlsZW4gc8SxbsSxcsSxIGHFn2Fyc2EgIgorInllbmlkZW4gYWRsYW5kxLFybWEva29weWFsYW1hIGFsZ8SxbGFtYXPEsW7EsSDDtm5sZSIKKworIzogZGlmZi5jOjU0MDUKK21zZ2lkICJEaWZmIGFsZ29yaXRobSBvcHRpb25zIgorbXNnc3RyICJEaWZmIGFsZ29yaXRtYSBzZcOnZW5la2xlcmkiCisKKyM6IGRpZmYuYzo1NDA3Cittc2dpZCAicHJvZHVjZSB0aGUgc21hbGxlc3QgcG9zc2libGUgZGlmZiIKK21zZ3N0ciAib2xhYmlsZWNlayBlbiBrw7zDp8O8ayBkaWZmJ2kgw7xyZXQiCisKKyM6IGRpZmYuYzo1NDEwCittc2dpZCAiaWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgbGluZXMiCittc2dzdHIgInNhdMSxcmxhcsSxIGthcsWfxLFsYcWfdMSxcsSxcmtlbiBib8WfbHVrbGFyxLEgeW9rIHNheSIKKworIzogZGlmZi5jOjU0MTMKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiBhbW91bnQgb2Ygd2hpdGVzcGFjZSIKK21zZ3N0ciAiYm/Fn2x1ayBzYXnEsXPEsW5kYWtpIGRlxJ9pxZ9pa2xpa2xlcmkgeW9rIHNheSIKKworIzogZGlmZi5jOjU0MTYKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIGF0IEVPTCIKK21zZ3N0ciAic2F0xLFyIHNvbnVuZGFraSBib8WfbHVrIGRlxJ9pxZ9pa2xpa2xlcmluaSB5b2sgc2F5IgorCisjOiBkaWZmLmM6NTQxOQorbXNnaWQgImlnbm9yZSBjYXJyaWVyLXJldHVybiBhdCB0aGUgZW5kIG9mIGxpbmUiCittc2dzdHIgInNhdMSxciBzb251bmRha2kgc2F0xLFyYmHFn8SxIGthcmFrdGVyaW5pIHlvayBzYXkiCisKKyM6IGRpZmYuYzo1NDIyCittc2dpZCAiaWdub3JlIGNoYW5nZXMgd2hvc2UgbGluZXMgYXJlIGFsbCBibGFuayIKK21zZ3N0ciAic2F0xLFybGFyxLFuxLFuIHTDvG3DvCBib8WfIG9sYW4gZGXEn2nFn2lrbGlrbGVyaSB5b2sgc2F5IgorCisjOiBkaWZmLmM6NTQyNQorbXNnaWQgImhldXJpc3RpYyB0byBzaGlmdCBkaWZmIGh1bmsgYm91bmRhcmllcyBmb3IgZWFzeSByZWFkaW5nIgorbXNnc3RyICJkaWZmIHBhcsOnYSBzxLFuxLFybGFyxLFuxLEga29sYXkgb2t1bWEgacOnaW4gYnVsZ3VzYWwgb2xhcmFrIGtheWTEsXIiCisKKyM6IGRpZmYuYzo1NDI4Cittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJwYXRpZW5jZSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICJkaWZmJ2kgXCJwYXRpZW5jZSBkaWZmXCIgYWxnb3JpdG1hc8SxbsSxIGt1bGxhbmFyYWsgb2x1xZ90dXIiCisKKyM6IGRpZmYuYzo1NDMyCittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJoaXN0b2dyYW0gZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiZGlmZidpIFwiaGlzdG9ncmFtIGRpZmZcIiBhbGdvcml0bWFzxLFuxLEga3VsbGFuYXJhayBvbHXFn3R1ciIKKworIzogZGlmZi5jOjU0MzQKK21zZ2lkICI8YWxnb3JpdGhtPiIKK21zZ3N0ciAiPGFsZ29yaXRtYT4iCisKKyM6IGRpZmYuYzo1NDM1Cittc2dpZCAiY2hvb3NlIGEgZGlmZiBhbGdvcml0aG0iCittc2dzdHIgImJpciBkaWZmIGFsZ29yaXRtYXPEsSBzZcOnIgorCisjOiBkaWZmLmM6NTQzNworbXNnaWQgIjx0ZXh0PiIKK21zZ3N0ciAiPG1ldGluPiIKKworIzogZGlmZi5jOjU0MzgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImFuY2hvcmVkIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgImRpZmYnaSBcImFuY2hvcmVkIGRpZmZcIiBhbGdvcml0bWFzxLFuxLEga3VsbGFuYXJhayBvbHXFn3R1ciIKKworIzogZGlmZi5jOjU0NDAgZGlmZi5jOjU0NDkgZGlmZi5jOjU0NTIKK21zZ2lkICI8bW9kZT4iCittc2dzdHIgIjxraXA+IgorCisjOiBkaWZmLmM6NTQ0MQorbXNnaWQgInNob3cgd29yZCBkaWZmLCB1c2luZyA8bW9kZT4gdG8gZGVsaW1pdCBjaGFuZ2VkIHdvcmRzIgorbXNnc3RyICIiCisic8O2emPDvGsgZGlmZidpbmkgZGXEn2nFn3RpcmlsZW4gc8O2emPDvGtsZXJpIHPEsW7EsXJsYW5kxLFybWFrIGnDp2luIDxraXA+IGt1bGxhbmFyYWsgIgorImfDtnN0ZXIiCisKKyM6IGRpZmYuYzo1NDQzIGRpZmYuYzo1NDQ2IGRpZmYuYzo1NDkxCittc2dpZCAiPHJlZ2V4PiIKK21zZ3N0ciAiPGlmYWRlPiIKKworIzogZGlmZi5jOjU0NDQKK21zZ2lkICJ1c2UgPHJlZ2V4PiB0byBkZWNpZGUgd2hhdCBhIHdvcmQgaXMiCittc2dzdHIgImJpciBzw7Z6Y8O8xJ/DvG4gbmUgb2xkdcSfdW5hIGthcmFyIHZlcm1layBpw6dpbiA8aWZhZGU+IGt1bGxhbiIKKworIzogZGlmZi5jOjU0NDcKK21zZ2lkICJlcXVpdmFsZW50IHRvIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxyZWdleD4iCittc2dzdHIgIsWfdW5hIGXFn2RlxJ9lcjogLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9PGlmYWRlPiIKKworIzogZGlmZi5jOjU0NTAKK21zZ2lkICJtb3ZlZCBsaW5lcyBvZiBjb2RlIGFyZSBjb2xvcmVkIGRpZmZlcmVudGx5IgorbXNnc3RyICJ0YcWfxLFuYW4ga29kIHNhdMSxcmxhcsSxIGZhcmtsxLEgcmVua2xlbmRpcmlsaXIiCisKKyM6IGRpZmYuYzo1NDUzCittc2dpZCAiaG93IHdoaXRlIHNwYWNlcyBhcmUgaWdub3JlZCBpbiAtLWNvbG9yLW1vdmVkIgorbXNnc3RyICJib8WfbHVrbGFyIC0tY29sb3ItbW92ZWQgacOnaW5kZSBuYXPEsWwgeW9rIHNhecSxbMSxciIKKworIzogZGlmZi5jOjU0NTYKK21zZ2lkICJPdGhlciBkaWZmIG9wdGlvbnMiCittc2dzdHIgIkRpxJ9lciBkaWZmIHNlw6dlbmVrbGVyaSIKKworIzogZGlmZi5jOjU0NTgKK21zZ2lkICJ3aGVuIHJ1biBmcm9tIHN1YmRpciwgZXhjbHVkZSBjaGFuZ2VzIG91dHNpZGUgYW5kIHNob3cgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgIiIKKyJhbHRkaXppbmRlbiDDp2FsxLHFn3TEsXLEsWxkxLHEn8SxbmRhIGTEscWfYXLEsWRha2kgZGXEn2nFn2lrbGlrbGVyaSBoYXJpw6cgdHV0IHZlICIKKyJnw7ZyZWNlbGkgeW9sbGFyxLEgZ8O2c3RlciIKKworIzogZGlmZi5jOjU0NjIKK21zZ2lkICJ0cmVhdCBhbGwgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAidMO8bSBkb3N5YWxhcsSxIG1ldGluIG9sYXJhayB2YXJzYXkiCisKKyM6IGRpZmYuYzo1NDY0Cittc2dpZCAic3dhcCB0d28gaW5wdXRzLCByZXZlcnNlIHRoZSBkaWZmIgorbXNnc3RyICJpa2kgZ2lyZGl5aSBkZcSfacWfdGlyLCBkaWZmJ2kgdGVyc2luZSBkw7ZuZMO8ciIKKworIzogZGlmZi5jOjU0NjYKK21zZ2lkICJleGl0IHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzLCAwIG90aGVyd2lzZSIKK21zZ3N0ciAiYXlyxLFtbGFyIHZhcnNhIDEgaWxlLCB5b2tzYSAwIGlsZSDDp8SxayIKKworIzogZGlmZi5jOjU0NjgKK21zZ2lkICJkaXNhYmxlIGFsbCBvdXRwdXQgb2YgdGhlIHByb2dyYW0iCittc2dzdHIgInTDvG0gcHJvZ3JhbSDDp8Sxa3TEsXPEsW7EsSBkZXZyZSBkxLHFn8SxIGLEsXJhayIKKworIzogZGlmZi5jOjU0NzAKK21zZ2lkICJhbGxvdyBhbiBleHRlcm5hbCBkaWZmIGhlbHBlciB0byBiZSBleGVjdXRlZCIKK21zZ3N0ciAiYmlyIGTEscWfIGRpZmYgeWFyZMSxbWPEsXPEsW7EsW4gw6dhbMSxxZ90xLFyxLFsbWFzxLFuYSBpemluIHZlciIKKworIzogZGlmZi5jOjU0NzIKK21zZ2lkICJydW4gZXh0ZXJuYWwgdGV4dCBjb252ZXJzaW9uIGZpbHRlcnMgd2hlbiBjb21wYXJpbmcgYmluYXJ5IGZpbGVzIgorbXNnc3RyICIiCisiaWtpbGkgZG9zeWFsYXLEsSBrYXLFn8SxbGHFn3TEsXLEsXJrZW4gZMSxxZ8gbWV0aW4gZMO2bsO8xZ90w7xybWUgc8O8emdlw6dsZXJpbmkgw6dhbMSxxZ90xLFyIgorCisjOiBkaWZmLmM6NTQ3NAorbXNnaWQgIjx3aGVuPiIKK21zZ3N0ciAiPG5lLXphbWFuPiIKKworIzogZGlmZi5jOjU0NzUKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzIGluIHRoZSBkaWZmIGdlbmVyYXRpb24iCittc2dzdHIgImRpZmYgb2x1xZ90dXJ1cmtlbiBhbHRtb2TDvGxsZXJlIG9sYW4gZGXEn2nFn2lrbGlrbGVyaSB5b2sgc2F5IgorCisjOiBkaWZmLmM6NTQ3OAorbXNnaWQgIjxmb3JtYXQ+IgorbXNnc3RyICI8YmnDp2ltPiIKKworIzogZGlmZi5jOjU0NzkKK21zZ2lkICJzcGVjaWZ5IGhvdyBkaWZmZXJlbmNlcyBpbiBzdWJtb2R1bGVzIGFyZSBzaG93biIKK21zZ3N0ciAiYWx0bW9kw7xsbGVyZGVraSBkZcSfacWfaWtsaWtsZXJpbiBuYXPEsWwgZ8O2c3RlcmlsZWNlxJ9pbmkgYmVsaXJ0IgorCisjOiBkaWZmLmM6NTQ4MworbXNnaWQgImhpZGUgJ2dpdCBhZGQgLU4nIGVudHJpZXMgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgImluZGVrc3RlbiAnZ2l0IGFkZCAtTicgZ2lyZGlsZXJpbmkgZ2l6bGUiCisKKyM6IGRpZmYuYzo1NDg2Cittc2dpZCAidHJlYXQgJ2dpdCBhZGQgLU4nIGVudHJpZXMgYXMgcmVhbCBpbiB0aGUgaW5kZXgiCittc2dzdHIgImluZGVrc3RlICdnaXQgYWRkIC1OJyBnaXJkaWxlcmluZSBnZXLDp2VrbWnFnyBnaWJpIGRhdnJhbiIKKworIzogZGlmZi5jOjU0ODgKK21zZ2lkICI8c3RyaW5nPiIKK21zZ3N0ciAiPGRpemk+IgorCisjOiBkaWZmLmM6NTQ4OQorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInN0cmluZyIKK21zZ3N0ciAiYmVsaXJ0aWxlbiBkaXppbmluIGfDtnLDvGxtZSBzYXnEsXPEsW7EsSBkZcSfacWfdGlyZW4gYXlyxLFtbGFyYSBiYWsiCisKKyM6IGRpZmYuYzo1NDkyCittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisicmVnZXgiCittc2dzdHIgImJlbGlydGlsZW4gZMO8emVubGkgaWZhZGVuaW4gZ8O2csO8bG1lIHNhecSxc8SxbsSxIGRlxJ9pxZ90aXJlbiBheXLEsW1sYXJhIGJhayIKKworIzogZGlmZi5jOjU0OTUKK21zZ2lkICJzaG93IGFsbCBjaGFuZ2VzIGluIHRoZSBjaGFuZ2VzZXQgd2l0aCAtUyBvciAtRyIKK21zZ3N0ciAiZGXEn2nFn2lrbGlrIHNldGluZGUgLVMgdmV5YSAtRyBpw6dlcmVuIHTDvG0gZGXEn2nFn2lrbGlrbGVyaSBnw7ZzdGVyIgorCisjOiBkaWZmLmM6NTQ5OAorbXNnaWQgInRyZWF0IDxzdHJpbmc+IGluIC1TIGFzIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiLVMgacOnaW5kZWtpIDxkaXppPid5aSBnZW5pxZ9sZXRpbG1pxZ8gUE9TSVggZMO8emVubGkgaWZhZGVzaSBvbGFyYWsgacWfbGUiCisKKyM6IGRpZmYuYzo1NTAxCittc2dpZCAiY29udHJvbCB0aGUgb3JkZXIgaW4gd2hpY2ggZmlsZXMgYXBwZWFyIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImRvc3lhbGFyxLFuIMOnxLFrdMSxZGEgaGFuZ2kgc8SxcmF5bGEgZ8O2csO8bmVjZcSfaW5pIGRlbmV0bGUiCisKKyM6IGRpZmYuYzo1NTAyCittc2dpZCAiPG9iamVjdC1pZD4iCittc2dzdHIgIjxuZXNuZS1ubz4iCisKKyM6IGRpZmYuYzo1NTAzCittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisib2JqZWN0IgorbXNnc3RyICJiZWxpcnRpbGVuIG5lc25lbmluIGfDtnLDvGxtZSBzYXnEsXPEsW7EsSBkZcSfacWfdGlyZW4gYXlyxLFtbGFyYSBiYWsiCisKKyM6IGRpZmYuYzo1NTA1Cittc2dpZCAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorbXNnc3RyICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCisKKyM6IGRpZmYuYzo1NTA2Cittc2dpZCAic2VsZWN0IGZpbGVzIGJ5IGRpZmYgdHlwZSIKK21zZ3N0ciAiZG9zeWFsYXLEsSBkaWZmIHTDvHLDvG5lIGfDtnJlIHNlw6ciCisKKyM6IGRpZmYuYzo1NTA4Cittc2dpZCAiPGZpbGU+IgorbXNnc3RyICI8ZG9zeWE+IgorCisjOiBkaWZmLmM6NTUwOQorbXNnaWQgIk91dHB1dCB0byBhIHNwZWNpZmljIGZpbGUiCittc2dzdHIgImJlbGlybGkgYmlyIGRvc3lheWEgw6fEsWt0xLEgdmVyIgorCisjOiBkaWZmLmM6NjE2NAorbXNnaWQgImluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiB3YXMgc2tpcHBlZCBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICIiCisiS2VzaW4gb2xtYXlhbiB5ZW5pZGVuIGFkbGFuZMSxcm1hIGFsZ8SxbGFtYXPEsSDDp29rIGZhemxhIGRvc3lhIG9sbWFzxLFuZGFuICIKKyJkb2xhecSxIGF0bGFuZMSxLiIKKworIzogZGlmZi5jOjYxNjcKK21zZ2lkICJvbmx5IGZvdW5kIGNvcGllcyBmcm9tIG1vZGlmaWVkIHBhdGhzIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgIiIKKyLDh29rIGZhemxhIGRvc3lhIG9sbWFzxLFuZGFuIGRvbGF5xLEgeWFsbsSxemNhIGRlxJ9pxZ90aXJpbGVuIHlvbGxhcmRhbiBrb3B5YWxhciAiCisiYnVsdW5kdS4iCisKKyM6IGRpZmYuYzo2MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgbWF5IHdhbnQgdG8gc2V0IHlvdXIgJXMgdmFyaWFibGUgdG8gYXQgbGVhc3QgJWQgYW5kIHJldHJ5IHRoZSBjb21tYW5kLiIKK21zZ3N0ciAiIgorIiVzIGRlxJ9pxZ9rZW5pbml6aSBlbiBhesSxbmRhbiAlZCBvbGFyYWsgYXlhcmxhbWFrIHZlIGtvbXV0dSB5ZW5pZGVuIGRlbmVtZWsgIgorImlzdGV5ZWJpbGlyc2luaXouIgorCisjOiBkaXIuYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdCIKK21zZ3N0ciAieW9sIGJlbGlydGVjaSAnJXMnIGdpdCdpbiB0YW7EsWTEscSfxLEgaGVyaGFuZ2kgYmlyIGRvc3lhIGlsZSBlxZ9sZcWfbWVkaSIKKworIzogZGlyLmM6Njk1IGRpci5jOjcyNCBkaXIuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBhdHRlcm46ICclcyciCittc2dzdHIgInRhbsSxbWxhbmFtYXlhbiBkaXpnaTogJyVzJyIKKworIzogZGlyLmM6NzU0IGRpci5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgbmVnYXRpdmUgcGF0dGVybjogJyVzJyIKK21zZ3N0ciAidGFuxLFtbGFuYW1heWFuIG5lZ2F0aWYgZGl6Z2k6ICclcyciCisKKyM6IGRpci5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBoYXZlIGlzc3VlczogcGF0dGVybiAnJXMnIGlzIHJlcGVhdGVkIgorbXNnc3RyICJzcGFyc2UtY2hlY2tvdXQgZG9zeWFuxLF6xLFuIHNvcnVubGFyxLEgb2xhYmlsaXI6ICclcycgZGl6Z2lzaSB5aW5lbGVubWnFnyIKKworIzogZGlyLmM6Nzk2Cittc2dpZCAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIKK21zZ3N0ciAia29uaSBkaXpnaSBlxZ9sZcWfbWVzaSBkZXZyZSBkxLHFn8SxIGLEsXJha8SxbMSxeW9yIgorCisjOiBkaXIuYzoxMTczCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1c2UgJXMgYXMgYW4gZXhjbHVkZSBmaWxlIgorbXNnc3RyICIlcyBiaXIgJ2V4Y2x1ZGUnIGRvc3lhc8SxIG9sYXJhayBrdWxsYW7EsWxhbcSxeW9yIgorCisjOiBkaXIuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICInJXMnIGRpemluaSBhw6fEsWxhbWFkxLEiCisKKyM6IGRpci5jOjI0NzkKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IGtlcm5lbCBuYW1lIGFuZCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiw6dla2lyZGVrIGFkxLEgdmUgYmlsZ2lzaSBhbMSxbmFtYWTEsSIKKworIzogZGlyLmM6MjYwMworbXNnaWQgInVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbSBvciBsb2NhdGlvbiIKK21zZ3N0ciAiaXpsZW5tZXllbiDDtm5iZWxsZWsgYnUgc2lzdGVtZGUgdmV5YSBrb251bWRhIGRldnJlIGTEscWfxLEgYsSxcmFrxLFsbcSxxZ8iCisKKyM6IGRpci5jOjM0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IGluIHJlcG8gJXMiCittc2dzdHIgIiVzIGRlcG9zdW5kYWtpIGluZGVrcyBkb3N5YXPEsSBoYXNhcmzEsSIKKworIzogZGlyLmM6MzQ1MiBkaXIuYzozNDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIgorbXNnc3RyICIlcyBpw6dpbiBkaXppbmxlciBvbHXFn3R1cnVsYW1hZMSxIgorCisjOiBkaXIuYzozNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtaWdyYXRlIGdpdCBkaXJlY3RvcnkgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgImdpdCBkaXppbmkgJyVzJyBrb251bXVuZGFuICclcycga29udW11bmEgZ8O2w6cgZXR0aXJpbGVtZWRpIgorCisjOiBlZGl0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiBXYWl0aW5nIGZvciB5b3VyIGVkaXRvciB0byBjbG9zZSB0aGUgZmlsZS4uLiVjIgorbXNnc3RyICLEsHB1Y3U6IETDvHplbmxleWljaW5pemluIGRvc3lhecSxIGthcGF0bWFzxLEgYmVrbGVuaXlvci4uLiVjIgorCisjOiBlbnRyeS5jOjE3OAorbXNnaWQgIkZpbHRlcmluZyBjb250ZW50IgorbXNnc3RyICLEsMOnZXJpayBzw7x6w7xsw7x5b3IiCisKKyM6IGVudHJ5LmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0IGZpbGUgJyVzJyIKK21zZ3N0ciAiJyVzJyBkb3N5YXPEsW7EsW4gYmlsZ2lsZXJpIGFsxLFuYW1hZMSxIgorCisjOiBlbnZpcm9ubWVudC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2l0IG5hbWVzcGFjZSBwYXRoIFwiJXNcIiIKK21zZ3N0ciAiaGF0YWzEsSBnaXQgYWQgYWxhbsSxIHlvbHUgXCIlc1wiIgorCisjOiBlbnZpcm9ubWVudC5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0IEdJVF9ESVIgdG8gJyVzJyIKK21zZ3N0ciAiR0lUX0RJUiDFn3VuYSBheWFybGFuYW1hZMSxOiAnJXMnIgorCisjOiBleGVjLWNtZC5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmdzIHRvIHJ1biAlcyIKK21zZ3N0ciAiJXMgw6dhbMSxxZ90xLFybWFrIGnDp2luIMOnb2sgZmF6bGEgZGXEn2nFn2tlbiIKKworIzogZmV0Y2gtcGFjay5jOjE1MAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBzxLHEnyBiaXIgbGlzdGUgYmVrbGVuaXlvcmR1IgorCisjOiBmZXRjaC1wYWNrLmM6MTUzCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIGEgZmx1c2ggcGFja2V0IGFmdGVyIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IHPEscSfIGxpc3RlZGVuIHNvbnJhIGZsb8WfIHBha2V0aSBiZWtsZW5peW9yZHUiCisKKyM6IGZldGNoLXBhY2suYzoxNjQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogQUNLL05BSyBiZWtsZW5peW9yZHUsIGZsb8WfIHBha2V0IGFsxLFuZMSxIgorCisjOiBmZXRjaC1wYWNrLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgJyVzJyIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IEFDSy9OQUsgYmVrbGVuaXlvcmR1LCAnJXMnIGFsxLFuZMSxIgorCisjOiBmZXRjaC1wYWNrLmM6MTk1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRvIHJlbW90ZSIKK21zZ3N0ciAidXphayBrb251bWEgeWF6xLFsYW3EsXlvciIKKworIzogZmV0Y2gtcGFjay5jOjI1NworbXNnaWQgIi0tc3RhdGVsZXNzLXJwYyByZXF1aXJlcyBtdWx0aV9hY2tfZGV0YWlsZWQiCittc2dzdHIgIi0tc3RhdGVsZXNzLXJwYyBtdWx0aV9hY2tfZGV0YWlsZWQgZ2VyZWt0aXJpeW9yIgorCisjOiBmZXRjaC1wYWNrLmM6MzU2IGZldGNoLXBhY2suYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAiZ2XDp2Vyc2l6IHPEscSfIHNhdMSxcjogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjIgZmV0Y2gtcGFjay5jOjEzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1bnNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgImdlw6dlcnNpeiBzxLHEnyBvbG1heWFuIHNhdMSxcjogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjQgZmV0Y2gtcGFjay5jOjEzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIm5lc25lIGJ1bHVuYW1hZMSxOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NyBmZXRjaC1wYWNrLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICJuZXNuZSBpw6dpbmRlIGhhdGE6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY5IGZldGNoLXBhY2suYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNoYWxsb3cgZm91bmQ6ICVzIgorbXNnc3RyICJzxLHEnyBidWx1bmFtYWTEsTogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNzIgZmV0Y2gtcGFjay5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgc2hhbGxvdy91bnNoYWxsb3csIGdvdCAlcyIKK21zZ3N0ciAic8SxxJ8vc8SxxJ8gb2xtYXlhbiBiZWtsZW5peW9yZHUsICVzIGFsxLFuZMSxIgorCisjOiBmZXRjaC1wYWNrLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAlZCAlcyIKK21zZ3N0ciAiJXMgJWQgJXMgYWzEsW5kxLEiCisKKyM6IGZldGNoLXBhY2suYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgJXMiCittc2dzdHIgImdlw6dlcnNpeiBnw7ZuZGVyaSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQ2MgorbXNnaWQgImdpdmluZyB1cCIKK21zZ3N0ciAidmF6Z2XDp2lsaXlvciIKKworIzogZmV0Y2gtcGFjay5jOjQ3NSBwcm9ncmVzcy5jOjMyMworbXNnaWQgImRvbmUiCittc2dzdHIgImJpdHRpIgorCisjOiBmZXRjaC1wYWNrLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAoJWQpICVzIgorbXNnc3RyICIlcyAoJWQpICVzIGFsxLFuZMSxIgorCisjOiBmZXRjaC1wYWNrLmM6NTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgJXMgYXMgY29tcGxldGUiCittc2dzdHIgIiVzIHRhbWFtIG9sYXJhayBpbWxlbml5b3IiCisKKyM6IGZldGNoLXBhY2suYzo3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxyZWFkeSBoYXZlICVzICglcykiCittc2dzdHIgIiVzIGhhbGloYXrEsXJkYSB2YXIgKCVzKSIKKworIzogZmV0Y2gtcGFjay5jOjgxOAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJmZXRjaC1wYWNrOiB5YW5iYW50IMOnb8SfdWxsYW1hIMOnw7Z6w7xjw7xzw7wgYXlyxLEgw6dhdGFsbGFuYW3EsXlvciIKKworIzogZmV0Y2gtcGFjay5jOjgyNgorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgInByb3Rva29sIGhhdGFzxLE6IGhhdGFsxLEgcGFrZXQgw7xzdGJpbGdpc2kiCisKKyM6IGZldGNoLXBhY2suYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIgorbXNnc3RyICJmZXRjaC1wYWNrOiAlcyBheXLEsSDDp2F0YWxsYW5hbcSxeW9yIgorCisjOiBmZXRjaC1wYWNrLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGZhaWxlZCIKK21zZ3N0ciAiJXMgYmHFn2FyxLFzxLF6IG9sZHUiCisKKyM6IGZldGNoLXBhY2suYzo5MTgKK21zZ2lkICJlcnJvciBpbiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJ5YW5iYW50IMOnb8SfdWxsYW1hIMOnw7Z6w7xjw7xzw7xuZGUgaGF0YSIKKworIzogZmV0Y2gtcGFjay5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbiBpcyAlLipzIgorbXNnc3RyICJTdW51Y3Ugc8O8csO8bcO8ICUuKnMiCisKKyM6IGZldGNoLXBhY2suYzo5NzAgZmV0Y2gtcGFjay5jOjk3NiBmZXRjaC1wYWNrLmM6OTc5IGZldGNoLXBhY2suYzo5ODUKKyM6IGZldGNoLXBhY2suYzo5ODkgZmV0Y2gtcGFjay5jOjk5MyBmZXRjaC1wYWNrLmM6OTk3IGZldGNoLXBhY2suYzoxMDAxCisjOiBmZXRjaC1wYWNrLmM6MTAwNSBmZXRjaC1wYWNrLmM6MTAwOSBmZXRjaC1wYWNrLmM6MTAxMyBmZXRjaC1wYWNrLmM6MTAxNworIzogZmV0Y2gtcGFjay5jOjEwMjMgZmV0Y2gtcGFjay5jOjEwMjkgZmV0Y2gtcGFjay5jOjEwMzQgZmV0Y2gtcGFjay5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzICVzIgorbXNnc3RyICJTdW51Y3UgJXMgZGVzdGVrbGl5b3IiCisKKyM6IGZldGNoLXBhY2suYzo5NzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiCittc2dzdHIgIlN1bnVjdSBzxLHEnyBpc3RlbWNpbGVyaSBkZXN0ZWtsZW1peW9yIgorCisjOiBmZXRjaC1wYWNrLmM6MTAzMgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1zaW5jZSIKK21zZ3N0ciAiU3VudWN1IC0tc2hhbGxvdy1zaW5jZSBkZXN0ZWtsZW1peW9yIgorCisjOiBmZXRjaC1wYWNrLmM6MTAzNworbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1leGNsdWRlIgorbXNnc3RyICJTdW51Y3UgLS1zaGFsbG93LWV4Y2x1ZGUgZGVzdGVrbGVtaXlvciIKKworIzogZmV0Y2gtcGFjay5jOjEwNDEKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLWRlZXBlbiIKK21zZ3N0ciAiU3VudWN1IC0tZGVlcGVuIGRlc3Rla2xlbWl5b3IiCisKKyM6IGZldGNoLXBhY2suYzoxMDU4Cittc2dpZCAibm8gY29tbW9uIGNvbW1pdHMiCittc2dzdHIgIm9ydGFrIGfDtm5kZXJpIHlvayIKKworIzogZmV0Y2gtcGFjay5jOjEwNzAgZmV0Y2gtcGFjay5jOjE1MzYKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IGdldGlybWUgYmHFn2FyxLFzxLF6IgorCisjOiBmZXRjaC1wYWNrLmM6MTIwOQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgcmVxdWVzdHMiCittc2dzdHIgIlN1bnVjdSBzxLHEnyBpc3Rla2xlcmkgZGVzdGVrbGVtaXlvciIKKworIzogZmV0Y2gtcGFjay5jOjEyMTYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgZmlsdGVyIgorbXNnc3RyICJTdW51Y3Ugc8O8emdlw6cgZGVzdGVrbGl5b3IiCisKKyM6IGZldGNoLXBhY2suYzoxMjM5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcXVlc3QgdG8gcmVtb3RlIgorbXNnc3RyICJ1emFrIGtvbnVtYSBpc3RlayB5YXrEsWxhbcSxeW9yIgorCisjOiBmZXRjaC1wYWNrLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIHNlY3Rpb24gaGVhZGVyICclcyciCittc2dzdHIgImLDtmzDvG0gw7xzdGJpbGdpc2kgJyVzJyBva3VudXJrZW4gaGF0YSIKKworIzogZmV0Y2gtcGFjay5jOjEyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJyVzJywgcmVjZWl2ZWQgJyVzJyIKK21zZ3N0ciAiJyVzJyBiZWtsZW5peW9yZHUsICclcycgYWzEsW5kxLEiCisKKyM6IGZldGNoLXBhY2suYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgYWNrbm93bGVkZ21lbnQgbGluZTogJyVzJyIKK21zZ3N0ciAiYmVrbGVubWVkaWsgYWzEsW5kxLEgc2F0xLFyxLE6ICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxMzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgYWNrczogJWQiCittc2dzdHIgImFsxLFuZMSxbGFyIGnFn2xlbmlya2VuIGhhdGE6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTMxOAorbXNnaWQgImV4cGVjdGVkIHBhY2tmaWxlIHRvIGJlIHNlbnQgYWZ0ZXIgJ3JlYWR5JyIKK21zZ3N0ciAicGFrZXQgZG9zeWFzxLFuxLFuICdyZWFkeSdkZW4gc29ucmEgZ8O2bmRlcmlsbWVzaSBnZXJla2l5b3JkdSIKKworIzogZmV0Y2gtcGFjay5jOjEzMjAKK21zZ2lkICJleHBlY3RlZCBubyBvdGhlciBzZWN0aW9ucyB0byBiZSBzZW50IGFmdGVyIG5vICdyZWFkeSciCittc2dzdHIgIidyZWFkeScgXCJ5b2tcIiBpa2VuIGJhxZ9rYSBoacOnYmlyIGLDtmzDvG3DvG4gZ8O2bmRlcmlsbWVtZXNpIGdlcmVraXlvcmR1IgorCisjOiBmZXRjaC1wYWNrLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHNoYWxsb3cgaW5mbzogJWQiCittc2dzdHIgInPEscSfIGJpbGdpIGnFn2xlbmlya2VuIGhhdGE6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCB3YW50ZWQtcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAid2FudGVkLXJlZiBiZWtsZW5peW9yZHUsICclcycgYWzEsW5kxLEiCisKKyM6IGZldGNoLXBhY2suYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgd2FudGVkLXJlZjogJyVzJyIKK21zZ3N0ciAiYmVrbGVubWVkaWsgd2FudGVkLXJlZjogJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyB3YW50ZWQgcmVmczogJWQiCittc2dzdHIgImFyYW5hbiBiYcWfdnVydWxhciBpxZ9sZW5pcmtlbiBoYXRhOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE3NjIKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAiZcWfbGXFn2VuIHV6YWsgZGFsIHVjdSB5b2siCisKKyM6IGZldGNoLXBhY2suYzoxNzg1IGJ1aWx0aW4vY2xvbmUuYzo2ODkKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAidXphayBrb251bSBnZXJla2VuIHTDvG0gbmVzbmVsZXJpIGfDtm5kZXJtZWRpIgorCisjOiBmZXRjaC1wYWNrLmM6MTgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlbW90ZSByZWYgJXMiCittc2dzdHIgImLDtnlsZSBiaXIgdXphayBiYcWfdnVydSB5b2s6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3QgYWxsb3cgcmVxdWVzdCBmb3IgdW5hZHZlcnRpc2VkIG9iamVjdCAlcyIKK21zZ3N0ciAiU3VudWN1ICVzIHRhbsSxdMSxbG1hbcSxxZ8gbmVzbmVzaSBpw6dpbiBpc3RlxJ9lIGl6aW4gdmVybWl5b3IiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzo0MDgKK21zZ2lkICJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiCittc2dzdHIgImdwZyB2ZXJpeWkgaW16YWxheWFtYWTEsSIKKworIzogZ3BnLWludGVyZmFjZS5jOjQzNAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgImdlw6dpY2kgZG9zeWEgb2x1xZ90dXJ1bGFtYWTEsSIKKworIzogZ3BnLWludGVyZmFjZS5jOjQzNworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJyIKK21zZ3N0ciAixZ91bmEgYXlyxLFrIGltemEgeWF6xLFsYW1hZMSxOiAnJXMnIgorCisjOiBncmFwaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yZSBpbnZhbGlkIGNvbG9yICclLipzJyBpbiBsb2cuZ3JhcGhDb2xvcnMiCittc2dzdHIgImxvZy5ncmFwaENvbG9ycyBpw6dpbmRla2kgJyUuKnMnIGdlw6dlcnNpeiByZW5naW5pIHlvayBzYXkiCisKKyM6IGdyZXAuYzo2NjgKK21zZ2lkICIiCisiZ2l2ZW4gcGF0dGVybiBjb250YWlucyBOVUxMIGJ5dGUgKHZpYSAtZiA8ZmlsZT4pLiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkICIKKyJ3aXRoIC1QIHVuZGVyIFBDUkUgdjIiCittc2dzdHIgIiIKKyJ2ZXJpbGVuIGRpemdpIE5VTEwgYmF5dMSxIGnDp2VyaXlvciAoLWYgPGRvc3lhPiBpbGUpLiBCdSB5YWxuxLF6Y2EgUENSRSB2MiAiCisiYWx0xLFuZGEgLVAgaWxlIGRlc3Rla2xlbmlyIgorCisjOiBncmVwLmM6MjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJyVzJzogJXMgb2t1bmFtxLF5b3IiCisKKyM6IGdyZXAuYzoyMTQ1IHNldHVwLmM6MTY2IGJ1aWx0aW4vY2xvbmUuYzo0MTEgYnVpbHRpbi9kaWZmLmM6ODIKKyM6IGJ1aWx0aW4vcm0uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAiJyVzJyBkb3N5YXPEsW7EsW4gYmlsZ2lsZXJpIGFsxLFuYW1hZMSxIgorCisjOiBncmVwLmM6MjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkIgorbXNnc3RyICInJXMnOiBrxLFzYSBva3VtYSIKKworIzogaGVscC5jOjIzCittc2dpZCAic3RhcnQgYSB3b3JraW5nIGFyZWEgKHNlZSBhbHNvOiBnaXQgaGVscCB0dXRvcmlhbCkiCittc2dzdHIgImJpciDDp2FsxLHFn21hIGFsYW7EsSBiYcWfbGF0xLFuIChheXLEsWNhIGJrejogZ2l0IGhlbHAgdHV0b3JpYWwpIgorCisjOiBoZWxwLmM6MjQKK21zZ2lkICJ3b3JrIG9uIHRoZSBjdXJyZW50IGNoYW5nZSAoc2VlIGFsc286IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKK21zZ3N0ciAiZ8O8bmNlbCBkZcSfacWfaWtsaWtsZXIgw7x6ZXJpbmRlIMOnYWzEscWfxLFuIChheXLEsWNhIGJrejogZ2l0IGhlbHAgZXZlcnlkYXkpIgorCisjOiBoZWxwLmM6MjUKK21zZ2lkICJleGFtaW5lIHRoZSBoaXN0b3J5IGFuZCBzdGF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHJldmlzaW9ucykiCittc2dzdHIgImdlw6dtacWfaSB2ZSBkdXJ1bXUgZ8O2emRlbiBnZcOnaXJpbiAoYXlyxLFjYSBia3o6IGdpdCBoZWxwIHJldmlzaW9ucykiCisKKyM6IGhlbHAuYzoyNgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgIm9ydGFrIGdlw6dtacWfaW5pemkgYsO8ecO8dMO8biwgaW1sZXlpbiB2ZSBnZWxpxZ90aXJpbiIKKworIzogaGVscC5jOjI3Cittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICJiaXJsaWt0ZSDDp2FsxLHFn8SxbiAoYXlyxLFjYSBia3o6IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGhlbHAuYzozMQorbXNnaWQgIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIgorbXNnc3RyICJBbmEgS29tdXRsYXIiCisKKyM6IGhlbHAuYzozMgorbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIE1hbmlwdWxhdG9ycyIKK21zZ3N0ciAiWWFuIEtvbXV0bGFyIC8gWcO2bmxlbmRpcmljaWxlciIKKworIzogaGVscC5jOjMzCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAiWWFuIEtvbXV0bGFyIC8gU29yZ3VjdWxhciIKKworIzogaGVscC5jOjM0Cittc2dpZCAiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiCittc2dzdHIgIkJhxZ9rYWxhcsSxIGlsZSBFdGtpbGXFn2ltIgorCisjOiBoZWxwLmM6MzUKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIkTDvMWfw7xrIETDvHpleWxpIEtvbXV0bGFyIC8gWcO2bmxlbmRpcmljaWxlciIKKworIzogaGVscC5jOjM2Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAiRMO8xZ/DvGsgRMO8emV5bGkgS29tdXRsYXIgLyBTb3JndWN1bGFyIgorCisjOiBoZWxwLmM6MzcKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBTeW5jaW5nIFJlcG9zaXRvcmllcyIKK21zZ3N0ciAiRMO8xZ/DvGsgRMO8emV5bGkgS29tdXRsYXIgLyBEZXBvIEXFn2l0bGVtZSIKKworIzogaGVscC5jOjM4Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJuYWwgSGVscGVycyIKK21zZ3N0ciAiRMO8xZ/DvGsgRMO8emV5bGkgS29tdXRsYXIgLyDEsMOnIFlhcmTEsW1jxLFsYXIiCisKKyM6IGhlbHAuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaWxhYmxlIGdpdCBjb21tYW5kcyBpbiAnJXMnIgorbXNnc3RyICInJXMnIGnDp2luZGVraSBrdWxsYW7EsWxhYmlsaXIgZ2l0IGtvbXV0bGFyxLEiCisKKyM6IGhlbHAuYzozMDUKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgIiRQQVRIIGnDp2luZGVraSBiYcWfa2EgeWVybGVyZGVuIGt1bGxhbsSxbGFiaWxlbiBnaXQga29tdXRsYXLEsSIKKworIzogaGVscC5jOjMxNAorbXNnaWQgIlRoZXNlIGFyZSBjb21tb24gR2l0IGNvbW1hbmRzIHVzZWQgaW4gdmFyaW91cyBzaXR1YXRpb25zOiIKK21zZ3N0ciAiw4dlxZ9pdGxpIGR1cnVtbGFyZGEga3VsbGFuxLFsYW4gdGVtZWwgR2l0IGtvbXV0bGFyxLEgYcWfYcSfxLFkYWTEsXI6IgorCisjOiBoZWxwLmM6MzYzIGdpdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciCittc2dzdHIgImRlc3Rla2xlbm1leWVuIGtvbXV0IGxpc3RlbGVtZSB0w7xyw7wgJyVzJyIKKworIzogaGVscC5jOjQwMworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6IgorbXNnc3RyICJZYXlnxLFuIEdpdCBrxLFsYXZ1emxhcsSxOiIKKworIzogaGVscC5jOjUxMgorbXNnaWQgIlNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyB0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCIKK21zZ3N0ciAiQmVsaXJsaSBiaXIgYWx0a29tdXQgw7x6ZXJpbmUgb2t1bWFrIGnDp2luICdnaXQgaGVscCA8a29tdXQ+JyBrdWxsYW7EsW4iCisKKyM6IGhlbHAuYzo1MTcKK21zZ2lkICJFeHRlcm5hbCBjb21tYW5kcyIKK21zZ3N0ciAiRMSxxZ8ga29tdXRsYXIiCisKKyM6IGhlbHAuYzo1MzIKK21zZ2lkICJDb21tYW5kIGFsaWFzZXMiCittc2dzdHIgIktvbXV0IGFybWFsYXLEsSIKKworIzogaGVscC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKyInJXMnIGJpciBnaXQga29tdXR1IGdpYmkgZ8O2csO8bsO8eW9yLCBhbmNhayBiaXogb251XG4iCisiw6dhbMSxxZ90xLFyYW1hZMSxay4gZ2l0LSVzIGJvenVrIG9sYWJpbGlyIG1pPyIKKworIzogaGVscC5jOjY1NQorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICJUw7xoLiBTaXN0ZW1pbml6IGhpw6diaXIgR2l0IGtvbXV0dW51IGJpbGRpcm1peW9yLiIKKworIzogaGVscC5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICIiCisiVVlBUkk6ICclcycgYWTEsW5kYSBiaXIgR2l0IGtvbXV0dW51IMOnYcSfxLFyZMSxbsSxeiwgYW5jYWsgYsO2eWxlIGJpciBrb211dCB5b2suIgorCisjOiBoZWxwLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgIiclcycgZGVtZWsgaXN0ZWRpxJ9pbml6IHZhcnNhecSxbGFyYWsgc8O8cmTDvHLDvGzDvHlvci4iCisKKyM6IGhlbHAuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyBpbiAlMC4xZiBzZWNvbmRzLCBhc3N1bWluZyB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAiJTAuMWYgc2FuaXllIGnDp2luZGUgc8O8cmTDvHLDvGzDvHlvciwgJyVzJyBkZW1layBpc3RlZGnEn2luaXogdmFyc2F5xLFsYWNhay4iCisKKyM6IGhlbHAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiZ2l0OiAnJXMnIGJpciBnaXQga29tdXR1IGRlxJ9pbC4gWWFyZMSxbSBpw6dpbjogJ2dpdCAtLWhlbHAnLiIKKworIzogaGVscC5jOjY5OQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmRzIGFyZSIKK21zZ3N0clswXSAiIgorIlxuIgorIkJ1bmEgZW4geWFrxLFuIGtvbXV0OiIKK21zZ3N0clsxXSAiIgorIlxuIgorIkJ1bmEgZW4geWFrxLFuIGtvbXV0bGFyOiIKKworIzogaGVscC5jOjcxNAorbXNnaWQgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgdmVyc2lvbiBbPHNlw6dlbmVrbGVyPl0iCisKKyM6IGhlbHAuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIC0gJXMiCittc2dzdHIgIiVzOiAlcyAtICVzIgorCisjOiBoZWxwLmM6Nzg3Cittc2dpZCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiB0aGlzPyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IgorbXNnc3RyWzBdICIiCisiXG4iCisixZ51bnUgbXUgZGVtZWsgaXN0ZWRpbml6PyIKK21zZ3N0clsxXSAiIgorIlxuIgorIsWedW5sYXJkYW4gYmlyaW5pIG1pIGRlbWVrIGlzdGVkaW5pej8iCisKKyM6IGlkZW50LmM6MzQ5Cittc2dpZCAiIgorIlxuIgorIioqKiBQbGVhc2UgdGVsbCBtZSB3aG8geW91IGFyZS5cbiIKKyJcbiIKKyJSdW5cbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisidG8gc2V0IHlvdXIgYWNjb3VudCdzIGRlZmF1bHQgaWRlbnRpdHkuXG4iCisiT21pdCAtLWdsb2JhbCB0byBzZXQgdGhlIGlkZW50aXR5IG9ubHkgaW4gdGhpcyByZXBvc2l0b3J5LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiKioqIEzDvHRmZW4gYmFuYSBraW0gb2xkdcSfdW51enUgc8O2eWxleWluLlxuIgorIlxuIgorIkhlc2FixLFuxLF6xLFuIMO2bnRhbsSxbWzEsSBraW1sacSfaW5pIGF5YXJsYW1hayBpw6dpblxuIgorIlxuIgorIlx0Z2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJBZMSxbsSxelwiXG4iCisiXHRnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJzaXpAZS1wb3N0YS5jb21cIlxuIgorIlxuIgorImtvbXV0bGFyxLFuxLEgw6dhbMSxxZ90xLFyxLFuLlxuIgorIktpbWxpxJ9pbml6aSB5YWxuxLF6Y2EgYnUgZGVwbyBpw6dpbiBnZcOnZXJsaSBrxLFsbWFrIGlzdGVyc2VuaXogLS1nbG9iYWxcbiIKKyJkZcSfacWfa2VuaW5pIGt1bGxhbm1hecSxbi5cbiIKKyJcbiIKKworIzogaWRlbnQuYzozNzkKK21zZ2lkICJubyBlbWFpbCB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICJiaXIgZS1wb3N0YSB2ZXJpbG1lZGkgdmUga2VuZGlsacSfaW5kZW4gYWxnxLFsYW1hIGRldnJlIGTEscWfxLEiCisKKyM6IGlkZW50LmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBlbWFpbCBhZGRyZXNzIChnb3QgJyVzJykiCittc2dzdHIgImUtcG9zdGEgYWRyZXNpIGtlbmRpbGnEn2luZGVuIGFsZ8SxbGFuYW3EsXlvciAoJyVzJyBhbMSxbmTEsSkiCisKKyM6IGlkZW50LmM6NDAxCittc2dpZCAibm8gbmFtZSB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICJiaXIgYWQgdmVyaWxtZWRpIHZlIGtlbmRpbGnEn2luZGVuIGFsZ8SxbGFtYSBkZXZyZSBkxLHFn8SxIgorCisjOiBpZGVudC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgbmFtZSAoZ290ICclcycpIgorbXNnc3RyICJhZCBrZW5kaWxpxJ9pbmRlbiBhbGfEsWxhbmFtxLF5b3IgKCclcycgYWzEsW5kxLEpIgorCisjOiBpZGVudC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBpZGVudCBuYW1lIChmb3IgPCVzPikgbm90IGFsbG93ZWQiCittc2dzdHIgImJvxZ8gdGFuxLFtbGF5xLFjxLEgYWTEsW5hICg8JXM+IGnDp2luKSBpemluIHZlcmlsbWl5b3IiCisKKyM6IGlkZW50LmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIgorbXNnc3RyICJhZCB5YWxuxLF6Y2EgaXppbiB2ZXJpbG1leWVuIGthcmFrdGVybGVyZGVuIG9sdcWfdXlvcjogJXMiCisKKyM6IGlkZW50LmM6NDM2IGJ1aWx0aW4vY29tbWl0LmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICJnZcOnZXJzaXogdGFyaWggYmnDp2ltaTogJXMiCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJlbnRyeSAnJXMnIGluIHRyZWUgJXMgaGFzIHRyZWUgbW9kZSwgYnV0IGlzIG5vdCBhIHRyZWUiCittc2dzdHIgIiclcycgZ2lyZGlzaSAoJXMgYcSfYWPEsW5kYSkgYcSfYcOnIGtpcGluZSBpeWUsIGFuY2FrIGJpciBhxJ9hw6cgZGXEn2lsIgorCisjOiBsaXN0LW9iamVjdHMuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyBibG9iIG1vZGUsIGJ1dCBpcyBub3QgYSBibG9iIgorbXNnc3RyICIiCisiJyVzJyBnaXJkaXNpICglcyBhxJ9hY8SxbmRhKSBpa2lsaSBuZXNuZSBraXBpbmUgaXllLCBhbmNhayBiaXIgaWtpbGkgZ2VuacWfICIKKyJuZXNuZSBkZcSfaWwiCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCByb290IHRyZWUgZm9yIGNvbW1pdCAlcyIKK21zZ3N0ciAiJXMgZ8O2bmRlcmlzaSBpw6dpbiBrw7ZrIGHEn2FjxLEgecO8a2xlbmVtaXlvciIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIHNwYXJzZSBibG9iIGluICclcyciCittc2dzdHIgIiclcycgacOnaW5kZWtpIGFyYWzEsWtsxLEgaWtpbGkgbmVzbmV5ZSBlcmnFn2lsZW1peW9yIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBzcGFyc2UgZmlsdGVyIGRhdGEgaW4gJXMiCittc2dzdHIgIiVzIGnDp2luZGVraSBhcmFsxLFrbMSxIHPDvHpnZcOnIHZlcmlzaSBheXLEscWfdMSxcsSxbGFtxLF5b3IiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjU4Cittc2dpZCAiZXhwZWN0ZWQgJ3RyZWU6PGRlcHRoPiciCittc2dzdHIgIid0cmVlOjxkZXJpbmxpaz4nIGJla2xlbml5b3JkdSIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NzMKK21zZ2lkICJzcGFyc2U6cGF0aCBmaWx0ZXJzIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCIKK21zZ3N0ciAic3BhcnNlOnBhdGggc8O8emdlw6dsZXJpIGRlc3RlxJ9pIGFydMSxayB5b2siCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsdGVyLXNwZWMgJyVzJyIKK21zZ3N0ciAiZ2XDp2Vyc2l6IGZpbHRlci1zcGVjICclcyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtdXN0IGVzY2FwZSBjaGFyIGluIHN1Yi1maWx0ZXItc3BlYzogJyVjJyIKK21zZ3N0ciAic3ViLWZpbHRlci1zcGVjIGnDp2luZGUga2HDp8SxxZ8ga2FyYWt0ZXJpIG9sbWFsxLE6ICclYyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjE0NAorbXNnaWQgImV4cGVjdGVkIHNvbWV0aGluZyBhZnRlciBjb21iaW5lOiIKK21zZ3N0ciAiYmlybGlrdGUga3VsbGFuxLFtZGFuIHNvbnJhIGJpciDFn2V5bGVyIGJla2xlbml5b3JkdToiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjIyNgorbXNnaWQgIm11bHRpcGxlIGZpbHRlci1zcGVjcyBjYW5ub3QgYmUgY29tYmluZWQiCittc2dzdHIgIsOnb2tsdSBmaWx0ZXItc3BlY3MgYmlybGlrdGUga3VsbGFuxLFsYW1heiIKKworIzogbG9ja2ZpbGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcy5cbiIKKyJcbiIKKyJBbm90aGVyIGdpdCBwcm9jZXNzIHNlZW1zIHRvIGJlIHJ1bm5pbmcgaW4gdGhpcyByZXBvc2l0b3J5LCBlLmcuXG4iCisiYW4gZWRpdG9yIG9wZW5lZCBieSAnZ2l0IGNvbW1pdCcuIFBsZWFzZSBtYWtlIHN1cmUgYWxsIHByb2Nlc3Nlc1xuIgorImFyZSB0ZXJtaW5hdGVkIHRoZW4gdHJ5IGFnYWluLiBJZiBpdCBzdGlsbCBmYWlscywgYSBnaXQgcHJvY2Vzc1xuIgorIm1heSBoYXZlIGNyYXNoZWQgaW4gdGhpcyByZXBvc2l0b3J5IGVhcmxpZXI6XG4iCisicmVtb3ZlIHRoZSBmaWxlIG1hbnVhbGx5IHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAiIgorIiclcy5sb2NrJyBvbHXFn3R1cnVsYW3EsXlvcjogJXMuXG4iCisiXG4iCisiQnUgZGVwb2RhIGJhxZ9rYSBiaXIgZ2l0IGnFn2xlbWkgw6dhbMSxxZ/EsXlvciBnaWJpIGfDtnLDvG7DvHlvciwgw7ZybmXEn2luXG4iCisiJ2dpdCBjb21taXQnIGt1bGxhbsSxbGFyYWsgYcOnxLFsbcSxxZ8gYmlyIGTDvHplbmxleWljaS4gTMO8dGZlbiB0w7xtIGnFn2xlbWxlcmluXG4iCisic29ubGFuZMSxcsSxbGTEscSfxLFuZGFuIGVtaW4gb2x1biB2ZSB5ZW5pZGVuIGRlbmV5aW4uIEXEn2VyIGjDomzDoiBiYcWfYXLEsXPEsXpcbiIKKyJvbHV5b3JzYSBiaXIgZ2l0IGnFn2xlbWkgYnUgZGVwbyBpw6dpbmRlIGRhaGEgw7ZuY2VkZW4gw6dha8SxbG3EscWfIG9sYWJpbGlyOlxuIgorIlPDvHJkw7xybWVrIGnDp2luIGRvc3lhecSxIGVsIGlsZSBrYWxkxLFyxLFuLiIKKworIzogbG9ja2ZpbGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzIgorbXNnc3RyICInJXMubG9jaycgb2x1xZ90dXJ1bGFtxLF5b3I6ICVzIgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICLDtm5iZWxsZWsgb2t1bmFtYWTEsSIKKworIzogbWVyZ2UuYzoxMDcgcmVyZXJlLmM6NzIwIGJ1aWx0aW4vYW0uYzoxODc5IGJ1aWx0aW4vYW0uYzoxOTEzCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTQxIGJ1aWx0aW4vY2hlY2tvdXQuYzo4MDAgYnVpbHRpbi9jbG9uZS5jOjgxMAorIzogYnVpbHRpbi9zdGFzaC5jOjI2NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAieWVuaSBpbmRla3MgZG9zeWFzxLEgeWF6xLFsYW3EsXlvciIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzU2Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIihoYXRhbMSxIGfDtm5kZXJpKVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICIiCisiYWRkX2NhY2hlaW5mbyAnJXMnIHlvbHUgacOnaW4gYmHFn2FyxLFzxLF6IG9sZHU7IGJpcmxlxZ90aXJtZSBpcHRhbCBlZGlsaXlvci4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRfY2FjaGVpbmZvIGZhaWxlZCB0byByZWZyZXNoIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiYWRkX2NhY2hlaW5mbyAnJXMnIHlvbHUgacOnaW4geWVuaWxlbmVtZWRpOyBiaXJsZcWfdGlybWUgaXB0YWwgZWRpbGl5b3IuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAiJyVzJyVzIHlvbHUgb2x1xZ90dXJ1bGFtYWTEsSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIHRvIG1ha2Ugcm9vbSBmb3Igc3ViZGlyZWN0b3J5XG4iCittc2dzdHIgIkFsdGRpemluZSB5ZXIgYcOnbWFrIGnDp2luICVzIGthbGTEsXLEsWzEsXlvclxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4OTkgbWVyZ2UtcmVjdXJzaXZlLmM6OTE4Cittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAiOiBiaXIgRC9GIMOnYWvEscWfbWFzxLEgb2xhYmlsaXIgbWk/IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICInJXMnIGtvbnVtdW5kYWtpIGl6bGVubWV5ZW4gZG9zeWF5xLEga2F5YmV0bWUgcmVkZGVkaWxpeW9yIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NDkgYnVpbHRpbi9jYXQtZmlsZS5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnIgorbXNnc3RyICIlcyAnJXMnIG5lc25lc2kgb2t1bmFtxLF5b3IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk1NAorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICIlcyAnJXMnIGnDp2luIGlraWxpIG5lc25lIGJla2xlbml5b3JkdSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyc6ICVzIgorbXNnc3RyICInJXMnIGHDp8SxbGFtYWTEsTogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnOiAlcyIKK21zZ3N0ciAiJyVzJyBpw6dpbiBzZW1ib2xpayBiYcSfIG9sdcWfdHVydWxhbWFkxLE6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAixZ91bnVubGEgbmUgeWFwxLFsYWNhxJ/EsSBiaWxpbm1peW9yOiAlMDZvICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGNoZWNrZWQgb3V0KSIKK21zZ3N0ciAiJXMgYWx0bW9kw7xsw7wgYmlybGXFn3RpcmlsZW1lZGkgKMOnxLFrxLHFnyB5YXDEsWxtYWTEsSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBub3QgcHJlc2VudCkiCittc2dzdHIgIiVzIGFsdG1vZMO8bMO8IGJpcmxlxZ90aXJpbGVtZWRpIChnw7ZuZGVyaWxlciBtZXZjdXQgZGXEn2lsKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIGRvbid0IGZvbGxvdyBtZXJnZS1iYXNlKSIKK21zZ3N0ciAiJXMgYWx0bW9kw7xsw7wgYmlybGXFn3RpcmlsZW1lZGkgKGfDtm5kZXJpbGVyIG1lcmdlLWJhc2UnaSB0YWtpcCBldG1peW9yKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxMyBtZXJnZS1yZWN1cnNpdmUuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMgdG8gdGhlIGZvbGxvd2luZyBjb21taXQ6IgorbXNnc3RyICIlcyBhbHRtb2TDvGzDvCDFn3UgZ8O2bmRlcml5ZSBpbGVyaSBzYXLEsWzEsXlvcjoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMTYgbWVyZ2UtcmVjdXJzaXZlLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIgorbXNnc3RyICIlcyBhbHRtb2TDvGzDvCBpbGVyaSBzYXLEsWzEsXlvciIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtZXJnZSBmb2xsb3dpbmcgY29tbWl0cyBub3QgZm91bmQpIgorbXNnc3RyICIiCisiJXMgYWx0bW9kw7xsw7wgYmlybGXFn3RpcmlsZW1lZGkgKGfDtm5kZXJpbGVyaSB0YWtpcCBlZGVuIGJpcmxlxZ90aXJtZSBidWx1bmFtYWTEsSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGZhc3QtZm9yd2FyZCkiCittc2dzdHIgIiVzIGFsdG1vZMO8bMO8IGJpcmxlxZ90aXJpbGVtZWRpIChpbGVyaSBzYXLEsW0gZGXEn2lsKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1NgorbXNnaWQgIkZvdW5kIGEgcG9zc2libGUgbWVyZ2UgcmVzb2x1dGlvbiBmb3IgdGhlIHN1Ym1vZHVsZTpcbiIKK21zZ3N0ciAixZ51IGFsdG1vZMO8bCBpw6dpbiBvbGFzxLEgYmlyIGJpcmxlxZ90aXJtZSDDp8O2esO8bcO8IGJ1bHVuZHU6XG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHRoaXMgaXMgY29ycmVjdCBzaW1wbHkgYWRkIGl0IHRvIHRoZSBpbmRleCBmb3IgZXhhbXBsZVxuIgorImJ5IHVzaW5nOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisid2hpY2ggd2lsbCBhY2NlcHQgdGhpcyBzdWdnZXN0aW9uLlxuIgorbXNnc3RyICIiCisiRcSfZXIgYnUgZG/En3J1eXNhIHlhbG7EsXpjYSBpbmRla3NlIGVrbGV5aW4sIMO2cm5lxJ9pbmJ1IMO2bmVyaXlpIGthYnVsIGVkZWNlazpcbiIKKyJcbiIKKyJcdGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorImtvbXV0dW51IGt1bGxhbm1hbsSxeiB5ZXRlcmxpZGlyLlxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG11bHRpcGxlIG1lcmdlcyBmb3VuZCkiCittc2dzdHIgIiVzIGFsdG1vZMO8bMO8IGJpcmxlxZ90aXJpbGVtZWRpIChiaXJkZW4gw6dvayBiaXJsZcWfdGlybWUgYnVsdW5kdSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNDEKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAixLDDpyBiaXJsZcWfdGlybWUgw6dhbMSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiCittc2dzdHIgIiVzIHZlcml0YWJhbsSxbmEgZWtsZW5lbWVkaSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvLW1lcmdpbmcgJXMiCittc2dzdHIgIiVzIGtlbmRpbGnEn2luZGVuIGJpcmxlxZ90aXJpbGl5b3IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IFJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IHdyaXRpbmcgdG8gJXMgaW5zdGVhZC4iCittc2dzdHIgIiIKKyJIYXRhOiAlcyBrb251bXVuZGFraSBpemxlbm1leWVuIGRvc3lhecSxIGtheWJldG1lIHJlZGRlZGlsaXlvciwgYnVudW4geWVyaW5lICIKKyIlcyBrb251bXVuYSB5YXrEsWxhY2FrLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisiw4dBS0nFnk1BICglcy9zaWxtZSk6ICVzIHNpbGluZGkgKCVzIGnDp2luZGUpIHZlICVzICglcyBpw6dpbmRlKS4gJXMgKCVzKSBzw7xyw7xtw7wgIgorImHEn2HDp3RhIGLEsXJha8SxbGTEsS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlLiIKK21zZ3N0ciAiIgorIsOHQUtJxZ5NQSAoJXMvc2lsbWUpOiAlcyBzaWxpbmRpICglcyBpw6dpbmRlKSB2ZSAlcyDFn3VyYXlhOiAlcyAoJXMgacOnaW5kZSkuICVzICIKKyIoJXMpIHPDvHLDvG3DvCBhxJ9hw6d0YSBixLFyYWvEsWxkxLEuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyLDh0FLScWeTUEgKCVzL3NpbG1lKTogJXMgc2lsaW5kaSAoJXMgacOnaW5kZSkgdmUgJXMgKCVzIGnDp2luZGUpLiAlcyAoJXMpIHPDvHLDvG3DvCAiCisiYcSfYcOndGEgJXMga29udW11bmRhIGLEsXJha8SxbGTEsS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIsOHQUtJxZ5NQSAoJXMvc2lsbWUpOiAlcyBzaWxpbmRpICglcyBpw6dpbmRlKSB2ZSAlcyDFn3VyYXlhOiAlcyAoJXMgacOnaW5kZSkuICVzICIKKyIoJXMpIHPDvHLDvG3DvCBhxJ9hw6d0YSAlcyBrb251bXVuZGEgYsSxcmFrxLFsZMSxLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUyNgorbXNnaWQgInJlbmFtZSIKK21zZ3N0ciAieWVuaWRlbiBhZGxhbmTEsXIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjYKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICJ5ZW5pZGVuIGFkbGFuZMSxcsSxbGTEsSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU3NyBtZXJnZS1yZWN1cnNpdmUuYzoyNDcyIG1lcmdlLXJlY3Vyc2l2ZS5jOjMxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0ICVzIgorbXNnc3RyICIlcyBrb251bXVuZGFraSBraXJsaSBkb3N5YXnEsSBrYXliZXRtZSByZWRkZWRpbGl5b3IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAiIgorIkVuZ2VsIG9sZHXEn3UgaGFsZGUgJXMga29udW11bmRha2kgaXpsZW5tZXllbiBkb3N5YXnEsSBrYXliZXRtZSByZWRkZWRpbGl5b3IuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gIEFkZGVkICVzIGluICVzIgorbXNnc3RyICIiCisiw4dBS0nFnk1BICh5ZW5pZGVuIGFkbGFuZMSxci9la2xlKTogJXMtPiVzIG9sYXJhayBhZGxhbmTEsXLEsWxkxLEgKCVzIGnDp2luZGUpLiAlcyAiCisiZWtsZW5kaSAoJXMgacOnaW5kZSkuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgZGlyZWN0b3J5IGluICVzIGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIlcyBiaXIgZGl6aW4gKCVzIGnDp2luZGUpLCBidW51biB5ZXJpbmUgJXMgb2xhcmFrIGVrbGVuaXlvciIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY4MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiIgorIiVzIGtvbnVtdW5kYWtpIGl6bGVubWV5ZW4gZG9zeWF5xLEga2F5YmV0bWUgcmVkZGVkaWxpeW9yLCBidW51biB5ZXJpbmUgJXMgIgorIm9sYXJhayBla2xlbml5b3IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lIFwiJXMiCisiXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAiIgorIsOHQUtJxZ5NQSAoeS4gYWRsYW5kxLFyL3kuIGFkbGFuZMSxcik6IFwiJXNcIi0+XCIlc1wiIG9sYXJhayBhZGxhbmTEsXIgKFwiJXNcIiAiCisiZGFsxLFuZGEpLCBcIiVzXCItPlwiJXNcIiBvbGFyYWsgYWRsYW5kxLFyIChcIiVzXCIlcyBpw6dpbmRlKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcxMworbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiICjDp8O2esO8bG1lZGVuIGLEsXJha8SxbGTEsSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgJXMtPiVzIGluICVzLiBSZW5hbWUgJXMtPiVzIGluICVzIgorbXNnc3RyICIiCisiw4dBS0nFnk1BICh5LiBhZGxhbmTEsXIveS4gYWRsYW5kxLFyKTogJXMtPiVzIG9sYXJhayBhZGxhbmTEsXIgKCVzIGnDp2luZGUpLiAlcy0+IgorIiVzIG9sYXJhayBhZGxhbmTEsXIgKCVzIGnDp2luZGUpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZGlyZWN0b3J5IHJlbmFtZSBzcGxpdCk6IFVuY2xlYXIgd2hlcmUgdG8gcGxhY2UgJXMgYmVjYXVzZSAiCisiZGlyZWN0b3J5ICVzIHdhcyByZW5hbWVkIHRvIG11bHRpcGxlIG90aGVyIGRpcmVjdG9yaWVzLCB3aXRoIG5vIGRlc3RpbmF0aW9uICIKKyJnZXR0aW5nIGEgbWFqb3JpdHkgb2YgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIsOHQUtJxZ5NQTogKGRpemluIHllbmlkZW4gYWRsYW5kxLFybWEgYXlyxLFsbWFzxLEpOiAlcyDDtmdlc2luaW4gbmVyZXllICIKKyJ5ZXJsZcWfdGlyaWxlY2XEn2kgYmVsaXJzaXogw6fDvG5rw7wgJXMgZGl6aW5pIGJpcmRlbiDDp29rIGJhxZ9rYSBkaXppbmUgeWVuaWRlbiAiCisiYWRsYW5kxLFyxLFsxLFya2VuIGhpw6diaXIgaGVkZWYgZG9zeWFsYXLEsW4gYsO8ecO8ayDDp2/En3VubHXEn3VudSBhbG1hZMSxLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBFeGlzdGluZyBmaWxlL2RpciBhdCAlcyBpbiB0aGUgd2F5IG9mICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lKHMpIHB1dHRpbmcgdGhlIGZvbGxvd2luZyBwYXRoKHMpIHRoZXJlOiAlcy4iCittc2dzdHIgIiIKKyLDh0FLScWeTUEgKMO2cnTDvGzDvCBkaXppbiB5ZW5pZGVuIGFkbGFuZMSxcm1hKTogJXMga29udW11bmRha2kgbWV2Y3V0IGRvc3lhL2RpemluICIKKyLDtnJ0w7xsw7wgeWVuaWRlbiBhZGxhbmTEsXJtYW7EsW4gYcWfYcSfxLFkYWtpIHlvbGxhcsSxIG9yYXlhIGtveW1hc8SxbmEgZW5nZWwgb2x1eW9yOiAiCisiJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IENhbm5vdCBtYXAgbW9yZSB0aGFuIG9uZSBwYXRoIHRvICVzOyAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZXMgdHJpZWQgdG8gcHV0IHRoZXNlIHBhdGhzIHRoZXJlOiAlcyIKK21zZ3N0ciAiIgorIsOHQUtJxZ5NQSAow7ZydMO8bMO8IGRpemluIHllbmlkZW4gYWRsYW5kxLFybWEpOiAlcyBpw6dpbiBiaXJkZW4gw6dvayB5b2wgIgorImXFn2xlbWxlbmVtaXlvcjsgw7ZydMO8bMO8IGRpemluIHllbmlkZW4gYWRsYW5kxLFybWFsYXLEsSBhxZ9hxJ/EsWRha2kgeW9sbGFyxLEgb3JheWEgIgorImtveW1hecSxIGRlbmVkaTogJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiBSZW5hbWUgZGlyZWN0b3J5ICVzLSIKKyI+JXMgaW4gJXMiCittc2dzdHIgIiIKKyLDh0FLScWeTUEgKHkuIGFkbGFuZMSxci95LiBhZGxhbmTEsXIpOiBEaXppbmkgJXMtPiVzIG9sYXJhayBhZGxhbmTEsXIgKCVzICIKKyJpw6dpbmRlKS4gRGl6aW5pICVzLT4lcyBvbGFyYWsgYWRsYW5kxLFyICglcyBpw6dpbmRlKS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nICVzIC0+ICVzIHJlbmFtZSB0byAlcywgYmVjYXVzZSAlcyBpdHNlbGYgd2FzICIKKyJyZW5hbWVkLiIKK21zZ3N0ciAiIgorIlVZQVJJOiAlcyAtPiAlcyB5ZW5pZGVuIGFkbGFuZMSxcm1hc8SxbsSxICVzIMO2Z2VzaW5lIHV5Z3VsYW1hZGFuIGthw6fEsW7EsWzEsXlvciwgIgorIsOnw7xua8O8ICVzIMO2Z2VzaW5pbiBrZW5kaXNpIHllbmlkZW4gYWRsYW5kxLFyxLFsZMSxLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mjk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIiVzIG5lc25lc2kgb2t1bmFtxLF5b3IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIiVzIG5lc25lc2kgaWtpbGkgYmlyIG5lc25lIGRlxJ9pbCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyOAorbXNnaWQgIm1vZGlmeSIKK21zZ3N0ciAiZGXEn2nFn3RpciIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyOAorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICJkZcSfacWfdGlyaWxtacWfIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDQwCittc2dpZCAiY29udGVudCIKK21zZ3N0ciAiacOnZXJpayIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA0NAorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgImVrbGUvZWtsZSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA2NworIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIiVzIGF0bGFuZMSxIChtZXZjdXQgaWxlIGF5bsSxIGJpw6dpbWRlIGJpcmxlxZ90aXJpbGRpKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA4OSBnaXQtc3VibW9kdWxlLnNoOjEwMDMKK21zZ2lkICJzdWJtb2R1bGUiCittc2dzdHIgImFsdG1vZMO8bCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAiw4dBS0nFnk1BICglcyk6ICVzIGnDp2luZGUgYmlybGXFn3Rpcm1lIMOnYWvEscWfbWFzxLEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIkJ1bnVuIHllcmluZSAlcyBvbGFyYWsgZWtsZW5peW9yIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzOyAiCisibW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorIllvbCBnw7xuY2VsbGVuZGk6ICVzLCAoJXMgacOnaW5kZSBla2xlbmVuKSAlcyBpw6dpbmRlIHllbmlkZW4gYWRsYW5kxLFyxLFsYW4gYmlyICIKKyJkaXppbmRlOyBvbnUgJXMga29udW11bmEgdGHFn8SxZMSxLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCAiCisiaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisiw4dBS0nFnk1BIChkb3N5YSBrb251bXUpOiAlcywgKCVzIGnDp2luZGUgZWtsZW5lbikgJXMgacOnaW5kZSB5ZW5pZGVuICIKKyJhZGxhbmTEsXLEsWxhbiBiaXIgZGl6aW5kZSwgYmVsa2kgZGUgJXMga29udW11bmEgdGHFn8Sxbm1hbMSxLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIxMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAiCisiJXM7IG1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKyJZb2wgZ8O8bmNlbGxlbmRpOiAlcywgJXMgb2xhcmFrIHllbmlkZW4gYWRsYW5kxLFyxLFsZMSxICglcyBpw6dpbmRlKSwgJXMgacOnaW5kZSAiCisieWVuaWRlbiBhZGxhbmTEsXLEsWxhbiBiaXIgZGl6aW5kZTsgb251ICVzIGtvbnVtdW5hIHRhxZ/EsWTEsS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgIgorIndhcyByZW5hbWVkIGluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorIsOHQUtJxZ5NQSAoZG9zeWEga29udW11KTogJXMsICVzIG9sYXJhayB5ZW5pZGVuIGFkbGFuZMSxcsSxbGTEsSAoJXMgacOnaW5kZSksICVzICIKKyJpw6dpbmRlIHllbmlkZW4gYWRsYW5kxLFyxLFsYW4gYmlyIGRpemluZGUsIGJlbGtpIGRlICVzIGtvbnVtdW5hIHRhxZ/EsW5tYWzEsS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgIiVzIGthbGTEsXLEsWzEsXlvciIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM1MAorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICJkb3N5YS9kaXppbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM1NQorbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICJkaXppbi9kb3N5YSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorIsOHQUtJxZ5NQSAoJXMpOiAlcyBhZMSxeWxhIGJpciBkaXppbiB2YXIgKCVzIGnDp2luZGUpLiAlcywgJXMgb2xhcmFrIGVrbGVuaXlvci4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICIlcyBla2xlbml5b3IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKGFkZC9hZGQpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAiw4dBS0nFnk1BIChla2xlL2VrbGUpOiAlcyBpw6dpbmRlIGJpcmxlxZ90aXJtZSDDp2FrxLHFn21hc8SxIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDI0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlISIKK21zZ3N0ciAiSGVyIMWfZXkgZ8O8bmNlbCEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICIlcyB2ZSAlcyBhxJ9hw6dsYXLEsW7EsW4gYmlybGXFn3RpcmlsbWVzaSBiYcWfYXLEsXPEsXoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1MzcKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAiQmlybGXFn3RpcmlsaXlvcjoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIKK21zZ2lkX3BsdXJhbCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiCittc2dzdHJbMF0gIiV1IG9ydGFrIGF0YSBidWx1bmR1OiIKK21zZ3N0clsxXSAiJXUgb3J0YWsgYXRhIGJ1bHVuZHU6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjAwCittc2dpZCAibWVyZ2UgcmV0dXJuZWQgbm8gY29tbWl0IgorbXNnc3RyICJiaXJsZcWfdGlybWUgaGVyaGFuZ2kgYmlyIGfDtm5kZXJpIGTDtm5kw7xybWVkaSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzY1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiICAlcyIKK21zZ3N0ciAiIgorIkJpcmxlxZ90aXJtZSBpbGUgYcWfYcSfxLFkYWtpIGRvc3lhbGFyZGFraSB5ZXJlbCBkZcSfacWfaWtsaWtsZXJpbiDDvHplcmluZSAiCisieWF6xLFsYWNhazpcbiIKKyJcdCVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiJyVzJyBuZXNuZXNpIGF5csSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzc0IGJ1aWx0aW4vbWVyZ2UuYzo2OTcgYnVpbHRpbi9tZXJnZS5jOjg3NworbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iCittc2dzdHIgIsSwbmRla3MgeWF6xLFsYW1hZMSxLiIKKworIzogbWlkeC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggZmlsZSAlcyBpcyB0b28gc21hbGwiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXggZG9zeWFzxLEgJXMgcGVrIGvDvMOnw7xrIgorCisjOiBtaWR4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBzaWduYXR1cmUgMHglMDh4IGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXggaW16YXPEsSAweCUwOHgsIDB4JTA4eCBpbXphc8SxIGlsZSBlxZ9sZcWfbWl5b3IiCisKKyM6IG1pZHguYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHZlcnNpb24gJWQgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXggc8O8csO8bcO8ICVkIHRhbsSxbWxhbmFtxLF5b3IiCisKKyM6IG1pZHguYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIHZlcnNpb24gJXUgZG9lcyBub3QgbWF0Y2giCittc2dzdHIgInNhxJ9sYW1hIHPDvHLDvG3DvCAldSBlxZ9sZcWfbWl5b3IiCisKKyM6IG1pZHguYzoxMDgKK21zZ2lkICJpbnZhbGlkIGNodW5rIG9mZnNldCAodG9vIGxhcmdlKSIKK21zZ3N0ciAiZ2XDp2Vyc2l6IGlyaSBwYXLDp2Egb2ZzZXRpICjDp29rIGdlbmnFnykiCisKKyM6IG1pZHguYzoxMzIKK21zZ2lkICJ0ZXJtaW5hdGluZyBtdWx0aS1wYWNrLWluZGV4IGNodW5rIGlkIGFwcGVhcnMgZWFybGllciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIiCisibXVsdGktcGFjay1pbmRleCBpcmkgcGFyw6dhc8SxIHNvbmxhbmTEsXLEsWzEsXlvciwgbnVtYXJhc8SxIGJla2xlbmVuZGVuIMO2bmNlICIKKyJnw7Zyw7xuw7x5b3IiCisKKyM6IG1pZHguYzoxNDUKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgcGFjay1uYW1lIGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4J3RlbiBnZXJla2xpIHBhY2stbmFtZSBpcmkgcGFyw6dhc8SxIGVrc2lrIgorCisjOiBtaWR4LmM6MTQ3Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBmYW5vdXQgY2h1bmsiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXgndGVuIGdlcmVrbGkgT0lEIGZhbm91dCBpcmkgcGFyw6dhc8SxIGVrc2lrIgorCisjOiBtaWR4LmM6MTQ5Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBsb29rdXAgY2h1bmsiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXgndGVuIGdlcmVrbGkgT0lEIGFyYW1hIGlyaSBwYXLDp2FzxLEgZWtzaWsiCisKKyM6IG1pZHguYzoxNTEKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgb2JqZWN0IG9mZnNldHMgY2h1bmsiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXgndGVuIGdlcmVrbGkgbmVzbmUgb2ZzZXRsZXJpIGlyaSBwYXLDp2FzxLEgZWtzaWsiCisKKyM6IG1pZHguYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBwYWNrIG5hbWVzIG91dCBvZiBvcmRlcjogJyVzJyBiZWZvcmUgJyVzJyIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCBwYWtldCBhZGxhcsSxbsSxbiBzxLFyYXPEsXo6ICclcycgxZ91bmRhbiDDtm5jZTogJyVzJyIKKworIzogbWlkeC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay1pbnQtaWQ6ICV1ICgldSB0b3RhbCBwYWNrcykiCittc2dzdHIgImhhdGFsxLEgcGFjay1pbnQtaWQ6ICV1ICgldSB0b3BsYW0gcGFrZXQpIgorCisjOiBtaWR4LmM6MjYwCittc2dpZCAibXVsdGktcGFjay1pbmRleCBzdG9yZXMgYSA2NC1iaXQgb2Zmc2V0LCBidXQgb2ZmX3QgaXMgdG9vIHNtYWxsIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IGJpciA2NCBiaXQgb2ZzZXQgZGVwb2x1eW9yLCBhbmNhayBvZmZfdCBwZWsga8O8w6fDvGsiCisKKyM6IG1pZHguYzoyODgKK21zZ2lkICJlcnJvciBwcmVwYXJpbmcgcGFja2ZpbGUgZnJvbSBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJwYWtldCBkb3N5YXPEsSBtdWx0aS1wYWNrLWluZGV4J3RlbiBoYXrEsXJsYW7EsXJrZW4gaGF0YSIKKworIzogbWlkeC5jOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWRkIHBhY2tmaWxlICclcyciCittc2dzdHIgInBha2V0IGRvc3lhc8SxICclcycgZWtsZW5lbWVkaSIKKworIzogbWlkeC5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwYWNrLWluZGV4ICclcyciCittc2dzdHIgInBhY2staW5kZXggJyVzJyBhw6fEsWxhbWFkxLEiCisKKyM6IG1pZHguYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvY2F0ZSBvYmplY3QgJWQgaW4gcGFja2ZpbGUiCittc2dzdHIgIiVkIG5lc25lc2kgcGFrZXQgZG9zeWFzxLFuZGEgYnVsdW5hbWFkxLEiCisKKyM6IG1pZHguYzo4NDIKK21zZ2lkICJBZGRpbmcgcGFja2ZpbGVzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIlBha2V0IGRvc3lhbGFyxLEgbXVsdGktcGFjay1pbmRleCdlIGVrbGVuaXlvciIKKworIzogbWlkeC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHNlZSBwYWNrLWZpbGUgJXMgdG8gZHJvcCIKK21zZ3N0ciAiYsSxcmFrxLFsYWNhayBwYWNrLWZpbGUgJXMgZ8O2csO8bG1lZGkiCisKKyM6IG1pZHguYzo5NzMKK21zZ2lkICJXcml0aW5nIGNodW5rcyB0byBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICLEsHJpIHBhcsOnYWxhciBtdWx0aS1wYWNrLWluZGV4J2UgeWF6xLFsxLF5b3IiCisKKyM6IG1pZHguYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbGVhciBtdWx0aS1wYWNrLWluZGV4IGF0ICVzIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4ICVzIGtvbnVtdW5kYSB0ZW1pemxlbmVtZWRpIgorCisjOiBtaWR4LmM6MTEwOAorbXNnaWQgIkxvb2tpbmcgZm9yIHJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICJCYcWfdnVydWxtdcWfIHBha2V0IGRvc3lhbGFyxLEgYXJhbsSxeW9yIgorCisjOiBtaWR4LmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisib2lkIGZhbm91dCBvdXQgb2Ygb3JkZXI6IGZhbm91dFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSBmYW5vdXRbJWRdIgorbXNnc3RyICJvaWQgZmFub3V0IHPEsXJhc8SxejogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCisKKyM6IG1pZHguYzoxMTI4Cittc2dpZCAiVmVyaWZ5aW5nIE9JRCBvcmRlciBpbiBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IGnDp2luZGVraSBPSUQgc8SxcmFzxLEgZG/En3J1bGFuxLF5b3IiCisKKyM6IG1pZHguYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9pZCBsb29rdXAgb3V0IG9mIG9yZGVyOiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorbXNnc3RyICJvaWQgYXJhbWFzxLEgc8SxcmFzxLF6OiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorCisjOiBtaWR4LmM6MTE1NworbXNnaWQgIlNvcnRpbmcgb2JqZWN0cyBieSBwYWNrZmlsZSIKK21zZ3N0ciAiTmVzbmVsZXIgcGFrZXQgZG9zeWFzxLFuYSBnw7ZyZSBzxLFyYWxhbsSxeW9yIgorCisjOiBtaWR4LmM6MTE2NAorbXNnaWQgIlZlcmlmeWluZyBvYmplY3Qgb2Zmc2V0cyIKK21zZ3N0ciAiTmVzbmUgb2ZzZXRsZXJpIGRvxJ9ydWxhbsSxeW9yIgorCisjOiBtaWR4LmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrIGVudHJ5IGZvciBvaWRbJWRdID0gJXMiCittc2dzdHIgIsWfdW51biBpw6dpbiBwYWtldCBnaXJkaXNpIHnDvGtsZW5lbWVkaTogb2lkWyVkXSA9ICVzIgorCisjOiBtaWR4LmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrLWluZGV4IGZvciBwYWNrZmlsZSAlcyIKK21zZ3N0ciAicGFrZXQgZG9zeWFzxLEgJXMgacOnaW4gcGFjay1pbmRleCB5w7xrbGVuZW1lZGkiCisKKyM6IG1pZHguYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImluY29ycmVjdCBvYmplY3Qgb2Zmc2V0IGZvciBvaWRbJWRdID0gJXM6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCittc2dzdHIgIsWfdW51biBpw6dpbiB5YW5sxLHFnyBuZXNuZSBvZnNldGk6IG9pZFslZF0gPSAlczogJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKKworIzogbWlkeC5jOjEyMjAKK21zZ2lkICJDb3VudGluZyByZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgIkJhxZ92dXJ1bG11xZ8gbmVzbmVsZXIgc2F5xLFsxLF5b3IiCisKKyM6IG1pZHguYzoxMjMwCittc2dpZCAiRmluZGluZyBhbmQgZGVsZXRpbmcgdW5yZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAiQmHFn3Z1cnVsbWFtxLHFnyBwYWtldCBkb3N5YWxhcsSxIGJ1bHVudXlvciB2ZSBzaWxpbml5b3IiCisKKyM6IG1pZHguYzoxMzg4Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFjay1vYmplY3RzIGJhxZ9sYXTEsWxhbWFkxLEiCisKKyM6IG1pZHguYzoxNDA3Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMiCittc2dzdHIgInBhY2stb2JqZWN0cyBiaXRpcmlsZW1lZGkiCisKKyM6IG5hbWUtaGFzaC5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfZGlyIHRocmVhZDogJXMiCittc2dzdHIgImxhenlfZGlyIGnFnyBwYXLDp2FjxLHEn8SxIG9sdcWfdHVydWxhbcSxeW9yOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgImxhenlfbmFtZSBvbHXFn3R1cnVsYW3EsXlvcjogJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsYXp5X25hbWUgdGhyZWFkOiAlcyIKK21zZ3N0ciAibGF6eV9uYW1lIGnFnyBwYXLDp2FjxLHEn8SxIHVjdSBiaXJsZcWfdGlyaWxlbWl5b3I6ICVzIgorCisjOiBub3Rlcy1tZXJnZS5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIHByZXZpb3VzIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLlxuIgorIlBsZWFzZSwgdXNlICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG9yICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcgdG8gIgorImNvbW1pdC9hYm9ydCB0aGUgcHJldmlvdXMgbWVyZ2UgYmVmb3JlIHlvdSBzdGFydCBhIG5ldyBub3RlcyBtZXJnZS4iCittc2dzdHIgIiIKKyJCaXIgw7ZuY2VraSBub3QgYmlybGXFn3Rpcm1lbml6aSBzb251w6dsYW5kxLFybWFkxLFuxLF6ICglcyB2YXIpLlxuIgorIkzDvHRmZW4gYmHFn2thIGJpciBub3QgYmlybGXFn3Rpcm1lc2luZSBiYcWfbGFtYWRhbiDDtm5jZSAnZ2l0IG5vdGVzIG1lcmdlIC0tIgorImNvbW1pdCcgdmV5YSAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIGt1bGxhbmFyYWsgYmlyIMO2bmNla2kgYmlybGXFn3Rpcm1leWkgIgorImfDtm5kZXJpbi9kdXJkdXJ1bi4iCisKKyM6IG5vdGVzLW1lcmdlLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS4iCittc2dzdHIgIk5vdGxhciBiaXJsZcWfdGlybWVuaXppIHNvbnXDp2xhbmTEsXJtYWTEsW7EsXogKCVzIHZhcikuIgorCisjOiBub3Rlcy11dGlscy5jOjQ2Cittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICLEsGxrbGVuZGlyaWxtZW1pxZ8vQmHFn3Z1cnVsbWFtxLHFnyBub3QgYcSfYWPEsSBnw7ZuZGVyaWxlbWl5b3IiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiSGF0YWzEsSBub3Rlcy5yZXdyaXRlTW9kZSBkZcSfZXJpOiAnJXMnIgorCisjOiBub3Rlcy11dGlscy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiJXMgacOnaW5kZWtpIG5vdGxhcsSxIHllbmlkZW4geWF6bWEgcmVkZGVkaWxpeW9yIChyZWZzL25vdGVzLyBkxLHFn8SxbmRhKSIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZgorIy4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzCisjLiBpdHMgdmFsdWUuCisjLgorIzogbm90ZXMtdXRpbHMuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICJIYXRhbMSxICVzIGRlxJ9lcmk6ICclcyciCisKKyM6IG9iamVjdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUgXCIlc1wiIgorbXNnc3RyICJnZcOnZXJzaXogbmVzbmUgdMO8csO8IFwiJXNcIiIKKworIzogb2JqZWN0LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBhICVzLCBub3QgYSAlcyIKK21zZ3N0ciAiJXMgbmVzbmVzaSBiaXIgJXMsICVzIGRlxJ9pbCIKKworIzogb2JqZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBoYXMgdW5rbm93biB0eXBlIGlkICVkIgorbXNnc3RyICIlcyBuZXNuZXNpICVkIGJpbGlubWV5ZW4gdMO8ciBudW1hcmFzxLFuYSBpeWUiCisKKyM6IG9iamVjdC5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIKK21zZ3N0ciAibmVzbmUgYXlyxLHFn3TEsXLEsWxhbcSxeW9yOiAlcyIKKworIzogb2JqZWN0LmM6MjY2IG9iamVjdC5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIG1pc21hdGNoICVzIgorbXNnc3RyICJzYcSfbGFtYSB1eXXFn21hemzEscSfxLEgJXMiCisKKyM6IHBhY2tmaWxlLmM6NjI5Cittc2dpZCAib2Zmc2V0IGJlZm9yZSBlbmQgb2YgcGFja2ZpbGUgKGJyb2tlbiAuaWR4PykiCittc2dzdHIgIm9mc2V0IHBha2V0IGRvc3lhc8SxbsSxbiBzb251bmRhbiDDtm5jZSAoYm96dWsgLmlkeD8pIgorCisjOiBwYWNrZmlsZS5jOjE4OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJlZm9yZSBzdGFydCBvZiBwYWNrIGluZGV4IGZvciAlcyAoY29ycnVwdCBpbmRleD8pIgorbXNnc3RyICJvZnNldCAlcyBpw6dpbiBwYWtldCBpbmRla3NpbmluIGJhxZ9sYW5nxLFjxLFuZGFuIMO2bmNlIChoYXNhcmzEsSBpbmRla3M/KSIKKworIzogcGFja2ZpbGUuYzoxOTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZXlvbmQgZW5kIG9mIHBhY2sgaW5kZXggZm9yICVzICh0cnVuY2F0ZWQgaW5kZXg/KSIKK21zZ3N0ciAib2ZzZXQgJXMgacOnaW4gcGFrZXQgaW5kZWtzaW5pbiBzb251bmRhbiDDtnRlZGUgKGvEsXJwxLFsbcSxxZ8gaW5kZXg/KSIKKworIzogcGFjay1iaXRtYXAuYzo4MDAgcGFjay1iaXRtYXAuYzo4MDYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgc2l6ZSBvZiAlcyIKK21zZ3N0ciAiJXMgYm95dXR1IGFsxLFuYW3EsXlvciIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIiVzIGJpciBkZcSfZXIgZ2VyZWt0aXJpeW9yIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJXMiCittc2dzdHIgIiVzLCAlcyBpbGUgdXl1bXN1eiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogaW5jb21wYXRpYmxlIHdpdGggc29tZXRoaW5nIGVsc2UiCittc2dzdHIgIiVzOiBiYcWfa2EgYmlyIMWfZXlsZSB1eXVtc3V6IgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTIgcGFyc2Utb3B0aW9ucy5jOjk2IHBhcnNlLW9wdGlvbnMuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGFrZXMgbm8gdmFsdWUiCittc2dzdHIgIiVzIGJpciBkZcSfZXIgYWxtxLF5b3IiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpc24ndCBhdmFpbGFibGUiCittc2dzdHIgIiVzIGt1bGxhbsSxbGFiaWxpciBkZcSfaWwiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIHdpdGggYW4gb3B0aW9uYWwgay9tL2cgc3VmZml4IgorbXNnc3RyICIlcyBuZWdhdGlmIG9sbWF5YW4gYmlyIHRhbXNhecSxIGJla2xpeW9yLCBpc3RlxJ9lIGJhxJ9sxLEgay9tL2cgZWtpIGlsZSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgb3B0aW9uOiAlcyAoY291bGQgYmUgLS0lcyVzIG9yIC0tJXMlcykiCittc2dzdHIgImJlbGlyc2l6IHNlw6dlbmVrOiAlcyAoLS0lcyVzIHZleWEgLS0lcyVzIG9sYWJpbGlyKSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjQyMCBwYXJzZS1vcHRpb25zLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyk/IgorbXNnc3RyICLFn3VudSBtdSBkZW1layBpc3RlZGluaXo6ICctLSVzJyAoaWtpIHRpcmUgaWxlKT8iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gYCVzJyIKK21zZ3N0ciAiYmlsaW5tZXllbiBzZcOnZW5layAnJXMnIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3dpdGNoIGAlYyciCittc2dzdHIgImJpbGlubWV5ZW4gYW5haHRhciAnJWMnIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm9uLWFzY2lpIG9wdGlvbiBpbiBzdHJpbmc6IGAlcyciCittc2dzdHIgImRpemkgacOnaW5kZSBiaWxpbm1leWVuIGFzY2lpIGTEscWfxLEgc2XDp2VuZWs6ICclcyciCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4ODUKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgImt1bGxhbsSxbTogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBwYXJzZS1vcHRpb25zLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICAgIHZleWE6ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTUyCittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLVNBWUkiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgb2YgLS0lcyIKK21zZ3N0ciAixZ91bnVuIGFybWFzxLE6IC0tJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoyMCBwYXJzZS1vcHRpb25zLWNiLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiJyVzJyBzZcOnZW5lxJ9pIHNhecSxc2FsIGJpciBkZcSfZXIgYmVrbGl5b3IiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZXhwaXJhdGlvbiBkYXRlICclcyciCittc2dzdHIgImhhdGFsxLEgb2x1xZ90dXJ1bG11xZ8gc29uIGt1bGxhbsSxbSB0YXJpaGkgJyVzJyIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgXCJhbHdheXNcIiwgXCJhdXRvXCIsIG9yIFwibmV2ZXJcIiIKK21zZ3N0ciAiJyVzJyBzZcOnZW5lxJ9pIFwiYWx3YXlzXCIsIFwiYXV0b1wiIHZleWEgXCJuZXZlclwiIGJla2xpeW9yIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MTMwIHBhcnNlLW9wdGlvbnMtY2IuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgImhhdGFsxLEgb2x1xZ90dXJ1bG11xZ8gbmVzbmUgYWTEsSAnJXMnIgorCisjOiBwYXRoLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICIlcyBncnVwIGlsZSB5YXrEsWxhYmlsaXIgeWFwxLFsYW1hZMSxIgorCisjOiBwYXRoc3BlYy5jOjEzMAorbXNnaWQgIkVzY2FwZSBjaGFyYWN0ZXIgJ1xcJyBub3QgYWxsb3dlZCBhcyBsYXN0IGNoYXJhY3RlciBpbiBhdHRyIHZhbHVlIgorbXNnc3RyICJLYcOnxLHFnyBrYXJha3RlcmkgJ1xcJyBhdHRyIGRlxJ9lcmluZGVraSBzb24ga2FyYWt0ZXIgb2xhcmFrIGt1bGxhbsSxbGFtYXoiCisKKyM6IHBhdGhzcGVjLmM6MTQ4Cittc2dpZCAiT25seSBvbmUgJ2F0dHI6JyBzcGVjaWZpY2F0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJZYWxuxLF6Y2EgYmlyICdhdHRyOicgYmVsaXJ0aW1pbmUgaXppbiB2ZXJpbGlyLiIKKworIzogcGF0aHNwZWMuYzoxNTEKK21zZ2lkICJhdHRyIHNwZWMgbXVzdCBub3QgYmUgZW1wdHkiCittc2dzdHIgImF0dHIgYmVsaXJ0ZWNpIGJvxZ8gb2xtYW1hbMSxIgorCisjOiBwYXRoc3BlYy5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSBuYW1lICVzIgorbXNnc3RyICJnZcOnZXJzaXogw7Z6bml0ZWxpayBhZMSxICVzIgorCisjOiBwYXRoc3BlYy5jOjI1OQorbXNnaWQgImdsb2JhbCAnZ2xvYicgYW5kICdub2dsb2InIHBhdGhzcGVjIHNldHRpbmdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgImdsb2JhbCAnZ2xvYicgdmUgJ25vZ2xvYicgeW9sIGJlbGlydGVjaSBheWFybGFyxLEgYmlyYmlyaXlsZSB1eXVtc3V6IgorCisjOiBwYXRoc3BlYy5jOjI2NgorbXNnaWQgIiIKKyJnbG9iYWwgJ2xpdGVyYWwnIHBhdGhzcGVjIHNldHRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIGdsb2JhbCAiCisicGF0aHNwZWMgc2V0dGluZ3MiCittc2dzdHIgIiIKKyJnbG9iYWwgJ2xpdGVyYWwnIHlvbCBiZWxpcnRlY2kgYXlhcsSxIGRpxJ9lciB0w7xtIGdsb2JhbCB5b2wgYmVsaXJ0ZWNpICIKKyJheWFybGFyxLF5bGEgdXl1bXN1eiIKKworIzogcGF0aHNwZWMuYzozMDYKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgcGF0aHNwZWMgbWFnaWMgJ3ByZWZpeCciCittc2dzdHIgInlvbCBiZWxpcnRlY2kgc2locmkgJ3ByZWZpeCcgacOnaW4gZ2XDp2Vyc2l6IHBhcmFtZXRyZSIKKworIzogcGF0aHNwZWMuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXRoc3BlYyBtYWdpYyAnJS4qcycgaW4gJyVzJyIKK21zZ3N0ciAiR2XDp2Vyc2l6IHlvbCBiZWxpcnRlY2kgc2locmkgJyUuKnMnICglcyBpw6dpbmRlKSIKKworIzogcGF0aHNwZWMuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnKScgYXQgdGhlIGVuZCBvZiBwYXRoc3BlYyBtYWdpYyBpbiAnJXMnIgorbXNnc3RyICInJXMnIGnDp2luZGVraSB5b2wgYmVsaXJ0ZWNpIHNpaHJpbmluIHNvbnVuZGEgZWtzaWsgJyknIgorCisjOiBwYXRoc3BlYy5jOjM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmltcGxlbWVudGVkIHBhdGhzcGVjIG1hZ2ljICclYycgaW4gJyVzJyIKK21zZ3N0ciAiWWVyaW5lIGdldGlyaWxtZW1pxZ8geW9sIGJlbGlydGVjaSBzaWhyaSAnJWMnICgnJXMnIGnDp2luZGUpIgorCisjOiBwYXRoc3BlYy5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJ2xpdGVyYWwnIGFuZCAnZ2xvYicgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiJXM6ICdsaXRlcmFsJyB2ZSAnZ2xvYicgYmlyYmlyaXlsZSB1eXVtc3V6IgorCisjOiBwYXRoc3BlYy5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkgYXQgJyVzJyIKK21zZ3N0ciAiJXM6ICclcycsICclcycga29udW11bmRhIGRlcG8gZMSxxZ/EsW5kYSIKKworIzogcGF0aHNwZWMuYzo1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyAobW5lbW9uaWM6ICclYycpIgorbXNnc3RyICInJXMnIChiZWxsZXRlbjogJyVjJykiCisKKyM6IHBhdGhzcGVjLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiVzOiB5b2wgYmVsaXJ0ZWNpIHNpaHJpIGJ1IGtvbXV0IHRhcmFmxLFuZGFuIGRlc3Rla2xlbm1peW9yOiAlcyIKKworIzogcGF0aHNwZWMuYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJ5b2wgYmVsaXJ0ZWNpICclcycgYmlyIHNlbWJvbGlrIGJhxJ/EsW4gw7Z0ZXNpbmRlIgorCisjOiBwYXRoc3BlYy5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lIGlzIGJhZGx5IHF1b3RlZDogJXMiCittc2dzdHIgInNhdMSxcmRhIGhhdGFsxLEgdMSxcm5ha2xhcjogJXMiCisKKyM6IHBrdC1saW5lLmM6OTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmx1c2ggcGFja2V0IgorbXNnc3RyICJmbG/FnyBwYWtldGkgeWF6xLFsYW3EsXlvciIKKworIzogcGt0LWxpbmUuYzo5OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBkZWxpbSBwYWNrZXQiCittc2dzdHIgInPEsW7EsXJsYW5kxLFyYW4gcGFrZXQgeWF6xLFsYW3EsXlvciIKKworIzogcGt0LWxpbmUuYzoxMDYKK21zZ2lkICJmbHVzaCBwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICJmbG/FnyBwYWtldGkgeWF6xLFtxLEgYmHFn2FyxLFzxLF6IgorCisjOiBwa3QtbGluZS5jOjE0NiBwa3QtbGluZS5jOjIzMgorbXNnaWQgInByb3RvY29sIGVycm9yOiBpbXBvc3NpYmx5IGxvbmcgbGluZSIKK21zZ3N0ciAicHJvdG9rb2wgaGF0YXPEsTogb2xhbmFrc8SxeiB1enVuIHNhdMSxciIKKworIzogcGt0LWxpbmUuYzoxNjIgcGt0LWxpbmUuYzoxNjQKK21zZ2lkICJwYWNrZXQgd3JpdGUgd2l0aCBmb3JtYXQgZmFpbGVkIgorbXNnc3RyICJiacOnaW1sZW5kaXJpbG1pxZ8gcGFrZXQgeWF6xLFtxLEgYmHFn2FyxLFzxLF6IgorCisjOiBwa3QtbGluZS5jOjE5NgorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQgLSBkYXRhIGV4Y2VlZHMgbWF4IHBhY2tldCBzaXplIgorbXNnc3RyICJwYWtldCB5YXrEsW3EsSBiYcWfYXLEsXPEsXogLSB2ZXJpIG9sYWJpbGVjZWsgZW4gw6dvayBwYWtldCBib3l1dHVudSBhxZ/EsXlvciIKKworIzogcGt0LWxpbmUuYzoyMDMgcGt0LWxpbmUuYzoyMTAKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICJwYWtldCB5YXrEsW3EsSBiYcWfYXLEsXPEsXoiCisKKyM6IHBrdC1saW5lLmM6Mjk1Cittc2dpZCAicmVhZCBlcnJvciIKK21zZ3N0ciAib2t1bWEgaGF0YXPEsSIKKworIzogcGt0LWxpbmUuYzozMDMKK21zZ2lkICJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVuZXhwZWN0ZWRseSIKK21zZ3N0ciAidXphayBrb251bSBiZWtsZW5tZWRpayBiacOnaW1kZSBoYXR0xLEga2FwYXR0xLEiCisKKyM6IHBrdC1saW5lLmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggY2hhcmFjdGVyOiAlLjRzIgorbXNnc3RyICJwcm90b2tvbCBoYXRhc8SxOiBoYXRhbMSxIHNhdMSxciB1enVubHXEn3Uga2FyYWt0ZXJpOiAlLjRzIgorCisjOiBwa3QtbGluZS5jOjM0MSBwa3QtbGluZS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIGxpbmUgbGVuZ3RoICVkIgorbXNnc3RyICJwcm90b2tvbCBoYXRhc8SxOiBoYXRhbMSxIHNhdMSxciB1enVubHXEn3UgJWQiCisKKyM6IHBrdC1saW5lLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgInV6YWsga29udW0gaGF0YXPEsTogJXMiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMTkKK21zZ2lkICJSZWZyZXNoaW5nIGluZGV4IgorbXNnc3RyICLEsG5kZWtzIHllbmlsZW5peW9yIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQ6ICVzIgorbXNnc3RyICJpxZ8gcGFyw6dhY8Sxa2xhcsSxbmEgYXlyxLFsbcSxxZ8gJ2xzdGF0JyBvbHXFn3R1cnVsYW3EsXlvcjogJXMiCisKKyM6IHByZXR0eS5jOjk4MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgIi0tcHJldHR5IGJpw6dpbWkgYXlyxLHFn3TEsXLEsWxhbcSxeW9yIgorCisjOiBwcm9taXNvci1yZW1vdGUuYzoyMworbXNnaWQgIlJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiVVJMJ3NpIG9sbWF5YW4gdXphayBrb251bSIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbWlzb3IgcmVtb3RlIG5hbWUgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIKK21zZ3N0ciAidmFhdMOnaSB1emFrIGtvbnVtIGFkxLEgJy8nIGlsZSBiYcWfbGF5YW1hejogJXMiCisKKyM6IHJhbmdlLWRpZmYuYzo3NQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBgbG9nYCIKK21zZ3N0ciAiJ2xvZycgYmHFn2xhdMSxbGFtYWTEsSIKKworIzogcmFuZ2UtZGlmZi5jOjc3Cittc2dpZCAiY291bGQgbm90IHJlYWQgYGxvZ2Agb3V0cHV0IgorbXNnc3RyICInbG9nJyDDp8Sxa3TEsXPEsSBva3VuYW1hZMSxIgorCisjOiByYW5nZS1kaWZmLmM6OTYgc2VxdWVuY2VyLmM6NTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICclcyciCittc2dzdHIgIiclcycgZ8O2bmRlcmlzaSBheXLEscWfdMSxcsSxbGFtYWTEsSIKKworIzogcmFuZ2UtZGlmZi5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZ2l0IGhlYWRlciAnJS4qcyciCittc2dzdHIgImdpdCDDvHN0YmlsZ2lzaSAnJS4qcycgYXlyxLHFn3TEsXLEsWxhbWFkxLEiCisKKyM6IHJhbmdlLWRpZmYuYzoyODUKK21zZ2lkICJmYWlsZWQgdG8gZ2VuZXJhdGUgZGlmZiIKK21zZ3N0ciAiZGlmZiBvbHXFn3R1cnVsYW1hZMSxIgorCisjOiByYW5nZS1kaWZmLmM6NTE4IHJhbmdlLWRpZmYuYzo1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGxvZyBmb3IgJyVzJyIKK21zZ3N0ciAiJyVzJyBnw7xubMO8xJ/DvCBheXLEscWfdMSxcsSxbGFtYWTEsSIKKworIzogcmVhZC1jYWNoZS5jOjY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBhZGQgZmlsZSBhbGlhcyAnJXMnICgnJXMnIGFscmVhZHkgZXhpc3RzIGluIGluZGV4KSIKK21zZ3N0ciAiZG9zeWEgYXJtYXPEsSAnJXMnIGVrbGVubWV5ZWNlayAoJyVzJyBpbmRla3N0ZSBoYWxpaGF6xLFyZGEgdmFyKSIKKworIzogcmVhZC1jYWNoZS5jOjY5NgorbXNnaWQgImNhbm5vdCBjcmVhdGUgYW4gZW1wdHkgYmxvYiBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJuZXNuZSB2ZXJpdGFiYW7EsW5kYSBib8WfIGlraWxpIGJpciBuZXNuZSBvbHXFn3R1cnVsYW3EsXlvciIKKworIzogcmVhZC1jYWNoZS5jOjcxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuIG9ubHkgYWRkIHJlZ3VsYXIgZmlsZXMsIHN5bWJvbGljIGxpbmtzIG9yIGdpdC1kaXJlY3RvcmllcyIKK21zZ3N0ciAiIgorIiVzOiB5YWxuxLF6Y2Egc8SxcmFkYW4gZG9zeWFsYXIsIHNlbWJvbGlrIGJhxJ9sYXIgdmUgZ2l0IGRpemlubGVyaSBla2xlbmViaWxpciIKKworIzogcmVhZC1jYWNoZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIiclcycgw6fEsWvEscWfxLEgeWFwxLFsbcSxxZ8gYmlyIGfDtm5kZXJpeWUgaXllIGRlxJ9pbCIKKworIzogcmVhZC1jYWNoZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaW5kZXggZmlsZSAnJXMnIgorbXNnc3RyICInJXMnIGRvc3lhc8SxIGluZGVrc2xlbmVtaXlvciIKKworIzogcmVhZC1jYWNoZS5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkICclcycgdG8gaW5kZXgiCittc2dzdHIgIiclcycgaW5kZWtzZSBla2xlbmVtaXlvciIKKworIzogcmVhZC1jYWNoZS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCAnJXMnIgorbXNnc3RyICInJXMnIGRvc3lhc8SxbsSxbiBiaWxnaWxlcmkgYWzEsW5hbcSxeW9yIgorCisjOiByZWFkLWNhY2hlLmM6MTMzMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFwcGVhcnMgYXMgYm90aCBhIGZpbGUgYW5kIGFzIGEgZGlyZWN0b3J5IgorbXNnc3RyICInJXMnIGhlbSBiaXIgZG9zeWEgaGVtIGRlIGJpciBkaXppbiBvbGFyYWsgZ8O2csO8bsO8eW9yIgorCisjOiByZWFkLWNhY2hlLmM6MTUzNgorbXNnaWQgIlJlZnJlc2ggaW5kZXgiCittc2dzdHIgIsSwbmRla3NpIHllbmlsZSIKKworIzogcmVhZC1jYWNoZS5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorImluZGV4LnZlcnNpb24gYXlhcmxhbm3EscWfLCBhbmNhayBkZcSfZXIgZ2XDp2Vyc2l6LlxuIgorIiVpIHPDvHLDvG3DvCBrdWxsYW7EsWzEsXlvciIKKworIzogcmVhZC1jYWNoZS5jOjE2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBheWFybGFubcSxxZ8sIGFuY2FrIGRlxJ9lciBnZcOnZXJzaXouXG4iCisiJWkgc8O8csO8bcO8IGt1bGxhbsSxbMSxeW9yIgorCisjOiByZWFkLWNhY2hlLmM6MTcxNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAiaGF0YWzEsSBpbXphIDB4JTA4eCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJWQiCittc2dzdHIgImhhdGFsxLEgaW5kZWtzIHPDvHLDvG3DvCAlZCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjkKK21zZ2lkICJiYWQgaW5kZXggZmlsZSBzaGExIHNpZ25hdHVyZSIKK21zZ3N0ciAiaGF0YWzEsSBpbmRla3MgZG9zeWFzxLEgc2hhMSBpbXphc8SxIgorCisjOiByZWFkLWNhY2hlLmM6MTc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCB1c2VzICUuNHMgZXh0ZW5zaW9uLCB3aGljaCB3ZSBkbyBub3QgdW5kZXJzdGFuZCIKK21zZ3N0ciAiaW5kZWtzIGJpemltIGFubGFtYWTEscSfxLFtxLF6ICUuNHMgaW16YXPEsSBrdWxsYW7EsXlvciIKKworIzogcmVhZC1jYWNoZS5jOjE3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJS40cyBleHRlbnNpb24iCittc2dzdHIgIiUuNHMgdXphbnTEsXPEsSB5b2sgc2F5xLFsxLF5b3IiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW5kZXggZW50cnkgZm9ybWF0IDB4JTA4eCIKK21zZ3N0ciAiYmlsaW5tZXllbiBpbmRla3MgZ2lyZGlzaSBiacOnaW1pIDB4JTA4eCIKKworIzogcmVhZC1jYWNoZS5jOjE4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG5hbWUgZmllbGQgaW4gdGhlIGluZGV4LCBuZWFyIHBhdGggJyVzJyIKK21zZ3N0ciAiaW5kZWtzdGUgaGF0YWzEsSBvbHXFn3R1cnVsbXXFnyBhZCBhbGFuxLEsICclcycgeW9sdSB5YWvEsW7EsW5kYSIKKworIzogcmVhZC1jYWNoZS5jOjE4NzEKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBpbiBpbmRleCIKK21zZ3N0ciAiaW5kZWtzdGUgc8SxcmFzxLF6IGhhesSxcmxhbWEgYWxhbsSxIGdpcmRpbGVyaSIKKworIzogcmVhZC1jYWNoZS5jOjE4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgc3RhZ2UgZW50cmllcyBmb3IgbWVyZ2VkIGZpbGUgJyVzJyIKK21zZ3N0ciAiYmlybGXFn3RpcmlsbWnFnyBkb3N5YSAnJXMnIGnDp2luIMOnb2tsdSBoYXrEsXJsYW1hIGFsYW7EsSBnaXJkaWxlcmkiCisKKyM6IHJlYWQtY2FjaGUuYzoxODc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGZvciAnJXMnIgorbXNnc3RyICInJXMnIGnDp2luIHPEsXJhc8SxeiBoYXrEsXJsYW1hIGFsYW7EsSBnaXJkaWxlcmkiCisKKyM6IHJlYWQtY2FjaGUuYzoxOTgzIHJlYWQtY2FjaGUuYzoyMjcxIHJlcmVyZS5jOjU2NSByZXJlcmUuYzo1OTkgcmVyZXJlLmM6MTExMQorIzogc3VibW9kdWxlLmM6MTYxOSBidWlsdGluL2FkZC5jOjUzMiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE4MQorIzogYnVpbHRpbi9jaGVja291dC5jOjQ3MCBidWlsdGluL2NoZWNrb3V0LmM6NjU2IGJ1aWx0aW4vY2xlYW4uYzo5NjcKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY3IGJ1aWx0aW4vZGlmZi10cmVlLmM6MTIwIGJ1aWx0aW4vZ3JlcC5jOjQ4NQorIzogYnVpbHRpbi9tdi5jOjE0NSBidWlsdGluL3Jlc2V0LmM6MjQ2IGJ1aWx0aW4vcm0uYzoyOTAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozMzIKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQiCittc2dzdHIgImluZGVrcyBkb3N5YXPEsSBoYXNhciBnw7ZybcO8xZ8iCisKKyM6IHJlYWQtY2FjaGUuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgImxvYWRfY2FjaGVfZW50cmllcyBpxZ8gcGFyw6dhY8SxxJ/EsSBvbHXFn3R1cnVsYW3EsXlvcjogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICJsb2FkX2NhY2hlX2VudHJpZXMgacWfIHBhcsOnYWPEscSfxLEgdWN1IGJpcmxlxZ90aXJpbGVtaXlvcjogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIG9wZW4gZmFpbGVkIgorbXNnc3RyICIlczogaW5kZWtzIGRvc3lhc8SxIGHDp8SxbGFtYWTEsSIKKworIzogcmVhZC1jYWNoZS5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4IgorbXNnc3RyICIlczogYcOnxLFrIGluZGVrc2luIGJpbGdpbGVyaSBhbMSxbmFtxLF5b3IiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiJXM6IGluZGVrcyBkb3N5YXPEsSBiZWtsZW5lbmRlbiBkYWhhIGvDvMOnw7xrIgorCisjOiByZWFkLWNhY2hlLmM6MjE4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5hYmxlIHRvIG1hcCBpbmRleCBmaWxlIgorbXNnc3RyICIlczogaW5kZWtzIGRvc3lhc8SxIGXFn2xlbWxlbmVtaXlvciIKKworIzogcmVhZC1jYWNoZS5jOjIyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2luZGV4X2V4dGVuc2lvbnMgdGhyZWFkOiAlcyIKK21zZ3N0ciAibG9hZF9pbmRleF9leHRlbnNpb25zIGnFnyBwYXLDp2FjxLHEn8SxIG9sdcWfdHVydWxhbcSxeW9yOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgImxvYWRfaW5kZXhfZXh0ZW5zaW9ucyBpxZ8gcGFyw6dhY8SxxJ/EsSB1Y3UgYmlybGXFn3RpcmlsZW1peW9yOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZyZXNoZW4gc2hhcmVkIGluZGV4ICclcyciCittc2dzdHIgInBheWxhxZ/EsWxhbiBpbmRla3MgJyVzJyB0YXplbGVuZW1lZGkiCisKKyM6IHJlYWQtY2FjaGUuYzoyMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiCittc2dzdHIgImJvenVrIGluZGVrcywgJXMgYmVrbGVuaXlvcmR1ICglcyBpw6dpbmRlKSwgJXMgYWzEsW5kxLEiCisKKyM6IHJlYWQtY2FjaGUuYzozMDI2IHN0cmJ1Zi5jOjExNjAgd3JhcHBlci5jOjYyMiBidWlsdGluL21lcmdlLmM6MTEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAiJyVzJyBrYXBhdMSxbGFtYWTEsSIKKworIzogcmVhZC1jYWNoZS5jOjMxMjkgc2VxdWVuY2VyLmM6MjM0MyBzZXF1ZW5jZXIuYzozOTU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIiclcycgYmlsZ2lsZXJpIGFsxLFuYW1hZMSxIgorCisjOiByZWFkLWNhY2hlLmM6MzE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBnaXQgZGlyOiAlcyIKK21zZ3N0ciAiZ2l0IGRpemluaSBhw6fEsWxhbcSxeW9yOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVubGluazogJXMiCittc2dzdHIgImJhxJ9sYW50xLEga2VzaWxlbWl5b3I6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MzE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZml4IHBlcm1pc3Npb24gYml0cyBvbiAnJXMnIgorbXNnc3RyICInJXMnIMO8emVyaW5kZWtpIGl6aW4gYml0bGVyaSBvbmFyxLFsYW3EsXlvciIKKworIzogcmVhZC1jYWNoZS5jOjMzMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBkcm9wIHRvIHN0YWdlICMwIgorbXNnc3RyICIlczogIzAgbnVtYXJhbMSxIGhhesSxcmxhbWEgYWxhbsSxbmEgYsSxcmFrxLFsYW3EsXlvciIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTEKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhpcyB3aXRoICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS0iCisiY29udGludWUnLlxuIgorIk9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLlxuIgorbXNnc3RyICIiCisiQnVudSAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgaWxlIGTDvHplbHRlYmlsaXIgdmUgYXJkxLFuZGFuICdnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlJyB5YXBhYmlsaXJzaW5pei5cbiIKKyJZZW5pZGVuIHRlbWVsbGVuZGlybWV5aSBkdXJkdXJtYWsgaXN0ZXJzZW5peiAnZ2l0IHJlYmFzZSAtLWFib3J0JyB5YXDEsW4uXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bnJlY29nbml6ZWQgc2V0dGluZyAlcyBmb3Igb3B0aW9uIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiBJZ25vcmluZy4iCittc2dzdHIgIiIKKyJyZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayBzZcOnZW5lxJ9pIGnDp2luIHRhbsSxbWxhbmFtYXlhbiAlcyBheWFyxLEuIFlvayAiCisic2F5xLFsxLF5b3IuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo0MgorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNlIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdFxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisieCwgZXhlYyA8Y29tbWFuZD4gPSBydW4gY29tbWFuZCAodGhlIHJlc3Qgb2YgdGhlIGxpbmUpIHVzaW5nIHNoZWxsXG4iCisiYiwgYnJlYWsgPSBzdG9wIGhlcmUgKGNvbnRpbnVlIHJlYmFzZSBsYXRlciB3aXRoICdnaXQgcmViYXNlIC0tY29udGludWUnKVxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIktvbXV0bGFyOlxuIgorInAsIHBpY2sgPGfDtm5kZXJpPiA9IGfDtm5kZXJpeWkga3VsbGFuXG4iCisiciwgcmV3b3JkIDxnw7ZuZGVyaT4gPSBnw7ZuZGVyaXlpIGt1bGxhbiwgYW5jYWsgZ8O2bmRlcmkgaWxldGlzaW5pIGTDvHplbmxlXG4iCisiZSwgZWRpdCA8Z8O2bmRlcmk+ID0gZ8O2bmRlcml5aSBrdWxsYW4sIGFuY2FrIGRlxJ9pxZ90aXJtZWsgacOnaW4gZHVyXG4iCisicywgc3F1YXNoIDxnw7ZuZGVyaT4gPSBnw7ZuZGVyaXlpIGt1bGxhbiwgYW5jYWsgw7ZuY2VraSBnw7ZuZGVyaSBpw6dpbmUga2FyxLHFn3TEsXJcbiIKKyJmLCBmaXh1cCA8Z8O2bmRlcmk+ID0gXCJzcXVhc2hcIiBnaWJpLCBhbmNhayBidSBnw7ZuZGVyaW5pbiBnw7xubMO8ayBpbGV0aXNpbmkgIgorImF0XG4iCisieCwgZXhlYyA8a29tdXQ+ID0ga29tdXR1IChzYXTEsXLEsW4gZ2VyaSBrYWxhbsSxKSBrYWJ1ayBrdWxsYW5hcmFrIMOnYWzEscWfdMSxclxuIgorImIsIGJyZWFrID0gYnVyYWRhIGR1ciAoZGFoYSBzb25yYSBzw7xyZMO8cm1layBpw6dpbiAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJylcbiIKKyJkLCBkcm9wIDxnw7ZuZGVyaT4gPSBnw7ZuZGVyaXlpIGthbGTEsXJcbiIKKyJsLCBsYWJlbCA8ZXRpa2V0PiA9IGdlw6dlcmxpIEhFQUQnaSBiaXIgYWQgaWxlIGV0aWtldGxlXG4iCisidCwgcmVzZXQgPGV0aWtldD4gPSBIRUFEJ2kgYmlyIGV0aWtldGUgc8SxZsSxcmxhXG4iCisibSwgbWVyZ2UgWy1DIDxnw7ZuZGVyaT4gfCAtYyA8Z8O2bmRlcmk+XSA8ZXRpa2V0PiBbIyA8dGVrc2F0xLFyPl1cbiIKKyIuICAgICAgIG9yaWppbmFsIGJpcmxlxZ90aXJtZSBnw7ZuZGVyaXNpIGlsZXRpc2luaSBrdWxsYW5hcmFrIGJpclxuIgorIi4gICAgICAgYmlybGXFn3Rpcm1lIGfDtm5kZXJpc2kgb2x1xZ90dXIgKHZleWEgdGVrc2F0xLFyLCBlxJ9lciBiaXIgb3JpamluYWxcbiIKKyIuICAgICAgIGJpcmxlxZ90aXJtZSBnw7ZuZGVyaXNpIGJlbGlydGlsbWVtacWfc2UpLiBHw7ZuZGVyaSBpbGV0aXNpbmkgeWVuaWRlblxuIgorIi4gICAgICAgeWF6bWFrIGnDp2luIC1jIDxnw7ZuZGVyaT4ga3VsbGFuxLFuLlxuIgorIlxuIgorIkJ1IHNhdMSxcmxhciB5ZW5pZGVuIHPEsXJhbGFuYWJpbGlybGVyLCB5dWthcsSxZGFuIGHFn2HEn8SxeWEgw6dhbMSxxZ90xLFyxLFsxLFybGFyLlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kcykiCittc2dzdHJbMF0gIiVzIMO2Z2VzaW5pICVzIMO8emVyaW5lIHllbmlkZW4gdGVtZWxsZW5kaXIgKCVkIGtvbXV0KSIKK21zZ3N0clsxXSAiJXMgw7ZnZXNpbmkgJXMgw7x6ZXJpbmUgeWVuaWRlbiB0ZW1lbGxlbmRpciAoJWQga29tdXQpIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo3MiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjI4Cittc2dpZCAiIgorIlxuIgorIkRvIG5vdCByZW1vdmUgYW55IGxpbmUuIFVzZSAnZHJvcCcgZXhwbGljaXRseSB0byByZW1vdmUgYSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJIacOnYmlyIHNhdMSxcsSxIGthbGTEsXJtYXnEsW4uIEJpciBnw7ZuZGVyaXlpIGthbGTEsXJtYWsgacOnaW4gJ2Ryb3AndSBhw6fEsWvDp2EgIgorImt1bGxhbsSxbi5cbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzUgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIzMgorbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgcmVtb3ZlIGEgbGluZSBoZXJlIFRIQVQgQ09NTUlUIFdJTEwgQkUgTE9TVC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkJ1cmFkYWtpIGJpciBzYXTEsXLEsSBrYWxkxLFyxLFyc2FuxLF6IE8gR8OWTkRFUsSwIFTDnE3DnFlMRSBLQVlCT0xBQ0FLLlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4MSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODcxCittc2dpZCAiIgorIlxuIgorIllvdSBhcmUgZWRpdGluZyB0aGUgdG9kbyBmaWxlIG9mIGFuIG9uZ29pbmcgaW50ZXJhY3RpdmUgcmViYXNlLlxuIgorIlRvIGNvbnRpbnVlIHJlYmFzZSBhZnRlciBlZGl0aW5nLCBydW46XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiU8O8cm1la3RlIG9sYW4gYmlyIGV0a2lsZcWfaW1saSB5ZW5pZGVuIHRlbWVsbGVuZGlybWVuaW4geWFwxLFsYWNha2xhciAiCisiZG9zeWFzxLFuxLEgZMO8emVubGVtZWt0ZXNpbml6LlxuIgorIkTDvHplbmxlbWVuaW4gYXJkxLFuZGFuIHllbmlkZW4gdGVtZWxsZW5kaXJtZXlpIHPDvHJkw7xybWVrIGnDp2luIMWfdW51IGt1bGxhbsSxbjpcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4NiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTQ4Cittc2dpZCAiIgorIlxuIgorIkhvd2V2ZXIsIGlmIHlvdSByZW1vdmUgZXZlcnl0aGluZywgdGhlIHJlYmFzZSB3aWxsIGJlIGFib3J0ZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFxJ9lciBraSwgaGVyIMWfZXlpIGthbGTEsXLEsXJzYW7EsXogeWVuaWRlbiB0ZW1lbGxlbmRpcm1lIGlwdGFsIGVkaWxlY2VrdGlyLlxuIgorIlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMTAgcmVyZXJlLmM6NDg1IHJlcmVyZS5jOjY5MiBzZXF1ZW5jZXIuYzozNDQ0CisjOiBzZXF1ZW5jZXIuYzozNDcwIHNlcXVlbmNlci5jOjUxMjUgYnVpbHRpbi9mc2NrLmM6MzQ2IGJ1aWx0aW4vcmViYXNlLmM6MjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICInJXMnIHlhesSxbGFtYWTEsSIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTE2IGJ1aWx0aW4vcmViYXNlLmM6MTg0IGJ1aWx0aW4vcmViYXNlLmM6MjEwCisjOiBidWlsdGluL3JlYmFzZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iCittc2dzdHIgIiclcycgeWF6xLFsYW1hZMSxLiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS5cbiIKKyJEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKTpcbiIKK21zZ3N0ciAiIgorIlV5YXLEsTogQmF6xLEgZ8O2bmRlcmlsZXIgeWFubMSxxZ9sxLFrbGEgYsSxcmFrxLFsbcSxxZ8gb2xhYmlsaXIuXG4iCisiQsSxcmFrxLFsYW4gZ8O2bmRlcmlsZXI6ICh5ZW5pZGVuIGVza2l5ZSk6XG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgXCJkcm9wXCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuXG4iCisiXG4iCisiVXNlICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyB0byBjaGFuZ2UgdGhlIGxldmVsIG9mICIKKyJ3YXJuaW5ncy5cbiIKKyJUaGUgcG9zc2libGUgYmVoYXZpb3VycyBhcmU6IGlnbm9yZSwgd2FybiwgZXJyb3IuXG4iCisiXG4iCittc2dzdHIgIiIKKyJCdSBpbGV0aWRlbiBrYcOnxLFubWFrIGnDp2luLCBiaXIgZ8O2bmRlcml5aSBrYWxkxLFyxLFya2VuIGHDp8Sxa8OnYSBcImRyb3BcIiAiCisia3VsbGFuxLFuLlxuIgorIlV5YXLEsWxhcsSxbiBkw7x6ZXlpbmkgZGXEn2nFn3Rpcm1layBpw6dpbiAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgIgorImt1bGxhbsSxbi5cbiIKKyJLdWxsYW7EsWxhYmlsaXIgZGF2cmFuxLHFn2xhcjogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MjMzIHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjIzOCBzZXF1ZW5jZXIuYzoyMjYyCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MCBidWlsdGluL3JlYmFzZS5jOjE5NSBidWlsdGluL3JlYmFzZS5jOjIyMQorIzogYnVpbHRpbi9yZWJhc2UuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJy4iCittc2dzdHIgIiclcycgb2t1bmFtYWTEsS4iCisKKyM6IHJlZnMuYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QhIgorbXNnc3RyICIlcyBnZcOnZXJsaSBiaXIgbmVzbmV5ZSBpxZ9hcmV0IGV0bWl5b3IhIgorCisjOiByZWZzLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGRhbmdsaW5nIHN5bXJlZiAlcyIKK21zZ3N0ciAic2Fya2FuIHNlbWJvbGlrIGJhxZ92dXJ1ICVzIHlvayBzYXnEsWzEsXlvciIKKworIzogcmVmcy5jOjY2OSByZWYtZmlsdGVyLmM6MjA5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBicm9rZW4gcmVmICVzIgorbXNnc3RyICJib3p1ayBiYcWfdnVydSAlcyB5b2sgc2F5xLFsxLF5b3IiCisKKyM6IHJlZnMuYzo4MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgIiclcycgeWF6bWEgacOnaW4gYcOnxLFsYW1hZMSxOiAlcyIKKworIzogcmVmcy5jOjgxNCByZWZzLmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAnJXMnIgorbXNnc3RyICInJXMnIGJhxZ92dXJ1c3Ugb2t1bmFtYWTEsSIKKworIzogcmVmcy5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJyVzJyBiYcWfdnVydXN1IGhhbGloYXrEsXJkYSB2YXIiCisKKyM6IHJlZnMuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciCittc2dzdHIgIiclcycgeWF6xLFsxLFya2VuIGJla2xlbm1lZGlrIG5lc25lIG51bWFyYXPEsSIKKworIzogcmVmcy5jOjgzMyBzZXF1ZW5jZXIuYzo0MDcgc2VxdWVuY2VyLmM6MjcwMSBzZXF1ZW5jZXIuYzoyOTA1CisjOiBzZXF1ZW5jZXIuYzoyOTE5IHNlcXVlbmNlci5jOjMxNzcgc2VxdWVuY2VyLmM6NTAzNiBzdHJidWYuYzoxMTU3CisjOiB3cmFwcGVyLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICLFn3VyYXlhIHlhesSxbGFtYWTEsTogJyVzJyIKKworIzogcmVmcy5jOjg2MCBzdHJidWYuYzoxMTU1IHdyYXBwZXIuYzoxODggd3JhcHBlci5jOjM1OCBidWlsdGluL2FtLmM6NzE5CisjOiBidWlsdGluL3JlYmFzZS5jOjEwMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiJyVzJyB5YXptYSBpw6dpbiBhw6fEsWxhbWFkxLEiCisKKyM6IHJlZnMuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiBkZWxldGluZyAnJXMnIgorbXNnc3RyICInJXMnIHNpbGluaXJrZW4gYmVrbGVubWVkaWsgbmVzbmUgbnVtYXJhc8SxIgorCisjOiByZWZzLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIGhhcyBnYXAgYWZ0ZXIgJXMiCittc2dzdHIgIiVzIGJhxZ92dXJ1c3UgacOnaW4gb2xhbiBnw7xubMO8a3RlICVzIHNvbnJhc8SxbmRhIGJvxZ9sdWsgdmFyIgorCisjOiByZWZzLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyB1bmV4cGVjdGVkbHkgZW5kZWQgb24gJXMiCittc2dzdHIgIiIKKyIlcyBiYcWfdnVydXN1IGnDp2luIG9sYW4gZ8O8bmzDvGsgJXMga29udW11bmRhIGJla2xlbm1lZGlrIGJpciBiacOnaW1kZSBzb25sYW5kxLEiCisKKyM6IHJlZnMuYzoxMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgJXMgaXMgZW1wdHkiCittc2dzdHIgIiVzIGnDp2luIG9sYW4gZ8O8bmzDvGsgYm/FnyIKKworIzogcmVmcy5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gdXBkYXRlIHJlZiB3aXRoIGJhZCBuYW1lICclcyciCittc2dzdHIgImhhdGFsxLEgYWRhIGl5ZSAnJXMnIGJhxZ92dXJ1c3VudSBnw7xuY2VsbGVtZSByZWRkZWRpbGl5b3IiCisKKyM6IHJlZnMuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVwZGF0ZV9yZWYgZmFpbGVkIGZvciByZWYgJyVzJzogJXMiCittc2dzdHIgIiclcycgYmHFn3Z1cnVzdSBpw6dpbiB1cGRhdGVfcmVmIGJhxZ9hcsSxc8SxeiBvbGR1OiAlcyIKKworIzogcmVmcy5jOjIwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgdXBkYXRlcyBmb3IgcmVmICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgIiclcycgYmHFn3Z1cnVzdSBpw6dpbiBiaXJkZW4gw6dvayBnw7xuY2VsbGVtZXllIGl6aW4gdmVyaWxtaXlvciIKKworIzogcmVmcy5jOjIwNTUKK21zZ2lkICJyZWYgdXBkYXRlcyBmb3JiaWRkZW4gaW5zaWRlIHF1YXJhbnRpbmUgZW52aXJvbm1lbnQiCittc2dzdHIgImJhxZ92dXJ1IGfDvG5jZWxsZW1lbGVyaSBrYXJhbnRpbmEgb3J0YW3EsSBpw6dpbmRlIHlhc2FrIgorCisjOiByZWZzLmM6MjE1MSByZWZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICInJXMnIG1ldmN1dDsgJyVzJyBvbHXFn3R1cnVsYW3EsXlvciIKKworIzogcmVmcy5jOjIxNTcgcmVmcy5jOjIxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHByb2Nlc3MgJyVzJyBhbmQgJyVzJyBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICInJXMnIHZlICclcycgYXluxLEgYW5kYSBpxZ9sZW5lbWl5b3IiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgIiVzIGJhxZ92dXJ1c3Uga2FsZMSxcsSxbGFtYWTEsSIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI0NyByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU0MQorIzogcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICIlcyBiYcWfdnVydXN1IHNpbGluZW1lZGk6ICVzIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjUwIHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiCittc2dzdHIgImJhxZ92dXJ1bGFyIHNpbGluZW1lZGk6ICVzIgorCisjOiByZWZzcGVjLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmc3BlYyAnJXMnIgorbXNnc3RyICJnZcOnZXJzaXogYmHFn3Z1cnUgYmVsaXJ0ZWNpICclcyciCisKKyM6IHJlZi1maWx0ZXIuYzo0MiB3dC1zdGF0dXMuYzoxOTM4Cittc2dpZCAiZ29uZSIKK21zZ3N0ciAiZ2l0dGkiCisKKyM6IHJlZi1maWx0ZXIuYzo0MworIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCIKK21zZ3N0ciAiJWQgw7Zuw7xuZGUiCisKKyM6IHJlZi1maWx0ZXIuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJiZWhpbmQgJWQiCittc2dzdHIgIiVkIGFya2FzxLFuZGEiCisKKyM6IHJlZi1maWx0ZXIuYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCwgYmVoaW5kICVkIgorbXNnc3RyICIlZCDDtm7DvG5kZSwgJWQgYXJrYXPEsW5kYSIKKworIzogcmVmLWZpbHRlci5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGNvbG9yOjxjb2xvcj4pIgorbXNnc3RyICJiZWtsZW5lbiBiacOnaW06ICUlKGNvbG9yOjxyZW5rPikiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiCittc2dzdHIgInRhbsSxbWxhbmFtYXlhbiByZW5rOiAlJShjb2xvcjolcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOmxzdHJpcD0lcyIKK21zZ3N0ciAiVGFtc2F5xLEgZGXEn2VyaSDFn3VudSBiZWtsaXlvcmR1OiByZWZuYW1lOmxzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6cnN0cmlwPSVzIgorbXNnc3RyICJUYW1zYXnEsSBkZcSfZXJpIMWfdW51IGJla2xpeW9yZHU6IHJlZm5hbWU6cnN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJSglcykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJ0YW7EsW1sYW5hbWF5YW4gJSUoJXMpIGRlxJ9pxZ9rZW5pOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShvYmplY3R0eXBlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUob2JqZWN0dHlwZSkgZGXEn2nFn2tlbiBhbG3EsXlvciIKKworIzogcmVmLWZpbHRlci5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0c2l6ZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJ0YW7EsW1sYW5hbWF5YW4gJSUob2JqZWN0c2l6ZSkgZGXEn2nFn2tlbmk6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGRlbHRhYmFzZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGRlbHRhYmFzZSkgZGXEn2nFn2tlbiBhbG3EsXlvciIKKworIzogcmVmLWZpbHRlci5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJShib2R5KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoYm9keSkgZGXEn2nFn2tlbiBhbG3EsXlvciIKKworIzogcmVmLWZpbHRlci5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlJShzdWJqZWN0KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoc3ViamVjdCkgZGXEn2nFn2tlbiBhbG3EsXlvciIKKworIzogcmVmLWZpbHRlci5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duICUlKHRyYWlsZXJzKSBhcmd1bWVudDogJXMiCittc2dzdHIgImJpbGlubWV5ZW4gJSUodHJhaWxlcnMpIGRlxJ9pxZ9rZW5pOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAicG96aXRpZiBkZcSfZXIgxZ91bnUgYmVrbGl5b3JkdTogY29udGVudHM6bGluZXM9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGNvbnRlbnRzKSBhcmd1bWVudDogJXMiCittc2dzdHIgInRhbsSxbWxhbmFtYXlhbiAlJShjb250ZW50cykgZGXEn2nFn2tlbmk6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIG9iamVjdG5hbWU6c2hvcnQ9JXMiCittc2dzdHIgInBveml0aWYgZGXEn2VyIMWfdW51IGJla2xpeW9yZHU6IG9iamVjdG5hbWU6c2hvcnQ9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdG5hbWUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAidGFuxLFtbGFuYW1heWFuICUlKG9iamVjdG5hbWUpIGRlxJ9pxZ9rZW5pOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCittc2dzdHIgImJla2xlbmVuIGJpw6dpbTogJSUoYWxpZ246PGdlbmnFn2xpaz4sPGtvbnVtPikiCisKKyM6IHJlZi1maWx0ZXIuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBvc2l0aW9uOiVzIgorbXNnc3RyICJ0YW7EsW1sYW5hbWF5YW4ga29udW06JXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdpZHRoOiVzIgorbXNnc3RyICJ0YW7EsW1sYW5hbWF5YW4gZ2VuacWfbGlrOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJ0YW7EsW1sYW5hbWF5YW4gJSUoYWxpZ24pIGRlxJ9pxZ9rZW5pOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB3aWR0aCBleHBlY3RlZCB3aXRoIHRoZSAlJShhbGlnbikgYXRvbSIKK21zZ3N0ciAicG96aXRpZiBnZW5pxZ9saWsgJSUoYWxpZ24pIMO2Z2VjacSfaSBpbGUgYmlybGlrdGUgYmVrbGVuaXlvcmR1IgorCisjOiByZWYtZmlsdGVyLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShpZikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJ0YW7EsW1sYW5hbWF5YW4gJSUoaWYpIGRlxJ9pxZ9rZW5pOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAiaGF0YWzEsSBvbHXFn3R1cnVsbXXFnyBhbGFuIGFkxLE6ICUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICJiaWxpbm1leWVuIGFsYW4gYWTEsTogJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnksIGJ1dCB0aGUgZmllbGQgJyUuKnMnIHJlcXVpcmVzIGFjY2VzcyB0byBvYmplY3QgZGF0YSIKK21zZ3N0ciAiIgorImJpciBnaXQgZGVwb3N1IGRlxJ9pbCwgYW5jYWsgJyUuKnMnIGFsYW7EsSBuZXNuZSB2ZXJpc2luZSBlcmnFn2ltIGdlcmVrdGlyaXlvciIKKworIzogcmVmLWZpbHRlci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgImJpw6dpbTogJSUoaWYpIMO2Z2VjacSfaSBiaXIgJSUodGhlbikgw7ZnZWNpxJ9pIG9sbWFkYW4ga3VsbGFuxLFsZMSxIgorCisjOiByZWYtZmlsdGVyLmM6Nzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgImJpw6dpbTogJSUodGhlbikgw7ZnZWNpxJ9pIGJpciAlJShpZikgw7ZnZWNpxJ9pIG9sbWFkYW4ga3VsbGFuxLFsZMSxIgorCisjOiByZWYtZmlsdGVyLmM6Nzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICJiacOnaW06ICUlKHRoZW4pIMO2Z2VjacSfaSBiaXJkZW4gw6dvayBrZXoga3VsbGFuxLFsZMSxIgorCisjOiByZWYtZmlsdGVyLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIGFmdGVyICUlKGVsc2UpIgorbXNnc3RyICJiacOnaW06ICUlKHRoZW4pIMO2Z2VjacSfaSAlJShlbHNlKSDDtmdlY2nEn2luZGVuIHNvbnJhIGt1bGxhbsSxbGTEsSIKKworIzogcmVmLWZpbHRlci5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICJiacOnaW06ICUlKGVsc2UpIMO2Z2VjacSfaSBiaXIgJSUoaWYpIMO2Z2VjacSfaSBvbG1hZGFuIGt1bGxhbsSxbGTEsSIKKworIzogcmVmLWZpbHRlci5jOjgxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAiYmnDp2ltOiAlJShlbHNlKSDDtmdlY2nEn2kgYmlyICUlKHRoZW4pIMO2Z2VjacSfaSBvbG1hZGFuIGt1bGxhbsSxbGTEsSIKKworIzogcmVmLWZpbHRlci5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAiYmnDp2ltOiAlJShlbHNlKSDDtmdlY2nEn2kgYmlyZGVuIMOnb2sga2V6IGt1bGxhbsSxbGTEsSIKKworIzogcmVmLWZpbHRlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSB1c2VkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBhdG9tIgorbXNnc3RyICJiacOnaW06ICUlKGVuZCkgw7ZnZWNpxJ9pIGXFnyDDtmdlY2nEn2kgb2xtYWRhbiBrdWxsYW7EsWxkxLEiCisKKyM6IHJlZi1maWx0ZXIuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgImhhdGFsxLEgb2x1xZ90dXJ1bG11xZ8gYmnDp2ltIGRpemlzaSAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyAlcyIKK21zZ3N0ciAiZGFsIHlvaywgJXMgeWVuaWRlbiB0ZW1lbGxlbmRpcmlsaXlvciIKKworIzogcmVmLWZpbHRlci5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyBkZXRhY2hlZCBIRUFEICVzIgorbXNnc3RyICJkYWwgeW9rLCBheXLEsWsgSEVBRCAlcyB5ZW5pZGVuIHRlbWVsbGVuZGlyaWxpeW9yIgorCisjOiByZWYtZmlsdGVyLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIGJpc2VjdCBzdGFydGVkIG9uICVzIgorbXNnc3RyICJkYWwgeW9rLCBpa2lsaSBhcmFtYSAlcyDDvHplcmluZGUgYmHFn2xhZMSxIgorCisjOiByZWYtZmlsdGVyLmM6MTUwNAorbXNnaWQgIm5vIGJyYW5jaCIKK21zZ3N0ciAiZGFsIHlvayIKKworIzogcmVmLWZpbHRlci5jOjE1NDAgcmVmLWZpbHRlci5jOjE3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBvYmplY3QgJXMgZm9yICVzIgorbXNnc3RyICJla3NpayBuZXNuZSAlcyAoJXMgacOnaW4pIgorCisjOiByZWYtZmlsdGVyLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXJzZV9vYmplY3RfYnVmZmVyIGZhaWxlZCBvbiAlcyBmb3IgJXMiCittc2dzdHIgInBhcnNlX29iamVjdF9idWZmZXIgJXMgw7x6ZXJpbmRlIGJhxZ9hcsSxc8SxeiBvbGR1ICglcyBpw6dpbikiCisKKyM6IHJlZi1maWx0ZXIuYzoyMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAiJyVzJyBrb251bXVuZGEgaGF0YWzEsSBvbHXFn3R1cnVsbXXFnyBuZXNuZSIKKworIzogcmVmLWZpbHRlci5jOjIwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgJXMiCittc2dzdHIgImJvenVrIGFkYSBpeWUgJXMgYmHFn3Z1cnVzdSB5b2sgc2F5xLFsxLF5b3IiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIG1pc3NpbmciCittc2dzdHIgImJpw6dpbTogJSUoZW5kKSDDtmdlY2nEn2kgZWtzaWsiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbWVyZ2VkIgorbXNnc3RyICInJXMnIHNlw6dlbmXEn2kgLS1tZXJnZWQgaWxlIHV5dW1zdXoiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8tbWVyZ2VkIgorbXNnc3RyICInJXMnIHNlw6dlbmXEn2kgLS1uby1tZXJnZWQgaWxlIHV5dW1zdXoiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiaGF0YWzEsSBvbHXFn3R1cnVsbXXFnyBuZXNuZSBhZMSxICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBtdXN0IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICInJXMnIGJpciBnw7ZuZGVyaXllIGnFn2FyZXQgZXRtZWxpIgorCisjOiByZW1vdGUuYzozNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlnIHJlbW90ZSBzaG9ydGhhbmQgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIKK21zZ3N0ciAidXphayBrb251bSB5YXDEsWxhbmTEsXJtYSBzdGVub2dyYWZpc2kgJy8nIGlsZSBiYcWfbGF5YW1hejogJXMiCisKKyM6IHJlbW90ZS5jOjQxNAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgcmVjZWl2ZXBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAiYmlyZGVuIGZhemxhIHJlY2VpdmVwYWNrIHZlcmlsZGksIGJpcmluY2lzaSBrdWxsYW7EsWzEsXlvciIKKworIzogcmVtb3RlLmM6NDIyCittc2dpZCAibW9yZSB0aGFuIG9uZSB1cGxvYWRwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgImJpcmRlbiBmYXpsYSB1cGxvYWRwYWNrIHZlcmlsZGksIGJpcmluY2lzaSBrdWxsYW7EsWzEsXlvciIKKworIzogcmVtb3RlLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAiSGVtICVzIGhlbSAlcyDFn3VyYXlhIGdldGlyaWxlbWl5b3I6ICVzIgorCisjOiByZW1vdGUuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMgZ2VuZWxkZSAlcyDDtmdlc2luaSBpemxlciwgJXMgZGXEn2lsIgorCisjOiByZW1vdGUuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlcyBoZW0gJXMgaGVtICVzIMO2Z2VsZXJpbmkgaXpsZXIiCisKKyM6IHJlbW90ZS5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgJyVzJyBvZiBwYXR0ZXJuIGhhZCBubyAnKiciCittc2dzdHIgImRpemdpbmluICclcycgYW5haHRhcsSxbmRhJyonIHlva3R1IgorCisjOiByZW1vdGUuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsdWUgJyVzJyBvZiBwYXR0ZXJuIGhhcyBubyAnKiciCittc2dzdHIgImRpemdpbmluICclcycgZGXEn2VyaW5kZSAnKicgeW9rIgorCisjOiByZW1vdGUuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIGRvZXMgbm90IG1hdGNoIGFueSIKK21zZ3N0ciAia2F5bmFrIGJhxZ92dXJ1IGJlbGlydGVjaSAlcyBiYcWfa2EgaGnDp2JpciDFn2V5bGUgZcWfbGXFn21peW9yIgorCisjOiByZW1vdGUuYzoxMDA5CisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAia2F5bmFrIGJhxZ92dXJ1IGJlbGlydGVjaSAlcyBiaXJkZW4gZmF6bGFzxLEgaWxlIGXFn2xlxZ9peW9yIgorCisjLiBUUkFOU0xBVE9SUzogIm1hdGNoZXMgJyVzJyUiIGlzIHRoZSA8ZHN0PiBwYXJ0IG9mICJnaXQgcHVzaAorIy4gPHJlbW90ZT4gPHNyYz46PGRzdD4iIHB1c2gsIGFuZCAiYmVpbmcgcHVzaGVkICgnJXMnKSIgaXMKKyMuIHRoZSA8c3JjPi4KKyMuCisjOiByZW1vdGUuYzoxMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGVzdGluYXRpb24geW91IHByb3ZpZGVkIGlzIG5vdCBhIGZ1bGwgcmVmbmFtZSAoaS5lLixcbiIKKyJzdGFydGluZyB3aXRoIFwicmVmcy9cIikuIFdlIHRyaWVkIHRvIGd1ZXNzIHdoYXQgeW91IG1lYW50IGJ5OlxuIgorIlxuIgorIi0gTG9va2luZyBmb3IgYSByZWYgdGhhdCBtYXRjaGVzICclcycgb24gdGhlIHJlbW90ZSBzaWRlLlxuIgorIi0gQ2hlY2tpbmcgaWYgdGhlIDxzcmM+IGJlaW5nIHB1c2hlZCAoJyVzJylcbiIKKyIgIGlzIGEgcmVmIGluIFwicmVmcy97aGVhZHMsdGFnc30vXCIuIElmIHNvIHdlIGFkZCBhIGNvcnJlc3BvbmRpbmdcbiIKKyIgIHJlZnMve2hlYWRzLHRhZ3N9LyBwcmVmaXggb24gdGhlIHJlbW90ZSBzaWRlLlxuIgorIlxuIgorIk5laXRoZXIgd29ya2VkLCBzbyB3ZSBnYXZlIHVwLiBZb3UgbXVzdCBmdWxseSBxdWFsaWZ5IHRoZSByZWYuIgorbXNnc3RyICIiCisiU2HEn2xhZMSxxJ/EsW7EsXoga2F5bmFrIHRhbSBiaXIgYmHFn3Z1cnUgYmVsaXJ0ZWNpIGRlxJ9pbCAow7ZybmXEn2luIFwicmVmcy9cIlxuIgorImlsZSBiYcWfbGFtxLF5b3IuIEJ1bnVubGEgbmUgZGVtZWsgaXN0ZWRpxJ9pbml6aSBidWxhYmlsbWVrIGnDp2luOlxuIgorIlxuIgorIi0gVXphayBrb251bWRhICclcycgaWxlIGXFn2xlxZ9lbiBiaXIgYmHFn3Z1cnUgYXJhZMSxay5cbiIKKyItIMSwdGlsZW4gPGtheW5haz4nxLFuICgnJXMnKSBcInJlZnMve2hlYWRzLHRhZ3N9L1wiIGnDp2luZGUgYmlyXG4iCisiICBiYcWfdnVydSBvbHVwIG9sbWFkxLHEn8SxbmEgYmFrdMSxay4gRcSfZXIgw7Z5bGV5c2UgdXphayBrb251bSB0YXJhZsSxbmRhXG4iCisiICBlxZ9sZcWfZW4gYmlyIHJlZnMve2hlYWRzLHRhZ3N9LyDDtm5la2kgZWtsZWRpay5cbiIKKyJcbiIKKyJIacOnYmlyaSBpxZ9lIHlhcmFtYWTEsSwgYml6IGRlIGLEsXJha3TEsWsuIEJhxZ92dXJ1eXUgdGFtIG9sYXJhayAiCisibml0ZWxlbmRpcm1lbGlzaW5pei4iCisKKyM6IHJlbW90ZS5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgY29tbWl0IG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvaGVhZHMvJXMnPyIKK21zZ3N0ciAiIgorIkJhxZ92dXJ1IGJlbGlydGVjaW5pbiA8a2F5bmFrPiBrxLFzbcSxIGJpciBnw7ZuZGVyaSBuZXNuZXNpLlxuIgorIiclczpyZWZzL2hlYWRzLyVzJyBrb251bXVuYSBpdGVyZWsgeWVuaSBiaXIgZGFsIG3EsVxuIgorIm9sdcWfdHVybWFrIGlzdGVkaW5pej8iCisKKyM6IHJlbW90ZS5jOjEwNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgdGFnIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgbmV3IHRhZyBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisiQmHFn3Z1cnUgYmVsaXJ0ZWNpbmluIDxrYXluYWs+IGvEsXNtxLEgYmlyIGV0aWtldCBuZXNuZXNpLlxuIgorIiclczpyZWZzL3RhZ3MvJXMnIGtvbnVtdW5hIGl0ZXJlayB5ZW5pIGJpciBldGlrZXQgbWlcbiIKKyJvbHXFn3R1cm1hayBpc3RlZGluaXo/IgorCisjOiByZW1vdGUuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRyZWUgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgdHJlZSBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisiQmHFn3Z1cnUgYmVsaXJ0ZWNpbmluIDxrYXluYWs+IGvEsXNtxLEgYmlyIGHEn2HDpyBuZXNuZXNpLlxuIgorIiclczpyZWZzL3RhZ3MvJXMnIGtvbnVtdW5hIGl0ZXJlayB5ZW5pIGJpciBhxJ9hw6cgbcSxXG4iCisiZXRpa2V0bGVtZWsgaXN0ZWRpbml6PyIKKworIzogcmVtb3RlLmM6MTA1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBibG9iIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IGJsb2IgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIkJhxZ92dXJ1IGJlbGlydGVjaW5pbiA8a2F5bmFrPiBrxLFzbcSxIGlraWxpIGJpciBuZXNuZS5cbiIKKyInJXM6cmVmcy90YWdzLyVzJyBrb251bXVuYSBpdGVyZWsgeWVuaSBpa2lsaSBiaXIgbmVzbmUgbWlcbiIKKyJldGlrZXRsZW1layBpc3RlZGluaXo/IgorCisjOiByZW1vdGUuYzoxMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNhbm5vdCBiZSByZXNvbHZlZCB0byBicmFuY2giCittc2dzdHIgIiVzIGRhbGEgw6fDtnrDvGxlbWl5b3IiCisKKyM6IHJlbW90ZS5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlbGV0ZSAnJXMnOiByZW1vdGUgcmVmIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICInJXMnIHNpbGluZW1peW9yOiB1emFrIGJhxZ92dXJ1IHlvayIKKworIzogcmVtb3RlLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgImhlZGVmIGJhxZ92dXJ1IGJlbGlydGVjaSAlcyBiaXJkZW4gZmF6bGFzxLEgaWxlIGXFn2xlxZ9peW9yIgorCisjOiByZW1vdGUuYzoxMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWYgJXMgcmVjZWl2ZXMgZnJvbSBtb3JlIHRoYW4gb25lIHNyYyIKK21zZ3N0ciAiaGVkZWYgYmHFn3Z1cnVzdSAlcyBiaXJkZW4gw6dvayBrYXluYWt0YW4gYWzEsXlvciIKKworIzogcmVtb3RlLmM6MTYyOCByZW1vdGUuYzoxNzI5Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBRCBiaXIgZGFsYSBpxZ9hcmV0IGV0bWl5b3IiCisKKyM6IHJlbW90ZS5jOjE2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgImLDtnlsZSBiaXIgZGFsIHlvazogJyVzJyIKKworIzogcmVtb3RlLmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAiJyVzJyBkYWzEsSBpw6dpbiDDvHN0a2F5bmFrIHlhcMSxbGFuZMSxcm1hc8SxIHlvayIKKworIzogcmVtb3RlLmM6MTY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1cHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiw7xzdGtheW5hayBkYWzEsSAnJXMnIGJpciB1emFrIGl6bGVtZSBkYWzEsSBvbGFyYWsgZGVwb2xhbm3EsXlvciIKKworIzogcmVtb3RlLmM6MTY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIGRlc3RpbmF0aW9uICclcycgb24gcmVtb3RlICclcycgaGFzIG5vIGxvY2FsIHRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiaXRtZSBoZWRlZmkgJyVzJyAoJyVzJyB1emFrIGtvbnVtdW5kYSkgeWVyZWwgaXpsZW1lIGRhbMSxbmEgaXllIGRlxJ9pbCIKKworIzogcmVtb3RlLmM6MTY3MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICInJXMnIGRhbMSxbsSxbiBpdG1lIGnDp2luIHV6YWsga29udW11IHlvayIKKworIzogcmVtb3RlLmM6MTY4MworIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciCittc2dzdHIgIiclcycgacOnaW4gb2xhbiBiYcWfdnVydSBiZWxpcnRlw6dsZXJpICclcycgacOnZXJtaXlvciIKKworIzogcmVtb3RlLmM6MTY5NgorbXNnaWQgInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIKK21zZ3N0ciAiaXRpbGVjZWsgYmlyIGhlZGVmIHlvayAocHVzaC5kZWZhdWx0OiAnbm90aGluZycpIgorCisjOiByZW1vdGUuYzoxNzE4Cittc2dpZCAiY2Fubm90IHJlc29sdmUgJ3NpbXBsZScgcHVzaCB0byBhIHNpbmdsZSBkZXN0aW5hdGlvbiIKK21zZ3N0ciAidGVrIGJpciBrb251bWEgJ3NpbXBsZScgaXRtZSDDp8O2esO8bGVtaXlvciIKKworIzogcmVtb3RlLmM6MTg0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgJXMiCittc2dzdHIgInV6YWsgYmHFn3Z1cnUgJXMgYnVsdW5hbWFkxLEiCisKKyM6IHJlbW90ZS5jOjE4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiBJZ25vcmluZyBmdW5ueSByZWYgJyVzJyBsb2NhbGx5IgorbXNnc3RyICIqIEXEn2xlbmNlbGkgYmHFn3Z1cnUgJyVzJyB5ZXJlbCBvbGFyYWsgeW9rIHNhecSxbMSxeW9yIgorCisjOiByZW1vdGUuYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJhc2VkIG9uICclcycsIGJ1dCB0aGUgdXBzdHJlYW0gaXMgZ29uZS5cbiIKK21zZ3N0ciAiRGFsxLFuxLF6ICclcycgdGVtZWxsaSwgYW5jYWsgw7xzdGtheW5hayBnaXRtacWfLlxuIgorCisjOiByZW1vdGUuYzoyMDI0Cittc2dpZCAiICAodXNlIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgdG8gZml4dXApXG4iCittc2dzdHIgIiAgKGTDvHplbHRtZWsgacOnaW4gXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiBrdWxsYW4pXG4iCisKKyM6IHJlbW90ZS5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAgdG8gZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgIkRhbMSxbsSxeiAnJXMnIGlsZSBnw7xuY2VsLlxuIgorCisjOiByZW1vdGUuYzoyMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGFuZCAnJXMnIHJlZmVyIHRvIGRpZmZlcmVudCBjb21taXRzLlxuIgorbXNnc3RyICJTaXppbiBkYWzEsW7EsXogdmUgJyVzJyBiYcWfa2EgZ8O2bmRlcmlsZXJlIGJhxZ92dXJ1eW9yLlxuIgorCisjOiByZW1vdGUuYzoyMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcIiVzXCIgZm9yIGRldGFpbHMpXG4iCittc2dzdHIgIiAgKGF5csSxbnTEsWxhciBpw6dpbiBcIiVzXCIga3VsbGFuxLFuKVxuIgorCisjOiByZW1vdGUuYzoyMDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIkRhbMSxbsSxeiAnJXMnIGRhbMSxbmRhbiAlZCBnw7ZuZGVyaSBpbGVyaWRlLlxuIgorbXNnc3RyWzFdICJEYWzEsW7EsXogJyVzJyBkYWzEsW5kYW4gJWQgZ8O2bmRlcmkgaWxlcmlkZS5cbiIKKworIzogcmVtb3RlLmM6MjA0NAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKHllcmVsIGfDtm5kZXJpbGVyaW5pemkgeWF5xLFtbGFtYWsgacOnaW4gXCJnaXQgcHVzaFwiIGt1bGxhbsSxbilcbiIKKworIzogcmVtb3RlLmM6MjA0NworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICJEYWzEsW7EsXogJyVzJyBkYWzEsW5kYW4gJWQgZ8O2bmRlcmkgZ2VyaWRlIHZlIGlsZXJpIHNhcsSxbGFiaWxpci5cbiIKK21zZ3N0clsxXSAiRGFsxLFuxLF6ICclcycgZGFsxLFuZGFuICVkIGfDtm5kZXJpIGdlcmlkZSB2ZSBpbGVyaSBzYXLEsWxhYmlsaXIuXG4iCisKKyM6IHJlbW90ZS5jOjIwNTUKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIKK21zZ3N0ciAiICAoeWVyZWwgZGFsxLFuxLF6xLEgZ8O8bmNlbGxlbWVrIGnDp2luIFwiZ2l0IHB1bGxcIiBrdWxsYW7EsW4pXG4iCisKKyM6IHJlbW90ZS5jOjIwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisiU2l6aW4gZGFsxLFuxLF6IHZlICclcycgYmlyYmlyaW5kZW4gdXpha2xhxZ9txLHFnyB2ZSBzxLFyYXPEsXlsYVxuIgorImhlciBiaXJpbmRlICVkIHZlICVkIGfDtm5kZXJpIHZhci5cbiIKK21zZ3N0clsxXSAiIgorIlNpemluIGRhbMSxbsSxeiB2ZSAnJXMnIGJpcmJpcmluZGVuIHV6YWtsYcWfbcSxxZ8gdmUgc8SxcmFzxLF5bGFcbiIKKyJoZXIgYmlyaW5kZSAlZCB2ZSAlZCBnw7ZuZGVyaSB2YXIuXG4iCisKKyM6IHJlbW90ZS5jOjIwNjgKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpXG4iCittc2dzdHIgIiAgKHV6YWsgZGFsxLEga2VuZGkgZGFsxLFuxLF6YSBiaXJsZcWfdGlybWVrIGnDp2luIFwiZ2l0IHB1bGxcIiBrdWxsYW7EsW4pXG4iCisKKyM6IHJlbW90ZS5jOjIyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGV4cGVjdGVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgImJla2xlbmVuIG5lc25lIGFkxLEgJyVzJyBheXLEscWfdMSxcsSxbGFtxLF5b3IiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcGxhY2UgcmVmIG5hbWU6ICVzIgorbXNnc3RyICJoYXRhbMSxIGRlxJ9pxZ90aXJtZSBiYcWfdnVydXN1IGFkxLE6ICVzIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSByZXBsYWNlIHJlZjogJXMiCittc2dzdHIgInlpbmVsZW5tacWfIGRlxJ9pxZ90aXJtZSBiYcWfdnVydXN1OiAlcyIKKworIzogcmVwbGFjZS1vYmplY3QuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIGRlcHRoIHRvbyBoaWdoIGZvciBvYmplY3QgJXMiCittc2dzdHIgIiVzIG5lc25lc2kgacOnaW4gZGXEn2nFn3Rpcm1lIGRlcmlubGnEn2kgcGVrIHnDvGtzZWsiCisKKyM6IHJlcmVyZS5jOjIxNyByZXJlcmUuYzoyMjYgcmVyZXJlLmM6MjI5Cittc2dpZCAiY29ycnVwdCBNRVJHRV9SUiIKK21zZ3N0ciAiaGFzYXIgZ8O2cm3DvMWfIE1FUkdFX1JSIgorCisjOiByZXJlcmUuYzoyNjQgcmVyZXJlLmM6MjY5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcmVyZSByZWNvcmQiCittc2dzdHIgInJlcmVyZSBrYXlkxLEgeWF6xLFsYW3EsXlvciIKKworIzogcmVyZXJlLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZXJlIHdlcmUgZXJyb3JzIHdoaWxlIHdyaXRpbmcgJyVzJyAoJXMpIgorbXNnc3RyICInJXMnIHlhesSxbMSxcmtlbiBoYXRhbGFyIHZhcmTEsSAoJXMpIgorCisjOiByZXJlcmUuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZsdXNoICclcyciCittc2dzdHIgIiclcycgZmxvxZ8geWFwxLFsYW1hZMSxIgorCisjOiByZXJlcmUuYzo1MDMgcmVyZXJlLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29uZmxpY3QgaHVua3MgaW4gJyVzJyIKK21zZ3N0ciAiJyVzJyBpw6dpbmRla2kgw6dha8SxxZ9hbiBwYXLDp2FsYXIgYXlyxLHFn3TEsXLEsWxhbWFkxLEiCisKKyM6IHJlcmVyZS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdXRpbWUoKSBvbiAnJXMnIgorbXNnc3RyICInJXMnIMO8emVyaW5kZSB1dGltZSgpIGJhxZ9hcsSxc8SxeiIKKworIzogcmVyZXJlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIiclcycgeWF6xLFsYW1hZMSxIgorCisjOiByZXJlcmUuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2VkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIiclcycgYmlyIMO2bmNla2kgw6fDtnrDvG0ga3VsbGFuxLFsYXJhayBoYXrEsXJsYW1hIGFsYW7EsW5hIGFsxLFuZMSxIgorCisjOiByZXJlcmUuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcmVzb2x1dGlvbiBmb3IgJyVzJy4iCittc2dzdHIgIiclcycgacOnaW4gw6fDtnrDvG0ga2F5ZGVkaWxkaS4iCisKKyM6IHJlcmVyZS5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNvbHZlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICInJXMnIGJpciDDtm5jZWtpIMOnw7Z6w7xtIGt1bGxhbsSxbGFyYWsgw6fDtnrDvGxkw7wuIgorCisjOiByZXJlcmUuYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayBzdHJheSAnJXMnIgorbXNnc3RyICInJXMnIGJhxZ/EsWJvxZ91bnVuIGJhxJ9sYW50xLFzxLEga2VzaWxlbWl5b3IiCisKKyM6IHJlcmVyZS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNvcmRlZCBwcmVpbWFnZSBmb3IgJyVzJyIKK21zZ3N0ciAiJyVzJyBpw6dpbiDDtm5nw7Zyw7xudMO8IGtheWRlZGlsZGkiCisKKyM6IHJlcmVyZS5jOjg4MSBzdWJtb2R1bGUuYzoyMDc4IGJ1aWx0aW4vbG9nLmM6MTg3MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiJyVzJyBkaXppbmkgb2x1xZ90dXJ1bGFtYWTEsSIKKworIzogcmVyZXJlLmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIGNvbmZsaWN0ZWQgc3RhdGUgaW4gJyVzJyIKK21zZ3N0ciAiJyVzJyBpw6dpbmRla2kgw6dha8SxxZ9hbiBkdXJ1bSBnw7xuY2VsbGVuZW1lZGkiCisKKyM6IHJlcmVyZS5jOjEwNjggcmVyZXJlLmM6MTA3NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyByZW1lbWJlcmVkIHJlc29sdXRpb24gZm9yICclcyciCittc2dzdHIgIiclcycgacOnaW4gaGF0xLFybGFuYW4gw6fDtnrDvG0geW9rIgorCisjOiByZXJlcmUuYzoxMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgJyVzJyIKK21zZ3N0ciAiJyVzJyBiYcSfbGFudMSxc8SxIGtlc2lsZW1peW9yIgorCisjOiByZXJlcmUuYzoxMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIiclcycgacOnaW4gw7ZuZ8O2csO8bnTDvCBnw7xuY2VsbGVuZGkiCisKKyM6IHJlcmVyZS5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9yZ290IHJlc29sdXRpb24gZm9yICclcydcbiIKK21zZ3N0ciAiJyVzJyBpw6dpbiDDp8O2esO8bSB1bnV0dWxkdVxuIgorCisjOiByZXJlcmUuYzoxMTk5Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcnItY2FjaGUgZGlyZWN0b3J5IgorbXNnc3RyICJyci1jYWNoZSBkaXppbmkgYcOnxLFsYW3EsXlvciIKKworIzogcmV2aXNpb24uYzoyNDk3Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAiZ2XDp2VybGkgZGFsxLFuxLF6IGJvenVrIGdpYmkgZ8O2csO8bsO8eW9yIgorCisjOiByZXZpc2lvbi5jOjI1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdHMgeWV0IgorbXNnc3RyICJnZcOnZXJsaSBkYWzEsW7EsXogJyVzJyBpw6dpbmRlIGhlbsO8eiBiaXIgZ8O2bmRlcmkgeW9rIgorCisjOiByZXZpc2lvbi5jOjI3MDgKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAiLS1maXJzdC1wYXJlbnQsIC0tYmlzZWN0IGlsZSB1eXVtc3V6IgorCisjOiByZXZpc2lvbi5jOjI3MTIKK21zZ2lkICItTCBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBkaWZmIGZvcm1hdHMgYmVzaWRlcyAtcCBhbmQgLXMiCittc2dzdHIgIi1MLCAtcCB2ZSAtcyBkxLHFn8SxbmRhIGJhxZ9rYSBkaWZmIGJpw6dpbWxlcmluaSBoZW7DvHogZGVzdGVrbGVtaXlvciIKKworIzogcnVuLWNvbW1hbmQuYzo3NjMKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiCittc2dzdHIgIi9kZXYvbnVsbCBhw6fEsWxhbWFkxLEiCisKKyM6IHJ1bi1jb21tYW5kLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFzeW5jIHRocmVhZDogJXMiCittc2dzdHIgImFzeW5jIGnFnyBwYXLDp2FjxLHEn8SxIG9sdcWfdHVydWxhbWFkxLE6ICVzIgorCisjOiBydW4tY29tbWFuZC5jOjEzMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAnJXMnIGhvb2sgd2FzIGlnbm9yZWQgYmVjYXVzZSBpdCdzIG5vdCBzZXQgYXMgZXhlY3V0YWJsZS5cbiIKKyJZb3UgY2FuIGRpc2FibGUgdGhpcyB3YXJuaW5nIHdpdGggYGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlYC4iCittc2dzdHIgIiIKKyInJXMnIGthbmNhc8SxIHlvayBzYXnEsWxkxLEgw6fDvG5rw7wgYmlyIMOnYWzEscWfdMSxcsSxbGFiaWxpciBvbGFyYWsgYXlhcmxhbm1hbcSxxZ8uXG4iCisiQnUgdXlhcsSxecSxICdnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZScgaWxlIGthcGF0YWJpbGlyc2luaXouIgorCisjOiBzZW5kLXBhY2suYzoxNDQKK21zZ2lkICJ1bmV4cGVjdGVkIGZsdXNoIHBhY2tldCB3aGlsZSByZWFkaW5nIHJlbW90ZSB1bnBhY2sgc3RhdHVzIgorbXNnc3RyICJ1emFrIGtvbnVtIGHDp8SxbSBkdXJ1bXUgb2t1bnVya2VuIGJla2xlbm1lZGlrIGZsb8WfIHBha2V0aSIKKworIzogc2VuZC1wYWNrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSByZW1vdGUgdW5wYWNrIHN0YXR1czogJXMiCittc2dzdHIgInV6YWsga29udW0gYcOnxLFtIGR1cnVtdSBheXLEscWfdMSxcsSxbGFtYWTEsTogJXMiCisKKyM6IHNlbmQtcGFjay5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgdW5wYWNrIGZhaWxlZDogJXMiCittc2dzdHIgInV6YWsga29udW0gYcOnxLFtxLEgYmHFn2FyxLFzxLF6OiAlcyIKKworIzogc2VuZC1wYWNrLmM6MzA5Cittc2dpZCAiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiCittc2dzdHIgIml0bWUgc2VydGlmaWthc8SxIGltemFsYW5hbWFkxLEiCisKKyM6IHNlbmQtcGFjay5jOjQyMworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAiYWzEsWPEsSB1w6cgLS1zaWduZWQgaXRtZXlpIGRlc3Rla2xlbWl5b3IiCisKKyM6IHNlbmQtcGFjay5jOjQyNQorbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLSIKKyJzaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorImFsxLFjxLEgdcOnIC0tc2lnbmVkIGl0bWV5aSBkZXN0ZWtsZW1lZGnEn2luZGVuIGRvbGF5xLEgYmlyIGl0bWUgc2VydGlmaWthc8SxICIKKyJnw7ZuZGVyaWxtaXlvciIKKworIzogc2VuZC1wYWNrLmM6NDM3Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyBwdXNoIgorbXNnc3RyICJhbMSxY8SxIHXDpyAtLWF0b21pYyBpdG1leWkgZGVzdGVrbGVtaXlvciIKKworIzogc2VuZC1wYWNrLmM6NDQyCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBwdXNoIG9wdGlvbnMiCittc2dzdHIgImFsxLFjxLEgdcOnIGl0bWUgc2XDp2VuZWtsZXJpbmkgZGVzdGVrbGVtaXlvciIKKworIzogc2VxdWVuY2VyLmM6MTkxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0IG1lc3NhZ2UgY2xlYW51cCBtb2RlICclcyciCittc2dzdHIgImdlw6dlcnNpeiBnw7ZuZGVyaSBpbGV0aXNpIHRlbWl6bGVtZSBraXBpICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlICclcyciCittc2dzdHIgIiclcycgc2lsaW5lbWVkaSIKKworIzogc2VxdWVuY2VyLmM6MzE1IGJ1aWx0aW4vcmViYXNlLmM6Nzg1IGJ1aWx0aW4vcmViYXNlLmM6MTc1MCBidWlsdGluL3JtLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgJyVzJyIKK21zZ3N0ciAiJyVzJyBrYWxkxLFyxLFsYW1hZMSxIgorCisjOiBzZXF1ZW5jZXIuYzozMjUKK21zZ2lkICJyZXZlcnQiCittc2dzdHIgImdlcmkgYWwiCisKKyM6IHNlcXVlbmNlci5jOjMyNworbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICJzZcOnLWFsIgorCisjOiBzZXF1ZW5jZXIuYzozMjkKK21zZ2lkICJyZWJhc2UiCittc2dzdHIgInllbmlkZW4gdGVtZWxsZW5kaXIiCisKKyM6IHNlcXVlbmNlci5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGFjdGlvbjogJWQiCittc2dzdHIgImJpbGlubWV5ZW4gZXlsZW06ICVkIgorCisjOiBzZXF1ZW5jZXIuYzozODkKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JyIKK21zZ3N0ciAiIgorIsOnYWvEscWfbWFsYXLEsSDDp8O2emTDvGt0ZW4gc29ucmEgZG/En3J1c3UgdmVyaWxlbiB5b2xsYXLEsSAnZ2l0IGFkZCA8eW9sbGFyPidcbiIKKyJ2ZXlhICdnaXQgcm0gPHlvbGxhcj4nIGlsZSBpbWxleWluIgorCisjOiBzZXF1ZW5jZXIuYzozOTIKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+J1xuIgorImFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JyIKK21zZ3N0ciAiIgorIsOnYWvEscWfbWFsYXLEsSDDp8O2emTDvGt0ZW4gc29ucmEgZG/En3J1c3UgdmVyaWxlbiB5b2xsYXLEsSAnZ2l0IGFkZCA8eW9sbGFyPidcbiIKKyJ2ZXlhICdnaXQgcm0gPHlvbGxhcj4nIGlsZSBpbWxleWluIHZlIMOnxLFrYW4gc29udWN1XG4iCisiJ2dpdCBjb21taXQnIGlsZSBnw7ZuZGVyaW4iCisKKyM6IHNlcXVlbmNlci5jOjQwNSBzZXF1ZW5jZXIuYzoyOTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb2NrICclcyciCittc2dzdHIgIiclcycga2lsaXRsZW5lbWVkaSIKKworIzogc2VxdWVuY2VyLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBlb2wgdG8gJyVzJyIKK21zZ3N0ciAic2F0xLFyIHNvbnUgxZ91cmF5YSB5YXrEsWxhbWFkxLE6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQxNyBzZXF1ZW5jZXIuYzoyNzA2IHNlcXVlbmNlci5jOjI5MDcgc2VxdWVuY2VyLmM6MjkyMQorIzogc2VxdWVuY2VyLmM6MzE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgJyVzJyIKK21zZ3N0ciAiJyVzJyB0YW1hbWxhbmFtYWTEsSIKKworIzogc2VxdWVuY2VyLmM6NDQwIHNlcXVlbmNlci5jOjE2MTMgc2VxdWVuY2VyLmM6MjcyNiBzZXF1ZW5jZXIuYzozMTY3CisjOiBzZXF1ZW5jZXIuYzozMjc2IGJ1aWx0aW4vYW0uYzoyNDkgYnVpbHRpbi9jb21taXQuYzo3ODcgYnVpbHRpbi9tZXJnZS5jOjExMjAKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIiclcycgb2t1bmFtYWTEsSIKKworIzogc2VxdWVuY2VyLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlcy4iCittc2dzdHIgIiVzIGlsZSB5ZXJlbCBkZcSfacWfaWtsaWtsZXJpbml6aW4gw7x6ZXJpbmUgeWF6xLFsYWNha3TEsXIuIgorCisjOiBzZXF1ZW5jZXIuYzo0NzAKK21zZ2lkICJjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iCittc2dzdHIgIsSwbGVybGVtZWsgacOnaW4gZGXEn2nFn2lrbGlrbGVyaW5pemkgZ8O2bmRlcmluIHZleWEgenVsYWxhecSxbi4iCisKKyM6IHNlcXVlbmNlci5jOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFzdC1mb3J3YXJkIgorbXNnc3RyICIlczogaWxlcmkgc2FyIgorCisjOiBzZXF1ZW5jZXIuYzo1NDEgYnVpbHRpbi90YWcuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgIkdlw6dlcnNpeiB0ZW1pemxpayBraXBpICVzIgorCisjLiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiwgImNoZXJyeS1waWNrIiBvcgorIy4gInJlYmFzZSIuCisjLgorIzogc2VxdWVuY2VyLmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiVzOiBZZW5pIGluZGVrcyBkb3N5YXPEsSB5YXrEsWxhbcSxeW9yIgorCisjOiBzZXF1ZW5jZXIuYzo2NTIKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWUiCittc2dzdHIgIsO2bmJlbGxlayBhxJ9hY8SxIGfDvG5jZWxsZW5lbWl5b3IiCisKKyM6IHNlcXVlbmNlci5jOjY2NgorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICJIRUFEIGfDtm5kZXJpc2kgw6fDtnrDvGxlbWVkaSIKKworIzogc2VxdWVuY2VyLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGtleSBwcmVzZW50IGluICclLipzJyIKK21zZ3N0ciAiJyUuKnMnIGnDp2luZGUgYmlyIGFuYWh0YXIgeW9rIgorCisjOiBzZXF1ZW5jZXIuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlcXVvdGUgdmFsdWUgb2YgJyVzJyIKK21zZ3N0ciAiJyVzJyDDtmdlc2luaW4gdMSxcm5ha2xhcsSxIGthbGTEsXLEsWxhbcSxeW9yIgorCisjOiBzZXF1ZW5jZXIuYzo3OTQgd3JhcHBlci5jOjE5MCB3cmFwcGVyLmM6MzYwIGJ1aWx0aW4vYW0uYzo3MTAKKyM6IGJ1aWx0aW4vYW0uYzo4MDIgYnVpbHRpbi9tZXJnZS5jOjExMTcgYnVpbHRpbi9yZWJhc2UuYzoxMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgIiclcycgb2t1bWEgacOnaW4gYcOnxLFsYW1hZMSxIgorCisjOiBzZXF1ZW5jZXIuYzo4MDQKK21zZ2lkICInR0lUX0FVVEhPUl9OQU1FJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICInR0lUX0FVVEhPUl9OQU1FJyBoYWxpaGF6xLFyZGEgdmVyaWxtacWfIgorCisjOiBzZXF1ZW5jZXIuYzo4MDkKK21zZ2lkICInR0lUX0FVVEhPUl9FTUFJTCcgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfRU1BSUwnIGhhbGloYXrEsXJkYSB2ZXJpbG1pxZ8iCisKKyM6IHNlcXVlbmNlci5jOjgxNAorbXNnaWQgIidHSVRfQVVUSE9SX0RBVEUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIidHSVRfQVVUSE9SX0RBVEUnIGhhbGloYXrEsXJkYSB2ZXJpbG1pxZ8iCisKKyM6IHNlcXVlbmNlci5jOjgxOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhcmlhYmxlICclcyciCittc2dzdHIgImJpbGlubWV5ZW4gZGXEn2nFn2tlbiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo4MjMKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX05BTUUnIgorbXNnc3RyICInR0lUX0FVVEhPUl9OQU1FJyBla3NpayIKKworIzogc2VxdWVuY2VyLmM6ODI1Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9FTUFJTCciCittc2dzdHIgIidHSVRfQVVUSE9SX0VNQUlMJyBla3NpayIKKworIzogc2VxdWVuY2VyLmM6ODI3Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9EQVRFJyIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfREFURScgZWtzaWsiCisKKyM6IHNlcXVlbmNlci5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWVcbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZSBzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisiw4dhbMSxxZ9tYSBhxJ9hY8SxbsSxemRhIGhhesSxcmxhbm3EscWfIGRlxJ9pxZ9pa2xpa2xlcmluaXogdmFyLlxuIgorIkJ1IGRlxJ9pxZ9pa2xpa2xlcmluIGJpciDDtm5jZWtpIGfDtm5kZXJpeWxlIGdpdG1pxZ8gb2xtYXPEsSBnZXJla2l5b3JzYTpcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAlcyBrb211dHVudSDDp2FsxLHFn3TEsXLEsW4uXG4iCisiXG4iCisiQnVubGFyIGnDp2luIHllbmkgYmlyIGfDtm5kZXJpIGhhesSxcmxhbWFrIGlzdGl5b3JzYW7EsXo6XG4iCisiXG4iCisiXHRnaXQgY29tbWl0ICVzIGtvbXV0dW51IMOnYWzEscWfdMSxcsSxbi5cbiIKKyJcbiIKKyJIZXIgaWtpIGR1cnVtZGEgZGEgacWfaW5peiBiaXR0aWt0ZW4gc29ucmE6XG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUga29tdXR1IGlsZSBzw7xyZMO8csO8bi5cbiIKKworIzogc2VxdWVuY2VyLmM6MTE0OAorbXNnaWQgIidwcmVwYXJlLWNvbW1pdC1tc2cnIGhvb2sgZmFpbGVkIgorbXNnc3RyICIncHJlcGFyZS1jb21taXQtbXNnJyBiYcWfYXLEsXPEsXogb2xkdSIKKworIzogc2VxdWVuY2VyLmM6MTE1NAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIkFkxLFuxLF6IHZlIGUtcG9zdGEgYWRyZXNpbml6IGt1bGxhbsSxY8SxIGFkxLFuxLF6IHZlIG1ha2luZSBhZMSxIHRlbWVsIGFsxLFuYXJha1xuIgorImtlbmRpbGnEn2luZGVuIHlhcMSxbGFuZMSxcsSxbGTEsS4gTMO8dGZlbiBkb8SfcnUgb2x1cCBvbG1hZMSxxJ/EsW7EsSBkZW5ldGxleWluLlxuIgorIkJ1IGlsZXRpeWkgb25sYXLEsSBlbCBpbGUgYmVsaXJ0ZXJlayBnaXpsZXllYmlsaXJzaW5pei4gQcWfYcSfxLFkYWtpIGtvbXV0dVxuIgorIsOnYWzEscWfdMSxcsSxbiB2ZSB5YXDEsWxhbmTEsXJtYSBkb3N5YW7EsXrEsSBkw7x6ZW5sZW1layBpw6dpbiBkw7x6ZW5sZXlpY2luaXpkZWtpXG4iCisiecO2bmVyZ2VsZXJpIGl6bGV5aW46XG4iCisiXG4iCisiXHRnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkJ1bmRhbiBzb25yYSBidSBnw7ZuZGVyaSBpw6dpbiBrdWxsYW7EsWxhbiBraW1sacSfaSBkw7x6ZWx0bWVrIGlzdGV5ZWJpbGlyc2luaXo6XG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTE2NworbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIkFkxLFuxLF6IHZlIGUtcG9zdGEgYWRyZXNpbml6IGt1bGxhbsSxY8SxIGFkxLFuxLF6IHZlIG1ha2luZSBhZMSxIHRlbWVsIGFsxLFuYXJha1xuIgorImtlbmRpbGnEn2luZGVuIHlhcMSxbGFuZMSxcsSxbGTEsS4gTMO8dGZlbiBkb8SfcnUgb2x1cCBvbG1hZMSxxJ/EsW7EsSBkZW5ldGxleWluLlxuIgorIkJ1IGlsZXRpeWkgb25sYXLEsSBlbCBpbGUgYmVsaXJ0ZXJlayBnaXpsZXllYmlsaXJzaW5pejpcbiIKKyJcbiIKKyJcdGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiQWTEsW7EsXpcIlxuIgorIlx0Z2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwic2l6QGUtcG9zdGEuY29tXCJcbiIKKyJcbiIKKyJCdW5kYW4gc29ucmEgYnUgZ8O2bmRlcmkgacOnaW4ga3VsbGFuxLFsYW4ga2ltbGnEn2kgZMO8emVsdG1layBpc3RleWViaWxpcnNpbml6OlxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyMDkKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJ5ZW5pIG9sdcWfdHVydWxhbiBnw7ZuZGVyaSBhcmFuYW1hZMSxIgorCisjOiBzZXF1ZW5jZXIuYzoxMjExCittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJ5ZW5pIG9sdcWfdHVydWxhbiBnw7ZuZGVyaSBheXLEscWfdMSxcsSxbGFtYWTEsSIKKworIzogc2VxdWVuY2VyLmM6MTI1NworbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICJIRUFELCBnw7ZuZGVyaSBvbHXFn3R1cmR1a3RhbiBzb25yYSDDp8O2esO8bGVtaXlvciIKKworIzogc2VxdWVuY2VyLmM6MTI1OQorbXNnaWQgImRldGFjaGVkIEhFQUQiCittc2dzdHIgImF5csSxayBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxMjYzCittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAoa8O2ayBnw7ZuZGVyaSkiCisKKyM6IHNlcXVlbmNlci5jOjEyODQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCIKK21zZ3N0ciAiSEVBRCBheXLEscWfdMSxcsSxbGFtYWTEsSIKKworIzogc2VxdWVuY2VyLmM6MTI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIkhFQUQgJXMgYmlyIGfDtm5kZXJpIGRlxJ9pbCIKKworIzogc2VxdWVuY2VyLmM6MTI5MCBzZXF1ZW5jZXIuYzoxMzY0IGJ1aWx0aW4vY29tbWl0LmM6MTU3NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAiSEVBRCBnw7ZuZGVyaXNpIGF5csSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiBzZXF1ZW5jZXIuYzoxMzQyIHNlcXVlbmNlci5jOjE5NjgKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0IGF1dGhvciIKK21zZ3N0ciAiZ8O2bmRlcmkgeWF6YXLEsSBheXLEscWfdMSxcsSxbGFtxLF5b3IiCisKKyM6IHNlcXVlbmNlci5jOjEzNTMgYnVpbHRpbi9hbS5jOjE1NjYgYnVpbHRpbi9tZXJnZS5jOjY4NworbXNnaWQgImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiCittc2dzdHIgImdpdCB3cml0ZS10cmVlIGJpciBhxJ9hY2EgeWF6YW1hZMSxIgorCisjOiBzZXF1ZW5jZXIuYzoxMzg2IHNlcXVlbmNlci5jOjE0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgZnJvbSAnJXMnIgorbXNnc3RyICInJXMnIGtvbnVtdW5kYW4gZ8O2bmRlcmkgaWxldGlzaSBva3VuYW3EsXlvciIKKworIzogc2VxdWVuY2VyLmM6MTQxMyBidWlsdGluL2FtLmM6MTU4OCBidWlsdGluL2NvbW1pdC5jOjE2NzMgYnVpbHRpbi9tZXJnZS5jOjg4NgorIzogYnVpbHRpbi9tZXJnZS5jOjkxMQorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICJnw7ZuZGVyaSBuZXNuZXNpIHlhesSxbGFtYWTEsSIKKworIzogc2VxdWVuY2VyLmM6MTQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICIlcyBnw7ZuZGVyaXNpIGF5csSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiBzZXF1ZW5jZXIuYzoxNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICLDvHN0IGfDtm5kZXJpICVzIGF5csSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiBzZXF1ZW5jZXIuYzoxNTYyIHNlcXVlbmNlci5jOjE2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kOiAlZCIKK21zZ3N0ciAiYmlsaW5tZXllbiBrb211dDogJWQiCisKKyM6IHNlcXVlbmNlci5jOjE2MjAgc2VxdWVuY2VyLmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJWQgY29tbWl0cy4iCittc2dzdHIgIkJ1ICVkIGfDtm5kZXJpbmluIGJpciBiaXJsZcWfaW1pLiIKKworIzogc2VxdWVuY2VyLmM6MTYzMAorbXNnaWQgIm5lZWQgYSBIRUFEIHRvIGZpeHVwIgorbXNnc3RyICJkw7x6ZWx0bWVrIGnDp2luIGJpciBIRUFEIGdlcmVraXlvciIKKworIzogc2VxdWVuY2VyLmM6MTYzMiBzZXF1ZW5jZXIuYzozMjEyCittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiSEVBRCBva3VuYW1hZMSxIgorCisjOiBzZXF1ZW5jZXIuYzoxNjM0Cittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCdzIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJIRUFEJ2luIGfDtm5kZXJpIGlsZXRpc2kgb2t1bmFtYWTEsSIKKworIzogc2VxdWVuY2VyLmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAiJyVzJyB5YXrEsWxhbcSxeW9yIgorCisjOiBzZXF1ZW5jZXIuYzoxNjQ3IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTYKK21zZ2lkICJUaGlzIGlzIHRoZSAxc3QgY29tbWl0IG1lc3NhZ2U6IgorbXNnc3RyICJCaXJpbmNpIGfDtm5kZXJpIGlsZXRpc2kgYnU6IgorCisjOiBzZXF1ZW5jZXIuYzoxNjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIgorbXNnc3RyICIlcyBnw7ZuZGVyaSBpbGV0aXNpIG9rdW5hbWFkxLEiCisKKyM6IHNlcXVlbmNlci5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyVkOiIKK21zZ3N0ciAiR8O2bmRlcmkgaWxldGlzaSAjJWQgYnU6IgorCisjOiBzZXF1ZW5jZXIuYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJWQgd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiR8O2bmRlcmkgaWxldGlzaSAjJWQgYXRsYW5hY2FrOiIKKworIzogc2VxdWVuY2VyLmM6MTc1NgorbXNnaWQgInlvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgImluZGVrcyBkb3N5YW7EsXogYmlybGXFn3RpcmlsbWVtacWfIgorCisjOiBzZXF1ZW5jZXIuYzoxNzYzCittc2dpZCAiY2Fubm90IGZpeHVwIHJvb3QgY29tbWl0IgorbXNnc3RyICJrw7ZrIGfDtm5kZXJpIGTDvHplbHRpbGVtaXlvciIKKworIzogc2VxdWVuY2VyLmM6MTc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgIiVzIGfDtm5kZXJpc2kgYmlyIGJpcmxlxZ90aXJtZSwgYW5jYWsgYmlyIC1tIHNlw6dlbmXEn2kgdmVyaWxtZWRpLiIKKworIzogc2VxdWVuY2VyLmM6MTc5MCBzZXF1ZW5jZXIuYzoxNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAiJXMgZ8O2bmRlcmlzaW5pbiAlZCBkaXllIGJpciDDvHN0IMO2Z2VzaSB5b2siCisKKyM6IHNlcXVlbmNlci5jOjE4MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgIiVzIGfDtm5kZXJpIGlsZXRpc2kgYWzEsW5hbcSxeW9yIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgYSAidG9kbyIgY29tbWFuZCBsaWtlCisjLiAicmV2ZXJ0IiBvciAicGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExLgorIzogc2VxdWVuY2VyLmM6MTgyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVzOiDDvHN0IGfDtm5kZXJpICVzIGF5csSxxZ90xLFyxLFsYW3EsXlvciIKKworIzogc2VxdWVuY2VyLmM6MTg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lICclcycgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJywgJyVzJyBvbGFyYWsgeWVuaWRlbiBhZGxhbmTEsXLEsWxhbWFkxLEiCisKKyM6IHNlcXVlbmNlci5jOjE5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAiJXMgZ2VyaSBhbMSxbmFtYWTEsS4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6MTk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgIiVzIHV5Z3VsYW5hbWFkxLEuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHJvcHBpbmcgJXMgJXMgLS0gcGF0Y2ggY29udGVudHMgYWxyZWFkeSB1cHN0cmVhbVxuIgorbXNnc3RyICIlcyAlcyBixLFyYWvEsWzEsXlvciAtLSB5YW1hIGnDp2VyacSfaSBoYWxpaGF6xLFyZGEgw7xzdGtheW5ha3RhXG4iCisKKyM6IHNlcXVlbmNlci5jOjIwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczogaW5kZWtzIG9rdW5hbWFkxLEiCisKKyM6IHNlcXVlbmNlci5jOjIwMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczogaW5kZWtzIHllbmlsZW5lbWVkaSIKKworIzogc2VxdWVuY2VyLmM6MjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBhY2NlcHQgYXJndW1lbnRzOiAnJXMnIgorbXNnc3RyICIlcyBkZcSfacWfa2VuIGthYnVsIGV0bWl5b3I6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjIxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhcmd1bWVudHMgZm9yICVzIgorbXNnc3RyICIlcyBpw6dpbiBla3NpayBkZcSfacWfa2VuIgorCisjOiBzZXF1ZW5jZXIuYzoyMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJXMnIgorbXNnc3RyICInJXMnIGF5csSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiBzZXF1ZW5jZXIuYzoyMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiZ2XDp2Vyc2l6IHNhdMSxciAlZDogJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJyVzJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICLDtm5jZXNpbmRlIGJpciBnw7ZuZGVyaSBvbG1hZGFuICclcycgeWFwxLFsYW3EsXlvciIKKworIzogc2VxdWVuY2VyLmM6MjI5OAorbXNnaWQgImNhbmNlbGxpbmcgYSBjaGVycnkgcGlja2luZyBpbiBwcm9ncmVzcyIKK21zZ3N0ciAic8O8cm1la3RlIG9sYW4gYmlyIHNlw6ctYWwgaXB0YWwgZWRpbGl5b3IiCisKKyM6IHNlcXVlbmNlci5jOjIzMDUKK21zZ2lkICJjYW5jZWxsaW5nIGEgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJzw7xybWVrdGUgb2xhbiBiaXIgZ2VyaSBhbCBpcHRhbCBlZGlsaXlvciIKKworIzogc2VxdWVuY2VyLmM6MjM0OQorbXNnaWQgInBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICJsw7x0ZmVuIGJ1bnUgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGt1bGxhbmFyYWsgb25hcsSxbi4iCisKKyM6IHNlcXVlbmNlci5jOjIzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICclcyciCittc2dzdHIgImt1bGxhbsSxbGFiaWxpciBvbG1heWFuIHnDtm5lcmdlIHRhYmxvc3U6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjIzNTYKK21zZ2lkICJubyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgIkhpw6diaXIgZ8O2bmRlcmkgYXlyxLHFn3TEsXLEsWxtYWTEsS4iCisKKyM6IHNlcXVlbmNlci5jOjIzNjcKK21zZ2lkICJjYW5ub3QgY2hlcnJ5LXBpY2sgZHVyaW5nIGEgcmV2ZXJ0LiIKK21zZ3N0ciAiYmlyIGdlcmkgYWwgc8SxcmFzxLFuZGEgc2XDpy1hbCB5YXDEsWxhbcSxeW9yIgorCisjOiBzZXF1ZW5jZXIuYzoyMzY5Cittc2dpZCAiY2Fubm90IHJldmVydCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgImJpciBzZcOnLWFsIHPEsXJhc8SxbmRhIGdlcmkgYWwgeWFwxLFsYW3EsXlvciIKKworIzogc2VxdWVuY2VyLmM6MjQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiVzIGnDp2luIGdlw6dlcnNpeiBkZcSfZXI6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyNTQwCittc2dpZCAidW51c2FibGUgc3F1YXNoLW9udG8iCittc2dzdHIgImt1bGxhbsSxbGFiaWxpciBvbG1heWFuIHNxdWFzaC1vbnRvIgorCisjOiBzZXF1ZW5jZXIuYzoyNTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAnJXMnIgorbXNnc3RyICJoYXRhbMSxIG9sdcWfdHVydWxtdcWfIHNlw6dlbmVrbGVyIHRhYmxvc3U6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI2NDQgc2VxdWVuY2VyLmM6NDM2MQorbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICJib8WfIGfDtm5kZXJpIHNldGkgYWt0YXLEsWxkxLEiCisKKyM6IHNlcXVlbmNlci5jOjI2NjAKK21zZ2lkICJyZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiZ2VyaSBhbCBoYWxpaGF6xLFyZGEgc8O8csO8eW9yIgorCisjOiBzZXF1ZW5jZXIuYzoyNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgIlwiZ2l0IHJldmVydCAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiBkZW5leWluIgorCisjOiBzZXF1ZW5jZXIuYzoyNjY1Cittc2dpZCAiY2hlcnJ5LXBpY2sgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAic2XDpy1hbCBoYWxpaGF6xLFyZGEgc8O8csO8eW9yIgorCisjOiBzZXF1ZW5jZXIuYzoyNjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAiXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIgZGVuZXlpbiIKKworIzogc2VxdWVuY2VyLmM6MjY4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiYXJkxLHFn3TEsXLEsWPEsSBkaXppbmkgJyVzJyBvbHXFn3R1cnVsYW1hZMSxIgorCisjOiBzZXF1ZW5jZXIuYzoyNjk2Cittc2dpZCAiY291bGQgbm90IGxvY2sgSEVBRCIKK21zZ3N0ciAiSEVBRCBraWxpdGxlbmVtZWRpIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU2IHNlcXVlbmNlci5jOjQwOTkKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgInPDvHJlbiBiaXIgc2XDpy1hbCB2ZXlhIGdlcmkgYWwgeW9rIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU4IHNlcXVlbmNlci5jOjI3NjkKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJIRUFEIMOnw7Z6w7xsZW1peW9yIgorCisjOiBzZXF1ZW5jZXIuYzoyNzYwIHNlcXVlbmNlci5jOjI4MDQKK21zZ2lkICJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiZGFoYSBkb8SfbWFtxLHFnyBiaXIgZGFsZGFuIGlwdGFsIGVkaWxlbWl5b3IiCisKKyM6IHNlcXVlbmNlci5jOjI3OTAgYnVpbHRpbi9ncmVwLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgIiclcycgYcOnxLFsYW3EsXlvciIKKworIzogc2VxdWVuY2VyLmM6Mjc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnOiAlcyIKK21zZ3N0ciAiJyVzJyBva3VuYW3EsXlvcjogJXMiCisKKyM6IHNlcXVlbmNlci5jOjI3OTMKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICJiZWtsZW5tZWRpayBkb3N5YSBzb251IgorCisjOiBzZXF1ZW5jZXIuYzoyNzk5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAiZGVwb2xhbm3EscWfIHNlw6ctYWwgw7ZuY2VzaSBIRUFEIGRvc3lhc8SxICclcycgaGFzYXIgZ8O2cm3DvMWfIgorCisjOiBzZXF1ZW5jZXIuYzoyODEwCittc2dpZCAiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFELiBOb3QgcmV3aW5kaW5nLCBjaGVjayB5b3VyIEhFQUQhIgorbXNnc3RyICJIRUFEJ2kgdGHFn8SxbcSxxZ8gZ8O2csO8bsO8eW9yc3VudXouIEdlcmkgc2FyxLFsbcSxeW9yLCBIRUFEJ2luaXppIGRlbmV0bGV5aW4hIgorCisjOiBzZXF1ZW5jZXIuYzoyODUxCittc2dpZCAibm8gcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJzw7xyZW4gYmlyIGdlcmkgYWwgeW9rIgorCisjOiBzZXF1ZW5jZXIuYzoyODU5Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgaW4gcHJvZ3Jlc3MiCittc2dzdHIgInPDvHJlbiBiaXIgc2XDpy1hbCB5b2siCisKKyM6IHNlcXVlbmNlci5jOjI4NjkKK21zZ2lkICJmYWlsZWQgdG8gc2tpcCB0aGUgY29tbWl0IgorbXNnc3RyICJnw7ZuZGVyaSBhdGxhbmFtYWTEsSIKKworIzogc2VxdWVuY2VyLmM6Mjg3NgorbXNnaWQgInRoZXJlIGlzIG5vdGhpbmcgdG8gc2tpcCIKK21zZ3N0ciAiYXRsYW5hY2FrIGJpciDFn2V5IHlvayIKKworIzogc2VxdWVuY2VyLmM6Mjg3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaGF2ZSB5b3UgY29tbWl0dGVkIGFscmVhZHk/XG4iCisidHJ5IFwiZ2l0ICVzIC0tY29udGludWVcIiIKK21zZ3N0ciAiIgorIkfDtm5kZXJpeWkgeWFwdMSxbsSxeiBtxLE/XG4iCisiXCJnaXQgJXMgLS1jb250aW51ZVwiIGRlbmV5aW4uXCIiCisKKyM6IHNlcXVlbmNlci5jOjMwMDMgc2VxdWVuY2VyLmM6NDAxMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlICVzIgorbXNnc3RyICIlcyBnw7xuY2VsbGVuZW1lZGkiCisKKyM6IHNlcXVlbmNlci5jOjMwNDIgc2VxdWVuY2VyLmM6Mzk5MQorbXNnaWQgImNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIkhFQUQgb2t1bmFtxLF5b3IiCisKKyM6IHNlcXVlbmNlci5jOjMwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICInJXMnLCAnJXMnIGtvbnVtdW5hIGtvcHlhbGFuYW3EsXlvciIKKworIzogc2VxdWVuY2VyLmM6MzA2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIkfDtm5kZXJpeWkgxZ9pbWRpIMWfdSBrb211dGxhIGRlxJ9pxZ90aXJlYmlsaXJzaW5pejpcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIkRlxJ9pxZ9pa2xpa2xlcmluaXpkZW4gbWVtbnVuc2FuxLF6IMWfdSBrb211dGxhIHPDvHJkw7xyw7xuOlxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjMwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICVzLi4uICUuKnMiCittc2dzdHIgIiVzIHV5Z3VsYW5hbcSxeW9yLi4uICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjMwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1lcmdlICUuKnMiCittc2dzdHIgIiUuKnMgYmlybGXFn3RpcmlsZW1lZGkiCisKKyM6IHNlcXVlbmNlci5jOjMwOTggc2VxdWVuY2VyLmM6MzEwMiBidWlsdGluL2RpZmZ0b29sLmM6NjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJywgJyVzJyBrb251bXVuYSBrb3B5YWxhbmFtYWTEsSIKKworIzogc2VxdWVuY2VyLmM6MzEyOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIGZhaWxlZDogJXNcbiIKKyIlc1lvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiw4dhbMSxxZ90xLFybWEgYmHFn2FyxLFzxLF6OiAlc1xuIgorIiVzU29ydW51IMOnw7Z6w7xwIHPDvHJkw7xybWVrIGnDp2luIMWfdW51IMOnYWzEscWfdMSxcsSxbjpcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMTM1Cittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKK21zZ3N0ciAidmUgaW5kZWtzZSB2ZS92ZXlhIMOnYWzEscWfbWEgYcSfYWPEsW5hIGRlxJ9pxZ9pa2xpa2xlciB5YXDEsWxkxLFcbiIKKworIzogc2VxdWVuY2VyLmM6MzE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIHN1Y2NlZWRlZDogJXNcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyLDh2FsxLHFn3TEsXJtYSBiYcWfYXLEsWzEsSBvbGR1OiAlcyxcbiIKKyJhbmNhayBpbmRla3Npbml6ZSB2ZS92ZXlhIMOnYWzEscWfbWEgYcSfYWPEsW7EsXphIGRlxJ9pxZ9pa2xpa2xlciBixLFyYWt0xLFcbiIKKyJEZcSfacWfaWtsaWtsZXJpbml6aSBnw7ZuZGVyaW4gdmV5YSB6dWxhbGF5xLFuLCBhcmTEsW5kYW4gxZ91bnUgw6dhbMSxxZ90xLFyxLFuOlxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBsYWJlbCBuYW1lOiAnJS4qcyciCittc2dzdHIgIml6aW4gdmVyaWxtZXllbiBldGlrZXQgYWTEsTogJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozMjU2Cittc2dpZCAid3JpdGluZyBmYWtlIHJvb3QgY29tbWl0IgorbXNnc3RyICJzYWh0ZSBrw7ZrIGfDtm5kZXJpIHlhesSxbMSxeW9yIgorCisjOiBzZXF1ZW5jZXIuYzozMjYxCittc2dpZCAid3JpdGluZyBzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLW9udG8geWF6xLFsxLF5b3IiCisKKyM6IHNlcXVlbmNlci5jOjMyOTkgYnVpbHRpbi9yZWJhc2UuYzo4ODAgYnVpbHRpbi9yZWJhc2UuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcyIKK21zZ3N0ciAixZ91bnVuIGHEn2FjxLEgYnVsdW5hbWFkxLE6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzozMzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgIiclcycgw6fDtnrDvGxlbWVkaSIKKworIzogc2VxdWVuY2VyLmM6MzM3NQorbXNnaWQgImNhbm5vdCBtZXJnZSB3aXRob3V0IGEgY3VycmVudCByZXZpc2lvbiIKK21zZ3N0ciAiZ8O8bmNlbCBiaXIgcmV2aXp5b24gb2xtYWRhbiBiaXJsZcWfdGlyaWxlbWl5b3IiCisKKyM6IHNlcXVlbmNlci5jOjMzOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclLipzJyIKK21zZ3N0ciAiJyUuKnMnIGF5csSxxZ90xLFyxLFsYW3EsXlvciIKKworIzogc2VxdWVuY2VyLmM6MzQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIG1lcmdlOiAnJS4qcyciCittc2dzdHIgImJpcmxlxZ90aXJpbGVjZWsgYmlyIMWfZXkgeW9rOiAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjM0MTgKK21zZ2lkICJvY3RvcHVzIG1lcmdlIGNhbm5vdCBiZSBleGVjdXRlZCBvbiB0b3Agb2YgYSBbbmV3IHJvb3RdIgorbXNnc3RyICJhaHRhcG90IGJpcmxlxZ90aXJtZXNpIGJpciBbeWVuaSBrw7ZrXcO8biDDvHplcmluZGUgw6dhbMSxxZ90xLFyxLFsYW1heiIKKworIzogc2VxdWVuY2VyLmM6MzQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIG9mICclcyciCittc2dzdHIgIiclcycgZ8O2bmRlcmlzaW5pbiBnw7ZuZGVyaSBpbGV0aXNpIGFsxLFuYW1hZMSxIgorCisjOiBzZXF1ZW5jZXIuYzozNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBldmVuIGF0dGVtcHQgdG8gbWVyZ2UgJyUuKnMnIgorbXNnc3RyICLFn3VudSBiaXJsZcWfdGlybWUgZ2lyacWfaW1pbmRlIGJ1bHVudWxhbWFkxLEgYmlsZTogJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozNjEwCittc2dpZCAibWVyZ2U6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAibWVyZ2U6IFllbmkgaW5kZWtzIGRvc3lhc8SxIHlhesSxbGFtxLF5b3IiCisKKyM6IHNlcXVlbmNlci5jOjM2NzkgYnVpbHRpbi9yZWJhc2UuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guXG4iCittc2dzdHIgIktlbmRpbGnEn2luZGVuIHp1bGFsYW1hIHV5Z3VsYW5kxLEuXG4iCisKKyM6IHNlcXVlbmNlci5jOjM2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0b3JlICVzIgorbXNnc3RyICIlcyBkZXBvbGFuYW3EsXlvciIKKworIzogc2VxdWVuY2VyLmM6MzY5NCBidWlsdGluL3JlYmFzZS5jOjc1MyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLlxuIgorIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IgXCJnaXQgc3Rhc2ggZHJvcFwiIGF0IGFueSB0aW1lLlxuIgorbXNnc3RyICIiCisiS2VuZGlsacSfaW5kZW4genVsYWxhbWEgdXlndWxhbWFzxLEgw6dha8SxxZ9tYWxhcmEgbmVkZW4gb2xkdS5cbiIKKyJEZcSfacWfaWtsaWtsZXJpbml6IHp1bGEgacOnZXJpc2luZGUgZ8O8dmVuZGUuXG4iCisixLBzdGVkacSfaW5peiB6YW1hbiBcImdpdCBzdGFzaCBwb3BcIiB2ZXlhIFwiZ2l0IHN0YXNoIGRyb3BcIiB5YXBhYmlsaXJzaW5pei5cbiIKKworIzogc2VxdWVuY2VyLmM6Mzc1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm90IGEgdmFsaWQgT0lEIgorbXNnc3RyICIlczogZ2XDp2VybGkgYmlyIE9JRCBkZcSfaWwiCisKKyM6IHNlcXVlbmNlci5jOjM3NjAgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc3OQorbXNnaWQgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAiSEVBRCBheXLEsWxhbWFkxLEiCisKKyM6IHNlcXVlbmNlci5jOjM3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCBIRUFEXG4iCittc2dzdHIgIkhFQUQnZGUgZHVydWxkdVxuIgorCisjOiBzZXF1ZW5jZXIuYzozNzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXNcbiIKK21zZ3N0ciAiJXMga29udW11bmRhIGR1cnVsZHVcbiIKKworIzogc2VxdWVuY2VyLmM6Mzc4NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGV4ZWN1dGUgdGhlIHRvZG8gY29tbWFuZFxuIgorIlxuIgorIiAgICAlLipzXG4iCisiSXQgaGFzIGJlZW4gcmVzY2hlZHVsZWQ7IFRvIGVkaXQgdGhlIGNvbW1hbmQgYmVmb3JlIGNvbnRpbnVpbmcsIHBsZWFzZVxuIgorImVkaXQgdGhlIHRvZG8gbGlzdCBmaXJzdDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorInRvZG8ga29tdXR1IMOnYWzEscWfdMSxcsSxbGFtYWTEsS5cbiIKKyJcbiIKKyJcdCUuKnNcbiIKKyJZZW5pZGVuIHphbWFubGFuZMSxOyBzw7xyZMO8cm1lZGVuIMO2bmNlIGtvbXV0dSBkw7x6ZW5sZW1layBpw6dpbiBsw7x0ZmVuXG4iCisiw7ZuY2UgeWFwxLFsYWNha2xhciBsaXN0ZXNpbmkgZMO8emVubGV5aW46XG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tZWRpdC10b2RvXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6Mzg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzLi4uICAlLipzXG4iCittc2dzdHIgIiVzIGtvbnVtdW5kYSBkdXJ1bGR1Li4uICUuKnNcbiIKKworIzogc2VxdWVuY2VyLmM6Mzk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQgJWQiCittc2dzdHIgImJpbGlubWV5ZW4ga29tdXQgJWQiCisKKyM6IHNlcXVlbmNlci5jOjM5OTkKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvcmlnLWhlYWQiCittc2dzdHIgIm9yaWctaGVhZCBva3VuYW1hZMSxIgorCisjOiBzZXF1ZW5jZXIuYzo0MDA0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ29udG8nIgorbXNnc3RyICInb250bycgb2t1bmFtYWTEsSIKKworIzogc2VxdWVuY2VyLmM6NDAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlIEhFQUQgdG8gJXMiCittc2dzdHIgIkhFQUQgxZ91cmF5YSBnw7xuY2VsbGVuZW1lZGk6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo0MTExCittc2dpZCAiY2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIlllbmlkZW4gdGVtZWxsZW5kaXJpbGVtaXlvcjogSGF6xLFybGFubWFtxLHFnyBkZcSfacWfaWtsaWtsZXJpbml6IHZhci4iCisKKyM6IHNlcXVlbmNlci5jOjQxMjAKK21zZ2lkICJjYW5ub3QgYW1lbmQgbm9uLWV4aXN0aW5nIGNvbW1pdCIKK21zZ3N0ciAidmFyIG9sbWF5YW4gZ8O2bmRlcmkgZGXEn2nFn3RpcmlsZW1peW9yIgorCisjOiBzZXF1ZW5jZXIuYzo0MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsZTogJyVzJyIKK21zZ3N0ciAiZ2XDp2Vyc2l6IGRvc3lhOiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29udGVudHM6ICclcyciCittc2dzdHIgImdlw6dlcnNpeiBpw6dlcmlrOiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTI3Cittc2dpZCAiIgorIlxuIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSwgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisiXG4iCisiw4dhbMSxxZ9tYSBhxJ9hY8SxbsSxemRhIGfDtm5kZXJpbG1lbWnFnyBkZcSfacWfaWtsaWtsZXJpbml6IHZhci4gTMO8dGZlbiDDtm5jZVxuIgorIm9ubGFyxLEgZ8O2bmRlcmluIHZlIGFyZMSxbmRhbiAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyB5YXDEsW4uIgorCisjOiBzZXF1ZW5jZXIuYzo0MTYzIHNlcXVlbmNlci5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGZpbGU6ICclcyciCittc2dzdHIgImRvc3lhIHlhesSxbGFtYWTEsTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDIxNworbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiQ0hFUlJZX1BJQ0tfSEVBRCBrYWxkxLFyxLFsYW1hZMSxIgorCisjOiBzZXF1ZW5jZXIuYzo0MjI0Cittc2dpZCAiY291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIkhhesSxcmxhbm3EscWfIGRlxJ9pxZ9pa2xpa2xlciBnw7ZuZGVyaWxlbWVkaS4iCisKKyM6IHNlcXVlbmNlci5jOjQzMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbid0IGNoZXJyeS1waWNrIGEgJXMiCittc2dzdHIgIiVzOiBCaXIgJXMgc2XDp2lwIGFsxLFuYW3EsXlvciIKKworIzogc2VxdWVuY2VyLmM6NDM0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlcyBoYXRhbMSxIHJldml6eW9uIgorCisjOiBzZXF1ZW5jZXIuYzo0Mzc3Cittc2dpZCAiY2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICJpbGsgZ8O2bmRlcmkgZ2VyaSBhbMSxbmFtYXoiCisKKyM6IHNlcXVlbmNlci5jOjQ4NDYKK21zZ2lkICJtYWtlX3NjcmlwdDogdW5oYW5kbGVkIG9wdGlvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB0OiBlbGUgYWzEsW5tYXlhbiBzZcOnZW5la2xlciIKKworIzogc2VxdWVuY2VyLmM6NDg0OQorbXNnaWQgIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJpbmcgcmV2aXNpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDogcmV2aXp5b25sYXIgaGF6xLFybGFuxLFya2VuIGhhdGEiCisKKyM6IHNlcXVlbmNlci5jOjUwODMgc2VxdWVuY2VyLmM6NTEwMAorbXNnaWQgIm5vdGhpbmcgdG8gZG8iCittc2dzdHIgInlhcMSxbGFjYWsgYmlyIMWfZXkgeW9rIgorCisjOiBzZXF1ZW5jZXIuYzo1MTE5Cittc2dpZCAiY291bGQgbm90IHNraXAgdW5uZWNlc3NhcnkgcGljayBjb21tYW5kcyIKK21zZ3N0ciAiZ2VyZWtsaSBvbG1heWFuIHNlw6dpbSBrb211dGxhcsSxIGF0bGFuYW1hZMSxIgorCisjOiBzZXF1ZW5jZXIuYzo1MjEzCittc2dpZCAidGhlIHNjcmlwdCB3YXMgYWxyZWFkeSByZWFycmFuZ2VkLiIKK21zZ3N0ciAiYmV0aWsgaGFsaWhhesSxcmRhIHllbmlkZW4gZMO8emVubGVubWnFn3RpIgorCisjOiBzZXR1cC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSBhdCAnJXMnIgorbXNnc3RyICInJXMnLCAnJXMnIGtvbnVtdW5kYSBkZXBvIGTEscWfxLFuZGEiCisKKyM6IHNldHVwLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogbm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICdnaXQgPGNvbW1hbmQ+IC0tIDxwYXRoPi4uLicgdG8gc3BlY2lmeSBwYXRocyB0aGF0IGRvIG5vdCBleGlzdCBsb2NhbGx5LiIKK21zZ3N0ciAiIgorIiVzOiDDh2FsxLHFn21hIGHEn2FjxLFuZGEgYsO2eWxlIGJpciB5b2wgeW9rLlxuIgorIlllcmVsZGUgdmFyIG9sbWF5YW4geW9sbGFyxLEgYmVsaXJ0bWVrIGnDp2luICdnaXQgPGtvbXV0PiAtLSA8eW9sPi4uLiBrdWxsYW7EsW4uIgorCisjOiBzZXR1cC5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyJCZWxpcnNpeiBkZcSfacWfa2VuICclcyc6IMOHYWzEscWfbWEgYcSfYWPEsW5kYSBvbG1heWFuIGJpbGlubWV5ZW4gcmV2aXp5b24gdmV5YSAiCisieW9sLlxuIgorIllvbGxhcsSxIHJldml6eW9ubGFyZGFuIGF5xLFybWFrIGnDp2luICctLScga3VsbGFuxLFuLCDFn8O2eWxlOlxuIgorIidnaXQgPGtvbXV0PiBbPHJldml6eW9uPi4uLl0gLS0gWzxkb3N5YT4uLi5dJyIKKworIzogc2V0dXAuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICclcycgbXVzdCBjb21lIGJlZm9yZSBub24tb3B0aW9uIGFyZ3VtZW50cyIKK21zZ3N0ciAiJyVzJyBzZcOnZW5lxJ9pIHNlw6dlbmVrIG9sbWF5YW4gZGXEn2nFn2tlbmxlcmRlbiDDtm5jZSBnZWxtZWxpIgorCisjOiBzZXR1cC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisiQmVsaXJzaXogZGXEn2nFn2tlbiAnJXMnOiBIZW0gZGXEn2nFn2tlbiBoZW0gZG9zeWEgYWTEsS5cbiIKKyJZb2xsYXLEsSByZXZpenlvbmxhcmRhbiBhecSxcm1hayBpw6dpbiAnLS0nIGt1bGxhbsSxbiwgxZ/DtnlsZTpcbiIKKyInZ2l0IDxrb211dD4gWzxyZXZpenlvbj4uLi5dIC0tIFs8ZG9zeWE+Li4uXSciCisKKyM6IHNldHVwLmM6NDA5Cittc2dpZCAidW5hYmxlIHRvIHNldCB1cCB3b3JrIHRyZWUgdXNpbmcgaW52YWxpZCBjb25maWciCittc2dzdHIgImdlw6dlcnNpeiB5YXDEsWxhbmTEsXJtYSBrdWxsYW7EsWxhcmFrIMOnYWzEscWfbWEgYcSfYWPEsSBrdXJ1bGFtxLF5b3IiCisKKyM6IHNldHVwLmM6NDEzCittc2dpZCAidGhpcyBvcGVyYXRpb24gbXVzdCBiZSBydW4gaW4gYSB3b3JrIHRyZWUiCittc2dzdHIgImJ1IGnFn2xlbSBiaXIgw6dhbMSxxZ9tYSBhxJ9hY8SxIGnDp2luZGUgw6dhbMSxxZ90xLFyxLFsbWFsxLEiCisKKyM6IHNldHVwLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIgorbXNnc3RyICJCZWtsZW5lbiBnaXQgcmVwbyBzw7xyw7xtw7wgPD0gJWQsICVkIGJ1bHVuZHUiCisKKyM6IHNldHVwLmM6NTY3Cittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICJiaWxpbm1leWVuIGRlcG8gZ2VuacWfbGV0bWVsZXJpIGJ1bHVuZHU6IgorCisjOiBzZXR1cC5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBvcGVuaW5nICclcyciCittc2dzdHIgIiclcycgYcOnxLFsxLFya2VuIGhhdGEiCisKKyM6IHNldHVwLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBsYXJnZSB0byBiZSBhIC5naXQgZmlsZTogJyVzJyIKK21zZ3N0ciAiYmlyIC5naXQgZG9zeWFzxLEgb2xhYmlsbWVrIGnDp2luIMOnb2sgYsO8ecO8azogJyVzJyIKKworIzogc2V0dXAuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyAlcyIKK21zZ3N0ciAiJXMgb2t1bnVya2VuIGhhdGEiCisKKyM6IHNldHVwLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZ2l0ZmlsZSBmb3JtYXQ6ICVzIgorbXNnc3RyICJnZcOnZXJzaXogZ2l0ZmlsZSBiacOnaW1pOiAlcyIKKworIzogc2V0dXAuYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcGF0aCBpbiBnaXRmaWxlOiAlcyIKK21zZ3N0ciAiZ2l0ZmlsZSBpw6dpbmRlIHlvbCB5b2s6ICVzIgorCisjOiBzZXR1cC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgImJpciBnaXQgZGVwb3N1IGRlxJ9pbDogJXMiCisKKyM6IHNldHVwLmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgIickJXMnIHRvbyBiaWciCittc2dzdHIgIickJXMnIMOnb2sgYsO8ecO8ayIKKworIzogc2V0dXAuYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciCittc2dzdHIgImJpciBnaXQgZGVwb3N1IGRlxJ9pbDogJyVzJyIKKworIzogc2V0dXAuYzo3Mzggc2V0dXAuYzo3NDAgc2V0dXAuYzo3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICclcyciCittc2dzdHIgIiclcycga29udW11bmEgY2hkaXIgeWFwxLFsYW3EsXlvciIKKworIzogc2V0dXAuYzo3NDMgc2V0dXAuYzo3OTkgc2V0dXAuYzo4MDkgc2V0dXAuYzo4NDggc2V0dXAuYzo4NTYKK21zZ2lkICJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAiY3dkJ3llIGdlcmkgZMO2bsO8bGVtaXlvciIKKworIzogc2V0dXAuYzo4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyUqcyVzJXMnIgorbXNnc3RyICInJSpzJXMlcycgYmlsZ2lsZXJpIGFsxLFuYW1hZMSxIgorCisjOiBzZXR1cC5jOjExMDgKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLFnnUgYW5raSDDp2FsxLHFn21hIGRpemluaSBva3VuYW3EsXlvciIKKworIzogc2V0dXAuYzoxMTE3IHNldHVwLmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hhbmdlIHRvICclcyciCittc2dzdHIgIsWfdXJheWEgZGXEn2nFn3RpcmlsZW1peW9yOiAnJXMnIgorCisjOiBzZXR1cC5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzKTogJXMiCittc2dzdHIgImJpciBnaXQgZGVwb3N1ICh2ZXlhIMO8c3QgZGl6aW5sZXJpbmRlbiBiaXJpc2kpIGRlxJ9pbDogJXMiCisKKyM6IHNldHVwLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisiU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS4iCittc2dzdHIgIiIKKyJCaXIgZ2l0IGRlcG9zdSB2ZXlhICglcyBiYcSfbGFtYSBub2t0YXPEsW5hIGthZGFyIG9sYW4gw7xzdMO8KSBkZcSfaWxcbiIKKyJEb3N5YSBzaXN0ZW1pIHPEsW7EsXLEsW5kYSBkdXJ1bHV5b3IgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gIgorImF5YXJsYW5tYW3EscWfKS4iCisKKyM6IHNldHVwLmM6MTI0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicHJvYmxlbSB3aXRoIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBmaWxlbW9kZSB2YWx1ZSAoMCUuM28pLlxuIgorIlRoZSBvd25lciBvZiBmaWxlcyBtdXN0IGFsd2F5cyBoYXZlIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorImNvcmUuc2hhcmVkUmVwb3NpdG9yeSBkb3N5YSBraXBpIGRlxJ9lcmkgaWxlIHNvcnVuICgwJS4zbykuXG4iCisiRG9zeWFsYXLEsW4gc2FoaWJpbmluIGhlciB6YW1hbiBva3VtYSB2ZSB5YXptYSBpem5pIG9sbWFzxLEgZ2VyZWtpci4iCisKKyM6IHNldHVwLmM6MTI4OQorbXNnaWQgIm9wZW4gL2Rldi9udWxsIG9yIGR1cCBmYWlsZWQiCittc2dzdHIgIi9kZXYvbnVsbCBhw6fEsWxtYXPEsSB2ZXlhIGHDp8Sxa2xhecSxY8SxIMOnb8SfYWx0xLFsbWFzxLEgYmHFn2FyxLFzxLF6IgorCisjOiBzZXR1cC5jOjEzMDQKK21zZ2lkICJmb3JrIGZhaWxlZCIKK21zZ3N0ciAiw6dhdGFsbGFtYSBiYcWfYXLEsXPEsXoiCisKKyM6IHNldHVwLmM6MTMwOQorbXNnaWQgInNldHNpZCBmYWlsZWQiCittc2dzdHIgInNldHNpZCBiYcWfYXLEsXPEsXoiCisKKyM6IHNoYTEtZmlsZS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0OyBjaGVjayAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorbXNnc3RyICJuZXNuZSBkaXppbmkgJXMgeW9rOyDFn3VyYXnEsSBkZW5ldGxleWluOiAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorCisjOiBzaGExLWZpbGUuYzo1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG5vcm1hbGl6ZSBhbHRlcm5hdGUgb2JqZWN0IHBhdGg6ICVzIgorbXNnc3RyICJhbHRlcm5hdGlmIG5lc25lIHlvbHUgb2xhxJ9hbmxhxZ90xLFyxLFsYW3EsXlvcjogJXMiCisKKyM6IHNoYTEtZmlsZS5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWdub3JpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIiVzOiBhbHRlcm5hdGlmIG5lc25lIGRlcG9sYXLEsSB5b2sgc2F5xLFsxLF5b3IsIGnDpyBpw6dlIGdlw6dtZSBwZWsgZGVyaW4iCisKKyM6IHNoYTEtZmlsZS5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIG9iamVjdCBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJuZXNuZSBkaXppbmkgb2xhxJ9hbmxhxZ90xLFyxLFsYW3EsXlvcjogJXMiCisKKyM6IHNoYTEtZmlsZS5jOjYyNQorbXNnaWQgInVuYWJsZSB0byBmZG9wZW4gYWx0ZXJuYXRlcyBsb2NrZmlsZSIKK21zZ3N0ciAiYWx0ZXJuYXRpZmxlciBraWxpdCBkb3N5YXPEsSBmZG9wZW4geWFwxLFsYW3EsXlvciIKKworIzogc2hhMS1maWxlLmM6NjQzCittc2dpZCAidW5hYmxlIHRvIHJlYWQgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICJhbHRlcm5hdGlmbGVyIGRvc3lhc8SxIG9rdW5hbcSxeW9yIgorCisjOiBzaGExLWZpbGUuYzo2NTAKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSBuZXcgYWx0ZXJuYXRlcyBmaWxlIGludG8gcGxhY2UiCittc2dzdHIgInllbmkgYWx0ZXJuYXRpZmxlciBkb3N5YXPEsSB5ZXJpbmUgdGHFn8SxbmFtxLF5b3IiCisKKyM6IHNoYTEtZmlsZS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiclcycgZGl5ZSBiaXIgeW9sIHlvayIKKworIzogc2hhMS1maWxlLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgYXMgYSBsaW5rZWQgY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIgorbXNnc3RyICIiCisiQmHEn2xhbnTEsSB5YXDEsWxtxLHFnyDDp8Sxa8SxxZ8gb2xhcmFrICclcycgYmHFn3Z1cnUgZGVwb3N1IGhlbsO8eiBkZXN0ZWtsZW5taXlvci4iCisKKyM6IHNoYTEtZmlsZS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJCYcWfdnVydSBkZXBvc3UgJyVzJyB5ZXJlbCBiaXIgZGVwbyBkZcSfaWwuIgorCisjOiBzaGExLWZpbGUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBzaGFsbG93IgorbXNnc3RyICJiYcWfdnVydSBkZXBvc3UgJyVzJyBzxLHEnyIKKworIzogc2hhMS1maWxlLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgZ3JhZnRlZCIKK21zZ3N0ciAiYmHFn3Z1cnUgZGVwb3N1ICclcycgYcWfxLFsxLEiCisKKyM6IHNoYTEtZmlsZS5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgd2hpbGUgcGFyc2luZyBhbHRlcm5hdGUgcmVmczogJXMiCittc2dzdHIgImFsdGVybmF0aWYgYmHFn3Z1cnVsYXIgYXlyxLHFn3TEsXLEsWzEsXJrZW4gZ2XDp2Vyc2l6IHNhdMSxcjogJXMiCisKKyM6IHNoYTEtZmlsZS5jOjk0MworIywgYy1mb3JtYXQKK21zZ2lkICJhdHRlbXB0aW5nIHRvIG1tYXAgJTxQUkl1TUFYPiBvdmVyIGxpbWl0ICU8UFJJdU1BWD4iCittc2dzdHIgIiU8UFJJdU1BWD4sICU8UFJJdU1BWD4gc8SxbsSxcsSxIMO8emVyaW5kZW4gbW1hcCB5YXDEsWxtYXlhIMOnYWzEscWfxLFsxLF5b3IiCisKKyM6IHNoYTEtZmlsZS5jOjk2NAorbXNnaWQgIm1tYXAgZmFpbGVkIgorbXNnc3RyICJtbWFwIGJhxZ9hcsSxc8SxeiIKKworIzogc2hhMS1maWxlLmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZmlsZSAlcyBpcyBlbXB0eSIKK21zZ3N0ciAibmVzbmUgZG9zeWFzxLEgJXMgYm/FnyIKKworIzogc2hhMS1maWxlLmM6MTI2MyBzaGExLWZpbGUuYzoyNDQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgbG9vc2Ugb2JqZWN0ICclcyciCittc2dzdHIgImhhc2FyIGfDtnJtw7zFnyBnZXbFn2VrIG5lc25lICclcyciCisKKyM6IHNoYTEtZmlsZS5jOjEyNjUgc2hhMS1maWxlLmM6MjQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJnYXJiYWdlIGF0IGVuZCBvZiBsb29zZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiZ2V2xZ9layBuZXNuZSAnJXMnIHNvbnVuZGEgYW5sYW1zxLF6IHZlcmkiCisKKyM6IHNoYTEtZmlsZS5jOjEzMDcKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIgorbXNnc3RyICJnZcOnZXJzaXogbmVzbmUgdMO8csO8IgorCisjOiBzaGExLWZpbGUuYzoxMzkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgIiVzIMO8c3RiaWxnaXNpIC0tYWxsb3ctdW5rbm93bi10eXBlIGlsZSBhw6fEsWxhbcSxeW9yIgorCisjOiBzaGExLWZpbGUuYzoxMzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIgorbXNnc3RyICIlcyDDvHN0YmlsZ2lzaSBhw6fEsWxhbcSxeW9yIgorCisjOiBzaGExLWZpbGUuYzoxNDAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAiJXMgw7xzdGJpbGdpc2kgcGFrZXRpIC0tYWxsb3ctdW5rbm93bi10eXBlIGlsZSBheXLEscWfdMSxcsSxbGFtxLF5b3IiCisKKyM6IHNoYTEtZmlsZS5jOjE0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciIKK21zZ3N0ciAiJXMgw7xzdGJpbGdpc2kgYXlyxLHFn3TEsXLEsWxhbcSxeW9yIgorCisjOiBzaGExLWZpbGUuYzoxNjI5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiJXMgbmVzbmVzaSBva3VuYW1hZMSxIgorCisjOiBzaGExLWZpbGUuYzoxNjMzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2VtZW50ICVzIG5vdCBmb3VuZCBmb3IgJXMiCittc2dzdHIgIiVzIHllZGXEn2kgJXMgacOnaW4gYnVsdW5hbWFkxLEiCisKKyM6IHNoYTEtZmlsZS5jOjE2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgIiVzIGdldsWfZWsgbmVzbmVzaSAoJXMgacOnaW5kZSBkZXBvbGFuxLF5b3IpIGhhc2FyIGfDtnJtw7zFnyIKKworIzogc2hhMS1maWxlLmM6MTY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZWQgb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgInBha2V0bGVubWnFnyBuZXNuZSAlcyAoJXMgacOnaW5kZSBkZXBvbGFuxLF5b3IpIGhhc2FyIGfDtnJtw7zFnyIKKworIzogc2hhMS1maWxlLmM6MTc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIKK21zZ3N0ciAiJXMgZG9zeWFzxLEgeWF6xLFsYW3EsXlvciIKKworIzogc2hhMS1maWxlLmM6MTc1MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHBlcm1pc3Npb24gdG8gJyVzJyIKK21zZ3N0ciAiJyVzJyDDtmdlc2luZSBpemluIGF5YXJsYW5hbcSxeW9yIgorCisjOiBzaGExLWZpbGUuYzoxNzYwCittc2dpZCAiZmlsZSB3cml0ZSBlcnJvciIKK21zZ3N0ciAiZG9zeWEgeWF6xLFtIGhhdGFzxLEiCisKKyM6IHNoYTEtZmlsZS5jOjE3ODAKK21zZ2lkICJlcnJvciB3aGVuIGNsb3NpbmcgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgImdldsWfZWsgbmVzbmUgZG9zeWFzxLEga2FwYXTEsWzEsXJrZW4gaGF0YSIKKworIzogc2hhMS1maWxlLmM6MTg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgYWRkaW5nIGFuIG9iamVjdCB0byByZXBvc2l0b3J5IGRhdGFiYXNlICVzIgorbXNnc3RyICIlcyBkZXBvIHZlcml0YWJhbsSxbmEgbmVzbmUgZWtsZW1layBpw6dpbiB5ZXRlcnNpeiBpemluIgorCisjOiBzaGExLWZpbGUuYzoxODQ3Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAiZ2XDp2ljaSBkb3N5YSBvbHXFn3R1cnVsYW3EsXlvciIKKworIzogc2hhMS1maWxlLmM6MTg3MQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAiZ2V2xZ9layBuZXNuZSBkb3N5YXPEsSB5YXrEsWxhbcSxeW9yIgorCisjOiBzaGExLWZpbGUuYzoxODc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIG5ldyBvYmplY3QgJXMgKCVkKSIKK21zZ3N0ciAieWVuaSBuZXNuZSAlcyBzw7ZuZMO8csO8bGVtaXlvciAoJWQpIgorCisjOiBzaGExLWZpbGUuYzoxODgxCisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGVFbmQgb24gb2JqZWN0ICVzIGZhaWxlZCAoJWQpIgorbXNnc3RyICIlcyBuZXNuZXNpIMO8emVyaW5kZSBkZWZsYXRlRW5kIGJhxZ9hcsSxc8SxeiBvbGR1ICglZCkiCisKKyM6IHNoYTEtZmlsZS5jOjE4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZnVzZWQgYnkgdW5zdGFibGUgb2JqZWN0IHNvdXJjZSBkYXRhIGZvciAlcyIKK21zZ3N0ciAiJXMgacOnaW4gb2xhbiBuZXNuZSBrYXluYWsgdmVyaXNpbmRlbiBkb2xhecSxIGthZmEga2FyxLHFn8Sxa2zEscSfxLEiCisKKyM6IHNoYTEtZmlsZS5jOjE4OTUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB1dGltZSgpIG9uICVzIgorbXNnc3RyICIlcyDDvHplcmluZGUgdXRpbWUoKSBiYcWfYXLEsXPEsXoiCisKKyM6IHNoYTEtZmlsZS5jOjE5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAiJXMgacOnaW4gbmVzbmUgb2t1bmFtxLF5b3IiCisKKyM6IHNoYTEtZmlsZS5jOjIwMTEKK21zZ2lkICJjb3JydXB0IGNvbW1pdCIKK21zZ3N0ciAiaGFzYXIgZ8O2cm3DvMWfIGfDtm5kZXJpIgorCisjOiBzaGExLWZpbGUuYzoyMDE5Cittc2dpZCAiY29ycnVwdCB0YWciCittc2dzdHIgImhhc2FyIGfDtnJtw7zFnyBldGlrZXQiCisKKyM6IHNoYTEtZmlsZS5jOjIxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBlcnJvciB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAiJXMgaW5kZWtzbGVuaXJrZW4gb2t1bWEgaGF0YXPEsSIKKworIzogc2hhMS1maWxlLmM6MjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCByZWFkIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICIlcyBpbmRla3NsZW5pcmtlbiBrxLFzYSByZWFkIgorCisjOiBzaGExLWZpbGUuYzoyMTk1IHNoYTEtZmlsZS5jOjIyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIKK21zZ3N0ciAiJXM6IHZlcml0YWJhbsSxbmEgZWtsZW1lIGJhxZ9hcsSxc8SxeiIKKworIzogc2hhMS1maWxlLmM6MjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5zdXBwb3J0ZWQgZmlsZSB0eXBlIgorbXNnc3RyICIlczogZGVzdGVrbGVubWV5ZW4gZG9zeWEgdMO8csO8IgorCisjOiBzaGExLWZpbGUuYzoyMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIG9iamVjdCIKK21zZ3N0ciAiJXMgZ2XDp2VybGkgYmlyIG5lc25lIGRlxJ9pbCIKKworIzogc2hhMS1maWxlLmM6MjIzNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiJXMgZ2XDp2VybGkgYmlyICclcycgbmVzbmVzaSBkZcSfaWwiCisKKyM6IHNoYTEtZmlsZS5jOjIyNjQgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIgorbXNnc3RyICIlcyBhw6fEsWxhbcSxeW9yIgorCisjOiBzaGExLWZpbGUuYzoyNDU0IHNoYTEtZmlsZS5jOjI1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCBmb3IgJXMgKGV4cGVjdGVkICVzKSIKK21zZ3N0ciAiJXMgacOnaW4gc2HEn2xhbWEgdXl1xZ9tYXpsxLHEn8SxICglcyBiZWtsZW5peW9yZHUpIgorCisjOiBzaGExLWZpbGUuYzoyNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICVzIgorbXNnc3RyICIlcyBtbWFwIHlhcMSxbGFtYWTEsSIKKworIzogc2hhMS1maWxlLmM6MjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAiJXMgw7xzdGJpbGdpc2kgYcOnxLFsYW3EsXlvciIKKworIzogc2hhMS1maWxlLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgaGVhZGVyIG9mICVzIgorbXNnc3RyICIlcyDDvHN0YmlsZ2lzaSBheXLEscWfdMSxcsSxbGFtxLF5b3IiCisKKyM6IHNoYTEtZmlsZS5jOjI1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayBjb250ZW50cyBvZiAlcyIKK21zZ3N0ciAiJXMgacOnZXJpxJ9pIGHDp8SxbGFtxLF5b3IiCisKKyM6IHNoYTEtbmFtZS5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCBTSEExICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAia8Sxc2EgU0hBMSAlcyBiZWxpcnNpeiIKKworIzogc2hhMS1uYW1lLmM6NDk3Cittc2dpZCAiVGhlIGNhbmRpZGF0ZXMgYXJlOiIKK21zZ3N0ciAiQWRheWxhcjoiCisKKyM6IHNoYTEtbmFtZS5jOjc5NgorbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisid2hlcmUgXCIkYnJcIiBpcyBzb21laG93IGVtcHR5IGFuZCBhIDQwLWhleCByZWYgaXMgY3JlYXRlZC4gUGxlYXNlXG4iCisiZXhhbWluZSB0aGVzZSByZWZzIGFuZCBtYXliZSBkZWxldGUgdGhlbS4gVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5XG4iCisicnVubmluZyBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiCittc2dzdHIgIiIKKyJHaXQgbm9ybWFsZGUgaGnDp2JpciB6YW1hbiA0MCBvbmFsdMSxbMSxIGthcmFrdGVybGVybGUgYml0ZW4gYmlyIGJhxZ92dXJ1XG4iCisib2x1xZ90dXJtYXosIMOnw7xua8O8IDQwIG9uYWx0xLFsxLEgYmlyIGJhxZ92dXJ1LCBvbnUgYmVsaXJsZWRpxJ9pbml6IHphbWFuIHlva1xuIgorInNhecSxbGFjYWt0xLFyLiBCdSBiYcWfdnVydWxhciB5YW5sxLHFn2zEsWtsYSBvbHXFn3R1cnVsbXXFnyBvbGFiaWxpci4gw5ZybmXEn2luOlxuIgorIlxuIgorIlx0Z2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJrb211dHVuZGEgXCIkYnJcIiBiaXIgxZ9la2lsZGUgYm/FnyBrYWxtxLHFnyB2ZSA0MCBvbmFsdMSxbMSxIGJpciBiYcWfdnVydVxuIgorIm9sdcWfdHVydWxtdcWfLiBMw7x0ZmVuIGJ1IGJhxZ92dXJ1bGFyxLEgaW5jZWxleWluIHZlIGdlcmVraXJzZSBzaWxpbi4gQnUgIgorImlsZXRpeWlcbiIKKyJrYXBhdG1hayBpw6dpbiBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nXCIgeWFwxLFuLiIKKworIzogc2hhMS1uYW1lLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgJyUuKnMnIG9ubHkgZ29lcyBiYWNrIHRvICVzIgorbXNnc3RyICInJS4qcycgZ8O8bmzDvMSfw7wgeWFsbsSxemNhIMWfdW5hIGdlcmkgZ2lkZXI6ICVzIgorCisjOiBzaGExLW5hbWUuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciAnJS4qcycgb25seSBoYXMgJWQgZW50cmllcyIKK21zZ3N0ciAiJyUuKnMnIGfDvG5sw7zEn8O8bmRlIHlhbG7EsXpjYSAlZCBnaXJkaSB2YXIiCisKKyM6IHNoYTEtbmFtZS5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGV4aXN0cyBvbiBkaXNrLCBidXQgbm90IGluICclLipzJyIKK21zZ3N0ciAiJyVzJyB5b2x1IGRpc2sgw7x6ZXJpbmRlIG1ldmN1dCwgYW5jYWsgJyUuKnMnIGnDp2luZGUgZGXEn2lsIgorCisjOiBzaGExLW5hbWUuYzoxNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXRoICclcycgZXhpc3RzLCBidXQgbm90ICclcydcbiIKKyJoaW50OiBEaWQgeW91IG1lYW4gJyUuKnM6JXMnIGFrYSAnJS4qczouLyVzJz8iCittc2dzdHIgIiIKKyInJXMnIHlvbHUgbWV2Y3V0LCBhbmNhayAnJXMnIGRlxJ9pbFxuIgorIsSwcHVjdTogxZ51bnUgbXUgZGVtZWsgaXN0ZWRpbml6OiAnJS4qczolcycsIG5hbS3EsSBkacSfZXIgJyUuKnM6Li8lcyc/IgorCisjOiBzaGExLW5hbWUuYzoxNzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCBpbiAnJS4qcyciCittc2dzdHIgIiclcycgeW9sdSAnJS4qcycgacOnaW5kZSBtZXZjdXQgZGXEn2lsIgorCisjOiBzaGExLW5hbWUuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXRoICclcycgaXMgaW4gdGhlIGluZGV4LCBidXQgbm90IGF0IHN0YWdlICVkXG4iCisiaGludDogRGlkIHlvdSBtZWFuICc6JWQ6JXMnPyIKK21zZ3N0ciAiIgorIiclcycgeW9sdSBpbmRla3N0ZSwgYW5jYWsgJWQgbnVtYXJhbMSxIGFsYW5kYSBkZcSfaWxcbiIKKyLEsHB1Y3U6IMWedW51IG11IGRlbWVrIGlzdGVkaW5pejogJzolZDolcyc/IgorCisjOiBzaGExLW5hbWUuYzoxNzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXRoICclcycgaXMgaW4gdGhlIGluZGV4LCBidXQgbm90ICclcydcbiIKKyJoaW50OiBEaWQgeW91IG1lYW4gJzolZDolcycgYWthICc6JWQ6Li8lcyc/IgorbXNnc3RyICIiCisiJyVzJyB5b2x1IGluZGVrc3RlLCBhbmNhayAnJXMnIGRlxJ9pbFxuIgorIsSwcHVjdTogxZ51bnUgbXUgZGVtZWsgaXN0ZWRpbml6OiAnJWQ6JXMnLCBuYW0txLEgZGnEn2VyICc6JWQ6Li8lcyc/IgorCisjOiBzaGExLW5hbWUuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBleGlzdHMgb24gZGlzaywgYnV0IG5vdCBpbiB0aGUgaW5kZXgiCittc2dzdHIgIiclcycgeW9sdSBkaXNrdGUgbWV2Y3V0LCBhbmNhayBpbmRla3N0ZSBkZcSfaWwiCisKKyM6IHNoYTEtbmFtZS5jOjE3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IChuZWl0aGVyIG9uIGRpc2sgbm9yIGluIHRoZSBpbmRleCkiCittc2dzdHIgIiclcycgZGl5ZSBiaXIgeW9sIHlvayAobmUgZGlza3RlIG5lIGRlIGluZGVrc3RlKSIKKworIzogc2hhMS1uYW1lLmM6MTc3MQorbXNnaWQgInJlbGF0aXZlIHBhdGggc3ludGF4IGNhbid0IGJlIHVzZWQgb3V0c2lkZSB3b3JraW5nIHRyZWUiCittc2dzdHIgImfDtnJlY2VsaSB5b2wgc8O2emRpemltaSDDp2FsxLHFn21hIGHEn2FjxLEgZMSxxZ/EsW5kYSBrdWxsYW7EsWxhbWF6IgorCisjOiBzaGExLW5hbWUuYzoxOTA5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IG5hbWUgJyUuKnMnLiIKK21zZ3N0ciAiZ2XDp2Vyc2l6IG5lc25lIGFkxLE6ICclLipzJyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlCisjOiBzdHJidWYuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCIgorbXNnc3RyICIldS4lMi4ydSBHaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgR2lCL3NuIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUKKyM6IHN0cmJ1Zi5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIiCittc2dzdHIgIiV1LiUyLjJ1IE1pQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQi9zIgorbXNnc3RyICIldS4lMi4ydSBNaUIvc24iCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZQorIzogc3RyYnVmLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQiIKK21zZ3N0ciAiJXUuJTIuMnUgS2lCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCL3MiCittc2dzdHIgIiV1LiUyLjJ1IEtpQi9zbiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUKKyM6IHN0cmJ1Zi5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlIgorbXNnaWRfcGx1cmFsICIldSBieXRlcyIKK21zZ3N0clswXSAiJXUgYmF5dCIKK21zZ3N0clsxXSAiJXUgYmF5dCIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnl0ZS9zIgorbXNnaWRfcGx1cmFsICIldSBieXRlcy9zIgorbXNnc3RyWzBdICIldSBiYXl0L3NuIgorbXNnc3RyWzFdICIldSBiYXl0L3NuIgorCisjOiBzdHJidWYuYzoxMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBlZGl0ICclcyciCittc2dzdHIgIiclcycgZMO8emVubGVuZW1lZGkiCisKKyM6IHN1Ym1vZHVsZS5jOjExNCBzdWJtb2R1bGUuYzoxNDMKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAiIgorIkJpcmxlxZ90aXJpbG1lbWnFnyAuZ2l0bW9kdWxlcyBkZcSfacWfdGlyaWxlbWl5b3IsIMO2bmNlIGJpcmxlxZ90aXJtZSAiCisiw6dha8SxxZ9tYWxhcsSxbsSxIMOnw7Z6w7xuIgorCisjOiBzdWJtb2R1bGUuYzoxMTggc3VibW9kdWxlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAiLmdpdG1vZHVsZXMgacOnaW5kZSBwYXRoPSVzIG9sYW4gYsO2bMO8bSBidWx1bmFtYWTEsSIKKworIzogc3VibW9kdWxlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICIlcyBpw6dpbiAuZ2l0bW9kdWxlcyBnaXJkaXNpIGthbGTEsXLEsWxhbWFkxLEiCisKKyM6IHN1Ym1vZHVsZS5jOjE2NQorbXNnaWQgInN0YWdpbmcgdXBkYXRlZCAuZ2l0bW9kdWxlcyBmYWlsZWQiCittc2dzdHIgImfDvG5jZWxsZW5tacWfIC5naXRtb2R1bGVzJ3UgaGF6xLFybGFtYSBiYcWfYXLEsXPEsXogb2xkdSIKKworIzogc3VibW9kdWxlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJpw6dpIGRvbGR1cnVsbWFtxLHFnyAnJXMnIGFsdG1vZMO8bMO8bmRlIgorCisjOiBzdWJtb2R1bGUuYzozNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0aHNwZWMgJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICJZb2wgYmVsaXJ0ZWNpICclcycgJyUuKnMnIGFsdG1vZMO8bMO8bmRlIgorCisjOiBzdWJtb2R1bGUuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0taWdub3JlLXN1Ym1vZHVsZXMgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJoYXRhbMSxIC0taWdub3JlLXN1Ym1vZHVsZXMgZGXEn2nFn2tlbmk6ICVzIgorCisjOiBzdWJtb2R1bGUuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSBpbiBjb21taXQgJXMgYXQgcGF0aDogJyVzJyBjb2xsaWRlcyB3aXRoIGEgc3VibW9kdWxlIG5hbWVkIHRoZSAiCisic2FtZS4gU2tpcHBpbmcgaXQuIgorbXNnc3RyICIiCisiJXMgZ8O2bmRlcmlzaW5kZSAnJXMnIHlvbHVuZGEgYnVsdW5hbiBhbHRtb2TDvGwsIGF5bsSxIGFkbMSxIGJpciBhbHRtb2TDvGxsZSAiCisiw6dhcnDEscWfxLF5b3IuIEF0bGFuxLF5b3IuIgorCisjOiBzdWJtb2R1bGUuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGVudHJ5ICclcycgKCVzKSBpcyBhICVzLCBub3QgYSBjb21taXQiCittc2dzdHIgImFsdG1vZMO8bCBnaXJkaXNpICclcycgKCVzKSBiaXIgJXMsIGfDtm5kZXJpIGRlxJ9pbCIKKworIzogc3VibW9kdWxlLmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QgPGNvbW1pdHM+IC0tbm90IC0tcmVtb3RlcyAtbiAxJyBjb21tYW5kIGluICIKKyJzdWJtb2R1bGUgJXMiCittc2dzdHIgIiIKKyInJXMnIGFsdG1vZMO8bMO8bmRlICdnaXQgcmV2LWxpc3QgPGNvbW1pdHM+IC0tbm90IC0tcmVtb3RlcyAtbiAxJyAiCisiw6dhbMSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiBzdWJtb2R1bGUuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInByb2Nlc3MgZm9yIHN1Ym1vZHVsZSAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiJyVzJyBhbHRtb2TDvGzDvCBpw6dpbiBpxZ9sZW0gYmHFn2FyxLFzxLF6IG9sZHUiCisKKyM6IHN1Ym1vZHVsZS5jOjExNDcgYnVpbHRpbi9icmFuY2guYzo2ODAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIwNDUKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiSEVBRCBnZcOnZXJsaSBiaXIgYmHFn3Z1cnUgb2xhcmFrIMOnw7Z6w7xsZW1lZGkuIgorCisjOiBzdWJtb2R1bGUuYzoxMTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAiJyVzJyBhbHRtb2TDvGzDvCBpdGlsaXlvclxuIgorCisjOiBzdWJtb2R1bGUuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBwdXNoIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIiclcycgYWx0bW9kw7xsw7wgaXRpbGVtaXlvclxuIgorCisjOiBzdWJtb2R1bGUuYzoxNDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIHN1Ym1vZHVsZSAlcyVzXG4iCittc2dzdHIgIiVzJXMgYWx0bW9kw7xsw7wgZ2V0aXJpbGl5b3JcbiIKKworIzogc3VibW9kdWxlLmM6MTQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYWNjZXNzIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIiclcycgYWx0bW9kw7xsw7xuZSBlcmnFn2lsZW1lZGlcbiIKKworIzogc3VibW9kdWxlLmM6MTYzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3JzIGR1cmluZyBzdWJtb2R1bGUgZmV0Y2g6XG4iCisiJXMiCittc2dzdHIgIiIKKyJBbHRtb2TDvGwgZ2V0aXJpbGlya2VuIGhhdGE6XG4iCisiJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBub3QgcmVjb2duaXplZCBhcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICInJXMnIGJpciBnaXQgZGVwb3N1IG9sYXJhayB0YW7EsW1sYW5hbWFkxLEiCisKKyM6IHN1Ym1vZHVsZS5jOjE2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj0yJyBpbiBzdWJtb2R1bGUgJXMiCittc2dzdHIgIiclcycgYWx0bW9kw7xsw7wgacOnaW5kZSAnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj0yJyDDp2FsxLHFn3TEsXLEsWxhbWFkxLEiCisKKyM6IHN1Ym1vZHVsZS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49MicgZmFpbGVkIGluIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiJyVzJyBhbHRtb2TDvGzDvCBpw6dpbmRlICdnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTInIGJhxZ9hcsSxc8SxeiBvbGR1IgorCisjOiBzdWJtb2R1bGUuYzoxODAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIiclcycgYWx0bW9kw7xsw7wgacOnaW5kZSAnZ2l0IHN0YXR1cycgYmHFn2xhdMSxbGFtYWTEsSIKKworIzogc3VibW9kdWxlLmM6MTgxMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcnVuICdnaXQgc3RhdHVzJyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiJyVzJyBhbHRtb2TDvGzDvCBpw6dpbmRlICdnaXQgc3RhdHVzJyDDp2FsxLHFn3TEsXLEsWxhbWFkxLEiCisKKyM6IHN1Ym1vZHVsZS5jOjE4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVuc2V0IGNvcmUud29ya3RyZWUgc2V0dGluZyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiJyVzJyBhbHRtb2TDvGzDvCBpw6dpbmRlIGNvcmUud29ya3RyZWUgYXlhcsSxIGthcGF0xLFsYW1hZMSxIgorCisjOiBzdWJtb2R1bGUuYzoxODU1IHN1Ym1vZHVsZS5jOjIxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiJyVzJyBhbHRtb2TDvGzDvG5lIMO2enlpbmVsZW5lbWVkaSIKKworIzogc3VibW9kdWxlLmM6MTg3NgorbXNnaWQgImNvdWxkIG5vdCByZXNldCBzdWJtb2R1bGUgaW5kZXgiCittc2dzdHIgImFsdG1vZMO8bCBpbmRla3NpIHPEsWbEsXJsYW5hbWFkxLEiCisKKyM6IHN1Ym1vZHVsZS5jOjE5MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgaGFzIGRpcnR5IGluZGV4IgorbXNnc3RyICInJXMnIGFsdG1vZMO8bMO8IGluZGVrc2kga2lybGkiCisKKyM6IHN1Ym1vZHVsZS5jOjE5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgY291bGQgbm90IGJlIHVwZGF0ZWQuIgorbXNnc3RyICInJXMnIGFsdG1vZMO8bMO8IGfDvG5jZWxsZW5lbWVkaS4iCisKKyM6IHN1Ym1vZHVsZS5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGdpdCBkaXIgJyVzJyBpcyBpbnNpZGUgZ2l0IGRpciAnJS4qcyciCittc2dzdHIgImFsdG1vZMO8bCBnaXQgZGl6aW5pICclcycsICclLipzJyBnaXQgZGl6aW5pIGnDp2luZGUiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKyJyZWxvY2F0ZV9naXRkaXIgYmlyZGVuIMOnb2sgw6dhbMSxxZ9tYSBhxJ9hw6dsxLEgJyVzJyBhbHRtb2TDvGzDvCBpw6dpbiBkZXN0ZWtsZW5taXlvciIKKworIzogc3VibW9kdWxlLmM6MjA3MSBzdWJtb2R1bGUuYzoyMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgbmFtZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIiclcycgYWx0bW9kw7xsw7wgYWTEsSBiYWvEsWxhbWFkxLEiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbW92ZSAnJXMnIGludG8gYW4gZXhpc3RpbmcgZ2l0IGRpciIKK21zZ3N0ciAiJyVzJyDDtmdlc2luaSBtZXZjdXQgYmlyIGdpdCBkaXppbmluZSB0YcWfxLFtYSByZWRkZWRpbGl5b3IiCisKKyM6IHN1Ym1vZHVsZS5jOjIwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1pZ3JhdGluZyBnaXQgZGlyZWN0b3J5IG9mICclcyVzJyBmcm9tXG4iCisiJyVzJyB0b1xuIgorIiclcydcbiIKK21zZ3N0ciAiIgorIiclcyVzJyBnaXQgZGl6aW5pIGfDtsOnIGV0dGlyaWxpeW9yOlxuIgorIsWfdXJhZGFuOiAnJXMnXG4iCisixZ91cmF5YTogJyVzJ1xuIgorCisjOiBzdWJtb2R1bGUuYzoyMjA5Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGxzLWZpbGVzIGluIC4uIgorbXNnc3RyICJscy1maWxlcyDFn3VyYWRhIGJhxZ9sYXTEsWxhbWFkxLEgLi4iCisKKyM6IHN1Ym1vZHVsZS5jOjIyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibHMtdHJlZSByZXR1cm5lZCB1bmV4cGVjdGVkIHJldHVybiBjb2RlICVkIgorbXNnc3RyICJscy10cmVlIGJla2xlbm1lZGlrIGJpciBiacOnaW1kZSAlZCBrb2R1IGlsZSDDp8Sxa3TEsSIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBzdXNwaWNpb3VzIHN1Ym1vZHVsZSBuYW1lOiAlcyIKK21zZ3N0ciAia3XFn2t1IGRvxJ91cmFuIGFsdG1vZMO8bCB5b2sgc2F5xLFsxLF5b3I6ICVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MzAzCittc2dpZCAibmVnYXRpdmUgdmFsdWVzIG5vdCBhbGxvd2VkIGZvciBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorbXNnc3RyICJzdWJtb2R1bGUuZmV0Y2hqb2JzIGnDp2luIG5lZ2F0aWYgZGXEn2VybGVyZSBpemluIHZlcmlsbWl5b3IiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJyVzJyB3aGljaCBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorIiclcycgYmlyIGtvbXV0IHNhdMSxcsSxIHNlw6dlbmXEn2kgb2xhcmFrIHlvcnVtbGFuYWJpbGVjZcSfaW5kZW4geW9rIHNhecSxbMSxeW9yOiAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAiJXMgacOnaW4gZ2XDp2Vyc2l6IGRlxJ9lciIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIC5naXRtb2R1bGVzIGVudHJ5ICVzIgorbXNnc3RyICIuZ2l0bW9kdWxlcyBnaXJkaXNpICVzIGfDvG5jZWxsZW5lbWVkaSIKKworIzogdHJhaWxlci5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJydW5uaW5nIHRyYWlsZXIgY29tbWFuZCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiJyVzJyBhcnRiaWxnaSBrb211dHVudSDDp2FsxLHFn3TEsXJtYSBiYcWfYXLEsXPEsXogb2xkdSIKKworIzogdHJhaWxlci5jOjQ4NSB0cmFpbGVyLmM6NDkwIHRyYWlsZXIuYzo0OTUgdHJhaWxlci5jOjU0OSB0cmFpbGVyLmM6NTUzCisjOiB0cmFpbGVyLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgJyVzJyBmb3Iga2V5ICclcyciCittc2dzdHIgImJpbGlubWV5ZW4gZGXEn2VyICclcycgKCclcycgYW5haHRhcsSxIGnDp2luKSIKKworIzogdHJhaWxlci5jOjUzOSB0cmFpbGVyLmM6NTQ0IGJ1aWx0aW4vcmVtb3RlLmM6Mjk4IGJ1aWx0aW4vcmVtb3RlLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgImJpcmRlbiDDp29rICVzIgorCisjOiB0cmFpbGVyLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHRyYWlsZXIgdG9rZW4gaW4gdHJhaWxlciAnJS4qcyciCittc2dzdHIgIiclLipzJyBhcnRiaWxnaXNpIGnDp2luZGUgYm/FnyBhcnRiaWxnaSBzaW1nZXNpIgorCisjOiB0cmFpbGVyLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUgJyVzJyIKK21zZ3N0ciAiJyVzJyBnaXJkaSBkb3N5YXPEsSBva3VuYW1hZMSxIgorCisjOiB0cmFpbGVyLmM6NzUzCittc2dpZCAiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAic3RkaW4nZGVuIG9rdW5hbWFkxLEiCisKKyM6IHRyYWlsZXIuYzoxMDExIHdyYXBwZXIuYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJXMiCittc2dzdHIgIiVzIGRvc3lhIGJpbGdpbGVyaSBhbMSxbmFtYWTEsSIKKworIzogdHJhaWxlci5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUiCittc2dzdHIgIiVzIGRvc3lhc8SxIHPEsXJhZGFuIGJpciBkb3N5YSBkZcSfaWwiCisKKyM6IHRyYWlsZXIuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IHdyaXRhYmxlIGJ5IHVzZXIiCittc2dzdHIgIiVzIGRvc3lhc8SxIGt1bGxhbsSxY8SxIHRhcmFmxLFuZGFuIHlhesSxbGFiaWxpciBkZcSfaWwiCisKKyM6IHRyYWlsZXIuYzoxMDI3Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgImdlw6dpY2kgZG9zeWEgYcOnxLFsYW1hZMSxIgorCisjOiB0cmFpbGVyLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIgorbXNnc3RyICJnZcOnaWNpIGRvc3lhIGFkxLEgJXMgb2xhcmFrIGRlxJ9pxZ90aXJpbGVtZWRpIgorCisjOiB0cmFuc3BvcnQuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2V0IHVwc3RyZWFtIG9mICclcycgdG8gJyVzJyBvZiAnJXMnXG4iCittc2dzdHIgIiclcycgw7xzdCBrYXluYcSfxLEgJyVzJyAoa2F5bmFrOiAnJXMnKSBvbGFyYWsgYXlhcmxhbmFjYWtcbiIKKworIzogdHJhbnNwb3J0LmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGJ1bmRsZSAnJXMnIgorbXNnc3RyICInJXMnIGRlbWV0aSBva3VuYW1hZMSxIgorCisjOiB0cmFuc3BvcnQuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0OiBpbnZhbGlkIGRlcHRoIG9wdGlvbiAnJXMnIgorbXNnc3RyICJ0cmFuc3BvcnQ6IEdlw6dlcnNpeiBkZXJpbmxpayBzZcOnZW5lxJ9pICclcyciCisKKyM6IHRyYW5zcG9ydC5jOjI2NgorbXNnaWQgInNlZSBwcm90b2NvbC52ZXJzaW9uIGluICdnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGRldGFpbHMiCittc2dzdHIgImF5csSxbnTEsWxhciBpw6dpbiAnZ2l0IGhlbHAgY29uZmlnJyBpw6dpbmRlIHByb3RvY29sLnZlcnNpb24nYSBiYWvEsW4iCisKKyM6IHRyYW5zcG9ydC5jOjI2NworbXNnaWQgInNlcnZlciBvcHRpb25zIHJlcXVpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGxhdGVyIgorbXNnc3RyICJzdW51Y3Ugc2XDp2VuZWtsZXJpIHByb3Rva29sIHPDvHLDvG0gMiB2ZXlhIHNvbnJhc8SxbsSxIGdlcmVrdGlyaXIiCisKKyM6IHRyYW5zcG9ydC5jOjYzMgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSB0cmFuc3BvcnQuY29sb3IuKiBjb25maWciCittc2dzdHIgInRyYW5zcG9ydC5jb2xvci4qIHlhcMSxbGFuZMSxcm1hc8SxIGF5csSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiB0cmFuc3BvcnQuYzo3MDUKK21zZ2lkICJzdXBwb3J0IGZvciBwcm90b2NvbCB2MiBub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICJwcm90b2tvbCB2MiBkZXN0ZcSfaSBoZW7DvHogeWVyaW5lIGdldGlyaWxtZWRpIgorCisjOiB0cmFuc3BvcnQuYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBmb3IgY29uZmlnICclcyc6ICVzIgorbXNnc3RyICInJXMnIHlhcMSxbGFuZMSxcm1hc8SxIGnDp2luIGJpbGlubWV5ZW4gZGXEn2VyOiAlcyIKKworIzogdHJhbnNwb3J0LmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydCAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICInJXMnIHRhxZ/EsXnEsWPEsXPEsW5hIGl6aW4gdmVyaWxtaXlvciIKKworIzogdHJhbnNwb3J0LmM6OTQ5Cittc2dpZCAiZ2l0LW92ZXItcnN5bmMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIKK21zZ3N0ciAiZ2l0LW92ZXItcnN5bmMgYXJ0xLFrIGRlc3Rla2xlbm1peW9yIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKKyJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIKK21zZ3N0ciAiIgorIkHFn2HEn8SxZGFraSBhbHRtb2TDvGwgeW9sbGFyxLEgYmHFn2thIGhpw6diaXIgdXphayBrb251bWRhIGJ1bHVuYW1heWFuXG4iCisiZGXEn2nFn2lrbGlrbGVyIGnDp2VyaXlvcjpcbiIKKworIzogdHJhbnNwb3J0LmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGxlYXNlIHRyeVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisib3IgY2QgdG8gdGhlIHBhdGggYW5kIHVzZVxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyJ0byBwdXNoIHRoZW0gdG8gYSByZW1vdGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJMw7x0ZmVuXG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJkZW5leWluIHZleWEgYmlyIHV6YWsga29udW1hIGl0bWVrIGnDp2luIHlvbGEgY2QgeWFwxLFwXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorImt1bGxhbsSxbi5cbiIKKyJcbiIKKworIzogdHJhbnNwb3J0LmM6MTA1NgorbXNnaWQgIkFib3J0aW5nLiIKK21zZ3N0ciAixLBwdGFsIGVkaWxpeW9yIgorCisjOiB0cmFuc3BvcnQuYzoxMjAxCittc2dpZCAiZmFpbGVkIHRvIHB1c2ggYWxsIG5lZWRlZCBzdWJtb2R1bGVzIgorbXNnc3RyICJnZXJla2VuIHTDvG0gYWx0bW9kw7xsbGVyIGl0aWxlbWVkaSIKKworIzogdHJhbnNwb3J0LmM6MTM0NSB0cmFuc3BvcnQtaGVscGVyLmM6NjU3Cittc2dpZCAib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgImnFn2xlbSBwcm90b2tvbCB0YXJhZsSxbmRhbiBkZXN0ZWtsZW5taXlvciIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxIHRyYW5zcG9ydC1oZWxwZXIuYzo5MAorbXNnaWQgImZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiCittc2dzdHIgInV6YWsga29udW0geWFyZMSxbWPEsXPEsW5hIHRhbSB5YXrEsW0gYmHFn2FyxLFzxLF6IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIHJlbW90ZSBoZWxwZXIgZm9yICclcyciCittc2dzdHIgIiclcycgacOnaW4gdXphayBrb251bSB5YXJkxLFtY8Sxc8SxIGJ1bHVuYW1hZMSxIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTYwIHRyYW5zcG9ydC1oZWxwZXIuYzo1NzEKK21zZ2lkICJjYW4ndCBkdXAgaGVscGVyIG91dHB1dCBmZCIKK21zZ3N0ciAidXphayBrb251bSB5YXJkxLFtY8Sxc8SxIMOnxLFrdMSxc8SxIGnDp2luIGRvc3lhIGHDp8Sxa2xhecSxY8Sxc8SxIMOnb8SfYWx0xLFsYW3EsXlvciIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBtYW5kYXRvcnkgY2FwYWJpbGl0eSAlczsgdGhpcyByZW1vdGUgaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyICIKKyJ2ZXJzaW9uIG9mIEdpdCIKK21zZ3N0ciAiIgorImJpbGlubWV5ZW4gem9ydW5sdSAlcyB5ZXRlbmXEn2k7IGJ1IHV6YWsga29udW0geWFyZMSxbWPEsXPEsSBiw7x5w7xrIG9sYXPEsWzEsWtsYSAiCisiR2l0J2luIGRhaGEgeWVuaSBiaXIgc8O8csO8bcO8bmUgZ2VyZWtzaW5pbSBkdXl1eW9yIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjE3Cittc2dpZCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IgorbXNnc3RyICJidSB1emFrIGtvbnVtIHlhcmTEsW1jxLFzxLEgcmVmc3BlYyB5YXBhYmlsaXJsacSfaW5pIHllcmluZSBnZXRpcm1lbGkiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyODQgdHJhbnNwb3J0LWhlbHBlci5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIKK21zZ3N0ciAiJXMgYmVrbGVubWVkaWsgYmlyIGJpw6dpbWRlIMWfdW51IHPDtnlsZWRpOiAnJXMnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsc28gbG9ja2VkICVzIgorbXNnc3RyICIlcyBheXLEsWNhIMWfdW51IGtpbGl0bGVkaTogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0OTMKK21zZ2lkICJjb3VsZG4ndCBydW4gZmFzdC1pbXBvcnQiCittc2dzdHIgImZhc3QtaW1wb3J0IMOnYWzEscWfdMSxcsSxbGFtYWTEsSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjUxNgorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1pbXBvcnQiCittc2dzdHIgImZhc3QtaW1wb3J0IMOnYWzEscWfdMSxcsSxbMSxcmtlbiBoYXRhIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTQ1IHRyYW5zcG9ydC1oZWxwZXIuYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAlcyIKK21zZ3N0ciAiJXMgYmHFn3Z1cnVzdSBva3VuYW1hZMSxIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcmVzcG9uc2UgdG8gY29ubmVjdDogJXMiCittc2dzdHIgIidjb25uZWN0J2UgYmlsaW5tZXllbiB5YW7EsXQ6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEyCittc2dpZCAic2V0dGluZyByZW1vdGUgc2VydmljZSBwYXRoIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgInV6YWsgc2VydmlzIHlvbHUgYXlhcmxhbWEgcHJvdG9rb2xjZSBkZXN0ZWtsZW5taXlvciIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxNAorbXNnaWQgImludmFsaWQgcmVtb3RlIHNlcnZpY2UgcGF0aCIKK21zZ3N0ciAiZ2XDp2Vyc2l6IHV6YWsga29udW0gc2VydmlzIHlvbHUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY29ubmVjdCB0byBzdWJzZXJ2aWNlICVzIgorbXNnc3RyICIlcyBhbHRzZXJ2aXNpbmUgYmHEn2xhbmFtxLF5b3IiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciCittc2dzdHIgInRhbWFtL2hhdGEgYmVrbGVuaXlvcmR1LCB5YXJkxLFtY8SxIMWfdW51IHPDtnlsZWRpOiAnJXMnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciByZXBvcnRlZCB1bmV4cGVjdGVkIHN0YXR1cyBvZiAlcyIKK21zZ3N0ciAieWFyZMSxbWPEsSAlcyBiZWtsZW5tZWRpayBkdXJ1bXUgYmlsZGlyZGkiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgZHJ5LXJ1biIKK21zZ3N0ciAiJXMgeWFyZMSxbWPEsXPEsSAnZHJ5LXJ1bicgZGVzdGVrbGVtaXlvciIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCIKK21zZ3N0ciAiJXMgeWFyZMSxbWPEsXPEsSAtLXNpZ25lZCBkZXN0ZWtsZW1peW9yIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkPWlmLWFza2VkIgorbXNnc3RyICIlcyB5YXJkxLFtY8Sxc8SxIC0tc2lnbmVkPWlmLWFza2VkIGRlc3Rla2xlbWl5b3IiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMiCittc2dzdHIgIiVzIHlhcmTEsW1jxLFzxLEgLS1hdG9taWMgZGVzdGVrbGVtaXlvciIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAncHVzaC1vcHRpb24nIgorbXNnc3RyICIlcyB5YXJkxLFtY8Sxc8SxICdwdXNoLW9wdGlvbicgZGVzdGVrbGVtaXlvciIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk2NQorbXNnaWQgInJlbW90ZS1oZWxwZXIgZG9lc24ndCBzdXBwb3J0IHB1c2g7IHJlZnNwZWMgbmVlZGVkIgorbXNnc3RyICJyZW1vdGUtaGVscGVyIGl0bWUgZGVzdGVrbGVtaXlvcjsgYmHFn3Z1cnUgYmVsaXJ0ZWNpIGdlcmVrbGkiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ2ZvcmNlJyIKK21zZ3N0ciAiJXMgeWFyZMSxbWPEsXPEsSAnZm9yY2UnIGRlc3Rla2xlbWl5b3IiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDE3Cittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtZXhwb3J0IgorbXNnc3RyICJmYXN0LWV4cG9ydCDDp2FsxLHFn3TEsXLEsWxhbWFkxLEiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDIyCittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWV4cG9ydCIKK21zZ3N0ciAiZmFzdC1leHBvcnQgw6dhbMSxxZ90xLFyxLFsxLFya2VuIGhhdGEiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyByZWZzIGluIGNvbW1vbiBhbmQgbm9uZSBzcGVjaWZpZWQ7IGRvaW5nIG5vdGhpbmcuXG4iCisiUGVyaGFwcyB5b3Ugc2hvdWxkIHNwZWNpZnkgYSBicmFuY2ggc3VjaCBhcyAnbWFzdGVyJy5cbiIKK21zZ3N0ciAiIgorIk9ydGFrIGJhxZ92dXJ1IHlvayB2ZSBoacOnIGJlbGlydGlsbWVtacWfOyBiaXIgxZ9leSB5YXDEsWxtYXlhY2FrLlxuIgorIkJlbGtpIGRlIGJpciBkYWwgYmVsaXJ0bWVsaXNpbml6LCDDtnJuZcSfaW46ICdtYXN0ZXInLlxuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgcmVzcG9uc2UgaW4gcmVmIGxpc3Q6ICVzIgorbXNnc3RyICJiYcWfdnVydSBsaXN0ZXNpbmRlIGhhdGFsxLEgb2x1xZ90dXJ1bG11xZ8geWFuxLF0OiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCglcykgZmFpbGVkIgorbXNnc3RyICJyZWFkKCVzKSBiYcWfYXLEsXPEsXogb2xkdSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGUoJXMpIGZhaWxlZCIKK21zZ3N0ciAid3JpdGUoJXMpIGJhxZ9hcsSxc8SxeiBvbGR1IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIgorbXNnc3RyICIlcyBpxZ8gcGFyw6dhY8SxxJ/EsSBiYcWfYXLEsXPEsXogb2xkdSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGhyZWFkIGZhaWxlZCB0byBqb2luOiAlcyIKK21zZ3N0ciAiJXMgacWfIHBhcsOnYWPEscSfxLEgZWtsZW5lbWVkaTogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzcxIHRyYW5zcG9ydC1oZWxwZXIuYzoxMzc1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhOiAlcyIKK21zZ3N0ciAidmVyaSBrb3B5YWxhbWEgacOnaW4gacWfIHBhcsOnYWPEscSfxLEgYmHFn2xhdMSxbGFtxLF5b3I6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCB0byB3YWl0IgorbXNnc3RyICIlcyBpxZ9sZW1pIGJla2xleWVtZWRpIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAiJXMgacWfbGVtaSBiYcWfYXLEsXPEsXogb2xkdSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MzQgdHJhbnNwb3J0LWhlbHBlci5jOjE0NDMKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIKK21zZ3N0ciAidmVyaSBrb3B5YWxhbWEgacOnaW4gacWfIHBhcsOnYWPEscSfxLEgYmHFn2xhdMSxbGFtxLF5b3IiCisKKyM6IHRyZWUtd2Fsay5jOjMyCittc2dpZCAidG9vLXNob3J0IHRyZWUgb2JqZWN0IgorbXNnc3RyICJhxJ9hw6cgbmVzbmVzaSDDp29rIGvEsXNhIgorCisjOiB0cmVlLXdhbGsuYzozOAorbXNnaWQgIm1hbGZvcm1lZCBtb2RlIGluIHRyZWUgZW50cnkiCittc2dzdHIgImHEn2HDpyBnaXJkaXNpbmRlIGhhdGFsxLEgb2x1xZ90dXJ1bG11xZ8ga2lwIgorCisjOiB0cmVlLXdhbGsuYzo0MgorbXNnaWQgImVtcHR5IGZpbGVuYW1lIGluIHRyZWUgZW50cnkiCittc2dzdHIgImHEn2HDpyBnaXJkaXNpbmRlIGJvxZ8gZG9zeWEgYWTEsSIKKworIzogdHJlZS13YWxrLmM6MTE3Cittc2dpZCAidG9vLXNob3J0IHRyZWUgZmlsZSIKK21zZ3N0ciAiYcSfYcOnIGRvc3lhc8SxIMOnb2sga8Sxc2EiCisKKyM6IHVucGFjay10cmVlcy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyLDh8Sxa8SxxZ8geWFwxLFsYXJhayBhxZ9hxJ/EsWRha2kgZG9zeWFsYXJkYWtpIHllcmVsIGRlxJ9pxZ9pa2xpa2xlcmluIMO8emVyaW5lICIKKyJ5YXrEsWxhY2FrOlxuIgorIiUlc0zDvHRmZW4gZGFsIGRlxJ9pxZ90aXJtZWRlbiDDtm5jZSBkZcSfacWfaWtsaWtsZXJpbml6aSBnw7ZuZGVyaW4gdmV5YSB6dWxhbGF5xLFuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLDh8Sxa8SxxZ8geWFwxLFsYXJhayBhxZ9hxJ/EsWRha2kgZG9zeWFsYXJkYWtpIHllcmVsIGRlxJ9pxZ9pa2xpa2xlcmluIMO8emVyaW5lICIKKyJ5YXrEsWxhY2FrOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiQmlybGXFn3Rpcm1lIGlsZSBhxZ9hxJ/EsWRha2kgZG9zeWFsYXJkYWtpIHllcmVsIGRlxJ9pxZ9pa2xpa2xlcmluIMO8emVyaW5lICIKKyJ5YXrEsWxhY2FrOlxuIgorIiUlc0zDvHRmZW4gYmlybGXFn3Rpcm1lZGVuIMO2bmNlIGRlxJ9pxZ9pa2xpa2xlcmluaXppIGfDtm5kZXJpbiB2ZXlhIHp1bGFsYXnEsW4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkJpcmxlxZ90aXJtZSBpbGUgYcWfYcSfxLFkYWtpIGRvc3lhbGFyZGFraSB5ZXJlbCBkZcSfacWfaWtsaWtsZXJpbiDDvHplcmluZSAiCisieWF6xLFsYWNhazpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIiVzIGlsZSBhxZ9hxJ/EsWRha2kgZG9zeWFsYXJkYWtpIHllcmVsIGRlxJ9pxZ9pa2xpa2xlcmluIMO8emVyaW5lIHlhesSxbGFjYWs6XG4iCisiJSVzTMO8dGZlbiAlcyB5YXBtYWRhbiDDtm5jZSBkZcSfacWfaWtsaWtsZXJpbml6aSBnw7ZuZGVyaW4gdmV5YSB6dWxhbGF5xLFuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyIlcyBpbGUgYcWfYcSfxLFkYWtpIGRvc3lhbGFyZGFraSB5ZXJlbCBkZcSfacWfaWtsaWtsZXJpbiDDvHplcmluZSB5YXrEsWxhY2FrOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIHRoZW06XG4iCisiJXMiCittc2dzdHIgIiIKKyJBxZ9hxJ/EsWRha2kgZGl6aW5sZXIgZ8O8bmNlbGxlbmVyZWsgacOnbGVyaW5kZWtpIGl6bGVubWV5ZW4gZG9zeWFsYXIgIgorImtheWJlZGlsZWNlazpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyLDh8Sxa8SxxZ8geWFwxLFsYXJhayBhxZ9hxJ/EsWRha2kgaXpsZW5tZXllbiDDp2FsxLHFn21hIGHEn2FjxLEgZG9zeWFsYXLEsSBrYWxkxLFyxLFsYWNhazpcbiIKKyIlJXNMw7x0ZmVuIGRhbCBkZcSfacWfdGlybWVkZW4gw7ZuY2Ugb25sYXLEsSB0YcWfxLF5xLFuIHZleWEga2FsZMSxcsSxbi4iCisKKyM6IHVucGFjay10cmVlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiw4fEsWvEscWfIHlhcMSxbGFyYWsgYcWfYcSfxLFkYWtpIGl6bGVubWV5ZW4gw6dhbMSxxZ9tYSBhxJ9hY8SxIGRvc3lhbGFyxLEga2FsZMSxcsSxbGFjYWs6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiQmlybGXFn3Rpcm1lIGlsZSBhxZ9hxJ/EsWRha2kgaXpsZW5tZXllbiDDp2FsxLHFn21hIGHEn2FjxLEgZG9zeWFsYXLEsSBrYWxkxLFyxLFsYWNhazpcbiIKKyIlJXNMw7x0ZmVuIGJpcmxlxZ90aXJtZWRlbiDDtm5jZSBvbmxhcsSxIHRhxZ/EsXnEsW4gdmV5YSBrYWxkxLFyxLFuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJCaXJsZcWfdGlybWUgaWxlIGHFn2HEn8SxZGFraSBpemxlbm1leWVuIMOnYWzEscWfbWEgYcSfYWPEsSBkb3N5YWxhcsSxIGthbGTEsXLEsWxhY2FrOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIiVzIGlsZSBhxZ9hxJ/EsWRha2kgaXpsZW5tZXllbiDDp2FsxLHFn21hIGHEn2FjxLEgZG9zeWFsYXLEsSBrYWxkxLFyxLFsYWNhazpcbiIKKyIlJXNMw7x0ZmVuICVzIHlhcG1hZGFuIMO2bmNlIG9ubGFyxLEgdGHFn8SxecSxbiB2ZXlhIGthbGTEsXLEsW4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIiVzIGlsZSBhxZ9hxJ/EsWRha2kgaXpsZW5tZXllbiDDp2FsxLHFn21hIGHEn2FjxLEgZG9zeWFsYXLEsSBrYWxkxLFyxLFsYWNhazpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyLDh8Sxa8SxxZ8geWFwxLFsYXJhayBhxZ9hxJ/EsWRha2kgaXpsZW5tZXllbiDDp2FsxLHFn21hIGHEn2FjxLEgZG9zeWFsYXLEsW7EsW4gw7x6ZXJpbmUgIgorInlhesSxbGFjYWs6XG4iCisiJSVzTMO8dGZlbiBkYWwgZGXEn2nFn3Rpcm1lZGVuIMO2bmNlIG9ubGFyxLEgdGHFn8SxecSxbiB2ZXlhIGthbGTEsXLEsW4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiw4fEsWvEscWfIHlhcMSxbGFyYWsgYcWfYcSfxLFkYWtpIGl6bGVubWV5ZW4gw6dhbMSxxZ9tYSBhxJ9hY8SxIGRvc3lhbGFyxLFuxLFuIMO8emVyaW5lICIKKyJ5YXrEsWxhY2FrOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJCaXJsZcWfdGlybWUgaWxlIGHFn2HEn8SxZGFraSBpemxlbm1leWVuIMOnYWzEscWfbWEgYcSfYWPEsSBkb3N5YWxhcsSxbsSxbiDDvHplcmluZSAiCisieWF6xLFsYWNhazpcbiIKKyIlJXNMw7x0ZmVuIGJpcmxlxZ90aXJtZWRlbiDDtm5jZSBvbmxhcsSxIHRhxZ/EsXnEsW4gdmV5YSBrYWxkxLFyxLFuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisiQmlybGXFn3Rpcm1lIGlsZSBhxZ9hxJ/EsWRha2kgaXpsZW5tZXllbiDDp2FsxLHFn21hIGHEn2FjxLEgZG9zeWFsYXLEsW7EsW4gw7x6ZXJpbmUgIgorInlhesSxbGFjYWs6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIiVzIGlsZSBhxZ9hxJ/EsWRha2kgaXpsZW5tZXllbiDDp2FsxLHFn21hIGHEn2FjxLEgZG9zeWFsYXLEsW7EsW4gw7x6ZXJpbmUgeWF6xLFsYWNhazpcbiIKKyIlJXNMw7x0ZmVuICVzIHlhcG1hZGFuIMO2bmNlIG9ubGFyxLEgdGHFn8SxecSxbiB2ZXlhIGthbGTEsXLEsW4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyIlcyBpbGUgYcWfYcSfxLFkYWtpIGl6bGVubWV5ZW4gw6dhbMSxxZ9tYSBhxJ9hY8SxIGRvc3lhbGFyxLFuxLFuIMO8emVyaW5lIHlhesSxbGFjYWs6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50cnkgJyVzJyBvdmVybGFwcyB3aXRoICclcycuICBDYW5ub3QgYmluZC4iCittc2dzdHIgIiclcycgZ2lyZGlzaSAnJXMnIGlsZSDDvHN0IMO8c3RlIGJpbml5b3IuIEJhxJ9sYW5hbcSxeW9yLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHNwYXJzZSBjaGVja291dDogdGhlIGZvbGxvd2luZyBlbnRyaWVzIGFyZSBub3QgdXAgdG8gZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkFyYWzEsWtsxLEgw6fEsWvEscWfIGfDvG5jZWxsZW5lbWl5b3I6IEHFn2HEn8SxZGFraSBnaXJkaWxlciBnw7xuY2VsIGRlxJ9pbDpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkFyYWzEsWtsxLEgw6fEsWvEscWfIGfDvG5jZWxsZW1lc2kgaWxlIGHFn2HEn8SxZGFraSDDp2FsxLHFn21hIGHEn2FjxLEgZG9zeWFsYXLEsW7EsW4gw7x6ZXJpbmUgIgorInlhesSxbGFjYWs6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkFyYWzEsWtsxLEgw6fEsWvEscWfIGfDvG5jZWxsZW1lc2kgaWxlIGHFn2HEn8SxZGFraSDDp2FsxLHFn21hIGHEn2FjxLEgZG9zeWFsYXLEsSAiCisia2FsZMSxcsSxbGFjYWs6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBzdWJtb2R1bGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJBbHRtb2TDvGwgZ8O8bmNlbGxlbmVtaXlvcjpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nXG4iCittc2dzdHIgIsSwcHRhbCBlZGlsaXlvclxuIgorCisjOiB1bnBhY2stdHJlZXMuYzozMTcKK21zZ2lkICJVcGRhdGluZyBmaWxlcyIKK21zZ3N0ciAiRG9zeWFsYXIgZ8O8bmNlbGxlbml5b3IiCisKKyM6IHVucGFjay10cmVlcy5jOjM0OQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHBhdGhzIGhhdmUgY29sbGlkZWQgKGUuZy4gY2FzZS1zZW5zaXRpdmUgcGF0aHNcbiIKKyJvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSkgYW5kIG9ubHkgb25lIGZyb20gdGhlIHNhbWVcbiIKKyJjb2xsaWRpbmcgZ3JvdXAgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZTpcbiIKK21zZ3N0ciAiIgorIkHFn2HEn8SxZGFraSB5b2xsYXIgYmlyYmlyaXlsZSDDp2FycMSxxZ90xLEgKMO2cm4uIELDnFnDnEsva8O8w6fDvGsgaGFyZiBkdXlhcmzEsVxuIgorIm9sbWF5YW4gZG9zeWEgc2lzdGVtaW5kZSBCw5xZw5xLL2vDvMOnw7xrIGhhcmYgZHV5YXJsxLEgeW9sbGFyKSB2ZSBheW7EsSDDp2FycMSxxZ9hblxuIgorImdydXB0YW4geWFsbsSxemNhIGJpciB0YW5lc2kgw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhOlxuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDQ1Cittc2dpZCAiVXBkYXRpbmcgaW5kZXggZmxhZ3MiCittc2dzdHIgIsSwbmRla3MgYmF5cmFrbGFyxLEgZ8O8bmNlbGxlbml5b3IiCisKKyM6IHVybG1hdGNoLmM6MTYzCittc2dpZCAiaW52YWxpZCBVUkwgc2NoZW1lIG5hbWUgb3IgbWlzc2luZyAnOi8vJyBzdWZmaXgiCittc2dzdHIgImdlw6dlcnNpeiBVUkwgxZ9lbWFzxLEgdmV5YSBla3NpayAnOi8vJyBla2kiCisKKyM6IHVybG1hdGNoLmM6MTg3IHVybG1hdGNoLmM6MzQ2IHVybG1hdGNoLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJVhYIGVzY2FwZSBzZXF1ZW5jZSIKK21zZ3N0ciAiZ2XDp2Vyc2l6ICVYWCBrYcOnxLHFnyBzxLFyYXPEsSIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAiYW5hIGJpbGdpc2F5YXIgZWtzaWsgdmUgxZ9lbWEgJ2ZpbGU6JyBkZcSfaWwiCisKKyM6IHVybG1hdGNoLmM6MjMyCittc2dpZCAiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIKK21zZ3N0ciAiYmlyICdmaWxlOicgVVJMJ3NpbmluIGthcMSxIG51bWFyYXPEsSBvbG1heWFiaWxpciIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICJhbmEgYmlsZ2lzYXlhciBhZMSxbmRhIGdlw6dlcnNpeiBrYXJha3RlciIKKworIzogdXJsbWF0Y2guYzoyOTIgdXJsbWF0Y2guYzozMDMKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJnZcOnZXJzaXoga2FwxLEgbnVtYXJhc8SxIgorCisjOiB1cmxtYXRjaC5jOjM3MQorbXNnaWQgImludmFsaWQgJy4uJyBwYXRoIHNlZ21lbnQiCittc2dzdHIgImdlw6dlcnNpeiAnLi4nIHlvbCBrZXNpbWkiCisKKyM6IHdhbGtlci5jOjE3MAorbXNnaWQgIkZldGNoaW5nIG9iamVjdHMiCittc2dzdHIgIk5lc25lbGVyIGdldGlyaWxpeW9yIgorCisjOiB3b3JrdHJlZS5jOjI1OSBidWlsdGluL2FtLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICInJXMnIG9rdW5hbWFkxLEiCisKKyM6IHdvcmt0cmVlLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXQgbWFpbiB3b3JraW5nIHRyZWUgaXMgbm90IHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSIKK21zZ3N0ciAiYW5hIMOnYWzEscWfbWEgYcSfYWPEsW5kYWtpICclcycgZGVwbyBkaXppbmkgZGXEn2lsIgorCisjOiB3b3JrdHJlZS5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbGUgZG9lcyBub3QgY29udGFpbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB3b3JraW5nIHRyZWUgbG9jYXRpb24iCittc2dzdHIgIiclcycgZG9zeWFzxLEgw6dhbMSxxZ9tYSBhxJ9hY8SxIGtvbnVtdW5hIG9sYW4gdGFtIHlvbHUgacOnZXJtaXlvciIKKworIzogd29ya3RyZWUuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiJyVzJyBtZXZjdXQgZGXEn2lsIgorCisjOiB3b3JrdHJlZS5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIC5naXQgZmlsZSwgZXJyb3IgY29kZSAlZCIKK21zZ3N0ciAiJyVzJyBiaXIgLmdpdCBkb3N5YXPEsSBkZcSfaWwsIGhhdGEga29kdSAlZCIKKworIzogd29ya3RyZWUuYzozNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCBiYWNrIHRvICclcyciCittc2dzdHIgIiclcycgxZ91bmEgZ2VyaSBpxZ9hcmV0IGV0bWl5b3I6ICclcyciCisKKyM6IHdyYXBwZXIuYzoxODYgd3JhcHBlci5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICInJXMnIG9rdW1hIHZlIHlhem1hIGnDp2luIGHDp8SxbGFtYWTEsSIKKworIzogd3JhcHBlci5jOjM4NyB3cmFwcGVyLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJyIKK21zZ3N0ciAiJyVzJyBlcmnFn2lsZW1peW9yIgorCisjOiB3cmFwcGVyLmM6NTk2Cittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJnZcOnZXJsaSDDp2FsxLHFn21hIGRpemluaSBhbMSxbmFtxLF5b3IiCisKKyM6IHd0LXN0YXR1cy5jOjE1OAorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiQmlybGXFn3RpcmlsbWVtacWfIHlvbGxhcjoiCisKKyM6IHd0LXN0YXR1cy5jOjE4NyB3dC1zdGF0dXMuYzoyMTkKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorIiAgKGhhesSxcmzEsWt0YW4gw6fEsWthcm1hayBpw6dpbiBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxkb3N5YT4uLi5cIiBrdWxsYW7EsW4pIgorCisjOiB3dC1zdGF0dXMuYzoxOTAgd3Qtc3RhdHVzLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisiICAoaGF6xLFybMSxa3RhbiDDp8Sxa2FybWFrIGnDp2luIFwiZ2l0IHJlc3RvcmUgLS1zb3VyY2U9JXMgLS1zdGFnZWQgPGRvc3lhPi4uLlwiICIKKyJrdWxsYW7EsW4pIgorCisjOiB3dC1zdGF0dXMuYzoxOTMgd3Qtc3RhdHVzLmM6MjI1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgIChoYXrEsXJsxLFrdGFuIMOnxLFrYXJtYWsgacOnaW4gXCJnaXQgcm0gLS1jYWNoZWQgPGRvc3lhPi4uLlwiIGt1bGxhbsSxbikiCisKKyM6IHd0LXN0YXR1cy5jOjE5NworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAoaGF6xLFybMSxxJ/EsSBiaXRpcm1layBpw6dpbiBcImdpdCBhZGQgPGRvc3lhPi4uLlwiIGt1bGxhbsSxbikiCisKKyM6IHd0LXN0YXR1cy5jOjE5OSB3dC1zdGF0dXMuYzoyMDMKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKyIgIChoYXrEsXJsxLHEn8SxIGJpdGlybWVrIGnDp2luIHV5Z3VuIGJpciBiacOnaW1kZSBcImdpdCBhZGQvcm0gPGRvc3lhPi4uLlwiICIKKyJrdWxsYW7EsW4pIgorCisjOiB3dC1zdGF0dXMuYzoyMDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAoaGF6xLFybMSxxJ/EsSBiaXRpcm1layBpw6dpbiBcImdpdCBybSA8ZG9zeWE+Li4uXCIga3VsbGFuxLFuKSIKKworIzogd3Qtc3RhdHVzLmM6MjExIHd0LXN0YXR1cy5jOjEwNzQKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIkfDtm5kZXJpbGVjZWsgZGXEn2nFn2lrbGlrbGVyOiIKKworIzogd3Qtc3RhdHVzLmM6MjM0IHd0LXN0YXR1cy5jOjEwODMKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIkfDtm5kZXJpIGnDp2luIGhhesSxcmxhbm1hbcSxxZ8gZGXEn2nFn2lrbGlrbGVyOiIKKworIzogd3Qtc3RhdHVzLmM6MjM4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgIChnw7ZuZGVyaWxlY2VrbGVyaSBnw7xuY2VsbGVtZWsgacOnaW4gXCJnaXQgYWRkIDxkb3N5YT4uLi5cIiBrdWxsYW7EsW4pIgorCisjOiB3dC1zdGF0dXMuYzoyNDAKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKGfDtm5kZXJpbGVjZWtsZXJpIGfDvG5jZWxsZW1layBpw6dpbiBcImdpdCBhZGQvcm0gPGRvc3lhPi4uLlwiIGt1bGxhbsSxbikiCisKKyM6IHd0LXN0YXR1cy5jOjI0MQorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmVzdG9yZSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisiICAow6dhbMSxxZ9tYSBkaXppbmluZGVraSBkZcSfacWfaWtsaWtsZXJpIGF0bWFrIGnDp2luIFwiZ2l0IHJlc3RvcmUgPGRvc3lhPi4uLlwiICIKKyJrdWxsYW7EsW4pIgorCisjOiB3dC1zdGF0dXMuYzoyNDMKK21zZ2lkICIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiCittc2dzdHIgIiAgKGFsdG1vZMO8bGxlcmRla2kgaXpsZW5tZXllbi9kZcSfacWfdGlyaWxlbiBpw6dlcmnEn2kgZ8O2bmRlciB2ZXlhIGF0KSIKKworIzogd3Qtc3RhdHVzLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgIChnw7ZuZGVyaWxlY2VrbGVyIGFyYXPEsW5hIGtveW1hayBpw6dpbiBcImdpdCAlcyA8ZG9zeWE+Li4uXCIga3VsbGFuxLFuKSIKKworIzogd3Qtc3RhdHVzLmM6MjY4Cittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAiaWtpbWl6IGRlIHNpbGRpazoiCisKKyM6IHd0LXN0YXR1cy5jOjI3MAorbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAiYml6IGVrbGVkaWs6IgorCisjOiB3dC1zdGF0dXMuYzoyNzIKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICJvbmxhciBzaWxkaToiCisKKyM6IHd0LXN0YXR1cy5jOjI3NAorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICJvbmxhciBla2xlZGk6IgorCisjOiB3dC1zdGF0dXMuYzoyNzYKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAiYml6IHNpbGRpazoiCisKKyM6IHd0LXN0YXR1cy5jOjI3OAorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICJpa2ltaXogZGUgZWtsZWRpazoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MAorbXNnaWQgImJvdGggbW9kaWZpZWQ6IgorbXNnc3RyICJpa2ltaXogZGUgZGXEn2nFn3RpcmRpazoiCisKKyM6IHd0LXN0YXR1cy5jOjI5MAorbXNnaWQgIm5ldyBmaWxlOiIKK21zZ3N0ciAieWVuaSBkb3N5YToiCisKKyM6IHd0LXN0YXR1cy5jOjI5MgorbXNnaWQgImNvcGllZDoiCittc2dzdHIgImtvcHlhbGFuZMSxOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk0Cittc2dpZCAiZGVsZXRlZDoiCittc2dzdHIgInNpbGluZGk6IgorCisjOiB3dC1zdGF0dXMuYzoyOTYKK21zZ2lkICJtb2RpZmllZDoiCittc2dzdHIgImRlxJ9pxZ90aXJpbGRpOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk4Cittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgInllbmlkZW4gYWRsYW5kxLFyxLFsZMSxOiIKKworIzogd3Qtc3RhdHVzLmM6MzAwCittc2dpZCAidHlwZWNoYW5nZToiCittc2dzdHIgInTDvHLDvCBkZcSfacWfdGlyaWxkaToiCisKKyM6IHd0LXN0YXR1cy5jOjMwMgorbXNnaWQgInVua25vd246IgorbXNnc3RyICJiaWxpbm1peW9yIgorCisjOiB3dC1zdGF0dXMuYzozMDQKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgImJpcmxlxZ90aXJpbG1lZGk6IgorCisjOiB3dC1zdGF0dXMuYzozODQKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICJ5ZW5pIGfDtm5kZXJpbGVyLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM4NgorbXNnaWQgIm1vZGlmaWVkIGNvbnRlbnQsICIKK21zZ3N0ciAiZGXEn2nFn3RpcmlsZW4gacOnZXJpaywgIgorCisjOiB3dC1zdGF0dXMuYzozODgKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICJpemxlbm1leWVuIGnDp2VyaWssICIKKworIzogd3Qtc3RhdHVzLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJpZXMiCittc2dzdHJbMF0gIlp1bGFuxLF6ZGEgxZ91IGFuZGEgJWQgZ2lyZGkgdmFyIgorbXNnc3RyWzFdICJadWxhbsSxemRhIMWfdSBhbmRhICVkIGdpcmRpIHZhciIKKworIzogd3Qtc3RhdHVzLmM6OTM4Cittc2dpZCAiU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoiCittc2dzdHIgIkRlxJ9pxZ90aXJpbGVuIGFuY2FrIGfDvG5jZWxsZW5tZXllbiBhbHRtb2TDvGxsZXI6IgorCisjOiB3dC1zdGF0dXMuYzo5NDAKK21zZ2lkICJTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICJHw7ZuZGVyaWxlY2VrIGFsdG1vZMO8bCBkZcSfacWfaWtsaWtsZXJpOiIKKworIzogd3Qtc3RhdHVzLmM6MTAyMgorbXNnaWQgIiIKKyJEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS5cbiIKKyJFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4iCittc2dzdHIgIiIKKyJZdWthcsSxZGFraSBzYXTEsXLEsSBkZcSfacWfdGlybWV5aW4gdmV5YSBrYWxkxLFybWF5xLFuLlxuIgorIkFsdMSxbmRha2kgaGVyIMWfZXkgeW9rIHNhecSxbGFjYWt0xLFyLiIKKworIzogd3Qtc3RhdHVzLmM6MTExNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gY29tcHV0ZSB0aGUgYnJhbmNoIGFoZWFkL2JlaGluZCB2YWx1ZXMuXG4iCisiWW91IGNhbiB1c2UgJy0tbm8tYWhlYWQtYmVoaW5kJyB0byBhdm9pZCB0aGlzLlxuIgorbXNnc3RyICIiCisiXG4iCisiRGFsIMO2bsO8bmRlL2Fya2FzxLFuZGEgZGXEn2VybGVyaW5pIGhlc2FwbGFtYSAlLjJmIHNhbml5ZSBzw7xyZMO8LlxuIgorIkJ1bmRhbiBrYcOnxLFubWFrIGnDp2luIC0tbm8tYWhlYWQtYmVoaW5kIGt1bGxhbmFiaWxpcnNpbml6LlxuIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ0Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICJCaXJsZcWfdGlyaWxtZW1pxZ8geW9sbGFyxLFuxLF6IHZhci4iCisKKyM6IHd0LXN0YXR1cy5jOjExNDcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIgICjDp2FrxLHFn21hbGFyxLEgb25hciB2ZSBcImdpdCBjb21taXRcIiDDp2FsxLHFn3TEsXIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ5Cittc2dpZCAiICAodXNlIFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiB0byBhYm9ydCB0aGUgbWVyZ2UpIgorbXNnc3RyICIgIChiaXJsZcWfdGlybWV5aSBpcHRhbCBldG1layBpw6dpbiBcImdpdCBtZXJnZSAtLWFib3J0XCIga3VsbGFuxLFuKSIKKworIzogd3Qtc3RhdHVzLmM6MTE1MworbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgIlTDvG0gw6dha8SxxZ9tYWxhciBvbmFyxLFsZMSxIGFuY2FrIHNpeiBow6Jsw6IgYmlybGXFn3Rpcml5b3JzdW51ei4iCisKKyM6IHd0LXN0YXR1cy5jOjExNTYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0XCIgdG8gY29uY2x1ZGUgbWVyZ2UpIgorbXNnc3RyICIgIChiaXJsZcWfdGlybWV5aSBzb251w6dsYW5kxLFybWFrIGnDp2luIFwiZ2l0IGNvbW1pdFwiIGt1bGxhbsSxbikiCisKKyM6IHd0LXN0YXR1cy5jOjExNjUKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4iCittc2dzdHIgIkJpciAnYW0nIG90dXJ1bXVudW4gdGFtIG9ydGFzxLFuZGFzxLFuxLF6LiIKKworIzogd3Qtc3RhdHVzLmM6MTE2OAorbXNnaWQgIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiTWV2Y3V0IHlhbWEgYm/Fny4iCisKKyM6IHd0LXN0YXR1cy5jOjExNzIKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjDp2FrxLHFn21hbGFyxLEgb25hciB2ZSBhcmTEsW5kYW4gXCJnaXQgYW0gLS1jb250aW51ZVwiIMOnYWzEscWfdMSxcikiCisKKyM6IHd0LXN0YXR1cy5jOjExNzQKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoYnUgeWFtYXnEsSBhdGxhbWFrIGnDp2luIFwiZ2l0IGFtIC0tc2tpcFwiIGt1bGxhbsSxbiIKKworIzogd3Qtc3RhdHVzLmM6MTE3NgorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAoaWxrIGRhbMSxIGVza2kgZHVydW11bmEgZ2V0aXJtZWsgacOnaW4gXCJnaXQgYW0gLS1hYm9ydFwiIGt1bGxhbsSxbikiCisKKyM6IHd0LXN0YXR1cy5jOjEzMDkKK21zZ2lkICJnaXQtcmViYXNlLXRvZG8gaXMgbWlzc2luZy4iCittc2dzdHIgImdpdC1yZWJhc2UtdG9kbyBla3NpayIKKworIzogd3Qtc3RhdHVzLmM6MTMxMQorbXNnaWQgIk5vIGNvbW1hbmRzIGRvbmUuIgorbXNnc3RyICJZZXJpbmUgZ2V0aXJpbGVuIGJpciBrb211dCB5b2suIgorCisjOiB3dC1zdGF0dXMuYzoxMzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhc3QgY29tbWFuZCBkb25lICglZCBjb21tYW5kIGRvbmUpOiIKK21zZ2lkX3BsdXJhbCAiTGFzdCBjb21tYW5kcyBkb25lICglZCBjb21tYW5kcyBkb25lKToiCittc2dzdHJbMF0gIlNvbiB5ZXJpbmUgZ2V0aXJpbGVuIGtvbXV0ICh0b3BsYW1kYSAlZCBrb211dCk6IgorbXNnc3RyWzFdICJTb24geWVyaW5lIGdldGlyaWxlbiBrb211dGxhciAodG9wbGFtZGEgJWQga29tdXQpOiIKKworIzogd3Qtc3RhdHVzLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiICAoZWsgYmlsZ2kgacOnaW4gJXMgZG9zeWFzxLFuYSBiYWvEsW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMzMwCittc2dpZCAiTm8gY29tbWFuZHMgcmVtYWluaW5nLiIKK21zZ3N0ciAiS2FsYW4ga29tdXQgeW9rLiIKKworIzogd3Qtc3RhdHVzLmM6MTMzMworIywgYy1mb3JtYXQKK21zZ2lkICJOZXh0IGNvbW1hbmQgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kKToiCittc2dpZF9wbHVyYWwgIk5leHQgY29tbWFuZHMgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kcyk6IgorbXNnc3RyWzBdICJTxLFyYWRha2kgeWVyaW5lIGdldGlyaWxlY2VrIGtvbXV0ICglZCBrYWxhbiBrb211dCk6IgorbXNnc3RyWzFdICJTxLFyYWRha2kgeWVyaW5lIGdldGlyaWxlY2VrIGtvbXV0bGFyICglZCBrYWxhbiBrb211dCk6IgorCisjOiB3dC1zdGF0dXMuYzoxMzQxCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIgIChnw7Zyw7xudMO8bGVtZSB2ZSBkw7x6ZW5sZW1lIGnDp2luIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIGt1bGxhbsSxbikiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIsWedSBhbmRhICclcycgZGFsxLFuxLEgJyVzJyDDvHplcmluZSB5ZW5pZGVuIHRlbWVsbGVuZGlyaXlvcnN1bnV6LiIKKworIzogd3Qtc3RhdHVzLmM6MTM1OAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nLiIKK21zZ3N0ciAixZ51IGFuZGEgeWVuaWRlbiB0ZW1lbGxlbmRpcm1lIHlhcG1ha3Rhc8SxbsSxei4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNzEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAow6dha8SxxZ9tYWxhcsSxIMOnw7Z6w7xuIHZlIGFyZMSxbmRhbiBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIMOnYWzEscWfdMSxcikiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzMKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKGJ1IHlhbWF5xLEgYXRsYW1hayBpw6dpbiBcImdpdCByZWJhc2UgLS1za2lwXCIga3VsbGFuxLFuKSIKKworIzogd3Qtc3RhdHVzLmM6MTM3NQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAoaWxrIGRhbMSxIMOnxLFrxLHFnyB5YXBtYWsgacOnaW4gXCJnaXQgcmViYXNlIC0tYWJvcnRcIiBrdWxsYW7EsW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMzgyCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICh0w7xtIMOnYWvEscWfbWFsYXIgb25hcsSxbGTEsTogXCJnaXQgcmViYXNlIC0tY29udGludWVcIiDDp2FsxLHFn3TEsXIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyLFnnUgYW5kYSAnJXMnIGRhbMSxbsSxICclcycgw7x6ZXJpbmUgeWVuaWRlbiB0ZW1lbGxlbmRpcmlya2VuIGJpciBnw7ZuZGVyaXlpICIKKyJwYXLDp2FsYXJhIGLDtmzDvHlvcnN1bnV6LiIKKworIzogd3Qtc3RhdHVzLmM6MTM5MQorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICIiCisixZ51IGFuZGEgYmlyIHllbmlkZW4gdGVtZWxsZW5kaXJtZSBzxLFyYXPEsW5kYSBiaXIgZ8O2bmRlcml5aSBwYXLDp2FsYXJhICIKKyJiw7Zsw7x5b3JzdW51ei4iCisKKyM6IHd0LXN0YXR1cy5jOjEzOTQKK21zZ2lkICIgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKMOHYWzEscWfbWEgZGl6aW5pbml6IHRlbWl6bGVuZGnEn2luZGUgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiDDp2FsxLHFn3TEsXIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyLFnnUgYW5kYSAnJXMnIGRhbMSxbsSxICclcycgw7x6ZXJpbmUgeWVuaWRlbiB0ZW1lbGxlbmRpcmlya2VuIGJpciBnw7ZuZGVyaXlpICIKKyJkw7x6ZW5saXlvcnN1bnV6LiIKKworIzogd3Qtc3RhdHVzLmM6MTQwMworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAiIgorIsWedSBhbmRhIGJpciB5ZW5pZGVuIHRlbWVsbGVuZGlybWUgc8SxcmFzxLFuZGEgYmlyIGfDtm5kZXJpeWkgZMO8emVubGl5b3JzdW51ei4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIgorbXNnc3RyICIgIChnZcOnZXJsaSBnw7ZuZGVyaXlpIGRlxJ9pxZ90aXJtZWsgacOnaW4gXCJnaXQgY29tbWl0IC0tYW1lbmRcIiBrdWxsYW7EsW4pIgorCisjOiB3dC1zdGF0dXMuYzoxNDA4Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIiCisiICAoZGXEn2nFn2lrbGlrbGVyaW5pemRlbiBtZW1udW5zYW7EsXogXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBrdWxsYW7EsW4pIgorCisjOiB3dC1zdGF0dXMuYzoxNDE5Cittc2dpZCAiQ2hlcnJ5LXBpY2sgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiU2XDpy1hbCDFn3UgYW5kYSBzw7xybWVrdGUuIgorCisjOiB3dC1zdGF0dXMuYzoxNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIsWedSBhbmRhICVzIGfDtm5kZXJpc2luaSBzZcOnLWFsIHlhcMSxeW9yc3VudXouIgorCisjOiB3dC1zdGF0dXMuYzoxNDI5Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKMOnYWvEscWfbWFsYXLEsSBvbmFyIHZlIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiDDp2FsxLHFn3TEsXIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDMyCittc2dpZCAiICAocnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB0byBjb250aW51ZSkiCittc2dzdHIgIiAgKHPDvHJkw7xybWVrIGnDp2luIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiDDp2FsxLHFn3TEsXIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM1Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHTDvG0gw6dha8SxxZ9tYWxhciBvbmFyxLFsZMSxOiBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgw6dhbMSxxZ90xLFyKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzNworbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIChidSB5YW1hecSxIGF0bGFtYWsgacOnaW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCIga3VsbGFuxLFuKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzOQorbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pIgorbXNnc3RyICIgIChzZcOnLWFsIGnFn2xlbWluaSBpcHRhbCBpw6dpbiBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIga3VsbGFuxLFuKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ0OQorbXNnaWQgIlJldmVydCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICJHZXJpeWUgYWwgxZ91IGFuZGEgc8O8cm1la3RlLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZXZlcnRpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAixZ51IGFuZGEgJXMgZ8O2bmRlcmlzaW5pIGdlcmkgYWzEsXlvcnN1bnV6LiIKKworIzogd3Qtc3RhdHVzLmM6MTQ1OAorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAow6dha8SxxZ9tYWxhcsSxIG9uYXIgdmUgXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIiDDp2FsxLHFn3TEsXIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDYxCittc2dpZCAiICAocnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIChzw7xyZMO8cm1layBpw6dpbiBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIMOnYWzEscWfdMSxcikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjQKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHTDvG0gw6dha8SxxZ9tYWxhciBvbmFyxLFsZMSxOiBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIMOnYWzEscWfdMSxcikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjYKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKGJ1IHlhbWF5xLEgYXRsYW1hayBpw6dpbiBcImdpdCByZXZlcnQgLS1za2lwXCIga3VsbGFuxLFuKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2OAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikiCittc2dzdHIgIiAgKGdlcmkgYWwgacWfbGVtaW5pIGlwdGFsIGnDp2luIFwiZ2l0IHJldmVydCAtLWFib3J0XCIga3VsbGFuxLFuKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJyVzJy4iCittc2dzdHIgIsWedSBhbmRhIGlraWxpIGFyYW1hIHlhcMSxeW9yc3VudXosICclcycgZGFsxLFuZGFuIGJhxZ9sYW5kxLEuIgorCisjOiB3dC1zdGF0dXMuYzoxNDgyCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLiIKK21zZ3N0ciAixZ51IGFuZGEgaWtpbGkgYXJhbWEgeWFwxLF5b3JzdW51eiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4NQorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAoaWxrIGRhbGEgZMO2bm1layBpw6dpbiBcImdpdCBiaXNlY3QgcmVzZXRcIiBrdWxsYW7EsW4pIgorCisjOiB3dC1zdGF0dXMuYzoxNjk0Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAixZ51IGRhbGRhOiAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDEKK21zZ2lkICJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICLFn3VudW4gw7x6ZXJpbmUgZXRraWxlxZ9pbWxpIHllbmlkZW4gdGVtZWxsZW5kaXJtZSBzw7xybWVrdGU6ICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMworbXNnaWQgInJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgIsWfdW51biDDvHplcmluZSB5ZW5pZGVuIHRlbWVsbGVuZGlybWUgc8O8cm1la3RlOiAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MTMKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICLFnnUgYW5kYSBiaXIgZGFsIMO8emVyaW5kZSBkZcSfaWwuIgorCisjOiB3dC1zdGF0dXMuYzoxNzMwCittc2dpZCAiSW5pdGlhbCBjb21taXQiCittc2dzdHIgIsSwbGsgZ8O2bmRlcmkiCisKKyM6IHd0LXN0YXR1cy5jOjE3MzEKK21zZ2lkICJObyBjb21taXRzIHlldCIKK21zZ3N0ciAiSGVuw7x6IGJpciBnw7ZuZGVyaSB5b2siCisKKyM6IHd0LXN0YXR1cy5jOjE3NDUKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIsSwemxlbm1leWVuIGRvc3lhbGFyIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ3Cittc2dpZCAiSWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiWW9rIHNhecSxbGFuIGRvc3lhbGFyIgorCisjOiB3dC1zdGF0dXMuYzoxNzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW50cmFja2VkIGZpbGVzLiAnc3RhdHVzIC11bm8nXG4iCisibWF5IHNwZWVkIGl0IHVwLCBidXQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZm9yZ2V0IHRvIGFkZFxuIgorIm5ldyBmaWxlcyB5b3Vyc2VsZiAoc2VlICdnaXQgaGVscCBzdGF0dXMnKS4iCittc2dzdHIgIiIKKyLEsHpsZW5tZXllbiBkb3N5YWxhcsSxbiBzYXnEsXAgZMO2a8O8bG1lc2kgJS4yZiBzYW5peWUgc8O8cmTDvC4gJ3N0YXR1cyAtdW5vJyBidW51XG4iCisiaMSxemxhbmTEsXJhYmlsaXIsIGFuY2FrIHllbmkgZG9zeWFsYXLEsSBrZW5kaW5pemluIGVrbGVtZXlpIHVudXRtYW1hc8SxXG4iCisia29udXN1bmRhIGRpa2thdGxpIG9sbWFsxLFzxLFuxLF6IChlayBiaWxnaSBpw6dpbiAnZ2l0IGhlbHAgc3RhdHVzJykuIgorCisjOiB3dC1zdGF0dXMuYzoxNzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIsSwemxlbm1leWVuIGRvc3lhbGFyIGxpc3RlbGVubWl5b3IlcyIKKworIzogd3Qtc3RhdHVzLmM6MTc1OQorbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiAoaXpsZW5tZXllbiBkb3N5YWxhcsSxIGfDtnN0ZXJtZWsgacOnaW4gLXUgc2XDp2VuZcSfaW5pIGt1bGxhbsSxbikiCisKKyM6IHd0LXN0YXR1cy5jOjE3NjUKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICJEZcSfacWfaWtsaWsgeW9rIgorCisjOiB3dC1zdGF0dXMuYzoxNzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICIiCisiR8O2bmRlcml5ZSBla2xlbmVuIGRlxJ9pxZ9pa2xpayB5b2sgKFwiZ2l0IGFkZFwiIHZlL3ZleWEgXCJnaXQgY29tbWl0IC1hXCIgIgorImt1bGxhbsSxbilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdFxuIgorbXNnc3RyICJHw7ZuZGVyaXllIGVrbGVuZW4gZGXEn2nFn2lrbGlrIHlva1xuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIiIKKyJnw7ZuZGVyaXllIGJpciDFn2V5IGVrbGVubWVkaSBhbmNhayBpemxlbm1leWVuIGRvc3lhbGFyIHZhciAoaXpsZW1layBpw6dpblxuIgorIlwiZ2l0IGFkZFwiIGt1bGxhbsSxbilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAiZ8O2bmRlcml5ZSBiaXIgxZ9leSBla2xlbm1lZGkgYW5jYWsgaXpsZW5tZXllbiBkb3N5YWxhciB2YXJcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAiIgorIkfDtm5kZXJpbGVjZWsgYmlyIMWfZXkgeW9rIChkb3N5YWxhciBvbHXFn3R1cnVuL2tvcHlhbGF5xLFuIHZlIGl6bGVtZWsgacOnaW4gIgorIlwiZ2l0IGFkZFwiIGt1bGxhbsSxbilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc4NSB3dC1zdGF0dXMuYzoxNzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0XG4iCittc2dzdHIgIkfDtm5kZXJpbGVjZWsgYmlyIMWfZXkgeW9rXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAiIgorIkfDtm5kZXJpbGVjZWsgYmlyIMWfZXkgeW9rIChpemxlbm1leWVuIGRvc3lhbGFyxLEgZ8O2c3Rlcm1layBpw6dpbiAtdSBrdWxsYW7EsW4pXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhblxuIgorbXNnc3RyICJHw7ZuZGVyaWxlY2VrIGJpciDFn2V5IHlvaywgw6dhbMSxxZ9tYSBhxJ9hY8SxIHRlbWl6XG4iCisKKyM6IHd0LXN0YXR1cy5jOjE5MDUKK21zZ2lkICJObyBjb21taXRzIHlldCBvbiAiCittc2dzdHIgIsWedXJhZGEgaGVuw7x6IGJpciBnw7ZuZGVyaSB5b2s6ICIKKworIzogd3Qtc3RhdHVzLmM6MTkwOQorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUQgKGRhbCB5b2spIgorCisjOiB3dC1zdGF0dXMuYzoxOTQwCittc2dpZCAiZGlmZmVyZW50IgorbXNnc3RyICJkZcSfacWfaWsiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDIgd3Qtc3RhdHVzLmM6MTk1MAorbXNnaWQgImJlaGluZCAiCittc2dzdHIgIsWfdW51biBhcmthc8SxbmRhOiAiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDUgd3Qtc3RhdHVzLmM6MTk0OAorbXNnaWQgImFoZWFkICIKK21zZ3N0ciAixZ91bnVuIMO2bsO8bmRlOiAiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgYWN0aW9uIGlzIGUuZy4gInB1bGwgd2l0aCByZWJhc2UiCisjOiB3dC1zdGF0dXMuYzoyNDcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiVzIHlhcMSxbGFtxLF5b3I6IEhhesSxcmxhbm1hbcSxxZ8gZGXEn2nFn2lrbGlrbGVyaW5peiB2YXIuIgorCisjOiB3dC1zdGF0dXMuYzoyNDc2Cittc2dpZCAiYWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICJFayBvbGFyYWssIGluZGVrc2luaXogZ8O2bmRlcmlsbWVtacWfIGRlxJ9pxZ9pa2xpa2xlciBpw6dlcml5b3IuIgorCisjOiB3dC1zdGF0dXMuYzoyNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiJXMgeWFwxLFsYW3EsXlvcjogxLBuZGVrc2luaXogZ8O2bmRlcmlsbWVtacWfIGRlxJ9pxZ9pa2xpa2xlciBpw6dlcml5b3IuIgorCisjOiBjb21wYXQvcHJlY29tcG9zZV91dGY4LmM6NTggYnVpbHRpbi9jbG9uZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgIiclcycgYmHEn2xhbnTEsXPEsSBrZXNpbGVtZWRpIgorCisjOiBidWlsdGluL2FkZC5jOjI2Cittc2dpZCAiZ2l0IGFkZCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBhZGQgWzxzZcOnZW5la2xlcj5dIFstLV0gPHlvbC1ibHJ0w6c+Li4uIgorCisjOiBidWlsdGluL2FkZC5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgImJla2xlbm1lZGlrIGRpZmYgZHVydW11ICVjIgorCisjOiBidWlsdGluL2FkZC5jOjkzIGJ1aWx0aW4vY29tbWl0LmM6Mjg4Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJkb3N5YWxhcsSxIGfDvG5jZWxsZW1lIGJhxZ9hcsSxc8SxeiIKKworIzogYnVpbHRpbi9hZGQuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAia2FsZMSxcjogJyVzJ1xuIgorCisjOiBidWlsdGluL2FkZC5jOjE3OAorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVmcmVzaGluZyB0aGUgaW5kZXg6IgorbXNnc3RyICLEsG5kZWtzaSB5ZW5pbGVkaWt0ZW4gc29ucmEgaGF6xLFybGFubWFtxLHFnyBkZcSfacWfaWtsaWtsZXI6IgorCisjOiBidWlsdGluL2FkZC5jOjI2NiBidWlsdGluL3Jldi1wYXJzZS5jOjg5OQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAixLBuZGVrcyBva3VuYW1hZMSxIgorCisjOiBidWlsdGluL2FkZC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiJyVzJyB5YXrEsW0gacOnaW4gYcOnxLFsYW1hZMSxLiIKKworIzogYnVpbHRpbi9hZGQuYzoyODEKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giCittc2dzdHIgIllhbWEgeWF6xLFsYW1hZMSxIgorCisjOiBidWlsdGluL2FkZC5jOjI4NAorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICJ5YW1hecSxIGTDvHplbmxlbWUgYmHFn2FyxLFzxLF6IgorCisjOiBidWlsdGluL2FkZC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICInJXMnIGRvc3lhIGJpbGdpbGVyaSBhbMSxbmFtYWTEsSIKKworIzogYnVpbHRpbi9hZGQuYzoyODkKK21zZ2lkICJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iCittc2dzdHIgIkJvxZ8geWFtYS4gxLBwdGFsIGVkaWxkaS4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICInJXMnIHV5Z3VsYW5hbWFkxLEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzAyCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICIiCisiQcWfYcSfxLFkYWtpIHlvbGxhciBzaXppbiAuZ2l0aWdub3JlIGRvc3lhbGFyxLFuxLF6xLFuIGJpcmkgdGFyYWbEsW5kYW4geW9rICIKKyJzYXnEsWzEsXlvcjpcbiIKKworIzogYnVpbHRpbi9hZGQuYzozMjIgYnVpbHRpbi9jbGVhbi5jOjkxMCBidWlsdGluL2ZldGNoLmM6MTYzIGJ1aWx0aW4vbXYuYzoxMjQKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTYgYnVpbHRpbi9wdWxsLmM6MjAzIGJ1aWx0aW4vcHVzaC5jOjU0OAorIzogYnVpbHRpbi9yZW1vdGUuYzoxNDIxIGJ1aWx0aW4vcm0uYzoyNDIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjUKK21zZ2lkICJkcnkgcnVuIgorbXNnc3RyICJzxLFuYW1hIHR1cnUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI1Cittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAiZXRraWxlxZ9pbWxpIHNlw6dpbSIKKworIzogYnVpbHRpbi9hZGQuYzozMjYgYnVpbHRpbi9jaGVja291dC5jOjE1MTEgYnVpbHRpbi9yZXNldC5jOjMwNworbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJwYXLDp2FsYXLEsSBldGtpbGXFn2ltbGkgb2xhcmFrIHNlw6ciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI3Cittc2dpZCAiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IgorbXNnc3RyICJnZcOnZXJsaSBkaWZmJ2kgZMO8emVubGUgdmUgdXlndWxhIgorCisjOiBidWlsdGluL2FkZC5jOjMyOAorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiYmHFn2thIHTDvHJsw7wgeW9rIHNhecSxbGFuIGRvc3lhbGFyxLFuIGVrbGVubWVzaW5lIGl6aW4gdmVyIgorCisjOiBidWlsdGluL2FkZC5jOjMyOQorbXNnaWQgInVwZGF0ZSB0cmFja2VkIGZpbGVzIgorbXNnc3RyICJpemxlbmVuIGRvc3lhbGFyxLEgZ8O8bmNlbGxlIgorCisjOiBidWlsdGluL2FkZC5jOjMzMAorbXNnaWQgInJlbm9ybWFsaXplIEVPTCBvZiB0cmFja2VkIGZpbGVzIChpbXBsaWVzIC11KSIKK21zZ3N0ciAiaXpsZW5lbiBkb3N5YWxhcsSxbiBzYXTEsXIgc29ubGFyxLFuxLEgeWVuaWRlbiBvbGHEn2FubGHFn3TEsXIgKC11IGltYSBlZGVyKSIKKworIzogYnVpbHRpbi9hZGQuYzozMzEKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgInlhbG7EsXpjYSB5b2x1biBzb25yYSBla2xlbmVjZcSfaSBnZXLDp2XEn2luaW4ga2F5ZMSxbsSxIHlheiIKKworIzogYnVpbHRpbi9hZGQuYzozMzIKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgInTDvG0gaXpsZW5lbi9pemxlbm1leWVuIGRvc3lhbGFyZGFuIGRlxJ9pxZ9pa2xpa2xlcmkgZWtsZSIKKworIzogYnVpbHRpbi9hZGQuYzozMzUKK21zZ2lkICJpZ25vcmUgcGF0aHMgcmVtb3ZlZCBpbiB0aGUgd29ya2luZyB0cmVlIChzYW1lIGFzIC0tbm8tYWxsKSIKK21zZ3N0ciAiw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhIGthbGTEsXLEsWxhbiB5b2xsYXLEsSB5b2sgc2F5ICgtLW5vLWFsbCBpbGUgYXluxLEpIgorCisjOiBidWlsdGluL2FkZC5jOjMzNworbXNnaWQgImRvbid0IGFkZCwgb25seSByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZWtsZW1lLCB5YWxuxLF6Y2EgaW5kZWtzaSB5ZW5pbGUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM4Cittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAieWFsbsSxemNhIGhhdGFsYXJkYW4gZG9sYXnEsSBla2xlbmVtZXllbiBkb3N5YWxhcsSxIGF0bGEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM5Cittc2dpZCAiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIgorbXNnc3RyICIiCisiZG9zeWFsYXLEsW4gLWVrc2lrIG9sc2FsYXIgYmlsZS0gc8SxbmFtYSB0dXJ1bmRhIHlvayBzYXnEsWzEsXAgc2F5xLFsbWFkxLHEn8SxbsSxICIKKyJkZW5ldGxlIgorCisjOiBidWlsdGluL2FkZC5jOjM0MSBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDQKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAibGlzdGVsZW5lbiBkb3N5YWxhcsSxbiDDp2FsxLHFn3TEsXLEsWxhYmlsaXIga8Sxc8SxbWxhcsSxbsSxIGdlw6dlcnNpeiBrxLFsIgorCisjOiBidWlsdGluL2FkZC5jOjM0MworbXNnaWQgIndhcm4gd2hlbiBhZGRpbmcgYW4gZW1iZWRkZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiZ8O2bcO8bMO8IGJpciBkZXBvIGVrbGVuaXJrZW4gdXlhciIKKworIzogYnVpbHRpbi9hZGQuYzozNDUKK21zZ2lkICJiYWNrZW5kIGZvciBgZ2l0IHN0YXNoIC1wYCIKK21zZ3N0ciAiJ2dpdCBzdGFzaCAtcCcgacOnaW4gYXJrYSB1w6ciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIklmIHlvdSBhZGRlZCB0aGlzIHBhdGggYnkgbWlzdGFrZSwgeW91IGNhbiByZW1vdmUgaXQgZnJvbSB0aGVcbiIKKyJpbmRleCB3aXRoOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2VlIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiTWV2Y3V0IGRlcG9udXp1biBpw6dpbmUgYmHFn2thIGJpciBnaXQgZGVwb3N1IGVrbGVkaW5pei5cbiIKKyJExLHFnyBkZXBvbnVuIGtsb25sYXLEsSBnw7Ztw7xsZW4gZGVwb251biBpw6dlcmnEn2luaSBpw6dlcm1leiB2ZSBvbmxhcsSxXG4iCisibmFzxLFsIGFsYWJpbGVjZcSfaW5pIGJpbGVtZXouIEXEn2VyIGJpciBhbHRtb2TDvGwgZWtsZW1layBpc3RlZGl5c2VuaXpcbiIKKyLFn3VudSBrdWxsYW7EsW46XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIkXEn2VyIGJ1IHlvbHUgeWFubMSxxZ9sxLFrbGEgZWtsZWRpeXNlbml6IGHFn2HEn8SxZGFraSBrb211dGxhIGluZGVrc3RlblxuIgorImthbGTEsXJhYmlsaXJzaW5pejpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIkVrIGJpbGdpIGnDp2luOiBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiLiIKKworIzogYnVpbHRpbi9hZGQuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5nIGVtYmVkZGVkIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAiZ8O2bcO8bMO8IGdpdCBkZXBvc3UgZWtsZW5peW9yOiAlcyIKKworIzogYnVpbHRpbi9hZGQuYzo0MTAKK21zZ2lkICIiCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKKyJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkSWdub3JlZEZpbGUgZmFsc2VcIiIKK21zZ3N0ciAiIgorIkdlcsOnZWt0ZW4gZWtsZW1layBpc3RpeW9yc2FuxLF6IC1mIGt1bGxhbsSxbi5cbiIKKyJCdSBpbGV0aXlpICdnaXQgY29uZmlnIGFkdmljZS5hZGRJZ25vcmVkRmlsZSBmYWxzZSdcbiIKKyJrdWxsYW5hcmFrIGthcGF0YWJpbGlyc2luaXouIgorCisjOiBidWlsdGluL2FkZC5jOjQxOQorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgImRvc3lhIGVrbGVtZSBiYcWfYXLEsXPEsXoiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ3IGJ1aWx0aW4vY29tbWl0LmM6MzQ4Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSwgLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGlsZSB1eXVtc3V6IgorCisjOiBidWlsdGluL2FkZC5jOjQ2NAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUsIC0tZWRpdCBpbGUgdXl1bXN1eiIKKworIzogYnVpbHRpbi9hZGQuYzo0NzYKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLUEgdmUgLXUga2FyxZ/EsWzEsWtsxLEgb2xhcmFrIHV5dW1sdSIKKworIzogYnVpbHRpbi9hZGQuYzo0NzkKK21zZ2lkICJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIgorbXNnc3RyICIiCisiLS1pZ25vcmUtbWlzc2luZyBzZcOnZW5lxJ9pIHlhbG7EsXpjYSAtLWRyeS1ydW4gc2XDp2VuZcSfaSBpbGUgYmlybGlrdGUgIgorImt1bGxhbsSxbGFiaWxpciIKKworIzogYnVpbHRpbi9hZGQuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1jaG1vZCBwYXJhbSAnJXMnIG11c3QgYmUgZWl0aGVyIC14IG9yICt4IgorbXNnc3RyICItLWNobW9kIHBhcmFtICclcycgeWEgLXggeWEgZGEgK3ggb2xtYWzEsWTEsXIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTAxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjc1IGJ1aWx0aW4vY29tbWl0LmM6MzU0CisjOiBidWlsdGluL3Jlc2V0LmM6MzI3IGJ1aWx0aW4vcm0uYzoyNzIgYnVpbHRpbi9zdGFzaC5jOjE1MDkKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHlvbCBiZWxpcnRlY2kgZGXEn2nFn2tlbmxlcmkgaWxlIHV5dW1zdXoiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTA4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjg3IGJ1aWx0aW4vY29tbWl0LmM6MzYwCisjOiBidWlsdGluL3Jlc2V0LmM6MzMzIGJ1aWx0aW4vcm0uYzoyNzggYnVpbHRpbi9zdGFzaC5jOjE1MTUKK21zZ2lkICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorbXNnc3RyICItLXBhdGhzcGVjLWZpbGUtbnVsLCAtLXBhdGhzcGVjLWZyb20tZmlsZSBnZXJla3Rpcml5b3IiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICJIacOnYmlyIMWfZXkgYmVsaXJ0aWxtZWRpLCBoacOnYmlyIMWfZXkgZWtsZW5tZWRpLlxuIgorCisjOiBidWlsdGluL2FkZC5jOjUxNAorbXNnaWQgIiIKKyJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKKyJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkRW1wdHlQYXRoc3BlYyBmYWxzZVwiIgorbXNnc3RyICIiCisiJ2dpdCBhZGQgLicgbcSxIGRlbWVrIGlzdGVkaW5pej9cbiIKKyJCdSBpbGV0aXlpICdnaXQgY29uZmlnIGFkdmljZS5hZGRFbXB0eVBhdGhzcGVjIGZhbHNlJ1xuIgorInlhcGFyYWsga2FwYXRhYmlsaXJzaW5pei4iCisKKyM6IGJ1aWx0aW4vYW0uYzozNTIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAieWF6YXIgYmV0acSfaSBheXLEscWfdMSxcsSxbGFtYWTEsSIKKworIzogYnVpbHRpbi9hbS5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICInJXMnIGFwcGx5cGF0Y2gtbXNnIGthbmNhc8SxIHRhcmFmxLFuZGFuIHNpbGluZGkiCisKKyM6IGJ1aWx0aW4vYW0uYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICJIYXRhbMSxIG9sdcWfdHVydWxtdcWfIGdpcmRpIHNhdMSxcsSxOiAnJXMnLiIKKworIzogYnVpbHRpbi9hbS5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiTm90bGFyxLFuICclcycga29udW11bmRhbiAnJXMnIGtvbnVtdW5hIGtvcHlhbGFubWFzxLEgYmHFn2FyxLFzxLF6IgorCisjOiBidWlsdGluL2FtLmM6NTQyCittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICJmc2VlayBiYcWfYXLEsXPEsXogb2xkdSIKKworIzogYnVpbHRpbi9hbS5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIKK21zZ3N0ciAiJyVzJyB5YW1hc8SxIGF5csSxxZ90xLFyxLFsYW1hZMSxIgorCisjOiBidWlsdGluL2FtLmM6Nzk1Cittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgIkJpciBrZXJlZGUgeWFsbsSxemNhIGJpciBTdEdJVCB5YW1hIHNlcmlzaSB1eWd1bGFuYWJpbGlyIgorCisjOiBidWlsdGluL2FtLmM6ODQzCittc2dpZCAiaW52YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgImdlw6dlcnNpeiB6YW1hbiBkYW1nYXPEsSIKKworIzogYnVpbHRpbi9hbS5jOjg0OCBidWlsdGluL2FtLmM6ODYwCittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgImdlw6dlcnNpeiB0YXJpaCBzYXTEsXLEsSIKKworIzogYnVpbHRpbi9hbS5jOjg1NQorbXNnaWQgImludmFsaWQgdGltZXpvbmUgb2Zmc2V0IgorbXNnc3RyICJnZcOnZXJzaXogemFtYW4gZGlsaW1pIG9mc2V0aSIKKworIzogYnVpbHRpbi9hbS5jOjk0OAorbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAiWWFtYSBiacOnaW1pIGFsZ8SxbGFtYXPEsSBiYcWfYXLEsXPEsXouIgorCisjOiBidWlsdGluL2FtLmM6OTUzIGJ1aWx0aW4vY2xvbmUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiJyVzJyBkaXppbmkgb2x1xZ90dXJ1bGFtYWTEsSIKKworIzogYnVpbHRpbi9hbS5jOjk1OAorbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAiWWFtYWxhciBwYXLDp2FsYW7EsXAgYsO2bMO8bmVtZWRpLiIKKworIzogYnVpbHRpbi9hbS5jOjEwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiVzIC0tY29udGludWVcIi4iCittc2dzdHIgIkJ1IHNvcnVudSDDp8O2emTDvMSfw7xuw7x6ZGUgXCIlcyAtLWNvbnRpbnVlXCIgw6dhbMSxxZ90xLFyxLFuLiIKKworIzogYnVpbHRpbi9hbS5jOjEwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIgorbXNnc3RyICJFxJ9lciBidSB5YW1hecSxIGF0bGFtYXnEsSB5ZcSfbGl5b3JzYW7EsXogXCIlcyAtLXNraXBcIiDDp2FsxLHFn3TEsXLEsW4uIgorCisjOiBidWlsdGluL2FtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iCittc2dzdHIgIiIKKyLEsGxrIGRhbMSxIGVza2kgZHVydW11bmEgZ2V0aXJpcCB5YW1hbGFtYXnEsSBkdXJkdXJtYWsgacOnaW4gXCIlcyAtLWFib3J0XCIgIgorIsOnYWzEscWfdMSxci4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTc0Cittc2dpZCAiUGF0Y2ggc2VudCB3aXRoIGZvcm1hdD1mbG93ZWQ7IHNwYWNlIGF0IHRoZSBlbmQgb2YgbGluZXMgbWlnaHQgYmUgbG9zdC4iCittc2dzdHIgIiIKKyJZYW1hIGZvcm1hdD1mbG93ZWQgaWxlIGfDtm5kZXJpbGRpOyBzYXTEsXIgc29ubGFyxLFuZGFraSBib8WfbHVrIGtheWJvbG11xZ8gIgorIm9sYWJpbGlyLiIKKworIzogYnVpbHRpbi9hbS5jOjEyMDIKK21zZ2lkICJQYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgIllhbWEgYm/Fny4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYXV0aG9yIGxpbmUgaW4gY29tbWl0ICVzIgorbXNnc3RyICIlcyBnw7ZuZGVyaXNpbmRlIHlhemFyIHNhdMSxcsSxIGVrc2lrIgorCisjOiBidWlsdGluL2FtLmM6MTI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICUuKnMiCittc2dzdHIgImdlw6dlcnNpeiB0YW7EsW1sYW1hIHNhdMSxcsSxOiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTQ4OQorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIiIKKyJEZXBvIDMgecO2bmzDvCBiaXJsZcWfdGlybWV5ZSBnZXJpIMOnZWtpbGViaWxtZSBpw6dpbiBnZXJla2VuIGlraWxpIG5lc25lbGVyZSBpeWUgIgorImRlxJ9pbC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDkxCittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAiQmlyIHRlbWVsIGHEn2FjxLFuxLEgeWVuaWRlbiB5YXBtYWsgacOnaW4gaW5kZWtzIGJpbGdpc2kga3VsbGFuxLFsxLF5b3IuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTEwCittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorIllhbWFuxLF6xLEgZWxsZSBtaSBkw7x6ZW5sZWRpbml6P1xuIgorIktlbmRpIGluZGVrc2luZGUga2F5ZMSxIHlhesSxbGFuIGlraWxpIG5lc25lbGVyZSB1eWd1bGFuYW3EsXlvci4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTE2Cittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICJUZW1lbGkgeWFtYWxhbWF5YSB2ZSAzIHnDtm5sw7wgYmlybGXFn3Rpcm1leWUgZ2VyaSDDp2VraWxpbml5b3IuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTQyCittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIKK21zZ3N0ciAiRGXEn2nFn2lrbGlrbGVyIGJpcmxlxZ90aXJpbGVtZWRpLiIKKworIzogYnVpbHRpbi9hbS5jOjE1NzQKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICJib8WfIGJpciBnZcOnbWnFn2UgdXlndWxhbsSxeW9yIgorCisjOiBidWlsdGluL2FtLmM6MTYyMSBidWlsdGluL2FtLmM6MTYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgInPDvHJkw7xyw7xsZW1peW9yOiAlcyB5b2siCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjQzCittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICJHw7ZuZGVyaSBnw7Z2ZGVzaToiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgIiIKKyJVeWd1bGE/IFt5XWV2ZXQvW25daGF5xLFyL2TDvHpbZV1ubGUvW3ZdeWFtYXnEsSBnw7Zyw7xudMO8bGUvdMO8bcO8bsO8IGtbYV1idWwgZXQ6ICIKKworIzogYnVpbHRpbi9hbS5jOjE3MDAgYnVpbHRpbi9jb21taXQuYzozOTgKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAiaW5kZWtzIGRvc3lhc8SxIHlhesSxbGFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAiS2lybGkgaW5kZWtzOiBZYW1hbGFyIHV5Z3VsYW5hbcSxeW9yIChraXJsaTogJXMpIgorCisjOiBidWlsdGluL2FtLmM6MTc0NCBidWlsdGluL2FtLmM6MTgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZzogJS4qcyIKK21zZ3N0ciAiVXlndWxhbsSxeW9yOiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc2MQorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAiRGXEn2nFn2lrbGlrIHlvayAtLSBZYW1hIGhhbGloYXrEsXJkYSB1eWd1bGFuZMSxLiIKKworIzogYnVpbHRpbi9hbS5jOjE3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICVzICUuKnMiCittc2dzdHIgIllhbWEgxZ91cmFkYSBiYcWfYXLEsXPEsXogb2xkdTogJXMgJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE3NzEKK21zZ2lkICJVc2UgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaD1kaWZmJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAiIgorIkJhxZ9hcsSxc8SxeiBvbGFuIHlhbWF5xLEgZ8O2cm1layBpw6dpbiAnZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoPWRpZmYnIGt1bGxhbsSxbiIKKworIzogYnVpbHRpbi9hbS5jOjE4MTUKK21zZ2lkICIiCisiTm8gY2hhbmdlcyAtIGRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/XG4iCisiSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlXG4iCisiYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZXM7IHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyBwYXRjaC4iCittc2dzdHIgIiIKKyJEZcSfacWfaWtsaWsgeW9rIC0gJ2dpdCBhZGQnIHlhcG1hecSxIG3EsSB1bnV0dHVudXo/XG4iCisiSGF6xLFybGFuYWNhayBiYcWfa2EgYmlyIMWfZXkga2FsbWFkxLF5c2EgYsO8ecO8ayBvbGFzxLFsxLFrbGEgYmHFn2thIGJpciDFn2V5XG4iCisiYXluxLEgZGXEn2nFn2lrbGlrbGVyaSB1eWd1bGFtxLHFnyBvbGFiaWxpcjsgYnUgeWFtYXnEsSBhdGxhbWFrIGlzdGV5ZWJpbGlyc2luaXouIgorCisjOiBidWlsdGluL2FtLmM6MTgyMgorbXNnaWQgIiIKKyJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4LlxuIgorIllvdSBzaG91bGQgJ2dpdCBhZGQnIGVhY2ggZmlsZSB3aXRoIHJlc29sdmVkIGNvbmZsaWN0cyB0byBtYXJrIHRoZW0gYXMgIgorInN1Y2guXG4iCisiWW91IG1pZ2h0IHJ1biBgZ2l0IHJtYCBvbiBhIGZpbGUgdG8gYWNjZXB0IFwiZGVsZXRlZCBieSB0aGVtXCIgZm9yIGl0LiIKK21zZ3N0ciAiIgorIsSwbmRla3Npbml6ZGUgaMOibMOiIGJpcmxlxZ90aXJpbG1lbWnFnyB5b2xsYXIgdmFyLlxuIgorIsOHYWvEscWfbWFsYXLEsSDDp8O2esO8bGVuIHTDvG0gZG9zeWFsYXLEsSAnZ2l0IGFkZCcgaWxlIMOnw7Z6w7xsZMO8IG9sYXJhayAiCisiaW1sZW1lbGlzaW5pei5cbiIKKyJCaXIgZG9zeWFuxLFuIFwib25sYXIgc2lsZGlcIiBvbGR1xJ91bnUga2FidWwgZXRtZWsgacOnaW4gZG9zeWEgaWxlICdnaXQgcm0nICIKKyJ5YXBhYmlsaXJzaW5pei4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTI5IGJ1aWx0aW4vYW0uYzoxOTMzIGJ1aWx0aW4vYW0uYzoxOTQ1IGJ1aWx0aW4vcmVzZXQuYzozNDYKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiJyVzJyBuZXNuZXNpIGF5csSxxZ90xLFyxLFsYW1hZMSxLiIKKworIzogYnVpbHRpbi9hbS5jOjE5ODEKK21zZ2lkICJmYWlsZWQgdG8gY2xlYW4gaW5kZXgiCittc2dzdHIgImluZGVrcyB0ZW1pemxlbmVtZWRpIgorCisjOiBidWlsdGluL2FtLmM6MjAyNQorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICIiCisiU29uICdhbScgYmHFn2FyxLFzxLF6bMSxxJ/EsW5kYW4gYnUgeWFuYSBIRUFEJ2kgaGFyZWtldCBldHRpcm1pxZ8gZ8O2csO8bsO8eW9yc3VudXouXG4iCisiT1JJR19IRUFEJ2UgZ2VyaSBzYXLEsWxtxLF5b3IuIgorCisjOiBidWlsdGluL2FtLmM6MjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXBhdGNoLWZvcm1hdDogJXMiCittc2dzdHIgIkdlw6dlcnNpeiAtLXBhdGNoLWZvcm1hdCBkZcSfZXJpOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjIxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1zaG93LWN1cnJlbnQtcGF0Y2g6ICVzIgorbXNnc3RyICItLXNob3ctY3VycmVudC1wYXRjaCBpw6dpbiBnZcOnZXJzaXogZGXEn2VyOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjIxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMiCittc2dzdHIgIi0tc2hvdy1jdXJyZW50LXBhdGNoPSVzLCAtLXNob3ctY3VycmVudC1wYXRjaD0lcyBpbGUgdXl1bXN1eiIKKworIzogYnVpbHRpbi9hbS5jOjIyMDcKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXSIKK21zZ3N0ciAiZ2l0IGFtIFs8c2XDp2VuZWtsZXI+XSBbKDxtYm94PiB8IDxwb3N0YS1kaXppbj4pLi4uXSIKKworIzogYnVpbHRpbi9hbS5jOjIyMDgKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKK21zZ3N0ciAiZ2l0IGFtIFs8c2XDp2VuZWtsZXI+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorCisjOiBidWlsdGluL2FtLmM6MjIxNAorbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJldGtpbGXFn2ltbGkgb2xhcmFrIMOnYWzEscWfdMSxciIKKworIzogYnVpbHRpbi9hbS5jOjIyMTYKK21zZ2lkICJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIKK21zZ3N0ciAidGFyaWhpIHNlw6dlbmVrIC0tIG5vLW9wIgorCisjOiBidWlsdGluL2FtLmM6MjIxOAorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICJnZXJla2lyc2UgMyB5w7ZubMO8IGJpcmxlxZ90aXJtZXllIGdlcmkgw6dla2lsbWV5ZSBpemluIHZlciIKKworIzogYnVpbHRpbi9hbS5jOjIyMTkgYnVpbHRpbi9pbml0LWRiLmM6NDk0IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTgKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA0IGJ1aWx0aW4vc3Rhc2guYzo4MTIKK21zZ2lkICJiZSBxdWlldCIKK21zZ3N0ciAic2Vzc2l6IG9sIgorCisjOiBidWlsdGluL2FtLmM6MjIyMQorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImfDtm5kZXJpIGlsZXRpc2luZSBiaXIgU2lnbmVkLW9mZi1ieSBzYXTEsXLEsSBla2xlIgorCisjOiBidWlsdGluL2FtLmM6MjIyNAorbXNnaWQgInJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpIgorbXNnc3RyICJ1dGY4IG9sYXJhayB5ZW5pZGVuIGtvZGxhICjDtm50YW7EsW1sxLEpIgorCisjOiBidWlsdGluL2FtLmM6MjIyNgorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgIidnaXQtbWFpbGluZm8neWEgLWsgYmF5cmHEn8SxbsSxIGdlw6dpciIKKworIzogYnVpbHRpbi9hbS5jOjIyMjgKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICInZ2l0LW1haWxpbmZvJ3lhIC1iIGJheXJhxJ/EsW7EsSBnZcOnaXIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAiJ2dpdC1tYWlsaW5mbyd5YSAtbSBiYXlyYcSfxLFuxLEgZ2XDp2lyIgorCisjOiBidWlsdGluL2FtLmM6MjIzMgorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgIidnaXQtbWFpbHNwbGl0J2UgbWJveCBiacOnaW1pIGnDp2luIC0ta2VlcC1jciBiYXlyYcSfxLFuxLEgZ2XDp2lyIgorCisjOiBidWlsdGluL2FtLmM6MjIzNQorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICIiCisiJ2dpdC1tYWlsc3BsaXQnZSAnYW0ua2VlcGNyJ2RhbiBiYcSfxLFtc8SxeiBvbGFyYWsgLS1rZWVwLWNyIGJheXJhxJ/EsW7EsSBnZcOnaXJtZSIKKworIzogYnVpbHRpbi9hbS5jOjIyMzgKK21zZ2lkICJzdHJpcCBldmVyeXRoaW5nIGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUiCittc2dzdHIgImJpciBrZXNpbSDDp2l6Z2lzaW5kZW4gw7ZuY2VraSBoZXIgxZ9leWkgw6fEsWthciIKKworIzogYnVpbHRpbi9hbS5jOjIyNDAgYnVpbHRpbi9hbS5jOjIyNDMgYnVpbHRpbi9hbS5jOjIyNDYgYnVpbHRpbi9hbS5jOjIyNDkKKyM6IGJ1aWx0aW4vYW0uYzoyMjUyIGJ1aWx0aW4vYW0uYzoyMjU1IGJ1aWx0aW4vYW0uYzoyMjU4IGJ1aWx0aW4vYW0uYzoyMjYxCisjOiBidWlsdGluL2FtLmM6MjI2NworbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgImdpdC1hcHBseSBhcmFjxLFsxLHEn8SxeWxhIGdlw6dpciIKKworIzogYnVpbHRpbi9hbS5jOjIyNTcgYnVpbHRpbi9jb21taXQuYzoxMzkxIGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MAorIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczIGJ1aWx0aW4vZ3JlcC5jOjg3MSBidWlsdGluL21lcmdlLmM6MjUwCisjOiBidWlsdGluL3B1bGwuYzoxNDAgYnVpbHRpbi9wdWxsLmM6MTk5IGJ1aWx0aW4vcmViYXNlLmM6MTUwNQorIzogYnVpbHRpbi9yZXBhY2suYzozMTUgYnVpbHRpbi9yZXBhY2suYzozMTkgYnVpbHRpbi9yZXBhY2suYzozMjEKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAgYnVpbHRpbi9zaG93LXJlZi5jOjE3MiBidWlsdGluL3RhZy5jOjQwMworIzogcGFyc2Utb3B0aW9ucy5oOjE1NCBwYXJzZS1vcHRpb25zLmg6MTc1IHBhcnNlLW9wdGlvbnMuaDozMTYKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2FtLmM6MjI2MyBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTYgYnVpbHRpbi90YWcuYzo0MzcgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgImJpw6dpbSIKKworIzogYnVpbHRpbi9hbS5jOjIyNjQKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgInlhbWEgYmnDp2ltaSIKKworIzogYnVpbHRpbi9hbS5jOjIyNzAKK21zZ2lkICJvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMiCittc2dzdHIgInlhbWEgYmHFn2FyxLFzxLF6IG9sZHXEn3VuZGEgaGF0YSBpbGV0aXNpbmkgZ2XDp2Vyc2l6IGvEsWwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjcyCittc2dpZCAiY29udGludWUgYXBwbHlpbmcgcGF0Y2hlcyBhZnRlciByZXNvbHZpbmcgYSBjb25mbGljdCIKK21zZ3N0ciAiYmlyIMOnYWvEscWfbWF5xLEgw6fDtnpkw7xrdGVuIHNvbnJhIHlhbWFsYXLEsSB1eWd1bGFtYXnEsSBzw7xyZMO8ciIKKworIzogYnVpbHRpbi9hbS5jOjIyNzUKK21zZ2lkICJzeW5vbnltcyBmb3IgLS1jb250aW51ZSIKK21zZ3N0ciAiLS1jb250aW51ZSBlxZ9hbmxhbWzEsWxhcsSxIgorCisjOiBidWlsdGluL2FtLmM6MjI3OAorbXNnaWQgInNraXAgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgImdlw6dlcmxpIHlhbWF5xLEgYXRsYSIKKworIzogYnVpbHRpbi9hbS5jOjIyODEKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICJpbGsgZGFsxLEgZXNraSBkdXJ1bXVuYSBnZXRpciB2ZSB5YW1hbGFtYSBpxZ9sZW1pbmkgaXB0YWwgZXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg0Cittc2dpZCAiYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbiBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzLiIKK21zZ3N0ciAieWFtYWxhbWEgacWfbGVtaW5pIGlwdGFsIGV0IGFuY2FrIEhFQUQnaSBvbGR1xJ91IHllcmRlIGLEsXJhayIKKworIzogYnVpbHRpbi9hbS5jOjIyODgKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBiZWluZyBhcHBsaWVkIgorbXNnc3RyICJ1eWd1bGFubWFrdGEgb2xhbiB5YW1hecSxIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjkzCittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICJnw7ZuZGVyaWNpIHRhcmloaSBoYWtrxLFuZGEgeWFsYW4gc8O2eWxlIgorCisjOiBidWlsdGluL2FtLmM6MjI5NQorbXNnaWQgInVzZSBjdXJyZW50IHRpbWVzdGFtcCBmb3IgYXV0aG9yIGRhdGUiCittc2dzdHIgInlhemFyIHRhcmloaSBpw6dpbiBnZcOnZXJsaSB6YW1hbiBkYW1nYXPEsW7EsSBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk3IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMjAgYnVpbHRpbi9jb21taXQuYzoxNTEyCisjOiBidWlsdGluL21lcmdlLmM6Mjg3IGJ1aWx0aW4vcHVsbC5jOjE3NCBidWlsdGluL3JlYmFzZS5jOjUxNworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTU2IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE3IGJ1aWx0aW4vdGFnLmM6NDE4Cittc2dpZCAia2V5LWlkIgorbXNnc3RyICJrZXktaWQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk4IGJ1aWx0aW4vcmViYXNlLmM6NTE4IGJ1aWx0aW4vcmViYXNlLmM6MTU1NworbXNnaWQgIkdQRy1zaWduIGNvbW1pdHMiCittc2dzdHIgIkdQRyBpbXphbMSxIGfDtm5kZXJpbGVyIgorCisjOiBidWlsdGluL2FtLmM6MjMwMQorbXNnaWQgIihpbnRlcm5hbCB1c2UgZm9yIGdpdC1yZWJhc2UpIgorbXNnc3RyICIoZ2l0LXJlYmFzZSBpw6dpbiBpw6cga3VsbGFuxLFtKSIKKworIzogYnVpbHRpbi9hbS5jOjIzMTkKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKyItYi8tLWJpbmFyeSBzZcOnZW5lxJ9pIHV6dW5jYSBiaXIgc8O8cmVkaXIgZMO8emfDvG4gw6dhbMSxxZ9txLF5b3JkdSB2ZVxuIgorInlha8SxbmRhIGthbGTEsXLEsWxhY2FrLiBMw7x0ZmVuIGFydMSxayBrdWxsYW5tYXnEsW4uIgorCisjOiBidWlsdGluL2FtLmM6MjMyNgorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiaW5kZWtzIG9rdW5hbWFkxLEiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJXMgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAiIgorIkJpciDDtm5jZWtpIHllbmlkZW4gdGVtZWxsZW5kaXJtZSBkaXppbmkgJXMgaMOibMOiIG1ldmN1dCBhbmNhayBtYm94IHZlcmlsZGkuIgorCisjOiBidWlsdGluL2FtLmM6MjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3RyYXkgJXMgZGlyZWN0b3J5IGZvdW5kLlxuIgorIlVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIKK21zZ3N0ciAiIgorIkJhxZ/EsWJvxZ8gJXMgZGl6aW5pIGJ1bHVuZHUuXG4iCisiS2FsZMSxcm1hayBpw6dpbiBcImdpdCBhbSAtLWFib3J0XCIga3VsbGFuxLFuLiIKKworIzogYnVpbHRpbi9hbS5jOjIzNzEKK21zZ2lkICJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIgorbXNnc3RyICJZYXDEsWxtYWt0YSBvbGFuIGJpciDDp8O2esO8bSBpxZ9sZW1pIHlvaywgc8O8cmTDvHJtw7x5b3J1ei4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzgxCittc2dpZCAiaW50ZXJhY3RpdmUgbW9kZSByZXF1aXJlcyBwYXRjaGVzIG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgImV0a2lsZcWfaW1saSBraXAgeWFtYW7EsW4ga29tdXQgc2F0xLFyxLFuZGEgb2xtYXPEsW7EsSBnZXJla3RpcmlyIgorCisjOiBidWlsdGluL2FwcGx5LmM6OAorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbPHNlw6dlbmVrbGVyPl0gWzxwYXRjaD4uLi5dIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICJhcsWfaXYgZG9zeWFzxLEgJyVzJyBvbHXFn3R1cnVsYW1hZMSxIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgIsOnxLFrdMSxIHllbmlkZW4gecO2bmxlbmRpcmlsZW1lZGkiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IFVSTCdzaSBvbG1heWFuIHV6YWsga29udW0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IEFDSy9OQUsgYmVrbGVuaXlvcmR1LCBmbG/FnyBwYWtldGkgYWzEsW5kxLEiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2ZSBOQUNLICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NQorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IFByb3Rva29sIGhhdGFzxLEiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY5Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlOiBmbG/FnyBiZWtsZW5peW9yZHUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMgorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8YmFkX3Rlcm0+IDxnb29kX3Rlcm0+IgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8a8O2dMO8X3RlcmltPiA8aXlpX3RlcmltPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI0Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNQorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzxnw7ZuZGVyaT5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjYKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPHN0YXRlPiA8cmV2aXNpb24+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPGR1cnVtPiA8cmV2aXp5b24+IDxpeWlfdGVyaW0+ICIKKyI8a8O2dMO8X3RlcmltPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI3Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxjb21tYW5kPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxrb211dD4gPGl5aV90ZXJpbT4gIgorIjxrw7Z0w7xfdGVyaW0+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjgKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA8Z29vZF90ZXJtPiA8YmFkX3Rlcm0+IFs8dGVybT5dIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPGl5aV90ZXJpbT4gPGvDtnTDvF90ZXJpbT4gWzx0ZXJpbT5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzAKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PHRlcm0+XVstLW5vLWNoZWNrb3V0XSBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVyaW0+IC0tdGVybS17bmV3LGJhZH0iCisiPTx0ZXJpbT5dWy0tbm8tY2hlY2tvdXRdIFs8a8O2dMO8PiBbPGl5aT4uLi5dXSBbLS1dIFs8eW9sbGFyPi4uLl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRlcm0iCittc2dzdHIgIiclcycgZ2XDp2VybGkgYmlyIHRlcmltIGRlxJ9pbCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHVzZSB0aGUgYnVpbHRpbiBjb21tYW5kICclcycgYXMgYSB0ZXJtIgorbXNnc3RyICInJXMgeWVybGXFn2lrIGtvbXV0dSBiaXIgdGVyaW0gb2xhcmFrIGt1bGxhbsSxbGFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSB0ZXJtICclcyciCittc2dzdHIgIiclcycgdGVyaW1pbmluIGFubGFtxLEgZGXEn2nFn3RpcmlsZW1peW9yIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTExCittc2dpZCAicGxlYXNlIHVzZSB0d28gZGlmZmVyZW50IHRlcm1zIgorbXNnc3RyICJsw7x0ZmVuIGlraSBkZcSfacWfaWsgdGVyaW0ga3VsbGFuxLFuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTE4Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGhlIGZpbGUgQklTRUNUX1RFUk1TIgorbXNnc3RyICJCSVNFQ1RfVEVSTVMgZG9zeWFzxLEgYcOnxLFsYW1hZMSxIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLlxuIgorbXNnc3RyICLEsGtpbGkgYXJhbWEgeWFwbcSxeW9ydXouXG4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIiclcycgZ2XDp2VybGkgYmlyIGfDtm5kZXJpIGRlxJ9pbCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICclcycuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisiT3JpamluYWwgSEVBRCAnJXMnIMOnxLFrxLHFn8SxIHlhcMSxbGFtYWTEsS4gJ2dpdCBiaXNlY3QgcmVzZXQgPGfDtm5kZXJpPicgZGVuZXlpbi4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJXMiCittc2dzdHIgIkhhdGFsxLEgYmlzZWN0X3dyaXRlIGRlxJ9pxZ9rZW5pOiAlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBnZXQgdGhlIG9pZCBvZiB0aGUgcmV2ICclcyciCittc2dzdHIgIiclcycgcmV2aXp5b251bnVuIG9pZCdzaSBhbMSxbmFtYWTEsSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBvcGVuIHRoZSBmaWxlICclcyciCittc2dzdHIgIiclcycgZG9zeWFzxLEgYcOnxLFsYW1hZMSxIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWFuZDogeW91J3JlIGN1cnJlbnRseSBpbiBhICVzLyVzIGJpc2VjdCIKK21zZ3N0ciAiR2XDp2Vyc2l6IGtvbXV0OiDFnnUgYW5kYSBiaXIgJXMvJXMgaWtpbGkgYXJhbWFzxLFuZGFzxLFuxLF6IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorIkJhbmEgZW4gYXrEsW5kYW4gYmlyICVzIHZlICVzIHJldml6eW9udSB2ZXJtZW5peiBnZXJla2l5b3IuXG4iCisiQnVudW4gacOnaW4gXCJnaXQgYmlzZWN0ICVzXCIgdmUgXCJnaXQgYmlzZWN0ICVzXCIga3VsbGFuYWJpbGlyc2luaXouIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJZb3UgdGhlbiBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKyJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIgorbXNnc3RyICIiCisiXCJnaXQgYmlzZWN0IHN0YXJ0XCIgaWxlIGJhxZ9sYW1hbMSxc8SxbsSxei5cbiIKKyJCdW5kYW4gc29ucmEgYmFuYSBlbiBhesSxbmRhbiBiaXIgJXMgdmUgJXMgcmV2aXp5b251IHZlcm1lbml6IGdlcmVraXlvci5cbiIKKyJCdW51biBpw6dpbiBcImdpdCBiaXNlY3QgJXNcIiB2ZSBcImdpdCBiaXNlY3QgJXNcIiBrdWxsYW5hYmlsaXJzaW5pei4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzZWN0aW5nIG9ubHkgd2l0aCBhICVzIGNvbW1pdCIKK21zZ3N0ciAieWFsbsSxemNhIGJpciAlcyBnw7ZuZGVyaXNpIGlsZSBpa2lsaSBhcmFtYSB5YXDEsWzEsXlvciIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMxOAorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICJFbWluIG1pc2luaXogW1kvbl0/ICIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM3OQorbXNnaWQgIm5vIHRlcm1zIGRlZmluZWQiCittc2dzdHIgImhpw6diaXIgdGVyaW0gdGFuxLFtbGFubWFkxLEiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY3VycmVudCB0ZXJtcyBhcmUgJXMgZm9yIHRoZSBvbGQgc3RhdGVcbiIKKyJhbmQgJXMgZm9yIHRoZSBuZXcgc3RhdGUuXG4iCittc2dzdHIgIiIKKyJNZXZjdXQgdGVyaW1sZXJpbml6IGVza2kgZHVydW0gacOnaW4gJXMgdmVcbiIKKyJ5ZW5pIGR1cnVtIGnDp2luICVzLlxuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAnZ2l0IGJpc2VjdCB0ZXJtcycuXG4iCisiU3VwcG9ydGVkIG9wdGlvbnMgYXJlOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIGFuZCAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIgorbXNnc3RyICIiCisiJ2dpdCBiaXNlY3QgdGVybXMnIGnDp2luIGdlw6dlcnNpeiBkZcSfacWfa2VuICVzLlxuIgorIkRlc3Rla2xlbmVuIHNlw6dlbmVrbGVyOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIHZlIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIG9wdGlvbjogJyVzJyIKK21zZ3N0ciAidGFuxLFtbGFuYW1heWFuIHNlw6dlbmVrOiAnJXMnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgcmV2aXNpb24iCittc2dzdHIgIiclcycgZ2XDp2VybGkgYmlyIHJldml6eW9uIGRlxJ9pbCBnaWJpIGfDtnLDvG7DvHlvciIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUxNAorbXNnaWQgImJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAiaGF0YWzEsSBIRUFEIC0gQmFuYSBiaXIgSEVBRCBnZXJlayIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjaGVja2luZyBvdXQgJyVzJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCBzdGFydCA8dmFsaWQtYnJhbmNoPicuIgorbXNnc3RyICInJXMnIMOnxLFrxLHFnyB5YXDEsW3EsSBiYcWfYXLEsXPEsXouICdnaXQgYmlzZWN0IHN0YXJ0IDxnZcOnZXJsaS1kYWw+JyBkZW5leWluLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MAorbXNnaWQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiCittc2dzdHIgImNnLXNlZWsgeWFwxLFsbcSxxZ8gYmlyIGHEn2HDp3RhIGlraWxpIGFyYW1hIHlhcMSxbG1heWFjYWsiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NTMKK21zZ2lkICJiYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICJoYXRhbMSxIEhFQUQgLSB0dWhhZiBzZW1ib2xpayBiYcWfdnVydSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU3NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZjogJyVzJyIKK21zZ3N0ciAiZ2XDp2Vyc2l6IGJhxZ92dXJ1OiAnJXMnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMzCittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAiJ2dpdCBiaXNlY3QgbmV4dCcgZ2Vyw6dla2xlxZ90aXIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzUKK21zZ2lkICJ3cml0ZSB0aGUgdGVybXMgdG8gLmdpdC9CSVNFQ1RfVEVSTVMiCittc2dzdHIgInRlcmltbGVyaSAuZ2l0L0JJU0VDVF9URVJNUyBrb251bXVuYSB5YXoiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzcKK21zZ2lkICJjbGVhbnVwIHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgImlraWxpIGFyYW1hIGR1cnVtdW51IHRlbWl6bGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzkKK21zZ2lkICJjaGVjayBmb3IgZXhwZWN0ZWQgcmV2cyIKK21zZ3N0ciAiYmVrbGVuZW4gYmHFn3Z1cnVsYXIgacOnaW4gZGVuZXRsZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MQorbXNnaWQgInJlc2V0IHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgImlraWxpIGFyYW1hIGR1cnVtdW51IHPEsWbEsXJsYSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MworbXNnaWQgIndyaXRlIG91dCB0aGUgYmlzZWN0aW9uIHN0YXRlIGluIEJJU0VDVF9MT0ciCittc2dzdHIgImlraWxpIGFyYW1hIGR1cnVtdW51IEJJU0VDVF9MT0cgacOnaW5lIHlheiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NQorbXNnaWQgImNoZWNrIGFuZCBzZXQgdGVybXMgaW4gYSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgImJpciBpa2lsaSBhcmFtYSBkdXJ1bXVuZGFraSB0ZXJpbWxlcmkgZGVuZXRsZSB2ZSBheWFybGEiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDcKK21zZ2lkICJjaGVjayB3aGV0aGVyIGJhZCBvciBnb29kIHRlcm1zIGV4aXN0IgorbXNnc3RyICJpeWkgdmV5YSBrw7Z0w7wgdGVyaW1sZXJpbiBvbHVwIG9sbWFkxLHEn8SxbsSxIGRlbmV0bGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDkKK21zZ2lkICJwcmludCBvdXQgdGhlIGJpc2VjdCB0ZXJtcyIKK21zZ3N0ciAiaWtpbGkgYXJhbWEgdGVyaW1sZXJpbmkgeWF6ZMSxciIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MQorbXNnaWQgInN0YXJ0IHRoZSBiaXNlY3Qgc2Vzc2lvbiIKK21zZ3N0ciAiaWtpbGkgYXJhbWEgb3R1cnVtdW51IGJhxZ9sYXQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTMKK21zZ2lkICJ1cGRhdGUgQklTRUNUX0hFQUQgaW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IgorbXNnc3RyICJnZcOnZXJsaSBnw7ZuZGVyaXlpIMOnxLFrxLHFnyB5YXBtYWsgeWVyaW5lIEJJU0VDVF9IRUFEIGfDvG5jZWxsZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1NQorbXNnaWQgIm5vIGxvZyBmb3IgQklTRUNUX1dSSVRFIgorbXNnc3RyICJCSVNFQ1RfV1JJVEUgacOnaW4gZ8O8bmzDvGsgeW9rIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjczCittc2dpZCAiLS13cml0ZS10ZXJtcyByZXF1aXJlcyB0d28gYXJndW1lbnRzIgorbXNnc3RyICItLXdyaXRlLXRlcm1zIGlraSBkZcSfacWfa2VuIGdlcmVrdGlyaXlvciIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3NworbXNnaWQgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIHJlcXVpcmVzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgYmlyIGRlxJ9pxZ9rZW4gZ2VyZWt0aXJtaXlvciIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4NAorbXNnaWQgIi0tYmlzZWN0LXJlc2V0IHJlcXVpcmVzIGVpdGhlciBubyBhcmd1bWVudCBvciBhIGNvbW1pdCIKK21zZ3N0ciAiLS1iaXNlY3QtcmVzZXQgYmlyIGRlxJ9pxZ9rZW4gdmV5YSBnw7ZuZGVyaSBnZXJla3Rpcm1peW9yIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg4Cittc2dpZCAiLS1iaXNlY3Qtd3JpdGUgcmVxdWlyZXMgZWl0aGVyIDQgb3IgNSBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LXdyaXRlIDQgdmV5YSA1IGRlxJ9pxZ9rZW4gZ2VyZWt0aXJpeW9yIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njk0Cittc2dpZCAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIHJlcXVpcmVzIDMgYXJndW1lbnRzIgorbXNnc3RyICItLWNoZWNrLWFuZC1zZXQtdGVybXMgMyBkZcSfacWfa2VuIGdlcmVrdGlyaXlvciIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcwMAorbXNnaWQgIi0tYmlzZWN0LW5leHQtY2hlY2sgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtbmV4dC1jaGVjayAyIHZleWEgMyBkZcSfacWfa2VuIGdlcmVrdGlyaXlvciIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcwNgorbXNnaWQgIi0tYmlzZWN0LXRlcm1zIHJlcXVpcmVzIDAgb3IgMSBhcmd1bWVudCIKK21zZ3N0ciAiLS1iaXNlY3QtdGVybXMgMCB2ZXlhIDEgZGXEn2nFn2tlbiBnZXJla3Rpcml5b3IiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMQorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJsYW1lIFs8c2XDp2VuZWtsZXI+XSBbPHJldi1zw6duaz5dIFs8cmV2Pl0gWy0tXSA8ZG9zeWE+IgorCisjOiBidWlsdGluL2JsYW1lLmM6MzYKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAiPHJldi1zw6duaz4sIGdpdC1yZXYtbGlzdCgxKSBpw6dpbmRlIGJlbGdlbGVuZGlyaWxtacWfdGlyIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGluZyBhIGNvbG9yOiAlcyIKK21zZ3N0ciAiYmlyIHJlbmsgYmVrbGVuaXlvcjogJXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MTYKK21zZ2lkICJtdXN0IGVuZCB3aXRoIGEgY29sb3IiCittc2dzdHIgImJpciByZW5rIGlsZSBiaXRtZWxpIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgJyVzJyBpbiBjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVzIgorbXNnc3RyICJjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVzIGnDp2luZGUgZ2XDp2Vyc2l6IHJlbmsgJyVzJyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc0NworbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIGJsYW1lLmNvbG9yaW5nIgorbXNnc3RyICJibGFtZS5jb2xvcmluZyBpw6dpbiBnZcOnZXJzaXogZGXEn2VyIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIHJldmlzaW9uICVzIHRvIGlnbm9yZSIKK21zZ3N0ciAieW9rIHNheW1hayBpw6dpbiAlcyByZXZpenlvbnUgYnVsdW5hbcSxeW9yIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ0Cittc2dpZCAiU2hvdyBibGFtZSBlbnRyaWVzIGFzIHdlIGZpbmQgdGhlbSwgaW5jcmVtZW50YWxseSIKK21zZ3N0ciAiZ2VuZWwgYmFrxLHFnyBnaXJkaWxlcmluaSBidWxkdWvDp2EgYXJ0YW4gYmnDp2ltZGUgZ8O2c3RlciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NQorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgInPEsW7EsXIgZ8O2bmRlcmlsZXJpIGnDp2luIGJvxZ8gU0hBLTEgZ8O2c3RlciAow5ZudGFuxLFtbMSxOiBLYXBhbMSxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NgorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAia8O2ayBnw7ZuZGVyaWxlcmluaSBzxLFuxLFyIG9sYXJhayB2YXJzYXltYSAow5ZudGFuxLFtbMSxOiBLYXBhbMSxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgImnFnyBtYWxpeWV0IGlzdGF0aXN0aWtsZXJpbmkgZ8O2c3RlciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiZHVydW0gYmlsZGlybWV5aSB6b3JsYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OQorbXNnaWQgIlNob3cgb3V0cHV0IHNjb3JlIGZvciBibGFtZSBlbnRyaWVzIgorbXNnc3RyICJnZW5lbCBiYWvEscWfIGdpcmRpbGVyaSBpw6dpbiDDp8Sxa3TEsSBza29ydW51IGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTAKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAib3JpamluYWwgZG9zeWEgYWTEsW7EsSBnw7ZzdGVyICjDlm50YW7EsW1sxLE6IE90b21hdGlrKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MQorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAib3JpamluYWwgc2F0xLFyIG51bWFyYXPEsW7EsSBnw7ZzdGVyICjDlm50YW7EsW1sxLE6IEthcGFsxLEpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUyCittc2dpZCAiU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiIKK21zZ3N0ciAibWFraW5lIGnFn2xlbWVzaSBpw6dpbiB0YXNhcmxhbm3EscWfIGJpciBiacOnaW1kZSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUzCittc2dpZCAiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICJva3VuYWJpbGlyIGJpw6dpbWRlIGhlciBzYXTEsXIgacOnaW4gZ8O2bmRlcmkgYmlsZ2lzaSBpbGUgZ8O2c3RlciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NAorbXNnaWQgIlVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBnaXQtYW5ub3RhdGUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgImdpdC1hbm5vdGF0ZSBpbGUgYXluxLEgw6fEsWt0xLEga2lwaW5pIGt1bGxhbiAow5ZudGFuxLFtbMSxOiBLYXBhbMSxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NQorbXNnaWQgIlNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiaGFtIHphbWFuIGRhbWdhc8SxbsSxIGfDtnN0ZXIgKMOWbnRhbsSxbWzEsTogS2FwYWzEsSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTYKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgInV6dW4gZ8O2bmRlcmkgU0hBMSdpbmkgZ8O2c3RlciAow5ZudGFuxLFtbMSxOiBLYXBhbMSxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NworbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgInlhemFyIGFkxLFuxLEgdmUgemFtYW4gZGFtZ2FzxLFuxLEgZ2l6bGUgKMOWbnRhbsSxbWzEsTogS2FwYWzEsSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTgKK21zZ2lkICJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgInlhemFyIGFkxLEgeWVyaW5lIGUtcG9zdGFzxLFuxLEgZ8O2c3RlciAow5ZudGFuxLFtbMSxOiBLYXBhbMSxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1OQorbXNnaWQgIklnbm9yZSB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIgorbXNnc3RyICJib8WfbHVrIGF5csSxbWxhcsSxbsSxIHlvayBzYXkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjAgYnVpbHRpbi9sb2cuYzoxNzAyCittc2dpZCAicmV2IgorbXNnc3RyICJyZXZpenlvbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MAorbXNnaWQgIklnbm9yZSA8cmV2PiB3aGVuIGJsYW1pbmciCittc2dzdHIgInN1w6dsYXJrZW4gPHJldml6eW9uPid1IHlvayBzYXkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjEKK21zZ2lkICJJZ25vcmUgcmV2aXNpb25zIGZyb20gPGZpbGU+IgorbXNnc3RyICI8ZG9zeWE+J2RhbiBvbGFuIHJldml6eW9ubGFyxLEgeW9rIHNheSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MgorbXNnaWQgImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiCittc2dzdHIgImJpciDDtm5jZWtpIGRvc3lhZGFuIGdlcmVrc2l6IMO8c3R2ZXJpeWkgYmHFn2thIGJpw6dpbWRlIHJlbmtsZW5kaXIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjMKK21zZ2lkICJjb2xvciBsaW5lcyBieSBhZ2UiCittc2dzdHIgInNhdMSxcmxhcsSxIHlhxZ/EsW5hIGfDtnJlIHJlbmtsZW5kaXIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjQKK21zZ2lkICJTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCBiZXR0ZXIgbWF0Y2giCittc2dzdHIgImRhaGEgaXlpIGXFn2xlxZ9tZSBidWxtYWsgacOnaW4gZWsgZMO2bmfDvGxlciBoYXJjYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NQorbXNnaWQgIlVzZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4gaW5zdGVhZCBvZiBjYWxsaW5nIGdpdC1yZXYtbGlzdCIKK21zZ3N0ciAiZ2l0LXJldi1saXN0IMOnYcSfxLFybWEgeWVyaW5lIDxkb3N5YT4nZGFuIG9sYW4gcmV2aXp5b25sYXLEsSBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjYKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICI8ZG9zeWE+J27EsW4gacOnZXJpxJ9pbmkgc29uIGfDtnLDvG50w7wgb2xhcmFrIGt1bGxhbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NyBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAic2NvcmUiCittc2dzdHIgInNrb3IiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjcKK21zZ2lkICJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJzYXTEsXIga29weWFsYXLEsW7EsSBkb3N5YWxhciBpw6dpbmRlIHZlIGFyYXPEsW5kYSBhcmEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjgKK21zZ2lkICJGaW5kIGxpbmUgbW92ZW1lbnRzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJzYXTEsXIgaGFyZWtldGxlcmluaSBkb3N5YWxhciBpw6dpbmRlIHZlIGFyYXPEsW5kYSBhcmEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjkKK21zZ2lkICJuLG0iCittc2dzdHIgIm4sbSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICIxJ2RlbiBzYXltYXlhIGJhxZ9sYXlhcmFrIHlhbG7EsXpjYSBuLG0gc2F0xLFyIGFyYWzEscSfxLFuxLEgacWfbGUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo5MjEKK21zZ2lkICItLXByb2dyZXNzIGNhbid0IGJlIHVzZWQgd2l0aCAtLWluY3JlbWVudGFsIG9yIHBvcmNlbGFpbiBmb3JtYXRzIgorbXNnc3RyICItLXByb2dyZXNzLCAtLWluY3JlbWVudGFsIHZleWEgb2t1bmFiaWxpciBiacOnaW1sZXJsZSBrdWxsYW7EsWxhbWF6IgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBzdHJpbmcgaXMgdXNlZCB0byB0ZWxsIHVzIHRoZQorIy4gbWF4aW11bSBkaXNwbGF5IHdpZHRoIGZvciBhIHJlbGF0aXZlIHRpbWVzdGFtcCBpbgorIy4gImdpdCBibGFtZSIgb3V0cHV0LiAgRm9yIEMgbG9jYWxlLCAiNCB5ZWFycywgMTEKKyMuIG1vbnRocyBhZ28iLCB3aGljaCB0YWtlcyAyMiBwbGFjZXMsIGlzIHRoZSBsb25nZXN0CisjLiBhbW9uZyB2YXJpb3VzIGZvcm1zIG9mIHJlbGF0aXZlIHRpbWVzdGFtcHMsIGJ1dAorIy4geW91ciBsYW5ndWFnZSBtYXkgbmVlZCBtb3JlIG9yIGZld2VyIGRpc3BsYXkKKyMuIGNvbHVtbnMuCisjLgorIzogYnVpbHRpbi9ibGFtZS5jOjk3MgorbXNnaWQgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iCittc2dzdHIgIjQgecSxbCAxMSBheSDDtm5jZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjEwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZSIKK21zZ2lkX3BsdXJhbCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZXMiCittc2dzdHJbMF0gIiVzIGRvc3lhc8SxbmRhIHlhbG7EsXpjYSAlbHUgc2F0xLFyIHZhciIKK21zZ3N0clsxXSAiJXMgZG9zeWFzxLFuZGEgeWFsbsSxemNhICVsdSBzYXTEsXIgdmFyIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTEyNQorbXNnaWQgIkJsYW1pbmcgbGluZXMiCittc2dzdHIgIkdlbmVsIGJha8SxxZ8gc2F0xLFybGFyxLEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjkKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxzZcOnZW5la2xlcj5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzAKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstbF0gWy1mXSA8YnJhbmNoLW5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPHNlw6dlbmVrbGVyPl0gWy1sXSBbLWZdIDxkYWwtYWTEsT4gWzxiYcWfbGFtYS1ub2t0YXPEsT5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMxCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8c2XDp2VuZWtsZXI+XSBbLXJdICgtZCB8IC1EKSA8ZGFsLWFkxLE+Li4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMyCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLW0gfCAtTSkgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs8c2XDp2VuZWtsZXI+XSAoLW0gfCAtTSkgWzxlc2tpLWRhbD5dIDx5ZW5pLWRhbD4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzMKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtYyB8IC1DKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzxzZcOnZW5la2xlcj5dICgtYyB8IC1DKSBbPGVza2ktZGFsPl0gPHllbmktZGFsPiIKKworIzogYnVpbHRpbi9icmFuY2guYzozNAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxzZcOnZW5la2xlcj5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPHNlw6dlbmVrbGVyPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorIiclcycgZGFsxLEgc2lsaW5peW9yOiBCdSBkYWwgJyVzJ1xuIgorIiAgICAgICAgIGRhbMSxbmEgYmlybGXFn3RpcmlsbWnFnywgYW5jYWsgSEVBRCdlIGhlbsO8eiBiaXJsZcWfdGlyaWxtZW1pxZ8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorIiclcycgZGFsxLEgc2lsaW5taXlvcjogQnUgZGFsIEhFQUQnZSBiaXJsZcWfdGlyaWxtacWfIG9sbWFzxLFuYSByYcSfbWVuXG4iCisiICAgICAgICAgJyVzJyBkYWzEsW5hIGJpcmxlxZ90aXJpbG1lbWnFny4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIKK21zZ3N0ciAiJyVzJyBpw6dpbiBnw7ZuZGVyaSBuZXNuZXNpIGFyYW5hbWFkxLEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorIiclcycgZGFsxLEgdMO8bcO8eWxlIGJpcmxlxZ90aXJpbG1lbWnFny5cbiIKKyJFxJ9lciBzaWxtZWsgaXN0ZWRpxJ9pbml6ZGVuIGVtaW5zZW5peiAnZ2l0IGJyYW5jaCAtRCAlcycgw6dhbMSxxZ90xLFyxLFuLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODkKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJjb25maWctZmlsZSBnw7xuY2VsbGVtZXNpIGJhxZ9hcsSxc8SxeiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjAKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgIi1hLCAtZCBpbGUga3VsbGFuxLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjYKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgIkhFQUQgacOnaW4gZ8O2bmRlcmkgbmVzbmVzaSBhcmFuYW1hZMSxIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnIGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIsWedXJhZGEgw6fEsWvEscWfIHlhcMSxbG3EscWfICclcycgZGFsxLEgc2lsaW5lbWl5b3I6ICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJ1emFrIGl6bGVtZSBkYWzEsSAnJXMnIGJ1bHVuYW1hZMSxIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICInJXMnIGRhbMSxIGJ1bHVuYW1hZMSxIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgIlV6YWsgaXpsZW1lIGRhbMSxICclcycgc2lsaW5pcmtlbiBoYXRhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiJyVzJyBkYWzEsSBzaWxpbmlya2VuIGhhdGEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiVXphayBpemxlbWUgZGFsxLEgJXMgc2lsaW5kaSAoJXMgaWRpKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIiVzIGRhbMSxIHNpbGluZGkgKCVzIGlkaSkuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDI5IGJ1aWx0aW4vdGFnLmM6NjEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiYmnDp2ltIGRpemlzaSBheXLEscWfdMSxcsSxbGFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDYwCittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAiSEVBRCDDp8O2esO8bGVtZWRpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEICglcykgcG9pbnRzIG91dHNpZGUgb2YgcmVmcy9oZWFkcy8iCittc2dzdHIgIkhFQUQgKCVzKSwgcmVmcy9oZWFkcy8gZMSxxZ/EsW5hIGnFn2FyZXQgZWRpeW9yIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgcmViYXNlZCBhdCAlcyIKK21zZ3N0ciAiJXMgZGFsxLEgJXMga29udW11bmRhIHllbmlkZW4gdGVtZWxsZW5kaXJpbGl5b3IiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyBiaXNlY3RlZCBhdCAlcyIKK21zZ3N0ciAiJXMgZGFsxLEgJXMga29udW11bmRhIGlraWxpIGFyYW7EsXlvciIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDIKK21zZ2lkICJjYW5ub3QgY29weSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgImJpciBkYWzEsW4gw7x6ZXJpbmRlIGRlxJ9pbGtlbiBnZcOnZXJsaSBkYWwga29weWFsYW5hbWF6IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUwNAorbXNnaWQgImNhbm5vdCByZW5hbWUgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICJiaXIgZGFsxLFuIMO8emVyaW5kZSBkZcSfaWxrZW4gZ2XDp2VybGkgZGFsIHllbmlkZW4gYWRsYW5kxLFyxLFsYW1heiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAiR2XDp2Vyc2l6IGRhbCBhZMSxOiAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0MgorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICJEYWwgeWVuaWRlbiBhZGxhbmTEsXJtYXPEsSBiYcWfYXLEsXPEsXoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ0Cittc2dpZCAiQnJhbmNoIGNvcHkgZmFpbGVkIgorbXNnc3RyICJEYWwga29weWFsYW1hc8SxIGJhxZ9hcsSxc8SxeiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhIGNvcHkgb2YgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyIKK21zZ3N0ciAiWWFubMSxxZ8gYWRsYW5kxLFyxLFsYW4gJyVzJyBkYWzEsW7EsW4gYmlyIGtvcHlhc8SxIG9sdcWfdHVydWxkdSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgIllhbmzEscWfIGFkbGFuZMSxcsSxbGFuICclcycgZGFsxLEgeWVuaWRlbiBhZGxhbmTEsXLEsWxkxLEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIkRhbCAlcyBvbGFyYWsgeWVuaWRlbiBhZGxhbmTEsXLEsWxkxLEsIGFuY2FrIEhFQUQgZ8O8bmNlbGxlbm1lZGkhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2NgorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiRGFsIHllbmlkZW4gYWRsYW5kxLFyxLFsZMSxLCBhbmNhayBjb25maWctZmlsZSBnw7xuY2VsbGVtZXNpIGJhxZ9hcsSxc8SxeiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjgKK21zZ2lkICJCcmFuY2ggaXMgY29waWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiRGFsIGtvcHlhbGFuZMSxLCBhbmNhayBjb25maWctZmlsZSBnw7xuY2VsbGVtZXNpIGJhxZ9hcsSxc8SxeiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaFxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBzdHJpcHBlZC5cbiIKK21zZ3N0ciAiIgorIkzDvHRmZW4gZGFsIGHDp8Sxa2xhbWFzxLFuxLEgZMO8emVubGV5aW46XG4iCisiXHQlc1xuIgorIiclYycgaWxlIGJhxZ9sYXlhbiBzYXTEsXJsYXIgw6fEsWthcsSxbGFjYWt0xLFyLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiR2VuZWwgc2XDp2VuZWtsZXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIwCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgInNhxJ9sYW1hecSxIHZlIGtvbnV5dSBnw7ZzdGVyLCDDvHN0a2F5bmFrIGRhbMSxIGnDp2luIGlraSBrZXogdmVyIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMQorbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgImJpbGdpIGlsZXRpbGVyaW5pIGdpemxlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJpemxlbWUga2lwaW5pIGF5YXJsYSAoYmlsZ2kgacOnaW46IGdpdC1wdWxsKDEpKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjQKK21zZ2lkICJkbyBub3QgdXNlIgorbXNnc3RyICJrdWxsYW5tYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYgYnVpbHRpbi9yZWJhc2UuYzo1MTMKK21zZ2lkICJ1cHN0cmVhbSIKK21zZ3N0ciAiw7xzdGtheW5hayIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYKK21zZ2lkICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgIsO8c3RrYXluYWsgYmlsZ2lzaW5pIGRlxJ9pxZ90aXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI3Cittc2dpZCAidW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgIsO8c3RrYXluYWsgYmlsZ2lzaW5pIGthbGTEsXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI4Cittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICJyZW5rbGVuZGlyaWxtacWfIMOnxLFrdMSxIGt1bGxhbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjkKK21zZ2lkICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJ1emFrIGl6bGV5ZW4gZGFsbGFyZGEgacWfIHlhcCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzEgYnVpbHRpbi9icmFuY2guYzo2MzMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJ5YWxuxLF6Y2EgZ8O2bmRlcml5aSBpw6dlcmVuIGRhbGxhcsSxIHlhemTEsXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMyIGJ1aWx0aW4vYnJhbmNoLmM6NjM0Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAieWFsbsSxemNhIGfDtm5kZXJpeWkgacOnZXJtZXllbiBkYWxsYXLEsSB5YXpkxLFyIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzNworbXNnaWQgIlNwZWNpZmljIGdpdC1icmFuY2ggYWN0aW9uczoiCittc2dzdHIgIsOWemVsIGdpdC1icmFuY2ggZXlsZW1sZXJpOiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzgKK21zZ2lkICJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAiaGVtIHV6YWsgaXpsZXllbiBoZW0gZGUgeWVyZWwgZGFsbGFyxLEgbGlzdGVsZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDAKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAidMO8bcO8eWxlIGJpcmxlxZ90aXJpbGVuIGRhbMSxIHNpbCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDEKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICJkYWzEsSBzaWwgKGJpcmxlxZ90aXJpbG1lbWnFnyBvbHNhIGJpbGUpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MgorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJiaXIgZGFsxLEgdmUgb251biBiYcWfdnVydSBnw7xubMO8xJ/DvG7DvCB0YcWfxLEveWVuaWRlbiBhZGxhbmTEsXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiYmlyIGRhbMSxIHRhxZ/EsS95ZW5pZGVuIGFkbGFuZMSxciwgaGVkZWYgdmFyIG9sc2EgYmlsZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDQKK21zZ2lkICJjb3B5IGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJiaXIgZGFsxLEgdmUgb251biBiYcWfdnVydSBnw7xubMO8xJ/DvG7DvCBrb3B5YWxhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NQorbXNnaWQgImNvcHkgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiYmlyIGRhbMSxIGtvcHlhbGEsIGhlZGVmIHZhciBvbHNhIGJpbGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ2Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgImRhbCBhZGxhcsSxbsSxIGxpc3RlbGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ3Cittc2dpZCAic2hvdyBjdXJyZW50IGJyYW5jaCBuYW1lIgorbXNnc3RyICJnZcOnZXJsaSBkYWwgYWTEsW7EsSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0OAorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICJkYWzEsW4gYmHFn3Z1cnUgZ8O8bmzDvMSfw7xuw7wgb2x1xZ90dXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUwCittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgImRhbMSxbiBhw6fEsWtsYW1hc8SxbsSxIGTDvHplbmxlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MQorbXNnaWQgImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iCittc2dzdHIgInpvcmxhIG9sdcWfdHVyLCB0YcWfxLEveWVuaWRlbiBhZGxhbmTEsXIsIHNpbCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTIKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAieWFsbsSxemNhIGJpcmxlxZ90aXJpbGVuIGRhbGxhcsSxIHlhemTEsXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJ5YWxuxLF6Y2EgYmlybGXFn3RpcmlsbWV5ZW4gZGFsbGFyxLEgeWF6ZMSxciIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTQKK21zZ2lkICJsaXN0IGJyYW5jaGVzIGluIGNvbHVtbnMiCittc2dzdHIgImRhbGxhcsSxIHPDvHR1bmxhcmxhIGxpc3RlbGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU3IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIgYnVpbHRpbi9ub3Rlcy5jOjQxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQxOCBidWlsdGluL25vdGVzLmM6NTgxIGJ1aWx0aW4vbm90ZXMuYzo1ODQKKyM6IGJ1aWx0aW4vdGFnLmM6NDMzCittc2dpZCAib2JqZWN0IgorbXNnc3RyICJuZXNuZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTgKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgInlhbG7EsXpjYSBuZXNuZW5pbiBkYWxsYXLEsW7EsSB5YXpkxLFyIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY2MCBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ4IGJ1aWx0aW4vdGFnLmM6NDQwCittc2dpZCAic29ydGluZyBhbmQgZmlsdGVyaW5nIGFyZSBjYXNlIGluc2Vuc2l0aXZlIgorbXNnc3RyICJzxLFyYWxhbWEgdmUgc8O8em1lIELDnFnDnEsva8O8w6fDvGsgaGFyZiBkdXlhcmzEsSBkZcSfaWxkaXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzggYnVpbHRpbi90YWcuYzo0MzgKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAiw6fEsWt0xLEgacOnaW4ga3VsbGFuxLFsYWNhayBiacOnaW0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Njg0IGJ1aWx0aW4vY2xvbmUuYzo3ODUKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiSEVBRCwgcmVmcy9oZWFkcyBhbHTEsW5kYSBidWx1bmFtYWTEsSEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzA4Cittc2dpZCAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiB2ZSAtLXZlcmJvc2UgYmlyYmlyaXlsZSB1eXVtc3V6IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyMyBidWlsdGluL2JyYW5jaC5jOjc3NyBidWlsdGluL2JyYW5jaC5jOjc4NgorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJkYWwgYWTEsSBnZXJla2xpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1MworbXNnaWQgIkNhbm5vdCBnaXZlIGRlc2NyaXB0aW9uIHRvIGRldGFjaGVkIEhFQUQiCittc2dzdHIgIkF5csSxbG3EscWfIEhFQUQnZSBhw6fEsWtsYW1hIHZlcmlsZW1peW9yIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OAorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICJiaXJkZW4gw6dvayBkYWzEsW4gYcOnxLFrbGFtYXPEsSBkw7x6ZW5sZW5lbWl5b3IiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIgorbXNnc3RyICInJXMnIGRhbMSxbmRhIGhlbsO8eiBiaXIgZ8O2bmRlcmkgeW9rLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gYnJhbmNoIG5hbWVkICclcycuIgorbXNnc3RyICInJXMnIGFkxLFuZGEgYmlyIGRhbCB5b2suIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4MworbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIGNvcHkgb3BlcmF0aW9uIgorbXNnc3RyICJiaXIga29weWFsYW1hIGnFn2xlbWkgacOnaW4gw6dvayBmYXpsYSBkYWwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzkyCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgImJpciB5ZW5pZGVuIGFkbGFuZMSxcm1hIGnFn2xlbWkgacOnaW4gw6dvayBmYXpsYSBkZcSfacWfa2VuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5NworbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byBzZXQgbmV3IHVwc3RyZWFtIgorbXNnc3RyICJ5ZW5pIMO8c3RrYXluYWsgYXlhcmxhbWFrIGnDp2luIMOnb2sgZmF6bGEgZGXEn2nFn2tlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisiSEVBRCdpbiDDvHN0IGtheW5hxJ/EsSAlcyBvbGFyYWsgYXlhcmxhbmFtYWTEsSwgw6fDvG5rw7wgaGVyaGFuZ2kgYmlyIGRhbGEgacWfYXJldCAiCisiZXRtaXlvci4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODA0IGJ1aWx0aW4vYnJhbmNoLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoICclcyciCittc2dzdHIgIiclcycgZGl5ZSBiaXIgZGFsIHlvayIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiclcycgZGl5ZSBiaXIgZGFsIG1ldmN1dCBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHVuc2V0IHVwc3RyZWFtIgorbXNnc3RyICLDvHN0IGtheW5hxJ/EsSBrYWxkxLFybWFrIGnDp2luIMOnb2sgZmF6bGEgZGXEn2nFn2tlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjUKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisiSEVBRCdpbiDDvHN0IGtheW5hxJ/EsSBrYWxkxLFyxLFsYW1hZMSxLCDDp8O8bmvDvCBoZXJoYW5naSBiaXIgZGFsYSBpxZ9hcmV0IGV0bWl5b3IuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iCittc2dzdHIgIiclcycgZGFsxLFuxLFuIMO8c3RrYXluYWsgYmlsZ2lzaSB5b2siCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQxCittc2dpZCAiIgorIlRoZSAtYSwgYW5kIC1yLCBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgdGFrZSBhIGJyYW5jaCBuYW1lLlxuIgorIkRpZCB5b3UgbWVhbiB0byB1c2U6IC1hfC1yIC0tbGlzdCA8cGF0dGVybj4/IgorbXNnc3RyICIiCisiJ2dpdCBicmFuY2gnaW4gLWEgdmUgLXIgc2XDp2VuZWtsZXJpIGJpciBkYWwgYWTEsSBhbG1hei5cbiIKKyLFnnVudSBtdSBkZW1layBpc3RlZGluaXo6IC1hfC1yIC0tbGlzdCA8ZGl6Z2k+PyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDUKK21zZ2lkICIiCisidGhlICctLXNldC11cHN0cmVhbScgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgJy0tdHJhY2snIG9yICIKKyInLS1zZXQtdXBzdHJlYW0tdG8nIGluc3RlYWQuIgorbXNnc3RyICIiCisiLS1zZXQtdXBzdHJlYW0gc2XDp2VuZcSfaSBhcnTEsWsgZGVzdGVrbGVubWl5b3IuIEzDvHRmZW4gLS10cmFjayB2ZXlhIC0tc2V0LSIKKyJ1cHN0cmVhbS10byBrdWxsYW7EsW4uIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE1IGJ1aWx0aW4vYnVuZGxlLmM6MjMKK21zZ2lkICJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxzZcOnZW5la2xlcj5dIDxkb3N5YT4gPGdpdC1yZXYtbGlzdGUgZGXEn2nFn2tlbmxlcj4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYgYnVpbHRpbi9idW5kbGUuYzoyOAorbXNnaWQgImdpdCBidW5kbGUgdmVyaWZ5IFs8b3B0aW9ucz5dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzxzZcOnZW5la2xlcj5dIDxkb3N5YT4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTcgYnVpbHRpbi9idW5kbGUuYzozMworbXNnaWQgImdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iCittc2dzdHIgImdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZG9zeWE+IFs8YmHFn3Z1cnUtYWTEsT4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE4IGJ1aWx0aW4vYnVuZGxlLmM6MzgKK21zZ2lkICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8ZG9zeWE+IFs8YmHFn3Z1cnUtYWTEsT4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM3NQorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJpbGVybGVtZSDDp3VidcSfdW51IGfDtnN0ZXJtZSIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2OCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNzcKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJpbGVybGVtZSDDp3VidcSfdW51IGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzc5Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb2JqZWN0IHdyaXRpbmcgcGhhc2UiCittc2dzdHIgImlsZXJsZW1lIMOndWJ1xJ91bnUgbmVzbmUgeWF6xLFtxLEgYcWfYW1hc8SxIHPEsXJhc8SxbmRhIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzgyCittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICJpbGVybGVtZSDDp3VidcSfdSBnw7ZzdGVyaWxkacSfaW5kZSAtLWFsbC1wcm9ncmVzcydlIGJlbnplciIKKworIzogYnVpbHRpbi9idW5kbGUuYzo5MworbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIkJpciBkZW1ldCBvbHXFn3R1cm1hayBpw6dpbiBiaXIgZGVwbyBnZXJla2xpLiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxMDQKK21zZ2lkICJkbyBub3Qgc2hvdyBidW5kbGUgZGV0YWlscyIKK21zZ3N0ciAiZGVtZXQgYXlyxLFudMSxbGFyxLFuxLEgZ8O2c3Rlcm1lIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBva2F5XG4iCittc2dzdHIgIiVzIHRhbWFtXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICJEZW1ldGkgw6fDtnptZWsgacOnaW4gYmlyIGRlcG8gZ2VyZWtsaSIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNjggYnVpbHRpbi9yZW1vdGUuYzoxNjg2Cittc2dpZCAiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIKK21zZ3N0ciAiYXlyxLFudMSxbMSxIGFubGF0OyBiaXIgYWx0a29tdXR0YW4gw7ZuY2UgeWVybGXFn3RpcmlsbWVsaWRpciIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzoxNzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIkJpbGlubWV5ZW4gYWx0a29tdXQ6ICVzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTk1Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHBhdGg+XSA8b2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0w7xyPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHlvbD5dIDxuZXNuZT4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTYKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjE3Cittc2dpZCAib25seSBvbmUgYmF0Y2ggb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQiCittc2dzdHIgInlhbG7EsXpjYSBiaXIgdG9wbHUgacWfIHNlw6dlbmXEn2kgYmVsaXJ0aWxlYmlsaXIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzUKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIjx0w7xyPiB5YWxuxLF6Y2EgxZ91bmxhcmRhbiBiaXJpIG9sYWJpbGlyOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNgorbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgIm5lc25lIHTDvHLDvG7DvCBnw7ZzdGVyIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM3Cittc2dpZCAic2hvdyBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAibmVzbmUgYm95dXR1bnUgZ8O2c3RlciIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzOQorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAiaGF0YSB5b2tzYSBzxLFmxLFyIGtvZHV5bGEgw6fEsWsiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDAKK21zZ2lkICJwcmV0dHktcHJpbnQgb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAibmVzbmUgacOnZXJpxJ9pbmkgaG/FnyBiacOnaW1kZSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQyCittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgImlraWxpIG5lc25lbGVyIGnDp2luIG5lc25lIGnDp2VyacSfaSDDvHplcmluZGUgdGV4dGNvbnYgw6dhbMSxxZ90xLFyIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ0Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIGZpbHRlcnMgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiaWtpbGkgbmVzbmVsZXIgacOnaW4gbmVzbmUgacOnZXJpxJ9pIMO8emVyaW5kZSBzw7x6Z2XDp2xlciDDp2FsxLHFn3TEsXIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDUgZ2l0LXN1Ym1vZHVsZS5zaDoxMDAyCittc2dpZCAiYmxvYiIKK21zZ3N0ciAiaWtpbGkgbmVzbmUiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDYKK21zZ2lkICJ1c2UgYSBzcGVjaWZpYyBwYXRoIGZvciAtLXRleHRjb252Ly0tZmlsdGVycyIKK21zZ3N0ciAiLS10ZXh0Y29udi8tLWZpbHRlcnMgacOnaW4gYmVsaXJsaSBiaXIgeW9sIGt1bGxhbiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0OAorbXNnaWQgImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIKK21zZ3N0ciAiLXMgdmUgLXQnbmluIGJvenVrL2hhc2FyIGfDtnJtw7zFnyBuZXNuZWxlcmxlIMOnYWzEscWfbWFzxLFuYSBpemluIHZlciIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0OQorbXNnaWQgImJ1ZmZlciAtLWJhdGNoIG91dHB1dCIKK21zZ3N0ciAiLS1iYXRjaCDDp8Sxa3TEsXPEsW7EsSBhcmFiZWxsZcSfZSBhbCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1MQorbXNnaWQgInNob3cgaW5mbyBhbmQgY29udGVudCBvZiBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAic3RhbmRhcnQgZ2lyZGknZGVuIGJlc2xlbmVuIG5lc25lbGVyaW4gYmlsZ2lzaW5pIHZlIGnDp2VyacSfaW5pIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTUKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgInN0YW5kYXJ0IGdpcmRpJ2RlbiBiZXNsZW5lbiBuZXNuZWxlciBoYWtrxLFuZGEgYmlsZ2kgZ8O2c3RlciIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1OQorbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAiIgorImHEn2HDpyBpw6dpIHNlbWJvbGlrIGJhxJ9sYXLEsSBpemxlICgtLWJhdGNoIHZleWEgLS1iYXRjaC1jaGVjayBpbGUga3VsbGFuxLFsxLFyKSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MQorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgIi0tYmF0Y2ggdmV5YSAtLWJhdGNoLWNoZWNrIGlsZSBvbGFuIHTDvG0gbmVzbmVsZXJpIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjMKK21zZ2lkICJkbyBub3Qgb3JkZXIgLS1iYXRjaC1hbGwtb2JqZWN0cyBvdXRwdXQiCittc2dzdHIgIi0tYmF0Y2gtYWxsLW9iamVjdHMgw6fEsWt0xLFzxLFuxLEgc8SxcmFsYW1hIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMworbXNnaWQgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxwYXRobmFtZT4uLi4iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPMO2em5pdGVsaWs+Li4uXSBbLS1dIDx5b2wtYWTEsT4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjE0Cittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPMO2em5pdGVsaWs+Li4uXSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjEKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgInTDvG0gZG9zeWEgw7Z6bml0ZWxpa2xlcmluaSBiaWxkaXIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIyCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgInlhbG7EsXpjYSBpbmRla3N0ZWtpIC5naXRhdHRyaWJ1dGVzJ3Uga3VsbGFuIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI1IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDIKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAiZG9zeWEgYWRsYXLEsW7EsSBzdGRpbidkZW4gb2t1IgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyNSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI3Cittc2dpZCAidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgImdpcmRpIHZlIMOnxLFrdMSxIGthecSxdGxhcsSxbsSxIGJpciBOVUwga2FyYWt0ZXJpIGlsZSBzb25sYW5kxLFyIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDY0IGJ1aWx0aW4vZ2MuYzo1MzcKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTkKK21zZ2lkICJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgImlsZXJsZW1lIGJpbGRpcmltaW5pIGdpemxlIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI5Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgaW5wdXQgcGF0aHMiCittc2dzdHIgImXFn2xlxZ9tZXllbiBnaXJkaSB5b2xsYXLEsW7EsSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjMxCittc2dpZCAiaWdub3JlIGluZGV4IHdoZW4gY2hlY2tpbmciCittc2dzdHIgImRlbmV0bGVya2VuIGluZGVrc2kgeW9rIHNheSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICJjYW5ub3Qgc3BlY2lmeSBwYXRobmFtZXMgd2l0aCAtLXN0ZGluIgorbXNnc3RyICJ5b2wgYWRsYXLEsSAtLXN0ZGluIGlsZSBiZWxpcnRpbGVtaXlvciIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjYKK21zZ2lkICIteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiLXogeWFsbsSxemNhIC0tc3RkaW4gaWxlIGJpciBhbmxhbSBpZmFkZSBlZGVyIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2OAorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkIgorbXNnc3RyICJiaXIgeW9sIGJlbGlydGlsbWVkaSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzIKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAiLS1xdWlldCB5YWxuxLF6Y2EgdGVrIGJpciB5b2wgYWTEsSBpbGUgZ2XDp2VybGlkaXIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc0Cittc2dpZCAiY2Fubm90IGhhdmUgYm90aCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UiCittc2dzdHIgImhlbSAtLXF1aWV0IGhlbSAtLXZlcmJvc2UgYmlybGlrdGUga3VsbGFuxLFsYW1heiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzcKK21zZ2lkICItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIgorbXNnc3RyICItLW5vbi1tYXRjaGluZyB5YWxuxLF6Y2EgLS12ZXJib3NlIGlsZSBnZcOnZXJsaWRpciIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OQorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgWzxzZcOnZW5la2xlcj5dIDxjb250YWN0Pi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MTQKK21zZ2lkICJhbHNvIHJlYWQgY29udGFjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAic3RkaW4nZGVuIGtpxZ9pbGVyaSBkZSBva3UiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb250YWN0OiAlcyIKK21zZ3N0ciAia2nFn2kgYXlyxLHFn3TEsXLEsWxhbWFkxLE6ICVzIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0OAorbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAia2nFn2kgYmVsaXJ0aWxtZWRpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTMxCittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBjaGVja291dC1pbmRleCBbPHNlw6dlbmVrbGVyPl0gWy0tXSBbPGRvc3lhPi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNDgKK21zZ2lkICJzdGFnZSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzIG9yIGFsbCIKK21zZ3N0ciAic3RhZ2UgMSB2ZSAzIGFyYXPEsW5kYSB2ZXlhIHTDvG3DvCBvbG1hbMSxZMSxciIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICJpbmRla3N0ZWtpIHTDvG0gZG9zeWFsYXLEsSDDp8Sxa8SxxZ8geWFwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY1Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICJtZXZjdXQgZG9zeWFsYXLEsW4gw7x6ZXJpbmUgeWF6xLFsbWFzxLFuxLEgem9ybGEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjcKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICJtZXZjdXQgZG9zeWFsYXIgdmUgaW5kZWtzdGUgb2xtYXlhbiBkb3N5YWxhciBpw6dpbiB1eWFybWEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjkKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgInllbmkgZG9zeWFsYXLEsSDDp8Sxa8SxxZ8geWFwbWEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzEKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAiaW5kZWtzIGRvc3lhc8SxbmRha2kgZG9zeWEgYmlsZ2lsZXJpbmkgZ8O8bmNlbGxlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc1Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJ5b2xsYXLEsW4gbGlzdGVzaW5pIHN0YW5kYXJ0IGdpcmRpJ2RlbiBva3UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzcKK21zZ2lkICJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiCittc2dzdHIgImnDp2VyacSfaSBnZcOnaWNpIGRvc3lhbGFyYSB5YXoiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzggYnVpbHRpbi9jb2x1bW4uYzozMQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDMKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDExIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjcyCittc2dpZCAic3RyaW5nIgorbXNnc3RyICJkaXppIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc5Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAiZG9zeWFsYXIgb2x1xZ90dXJ1cmtlbiBiYcWfxLFuYSA8ZGl6aT4gZWtsZSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE4MQorbXNnaWQgImNvcHkgb3V0IHRoZSBmaWxlcyBmcm9tIG5hbWVkIHN0YWdlIgorbXNnc3RyICJkb3N5YWxhcsSxIGFkxLEgdmVyaWxlbiBhbGFuZGFuIGtvcHlhbGEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMQorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8c2XDp2VuZWtsZXI+XSA8ZGFsPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMyCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxzZcOnZW5la2xlcj5dIFs8ZGFsPl0gLS0gPGRvc3lhPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3Cittc2dpZCAiZ2l0IHN3aXRjaCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIgorbXNnc3RyICJnaXQgc3dpdGNoIFs8c2XDp2VuZWtsZXI+XSBbPGRhbD5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIKK21zZ2lkICJnaXQgcmVzdG9yZSBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PGJyYW5jaD5dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc3RvcmUgWzxzZcOnZW5la2xlcj5dIFstLXNvdXJjZT08ZGFsPl0gPGRvc3lhPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NSBidWlsdGluL2NoZWNrb3V0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIgorbXNnc3RyICInJXMnIHlvbHUgYml6ZGVraSBzw7xyw7xtZSBpeWUgZGXEn2lsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAiJyVzJyB5b2x1IG9ubGFyZGFraSBzw7xyw7xtZSBpeWUgZGXEn2lsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIiclcycgeW9sdSBnZXJla2VuIHTDvG0gc8O8csO8bWxlcmUgaXllIGRlxJ9pbCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIiclcycgeW9sdSBnZXJla2VuIHPDvHLDvG1sZXJlIGl5ZSBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgIiclcycgeW9sdTogQmlybGXFn3RpcmlsZW1peW9yIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgbWVyZ2UgcmVzdWx0IGZvciAnJXMnIgorbXNnc3RyICInJXMnIGnDp2luIGJpcmxlxZ90aXJtZSBzb251w6dsYXLEsSBla2xlbmVtaXlvciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdHMiCittc2dzdHJbMF0gIiVkIGJpcmxlxZ90aXJtZSDDp2FrxLHFn21hc8SxIHllbmlkZW4gb2x1xZ90dXJ1bGR1IgorbXNnc3RyWzFdICIlZCBiaXJsZcWfdGlybWUgw6dha8SxxZ9tYXPEsSB5ZW5pZGVuIG9sdcWfdHVydWxkdSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkICVkIHBhdGggZnJvbSAlcyIKK21zZ2lkX3BsdXJhbCAiVXBkYXRlZCAlZCBwYXRocyBmcm9tICVzIgorbXNnc3RyWzBdICIlZCB5b2wgxZ91cmFkYW4gZ8O8bmNlbGxlbmRpOiAlcyIKK21zZ3N0clsxXSAiJWQgeW9sIMWfdXJhZGFuIGfDvG5jZWxsZW5kaTogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyWzBdICIlZCB5b2wgaW5kZWtzdGVuIGfDvG5jZWxsZW5kaSIKK21zZ3N0clsxXSAiJWQgeW9sIGluZGVrc3RlbiBnw7xuY2VsbGVuZGkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTIgYnVpbHRpbi9jaGVja291dC5jOjQxNSBidWlsdGluL2NoZWNrb3V0LmM6NDE4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiJyVzJyBnw7xuY2VsbGVubWVrdGUgb2xhbiB5b2xsYXJsYSBrdWxsYW7EsWxhbWF6IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDI1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICInJXMnLCAlcyBpbGUgYmlybGlrdGUga3VsbGFuxLFsYW1heiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iCittc2dzdHIgIkF5bsSxIGFuZGEgaGVtIHlvbGxhcsSxIGfDvG5jZWxsZXlpcCBoZW0gZGUgJyVzJyBkYWzEsW5hIGdlw6dpbGVtaXlvci4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibmVpdGhlciAnJXMnIG9yICclcycgaXMgc3BlY2lmaWVkIgorbXNnc3RyICJuZSAnJXMnIG5lIGRlICclcycgYmVsaXJ0aWxtacWfIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbXVzdCBiZSB1c2VkIHdoZW4gJyVzJyBpcyBub3Qgc3BlY2lmaWVkIgorbXNnc3RyICInJXMnLCAnJXMnIMO2Z2VzaW5pbiBiZWxpcnRpbG1lZGnEn2kgZHVydW1sYXJkYSBrdWxsYW7EsWxtYWzEsWTEsXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NDUgYnVpbHRpbi9jaGVja291dC5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG9yICclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJyVzJyB2ZXlhICclcycsICVzIGlsZSBiaXJsaWt0ZSBrdWxsYW7EsWxhbWF6IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTA5IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICInJXMnIHlvbHUgYmlybGXFn3RpcmlsbWVtacWfIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njg0IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MTA2Cittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIsO2bmNlIGdlw6dlcmxpIGluZGVrc2luaXppIMOnw7Z6bWVsaXNpbml6IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgY29udGludWUgd2l0aCBzdGFnZWQgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIGZpbGVzOlxuIgorIiVzIgorbXNnc3RyICIiCisiYcWfYcSfxLFkYWtpIGhhesSxcmxhbm3EscWfIGRlxJ9pxZ9pa2xpa2xlciBpw6dlcmVuIGRvc3lhbGFybGEgc8O8cmTDvHLDvGxlbWl5b3I6XG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuIG5vdCBkbyByZWZsb2cgZm9yICclcyc6ICVzXG4iCittc2dzdHIgIiclcycgacOnaW4gYmHFn3Z1cnUgZ8O8bmzDvMSfw7wgeWFwxLFsYW3EsXlvcjogJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg3OQorbXNnaWQgIkhFQUQgaXMgbm93IGF0IgorbXNnc3RyICJIRUFEIMWfaW1kaSDFn3VyYWRhOiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4MyBidWlsdGluL2Nsb25lLmM6NzE3Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBIRUFEIgorbXNnc3RyICJIRUFEIGfDvG5jZWxsZW5lbWl5b3IiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiJyVzJyBkYWzEsSBzxLFmxLFybGFuZMSxLlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICJIYWxpaGF6xLFyZGEgJyVzJyDDvHplcmluZGVcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiJyVzJyBkYWzEsW5hIGdlw6dpbGRpIHZlIHPEsWbEsXJsYW5kxLEuXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTYgYnVpbHRpbi9jaGVja291dC5jOjEzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiWWVuaSAnJXMnIGRhbMSxbmEgZ2XDp2lsZGkuXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiJyVzJyBkYWzEsW5hIGdlw6dpbGRpLlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIi4uLiB2ZSAlZCBkYWhhLlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dpZF9wbHVyYWwgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzBdICIiCisiVXlhcsSxOiBBcmthbsSxemRhIGRhbGxhcsSxbsSxemRhbiBoacOnYmlyaW5lIGJhxJ9sxLEgb2xtYXnEsW4gJWQgZ8O2bmRlcmlcbiIKKyJixLFyYWvEsXlvcnN1bnV6OlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMV0gIiIKKyJVeWFyxLE6IEFya2FuxLF6ZGEgZGFsbGFyxLFuxLF6ZGFuIGhpw6diaXJpbmUgYmHEn2zEsSBvbG1hecSxbiAlZCBnw7ZuZGVyaVxuIgorImLEsXJha8SxeW9yc3VudXo6XG4iCisiXG4iCisiJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCBpdCBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnaWRfcGx1cmFsICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCB0aGVtIGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dzdHJbMF0gIiIKKyJFxJ9lciBidW51IHllbmkgYmlyIGRhbCBvbHXFn3R1cnVwIHR1dG1hayBpc3RpeW9yc2FuxLF6IMWfaW1kaSBidW51IHlhcG1ha1xuIgorImnDp2luIGl5aSBiaXIgemFtYW4gb2xhYmlsaXI6XG4iCisiXG4iCisiXHRnaXQgYnJhbmNoIDx5ZW5pLWRhbC1hZMSxPiAlc1xuIgorIlxuIgorbXNnc3RyWzFdICIiCisiRcSfZXIgYnVubGFyxLEgeWVuaSBiaXIgZGFsIG9sdcWfdHVydXAgdHV0bWFrIGlzdGl5b3JzYW7EsXogxZ9pbWRpIGJ1bnUgeWFwbWFrXG4iCisiacOnaW4gaXlpIGJpciB6YW1hbiBvbGFiaWxpcjpcbiIKKyJcbiIKKyJcdGdpdCBicmFuY2ggPHllbmktZGFsLWFkxLE+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA5Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAicmV2aXp5b25sYXJkYSBnZXppbmlya2VuIGnDpyBoYXRhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxMworbXNnaWQgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIgorbXNnc3RyICLDlm5jZWtpIEhFQUQga29udW11IMWfdXlkdToiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDUzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzE1Cittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiSGVuw7x6IGRvxJ9tYW3EscWfIGJpciBkYWwgw7x6ZXJpbmRlc2luaXoiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvdWxkIGJlIGJvdGggYSBsb2NhbCBmaWxlIGFuZCBhIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJQbGVhc2UgdXNlIC0tIChhbmQgb3B0aW9uYWxseSAtLW5vLWd1ZXNzKSB0byBkaXNhbWJpZ3VhdGUiCittc2dzdHIgIiIKKyInJXMnIGhlbSBiaXIgeWVyZWwgZG9zeWEgaGVtIGRlIGJpciBpemxlbWUgZGFsxLEgb2xhYmlsaXIuXG4iCisiTMO8dGZlbiAtLSAodmUgaXN0ZcSfZSBiYcSfbMSxIG9sYXJhayAtLW5vLWd1ZXNzKSBrdWxsYW7EsXAgYmVsaXJzaXpsacSfaSBnaWRlcmluLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzUKK21zZ2lkICIiCisiSWYgeW91IG1lYW50IHRvIGNoZWNrIG91dCBhIHJlbW90ZSB0cmFja2luZyBicmFuY2ggb24sIGUuZy4gJ29yaWdpbicsXG4iCisieW91IGNhbiBkbyBzbyBieSBmdWxseSBxdWFsaWZ5aW5nIHRoZSBuYW1lIHdpdGggdGhlIC0tdHJhY2sgb3B0aW9uOlxuIgorIlxuIgorIiAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4vPG5hbWU+XG4iCisiXG4iCisiSWYgeW91J2QgbGlrZSB0byBhbHdheXMgaGF2ZSBjaGVja291dHMgb2YgYW4gYW1iaWd1b3VzIDxuYW1lPiBwcmVmZXJcbiIKKyJvbmUgcmVtb3RlLCBlLmcuIHRoZSAnb3JpZ2luJyByZW1vdGUsIGNvbnNpZGVyIHNldHRpbmdcbiIKKyJjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbiBpbiB5b3VyIGNvbmZpZy4iCittc2dzdHIgIiIKKyJFxJ9lciBiaXIgdXphayBpemxlbWUgZGFsxLFuxLEgw6fEsWvEscWfIHlhcG1hayBpc3RlZGl5c2VuaXogw7Zybi4gJ29yaWdpbicsXG4iCisiYnVudSBhZMSxIC0tdHJhY2sgc2XDp2VuZcSfaSBpbGUgdGFtIG9sYXJhayBuaXRlbGVuZGlyaXAgeWFwYWJpbGlyc2luaXouXG4iCisiXG4iCisiXHRnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4vPGFkPlxuIgorIlxuIgorIkXEn2VyIGhlciB6YW1hbiBiZWxpcnNpeiA8YWQ+IMOnxLFrxLHFn2xhcsSxbsSxbiBiaXIgdXphayBrb251bXUgdGVyY2loIGV0bWVzaW5pXG4iCisiaXN0ZXJzZW5peiwgw7Zybi4gJ29yaWdpbicsIHlhcMSxbGFuZMSxcm1hbsSxemRhIGNoZWNrb3V0LmRlZmF1bHRzUmVtb3RlPW9yaWdpblxuIgorImF5YXLEsW7EsSB5YXBtYXnEsSBkw7zFn8O8bsO8bi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbWF0Y2hlZCBtdWx0aXBsZSAoJWQpIHJlbW90ZSB0cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiJyVzJyBiaXJkZW4gw6dvayAoJWQpIHV6YWsgaXpsZW1lIGRhbMSxeWxhIGXFn2xlxZ90aSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMTEKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQiCittc2dzdHIgInlhbG7EsXpjYSBiaXIgYmHFn3Z1cnUgYmVrbGVuaXlvcmR1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIKK21zZ3N0ciAieWFsbsSxemNhIGJpciBiYcWfdnVydSBiZWtsZW5peW9yZHUsICVkIHZlcmlsZGkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjc0IGJ1aWx0aW4vd29ya3RyZWUuYzoyODMgYnVpbHRpbi93b3JrdHJlZS5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgImdlw6dlcnNpeiBiYcWfdnVydTogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjg3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAiYmHFn3Z1cnUgYmlyIGHEn2FjYSBkZcSfaWw6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IHRhZyAnJXMnIgorbXNnc3RyICJiaXIgZGFsIGJla2xlbml5b3JkdSwgJyVzJyBldGlrZXRpIGFsxLFuZMSxIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IHJlbW90ZSBicmFuY2ggJyVzJyIKK21zZ3N0ciAiYmlyIGRhbCBiZWtsZW5peW9yZHUsICclcycgdXphayBkYWwgYWzEsW5kxLEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgJyVzJyIKK21zZ3N0ciAiYmlyIGRhbCBiZWtsZW5peW9yZHUsICclcycgYWzEsW5kxLEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgY29tbWl0ICclcyciCittc2dzdHIgImJpciBkYWwgYmVrbGVuaXlvcmR1LCAnJXMnIGfDtm5kZXJpc2kgYWzEsW5kxLEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzU2Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIG1lcmdpbmdcbiIKKyJDb25zaWRlciBcImdpdCBtZXJnZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJCaXJsZcWfdGlybWUgeWFwYXJrZW4gZGFsIGRlxJ9pxZ90aXJpbGVtaXlvci5cbiIKKyJcImdpdCBtZXJnZSAtLXF1aXRcIiB2ZXlhIFwiZ2l0IHdvcmt0cmVlIGFkZFwiIHlhcG1hecSxIGTDvMWfw7xuw7xuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjAKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uXG4iCisiQ29uc2lkZXIgXCJnaXQgYW0gLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisiQmlyIFwiYW1cIiBvdHVydW11bnVuIG9ydGFzxLFuZGEgZGFsIGRlxJ9pxZ90aXJpbGVtaXlvci5cbiIKKyJcImdpdCBhbSAtLXF1aXRcIiB2ZXlhIFwiZ2l0IHdvcmt0cmVlIGFkZFwiIHlhcG1hecSxIGTDvMWfw7xuw7xuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjQKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZWJhc2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisiWWVuaWRlbiB0ZW1lbGxlbmRpcm1lIHlhcGFya2VuIGRhbCBkZcSfacWfdGlyaWxlbWl5b3IuXG4iCisiXCJnaXQgcmViYXNlIC0tcXVpdFwiIHZleWEgXCJnaXQgd29ya3RyZWUgYWRkXCIgeWFwbWF5xLEgZMO8xZ/DvG7DvG4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2OAorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSBjaGVycnktcGlja2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIlNlw6ctYWwgeWFwYXJrZW4gZGFsIGRlxJ9pxZ90aXJpbGVtaXlvci5cbiIKKyJcImdpdCBjaGVycnktcGljayAtLXF1aXRcIiB2ZXlhIFwiZ2l0IHdvcmt0cmVlIGFkZFwiIHlhcG1hecSxIGTDvMWfw7xuw7xuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzIKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmV2ZXJ0aW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgcmV2ZXJ0IC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIkdlcmkgYWwgeWFwYXJrZW4gZGFsIGRlxJ9pxZ90aXJpbGVtaXlvci5cbiIKKyJcImdpdCByZXZlcnQgLS1xdWl0XCIgdmV5YSBcImdpdCB3b3JrdHJlZSBhZGRcIiB5YXBtYXnEsSBkw7zFn8O8bsO8bi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzc2Cittc2dpZCAieW91IGFyZSBzd2l0Y2hpbmcgYnJhbmNoIHdoaWxlIGJpc2VjdGluZyIKK21zZ3N0ciAiaWtpbGkgYXJhbWEgeWFwYXJrZW4gZGFsIGRlxJ9pxZ90aXJpeW9yc3VudXoiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgzCittc2dpZCAicGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgImRhbCBkZcSfacWfdGlyaWxpcmtlbiB5b2xsYXIga3VsbGFuxLFsYW1heiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODYgYnVpbHRpbi9jaGVja291dC5jOjEzOTAgYnVpbHRpbi9jaGVja291dC5jOjEzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiZGFsIGRlxJ9pxZ90aXJpbGlya2VuICclcycga3VsbGFuxLFsYW1heiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzOTggYnVpbHRpbi9jaGVja291dC5jOjE0MDEgYnVpbHRpbi9jaGVja291dC5jOjE0MDQKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDA5IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIgorbXNnc3RyICInJXMnLCAnJXMnIGlsZSBiaXJsaWt0ZSBrdWxsYW7EsWxhbWF6IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQxMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCB0YWtlIDxzdGFydC1wb2ludD4iCittc2dzdHIgIiclcycsIDxiYcWfbGFtYS1ub2t0YXPEsT4gYWxhbWF6IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIKK21zZ3N0ciAiRGFsIGfDtm5kZXJpIG9sbWF5YW4gJyVzJyDDtmdlc2luZSBkZcSfacWfdGlyaWxlbWV6IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQyNgorbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG9yIGNvbW1pdCBhcmd1bWVudCIKK21zZ3N0ciAiZGFsIHZleWEgZ8O2bmRlcmkgZGXEn2nFn2tlbmkgZWtzaWsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDY4IGJ1aWx0aW4vY2xvbmUuYzo5MSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjcyCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNSBidWlsdGluL2ZldGNoLmM6MTY3IGJ1aWx0aW4vbWVyZ2UuYzoyODYKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI3IGJ1aWx0aW4vcHVsbC5jOjExOCBidWlsdGluL3B1c2guYzo1NjMKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc0Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJkdXJ1bSBiZWxpcnRtZXlpIHpvcmxhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ2OQorbXNnaWQgInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJ5ZW5pIGRhbCBpbGUgYmlyIDMgecO2bmzDvCBiaXJsZcWfdGlybWUgZ2Vyw6dla2xlxZ90aXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDcwIGJ1aWx0aW4vbG9nLmM6MTY5MCBwYXJzZS1vcHRpb25zLmg6MzIyCittc2dpZCAic3R5bGUiCittc2dzdHIgInN0aWwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDcxCittc2dpZCAiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIKK21zZ3N0ciAiw6dha8SxxZ9tYSBzdGlsaSAoYmlybGXFn3Rpcm1lIHZleWEgZGlmZjMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MyBidWlsdGluL3dvcmt0cmVlLmM6NDk2Cittc2dpZCAiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICJhZMSxIHZlcmlsZW4gZ8O2bmRlcmlkZSBIRUFEJ2kgYXnEsXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg0Cittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgInllbmkgZGFsIGnDp2luIMO8c3RrYXluYWsgYmlsZ2lzaSBheWFybGEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg2Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgInpvcmxhIMOnxLFrxLHFnyB5YXAgKHllcmVsIGRlxJ9pxZ9pa2xpa2xlcmkgw6fDtnBlIGF0KSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODgKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICJ5ZW5pIGRhbCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODgKK21zZ2lkICJuZXcgdW5wYXJlbnRlZCBicmFuY2giCittc2dzdHIgInllbmkgw7xzdCDDtmdlc2kgb2xtYXlhbiBkYWwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDkwIGJ1aWx0aW4vbWVyZ2UuYzoyODkKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgInlvayBzYXnEsWxhbiBkb3N5YWxhcsSxIGfDvG5jZWxsZSAow7ZudGFuxLFtbMSxKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0OTMKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgIiIKKyJ2ZXJpbGVuIGJhxZ92dXJ1eXUgYmHFn2thIGJpciDDp2FsxLHFn21hIGHEn2FjxLFuxLFuIHR1dHVwIHR1dG1hZMSxxJ/EsW7EsSBkZW5ldGxlbWUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTA2Cittc2dpZCAiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICJiaXJsZcWfdGlyaWxtZXllbiBkb3N5YWxhciBpw6dpbiBiaXppbSBzw7xyw7xtw7wgw6fEsWvEscWfIHlhcCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MDkKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiYmlybGXFn3RpcmlsbWV5ZW4gZG9zeWFsYXIgacOnaW4gb25sYXLEsW4gc8O8csO8bcO8bsO8IMOnxLFrxLHFnyB5YXAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTEzCittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICJ5b2wgYmVsaXJ0ZcOnbGVyaW5pIHlhbG7EsXpjYSBhcmFsxLFrbMSxIGdpcmRpbGVyZSBrxLFzxLF0bGFtYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NjUKK21zZ2lkICItYiwgLUIgYW5kIC0tb3JwaGFuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1iLCAtQiB2ZSAtLW9ycGhhbiBiaXJsaWt0ZSBrdWxsYW7EsWxtYXoiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTY4Cittc2dpZCAiLXAgYW5kIC0tb3ZlcmxheSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItcCB2ZSAtLW92ZXJsYXkgYmlybGlrdGUga3VsbGFuxLFsbWF6IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYwNQorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS10cmFjayBpw6dpbiBiaXIgZGFsIGFkxLEgZ2VyZWtsaSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2MTAKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgImVrc2lrIGRhbCBhZMSxOyAtYiBkZW5leWluIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAlcyIKK21zZ3N0ciAiJXMgw6fDtnrDvGxlbWVkaSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NTgKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiZ2XDp2Vyc2l6IHlvbCBiZWxpcnRpbWkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIiclcycgYmlyIGfDtm5kZXJpIGRlxJ9pbCB2ZSBvbmRhbiBiaXIgJyVzJyBkYWzEsSBvbHXFn3R1cnVsYW1heiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGJpciAnJXMnIHlvbCBkZcSfacWfa2VuaSBhbG3EsXlvciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NzgKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWRldGFjaCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUsIC0tZGV0YWNoIGlsZSB1eXVtc3V6IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY4MSBidWlsdGluL3Jlc2V0LmM6MzI0IGJ1aWx0aW4vc3Rhc2guYzoxNTA2Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1wYXRjaCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUsIC0tcGF0Y2ggaWxlIHV5dW1zdXoiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjkyCittc2dpZCAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgdmUgLS1tZXJnZSBpbmRla3Mgw6fEsWvEscWfxLEgeWFwxLFsxLFya2VuXG4iCisiYmlybGlrdGUga3VsbGFuxLFsYW1heiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2OTcKK21zZ2lkICJ5b3UgbXVzdCBzcGVjaWZ5IHBhdGgocykgdG8gcmVzdG9yZSIKK21zZ3N0ciAiZXNraSBkdXJ1bXVuYSBnZXRpcmlsZWNlayB5b2xsYXLEsSBiZWxpcnRtZWxpc2luaXoiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI1IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3NiBidWlsdGluL2Nsb25lLmM6MTIxIGJ1aWx0aW4vcmVtb3RlLmM6MTcwCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MiBidWlsdGluL3dvcmt0cmVlLmM6NDkyIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTQKK21zZ2lkICJicmFuY2giCittc2dzdHIgImRhbCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjQKK21zZ2lkICJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAieWVuaSBiaXIgZGFsIG9sdcWfdHVyIHZlIMOnxLFrxLHFnyB5YXAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI2Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAiYmlyIGRhbCBvbHXFn3R1ci9zxLFmxLFybGEgdmUgw6fEsWvEscWfIHlhcCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjcKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICJ5ZW5pIGRhbCBpw6dpbiBiYcWfdnVydSBnw7xubMO8xJ/DvCBvbHXFn3R1ciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjkKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBjaGVja291dCA8bm8tc3VjaC1icmFuY2g+JyAoZGVmYXVsdCkiCittc2dzdHIgIidnaXQgY2hlY2tvdXQgPGLDtnlsZS1iaXItZGFsLXlvaz4nYSB0ZW1raW5saSB5YWtsYcWfICjDtm50YW7EsW1sxLEpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTczMAorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUgKGRlZmF1bHQpIgorbXNnc3RyICJ5ZXJwYXlsYcWfxLFtIGtpcGluaSBrdWxsYW4gKMO2bnRhbsSxbWzEsSkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc1Cittc2dpZCAiY3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoIgorbXNnc3RyICJ5ZW5pIGJpciBkYWwgb2x1xZ90dXIgdmUgb25hIGdlw6ciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBzd2l0Y2ggdG8gYSBicmFuY2giCittc2dzdHIgImJpciBkYWwgb2x1xZ90dXIvc8SxZsSxcmxhIHZlIG9uYSBnZcOnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3OQorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IHN3aXRjaCA8bm8tc3VjaC1icmFuY2g+JyIKK21zZ3N0ciAiJ2dpdCBzd2l0Y2ggPGLDtnlsZS1iaXItZGFsLXlvaz4nYSB0ZW1raW5saSB5YWtsYcWfIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc4MQorbXNnaWQgInRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAieWVyZWwgZGXEn2nFn2lrbGlrbGVyaSDDp8O2cGUgYXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODEzCittc2dpZCAid2hpY2ggdHJlZS1pc2ggdG8gY2hlY2tvdXQgZnJvbSIKK21zZ3N0ciAiw6fEsWvEscWfIHlhcMSxbGFjYWsgYcSfYWPEsW1zxLEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODE1Cittc2dpZCAicmVzdG9yZSB0aGUgaW5kZXgiCittc2dzdHIgImluZGVrc2kgZXNraSBkdXJ1bXVuYSBnZXRpciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTcKK21zZ2lkICJyZXN0b3JlIHRoZSB3b3JraW5nIHRyZWUgKGRlZmF1bHQpIgorbXNnc3RyICLDp2FsxLHFn21hIGHEn2FjxLFuxLEgZXNraSBkdXJ1bXVuYSBnZXRpciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTkKK21zZ2lkICJpZ25vcmUgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiYmlybGXFn3RpcmlsbWVtacWfIGdpcmRpbGVyaSB5b2sgc2F5IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgyMAorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUiCittc2dzdHIgInllcnBheWxhxZ/EsW0ga2lwaW5pIGt1bGxhbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjI4Cittc2dpZCAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxkaXpnaT5dIFsteCB8IC1YXSBbLS1dIDx5b2xsYXI+Li4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiJXMga2FsZMSxcsSxbMSxeW9yXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMworIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiJXMga2FsZMSxcsSxbGFjYWtcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAiJXMgZGl6aW5pIGF0bGFuxLF5b3JcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICIlcyBkaXppbmkgYXRsYW5hY2FrXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICIlcyBrYWxkxLFyxLFsYW1hZMSxIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxzdGF0ICVzXG4iCittc2dzdHIgIiVzICdsc3RhdCcgeWFwxLFsYW1hZMSxXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZ1xuIgorbXNnc3RyICIiCisixLBzdGVtIHlhcmTEsW3EsTpcbiIKKyIxICAgICAgICAgIC0gbnVtYXJhbGFuZMSxcsSxbG3EscWfIGJpciDDtmdlIHNlw6dcbiIKKyJmb28gICAgICAgIC0gYmVuemVyc2l6IMO2bmVrZSBkYXlhbmFyYWsgYmlyIMO2Z2Ugc2XDp1xuIgorIiAgICAgICAgICAgLSAoYm/FnykgaGnDp2JpciDFn2V5IHNlw6dtZVxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZ1xuIgorbXNnc3RyICIiCisixLBzdGVtIHlhcmTEsW3EsToxICAgICAgICAgIC0gdGVrIGJpciDDtmdlIHNlw6dcbiIKKyIzLTUgICAgICAgIC0gYmlyIMO2Z2UgYXJhbMSxxJ/EsSBzZcOnXG4iCisiMi0zLDYtOSAgICAtIGJpcmRlbiDDp29rIGVyaW0gc2XDp1xuIgorImZvbyAgICAgICAgLSBiZW56ZXJzaXogw7ZuZWtlIGRheWFuYXJhayBiaXIgw7ZnZSBzZcOnXG4iCisiLS4uLiAgICAgICAtIGJlbGlydGlsZW4gw7ZnZWxlcmluIHNlw6dpbWluaSBrYWxkxLFyXG4iCisiKiAgICAgICAgICAtIHTDvG0gw7ZnZWxlcmkgc2XDp1xuIgorIiAgICAgICAgICAgLSAoYm/Fnykgc2XDp2ltaSBiaXRpclxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTIxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTcwCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU3NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/XG4iCittc2dzdHIgIlBhcmRvbiAoJXMpP1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIKK21zZ3N0ciAiR2lyZGkgeW9rIHNheW1hIGRpemdpbGVyaT4+ICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBDYW5ub3QgZmluZCBpdGVtcyBtYXRjaGVkIGJ5OiAlcyIKK21zZ3N0ciAiVVlBUkk6IMWedW51bmxhIGXFn2xlxZ9lbiDDtmdlbGVyIGJ1bHVuYW3EsXlvcjogJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MjEKK21zZ2lkICJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlIgorbXNnc3RyICJTaWxpbmVjZWsgw7ZnZWxlcmkgc2XDp2luIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGtlZXAgW3kvTl0gYXMgaXMKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZlICVzIFt5L05dPyAiCittc2dzdHIgIiVzIGthbGTEsXLEsWxzxLFuIG3EsSBbeS9OXT8gIgorCisjOiBidWlsdGluL2NsZWFuLmM6Nzk1Cittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gdGVtaXpsacSfZSBiYcWfbGFcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gc2lsaW5tZXllY2VrIMO2Z2VsZXJpIGJlbGlybGVcbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2lsaW5lY2VrIMO2Z2VsZXJpIHNhecSxbGFyxLEgaWxlIHNlw6dcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0gaGVyIHNpbG1leWkgb25heWxhIChcInJtIC1pXCIgZ2liaSlcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gdGVtaXpsacSfaSBkdXJkdXJcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gYnUgZWtyYW7EsSBnw7Zyw7xudMO8bGVcbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaXN0ZW0gc2XDp2ltaSBpw6dpbiB5YXJkxLFtIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODMxCittc2dpZCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbToiCittc2dpZF9wbHVyYWwgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW1zOiIKK21zZ3N0clswXSAiQcWfYcSfxLFkYWtpIMO2Z2Uga2FsZMSxcsSxbGFjYWs6IgorbXNnc3RyWzFdICJBxZ9hxJ/EsWRha2kgw7ZnZWxlciBrYWxkxLFyxLFsYWNhazoiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDcKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAiVGVtaXpsZW5lY2VrIGJhxZ9rYSBkb3N5YSB5b2ssIMOnxLFrxLFsxLF5b3IuIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA5Cittc2dpZCAiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiCittc2dzdHIgImthbGTEsXLEsWxhbiBkb3N5YWxhcsSxbiBhZGxhcsSxbsSxIHlhemTEsXJtYSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMQorbXNnaWQgImZvcmNlIgorbXNnc3RyICJ6b3JsYSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMgorbXNnaWQgImludGVyYWN0aXZlIGNsZWFuaW5nIgorbXNnc3RyICJldGtpbGXFn2ltbGkgdGVtaXpsaWsiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTQKK21zZ2lkICJyZW1vdmUgd2hvbGUgZGlyZWN0b3JpZXMiCittc2dzdHIgImRpemlubGVyaSB0w7xtw7x5bGUga2FsZMSxciIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNSBidWlsdGluL2Rlc2NyaWJlLmM6NTYyIGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjQKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4OSBidWlsdGluL2xvZy5jOjE3NyBidWlsdGluL2xvZy5jOjE3OQorIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NyBidWlsdGluL25hbWUtcmV2LmM6NTI2IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjgKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJwYXR0ZXJuIgorbXNnc3RyICJkaXpnaSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNgorbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICJ5b2sgc2F5bWEga3VyYWxsYXLEsW5hIDxkaXpnaT4gZWtsZSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNworbXNnaWQgInJlbW92ZSBpZ25vcmVkIGZpbGVzLCB0b28iCittc2dzdHIgInlvayBzYXnEsWxhbiBkb3N5YWxhciBkYSBrYWxkxLFyxLFsZMSxIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE5Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAieWFsbsSxemNhIHlvayBzYXnEsWxhbiBkb3N5YWxhcsSxIGthbGTEsXIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzcKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IHZlIC1YIGJpcmxpa3RlIGt1bGxhbsSxbGFtYXoiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDEKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgJ3RydWUnIG9sYXJhayBheWFybGFubcSxxZ8gdmUgbmUgLWksIG5lIC1uLCBuZSBkZSAtZiAiCisidmVyaWxtacWfOyB0ZW1pemxlbWUgcmVkZGVkaWxpeW9yIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTQ0Cittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0cyB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyAiCisicmVmdXNpbmcgdG8gY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugw7ZudGFuxLFtbMSxIG9sYXJhayAndHJ1ZScgdmUgbmUgLWksIG5lIC1uLCBuZSBkZSAtZiAiCisidmVyaWxtacWfOyB0ZW1pemxlbWUgcmVkZGVkaWxpeW9yIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDUKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs8c2XDp2VuZWtsZXI+XSBbLS1dIDxkZXBvPiBbPGRpemluPl0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MworbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICLDp8Sxa8SxxZ8geWFwbWEhIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQgYnVpbHRpbi9jbG9uZS5jOjk2IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4OQorbXNnaWQgImNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiw6fEsXBsYWsgYmlyIGRlcG8gb2x1xZ90dXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OAorbXNnaWQgImNyZWF0ZSBhIG1pcnJvciByZXBvc2l0b3J5IChpbXBsaWVzIGJhcmUpIgorbXNnc3RyICJiaXIgeWFuc8SxIGRlcG8gb2x1xZ90dXIgKMOnxLFwbGFrIGltYSBlZGVyKSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMAorbXNnaWQgInRvIGNsb25lIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJiaXIgeWVyZWwgZGVwb2RhbiBrbG9ubGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDIKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAieWVyZWwgc2FiaXQgYmHEn2xhcsSxIGt1bGxhbm1hLCBoZXIgemFtYW4ga29weWFsYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNAorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICJwYXlsYcWfxLFsYW4gZGVwbyBheWFybGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJwYXRoc3BlYyIKK21zZ3N0ciAieW9sIGJlbGlydGVjaSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgImtsb24gacOnZXJpc2luZGVraSBhbHRtb2TDvGxsZXJpIGlsa2xlbmRpciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGNsb25lZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAicGFyYWxlbGRlIGtsb25sYW5hbiBhbHRtb2TDvGxsZXJpbiBzYXnEsXPEsSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMSBidWlsdGluL2luaXQtZGIuYzo0ODYKK21zZ2lkICJ0ZW1wbGF0ZS1kaXJlY3RvcnkiCittc2dzdHIgIsWfYWJsb24gZGl6aW5pIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEyIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NworbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgIsWfYWJsb25sYXLEsW4ga3VsbGFuxLFsYWNhxJ/EsSBkaXppbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNCBidWlsdGluL2Nsb25lLmM6MTE2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA3CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMgorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICJiYcWfdnVydSBkZXBvc3UiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE0Cittc2dpZCAidXNlIC0tcmVmZXJlbmNlIG9ubHkgd2hpbGUgY2xvbmluZyIKK21zZ3N0ciAiLS1yZWZlcmVuY2UnxLEgeWFsbsSxemNhIGtsb25sYXJrZW4ga3VsbGFuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE5IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDYKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0MSBidWlsdGluL3JlcGFjay5jOjMyNworbXNnaWQgIm5hbWUiCittc2dzdHIgImFkIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIwCittc2dpZCAidXNlIDxuYW1lPiBpbnN0ZWFkIG9mICdvcmlnaW4nIHRvIHRyYWNrIHVwc3RyZWFtIgorbXNnc3RyICLDvHN0a2F5bmHEn8SxIGl6bGVtZWsgacOnaW4gJ29yaWdpbicgeWVyaW5lIDxhZD4ga3VsbGFuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIyCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAidXphayBrb251bXVuIEhFQUQnaSB5ZXJpbmUgPGRhbD4nxLEgw6fEsWvEscWfIHlhcCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNAorbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgInV6YWsga29udW1kYWtpIGdpdC11cGxvYWQtcGFjaydlIG9sYW4geW9sIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI1IGJ1aWx0aW4vZmV0Y2guYzoxNjggYnVpbHRpbi9ncmVwLmM6ODI4CisjOiBidWlsdGluL3B1bGwuYzoyMDcKK21zZ2lkICJkZXB0aCIKK21zZ3N0ciAiZGVyaW5saWsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjYKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoYXQgZGVwdGgiCittc2dzdHIgInZlcmlsZW4gZGVyaW5saWt0ZSBzxLHEnyBiaXIgZGVwbyBvbHXFn3R1ciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNyBidWlsdGluL2ZldGNoLmM6MTcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzMAorbXNnaWQgInRpbWUiCittc2dzdHIgInphbWFuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgInZlcmlsZW4gemFtYW5kYW4gc29ucmFzxLFuxLEgacOnZXJlbiBiaXIgc8SxxJ8gZGVwbyBvbHXFn3R1ciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOSBidWlsdGluL2ZldGNoLmM6MTcyIGJ1aWx0aW4vZmV0Y2guYzoxOTUKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MAorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICJyZXZpenlvbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMCBidWlsdGluL2ZldGNoLmM6MTczCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSwgZXhjbHVkaW5nIHJldiIKK21zZ3N0ciAicmV2aXp5b251IGhhcmnDpyB0dXRhcmFrIHPEscSfIGtsb251biBnZcOnbWnFn2luaSBkZXJpbmxlxZ90aXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTI4Cittc2dpZCAiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIgorbXNnc3RyICJ5YWxuxLF6Y2EgYmlyIGRhbCBrbG9ubGEsIEhFQUQgdmV5YSAtLWJyYW5jaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNAorbXNnaWQgImRvbid0IGNsb25lIGFueSB0YWdzLCBhbmQgbWFrZSBsYXRlciBmZXRjaGVzIG5vdCB0byBmb2xsb3cgdGhlbSIKK21zZ3N0ciAiZXRpa2V0IGtsb25sYW1hIHZlIHNvbnJha2kgZ2V0aXJtZWxlciBkZSBvbmxhcsSxIGl6bGVtZXNpbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNgorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIGJlIHNoYWxsb3ciCittc2dzdHIgImtsb25sYW5hbiBhbHRtb2TDvGxsZXIgc8SxxJ8gb2xhY2FrIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiZ2l0IGRpemluaSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOCBidWlsdGluL2luaXQtZGIuYzo0OTYKK21zZ2lkICJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIgorbXNnc3RyICJnaXQgZGl6aW5pbmkgw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhbiBhecSxciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOQorbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAiYW5haHRhcj1kZcSfZXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDAKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgInlhcMSxbGFuZMSxcm1hecSxIHllbmkgZGVwb251biBpw6dpbmRlIGF5YXJsYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MgorbXNnaWQgInNlcnZlci1zcGVjaWZpYyIKK21zZ3N0ciAic3VudWN1eWEgw7Z6ZWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzMKK21zZ2lkICJvcHRpb24gdG8gdHJhbnNtaXQiCittc2dzdHIgImlsZXRtZSBzZcOnZW5lxJ9pIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQzIGJ1aWx0aW4vZmV0Y2guYzoxOTEgYnVpbHRpbi9wdWxsLmM6MjIwCisjOiBidWlsdGluL3B1c2guYzo1NzQKK21zZ2lkICJ1c2UgSVB2NCBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAieWFsbsSxemNhIElQdjQgYWRyZXNsZXJpIGt1bGxhbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0NSBidWlsdGluL2ZldGNoLmM6MTkzIGJ1aWx0aW4vcHVsbC5jOjIyMworIzogYnVpbHRpbi9wdXNoLmM6NTc2Cittc2dpZCAidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgInlhbG7EsXpjYSBJUHY2IGFkcmVzbGVyaSBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDkKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCB1c2UgdGhlaXIgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAia2xvbmxhbmFuIGhlcmhhbmdpIGJpciBhbHRtb2TDvGwga2VuZGkgdXphayBpemxlbWUgZGFsbGFyxLFuxLEga3VsbGFuYWNhayIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE1MQorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgdG8gaW5jbHVkZSBvbmx5IGZpbGVzIGF0IHJvb3QiCittc2dzdHIgIiIKKyJzcGFyc2UtY2hlY2tvdXQgZG9zeWFzxLFuxLEgeWFsbsSxemNhIGvDtmt0ZWtpIGRvc3lhbGFyxLEgacOnZXJlY2VrIGJpw6dpbWRlICIKKyJpbGtsZW5kaXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoyODcKK21zZ2lkICIiCisiTm8gZGlyZWN0b3J5IG5hbWUgY291bGQgYmUgZ3Vlc3NlZC5cbiIKKyJQbGVhc2Ugc3BlY2lmeSBhIGRpcmVjdG9yeSBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICIiCisiQmlyIGRpemluIGFkxLEgdGFobWluIGVkaWxlbWVkaS5cbiIKKyJMw7x0ZmVuIGtvbXV0IHNhdMSxcsSxbmRhIGJpciBkaXppbiBiZWxpcnRpbi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbzogQ291bGQgbm90IGFkZCBhbHRlcm5hdGUgZm9yICclcyc6ICVzXG4iCittc2dzdHIgImluZm86ICclcycgacOnaW4gYWx0ZXJuYXRpZiBla2xlbmVtZWRpOiAlc1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIlcyB2YXIgdmUgYmlyIGRpemluIGRlxJ9pbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhcnQgaXRlcmF0b3Igb3ZlciAnJXMnIgorbXNnc3RyICJ5aW5lbGV5aWNpICclcycgw7x6ZXJpbmRlbiDDp2FsxLHFn3TEsXLEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgIiclcycgYmHEn8SxIG9sdcWfdHVydWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICJkb3N5YSDFn3VyYXlhIGtvcHlhbGFuYW1hZMSxOiAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBpdGVyYXRlIG92ZXIgJyVzJyIKK21zZ3N0ciAiJyVzJyDDvHplcmluZGUgeWluZWxlbmVtZWRpIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgImJpdHRpLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTA4Cittc2dpZCAiIgorIkNsb25lIHN1Y2NlZWRlZCwgYnV0IGNoZWNrb3V0IGZhaWxlZC5cbiIKKyJZb3UgY2FuIGluc3BlY3Qgd2hhdCB3YXMgY2hlY2tlZCBvdXQgd2l0aCAnZ2l0IHN0YXR1cydcbiIKKyJhbmQgcmV0cnkgd2l0aCAnZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LydcbiIKK21zZ3N0ciAiIgorIktsb25sYW1hIGJhxZ9hcsSxbMSxIG9sZHUsIGFuY2FrIMOnxLFrxLHFnyB5YXDEsWxhbWFkxLEuXG4iCisiTmV5aW4gw6fEsWvEscWfIHlhcMSxbMSxcCB5YXDEsWxtYWTEscSfxLFuxLEgJ2dpdCBzdGF0dXMnIGlsZSBpbmNlbGV5ZWJpbGlyXG4iCisidmUgJ2dpdCByZXN0b3JlIC0tc291cmNlPUhFQUQnIGlsZSB5ZW5pZGVuIGRlbmV5ZWJpbGlyc2luaXouXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIktsb25sYW5hY2FrICVzIHV6YWsgZGFsIGJ1bHVuYW1hZMSxLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlICVzIgorbXNnc3RyICIlcyBnw7xuY2VsbGVuZW1peW9yIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzUzCittc2dpZCAiZmFpbGVkIHRvIGluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJzcGFyc2UtY2hlY2tvdXQgaWxrbGVuZGlyaWxlbWVkaSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc3NgorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAiIgorInV6YWsga29udW0gSEVBRCdpIHZhciBvbG1heWFuIGJhxZ92dXJ1eWEgYmHEn2xhbsSxeW9yLCDDp8Sxa8SxxZ8geWFwxLFsYW3EsXlvci5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwNworbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgIsOnYWzEscWfbWEgYcSfYWPEsSDDp8Sxa8SxxZ8geWFwxLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICJwYXJhbWV0cmVsZXIgeWFwxLFsYW5kxLFybWEgZG9zeWFzxLFuYSB5YXrEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTI1Cittc2dpZCAiY2Fubm90IHJlcGFjayB0byBjbGVhbiB1cCIKK21zZ3N0ciAidGVtaXpsaWsgacOnaW4geWVuaWRlbiBwYWtldGxlbmVtaXlvciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNworbXNnaWQgImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAiZ2XDp2ljaSBhbHRlcm5hdGlmbGVyIGRvc3lhc8SxbsSxbiBiYcSfbGFudMSxc8SxIGtlc2lsZW1peW9yIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTY1IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgIsOHb2sgZmF6bGEgZGXEn2nFn2tlbi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjkKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIktsb25sYW1hayBpw6dpbiBiaXIgZGVwbyBiZWxpcnRtZWxpc2luaXouIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiLS1iYXJlIHZlIC0tb3JpZ2luICVzIHNlw6dlbmVrbGVyaSBiaXJiaXJpeWxlIHV5dW1zdXouIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTg1Cittc2dpZCAiLS1iYXJlIGFuZCAtLXNlcGFyYXRlLWdpdC1kaXIgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIi0tYmFyZSB2ZSAtLXNlcGFyYXRlLWdpdC1kaXIgYmlyYmlyaXlsZSB1eXVtc3V6LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiclcycgZGVwb3N1IG1ldmN1dCBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDA0IGJ1aWx0aW4vZmV0Y2guYzoxNzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiJXMgZGVyaW5sacSfaSBwb3ppdGlmIGJpciBzYXnEsSBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIkhlZGVmIHlvbHUgJyVzJyBoYWxpaGF6xLFyZGEgbWV2Y3V0IHZlIGJvxZ8gYmlyIGRpemluIGRlxJ9pbC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiw4dhbMSxxZ9tYSBhxJ9hY8SxICclcycgaGFsaWhhesSxcmRhIG1ldmN1dC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDM5IGJ1aWx0aW4vY2xvbmUuYzoxMDYwIGJ1aWx0aW4vZGlmZnRvb2wuYzoyNzEKKyM6IGJ1aWx0aW4vbG9nLmM6MTg2NiBidWlsdGluL3dvcmt0cmVlLmM6Mjk1IGJ1aWx0aW4vd29ya3RyZWUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgIsWfdW51biDDtm5jw7wgZGl6aW5sZXJpIG9sdcWfdHVydWxhbWFkxLE6ICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnIgorbXNnc3RyICInJXMnIMOnYWzEscWfbWEgYcSfYWPEsSBkaXppbmkgb2x1xZ90dXJ1bGFtYWTEsSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnJXMnLi4uXG4iCittc2dzdHIgIiclcycgw6fEsXBsYWsgZGVwb3N1bmEga2xvbmxhbsSxeW9yLi4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgIsWedXJheWEga2xvbmxhbsSxeW9yOiAnJXMnLi4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDkwCittc2dpZCAiIgorImNsb25lIC0tcmVjdXJzaXZlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggYm90aCAtLXJlZmVyZW5jZSBhbmQgLS1yZWZlcmVuY2UtaWYtIgorImFibGUiCittc2dzdHIgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSBoZW0gLS1yZWZlcmVuY2UgaGVtIC0tcmVmZXJlbmNlLWlmLWFibGUgaWxlIHV5dW1sdSBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU0Cittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tZGVwdGggeWVyZWwga2xvbmxhcmRhIHlvayBzYXnEsWzEsXI7IHllcmluZSBmaWxlOi8vIGt1bGxhbsSxbi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU2Cittc2dpZCAiLS1zaGFsbG93LXNpbmNlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1zaGFsbG93LXNpbmNlIHllcmVsIGtsb25sYXJkYSB5b2sgc2F5xLFsxLFyOyB5ZXJpbmUgZmlsZTovLyBrdWxsYW7EsW4uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1OAorbXNnaWQgIi0tc2hhbGxvdy1leGNsdWRlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tc2hhbGxvdy1leGNsdWRlIHllcmVsIGtsb25sYXJkYSB5b2sgc2F5xLFsxLFyOyB5ZXJpbmUgZmlsZTovLyBrdWxsYW7EsW4uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2MAorbXNnaWQgIi0tZmlsdGVyIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1maWx0ZXIgeWVyZWwga2xvbmxhcmRhIHlvayBzYXnEsWzEsXI7IHllcmluZSBmaWxlOi8vIGt1bGxhbsSxbi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTYzCittc2dpZCAic291cmNlIHJlcG9zaXRvcnkgaXMgc2hhbGxvdywgaWdub3JpbmcgLS1sb2NhbCIKK21zZ3N0ciAia2F5bmFrIGRlcG8gc8SxxJ8sIC0tbG9jYWwgeW9rIHNhecSxbMSxeW9yIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2OAorbXNnaWQgIi0tbG9jYWwgaXMgaWdub3JlZCIKK21zZ3N0ciAiLS1sb2NhbCB5b2sgc2F5xLFsZMSxIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0MyBidWlsdGluL2Nsb25lLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAiJXMgdXphayBkYWzEsSAlcyDDvHN0a2F5bmHEn8SxbmRhIGJ1bHVuYW1hZMSxIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI1NAorbXNnaWQgIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iCittc2dzdHIgIkJvxZ8gYmlyIGRlcG95dSBrbG9ubGFtxLHFnyBnw7Zyw7xuw7x5b3JzdW51ei4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MTAKK21zZ2lkICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29sdW1uIFs8c2XDp2VuZWtsZXI+XSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNworbXNnaWQgImxvb2t1cCBjb25maWcgdmFycyIKK21zZ3N0ciAieWFwxLFsYW5kxLFybWEgZGXEn2nFn2tlbmxlcmluaSBhcmEiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgImt1bGxhbsSxbGFjYWsgeWVybGXFn2ltIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMwCittc2dpZCAiTWF4aW11bSB3aWR0aCIKK21zZ3N0ciAib2xhYmlsZWNlayBlbiDDp29rIGdlbmnFn2xpayIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgInNvbCBrZW5hcmRha2kgZG9sZ3UgYm/Fn2x1xJ91IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgInNhxJ8ga2VuYXJkYWtpIGRvbGd1IGJvxZ9sdcSfdSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMworbXNnaWQgIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIgorbXNnc3RyICJzw7x0dW5sYXIgYXJhc8SxbmRha2kgZG9sZ3UgYm/Fn2x1xJ91IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICItLWNvbW1hbmQgaWxrIGRlxJ9pxZ9rZW4gb2xtYWzEsSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjE4Cittc2dpZCAiIgorImdpdCBjb21taXQtdHJlZSBbKC1wIDxwYXJlbnQ+KS4uLl0gWy1TWzxrZXlpZD5dXSBbKC1tIDxtZXNzYWdlPikuLi5dIFsoLUYgIgorIjxmaWxlPikuLi5dIDx0cmVlPiIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtdHJlZSBbKC1wIDzDvHN0LcO2Z2U+KS4uLl0gWy1TWzxhbmFodG9yLW5vPl1dIFsoLW0gPGlsZXRpPikuLi5dIFsoLSIKKyJGIDxkb3N5YT4pLi4uXSA8YcSfYcOnPiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBwYXJlbnQgJXMgaWdub3JlZCIKK21zZ3N0ciAieWluZWxlbm1pxZ8gw7xzdCDDtmdlICVzIHlvayBzYXnEsWxkxLEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo1NiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTM2IGJ1aWx0aW4vbG9nLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICIlcyBnZcOnZXJsaSBiaXIgbmVzbmUgYWTEsSBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZTogJyVzJyBhw6fEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZTogJyVzJyBva3VuYW1hZMSxIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gY2xvc2UgJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiAnJXMnIGthcGF0xLFsYW1hZMSxIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICLDvHN0IMO2Z2UiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTIKK21zZ2lkICJpZCBvZiBhIHBhcmVudCBjb21taXQgb2JqZWN0IgorbXNnc3RyICJiaXIgw7xzdCBnw7ZuZGVyaSDDtmdlc2luaW4gbm8nc3UiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTQgYnVpbHRpbi9jb21taXQuYzoxNTAxIGJ1aWx0aW4vbWVyZ2UuYzoyNzEKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDkgYnVpbHRpbi9ub3Rlcy5jOjU3NSBidWlsdGluL3N0YXNoLmM6MTQ3NworIzogYnVpbHRpbi90YWcuYzo0MTIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICJpbGV0aSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNSBidWlsdGluL2NvbW1pdC5jOjE1MDEKK21zZ2lkICJjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiZ8O2bmRlcmkgaWxldGlzaSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExOAorbXNnaWQgInJlYWQgY29tbWl0IGxvZyBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAiZ8O2bmRlcmkgZ8O8bmzDvGsgaWxldGlzaW5pIGRvc3lhZGFuIG9rdSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEyMSBidWlsdGluL2NvbW1pdC5jOjE1MTMgYnVpbHRpbi9tZXJnZS5jOjI4OAorIzogYnVpbHRpbi9wdWxsLmM6MTc1IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE4Cittc2dpZCAiR1BHIHNpZ24gY29tbWl0IgorbXNnc3RyICJnw7ZuZGVyaXlpIEdQRyBpbGUgaW16YWxhIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTMzCittc2dpZCAibXVzdCBnaXZlIGV4YWN0bHkgb25lIHRyZWUiCittc2dzdHIgImJpciB0YW0gYcSfYcOnIHZlcm1lbGkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxNDAKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IG9rdW5hbWFkxLEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDEKK21zZ2lkICJnaXQgY29tbWl0IFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGNvbW1pdCBbPHNlw6dlbmVrbGVyPl0gWy0tXSA8eW9sLWJscnTDpz4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDYKK21zZ2lkICJnaXQgc3RhdHVzIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHN0YXR1cyBbPHNlw6dlbmVrbGVyPl0gWy0tXSA8eW9sLWJscnTDpz4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTEKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKyJFbiBzb24geWFwxLFsYW4gZ8O2bmRlcml5aSBkZcSfacWfdGlybWVrIGlzdGVkaW5peiwgYW5jYWsgYnUgb251XG4iCisiYm/Fn2FsdGFjYWt0xLFyLiBLb211dHVudXp1IC0tYWxsb3ctZW1wdHkgaWxlIHlpbmVsZXllYmlsaXIgdmV5YVxuIgorImfDtm5kZXJpeWkgXCJnaXQgcmVzZXQgSEVBRF5cIiBpbGUgdMO8bcO8eWxlIGthbGTEsXJhYmlsaXJzaW5pei5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisiQmlyIMO2bmNla2kgc2XDpy1hbCBiw7x5w7xrIG9sYXPEsWzEsWtsYSDDp2FrxLHFn21hIMOnw7Z6w7xtw7xuZGVuIGRvbGF5xLEgxZ91IGFuZGEgYm/Fny5cbiIKKyJZaW5lIGRlIGfDtm5kZXJtZWsgaXN0ZXJzZW5peiDFn3VudSBrdWxsYW7EsW46XG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MworbXNnaWQgIk90aGVyd2lzZSwgcGxlYXNlIHVzZSAnZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCdcbiIKK21zZ3N0ciAiQWtzaSBkdXJ1bWRhIGzDvHRmZW4gJ2dpdCBjaGVycnktcGljayAtLXNraXAnIGt1bGxhbsSxbi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NgorbXNnaWQgIiIKKyJhbmQgdGhlbiB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCisiXG4iCisidG8gcmVzdW1lIGNoZXJyeS1waWNraW5nIHRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLXNraXBcbiIKKyJcbiIKK21zZ3N0ciAiIgorInZlIHNvbnJhIGdlcmkga2FsYW4gZ8O2bmRlcmlsZXJpIHNlw6ctYWwgeWFwbWF5xLEgc8O8cmTDvHJtZWsgacOnaW46XG4iCisiXG4iCisiXHRnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorImt1bGxhbsSxbi5cbiIKKyJCdSBnw7ZuZGVyaXlpIGF0bGFtYWsgaXN0ZXJzZW5peiDFn3VudSBrdWxsYW7EsW46XG4iCisiXG4iCisiXHRnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMxNQorbXNnaWQgImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIKK21zZ3N0ciAiSEVBRCBhxJ9hw6cgbmVzbmVzaSBhw6fEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzUxCittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSwgLWEgaWxlIGJpciBhbmxhbSBpZmFkZSBldG1peW9yIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2NAorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiLS1pbmNsdWRlLy0tb25seSBpw6dlcm1leWVuIHlvbGxhciBiaXIgYW5sYW0gaWZhZGUgZXRtaXlvci4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzc2Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgImdlw6dpY2kgaW5kZWtzIG9sdcWfdHVydWxhbcSxeW9yIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4NQorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgImV0a2lsZcWfaW1saSBla2xlbWUgYmHFn2FyxLFzxLF6IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQwMAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJnZcOnaWNpIGluZGVrcyBnw7xuY2VsbGVuZW1peW9yIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQwMgorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICJBbmEgw7ZuYmVsbGVrIGHEn2FjxLEgZ8O8bmNlbGxlbmVtZWRpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQyNyBidWlsdGluL2NvbW1pdC5jOjQ1MCBidWlsdGluL2NvbW1pdC5jOjQ5NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAibmV3X2luZGV4X2ZpbGUgeWF6xLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzkKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgIkJpciBiaXJsZcWfdGlybWUgc8SxcmFzxLFuZGEga8Sxc21pIGfDtm5kZXJpIHlhcMSxbGFtYXouIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4MQorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiQmlyIHNlw6ctYWwgc8SxcmFzxLFuZGEga8Sxc21pIGfDtm5kZXJpIHlhcMSxbGFtYXouIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4OQorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiaW5kZWtzIG9rdW5hbcSxeW9yIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUwOAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAiZ2XDp2ljaSBpbmRla3MgZG9zeWFzxLEgeWF6xLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgbGFja3MgYXV0aG9yIGhlYWRlciIKK21zZ3N0ciAiJyVzJyBnw7ZuZGVyaXNpbmRlIHlhemFyIMO8c3RiaWxnaXNpIHlvayIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAiJyVzJyBnw7ZuZGVyaXNpbmRla2kgeWF6YXIgc2F0xLFyxLEgaGF0YWzEsSBvbHXFn3R1cnVsbXXFnyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MjcKK21zZ2lkICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgorbXNnc3RyICJoYXRhbMSxIG9sdcWfdHVydWxtdcWfIC0tYXV0aG9yIHBhcmFtZXRyZXNpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY4MAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisibWV2Y3V0IGfDtm5kZXJpIGlsZXRpc2luZGUga3VsbGFuxLFsbWF5YW4gYmlyIHlvcnVtXG4iCisia2FyYWt0ZXJpIHNlw6dpbGVtaXlvciIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MTggYnVpbHRpbi9jb21taXQuYzo3NTEgYnVpbHRpbi9jb21taXQuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICIlcyBnw7ZuZGVyaXNpIGFyYW5hbWFkxLEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMwIGJ1aWx0aW4vc2hvcnRsb2cuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIKK21zZ3N0ciAiKGfDvG5sw7xrIGlsZXRpc2kgc3RhbmRhcnQgZ2lyZGknZGVuIG9rdW51eW9yKVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMgorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJnw7xubMO8ayBzdGFuZGFydCBnaXJkaSdkZW4gb2t1bmFtYWTEsSIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAiZ8O8bmzDvGsgZG9zeWFzxLEgJyVzJyBva3VuYW1hZMSxIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc2NyBidWlsdGluL2NvbW1pdC5jOjc4MworbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgIlNRVUFTSF9NU0cgb2t1bmFtYWTEsSIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NzQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgIk1FUkdFX01TRyBva3VuYW1hZMSxIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzNAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgImfDtm5kZXJpIMWfYWJsb251IHlhesSxbGFtYWTEsSIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiR8O2csO8bsO8xZ9lIGJha8SxbMSxcnNhIGJpciBiaXJsZcWfdGlybWUgZ8O2bmRlcml5b3JzdW51ei5cbiIKKyJFxJ9lciBidSBkb8SfcnUgZGXEn2lsc2UgbMO8dGZlbiDFn3UgZG9zeWF5xLEga2FsZMSxcsSxbjpcbiIKKyJcdCVzXG4iCisidmUgeWVuaWRlbiBkZW5leWluLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJHw7Zyw7xuw7zFn2UgZ8O2cmUgYmlyIHNlw6ctYWwgZ8O2bmRlcml5b3JzdW51ei5cbiIKKyJFxJ9lciBidSBkb8SfcnUgZGXEn2lsc2UgbMO8dGZlbiDFn3UgZG9zeWF5xLEga2FsZMSxcsSxbjpcbiIKKyJcdCVzXG4iCisidmUgeWVuaWRlbiBkZW5leWluLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiTMO8dGZlbiBkZcSfacWfaWtsaWtsZXJpbml6IGnDp2luIGJpciBnw7ZuZGVyaSBpbGV0aXNpIGdpcmluLiAnJWMnIGlsZSBiYcWfbGF5YW5cbiIKKyJzYXTEsXJsYXIgeW9rIHNhecSxbGFjYWt0xLFyLiBCb8WfIGJpciBpbGV0aSBnw7ZuZGVyaXlpIGlwdGFsIGVkZXIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiTMO8dGZlbiBkZcSfacWfaWtsaWtsZXJpbml6IGnDp2luIGJpciBnw7ZuZGVyaSBpbGV0aXNpIGdpcmluLiAnJWMnIGlsZSBiYcWfbGF5YW5cbiIKKyJzYXTEsXJsYXIgdHV0dWxhY2FrdMSxcjsgaXN0ZXJzZW5peiBvbmxhcsSxIGthbGTEsXJhYmlsaXJzaW5pei5cbiIKKyJCb8WfIGJpciBpbGV0aSBnw7ZuZGVyaXlpIGlwdGFsIGVkZXIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXNZYXphcjogICAgICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlc0RhdGU6ICAgICAgJXMiCittc2dzdHIgIiVzVGFyaWg6ICAgICAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc0fDtm5kZXJlbjogICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkyOQorbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICLEsG5kZWtzIG9rdW5hbcSxeW9yIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5NworbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICJBxJ9hw6dsYXIgeWFwxLFsxLFya2VuIGhhdGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAxMSBidWlsdGluL3RhZy5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIkzDvHRmZW4gaWxldGl5aSAtbSB2ZXlhIC1GIHNlw6dlbmXEn2luaSBrdWxsYW5hcmFrIGRlc3Rla2xleWluLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1hdXRob3IgJyVzJyBpcyBub3QgJ05hbWUgPGVtYWlsPicgYW5kIG1hdGNoZXMgbm8gZXhpc3RpbmcgYXV0aG9yIgorbXNnc3RyICIiCisiLS1hdXRob3IgJyVzJywgJ0FkIDxlLXBvc3RhPicgYmnDp2ltaW5kZSBkZcSfaWwgdmUgbWV2Y3V0IGJpciB5YXphcmxhICIKKyJlxZ9sZcWfbWl5b3IiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlnbm9yZWQgbW9kZSAnJXMnIgorbXNnc3RyICJHZcOnZXJzaXogeW9rIHNhecSxbGFubGFyxLEgZ8O2c3RlciBraXBpICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA4NyBidWlsdGluL2NvbW1pdC5jOjEzMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICJHZcOnZXJzaXogaXpsZW5tZXllbiBkb3N5YWxhcsSxIGfDtnN0ZXIga2lwaSAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMjcKK21zZ2lkICItLWxvbmcgYW5kIC16IGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbG9uZyB2ZSAteiBiaXJiaXJpeWxlIHV5dW1zdXoiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3MQorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIkhlbSAtLXJlc2V0LWF1dGhvciB2ZSBoZW0gLS1hdXRob3IgYmlybGlrdGUgYmlyIGFubGFtIGlmYWRlIGV0bWl5b3IiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MAorbXNnaWQgIllvdSBoYXZlIG5vdGhpbmcgdG8gYW1lbmQuIgorbXNnc3RyICJEZcSfacWfdGlyZWNlayBiaXIgxZ9leWluaXogeW9rLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgzCittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiQmlyIGJpcmxlxZ90aXJtZW5pbiB0YW0gb3J0YXPEsW5kYXPEsW7EsXogLS0gZGXEn2nFn3Rpcm1lIHlhcMSxbGFtxLF5b3IuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODUKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJCaXIgc2XDpy1hbCfEsW4gdGFtIG9ydGFzxLFuZGFzxLFuxLF6IC0tIGRlxJ9pxZ90aXJtZSB5YXDEsWxhbcSxeW9yLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTg4Cittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLS1zcXVhc2ggdmUgLS1maXh1cCBzZcOnZW5la2xlcmkgYmlybGlrdGUga3VsbGFuxLFsYW1heiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk4Cittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIi1jLy1DLy1GLy0tZml4dXAgYXJhc8SxbmRhbiB5YWxuxLF6Y2EgYmlyIHRhbmVzaSBrdWxsYW7EsWxhYmlsaXIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDAKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYuIgorbXNnc3RyICItbSBzZcOnZW5lxJ9pIC1jLy1DLy1GIGlsZSBiaXJsaWt0ZSBrdWxsYW7EsWxhbWF6LiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjA4Cittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiIgorIi0tcmVzZXQtYXV0aG9yIHlhbG7EsXpjYSAtQywgLWMgdmV5YSAtLWFtZW5kIGlsZSBiaXJsaWt0ZSBrdWxsYW7EsWxhYmlsaXIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjUKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyItLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBhcmFzxLFuZGFuIHlhbG7EsXpjYSBiaXIgdGFuZXNpICIKKyJrdWxsYW7EsWxhYmlsaXIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHMgJyVzIC4uLicgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICInJXMgLi4uJyB5b2xsYXLEsSAtYSBpbGUgYmlyIGFubGFtIGlmYWRlIGV0bWl5b3IiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MiBidWlsdGluL2NvbW1pdC5jOjE1MjQKK21zZ2lkICJzaG93IHN0YXR1cyBjb25jaXNlbHkiCittc2dzdHIgImR1cnVtdSBrxLFzYWNhIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NCBidWlsdGluL2NvbW1pdC5jOjE1MjYKK21zZ2lkICJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiZGFsIGJpbGdpc2luaSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjYKK21zZ2lkICJzaG93IHN0YXNoIGluZm9ybWF0aW9uIgorbXNnc3RyICJ6dWxhIGJpbGdpc2luaSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjggYnVpbHRpbi9jb21taXQuYzoxNTI4Cittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgInRhbSDDtm7DvG5kZS9hcmthc8SxbmRhIGRlxJ9lcmxlcmluaSBoZXNhcGxhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzAKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJzw7xyw7xtIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzAgYnVpbHRpbi9jb21taXQuYzoxNTMwIGJ1aWx0aW4vcHVzaC5jOjU0OQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY0MworbXNnaWQgIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IgorbXNnc3RyICJtYWtpbmUgdGFyYWbEsW5kYW4gb2t1bmFiaWxpciDDp8Sxa3TEsSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzczIGJ1aWx0aW4vY29tbWl0LmM6MTUzMgorbXNnaWQgInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIKK21zZ3N0ciAiZHVydW11IHV6dW4gYmnDp2ltZGUgZ8O2c3RlciAow7ZudGFuxLFtbMSxKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc2IGJ1aWx0aW4vY29tbWl0LmM6MTUzNQorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIgorbXNnc3RyICJnaXJkaWxlcmkgTlVMIGlsZSBzb25sYW5kxLFyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzggYnVpbHRpbi9jb21taXQuYzoxMzgyIGJ1aWx0aW4vY29tbWl0LmM6MTUzOAorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTMgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTYKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU5IGJ1aWx0aW4vcmViYXNlLmM6MTU2OSBwYXJzZS1vcHRpb25zLmg6MzM2Cittc2dpZCAibW9kZSIKK21zZ3N0ciAia2lwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzkgYnVpbHRpbi9jb21taXQuYzoxNTM4Cittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisiaXpsZW5tZXllbiBkb3N5YWxhcsSxIGfDtnN0ZXIsIGlzdC4gYmHEn2zEsSBraXBsZXI6IGFsbCwgbm9ybWFsLCBubyAow5ZudGFuxLFtLjogIgorImFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MworbXNnaWQgIiIKKyJzaG93IGlnbm9yZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAoRGVmYXVsdDogIgorInRyYWRpdGlvbmFsKSIKK21zZ3N0ciAiIgorInlvayBzYXnEsWxhbiBkb3N5YWxhcsSxIGfDtnN0ZXIsIGlzdGXEn2UgYmHEn2zEsSBraXBsZXI6IHRyYWRpdGlvbmFsIChnZWxlbmVrc2VsKSAiCisibWF0Y2hpbmcgKGXFn2xlxZ9lbiksIG5vIChoYXnEsXIpICjDlm50YW7EsW1sxLE6IHRyYWRpdGlvbmFsKS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4NSBwYXJzZS1vcHRpb25zLmg6MTkyCittc2dpZCAid2hlbiIKK21zZ3N0ciAibmUgemFtYW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4NgorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorImFsdG1vZMO8bGxlcmUgb2xhbiBkZcSfacWfaWtsaWtsZXJpIHlvayBzYXksIGlzdGXEn2UgYmHEn2zEsSBuZSB6YW1hbjogYWxsICIKKyIoaGVwc2kpLCBkaXJ0eSAoa2lybGkpLCB1bnRyYWNrZWQgKGl6bGVubWV5ZW4pICjDlm50YW7EsW1sxLE6IGFsbCkuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODgKK21zZ2lkICJsaXN0IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJpemxlbm1leWVuIGRvc3lhbGFyxLEgc8O8dHVubGFybGEgZ8O2c3RlciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg5Cittc2dpZCAiZG8gbm90IGRldGVjdCByZW5hbWVzIgorbXNnc3RyICJ5ZW5pZGVuIGFkbGFuZMSxcm1hbGFyxLEgYWxnxLFsYW1hIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzOTEKK21zZ2lkICJkZXRlY3QgcmVuYW1lcywgb3B0aW9uYWxseSBzZXQgc2ltaWxhcml0eSBpbmRleCIKK21zZ3N0ciAiIgorInllbmlkZW4gYWRsYW5kxLFybWFsYXLEsSBhbGfEsWxhLCBpc3RlxJ9lIGJhxJ9sxLEgb2xhcmFrIGJlbnplcmxpayBpbmRla3NpIGF5YXJsYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDExCittc2dpZCAiVW5zdXBwb3J0ZWQgY29tYmluYXRpb24gb2YgaWdub3JlZCBhbmQgdW50cmFja2VkLWZpbGVzIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorIllvayBzYXnEsWxhbiB2ZSBpemxlbm1leWVuIGRvc3lhbGFyIGRlxJ9pxZ9rZW5sZXJpbmluIGRlc3Rla2xlbm1leWVuIGJpcmxpa3RlICIKKyJrdWxsYW7EsW3EsSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk0Cittc2dpZCAic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIKK21zZ3N0ciAiYmHFn2FyxLFsxLEgZ8O2bmRlcmluaW4gYXJkxLFuZGFuIMO2emV0aSBnaXpsZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1Cittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJkaWZmJ2kgZ8O2bmRlcmkgaWxldGlzaSDFn2FibG9udW5kYSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTcKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICJHw7ZuZGVyaSBpbGV0aXNpIHNlw6dlbmVrbGVyaSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk4IGJ1aWx0aW4vbWVyZ2UuYzoyNzUgYnVpbHRpbi90YWcuYzo0MTQKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJpbGV0aXlpIGRvc3lhZGFuIG9rdSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk5Cittc2dpZCAiYXV0aG9yIgorbXNnc3RyICJ5YXphciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk5Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgImfDtm5kZXJpIHlhemFyxLFuxLEgZ2XDp2Vyc2l6IGvEsWwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMCBidWlsdGluL2djLmM6NTM4Cittc2dpZCAiZGF0ZSIKK21zZ3N0ciAidGFyaWgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMAorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAiZ8O2bmRlcmkgdGFyaWhpbmkgZ2XDp2Vyc2l6IGvEsWwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMiBidWlsdGluL2NvbW1pdC5jOjE1MDMgYnVpbHRpbi9jb21taXQuYzoxNTA0CisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDUgcGFyc2Utb3B0aW9ucy5oOjMyOCByZWYtZmlsdGVyLmg6OTIKK21zZ2lkICJjb21taXQiCittc2dzdHIgImfDtm5kZXJpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiYmVsaXJ0aWxlbiBnw7ZuZGVyaW5pbiBpbGV0aXNpbmkgZMO8emVubGUgdmUgeWVuaWRlbiBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMworbXNnaWQgInJldXNlIG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICJiZWxpcnRpbGVuIGfDtm5kZXJpbmluIGlsZXRpc2luaSB5ZW5pZGVuIGt1bGxhbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA0Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorImJlbGlydGlsZW4gZ8O2bmRlcml5aSBkw7x6ZWx0bWVrIGnDp2luIGtlbmRpbGnEn2luZGVuIHTEsWvEscWfdMSxcm1hIHRhcmFmxLFuZGFuICIKKyJiacOnaW1sZW5kaXJpbGVuIGlsZXRpeWkga3VsbGFuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDUKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorImJlbGlydGlsZW4gZ8O2bmRlcml5aSB0xLFrxLHFn3TEsXJtYWsgacOnaW4ga2VuZGlsacSfaW5kZW4gdMSxa8SxxZ90xLFybWEgdGFyYWbEsW5kYW4gIgorImJpw6dpbWxlbmRpcmlsZW4gaWxldGl5aSBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNgorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgIiIKKyJnw7ZuZGVyaW5pbiB5YXphcsSxIMWfdSBhbmRhbiBpdGliYXJlbiBiZW5pbSAoLUMvLWMvLS1hbWVuZCBpbGUga3VsbGFuxLFsZMSxKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA3IGJ1aWx0aW4vbG9nLmM6MTYzNCBidWlsdGluL21lcmdlLmM6MjkwCisjOiBidWlsdGluL3B1bGwuYzoxNDQgYnVpbHRpbi9yZXZlcnQuYzoxMTAKK21zZ2lkICJhZGQgU2lnbmVkLW9mZi1ieToiCittc2dzdHIgIlNpZ25lZC1vZmYtYnk6IGVrbGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwOAorbXNnaWQgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIKK21zZ3N0ciAiYmVsaXJ0aWxlbiDFn2FibG9uIGRvc3lhc8SxbsSxIGt1bGxhbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA5Cittc2dpZCAiZm9yY2UgZWRpdCBvZiBjb21taXQiCittc2dzdHIgImfDtm5kZXJpeWkgem9ybGEgZMO8emVubGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMQorbXNnaWQgImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJnw7ZuZGVyaSBpbGV0aXNpIMWfYWJsb251bmRhIGR1cnVtdSBpw6dlciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE2Cittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIkfDtm5kZXJpIGnDp2VyacSfaSBzZcOnZW5la2xlcmkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNworbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiZGXEn2nFn3RpcmlsZW4gdMO8bSBkb3N5YWxhcsSxIGfDtm5kZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxOAorbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAiYmVsaXJ0aWxlbiBkb3N5YWxhcsSxIGfDtm5kZXJpIGnDp2luIGluZGVrc2UgZWtsZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE5Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgZmlsZXMiCittc2dzdHIgImRvc3lhbGFyxLEgZXRraWxlxZ9pbWxpIG9sYXJhayBla2xlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjAKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIgorbXNnc3RyICJkZcSfacWfaWtsaWtsZXJpIGV0a2lsZcWfaW1saSBvbGFyYWsgZWtsZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIxCittc2dpZCAiY29tbWl0IG9ubHkgc3BlY2lmaWVkIGZpbGVzIgorbXNnc3RyICJ5YWxuxLF6Y2EgYmVsaXJ0aWxlbiBkb3N5YWxhcsSxIGfDtm5kZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMgorbXNnaWQgImJ5cGFzcyBwcmUtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIgorbXNnc3RyICJwcmUtY29tbWl0IHZlIGNvbW1pdC1tc2cga2FuY2FsYXLEsW7EsSBhdGxhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjMKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICJuZXlpbiBnw7ZuZGVyaWxlY2XEn2luaSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzYKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIsO2bmNla2kgZ8O2bmRlcml5aSBkZcSfacWfdGlyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzcKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgInBvc3QtcmV3cml0ZSBrYW5jYXPEsW7EsSBhdGxhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NDQKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICJib8WfIGJpciBkZcSfacWfaWtsacSfaW4ga2F5ZMSxIHlhesSxbGFiaWxpciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTQ2Cittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAiYm/FnyBpbGV0aWxpIGJpciBkZcSfacWfaWtsacSfaW4ga2F5ZMSxIHlhesSxbGFiaWxpciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIkhhc2FyIGfDtnJtw7zFnyBNRVJHRV9IRUFEIGRvc3lhc8SxICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYyNgorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIk1FUkdFX01PREUgb2t1bmFtYWTEsSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAiZ8O2bmRlcmkgaWxldGlzaSBva3VuYW1hZMSxOiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iCittc2dzdHIgIkfDtm5kZXJpIGlsZXRpc2luaW4gYm/FnyBvbG1hc8SxIG5lZGVuaXlsZSBnw7ZuZGVyaSBpcHRhbCBlZGlsaXlvci5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdDsgeW91IGRpZCBub3QgZWRpdCB0aGUgbWVzc2FnZS5cbiIKK21zZ3N0ciAiR8O2bmRlcmkgaXB0YWwgZWRpbGl5b3I7IGlsZXRpeWkgZMO8emVubGVtZWRpbml6LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2OTEKK21zZ2lkICIiCisicmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBhbmQgcXVvdGEgaXNcbiIKKyJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgOi9cIiB0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorIkRlcG8gZ8O8bmNlbGxlbmRpLCBhbmNhayBuZXdfaW5kZXggZG9zeWFzxLEgeWF6xLFsYW3EsXlvci5cbiIKKyJEaXNraW4gZG9sdSBvbHVwIG9sbWFkxLHEn8SxbsSxIHZlIGtvdGFuxLF6xLEgYcWfxLFwIGHFn21hZMSxxJ/EsW7EsXrEsSBkZW5ldGxleWluLFxuIgorInNvbnJhIGt1cnRhcm1hayBpw6dpbiBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDovXCIga3VsbGFuxLFuLiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE3Cittc2dpZCAiIgorImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLXNoYWxsb3ddIFstLVtuby1dcHJvZ3Jlc3NdIgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8bnNuZHpuPl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTIgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoyMgorbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHdyaXRlIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLWFwcGVuZHwtLXNwbGl0XSBbLS0iCisicmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSBbLS1bbm8tXXByb2dyZXNzXSA8c3BsaXQgb3B0aW9ucz4iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHdyaXRlIFstLW9iamVjdC1kaXIgPG5zbmR6bj5dIFstLWFwcGVuZHwtLXNwbGl0XSBbLS0iCisicmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSBbLS1bbm8tXXByb2dyZXNzXSA8YsO2bMO8bS1zw6dua2xyPiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBvYmplY3QgZGlyZWN0b3J5IG1hdGNoaW5nICVzIgorbXNnc3RyICInJXMnIGlsZSBlxZ9sZcWfZW4gbmVzbmUgZGl6aW5pIGJ1bHVuYW1hZMSxIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjY4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTI1CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIxMCBidWlsdGluL2ZldGNoLmM6MTc5IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgImRpciIKK21zZ3N0ciAiZGl6aW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NjkgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMjYKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjExCittc2dpZCAiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIgorbXNnc3RyICJHcmFmacSfaW4gZGVwb2xhbmFjYcSfxLEgbmVzbmUgZGl6aW5pIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjcxCittc2dpZCAiaWYgdGhlIGNvbW1pdC1ncmFwaCBpcyBzcGxpdCwgb25seSB2ZXJpZnkgdGhlIHRpcCBmaWxlIgorbXNnc3RyICJjb21taXQtZ3JhcGggcGFyw6dhbGFyYSBiw7Zsw7xubcO8xZ9zZSB5YWxuxLF6Y2EgdcOnIGRvc3lhecSxIGRvxJ9ydWxhIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjk0IHQvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGNvbW1pdC1ncmFwaCAnJXMnIgorbXNnc3RyICJjb21taXQtZ3JhcGggJyVzJyBhw6fEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTI4Cittc2dpZCAic3RhcnQgd2FsayBhdCBhbGwgcmVmcyIKK21zZ3N0ciAidMO8bSBiYcWfdnVydWxhcmRhIGdlemlubWV5aSBiYcWfbGF0IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzMAorbXNnaWQgInNjYW4gcGFjay1pbmRleGVzIGxpc3RlZCBieSBzdGRpbiBmb3IgY29tbWl0cyIKK21zZ3N0ciAic3RkaW4gdGFyYWbEsW5kYW4gbGlzdGVsZW5lbiBwYWtldCBpbmRla3NsZXJpbmkgdGFyYSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzIKK21zZ2lkICJzdGFydCB3YWxrIGF0IGNvbW1pdHMgbGlzdGVkIGJ5IHN0ZGluIgorbXNnc3RyICJzdGRpbiB0YXJhZsSxbmRhbiBsaXN0ZWxlbmVuIHTDvG0gZ8O2bmRlcmlsZXJkZSBnZXppbm1leWkgYmHFn2xhdCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzQKK21zZ2lkICJpbmNsdWRlIGFsbCBjb21taXRzIGFscmVhZHkgaW4gdGhlIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICJoYWxpaGF6xLFyZGEgY29tbWl0LWdyYXBoIGRvc3lhc8SxbmRhIGJ1bHVuYW4gdMO8bSBnw7ZuZGVyaWxlcmkgacOnZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM3Cittc2dpZCAiYWxsb3cgd3JpdGluZyBhbiBpbmNyZW1lbnRhbCBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiYXJ0YW4gYmlyIGNvbW1pdC1ncmFwaCBkb3N5YXPEsW7EsW4geWF6xLFtxLFuYSBpemluIHZlciIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzkgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNDMKK21zZ2lkICJtYXhpbXVtIG51bWJlciBvZiBjb21taXRzIGluIGEgbm9uLWJhc2Ugc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisiYmlyIHRlbWVsIG9sbWF5YW4gcGFyw6dhbGFyYSBiw7Zsw7xubcO8xZ8gY29tbWl0LWdyYXBoIGnDp2luZGUgZW4gw6dvayBvbGFiaWxlY2VrICIKKyJnw7ZuZGVyaSBzYXnEsXPEsSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNDEKK21zZ2lkICJtYXhpbXVtIHJhdGlvIGJldHdlZW4gdHdvIGxldmVscyBvZiBhIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorImLDtmzDvG5tw7zFnyBiaXIgY29tbWl0LWdyYXBoJ8SxbiBpa2kgZMO8emV5aSBhcmFzxLFuZGEgb2xhYmlsZWNlayBlbiBiw7x5w7xrIG9yYW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTU5Cittc2dpZCAidXNlIGF0IG1vc3Qgb25lIG9mIC0tcmVhY2hhYmxlLCAtLXN0ZGluLWNvbW1pdHMsIG9yIC0tc3RkaW4tcGFja3MiCittc2dzdHIgIiIKKyItLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzIHZleWEgLS1zdGRpbi1wYWNrcyd0ZW4gZW4gw6dvayBiaXJpbmkga3VsbGFuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExCittc2dpZCAiZ2l0IGNvbmZpZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbmZpZyBbPHNlw6dlbmVrbGVyPl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTA0IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgLS10eXBlIGFyZ3VtZW50LCAlcyIKK21zZ3N0ciAidGFuxLFtbGFuYW1heWFuIC0tdHlwZSBkZcSfacWfa2VuaSwgJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTE2Cittc2dpZCAib25seSBvbmUgdHlwZSBhdCBhIHRpbWUiCittc2dzdHIgImJpciBrZXJlZGUgeWFsbsSxemNhIGJpciB0w7xyIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNQorbXNnaWQgIkNvbmZpZyBmaWxlIGxvY2F0aW9uIgorbXNnc3RyICJZYXDEsWxhbmTEsXJtYSBkb3N5YXPEsSBrb251bXUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI2Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAiZ2xvYmFsIHlhcMSxbGFuZMSxcm1hIGRvc3lhc8SxIGt1bGxhbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjcKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICJzaXN0ZW0geWFwxLFsYW5kxLFybWEgZG9zeWFzxLEga3VsbGFuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOAorbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICJkZXBvIHlhcMSxbGFuZMSxcm1hIGRvc3lhc8SxIGt1bGxhbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjkKK21zZ2lkICJ1c2UgcGVyLXdvcmt0cmVlIGNvbmZpZyBmaWxlIgorbXNnc3RyICJoZXIgw6dhbMSxxZ9tYSBhxJ9hY8SxbmEgw7Z6ZWwgYmlyIHlhcMSxbGFuZMSxcm1hIGRvc3lhc8SxIGt1bGxhbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgInZlcmlsZW4geWFwxLFsYW5kxLFybWEgZG9zeWFzxLFuxLEga3VsbGFuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgImJsb2ItaWQiCittc2dzdHIgImlraWxpIG5lc25lIG51bWFyYXPEsSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzEKK21zZ2lkICJyZWFkIGNvbmZpZyBmcm9tIGdpdmVuIGJsb2Igb2JqZWN0IgorbXNnc3RyICJ2ZXJpbGVuIGlraWxpIG5lc25lZGVuIHlhcMSxbGFuZMSxcm1hecSxIG9rdSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzIKK21zZ2lkICJBY3Rpb24iCittc2dzdHIgIkV5bGVtIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMworbXNnaWQgImdldCB2YWx1ZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJkZcSfZXIgYWw6IGFkIFtkw7x6ZW5saSBpZmFkZSBkZcSfZXJpXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzQKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgInTDvG0gZGXEn2VybGVyaSBhbDogYW5haHRhciBbZMO8emVubGkgaWZhZGUgZGXEn2VyaV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM1Cittc2dpZCAiZ2V0IHZhbHVlcyBmb3IgcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIiIKKyJkw7x6ZW5saSBpZmFkZSBpw6dpbiBkZcSfZXJsZXJpIGFsOiBkw7x6ZW5saSBpZmFkZSBhZMSxIFtkw7x6ZW5saSBpZmFkZSBkZcSfZXJpXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzYKK21zZ2lkICJnZXQgdmFsdWUgc3BlY2lmaWMgZm9yIHRoZSBVUkw6IHNlY3Rpb25bLnZhcl0gVVJMIgorbXNnc3RyICJVUkwgacOnaW4gw7Z6ZWwgb2xhbiBkZcSfZXJpIGFsOiBiw7Zsw7xtWy52YXJdIFVSTCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzcKK21zZ2lkICJyZXBsYWNlIGFsbCBtYXRjaGluZyB2YXJpYWJsZXM6IG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XSIKK21zZ3N0ciAidMO8bSBlxZ9sZcWfZW4gZGXEn2nFn2tlbmxlcmkgZGXEn2nFn3RpcjogYWQgZGXEn2VyIFtkw7x6ZW5saSBpZmFkZSBkZcSfZXJpXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzgKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgInllbmkgYmlyIGRlxJ9pxZ9rZW4gZWtsZTogYWQgZGXEn2VyIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOQorbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImJpciBkZcSfacWfa2VuIGthbGTEsXI6IGFkIFtkw7x6ZW5saSBpZmFkZSBkZcSfZXJpXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDAKK21zZ2lkICJyZW1vdmUgYWxsIG1hdGNoZXM6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAidMO8bSBlxZ9sZcWfbWVsZXJpIGthbGTEsXI6IGFkIFtkw7x6ZW5saSBpZmFkZSBkZcSfZXJpXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDEKK21zZ2lkICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiCittc2dzdHIgImLDtmzDvG3DvCB5ZW5pZGVuIGFkbGFuZMSxcjogZXNraV9hZCB5ZW5pX2FkIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MgorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgImJpciBiw7Zsw7xtw7wga2FsZMSxcjogYWQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQzCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgInTDvG3DvG7DvCBsaXN0ZWxlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NAorbXNnaWQgIm9wZW4gYW4gZWRpdG9yIgorbXNnc3RyICJiaXIgZMO8emVubGV5aWNpIGHDpyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDUKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAieWFwxLFsYW5kxLFyxLFsYW4gcmVuZ2kgYnVsOiB5dXZhIFvDtm50YW7EsW1sxLFdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NgorbXNnaWQgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IHNsb3QgW3N0ZG91dC1pcy10dHldIgorbXNnc3RyICJyZW5rIGF5YXLEsW7EsSBidWw6IHl1dmEgW3N0ZG91dCB0dHldIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NworbXNnaWQgIlR5cGUiCittc2dzdHIgIlTDvHIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ4IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzozOAorbXNnaWQgInZhbHVlIGlzIGdpdmVuIHRoaXMgdHlwZSIKK21zZ3N0ciAiZGXEn2VyIGJ1IHTDvHJkZSB2ZXJpbGRpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OQorbXNnaWQgInZhbHVlIGlzIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIKK21zZ3N0ciAiZGXEn2VyIFwidHJ1ZVwiIChkb8SfcnUpIHZleWEgXCJmYWxzZVwiICh5YW5sxLHFnykiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUwCittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgImRlxJ9lciBvbmRhbMSxayBzYXnEsSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTEKK21zZ2lkICJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiCittc2dzdHIgImRlxJ9lciAtLWJvb2wgdmV5YSAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTIKK21zZ2lkICJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIgorbXNnc3RyICJkZcSfZXIgYmlyIHlvbCAoZG9zeWEgdmV5YSBkaXppbiBhZMSxKSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTMKK21zZ2lkICJ2YWx1ZSBpcyBhbiBleHBpcnkgZGF0ZSIKK21zZ3N0ciAiZGXEn2VyIGJpciBzb24ga3VsbGFuxLFtIHRhcmloaSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTQKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAiRGnEn2VyIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NQorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAiZGXEn2VybGVyaSBOVUwgYmF5dMSxIGlsZSBzb25sYW5kxLFyIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NgorbXNnaWQgInNob3cgdmFyaWFibGUgbmFtZXMgb25seSIKK21zZ3N0ciAieWFsbsSxemNhIGRlxJ9pxZ9rZW4gYWRsYXLEsW7EsSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NworbXNnaWQgInJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzIG9uIGxvb2t1cCIKK21zZ3N0ciAiYXJhbWEgc8SxcmFzxLFuZGEgacOnZXJtZSB5w7ZuZXJnZWxlcmluZSB1eSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTgKK21zZ2lkICJzaG93IG9yaWdpbiBvZiBjb25maWcgKGZpbGUsIHN0YW5kYXJkIGlucHV0LCBibG9iLCBjb21tYW5kIGxpbmUpIgorbXNnc3RyICIiCisieWFwxLFsYW5kxLFybWFuxLFuIGvDtmtlbmluaSBnw7ZzdGVyIChkb3N5YSwgc3RkaW4sIGlraWxpIG5lc25lLCBrb211dCBzYXTEsXLEsSkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU5Cittc2dpZCAic2hvdyBzY29wZSBvZiBjb25maWcgKHdvcmt0cmVlLCBsb2NhbCwgZ2xvYmFsLCBzeXN0ZW0sIGNvbW1hbmQpIgorbXNnc3RyICIiCisieWFwxLFsYW5kxLFybWFuxLFuIGthcHNhbcSxbsSxIGfDtnN0ZXIgKMOnYWzEscWfbWEgYcSfYWPEsSwgeWVyZWwsIGdsb2JhbCwgc2lzdGVtLCAiCisia29tdXQpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE2MCBidWlsdGluL2Vudi0taGVscGVyLmM6NDAKK21zZ2lkICJ2YWx1ZSIKK21zZ3N0ciAiZGXEn2VyIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE2MAorbXNnaWQgIndpdGggLS1nZXQsIHVzZSBkZWZhdWx0IHZhbHVlIHdoZW4gbWlzc2luZyBlbnRyeSIKK21zZ3N0ciAiLS1nZXQgaWxlIGdpcmRpIHZlcmlsbWVtacWfc2Ugw7ZudGFuxLFtbMSxIGRlxJ9lcmkga3VsbGFuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgJWQiCittc2dzdHIgInlhbmzEscWfIGRlxJ9pxZ9rZW4gc2F5xLFzxLEsICVkIG9sbWFsxLEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIHNob3VsZCBiZSBmcm9tICVkIHRvICVkIgorbXNnc3RyICJ5YW5sxLHFnyBkZcSfacWfa2VuIHNhecSxc8SxLCAlZCBpbGUgJWQgYXJhc8SxbmRhIG9sbWFsxLEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IHBhdHRlcm46ICVzIgorbXNnc3RyICJnZcOnZXJzaXogYW5haHRhciBkaXpnaXNpOiAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZvcm1hdCBkZWZhdWx0IGNvbmZpZyB2YWx1ZTogJXMiCittc2dzdHIgIsO2bnRhbsSxbWzEsSB5YXDEsWxhbmTEsXJtYSBkZcSfZXJpIGJpw6dpbWxlbmRpcmlsZW1lZGk6ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcGFyc2UgY29sb3IgJyVzJyIKK21zZ3N0ciAicmVuayBheXLEscWfdMSxcsSxbGFtxLF5b3I6ICclcyciCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDU5Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGRlZmF1bHQgY29sb3IgdmFsdWUiCittc2dzdHIgIsO2bnRhbsSxbWzEsSByZW5rIGRlxJ9lcmkgYXlyxLHFn3TEsXLEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUxMiBidWlsdGluL2NvbmZpZy5jOjc2OAorbXNnaWQgIm5vdCBpbiBhIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgImJpciBnaXQgZGl6aW5pbmRlIGRlxJ9pbCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MTUKK21zZ2lkICJ3cml0aW5nIHRvIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgInN0ZGluJ2UgeWF6bWEgZGVzdGVrbGVubWl5b3IiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTE4Cittc2dpZCAid3JpdGluZyBjb25maWcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAieWFwxLFsYW5kxLFybWEgaWtpbGkgbmVzbmVsZXJpIHlhesSxbcSxIGRlc3Rla2xlbm1peW9yIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIyBUaGlzIGlzIEdpdCdzIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiIKKyJbdXNlcl1cbiIKKyIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorbXNnc3RyICIiCisiIyBCdSBHaXQnaW4ga3VsbGFuxLFjxLF5YSDDtnplbCB5YXDEsWxhbmTEsXJtYSBkb3N5YXPEsWTEsXIuXG4iCisiW2t1bGxhbsSxY8SxXVxuIgorIkzDvHRmZW4gYcWfYcSfxLFkYWtpIHNhdMSxcmxhcsSxIHlvcnVtZGFuIMOnxLFrYXLEsW4gdmUgw7Z6ZWxsZcWfdGlyaW46XG4iCisiI1x0YWQgPSAlc1xuIgorIiNcdGUtcG9zdGEgPSAlc1xuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYyNworbXNnaWQgIm9ubHkgb25lIGNvbmZpZyBmaWxlIGF0IGEgdGltZSIKK21zZ3N0ciAiYmlyIGtlcmVkZSB5YWxuxLF6Y2EgYmlyIHlhcMSxbGFuZMSxcm1hIGRvc3lhc8SxIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYzMgorbXNnaWQgIi0tbG9jYWwgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1sb2NhbCB5YWxuxLF6Y2EgYmlyIGdpdCBkZXBvc3UgacOnaW5kZSBrdWxsYW7EsWxhYmlsaXIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjM1Cittc2dpZCAiLS1ibG9iIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tYmxvYiB5YWxuxLF6Y2EgYmlyIGdpdCBkZXBvc3UgacOnaW5kZSBrdWxsYW7EsWxhYmlsaXIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjU1Cittc2dpZCAiJEhPTUUgbm90IHNldCIKK21zZ3N0ciAiJEhPTUUgYXlhcmxhbm1hbcSxxZ8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Njc5Cittc2dpZCAiIgorIi0td29ya3RyZWUgY2Fubm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIHVubGVzcyB0aGUgY29uZmlnXG4iCisiZXh0ZW5zaW9uIHdvcmt0cmVlQ29uZmlnIGlzIGVuYWJsZWQuIFBsZWFzZSByZWFkIFwiQ09ORklHVVJBVElPTiBGSUxFXCJcbiIKKyJzZWN0aW9uIGluIFwiZ2l0IGhlbHAgd29ya3RyZWVcIiBmb3IgZGV0YWlscyIKK21zZ3N0ciAiIgorIi0td29ya3RyZWUsIHdvcmt0cmVlQ29uZmlnIHlhcMSxbGFuZMSxcm1hIGdlbmnFn2xldG1lc2kgZXRraW5sZcWfdGlyaWxtZWRpxJ9pXG4iCisic8O8cmVjZSBiaXJkZW4gw6dvayDDp2FsxLHFn21hIGHEn2FjxLEgaWxlIGJpcmxpa3RlIGt1bGxhbsSxbGFtYXouIEF5csSxbnTEsWxhciBpw6dpblxuIgorImzDvHRmZW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGnDp2luZGVraSBcIkNPTkZJR1VSQVRJT04gRklMRVwiIGLDtmzDvG3DvG7DvCBva3V5dW4uIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxNAorbXNnaWQgIi0tZ2V0LWNvbG9yIGFuZCB2YXJpYWJsZSB0eXBlIGFyZSBpbmNvaGVyZW50IgorbXNnc3RyICItLWdldC1jb2xvciB2ZSBkZcSfacWfa2VuIHTDvHLDvCB0dXRhcnPEsXoiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzE5Cittc2dpZCAib25seSBvbmUgYWN0aW9uIGF0IGEgdGltZSIKK21zZ3N0ciAiYmlyIGtlcmVkZSB5YWxuxLF6Y2EgYmlyIGV5bGVtIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczMgorbXNnaWQgIi0tbmFtZS1vbmx5IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWxpc3Qgb3IgLS1nZXQtcmVnZXhwIgorbXNnc3RyICItLW5hbWUtb25seSB5YWxuxLF6Y2EgxZ91bmxhcmEgdXlndWxhbmFiaWxpcjogLS1saXN0LCAtLWdldC1yZWdleHAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzM4Cittc2dpZCAiIgorIi0tc2hvdy1vcmlnaW4gaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0LCAtLWdldC1hbGwsIC0tZ2V0LXJlZ2V4cCwgYW5kIC0tIgorImxpc3QiCittc2dzdHIgIiIKKyItLXNob3ctb3JpZ2luIHlhbG7EsXpjYSDFn3VubGFyYSB1eWd1bGFuYWJpbGlyOiAtLWdldCwgLS1nZXQtYWxsLCAtLWdldC1yZWdleHAgIgorInZlIC0tbGlzdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDQKK21zZ2lkICItLWRlZmF1bHQgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0IgorbXNnc3RyICItLWRlZmF1bHQgeWFsbsSxemNhIMWfdW5hIHV5Z3VsYW5hYmlsaXI6IC0tZ2V0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIgorbXNnc3RyICInJXMnIHlhcMSxbGFuZMSxcm1hIGRvc3lhc8SxIG9rdW5hbcSxeW9yIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2MAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiCittc2dzdHIgInlhcMSxbGFuZMSxcm1hIGRvc3lhbGFyxLEgacWfbGVuaXJrZW4gaGF0YSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzAKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgInN0ZGluJ2kgZMO8emVubGVtZSBkZXN0ZWtsZW5taXlvciIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzIKK21zZ2lkICJlZGl0aW5nIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgImlraWxpIG5lc25lbGVyaSBkw7x6ZW5sZW1lIGRlc3Rla2xlbm1peW9yIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAiJXMgeWFwxLFsYW5kxLFybWEgZG9zeWFzxLEgb2x1xZ90dXJ1bGFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3Qgb3ZlcndyaXRlIG11bHRpcGxlIHZhbHVlcyB3aXRoIGEgc2luZ2xlIHZhbHVlXG4iCisiICAgICAgIFVzZSBhIHJlZ2V4cCwgLS1hZGQgb3IgLS1yZXBsYWNlLWFsbCB0byBjaGFuZ2UgJXMuIgorbXNnc3RyICIiCisiVGVrIGJpciBkZcSfZXIgaWxlIGJpcmRlbiDDp29rIGRlxJ9lcmluIMO8emVyaW5lIHlhesSxbGFtxLF5b3IuXG4iCisiICAgICAgICVzIGRlxJ9lcmluaSBkZcSfacWfdGlybWVrIGnDp2luIGJpciBkw7x6ZW5saSBpZmFkZSwgLS1hZGQgdmV5YSAtLXJlcGxhY2UtIgorImFsbCBrdWxsYW7EsW4uIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjg3MyBidWlsdGluL2NvbmZpZy5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHNlY3Rpb246ICVzIgorbXNnc3RyICJiw7Z5bGUgYmlyIGLDtmzDvG0geW9rOiAlcyIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTAKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorbXNnc3RyICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzoxMDAKK21zZ2lkICJwcmludCBzaXplcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtYXQiCittc2dzdHIgInlhemTEsXJtYSBib3l1dGxhcsSxIGtpxZ9pIHRhcmFmxLFuZGFuIG9rdW5hYmlsaXIgYmnDp2ltZGUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNgorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8c2XDp2VuZWtsZXI+XSBbPGfDtm5kZXJpbXNpPi4uLl0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxzZcOnZW5la2xlcj5dIC0tZGlydHkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImhlYWQiCittc2dzdHIgImRhbCB1Y3UiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICJoYWZpZiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiYW5ub3RhdGVkIgorbXNnc3RyICJlayBhw6fEsWtsYW1hbMSxIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiJXMgZWsgYcOnxLFrbGFtYWzEsSBldGlrZXRpIG1ldmN1dCBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAiJXMgZWsgYcOnxLFrbGFtYWzEsSBldGlrZXRpbmRlIGfDtm3DvGzDvCBhZCB5b2siCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAiJyVzJyBldGlrZXRpIGdlcsOnZWt0ZSBidXJhZGEgJyVzJyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgIiclcycgaWxlIGhlcmhhbmdpIGJpciBldGlrZXQgdGFtIG9sYXJhayBlxZ9sZcWfbWl5b3IiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAiIgorIktlc2luIG9sYXJhayBlxZ9sZcWfZW4gYmHFn3Z1cnUgdmV5YSBldGlrZXQgeW9rLCBiZXRpbWxlbWVrIGnDp2luIGFyYW7EsXlvclxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICJhcmFtYSDFn3VyYWRhIGJpdGlyaWxkaTogJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorIkhpw6diaXIgZWsgYcOnxLFrbGFtYWzEsSBldGlrZXQgxZ91bnUgYmV0aW1sZXllbWl5b3I6ICclcycuXG4iCisiQnVudW4geWFuxLFuZGEgZWsgYcOnxLFrbGFtYXPEsSBvbG1heWFuIGV0aWtldGxlciB2YXJkxLEsIC0tdGFncyBkZW5leWluLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgorbXNnc3RyICIiCisixZ51bnUgaGnDp2JpciBldGlrZXQgYmV0aW1sZXllbWV6OiAnJXMnLlxuIgorIi0tYWx3YXlzIGRlbmV5aW4gdmV5YSBiaXJrYcOnIGV0aWtldCBvbHXFn3R1cnVuLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmF2ZXJzZWQgJWx1IGNvbW1pdHNcbiIKK21zZ3N0ciAiJWx1IGfDtm5kZXJpIGthdGVkaWxkaVxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorIiVpIGV0aWtldHRlbiBmYXpsYSBldGlrZXQgYnVsdW5kdTsgZW4gc29uICVpIGxpc3RlbGVuZGlcbiIKKyLFn3Uga29udW1kYSBhcmFtYSBixLFyYWvEsWxkxLE6ICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAixZ91bnUgdGFuxLFtbGE6ICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIiVzIGdlw6dlcmxpIGJpciBuZXNuZSBhZMSxIGRlxJ9pbCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBuZWl0aGVyIGEgY29tbWl0IG5vciBibG9iIgorbXNnc3RyICIlcyBuZSBiaXIgZ8O2bmRlcmkgbmUgZGUgaWtpbGkgbmVzbmUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTEKK21zZ2lkICJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IgorbXNnc3RyICJnw7ZuZGVyaW5pbiBhcmTEsW5kYW4gZ2VsZW4gZXRpa2V0aSBidWwiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTIKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICJzdGRlcnInZGVraSBhcmFtYSBzdHJhdGVqaXNpbmkgYXnEsWtsYSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MworbXNnaWQgInVzZSBhbnkgcmVmIgorbXNnc3RyICJoZXJoYW5naSBiaXIgYmHFn3Z1cnV5dSBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTQKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAiaGVyaGFuZ2kgYmlyIGV0aWtldGkga3VsbGFuLCBlayBhw6fEsWtsYW1hc8SxIG9sbWFzYSBiaWxlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU1Cittc2dpZCAiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIKK21zZ3N0ciAiaGVyIHphbWFuIHV6dW4gYmnDp2ltaSBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTYKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgInlhbG7EsXpjYSBpbGsgw7xzdCDDtmdleWkgaXpsZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1OQorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgInlhbG7EsXpjYSBrZXNpbiBlxZ9sZcWfbWVsZXJpIMOnxLFrdMSxIHZlciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2MQorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgIjxuPiBlbiBzb24gZXRpa2V0aSBkaWtrYXRlIGFsICjDtm50YW7EsW1sxLE6IDEwKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2MworbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgInlhbG7EsXpjYSA8ZGl6Z2k+IGlsZSBlxZ9sZcWfZW4gZXRpa2V0bGVyaSBkaWtrYXRlIGFsIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY1Cittc2dpZCAiZG8gbm90IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICI8ZGl6Z2k+IGlsZSBlxZ9sZcWfZW4gZXRpa2V0bGVyaSBkaWtrYXRlIGFsbWEiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjcgYnVpbHRpbi9uYW1lLXJldi5jOjUzNQorbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAia8Sxc2FsdMSxbG3EscWfIGfDtm5kZXJpIG5lc25lc2luaSBnZXJpIMOnZWtpbGluZWNlayBuZXNuZSBvbGFyYWsgZ8O2c3RlciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2OCBidWlsdGluL2Rlc2NyaWJlLmM6NTcxCittc2dpZCAibWFyayIKK21zZ3N0ciAiaW0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjkKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiCittc2dzdHIgIjxpbT4naSBraXJsaSDDp2FsxLHFn21hIGHEn2FjxLFuYSBpbGnFn3RpciAow7ZudGFuxLFtbMSxOiBcIi1kaXJ0eVwiKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU3MgorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gYnJva2VuIHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItYnJva2VuXCIpIgorbXNnc3RyICI8aW0+J2kgYm96dWsgw6dhbMSxxZ9tYSBhxJ9hY8SxbmEgaWxpxZ90aXIgKMO2bnRhbsSxbWzEsTogXCItYnJva2VuXCIpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTkwCittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIi0tbG9uZywgLS1hYmJyZXY9MCBpbGUgdXl1bXN1eiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYxOQorbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICJIacOnYmlyIGFkIGJ1bHVuYW1hZMSxLCBoacOnYmlyIMWfZXkgYmV0aW1sZW5lbWl5b3IuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjcwCittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tZGlydHksIGfDtm5kZXJpbXNpbGVybGUgdXl1bXN1eiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY3MgorbXNnaWQgIi0tYnJva2VuIGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1icm9rZW4sIGfDtm5kZXJpbXNpbGVybGUgdXl1bXN1eiIKKworIzogYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiCittc2dzdHIgIiclcyc6IFPEsXJhZGFuIGJpciBkb3N5YSB2ZXlhIHNlbWJvbGlrIGJhxJ8gZGXEn2lsIgorCisjOiBidWlsdGluL2RpZmYuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcHRpb246ICVzIgorbXNnc3RyICJnZcOnZXJzaXogc2XDp2VuZWs6ICVzIgorCisjOiBidWlsdGluL2RpZmYuYzozNTAKK21zZ2lkICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiQmlyIGdpdCBkZXBvc3UgZGXEn2lsIgorCisjOiBidWlsdGluL2RpZmYuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgImdlw6dlcnNpeiBuZXNuZSAnJXMnIHZlcmlsZGkiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIgorbXNnc3RyICJpa2lkZW4gw6dvayBpa2lsaSBuZXNuZSB2ZXJpbGRpOiAnJXMnIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAiZWxlIGFsxLFubWF5YW4gbmVzbmUgJyVzJyB2ZXJpbGRpIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAKK21zZ2lkICJnaXQgZGlmZnRvb2wgWzxvcHRpb25zPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBkaWZmdG9vbCBbPHNlw6dlbmVrbGVyPl0gWzxnw7ZuZGVyaT4gWzxnw7ZuZGVyaT5dXSBbLS1dIFs8eW9sPi4uLl0iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkOiAlZCIKK21zZ3N0ciAiYmHFn2FyxLFzxLF6OiAlZCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICIlcyBzZW1ib2xpayBiYcSfxLEgb2t1bmFtYWTEsSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rIGZpbGUgJXMiCittc2dzdHIgIiVzIHNlbWJvbGlrIGJhxJ8gZG9zeWFzxLEgb2t1bmFtYWTEsSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMgZm9yIHN5bWxpbmsgJXMiCittc2dzdHIgIiVzIG5lc25lc2kgJXMgc2VtYm9saWsgYmHEn8SxIGnDp2luIG9rdW5hbWFkxLEiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo0MTMKK21zZ2lkICIiCisiY29tYmluZWQgZGlmZiBmb3JtYXRzKCctYycgYW5kICctLWNjJykgYXJlIG5vdCBzdXBwb3J0ZWQgaW5cbiIKKyJkaXJlY3RvcnkgZGlmZiBtb2RlKCctZCcgYW5kICctLWRpci1kaWZmJykuIgorbXNnc3RyICIiCisiQmlybGXFn3RpcmlsbWnFnyBkaWZmIGJpw6dpbWxlcmkgKC1jIHZlIC0tY2MpIGRpemluIGRpZmYga2lwaW5kZVxuIgorIigtZCB2ZSAtLWRpci1kaWZmKSBkZXN0ZWtsZW5taXlvci4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm90aCBmaWxlcyBtb2RpZmllZDogJyVzJyBhbmQgJyVzJy4iCittc2dzdHIgIkhlciBpa2kgZG9zeWEgZGEgZGXEn2nFn3RpcmlsZGk6ICclcycgdmUgJyVzJy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzYKK21zZ2lkICJ3b3JraW5nIHRyZWUgZmlsZSBoYXMgYmVlbiBsZWZ0LiIKK21zZ3N0ciAiw4dhbMSxxZ9tYSBhxJ9hY8SxIGRvc3lhc8SxIGLEsXJha8SxbGTEsS4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcG9yYXJ5IGZpbGVzIGV4aXN0IGluICclcycuIgorbXNnc3RyICInJXMnIGtvbnVtdW5kYSBnZcOnaWNpIGRvc3lhbGFyIHZhci4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDgKK21zZ2lkICJ5b3UgbWF5IHdhbnQgdG8gY2xlYW51cCBvciByZWNvdmVyIHRoZXNlLiIKK21zZ3N0ciAiQnVubGFyxLEgdGVtaXpsZW1layB2ZXlhIGt1cnRhcm1hayBpc3RleWViaWxpcnNpbml6LiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5NworbXNnaWQgInVzZSBgZGlmZi5ndWl0b29sYCBpbnN0ZWFkIG9mIGBkaWZmLnRvb2xgIgorbXNnc3RyICInZGlmZi50b29sJyB5ZXJpbmUgJ2RpZmYuZ3VpdG9vbCcga3VsbGFuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njk5Cittc2dpZCAicGVyZm9ybSBhIGZ1bGwtZGlyZWN0b3J5IGRpZmYiCittc2dzdHIgImJpciB0YW0gZGl6aW4gZGlmZidpIGdlcsOnZWtsZcWfdGlyIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzAxCittc2dpZCAiZG8gbm90IHByb21wdCBiZWZvcmUgbGF1bmNoaW5nIGEgZGlmZiB0b29sIgorbXNnc3RyICJiaXIgZGlmZiBhcmFjxLEgw6dhbMSxxZ90xLFybWFkYW4gw7ZuY2Ugc29ybWEiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDYKK21zZ2lkICJ1c2Ugc3ltbGlua3MgaW4gZGlyLWRpZmYgbW9kZSIKK21zZ3N0ciAiZGlyLWRpZmYga2lwaW5kZSBzZW1ib2xpayBiYcSfbGFyIGt1bGxhbiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNworbXNnaWQgInRvb2wiCittc2dzdHIgImFyYcOnIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA4Cittc2dpZCAidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIgorbXNnc3RyICJiZWxpcnRpbGVuIGRpZmYgYXJhY8SxbsSxIGt1bGxhbiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxMAorbXNnaWQgInByaW50IGEgbGlzdCBvZiBkaWZmIHRvb2xzIHRoYXQgbWF5IGJlIHVzZWQgd2l0aCBgLS10b29sYCIKK21zZ3N0ciAiJy10b29sJyBpbGUgYmlybGlrdGUga3VsbGFuxLFsYWJpbGVjZWsgZGlmZiBhcmHDp2xhcsSxbsSxbiBsaXN0ZXNpbmkgw6fEsWthciIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxMworbXNnaWQgIiIKKyJtYWtlICdnaXQtZGlmZnRvb2wnIGV4aXQgd2hlbiBhbiBpbnZva2VkIGRpZmYgdG9vbCByZXR1cm5zIGEgbm9uIC0gemVybyBleGl0ICIKKyJjb2RlIgorbXNnc3RyICIiCisiw6dhbMSxxZ90xLFyxLFsYW4gYmlyIGRpZmYgYXJhY8SxIHPEsWbEsXIgb2xtYXlhbiBiaXIgw6fEsWvEscWfIGtvZHUgZMO2bmTDvHJkw7zEn8O8bmRlICdnaXQtIgorImRpZmZ0b29sJ3VuIMOnxLFrxLHFnyB5YXBtYXPEsW7EsSBzYcSfbGEiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTYKK21zZ2lkICJzcGVjaWZ5IGEgY3VzdG9tIGNvbW1hbmQgZm9yIHZpZXdpbmcgZGlmZnMiCittc2dzdHIgImRpZmYnbGVyaSBnw7Zyw7xudMO8bGVtZWsgacOnaW4gw7Z6ZWwgYmlyIGtvbXV0IGJlbGlybGUiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTcKK21zZ2lkICJwYXNzZWQgdG8gYGRpZmZgIgorbXNnc3RyICInZGlmZidlIGFrdGFyxLFsZMSxIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzMyCittc2dpZCAiZGlmZnRvb2wgcmVxdWlyZXMgd29ya3RyZWUgb3IgLS1uby1pbmRleCIKK21zZ3N0ciAiZGlmZnRvb2wsIMOnYWzEscWfbWEgYcSfYWPEsSB2ZXlhIC0tbm8taW5kZXggZ2VyZWt0aXJpeW9yIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzM5Cittc2dpZCAiLS1kaXItZGlmZiBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICItZGlyLWRpZmYsIC0tbm8taW5kZXggaWxlIHV5dW1zdXoiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NDIKK21zZ2lkICItLWd1aSwgLS10b29sIGFuZCAtLWV4dGNtZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWd1aSwgLS10b29sIHZlIC0tZXh0Y21kIGJpcmxpa3RlIGt1bGxhbsSxbGFtYXoiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NTAKK21zZ2lkICJubyA8dG9vbD4gZ2l2ZW4gZm9yIC0tdG9vbD08dG9vbD4iCittc2dzdHIgIi0tdG9vbD08YXJhw6c+IGnDp2luIGJpciA8YXJhw6c+IHZlcmlsbWVkaSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1NworbXNnaWQgIm5vIDxjbWQ+IGdpdmVuIGZvciAtLWV4dGNtZD08Y21kPiIKK21zZ3N0ciAiLS1leHRjbWQ9PGtvbXV0PiBpw6dpbiBiaXIgPGtvbXV0PiB2ZXJpbG1lZGkiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2Cittc2dpZCAiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPG9wdGlvbnM+IDxlbnYtdmFyPiIKK21zZ3N0ciAiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPHNlw6dlbmVrbGVyPiA8b3J0YW0tZMSfxZ9rbj4iCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzozNyBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTgKK21zZ2lkICJ0eXBlIgorbXNnc3RyICJ0w7xyIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NDEKK21zZ2lkICJkZWZhdWx0IGZvciBnaXRfZW52XyooLi4uKSB0byBmYWxsIGJhY2sgb24iCittc2dzdHIgImdpdF9lbnZfKiguLi4pJ8SxbiBnZXJpIMOnZWtpbGVjZcSfaSDDtm50YW7EsW1sxLEiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MworbXNnaWQgImJlIHF1aWV0IG9ubHkgdXNlIGdpdF9lbnZfKigpIHZhbHVlIGFzIGV4aXQgY29kZSIKK21zZ3N0ciAic2Vzc2l6IG9sLCB5YWxuxLF6Y2EgZ2l0X2VudiooKSBkZcSfZXJpbmkgw6fEsWvEscWfIGtvZHUgb2xhcmFrIGt1bGxhbiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGEgYm9vbGVhbiB2YWx1ZSB3aXRoIGAtLXR5cGU9Ym9vbGAsIG5vdCBgJXNgIgorbXNnc3RyICIiCisiLS1kZWZhdWx0IHNlw6dlbmXEn2ksIC0tdHlwZT1ib29sIGlsZSBiaXJsaWt0ZSBiaXIgQm9vbGUgZGXEn2VyaSBiZWtsaXlvciwgJyVzJyAiCisiZGXEn2lsIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGFuIHVuc2lnbmVkIGxvbmcgdmFsdWUgd2l0aCBgLS10eXBlPXVsb25nYCwgbm90IGAiCisiJXNgIgorbXNnc3RyICIiCisiLS1kZWZhdWx0IHNlw6dlbmXEn2ksIC0tdHlwZT11bG9uZyBpbGUgYmlybGlrdGUgYmlyIGltemFsYW5tYW3EscWfIHV6dW4gZGXEn2VyICIKKyJiZWtsaXlvciwgJyVzJyBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyOQorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo4NTMKK21zZ2lkICJFcnJvcjogQ2Fubm90IGV4cG9ydCBuZXN0ZWQgdGFncyB1bmxlc3MgLS1tYXJrLXRhZ3MgaXMgc3BlY2lmaWVkLiIKK21zZ3N0ciAiIgorIkhhdGE6IMSww6cgacOnZSBnZcOnbWnFnyBldGlrZXRsZXIgLS1tYXJrLXRhZ3MgYmVsaXJ0aWxtZWRpxJ9pIHPDvHJlY2UgZMSxxZ9hICIKKyJha3RhcsSxbGFtYXouIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgYWZ0ZXIgPG4+IG9iamVjdHMiCittc2dzdHIgIjxuPiBuZXNuZWRlbiBzb25yYSBpbGVybGVtZXlpIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU0Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHNpZ25lZCB0YWdzIgorbXNnc3RyICJpbXphbGFuYW4gZXRpa2V0bGVyaW4gbmFzxLFsIGnFn2xlbmVjZcSfaW5pIHNlw6dpbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTcKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgdGFncyB0aGF0IHRhZyBmaWx0ZXJlZCBvYmplY3RzIgorbXNnc3RyICJuZXNuZWxlcmNlIHPDvHrDvGxlbiBldGlrZXRsZXJpbiBuYXPEsWwgacWfbGVuZWNlxJ9pbmkgc2XDp2luIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MAorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBjb21taXQgbWVzc2FnZXMgaW4gYW4gYWx0ZXJuYXRlIGVuY29kaW5nIgorbXNnc3RyICJiYcWfa2EgYmlyIGtvZGxhbWF5YSBpeWUgZ8O2bmRlcmkgaWxldGlsZXJpbmluIG5hc8SxbCBpxZ9sZW5lY2XEn2luaSBzZcOnaW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYzCittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgImltbGVyaSBidSBkb3N5YXlhIGJvxZ9hbHQiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY1Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICJpbWxlcmkgYnUgZG9zeWFkYW4gacOnZSBha3RhciIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjkKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUgaWYgaXQgZXhpc3RzIgorbXNnc3RyICJlxJ9lciB2YXJzYSBidSBkb3N5YWRhbiBpbWxlcmkgacOnZSBha3RhciIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzEKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAiZXRpa2V0bGVyaW4gYmlyIGV0aWtldGxleWljaXNpIHlva3NhIHZhcm3EscWfIGdpYmkgZGF2cmFuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3MworbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICJoZXIgZ8O2bmRlcmkgacOnaW4gdMO8bSBhxJ9hY8SxbiDDp8Sxa3TEsXPEsW7EsSB2ZXIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc1Cittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgImFrxLHFn8SxIHNvbmxhbmTEsXJtYWsgacOnaW4gJ2RvbmUnIMO2emVsbGnEn2luaSBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc2Cittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICJpa2lsaSBuZXNuZSB2ZXJpc2kgw6fEsWt0xLFzxLFuxLEgYXRsYSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzcgYnVpbHRpbi9sb2cuYzoxNzA1Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAiYmHFn3Z1cnUgYmVsaXJ0ZWNpIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OAorbXNnaWQgIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIKK21zZ3N0ciAiYmHFn3Z1cnUgYmVsaXJ0ZWNpbmkgZMSxxZ9hIGFrdGFyxLFsYW4gYmHFn3Z1cnVsYXJhIGFrdGFyIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OQorbXNnaWQgImFub255bWl6ZSBvdXRwdXQiCittc2dzdHIgIsOnxLFrdMSxIGtpbWxpxJ9pbmkgZ2l6bGUiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTgxCittc2dpZCAiUmVmZXJlbmNlIHBhcmVudHMgd2hpY2ggYXJlIG5vdCBpbiBmYXN0LWV4cG9ydCBzdHJlYW0gYnkgb2JqZWN0IGlkIgorbXNnc3RyICInZmFzdC1leHBvcnQnIGFrxLHFn8SxbmRhIG9sbWF5YW4gw7xzdCDDtmdlbGVyZSBuZXNuZSBudW1hcmFzxLEgaWxlIGJhxZ92dXIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTgzCittc2dpZCAiU2hvdyBvcmlnaW5hbCBvYmplY3QgaWRzIG9mIGJsb2JzL2NvbW1pdHMiCittc2dzdHIgImlraWxpIG5lc25lbGVyaW4vZ8O2bmRlcmlsZXJpbiBvcmlqaW5hbCBuZXNuZSBudW1hcmFsYXLEsW7EsSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4NQorbXNnaWQgIkxhYmVsIHRhZ3Mgd2l0aCBtYXJrIGlkcyIKK21zZ3N0ciAiZXRpa2V0bGVyaSBpbSBudW1hcmFsYXLEsXlsYSBhZGxhbmTEsXIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMjIwCittc2dpZCAiQ2Fubm90IHBhc3MgYm90aCAtLWltcG9ydC1tYXJrcyBhbmQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorbXNnc3RyICJIZW0gLS1pbXBvcnQtbWFya3MgdmUgaGVtIC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cyBha3RhcsSxbGFtYWTEsSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM0Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgZmV0Y2ggWzxzZcOnZW5la2xlcj5dIFs8ZGVwbz4gWzxixZ92ci1ibHJ0w6c+Li4uXV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNQorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IgorbXNnc3RyICJnaXQgZmV0Y2ggWzxzZcOnZW5la2xlcj5dIDxncnVwPiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM2Cittc2dpZCAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8cmVwb3NpdG9yeT4gfCA8Z3JvdXA+KS4uLl0iCittc2dzdHIgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8c2XDp2VuZWtsZXI+XSBbKDxkZXBvPiB8IDxncnVwPikuLi5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzcKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBmZXRjaCAtLWFsbCBbPHNlw6dlbmVrbGVyPl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTYKK21zZ2lkICJmZXRjaC5wYXJhbGxlbCBjYW5ub3QgYmUgbmVnYXRpdmUiCittc2dzdHIgImZldGNoLnBhcmFsbGVsIG5lZ2F0aWYgb2xhbWF6IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM5IGJ1aWx0aW4vcHVsbC5jOjE4NAorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgInTDvG0gdXphayBrb251bWxhcmRhbiBnZXRpciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MSBidWlsdGluL3B1bGwuYzoyMjgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL2ZldGNoIgorbXNnc3RyICJnaXQgcHVsbC9mZXRjaCBpw6dpbiDDvHN0a2F5bmFrIGF5YXJsYSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MyBidWlsdGluL3B1bGwuYzoxODcKK21zZ2lkICJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciCittc2dzdHIgIi5naXQvRkVUQ0hfSEVBRCdpbiDDvHplcmluZSB5YXptYWsgeWVyaW5lIG9uYSBpbGnFn3RpciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NSBidWlsdGluL3B1bGwuYzoxOTAKK21zZ2lkICJwYXRoIHRvIHVwbG9hZCBwYWNrIG9uIHJlbW90ZSBlbmQiCittc2dzdHIgInV6YWsgdcOndGFraSB5w7xrbGVtZSBwYWtldGluZSBvbGFuIHlvbCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NgorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCByZWZlcmVuY2UiCittc2dzdHIgInllcmVsIGJhxZ92dXJ1bnVuIMO8emVyaW5lIHpvcmxhIHlheiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0OAorbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAiYmlyZGVuIMOnb2sgdXphayBrb251bWRhbiBnZXRpciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MCBidWlsdGluL3B1bGwuYzoxOTQKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJ0w7xtIGV0aWtldGxlcmkgdmUgaWxpxZ9raWxlbmRpcmlsZW4gbmVzbmVsZXJpIGdldGlyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUyCittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICJ0w7xtIGV0aWtldGxlcmkgZ2V0aXJtZSAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgInBhcmFsZWxkZSBnZXRpcmlsZW4gYWx0bW9kw7xsbGVyaW4gc2F5xLFzxLEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTYgYnVpbHRpbi9wdWxsLmM6MTk3Cittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgImFydMSxayB1emFrIGtvbnVtZGEgb2xtYXlhbiB1emFrIGl6bGVtZSBkYWxsYXLEsW7EsSBidWRhIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4Cittc2dpZCAicHJ1bmUgbG9jYWwgdGFncyBubyBsb25nZXIgb24gcmVtb3RlIGFuZCBjbG9iYmVyIGNoYW5nZWQgdGFncyIKK21zZ3N0ciAiIgorImFydMSxayB1emFrIGtvbnVtZGEgb2xtYXlhbiB5ZXJlbCBldGlrZXRsZXJpIGJ1ZGEgdmUgZGXEn2nFn3RpcmlsZW4gZXRpa2V0bGVyaSAiCisiZ8O8bmNlbGxlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU5IGJ1aWx0aW4vZmV0Y2guYzoxODIgYnVpbHRpbi9wdWxsLmM6MTIxCittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICJpc3RlayDDvHplcmluZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2MAorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgImFsdG1vZMO8bGxlcmluIMO2enlpbmVsaSBnZXRpcmlsbWVzaW5pIGRlbmV0bGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9wdWxsLmM6MjA1Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgImluZGlyaWxlbiBwYWtldGkgdHV0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY2Cittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgIkhFQUQgYmHFn3Z1cnVzdW51biBnw7xuY2VsbGVubWVzaW5lIGl6aW4gdmVyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY5IGJ1aWx0aW4vZmV0Y2guYzoxNzUgYnVpbHRpbi9wdWxsLmM6MjA4Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAic8SxxJ8ga2xvbnVuIGdlw6dtacWfaW5pIGRlcmlubGXFn3RpciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MQorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aW1lIgorbXNnc3RyICJ6YW1hbmEgYmHEn2zEsSBvbGFyYWsgc8SxxJ8gZGVwb251biBnZcOnbWnFn2luaSBkZXJpbmxlxZ90aXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzcgYnVpbHRpbi9wdWxsLmM6MjExCittc2dpZCAiY29udmVydCB0byBhIGNvbXBsZXRlIHJlcG9zaXRvcnkiCittc2dzdHIgInRhbSBiaXIgZGVwb3lhIGTDtm7DvMWfdMO8ciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MAorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgImJ1bnUgYWx0bW9kw7xsIHlvbCDDp8Sxa3TEsXPEsW7EsW4gYmHFn8SxbmEgZWtsZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MworbXNnaWQgIiIKKyJkZWZhdWx0IGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyAobG93ZXIgcHJpb3JpdHkgdGhhbiBjb25maWcgIgorImZpbGVzKSIKK21zZ3N0ciAiIgorImFsdG1vZMO8bGxlcmluIMO2enlpbmVsaSBnZXRpcmlsbWVzaSBpw6dpbiDDtm50YW7EsW1sxLEgKHlhcMSxbGFuZMSxcm1hICIKKyJkb3N5YWxhcsSxbmRhbiBkYWhhIGF6IMO2bmNlbGnEn2UgaXllKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NyBidWlsdGluL3B1bGwuYzoyMTQKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgIi5naXQvc2hhbGxvdyd1IGfDvG5jZWxsZXllbiBiYcWfdnVydWxhcsSxIGthYnVsIGV0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg4IGJ1aWx0aW4vcHVsbC5jOjIxNgorbXNnaWQgInJlZm1hcCIKK21zZ3N0ciAiaWxnaWxpIGJhxZ92dXJ1IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg5IGJ1aWx0aW4vcHVsbC5jOjIxNworbXNnaWQgInNwZWNpZnkgZmV0Y2ggcmVmbWFwIgorbXNnc3RyICJnZXRpcm1lIGlsZSBpbGdpbGkgYmHFn3Z1cnVsYXLEsSBiZWxpcnQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxOTYKK21zZ2lkICJyZXBvcnQgdGhhdCB3ZSBoYXZlIG9ubHkgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0aGlzIG9iamVjdCIKK21zZ3N0ciAieWFsbsSxemNhIGJ1IG5lc25lZGVuIHVsYcWfxLFsYWJpbGlyIG5lc25lbGVyaW1peiBvbGR1xJ91bnUgYmlsZGlyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk5Cittc2dpZCAicnVuICdnYyAtLWF1dG8nIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJnZXRpcm1lIHNvbnJhc8SxbmRhICdnYyAtLWF1dG8nIMOnYWzEscWfdMSxciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMSBidWlsdGluL3B1bGwuYzoyMjYKK21zZ2lkICJjaGVjayBmb3IgZm9yY2VkLXVwZGF0ZXMgb24gYWxsIHVwZGF0ZWQgYnJhbmNoZXMiCittc2dzdHIgInTDvG0gZ8O8bmNlbGxlbm1pxZ8gZGFsbGFyxLEgem9ybGFubcSxxZ8gZ8O8bmNlbGxlbWVsZXIgacOnaW4gZGVuZXRsZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMworbXNnaWQgIndyaXRlIHRoZSBjb21taXQtZ3JhcGggYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgImdldGlyZGlrdGVuIHNvbnJhIGfDtm5kZXJpIGdyYWZpxJ9pbmkgeWF6IgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEzCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIlV6YWsgSEVBRCBiYcWfdnVydXN1IGJ1bHVuYW1hZMSxIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZpZ3VyYXRpb24gZmV0Y2gub3V0cHV0IGNvbnRhaW5zIGludmFsaWQgdmFsdWUgJXMiCittc2dzdHIgImZldGNoLm91dHB1dCB5YXDEsWxhbmTEsXJtYXPEsSBnZcOnZXJzaXogZGXEn2VyIGnDp2VyaXlvcjogJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiJXMgbmVzbmVzaSBidWx1bmFtYWTEsSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1NQorbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW2fDvG5jZWxdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY4IGJ1aWx0aW4vZmV0Y2guYzo3ODQgYnVpbHRpbi9mZXRjaC5jOjg1NgorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIltyZWRkZWRpbGRpXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2OQorbXNnaWQgImNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJnZcOnZXJsaSBkYWxkYSBnZXRpcm1lIHlhcMSxbGFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzkKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIltldGlrZXQgZ8O8bmNlbGxlbWVzaV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODAgYnVpbHRpbi9mZXRjaC5jOjgxNyBidWlsdGluL2ZldGNoLmM6ODM5CisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgInllcmVsIGJhxZ92dXJ1IGfDvG5jZWxsZW5lbWl5b3IiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODQKK21zZ2lkICJ3b3VsZCBjbG9iYmVyIGV4aXN0aW5nIHRhZyIKK21zZ3N0ciAidmFyIG9sYW4gZXRpa2V0aSBkZcSfacWfdGlyZWNla3RpciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwNgorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW3llbmkgZXRpa2V0XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwOQorbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW3llbmkgZGFsXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMgorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiW3llbmkgYmHFn3Z1cnVdIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAiem9ybGFubcSxxZ8gZ8O8bmNlbGxlbWUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTYKK21zZ2lkICJub24tZmFzdC1mb3J3YXJkIgorbXNnc3RyICJpbGVyaSBzYXLEsW0gZGXEn2lsIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODc3Cittc2dpZCAiIgorIkZldGNoIG5vcm1hbGx5IGluZGljYXRlcyB3aGljaCBicmFuY2hlcyBoYWQgYSBmb3JjZWQgdXBkYXRlLFxuIgorImJ1dCB0aGF0IGNoZWNrIGhhcyBiZWVuIGRpc2FibGVkLiBUbyByZS1lbmFibGUsIHVzZSAnLS1zaG93LWZvcmNlZC11cGRhdGVzJ1xuIgorImZsYWcgb3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIHRydWUnLiIKK21zZ3N0ciAiIgorIkdldGlybWUgbm9ybWFsZGUgaGFuZ2kgZGFsbGFyZGEgem9ybGEgZ8O8bmNlbGxlbWUgeWFwxLFsZMSxxJ/EsW7EsSBiZWxpcnRpcixcbiIKKyJhbmNhayBidSBkZW5ldGxlbWUga2FwYXTEsWxtxLHFny4gWWVuaWRlbiBhw6dtYWsgacOnaW4gLS1zaG93LWZvcmNlZC11cGRhdGVzXG4iCisiYmF5cmHEn8SxbsSxIGt1bGxhbsSxbiB2ZXlhICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIHRydWUnIMOnYWzEscWfdMSxcsSxbi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGNoZWNrIGZvcmNlZCB1cGRhdGVzLiBZb3UgY2FuIHVzZVxuIgorIictLW5vLXNob3ctZm9yY2VkLXVwZGF0ZXMnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyAiCisiZmFsc2UnXG4iCisiIHRvIGF2b2lkIHRoaXMgY2hlY2suXG4iCittc2dzdHIgIiIKKyJab3JsYSBnw7xuY2VsbGVtZWxlcmkgZGVuZXRsZW1lICUuMmYgc2FuaXllIHPDvHJkw7wuIC0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlc1xuIgorImt1bGxhbmFyYWsgdmV5YSAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyBmYWxzZScgw6dhbMSxxZ90xLFyYXJha1xuIgorImJ1IGRlbmV0bGVtZWRlbiBrYcOnxLFuYWJpbGlyc2luaXouXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIlcyB0w7xtIGdlcmVrbGkgbmVzbmVsZXJpIGfDtm5kZXJtZWRpXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVqZWN0ICVzIGJlY2F1c2Ugc2hhbGxvdyByb290cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgdXBkYXRlZCIKK21zZ3N0ciAiJXMgcmVkZGVkaWxtZWxpLCDDp8O8bmvDvCBzxLHEnyBrw7ZrbGVyaW4gZ8O8bmNlbGxlbm1lc2luZSBpemluIHZlcmlsbWl5b3IiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDI2IGJ1aWx0aW4vZmV0Y2guYzoxMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gJS4qc1xuIgorbXNnc3RyICLFnnVyYWRhbjogJS4qc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisiYmF6xLEgeWVyZWwgYmHFn3Z1cnVsYXIgZ8O8bmNlbGxlbmVtZWRpOyAnZ2l0IHJlbW90ZSBwcnVuZSAlcydcbiIKKyJrdWxsYW5hcmFrIGVza2kgdmUgw6dha8SxxZ9hbiBkYWxsYXLEsSBrYWxkxLFybWF5xLEgZGVuZXlpbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIHNhcmthY2FrKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMgc2Fya21heWEgYmHFn2xhZMSxKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNjcKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIltzaWxpbmRpXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNjggYnVpbHRpbi9yZW1vdGUuYzoxMTEyCittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIoeW9rKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyBvZiBub24tYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICLDh8SxcGxhayBvbG1heWFuIGRlcG9udW4gZ2XDp2VybGkgJXMgZGFsxLFuYSBnZXRpcm1lIHJlZGRlZGlsaXlvciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiXCIlc1wiIHNlw6dlbmXEn2kgXCIlc1wiIGRlxJ9lcmkgJXMgacOnaW4gZ2XDp2VybGkgZGXEn2lsIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgIlwiJXNcIiBzZcOnZW5lxJ9pICVzIGnDp2luIHlvayBzYXnEsWzEsXlvclxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQyMQorbXNnaWQgIm11bHRpcGxlIGJyYW5jaGVzIGRldGVjdGVkLCBpbmNvbXBhdGlibGUgd2l0aCAtLXNldC11cHN0cmVhbSIKK21zZ3N0ciAiYmlyZGVuIMOnb2sgZGFsIGFsZ8SxbGFuZMSxLCAtLXNldC11cHN0cmVhbSBpbGUgdXl1bXN1eiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzYKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiYmlyIHV6YWsga29udW0gdXphayBpemxlbWUgZGFsxLEgacOnaW4gw7xzdGtheW5hayBheWFybGFubcSxeW9yIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzOAorbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSB0YWciCittc2dzdHIgImJpciB1emFrIGtvbnVtIGV0aWtldGkgacOnaW4gw7xzdGtheW5hayBheWFybGFubcSxeW9yIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ0MAorbXNnaWQgInVua25vd24gYnJhbmNoIHR5cGUiCittc2dzdHIgImJpbGlubWV5ZW4gZGFsIHTDvHLDvCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NDIKK21zZ2lkICIiCisibm8gc291cmNlIGJyYW5jaCBmb3VuZC5cbiIKKyJ5b3UgbmVlZCB0byBzcGVjaWZ5IGV4YWN0bHkgb25lIGJyYW5jaCB3aXRoIHRoZSAtLXNldC11cHN0cmVhbSBvcHRpb24uIgorbXNnc3RyICIiCisiS2F5bmFrIGRhbCBidWx1bmFtYWTEsS5cbiIKKyItLXNldC11cHN0cmVhbS1vcHRpb24gaWxlIHRhbSBvbGFyYWsgYmlyIGRhbCBiZWxpcnRtZW5peiBnZXJla2l5b3IuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2OCBidWlsdGluL2ZldGNoLmM6MTYzMQorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICIlcyBnZXRpcmlsaXlvclxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU3OCBidWlsdGluL2ZldGNoLmM6MTYzMyBidWlsdGluL3JlbW90ZS5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgIiVzIGdldGlyaWxlbWVkaSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZldGNoICclcycgKGV4aXQgY29kZTogJWQpXG4iCittc2dzdHIgIiclcycgZ2V0aXJpbGVtZWRpICjDp8Sxa8SxxZ8ga29kdTogJWQpXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjkzCittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJCaXIgdXphayBkYWwgYmVsaXJ0aWxtZWRpLiBMw7x0ZmVuIHllbmkgcmV2aXp5b25sYXLEsW5cbiIKKyJhbMSxbmFjYcSfxLEgYmlyIFVSTCB2ZXlhIHV6YWsga29udW0gYWTEsSBiZWxpcnRpbi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzMwCittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAiQmlyIGV0aWtldCBhZMSxIGJlbGlydG1lbml6IGdlcmVraXlvci4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzgwCittc2dpZCAiTmVnYXRpdmUgZGVwdGggaW4gLS1kZWVwZW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiLS1kZWVwZW4gacOnaW4gbmVnYXRpZiBkZXJpbmxpayBkZXN0ZWtsZW5taXlvciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODIKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWRlZXBlbiB2ZSAtLWRlcHRoIGJpcmxpa3RlIGt1bGxhbsSxbGFtYXoiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzg3Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi0tZGVwdGggdmUgLS11bnNoYWxsb3cgYmlybGlrdGUga3VsbGFuxLFsYW1heiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODkKK21zZ2lkICItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAidGFtIGJpciBkZXBvIMO8emVyaW5kZSAtLXVuc2hhbGxvdyBiaXIgYW5sYW0gaWZhZGUgZXRtaXlvciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MDUKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwgYmlyIGRlcG8gZGXEn2nFn2tlbmkgYWxtxLF5b3IiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODA3Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJmZXRjaCAtLWFsbCBiYcWfdnVydSBiZWxpcnRlw6dsZXJpIGlsZSBiaXJsaWt0ZSBiaXIgYW5sYW0gaWZhZGUgZXRtaXlvciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAiQsO2eWxlIGJpciB1emFrIGtvbnVtIHZleWEgdXphayBrb251bSBncnVidSB5b2s6ICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgyMworbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorIkJpciBncnVidSBnZXRpcm1lIHZlIGJhxZ92dXJ1IGJlbGlydGXDp2xlcmkgdGFuxLFtbGFtYSBiaXIgYW5sYW0gaWZhZGUgZXRtaXlvciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NDEKK21zZ2lkICIiCisiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyJwYXJ0aWFsY2xvbmUiCittc2dzdHIgIiIKKyItLWZpbHRlciB5YWxuxLF6Y2EgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgacOnaW5kZSB5YXDEsWxhbmTEsXLEsWxtxLHFnyB1emFrIGtvbnVtICIKKyJpbGUga3VsbGFuxLFsYWJpbGlyLiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTgKK21zZ2lkICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8aWxldGk+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8ZG9zeWE+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcxCittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICJnw7xubMO8xJ/DvCBrxLFzYSBnw7xubMO8a3RlbiBlbiBheiA8bj4gZ2lyZGkgaWxlIGRvbGR1ciIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc0Cittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiLS1sb2cgacOnaW4gYXJtYSAoa3VsbGFuxLFtIGTEscWfxLEpIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzcKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICJtZXRpbiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc4Cittc2dpZCAidXNlIDx0ZXh0PiBhcyBzdGFydCBvZiBtZXNzYWdlIgorbXNnc3RyICJpbGV0aW5pbiBiYcWfbGFuZ8SxY8SxIG9sYXJhayA8bWV0aW4+IGt1bGxhbiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc5Cittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgIm9rdW5hY2FrIGRvc3lhIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbPHNlw6dlbmVrbGVyPl0gWzxkaXpnaT5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamVjdD5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8bmVzbmU+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMgorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbW1pdD5dXSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8Z8O2bmRlcmk+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTMKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIFstLW5vLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8Z8O2bmRlcmk+XV0gWy0tbm8tY29udGFpbnMgWzxnw7ZuZGVyaT5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIgorbXNnc3RyICJ5ZXIgdHV0dWN1bGFyxLEga2FidcSfdW4gYW5sYXlhYmlsZWNlxJ9pIGJpw6dpbWRlIHTEsXJuYWsgacOnaW5lIGFsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMwCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBwZXJsIgorbXNnc3RyICJ5ZXIgdHV0dWN1bGFyxLEgcGVybCdpbiBhbmxheWFiaWxlY2XEn2kgYmnDp2ltZGUgdMSxcm5hayBpw6dpbmUgYWwiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzIKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHB5dGhvbiIKK21zZ3N0ciAieWVyIHR1dHVjdWxhcsSxIHB5dGhvbid1biBhbmxheWFiaWxlY2XEn2kgYmnDp2ltZGUgdMSxcm5hayBpw6dpbmUgYWwiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAieWVyIHR1dHVjdWxhcsSxIFRjbCduaW4gYW5sYXlhYmlsZWNlxJ9pIGJpw6dpbWRlIHTEsXJuYWsgacOnaW5lIGFsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM3Cittc2dpZCAic2hvdyBvbmx5IDxuPiBtYXRjaGVkIHJlZnMiCittc2dzdHIgInlhbG7EsXpjYSA8bj4gZcWfbGXFn2VuIGJhxZ92dXJ1eXUgZ8O2c3RlciIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOSBidWlsdGluL3RhZy5jOjQzOQorbXNnaWQgInJlc3BlY3QgZm9ybWF0IGNvbG9ycyIKK21zZ3N0ciAiYmnDp2ltIHJlbmtsZXJpbmUgdXkiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggcG9pbnRzIGF0IHRoZSBnaXZlbiBvYmplY3QiCittc2dzdHIgInlhbG7EsXpjYSB2ZXJpbGVuIG5lc25leWUgacWfYXJldCBlZGVuIGJhxZ92dXJ1bGFyxLEgeWF6ZMSxciIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NAorbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgInlhbG7EsXpjYSBiaXJsZcWfdGlyaWxlbiBiYcWfdnVydWxhcsSxIHlhemTEsXIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDUKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAieWFsbsSxemNhIGJpcmxlxZ90aXJpbG1lbWnFnyBiYcWfdnVydWxhcsSxIHlhemTEsXIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDYKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJ5YWxuxLF6Y2EgZ8O2bmRlcml5aSBpw6dlcmVuIGJhxZ92dXJ1bGFyxLEgeWF6ZMSxciIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NworbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgInlhbG7EsXpjYSBnw7ZuZGVyaXlpIGnDp2VybWV5ZW4gYmHFn3Z1cnVsYXLEsSB5YXpkxLFyIgorCisjOiBidWlsdGluL2ZzY2suYzo2OCBidWlsdGluL2ZzY2suYzoxNDcgYnVpbHRpbi9mc2NrLmM6MTQ4Cittc2dpZCAidW5rbm93biIKK21zZ3N0ciAiYmlsaW5tZXllbiIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTAwIGJ1aWx0aW4vZnNjay5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiAlcyAlczogJXMiCittc2dzdHIgIiVzICVzIGnDp2luZGUgaGF0YTogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIHdhcm5pbmcgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmcgaW4gJXMgJXM6ICVzIgorbXNnc3RyICIlcyAlcyBpw6dpbmRlIHV5YXLEsTogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE0MyBidWlsdGluL2ZzY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXMiCittc2dzdHIgIsWfdXJhZGFuIGvEsXLEsWsgYmHEnzogJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoxNTUKK21zZ2lkICJ3cm9uZyBvYmplY3QgdHlwZSBpbiBsaW5rIgorbXNnc3RyICJiYcSfZGEgeWFubMSxxZ8gbmVzbmUgdMO8csO8IgorCisjOiBidWlsdGluL2ZzY2suYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImJyb2tlbiBsaW5rIGZyb20gJTdzICVzXG4iCisiICAgICAgICAgICAgICB0byAlN3MgJXMiCittc2dzdHIgIiIKKyLFn3VyYWRhbiBrxLFyxLFrIGJhxJ86ICU3cyAlc1xuIgorIiAgICAgICAgICAgxZ91cmF5YTogJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyAlcyIKK21zZ3N0ciAiZWtzaWsgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlYWNoYWJsZSAlcyAlcyIKK21zZ3N0ciAidWxhxZ/EsWxhbWF5YW4gJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJkYW5nbGluZyAlcyAlcyIKK21zZ3N0ciAic2Fya2FuICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMzkKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxvc3QtZm91bmQiCittc2dzdHIgImxvc3QtZm91bmQgb2x1xZ90dXJ1bGFtYWTEsSIKKworIzogYnVpbHRpbi9mc2NrLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggJyVzJyIKK21zZ3N0ciAiJyVzJyBiaXRpcmlsZW1lZGkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyIKK21zZ3N0ciAiJXMgZGVuZXRsZW5peW9yIgorCisjOiBidWlsdGluL2ZzY2suYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5ICglZCBvYmplY3RzKSIKK21zZ3N0ciAiQmHEn2xhbmFiaWxpcmxpayBkZW5ldGxlbml5b3IgKCVkIG5lc25lKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzICVzIgorbXNnc3RyICIlcyAlcyBkZW5ldGxlbml5b3IiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyOQorbXNnaWQgImJyb2tlbiBsaW5rcyIKK21zZ3N0ciAia8SxcsSxayBiYcSfbGFyIgorCisjOiBidWlsdGluL2ZzY2suYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCAlcyIKK21zZ3N0ciAia8O2ayAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZ2dlZCAlcyAlcyAoJXMpIGluICVzIgorbXNnc3RyICIlcyAlcyAoJXMpIMWfdXJhZGEgZXRpa2V0bGVuZGk6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3NpbmciCittc2dzdHIgIiVzOiBuZXNuZSBoYXNhciBnw7ZybcO8xZ8gdmV5YSBrYXnEsXAiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCByZWZsb2cgZW50cnkgJXMiCittc2dzdHIgIiVzOiBnZcOnZXJzaXogYmHFn3Z1cnUgZ8O8bmzDvMSfw7wgZ2lyZGlzaSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlZmxvZyAlcy0+JXMiCittc2dzdHIgIkJhxZ92dXJ1IGfDvG5sw7zEn8O8IGRlbmV0bGVuaXlvcjogJXMtPiVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyICVzIgorbXNnc3RyICIlczogZ2XDp2Vyc2l6IHNoYTEgacWfYXJldMOnaXNpICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiJXM6IGJpciBnw7ZuZGVyaSBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYwOQorbXNnaWQgIm5vdGljZTogTm8gZGVmYXVsdCByZWZlcmVuY2VzIgorbXNnc3RyICJVeWFyxLE6IMOWbnRhbsSxbWzEsSBiYcWfdnVydWxhciB5b2siCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZzogJXMiCittc2dzdHIgIiVzOiBuZXNuZSBoYXNhciBnw7ZybcO8xZ8gdmV5YSBrYXnEsXA6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3VsZCBub3QgYmUgcGFyc2VkOiAlcyIKK21zZ3N0ciAiJXM6IG5lc25lIGF5csSxxZ90xLFyxLFsYW1hZMSxOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaGExIGZpbGU6ICVzIgorbXNnc3RyICJoYXRhbMSxIHNoYTEgZG9zeWFzxLE6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzIKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3J5IgorbXNnc3RyICJOZXNuZSBkaXppbmkgZGVuZXRsZW5peW9yIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzUKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgIk5lc25lIGRpemlubGVyaSBkZW5ldGxlbml5b3IiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyBsaW5rIgorbXNnc3RyICIlcyBiYcSfIGRlbmV0bGVuaXlvciIKKworIzogYnVpbHRpbi9mc2NrLmM6Njk1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICJnZcOnZXJzaXogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIKK21zZ3N0ciAiJXMgZ2FyaXAgYmlyIMWfZXllIGnFn2FyZXQgZWRpeW9yICglcykiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZGV0YWNoZWQgSEVBRCBwb2ludHMgYXQgbm90aGluZyIKK21zZ3N0ciAiJXM6IGF5csSxayBIRUFEIGJpciDFn2V5ZSBpxZ9hcmV0IGV0bWl5b3IiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RpY2U6ICVzIHBvaW50cyB0byBhbiB1bmJvcm4gYnJhbmNoICglcykiCittc2dzdHIgIlV5YXLEsTogJXMgaGVuw7x6IGRvxJ9tYW3EscWfIGJpciBkYWxhIGnFn2FyZXQgZWRpeW9yICglcykiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyNAorbXNnaWQgIkNoZWNraW5nIGNhY2hlIHRyZWUiCittc2dzdHIgIsOWbmJlbGxlayBhxJ9hY8SxIGRlbmV0bGVuaXlvciIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciBpbiBjYWNoZS10cmVlIgorbXNnc3RyICIlczogY2FjaGUtdHJlZSBpw6dpbmRlIGdlw6dlcnNpeiBzaGExIGnFn2FyZXTDp2lzaSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzM4Cittc2dpZCAibm9uLXRyZWUgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAiY2FjaGUtdHJlZSBpw6dpbmRlIGHEn2HDpyBvbG1heWFuIMO2Z2UiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc2OQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs8c2XDp2VuZWtsZXI+XSBbPG5lc25lPi4uLl0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NQorbXNnaWQgInNob3cgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAidWxhxZ/EsWxhbWF5YW4gbmVzbmVsZXJpIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NgorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAic2Fya2FuIG5lc25lbGVyaSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzcKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAiZXRpa2V0bGVyaSBiaWxkaXIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3OAorbXNnaWQgInJlcG9ydCByb290IG5vZGVzIgorbXNnc3RyICJrw7ZrIGTDvMSfw7xtbGVyaSBiaWxkaXIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3OQorbXNnaWQgIm1ha2UgaW5kZXggb2JqZWN0cyBoZWFkIG5vZGVzIgorbXNnc3RyICJpbmRla3MgbmVzbmVsZXJpbmkgZGFsIHVjdSBkw7zEn8O8bcO8IHlhcCIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgwCittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICJiYcWfdnVydSBnw7xubMO8a2xlcmluaSBkYWwgdWN1IGTDvMSfw7xtw7wgeWFwICjDtm50YW7EsW1sxLEpIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODEKK21zZ2lkICJhbHNvIGNvbnNpZGVyIHBhY2tzIGFuZCBhbHRlcm5hdGUgb2JqZWN0cyIKK21zZ3N0ciAiZWsgb2xhcmFrIHBha2V0bGVyaSB2ZSBhbHRlcm5hdGlmIG5lc25lbGVyaSBkZSBkaWtrYXRlIGFsIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODIKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAieWFsbsSxemNhIGJhxJ9sYW5hYmlsaXJsacSfaSBkZW5ldGxlIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODMKK21zZ2lkICJlbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmciCittc2dzdHIgImRhaGEga2VzaW4gZGVuZXRsZW1leWkgZXRraW5sZcWfdGlyIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODUKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAic2Fya2FuIG5lc25lbGVyaSAuZ2l0L2xvc3QtZm91bmQnYSB5YXoiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NiBidWlsdGluL3BydW5lLmM6MTMyCittc2dpZCAic2hvdyBwcm9ncmVzcyIKK21zZ3N0ciAiaWxlcmxlbWV5aSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODcKK21zZ2lkICJzaG93IHZlcmJvc2UgbmFtZXMgZm9yIHJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJ1bGHFn8SxbGFiaWxpciBuZXNuZWxlciBpw6dpbiBheXLEsW50xLFsxLEgYWRsYXLEsSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2ZzY2suYzo4NDYgYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI1Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiTmVzbmVsZXIgZGVuZXRsZW5peW9yIgorCisjOiBidWlsdGluL2ZzY2suYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBtaXNzaW5nIgorbXNnc3RyICIlczogbmVzbmUga2F5xLFwIgorCisjOiBidWlsdGluL2ZzY2suYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXI6IGV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIgorbXNnc3RyICJnZcOnZXJzaXogcGFyYW1ldHJlOiBzaGExIGJla2xlbml5b3JkdSwgJyVzJyBhbMSxbmTEsSIKKworIzogYnVpbHRpbi9nYy5jOjM1Cittc2dpZCAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZ2MgWzxzZcOnZW5la2xlcj5dIgorCisjOiBidWlsdGluL2djLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZzdGF0ICVzOiAlcyIKK21zZ3N0ciAiJXMgZnN0YXQgeWFwxLFsYW1hZMSxOiAlcyIKKworIzogYnVpbHRpbi9nYy5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJyVzJyB2YWx1ZSAnJXMnIgorbXNnc3RyICInJXMnIGRlxJ9lcmkgJyVzJyBheXLEscWfdMSxcsSxbGFtYWTEsSIKKworIzogYnVpbHRpbi9nYy5jOjQ3NSBidWlsdGluL2luaXQtZGIuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCAnJXMnIgorbXNnc3RyICInJXMnIGJpbGdpbGVyaSBhbMSxbmFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0ODQgYnVpbHRpbi9ub3Rlcy5jOjI0MCBidWlsdGluL3RhZy5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICInJXMnIG9rdW5hbcSxeW9yIgorCisjOiBidWlsdGluL2djLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbGFzdCBnYyBydW4gcmVwb3J0ZWQgdGhlIGZvbGxvd2luZy4gUGxlYXNlIGNvcnJlY3QgdGhlIHJvb3QgY2F1c2VcbiIKKyJhbmQgcmVtb3ZlICVzLlxuIgorIkF1dG9tYXRpYyBjbGVhbnVwIHdpbGwgbm90IGJlIHBlcmZvcm1lZCB1bnRpbCB0aGUgZmlsZSBpcyByZW1vdmVkLlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiRW4gc29uIHlhcMSxbGFuICdnYycgacWfbGVtaSBhxZ9hxJ/EsWRha2lsZXJpIGJpbGRpcmRpLiBMw7x0ZmVuIHNvcnVudW4gYW5hXG4iCisibmVkZW5pbmkgZMO8emVsdGluIHZlICVzIMO2Z2VzaW5pIGthbGTEsXLEsW4uXG4iCisiS2VuZGlsacSfaW5kZW4gdGVtaXpsaWsgZG9zeWEga2FsZMSxcsSxbGFuYSBkZcSfaW4gZ2Vyw6dla2xlxZ90aXJpbG1leWVjZWt0aXIuXG4iCisiXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1MzkKK21zZ2lkICJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAiYmHFn3Z1cnVsbWF5YW4gbmVzbmVsZXJpIGJ1ZGEiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDEKK21zZ2lkICJiZSBtb3JlIHRob3JvdWdoIChpbmNyZWFzZWQgcnVudGltZSkiCittc2dzdHIgImJpcmF6IGRhaGEgdGl0aXogb2wgKGFydMSxcsSxbG3EscWfIGnFn2xleWnFnyBzw7xyZXNpKSIKKworIzogYnVpbHRpbi9nYy5jOjU0MgorbXNnaWQgImVuYWJsZSBhdXRvLWdjIG1vZGUiCittc2dzdHIgImF1dG8tZ2Mga2lwaW5pIGV0a2lubGXFn3RpciIKKworIzogYnVpbHRpbi9nYy5jOjU0NQorbXNnaWQgImZvcmNlIHJ1bm5pbmcgZ2MgZXZlbiBpZiB0aGVyZSBtYXkgYmUgYW5vdGhlciBnYyBydW5uaW5nIgorbXNnc3RyICJiYcWfa2EgYmlyIGdjIMOnYWzEscWfxLF5b3Igb2xzYSBiaWxlIHpvcmxhIGdjIMOnYWzEscWfdMSxciIKKworIzogYnVpbHRpbi9nYy5jOjU0OAorbXNnaWQgInJlcGFjayBhbGwgb3RoZXIgcGFja3MgZXhjZXB0IHRoZSBsYXJnZXN0IHBhY2siCittc2dzdHIgImVuIGLDvHnDvGsgcGFrZXQgZMSxxZ/EsW5kYWtpIGRpxJ9lciB0w7xtIHBha2V0bGVyaSB5ZW5pZGVuIHBha2V0bGUiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGdjLmxvZ2V4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiZ2MubG9nZXhwaXJ5IGRlxJ9lcmkgJXMgYXlyxLHFn3TEsXLEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIHBydW5lIGV4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiJ3BydW5lIGV4cGlyeScgZGXEn2VyaSAlcyBheXLEscWfdMSxcsSxbGFtYWTEsSIKKworIzogYnVpbHRpbi9nYy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaW4gYmFja2dyb3VuZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiRW4gaXlpIGJhxZ9hcsSxbSBpw6dpbiBkZXBvIGFya2EgcGxhbmRhIGtlbmRpbGnEn2luZGVuIHBha2V0bGVuaXlvci5cbiIKKworIzogYnVpbHRpbi9nYy5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIkVuIGl5aSBiYcWfYXLEsW0gacOnaW4gZGVwbyBrZW5kaWxpxJ9pbmRlbiBwYWtldGxlbml5b3IuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIKK21zZ3N0ciAiRWwgaWxlIG9ydGFsxLFrIHRlbWl6bGnEn2kgacOnaW4gXCJnaXQgaGVscCBnY1wieWUgYmFrxLFuLlxuIgorCisjOiBidWlsdGluL2djLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnYyBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gbWFjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBpZiBub3QpIgorbXNnc3RyICIiCisiZ2MgJXMgbWFraW5lc2luZGUgaGFsaWhhesSxcmRhIMOnYWzEscWfxLF5b3IgKHBpZCAlPFBSSXVNQVg+IC0gw6dhbMSxxZ9txLF5b3JzYSAtLSIKKyJmb3JjZSBrdWxsYW7EsW4pIgorCisjOiBidWlsdGluL2djLmM6Njk0Cittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgorbXNnc3RyICIiCisiw4dvayBmYXpsYSB1bGHFn8SxbGFiaWxpciBib8WfdGEgbmVzbmUgdmFyOyBrYWxkxLFybWFrIGnDp2luICdnaXQgcHJ1bmUnIGt1bGxhbsSxbi4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjMwCittc2dpZCAiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8cGF0dGVybj4gWzxyZXY+Li4uXSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZ3JlcCBbPHNlw6dlbmVrbGVyPl0gWy1lXSA8ZGl6Z2k+IFs8cmV2Pi4uLl0gW1stLV0gPHlvbD4uLi5dIgorCisjOiBidWlsdGluL2dyZXAuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVwOiBpxZ8gcGFyw6dhY8SxxJ/EsSBvbHXFn3R1cnVsYW1hZMSxOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkgZm9yICVzIgorbXNnc3RyICJnZcOnZXJzaXogYmVsaXJ0aWxlbiBpxZ8gcGFyw6dhY8SxxJ/EsSBzYXnEsXPEsSAoJWQpLCAlcyBpw6dpbiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGlzIHRoZSBjb25maWd1cmF0aW9uCisjLiB2YXJpYWJsZSBmb3IgdHdlYWtpbmcgdGhyZWFkcywgY3VycmVudGx5CisjLiBncmVwLnRocmVhZHMKKyMuCisjOiBidWlsdGluL2dyZXAuYzoyODcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzOCBidWlsdGluL2luZGV4LXBhY2suYzoxNzMxCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAiacWfIHBhcsOnYWPEscSfxLEgZGVzdGXEn2kgeW9rLCAlcyB5b2sgc2F5xLFsxLF5b3IiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ1MyBidWlsdGluL2dyZXAuYzo1NzggYnVpbHRpbi9ncmVwLmM6NjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIKK21zZ3N0ciAiYcSfYcOnIG9rdW5hbcSxeW9yICglcykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICIlcyB0w7xyw7xuZGVraSBiaXIgbmVzbmVkZW4gZ3JlcCB5YXDEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL2dyZXAuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiJyVjJyBhbmFodGFyxLEgc2F5xLFzYWwgYmlyIGRlxJ9lciBiZWtsaXlvciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODAzCittc2dpZCAic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAiw6dhbMSxxZ9tYSBhxJ9hY8SxIHllcmluZSBpbmRla3N0ZSBhcmEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwNQorbXNnaWQgImZpbmQgaW4gY29udGVudHMgbm90IG1hbmFnZWQgYnkgZ2l0IgorbXNnc3RyICJnaXQgdGFyYWbEsW5kYW4gecO2bmV0aWxtZXllbiBpw6dlcmlrdGUgYnVsIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDcKK21zZ2lkICJzZWFyY2ggaW4gYm90aCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgImhlbSBpemxlbmVuIGhlbSBpemxlbm1leWVuIGRvc3lhbGFyIGnDp2luZGUgYXJhIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDkKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgIicuZ2l0aWdub3JlJ2RhIGJlbGlydGlsZW4gZG9zeWFsYXLEsSB5b2sgc2F5IgorCisjOiBidWlsdGluL2dyZXAuYzo4MTEKK21zZ2lkICJyZWN1cnNpdmVseSBzZWFyY2ggaW4gZWFjaCBzdWJtb2R1bGUiCittc2dzdHIgImhlciBhbHRtb2TDvGxkZSDDtnp5aW5lbGkgb2xhcmFrIGFyYSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE0Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgImXFn2xlxZ9tZXllbiBzYXTEsXJsYXLEsSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTYKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICJCw5xZw5xLL2vDvMOnw7xrIGhhcmYgZHV5YXJzxLF6IGXFn2xlxZ9tZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE4Cittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgInlhbG7EsXpjYSBzw7Z6Y8O8ayBzxLFuxLFybGFyxLFuZGFraSBkaXpnaWxlcmkgZcWfbGXFn3RpciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIwCittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAiaWtpbGkgZG9zeWFsYXLEsSBtZXRpbiBvbGFyYWsgacWfbGUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMgorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAiaWtpbGkgZG9zeWFsYXJkYWtpIGRpemdpbGVyaSBlxZ9sZcWfdGlybWUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNQorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAiaWtpbGkgZG9zeWFsYXLEsSB0ZXh0Y29udiBzw7x6Z2XDp2xlcmkgaWxlIGnFn2xlIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjcKK21zZ2lkICJzZWFyY2ggaW4gc3ViZGlyZWN0b3JpZXMgKGRlZmF1bHQpIgorbXNnc3RyICJhbHRkaXppbmxlcmRlIGFyYSAow7ZudGFuxLFtbMSxKSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI5Cittc2dpZCAiZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4gbGV2ZWxzIgorbXNnc3RyICJlbiDDp29rIDxkZXJpbmxpaz4gZMO8emV5aW5lIGluIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzMKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAiZ2VuacWfbGV0aWxtacWfIFBPU0lYIGTDvHplbmxpIGlmYWRlbGVyaW5pIGt1bGxhbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM2Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICJ0ZW1lbCBQT1NJWCBkw7x6ZW5saSBpZmFkZWxlcmluaSBrdWxsYW4gKMO2bnRhbsSxbWzEsSkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzOQorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICJkaXpnaWxlcmkgc2FiaXQgZGl6aWxlciBvbGFyYWsgeW9ydW1sYSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQyCittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJQZXJsIHV5dW1sdSBkw7x6ZW5saSBpZmFkZWxlciBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NQorbXNnaWQgInNob3cgbGluZSBudW1iZXJzIgorbXNnc3RyICJzYXTEsXIgbnVtYXJhbGFyxLFuxLEgZ8O2c3RlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ2Cittc2dpZCAic2hvdyBjb2x1bW4gbnVtYmVyIG9mIGZpcnN0IG1hdGNoIgorbXNnc3RyICJpbGsgZcWfbGXFn21lbmluIHPDvHR1biBudW1hcmFzxLFuxLEgZ8O2c3RlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ3Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgImRvc3lhIGFkbGFyxLFuxLEgZ8O2c3Rlcm1lIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDgKK21zZ2lkICJzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAiZG9zeWEgYWRsYXLEsW7EsSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTAKK21zZ2lkICJzaG93IGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJkb3N5YSBhZGxhcsSxbsSxIGVuIMO8c3QgZGl6aW5lIGfDtnJlY2VsaSBvbGFyYWsgZ8O2c3RlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODUyCittc2dpZCAic2hvdyBvbmx5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJlxZ9sZcWfZW4gc2F0xLFybGFyIHllcmluZSB5YWxuxLF6Y2EgZG9zeWEgYWRsYXLEsW7EsSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTQKK21zZ2lkICJzeW5vbnltIGZvciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKK21zZ3N0ciAiLS1maWxlcy13aXRoLW1hdGNoZXMgZcWfYW5sYW1sxLFzxLEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NworbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAiZcWfbGXFn21lIG9sbWFkYW4geWFsbsSxemNhIGRvc3lhIGFkbGFyxLFuxLEgZ8O2c3RlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU5Cittc2dpZCAicHJpbnQgTlVMIGFmdGVyIGZpbGVuYW1lcyIKK21zZ3N0ciAiZG9zeWEgYWRsYXLEsW5kYW4gc29ucmEgTlVMIHlhemTEsXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MgorbXNnaWQgInNob3cgb25seSBtYXRjaGluZyBwYXJ0cyBvZiBhIGxpbmUiCittc2dzdHIgInlhbG7EsXpjYSBiaXIgc2F0xLFyxLFuIGXFn2xlxZ9lbiBrxLFzxLFtbGFyxLFuxLEgZ8O2c3RlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY0Cittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAiZcWfbGXFn2VuIHNhdMSxcmxhciB5ZXJpbmUgZcWfbGXFn21lIHNhecSxc8SxbsSxIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NQorbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICJlxZ9sZcWfbWVsZXJpIHZ1cmd1bGEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NworbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICJiYcWfa2EgZG9zeWFsYXJkYW4gb2xhbiBlxZ9sZcWfbWVsZXJpbiBhcmFzxLFuYSBib8WfIHNhdMSxciB5YXpkxLFyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjkKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICIiCisiYXluxLEgZG9zeWFkYW4gb2xhbiBlxZ9sZcWfbWVsZXJpbiDDvHplcmluZGUgZG9zeWEgYWTEsW7EsSB5YWxuxLF6Y2EgYmlyIGtleiBnw7ZzdGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzIKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAiZcWfbGXFn21lbGVyZGVuIMO2bmNlIHZlIHNvbnJhIDxuPiBzYXTEsXIgYmHEn2xhbSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzUKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICJlxZ9sZcWfbWVsZXJkZW4gw7ZuY2UgPG4+IHNhdMSxciBiYcSfbGFtIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NworbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAiZcWfbGXFn21lbGVyZGVuIHNvbnJhIDxuPiBzYXTEsXIgYmHEn2xhbSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzkKK21zZ2lkICJ1c2UgPG4+IHdvcmtlciB0aHJlYWRzIgorbXNnc3RyICI8bj4gacWfIHBhcsOnYWPEscSfxLEga3VsbGFuIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODAKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICItQyBOVU0gacOnaW4ga8Sxc2F5b2wiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4MworbXNnaWQgInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgImXFn2xlxZ9tZWxlcmRlbiDDtm5jZSBpxZ9sZXYgYWTEsW7EsW4gb2xkdcSfdSBiaXIgc2F0xLFyIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4NQorbXNnaWQgInNob3cgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIgorbXNnc3RyICLDp2V2cmVzaW5kZWtpIGnFn2xldmkgZ8O2c3RlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg4Cittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgImRpemdpbGVyaSBkb3N5YWRhbiBva3UiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MAorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiPGRpemdpPiBpbGUgZcWfbGXFnyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkyCittc2dpZCAiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIKK21zZ3N0ciAiLWUgaWxlIGJlbGlydGlsZW4gZGl6Z2lsZXJpIGJpcmxlxZ90aXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwNAorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICLDp8Sxa8SxxZ8gZHVydW11IGlsZSBvbGFuIGXFn2xlxZ9tZWxlcmRlIMOnxLFrdMSxIHZlcm1lIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDYKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hlcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2ggYWxsIHBhdHRlcm5zIgorbXNnc3RyICJ5YWxuxLF6Y2EgdMO8bSBkaXpnaWxlcmxlIGXFn2xlxZ9lbiBkb3N5YWxhcmRhbiBlxZ9sZcWfbWVsZXJpIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwOAorbXNnaWQgInNob3cgcGFyc2UgdHJlZSBmb3IgZ3JlcCBleHByZXNzaW9uIgorbXNnc3RyICJncmVwIGlmYWRlc2kgacOnaW4gYXlyxLHFn3TEsXJtYSBhxJ9hY8SxbsSxIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxMgorbXNnaWQgInBhZ2VyIgorbXNnc3RyICJzYXlmYWxhecSxY8SxIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTIKK21zZ2lkICJzaG93IG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciIKK21zZ3N0ciAic2F5ZmFsYXnEsWPEsWRhIGXFn2xlxZ9lbiBkb3N5YWxhcsSxIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxNgorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAiZ3JlcCgxKSdpbiDDp2HEn3LEsWxtYXPEsW5hIGl6aW4gdmVyIChidSB5YXDEsW0gdGFyYWbEsW5kYW4geW9rIHNhecSxbGTEsSkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk4MworbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4iCittc2dzdHIgImJpciBkaXpnaSB2ZXJpbG1lZGkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMTkKK21zZ2lkICItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cyIKK21zZ3N0ciAiLS1uby1pbmRleCB2ZXlhIC0tdW50cmFja2VkIHJldml6eW9ubGFybGEgYmlybGlrdGUga3VsbGFuxLFsYW1heiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiCittc2dzdHIgInJldml6eW9uIMOnw7Z6w7xsZW1peW9yOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA1NworbXNnaWQgIi0tdW50cmFja2VkIG5vdCBzdXBwb3J0ZWQgd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIKK21zZ3N0ciAiLS11bnRyYWNrZWQsIC0tcmVjdXJzZS1zdWJtb2R1bGVzIGlsZSBkZXN0ZWtsZW5taXlvciIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2MQorbXNnaWQgImludmFsaWQgb3B0aW9uIGNvbWJpbmF0aW9uLCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgImdlw6dlcnNpeiBzZcOnZW5layBiaXJsZcWfdGlybWVzaSwgLS10aHJlYWRzIHlvayBzYXnEsWzEsXlvciIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2NCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NDcKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAiacWfIHBhcsOnYWPEscSfxLEgZGVzdGXEn2kgeW9rLCAtLXRocmVhZHMgeW9rIHNhecSxbMSxeW9yIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODUxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgImdlw6dlcnNpeiBiZWxpcnRpbGVuIGnFnyBwYXLDp2FjxLHEn8SxIHNhecSxc8SxICglZCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMDEKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIi0tb3Blbi1maWxlcy1pbi1wYWdlciB5YWxuxLF6Y2Egw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhIMOnYWzEscWfxLFyIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTI3Cittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICItLWNhY2hlZCB2ZXlhIC0tdW50cmFja2VkLCAtLW5vLWluZGV4IGlsZSBiaXJsaWt0ZSBrdWxsYW7EsWxhbcSxeW9yIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTMzCittc2dpZCAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMiCittc2dzdHIgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkLCBpemxlbmVuIGnDp2VyaWsgacOnaW4ga3VsbGFuxLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9ncmVwLmM6MTE0MQorbXNnaWQgImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbiIKK21zZ3N0ciAiaGVtIC0tY2FjaGVkIGhlbSBhxJ9hw6dsYXIgdmVyaWxtacWfIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODUKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0w7xyPl0gWy13XSBbLS1wYXRoPTxkb3N5YT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZG9zeWE+Li4uIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODYKK21zZ2lkICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCittc2dzdHIgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAib2JqZWN0IHR5cGUiCittc2dzdHIgIm5lc25lIHTDvHLDvCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk5Cittc2dpZCAid3JpdGUgdGhlIG9iamVjdCBpbnRvIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIm5lc25leWkgbmVzbmUgdmVyaXRhYmFuxLFuYSB5YXoiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDEKK21zZ2lkICJyZWFkIHRoZSBvYmplY3QgZnJvbSBzdGRpbiIKK21zZ3N0ciAibmVzbmV5aSBzdGRpbidkZW4gb2t1IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAzCittc2dpZCAic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiCittc2dzdHIgImRvc3lhecSxIHPDvHpnZcOnbGVyIG9sbWFkYW4gb2xkdcSfdSBnaWJpIGRlcG9sYSIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNAorbXNnaWQgIiIKKyJqdXN0IGhhc2ggYW55IHJhbmRvbSBnYXJiYWdlIHRvIGNyZWF0ZSBjb3JydXB0IG9iamVjdHMgZm9yIGRlYnVnZ2luZyBHaXQiCittc2dzdHIgIiIKKyJHaXQgaGF0YSBhecSxa2xhbWFzxLFuZGEga3VsbGFubWFrIGnDp2luIMOnZXIgw6fDtnAgdG9wbGF5YXJhayBoYXNhcmzEsSBuZXNuZWxlciAiCisib2x1xZ90dXIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAiZG9zeWF5xLEgc2Fua2kgYnUgeW9sZGFubcSxxZ8gZ2liaSBpxZ9sZSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDYKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICJ0w7xtIGt1bGxhbsSxbGFiaWxpciBrb211dGxhciB5YXpkxLFyIgorCisjOiBidWlsdGluL2hlbHAuYzo0NworbXNnaWQgImV4Y2x1ZGUgZ3VpZGVzIgorbXNnc3RyICJrxLFsYXZ1emxhcsSxIGhhcmnDpyB0dXQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ4Cittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICJrdWxsYW7EscWfbMSxIGvEsWxhdnV6bGFyxLFuIGxpc3Rlc2luaSDDp8Sxa2FyIgorCisjOiBidWlsdGluL2hlbHAuYzo0OQorbXNnaWQgInByaW50IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIgorbXNnc3RyICJ0w7xtIHlhcMSxbGFuZMSxcm1hIGRlxJ9pxZ9rZW5sZXJpIGFkbGFyxLFuxLEgeWF6ZMSxciIKKworIzogYnVpbHRpbi9oZWxwLmM6NTEKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICJtYW4gc2F5ZmFzxLFuxLEgZ8O2c3RlciIKKworIzogYnVpbHRpbi9oZWxwLmM6NTIKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAia8SxbGF2dXp1IHdlYiB0YXJhecSxY8Sxc8SxbmRhIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU0Cittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgImJpbGdpIHNheWZhc8SxbsSxIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU2Cittc2dpZCAicHJpbnQgY29tbWFuZCBkZXNjcmlwdGlvbiIKK21zZ3N0ciAia29tdXQgYcOnxLFrbGFtYXPEsW7EsSB5YXpkxLFyIgorCisjOiBidWlsdGluL2hlbHAuYzo2MQorbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iCittc2dzdHIgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxrb211dD5dIgorCisjOiBidWlsdGluL2hlbHAuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVscCBmb3JtYXQgJyVzJyIKK21zZ3N0ciAidGFuxLFtbGFuYW1heWFuIHlhcmTEsW0gYmnDp2ltaSAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDQKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICJlbWFjc2NsaWVudCBiYcWfbGF0xLFsYW1hZMSxLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTE3Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICJlbWFjc2NsaWVudCBzw7xyw7xtw7wgYXlyxLHFn3TEsXLEsWxhbWFkxLEuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAiZW1hY3NjbGllbnQgc8O8csO8bcO8ICclZCcgcGVrIGVza2kgKDwyMikuIgorCisjOiBidWlsdGluL2hlbHAuYzoxNDMgYnVpbHRpbi9oZWxwLmM6MTY1IGJ1aWx0aW4vaGVscC5jOjE3NSBidWlsdGluL2hlbHAuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWMgJyVzJyIKK21zZ3N0ciAiJyVzJyDDp2FsxLHFn3TEsXLEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyc6IGRlc3Rla2xlbm1leWVuIG1hbiBnw7Zyw7xudMO8bGV5aWNpc2kgeW9sdS5cbiIKKyJCdW51biB5ZXJpbmUgJ21hbi48YXJhw6c+LmNtZCcga3VsbGFubWF5xLEgZMO8xZ/DvG7DvG4uIgorCisjOiBidWlsdGluL2hlbHAuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LnBhdGgnIGluc3RlYWQuIgorbXNnc3RyICIiCisiJyVzJzogZGVzdGVrbGVubWV5ZW4gbWFuIGfDtnLDvG50w7xsZXlpY2lzaSBrb211dHUuXG4iCisiQnVudW4geWVyaW5lICdtYW4uPGFyYcOnPi5wYXRoJyBrdWxsYW5tYXnEsSBkw7zFn8O8bsO8bi4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICInJXMnOiBCaWxpbm1leWVuIG1hbiBnw7Zyw7xudMO8bGV5aWNpc2kuIgorCisjOiBidWlsdGluL2hlbHAuYzozNjcKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImlzdGXEn2UgaGnDp2JpciBtYW4gZ8O2csO8bnTDvGxleWljaXNpIGVsZSBhbG1hZMSxIgorCisjOiBidWlsdGluL2hlbHAuYzozNzUKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJpc3RlxJ9lIGhpw6diaXIgYmlsZ2kgZ8O2csO8bnTDvGxleWljaXNpIGVsZSBhbG1hZMSxIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzQgYnVpbHRpbi9oZWxwLmM6NDQ1IGdpdC5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFsaWFzZWQgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJywgJyVzJyBvbGFyYWsgYXJtYWxhbm3EscWfIgorCisjOiBidWlsdGluL2hlbHAuYzo0NDggZ2l0LmM6MzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhbGlhcy4lcyBzdHJpbmc6ICVzIgorbXNnc3RyICJoYXRhbMSxIGFsaWFzLiVzIGRpemlzaTogJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3NyBidWlsdGluL2hlbHAuYzo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgImt1bGxhbsSxbTogJXMlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkxCittc2dpZCAiJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgaW5mb3JtYXRpb24iCittc2dzdHIgImVrIGJpbGdpIGnDp2luOiAnZ2l0IGhlbHAgY29uZmlnJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCB0eXBlIG1pc21hdGNoIGF0ICVzIgorbXNnc3RyICIlcyBrb251bXVuZGEgbmVzbmUgdMO8csO8IHV5dcWfbWF6bMSxxJ/EsSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgImJla2xlbmVuIG5lc25lICVzIGFsxLFubWFkxLEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXM6IGV4cGVjdGVkIHR5cGUgJXMsIGZvdW5kICVzIgorbXNnc3RyICJuZXNuZSAlczogYmVrbGVuZW4gdMO8ciAlcywgYnVsdW5hbiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICIlZCBiYXl0IGRvbGR1cnVsYW3EsXlvciIKK21zZ3N0clsxXSAiJWQgYmF5dCBkb2xkdXJ1bGFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2OAorbXNnaWQgImVhcmx5IEVPRiIKK21zZ3N0ciAiZXJrZW4gZG9zeWEgc29udSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY5Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAiZ2lyZGlkZSBva3VtYSBoYXRhc8SxIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODEKK21zZ2lkICJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIKK21zZ3N0ciAia3VsbGFuxLFsYWJpbGlyIG9sYW5kYW4gZGFoYSDDp29rIGJheXQga3VsbGFuxLFsZMSxIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo2MDYKK21zZ2lkICJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IgorbXNnc3RyICJwYWtldCBvZmZfdCduaW4gZ2XDp2VybGkgdGFuxLFtxLEgacOnaW4gw6dvayBiw7x5w7xrIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTEgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjk1Cittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICJwYWtldCBpemluIHZlcmlsZW4gZW4gYsO8ecO8ayBib3l1dHUgYcWfxLF5b3IiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICInJXMnIHBha2V0IGRvc3lhc8SxIGHDp8SxbGFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyNgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICJwYWtldCBpbXphc8SxIHV5dcWfbWF6bMSxxJ/EsSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgInBha2V0IHPDvHLDvG3DvCAlPFBSSXUzMj4gZGVzdGVrbGVubWl5b3IiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKK21zZ3N0ciAicGFrZXRpbiAlPFBSSXVNQVg+IG9mc2V0aW5kZSBoYXRhbMSxIG5lc25lIHZhcjogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICLFn2nFn2lybWUgcHJvZ3JhbcSxICVkIGTDtm5kw7xyZMO8IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MTUKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICJkZWx0YSB0YWJhbsSxIG5lc25lc2kgacOnaW4gb2ZzZXQgZGXEn2VyaSB0YcWfxLFtxLEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUyMworbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IGlzIG91dCBvZiBib3VuZCIKK21zZ3N0ciAiZGVsdGEgdGFiYW7EsSBvZnNldGkgc8SxbsSxcmxhciBkxLHFn8SxbmRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAiYmlsaW5tZXllbiBuZXNuZSB0w7xyw7wgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2MgorbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgInBha2V0IGRvc3lhc8SxICdwcmVhZCcgeWFwxLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAiemFtYW5zxLF6IHBha2V0IGRvc3lhc8SxIHNvbnUsICU8UFJJdU1BWD4gYmF5dCBla3NpayIKK21zZ3N0clsxXSAiemFtYW5zxLF6IHBha2V0IGRvc3lhc8SxIHNvbnUsICU8UFJJdU1BWD4gYmF5dCBla3NpayIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTkwCittc2dpZCAic2VyaW91cyBpbmZsYXRlIGluY29uc2lzdGVuY3kiCittc2dzdHIgImNpZGRpIMWfacWfaXJtZSBwcm9ncmFtxLEgdHV0YXJzxLF6bMSxxJ/EsSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0MSBidWlsdGluL2luZGV4LXBhY2suYzo3NjUKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwNCBidWlsdGluL2luZGV4LXBhY2suYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICIlcyDEsExFIFNIQTEgw4dBUlBJxZ5NQVNJIEJVTFVORFUhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNTgKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjE4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICIlcyBva3VuYW3EsXlvciIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCBpbmZvICVzIgorbXNnc3RyICJtZXZjdXQgJXMgbmVzbmUgYmlsZ2lzaSBva3VuYW3EsXlvciIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAibWV2Y3V0ICVzIG5lc25lc2kgb2t1bmFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICJnZcOnZXJzaXogJXMgaWtpbGkgbmVzbmVzaSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NgorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFja2VkIG9iamVjdCIKK21zZ3N0ciAicGFrZXRsZW5tacWfIG5lc25lIGnDp2luZGUgZnNjayBoYXRhc8SxIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgIiVzIMO2Z2VzaW5pbiB0w7xtIGFsdCDDtmdlbGVyaSB1bGHFn8SxbGFiaWxpciBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjkyMCBidWlsdGluL2luZGV4LXBhY2suYzo5NTEKK21zZ2lkICJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiCittc2dzdHIgImRlbHRhIHV5Z3VsYW5hbWFkxLEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjEKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAiTmVzbmVsZXIgYWzEsW7EsXlvciIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEyMQorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIk5lc25lbGVyIGluZGVrc2xlbml5b3IiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTUKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgInBha2V0IGhhc2FyIGfDtnJtw7zFnyAoU0hBMSB1eXVtc3V6bHXEn3UpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTYwCittc2dpZCAiY2Fubm90IGZzdGF0IHBhY2tmaWxlIgorbXNnc3RyICJwYWtldCBkb3N5YXPEsSBmc3RhdCB5YXDEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTYzCittc2dpZCAicGFjayBoYXMganVuayBhdCB0aGUgZW5kIgorbXNnc3RyICJwYWtldCBzb251bmRhIGTDtmvDvG50w7xsZXIgdmFyIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTc1Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSBpbiBwYXJzZV9wYWNrX29iamVjdHMoKSIKK21zZ3N0ciAicGFyc2VfcGFja19vYmplY3RzKCkgacOnaW5kZWtpIGthcm1hxZ9hIGFrxLFsIGFsbWF6IGTDvHpleWRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTk4Cittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAiRGVsdGFsYXIgw6fDtnrDvGzDvHlvciIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTIwOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJpxZ8gcGFyw6dhY8SxxJ/EsSBvbHXFn3R1cnVsYW1hZMSxOiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI0OQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiCittc2dzdHIgImthcm1hxZ9hIGFrxLFsIGFsbWF6IGTDvHpleWRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0clswXSAiJWQgeWVyZWwgbmVzbmV5bGUgdGFtYW1sYW5kxLEiCittc2dzdHJbMV0gIiVkIHllcmVsIG5lc25leWxlIHRhbWFtbGFuZMSxIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICIlcyBpw6dpbiBiZWtsZW5tZWRpayBrdXlydWsgc2HEn2xhbWFzxLEgKGRpc2sgaGFzYXLEsT8pIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGEiCittc2dpZF9wbHVyYWwgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIgorbXNnc3RyWzBdICJwYWtldGluICVkIMOnw7Z6w7xsbWVtacWfIGRlbHRhc8SxIHZhciIKK21zZ3N0clsxXSAicGFrZXRpbiAlZCDDp8O2esO8bG1lbWnFnyBkZWx0YXPEsSB2YXIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgImlsacWfdGlyaWxlbiBuZXNuZSBzw7ZuZMO8csO8bGVtZWRpICglZCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgInllcmVsIG5lc25lICVzIGhhc2FybMSxIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDA2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIgorbXNnc3RyICJwYWtldCBkb3N5YXPEsSBhZMSxICclcycsICcucGFjaycgaWxlIGJpdG1peW9yIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAlcyBmaWxlICclcyciCittc2dzdHIgIiVzIGRvc3lhc8SxICclcycgeWF6xLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiAlcyBmaWxlICclcyciCittc2dzdHIgInlhesSxbG3EscWfICVzIGRvc3lhc8SxICclcycga2FwYXTEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDYzCittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgInBha2V0IGRvc3lhc8SxIGthcGF0xLFsxLFya2VuIGhhdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzcKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICJwYWtldCBkb3N5YXPEsSBkZXBvbGFuYW3EsXlvciIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ4NQorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICJpbmRla3MgZG9zeWFzxLEgZGVwb2xhbmFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MjkgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODYyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCittc2dzdHIgImhhdGFsxLEgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICJNZXZjdXQgcGFrZXQgZG9zeWFzxLEgJyVzJyBhw6fEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIiclcycgacOnaW4gbWV2Y3V0IHBha2V0IGlkeCBkb3N5YXPEsSBhw6fEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gImRlbHRhIGRlxJ9pbDogJWQgbmVzbmUiCittc2dzdHJbMV0gImRlbHRhIGRlxJ9pbDogJWQgbmVzbmUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAiemluY2lyIHV6dW5sdcSfdSA9ICVkOiAlbHUgbmVzbmUiCittc2dzdHJbMV0gInppbmNpciB1enVubHXEn3UgPSAlZDogJWx1IG5lc25lIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjkzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIsWedSBhbmtpIMOnYWzEscWfbWEgZGl6aW5pbmUgZ2VyaSBnZWxpbmVtaXlvciIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc0MiBidWlsdGluL2luZGV4LXBhY2suYzoxNzQ1CisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzYxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICJoYXRhbMSxICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzgxCittc2dpZCAiLS1maXgtdGhpbiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IC0tc3RkaW4iCittc2dzdHIgIi0tZml4LXRoaW4sIC0tc3RkaW4gb2xtYWRhbiBrdWxsYW7EsWxhbWF6IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzgzCittc2dpZCAiLS1zdGRpbiByZXF1aXJlcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLXN0ZGluIGJpciBnaXQgZGl6aW5pIGdlcmVrdGlyaXIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3ODkKK21zZ2lkICItLXZlcmlmeSB3aXRoIG5vIHBhY2tmaWxlIG5hbWUgZ2l2ZW4iCittc2dzdHIgIi0tdmVyaWZ5IGlsZSBiaXIgcGFrZXQgZG9zeWFzxLEgYWTEsSB2ZXJpbG1lZGkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4MzcgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjU4MgorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFjayBvYmplY3RzIgorbXNnc3RyICJwYWtldCBuZXNuZWxlcmluZGUgZnNjayBoYXRhc8SxIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICInJXMnIMWfYWJsb251bnVuIGJpbGdpbGVyaSBhbMSxbmFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgIiclcycgb3BlbmRpciB5YXDEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAiJyVzJyByZWFkbGluayB5YXDEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgIiclcycsICclcycgw7ZnZXNpbmUgc2VtYm9saWsgYmHEn2xhIGJhxJ9sYW5hbcSxeW9yIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIiclcycgxZ91cmF5YSBrb3B5YWxhbmFtxLF5b3I6ICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICIlcyDFn2FibG9udSB5b2sgc2F5xLFsxLF5b3IiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kIGluICVzIgorbXNnc3RyICLFn2FibG9ubGFyICVzIGnDp2luZGUgYnVsdW5hbWFkxLEiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgZnJvbSAnJXMnOiAlcyIKK21zZ3N0ciAixZ9hYmxvbmxhciAnJXMnIGtvbnVtdW5kYW4ga29weWFsYW5txLF5b3I6ICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgIiVkIGRvc3lhIHTDvHLDvCBpxZ9sZW5lbWl5b3IiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAiJXMgxZ91cmF5YSB0YcWfxLFuYW3EsXlvcjogJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NCBidWlsdGluL2luaXQtZGIuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiVzIGhhbGloYXrEsXJkYSB2YXIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIiVzJXMgacOnaW5kZWtpIG1ldmN1dCBwYXlsYcWfxLFsYW4gR2l0IGRlcG9zdSB5ZW5pZGVuIGlsa2xlbmRpcmlsZGlcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIlcyVzIGnDp2luZGVraSBtZXZjdXQgR2l0IGRlcG9zdSB5ZW5pZGVuIGlsa2xlbmRpcmlsZGlcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIiVzJXMgacOnaW5kZSBwYXlsYcWfxLFsYW4gYm/FnyBHaXQgZGVwb3N1IGlsa2xlbmRpcmlsZGlcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiJXMlcyBpw6dpbmRlIGJvxZ8gR2l0IGRlcG9zdSBpbGtsZW5kaXJpbGRpXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ2OAorbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08xZ9hYmxvbi1kaXppbmk+XSBbLS0iCisic2hhcmVkWz08aXppbmxlcj5dXSBbPGRpemluPl0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MQorbXNnaWQgInBlcm1pc3Npb25zIgorbXNnc3RyICJpemlubGVyIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTIKK21zZ2lkICJzcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMiCittc2dzdHIgImdpdCBkZXBvc3VudW4ga3VsbGFuxLFjxLFsYXIgYXJhc8SxbmRhIHBheWxhxZ/EsXAgcGF5bGHFn8SxbG1heWFjYcSfxLFuxLEgYmVsaXJ0IgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MjkgYnVpbHRpbi9pbml0LWRiLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAiJXMgbWtkaXIgeWFwxLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAiJXMgw7ZnZXNpbmUgY2hkaXIgeWFwxLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgc3BlY2lmeWluZyAlcyAob3IgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIiIKKyIlcyAodmV5YSAtLXdvcmstdHJlZT08ZGl6aW4+KSwgJXMgKHZleWEgLS1naXQtZGlyPTxkaXppbj4pIGJlbGlybGVubWVkZW4gIgorIml6aW4gdmVyaWxtaXlvciIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgIiclcycgw6dhbMSxxZ9tYSBhxJ9hY8SxbmEgZXJpxZ9pbGVtaXlvciIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNgorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHRva2VuPlsoPXw6KTx2YWx1ZT5dKS4uLl0gWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHRva2VuPlsoPXw6KTxkZcSfZXI+XSkuLi5dIFs8ZG9zeWE+Li4uXSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NQorbXNnaWQgImVkaXQgZmlsZXMgaW4gcGxhY2UiCittc2dzdHIgImRvc3lhbGFyxLEgeWVyaW5kZSBkw7x6ZW5sZSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NgorbXNnaWQgInRyaW0gZW1wdHkgdHJhaWxlcnMiCittc2dzdHIgImJvxZ8gYXJ0YmlsZ2lsZXJpIGvEsXJwIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk5Cittc2dpZCAid2hlcmUgdG8gcGxhY2UgdGhlIG5ldyB0cmFpbGVyIgorbXNnc3RyICJ5ZW5pIGFydGJpbGdpbGVyIG5lcmV5ZSB5ZXJsZcWfdGlyaWxlY2VrIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMQorbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJhcnRiaWxnaSBoYWxpaGF6xLFyZGEgdmFyc2EgeWFwxLFsYWNhayBleWxlbSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDMKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBpcyBtaXNzaW5nIgorbXNnc3RyICJhcnRiaWxnaSBla3Npa3NlIHlhcMSxbGFjYWsgZXlsZW0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA1Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIHRyYWlsZXJzIgorbXNnc3RyICJ5YWxuxLF6Y2EgYXJ0YmlsZ2lsZXJpIMOnxLFrdMSxIHZlciIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDYKK21zZ2lkICJkbyBub3QgYXBwbHkgY29uZmlnIHJ1bGVzIgorbXNnc3RyICJ5YXDEsWxhbmTEsXJtYSBrdXJhbGxhcsSxbsSxIHV5Z3VsYW1hIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNworbXNnaWQgImpvaW4gd2hpdGVzcGFjZS1jb250aW51ZWQgdmFsdWVzIgorbXNnc3RyICJib8WfbHVrIGlsZSBzw7xyZMO8csO8bGVuIGRlxJ9lcmxlcmkgdcOnIHVjYSBla2xlIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwOAorbXNnaWQgInNldCBwYXJzaW5nIG9wdGlvbnMiCittc2dzdHIgImF5csSxxZ90xLFybWEgc2XDp2VuZWtsZXJpbmkgYXlhcmxhIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMAorbXNnaWQgImRvIG5vdCB0cmVhdCAtLS0gc3BlY2lhbGx5IgorbXNnc3RyICLFn3VuYSDDtnplbCBkYXZyYW5tYTogLS0tIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMQorbXNnaWQgInRyYWlsZXIiCittc2dzdHIgImFydGJpbGdpIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMgorbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICJla2xlbmVjZWsgYXJ0YmlsZ2kobGVyKSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMjMKK21zZ2lkICItLXRyYWlsZXIgd2l0aCAtLW9ubHktaW5wdXQgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS10cmFpbGVyIGlsZSAtLW9ubHktaW5wdXQgYmlyIGFubGFtIGlmYWRlIGV0bWl5b3IiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTMzCittc2dpZCAibm8gaW5wdXQgZmlsZSBnaXZlbiBmb3IgaW4tcGxhY2UgZWRpdGluZyIKK21zZ3N0ciAieWVyaW5kZSBkw7x6ZW5sZW1lIGnDp2luIGdpcmRpIGRvc3lhc8SxIHZlcmlsbWVkaSIKKworIzogYnVpbHRpbi9sb2cuYzo1NgorbXNnaWQgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBsb2cgWzxzZcOnZW5la2xlcj5dIFs8cmV2aXp5b24tZXJpbWk+XSBbWy0tXSA8eW9sPi4uLl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTcKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzxzZcOnZW5la2xlcj5dIDxuZXNuZT4uLi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICJnZcOnZXJzaXogLS1kZWNvcmF0ZSBzZcOnZW5lxJ9pOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzQKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAia2F5bmHEn8SxIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc1Cittc2dpZCAiVXNlIG1haWwgbWFwIGZpbGUiCittc2dzdHIgInBvc3RhIGXFn2xlbSBkb3N5YXPEsW7EsSBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc3Cittc2dpZCAib25seSBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJ5YWxuxLF6Y2EgPGRpemdpPiBpbGUgZcWfbGXFn2VuIGJhxZ92dXJ1bGFyxLEgc8O8c2xlIgorCisjOiBidWlsdGluL2xvZy5jOjE3OQorbXNnaWQgImRvIG5vdCBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICI8ZGl6Z2k+IGlsZSBlxZ9sZcWfZW4gYmHFn3Z1cnVsYXLEsSBzw7xzbGVtZSIKKworIzogYnVpbHRpbi9sb2cuYzoxODAKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICJzw7xzbGVtZSBzZcOnZW5la2xlcmkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgzCittc2dpZCAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgImRvc3lhIGnDp2luZGVraSBuLG0gc2F0xLFyIGFyYWzEscSfxLFuxLEgMSdkZW4gc2F5YXJhayBpxZ9sZSIKKworIzogYnVpbHRpbi9sb2cuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICJTb24gw6fEsWt0xLE6ICVkICVzXG4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBzaG93ICVzOiBiYWQgZmlsZSIKK21zZ3N0ciAiZ2l0IHNob3cgJXM6IGhhdGFsxLEgZG9zeWEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTUwIGJ1aWx0aW4vbG9nLmM6NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiJXMgbmVzbmVzaSBva3VuYW1hZMSxIgorCisjOiBidWlsdGluL2xvZy5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHR5cGU6ICVkIgorbXNnc3RyICJiaWxpbm1leWVuIHTDvHI6ICVkIgorCisjOiBidWlsdGluL2xvZy5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBjb3ZlciBmcm9tIGRlc2NyaXB0aW9uIG1vZGUiCittc2dzdHIgIiVzOiBhw6fEsWtsYW1hIGtpcGluZGVuIGdlw6dlcnNpeiBrYXBhayBzYXlmYXPEsSIKKworIzogYnVpbHRpbi9sb2cuYzo4MjEKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyBkZcSfZXJlIGl5ZSBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTM2Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICLDp8Sxa3TEsSBkaXppbmluaW4gYWTEsSBwZWsgdXp1biIKKworIzogYnVpbHRpbi9sb2cuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAiJXMgeWFtYSBkb3N5YXPEsSBva3VuYW3EsXlvciIKKworIzogYnVpbHRpbi9sb2cuYzo5NjkKK21zZ2lkICJuZWVkIGV4YWN0bHkgb25lIHJhbmdlIgorbXNnc3RyICJiaXIgdGFtIGVyaW0gZ2VyZWtpeW9yIgorCisjOiBidWlsdGluL2xvZy5jOjk3OQorbXNnaWQgIm5vdCBhIHJhbmdlIgorbXNnc3RyICJiaXIgZXJpbSBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0MworbXNnaWQgImNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgIm5peWV0IG1la3R1YnUgacOnaW4gZS1wb3N0YSBiacOnaW1pIGdlcmVrbGkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0OQorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgY292ZXItbGV0dGVyIGZpbGUiCittc2dzdHIgImNvdmVyLWxldHRlciBkb3N5YXPEsSBvbHXFn3R1cnVsYW1hZMSxIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAiYWvEsWwgYWxtYXogaW4tcmVwbHktdG86ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTUKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggWzxzZcOnZW5la2xlcj5dIFs8LWJlcmk+IHwgPHJldml6eW9uLWVyaW1pPl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMxMworbXNnaWQgInR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICJpa2kgw6fEsWt0xLEgZGl6aW5pPyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDI0IGJ1aWx0aW4vbG9nLmM6MjE5NyBidWlsdGluL2xvZy5jOjIxOTkgYnVpbHRpbi9sb2cuYzoyMjExCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWl0ICVzIgorbXNnc3RyICJiaWxpbm1leWVuIGfDtm5kZXJpICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE0MzQgYnVpbHRpbi9yZXBsYWNlLmM6NTggYnVpbHRpbi9yZXBsYWNlLmM6MjA3CisjOiBidWlsdGluL3JlcGxhY2UuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZiIKK21zZ3N0ciAiJyVzJyBnZcOnZXJsaSBiaXIgYmHFn3Z1cnUgb2xhcmFrIMOnw7Z6w7xsZW1lZGkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzOQorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgImtlc2luIGJpcmxlxZ90aXJtZSB0ZW1lbGkgYnVsdW5hbWFkxLEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ0MworbXNnaWQgIiIKKyJmYWlsZWQgdG8gZ2V0IHVwc3RyZWFtLCBpZiB5b3Ugd2FudCB0byByZWNvcmQgYmFzZSBjb21taXQgYXV0b21hdGljYWxseSxcbiIKKyJwbGVhc2UgdXNlIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gdG8gdHJhY2sgYSByZW1vdGUgYnJhbmNoLlxuIgorIk9yIHlvdSBjb3VsZCBzcGVjaWZ5IGJhc2UgY29tbWl0IGJ5IC0tYmFzZT08YmFzZS1jb21taXQtaWQ+IG1hbnVhbGx5IgorbXNnc3RyICIiCisiw5xzdGtheW5hayBhbMSxbmFtYWTEsTsgdGFiYW4gZ8O2bmRlcmlzaW5pbiBrYXlkxLFuxLEga2VuZGlsacSfaW5kZW4geWF6bWFrXG4iCisiaXN0aXlvcnNhbsSxeiBsw7x0ZmVuIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8ga3VsbGFuYXJhayBiaXIgdXphayBkYWzEsVxuIgorIml6bGV5aW4uIEJ1bnVuIGTEscWfxLFuZGEgdGFiYW4gZ8O2bmRlcmlzaW5pIGtlbmRpbml6IC0tYmFzZT08dGFiYW4tZ8O2bmRlcmlzaS0iCisibm8+XG4iCisia3VsbGFuYXJhayBlbCBpbGUgYmVsaXJ0ZWJpbGlyc2luaXouIgorCisjOiBidWlsdGluL2xvZy5jOjE0NjMKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICJrZXNpbiBiaXJsZcWfdGlybWUgdGVtZWxpIGJ1bHVuYW1hZMSxIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzQKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGQgYmUgdGhlIGFuY2VzdG9yIG9mIHJldmlzaW9uIGxpc3QiCittc2dzdHIgInRhYmFuIGfDtm5kZXJpc2kgcmV2aXp5b24gbGlzdGVzaW5pbiBhdGFzxLEgb2xtYWzEsSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc4Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkbid0IGJlIGluIHJldmlzaW9uIGxpc3QiCittc2dzdHIgInRhYmFuIGfDtm5kZXJpc2kgcmV2aXp5b24gbGlzdGVzaW5kZSBvbG1hbWFsxLEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzMQorbXNnaWQgImNhbm5vdCBnZXQgcGF0Y2ggaWQiCittc2dzdHIgInlhbWEgbnVtYXJhc8SxIGFsxLFuYW3EsXlvciIKKworIzogYnVpbHRpbi9sb2cuYzoxNTgzCittc2dpZCAiZmFpbGVkIHRvIGluZmVyIHJhbmdlLWRpZmYgcmFuZ2VzIgorbXNnc3RyICJyYW5nZS1kaWZmIGVyaW1sZXJpbmRlbiBiaXIgYW5sYW0gw6fEsWthcsSxbGFtYWTEsSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjI5Cittc2dpZCAidXNlIFtQQVRDSCBuL21dIGV2ZW4gd2l0aCBhIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiYmlyIHlhbWF5bGEgYmlsZSBvbHNhIFtQQVRDSCBuL21dIGt1bGxhbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjMyCittc2dpZCAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiCittc2dzdHIgImJpcmRlbiDDp29rIHlhbWEgYmlsZSBvbHNhIFtQQVRDSF0ga3VsbGFuIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzYKK21zZ2lkICJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIKK21zZ3N0ciAieWFtYWxhcsSxIHN0YW5kYXJ0IMOnxLFrdMSxeWEgeWF6ZMSxciIKKworIzogYnVpbHRpbi9sb2cuYzoxNjM4Cittc2dpZCAiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiCittc2dzdHIgImJpciBuaXlldCBtZWt0dWJ1IG9sdcWfdHVyIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDAKK21zZ2lkICJ1c2Ugc2ltcGxlIG51bWJlciBzZXF1ZW5jZSBmb3Igb3V0cHV0IGZpbGUgbmFtZXMiCittc2dzdHIgIsOnxLFrdMSxIGRvc3lhIGFkbGFyxLEgacOnaW4geWFsxLFuIHNhecSxIGRpemlzaSBvbHXFn3R1ciIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQxCittc2dpZCAic2Z4IgorbXNnc3RyICJzb25layIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQyCittc2dpZCAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciCittc2dzdHIgIicucGF0Y2gnIHllcmluZSA8c29uZWs+IGt1bGxhbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ0Cittc2dpZCAic3RhcnQgbnVtYmVyaW5nIHBhdGNoZXMgYXQgPG4+IGluc3RlYWQgb2YgMSIKK21zZ3N0ciAieWFtYWxhcsSxIDEgeWVyaW5lIDxuPidkZSBudW1hcmFsYW5kxLFybWF5YSBiYcWfbGEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NgorbXNnaWQgIm1hcmsgdGhlIHNlcmllcyBhcyBOdGggcmUtcm9sbCIKK21zZ3N0ciAiZGl6aXlpIG4uIGRlbmVtZSBvbGFyYWsgaW1sZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ4Cittc2dpZCAiVXNlIFtSRkMgUEFUQ0hdIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiW1BBVENIXSB5ZXJpbmUgW1JGQyBQQVRDSF0ga3VsbGFuIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTEKK21zZ2lkICJjb3Zlci1mcm9tLWRlc2NyaXB0aW9uLW1vZGUiCittc2dzdHIgImHDp8Sxa2xhbWEga2lwaW5kZW4ga2FwYWsgc2F5ZmFzxLEga2lwaSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUyCittc2dpZCAiZ2VuZXJhdGUgcGFydHMgb2YgYSBjb3ZlciBsZXR0ZXIgYmFzZWQgb24gYSBicmFuY2gncyBkZXNjcmlwdGlvbiIKK21zZ3N0ciAibml5ZXQgbWVrdHVidW51biBiYXrEsSBrxLFzxLFtbGFyxLFuxLEgZGFsxLFuIGHDp8Sxa2xhbWFzxLFuZGFuIG9sdcWfdHVyIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTQKK21zZ2lkICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIltQQVRDSF0geWVyaW5lIFs8w7ZuZWs+XSBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIKK21zZ3N0ciAib3J0YXlhIMOnxLFrYW4gZG9zeWFsYXLEsSA8ZGl6aW4+J2RlIGRlcG9sYSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYwCittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgIltQQVRDSF0naSBzb3ltYS9la2xlbWUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MworbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgImlraWxpIGRpZmYnbGVyaSDDp8Sxa3TEsSB2ZXJtZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY1Cittc2dpZCAib3V0cHV0IGFsbC16ZXJvIGhhc2ggaW4gRnJvbSBoZWFkZXIiCittc2dzdHIgIkZyb20gYmHFn2zEscSfxLFuZGEgdMO8bcO8IHPEsWbEsXJkYW4gb2x1xZ9hbiBzYcSfbGFtYSDDp8Sxa3TEsXPEsSB2ZXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NworbXNnaWQgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIKK21zZ3N0ciAiw7xzdGtheW5ha3Rha2kgYmlyIGfDtm5kZXJpIGlsZSBlxZ9sZcWfZW4gYmlyIHlhbWF5xLEgacOnZXJtZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY5Cittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICLDtm50YW7EsW1sxLEgeWVyaW5lIHlhbWEgYmnDp2ltaW5pIGfDtnN0ZXIgKHBhdGNoICsgc3RhdCkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MQorbXNnaWQgIk1lc3NhZ2luZyIKK21zZ3N0ciAixLBsZXRpbGXFn21lIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzIKK21zZ2lkICJoZWFkZXIiCittc2dzdHIgImJhxZ9sxLFrIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzMKK21zZ2lkICJhZGQgZW1haWwgaGVhZGVyIgorbXNnc3RyICJlLXBvc3RhIGJhxZ9sxLHEn8SxIGVrbGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NCBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJlbWFpbCIKK21zZ3N0ciAiZS1wb3N0YSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0Cittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgIlRvOiBiYcWfbMSxxJ/EsSBla2xlIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAiQ2M6IGJhxZ9sxLHEn8SxIGVrbGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3OAorbXNnaWQgImlkZW50IgorbXNnc3RyICJ0YW7EsW1sYXnEsWPEsSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc5Cittc2dpZCAic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIKK21zZ3N0ciAiIgorIkZyb20gYWRyZXNpbmkgPHRhbsSxbWxhecSxY8SxPiBvbGFyYWsgYXlhcmxhICh2ZXlhIHlva3NhIGfDtm5kZXJpY2kgIgorInRhbsSxbWxhecSxY8Sxc8SxKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgxCittc2dpZCAibWVzc2FnZS1pZCIKK21zZ3N0ciAiaWxldGkgbm8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MgorbXNnaWQgIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIKK21zZ3N0ciAiaWxrIHBvc3RhecSxIDxpbGV0aSBubz4neWEgYmlyIHlhbsSxdCB5YXAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MyBidWlsdGluL2xvZy5jOjE2ODYKK21zZ2lkICJib3VuZGFyeSIKK21zZ3N0ciAic8SxbsSxciIKKworIzogYnVpbHRpbi9sb2cuYzoxNjg0Cittc2dpZCAiYXR0YWNoIHRoZSBwYXRjaCIKK21zZ3N0ciAieWFtYXnEsSBla2xlIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODcKK21zZ2lkICJpbmxpbmUgdGhlIHBhdGNoIgorbXNnc3RyICJ5YW1hecSxIGlsZXRpeWUga295IgorCisjOiBidWlsdGluL2xvZy5jOjE2OTEKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAiaWxldGlsZXJpIGthdGFsb2dsYW1hecSxIGV0a2lubGXFn3Rpciwgc3RpbGxlcjogc2hhbGxvdywgZGVlcCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkzCittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICJpbXphIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTQKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUiCittc2dzdHIgImltemEgZWtsZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk1Cittc2dpZCAiYmFzZS1jb21taXQiCittc2dzdHIgInRhYmFuIGfDtm5kZXJpIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTYKK21zZ2lkICJhZGQgcHJlcmVxdWlzaXRlIHRyZWUgaW5mbyB0byB0aGUgcGF0Y2ggc2VyaWVzIgorbXNnc3RyICJ5YW1hIGRpemlzaW5lIMO2bmtvxZ91bGFuIGHEn2HDpyBiaWxnaXNpbmkgZWtsZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk4Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIgorbXNnc3RyICJkb3N5YWRhbiBiaXIgaW16YSBla2xlIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTkKK21zZ2lkICJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIgorbXNnc3RyICJ5YW1hIGRvc3lhIGFkbGFyxLFuxLEgeWF6ZMSxcm1hIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDEKK21zZ2lkICJzaG93IHByb2dyZXNzIHdoaWxlIGdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAieWFtYWxhciBvbHXFn3R1cnVsdXJrZW4gaWxlcmxlbWV5aSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDMKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmV2PiBpbiBjb3ZlciBsZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisiPHJldj4ga2FyxZ/EsXPEsW5kYWtpIGRlxJ9pxZ9pa2xpa2xlcmkgbml5ZXQgbWVrdHVidW5kYSB2ZXlhIHRlayBiaXIgeWFtYWRhIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwNgorbXNnaWQgInNob3cgY2hhbmdlcyBhZ2FpbnN0IDxyZWZzcGVjPiBpbiBjb3ZlciBsZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisiPGLFn3ZyLWJscnTDpz4ga2FyxZ/EsXPEsW5kYWtpIGRlxJ9pxZ9pa2xpa2xlcmkgbml5ZXQgbWVrdHVidW5kYSB2ZXlhIHRlayBiaXIgIgorInlhbWFkYSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDgKK21zZ2lkICJwZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIgorbXNnc3RyICJvbHXFn3VtdW4gdGFydMSxbGTEscSfxLEgecO8emRlIgorCisjOiBidWlsdGluL2xvZy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAiZ2XDp2Vyc2l6IHRhbsSxbWxhecSxY8SxIHNhdMSxcsSxOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxODA3Cittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1uIHZlIC1rIGJpcmxpa3RlIGt1bGxhbsSxbGFtYXoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwOQorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgdmUgLWsgYmlybGlrdGUga3VsbGFuxLFsYW1heiIKKworIzogYnVpbHRpbi9sb2cuYzoxODE3Cittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHkgYmlyIGFubGFtIGlmYWRlIGV0bWl5b3IiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxOQorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLXN0YXR1cyBiaXIgYW5sYW0gaWZhZGUgZXRtaXlvciIKKworIzogYnVpbHRpbi9sb2cuYzoxODIxCittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWNoZWNrIGJpciBhbmxhbSBpZmFkZSBldG1peW9yIgorCisjOiBidWlsdGluL2xvZy5jOjE4NTQKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAic3RhbmRhcnQgw6fEsWt0xLEgdmV5YSBkaXppbiwgaGFuZ2lzaT8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk1OAorbXNnaWQgIi0taW50ZXJkaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiLS1pbnRlcmRpZmYsIC0tY292ZXItbGV0dGVyIHZleWEgdGVrIHlhbWEgZ2VyZWt0aXJpeW9yIgorCisjOiBidWlsdGluL2xvZy5jOjE5NjIKK21zZ2lkICJJbnRlcmRpZmY6IgorbXNnc3RyICJJbnRlcmRpZmY6IgorCisjOiBidWlsdGluL2xvZy5jOjE5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJkaWZmIGFnYWluc3QgdiVkOiIKK21zZ3N0ciAiSW50ZXJkaWZmIHYlZCBrYXLFn8Sxc8SxbmRhOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTY5Cittc2dpZCAiLS1jcmVhdGlvbi1mYWN0b3IgcmVxdWlyZXMgLS1yYW5nZS1kaWZmIgorbXNnc3RyICItLWNyZWF0aW9uLWZhY3RvciwgLS1yYW5nZS1kaWZmIGdlcmVrdGlyaXlvciIKKworIzogYnVpbHRpbi9sb2cuYzoxOTczCittc2dpZCAiLS1yYW5nZS1kaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiLS1yYW5nZS1kaWZmLCAtLWNvdmVyLWxldHRlciB2ZXlhIHRlayB5YW1hIGdlcmVrdGlyaXlvciIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgxCittc2dpZCAiUmFuZ2UtZGlmZjoiCittc2dzdHIgIlJhbmdlLWRpZmY6IgorCisjOiBidWlsdGluL2xvZy5jOjE5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmFuZ2UtZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIlJhbmdlLWRpZmYgdiVkIGthcsWfxLFzxLFuZGE6IgorCisjOiBidWlsdGluL2xvZy5jOjE5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIKK21zZ3N0ciAiJyVzJyBpbXphIGRvc3lhc8SxIG9rdW5hbcSxeW9yIgorCisjOiBidWlsdGluL2xvZy5jOjIwMjkKK21zZ2lkICJHZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgIllhbWFsYXIgb2x1xZ90dXJ1bHV5b3IiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjA3MworbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGZpbGVzIgorbXNnc3RyICLDp8Sxa3TEsSBkb3N5YWxhcsSxIG9sdcWfdHVydWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjEzMgorbXNnaWQgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIgorbXNnc3RyICJnaXQgY2hlcnJ5IFstdl0gWzzDvHN0a2F5bmFrPiBbPGRhbC11Y3U+IFs8c8SxbsSxcj5dXV0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIsSwemxlbmVuIGJpciB1emFrIGRhbCBidWx1bmFtYWTEsSwgbMO8dGZlbiBlbCBpbGUgPMO8c3RrYXluYWs+IGJlbGlydGluLlxuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDcwCittc2dpZCAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgbHMtZmlsZXMgWzxzZcOnZW5la2xlcj5dIFs8ZG9zeWE+Li4uXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyNgorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgImRvc3lhIGR1cnVtdW51IGV0aWtldGxlcmxlIHRhbsSxbWxhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI4Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgIidkZcSfacWfdGlyaWxtZWRpxJ9pIGTDvMWfw7xuw7xsZW4nIGRvc3lhbGFyxLEga8O8w6fDvGsgaGFyZmxlcmxlIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzAKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdmc21vbml0b3IgY2xlYW4nIGZpbGVzIgorbXNnc3RyICInZnNtb25pdG9yIGNsZWFuJyBkb3N5YWxhcsSxbsSxIGvDvMOnw7xrIGhhcmZsZXJsZSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMyCittc2dpZCAic2hvdyBjYWNoZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZGVmYXVsdCkiCittc2dzdHIgIsO2bmJlbGxlxJ9lIGFsxLFuYW4gZG9zeWFsYXLEsSDDp8Sxa3TEsWRhIGfDtnN0ZXIgKMO2bnRhbsSxbWzEsSkiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzQKK21zZ2lkICJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAic2lsaW5lbiBkb3N5YWxhcsSxIMOnxLFrdMSxZGEgZ8O2c3RlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNgorbXNnaWQgInNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiZGXEn2nFn3RpcmlsZW4gZG9zeWFsYXLEsSDDp8Sxa3TEsWRhIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzgKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImRpxJ9lciBkb3N5YWxhcsSxIMOnxLFrdMSxZGEgZ8O2c3RlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MAorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJ5b2sgc2F5xLFsYW4gZG9zeWFsYXLEsSDDp8Sxa3TEsWRhIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDMKK21zZ2lkICJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiaGF6xLFybGFuYW4gacOnZXJpxJ9pbiBuZXNuZSBhZMSxbsSxIMOnxLFrdMSxZGEgZ8O2c3RlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NQorbXNnaWQgInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiCittc2dzdHIgImRvc3lhIHNpc3RlbWluZGVraSBrYWxkxLFyxLFsbWFzxLEgZ2VyZWtlbiBkb3N5YWxhcsSxIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDcKK21zZ2lkICJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWVzIG9ubHkiCittc2dzdHIgIidkacSfZXInIGRpemlubGVyaW4geWFsbsSxemNhIGFkxLFuxLEgZ8O2c3RlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0OQorbXNnaWQgInNob3cgbGluZSBlbmRpbmdzIG9mIGZpbGVzIgorbXNnc3RyICJkb3N5YWxhcsSxbiBzYXTEsXIgc29ubGFyxLFuxLEgZ8O2c3RlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1MQorbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgImJvxZ8gZGl6aW5sZXJpIGfDtnN0ZXJtZSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiYmlybGXFn3RpcmlsbWVtacWfIGRvc3lhbGFyxLEgw6fEsWt0xLFkYSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU2Cittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIidyZXNvbHZlLXVuZG8nIGJpbGdpc2luaSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU4Cittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICJkaXpnaSBpbGUgZcWfbGXFn2VuIGRvc3lhbGFyxLEgYXRsYSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2MQorbXNnaWQgImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iCittc2dzdHIgImhhcmnDpyB0dXRtYSBkaXpnaWxlcmkgPGRvc3lhPidkYW4gb2t1bnV5b3IiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjQKK21zZ2lkICJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIKK21zZ3N0ciAiZWsgZGl6aW4gYmHFn8SxIGhhcmnDpyB0dXRtYSBkaXpnaWxlcmluaSA8ZG9zeWE+J2RhbiBva3UiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjYKK21zZ2lkICJhZGQgdGhlIHN0YW5kYXJkIGdpdCBleGNsdXNpb25zIgorbXNnc3RyICJzdGFuZGFydCBnaXQgaGFyacOnIHR1dG1hbGFyxLFuxLEgZWtsZSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MAorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICLDp8Sxa3TEsXnEsSBlbiDDvHN0IHByb2plIGRpemluaW5lIGfDtnJlY2VsaSBvbGFyYWsgeWFwIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTczCittc2dpZCAicmVjdXJzZSB0aHJvdWdoIHN1Ym1vZHVsZXMiCittc2dzdHIgImFsdG1vZMO8bGxlciBpw6dpbmRlbiDDtnp5aW5lbGUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzUKK21zZ2lkICJpZiBhbnkgPGZpbGU+IGlzIG5vdCBpbiB0aGUgaW5kZXgsIHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IiCittc2dzdHIgImXEn2VyIGJpciA8ZG9zeWE+IGluZGVrc3RlIGRlxJ9pbHNlIGJ1bnUgYmlyIGhhdGEgb2xhcmFrIGfDtnIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzYKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAiYcSfYWPEsW1zxLEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzcKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICI8YcSfYWPEsW1zxLE+J2RhbiBidSB5YW5hIGthbGTEsXLEsWxhbiB5b2xsYXLEsW4gaMOibMOiIHZhciBvbGR1xJ91bnUgdmFyc2F5IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc5Cittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAiaGF0YSBhecSxa2xhbWEgdmVyaXNpbmkgZ8O2c3RlciIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo5Cittc2dpZCAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPHJlcG9zaXRvcnk+IFs8cmVmcz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPGRlcG8+IFs8YmHFn3Z1cnVsYXI+Li4uXV0iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAidXphayBrb251bSBVUkwnc2luaSB5YXpkxLFybWEiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAgYnVpbHRpbi9scy1yZW1vdGUuYzo2MiBidWlsdGluL3JlYmFzZS5jOjE1NjEKK21zZ2lkICJleGVjIgorbXNnc3RyICLDp2FsxLHFn3TEsXIiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjEgYnVpbHRpbi9scy1yZW1vdGUuYzo2MworbXNnaWQgInBhdGggb2YgZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUgaG9zdCIKK21zZ3N0ciAidXphayBrb251bSBtYWtpbmVzaW5kZWtpIGdpdC11cGxvYWQtcGFjayB5b2x1IgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY1Cittc2dpZCAibGltaXQgdG8gdGFncyIKK21zZ3N0ciAiZXRpa2V0bGVyZSBrxLFzxLF0bGEiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjYKK21zZ2lkICJsaW1pdCB0byBoZWFkcyIKK21zZ3N0ciAidcOnIGfDtm5kZXJpbGVyZSBrxLFzxLF0bGEiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjcKK21zZ2lkICJkbyBub3Qgc2hvdyBwZWVsZWQgdGFncyIKK21zZ3N0ciAic295dWxtdcWfIGV0aWtldGxlcmkgZ8O2c3Rlcm1lIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY5Cittc2dpZCAidGFrZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiBpbnRvIGFjY291bnQiCittc2dzdHIgInVybC48dGVtZWw+Lmluc3RlYWRPZid1IGRpa2thdGUgYWwiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzIKK21zZ2lkICJleGl0IHdpdGggZXhpdCBjb2RlIDIgaWYgbm8gbWF0Y2hpbmcgcmVmcyBhcmUgZm91bmQiCittc2dzdHIgImXFn2xlxZ9lbiBiYcWfdnVydSBidWx1bmFtYXpzYSAyIG51bWFyYWzEsSDDp8Sxa8SxxZ8ga29kdXlsYSDDp8SxayIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3NQorbXNnaWQgInNob3cgdW5kZXJseWluZyByZWYgaW4gYWRkaXRpb24gdG8gdGhlIG9iamVjdCBwb2ludGVkIGJ5IGl0IgorbXNnc3RyICJpxZ9hcmV0IGV0dGnEn2kgbmVzbmV5ZSBlayBvbGFyYWsgYWx0xLFuZGEgeWF0YW4gYmHFn3Z1cnV5dSBnw7ZzdGVyIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzozMAorbXNnaWQgImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBscy10cmVlIFs8c2XDp2VuZWtsZXI+XSA8YcSfYWPEsW1zxLE+IFs8eW9sPi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOAorbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAieWFsbsSxemNhIGHEn2HDp2xhcsSxIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMAorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIKK21zZ3N0ciAiYWx0YcSfYcOnbGFyYSDDtnp5aW5lbGUiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMgorbXNnaWQgInNob3cgdHJlZXMgd2hlbiByZWN1cnNpbmciCittc2dzdHIgIsO2enlpbmVsZXJrZW4gYcSfYcOnbGFyxLEgZ8O2c3RlciIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAiZ2lyZGlsZXJpIE5VTCBiYXl0xLEgaWxlIHNvbmxhbmTEsXIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNgorbXNnaWQgImluY2x1ZGUgb2JqZWN0IHNpemUiCittc2dzdHIgIm5lc25lIGJveXV0dW51IGnDp2VyIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzggYnVpbHRpbi9scy10cmVlLmM6MTQwCittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAieWFsbsSxemNhIGRvc3lhIGFkbGFyxLFuxLEgbGlzdGVsZSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQzCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAidGFtIHlvbCBhZGxhcsSxbsSxIGt1bGxhbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQ1Cittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICJ5YWxuxLF6Y2EgZ2XDp2VybGkgZGl6aW5pIGRlxJ9pbCB0w7xtIGHEn2FjxLEgbGlzdGVsZSAoLS1mdWxsLW5hbWUgaW1hIGVkZXIpIgorCisjOiBidWlsdGluL21haWxzcGxpdC5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBtYm94OiAnJXMnIgorbXNnc3RyICJib8WfIG1ib3g6ICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NQorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICJnaXQgbWVyZ2UgWzxzZcOnZW5la2xlcj5dIFs8Z8O2bmRlcmk+Li4uXSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU2Cittc2dpZCAiZ2l0IG1lcmdlIC0tYWJvcnQiCittc2dzdHIgImdpdCBtZXJnZSAtLWFib3J0IgorCisjOiBidWlsdGluL21lcmdlLmM6NTcKK21zZ2lkICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTkKK21zZ2lkICJzd2l0Y2ggYG0nIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIidtJyBhbmFodGFyxLEgYmlyIGRlxJ9lciBnZXJla3Rpcml5b3IiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiJyVzJyBzZcOnZW5lxJ9pIGJpciBkZcSfZXIgZ2VyZWt0aXJpeW9yIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIkJpcmxlxZ90aXJtZSBzdHJhdGVqaXNpICclcycgYnVsdW5hbWFkxLEuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiS3VsbGFuxLFsYWJpbGlyIHN0cmF0ZWppbGVyOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiS3VsbGFuxLFsYWJpbGlyIMO2emVsIHN0cmF0ZWppbGVyOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0NSBidWlsdGluL3B1bGwuYzoxMzIKK21zZ2lkICJkbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICJiaXJsZcWfdGlybWVuaW4gc29udW5kYSBiaXIgZGlmZnN0YXQgZ8O2c3Rlcm1lIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ4IGJ1aWx0aW4vcHVsbC5jOjEzNQorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAiYmlybGXFn3Rpcm1lbmluIHNvbnVuZGEgYmlyIGRpZmZzdGF0IGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDkgYnVpbHRpbi9wdWxsLmM6MTM4Cittc2dpZCAiKHN5bm9ueW0gdG8gLS1zdGF0KSIKK21zZ3N0ciAiKC0tc3RhdCBlxZ9hbmxhbWzEsXPEsSkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTEgYnVpbHRpbi9wdWxsLmM6MTQxCittc2dpZCAiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisia8Sxc2EgZ8O8bmzDvGt0ZW4gYmlybGXFn3Rpcm1lIGfDtm5kZXJpc2kgaWxldGlzaW5lIGdpcmRpbGVyIChlbiDDp29rIDxuPikgZWtsZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NCBidWlsdGluL3B1bGwuYzoxNDcKK21zZ2lkICJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIKK21zZ3N0ciAiYmlyIGJpcmxlxZ90aXJtZSB5ZXJpbmUgdGVrIGJpciBnw7ZuZGVyaSBvbHXFn3R1ciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NiBidWlsdGluL3B1bGwuYzoxNTAKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgImJpcmxlxZ90aXJtZSBiYcWfYXLEsWzEsSBvbHVyc2EgYmlyIGfDtm5kZXJpIGdlcsOnZWtsZcWfdGlyICjDtm50YW7EsW1sxLEpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU4IGJ1aWx0aW4vcHVsbC5jOjE1MworbXNnaWQgImVkaXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyIKK21zZ3N0ciAiZ8O2bmRlcm1lZGVuIMO2bmNlIGlsZXRpeWkgZMO8emVubGUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjAKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIgorbXNnc3RyICJpbGVyaSBzYXLEsW1hIGl6aW4gdmVyICjDtm50YW7EsW1sxLEpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjYyIGJ1aWx0aW4vcHVsbC5jOjE2MAorbXNnaWQgImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiCittc2dzdHIgImlsZXJpIHNhcsSxbSBvbGFuYWtsxLEgZGXEn2lsc2UgaXB0YWwgZXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjYgYnVpbHRpbi9wdWxsLmM6MTYzCittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICJhZMSxIHZlcmlsZW4gZ8O2bmRlcmluaW4gZ2XDp2VybGkgYmlyIEdQRyBpbXphc8SxIG9sZHXEn3VudSBkb8SfcnVsYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NyBidWlsdGluL25vdGVzLmM6Nzg3IGJ1aWx0aW4vcHVsbC5jOjE2NworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjAgYnVpbHRpbi9yZWJhc2UuYzoxNTc1IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgInN0cmF0ZWppIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY4IGJ1aWx0aW4vcHVsbC5jOjE2OAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAia3VsbGFuxLFsYWNhayBiaXJsZcWfdGlybWUgc3RyYXRlamlzaSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OSBidWlsdGluL3B1bGwuYzoxNzEKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgInNlw6dlbmVrPWRlxJ9lciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3MCBidWlsdGluL3B1bGwuYzoxNzIKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJzZcOnaWxpIGJpcmxlxZ90aXJtZSBzdHJhdGVqaXNpIGnDp2luIHNlw6dlbmVrbGVyIgorCisjOiBidWlsdGluL21lcmdlLmM6MjcyCittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICIiCisiYmlybGXFn3Rpcm1lIGfDtm5kZXJpc2kgaWxldGlzaSAoaWxlcmkgc2FyxLFtIG9sbWF5YW4gYmlyIGJpcmxlxZ90aXJtZSBpw6dpbikiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzkKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiaWxlcmxlbWVrdGUgb2xhbiBnZcOnZXJsaSBiaXJsZcWfdGlybWV5aSBpcHRhbCBldCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MQorbXNnaWQgIi0tYWJvcnQgYnV0IGxlYXZlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgYWxvbmUiCittc2dzdHIgIi0tYWJvcnQsIGFuY2FrIGluZGVrc2kgdmUgw6dhbMSxxZ9tYSBhxJ9hY8SxbsSxIGRlxJ9pxZ90aXJtZWRlbiBixLFyYWvEsW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODMKK21zZ2lkICJjb250aW51ZSB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiaWxlcmxlbWVrdGUgb2xhbiBnZcOnZXJsaSBiaXJsZcWfdGlybWV5aSBzw7xyZMO8csO8biIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4NSBidWlsdGluL3B1bGwuYzoxNzkKK21zZ2lkICJhbGxvdyBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgImJpcmJpcml5bGUgaWxpxZ9raXNpIG9sbWF5YW4gZ2XDp21pxZ9sZXJpbiBiaXJsZcWfdGlyaWxtZXNpbmUgaXppbiB2ZXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyOTEKK21zZ2lkICJieXBhc3MgcHJlLW1lcmdlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAicHJlLW1lcmdlLWNvbW1pdCB2ZSBjb21taXQtbXNnIGthbmNhbGFyxLFuxLEgYXRsYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMwOAorbXNnaWQgImNvdWxkIG5vdCBydW4gc3Rhc2guIgorbXNnc3RyICJ6dWxhIGFsxLFuYW1hZMSxIgorCisjOiBidWlsdGluL21lcmdlLmM6MzEzCittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICJ6dWxhIGJhxZ9hcsSxc8SxeiBvbGR1IgorCisjOiBidWlsdGluL21lcmdlLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgImdlw6dlcmxpIGJpciBuZXNuZSBkZcSfaWw6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MzQwIGJ1aWx0aW4vbWVyZ2UuYzozNTcKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICJyZWFkLXRyZWUgYmHFn2FyxLFzxLF6IG9sZHUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozODcKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiICh0xLFrxLHFn3TEsXLEsWxhY2FrIGJpciDFn2V5IHlvaykiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJUxLFrxLHFn3TEsXJtYSBnw7ZuZGVyaXNpIC0tIEhFQUQgZ8O8bmNlbGxlbm1peW9yXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJCaXJsZcWfdGlybWUgaWxldGlzaSB5b2sgLS0gSEVBRCBnw7xuY2VsbGVubWl5b3JcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICInJXMnIGJpciBnw7ZuZGVyaXllIGnFn2FyZXQgZXRtaXlvciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBzdHJpbmc6ICVzIgorbXNnc3RyICJIYXRhbMSxIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgZGl6aXNpOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcwOAorbXNnaWQgIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgIsSwa2kgdcOnIGfDtm5kZXJpIGJpcmxlxZ90aXJtZXNpIGTEscWfxLFuZGEgYmlyIMWfZXkgeWFwxLFsbcSxeW9yLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICJtZXJnZS1yZWN1cnNpdmUgacOnaW4gZ2XDp2Vyc2l6IHNlw6dlbmVrOiAtWCVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAiJXMgeWF6xLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIsWedXJhZGFuIG9rdW5hbWFkxLE6ICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIgorbXNnc3RyICJCaXJsZcWfdGlybWUgZ8O2bmRlcmlsbWl5b3IsIHRhbWFtbGFtYWsgacOnaW4gJ2dpdCBjb21taXQnIGt1bGxhbsSxbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwNAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCittc2dzdHIgIiIKKyJCdSBiaXJsZcWfdGlybWVuaW4gbmVkZW4gZ2VyZWtsaSBvbGR1xJ91bnUgYcOnxLFrbGFtYWsgacOnaW4gYmlyIGfDtm5kZXJpIGlsZXRpc2lcbiIKKyJnaXJpbiwgw7Z6ZWxsaWtsZSBnw7xuY2VsbGVubWnFnyBiaXIgw7xzdGtheW5hxJ/EsSBracWfaXNlbCBkYWxhIGJpcmxlxZ90aXJpeW9yc2EuXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDkKK21zZ2lkICJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICJCb8WfIGJpciBpbGV0aSBnw7ZuZGVyaXlpIGlwdGFsIGVkZXIuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyInJWMnIGlsZSBiYcWfbGF5YW4gc2F0xLFybGFyIHlvayBzYXnEsWxhY2FrdMSxci4gQm/FnyBiaXIgaWxldGkgZ8O2bmRlcml5aVxuIgorImlwdGFsIGVkZXIuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NjUKK21zZ2lkICJFbXB0eSBjb21taXQgbWVzc2FnZS4iCittc2dzdHIgIkJvxZ8gZ8O2bmRlcmkgaWxldGlzaS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV29uZGVyZnVsLlxuIgorbXNnc3RyICJIYXJpa2EuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorIk90b21hdGlrIGJpcmxlxZ90aXJtZSBiYcWfYXLEsXPEsXo7IMOnYWvEscWfbWFsYXLEsSDDp8O2esO8biB2ZSBzb251Y3UgZ8O2bmRlcmluLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTgwCittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICJHZcOnZXJsaSBkYWwgeW9rLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4MgorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiR2XDp2VybGkgZGFsIGnDp2luIHV6YWsga29udW0geW9rLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4NAorbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiR2XDp2VybGkgZGFsIGnDp2luIMO2bnRhbsSxbWzEsSDDvHN0a2F5bmFrIHRhbsSxbWxhbm1hbcSxxZ8uIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgIiVzIGnDp2luICVzIGtvbnVtdW5kYW4gdXphayBpemxleWVuIGRhbCB5b2siCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciCittc2dzdHIgIkhhdGFsxLEgZGXEn2VyICclcycsICclcycgb3J0YW3EsW5kYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UgaW4gJXM6ICVzIgorbXNnc3RyICIlcyBpw6dpbmRlIGJpcmxlxZ90aXJlYmlsZWNlxJ9pbWl6IGJpciDFn2V5IGRlxJ9pbDogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTgzCittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgImJpcmxlxZ90aXJlYmlsZWNlxJ9pbWl6IGJpciDFn2V5IGRlxJ9pbCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODYKK21zZ2lkICItLWFib3J0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWFib3J0IGJpciBkZcSfacWfa2VuIGJla2xlbWV6IgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5MAorbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIHRvIGFib3J0IChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAixLBwdGFsIGVkaWxlY2VrIGJpciBiaXJsZcWfdGlybWUgeW9rIChNRVJHRV9IRUFEIGVrc2lrKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk5Cittc2dpZCAiLS1xdWl0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLXF1aXQgYmlyIGRlxJ9pxZ9rZW4gYmVrbGVtZXoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzEyCittc2dpZCAiLS1jb250aW51ZSBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1jb250aW51ZSBiaXIgZGXEn2nFn2tlbiBiZWtsZW1leiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTYKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIsSwbGVybGVtZWt0ZSBvbGFuIGJpciBiaXJsZcWfdGlybWUgeW9rIChNRVJHRV9IRUFEIGVrc2lrKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzMyCittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkJpcmxlxZ90aXJtZW5pemkgc29udcOnbGFuZMSxcm1hZMSxbsSxeiAoTUVSR0VfSEVBRCBtZXZjdXQpLlxuIgorIkzDvHRmZW4gYmlybGXFn3Rpcm1lZGVuIMO2bmNlIGRlxJ9pxZ9pa2xpa2xlcmluaXppIGfDtm5kZXJpbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM5Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIlNlw6ctYWwnxLFuxLF6xLEgc29udcOnbGFuZMSxcm1hZMSxbsSxeiAoQ0hFUlJZX1BJQ0tfSEVBRCBtZXZjdXQpLlxuIgorIkzDvHRmZW4gYmlybGXFn3Rpcm1lZGVuIMO2bmNlIGRlxJ9pxZ9pa2xpa2xlcmluaXppIGfDtm5kZXJpbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzQyCittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICJTZcOnLWFsJ8SxbsSxesSxIHNvbnXDp2xhbmTEsXJtYWTEsW7EsXogKENIRVJSWV9QSUNLX0hFQUQgbWV2Y3V0KS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzU2Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCittc2dzdHIgIi0tc3F1YXNoIGlsZSAtLW5vLWZmIGJpcmxpa3RlIGt1bGxhbsSxbGFtYXouIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1OAorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tY29tbWl0LiIKK21zZ3N0ciAiLS1zcXVhc2ggaWxlIC0tY29tbWl0IGJpcmxpa3RlIGt1bGxhbsSxbGFtYXouIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM3NAorbXNnaWQgIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIgorbXNnc3RyICJCZWxpcnRpbGVuIGJpciBnw7ZuZGVyaSB5b2sgdmUgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gYXlhcmxhbm1hbcSxxZ8uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5MQorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICJHw7ZuZGVyaXlpIGJvxZ8gZGFsIHVjdW5hIHTEsWvEscWfdMSxcm1hIGhlbsO8eiBkZXN0ZWtsZW5taXlvciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTMKK21zZ2lkICJOb24tZmFzdC1mb3J3YXJkIGNvbW1pdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGludG8gYW4gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorIsSwbGVyaSBzYXLEsW0gb2xtYXlhbiBnw7ZuZGVyaXlpIGJvxZ8gZGFsIHVjdW5hIHlhcG1hayBiaXIgYW5sYW0gaWZhZGUgZXRtaXlvciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSBiaXJsZcWfdGlyZWJpbGVjZcSfaW1peiBiaXIgxZ9leSBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDAwCittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiQm/FnyBkYWwgdWN1bmEgdGFtIG9sYXJhayB5YWxuxLF6Y2EgYmlyIGfDtm5kZXJpIGJpcmxlxZ90aXJpbGViaWxpciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0ODEKK21zZ2lkICJyZWZ1c2luZyB0byBtZXJnZSB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJiaXJiaXJpeWxlIGlsacWfa2lzaSBvbG1heWFuIGdlw6dtacWfbGVyaSBiaXJsZcWfdGlybWUgcmVkZGVkaWxpeW9yIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ5MAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkhlciDFn2V5IGfDvG5jZWwuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAiR8O8bmNlbGxlbml5b3I6ICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAiR2Vyw6dla3RlbiDDtm5lbXNpeiBpbmRla3MgacOnaSBiaXJsZcWfdGlybWUgZGVuZW5peW9yLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIllvay5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NzQKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIFllZWFoISIKK21zZ3N0ciAiSGVyIMWfZXkgZ8O8bmNlbC4gxLDFn3RlIGJ1ISIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1ODAKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIsSwbGVyaSBzYXJtYSBvbGFuYWtsxLEgZGXEn2lsLCBpcHRhbCBlZGlsaXlvci4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjAzIGJ1aWx0aW4vbWVyZ2UuYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICJBxJ9hw6cgYm96dWxtYW3EscWfIGR1cnVtdW5hIGdlcmkgc2FyxLFsxLF5b3IuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iCittc2dzdHIgIiVzIGJpcmxlxZ90aXJtZSBzdHJhdGVqaXNpIGRlbmVuaXlvci4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiQmlybGXFn3Rpcm1leWkgaGnDp2JpciBiaXJsZcWfdGlybWUgc3RyYXRlamlzaSBpxZ9sZW1lZGlcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugd2l0aCBzdHJhdGVneSAlcyBmYWlsZWQuXG4iCittc2dzdHIgIiVzIHN0cmF0ZWppc2kgaWxlIGJpcmxlxZ90aXJtZSBiYcWfYXLEsXPEsXogb2xkdS5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIkVsIGlsZSDDp8O2esO8bcO8IGhhesSxcmxhbWFrIGnDp2luICVzIGt1bGxhbsSxbMSxeW9yLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisiT3RvbWF0aWsgYmlybGXFn3Rpcm1lIGl5aSBnZcOndGk7IGlzdGVuZGnEn2kgw7x6ZXJlIGfDtm5kZXJtZSDDtm5jZXNpbmRlIGR1cmR1LlxuIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxnw7ZuZGVyaT4gPGfDtm5kZXJpPi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxnw7ZuZGVyaT4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM0Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Z8O2bmRlcmk+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGfDtm5kZXJpPiA8Z8O2bmRlcmk+IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8cmVmPiBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPGJhxZ92dXJ1PiBbPGfDtm5kZXJpPl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1MworbXNnaWQgIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIKK21zZ3N0ciAidMO8bSBvcnRhayBhdGFsYXLEsSDDp8Sxa3TEsSB2ZXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NQorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAidGVrIGJpciBuIHnDtm5sw7wgYmlybGXFn3Rpcm1lIGnDp2luIGF0YWxhcsSxIGJ1bCIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU3Cittc2dpZCAibGlzdCByZXZzIG5vdCByZWFjaGFibGUgZnJvbSBvdGhlcnMiCittc2dzdHIgImJhxZ9rYWxhcsSxIHRhcmFmxLFuZGFuIHVsYcWfxLFsYWJpbGlyIHJldml6eW9ubGFyxLEgbGlzdGVsZSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU5Cittc2dpZCAiaXMgdGhlIGZpcnN0IG9uZSBhbmNlc3RvciBvZiB0aGUgb3RoZXI/IgorbXNnc3RyICJpbGtpIGRpxJ9lcmxlcmluaW4gYXRhc8SxIG3EsT8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE2MQorbXNnaWQgImZpbmQgd2hlcmUgPGNvbW1pdD4gZm9ya2VkIGZyb20gcmVmbG9nIG9mIDxyZWY+IgorbXNnc3RyICI8Z8O2bmRlcmk+J25pbiBuZXJlZGUgPGJhxZ92dXJ1PidudW4gZ8O8bmzDvMSfw7xuZGVuIMOnYXRhbGxhbmTEscSfxLFuxLEgYnVsIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo5Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiAiCisiPG9yaWctZmlsZT4gPGZpbGUyPiIKK21zZ3N0ciAiIgorImdpdCBtZXJnZS1maWxlIFs8c2XDp2VuZWtsZXI+XSBbLUwgPGFkMT4gWy1MIDxvcmlqPiBbLUwgPGFkMj5dXV0gPGRvc3lhMT4gIgorIjxvcmlqLWRvc3lhPiA8ZG9zeWEyPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJzb251w6dsYXLEsSBzdGFuZGFydCDDp8Sxa3TEsXlhIGfDtm5kZXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM2Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgImRpZmYzIHRhYmFubMSxIGJpcmxlxZ90aXJtZSBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM3Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIgorbXNnc3RyICLDp2FrxLHFn21hbGFyZGEgYml6aW0gc8O8csO8bcO8IGt1bGxhbiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAiw6dha8SxxZ9tYWxhcmRhIG9ubGFyxLFuIHPDvHLDvG3DvG7DvCBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQxCittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIGEgdW5pb24gdmVyc2lvbiIKK21zZ3N0ciAiw6dha8SxxZ9tYWxhcmRhIGJpcmxpayBvbG11xZ8gYmlyIHPDvHLDvG0ga3VsbGFuIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NAorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGlzIG1hcmtlciBzaXplIgorbXNnc3RyICLDp2FrxLHFn21hbGFyZGEgYnUgaW1sZXlpY2kgYm95dXR1bnUga3VsbGFuIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAiw6dha8SxxZ9tYWxhciBoYWtrxLFuZGEgdXlhcm1hIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NworbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIKK21zZ3N0ciAiZmlsZTEvb3JpZy1maWxlL2ZpbGUyIGnDp2luIGV0aWtldGxlciB5YXDEscWfdMSxciIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiAlcyIKK21zZ3N0ciAiYmlsaW5tZXllbiBzZcOnZW5layAlcyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIiclcycgbmVzbmVzaSBheXLEscWfdMSxcsSxbGFtYWTEsSIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiBJZ25vcmluZyAlcy4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiBJZ25vcmluZyAlcy4iCittc2dzdHJbMF0gIiVkIHRhYmFuZGFuIGZhemxhc8SxIGnFn2xlbmVtaXlvci4gJXMgeW9rIHNhecSxbMSxeW9yLiIKK21zZ3N0clsxXSAiJWQgdGFiYW5kYW4gZmF6bGFzxLEgacWfbGVuZW1peW9yLiAlcyB5b2sgc2F5xLFsxLF5b3IuIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjY1Cittc2dpZCAibm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiaWtpIGRhbCB1Y3UgYmlybGXFn3Rpcm1lc2luZGVuIGJhxZ9rYSBiaXIgxZ9leSBpxZ9sZW5taXlvciIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NCBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIgorbXNnc3RyICInJXMnIGJhxZ92dXJ1c3Ugw6fDtnrDvGxlbWVkaSIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXNcbiIKK21zZ3N0ciAiJXMsICVzIGlsZSBiaXJsZcWfdGlyaWxpeW9yXG4iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6NjYKK21zZ2lkICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorbXNnc3RyICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NAorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICJnaXJkaSBOVUwgaWxlIHNvbmxhbmTEsXLEsWxkxLEiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU1IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI2Cittc2dpZCAiYWxsb3cgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICJla3NpayBuZXNuZWxlcmUgaXppbiB2ZXIiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU2Cittc2dpZCAiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIgorbXNnc3RyICJiaXJkZW4gw6dvayBhxJ9hY8SxbiBvbHXFn3R1cnVsbWFzxLFuYSBpemluIHZlciIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6OQorbXNnaWQgIiIKKyJnaXQgbXVsdGktcGFjay1pbmRleCBbPG9wdGlvbnM+XSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC0iCisic2l6ZT08c2l6ZT4pIgorbXNnc3RyICIiCisiZ2l0IG11bHRpLXBhY2staW5kZXggWzxzZcOnZW5la2xlcj5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTxib3l1dD4pIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNgorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiCittc2dzdHIgIm5lc25lIGRpemluaSBwYWtldCBkb3N5YXPEsSBzZXRpIHZlIHBhY2staW5kZXggZcWfbGVyaSBpw6dlcml5b3IiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI5Cittc2dpZCAiIgorImR1cmluZyByZXBhY2ssIGNvbGxlY3QgcGFjay1maWxlcyBvZiBzbWFsbGVyIHNpemUgaW50byBhIGJhdGNoIHRoYXQgaXMgIgorImxhcmdlciB0aGFuIHRoaXMgc2l6ZSIKK21zZ3N0ciAiIgorInllbmlkZW4gcGFrZXRsZW1lIHPEsXJhc8SxbmRhIGRhaGEga8O8w6fDvGsgYm95dXRsdSBwYWtldCBkb3N5YWxhcsSxbsSxIGJ1IGJveXV0dGFuICIKKyJkYWhhIGLDvHnDvGsgYmlyIHRvcGx1IGnFnyBvbGFyYWsgdG9wbGF5xLFuIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo1MCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjY3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICLDp29rIGZhemxhIGRlxJ9pxZ9rZW4iCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjYwCittc2dpZCAiLS1iYXRjaC1zaXplIG9wdGlvbiBpcyBvbmx5IGZvciAncmVwYWNrJyBzdWJjb21tYW5kIgorbXNnc3RyICItLWJhdGNoLXNpemUgc2XDp2VuZcSfaSB5YWxuxLF6Y2EgJ3JlcGFjaycgYWx0a29tdXR1IGnDp2luIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgc3ViY29tbWFuZDogJXMiCittc2dzdHIgInRhbsSxbWxhbmFtYXlhbiBhbHRrb211dDogJXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOAorbXNnaWQgImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICJnaXQgbXYgWzxzZcOnZW5la2xlcj5dIDxrYXluYWs+Li4uIDxoZWRlZj4iCisKKyM6IGJ1aWx0aW4vbXYuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgIiVzIGRpemluaSBpbmRla3N0ZSB2ZSBhbHRtb2TDvGwgZGXEn2lsIG1pPyIKKworIzogYnVpbHRpbi9tdi5jOjg1Cittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyLEsGxlcmxlbWVrIGnDp2luIGzDvHRmZW4gZGXEn2nFn2lrbGlrbGVyaW5pemkgLmdpdG1vZHVsZXMnZSBoYXrEsXJsYXnEsW4gdmV5YSAiCisienVsYWxhecSxbiIKKworIzogYnVpbHRpbi9tdi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICIlLipzIGluZGVrc3RlIgorCisjOiBidWlsdGluL212LmM6MTI1Cittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJoZWRlZiB2YXIgb2xzYSBiaWxlIHpvcmxhIHRhxZ/EsS95ZW5pZGVuIGFkbGFuZMSxciIKKworIzogYnVpbHRpbi9tdi5jOjEyNworbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICJ0YcWfxLEveWVuaWRlbiBhZGxhbmTEsXIgaGF0YWxhcsSxbsSxIGF0bGEiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gJyVzJyBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiclcycgaGVkZWZpIGJpciBkaXppbiBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICInJXMnLT4nJXMnIHllbmlkZW4gYWRsYW5kxLFybWFzxLEgZGVuZXRsZW5peW9yXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxODQKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICJoYXRhbMSxIGtheW5hayIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgImRpemluIGtlbmRpIGnDp2luZSB0YcWfxLFuYW3EsXlvciIKKworIzogYnVpbHRpbi9tdi5jOjE5MAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgImRpemluIGRvc3lhIMO8emVyaW5kZW4gdGHFn8SxbmFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTkKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICJrYXluYWsgZGl6aW4gYm/FnyIKKworIzogYnVpbHRpbi9tdi5jOjIyNAorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgInPDvHLDvG0gZGVuZXRpbWkgYWx0xLFuZGEgZGXEn2lsIgorCisjOiBidWlsdGluL212LmM6MjI3Cittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICJoZWRlZiBtZXZjdXQiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcndyaXRpbmcgJyVzJyIKK21zZ3N0ciAiw7x6ZXJpbmUgeWF6xLFsxLF5b3I6ICclcyciCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzgKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICLDnHplcmluZSB5YXrEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL212LmM6MjQxCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICJheW7EsSBoZWRlZiBpw6dpbiBiaXJkZW4gw6dvayBrYXluYWsiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDMKK21zZ2lkICJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImhlZGVmIGRpemluIG1ldmN1dCBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiVzLCBrYXluYWs9JXMsIGhlZGVmOiVzIgorCisjOiBidWlsdGluL212LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIiVzLCAlcyBvbGFyYWsgeWVuaWRlbiBhZGxhbmTEsXLEsWzEsXlvclxuIgorCisjOiBidWlsdGluL212LmM6Mjc3IGJ1aWx0aW4vcmVtb3RlLmM6NzgxIGJ1aWx0aW4vcmVwYWNrLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICInJXMnIHllbmlkZW4gYWRsYW5kxLFyxLFsYW1hZMSxIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY1Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxzZcOnZW5la2xlcj5dIDxnw7ZuZGVyaT4uLi4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjYKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1hbGwiCittc2dzdHIgImdpdCBuYW1lLXJldiBbPHNlw6dlbmVrbGVyPl0gLS1hbGwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjcKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8c2XDp2VuZWtsZXI+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI0Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICJ5YWxuxLF6Y2EgYWRsYXLEsSB5YXpkxLFyIChTSEEtMSB5b2spIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI1Cittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICJnw7ZuZGVyaWxlcmkgYWRsYW5kxLFybWFrIGnDp2luIHlhbG7EsXpjYSBldGlrZXRsZXJpIGt1bGxhbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUyNworbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJ5YWxuxLF6Y2EgPGRpemdpPiBpbGUgZcWfbGXFn2VuIGJhxZ92dXJ1bGFyxLEga3VsbGFuIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI5Cittc2dpZCAiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICI8ZGl6Z2k+IGlsZSBlxZ9sZcWfZW4gYmHFn3Z1cnVsYXLEsSB5b2sgc2F5IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTMxCittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAidMO8bSBiYcWfdnVydWxhcmRhbiB1bGHFn8SxbGFiaWxpciBvbGFuIHTDvG0gZ8O2bmRlcmlsZXJpIGxpc3RlbGUiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzIKK21zZ2lkICJyZWFkIGZyb20gc3RkaW4iCittc2dzdHIgInN0ZGluJ2RlbiBva3UiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzMKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgIid0YW7EsW1sYW5tYXlhbicgYWRsYXLEsW4geWF6ZMSxcsSxbG1hc8SxbmEgaXppbiB2ZXIgKMO2bnRhbsSxbWzEsSkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzkKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAiZ2lyZGlkZSBldGlrZXRsZXJpbiBiYcWfdnVydWxhcsSxbsSxIGthbGTEsXIgKGnDpyBrdWxsYW7EsW0pIgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90LWLFn3ZyPl0gW2xpc3QgWzxuZXNuZT5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI5Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gIgorInwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90LWLFn3ZyPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8aWxldGk+IHwgLUYgIgorIjxkb3N5YT4gfCAoLWMgfCAtQykgPG5lc25lPl0gWzxuZXNuZT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzAKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90LWLFn3ZyPl0gY29weSBbLWZdIDxuZXNuZWRlbj4gPG5lc25leWU+IgorCisjOiBidWlsdGluL25vdGVzLmM6MzEKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gfCAiCisiKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90LWLFn3ZyPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPGlsZXRpPiB8IC1GIDxkb3N5YT4gIgorInwgKC1jIHwgLUMpIDxuZXNuZT5dIFs8bmVzbmU+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90LWLFn3ZyPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxuZXNuZT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzMKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdC1ixZ92cj5dIHNob3cgWzxuZXNuZT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdC1ixZ92cj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWppPl0gPG5vdC1ixZ92cj4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNQorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSByZW1vdmUgWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90LWLFn3ZyPl0gcmVtb3ZlIFs8bmVzbmU+Li4uXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcHJ1bmUgWy1uXSBbLXZdIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxub3QtYsWfdnI+XSBwcnVuZSBbLW5dIFstdl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdC1ixZ92cj5dIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NAorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFtsaXN0IFs8bmVzbmU+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OQorbXNnaWQgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFkZCBbPHNlw6dlbmVrbGVyPl0gWzxuZXNuZT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NTQKK21zZ2lkICJnaXQgbm90ZXMgY29weSBbPG9wdGlvbnM+XSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICJnaXQgbm90ZXMgY29weSBbPHNlw6dlbmVrbGVyPl0gPG5lc25lZGVuPiA8bmVzbmV5ZT4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NQorbXNnaWQgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD5dLi4uIgorbXNnc3RyICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8bmVzbmVkZW4+IDxuZXNuZXllPl0uLi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MAorbXNnaWQgImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFwcGVuZCBbPHNlw6dlbmVrbGVyPl0gWzxuZXNuZT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjUKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgZWRpdCBbPG5lc25lPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MAorbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBzaG93IFs8bmVzbmU+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgWzxzZcOnZW5la2xlcj5dIDxub3QtYsWfdnI+IgorCisjOiBidWlsdGluL25vdGVzLmM6NzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPHNlw6dlbmVrbGVyPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPHNlw6dlbmVrbGVyPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MgorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHJlbW92ZSBbPG5lc25lPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NworbXNnaWQgImdpdCBub3RlcyBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHBydW5lIFs8c2XDp2VuZWtsZXI+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkyCittc2dpZCAiZ2l0IG5vdGVzIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6OTcKK21zZ2lkICJXcml0ZS9lZGl0IHRoZSBub3RlcyBmb3IgdGhlIGZvbGxvd2luZyBvYmplY3Q6IgorbXNnc3RyICJBxZ9hxJ/EsWRha2kgbmVzbmVsZXIgacOnaW4gbm90IHlhei9kw7x6ZW5sZToiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIiclcycgbmVzbmVzaSBpw6dpbiAnc2hvdycgYmHFn2xhdMSxbGFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnc2hvdycgb3V0cHV0IgorbXNnc3RyICInc2hvdycgw6fEsWt0xLFzxLEgb2t1bmFtYWTEsSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIiclcycgbmVzbmVzaSBpw6dpbiAnc2hvdycgYml0aXJpbGVtZWRpIgorCisjOiBidWlsdGluL25vdGVzLmM6MTk3Cittc2dpZCAicGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICJub3QgacOnZXJpxJ9pbmkgbMO8dGZlbiAtbSB2ZXlhIC1GIHNlw6dlbmXEn2luaSBrdWxsYW5hcmFrIHNhxJ9sYXnEsW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbm90ZSBvYmplY3QiCittc2dzdHIgIm5vdCBuZXNuZXNpIHlhesSxbGFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG5vdGUgY29udGVudHMgaGF2ZSBiZWVuIGxlZnQgaW4gJXMiCittc2dzdHIgIm5vdCBpw6dlcmnEn2kgJXMgacOnaW5kZSBixLFyYWvEsWxkxLEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNDIgYnVpbHRpbi90YWcuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICInJXMnIGHDp8SxbGFtYWTEsSB2ZXlhIG9rdW5hbWFkxLEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjMgYnVpbHRpbi9ub3Rlcy5jOjMxMyBidWlsdGluL25vdGVzLmM6MzE1CisjOiBidWlsdGluL25vdGVzLmM6MzgzIGJ1aWx0aW4vbm90ZXMuYzo0MzggYnVpbHRpbi9ub3Rlcy5jOjUyNgorIzogYnVpbHRpbi9ub3Rlcy5jOjUzMSBidWlsdGluL25vdGVzLmM6NjEwIGJ1aWx0aW4vbm90ZXMuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiclcycgZ2XDp2VybGkgYmlyIGJhxZ92dXJ1IG9sYXJhayDDp8O2esO8bGVtZWRpIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiJyVzJyBuZXNuZXNpIG9rdW5hbWFkxLEuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG5vdGUgZGF0YSBmcm9tIG5vbi1ibG9iIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAixLBraWxpIG5lc25lIG9sbWF5YW4gJyVzJyBuZXNuZXNpbmRlbiBub3QgdmVyaXNpIG9rdW5hbcSxeW9yLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgImhhdGFsxLEgb2x1xZ90dXJ1bG11xZ8gZ2lyZGkgc2F0xLFyxLE6ICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIm5vdGxhciAnJXMnIGtvbnVtdW5kYW4gJyVzJyBrb251bXVuYSBrb3B5YWxhbmFtYWTEsSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBmaXJzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgZ2l0CisjLiBub3RlcyBjb21tYW5kOiAnYWRkJywgJ21lcmdlJywgJ3JlbW92ZScsIGV0Yy4KKyMuCisjOiBidWlsdGluL25vdGVzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvICVzIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAibm90bGFyxLEgJXMgeWFwbWEgKCVzIGnDp2luZGUpIHJlZGRlZGlsaXlvciAocmVmcy9ub3Rlcy8gZMSxxZ/EsW5kYSkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNzYgYnVpbHRpbi9ub3Rlcy5jOjQzMSBidWlsdGluL25vdGVzLmM6NTA5CisjOiBidWlsdGluL25vdGVzLmM6NTIxIGJ1aWx0aW4vbm90ZXMuYzo1OTggYnVpbHRpbi9ub3Rlcy5jOjY2NQorIzogYnVpbHRpbi9ub3Rlcy5jOjgxNSBidWlsdGluL25vdGVzLmM6OTYzIGJ1aWx0aW4vbm90ZXMuYzo5ODUKK21zZ2lkICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorbXNnc3RyICLDp29rIGZhemxhIHBhcmFtZXRyZSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4OSBidWlsdGluL25vdGVzLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgIiVzIG5lc25lc2kgacOnaW4gbm90IGJ1bHVuYW1hZMSxLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMCBidWlsdGluL25vdGVzLmM6NTc2Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAibm90IGnDp2VyacSfaSBkaXppIG9sYXJhayIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMyBidWlsdGluL25vdGVzLmM6NTc5Cittc2dpZCAibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiCittc2dzdHIgIm5vdCBpw6dlcmnEn2kgYmlyIGRvc3lhZGEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTYgYnVpbHRpbi9ub3Rlcy5jOjU4MgorbXNnaWQgInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAiYmVsaXJ0aWxlbiBub3QgbmVzbmVzaW5pIGTDvHplbmxlIHZlIHllbmlkZW4ga3VsbGFuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDE5IGJ1aWx0aW4vbm90ZXMuYzo1ODUKK21zZ2lkICJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgImJlbGlydGlsZW4gbm90IG5lc25lc2luaSB5ZW5pZGVuIGt1bGxhbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyMiBidWlsdGluL25vdGVzLmM6NTg4Cittc2dpZCAiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIgorbXNnc3RyICJib8WfIG5vdCBkZXBvbGFtYXPEsW5hIGl6aW4gdmVyIgorCisjOiBidWlsdGluL25vdGVzLmM6NDIzIGJ1aWx0aW4vbm90ZXMuYzo0OTYKK21zZ2lkICJyZXBsYWNlIGV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICJ2YXIgb2xhbiBub3RsYXLEsSBiYcWfa2FsYXLEsXlsYSBkZcSfacWfdGlyIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiTm90IGVrbGVuZW1peW9yLiAlcyBuZXNuZXNpIGnDp2luIGhhbGloYXrEsXJkYSB2YXIgb2xhbiBub3RsYXIgYnVsdW5kdS4gQnUgIgorIm5vdGxhcsSxbiDDvHplcmluZSB5YXptYWsgacOnaW4gJy1mJyBrdWxsYW7EsW4uIgorCisjOiBidWlsdGluL25vdGVzLmM6NDYzIGJ1aWx0aW4vbm90ZXMuYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICIlcyBuZXNuZXNpIGnDp2luIHZhciBvbGFuIG5vdGxhcsSxbiDDvHplcmluZSB5YXrEsWzEsXlvclxuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDc1IGJ1aWx0aW4vbm90ZXMuYzo2MzcgYnVpbHRpbi9ub3Rlcy5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiJXMgbmVzbmVzaSBpw6dpbiBvbGFuIG5vdCBrYWxkxLFyxLFsxLF5b3JcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5NworbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICJuZXNuZWxlcmkgc3RkaW4nZGVuIG9rdSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5OQorbXNnaWQgImxvYWQgcmV3cml0aW5nIGNvbmZpZyBmb3IgPGNvbW1hbmQ+IChpbXBsaWVzIC0tc3RkaW4pIgorbXNnc3RyICI8a29tdXQ+IGnDp2luIHlhcMSxbGFuZMSxcm1hIHllbmlkZW4geWF6xLFtxLFuxLEgecO8a2xlICgtLXN0ZGluIGltYSBlZGVyKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxNworbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAiw6dvayBheiBwYXJhbWV0cmUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiTm90bGFyIGtvcHlhbGFuYW3EsXlvci4gJXMgbmVzbmVzaSBpw6dpbiBoYWxpaGF6xLFyZGEgdmFyIG9sYW4gbm90bGFyIGJ1bHVuZHUuICIKKyJCdSBub3RsYXLEsW4gw7x6ZXJpbmUgeWF6bWFrIGnDp2luICctZicga3VsbGFuxLFuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG5vdGVzIG9uIHNvdXJjZSBvYmplY3QgJXMuIENhbm5vdCBjb3B5LiIKK21zZ3N0ciAiJXMga2F5bmFrIG5lc25lc2kgacOnaW4gbm90IGVrc2lrLiBLb3B5YWxhbmFtxLF5b3IuIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyItbS8tRi8tYy8tQyBzZcOnZW5la2xlcmkgJ2VkaXQnIGtvbXV0dSBpw6dpbiBrdWxsYW7EsW0gZMSxxZ/EsSBixLFyYWvEsWxkxLEuXG4iCisiTMO8dGZlbiBidW51biB5ZXJpbmUgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGt1bGxhbsSxbi5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY5OAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiCittc2dzdHIgIk5PVEVTX01FUkdFX1BBUlRJQUwgYmHFn3Z1cnVzdSBzaWxpbmVtZWRpIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAwCittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICJOT1RFU19NRVJHRV9SRUYgYmHFn3Z1cnVzdSBzaWxpbmVtZWRpIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAyCittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnZ2l0IG5vdGVzIG1lcmdlJyB3b3JrdHJlZSIKK21zZ3N0ciAiJ2dpdCByZW1vdmUgbWVyZ2UnIMOnYWzEscWfbWEgYcSfYWPEsSBrYWxkxLFyxLFsYW1hZMSxIgorCisjOiBidWlsdGluL25vdGVzLmM6NzIyCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiCittc2dzdHIgIk5PVEVTX01FUkdFX1BBUlRJQUwgYmHFn3Z1cnVzdSBva3VuYW1hZMSxIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI0Cittc2dpZCAiY291bGQgbm90IGZpbmQgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iCittc2dzdHIgIk5PVEVTX01FUkdFX1BBUlRJQUwgw7ZnZXNpbmRlbiBnw7ZuZGVyaSBidWx1bmFtYWTEsS4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjYKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iCittc2dzdHIgIk5PVEVTX01FUkdFX1BBUlRJQUwgw7ZnZXNpbmRlbiBnw7ZuZGVyaSBheXLEscWfdMSxcsSxbGFtYWTEsSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjczOQorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlIE5PVEVTX01FUkdFX1JFRiIKK21zZ3N0ciAiTk9URVNfTUVSR0VfUkVGIMOnw7Z6w7xsZW1lZGkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NDIKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgbm90ZXMgbWVyZ2UiCittc2dzdHIgIm5vdCBiaXJsZcWfdGlyaWxtZXNpIHRhbWFtbGFuYW1hZMSxIgorCisjOiBidWlsdGluL25vdGVzLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm90ZXMgbWVyZ2Ugc3RyYXRlZ3kgJXMiCittc2dzdHIgImJpbGlubWV5ZW4gbm90IGJpcmxlxZ90aXJtZSBzdHJhdGVqaXNpICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg0Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJHZW5lbCBzZcOnZW5la2xlciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NgorbXNnaWQgIk1lcmdlIG9wdGlvbnMiCittc2dzdHIgIkJpcmxlxZ90aXJtZSBzZcOnZW5la2xlcmkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODgKK21zZ2lkICIiCisicmVzb2x2ZSBub3RlcyBjb25mbGljdHMgdXNpbmcgdGhlIGdpdmVuIHN0cmF0ZWd5IChtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vIgorImNhdF9zb3J0X3VuaXEpIgorbXNnc3RyICIiCisibm90IMOnYWvEscWfbWFsYXLEsW7EsSB2ZXJpbGVuIHN0cmF0ZWppeWkga3VsbGFuYXJhayDDp8O2eiAoZWwgaWxlL2Jpemlta2lvbmxhcsSxbmtpLyIKKyJiaXJsaWsgb2xtdcWfL2NhdF9zb3J0X3VuaXEpIgorCisjOiBidWlsdGluL25vdGVzLmM6NzkwCittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiQmlybGXFn3RpcmlsbWVtacWfIG5vdGxhciBnw7ZuZGVyaWxpeW9yIgorCisjOiBidWlsdGluL25vdGVzLmM6NzkyCittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiYmlybGXFn3RpcmlsbWVtacWfIG5vdGxhcsSxIGfDtm5kZXJlcmVrIG5vdCBiaXJsZcWfdGlybWVzaW5pIHRhbWFtbGEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTQKK21zZ2lkICJBYm9ydGluZyBub3RlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICJOb3RsYXIgYmlybGXFn3Rpcm1lc2kgw6fDtnrDvG3DvCBpcHRhbCBlZGlsaXlvciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NgorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICJub3QgYmlybGXFn3Rpcm1lc2luaSBpcHRhbCBldCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgwNworbXNnaWQgImNhbm5vdCBtaXggLS1jb21taXQsIC0tYWJvcnQgb3IgLXMvLS1zdHJhdGVneSIKK21zZ3N0ciAiLS1jb21taXQsIC0tYWJvcnQgdmV5YSAtcy8tLXN0cmF0ZWd5IGthcsSxxZ90xLFyxLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgxMgorbXNnaWQgIm11c3Qgc3BlY2lmeSBhIG5vdGVzIHJlZiB0byBtZXJnZSIKK21zZ3N0ciAiYmlybGXFn3Rpcm1layBpw6dpbiBiaXIgbm90IGJhxZ92dXJ1c3UgYmVsaXJ0aWxtZWxpIgorCisjOiBidWlsdGluL25vdGVzLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gLXMvLS1zdHJhdGVneTogJXMiCittc2dzdHIgImJpbGlubWV5ZW4gLXMvLS1zdHJhdGVneTogJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBub3RlcyBtZXJnZSBpbnRvICVzIGlzIGFscmVhZHkgaW4tcHJvZ3Jlc3MgYXQgJXMiCittc2dzdHIgIiVzIGtvbnVtdW5hIGJpciBub3QgYmlybGXFn3Rpcm1lc2kgaGFsaWhhesSxcmRhICVzIGtvbnVtdW5kYSBzw7xyw7x5b3IiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0b3JlIGxpbmsgdG8gY3VycmVudCBub3RlcyByZWYgKCVzKSIKK21zZ3N0ciAiZ2XDp2VybGkgbm90IGJhxZ92dXJ1c3VuYSBiYcSfbGFudMSxIGRlcG9sYW5hbWFkxLEgKCVzKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0b21hdGljIG5vdGVzIG1lcmdlIGZhaWxlZC4gRml4IGNvbmZsaWN0cyBpbiAlcyBhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAiCisiJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG9yIGFib3J0IHRoZSBtZXJnZSB3aXRoICdnaXQgbm90ZXMgbWVyZ2UgLS0iCisiYWJvcnQnLlxuIgorbXNnc3RyICIiCisiS2VuZGlsacSfaW5kZW4gbm90IGJpcmxlxZ90aXJtZXNpIGJhxZ9hcsSxc8SxeiBvbGR1LiAlcyBpw6dpbmRla2kgw6dha8SxxZ9tYWxhcsSxICIKKyLDp8O2esO8biB2ZSBzb251Y3UgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcgaWxlIGfDtm5kZXJpbi4gQmlybGXFn3Rpcm1leWkgaXB0YWwgIgorImV0bWVrIGlzdGVyc2VuaXogJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0JyBrdWxsYW5hcmFrIGJ1bnUgeWFwYWJpbGlyc2luaXouXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4OTcgYnVpbHRpbi90YWcuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiclcycgZ2XDp2VybGkgYmlyIGJhxZ92dXJ1IG9sYXJhayDDp8O2esO8bGVtaXlvciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAiJXMgbmVzbmVzaW5pbiBub3R1IHlva1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTEyCittc2dpZCAiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIgorbXNnc3RyICJ2YXIgb2xtYXlhbiBub3R1IGthbGTEsXJtYSBkZW5lbWVzaSBiaXIgaGF0YSBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MTUKK21zZ2lkICJyZWFkIG9iamVjdCBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibmVzbmUgYWRsYXLEsW7EsSBzdGFuZGFydCBnaXJkaSdkZW4gb2t1IgorCisjOiBidWlsdGluL25vdGVzLmM6OTU0IGJ1aWx0aW4vcHJ1bmUuYzoxMzAgYnVpbHRpbi93b3JrdHJlZS5jOjE2NAorbXNnaWQgImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIKK21zZ3N0ciAia2FsZMSxcm1hLCB5YWxuxLF6Y2EgZ8O2c3RlciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgbm90ZXMiCittc2dzdHIgImJ1ZGFubcSxxZ8gbm90bGFyxLEga2FsZMSxciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OAorbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAibm90IGJhxZ92dXJ1c3UiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTkKK21zZ2lkICJ1c2Ugbm90ZXMgZnJvbSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAibm90bGFyxLEgPG5vdC1ixZ92cj4nbmRhbiBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDM0IGJ1aWx0aW4vc3Rhc2guYzoxNjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgImJpbGlubWV5ZW4gYWx0a29tdXQ6ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUyCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8c2XDp2VuZWtsZXI+Li4uXSBbPCA8YsWfdnItbGlzdGU+IHwgPCA8bmVzbmUtIgorImxpc3RlPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTMKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9wdGlvbnM+Li4uXSA8YmFzZS1uYW1lPiBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxzw6dua2xyPi4uLl0gPGJhc2UtbmFtZT4gWzwgPGLFn3ZyLWxpc3RlPiB8IDwgPG5lc25lLWxpc3RlPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrZWQgb2JqZWN0IENSQyBmb3IgJXMiCittc2dzdHIgIiVzIGnDp2luIGhhdGFsxLEgcGFrZXRsZW5tacWfIG5lc25lIENSQydzaSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYWNrZWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAiJXMgacOnaW4gaGFzYXIgZ8O2cm3DvMWfIHBha2V0bGVubWnFnyBuZXNuZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGRlbHRhIGRldGVjdGVkIGZvciBvYmplY3QgJXMiCittc2dzdHIgIiVzIG5lc25lc2kgacOnaW4gw7Z6eWluZWxpIGRlbHRhIGFsZ8SxbGFuZMSxIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICJvcmRlcmVkICV1IG9iamVjdHMsIGV4cGVjdGVkICU8UFJJdTMyPiIKK21zZ3N0ciAiJXUgbmVzbmUgc2lwYXJpxZ8gdmVyaWxkaSwgJTxQUkl1MzI+IGJla2xlbml5b3JkdSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5NzIKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIHBhY2tzIGFyZSBzcGxpdCBkdWUgdG8gcGFjay5wYWNrU2l6ZUxpbWl0IgorbXNnc3RyICIiCisiYml0ZcWfbGVtIHlhesSxbcSxIGthcGF0xLFsxLF5b3IsIHBha2V0bGVyIHBhY2sucGFja1NpemVMaW1pdCBkb2xhecSxc8SxeWxhICIKKyJwYXLDp2FsYXJhIGF5csSxbG3EscWfIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk4NQorbXNnaWQgIldyaXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiTmVzbmVsZXIgeWF6xLFsxLF5b3IiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTA0NiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICIlcyBiaWxnaWxlcmkgYWzEsW5hbcSxeW9yIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvdGUgJTxQUkl1MzI+IG9iamVjdHMgd2hpbGUgZXhwZWN0aW5nICU8UFJJdTMyPiIKK21zZ3N0ciAiJTxQUkl1MzI+IG5lc25lIHlhesSxbGTEsSAoJTxQUkl1MzI+IGJla2xlbml5b3JkdSkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTI5NworbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICJiYXrEsSBuZXNuZWxlciBwYWtldGxlbm1lZGnEn2luZGVuIGRvbGF5xLEgYml0ZcWfbGVtIHlhesSxbcSxIGthcGF0xLFsxLF5b3IiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTcyNAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdmVyZmxvdyBpbiBwYWNrIGZvciAlcyIKK21zZ3N0ciAiJXMgacOnaW4gcGFrZXQgacOnaW5kZSBkZWx0YSB0YWJhbiBvZnNldCB0YcWfxLFtxLEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTczMworIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdXQgb2YgYm91bmQgZm9yICVzIgorbXNnc3RyICIlcyBpw6dpbiBkZWx0YSB0YWJhbiBvZnNldGkgc8SxbsSxcmxhcsSxbiBkxLHFn8SxbmRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwMDQKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICJOZXNuZWxlciBzYXnEsWzEsXlvciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3QgaGVhZGVyIG9mICVzIgorbXNnc3RyICIlcyBuZXNuZSDDvHN0YmlsZ2lzaSBheXLEscWfdMSxcsSxbGFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjIxOSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyMzUKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgIiVzIG5lc25lc2kgb2t1bmFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjIyMiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGluY29uc2lzdGVudCBvYmplY3QgbGVuZ3RoICglPFBSSXVNQVg+IHZzICU8UFJJdU1BWD4pIgorbXNnc3RyICIlcyBuZXNuZXNpIGnDp2luIHR1dGFyc8SxeiBuZXNuZSB1enVubHXEn3UgKCU8UFJJdU1BWD4gLyAlPFBSSXVNQVg+KSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjU5Cittc2dpZCAic3Vib3B0aW1hbCBwYWNrIC0gb3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAic3RhbmRhcnQgYWx0xLEgcGFrZXQgLSBiZWxsZWsgeWV0ZXJzaXoiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU3NAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWx0YSBjb21wcmVzc2lvbiB1c2luZyB1cCB0byAlZCB0aHJlYWRzIgorbXNnc3RyICJEZWx0YSBzxLFrxLHFn3TEsXJtYXPEsSAlZCBpxZ8gcGFyw6dhY8SxxJ/EsSBrdWxsYW7EsXlvciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYWNrIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGFnICVzIgorbXNnc3RyICIlcyBldGlrZXRpbmRlbiB1bGHFn8SxbGFiaWxpciBuZXNuZWxlciBwYWtldGxlbmVtaXlvciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODAxCittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiTmVzbmVsZXIgc8Sxa8SxxZ90xLFyxLFsxLF5b3IiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjgwNworbXNnaWQgImluY29uc2lzdGVuY3kgd2l0aCBkZWx0YSBjb3VudCIKK21zZ3N0ciAiZGVsdGEgc2F5xLFtxLFuZGEgdHV0YXJzxLF6bMSxayIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBlZGdlIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisic8SxbsSxciBuZXNuZXNpIG51bWFyYXPEsSBiZWtsZW5peW9yZHUsIGFubGFtc8SxeiB2ZXJpIGFsxLFuZMSxOlxuIgorIiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorIm5lc25lIG51bWFyYXPEsSBiZWtsZW5peW9yZHUsIGFubGFtc8SxeiB2ZXJpIGFsxLFuZMSxOlxuIgorIiVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5OTIKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAtLW1pc3NpbmciCittc2dzdHIgIi0tbWlzc2luZyBpw6dpbiBnZcOnZXJzaXogZGXEn2VyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwNTEgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTU5Cittc2dpZCAiY2Fubm90IG9wZW4gcGFjayBpbmRleCIKK21zZ3N0ciAicGFrZXQgaW5kZWtzaSBhw6fEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0IGF0ICVzIGNvdWxkIG5vdCBiZSBleGFtaW5lZCIKK21zZ3N0ciAiJXMga29udW11bmRha2kgZ2V2xZ9layBuZXNuZSBpbmNlbGVuZW1lZGkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE2NworbXNnaWQgInVuYWJsZSB0byBmb3JjZSBsb29zZSBvYmplY3QiCittc2dzdHIgImdldsWfZWsgbmVzbmUgem9ybGFuYW3EsXlvciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJldiAnJXMnIgorbXNnc3RyICJiaXIgcmV2aXp5b24gZGXEn2lsOiAnJXMnIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uICclcyciCittc2dzdHIgImhhdGFsxLEgcmV2aXp5b246ICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4OAorbXNnaWQgInVuYWJsZSB0byBhZGQgcmVjZW50IG9iamVjdHMiCittc2dzdHIgImVuIHNvbiBuZXNuZWxlciBla2xlbmVtaXlvciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgImRlc3Rla2xlbm1leWVuIGluZGVrcyBzw7xyw7xtw7wgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICJoYXRhbMSxIGluZGVrcyBzw7xyw7xtw7wgJyVzJyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzgzCittc2dpZCAiPHZlcnNpb24+Wyw8b2Zmc2V0Pl0iCittc2dzdHIgIjxzw7xyw7xtPlssPG9mc2V0Pl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4NAorbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgInBha2V0IGluZGVrcyBkb3N5YXPEsW7EsSBiZWxpcnRpbGVuIGlkeCBiacOnaW1pbmRlIHlheiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg3Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAiaGVyIMOnxLFrdMSxIHBha2V0aSBkb3N5YXPEsW7EsW4gb2xhYmlsZWNlayBlbiBiw7x5w7xrIGJveXV0dSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg5Cittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICJhbHRlcm5hdGlmIG5lc25lIG1hxJ9hemFzxLFuZGFuIMO2ZMO8bsOnIGFsxLFuYW4gbmVzbmVsZXJpIHlvayBzYXkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5MQorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAicGFrZXRsZW5tacWfIG5lc25lbGVyaSB5b2sgc2F5IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTMKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBvYmplY3RzIgorbXNnc3RyICJwYWtldCBwZW5jZXJlc2luaSBuZXNuZWxlcmxlIHPEsW7EsXJsYSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk1Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAicGFrZXQgcGVuY2VyZXNpbmkgbmVzbmUgbGltaXRpbmUgZWsgb2xhcmFrIGJlbGxlayBpbGUga8Sxc8SxdGxhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTcKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAib3J0YXlhIMOnxLFrYW4gcGFrZXR0ZSBvbGFiaWxlY2VrIGVuIGLDvHnDvGsgZGVsdGEgemluY2lyaW5pbiB1enVubHXEn3UiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5OQorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAidmFyIG9sYW4gZGVsdGFsYXLEsSB5ZW5pZGVuIGt1bGxhbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDAxCittc2dpZCAicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIKK21zZ3N0ciAidmFyIG9sYW4gbmVzbmVsZXJpIHllbmlkZW4ga3VsbGFuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDMKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgIk9GU19ERUxUQSBuZXNuZWxlcmkga3VsbGFuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDUKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICJlbiBpeWkgZGVsdGEgZcWfbGXFn21lbGVyaW5pIGFyYXJrZW4gacWfIHBhcsOnYWPEsWtsYXLEsW7EsSBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNworbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgImJvxZ8gYmlyIHBha2V0IMOnxLFrdMSxc8SxIG9sdcWfdHVybWEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwOQorbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgInJldml6eW9uIGRlxJ9pxZ9rZW5sZXJpbmkgc3RhbmRhcnQgZ2lyZGknZGVuIG9rdSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDExCittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgIm5lc25lbGVyaSBoZW7DvHogcGFrZXRsZW5tZXllbmxlcmUga8Sxc8SxdGxhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTQKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAiaGVyaGFuZ2kgYmlyIGJhxZ92dXJ1ZGFuIHVsYcWfxLFsYWJpbGlyIG9sYW4gbmVzbmVsZXJpIGnDp2VyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiCittc2dzdHIgImJhxZ92dXJ1IGfDvG5sw7zEn8O8IHRhcmFmxLFuZGFuIGJhxZ92dXJ1bGFuIG5lc25lbGVyaSBpw6dlciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDIwCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIKK21zZ3N0ciAiaW5kZWtzIHRhcmFmxLFuZGFuIGJhxZ92dXJ1bGFuIG5lc25lbGVyaSBpw6dlciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDIzCittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICJwYWtldGkgc3Rkb3V0J2Egw6fEsWt0xLEgdmVyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjUKK21zZ2lkICJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiCittc2dzdHIgInBha2V0bGVuZWNlayBuZXNuZWxlcmUgYmHFn3Z1cmFuIGV0aWtldCBuZXNuZWxlcmluaSBpw6dlciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI3Cittc2dpZCAia2VlcCB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJ1bGHFn8SxbGFtYXlhbiBuZXNuZWxlcmkgdHV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjkKK21zZ2lkICJwYWNrIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgInVsYcWfxLFsYW1heWFuIGdldsWfZWsgbmVzbmVsZXJpIHBha2V0bGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzMQorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICI8emFtYW4+J2RhbiBkYWhhIHllbmkgdWxhxZ/EsWxhbWF5YW4gbmVzbmVsZXJpIGHDpyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDM0Cittc2dpZCAidXNlIHRoZSBzcGFyc2UgcmVhY2hhYmlsaXR5IGFsZ29yaXRobSIKK21zZ3N0ciAiYXJhbMSxa2zEsSB1bGHFn8SxbGFiaWxpcmxpayBhbGdvcml0bWFzxLFuxLEga3VsbGFuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzYKK21zZ2lkICJjcmVhdGUgdGhpbiBwYWNrcyIKK21zZ3N0ciAiaW5jZSBwYWtldGxlciBvbHXFn3R1ciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDM4Cittc2dpZCAiY3JlYXRlIHBhY2tzIHN1aXRhYmxlIGZvciBzaGFsbG93IGZldGNoZXMiCittc2dzdHIgInPEscSfIGdldGlybWVsZXJlIHV5Z3VuIHBha2V0bGVyIG9sdcWfdHVyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDAKK21zZ2lkICJpZ25vcmUgcGFja3MgdGhhdCBoYXZlIGNvbXBhbmlvbiAua2VlcCBmaWxlIgorbXNnc3RyICJlxZ9saWsgZWRlbiAua2VlcCBkb3N5YXPEsW5hIGl5ZSBwYWtldGxlcmkgeW9rIHNheSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQyCittc2dpZCAiaWdub3JlIHRoaXMgcGFjayIKK21zZ3N0ciAiYnUgcGFrZXRpIHlvayBzYXkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0NAorbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgInBha2V0IHPEsWvEscWfdMSxcm1hIGTDvHpleWkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0NgorbXNnaWQgImRvIG5vdCBoaWRlIGNvbW1pdHMgYnkgZ3JhZnRzIgorbXNnc3RyICJhxZ/EsWxhcmxhIGdlbGVuIGfDtm5kZXJpbGVyaSBnaXpsZW1lIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDgKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKyJuZXNuZWxlcmluIHNhecSxbcSxbsSxIGjEsXpsYW5kxLFybWFrIGnDp2luIGXEn2VyIHZhcnNhIGJpciBiaXRlxZ9sZW0gaW5kZWtzaSBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1MAorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgInBha2V0IGluZGVrc2l5bGUgYmlybGlrdGUgYmlyIGJpdGXFn2xlbSBpbmRla3NpIGRlIHlheiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDU0Cittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggaWYgcG9zc2libGUiCittc2dzdHIgImXEn2VyIG9sYW5ha2zEsXlzYSBiaXIgYml0ZcWfbGVtIGluZGVrc2kgeWF6IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NTgKK21zZ2lkICJoYW5kbGluZyBmb3IgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICJla3NpayBuZXNuZWxlciBpw6dpbiBpxZ9sZW0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ2MQorbXNnaWQgImRvIG5vdCBwYWNrIG9iamVjdHMgaW4gcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICJuZXNuZWxlcmkgdmFhdMOnaSBwYWtldCBkb3N5YWxhcsSxeWxhIHBha2V0bGVtZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDYzCittc2dpZCAicmVzcGVjdCBpc2xhbmRzIGR1cmluZyBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAiZGVsdGEgc8Sxa8SxxZ90xLFybWFzxLEgc8SxcmFzxLFuZGEgYWRhbGFyYSB1eSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGNoYWluIGRlcHRoICVkIGlzIHRvbyBkZWVwLCBmb3JjaW5nICVkIgorbXNnc3RyICJkZWx0YSB6aW5jaXIgZGVyaW5sacSfaSAlZCDDp29rIGRlcmluLCAlZCB6b3JsYW7EsXlvciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDk3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2suZGVsdGFDYWNoZUxpbWl0IGlzIHRvbyBoaWdoLCBmb3JjaW5nICVkIgorbXNnc3RyICJwYWNrLmRlbHRhQ2FjaGVMaW1pdCDDp29rIHnDvGtzZWssICVkIHpvcmxhbsSxeW9yIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NTEKK21zZ2lkICItLW1heC1wYWNrLXNpemUgY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYSBwYWNrIGZvciB0cmFuc2ZlciIKK21zZ3N0ciAiLS1tYXgtcGFjay1zaXplLCBha3RhcsSxbSBpw6dpbiBiaXIgcGFrZXQgeWFwxLFtxLFuZGEga3VsbGFuxLFsYW1heiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTUzCittc2dpZCAibWluaW11bSBwYWNrIHNpemUgbGltaXQgaXMgMSBNaUIiCittc2dzdHIgIm9sYWJpbGVjZWsgZW4ga8O8w6fDvGsgcGFrZXQgYm95dXR1IGxpbWl0aSAxIE1pQidkxLFyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NTgKK21zZ2lkICItLXRoaW4gY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYW4gaW5kZXhhYmxlIHBhY2siCittc2dzdHIgIi0tdGhpbiBiaXIgaW5kZWtzbGVuZWJpbGlyIHBha2V0IHlhcMSxbcSxbmRhIGt1bGxhbsSxbGFtYXoiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU2MQorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLS11bnBhY2stdW5yZWFjaGFibGUgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1rZWVwLXVucmVhY2hhYmxlIHZlIC0tdW5wYWNrLXVucmVhY2hhYmxlIGJpcmJpcml5bGUgdXl1bXN1eiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTY3Cittc2dpZCAiY2Fubm90IHVzZSAtLWZpbHRlciB3aXRob3V0IC0tc3Rkb3V0IgorbXNnc3RyICItLWZpbHRlciwgLS1zdGRvdXQgb2xtYWRhbiBrdWxsYW7EsWxhbWF6IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM2MjcKK21zZ2lkICJFbnVtZXJhdGluZyBvYmplY3RzIgorbXNnc3RyICJOZXNuZWxlciBzYXnEsXAgZMO2a8O8bMO8eW9yIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvdGFsICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgcmV1c2VkICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgcGFjay0iCisicmV1c2VkICU8UFJJdTMyPiIKK21zZ3N0ciAiIgorIlRvcGxhbSAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHllbmlkZW4ga3VsbGFuxLFsYW4gJTxQUkl1MzI+IChkZWx0YSAiCisiJTxQUkl1MzI+KSwgeWVuaWRlbiBrdWxsYW7EsWxhbiBwYWtldCAlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6OAorbXNnaWQgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBwYWNrLXJlZnMgWzxzZcOnZW5la2xlcj5dIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE2Cittc2dpZCAicGFjayBldmVyeXRoaW5nIgorbXNnc3RyICJoZXIgxZ9leWkgcGFrZXRsZSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNworbXNnaWQgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIgorbXNnc3RyICJnZXbFn2VrIGJhxZ92dXJ1bGFyxLEgYnVkYSAow7ZudGFuxLFtbMSxKSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo5Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDIKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAiWWluZWxlbm1pxZ8gbmVzbmVsZXIga2FsZMSxcsSxbMSxeW9yIgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1wcm9ncmVzc10gWy0tZXhwaXJlIDx6YW1hbj5dIFstLV0gWzxkYWwtdWN1Pi4uLl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzEKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgImJ1ZGFubcSxxZ8gbmVzbmVsZXJpIGJpbGRpciIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNAorbXNnaWQgImV4cGlyZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICI8emFtYW4+J2RhbiBkYWhhIGVza2kgbmVzbmVsZXJpbiBow7xrbcO8bsO8IGthbGTEsXIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzYKK21zZ2lkICJsaW1pdCB0cmF2ZXJzYWwgdG8gb2JqZWN0cyBvdXRzaWRlIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAicHJvbWlzb3IgcGFrZXQgZG9zeWFsYXLEsW7EsW4gZMSxxZ/EsW5kYWtpIG5lc25lbGVyZSB0YXJhbWF5xLEga8Sxc8SxdGxhIgorCisjOiBidWlsdGluL3BydW5lLmM6MTUwCittc2dpZCAiY2Fubm90IHBydW5lIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICJiaXIgcHJlY2lvdXMtb2JqZWN0cyBkZXBvc3UgacOnaW5kZSBidWRhbWEgeWFwxLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUgYnVpbHRpbi9wdWxsLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICIlcyBpw6dpbiBnZcOnZXJzaXogZGXEn2VyOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NjcKK21zZ2lkICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1bGwgWzxzZcOnZW5la2xlcj5dIFs8ZGVwbz4gWzxixZ92ci1ibHJ0w6c+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjEyMgorbXNnaWQgImNvbnRyb2wgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJhbHRtb2TDvGxsZXJpbiDDtnp5aW5lbGkgZ2V0aXJpbG1lc2kgacOnaW4gZGVuZXRsZW1lIgorCisjOiBidWlsdGluL3B1bGwuYzoxMjYKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gbWVyZ2luZyIKK21zZ3N0ciAiQmlybGXFn3Rpcm1lIGlsZSBpbGdpbGkgc2XDp2VuZWtsZXIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjEyOQorbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAiZGXEn2nFn2lrbGlrbGVyaSBiaXJsZcWfdGlybWUgeWVyaW5lIHllbmlkZW4gdGVtZWxsZW5kaXJtZSBpbGUga2F0IgorCisjOiBidWlsdGluL3B1bGwuYzoxNTcgYnVpbHRpbi9yZWJhc2UuYzo0NzEgYnVpbHRpbi9yZXZlcnQuYzoxMjYKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgImlsZXJpIHNhcsSxbWEgaXppbiB2ZXIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2NgorbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIgcmViYXNlIgorbXNnc3RyICIiCisieWVuaWRlbiB0ZW1lbGxlbmRpcm1lIMO2bmNlc2kgdmUgc29ucmFzxLFuZGEga2VuZGlsacSfaW5kZW4genVsYWxhL3p1bGF5xLEgcGF0bGF0IgorCisjOiBidWlsdGluL3B1bGwuYzoxODIKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmciCittc2dzdHIgIkdldGlybWUgaWxlIGlsZ2lsaSBzZcOnZW5la2xlciIKKworIzogYnVpbHRpbi9wdWxsLmM6MTkyCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiem9ybGEgeWVyZWwgZGFsxLFuIMO8emVyaW5lIHlheiIKKworIzogYnVpbHRpbi9wdWxsLmM6MjAwCittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgcHVsbGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICJwYXJhbGVsZGUgw6dla2lsZW4gYWx0bW9kw7xsbGVyaW4gc2F5xLFzxLEiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciBwdWxsLmZmOiAlcyIKK21zZ3N0ciAicHVsbC5mZiBpw6dpbiBnZcOnZXJzaXogZGXEn2VyOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI2Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0ICIKKyJmZXRjaGVkLiIKK21zZ3N0ciAiIgorIkF6IMO2bmNlIGdldGlyZGnEn2luaXogcmVmZXJhbnNsYXIgYXJhc8SxbmRhIHllbmlkZW4gdGVtZWxsZW5kaXJtZSBpw6dpbiBhZGF5ICIKKyJ5b2suIgorCisjOiBidWlsdGluL3B1bGwuYzo0MjgKK21zZ2lkICIiCisiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCBmZXRjaGVkLiIKK21zZ3N0ciAiQXogw7ZuY2UgZ2V0aXJkacSfaW5peiBiYcWfdnVydWxhciBhcmFzxLFuZGEgYmlybGXFn3Rpcm1lIGnDp2luIGFkYXkgeW9rLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDI5Cittc2dpZCAiIgorIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKyJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKK21zZ3N0ciAiIgorIkdlbmVsbGlrbGUgYnUsIHV6YWsgdcOndGEgZcWfbGXFn21lc2kgb2xtYXlhbiBiaXIgam9rZXIgYmHFn3Z1cnUgYmVsaXJ0ZWNpXG4iCisic2HEn2xhZMSxxJ/EsW7EsXogYW5sYW3EsW5hIGdlbGlyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIiIKKyInJXMnIHV6YWsga29udW11bmRhbiDDp2VrbWUgeWFwbWFrIGlzdGVkaW5peiwgYW5jYWsgYmlyIGRhbCBiZWxpcnRtZWRpbml6LlxuIgorIkJ1LCBnZcOnZXJsaSBkYWzEsW7EsXogacOnaW4gw7ZudGFuxLFtbMSxIHlhcMSxbGFuZMSxcsSxbG3EscWfIHV6YWsga29udW0gb2xtYWTEscSfxLFuZGFuLFxuIgorImtvbXV0IHNhdMSxcsSxbmRhIGJpciBkYWwgYmVsaXJ0bWVuaXogZ2VyZWtpci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNyBidWlsdGluL3JlYmFzZS5jOjE0MDkgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3MworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgIsWedSBhbmRhIGJpciBkYWwgw7x6ZXJpbmRlIGRlxJ9pbHNpbml6LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM5IGJ1aWx0aW4vcHVsbC5jOjQ1NCBnaXQtcGFyc2UtcmVtb3RlLnNoOjc5Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIKK21zZ3N0ciAiIgorIkzDvHRmZW4gaGFuZ2kgZGFsYSBrYXLFn8SxIHllbmlkZW4gdGVtZWxsZW5kaXJtZSB5YXBtYWsgaXN0ZWRpxJ9pbml6aSBiZWxpcnRpbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MSBidWlsdGluL3B1bGwuYzo0NTYgZ2l0LXBhcnNlLXJlbW90ZS5zaDo4MgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKK21zZ3N0ciAiTMO8dGZlbiBoYW5naSBkYWwgaWxlIGJpcmxlxZ90aXJtZWsgaXN0ZWRpxJ9pbml6aSBiZWxpcnRpbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MiBidWlsdGluL3B1bGwuYzo0NTcKK21zZ2lkICJTZWUgZ2l0LXB1bGwoMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICJBeXLEsW50xLFsYXIgacOnaW46IGdpdC1wdWxsKDEpIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDQgYnVpbHRpbi9wdWxsLmM6NDUwIGJ1aWx0aW4vcHVsbC5jOjQ1OQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNDE1IGdpdC1wYXJzZS1yZW1vdGUuc2g6NjQKK21zZ2lkICI8cmVtb3RlPiIKK21zZ3N0ciAiPHV6YWsta29udW0+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NDQgYnVpbHRpbi9wdWxsLmM6NDU5IGJ1aWx0aW4vcHVsbC5jOjQ2NAorIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NQorbXNnaWQgIjxicmFuY2g+IgorbXNnc3RyICI8ZGFsPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcmViYXNlLmM6MTQwNyBnaXQtcGFyc2UtcmVtb3RlLnNoOjc1Cittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIkdlw6dlcmxpIGRhbCBpw6dpbiBpemxlbWUgYmlsZ2lzaSB5b2suIgorCisjOiBidWlsdGluL3B1bGwuYzo0NjEgZ2l0LXBhcnNlLXJlbW90ZS5zaDo5NQorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDoiCittc2dzdHIgIiIKKyJFxJ9lciBidSBkYWwgacOnaW4gaXpsZW1lIGJpbGdpc2kgYXlhcmxhbWFrIGlzdGVyc2VuaXogxZ91bnVubGEgeWFwYWJpbGlyc2luaXo6IgorCisjOiBidWlsdGluL3B1bGwuYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdG8gbWVyZ2Ugd2l0aCB0aGUgcmVmICclcydcbiIKKyJmcm9tIHRoZSByZW1vdGUsIGJ1dCBubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJZYXDEsWxhbmTEsXJtYW7EsXogdXphayBrb251bWRhbiAnJXMnIGJhxZ92dXJ1c3UgaWxlIGJpcmxlxZ90aXJtZXlpIHPDtnlsw7x5b3IsXG4iCisiYW5jYWsgYsO2eWxlIGJpciBiYcWfdnVydSBnZXRpcmlsbWVkaS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIGNvbW1pdCAlcyIKK21zZ3N0ciAiJXMgZ8O2bmRlcmlzaW5lIGVyacWfaWxlbWVkaSIKKworIzogYnVpbHRpbi9wdWxsLmM6ODU3Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICJ5ZW5pZGVuIHRlbWVsbGVuZGlybWUgacOnaW4gLS12ZXJpZnktc2lnbmF0dXJlIHlvayBzYXnEsWzEsXlvciIKKworIzogYnVpbHRpbi9wdWxsLmM6OTEyCittc2dpZCAiLS1bbm8tXWF1dG9zdGFzaCBvcHRpb24gaXMgb25seSB2YWxpZCB3aXRoIC0tcmViYXNlLiIKK21zZ3N0ciAiLS1bbm8tXWF1dG9zdGFzaCBzZcOnZW5lxJ9pIHlhbG7EsXpjYSAtLXJlYmFzZSBpbGUgZ2XDp2VybGkuIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICLEsG5kZWtzZSBla2xlbmVuIGRlxJ9pxZ9pa2xpa2xlcmxlIGhlbsO8eiBkb8SfbWFtxLHFnyBiaXIgZGFsIGfDvG5jZWxsZW5peW9yLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTI0Cittc2dpZCAicHVsbCB3aXRoIHJlYmFzZSIKK21zZ3N0ciAieWVuaWRlbiB0ZW1lbGxlbmRpcm1lIGlsZSDDp2VrIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjUKK21zZ2lkICJwbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJMw7x0ZmVuIG9ubGFyxLEgZ8O2bmRlcmluIHZleWEgenVsYWxhecSxbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKyJmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorImNvbW1pdCAlcy4iCittc2dzdHIgIiIKKyJHZXRpcm1lIGdlw6dlcmxpIGRhbCB1Y3VudSBnw7xuY2VsbGVkaS5cbiIKKyLDh2FsxLHFn21hIGHEn2FjxLFuxLF6ICVzIGfDtm5kZXJpc2luZGVuXG4iCisiaWxlcmkgc2FyxLFsxLF5b3IuIgorCisjOiBidWlsdGluL3B1bGwuYzo5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICIiCisiw4dhbMSxxZ9tYSBhxJ9hY8SxbsSxeiBpbGVyaSBzYXLEsWxhbcSxeW9yLlxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyLDp8Sxa3TEsXPEsW5kYW4gZ2VyZWtsaSBvbGFjYcSfxLFuxLEgZMO8xZ/DvG5kw7zEn8O8bsO8eiDDtmdlbGVyaVxuIgorImtheWRldHRpxJ9pbml6ZGVuIGVtaW4gb2xkdWt0YW4gc29ucmEga3VydGFybWEgacOnaW5cbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJrb211dHVudSDDp2FsxLHFn3TEsXLEsW4uIgorCisjOiBidWlsdGluL3B1bGwuYzo5NzEKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkLiIKK21zZ3N0ciAiQm/FnyBkYWwgdWN1bmEgYmlyZGVuIMOnb2sgZGFsIGJpcmxlxZ90aXJpbGVtZXouIgorCisjOiBidWlsdGluL3B1bGwuYzo5NzUKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIgorbXNnc3RyICJCaXJkZW4gw6dvayBkYWxhIHllbmlkZW4gdGVtZWxsZW5kaXJtZSB5YXDEsWxhbWF6LiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTgyCittc2dpZCAiY2Fubm90IHJlYmFzZSB3aXRoIGxvY2FsbHkgcmVjb3JkZWQgc3VibW9kdWxlIG1vZGlmaWNhdGlvbnMiCittc2dzdHIgIiIKKyJ5ZXJlbGRlIGtheWTEsSB5YXrEsWxtxLHFnyBhbHRtb2TDvGwgZGXEn2nFn2lrbGlrbGVyaXlsZSB5ZW5pZGVuIHRlbWVsbGVuZGlybWUgIgorInlhcMSxbGFtYXoiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE5Cittc2dpZCAiZ2l0IHB1c2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBwdXNoIFs8c2XDp2VuZWtsZXI+XSBbPGRlcG8+IFs8YsWfdnItYmxydMOnPi4uLl1dIgorCisjOiBidWlsdGluL3B1c2guYzoxMTIKK21zZ2lkICJ0YWcgc2hvcnRoYW5kIHdpdGhvdXQgPHRhZz4iCittc2dzdHIgInN0ZW5vZ3JhZml5aSA8ZXRpa2V0PiBvbG1hZGFuIGV0aWtldGxlIgorCisjOiBidWlsdGluL3B1c2guYzoxMjIKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUgeWFsbsSxemNhIGTDvHogaGVkZWYgYmHFn3Z1cnUgYWRsYXLEsW7EsSBrYWJ1bCBlZGVyIgorCisjOiBidWlsdGluL3B1c2guYzoxNjgKK21zZ2lkICIiCisiXG4iCisiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksIHNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIgorbXNnc3RyICIiCisiXG4iCisiQnUgc2XDp2VuZWtsZXJkZW4gYmlyaW5pIGthbMSxY8SxIG9sYXJhayBzZcOnbWVrIGnDp2luICdnaXQgaGVscCBjb25maWcnIGnDp2luZGUgIgorInB1c2guZGVmYXVsdCBnaXJkaXNpbmUgYmFrxLFuLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRFxuIgorIiVzIgorbXNnc3RyICIiCisiR2XDp2VybGkgZGFsxLFuxLF6xLFuIMO8c3RrYXluYWsgZGFsxLEsIGdlw6dlcmxpIGRhbMSxbsSxesSxbiBhZMSxeWxhXG4iCisiZcWfbGXFn21peW9yLiBVemFrIGtvbnVtZGFraSDDvHN0a2F5bmHEn2EgZ2l0bWVrIGnDp2luIMWfdW51IGt1bGxhbsSxbjpcbiIKKyJcbiIKKyJcdGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJVemFrIGtvbnVtZGFraSBheW7EsSBhZGzEsSBkYWxhIGl0bWVrIGnDp2luc2UgxZ91bnUga3VsbGFuxLFuOlxuIgorIlxuIgorIlx0Z2l0IHB1c2ggJXMgSEVBRFxuIgorIiVzIgorCisjOiBidWlsdGluL3B1c2guYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisic3RhdGUgbm93LCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgorbXNnc3RyICIiCisixZ51IGFuZGEgYmlyIGRhbCDDvHplcmluZGUgZGXEn2lsc2luaXouXG4iCisiR2XDp2VybGkgZHVydW1hIChheXLEsWsgSEVBRCkgeW9sIGHDp2FuIGdlw6dtacWfaSDFn2ltZGkgaXRtZWtcbiIKKyJpw6dpbiDFn3VudSBrdWxsYW7EsW46XG4iCisiXG4iCisiXHRnaXQgcHVzaCAlcyBIRUFEOjx1emFrLWtvbnVtLWRhbMSxbsSxbi1hZMSxPlxuIgorCisjOiBidWlsdGluL3B1c2guYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgIiIKKyJHZcOnZXJsaSAlcyBkYWzEsW7EsW4gYmlyIMO8c3RrYXluYWsgZGFsxLEgeW9rLlxuIgorIkdlw6dlcmxpIGRhbMSxIGl0bWVrIHZlIHV6YWsga29udW11IMO8c3RrYXluYWsgb2xhcmFrIGF5YXJsYW1ha1xuIgorImnDp2luIMWfdW51IGt1bGxhbsSxbjpcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAiR2XDp2VybGkgJXMgZGFsxLFuxLFuIGJpcmRlbiDDp29rIMO8c3RrYXluYcSfxLEgdmFyLCBpdG1lIHJlZGRlZGlsaXlvci4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisiJyVzJyB1emFrIGtvbnVtdW5hIGhhbmdpIHV6YWsgZGFsxLEgZ8O8bmNlbGxlbWVrIGnDp2luIG5leWluXG4iCisiaXRpbGVjZcSfaW5pIGJlbGlydG1lZGVuIGl0aXlvcnN1bnV6LCBhbmNhayBvIGdlw6dlcmxpICclcydcbiIKKyJkYWzEsW7EsXrEsW4gw7xzdGtheW5hxJ/EsSBkZcSfaWwuIgorCisjOiBidWlsdGluL3B1c2guYzoyNzAKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAiIgorIsSwdG1layBpw6dpbiBiaXIgYmHFn3Z1cnUgYmVsaXJ0ZWNpIGJlbGlydG1lZGluaXogdmUgcHVzaC5kZWZhdWx0IFwibm90aGluZ1wiLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjc3Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKyJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBJbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuXG4iCisiJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiR8O8bmNlbGxlbWVsZXIgcmVkZGVkaWxkaSDDp8O8bmvDvCBnZcOnZXJsaSBkYWzEsW7EsXrEsW4gdWN1IGtlbmRpc2luaW5cbiIKKyJ1emFrIGtvbnVtIGthcsWfxLF0xLFuZGFuIGdlcmlkZS4gWWVuaWRlbiBpdG1lZGVuIMO2bmNlIHV6YWsga29udW1kYWtpXG4iCisiZGXEn2nFn2lrbGlrbGVyaSBlbnRlZ3JlIGVkaW4gKMO2cm4uICdnaXQgcHVsbCcuLi4pLlxuIgorIkF5csSxbnTEsWxhciBpw6dpbiAnZ2l0IHB1c2ggLS1oZWxwJyBpw6dpbmRlICdOb3RlcyBhYm91dCBmYXN0LWZvcndhcmRzJ2EgYmFrxLFuLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjgzCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiR8O8bmNlbGxlbWVsZXIgcmVkZGVkaWxkaSDDp8O8bmvDvCBpdGlsbWnFnyBiaXIgZGFsIHVjdSBrZW5kaXNpbmluXG4iCisidXphayBrb251bSBrYXLFn8SxdMSxbmRhbiBnZXJpZGUuIFllbmlkZW4gaXRtZWRlbiDDtm5jZSBidSBkYWzEsSDDp8Sxa8SxxZ9cbiIKKyJ5YXDEsW4gdmUgdXphayBrb251bWRha2kgZGXEn2nFn2lrbGlrbGVyaSBlbnRlZ3JlIGVkaW4gKMO2cm4uICdnaXQgcHVsbCcuLi4pLlxuIgorIkF5csSxbnTEsWxhciBpw6dpbiAnZ2l0IHB1c2ggLS1oZWxwJyBpw6dpbmRlICdOb3RlcyBhYm91dCBmYXN0LWZvcndhcmRzJ2EgYmFrxLFuLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg5Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkfDvG5jZWxsZW1lbGVyIHJlZGRlZGlsZGkgw6fDvG5rw7wgdXphayBrb251bWRhIGhlbsO8eiB5ZXJlbGRlIGl5ZXNpIG9sbWFkxLHEn8SxbsSxelxuIgorImRlxJ9pxZ9pa2xpa2xlciB2YXIuIEJ1IGdlbmVsZGUgYmHFn2thIGJpciBkZXBvbnVuIGF5bsSxIGJhxZ92dXJ1eWEgaXRtZXNpbmRlblxuIgorImRvbGF5xLEgb2x1ci4gWWVuaWRlbiBpdG1lZGVuIMO2bmNlIHV6YWsga29udW1kYWtpIGRlxJ9pxZ9pa2xpa2xlcmkgZW50ZWdyZVxuIgorImV0bWVrIGlzdGV5ZWJpbGlyc2luaXogKMO2cm4uICdnaXQgcHVsbCcuLi4pLlxuIgorIkF5csSxbnTEsWxhciBpw6dpbiAnZ2l0IHB1c2ggLS1oZWxwJyBpw6dpbmRlICdOb3RlcyBhYm91dCBmYXN0LWZvcndhcmRzJ2EgYmFrxLFuLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk2Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAiR8O8bmNlbGxlbWVsZXIgcmVkZGVkaWxkaSDDp8O8bmvDvCBldGlrZXQgdXphayBrb251bWRhIGhhbGloYXrEsXJkYSB2YXIuIgorCisjOiBidWlsdGluL3B1c2guYzoyOTkKK21zZ2lkICIiCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIkfDtm5kZXJpIG9sbWF5YW4gYmlyIG5lc25leWUgacWfYXJldCBlZGVuIHV6YWsgYmHFn3Z1cnV5dSBnw7xuY2VsbGV5ZW1lelxuIgorInZleWEgLS1mb3JjZSBzZcOnZW5lxJ9pbmkga3VsbGFubWFkYW4gYmlyIHV6YWsgYmHFn3Z1cnV5dSBnw7ZuZGVyaVxuIgorIm9sbWF5YW4gYmlyIG5lc25leWUgacWfYXJldCBldG1lc2luaSBzYcSfbGFtYXPEsSBpw6dpbiBnw7xuY2VsbGV5ZW1lenNpbml6LlxuIgorCisjOiBidWlsdGluL3B1c2guYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICLFnnVyYXlhIGl0aWxpeW9yOiAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgImJhesSxIGJhxZ92dXJ1bGFyICclcycga29udW11bmEgaXRpbGVtZWRpIgorCisjOiBidWlsdGluL3B1c2guYzo1NDIKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICJkZXBvIgorCisjOiBidWlsdGluL3B1c2guYzo1NDMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjQKK21zZ2lkICJwdXNoIGFsbCByZWZzIgorbXNnc3RyICJ0w7xtIGJhxZ92dXJ1bGFyxLEgaXQiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NCBidWlsdGluL3NlbmQtcGFjay5jOjE2NgorbXNnaWQgIm1pcnJvciBhbGwgcmVmcyIKK21zZ3N0ciAidMO8bSBiYcWfdnVydWxhcsSxIHlhbnPEsWxhIgorCisjOiBidWlsdGluL3B1c2guYzo1NDYKK21zZ2lkICJkZWxldGUgcmVmcyIKK21zZ3N0ciAiYmHFn3Z1cnVsYXLEsSBzaWwiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NworbXNnaWQgInB1c2ggdGFncyAoY2FuJ3QgYmUgdXNlZCB3aXRoIC0tYWxsIG9yIC0tbWlycm9yKSIKK21zZ3N0ciAiZXRpa2V0bGVyaSBpdCAoLS1hbGwgdmV5YSAtLW1pcnJvciBpbGUga3VsbGFuxLFsYW1heikiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MCBidWlsdGluL3NlbmQtcGFjay5jOjE2NworbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgInpvcmxhIGfDvG5jZWxsZSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgxCittc2dpZCAiPHJlZm5hbWU+OjxleHBlY3Q+IgorbXNnc3RyICI8YmHFn3Z1cnVhZMSxPjo8YmVrbGU+IgorCisjOiBidWlsdGluL3B1c2guYzo1NTMgYnVpbHRpbi9zZW5kLXBhY2suYzoxODIKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAiYmHFn3Z1cnVudW4gZXNraSBkZcSfZXJpbmluIGJ1IGRlxJ9lcmRlIG9sbWFzxLFuxLEgZ2VyZWt0aXIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NgorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIHB1c2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiYWx0bW9kw7xsbGVyaW4gw7Z6eWluZWxpIGl0aWxtZXNpbmkgZGVuZXRsZSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU4IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAiaW5jZSBwYWtldCBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OSBidWlsdGluL3B1c2guYzo1NjAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjEKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYyCittc2dpZCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iCittc2dzdHIgInBha2V0IHByb2dyYW3EsW7EsSBhbCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYxCittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgImdpdCBwdWxsL3N0YXR1cyBpw6dpbiDDvHN0a2F5bmFrIGF5YXJsYSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY0Cittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgInllcmVsZGUga2FsZMSxcsSxbGFuIGJhxZ92dXJ1bGFyxLEgYnVkYSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY2Cittc2dpZCAiYnlwYXNzIHByZS1wdXNoIGhvb2siCittc2dzdHIgInByZS1wdXNoIGthbmNhc8SxbsSxIGF0bGEiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NworbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAiZWtzaWsgYW5jYWsgaWxnaWxpIGV0aWtldGxlcmkgaXQiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MCBidWlsdGluL3NlbmQtcGFjay5jOjE2OQorbXNnaWQgIkdQRyBzaWduIHRoZSBwdXNoIgorbXNnc3RyICJpdG1leWkgR1BHIGlsZSBpbXphbGEiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MiBidWlsdGluL3NlbmQtcGFjay5jOjE3NgorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICJ1emFrIHRhcmFmdGEgYXRvbXNhbCBpxZ9sZW0gaXN0ZSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTkwCittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIi0tZGVsZXRlOyAtLWFsbCwgLS1taXJyb3IgdmUgLS10YWdzIGlsZSB1eXVtc3V6IgorCisjOiBidWlsdGluL3B1c2guYzo1OTIKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiLS1kZWxldGUgYmlyIGJhxZ92dXJ1IG9sbWFkYW4gYW5sYW0gaWZhZGUgZXRtaXlvciIKKworIzogYnVpbHRpbi9wdXNoLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBvc2l0b3J5ICclcyciCittc2dzdHIgImhhdGFsxLEgZGVwbyAnJXMnIgorCisjOiBidWlsdGluL3B1c2guYzo2MTMKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSAiCisicmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAiIgorIllhcMSxbGFuZMSxcsSxbGFuIGl0bWUgaGVkZWZpIHlvay5cbiIKKyJZYSBVUkwneWkga29tdXQgc2F0xLFyxLFuZGFuIGJlbGlydGluIHlhIGRhIMWfdW51IGt1bGxhbmFyYWsgYmlyIHV6YWsga29udW0gIgorImRlcG9zdSB5YXDEsWxhbmTEsXLEsW46XG4iCisiXG4iCisiXHRnaXQgcmVtb3RlIGFkZCA8YWQ+IDx1cmw+XG4iCisiXG4iCisiYXJkxLFuZGFuIHV6YWsga29udW0gYWTEsW7EsSBrdWxsYW5hcmFrIGl0aW46XG4iCisiXG4iCisiXHRnaXQgcHVzaCA8YWQ+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYyOAorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgdmUgLS10YWdzIGJpcmJpcml5bGUgdXl1bXN1eiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjMwCittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1hbGwgYmHFn3Z1cnUgYmVsaXJ0ZcOnbGVyaXlsZSBiaXJsZcWfdGlyaWxlbWV6IgorCisjOiBidWlsdGluL3B1c2guYzo2MzQKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbWlycm9yIHZlIC0tdGFncyBiaXJiaXJpeWxlIHV5dW1zdXoiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzNgorbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tbWlycm9yIGJhxZ92dXJ1IGJlbGlydGXDp2xlcml5bGUgYmlybGXFn3RpcmlsZW1leiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM5Cittc2dpZCAiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIHZlIC0tbWlycm9yIGJpcmJpcml5bGUgdXl1bXN1eiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjQzCittc2dpZCAicHVzaCBvcHRpb25zIG11c3Qgbm90IGhhdmUgbmV3IGxpbmUgY2hhcmFjdGVycyIKK21zZ3N0ciAiaXRtZSBzZcOnZW5la2xlcmluZGUgeWVuaSBzYXTEsXIga2FyYWt0ZXJsZXJpIG9sbWFtYWzEsSIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtYmFzZT4uLjxvbGQtdGlwPiA8bmV3LWJhc2U+Li48bmV3LXRpcD4iCittc2dzdHIgIiIKKyJnaXQgcmFuZ2UtZGlmZiBbPHNlw6dlbmVrbGVyPl0gPG9sZC1iYXNlPi4uPG9sZC10aXA+IDxuZXctYmFzZT4uLjxuZXctdGlwPiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OQorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtdGlwPi4uLjxuZXctdGlwPiIKK21zZ3N0ciAiZ2l0IHJhbmdlLWRpZmYgWzxzZcOnZW5la2xlcj5dIDxvbGQtdGlwPi4uLjxuZXctdGlwPiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MTAKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8YmFzZT4gPG9sZC10aXA+IDxuZXctdGlwPiIKK21zZ3N0ciAiZ2l0IHJhbmdlLWRpZmYgWzxzZcOnZW5la2xlcj5dIDxiYXNlPiA8b2xkLXRpcD4gPG5ldy10aXA+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyMgorbXNnaWQgIlBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiCittc2dzdHIgIm9sdcWfdW11biB0YXJ0xLFsZMSxxJ/EsSB5w7x6ZGUiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI0Cittc2dpZCAidXNlIHNpbXBsZSBkaWZmIGNvbG9ycyIKK21zZ3N0ciAieWFsxLFuIGRpZmYgcmVua2xlcmluaSBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAibm90ZXMiCittc2dzdHIgIm5vdGxhciIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjYKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBsb2cnIgorbXNnc3RyICInZ2l0IGxvZydhIGFrdGFyxLFsZMSxIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo1MCBidWlsdGluL3JhbmdlLWRpZmYuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyAuLiBpbiByYW5nZTogJyVzJyIKK21zZ3N0ciAiZXJpbWRlIC4uIHlvazogJyVzJyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NjQKK21zZ2lkICJzaW5nbGUgYXJnIGZvcm1hdCBtdXN0IGJlIHN5bW1ldHJpYyByYW5nZSIKK21zZ3N0ciAidGVrbGkgZGXEn2nFn2tlbiBiacOnaW1pIHNpbWV0cmlrIGVyaW0gb2xtYWzEsSIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NzkKK21zZ2lkICJuZWVkIHR3byBjb21taXQgcmFuZ2VzIgorbXNnc3RyICJpa2kgZ8O2bmRlcmkgZXJpbWkgZ2VyZWtsaSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzo0MQorbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTzDtm5laz4pIFstIgorInUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxkb3N5YT5dICgtLWVtcHR5IHwgPGHEn2FjxLFtc8SxMT4gWzxhxJ9hY8SxbXPEsTI+IFs8YcSfYWPEsW1zxLEzPl1dKSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjQKK21zZ2lkICJ3cml0ZSByZXN1bHRpbmcgaW5kZXggdG8gPGZpbGU+IgorbXNnc3RyICJvcnRheWEgw6fEsWthbiBpbmRla3NpIDxkb3N5YT4neWEgeWF6IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICJ5YWxuxLF6Y2EgaW5kZWtzaSBib8WfYWx0IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyOQorbXNnaWQgIk1lcmdpbmciCittc2dzdHIgIkJpcmxlxZ90aXJpbGl5b3IiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMxCittc2dpZCAicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIKK21zZ3N0ciAiYmlyIG9rdW1heWEgZWsgb2xhcmFrIGJpciBiaXJsZcWfdGlybWUgZ2Vyw6dla2xlxZ90aXIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMzCittc2dpZCAiMy13YXkgbWVyZ2UgaWYgbm8gZmlsZSBsZXZlbCBtZXJnaW5nIHJlcXVpcmVkIgorbXNnc3RyICJkb3N5YSBkw7x6ZXlpbmRlIGJpcmxlxZ90aXJtZSBnZXJla21peW9yc2EgMyB5w7ZubMO8IGJpcmxlxZ90aXIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM1Cittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAiZWtsZW1lbGVyIHZlIGthbGTEsXJtYWxhciB2YXJsxLHEn8SxbmRhIDMgecO2bmzDvCBiaXJsZcWfdGlyIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgIi1tIGlsZSBheW7EsSwgYW5jYWsgYmlybGXFn3RpcmlsbWV5ZW4gZ2lyZGlsZXJpIGF0YXIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM4Cittc2dpZCAiPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICI8YWx0ZGl6aW4+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzkKK21zZ2lkICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiYcSfYWPEsSBpbmRla3NlIDxhbHRkaXppbj4vIGFsdMSxbmRhIG9rdSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDIKK21zZ2lkICJ1cGRhdGUgd29ya2luZyB0cmVlIHdpdGggbWVyZ2UgcmVzdWx0IgorbXNnc3RyICJiaXJsZcWfdGlybWUgc29udWN1eWxhIMOnYWzEscWfbWEgYcSfYWPEsW7EsSBnw7xuY2VsbGXFn3RpciIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDQKK21zZ2lkICJnaXRpZ25vcmUiCittc2dzdHIgImdpdGlnbm9yZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDUKK21zZ2lkICJhbGxvdyBleHBsaWNpdGx5IGlnbm9yZWQgZmlsZXMgdG8gYmUgb3ZlcndyaXR0ZW4iCittc2dzdHIgImHDp8Sxa8OnYSB5b2sgc2F5xLFsYW4gZG9zeWFsYXLEsW4gw7x6ZXJpbmUgeWF6xLFsbWFzxLFuYSBpemluIHZlciIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDgKK21zZ2lkICJkb24ndCBjaGVjayB0aGUgd29ya2luZyB0cmVlIGFmdGVyIG1lcmdpbmciCittc2dzdHIgImJpcmxlxZ90aXJtZWRlbiBzb25yYSDDp2FsxLHFn21hIGHEn2FjxLFuxLEgZGVuZXRsZW1lIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OQorbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAiaW5kZWtzaSB2ZXlhIMOnYWzEscWfbWEgYcSfYWPEsW7EsSBnw7xuY2VsbGVtZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTEKK21zZ2lkICJza2lwIGFwcGx5aW5nIHNwYXJzZSBjaGVja291dCBmaWx0ZXIiCittc2dzdHIgImFyYWzEsWtsxLEgw6fEsWvEscWfIHPDvHpnZWNpIHV5Z3VsYW1hecSxIGF0bGEiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTUzCittc2dpZCAiZGVidWcgdW5wYWNrLXRyZWVzIgorbXNnc3RyICJ1bnBhY2stdHJlZXMgaGF0YWxhcsSxbsSxIGF5xLFrbGEiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTU3Cittc2dpZCAic3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMiCittc2dzdHIgImdlcmliaWxkaXJpbSBpbGV0aWxlcmluaSBnaXpsZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxODgKK21zZ2lkICJZb3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAiw5ZuY2VsaWtsZSBnZcOnZXJsaSBpbmRla3Npbml6aSDDp8O2em1lbGlzaW5peiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozMgorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+IHwgLS1rZWVwLWJhc2VdICIKKyJbPHVwc3RyZWFtPiBbPGJyYW5jaD5dXSIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8a29tdXQ+XSBbLS1vbnRvIDx5ZW5pLXRlbWVsPiB8IC0ta2VlcC0iCisiYmFzZV0gWzzDvHN0a2F5bmFrPiBbPGRhbD5dXSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNAorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XSAtLXJvb3QgWzxicmFuY2g+XSIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8a29tdXQ+XSBbLS1vbnRvIDx5ZW5pLXRlbWVsPl0gLS1yb290ICIKKyJbPGRhbD5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2Cittc2dpZCAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorbXNnc3RyICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc1IGJ1aWx0aW4vcmViYXNlLmM6MTk5IGJ1aWx0aW4vcmViYXNlLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAia3VsbGFuxLFsYW1heiB5YXDEsWxhY2FrbGFyIGxpc3Rlc2k6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIgorbXNnc3RyICJnZcOnaWNpICVzIG9sdcWfdHVydWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6Mjk4Cittc2dpZCAiY291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgImV0a2lsZcWfaW1saSBvbGFyYWsgaW1sZW5lbWVkaSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNTIKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgdG9kbyBsaXN0IgorbXNnc3RyICJ5YXDEsWxhY2FrbGFyIGxpc3Rlc2kgb2x1xZ90dXJ1bGFtYWTEsSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozOTEKK21zZ2lkICJhIGJhc2UgY29tbWl0IG11c3QgYmUgcHJvdmlkZWQgd2l0aCAtLXVwc3RyZWFtIG9yIC0tb250byIKK21zZ3N0ciAiYmlyIHRhYmFuIGfDtm5kZXJpc2kgLS11cHN0cmVhbSB2ZXlhIC0tb250byBpbGUgc2HEn2xhbm1hbMSxZMSxciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NjEKK21zZ2lkICJnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxzZcOnZW5la2xlcj5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NCBidWlsdGluL3JlYmFzZS5jOjE1NTAKK21zZ2lkICIoREVQUkVDQVRFRCkga2VlcCBlbXB0eSBjb21taXRzIgorbXNnc3RyICIoS1VMTEFOSU0gREnFnkkpIGJvxZ8gZ8O2bmRlcmlsZXJpIHR1dCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzggYnVpbHRpbi9yZXZlcnQuYzoxMjgKK21zZ2lkICJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgImJvxZ8gaWxldGlsaSBnw7ZuZGVyaWxlcmUgaXppbiB2ZXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgwCittc2dpZCAicmViYXNlIG1lcmdlIGNvbW1pdHMiCittc2dzdHIgImJpcmxlxZ90aXJtZSBnw7ZuZGVyaWxlcmluaSB5ZW5pZGVuIHRlbWVsbGVuZGlyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4MgorbXNnaWQgImtlZXAgb3JpZ2luYWwgYnJhbmNoIHBvaW50cyBvZiBjb3VzaW5zIgorbXNnc3RyICJrdXplbmxlcmluIG9yaWppbmFsIGRhbCBub2t0YWxhcsSxbsSxIHR1dCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODQKK21zZ2lkICJtb3ZlIGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHNxdWFzaCEvZml4dXAhIgorbXNnc3RyICJzcXVhc2ghL2ZpeHVwISBpbGUgYmHFn2xheWFuIGfDtm5kZXJpbGVyaSB0YcWfxLEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg1Cittc2dpZCAic2lnbiBjb21taXRzIgorbXNnc3RyICJnw7ZuZGVyaWxlcmkgaW16YWxhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NyBidWlsdGluL3JlYmFzZS5jOjE0OTAKK21zZ2lkICJkaXNwbGF5IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICLDvHN0a2F5bmFrdGEgbmVsZXJpbiBkZcSfacWfdGnEn2luaSBnw7ZzdGVyZW4gYmlyIGRpZmZzdGF0IGfDtnLDvG50w7xsZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODkKK21zZ2lkICJjb250aW51ZSByZWJhc2UiCittc2dzdHIgInllbmlkZW4gdGVtZWxsZW5kaXJtZXlpIHPDvHJkw7xyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MQorbXNnaWQgInNraXAgY29tbWl0IgorbXNnc3RyICJnw7ZuZGVyaXlpIGF0bGEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkyCittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJ5YXDEsWxhY2FrbGFyIGxpc3Rlc2luaSBkw7x6ZW5sZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTQKK21zZ2lkICJzaG93IHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICJnZcOnZXJsaSB5YW1hecSxIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk3Cittc2dpZCAic2hvcnRlbiBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgInlhcMSxbGFjYWtsYXIgbGlzdGVzaW5kZWtpIGfDtm5kZXJpIG51bWFyYWxhcsSxbsSxIGvEsXNhbHQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk5Cittc2dpZCAiZXhwYW5kIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAieWFwxLFsYWNha2xhciBsaXN0ZXNpbmRla2kgZ8O2bmRlcmkgbnVtYXJhbGFyxLFuxLEgZ2VuacWfbGV0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMQorbXNnaWQgImNoZWNrIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgInlhcMSxbGFjYWtsYXIgbGlzdGVzaW5pIGRlbmV0bGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAzCittc2dpZCAicmVhcnJhbmdlIGZpeHVwL3NxdWFzaCBsaW5lcyIKK21zZ3N0ciAiZml4dXAvc3F1YXNoIHNhdMSxcmxhcsSxbsSxIHllbmlkZW4gZMO8emVubGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA1Cittc2dpZCAiaW5zZXJ0IGV4ZWMgY29tbWFuZHMgaW4gdG9kbyBsaXN0IgorbXNnc3RyICJ5YXDEsWxhY2FrbGFyIGxpc3Rlc2luZSAnZXhlYycga29tdXRsYXLEsSBla2xlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwNgorbXNnaWQgIm9udG8iCittc2dzdHIgIsO8emVyaW5lIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwOQorbXNnaWQgInJlc3RyaWN0LXJldmlzaW9uIgorbXNnc3RyICJyZXN0cmljdC1yZXZpc2lvbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDkKK21zZ2lkICJyZXN0cmljdCByZXZpc2lvbiIKK21zZ3N0ciAicmV2aXp5b251IHPEsW7EsXJsYSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTEKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLW9udG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTEyCittc2dpZCAic3F1YXNoIG9udG8iCittc2dzdHIgInTEsWvEscWfdMSxciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTQKK21zZ2lkICJ0aGUgdXBzdHJlYW0gY29tbWl0IgorbXNnc3RyICLDvHN0a2F5bmFrIGfDtm5kZXJpc2kiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE2Cittc2dpZCAiaGVhZC1uYW1lIgorbXNnc3RyICJoZWFkLW5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE2Cittc2dpZCAiaGVhZCBuYW1lIgorbXNnc3RyICJkYWwgdWN1IGFkxLEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIxCittc2dpZCAicmViYXNlIHN0cmF0ZWd5IgorbXNnc3RyICJ5ZW5pZGVuIHRlbWVsbGVuZGlybWUgc3RyYXRlamlzaSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjIKK21zZ2lkICJzdHJhdGVneS1vcHRzIgorbXNnc3RyICJzdHJhdGVneS1vcHRzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMworbXNnaWQgInN0cmF0ZWd5IG9wdGlvbnMiCittc2dzdHIgInN0cmF0ZWppIHNlw6dlbmVrbGVyaSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjQKK21zZ2lkICJzd2l0Y2gtdG8iCittc2dzdHIgInN3aXRjaC10byIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjUKK21zZ2lkICJ0aGUgYnJhbmNoIG9yIGNvbW1pdCB0byBjaGVja291dCIKK21zZ3N0ciAiw6fEsWvEscWfIHlhcMSxbGFjYWsgZGFsIHZleWEgZ8O2bmRlcmkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI2Cittc2dpZCAib250by1uYW1lIgorbXNnc3RyICJvbnRvLW5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI2Cittc2dpZCAib250byBuYW1lIgorbXNnc3RyICInb250bycgYWTEsToiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI3Cittc2dpZCAiY21kIgorbXNnc3RyICJrb211dCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjcKK21zZ2lkICJ0aGUgY29tbWFuZCB0byBydW4iCittc2dzdHIgIsOnYWzEscWfdMSxcsSxbGFjYWsga29tdXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTMwIGJ1aWx0aW4vcmViYXNlLmM6MTU4NAorbXNnaWQgImF1dG9tYXRpY2FsbHkgcmUtc2NoZWR1bGUgYW55IGBleGVjYCB0aGF0IGZhaWxzIgorbXNnc3RyICJiYcWfYXLEsXPEsXogb2xhbiBoZXIgJ2V4ZWMnaSBrZW5kaWxpxJ9pbmRlbiB5ZW5pZGVuIHphbWFubGEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTQ2Cittc2dpZCAiLS1bbm8tXXJlYmFzZS1jb3VzaW5zIGhhcyBubyBlZmZlY3Qgd2l0aG91dCAtLXJlYmFzZS1tZXJnZXMiCittc2dzdHIgIiIKKyItLVtuby1dcmViYXNlLWNvdXNpbnMgc2XDp2VuZcSfaW5pbiAtLXJlYmFzZS1tZXJnZXMgb2xtYWRhbiBoacOnYmlyIGV0a2lzaSB5b2siCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiJXMgYmlyIGV0a2lsZcWfaW1saSB5ZW5pZGVuIHRlbWVsbGVuZGlybWUgZ2VyZWt0aXJpeW9yIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0ICdvbnRvJzogJyVzJyIKK21zZ3N0ciAiJ29udG8nIGFsxLFuYW1hZMSxOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYyNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yaWctaGVhZDogJyVzJyIKK21zZ3N0ciAiZ2XDp2Vyc2l6IG9yaWctaGVhZDogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgaW52YWxpZCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogJyVzJyIKK21zZ3N0ciAiZ2XDp2Vyc2l6IGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlIHlvayBzYXnEsWzEsXlvcjogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo3MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiJyVzJyBva3VuYW1hZMSxIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIiVzIGRlcG9sYW5hbcSxeW9yIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjg1MworbXNnaWQgImNvdWxkIG5vdCBkZXRlcm1pbmUgSEVBRCByZXZpc2lvbiIKK21zZ3N0ciAiSEVBRCByZXZpenlvbnUgc2FwdGFuYW1hZMSxIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjk3NiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEKK21zZ2lkICIiCisiUmVzb2x2ZSBhbGwgY29uZmxpY3RzIG1hbnVhbGx5LCBtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgd2l0aFxuIgorIlwiZ2l0IGFkZC9ybSA8Y29uZmxpY3RlZF9maWxlcz5cIiwgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJZb3UgY2FuIGluc3RlYWQgc2tpcCB0aGlzIGNvbW1pdDogcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIi5cbiIKKyJUbyBhYm9ydCBhbmQgZ2V0IGJhY2sgdG8gdGhlIHN0YXRlIGJlZm9yZSBcImdpdCByZWJhc2VcIiwgcnVuIFwiZ2l0IHJlYmFzZSAtLSIKKyJhYm9ydFwiLiIKK21zZ3N0ciAiIgorIlTDvG0gw6dha8SxxZ9tYWxhcsSxIGVsIGlsZSDDp8O2esO8biwgb25sYXLEsSBcImdpdCBhZGQvcm0gPMOnYWvEscWfYW4tZG9zeWFsYXI+XCJcbiIKKyJpbGUgdGFtYW0gb2xhcmFrIGltbGV5aW4sIGFyZMSxbmRhbiBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIMOnYWzEscWfdMSxcsSxbi5cbiIKKyJCdW51biB5ZXJpbmUgYnUgZ8O2bmRlcml5aSBhdGxheWFiaWxpcnNpbml6OiBcImdpdCByZWJhc2UgLS1za2lwXCIgeWFwxLFuLlxuIgorIsSwcHRhbCBlZGlwIFwiZ2l0IHJlYmFzZVwiIMO2bmNlc2luZSBnZXJpIGTDtm5tZWsgacOnaW4gXCJnaXQgcmViYXNlIC0tYWJvcnRcIlxuIgorIsOnYWzEscWfdMSxcsSxbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiZ2l0IGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIHByZXBhcmluZyB0aGUgcGF0Y2hlcyB0byByZXBsYXlcbiIKKyJ0aGVzZSByZXZpc2lvbnM6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiQXMgYSByZXN1bHQsIGdpdCBjYW5ub3QgcmViYXNlIHRoZW0uIgorbXNnc3RyICIiCisiXG4iCisiR2l0LCB5YW1hbGFyxLEgYnUgcmV2aXp5b25sYXLEsSB5ZW5pZGVuIG95bmF0bWFrIGnDp2luIGhhesSxcmxhcmtlbiBiaXJcbiIKKyJoYXRheWxhIGthcsWfxLFsYcWfdMSxOlxuIgorIlxuIgorIlx0JXNcbiIKKyJcbiIKKyJCdW51biBzb251Y3Ugb2xhcmFrIGdpdCBvbmxhcsSxIHllbmlkZW4gdGVtZWxsZW5kaXJlbWl5b3IuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVucmVjb2duaXplZCBlbXB0eSB0eXBlICclcyc7IHZhbGlkIHZhbHVlcyBhcmUgXCJkcm9wXCIsIFwia2VlcFwiLCBhbmQgXCJhc2siCisiXCIuIgorbXNnc3RyICIiCisidGFuxLFtbGFuYW1heWFuIGJvxZ8gdMO8ciAnJXMnOyBnZcOnZXJsaSB0w7xybGVyOiBcImRyb3BcIiwgXCJrZWVwXCIgdmUgXCJhc2tcIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlc1xuIgorIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC5cbiIKKyJTZWUgZ2l0LXJlYmFzZSgxKSBmb3IgZGV0YWlscy5cbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAnPGJyYW5jaD4nXG4iCisiXG4iCittc2dzdHIgIiIKKyIlc1xuIgorIkzDvHRmZW4gaGFuZ2kgZGFsYSBrYXLFn8SxIHllbmlkZW4gdGVtZWxsZW5kaXJtZWsgaXN0ZWRpxJ9pbml6aSBiZWxpcnRpbi5cbiIKKyJBeXLEsW50xLFsYXIgacOnaW46IGdpdC1yZWJhc2UoMSlcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgJzxkYWw+J1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJFxJ9lciBidSBkYWwgacOnaW4gaXpsZW1lIGJpbGdpc2kgYXlhcmxhbWFrIGlzdGl5b3JzYW7EsXogxZ91bnUga3VsbGFuxLFuOlxuIgorIlxuIgorIlx0Z2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88ZGFsPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDcKK21zZ2lkICJleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICInZXhlYycga29tdXRsYXLEsSB5ZW5pc2F0xLFybGFyIGnDp2VyZW1leiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDUxCittc2dpZCAiZW1wdHkgZXhlYyBjb21tYW5kIgorbXNnc3RyICJib8WfICdleGVjJyBrb211dHUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MQorbXNnaWQgInJlYmFzZSBvbnRvIGdpdmVuIGJyYW5jaCBpbnN0ZWFkIG9mIHVwc3RyZWFtIgorbXNnc3RyICLDvHN0a2F5bmFrIHllcmluZSB2ZXJpbGVuIGRhbMSxbiDDvHplcmluZSB5ZW5pZGVuIHRlbWVsbGVuZGlyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODMKK21zZ2lkICJ1c2UgdGhlIG1lcmdlLWJhc2Ugb2YgdXBzdHJlYW0gYW5kIGJyYW5jaCBhcyB0aGUgY3VycmVudCBiYXNlIgorbXNnc3RyICLDvHN0a2F5bmHEn8SxbiBiaXJsZcWfdGlybWUgdGVtZWxpbmkgdmUgZGFsxLFuxLEgZ2XDp2VybGkgdGVtZWwgb2xhcmFrIGt1bGxhbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg1Cittc2dpZCAiYWxsb3cgcHJlLXJlYmFzZSBob29rIHRvIHJ1biIKK21zZ3N0ciAicHJlLXJlYmFzZSBrYW5jYXPEsW7EsW4gw6dhbMSxxZ9tYXPEsW5hIGl6aW4gdmVyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODcKK21zZ2lkICJiZSBxdWlldC4gaW1wbGllcyAtLW5vLXN0YXQiCittc2dzdHIgInNlc3NpeiBvbCAoLS1uby1zdGF0IGltYSBlZGVyKSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDkzCittc2dpZCAiZG8gbm90IHNob3cgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICLDvHN0a2F5bmFrdGEgbmVsZXJpbiBkZcSfacWfdGnEn2luaSBnw7ZzdGVyZW4gZGlmZnN0YXQgZ8O2c3Rlcm1lIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTYKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5OiBsaW5lIHRvIGVhY2ggY29tbWl0IgorbXNnc3RyICJoZXIgZ8O2bmRlcml5ZSBiaXIgU2lnbmVkLW9mZi1ieSBzYXTEsXLEsSBla2xlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTggYnVpbHRpbi9yZWJhc2UuYzoxNTAyIGJ1aWx0aW4vcmViYXNlLmM6MTUwNAorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFtJyIKK21zZ3N0ciAiJ2dpdCBhbSdhIGFrdGFyxLFsZMSxIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDYgYnVpbHRpbi9yZWJhc2UuYzoxNTA4Cittc2dpZCAicGFzc2VkIHRvICdnaXQgYXBwbHknIgorbXNnc3RyICInZ2l0IGFwcGx5J2EgYWt0YXLEsWxkxLEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxMCBidWlsdGluL3JlYmFzZS5jOjE1MTMKK21zZ2lkICJjaGVycnktcGljayBhbGwgY29tbWl0cywgZXZlbiBpZiB1bmNoYW5nZWQiCittc2dzdHIgImRlxJ9pxZ90aXJpbG1lbWnFnyBvbHNhIGJpbGUgdMO8bSBnw7ZuZGVyaWxlcmkgc2XDpy1hbCB5YXAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxNQorbXNnaWQgImNvbnRpbnVlIgorbXNnc3RyICJzw7xyZMO8ciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTE4Cittc2dpZCAic2tpcCBjdXJyZW50IHBhdGNoIGFuZCBjb250aW51ZSIKK21zZ3N0ciAiZ2XDp2VybGkgeWFtYXnEsSBhdGxhIHZlIHPDvHJkw7xyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjAKK21zZ2lkICJhYm9ydCBhbmQgY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2giCittc2dzdHIgImlwdGFsIGV0IHZlIG9yaWppbmFsIGRhbMSxIMOnxLFrxLHFnyB5YXAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyMworbXNnaWQgImFib3J0IGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMiCittc2dzdHIgImlwdGFsIGV0LCBhbmNhayBIRUFEJ2kgb2xkdcSfdSB5ZXJkZSBixLFyYWsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCBkdXJpbmcgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICIiCisiYmlyIGV0a2lsZcWfaW1saSB5ZW5pZGVuIHRlbWVsbGVuZGlybWUgc8SxcmFzxLFuZGEgeWFwxLFsYWNha2xhciBsaXN0ZXNpbmkgIgorImTDvHplbmxlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjcKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBmaWxlIGJlaW5nIGFwcGxpZWQgb3IgbWVyZ2VkIgorbXNnc3RyICJ5YW1hIGRvc3lhc8SxIHV5Z3VsYW7EsXJrZW4gdmV5YSBiaXJsZcWfdGlyaWxpcmtlbiBnw7ZzdGVyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzAKK21zZ2lkICJ1c2UgYXBwbHkgc3RyYXRlZ2llcyB0byByZWJhc2UiCittc2dzdHIgInllbmlkZW4gdGVtZWxsZW5kaXJtZWsgacOnaW4gXCJhcHBseVwiIHN0cmF0ZWppbGVyaW5pIGt1bGxhbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTM0Cittc2dpZCAidXNlIG1lcmdpbmcgc3RyYXRlZ2llcyB0byByZWJhc2UiCittc2dzdHIgInllbmlkZW4gdGVtZWxsZW5kaXJtZWsgacOnaW4gYmlybGXFn3Rpcm1lIHN0cmF0ZWppbGVyaW5pIGt1bGxhbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTM4Cittc2dpZCAibGV0IHRoZSB1c2VyIGVkaXQgdGhlIGxpc3Qgb2YgY29tbWl0cyB0byByZWJhc2UiCittc2dzdHIgIiIKKyJ5ZW5pZGVuIHRlbWVsbGVuZGlyaWxlY2VrIGfDtm5kZXJpbGVyaW4gbGlzdGVzaW5pIGt1bGxhbsSxY8SxbsSxbiBkw7x6ZW5sZW1lc2luZSAiCisiaXppbiB2ZXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU0MgorbXNnaWQgIihERVBSRUNBVEVEKSB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbSIKK21zZ3N0ciAiIgorIihLVUxMQU5JTSBEScWeSSkgYmlybGXFn3Rpcm1lbGVyaSB5b2sgc2F5bWFrIHllcmluZSBvbmxhcsSxIHllbmlkZW4gb2x1xZ90dXJtYXlhICIKKyLDp2FsxLHFnyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTQ3Cittc2dpZCAiaG93IHRvIGhhbmRsZSBjb21taXRzIHRoYXQgYmVjb21lIGVtcHR5IgorbXNnc3RyICJib8WfYWxhbiBnw7ZuZGVyaWxlciBuYXPEsWwgacWfbGVuc2luIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NTQKK21zZ2lkICJtb3ZlIGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHNxdWFzaCEvZml4dXAhIHVuZGVyIC1pIgorbXNnc3RyICItaSBhbHTEsW5kYWtpIHNxdWFzaCEvZml4dXAhIGlsZSBiYcWfbGF5YW4gZ8O2bmRlcmlsZXJpIHRhxZ/EsSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTYwCittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciIKK21zZ3N0ciAiw7ZuY2VzaW5kZSB2ZSBzb25yYXPEsW5kYSBrZW5kaWxpxJ9pbmRlbiB6dWxhbGEvenVsYWxhcsSxIHBhdGxhdCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTYyCittc2dpZCAiYWRkIGV4ZWMgbGluZXMgYWZ0ZXIgZWFjaCBjb21taXQgb2YgdGhlIGVkaXRhYmxlIGxpc3QiCittc2dzdHIgImTDvHplbmxlbmViaWxpciBsaXN0ZW5pbiBoZXIgZ8O2bmRlcmlzaW5kZW4gc29ucmEgZXhlYyBzYXTEsXJsYXLEsSBla2xlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NjYKK21zZ2lkICJhbGxvdyByZWJhc2luZyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgImJvxZ8gaWxldGlsaSBnw7ZuZGVyaWxlcmluIHllbmlkZW4gdGVtZWxsZW5kaXJpbG1lc2luZSBpemluIHZlciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTcwCittc2dpZCAidHJ5IHRvIHJlYmFzZSBtZXJnZXMgaW5zdGVhZCBvZiBza2lwcGluZyB0aGVtIgorbXNnc3RyICJiaXJsZcWfdGlybWVsZXJpIGF0bGFtYWsgeWVyaW5lIG9ubGFyxLEgeWVuaWRlbiB0ZW1lbGxlbmRpcm1leWkgZGVuZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTczCittc2dpZCAidXNlICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcgdG8gcmVmaW5lIHVwc3RyZWFtIgorbXNnc3RyICLDvHN0a2F5bmHEn8SxIGFyxLFsYcWfdMSxcm1hayBpw6dpbiAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIGt1bGxhbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTc1Cittc2dpZCAidXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAidmVyaWxlbiBiaXJsZcWfdGlybWUgc3RyYXRlamlzaW5pIGt1bGxhbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTc3IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE1Cittc2dpZCAib3B0aW9uIgorbXNnc3RyICJzZcOnZW5layIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTc4Cittc2dpZCAicGFzcyB0aGUgYXJndW1lbnQgdGhyb3VnaCB0byB0aGUgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgImRlxJ9pxZ9rZW5pIGJpcmxlxZ90aXJtZSBzdHJhdGVqaXNpbmUgYWt0YXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU4MQorbXNnaWQgInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiCittc2dzdHIgInVsYcWfxLFsYWJpbGlyIHTDvG0gZ8O2bmRlcmlsZXJpIGvDtmsobGVyKWUga2FkYXIgeWVuaWRlbiB0ZW1lbGxlbmRpciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTk4Cittc2dpZCAiIgorInRoZSByZWJhc2UudXNlQnVpbHRpbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQhXG4iCisiU2VlIGl0cyBlbnRyeSBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyIncmViYXNlLnVzZUJ1aWx0aW4nIGRlc3RlxJ9pIGthbGTEsXLEsWxkxLEhXG4iCisiQXlyxLFudMSxbGFyIGnDp2luICdnaXQgaGVscCBjb25maWcnIGnDp2luZGVraSBnaXJkaXNpbmUgYmFrxLFuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjA0Cittc2dpZCAiSXQgbG9va3MgbGlrZSAnZ2l0IGFtJyBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIkfDtnLDvG7DvMWfZSBnw7ZyZSAnZ2l0IGFtJyBzw7xybWVrdGUuIFllbmlkZW4gdGVtZWxsZW5kaXJpbGVtaXlvci4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY0NQorbXNnaWQgIiIKKyJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIGlzIGRlcHJlY2F0ZWQuIFVzZSAtLXJlYmFzZS1tZXJnZXMgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcycga3VsbGFuxLFtIGTEscWfxLEuIFllcmluZSAtLXJlYmFzZS1tZXJnZXMgIgorImt1bGxhbsSxbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1MAorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1vbnRvJyIKK21zZ3N0ciAiLS1rZWVwLWJhc2UgaWxlIC0tb250byBiaXJsaWt0ZSBrdWxsYW7EsWxhbWF6IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTIKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tcm9vdCciCittc2dzdHIgIi0ta2VlcC1iYXNlIGlsZSAtLXJvb3QgYmlybGlrdGUga3VsbGFuxLFsYW1heiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjU2Cittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiU8O8cmVuIGJpciB5ZW5pZGVuIHRlbWVsbGVuZGlybWUgeW9rPyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjYwCittc2dpZCAiVGhlIC0tZWRpdC10b2RvIGFjdGlvbiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnRlcmFjdGl2ZSByZWJhc2UuIgorbXNnc3RyICIiCisiLS1lZGl0LXRvZG8gc2XDp2VuZcSfaSB5YWxuxLF6Y2EgZXRraWxlxZ9pbWxpIHllbmlkZW4gdGVtZWxsZW5kaXJtZSBzxLFyYXPEsW5kYSAiCisia3VsbGFuxLFsYWJpbGlyLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjgzCittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiSEVBRCBva3VuYW3EsXlvciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjk1Cittc2dpZCAiIgorIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlblxuIgorIm1hcmsgdGhlbSBhcyByZXNvbHZlZCB1c2luZyBnaXQgYWRkIgorbXNnc3RyICIiCisiw5ZuY2UgdMO8bSBiaXJsZcWfdGlybWUgw6dha8SxxZ9tYWxhcsSxbsSxIGTDvHplbmxlbWVsaSB2ZSBvbmxhcsSxXG4iCisiZ2l0IGFkZCBrdWxsYW5hcmFrIHRhbWFtbGFuZMSxIG9sYXJhayBpbWxlbWVsaXNpbml6LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzE0Cittc2dpZCAiY291bGQgbm90IGRpc2NhcmQgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAiw6dhbMSxxZ9tYSBhxJ9hY8SxIGRlxJ9pxZ9pa2xpa2xlcmkgYXTEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTczMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbW92ZSBiYWNrIHRvICVzIgorbXNnc3RyICIlcyBrb251bXVuYSBnZXJpIHRhxZ/EsW5hbWFkxLEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJXMgZGlyZWN0b3J5LCBhbmRcbiIKKyJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorImNhc2UsIHBsZWFzZSB0cnlcbiIKKyJcdCVzXG4iCisiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZVxuIgorIlx0JXNcbiIKKyJhbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZ1xuIgorInZhbHVhYmxlIHRoZXJlLlxuIgorbXNnc3RyICIiCisiR8O2csO8bsO8xZ9lIGJha8SxbMSxcnNhIGJpciAlcyBkaXppbmkgemF0ZW4gdmFyIHZlIG1lcmFrXG4iCisiZWRpeW9ydW0gYWNhYmEgc2l6IGJhxZ9rYSBiaXIgeWVuaWRlbiB0ZW1lbGxlbmRpcm1lbmluIG9ydGFzxLFuZGEgbcSxc8SxbsSxej9cbiIKKyJEdXJ1bSBidXlzYSBsw7x0ZmVuIMWfdW51IGRlbmV5aW46XG4iCisiXHQlc1xuIgorIkXEn2VyIGJhxZ9rYSBiaXIgxZ9leXNlLCBsw7x0ZmVuXG4iCisiXHQlc1xuIgorInlhcMSxbiB2ZSBiZW5pIHllbmlkZW4gw6dhbMSxxZ90xLFyxLFuLiBCZW4gc2l6aSBiZWxraSBvcmFkYSBow6Jsw6IgZGXEn2VybGkgYmlyXG4iCisixZ9leWxlciBvbGFiaWxpciBkaXllIGR1cmR1cmR1bS5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODA2Cittc2dpZCAic3dpdGNoIGBDJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICInQycgYW5haHRhcsSxIHNhecSxc2FsIGJpciBkZcSfZXIgYmVrbGl5b3IiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg0NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG1vZGU6ICVzIgorbXNnc3RyICJCaWxpbm1leWVuIGtpcDogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg2OQorbXNnaWQgIi0tc3RyYXRlZ3kgcmVxdWlyZXMgLS1tZXJnZSBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXN0cmF0ZWd5LCAtLW1lcmdlIHZleWEgLS1pbnRlcmFjdGl2ZSBnZXJla3Rpcml5b3IiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5OQorbXNnaWQgImNhbm5vdCBjb21iaW5lIGFwcGx5IG9wdGlvbnMgd2l0aCBtZXJnZSBvcHRpb25zIgorbXNnc3RyICJcImFwcGx5XCIgc2XDp2VuZWtsZXJpIFwibWVyZ2VcIiBzZcOnZW5la2xlcml5bGUgYmlybGlrdGUga3VsbGFuxLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcmViYXNlIGJhY2tlbmQ6ICVzIgorbXNnc3RyICJCaWxpbm1leWVuIHllbmlkZW4gdGVtZWxsZW5kaXJtZSBhcmthIHVjdTogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkzNworbXNnaWQgIi0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyByZXF1aXJlcyAtLWV4ZWMgb3IgLS1pbnRlcmFjdGl2ZSIKK21zZ3N0ciAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjLCAtLWV4ZWMgdmV5YSAtLWludGVyYWN0aXZlIGdlcmVrdGlyaXlvciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTU3Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorbXNnc3RyICItLXByZXNlcnZlLW1lcmdlcyBpbGUgLS1yZWJhc2UtbWVyZ2VzIGJpcmxpa3RlIGt1bGxhbsSxbGFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk2MQorbXNnaWQgIiIKKyJlcnJvcjogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnIgorbXNnc3RyICIiCisiaGF0YTogLS1wcmVzZXJ2ZS1tZXJnZXMgaWxlIC0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyBiaXJsaWt0ZSBrdWxsYW7EsWxhbcSxeW9yIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJXMnIgorbXNnc3RyICJnZcOnZXJzaXogw7xzdGtheW5hayAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5OTEKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIG5ldyByb290IGNvbW1pdCIKK21zZ3N0ciAiWWVuaSBrw7ZrIGfDtm5kZXJpIG9sdcWfdHVydWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjAxNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2Ugd2l0aCBicmFuY2giCittc2dzdHIgIiclcyc6IHRhbSBvbGFyYWsgZGFsbMSxIGJpciBiaXJsZcWfdGlybWUgdGVtZWxpIGdlcmVrbGkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjAyMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UiCittc2dzdHIgIiclcyc6IHRhbSBvbGFyYWsgYmlyIGJpcmxlxZ90aXJtZSB0ZW1lbGkgZ2VyZWtpeW9yIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQgJyVzJyIKK21zZ3N0ciAiJyVzJyBnZcOnZXJsaSBiaXIgZ8O2bmRlcml5ZSBpxZ9hcmV0IGV0bWl5b3IiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2gvY29tbWl0ICclcyciCittc2dzdHIgIm9udWxtYXo6IGLDtnlsZSBiaXIgZGFsL2fDtm5kZXJpIHlvazogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDYyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZWY6ICVzIgorbXNnc3RyICJCw7Z5bGUgYmlyIGJhxZ92dXJ1IHlvazogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA3MworbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgdG8gYSByZXZpc2lvbiIKK21zZ3N0ciAiSEVBRCBiaXIgcmV2aXp5b25hIMOnw7Z6w7xsZW1lZGkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjExMQorbXNnaWQgIkNhbm5vdCBhdXRvc3Rhc2giCittc2dzdHIgIktlbmRpbGnEn2luZGVuIHp1bGFsYW5hbcSxeW9yIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCBzdGFzaCByZXNwb25zZTogJyVzJyIKK21zZ3N0ciAiQmVrbGVubWVkaWsgenVsYSB5YW7EsXTEsTogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciAnJXMnIgorbXNnc3RyICInJXMnIGnDp2luIGRpemluIG9sdcWfdHVydWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyMworIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJXNcbiIKK21zZ3N0ciAiWnVsYSBrZW5kaWxpxJ9pbmRlbiBvbHXFn3R1cnVsZHU6ICVzXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyNgorbXNnaWQgImNvdWxkIG5vdCByZXNldCAtLWhhcmQiCittc2dzdHIgIidyZXNldCAtLWhhcmQnIHlhcMSxbGFtYWTEsSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTM1Cittc2dpZCAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAiTMO8dGZlbiBvbmxhcsSxIGfDtm5kZXJpbiB2ZXlhIHp1bGFsYXnEsW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN3aXRjaCB0byAlcyIKK21zZ3N0ciAixZ91cmF5YSBnZcOnaWxlbWVkaTogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE4MAorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkhFQUQgZ8O8bmNlbC4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAlcyBpcyB1cCB0byBkYXRlLlxuIgorbXNnc3RyICJHZcOnZXJsaSBkYWwgJXMgZ8O8bmNlbC5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTkwCittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiSEVBRCBnw7xuY2VsLCB5ZW5pZGVuIHRlbWVsbGVuZGlybWUgem9ybGFuZMSxLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuXG4iCittc2dzdHIgIkdlw6dlcmxpIGRhbCAlcyBnw7xuY2VsLCB5ZW5pZGVuIHRlbWVsbGVuZGlybWUgem9ybGFuZMSxLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMDAKK21zZ2lkICJUaGUgcHJlLXJlYmFzZSBob29rIHJlZnVzZWQgdG8gcmViYXNlLiIKK21zZ3N0ciAiJ3ByZS1yZWJhc2UnIGthbmNhc8SxIHllbmlkZW4gdGVtZWxsZW5kaXJtZXlpIHJlZGRldHRpLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgdG8gJXM6XG4iCittc2dzdHIgIiVzIGnDp2luIG9sYW4gZGXEn2nFn2lrbGlrbGVyOlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIgorbXNnc3RyICIlcyAtPiAlcyBkZcSfacWfaWtsaWtsZXJpOlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uXG4iCittc2dzdHIgIiIKKyLDlm5jZWxpa2xlIGRhbCB1Y3Ugw7x6ZXJpbmRla2kgw6dhbMSxxZ9tYW7EsXrEsSB5ZW5pZGVuIG95bmF0bWFrIGnDp2luIGdlcmkgIgorInNhcsSxbMSxeW9yLi4uXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjI0NAorbXNnaWQgIkNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAiSEVBRCBheXLEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAlcyB0byAlcy5cbiIKK21zZ3N0ciAiJXMsICVzIGtvbnVtdW5hIGlsZXJpIHNhcsSxbGTEsS5cbiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzozMworbXNnaWQgImdpdCByZWNlaXZlLXBhY2sgPGdpdC1kaXI+IgorbXNnc3RyICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGl6aW5pPiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4MjEKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeVxuIgorImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisid2l0aCB3aGF0IHlvdSBwdXNoZWQsIGFuZCB3aWxsIHJlcXVpcmUgJ2dpdCByZXNldCAtLWhhcmQnIHRvIG1hdGNoXG4iCisidGhlIHdvcmsgdHJlZSB0byBIRUFELlxuIgorIlxuIgorIllvdSBjYW4gc2V0IHRoZSAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvXG4iCisiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWVcbiIKKyJvdGhlciB3YXkuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXRcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyLDlm50YW7EsW1sxLEgb2xhcmFrLCDDp8SxcGxhayBvbG1heWFuIGJpciBkZXBvZGFraSBnZcOnZXJsaSBkYWzEsSBnw7xuY2VsbGVtZVxuIgorInJlZGRlZGlsaXIsIMOnw7xua8O8IGJ1IGluZGVrc2kgdmUgw6dhbMSxxZ9tYSBhxJ9hY8SxbsSxIGl0dGnEn2luaXpsZSB0dXRhcnPEsXpcbiIKKyJkdXJ1bWEgZ2V0aXJpciB2ZSDDp2FsxLHFn21hIGHEn2FjxLFuxLEgSEVBRCBpbGUgZcWfbGXFn3Rpcm1layBpw6dpblxuIgorIidnaXQgcmVzZXQgLS1oYXJkJyBnZXJla3RpcmlyLlxuIgorIkdlw6dlcmxpIGRhbMSxbmEgaXRtZXllIGl6aW4gdmVybWVrIGnDp2luIHV6YWsgZGVwb2Rha2kgJ3JlY2VpdmUuIgorImRlbnlDdXJyZW50QnJhbmNoJ1xuIgorInlhcMSxbGFuZMSxcm1hIGRlxJ9pxZ9rZW5pbmkgJ2lnbm9yZScgdmV5YSAnd2Fybicgb2xhcmFrIGF5YXJsYXlhYmlsaXJzaW5peixcbiIKKyJhbmNhayBidSBvbnVuIMOnYWzEscWfbWEgYcSfYWPEsW7EsSBpdHRpxJ9pbml6bGUgZcWfbGXFn3RpcmVjZWsgYmlyIHlvbCBidWxtYWTEscSfxLFuxLF6XG4iCisic8O8cmVjZSDDtm5lcmlsbWV6LlxuIgorIkJ1IGlsZXRpeWkgc3VzdHVydXAgw7ZudGFuxLFtbMSxIGRhdnJhbsSxxZ/EsSB0dXRtYWsgacOnaW4gJ3JlY2VpdmUuIgorImRlbnlDdXJyZW50QnJhbmNoJ1xuIgorInlhcMSxbGFuZMSxcm1hIGRlxJ9pxZ9rZW5pbmkgJ3JlZnVzZScgb2xhcmFrIGF5YXJsYXnEsW4uIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjg0MQorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCBkZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggaXMgZGVuaWVkLCBiZWNhdXNlIHRoZSBuZXh0XG4iCisiJ2dpdCBjbG9uZScgd29uJ3QgcmVzdWx0IGluIGFueSBmaWxlIGNoZWNrZWQgb3V0LCBjYXVzaW5nIGNvbmZ1c2lvbi5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0b1xuIgorIid3YXJuJyBvciAnaWdub3JlJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgZGVsZXRpbmcgdGhlXG4iCisiY3VycmVudCBicmFuY2gsIHdpdGggb3Igd2l0aG91dCBhIHdhcm5pbmcgbWVzc2FnZS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSwgeW91IGNhbiBzZXQgaXQgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisiw5ZudGFuxLFtbMSxIG9sYXJhaywgZ2XDp2VybGkgZGFsxLEgc2lsbWUgcmVkZGVkaWxpciwgw6fDvG5rw7wgYmlyIHNvbnJha2kgJ2dpdCAiCisiY2xvbmUnXG4iCisiaGnDp2JpciBkb3N5YW7EsW4gw6fEsWvEscWfIHlhcMSxbGFtYW1hc8SxbmEgbmVkZW4gb2x1cCBrYXJtYcWfYSBkb8SfdXJ1ci5cbiIKKyJcbiIKKyJHZcOnZXJsaSBkYWzEsW4gYmlyIHV5YXLEsSBpbGV0aXNpeWxlIHZleWEgaWxldGkgb2xtYWRhbiBzaWxpbmViaWxtZXNpbmUgaXppblxuIgorInZlcm1layBpw6dpbiB1emFrIGRlcG9kYWtpICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyB5YXDEsWxhbmTEsXJtYVxuIgorImRlxJ9pxZ9rZW5pbmkgJ3dhcm4nIHZleWEgJ2lnbm9yZScgb2xhcmFrIGF5YXJsYXlhYmlsaXJzaW5pei5cbiIKKyJCdSBpbGV0aXlpIHN1c3R1cm1hayBpw6dpbiBvbnUgJ3JlZnVzZScgb2xhcmFrIGF5YXJsYXnEsW4uIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5MzgKK21zZ2lkICJxdWlldCIKK21zZ3N0ciAic2Vzc2l6IgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NTIKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiQmlyIGRpemluIGJlbGlydG1lbGlzaW5pei4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0aW1lPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT08emFtYW4+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHphbWFuPl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxiYcWfdnVydWxhcj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjIKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gIgorIjxiYcWfdnVydWxhcj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjUKK21zZ2lkICJnaXQgcmVmbG9nIGV4aXN0cyA8cmVmPiIKK21zZ3N0ciAiZ2l0IHJlZmxvZyBleGlzdHMgPGJhxZ92dXJ1PiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo1NjggYnVpbHRpbi9yZWZsb2cuYzo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIiclcycgZ2XDp2VybGkgYmlyIHphbWFuIGRhbWdhc8SxIGRlxJ9pbCIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyByZWFjaGFibGUgb2JqZWN0cy4uLiIKK21zZ3N0ciAiVWxhxZ/EsWxhYmlsaXIgbmVzbmVsZXIgaW1sZW5peW9yLi4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgbm93aGVyZSEiCittc2dzdHIgIiVzIGhpw6diaXIgeWVyZSBpxZ9hcmV0IGV0bWl5b3IhIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY5NgorbXNnaWQgIm5vIHJlZmxvZyBzcGVjaWZpZWQgdG8gZGVsZXRlIgorbXNnc3RyICJzaWxtZWsgacOnaW4gYmlyIGJhxZ92dXJ1IGfDvG5sw7zEn8O8IGJlbGlydGlsbWVkaSIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmVmbG9nOiAlcyIKK21zZ3N0ciAiYmlyIGJhxZ92dXJ1IGfDvG5sw7zEn8O8IGRlxJ9pbDogJXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlZmxvZyBmb3IgJyVzJyIKK21zZ3N0ciAiJyVzJyBpw6dpbiBiYcWfdnVydSBnw7xubMO8xJ/DvCB5b2siCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmIGZvcm1hdDogJXMiCittc2dzdHIgImdlw6dlcnNpeiBiYcWfdnVydSBiacOnaW1pOiAlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NjUKK21zZ2lkICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorbXNnc3RyICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTgKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8ZGFsPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGdldGlyfGl0Pl0gPGFkPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOSBidWlsdGluL3JlbW90ZS5jOjM5Cittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgImdpdCByZW1vdGUgcmVuYW1lIDxlc2tpPiA8eWVuaT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjAgYnVpbHRpbi9yZW1vdGUuYzo0NAorbXNnaWQgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW1vdmUgPGFkPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMSBidWlsdGluL3JlbW90ZS5jOjQ5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8YWQ+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8ZGFsPikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8YWQ+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzCittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxhZD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjQKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncnVwPiB8IDx1emFrLWs+KS4uLl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjUKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8YWQ+IDxkYWw+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI2IGJ1aWx0aW4vcmVtb3RlLmM6NzUKK21zZ2lkICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxhZD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjcgYnVpbHRpbi9yZW1vdGUuYzo4MAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxhZD4gPHllbmktdXJsPiBbPGVza2ktdXJsPl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjggYnVpbHRpbi9yZW1vdGUuYzo4MQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtZT4gPG5ld3VybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8YWQ+IDx5ZW5pLXVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjkgYnVpbHRpbi9yZW1vdGUuYzo4MgorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8YWQ+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjM0Cittc2dpZCAiZ2l0IHJlbW90ZSBhZGQgWzxvcHRpb25zPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIGFkZCBbPHNlw6dlbmVrbGVyPl0gPGFkPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPGFkPiA8ZGFsPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NQorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPGFkPiA8ZGFsPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MAorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2hvdyBbPHNlw6dlbmVrbGVyPl0gPGFkPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NQorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFs8c2XDp2VuZWtsZXI+XSA8YWQ+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwCittc2dpZCAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcHRpb25zPl0gWzxncm91cD4gfCA8cmVtb3RlPl0uLi4iCittc2dzdHIgImdpdCByZW1vdGUgdXBkYXRlIFs8c2XDp2VuZWtsZXI+XSBbPGdydXA+IHwgPHV6YWsta29udW0+XS4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAiJXMgZ8O8bmNlbGxlbml5b3IiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorIi0tbWlycm9yIHRlaGxpa2VsaSB2ZSBhcnTEsWsga3VsbGFuxLFtIGTEscWfxLE7IGzDvHRmZW5cbiIKKyJcdCB5ZXJpbmUgLS1taXJyb3ItZmV0Y2ggdmV5YSAtLW1pcnJvcj1wdXNoIGt1bGxhbsSxbi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYmlsaW5tZXllbiBtaXJyb3IgZGXEn2nFn2tlbmk6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NAorbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgInV6YWsga29udW0gZGFsbGFyxLFuxLEgZ2V0aXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2Cittc2dpZCAiaW1wb3J0IGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMgd2hlbiBmZXRjaGluZyIKK21zZ3N0ciAiZ2V0aXJpcmtlbiB0w7xtIGV0aWtldGxlcmkgdmUgaWxpxZ9raWxpIG5lc25lbGVyaSBpw6dlIGFrdGFyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2OQorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAidmV5YSBoacOnYmlyIGV0aWtldGkgZ2V0aXJtZSAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEKK21zZ2lkICJicmFuY2goZXMpIHRvIHRyYWNrIgorbXNnc3RyICJpemxlbmVjZWsgZGFsKGxhcikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcyCittc2dpZCAibWFzdGVyIGJyYW5jaCIKK21zZ3N0ciAiYW5hIGRhbCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzQKK21zZ2lkICJzZXQgdXAgcmVtb3RlIGFzIGEgbWlycm9yIHRvIHB1c2ggdG8gb3IgZmV0Y2ggZnJvbSIKK21zZ3N0ciAiIgorInV6YWsga29udW0gZGVwb3N1bnUgb25hIGl0aWxlY2VrIHZleWEgb25kYW4gZ2V0aXJpbGVjZWsgYmlyIHlhbnPEsSBvbGFyYWsgIgorImF5YXJsYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODYKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICItLW1pcnJvciBpbGUgYmlyIGFuYSBkYWwgYmVsaXJ0bWVrIGFubGFtIGlmYWRlIGV0bWl5b3IiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg4Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAiIgorIml6bGVtZWsgacOnaW4gZGFsbGFyIGJlbGlydG1layB5YWxuxLF6Y2EgZ2V0aXJtZSB5YW5zxLFsYXLEsXlsYSBhbmxhbWlmYWRlIGVkaXlvciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTUgYnVpbHRpbi9yZW1vdGUuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiJXMgdXphayBrb251bXUgaGFsaWhhesSxcmRhIHZhci4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk5IGJ1aWx0aW4vcmVtb3RlLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiclcycgZ2XDp2VybGkgYmlyIHV6YWsga29udW0gYWTEsSBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAiJyVzJyBhbmEgZGFsxLEgYXlhcmxhbmFtYWTEsSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgIiVzIGJhxZ92dXJ1IGJlbGlydGVjaSBpw6dpbiBnZXRpcm1lIGhhcml0YXPEsSBhbMSxbmFtYWTEsSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NTMgYnVpbHRpbi9yZW1vdGUuYzo0NjEKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICIoZcWfbGXFn2l5b3IpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ2NQorbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICIoc2lsKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICInJXMnIGF5YXJsYW5hbWFkxLEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJXMgY29uZmlndXJhdGlvbiByZW1vdGUucHVzaERlZmF1bHQgaW46XG4iCisiXHQlczolZFxuIgorIm5vdyBuYW1lcyB0aGUgbm9uLWV4aXN0ZW50IHJlbW90ZSAnJXMnIgorbXNnc3RyICIiCisixZ51cmFkYWtpICVzIHlhcMSxbGFuZMSxcm1hc8SxIHJlbW90ZS5wdXNoRGVmYXVsdDpcbiIKKyJcdCVzOiVkXG4iCisiYXJ0xLFrIHZhciBvbG1heWFuICclcycgdXphayBrb251bXVudSBhZGxhbmTEsXLEsXlvci4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njg5IGJ1aWx0aW4vcmVtb3RlLmM6ODMyIGJ1aWx0aW4vcmVtb3RlLmM6OTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAnJXMnIgorbXNnc3RyICJCw7Z5bGUgYmlyIHV6YWsga29udW0geW9rOiAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVuYW1lIGNvbmZpZyBzZWN0aW9uICclcycgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJyB5YXDEsWxhbmTEsXJtYSBiw7Zsw7xtw7wgJyVzJyBvbGFyYWsgeWVuaWRlbiBhZGxhbmTEsXLEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorIsOWbnRhbsSxbWzEsSBvbG1heWFuIGdldGlybWUgYmHFn3Z1cnUgYmVsaXJ0ZWNpIGfDvG5jZWxsZW5taXlvci5cbiIKKyJcdCVzXG4iCisiXHRMw7x0ZmVuIGdlcmVraXJzZSB5YXDEsWxhbmTEsXJtYXnEsSBlbCBpbGUgZ8O8bmNlbGxleWluLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIiclcycgc2lsaW5tZXNpIGJhxZ9hcsSxc8SxeiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIiclcycgb2x1xZ90dXJ1bG1hc8SxIGJhxZ9hcsSxc8SxeiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4NzYKK21zZ2lkICIiCisiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSBpdCwgdXNlOiIKK21zZ2lkX3BsdXJhbCAiIgorIk5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgdGhlbSwgdXNlOiIKK21zZ3N0clswXSAiIgorIk5vdDogcmVmcy9yZW1vdGVzIGhpeWVyYXLFn2lzaSBkxLHFn8SxbmRha2kgYmlyIGRhbCBrYWxkxLFyxLFsbWFkxLE7XG4iCisib251IHNpbG1layBpw6dpbiDFn3VudSBrdWxsYW7EsW46IgorbXNnc3RyWzFdICIiCisiTm90OiByZWZzL3JlbW90ZXMgaGl5ZXJhcsWfaXNpIGTEscWfxLFuZGFraSBiYXrEsSBkYWxsYXIga2FsZMSxcsSxbG1hZMSxO1xuIgorIm9ubGFyxLEgc2lsbWVrIGnDp2luIMWfdW51IGt1bGxhbsSxbjoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAiJyVzJyB5YXDEsWxhbmTEsXJzYSBiw7Zsw7xtw7wga2FsZMSxcsSxbGFtYWTEsSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvJXMpIgorbXNnc3RyICIgeWVuaSAoYmlyIHNvbnJha2kgZ2V0aXJtZSB1emFrIGtvbnVtbGFyZGEgZGVwb2xheWFjYWsvJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTk2Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiBpemxlbmRpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5OAorbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIgZXNraW1pxZ8gKGthbGTEsXJtYWsgacOnaW4gJ2dpdCByZW1vdGUgcHJ1bmUnIGt1bGxhbsSxbikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwMAorbXNnaWQgIiA/Pz8iCittc2dzdHIgIiA/Pz8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgImdlw6dlcnNpeiBicmFuY2guJXMubWVyZ2U7IGJpcmRlbiDDp29rIGRhbGEgeWVuaWRlbiB0ZW1lbGxlbmRpcmlsZW1peW9yIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5IG9udG8gcmVtb3RlICVzIgorbXNnc3RyICIlcyB1emFrIGtvbnVtdW5hIGV0a2lsZcWfaW1saSBvbGFyYWsgeWVuaWRlbiB0ZW1lbGxlbmRpcmlyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5ICh3aXRoIG1lcmdlcykgb250byByZW1vdGUgJXMiCittc2dzdHIgIiIKKyIlcyB1emFrIGtvbnVtdW5hIGV0a2lsZcWfaW1saSBvbGFyYWsgKGJpcmxlxZ90aXJtZWxlcmxlIGJpcmxpa3RlKSB5ZW5pZGVuICIKKyJ0ZW1lbGxlbmRpcmlyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiJXMgdXphayBrb251bXVuYSB5ZW5pZGVuIHRlbWVsbGVuZGlyaXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1OQorIywgYy1mb3JtYXQKK21zZ2lkICIgbWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICIgJXMgdXphayBrb251bXUgaWxlIGJpcmxlxZ90aXJpciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiJXMgdXphayBrb251bXUgaWxlIGJpcmxlxZ90aXJpciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtKnMgICAgYW5kIHdpdGggcmVtb3RlICVzXG4iCittc2dzdHIgIiUtKnMgICAgdmUgJXMgdXphayBrb251bXUgaWxlIGJpcmxpa3RlXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEwOAorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAib2x1xZ90dXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTExMQorbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAic2lsIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTUKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICJnw7xuY2VsIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTgKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICJpbGVyaSBzYXLEsWxhYmlsaXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyMQorbXNnaWQgImxvY2FsIG91dCBvZiBkYXRlIgorbXNnc3RyICJ5ZXJlbGluIHRhcmloaSBnZcOnbWnFnyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIMWfdW5hIHpvcmx1eW9yOiAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyDFn3VuYSBpdGl5b3I6ICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgxZ91bmEgem9ybHV5b3I6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyDFn3VuYSBpdGl5b3I6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDYKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAidXphayBrb251bWxhcsSxIHNvcmd1bGFtYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqIHV6YWsga29udW0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiAgVVJMJ3lpIGdldGlyOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM1IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MSBidWlsdGluL3JlbW90ZS5jOjEzOTAKK21zZ2lkICIobm8gVVJMKSIKK21zZ3N0ciAiKFVSTCB5b2spIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uICc6JyBzaG91bGQgYWxpZ24KKyMuIHdpdGggdGhlIG9uZSBpbiAiIEZldGNoIFVSTDogJXMiCisjLiB0cmFuc2xhdGlvbi4KKyMuCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDkgYnVpbHRpbi9yZW1vdGUuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUHVzaCAgVVJMOiAlcyIKK21zZ3N0ciAiICAgICBVUkwneWkgaXQ6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTMgYnVpbHRpbi9yZW1vdGUuYzoxMjU1IGJ1aWx0aW4vcmVtb3RlLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICAgICBIRUFEIGRhbMSxOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjUzCittc2dpZCAiKG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiKHNvcmd1bGFubWFkxLEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1NQorbXNnaWQgIih1bmtub3duKSIKK21zZ3N0ciAiKGJpbGlubWl5b3IpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIKK21zZ3N0ciAiIgorIiAgSEVBRCBkYWzEsSAodXphayBrb251bSBIRUFEJ2kgYmVsaXJzaXosIGHFn2HEn8SxZGFraWxlcmRlbiBiaXJpIG9sYWJpbGlyKTpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAgVXphayBkYWw6JXMiCittc2dzdHJbMV0gIiAgVXphayBkYWxsYXI6JXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NCBidWlsdGluL3JlbW90ZS5jOjEzMDAKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIiAoZHVydW0gc29yZ3VsYW5tYWTEsSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI4MworbXNnaWQgIiAgTG9jYWwgYnJhbmNoIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnc3RyWzBdICIgICdnaXQgcHVsbCcgacOnaW4geWFwxLFsYW5kxLFyxLFsYW4geWVyZWwgZGFsOiIKK21zZ3N0clsxXSAiICAnZ2l0IHB1bGwnIGnDp2luIHlhcMSxbGFuZMSxcsSxbGFuIHllcmVsIGRhbGxhcjoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5MQorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiAgWWVyZWwgYmHFn3Z1cnVsYXIgJ2dpdCBwdWxsJyB0YXJhZsSxbmRhbiB5YW5zxLFsYW5hY2FrIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAgJ2dpdCBwdXNoJyVzIGnDp2luIHlhcMSxbGFuZMSxcsSxbGFuIHllcmVsIGJhxZ92dXJ1OiIKK21zZ3N0clsxXSAiICAnZ2l0IHB1c2gnJXMgacOnaW4geWFwxLFsYW5kxLFyxLFsYW4geWVyZWwgYmHFn3Z1cnVsYXI6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMTgKK21zZ2lkICJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiCittc2dzdHIgInJlZnMvcmVtb3Rlcy88YWQ+L0hFQUQnaSB1emFrIGtvbnVtYSBnw7ZyZSBheWFybGEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyMAorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgInJlZnMvcmVtb3Rlcy88YWQ+L0hFQUQnaSBzaWwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMzNQorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgcmVtb3RlIEhFQUQiCittc2dzdHIgIlV6YWsga29udW0gSEVBRCdpIGJlbGlybGVuZW1peW9yIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMzcKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiQmlyZGVuIMOnb2sgdXphayBrb251bSBIRUFEIGRhbMSxLiBMw7x0ZmVuIGJpcmluaSBhw6fEsWvDp2Egc2XDp2luOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIiVzIHNpbGluZW1lZGkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICJHZcOnZXJsaSBiaXIgYmHFn3Z1cnUgZGXEn2lsOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAiJXMgYXlhcmxhbmFtYWTEsSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyBzYXJrYWNhayEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NgorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyBzYXJrbWF5YSBiYcWfbGFkxLEhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAiJXMgYnVkYW7EsXlvciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIlVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQwMworIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIgKiAlcyBbYnVkYW5hY2FrXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIgKiAlcyBbYnVkYW5kxLFdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTEKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJnZXRpcm1lIHNvbnJhc8SxbmRhIHV6YWsga29udW1sYXLEsSBidWRhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MTQgYnVpbHRpbi9yZW1vdGUuYzoxNTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSAnJXMnIgorbXNnc3RyICJCw7Z5bGUgYmlyIHV6YWsga29udW0geW9rICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzMAorbXNnaWQgImFkZCBicmFuY2giCittc2dzdHIgImRhbCBla2xlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzcKK21zZ2lkICJubyByZW1vdGUgc3BlY2lmaWVkIgorbXNnc3RyICJ1emFrIGtvbnVtIGJlbGlydGlsbWVkaSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTU0Cittc2dpZCAicXVlcnkgcHVzaCBVUkxzIHJhdGhlciB0aGFuIGZldGNoIFVSTHMiCittc2dzdHIgIml0bWUgVVJMJ2xlcmluZGVuIMOnb2sgZ2V0aXJtZSBVUkwnbGVyaW5pIHNvcmd1bGEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU1NgorbXNnaWQgInJldHVybiBhbGwgVVJMcyIKK21zZ3N0ciAidMO8bSBVUkwnbGVyaSBkw7ZuZMO8ciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIFVSTHMgY29uZmlndXJlZCBmb3IgcmVtb3RlICclcyciCittc2dzdHIgIiclcycgdXphayBrb251bXUgacOnaW4gVVJMIHlhcMSxbGFuZMSxcsSxbG1hbcSxxZ8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxMAorbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICJpdG1lIFVSTCdsZXJpbmkgZGXEn2nFn3RpciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjEyCittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAiVVJMIGVrbGUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxNAorbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICJVUkwnbGVyaSBzaWwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYyMQorbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1hZGQgLS1kZWxldGUgYmlyIGFubGFtIGlmYWRlIGV0bWl5b3IiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgIkdlw6dlcnNpeiBlc2tpIFVSTCBkaXpnaXNpOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiQsO2eWxlIGJpciBVUkwgYnVsdW5hbWFkxLE6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NzAKK21zZ2lkICJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiCittc2dzdHIgIlTDvG0gaXRtZSBvbG1heWFuIFVSTCdsZXIgc2lsaW5tZXllY2VrIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIzCittc2dpZCAiZ2l0IHJlcGFjayBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHJlcGFjayBbPHNlw6dlbmVrbGVyPl0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjgKK21zZ2lkICIiCisiSW5jcmVtZW50YWwgcmVwYWNrcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggYml0bWFwIGluZGV4ZXMuICBVc2VcbiIKKyItLW5vLXdyaXRlLWJpdG1hcC1pbmRleCBvciBkaXNhYmxlIHRoZSBwYWNrLndyaXRlYml0bWFwcyBjb25maWd1cmF0aW9uLiIKK21zZ3N0ciAiIgorIkFydGFuIHllbmlkZW4gcGFrZXRsZW1lbGVyIGJpdGXFn2xlbSBpbmRla3NsZXJpIGlsZSB1eXVtc3V6ZHVyLlxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IGt1bGxhbsSxbiB2ZXlhIHBhY2sud3JpdGViaXRtYXBzIHlhcMSxbGFuZMSxcm1hc8SxbsSxXG4iCisiZGV2cmUgZMSxxZ/EsSBixLFyYWvEsW4uIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE5MQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgInZhYXTDp2kgbmVzbmVsZXJpIHllbmlkZW4gcGFrZXRsZW1lIGnDp2luIHBhY2stb2JqZWN0cyBiYcWfbGF0xLFsYW1hZMSxIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIzMCBidWlsdGluL3JlcGFjay5jOjQxNgorbXNnaWQgInJlcGFjazogRXhwZWN0aW5nIGZ1bGwgaGV4IG9iamVjdCBJRCBsaW5lcyBvbmx5IGZyb20gcGFjay1vYmplY3RzLiIKK21zZ3N0ciAiIgorInJlcGFjazogT25hbHTEsWzEsSB0YW0gbmVzbmUgbm8gc2F0xLFybGFyxLEgeWFsbsSxemNhIHBhY2stb2JqZWN0cyd0ZW4gYmVrbGVuaXlvci4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjU0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgInZhYXTDp2kgbmVzbmVsZXJpIHllbmlkZW4gcGFrZXRsZW1lIGnDp2luIHBhY2stb2JqZWN0cyBiaXRpcmlsZW1lZGkiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjkyCittc2dpZCAicGFjayBldmVyeXRoaW5nIGluIGEgc2luZ2xlIHBhY2siCittc2dzdHIgImhlciDFn2V5aSB0ZWsgYmlyIHBha2V0ZSBzxLHEn2TEsXIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk0Cittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAiLWEgaWxlIGF5bsSxIHZlIHVsYcWfxLFsYW1heWFuIG5lc25lbGVyaSBzZXJiZXN0IGLEsXJha8SxciIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTcKK21zZ2lkICJyZW1vdmUgcmVkdW5kYW50IHBhY2tzLCBhbmQgcnVuIGdpdC1wcnVuZS1wYWNrZWQiCittc2dzdHIgImdlcmVrc2l6IHBha2V0bGVyaSBrYWxkxLFyIHZlICdnaXQgcHJ1bmUtcGFja2VkJyDDp2FsxLHFn3TEsXIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk5Cittc2dpZCAicGFzcyAtLW5vLXJldXNlLWRlbHRhIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIidnaXQtcGFjay1vYmplY3RzJ2UgLS1uby1yZXVzZS1kZWx0YSBnZcOnaXIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzAxCittc2dpZCAicGFzcyAtLW5vLXJldXNlLW9iamVjdCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICInZ2l0LXBhY2stb2JqZWN0cydlIC0tbm8tcmV1c2Utb2JqZWN0IGdlw6dpciIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDMKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgIidnaXQtdXBkYXRlLXNlcnZlci1pbmZvJyDDp2FsxLHFn3TEsXJtYSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDYKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiLS1sb2NhbCfEsSAnZ2l0LXBhY2stb2JqZWN0cydlIGdlw6dpciIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDgKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgImJpdGXFn2xlbSBpbmRla3NpIHlheiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTAKK21zZ2lkICJwYXNzIC0tZGVsdGEtaXNsYW5kcyB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICItLWRlbHRhLWlzbGFuZHMnxLEgJ2dpdC1wYWNrLW9iamVjdHMnZSBnZcOnaXIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzExCittc2dpZCAiYXBwcm94aWRhdGUiCittc2dzdHIgInlha2xhxZ/EsWsgdGFyaWgiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzEyCittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAiLUEgaWxlLCBidW5kYW4gZGFoYSBlc2tpIG5lc25lbGVyaSBixLFyYWttYSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTQKK21zZ2lkICJ3aXRoIC1hLCByZXBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiLWEgaWxlLCB1bGHFn8SxbGFtYXlhbiBuZXNuZWxlcmkgeWVuaWRlbiBwYWtldGxlIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNgorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAiZGVsdGEgc8Sxa8SxxZ90xLFybWFzxLEgacOnaW4ga3VsbGFuxLFsYW4gcGVuY2VyZW5pbiBib3l1dHUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE3IGJ1aWx0aW4vcmVwYWNrLmM6MzIzCittc2dpZCAiYnl0ZXMiCittc2dzdHIgImJheXRsYXIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE4Cittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgInl1a2FyxLFkYWtpeWxlIGF5bsSxLCBhbmNhayBnaXJkaSBzYXnEsXPEsSB5ZXJpbmUgYmVsbGVrIGJveXV0dW51IGvEsXPEsXRsYSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjAKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgiCittc2dzdHIgIm9sYWJpbGVjZWsgZW4gYsO8ecO8ayBkZWx0YSBkZXJpbmxpxJ9pbmkga8Sxc8SxdGxhciIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjIKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMiCittc2dzdHIgImnFnyBwYXLDp2FjxLFrbGFyxLFuxLFuIG9sYWJpbGVjZWsgZW4gYsO8ecO8ayBzYXnEsXPEsW7EsSBrxLFzxLF0bGFyIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICJoZXIgcGFrZXQgZG9zeWFzxLFuxLFuIG9sYWJpbGVjZWsgZW4gYsO8ecO8ayBib3l1dHUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI2Cittc2dpZCAicmVwYWNrIG9iamVjdHMgaW4gcGFja3MgbWFya2VkIHdpdGggLmtlZXAiCittc2dzdHIgIm5lc25lbGVyaSAua2VlcCBpbGUgaW1sZW5tacWfIHBha2V0bGVyZGUgeWVuaWRlbiBwYWtldGxlIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyOAorbXNnaWQgImRvIG5vdCByZXBhY2sgdGhpcyBwYWNrIgorbXNnc3RyICJidSBwYWtldGkgeWVuaWRlbiBwYWtldGxlbWUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzM4Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBwYWNrcyBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAiYmlyIHByZWNpb3VzLW9iamVjdHMgZGVwb3N1bmRha2kgcGFrZXRsZXIgc2lsaW5lbWl5b3IiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzQyCittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtQSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUgdmUgLUEgYmlyYmlyaXlsZSB1eXVtc3V6IgorCisjOiBidWlsdGluL3JlcGFjay5jOjQyNQorbXNnaWQgIk5vdGhpbmcgbmV3IHRvIHBhY2suIgorbXNnc3RyICJQYWtldGxlbmVjZWsgeWVuaSBiaXIgxZ9leSB5b2suIgorCisjOiBidWlsdGluL3JlcGFjay5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogU29tZSBwYWNrcyBpbiB1c2UgaGF2ZSBiZWVuIHJlbmFtZWQgYnlcbiIKKyJXQVJOSU5HOiBwcmVmaXhpbmcgb2xkLSB0byB0aGVpciBuYW1lLCBpbiBvcmRlciB0b1xuIgorIldBUk5JTkc6IHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGVcbiIKKyJXQVJOSU5HOiBmaWxlLiAgQnV0IHRoZSBvcGVyYXRpb24gZmFpbGVkLCBhbmQgdGhlXG4iCisiV0FSTklORzogYXR0ZW1wdCB0byByZW5hbWUgdGhlbSBiYWNrIHRvIHRoZWlyXG4iCisiV0FSTklORzogb3JpZ2luYWwgbmFtZXMgYWxzbyBmYWlsZWQuXG4iCisiV0FSTklORzogUGxlYXNlIHJlbmFtZSB0aGVtIGluICVzIG1hbnVhbGx5OlxuIgorbXNnc3RyICIiCisiVVlBUkk6IEt1bGxhbsSxbGFuIGJhesSxIHBha2V0bGVyLCBkb3N5YW7EsW4geWVuaVxuIgorIlVZQVJJOiBzw7xyw7xtw7x5bGUgZGXEn2nFn3RpcmlsbWVrIMO8emVyZSBhZGxhcsSxbsSxblxuIgorIlVZQVJJOiDDtm7DvG5lIMO2bmVrIG9sYXJhayBvbGQtIGtveXVsYXJhayB5ZW5pZGVuXG4iCisiVVlBUkk6IGFkbGFuZMSxcsSxbG3EscWfdMSxci4gQW5jYWsgacWfbGVtIGJhxZ9hcsSxc8SxelxuIgorIlVZQVJJOiBvbGR1IHZlIGJ1bmxhcsSxIG9yaWppbmFsIGFkbGFyxLFuYSBkw7ZuZMO8cm1lXG4iCisiVVlBUkk6IGdpcmnFn2ltaSBkZSBiYcWfYXLEsXPEsXogb2xkdS5cbiIKKyJVWUFSSTogTMO8dGZlbiBidW5sYXLEsSAlcyBpw6dpbmRlIGVsIGlsZSB5ZW5pZGVuIGFkbGFuZMSxcsSxbjpcbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnJXMnIgorbXNnc3RyICInJXMnIGthbGTEsXLEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIDxuZXNuZT4gPGRlxJ9pxZ9pbT4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxuZXNuZT4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Z8O2bmRlcmk+IFs8w7xzdC3DtmdlPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjYKK21zZ2lkICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgLWQgPG5lc25lPi4uLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcKK21zZ2lkICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFstbCBbPHBhdHRlcm4+XV0iCittc2dzdHIgImdpdCByZXBsYWNlIFstLWZvcm1hdD08YmnDp2ltPl0gWy1sIFs8ZGl6Z2k+XV0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIHJlcGxhY2UgZm9ybWF0ICclcydcbiIKKyJ2YWxpZCBmb3JtYXRzIGFyZSAnc2hvcnQnLCAnbWVkaXVtJyBhbmQgJ2xvbmcnIgorbXNnc3RyICIiCisiZ2XDp2Vyc2l6IGRlxJ9pxZ90aXJtZSBiacOnaW1pICclcydcbiIKKyJnZcOnZXJsaSBiacOnaW1sZXI6ICdzaG9ydCcgKGvEsXNhKSwgJ21lZGl1bScgKG9ydGEpIHZlICdsb25nJyAodXp1bikiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAiZGXEn2nFn3Rpcm1lIGJhxZ92dXJ1c3UgJyVzJyBidWx1bmFtYWTEsSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVwbGFjZSByZWYgJyVzJyIKK21zZ3N0ciAiRGXEn2nFn3Rpcm1lIGJhxZ92dXJ1c3UgJyVzJyBzaWxpbmRpIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYgbmFtZSIKK21zZ3N0ciAiJyVzJyBnZcOnZXJsaSBiaXIgYmHFn3Z1cnUgYWTEsSBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJkZcSfacWfdGlybWUgYmHFn3Z1cnVzdSAnJXMnIGhhbGloYXrEsXJkYSBtZXZjdXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4iCisiJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlZCBvYmplY3Qgb2YgdHlwZSAnJXMnXG4iCisid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgdHlwZSAnJXMnLiIKK21zZ3N0ciAiIgorIk5lc25lbGVyIGF5bsSxIHTDvHJkZW4gb2xtYWzEsWTEsXIuXG4iCisiJyVzJywgJyVzJyB0w7xyw7xuZGVuIGRlxJ9pxZ90aXJpbG1pxZ8gYmlyIG5lc25leWUgacWfYXJldCBlZGVya2VuXG4iCisiJyVzJyBpc2UgeWVyaW5lIGdlw6dlY2VrICclcycgdMO8csO8bmRlbiBiaXIgbmVzbmV5ZSBpxZ9hcmV0IGVkaXlvci4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiJXMgeWF6bWEgacOnaW4gYcOnxLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQyCittc2dpZCAiY2F0LWZpbGUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAiY2F0LWZpbGUgaGF0YSBiaWxkaXJkaSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICIlcyBva3VtYSBpw6dpbiBhw6fEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNzIKK21zZ2lkICJ1bmFibGUgdG8gc3Bhd24gbWt0cmVlIgorbXNnc3RyICJta3RyZWUgb3J0YXlhIMOnxLFrYXLEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNzYKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIG1rdHJlZSIKK21zZ3N0ciAibWt0cmVlJ2RlbiBva3VuYW3EsXlvciIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjg1Cittc2dpZCAibWt0cmVlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgIm1rdHJlZSBoYXRhIGJpbGRpcmRpIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODkKK21zZ2lkICJta3RyZWUgZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0IG5hbWUiCittc2dzdHIgIm1rdHJlZSBiaXIgbmVzbmUgYWTEsSBkw7ZuZMO8cm1lZGkiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZnN0YXQgJXMiCittc2dzdHIgIiVzICdmc3RhdCcgeWFwxLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzAzCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG9iamVjdCB0byBkYXRhYmFzZSIKK21zZ3N0ciAibmVzbmUgdmVyaXRhYmFuxLFuYSB5YXrEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjIgYnVpbHRpbi9yZXBsYWNlLmM6Mzc4IGJ1aWx0aW4vcmVwbGFjZS5jOjQyNAorIzogYnVpbHRpbi9yZXBsYWNlLmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICJnZcOnZXJsaSBiaXIgbmVzbmUgYWTEsSBkZcSfaWw6ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IG9iamVjdCB0eXBlIGZvciAlcyIKK21zZ3N0ciAiJXMgacOnaW4gbmVzbmUgdMO8csO8IGFsxLFuYW1hZMSxIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNDIKK21zZ2lkICJlZGl0aW5nIG9iamVjdCBmaWxlIGZhaWxlZCIKK21zZ3N0ciAibmVzbmUgZG9zeWFzxLFuxLEgZMO8emVubGVtZSBiYcWfYXLEsXPEsXoiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICJ5ZW5pIG5lc25lIGVza2lzaXlsZSBheW7EsTogJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyBhcyBhIGNvbW1pdCIKK21zZ3N0ciAiJXMsIGJpciBnw7ZuZGVyaSBvbGFyYWsgYXlyxLHFn3TEsXLEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgIiclcycgZ8O2bmRlcmlzaW5kZSBoYXRhbMSxIGJpcmxlxZ90aXJtZSBldGlrZXRpIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICInJXMnIGfDtm5kZXJpc2luZGUgaGF0YWzEsSBvbHXFn3R1cnVsbXXFnyBiaXJsZcWfdGlybWUgZXRpa2V0aSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcmlnaW5hbCBjb21taXQgJyVzJyBjb250YWlucyBtZXJnZXRhZyAnJXMnIHRoYXQgaXMgZGlzY2FyZGVkOyB1c2UgLS1lZGl0ICIKKyJpbnN0ZWFkIG9mIC0tZ3JhZnQiCittc2dzdHIgIiIKKyInJXMnIG9yaWppbmFsIGfDtm5kZXJpc2kgYXTEsWxtxLHFnyBvbGFuICclcycgYmlybGXFn3Rpcm1lIGV0aWtldGluaSBpw6dlcml5b3I7IC0tIgorImdyYWZ0IHllcmluZSAtLWVkaXQga3VsbGFuxLFuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG9yaWdpbmFsIGNvbW1pdCAnJXMnIGhhcyBhIGdwZyBzaWduYXR1cmUiCittc2dzdHIgIiclcycgb3JpamluYWwgZ8O2bmRlcmlzaW5pbiBiaXIgZ3BnIGltemFzxLEgdmFyIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NzAKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAiaW16YSwgeWVyaW5lIGdlw6dlY2VrIGfDtm5kZXJpZGUga2FsZMSxcsSxbGFjYWsiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIKK21zZ3N0ciAixZ91bnVuIHllcmluZSBnZcOnZWNlayBnw7ZuZGVyaSB5YXrEsWxhbWFkxLE6ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJncmFmdCBmb3IgJyVzJyB1bm5lY2Vzc2FyeSIKK21zZ3N0ciAiJyVzJyBpw6dpbiBhxZ/EsSBnZXJla3NpeiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBjb21taXQgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmU6ICclcyciCittc2dzdHIgInllbmkgZ8O2bmRlcmkgZXNraXNpeWxlIGF5bsSxOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBjb252ZXJ0IHRoZSBmb2xsb3dpbmcgZ3JhZnQocyk6XG4iCisiJXMiCittc2dzdHIgIiIKKyJhxZ9hxJ/EsWRha2kgYcWfxLEobGFyKSBkw7Zuw7zFn3TDvHLDvGxlbWVkaTpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ4Cittc2dpZCAibGlzdCByZXBsYWNlIHJlZnMiCittc2dzdHIgImRlxJ9pxZ90aXJtZSBiYcWfdnVydWxhcsSxbsSxIGxpc3RlbGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0OQorbXNnaWQgImRlbGV0ZSByZXBsYWNlIHJlZnMiCittc2dzdHIgImRlxJ9pxZ90aXJtZSBiYcWfdnVydWxhcsSxbsSxIHNpbCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUwCittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgImdlw6dlcmxpIG5lc25leWkgZMO8emVubGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MQorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgImJpciBnw7ZuZGVyaW5pbiDDvHN0IMO2Z2VsZXJpbmkgZGXEn2nFn3RpciIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUyCittc2dpZCAiY29udmVydCBleGlzdGluZyBncmFmdCBmaWxlIgorbXNnc3RyICJtZXZjdXQgYcWfxLEgZG9zeWFzxLFuxLEgZMO2bsO8xZ90w7xyIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTMKK21zZ2lkICJyZXBsYWNlIHRoZSByZWYgaWYgaXQgZXhpc3RzIgorbXNnc3RyICJiYcWfdnVydSBtZXZjdXRzYSBvbnUgZGXEn2nFn3RpciIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU1Cittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICItLWVkaXQgacOnZXJpxJ9pbmkgaG/FnyBiacOnaW1kZSBnw7ZzdGVybWUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NgorbXNnaWQgInVzZSB0aGlzIGZvcm1hdCIKK21zZ3N0ciAiYnUgYmnDp2ltaSBrdWxsYW4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU2OQorbXNnaWQgIi0tZm9ybWF0IGNhbm5vdCBiZSB1c2VkIHdoZW4gbm90IGxpc3RpbmciCittc2dzdHIgIi0tZm9ybWF0LCBsaXN0ZWxlbWl5b3JrZW4ga3VsbGFuxLFsYW1heiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTc3Cittc2dpZCAiLWYgb25seSBtYWtlcyBzZW5zZSB3aGVuIHdyaXRpbmcgYSByZXBsYWNlbWVudCIKK21zZ3N0ciAiLWYgeWFsbsSxemNhIHllcmluZSBnZcOnZWNlayBiaXIgbmVzbmUgeWF6xLFsxLFya2VuIGFubGFtIGlmYWRlIGVkZXIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU4MQorbXNnaWQgIi0tcmF3IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLWVkaXQiCittc2dzdHIgIi0tcmF3IHlhbG7EsXpjYSAtLWVkaXQgaWxlIGFubGFtIGlmYWRlIGVkZXIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU4NworbXNnaWQgIi1kIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWQgacOnaW4gZW4gYXrEsW5kYW4gYmlyIGRlxJ9pxZ9rZW4gZ2VyZWtsaSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTkzCittc2dpZCAiYmFkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgImhhdGFsxLEgZGXEn2nFn2tlbiBzYXnEsXPEsSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk5Cittc2dpZCAiLWUgbmVlZHMgZXhhY3RseSBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1lIGnDp2luIHRhbSBvbGFyYWsgYmlyIGRlxJ9pxZ9rZW4gZ2VyZWtsaSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjA1Cittc2dpZCAiLWcgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICItZyBpw6dpbiBlbiBhesSxbmRhbiBiaXIgZGXEn2nFn2tlbiBnZXJla2xpIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTEKK21zZ2lkICItLWNvbnZlcnQtZ3JhZnQtZmlsZSB0YWtlcyBubyBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgZGXEn2nFn2tlbiBhbG1heiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjE3Cittc2dpZCAib25seSBvbmUgcGF0dGVybiBjYW4gYmUgZ2l2ZW4gd2l0aCAtbCIKK21zZ3N0ciAiLWwgaWxlIHlhbG7EsXpjYSBiaXIgZGl6Z2kgdmVyaWxlYmlsaXIiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTMKK21zZ2lkICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorbXNnc3RyICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8eW9sPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NjAKK21zZ2lkICJyZWdpc3RlciBjbGVhbiByZXNvbHV0aW9ucyBpbiBpbmRleCIKK21zZ3N0ciAiaW5kZWtzdGVraSB0ZW1peiDDp8O2esO8bWxlcmluIGtheWTEsW7EsSB5YXAiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NzkKK21zZ2lkICInZ2l0IHJlcmVyZSBmb3JnZXQnIHdpdGhvdXQgcGF0aHMgaXMgZGVwcmVjYXRlZCIKK21zZ3N0ciAieW9sIG9sbWFkYW4gJ2dpdCByZXJlcmUgZm9yZ2V0JyBrdWxsYW7EsW0gZMSxxZ/EsSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgZm9yICclcyciCittc2dzdHIgIiclcycgacOnaW4gZGlmZiBvbHXFn3R1cnVsYW3EsXlvciIKKworIzogYnVpbHRpbi9yZXNldC5jOjMyCittc2dpZCAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKK21zZ3N0ciAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxnw7ZuZGVyaT5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSBbPGHEn2FjxLFtc8SxPl0gWy0tXSA8eW9sLWJscnTDpz4uLi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyZWUtaXNoPl0iCittc2dzdHIgIiIKKyJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPGHEn2FjxLFtc8SxPl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNQorbXNnaWQgImdpdCByZXNldCAtLXBhdGNoIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHNwZWM+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzxhxJ9hY8SxbXPEsT5dIFstLV0gWzx5b2wtYmxydMOnPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1peGVkIgorbXNnc3RyICJrYXLEscWfxLFrIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJzb2Z0IgorbXNnc3RyICJ5dW11xZ9hayIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAiaGFyZCIKK21zZ3N0ciAic2VydCIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWVyZ2UiCittc2dzdHIgImJpcmxlxZ90aXIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImtlZXAiCittc2dzdHIgInR1dCIKKworIzogYnVpbHRpbi9yZXNldC5jOjgyCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIkdlw6dlcmxpIGJpciBIRUFEJ2luaXogeW9rLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjg0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiSEVBRCBhxJ9hY8SxIGJ1bHVuYW1hZMSxLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICIlcyBhxJ9hY8SxIGJ1bHVuYW1hZMSxLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBRCDFn2ltZGkgxZ91cmFkYTogJXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAiQmlyIGJpcmxlxZ90aXJtZW5pbiBvcnRhc8SxbmRhICVzIHPEsWbEsXJsYW1hc8SxIHlhcMSxbGFtxLF5b3IuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk0IGJ1aWx0aW4vc3Rhc2guYzo1MjAgYnVpbHRpbi9zdGFzaC5jOjU5NQorIzogYnVpbHRpbi9zdGFzaC5jOjYxOQorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgInNlc3NpeiBvbCwgeWFsbsSxemNhIGhhdGFsYXLEsSBiaWxkaXIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTYKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAiSEVBRCdpIHZlIGluZGVrc2kgc8SxZsSxcmxhIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk3Cittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICJ5YWxuxLF6Y2EgSEVBRCdpIHPEsWbEsXJsYSIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5OSBidWlsdGluL3Jlc2V0LmM6MzAxCittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiSEVBRCdpLCBpbmRla3NpIHZlIMOnYWzEscWfbWEgYcSfYWPEsW7EsSBzxLFmxLFybGEiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDMKK21zZ2lkICJyZXNldCBIRUFEIGJ1dCBrZWVwIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIkhFQUQnaSBzxLFmxLFybGEsIGFuY2FrIHllcmVsIGRlxJ9pxZ9pa2xpa2xlcmkgdHV0IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA5Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCByZW1vdmVkIHBhdGhzIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIiIKKyJ5YWxuxLF6Y2Ega2FsZMSxcsSxbGFuIHlvbGxhcsSxbiBkYWhhIHNvbnJhIGVrbGVuZWNlxJ9pIGdlcsOnZcSfaW5pbiBrYXlkxLFuxLEgeWF6IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZXZpc2lvbi4iCittc2dzdHIgIiclcycgZ2XDp2VybGkgYmlyIHJldml6eW9uIG9sYXJhayDDp8O2esO8bGVtZWRpLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIiclcycgZ2XDp2VybGkgYmlyIGHEn2HDpyBvbGFyYWsgw6fDtnrDvGxlbWVkaS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjAKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2gsIC0te2hhcmQsbWl4ZWQsc29mdH0gaWxlIHV5dW1zdXoiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzAKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIiIKKyJiZWxpcnRpbG1pxZ8geW9sIGlsZSAtLW1peGVkIGt1bGxhbsSxbSBkxLHFn8SxOyB5ZXJpbmUgJ2dpdCByZXNldCAtLSA8eW9sbGFyPicgIgorImt1bGxhbsSxbi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICJCZWxpcnRpbG1pxZ8geW9sIHZhcmtlbiAlcyBzxLFmxLFybGFtYXPEsSB5YXDEsWxhbcSxeW9yLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJXMgc8SxZsSxcmxhbWFzxLFuYSDDp8SxcGxhayBiaXIgZGVwb2RhIGl6aW4gdmVyaWxtaXlvciIKKworIzogYnVpbHRpbi9yZXNldC5jOjM5MQorbXNnaWQgIi1OIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLW1peGVkIgorbXNnc3RyICItTiB5YWxuxLF6Y2EgLS1taXhlZCBpbGUgYmlybGlrdGUga3VsbGFuxLFsYWJpbGlyIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIlPEsWbEsXJsYW1hIHNvbnJhc8SxbmRhIGhhesSxcmxhbm1hbcSxxZ8gZGXEn2nFn2lrbGlrbGVyOiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQuICBZb3UgY2FuXG4iCisidXNlICctLXF1aWV0JyB0byBhdm9pZCB0aGlzLiAgU2V0IHRoZSBjb25maWcgc2V0dGluZyByZXNldC5xdWlldCB0byB0cnVlXG4iCisidG8gbWFrZSB0aGlzIHRoZSBkZWZhdWx0LlxuIgorbXNnc3RyICIiCisiXG4iCisiU8SxZsSxcmxhbWEgc29ucmFzxLFuZGEgaGF6xLFybGFubWFtxLHFnyBkZcSfacWfaWtsaWtsZXJpIHNhecSxcCBkw7ZrbWUgJS4yZiBzYW5peWVcbiIKKyJzw7xyZMO8LiBCdW5kYW4ga2HDp8Sxbm1hayBpw6dpbiAtLXF1aWV0IGt1bGxhbmFiaWxpciwgw7ZudGFuxLFtbMSxIHlhcG1hayBpw6dpbnNlXG4iCisicmVzZXQucXVpZXQgeWFwxLFsYW5kxLFybWEgZGXEn2nFn2tlbmluaSAndHJ1ZScgb2xhcmFrIGRlxJ9pxZ90aXJlYmlsaXJzaW5pei5cbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAixLBuZGVrcyBkb3N5YXPEsSAnJXMnIHJldml6eW9udW5hIHPEsWbEsXJsYW5hbWFkxLEuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDI5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAiWWVuaSBpbmRla3MgZG9zeWFzxLEgeWF6xLFsYW1hZMSxLiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ5OQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGFuZCAtLW1pc3NpbmciCittc2dzdHIgIi0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIHZlIC0tbWlzc2luZyBiaXJsaWt0ZSBrdWxsYW7EsWxhbcSxeW9yIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NTYwCittc2dpZCAib2JqZWN0IGZpbHRlcmluZyByZXF1aXJlcyAtLW9iamVjdHMiCittc2dzdHIgIm5lc25lIHPDvHptZSAtLW9iamVjdHMgZ2VyZWt0aXJpeW9yIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NjEwCittc2dpZCAicmV2LWxpc3QgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5IG9mIG5vdGVzIgorbXNnc3RyICJyZXYtbGlzdCBub3QgZ8O2csO8bnTDvGxlbWVzaW5pIGRlc3Rla2xlbWl5b3IiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo2MTUKK21zZ2lkICJtYXJrZWQgY291bnRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1vYmplY3RzIgorbXNnc3RyICJpbWxlbm1pxZ8gc2F5xLFtLCAtLW9iamVjdHMgaWxlIHV5dW1zdXoiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDA4Cittc2dpZCAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dIgorbXNnc3RyICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxzZcOnZW5la2xlcj5dIC0tIFs8ZGXEn2nFn2tlbmxlcj4uLi5dIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxMworbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAiJy0tJ2kgZ2XDp2lyaWxlbiBiaXIgZGXEn2nFn2tlbiBvbGFyYWsgdHV0IgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxNQorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAic2XDp2VuZWsgb2xtYXlhbiBpbGsgZGXEn2nFn2tlbmRlbiBzb25yYSBheXLEscWfdMSxcm1hecSxIGR1cmR1ciIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTgKK21zZ2lkICJvdXRwdXQgaW4gc3R1Y2sgbG9uZyBmb3JtIgorbXNnc3RyICJ1enVuIGJpw6dpbWRlIMOnxLFrdMSxIHZlciIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1NTEKK21zZ2lkICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxzZcOnZW5la2xlcj5dIC0tIFs8ZGXEn2nFn2tlbmxlcj4uLi5dXG4iCisiXHRvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8ZGXEn2nFn2tlbmxlcj4uLi5dXG4iCisiXHRvcjogZ2l0IHJldi1wYXJzZSBbPHNlw6dlbmVrbGVyPl0gWzxkZcSfacWfa2VubGVyPi4uLl1cbiIKKyJcbiIKKyLEsGxraSBoYWtrxLFuZGEgZWsgYmlsZ2kgacOnaW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiDDp2FsxLHFn3TEsXLEsW4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0Cittc2dpZCAiZ2l0IHJldmVydCBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCByZXZlcnQgWzxzZcOnZW5la2xlcj5dIDxnw7ZuZGVyaW1zaT4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjUKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHJldmVydCA8YWx0a29tdXQ+IgorCisjOiBidWlsdGluL3JldmVydC5jOjMwCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIFs8c2XDp2VuZWtsZXI+XSA8Z8O2bmRlcmltc2k+Li4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjMxCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIDxhbHRrb211dD4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWJlciBncmVhdGVyIHRoYW4gemVybyIKK21zZ3N0ciAiJyVzJyBzZcOnZW5lxJ9pIHPEsWbEsXJkYW4gYsO8ecO8ayBiaXIgc2F5xLEgYmVrbGl5b3IiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzOiAlcywgJXMgaWxlIGJpcmxpa3RlIGt1bGxhbsSxbGFtYXoiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAyCittc2dpZCAiZW5kIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAiZ2VyaSBhbCB2ZXlhIHNlw6ctYWwgZGl6aXNpbmkgc29ubGFuZMSxciIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDMKK21zZ2lkICJyZXN1bWUgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJnZXJpIGFsIHZleWEgc2XDpy1hbCBkaXppc2luaSBzw7xyZMO8ciIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDQKK21zZ2lkICJjYW5jZWwgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJnZXJpIGFsIHZleWEgc2XDpy1hbCBkaXppc2luaSBpcHRhbCBldCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJza2lwIGN1cnJlbnQgY29tbWl0IGFuZCBjb250aW51ZSIKK21zZ3N0ciAiZ2XDp2VybGkgZ8O2bmRlcml5aSBhdGxhIHZlIHPDvHJkw7xyIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICJrZW5kaWxpxJ9pbmRlbiBnw7ZuZGVybWUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA4Cittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImfDtm5kZXJpIGlsZXRpc2luaSBkw7x6ZW5sZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTEKK21zZ2lkICJwYXJlbnQtbnVtYmVyIgorbXNnc3RyICLDvHN0IMO2Z2UgbnVtYXJhc8SxIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMgorbXNnaWQgInNlbGVjdCBtYWlubGluZSBwYXJlbnQiCittc2dzdHIgImFuYSDDvHN0IMO2Z2V5aSBzZcOnIgorCisjOiBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJiaXJsZcWfdGlybWUgc3RyYXRlamlzaSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTYKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJiaXJsZcWfdGlybWUgc3RyYXRlamlzaSBpw6dpbiBzZcOnZW5layIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjUKK21zZ2lkICJhcHBlbmQgY29tbWl0IG5hbWUiCittc2dzdHIgImfDtm5kZXJpIGFkxLFuxLEgaWxpxZ90aXIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI3Cittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgImJhxZ9sYW5nxLHDp3RhIGJvxZ8gb2xhbiBnw7ZuZGVyaWxlcmkga29ydSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjkKK21zZ2lkICJrZWVwIHJlZHVuZGFudCwgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAiZ2VyZWtzaXosIGJvxZ8gZ8O2bmRlcmlsZXJpIHR1dCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzIKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJnZXJpIGFsIGJhxZ9hcsSxc8SxeiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNDUKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgInNlw6ctYWwgYmHFn2FyxLFzxLF6IgorCisjOiBidWlsdGluL3JtLmM6MTkKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBbPHNlw6dlbmVrbGVyPl0gWy0tXSA8ZG9zeWE+Li4uIgorCisjOiBidWlsdGluL3JtLmM6MjA3Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dpZF9wbHVyYWwgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dzdHJbMF0gIiIKKyJBxZ9hxJ/EsWRha2kgZG9zeWFuxLFuIGhlbSBIRUFEJ2RlbiBoZW0gZGUgZG9zeWFkYW4gZmFya2zEsSBoYXrEsXJsYW5txLHFn1xuIgorImnDp2VyacSfaSBtZXZjdXQ6IgorbXNnc3RyWzFdICIiCisiQcWfYcSfxLFkYWtpIGRvc3lhbGFyxLFuIGhlbSBIRUFEJ2RlbiBoZW0gZGUgZG9zeWFkYW4gZmFya2zEsSBoYXrEsXJsYW5txLHFn1xuIgorImnDp2VyacSfaSBtZXZjdXQ6IgorCisjOiBidWlsdGluL3JtLmM6MjEyCittc2dpZCAiIgorIlxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIoem9ybGEga2FsZMSxcm1hayBpw6dpbiAtZiBrdWxsYW7EsW4pIgorCisjOiBidWlsdGluL3JtLmM6MjE2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ3N0clswXSAiQcWfYcSfxLFkYWtpIGRvc3lhbsSxbiBpbmRla3N0ZSBoYXrEsXJsYW5txLHFnyBkZcSfacWfaWtsaWtsZXJpIG1ldmN1dDoiCittc2dzdHJbMV0gIkHFn2HEn8SxZGFraSBkb3N5YWxhcsSxbiBpbmRla3N0ZSBoYXrEsXJsYW5txLHFnyBkZcSfacWfaWtsaWtsZXJpIG1ldmN1dDoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjAgYnVpbHRpbi9ybS5jOjIyOQorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKGRvc3lhecSxIHR1dG1hayBpw6dpbiAtLWNhY2hlZCwgem9ybGEga2FsZMSxcm1hayBpw6dpbiAtZiBrdWxsYW7EsW4pIgorCisjOiBidWlsdGluL3JtLmM6MjI2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICJBxZ9hxJ/EsWRha2kgZG9zeWFuxLFuIHllcmVsIGRlxJ9pxZ9pa2xpa2xlcmkgdmFyOiIKK21zZ3N0clsxXSAiQcWfYcSfxLFkYWtpIGRvc3lhbGFyxLFuIHllcmVsIGRlxJ9pxZ9pa2xpa2xlcmkgdmFyOiIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgImthbGTEsXLEsWxhbiBkb3N5YWxhcsSxIGxpc3RlbGVtZSIKKworIzogYnVpbHRpbi9ybS5jOjI0NAorbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJ5YWxuxLF6Y2EgaW5kZWtzdGVuIGthbGTEsXIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDUKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAiZ8O8bmNlbGxpayBkZW5ldGxlbWVzaW5pIGdlw6dlcnNpeiBrxLFsIgorCisjOiBidWlsdGluL3JtLmM6MjQ2Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgIsO2enlpbmVsaSBrYWxkxLFybWF5YSBpemluIHZlciIKKworIzogYnVpbHRpbi9ybS5jOjI0OAorbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICJoacOnYmlyIMWfZXkgZcWfbGXFn21lbWnFnyBvbHNhIGJpbGUgc8SxZsSxciBrb2R1eWxhIMOnxLFrIgorCisjOiBidWlsdGluL3JtLmM6MjgyCittc2dpZCAiTm8gcGF0aHNwZWMgd2FzIGdpdmVuLiBXaGljaCBmaWxlcyBzaG91bGQgSSByZW1vdmU/IgorbXNnc3RyICJZb2wgYmVsaXJ0ZWNpIHZlcmlsbWVkaS4gSGFuZ2kgZG9zeWFsYXLEsSBrYWxkxLFybWFsxLF5xLFtPyIKKworIzogYnVpbHRpbi9ybS5jOjMwNQorbXNnaWQgInBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisiaWxlcmxlbWVrIGnDp2luIGzDvHRmZW4gZGXEn2nFn2lrbGlrbGVyaW5pemkgLmdpdG1vZHVsZXMnYSBoYXrEsXJsYXnEsW4gdmV5YSAiCisienVsYWxhecSxbiIKKworIzogYnVpbHRpbi9ybS5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICInJXMnLCAtciBvbG1hZGFuIMO2enlpbmVsaSBvbGFyYWsga2FsZMSxcsSxbG3EsXlvciIKKworIzogYnVpbHRpbi9ybS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgcm06IHVuYWJsZSB0byByZW1vdmUgJXMiCittc2dzdHIgImdpdCBybTogJXMga2FsZMSxcsSxbGFtYWTEsSIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoyMAorbXNnaWQgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxob3N0PjpdPGRpcmVjdG9yeT4gIgorIls8cmVmPi4uLl1cbiIKKyIgIC0tYWxsIGFuZCBleHBsaWNpdCA8cmVmPiBzcGVjaWZpY2F0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8bWFraW5lPjpdPGRpemluPiAiCisiWzxiYcWfdnVydT4uLi5dXG4iCisiICAtLWFsbCB2ZSBhw6fEsWsgPGJhxZ92dXJ1PiB0YW7EsW1sYW1hc8SxIGJpcmxpa3RlIGt1bGxhbsSxbGFtYXouIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MworbXNnaWQgInJlbW90ZSBuYW1lIgorbXNnc3RyICJ1emFrIGtvbnVtIGFkxLEiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc3Cittc2dpZCAidXNlIHN0YXRlbGVzcyBSUEMgcHJvdG9jb2wiCittc2dzdHIgImR1cnVtc3V6IFJQQyBwcm90b2tvbMO8bsO8IGt1bGxhbiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzgKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAiYmHFn3Z1cnVsYXLEsSBzdGRpbidkZW4gb2t1IgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OQorbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgInV6YWsga29udW0geWFyZMSxbWPEsXPEsW5kYW4gZHVydW0geWF6ZMSxciIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE0Cittc2dpZCAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc2hvcnRsb2cgWzxzZcOnZW5la2xlcj5dIFs8cmV2aXp5b24tZXJpbWk+XSBbWy0tXSA8eW9sPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNQorbXNnaWQgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzxzZcOnZW5la2xlcj5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY0Cittc2dpZCAiR3JvdXAgYnkgY29tbWl0dGVyIHJhdGhlciB0aGFuIGF1dGhvciIKK21zZ3N0ciAiWWF6YXIgeWVyaW5lIGfDtm5kZXJpY2kgaWxlIGdydXBsYSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NgorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAiw6fEsWt0xLF5xLEgeWF6YXIgYmHFn8SxbmEgb2xhbiBnw7ZuZGVyaSBzYXnEsXPEsW5hIGfDtnJlIHPEsXJhbGEiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjgKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAiR8O2bmRlcmkgYcOnxLFrbGFtYWxhcsSxbsSxIGdpemxlLCB5YWxuxLF6Y2EgZ8O2bmRlcmkgc2F5xLFzxLFuxLEgdmVyIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcwCittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAiSGVyIHlhemFyxLFuIGUtcG9zdGEgYWRyZXNpbmkgZ8O2c3RlciIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MQorbXNnaWQgIjx3PlssPGkxPlssPGkyPl1dIgorbXNnc3RyICI8dz5bLDxpMT5bLDxpMj5dXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MgorbXNnaWQgIkxpbmV3cmFwIG91dHB1dCIKK21zZ3N0ciAiw4fEsWt0xLEgc2F0xLFybGFyxLFuxLEga2F5ZMSxciIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjMwMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBnaXZlbiBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgImRlcG8gZMSxxZ/EsW5kYSDDp29rIGZhemxhIGRlxJ9pxZ9rZW4gdmVyaWxkaSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjEzCittc2dpZCAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08bmUtemFtYW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTcKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPHRlbWVsPl1dIFstLWxpc3RdIFs8YmHFn3Z1cnU+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIKK21zZ3N0clswXSAiJXMgeW9rIHNhecSxbMSxeW9yOyAlZCBiYcWfdnVydWRhbiBmYXpsYXPEsSBpxZ9sZW5lbWl5b3IiCittc2dzdHJbMV0gIiVzIHlvayBzYXnEsWzEsXlvcjsgJWQgYmHFn3Z1cnVkYW4gZmF6bGFzxLEgacWfbGVuZW1peW9yIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG1hdGNoaW5nIHJlZnMgd2l0aCAlcyIKK21zZ3N0ciAiJXMgaWxlIGXFn2xlxZ9lbiBiYcWfdnVydSB5b2siCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDUKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgInV6YWsgaXpsZW1lIGRhbGxhcsSxbsSxIHZlIHllcmVsIGRhbGxhcsSxIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAidXphayBpemxlbWUgZGFsbGFyxLFuxLEgZ8O2c3RlciIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0OQorbXNnaWQgImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giCittc2dzdHIgIicqISstJ2kgZGFsYSBnw7ZyZSByZW5rbGVuZGlyIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUxCittc2dpZCAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiCittc2dzdHIgIm9ydGFrIGF0YWRhbiBzb25yYSA8bj4gZ8O2bmRlcmkgZGFoYSBnw7ZzdGVyIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUzCittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICJtb3JlPS0rIGXFn2FubGFtbMSxc8SxIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU0Cittc2dpZCAic3VwcHJlc3MgbmFtaW5nIHN0cmluZ3MiCittc2dzdHIgImFkbGFuZMSxcm1hIGRpemlsZXJpbmkgZ2l6bGUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTYKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiZ2XDp2VybGkgZGFsxLEgacOnZXIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTgKK21zZ2lkICJuYW1lIGNvbW1pdHMgd2l0aCB0aGVpciBvYmplY3QgbmFtZXMiCittc2dzdHIgImfDtm5kZXJpbGVyaSBrZW5kaSBuZXNuZSBhZGxhcsSxeWxhIGFkbGFuZMSxciIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MAorbXNnaWQgInNob3cgcG9zc2libGUgbWVyZ2UgYmFzZXMiCittc2dzdHIgIm9sYXPEsSBiaXJsZcWfdGlybWUgdGVtZWxsZXJpbmkgZ8O2c3RlciIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MgorbXNnaWQgInNob3cgcmVmcyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciByZWYiCittc2dzdHIgImJhxZ9rYSBiYcWfdnVydWRhbiBlcmnFn2lsZW1leWVuIGJhxZ92dXJ1bGFyxLEgZ8O2c3RlciIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NAorbXNnaWQgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiZ8O2bmRlcmlsZXJpIGlsaW5nZXNlbCBzxLFyYWRhIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjcKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAieWFsbsSxemNhIGJpcmluY2kgZGFsZGEgb2xtYXlhbiBnw7ZuZGVyaWxlcmkgZ8O2c3RlciIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2OQorbXNnaWQgInNob3cgbWVyZ2VzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lIHRpcCIKK21zZ3N0ciAieWFsbsSxemNhIGJpciB1w6d0YW4gdWxhxZ/EsWxhYmlsaXIgb2xhbiBiaXJsZcWfdGlybWVsZXJpIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzEKK21zZ2lkICJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgd2hlcmUgcG9zc2libGUiCittc2dzdHIgIm9sYWJpbGRpxJ9pbmNlIHRhcmloIHPEsXJhc8SxbsSxIGtvcnV5YXJhayBpbGluZ2VzZWwgYmnDp2ltZGUgc8SxcmFsYSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw8dGVtZWw+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NQorbXNnaWQgInNob3cgPG4+IG1vc3QgcmVjZW50IHJlZi1sb2cgZW50cmllcyBzdGFydGluZyBhdCBiYXNlIgorbXNnc3RyICJ0YWJhbmRhIGJhxZ9sYXlhcmFrIGVuIHllbmkgPG4+IGJhxZ92dXJ1IGfDvG5sw7zEn8O8IGdpcmRpbGVyaW5pIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MTEKK21zZ2lkICIiCisiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvciAtLW1lcmdlLWJhc2UiCittc2dzdHIgIiIKKyItLXJlZmxvZzsgLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCB2ZXlhIC0tbWVyZ2UtYmFzZSBpbGUgdXl1bXN1eiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczNQorbXNnaWQgIm5vIGJyYW5jaGVzIGdpdmVuLCBhbmQgSEVBRCBpcyBub3QgdmFsaWQiCittc2dzdHIgImRhbCB2ZXJpbG1lZGkgdmUgSEVBRCBnZcOnZXJzaXoiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MzgKK21zZ2lkICItLXJlZmxvZyBvcHRpb24gbmVlZHMgb25lIGJyYW5jaCBuYW1lIgorbXNnc3RyICItLXJlZmxvZyBzZcOnZW5lxJ9pIGnDp2luIGJpciBkYWwgYWTEsSBnZXJla2xpIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgJWQgZW50cnkgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ2lkX3BsdXJhbCAib25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dzdHJbMF0gImF5bsSxIGFuZGEgeWFsbsSxemNhICVkIGdpcmRpIGfDtnN0ZXJpbGViaWxpciIKK21zZ3N0clsxXSAiYXluxLEgYW5kYSB5YWxuxLF6Y2EgJWQgZ2lyZGkgZ8O2c3RlcmlsZWJpbGlyIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmICVzIgorbXNnc3RyICJiw7Z5bGUgYmlyIGJhxZ92dXJ1IHlvazogJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2LiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2cy4iCittc2dzdHJbMF0gIiVkIHJldml6eW9uZGFuIGJhxZ9rYXPEsSBpxZ9sZW5lbWl5b3IuIgorbXNnc3RyWzFdICIlZCByZXZpenlvbmRhbiBiYcWfa2FzxLEgacWfbGVuZW1peW9yLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiclcycgZ2XDp2VybGkgYmlyIGJhxZ92dXJ1IGRlxJ9pbC4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgY29tbWl0ICVzICglcykiCittc2dzdHIgIiVzIGfDtm5kZXJpc2kgYnVsdW5hbcSxeW9yICglcykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMgorbXNnaWQgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPGRpemdpPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMworbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxkaXpnaT5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYyCittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAieWFsbsSxemNhIGV0aWtldGxlcmkgZ8O2c3RlciAoZGFsIHXDp2xhcsSxeWxhIGJpcmxpa3RlIGt1bGxhbsSxbGFiaWxpcikiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjMKK21zZ2lkICJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIgorbXNnc3RyICJ5YWxuxLF6Y2EgZGFsIHXDp2xhcsSxbsSxIGfDtnN0ZXIgKGV0aWtldGxlcmxlIGJpcmxpa3RlIGt1bGxhbsSxbGFiaWxpcikiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjQKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICJkYWhhIHPEsWvEsSBiYcWfdnVydSBkZW5ldGxlbWVzaTsga2VzaW4gYmHFn3Z1cnUgeW9sdSBnZXJla3RpcmlyIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY3IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjkKK21zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSwgZXZlbiBpZiBpdCB3b3VsZCBiZSBmaWx0ZXJlZCBvdXQiCittc2dzdHIgInPDvHrDvGzDvHAgZMSxxZ9hcsSxZGEga2Fsc2EgYmlsZSBIRUFEIGJhxZ92dXJ1c3VudSBnw7ZzdGVyIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcxCittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMiCittc2dzdHIgImV0aWtldGxlcmkgbmVzbmUgbnVtYXJhbGFyxLFuYSDDp2V2aXIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzMKK21zZ2lkICJvbmx5IHNob3cgU0hBMSBoYXNoIHVzaW5nIDxuPiBkaWdpdHMiCittc2dzdHIgIlNIQTEgc2HEn2xhbWFzxLFuxLEgeWFsbsSxemNhIDxuPiBiYXNhbWFrIGt1bGxhbmFyYWsgZ8O2c3RlciIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3NworbXNnaWQgImRvIG5vdCBwcmludCByZXN1bHRzIHRvIHN0ZG91dCAodXNlZnVsIHdpdGggLS12ZXJpZnkpIgorbXNnc3RyICJzb251w6dsYXLEsSBzdGRvdXQnYSB5YXpkxLFybWEgKC0tdmVyaWZ5IGlsZSBiaXJsaWt0ZSBrdWxsYW7EscWfbMSxKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInNob3cgcmVmcyBmcm9tIHN0ZGluIHRoYXQgYXJlbid0IGluIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgInN0ZGluJ2RlbiB5ZXJlbCBiaXIgZGVwb2RhIG9sbWF5YW4gYmHFn3Z1cnVsYXLEsSBnw7ZzdGVyIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIxCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxhZGR8ZGlzYWJsZSkgPG9wdGlvbnM+IgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGFkZHxkaXNhYmxlKSA8c2XDp2VuZWtsZXI+IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjY0Cittc2dpZCAidGhpcyB3b3JrdHJlZSBpcyBub3Qgc3BhcnNlIChzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgbm90IGV4aXN0KSIKK21zZ3N0ciAiIgorImJ1IMOnYWzEscWfbWEgYcSfYWPEsSBhcmFsxLFrbMSxIGRlxJ9pbCAoc3BhcnNlLWNoZWNrb3V0IGRvc3lhc8SxIHZhciBvbG1heWFiaWxpcikiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjI1Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yIHNwYXJzZS1jaGVja291dCBmaWxlIgorbXNnc3RyICJhcmFsxLFrbMSxIMOnxLFrxLHFnyBkb3N5YXPEsSBpw6dpbiBkaXppbiBvbHXFn3R1cnVsYW1hZMSxIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI2NgorbXNnaWQgImZhaWxlZCB0byBzZXQgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyBzZXR0aW5nIgorbXNnc3RyICJleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIHlhcMSxbGFuZMSxcm1hc8SxIGF5YXJsYW5hbWFkxLEiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjgzCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IFstLWNvbmVdIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzAyCittc2dpZCAiaW5pdGlhbGl6ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGluIGNvbmUgbW9kZSIKK21zZ3N0ciAiYXJhbMSxa2zEsSDDp8Sxa8SxxZ/EsSBrb25pIGtpcGluZGUgaWxrbGVuZGlyIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjMwOAorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJhcmFsxLFrbMSxIMOnxLFrxLHFnyBpbGtsZW5kaXIiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgIiclcycgYcOnxLFsYW1hZMSxIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgbm9ybWFsaXplIHBhdGggJXMiCittc2dzdHIgIiclcycgeW9sdSBvbGHEn2FubGHFn3TEsXLEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDEwCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCAoc2V0fGFkZCkgKC0tc3RkaW4gfCA8cGF0dGVybnM+KSIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCAoc2V0fGFkZCkgKC0tc3RkaW4gfCA8ZGl6Z2lsZXI+KSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucXVvdGUgQy1zdHlsZSBzdHJpbmcgJyVzJyIKK21zZ3N0ciAiQyBiacOnZW1saSAnJXMnIGRpemlzaW5pbiB0xLFybmFrbGFyxLEga2FsZMSxcsSxbGFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDg5IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTEzCittc2dpZCAidW5hYmxlIHRvIGxvYWQgZXhpc3Rpbmcgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICJtZXZjdXQgYXJhbMSxa2zEsSDDp8Sxa8SxxZ8gZGl6Z2lsZXJpIHnDvGtsZW5lbWl5b3IiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTU4Cittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIHN0YW5kYXJkIGluIgorbXNnc3RyICJkaXpnaWxlcmkgc3RkaW4nZGVuIG9rdSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1NjQKK21zZ2lkICJzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICJhcmFsxLFrbMSxIMOnxLFrxLHFnyBkaXpnaWxlcmkgYXlhcmxhIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjU4MQorbXNnaWQgImRpc2FibGUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJhcmFsxLFrbMSxIMOnxLFrxLHFn8SxIGRldnJlIGTEscWfxLEgYsSxcmFrIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjU5MworbXNnaWQgImVycm9yIHdoaWxlIHJlZnJlc2hpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIsOnYWzEscWfbWEgZGl6aW5pIHllbmlsZW5pcmtlbiBoYXRhIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjIgYnVpbHRpbi9zdGFzaC5jOjM4Cittc2dpZCAiZ2l0IHN0YXNoIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBzdGFzaCBsaXN0IFs8c2XDp2VuZWtsZXI+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIzIGJ1aWx0aW4vc3Rhc2guYzo0MworbXNnaWQgImdpdCBzdGFzaCBzaG93IFs8b3B0aW9ucz5dIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHNob3cgWzxzZcOnZW5la2xlcj5dIFs8enVsYT5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjQgYnVpbHRpbi9zdGFzaC5jOjQ4Cittc2dpZCAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8enVsYT5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjUKK21zZ2lkICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzx6dWxhPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNiBidWlsdGluL3N0YXNoLmM6NjMKK21zZ2lkICJnaXQgc3Rhc2ggYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBicmFuY2ggPGRhbC1hZMSxPiBbPHp1bGE+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI3IGJ1aWx0aW4vc3Rhc2guYzo2OAorbXNnaWQgImdpdCBzdGFzaCBjbGVhciIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjgKK21zZ2lkICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl1cbiIKKyIgICAgICAgICAgWy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPiBbLS1wYXRoc3BlYy1maWxlLW51bF1dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8aWxldGk+XVxuIgorIiAgICAgICAgICBbLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGRvc3lhPiBbLS1wYXRoc3BlYy1maWxlLW51bF1dXG4iCisiICAgICAgICAgIFstLV0gWzx5b2wtYmxydMOnPi4uLl1dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MzIgYnVpbHRpbi9zdGFzaC5jOjg1Cittc2dpZCAiIgorImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPG1lc3NhZ2U+XSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPGlsZXRpPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MworbXNnaWQgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHp1bGE+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU4Cittc2dpZCAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHp1bGE+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjczCittc2dpZCAiZ2l0IHN0YXNoIHN0b3JlIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XSBbLXF8LS1xdWlldF0gPGNvbW1pdD4iCittc2dzdHIgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxpbGV0aT5dIFstcXwtLXF1aWV0XSA8Z8O2bmRlcmk+IgorCisjOiBidWlsdGluL3N0YXNoLmM6NzgKK21zZ2lkICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl1cbiIKKyIgICAgICAgICAgWy0tXSBbPHBhdGhzcGVjPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxpbGV0aT5dXG4iCisiICAgICAgICAgIFstLV0gWzx5b2wtYmxydMOnPi4uLl1dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIiclcycgenVsYXlhIGJlbnplciBiaXIgZ8O2bmRlcmkgZGXEn2lsIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6JXMiCittc2dzdHIgIsOHb2sgZmF6bGEgcmV2aXp5b24gYmVsaXJ0aWxkaTolcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU0OQorbXNnaWQgIk5vIHN0YXNoIGVudHJpZXMgZm91bmQuIgorbXNnc3RyICJadWxhIGdpcmRpc2kgYnVsdW5hbWFkxLEuIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJXMgZ2XDp2VybGkgYmlyIGJhxZ92dXJ1IGRlxJ9pbCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyNSBnaXQtbGVnYWN5LXN0YXNoLnNoOjc1Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIgorbXNnc3RyICJwYXJhbWV0cmVsaSBnaXQgc3Rhc2ggY2xlYXIgaGVuw7x6IGt1bGxhbsSxbGFiaWxpciBkZcSfaWwiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MDQKK21zZ2lkICJjYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgImJpciBiaXJsZcWfdGlybWVuaW4gb3J0YXPEsW5kYSB6dWxhIHV5Z3VsYW5hbcSxeW9yIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSBkaWZmICVzXiEuIgorbXNnc3RyICJkaWZmIG9sdcWfdHVydWxhbWFkxLE6ICVzXiEuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDIyCittc2dpZCAiY29uZmxpY3RzIGluIGluZGV4LlRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICLEsG5kZWtzdGUgw6dha8SxxZ9tYWxhciB2YXIuIC0taW5kZXggb2xtYWRhbiBkZW5leWluLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyOAorbXNnaWQgImNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgImluZGVrcyBhxJ9hY8SxIGtheWRlZGlsZW1lZGkiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MzcKK21zZ2lkICJjb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCIKK21zZ3N0ciAiaXpsZW5tZXllbiBkb3N5YWxhciB6dWxhZGFuIGdlcmkgZ2V0aXJpbGVtZWRpIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgd2l0aCAlcyIKK21zZ3N0ciAiJXMsICVzIGlsZSBiaXJsZcWfdGlyaWxpeW9yIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDYxIGdpdC1sZWdhY3ktc3Rhc2guc2g6NjgxCittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICLEsG5kZWtzIHp1bGFkYW4gw6fEsWthcnTEsWxtYW3EscWfdMSxLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUyMiBidWlsdGluL3N0YXNoLmM6NjIxCittc2dpZCAiYXR0ZW1wdCB0byByZWNyZWF0ZSB0aGUgaW5kZXgiCittc2dzdHIgImluZGVrcyB5ZW5pZGVuIG9sdcWfdHVydWxtYXlhIMOnYWzEscWfxLFsxLF5b3IiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAlcyAoJXMpIgorbXNnc3RyICIlcyBixLFyYWvEsWxkxLEgKCVzKSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiVzOiBadWxhIGdpcmRpc2kgYsSxcmFrxLFsYW1hZMSxIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJXMnIGJpciB6dWxhIGJhxZ92dXJ1c3UgZGXEn2lsIgorCisjOiBidWlsdGluL3N0YXNoLmM6NjMzIGdpdC1sZWdhY3ktc3Rhc2guc2g6Njk1Cittc2dpZCAiVGhlIHN0YXNoIGVudHJ5IGlzIGtlcHQgaW4gY2FzZSB5b3UgbmVlZCBpdCBhZ2Fpbi4iCittc2dzdHIgIlp1bGEgZ2lyZGlzaSB5ZW5pZGVuIGdlcmVrc2luaW1pbml6IG9sdXJzYSBkaXllIHNha2xhbsSxeW9yLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjY1NiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcxMworbXNnaWQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiRGFsIGFkxLEgYmVsaXJ0aWxtZWRpIgorCisjOiBidWlsdGluL3N0YXNoLmM6Nzk2IGJ1aWx0aW4vc3Rhc2guYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAlcyB3aXRoICVzIgorbXNnc3RyICIlcywgJXMgaWxlIGfDvG5jZWxsZW5lbWl5b3IiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo4MTQgYnVpbHRpbi9zdGFzaC5jOjE0NzggYnVpbHRpbi9zdGFzaC5jOjE1NDMKK21zZ2lkICJzdGFzaCBtZXNzYWdlIgorbXNnc3RyICJ6dWxhIGlsZXRpc2kiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo4MjQKK21zZ2lkICJcImdpdCBzdGFzaCBzdG9yZVwiIHJlcXVpcmVzIG9uZSA8Y29tbWl0PiBhcmd1bWVudCIKK21zZ3N0ciAiXCJnaXQgc3Rhc2ggc3RvcmVcIiBiaXIgPGfDtm5kZXJpPiBkZcSfacWfa2VuaSBnZXJla3RpcmlyIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTA0OSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxOAorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgIkRlxJ9pxZ9pa2xpayBzZcOnaWxtZWRpIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE0OSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE1MAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICJIZW7DvHogaWxrIGfDtm5kZXJpbml6IHlvayIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNzYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNjUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAiR2XDp2VybGkgaW5kZWtzIGR1cnVtdSBrYXlkZWRpbGVtaXlvciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExODUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxODAKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLEsHpsZW5tZXllbiBkb3N5YWxhciBrYXlkZWRpbGVtaXlvciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExOTYgYnVpbHRpbi9zdGFzaC5jOjEyMDUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMDEKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjE0Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCittc2dzdHIgIkdlw6dlcmxpIMOnYWzEscWfbWEgYcSfYWPEsSBkdXJ1bXUga2F5ZGVkaWxlbWl5b3IiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjMzIGdpdC1sZWdhY3ktc3Rhc2guc2g6MjM0Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIsOHYWzEscWfbWEgYcSfYWPEsSBkdXJ1bXUga2F5ZMSxIHlhesSxbGFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjgyIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzM4Cittc2dpZCAiQ2FuJ3QgdXNlIC0tcGF0Y2ggYW5kIC0taW5jbHVkZS11bnRyYWNrZWQgb3IgLS1hbGwgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiLS1wYXRjaCwgLS1pbmNsdWRlLXVudHJhY2tlZCB2ZXlhIC0tYWxsIGhlcHNpIGJpciBhbmRhIGt1bGxhbsSxbGFtxLF5b3IiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjk4Cittc2dpZCAiRGlkIHlvdSBmb3JnZXQgdG8gJ2dpdCBhZGQnPyIKK21zZ3N0ciAiJ2dpdCBhZGQnIHlhcG1hecSxIG3EsSB1bnV0dHVudXo/IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMxMyBnaXQtbGVnYWN5LXN0YXNoLnNoOjM0NgorbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAiS2F5ZGVkaWxlY2VrIHllcmVsIGRlxJ9pxZ9pa2xpayB5b2siCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzIwIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzUxCittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIlp1bGEgaWxrbGVuZGlyaWxlbWl5b3IiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzM1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICJHZcOnZXJsaSBkdXJ1bSBrYXlkZWRpbGVtaXlvciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICVzIgorbXNnc3RyICLDh2FsxLHFn21hIGRpemluaSB2ZSBpbmRla3MgZHVydW11ICVzIGtheWRlZGlsZGkiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDMwIGdpdC1sZWdhY3ktc3Rhc2guc2g6Mzg1Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICLDh2FsxLHFn21hIGHEn2FjxLEgZGXEn2nFn2lrbGlrbGVyaSBrYWxkxLFyxLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjkgYnVpbHRpbi9zdGFzaC5jOjE1MzQKK21zZ2lkICJrZWVwIGluZGV4IgorbXNnc3RyICJpbmRla3NpIHR1dCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NzEgYnVpbHRpbi9zdGFzaC5jOjE1MzYKK21zZ2lkICJzdGFzaCBpbiBwYXRjaCBtb2RlIgorbXNnc3RyICJ5YW1hIGtpcGluZGUgenVsYSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NzIgYnVpbHRpbi9zdGFzaC5jOjE1MzcKK21zZ2lkICJxdWlldCBtb2RlIgorbXNnc3RyICJzZXNzaXoga2lwIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3NCBidWlsdGluL3N0YXNoLmM6MTUzOQorbXNnaWQgImluY2x1ZGUgdW50cmFja2VkIGZpbGVzIGluIHN0YXNoIgorbXNnc3RyICJ6dWxhZGEgaXpsZW5tZXllbiBkb3N5YWxhcsSxIGnDp2VyIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3NiBidWlsdGluL3N0YXNoLmM6MTU0MQorbXNnaWQgImluY2x1ZGUgaWdub3JlIGZpbGVzIgorbXNnc3RyICJ5b2sgc2F5bWEgZG9zeWFsYXLEsW7EsSBpw6dlciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4ZWMgJXMiCittc2dzdHIgIiVzICdleGVjJyB5YXDEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM3Cittc2dpZCAic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIgorbXNnc3RyICJ5b3J1bSBrYXJha3RlcmkgaWxlIGJhxZ9sYXlhbiB0w7xtIHNhdMSxcmxhcsSxIGF0bGEgdmUga2FsZMSxciIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6NDAKK21zZ2lkICJwcmVwZW5kIGNvbW1lbnQgY2hhcmFjdGVyIGFuZCBzcGFjZSB0byBlYWNoIGxpbmUiCittc2dzdHIgImhlciBzYXTEsXLEsW4gYmHFn8SxbmEgeW9ydW0ga2FyYWt0ZXJpIHZlIGJvxZ9sdWsga295IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0aW5nIGEgZnVsbCByZWYgbmFtZSwgZ290ICVzIgorbXNnc3RyICJUYW0gYmlyIGJhxZ92dXJ1IGFkxLEgYmVrbGVuaXlvcmR1LCAlcyBhbMSxbmTEsSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY0Cittc2dpZCAic3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUgdGFrZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSBkZcSfacWfa2VuIGFsbWF6IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyVzJyIKK21zZ3N0ciAiJyVzJyB1cmwnc2luZGVuIGJpciBiaWxlxZ9lbiDDp8Sxa2FyxLFsYW3EsXlvciIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxMCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NQorbXNnaWQgImFsdGVybmF0aXZlIGFuY2hvciBmb3IgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgImfDtnJlY2VsaSB5b2xsYXIgacOnaW4gYWx0ZXJuYXRpZiB0dXR0dXJ1Y3UiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MTUKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTx5b2w+XSBbPHlvbD4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICIuZ2l0bW9kdWxlcyBpw6dpbmRlICclcycgYWx0bW9kw7xsIHlvbHUgacOnaW4gdXJsIGJ1bHVuYW1hZMSxIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICclcydcbiIKK21zZ3N0ciAiR2lyaWxpeW9yOiAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyBmb3IgJXNcbiIKKyIuIgorbXNnc3RyICIiCisicnVuX2NvbW1hbmQsICVzIGnDp2luIHPEsWbEsXIgb2xtYXlhbiBkdXJ1bSBkw7ZuZMO8cmTDvFxuIgorIi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyB3aGlsZSByZWN1cnNpbmcgaW4gdGhlIG5lc3RlZCAiCisic3VibW9kdWxlcyBvZiAlc1xuIgorIi4iCittc2dzdHIgIiIKKyJydW5fY29tbWFuZCwgJXMgw7ZnZXNpbmluIGnDpyBpw6dlIGdlw6dtacWfIGFsdG1vZMO8bGxlcmkgacOnaW5kZSDDtnp5aW5lbGVya2VuICIKKyJzxLFmxLFyIG9sbWF5YW4gZHVydW0gZMO2bmTDvHJkw7wiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NjUKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2YgZW50ZXJpbmcgZWFjaCBzdWJtb2R1bGUgY29tbWFuZCIKK21zZ3N0ciAiSGVyIGFsdG1vZMO8bCBrb211dHUgZ2lyacWfaW5pbiDDp8Sxa3TEsXPEsW7EsSBnaXpsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA2MworbXNnaWQgIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAixLDDpyBpw6dlIGdlw6dtacWfIGFsdG1vZMO8bGxlciBpw6dpbmUgw7Z6eWluZWxlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTcyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWy0tXSA8Y29tbWFuZD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBmb3JlYWNoIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gPGtvbXV0PiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGxvb2sgdXAgY29uZmlndXJhdGlvbiAnJXMnLiBBc3N1bWluZyB0aGlzIHJlcG9zaXRvcnkgaXMgaXRzIG93biAiCisiYXV0aG9yaXRhdGl2ZSB1cHN0cmVhbS4iCittc2dzdHIgIiIKKyInJXMnIHlhcMSxbGFuZMSxcm1hc8SxIGFyYW5hbWFkxLEuIEJ1IGRlcG9udW4ga2VuZGkgeWV0a2lsaSDDvHN0a2F5bmHEn8SxIG9sZHXEn3UgIgorInZhcnNhecSxbMSxeW9yLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJBbHRtb2TDvGwgeW9sdSB1cmwnc2kgJyVzJyBrYXlkxLEgeWFwxLFsYW1hZMSxIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIiclcycgYWx0bW9kw7xsw7wgKCVzKSwgJyVzJyB5b2x1bmEga2F5ZMSxIHlhcMSxbGTEsVxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGNvbW1hbmQgdXBkYXRlIG1vZGUgc3VnZ2VzdGVkIGZvciBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICJ1eWFyxLE6ICclcycgYWx0bW9kw7xsw7wgacOnaW4ga29tdXQgZ8O8bmNlbGxlbWVzaSDDtm5lcmlsbWl5b3JcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiclcycgYWx0bW9kw7xsw7wgeW9sdSBpw6dpbiBnw7xuY2VsbGVtZSBraXBpIGtheWTEsSB5YXDEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTAKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiQmlyIGFsdG1vZMO8bCBpbGtsZW5kaXJtZXNpIMOnxLFrdMSxc8SxbsSxIGdpemxlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzxvcHRpb25zPl0gWzxwYXRoPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8c2XDp2VuZWtsZXI+XSBbPHlvbD5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Nzg5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiJyVzJyB5b2x1IGnDp2luIC5naXRtb2R1bGVzIGnDp2luZGUgYWx0bW9kw7xsIGXFn2xlbWkgYnVsdW5tYWTEsSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHJlZiBpbnNpZGUgdGhlIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICInJXMnIGFsdG1vZMO8bMO8IGnDp2luZGUgSEVBRCBiYcWfdnVydXN1IMOnw7Z6w7xsZW1lZGkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NjQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiJyVzJyBhbHRtb2TDvGzDvG5lIMO2enlpbmVsZW5lbWVkaSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4OCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5OQorbXNnaWQgIlN1cHByZXNzIHN1Ym1vZHVsZSBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICJBbHRtb2TDvGwgZHVydW0gw6fEsWt0xLFzxLFuxLEgZ2l6bGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODkKK21zZ2lkICIiCisiVXNlIGNvbW1pdCBzdG9yZWQgaW4gdGhlIGluZGV4IGluc3RlYWQgb2YgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIHN1Ym1vZHVsZSAiCisiSEVBRCIKK21zZ3N0ciAiIgorIkFsdG1vZMO8bCBIRUFEJ2kgacOnaW5kZSBkZXBvbGFuYW4gZ8O2bmRlcmkgeWVyaW5lIGluZGVrc3RlIGRlcG9sYW5hbiBnw7ZuZGVyaXlpICIKKyJrdWxsYW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4OTAKK21zZ2lkICJyZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgImnDpyBpw6dlIGdlw6dtacWfIGFsdG1vZMO8bGUgw7Z6eWluZWxlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODk1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHlvbD4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTE5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHBhdGg+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8eW9sPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk4MworIywgYy1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICclcydcbiIKK21zZ3N0ciAiJyVzJyBpw6dpbiBhbHRtb2TDvGwgdXJsJ3NpIGXFn2l0bGVuaXlvclxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiclcycgYWx0bW9kw7xsw7wgeW9sdSBpw6dpbiB1cmwga2F5ZMSxIHlhcMSxbGFtYWTEsSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGdldCB0aGUgZGVmYXVsdCByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICInJXMnIGFsdG1vZMO8bMO8IGnDp2luIMO2bnRhbsSxbWzEsSB1emFrIGtvbnVtIGFsxLFuYW1hZMSxIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIiclcycgYWx0bW9kw7xsw7wgacOnaW4gdXphayBrb251bSBnw7xuY2VsbGVuZW1lZGkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDYxCittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IG9mIHN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCIKK21zZ3N0ciAiQWx0bW9kw7xsIHVybCdzaSBlxZ9pdGxlbWUgw6fEsWt0xLFzxLFuxLEgZ2l6bGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDY4Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs8eW9sPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSAodXNlICdybSAtcmYnIGlmIHlvdSAiCisicmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIgorbXNnc3RyICIiCisiQWx0bW9kw7xsIMOnYWzEscWfbWEgYcSfYWPEsSAnJXMnIGJpciAuZ2l0IGRpemluaSBpw6dlcml5b3IgKHTDvG0gZ2XDp21pxZ9pIGRhaGlsICIKKyJvbGFjYWsgYmnDp2ltZGUga2FsZMSxcm1hayBpc3RpeW9yc2FuxLF6ICdybSAtcmYnIGt1bGxhbsSxbikiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgbG9jYWwgbW9kaWZpY2F0aW9uczsgdXNlICctZicgdG8gZGlzY2FyZCAiCisidGhlbSIKK21zZ3N0ciAiIgorIkFsdG1vZMO8bCDDp2FsxLHFn21hIGHEn2FjxLEgJyVzJyB5ZXJlbCBkZcSfacWfaWtsaWtsZXIgacOnZXJpeW9yOyBvbmxhcsSxIGF0bWFrIGnDp2luICIKKyInLWYnIGt1bGxhbsSxbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyVzJ1xuIgorbXNnc3RyICInJXMnIGRpemluaSB0ZW1pemxlbmRpXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgc3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnXG4iCittc2dzdHIgIiclcycgYWx0bW9kw7xsIMOnYWzEscWfbWEgYcSfYWPEsSBrYWxkxLFyxLFsYW1hZMSxXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZW1wdHkgc3VibW9kdWxlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiYm/FnyBhbHRtb2TDvGwgZGl6aW5pICVzIG9sdcWfdHVydWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiJyVzJyBhbHRtb2TDvGzDvCAoJXMpLCAnJXMnIHlvbHVuYSBrYXlkxLEgeWFwxLFsbWFtxLHFn1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIwMAorbXNnaWQgIlJlbW92ZSBzdWJtb2R1bGUgd29ya2luZyB0cmVlcyBldmVuIGlmIHRoZXkgY29udGFpbiBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJBbHRtb2TDvGwgw6dhbMSxxZ9tYSBhxJ9hw6dsYXLEsW7EsSB5ZXJlbCBkZcSfacWfaWtsaWtsZXIgacOnZXJzZWxlciBiaWxlIGthbGTEsXIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjAxCittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiVMO8bSBhbHRtb2TDvGxsZXJpbiBrYXlkxLFuxLEga2FsZMSxciIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMDYKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzxwYXRoPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzx5b2w+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjIwCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorIlTDvG0gYWx0bW9kw7xsbGVyaW4gaWxrbGVuZGlybWVzaW5pIGdlcsOnZWt0ZW4gZ2VyaSBhbG1hayBpc3RpeW9yc2FuxLF6ICctYWxsJyAiCisia3VsbGFuxLFuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTI4OQorbXNnaWQgIiIKKyJBbiBhbHRlcm5hdGUgY29tcHV0ZWQgZnJvbSBhIHN1cGVycHJvamVjdCdzIGFsdGVybmF0ZSBpcyBpbnZhbGlkLlxuIgorIlRvIGFsbG93IEdpdCB0byBjbG9uZSB3aXRob3V0IGFuIGFsdGVybmF0ZSBpbiBzdWNoIGEgY2FzZSwgc2V0XG4iCisic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgdG8gJ2luZm8nIG9yLCBlcXVpdmFsZW50bHksIGNsb25lIHdpdGhcbiIKKyInLS1yZWZlcmVuY2UtaWYtYWJsZScgaW5zdGVhZCBvZiAnLS1yZWZlcmVuY2UnLiIKK21zZ3N0ciAiIgorIkJpciBzw7xwZXJwcm9qZW5pbiBhbHRlcm5hdGlmaW5kZW4gaGVzYXBsYW5hbiBiaXIgYWx0ZXJuYXRpZiBnZcOnZXJzaXouXG4iCisiQsO2eWxlIGJpciBkdXJ1bWRhIEdpdCdpbiBhbHRlcm5hdGlmc2l6IGtsb25sYW1hc8SxbmEgaXppbiB2ZXJtZWsgacOnaW5cbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBheWFyxLFuxLEgJ2luZm8neWEgYXlhcmxhecSxbiB2ZXlhXG4iCisiLS1yZWZlcmVuY2UgeWVyaW5lIC0tcmVmZXJlbmNlLWlmLWFibGUga3VsbGFuYXJhayBrbG9ubGF5xLFuLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzMjggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgY2Fubm90IGFkZCBhbHRlcm5hdGU6ICVzIgorbXNnc3RyICInJXMnIGFsdG1vZMO8bMO8IGFsdGVybmF0aWYgZWtsZXllbWl5b3I6ICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM2NworIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAiJyVzJyBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBkZcSfZXJpIHRhbsSxbWxhbmFtYWTEsSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICInJXMnIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBkZcSfZXJpIHRhbsSxbWxhbmFtYWTEsSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTgKK21zZ2lkICJ3aGVyZSB0aGUgbmV3IHN1Ym1vZHVsZSB3aWxsIGJlIGNsb25lZCB0byIKK21zZ3N0ciAieWVuaSBhbHRtb2TDvGzDvG4gbmVyZXllIGtsb25sYW5hY2HEn8SxIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwMQorbXNnaWQgIm5hbWUgb2YgdGhlIG5ldyBzdWJtb2R1bGUiCittc2dzdHIgInllbmkgYWx0bW9kw7xsw7xuIGFkxLEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA0Cittc2dpZCAidXJsIHdoZXJlIHRvIGNsb25lIHRoZSBzdWJtb2R1bGUgZnJvbSIKK21zZ3N0ciAiYWx0bW9kw7xsw7xuIGtsb25sYW5hY2HEn8SxIHVybCBrb251bXUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDEyCittc2dpZCAiZGVwdGggZm9yIHNoYWxsb3cgY2xvbmVzIgorbXNnc3RyICJzxLHEnyBrbG9ubGFyxLFuIGRlcmlubGnEn2kiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDE1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTI0Cittc2dpZCAiZm9yY2UgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAiem9ybGEga2xvbmxhIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxNyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyNgorbXNnaWQgImRpc2FsbG93IGNsb25pbmcgaW50byBub24tZW1wdHkgZGlyZWN0b3J5IgorbXNnc3RyICJib8WfIG9sbWF5YW4gZGl6aW5lIGtsb25sYW1heWEgaXppbiB2ZXJtZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MjQKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD08cGF0aD5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxyZXBvc2l0b3J5Pl0gWy0tbmFtZSA8bmFtZT5dIFstLWRlcHRoIDxkZXB0aD5dIFstLXNpbmdsZS1icmFuY2hdIC0tdXJsICIKKyI8dXJsPiAtLXBhdGggPHBhdGg+IgorbXNnc3RyICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD08eW9sPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSA8ZGVwbz5dICIKKyJbLS1uYW1lIDxhZD5dIFstLWRlcHRoIDxkZXJpbmxpaz5dIFstLXNpbmdsZS1icmFuY2hdIC0tdXJsIDx1cmw+IC0tcGF0aCA8eW9sPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gY3JlYXRlL3VzZSAnJXMnIGluIGFub3RoZXIgc3VibW9kdWxlJ3MgZ2l0IGRpciIKK21zZ3N0ciAiIgorImJhxZ9rYSBiaXIgYWx0bW9kw7xsw7xuIGdpdCBkaXppbmluZGUgJyVzJyBvbHXFn3R1cm1hL2t1bGxhbm1hIHJlZGRlZGlsaXlvciIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2xvbmUgb2YgJyVzJyBpbnRvIHN1Ym1vZHVsZSBwYXRoICclcycgZmFpbGVkIgorbXNnc3RyICInJXMnIMO2Z2VzaW5pbiAnJXMnIGFsdG1vZMO8bCB5b2x1bmEga2xvbmxhbm1hc8SxIGJhxZ9hcsSxc8SxeiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlyZWN0b3J5IG5vdCBlbXB0eTogJyVzJyIKK21zZ3N0ciAiZGl6aW4gYm/FnyBkZcSfaWw6ICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgc3VibW9kdWxlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAiJyVzJyBpw6dpbiBhbHRtb2TDvGwgZGl6aW5pIGFsxLFuYW1hZMSxIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIkdlw6dlcnNpeiBnw7xuY2VsbGVtZSBraXBpICclcycsICclcycgYWx0bW9kw7xsIHlvbHUgacOnaW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJHZcOnZXJzaXogZ8O8bmNlbGxlbWUga2lwaSAnJXMnLCAnJXMnIGFsdG1vZMO8bCB5b2x1IGnDp2luIHlhcMSxbGFuZMSxcsSxbG3EscWfIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYxNworIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJXMnIG5vdCBpbml0aWFsaXplZCIKK21zZ3N0ciAiQWx0bW9kw7xsIHlvbHUgJyVzJyBpbGtsZW5kaXJpbG1lZGkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjIxCittc2dpZCAiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIid1cGRhdGUgLS1pbml0JyBtaSBrdWxsYW5tYWsgaXN0ZXJzaW5pej8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHVubWVyZ2VkIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiQmlybGXFn3RpcmlsbWVtacWfIGFsdG1vZMO8bCAlcyBhdGxhbsSxeW9yIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiJyVzJyBhbHRtb2TDvGzDvCBhdGxhbsSxeW9yIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJy4gUmV0cnkgc2NoZWR1bGVkIgorbXNnc3RyICInJXMnIGtsb25sYW5hbWFkxLEuIFllbmlkZW4gZGVuZW1lIHphbWFubGFuZMSxLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNsb25lICclcycgYSBzZWNvbmQgdGltZSwgYWJvcnRpbmciCittc2dzdHIgIiclcycgaWtpbmNpIGJpciBrZXoga2xvbmxhbmFtYWTEsSwgaXB0YWwgZWRpbGl5b3IiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTAzIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTQ5Cittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIsOnYWzEscWfbWEgYcSfYWPEsW5hIGdpZGVuIHlvbCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDYKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSwgYWNyb3NzIG5lc3RlZCBzdWJtb2R1bGUgYm91bmRhcmllcyIKK21zZ3N0ciAiacOnIGnDp2UgZ2XDp21pxZ8gYWx0bW9kw7xsIHPEsW7EsXJsYXLEsSDDvHplcmluZGVuIMOnYWzEscWfbWEgYcSfYWPEsW5hIGdpZGVuIHlvbCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTAKK21zZ2lkICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvciBub25lIgorbXNnc3RyICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCB2ZXlhIG5vbmUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE2Cittc2dpZCAiQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSB0cnVuY2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zIgorbXNnc3RyICJCZWxpcmxpIGJpciByZXZpenlvbiBzYXnEsXPEsW5hIGvEsXNhbHTEsWxtxLHFnyBzxLHEnyBrbG9uIG9sdcWfdHVyIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxOQorbXNnaWQgInBhcmFsbGVsIGpvYnMiCittc2dzdHIgInBhcmFsZWwgacWfbGVyIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyMQorbXNnaWQgIndoZXRoZXIgdGhlIGluaXRpYWwgY2xvbmUgc2hvdWxkIGZvbGxvdyB0aGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiIKK21zZ3N0ciAiaWxrIGtsb251biBzxLHEn2zEsWsgw7x6ZXJpbmUgb2xhbiB0YXZzaXlleWkgaXpsZXlpcCBpemxlbWV5ZWNlxJ9pIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyMgorbXNnaWQgImRvbid0IHByaW50IGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgImtsb25sYW1hIGnFn2xlbWluaSB5YXpkxLFybWEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTMzCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZS1jbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZS1jbG9uZSBbLS1wcmVmaXg9PHlvbD5dIFs8eW9sPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTQ2Cittc2dpZCAiYmFkIHZhbHVlIGZvciB1cGRhdGUgcGFyYW1ldGVyIgorbXNnc3RyICJnw7xuY2VsbGVtZSBwYXJhbWV0cmVzaSBpw6dpbiBoYXRhbMSxIGRlxJ9lciIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSAoJXMpIGJyYW5jaCBjb25maWd1cmVkIHRvIGluaGVyaXQgYnJhbmNoIGZyb20gc3VwZXJwcm9qZWN0LCBidXQgIgorInRoZSBzdXBlcnByb2plY3QgaXMgbm90IG9uIGFueSBicmFuY2giCittc2dzdHIgIiIKKyJBbHRtb2TDvGwgKCVzKSBkYWzEsSBzw7xwZXJwcm9qZSBkYWzEsW5kYW4gZGV2cmFsbWFrIMO8emVyZSB5YXDEsWxhbmTEsXLEsWxkxLEsIGFuY2FrICIKKyJzw7xwZXJwcm9qZSBoZXJoYW5naSBiaXIgZGFsZGEgZGXEn2lsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjExNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGEgcmVwb3NpdG9yeSBoYW5kbGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICInJXMnIGFsdG1vZMO8bMO8IGnDp2luIGRlcG8gdHV0YWNhxJ/EsSBhbMSxbmFtYWTEsSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNTAKK21zZ2lkICJyZWN1cnNlIGludG8gc3VibW9kdWxlcyIKK21zZ3N0ciAiYWx0bW9kw7xsbGVyZSDDtnp5aW5lbGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTU2Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPHNlw6dlbmVrbGVyPl0gWzx5b2w+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMTIKK21zZ2lkICJjaGVjayBpZiBpdCBpcyBzYWZlIHRvIHdyaXRlIHRvIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICIuZ2l0bW9kdWxlcyBkb3N5YXPEsW5hIHlhesSxbSBnw7x2ZW5saSBtaSBkZcSfaWwgbWkgZGVuZXRsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMTUKK21zZ2lkICJ1bnNldCB0aGUgY29uZmlnIGluIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICIuZ2l0bW9kdWxlcyBkb3N5YXPEsW5kYWtpIHlhcMSxbGFuZMSxcm1hecSxIGthbGTEsXIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjIwCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA8bmFtZT4gWzx2YWx1ZT5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIDxhZD4gWzxkZcSfZXI+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMjEKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPGFkPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMjIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI0MSBnaXQtc3VibW9kdWxlLnNoOjE3NAorIywgc2gtZm9ybWF0Cittc2dpZCAicGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGlzIGluIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIi5naXRtb2R1bGVzIGRvc3lhc8SxbsSxbiDDp2FsxLHFn21hIGHEn2FjxLFuZGEgb2xkdcSfdW5kYW4gbMO8dGZlbiBlbWluIG9sIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI5MSBnaXQuYzo0MzMgZ2l0LmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXNuJ3Qgc3VwcG9ydCAtLXN1cGVyLXByZWZpeCIKK21zZ3N0ciAiJXMsIC0tc3VwZXItcHJlZml4IGRlc3Rla2xlbWl5b3IiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgc3VibW9kdWxlLS1oZWxwZXIgc3ViY29tbWFuZCIKK21zZ3N0ciAiJyVzJyBnZcOnZXJsaSBiaXIgc3VibW9kdWxlLWhlbHBlciBhbHRrb211dHUgZGXEn2lsIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjgKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIDxuYW1lPiBbPHJlZj5dIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIFs8c2XDp2VuZWtsZXI+XSA8YWQ+IFs8YmHFn3Z1cnU+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxhZD4iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDAKK21zZ2lkICJzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGZvciBub24tc3ltYm9saWMgKGRldGFjaGVkKSByZWZzIgorbXNnc3RyICJzZW1ib2xpayBvbG1heWFuIChheXLEsWspIGJhxZ92dXJ1bGFyIGnDp2luIGhhdGEgaWxldGlzaW5pIGdpemxlIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAic2VtYm9saWsgYmHFn3Z1cnV5dSBzaWwiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDIKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgImJhxZ92dXJ1IMOnxLFrdMSxc8SxbsSxIGvEsXNhbHQiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIgorbXNnc3RyICJuZWRlbiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAiZ8O8bmNlbGxlbWUgbmVkZW5pIgorCisjOiBidWlsdGluL3RhZy5jOjI1Cittc2dpZCAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dXG4iCisiXHRcdDx0YWduYW1lPiBbPGhlYWQ+XSIKK21zZ3N0ciAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8YW5haHRhci1ubz5dIFstZl0gWy1tIDxpbGV0aT4gfCAtRiA8ZG9zeWE+XVxuIgorIlx0XHQ8ZXRpa2V0LWFkxLE+IFs8ZGFsLXVjdT5dIgorCisjOiBidWlsdGluL3RhZy5jOjI3Cittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLWQgPGV0aWtldC1hZMSxPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzoyOAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0gWy0tIgorInBvaW50cy1hdCA8b2JqZWN0Pl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCB0YWcgLWwgWy1uWzxzYXnEsT5dXSBbLS1jb250YWlucyA8Z8O2bmRlcmk+XSBbLS1uby1jb250YWlucyA8Z8O2bmRlcmk+XSBbLS0iCisicG9pbnRzLWF0IDxuZXNuZT5dXG4iCisiXHRcdFstLWZvcm1hdD08YmnDp2ltPl0gWy0tW25vLV1tZXJnZWQgWzxnw7ZuZGVyaT5dXSBbPGRpemdpPi4uLl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzAKK21zZ2lkICJnaXQgdGFnIC12IFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC12IFstLWZvcm1hdD08YmnDp2ltPl0gPGV0aWtldC1hZMSxPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICInJXMnIGV0aWtldGkgYnVsdW5hbWFkxLEuIgorCisjOiBidWlsdGluL3RhZy5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIiclcycgZXRpa2V0aSBzaWxpbmRpICglcyBpZGkpXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkV0aWtldCBpw6dpbiBiaXIgaWxldGkgeWF6xLFuOlxuIgorIiAgJXNcbiIKKyInJWMnIGlsZSBiYcWfbGF5YW4gc2F0xLFybGFyIHlvayBzYXnEsWxhY2FrdMSxci5cbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkV0aWtldCBpw6dpbiBiaXIgaWxldGkgeWF6xLFuOlxuIgorIiAgJXNcbiIKKyInJWMnIGlsZSBiYcWfbGF5YW4gc2F0xLFybGFyIHR1dHVsYWNha3TEsXI7IGlzdGVyc2VuaXogb25sYXLEsSAiCisia2FsZMSxcmFiaWxpcnNpbml6LlxuIgorCisjOiBidWlsdGluL3RhZy5jOjE5OAorbXNnaWQgInVuYWJsZSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgImV0aWtldCBpbXphbGFuYW3EsXlvciIKKworIzogYnVpbHRpbi90YWcuYzoyMDAKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgImV0aWtldCBkb3N5YXPEsSB5YXrEsWxhbcSxeW9yIgorCisjOiBidWlsdGluL3RhZy5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgY3JlYXRlZCBhIG5lc3RlZCB0YWcuIFRoZSBvYmplY3QgcmVmZXJyZWQgdG8gYnkgeW91ciBuZXcgdGFnIGlzXG4iCisiYWxyZWFkeSBhIHRhZy4gSWYgeW91IG1lYW50IHRvIHRhZyB0aGUgb2JqZWN0IHRoYXQgaXQgcG9pbnRzIHRvLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgdGFnIC1mICVzICVzXnt9IgorbXNnc3RyICIiCisixLDDpyBpw6dlIGdlw6dtacWfIGJpciBldGlrZXQgb2x1xZ90dXJkdW51ei4gU2l6aW4geWVuaSBldGlrZXRpbml6Y2UgYmHFn3Z1cnVsYW5cbiIKKyJuZXNuZSB6YXRlbiBiaXIgZXRpa2V0LiDEsMWfYXJldCBldHRpxJ9pIG5lc25leWkgZXRpa2V0bGVtZWsgaXN0ZWRpeXNlbml6OlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKKworIzogYnVpbHRpbi90YWcuYzoyMzIKK21zZ2lkICJiYWQgb2JqZWN0IHR5cGUuIgorbXNnc3RyICJoYXRhbMSxIG5lc25lIHTDvHLDvCIKKworIzogYnVpbHRpbi90YWcuYzoyODQKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgImV0aWtldCBpbGV0aXNpIHlvayBtdT8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgIkV0aWtldCBpbGV0aXNpICVzIGnDp2luZGUgYsSxcmFrxLFsZMSxXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAyCittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgImV0aWtldCBhZGxhcsSxbsSxIGxpc3RlbGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA0Cittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgImhlciBldGlrZXQgaWxldGlzaW5pbiA8bj4gc2F0xLFyxLFuxLEgbGlzdGVsZSIKKworIzogYnVpbHRpbi90YWcuYzo0MDYKK21zZ2lkICJkZWxldGUgdGFncyIKK21zZ3N0ciAiZXRpa2V0bGVyaSBzaWwiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA3Cittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgImV0aWtldGxlcmkgZG/En3J1bGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA5Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIkV0aWtldCBvbHXFn3R1cm1hIHNlw6dlbmVrbGVyaSIKKworIzogYnVpbHRpbi90YWcuYzo0MTEKK21zZ2lkICJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiCittc2dzdHIgImHDp8Sxa2xhbWEgZWtsZW5tacWfIGV0aWtldCBpw6dpbiBiaXIgaWxldGkgZ2VyZWsiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDEzCittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgImV0aWtldCBpbGV0aXNpIgorCisjOiBidWlsdGluL3RhZy5jOjQxNQorbXNnaWQgImZvcmNlIGVkaXQgb2YgdGFnIG1lc3NhZ2UiCittc2dzdHIgImV0aWtldCBpbGV0aXNpbmkgem9ybGEgZMO8emVubGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE2Cittc2dpZCAiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIKK21zZ3N0ciAiYcOnxLFrbGFtYSBla2xlbm1pxZ8gdmUgR1BHIGltemFsxLEgZXRpa2V0IgorCisjOiBidWlsdGluL3RhZy5jOjQxOQorbXNnaWQgInVzZSBhbm90aGVyIGtleSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgImV0aWtldGkgaW16YWxhbWFrIGnDp2luIGJhxZ9rYSBiaXIgYW5haHRhciBrdWxsYW7EsW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIwCittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAiZcSfZXIgdmFyc2EgZXRpa2V0aSBiYcWfa2FzxLF5bGEgZGXEn2nFn3RpciIKKworIzogYnVpbHRpbi90YWcuYzo0MjEgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY5Cittc2dpZCAiY3JlYXRlIGEgcmVmbG9nIgorbXNnc3RyICJiaXIgYmHFn3Z1cnUgZ8O8bmzDvMSfw7wgb2x1xZ90dXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIzCittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAiRXRpa2V0IGxpc3RlbGVtZSBzZcOnZW5la2xlcmkiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI0Cittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICJldGlrZXQgbGlzdGVzaW5pIHPDvHR1bmxhcmxhIGfDtnN0ZXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI1IGJ1aWx0aW4vdGFnLmM6NDI3Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJ5YWxuxLF6Y2EgZ8O2bmRlcml5aSBpw6dlcmVuIGV0aWtldGxlcmkgeWF6ZMSxciIKKworIzogYnVpbHRpbi90YWcuYzo0MjYgYnVpbHRpbi90YWcuYzo0MjgKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgInlhbG7EsXpjYSBnw7ZuZGVyaSBpw6dlcm1leWVuIGV0aWtldGxlcmkgeWF6ZMSxciIKKworIzogYnVpbHRpbi90YWcuYzo0MjkKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJ5YWxuxLF6Y2EgYmlybGXFn3RpcmlsZW4gZXRpa2V0bGVyaSB5YXpkxLFyIgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJ5YWxuxLF6Y2EgYmlybGXFn3RpcmlsbWV5ZW4gZXRpa2V0bGVyaSB5YXpkxLFyIgorCisjOiBidWlsdGluL3RhZy5jOjQzNAorbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJ5YWxuxLF6Y2EgbmVzbmVuaW4gZXRpa2V0bGVyaW5pIHlhemTEsXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDgyCittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIHZlIC1uIGJpcmJpcml5bGUgdXl1bXN1eiIKKworIzogYnVpbHRpbi90YWcuYzo1MDQKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiLW4gc2XDp2VuZcSfaW5lIHlhbG7EsXpjYSBsaXN0ZSBraXBpbmRlIGl6aW4gdmVyaWxpciIKKworIzogYnVpbHRpbi90YWcuYzo1MDYKK21zZ2lkICItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICItLWNvbnRhaW5zIHNlw6dlbmXEn2luZSB5YWxuxLF6Y2EgbGlzdGUga2lwaW5kZSBpemluIHZlcmlsaXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA4Cittc2dpZCAiLS1uby1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiLS1uby1jb250YWlucyBzZcOnZW5lxJ9pbmUgeWFsbsSxemNhIGxpc3RlIGtpcGluZGUgaXppbiB2ZXJpbGlyIgorCisjOiBidWlsdGluL3RhZy5jOjUxMAorbXNnaWQgIi0tcG9pbnRzLWF0IG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICItLXBvaW50cy1hdCBzZcOnZW5lxJ9pbmUgeWFsbsSxemNhIGxpc3RlIGtpcGluZGUgaXppbiB2ZXJpbGlyIgorCisjOiBidWlsdGluL3RhZy5jOjUxMgorbXNnaWQgIi0tbWVyZ2VkIGFuZCAtLW5vLW1lcmdlZCBvcHRpb25zIGFyZSBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICIiCisiLS1tZXJnZWQgdmUgLS1uby1tZXJnZWQgc2XDp2VuZWtsZXJpbmUgeWFsbsSxemNhIGxpc3RlIGtpcGluZGUgaXppbiB2ZXJpbGlyIgorCisjOiBidWlsdGluL3RhZy5jOjUyMworbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAieWFsbsSxemNhIGJpciAtRiB2ZXlhIC1tIHNlw6dlbmXEn2luZSBpemluIHZlcmlsaXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQyCittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICLDp29rIGZhemxhIHBhcmFtZXRyZSIKKworIzogYnVpbHRpbi90YWcuYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iCittc2dzdHIgIiclcycgZ2XDp2VybGkgYmlyIGV0aWtldCBhZMSxIGRlxJ9pbC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICInJXMnIGV0aWtldGkgaGFsaWhhesSxcmRhIHZhciIKKworIzogYnVpbHRpbi90YWcuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICInJXMnIGV0aWtldGkgZ8O8bmNlbGxlbmRpICglcyBpZGkpXG4iCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1MDIKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiTmVzbmVsZXIgYcOnxLFsxLF5b3IiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIiVzIGRpemluaSBvbHXFn3R1cnVsYW1hZMSxIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgIiVzIGRvc3lhc8SxIG9sdcWfdHVydWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAiJXMgZG9zeWFzxLEgc2lsaW5lbWVkaSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTUgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIiVzIGRpemluaSBzaWxpbmVtZWRpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJUZXN0aW5nIG10aW1lIGluICclcycgIgorbXNnc3RyICInJXMnIGnDp2luZGVraSBtdGltZSBzxLFuYW7EsXlvciAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTU0Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGZpbGUiCittc2dzdHIgImRpemluIGJpbGdpbGVyaSB5ZW5pIGJpciBkb3N5YSBla2xlZGlrdGVuIHNvbnJhIGRlxJ9pxZ9tZXoiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTY3Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAiZGl6aW4gYmlsZ2lsZXJpIHllbmkgYmlyIGRpemluIGVrbGVkaWt0ZW4gc29ucmEgZGXEn2nFn21leiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxODAKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgdXBkYXRpbmcgYSBmaWxlIgorbXNnc3RyICJkaXppbiBiaWxnaWxlcmkgYmlyIGRvc3lhIGfDvG5jZWxsZW1lc2luZGVuIHNvbnJhIGRlxJ9pxZ9pciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxOTEKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgYWRkaW5nIGEgZmlsZSBpbnNpZGUgc3ViZGlyZWN0b3J5IgorbXNnc3RyICJkaXppbiBiaWxnaWxlcmkgYWx0ZGl6aW4gacOnaW5lIHllbmkgYmlyIGRvc3lhIGVrbGVkaWt0ZW4gc29ucmEgZGXEn2nFn2lyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIwMgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZmlsZSIKK21zZ3N0ciAiZGl6aW4gYmlsZ2lsZXJpIGJpciBkb3N5YSBzaWxkaWt0ZW4gc29ucmEgZGXEn2nFn21leiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTUKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiZGl6aW4gYmlsZ2lsZXJpIGJpciBkaXppbiBzaWxkaWt0ZW4gc29ucmEgZGXEn2nFn21leiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMjIKK21zZ2lkICIgT0siCittc2dzdHIgIiBUYW1hbSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo1OTEKK21zZ2lkICJnaXQgdXBkYXRlLWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCB1cGRhdGUtaW5kZXggWzxzZcOnZW5la2xlcj5dIFstLV0gWzxkb3N5YT4uLi5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NAorbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAiaW5kZWtzaW4gZ8O8bmNlbGxlbm1lc2kgZ2VyZWtzZSBiaWxlIHllbmlsZW1leWkgc8O8cmTDvHIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc3Cittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgInJlZnJlc2g6IGFsdG1vZMO8bGxlcmkgeW9rIHNheSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODAKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAieWVuaSBkb3N5YWxhcsSxIHlvayBzYXltYSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODIKK21zZ2lkICJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIKK21zZ3N0ciAiZG9zeWFsYXLEsW4gZGl6aW5sZXJpbiB5ZXJpbmUgZ2XDp21lc2luZSB2ZSB0ZXJzaW5lIGl6aW4gdmVyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NAorbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgIsOnYWzEscWfbWEgYcSfYWPEsW5kYW4gZWtzaWsgb2xhbiBkb3N5YWxhcsSxIGZhcmsgZXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg2Cittc2dpZCAicmVmcmVzaCBldmVuIGlmIGluZGV4IGNvbnRhaW5zIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgImluZGVrc3RlIGJpcmxlxZ90aXJpbG1lbWnFnyBnaXJkaWxlciBvbHNhIGJpbGUgeWVuaWxlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4OQorbXNnaWQgInJlZnJlc2ggc3RhdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiZG9zeWEgZHVydW0gYmlsZ2lzaW5pIHllbmlsZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTMKK21zZ2lkICJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciCittc2dzdHIgIi0tcmVmcmVzaCBnaWJpLCBhbmNhayBhc3N1bWUtdW5jaGFuZ2VkIGF5YXLEsW7EsSB5b2sgc2F5YXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk3Cittc2dpZCAiPG1vZGU+LDxvYmplY3Q+LDxwYXRoPiIKK21zZ3N0ciAiPGtpcD4sPG5lc25lPiw8eW9sPiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTgKK21zZ2lkICJhZGQgdGhlIHNwZWNpZmllZCBlbnRyeSB0byB0aGUgaW5kZXgiCittc2dzdHIgImJlbGlydGlsZW4gZ2lyZGl5aSBpbmRla3NlIGVrbGUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwOAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAiZG9zeWFsYXLEsSBcIm5vdCBjaGFuZ2luZ1wiIG9sYXJhayBpbWxlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTEKK21zZ2lkICJjbGVhciBhc3N1bWVkLXVuY2hhbmdlZCBiaXQiCittc2dzdHIgImFzc3VtZWQtdW5jaGFuZ2VkIGvEsXNtxLFuxLEgdGVtaXpsZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE0Cittc2dpZCAibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIKK21zZ3N0ciAiZG9zeWFsYXLEsSBcImluZGV4LW9ubHlcIiBvbGFyYWsgaW1sZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE3Cittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgInNraXAtd29ya3RyZWUga8Sxc23EsW7EsSBhdGxhIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjAKK21zZ2lkICJkbyBub3QgdG91Y2ggaW5kZXgtb25seSBlbnRyaWVzIgorbXNnc3RyICInaW5kZXgtb25seScgZ2lyZGlsZXJpbmUgZG9rdW5tYSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIyCittc2dpZCAiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgInlhbG7EsXpjYSBpbmRla3NlIGVrbGU7IGnDp2VyacSfZSBuZXNuZSB2ZXJpdGFiYW7EsW5hIGVrbGVtZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI0Cittc2dpZCAicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIKK21zZ3N0ciAiw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhIG1ldmN1dCBvbHNhIGJpbGUgYWQgdmVyaWxlbiB5b2xsYXLEsSBrYWxkxLFyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjYKK21zZ2lkICJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiCittc2dzdHIgIi0tc3RkaW4gaWxlOiBnaXJkaSBzYXTEsXJsYXLEsSBib8WfIGJheXRsYXJsYSBzb25sYW5kxLFyxLFsxLFyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjgKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJnw7xuY2VsbGVuZWNlayB5b2wgbGlzdGVsZXJpbmkgc3RhbmRhcnQgZ2lyZGknZGVuIG9rdSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDMyCittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgImluZGVrc2Ugc3RhbmRhcnQgZ2lyZGknZGVuIGdpcmRpbGVyIGVrbGUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzNgorbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiIzIgdmUgIzMgbnVtYXJhbMSxIGFkxLFtbGFyxLEgbGlzdGVsZW5tacWfIHlvbGxhciBpw6dpbiB5ZW5pZGVuIGRvbGR1ciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQwCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgInlhbG7EsXpjYSBIRUFEJ2RlbiBmYXJrbMSxIG9sYW4gZ2lyZGlsZXJpIGfDvG5jZWxsZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ0Cittc2dpZCAiaWdub3JlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhbiBla3NpayBvbGFuIGRvc3lhbGFyxLEgeW9rIHNheSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ3Cittc2dpZCAicmVwb3J0IGFjdGlvbnMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJleWxlbWxlcmkgc3RhbmRhcnQgw6fEsWt0xLEneWEgYmlsZGlyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDkKK21zZ2lkICIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIKK21zZ3N0ciAiKG9rdW5hYmlsaXIgdmVyaSBpw6dpbikga2F5ZGVkaWxtacWfIMOnw7Z6w7xsbWV5ZW4gw6dha8SxxZ9tYWxhcsSxIHVudXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1MworbXNnaWQgIndyaXRlIGluZGV4IGluIHRoaXMgZm9ybWF0IgorbXNnc3RyICJpbmRla3NpIGJ1IGJpw6dpbWxlIHlheiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU1Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgImLDtmzDvG5tw7zFnyBpbmRla3NpIGV0a2lubGXFn3RpciB2ZXlhIGRldnJlIGTEscWfxLEgYsSxcmFrIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTcKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIml6bGVubWV5ZW4gw7ZuYmVsbGXEn2kgZXRraW5sZcWfdGlyL2RldnJlIGTEscWfxLEgYsSxcmFrIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTkKK21zZ2lkICJ0ZXN0IGlmIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiZG9zeWEgc2lzdGVtaW5pbiBpemxlbm1leWVuIMO2bmJlbGxlayBkZXN0ZWtsZXlpcCBkZXN0ZWtsZW1lZGnEn2luaSBzxLFuYSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDYxCittc2dpZCAiZW5hYmxlIHVudHJhY2tlZCBjYWNoZSB3aXRob3V0IHRlc3RpbmcgdGhlIGZpbGVzeXN0ZW0iCittc2dzdHIgImRvc3lhIHNpc3RlbWluaSBzxLFuYW1hZGFuIGl6bGVubWV5ZW4gw7ZuYmVsbGXEn2kgZXRraW5sZcWfdGlyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjMKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGluZGV4IGV2ZW4gaWYgaXMgbm90IGZsYWdnZWQgYXMgY2hhbmdlZCIKK21zZ3N0ciAiZGXEn2nFn3RpcmlsbWnFnyBvbGFyYWsgaW1sZW5tZXNlIGJpbGUgaW5kZWtzaSB5YXoiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIGZpbGUgc3lzdGVtIG1vbml0b3IiCittc2dzdHIgImRvc3lhIHNpc3RlbWkgbW9uaXTDtnLDvG7DvCBldGtpbmxlxZ90aXIgdmV5YSBkZXZyZSBkxLHFn8SxIGLEsXJhayIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY3Cittc2dpZCAibWFyayBmaWxlcyBhcyBmc21vbml0b3IgdmFsaWQiCittc2dzdHIgImRvc3lhbGFyxLEgZG9zeWEgc2lzdGVtaSBtb25pdMO2csO8bmRlIGdlw6dlcmxpIG9sYXJhayBpbWxlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNzAKK21zZ2lkICJjbGVhciBmc21vbml0b3IgdmFsaWQgYml0IgorbXNnc3RyICJkb3N5YSBzaXN0ZW1pIG1vbml0w7Zyw7xuZGUgZ2XDp2VybGkga8Sxc23EsW7EsSB0ZW1pemxlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNzMKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJlbmFibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggJ2ZhbHNlJyBvbGFyYWsgYXlhcmxhbm3EscWfOyBiw7Zsw7xubcO8xZ8gaW5kZWtzaSBldGtpbmxlxZ90aXJtZXlpICIKKyJnZXLDp2VrdGVuIGlzdGl5b3JzYW7EsXogYnVudSBrYWxkxLFyxLFuIHZleWEgZGXEn2nFn3RpcmluIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExODIKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggJ3RydWUnIG9sYXJhayBheWFybGFubcSxxZ87IGLDtmzDvG5tw7zFnyBpbmRla3NpIGRldnJlIGTEscWfxLEgIgorImLEsXJha21hecSxIGdlcsOnZWt0ZW4gaXN0aXlvcnNhbsSxeiBidW51IGthbGTEsXLEsW4gdmV5YSBkZcSfacWfdGlyaW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE5NAorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGRpc2FibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgJ3RydWUnIG9sYXJhayBheWFybGFubcSxxZ87IGl6bGVubWV5ZW4gw7ZuYmVsbGXEn2kgZ2Vyw6dla3RlbiAiCisiZGV2cmUgZMSxxZ/EsSBixLFyYWttYXnEsSBpc3RpeW9yc2FuxLF6IGJ1bnUga2FsZMSxcsSxbiB2ZXlhIGRlxJ9pxZ90aXJpbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk4Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICLEsHpsZW5tZXllbiDDtm5iZWxsZWsgZGV2cmUgZMSxxZ/EsSBixLFyYWvEsWxkxLEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIwNgorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBlbmFibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgJ2ZhbHNlJyBvbGFyYWsgYXlhcmxhbm3EscWfOyBpemxlbm1leWVuIMO2bmJlbGxlxJ9pICIKKyJnZXLDp2VrdGVuIGV0a2lubGXFn3Rpcm1layBpc3RpeW9yc2FuxLF6IGJ1bnUga2FsZMSxcsSxbiB2ZXlhIGRlxJ9pxZ90aXJpbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICLEsHpsZW5tZXllbiDDtm5iZWxsZWsgJyVzJyBpw6dpbiBldGtpbmxlxZ90aXJpbGRpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMTgKK21zZ2lkICJjb3JlLmZzbW9uaXRvciBpcyB1bnNldDsgc2V0IGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBlbmFibGUgZnNtb25pdG9yIgorbXNnc3RyICIiCisiY29yZS5mc21vbml0b3IgYXlhcmxhbm1hbcSxxZ87IGRvc3lhIHNpc3RlbWluIG1vbml0w7Zyw7xuw7wgZ2Vyw6dla3RlbiAiCisiZXRraW5sZcWfdGlybWVrIGlzdGl5b3JzYW7EsXogb251IGF5YXJsYXnEsW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyMgorbXNnaWQgImZzbW9uaXRvciBlbmFibGVkIgorbXNnc3RyICJkb3N5YSBzaXN0ZW1pIG1vbml0w7Zyw7wgZXRraW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyNQorbXNnaWQgIiIKKyJjb3JlLmZzbW9uaXRvciBpcyBzZXQ7IHJlbW92ZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKyJjb3JlLmZzbW9uaXRvciBheWFybGFubcSxxZ87IGRvc3lhIHNpc3RlbWkgbW9uaXTDtnLDvG7DvCBnZXLDp2VrdGVuIGRldnJlIGTEscWfxLEgIgorImLEsXJha21hayBpc3RpeW9yc2FuxLF6IG9udSBrYWxkxLFyxLFuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjkKK21zZ2lkICJmc21vbml0b3IgZGlzYWJsZWQiCittc2dzdHIgImRvc3lhIHNpc3RlbWkgbW9uaXTDtnLDvCBkZXZyZSBkxLHFn8SxIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMAorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC1kIDxyZWZuYW1lPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxzZcOnZW5la2xlcj5dIC1kIDxixZ92ci1hZMSxPiBbPGVza2ktZGXEn2VyPl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gICAgPHJlZm5hbWU+IDxuZXctdmFsPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiIgorImdpdCB1cGRhdGUtcmVmIFs8c2XDp2VuZWtsZXI+XSAgICA8YsWfdnItYWTEsT4gPHllbmktZGXEn2VyPiBbPGVza2ktZGXEn2VyPl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEyCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPHNlw6dlbmVrbGVyPl0gLS1zdGRpbiBbLXpdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjQKK21zZ2lkICJkZWxldGUgdGhlIHJlZmVyZW5jZSIKK21zZ3N0ciAiYmHFn3Z1cnV5dSBzaWwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInVwZGF0ZSA8cmVmbmFtZT4gbm90IHRoZSBvbmUgaXQgcG9pbnRzIHRvIgorbXNnc3RyICI8YmHFn3Z1cnUtYWTEsT4nbsSxIGfDvG5jZWxsZXlpbiwgacWfYXJldCBldHRpxJ9pbmkgZGXEn2lsIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjcKK21zZ2lkICJzdGRpbiBoYXMgTlVMLXRlcm1pbmF0ZWQgYXJndW1lbnRzIgorbXNnc3RyICJzdGRpbidkZSBOVUwgaWxlIHNvbmxhbmTEsXLEsWxhbiBkZcSfacWfa2VubGVyIHZhciIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgImfDvG5jZWxsZW1lbGVyaSBzdGRpbidkZW4gb2t1IgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjcKK21zZ2lkICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6MTUKK21zZ2lkICJ1cGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoIgorbXNnc3RyICJiaWxnaSBkb3N5YWxhcsSxbsSxIGVuIGJhxZ90YW4gZ8O8bmNlbGxlIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MTEKK21zZ2lkICJnaXQgdXBsb2FkLXBhY2sgWzxvcHRpb25zPl0gPGRpcj4iCittc2dzdHIgImdpdCB1cGxvYWQtcGFjayBbPHNlw6dlbmVrbGVyPl0gPGRpemluPiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjIzIHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzoxNworbXNnaWQgInF1aXQgYWZ0ZXIgYSBzaW5nbGUgcmVxdWVzdC9yZXNwb25zZSBleGNoYW5nZSIKK21zZ3N0ciAidGVrIGJpciBpc3Rlay95YW7EsXQgZGXEn2nFnyB0b2t1xZ91bmRhbiBzb25yYSDDp8SxayIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI1Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBpbml0aWFsIHJlZiBhZHZlcnRpc2VtZW50IgorbXNnc3RyICJpbGsgYmHFn3Z1cnUgdGFuxLF0xLFtxLFuZGFuIHNvbnJhIGhlbWVuIMOnxLFrIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjcKK21zZ2lkICJkbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkiCittc2dzdHIgImXEn2VyIDxkaXppbj4gYmlyIEdpdCBkaXppbmkgZGXEn2lsc2UgPGRpemluPi8uZ2l0LyBkZW5lbWUiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyOQorbXNnaWQgImludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5IgorbXNnc3RyICJha3RhcsSxbcSxIDxuPiBzYW5peWUgaGFyZWtldHNpemxpa3RlbiBzb25yYSBrZXMiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjE5Cittc2dpZCAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8Z8O2bmRlcmk+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo2OAorbXNnaWQgInByaW50IGNvbW1pdCBjb250ZW50cyIKK21zZ3N0ciAiZ8O2bmRlcmkgacOnZXJpxJ9pbmkgeWF6ZMSxciIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjkgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzcKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgImhhbSBncGcgZHVydW0gw6fEsWt0xLFzxLFuxLEgeWF6ZMSxciIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU1Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWtldD4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NQorbXNnaWQgInZlcmJvc2UiCittc2dzdHIgImF5csSxbnTEsWzEsSBhbmxhdMSxbSIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY3Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgInlhbG7EsXpjYSBpc3RhdGlzdGlrbGVyaSBnw7ZzdGVyIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxOAorbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PGJpw6dpbT5dIDxldGlrZXQ+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozNgorbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAiZXRpa2V0IGnDp2VyacSfaW5pIHlhemTEsXIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNworbXNnaWQgImdpdCB3b3JrdHJlZSBhZGQgWzxvcHRpb25zPl0gPHBhdGg+IFs8Y29tbWl0LWlzaD5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgYWRkIFs8c2XDp2VuZWtsZXI+XSA8eW9sPiBbPGfDtm5kZXJpbXNpPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOAorbXNnaWQgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgbGlzdCBbPHNlw6dlbmVrbGVyPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOQorbXNnaWQgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B0aW9ucz5dIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxzZcOnZW5la2xlcj5dIDx5b2w+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjAKK21zZ2lkICJnaXQgd29ya3RyZWUgbW92ZSA8d29ya3RyZWU+IDxuZXctcGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBtb3ZlIDzDpy1hxJ9hY8SxPiA8eWVuaS15b2w+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjEKK21zZ2lkICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBwcnVuZSBbPHNlw6dlbmVrbGVyPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMgorbXNnaWQgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHRpb25zPl0gPHdvcmt0cmVlPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPHNlw6dlbmVrbGVyPl0gPMOnLWHEn2FjxLE+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjMKK21zZ2lkICJnaXQgd29ya3RyZWUgdW5sb2NrIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHVubG9jayA8eW9sPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjYwIGJ1aWx0aW4vd29ya3RyZWUuYzo4OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSAnJXMnIgorbXNnc3RyICInJXMnIHNpbGluZW1lZGkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIKK21zZ3N0ciAiw6dhbMSxxZ9tYS1hxJ9hY8SxLyVzIGthbGTEsXLEsWzEsXlvcjogZ2XDp2VybGkgYmlyIGRpemluIGRlxJ9pbCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIsOnYWzEscWfbWEtYcSfYWPEsS8lcyBrYWxkxLFyxLFsxLF5b3I6IGdpdGRpciBkb3N5YXPEsSB5b2siCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MCBidWlsdGluL3dvcmt0cmVlLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICLDp2FsxLHFn21hLWHEn2FjxLEvJXMga2FsZMSxcsSxbMSxeW9yOiBnaXRkaXIgZG9zeWFzxLEgb2t1bmFtxLF5b3IgKCVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBzaG9ydCByZWFkIChleHBlY3RlZCAlPFBSSXVNQVg+IGJ5dGVzLCByZWFkICIKKyIlPFBSSXVNQVg+KSIKK21zZ3N0ciAiIgorIsOnYWzEscWfbWEtYcSfYWPEsS8lcyBrYWxkxLFyxLFsxLF5b3I6IHlldGVyc2l6IHZlcmkgKCU8UFJJdU1BWD4gYmF5dCBiZWtsZW5peW9yZHUsICIKKyIlPFBSSXVNQVg+IG9rdW5kdSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgIsOnYWzEscWfbWEtYcSfYWPEsS8lcyBrYWxkxLFyxLFsxLF5b3I6IGdlw6dlcnNpeiBnaXRkaXIgZG9zeWFzxLEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICIiCisiw6dhbMSxxZ9tYS1hxJ9hY8SxLyVzIGthbGTEsXLEsWzEsXlvcjogZ2l0ZGlyIGRvc3lhc8SxIG9sbWF5YW4gYmlyIGtvbnVtYSBpxZ9hcmV0ICIKKyJlZGl5b3IiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNjUKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIHdvcmtpbmcgdHJlZXMiCittc2dzdHIgImJ1ZGFuYW4gw6dhbMSxxZ9tYSBhxJ9hw6dsYXLEsW7EsSBiaWxkaXIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNjcKK21zZ2lkICJleHBpcmUgd29ya2luZyB0cmVlcyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiPHphbWFuPidkYW4gZXNraSDDp2FsxLHFn21hIGHEn2HDp2xhcsSxbsSxbiBow7xrbcO8bsO8IGthbGTEsXIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJyVzJyBoYWxpaGF6xLFyZGEgdmFyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZS1hZGQgd29ya3RyZWUgJyVzJyIKK21zZ3N0ciAiJyVzJyDDp2FsxLHFn21hIGHEn2FjxLEgeWVuaWRlbiBla2xlbmVtaXlvciIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGxvY2tlZCB3b3JrdHJlZTtcbiIKKyJ1c2UgJ2FkZCAtZiAtZicgdG8gb3ZlcnJpZGUsIG9yICd1bmxvY2snIGFuZCAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisiJyVzJyBla3NpayBhbmNhayBraWxpdGxpIGJpciDDp2FsxLHFn21hIGHEn2FjxLE7XG4iCisiZ2XDp2Vyc2l6IGvEsWxtYWsgacOnaW4gJ2FkZCAtZiAtZicsIHRlbWl6bGVtZWsgacOnaW4gJ3VubG9jaycsICdwcnVuZScgdmV5YSAiCisiJ3JlbW92ZScga3VsbGFuxLFuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgYWxyZWFkeSByZWdpc3RlcmVkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mJyB0byBvdmVycmlkZSwgb3IgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIiclcycgZWtzaWsgYW5jYWsgaGFsaWhhesSxcmRhIGtheWTEsSB5YXDEsWxtxLHFnyBiaXIgw6dhbMSxxZ9tYSBhxJ9hY8SxO1xuIgorImdlw6dlcnNpeiBrxLFsbWFrIGnDp2luICdhZGQgLWYnLCB0ZW1pemxlbWVrIGnDp2luICdwcnVuZScgdmV5YSAncmVtb3ZlJyBrdWxsYW7EsW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkgb2YgJyVzJyIKK21zZ3N0ciAiJyVzJyBkaXppbmkgb2x1xZ90dXJ1bGFtYWTEsSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzMiBidWlsdGluL3dvcmt0cmVlLmM6NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAobmV3IGJyYW5jaCAnJXMnKSIKK21zZ3N0ciAiw4dhbMSxxZ9tYSBhxJ9hY8SxIGhhesSxcmxhbsSxeW9yICh5ZW5pIGRhbCAnJXMnKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKHJlc2V0dGluZyBicmFuY2ggJyVzJzsgd2FzIGF0ICVzKSIKK21zZ3N0ciAiw4dhbMSxxZ9tYSBhxJ9hY8SxIGhhesSxcmxhbsSxeW9yICgnJXMnIGRhbMSxIHPEsWbEsXJsYW7EsXlvcjsgJXMga29udW11bmRheWTEsSkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChjaGVja2luZyBvdXQgJyVzJykiCittc2dzdHIgIsOHYWzEscWfbWEgYcSfYWPEsSBoYXrEsXJsYW7EsXlvciAoJyVzJyDDp8Sxa8SxxZ8geWFwxLFsxLF5b3IpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoZGV0YWNoZWQgSEVBRCAlcykiCittc2dzdHIgIsOHYWzEscWfbWEgYcSfYWPEsSBoYXrEsXJsYW7EsXlvciAoYXlyxLFrIEhFQUQgJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDkwCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICJkacSfZXIgw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhIMOnxLFrxLHFnyB5YXDEsWxtxLHFnyBvbHNhIGJpbGUgPGRhbD4gw6fEsWvEscWfxLFuxLEgeWFwIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDkzCittc2dpZCAiY3JlYXRlIGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAieWVuaSBiaXIgZGFsIG9sdcWfdHVyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk1Cittc2dpZCAiY3JlYXRlIG9yIHJlc2V0IGEgYnJhbmNoIgorbXNnc3RyICJ5ZW5pIGJpciBkYWwgb2x1xZ90dXIgdmV5YSBzxLFmxLFybGEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTcKK21zZ2lkICJwb3B1bGF0ZSB0aGUgbmV3IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAieWVuaSDDp2FsxLHFn21hIGHEn2FjxLFuxLEgZG9sZHVyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk4Cittc2dpZCAia2VlcCB0aGUgbmV3IHdvcmtpbmcgdHJlZSBsb2NrZWQiCittc2dzdHIgInllbmkgw6dhbMSxxZ9tYSBhxJ9hY8SxbsSxIGtpbGl0bGkgdHV0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAxCittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtYnJhbmNoKDEpKSIKK21zZ3N0ciAiaXpsZW1lIGtpcGluaSBheWFybGEgKGJrejogZ2l0LWJyYW5jaCgxKSkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDQKK21zZ2lkICJ0cnkgdG8gbWF0Y2ggdGhlIG5ldyBicmFuY2ggbmFtZSB3aXRoIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAieWVuaSBkYWzEsW4gYWTEsW7EsSBiaXIgdXphayBpemxlbWUgZGFsxLF5bGEgZcWfbGXFn3Rpcm1leWkgZGVuZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUxMgorbXNnaWQgIi1iLCAtQiwgYW5kIC0tZGV0YWNoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1iLCAtQiB2ZSAtLWRldGFjaCBiaXJsaWt0ZSBrdWxsYW7EsWxhbWF6IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTczCittc2dpZCAiLS1bbm8tXXRyYWNrIGNhbiBvbmx5IGJlIHVzZWQgaWYgYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQiCittc2dzdHIgIi0tW25vLV10cmFjayB5YWxuxLF6Y2EgeWVuaSBiaXIgZGFsIG9sdcWfdHVydWxtdcWfc2Ega3VsbGFuxLFsYWJpbGlyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjczCittc2dpZCAicmVhc29uIGZvciBsb2NraW5nIgorbXNnc3RyICJraWxpdGxlbWUgbmVkZW5pIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njg1IGJ1aWx0aW4vd29ya3RyZWUuYzo3MTggYnVpbHRpbi93b3JrdHJlZS5jOjc5MgorIzogYnVpbHRpbi93b3JrdHJlZS5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiJyVzJyBiaXIgw6dhbMSxxZ9tYSBhxJ9hY8SxIGRlxJ9pbCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4NyBidWlsdGluL3dvcmt0cmVlLmM6NzIwCittc2dpZCAiVGhlIG1haW4gd29ya2luZyB0cmVlIGNhbm5vdCBiZSBsb2NrZWQgb3IgdW5sb2NrZWQiCittc2dzdHIgIkFuYSDDp2FsxLHFn21hIGHEn2FjxLEga2lsaXRsZW5lbWV6IHZleWEga2lsaWRpIGHDp8SxbGFtYXoiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCwgcmVhc29uOiAlcyIKK21zZ3N0ciAiJyVzJyBoYWxpaGF6xLFyZGEga2lsaXRsaSwgbmVkZW5pOiAlcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkIgorbXNnc3RyICInJXMnIGhhbGloYXrEsXJkYSBraWxpdGxpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiJyVzJyBraWxpdGxpIGRlxJ9pbCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc2MworbXNnaWQgIndvcmtpbmcgdHJlZXMgY29udGFpbmluZyBzdWJtb2R1bGVzIGNhbm5vdCBiZSBtb3ZlZCBvciByZW1vdmVkIgorbXNnc3RyICJhbHRtb2TDvGwgacOnZXJlbiDDp2FsxLHFn21hIGHEn2HDp2xhcsSxIHRhxZ/EsW5hbWF6IHZleWEga2FsZMSxcsSxbGFtYXoiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzEKK21zZ2lkICJmb3JjZSBtb3ZlIGV2ZW4gaWYgd29ya3RyZWUgaXMgZGlydHkgb3IgbG9ja2VkIgorbXNnc3RyICLDp2FsxLHFn21hIGHEn2FjxLEga2lybGkgdmV5YSBraWxpdGxpIG9sc2EgYmlsZSB6b3JsYSB0YcWfxLEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTQgYnVpbHRpbi93b3JrdHJlZS5jOjkyMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGEgbWFpbiB3b3JraW5nIHRyZWUiCittc2dzdHIgIiclcycgYmlyIGFuYSDDp2FsxLHFn21hIGHEn2FjxLEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpZ3VyZSBvdXQgZGVzdGluYXRpb24gbmFtZSBmcm9tICclcyciCittc2dzdHIgImhlZGVmIGFkxLEgxZ91cmFkYW4gYW5sYcWfxLFsYW1hZMSxOiAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInRhcmdldCAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICInJXMnIGhlZGVmaSBoYWxpaGF6xLFyZGEgdmFyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisia2lsaXRsaSBiaXIgw6dhbMSxxZ9tYSBhxJ9hY8SxIHRhxZ/EsW5hbcSxeW9yLCBraWxpdCBuZWRlbmk6ICVzXG4iCisiZ2XDp2Vyc2l6IGvEsWxtYWsgacOnaW4gJ21vdmUgLWYgLWYnIGt1bGxhbsSxbiB2ZXlhIMO2bmNlIGtpbGlkaW5pIGHDp8SxbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgxNQorbXNnaWQgIiIKKyJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWU7XG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJraWxpdGxpIGJpciDDp2FsxLHFn21hIGHEn2FjxLEgdGHFn8SxbmFtxLF5b3I7XG4iCisiZ2XDp2Vyc2l6IGvEsWxtYWsgacOnaW4gJ21vdmUgLWYgLWYnIGt1bGxhbsSxbiB2ZXlhIMO2bmNlIGtpbGlkaW5pIGHDp8SxbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgxOAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IG1vdmUgd29ya2luZyB0cmVlOiAlcyIKK21zZ3N0ciAiZG/En3J1bGFtYSBiYcWfYXLEsXPEsXosIMOnYWzEscWfbWEgYcSfYWPEsSB0YcWfxLFuYW3EsXlvcjogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG1vdmUgJyVzJyB0byAnJXMnIgorbXNnc3RyICInJXMnIC0+ICclcycgdGHFn8SxbWFzxLEgYmHFn2FyxLFzxLF6IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJ2dpdCBzdGF0dXMnIG9uICclcyciCittc2dzdHIgIiclcycgw7x6ZXJpbmRlICdnaXQgc3RhdHVzJyDDp2FsxLHFn3TEsXLEsWxhbWFkxLEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjb250YWlucyBtb2RpZmllZCBvciB1bnRyYWNrZWQgZmlsZXMsIHVzZSAtLWZvcmNlIHRvIGRlbGV0ZSBpdCIKK21zZ3N0ciAiIgorIiclcycgZGXEn2nFn3RpcmlsbWnFnyB2ZXlhIGl6bGVubWV5ZW4gZG9zeWFsYXIgacOnZXJpeW9yLCBzaWxtZWsgacOnaW4gLS1mb3JjZSAiCisia3VsbGFuxLFuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJ2dpdCBzdGF0dXMnIG9uICclcycsIGNvZGUgJWQiCittc2dzdHIgIiclcycgw7x6ZXJpbmRlICdnaXQgc3RhdHVzJyDDp2FsxLHFn3TEsXLEsWxhbWFkxLEsIGtvZCAlZCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkwMworbXNnaWQgImZvcmNlIHJlbW92YWwgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgIsOnYWzEscWfbWEgYcSfYWPEsSBraXJsaSB2ZXlhIGtpbGl0bGkgb2xzYSBiaWxlIHpvcmxhIGthbGTEsXIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXNcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisia2lsaXRsaSBiaXIgw6dhbMSxxZ9tYSBhxJ9hY8SxIGthbGTEsXLEsWxhbcSxeW9yLCBraWxpdCBuZWRlbmk6ICVzXG4iCisiZ2XDp2Vyc2l6IGvEsWxtYWsgacOnaW4gJ3JlbW92ZSAtZiAtZicga3VsbGFuxLFuIHZleWEgw7ZuY2Uga2lsaWRpbmkgYcOnxLFuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI4Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJraWxpdGxpIGJpciDDp2FsxLHFn21hIGHEn2FjxLEga2FsZMSxcsSxbGFtxLF5b3I7XG4iCisiZ2XDp2Vyc2l6IGvEsWxtYWsgacOnaW4gJ3JlbW92ZSAtZiAtZicga3VsbGFuxLFuIHZleWEgw7ZuY2Uga2lsaWRpbmkgYcOnxLFuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgcmVtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgImRvxJ9ydWxhbWEgYmHFn2FyxLFzxLF6LCDDp2FsxLHFn21hIGHEn2FjxLEga2FsZMSxcsSxbGFtxLF5b3I6ICVzIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoxNQorbXNnaWQgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PMO2bmVrPi9dIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOAorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiPMO2bmVrPi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI5Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICJiaXIgPMO2bmVrPiBhbHRkaXppbmkgacOnaW4gYcSfYcOnIG5lc25lc2kgeWF6IgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMQorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgInlhbG7EsXpjYSBoYXRhIGF5xLFrbGFtYSBpw6dpbiB5YXJhcmzEsSIKKworIzogZmFzdC1pbXBvcnQuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICdtYXJrJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgIidtYXJrJyBrb211dHUgYmVrbGVuaXlvcmR1LCAlcyBhbMSxbmTEsSIKKworIzogZmFzdC1pbXBvcnQuYzozMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICd0bycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICIndG8nIGtvbXV0dSBiZWtsZW5peW9yZHUsICVzIGFsxLFuZMSxIgorCisjOiBmYXN0LWltcG9ydC5jOjMyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmVhdHVyZSAnJXMnIGZvcmJpZGRlbiBpbiBpbnB1dCB3aXRob3V0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIgorbXNnc3RyICInJXMnIMO2emVsbGnEn2kgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMgb2xtYWRhbiBnaXJkaWRlIHlhc2FrbMSxIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwZXJtaXNzaW9ucyBvbiB5b3VyIHNvY2tldCBkaXJlY3RvcnkgYXJlIHRvbyBsb29zZTsgb3RoZXJcbiIKKyJ1c2VycyBtYXkgYmUgYWJsZSB0byByZWFkIHlvdXIgY2FjaGVkIGNyZWRlbnRpYWxzLiBDb25zaWRlciBydW5uaW5nOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKK21zZ3N0ciAiIgorIlNva2V0IGRpemluaW5pemRla2kgaXppbmxlciDDp29rIGdldsWfZWs7IGRpxJ9lciBrdWxsYW7EsWPEsWxhciBzaXppblxuIgorIsO2bmJlbGxlxJ9lIGFsxLFubcSxxZ8geWV0a2lsZXJpbml6aSBva3V5YWJpbGlybGVyLiDFnnVudSDDp2FsxLHFn3TEsXJtYXnEsSBkw7zFn8O8bsO8bjpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjI3MgorbXNnaWQgInByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyB0byBzdGRlcnIiCittc2dzdHIgImhhdGEgYXnEsWtsYW1hIGlsZXRpbGVyaW5pIHN0ZGVycidlIHlhemTEsXIiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIG5vdCBtYXJrZWQgcmVhY2hhYmxlIgorbXNnc3RyICIlcyBnw7ZuZGVyaXNpIHVsYcWfxLFsYWJpbGlyIG9sYXJhayBpbWxlbm1lZGkiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNjIKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgIsOnb2sgZmF6bGEgZ8O2bmRlcmkgdWxhxZ/EsWxhYmlsaXIgb2xhcmFrIGltbGVubWnFnyIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjcKK21zZ2lkICJ0ZXN0LXRvb2wgc2VydmUtdjIgWzxvcHRpb25zPl0iCittc2dzdHIgInRlc3QtdG9vbCBzZXJ2ZS12MiBbPHNlw6dlbmVrbGVyPl0iCisKKyM6IHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzoxOQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWR2ZXJ0aXNpbmcgY2FwYWJpbGl0aWVzIgorbXNnc3RyICJiZWNlcmlsZXJpIGfDtnN0ZXJkaWt0ZW4gaGVtZW4gc29ucmEgw6fEsWsiCisKKyM6IGdpdC5jOjI3Cittc2dpZCAiIgorImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPHBhdGg+XSBbLWMgPG5hbWU+PTx2YWx1ZT5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTxwYXRoPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tcGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tIgorImJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPTxwYXRoPl0gWy0td29yay10cmVlPTxwYXRoPl0gWy0tbmFtZXNwYWNlPTxuYW1lPl1cbiIKKyIgICAgICAgICAgIDxjb21tYW5kPiBbPGFyZ3M+XSIKK21zZ3N0ciAiIgorImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPHlvbD5dIFstYyA8YWQ+PTxkZcSfZXI+XVxuIgorIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08eW9sPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tcGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tIgorImJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPTx5b2w+XSBbLS13b3JrLXRyZWU9PHlvbD5dIFstLW5hbWVzcGFjZT08YWQ+XVxuIgorIiAgICAgICAgICAgPGtvbXV0PiBbPGRlxJ9pxZ9rZW5sZXI+XSIKKworIzogZ2l0LmM6MzQKK21zZ2lkICIiCisiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJ0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCBvciBjb25jZXB0LlxuIgorIlNlZSAnZ2l0IGhlbHAgZ2l0JyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS4iCittc2dzdHIgIiIKKyInZ2l0IGhlbHAgLWEnIHZlICdnaXQgaGVscCAtZycga3VsbGFuxLFsYWJpbGlyIGtvbXV0bGFyxLEgdmUgYmF6xLEga29uc2VwdFxuIgorImvEsWxhdnV6bGFyxLFuxLEgbGlzdGVsZXIuIEJlbGlybGkgYmlyIGtvbXV0IHZleWEga29uc2VwdCDDvHplcmluZSBiaWxnaSBhbG1ha1xuIgorImnDp2luICdnaXQgaGVscCA8a29tdXQ+JyB2ZXlhICdnaXQgaGVscCA8a29uc2VwdD4nIHlhesSxbi4gR2VuZWwgYmlyIGfDtnLDvG7DvG1cbiIKKyJpw6dpbiAnZ2l0IGhlbHAgZ2l0JyBrdWxsYW5hYmlsaXJzaW5pei4iCisKKyM6IGdpdC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tZ2l0LWRpclxuIgorbXNnc3RyICItLWdpdC1kaXIgacOnaW4gZGl6aW4gdmVyaWxtZWRpXG4iCisKKyM6IGdpdC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlXG4iCittc2dzdHIgIi0tbmFtZXNwYWNlIGnDp2luIGFkIGFsYW7EsSB2ZXJpbG1lZGlcbiIKKworIzogZ2l0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS13b3JrLXRyZWVcbiIKK21zZ3N0ciAiLS13b3JrLXRyZWUgacOnaW4gZGl6aW4gdmVyaWxtZWRpXG4iCisKKyM6IGdpdC5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcmVmaXggZ2l2ZW4gZm9yIC0tc3VwZXItcHJlZml4XG4iCittc2dzdHIgIi0tc3VwZXItcHJlZml4IGnDp2luIMO2bmVrIHZlcmlsbWVkaVxuIgorCisjOiBnaXQuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLWMgZXhwZWN0cyBhIGNvbmZpZ3VyYXRpb24gc3RyaW5nXG4iCittc2dzdHIgIi1jIGJpciB5YXDEsWxhbmTEsXJtYSBkaXppc2kgYmVrbGl5b3JcbiIKKworIzogZ2l0LmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLUNcbiIKK21zZ3N0ciAiLUMgacOnaW4gZGl6aW4gdmVyaWxtZWRpXG4iCisKKyM6IGdpdC5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiYmlsaW5tZXllbiBzZcOnZW5lazogJXNcbiIKKworIzogZ2l0LmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIgorbXNnc3RyICInJXMnIGFybWFzxLEgZ2VuacWfbGV0aXJpbGlya2VuOiAnJXMnIgorCisjOiBnaXQuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFsaWFzICclcycgY2hhbmdlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4iCisiWW91IGNhbiB1c2UgJyFnaXQnIGluIHRoZSBhbGlhcyB0byBkbyB0aGlzIgorbXNnc3RyICIiCisiJyVzJyBhcm1hc8SxIG9ydGFtIGRlxJ9pxZ9rZW5sZXJpbmkgZGXEn2nFn3RpcmlyLlxuIgorIkJ1bnUgeWFwbWFrIGnDp2luIGFybWFkYSAnIWdpdCcga3VsbGFuYWJpbGlyc2luaXouIgorCisjOiBnaXQuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgYWxpYXMgZm9yICVzIgorbXNnc3RyICIlcyBpw6dpbiBib8WfIGFybWEiCisKKyM6IGdpdC5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgYWxpYXM6ICVzIgorbXNnc3RyICLDtnp5aW5lbGkgYXJtYTogJXMiCisKKyM6IGdpdC5jOjQ1OQorbXNnaWQgIndyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJzdGFuZGFydCDDp8Sxa3TEsSdkYSB5YXptYSBoYXRhc8SxIgorCisjOiBnaXQuYzo0NjEKK21zZ2lkICJ1bmtub3duIHdyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJzdGFuZGFydCDDp8Sxa3TEsSdkYSBiaWxpbm1leWVuIHlhem1hIGhhdGFzxLEiCisKKyM6IGdpdC5jOjQ2MworbXNnaWQgImNsb3NlIGZhaWxlZCBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgInN0YW5kYXJ0IMOnxLFrdMSxJ2RhIGthcGF0bWEgYmHFn2FyxLFzxLF6IgorCisjOiBnaXQuYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgbG9vcCBkZXRlY3RlZDogZXhwYW5zaW9uIG9mICclcycgZG9lcyBub3QgdGVybWluYXRlOiVzIgorbXNnc3RyICJhcm1hIGTDtm5nw7xzw7wgYWxnxLFsYW5kxLE6ICclcycgZ2VuacWfbGV0aWxtZXNpIHNvbmxhbm3EsXlvcjolcyIKKworIzogZ2l0LmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgJXMgYXMgYSBidWlsdGluIgorbXNnc3RyICIlcyBiaXIgeWVybGXFn2lrIG9sYXJhayBpxZ9sZW5lbWl5b3IiCisKKyM6IGdpdC5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidXNhZ2U6ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJrdWxsYW7EsW06ICVzXG4iCisiXG4iCisKKyM6IGdpdC5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBhbnNpb24gb2YgYWxpYXMgJyVzJyBmYWlsZWQ7ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmRcbiIKK21zZ3N0ciAiIgorIiclcycgYXJtYXPEsW7EsW4gZ2VuacWfbGV0aWxtZXNpIGJhxZ9hcsSxc8SxeiBvbGR1OyAnJXMnIGJpciBnaXQga29tdXR1IGRlxJ9pbFxuIgorCisjOiBnaXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iCittc2dzdHIgIiclcycga29tdXR1IMOnYWzEscWfdMSxcsSxbGFtYWTEsTogJXNcbiIKKworIzogaHR0cC5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZSBmb3IgaHR0cC5wb3N0YnVmZmVyOyBkZWZhdWx0aW5nIHRvICVkIgorbXNnc3RyICJodHRwLnBvc3RidWZmZXIgacOnaW4gbmVnYXRpZiBkZcSfZXI7ICVkIG9sYXJhayB2YXJzYXnEsWzEsXlvciIKKworIzogaHR0cC5jOjM5OQorbXNnaWQgIkRlbGVnYXRpb24gY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMjIuMCIKK21zZ3N0ciAiRGVsZWdhc3lvbiBkZW5ldGltaSBjVVJMIDwgNy4yMi4wIHRhcmFmxLFuZGFuIGRlc3Rla2xlbm1peW9yIgorCisjOiBodHRwLmM6NDA4Cittc2dpZCAiUHVibGljIGtleSBwaW5uaW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy40NC4wIgorbXNnc3RyICJPcnRhayBhbmFodGFyIGnEn25lbGVtZXNpIGNVUkwgPCA3LjQ0LjAgdGFyYWbEsW5kYW4gZGVzdGVrbGVubWl5b3IiCisKKyM6IGh0dHAuYzo4NzYKK21zZ2lkICJDVVJMU1NMT1BUX05PX1JFVk9LRSBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiQ1VSTFNTTE9QVF9OT19SRVZPS0UgY1VSTCA8IDcuNDQuMCB0YXJhZsSxbmRhbiBkZXN0ZWtsZW5taXlvciIKKworIzogaHR0cC5jOjk0OQorbXNnaWQgIlByb3RvY29sIHJlc3RyaWN0aW9ucyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMTkuNCIKK21zZ3N0ciAiUHJvdG9rb2wgc8SxbsSxcmxhbWFsYXLEsSBjVVJMIDwgNy4xOS40IHRhcmFmxLFuZGFuIGRlc3Rla2xlbm1peW9yIgorCisjOiBodHRwLmM6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbnN1cHBvcnRlZCBTU0wgYmFja2VuZCAnJXMnLiBTdXBwb3J0ZWQgU1NMIGJhY2tlbmRzOiIKK21zZ3N0ciAiRGVzdGVrbGVubWV5ZW4gU1NMIGFya2EgdWN1ICclcycuIERlc3Rla2xlbmVuIFNTTCBhcmthIHXDp2xhcsSxOiIKKworIzogaHR0cC5jOjEwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBjVVJMIHdhcyBidWlsdCB3aXRob3V0IFNTTCBiYWNrZW5kcyIKK21zZ3N0ciAiIgorIlNTTCBhcmthIHVjdSAnJXMnIG9sYXJhayBheWFybGFuYW1hZMSxOiBjVVJMLCBTU0wgYXJrYSB1w6dsYXLEsSBvbG1hZGFuIHlhcMSxbG3EscWfIgorCisjOiBodHRwLmM6MTA5NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGFscmVhZHkgc2V0IgorbXNnc3RyICJTU0wgYXJrYSB1Y3UgJyVzJyBvbGFyYWsgYXlhcmxhbmFtYWTEsTogSGFsaWhhesSxcmRhIGF5YXJsYW5txLHFnyIKKworIzogaHR0cC5jOjE5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byB1cGRhdGUgdXJsIGJhc2UgZnJvbSByZWRpcmVjdGlvbjpcbiIKKyIgIGFza2VkIGZvcjogJXNcbiIKKyIgICByZWRpcmVjdDogJXMiCittc2dzdHIgIiIKKyJ5ZW5pZGVuIHnDtm5sZW5kaXJlcmVrIHVybCB0YWJhbsSxIGfDvG5jZWxsZW5lbWl5b3I6XG4iCisiIMWfdSBpc3RlbmRpOiAlc1xuIgorIiAgIHnDtm5sZW5lbjogJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcXVvdGluZyBpbiBwdXNoLW9wdGlvbiB2YWx1ZTogJyVzJyIKK21zZ3N0ciAicHVzaC1vcHRpb24gZGXEn2VyaW5kZSBnZcOnZXJzaXogdMSxcm5hayBpw6dpbmUgYWzEsW06ICclcyciCisKKyM6IHJlbW90ZS1jdXJsLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaW5mby9yZWZzIG5vdCB2YWxpZDogaXMgdGhpcyBhIGdpdCByZXBvc2l0b3J5PyIKK21zZ3N0ciAiJXNpbmZvL3JlZnMgZ2XDp2VybGkgZGXEn2lsOiBidSBiaXIgZ2l0IGRlcG9zdSBtdT8iCisKKyM6IHJlbW90ZS1jdXJsLmM6MzY0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGV4cGVjdGVkIHNlcnZpY2UsIGdvdCBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdlw6dlcnNpeiBzdW51Y3UgeWFuxLF0xLE7IHNlcnZpcyBiZWtsZW5peW9yZHUsIGZsb8WfIHBha2V0aSBhbMSxbmTEsSIKKworIzogcmVtb3RlLWN1cmwuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGdvdCAnJXMnIgorbXNnc3RyICJnZcOnZXJzaXogc3VudWN1IHlhbsSxdMSxOyAnJXMnIGFsxLFuZMSxIgorCisjOiByZW1vdGUtY3VybC5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgbm90IGZvdW5kIgorbXNnc3RyICInJXMnIGRlcG9zdSBidWx1bmFtYWTEsSIKKworIzogcmVtb3RlLWN1cmwuYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0aGVudGljYXRpb24gZmFpbGVkIGZvciAnJXMnIgorbXNnc3RyICInJXMnIGnDp2luIGtpbWxpayBkb8SfcnVsYW1hc8SxIGJhxZ9hcsSxc8SxeiIKKworIzogcmVtb3RlLWN1cmwuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnOiAlcyIKK21zZ3N0ciAiJyVzJyBlcmnFn2lsZW1peW9yOiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgdG8gJXMiCittc2dzdHIgIsWfdXJheWEgeWVuaWRlbiB5w7ZubGVuZGlyaWxpeW9yOiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo1OTMKK21zZ2lkICJzaG91bGRuJ3QgaGF2ZSBFT0Ygd2hlbiBub3QgZ2VudGxlIG9uIEVPRiIKK21zZ3N0ciAiZG9zeWEgc29udW5hIGRpa2thdCBlZGlsbWl5b3JzYSBkb3N5YSBzb251IG9sbWFtYWzEsWTEsXIiCisKKyM6IHJlbW90ZS1jdXJsLmM6NjczCittc2dpZCAidW5hYmxlIHRvIHJld2luZCBycGMgcG9zdCBkYXRhIC0gdHJ5IGluY3JlYXNpbmcgaHR0cC5wb3N0QnVmZmVyIgorbXNnc3RyICIiCisicnBjIHNvbnJhc8SxIHZlcmlzaSBnZXJpIHNhcsSxbGFtxLF5b3IgLSBodHRwcy5wb3N0QnVmZmVyJ8SxIGFydMSxcm1hecSxIGRlbmV5aW4iCisKKyM6IHJlbW90ZS1jdXJsLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJQQyBmYWlsZWQ7ICVzIgorbXNnc3RyICJSUEMgYmHFn2FyxLFzxLF6IG9sZHU7ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjc3MworbXNnaWQgImNhbm5vdCBoYW5kbGUgcHVzaGVzIHRoaXMgYmlnIgorbXNnc3RyICJidSBrYWRhciBiw7x5w7xrIGl0bWVsZXIgacWfbGVuZW1peW9yIgorCisjOiByZW1vdGUtY3VybC5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGRlZmxhdGUgZXJyb3IgJWQiCittc2dzdHIgImlzdGVrIHPDtm5kw7xyw7xsZW1peW9yOyAnemxpYiBkZWZsYXRlJyBoYXRhc8SxICVkIgorCisjOiByZW1vdGUtY3VybC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGVuZCBlcnJvciAlZCIKK21zZ3N0ciAiaXN0ZWsgc8O2bmTDvHLDvGxlbWl5b3I7ICd6bGliIGVuZCcgaGF0YXPEsSAlZCIKKworIzogcmVtb3RlLWN1cmwuYzoxMDIzCittc2dpZCAiZHVtYiBodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2FwYWJpbGl0aWVzIgorbXNnc3RyICJwcm9ncmFtbGFuYW1heWFuIGh0dHAgdGHFn8SxecSxY8Sxc8SxIHPEscSfIGnFn2xldmxlcmkgZGVzdGVrbGVtaXlvciIKKworIzogcmVtb3RlLWN1cmwuYzoxMDM4Cittc2dpZCAiZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiZ2V0aXJtZSBiYcWfYXLEsXPEsXouIgorCisjOiByZW1vdGUtY3VybC5jOjEwODYKK21zZ2lkICJjYW5ub3QgZmV0Y2ggYnkgc2hhMSBvdmVyIHNtYXJ0IGh0dHAiCittc2dzdHIgImFrxLFsbMSxIGh0dHAgw7x6ZXJpbmRlbiBzaGExIGlsZSBnZXRpcm1lIHlhcMSxbGFtxLF5b3IiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTEzMCByZW1vdGUtY3VybC5jOjExMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAnJXMnIgorbXNnc3RyICJwcm90b2tvbCBoYXRhc8SxOiBzaGEvcmVmIGJla2xlbml5b3JkdSwgJyVzJyBhbMSxbmTEsSIKKworIzogcmVtb3RlLWN1cmwuYzoxMTQ4IHJlbW90ZS1jdXJsLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0ICVzIgorbXNnc3RyICJodHRwIHRhxZ/EsXnEsWPEsXPEsSAlcyBkZXN0ZWtsZW1peW9yIgorCisjOiByZW1vdGUtY3VybC5jOjExODQKK21zZ2lkICJnaXQtaHR0cC1wdXNoIGZhaWxlZCIKK21zZ3N0ciAiZ2l0LWh0dHAtcHVzaCBiYcWfYXLEsXPEsXoiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM2OQorbXNnaWQgInJlbW90ZS1jdXJsOiB1c2FnZTogZ2l0IHJlbW90ZS1jdXJsIDxyZW1vdGU+IFs8dXJsPl0iCittc2dzdHIgInJlbW90ZS1jdXJsOiBrdWxsYW7EsW06IGdpdCByZW1vdGUtY3VybCA8dXphay1rb251bT4gWzx1cmw+XSIKKworIzogcmVtb3RlLWN1cmwuYzoxNDAxCittc2dpZCAicmVtb3RlLWN1cmw6IGVycm9yIHJlYWRpbmcgY29tbWFuZCBzdHJlYW0gZnJvbSBnaXQiCittc2dzdHIgInJlbW90ZS1jdXJsOiBnaXQndGVuIGtvbXV0IGFrxLHFn8SxIG9rdW51cmtlbiBoYXRhIgorCisjOiByZW1vdGUtY3VybC5jOjE0MDgKK21zZ2lkICJyZW1vdGUtY3VybDogZmV0Y2ggYXR0ZW1wdGVkIHdpdGhvdXQgYSBsb2NhbCByZXBvIgorbXNnc3RyICJyZW1vdGUtY3VybDogeWVyZWwgYmlyIGRlcG8gb2xtYWRhbiBnZXRpcm1lIHlhcMSxbG1heWEgw6dhbMSxxZ/EsWxkxLEiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtY3VybDogdW5rbm93biBjb21tYW5kICclcycgZnJvbSBnaXQiCittc2dzdHIgInJlbW90ZS1jdXJsOiBnaXQndGVuIGJpbGlubWV5ZW4ga29tdXQgJyVzJyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODUKK21zZ2lkICJhcmdzIgorbXNnc3RyICJkZcSfacWfa2VubGVyIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NgorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgIm5lc25lIHPDvHrDvG3DvCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE4MworbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICJzb24ga3VsbGFuxLFtIHRhcmloaSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE5NworbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAiacWfbGVtIHlvayAoZ2VyaXllIGTDtm7DvGsgdXl1bWx1bHVrIGnDp2luKSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMwOQorbXNnaWQgImJlIG1vcmUgdmVyYm9zZSIKK21zZ3N0ciAiZGFoYSBheXLEsW50xLFsxLEgYW5sYXQiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTEKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICJkYWhhIHNlc3NpeiBvbCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxNworbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICJTSEEtMSdsZXJpIGfDtnLDvG50w7xsZW1layBpw6dpbiA8bj4gcmFrYW0ga3VsbGFuIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM2Cittc2dpZCAiaG93IHRvIHN0cmlwIHNwYWNlcyBhbmQgI2NvbW1lbnRzIGZyb20gbWVzc2FnZSIKK21zZ3N0ciAiaWxldGlkZW4gYm/Fn2x1a2xhcsSxIHZlICN5b3J1bWxhcsSxIMOnxLFrYXJ0IgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM3Cittc2dpZCAicmVhZCBwYXRoc3BlYyBmcm9tIGZpbGUiCittc2dzdHIgInlvbCBiZWxpcnRlY2luaSBkb3N5YWRhbiBva3UiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzgKK21zZ2lkICIiCisid2l0aCAtLXBhdGhzcGVjLWZyb20tZmlsZSwgcGF0aHNwZWMgZWxlbWVudHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKyItLXBhdGhzcGVjLWZyb20tZmlsZSBpbGUsIHlvbCBiZWxpcnRlY2kgw7ZnZWxlcmkgTlVMIGthcmFrdGVyaSBpbGUgYXlyxLFsxLFyIgorCisjOiByZWYtZmlsdGVyLmg6MTAxCittc2dpZCAia2V5IgorbXNnc3RyICJhbmFodGFyIgorCisjOiByZWYtZmlsdGVyLmg6MTAxCittc2dpZCAiZmllbGQgbmFtZSB0byBzb3J0IG9uIgorbXNnc3RyICLDvHplcmluZSBzxLFyYWxhbmFjYWsgYWxhbiBhZMSxIgorCisjOiByZXJlcmUuaDo0NAorbXNnaWQgInVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZXVzZWQgY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZSIKK21zZ3N0ciAiIgorImXEn2VyIG9sYW5ha2zEsXlzYSBpbmRla3NpIHllbmlkZW4ga3VsbGFuxLFsbcSxxZ8gw6dha8SxxZ9tYSDDp8O2esO8bcO8IGlsZSBnw7xuY2VsbGUiCisKKyM6IHd0LXN0YXR1cy5oOjY3Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBhdCAiCittc2dzdHIgIkhFQUQgxZ91cmFkYSBheXLEsWxkxLE6ICIKKworIzogd3Qtc3RhdHVzLmg6NjgKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICJIRUFEIMWfdW5kYW4gYXlyxLFsZMSxOiAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUwCittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIGluZGV4IgorbXNnc3RyICJEb3N5YSBpw6dlcmnEn2luaSBpbmRla3NlIGVrbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUxCittc2dpZCAiQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBmcm9tIGEgbWFpbGJveCIKK21zZ3N0ciAiQmlyIHBvc3RhIGt1dHVzdW5kYW4gYmlyIGRpemkgeWFtYSB1eWd1bGEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUyCittc2dpZCAiQW5ub3RhdGUgZmlsZSBsaW5lcyB3aXRoIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiR8O2bmRlcmkgYmlsZ2lzaW5pIGRvc3lhIGnDp2kgYcOnxLFrbGFtYSBvbGFyYWsgZWtsZSIKKworIzogY29tbWFuZC1saXN0Lmg6NTMKK21zZ2lkICJBcHBseSBhIHBhdGNoIHRvIGZpbGVzIGFuZC9vciB0byB0aGUgaW5kZXgiCittc2dzdHIgIsSwbmRla3NlIHZlL3ZleWEgZG9zeWFsYXJhIGJpciB5YW1hIHV5Z3VsYSIKKworIzogY29tbWFuZC1saXN0Lmg6NTQKK21zZ2lkICJJbXBvcnQgYSBHTlUgQXJjaCByZXBvc2l0b3J5IGludG8gR2l0IgorbXNnc3RyICJHaXQnZSBiaXIgR05VIEFyY2ggZGVwb3N1IGnDp2UgYWt0YXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU1Cittc2dpZCAiQ3JlYXRlIGFuIGFyY2hpdmUgb2YgZmlsZXMgZnJvbSBhIG5hbWVkIHRyZWUiCittc2dzdHIgIkFkIHZlcmlsbWnFnyBhxJ9hw6d0YW4gYmlyIGRvc3lhbGFyIGFyxZ9pdmkgb2x1xZ90dXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU2Cittc2dpZCAiVXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAiSGF0YWxhcmEgbmVkZW4gb2xhbiBnw7ZuZGVyaXlpIGJ1bG1hZGEgaWtpbGkgYXJhbWEga3VsbGFuIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NworbXNnaWQgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIKK21zZ3N0ciAiRG9zeWEgc2F0xLFybGFyxLFuxLEgc29uIGRlxJ9pxZ90aXJlbiByZXZpenlvbi95YXphcsSxIGfDtnN0ZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU4Cittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgIkRhbGxhciBvbHXFn3R1ciwgc2lsIHZleWEgbGlzdGVsZSIKKworIzogY29tbWFuZC1saXN0Lmg6NTkKK21zZ2lkICJNb3ZlIG9iamVjdHMgYW5kIHJlZnMgYnkgYXJjaGl2ZSIKK21zZ3N0ciAiTmVzbmVsZXJpIHZlIGJhxZ92dXJ1bGFyxLEgYXLFn2l2ZSBnw7ZyZSB0YcWfxLEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYwCittc2dpZCAiUHJvdmlkZSBjb250ZW50IG9yIHR5cGUgYW5kIHNpemUgaW5mb3JtYXRpb24gZm9yIHJlcG9zaXRvcnkgb2JqZWN0cyIKK21zZ3N0ciAiRGVwbyBuZXNuZWxlcmkgacOnaW4gacOnZXJpayB2ZXlhIHTDvHIvYm95dXQgYmlsZ2lzaSBzYcSfbGEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYxCittc2dpZCAiRGlzcGxheSBnaXRhdHRyaWJ1dGVzIGluZm9ybWF0aW9uIgorbXNnc3RyICJnaXRhdHRyaWJ1dGVzIGJpbGdpc2luaSBnw7Zyw7xudMO8bGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYyCittc2dpZCAiRGVidWcgZ2l0aWdub3JlIC8gZXhjbHVkZSBmaWxlcyIKK21zZ3N0ciAiZ2l0aWdub3JlIC8gZXhjbHVkZSBkb3N5YWxhcsSxbmRhIGhhdGEgYXnEsWtsYSIKKworIzogY29tbWFuZC1saXN0Lmg6NjMKK21zZ2lkICJTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzIgorbXNnc3RyICJLacWfaWxlcmluIGFkbGFyxLFuxLEgdmUgZS1wb3N0YSBhZHJlc2xlcmluaSBnw7ZzdGVyIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NAorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiRGFsIGRlxJ9pxZ90aXIgdmV5YSDDp2FsxLHFn21hIGHEn2FjxLFuxLEgZXNraSBoYWxpbmUgZ2VyaSBnZXRpciIKKworIzogY29tbWFuZC1saXN0Lmg6NjUKK21zZ2lkICJDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIkRvc3lhbGFyxLEgaW5kZWtzdGVuIMOnYWzEscWfbWEgYcSfYWPEsW5hIGtvcHlhbGEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY2Cittc2dpZCAiRW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIG5hbWUgaXMgd2VsbCBmb3JtZWQiCittc2dzdHIgIkJpciBiYcWfdnVydSBhZMSxbsSxbiBkw7x6Z8O8bmNlIG9sdcWfdHVydWxkdcSfdW5kYW4gZW1pbiBvbCIKKworIzogY29tbWFuZC1saXN0Lmg6NjcKK21zZ2lkICJGaW5kIGNvbW1pdHMgeWV0IHRvIGJlIGFwcGxpZWQgdG8gdXBzdHJlYW0iCittc2dzdHIgIkhlbsO8eiDDvHN0a2F5bmHEn2EgdXlndWxhbm1heWFuIGfDtm5kZXJpbGVyaSBidWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY4Cittc2dpZCAiQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIk1ldmN1dCBiYXrEsSBnw7ZuZGVyaWxlcmluIGdldGlyZGnEn2kgZGXEn2nFn2lrbGlrbGVyaSB1eWd1bGEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY5Cittc2dpZCAiR3JhcGhpY2FsIGFsdGVybmF0aXZlIHRvIGdpdC1jb21taXQiCittc2dzdHIgImdpdC1jb21taXQgacOnaW4gZ3JhZmlrIHRhYmFubMSxIGFsdGVybmF0aWYiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcwCittc2dpZCAiUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIsSwemxlbm1leWVuIGRvc3lhbGFyxLEgw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhbiBrYWxkxLFyIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MQorbXNnaWQgIkNsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAiQmlyIGRlcG95dSB5ZW5pIGJpciBkaXppbmUga2xvbmxhIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MgorbXNnaWQgIkRpc3BsYXkgZGF0YSBpbiBjb2x1bW5zIgorbXNnc3RyICJWZXJpbGVyaSBzw7x0dW5sYXJsYSBnw7ZzdGVyIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MworbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJEZcSfacWfaWtsaWtsZXJpbiBrYXlkxLFuxLEgZGVwb3lhIHlheiIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIkdpdCBjb21taXQtZ3JhcGggZG9zeWFsYXLEsW7EsSBkb8SfcnVsYSB2ZSB5YXoiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc1Cittc2dpZCAiQ3JlYXRlIGEgbmV3IGNvbW1pdCBvYmplY3QiCittc2dzdHIgIlllbmkgYmlyIGfDtm5kZXJpIG5lc25lc2kgb2x1xZ90dXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc2Cittc2dpZCAiR2V0IGFuZCBzZXQgcmVwb3NpdG9yeSBvciBnbG9iYWwgb3B0aW9ucyIKK21zZ3N0ciAiRGVwb3l1IHZleWEgZ2xvYmFsIHNlw6dlbmVrbGVyaSBhbCB2ZSBheWFybGEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc3Cittc2dpZCAiQ291bnQgdW5wYWNrZWQgbnVtYmVyIG9mIG9iamVjdHMgYW5kIHRoZWlyIGRpc2sgY29uc3VtcHRpb24iCittc2dzdHIgIkHDp8SxbG1hbcSxxZ8gbmVzbmUgc2F5xLFzxLFuxLEgdmUgZGlzayBrdWxsYW7EsW3EsW7EsSBoZXNhcGxhIgorCisjOiBjb21tYW5kLWxpc3QuaDo3OAorbXNnaWQgIlJldHJpZXZlIGFuZCBzdG9yZSB1c2VyIGNyZWRlbnRpYWxzIgorbXNnc3RyICJLdWxsYW7EsWPEsSB5ZXRraWxlcmluaSBhbCB2ZSBkZXBvbGEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc5Cittc2dpZCAiSGVscGVyIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHBhc3N3b3JkcyBpbiBtZW1vcnkiCittc2dzdHIgIlBhcm9sYWxhcsSxIGdlw6dpY2kgb2xhcmFrIGJlbGxla3RlIHNha2xhbWFrIGnDp2luIHlhcmTEsW1jxLEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgwCittc2dpZCAiSGVscGVyIHRvIHN0b3JlIGNyZWRlbnRpYWxzIG9uIGRpc2siCittc2dzdHIgIllldGtpbGVyaSBkaXNrdGUgc2FrbGFtYWsgacOnaW4geWFyZMSxbWPEsSIKKworIzogY29tbWFuZC1saXN0Lmg6ODEKK21zZ2lkICJFeHBvcnQgYSBzaW5nbGUgY29tbWl0IHRvIGEgQ1ZTIGNoZWNrb3V0IgorbXNnc3RyICJCaXIgQ1ZTIMOnxLFrxLHFn8SxbmEgdGVrIGJpciBnw7ZuZGVyaXlpIGTEscWfYSBha3RhciIKKworIzogY29tbWFuZC1saXN0Lmg6ODIKK21zZ2lkICJTYWx2YWdlIHlvdXIgZGF0YSBvdXQgb2YgYW5vdGhlciBTQ00gcGVvcGxlIGxvdmUgdG8gaGF0ZSIKK21zZ3N0ciAiVGlza2luZGnEn2luaXogYmHFn2thIGJpciBLRFknZGVuIHZlcmlsZXJpIGt1cnRhciIKKworIzogY29tbWFuZC1saXN0Lmg6ODMKK21zZ2lkICJBIENWUyBzZXJ2ZXIgZW11bGF0b3IgZm9yIEdpdCIKK21zZ3N0ciAiR2l0IGnDp2luIGJpciBTQ1Ygc3VudWN1c3Ugw7Z5a8O8bsO8Y8O8c8O8IgorCisjOiBjb21tYW5kLWxpc3QuaDo4NAorbXNnaWQgIkEgcmVhbGx5IHNpbXBsZSBzZXJ2ZXIgZm9yIEdpdCByZXBvc2l0b3JpZXMiCittc2dzdHIgIkdpdCBkZXBvbGFyxLEgacOnaW4gZ2Vyw6dla3RlbiB5YWzEsW4gYmlyIHN1bnVjdSIKKworIzogY29tbWFuZC1saXN0Lmg6ODUKK21zZ2lkICJHaXZlIGFuIG9iamVjdCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgYmFzZWQgb24gYW4gYXZhaWxhYmxlIHJlZiIKK21zZ3N0ciAiVXlndW4gYmlyIGJhxZ92dXJ1eXUgdGVtZWwgYWzEsXAgbmVzbmV5ZSBva3VuYWJpbGlyIGFkIHZlciIKKworIzogY29tbWFuZC1saXN0Lmg6ODYKK21zZ2lkICJTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjIgorbXNnc3RyICJHw7ZuZGVyaWxlciwgZ8O2bmRlcmkgdmUgYcSfYcOnbGFyIHZiLiBhcmFzxLEgZGXEn2nFn2lrbGlrbGVyIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NworbXNnaWQgIkNvbXBhcmVzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCIKK21zZ3N0ciAixLBuZGVrc3Rla2kgdmUgw6dhbMSxxZ9tYSBhxJ9hY8SxbmRha2kgZG9zeWFsYXLEsSBzxLFrxLHFn3TEsXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg4Cittc2dpZCAiQ29tcGFyZSBhIHRyZWUgdG8gdGhlIHdvcmtpbmcgdHJlZSBvciBpbmRleCIKK21zZ3N0ciAiQmlyIGHEn2FjxLEgw6dhbMSxxZ9tYSBhxJ9hY8SxIHZleWEgaW5kZWtzIGlsZSBrYXLFn8SxbGHFn3TEsXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg5Cittc2dpZCAiQ29tcGFyZXMgdGhlIGNvbnRlbnQgYW5kIG1vZGUgb2YgYmxvYnMgZm91bmQgdmlhIHR3byB0cmVlIG9iamVjdHMiCittc2dzdHIgIiIKKyLEsGtpIGHEn2HDpyBuZXNuZXNpIGlsZSBidWx1bmFuIGlraWxpbGVyaW4gacOnZXJpayB2ZSBraXBsZXJpbmkga2FyxZ/EsWxhxZ90xLFyIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAiRGXEn2nFn2lrbGlrbGVyaSB5YXlnxLFuIGRpZmYgYXJhw6dsYXLEsXlsYSBnw7ZzdGVyIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MQorbXNnaWQgIkdpdCBkYXRhIGV4cG9ydGVyIgorbXNnc3RyICJHaXQgdmVyaSBkxLHFn2EgYWt0YXLEsWPEsXPEsSIKKworIzogY29tbWFuZC1saXN0Lmg6OTIKK21zZ2lkICJCYWNrZW5kIGZvciBmYXN0IEdpdCBkYXRhIGltcG9ydGVycyIKK21zZ3N0ciAiSMSxemzEsSBHaXQgdmVyaSBkxLHFn2EgYWt0YXLEsWPEsWxhcsSxIGnDp2luIGFya2EgdcOnIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MworbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIkJhxZ9rYSBiaXIgZGVwb2RhbiBuZXNuZWxlcmkgdmUgYmHFn3Z1cnVsYXLEsSBpbmRpciIKKworIzogY29tbWFuZC1saXN0Lmg6OTQKK21zZ2lkICJSZWNlaXZlIG1pc3Npbmcgb2JqZWN0cyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiQmHFn2thIGJpciBkZXBvZGFuIGVrc2lrIG5lc25lbGVyaSBhbCIKKworIzogY29tbWFuZC1saXN0Lmg6OTUKK21zZ2lkICJSZXdyaXRlIGJyYW5jaGVzIgorbXNnc3RyICJEYWxsYXLEsSB5ZW5pZGVuIHlheiIKKworIzogY29tbWFuZC1saXN0Lmg6OTYKK21zZ2lkICJQcm9kdWNlIGEgbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIkJpciBiaXJsZcWfdGlybWUgZ8O2bmRlcmlzaSBpbGV0aXNpIG9sdcWfdHVyIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NworbXNnaWQgIk91dHB1dCBpbmZvcm1hdGlvbiBvbiBlYWNoIHJlZiIKK21zZ3N0ciAiSGVyIGJhxZ92dXJ1IMO8emVyaW5lIGJpbGdpIMOnxLFrdMSxIHZlciIKKworIzogY29tbWFuZC1saXN0Lmg6OTgKK21zZ2lkICJQcmVwYXJlIHBhdGNoZXMgZm9yIGUtbWFpbCBzdWJtaXNzaW9uIgorbXNnc3RyICJFLXBvc3RhIHRlc2xpbWkgacOnaW4geWFtYWxhcsSxIGhhesSxcmxhIgorCisjOiBjb21tYW5kLWxpc3QuaDo5OQorbXNnaWQgIlZlcmlmaWVzIHRoZSBjb25uZWN0aXZpdHkgYW5kIHZhbGlkaXR5IG9mIHRoZSBvYmplY3RzIGluIHRoZSBkYXRhYmFzZSIKK21zZ3N0ciAiVmVyaXRhYi4gbmVzbmVsZXJpbiBiYcSfbGFuxLFybMSxxJ/EsW7EsSB2ZSBnZcOnZXJsaWxpxJ9pbmkgc8SxbmEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMAorbXNnaWQgIkNsZWFudXAgdW5uZWNlc3NhcnkgZmlsZXMgYW5kIG9wdGltaXplIHRoZSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJHZXJla3NpeiBkb3N5YWxhcsSxIHRlbWl6bGUgdmUgeWVyZWwgZGVwb3l1IGVuaXlpbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMQorbXNnaWQgIkV4dHJhY3QgY29tbWl0IElEIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIHVzaW5nIGdpdC1hcmNoaXZlIgorbXNnc3RyICJHw7ZuZGVyaSBpbGV0aXNpbmkgYmlyIGdpdC1hcmNoaXZlIGFyxZ9pdmluZGVuIMOnxLFrYXJ0xLFwIGFsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDIKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIkJpciBkaXpnaSBpbGUgZcWfbGXFn2VuIHNhdMSxcmxhcsSxIHlhemTEsXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMworbXNnaWQgIkEgcG9ydGFibGUgZ3JhcGhpY2FsIGludGVyZmFjZSB0byBHaXQiCittc2dzdHIgIkdpdCBpw6dpbiB0YcWfxLFuYWJpbGlyIGJpciBncmFmaWsgYXJhYmlyaW0iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNAorbXNnaWQgIkNvbXB1dGUgb2JqZWN0IElEIGFuZCBvcHRpb25hbGx5IGNyZWF0ZXMgYSBibG9iIGZyb20gYSBmaWxlIgorbXNnc3RyICJTYcSfbGFtYXnEsSBoZXNhcGxhIHZlIGlzdGXEn2UgZ8O2cmUgZG9zeWFkYW4gaWtpbGkgb2x1xZ90dXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNQorbXNnaWQgIkRpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiBhYm91dCBHaXQiCittc2dzdHIgIkdpdCB5YXJkxLFtIGJpbGdpc2luaSBnw7Zyw7xudMO8bGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNgorbXNnaWQgIlNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdpdCBvdmVyIEhUVFAiCittc2dzdHIgIkdpdCdpbiBIVFRQIMO8emVyaW5kZW4gc3VudWN1IHRhcmFmxLEgdXlndWxhbWFzxLEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNworbXNnaWQgIkRvd25sb2FkIGZyb20gYSByZW1vdGUgR2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAiCittc2dzdHIgIkhUVFAgw7x6ZXJpbmRlbiB1emFrIGJpciBHaXQgZGVwb3N1bmRhbiBpbmRpciIKKworIzogY29tbWFuZC1saXN0Lmg6MTA4Cittc2dpZCAiUHVzaCBvYmplY3RzIG92ZXIgSFRUUC9EQVYgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJOZXNuZWxlcmkgSFRUUC9EQVYgw7x6ZXJpbmRlbiBiYcWfa2EgYmlyIGRlcG95YSBpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA5Cittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBmcm9tIHN0ZGluIHRvIGFuIElNQVAgZm9sZGVyIgorbXNnc3RyICJzdGRpbidkZW4gYmlyIElNQVAga2xhc8O2csO8bmUgYmlyIHlhbWEgZGVybGVtZXNpIGfDtm5kZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIk1ldmN1dCBwYWtldGxpIGJpciBhcsWfaXYgacOnaW4gcGFrZXQgaW5kZWtzIGRvc3lhc8SxIHlhcCIKKworIzogY29tbWFuZC1saXN0Lmg6MTExCittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIkJvxZ8gYmlyIEdpdCBkZXBvc3Ugb2x1xZ90dXIgdmV5YSB2YXIgb2xhbsSxIHllbmlkZW4gYmHFn2xhdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTEyCittc2dpZCAiSW5zdGFudGx5IGJyb3dzZSB5b3VyIHdvcmtpbmcgcmVwb3NpdG9yeSBpbiBnaXR3ZWIiCittc2dzdHIgImdpdHdlYidkZWtpIMOnYWzEscWfbWEgZGVwb3N1bmEgYW7EsW5kYSBnw7Z6IGF0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTMKK21zZ2lkICJBZGQgb3IgcGFyc2Ugc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBpbiBjb21taXQgbWVzc2FnZXMiCittc2dzdHIgIkfDtm5kZXJpIGlsZXRpbGVyaW5lIGTDvHplbmxpIGJpbGdpIGVrbGUgdmV5YSBheXLEscWfdMSxciIKKworIzogY29tbWFuZC1saXN0Lmg6MTE0Cittc2dpZCAiVGhlIEdpdCByZXBvc2l0b3J5IGJyb3dzZXIiCittc2dzdHIgIkdpdCBkZXBvIHRhcmF5xLFjxLFzxLEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNQorbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgIkfDtm5kZXJpIGfDvG5sw7xrbGVyaW5pIGfDtnN0ZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNgorbXNnaWQgIlNob3cgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLEsG5kZWtzIHZlIMOnYWzEscWfbWEgYcSfYWPEsW5kYWtpIGRvc3lhIGJpbGdpbGVyaW5pIGfDtnN0ZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNworbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIHJlbW90ZSByZXBvc2l0b3J5IgorbXNnc3RyICJVemFrIGJpciBkZXBvZGFraSBiYcWfdnVydWxhcsSxIGxpc3RlbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOAorbXNnaWQgIkxpc3QgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QiCittc2dzdHIgIkJpciBhxJ9hw6cgbmVzbmVzaW5pbiBpw6dlcmnEn2luaSBsaXN0ZWxlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTkKK21zZ2lkICJFeHRyYWN0cyBwYXRjaCBhbmQgYXV0aG9yc2hpcCBmcm9tIGEgc2luZ2xlIGUtbWFpbCBtZXNzYWdlIgorbXNnc3RyICJFLXBvc3RhIGlsZXRpc2luZGVuIHlhbWEgdmUgeWF6YXIgYmlsZ2lzaW5pIMOnxLFrYXJ0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjAKK21zZ2lkICJTaW1wbGUgVU5JWCBtYm94IHNwbGl0dGVyIHByb2dyYW0iCittc2dzdHIgIllhbMSxbiBVTklYIG1ib3ggYsO2bMO8Y8O8IHlhesSxbMSxbcSxIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjEKK21zZ2lkICJKb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlciIKK21zZ3N0ciAixLBraSB2ZXlhIGRhaGEgZmF6bGEgZ2VsacWfdGlybWUgZ2XDp21pxZ9pbmkgYmlybGXFn3RpciIKKworIzogY29tbWFuZC1saXN0Lmg6MTIyCittc2dpZCAiRmluZCBhcyBnb29kIGNvbW1vbiBhbmNlc3RvcnMgYXMgcG9zc2libGUgZm9yIGEgbWVyZ2UiCittc2dzdHIgIkJpcmxlxZ90aXJtZSBpw6dpbiBvbGFiaWxkacSfaW5jZSBlbiBpeWkgb3J0YWsgYXRhbGFyxLEgYnVsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjMKK21zZ2lkICJSdW4gYSB0aHJlZS13YXkgZmlsZSBtZXJnZSIKK21zZ3N0ciAiQmlyIMO8w6cgecO2bmzDvCBkb3N5YSBiaXJsZcWfdGlybWVzaSDDp2FsxLHFn3TEsXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNAorbXNnaWQgIlJ1biBhIG1lcmdlIGZvciBmaWxlcyBuZWVkaW5nIG1lcmdpbmciCittc2dzdHIgIkJpcmxlxZ90aXJpbG1lc2kgZ2VyZWtlbiBkb3N5YWxhcsSxIGJpcmxlxZ90aXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNQorbXNnaWQgIlRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCBnaXQtbWVyZ2UtaW5kZXgiCittc2dzdHIgIkJ1IHlhcmTEsW1jxLEgcHJvZ3JhbSBnaXQtbWVyZ2UtaW5kZXgga3VsbGFuxLFtxLEgacOnaW5kaXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNgorbXNnaWQgIlJ1biBtZXJnZSBjb25mbGljdCByZXNvbHV0aW9uIHRvb2xzIHRvIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIgorbXNnc3RyICLDh2FrxLHFn21hbGFyxLEgw6fDtnptZWsgacOnaW4gw6fDtnrDvG0gYXJhw6dsYXLEsW7EsSDDp2FsxLHFn3TEsXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNworbXNnaWQgIlNob3cgdGhyZWUtd2F5IG1lcmdlIHdpdGhvdXQgdG91Y2hpbmcgaW5kZXgiCittc2dzdHIgIsSwbmRla3NlIGRva3VubWFkYW4gw7zDp2zDvCBiaXJsZcWfdGlybWV5aSBnw7ZzdGVyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjgKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IG11bHRpLXBhY2staW5kZXhlcyIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCBkb8SfcnVsYSB2ZSB5YXoiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOQorbXNnaWQgIkNyZWF0ZXMgYSB0YWcgb2JqZWN0IgorbXNnc3RyICJCaXIgZXRpa2V0IG5lc25lc2kgb2x1xZ90dXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMAorbXNnaWQgIkJ1aWxkIGEgdHJlZS1vYmplY3QgZnJvbSBscy10cmVlIGZvcm1hdHRlZCB0ZXh0IgorbXNnc3RyICJscy10cmVlIGJpw6dpbWxpIG1ldGluZGVuIGJpciBhxJ9hw6cgbmVzbmVzaSB5YXAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMQorbXNnaWQgIk1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgYSBkaXJlY3RvcnksIG9yIGEgc3ltbGluayIKK21zZ3N0ciAiRG9zeWEsIGRpemluIHZleWEgc2VtYm9saWsgYmHEn2xhcsSxIHRhxZ/EsS95ZW5pZGVuIGFkbGFuZMSxciIKKworIzogY29tbWFuZC1saXN0Lmg6MTMyCittc2dpZCAiRmluZCBzeW1ib2xpYyBuYW1lcyBmb3IgZ2l2ZW4gcmV2cyIKK21zZ3N0ciAiVmVyaWxlbiByZXZpenlvbmxhciBpw6dpbiBzZW1ib2xpayBhZGxhcsSxIGJ1bCIKKworIzogY29tbWFuZC1saXN0Lmg6MTMzCittc2dpZCAiQWRkIG9yIGluc3BlY3Qgb2JqZWN0IG5vdGVzIgorbXNnc3RyICJOZXNuZSBub3RsYXLEsSBla2xlIHZleWEgaW5jZWxlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzQKK21zZ2lkICJJbXBvcnQgZnJvbSBhbmQgc3VibWl0IHRvIFBlcmZvcmNlIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAiUGVyZm9yY2UgZGVwb2xhcsSxbmRhbiBpw6dlIGFrdGFyIHZlIG9ubGFyYSBnw7ZuZGVyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzUKK21zZ2lkICJDcmVhdGUgYSBwYWNrZWQgYXJjaGl2ZSBvZiBvYmplY3RzIgorbXNnc3RyICJQYWtldGxlbm1pxZ8gYmlyIG5lc25lIGFyxZ9pdmkgb2x1xZ90dXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNgorbXNnaWQgIkZpbmQgcmVkdW5kYW50IHBhY2sgZmlsZXMiCittc2dzdHIgIkdlcmVrc2l6IHBha2V0IGRvc3lhbGFyxLFuxLEgYnVsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzcKK21zZ2lkICJQYWNrIGhlYWRzIGFuZCB0YWdzIGZvciBlZmZpY2llbnQgcmVwb3NpdG9yeSBhY2Nlc3MiCittc2dzdHIgIkV0a2lsaSBkZXBvIGVyacWfaW1pIGnDp2luIGRhbCB1w6dsYXLEsSB2ZSBldGlrZXRsZXIgcGFrZXRsZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM4Cittc2dpZCAiUm91dGluZXMgdG8gaGVscCBwYXJzaW5nIHJlbW90ZSByZXBvc2l0b3J5IGFjY2VzcyBwYXJhbWV0ZXJzIgorbXNnc3RyICJVemFrIGRlcG8gZXJpxZ9pbSBwYXJhbWV0cmVsZXJpbmkgYXlyxLHFn3TEsXJtYXlhIHlhcmTEsW1jxLEgcnV0aW5sZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOQorbXNnaWQgIkNvbXB1dGUgdW5pcXVlIElEIGZvciBhIHBhdGNoIgorbXNnc3RyICJCaXIgeWFtYSBpw6dpbiBlxZ9pIG9sbWF5YW4gbnVtYXJhIGhlc2FwbGEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MAorbXNnaWQgIlBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiVWxhxZ/EsWxhbWF5YW4gdMO8bSBuZXNuZWxlcmkgbmVzbmUgdmVyaXRhYmFuxLFuZGFuIGJ1ZGEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MQorbXNnaWQgIlJlbW92ZSBleHRyYSBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgaW4gcGFjayBmaWxlcyIKK21zZ3N0ciAiSGFsaWhhesSxcmRhIHBha2V0IGRvc3lhbGFyxLFuZGEgb2xhbiBlayBuZXNuZWxlcmkga2FsZMSxciIKKworIzogY29tbWFuZC1saXN0Lmg6MTQyCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgaW50ZWdyYXRlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoIgorbXNnc3RyICJCYcWfa2EgYmlyIGRlcG8gdmV5YSB5ZXJlbCBkYWxkYW4gZ2V0aXIgdmUgZW50ZWdyZSBldCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQzCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICLEsGxpxZ9raW4gbmVzbmVsZXJsZSBiaXJsaWt0ZSB1emFrIGJhxZ92dXJ1bGFyxLEgZGEgZ8O8bmNlbGxlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDQKK21zZ2lkICJBcHBsaWVzIGEgcXVpbHQgcGF0Y2hzZXQgb250byB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgIkdlw6dlcmxpIGRhbGEgYmlyIFwiUXVpbHRcIiB5YW1hIHNldGkgdXlndWxhIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDUKK21zZ2lkICJDb21wYXJlIHR3byBjb21taXQgcmFuZ2VzIChlLmcuIHR3byB2ZXJzaW9ucyBvZiBhIGJyYW5jaCkiCittc2dzdHIgIsSwa2kgZ8O2bmRlcmkgZXJpbWluaSBrYXLFn8SxbGHFn3TEsXIgKGJpciBkYWzEsW4gaWtpIHPDvHLDvG3DvCkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NgorbXNnaWQgIlJlYWRzIHRyZWUgaW5mb3JtYXRpb24gaW50byB0aGUgaW5kZXgiCittc2dzdHIgIkHEn2HDpyBiaWxnaXNpbmkgaW5kZWtzZSBva3VyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDcKK21zZ2lkICJSZWFwcGx5IGNvbW1pdHMgb24gdG9wIG9mIGFub3RoZXIgYmFzZSB0aXAiCittc2dzdHIgIkfDtm5kZXJpbGVyaSBiYcWfa2EgYmlyIHRlbWVsIHVjdSDDvHplcmluZSB1eWd1bGEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OAorbXNnaWQgIlJlY2VpdmUgd2hhdCBpcyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiRGVwb3lhIG5lIGl0aWxkaXlzZSBhbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ5Cittc2dpZCAiTWFuYWdlIHJlZmxvZyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiQmHFn3Z1cnUgZ8O8bmzDvMSfw7wgYmlsZ2lzaW5pIHnDtm5ldCIKKworIzogY29tbWFuZC1saXN0Lmg6MTUwCittc2dpZCAiTWFuYWdlIHNldCBvZiB0cmFja2VkIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAixLB6bGVuZW4gZGVwb2xhciBzZXRpbmkgecO2bmV0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTEKK21zZ2lkICJQYWNrIHVucGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5IgorbXNnc3RyICJCaXIgZGVwb2Rha2kgcGFrZXRsZW5tZW1pxZ8gbmVzbmVsZXJpIHBha2V0bGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MgorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIHJlZnMgdG8gcmVwbGFjZSBvYmplY3RzIgorbXNnc3RyICJOZXNuZSBkZcSfacWfdGlybWVrIGnDp2luIGJhxZ92dXJ1bGFyIG9sdcWfdHVyLCBzaWwsIGxpc3RlbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MworbXNnaWQgIkdlbmVyYXRlcyBhIHN1bW1hcnkgb2YgcGVuZGluZyBjaGFuZ2VzIgorbXNnc3RyICJCZWtsZXllbiBkZcSfacWfaWtsaWtsZXJpbiBiaXIgw7Z6ZXRpbmkgw6fEsWthcnQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NAorbXNnaWQgIlJldXNlIHJlY29yZGVkIHJlc29sdXRpb24gb2YgY29uZmxpY3RlZCBtZXJnZXMiCittc2dzdHIgIsOHYWvEscWfYW4gYmlybGXFn3Rpcm1lbGVyaW4ga2F5xLF0bMSxIMOnw7Z6w7xtbGVyaW5pIHllbi4ga3VsbGFuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTUKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAiR2XDp2VybGkgSEVBRCdpIGJlbGlydGlsZW4gZHVydW1hIHPEsWbEsXJsYSIKKworIzogY29tbWFuZC1saXN0Lmg6MTU2Cittc2dpZCAiUmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIsOHYWzEscWfbWEgYcSfYWPEsSBkb3N5YWxhcsSxbsSxIGVza2kgZHVydW11bmEgZ2V0aXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NworbXNnaWQgIlJldmVydCBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIkJhesSxIHZhciBvbGFuIGfDtm5kZXJpbGVyaSBnZXJpIGFsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTgKK21zZ2lkICJMaXN0cyBjb21taXQgb2JqZWN0cyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIkfDtm5kZXJpIG5lc25lbGVyaW5pIHRlcnMga3Jvbm9sb2ppayBzxLFyYWRhIGxpc3RlbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OQorbXNnaWQgIlBpY2sgb3V0IGFuZCBtYXNzYWdlIHBhcmFtZXRlcnMiCittc2dzdHIgIlBhcmFtZXRyZWxlcmkgYWwgdmUgw7x6ZXJpbmRlIMOnYWzEscWfIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjAKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiRG9zeWFsYXLEsSDDp2FsxLHFn21hIGHEn2FjxLFuZGFuIHZlIGluZGVrc3RlbiBrYWxkxLFyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjEKK21zZ2lkICJTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGFzIGVtYWlscyIKK21zZ3N0ciAiQmlyIHlhbWEgZGVybGVtZXNpbmkgZS1wb3N0YSBvbGFyYWsgZ8O2bmRlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTYyCittc2dpZCAiUHVzaCBvYmplY3RzIG92ZXIgR2l0IHByb3RvY29sIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiTmVzbmVsZXJpIEdpdCBwcm90b2tvbMO8IMO8emVyaW5kZW4gYmHFn2thIGJpciBkZXBveWEgaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MworbXNnaWQgIlJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdpdC1vbmx5IFNTSCBhY2Nlc3MiCittc2dzdHIgIllhbG7EsXpjYSBHaXQgU1NIIGVyacWfaW1pIGnDp2luIGvEsXPEsXRsYW5kxLFyxLFsbcSxxZ8gb3R1cnVtIGHDp21hIGthYnXEn3UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NAorbXNnaWQgIlN1bW1hcml6ZSAnZ2l0IGxvZycgb3V0cHV0IgorbXNnc3RyICInZ2l0IGxvZycgw6fEsWt0xLFzxLFuxLEgw7Z6ZXRsZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTY1Cittc2dpZCAiU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMiCittc2dzdHIgIsOHZcWfaXRsaSB0w7xyZGUgbmVzbmVsZXJpIGfDtnN0ZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NgorbXNnaWQgIlNob3cgYnJhbmNoZXMgYW5kIHRoZWlyIGNvbW1pdHMiCittc2dzdHIgIkRhbGxhcsSxIHZlIG9ubGFyxLFuIGfDtm5kZXJpbGVyaW5pIGfDtnN0ZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NworbXNnaWQgIlNob3cgcGFja2VkIGFyY2hpdmUgaW5kZXgiCittc2dzdHIgIlBha2V0bGVubWnFnyBhcsWfaXYgaW5kZWtzaW5pIGfDtnN0ZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OAorbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIlllcmVsIGJpciBkZXBvZGFraSBiYcWfdnVydWxhcsSxIGxpc3RlbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OQorbXNnaWQgIkdpdCdzIGkxOG4gc2V0dXAgY29kZSBmb3Igc2hlbGwgc2NyaXB0cyIKK21zZ3N0ciAiS2FidWsgYmV0aWtsZXJpIGnDp2luIEdpdCdpbiBpMThuIGt1cnVsdW0ga29kdSIKKworIzogY29tbWFuZC1saXN0Lmg6MTcwCittc2dpZCAiQ29tbW9uIEdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZSIKK21zZ3N0ciAiT3J0YWsgR2l0IGthYnVrIGJldGnEn2kga3VydWx1bSBrb2R1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzEKK21zZ2lkICJJbml0aWFsaXplIGFuZCBtb2RpZnkgdGhlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiQXJhbMSxa2zEsSDDp8Sxa8SxxZ/EsSBpbGtsZW5kaXIgdmUgZ8O8bmNlbGxlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzIKK21zZ2lkICJTdGFzaCB0aGUgY2hhbmdlcyBpbiBhIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGF3YXkiCittc2dzdHIgIktpcmxpIGJpciDDp2FsxLHFn21hIGRpemluaW5kZWtpIGRlxJ9pxZ9pa2xpa2xlcmkgenVsYWxhIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzMKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgc3RhZ2luZyBhcmVhIgorbXNnc3RyICJEb3N5YSBpw6dlcmnEn2luaSBoYXrEsXJsYW1hIGFsYW7EsW5hIGVrbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NAorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgIsOHYWzEscWfbWEgYcSfYWPEsSBkdXJ1bXVudSBnw7ZzdGVyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzUKK21zZ2lkICJSZW1vdmUgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSIKK21zZ3N0ciAiR2VyZWtzaXogYm/Fn2x1a2xhcsSxIGthbGTEsXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NgorbXNnaWQgIkluaXRpYWxpemUsIHVwZGF0ZSBvciBpbnNwZWN0IHN1Ym1vZHVsZXMiCittc2dzdHIgIkFsdG1vZMO8bGxlcmkgaWxrbGVuZGlyLCBnw7xuY2VsbGUgdmV5YSBpbmNlbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NworbXNnaWQgIkJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYW5kIEdpdCIKK21zZ3N0ciAiQmlyIFN1YnZlcnNpb24gdmUgR2l0IGRlcG9zdSBhcmFzxLFuZGEgaWtpIHnDtm5sw7wgacWfbGVtbGVyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzgKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMiCittc2dzdHIgIkRhbCBkZcSfacWfdGlyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzkKK21zZ2lkICJSZWFkLCBtb2RpZnkgYW5kIGRlbGV0ZSBzeW1ib2xpYyByZWZzIgorbXNnc3RyICJTZW1ib2xpayBiYcWfdnVydWxhcsSxIG9rdSwgZMO8emVubGUgdmUgc2lsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODAKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAiR1BHIGltemFsxLEgYmlyIGV0aWtldCBvbHXFn3R1ciwgc2lsLCBsaXN0ZWxlIHZleWEgZG/En3J1bGEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MQorbXNnaWQgIkNyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGEgYmxvYidzIGNvbnRlbnRzIgorbXNnc3RyICJCaXIgaWtpbGkgbmVzbmVuaW4gacOnZXJpxJ9pIGlsZSBnZcOnaWNpIGJpciBkb3N5YSBvbHXFn3R1ciIKKworIzogY29tbWFuZC1saXN0Lmg6MTgyCittc2dpZCAiVW5wYWNrIG9iamVjdHMgZnJvbSBhIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICJQYWtldGxlbm1pxZ8gYmlyIGFyxZ9pdmRlbiBuZXNuZWxlcmkgw6fEsWthciIKKworIzogY29tbWFuZC1saXN0Lmg6MTgzCittc2dpZCAiUmVnaXN0ZXIgZmlsZSBjb250ZW50cyBpbiB0aGUgd29ya2luZyB0cmVlIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiw4dhbMSxxZ9tYSBhxJ9hY8SxbmRha2kgZG9zeWEgacOnZXJpxJ9pbmkgaW5kZWtzZSBrYXlkZXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NAorbXNnaWQgIlVwZGF0ZSB0aGUgb2JqZWN0IG5hbWUgc3RvcmVkIGluIGEgcmVmIHNhZmVseSIKK21zZ3N0ciAiR8O8dmVubGljZSBiaXIgYmHFn3Z1cnVkYSBkZXBvbGFuYW4gbmVzbmUgYWTEsW7EsSBnw7xuY2VsbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NQorbXNnaWQgIlVwZGF0ZSBhdXhpbGlhcnkgaW5mbyBmaWxlIHRvIGhlbHAgZHVtYiBzZXJ2ZXJzIgorbXNnc3RyICIiCisiUHJvZ3JhbWxhbmFtYXlhbiBzdW51Y3VsYXJhIGRlc3RlayBpw6dpbiB5YXJkxLFtY8SxIHZlcmkgZG9zeWFzxLFuxLEgZ8O8bmNlbGxlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODYKK21zZ2lkICJTZW5kIGFyY2hpdmUgYmFjayB0byBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAiQXLFn2l2aSBnaXQtYXJjaGl2ZSdlIGdlcmkgZ8O2bmRlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTg3Cittc2dpZCAiU2VuZCBvYmplY3RzIHBhY2tlZCBiYWNrIHRvIGdpdC1mZXRjaC1wYWNrIgorbXNnc3RyICJOZXNuZWxlcmkgZ2l0LWZldGNoLXBhY2snZSBwYWtldGxlbm1pxZ8gb2xhcmFrIGdlcmkgZ8O2bmRlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiU2hvdyBhIEdpdCBsb2dpY2FsIHZhcmlhYmxlIgorbXNnc3RyICJCaXIgbWFudMSxa3NhbCBHaXQgZGXEn2nFn2tlbmkgZ8O2c3RlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTg5Cittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgY29tbWl0cyIKK21zZ3N0ciAiR8O2bmRlcmlsZXJpbiBHUEcgaW16YXPEsW7EsSBkZW5ldGxlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTAKK21zZ2lkICJWYWxpZGF0ZSBwYWNrZWQgR2l0IGFyY2hpdmUgZmlsZXMiCittc2dzdHIgIlBha2V0bGVubWnFnyBHaXQgYXLFn2l2IGRvc3lhbGFyxLFuxLEgZG/En3J1bGEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MQorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIHRhZ3MiCittc2dzdHIgIkV0aWtldGxlcmluIEdQRyBpbXphc8SxbsSxIGRvxJ9ydWxhIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTIKK21zZ2lkICJHaXQgd2ViIGludGVyZmFjZSAod2ViIGZyb250ZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMpIgorbXNnc3RyICJHaXQgd2ViIGFyYWJpcmltaSAoR2l0IGRlcG9sYXLEsSBpw6dpbiB3ZWIgw7ZuIHVjdSkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MworbXNnaWQgIlNob3cgbG9ncyB3aXRoIGRpZmZlcmVuY2UgZWFjaCBjb21taXQgaW50cm9kdWNlcyIKK21zZ3N0ciAiR8O8bmzDvGtsZXJpIGhlciBnw7ZuZGVyaW5pbiBzdW5kdcSfdSBkZcSfacWfaWtsaWtsZXJsZSBnw7ZzdGVyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTQKK21zZ2lkICJNYW5hZ2UgbXVsdGlwbGUgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiQmlyZGVuIMOnb2sgw6dhbMSxxZ9tYSBhxJ9hY8SxbsSxIHnDtm5ldCIKKworIzogY29tbWFuZC1saXN0Lmg6MTk1Cittc2dpZCAiQ3JlYXRlIGEgdHJlZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAiR2XDp2VybGkgaW5kZWtzdGVuIGJpciBhxJ9hw6cgbmVzbmVzaSBvbHXFn3R1ciIKKworIzogY29tbWFuZC1saXN0Lmg6MTk2Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAiw5Z6bml0ZWxpa2xlcmkgeW9sYSBnw7ZyZSB0YW7EsW1sYSIKKworIzogY29tbWFuZC1saXN0Lmg6MTk3Cittc2dpZCAiR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zIgorbXNnc3RyICJHaXQga29tdXQgc2F0xLFyxLEgYXJhYmlyaW1pIHZlIGt1cmFsbGFyxLEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OAorbXNnaWQgIkEgR2l0IGNvcmUgdHV0b3JpYWwgZm9yIGRldmVsb3BlcnMiCittc2dzdHIgIkdlbGnFn3RpcmljaWxlciBpw6dpbiBHaXQgw6dla2lyZGXEn2kgZcSfaXRtZW5pIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTkKK21zZ2lkICJHaXQgZm9yIENWUyB1c2VycyIKK21zZ3N0ciAiQ1ZTIGt1bGxhbsSxY8SxbGFyxLEgacOnaW4gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDAKK21zZ2lkICJUd2Vha2luZyBkaWZmIG91dHB1dCIKK21zZ3N0ciAiZGlmZiDDp8Sxa3TEsXPEsSBpw6dpbiBpbmNlIGF5YXJsYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMQorbXNnaWQgIkEgdXNlZnVsIG1pbmltdW0gc2V0IG9mIGNvbW1hbmRzIGZvciBFdmVyeWRheSBHaXQiCittc2dzdHIgIkfDvG5sw7xrIEdpdCBrdWxsYW7EsW3EsSBpw6dpbiB5YXJhcmzEsSBrb211dGxhciIKKworIzogY29tbWFuZC1saXN0Lmg6MjAyCittc2dpZCAiQSBHaXQgR2xvc3NhcnkiCittc2dzdHIgIkdpdCBLYXZyYW0gRGl6aW5pIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDMKK21zZ2lkICJIb29rcyB1c2VkIGJ5IEdpdCIKK21zZ3N0ciAiR2l0IHRhcmFmxLFuZGFuIGt1bGxhbsSxbGFuIGthbmNhbGFyIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDQKK21zZ2lkICJTcGVjaWZpZXMgaW50ZW50aW9uYWxseSB1bnRyYWNrZWQgZmlsZXMgdG8gaWdub3JlIgorbXNnc3RyICLDlnplbGxpa2xlIHlvayBzYXnEsWxtYXPEsSBpc3RlbmVuIGRvc3lhbGFyxLEgYmVsaXJ0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDUKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAiQWx0bW9kw7xsIMO2emVsbGlrbGVyaW5pIHRhbsSxbWxhbWEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNgorbXNnaWQgIkdpdCBuYW1lc3BhY2VzIgorbXNnc3RyICJHaXQgYWQgYWxhbmxhcsSxIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDcKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSBMYXlvdXQiCittc2dzdHIgIkdpdCBEZXBvIFllcmxlxZ9pbWkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOAorbXNnaWQgIlNwZWNpZnlpbmcgcmV2aXNpb25zIGFuZCByYW5nZXMgZm9yIEdpdCIKK21zZ3N0ciAiR2l0IGnDp2luIHJldml6eW9ubGFyxLEgdmUgZXJpbWxlcmkgYmVsaXJ0bWUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOQorbXNnaWQgIk1vdW50aW5nIG9uZSByZXBvc2l0b3J5IGluc2lkZSBhbm90aGVyIgorbXNnc3RyICJCaXIgZGVwb3l1IGJpciBiYcWfa2FzxLFuxLFuIGnDp2luZSBiYcSfbGFtYSIKKworIzogY29tbWFuZC1saXN0Lmg6MjEwCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0OiBwYXJ0IHR3byIKK21zZ3N0ciAiR2l0J2UgR2lyacWfOiBCw7Zsw7xtIDIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMQorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdCIKK21zZ3N0ciAiR2l0J2UgR2lyacWfIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTIKK21zZ2lkICJBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQiCittc2dzdHIgIsOWbmVyaWxlbiBHaXQgw6dhbMSxxZ9tYSBha8SxxZ9sYXLEsW5hIGdlbmVsIGJha8SxxZ8iCisKKyM6IGdpdC1iaXNlY3Quc2g6NTQKK21zZ2lkICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKK21zZ3N0ciAiXCJnaXQgYmlzZWN0IHN0YXJ0XCIgaWxlIGJhxZ9sYW1hbMSxc8SxbsSxeiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjYwCittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICJCdW51IHNpemluIHllcmluaXplIGJlbmltIHlhcG1hbcSxIGlzdGVyIG1pc2luaXogW1kvbl0/ICIKKworIzogZ2l0LWJpc2VjdC5zaDoxMDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIkhhdGFsxLEgcmV2aXp5b24gZ2lyZGlzaTogJGFyZyIKKworIzogZ2l0LWJpc2VjdC5zaDoxMjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRiaXNlY3RlZF9oZWFkIgorbXNnc3RyICJIYXRhbMSxIHJldml6eW9uIGdpcmRpc2k6ICRiaXNlY3RlZF9oZWFkIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAiSGF0YWzEsSByZXZpenlvbiBnaXJkaXNpOiAkcmV2IgorCisjOiBnaXQtYmlzZWN0LnNoOjEzOQorIywgc2gtZm9ybWF0Cittc2dpZCAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgeWFsbsSxemNhIGJpciBkZcSfacWfa2VuIGFsYWJpbGlyLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMDkKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJHw7xubMO8ayBkb3N5YXPEsSB2ZXJpbG1lZGkiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICIkZmlsZSB5ZW5pZGVuIG95bmF0xLFtIGnDp2luIG9rdW5hbcSxeW9yIgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMgorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiPz8gbmVkZW4gc8O2eiBlZGl5b3JzdW4/IgorCisjOiBnaXQtYmlzZWN0LnNoOjI0MQorbXNnaWQgImJpc2VjdCBydW4gZmFpbGVkOiBubyBjb21tYW5kIHByb3ZpZGVkLiIKK21zZ3N0ciAiaWtpbGkgYXJhbWEgYmHFn2FyxLFzxLF6OiBLb211dCB2ZXJpbG1lZGkuIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0NgorIywgc2gtZm9ybWF0Cittc2dpZCAicnVubmluZyAkY29tbWFuZCIKK21zZ3N0ciAiJGNvbW1hbmQgw6dhbMSxxZ90xLFyxLFsxLF5b3IiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgIiIKKyJiaXNlY3Qgw6dhbMSxxZ90xLFyxLFsYW1hZMSxOlxuIgorIsOnxLFrxLHFnyBrb2R1ICRyZXMsICckY29tbWFuZCcga29udW11bmRhbiwgPCAwIHZleWEgPj0gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJiaXNlY3QgZGFoYSBmYXpsYSDDp2FsxLHFn3TEsXLEsWxhbcSxeW9yIgorCisjOiBnaXQtYmlzZWN0LnNoOjI4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyJpa2lsaSBhcmFtYSDDp2FsxLHFn3TEsXLEsWxhbWFkxLE6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnICRyZXMgaGF0YSBrb2R1eWxhIMOnxLFrdMSxIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAiaWtpbGkgYXJhbWEgYmHFn2FyxLFsxLEiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzAwCittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICLEsGtpbGkgYXJhbWEgeWFwbcSxeW9ydXouIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICIiCisiSGF0YTogQmlybGXFn3Rpcm1lIGlsZSBhxZ9hxJ/EsWRha2kgZG9zeWFsYXJhIG9sYW4gZGXEn2nFn2lrbGlrbGVyaW4gw7x6ZXJpbmUgIgorInlhesSxbGFjYWsiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIk90b21hdGlrbGXFn3RpcmlsbWnFnyBiaXJsZcWfdGlybWUgacWfZSB5YXJhbWFkxLEuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MgorbXNnaWQgIlNob3VsZCBub3QgYmUgZG9pbmcgYW4gb2N0b3B1cy4iCittc2dzdHIgIkJpciBhaHRhcG90IGJpcmxlxZ90aXJtZXNpIHlhcMSxbG1hbWFsxLEuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiJHByZXR0eV9uYW1lIGlsZSBvbGFuIG9ydGFrIGfDtm5kZXJpIGJ1bHVuYW3EsXlvciIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiJHByZXR0eV9uYW1lIGlsZSBoZXIgxZ9leSBnw7xuY2VsIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHRvOiAkcHJldHR5X25hbWUiCittc2dzdHIgIsWedXJheWEgaWxlcmkgc2FyxLFsxLF5b3I6ICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6OTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIiRwcmV0dHlfbmFtZSBpbGUgeWFsxLFuIGJpcmxlxZ90aXJtZSBkZW5lbml5b3IiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjEwMgorbXNnaWQgIlNpbXBsZSBtZXJnZSBkaWQgbm90IHdvcmssIHRyeWluZyBhdXRvbWF0aWMgbWVyZ2UuIgorbXNnc3RyICJZYWzEsW4gYmlybGXFn3Rpcm1lIGnFn2UgeWFyYW1hZMSxLCBvdG9tYXRpayBiaXJsZcWfdGlybWUgZGVuZW5peW9yIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIyMQorbXNnaWQgIkNhbm5vdCByZW1vdmUgdGVtcG9yYXJ5IGluZGV4IChjYW4ndCBoYXBwZW4pIgorbXNnc3RyICJHZcOnaWNpIGluZGVrcyBrYWxkxLFyxLFsYW3EsXlvciAob2xhbmFrbMSxIGRlxJ9pbCkiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIiRyZWZfc3Rhc2gsICR3X2NvbW1pdCBpbGUgZ8O8bmNlbGxlbmVtaXlvciIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHB1c2gnOiAkb3B0aW9uIgorbXNnc3RyICJoYXRhOiAnc3Rhc2ggcHVzaCcgacOnaW4gYmlsaW5tZXllbiBzZcOnZW5lazogJG9wdGlvbiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAkc3Rhc2hfbXNnIgorbXNnc3RyICIkc3Rhc2hfbXNnIGluZGVrcyBkdXJ1bXUgdmUgw6dhbMSxxZ9tYSBkaXppbmkga2F5ZGVkaWxkaSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICJiaWxpbm1leWVuIHNlw6dlbmVrOiAkb3B0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiw4dvayBmYXpsYSByZXZpenlvbiBiZWxpcnRpbGRpOiAkUkVWIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiRyZWZlcmVuY2UgZ2XDp2VybGkgYmlyIGJhxZ92dXJ1IGRlxJ9pbCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIickYXJncycgenVsYSBiZW56ZXJpIGJpciBnw7ZuZGVyaSBkZcSfaWwiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiJyRhcmdzJyBiaXIgenVsYSBiYcWfdnVydXN1IGRlxJ9pbCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MTgKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiaW5kZWtzIHllbmlsZW5lbWl5b3IiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjIyCittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJCaXIgYmlybGXFn3Rpcm1lbmluIG9ydGFzxLFuZGEgenVsYSB1eWd1bGFuYW3EsXlvciIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzAKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICLEsG5kZWtzdGUgw6dha8SxxZ9tYWxhciB2YXIuIC0taW5kZXggb2xtYWRhbiBkZW5leWluLiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzIKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICLEsG5kZWtzIGHEn2FjxLEga2F5ZGVkaWxlbWVkaSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NDEKK21zZ2lkICJDb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCBlbnRyeSIKK21zZ3N0ciAixLB6bGVubWV5ZW4gZG9zeWFsYXIgenVsYWRhbiBlc2tpIGR1cnVtbGFyxLFuYSBnZXRpcmlsZW1lZGkiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjY2Cittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgIkRlxJ9pxZ90aXJpbGVuIGRvc3lhbGFyIGhhesSxcmzEsWt0YW4gw6fEsWthcsSxbGFtYXoiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICIke1JFVn0gYsSxcmFrxLFsZMSxICgkcykiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIke1JFVn06IFp1bGEgZ2lyZGlzaSBixLFyYWvEsWxhbWFkxLEiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzkyCittc2dpZCAiKFRvIHJlc3RvcmUgdGhlbSB0eXBlIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorbXNnc3RyICIoT25sYXLEsSBlc2tpIGR1cnVtdW5hIGdldGlybWVrIGnDp2luIFwiZ2l0IHN0YXNoIGFwcGx5XCIgeWF6xLFuKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMDMKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIkfDtnJlY2VsaSB5b2wgeWFsbsSxemNhIMOnYWzEscWfbWEgYcSfYWPEsW7EsW4gZW4gw7xzdCBkw7x6ZXlpbmRlbiBrdWxsYW7EsWxhYmlsaXIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjEzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJyZXBvIFVSTDogJyRyZXBvJyBtdXN0IGJlIGFic29sdXRlIG9yIGJlZ2luIHdpdGggLi98Li4vIgorbXNnc3RyICJkZXBvIFVSTCdzaTogJyRyZXBvJyBrZXNpbiBvbG1hbMSxIHZleWEgLi98Li4vIGlsZSBiYcWfbGFtYWzEsWTEsXIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjMyCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiJyRzbV9wYXRoJyBpbmRla3N0ZSBoYWxpaGF6xLFyZGEgdmFyIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiJyRzbV9wYXRoJyBpbmRla3N0ZSBoYWxpaGF6xLFyZGEgdmFyIHZlIGJpciBhbHRtb2TDvGwgZGXEn2lsIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0MgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0IgorbXNnc3RyICInJHNtX3BhdGgnIMOnxLFrxLHFnyB5YXDEsWxhbiBiaXIgZ8O2bmRlcml5ZSBpeWUgZGXEn2lsIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MworIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIickc21fcGF0aCcga29udW11bmRha2kgbWV2Y3V0IGRlcG8gaW5kZWtzZSBla2xlbml5b3IiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYSB2YWxpZCBnaXQgcmVwbyIKK21zZ3N0ciAiJyRzbV9wYXRoJyBoYWxpaGF6xLFyZGEgbWV2Y3V0IHZlIGdlw6dlcmxpIGJpciBnaXQgZGVwb3N1IGRlxJ9pbCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAiJyRzbV9uYW1lJyBpw6dpbiBiaXIgZ2l0IGRlcG9zdSB5ZXJlbGRlIMWfdSB1emFrIGtvbnVtbGFybGEgYnVsdW5kdToiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjg1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8gcmV1c2UgdGhpcyBsb2NhbCBnaXQgZGlyZWN0b3J5IGluc3RlYWQgb2YgY2xvbmluZyBhZ2FpbiBmcm9tXG4iCisiICAkcmVhbHJlcG9cbiIKKyJ1c2UgdGhlICctLWZvcmNlJyBvcHRpb24uIElmIHRoZSBsb2NhbCBnaXQgZGlyZWN0b3J5IGlzIG5vdCB0aGUgY29ycmVjdCAiCisicmVwb1xuIgorIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnICIKKyJvcHRpb24uIgorbXNnc3RyICIiCisiQnUgeWVyZWwgZ2l0IGRpemluaW5pXG4iCisiICAkcmVhbHJlcG9cbiIKKyJrb251bXVuZGFuIGJpciBrZXogZGFoYSBrbG9ubGFtYWsgeWVyaW5lIHllbmlkZW4ga3VsbGFubWFrIGlzdGl5b3JzYW7EsXpcbiIKKyItLWZvcmNlIHNlw6dlbmXEn2luaSBrdWxsYW7EsW4uIEXEn2VyIGJ1IGdpdCBkaXppbmkgZG/En3J1IGRlcG8gZGXEn2lsc2UgdmV5YSBcbiIKKyJidW51biBuZSBhbmxhbWEgZ2VsZGnEn2luZGVuIGVtaW4gZGXEn2lsc2VuaXogLS1uYW1lIHNlw6dlbmXEn2kgaWxlIGJhxZ9rYSBiaXJcbiIKKyJhZCBzZcOnaW4uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnJHNtX25hbWUnLiIKK21zZ3N0ciAiJyRzbV9uYW1lJyBhbHRtb2TDvGzDvCBpw6dpbiB5ZXJlbCBnaXQgZGl6aW5pIHllbmlkZW4gZXRraW5sZcWfdGlyaWxpeW9yLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiJyRzbV9wYXRoJyBhbHRtb2TDvGzDvCDDp8Sxa8SxxZ8geWFwxLFsYW3EsXlvciIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIickc21fcGF0aCcgYWx0bW9kw7xsw7wgZWtsZW5lbWVkaSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiJyRzbV9wYXRoJyBhbHRtb2TDvGzDvCBrYXlkxLEgeWFwxLFsYW1hZMSxIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiJyRkaXNwbGF5cGF0aCcgYWx0bW9kw7xsIHlvbHVuZGEgZ2XDp2VybGkgcmV2aXp5b24gYnVsdW5hbWFkxLEiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiJyRzbV9wYXRoJyBhbHRtb2TDvGwgeW9sdW5kYSBnZXRpcm1lIHlhcMSxbGFtYWTEsSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gZmluZCBjdXJyZW50ICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAiCisiJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorIickc21fcGF0aCcgYWx0bW9kw7xsIHlvbHVuZGEgZ2XDp2VybGkgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldml6eW9udSAiCisiYnVsdW5hbWFkxLEiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjIzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOyB0cnlpbmcgdG8gZGlyZWN0bHkgZmV0Y2ggIgorIiRzaGExOiIKK21zZ3N0ciAiIgorIickZGlzcGxheXBhdGgnIGFsdG1vZMO8bCB5b2x1bmRhIGdldGlybWUgeWFwxLFsYW1hZMSxOyAkc2hhMSBkb8SfcnVkYW4gIgorImdldGlyaWxtZXllIMOnYWzEscWfxLFsxLF5b3IiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjI5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRmV0Y2hlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJywgYnV0IGl0IGRpZCBub3QgY29udGFpbiAkc2hhMS4gIgorIkRpcmVjdCBmZXRjaGluZyBvZiB0aGF0IGNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICIiCisiJyRkaXNwbGF5cGF0aCcgYWx0bW9kw7xsIHlvbHVuZGEgZ2V0aXJtZSB0YW1hbWxhbmTEsSwgYW5jYWsgJHNoYTEgacOnZXJtaXlvci4gIgorIkJ1IGfDtm5kZXJpbmluIGRvxJ9ydWRhbiBnZXRpcmlsbWVzaSBiYcWfYXLEsXPEsXogb2xkdS4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiJyRkaXNwbGF5cGF0aCcgYWx0bW9kw7xsIHlvbHVuZGEgJyRzaGExJyDDp8Sxa8SxxZ/EsSB5YXDEsWxhbWFkxLEiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAiQWx0bW9kw7xsIHlvbHUgJyRkaXNwbGF5cGF0aCc6ICckc2hhMScgw6fEsWvEscWfxLEgeWFwdMSxIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICInJHNoYTEnLCAnJGRpc3BsYXlwYXRoJyBhbHRtb2TDvGwgeW9sdW5kYSB5ZW5pZGVuIHRlbWVsbGVuZGlyaWxlbWVkaSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAiQWx0bW9kw7xsIHlvbHUgJyRkaXNwbGF5cGF0aCc6ICckc2hhMScgacOnaW5lIHllbmlkZW4gdGVtZWxsZW5kaXJpbGRpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0NworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIickc2hhMScsICckZGlzcGxheXBhdGgnIGFsdG1vZMO8bCB5b2x1bmRhIGJpcmxlxZ90aXJpbGVtZWRpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0OAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICJBbHRtb2TDvGwgeW9sdSAnJGRpc3BsYXlwYXRoJzogJyRzaGExJyBpw6dpbmRlIGJpcmxlxZ90aXJpbGRpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY1MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICInJGRpc3BsYXlwYXRoJyBhbHRtb2TDvGwgeW9sdW5kYSAnJGNvbW1hbmQgJHNoYTEnIMOnYWzEscWfdMSxcsSxbGFtYWTEsSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICJBbHRtb2TDvGwgeW9sdSAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2ODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIickZGlzcGxheXBhdGgnIGFsdG1vZMO8bCB5b2x1bmEgw7Z6eWluZWxlbmVtZWRpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIi0tY2FjaGVkIHNlw6dlbmXEn2kgLS1maWxlcyBzZcOnZW5lxJ9pIGlsZSBiaXJsaWt0ZSBrdWxsYW7EsWxhbWF6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk0OAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICJiZWtsZW5tZWRpayBraXAgJG1vZF9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTY4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiAgVXlhcsSxOiAkZGlzcGxheV9uYW1lLCAkc2hhMV9zcmMgZ8O2bmRlcmlzaW5pIGnDp2VybWl5b3IiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiAgVXlhcsSxOiAkZGlzcGxheV9uYW1lLCAkc2hhMV9kc3QgZ8O2bmRlcmlzaW5pIGnDp2VybWl5b3IiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTc0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiAgVXlhcsSxOiAkZGlzcGxheV9uYW1lLCAkc2hhMV9zcmMgdmUgJHNoYTFfZHN0IGfDtm5kZXJpbGVyaW5pIGnDp2VybWl5b3IiCisKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNlZSBnaXQtJHtjbWR9KDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiQXlyxLFudMSxbGFyIGnDp2luOiBnaXQtJHtjbWR9KDEpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTA5Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guIgorbXNnc3RyICJLZW5kaWxpxJ9pbmRlbiB6dWxhbGFtYSB1eWd1bGFuZMSxLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICRzdGFzaF9zaGExIgorbXNnc3RyICIkc3Rhc2hfc2hhMSBkZXBvbGFuYW3EsXlvciIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNpbmcgKCRuZXdfY291bnQvJHRvdGFsKSIKK21zZ3N0ciAiWWVuaWRlbiB0ZW1lbGxlbmRpcmlsaXlvciAoJG5ld19jb3VudC8kdG90YWwpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjA3Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIktvbXV0bGFyOlxuIgorInAsIHBpY2sgPGfDtm5kZXJpPiA9IGfDtm5kZXJpeWkga3VsbGFuXG4iCisiciwgcmV3b3JkIDxnw7ZuZGVyaT4gPSBnw7ZuZGVyaXlpIGt1bGxhbiwgYW5jYWsgZ8O2bmRlcmkgaWxldGlzaW5pIGTDvHplbmxlXG4iCisiZSwgZWRpdCA8Z8O2bmRlcmk+ID0gZ8O2bmRlcml5aSBrdWxsYW4sIGFuY2FrIGRlxJ9pxZ90aXJtZSBpw6dpbiBkdXJcbiIKKyJzLCBzcXVhc2ggPGfDtm5kZXJpPiA9IGfDtm5kZXJpeWkga3VsbGFuLCBhbmNhayDDtm5jZWtpIGfDtm5kZXJpIGnDp2luZSBrYXLEscWfdMSxclxuIgorImYsIGZpeHVwIDxnw7ZuZGVyaT4gPSBcInNxdWFzaFwiIGdpYmksIGFuY2FrIGJ1IGfDtm5kZXJpbmluIGfDvG5sw7xrIGlsZXRpc2luaSAiCisiYXRcbiIKKyJ4LCBleGVjIDxnw7ZuZGVyaT4gPSBrb211dHUgKHNhdMSxcsSxbiBnZXJpIGthbGFuxLEpIGthYnVrIGt1bGxhbmFyYWsgw6dhbMSxxZ90xLFyXG4iCisiZCwgZHJvcCA8Z8O2bmRlcmk+ID0gZ8O2bmRlcml5aSBrYWxkxLFyXG4iCisibCwgbGFiZWwgPGV0aWtldD4gPSBnZcOnZXJsaSBIRUFEJ2kgYmlyIGFkIGlsZSBldGlrZXRsZVxuIgorInQsIHJlc2V0IDxldGlrZXQ+ID0gSEVBRCdpIGJpciBldGlrZXRlIHPEsWbEsXJsYVxuIgorIm0sIG1lcmdlIFstQyA8Z8O2bmRlcmk+IHwgLWMgPGfDtm5kZXJpPl0gPGV0aWtldD4gWyMgPHRlay1zYXTEsXI+XVxuIgorIi4gICAgICAgb3JpamluYWwgYmlybGXFn3Rpcm1lIGfDtm5kZXJpc2kgaWxldGlzaW5pIGt1bGxhbmFyYWsgYmlyXG4iCisiLiAgICAgICBiaXJsZcWfdGlybWUgZ8O2bmRlcmlzaSBvbHXFn3R1ciAodmV5YSB0ZWtzYXTEsXIsIGXEn2VyIGJpciBvcmlqaW5hbFxuIgorIi4gICAgICAgYmlybGXFn3Rpcm1lIGfDtm5kZXJpc2kgYmVsaXJ0aWxtZW1pxZ9zZSkuIEfDtm5kZXJpIGlsZXRpc2luaSB5ZW5pZGVuXG4iCisiLiAgICAgICB5YXptYWsgacOnaW4gLWMgPGfDtm5kZXJpPiBrdWxsYW7EsW4uXG4iCisiXG4iCisiQnUgc2F0xLFybGFyIHllbmlkZW4gc8SxcmFsYW5hYmlsaXJsZXIsIHl1a2FyxLFkYW4gYcWfYcSfxLF5YSDDp2FsxLHFn3TEsXLEsWzEsXJsYXIuXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyNzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIkfDtm5kZXJpeWkgxZ9pbWRpIMWfdSBrb211dGxhIGRlxJ9pxZ90aXJlYmlsaXJzaW5pejpcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkRlxJ9pxZ9pa2xpa2xlcmluaXpkZW4gbWVtbnVuc2FuxLF6IMWfdSBrb211dGxhIHPDvHJkw7xyw7xuOlxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Mjk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkc2hhMTogbm90IGEgY29tbWl0IHRoYXQgY2FuIGJlIHBpY2tlZCIKK21zZ3N0ciAiJHNoYTE6IHNlw6dpbGViaWxlY2VrIGJpciBnw7ZuZGVyaSBkZcSfaWwiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozMzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWl0IG5hbWU6ICRzaGExIgorbXNnc3RyICJHZcOnZXJzaXogZ8O2bmRlcmkgYWTEsTogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozNjQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIgorbXNnc3RyICJHZcOnZXJsaSBnw7ZuZGVyaW5pbiB5ZXJpbmUgZ2XDp2VjZWsgc2hhMSB5YXrEsWxhbcSxeW9yIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIsWedXJheWEgaWxlcmkgc2FyOiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAixZ51cmF5YSBpbGVyaSBzYXLEsWxhbcSxeW9yOiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG1vdmUgSEVBRCB0byAkZmlyc3RfcGFyZW50IgorbXNnc3RyICJIRUFEIMWfdXJheWEgdGHFn8SxbmFtxLF5b3I6ICRmaXJzdF9wYXJlbnQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiAkc2hhMSIKK21zZ3N0ciAiQmlyIGJpcmxlxZ90aXJtZXlpIHTEsWvEscWfdMSxcm1hIHJlZGRlZGlsaXlvcjogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCittc2dzdHIgIiRzaGExIGJpcmxlxZ90aXJtZXNpIHllbmlkZW4geWFwxLFsxLFya2VuIGhhdGEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwaWNrICRzaGExIgorbXNnc3RyICIkc2hhMSBzZcOnaWxlbWVkaSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ2NworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyR7bn06IgorbXNnc3RyICJHw7ZuZGVyaSBpbGV0aXNpICMke259OiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMke259IHdpbGwgYmUgc2tpcHBlZDoiCittc2dzdHIgIkfDtm5kZXJpIGlsZXRpc2kgIyR7bn0gYXRsYW5hY2FrOiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ4MworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXQuIgorbXNnaWRfcGx1cmFsICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdHMuIgorbXNnc3RyWzBdICJCdSAkY291bnQgZ8O2bmRlcmluaW4gYmlyIGJpcmxlxZ9pbWlkaXIuIgorbXNnc3RyWzFdICJCdSAkY291bnQgZ8O2bmRlcmluaW4gYmlyIGJpcmxlxZ9pbWlkaXIuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgJGZpeHVwX21zZyIKK21zZ3N0ciAiJGZpeHVwX21zZyB5YXrEsWxhbcSxeW9yIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk1Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cy4iCittc2dzdHIgIkJ1IDIgZ8O2bmRlcmluaW4gYmlyIGJpcmxlxZ9pbWlkaXIuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTM2IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1NzkKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1ODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAkc2hhMS4uLiAkcmVzdCIKK21zZ3N0ciAiJHNoYTEuLi4gJHJlc3QgdXlndWxhbmFtYWTEsSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhbWVuZCBjb21taXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBpY2tpbmcgJHNoYTEuLi4gJHJlc3RcbiIKKyJUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9va1xuIgorImZhaWxlZC4gSWYgdGhlIHByZS1jb21taXQgaG9vayBmYWlsZWQsIHlvdSBtYXkgbmVlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSAiCisiYmVmb3JlXG4iCisieW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIKK21zZ3N0ciAiIgorIiRzaGExLi4uICRyZXN0IGJhxZ9hcsSxeWxhIHNlw6dpbGRpa3RlbiBzb25yYSBnw7ZuZGVyaSBkZcSfacWfdGlyaWxlbWVkaS5cbiIKKyJCdSBiw7x5w7xrIG9sYXPEsWzEsWtsYSBib8WfIGJpciBnw7ZuZGVyaSBpbGV0aXNpbmRlbiB2ZXlhIHByZS1jb21taXQga2FuY2FzxLFuxLFuXG4iCisiYmHFn2FyxLFzxLF6IG9sbWFzxLFuZGFuIGtheW5ha2zEsWTEsXIuIEXEn2VyIHByZS1jb21taXQga2FuY2FzxLEgYmHFn2FyxLFzxLF6IG9sZHV5c2FcbiIKKyJnw7ZuZGVyaXlpIGTDvHplbmxleWViaWxtZXllIGJhxZ9sYW1hbsSxeiBpw6dpbiBidSBzb3J1bnUgw6fDtnptZW5peiBnZXJla2ViaWxpci4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJHNoYTFfYWJicmV2Li4uICRyZXN0IgorbXNnc3RyICLFnnVyYWRhIGR1cnVsZHU6ICRzaGExX2FiYnJldi4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICckc3F1YXNoX3N0eWxlJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICLDlm5jZXNpbmRlIGJpciBnw7ZuZGVyaSBvbG1hZGFuICckc3F1YXNoX3N0eWxlJyB5YXDEsWxhbcSxeW9yIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmc6ICRyZXN0IgorbXNnc3RyICLDh2FsxLHFn3TEsXLEsWzEsXlvcjogJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBmYWlsZWQ6ICRyZXN0IgorbXNnc3RyICLDh2FsxLHFn3TEsXJtYSBiYcWfYXLEsXPEsXo6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkzCittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgInZlIGluZGVrc2UgdmUvdmV5YSDDp2FsxLHFn21hIGHEn2FjxLFuYSBkZcSfacWfaWtsaWtsZXIgeWFwdMSxIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Njk1Cittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIlNvcnVudSDDp8O2esO8cCBzw7xyZMO8cm1layBpw6dpbiDFn3VudSDDp2FsxLHFn3TEsXLEsW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIy4gVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gc3VjY2VlZGVkOiAkcmVzdFxuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyLDh2FsxLHFn3TEsXJtYSBiYcWfYXLEsWzEsTogJHJlc3RcbiIKKyJhbmNhayBpbmRla3NlIHZlL3ZleWEgw6dhbMSxxZ9tYSBhxJ9hY8SxbmEgZGXEn2nFn2lrbGlrbGVyIGLEsXJha3TEsS5cbiIKKyJEZcSfacWfaWtsaWtsZXJpbml6aSBnw7ZuZGVyaW4gdmV5YSB6dWxhbGF5xLFuLCBhcmTEsW5kYW4gxZ91bnUgw6dhbMSxxZ90xLFyxLFuOlxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzE5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1hbmQ6ICRjb21tYW5kICRzaGExICRyZXN0IgorbXNnc3RyICJCaWxpbm1leWVuIGtvbXV0OiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcyMAorbXNnaWQgIlBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICJMw7x0ZmVuIGJ1bnUgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGt1bGxhbmFyYWsgb25hcsSxbi4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkICRoZWFkX25hbWUuIgorbXNnc3RyICIkaGVhZF9uYW1lIGJhxZ9hcsSxeWxhIHllbmlkZW4gdGVtZWxsZW5kaXJpbGRpIHZlIGfDvG5jZWxsZW5kaS4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTIKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIkNIRVJSWV9QSUNLX0hFQUQga2FsZMSxcsSxbGFtYWTEsSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlXG4iCisic3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIsOHYWzEscWfbWEgYcSfYWPEsW7EsXpkYSBoYXrEsXJsYW5txLHFnyBkZcSfacWfaWtsaWtsZXJpbml6IHZhci5cbiIKKyJFxJ9lciBidSBkZcSfacWfaWtsaWtsZXJpIGJpciDDtm5jZWtpIGfDtm5kZXJpeWUgdMSxa8SxxZ90xLFybWFrXG4iCisiaXN0ZWRpeXNlbml6IMWfdSBrb211dHUgw6dhbMSxxZ90xLFyxLFuOlxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiRcSfZXIgeWVuaSBiaXIgZ8O2bmRlcmkgacOnaW5zZSDFn3VudSDDp2FsxLHFn3TEsXLEsW46XG4iCisiXG4iCisiXHRnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSGVyIGlraSBkdXJ1bWRhIGRhIGnFn2luaXppIGJpdGlyZGlrdGVuIHNvbnJhIMWfdW51bmxhIHPDvHJkw7xyw7xuOlxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzQKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAiR8O2bmRlcml5aSBkZcSfacWfdGlybWVrIGnDp2luIHlhemFyIGtpbWxpxJ9pbmkgYnVsbWF5YSDDp2FsxLHFn8SxcmtlbiBoYXRhIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM5Cittc2dpZCAiIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyLDh2FsxLHFn21hIGHEn2FjxLFuxLF6ZGEgZ8O2bmRlcmlsbWVtacWfIGRlxJ9pxZ9pa2xpa2xlcmluaXogdmFyLiBMw7x0ZmVuIMO2bmNlIG9ubGFyxLFcbiIKKyJnw7ZuZGVyaW4gdmUgYXJkxLFuZGFuIHllbmlkZW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgw6dhbMSxxZ90xLFyxLFuLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0NCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ4Cittc2dpZCAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIkhhesSxcmxhbmFuIGRlxJ9pxZ9pa2xpa2xlciBnw7ZuZGVyaWxlbWVkaS4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk2NQorbXNnaWQgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKK21zZ3N0ciAiRMO8emVubGV5aWNpIMOnYWzEscWfdMSxcsSxbGFtYWTEsSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCittc2dzdHIgIiRzd2l0Y2hfdG8gw6fEsWvEscWfxLEgeWFwxLFsYW1hZMSxIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA3Cittc2dpZCAiTm8gSEVBRD8iCittc2dzdHIgIkhFQUQgeW9rIG11PyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJHN0YXRlX2RpciIKK21zZ3N0ciAiR2XDp2ljaSAkc3RhdGVfZGlyIG9sdcWfdHVydWxhbWFkxLEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MTEKK21zZ2lkICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAiRXRraWxlxZ9pbWxpIG9sYXJhayBpbWxlbmVtZWRpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZHMpIgorbXNnc3RyWzBdICIiCisiJHNob3J0cmV2aXNpb25zIMO2Z2VzaW5pICRzaG9ydG9udG8gw7x6ZXJpbmUgeWVuaWRlbiB0ZW1lbGxlICgkdG9kb2NvdW50IGtvbXV0KSIKK21zZ3N0clsxXSAiIgorIiRzaG9ydHJldmlzaW9ucyDDtmdlc2luaSAkc2hvcnRvbnRvIMO8emVyaW5lIHllbmlkZW4gdGVtZWxsZSAoJHRvZG9jb3VudCBrb211dCkiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NTUKK21zZ2lkICJOb3RlIHRoYXQgZW1wdHkgY29tbWl0cyBhcmUgY29tbWVudGVkIG91dCIKK21zZ3N0ciAiQm/FnyBnw7ZuZGVyaWxlcmluIHlvcnVtIG9sYXJhayB2YXJzYXnEsWxkxLHEn8SxbsSxIGtlbmFyYSB5YXrEsW4uIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTk3IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDAyCittc2dpZCAiQ291bGQgbm90IGluaXQgcmV3cml0dGVuIGNvbW1pdHMiCittc2dzdHIgIlllbmlkZW4geWF6xLFsYW4gZ8O2bmRlcmlsZXIgYmHFn2xhdMSxbGFtxLF5b3IiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDo4OSBnaXQtc2gtc2V0dXAuc2g6OTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVzYWdlOiAkZGFzaGxlc3MgJFVTQUdFIgorbXNnc3RyICJrdWxsYW7EsW06ICRkYXNobGVzcyAkVVNBR0UiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoxOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBjaGRpciB0byAkY2R1cCwgdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiRjZHVwIGtvbnVtdW5hIGNoZGlyIHlhcMSxbGFtxLF5b3IsIMOnYWzEscWfbWEgYcSfYWPEsW7EsW4gZW4gw7xzdCBkw7x6ZXlpIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjAwIGdpdC1zaC1zZXR1cC5zaDoyMDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiAkcHJvZ3JhbV9uYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICJvbnVsbWF6OiAkcHJvZ3JhbV9uYW1lIGJpciDDp2FsxLHFn21hIGHEn2FjxLEgb2xtYWRhbiBrdWxsYW7EsWxhbWF6IgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjIxCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIlllbmlkZW4gdGVtZWxsZW5kaXJpbGVtaXlvcjogSGF6xLFybGFubWFtxLHFnyBkZcSfacWfaWtsaWtsZXJpbml6IHZhci4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjQKK21zZ2lkICJDYW5ub3QgcmV3cml0ZSBicmFuY2hlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIkRhbGxhciB5ZW5pZGVuIHlhesSxbGFtxLF5b3I6IEhhesSxcmxhbm1hbcSxxZ8gZGXEn2nFn2lrbGlrbGVyaW5peiB2YXIuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI3Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiWWVuaWRlbiB0ZW1lbGxlbmRpcm1lIGlsZSDDp2VraWxlbWl5b3I6IEhhesSxcmxhbm1hbcSxxZ8gZGXEn2nFn2lrbGlrbGVyaW5peiB2YXIuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiRhY3Rpb24geWFwxLFsYW3EsXlvcjogSGF6xLFybGFubWFtxLHFnyBkZcSfacWfaWtsaWtsZXJpbml6IHZhci4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDMKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiWWVuaWRlbiB0ZW1lbGxlbmRpcm1lIHlhcMSxbGFtxLF5b3I6IMSwbmRla3Npbml6ZGUgZ8O2bmRlcmlsbWVtacWfICIKKyJkZcSfacWfaWtsaWtsZXJpbml6IHZhci4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDYKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIlllbmlkZW4gdGVtZWxsZW5kaXJtZSBpbGUgw6dla2lsZW1peW9yOiDEsG5kZWtzaW5pemRlIGfDtm5kZXJpbG1lbWnFnyAiCisiZGXEn2nFn2lrbGlrbGVyaW5peiB2YXIuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiJGFjdGlvbiB5YXDEsWxhbcSxeW9yOiDEsG5kZWtzaW5pemRlIGfDtm5kZXJpbG1lbWnFnyBkZcSfacWfaWtsaWtsZXJpbml6IHZhci4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTMKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIkVrIG9sYXJhaywgaW5kZWtzaW5pemRlIGfDtm5kZXJpbG1lbWnFnyBkZcSfacWfaWtsaWtsZXJpbml6IHZhci4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDozNzMKK21zZ2lkICJZb3UgbmVlZCB0byBydW4gdGhpcyBjb21tYW5kIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICJCdSBrb211dHUgw6dhbMSxxZ9tYSBhxJ9hY8SxbsSxbiBlbiDDvHN0IGTDvHpleWluZGVuIMOnYWzEscWfdMSxcm1hbsSxeiBnZXJla2l5b3IuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6Mzc4Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIkdpdCBkaXppbmluaW4ga2VzaW4geW9sdSBhbGfEsWxhbmFtxLF5b3IiCisKKyMuIFRSQU5TTEFUT1JTOiB5b3UgY2FuIGFkanVzdCB0aGlzIHRvIGFsaWduICJnaXQgYWRkIC1pIiBzdGF0dXMgbWVudQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJTEycyAlMTJzICVzIgorbXNnc3RyICIlMTJzICUxMnMgJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInRvdWNoZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ0b3VjaGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIHlvbGEgZG9rdW51bGR1XG4iCittc2dzdHJbMV0gIiVkIHlvbGEgZG9rdW51bGR1XG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1MworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy4iCittc2dzdHIgIiIKKyJFxJ9lciB5YW1hIHNvcnVuc3V6Y2EgdXlndWxhbsSxcnNhIGTDvHplbmxlbmVuIHBhcsOnYSBkZXJoYWwgaGF6xLFybGFtYVxuIgorImnDp2luIGltbGVuZWNla3Rpci4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1NgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3Rhc2hpbmcuIgorbXNnc3RyICIiCisiRcSfZXIgeWFtYSBzb3J1bnN1emNhIHV5Z3VsYW7EsXJzYSBkw7x6ZW5sZW5lbiBwYXLDp2EgZGVyaGFsIHp1bGFsYW1hXG4iCisiacOnaW4gaW1sZW5lY2VrdGlyLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDU5Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciB1bnN0YWdpbmcuIgorbXNnc3RyICIiCisiRcSfZXIgeWFtYSBzb3J1bnN1emNhIHV5Z3VsYW7EsXJzYSwgZMO8emVubGVuZW4gcGFyw6dhIGRlcmhhbCBoYXrEsXJsxLFrdGFuXG4iCisiw6fEsWthcsSxbG1hIGnDp2luIGltbGVuZWNla3Rpci4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzEKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgYXBwbHlpbmcuIgorbXNnc3RyICIiCisiRcSfZXIgeWFtYSBzb3J1bnN1emNhIHV5Z3VsYW7EsXJzYSBkw7x6ZW5sZW5lbiBwYXLDp2EgZGVyaGFsIHV5Z3VsYW1hXG4iCisiacOnaW4gaW1sZW5lY2VrdGlyLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc0Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBkaXNjYXJkaW5nLiIKK21zZ3N0ciAiIgorIkXEn2VyIHlhbWEgc29ydW5zdXpjYSB1eWd1bGFuxLFyc2EgZMO8emVubGVuZW4gcGFyw6dhIGRlcmhhbCDEsXNrYXJ0YXlhXG4iCisiw6fEsWthcsSxbSBpw6dpbiBpbWxlbmVjZWt0aXIuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICJwYXLDp2EgZMO8emVubGVtZSBkb3N5YXPEsSB5YXrEsW0gacOnaW4gYcOnxLFsYW1hZMSxOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJXMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisiLS0tXG4iCisiJyVzJyBzYXTEsXIga2FsZMSxcm1hayBpw6dpbiBvbmxhcsSxICcgJyBzYXTEsXIgeWFwxLFuIChiYcSfbGFtKS5cbiIKKyInJXMnIHNhdMSxciBrYWxkxLFybWFrIGnDp2luIG9ubGFyxLEgc2lsaW4uXG4iCisiJXMgaWxlIGJhxZ9sYXlhbiBzYXTEsXJsYXIga2FsZMSxcsSxbGFjYWt0xLFyLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExNDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHJlYWRpbmc6ICVzIgorbXNnc3RyICJwYXLDp2EgZMO8emVubGVtZSBkb3N5YXPEsSBva3VtYSBpw6dpbiBhw6fEsWxhbWFkxLE6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNDgKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYnUgcGFyw6dhecSxIGhhesSxcmxhXG4iCisibiAtIGJ1IHBhcsOnYXnEsSBoYXrEsXJsYW1hXG4iCisicSAtIMOnxLFrOyBidSBwYXLDp2F5xLEgdmV5YSBrYWxhbmxhcmRhbiBoZXJoYW5naSBiaXJpbmkgaGF6xLFybGFtYVxuIgorImEgLSBidSBwYXLDp2F5xLEgdmUgc29ucmFraSB0w7xtIHBhcsOnYWxhcsSxIGhhesSxcmxhXG4iCisiZCAtIGJ1IHBhcsOnYXnEsSB2ZXlhIHNvbnJha2kgcGFyw6dhbGFyZGFuIGhlcmhhbmdpIGJpcmluaSBoYXrEsXJsYW1hIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNTQKK21zZ2lkICIiCisieSAtIHN0YXNoIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFzaCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYnUgcGFyw6dhecSxIHp1bGFsYVxuIgorIm4gLSBidSBwYXLDp2F5xLEgenVsYWxhbWFcbiIKKyJxIC0gw6fEsWs7IGJ1IHBhcsOnYXnEsSB2ZXlhIGthbGFubGFyZGFuIGhlcmhhbmdpIGJpcmluaSB6dWxhbGFtYVxuIgorImEgLSBidSBwYXLDp2F5xLEgdmUgc29ucmFraSB0w7xtIHBhcsOnYWxhcsSxIHp1bGFsYVxuIgorImQgLSBidSBwYXLDp2F5xLEgdmV5YSBzb25yYWtpIHBhcsOnYWxhcmRhbiBoZXJoYW5naSBiaXJpbmkgenVsYWxhbWEiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2MAorbXNnaWQgIiIKKyJ5IC0gdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHVuc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYnUgcGFyw6dhecSxIGhhesSxcmzEsWt0YW4gw6fEsWthclxuIgorIm4gLSBidSBwYXLDp2F5xLEgaGF6xLFybMSxa3RhbiDDp8Sxa2FybWFcbiIKKyJxIC0gw6fEsWs7IGJ1IHBhcsOnYXnEsSB2ZXlhIGthbGFubGFyZGFuIGhlcmhhbmdpIGJpcmluaSBoYXrEsXJsxLFrdGFuIMOnxLFrYXJtYVxuIgorImEgLSBidSBwYXLDp2F5xLEgdmUgc29ucmFraSB0w7xtIHBhcsOnYWxhcsSxIGhhesSxcmzEsWt0YW4gw6fEsWthclxuIgorImQgLSBidSBwYXLDp2F5xLEgdmV5YSBzb25yYWtpIHBhcsOnYWxhcmRhbiBoZXJoYW5naSBiaXJpbmkgaGF6xLFybMSxa3RhbiDDp8Sxa2FybWEiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBidSBwYXLDp2F5xLEgaW5kZWtzZSB1eWd1bGFcbiIKKyJuIC0gYnUgcGFyw6dhecSxIGluZGVrc2UgdXlndWxhbWFcbiIKKyJxIC0gw6fEsWs7IGJ1IHBhcsOnYXnEsSB2ZXlhIGthbGFubGFyZGFuIGhlcmhhbmdpIGJpcmluaSB1eWd1bGFtYVxuIgorImEgLSBidSBwYXLDp2F5xLEgdmUgc29ucmFraSB0w7xtIHBhcsOnYWxhcsSxIHV5Z3VsYVxuIgorImQgLSBidSBwYXLDp2F5xLEgdmV5YSBzb25yYWtpIHBhcsOnYWxhcmRhbiBoZXJoYW5naSBiaXJpbmkgdXlndWxhbWEiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyOTAKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBidSBwYXLDp2F5xLEgw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhbiBhdFxuIgorIm4gLSBidSBwYXLDp2F5xLEgw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhbiBhdG1hXG4iCisicSAtIMOnxLFrOyBidSBwYXLDp2F5xLEgdmV5YSBrYWxhbmxhcmRhbiBoZXJoYW5naSBiaXJpbmkgYXRtYVxuIgorImEgLSBidSBwYXLDp2F5xLEgdmUgc29ucmFraSB0w7xtIHBhcsOnYWxhcsSxIGF0XG4iCisiZCAtIGJ1IHBhcsOnYXnEsSB2ZXlhIHNvbnJha2kgcGFyw6dhbGFyZGFuIGhlcmhhbmdpIGJpcmluaSBhdG1hIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzgKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGJ1IHBhcsOnYXnEsSDDp2FsxLHFn21hIGHEn2FjxLFuZGFuIHZlIGluZGVrc3RlbiBhdFxuIgorIm4gLSBidSBwYXLDp2F5xLEgw6dhbMSxxZ9tYSBhxJ9hY8SxbmRhbiB2ZSBpbmRla3N0ZW4gYXRtYVxuIgorInEgLSDDp8SxazsgYnUgcGFyw6dhecSxIHZleWEga2FsYW5sYXJkYW4gaGVyaGFuZ2kgYmlyaW5pIGF0bWFcbiIKKyJhIC0gYnUgcGFyw6dhecSxIHZlIHNvbnJha2kgdMO8bSBwYXLDp2FsYXLEsSBhdFxuIgorImQgLSBidSBwYXLDp2F5xLEgdmV5YSBzb25yYWtpIHBhcsOnYWxhcmRhbiBoZXJoYW5naSBiaXJpbmkgYXRtYSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjg0Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYnUgcGFyw6dhecSxIGluZGVrc2UgdmUgw6dhbMSxxZ9tYSBhxJ9hY8SxbmEgdXlndWxhXG4iCisibiAtIGJ1IHBhcsOnYXnEsSBpbmRla3NlIHZlIMOnYWzEscWfbWEgYcSfYWPEsW5hIHV5Z3VsYW1hXG4iCisicSAtIMOnxLFrOyBidSBwYXLDp2F5xLEgdmV5YSBrYWxhbmxhcmRhbiBoZXJoYW5naSBiaXJpbmkgdXlndWxhbWFcbiIKKyJhIC0gYnUgcGFyw6dhecSxIHZlIHNvbnJha2kgdMO8bSBwYXLDp2FsYXLEsSB1eWd1bGFcbiIKKyJkIC0gYnUgcGFyw6dhecSxIHZleWEgc29ucmFraSBwYXLDp2FsYXJkYW4gaGVyaGFuZ2kgYmlyaW5pIHV5Z3VsYW1hIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyOTYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYnUgcGFyw6dhecSxIMOnYWzEscWfbWEgYcSfYWPEsW5hIHV5Z3VsYVxuIgorIm4gLSBidSBwYXLDp2F5xLEgw6dhbMSxxZ9tYSBhxJ9hY8SxbmEgdXlndWxhbWFcbiIKKyJxIC0gw6fEsWs7IGJ1IHBhcsOnYXnEsSB2ZXlhIGthbGFubGFyZGFuIGhlcmhhbmdpIGJpcmluaSB1eWd1bGFtYVxuIgorImEgLSBidSBwYXLDp2F5xLEgdmUgc29ucmFraSB0w7xtIHBhcsOnYWxhcsSxIHV5Z3VsYVxuIgorImQgLSBidSBwYXLDp2F5xLEgdmV5YSBzb25yYWtpIHBhcsOnYWxhcmRhbiBoZXJoYW5naSBiaXJpbmkgdXlndWxhbWEiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMxMQorbXNnaWQgIiIKKyJnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0b1xuIgorIi8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXhcbiIKKyJqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmtcbiIKKyJKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVua1xuIgorImsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmtcbiIKKyJLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmtcbiIKKyJzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3NcbiIKKyJlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rXG4iCisiPyAtIHByaW50IGhlbHBcbiIKK21zZ3N0ciAiIgorImcgLSBnaWRpbGVjZWsgYmlyIHBhcsOnYSBzZcOnXG4iCisiLyAtIHZlcmlsZW4gZMO8emVubGkgaWZhZGUgaWxlIGXFn2xlxZ9lbiBiaXIgcGFyw6dhIGFyYVxuIgorImogLSBidSBwYXLDp2EgacOnaW4gc29ucmEga2FyYXIgdmVyLCBiaXIgc29ucmFraSBrYXJhciB2ZXJpbG1lbWnFnyBwYXLDp2F5xLEgZ8O2clxuIgorIkogLSBidSBwYXLDp2EgacOnaW4gc29ucmEga2FyYXIgdmVyLCBiaXIgc29ucmFraSBwYXLDp2F5xLEgZ8O2clxuIgorImsgLSBidSBwYXLDp2EgacOnaW4gc29ucmEga2FyYXIgdmVyLCBiaXIgw7ZuY2VraSBrYXJhciB2ZXJpbG1lbWnFnyBwYXLDp2F5xLEgZ8O2clxuIgorIksgLSBidSBwYXLDp2EgacOnaW4gc29ucmEga2FyYXIgdmVyLCBiaXIgw7ZuY2VraSBwYXLDp2F5xLEgZ8O2clxuIgorInMgLSBnZcOnZXJsaSBwYXLDp2F5xLEgZGFoYSB1ZmFrIHBhcsOnYWxhcmEgYsO2bFxuIgorImUgLSBnZcOnZXJsaSBwYXLDp2F5xLEgZWwgaWxlIGTDvHplbmxlXG4iCisiPyAtIHlhcmTEsW3EsSB5YXpkxLFyXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MgorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIgorbXNnc3RyICJTZcOnaWxpIHBhcsOnYWxhciBpbmRla3NlIHV5Z3VsYW5hbcSxeW9yIVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdW5tZXJnZWQ6ICVzXG4iCittc2dzdHIgImJpcmxlxZ90aXJpbG1leWVubGVyIHlvayBzYXnEsWzEsXlvcjogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJLaXAgZGXEn2nFn2ltaSDDp2FsxLHFn21hIGHEn2FjxLFuYSB1eWd1bGFuc8SxbiBtxLEgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiU2lsbWUgw6dhbMSxxZ9tYSBhxJ9hY8SxbmEgdXlndWxhbnPEsW4gbcSxIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJCdSBwYXLDp2Egw6dhbMSxxZ9tYSBhxJ9hY8SxbmEgdXlndWxhbnPEsW4gbcSxIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzAKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvXG4iCittc2dzdHIgIkdpZGlsZWNlayBiYcWfa2EgcGFyw6dhIHlva1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1ODgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXI6ICclcydcbiIKK21zZ3N0ciAiR2XDp2Vyc2l6IHNhecSxOiAnJXMnXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU5MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS5cbiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLlxuIgorbXNnc3RyWzBdICLDnHpnw7xuw7xtLCB5YWxuxLF6Y2EgJWQgcGFyw6dhIGt1bGxhbsSxbGFiaWxpci5cbiIKK21zZ3N0clsxXSAiw5x6Z8O8bsO8bSwgeWFsbsSxemNhICVkIHBhcsOnYSBrdWxsYW7EsWxhYmlsaXIuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYxOQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaFxuIgorbXNnc3RyICJBcmFuYWNhayBiYcWfa2EgcGFyw6dhIHlva1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MzYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzXG4iCittc2dzdHIgIkhhdGFsxLEgb2x1xZ90dXJ1bG11xZ8gYXJhbWEgZMO8emVubGkgaWZhZGVzaSAlczogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjQ2Cittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iCittc2dzdHIgIlZlcmlsZW4gZGl6Z2kgaWxlIGhpw6diaXIgcGFyw6dhIGXFn2xlxZ9taXlvclxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjgwCittc2dpZCAiTm8gcHJldmlvdXMgaHVua1xuIgorbXNnc3RyICLDlm5jZXNpbmRlIHBhcsOnYSB5b2tcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjY3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY4NgorbXNnaWQgIk5vIG5leHQgaHVua1xuIgorbXNnc3RyICJTb25yYXPEsW5kYSBwYXLDp2EgeW9rXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5MgorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIsOcemfDvG7DvG0sIGJ1IHBhcsOnYSBiw7Zsw7xuZW1peW9yXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmsuXG4iCittc2dpZF9wbHVyYWwgIlNwbGl0IGludG8gJWQgaHVua3MuXG4iCittc2dzdHJbMF0gIiVkIHBhcsOnYXlhIGLDtmzDvG5kw7wuXG4iCittc2dzdHJbMV0gIiVkIHBhcsOnYXlhIGLDtmzDvG5kw7wuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcwOAorbXNnaWQgIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmtcbiIKK21zZ3N0ciAiw5x6Z8O8bsO8bSwgYnUgcGFyw6dhIGTDvHplbmxlbmVtaXlvclxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGRvIG5vdCB0cmFuc2xhdGUgdGhlIGNvbW1hbmQgbmFtZXMKKyMuICdzdGF0dXMnLCAndXBkYXRlJywgJ3JldmVydCcsIGV0Yy4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc3MworbXNnaWQgIiIKKyJzdGF0dXMgICAgICAgIC0gc2hvdyBwYXRocyB3aXRoIGNoYW5nZXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzXG4iCisicmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uXG4iCisicGF0Y2ggICAgICAgICAtIHBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseVxuIgorImRpZmYgICAgICAgICAgLSB2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleFxuIgorImFkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mICIKKyJjaGFuZ2VzXG4iCittc2dzdHIgIiIKKyJzdGF0dXMgICAgICAgIC0gZGXEn2nFn2lrbGlrIGnDp2VyZW4geW9sbGFyxLEgZ8O2c3RlclxuIgorInVwZGF0ZSAgICAgICAgLSDDp2FsxLHFn21hIGHEn2FjxLEgZHVydW11bnUgaGF6xLFybGFuYW4gZGXEn2nFn2lrbGlrIHNldGluZSBla2xlXG4iCisicmV2ZXJ0ICAgICAgICAtIGhhesSxcmxhbmFuIGRlxJ9pxZ9pa2xpayBzZXRpbmkgSEVBRCBzw7xyw7xtw7xuZSBnZXJpIGFsXG4iCisicGF0Y2ggICAgICAgICAtIHBhcsOnYWxhcsSxIHNlw6cgdmUgc2XDp2ljaSBvbGFyYWsgZ8O8bmNlbGxlXG4iCisiZGlmZiAgICAgICAgICAtIEhFQUQgdmUgaW5kZWtzIGFyYXPEsW5kYWtpIGRpZmYnaSAoYXlyxLFtbGFyxLEpIGfDtnLDvG50w7xsZVxuIgorImFkZCB1bnRyYWNrZWQgLSBpemxlbm1leWVuIGRvc3lhbGFyxLFuIGnDp2VyacSfaW5pIGhhesSxcmxhbmFuIGRlxJ9pxZ9pa2xpayBzZXRpbmUgIgorImVrbGVcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzkwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5NQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgwNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgxNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNQorbXNnaWQgIm1pc3NpbmcgLS0iCittc2dzdHIgIi0tIGVrc2lrIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5rbm93biAtLXBhdGNoIG1vZGU6ICVzIgorbXNnc3RyICJiaWxpbm1leWVuIC0tcGF0Y2gga2lwaTogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcywgZXhwZWN0aW5nIC0tIgorbXNnc3RyICJnZcOnZXJzaXogZGXEn2nFn2tlbiAlcywgLS0gYmVrbGVuaXlvciIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzgKK21zZ2lkICJsb2NhbCB6b25lIGRpZmZlcnMgZnJvbSBHTVQgYnkgYSBub24tbWludXRlIGludGVydmFsXG4iCittc2dzdHIgInllcmVsIGRpbGltIEdNVCdkZW4gYmlyIGRha2lrYWRhbiBheiBiaXIgYXJhbMSxa2xhIGF5csSxbWzEsVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MQorbXNnaWQgImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIgorbXNnc3RyICJ5ZXJlbCBzYWF0IG9mc2V0aSAyNCBzYWF0ZSBlxZ9pdCB2ZXlhIGRhaGEgYsO8ecO8a1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjIyMyBnaXQtc2VuZC1lbWFpbC5wZXJsOjIyOQorbXNnaWQgInRoZSBlZGl0b3IgZXhpdGVkIHVuY2xlYW5seSwgYWJvcnRpbmcgZXZlcnl0aGluZyIKK21zZ3N0ciAiZMO8emVubGV5aWNpIGTDvHpnw7xuY2Ugw6fEsWttYWTEsSwgaGVyIMWfZXkgaXB0YWwgZWRpbGl5b3IiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzEwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvbnRhaW5zIGFuIGludGVybWVkaWF0ZSB2ZXJzaW9uIG9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iCittc2dzdHIgIiclcycgeWF6bWFrdGEgb2xkdcSfdW51eiBlLXBvc3RhbsSxbiBvcnRhIGTDvHpleSBiaXIgc8O8csO8bcO8bsO8IGnDp2VyaXlvci5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJyVzLmZpbmFsJyBjb250YWlucyB0aGUgY29tcG9zZWQgZW1haWwuXG4iCittc2dzdHIgIiclcy5maW5hbCcgeWF6xLFsYW4gZS1wb3N0YXnEsSBpw6dlcml5b3IuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDA4Cittc2dpZCAiLS1kdW1wLWFsaWFzZXMgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgb3B0aW9uc1xuIgorbXNnc3RyICItLWR1bXAtYWxpYXNlcyBkacSfZXIgc2XDp2VuZWtsZXJsZSB1eXVtc3V6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDgxIGdpdC1zZW5kLWVtYWlsLnBlcmw6NjgzCittc2dpZCAiQ2Fubm90IHJ1biBnaXQgZm9ybWF0LXBhdGNoIGZyb20gb3V0c2lkZSBhIHJlcG9zaXRvcnlcbiIKK21zZ3N0ciAiJ2dpdCBmb3JtYXQtcGF0Y2gnIGJpciBkZXBvbnVuIGTEscWfxLFuZGFuIMOnYWzEscWfdMSxcsSxbGFtxLF5b3JcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0ODQKK21zZ2lkICIiCisiYGJhdGNoLXNpemVgIGFuZCBgcmVsb2dpbmAgbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgKHZpYSBjb21tYW5kLWxpbmUgb3IgIgorImNvbmZpZ3VyYXRpb24gb3B0aW9uKVxuIgorbXNnc3RyICIiCisiJ2JhdGNoLXNpemUnIHZlICdyZWxvZ2luJyBiaXJsaWt0ZSBiZWxpcnRpbG1lbGkgKGtvbXV0IHNhdMSxcsSxIHZleWEgIgorInlhcMSxbGFuZMSxcm1hIHNlw6dlbmVrbGVyaW5kZW4pXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1zdXBwcmVzcy1jYyBmaWVsZDogJyVzJ1xuIgorbXNnc3RyICJCaWxpbm1leWVuIC0tc3VwcHJlc3MtY2MgYWxhbsSxOiAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTI4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1jb25maXJtIHNldHRpbmc6ICclcydcbiIKK21zZ3N0ciAiQmlsaW5tZXllbiAtLWNvbmZpcm0gYXlhcsSxOiAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGFsaWFzIHdpdGggcXVvdGVzIGlzIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgInV5YXLEsTogdMSxcm5hayBpw6dpbmUgYWzEsW5txLHFnyBzZW5kbWFpbCBhcm1hc8SxIGRlc3Rla2xlbm1peW9yOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgOmluY2x1ZGU6YCBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICJ1eWFyxLE6ICc6aW5jbHVkZTonIGRlc3Rla2xlbm1peW9yOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgL2ZpbGVgIG9yIGB8cGlwZWAgcmVkaXJlY3Rpb24gbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAidXlhcsSxOiAnL2ZpbGUnIHZleWEgJ3xwaXBlJyB5ZW5pZGVuIHnDtm5sZW5kaXJtZXNpIGRlc3Rla2xlbm1peW9yOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBsaW5lIGlzIG5vdCByZWNvZ25pemVkOiAlc1xuIgorbXNnc3RyICJ1eWFyxLE6IHNlbmRtYWlsIHNhdMSxcsSxIHRhbsSxbWxhbmFtYWTEsTogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NDkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgJyVzJyBleGlzdHMgYnV0IGl0IGNvdWxkIGFsc28gYmUgdGhlIHJhbmdlIG9mIGNvbW1pdHNcbiIKKyJ0byBwcm9kdWNlIHBhdGNoZXMgZm9yLiAgUGxlYXNlIGRpc2FtYmlndWF0ZSBieS4uLlxuIgorIlxuIgorIiAgICAqIFNheWluZyBcIi4vJXNcIiBpZiB5b3UgbWVhbiBhIGZpbGU7IG9yXG4iCisiICAgICogR2l2aW5nIC0tZm9ybWF0LXBhdGNoIG9wdGlvbiBpZiB5b3UgbWVhbiBhIHJhbmdlLlxuIgorbXNnc3RyICIiCisiJyVzJyBkb3N5YXPEsSBtZXZjdXQsIGFuY2FrIGF5bsSxIHphbWFuZGEgeWFtYSDDvHJldGlsZWNlayBnw7ZuZGVyaWxlcmluXG4iCisiYmlyIGVyaW1pIGRlIG9sYWJpbGlyLiBMw7x0ZmVuIMWfdW5sYXLEsSBrdWxsYW5hcmFrIGHDp8Sxa2zEsWsgZ2V0aXJpbjpcbiIKKyJcbiIKKyJcdCogQmlyIGRvc3lhIGRlbWVrIGlzdGl5b3JzYW7EsXogXCIuLyVzXCIgZGl5ZXJlayB2ZXlhXG4iCisiXHQqIEJpciBlcmltIGRlbWVrIGlzdGl5b3JzYW7EsXogLS1mb3JtYXQtcGF0Y2ggc2XDp2VuZcSfaW5pIHZlcmVyZWtcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW5kaXIgJXM6ICVzIgorbXNnc3RyICIlcyBvcGVuZGlyIHlhcMSxbGFtYWTEsTogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6Njk0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJmYXRhbDogJXM6ICVzXG4iCisid2FybmluZzogbm8gcGF0Y2hlcyB3ZXJlIHNlbnRcbiIKK21zZ3N0ciAiIgorIm9udWxtYXo6ICVzOiAlc1xuIgorInV5YXLEsTogaGnDp2JpciB5YW1hIGfDtm5kZXJpbG1lZGlcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MDUKK21zZ2lkICIiCisiXG4iCisiTm8gcGF0Y2ggZmlsZXMgc3BlY2lmaWVkIVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiSGnDp2JpciB5YW1hIGRvc3lhc8SxIGJlbGlydGlsbWVkaSFcbiIKKyJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTm8gc3ViamVjdCBsaW5lIGluICVzPyIKK21zZ3N0ciAiJXMgacOnaW5kZSBrb251IHNhdMSxcsSxIHlvayBtdT8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzI4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuIGZvciB3cml0aW5nICVzOiAlcyIKK21zZ3N0ciAiJXMgeWF6bWEgacOnaW4gYcOnxLFsYW1hZMSxOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MzkKK21zZ2lkICIiCisiTGluZXMgYmVnaW5uaW5nIGluIFwiR0lUOlwiIHdpbGwgYmUgcmVtb3ZlZC5cbiIKKyJDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50c1xuIgorImZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLlxuIgorIlxuIgorIkNsZWFyIHRoZSBib2R5IGNvbnRlbnQgaWYgeW91IGRvbid0IHdpc2ggdG8gc2VuZCBhIHN1bW1hcnkuXG4iCittc2dzdHIgIiIKKyJcIkdJVDpcIiBpbGUgYmHFn2xheWFuIHNhdMSxcmxhciBrYWxkxLFyxLFsYWNha3TEsXIuXG4iCisiWWF6ZMSxxJ/EsW7EsXogeWFtYSBpw6dpbiBnZW5lbCBiaXIgZGlmZnN0YXQgdmV5YSBpw6dlcmlrIHRhYmxvc3VcbiIKKyJla2xlbWV5aSBkw7zFn8O8bsO8bi5cbiIKKyJcbiIKKyJCaXIgw7Z6ZXQgZ8O2bmRlcm1layBpc3RlbWl5b3JzYW7EsXogZ8O2dmRlIGvEsXNtxLFuxLEgdGVtaXpsZXlpbi5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXM6ICVzIgorbXNnc3RyICIlcyBhw6fEsWxhbWFkxLE6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc4MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlcy5maW5hbDogJXMiCittc2dzdHIgIiVzLmZpbmFsIGHDp8SxbGFtYWTEsTogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODIzCittc2dpZCAiU3VtbWFyeSBlbWFpbCBpcyBlbXB0eSwgc2tpcHBpbmcgaXRcbiIKK21zZ3N0ciAiw5Z6ZXQgZS1wb3N0YXPEsSBib8WfLCBhdGxhbsSxeW9yXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCBbeS9OXSBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1c2UgPCVzPiBbeS9OXT8gIgorbXNnc3RyICI8JXM+IGt1bGxhbm1hayBpc3RlZGnEn2luaXpkZW4gZW1pbiBtaXNpbml6IFt5L05dPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTEzCittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIDhiaXQsIGJ1dCBkbyBub3QgZGVjbGFyZSBhIENvbnRlbnQtVHJhbnNmZXItIgorIkVuY29kaW5nLlxuIgorbXNnc3RyICIiCisiQcWfYcSfxLFkYWtpIGRvc3lhbGFyIDggYml0LCBhbmNhayBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIGRlc3Rla2xlbWl5b3JsYXIuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTE4Cittc2dpZCAiV2hpY2ggOGJpdCBlbmNvZGluZyBzaG91bGQgSSBkZWNsYXJlIFtVVEYtOF0/ICIKK21zZ3N0ciAiSGFuZ2kgOCBiaXQga29kbGFtYXnEsSBiZXlhbiBldG1lbGl5aW0gW1VURi04XT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkyNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuIgorIlx0JXNcbiIKKyJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgIgorIndhbnQgdG8gc2VuZC5cbiIKK21zZ3N0ciAiIgorIkfDtm5kZXJtZSByZWRkZWRpbGl5b3IsIMOnw7xua8O8XG4iCisiXHQlc1xuIgorImnDp2luZGUgJyoqKiBTVUJKRUNUIEhFUkUgKioqJyBrb251IMWfYWJsb251IHZhci4gWWluZSBkZSBnw7ZuZGVybWVrICIKKyJpc3RpeW9yc2FuxLF6IC0tZm9yY2Uga3VsbGFuxLFuLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk0NQorbXNnaWQgIlRvIHdob20gc2hvdWxkIHRoZSBlbWFpbHMgYmUgc2VudCAoaWYgYW55b25lKT8iCittc2dzdHIgIkUtcG9zdGFsYXIga2ltZSBnw7ZuZGVyaWxtZWxpIChlxJ9lciBnZXJla2xpeXNlKT8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBhbGlhcyAnJXMnIGV4cGFuZHMgdG8gaXRzZWxmXG4iCittc2dzdHIgIm9udWxtYXo6ICclcycgYXJtYXPEsSBrZW5kaXNpbmUgZ2VuacWfbGl5b3JcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NzUKK21zZ2lkICJNZXNzYWdlLUlEIHRvIGJlIHVzZWQgYXMgSW4tUmVwbHktVG8gZm9yIHRoZSBmaXJzdCBlbWFpbCAoaWYgYW55KT8gIgorbXNnc3RyICIiCisixLBsayBlLXBvc3RhIGnDp2luIE1lc3NhZ2UtSUQsIEluLVJlcGx5LVRvIG9sYXJhayBrdWxsYW7EsWxzxLFuIG3EsSAoZcSfZXIgIgorImdlcmVrbGl5c2UpPyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDMzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJlcnJvcjogdW5hYmxlIHRvIGV4dHJhY3QgYSB2YWxpZCBhZGRyZXNzIGZyb206ICVzXG4iCittc2dzdHIgImhhdGE6IMWfdXJhZGFuIGdlw6dlcmxpIGJpciBhZHJlcyDDp8Sxa2FydMSxbGFtYWTEsTogJXNcbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtxXSBbZF0gW2VdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwNDUKK21zZ2lkICJXaGF0IHRvIGRvIHdpdGggdGhpcyBhZGRyZXNzPyAoW3FddWl0fFtkXXJvcHxbZV1kaXQpOiAiCittc2dzdHIgIkJ1IGFkcmVzbGUgbmUgeWFwxLFsc8Sxbj8gKFtxXSDDp8Sxa3xbZF0gYsSxcmFrfGTDvHpbZV1ubGUpOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM2MgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJDQSBwYXRoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiQ0EgeW9sdSBcIiVzXCIgbWV2Y3V0IGRlxJ9pbCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDQ1Cittc2dpZCAiIgorIiAgICBUaGUgQ2MgbGlzdCBhYm92ZSBoYXMgYmVlbiBleHBhbmRlZCBieSBhZGRpdGlvbmFsXG4iCisiICAgIGFkZHJlc3NlcyBmb3VuZCBpbiB0aGUgcGF0Y2ggY29tbWl0IG1lc3NhZ2UuIEJ5IGRlZmF1bHRcbiIKKyIgICAgc2VuZC1lbWFpbCBwcm9tcHRzIGJlZm9yZSBzZW5kaW5nIHdoZW5ldmVyIHRoaXMgb2NjdXJzLlxuIgorIiAgICBUaGlzIGJlaGF2aW9yIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHNlbmRlbWFpbC5jb25maXJtXG4iCisiICAgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy5cbiIKKyJcbiIKKyIgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHJ1biAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJy5cbiIKKyIgICAgVG8gcmV0YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yLCBidXQgc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsXG4iCisiICAgIHJ1biAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiAgICBZdWthcsSxZGFraSBDYyBsaXN0ZXNpIHlhbWEgZ8O2bmRlcmkgaWxldGlzaW5kZSBidWx1bmFuIGFkcmVzbGVyXG4iCisiICAgIGt1bGxhbsSxbGFyYWsgZ2VuacWfbGV0aWxtacWfdGlyLiBCdSBnZXLDp2VrbGXFn3RpxJ9pbmRlIHNlbmQtZW1haWxcbiIKKyIgICAgw7ZudGFuxLFtbMSxIG9sYXJhayBpbGV0aXlpIGfDtm5kZXJtZWRlbiDDtm5jZSBzb3Jhci4gQnUgZGF2cmFuxLHFn1xuIgorIiAgICBzZW5kZW1haWwuY29uZmlybSB5YXDEsWxhbmTEsXJtYSBheWFyxLF5bGEgZGVuZXRsZW5pci5cbiIKKyJcbiIKKyIgICAgRWsgYmlsZ2kgacOnaW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcgw6dhbMSxxZ90xLFyxLFuLlxuIgorIiAgICBHZcOnZXJsaSBkYXZyYW7EscWfxLEga29ydW1haywgYW5jYWsgYnUgaWxldGl5aSBzdXN0dXJtYWsgacOnaW5cbiIKKyIgICAgJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycgw6dhbMSxxZ90xLFyxLFuLlxuIgorIlxuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldIFtuXSBbZV0gW3FdIFthXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDYwCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsPyAoW3ldZXN8W25db3xbZV1kaXR8W3FddWl0fFthXWxsKTogIgorbXNnc3RyICIiCisiQnUgZS1wb3N0YSBnw7ZuZGVyaWxzaW4gbWk/IChbeV0gZXZldHxbbl0gaGF5xLFyfGTDvHpbZV1ubGV8W3FdIMOnxLFrfFthXSB0w7xtw7wpOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ2MworbXNnaWQgIlNlbmQgdGhpcyBlbWFpbCByZXBseSByZXF1aXJlZCIKK21zZ3N0ciAiQnUgZS1wb3N0YXnEsSB5YW7EsXQgZ2VyZWt0aXJtZSBzZcOnZW5lxJ9peWxlIGfDtm5kZXIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ5MQorbXNnaWQgIlRoZSByZXF1aXJlZCBTTVRQIHNlcnZlciBpcyBub3QgcHJvcGVybHkgZGVmaW5lZC4iCittc2dzdHIgIkdlcmVrbGkgU01UUCBzdW51Y3VzdSBkw7x6Z8O8bmNlIHRhbsSxbWxhbm1hbcSxxZ8uIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1RBUlRUTFMhICVzIgorbXNnc3RyICJTdW51Y3UgU1RBUlRUTFMgZGVzdGVrbGVtaXlvciEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0MyBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU1RBUlRUTFMgZmFpbGVkISAlcyIKK21zZ3N0ciAiU1RBUlRUTFMgYmHFn2FyxLFzxLF6IG9sZHUhICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NTYKK21zZ2lkICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTTVRQIHByb3Blcmx5LiBDaGVjayBjb25maWcgYW5kIHVzZSAtLXNtdHAtZGVidWcuIgorbXNnc3RyICIiCisiU01UUCBkw7x6Z8O8bmNlIGJhxZ9sYXTEsWxhbcSxeW9yLiBZYXDEsWxhbmTEsXJtYXnEsSBkZW5ldGxleWluIHZlIC0tc210cC1kZWJ1ZyAiCisieWFwxLFuLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBzZW5kICVzXG4iCittc2dzdHIgIiVzIGfDtm5kZXJpbGVtZWRpXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEcnktU2VudCAlc1xuIgorbXNnc3RyICIlcyBnw7ZuZGVyaWxpciBnaWJpIHlhcMSxbGTEsVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VudCAlc1xuIgorbXNnc3RyICIlcyBnw7ZuZGVyaWxkaVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJEcnktT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICJTxLFuYW1hIHRhbWFtLiBHw7xubMO8ayDDp8Sxa3TEsXPEsTpcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc5Cittc2dpZCAiT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICJUYW1hbS4gR8O8bmzDvGsgw6fEsWt0xLFzxLE6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU5MQorbXNnaWQgIlJlc3VsdDogIgorbXNnc3RyICJTb251w6c6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTk0Cittc2dpZCAiUmVzdWx0OiBPS1xuIgorbXNnc3RyICJTb251w6c6IFRhbWFtXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTYxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIGZpbGUgJXMiCittc2dzdHIgIiVzIGRvc3lhc8SxIGHDp8SxbGFtxLF5b3IiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY1OSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NzkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIENjOiAlcywgJyVzJyBzYXTEsXLEsW5kYW4gZWtsZW5peW9yXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgVG86ICVzLCAnJXMnIHNhdMSxcsSxbmRhbiBla2xlbml5b3JcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobm9uLW1ib3gpIENjOiAlcywgJyVzJyBzYXTEsXLEsW5kYW4gZWtsZW5peW9yXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTc1MworIywgcGVybC1mb3JtYXQKK21zZ2lkICIoYm9keSkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIoYm9keSkgQ2M6ICVzLCAnJXMnIHNhdMSxcsSxbmRhbiBla2xlbml5b3JcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODY0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQ291bGQgbm90IGV4ZWN1dGUgJyVzJyIKK21zZ3N0ciAiKCVzKSAnJXMnIMOnYWzEscWfdMSxcsSxbGFtYWTEsSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODcxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQWRkaW5nICVzOiAlcyBmcm9tOiAnJXMnXG4iCittc2dzdHIgIiglcykgJXM6ICVzLCAnJXMnIGtvbnVtdW5kYW4gZWtsZW5peW9yXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg3NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIGZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICclcyciCittc2dzdHIgIiglcykgxZ91cmF5YSBvbGFuIHZlcmkgeW9sdSBrYXBhdMSxbGFtYWTEsTogJyVzJyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTA1Cittc2dpZCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IgorbXNnc3RyICJpbGV0aSA3IGJpdCBvbGFyYWsgZ8O2bmRlcmlsZW1peW9yIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MTMKK21zZ2lkICJpbnZhbGlkIHRyYW5zZmVyIGVuY29kaW5nIgorbXNnc3RyICJnZcOnZXJzaXogYWt0YXLEsW0ga29kbGFtYXPEsSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTU0IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjAwNiBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwMTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIiVzIGHDp8SxbGFtxLF5b3I6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlczogeWFtYSA5OTgga2FyYWt0ZXJkZW4gZGFoYSB1enVuIGJpciBzYXTEsXIgacOnZXJpeW9yIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgJXMgd2l0aCBiYWNrdXAgc3VmZml4ICclcycuXG4iCittc2dzdHIgIiVzLCB5ZWRlayBzb25layAnJXMnIGlsZSBhdGxhbsSxeW9yLlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk3OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAlcz8gW3l8Tl06ICIKK21zZ3N0ciAiJXMgw7ZnZXNpbmkgZ2Vyw6dla3RlbiBnw7ZuZGVybWVrIGlzdGl5b3IgbXVzdW51ej8gW3l8Tl06ICIKZGlmZiAtLWdpdCBhL3BvL3ZpLnBvIGIvcG8vdmkucG8KaW5kZXggZDk1NmI1OS4uNTQ1OTQ4NCAxMDA2NDQKLS0tIGEvcG8vdmkucG8KKysrIGIvcG8vdmkucG8KQEAgLTEsMTQgKzEsMTYgQEAKLSMgVmlldG5hbWVzZSB0cmFuc2xhdGlvbiBmb3IgR0lULUdVSQotIyBC4bqjbiBk4buLY2ggVGnhur9uZyBWaeG7h3QgZMOgbmggY2hvIGfDs2kgR2l0LWd1aS4KKyMgVmlldG5hbWVzZSB0cmFuc2xhdGlvbiBmb3IgR0lULUNPUkUuCisjIELhuqNuIGThu4tjaCB0aeG6v25nIFZp4buHdCBkw6BuaCBjaG8gR0lULUNPUkUuCiAjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtY29yZSBwYWNrYWdlLgotIyBGaXJzdCB0cmFuc2xhdGVkIGJ5IFRy4bqnbiBOZ+G7jWMgUXXDom4gPHZud2lsZG1hbkBnbWFpbC5jb20+LCAyMDE0LgorIyBOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5IDxwY2xvdWRzQGdtYWlsLmNvbT4sIDIwMTIuCisjIFRy4bqnbiBOZ+G7jWMgUXXDom4gPHZud2lsZG1hbkBnbWFpbC5jb20+LCAyMDEyLCAyMDEzLCAyMDE0LCAyMDE1LCAyMDE2LCAyMDE3LCAyMDE4LCAyMDE5LCAyMDIwLgorIyDEkG/DoG4gVHLhuqduIEPDtG5nIERhbmggPGNvbmdkYW5ocXhAZ21haWwuY29tPiwgMjAyMC4KICMKIG1zZ2lkICIiCiBtc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWkgMC4xOS4wXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE0LTA2LTI2IDEzOjQyKzA3MDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE0LTA2LTI3IDA3OjQ4KzA3MDBcbiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdCB2Mi4yNi4wXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMjAtMDMtMTEgMTU6MjYrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMjAtMDMtMTYgMDg6NTIrMDcwMFxuIgogIkxhc3QtVHJhbnNsYXRvcjogVHLhuqduIE5n4buNYyBRdcOibiA8dm53aWxkbWFuQGdtYWlsLmNvbT5cbiIKICJMYW5ndWFnZS1UZWFtOiBWaWV0bmFtZXNlIDx0cmFuc2xhdGlvbi10ZWFtLXZpQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKICJMYW5ndWFnZTogdmlcbiIKQEAgLTE2LDI2NzUgKzE4LDI2MTA5IEBACiAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCiAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgogIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCi0iWC1Qb2VkaXQtTGFuZ3VhZ2U6IFZpZXRuYW1lc2VcbiIKLSJYLVBvZWRpdC1Db3VudHJ5OiBWSUVUIE5BTVxuIgotIlgtUG9lZGl0LVNvdXJjZUNoYXJzZXQ6IHV0Zi04XG4iCi0iWC1Qb2VkaXQtQmFzZXBhdGg6IC4uL1xuIgorIlgtTGFuZ3VhZ2UtVGVhbS1XZWJzaXRlOiA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS92aS5odG1sPlxuIgorIlgtUG9lZGl0LVNvdXJjZUNoYXJzZXQ6IFVURi04XG4iCisiWC1Qb2VkaXQtQmFzZXBhdGg6IC4uXG4iCisiWC1HZW5lcmF0b3I6IEd0cmFuc2xhdG9yIDIuOTEuN1xuIgogCi0jOiBnaXQtZ3VpLnNoOjg1OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgotbXNnc3RyICJQaMO0bmcgY2jhu68ga2jDtG5nIGjhu6NwIGzhu4cgxJHGsOG7o2MgxJHhurdjIHThuqMgdHJvbmcgJXM6IgorIzogYWRkLWludGVyYWN0aXZlLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpPyIKK21zZ3N0ciAiSOG6oyAoJXMpPyIKIAotIzogZ2l0LWd1aS5zaDo5MTIKLW1zZ2lkICJNYWluIEZvbnQiCi1tc2dzdHIgIlBow7RuZyBjaOG7ryBjaMOtbmgiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1MjEgYWRkLWludGVyYWN0aXZlLmM6ODIyIHNlcXVlbmNlci5jOjMxMjQKKyM6IHNlcXVlbmNlci5jOjM1NjIgYnVpbHRpbi9yZWJhc2UuYzo4NzUgYnVpbHRpbi9yZWJhc2UuYzoxNjg3CisjOiBidWlsdGluL3JlYmFzZS5jOjIwODYgYnVpbHRpbi9yZWJhc2UuYzoyMTMwCittc2dpZCAiY291bGQgbm90IHJlYWQgaW5kZXgiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgYuG6o25nIG3hu6VjIGzhu6VjIgogCi0jOiBnaXQtZ3VpLnNoOjkxMwotbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgotbXNnc3RyICJQaMO0bmcgY2jhu68gY2hvIELhuqNuZyDEkWnhu4F1IGtoaeG7g24gaGF5IERpZmYiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1NzYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNjkKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjk0Cittc2dpZCAiYmluYXJ5IgorbXNnc3RyICJuaOG7iyBwaMOibiIKIAotIzogZ2l0LWd1aS5zaDo5MjggZ2l0LWd1aS5zaDo5NDIgZ2l0LWd1aS5zaDo5NTUgZ2l0LWd1aS5zaDoxMDQ1Ci0jOiBnaXQtZ3VpLnNoOjEwNjQgZ2l0LWd1aS5zaDozMTE5Ci1tc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCi1tc2dzdHIgImdpdC1ndWk6IGzhu5dpIG5naGnDqm0gdHLhu41uZyIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYzNCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI3OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMzIKK21zZ2lkICJub3RoaW5nIgorbXNnc3RyICJraMO0bmcgY8OzIGfDrCIKIAotIzogZ2l0LWd1aS5zaDo5MjkKLW1zZ2lkICJDYW5ub3QgZmluZCBnaXQgaW4gUEFUSC4iCi1tc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBnaXQgdHJvbmcgYmnhur9uIFBBVEguIgorIzogYWRkLWludGVyYWN0aXZlLmM6NjM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzE0CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMyOQorbXNnaWQgInVuY2hhbmdlZCIKK21zZ3N0ciAia2jDtG5nIHRoYXkgxJHhu5VpIgogCi0jOiBnaXQtZ3VpLnNoOjk1NgotbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgotbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY2h14buXaSBwaGnDqm4gYuG6o24gR2l0OiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY3MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY0MworbXNnaWQgIlVwZGF0ZSIKK21zZ3N0ciAiQ+G6rXAgbmjhuq10IgogCi0jOiBnaXQtZ3VpLnNoOjk4MQotIywgdGNsLWZvcm1hdAorIzogYWRkLWludGVyYWN0aXZlLmM6Njg5IGFkZC1pbnRlcmFjdGl2ZS5jOjg3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhZ2UgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSRxrBhIOKAnCVz4oCdIGzDqm4gYuG7hyBwaMOzbmciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY5NSBhZGQtaW50ZXJhY3RpdmUuYzo4ODQgc2VxdWVuY2VyLmM6MzMxNworIzogYnVpbHRpbi9yZWJhc2UuYzo4OTkKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgaW5kZXgiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInVwZGF0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ1cGRhdGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIsSRw6MgY+G6rXAgbmjhuq10ICVkIMSRxrDhu51uZyBk4bqrblxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3MTYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NzgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIm5vdGU6ICVzIGlzIHVudHJhY2tlZCBub3cuXG4iCittc2dzdHIgImNow7ogw706ICVzIGdp4budIMSRw6MgYuG7jyB0aGVvIGTDtWkuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcyMSBhcHBseS5jOjQxMTAgYnVpbHRpbi9jaGVja291dC5jOjI4MQorIzogYnVpbHRpbi9yZXNldC5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICJtYWtlX2NhY2hlX2VudHJ5IGfhurdwIGzhu5dpIMSR4buRaSB24bubaSDEkcaw4budbmcgZOG6q24g4oCcJXPigJ0iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjc1MSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY1NQorbXNnaWQgIlJldmVydCIKK21zZ3N0ciAiSG/DoG4gbmd1ecOqbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzY3Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIEhFQURee3RyZWV9IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY8O6IHBow6FwIEhFQURee3RyZWV9IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4MDUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MzEKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInJldmVydGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAicmV2ZXJ0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAixJHDoyBob8OgbiBuZ3V5w6puICVkIMSRxrDhu51uZyBk4bqrblxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4NTYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdW50cmFja2VkIGZpbGVzLlxuIgorbXNnc3RyICJLaMO0bmcgY8OzIHThuq1wIHRpbiBuw6BvIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aS5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODYwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njg5Cittc2dpZCAiQWRkIHVudHJhY2tlZCIKK21zZ3N0ciAiVGjDqm0gY8OhYyBjw6FpIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODg3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJhZGRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgImFkZGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIsSRw6MgdGjDqm0gJWQgxJHGsOG7nW5nIGThuqtuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkxNworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXMiCittc2dzdHIgImLhu48gcXVhIG5o4buvbmcgdGjhu6kgY2jGsGEgaMOyYSB0cuG7mW46ICVzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MjkgYWRkLXBhdGNoLmM6MTY3NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAiQ2jhu4kgY8OzIGPDoWMgdOG6rXAgdGluIG5o4buLIHBow6JuIGzDoCB0aGF5IMSR4buVaS5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTMxIGFkZC1wYXRjaC5jOjE2NzMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNoYW5nZXMuXG4iCittc2dzdHIgIktow7RuZyBjw7MgdGhheSDEkeG7lWkgbsOgby5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3NgorbXNnaWQgIlBhdGNoIHVwZGF0ZSIKK21zZ3N0ciAiQ+G6rXAgbmjhuq10IG1p4bq/bmcgdsOhIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5NzQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzU0Cittc2dpZCAiUmV2aWV3IGRpZmYiCittc2dzdHIgIlhlbSB4w6l0IGzhuqFpIGRpZmYiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDIKK21zZ2lkICJzaG93IHBhdGhzIHdpdGggY2hhbmdlcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIMSRxrDhu51uZyBk4bqrbiB24bubaSBjw6FjIHRoYXkgxJHhu5VpIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA0Cittc2dpZCAiYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICIiCisidGjDqm0gdHLhuqFuZyB0aMOhaSBjw6J5IGzDoG0gdmnhu4djIHbDoG8gdOG6rXAgaOG7o3AgY8OhYyB0aGF5IMSR4buVaSDEkcOjIMSRxrDhu6NjIMSRxrBhIGzDqm4gYuG7hyAiCisicGjDs25nIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA2Cittc2dpZCAicmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb24iCittc2dzdHIgIiIKKyJob8OgbiBuZ3V5w6puIGzhuqFpIHThuq1wIGjhu6NwIGPDoWMgdGhheSDEkeG7lWkgxJHDoyDEkcaw4bujYyDEkcawYSBsw6puIGLhu4cgcGjDs25nIHRy4bufIGzhuqFpIHBoacOqbiAiCisiYuG6o24gSEVBRCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwOAorbXNnaWQgInBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseSIKK21zZ3N0ciAiY2jhu41uIGPDoWMg4oCca2jDumPigJ0gdsOgIGPhuq1wIG5o4bqtdCBjw7MgdHV54buDbiBjaOG7jW4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTAKK21zZ2lkICJ2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAieGVtIGtow6FjIGJp4buHdCBnaeG7r2EgSEVBRCB2w6AgbeG7pWMgbOG7pWMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTIKK21zZ2lkICJhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiCittc2dzdHIgIiIKKyJ0aMOqbSBu4buZaSBkdW5nIGPhu6dhIGPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSB2w6BvIHThuq1wIGjhu6NwIGPDoWMgdGhheSDEkeG7lWkgxJHDoyAiCisixJHGsOG7o2MgxJHGsGEgbMOqbiBi4buHIHBow7NuZyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAyMCBhZGQtaW50ZXJhY3RpdmUuYzoxMDY5Cittc2dpZCAiUHJvbXB0IGhlbHA6IgorbXNnc3RyICJUcuG7oyBnacO6cCB24buBIG5o4bqvYzoiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMjIKK21zZ2lkICJzZWxlY3QgYSBzaW5nbGUgaXRlbSIKK21zZ3N0ciAiY2jhu41uIG3hu5l0IG3hu6VjIMSRxqFuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI0Cittc2dpZCAic2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXMiCittc2dzdHIgImNo4buNbiBt4buZdCB2w7luZyBjw6FjIG3hu6VjIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI2Cittc2dpZCAic2VsZWN0IG11bHRpcGxlIHJhbmdlcyIKK21zZ3N0ciAiY2jhu41uIG5oaeG7gXUgdsO5bmciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMjggYWRkLWludGVyYWN0aXZlLmM6MTA3MworbXNnaWQgInNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXgiCittc2dzdHIgImNo4buNbiBt4bulYyBk4buxYSB0csOqbiB0aeG7gW4gdOG7kSBkdXkgbmjhuqV0IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDMwCittc2dpZCAidW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zIgorbXNnc3RyICJi4buPIGNo4buNbiBjw6FjIG3hu6VjIMSRw6MgY2hvIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDMyCittc2dpZCAiY2hvb3NlIGFsbCBpdGVtcyIKK21zZ3N0ciAiY2jhu41uIHThuqV0IGPhuqMgY8OhYyBt4bulYyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAzNAorbXNnaWQgIihlbXB0eSkgZmluaXNoIHNlbGVjdGluZyIKK21zZ3N0ciAiKMSR4buDIHRy4buRbmcpIGhvw6BuIHThuqV0IGNo4buNbiBs4buxYSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA3MQorbXNnaWQgInNlbGVjdCBhIG51bWJlcmVkIGl0ZW0iCittc2dzdHIgInTDuXkgY2jhu41uIG3hu6VjIGLhurFuZyBz4buRIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDc1Cittc2dpZCAiKGVtcHR5KSBzZWxlY3Qgbm90aGluZyIKK21zZ3N0ciAiKMSR4buDIHRy4buRbmcpIGtow7RuZyBjaOG7jW4gZ8OsIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDgzIGJ1aWx0aW4vY2xlYW4uYzo4MjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODUxCittc2dpZCAiKioqIENvbW1hbmRzICoqKiIKK21zZ3N0ciAiKioqIEzhu4duaCAqKioiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwODQgYnVpbHRpbi9jbGVhbi5jOjgyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NDgKK21zZ2lkICJXaGF0IG5vdyIKK21zZ3N0ciAiR2nhu50gdGjDrCBzYW8iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMzYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJzdGFnZWQiCittc2dzdHIgIsSRw6MgxJHGsGEgbMOqbiBi4buHIHBow7NuZyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTEzNiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInVuc3RhZ2VkIgorbXNnc3RyICJjaMawYSDEkcawYSBsw6puIGLhu4cgcGjDs25nIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGFwcGx5LmM6NDk2NyBhcHBseS5jOjQ5NzAgYnVpbHRpbi9hbS5jOjIyNTEKKyM6IGJ1aWx0aW4vYW0uYzoyMjU0IGJ1aWx0aW4vY2xvbmUuYzoxMjMgYnVpbHRpbi9mZXRjaC5jOjE0NAorIzogYnVpbHRpbi9tZXJnZS5jOjI3NCBidWlsdGluL3B1bGwuYzoxODkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTcKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTAyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA1CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE0OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInBhdGgiCittc2dzdHIgIsSRxrDhu51uZy1k4bqrbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTE0MworbXNnaWQgImNvdWxkIG5vdCByZWZyZXNoIGluZGV4IgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIGzhuqFpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTE1NyBidWlsdGluL2NsZWFuLmM6Nzg3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJCeWUuXG4iCittc2dzdHIgIlThuqFtIGJp4buHdC5cbiIKKworIzogYWRkLXBhdGNoLmM6MzMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiVGhheSDEkeG7lWkgY2jhur8gxJHhu5kgYuG7hyBwaMOzbmcgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjM0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIljDs2Ega2jhu49pIGLhu4cgcGjDs25nIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzozNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzAKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAixJDGsGEgbMOqbiBi4buHIHBow7NuZyBraMO6YyBuw6B5IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzozNwogbXNnaWQgIiIKLSJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKLSJcbiIKLSIlcyBjbGFpbXMgaXQgaXMgdmVyc2lvbiAnJXMnLlxuIgotIlxuIgotIiVzIHJlcXVpcmVzIGF0IGxlYXN0IEdpdCAxLjUuMCBvciBsYXRlci5cbiIKLSJcbiIKLSJBc3N1bWUgJyVzJyBpcyB2ZXJzaW9uIDEuNS4wP1xuIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorInN0YWdpbmcuIgogbXNnc3RyICIiCi0iS2jDtG5nIHRo4buDIG5o4bqtbiByYSBwaGnDqm4gYuG6o24gY+G7p2EgR2l0LlxuIgotIlxuIgotIiVzIG7Ds2kgxJHDonkgbMOgIHBoacOqbiBi4bqjbiAnJXMnLlxuIgotIlxuIgotIiVzIHnDqnUgY+G6p3UgR2l0IHBoacOqbiBi4bqjbiB04burIDEuNS4wIGhheSBt4bubaSBoxqFuLlxuIgotIlxuIgotIkPhu41pICclcycgY8OzIHBoacOqbiBi4bqjbiBsw6AgMS41LjA/XG4iCisiTuG6v3UgbWnhur9uZyB2w6EgxJHGsOG7o2Mgw6FwIGThu6VuZyBz4bqhY2ggc+G6vSwga2jDumMgxJHDoyBz4butYSBz4bq9IG5nYXkgbOG6rXAgdOG7qWMgxJHGsOG7o2MgxJHDoW5oIGThuqV1ICIKKyLEkeG7gyBjaHV54buDbiBsw6puIGLhu4cgcGjDs25nLiIKIAotIzogZ2l0LWd1aS5zaDoxMjc4Ci1tc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgotbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgdGjGsCBt4bulYyBnaXQ6IgotCi0jOiBnaXQtZ3VpLnNoOjEzMTIKLW1zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgotbXNnc3RyICJLaMO0bmcgdGjhu4MgZGkgY2h1eeG7g24gxJHhur9uIMSR4buJbmggY+G7p2EgdGjGsCBt4bulYyBsw6BtIHZp4buHYzoiCi0KLSM6IGdpdC1ndWkuc2g6MTMyMAotbXNnaWQgIkNhbm5vdCB1c2UgYmFyZSByZXBvc2l0b3J5OiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIGTDuW5nIGtobyB0cuG6p246IgotCi0jOiBnaXQtZ3VpLnNoOjEzMjgKLW1zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAiS2jDtG5nIGPDsyB0aMawIG3hu6VjIGzDoG0gdmnhu4djIgotCi0jOiBnaXQtZ3VpLnNoOjE1MDAgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKLW1zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgotbXNnc3RyICJD4bqtcCBuaOG6rXQgbOG6oWkgdHLhuqFuZyB0aMOhaSB04bqtcCB0aW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MTU2MAotbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCi1tc2dzdHIgIsSQYW5nIHF1w6l0IMSRxKlhIHTDrG0gdOG6rXAgdGluIHRoYXkgxJHhu5VpLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjE2MzYKLW1zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICLEkGFuZyBn4buNaSBtw7NjIHByZXBhcmUtY29tbWl0LW1zZy4uLiIKLQotIzogZ2l0LWd1aS5zaDoxNjUzCi1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyBi4buLIGNo4buRaSB04burIGRvIG3Ds2MgcHJlcGFyZS1jb21taXQtbXNnLiIKLQotIzogZ2l0LWd1aS5zaDoxODExIGxpYi9icm93c2VyLnRjbDoyNTIKLW1zZ2lkICJSZWFkeS4iCi1tc2dzdHIgIlPhurVuIHPDoG5nLiIKLQotIzogZ2l0LWd1aS5zaDoxOTY5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKLW1zZ3N0ciAiQ2jhu4kgaGnhu4NuIHRo4buLICVzIHRyb25nIHPhu5EgJXMgdOG6rXAgdGluLiIKLQotIzogZ2l0LWd1aS5zaDoyMDk1Ci1tc2dpZCAiVW5tb2RpZmllZCIKLW1zZ3N0ciAiS2jDtG5nIHRoYXkgxJHhu5VpIGfDrCIKLQotIzogZ2l0LWd1aS5zaDoyMDk3Ci1tc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIsSQw6Mgc+G7rWEgbmjGsG5nIGNoxrBhIMSRw6FuaCBk4bqldSDEkeG7gyBjaHV54buDbiBnaWFvIgotCi0jOiBnaXQtZ3VpLnNoOjIwOTggZ2l0LWd1aS5zaDoyMTEwCi1tc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIsSQw6FuaCBk4bqldSDEkeG7gyBjaHV54buDbiBnaWFvIgotCi0jOiBnaXQtZ3VpLnNoOjIwOTkgZ2l0LWd1aS5zaDoyMTExCi1tc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIkPDoWMgcGjhuqduIMSRxrDhu6NjIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gY2h1eeG7g24gZ2lhbyIKLQotIzogZ2l0LWd1aS5zaDoyMTAwIGdpdC1ndWkuc2g6MjExMgotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgotbXNnc3RyICLEkMOjIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gY2h1eeG7g24gZ2lhbywgdGhp4bq/dSIKLQotIzogZ2l0LWd1aS5zaDoyMTAyCi1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIsSQw6MgxJHhu5VpIGtp4buDdSB04bqtcCB0aW4gbmjGsG5nIGNoxrBhIMSRxrDhu6NjIMSRw6FuaCBk4bqldSBj4bqnbiBjaHV54buDbiBnaWFvIgotCi0jOiBnaXQtZ3VpLnNoOjIxMDMgZ2l0LWd1aS5zaDoyMTA0Ci1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG9sZCB0eXBlIHN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICLEkMOjIMSR4buVaSBraeG7g3UgdOG6rXAgdGluLCBraeG7g3UgY8WpIMSRw6MgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGPhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6MjEwNQotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCi1tc2dzdHIgIsSQw6MgxJHhu5VpIGtp4buDdSB04bqtcCB0aW4sIMSRw6MgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGPhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6MjEwNgotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2Ugc3RhZ2VkLCBtb2RpZmljYXRpb24gbm90IHN0YWdlZCIKLW1zZ3N0ciAiIgotIlRoYXkgxJHhu5VpIGtp4buDdSB04bqtcCB0aW4gxJHDoyDEkcaw4bujYyDEkcOhbmggZOG6pXUgY+G6p24gY2h1eeG7g24gZ2lhbywgbmjGsG5nIGPDoWMgdGhheSDEkeG7lWkgIgotInRow6wgY2jGsGEiCi0KLSM6IGdpdC1ndWkuc2g6MjEwNwotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2Ugc3RhZ2VkLCBmaWxlIG1pc3NpbmciCi1tc2dzdHIgIiIKLSJUaGF5IMSR4buVaSBraeG7g3UgdOG6rXAgdGluIMSRw6MgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGPhuqduIGNodXnhu4NuIGdpYW8sIHThuq1wIHRpbiBi4buLIHRoaeG6v3UiCi0KLSM6IGdpdC1ndWkuc2g6MjEwOQotbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAiQ2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpLCBjaMawYSDEkcOhbmggZOG6pXUgbMOgIGPhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6MjExNAotbXNnaWQgIk1pc3NpbmciCi1tc2dzdHIgIlRoaeG6v3UiCi0KLSM6IGdpdC1ndWkuc2g6MjExNQotbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKLW1zZ3N0ciAixJDDoyDEkcOhbmggZOG6pXUgbMOgIGPhuqduIGfhu6EgYuG7jyIKLQotIzogZ2l0LWd1aS5zaDoyMTE2Ci1tc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgotbXNnc3RyICLEkMOjIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gZ+G7oSBi4buPLCBuaMawbmcgduG6q24gaGnhu4duIGRp4buHbiIKLQotIzogZ2l0LWd1aS5zaDoyMTE4IGdpdC1ndWkuc2g6MjExOSBnaXQtZ3VpLnNoOjIxMjAgZ2l0LWd1aS5zaDoyMTIxCi0jOiBnaXQtZ3VpLnNoOjIxMjIgZ2l0LWd1aS5zaDoyMTIzCi1tc2dpZCAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiIKLW1zZ3N0ciAiQ8OhYyB5w6p1IGPhuqd1IHBow6JuIGdp4bqjaSBow7JhIHRy4buZbiIKLQotIzogZ2l0LWd1aS5zaDoyMTU4Ci1tc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAixJBhbmcga2jhu59pIMSR4buZbmcgZ2l0ay4uLiB2dWkgbMOybmcgY2jhu50uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjE3MAotbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgZ2l0ayB0cm9uZyBQQVRIIgotCi0jOiBnaXQtZ3VpLnNoOjIyMjkKLW1zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IGdpdCBndWkgdHJvbmcgUEFUSCIKLQotIzogZ2l0LWd1aS5zaDoyNjQ4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDAKLW1zZ2lkICJSZXBvc2l0b3J5IgotbXNnc3RyICJLaG8iCi0KLSM6IGdpdC1ndWkuc2g6MjY0OQotbXNnaWQgIkVkaXQiCi1tc2dzdHIgIkNo4buJbmggc+G7rWEiCi0KLSM6IGdpdC1ndWkuc2g6MjY1MSBsaWIvY2hvb3NlX3Jldi50Y2w6NTY3Ci1tc2dpZCAiQnJhbmNoIgotbXNnc3RyICJOaMOhbmgiCi0KLSM6IGdpdC1ndWkuc2g6MjY1NCBsaWIvY2hvb3NlX3Jldi50Y2w6NTU0Ci1tc2dpZCAiQ29tbWl0QEBub3VuIgotbXNnc3RyICJDaHV54buDbiBnaWFvQEBub3VuIgotCi0jOiBnaXQtZ3VpLnNoOjI2NTcgbGliL21lcmdlLnRjbDoxMjMgbGliL21lcmdlLnRjbDoxNTIgbGliL21lcmdlLnRjbDoxNzAKLW1zZ2lkICJNZXJnZSIKLW1zZ3N0ciAiVHLhu5luIgotCi0jOiBnaXQtZ3VpLnNoOjI2NTggbGliL2Nob29zZV9yZXYudGNsOjU2MwotbXNnaWQgIlJlbW90ZSIKLW1zZ3N0ciAiTcOheSBjaOG7pyIKLQotIzogZ2l0LWd1aS5zaDoyNjYxCi1tc2dpZCAiVG9vbHMiCi1tc2dzdHIgIkPDtG5nIGPhu6UiCi0KLSM6IGdpdC1ndWkuc2g6MjY3MAotbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgotbXNnc3RyICJRdcOpdCBkw7IgdGjGsCBt4bulYyBsw6BtIHZp4buHYyIKLQotIzogZ2l0LWd1aS5zaDoyNjc2Ci1tc2dpZCAiR2l0IEJhc2giCi1tc2dzdHIgIkdpdCBCYXNoIgotCi0jOiBnaXQtZ3VpLnNoOjI2ODYKLW1zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKLW1zZ3N0ciAiRHV54buHdCBjw6FjIFThuq1wIHRpbiDhu58gbmjDoW5oIGhp4buHbiBuYXkiCi0KLSM6IGdpdC1ndWkuc2g6MjY5MAotbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCi1tc2dzdHIgIkR1eeG7h3QgY8OhYyB04bqtcCB0aW4gbmjDoW5oLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI2OTUKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgotbXNnc3RyICJIaeG7g24gdGjhu4sgdHLhu7FjIHF1YW4gbOG7i2NoIHPhu60gbmjDoW5oIGhp4buHbiBuYXkiCi0KLSM6IGdpdC1ndWkuc2g6MjY5OQotbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCi1tc2dzdHIgIkhp4buDbiB0aOG7iyB0cuG7sWMgcXVhbiBs4buLY2ggc+G7rSBt4buNaSBuaMOhbmgiCi0KLSM6IGdpdC1ndWkuc2g6MjcwNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgotbXNnc3RyICJEdXnhu4d0IHThuq1wIHRpbiBj4bunYSAlcy4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzA4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKLW1zZ3N0ciAiRHV54buHdCBs4buLY2ggc+G7rSBj4bunYSAlcyB0cuG7sWMgcXVhbiIKLQotIzogZ2l0LWd1aS5zaDoyNzEzIGxpYi9kYXRhYmFzZS50Y2w6NDAgbGliL2RhdGFiYXNlLnRjbDo2NgotbXNnaWQgIkRhdGFiYXNlIFN0YXRpc3RpY3MiCi1tc2dzdHIgIlRo4buRbmcga8OqIGPGoSBz4bufIGThu68gbGnhu4d1IgotCi0jOiBnaXQtZ3VpLnNoOjI3MTYgbGliL2RhdGFiYXNlLnRjbDozMwotbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgotbXNnc3RyICJOw6luIGPGoSBz4bufIGThu68gbGnhu4d1IgotCi0jOiBnaXQtZ3VpLnNoOjI3MTkKLW1zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCi1tc2dzdHIgIlRo4bqpbSB0cmEgY8ahIHPhu58gZOG7ryBsaeG7h3UiCi0KLSM6IGdpdC1ndWkuc2g6MjcyNiBnaXQtZ3VpLnNoOjI3MzAgZ2l0LWd1aS5zaDoyNzM0IGxpYi9zaG9ydGN1dC50Y2w6OAotIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCi1tc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKLW1zZ3N0ciAiVOG6oW8gbOG7kWkgdOG6r3Qg4bufIG3DoG4gaMOsbmggbuG7gW4iCi0KLSM6IGdpdC1ndWkuc2g6Mjc0MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjIwMAotbXNnaWQgIlF1aXQiCi1tc2dzdHIgIlRob8OhdCIKLQotIzogZ2l0LWd1aS5zaDoyNzUwCi1tc2dpZCAiVW5kbyIKLW1zZ3N0ciAiSOG7p3kgbOG7h25oIHbhu6thIHLhu5NpIgotCi0jOiBnaXQtZ3VpLnNoOjI3NTMKLW1zZ2lkICJSZWRvIgotbXNnc3RyICJMw6BtIGzhuqFpIgotCi0jOiBnaXQtZ3VpLnNoOjI3NTcgZ2l0LWd1aS5zaDozMzYyCi1tc2dpZCAiQ3V0IgotbXNnc3RyICJD4bqvdCIKLQotIzogZ2l0LWd1aS5zaDoyNzYwIGdpdC1ndWkuc2g6MzM2NSBnaXQtZ3VpLnNoOjM0MzkgZ2l0LWd1aS5zaDozNTI0Ci0jOiBsaWIvY29uc29sZS50Y2w6NjkKLW1zZ2lkICJDb3B5IgotbXNnc3RyICJDaMOpcCIKLQotIzogZ2l0LWd1aS5zaDoyNzYzIGdpdC1ndWkuc2g6MzM2OAotbXNnaWQgIlBhc3RlIgotbXNnc3RyICJEw6FuIgotCi0jOiBnaXQtZ3VpLnNoOjI3NjYgZ2l0LWd1aS5zaDozMzcxIGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyOAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOQotbXNnaWQgIkRlbGV0ZSIKLW1zZ3N0ciAiWMOzYSBi4buPIgotCi0jOiBnaXQtZ3VpLnNoOjI3NzAgZ2l0LWd1aS5zaDozMzc1IGdpdC1ndWkuc2g6MzUyOCBsaWIvY29uc29sZS50Y2w6NzEKLW1zZ2lkICJTZWxlY3QgQWxsIgotbXNnc3RyICJDaOG7jW4gdOG6pXQgY+G6oyIKLQotIzogZ2l0LWd1aS5zaDoyNzc5Ci1tc2dpZCAiQ3JlYXRlLi4uIgotbXNnc3RyICJU4bqhby4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzg1Ci1tc2dpZCAiQ2hlY2tvdXQuLi4iCi1tc2dzdHIgIkzhuqV5IHJhLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3OTEKLW1zZ2lkICJSZW5hbWUuLi4iCi1tc2dzdHIgIsSQ4buVaSB0w6puLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3OTYKLW1zZ2lkICJEZWxldGUuLi4iCi1tc2dzdHIgIljDs2EuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjgwMQotbXNnaWQgIlJlc2V0Li4uIgotbXNnc3RyICLEkOG6t3QgbOG6oWkuLiIKLQotIzogZ2l0LWd1aS5zaDoyODExCi1tc2dpZCAiRG9uZSIKLW1zZ3N0ciAiWG9uZyIKLQotIzogZ2l0LWd1aS5zaDoyODEzCi1tc2dpZCAiQ29tbWl0QEB2ZXJiIgotbXNnc3RyICJDaHV54buDbiBnaWFvQEB2ZXJiIgotCi0jOiBnaXQtZ3VpLnNoOjI4MjIgZ2l0LWd1aS5zaDozMzAzCi1tc2dpZCAiTmV3IENvbW1pdCIKLW1zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyBt4bubaSIKLQotIzogZ2l0LWd1aS5zaDoyODMwIGdpdC1ndWkuc2g6MzMxMAotbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgotbXNnc3RyICJUdSBi4buVIGzhuqduIGNodXnhu4NuIGdpYW8gY3Xhu5FpIgotCi0jOiBnaXQtZ3VpLnNoOjI4NDAgZ2l0LWd1aS5zaDozMjY0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTAxCi1tc2dpZCAiUmVzY2FuIgotbXNnc3RyICJRdcOpdCBs4bqhaSIKLQotIzogZ2l0LWd1aS5zaDoyODQ2Ci1tc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgotbXNnc3RyICLEkMawYSBsw6puIGLhu4cgcGjDs25nIMSR4buDIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6Mjg1MgotbXNnaWQgIlN0YWdlIENoYW5nZWQgRmlsZXMgVG8gQ29tbWl0IgotbXNnc3RyICLEkMOhbmggZOG6pXUgY8OhYyB04bqtcCB0aW4gxJHDoyB0aGF5IMSR4buVaSBj4bqnbiBjaHV54buDbiBnaWFvIgotCi0jOiBnaXQtZ3VpLnNoOjI4NTgKLW1zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgotbXNnc3RyICLEkMawYSByYSBraOG7j2kgYuG7hyBwaMOzbmcgxJHhu4Mga2jDtG5nIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6Mjg2NCBsaWIvaW5kZXgudGNsOjQ0MgotbXNnaWQgIlJldmVydCBDaGFuZ2VzIgotbXNnc3RyICJIb8OgbiBuZ3V5w6puIGPDoWMgdGhheSDEkeG7lWkiCi0KLSM6IGdpdC1ndWkuc2g6Mjg3MiBnaXQtZ3VpLnNoOjM1NzUgZ2l0LWd1aS5zaDozNjA2Ci1tc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCi1tc2dzdHIgIkhp4buHbiDDrXQgbuG7mWkgZHVuZyBoxqFuIgotCi0jOiBnaXQtZ3VpLnNoOjI4NzYgZ2l0LWd1aS5zaDozNTc5IGdpdC1ndWkuc2g6MzYxMAotbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgotbXNnc3RyICJIaeG7h24gY2hpIHRp4bq/dCBoxqFuIgotCi0jOiBnaXQtZ3VpLnNoOjI4ODMgZ2l0LWd1aS5zaDozMjc3IGdpdC1ndWkuc2g6MzM4NgotbXNnaWQgIlNpZ24gT2ZmIgotbXNnc3RyICJLw70gdMOqbiIKLQotIzogZ2l0LWd1aS5zaDoyODk5Ci1tc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCi1tc2dzdHIgIlRy4buZbiBu4buZaSBi4buZLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI5MDQKLW1zZ2lkICJBYm9ydCBNZXJnZS4uLiIKLW1zZ3N0ciAiSOG7p3kgYuG7jyBow7JhIHRy4buZbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyOTE2IGdpdC1ndWkuc2g6Mjk0NAotbXNnaWQgIkFkZC4uLiIKLW1zZ3N0ciAiVGjDqm0uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjkyMAotbXNnaWQgIlB1c2guLi4iCi1tc2dzdHIgIsSQ4bqpeSBsw6puLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI5MjQKLW1zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgotbXNnc3RyICJYb8OhIG5ow6FuaC4uLiIKLQotIzogZ2l0LWd1aS5zaDoyOTM0IGdpdC1ndWkuc2g6MzU1NwotbXNnaWQgIk9wdGlvbnMuLi4iCi1tc2dzdHIgIlTDuXkgY2jhu41uLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI5NDUKLW1zZ2lkICJSZW1vdmUuLi4iCi1tc2dzdHIgIkfhu6EgYuG7jy4uLiIKLQotIzogZ2l0LWd1aS5zaDoyOTU0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTQKLW1zZ2lkICJIZWxwIgotbXNnc3RyICJUcuG7oyBnacO6cCIKLQotIzogZ2l0LWd1aS5zaDoyOTU4IGdpdC1ndWkuc2g6Mjk2MiBsaWIvYWJvdXQudGNsOjE0Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBYm91dCAlcyIKLW1zZ3N0ciAiR2nhu5tpIHRoaeG7h3UgduG7gSAlcyIKLQotIzogZ2l0LWd1aS5zaDoyOTg2Ci1tc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCi1tc2dzdHIgIsSQ4buNYyB0w6BpIGxp4buHdSB0cuG7sWMgdHV54bq/biIKLQotIzogZ2l0LWd1aS5zaDoyOTg5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MAotbXNnaWQgIlNob3cgU1NIIEtleSIKLW1zZ3N0ciAiSGnhu4duIGtob8OhIFNTSCIKLQotIzogZ2l0LWd1aS5zaDozMDA4IGdpdC1ndWkuc2g6MzE0MAotbXNnaWQgIlVzYWdlIgotbXNnc3RyICJDw6FjaCBkw7luZyIKLQotIzogZ2l0LWd1aS5zaDozMDg5IGxpYi9ibGFtZS50Y2w6NTczCi1tc2dpZCAiRXJyb3IiCi1tc2dzdHIgIkzhu5dpIgotCi0jOiBnaXQtZ3VpLnNoOjMxMjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKLW1zZ3N0ciAiIgotImzhu5dpIG5naGnDqm0gdHLhu41uZzoga2jDtG5nIHRo4buDIGzhuqV5IHRow7RuZyB0aW4gduG7gSDEkcaw4budbmcgZOG6q24gJXM6IEtow7RuZyBjw7MgdOG6rXAgdGluICIKLSJob+G6t2MgdGjGsCBt4bulYyBuaMawIHbhuq15IgotCi0jOiBnaXQtZ3VpLnNoOjMxNTMKLW1zZ2lkICJDdXJyZW50IEJyYW5jaDoiCi1tc2dzdHIgIk5ow6FuaCBoaeG7h24gaMOgbmg6IgotCi0jOiBnaXQtZ3VpLnNoOjMxNzkKLW1zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgotbXNnc3RyICLEkMOhbmggZOG6pXUgY8OhYyB0aGF5IMSR4buVaSAoU+G6vSBjaHV54buDbiBnaWFvKSIKLQotIzogZ2l0LWd1aS5zaDozMTk5Ci1tc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKLW1zZ3N0ciAiQuG7jyByYSBraOG7j2kgYuG7hyBwaMOzbmcgY8OhYyB0aGF5IMSR4buVaSIKLQotIzogZ2l0LWd1aS5zaDozMjcwCi1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKLW1zZ3N0ciAixJDhurd0IGzDqm4gYuG7hyBwaMOzbmcgY8OhYyB0aGF5IMSR4buVaSIKLQotIzogZ2l0LWd1aS5zaDozMjg5IGxpYi90cmFuc3BvcnQudGNsOjEzNyBsaWIvdHJhbnNwb3J0LnRjbDoyMjkKLW1zZ2lkICJQdXNoIgotbXNnc3RyICLEkOG6qXkgbMOqbiIKLQotIzogZ2l0LWd1aS5zaDozMzI0Ci1tc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIlBo4bqnbiBjaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyBraOG7n2kgdOG6oW86IgotCi0jOiBnaXQtZ3VpLnNoOjMzMjUKLW1zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiUGjhuqduIGNow7ogZ2nhuqNpIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHR1IGLhu5U6IgotCi0jOiBnaXQtZ3VpLnNoOjMzMjYKLW1zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJQaOG6p24gY2jDuiBnaeG6o2kgY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdHUgYuG7lSBs4bqnbiBraOG7n2kgdOG6oW86IgotCi0jOiBnaXQtZ3VpLnNoOjMzMjcKLW1zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiUGjhuqduIGNow7ogZ2nhuqNpIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHR1IGLhu5UgbOG6p24gaMOyYSB0cuG7mW4iCi0KLSM6IGdpdC1ndWkuc2g6MzMyOAotbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiR2hpIGNow7ogY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyBow7JhIHRy4buZbjoiCi0KLSM6IGdpdC1ndWkuc2g6MzMyOQotbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiQ2jDuiB0aMOtY2ggY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbzoiCi0KLSM6IGdpdC1ndWkuc2g6MzM3OCBnaXQtZ3VpLnNoOjM1MzIgbGliL2NvbnNvbGUudGNsOjczCi1tc2dpZCAiQ29weSBBbGwiCi1tc2dzdHIgIkNow6lwIHThuqV0IGPhuqMiCi0KLSM6IGdpdC1ndWkuc2g6MzQwMiBsaWIvYmxhbWUudGNsOjEwNQotbXNnaWQgIkZpbGU6IgotbXNnc3RyICJU4bqtcCB0aW46IgotCi0jOiBnaXQtZ3VpLnNoOjM1MjAKLW1zZ2lkICJSZWZyZXNoIgotbXNnc3RyICJMw6BtIHTGsMahaSBs4bqhaSIKLQotIzogZ2l0LWd1aS5zaDozNTQxCi1tc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICJHaeG6o20ga8OtY2ggY+G7oSBwaMO0bmciCi0KLSM6IGdpdC1ndWkuc2g6MzU0NQotbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKLW1zZ3N0ciAiVMSDbmcga8OtY2ggY+G7oSBwaMO0bmciCi0KLSM6IGdpdC1ndWkuc2g6MzU1MyBsaWIvYmxhbWUudGNsOjI5NAotbXNnaWQgIkVuY29kaW5nIgotbXNnc3RyICJC4bqjbmcgbcOjIgotCi0jOiBnaXQtZ3VpLnNoOjM1NjQKLW1zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCi1tc2dzdHIgIsOBcCBk4bulbmcgaGF5IMSR4bqjbyBuZ8aw4bujYyBj4bqjIGto4buRaSIKLQotIzogZ2l0LWd1aS5zaDozNTY5Ci1tc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgotbXNnc3RyICLDgXAgZOG7pW5nIGhheSDEkeG6o28gbmfGsOG7o2MgZMOybmciCi0KLSM6IGdpdC1ndWkuc2g6MzU4OAotbXNnaWQgIlJ1biBNZXJnZSBUb29sIgotbXNnc3RyICJDaOG6oXkgY8O0bmcgY+G7pSBow7JhIHRy4buZbiIKLQotIzogZ2l0LWd1aS5zaDozNTkzCi1tc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgotbXNnc3RyICJEw7luZyBwaGnDqm4gYuG6o24g4bufIG3DoXkgY2jhu6ciCi0KLSM6IGdpdC1ndWkuc2g6MzU5NwotbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgotbXNnc3RyICJEw7luZyBwaGnDqm4gYuG6o24g4bufIG3DoXkgbuG7mWkgYuG7mSIKLQotIzogZ2l0LWd1aS5zaDozNjAxCi1tc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCi1tc2dzdHIgIlRy4bufIGzhuqFpIGPGoSBi4bqjbiIKLQotIzogZ2l0LWd1aS5zaDozNjE5Ci1tc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiSGnhu4NuIHRo4buLIHRy4buxYyBxdWFuIGPDoWMgdGhheSDEkeG7lWkgdHJvbmcgbcO0LcSRdW4gY29uIgotCi0jOiBnaXQtZ3VpLnNoOjM2MjMKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJIaeG7g24gdGjhu4sgdHLhu7FjIHF1YW4gbOG7i2NoIHPhu60gbmjDoW5oIGhp4buHbiB04bqhaSB0cm9uZyBtw7QtxJF1biBjb24iCi0KLSM6IGdpdC1ndWkuc2g6MzYyNwotbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiSGnhu4NuIHRo4buLIHRy4buxYyBxdWFuIGzhu4tjaCBz4butIG3hu41pIG5ow6FuaCB0cm9uZyBtw7QtxJF1biBjb24iCi0KLSM6IGdpdC1ndWkuc2g6MzYzMgotbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiS2jhu59pIGNo4bqheSBnaXQgZ3VpIHRyb25nIG3DtC3EkXVuLWNvbiIKLQotIzogZ2l0LWd1aS5zaDozNjY3Ci1tc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgotbXNnc3RyICJC4buPIMSRw6FuaCBk4bqldSDEkW/huqFuIGPhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6MzY2OQotbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCi1tc2dzdHIgIkLhu48gxJHDoW5oIGThuqV1IGPDoWMgZMOybmcgY+G6p24gY2h1eeG7g24gZ2lhbyIKLQotIzogZ2l0LWd1aS5zaDozNjcxCi1tc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgotbXNnc3RyICJC4buPIMSRw6FuaCBk4bqldSBkw7JuZyBj4bqnbiBjaHV54buDbiBnaWFvIgotCi0jOiBnaXQtZ3VpLnNoOjM2NzQKLW1zZ2lkICJTdGFnZSBIdW5rIEZvciBDb21taXQiCi1tc2dzdHIgIsSQw6FuaCBk4bqldSDEkW/huqFuIGPhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6MzY3NgotbXNnaWQgIlN0YWdlIExpbmVzIEZvciBDb21taXQiCi1tc2dzdHIgIsSQw6FuaCBk4bqldSBjw6FjIGTDsm5nIGPhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6MzY3OAotbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKLW1zZ3N0ciAixJDDoW5oIGThuqV1IGTDsm5nIGPhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6MzcwMwotbXNnaWQgIkluaXRpYWxpemluZy4uLiIKLW1zZ3N0ciAixJBhbmcga2jhu59pIHThuqFvLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjM4NDYKLSMsIHRjbC1mb3JtYXQKKyM6IGFkZC1wYXRjaC5jOjQwCiBtc2dpZCAiIgotIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKLSJcbiIKLSJUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHlcbiIKLSJnb2luZyB0byBiZSBpZ25vcmVkIGJ5IGFueSBHaXQgc3VicHJvY2VzcyBydW5cbiIKLSJieSAlczpcbiIKLSJcbiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgogbXNnc3RyICIiCi0iR+G6p24gbmjGsCBjaOG6r2MgY2jhuq9uIGzDoCBtw7RpIHRyxrDhu51uZyB04buTbiB04bqhaS5cbiIKLSJcbiIKLSJDw6FjIGJp4bq/biBtw7RpIHRyxrDhu51uZyBzYXUgxJHDonkgY8OzIGzhur0gc+G6vSBi4buLIGLhu48gcXVhIGLhu59pIGPDoWMgdGnhur9uIHRyw6xuaCBjb24gZ2l0XG4iCi0iY2jhuqF5IGLhu59pICVzOlxuIgotIlxuIgorInkgLSDEkcawYSBsw6puIGLhu4cgcGjDs25nIGtow7pjIG7DoHlcbiIKKyJuIC0gxJHhu6tuZyDEkcawYSBsw6puIGLhu4cgcGjDs25nIGtow7pjIG7DoHlcbiIKKyJxIC0gdGhvw6F0OyDEkeG7q25nIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWlcbiIKKyJhIC0gxJHGsGEgbMOqbiBi4buHIHBow7NuZyBraMO6YyBuw6B5IHbDoCB04bqldCBj4bqjIGPDoWMga2jDumMgc2F1IG7DoHkgdHJvbmcgdOG6rXAgdGluXG4iCisiZCAtIMSR4burbmcgxJHGsGEgbMOqbiBi4buHIHBow7NuZyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gY8OybiBs4bqhaSB0cm9uZyB04bqtcCAiCisidGluXG4iCiAKLSM6IGdpdC1ndWkuc2g6Mzg3NQorIzogYWRkLXBhdGNoLmM6NTQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMzCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiVGhheSDEkeG7lWkgY2jhur8gxJHhu5kgdOG6oW0gY+G6pXQgxJFpIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzo1NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzQKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJYw7NhIHThuqFtIGPhuqV0IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzo1NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiVOG6oW0gY+G6pXQga2jDumMgbsOgeSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NTgKIG1zZ2lkICIiCi0iXG4iCi0iVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZVxuIgotIlRjbCBiaW5hcnkgZGlzdHJpYnV0ZWQgYnkgQ3lnd2luLiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJzdGFzaGluZy4iCiBtc2dzdHIgIiIKLSJcbiIKLSJDw6FpIG7DoHkgY8OzIG5ndXnDqm4gbmjDom4gYuG7n2kgbeG7mXQgbOG7l2kgcGjDoXQgcmEgdOG7q1xuIgotIlRjbCBwaMOibiBwaOG7kWkgYuG7n2kgQ3lnd2luLiIKKyJO4bq/dSBtaeG6v25nIHbDoSDEkcaw4bujYyDDoXAgZOG7pW5nIHPhuqFjaCBz4bq9LCBraMO6YyDEkcOjIHPhu61hIHPhur0gbmdheSBs4bqtcCB04bupYyDEkcaw4bujYyDEkcOhbmggZOG6pXUgIgorIsSR4buDIHThuqFtIGPhuqV0LiIKIAotIzogZ2l0LWd1aS5zaDozODgwCi0jLCB0Y2wtZm9ybWF0CisjOiBhZGQtcGF0Y2guYzo2MQogbXNnaWQgIiIKLSJcbiIKLSJcbiIKLSJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCi0iaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCi0idXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKLSJ+Ly5naXRjb25maWcgZmlsZS5cbiIKKyJ5IC0gc3Rhc2ggdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YXNoIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgogbXNnc3RyICIiCi0iXG4iCi0iXG4iCi0iVGhheSB0aOG6vyB04buRdCBjaG8gJXNcbiIKLSJsw6AgdGhheSB0aOG6vyBjw6FjIGdpw6EgdHLhu4sgY8OgaSDEkeG6t3QgY2hvIHVzZXIubmFtZSB2w6BcbiIKLSJ1c2VyLmVtYWlsIHRow6BuaCB04bqtcCB0aW4gY8OhIG5ow6JuIGPhu6dhIGLhuqFuXG4iCi0ifi8uZ2l0Y29uZmlnLlxuIgorInkgLSB04bqhbSBj4bqldCBraMO6YyBuw6B5XG4iCisibiAtIMSR4burbmcgdOG6oW0gY+G6pXQga2jDumMgbsOgeVxuIgorInEgLSB0aG/DoXQ7IMSR4burbmcgdOG6oW0gY+G6pXQga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWlcbiIKKyJhIC0gdOG6oW0gY+G6pXQga2jDumMgbsOgeSB2w6AgdOG6pXQgY+G6oyBjw6FjIGtow7pjIHNhdSBuw6B5IHRyb25nIHThuq1wIHRpblxuIgorImQgLSDEkeG7q25nIHThuqFtIGPhuqV0IGtow7pjIG7DoHkgY8WpbmcgbmjGsCBi4bqldCBr4buzIGPDoWkgbsOgbyBjw7JuIGzhuqFpIHRyb25nIHThuq1wIHRpblxuIgogCi0jOiBsaWIvYWJvdXQudGNsOjI2Ci1tc2dpZCAiZ2l0LWd1aSAtIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBHaXQuIgotbXNnc3RyICJnaXQtZ3VpIC0gY8O0bmcgY+G7pSDEkeG7kyBo4buNYSBkw6BuaCBjaG8gR2l0LiIKKyM6IGFkZC1wYXRjaC5jOjc3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzOAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiVGhheSDEkeG7lWkgY2jhur8gxJHhu5kgYuG7jyByYSBraOG7j2kgYuG7hyBwaMOzbmcgW3ksbixxLGEsZCVzLD9dPyAiCiAKLSM6IGxpYi9ibGFtZS50Y2w6NzMKLW1zZ2lkICJGaWxlIFZpZXdlciIKLW1zZ3N0ciAiQuG7mSBYZW0gVOG6rXAgVGluIgorIzogYWRkLXBhdGNoLmM6NzggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM5CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJYw7NhIGLhu48gdmnhu4djIGLhu48gcmEga2jhu49pIGLhu4cgcGjDs25nIFt5LG4scSxhLGQlcyw/XT8gIgogCi0jOiBsaWIvYmxhbWUudGNsOjc5Ci1tc2dpZCAiQ29tbWl0OiIKLW1zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbzoiCisjOiBhZGQtcGF0Y2guYzo3OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDAKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJC4buPIHJhIGto4buPaSBi4buHIHBow7NuZyBraMO6YyBuw6B5IFt5LG4scSxhLGQlcyw/XT8gIgogCi0jOiBsaWIvYmxhbWUudGNsOjI4MAotbXNnaWQgIkNvcHkgQ29tbWl0IgotbXNnc3RyICJDaMOpcCBs4bqnbiBjaHV54buDbiBnaWFvIgotCi0jOiBsaWIvYmxhbWUudGNsOjI4NAotbXNnaWQgIkZpbmQgVGV4dC4uLiIKLW1zZ3N0ciAiVMOsbSBjaOG7ry4uLiIKLQotIzogbGliL2JsYW1lLnRjbDoyODgKLW1zZ2lkICJHb3RvIExpbmUuLi4iCi1tc2dzdHIgIk5o4bqjeSDEkeG6v24gZMOybmcuLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6Mjk3Ci1tc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKLW1zZ3N0ciAiVGjhu7FjIGhp4buHbiBkw7IgdMOsbSBjaMOpcCB0b8OgbiBi4buZIgotCi0jOiBsaWIvYmxhbWUudGNsOjMwMQotbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgotbXNnc3RyICJIaeG7g24gdGjhu4sgbuG7mWkgZHVuZyBj4bunYSBs4buLY2ggc+G7rSIKLQotIzogbGliL2JsYW1lLnRjbDozMDQKLW1zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgotbXNnc3RyICJYZW0gY8O0bmcgdHLhuqFuZyBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIGNoYSBt4bq5IgotCi0jOiBsaWIvYmxhbWUudGNsOjQ2NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlYWRpbmcgJXMuLi4iCi1tc2dzdHIgIsSQYW5nIMSR4buNYyAlcy4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo1OTQKLW1zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKLW1zZ3N0ciAixJBhbmcgdOG6o2kgcGjhuqduIGNow7ogZ2nhuqNpIHRoZW8gZMO1aSBjaMOpcC9jaHV54buDbi4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo2MTQKLW1zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCi1tc2dzdHIgImTDsm5nIGNow7ogZ2nhuqNpIgotCi0jOiBsaWIvYmxhbWUudGNsOjgwNgotbXNnaWQgIkxvYWRpbmcgb3JpZ2luYWwgbG9jYXRpb24gYW5ub3RhdGlvbnMuLi4iCi1tc2dzdHIgIsSQYW5nIHThuqNpIGPDoWMgY2jDuiBnaeG6o2kgduG7iyB0csOtIG5ndXnDqm4gZ+G7kWMuLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODA5Ci1tc2dpZCAiQW5ub3RhdGlvbiBjb21wbGV0ZS4iCi1tc2dzdHIgIkNow7ogZ2nhuqNpIGhvw6BuIHThuqV0LiIKLQotIzogbGliL2JsYW1lLnRjbDo4MzkKLW1zZ2lkICJCdXN5IgotbXNnc3RyICJC4bqtbiIKLQotIzogbGliL2JsYW1lLnRjbDo4NDAKLW1zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKLW1zZ3N0ciAiVGnhur9uIHRyw6xuaCBjaMO6IGdp4bqjaSDEkWFuZyBkaeG7hW4gcmEuIgotCi0jOiBsaWIvYmxhbWUudGNsOjg3OQotbXNnaWQgIlJ1bm5pbmcgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uLi4iCi1tc2dzdHIgIsSQYW5nIGNo4bqheSBkw7IgdMOsbSBzYW8gY2jDqXAgdG/DoG4gZGnhu4duLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjk0NwotbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKLW1zZ3N0ciAixJBhbmcgdOG6o2kgcGjhuqduIGNow7ogZ2nhuqNpLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjEwMDAKLW1zZ2lkICJBdXRob3I6IgotbXNnc3RyICJUw6FjIGdp4bqjOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDA0Ci1tc2dpZCAiQ29tbWl0dGVyOiIKLW1zZ3N0ciAiTmfGsOG7nWkgY2h1eeG7g24gZ2lhbzoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTAwOQotbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgotbXNnc3RyICJU4bqtcCB0aW4gZ+G7kWM6IgotCi0jOiBsaWIvYmxhbWUudGNsOjEwNTcKLW1zZ2lkICJDYW5ub3QgZmluZCBIRUFEIGNvbW1pdDoiCi1tc2dzdHIgIktow7RuZyB0aOG7gyB0w6xtIHRo4bqleSBIRUFEIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW86IgotCi0jOiBsaWIvYmxhbWUudGNsOjExMTIKLW1zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IGzhuqduIGNodXnhu4NuIGdpYW8gbeG6uToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTEyNwotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIGhp4buDbiB0aOG7iyBjaGEgbeG6uSIKLQotIzogbGliL2JsYW1lLnRjbDoxMTI4IGxpYi9kaWZmLnRjbDozNDEKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdOG6o2kgZGlmZjoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTI2OQotbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgotbXNnc3RyICJOZ3V5w6puIGfhu5FjIGLhu59pOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjc1Ci1tc2dpZCAiSW4gRmlsZToiCi1tc2dzdHIgIlRyb25nIHThuq1wIHRpbjoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTI4MAotbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKLW1zZ3N0ciAixJDDoyBjaMOpcCBob+G6t2MgRGkgY2h1eeG7g24gxJHhur9uIMSRw6J5IGLhu59pOiIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTYgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjEKLW1zZ2lkICJDaGVja291dCBCcmFuY2giCi1tc2dzdHIgIkzhuqV5IHJhIG5ow6FuaCIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjYKLW1zZ2lkICJDaGVja291dCIKLW1zZ3N0ciAiTOG6pXkgcmEiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMwIGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNwotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6MjkyCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OSBsaWIvY2hvb3NlX2ZvbnQudGNsOjQ1IGxpYi9tZXJnZS50Y2w6MTc0Ci0jOiBsaWIvb3B0aW9uLnRjbDoxMjcgbGliL3JlbW90ZV9hZGQudGNsOjM0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDMKLSM6IGxpYi90b29sc19kbGcudGNsOjQxIGxpYi90b29sc19kbGcudGNsOjIwMiBsaWIvdG9vbHNfZGxnLnRjbDozNDUKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE0MQotbXNnaWQgIkNhbmNlbCIKLW1zZ3N0ciAiVGjDtGkiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM1IGxpYi9icm93c2VyLnRjbDoyOTcgbGliL3Rvb2xzX2RsZy50Y2w6MzIxCi1tc2dpZCAiUmV2aXNpb24iCi1tc2dzdHIgIsSQaeG7g20gc+G7rWEgxJHhu5VpIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkgbGliL29wdGlvbi50Y2w6MzA5Ci1tc2dpZCAiT3B0aW9ucyIKLW1zZ3N0ciAiVMO5eSBjaOG7jW4iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgotbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKLW1zZ3N0ciAiTOG6pXkgduG7gSBuaMOhbmggxJHGsOG7o2MgdGhlbyBkw7VpIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0NwotbXNnaWQgIkRldGFjaCBGcm9tIExvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiVMOhY2ggcuG7nWkgdOG7qyBOaMOhbmggbuG7mWkgYuG7mSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIzCi1tc2dpZCAiQ3JlYXRlIEJyYW5jaCIKLW1zZ3N0ciAiVOG6oW8gbmjDoW5oIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjgKLW1zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKLW1zZ3N0ciAiVOG6oW8gbmjDoW5oIG3hu5tpIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTEKLW1zZ2lkICJDcmVhdGUiCi1tc2dzdHIgIlThuqFvIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDIKLW1zZ2lkICJCcmFuY2ggTmFtZSIKLW1zZ3N0ciAiVMOqbiBuaMOhbmgiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0NCBsaWIvcmVtb3RlX2FkZC50Y2w6NDEgbGliL3Rvb2xzX2RsZy50Y2w6NTEKLW1zZ2lkICJOYW1lOiIKLW1zZ3N0ciAiVMOqbjoiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo1NwotbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaCBOYW1lIgotbXNnc3RyICJLaOG7m3AgduG7m2kgdMOqbiBuaMOhbmggxJHGsOG7o2MgdGhlbyBkw7VpIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKLW1zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKLW1zZ3N0ciAixJBp4buDbSDEkeG6p3UiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgotbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgotbXNnc3RyICJD4bqtcCBuaOG6rXQgbmjDoW5oIHPhurVuIGPDszoiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQotbXNnaWQgIk5vIgotbXNnc3RyICJLaMO0bmciCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAotbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgotbXNnc3RyICJDaOG7iSBmYXN0LWZvcndhcmQiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MQotbXNnaWQgIlJlc2V0IgotbXNnc3RyICLEkOG6t3QgbOG6oWkiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5NwotbXNnaWQgIkNoZWNrb3V0IEFmdGVyIENyZWF0aW9uIgotbXNnc3RyICJM4bqleSByYSBzYXUga2hpIHThuqFvIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTMyCi1tc2dpZCAiUGxlYXNlIHNlbGVjdCBhIHRyYWNraW5nIGJyYW5jaC4iCi1tc2dzdHIgIlZ1aSBsw7JuZyBjaOG7jW4gbmjDoW5oIHRoZW8gZMO1aS4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIk5ow6FuaCB0aGVvIGTDtWkgJXMga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgbmjDoW5oIHRyw6puIGtobyBjaOG7qWEgbcOheSBjaOG7py4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjkyCi1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKLW1zZ3N0ciAiSMOjeSBjdW5nIGPhuqVwIHTDqm4gbmjDoW5oLiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NSBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTEyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCi1tc2dzdHIgIiclcycga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgdMOqbiBuaMOhbmggxJHGsOG7o2MgY2jhuqVwIG5o4bqtbi4iCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNgotbXNnaWQgIkRlbGV0ZSBCcmFuY2giCi1tc2dzdHIgIlhvw6EgbmjDoW5oIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjEKLW1zZ2lkICJEZWxldGUgTG9jYWwgQnJhbmNoIgotbXNnc3RyICJYw7NhIG5ow6FuaCBu4buZaSBi4buZIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzkKLW1zZ2lkICJMb2NhbCBCcmFuY2hlcyIKLW1zZ3N0ciAiTmjDoW5oIG7hu5lpIGLhu5kiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MQotbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgotbXNnc3RyICJDaOG7iSB4w7NhIG7hur91IMSRw6MgaMOyYSB0cuG7mW4gdsOgbyIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUzIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTIwCi1tc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgotbXNnc3RyICJMdcO0biAoS2jDtG5nIHRo4buxYyBoaeG7h24ga2nhu4NtIHRyYSBow7JhIHRy4buZbikiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCi1tc2dzdHIgIkPDoWMgbmjDoW5oIHNhdSDEkcOieSBraMO0bmcgxJHGsOG7o2MgaMOyYSB0cuG7mW4gaG/DoG4gdG/DoG4gdsOgbyAlczoiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTgKKyM6IGFkZC1wYXRjaC5jOjgxCiBtc2dpZCAiIgotIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCi0iXG4iCi0iRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisidW5zdGFnaW5nLiIKIG1zZ3N0ciAiIgotIktow7RpIHBo4bulYyBjw6FjIG5ow6FuaCDEkcOjIGLhu4sgeMOzYSBsw6Agdmnhu4djIGtow7Mga2jEg24uXG4iCi0iXG4iCi0iWMOzYSBuaMOhbmggxJHDoyBjaOG7jW4gY2jhu6k/IgorIk7hur91IG1p4bq/bmcgdsOhIMSRxrDhu6NjIMOhcCBk4bulbmcgc+G6oWNoIHPhur0sIGtow7pjIMSRw6Mgc+G7rWEgc+G6vSBuZ2F5IGzhuq1wIHThu6ljIMSRxrDhu6NjIMSRw6FuaCBk4bqldSAiCisixJHhu4MgYuG7jyByYSBraOG7j2kgYuG7hyBwaMOzbmcuIgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCi0jLCB0Y2wtZm9ybWF0CisjOiBhZGQtcGF0Y2guYzo4NAogbXNnaWQgIiIKLSJGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaGVzOlxuIgotIiVzIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgogbXNnc3RyICIiCi0iR+G6t3AgbOG7l2kga2hpIHjDs2EgY8OhYyBuaMOhbmg6XG4iCisieSAtIMSRxrBhIHJhIGto4buPaSBi4buHIHBow7NuZyBraMO6YyBuw6B5XG4iCisibiAtIMSR4burbmcgxJHGsGEgcmEga2jhu49pIGLhu4cgcGjDs25nIGtow7pjIG7DoHlcbiIKKyJxIC0gdGhvw6F0OyDEkeG7q25nIMSRxrBhIHJhIGto4buPaSBi4buHIHBow7NuZyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gY8OybiAiCisibOG6oWlcbiIKKyJhIC0gxJHGsGEgcmEga2jhu49pIGLhu4cgcGjDs25nIGtow7pjIG7DoHkgdsOgIHThuqV0IGPhuqMgY8OhYyBraMO6YyBzYXUgbsOgeSB0cm9uZyB04bqtcCB0aW5cbiIKKyJkIC0gxJHhu6tuZyDEkcawYSByYSBraOG7j2kgYuG7hyBwaMOzbmcga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWkgdHJvbmcgIgorInThuq1wIHRpblxuIgorCisjOiBhZGQtcGF0Y2guYzo5OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLDgXAgZOG7pW5nIHRoYXkgxJHhu5VpIGNo4bq/IMSR4buZIGNobyBt4bulYyBs4bulYyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTAwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsOBcCBk4bulbmcgdmnhu4djIHjDs2EgdsOgbyBt4bulYyBs4bulYyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLDgW8gZOG7pW5nIGtow7pjIG7DoHkgdsOgbyBt4bulYyBs4bulYyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTAzIGFkZC1wYXRjaC5jOjE2OCBhZGQtcGF0Y2guYzoyMTEKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisiYXBwbHlpbmcuIgorbXNnc3RyICIiCisiTuG6v3UgbWnhur9uZyB2w6EgxJHGsOG7o2Mgw6FwIGThu6VuZyBz4bqhY2ggc+G6vSwga2jDumMgxJHDoyBz4butYSBz4bq9IG5nYXkgbOG6rXAgdOG7qWMgxJHGsOG7o2MgxJHDoW5oIGThuqV1ICIKKyLEkeG7gyDDoXAgZOG7pW5nLiIKKworIzogYWRkLXBhdGNoLmM6MTA2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gw6FwIGThu6VuZyBraMO6YyBuw6B5IHbDoG8gbeG7pWMgbOG7pWNcbiIKKyJuIC0gxJHhu6tuZyDDoXAgZOG7pW5nIGtow7pjIG7DoHkgdsOgbyBt4bulYyBs4bulY1xuIgorInEgLSB0aG/DoXQ7IMSR4burbmcgw6FwIGThu6VuZyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gY8OybiBs4bqhaVxuIgorImEgLSDDoXAgZOG7pW5nIGtow7pjIG7DoHkgdsOgIHThuqV0IGPhuqMgY8OhYyBraMO6YyBzYXUgbsOgeSB0cm9uZyB04bqtcCB0aW5cbiIKKyJkIC0gxJHhu6tuZyDDoXAgZOG7pW5nIGtow7pjIG7DoHkgY8WpbmcgbmjGsCBi4bqldCBr4buzIGPDoWkgbsOgbyBzYXUgbsOgeSB0cm9uZyB04bqtcCB0aW5cbiIKKworIzogYWRkLXBhdGNoLmM6MTIxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYzCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkxv4bqhaSBi4buPIGPDoWMgdGhheSDEkeG7lWkgY2jhur8gxJHhu5kgdOG7qyBjw6J5IGzDoG0gdmnhu4djIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjQKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTG/huqFpIGLhu48gdmnhu4djIHjDs2Ega2jhu49pIGPDonkgbMOgbSB2aeG7h2MgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTG/huqFpIGLhu48ga2jDumMgbsOgeSBraOG7j2kgY8OieSBsw6BtIHZp4buHYyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTI1IGFkZC1wYXRjaC5jOjE0NyBhZGQtcGF0Y2guYzoxOTAKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisiZGlzY2FyZGluZy4iCittc2dzdHIgIiIKKyJO4bq/dSBtaeG6v25nIHbDoSDEkcaw4bujYyDDoXAgZOG7pW5nIHPhuqFjaCBz4bq9LCBraMO6YyDEkcOjIHPhu61hIHPhur0gbmdheSBs4bqtcCB04bupYyDEkcaw4bujYyDEkcOhbmggZOG6pXUgIgorIsSR4buDIGxv4bqhaSBi4buPLiIKKworIzogYWRkLXBhdGNoLmM6MTI4IGFkZC1wYXRjaC5jOjE5MworbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gbG/huqFpIGLhu48ga2jDumMgbsOgeSBraOG7j2kgY8OieSBsw6BtIHZp4buHY1xuIgorIm4gLSDEkeG7q25nIGxv4bqhaSBi4buPIGtow7pjIGto4buPaSBjw6J5IGzDoG0gdmnhu4djXG4iCisicSAtIHRob8OhdDsgxJHhu6tuZyBsb+G6oWkgYuG7jyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gY8OybiBs4bqhaVxuIgorImEgLSBsb+G6oWkgYuG7jyBraMO6YyBuw6B5IHbDoCB04bqldCBj4bqjIGPDoWMga2jDumMgc2F1IG7DoHkgdHJvbmcgdOG6rXAgdGluXG4iCisiZCAtIMSR4burbmcgbG/huqFpIGLhu48ga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIHNhdSBuw6B5IHRyb25nIHThuq1wIHRpblxuIgorCisjOiBhZGQtcGF0Y2guYzoxNDMgYWRkLXBhdGNoLmM6MTg2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1MworIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTG/huqFpIGLhu48gdGhheSDEkeG7lWkgY2jhur8gxJHhu5kgdOG7qyBt4bulYyBs4bulYyB2w6AgY8OieSBsw6BtIHZp4buHYyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTQ0IGFkZC1wYXRjaC5jOjE4NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTQKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkxv4bqhaSBi4buPIHZp4buHYyB4w7NhIGto4buPaSBt4bulYyBs4bulYyB2w6AgY8OieSBsw6BtIHZp4buHYyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTQ1IGFkZC1wYXRjaC5jOjE4OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJMb+G6oWkgYuG7jyBraMO6YyBuw6B5IGto4buPaSBt4bulYyBs4bulYyB2w6AgY8OieSBsw6BtIHZp4buHYyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTUwCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIGxv4bqhaSBi4buPIGtow7pjIG7DoHkga2jhu49pIG3hu6VjIGzhu6VjIHbDoCBjw6J5IGzDoG0gdmnhu4djXG4iCisibiAtIMSR4burbmcgbG/huqFpIGLhu48ga2jDumMga2jhu49pIG3hu6VjIGzhu6VjIHbDoCBjw6J5IGzDoG0gdmnhu4djXG4iCisicSAtIHRob8OhdDsgxJHhu6tuZyBsb+G6oWkgYuG7jyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gY8OybiBs4bqhaVxuIgorImEgLSBsb+G6oWkgYuG7jyBraMO6YyBuw6B5IHbDoCB04bqldCBj4bqjIGPDoWMga2jDumMgc2F1IG7DoHkgdHJvbmcgdOG6rXAgdGluXG4iCisiZCAtIMSR4burbmcgbG/huqFpIGLhu48ga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIHNhdSBuw6B5IHRyb25nIHThuq1wIHRpblxuIgorCisjOiBhZGQtcGF0Y2guYzoxNjQgYWRkLXBhdGNoLmM6MjA3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLDgXAgZOG7pW5nIHRoYXkgxJHhu5VpIGNo4bq/IMSR4buZIGNobyBt4bulYyBs4bulYyB2w6AgY8OieSBsw6BtIHZp4buHYyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTY1IGFkZC1wYXRjaC5jOjIwOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTkKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiw4FwIGThu6VuZyB2aeG7h2MgeMOzYSB2w6BvIG3hu6VjIGzhu6VjIHbDoCBjw6J5IGzDoG0gdmnhu4djIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNjYgYWRkLXBhdGNoLmM6MjA5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiw4FwIGThu6VuZyBraMO6YyBuw6B5IHbDoG8gbeG7pWMgbOG7pWMgdsOgIGPDonkgbMOgbSB2aeG7h2MgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE3MQorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0gw6FwIGThu6VuZyBraMO6YyBuw6B5IHbDoG8gbeG7pWMgbOG7pWMgdsOgIGPDonkgbMOgbSB2aeG7h2NcbiIKKyJuIC0gxJHhu6tuZyDDoXAgZOG7pW5nIGtow7pjIHbDoG8gbeG7pWMgbOG7pWMgdsOgIGPDonkgbMOgbSB2aeG7h2NcbiIKKyJxIC0gdGhvw6F0OyDEkeG7q25nIMOhcCBk4bulbmcga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWlcbiIKKyJhIC0gw6FwIGThu6VuZyBraMO6YyBuw6B5IHbDoCB04bqldCBj4bqjIGPDoWMga2jDumMgc2F1IG7DoHkgdHJvbmcgdOG6rXAgdGluXG4iCisiZCAtIMSR4burbmcgw6FwIGThu6VuZyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gc2F1IG7DoHkgdHJvbmcgdOG6rXAgdGluXG4iCisKKyM6IGFkZC1wYXRjaC5jOjIxNAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIMOhcCBk4bulbmcga2jDumMgbsOgeSB2w6BvIGPDonkgbMOgbSB2aeG7h2NcbiIKKyJuIC0gxJHhu6tuZyDDoXAgZOG7pW5nIGtow7pjIHbDoG8gY8OieSBsw6BtIHZp4buHY1xuIgorInEgLSB0aG/DoXQ7IMSR4burbmcgw6FwIGThu6VuZyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gY8OybiBs4bqhaVxuIgorImEgLSDDoXAgZOG7pW5nIGtow7pjIG7DoHkgdsOgIHThuqV0IGPhuqMgY8OhYyBraMO6YyBzYXUgbsOgeSB0cm9uZyB04bqtcCB0aW5cbiIKKyJkIC0gxJHhu6tuZyDDoXAgZOG7pW5nIGtow7pjIG7DoHkgY8WpbmcgbmjGsCBi4bqldCBr4buzIGPDoWkgbsOgbyBzYXUgbsOgeSB0cm9uZyB04bqtcCB0aW5cbiIKKworIzogYWRkLXBhdGNoLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciAnJS4qcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjw7ogcGjDoXAgcGjhuqduIMSR4bqndSBj4bunYSBraMO6YyDigJwlLipz4oCdIgorCisjOiBhZGQtcGF0Y2guYzozMzcgYWRkLXBhdGNoLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPDuiBwaMOhcCBwaOG6p24gxJHhuqd1IGtow7pjIMSRw6MgdMO0IG3DoHUg4oCcJS4qc+KAnSIKKworIzogYWRkLXBhdGNoLmM6Mzk1Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGRpZmYiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjw7ogcGjDoXAga2jDoWMgYmnhu4d0IgorCisjOiBhZGQtcGF0Y2guYzo0MTQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBkaWZmIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2gga2jDoWMgYmnhu4d0IMSRxrDhu6NjIHTDtCBtw6B1IgorCisjOiBhZGQtcGF0Y2guYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgY2jhuqF5IOKAnCVz4oCdIgorCisjOiBhZGQtcGF0Y2guYzo1ODcKK21zZ2lkICJtaXNtYXRjaGVkIG91dHB1dCBmcm9tIGludGVyYWN0aXZlLmRpZmZGaWx0ZXIiCittc2dzdHIgIsSR4bqndSByYSBraMO0bmcga2jhu5twIHThu6sgaW50ZXJhY3RpdmUuZGlmZkZpbHRlciIKKworIzogYWRkLXBhdGNoLmM6NTg4Cittc2dpZCAiIgorIllvdXIgZmlsdGVyIG11c3QgbWFpbnRhaW4gYSBvbmUtdG8tb25lIGNvcnJlc3BvbmRlbmNlXG4iCisiYmV0d2VlbiBpdHMgaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4iCittc2dzdHIgIiIKKyJC4buZIGzhu41jIGPhu6dhIGLhuqFuIHBo4bqjaSBkdXkgdHLDrCBt4buZdCBxdWFuIGjhu4cgbeG7mXQtxJHhur9uLW3hu5l0XG4iCisiZ2nhu69hIGPDoWMgZMOybmcgxJHhuqd1IHbDoG8gdsOgIMSR4bqndSByYSBj4bunYSBuw7MuIgorCisjOiBhZGQtcGF0Y2guYzo3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIGNvbnRleHQgbGluZSAjJWQgaW5cbiIKKyIlLipzIgorbXNnc3RyICIiCisiY+G6p24gZMOybmcgbmfhu68gY+G6o25oICMlZCB0cm9uZ1xuIgorIiUuKnMiCisKKyM6IGFkZC1wYXRjaC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaHVua3MgZG8gbm90IG92ZXJsYXA6XG4iCisiJS4qc1xuIgorIlx0ZG9lcyBub3QgZW5kIHdpdGg6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorImPDoWMga2jhu5FpIGtow7RuZyBjaOG7k25nIMSRw6ggbMOqbiBuaGF1OlxuIgorIiUuKnNcbiIKKyJcdGtow7RuZyDEkcaw4bujYyBr4bq/dCB0aMO6YyBi4bqxbmc6XG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6MTA1MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTIKK21zZ2lkICJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgYSBxdWljayBndWlkZS5cbiIKK21zZ3N0ciAiQ2jhur8gxJHhu5kgc+G7rWEga2jDumMgYuG6sW5nIHRheSAtLSB4ZW0g4bufIMSRw6F5IMSR4buDIGPDsyBoxrDhu5tuZyBk4bqrbiBz4butIGThu6VuZyBuaGFuaC5cbiIKKworIzogYWRkLXBhdGNoLmM6MTA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclYycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVjIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorIi0tLVxuIgorIsSQ4buDIGfhu6EgYuG7jyBkw7JuZyDigJwlY+KAnSwgc+G7rWEgY2jDum5nIHRow6BuaCBuaOG7r25nIGTDsm5nICcgJyAobmfhu68gY+G6o25oKS5cbiIKKyLEkOG7gyBnw7UgYuG7jyBkw7JuZyDigJwlY+KAnSwgeMOzYSBjaMO6bmcgxJFpLlxuIgorIk5o4buvbmcgZMOybmcgYuG6r3QgxJHhuqd1IGLhurFuZyAlYyBz4bq9IGLhu4sgbG/huqFpIGLhu48uXG4iCisKKyMuIFRSQU5TTEFUT1JTOiAnaXQnIHJlZmVycyB0byB0aGUgcGF0Y2ggbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBtZXNzYWdlcy4KKyM6IGFkZC1wYXRjaC5jOjEwNzAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTI2Cittc2dpZCAiIgorIklmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlIGdpdmVuIGFuIG9wcG9ydHVuaXR5IHRvXG4iCisiZWRpdCBhZ2Fpbi4gIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgcmVtb3ZlZCwgdGhlbiB0aGUgZWRpdCBpc1xuIgorImFib3J0ZWQgYW5kIHRoZSBodW5rIGlzIGxlZnQgdW5jaGFuZ2VkLlxuIgorbXNnc3RyICIiCisiTuG6v3UgbWnhur9uZyB2w6Ega2jDtG5nIMSRxrDhu6NjIMOhcCBk4bulbmcgc+G6oWNoIHPhur0sIGLhuqFuIHPhur0gY8OzIG3hu5l0IGPGoSBo4buZaVxuIgorIsSR4buDIHPhu61hIGzhuqduIG7hu69hLiBO4bq/dSBt4buNaSBkw7JuZyBj4bunYSBraMO6YyBi4buLIHjDs2EgYuG7jywgdGjhur8gdGjDrCBuaOG7r25nXG4iCisic+G7rWEgZOG7lWkgc+G6vSBi4buLIGxv4bqhaSBi4buPLCB2w6Aga2jDumMgduG6q24gZ2nhu68gbmd1ecOqbi5cbiIKKworIzogYWRkLXBhdGNoLmM6MTEwMworbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPDuiBwaMOhcCBwaOG6p24gxJHhuqd1IGtow7pjIgorCisjOiBhZGQtcGF0Y2guYzoxMTQ4Cittc2dpZCAiJ2dpdCBhcHBseSAtLWNhY2hlZCcgZmFpbGVkIgorbXNnc3RyICInZ2l0IGFwcGx5IC0tY2FjaGVkJyBn4bq3cCBs4buXaSIKKworIy4gVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKyMuIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgdGhhdCBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4gQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKyMuIChzYXlpbmcgIm4iIGZvciAibm8iIGRpc2NhcmRzISkgaWYgdGhlIHRyYW5zbGF0aW9uCisjLiBvZiB0aGUgd29yZCAibm8iIGRvZXMgbm90IHN0YXJ0IHdpdGggbi4KKyMuCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIy4gQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKyMuIChzYXlpbmcgIm4iIGZvciAibm8iIGRpc2NhcmRzISkgaWYgdGhlIHRyYW5zbGF0aW9uCisjLiBvZiB0aGUgd29yZCAibm8iIGRvZXMgbm90IHN0YXJ0IHdpdGggbi4KKyM6IGFkZC1wYXRjaC5jOjEyMTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjM5Cittc2dpZCAiIgorIllvdXIgZWRpdGVkIGh1bmsgZG9lcyBub3QgYXBwbHkuIEVkaXQgYWdhaW4gKHNheWluZyBcIm5vXCIgZGlzY2FyZHMhKSBbeS9uXT8gIgorbXNnc3RyICIiCisiSHVuayDEkcOjIHPhu61hIGPhu6dhIGLhuqFuIGtow7RuZyDEkcaw4bujYyDDoXAgZOG7pW5nLiBT4butYSBs4bqhaSBs4bqnbiBu4buvYSAobsOzaSBcIm5cIiDEkeG7gyBsb+G6oWkgIgorImLhu48hKSBbeS9uXT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjYxCittc2dpZCAiVGhlIHNlbGVjdGVkIGh1bmtzIGRvIG5vdCBhcHBseSB0byB0aGUgaW5kZXghIgorbXNnc3RyICJDw6FjIGtow7pjIMSRw6MgY2jhu41uIGtow7RuZyDEkcaw4bujYyDDoXAgZOG7pW5nIHbDoG8gYuG6o25nIG3hu6VjIGzhu6VjISIKKworIzogYWRkLXBhdGNoLmM6MTI2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDMKK21zZ2lkICJBcHBseSB0aGVtIHRvIHRoZSB3b3JrdHJlZSBhbnl3YXk/ICIKK21zZ3N0ciAiVuG6q24gw6FwIGThu6VuZyBjaMO6bmcgY2hvIGPDonkgbMOgbSB2aeG7h2M/ICIKKworIzogYWRkLXBhdGNoLmM6MTI2OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDYKK21zZ2lkICJOb3RoaW5nIHdhcyBhcHBsaWVkLlxuIgorbXNnc3RyICLEkMOjIGtow7RuZyDDoXAgZOG7pW5nIGfDrCBj4bqjLlxuIgorCisjOiBhZGQtcGF0Y2guYzoxMzI2Cittc2dpZCAiIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiaiAtIMSR4buDIGzhuqFpIGtow7pjIG7DoHkgbMOgIGNoxrBhIHF1eeG6v3QgxJHhu4tuaCwgeGVtIGtow7pjIGNoxrBhIHF1eeG6v3QgxJHhu4tuaCBr4bq/IHRp4bq/cFxuIgorIkogLSDEkeG7gyBs4bqhaSBraMO6YyBuw6B5IGzDoCBjaMawYSBxdXnhur90IMSR4buLbmgsIHhlbSBraMO6YyBr4bq/IHRp4bq/cFxuIgorImsgLSDEkeG7gyBs4bqhaSBraMO6YyBuw6B5IGzDoCBjaMawYSBxdXnhur90IMSR4buLbmgsIHhlbSBraMO6YyBjaMawYSBxdXnhur90IMSR4buLbmgga+G6vyB0csaw4bubY1xuIgorIksgLSDEkeG7gyBs4bqhaSBraMO6YyBuw6B5IGzDoCBjaMawYSBxdXnhur90IMSR4buLbmgsIHhlbSBraMO6YyBr4bq/IHRyxrDhu5tjXG4iCisiZyAtIGNo4buNbiBt4buZdCBraMO6YyBtdeG7kW4gdOG7m2lcbiIKKyIvIC0gdMOsbSBt4buZdCBraMO6YyBraOG7m3AgduG7m2kgYmnhu4N1IHRo4bupYyBjaMOtbmggcXV5IMSRxrBhIHJhXG4iCisicyAtIGNoaWEga2jDumMgaGnhu4duIHThuqFpIHRow6BuaCBjw6FjIGtow7pjIG5o4buPIGjGoW5cbiIKKyJlIC0gc+G7rWEgYuG6sW5nIHRheSBraMO6YyBoaeG7h24gaMOgbmhcbiIKKyI/IC0gaGnhu4NuIHRo4buLIHRy4bujIGdpw7pwXG4iCisKKyM6IGFkZC1wYXRjaC5jOjE0NDcgYWRkLXBhdGNoLmM6MTQ1NworbXNnaWQgIk5vIHByZXZpb3VzIGh1bmsiCittc2dzdHIgIktow7RuZyBjw7Mga2jDumMga+G6vyB0csaw4bubYyIKKworIzogYWRkLXBhdGNoLmM6MTQ1MiBhZGQtcGF0Y2guYzoxNDYyCittc2dpZCAiTm8gbmV4dCBodW5rIgorbXNnc3RyICJLaMO0bmcgY8OzIGtow7pjIGvhur8gdGnhur9wIgorCisjOiBhZGQtcGF0Y2guYzoxNDY4Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290byIKK21zZ3N0ciAiS2jDtG5nIGPDsm4ga2jDumMgbsOgbyDEkeG7gyBtw6AgbmjhuqN5IMSR4bq/biIKKworIzogYWRkLXBhdGNoLmM6MTQ3OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzcKK21zZ2lkICJnbyB0byB3aGljaCBodW5rICg8cmV0PiB0byBzZWUgbW9yZSk/ICIKK21zZ3N0ciAibmjhuqN5IMSR4bq/biBraMO6YyBuw6BvICg8cmV0PiDEkeG7gyB4ZW0gdGjDqm0pPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE0ODAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc5Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuaz8gIgorbXNnc3RyICJuaOG6o3kgxJHhur9uIGtow7pjIG7DoG8/ICIKKworIzogYWRkLXBhdGNoLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJyIKK21zZ3N0ciAiU+G7kSBraMO0bmcgaOG7o3AgbOG7hzog4oCcJXPigJ0iCisKKyM6IGFkZC1wYXRjaC5jOjE0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU29ycnksIG9ubHkgJWQgaHVuayBhdmFpbGFibGUuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuIgorbXNnc3RyWzBdICJS4bqldCB0aeG6v2MsIGNo4buJIGPDsyBz4bq1biAlZCBraMO6Yy4iCisKKyM6IGFkZC1wYXRjaC5jOjE1MDUKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBzZWFyY2giCittc2dzdHIgIktow7RuZyBjw7JuIGtow7pjIG7DoG8gxJHhu4MgbcOgIHTDrG0ga2nhur9tIgorCisjOiBhZGQtcGF0Y2guYzoxNTExIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYyMworbXNnaWQgInNlYXJjaCBmb3IgcmVnZXg/ICIKK21zZ3N0ciAidMOsbSBraeG6v20gY2hvIGJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlcyIKK21zZ3N0ciAixJDhu4tuaCBk4bqhbmcgdMOsbSBraeG6v20gY+G7p2EgYmnhu4N1IHRo4bupYyBjaMOtbmggcXV5IGtow7RuZyDEkcO6bmcgJXM6ICVzIgorCisjOiBhZGQtcGF0Y2guYzoxNTQzCittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuIgorbXNnc3RyICJLaMO0bmcgdGjhuqV5IGtow7pjIG7DoG8ga2jhu5twIG3huqt1IMSRw6MgY2hvIgorCisjOiBhZGQtcGF0Y2guYzoxNTUwCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmsiCittc2dzdHIgIlLhuqV0IHRp4bq/Yywga2jDtG5nIHRo4buDIGNoaWEgbmjhu48ga2jDumMgbsOgeSIKKworIzogYWRkLXBhdGNoLmM6MTU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmtzLiIKK21zZ3N0ciAiQ2hpIG5o4buPIHRow6BuaCAlZCBraMO6Yy4iCisKKyM6IGFkZC1wYXRjaC5jOjE1NTgKK21zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rIgorbXNnc3RyICJS4bqldCB0aeG6v2MsIGtow7RuZyB0aOG7gyBz4butYSBraMO6YyBuw6B5IgorCisjOiBhZGQtcGF0Y2guYzoxNjA5Cittc2dpZCAiJ2dpdCBhcHBseScgZmFpbGVkIgorbXNnc3RyICInZ2l0IGFwcGx5JyBn4bq3cCBs4buXaSIKKworIzogYWR2aWNlLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaGludDogJS4qcyVzXG4iCittc2dzdHIgIiVzZ+G7o2kgw706ICUuKnMlc1xuIgorCisjOiBhZHZpY2UuYzoxNjgKK21zZ2lkICJDaGVycnktcGlja2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKyJDaGVycnktcGlja2luZyBsw6Aga2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gYuG7n2kgdsOsIGLhuqFuIGPDsyBuaOG7r25nIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyAiCisiaMOyYSB0cuG7mW4uIgorCisjOiBhZHZpY2UuYzoxNzAKK21zZ2lkICJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIkNvbW1pdCBsw6Aga2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gYuG7n2kgdsOsIGLhuqFuIGPDsyBuaOG7r25nIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbi4iCisKKyM6IGFkdmljZS5jOjE3MgorbXNnaWQgIk1lcmdpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiTWVyZ2UgbMOgIGtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIGLhu59pIHbDrCBi4bqhbiBjw7Mgbmjhu69uZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4uIgorCisjOiBhZHZpY2UuYzoxNzQKK21zZ2lkICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIlB1bGwgbMOgIGtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIGLhu59pIHbDrCBi4bqhbiBjw7Mgbmjhu69uZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4uIgorCisjOiBhZHZpY2UuYzoxNzYKK21zZ2lkICJSZXZlcnRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiUmV2ZXJ0IGzDoCBraMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiBi4bufaSB2w6wgYuG6oW4gY8OzIG5o4buvbmcgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luLiIKKworIzogYWR2aWNlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkl0IGlzIG5vdCBwb3NzaWJsZSB0byAlcyBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIlZp4buHYyBuw6B5IGtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIHbhu5tpICVzIGLhu59pIHbDrCBi4bqhbiBjw7Mgbmjhu69uZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgIgorImjDsmEgdHLhu5luLiIKKworIzogYWR2aWNlLmM6MTg2Cittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKK21zZ3N0ciAiIgorIlPhu61hIGNow7puZyB0cm9uZyBjw6J5IGzDoG0gdmnhu4djLCB2w6Agc2F1IMSRw7MgZMO5bmcgbOG7h25oIOKAnGdpdCBhZGQvcm0gPHThuq1wLXRpbj7igJ1cbiIKKyJkw6BuaCByacOqbmcgY2hvIHZp4buHYyDEkcOhbmggZOG6pXUgY+G6p24gZ2nhuqNpIHF1eeG6v3QgdsOgIHThuqFvIGzhuqduIGNodXnhu4NuIGdpYW8uIgorCisjOiBhZHZpY2UuYzoxOTQKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgYW4gdW5yZXNvbHZlZCBjb25mbGljdC4iCittc2dzdHIgIlRob8OhdCByYSBi4bufaSB2w6wgeHVuZyDEkeG7mXQga2jDtG5nIHRo4buDIGdp4bqjaSBxdXnhur90LiIKKworIzogYWR2aWNlLmM6MTk5IGJ1aWx0aW4vbWVyZ2UuYzoxMzM1Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICJC4bqhbiBjaMawYSBr4bq/dCB0aMO6YyB2aeG7h2MgaMOyYSB0cuG7mW4gKE1FUkdFX0hFQUQgduG6q24gdOG7k24gdOG6oWkpLiIKKworIzogYWR2aWNlLmM6MjAxCittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSBtZXJnaW5nLiIKK21zZ3N0ciAiVnVpIGzDsm5nIGNodXnhu4NuIGdpYW8gY8OhYyB0aGF5IMSR4buVaSB0csaw4bubYyBraGkgaMOyYSB0cuG7mW4uIgorCisjOiBhZHZpY2UuYzoyMDIKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iCittc2dzdHIgIlRob8OhdCByYSBi4bufaSB2w6wgdmnhu4djIGjDsmEgdHLhu5luIGtow7RuZyBob8OgbiB04bqldC4iCisKKyM6IGFkdmljZS5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogc3dpdGNoaW5nIHRvICclcycuXG4iCisiXG4iCisiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisiY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpc1xuIgorInN0YXRlIHdpdGhvdXQgaW1wYWN0aW5nIGFueSBicmFuY2hlcyBieSBzd2l0Y2hpbmcgYmFjayB0byBhIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKyJkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYyB3aXRoIHRoZSBzd2l0Y2ggY29tbWFuZC4gRXhhbXBsZTpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPG5ldy1icmFuY2gtbmFtZT5cbiIKKyJcbiIKKyJPciB1bmRvIHRoaXMgb3BlcmF0aW9uIHdpdGg6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyJUdXJuIG9mZiB0aGlzIGFkdmljZSBieSBzZXR0aW5nIGNvbmZpZyB2YXJpYWJsZSBhZHZpY2UuZGV0YWNoZWRIZWFkIHRvICIKKyJmYWxzZVxuIgorIlxuIgorbXNnc3RyICIiCisiQ2jDuiDDvTogxJFhbmcgY2h1eeG7g24gc2FuZyDigJwlc+KAnS5cbiIKKyJcbiIKKyJC4bqhbiDEkWFuZyDhu58gdMOsbmggdHLhuqFuZyDigJxkZXRhY2hlZCBIRUFE4oCdLiBC4bqhbiBjw7MgdGjhu4MgeGVtIHF1YSwgdOG6oW8gY8OhYyB0aGF5XG4iCisixJHhu5VpIHRo4butIG5naGnhu4dtIHbDoCBjaHV54buDbiBnaWFvIGNow7puZywgYuG6oW4gY8OzIHRo4buDIGxv4bqhaSBi4buPIGLhuqV0IGvhu7MgbOG6p24gY2h1eeG7g25cbiIKKyJnaWFvIG7DoG8gdHJvbmcgdMOsbmggdHLhuqFuZyBuw6B5IG3DoCBraMO0bmcgY+G6p24gxJHhu6VuZyBjaOG6oW0gxJHhur9uIGLhuqV0IGvhu7MgbmjDoW5oIG7DoG9cbiIKKyJi4bqxbmcgY8OhY2ggY2h1eeG7g24gdHLhu58gbOG6oWkgbeG7mXQgbmjDoW5oLlxuIgorIlxuIgorIk7hur91IGLhuqFuIG114buRbiB04bqhbyBt4buZdCBuaMOhbmggbeG7m2kgxJHhu4MgZ2nhu68gbOG6oWkgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGLhuqFuIHThuqFvLFxuIgorImLhuqFuIGPDsyB0aOG7gyBsw6BtIHRo4bq/IChuZ2F5IGLDonkgZ2nhu50gaGF5IHNhdSBuw6B5KSBi4bqxbmcgY8OhY2ggZMO5bmcgdMO5eSBjaOG7jW5cbiIKKyJkw7JuZyBs4buHbmggLWIuIFbDrSBk4bulOlxuIgorIlxuIgorIiAgZ2l0IGNoZWNrb3V0IC1jIDx0w6puLW5ow6FuaC1t4bubaT5cbiIKKyJcbiIKKyJIb8OgbiBs4bqhaSB0aGFvIHTDoWMgbsOgeSBi4bqxbmc6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyJU4bqvdCBoxrDhu5tuZyBk4bqrbiBuw6B5IGLhurFuZyBjw6FjaCDEkeG6t3QgYmnhur9uIGFkdmljZS5kZXRhY2hlZEhlYWQgdGjDoG5oIGZhbHNlXG4iCisiXG4iCisKKyM6IGFsaWFzLmM6NTAKK21zZ2lkICJjbWRsaW5lIGVuZHMgd2l0aCBcXCIKK21zZ3N0ciAiY21kbGluZSBr4bq/dCB0aMO6YyB24bubaSBcXCIKKworIzogYWxpYXMuYzo1MQorbXNnaWQgInVuY2xvc2VkIHF1b3RlIgorbXNnc3RyICJjaMawYSBjw7MgZOG6pXUgbmjDoXkgxJHDs25nIgorCisjOiBhcHBseS5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJraMO0bmcgbmjhuq1uIHJhIHTDuXkgY2jhu41uIHbhu4Ega2hv4bqjbmcgdHLhuq9uZyDigJwlc+KAnSIKKworIzogYXBwbHkuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgImtow7RuZyBuaOG6rW4gcmEgdMO5eSBjaOG7jW4gYuG7jyBxdWEga2hv4bqjbmcgdHLhuq9uZyDigJwlc+KAnSIKKworIzogYXBwbHkuYzoxMzUKK21zZ2lkICItLXJlamVjdCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1yZWplY3QgdsOgIC0tM3dheSBraMO0bmcgdGjhu4MgZMO5bmcgY8O5bmcgbmhhdS4iCisKKyM6IGFwcGx5LmM6MTM3Cittc2dpZCAiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tY2FjaGVkIHbDoCAtLTN3YXkga2jDtG5nIHRo4buDIGTDuW5nIGPDuW5nIG5oYXUuIgorCisjOiBhcHBseS5jOjE0MAorbXNnaWQgIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS0zd2F5IOG7nyBuZ2/DoGkgbeG7mXQga2hvIGNo4bupYSIKKworIzogYXBwbHkuYzoxNTEKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWluZGV4IOG7nyBuZ2/DoGkgbeG7mXQga2hvIGNo4bupYSIKKworIzogYXBwbHkuYzoxNTQKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1jYWNoZWQg4bufIG5nb8OgaSBt4buZdCBraG8gY2jhu6lhIgorCisjOiBhcHBseS5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGNodeG6qW4gYuG7iyBiaeG7g3UgdGjhu6ljIGNow61uaCBxdWkgZOG6pXUgduG6v3QgdGjhu51pIGdpYW4gKHRpbWVzdGFtcCByZWdleHApICIKICIlcyIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE1IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMwotbXNnaWQgIlJlbmFtZSBCcmFuY2giCi1tc2dzdHIgIsSQ4buVaSB0w6puIG5ow6FuaCIKKyM6IGFwcGx5LmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIKK21zZ3N0ciAidGhpIGjDoG5oIGJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eSB0cuG6oyB24buBICVkIGNobyDEkeG6p3UgdsOgbzogJXMiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyOAotbXNnaWQgIlJlbmFtZSIKLW1zZ3N0ciAixJDhu5VpIHTDqm4iCisjOiBhcHBseS5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgdMOqbiB04bqtcCB0aW4gdHJvbmcgbWnhur9uZyB2w6EgdOG6oWkgZMOybmcgJWQiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozOAotbXNnaWQgIkJyYW5jaDoiCi1tc2dzdHIgIk5ow6FuaDoiCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo0NgotbXNnaWQgIk5ldyBOYW1lOiIKLW1zZ3N0ciAiVMOqbiBt4bubaToiCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo4MQotbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKLW1zZ3N0ciAiSMOjeSBjaOG7jW4gbmjDoW5oIGPhuqduIMSR4buVaSB0w6puLiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwMiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiTmjDoW5oICclcycgxJHDoyBjw7MgcuG7k2kuIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTIzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHJlbmFtZSAnJXMnLiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buVaSB0w6puICclcycuIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTcKLW1zZ2lkICJTdGFydGluZy4uLiIKLW1zZ3N0ciAixJBhbmcga2jhu59pIMSR4buZbmcuLi4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNwotbXNnaWQgIkZpbGUgQnJvd3NlciIKLW1zZ3N0ciAiQuG7mSBkdXnhu4d0IHThuq1wIHRpbiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjEzMiBsaWIvYnJvd3Nlci50Y2w6MTQ5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyAlcy4uLiIKLW1zZ3N0ciAixJBhbmcgdOG6o2kgJXMuLi4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoxOTMKLW1zZ2lkICJbVXAgVG8gUGFyZW50XSIKLW1zZ3N0ciAiW1Thu5tpIGNoYSBt4bq5XSIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI3NSBsaWIvYnJvd3Nlci50Y2w6MjgyCi1tc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKLW1zZ3N0ciAiRHV54buHdCBjw6FjIHThuq1wIHRpbiBuaMOhbmgiCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyODggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MDYKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAyCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjkKLW1zZ2lkICJCcm93c2UiCi1tc2dzdHIgIlTDrG0gZHV54buHdCIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo4NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nICVzIGZyb20gJXMiCi1tc2dzdHIgIsSQYW5nIGzhuqV5IHbhu4EgJXMgdOG7qyAlcyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCi1tc2dzdHIgImfhurdwIGzhu5dpIG5naGnDqm0gdHLhu41uZzogS2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSAlcyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDYgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzAKLSM6IGxpYi9zc2hrZXkudGNsOjU1Ci1tc2dpZCAiQ2xvc2UiCi1tc2dzdHIgIsSQw7NuZyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCi1tc2dzdHIgIkNoxrBhIGPDsyBuaMOhbmggJyVzJyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgY+G6pXUgaMOsbmggZ2l0LXB1bGwgxJHGoW4gZ2nhuqNuIGTDoG5oIGNobyAnJXMnLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCi0iXG4iCi0iSXQgY2Fubm90IGZhc3QtZm9yd2FyZCB0byAlcy5cbiIKLSJBIG1lcmdlIGlzIHJlcXVpcmVkLiIKKyM6IGFwcGx5LmM6OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKIG1zZ3N0ciAiIgotIk5ow6FuaCAnJXMnIMSRw6Mgc+G6tW4gY8OzLlxuIgotIlxuIgotIktow7RuZyB0aOG7gyBmYXN0LWZvcndhcmQgdGjDoG5oICVzLlxuIgotIkLhuqFuIGPhuqduIHBo4bqjaSBow7JhIHRy4buZbi4iCisiZ2l0IGFwcGx5OiBnaXQtZGlmZiBzYWkgLSBj4bqnbiAvZGV2L251bGwsIG5oxrBuZyBs4bqhaSBuaOG6rW4gxJHGsOG7o2MgJXMgdHLDqm4gZMOybmcgJWQiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiS2jDtG5nIGjhu5cgdHLhu6MgY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luICclcycuIgorIzogYXBwbHkuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZ2l0LWRpZmYgc2FpIC0gdMOqbiB04bqtcCB0aW4gbeG7m2kga2jDtG5nIG5o4bqldCBxdcOhbiB0csOqbiBkw7JuZyAlZCIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgY+G6rXAgbmjhuq10ICclcycuIgorIzogYXBwbHkuYzo5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZ2l0LWRpZmYgc2FpIC0gdMOqbiB04bqtcCB0aW4gY8WpIGtow7RuZyBuaOG6pXQgcXXDoW4gdHLDqm4gZMOybmcgJWQiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjc0Ci1tc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgotbXNnc3RyICJWw7luZyBi4buHIHBow7NuZyAoY2jhu4kgbeG7pWMpIMSRw6MgYuG7iyBraMOzYSBy4buTaS4iCisjOiBhcHBseS5jOjkzNAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGdpdC1kaWZmIHNhaSAtIGPhuqduIOKAnC9kZXYvbnVsbOKAnSB0csOqbiBkw7JuZyAlZCIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKKyM6IGFwcGx5LmM6OTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBvbiBsaW5lICVkOiAlcyIKK21zZ3N0ciAiY2jhur8gxJHhu5kga2jDtG5nIGjhu6NwIGzhu4cgdHLDqm4gZMOybmcgJWQ6ICVzIgorCisjOiBhcHBseS5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb25zaXN0ZW50IGhlYWRlciBsaW5lcyAlZCBhbmQgJWQiCittc2dzdHIgInBo4bqnbiDEkeG6p3UgbcOidSB0aHXhuqtuIGTDsm5nICVkIHbDoCAlZCIKKworIzogYXBwbHkuYzoxMzcyCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgotbXNnc3RyICIiCi0iVHLhuqFuZyB0aMOhaSBxdcOpdCBraMO0bmcga2jhu5twIHbhu5tpIHRy4bqhbmcgdGjDoWkga2hvLlxuIgotIlxuIgotIkPDsyBHaXQga2jDoWMgxJHDoyBz4butYSBraG8gbsOgeSBr4buDIHThu6sgbOG6p24gcXXDqXQgY3Xhu5FpLiBD4bqnbiBxdcOpdCBs4bqhaSB0csaw4bubYyBraGkgdGjhu7FjICIKLSJoaeG7h24gdmnhu4djIGNodXnhu4NuIG5ow6FuaC5cbiIKLSJcbiIKLSJT4bq9IHRo4buxYyBoaeG7h24gdmnhu4djIHF1w6l0IGzhuqFpIG5nYXkgYsOieSBnaeG7nWkuXG4iCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCisicGjhuqduIMSR4bqndSBkaWZmIGNobyBnaXQgIHRoaeG6v3UgdGjDtG5nIHRpbiB0w6puIHThuq1wIHRpbiBraGkgZ+G7oSBi4buPIMSRaSAlZCB0cm9uZyAiCisidGjDoG5oIHBo4bqnbiBk4bqrbiDEkeG6p3UgdMOqbiBj4bunYSDEkcaw4budbmcgZOG6q24gKGTDsm5nICVkKSIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgotbXNnc3RyICJD4bqtcCBuaOG6rXQgdGjGsCBt4bulYyBsw6BtIHZp4buHYyB0aMOgbmggJyVzJy4uLiIKKyM6IGFwcGx5LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gKGxpbmUgJWQpIgorbXNnc3RyICJwaOG6p24gxJHhuqd1IGRpZmYgY2hvIGdpdCB0aGnhur91IHRow7RuZyB0aW4gdMOqbiB04bqtcCB0aW4gKGTDsm5nICVkKSIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDYKLW1zZ2lkICJmaWxlcyBjaGVja2VkIG91dCIKLW1zZ3N0ciAiY8OhYyB04bqtcCB0aW4gY+G6p24gbOG6pXkgcmEiCisjOiBhcHBseS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJjaGkgdGnhur90OiBkw7JuZyBraMO0bmcgY+G6p246ICUuKnMiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKLW1zZ3N0ciAiSOG7p3kgYuG7jyBs4bqleSByYSAnJXMnIChj4bqnbiBow7JhIHRy4buZbiBt4bupYyB04bqtcCB0aW4pLiIKKyM6IGFwcGx5LmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJtaeG6v25nIHbDoSBwaMOibiBt4bqjbmggbcOgIGtow7RuZyBjw7MgcGjhuqduIMSR4bqndSB04bqhaSBkw7JuZyAlZDogJS4qcyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzcKLW1zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKLW1zZ3N0ciAiQ+G6p24gbeG7qWMgaMOyYSB0cuG7mW4gdOG6rXAgdGluLiIKKyM6IGFwcGx5LmM6MTc1MworbXNnaWQgIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJ04bqtcCB0aW4gbeG7m2kgcGjhu6UgdGh14buZYyB2w6BvIG7hu5lpIGR1bmcgY8WpIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgotbXNnc3RyICLEkGFuZyDhu58gdHLDqm4gbmjDoW5oICclcycuIgorIzogYXBwbHkuYzoxNzU1Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAidOG6rXAgdGluIMSRw6MgeMOzYSB24bqrbiBjw7JuIG7hu5lpIGR1bmciCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDUyCisjOiBhcHBseS5jOjE3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJtaeG6v25nIHbDoSBo4buPbmcgdOG6oWkgZMOybmcgJWQiCisKKyM6IGFwcGx5LmM6MTgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAidOG6rXAgdGluIG3hu5tpICVzIHBo4bulIHRodeG7mWMgdsOgbyBu4buZaSBkdW5nIGPFqSIKKworIzogYXBwbHkuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgInThuq1wIHRpbiDEkcOjIHjDs2EgJXMgduG6q24gY8OybiBu4buZaSBkdW5nIgorCisjOiBhcHBseS5jOjE4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiKiogY+G6o25oIGLDoW86IHThuq1wIHRpbiAlcyB0cuG7nyBuw6puIHRy4buRbmcgcuG7l25nIG5oxrBuZyBraMO0bmcgYuG7iyB4w7NhIgorCisjOiBhcHBseS5jOjE5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAibWnhur9uZyB2w6EgxJHhu4tuaCBk4bqhbmcgbmjhu4sgcGjDom4gc2FpIGjhu49uZyB04bqhaSBkw7JuZyAlZDogJS4qcyIKKworIzogYXBwbHkuYzoyMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAibWnhur9uZyB2w6EgxJHhu4tuaCBk4bqhbmcgbmjhu4sgcGjDom4ga2jDtG5nIMSRxrDhu6NjIG5o4bqtbiByYSB04bqhaSBkw7JuZyAlZCIKKworIzogYXBwbHkuYzoyMTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgInbDoSBjaOG7iSB24bubaSDigJxyw6Fj4oCdIHThuqFpIGTDsm5nICVkIgorCisjOiBhcHBseS5jOjIyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBsacOqbiBr4bq/dCBt4buBbSAlcyIKKworIzogYXBwbHkuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIGhheSDEkeG7jWMgJXMiCisKKyM6IGFwcGx5LmM6MjkzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgInNhaSBraOG7n2kgxJHhuqd1IGTDsm5nOiDigJwlY+KAnSIKKworIzogYXBwbHkuYzozMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAiS2jhu5FpIGThu68gbGnhu4d1ICMlZCB0aMOgbmggY8O0bmcgdOG6oWkgJWQgKG9mZnNldCAlZCBkw7JuZykuIgorCisjOiBhcHBseS5jOjMwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGV4dCByZWR1Y2VkIHRvICglbGQvJWxkKSB0byBhcHBseSBmcmFnbWVudCBhdCAlZCIKK21zZ3N0ciAiTmfhu68gY+G6o25oIGLhu4sgZ2nhuqNtIHh14buRbmcgY8OybiAoJWxkLyVsZCkgxJHhu4Mgw6FwIGThu6VuZyBt4bqjbmggZOG7ryBsaeG7h3UgdOG6oWkgJWQiCisKKyM6IGFwcGx5LmM6MzA3NQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCi0iXG4iCi0iSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCi0iQ2hlY2tvdXQnLiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCiBtc2dzdHIgIiIKLSJC4bqhbiBoaeG7h24ga2jDtG5nIGPDsm4g4bufIG5ow6FuaCBu4buZaSBi4buZLlxuIgotIlxuIgotIk7hur91IGLhuqFuIG114buRbiB0csOqbiBt4buZdCBuaMOhbmgsIGjDo3kgdOG6oW8gbeG7mXQgY8OhaSB04burICfEkMOieSBsw6AgbOG6pXkgcmEgdMOhY2ggcuG7nWknLiIKKyJ0cm9uZyBraGkgxJFhbmcgdMOsbSBraeG6v20gY2hvOlxuIgorIiUuKnMiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCi1tc2dzdHIgIsSQw6MgbOG6pXkgcmEgJyVzJy4iCisjOiBhcHBseS5jOjMwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAidGhp4bq/dSBk4buvIGxp4buHdSBj4bunYSBtaeG6v25nIHbDoSDEkeG7i25oIGThuqFuZyBuaOG7iyBwaMOibiBjaG8g4oCcJXPigJ0iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKLW1zZ3N0ciAixJDhurd0IGzhuqFpICclcycgdGjDoG5oICclcycgc+G6vSBsw6BtIG3huqV0IG5o4buvbmcgbOG6p24gY2h1eeG7g24gZ2lhbyBzYXUgxJHDonk6IgorIzogYXBwbHkuYzozMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXZlcnNlLWFwcGx5IGEgYmluYXJ5IHBhdGNoIHdpdGhvdXQgdGhlIHJldmVyc2UgaHVuayB0byAnJXMnIgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIHJldmVyc2UtYXBwbHkgbeG7mXQgbWnhur9uZyB2w6Egbmjhu4sgcGjDom4gbcOgIGtow7RuZyDEkeG6o28gbmfGsOG7o2Mga2jDumMgdGjDoG5oICIKKyLigJwlc+KAnSIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NTcKLW1zZ2lkICJSZWNvdmVyaW5nIGxvc3QgY29tbWl0cyBtYXkgbm90IGJlIGVhc3kuIgotbXNnc3RyICJM4bqleSBs4bqhaSBuaOG7r25nIGzhuqduIGNodXnhu4NuIGdpYW8gxJHDoyBt4bqldCBsw6Aga2jDtG5nIGThu4UuIgorIzogYXBwbHkuYzozMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhcHBseSBiaW5hcnkgcGF0Y2ggdG8gJyVzJyB3aXRob3V0IGZ1bGwgaW5kZXggbGluZSIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyDDoXAgZOG7pW5nIG1p4bq/bmcgdsOhIG5o4buLIHBow6JuIHRow6BuaCDigJwlc+KAnSBtw6Aga2jDtG5nIGPDsyBkw7JuZyBjaOG7iSBt4bulYyDEkeG6p3kgIgorIsSR4bunIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0ICclcyc/IgotbXNnc3RyICLEkOG6t3QgbOG6oWkgJyVzJz8iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTY3IGxpYi9tZXJnZS50Y2w6MTY2IGxpYi90b29sc19kbGcudGNsOjMzNgotbXNnaWQgIlZpc3VhbGl6ZSIKLW1zZ3N0ciAiVHLhu7FjIHF1YW4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1Ci0jLCB0Y2wtZm9ybWF0CisjOiBhcHBseS5jOjMxNjMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCi0iXG4iCi0iVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKLSJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKLSJcbiIKLSJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKKyJ0aGUgcGF0Y2ggYXBwbGllcyB0byAnJXMnICglcyksIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IGNvbnRlbnRzLiIKIG1zZ3N0ciAiIgotIkfhurdwIGzhu5dpIGtoaSDEkeG6t3QgbmjDoW5oIGhp4buHbiBow6BuaC5cbiIKLSJcbiIKLSJUaMawIG3hu6VjIGzDoG0gdmnhu4djIGNo4buJIGNodXnhu4NuIGtow7RuZyBob8OgbiB0b8Ogbi4gIENow7puZyB0w7RpIGPhuq1wIG5o4bqtdCB0aMOgbmggY8O0bmcgIgotImPDoWMgdOG6rXAgdGluIGPhu6dhIGLhuqFuLCBuaMawbmcgbOG6oWkgZ+G6t3AgbOG7l2kga2hpIGPhuq1wIG5o4bqtdCBt4buZdCB04bqtcCB0aW4gY+G7p2EgR2l0LlxuIgotIlxuIgotIsSQaeG7gXUgbsOgeSDEkcOhbmcgbOG6vSBraMO0bmcgdGjhu4MgeOG6o3kgcmEuICAlcyBnaeG7nSBz4bq9IMSRw7NuZyBs4bqhaSB2w6AgxJHhuqd1IGjDoG5nLiIKKyJtaeG6v25nIHbDoSDDoXAgZOG7pW5nIGNobyDigJwlc+KAnSAoJXMpLCBjw6FpIG3DoCBraMO0bmcga2jhu5twIHbhu5tpIGPDoWMgbuG7mWkgZHVuZyBoaeG7h24gdOG6oWkuIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQxCi1tc2dpZCAiU2VsZWN0IgotbXNnc3RyICJDaOG7jW4iCisjOiBhcHBseS5jOjMxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHBhdGNoIGFwcGxpZXMgdG8gYW4gZW1wdHkgJyVzJyBidXQgaXQgaXMgbm90IGVtcHR5IgorbXNnc3RyICJtaeG6v25nIHbDoSDDoXAgZOG7pW5nIGNobyBt4buZdCDigJwlc+KAnSB0cuG7kW5nIHLhu5duZyBuaMawbmcgbsOzIGzhuqFpIGtow7RuZyB0cuG7kW5nIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjU1Ci1tc2dpZCAiRm9udCBGYW1pbHkiCi1tc2dzdHIgIkjhu40gcGjDtG5nIGNo4buvIgorIzogYXBwbHkuYzozMTg5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBuZWNlc3NhcnkgcG9zdGltYWdlICVzIGZvciAnJXMnIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIHBvc3RpbWFnZSAlcyBj4bqnbiB0aGnhur90IGNobyDigJwlc+KAnSIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo3NgotbXNnaWQgIkZvbnQgU2l6ZSIKLW1zZ3N0ciAiQ+G7oSBwaMO0bmcgY2jhu68iCisjOiBhcHBseS5jOjMyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgIm1p4bq/bmcgdsOhIMSR4buLbmggZOG6oW5nIG5o4buLIHBow6JuIGtow7RuZyDEkcaw4bujYyDDoXAgZOG7pW5nIGNobyDigJwlc+KAnSIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo5MwotbXNnaWQgIkZvbnQgRXhhbXBsZSIKLW1zZ3N0ciAiUGjDtG5nIGNo4buvIHbDrSBk4bulIgorIzogYXBwbHkuYzozMjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCB0byAnJXMnIGNyZWF0ZXMgaW5jb3JyZWN0IHJlc3VsdCAoZXhwZWN0aW5nICVzLCBnb3QgJXMpIgorbXNnc3RyICIiCisidsOhIG5o4buLIHBow6JuIGNobyDigJwlc+KAnSB04bqhbyByYSBr4bq/dCBxdeG6oyBraMO0bmcgY2jDrW5oIHjDoWMgKG1vbmcgY2jhu50gJXMsIGzhuqFpIG5o4bqtbiAiCisiJXMpIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwNQorIzogYXBwbHkuYzozMjMwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdsOhOiAlczolbGQiCisKKyM6IGFwcGx5LmM6MzM1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSByYSAlcyIKKworIzogYXBwbHkuYzozNDA1IGFwcGx5LmM6MzQxNiBhcHBseS5jOjM0NjIgbWlkeC5jOjYxIHNldHVwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHhu41jICVzIgorCisjOiBhcHBseS5jOjM0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBmcm9tICclcycgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAixJHhu41jIHThu6sg4oCcJXPigJ0gdsaw4bujdCByYSBuZ2/DoGkgbGnDqm4ga+G6v3QgbeG7gW0iCisKKyM6IGFwcGx5LmM6MzQ0MiBhcHBseS5jOjM2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiAlcyDEkcOjIGLhu4sgeMOzYSBob+G6t2MgxJHhu5VpIHTDqm4iCisKKyM6IGFwcGx5LmM6MzUyOCBhcHBseS5jOjM3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IgorbXNnc3RyICIlczoga2jDtG5nIHThu5NuIHThuqFpIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYXBwbHkuYzozNTM3IGFwcGx5LmM6MzcwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVzOiBraMO0bmcga2jhu5twIHRyb25nIG3hu6VjIGzhu6VjIgorCisjOiBhcHBseS5jOjM1NzIKK21zZ2lkICJyZXBvc2l0b3J5IGxhY2tzIHRoZSBuZWNlc3NhcnkgYmxvYiB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICJraG8gdGhp4bq/dSDEkeG7kWkgdMaw4bujbmcgYmxvYiBj4bqnbiB0aGnhur90IMSR4buDIHRy4bufIHbhu4EgdHLDqm4g4oCcMy13YXkgbWVyZ2XigJ0uIgorCisjOiBhcHBseS5jOjM1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHRocmVlLXdheSBtZXJnZS4uLlxuIgorbXNnc3RyICLEkGFuZyB0cuG7nyBs4bqhaSBow7JhIHRy4buZbiDigJwzLcSRxrDhu51uZ+KAneKAplxuIgorCisjOiBhcHBseS5jOjM1OTEgYXBwbHkuYzozNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgbuG7mWkgZHVuZyBoaeG7h24gaMOgbmggY+G7p2Eg4oCcJXPigJ0iCisKKyM6IGFwcGx5LmM6MzYwNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmFsbCBiYWNrIG9uIHRocmVlLXdheSBtZXJnZS4uLlxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgcXVheSB0cuG7nyBs4bqhaSDEkeG7gyBow7JhIHRy4buZbiBraeG7g3Ug4oCcdGhyZWUtd2F54oCd4oCmXG4iCisKKyM6IGFwcGx5LmM6MzYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgd2l0aCBjb25mbGljdHMuXG4iCittc2dzdHIgIsSQw6Mgw6FwIGThu6VuZyBtaeG6v25nIHbDoSAlcyB24bubaSBjw6FjIHh1bmcgxJHhu5l0LlxuIgorCisjOiBhcHBseS5jOjM2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIGNsZWFubHkuXG4iCittc2dzdHIgIsSQw6Mgw6FwIGThu6VuZyBtaeG6v25nIHbDoSAlcyBt4buZdCBjw6FjaCBz4bqhY2ggc+G6vS5cbiIKKworIzogYXBwbHkuYzozNjUyCittc2dpZCAicmVtb3ZhbCBwYXRjaCBsZWF2ZXMgZmlsZSBjb250ZW50cyIKK21zZ3N0ciAibG/huqFpIGLhu48gbWnhur9uZyB2w6EgxJHhu4MgbOG6oWkgbuG7mWkgZHVuZyB04bqtcCB0aW4iCisKKyM6IGFwcGx5LmM6MzcyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd3JvbmcgdHlwZSIKK21zZ3N0ciAiJXM6IHNhaSBraeG7g3UiCisKKyM6IGFwcGx5LmM6MzcyNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iCittc2dzdHIgIiVzIGPDsyBraeG7g3UgJW8sIGPhuqduICVvIgorCisjOiBhcHBseS5jOjM4NzggYXBwbHkuYzozODgwIHJlYWQtY2FjaGUuYzo4MzAgcmVhZC1jYWNoZS5jOjg1NgorIzogcmVhZC1jYWNoZS5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXRoICclcyciCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiBraMO0bmcgaOG7o3AgbOG7hyDigJwlc+KAnSIKKworIzogYXBwbHkuYzozOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IMSRw6MgY8OzIHThu6sgdHLGsOG7m2MgdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBhcHBseS5jOjM5MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlczogxJHDoyBz4bq1biBjw7MgdHJvbmcgdGjGsCBt4bulYyDEkWFuZyBsw6BtIHZp4buHYyIKKworIzogYXBwbHkuYzozOTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSIKK21zZ3N0ciAiY2jhur8gxJHhu5kgbeG7m2kgKCVvKSBj4bunYSAlcyBraMO0bmcga2jhu5twIHbhu5tpIGNo4bq/IMSR4buZIGPFqSAoJW8pIgorCisjOiBhcHBseS5jOjM5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICJjaOG6vyDEkeG7mSBt4bubaSAoJW8pIGPhu6dhICVzIGtow7RuZyBraOG7m3AgduG7m2kgY2jhur8gxJHhu5kgY8WpICglbykgY+G7p2EgJXMiCisKKyM6IGFwcGx5LmM6Mzk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAidOG6rXAgdGluIGNo4buLdSB0w6FjIMSR4buZbmcg4oCcJXPigJ0gdsaw4bujdCByYSBuZ2/DoGkgbGnDqm4ga+G6v3QgbeG7gW0iCisKKyM6IGFwcGx5LmM6Mzk4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiVzOiBtaeG6v25nIHbDoSBraMO0bmcgxJHGsOG7o2Mgw6FwIGThu6VuZyIKKworIzogYXBwbHkuYzo0MDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHBhdGNoICVzLi4uIgorbXNnc3RyICLEkGFuZyBraeG7g20gdHJhIG1p4bq/bmcgdsOhICVz4oCmIgorCisjOiBhcHBseS5jOjQwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAidGjDtG5nIHRpbiBzaGExIHRoaeG6v3UgaG/hurdjIGtow7RuZyBkw7luZyDEkcaw4bujYyBjaG8gbcO0LcSRdW4gJXMiCisKKyM6IGFwcGx5LmM6NDEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtb2RlIGNoYW5nZSBmb3IgJXMsIHdoaWNoIGlzIG5vdCBpbiBjdXJyZW50IEhFQUQiCittc2dzdHIgInRoYXkgxJHhu5VpIGNo4bq/IMSR4buZIGNobyAlcywgY8OhaSBtw6Aga2jDtG5nIHBo4bqjaSBsw6AgSEVBRCBoaeG7h24gdOG6oWkiCisKKyM6IGFwcGx5LmM6NDEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAoJXMpLiIKK21zZ3N0ciAidGjDtG5nIHRpbiBzaGExIGPDsm4gdGhp4bq/dSBoYXkga2jDtG5nIGTDuW5nIMSRxrDhu6NjKCVzKS4iCisKKyM6IGFwcGx5LmM6NDExNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRow6ptICVzIHbDoG8gY2jhu4kgbeG7pWMgdOG6oW0gdGjhu51pIgorCisjOiBhcHBseS5jOjQxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRlbXBvcmFyeSBpbmRleCB0byAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSBt4bulYyBs4bulYyB04bqhbSB2w6BvICVzIgorCisjOiBhcHBseS5jOjQyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ+G7oSBi4buPICVzIHThu6sgbeG7pWMgbOG7pWMiCisKKyM6IGFwcGx5LmM6NDI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgIm1p4bq/bmcgdsOhIHNhaSBo4buPbmcgY2hvIG3DtC3EkXVuLWNvbiAlcyIKKworIzogYXBwbHkuYzo0MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgdGjhu5FuZyBrw6ogduG7gSB04bqtcCB0aW4gJXMgbeG7m2kgaMahbiDEkcOjIMSRxrDhu6NjIHThuqFvIgorCisjOiBhcHBseS5jOjQzMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlIGZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyDigJxraG8gbMawdSDEkeG6sW5nIHNhdeKAnSBjaG8gdOG6rXAgdGluIMSRxrDhu6NjIHThuqFvIG3hu5tpIGjGoW4gJXMiCisKKyM6IGFwcGx5LmM6NDMxNiBhcHBseS5jOjQ0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB0aMOqbSBt4bulYyBuaOG7myDEkeG7h20gY2hvICVzIgorCisjOiBhcHBseS5jOjQzNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIHRvICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBnaGkgdsOgbyDigJwlc+KAnSIKKworIzogYXBwbHkuYzo0MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICLEkWFuZyDEkcOzbmcgdOG6rXAgdGluIOKAnCVz4oCdIgorCisjOiBhcHBseS5jOjQ0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIHbDoG8gdOG6rXAgdGluIOKAnCVz4oCdIGNo4bq/IMSR4buZICVvIgorCisjOiBhcHBseS5jOjQ1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIKK21zZ3N0ciAixJDDoyDDoXAgZOG7pW5nIG1p4bq/bmcgdsOhICVzIG3hu5l0IGPDoWNoIHPhuqFjaCBz4bq9LiIKKworIzogYXBwbHkuYzo0NTM5Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgImzhu5dpIG7hu5lpIGLhu5kiCisKKyM6IGFwcGx5LmM6NDU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gIsSQYW5nIMOhcCBk4bulbmcgbWnhur9uZyB2w6EgJSVzIHbhu5tpICVkIGzhuqduIHThu6sgY2jhu5Fp4oCmIgorCisjOiBhcHBseS5jOjQ1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICLEkWFuZyBj4bqvdCBuZ+G6r24gdMOqbiB04bqtcCB0aW4gLnJlaiB0aMOgbmggJS4qcy5yZWoiCisKKyM6IGFwcGx5LmM6NDU2MSBidWlsdGluL2ZldGNoLmM6OTAxIGJ1aWx0aW4vZmV0Y2guYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzIgorbXNnc3RyICJraMO0bmcgbeG7nyDEkcaw4bujYyDigJwlc+KAnSIKKworIzogYXBwbHkuYzo0NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIkto4buRaSBuaOG7myAjJWQgxJHGsOG7o2Mgw6FwIGThu6VuZyBn4buNbiBnw6BuZy4iCisKKyM6IGFwcGx5LmM6NDU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIsSQb+G6oW4gZOG7ryBsaeG7h3UgIyVkIGLhu4sgdOG7qyBjaOG7kWkuIgorCisjOiBhcHBseS5jOjQ2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCBwYXRjaCAnJXMnLiIKK21zZ3N0ciAiQuG7jyBxdWEgxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdLiIKKworIzogYXBwbHkuYzo0NzA2Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICJraMO0bmcgdGjhu6thIG5o4bqtbiDEkeG6p3UgdsOgbyIKKworIzogYXBwbHkuYzo0NzI2Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyB04bqtcCB0aW4gbMawdSBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGFwcGx5LmM6NDg4MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIHBhdGNoICclcyc6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyBtaeG6v25nIHbDoSDigJwlc+KAnTogJXMiCisKKyM6IGFwcGx5LmM6NDkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvciIKK21zZ2lkX3BsdXJhbCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyWzBdICLEkcOjIGNo4bqlbSBk4bupdCAlZCBs4buXaSBraG/huqNuZyB0cuG6r25nIgorCisjOiBhcHBseS5jOjQ5MTYgYXBwbHkuYzo0OTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIGTDsm5nIHRow6ptIGtob+G6o25nIHRy4bqvbmcgbOG7l2kuIgorCisjOiBhcHBseS5jOjQ5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQgZMOybmcgxJHGsOG7o2Mgw6FwIGThu6VuZyBzYXUga2hpIHPhu61hIGPDoWMgbOG7l2kga2hv4bqjbmcgdHLhuq9uZy4iCisKKyM6IGFwcGx5LmM6NDk0MCBidWlsdGluL2FkZC5jOjYxMiBidWlsdGluL212LmM6MzAxIGJ1aWx0aW4vcm0uYzo0MDYKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgdOG6rXAgdGluIGzGsHUgYuG6o25nIG3hu6VjIGzhu6VjIG3hu5tpIgorCisjOiBhcHBseS5jOjQ5NjgKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJraMO0bmcgw6FwIGThu6VuZyBjw6FjIHRoYXkgxJHhu5VpIGto4bubcCB24bubaSDEkcaw4budbmcgZOG6q24gxJHDoyBjaG8iCisKKyM6IGFwcGx5LmM6NDk3MQorbXNnaWQgImFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgIsOhcCBk4bulbmcgY8OhYyB0aGF5IMSR4buVaSBraOG7m3AgduG7m2kgxJHGsOG7nW5nIGThuqtuIMSRw6MgY2hvIgorCisjOiBhcHBseS5jOjQ5NzMgYnVpbHRpbi9hbS5jOjIyNjAKK21zZ2lkICJudW0iCittc2dzdHIgInPhu5EiCisKKyM6IGFwcGx5LmM6NDk3NAorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICJn4buhIGLhu48gPHPhu5E+IGThuqV1IGfhuqFjaCBjaMOpbyBk4bqrbiDEkeG6p3UgdOG7qyDEkcaw4budbmcgZOG6q24gZGlmZiBj4buVIMSRaeG7g24iCisKKyM6IGFwcGx5LmM6NDk3NworbXNnaWQgImlnbm9yZSBhZGRpdGlvbnMgbWFkZSBieSB0aGUgcGF0Y2giCittc2dzdHIgImzhu50gxJFpIHBo4bqnbiBi4buVIHh1bmcgxJHGsOG7o2MgdOG6oW8gcmEgYuG7n2kgbWnhur9uZyB2w6EiCisKKyM6IGFwcGx5LmM6NDk3OQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiIgorInRoYXkgdsOsIMOhcCBk4bulbmcgbeG7mXQgbWnhur9uZyB2w6EsIGvhur90IHh14bqldCBr4bq/dCBxdeG6oyB04burIGzhu4duaCBkaWZmc3RhdCBjaG8gxJHhuqd1IHJhIgorCisjOiBhcHBseS5jOjQ5ODMKK21zZ2lkICJzaG93IG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIgorbXNnc3RyICIiCisiaGnhu4NuIHRo4buLIHPhu5EgbMaw4bujbmcgY8OhYyBkw7JuZyDEkcaw4bujYyB0aMOqbSB2w6BvIHbDoCB4w7NhIMSRaSB0aGVvIGvDvSBoaeG7h3UgdGjhuq1wIHBow6JuIgorCisjOiBhcHBseS5jOjQ5ODUKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IgorbXNnc3RyICJ0aGF5IHbDrCDDoXAgZOG7pW5nIG3hu5l0IG1p4bq/bmcgdsOhLCBr4bq/dCB4deG6pXQga+G6v3QgcXXhuqMgY2hvIMSR4bqndSB2w6BvIgorCisjOiBhcHBseS5jOjQ5ODcKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIgorbXNnc3RyICJ0aGF5IHbDrCDDoXAgZOG7pW5nIG1p4bq/bmcgdsOhLCBow6N5IHhlbSB4ZW0gbWnhur9uZyB2w6EgY8OzIHRow61jaCBo4bujcCBraMO0bmciCisKKyM6IGFwcGx5LmM6NDk4OQorbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAiaMOjeSBjaOG6r2MgY2jhuq9uIGzDoCBtaeG6v25nIHbDoSB0aMOtY2ggaOG7o3AgduG7m2kgYuG6o25nIG3hu6VjIGzhu6VjIGhp4buHbiBow6BuaCIKKworIzogYXBwbHkuYzo0OTkxCittc2dpZCAibWFyayBuZXcgZmlsZXMgd2l0aCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorbXNnc3RyICLEkcOhbmggZOG6pXUgY8OhYyB04bqtcCB0aW4gbeG7m2kgduG7m2kg4oCcZ2l0IGFkZCAtLWludGVudC10by1hZGTigJ0iCisKKyM6IGFwcGx5LmM6NDk5MworbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLDoXAgZOG7pW5nIG3hu5l0IG1p4bq/bmcgdsOhIG3DoCBraMO0bmcgxJHhu5luZyBjaOG6oW0gxJHhur9uIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGFwcGx5LmM6NDk5NQorbXNnaWQgImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiCittc2dzdHIgImNo4bqlcCBuaOG6rW4gbeG7mXQgbWnhur9uZyB2w6EgbcOgIGtow7RuZyDEkeG7mW5nIGNo4bqhbSDEkeG6v24gY8OieSBsw6BtIHZp4buHYyIKKworIzogYXBwbHkuYzo0OTk4Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgIiIKKyLEkeG7k25nIHRo4budaSDDoXAgZOG7pW5nIG1p4bq/bmcgdsOhIChkw7luZyB24bubaSB0w7l5IGNo4buNbiAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorCisjOiBhcHBseS5jOjUwMDAKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICJ0aOG7rSBow7JhIHRy4buZbiBraeG7g3UgdGhyZWUtd2F5IG7hur91IHZp4buHYyB2w6Ega2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gxJHGsOG7o2MiCisKKyM6IGFwcGx5LmM6NTAwMgorbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisieMOieSBk4buxbmcgYuG6o25nIG3hu6VjIGzhu6VjIHThuqFtIHRo4budaSB0csOqbiBjxqEgc+G7nyB0aMO0bmcgdGluIGLhuqNuZyBt4bulYyBs4bulYyDEkcaw4bujYyBuaMO6bmciCisKKyM6IGFwcGx5LmM6NTAwNSBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTczIGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjQKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiY8OhYyDEkcaw4budbmcgZOG6q24gYuG7iyBuZ8SDbiBjw6FjaCBi4bufaSBrw70gdOG7sSBOVUxMIgorCisjOiBhcHBseS5jOjUwMDcKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgIsSR4bqjbSBi4bqjbyBy4bqxbmcgY8OzIMOtdCBuaOG6pXQgPG4+IGTDsm5nIG5n4buvIGPhuqNuaCBraOG7m3AiCisKKyM6IGFwcGx5LmM6NTAwOCBidWlsdGluL2FtLmM6MjIzOSBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk4CisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMCBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDU3IGJ1aWx0aW4vcmViYXNlLmM6MTUwOAorbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAiaMOgbmggxJHhu5luZyIKKworIzogYXBwbHkuYzo1MDA5Cittc2dpZCAiZGV0ZWN0IG5ldyBvciBtb2RpZmllZCBsaW5lcyB0aGF0IGhhdmUgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgInTDrG0gdGjhuqV5IG3hu5l0IGTDsm5nIG3hu5tpIGhv4bq3YyBi4buLIHPhu61hIMSR4buVaSBtw6AgbsOzIGPDsyBs4buXaSBkbyBraG/huqNuZyB0cuG6r25nIgorCisjOiBhcHBseS5jOjUwMTIgYXBwbHkuYzo1MDE1Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIKK21zZ3N0ciAibOG7nSDEkWkgc+G7sSB0aGF5IMSR4buVaSBkbyBraG/huqNuZyB0cuG6r25nIGfDonkgcmEga2hpIHTDrG0gbmfhu68gY+G6o25oIgorCisjOiBhcHBseS5jOjUwMTgKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAiw6FwIGThu6VuZyBtaeG6v25nIHbDoSB0aGVvIGNoaeG7gXUgbmfGsOG7o2MiCisKKyM6IGFwcGx5LmM6NTAyMAorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICLEkeG7q25nIGh5IHbhu41uZyBjw7Mgw610IG5o4bqldCBt4buZdCBkw7JuZyBuZ+G7ryBj4bqjbmgiCisKKyM6IGFwcGx5LmM6NTAyMgorbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICLEkeG7gyBs4bqhaSBraOG7kWkgZOG7ryBsaeG7h3UgYuG7iyB04burIGNo4buRaSB0cm9uZyBjw6FjIHThuq1wIHRpbiAqLnJlaiB0xrDGoW5nIOG7qW5nIgorCisjOiBhcHBseS5jOjUwMjQKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAiY2hvIHBow6lwIGNo4buTbmcga2jhu5FpIG5o4bubIgorCisjOiBhcHBseS5jOjUwMjUgYnVpbHRpbi9hZGQuYzozMjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMgorIzogYnVpbHRpbi9jb21taXQuYzoxMzYwIGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk4IGJ1aWx0aW4vZnNjay5jOjc3NAorIzogYnVpbHRpbi9sb2cuYzoyMTY2IGJ1aWx0aW4vbXYuYzoxMjMgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICJjaGkgdGnhur90IgorCisjOiBhcHBseS5jOjUwMjcKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorIsSRw6MgZMOyIHTDrG0gdGjhuqV5IGR1bmcgc2FpIGtow7RuZyBjaMOtbmggeMOhYyB0aGnhur91IGTDsm5nIG3hu5tpIHThuqFpIGN14buRaSB04bqtcCB0aW4iCisKKyM6IGFwcGx5LmM6NTAzMAorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAia2jDtG5nIHRpbiBz4buRIGzGsOG7o25nIGTDsm5nIHRyb25nIHBo4bqnbiDEkeG6p3Uga2jhu5FpIGThu68gbGnhu4d1IgorCisjOiBhcHBseS5jOjUwMzIgYnVpbHRpbi9hbS5jOjIyNDgKK21zZ2lkICJyb290IgorbXNnc3RyICJn4buRYyIKKworIzogYXBwbHkuYzo1MDMzCittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAidHJlbyB0aMOqbSA8cm9vdD4gdsOgbyB04bqldCBj4bqjIGPDoWMgdMOqbiB04bqtcCB0aW4iCisKKyM6IGFyY2hpdmUuYzoxNAorbXNnaWQgImdpdCBhcmNoaXZlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBhcmNoaXZlIFs8Y8OhYyB0w7l5IGNo4buNbj5dIDx0cmVlLWlzaD4gWzwvxJHGsOG7nW5nL2ThuqtuPuKApl0iCisKKyM6IGFyY2hpdmUuYzoxNQorbXNnaWQgImdpdCBhcmNoaXZlIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MTYKIG1zZ2lkICIiCi0iVGhpcyBpcyBleGFtcGxlIHRleHQuXG4iCi0iSWYgeW91IGxpa2UgdGhpcyB0ZXh0LCBpdCBjYW4gYmUgeW91ciBmb250LiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKIG1zZ3N0ciAiIgotIsSQw6J5IGzDoCBjaOG7ryBt4bqrdS5cbiIKLSJO4bq/dSBi4bqhbiB0aMOtY2ggY2jhu68gbmjGsCB0aOG6vyBuw6B5IHRow6wgY2jhu41uIHBow7RuZyBjaOG7ryBuw6B5LiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8a2hvPiBbLS1leGVjIDxs4buHbmg+XSBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8dHJlZS1pc2g+IFs8LyIKKyLEkcaw4budbmcvZOG6q24+4oCmXSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMgotbXNnaWQgIkdpdCBHdWkiCi1tc2dzdHIgIkdpdCBHdWkiCisjOiBhcmNoaXZlLmM6MTcKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8a2hvPiBbLS1leGVjIDxs4buHbmg+XSAtLWxpc3QiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTYKLW1zZ2lkICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiCi1tc2dzdHIgIlThuqFvIGtobyBt4bubaSIKKyM6IGFyY2hpdmUuYzozNzIgYnVpbHRpbi9hZGQuYzoxODEgYnVpbHRpbi9hZGQuYzo1ODggYnVpbHRpbi9ybS5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICLEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24g4oCcJXPigJ0ga2jDtG5nIGto4bubcCB24bubaSBi4bqldCBr4buzIHThuq1wIHRpbiBuw6BvIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk3Ci1tc2dpZCAiTmV3Li4uIgotbXNnc3RyICJN4bubaS4uLiIKKyM6IGFyY2hpdmUuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWY6ICUuKnMiCittc2dzdHIgImtow7RuZyBjw7MgdGhhbSBjaGnhur91IG7DoG8gbmjGsCB0aOG6vzogJS4qcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODAKLW1zZ2lkICJDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5IgotbXNnc3RyICJOaMOibiBi4bqjbiBt4buZdCBraG8gc+G6tW4gY8OzIgorIzogYXJjaGl2ZS5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJXMiCittc2dzdHIgImtow7RuZyBwaOG6o2kgbMOgIHTDqm4gxJHhu5FpIHTGsOG7o25nIGjhu6NwIGzhu4c6IOKAnCVz4oCdIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExNQotbXNnaWQgIkNsb25lLi4uIgotbXNnc3RyICJOaMOibiBi4bqjbi4uLiIKKyM6IGFyY2hpdmUuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdHJlZSBvYmplY3Q6ICVzIgorbXNnc3RyICJraMO0bmcgcGjhuqNpIGzDoCDEkeG7kWkgdMaw4bujbmcgY8OieTog4oCcJXPigJ0iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTIyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxOQotbXNnaWQgIk9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiTeG7nyBt4buZdCBraG8gxJHDoyBjw7MuIgorIzogYXJjaGl2ZS5jOjQyNgorbXNnaWQgImN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgdW50cmFja2VkIgorbXNnc3RyICJ0aMawIG3hu6VjIGzDoG0gdmnhu4djIGhp4buHbiBow6BuaCBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTI4Ci1tc2dpZCAiT3Blbi4uLiIKLW1zZ3N0ciAiTeG7ny4uLiIKKyM6IGFyY2hpdmUuYzo0NTcKK21zZ2lkICJmbXQiCittc2dzdHIgIsSR4buLbmhfZOG6oW5nIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE0MQotbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCi1tc2dzdHIgIkPDoWMga2hvIG3hu5tpIGTDuW5nIgorIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICLEkeG7i25oIGThuqFuZyBsxrB1IHRy4buvIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE0NwotbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgotbXNnc3RyICJN4bufIGtobyBt4bubaSBkw7luZzoiCisjOiBhcmNoaXZlLmM6NDU4IGJ1aWx0aW4vbG9nLmM6MTY1MworbXNnaWQgInByZWZpeCIKK21zZ3N0ciAidGnhu4FuX3Thu5EiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzE1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIyCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB04bqhbyBraG8gJXM6IgorIzogYXJjaGl2ZS5jOjQ1OQorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgIm7hu5FpIHRow6ptIHRp4buBbiB04buRIHbDoG8gdOG7q25nIMSRxrDhu51uZyBk4bqrbiB04bqtcCB0aW4gdHJvbmcga2hvIGzGsHUiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDAxCi1tc2dpZCAiRGlyZWN0b3J5OiIKLW1zZ3N0ciAiVGjGsCBt4bulYzoiCisjOiBhcmNoaXZlLmM6NDYwIGJ1aWx0aW4vYmxhbWUuYzo4NjEgYnVpbHRpbi9ibGFtZS5jOjg2NSBidWlsdGluL2JsYW1lLmM6ODY2CisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE3IGJ1aWx0aW4vY29uZmlnLmM6MTMwIGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYyCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2NCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OCBidWlsdGluL2dyZXAuYzo4ODcKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUgYnVpbHRpbi9scy1maWxlcy5jOjU2MCBidWlsdGluL2xzLWZpbGVzLmM6NTYzCisjOiBidWlsdGluL25vdGVzLmM6NDEyIGJ1aWx0aW4vbm90ZXMuYzo1NzggYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjMKKyM6IHBhcnNlLW9wdGlvbnMuaDoxOTAKK21zZ2lkICJmaWxlIgorbXNnc3RyICJ04bqtcF90aW4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUyCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTMKLW1zZ2lkICJHaXQgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiS2hvIEdpdCIKKyM6IGFyY2hpdmUuYzo0NjEgYnVpbHRpbi9hcmNoaXZlLmM6OTAKK21zZ2lkICJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiCittc2dzdHIgImdoaSBraG8gbMawdSB2w6BvIHThuq1wIHRpbiBuw6B5IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ1NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIlRoxrAgbeG7pWMgJXMgxJHDoyBz4bq1biBjw7MuIgorIzogYXJjaGl2ZS5jOjQ2MworbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIsSR4buNYyAuZ2l0YXR0cmlidXRlcyB0cm9uZyB0aMawIG3hu6VjIGzDoG0gdmnhu4djIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZpbGUgJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJU4bqtcCB0aW4gJXMgxJHDoyBjw7Mgc+G6tW4uIgorIzogYXJjaGl2ZS5jOjQ2NAorbXNnaWQgInJlcG9ydCBhcmNoaXZlZCBmaWxlcyBvbiBzdGRlcnIiCittc2dzdHIgImxp4buHdCBrw6ogY8OhYyB04bqtcCB0aW4gxJHGsOG7o2MgbMawdSB0cuG7ryB2w6BvIHN0ZGVyciAoxJHhuqd1IHJhIGzhu5dpIHRpw6p1IGNodeG6qW4pIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3NQotbXNnaWQgIkNsb25lIgotbXNnc3RyICJOaMOibiBi4bqjbiIKKyM6IGFyY2hpdmUuYzo0NjUKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICJjaOG7iSBsxrB1IChraMO0bmcgbsOpbikiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg4Ci1tc2dpZCAiU291cmNlIExvY2F0aW9uOiIKLW1zZ3N0ciAiVuG7iyB0csOtIG5ndeG7k246IgorIzogYXJjaGl2ZS5jOjQ2NgorbXNnaWQgImNvbXByZXNzIGZhc3RlciIKK21zZ3N0ciAibsOpbiBuaGFuaCBoxqFuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NwotbXNnaWQgIlRhcmdldCBEaXJlY3Rvcnk6IgotbXNnc3RyICJUaMawIG3hu6VjIMSRw61jaDoiCisjOiBhcmNoaXZlLmM6NDc0Cittc2dpZCAiY29tcHJlc3MgYmV0dGVyIgorbXNnc3RyICJuw6luIG5o4buPIGjGoW4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA3Ci1tc2dpZCAiQ2xvbmUgVHlwZToiCi1tc2dzdHIgIktp4buDdSBuaMOibiBi4bqjbjoiCisjOiBhcmNoaXZlLmM6NDc3Cittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICJsaeG7h3Qga8OqIGPDoWMga2nhu4N1IG7DqW4gxJHGsOG7o2MgaOG7lyB0cuG7oyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTIKLW1zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCi1tc2dzdHIgIlRpw6p1IGNodeG6qW4gKE5oYW5oLCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKKyM6IGFyY2hpdmUuYzo0NzkgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9jbG9uZS5jOjExMyBidWlsdGluL2Nsb25lLmM6MTE2CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMQorbXNnaWQgInJlcG8iCittc2dzdHIgImtobyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTcKLW1zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCi1tc2dzdHIgIlNhbyBjaMOpcCB0b8OgbiBi4buZIChDaOG6rW0gaMahbiwgUmVkdW5kYW50IEJhY2t1cCkiCisjOiBhcmNoaXZlLmM6NDgwIGJ1aWx0aW4vYXJjaGl2ZS5jOjkyCittc2dpZCAicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iCittc2dzdHIgIm5o4bqtbiBraG8gbsOpbiB04burIGtobyBjaOG7qWEgPGtobz4gdHLDqm4gbcOheSBjaOG7pyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjIKLW1zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKLW1zZ3N0ciAiQ2hpYSBz4bq7IChOaGFuaCBuaOG6pXQsIEtow7RuZyBuw6puIGTDuW5nLCBObyBCYWNrdXApIgorIzogYXJjaGl2ZS5jOjQ4MSBidWlsdGluL2FyY2hpdmUuYzo5MyBidWlsdGluL2RpZmZ0b29sLmM6NzE1CisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAibOG7h25oIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYwNQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MjEKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCi1tc2dzdHIgIktow7RuZyBwaOG6o2kgbMOgIGtobyBnaXQ6ICVzIgorIzogYXJjaGl2ZS5jOjQ4MiBidWlsdGluL2FyY2hpdmUuYzo5NAorbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIMSR4bq/biBs4buHbmggZ2l0LXVwbG9hZC1wYWNrIHRyw6puIG3DoXkgY2jhu6ciCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk0Ci1tc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgotbXNnc3RyICJUacOqdSBjaHXhuqluIGNo4buJIHPhurVuIHPDoG5nIHbhu5tpIGtobyBu4buZaSBi4buZLiIKKyM6IGFyY2hpdmUuYzo0ODkKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLXJlbW90ZSIKK21zZ3N0ciAiR+G6t3AgdMO5eSBjaOG7jW4ga2jDtG5nIGPhuqduIC0tcmVtb3RlIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5OAotbXNnaWQgIlNoYXJlZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIidDaGlhIHPhursnIGNo4buJIHPhurVuIHPDoG5nIHbhu5tpIGtobyBu4buZaSBi4buZLiIKKyM6IGFyY2hpdmUuYzo0OTEKK21zZ2lkICJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gLS1leGVjIGNo4buJIGPDsyB0aOG7gyDEkcaw4bujYyBkw7luZyBjw7luZyB24bubaSAtLXJlbW90ZSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2NhdGlvbiAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIk1p4buBbiDEkeG7i2EgcGjGsMahbmcgJXMgxJHDoyBz4bq1biBjw7MuIgorIzogYXJjaGl2ZS5jOjQ5MworbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tb3V0cHV0IgorbXNnc3RyICJH4bq3cCB0w7l5IGNo4buNbiBraMO0bmcgY+G6p24gLS1vdXRwdXQiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjMwCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBj4bqldSBow6xuaCBi4bqjbiBn4buRYyIKKyM6IGFyY2hpdmUuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBhcmNoaXZlIGZvcm1hdCAnJXMnIgorbXNnc3RyICJLaMO0bmcgaGnhu4N1IMSR4buLbmggZOG6oW5nIOKAnCVz4oCdIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MgotbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCi1tc2dzdHIgIsSQYW5nIMSR4bq/bSBz4buRIMSR4buRaSB0xrDhu6NuZyIKKyM6IGFyY2hpdmUuYzo1MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXJndW1lbnQgbm90IHN1cHBvcnRlZCBmb3IgZm9ybWF0ICclcyc6IC0lZCIKK21zZ3N0ciAiVGhhbSBz4buRIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIGNobyDEkeG7i25oIGThuqFuZyDigJwlc+KAnTogLSVkIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MwotbXNnaWQgImJ1Y2tldHMiCi1tc2dzdHIgInjDtCIKKyM6IGFyY2hpdmUtdGFyLmM6MTI1IGFyY2hpdmUtemlwLmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJlYW0gYmxvYiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHN0cmVhbSBibG9iIOKAnCVz4oCdIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIHNhbyBjaMOpcCBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCisjOiBhcmNoaXZlLXRhci5jOjI2NiBhcmNoaXZlLXppcC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBmaWxlIG1vZGU6IDAlbyAoU0hBMTogJXMpIgorbXNnc3RyICJjaOG6vyDEkeG7mSB04bqtcCB0aW4gbOG7pWMga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6M6IDAlbyAoU0hBMTogJXMpIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCi1tc2dzdHIgIktow7RuZyBjw7MgZ8OsIMSR4buDIG5ow6JuIGLhuqNuIHThu6sgJXMiCisjOiBhcmNoaXZlLXRhci5jOjI5MyBhcmNoaXZlLXppcC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTkKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMxCi1tc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgotbXNnc3RyICJOaMOhbmggJ21hc3RlcicgY2jGsGEgxJHGsOG7o2Mga2jhu59pIHThuqFvLiIKKyM6IGFyY2hpdmUtdGFyLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnJXMnIGZpbHRlciIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGLhuq90IMSR4bqndSBi4buZIGzhu41jIOKAnCVz4oCdIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxOAotbXNnaWQgIkhhcmRsaW5rcyBhcmUgdW5hdmFpbGFibGUuICBGYWxsaW5nIGJhY2sgdG8gY29weWluZy4iCi1tc2dzdHIgIkxpw6puIGvhur90IGPhu6luZyBraMO0bmcgc+G6tW4gc8OgbmcuIFRy4bufIGzhuqFpIGNo4bq/IMSR4buZIHNhbyBjaMOpcC4iCisjOiBhcmNoaXZlLXRhci5jOjQ2OAorbXNnaWQgInVuYWJsZSB0byByZWRpcmVjdCBkZXNjcmlwdG9yIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY2h1eeG7g24gaMaw4bubbmcgbcO0IHThuqMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzMwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2xvbmluZyBmcm9tICVzIgotbXNnc3RyICLEkGFuZyBuaMOibiBi4bqjbiB04burICVzIgorIzogYXJjaGl2ZS10YXIuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWx0ZXIgcmVwb3J0ZWQgZXJyb3IiCittc2dzdHIgImLhu5kgbOG7jWMg4oCcJXPigJ0gxJHDoyBiw6FvIGPDoW8gbOG7l2kiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzYxCi1tc2dpZCAiQ29weWluZyBvYmplY3RzIgotbXNnc3RyICLEkGFuZyBjaMOpcCBjw6FjIMSR4buRaSB0xrDhu6NuZyIKKyM6IGFyY2hpdmUtemlwLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggaXMgbm90IHZhbGlkIFVURi04OiAlcyIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIGtow7RuZyBo4bujcCBs4buHIFVURi04OiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NjIKLW1zZ2lkICJLaUIiCi1tc2dzdHIgIktpQiIKKyM6IGFyY2hpdmUtemlwLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gcXXDoSBkw6BpICglZCBrw70gdOG7sSwgU0hBMTogJXMpOiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgY2jDqXAgxJHhu5FpIHTGsOG7o25nOiAlcyIKKyM6IGFyY2hpdmUtemlwLmM6NDgwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMxIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGUgZXJyb3IgKCVkKSIKK21zZ3N0ciAibOG7l2kgZ2nhuqNpIG7DqW4gKCVkKSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTYKLW1zZ2lkICJMaW5raW5nIG9iamVjdHMiCi1tc2dzdHIgIsSQYW5nIGxpw6puIGvhur90IGPDoWMgxJHhu5FpIHTGsOG7o25nIgorIzogYXJjaGl2ZS16aXAuYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZXN0YW1wIHRvbyBsYXJnZSBmb3IgdGhpcyBzeXN0ZW06ICU8UFJJdU1BWD4iCittc2dzdHIgImThuqV1IHbhur90IHRo4budaSBnaWFuIGzDoCBxdcOhIGzhu5tuIGNobyBo4buHIHRo4buRbmcgbsOgeTogJTxQUkl1TUFYPiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTcKLW1zZ2lkICJvYmplY3RzIgorIzogYXR0ci5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lIgorbXNnc3RyICIlLipzIGtow7RuZyBwaOG6o2kgdMOqbiB0aHXhu5ljIHTDrW5oIGjhu6NwIGzhu4ciCisKKyM6IGF0dHIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbm90IGFsbG93ZWQ6ICVzOiVkIgorbXNnc3RyICIlcyBraMO0bmcgxJHGsOG7o2MgcGjDqXA6ICVzOiVkIgorCisjOiBhdHRyLmM6NDA5Cittc2dpZCAiIgorIk5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBpZ25vcmVkIGluIGdpdCBhdHRyaWJ1dGVzXG4iCisiVXNlICdcXCEnIGZvciBsaXRlcmFsIGxlYWRpbmcgZXhjbGFtYXRpb24uIgorbXNnc3RyICIiCisiQ8OhYyBt4bqrdSBk4bqhbmcgcGjhu6cgxJHhu4tuaCBi4buLIGPhuqVtIGTDuW5nIGNobyBjw6FjIHRodeG7mWMgdMOtbmggY+G7p2EgZ2l0XG4iCisiRMO5bmcg4oCcXFwh4oCdIGNobyBjw6FjIGNodeG7l2kgdsSDbiBi4bqjbiBjw7MgZOG6pXUgY2jhuqVtIHRoYW4gZOG6q24gxJHhuqd1LiIKKworIzogYmlzZWN0LmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiCittc2dzdHIgIk7hu5lpIGR1bmcgxJHGsOG7o2MgdHLDrWNoIGThuqtuIHNhaSB0cm9uZyB04bqtcCB0aW4g4oCcJXPigJ06ICVzIgorCisjOiBiaXNlY3QuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICJDaMO6bmcgdMO0aSBraMO0bmcgYmlzZWN0IHRow6ptIG7hu69hIVxuIgorCisjOiBiaXNlY3QuYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgY29tbWl0IG5hbWUgJXMiCittc2dzdHIgIktow7RuZyBwaOG6o2kgdMOqbiDEkeG7kWkgdMaw4bujbmcgY29tbWl0ICVzIGjhu6NwIGzhu4ciCisKKyM6IGJpc2VjdC5jOjc3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiSMOyYSB0cuG7mW4gdHLDqm4gJXMgbMOgIHNhaS5cbiIKKyLEkGnhu4F1IMSRw7MgY8OzIG5naMSpYSBsw6AgbOG7l2kgxJHDoyDEkcaw4bujYyBz4butYSBjaOG7r2EgZ2nhu69hICVzIHbDoCBbJXNdLlxuIgorCisjOiBiaXNlY3QuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIG5ldy5cbiIKKyJUaGUgcHJvcGVydHkgaGFzIGNoYW5nZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIkjDsmEgdHLhu5luIHRyw6puICVzIGzDoCBt4bubaS5cbiIKKyJH4bqnbiBuaMawIGNo4bqvYyBjaOG6r24gbMOgIGPDsyB0aGF5IMSR4buVaSBnaeG7r2EgJXMgdsOgIFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIkjDsmEgdHLhu5luIHRyw6puICVzIGzDoCAlcy5cbiIKKyLEkGnhu4F1IMSRw7MgY8OzIG5naMSpYSBsw6AgbOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnSDEkeG6p3UgdGnDqm4gbMOgIGdp4buvYSAlcyB2w6AgWyVzXS5cbiIKKworIzogYmlzZWN0LmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTb21lICVzIHJldnMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlICVzIHJldi5cbiIKKyJnaXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS5cbiIKKyJNYXliZSB5b3UgbWlzdG9vayAlcyBhbmQgJXMgcmV2cz9cbiIKK21zZ3N0ciAiIgorIk3hu5l0IHPhu5EgxJFp4buDbSB4w6l0IGR1eeG7h3QgJXMga2jDtG5nIHBo4bqjaSB04buVIHRpw6puIGPhu6dhIMSRaeG7g20geMOpdCBkdXnhu4d0ICVzLlxuIgorImdpdCBiaXNlY3Qga2jDtG5nIHRo4buDIGzDoG0gdmnhu4djIMSRw7puZyDEkeG6r24gdHJvbmcgdHLGsOG7nW5nIGjhu6NwIG7DoHkuXG4iCisiTGnhu4d1IGPDsyBwaOG6o2kgYuG6oW4gbmjhuqdtIGzhuqtuIGPDoWMgxJFp4buDbSAlcyB2w6AgJXMga2jDtG5nP1xuIgorCisjOiBiaXNlY3QuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBtZXJnZSBiYXNlIGJldHdlZW4gJXMgYW5kIFslc10gbXVzdCBiZSBza2lwcGVkLlxuIgorIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCAlcyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgJXMuXG4iCisiV2UgY29udGludWUgYW55d2F5LiIKK21zZ3N0ciAiIgorImjDsmEgdHLhu5luIHRyw6puIGPGoSBz4bufIGdp4buvYSAlcyB2w6AgWyVzXSBwaOG6o2kgYuG7iyBi4buPIHF1YS5cbiIKKyJEbyB24bqteSBjaMO6bmcgdMO0aSBraMO0bmcgdGjhu4MgY2jhuq9jIGzhuqduIGNodXnhu4NuIGdpYW8gxJHhuqd1IHRpw6puICVzIGzDoCBnaeG7r2EgJXMgdsOgICIKKyIlcy5cbiIKKyJDaMO6bmcgdMO0aSB24bqrbiBj4bupIHRp4bq/cCB04bulYy4iCisKKyM6IGJpc2VjdC5jOjg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6IGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZFxuIgorbXNnc3RyICJCaXNlY3Rpbmc6IG7hu4FuIGjDsmEgdHLhu5luIGPhuqduIHBo4bqjaSDEkcaw4bujYyBraeG7g20gdHJhXG4iCisKKyM6IGJpc2VjdC5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJhICVzIHJldmlzaW9uIGlzIG5lZWRlZCIKK21zZ3N0ciAiY+G6p24gbeG7mXQgxJFp4buDbSB4w6l0IGR1eeG7h3QgJXMiCisKKyM6IGJpc2VjdC5jOjkyMCBidWlsdGluL25vdGVzLmM6MTc3IGJ1aWx0aW4vdGFnLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdOG6rXAgdGluIOKAnCVz4oCdIgorCisjOiBiaXNlY3QuYzo5NjYgYnVpbHRpbi9tZXJnZS5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgdOG6rXAgdGluIOKAnCVz4oCdIgorCisjOiBiaXNlY3QuYzo5OTcKK21zZ2lkICJyZWFkaW5nIGJpc2VjdCByZWZzIGZhaWxlZCIKK21zZ3N0ciAidmnhu4djIMSR4buNYyB0aGFtIGNoaeG6v3UgYmlzZWN0IGfhurdwIGzhu5dpIgorCisjOiBiaXNlY3QuYzoxMDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHdhcyBib3RoICVzIGFuZCAlc1xuIgorbXNnc3RyICIlcyBsw6AgY+G6oyAlcyB2w6AgJXNcbiIKKworIzogYmlzZWN0LmM6MTAyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGVzdGFibGUgY29tbWl0IGZvdW5kLlxuIgorIk1heWJlIHlvdSBzdGFydGVkIHdpdGggYmFkIHBhdGggcGFyYW1ldGVycz9cbiIKK21zZ3N0ciAiIgorIktow7RuZyB0w6xtIHRo4bqleSBs4bqnbiBjaHV54buDbiBnaWFvIGtp4buDbSB0cmEgxJHGsOG7o2MgbsOgby5cbiIKKyJDw7MgbOG6vSBi4bqhbiBi4bqvdCDEkeG6p3UgduG7m2kgY8OhYyB0aGFtIHPhu5EgxJHGsOG7nW5nIGThuqtuIHNhaT9cbiIKKworIzogYmlzZWN0LmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICIocm91Z2hseSAlZCBzdGVwKSIKK21zZ2lkX3BsdXJhbCAiKHJvdWdobHkgJWQgc3RlcHMpIgorbXNnc3RyWzBdICIoxrDhu5tjIGNo4burbmcgJWQgYsaw4bubYykiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgbGFzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggIihyb3VnaGx5ICVkCisjLiBzdGVwcykiIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJpc2VjdC5jOjEwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICJCaXNlY3Rpbmc6IGPDsm4gJWQgxJFp4buDbSB4w6l0IGR1eeG7h3QgxJHhu4Mga2nhu4NtIHNhdSAlcyBuw6B5XG4iCisKKyM6IGJsYW1lLmM6MjcwMAorbXNnaWQgIi0tY29udGVudHMgYW5kIC0tcmV2ZXJzZSBkbyBub3QgYmxlbmQgd2VsbC4iCittc2dzdHIgInTDuXkgY2jhu41uLS1jb250ZW50cyB2w6AgLS1yZXZlcnNlIGtow7RuZyDEkcaw4bujYyB0cuG7mW4gdsOgbyBuaGF1LiIKKworIzogYmxhbWUuYzoyNzE0Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbnRlbnRzIHdpdGggZmluYWwgY29tbWl0IG9iamVjdCBuYW1lIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZMO5bmcgLS1jb250ZW50cyB24bubaSB0w6puIMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIGN14buRaSBjw7luZyIKKworIzogYmxhbWUuYzoyNzM1Cittc2dpZCAiLS1yZXZlcnNlIGFuZCAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHNwZWNpZmllZCBsYXRlc3QgY29tbWl0IgorbXNnc3RyICIiCisiY8O5bmcgc+G7rSBk4bulbmcgLS1yZXZlcnNlIHbDoCAtLWZpcnN0LXBhcmVudCBj4bqnbiBjaOG7iSDEkeG7i25oIGzhuqduIGNodXnhu4NuIGdpYW8gY3Xhu5FpIgorCisjOiBibGFtZS5jOjI3NDQgYnVuZGxlLmM6MTY3IHJlZi1maWx0ZXIuYzoyMjAzIHJlbW90ZS5jOjE5NDIgc2VxdWVuY2VyLmM6MjAwNgorIzogc2VxdWVuY2VyLmM6NDM1OCBzdWJtb2R1bGUuYzo4NDcgYnVpbHRpbi9jb21taXQuYzoxMDQ1IGJ1aWx0aW4vbG9nLmM6Mzg4CisjOiBidWlsdGluL2xvZy5jOjk5MSBidWlsdGluL2xvZy5jOjE1MjAgYnVpbHRpbi9sb2cuYzoxOTI1IGJ1aWx0aW4vbG9nLmM6MjIxNQorIzogYnVpbHRpbi9tZXJnZS5jOjQxMiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkwCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTkyCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgImPDoGkgxJHhurd0IHZp4buHYyBkaSBjaHV54buDbiBxdWEgY8OhYyDEkWnhu4NtIHjDqXQgZHV54buHdCBn4bq3cCBs4buXaSIKKworIzogYmxhbWUuYzoyNzYyCittc2dpZCAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHJhbmdlIGFsb25nIGZpcnN0LXBhcmVudCBjaGFpbiIKK21zZ3N0ciAiIgorImPDuW5nIHPhu60gZOG7pW5nIC0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCB5w6p1IGPhuqd1IHbDuW5nIGPDuW5nIHbhu5tpIGNodeG7l2kgY2hhLW3hurktxJHhuqd1LSIKKyJ0acOqbiIKKworIzogYmxhbWUuYzoyNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcGF0aCAlcyBpbiAlcyIKK21zZ3N0ciAia2jDtG5nIGPDsyDEkcaw4budbmcgZOG6q24gJXMgdHJvbmcg4oCcJXPigJ0iCisKKyM6IGJsYW1lLmM6Mjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIGJsb2IgJXMgY2hvIMSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSIKKworIzogYnJhbmNoLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkFmdGVyIGZpeGluZyB0aGUgZXJyb3IgY2F1c2UgeW91IG1heSB0cnkgdG8gZml4IHVwXG4iCisidGhlIHJlbW90ZSB0cmFja2luZyBpbmZvcm1hdGlvbiBieSBpbnZva2luZ1xuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIi4iCittc2dzdHIgIiIKKyJcbiIKKyJTYXUga2hpIHPhu61hIG5ndXnDqm4gbmjDom4gbOG7l2kgYuG6oW4gY8OzIGzhursgY+G6p24gdGjhu60gc+G7rWFcbiIKKyJ0aMO0bmcgdGluIHRoZW8gZMO1aSBtw6F5IGNo4bunIGLhurFuZyBjw6FjaCBn4buNaSBs4buHbmhcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgorCisjOiBicmFuY2guYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3Qgc2V0dGluZyBicmFuY2ggJXMgYXMgaXRzIG93biB1cHN0cmVhbS4iCittc2dzdHIgIkNoxrBhIGPDoGkgxJHhurd0IG5ow6FuaCAlcyBuaMawIGzDoCB0aMaw4bujbmcgbmd14buTbiBj4bunYSBuw7MuIgorCisjOiBicmFuY2guYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJOaMOhbmgg4oCcJXPigJ0gY8OgaSDEkeG6t3QgxJHhu4MgdGhlbyBkw7VpIG5ow6FuaCBtw6F5IGNo4bunIOKAnCVz4oCdIHThu6sg4oCcJXPigJ0gYuG6sW5nIGPDoWNoIHJlYmFzZS4iCisKKyM6IGJyYW5jaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnLiIKK21zZ3N0ciAiTmjDoW5oIOKAnCVz4oCdIGPDoGkgxJHhurd0IMSR4buDIHRoZW8gZMO1aSBuaMOhbmggbcOheSBjaOG7pyDigJwlc+KAnSB04burIOKAnCVz4oCdLiIKKworIzogYnJhbmNoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiTmjDoW5oIOKAnCVz4oCdIGPDoGkgxJHhurd0IMSR4buDIHRoZW8gZMO1aSBuaMOhbmggbuG7mWkgYuG7mSDigJwlc+KAnSBi4bqxbmcgY8OhY2ggcmViYXNlLiIKKworIzogYnJhbmNoLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiTmjDoW5oIOKAnCVz4oCdIGPDoGkgxJHhurd0IMSR4buDIHRoZW8gZMO1aSBuaMOhbmggbuG7mWkgYuG7mSDigJwlc+KAnS4iCisKKyM6IGJyYW5jaC5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIk5ow6FuaCDigJwlc+KAnSBjw6BpIMSR4bq3dCDEkeG7gyB0aGVvIGTDtWkgdGhhbSBjaGnhur91IG3DoXkgY2jhu6cg4oCcJXPigJ0gYuG6sW5nIGPDoWNoIHJlYmFzZS4iCisKKyM6IGJyYW5jaC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnLiIKK21zZ3N0ciAiTmjDoW5oIOKAnCVz4oCdIGPDoGkgxJHhurd0IMSR4buDIHRoZW8gZMO1aSB0aGFtIGNoaeG6v3UgbcOheSBjaOG7pyDigJwlc+KAnS4iCisKKyM6IGJyYW5jaC5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiTmjDoW5oIOKAnCVz4oCdIGPDoGkgxJHhurd0IMSR4buDIHRoZW8gZMO1aSB0aGFtIGNoaeG6v3UgbuG7mWkgYuG7mSDigJwlc+KAnSBi4bqxbmcgY8OhY2ggcmViYXNlLiIKKworIzogYnJhbmNoLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJy4iCittc2dzdHIgIk5ow6FuaCDigJwlc+KAnSBjw6BpIMSR4bq3dCDEkeG7gyB0aGVvIGTDtWkgdGhhbSBjaGnhur91IG7hu5lpIGLhu5kg4oCcJXPigJ0uIgorCisjOiBicmFuY2guYzoxMTkKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgdXBzdHJlYW0gYnJhbmNoIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgY+G6pXUgaMOsbmggbmjDoW5oIHRoxrDhu6NuZyBuZ3Xhu5NuIgorCisjOiBicmFuY2guYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAiS2jDtG5nIHRoZW8gZMO1aTogdGjDtG5nIHRpbiBjaMawYSByw7UgcsOgbmcgY2hvIHRoYW0gY2hp4bq/dSAlcyIKKworIzogYnJhbmNoLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgYnJhbmNoIG5hbWUuIgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCB0w6puIG5ow6FuaCBo4bujcCBs4buHLiIKKworIzogYnJhbmNoLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkEgYnJhbmNoIG5hbWVkICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLEkMOjIGPDsyBuaMOhbmggbWFuZyB0w6puIOKAnCVz4oCdLiIKKworIzogYnJhbmNoLmM6MjEzCittc2dpZCAiQ2Fubm90IGZvcmNlIHVwZGF0ZSB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJLaMO0bmcgdGjhu4Mgw6lwIGJ14buZYyBj4bqtcCBuaOG6rXQgbmjDoW5oIGhp4buHbiBow6BuaC4iCisKKyM6IGJyYW5jaC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50ICclcycgaXMgbm90IGEgYnJhbmNoLiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBjw6BpIMSR4bq3dCB0aMO0bmcgdGluIHRoZW8gZMO1aTsgxJFp4buDbSBi4bqvdCDEkeG6p3Ug4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgIgorIm5ow6FuaC4iCisKKyM6IGJyYW5jaC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJuaMOhbmggdGjGsOG7o25nIG5ndeG7k24gxJHDoyB5w6p1IGPhuqd1IOKAnCVz4oCdIGtow7RuZyB04buTbiB04bqhaSIKKworIzogYnJhbmNoLmM6MjM3Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgb24gYmFzaW5nIHlvdXIgd29yayBvbiBhbiB1cHN0cmVhbVxuIgorImJyYW5jaCB0aGF0IGFscmVhZHkgZXhpc3RzIGF0IHRoZSByZW1vdGUsIHlvdSBtYXkgbmVlZCB0b1xuIgorInJ1biBcImdpdCBmZXRjaFwiIHRvIHJldHJpZXZlIGl0LlxuIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVzaCBvdXQgYSBuZXcgbG9jYWwgYnJhbmNoIHRoYXRcbiIKKyJ3aWxsIHRyYWNrIGl0cyByZW1vdGUgY291bnRlcnBhcnQsIHlvdSBtYXkgd2FudCB0byB1c2VcbiIKKyJcImdpdCBwdXNoIC11XCIgdG8gc2V0IHRoZSB1cHN0cmVhbSBjb25maWcgYXMgeW91IHB1c2guIgorbXNnc3RyICIiCisiXG4iCisiTuG6v3UgYuG6oW4gY8OzIMO9IMSR4buLbmgg4oCcY+G6o2kgdOG7leKAnSBjw7RuZyB2aeG7h2MgY+G7p2EgYuG6oW4gdHLDqm4gbmjDoW5oIHRoxrDhu6NuZyBuZ3Xhu5NuXG4iCisiKHVwc3RyZWFtKSBjw6FpIG3DoCDEkcOjIHPhurVuIGPDsyB0csOqbiBtw6F5IGNo4bunLCBi4bqhbiBj4bqnbiBjaOG6oXlcbiIKKyJs4buHbmggXCJnaXQgZmV0Y2hcIiDEkeG7gyBs4bqleSBuw7MgduG7gS5cbiIKKyJcbiIKKyJO4bq/dSBi4bqhbiBjw7Mgw70gxJHhu4tuaCDEkeG6qXkgbMOqbiBsw6puIG3hu5l0IG5ow6FuaCBu4buZaSBi4buZIG3hu5tpIGPDoWkgbcOgXG4iCisic+G6vSB0aGVvIGTDtWkgYuG6o24gxJHhu5FpIGNoaeG6v3UgbcOheSBjaOG7pyBj4bunYSBuw7MsIGLhuqFuIGPhuqduIGTDuW5nIGzhu4duaFxuIgorIlwiZ2l0IHB1c2ggLXVcIiDEkeG7gyDEkeG6t3QgY+G6pXUgaMOsbmggdGjGsOG7o25nIG5ndeG7k24gYuG6oW4gbXXhu5FuIHB1c2guIgorCisjOiBicmFuY2guYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJLaMO0bmcgcGjhuqNpIHTDqm4gxJHhu5FpIHTGsOG7o25nIGjhu6NwIGzhu4c6IOKAnCVz4oCdLiIKKworIzogYnJhbmNoLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIlTDqm4gxJHhu5FpIHTGsOG7o25nIGNoxrBhIHLDtSByw6BuZzog4oCcJXPigJ0uIgorCisjOiBicmFuY2guYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgYnJhbmNoIHBvaW50OiAnJXMnLiIKK21zZ3N0ciAiTmjDoW5oIGtow7RuZyBo4bujcCBs4buHOiDigJwlc+KAnS4iCisKKyM6IGJyYW5jaC5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAi4oCcJXPigJ0gxJHDoyDEkcaw4bujYyBs4bqleSByYSB04bqhaSDigJwlc+KAnSBy4buTaSIKKworIzogYnJhbmNoLmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgb2Ygd29ya2luZyB0cmVlICVzIGlzIG5vdCB1cGRhdGVkIgorbXNnc3RyICJIRUFEIGPhu6dhIGPDonkgbMOgbSB2aeG7h2MgJXMgY2jGsGEgxJHGsOG7o2MgY+G6rXAgbmjhuq10IgorCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgZ2nhu5FuZyBuaMawIHThuq1wIHRpbiB2MiBidW5kbGUgKMSR4buLbmggZOG6oW5nIGR1bXAgY+G7p2EgZ2l0KSIKKworIzogYnVuZGxlLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlYWRlcjogJXMlcyAoJWQpIgorbXNnc3RyICJwaOG6p24gxJHhuqd1IGtow7RuZyDEkcaw4bujYyB0aOG7q2Egbmjhuq1uOiAlcyVzICglZCkiCisKKyM6IGJ1bmRsZS5jOjkwIHJlcmVyZS5jOjQ4MCByZXJlcmUuYzo2OTAgc2VxdWVuY2VyLmM6MjI1OCBzZXF1ZW5jZXIuYzozMDE2CisjOiBidWlsdGluL2NvbW1pdC5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyDigJwlc+KAnSIKKworIzogYnVuZGxlLmM6MTQzCittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyB0aGVzZSBwcmVyZXF1aXNpdGUgY29tbWl0czoiCittc2dzdHIgIktobyBjaOG7qWEgdGhp4bq/dSBuaOG7r25nIGzhuqduIGNodXnhu4NuIGdpYW8gdGnDqm4gcXV54bq/dCBuw6B5OiIKKworIzogYnVuZGxlLmM6MTQ2Cittc2dpZCAibmVlZCBhIHJlcG9zaXRvcnkgdG8gdmVyaWZ5IGEgYnVuZGxlIgorbXNnc3RyICJj4bqnbiBt4buZdCBraG8gY2jhu6lhIMSR4buDIHRo4bqpbSB0cmEgbeG7mXQgYnVuZGxlIgorCisjOiBidW5kbGUuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIkLDsyBk4buvIGxp4buHdSBjaOG7qWEgJWQgdGhhbSBjaGnhur91OiIKKworIzogYnVuZGxlLmM6MjA0Cittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIkzhu4duaCBidW5kbGUgZ2hpIGzhuqFpIHRvw6BuIGLhu5kgbOG7i2NoIHPhu60uIgorCisjOiBidW5kbGUuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIkzhu4duaCBidW5kbGUgecOqdSBj4bqndSAlZCB0aGFtIGNoaeG6v3UgbsOgeToiCisKKyM6IGJ1bmRsZS5jOjI3MworbXNnaWQgInVuYWJsZSB0byBkdXAgYnVuZGxlIGRlc2NyaXB0b3IiCittc2dzdHIgImtow7RuZyB0aOG7gyBuaMOibiDEkcO0aSBi4buZIG3DtCB04bqjIGJ1bmRsZSIKKworIzogYnVuZGxlLmM6MjgwCittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHPhuqNuIHNpbmggxJHhu5FpIHTGsOG7o25nIGfDs2kiCisKKyM6IGJ1bmRsZS5jOjI5MQorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgZ8OzaSDEkcOjIGNo4bq/dCIKKworIzogYnVuZGxlLmM6MzMzCittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAicmV2LWxpc3QgxJHDoyBjaOG6v3QiCisKKyM6IGJ1bmRsZS5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIKK21zZ3N0ciAidGguY2hp4bq/dSDigJwlc+KAnSBi4buLIGxv4bqhaSB0cuG7qyBi4bufaSBjw6FjIHTDuXkgY2jhu41uIHJldi1saXN0IgorCisjOiBidW5kbGUuYzo0NjEgYnVpbHRpbi9sb2cuYzoyMDMgYnVpbHRpbi9sb2cuYzoxODE0IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAixJHhu5FpIHPhu5Ega2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW46ICVzIgorCisjOiBidW5kbGUuYzo0NjkKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKK21zZ3N0ciAiVOG7qyBjaOG7kWkgdOG6oW8gbeG7mXQgYsOzIGThu68gbGnhu4d1IHRy4buRbmcgcuG7l25nLiIKKworIzogYnVuZGxlLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIOKAnCVz4oCdIgorCisjOiBidW5kbGUuYzo1MDQKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgIm3hu6VjIGzhu6VjIGfDs2kgxJHDoyBjaOG6v3QiCisKKyM6IGNvbG9yLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgImdpw6EgdHLhu4sgbcOgdSBraMO0bmcgaOG7o3AgbOG7hzogJS4qcyIKKworIzogY29tbWl0LmM6NTEgc2VxdWVuY2VyLmM6MjcxOSBidWlsdGluL2FtLmM6MzU5IGJ1aWx0aW4vYW0uYzo0MDMKKyM6IGJ1aWx0aW4vYW0uYzoxMzcxIGJ1aWx0aW4vYW0uYzoyMDE0IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjw7ogcGjDoXAgJXMiCisKKyM6IGNvbW1pdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8hIgorCisjOiBjb21taXQuYzoxOTMKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIGlzIGRlcHJlY2F0ZWRcbiIKKyJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIEdpdCB2ZXJzaW9uLlxuIgorIlxuIgorIlBsZWFzZSB1c2UgXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiXG4iCisidG8gY29udmVydCB0aGUgZ3JhZnRzIGludG8gcmVwbGFjZSByZWZzLlxuIgorIlxuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCittc2dzdHIgIiIKKyJWaeG7h2MgaOG7lyB0cuG7oyBjaG8gPEdJVF9ESVI+L2luZm8vZ3JhZnRzIMSRw6MgbOG6oWMgaOG6rXVcbiIKKyJ2w6Agc+G6vSBi4buLIHjDs2EgYuG7jyDhu58gcGhpw6puIGLhuqNuIEdpdCB0xrDGoW5nIGxhaS5cbiIKKyJcbiIKKyJWdWkgbMOybmcgZMO5bmcgXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiXG4iCisixJHhu4MgY2h1eeG7g24gxJHhu5VpIGPDoWMgZ3JhZnQgdGjDoG5oIGPDoWMgdGhhbSBjaGnhur91IHRoYXkgdGjhur8uXG4iCisiXG4iCisiVOG6r3QgbOG7nWkgbmjhuq9uIG7DoHkgYuG6sW5nIGPDoWNoIGNo4bqheVxuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiIgorCisjOiBjb21taXQuYzoxMTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIiIKKyJM4bqnbiBjaHV54buDbiBnaWFvICVzIGPDsyBt4buZdCBjaOG7ryBrw70gR1BHIGtow7RuZyDEkcOhbmcgdGluLCDEkcaw4bujYyBjaG8gbMOgIGLhu59pICVzLiIKKworIzogY29tbWl0LmM6MTE1NworIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyAlcyBjw7MgbeG7mXQgY2jhu68ga8O9IEdQRyBzYWksIMSRxrDhu6NjIGNobyBsw6AgYuG7n2kgJXMuIgorCisjOiBjb21taXQuYzoxMTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZS4iCittc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW8gJXMga2jDtG5nIGPDsyBjaOG7ryBrw70gR1BHLiIKKworIzogY29tbWl0LmM6MTE2MworIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIGJ5ICVzXG4iCittc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW8gJXMgY8OzIG3hu5l0IGNo4buvIGvDvSBHUEcgdOG7kXQgYuG7n2kgJXNcbiIKKworIzogY29tbWl0LmM6MTQxNworbXNnaWQgIiIKKyJXYXJuaW5nOiBjb21taXQgbWVzc2FnZSBkaWQgbm90IGNvbmZvcm0gdG8gVVRGLTguXG4iCisiWW91IG1heSB3YW50IHRvIGFtZW5kIGl0IGFmdGVyIGZpeGluZyB0aGUgbWVzc2FnZSwgb3Igc2V0IHRoZSBjb25maWdcbiIKKyJ2YXJpYWJsZSBpMThuLmNvbW1pdGVuY29kaW5nIHRvIHRoZSBlbmNvZGluZyB5b3VyIHByb2plY3QgdXNlcy5cbiIKK21zZ3N0ciAiIgorIkPhuqNuaCBiw6FvOiBnaGkgY2jDuiBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyBraMO0bmcgaOG7o3AgY2h14bqpbiBVVEYtOC5cbiIKKyJC4bqhbiBjw7MgbOG6vSBtdeG7kW4gdHUgYuG7lSBuw7Mgc2F1IGtoaSBz4butYSBs4budaSBjaMO6IHRow61jaCwgaG/hurdjIGzDoCDEkeG6t3QgYmnhur9uXG4iCisiY+G6pXUgaMOsbmggaTE4bi5jb21taXRlbmNvZGluZyB0aMOgbmggYuG6o25nIG3DoyBtw6AgZOG7sSDDoW4gY+G7p2EgYuG6oW4gbXXhu5FuIGTDuW5nLlxuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjIKK21zZ2lkICJjb21taXQtZ3JhcGggZmlsZSBpcyB0b28gc21hbGwiCittc2dzdHIgInThuq1wIHRpbiDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gcXXDoSBuaOG7jyIKKworIzogY29tbWl0LWdyYXBoLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBzaWduYXR1cmUgJVggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlICVYIgorbXNnc3RyICJjaOG7ryBrw70gxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvICVYIGtow7RuZyBraOG7m3AgY2jhu68ga8O9ICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAicGhpw6puIGLhuqNuIMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyAlWCBraMO0bmcga2jhu5twIHBoacOqbiBi4bqjbiAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXNoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAicGhpw6puIGLhuqNuIMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyAlWCBraMO0bmcga2jhu5twIHBoacOqbiBi4bqjbiAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MjI2Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGxvb2t1cCB0YWJsZSBlbnRyeSBtaXNzaW5nOyBmaWxlIG1heSBiZSBpbmNvbXBsZXRlIgorbXNnc3RyICIiCisiYuG6o25nIHTDrG0ga2nhur9tIG3huqNuaCDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gY8OybiB0aGnhur91OyB04bqtcCB0aW4gY8OzIHRo4buDIHPhur0gIgorImtow7RuZyBob8OgbiB0aGnhu4duIgorCisjOiBjb21taXQtZ3JhcGguYzoyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGltcHJvcGVyIGNodW5rIG9mZnNldCAlMDh4JTA4eCIKK21zZ3N0ciAiYsO5IG3huqNuaCDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8ga2jDtG5nIMSRw7puZyBjaOG7lyAlMDh4JTA4eCIKKworIzogY29tbWl0LWdyYXBoLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBpZCAlMDh4IGFwcGVhcnMgbXVsdGlwbGUgdGltZXMiCittc2dzdHIgIm3DoyBt4bqjbmggxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvICUwOHggeHXhuqV0IGhp4buHbiBuaGnhu4F1IGzhuqduIgorCisjOiBjb21taXQtZ3JhcGguYzozNDMKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIG5vIGJhc2UgZ3JhcGhzIGNodW5rIgorbXNnc3RyICLEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gY8OzIGtow7RuZyBjw7MgbeG6o25oIGPDoWMgxJHhu5MgaOG7jWEgY8ahIHPhu58iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM1MworbXNnaWQgImNvbW1pdC1ncmFwaCBjaGFpbiBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAibcOzYyB4w61jaCDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8ga2jDtG5nIGto4bubcCIKKworIzogY29tbWl0LWdyYXBoLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0LWdyYXBoIGNoYWluOiBsaW5lICclcycgbm90IGEgaGFzaCIKK21zZ3N0ciAiIgorIm3Ds2MgeMOtY2ggxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIGtow7RuZyBo4bujcCBs4buHOiBkw7JuZyAnJXMnIGtow7RuZyBwaOG6o2kgbMOgICIKKyJt4buZdCBtw6MgYsSDbSIKKworIzogY29tbWl0LWdyYXBoLmM6NDI1Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgYWxsIGNvbW1pdC1ncmFwaCBmaWxlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IHThuqV0IGPhuqMgY8OhYyB04bqtcCB0aW4gxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIgorCisjOiBjb21taXQtZ3JhcGguYzo1NTggY29tbWl0LWdyYXBoLmM6NjE4Cittc2dpZCAiaW52YWxpZCBjb21taXQgcG9zaXRpb24uIGNvbW1pdC1ncmFwaCBpcyBsaWtlbHkgY29ycnVwdCIKK21zZ3N0ciAiIgorInbhu4sgdHLDrSBs4bqnbiBjaHV54buDbiBnaWFvIGtow7RuZyBo4bujcCBs4buHLiDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gY8OzIHbhursgbmjGsCDEkcOjICIKKyJi4buLIGjhu49uZyIKKworIzogY29tbWl0LWdyYXBoLmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IGzhuqduIGNodXnhu4NuIGdpYW8gJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjg1MiBidWlsdGluL2FtLmM6MTI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggbOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnSIKKworIzogY29tbWl0LWdyYXBoLmM6MTAxMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCB0eXBlIG9mIG9iamVjdCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IGtp4buDdSBj4bunYSDEkeG7kWkgdMaw4bujbmcg4oCcJXPigJ0iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNDMKK21zZ2lkICJMb2FkaW5nIGtub3duIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLEkGFuZyB04bqjaSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gY2jGsGEgYmnhur90IHRyb25nIMSR4buTIHRo4buLIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNjAKK21zZ2lkICJFeHBhbmRpbmcgcmVhY2hhYmxlIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICIiCisiTeG7nyBy4buZbmcgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGPDsyB0aOG7gyB0aeG6v3AgY+G6rW4gxJHGsOG7o2MgdHJvbmcgdHJvbmcgxJHhu5MgdGjhu4sgbOG6p24gIgorImNodXnhu4NuIGdpYW8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNzkKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLEkGFuZyBk4buNbiBk4bq5cCBjw6FjIMSRw6FuaCBk4bqldSBs4bqnbiBjaHV54buDbiBnaWFvIHRyb25nIMSR4buTIHRo4buLIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwOTgKK21zZ2lkICJDb21wdXRpbmcgY29tbWl0IGdyYXBoIGdlbmVyYXRpb24gbnVtYmVycyIKK21zZ3N0ciAixJBhbmcgdMOtbmggdG/DoW4gc+G7kSB04bqhbyDEkeG7kyB0aOG7iyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFjayIKK21zZ2lkX3BsdXJhbCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFja3MiCittc2dzdHJbMF0gIiIKKyLEkGFuZyB0w6xtIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBjaG8gxJHhu5MgdGjhu4sgbOG6p24gY2h1eeG7g24gZ2lhbyB0cm9uZyAlZCBnw7NpIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGFkZGluZyBwYWNrICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSB0aMOqbSBnw7NpICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgaW5kZXggZm9yICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgbeG7nyBt4bulYyBs4bulYyBjaG8g4oCcJXPigJ0iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmcyIKK21zZ3N0clswXSAiIgorIsSQYW5nIHTDrG0gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGNobyDEkeG7kyB0aOG7iyBs4bqnbiBjaHV54buDbiBnaWFvIHThu6sgJWQgdGhhbSBjaGnhur91IgorCisjOiBjb21taXQtZ3JhcGguYzoxMjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0IG9iamVjdCBpZDogJXMiCittc2dzdHIgIm3DoyBz4buRIMSR4buRaSB0xrDhu6NuZyBs4bqnbiBjaHV54buDbiBnaWFvIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTI0OQorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGFtb25nIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICIiCisixJBhbmcgdMOsbSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gY2hvIMSR4buTIHRo4buLIGzhuqduIGNodXnhu4NuIGdpYW8gdHJvbmcgc+G7kSBjw6FjIMSR4buRaSAiCisidMaw4bujbmcgxJHDoyDEkcOzbmcgZ8OzaSIKKworIzogY29tbWl0LWdyYXBoLmM6MTI2NAorbXNnaWQgIkNvdW50aW5nIGRpc3RpbmN0IGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLEkGFuZyDEkeG6v20gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGtow6FjIG5oYXUgdHJvbmcgxJHhu5MgdGjhu4sgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTI5NAorbXNnaWQgIkZpbmRpbmcgZXh0cmEgZWRnZXMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLEkGFuZyB0w6xtIGPDoWMgY+G6oW5oIG3hu58gdOG7mW5nIHRyb25nIMSR4buTIHRo4buLIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNDAKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29ycmVjdCBudW1iZXIgb2YgYmFzZSBncmFwaCBpZHMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBnaGkgc+G7kSDEkcO6bmcgY+G7p2EgbcOjIMSR4buTIGjhu41hIGPGoSBz4bufIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzczIG1pZHguYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gY8OhYyB0aMawIG3hu6VjIGThuqtuIMSR4bqndSBj4bunYSDigJwlc+KAnSIKKworIzogY29tbWl0LWdyYXBoLmM6MTM4NSBidWlsdGluL2luZGV4LXBhY2suYzozMDYgYnVpbHRpbi9yZXBhY2suYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8g4oCcJXPigJ0iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3MiCittc2dpZF9wbHVyYWwgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzZXMiCittc2dzdHJbMF0gIsSQYW5nIGdoaSByYSDEkeG7kyB0aOG7iyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gdHJvbmcgbOG6p24gJWQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0ODYKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBjb21taXQtZ3JhcGggY2hhaW4gZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gdOG6rXAgdGluIG3huq90IHjDrWNoIMSR4buTIHRo4buLIGNodXnhu4NuIGdpYW8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0OTgKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIGJhc2UgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkeG7lWkgdMOqbiB04bqtcCB0aW4gxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIgorCisjOiBjb21taXQtZ3JhcGguYzoxNTE4Cittc2dpZCAiZmFpbGVkIHRvIHJlbmFtZSB0ZW1wb3JhcnkgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkeG7lWkgdMOqbiB04bqtcCB0aW4gxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIHThuqFtIHRo4budaSIKKworIzogY29tbWl0LWdyYXBoLmM6MTYzMQorbXNnaWQgIlNjYW5uaW5nIG1lcmdlZCBjb21taXRzIgorbXNnc3RyICLEkGFuZyBxdcOpdCBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gxJHDoyBow7JhIHRy4buZbiIKKworIzogY29tbWl0LWdyYXBoLmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGR1cGxpY2F0ZSBjb21taXQgaWQgJXMiCittc2dzdHIgImfhurdwIG3DoyBz4buRIHTDrWNoIGzhuqduIGNodXnhu4NuIGdpYW8gYuG7iyB0csO5bmcgbOG6t3Ag4oCcJXPigJ0iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NjUKK21zZ2lkICJNZXJnaW5nIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAixJBhbmcgaMOyYSB0cuG7mW4gxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIgorCisjOiBjb21taXQtZ3JhcGguYzoxODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBjb21taXQgZ3JhcGggZm9ybWF0IGNhbm5vdCB3cml0ZSAlZCBjb21taXRzIgorbXNnc3RyICLEkeG7i25oIGThuqFuZyDEkeG7kyBo4buNYSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8ga2jDtG5nIHRo4buDIGdoaSAlZCBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBjb21taXQtZ3JhcGguYzoxODU1Cittc2dpZCAidG9vIG1hbnkgY29tbWl0cyB0byB3cml0ZSBncmFwaCIKK21zZ3N0ciAiY8OzIHF1w6Egbmhp4buBdSBs4bqnbiBjaHV54buDbiBnaWFvIMSR4buDIGdoaSDEkeG7kyB0aOG7iyIKKworIzogY29tbWl0LWdyYXBoLmM6MTk0NAorbXNnaWQgInRoZSBjb21taXQtZ3JhcGggZmlsZSBoYXMgaW5jb3JyZWN0IGNoZWNrc3VtIGFuZCBpcyBsaWtlbHkgY29ycnVwdCIKK21zZ3N0ciAiIgorInThuq1wIHRpbiDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gY8OzIHThu5VuZyBraeG7g20ga2jDtG5nIMSRw7puZyB2w6AgY8OzIHbhursgbmjGsCBsw6AgIgorIsSRw6MgaOG7j25nIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IE9JRCBvcmRlcjogJXMgdGhlbiAlcyIKK21zZ3N0ciAixJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIGPDsyB0aOG7qSB04buxIE9JRCBraMO0bmcgxJHDum5nOiAlcyBzYXUgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NjQgY29tbWl0LWdyYXBoLmM6MTk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBmYW5vdXQgdmFsdWU6IGZhbm91dFslZF0gPSAldSAhPSAldSIKK21zZ3N0ciAiIgorIsSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBjw7MgZ2nDoSB0cuG7iyBmYW5vdXQga2jDtG5nIMSRw7puZzogZmFub3V0WyVkXSA9ICV1ICE9ICIKKyIldSIKKworIzogY29tbWl0LWdyYXBoLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gY29tbWl0LWdyYXBoIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgcGjDom4gdMOtY2ggbOG6p24gY2h1eeG7g24gZ2lhbyB04burICVzIMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTk4OQorbXNnaWQgIlZlcmlmeWluZyBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAixJBhbmcgdGjhuqltIHRyYSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gdHJvbmcgxJHhu5MgdGjhu4sgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAwMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gb2JqZWN0IGRhdGFiYXNlIGZvciBjb21taXQtZ3JhcGgiCittc2dzdHIgIiIKKyJn4bq3cCBs4buXaSBraGkgcGjDom4gdMOtY2ggbOG6p24gY2h1eeG7g24gZ2lhbyAlcyB04burIGPGoSBz4bufIGThu68gbGnhu4d1IMSR4buRaSB0xrDhu6NuZyBjaG8gxJHhu5MgIgorInRo4buLIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiIgorIk9JRCBjw6J5IGfhu5FjIGNobyBs4bqnbiBjaHV54buDbiBnaWFvICVzIHRyb25nIMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBsw6AgJXMgIT0gIgorIiVzIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIGlzIHRvbyBsb25nIgorbXNnc3RyICIiCisiZGFuaCBzw6FjaCBjaGEgbeG6uSDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gJXMgbMOgIHF1w6EgZMOgaSIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGZvciAlcyBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiY2hhIG3hurkgxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIGNobyAlcyBsw6AgJXMgIT0gJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBsaXN0IGZvciBjb21taXQgJXMgdGVybWluYXRlcyBlYXJseSIKK21zZ3N0ciAiIgorImRhbmggc8OhY2ggY2hhIG3hurkgxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIGNobyBs4bqnbiBjaHV54buDbiBnaWFvICVzIGLhu4sgY2jhuqVtICIKKyJk4bupdCBxdcOhIHPhu5ttIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb21taXQtZ3JhcGggaGFzIGdlbmVyYXRpb24gbnVtYmVyIHplcm8gZm9yIGNvbW1pdCAlcywgYnV0IG5vbi16ZXJvIGVsc2V3aGVyZSIKK21zZ3N0ciAiIgorIsSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBjw7MgY29uIHPhu5Ega2jDtG5nIGzhuqduIHThuqFvIGNobyBs4bqnbiBjaHV54buDbiBnaWFvICVzLCAiCisibmjGsG5nIGtow7RuZyBwaOG6o2kgc+G7kSBraMO0bmcg4bufIGNo4buXIGtow6FjIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb21taXQtZ3JhcGggaGFzIG5vbi16ZXJvIGdlbmVyYXRpb24gbnVtYmVyIGZvciBjb21taXQgJXMsIGJ1dCB6ZXJvIGVsc2V3aGVyZSIKK21zZ3N0ciAiIgorIsSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBjw7MgY29uIHPhu5Ega2jDtG5nIHBo4bqjaSBraMO0bmcgbOG6p24gdOG6oW8gY2hvIGzhuqduIGNodXnhu4NuICIKKyJnaWFvICVzLCBuaMawbmcgc+G7kSBraMO0bmcg4bufIGNo4buXIGtow6FjIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBnZW5lcmF0aW9uIGZvciBjb21taXQgJXMgaXMgJXUgIT0gJXUiCittc2dzdHIgInThuqFvIMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyAlcyBsw6AgJXUgIT0gJXUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0IGRhdGUgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJTxQUkl1TUFYPiAhPSAlPFBSSXVNQVg+IgorbXNnc3RyICIiCisibmfDoHkgY2h1eeG7g24gZ2lhbyBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyAlcyB0cm9uZyDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gbMOgICIKKyIlPFBSSXVNQVg+ICE9ICU8UFJJdU1BWD4iCisKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA2IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiaOG6v3QgYuG7mSBuaOG7myIKKworIzogY29uZmlnLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGNlZWRlZCBtYXhpbXVtIGluY2x1ZGUgZGVwdGggKCVkKSB3aGlsZSBpbmNsdWRpbmdcbiIKKyJcdCVzXG4iCisiZnJvbVxuIgorIlx0JXNcbiIKKyJUaGlzIG1pZ2h0IGJlIGR1ZSB0byBjaXJjdWxhciBpbmNsdWRlcy4iCittc2dzdHIgIiIKKyJ2xrDhu6N0IHF1w6EgxJHhu5kgc8OidSBiYW8gZ+G7k20gdOG7kWkgxJFhICglZCkgdHJvbmcga2hpIGJhbyBn4buTbVxuIgorIlx0JXNcbiIKKyJ04burXG4iCisiXHQlc1xuIgorIk5ndXnDqm4gbmjDom4gY8OzIHRo4buDIGzDoCBn4buTbSBxdeG6qW4gdsOybmcuIgorCisjOiBjb25maWcuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4cGFuZCBpbmNsdWRlIHBhdGggJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGtoYWkgdHJp4buDbiDEkcaw4budbmcgZOG6q24g4oCcJXPigJ0iCisKKyM6IGNvbmZpZy5jOjE1MQorbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlcyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAiY8OhYyBiYW8gZ+G7k20gY+G6pXUgaMOsbmggbGnDqm4gcXVhbiBwaOG6o2kgxJHhur9uIHThu6sgY8OhYyB04bqtcCB0aW4iCisKKyM6IGNvbmZpZy5jOjE5NworbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAiY8OhYyDEkWnhu4F1IGtp4buHbiBiYW8gZ+G7k20gY+G6pXUgaMOsbmggbGnDqm4gcXVhbiBwaOG6o2kgxJHhur9uIHThu6sgY8OhYyB04bqtcCB0aW4iCisKKyM6IGNvbmZpZy5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiBhIHNlY3Rpb246ICVzIgorbXNnc3RyICJraMOzYSBraMO0bmcgY2jhu6lhIG3hu5l0IHBo4bqnbjogJXMiCisKKyM6IGNvbmZpZy5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiB2YXJpYWJsZSBuYW1lOiAlcyIKK21zZ3N0ciAia2jDs2Ega2jDtG5nIGNo4bupYSBi4bqldCBr4buzIG3hu5l0IHTDqm4gYmnhur9uIG7DoG86ICVzIgorCisjOiBjb25maWcuYzo0MDYgc2VxdWVuY2VyLmM6MjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleTogJXMiCittc2dzdHIgImtow7NhIGtow7RuZyDEkcO6bmc6ICVzIgorCisjOiBjb25maWcuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgKG5ld2xpbmUpOiAlcyIKK21zZ3N0ciAia2jDs2Ega2jDtG5nIGjhu6NwIGzhu4cgKGTDsm5nIG3hu5tpKTogJXMiCisKKyM6IGNvbmZpZy5jOjQ0OCBjb25maWcuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29uZmlnIHBhcmFtZXRlcjogJXMiCittc2dzdHIgInRoYW0gc+G7kSBj4bqldSBow6xuaCBraMO0bmcgY8OzIHRo4buxYzogJXMiCisKKyM6IGNvbmZpZy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBmb3JtYXQgaW4gJXMiCittc2dzdHIgIsSR4buLbmggZOG6oW5nIGtow7RuZyBjw7MgdGjhu7FjIHRyb25nICVzIgorCisjOiBjb25maWcuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGJsb2IgJXMiCittc2dzdHIgInThuq1wIHRpbiBj4bqldSBow6xuaCBzYWkgdOG6oWkgZMOybmcgJWQgdHJvbmcgYmxvYiAlcyIKKworIzogY29uZmlnLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBmaWxlICVzIgorbXNnc3RyICJj4bqldSBow6xuaCBzYWkgdOG6oWkgZMOybmcgJWQgdHJvbmcgdOG6rXAgdGluICVzIgorCisjOiBjb25maWcuYzo4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJj4bqldSBow6xuaCBzYWkgdOG6oWkgZMOybmcgJWQgdHJvbmcgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogY29uZmlnLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdWJtb2R1bGUtYmxvYiAlcyIKK21zZ3N0ciAiY+G6pXUgaMOsbmggc2FpIHThuqFpIGTDsm5nICVkIHRyb25nIGJsb2ItbcO0LcSRdW4tY29uICVzIgorCisjOiBjb25maWcuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIKK21zZ3N0ciAiY+G6pXUgaMOsbmggc2FpIHThuqFpIGTDsm5nICVkIHRyb25nIGTDsm5nIGzhu4duaCAlcyIKKworIzogY29uZmlnLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiAlcyIKK21zZ3N0ciAiY+G6pXUgaMOsbmggc2FpIHThuqFpIGTDsm5nICVkIHRyb25nICVzIgorCisjOiBjb25maWcuYzo5NzgKK21zZ2lkICJvdXQgb2YgcmFuZ2UiCittc2dzdHIgIm7hurFtIG5nb8OgaSBwaOG6oW0gdmkiCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgImludmFsaWQgdW5pdCIKK21zZ3N0ciAixJHGoW4gduG7iyBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogY29uZmlnLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAic2FpIGdpw6EgdHLhu4sgYuG6sW5nIHPhu5EgY+G7p2EgY+G6pXUgaMOsbmgg4oCcJXPigJ0gY2hvIOKAnCVz4oCdOiAlcyIKKworIzogY29uZmlnLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGJsb2IgJXM6ICVzIgorbXNnc3RyICJzYWkgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSBj4bunYSBj4bqldSBow6xuaCDigJwlc+KAnSBjaG8g4oCcJXPigJ0gdHJvbmcgYmxvYiAlczogJXMiCisKKyM6IGNvbmZpZy5jOjEwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gZmlsZSAlczogJXMiCittc2dzdHIgInNhaSBnacOhIHRy4buLIGLhurFuZyBz4buRIGPhu6dhIGPhuqV1IGjDrG5oIOKAnCVz4oCdIGNobyDigJwlc+KAnSB0cm9uZyB04bqtcCB0aW4gJXM6ICVzIgorCisjOiBjb25maWcuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN0YW5kYXJkIGlucHV0OiAlcyIKK21zZ3N0ciAiIgorInNhaSBnacOhIHRy4buLIGLhurFuZyBz4buRIGPhu6dhIGPhuqV1IGjDrG5oIOKAnCVz4oCdIGNobyDigJwlc+KAnSB0cm9uZyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluOiAlcyIKKworIzogY29uZmlnLmM6MTAwNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdWJtb2R1bGUtYmxvYiAlczogJXMiCittc2dzdHIgIiIKKyJzYWkgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSBj4bunYSBj4bqldSBow6xuaCDigJwlc+KAnSBjaG8g4oCcJXPigJ0gdHJvbmcgc3VibW9kdWxlLWJsb2IgJXM6ICVzIgorCisjOiBjb25maWcuYzoxMDEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiCittc2dzdHIgInNhaSBnacOhIHRy4buLIGLhurFuZyBz4buRIGPhu6dhIGPhuqV1IGjDrG5oIOKAnCVz4oCdIGNobyDigJwlc+KAnSB0cm9uZyBkw7JuZyBs4buHbmggJXM6ICVzIgorCisjOiBjb25maWcuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiAlcyIKK21zZ3N0ciAic2FpIGdpw6EgdHLhu4sgYuG6sW5nIHPhu5EgY+G7p2EgY+G6pXUgaMOsbmgg4oCcJXPigJ0gY2hvIOKAnCVz4oCdIHRyb25nICVzOiAlcyIKKworIzogY29uZmlnLmM6MTEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhwYW5kIHVzZXIgZGlyIGluOiAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBt4bufIHLhu5luZyB0aMawIG3hu6VjIG5nxrDhu51pIGTDuW5nIHRyb25nOiDigJwlc+KAnSIKKworIzogY29uZmlnLmM6MTExNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZvciAnJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAi4oCcJXPigJ0gZMOgbmggY2hvIOKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbMOgIGThuqV1IHbhur90IHRo4budaSBnaWFuIGjhu6NwIGzhu4ciCisKKyM6IGNvbmZpZy5jOjEyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJicmV2IGxlbmd0aCBvdXQgb2YgcmFuZ2U6ICVkIgorbXNnc3RyICJjaGnhu4F1IGTDoGkgYWJicmV2IG7hurFtIG5nb8OgaSBwaOG6oW0gdmk6ICVkIgorCisjOiBjb25maWcuYzoxMjIyIGNvbmZpZy5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIm3hu6ljIG7DqW4gemxpYiAlZCBsw6Agc2FpIgorCisjOiBjb25maWcuYzoxMzI1Cittc2dpZCAiY29yZS5jb21tZW50Q2hhciBzaG91bGQgb25seSBiZSBvbmUgY2hhcmFjdGVyIgorbXNnc3RyICJjb3JlLmNvbW1lbnRDaGFyIGNo4buJIMSRxrDhu6NjIGPDsyBt4buZdCBrw70gdOG7sSIKKworIzogY29uZmlnLmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiCittc2dzdHIgImNo4bq/IMSR4buZIGtow7RuZyBo4bujcCBs4buHIMSR4buRaSB24bubaSB2aeG7h2MgdOG6oW8gxJHhu5FpIHTGsOG7o25nOiAlcyIKKworIzogY29uZmlnLmM6MTQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICJnacOhIHRy4buLIGNobyAlcyBzYWkgZOG6oW5nIgorCisjOiBjb25maWcuYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJnacOhIHRy4buLIGNobyAlcyBzYWkgZOG6oW5nOiAlcyIKKworIzogY29uZmlnLmM6MTQ1NworbXNnaWQgIm11c3QgYmUgb25lIG9mIG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsIHVwc3RyZWFtIG9yIGN1cnJlbnQiCittc2dzdHIgInBo4bqjaSBsw6AgbeG7mXQgdHJvbmcgc+G7kSBub3RoaW5nLCBtYXRjaGluZywgc2ltcGxlLCB1cHN0cmVhbSBoYXkgY3VycmVudCIKKworIzogY29uZmlnLmM6MTUxOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIm3hu6ljIG7DqW4gZ8OzaSAlZCBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogY29uZmlnLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBjb25maWcgYmxvYiBvYmplY3QgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqNpIMSR4buRaSB0xrDhu6NuZyBibG9iIGPhuqV1IGjDrG5oIOKAnCVz4oCdIgorCisjOiBjb25maWcuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgYmxvYiIKK21zZ3N0ciAidGhhbSBjaGnhur91IOKAnCVz4oCdIGtow7RuZyBjaOG7iSDEkeG6v24gbeG7mXQgYmxvYiBuw6BvIGPhuqMiCisKKyM6IGNvbmZpZy5jOjE2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgY29uZmlnIGJsb2IgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSDEkWnhu4NtIHjDqXQgZHV54buHdCDigJwlc+KAnSIKKworIzogY29uZmlnLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBwaMOibiB0w61jaCBjw7ogcGjDoXAgJXMiCisKKyM6IGNvbmZpZy5jOjE3NDMKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPhuqV1IGjDrG5oIGTDsm5nIGzhu4duaCIKKworIzogY29uZmlnLmM6MjA5NworbXNnaWQgInVua25vd24gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyIKK21zZ3N0ciAixJHDoyBjw7MgbOG7l2kgY2jGsGEgYmnhur90IHjhuqN5IHJhIHRyb25nIGtoaSDEkeG7jWMgY8OhYyB04bqtcCB0aW4gY+G6pXUgaMOsbmgiCisKKyM6IGNvbmZpZy5jOjIyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAiJXMga2jDtG5nIGjhu6NwIGzhu4c6IOKAnCVz4oCdIgorCisjOiBjb25maWcuYzoyMzEyCisjLCBjLWZvcm1hdAorbXNnaWQgInNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSB2YWx1ZSAnJWQnIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCIKK21zZ3N0ciAiZ2nDoSB0cuG7iyBzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2Ug4oCcJWTigJ0gcGjhuqNpIG7hurFtIGdp4buvYSAwIHbDoCAxMDAiCisKKyM6IGNvbmZpZy5jOjIzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2gg4oCcJXPigJ0gdOG7qyBj4bqldSBow6xuaCBkw7JuZyBs4buHbmgiCisKKyM6IGNvbmZpZy5jOjIzNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICJzYWkgYmnhur9uIGPhuqV1IGjDrG5oIOKAnCVz4oCdIHRyb25nIHThuq1wIHRpbiDigJwlc+KAnSB04bqhaSBkw7JuZyAlZCIKKworIzogY29uZmlnLmM6MjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZSAnJXMnIgorbXNnc3RyICJ0w6puIGPhu6dhIHBo4bqnbiBraMO0bmcgaOG7o3AgbOG7hyDigJwlc+KAnSIKKworIzogY29uZmlnLmM6MjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbXVsdGlwbGUgdmFsdWVzIgorbXNnc3RyICIlcyBjw7MgxJFhIGdpw6EgdHLhu4siCisKKyM6IGNvbmZpZy5jOjI1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIG5ldyBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBnaGkgdOG6rXAgdGluIGPhuqV1IGjDrG5oIOKAnCVz4oCdIgorCisjOiBjb25maWcuYzoyNzU0IGNvbmZpZy5jOjMwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBraMOzYSB04bqtcCB0aW4gY+G6pXUgaMOsbmggJXMiCisKKyM6IGNvbmZpZy5jOjI3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyAlcyIKK21zZ3N0ciAixJFhbmcgbeG7nyDigJwlc+KAnSIKKworIzogY29uZmlnLmM6MjgwMCBidWlsdGluL2NvbmZpZy5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdHRlcm46ICVzIgorbXNnc3RyICJt4bqrdSBraMO0bmcgaOG7o3AgbOG7hzogJXMiCisKKyM6IGNvbmZpZy5jOjI4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAidOG6rXAgdGluIGPhuqV1IGjDrG5oIOKAnCVz4oCdIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBjb25maWcuYzoyODM4IGNvbmZpZy5jOjMwOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnN0YXQgb24gJXMgZmFpbGVkIgorbXNnc3RyICJmc3RhdCB0csOqbiAlcyBn4bq3cCBs4buXaSIKKworIzogY29uZmlnLmM6Mjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbW1hcCDigJwlc+KAnSIKKworIzogY29uZmlnLmM6Mjg1OCBjb25maWcuYzozMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNobW9kIG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiY2htb2QgdHLDqm4gJXMgZ+G6t3AgbOG7l2kiCisKKyM6IGNvbmZpZy5jOjI5NDMgY29uZmlnLmM6MzE5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgdOG6rXAgdGluIGPhuqV1IGjDrG5oIOKAnCVz4oCdIgorCisjOiBjb25maWcuYzoyOTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgJyVzJyB0byAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhurd0IOKAnCVz4oCdIHRow6BuaCDigJwlc+KAnSIKKworIzogY29uZmlnLmM6Mjk3OSBidWlsdGluL3JlbW90ZS5jOjY1NSBidWlsdGluL3JlbW90ZS5jOjg0OSBidWlsdGluL3JlbW90ZS5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRow7RpIMSR4bq3dCDigJwlc+KAnSIKKworIzogY29uZmlnLmM6MzA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZTogJXMiCittc2dzdHIgInTDqm4gY+G7p2EgcGjhuqduIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogY29uZmlnLmM6MzIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIHZhbHVlIGZvciAnJXMnIgorbXNnc3RyICJ0aGnhur91IGdpw6EgdHLhu4sgY2hvIGNobyDigJwlc+KAnSIKKworIzogY29ubmVjdC5jOjYxCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1cG9uIGluaXRpYWwgY29udGFjdCIKK21zZ3N0ciAibcOheSBjaOG7pyBi4buLIHRyZW8gdHLDqm4gbOG6p24gdGnhur9wIHjDumMgxJHhuqd1IHRpw6puIgorCisjOiBjb25uZWN0LmM6NjMKK21zZ2lkICIiCisiQ291bGQgbm90IHJlYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS5cbiIKKyJcbiIKKyJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHNcbiIKKyJhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyDEkeG7jWMgdOG7qyBraG8gdHLDqm4gbeG6oW5nLlxuIgorIlxuIgorIlZ1aSBsw7JuZyBjaOG6r2MgY2jhuq9uIGzDoCBi4bqhbiBjw7MgxJHhu6cgdGjhuqltIHF1eeG7gW4gdHJ1eSBj4bqtcFxuIgorInbDoCBraG8gY2jhu6lhIMSRw6Mgc+G6tW4gY8OzLiIKKworIzogY29ubmVjdC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciBkb2Vzbid0IHN1cHBvcnQgJyVzJyIKK21zZ3N0ciAibcOheSBjaOG7pyBraMO0bmcgaOG7lyB0cuG7oyDigJwlc+KAnSIKKworIzogY29ubmVjdC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IGZlYXR1cmUgJyVzJyIKK21zZ3N0ciAibcOheSBjaOG7pyBraMO0bmcgaOG7lyB0cuG7oyB0w61uaCBuxINuZyDigJwlc+KAnSIKKworIzogY29ubmVjdC5jOjExNAorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAiY+G6p24gxJHhuql5IGThu68gbGnhu4d1IGzDqm4gxJHEqWEgc2F1IGPDoWMgY2FwYWJpbGl0aWVzIgorCisjOiBjb25uZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGNhcGFiaWxpdGllcyBhZnRlciBmaXJzdCBsaW5lICclcyciCittc2dzdHIgImLhu48gcXVhIGNhcGFiaWxpdGllcyBzYXUgZMOybmcgxJHhuqd1IHRpw6puIOKAnCVz4oCdIgorCisjOiBjb25uZWN0LmM6MjUyCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgY2FwYWJpbGl0aWVzXnt9IgorbXNnc3RyICJs4buXaSBnaWFvIHRo4bupYzoga2jDtG5nIGPhuqduIGNhcGFiaWxpdGllc157fSIKKworIzogY29ubmVjdC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogZXhwZWN0ZWQgc2hhbGxvdyBzaGEtMSwgZ290ICclcyciCittc2dzdHIgImzhu5dpIGdpYW8gdGjhu6ljOiBj4bqnbiBzaGEtMSBzaGFsbG93LCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjIOKAnCVz4oCdIgorCisjOiBjb25uZWN0LmM6Mjc1Cittc2dpZCAicmVwb3NpdG9yeSBvbiB0aGUgb3RoZXIgZW5kIGNhbm5vdCBiZSBzaGFsbG93IgorbXNnc3RyICJraG8gxJHDoyDhu58gxJFp4buDbSBjdeG7kWkga2hvw6FjIG7Dqm4ga2jDtG5nIHRo4buDIMSRxrDhu6NjIHNoYWxsb3ciCisKKyM6IGNvbm5lY3QuYzozMTMKK21zZ2lkICJpbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAiZ8OzaSBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogY29ubmVjdC5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCAnJXMnIgorbXNnc3RyICJs4buXaSBnaWFvIHRo4bupYzoga2jDtG5nIGPhuqduIOKAnCVz4oCdIgorCisjOiBjb25uZWN0LmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbHMtcmVmcyByZXNwb25zZTogJXMiCittc2dzdHIgInRy4bqjIHbhu4EgY+G7p2EgbHMtcmVmcyBraMO0bmcgaOG7o3AgbOG7hzogJXMiCisKKyM6IGNvbm5lY3QuYzo0NDUKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciByZWYgbGlzdGluZyIKK21zZ3N0ciAiY+G6p24gxJHhuql5IGThu68gbGnhu4d1IGzDqm4gxJHEqWEgc2F1IGtoaSBsaeG7h3Qga8OqIHRoYW0gY2hp4bq/dSIKKworIzogY29ubmVjdC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCAnJXMnIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgImdpYW8gdGjhu6ljIOKAnCVz4oCdIGNoxrBhIMSRxrDhu6NjIGjhu5cgdHLhu6MiCisKKyM6IGNvbm5lY3QuYzo1OTUKK21zZ2lkICJ1bmFibGUgdG8gc2V0IFNPX0tFRVBBTElWRSBvbiBzb2NrZXQiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG6t3QgU09fS0VFUEFMSVZFIHRyw6puIOG7lSBj4bqvbSIKKworIzogY29ubmVjdC5jOjYzNSBjb25uZWN0LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkxvb2tpbmcgdXAgJXMgLi4uICIKK21zZ3N0ciAixJBhbmcgdMOsbSBraeG6v20gJXMg4oCmICIKKworIzogY29ubmVjdC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCAlcyAocG9ydCAlcykgKCVzKSIKK21zZ3N0ciAia2jDtG5nIHTDrG0gxJHGsOG7o2MgJXMgKGPhu5VuZyAlcykgKCVzKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiTG9va2luZyB1cCAlcyAuLi4gIgorIzogY29ubmVjdC5jOjY0MyBjb25uZWN0LmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkb25lLlxuIgorIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCittc2dzdHIgIiIKKyJ4b25nLlxuIgorIsSQYW5nIGvhur90IG7hu5FpIMSR4bq/biAlcyAoY+G7lW5nICVzKSDigKYgIgorCisjOiBjb25uZWN0LmM6NjY1IGNvbm5lY3QuYzo3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byBjb25uZWN0IHRvICVzOlxuIgorIiVzIgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIGvhur90IG7hu5FpIMSR4bq/biAlczpcbiIKKyIlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKKyM6IGNvbm5lY3QuYzo2NzEgY29ubmVjdC5jOjc0OAorbXNnaWQgImRvbmUuIgorbXNnc3RyICJob8OgbiB04bqldC4iCisKKyM6IGNvbm5lY3QuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5ICVzICglcykiCisKKyM6IGNvbm5lY3QuYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwb3J0ICVzIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IGPhu5VuZyAlcyIKKworIzogY29ubmVjdC5jOjg0NSBjb25uZWN0LmM6MTE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIGhvc3RuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAixJHDoyBraMOzYSB0w6puIG3DoXkgbOG6oSDigJwlc+KAnSIKKworIzogY29ubmVjdC5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBvcnQgJyVzJyBibG9ja2VkIgorbXNnc3RyICLEkcOjIGtow7NhIGPhu5VuZyBs4bqhIOKAnCVz4oCdIgorCisjOiBjb25uZWN0LmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGFydCBwcm94eSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGto4bufaSBjaOG6oXkg4buneSBuaGnhu4dtIOKAnCVz4oCdIgorCisjOiBjb25uZWN0LmM6OTI4Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQ7IHNlZSAnZ2l0IGhlbHAgcHVsbCcgZm9yIHZhbGlkIHVybCBzeW50YXgiCittc2dzdHIgImNoxrBhIGNo4buJIMSR4buLbmggxJHGsOG7nW5nIGThuqtuOyB4ZW0nZ2l0IGhlbHAgcHVsbOKAnSDEkeG7gyBiaeG6v3QgY8O6IHBow6FwIHVybCBo4bujcCBs4buHIgorCisjOiBjb25uZWN0LmM6MTEyMworbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTQiCittc2dzdHIgInNzaCBiaeG6v24gdGjhu4Mg4oCcc2ltcGxl4oCdIGtow7RuZyBo4buXIHRy4bujIC00IgorCisjOiBjb25uZWN0LmM6MTEzNQorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiCittc2dzdHIgInNzaCBiaeG6v24gdGjhu4Mg4oCcc2ltcGxl4oCdIGtow7RuZyBo4buXIHRy4bujIC02IgorCisjOiBjb25uZWN0LmM6MTE1MgorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBwb3J0IgorbXNnc3RyICJzc2ggYmnhur9uIHRo4buDIOKAnHNpbXBsZeKAnSBraMO0bmcgaOG7lyB0cuG7oyDEkeG6t3QgY+G7lW5nIgorCisjOiBjb25uZWN0LmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBhdGhuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAixJHDoyBraMOzYSB0w6puIMSRxrDhu51uZyBk4bqrbiBs4bqhIOKAnCVz4oCdIgorCisjOiBjb25uZWN0LmM6MTMxMQorbXNnaWQgInVuYWJsZSB0byBmb3JrIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcuG6vSBuaMOhbmggdGnhur9uIHRyw6xuaCBjb24iCisKKyM6IGNvbm5lY3RlZC5jOjk4IGJ1aWx0aW4vZnNjay5jOjIwOCBidWlsdGluL3BydW5lLmM6NDMKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkiCittc2dzdHIgIsSQYW5nIGtp4buDbSB0cmEga+G6v3QgbuG7kWkiCisKKyM6IGNvbm5lY3RlZC5jOjExMAorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgIktow7RuZyB0aOG7gyBjaOG6oXkg4oCcZ2l0IHJldi1saXN04oCdIgorCisjOiBjb25uZWN0ZWQuYzoxMzAKK21zZ2lkICJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3QiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBnaGkgdsOgbyByZXYtbGlzdCIKKworIzogY29ubmVjdGVkLmM6MTM3Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkcOzbmcgxJHhuqd1IHbDoG8gY2h14bqpbiBzdGRpbiBj4bunYSByZXYtbGlzdCIKKworIzogY29udmVydC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIgorbXNnc3RyICJjcmxmX2FjdGlvbiAlZCBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogY29udmVydC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJDUkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzIgorbXNnc3RyICJDUkxGIG7Dqm4gxJHGsOG7o2MgdGhheSBi4bqxbmcgTEYgdHJvbmcgJXMiCisKKyM6IGNvbnZlcnQuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNSTEYgd2lsbCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiQ1JMRiBz4bq9IGLhu4sgdGhheSB0aOG6vyBi4bqxbmcgTEYgdHJvbmcgJXMuXG4iCisiVOG6rXAgdGluIHPhur0gY8OzIGtp4buDdSB4deG7kW5nIGTDsm5nIG5oxrAgYuG6o24gZ+G7kWMgdHJvbmcgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBj4bunYSBi4bqhbiIKKworIzogY29udmVydC5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIgorbXNnc3RyICJMRiBuw6puIHRoYXkgYuG6sW5nIENSTEYgdHJvbmcgJXMiCisKKyM6IGNvbnZlcnQuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiTEYgc+G6vSBi4buLIHRoYXkgdGjhur8gYuG6sW5nIENSTEYgdHJvbmcgJXMuXG4iCisiVOG6rXAgdGluIHPhur0gY8OzIGtp4buDdSB4deG7kW5nIGTDsm5nIG5oxrAgYuG6o24gZ+G7kWMgdHJvbmcgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBj4bunYSBi4bqhbiIKKworIzogY29udmVydC5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcHJvaGliaXRlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIkJPTSBi4buLIGPhuqVtIHRyb25nIOKAnCVz4oCdIG7hur91IMSRxrDhu6NjIG3DoyBow7NhIGzDoCAlcyIKKworIzogY29udmVydC5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBjb250YWlucyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJS4qcyBhcyAiCisid29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAiIgorIlThuq1wIHRpbiDigJwlc+KAnSBjw7MgY2jhu6lhIGvDvSBoaeG7h3UgdGjhu6kgdOG7sSBieXRlIChCT00pLiBWdWkgbMOybmcgZMO5bmcgVVRGLSUuKnMgbmjGsCAiCisibMOgIGLhuqNuZyBtw6MgY8OieSBsw6BtIHZp4buHYy4iCisKKyM6IGNvbnZlcnQuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHJlcXVpcmVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAiQk9NIGzDoCBi4bqvdCBideG7mWMgdHJvbmcg4oCcJXPigJ0gbuG6v3UgxJHGsOG7o2MgbcOjIGjDs2EgbMOgICVzIgorCisjOiBjb252ZXJ0LmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGlzIG1pc3NpbmcgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSVzQkUgb3IgVVRGLSIKKyIlc0xFIChkZXBlbmRpbmcgb24gdGhlIGJ5dGUgb3JkZXIpIGFzIHdvcmtpbmctdHJlZS1lbmNvZGluZy4iCittc2dzdHIgIiIKKyJU4bqtcCB0aW4g4oCcJXPigJ0gY8OybiB0aGnhur91IGvDvSBoaeG7h3UgdGjhu6kgdOG7sSBieXRlIChCT00pLiBWdWkgbMOybmcgZMO5bmcgVVRGLSVzQkUgaGF5ICIKKyJVVEYtJXNMRSAoY8OybiBwaOG7pWMgdGh14buZYyB2w6BvIHRo4bupIHThu7EgYnl0ZSkgbmjGsCBsw6AgYuG6o25nIG3DoyBjw6J5IGzDoG0gdmnhu4djLiIKKworIzogY29udmVydC5jOjQxOSBjb252ZXJ0LmM6NDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBlbmNvZGUgJyVzJyBmcm9tICVzIHRvICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgbcOjIGjDs2Eg4oCcJXPigJ0gIHThu6sg4oCcJXPigJ0gc2FuZyDigJwlc+KAnSIKKworIzogY29udmVydC5jOjQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICJlbmNvZGluZyAnJXMnIGZyb20gJXMgdG8gJXMgYW5kIGJhY2sgaXMgbm90IHRoZSBzYW1lIgorbXNnc3RyICJtw6MgaMOzYSDigJwlc+KAnSB04burICVzIHRow6BuaCAlcyB2w6AgbmfGsOG7o2MgdHLhu58gbOG6oWkga2jDtG5nIHBo4bqjaSBsw6AgY8O5bmciCisKKyM6IGNvbnZlcnQuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgdG8gcnVuIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcuG6vSBuaMOhbmggdGnhur9uIHRyw6xuaCDEkeG7gyBjaOG6oXkgYuG7mSBs4buNYyBiw6puIG5nb8OgaSDigJwlc+KAnSIKKworIzogY29udmVydC5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmVlZCB0aGUgaW5wdXQgdG8gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBj4bqlcCDEkeG6p3UgdsOgbyBjaG8gYuG7mSBs4buNYyBiw6puIG5nb8OgaSDigJwlc+KAnSIKKworIzogY29udmVydC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQgJWQiCittc2dzdHIgImNo4bqheSBi4buZIGzhu41jIGLDqm4gbmdvw6BpIOKAnCVz4oCdIGfhurdwIGzhu5dpICVkIgorCisjOiBjb252ZXJ0LmM6NzMwIGNvbnZlcnQuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBmcm9tIGV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAixJHhu41jIHThu6sgYuG7mSBs4buNYyBiw6puIG5nb8OgaSDigJwlc+KAnSBn4bq3cCBs4buXaSIKKworIzogY29udmVydC5jOjczNiBjb252ZXJ0LmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGNo4bqheSBi4buZIGzhu41jIGLDqm4gbmdvw6BpIOKAnCVz4oCdIgorCisjOiBjb252ZXJ0LmM6ODM5Cittc2dpZCAidW5leHBlY3RlZCBmaWx0ZXIgdHlwZSIKK21zZ3N0ciAiZ+G6t3Aga2nhu4N1IGLhu5kgbOG7jWMgdGjhu6thIgorCisjOiBjb252ZXJ0LmM6ODUwCittc2dpZCAicGF0aCBuYW1lIHRvbyBsb25nIGZvciBleHRlcm5hbCBmaWx0ZXIiCittc2dzdHIgInTDqm4gxJHGsOG7nW5nIGThuqtuIHF1w6EgZMOgaSBjaG8gYuG7mSBs4buNYyBiw6puIG5nb8OgaSIKKworIzogY29udmVydC5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXh0ZXJuYWwgZmlsdGVyICclcycgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGFsdGhvdWdoIG5vdCBhbGwgcGF0aHMgaGF2ZSAiCisiYmVlbiBmaWx0ZXJlZCIKK21zZ3N0ciAiIgorImLhu5kgbOG7jWMgYsOqbiBuZ2/DoGkg4oCcJXPigJ0ga2jDtG5nIHPhurVuIHPDoG5nIG7hu69hIG3hurdjIGTDuSBraMO0bmcgcGjhuqNpIHThuqV0IGPhuqMgY8OhYyDEkcaw4budbmcgIgorImThuqtuIMSRw6MgxJHGsOG7o2MgbOG7jWMiCisKKyM6IGNvbnZlcnQuYzoxMjIzCittc2dpZCAidHJ1ZS9mYWxzZSBhcmUgbm8gdmFsaWQgd29ya2luZy10cmVlLWVuY29kaW5ncyIKK21zZ3N0ciAidHJ1ZS9mYWxzZSBsw6Aga2jDtG5nIHBo4bqjaSBi4bqjbmctbcOjLWPDonktbMOgbS12aeG7h2MgaOG7o3AgbOG7hyIKKworIzogY29udmVydC5jOjE0MTEgY29udmVydC5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiJXM6IGfhurdwIGzhu5dpIGtoaSB4w7NhIGLhu5kgbOG7jWMg4oCcJXPigJ0iCisKKyM6IGNvbnZlcnQuYzoxNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBzbXVkZ2UgZmlsdGVyICVzIGZhaWxlZCIKK21zZ3N0ciAiJXM6IHNtdWRnZSBi4buZIGzhu41jICVzIGfhurdwIGzhu5dpIgorCisjOiBkYXRlLmM6MTM4Cittc2dpZCAiaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAi4bufIHRo4budaSB0xrDGoW5nIGxhaSIKKworIzogZGF0ZS5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gZ2nDonkgdHLGsOG7m2MiCisKKyM6IGRhdGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtaW51dGUgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IHBow7p0IHRyxrDhu5tjIgorCisjOiBkYXRlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gaG91cnMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IGdp4budIHRyxrDhu5tjIgorCisjOiBkYXRlLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBkYXlzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiBuZ8OgeSB0csaw4bubYyIKKworIzogZGF0ZS5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHdlZWsgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHdlZWtzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiB0deG6p24gdHLGsOG7m2MiCisKKyM6IGRhdGUuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiB0aMOhbmcgdHLGsOG7m2MiCisKKyM6IGRhdGUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IG7Eg20iCisKKyMuIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiCisjOiBkYXRlLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiJXMsICU8UFJJdU1BWD4gdGjDoW5nIHRyxrDhu5tjIgorCisjOiBkYXRlLmM6MTk3IGRhdGUuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gbsSDbSB0csaw4bubYyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI3MgorbXNnaWQgIlByb3BhZ2F0aW5nIGlzbGFuZCBtYXJrcyIKK21zZ3N0ciAixJBhbmcgbGFuIHRydXnhu4FuIGPDoWMgxJHDoW5oIGThuqV1IGlzbGFuZCIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdHJlZSBvYmplY3QgJXMiCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyBjw6J5IHNhaSDigJwlc+KAnSIKKworIzogZGVsdGEtaXNsYW5kcy5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBpc2xhbmQgcmVnZXggZm9yICclcyc6ICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdOG6o2kgYmnhu4N1IHRo4bupYyBjaMOtbmggcXV5IGlzbGFuZCBjaG8g4oCcJXPigJ06ICVzIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlzbGFuZCByZWdleCBmcm9tIGNvbmZpZyBoYXMgdG9vIG1hbnkgY2FwdHVyZSBncm91cHMgKG1heD0lZCkiCittc2dzdHIgIiIKKyJiaeG7g3UgdGjhu6ljIGNow61uaCBxdXkgaXNsYW5kIHThu6sgY+G6pXUgaMOsbmggY8OzIHF1w6Egbmhp4buBdSBuaMOzbSBjaOG7pXAgKHThu5FpIMSRYT0lZCkiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2VkICVkIGlzbGFuZHMsIGRvbmUuXG4iCittc2dzdHIgIsSQw6MgxJHDoW5oIGThuqV1ICVkIGlzbGFuZCwgeG9uZy5cbiIKKworIzogZGlmZmNvcmUtb3JkZXIuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvcmRlcmZpbGUgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buNYyB04bqtcC10aW4tdGjhu6ktdOG7sSDigJwlc+KAnSIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTQzCittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIsSQYW5nIHRo4buxYyBoaeG7h24gZMOyIHTDrG0gxJHhu5VpIHTDqm4ga2jDtG5nIGNow61uaCB4w6FjIgorCisjOiBkaWZmLW5vLWluZGV4LmM6MjM4Cittc2dpZCAiZ2l0IGRpZmYgLS1uby1pbmRleCBbPG9wdGlvbnM+XSA8cGF0aD4gPHBhdGg+IgorbXNnc3RyICJnaXQgZGlmZiAtLW5vLWluZGV4IFs8Y8OhYyB0w7l5IGNo4buNbj5dIDwvxJHGsOG7nW5nL2ThuqtuPiA8L8SRxrDhu51uZy9k4bqrbj4iCisKKyM6IGRpZmYtbm8taW5kZXguYzoyNjMKK21zZ2lkICIiCisiTm90IGEgZ2l0IHJlcG9zaXRvcnkuIFVzZSAtLW5vLWluZGV4IHRvIGNvbXBhcmUgdHdvIHBhdGhzIG91dHNpZGUgYSB3b3JraW5nICIKKyJ0cmVlIgorbXNnc3RyICIiCisiS2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgdGjGsCBt4bulYyBnaXQuIETDuW5nIC0tbm8taW5kZXggxJHhu4Mgc28gc8OhbmggaGFpIMSRxrDhu51uZyBk4bqrbiBiw6puICIKKyJuZ2/DoGkgbeG7mXQgY8OieSBsw6BtIHZp4buHYyIKKworIzogZGlmZi5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJXMnXG4iCittc2dzdHIgIiAgR+G6t3AgbOG7l2kga2hpIHBow6JuIHTDrWNoIGRpcnN0YXQgY+G6r3QgYuG7jyBwaOG6p24gdHLEg20g4oCcJXPigJ1cbiIKKworIzogZGlmZi5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIEtow7RuZyBoaeG7g3UgxJHhu5FpIHPhu5EgZGlyc3RhdCDigJwlc+KAnVxuIgorCisjOiBkaWZmLmM6Mjk2Cittc2dpZCAiIgorImNvbG9yIG1vdmVkIHNldHRpbmcgbXVzdCBiZSBvbmUgb2YgJ25vJywgJ2RlZmF1bHQnLCAnYmxvY2tzJywgJ3plYnJhJywgIgorIidkaW1tZWQtemVicmEnLCAncGxhaW4nIgorbXNnc3RyICIiCisiY8OgaSDEkeG6t3QgbcOgdSDEkcOjIGRpIGNodXnhu4NuIHBo4bqjaSBsw6AgbeG7mXQgdHJvbmcg4oCcbm/igJ0sIOKAnGRlZmF1bHTigJ0sIOKAnGJsb2Nrc+KAnSwgIgorIuKAnHplYnJh4oCdLCDigJxkaW1tZWRfemVicmHigJ0sIOKAnHBsYWlu4oCdIgorCisjOiBkaWZmLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmtub3duIGNvbG9yLW1vdmVkLXdzIG1vZGUgJyVzJywgcG9zc2libGUgdmFsdWVzIGFyZSAnaWdub3JlLXNwYWNlLWNoYW5nZScsICIKKyInaWdub3JlLXNwYWNlLWF0LWVvbCcsICdpZ25vcmUtYWxsLXNwYWNlJywgJ2FsbG93LWluZGVudGF0aW9uLWNoYW5nZSciCittc2dzdHIgIiIKKyJraMO0bmcgaGnhu4N1IGNo4bq/IMSR4buZIGNvbG9yLW1vdmVkLXdzIOKAnCVz4oCdLCBjw6FjIGdpw6EgdHLhu4sgY8OzIHRo4buDIGzDoCDigJxpZ25vcmUtc3BhY2UtIgorImNoYW5nZeKAnSwg4oCcaWdub3JlLXNwYWNlLWF0LWVvbOKAnSwg4oCcaWdub3JlLWFsbC1zcGFjZeKAnSwg4oCcYWxsb3ctaW5kZW50YXRpb24tIgorImNoYW5nZeKAnSIKKworIzogZGlmZi5jOjMzMgorbXNnaWQgIiIKKyJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyICIKKyJ3aGl0ZXNwYWNlIG1vZGVzIgorbXNnc3RyICIiCisiY29sb3ItbW92ZWQtd3M6IGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBraMO0bmcgdGjhu4MgdOG7lSBo4bujcCBjw7luZyB24bubaSBjw6FjIGNo4bq/ICIKKyLEkeG7mSBraG/huqNuZyB0cuG6r25nIGtow6FjIgorCisjOiBkaWZmLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdmFsdWUgZm9yICdkaWZmLnN1Ym1vZHVsZScgY29uZmlnIHZhcmlhYmxlOiAnJXMnIgorbXNnc3RyICJLaMO0bmcgaGnhu4N1IGdpw6EgdHLhu4sgY2hvIGJp4bq/biBj4bqldSBow6xuaCDigJxkaWZmLnN1Ym1vZHVsZeKAnTog4oCcJXPigJ0iCisKKyM6IGRpZmYuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJUw6xtIHRo4bqleSBjw6FjIGzhu5dpIHRyb25nIGJp4bq/biBj4bqldSBow6xuaCDigJxkaWZmLmRpcnN0YXTigJ06XG4iCisiJXMiCisKKyM6IGRpZmYuYzo0MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGRpZmYgZGllZCwgc3RvcHBpbmcgYXQgJXMiCittc2dzdHIgInBo4bqnbiBt4buBbSBkaWZmIOG7nyBiw6puIG5nb8OgaSDEkcOjIGNo4bq/dCwgZOG7q25nIHThuqFpICVzIgorCisjOiBkaWZmLmM6NDU0NworbXNnaWQgIi0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtLWNoZWNrIGFuZCAtcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayB2w6AgLXMgbG/huqFpIHThu6sgbOG6q24gbmhhdSIKKworIzogZGlmZi5jOjQ1NTAKK21zZ2lkICItRywgLVMgYW5kIC0tZmluZC1vYmplY3QgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiAtRywgLVMsIHbDoCAtLWZpbmQtb2JqZWN0IGxv4bqhaSB04burIGzhuqtuIG5oYXUiCisKKyM6IGRpZmYuYzo0NjI4Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIi0tZm9sbG93IGPhuqduIGNow61uaCB4w6FjIG3hu5l0IMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiIKKworIzogZGlmZi5jOjQ2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLXN0YXQgdmFsdWU6ICVzIgorbXNnc3RyICJnacOhIHRy4buLIC0tc3RhdCBraMO0bmcgaOG7o3AgbOG7hzog4oCcJXPigJ0iCisKKyM6IGRpZmYuYzo0NjgxIGRpZmYuYzo0Njg2IGRpZmYuYzo0NjkxIGRpZmYuYzo0Njk2IGRpZmYuYzo1MjA5CisjOiBwYXJzZS1vcHRpb25zLmM6MTk3IHBhcnNlLW9wdGlvbnMuYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAidMO5eSBjaOG7jW4g4oCcJXPigJ0gY+G6p24gbeG7mXQgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSIKKworIzogZGlmZi5jOjQ3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkfhurdwIGzhu5dpIGtoaSBwaMOibiB0w61jaCDEkeG7kWkgc+G7kSB0w7l5IGNo4buNbiAtLWRpcnN0YXQvLVg6XG4iCisiJXMiCisKKyM6IGRpZmYuYzo0Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY2hhbmdlIGNsYXNzICclYycgaW4gLS1kaWZmLWZpbHRlcj0lcyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSBs4bubcCB0aGF5IMSR4buVaSDigJwlY+KAnSB0cm9uZyAtLWRpZmYtZmlsdGVyPSVzIgorCisjOiBkaWZmLmM6NDgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGFmdGVyIHdzLWVycm9yLWhpZ2hsaWdodD0lLipzIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IGdpw6EgdHLhu4sgc2F1IHdzLWVycm9yLWhpZ2hsaWdodD0lLipzIgorCisjOiBkaWZmLmM6NDgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpIOKAnCVz4oCdIgorCisjOiBkaWZmLmM6NDg4NiBkaWZmLmM6NDg5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIDxuPi88bT4gZm9ybSIKK21zZ3N0ciAiJXMgY+G6p24gZOG6oW5nIDxuPi88bT4iCisKKyM6IGRpZmYuYzo0OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBjaGFyYWN0ZXIsIGdvdCAnJXMnIgorbXNnc3RyICIlcyBj4bqnbiBt4buZdCBrw70gdOG7sSwgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyDigJwlc+KAnSIKKworIzogZGlmZi5jOjQ5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0tY29sb3ItbW92ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLEkeG7kWkgc+G7kSAtLWNvbG9yLW1vdmVkIHNhaTogJXMiCisKKyM6IGRpZmYuYzo0OTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSAnJXMnIGluIC0tY29sb3ItbW92ZWQtd3MiCittc2dzdHIgImNo4bq/IMSR4buZIOKAnCVz4oCdIGtow7RuZyBo4bujcCBs4buHIHRyb25nIC0tY29sb3ItbW92ZWQtd3MiCisKKyM6IGRpZmYuYzo0OTg0Cittc2dpZCAiIgorIm9wdGlvbiBkaWZmLWFsZ29yaXRobSBhY2NlcHRzIFwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2VcIiBhbmQgIgorIlwiaGlzdG9ncmFtXCIiCittc2dzdHIgIiIKKyJ0w7l5IGNo4buNbiAgZGlmZi1hbGdvcml0aG0gY2jhuqVwIG5o4bqtbiBcIm15ZXJzXCIsIFwibWluaW1hbFwiLCBcInBhdGllbmNlXCIgdsOgICIKKyJcImhpc3RvZ3JhbVwiIgorCisjOiBkaWZmLmM6NTAyMCBkaWZmLmM6NTA0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50IHRvICVzIgorbXNnc3RyICJ0aGFtIHPhu5EgY2hvICVzIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBkaWZmLmM6NTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHBow6JuIHTDrWNoIMSR4buRaSBz4buRIHTDuXkgY2jhu41uIC0tc3VibW9kdWxlOiDigJwlc+KAnSIKKworIzogZGlmZi5jOjUyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0td29yZC1kaWZmIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAixJHhu5FpIHPhu5EgLS13b3JkLWRpZmYgc2FpOiAlcyIKKworIzogZGlmZi5jOjUyNTcKK21zZ2lkICJEaWZmIG91dHB1dCBmb3JtYXQgb3B0aW9ucyIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiDEkeG7i25oIGThuqFuZyBraGkgeHXhuqV0IGPDoWMga2jDoWMgYmnhu4d0IgorCisjOiBkaWZmLmM6NTI1OSBkaWZmLmM6NTI2NQorbXNnaWQgImdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJ04bqhbyBtaeG6v25nIHbDoSIKKworIzogZGlmZi5jOjUyNjIgYnVpbHRpbi9sb2cuYzoxNzMKK21zZ2lkICJzdXBwcmVzcyBkaWZmIG91dHB1dCIKK21zZ3N0ciAiY2jhurduIG3hu41pIGvhur90IHh14bqldCB04burIGRpZmYiCisKKyM6IGRpZmYuYzo1MjY3IGRpZmYuYzo1MzgxIGRpZmYuYzo1Mzg4Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGRpZmYuYzo1MjY4IGRpZmYuYzo1MjcxCittc2dpZCAiZ2VuZXJhdGUgZGlmZnMgd2l0aCA8bj4gbGluZXMgY29udGV4dCIKK21zZ3N0ciAidOG6oW8ga2jDoWMgYmnhu4d0IHbhu5tpIDxuPiBkw7JuZyBuZ+G7ryBj4bqjbmgiCisKKyM6IGRpZmYuYzo1MjczCittc2dpZCAiZ2VuZXJhdGUgdGhlIGRpZmYgaW4gcmF3IGZvcm1hdCIKK21zZ3N0ciAidOG6oW8ga2jDoWMgYmnhu4d0IOG7nyDEkeG7i25oIGThuqFuZyB0aMO0IgorCisjOiBkaWZmLmM6NTI3NgorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXJhdyciCittc2dzdHIgIsSR4buTbmcgbmdoxKlhIHbhu5tpIOKAnC1wIC0tcmF34oCdIgorCisjOiBkaWZmLmM6NTI4MAorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXN0YXQnIgorbXNnc3RyICLEkeG7k25nIG5naMSpYSB24bubaSDigJwtcCAtLXN0YXTigJ0iCisKKyM6IGRpZmYuYzo1Mjg0Cittc2dpZCAibWFjaGluZSBmcmllbmRseSAtLXN0YXQiCittc2dzdHIgIi0tc3RhdCB0aHXhuq1uIHRp4buHbiBjaG8gbcOheSDEkeG7jWMiCisKKyM6IGRpZmYuYzo1Mjg3Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIGxhc3QgbGluZSBvZiAtLXN0YXQiCittc2dzdHIgImNo4buJIHh14bqldCBuaOG7r25nIGTDsm5nIGN14buRaSBj4bunYSAtLXN0YXQiCisKKyM6IGRpZmYuYzo1Mjg5IGRpZmYuYzo1Mjk3Cittc2dpZCAiPHBhcmFtMSxwYXJhbTI+Li4uIgorbXNnc3RyICI8dGhhbV9z4buRXzEsdGhhbV9z4buRXzI+4oCmIgorCisjOiBkaWZmLmM6NTI5MAorbXNnaWQgIiIKKyJvdXRwdXQgdGhlIGRpc3RyaWJ1dGlvbiBvZiByZWxhdGl2ZSBhbW91bnQgb2YgY2hhbmdlcyBmb3IgZWFjaCBzdWItZGlyZWN0b3J5IgorbXNnc3RyICLEkeG6p3UgcmEgcGjDom4gcGjhu5FpIGPhu6dhIHPhu5EgbMaw4bujbmcgdGhheSDEkeG7lWkgdMawxqFuZyDEkeG7kWkgY2hvIG3hu5dpIHRoxrAgbeG7pWMgY29uIgorCisjOiBkaWZmLmM6NTI5NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1jdW11bGF0aXZlIgorbXNnc3RyICLEkeG7k25nIG5naMSpYSB24bubaSAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSIKKworIzogZGlmZi5jOjUyOTgKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9ZmlsZXMscGFyYW0xLHBhcmFtMi4uLiIKK21zZ3N0ciAixJHhu5NuZyBuZ2jEqWEgduG7m2kgLS1kaXJzdGF0PWZpbGVzLHBhcmFtMSxwYXJhbTLigKYiCisKKyM6IGRpZmYuYzo1MzAyCittc2dpZCAid2FybiBpZiBjaGFuZ2VzIGludHJvZHVjZSBjb25mbGljdCBtYXJrZXJzIG9yIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICIiCisiY+G6o25oIGLDoW8gbuG6v3UgY8OhYyB0aGF5IMSR4buVaSDEkcawYSByYSBjw6FjIGLhu5kgdOG6oW8geHVuZyDEkeG7mXQgaGF5IGzhu5dpIGtob+G6o25nIHRy4bqvbmciCisKKyM6IGRpZmYuYzo1MzA1Cittc2dpZCAiY29uZGVuc2VkIHN1bW1hcnkgc3VjaCBhcyBjcmVhdGlvbnMsIHJlbmFtZXMgYW5kIG1vZGUgY2hhbmdlcyIKK21zZ3N0ciAidOG7lW5nIGjhu6NwIGThuqFuZyB4w7pjIHTDrWNoIG5oxrAgbMOgIHThuqFvLCDEkeG7lWkgdMOqbiB2w6AgY8OhYyB0aGF5IMSR4buVaSBjaOG6vyDEkeG7mSIKKworIzogZGlmZi5jOjUzMDgKK21zZ2lkICJzaG93IG9ubHkgbmFtZXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIHTDqm4gY+G7p2EgY8OhYyB04bqtcCB0aW4gxJHhu5VpIgorCisjOiBkaWZmLmM6NTMxMQorbXNnaWQgInNob3cgb25seSBuYW1lcyBhbmQgc3RhdHVzIG9mIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyB0w6puIHThuq1wIHRpbiB2w6AgdMOsbmggdHLhuqFuZyBj4bunYSBjw6FjIHThuq1wIHRpbiBi4buLIHRoYXkgxJHhu5VpIgorCisjOiBkaWZmLmM6NTMxMworbXNnaWQgIjx3aWR0aD5bLDxuYW1lLXdpZHRoPlssPGNvdW50Pl1dIgorbXNnc3RyICI8cuG7mW5nPlssPG5hbWUtd2lkdGg+Wyw8c+G7kS1sxrDhu6NuZz5dXSIKKworIzogZGlmZi5jOjUzMTQKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCIKK21zZ3N0ciAidOG6oW8gZGlmZnN0YXQiCisKKyM6IGRpZmYuYzo1MzE2IGRpZmYuYzo1MzE5IGRpZmYuYzo1MzIyCittc2dpZCAiPHdpZHRoPiIKK21zZ3N0ciAiPHLhu5luZz4iCisKKyM6IGRpZmYuYzo1MzE3Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIHdpZHRoIgorbXNnc3RyICJ04bqhbyBkaWZmc3RhdCB24bubaSDEkeG7mSBy4buZbmcgxJHDoyBjaG8iCisKKyM6IGRpZmYuYzo1MzIwCittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIG5hbWUgd2lkdGgiCittc2dzdHIgInThuqFvIGRpZmZzdGF0IHbhu5tpIHTDqm4gxJHhu5kgcuG7mW5nIMSRw6MgY2hvIgorCisjOiBkaWZmLmM6NTMyMworbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiBncmFwaCB3aWR0aCIKK21zZ3N0ciAidOG6oW8gZGlmZnN0YXQgduG7m2kgxJHhu5kgcuG7mW5nIMSR4buTIHRo4buLIMSRw6MgY2hvIgorCisjOiBkaWZmLmM6NTMyNQorbXNnaWQgIjxjb3VudD4iCittc2dzdHIgIjxz4buRX2zGsOG7o25nPiIKKworIzogZGlmZi5jOjUzMjYKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGxpbWl0ZWQgbGluZXMiCittc2dzdHIgInThuqFvIGRpZmZzdGF0IHbhu5tpIGPDoWMgZMOybmcgYuG7iyBnaeG7m2kgaOG6oW4iCisKKyM6IGRpZmYuYzo1MzI5Cittc2dpZCAiZ2VuZXJhdGUgY29tcGFjdCBzdW1tYXJ5IGluIGRpZmZzdGF0IgorbXNnc3RyICJ04bqhbyB04buVbmcgaOG7o3AgeMO6YyB0w61jaCB0cm9uZyBkaWZmc3RhdCIKKworIzogZGlmZi5jOjUzMzIKK21zZ2lkICJvdXRwdXQgYSBiaW5hcnkgZGlmZiB0aGF0IGNhbiBiZSBhcHBsaWVkIgorbXNnc3RyICJ4deG6pXQgcmEgbeG7mXQga2jDoWMgYmnhu4d0IGThuqFuZyBuaOG7iyBwaMOibiBjw6FpIG3DoCBjw7MgdGjhu4MgxJHGsOG7o2Mgw6FwIGThu6VuZyIKKworIzogZGlmZi5jOjUzMzUKK21zZ2lkICJzaG93IGZ1bGwgcHJlLSBhbmQgcG9zdC1pbWFnZSBvYmplY3QgbmFtZXMgb24gdGhlIFwiaW5kZXhcIiBsaW5lcyIKK21zZ3N0ciAiIgorImhp4buDbiB0aOG7iyDEkeG6p3kgxJHhu6cgY8OhYyB0w6puIMSR4buRaSB0xrDhu6NuZyBwcmUtIHbDoCBwb3N0LWltYWdlIHRyw6puIGPDoWMgZMOybmcgXCJt4bulYyBs4bulYyIKKyJcIiIKKworIzogZGlmZi5jOjUzMzcKK21zZ2lkICJzaG93IGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRoYXkgxJHhu5VpIMSRxrDhu6NjIHTDtCBtw6B1IgorCisjOiBkaWZmLmM6NTMzOAorbXNnaWQgIjxraW5kPiIKK21zZ3N0ciAiPGtp4buDdT4iCisKKyM6IGRpZmYuYzo1MzM5Cittc2dpZCAiIgorImhpZ2hsaWdodCB3aGl0ZXNwYWNlIGVycm9ycyBpbiB0aGUgJ2NvbnRleHQnLCAnb2xkJyBvciAnbmV3JyBsaW5lcyBpbiB0aGUgIgorImRpZmYiCittc2dzdHIgIiIKKyJ0w7Qgc8OhbmcgY8OhYyBs4buXaSB24buBIGtob+G6o25nIHRy4bqvbmcgdHJvbmcgY8OhYyBkw7JuZyDigJxjb250ZXh04oCdLCDigJxvbGTigJ0gdsOgIOKAnG5ld+KAnSAiCisidHJvbmcga2jDoWMgYmnhu4d0IgorCisjOiBkaWZmLmM6NTM0MgorbXNnaWQgIiIKKyJkbyBub3QgbXVuZ2UgcGF0aG5hbWVzIGFuZCB1c2UgTlVMcyBhcyBvdXRwdXQgZmllbGQgdGVybWluYXRvcnMgaW4gLS1yYXcgb3IgIgorIi0tbnVtc3RhdCIKK21zZ3N0ciAiIgorImtow7RuZyBtdW5nZSB0w6puIMSRxrDhu51uZyBk4bqrbiB2w6Agc+G7rSBk4bulbmcgTlVMIGzDoG0gYuG7mSBwaMOibiB0w6FjaCB0csaw4budbmcgxJHhuqd1IHJhICIKKyJ0cm9uZyAtLXJhdyBoYXkgLS1udW1zdGF0IgorCisjOiBkaWZmLmM6NTM0NSBkaWZmLmM6NTM0OCBkaWZmLmM6NTM1MSBkaWZmLmM6NTQ1NworbXNnaWQgIjxwcmVmaXg+IgorbXNnc3RyICI8dGnhu4FuX3Thu5E+IgorCisjOiBkaWZmLmM6NTM0NgorbXNnaWQgInNob3cgdGhlIGdpdmVuIHNvdXJjZSBwcmVmaXggaW5zdGVhZCBvZiBcImEvXCIiCittc2dzdHIgImhp4buDbiB0aOG7iyB0aeG7gW4gdOG7kSBuZ3Xhu5NuIMSRw6MgY2hvIHRoYXkgY2hvIFwiYS9cIiIKKworIzogZGlmZi5jOjUzNDkKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBwcmVmaXggaW5zdGVhZCBvZiBcImIvXCIiCittc2dzdHIgImhp4buDbiB0aOG7iyB0aeG7gW4gdOG7kSDEkcOtY2ggxJHDoyBjaG8gdGhheSBjaG8gXCJiL1wiIgorCisjOiBkaWZmLmM6NTM1MgorbXNnaWQgInByZXBlbmQgYW4gYWRkaXRpb25hbCBwcmVmaXggdG8gZXZlcnkgbGluZSBvZiBvdXRwdXQiCittc2dzdHIgInRyZW8gdsOgbyB0csaw4bubYyBt4buZdCB0aeG7gW4gdOG7kSBi4buVIHN1bmcgY2hvIG3hu5dpIGTDsm5nIGvhur90IHh14bqldCIKKworIzogZGlmZi5jOjUzNTUKK21zZ2lkICJkbyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeCIKK21zZ3N0ciAixJHhu6tuZyBoaeG7g24gdGjhu4sgYuG6pXQga+G7syB0aeG7gW4gdOG7kSBuZ3Xhu5NuIGhheSDEkcOtY2giCisKKyM6IGRpZmYuYzo1MzU4Cittc2dpZCAic2hvdyBjb250ZXh0IGJldHdlZW4gZGlmZiBodW5rcyB1cCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBsaW5lcyIKK21zZ3N0ciAiIgorImhp4buDbiB0aOG7iyBuZ+G7ryBj4bqjbmggZ2nhu69hIGPDoWMga2jDumMga2jDoWMgYmnhu4d0IGtoaSDEkeG6oXQgxJHhur9uIHPhu5EgbMaw4bujbmcgZMOybmcgxJHDoyBjaOG7iSAiCisixJHhu4tuaCIKKworIzogZGlmZi5jOjUzNjIgZGlmZi5jOjUzNjcgZGlmZi5jOjUzNzIKK21zZ2lkICI8Y2hhcj4iCittc2dzdHIgIjxrw71fdOG7sT4iCisKKyM6IGRpZmYuYzo1MzYzCittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGEgbmV3IGxpbmUgaW5zdGVhZCBvZiAnKyciCittc2dzdHIgImNo4buJIMSR4buLbmggbeG7mXQga8O9IHThu7EgxJHhu4MgYmnhu4N1IHRo4buLIG3hu5l0IGTDsm5nIMSRxrDhu6NjIHRow6ptIG3hu5tpIHRoYXkgY2hvIOKAnCvigJ0iCisKKyM6IGRpZmYuYzo1MzY4Cittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGFuIG9sZCBsaW5lIGluc3RlYWQgb2YgJy0nIgorbXNnc3RyICJjaOG7iSDEkeG7i25oIG3hu5l0IGvDvSB04buxIMSR4buDIGJp4buDdSB0aOG7iyBt4buZdCBkw7JuZyDEkcOjIGPFqSB0aGF5IGNobyDigJwt4oCdIgorCisjOiBkaWZmLmM6NTM3MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIGNvbnRleHQgaW5zdGVhZCBvZiAnICciCittc2dzdHIgImNo4buJIMSR4buLbmggbeG7mXQga8O9IHThu7EgxJHhu4MgYmnhu4N1IHRo4buLIG3hu5l0IG5n4buvIGPhuqNuaCB0aGF5IGNobyDigJzigJ0iCisKKyM6IGRpZmYuYzo1Mzc2Cittc2dpZCAiRGlmZiByZW5hbWUgb3B0aW9ucyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4ga2jDoWMgYmnhu4d0IMSR4buVaSB0w6puIgorCisjOiBkaWZmLmM6NTM3NworbXNnaWQgIjxuPlsvPG0+XSIKK21zZ3N0ciAiPG4+Wy88bT5dIgorCisjOiBkaWZmLmM6NTM3OAorbXNnaWQgImJyZWFrIGNvbXBsZXRlIHJld3JpdGUgY2hhbmdlcyBpbnRvIHBhaXJzIG9mIGRlbGV0ZSBhbmQgY3JlYXRlIgorbXNnc3RyICJuZ+G6r3QgY8OhYyB0aGF5IMSR4buVaSBnaGkgbOG6oWkgaG/DoG4gdGhp4buHbiB0aMOgbmggY+G6t3AgY+G7p2EgeMOzYSB2w6AgdOG6oW8iCisKKyM6IGRpZmYuYzo1MzgyCittc2dpZCAiZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgImTDsiB0w6xtIGPDoWMgdMOqbiB0aGF5IMSR4buVaSIKKworIzogZGlmZi5jOjUzODYKK21zZ2lkICJvbWl0IHRoZSBwcmVpbWFnZSBmb3IgZGVsZXRlcyIKK21zZ3N0ciAiYuG7jyBxdWEgcHJlaW1hZ2UgKHRp4buBbiDhuqNuaD8/KSBjaG8gY8OhYyB2aeG7h2MgeMOzYSIKKworIzogZGlmZi5jOjUzODkKK21zZ2lkICJkZXRlY3QgY29waWVzIgorbXNnc3RyICJkw7IgYuG6o24gc2FvIgorCisjOiBkaWZmLmM6NTM5MworbXNnaWQgInVzZSB1bm1vZGlmaWVkIGZpbGVzIGFzIHNvdXJjZSB0byBmaW5kIGNvcGllcyIKK21zZ3N0ciAiZMO5bmcgY8OhYyB04bqtcCB0aW4ga2jDtG5nIGLhu4sgY2jhu4luaCBz4butYSBuaMawIGzDoCBuZ3Xhu5NuIMSR4buDIHTDrG0gY8OhYyBi4bqjbiBzYW8iCisKKyM6IGRpZmYuYzo1Mzk1Cittc2dpZCAiZGlzYWJsZSByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICJ04bqvdCBkw7IgdMOsbSDEkeG7lWkgdMOqbiIKKworIzogZGlmZi5jOjUzOTgKK21zZ2lkICJ1c2UgZW1wdHkgYmxvYnMgYXMgcmVuYW1lIHNvdXJjZSIKK21zZ3N0ciAiZMO5bmcgY8OhYyBibG9iIHRy4buRbmcgcuG7kW5nIG5oxrAgbMOgIG5ndeG7k24gxJHhu5VpIHTDqm4iCisKKyM6IGRpZmYuYzo1NDAwCittc2dpZCAiY29udGludWUgbGlzdGluZyB0aGUgaGlzdG9yeSBvZiBhIGZpbGUgYmV5b25kIHJlbmFtZXMiCittc2dzdHIgInRp4bq/cCB04bulYyBsaeG7h3Qga8OqIGzhu4tjaCBz4butIGPhu6dhIG3hu5l0IHThuq1wIHRpbiBuZ2/DoGkgxJHhu5VpIHTDqm4iCisKKyM6IGRpZmYuYzo1NDAzCittc2dpZCAiIgorInByZXZlbnQgcmVuYW1lL2NvcHkgZGV0ZWN0aW9uIGlmIHRoZSBudW1iZXIgb2YgcmVuYW1lL2NvcHkgdGFyZ2V0cyBleGNlZWRzICIKKyJnaXZlbiBsaW1pdCIKK21zZ3N0ciAiIgorIm5nxINuIGPhuqNuIGTDsiB0w6xtIMSR4buVaSB0w6puL2LhuqNuIHNhbyBu4bq/dSBz4buRIGzGsOG7o25nIGPhu6dhIMSRw61jaCDEkeG7lWkgdMOqbi9i4bqjbiBzYW8gdsaw4bujdCAiCisicXXDoSBnaeG7m2kgaOG6oW4gxJHGsGEgcmEiCisKKyM6IGRpZmYuYzo1NDA1Cittc2dpZCAiRGlmZiBhbGdvcml0aG0gb3B0aW9ucyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gdGh14bqtdCB0b8OhbiBraMOhYyBiaeG7h3QiCisKKyM6IGRpZmYuYzo1NDA3Cittc2dpZCAicHJvZHVjZSB0aGUgc21hbGxlc3QgcG9zc2libGUgZGlmZiIKK21zZ3N0ciAic+G6o24gc2luaCBraMOhYyBiaeG7h3Qgw610IG5o4bqldCBjw7MgdGjhu4MiCisKKyM6IGRpZmYuYzo1NDEwCittc2dpZCAiaWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgbGluZXMiCittc2dzdHIgImzhu50gxJFpIHPhu7EgdGhheSDEkeG7lWkgZG8ga2hv4bqjbmcgdHLhuq9uZyBnw6J5IHJhIGtoaSBzbyBzw6FuaCBjw6FjIGTDsm5nIgorCisjOiBkaWZmLmM6NTQxMworbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZXNwYWNlIgorbXNnc3RyICJs4budIMSRaSBz4buxIHRoYXkgxJHhu5VpIGRvIHPhu5EgbMaw4bujbmcga2hv4bqjbmcgdHLhuq9uZyBnw6J5IHJhIgorCisjOiBkaWZmLmM6NTQxNgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgYXQgRU9MIgorbXNnc3RyICJs4budIMSRaSBz4buxIHRoYXkgxJHhu5VpIGRvIGtob+G6o25nIHRy4bqvbmcgZ8OieSByYSBraGkg4bufIGN14buRaSBkw7JuZyBFT0wiCisKKyM6IGRpZmYuYzo1NDE5Cittc2dpZCAiaWdub3JlIGNhcnJpZXItcmV0dXJuIGF0IHRoZSBlbmQgb2YgbGluZSIKK21zZ3N0ciAiYuG7jyBxdWEga8O9IHThu7EgduG7gSDEkeG6p3UgZMOybmcgdOG6oWkgY3Xhu5FpIGTDsm5nIgorCisjOiBkaWZmLmM6NTQyMgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHdob3NlIGxpbmVzIGFyZSBhbGwgYmxhbmsiCittc2dzdHIgImLhu48gcXVhIGPDoWMgdGhheSDEkeG7lWkgY2hvIHRvw6BuIGLhu5kgY8OhYyBkw7JuZyBsw6AgdHLhu5FuZyIKKworIzogZGlmZi5jOjU0MjUKK21zZ2lkICJoZXVyaXN0aWMgdG8gc2hpZnQgZGlmZiBodW5rIGJvdW5kYXJpZXMgZm9yIGVhc3kgcmVhZGluZyIKK21zZ3N0ciAiaGV1cmlzdGljIMSR4buDIGThu4tjaCBo4bqhbiBiacOqbiBj4bunYSBraOG7kWkga2jDoWMgYmnhu4d0IGNobyBk4buFIMSR4buNYyIKKworIzogZGlmZi5jOjU0MjgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcInBhdGllbmNlIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgInThuqFvIGtow6FjIGJp4buHdCBz4butIGR1bmcgdGh14bqtdCB0b8OhbiBcInBhdGllbmNlIGRpZmZcIiIKKworIzogZGlmZi5jOjU0MzIKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImhpc3RvZ3JhbSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICJ04bqhbyBraMOhYyBiaeG7h3Qgc+G7rSBkdW5nIHRodeG6rXQgdG/DoW4gXCJoaXN0b2dyYW0gZGlmZlwiIgorCisjOiBkaWZmLmM6NTQzNAorbXNnaWQgIjxhbGdvcml0aG0+IgorbXNnc3RyICI8dGh14bqtdCB0b8Ohbj4iCisKKyM6IGRpZmYuYzo1NDM1Cittc2dpZCAiY2hvb3NlIGEgZGlmZiBhbGdvcml0aG0iCittc2dzdHIgImNo4buNbiBt4buZdCB0aHXhuq10IHRvw6FuIGtow6FjIGJp4buHdCIKKworIzogZGlmZi5jOjU0MzcKK21zZ2lkICI8dGV4dD4iCittc2dzdHIgIjx2xINuIGLhuqNuPiIKKworIzogZGlmZi5jOjU0MzgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImFuY2hvcmVkIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgInThuqFvIGtow6FjIGJp4buHdCBz4butIGR1bmcgdGh14bqtdCB0b8OhbiBcImFuY2hvcmVkIGRpZmZcIiIKKworIzogZGlmZi5jOjU0NDAgZGlmZi5jOjU0NDkgZGlmZi5jOjU0NTIKK21zZ2lkICI8bW9kZT4iCittc2dzdHIgIjxjaOG6vyDEkeG7mT4iCisKKyM6IGRpZmYuYzo1NDQxCittc2dpZCAic2hvdyB3b3JkIGRpZmYsIHVzaW5nIDxtb2RlPiB0byBkZWxpbWl0IGNoYW5nZWQgd29yZHMiCittc2dzdHIgIiIKKyJoaeG7g24gdGjhu4sga2jDoWMgYmnhu4d0IHThu6ssIHPhu60gZOG7pW5nIDxjaOG6vyDEkeG7mT4gxJHhu4MgYuG7jyBnaeG7m2kgaOG6oW4gY8OhYyB04burIGLhu4sgdGhheSDEkeG7lWkiCisKKyM6IGRpZmYuYzo1NDQzIGRpZmYuYzo1NDQ2IGRpZmYuYzo1NDkxCittc2dpZCAiPHJlZ2V4PiIKK21zZ3N0ciAiPHJlZ2V4PiIKKworIzogZGlmZi5jOjU0NDQKK21zZ2lkICJ1c2UgPHJlZ2V4PiB0byBkZWNpZGUgd2hhdCBhIHdvcmQgaXMiCittc2dzdHIgImTDuW5nIDxyZWdleD4gxJHhu4MgcXV54bq/dCDEkeG7i25oIHThu6sgbMOgIGPDoWkgZ8OsIgorCisjOiBkaWZmLmM6NTQ0NworbXNnaWQgImVxdWl2YWxlbnQgdG8gLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9PHJlZ2V4PiIKK21zZ3N0ciAidMawxqFuZyDEkcawxqFuZyB24bubaSAtLXdvcmQtZGlmZj1jb2xvciAtLXdvcmQtZGlmZi1yZWdleD08cmVnZXg+IgorCisjOiBkaWZmLmM6NTQ1MAorbXNnaWQgIm1vdmVkIGxpbmVzIG9mIGNvZGUgYXJlIGNvbG9yZWQgZGlmZmVyZW50bHkiCittc2dzdHIgImPDoWMgZMOybmcgZGkgY2h1eeG7g24gY+G7p2EgbcOjIG3DoCDEkcaw4bujYyB0w7QgbcOgdSBraMOhYyBuaGF1IgorCisjOiBkaWZmLmM6NTQ1MworbXNnaWQgImhvdyB3aGl0ZSBzcGFjZXMgYXJlIGlnbm9yZWQgaW4gLS1jb2xvci1tb3ZlZCIKK21zZ3N0ciAiY8OhY2ggYuG7jyBxdWEga2hv4bqjbmcgdHLhuq9uZyB0cm9uZyAtLWNvbG9yLW1vdmVkIgorCisjOiBkaWZmLmM6NTQ1NgorbXNnaWQgIk90aGVyIGRpZmYgb3B0aW9ucyIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiBraMOhYyBiaeG7h3Qga2jDoWMiCisKKyM6IGRpZmYuYzo1NDU4Cittc2dpZCAid2hlbiBydW4gZnJvbSBzdWJkaXIsIGV4Y2x1ZGUgY2hhbmdlcyBvdXRzaWRlIGFuZCBzaG93IHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICIiCisia2hpIGNo4bqheSB04burIHRoxrAgbeG7pWMgY29uLCB0aOG7sWMgdGhpIGPDoWMgdGhheSDEkeG7lWkgYsOqbiBuZ2/DoGkgdsOgIGhp4buDbiB0aOG7iyBjw6FjICIKKyLEkcaw4budbmcgZOG6q24gbGnDqm4gcXVhbiIKKworIzogZGlmZi5jOjU0NjIKK21zZ2lkICJ0cmVhdCBhbGwgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAiY29pIG3hu41pIHThuq1wIHRpbiBsw6AgZOG6oW5nIHbEg24gYuG6o24gdGjGsOG7nW5nIgorCisjOiBkaWZmLmM6NTQ2NAorbXNnaWQgInN3YXAgdHdvIGlucHV0cywgcmV2ZXJzZSB0aGUgZGlmZiIKK21zZ3N0ciAidHLDoW8gxJHhu5VpIGhhaSDEkeG6p3UgdsOgbywgxJHhuqNvIG5nxrDhu6NjIGtow6FjIGJp4buHdCIKKworIzogZGlmZi5jOjU0NjYKK21zZ2lkICJleGl0IHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzLCAwIG90aGVyd2lzZSIKK21zZ3N0ciAidGhvw6F0IHbhu5tpIG3DoyAxIG7hur91IGtow7RuZyBjw7Mga2jDoWMgYmnhu4d0IGfDrCwgMCBu4bq/dSBuZ8aw4bujYyBs4bqhaSIKKworIzogZGlmZi5jOjU0NjgKK21zZ2lkICJkaXNhYmxlIGFsbCBvdXRwdXQgb2YgdGhlIHByb2dyYW0iCittc2dzdHIgInThuq90IG3hu41pIGvhur90IHh14bqldCBj4bunYSBjaMawxqFuZyB0csOsbmgiCisKKyM6IGRpZmYuYzo1NDcwCittc2dpZCAiYWxsb3cgYW4gZXh0ZXJuYWwgZGlmZiBoZWxwZXIgdG8gYmUgZXhlY3V0ZWQiCittc2dzdHIgImNobyBwaMOpcCBt4buZIGLhu5kgaOG7lyB0cuG7oyB4deG6pXQga2jDoWMgYmnhu4d0IOG7nyBiw6puIG5nb8OgaSDEkcaw4bujYyBwaMOpcCB0aOG7sWMgdGhpIgorCisjOiBkaWZmLmM6NTQ3MgorbXNnaWQgInJ1biBleHRlcm5hbCB0ZXh0IGNvbnZlcnNpb24gZmlsdGVycyB3aGVuIGNvbXBhcmluZyBiaW5hcnkgZmlsZXMiCittc2dzdHIgIiIKKyJjaOG6oXkgY8OhYyBi4buZIGzhu41jIHbEg24gYuG6o24gdGjDtG5nIHRoxrDhu51uZyBiw6puIG5nb8OgaSBraGkgc28gc8OhbmggY8OhYyB04bqtcCB0aW4gbmjhu4sgIgorInBow6JuIgorCisjOiBkaWZmLmM6NTQ3NAorbXNnaWQgIjx3aGVuPiIKK21zZ3N0ciAiPGtoaT4iCisKKyM6IGRpZmYuYzo1NDc1Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcyBpbiB0aGUgZGlmZiBnZW5lcmF0aW9uIgorbXNnc3RyICJi4buPIHF1YSBjw6FjIHRoYXkgxJHhu5VpIHRyb25nIG3DtC3EkXVuLWNvbiB0cm9uZyBraGkgdOG6oW8ga2jDoWMgYmnhu4d0IgorCisjOiBkaWZmLmM6NTQ3OAorbXNnaWQgIjxmb3JtYXQ+IgorbXNnc3RyICI8xJHhu4tuaCBk4bqhbmc+IgorCisjOiBkaWZmLmM6NTQ3OQorbXNnaWQgInNwZWNpZnkgaG93IGRpZmZlcmVuY2VzIGluIHN1Ym1vZHVsZXMgYXJlIHNob3duIgorbXNnc3RyICJjaGkgxJHhu4tuaCBraMOhYyBiaeG7h3QgYmFvIG5oacOqdSB0cm9uZyBjw6FjIG3DtCDEkXVuIGNvbiDEkcaw4bujYyBoaeG7g24gdGjhu4siCisKKyM6IGRpZmYuYzo1NDgzCittc2dpZCAiaGlkZSAnZ2l0IGFkZCAtTicgZW50cmllcyBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAi4bqpbiBjw6FjIG3hu6VjIOKAnGdpdCBhZGQgLU7igJ0gdOG7qyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGRpZmYuYzo1NDg2Cittc2dpZCAidHJlYXQgJ2dpdCBhZGQgLU4nIGVudHJpZXMgYXMgcmVhbCBpbiB0aGUgaW5kZXgiCittc2dzdHIgImNvaSBjw6FjIG3hu6VjIOKAnGdpdCBhZGQgLU7igJ0gbmjGsCBsw6AgY8OzIHRo4bqtdCB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGRpZmYuYzo1NDg4Cittc2dpZCAiPHN0cmluZz4iCittc2dzdHIgIjxjaHXhu5dpPiIKKworIzogZGlmZi5jOjU0ODkKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJzdHJpbmciCittc2dzdHIgIiIKKyJ0w6xtIGPDoWMga2jDoWMgYmnhu4d0IGPDoWkgbcOgIHRoYXkgxJHhu5VpIHPhu5EgbMaw4bujbmcgeOG6o3kgcmEgY+G7p2EgY8OhYyBwaMOhdCBzaW5oIGPhu6dhICIKKyJjaHXhu5dpIMSRxrDhu6NjIGNo4buJIHJhIgorCisjOiBkaWZmLmM6NTQ5MgorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInJlZ2V4IgorbXNnc3RyICIiCisidMOsbSBjw6FjIGtow6FjIGJp4buHdCBjw6FpIG3DoCB0aGF5IMSR4buVaSBz4buRIGzGsOG7o25nIHjhuqN5IHJhIGPhu6dhIGPDoWMgcGjDoXQgc2luaCBj4bunYSBiaeG7g3UgIgorInRo4bupYyBjaMOtbmggcXV5IMSRxrDhu6NjIGNo4buJIHJhIgorCisjOiBkaWZmLmM6NTQ5NQorbXNnaWQgInNob3cgYWxsIGNoYW5nZXMgaW4gdGhlIGNoYW5nZXNldCB3aXRoIC1TIG9yIC1HIgorbXNnc3RyICJoaeG7g24gdGjhu4sgdOG6pXQgY+G6oyBjw6FjIHRoYXkgxJHhu5VpIHRyb25nIG3hu5l0IGLhu5kgY8OhYyB0aGF5IMSR4buVaSB24bubaSAtUyBoYXkgLUciCisKKyM6IGRpZmYuYzo1NDk4Cittc2dpZCAidHJlYXQgPHN0cmluZz4gaW4gLVMgYXMgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJjb2kgPGNodeG7l2k+IHRyb25nIC1TIG5oxrAgbMOgIGJp4buDdSB0aOG7qWMgY2jDrW5oIHF1aSBQT1NJWCBjw7MgbeG7nyBy4buZbmciCisKKyM6IGRpZmYuYzo1NTAxCittc2dpZCAiY29udHJvbCB0aGUgb3JkZXIgaW4gd2hpY2ggZmlsZXMgYXBwZWFyIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIsSRaeG7gXUga2hp4buDbiB0aOG7qSB04buxIHh1w6F0IGhp4buHbiBjw6FjIHThuq1wIHRpbiB0cm9uZyBr4bq/dCB4deG6pXQiCisKKyM6IGRpZmYuYzo1NTAyCittc2dpZCAiPG9iamVjdC1pZD4iCittc2dzdHIgIjxtw6Mtc+G7kS3EkeG7kWktdMaw4bujbmc+IgorCisjOiBkaWZmLmM6NTUwMworbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorIm9iamVjdCIKK21zZ3N0ciAiIgorInTDrG0gY8OhYyBraMOhYyBiaeG7h3QgY8OhaSBtw6AgdGhheSDEkeG7lWkgc+G7kSBsxrDhu6NuZyB44bqjeSByYSBj4bunYSBjw6FjIHBow6F0IHNpbmggY+G7p2EgxJHhu5FpICIKKyJ0xrDhu6NuZyDEkcaw4bujYyBjaOG7iSByYSIKKworIzogZGlmZi5jOjU1MDUKK21zZ2lkICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCittc2dzdHIgIlsoQXxDfER8TXxSfFR8VXxYfEIp4oCmWypdXSIKKworIzogZGlmZi5jOjU1MDYKK21zZ2lkICJzZWxlY3QgZmlsZXMgYnkgZGlmZiB0eXBlIgorbXNnc3RyICJjaOG7jW4gY8OhYyB04bqtcCB0aW4gdGhlbyBraeG7g3Uga2jDoWMgYmnhu4d0IgorCisjOiBkaWZmLmM6NTUwOAorbXNnaWQgIjxmaWxlPiIKK21zZ3N0ciAiPHThuq1wX3Rpbj4iCisKKyM6IGRpZmYuYzo1NTA5Cittc2dpZCAiT3V0cHV0IHRvIGEgc3BlY2lmaWMgZmlsZSIKK21zZ3N0ciAiWHXhuqV0IHJhIG3hu5l0IHThuq1wIHRpbiBj4bulIHRo4buDIgorCisjOiBkaWZmLmM6NjE2NAorbXNnaWQgImluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiB3YXMgc2tpcHBlZCBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICIiCisibmjhuq1uIHRo4bqleSDEkeG7lWkgdMOqbiBraMO0bmcgY2jDrW5oIHjDoWMgxJHDoyBi4buLIGLhu48gcXVhIGLhu59pIGPDsyBxdcOhIG5oaeG7gXUgdOG6rXAgdGluLiIKKworIzogZGlmZi5jOjYxNjcKK21zZ2lkICJvbmx5IGZvdW5kIGNvcGllcyBmcm9tIG1vZGlmaWVkIHBhdGhzIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgIiIKKyJjaOG7iSB0w6xtIHRo4bqleSBjw6FjIGLhuqNuIHNhbyB04burIMSRxrDhu51uZyBk4bqrbiDEkcOjIHPhu61hIMSR4buVaSBi4bufaSB2w6wgY8OzIHF1w6Egbmhp4buBdSB04bqtcCB0aW4uIgorCisjOiBkaWZmLmM6NjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IG1heSB3YW50IHRvIHNldCB5b3VyICVzIHZhcmlhYmxlIHRvIGF0IGxlYXN0ICVkIGFuZCByZXRyeSB0aGUgY29tbWFuZC4iCittc2dzdHIgIiIKKyJi4bqhbiBjw7MgbOG6vSBtdeG7kW4gxJHhurd0IGJp4bq/biAlcyBj4bunYSBi4bqhbiB0aMOgbmggw610IG5o4bqldCBsw6AgJWQgdsOgIHRo4butIGzhuqFpIGzhu4duaCBs4bqnbiAiCisibuG7r2EuIgorCisjOiBkaXIuYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdCIKK21zZ3N0ciAixJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIGtow7RuZyBraOG7m3AgduG7m2kgYuG6pXQga+G7syB04bqtcCB0aW4gbsOgbyBtw6AgZ2l0IGJp4bq/dCIKKworIzogZGlyLmM6Njk1IGRpci5jOjcyNCBkaXIuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBhdHRlcm46ICclcyciCittc2dzdHIgIm3huqt1IGtow7RuZyDEkcaw4bujYyB0aOG7q2Egbmjhuq1uOiDigJwlc+KAnSIKKworIzogZGlyLmM6NzU0IGRpci5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgbmVnYXRpdmUgcGF0dGVybjogJyVzJyIKK21zZ3N0ciAibeG6q3Ugw6JtIGtow7RuZyDEkcaw4bujYyB0aOG7q2Egbmjhuq1uOiDigJwlc+KAnSIKKworIzogZGlyLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IGhhdmUgaXNzdWVzOiBwYXR0ZXJuICclcycgaXMgcmVwZWF0ZWQiCittc2dzdHIgInThuq1wIHRpbiBzcGFyc2UtY2hlY2tvdXQgY+G7p2EgYuG6oW4gY8OzIGzhur0gZ+G6t3AgbOG7l2k6IG3huqt1ICclcycgxJHDoyBi4buLIGzhurdwIGzhuqFpIgorCisjOiBkaXIuYzo3OTYKK21zZ2lkICJkaXNhYmxpbmcgY29uZSBwYXR0ZXJuIG1hdGNoaW5nIgorbXNnc3RyICJ2w7QgaGnhu4d1IGto4bubcCBt4bqrdSBuw7NuIgorCisjOiBkaXIuYzoxMTczCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1c2UgJXMgYXMgYW4gZXhjbHVkZSBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZMO5bmcgJXMgbmjGsCBsw6AgbeG7mXQgdOG6rXAgdGluIGxv4bqhaSB0cuG7qyIKKworIzogZGlyLmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gdGjGsCBt4bulYyDigJwlc+KAnSIKKworIzogZGlyLmM6MjQ3OQorbXNnaWQgImZhaWxlZCB0byBnZXQga2VybmVsIG5hbWUgYW5kIGluZm9ybWF0aW9uIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgbOG6pXkgdMOqbiB2w6AgdGjDtG5nIHRpbiBj4bunYSBuaMOibiIKKworIzogZGlyLmM6MjYwMworbXNnaWQgInVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbSBvciBsb2NhdGlvbiIKK21zZ3N0ciAiYuG7mSBuaOG7myB04bqhbSBraMO0bmcgdGhlbyB24bq/dCBi4buLIHThuq90IHRyw6puIGjhu4cgdGjhu5FuZyBoYXkgduG7iyB0csOtIG7DoHkiCisKKyM6IGRpci5jOjM0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IGluIHJlcG8gJXMiCittc2dzdHIgInThuq1wIHRpbiBnaGkgYuG6o25nIG3hu6VjIGzhu6VjIGLhu4sgaOG7j25nIHRyb25nIGtobyAlcyIKKworIzogZGlyLmM6MzQ1MiBkaXIuYzozNDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdGjGsCBt4bulYyBjaG8gJXMiCisKKyM6IGRpci5jOjM0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1pZ3JhdGUgZ2l0IGRpcmVjdG9yeSBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGRpIGThu51pIHRoxrAgbeG7pWMgZ2l0IHThu6sg4oCcJXPigJ0gc2FuZyDigJwlc+KAnSIKKworIzogZWRpdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGludDogV2FpdGluZyBmb3IgeW91ciBlZGl0b3IgdG8gY2xvc2UgdGhlIGZpbGUuLi4lYyIKK21zZ3N0ciAiZ+G7o2kgw706IENo4budIHRyw6xuaCBiacOqbiBzb+G6oW4gY+G7p2EgYuG6oW4gxJHDs25nIHThuq1wIHRpbuKApiVjIgorCisjOiBlbnRyeS5jOjE3OAorbXNnaWQgIkZpbHRlcmluZyBjb250ZW50IgorbXNnc3RyICJO4buZaSBkdW5nIGzhu41jIgorCisjOiBlbnRyeS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCBmaWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aOG7kW5nIGvDqiB04bqtcCB0aW4g4oCcJXPigJ0iCisKKyM6IGVudmlyb25tZW50LmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaXQgbmFtZXNwYWNlIHBhdGggXCIlc1wiIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24ga2jDtG5nIGdpYW4gdMOqbiBnaXQgXCIlc1wiIHNhaSIKKworIzogZW52aXJvbm1lbnQuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBHSVRfRElSIHRvICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG6t3QgR0lUX0RJUiB0aMOgbmgg4oCcJXPigJ0iCisKKyM6IGV4ZWMtY21kLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3MgdG8gcnVuICVzIgorbXNnc3RyICJxdcOhIG5oaeG7gXUgdGhhbSBz4buRIMSR4buDIGNo4bqheSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjE1MAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBj4bqnbiBkYW5oIHPDoWNoIHNoYWxsb3ciCisKKyM6IGZldGNoLXBhY2suYzoxNTMKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgYSBmbHVzaCBwYWNrZXQgYWZ0ZXIgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogY+G6p24gbeG7mXQgZ8OzaSDEkeG6qXkgc2F1IGRhbmggc8OhY2ggc2hhbGxvdyIKKworIzogZmV0Y2gtcGFjay5jOjE2NAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBj4bqnbiBBQ0svTkFLLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjIG3hu5l0IGfDs2kgZmx1c2giCisKKyM6IGZldGNoLXBhY2suYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCAnJXMnIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogY+G6p24gQUNLL05BSywgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyDigJwlc+KAnSIKKworIzogZmV0Y2gtcGFjay5jOjE5NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0byByZW1vdGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgbMOqbiBtw6F5IHBo4bulYyB24bulIgorCisjOiBmZXRjaC1wYWNrLmM6MjU3Cittc2dpZCAiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpcmVzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAiLS1zdGF0ZWxlc3MtcnBjIGPhuqduIG11bHRpX2Fja19kZXRhaWxlZCIKKworIzogZmV0Y2gtcGFjay5jOjM1NiBmZXRjaC1wYWNrLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgImTDsm5nIHNoYWxsb3cga2jDtG5nIGjhu6NwIGzhu4c6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzYyIGZldGNoLXBhY2suYzoxMzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdW5zaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICJkw7JuZyB1bnNoYWxsb3cga2jDtG5nIGjhu6NwIGzhu4c6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY0IGZldGNoLXBhY2suYzoxMzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJraMO0bmcgdMOsbSB0aOG6pXkgxJHhu5FpIHTGsOG7o25nOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NyBmZXRjaC1wYWNrLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICJs4buXaSB0cm9uZyDEkeG7kWkgdMaw4bujbmc6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY5IGZldGNoLXBhY2suYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNoYWxsb3cgZm91bmQ6ICVzIgorbXNnc3RyICJraMO0bmcgdMOsbSBzaGFsbG93IG7DoG86ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzcyIGZldGNoLXBhY2suYzoxMzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHNoYWxsb3cvdW5zaGFsbG93LCBnb3QgJXMiCittc2dzdHIgImPhuqduIHNoYWxsb3cvdW5zaGFsbG93LCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAlZCAlcyIKK21zZ3N0ciAibmjhuq1uICVzICVkIC0gJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgJXMiCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8gJXMga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGZldGNoLXBhY2suYzo0NjIKK21zZ2lkICJnaXZpbmcgdXAiCittc2dzdHIgImNo4buLdSB0aHVhIgorCisjOiBmZXRjaC1wYWNrLmM6NDc1IHByb2dyZXNzLmM6MzIzCittc2dpZCAiZG9uZSIKK21zZ3N0ciAieG9uZyIKKworIzogZmV0Y2gtcGFjay5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgKCVkKSAlcyIKK21zZ3N0ciAibmjhuq1uICVzICglZCkgJXMiCisKKyM6IGZldGNoLXBhY2suYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyAlcyBhcyBjb21wbGV0ZSIKK21zZ3N0ciAixJDDoW5oIGThuqV1ICVzIGzDoCDEkcOjIGhvw6BuIHRow6BuaCIKKworIzogZmV0Y2gtcGFjay5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJhbHJlYWR5IGhhdmUgJXMgKCVzKSIKK21zZ3N0ciAixJHDoyBz4bq1biBjw7MgJXMgKCVzKSIKKworIzogZmV0Y2gtcGFjay5jOjgxOAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJmZXRjaC1wYWNrOiBraMO0bmcgdGjhu4MgcuG6vSBuaMOhbmggc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKKworIzogZmV0Y2gtcGFjay5jOjgyNgorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgImzhu5dpIGdpYW8gdGjhu6ljOiBwaOG6p24gxJHhuqd1IGfDs2kgYuG7iyBzYWkiCisKKyM6IGZldGNoLXBhY2suYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIgorbXNnc3RyICJmZXRjaC1wYWNrOiBraMO0bmcgdGjhu4MgcuG6vSBuaMOhbmggJXMiCisKKyM6IGZldGNoLXBhY2suYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZmFpbGVkIgorbXNnc3RyICIlcyBn4bq3cCBs4buXaSIKKworIzogZmV0Y2gtcGFjay5jOjkxOAorbXNnaWQgImVycm9yIGluIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgImPDsyBs4buXaSB0cm9uZyBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorCisjOiBmZXRjaC1wYWNrLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uIGlzICUuKnMiCittc2dzdHIgIlBoacOqbiBi4bqjbiBtw6F5IGNo4bunIGzDoCAlLipzIgorCisjOiBmZXRjaC1wYWNrLmM6OTcwIGZldGNoLXBhY2suYzo5NzYgZmV0Y2gtcGFjay5jOjk3OSBmZXRjaC1wYWNrLmM6OTg1CisjOiBmZXRjaC1wYWNrLmM6OTg5IGZldGNoLXBhY2suYzo5OTMgZmV0Y2gtcGFjay5jOjk5NyBmZXRjaC1wYWNrLmM6MTAwMQorIzogZmV0Y2gtcGFjay5jOjEwMDUgZmV0Y2gtcGFjay5jOjEwMDkgZmV0Y2gtcGFjay5jOjEwMTMgZmV0Y2gtcGFjay5jOjEwMTcKKyM6IGZldGNoLXBhY2suYzoxMDIzIGZldGNoLXBhY2suYzoxMDI5IGZldGNoLXBhY2suYzoxMDM0IGZldGNoLXBhY2suYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyAlcyIKK21zZ3N0ciAiTcOheSBjaOG7pyBo4buXIHRy4bujICVzIgorCisjOiBmZXRjaC1wYWNrLmM6OTcyCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjbGllbnRzIgorbXNnc3RyICJNw6F5IGNo4bunIGtow7RuZyBo4buXIHRy4bujIG3DoXkga2jDoWNoIHNoYWxsb3ciCisKKyM6IGZldGNoLXBhY2suYzoxMDMyCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LXNpbmNlIgorbXNnc3RyICJNw6F5IGNo4bunIGtow7RuZyBo4buXIHRy4bujIC0tc2hhbGxvdy1zaW5jZSIKKworIzogZmV0Y2gtcGFjay5jOjEwMzcKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIKK21zZ3N0ciAiTcOheSBjaOG7pyBraMO0bmcgaOG7lyB0cuG7oyAtLXNoYWxsb3ctZXhjbHVkZSIKKworIzogZmV0Y2gtcGFjay5jOjEwNDEKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLWRlZXBlbiIKK21zZ3N0ciAiTcOheSBjaOG7pyBraMO0bmcgaOG7lyB0cuG7oyAtLWRlZXBlbiIKKworIzogZmV0Y2gtcGFjay5jOjEwNTgKK21zZ2lkICJubyBjb21tb24gY29tbWl0cyIKK21zZ3N0ciAia2jDtG5nIGPDsyBs4bqnbiBjaHV54buDbiBnaWFvIGNodW5nIG7DoG8iCisKKyM6IGZldGNoLXBhY2suYzoxMDcwIGZldGNoLXBhY2suYzoxNTM2Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGZldGNoIGZhaWxlZC4iCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBn4bq3cCBs4buXaS4iCisKKyM6IGZldGNoLXBhY2suYzoxMjA5Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXF1ZXN0cyIKK21zZ3N0ciAiTcOheSBjaOG7pyBraMO0bmcgaOG7lyB0cuG7oyB5w6p1IGPhuqd1IHNoYWxsb3ciCisKKyM6IGZldGNoLXBhY2suYzoxMjE2Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIGZpbHRlciIKK21zZ3N0ciAiTcOheSBjaOG7pyBo4buXIHRy4bujIGLhu5kgbOG7jWMiCisKKyM6IGZldGNoLXBhY2suYzoxMjM5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcXVlc3QgdG8gcmVtb3RlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIGPDoWMgecOqdSBj4bqndSBsw6puIG3DoXkgcGjhu6VjIHbhu6UiCisKKyM6IGZldGNoLXBhY2suYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgc2VjdGlvbiBoZWFkZXIgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buNYyBwaOG6p24gxJHhuqd1IGPhu6dhIMSRb+G6oW4gJXMiCisKKyM6IGZldGNoLXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciCittc2dzdHIgImPhuqduIOKAnCVz4oCdLCBuaMawbmcgbOG6oWkgbmjhuq1uIOKAnCVz4oCdIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGFja25vd2xlZGdtZW50IGxpbmU6ICclcyciCittc2dzdHIgImfhurdwIGTDsm5nIGtow7RuZyDEkcaw4bujYyB0aOG7q2Egbmjhuq1uOiDigJwlc+KAnSIKKworIzogZmV0Y2gtcGFjay5jOjEzMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBhY2tzOiAlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHjhu60gbMO9IHTDrW4gaGnhu4d1IHRy4bqjIGzhu51pOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjEzMTgKK21zZ2lkICJleHBlY3RlZCBwYWNrZmlsZSB0byBiZSBzZW50IGFmdGVyICdyZWFkeSciCittc2dzdHIgImPhuqduIHThuq1wIHRpbiBnw7NpIMSR4buDIGfhu61pIHNhdSDigJxyZWFkeeKAnSIKKworIzogZmV0Y2gtcGFjay5jOjEzMjAKK21zZ2lkICJleHBlY3RlZCBubyBvdGhlciBzZWN0aW9ucyB0byBiZSBzZW50IGFmdGVyIG5vICdyZWFkeSciCittc2dzdHIgImtow7RuZyBj4bqnbiB0aMOqbSBwaOG6p24gbsOgbyDEkeG7gyBn4butaSBzYXUg4oCccmVhZHnigJ0iCisKKyM6IGZldGNoLXBhY2suYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIKK21zZ3N0ciAibOG7l2kgeOG7rSBsw70gdGjDtG5nIHRpbiBzaGFsbG93OiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgd2FudGVkLXJlZiwgZ290ICclcyciCittc2dzdHIgImPhuqduIHdhbnRlZC1yZWYsIG5oxrBuZyBs4bqhaSBuaOG6rW4gxJHGsOG7o2Mg4oCcJXPigJ0iCisKKyM6IGZldGNoLXBhY2suYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgd2FudGVkLXJlZjogJyVzJyIKK21zZ3N0ciAid2FudGVkLXJlZiBraMO0bmcgxJHGsOG7o2MgbW9uZyDEkeG7o2k6IOKAnCVz4oCdIgorCisjOiBmZXRjaC1wYWNrLmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHdhbnRlZCByZWZzOiAlZCIKK21zZ3N0ciAibOG7l2kga2hpIHjhu60gbMO9IHdhbnRlZCByZWZzOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE3NjIKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAia2jDtG5nIGto4bubcCBwaOG6p24gxJHhuqd1IG3DoXkgY2jhu6ciCisKKyM6IGZldGNoLXBhY2suYzoxNzg1IGJ1aWx0aW4vY2xvbmUuYzo2ODkKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAibcOheSBjaOG7pyDEkcOjIGtow7RuZyBn4butaSB04bqldCBj4bqjIGPDoWMgxJHhu5FpIHTGsOG7o25nIGPhuqduIHRoaeG6v3QiCisKKyM6IGZldGNoLXBhY2suYzoxODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVtb3RlIHJlZiAlcyIKK21zZ3N0ciAia2jDtG5nIGPDsyBtw6F5IGNo4bunIHRoYW0gY2hp4bq/dSBuw6BvIG5oxrAgJXMiCisKKyM6IGZldGNoLXBhY2suYzoxODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICIiCisiTcOheSBwaOG7pWMgduG7pSBraMO0bmcgY2hvIHBow6lwIHnDqnUgY+G6p3UgY2hvIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgxJHGsOG7o2MgYsOhbyB0csaw4bubYyAlcyIKKworIzogZ3BnLWludGVyZmFjZS5jOjQwOAorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAiZ3BnIGfhurdwIGzhu5dpIGtoaSBrw70gZOG7ryBsaeG7h3UiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzo0MzQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdOG6rXAgdGluIHThuqFtIHRo4budaSIKKworIzogZ3BnLWludGVyZmFjZS5jOjQzNworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGdoaSBjaOG7ryBrw70gxJHDrW5oIGvDqG0gdsOgbyDigJwlc+KAnSIKKworIzogZ3JhcGguYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmUgaW52YWxpZCBjb2xvciAnJS4qcycgaW4gbG9nLmdyYXBoQ29sb3JzIgorbXNnc3RyICJi4buPIHF1YSBtw6B1IGtow7RuZyBo4bujcCBs4buHIOKAnCUuKnPigJ0gdHJvbmcgbG9nLmdyYXBoQ29sb3JzIgorCisjOiBncmVwLmM6NjY4Cittc2dpZCAiIgorImdpdmVuIHBhdHRlcm4gY29udGFpbnMgTlVMTCBieXRlICh2aWEgLWYgPGZpbGU+KS4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCAiCisid2l0aCAtUCB1bmRlciBQQ1JFIHYyIgorbXNnc3RyICIiCisibeG6q3UgxJHDoyBjaG8gY8OzIGNo4bupYSBOVUxMIGJ5dGUgKHF1YSAtZiA8ZmlsZT4pLiDEkGnhu4F1IG7DoHkgY2jhu4kgxJHGsOG7o2MgaOG7lyB0cuG7oyB24bubaSAtIgorIlAgZMaw4bubaSBQQ1JFIHYyIgorCisjOiBncmVwLmM6MjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAi4oCcJXPigJ06IGtow7RuZyB0aOG7gyDEkeG7jWMgJXMiCisKKyM6IGdyZXAuYzoyMTQ1IHNldHVwLmM6MTY2IGJ1aWx0aW4vY2xvbmUuYzo0MTEgYnVpbHRpbi9kaWZmLmM6ODIKKyM6IGJ1aWx0aW4vcm0uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGzhuqV5IHRo4buRbmcga8OqIHbhu4Eg4oCcJXPigJ0iCisKKyM6IGdyZXAuYzoyMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQiCittc2dzdHIgIuKAnCVz4oCdOiDEkeG7jWMgbmfhuq9uIgorCisjOiBoZWxwLmM6MjMKK21zZ2lkICJzdGFydCBhIHdvcmtpbmcgYXJlYSAoc2VlIGFsc286IGdpdCBoZWxwIHR1dG9yaWFsKSIKK21zZ3N0ciAiYuG6r3QgxJHhuqd1IG3hu5l0IHbDuW5nIGzDoG0gdmnhu4djICh4ZW0gdGjDqm06IGdpdCBoZWxwIHR1dG9yaWFsKSIKKworIzogaGVscC5jOjI0Cittc2dpZCAid29yayBvbiB0aGUgY3VycmVudCBjaGFuZ2UgKHNlZSBhbHNvOiBnaXQgaGVscCBldmVyeWRheSkiCittc2dzdHIgImzDoG0gdmnhu4djIHRyw6puIHRoYXkgxJHhu5VpIGhp4buHbiB04bqhaSAoeGVtIHRow6ptOiBnaXQgaGVscCBldmVyeWRheSkiCisKKyM6IGhlbHAuYzoyNQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAieGVtIHjDqXQgbOG7i2NoIHPhu60gdMOsbmggdHLhuqFuZyAoeGVtIHRow6ptOiBnaXQgaGVscCByZXZpc2lvbnMpIgorCisjOiBoZWxwLmM6MjYKK21zZ2lkICJncm93LCBtYXJrIGFuZCB0d2VhayB5b3VyIGNvbW1vbiBoaXN0b3J5IgorbXNnc3RyICJ0aMOqbSwgZ2hpIGThuqV1IHbDoCBjaOG7iW5oIGzhu4tjaCBz4butIGNodW5nIGPhu6dhIGLhuqFuIgorCisjOiBoZWxwLmM6MjcKK21zZ2lkICJjb2xsYWJvcmF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHdvcmtmbG93cykiCittc2dzdHIgImzDoG0gdmnhu4djIG5ow7NtICh4ZW0gdGjDqm06IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGhlbHAuYzozMQorbXNnaWQgIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIgorbXNnc3RyICJDw6FjIGzhu4duaCBQb3JjZWxhaW4gY2jDrW5oIgorCisjOiBoZWxwLmM6MzIKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIkzhu4duaC90aGFvIHTDoWMgdGjhu6kgY+G6pXAiCisKKyM6IGhlbHAuYzozMworbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIkzhu4duaC9i4buZIGjhu49pIHRo4bupIGPhuqVwIgorCisjOiBoZWxwLmM6MzQKK21zZ2lkICJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIKK21zZ3N0ciAiVMawxqFuZyB0w6FjIHbhu5tpIG5o4buvbmcgY8OhaSBraMOhYyIKKworIzogaGVscC5jOjM1Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICJM4buHbmgvdGhhbyB0w6FjIOG7nyBt4bupYyB0aOG6pXAiCisKKyM6IGhlbHAuYzozNgorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIkzhu4duaC9i4buZIGjhu49pIOG7nyBt4bupYyB0aOG6pXAiCisKKyM6IGhlbHAuYzozNworbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIFN5bmNpbmcgUmVwb3NpdG9yaWVzIgorbXNnc3RyICJM4buHbmgvxJDhu5NuZyBi4buZIGtobyDhu58gbeG7qWMgdGjhuqVwIgorCisjOiBoZWxwLmM6MzgKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcm5hbCBIZWxwZXJzIgorbXNnc3RyICJM4buHbmgvSOG7lyB0cuG7oyBu4buZaSB04bqhaSDhu58gbeG7qWMgdGjhuqVwIgorCisjOiBoZWxwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiY8OhYyBs4buHbmggZ2l0IHPhurVuIGPDsyB0cm9uZyB0aMawIG3hu6VjIOKAnCVz4oCdOiIKKworIzogaGVscC5jOjMwNQorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAiY8OhYyBs4buHbmggZ2l0IHPhurVuIGPDsyB04burIG3hu5l0IG7GoWkga2jDoWMgdHJvbmcgJFBBVEggY+G7p2EgYuG6oW4iCisKKyM6IGhlbHAuYzozMTQKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIkPDsyBjw6FjIGzhu4duaCBHaXQgY2h1bmcgxJHGsOG7o2Mgc+G7rSBk4bulbmcgdHJvbmcgY8OhYyB0w6xuaCBodeG7kW5nIGtow6FjIG5oYXU6IgorCisjOiBoZWxwLmM6MzYzIGdpdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciCittc2dzdHIgImtow7RuZyBo4buXIHRy4bujIGxp4buHdCBrw6ogbOG7h25oIGtp4buDdSDigJwlc+KAnSIKKworIzogaGVscC5jOjQwMworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6IgorbXNnc3RyICJDw6FjIGNo4buJIGThuqtuIGNodW5nIHbhu4EgR2l0IGzDoDoiCisKKyM6IGhlbHAuYzo1MTIKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgdG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQiCittc2dzdHIgIlhlbSDigJxnaXQgaGVscCA8bOG7h25oPuKAnSDEkeG7gyDEkeG7jWMgY8OhYyDEkeG6t2MgdOG6oyBj4bunYSBs4buHbmggY29uIgorCisjOiBoZWxwLmM6NTE3Cittc2dpZCAiRXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIkPDoWMgbOG7h25oIGLDqm4gbmdvw6BpIgorCisjOiBoZWxwLmM6NTMyCittc2dpZCAiQ29tbWFuZCBhbGlhc2VzIgorbXNnc3RyICJDw6FjIGLDrSBkYW5oIGzhu4duaCIKKworIzogaGVscC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKyLigJwlc+KAnSB0csO0bmcgbmjGsCBsw6AgbeG7mXQgbOG7h25oIGdpdCwgbmjGsG5nIGNow7puZyB0w7RpIGtow7RuZ1xuIgorInRo4buDIHRo4buxYyB0aGkgbsOzLiBDw7MgbOG6vSBsw6AgbOG7h25oIGdpdC0lcyDEkcOjIGLhu4sgaOG7j25nPyIKKworIzogaGVscC5jOjY1NQorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICLhu5BpIGNow6AuIEjhu4cgdGjhu5FuZyBj4bunYSBi4bqhbiBiw6FvIHLhurFuZyBjaOG6s25nIGPDsyBs4buHbmggR2l0IG7DoG8gY+G6oy4iCisKKyM6IGhlbHAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiQ+G6ok5IIELDgU86IELhuqFuIMSRw6MgZ+G7jWkgbOG7h25oIEdpdCBjw7MgdMOqbiDigJwlc+KAnSwgbcOgIG7DsyBs4bqhaSBraMO0bmcgY8OzIHPhurVuLiIKKworIzogaGVscC5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICJUaeG6v3AgdOG7pWMgdsOgIGNvaSBy4bqxbmcgw70gYuG6oW4gbMOgIOKAnCVz4oCdLiIKKworIzogaGVscC5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIGluICUwLjFmIHNlY29uZHMsIGFzc3VtaW5nIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICJUaeG6v3AgdOG7pWMgdHJvbmcgJTAuMWYgZ2nDonksdsOgIGNvaSBy4bqxbmcgw70gYuG6oW4gbMOgIOKAnCVz4oCdLiIKKworIzogaGVscC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6IOKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGzhu4duaCBj4bunYSBnaXQuIFhlbSDigJxnaXQgLS1oZWxw4oCdLiIKKworIzogaGVscC5jOjY5OQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmRzIGFyZSIKK21zZ3N0clswXSAiIgorIlxuIgorIk5o4buvbmcgbOG7h25oIGdp4buRbmcgbmjhuqV0IGzDoCIKKworIzogaGVscC5jOjcxNAorbXNnaWQgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgdmVyc2lvbiBbPGPDoWMgdMO5eSBjaOG7jW4+XSIKKworIzogaGVscC5jOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgLSAlcyIKK21zZ3N0ciAiJXM6ICVzIC0gJXMiCisKKyM6IGhlbHAuYzo3ODcKK21zZ2lkICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKKyJcbiIKKyJDw7MgcGjhuqNpIMO9IGLhuqFuIGzDoCBt4buZdCB0cm9uZyBz4buRIG5o4buvbmcgY8OhaSBuw6B5IGtow7RuZz8iCisKKyM6IGlkZW50LmM6MzQ5Cittc2dpZCAiIgorIlxuIgorIioqKiBQbGVhc2UgdGVsbCBtZSB3aG8geW91IGFyZS5cbiIKKyJcbiIKKyJSdW5cbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisidG8gc2V0IHlvdXIgYWNjb3VudCdzIGRlZmF1bHQgaWRlbnRpdHkuXG4iCisiT21pdCAtLWdsb2JhbCB0byBzZXQgdGhlIGlkZW50aXR5IG9ubHkgaW4gdGhpcyByZXBvc2l0b3J5LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiKioqIFZ1aSBsw7JuZyBjaG8gYmnhur90IGLhuqFuIGzDoCBhaS5cbiIKKyJcbiIKKyJDaOG6oXlcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcImLhuqFuQHbDrV9k4bulLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIlTDqm4gQ+G7p2EgQuG6oW5cIlxuIgorIlxuIgorIsSR4buDIMSR4bq3dCDEkeG7i25oIGRhbmggbeG6t2MgxJHhu4tuaCBjaG8gdMOgaSBraG/huqNuIGPhu6dhIGLhuqFuLlxuIgorIkLhu48gdMO5eSBjaOG7jW4gLS1nbG9iYWwgbuG6v3UgY2jhu4kgxJHhu4tuaCBkYW5oIHJpw6puZyBjaG8ga2hvIG7DoHkuXG4iCisiXG4iCisKKyM6IGlkZW50LmM6Mzc5Cittc2dpZCAibm8gZW1haWwgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAia2jDtG5nIMSRxrBhIHJhIMSR4buLYSBjaOG7iSB0aMawIMSRaeG7h24gdOG7rSB2w6AgYXV0by1kZXRlY3Rpb24gYuG7iyB04bqvdCIKKworIzogaWRlbnQuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IGVtYWlsIGFkZHJlc3MgKGdvdCAnJXMnKSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThu7EgZMOyIHTDrG0gxJHhu4thIGNo4buJIHRoxrAgxJFp4buHbiB04butIChuaOG6rW4g4oCcJXPigJ0pIgorCisjOiBpZGVudC5jOjQwMQorbXNnaWQgIm5vIG5hbWUgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAiY2jGsGEgY2jhu4kgcmEgdMOqbiB2w6AgdOG7sS3EkeG7mW5nLWTDsi10w6xtIGLhu4sgdOG6r3QiCisKKyM6IGlkZW50LmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBuYW1lIChnb3QgJyVzJykiCittc2dzdHIgImtow7RuZyB0aOG7gyBkw7ItdMOsbS104buxIMSR4buZbmcgdMOqbiAoxJHDoyBuaOG6rW4g4oCcJXPigJ0pIgorCisjOiBpZGVudC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBpZGVudCBuYW1lIChmb3IgPCVzPikgbm90IGFsbG93ZWQiCittc2dzdHIgImtow7RuZyBjaG8gcGjDqXAgdMOqbiDEkeG7i25oIGRhbmggbMOgIHLhu5duZyAoY2hvIDwlcz4pIgorCisjOiBpZGVudC5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lIGNvbnNpc3RzIG9ubHkgb2YgZGlzYWxsb3dlZCBjaGFyYWN0ZXJzOiAlcyIKK21zZ3N0ciAidMOqbiBjaOG7iSDEkcaw4bujYyBwaMOpcCBiYW8gZ+G7k20gY8OhYyBrw70gdOG7sSBzYXU6ICVzIgorCisjOiBpZGVudC5jOjQzNiBidWlsdGluL2NvbW1pdC5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAibmfDoHkgdGjDoW5nIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogbGlzdC1vYmplY3RzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgdHJlZSBtb2RlLCBidXQgaXMgbm90IGEgdHJlZSIKK21zZ3N0ciAibeG7pWMg4oCcJXPigJ0gdHJvbmcgY8OieSAlcyBjw7MgbsO6dCBjw6J5LCBuaMawbmcga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgY8OieSIKKworIzogbGlzdC1vYmplY3RzLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgYmxvYiBtb2RlLCBidXQgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAibeG7pWMg4oCcJXPigJ0gdHJvbmcgY8OieSAlcyBjw7MgbsO6dCBibG9iLCBuaMawbmcga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgYmxvYiIKKworIzogbGlzdC1vYmplY3RzLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIHJvb3QgdHJlZSBmb3IgY29tbWl0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6o2kgY8OieSBn4buRYyBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnSIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIHNwYXJzZSBibG9iIGluICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB0cnV5IGPhuq1wIGPDoWMgYmxvYiBy4bqjaSByw6FjIHRyb25nICclcyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHNwYXJzZSBmaWx0ZXIgZGF0YSBpbiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGThu68gbGnhu4d1IGLhu5kgbOG7jWMgcuG6o2kgcsOhYyB0cm9uZyAlcyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NTgKK21zZ2lkICJleHBlY3RlZCAndHJlZTo8ZGVwdGg+JyIKK21zZ3N0ciAiY+G6p24g4oCcdHJlZTo8ZGVwdGg+4oCdIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo3MworbXNnaWQgInNwYXJzZTpwYXRoIGZpbHRlcnMgc3VwcG9ydCBoYXMgYmVlbiBkcm9wcGVkIgorbXNnc3RyICJ2aeG7h2MgaOG7lyB0cuG7oyBi4buZIGzhu41jIHNwYXJzZTrEkcaw4budbmcvZOG6q24gxJHDoyBi4buLIGLhu48iCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsdGVyLXNwZWMgJyVzJyIKK21zZ3N0ciAixJHhurdjIHThuqMgYuG7mSBs4buNYyBraMO0bmcgaOG7o3AgbOG7hyDigJwlc+KAnSIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11c3QgZXNjYXBlIGNoYXIgaW4gc3ViLWZpbHRlci1zcGVjOiAnJWMnIgorbXNnc3RyICJwaOG6o2kgdGhvw6F0IGNoYXIgdHJvbmcgc3ViLWZpbHRlci1zcGVjOiAnJWMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxNDQKK21zZ2lkICJleHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgY29tYmluZToiCittc2dzdHIgIm1vbmcgxJHhu6NpIG3hu5l0IGPDoWkgZ8OsIMSRw7Mgc2F1IGtoaSBr4bq/dCBo4bujcDoiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjIyNgorbXNnaWQgIm11bHRpcGxlIGZpbHRlci1zcGVjcyBjYW5ub3QgYmUgY29tYmluZWQiCittc2dzdHIgImtow7RuZyB0aOG7gyB04buVIGjhu6NwIG5oaeG7gXUgxJHhurdjIHThuqMga2nhu4N1IGzhu41jIgorCisjOiBsb2NrZmlsZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuIgorIlxuIgorIkFub3RoZXIgZ2l0IHByb2Nlc3Mgc2VlbXMgdG8gYmUgcnVubmluZyBpbiB0aGlzIHJlcG9zaXRvcnksIGUuZy5cbiIKKyJhbiBlZGl0b3Igb3BlbmVkIGJ5ICdnaXQgY29tbWl0Jy4gUGxlYXNlIG1ha2Ugc3VyZSBhbGwgcHJvY2Vzc2VzXG4iCisiYXJlIHRlcm1pbmF0ZWQgdGhlbiB0cnkgYWdhaW4uIElmIGl0IHN0aWxsIGZhaWxzLCBhIGdpdCBwcm9jZXNzXG4iCisibWF5IGhhdmUgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllcjpcbiIKKyJyZW1vdmUgdGhlIGZpbGUgbWFudWFsbHkgdG8gY29udGludWUuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIHThuqFvIOKAnCVzLmxvY2vigJ06ICVzLlxuIgorIlxuIgorIlRp4bq/biB0csOsbmggZ2l0IGtow6FjIGPDsyBs4bq9IMSRYW5nIGNo4bqheSDhu58ga2hvIG7DoHksIHbDrSBk4bulXG4iCisibeG7mXQgdHLDrG5oIHNv4bqhbiB0aOG6o28gxJHGsOG7o2MgbeG7nyBi4bufaSDigJxnaXQgY29tbWl04oCdLiBWdWkgbMOybmcgY2jhuq9jIGNo4bqvblxuIgorInLhurFuZyBt4buNaSB0aeG6v24gdHLDrG5oIMSRw6MgY2jhuqVtIGThu6l0IHbDoCBzYXUgxJHDsyB0aOG7rSBs4bqhaS4gTuG6v3UgduG6q24gbOG7l2ksXG4iCisibeG7mXQgdGnhur9uIHRyw6xuaCBnaXQgY8OzIGzhur0gxJHDoyDEkeG7lSB24buhIGtoaSB0aOG7sWMgaGnhu4duIOG7nyBraG8gbsOgeSB0csaw4bubYyDEkcOzOlxuIgorImfDtSBi4buPIHThuq1wIHRpbiBt4buZdCBjw6FjaCB0aOG7pyBjw7RuZyDEkeG7gyB0aeG6v3AgdOG7pWMuIgorCisjOiBsb2NrZmlsZS5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyB04bqhbyDigJwlcy5sb2Nr4oCdOiAlcyIKKworIzogbWVyZ2UuYzo0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buNYyBi4buZIG5o4bubIMSR4buHbSIKKworIzogbWVyZ2UuYzoxMDcgcmVyZXJlLmM6NzIwIGJ1aWx0aW4vYW0uYzoxODc5IGJ1aWx0aW4vYW0uYzoxOTEzCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTQxIGJ1aWx0aW4vY2hlY2tvdXQuYzo4MDAgYnVpbHRpbi9jbG9uZS5jOjgxMAorIzogYnVpbHRpbi9zdGFzaC5jOjI2NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSB04bqtcCB0aW4gbMawdSBi4bqjbmcgbeG7pWMgbOG7pWMgbeG7m2kiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1NgorbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIoY29tbWl0IHNhaSlcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiYWRkaW5mb19jYWNoZSBn4bq3cCBs4buXaSDEkeG7kWkgduG7m2kgxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdOyB2aeG7h2MgaMOyYSB0cuG7mW4gYuG7iyBiw6NpIGLhu48uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgdG8gcmVmcmVzaCBmb3IgcGF0aCAnJXMnOyBtZXJnZSBhYm9ydGluZy4iCittc2dzdHIgIiIKKyJhZGRpbmZvX2NhY2hlIGfhurdwIGzhu5dpIGtoaSBsw6BtIG3hu5tpIMSR4buRaSB24bubaSDEkcaw4budbmcgZOG6q24g4oCcJXPigJ07IHZp4buHYyBow7JhIHRy4buZbiBi4buLICIKKyJiw6NpIGLhu48uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHThuqFvIMSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAiR+G7oSBi4buPICVzIMSR4buDIHThuqFvIGNo4buXIChyb29tKSBjaG8gdGjGsCBt4bulYyBjb25cbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODk5IG1lcmdlLXJlY3Vyc2l2ZS5jOjkxOAorbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIjogY8OzIGzhur0gbMOgIG3hu5l0IHh1bmcgxJHhu5l0IEQvRj8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkwOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICclcyciCittc2dzdHIgInThu6sgY2jhu5FpIMSRw7NuZyB04bqtcCB0aW4ga2jDtG5nIMSRxrDhu6NjIHRoZW8gZMO1aSB04bqhaSDigJwlc+KAnSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTQ5IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyDEkeG7kWkgdMaw4bujbmcgJXMg4oCcJXPigJ0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk1NAorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICJtb25nIMSR4bujaSDEkeG7kWkgdMaw4bujbmcgYmxvYiBjaG8gJXMg4oCcJXPigJ0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIG3hu58g4oCcJXPigJ06ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJzogJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB04bqhbyBsacOqbiBr4bq/dCBt4buBbSAoc3ltbGluaykg4oCcJXPigJ06ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSBwaOG6o2kgbMOgbSBnw6wgduG7m2kgJTA2byAlcyDigJwlc+KAnSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChub3QgY2hlY2tlZCBvdXQpIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgaMOyYSB0cuG7mW4gbcO0LcSRdW4tY29uIOKAnCVz4oCdIChraMO0bmcgbOG6pXkgcmEgxJHGsOG7o2MpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgbm90IHByZXNlbnQpIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgaMOyYSB0cuG7mW4gbcO0LcSRdW4tY29uIOKAnCVz4oCdIChs4bqnbiBjaHV54buDbiBnaWFvIGtow7RuZyBoaeG7h24gZGnhu4duKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIGRvbid0IGZvbGxvdyBtZXJnZS1iYXNlKSIKK21zZ3N0ciAiIgorIkfhurdwIGzhu5dpIGtoaSBow7JhIHRy4buZbiBtw7QtxJF1bi1jb24g4oCcJXPigJ0gKGzhuqduIGNodXnhu4NuIGdpYW8ga2jDtG5nIHRoZW8gc2F1IG7hu4FuLWjDsmEtIgorInRy4buZbikiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMTMgbWVyZ2UtcmVjdXJzaXZlLmM6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIHRvIHRoZSBmb2xsb3dpbmcgY29tbWl0OiIKK21zZ3N0ciAiQ2h1eeG7g24tdGnhur9wLW5oYW5oIG3DtC3EkXVuLWNvbiDigJwlc+KAnSDEkeG6v24gbOG6p24gY2h1eeG7g24gZ2lhbyBzYXUgxJHDonk6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjE2IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiQ2h1eeG7g24tdGnhur9wLW5oYW5oIG3DtC3EkXVuLWNvbiDigJwlc+KAnSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtZXJnZSBmb2xsb3dpbmcgY29tbWl0cyBub3QgZm91bmQpIgorbXNnc3RyICIiCisiR+G6t3AgbOG7l2kga2hpIGjDsmEgdHLhu5luIG3DtC3EkXVuLWNvbiDigJwlc+KAnSAoa2jDtG5nIHTDrG0gdGjhuqV5IGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyAiCisidGhlbyBzYXUgaMOyYSB0cuG7mW4pIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBmYXN0LWZvcndhcmQpIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgaMOyYSB0cuG7mW4gbcO0LcSRdW4tY29uIOKAnCVz4oCdIChraMO0bmcgY2h1eeG7g24gdGnhur9wIG5oYW5oIMSRxrDhu6NjKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1NgorbXNnaWQgIkZvdW5kIGEgcG9zc2libGUgbWVyZ2UgcmVzb2x1dGlvbiBmb3IgdGhlIHN1Ym1vZHVsZTpcbiIKK21zZ3N0ciAiVMOsbSB0aOG6pXkgbeG7mXQgZ2nhuqNpIHBow6FwIGjDsmEgdHLhu5luIGPDsyB0aOG7gyBjaG8gbcO0LcSRdW4tY29uOlxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB0aGlzIGlzIGNvcnJlY3Qgc2ltcGx5IGFkZCBpdCB0byB0aGUgaW5kZXggZm9yIGV4YW1wbGVcbiIKKyJieSB1c2luZzpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorIndoaWNoIHdpbGwgYWNjZXB0IHRoaXMgc3VnZ2VzdGlvbi5cbiIKK21zZ3N0ciAiIgorIk7hur91IMSRw6J5IGzDoCDEkcO6bmcgxJHGoW4gZ2nhuqNuIHRow6ptIG7DsyB2w6BvIG3hu6VjIGzhu6VjIHbDrSBk4bulXG4iCisiYuG6sW5nIGPDoWNoIGTDuW5nOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisiY8OhaSBtw6Agc+G6vSBjaOG6pXAgbmjhuq1uIGfhu6NpIMO9IG7DoHkuXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobXVsdGlwbGUgbWVyZ2VzIGZvdW5kKSIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGjDsmEgdHLhu5luIG3DtC3EkXVuLWNvbiDigJwlc+KAnSAodGjhuqV5IG5oaeG7gXUgaMOyYSB0cuG7mW4gxJFhIHRyw7luZykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNDEKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRo4buxYyBoaeG7h24gdHLhu5luIG7hu5lpIGLhu5kiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHRow6ptICVzIHbDoG8gY8ahIHPhu58gZOG7ryBsaeG7h3UiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICJU4buxLcSR4buZbmctaMOyYS10cuG7mW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IFJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IHdyaXRpbmcgdG8gJXMgaW5zdGVhZC4iCittc2dzdHIgIiIKKyJM4buXaTogdOG7qyBjaOG7kWkgxJHDs25nIHThuq1wIHRpbiBraMO0bmcgxJHGsOG7o2MgdGhlbyBkw7VpIHThuqFpIOKAnCVz4oCdOyB0aGF5IHbDoG8gxJHDsyBnaGkgdsOgbyAiCisiJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZS4iCittc2dzdHIgIiIKKyJYVU5HIMSQ4buYVCAoJXMveMOzYSk6ICVzIGLhu4sgeMOzYSB0cm9uZyAlcyB2w6AgJXMgdHJvbmcgJXMuIFBoacOqbiBi4bqjbiAlcyBj4bunYSAlcyAiCisiY8OybiBs4bqhaSB0cm9uZyBjw6J5ICh0cmVlKS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlLiIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUICglcy94w7NhKTogJXMgYuG7iyB4w7NhIHRyb25nICVzIHbDoCAlcyDEkeG6v24gJXMgdHJvbmcgJXMuIFBoacOqbiBi4bqjbiAlcyAiCisiY+G7p2EgJXMgY8OybiBs4bqhaSB0cm9uZyBjw6J5ICh0cmVlKS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUICglcy94w7NhKTogJXMgYuG7iyB4w7NhIHRyb25nICVzIHbDoCAlcyB0cm9uZyAlcy4gUGhpw6puIGLhuqNuICVzIGPhu6dhICVzICIKKyJjw7JuIGzhuqFpIHRyb25nIGPDonkgKHRyZWUpIHThuqFpICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisiWFVORyDEkOG7mFQgKCVzL3jDs2EpOiAlcyBi4buLIHjDs2EgdHJvbmcgJXMgdsOgICVzIMSR4bq/biAlcyB0cm9uZyAlcy4gUGhpw6puIGLhuqNuICVzICIKKyJj4bunYSAlcyBjw7JuIGzhuqFpIHRyb25nIGPDonkgKHRyZWUpIHThuqFpICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUyNgorbXNnaWQgInJlbmFtZSIKK21zZ3N0ciAixJHhu5VpIHTDqm4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjYKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICLEkcOjIMSR4buVaSB0w6puIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTc3IG1lcmdlLXJlY3Vyc2l2ZS5jOjI0NzIgbWVyZ2UtcmVjdXJzaXZlLmM6MzExNworIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgJXMiCittc2dzdHIgIlThu6sgY2jhu5FpIMSRw7NuZyB04bqtcCB0aW4ga2jDtG5nIMSRxrDhu6NjIHRoZW8gZMO1aSB04bqhaSDigJwlc+KAnSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU4NworIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzLCBldmVuIHRob3VnaCBpdCdzIGluIHRoZSB3YXkuIgorbXNnc3RyICIiCisiVOG7qyBjaOG7kWkgxJHDs25nIHThuq1wIHRpbiBraMO0bmcgxJHGsOG7o2MgdGhlbyBkw7VpIHThuqFpIOKAnCVz4oCdLCBuZ2F5IGPhuqMga2hpIG7DsyDhu58gdHLDqm4gIgorIsSRxrDhu51uZy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAgQWRkZWQgJXMgaW4gJXMiCittc2dzdHIgIiIKKyJYVU5HIMSQ4buYVCAoxJHhu5VpLXTDqm4vdGjDqm0pOiDEkOG7lWkgdMOqbiAlcy0+JXMgdHJvbmcgJXMuICVzIMSRxrDhu6NjIHRow6ptIHRyb25nICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgZGlyZWN0b3J5IGluICVzIGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIlcyBsw6AgbeG7mXQgdGjGsCBt4bulYyB0cm9uZyAlcyB0aGF5IHbDoG8gxJHDsyB0aMOqbSB2w6BvIG5oxrAgbMOgICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIiCisiVOG7qyBjaOG7kWkgxJHDs25nIHThuq1wIHRpbiBraMO0bmcgxJHGsOG7o2MgdGhlbyBkw7VpIHThuqFpIOKAnCVz4oCdOyB0aGF5IHbDoG8gxJHDsyDEkWFuZyB0aMOqbSAiCisidGjDoG5oICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBcIiVzXCItPlwiJXNcIiBpbiBicmFuY2ggXCIlc1wiIHJlbmFtZSBcIiVzIgorIlwiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCittc2dzdHIgIiIKKyJYVU5HIMSQ4buYVCAoxJHhu5VpLXTDqm4vxJHhu5VpLXTDqm4pOiDEkOG7lWkgdMOqbiBcIiVzXCItPlwiJXNcIiB0cm9uZyBuaMOhbmggXCIlc1wiIMSR4buVaSAiCisidMOqbiBcIiVzXCItPlwiJXNcIiB0cm9uZyBcIiVzXCIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcxMworbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiIChj4bqnbiBnaeG6o2kgcXV54bq/dCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgJXMtPiVzIGluICVzLiBSZW5hbWUgJXMtPiVzIGluICVzIgorbXNnc3RyICIiCisiWFVORyDEkOG7mFQgKMSR4buVaS10w6puL8SR4buVaS10w6puKTogxJDhu5VpIHTDqm4gJXMtPiVzIHRyb25nICVzLiDEkOG7lWkgdMOqbiAlcy0+JXMgdHJvbmcgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChkaXJlY3RvcnkgcmVuYW1lIHNwbGl0KTogVW5jbGVhciB3aGVyZSB0byBwbGFjZSAlcyBiZWNhdXNlICIKKyJkaXJlY3RvcnkgJXMgd2FzIHJlbmFtZWQgdG8gbXVsdGlwbGUgb3RoZXIgZGlyZWN0b3JpZXMsIHdpdGggbm8gZGVzdGluYXRpb24gIgorImdldHRpbmcgYSBtYWpvcml0eSBvZiB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisiWFVORyDEkOG7mFQ6ICh0aMawIG3hu6VjIMSR4buVaSB0w6puIGNoaWEgdMOhY2gpOiBLaMO0bmcgcsO1IHLDoG5nIMSR4buDIMSR4bq3dCDEkeG7i2EgxJFp4buDbSAlcyBi4bufaSAiCisidsOsIHRoxrAgbeG7pWMgJXMgxJHDoyBi4buLIMSR4buVaSB0w6puIHRow6BuaCBuaGnhu4F1IHRoxrAgbeG7pWMga2jDoWMsIHbhu5tpIGtow7RuZyDEkcOtY2ggxJHhur9uICIKKyJuaOG6rW4gbeG7mXQgcGjhuqduIG5oaeG7gXUgY+G7p2EgY8OhYyB04bqtcCB0aW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IEV4aXN0aW5nIGZpbGUvZGlyIGF0ICVzIGluIHRoZSB3YXkgb2YgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWUocykgcHV0dGluZyB0aGUgZm9sbG93aW5nIHBhdGgocykgdGhlcmU6ICVzLiIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUOiAobmfhuqdtIMSR4buVaSB0w6puIHRoxrAgbeG7pWMpOiBU4bqtcCB0aW4vdGjGsCBt4bulYyDEkcOjIHPhurVuIGPDsyB04bqhaSAlcyB0aGVvIGPDoWNoICIKKyJj4bunYSBjw6FjIMSR4buVaSB0w6puIHRoxrAgbeG7pWMgbmfhuqdtIMSR4bq3dCAoY8OhYykgxJHGsOG7nW5nIGThuqtuIHNhdSDhu58gxJHDonk6ICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBDYW5ub3QgbWFwIG1vcmUgdGhhbiBvbmUgcGF0aCB0byAlczsgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzIHRyaWVkIHRvIHB1dCB0aGVzZSBwYXRocyB0aGVyZTogJXMiCittc2dzdHIgIiIKKyJYVU5HIMSQ4buYVDogKG5n4bqnbSDEkeG7lWkgdMOqbiB0aMawIG3hu6VjKTogS2jDtG5nIHRo4buDIMOhbmggeOG6oSBt4buZdCDEkcaw4budbmcgZOG6q24gdGjDoG5oICVzOyAiCisiY8OhYyDEkeG7lWkgdMOqbiB0aMawIG3hu6VjIG5n4bqnbSBj4buRIMSR4bq3dCBjw6FjIMSRxrDhu51uZyBk4bqrbiDhu58gxJHDonk6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiBSZW5hbWUgZGlyZWN0b3J5ICVzLSIKKyI+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJYVU5HIMSQ4buYVCAoxJHhu5VpLXTDqm4vxJHhu5VpLXTDqm4pOiDEkOG7lWkgdMOqbiB0aMawIG3hu6VjICVzLT4lcyB0cm9uZyAlcy4gxJDhu5VpIHTDqm4gdGjGsCBt4bulYyAiCisiJXMtPiVzIHRyb25nICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNDM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBBdm9pZGluZyBhcHBseWluZyAlcyAtPiAlcyByZW5hbWUgdG8gJXMsIGJlY2F1c2UgJXMgaXRzZWxmIHdhcyAiCisicmVuYW1lZC4iCittc2dzdHIgIiIKKyJD4bqiTkggQsOBTzogdHLDoW5oIMOhcCBk4bulbmcgJXMgLT4gJXMgxJHhu5VpIHRow6puIHRow6BuaCAlcywgYuG7n2kgdsOsIGLhuqNuIHRow6JuICVzIGPFqW5nICIKKyJi4buLIMSR4buVaSB0w6puLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mjk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgxJHhu5FpIHTGsOG7o25nICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyOTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgJXMga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgYmxvYiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyOAorbXNnaWQgIm1vZGlmeSIKK21zZ3N0ciAic+G7rWEgxJHhu5VpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDI4Cittc2dpZCAibW9kaWZpZWQiCittc2dzdHIgIsSRw6Mgc+G7rWEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwNDAKK21zZ2lkICJjb250ZW50IgorbXNnc3RyICJu4buZaSBkdW5nIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDQ0Cittc2dpZCAiYWRkL2FkZCIKK21zZ3N0ciAidGjDqm0vdGjDqm0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIgorbXNnc3RyICLEkMOjIGLhu48gcXVhICVzICjEkcOjIGPDsyBz4bq1biBs4bqnbiBow7JhIHRy4buZbiBuw6B5KSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA4OSBnaXQtc3VibW9kdWxlLnNoOjEwMDMKK21zZ2lkICJzdWJtb2R1bGUiCittc2dzdHIgIm3DtC3EkXVuLWNvbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAiWFVORyDEkOG7mFQgKCVzKTogWHVuZyDEkeG7mXQgaMOyYSB0cuG7mW4gdHJvbmcgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIlRoYXkgdsOgbyDEkcOzIHRow6ptIHbDoG8gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhdGggdXBkYXRlZDogJXMgYWRkZWQgaW4gJXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gJXM7ICIKKyJtb3ZpbmcgaXQgdG8gJXMuIgorbXNnc3RyICIiCisixJDGsOG7nW5nIGThuqtuIMSRw6MgxJHGsOG7o2MgY+G6rXAgbmjhuq10OiAlcyDEkcaw4bujYyB0aMOqbSB2w6BvIHRyb25nICVzIGLDqm4gdHJvbmcgbeG7mXQgdGjGsCBt4bulYyAiCisixJHDoyDEkcaw4bujYyDEkeG7lWkgdMOqbiB0cm9uZyAlczsgZGkgY2h1eeG7g24gbsOzIMSR4bq/biAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgYWRkZWQgaW4gJXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgIgorImluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUICh24buLIHRyw60gdOG7h3ApOiAlcyDEkcaw4bujYyB0aMOqbSB2w6BvIHRyb25nICVzIHRyb25nIG3hu5l0IHRoxrAgbeG7pWMgxJHDoyDEkcaw4bujYyAiCisixJHhu5VpIHTDqm4gdGjDoG5oICVzLCDEkW/DoW4gbMOgIG7DsyBuw6puIMSRxrDhu6NjIGRpIGNodXnhu4NuIMSR4bq/biAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhdGggdXBkYXRlZDogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gIgorIiVzOyBtb3ZpbmcgaXQgdG8gJXMuIgorbXNnc3RyICIiCisixJDGsOG7nW5nIGThuqtuIMSRw6MgxJHGsOG7o2MgY+G6rXAgbmjhuq10OiAlcyDEkcaw4bujYyDEkeG7lWkgdMOqbiB0aMOgbmggJXMgdHJvbmcgJXMsIGLDqm4gdHJvbmcgbeG7mXQgIgorInRoxrAgbeG7pWMgxJHDoyDEkcaw4bujYyDEkeG7lWkgdMOqbiB0cm9uZyAlczsgZGkgY2h1eeG7g24gbsOzIMSR4bq/biAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgIgorIndhcyByZW5hbWVkIGluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUICh24buLIHRyw60gdOG7h3ApOiAlcyDEkcaw4bujYyDEkeG7lWkgdMOqbiB0aMOgbmggJXMgdHJvbmcgJXMsIGLDqm4gdHJvbmcgbeG7mXQgdGjGsCAiCisibeG7pWMgxJHDoyDEkcaw4bujYyDEkeG7lWkgdMOqbiB0aMOgbmggJXMsIMSRb8OhbiBsw6AgbsOzIG7Dqm4gxJHGsOG7o2MgZGkgY2h1eeG7g24gxJHhur9uICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzMyNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAixJBhbmcgeMOzYSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM1MAorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICJ04bqtcC10aW4vdGjGsC1t4bulYyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM1NQorbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICJ0aMawLW3hu6VjL3Thuq1wLXRpbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUICglcyk6IOG7niDEkcOieSBraMO0bmcgY8OzIHRoxrAgbeG7pWMgbsOgbyBjw7MgdMOqbiAlcyB0cm9uZyAlcy4gVGjDqm0gJXMgbmjGsCBsw6AgIgorIiVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAiVGjDqm0gXCIlc1wiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChhZGQvYWRkKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIlhVTkcgxJDhu5hUICh0aMOqbS90aMOqbSk6IFh1bmcgxJHhu5l0IGjDsmEgdHLhu5luIHRyb25nICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDI0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlISIKK21zZ3N0ciAixJDDoyBj4bqtcCBuaOG6rXQgcuG7k2khIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDMzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAiaMOyYSB0cuG7mW4gY8OhYyBjw6J5ICVzIHbDoCAlcyBn4bq3cCBs4buXaSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzUzNworbXNnaWQgIk1lcmdpbmc6IgorbXNnc3RyICLEkGFuZyB0cuG7mW46IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICJ0w6xtIHRo4bqleSAldSB04buVIHRpw6puIGNodW5nOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzYwMAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAiaMOyYSB0cuG7mW4ga2jDtG5nIHRy4bqjIHbhu4EgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6BvIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIgICVzIgorbXNnc3RyICIiCisiQ8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZIGPhu6dhIGLhuqFuIHbhu5tpIGPDoWMgdOG6rXAgdGluIHNhdSDEkcOieSBz4bq9IGLhu4sgZ2hpIMSRw6ggYuG7n2kgbOG7h25oICIKKyJow7JhIHRy4buZbjpcbiIKKyIgICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIMSR4buRaSB0xrDhu6NuZyDigJwlc+KAnSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzc3NCBidWlsdGluL21lcmdlLmM6Njk3IGJ1aWx0aW4vbWVyZ2UuYzo4NzcKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIGLhuqNuZyBt4bulYyBs4bulYy4iCisKKyM6IG1pZHguYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIgorbXNnc3RyICJ04bqtcCB0aW4gxJHhu5MgdGjhu4sgbXVsdGktcGFjay1pbmRleCAlcyBxdcOhIG5o4buPIgorCisjOiBtaWR4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBzaWduYXR1cmUgMHglMDh4IGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgImNo4buvIGvDvSBtdWx0aS1wYWNrLWluZGV4IDB4JTA4eCBraMO0bmcga2jhu5twIGNo4buvIGvDvSAweCUwOHgiCisKKyM6IG1pZHguYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHZlcnNpb24gJWQgbm90IHJlY29nbml6ZWQiCittc2dzdHIgImtow7RuZyBuaOG6rW4gcmEgcGhpw6puIGLhuqNuICVkIGPhu6dhIG11bHRpLXBhY2staW5kZXgiCisKKyM6IG1pZHguYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIHZlcnNpb24gJXUgZG9lcyBub3QgbWF0Y2giCittc2dzdHIgInBoacOqbiBi4bqjbiBixINtIOKAnCV14oCdIGtow7RuZyBraOG7m3AiCisKKyM6IG1pZHguYzoxMDgKK21zZ2lkICJpbnZhbGlkIGNodW5rIG9mZnNldCAodG9vIGxhcmdlKSIKK21zZ3N0ciAia2hv4bqjbmcgYsO5IMSRb+G6oW4ga2jDtG5nIGjhu6NwIGzhu4cgKHF1w6EgbOG7m24pIgorCisjOiBtaWR4LmM6MTMyCittc2dpZCAidGVybWluYXRpbmcgbXVsdGktcGFjay1pbmRleCBjaHVuayBpZCBhcHBlYXJzIGVhcmxpZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAibcOjIG3huqNuaCBr4bq/dCB0aMO6YyBtdWx0aS1wYWNrLWluZGV4IHh14bqldCBoaeG7h24gc+G7m20gaMahbiBiw6xuaCB0aMaw4budbmciCisKKyM6IG1pZHguYzoxNDUKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgcGFjay1uYW1lIGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IHRoaeG6v3UgbeG6o25oIHBhY2stbmFtZSBj4bqnbiB0aGnhur90IgorCisjOiBtaWR4LmM6MTQ3Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBmYW5vdXQgY2h1bmsiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXggdGhp4bq/dSBt4bqjbmggT0lEIGZhbm91dCBj4bqnbiB0aGnhur90IgorCisjOiBtaWR4LmM6MTQ5Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBsb29rdXAgY2h1bmsiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXggdGhp4bq/dSBt4bqjbmggT0lEIGxvb2t1cCBj4bqnbiB0aGnhur90IgorCisjOiBtaWR4LmM6MTUxCittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBvZmZzZXRzIGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IHRoaeG6v3UgbeG6o25oIGPDoWMga2hv4bqjbmcgYsO5IMSR4buRaSB0xrDhu6NuZyBj4bqnbiB0aGnhur90IgorCisjOiBtaWR4LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggcGFjayBuYW1lcyBvdXQgb2Ygb3JkZXI6ICclcycgYmVmb3JlICclcyciCittc2dzdHIgImPDoWMgdMOqbiBnw7NpIG11bHRpLXBhY2staW5kZXgga2jDtG5nIMSRw7puZyB0aOG7qSB04buxOiDigJwlc+KAnSB0csaw4bubYyDigJwlc+KAnSIKKworIzogbWlkeC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay1pbnQtaWQ6ICV1ICgldSB0b3RhbCBwYWNrcykiCittc2dzdHIgInBhY2staW50LWlkIHNhaTogJXUgKCV1IGPDoWMgZ8OzaSB04buVbmcpIgorCisjOiBtaWR4LmM6MjYwCittc2dpZCAibXVsdGktcGFjay1pbmRleCBzdG9yZXMgYSA2NC1iaXQgb2Zmc2V0LCBidXQgb2ZmX3QgaXMgdG9vIHNtYWxsIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IGzGsHUgdHLhu68gbeG7mXQga2hv4bqjbmcgYsO5IDY0LWLDrXQsIG5oxrBuZyBvZmZfdCBsw6AgcXXDoSBuaOG7jyIKKworIzogbWlkeC5jOjI4OAorbXNnaWQgImVycm9yIHByZXBhcmluZyBwYWNrZmlsZSBmcm9tIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgImzhu5dpIGNodeG6qW4gYuG7iyB04bqtcCB0aW4gZ8OzaSB04burIG11bHRpLXBhY2staW5kZXgiCisKKyM6IG1pZHguYzo0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFkZCBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdGjDqm0gdOG6rXAgdGluIGfDs2kg4oCcJXPigJ0iCisKKyM6IG1pZHguYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGFjay1pbmRleCAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgbeG7nyBwYWNrLWluZGV4IOKAnCVz4oCdIgorCisjOiBtaWR4LmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2NhdGUgb2JqZWN0ICVkIGluIHBhY2tmaWxlIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgcGjDom4gYuG7lSDEkeG7kWkgdMaw4bujbmcg4oCcJWTigJ0gdHJvbmcgdOG6rXAgdGluIGfDs2kiCisKKyM6IG1pZHguYzo4NDIKK21zZ2lkICJBZGRpbmcgcGFja2ZpbGVzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIsSQYW5nIHRow6ptIHThuq1wIHRpbiBnw7NpIHThu6sgbXVsdGktcGFjay1pbmRleCIKKworIzogbWlkeC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHNlZSBwYWNrLWZpbGUgJXMgdG8gZHJvcCIKK21zZ3N0ciAixJHDoyBraMO0bmcgdGjhuqV5IHThuq1wIHRpbiBnw7NpICVzIMSR4buDIG3DoCB4w7NhIgorCisjOiBtaWR4LmM6OTczCittc2dpZCAiV3JpdGluZyBjaHVua3MgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAixJBhbmcgZ2hpIGPDoWMga2jDumMgdsOgbyBtdWx0aS1wYWNrLWluZGV4IgorCisjOiBtaWR4LmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2xlYXIgbXVsdGktcGFjay1pbmRleCBhdCAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHjDs2EgbXVsdGktcGFjay1pbmRleCB04bqhaSAlcyIKKworIzogbWlkeC5jOjExMDgKK21zZ2lkICJMb29raW5nIGZvciByZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAixJBhbmcga2jDs2EgY2hvIGPDoWMgZ8OzaSBi4buLIHRoYW0gY2hp4bq/dSIKKworIzogbWlkeC5jOjExMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9pZCBmYW5vdXQgb3V0IG9mIG9yZGVyOiBmYW5vdXRbJWRdID0gJTxQUkl4MzI+ID4gJTxQUkl4MzI+ID0gZmFub3V0WyVkXSIKK21zZ3N0ciAiZmFub3V0IGPFqSBzYWkgdGjhu6kgdOG7sTogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCisKKyM6IG1pZHguYzoxMTI4Cittc2dpZCAiVmVyaWZ5aW5nIE9JRCBvcmRlciBpbiBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJUaOG6qW0gdHJhIHRo4bupIHThu7EgT0lEIHRyb25nIG11bHRpLXBhY2staW5kZXgiCisKKyM6IG1pZHguYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9pZCBsb29rdXAgb3V0IG9mIG9yZGVyOiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorbXNnc3RyICJsb29rdXAgY8WpIHNhaSB0aOG7qSB04buxOiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorCisjOiBtaWR4LmM6MTE1NworbXNnaWQgIlNvcnRpbmcgb2JqZWN0cyBieSBwYWNrZmlsZSIKK21zZ3N0ciAixJBhbmcgc+G6r3AgeOG6v3AgY8OhYyDEkeG7kWkgdMaw4bujbmcgdGhlbyB04bqtcCB0aW4gZ8OzaSIKKworIzogbWlkeC5jOjExNjQKK21zZ2lkICJWZXJpZnlpbmcgb2JqZWN0IG9mZnNldHMiCittc2dzdHIgIsSQYW5nIHRo4bqpbSB0cmEgY8OhYyBraG/huqNuZyBiw7kgxJHhu5FpIHTGsOG7o25nIgorCisjOiBtaWR4LmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrIGVudHJ5IGZvciBvaWRbJWRdID0gJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB04bqjaSBt4bulYyBnw7NpIGNobyBvaWRbJWRdID0gJXMiCisKKyM6IG1pZHguYzoxMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2staW5kZXggZm9yIHBhY2tmaWxlICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdOG6o2kgcGFjay1pbmRleCBjaG8gdOG6rXAgdGluIGfDs2kgJXMiCisKKyM6IG1pZHguYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImluY29ycmVjdCBvYmplY3Qgb2Zmc2V0IGZvciBvaWRbJWRdID0gJXM6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCittc2dzdHIgIiIKKyJraG/huqNuZyBiw7kgxJHhu5FpIHTGsOG7o25nIGtow7RuZyDEkcO6bmcgY2hvIG9pZFslZF0gPSAlczogJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKKworIzogbWlkeC5jOjEyMjAKK21zZ2lkICJDb3VudGluZyByZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgIsSQYW5nIMSR4bq/bSBjw6FjIMSR4buRaSB0xrDhu6NuZyDEkcaw4bujYyB0aGFtIGNoaeG6v3UiCisKKyM6IG1pZHguYzoxMjMwCittc2dpZCAiRmluZGluZyBhbmQgZGVsZXRpbmcgdW5yZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAixJBhbmcgdMOsbSB2w6AgeMOzYSBjw6FjIGfDs2kga2jDtG5nIMSRxrDhu6NjIHRoYW0gY2hp4bq/dSIKKworIzogbWlkeC5jOjEzODgKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB24buBIGPDoWMgxJHhu5FpIHTGsOG7o25nIGfDs2kiCisKKyM6IG1pZHguYzoxNDA3Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMiCittc2dzdHIgImtow7RuZyB0aOG7gyBob8OgbiB0aGnhu4duIGPDoWMgxJHhu5FpIHTGsOG7o25nIGfDs2kiCisKKyM6IG5hbWUtaGFzaC5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfZGlyIHRocmVhZDogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyB0dXnhur9uIGxhenlfZGlyOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyB0dXnhur9uIGxhenlfbmFtZTogJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsYXp5X25hbWUgdGhyZWFkOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdpYSBuaOG6rXAgdHV54bq/biBsYXp5X25hbWU6ICVzIgorCisjOiBub3Rlcy1tZXJnZS5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIHByZXZpb3VzIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLlxuIgorIlBsZWFzZSwgdXNlICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG9yICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcgdG8gIgorImNvbW1pdC9hYm9ydCB0aGUgcHJldmlvdXMgbWVyZ2UgYmVmb3JlIHlvdSBzdGFydCBhIG5ldyBub3RlcyBtZXJnZS4iCittc2dzdHIgIiIKKyJC4bqhbiDEkcOjIGNoxrBhIGhvw6BuIHThuqV0IGjDsmEgdHLhu5luIGdoaSBjaMO6IHRyxrDhu5tjIMSRw6J5ICglcyB24bqrbiBjw7JuKS5cbiIKKyJWdWkgbMOybmcgZMO5bmcg4oCcZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl04oCdIGhheSDigJxnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydOKAnSDEkeG7gyAiCisiY2h1eeG7g24gZ2lhbyBoYXkgYsOjaSBi4buPIGzhuqduIGjDsmEgdHLhu5luIHRyxrDhu5tjIMSRw6J5IHbDoCBi4bqvdCDEkeG6p3UgbeG7mXQgaMOyYSB0cuG7mW4gZ2hpICIKKyJjaMO6IG3hu5tpLiIKKworIzogbm90ZXMtbWVyZ2UuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLiIKK21zZ3N0ciAiQuG6oW4gY2jGsGEga+G6v3QgdGjDumMgdmnhu4djIGjDsmEgdHLhu5luIGdoaSBjaMO6ICglcyB24bqrbiB04buTbiB04bqhaSkuIgorCisjOiBub3Rlcy11dGlscy5jOjQ2Cittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGNodXnhu4NuIGdpYW8gY8OieSBnaGkgY2jDuiBjaMawYSDEkcaw4bujYyBraOG7n2kgdOG6oW8gaG/hurdjIGtow7RuZyDEkcaw4bujYyB0aGFtICIKKyJjaGnhur91IgorCisjOiBub3Rlcy11dGlscy5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgIkdpw6EgdHLhu4sgbm90ZXMucmV3cml0ZU1vZGUgc2FpOiDigJwlc+KAnSIKKworIzogbm90ZXMtdXRpbHMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIlThu6sgY2jhu5FpIGdoaSDEkcOoIGdoaSBjaMO6IHRyb25nICVzIChu4bqxbSBuZ2/DoGkgcmVmcy9ub3Rlcy8pIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mCisjLiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMKKyMuIGl0cyB2YWx1ZS4KKyMuCisjOiBub3Rlcy11dGlscy5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIkdpw6EgdHLhu4sgJXMgc2FpOiDigJwlc+KAnSIKKworIzogb2JqZWN0LmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSBcIiVzXCIiCittc2dzdHIgImtp4buDdSDEkeG7kWkgdMaw4bujbmcgXCIlc1wiIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBvYmplY3QuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIGEgJXMsIG5vdCBhICVzIgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgJXMgbMOgIG3hu5l0ICVzLCBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCAlcyIKKworIzogb2JqZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBoYXMgdW5rbm93biB0eXBlIGlkICVkIgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgJXMgY8OzIG3DoyBraeG7g3UgJWQgY2jGsGEgYmnhur90IgorCisjOiBvYmplY3QuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdDogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCDEkeG7kWkgdMaw4bujbmc6IOKAnCVz4oCdIgorCisjOiBvYmplY3QuYzoyNjYgb2JqZWN0LmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggJXMiCittc2dzdHIgIm3DoyBixINtIGtow7RuZyBraOG7m3AgJXMiCisKKyM6IHBhY2tmaWxlLmM6NjI5Cittc2dpZCAib2Zmc2V0IGJlZm9yZSBlbmQgb2YgcGFja2ZpbGUgKGJyb2tlbiAuaWR4PykiCittc2dzdHIgInbhu4sgdHLDrSB0xrDGoW5nIMSR4buRaSB0csaw4bubYyDEkWnhu4NtIGvhur90IHRow7pjIGPhu6dhIHThuq1wIHRpbiBnw7NpICguaWR4IGjhu49uZyDDoD8pIgorCisjOiBwYWNrZmlsZS5jOjE4OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJlZm9yZSBzdGFydCBvZiBwYWNrIGluZGV4IGZvciAlcyAoY29ycnVwdCBpbmRleD8pIgorbXNnc3RyICJ24buLIHRyw60gdMawxqFuZyDEkeG7kWkgbuG6sW0gdHLGsOG7m2MgY2jhu4kgbeG7pWMgZ8OzaSBjaG8gJXMgKG3hu6VjIGzhu6VjIGLhu4sgaOG7j25nIMOgPykiCisKKyM6IHBhY2tmaWxlLmM6MTkwMworIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmV5b25kIGVuZCBvZiBwYWNrIGluZGV4IGZvciAlcyAodHJ1bmNhdGVkIGluZGV4PykiCittc2dzdHIgIiIKKyJ24buLIHRyw60gdMawxqFuZyDEkeG7kWkgdsaw4bujdCBxdcOhIGN14buRaSBj4bunYSBjaOG7iSBt4bulYyBnw7NpIGNobyAlcyAobeG7pWMgbOG7pWMgYuG7iyBj4bqvdCBj4buldCDDoD8pIgorCisjOiBwYWNrLWJpdG1hcC5jOjgwMCBwYWNrLWJpdG1hcC5jOjgwNiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBzaXplIG9mICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkga8OtY2ggY+G7oSBj4bunYSAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIuKAnCVz4oCdIHnDqnUgY+G6p3UgbeG7mXQgZ2nDoSB0cuG7iyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGluY29tcGF0aWJsZSB3aXRoICVzIgorbXNnc3RyICIlcyBsw6AgeHVuZyBraOG6r2MgduG7m2kgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IGluY29tcGF0aWJsZSB3aXRoIHNvbWV0aGluZyBlbHNlIgorbXNnc3RyICIlcyA6IHh1bmcga2jhuq9jIHbhu5tpIGPDoWMgY8OhaSBraMOhYyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkyIHBhcnNlLW9wdGlvbnMuYzo5NiBwYXJzZS1vcHRpb25zLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRha2VzIG5vIHZhbHVlIgorbXNnc3RyICIlcyBrIG5o4bqtbiBnacOhIHRy4buLIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXNuJ3QgYXZhaWxhYmxlIgorbXNnc3RyICIlcyBraMO0bmcgc+G6tW4gY8OzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB3aXRoIGFuIG9wdGlvbmFsIGsvbS9nIHN1ZmZpeCIKK21zZ3N0ciAiJXMgY+G6p24gbeG7mXQgZ2nDoSB0cuG7iyBk4bqhbmcgc+G7kSBraMO0bmcgw6JtIHbhu5tpIG3hu5l0IGjhuq11IHThu5EgdMO5eSBjaOG7jW4gay9tL2ciCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIG9wdGlvbjogJXMgKGNvdWxkIGJlIC0tJXMlcyBvciAtLSVzJXMpIgorbXNnc3RyICJ0w7l5IGNo4buNbiBjaMawYSByw7UgcmFuZzogJXMgKG7Dqm4gbMOgIC0tJXMlcyBoYXkgLS0lcyVzKSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjQyMCBwYXJzZS1vcHRpb25zLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyk/IgorbXNnc3RyICJjw7MgcGjhuqNpIMO9IGLhuqFuIGzDoCDigJwtLSVz4oCcICh24bubaSBoYWkgZOG6pXUgZ+G6oWNoIG5nYW5nKT8iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gYCVzJyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSB0w7l5IGNo4buNbiDigJwlc+KAnSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN3aXRjaCBgJWMnIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IHTDuXkgY2jhu41uIOKAnCVj4oCdIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm9uLWFzY2lpIG9wdGlvbiBpbiBzdHJpbmc6IGAlcyciCittc2dzdHIgImtow7RuZyBoaeG7g3UgdMO5eSBjaOG7jW4gbm9uLWFzY2lpIHRyb25nIGNodeG7l2k6IOKAnCVz4oCdIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODg1Cittc2dpZCAiLi4uIgorbXNnc3RyICLigKYiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzIgorbXNnc3RyICJjw6FjaCBkw7luZzogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBwYXJzZS1vcHRpb25zLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICAgICBob+G6t2M6ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTUyCittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLVPhu5AiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgb2YgLS0lcyIKK21zZ3N0ciAiYsOtIGRhbmggY+G7p2EgLS0lcyIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjIwIHBhcnNlLW9wdGlvbnMtY2IuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJ0w7l5IGNo4buNbiDigJwlc+KAnSBj4bqnbiBt4buZdCBnacOhIHRy4buLIGLhurFuZyBz4buRIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGV4cGlyYXRpb24gZGF0ZSAnJXMnIgorbXNnc3RyICJuZ8OgeSB0aMOhbmcgaOG6v3QgaOG6oW4gZOG7iyBow6xuaCDigJwlc+KAnSIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgXCJhbHdheXNcIiwgXCJhdXRvXCIsIG9yIFwibmV2ZXJcIiIKK21zZ3N0ciAidMO5eSBjaOG7jW4g4oCcJXPigJ0gY+G6p24gXCJhbHdheXNcIiwgXCJhdXRvXCIsIGhv4bq3YyBcIm5ldmVyXCIiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoxMzAgcGFyc2Utb3B0aW9ucy1jYi5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAidMOqbiDEkeG7kWkgdMaw4bujbmcgZOG7iyBow6xuaCDigJwlc+KAnSIKKworIzogcGF0aC5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzDoG0gJXMgxJHGsOG7o2MgZ2hpIGLhu59pIG5ow7NtIgorCisjOiBwYXRoc3BlYy5jOjEzMAorbXNnaWQgIkVzY2FwZSBjaGFyYWN0ZXIgJ1xcJyBub3QgYWxsb3dlZCBhcyBsYXN0IGNoYXJhY3RlciBpbiBhdHRyIHZhbHVlIgorbXNnc3RyICIiCisiS8O9IHThu7EgdGhvw6F0IGNodeG7l2kg4oCcXFzigJ0ga2jDtG5nIMSRxrDhu6NjIHBow6lwIGzDoCBrw70gdOG7sSBjdeG7kWkgdHJvbmcgZ2nDoSB0cuG7iyB0aHXhu5ljIHTDrW5oIgorCisjOiBwYXRoc3BlYy5jOjE0OAorbXNnaWQgIk9ubHkgb25lICdhdHRyOicgc3BlY2lmaWNhdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiQ2jhu4kgY8OzIG3hu5l0IMSR4bq3YyB04bqjIOKAnGF0dHI64oCdIGzDoCDEkcaw4bujYyBwaMOpcC4iCisKKyM6IHBhdGhzcGVjLmM6MTUxCittc2dpZCAiYXR0ciBzcGVjIG11c3Qgbm90IGJlIGVtcHR5IgorbXNnc3RyICLEkeG6t2MgdOG6oyBhdHRyIHBo4bqjaSBraMO0bmcgxJHGsOG7o2MgxJHhu4MgdHLhu5FuZyIKKworIzogcGF0aHNwZWMuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUgbmFtZSAlcyIKK21zZ3N0ciAidMOqbiB0aHXhu5ljIHTDrW5oIGtow7RuZyBo4bujcCBs4buHICVzIgorCisjOiBwYXRoc3BlYy5jOjI1OQorbXNnaWQgImdsb2JhbCAnZ2xvYicgYW5kICdub2dsb2InIHBhdGhzcGVjIHNldHRpbmdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKyJjw6FjIGPDoGkgxJHhurd0IMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiDigJxnbG9i4oCdIHbDoCDigJxub2dsb2LigJ0gdG/DoG4gY+G7pWMgbMOgIHh1bmcga2jhuq9jIG5oYXUiCisKKyM6IHBhdGhzcGVjLmM6MjY2Cittc2dpZCAiIgorImdsb2JhbCAnbGl0ZXJhbCcgcGF0aHNwZWMgc2V0dGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgZ2xvYmFsICIKKyJwYXRoc3BlYyBzZXR0aW5ncyIKK21zZ3N0ciAiIgorImPDoGkgxJHhurd0IMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiDigJxsaXRlcmFs4oCdIHRvw6BuIGPhu6VjIGzDoCB4dW5nIGto4bqvYyB24bubaSBjw6FjIGPDoGkgxJHhurd0IMSR4bq3YyAiCisidOG6oyDEkcaw4budbmcgZOG6q24gdG/DoG4gY+G7pWMga2jDoWMiCisKKyM6IHBhdGhzcGVjLmM6MzA2Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICJ0aGFtIHPhu5Ega2jDtG5nIGjhu6NwIGzhu4cgY2hvIOKAnHRp4buBbiB04buR4oCdIG3DoHUgbmhp4buHbSDEkeG6t2MgdOG6oyDEkcaw4budbmcgxJHhuqtuIgorCisjOiBwYXRoc3BlYy5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIgorbXNnc3RyICJT4buRIG3DoHUgbmhp4buHbSDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24ga2jDtG5nIGjhu6NwIGzhu4cg4oCcJS4qc+KAnSB0cm9uZyDigJwlc+KAnSIKKworIzogcGF0aHNwZWMuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnKScgYXQgdGhlIGVuZCBvZiBwYXRoc3BlYyBtYWdpYyBpbiAnJXMnIgorbXNnc3RyICJUaGnhur91IOKAnCnigJ0gdOG6oWkgY3Xhu5FpIGPhu6dhIHPhu5EgbcOgdSBuaGnhu4dtIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiB0cm9uZyDigJwlc+KAnSIKKworIzogcGF0aHNwZWMuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIkNoxrBhIHZp4bq/dCBtw6MgY2hvIHPhu5EgbcOgdSBuaGnhu4dtIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiDigJwlY+KAnSB0cm9uZyDigJwlc+KAnSIKKworIzogcGF0aHNwZWMuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICdsaXRlcmFsJyBhbmQgJ2dsb2InIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiVzOiDigJxsaXRlcmFs4oCdIHbDoCDigJxnbG9i4oCdIHh1bmcga2jhuq9jIG5oYXUiCisKKyM6IHBhdGhzcGVjLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSBhdCAnJXMnIgorbXNnc3RyICIlczog4oCcJXPigJ0gbmdvw6BpIG3hu5l0IGtobyBjaOG7qWEgdOG6oWkgJyVzJyIKKworIzogcGF0aHNwZWMuYzo1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyAobW5lbW9uaWM6ICclYycpIgorbXNnc3RyICLigJwlc+KAnSAobW5lbW9uaWM6IOKAnCVj4oCdKSIKKworIzogcGF0aHNwZWMuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGhzcGVjIG1hZ2ljIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjb21tYW5kOiAlcyIKK21zZ3N0ciAiJXM6IHPhu5EgbeG6p3Ugbmhp4buHbSDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24gY2jGsGEgxJHGsOG7o2MgaOG7lyB0cuG7oyBi4bufaSBs4buHbmggbsOgeTogJXMiCisKKyM6IHBhdGhzcGVjLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAixJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIHbGsOG7o3QgcmEgbmdvw6BpIGxpw6puIGvhur90IG3hu4FtIgorCisjOiBwYXRoc3BlYy5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lIGlzIGJhZGx5IHF1b3RlZDogJXMiCittc2dzdHIgImTDsm5nIMSRxrDhu6NjIHRyw61jaCBk4bqrbiBzYWk6ICVzIgorCisjOiBwa3QtbGluZS5jOjkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4bqpeSBk4buvIGxp4buHdSBj4bunYSBnw7NpIGzDqm4gxJHEqWEiCisKKyM6IHBrdC1saW5lLmM6OTkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZGVsaW0gcGFja2V0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIGfDs2kgZGVsaW0iCisKKyM6IHBrdC1saW5lLmM6MTA2Cittc2dpZCAiZmx1c2ggcGFja2V0IHdyaXRlIGZhaWxlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGdoaSB2w6BvIHThuq1wIHRpbiBnw7NpIGzDumMgxJHhuql5IGThu68gbGnhu4d1IGzDqm4gYuG7mSBuaOG7myIKKworIzogcGt0LWxpbmUuYzoxNDYgcGt0LWxpbmUuYzoyMzIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiCittc2dzdHIgImzhu5dpIGdpYW8gdGjhu6ljOiBraMO0bmcgdGjhu4MgbMOgbSDEkcaw4bujYyBkw7JuZyBkw6BpIgorCisjOiBwa3QtbGluZS5jOjE2MiBwa3QtbGluZS5jOjE2NAorbXNnaWQgInBhY2tldCB3cml0ZSB3aXRoIGZvcm1hdCBmYWlsZWQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBnaGkgZ8OzaSBjw7MgxJHhu4tuaCBk4bqhbmciCisKKyM6IHBrdC1saW5lLmM6MTk2Cittc2dpZCAicGFja2V0IHdyaXRlIGZhaWxlZCAtIGRhdGEgZXhjZWVkcyBtYXggcGFja2V0IHNpemUiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBnaGkgZ8OzaSAtIGThu68gbGnhu4d1IHbGsOG7o3QgcXXDoSBj4buhIHbDs2kgdOG7kWkgxJFhIgorCisjOiBwa3QtbGluZS5jOjIwMyBwa3QtbGluZS5jOjIxMAorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBnaGkgZ8OzaSIKKworIzogcGt0LWxpbmUuYzoyOTUKK21zZ2lkICJyZWFkIGVycm9yIgorbXNnc3RyICJs4buXaSDEkeG7jWMiCisKKyM6IHBrdC1saW5lLmM6MzAzCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiCittc2dzdHIgIm3DoXkgY2jhu6cgYuG7iyB0cmVvIGLhuqV0IG5n4budIgorCisjOiBwa3QtbGluZS5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIGxpbmUgbGVuZ3RoIGNoYXJhY3RlcjogJS40cyIKK21zZ3N0ciAibOG7l2kgZ2lhbyB0aOG7qWM6IGvDvSB04buxIGNoaeG7gXUgZMOgaSBkw7JuZyBi4buLIHNhaTogJS40cyIKKworIzogcGt0LWxpbmUuYzozNDEgcGt0LWxpbmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCAlZCIKK21zZ3N0ciAibOG7l2kgZ2lhbyB0aOG7qWM6IGNoaeG7gXUgZMOgaSBkw7JuZyBi4buLIHNhaSAlZCIKKworIzogcGt0LWxpbmUuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAibOG7l2kgbcOheSBjaOG7pzogJXMiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMTkKK21zZ2lkICJSZWZyZXNoaW5nIGluZGV4IgorbXNnc3RyICJMw6BtIG3hu5tpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogcHJlbG9hZC1pbmRleC5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZGVkIGxzdGF0OiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIHR1eeG6v24gdHLDrG5oIGxzdGF0OiAlcyIKKworIzogcHJldHR5LmM6OTgxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIC0tcHJldHR5IGZvcm1hdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIMSR4buLbmggZOG6oW5nIC0tcHJldHR5IgorCisjOiBwcm9taXNvci1yZW1vdGUuYzoyMworbXNnaWQgIlJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiTcOheSBjaOG7pyBraMO0bmcgY8OzIMSR4buLYSBjaOG7iSBVUkwiCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21pc29yIHJlbW90ZSBuYW1lIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgInTDqm4gbcOheSBjaOG7pyBo4bupYSBo4bq5biBraMO0bmcgdGjhu4MgYuG6r3QgxJHhuqd1IGLhurFuZyAnLyc6ICVzIgorCisjOiByYW5nZS1kaWZmLmM6NzUKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgYGxvZ2AiCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aMO0bmcgdGluIHRo4buRbmcga8OqIHbhu4Eg4oCcbG9n4oCcIgorCisjOiByYW5nZS1kaWZmLmM6NzcKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBgbG9nYCBvdXRwdXQiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMga+G6v3QgeHXhuqV0IOKAnGxvZ+KAnSIKKworIzogcmFuZ2UtZGlmZi5jOjk2IHNlcXVlbmNlci5jOjUwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggbOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnSIKKworIzogcmFuZ2UtZGlmZi5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZ2l0IGhlYWRlciAnJS4qcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjw7ogcGjDoXAgcGjhuqduIMSR4bqndSBnaXQg4oCcJS4qc+KAnSIKKworIzogcmFuZ2UtZGlmZi5jOjI4NQorbXNnaWQgImZhaWxlZCB0byBnZW5lcmF0ZSBkaWZmIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdOG6oW8ga2jDoWMgYmnhu4d0IgorCisjOiByYW5nZS1kaWZmLmM6NTE4IHJhbmdlLWRpZmYuYzo1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGxvZyBmb3IgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIG5o4bqtdCBrw70gY2hvIOKAnCVz4oCdIgorCisjOiByZWFkLWNhY2hlLmM6NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IGFkZCBmaWxlIGFsaWFzICclcycgKCclcycgYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgpIgorbXNnc3RyICIiCisic+G6vSBraMO0bmcgdGjDqm0gY8OhYyBiw60gZGFuaCDigJwlc+KAnSAo4oCcJXPigJ0gxJHDoyBjw7MgdOG7qyB0csaw4bubYyB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMpIgorCisjOiByZWFkLWNhY2hlLmM6Njk2Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBhbiBlbXB0eSBibG9iIGluIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyBt4buZdCBibG9iIHLhu5duZyB0cm9uZyBjxqEgc+G7nyBk4buvIGxp4buHdSDEkeG7kWkgdMaw4bujbmciCisKKyM6IHJlYWQtY2FjaGUuYzo3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbiBvbmx5IGFkZCByZWd1bGFyIGZpbGVzLCBzeW1ib2xpYyBsaW5rcyBvciBnaXQtZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKyIlczogY2jhu4kgY8OzIHRo4buDIHRow6ptIHThuq1wIHRpbiB0aMO0bmcgdGjGsOG7nW5nLCBsacOqbiBr4bq/dCBt4buBbSBob+G6t2MgZ2l0LWRpcmVjdG9yaWVzIgorCisjOiByZWFkLWNhY2hlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIGPDsyBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIG7DoG8gxJHGsOG7o2MgbOG6pXkgcmEiCisKKyM6IHJlYWQtY2FjaGUuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGluZGV4IGZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSRw6FuaCBt4bulYyBs4bulYyB04bqtcCB0aW4g4oCcJXPigJ0iCisKKyM6IHJlYWQtY2FjaGUuYzo3OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCAnJXMnIHRvIGluZGV4IgorbXNnc3RyICJraMO0bmcgdGjhu4MgdGjDqm0gJXMgdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IHJlYWQtY2FjaGUuYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRo4buRbmcga8OqIOKAnCVz4oCdIgorCisjOiByZWFkLWNhY2hlLmM6MTMzMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFwcGVhcnMgYXMgYm90aCBhIGZpbGUgYW5kIGFzIGEgZGlyZWN0b3J5IgorbXNnc3RyICIlcyBjw7MgduG6uyBraMO0bmcgcGjhuqNpIGzDoCB04bqtcCB0aW4gdsOgIGPFqW5nIGNo4bqzbmcgcGjhuqNpIGzDoCBt4buZdCB0aMawIG3hu6VjIgorCisjOiByZWFkLWNhY2hlLmM6MTUzNgorbXNnaWQgIlJlZnJlc2ggaW5kZXgiCittc2dzdHIgIkzDoG0gdMawxqFpIG3hu5tpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogcmVhZC1jYWNoZS5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorImluZGV4LnZlcnNpb24gxJHGsOG7o2MgxJHhurd0LCBuaMawbmcgZ2nDoSB0cuG7iyBj4bunYSBuw7MgbOG6oWkga2jDtG5nIGjhu6NwIGzhu4cuXG4iCisiRMO5bmcgcGhpw6puIGLhuqNuICVpIgorCisjOiByZWFkLWNhY2hlLmM6MTY2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR0lUX0lOREVYX1ZFUlNJT04gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIMSRxrDhu6NjIMSR4bq3dCwgbmjGsG5nIGdpw6EgdHLhu4sgY+G7p2EgbsOzIGzhuqFpIGtow7RuZyBo4bujcCBs4buHLlxuIgorIkTDuW5nIHBoacOqbiBi4bqjbiAlaSIKKworIzogcmVhZC1jYWNoZS5jOjE3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgImNo4buvIGvDvSBzYWkgMHglMDh4IgorCisjOiByZWFkLWNhY2hlLmM6MTcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAlZCIKK21zZ3N0ciAicGhpw6puIGLhuqNuIG3hu6VjIGzhu6VjIHNhaSAlZCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjkKK21zZ2lkICJiYWQgaW5kZXggZmlsZSBzaGExIHNpZ25hdHVyZSIKK21zZ3N0ciAiY2jhu68ga8O9IGThuqFuZyBzaGExIGNobyB04bqtcCB0aW4gbeG7pWMgbOG7pWMga2jDtG5nIMSRw7puZyIKKworIzogcmVhZC1jYWNoZS5jOjE3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggdXNlcyAlLjRzIGV4dGVuc2lvbiwgd2hpY2ggd2UgZG8gbm90IHVuZGVyc3RhbmQiCittc2dzdHIgIm3hu6VjIGzhu6VjIGTDuW5nIHBo4bqnbiBt4bufIHLhu5luZyAlLjRzLCBjw6FpIG3DoCBjaMO6bmcgdMO0aSBraMO0bmcgaGnhu4N1IMSRxrDhu6NjIgorCisjOiByZWFkLWNhY2hlLmM6MTc2MQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlLjRzIGV4dGVuc2lvbiIKK21zZ3N0ciAixJFhbmcgbOG7nSDEkWkgcGjhuqduIG3hu58gcuG7mW5nICUuNHMiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW5kZXggZW50cnkgZm9ybWF0IDB4JTA4eCIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSDEkeG7i25oIGThuqFuZyBt4bulYyBs4bulYyAweCUwOHgiCisKKyM6IHJlYWQtY2FjaGUuYzoxODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBuYW1lIGZpZWxkIGluIHRoZSBpbmRleCwgbmVhciBwYXRoICclcyciCittc2dzdHIgInRyxrDhu51uZyB0w6puIHNhaSBz4bqhbmcgdHJvbmcgbeG7pWMgbOG7pWMsIGfhuqduIMSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSIKKworIzogcmVhZC1jYWNoZS5jOjE4NzEKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBpbiBpbmRleCIKK21zZ3N0ciAiY8OhYyBt4bulYyB0aW4gc3RhZ2Uga2jDtG5nIMSRw7puZyB0aOG7qSB04buxIHRyb25nIG3hu6VjIGzhu6VjIgorCisjOiByZWFkLWNhY2hlLmM6MTg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBzdGFnZSBlbnRyaWVzIGZvciBtZXJnZWQgZmlsZSAnJXMnIgorbXNnc3RyICJuaGnhu4F1IG3hu6VjIHN0YWdlIGNobyB04bqtcCB0aW4gaMOyYSB0cuG7mW4g4oCcJXPigJ0iCisKKyM6IHJlYWQtY2FjaGUuYzoxODc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGZvciAnJXMnIgorbXNnc3RyICJjw6FjIG3hu6VjIHRpbiBzdGFnZSBraMO0bmcgxJHDum5nIHRo4bupIHThu7EgY2hvIOKAnCVz4oCdIgorCisjOiByZWFkLWNhY2hlLmM6MTk4MyByZWFkLWNhY2hlLmM6MjI3MSByZXJlcmUuYzo1NjUgcmVyZXJlLmM6NTk5IHJlcmVyZS5jOjExMTEKKyM6IHN1Ym1vZHVsZS5jOjE2MTkgYnVpbHRpbi9hZGQuYzo1MzIgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxODEKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NzAgYnVpbHRpbi9jaGVja291dC5jOjY1NiBidWlsdGluL2NsZWFuLmM6OTY3CisjOiBidWlsdGluL2NvbW1pdC5jOjM2NyBidWlsdGluL2RpZmYtdHJlZS5jOjEyMCBidWlsdGluL2dyZXAuYzo0ODUKKyM6IGJ1aWx0aW4vbXYuYzoxNDUgYnVpbHRpbi9yZXNldC5jOjI0NiBidWlsdGluL3JtLmM6MjkwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzMyCittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICJ04bqtcCB0aW4gZ2hpIGLhuqNuZyBt4bulYyBs4bulYyBi4buLIGjhu49uZyIKKworIzogcmVhZC1jYWNoZS5jOjIxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2NhY2hlX2VudHJpZXMgdGhyZWFkOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIHR1eeG6v24gbG9hZF9jYWNoZV9lbnRyaWVzOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaWEgbmjhuq1wIHR1eeG6v24gbG9hZF9jYWNoZV9lbnRyaWVzOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgb3BlbiBmYWlsZWQiCittc2dzdHIgIiVzOiBt4bufIHThuq1wIHRpbiBt4bulYyBs4bulYyBn4bq3cCBs4buXaSIKKworIzogcmVhZC1jYWNoZS5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4IgorbXNnc3RyICIlczoga2jDtG5nIHRo4buDIGzhuqV5IHRo4buRbmcga8OqIGLhuqNuZyBt4bulYyBs4bulYyDEkcOjIG3hu58iCisKKyM6IHJlYWQtY2FjaGUuYzoyMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiJXM6IHThuq1wIHRpbiBt4bulYyBs4bulYyBuaOG7jyBoxqFuIG1vbmcgxJHhu6NpIgorCisjOiByZWFkLWNhY2hlLmM6MjE4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5hYmxlIHRvIG1hcCBpbmRleCBmaWxlIgorbXNnc3RyICIlczoga2jDtG5nIHRo4buDIMOhbmggeOG6oSB04bqtcCB0aW4gbeG7pWMgbOG7pWMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyB0dXnhur9uIGxvYWRfaW5kZXhfZXh0ZW5zaW9uczogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2lhIG5o4bqtcCB0dXnhur9uIGxvYWRfaW5kZXhfZXh0ZW5zaW9uczogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmcmVzaGVuIHNoYXJlZCBpbmRleCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbMOgbSB0xrDGoWkgbeG7m2kgbeG7pWMgbOG7pWMgxJHDoyBjaGlhIHPhursg4oCcJXPigJ0iCisKKyM6IHJlYWQtY2FjaGUuYzoyMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiCittc2dzdHIgIm3hu6VjIGzhu6VjIGLhu4sgaOG7j25nLCBj4bqnbiAlcyB0cm9uZyAlcywgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMwMjYgc3RyYnVmLmM6MTE2MCB3cmFwcGVyLmM6NjIyIGJ1aWx0aW4vbWVyZ2UuYzoxMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHDs25nIOKAnCVz4oCdIgorCisjOiByZWFkLWNhY2hlLmM6MzEyOSBzZXF1ZW5jZXIuYzoyMzQzIHNlcXVlbmNlci5jOjM5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogduG7gSDigJwlc+KAnSIKKworIzogcmVhZC1jYWNoZS5jOjMxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gZ2l0IGRpcjogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIHRoxrAgbeG7pWMgZ2l0OiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVubGluazogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBi4buPIGxpw6puIGvhur90ICh1bmxpbmspOiDigJwlc+KAnSIKKworIzogcmVhZC1jYWNoZS5jOjMxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpeCBwZXJtaXNzaW9uIGJpdHMgb24gJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHPhu61hIGPDoWMgYsOtdCBwaMOibiBxdXnhu4FuIHRyw6puIOKAnCVz4oCdIgorCisjOiByZWFkLWNhY2hlLmM6MzMyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IGRyb3AgdG8gc3RhZ2UgIzAiCittc2dzdHIgIiVzOiBraMO0bmcgdGjhu4MgeMOzYSBi4buPIHN0YWdlICMwIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMQorbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGlzIHdpdGggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZScuXG4iCisiT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCittc2dzdHIgIiIKKyJC4bqhbiBjw7MgdGjhu4Mgc+G7rWEgbsOzIGLhurFuZyDigJxnaXQgcmViYXNlIC0tZWRpdC10b2Rv4oCdIHbDoCBzYXUgxJHDsyBjaOG6oXkg4oCcZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZeKAnS5cbiIKKyJIb+G6t2MgbMOgIGLhuqFuIGPDsyB0aOG7gyBiw6NpIGLhu48gdmnhu4djIGPhuqNpIHThu5UgYuG6sW5nIOKAnGdpdCByZWJhc2UgLS1hYm9ydOKAnS5cbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVucmVjb2duaXplZCBzZXR0aW5nICVzIGZvciBvcHRpb24gcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suIElnbm9yaW5nLiIKK21zZ3N0ciAiIgorImtow7RuZyBuaOG6rW4gcmEgY8OgaSDEkeG6t3QgJXMgY2hvIHTDuXkgY2jhu41uIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiBOw6puIGLhu48gcXVhLiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NDIKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1hbmQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImIsIGJyZWFrID0gc3RvcCBoZXJlIChjb250aW51ZSByZWJhc2UgbGF0ZXIgd2l0aCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJylcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJDw6FjIGzhu4duaDpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gZMO5bmcgbOG6p24gY2h1eeG7g24gZ2lhb1xuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IGTDuW5nIGzhuqduIGNodXnhu4NuIGdpYW8sIG5oxrBuZyBz4butYSBs4bqhaSBwaOG6p24gY2jDuiB0aMOtY2hcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gZMO5bmcgbOG6p24gY2h1eeG7g24gZ2lhbywgbmjGsG5nIGThu6tuZyBs4bqhaSDEkeG7gyB0dSBi4buVIChhbWVuZClcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSBkw7luZyBs4bqnbiBjaHV54buDbiBnaWFvLCBuaMawbmcgbWVsZCB2w6BvIGzhuqduIGNodXnhu4NuIGdpYW8ga+G6vyAiCisidHLGsOG7m2NcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGdp4buRbmcgbmjGsCBcInNxdWFzaFwiLCBuaMawbmcgbG/huqFpIGLhu48gY2jDuiB0aMOtY2ggbmjhuq10IGvDvSAiCisiY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6B5XG4iCisieCwgZXhlYyA8Y29tbWl0PiA9IGNo4bqheSBs4buHbmggKHBo4bqnbiBjw7JuIGzhuqFpIGPhu6dhIGTDsm5nKSBkw7luZyBo4buHIHbhu49cbiIKKyJiLCBicmVhayA9IGThu6tuZyB04bqhaSDEkcOieSAodGnhur9wIHThu6VjIGPhuqNpIHThu5Ugc2F1IG7DoHkgYuG6sW5nIOKAnGdpdCByZWJhc2UgLS0iCisiY29udGludWXigJ0pXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHjDs2EgbOG6p24gY2h1eeG7g24gZ2lhb1xuIgorImwsIGxhYmVsIDxsYWJlbD4gPSDEkcOhbmggbmjDo24gSEVBRCBoaeG7h24gdOG6oWkgYuG6sW5nIG3hu5l0IHTDqm5cbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gxJHhurd0IGzhuqFpIEhFQUQgdGjDoG5oIG3hu5l0IG5ow6NuXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxuaMOjbj4gWyMgPG3hu5l0X2TDsm5nPl1cbiIKKyIuICAgICAgIHThuqFvIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gaMOyYSB0cuG7mW4gc+G7rSBk4bulbmcgY2jDuiB0aMOtY2ggY+G7p2EgbOG6p24gY2h1eeG7g25cbiIKKyIuICAgICAgIGdpYW8gaMOyYSB0cuG7mW4gZ+G7kWMgKGhv4bq3YyBt4buZdF9kw7JuZywgbuG6v3Uga2jDtG5nIGNo4buJIMSR4buLbmggbOG6p24gY2h1eeG7g24gZ2lhbyAiCisiaMOyYVxuIgorIi4gICAgICAgdHLhu5luIGfhu5FjKS4gRMO5bmcgLWMgPGNvbW1pdD4gxJHhu4MgcmV3b3JkIGNow7ogdGjDrWNoIGPhu6dhIGzhuqduIGNodXnhu4NuICIKKyJnaWFvLlxuIgorIlxuIgorIk5o4buvbmcgZMOybmcgbsOgeSBjw7MgdGjhu4MgxJHhuqNvIG5nxrDhu6NjIHRo4bupIHThu7E7IGNow7puZyBjaOG6oXkgdOG7qyB0csOqbiDEkeG7iW5oIHh14buRbmcgZMaw4bubaSAiCisixJHDoXkuXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmRzKSIKK21zZ3N0clswXSAiQ+G6o2kgdOG7lSAlcyB2w6BvICVzICglZCBs4buHbmggKSIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzIgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIyOAorbXNnaWQgIiIKKyJcbiIKKyJEbyBub3QgcmVtb3ZlIGFueSBsaW5lLiBVc2UgJ2Ryb3AnIGV4cGxpY2l0bHkgdG8gcmVtb3ZlIGEgY29tbWl0LlxuIgorbXNnc3RyICIiCisiXG4iCisixJDhu6tuZyB4w7NhIGLhuqV0IGvhu7MgZMOybmcgbsOgby4gRMO5bmcg4oCcZHJvcOKAnSBt4buZdCBjw6FjaCByw7UgcsOgbmcgxJHhu4MgeMOzYSBi4buPIG3hu5l0IGzhuqduICIKKyJjaHV54buDbiBnaWFvLlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo3NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjMyCittc2dpZCAiIgorIlxuIgorIklmIHlvdSByZW1vdmUgYSBsaW5lIGhlcmUgVEhBVCBDT01NSVQgV0lMTCBCRSBMT1NULlxuIgorbXNnc3RyICIiCisiXG4iCisiTuG6v3UgYuG6oW4geMOzYSBi4buPIG3hu5l0IGTDsm5nIOG7nyDEkcOieSB0aMOsIEzhuqZOIENIVVnhu4JOIEdJQU8gxJDDkyBT4bq8IE3huqRULlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4MSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODcxCittc2dpZCAiIgorIlxuIgorIllvdSBhcmUgZWRpdGluZyB0aGUgdG9kbyBmaWxlIG9mIGFuIG9uZ29pbmcgaW50ZXJhY3RpdmUgcmViYXNlLlxuIgorIlRvIGNvbnRpbnVlIHJlYmFzZSBhZnRlciBlZGl0aW5nLCBydW46XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQuG6oW4gxJFhbmcgc+G7rWEgdOG6rXAgdGluIHRvZG8gY+G7p2EgbeG7mXQgbOG6p24gY+G6o2kgdOG7lSB0xrDGoW5nIHTDoWMgxJFhbmcgdGjhu7FjIGhp4buHbi5cbiIKKyLEkOG7gyB0aeG6v3AgdOG7pWMgY+G6o2kgdOG7lSBzYXUga2hpIHPhu61hLCBjaOG6oXk6XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4NiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTQ4Cittc2dpZCAiIgorIlxuIgorIkhvd2V2ZXIsIGlmIHlvdSByZW1vdmUgZXZlcnl0aGluZywgdGhlIHJlYmFzZSB3aWxsIGJlIGFib3J0ZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJUdXkgbmhpw6puLCBu4bq/dSBi4bqhbiB4w7NhIGLhu48gbeG7jWkgdGjhu6ksIHZp4buHYyBj4bqjaSB04buVIHPhur0gYuG7iyBiw6NpIGLhu48uXG4iCisiXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjExMCByZXJlcmUuYzo0ODUgcmVyZXJlLmM6NjkyIHNlcXVlbmNlci5jOjM0NDQKKyM6IHNlcXVlbmNlci5jOjM0NzAgc2VxdWVuY2VyLmM6NTEyNSBidWlsdGluL2ZzY2suYzozNDYgYnVpbHRpbi9yZWJhc2UuYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkg4oCcJXPigJ0iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjExNiBidWlsdGluL3JlYmFzZS5jOjE4NCBidWlsdGluL3JlYmFzZS5jOjIxMAorIzogYnVpbHRpbi9yZWJhc2UuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlICclcycuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIOKAnCVz4oCdLiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS5cbiIKKyJEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKTpcbiIKK21zZ3N0ciAiIgorIkPhuqNuaCBiw6FvOiBt4buZdCBz4buRIGzhuqduIGNodXnhu4NuIGdpYW8gY8OzIGzhur0gxJHDoyBi4buLIHjDs2EgbeG7mXQgY8OhY2ggdMOsbmggY+G7nS5cbiIKKyJDw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gYuG7iyB4w7NhICh04burIG3hu5tpIMSR4bq/biBjxakpOlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIGF2b2lkIHRoaXMgbWVzc2FnZSwgdXNlIFwiZHJvcFwiIHRvIGV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LlxuIgorIlxuIgorIlVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiAiCisid2FybmluZ3MuXG4iCisiVGhlIHBvc3NpYmxlIGJlaGF2aW91cnMgYXJlOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuIgorIlxuIgorbXNnc3RyICIiCisixJDhu4MgdHLDoW5oIHRow7RuZyBiw6FvIG7DoHksIGTDuW5nIFwiZHJvcFwiIG3hu5l0IGPDoWNoIHLDtSByw6BuZyDEkeG7gyB4w7NhIGLhu48gbeG7mXQgbOG6p24gIgorImNodXnhu4NuIGdpYW8uXG4iCisiXG4iCisiRMO5bmcg4oCcZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVja+KAnSDEkeG7gyB0aGF5IMSR4buVaSBt4bupYyDEkeG7mSBj4bunYSBj4bqjbmggIgorImLDoW8uXG4iCisiQ8Ohbmgg4bupbmcgeOG7rSBjw7MgdGjhu4MgbMOgOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuIgorIlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoyMzMgcmViYXNlLWludGVyYWN0aXZlLmM6MjM4IHNlcXVlbmNlci5jOjIyNjIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTcwIGJ1aWx0aW4vcmViYXNlLmM6MTk1IGJ1aWx0aW4vcmViYXNlLmM6MjIxCisjOiBidWlsdGluL3JlYmFzZS5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnLiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyDigJwlc+KAnS4iCisKKyM6IHJlZnMuYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QhIgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgY2jhu4kgxJHhur9uIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gaOG7o3AgbOG7hyBuw6BvIGPhuqMhIgorCisjOiByZWZzLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGRhbmdsaW5nIHN5bXJlZiAlcyIKK21zZ3N0ciAixJFhbmcgbOG7nSDEkWkgdGhhbSBjaGnhur91IG3hu4FtIHRo4burYSAlcyIKKworIzogcmVmcy5jOjY2OSByZWYtZmlsdGVyLmM6MjA5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBicm9rZW4gcmVmICVzIgorbXNnc3RyICLEkWFuZyBs4budIMSRaSB0aGFtIGNoaeG6v3UgaOG7j25nICVzIgorCisjOiByZWZzLmM6ODA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyDigJwlc+KAnSDEkeG7gyBnaGk6ICVzIgorCisjOiByZWZzLmM6ODE0IHJlZnMuYzo4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgdGhhbSBjaGnhur91IOKAnCVz4oCdIgorCisjOiByZWZzLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJ0aGFtIGNoaeG6v3Ug4oCcJXPigJ0gxJHDoyBjw7MgdOG7qyB0csaw4bubYyBy4buTaSIKKworIzogcmVmcy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG9iamVjdCBJRCB3aGVuIHdyaXRpbmcgJyVzJyIKK21zZ3N0ciAia2jDtG5nIGPhuqduIElEIMSR4buRaSB0xrDhu6NuZyBraGkgZ2hpIOKAnCVz4oCdIgorCisjOiByZWZzLmM6ODMzIHNlcXVlbmNlci5jOjQwNyBzZXF1ZW5jZXIuYzoyNzAxIHNlcXVlbmNlci5jOjI5MDUKKyM6IHNlcXVlbmNlci5jOjI5MTkgc2VxdWVuY2VyLmM6MzE3NyBzZXF1ZW5jZXIuYzo1MDM2IHN0cmJ1Zi5jOjExNTcKKyM6IHdyYXBwZXIuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgdsOgbyDigJwlc+KAnSIKKworIzogcmVmcy5jOjg2MCBzdHJidWYuYzoxMTU1IHdyYXBwZXIuYzoxODggd3JhcHBlci5jOjM1OCBidWlsdGluL2FtLmM6NzE5CisjOiBidWlsdGluL3JlYmFzZS5jOjEwMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58g4oCcJXPigJ0gxJHhu4MgZ2hpIgorCisjOiByZWZzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gZGVsZXRpbmcgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgSUQgxJHhu5FpIHTGsOG7o25nIGtow7RuZyBj4bqnbiBraGkgeMOzYSDigJwlc+KAnSIKKworIzogcmVmcy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyBoYXMgZ2FwIGFmdGVyICVzIgorbXNnc3RyICJuaOG6rXQga8O9IGNobyB0aGFtIGNoaeG6v3UgJXMgY8OzIGtob+G6o25nIHRy4buRbmcgc2F1ICVzIgorCisjOiByZWZzLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyB1bmV4cGVjdGVkbHkgZW5kZWQgb24gJXMiCittc2dzdHIgIm5o4bqtdCBrw70gY2hvIHRoYW0gY2hp4bq/dSAlcyBr4bq/dCB0aMO6YyBi4bqldCBuZ+G7nSB0csOqbiAlcyIKKworIzogcmVmcy5jOjEwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciAlcyBpcyBlbXB0eSIKK21zZ3N0ciAibmjhuq10IGvDvSBjaG8gJXMgdHLhu5FuZyBy4buXbmciCisKKyM6IHJlZnMuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIHVwZGF0ZSByZWYgd2l0aCBiYWQgbmFtZSAnJXMnIgorbXNnc3RyICJ04burIGNo4buRaSBj4bqtcCBuaOG6rXQgdGhhbSBjaGnhur91IHbhu5tpIHTDqm4gc2FpIOKAnCVz4oCdIgorCisjOiByZWZzLmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cGRhdGVfcmVmIGZhaWxlZCBmb3IgcmVmICclcyc6ICVzIgorbXNnc3RyICJ1cGRhdGVfcmVmIGLhu4sgbOG7l2kgY2hvIHJlZiDigJwlc+KAnTogJXMiCisKKyM6IHJlZnMuYzoyMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICJraMO0bmcgY2hvIHBow6lwIMSRYSBj4bqtcCBuaOG6rXQgY2hvIHRoYW0gY2hp4bq/dSDigJwlc+KAnSIKKworIzogcmVmcy5jOjIwNTUKK21zZ2lkICJyZWYgdXBkYXRlcyBmb3JiaWRkZW4gaW5zaWRlIHF1YXJhbnRpbmUgZW52aXJvbm1lbnQiCittc2dzdHIgImPhuq1wIG5o4bqtdCB0aGFtIGNoaeG6v3UgYuG7iyBj4bqlbSB0cm9uZyBtw7RpIHRyxrDhu51uZyBraeG7g20gdHJhIgorCisjOiByZWZzLmM6MjE1MSByZWZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICLigJwlc+KAnSBz4bq1biBjw7M7IGtow7RuZyB0aOG7gyB04bqhbyDigJwlc+KAnSIKKworIzogcmVmcy5jOjIxNTcgcmVmcy5jOjIxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHByb2Nlc3MgJyVzJyBhbmQgJyVzJyBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICJraMO0bmcgdGjhu4MgeOG7rSBsw70g4oCcJXPigJ0gdsOgIOKAnCVz4oCdIGPDuW5nIG3hu5l0IGzDumMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBn4buhIGLhu48gdGhhbSBjaGnhur91OiAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI0NyByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU0MQorIzogcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgeMOzYSBi4buPIHRoYW0gY2hp4bq/dSAlczogJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNTAgcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHjDs2EgYuG7jyB0aGFtIGNoaeG6v3U6ICVzIgorCisjOiByZWZzcGVjLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmc3BlYyAnJXMnIgorbXNnc3RyICJyZWZzcGVjIGtow7RuZyBo4bujcCBs4buHIOKAnCVz4oCdIgorCisjOiByZWYtZmlsdGVyLmM6NDIgd3Qtc3RhdHVzLmM6MTkzOAorbXNnaWQgImdvbmUiCittc2dzdHIgIsSRw6MgcmEgxJFpIgorCisjOiByZWYtZmlsdGVyLmM6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQiCittc2dzdHIgInBow61hIHRyxrDhu5tjICVkIgorCisjOiByZWYtZmlsdGVyLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmVoaW5kICVkIgorbXNnc3RyICLEkeG6sW5nIHNhdSAlZCIKKworIzogcmVmLWZpbHRlci5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWQiCittc2dzdHIgInRyxrDhu5tjICVkLCBzYXUgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShjb2xvcjo8Y29sb3I+KSIKK21zZ3N0ciAiY+G6p24gxJHhu4tuaCBk4bqhbmc6ICUlKGNvbG9yOjxjb2xvcj4pIgorCisjOiByZWYtZmlsdGVyLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBjb2xvcjogJSUoY29sb3I6JXMpIgorbXNnc3RyICJraMO0bmcgbmjhuq1uIHJhIG3DoHU6ICUlKG3DoHU6JXMpIgorCisjOiByZWYtZmlsdGVyLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpsc3RyaXA9JXMiCittc2dzdHIgIkdpw6EgdHLhu4sgbmd1ecOqbiBj4bqnbiB0w6puIHRoYW0gY2hp4bq/dTpsc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOnJzdHJpcD0lcyIKK21zZ3N0ciAiR2nDoSB0cuG7iyBuZ3V5w6puIGPhuqduIHTDqm4gdGhhbSBjaGnhur91OnJzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoJXMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAixJHhu5FpIHPhu5Ega2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW4gJSUoJXMpOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShvYmplY3R0eXBlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUob2JqZWN0dHlwZSkga2jDtG5nIG5o4bqtbiBjw6FjIMSR4buRaSBz4buRIgorCisjOiByZWYtZmlsdGVyLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RzaXplKSBhcmd1bWVudDogJXMiCittc2dzdHIgInRoYW0gc+G7kSBraMO0bmcgxJHGsOG7o2MgdGjhu6thIG5o4bqtbiAlJShvYmplY3RuYW1lKTogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoZGVsdGFiYXNlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoZGVsdGFiYXNlKSBraMO0bmcgbmjhuq1uIGPDoWMgxJHhu5FpIHPhu5EiCisKKyM6IHJlZi1maWx0ZXIuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoYm9keSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGJvZHkpIGtow7RuZyBuaOG6rW4gY8OhYyDEkeG7kWkgc+G7kSIKKworIzogcmVmLWZpbHRlci5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlJShzdWJqZWN0KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoc3ViamVjdCkga2jDtG5nIG5o4bqtbiBjw6FjIMSR4buRaSBz4buRIgorCisjOiByZWYtZmlsdGVyLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gJSUodHJhaWxlcnMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSB0aGFtIHPhu5EgJSUodHJhaWxlcnMpOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAiY+G6p24gbuG7mWkgZHVuZyBtYW5nIGdpw6EgdHLhu4sgZMawxqFuZzpsaW5lcz0lcyIKKworIzogcmVmLWZpbHRlci5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoY29udGVudHMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAixJHhu5FpIHPhu5Ega2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW4gJSUoY29udGVudHMpOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBvYmplY3RuYW1lOnNob3J0PSVzIgorbXNnc3RyICJj4bqnbiBu4buZaSBkdW5nIG1hbmcgZ2nDoSB0cuG7iyBkxrDGoW5nOnNob3Q9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdG5hbWUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAixJHhu5FpIHPhu5Ega2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW4gJSUob2JqZWN0bmFtZSk6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoYWxpZ246PHdpZHRoPiw8cG9zaXRpb24+KSIKK21zZ3N0ciAiY+G6p24gxJHhu4tuaCBk4bqhbmc6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCisKKyM6IHJlZi1maWx0ZXIuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBvc2l0aW9uOiVzIgorbXNnc3RyICJ24buLIHRyw60ga2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW46JXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdpZHRoOiVzIgorbXNnc3RyICJjaGnhu4F1IHLhu5luZyBraMO0bmcgxJHGsOG7o2MgdGjhu6thIG5o4bqtbjolcyIKKworIzogcmVmLWZpbHRlci5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoYWxpZ24pIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAixJHhu5FpIHPhu5Ega2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW4gJSUoYWxpZ24pOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB3aWR0aCBleHBlY3RlZCB3aXRoIHRoZSAlJShhbGlnbikgYXRvbSIKK21zZ3N0ciAiY+G6p24gZ2nDoSB0cuG7iyDEkeG7mSBy4buZbmcgZMawxqFuZyB24bubaSBuZ3V5w6puIHThu60gJSUoYWxpZ24pIgorCisjOiByZWYtZmlsdGVyLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShpZikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLEkeG7kWkgc+G7kSBraMO0bmcgxJHGsOG7o2MgdGjhu6thIG5o4bqtbiAlJShpZik6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICJ0w6puIHRyxrDhu51uZyBk4buLIGjDrG5oOiAlLipzIgorCisjOiByZWYtZmlsdGVyLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSB0w6puIHRyxrDhu51uZzogJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnksIGJ1dCB0aGUgZmllbGQgJyUuKnMnIHJlcXVpcmVzIGFjY2VzcyB0byBvYmplY3QgZGF0YSIKK21zZ3N0ciAiIgorImtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGtobyBnaXQsIG5oxrBuZyB0csaw4budbmcg4oCcJS4qc+KAnSB5w6p1IGPhuqd1IHRydXkgY+G6rXAgdsOgbyBk4buvIGxp4buHdSAiCisixJHhu5FpIHTGsOG7o25nIgorCisjOiByZWYtZmlsdGVyLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoaWYpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAixJHhu4tuaCBk4bqhbmc6IG5ndXnDqm4gdOG7rSAlJShpZikgxJHGsOG7o2MgZMO5bmcgbcOgIGtow7RuZyBjw7Mgbmd1ecOqbiB04butICUlKHRoZW4pIgorCisjOiByZWYtZmlsdGVyLmM6Nzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgIsSR4buLbmggZOG6oW5nOiBuZ3V5w6puIHThu60gJSUodGhlbikgxJHGsOG7o2MgZMO5bmcgbcOgIGtow7RuZyBjw7Mgbmd1ecOqbiB04butICUlKGlmKSIKKworIzogcmVmLWZpbHRlci5jOjc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAixJHhu4tuaCBk4bqhbmc6IG5ndXnDqm4gdOG7rSAlJSh0aGVuKSDEkcaw4bujYyBkw7luZyBuaGnhu4F1IGjGoW4gbeG7mXQgbOG6p24iCisKKyM6IHJlZi1maWx0ZXIuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgYWZ0ZXIgJSUoZWxzZSkiCittc2dzdHIgIsSR4buLbmggZOG6oW5nOiBuZ3V5w6puIHThu60gJSUodGhlbikgxJHGsOG7o2MgZMO5bmcgc2F1ICUlKGVsc2UpIgorCisjOiByZWYtZmlsdGVyLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgIsSR4buLbmggZOG6oW5nOiBuZ3V5w6puIHThu60gJSUoZWxzZSkgxJHGsOG7o2MgZMO5bmcgbcOgIGtow7RuZyBjw7Mgbmd1ecOqbiB04butICUlKGlmKSIKKworIzogcmVmLWZpbHRlci5jOjgxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAixJHhu4tuaCBk4bqhbmc6IG5ndXnDqm4gdOG7rSAlJShlbHNlKSDEkcaw4bujYyBkw7luZyBtw6Aga2jDtG5nIGPDsyBuZ3V5w6puIHThu60gJSUodGhlbikiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgIsSR4buLbmggZOG6oW5nOiBuZ3V5w6puIHThu60gJSUoZWxzZSkgxJHGsOG7o2MgZMO5bmcgbmhp4buBdSBoxqFuIG3hu5l0IGzhuqduIgorCisjOiByZWYtZmlsdGVyLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIHVzZWQgd2l0aG91dCBjb3JyZXNwb25kaW5nIGF0b20iCittc2dzdHIgIsSR4buLbmggZOG6oW5nOiBuZ3V5w6puIHThu60gJSUoZW5kKSDEkcaw4bujYyBkw7luZyBtw6Aga2jDtG5nIGPDsyBuZ3V5w6puIHThu60gdMawxqFuZyDhu6luZyIKKworIzogcmVmLWZpbHRlci5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZm9ybWF0IHN0cmluZyAlcyIKK21zZ3N0ciAiY2h14buXaSDEkeG7i25oIGThuqFuZyBk4buLIGjDrG5oICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIHJlYmFzaW5nICVzIgorbXNnc3RyICJraMO0bmcgbmjDoW5oLCDEkWFuZyBj4bqjaSB04buVICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIHJlYmFzaW5nIGRldGFjaGVkIEhFQUQgJXMiCittc2dzdHIgImtow7RuZyBuaMOhbmgsIMSRYW5nIGPhuqNpIHThu5UgSEVBRCAlcyDEkcOjIHTDoWNoIHLhu51pIgorCisjOiByZWYtZmlsdGVyLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIGJpc2VjdCBzdGFydGVkIG9uICVzIgorbXNnc3RyICJraMO0bmcgbmjDoW5oLCBkaSBjaHV54buDbiBu4butYSBixrDhu5tjIMSRxrDhu6NjIGLhuq90IMSR4bqndSB04bqhaSAlcyIKKworIzogcmVmLWZpbHRlci5jOjE1MDQKK21zZ2lkICJubyBicmFuY2giCittc2dzdHIgImtow7RuZyBuaMOhbmgiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTQwIHJlZi1maWx0ZXIuYzoxNzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgb2JqZWN0ICVzIGZvciAlcyIKK21zZ3N0ciAidGhp4bq/dSDEkeG7kWkgdMaw4bujbmcgJXMgY2hvICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXJzZV9vYmplY3RfYnVmZmVyIGZhaWxlZCBvbiAlcyBmb3IgJXMiCittc2dzdHIgInBhcnNlX29iamVjdF9idWZmZXIgZ+G6t3AgbOG7l2kgdHLDqm4gJXMgY2hvICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IGF0ICclcyciCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyBk4buLIGjDrG5oIHThuqFpIOKAnCVz4oCdIgorCisjOiByZWYtZmlsdGVyLmM6MjA5MworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSAlcyIKK21zZ3N0ciAixJFhbmcgbOG7nSDEkWkgdGhhbSBjaGnhur91IHbhu5tpIHTDqm4gaOG7j25nICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSBtaXNzaW5nIgorbXNnc3RyICLEkeG7i25oIGThuqFuZzogdGhp4bq/dSBuZ3V5w6puIHThu60gJSUoZW5kKSIKKworIzogcmVmLWZpbHRlci5jOjI0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1tZXJnZWQiCittc2dzdHIgInTDuXkgY2jhu41uIOKAnCVz4oCdIGzDoCB4dW5nIGto4bqvYyB24bubaSB0w7l5IGNo4buNbiAtLW1lcmdlZCIKKworIzogcmVmLWZpbHRlci5jOjI0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1tZXJnZWQiCittc2dzdHIgInTDuXkgY2jhu41uIOKAnCVz4oCdIGzDoCB4dW5nIGto4bqvYyB24bubaSB0w7l5IGNo4buNbiAtLW5vLW1lcmdlZCIKKworIzogcmVmLWZpbHRlci5jOjI1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICJ0w6puIMSR4buRaSB0xrDhu6NuZyBk4buLIGjDrG5oICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBtdXN0IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICJ0w7l5IGNo4buNbiDigJwlc+KAnSBwaOG6o2kgY2jhu4kgxJHhur9uIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IHJlbW90ZS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICJj4bqldSBow6xuaCB2aeG6v3QgdOG6r3QgbcOheSBjaOG7pyBraMO0bmcgdGjhu4MgYuG6r3QgxJHhuqd1IGLhurFuZyDigJwv4oCdOiAlcyIKKworIzogcmVtb3RlLmM6NDE0Cittc2dpZCAibW9yZSB0aGFuIG9uZSByZWNlaXZlcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0IgorbXNnc3RyICLEkcOjIMSRxrBhIHJhIG5oaeG7gXUgaMahbiBt4buZdCBnw7NpIG5o4bqtbiB24buBLCDEkWFuZyBz4butIGThu6VuZyBjw6FpIMSR4bqndSB0acOqbiIKKworIzogcmVtb3RlLmM6NDIyCittc2dpZCAibW9yZSB0aGFuIG9uZSB1cGxvYWRwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgIsSRw6MgxJHGsGEgcmEgbmhp4buBdSBoxqFuIG3hu5l0IGfDs2kgdOG6o2kgbMOqbiwgxJFhbmcgc+G7rSBk4bulbmcgY8OhaSDEkeG6p3UgdGnDqm4iCisKKyM6IHJlbW90ZS5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYm90aCAlcyBhbmQgJXMgdG8gJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSB24buBIGPhuqMgJXMgdsOgICVzIGNobyAlcyIKKworIzogcmVtb3RlLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHVzdWFsbHkgdHJhY2tzICVzLCBub3QgJXMiCittc2dzdHIgIiVzIHRoxrDhu51uZyB0aGVvIGTDtWkgJXMsIGtow7RuZyBwaOG6o2kgJXMiCisKKyM6IHJlbW90ZS5jOjYyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiCittc2dzdHIgIiVzIHRoZW8gZMO1aSBj4bqjICVzIHbDoCAlcyIKKworIzogcmVtb3RlLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImtleSAnJXMnIG9mIHBhdHRlcm4gaGFkIG5vICcqJyIKK21zZ3N0ciAia2jDs2Eg4oCcJXPigJ0gY+G7p2EgbeG6q3UgayBjw7Mg4oCcKuKAnSIKKworIzogcmVtb3RlLmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbHVlICclcycgb2YgcGF0dGVybiBoYXMgbm8gJyonIgorbXNnc3RyICJnacOhIHRy4buLIOKAnCVz4oCdIGPhu6dhIG3huqt1IGsgY8OzIOKAnCrigJ0iCisKKyM6IHJlbW90ZS5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgZG9lcyBub3QgbWF0Y2ggYW55IgorbXNnc3RyICJyZWZzcGVjICVzIG5ndeG7k24ga2jDtG5nIGto4bubcCBi4bqldCBr4buzIGPDoWkgZ8OsIgorCisjOiByZW1vdGUuYzoxMDA5CisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAicmVmc3BlYyAlcyBuZ3Xhu5NuIGto4bubcCBuaGnhu4F1IGjGoW4gbeG7mXQiCisKKyMuIFRSQU5TTEFUT1JTOiAibWF0Y2hlcyAnJXMnJSIgaXMgdGhlIDxkc3Q+IHBhcnQgb2YgImdpdCBwdXNoCisjLiA8cmVtb3RlPiA8c3JjPjo8ZHN0PiIgcHVzaCwgYW5kICJiZWluZyBwdXNoZWQgKCclcycpIiBpcworIy4gdGhlIDxzcmM+LgorIy4KKyM6IHJlbW90ZS5jOjEwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXN0aW5hdGlvbiB5b3UgcHJvdmlkZWQgaXMgbm90IGEgZnVsbCByZWZuYW1lIChpLmUuLFxuIgorInN0YXJ0aW5nIHdpdGggXCJyZWZzL1wiKS4gV2UgdHJpZWQgdG8gZ3Vlc3Mgd2hhdCB5b3UgbWVhbnQgYnk6XG4iCisiXG4iCisiLSBMb29raW5nIGZvciBhIHJlZiB0aGF0IG1hdGNoZXMgJyVzJyBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiLSBDaGVja2luZyBpZiB0aGUgPHNyYz4gYmVpbmcgcHVzaGVkICgnJXMnKVxuIgorIiAgaXMgYSByZWYgaW4gXCJyZWZzL3toZWFkcyx0YWdzfS9cIi4gSWYgc28gd2UgYWRkIGEgY29ycmVzcG9uZGluZ1xuIgorIiAgcmVmcy97aGVhZHMsdGFnc30vIHByZWZpeCBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiXG4iCisiTmVpdGhlciB3b3JrZWQsIHNvIHdlIGdhdmUgdXAuIFlvdSBtdXN0IGZ1bGx5IHF1YWxpZnkgdGhlIHJlZi4iCittc2dzdHIgIiIKKyLEkMOtY2ggYuG6oW4gxJHDoyBjdW5nIGPhuqVwIGtow7RuZyBwaOG6o2kgdMOqbiB0aGFtIGNoaeG6v3UgxJHhuqd5IMSR4bunICh04bupYyBsw6BcbiIKKyJi4bqvdCDEkeG6p3UgYuG6sW5nIFwicmVmcy9cIikuIENow7puZyB0w7RpIMSRw6MgY+G7kSBzdXkgbHXhuq1uIHLhurFuZyDDvSBj4bunYSBi4bqhbiBsw6A6XG4iCisiXG4iCisiLSBUw6xtIGtp4bq/bSBt4buZdCB0aGFtIGNoaeG6v3UgbcOgIG7DsyBraOG7m3Ag4oCcJXPigJ0gYsOqbiBwaMOtYSBtw6F5IGNo4bunLlxuIgorIi0gS2nhu4NtIHRyYSB4ZW0gPHNyYz4gxJHGsOG7o2MgxJHhuql5IGzDqm4gKOKAnCVz4oCdKVxuIgorIiAgbMOgIG3hu5l0IHRoYW0gY2hp4bq/dSB0cm9uZyBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBO4bq/dSB0aOG6vyBjaMO6bmcgdMO0aSB0aMOqbSBt4buZdCAiCisidGnhu4FuIHThu5FcbiIKKyIgIHJlZnMve2hlYWRzLHRhZ3N9LyB0xrDGoW5nIOG7qW5nIGLDqm4gcGjDrWEgbcOheSBjaOG7py5cbiIKKyJcbiIKKyJO4bq/dSBj4bqjIGhhaSBsw6Aga2jDtG5nIHRo4buDLCB0aMOsIGNow7puZyB0w7RpIGPFqW5nIGNo4buLdSB0aHVhLiBC4bqhbiBwaOG6o2kgZMO5bmcgdGhhbSAiCisiY2hp4bq/dSBk4bqhbmcgxJHhuqd5IMSR4bunLiIKKworIzogcmVtb3RlLmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBjb21taXQgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy9oZWFkcy8lcyc/IgorbXNnc3RyICIiCisiUGjhuqduIDxzcmM+IGPhu6dhIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiBsw6AgbeG7mXQgxJHhu5FpIHTGsOG7o25nIGzhuqduIGNodXnhu4NuIGdpYW8uXG4iCisiQ8OzIHBo4bqjaSDDvSBi4bqhbiBsw6AgbeG7mXQgdOG6oW8gbeG7mXQgbmjDoW5oIG3hu5tpIGLhurFuZyBjw6FjaCDEkeG6qXkgbMOqblxuIgorIuKAnCVzOnJlZnMvaGVhZHMvJXPigJ0/IgorCisjOiByZW1vdGUuYzoxMDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRhZyBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyB0YWcgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIlBo4bqnbiA8c3JjPiBj4bunYSDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24gbMOgIG3hu5l0IMSR4buRaSB0xrDhu6NuZyB0aOG6uy5cbiIKKyJDw7MgcGjhuqNpIMO9IGLhuqFuIGzDoCBt4buZdCB04bqhbyBt4buZdCB0aOG6uyBt4bubaSBi4bqxbmcgY8OhY2ggxJHhuql5IGzDqm5cbiIKKyLigJwlczpyZWZzL3RhZ3MvJXPigJ0/IgorCisjOiByZW1vdGUuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRyZWUgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgdHJlZSBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisiUGjhuqduIDxzcmM+IGPhu6dhIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiBsw6AgbeG7mXQgxJHhu5FpIHTGsOG7o25nIGPDonkuXG4iCisiQ8OzIHBo4bqjaSDDvSBi4bqhbiBsw6AgbeG7mXQgdOG6oW8gbeG7mXQgY8OieSBt4bubaSBi4bqxbmcgY8OhY2ggxJHhuql5IGzDqm5cbiIKKyLigJwlczpyZWZzL3RhZ3MvJXPigJ0/IgorCisjOiByZW1vdGUuYzoxMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGJsb2Igb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgYmxvYiBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisiUGjhuqduIDxzcmM+IGPhu6dhIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiBsw6AgbeG7mXQgxJHhu5FpIHTGsOG7o25nIGJsb2IuXG4iCisiQ8OzIHBo4bqjaSDDvSBi4bqhbiBsw6AgbeG7mXQgdOG6oW8gbeG7mXQgYmxvYiBt4bubaSBi4bqxbmcgY8OhY2ggxJHhuql5IGzDqm5cbiIKKyLigJwlczpyZWZzL3RhZ3MvJXPigJ0/IgorCisjOiByZW1vdGUuYzoxMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNhbm5vdCBiZSByZXNvbHZlZCB0byBicmFuY2giCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyB0aOG7gyDEkcaw4bujYyBwaMOibiBnaeG6o2kgdGjDoG5oIG5ow6FuaCIKKworIzogcmVtb3RlLmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVsZXRlICclcyc6IHJlbW90ZSByZWYgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImtow7RuZyB0aOG7gyB4w7NhIOKAnCVz4oCdOiB0aGFtIGNoaeG6v3UgdHLDqm4gbcOheSBjaOG7pyBraMO0bmcgdOG7k24gdOG6oWkiCisKKyM6IHJlbW90ZS5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHN0IHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICJkc3QgcmVmc3BlYyAlcyBraOG7m3Agbmhp4buBdSBoxqFuIG3hu5l0IgorCisjOiByZW1vdGUuYzoxMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWYgJXMgcmVjZWl2ZXMgZnJvbSBtb3JlIHRoYW4gb25lIHNyYyIKK21zZ3N0ciAiZHN0IHJlZiAlcyBuaOG6rW4gdOG7qyBoxqFuIG3hu5l0IG5ndeG7k24iCisKKyM6IHJlbW90ZS5jOjE2MjggcmVtb3RlLmM6MTcyOQorbXNnaWQgIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giCittc2dzdHIgIkhFQUQga2jDtG5nIGNo4buJIMSR4bq/biBt4buZdCBuaMOhbmggbsOgbyBj4bqjIgorCisjOiByZW1vdGUuYzoxNjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorbXNnc3RyICJraMO0bmcgY8OzIG5ow6FuaCBuw6BvIG5oxrAgdGjhur86IOKAnCVz4oCdIgorCisjOiByZW1vdGUuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICJraMO0bmcgY8OzIHRoxrDhu6NuZyBuZ3Xhu5NuIMSRxrDhu6NjIGPhuqV1IGjDrG5oIGNobyBuaMOhbmgg4oCcJXPigJ0iCisKKyM6IHJlbW90ZS5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJuaMOhbmggdGjGsOG7o25nIG5ndeG7k24g4oCcJXPigJ0ga2jDtG5nIMSRxrDhu6NjIGzGsHUgbOG6oWkgbmjGsCBsw6AgbeG7mXQgbmjDoW5oIHRoZW8gZMO1aSBtw6F5IGNo4bunIgorCisjOiByZW1vdGUuYzoxNjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggZGVzdGluYXRpb24gJyVzJyBvbiByZW1vdGUgJyVzJyBoYXMgbm8gbG9jYWwgdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLEkeG6qXkgbMOqbiDEkcOtY2gg4oCcJXPigJ0gdHLDqm4gbcOheSBjaOG7pyDigJwlc+KAnSBraMO0bmcgY8OzIG5ow6FuaCB0aGVvIGTDtWkgbuG7mWkgYuG7mSIKKworIzogcmVtb3RlLmM6MTY3MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICJuaMOhbmgg4oCcJXPigJ0ga2jDtG5nIGPDsyBtw6F5IGNo4bunIMSR4buDIMSR4bqpeSBsw6puIgorCisjOiByZW1vdGUuYzoxNjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggcmVmc3BlY3MgZm9yICclcycgZG8gbm90IGluY2x1ZGUgJyVzJyIKK21zZ3N0ciAixJHhuql5IHJlZnNwZWNzIGNobyDigJwlc+KAnSBraMO0bmcgYmFvIGfhu5NtIOKAnCVz4oCdIgorCisjOiByZW1vdGUuYzoxNjk2Cittc2dpZCAicHVzaCBoYXMgbm8gZGVzdGluYXRpb24gKHB1c2guZGVmYXVsdCBpcyAnbm90aGluZycpIgorbXNnc3RyICLEkeG6qXkgbMOqbiBtw6Aga2jDtG5nIGPDsyDEkcOtY2ggKHB1c2guZGVmYXVsdCBsw6Ag4oCcbm90aGluZ+KAnSkiCisKKyM6IHJlbW90ZS5jOjE3MTgKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSAnc2ltcGxlJyBwdXNoIHRvIGEgc2luZ2xlIGRlc3RpbmF0aW9uIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpIMSR4bqpeSDigJzEkcahbiBnaeG6o27igJ0gxJHhur9uIG3hu5l0IMSRw61jaCDEkcahbiIKKworIzogcmVtb3RlLmM6MTg0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB0w6xtIHRo4bqleSB0aGFtIGNoaeG6v3UgbcOheSBjaOG7pyAlcyIKKworIzogcmVtb3RlLmM6MTg1NworIywgYy1mb3JtYXQKK21zZ2lkICIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiCittc2dzdHIgIiogxJBhbmcgYuG7jyBxdWEgdGhhbSBjaGnhur91IHRow7ogduG7iyBu4buZaSBi4buZIOKAnCVz4oCdIgorCisjOiByZW1vdGUuYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJhc2VkIG9uICclcycsIGJ1dCB0aGUgdXBzdHJlYW0gaXMgZ29uZS5cbiIKK21zZ3N0ciAiIgorIk5ow6FuaCBj4bunYSBi4bqhbiBk4buxYSB0csOqbiBjxqEgc+G7nyBsw6Ag4oCcJXPigJ0sIG5oxrBuZyB0csOqbiB0aMaw4bujbmcgbmd14buTbiBraMO0bmcgY8Oybi5cbiIKKworIzogcmVtb3RlLmM6MjAyNAorbXNnaWQgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIgorbXNnc3RyICIgICAoZMO5bmcgXCIgZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgxJHhu4Mgc+G7rWEpXG4iCisKKyM6IHJlbW90ZS5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAgdG8gZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgIk5ow6FuaCBj4bunYSBi4bqhbiDEkcOjIGPhuq1wIG5o4bqtdCB24bubaSDigJwlc+KAnS5cbiIKKworIzogcmVtb3RlLmM6MjAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBhbmQgJyVzJyByZWZlciB0byBkaWZmZXJlbnQgY29tbWl0cy5cbiIKK21zZ3N0ciAiTmjDoW5oIGPhu6dhIGLhuqFuIHbDoCDigJwlc+KAnSB0aGFtIGNoaeG6v3UgxJHhur9uIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBraMOhYyBuaGF1LlxuIgorCisjOiByZW1vdGUuYzoyMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcIiVzXCIgZm9yIGRldGFpbHMpXG4iCittc2dzdHIgIiAgKGTDuW5nIFwiJXNcIiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dClcbiIKKworIzogcmVtb3RlLmM6MjAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICJOaMOhbmggY+G7p2EgYuG6oW4gxJHhu6luZyB0csaw4bubYyDigJwlc+KAnSAlZCBs4bqnbiBjaHV54buDbiBnaWFvLlxuIgorCisjOiByZW1vdGUuYzoyMDQ0Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1c2hcIiB0byBwdWJsaXNoIHlvdXIgbG9jYWwgY29tbWl0cylcbiIKK21zZ3N0ciAiICAoZMO5bmcgXCJnaXQgcHVzaFwiIMSR4buDIHh14bqldCBi4bqjbiBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gbuG7mWkgYuG7mSBj4bunYSBi4bqhbilcbiIKKworIzogcmVtb3RlLmM6MjA0NworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICIiCisiTmjDoW5oIGPhu6dhIGLhuqFuIMSR4bupbmcgxJHhurFuZyBzYXUg4oCcJXPigJ0gJWQgbOG6p24gY2h1eeG7g24gZ2lhbywgdsOgIGPDsyB0aOG7gyDEkcaw4bujYyBjaHV54buDbi0iCisidGnhur9wLW5oYW5oLlxuIgorCisjOiByZW1vdGUuYzoyMDU1Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiAgKGTDuW5nIFwiZ2l0IHB1bGxcIiDEkeG7gyBj4bqtcCBuaOG6rXQgbmjDoW5oIG7hu5lpIGLhu5kgY+G7p2EgYuG6oW4pXG4iCisKKyM6IHJlbW90ZS5jOjIwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisiTmjDoW5oIGPhu6dhIGLhuqFuIHbDoCDigJwlc+KAnSBi4buLIHBow6JuIGvhu7MsXG4iCisidsOgIGPDsyAlZCB2w6AgJWQgbOG6p24gY2h1eeG7g24gZ2lhbyBraMOhYyBuaGF1IGNobyB04burbmcgY8OhaSxcbiIKKyJ0xrDGoW5nIOG7qW5nIHbhu5tpIG3hu5dpIGzhuqduLlxuIgorCisjOiByZW1vdGUuYzoyMDY4Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIiCisiICAoZMO5bmcgXCJnaXQgcHVsbFwiIMSR4buDIGjDsmEgdHLhu5luIG5ow6FuaCB0csOqbiBtw6F5IGNo4bunIHbDoG8gdHJvbmcgbmjDoW5oIGPhu6dhICIKKyJi4bqhbilcbiIKKworIzogcmVtb3RlLmM6MjI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcGFyc2UgZXhwZWN0ZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIHTDqm4gxJHhu5FpIHTGsOG7o25nIG1vbmcgbXXhu5FuIOKAnCVz4oCdIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBsYWNlIHJlZiBuYW1lOiAlcyIKK21zZ3N0ciAidMOqbiB0aGFtIGNoaeG6v3UgdGhheSB0aOG6vyBi4buLIHNhaTogJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAidGhhbSBjaGnhur91IHRoYXkgdGjhur8gYuG7iyB0csO5bmc6ICVzIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgZGVwdGggdG9vIGhpZ2ggZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAixJHhu5kgc8OidSB0aGF5IHRo4bq/IHF1w6EgY2FvIGNobyDEkeG7kWkgdMaw4bujbmcgJXMiCisKKyM6IHJlcmVyZS5jOjIxNyByZXJlcmUuYzoyMjYgcmVyZXJlLmM6MjI5Cittc2dpZCAiY29ycnVwdCBNRVJHRV9SUiIKK21zZ3N0ciAiTUVSR0VfUlIgc2FpIGjhu49uZyIKKworIzogcmVyZXJlLmM6MjY0IHJlcmVyZS5jOjI2OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXJlcmUgcmVjb3JkIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIGLhuqNuIGdoaSByZXJlcmUiCisKKyM6IHJlcmVyZS5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICclcycgKCVzKSIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kgxJHhu41jIGtoaSDEkWFuZyBnaGkg4oCcJXPigJ0gKCVzKSIKKworIzogcmVyZXJlLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmbHVzaCAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHhuql5IGThu68gbGnhu4d1IOKAnCVz4oCdIGzDqm4gxJHEqWEiCisKKyM6IHJlcmVyZS5jOjUwMyByZXJlcmUuYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb25mbGljdCBodW5rcyBpbiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY8OhYyBt4bqjbmggeHVuZyDEkeG7mXQgdHJvbmcg4oCcJXPigJ0iCisKKyM6IHJlcmVyZS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdXRpbWUoKSBvbiAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSB1dGltZSgpIHRyw6puIOKAnCVz4oCdIgorCisjOiByZXJlcmUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSRYW5nIGdoaSDigJwlc+KAnSIKKworIzogcmVyZXJlLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICLEkMOjIHThuqFtIGPhuqV0IOKAnCVz4oCdIHPhu60gZOG7pW5nIGPDoWNoIHBow6JuIGdp4bqjaSBr4bq/IHRyxrDhu5tjLiIKKworIzogcmVyZXJlLmM6NzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHJlc29sdXRpb24gZm9yICclcycuIgorbXNnc3RyICJDw6FjaCBnaeG6o2kgcXV54bq/dCDEkcOjIGdoaSBs4bqhaSBjaG8g4oCcJXPigJ0uIgorCisjOiByZXJlcmUuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzb2x2ZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAixJDDoyBwaMOibiBnaeG6o2kgZ2nhuqNpIOKAnCVz4oCdIHPhu60gZOG7pW5nIGPDoWNoIGdp4bqjaSBxdXnhur90IGvhur8gdHLGsOG7m2MuIgorCisjOiByZXJlcmUuYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayBzdHJheSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdW5saW5rIHN0cmF5IOKAnCVz4oCdIgorCisjOiByZXJlcmUuYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIlByZWltYWdlIMSRw6MgxJHGsOG7o2MgZ2hpIGzhuqFpIGNobyDigJwlc+KAnSIKKworIzogcmVyZXJlLmM6ODgxIHN1Ym1vZHVsZS5jOjIwNzggYnVpbHRpbi9sb2cuYzoxODcxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ1NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdGjGsCBt4bulYyDigJwlc+KAnSIKKworIzogcmVyZXJlLmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIGNvbmZsaWN0ZWQgc3RhdGUgaW4gJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGNo4bqheSBj4bqtcCBuaOG6rXQgdHLhuqFuZyB0aMOhaSBi4buLIHh1bmcgxJHhu5l0IHRyb25nIOKAnCVz4oCdIgorCisjOiByZXJlcmUuYzoxMDY4IHJlcmVyZS5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIgorbXNnc3RyICLEkeG7q25nIG5ow7MgY8OhYyBnaeG6o2kgcXV54bq/dCBjaG8g4oCcJXPigJ0iCisKKyM6IHJlcmVyZS5jOjEwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdW5saW5rIOKAnCVz4oCdIgorCisjOiByZXJlcmUuYzoxMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIsSQw6MgY+G6rXAgbmjhuq10IHByZWltYWdlIGNobyDigJwlc+KAnSIKKworIzogcmVyZXJlLmM6MTA5NgorIywgYy1mb3JtYXQKK21zZ2lkICJGb3Jnb3QgcmVzb2x1dGlvbiBmb3IgJyVzJ1xuIgorbXNnc3RyICJRdcOqbiBwaMOibiBnaeG6o2kgY2hvIOKAnCVz4oCdXG4iCisKKyM6IHJlcmVyZS5jOjExOTkKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiByci1jYWNoZSBkaXJlY3RvcnkiCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIHRoxrAgbeG7pWMgcnItY2FjaGUiCisKKyM6IHJldmlzaW9uLmM6MjQ5NworbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgIm5ow6FuaCBoaeG7h24gdOG6oWkgY+G7p2EgYuG6oW4gY8OzIHbhursgbmjGsCBi4buLIGjhu49uZyIKKworIzogcmV2aXNpb24uYzoyNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIKK21zZ3N0ciAibmjDoW5oIGhp4buHbiB04bqhaSBj4bunYSBi4bqhbiDigJwlc+KAnSBraMO0bmcgY8OzIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gbsOgbyBj4bqjIgorCisjOiByZXZpc2lvbi5jOjI3MDgKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAiLS1maXJzdC1wYXJlbnQgeHVuZyBraOG6r2MgduG7m2kgLS1iaXNlY3QiCisKKyM6IHJldmlzaW9uLmM6MjcxMgorbXNnaWQgIi1MIGRvZXMgbm90IHlldCBzdXBwb3J0IGRpZmYgZm9ybWF0cyBiZXNpZGVzIC1wIGFuZCAtcyIKK21zZ3N0ciAiLUwgduG6q24gY2jGsGEgaOG7lyB0cuG7oyDEkeG7i25oIGThuqFuZyBraMOhYyBiaeG7h3QgbsOgbyBuZ2/DoGkgLXAgdsOgIC1zIgorCisjOiBydW4tY29tbWFuZC5jOjc2MworbXNnaWQgIm9wZW4gL2Rldi9udWxsIGZhaWxlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIG3hu58g4oCcL2Rldi9udWxs4oCdIgorCisjOiBydW4tY29tbWFuZC5jOjEyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBhc3luYyB0aHJlYWQ6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdHV54bq/biBhc3luYzogJXMiCisKKyM6IHJ1bi1jb21tYW5kLmM6MTMzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlICclcycgaG9vayB3YXMgaWdub3JlZCBiZWNhdXNlIGl0J3Mgbm90IHNldCBhcyBleGVjdXRhYmxlLlxuIgorIllvdSBjYW4gZGlzYWJsZSB0aGlzIHdhcm5pbmcgd2l0aCBgZ2l0IGNvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgZmFsc2VgLiIKK21zZ3N0ciAiIgorIk3Ds2Mg4oCcJXPigJ0gYuG7iyBi4buPIHF1YSBi4bufaSB2w6wgbsOzIGtow7RuZyB0aOG7gyDEkeG6t3QgbMOgIHRo4buxYyB0aGkgxJHGsOG7o2MuXG4iCisiQuG6oW4gY8OzIHRo4buDIHThuq90IGPhuqNuaCBiw6FvIG7DoHkgYuG6sW5nIOKAnGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNl4oCcLiIKKworIzogc2VuZC1wYWNrLmM6MTQ0Cittc2dpZCAidW5leHBlY3RlZCBmbHVzaCBwYWNrZXQgd2hpbGUgcmVhZGluZyByZW1vdGUgdW5wYWNrIHN0YXR1cyIKK21zZ3N0ciAiIgorImfhurdwIGfDs2kgZmx1c2gga2jDtG5nIGPhuqduIHRyb25nIGtoaSDEkeG7jWMgdMOsbmggdHLhuqFuZyBnaeG6o2kgbsOpbiBnw7NpIHRyw6puIG3DoXkgY2jhu6ciCisKKyM6IHNlbmQtcGFjay5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgcmVtb3RlIHVucGFjayBzdGF0dXM6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggdMOsbmggdHLhuqFuZyB1bnBhY2sgbcOheSBjaOG7pzogJXMiCisKKyM6IHNlbmQtcGFjay5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgdW5wYWNrIGZhaWxlZDogJXMiCittc2dzdHIgIm3DoXkgY2jhu6cgZ+G6t3AgbOG7l2kgdW5wYWNrOiAlcyIKKworIzogc2VuZC1wYWNrLmM6MzA5Cittc2dpZCAiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBrw70gY2jhu6luZyB0aOG7sWMgxJHhuql5IgorCisjOiBzZW5kLXBhY2suYzo0MjMKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIHB1c2giCittc2dzdHIgImvhur90IHRow7pjIG5o4bqtbiBraMO0bmcgaOG7lyB0cuG7oyDEkeG6qXkgLS1zaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQyNQorbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLSIKKyJzaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorIsSR4burbmcgZ+G7rWkgZ2nhuqV5IGNo4bupbmcgbmjhuq1uIMSR4bqpeSB0csaw4bubYyBraGkga+G6v3QgdGjDumMgbmjhuq1uIGtow7RuZyBo4buXIHRy4bujIMSR4bqpeSAtLSIKKyJzaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQzNworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMgcHVzaCIKK21zZ3N0ciAia+G6v3QgdGjDumMgbmjhuq1uIGtow7RuZyBo4buXIHRy4bujIMSR4bqpeSAtLWF0b21pYyIKKworIzogc2VuZC1wYWNrLmM6NDQyCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBwdXNoIG9wdGlvbnMiCittc2dzdHIgImvhur90IHRow7pjIG5o4bqtbiBraMO0bmcgaOG7lyB0cuG7oyBjw6FjIHTDuXkgY2jhu41uIGPhu6dhIGzhu4duaCBwdXNoIgorCisjOiBzZXF1ZW5jZXIuYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgbWVzc2FnZSBjbGVhbnVwIG1vZGUgJyVzJyIKK21zZ3N0ciAiY2jhur8gxJHhu5kgZOG7jW4gZOG6uXAgZ2hpIGNow7ogY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGtow7RuZyBo4bujcCBs4buHIOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgeMOzYSBi4buPIOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzozMTUgYnVpbHRpbi9yZWJhc2UuYzo3ODUgYnVpbHRpbi9yZWJhc2UuYzoxNzUwIGJ1aWx0aW4vcm0uYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ+G7oSBi4buPIOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzozMjUKK21zZ2lkICJyZXZlcnQiCittc2dzdHIgImhvw6BuIG5ndXnDqm4iCisKKyM6IHNlcXVlbmNlci5jOjMyNworbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICJjaGVycnktcGljayIKKworIzogc2VxdWVuY2VyLmM6MzI5Cittc2dpZCAicmViYXNlIgorbXNnc3RyICJyZWJhc2UiCisKKyM6IHNlcXVlbmNlci5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGFjdGlvbjogJWQiCittc2dzdHIgImtow7RuZyBuaOG6rW4gcmEgdGhhbyB0w6FjOiAlZCIKKworIzogc2VxdWVuY2VyLmM6Mzg5Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKyJzYXUga2hpIGdp4bqjaSBxdXnhur90IGPDoWMgeHVuZyDEkeG7mXQsIMSRw6FuaCBk4bqldSDEkcaw4budbmcgZOG6q24gxJHDoyBz4butYVxuIgorInbhu5tpIGzhu4duaCDigJxnaXQgYWRkIDwvY8OhYy/Ekcaw4budbmcvZOG6q24+4oCdIGhv4bq3YyDigJxnaXQgcm0gPC9jw6FjL8SRxrDhu51uZy9k4bqrbj7igJ0iCisKKyM6IHNlcXVlbmNlci5jOjM5MgorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisic2F1IGtoaSBnaeG6o2kgcXV54bq/dCBjw6FjIHh1bmcgxJHhu5l0LCDEkcOhbmggZOG6pXUgxJHGsOG7nW5nIGThuqtuIMSRw6Mgc+G7rWFcbiIKKyJ24bubaSBs4buHbmgg4oCcZ2l0IGFkZCA8L2PDoWMvxJHGsOG7nW5nL2ThuqtuPuKAnSBob+G6t2Mg4oCcZ2l0IHJtIDwvY8OhYy/Ekcaw4budbmcvZOG6q24+4oCdXG4iCisidsOgIGNodXnhu4NuIGdpYW8ga+G6v3QgcXXhuqMgYuG6sW5nIGzhu4duaCDigJxnaXQgY29tbWl04oCdIgorCisjOiBzZXF1ZW5jZXIuYzo0MDUgc2VxdWVuY2VyLmM6MjkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4Mga2jDs2Eg4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZW9sIHRvICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgZW9sIHbDoG8g4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjQxNyBzZXF1ZW5jZXIuYzoyNzA2IHNlcXVlbmNlci5jOjI5MDcgc2VxdWVuY2VyLmM6MjkyMQorIzogc2VxdWVuY2VyLmM6MzE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGhvw6BuIHRow6BuaCDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6NDQwIHNlcXVlbmNlci5jOjE2MTMgc2VxdWVuY2VyLmM6MjcyNiBzZXF1ZW5jZXIuYzozMTY3CisjOiBzZXF1ZW5jZXIuYzozMjc2IGJ1aWx0aW4vYW0uYzoyNDkgYnVpbHRpbi9jb21taXQuYzo3ODcgYnVpbHRpbi9tZXJnZS5jOjExMjAKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMg4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXMuIgorbXNnc3RyICJjw6FjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kgY+G7p2EgYuG6oW4gY8OzIHRo4buDIGLhu4sgZ2hpIMSRw6ggYuG7n2kgbOG7h25oICVzLiIKKworIzogc2VxdWVuY2VyLmM6NDcwCittc2dpZCAiY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICJjaHV54buDbiBnaWFvIGPDoWMgdGhheSDEkeG7lWkgY+G7p2EgYuG6oW4gaGF5IHThuqFtIGPhuqV0IChzdGFzaCkgY2jDum5nIMSR4buDIHjhu60gbMO9LiIKKworIzogc2VxdWVuY2VyLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiVzOiBjaHV54buDbi10aeG6v3AtbmhhbmgiCisKKyM6IHNlcXVlbmNlci5jOjU0MSBidWlsdGluL3RhZy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiQ2jhur8gxJHhu5kgZOG7jW4gZOG6uXAga2jDtG5nIGjhu6NwIGzhu4cgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiLCAiY2hlcnJ5LXBpY2siIG9yCisjLiAicmViYXNlIi4KKyMuCisjOiBzZXF1ZW5jZXIuYzo2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IEtow7RuZyB0aOG7gyBnaGkgdOG6rXAgdGluIGzGsHUgYuG6o25nIG3hu6VjIGzhu6VjIG3hu5tpIgorCisjOiBzZXF1ZW5jZXIuYzo2NTIKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWUiCittc2dzdHIgImtow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgY8OieSBi4buZIG5o4bubIMSR4buHbSIKKworIzogc2VxdWVuY2VyLmM6NjY2Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXQiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kgbOG6p24gY2h1eeG7g24gZ2lhbyBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzo3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8ga2V5IHByZXNlbnQgaW4gJyUuKnMnIgorbXNnc3RyICJraMO0bmcgY8OzIGtow7NhIGhp4buHbiBkaeG7h24gdHJvbmcg4oCcJS4qc+KAnSIKKworIzogc2VxdWVuY2VyLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZXF1b3RlIHZhbHVlIG9mICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBnaeG6o2kgdHLDrWNoIGThuqtuIGdpw6EgdHLhu4sgY+G7p2Eg4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjc5NCB3cmFwcGVyLmM6MTkwIHdyYXBwZXIuYzozNjAgYnVpbHRpbi9hbS5jOjcxMAorIzogYnVpbHRpbi9hbS5jOjgwMiBidWlsdGluL21lcmdlLmM6MTExNyBidWlsdGluL3JlYmFzZS5jOjEwNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58g4oCcJXPigJ0gxJHhu4MgxJHhu41jIgorCisjOiBzZXF1ZW5jZXIuYzo4MDQKK21zZ2lkICInR0lUX0FVVEhPUl9OQU1FJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICLigJxHSVRfQVVUSE9SX05BTUXigJ0gxJHDoyBz4bq1biDEkcawYSByYSBy4buTaSIKKworIzogc2VxdWVuY2VyLmM6ODA5Cittc2dpZCAiJ0dJVF9BVVRIT1JfRU1BSUwnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIuKAnEdJVF9BVVRIT1JfRU1BSUzigJ0gxJHDoyBz4bq1biDEkcawYSByYSBy4buTaSIKKworIzogc2VxdWVuY2VyLmM6ODE0Cittc2dpZCAiJ0dJVF9BVVRIT1JfREFURScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAi4oCcR0lUX0FVVEhPUl9EQVRF4oCdIMSRw6Mgc+G6tW4gxJHGsGEgcmEgcuG7k2kiCisKKyM6IHNlcXVlbmNlci5jOjgxOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhcmlhYmxlICclcyciCittc2dzdHIgImtow7RuZyBoaeG7g3UgYmnhur9uIOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzo4MjMKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX05BTUUnIgorbXNnc3RyICJ0aGnhur91IOKAnEdJVF9BVVRIT1JfTkFNReKAnSIKKworIzogc2VxdWVuY2VyLmM6ODI1Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9FTUFJTCciCittc2dzdHIgInRoaeG6v3Ug4oCcR0lUX0FVVEhPUl9FTUFJTOKAnSIKKworIzogc2VxdWVuY2VyLmM6ODI3Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9EQVRFJyIKK21zZ3N0ciAidGhp4bq/dSDigJxHSVRfQVVUSE9SX0RBVEXigJ0iCisKKyM6IHNlcXVlbmNlci5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWVcbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZSBzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisiYuG6oW4gY8OzIGPDoWMgdGhheSDEkeG7lWkgc28gduG7m2kgdHJvbmcgYuG7hyBwaMOzbmcgdHJvbmcgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBj4bunYSBi4bqhbi5cbiIKKyJO4bq/dSBjw6FjIHRoYXkgxJHhu5VpIG7DoHkgbMOgIG114buRbiBzcXVhc2ggdsOgbyBs4bqnbiBjaHV54buDbiBnaWFvIGvhur8gdHLGsOG7m2MsIGNo4bqheTpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk7hur91IGNow7puZyBjw7Mgw70gbMOgIMSRaSDEkeG6v24gbOG6p24gY2h1eeG7g24gZ2lhbyBt4bubaSwgdGjDrCBjaOG6oXk6XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiVHJvbmcgY+G6oyBoYWkgdHLGsOG7nW5nIGjhu6NwLCBt4buZdCBraGkgYuG6oW4gbMOgbSB4b25nLCB0aeG6v3AgdOG7pWMgYuG6sW5nOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjExNDgKK21zZ2lkICIncHJlcGFyZS1jb21taXQtbXNnJyBob29rIGZhaWxlZCIKK21zZ3N0ciAibcOzYyDigJxwcmVwYXJlLWNvbW1pdC1tc2figJ0gYuG7iyBs4buXaSIKKworIzogc2VxdWVuY2VyLmM6MTE1NAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIlTDqm4gdsOgIMSR4buLYSBjaOG7iSB0aMawIMSRaeG7h24gdOG7rSBj4bunYSBi4bqhbiDEkcaw4bujYyBj4bqldSBow6xuaCBt4buZdCBjw6FjaCB04buxIMSR4buZbmcgdHLDqm4gY8ahICIKKyJz4bufXG4iCisidMOgaSBraG/huqNuIHbDoCDEkeG7i2EgY2jhu4kgbcOheSBjaOG7pyBj4bunYSBi4bqhbi4gWGluIGjDo3kga2nhu4NtIHRyYSB4ZW0gY2jDum5nIGPDsyBjaMOtbmggIgorInjDoWMga2jDtG5nLlxuIgorIkLhuqFuIGPDsyB0aOG7gyBjaOG6t24gbmjhu69uZyB0aMO0bmcgYsOhbyBraeG7g3UgbsOgeSBi4bqxbmcgY8OhY2ggY8OgaSDEkeG6t3QgY8OhYyB0aMO0bmcgdGluICIKKyJ0csOqblxuIgorIm3hu5l0IGPDoWNoIHLDtSByw6BuZy4gQ2jhuqF5IGzhu4duaCBzYXUgxJHDonkgbMOgIHRoZW8gY8OhYyBoxrDhu5tuZyBk4bqrbiB0cm9uZyBi4buZIHNv4bqhbiAiCisidGjhuqNvXG4iCisixJHhu4MgY2jhu4luaCBz4butYSB04bqtcCB0aW4gY+G6pXUgaMOsbmggY+G7p2EgbcOsbmg6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiU2F1IGtoaSB0aOG7sWMgaGnhu4duIHhvbmcsIGLhuqFuIGPDsyB0aOG7gyBz4butYSBjaOG7r2EgxJHhu4tuaCBkYW5oIMSRxrDhu6NjIHPhu60gZOG7pW5nIGNob1xuIgorImzhuqduIGNodXnhu4NuIGdpYW8gbsOgeSB24bubaSBs4buHbmg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMTY3Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiVMOqbiB2w6AgxJHhu4thIGNo4buJIHRoxrAgxJFp4buHbiB04butIGPhu6dhIGLhuqFuIMSRxrDhu6NjIGPhuqV1IGjDrG5oIG3hu5l0IGPDoWNoIHThu7EgxJHhu5luZyB0csOqbiBjxqEgIgorInPhu59cbiIKKyJ0w6BpIGtob+G6o24gdsOgIMSR4buLYSBjaOG7iSBtw6F5IGNo4bunIGPhu6dhIGLhuqFuLiBYaW4gaMOjeSBraeG7g20gdHJhIHhlbSBjaMO6bmcgY8OzIGNow61uaCAiCisieMOhYyBraMO0bmcuXG4iCisiQuG6oW4gY8OzIHRo4buDIGNo4bq3biBuaOG7r25nIHRow7RuZyBiw6FvIGtp4buDdSBuw6B5IGLhurFuZyBjw6FjaCBjw6BpIMSR4bq3dCBjw6FjIHRow7RuZyB0aW4gIgorInRyw6puIG3hu5l0IGPDoWNoIHLDtSByw6BuZzpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJUw6puIGPhu6dhIGLhuqFuXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIlNhdSBraGkgdGjhu7FjIGhp4buHbiB4b25nLCBi4bqhbiBjw7MgdGjhu4Mgc+G7rWEgY2jhu69hIMSR4buLbmggZGFuaCDEkcaw4bujYyBz4butIGThu6VuZyBjaG8gbOG6p24gIgorImNodXnhu4NuIGdpYW8gbsOgeSB24bubaSBs4buHbmg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjA5Cittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IGzhuqduIGNodXnhu4NuIGdpYW8gbeG7m2kgaMahbiDEkcOjIMSRxrDhu6NjIHThuqFvIgorCisjOiBzZXF1ZW5jZXIuYzoxMjExCittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPDuiBwaMOhcCBj4bunYSDEkeG7kWkgdMaw4bujbmcgY2h1eeG7g24gZ2lhbyBt4bubaSBoxqFuIMSRw6MgxJHGsOG7o2MgdOG6oW8iCisKKyM6IHNlcXVlbmNlci5jOjEyNTcKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBIRUFEIGFmdGVyIGNyZWF0aW5nIGNvbW1pdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSBIRUFEIHNhdSBraGkgdOG6oW8gbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogc2VxdWVuY2VyLmM6MTI1OQorbXNnaWQgImRldGFjaGVkIEhFQUQiCittc2dzdHIgIsSRw6MgcuG7nWkga2jhu49pIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjEyNjMKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAiIChyb290LWNvbW1pdCkiCisKKyM6IHNlcXVlbmNlci5jOjEyODQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjEyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICJIRUFEICVzIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8hIgorCisjOiBzZXF1ZW5jZXIuYzoxMjkwIHNlcXVlbmNlci5jOjEzNjQgYnVpbHRpbi9jb21taXQuYzoxNTc0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY29tbWl0IChs4bqnbiBjaHV54buDbiBnaWFvKSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxMzQyIHNlcXVlbmNlci5jOjE5NjgKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0IGF1dGhvciIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIHTDoWMgZ2nhuqMgY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogc2VxdWVuY2VyLmM6MTM1MyBidWlsdGluL2FtLmM6MTU2NiBidWlsdGluL21lcmdlLmM6Njg3Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAibOG7h25oIGdpdCB3cml0ZS10cmVlIGfhurdwIGzhu5dpIGtoaSBnaGkgbeG7mXQgY8OieSIKKworIzogc2VxdWVuY2VyLmM6MTM4NiBzZXF1ZW5jZXIuYzoxNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbW1pdCBtZXNzYWdlIGZyb20gJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBwaOG6p24gY2jDuiB0aMOtY2ggKG1lc3NhZ2UpIHThu6sg4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjE0MTMgYnVpbHRpbi9hbS5jOjE1ODggYnVpbHRpbi9jb21taXQuYzoxNjczIGJ1aWx0aW4vbWVyZ2UuYzo4ODYKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MTEKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGdoaSDEkeG7kWkgdMaw4bujbmcgY2h1eeG7g24gZ2lhbyIKKworIzogc2VxdWVuY2VyLmM6MTQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggbOG6p24gY2h1eeG7g24gZ2lhbyAlcyIKKworIzogc2VxdWVuY2VyLmM6MTQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGzhuqduIGNodXnhu4NuIGdpYW8gY2hhIG3hurkg4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjE1NjIgc2VxdWVuY2VyLmM6MTY3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQ6ICVkIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IGPDonUgbOG7h25oICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxNjIwIHNlcXVlbmNlci5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICVkIGNvbW1pdHMuIgorbXNnc3RyICLEkMOieSBsw6AgdOG7lSBo4bujcCBj4bunYSAlZCBs4bqnbiBjaHV54buDbiBnaWFvLiIKKworIzogc2VxdWVuY2VyLmM6MTYzMAorbXNnaWQgIm5lZWQgYSBIRUFEIHRvIGZpeHVwIgorbXNnc3RyICJj4bqnbiBt4buZdCBIRUFEIMSR4buDIHPhu61hIgorCisjOiBzZXF1ZW5jZXIuYzoxNjMyIHNlcXVlbmNlci5jOjMyMTIKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE2MzQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEJ3MgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgcGjhuqduIGNow7ogdGjDrWNoIChtZXNzYWdlKSBj4bunYSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzoxNjQ3IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTYKK21zZ2lkICJUaGlzIGlzIHRoZSAxc3QgY29tbWl0IG1lc3NhZ2U6IgorbXNnc3RyICLEkMOieSBsw6AgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgbmjhuqV0OiIKKworIzogc2VxdWVuY2VyLmM6MTY1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZSBvZiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBwaOG6p24gY2jDuiB0aMOtY2ggKG1lc3NhZ2UpIGPhu6dhICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMlZDoiCittc2dzdHIgIsSQw6J5IGzDoCBjaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSAjJWQ6IgorCisjOiBzZXF1ZW5jZXIuYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJWQgd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiQ2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgIyVkIHPhur0gYuG7iyBi4buPIHF1YToiCisKKyM6IHNlcXVlbmNlci5jOjE3NTYKK21zZ2lkICJ5b3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorbXNnc3RyICJ04bqtcCB0aW4gbMawdSBt4bulYyBs4bulYyBj4bunYSBi4bqhbiBraMO0bmcgxJHGsOG7o2MgaMOyYSB0cuG7mW4uIgorCisjOiBzZXF1ZW5jZXIuYzoxNzYzCittc2dpZCAiY2Fubm90IGZpeHVwIHJvb3QgY29tbWl0IgorbXNnc3RyICJraMO0bmcgdGjhu4Mgc+G7rWEgY2jhu69hIGzhuqduIGNodXnhu4NuIGdpYW8gZ+G7kWMiCisKKyM6IHNlcXVlbmNlci5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICJs4bqnbiBjaHV54buDbiBnaWFvICVzIGzDoCBt4buZdCBs4bqnbiBow7JhIHRy4buZbiBuaMawbmcga2jDtG5nIMSRxrBhIHJhIHTDuXkgY2jhu41uIC1tLiIKKworIzogc2VxdWVuY2VyLmM6MTc5MCBzZXF1ZW5jZXIuYzoxNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyAlcyBraMO0bmcgY8OzIGNoYSBt4bq5ICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxODA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgZ2hpIGNow7ogbOG6p24gY2h1eeG7g24gZ2lhbyBjaG8gJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgd2lsbCBiZSBhICJ0b2RvIiBjb21tYW5kIGxpa2UKKyMuICJyZXZlcnQiIG9yICJwaWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEuCisjOiBzZXF1ZW5jZXIuYzoxODIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiJXM6IGtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBs4bqnbiBjaHV54buDbiBnaWFvIG3hurkgY+G7p2EgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSAnJXMnIHRvICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7lWkgdMOqbiDigJwlc+KAnSB0aMOgbmgg4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjE5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGhvw6BuIG5ndXnDqm4gJXPigKYgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4Mgw6FwIGThu6VuZyBtaeG6v25nIHbDoSAlc+KApiAlcyIKKworIzogc2VxdWVuY2VyLmM6MTk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJkcm9wcGluZyAlcyAlcyAtLSBwYXRjaCBjb250ZW50cyBhbHJlYWR5IHVwc3RyZWFtXG4iCittc2dzdHIgInjDs2EgJXMgJXMgLS0gdsOhIG7hu5lpIGR1bmcgdGjGsOG7o25nIG5ndeG7k24gxJHDoyBjw7NcbiIKKworIzogc2VxdWVuY2VyLmM6MjAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBn4bq3cCBs4buXaSDEkeG7jWMgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBzZXF1ZW5jZXIuYzoyMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IGfhurdwIGzhu5dpIGtoaSBsw6BtIHTGsMahaSBt4bubaSBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IHNlcXVlbmNlci5jOjIxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgYWNjZXB0IGFyZ3VtZW50czogJyVzJyIKK21zZ3N0ciAiJXMga2jDtG5nIG5o4bqtbiBjw6FjIMSR4buRaSBz4buROiDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6MjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50cyBmb3IgJXMiCittc2dzdHIgInRoaeG6v3UgxJHhu5FpIHPhu5EgY2hvICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY8O6IHBow6FwIOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzoyMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiZMOybmcga2jDtG5nIGjhu6NwIGzhu4cgJWQ6ICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjIyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIOKAnCVz4oCdIHRo4buDIG3DoCBraMO0bmcgY8OzIGzhuqduIGNodXnhu4NuIGdpYW8ga+G6vyB0csaw4bubYyIKKworIzogc2VxdWVuY2VyLmM6MjI5OAorbXNnaWQgImNhbmNlbGxpbmcgYSBjaGVycnkgcGlja2luZyBpbiBwcm9ncmVzcyIKK21zZ3N0ciAixJFhbmcgaOG7p3kgYuG7jyB0aGFvIHTDoWMgY2hlcnJ5IHBpY2sgxJFhbmcgdGjhu7FjIGhp4buHbiIKKworIzogc2VxdWVuY2VyLmM6MjMwNQorbXNnaWQgImNhbmNlbGxpbmcgYSByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIsSRYW5nIGjhu6d5IGLhu48gY8OhYyB0aGFvIHTDoWMgaG/DoG4gbmd1ecOqbiDEkWFuZyB0aOG7sWMgaGnhu4duIgorCisjOiBzZXF1ZW5jZXIuYzoyMzQ5Cittc2dpZCAicGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgInZ1aSBsw7JuZyBz4butYSBs4buXaSBuw6B5IGLhurFuZyBjw6FjaCBkw7luZyDigJxnaXQgcmViYXNlIC0tZWRpdC10b2Rv4oCdLiIKKworIzogc2VxdWVuY2VyLmM6MjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJyVzJyIKK21zZ3N0ciAiYuG6o25nIGNo4buJIHRo4buLIGtow7RuZyB0aOG7gyBkw7luZyDEkcaw4bujYzogJXMiCisKKyM6IHNlcXVlbmNlci5jOjIzNTYKK21zZ2lkICJubyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgImtow7RuZyBjw7MgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6BvIMSRxrDhu6NjIHBow6JuIHTDrWNoLiIKKworIzogc2VxdWVuY2VyLmM6MjM2NworbXNnaWQgImNhbm5vdCBjaGVycnktcGljayBkdXJpbmcgYSByZXZlcnQuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY2hlcnJ5LXBpY2sgdHJvbmcga2hpIGhvw6BuIG5ndXnDqm4uIgorCisjOiBzZXF1ZW5jZXIuYzoyMzY5Cittc2dpZCAiY2Fubm90IHJldmVydCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgImtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIHZp4buHYyBob8OgbiBuZ3V5w6puIHRyb25nIGtoaSDEkWFuZyBjaGVycnktcGljay4iCisKKyM6IHNlcXVlbmNlci5jOjI0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJnacOhIHRy4buLIGNobyAlcyBraMO0bmcgaOG7o3AgbOG7hzogJXMiCisKKyM6IHNlcXVlbmNlci5jOjI1NDAKK21zZ2lkICJ1bnVzYWJsZSBzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLW9udG8ga2jDtG5nIGTDuW5nIMSRxrDhu6NjIgorCisjOiBzZXF1ZW5jZXIuYzoyNTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAnJXMnIgorbXNnc3RyICJi4bqjbmcgdMO5eSBjaOG7jW4gZOG7iyBow6xuaDog4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjI2NDQgc2VxdWVuY2VyLmM6NDM2MQorbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICJs4bqnbiBjaHV54buDbiBnaWFvIHRy4buRbmcgcuG7l25nIMSR4bq3dCBsw6AgaOG7o3AgcXV5IGPDoWNoIgorCisjOiBzZXF1ZW5jZXIuYzoyNjYwCittc2dpZCAicmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImPDsyB0aGFvIHTDoWMgaG/DoG4gbmd1ecOqbiDEkWFuZyDEkcaw4bujYyB0aOG7sWMgaGnhu4duIgorCisjOiBzZXF1ZW5jZXIuYzoyNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgImjDo3kgdGjhu60gXCJnaXQgcmV2ZXJ0ICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorCisjOiBzZXF1ZW5jZXIuYzoyNjY1Cittc2dpZCAiY2hlcnJ5LXBpY2sgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiY8OzIHRoYW8gdMOhYyDigJxjaGVycnktcGlja+KAnSDEkWFuZyDEkcaw4bujYyB0aOG7sWMgaGnhu4duIgorCisjOiBzZXF1ZW5jZXIuYzoyNjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAiaMOjeSB0aOG7rSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKKworIzogc2VxdWVuY2VyLmM6MjY4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIHRoxrAgbeG7pWMgeOG6v3AgZMOjeSDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6MjY5NgorbXNnaWQgImNvdWxkIG5vdCBsb2NrIEhFQUQiCittc2dzdHIgImtow7RuZyB0aOG7gyBraMOzYSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU2IHNlcXVlbmNlci5jOjQwOTkKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImtow7RuZyBjaGVycnktcGljayBoYXkgaG/DoG4gbmd1ecOqbiB0cm9uZyB0aeG6v24gdHLDrG5oIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU4IHNlcXVlbmNlci5jOjI3NjkKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI3NjAgc2VxdWVuY2VyLmM6MjgwNAorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgaOG7p3kgYuG7jyB04burIG3hu5l0IG5ow6FuaCBtw6AgbsOzIGPDsm4gY2jGsGEgxJHGsOG7o2MgdOG6oW8gcmEiCisKKyM6IHNlcXVlbmNlci5jOjI3OTAgYnVpbHRpbi9ncmVwLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgImtow7RuZyBt4bufIMSRxrDhu6NjIOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzoyNzkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyc6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIOKAnCVz4oCdOiAlcyIKKworIzogc2VxdWVuY2VyLmM6Mjc5MworbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgImfhurdwIGvhur90IHRow7pjIHThuq1wIHRpbiDEkeG7mXQgeHXhuqV0IgorCisjOiBzZXF1ZW5jZXIuYzoyNzk5CisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAidOG6rXAgdGluIEhFQUQg4oCccHJlLWNoZXJyeS1waWNr4oCdIMSRw6MgbMawdSDigJwlc+KAnSBi4buLIGjhu49uZyIKKworIzogc2VxdWVuY2VyLmM6MjgxMAorbXNnaWQgIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRC4gTm90IHJld2luZGluZywgY2hlY2sgeW91ciBIRUFEISIKK21zZ3N0ciAiIgorIkLhuqFuIGPDsyBs4bq9IMSRw6MgY8OzIEhFQUQgxJHDoyBi4buLIGRpIGNodXnhu4NuIMSRaSwgS2jDtG5nIHRo4buDIHR1YSwga2nhu4NtIHRyYSBIRUFEIGPhu6dhICIKKyJi4bqhbiEiCisKKyM6IHNlcXVlbmNlci5jOjI4NTEKK21zZ2lkICJubyByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImtow7RuZyBjw7MgdGnhur9uIHRyw6xuaCBob8OgbiBuZ3V5w6puIG7DoG8iCisKKyM6IHNlcXVlbmNlci5jOjI4NTkKK21zZ2lkICJubyBjaGVycnktcGljayBpbiBwcm9ncmVzcyIKK21zZ3N0ciAia2jDtG5nIGPDsyBjaGVycnktcGljayDEkWFuZyDEkcaw4bujYyB0aOG7sWMgaGnhu4duIgorCisjOiBzZXF1ZW5jZXIuYzoyODY5Cittc2dpZCAiZmFpbGVkIHRvIHNraXAgdGhlIGNvbW1pdCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGLhu48gcXVhIMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIgorCisjOiBzZXF1ZW5jZXIuYzoyODc2Cittc2dpZCAidGhlcmUgaXMgbm90aGluZyB0byBza2lwIgorbXNnc3RyICLhu58gxJHDonkga2jDtG5nIGPDsyBnw6wgxJHhu4MgbcOgIGLhu48gcXVhIGPhuqMiCisKKyM6IHNlcXVlbmNlci5jOjI4NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImhhdmUgeW91IGNvbW1pdHRlZCBhbHJlYWR5P1xuIgorInRyeSBcImdpdCAlcyAtLWNvbnRpbnVlXCIiCittc2dzdHIgIiIKKyJi4bqhbiDEkcOjIHPhurVuIHPDoG5nIGNodXnhu4NuIGdpYW8gY2jGsGE/XG4iCisidGjhu60gXCJnaXQgJXMgLS1jb250aW51ZVwiIgorCisjOiBzZXF1ZW5jZXIuYzozMDAzIHNlcXVlbmNlci5jOjQwMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCAlcyIKKworIzogc2VxdWVuY2VyLmM6MzA0MiBzZXF1ZW5jZXIuYzozOTkxCittc2dpZCAiY2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNow6lwIOKAnCVz4oCdIHNhbmcg4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjMwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJC4bqhbiBjw7MgdGjhu4MgdHUgYuG7lSBs4bqnbiBjaHV54buDbiBnaWFvIG5nYXkgYsOieSBnaeG7nSBi4bqxbmc6XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJN4buZdCBraGkgxJHDoyBow6BpIGzDsm5nIHbhu5tpIG5o4buvbmcgdGhheSDEkeG7lWkgY+G7p2EgbcOsbmgsIHRow6wgY2jhuqF5OlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjMwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICVzLi4uICUuKnMiCittc2dzdHIgIktow7RuZyB0aOG7gyDDoXAgZOG7pW5nICVz4oCmICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjMwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1lcmdlICUuKnMiCittc2dzdHIgIktow7RuZyBow7JhIHRy4buZbiAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzozMDk4IHNlcXVlbmNlci5jOjMxMDIgYnVpbHRpbi9kaWZmdG9vbC5jOjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBjaMOpcCDigJwlc+KAnSBzYW5nIOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzozMTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gZmFpbGVkOiAlc1xuIgorIiVzWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJ0aOG7sWMgdGhpIGfhurdwIGzhu5dpOiAlc1xuIgorIiVzQuG6oW4gY8OzIHRo4buDIHPhu61hIGPDoWMgdHLhu6VjIHRy4bq3YywgdsOgIHNhdSDEkcOzIGNo4bqheSBs4buHbmhcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMTM1Cittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKK21zZ3N0ciAidsOgIHThuqFvIGPDoWMgdGhheSDEkeG7lWkgYuG6o25nIG3hu6VjIGzhu6VjIHbDoC9oYXkgY8OieSBsw6BtIHZp4buHY1xuIgorCisjOiBzZXF1ZW5jZXIuYzozMTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gc3VjY2VlZGVkOiAlc1xuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorInRo4buxYyB0aGkgdGjDoG5oIGPDtG5nOiAlc1xuIgorIm5oxrBuZyBjw7JuIGPDoWMgdGhheSDEkeG7lWkgdHJvbmcgbeG7pWMgbOG7pWMgdsOgL2hv4bq3YyBjw6J5IGzDoG0gdmnhu4djXG4iCisiQ2h1eeG7g24gZ2lhbyBoYXkgdOG6oW0gY+G6pXQgY8OhYyB0aGF5IMSR4buVaSBuw6B5IMSRaSwgcuG7k2kgY2jhuqF5XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogc2VxdWVuY2VyLmM6MzIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGxhYmVsIG5hbWU6ICclLipzJyIKK21zZ3N0ciAidMOqbiBuaMOjbiBk4buLIGjDrG5oOiDigJwlLipz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzozMjU2Cittc2dpZCAid3JpdGluZyBmYWtlIHJvb3QgY29tbWl0IgorbXNnc3RyICJnaGkgbOG6p24gY2h1eeG7g24gZ2lhbyBn4buRYyBnaeG6oyIKKworIzogc2VxdWVuY2VyLmM6MzI2MQorbXNnaWQgIndyaXRpbmcgc3F1YXNoLW9udG8iCittc2dzdHIgIsSRYW5nIGdoaSBzcXVhc2gtb250byIKKworIzogc2VxdWVuY2VyLmM6MzI5OSBidWlsdGluL3JlYmFzZS5jOjg4MCBidWlsdGluL3JlYmFzZS5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdMOsbSBjw6J5IGPhu6dhICVzIgorCisjOiBzZXF1ZW5jZXIuYzozMzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kg4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjMzNzUKK21zZ2lkICJjYW5ub3QgbWVyZ2Ugd2l0aG91dCBhIGN1cnJlbnQgcmV2aXNpb24iCittc2dzdHIgImtow7RuZyB0aOG7gyBow7JhIHRy4buZbiBtw6Aga2jDtG5nIGPDsyBt4buZdCDEkWnhu4NtIHjDqXQgZHV54buHdCBoaeG7h24gdOG6oWkiCisKKyM6IHNlcXVlbmNlci5jOjMzOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclLipzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIOKAnCUuKnPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjM0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBtZXJnZTogJyUuKnMnIgorbXNnc3RyICJjaOG6s25nIGPDsyBnw6wgxJHhu4MgaMOyYSB0cuG7mW46IOKAnCUuKnPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjM0MTgKK21zZ2lkICJvY3RvcHVzIG1lcmdlIGNhbm5vdCBiZSBleGVjdXRlZCBvbiB0b3Agb2YgYSBbbmV3IHJvb3RdIgorbXNnc3RyICJow7JhIHRy4buZbiBvY3RvcHVzIGtow7RuZyB0aOG7gyDEkcaw4bujYyB0aOG7sWMgdGhpIHRyw6puIMSR4buJbmggY+G7p2EgbeG7mXQgW25ldyByb290XSIKKworIzogc2VxdWVuY2VyLmM6MzQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIG9mICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSBjaMO6IHRow61jaCBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIGPhu6dhIOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzozNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBldmVuIGF0dGVtcHQgdG8gbWVyZ2UgJyUuKnMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbmdheSBj4bqjIGtoaSB0aOG7rSBow7JhIHRy4buZbiDigJwlLipz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzozNjEwCittc2dpZCAibWVyZ2U6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAibWVyZ2U6IEtow7RuZyB0aOG7gyBnaGkgdOG6rXAgdGluIGzGsHUgYuG6o25nIG3hu6VjIGzhu6VjIG3hu5tpIgorCisjOiBzZXF1ZW5jZXIuYzozNjc5IGJ1aWx0aW4vcmViYXNlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLlxuIgorbXNnc3RyICLEkMOjIMOhcCBk4bulbmcgYXV0b3N0YXNoLlxuIgorCisjOiBzZXF1ZW5jZXIuYzozNjkxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4butIGzGsHUg4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjM2OTQgYnVpbHRpbi9yZWJhc2UuYzo3NTMgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKyJZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLlxuIgorIllvdSBjYW4gcnVuIFwiZ2l0IHN0YXNoIHBvcFwiIG9yIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdCBhbnkgdGltZS5cbiIKK21zZ3N0ciAiIgorIsOBcCBk4bulbmcgYXV0b3N0YXNoIGPDsyBoaeG7h3UgcXXhuqMgdHJvbmcgY8OhYyB4dW5nIMSR4buZdC5cbiIKKyJDw6FjIHRoYXkgxJHhu5VpIGPhu6dhIGLhuqFuIGFuIHRvw6BuIHRyb25nIHN0YXNoICh04bqhbSBj4bqldCDEkWkpLlxuIgorIkLhuqFuIGPDsyB0aOG7gyBjaOG6oXkgbOG7h25oIFwiZ2l0IHN0YXNoIHBvcFwiIGhheSBcImdpdCBzdGFzaCBkcm9wXCIgYuG6pXQga+G7syBsw7pjICIKKyJuw6BvLlxuIgorCisjOiBzZXF1ZW5jZXIuYzozNzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSB2YWxpZCBPSUQiCittc2dzdHIgIiVzIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IE9JRCBo4bujcCBs4buHIgorCisjOiBzZXF1ZW5jZXIuYzozNzYwIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NzkKK21zZ2lkICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgImtow7RuZyB0aOG7gyB0w6FjaCBy4budaSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozNzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgSEVBRFxuIgorbXNnc3RyICJE4burbmcgbOG6oWkg4bufIEhFQURcbiIKKworIzogc2VxdWVuY2VyLmM6Mzc3NworIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzXG4iCittc2dzdHIgIkThu6tuZyBs4bqhaSDhu58gJXNcbiIKKworIzogc2VxdWVuY2VyLmM6Mzc4NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGV4ZWN1dGUgdGhlIHRvZG8gY29tbWFuZFxuIgorIlxuIgorIiAgICAlLipzXG4iCisiSXQgaGFzIGJlZW4gcmVzY2hlZHVsZWQ7IFRvIGVkaXQgdGhlIGNvbW1hbmQgYmVmb3JlIGNvbnRpbnVpbmcsIHBsZWFzZVxuIgorImVkaXQgdGhlIHRvZG8gbGlzdCBmaXJzdDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyB0aOG7sWMgdGhpIGzhu4duaCB0b2RvXG4iCisiXG4iCisiICAgICUuKnNcbiIKKyJOw7MgxJHDoyDEkcaw4bujYyBsw6puIGzhu4tjaCBs4bqhaTogxJDhu4Mgc+G7rWEgbOG7h25oIHRyxrDhu5tjIGtoaSB0aeG6v3AgdOG7pWMsIHZ1aSBsw7JuZ1xuIgorInPhu61hIGRhbmggc8OhY2ggdG9kbyB0csaw4bubYzpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6Mzg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzLi4uICAlLipzXG4iCittc2dzdHIgIkThu6tuZyBs4bqhaSDhu58gJXPigKYgICUuKnNcbiIKKworIzogc2VxdWVuY2VyLmM6Mzk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQgJWQiCittc2dzdHIgImtow7RuZyBoaeG7g3UgY8OidSBs4buHbmggJWQiCisKKyM6IHNlcXVlbmNlci5jOjM5OTkKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvcmlnLWhlYWQiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgb3JpZy1oZWFkIgorCisjOiBzZXF1ZW5jZXIuYzo0MDA0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ29udG8nIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIOKAnG9udG/igJ0uIgorCisjOiBzZXF1ZW5jZXIuYzo0MDE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgSEVBRCB0byAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCBIRUFEIHRow6BuaCAlcyIKKworIzogc2VxdWVuY2VyLmM6NDExMQorbXNnaWQgImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY+G6o2kgdOG7lTogQuG6oW4gY8OzIGPDoWMgdGhheSDEkeG7lWkgY2jGsGEgxJHGsOG7o2MgxJHGsGEgbMOqbiBi4buHIHBow7NuZy4iCisKKyM6IHNlcXVlbmNlci5jOjQxMjAKK21zZ2lkICJjYW5ub3QgYW1lbmQgbm9uLWV4aXN0aW5nIGNvbW1pdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHR1IGLhu48gbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyBraMO0bmcgdOG7k24gdOG6oWkiCisKKyM6IHNlcXVlbmNlci5jOjQxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBmaWxlOiAnJXMnIgorbXNnc3RyICJ04bqtcCB0aW4ga2jDtG5nIGjhu6NwIGzhu4c6IOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzo0MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29udGVudHM6ICclcyciCittc2dzdHIgIm7hu5lpIGR1bmcga2jDtG5nIGjhu6NwIGzhu4c6IOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzo0MTI3Cittc2dpZCAiIgorIlxuIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSwgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisiXG4iCisiQuG6oW4gY8OzIGPDoWMgdGhheSDEkeG7lWkgY2jGsGEgY2h1eeG7g24gZ2lhbyB0cm9uZyB0aMawIG3hu6VjIGzDoG0gdmnhu4djLiBWdWkgbMOybmdcbiIKKyJjaHV54buDbiBnaWFvIGNow7puZyB0csaw4bubYyB2w6Agc2F1IMSRw7MgY2jhuqF5IGzhu4duaCDigJxnaXQgcmViYXNlIC0tY29udGludWXigJ0gbOG6p24gbuG7r2EuIgorCisjOiBzZXF1ZW5jZXIuYzo0MTYzIHNlcXVlbmNlci5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGZpbGU6ICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgdOG6rXAgdGluOiDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6NDIxNworbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHjDs2EgYuG7jyBDSEVSUllfUElDS19IRUFEIgorCisjOiBzZXF1ZW5jZXIuYzo0MjI0Cittc2dpZCAiY291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgImtow7RuZyB0aOG7gyBjaHV54buDbiBnaWFvIGPDoWMgdGhheSDEkeG7lWkgxJHDoyDEkcawYSBsw6puIGLhu4cgcGjDs25nLiIKKworIzogc2VxdWVuY2VyLmM6NDMzOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiJXM6IGtow7RuZyB0aOG7gyBjaGVycnktcGljayBt4buZdCAlcyIKKworIzogc2VxdWVuY2VyLmM6NDM0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlczogxJFp4buDbSB4w6l0IGR1eeG7h3Qgc2FpIgorCisjOiBzZXF1ZW5jZXIuYzo0Mzc3Cittc2dpZCAiY2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgaG/DoG4gbmd1ecOqbiBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIGto4bufaSB04bqhbyIKKworIzogc2VxdWVuY2VyLmM6NDg0NgorbXNnaWQgIm1ha2Vfc2NyaXB0OiB1bmhhbmRsZWQgb3B0aW9ucyIKK21zZ3N0ciAibWFrZV9zY3JpcHQ6IGPDoWMgdMO5eSBjaOG7jW4gxJHGsOG7o2Mga2jDtG5nIHjhu60gbMO9IgorCisjOiBzZXF1ZW5jZXIuYzo0ODQ5Cittc2dpZCAibWFrZV9zY3JpcHQ6IGVycm9yIHByZXBhcmluZyByZXZpc2lvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB0OiBs4buXaSBjaHXhuqluIGLhu4sgxJFp4buDbSBoaeG7h3UgY2jhu4luaCIKKworIzogc2VxdWVuY2VyLmM6NTA4MyBzZXF1ZW5jZXIuYzo1MTAwCittc2dpZCAibm90aGluZyB0byBkbyIKK21zZ3N0ciAia2jDtG5nIGPDsyBnw6wgxJHhu4MgbMOgbSIKKworIzogc2VxdWVuY2VyLmM6NTExOQorbXNnaWQgImNvdWxkIG5vdCBza2lwIHVubmVjZXNzYXJ5IHBpY2sgY29tbWFuZHMiCittc2dzdHIgImtow7RuZyB0aOG7gyBi4buPIHF1YSBjw6FjIGzhu4duaCBj4bqteSAocGljaykga2jDtG5nIGPhuqduIHRoaeG6v3QiCisKKyM6IHNlcXVlbmNlci5jOjUyMTMKK21zZ2lkICJ0aGUgc2NyaXB0IHdhcyBhbHJlYWR5IHJlYXJyYW5nZWQuIgorbXNnc3RyICJ2xINuIGzhu4duaCDEkcOjIHPhurVuIMSRxrDhu6NjIHPhuq9wIMSR4bq3dCBy4buTaS4iCisKKyM6IHNldHVwLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IGF0ICclcyciCittc2dzdHIgIuKAnCVz4oCdIG5nb8OgaSBt4buZdCBraG8gY2jhu6lhIHThuqFpICclcyciCisKKyM6IHNldHVwLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogbm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICdnaXQgPGNvbW1hbmQ+IC0tIDxwYXRoPi4uLicgdG8gc3BlY2lmeSBwYXRocyB0aGF0IGRvIG5vdCBleGlzdCBsb2NhbGx5LiIKK21zZ3N0ciAiIgorIiVzOiBraMO0bmcgY8OzIMSRxrDhu51uZyBk4bqrbiBuw6BvIG5oxrAgdGjhur8g4bufIHRyb25nIGPDonkgbMOgbSB2aeG7h2MuXG4iCisiRMO5bmcg4oCcZ2l0IDxs4buHbmg+IC0tIDzEkcaw4budbmcvZOG6q24+4oCm4oCdIMSR4buDIGNo4buJIMSR4buLbmggxJHGsOG7nW5nIGThuqtuIG3DoCBuw7Mga2jDtG5nIHThu5NuIHThuqFpICIKKyJt4buZdCBjw6FjaCBu4buZaSBi4buZLiIKKworIzogc2V0dXAuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiB1bmtub3duIHJldmlzaW9uIG9yIHBhdGggbm90IGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisidGhhbSBz4buRIGNoxrBhIHLDtSByw6BuZyDigJwlc+KAnTogY2jGsGEgYmnhur90IMSRaeG7g20geGVtIHjDqXQgaGF5IMSRxrDhu51uZyBk4bqrbiBraMO0bmcgdHJvbmcgIgorImPDonkgbMOgbSB2aeG7h2MuXG4iCisiRMO5bmcg4oCcLS3igJ0gxJHhu4MgbmfEg24gY8OhY2ggY8OhYyDEkcaw4budbmcgZOG6q24ga2jhu49pIMSRaeG7g20geGVtIHjDqXQsIG5oxrAgdGjhur8gbsOgeTpcbiIKKyLigJxnaXQgPGzhu4duaD4gWzzEkWnhu4NtIHhlbSB4w6l0PuKApl0gLS0gWzx04bqtcCB0aW4+4oCmXeKAnSIKKworIzogc2V0dXAuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICclcycgbXVzdCBjb21lIGJlZm9yZSBub24tb3B0aW9uIGFyZ3VtZW50cyIKK21zZ3N0ciAidMO5eSBjaOG7jW4g4oCcJXPigJ0gcGjhuqNpIHRyxrDhu5tjIGPDoWMgxJHhu5FpIHPhu5EgxJHhuqd1IHRpw6puIGtow7RuZyBjw7MgdMO5eSBjaOG7jW4iCisKKyM6IHNldHVwLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWVcbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyJ0aGFtIHPhu5EgY2jGsGEgcsO1IHLDoG5nIOKAnCVz4oCdOiBj4bqjIMSRaeG7g20geGVtIHjDqXQgdsOgIHTDqm4gdOG6rXAgdGluLlxuIgorIkTDuW5nIOKAnC0t4oCdIMSR4buDIG5nxINuIGPDoWNoIGPDoWMgxJHGsOG7nW5nIGThuqtuIGto4buPaSDEkWnhu4NtIHhlbSB4w6l0LCBuaMawIHRo4bq/IG7DoHk6XG4iCisi4oCcZ2l0IDxs4buHbmg+IFs8xJFp4buDbSB4ZW0geMOpdD7igKZdIC0tIFs8dOG6rXAgdGluPuKApl3igJ0iCisKKyM6IHNldHVwLmM6NDA5Cittc2dpZCAidW5hYmxlIHRvIHNldCB1cCB3b3JrIHRyZWUgdXNpbmcgaW52YWxpZCBjb25maWciCittc2dzdHIgImtow7RuZyB0aOG7gyBjw6BpIMSR4bq3dCB0aMawIG3hu6VjIGzDoG0gdmnhu4djIHPhu60gZOG7pW5nIGPhuqV1IGjDrG5oIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBzZXR1cC5jOjQxMworbXNnaWQgInRoaXMgb3BlcmF0aW9uIG11c3QgYmUgcnVuIGluIGEgd29yayB0cmVlIgorbXNnc3RyICJ0aGFvIHTDoWMgbsOgeSBwaOG6o2kgxJHGsOG7o2MgdGjhu7FjIGhp4buHbiB0cm9uZyB0aMawIG3hu6VjIGzDoG0gdmnhu4djIgorCisjOiBzZXR1cC5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCBnaXQgcmVwbyB2ZXJzaW9uIDw9ICVkLCBmb3VuZCAlZCIKK21zZ3N0ciAiQ+G6p24gcGhpw6puIGLhuqNuIGtobyBnaXQgPD0gJWQsIG5oxrBuZyBs4bqhaSBuaOG6rW4gxJHGsOG7o2MgJWQiCisKKyM6IHNldHVwLmM6NTY3Cittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICJ0w6xtIHRo4bqleSBwaOG6p24gbeG7nyBy4buZbmcga2hvIGNoxrBhIGJp4bq/dDoiCisKKyM6IHNldHVwLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIG3hu58g4oCcJXPigJ0iCisKKyM6IHNldHVwLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBsYXJnZSB0byBiZSBhIC5naXQgZmlsZTogJyVzJyIKK21zZ3N0ciAidOG6rXAgdGluIC5naXQgbMOgIHF1w6EgbOG7m246IOKAnCVz4oCdIgorCisjOiBzZXR1cC5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHhu41jICVzIgorCisjOiBzZXR1cC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGdpdGZpbGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAixJHhu4tuaCBk4bqhbmcgdOG6rXAgdGluIGdpdCBraMO0bmcgaOG7o3AgbOG7hzogJXMiCisKKyM6IHNldHVwLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHBhdGggaW4gZ2l0ZmlsZTogJXMiCittc2dzdHIgImtow7RuZyBjw7MgxJHGsOG7nW5nIGThuqtuIHRyb25nIHThuq1wIHRpbiBnaXQ6ICVzIgorCisjOiBzZXR1cC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgImtow7RuZyBwaOG6o2kgbMOgIGtobyBnaXQ6ICVzIgorCisjOiBzZXR1cC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICInJCVzJyB0b28gYmlnIgorbXNnc3RyICLigJwkJXPigJ0gcXXDoSBs4bubbiIKKworIzogc2V0dXAuYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciCittc2dzdHIgImtow7RuZyBwaOG6o2kgbMOgIGtobyBnaXQ6IOKAnCVz4oCdIgorCisjOiBzZXR1cC5jOjczOCBzZXR1cC5jOjc0MCBzZXR1cC5jOjc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNoZGlyIChjaHV54buDbiDEkeG7lWkgdGjGsCBt4bulYykgc2FuZyDigJwlc+KAnSIKKworIzogc2V0dXAuYzo3NDMgc2V0dXAuYzo3OTkgc2V0dXAuYzo4MDkgc2V0dXAuYzo4NDggc2V0dXAuYzo4NTYKK21zZ2lkICJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHF1YXkgbOG6oWkgY3dkIgorCisjOiBzZXR1cC5jOjg3MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJSpzJXMlcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBs4bqleSB0aOG7kW5nIGvDqiB24buBIOKAnCUqcyVzJXPigJ0iCisKKyM6IHNldHVwLmM6MTEwOAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBoaeG7h24gaMOgbmgiCisKKyM6IHNldHVwLmM6MTExNyBzZXR1cC5jOjExMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoYW5nZSB0byAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY2h1eeG7g24gc2FuZyDigJwlc+KAnSIKKworIzogc2V0dXAuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIgorbXNnc3RyICJraMO0bmcgcGjhuqNpIGzDoCBraG8gZ2l0IChob+G6t2MgYuG6pXQga+G7syB0aMawIG3hu6VjIGNoYSBt4bq5IG7DoG8pOiAlcyIKKworIzogc2V0dXAuYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IHBhcmVudCB1cCB0byBtb3VudCBwb2ludCAlcylcbiIKKyJTdG9wcGluZyBhdCBmaWxlc3lzdGVtIGJvdW5kYXJ5IChHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNIG5vdCBzZXQpLiIKK21zZ3N0ciAiIgorImtow7RuZyBwaOG6o2kgbMOgIGtobyBnaXQgKGhheSBi4bqldCBr4buzIGNoYSBt4bq5IG7DoG8gxJHhur9uIHThuq1uIMSRaeG7g20gZ+G6r24ga+G6v3QgJXMpXG4iCisiROG7q25nIHThuqFpIGJpw6puIGPhu6dhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gY2jGsGEgIgorIsSR4bq3dCkuIgorCisjOiBzZXR1cC5jOjEyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgKDAlLjNvKS5cbiIKKyJUaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKyJn4bq3cCB24bqlbiDEkeG7gSB24bubaSBnacOhIHRy4buLIGNo4bq/IMSR4buZIHThuq1wIHRpbiBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgKDAlLjNvKS5cbiIKKyJuZ8aw4budaSBz4bufIGjhu691IHThuq1wIHRpbiBwaOG6o2kgbHXDtG4gY8OzIHF1eeG7gW4gxJHhu41jIHbDoCBnaGkuIgorCisjOiBzZXR1cC5jOjEyODkKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBvciBkdXAgZmFpbGVkIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgbeG7nyDigJwvZGV2L251bGzigJ0gaGF5IGR1cCIKKworIzogc2V0dXAuYzoxMzA0Cittc2dpZCAiZm9yayBmYWlsZWQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBy4bq9IG5ow6FuaCB0aeG6v24gdHLDrG5oIgorCisjOiBzZXR1cC5jOjEzMDkKK21zZ2lkICJzZXRzaWQgZmFpbGVkIgorbXNnc3RyICJzZXRzaWQgZ+G6t3AgbOG7l2kiCisKKyM6IHNoYTEtZmlsZS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0OyBjaGVjayAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorbXNnc3RyICIiCisidGjGsCBt4bulYyDEkeG7kWkgdMaw4bujbmcgJXMga2jDtG5nIHThu5NuIHThuqFpOyBraeG7g20gdHJhIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiCisKKyM6IHNoYTEtZmlsZS5jOjUwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIGFsdGVybmF0ZSBvYmplY3QgcGF0aDogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB0aMaw4budbmcgaMOzYSDEkcaw4budbmcgZOG6q24gxJHhu5FpIHTGsOG7o25nIHRoYXkgdGjhur86IOKAnCVz4oCdIgorCisjOiBzaGExLWZpbGUuYzo1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGlnbm9yaW5nIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzLCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICIlczogxJFhbmcgYuG7jyBxdWEga2hvIMSR4buRaSB0xrDhu6NuZyB0aGF5IHRo4bq/LCBs4buTbmcgbmhhdSBxdcOhIHPDonUiCisKKyM6IHNoYTEtZmlsZS5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIG9iamVjdCBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY2h14bqpbiBow7NhIHRoxrAgbeG7pWMgxJHhu5FpIHTGsOG7o25nOiDigJwlc+KAnSIKKworIzogc2hhMS1maWxlLmM6NjI1Cittc2dpZCAidW5hYmxlIHRvIGZkb3BlbiBhbHRlcm5hdGVzIGxvY2tmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZmRvcGVuIHThuq1wIHRpbiBraMOzYSB0aGF5IHRo4bq/IgorCisjOiBzaGExLWZpbGUuYzo2NDMKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgdOG6rXAgdGluIHRoYXkgdGjhur8iCisKKyM6IHNoYTEtZmlsZS5jOjY1MAorbXNnaWQgInVuYWJsZSB0byBtb3ZlIG5ldyBhbHRlcm5hdGVzIGZpbGUgaW50byBwbGFjZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGRpIGNodXnhu4NuIHThuq1wIHRpbiB0aGF5IHRo4bq/IHbDoG8gY2jhu5ciCisKKyM6IHNoYTEtZmlsZS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSBraMO0bmcgdOG7k24gdOG6oWkiCisKKyM6IHNoYTEtZmlsZS5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGFzIGEgbGlua2VkIGNoZWNrb3V0IGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiIKK21zZ3N0ciAia2hvIHRoYW0gY2hp4bq/dSDigJwlc+KAnSBuaMawIGzDoCBs4bqleSByYSBsacOqbiBr4bq/dCB24bqrbiBjaMawYSDEkcaw4bujYyBo4buXIHRy4bujLiIKKworIzogc2hhMS1maWxlLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgImtobyB0aGFtIGNoaeG6v3Ug4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQga2hvIG7hu5lpIGLhu5kuIgorCisjOiBzaGExLWZpbGUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBzaGFsbG93IgorbXNnc3RyICJraG8gdGhhbSBjaGnhur91IOKAnCVz4oCdIGzDoCBuw7RuZyIKKworIzogc2hhMS1maWxlLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgZ3JhZnRlZCIKK21zZ3N0ciAia2hvIHRoYW0gY2hp4bq/dSDigJwlc+KAnSBi4buLIGPhuqV5IGdow6lwIgorCisjOiBzaGExLWZpbGUuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBsaW5lIHdoaWxlIHBhcnNpbmcgYWx0ZXJuYXRlIHJlZnM6ICVzIgorbXNnc3RyICJkw7JuZyBraMO0bmcgaOG7o3AgbOG7hyB0cm9uZyBraGkgcGjDom4gdMOtY2ggY8OhYyB0aGFtIGNoaeG6v3UgdGhheSB0aOG6vzogJXMiCisKKyM6IHNoYTEtZmlsZS5jOjk0MworIywgYy1mb3JtYXQKK21zZ2lkICJhdHRlbXB0aW5nIHRvIG1tYXAgJTxQUkl1TUFYPiBvdmVyIGxpbWl0ICU8UFJJdU1BWD4iCittc2dzdHIgIsSRYW5nIGPhu5EgxJHhu4MgbW1hcCAlPFBSSXVNQVg+IHbGsOG7o3QgcXXDoSBnaeG7m2kgaOG6oW4gJTxQUkl1TUFYPiIKKworIzogc2hhMS1maWxlLmM6OTY0Cittc2dpZCAibW1hcCBmYWlsZWQiCittc2dzdHIgIm1tYXAgZ+G6t3AgbOG7l2kiCisKKyM6IHNoYTEtZmlsZS5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGZpbGUgJXMgaXMgZW1wdHkiCittc2dzdHIgInThuq1wIHRpbiDEkeG7kWkgdMaw4bujbmcgJXMgdHLhu5FuZyBy4buXbmciCisKKyM6IHNoYTEtZmlsZS5jOjEyNjMgc2hhMS1maWxlLmM6MjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgbeG6pXQgaOG7j25nIOKAnCVz4oCdIgorCisjOiBzaGExLWZpbGUuYzoxMjY1IHNoYTEtZmlsZS5jOjI0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2FyYmFnZSBhdCBlbmQgb2YgbG9vc2Ugb2JqZWN0ICclcyciCittc2dzdHIgImfhurdwIHLDoWMgdOG6oWkgY3Xhu5FpIGPhu6dhIMSR4buRaSB0xrDhu6NuZyBi4buLIG3huqV0IOKAnCVz4oCdIgorCisjOiBzaGExLWZpbGUuYzoxMzA3Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSIKK21zZ3N0ciAia2nhu4N1IMSR4buRaSB0xrDhu6NuZyBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogc2hhMS1maWxlLmM6MTM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2nhuqNpIG7DqW4gcGjhuqduIMSR4bqndSBnw7NpICVzIHbhu5tpIC0tYWxsb3ctdW5rbm93bi10eXBlIgorCisjOiBzaGExLWZpbGUuYzoxMzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2nhuqNpIGfDs2kgcGjhuqduIMSR4bqndSAlcyIKKworIzogc2hhMS1maWxlLmM6MTQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBwaOG6p24gxJHhuqd1IGfDs2kgJXMgduG7m2kgLS1hbGxvdy11bmtub3duLXR5cGUiCisKKyM6IHNoYTEtZmlsZS5jOjE0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIHBo4bqnbiDEkeG6p3UgY+G7p2Eg4oCcJXPigJ0iCisKKyM6IHNoYTEtZmlsZS5jOjE2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHhu41jIMSR4buRaSB0xrDhu6NuZyDigJwlc+KAnSIKKworIzogc2hhMS1maWxlLmM6MTYzMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlbWVudCAlcyBub3QgZm91bmQgZm9yICVzIgorbXNnc3RyICJjJXMgdGhheSB0aOG6vyBraMO0bmcgxJHGsOG7o2MgdMOsbSB0aOG6pXkgY2hvICVzIgorCisjOiBzaGExLWZpbGUuYzoxNjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImxvb3NlIG9iamVjdCAlcyAoc3RvcmVkIGluICVzKSBpcyBjb3JydXB0IgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgbeG6pXQgJXMgKMSRxrDhu6NjIGzGsHUgdHJvbmcgJXMpIGLhu4sgaOG7j25nIgorCisjOiBzaGExLWZpbGUuYzoxNjQxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tlZCBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIMSRw6MgxJHDs25nIGfDs2kgJXMgKMSRxrDhu6NjIGzGsHUgdHJvbmcgJXMpIGLhu4sgaOG7j25nIgorCisjOiBzaGExLWZpbGUuYzoxNzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiAlcyIKKworIzogc2hhMS1maWxlLmM6MTc1MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHBlcm1pc3Npb24gdG8gJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4bq3dCBxdXnhu4FuIHRow6BuaCDigJwlc+KAnSIKKworIzogc2hhMS1maWxlLmM6MTc2MAorbXNnaWQgImZpbGUgd3JpdGUgZXJyb3IiCittc2dzdHIgImzhu5dpIGdoaSB04bqtcCB0aW4iCisKKyM6IHNoYTEtZmlsZS5jOjE3ODAKK21zZ2lkICJlcnJvciB3aGVuIGNsb3NpbmcgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgImfhurdwIGzhu5dpIHRyb25nIGtoaSDEkcOzbmcgdOG6rXAgdGluIMSR4buRaSB0xrDhu6NuZyIKKworIzogc2hhMS1maWxlLmM6MTg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgYWRkaW5nIGFuIG9iamVjdCB0byByZXBvc2l0b3J5IGRhdGFiYXNlICVzIgorbXNnc3RyICIiCisia2jDtG5nIMSR4bunIHRo4bqpbSBxdXnhu4FuIMSR4buDIHRow6ptIG3hu5l0IMSR4buRaSB0xrDhu6NuZyB2w6BvIGPGoSBz4bufIGThu68gbGnhu4d1IGtobyBjaOG7qWEgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE4NDcKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdOG6rXAgdGluIHThuqFtIHRo4budaSIKKworIzogc2hhMS1maWxlLmM6MTg3MQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSB04bqtcCB0aW4gxJHhu5FpIHTGsOG7o25nIMSRw6MgbeG6pXQiCisKKyM6IHNoYTEtZmlsZS5jOjE4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgbmV3IG9iamVjdCAlcyAoJWQpIgorbXNnc3RyICJraMO0bmcgdGjhu4MgeOG6oyBuw6luIMSR4buRaSB0xrDhu6NuZyBt4bubaSAlcyAoJWQpIgorCisjOiBzaGExLWZpbGUuYzoxODgxCisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGVFbmQgb24gb2JqZWN0ICVzIGZhaWxlZCAoJWQpIgorbXNnc3RyICJkZWZsYXRlRW5kIHRyw6puIMSR4buRaSB0xrDhu6NuZyAlcyBn4bq3cCBs4buXaSAoJWQpIgorCisjOiBzaGExLWZpbGUuYzoxODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZ1c2VkIGJ5IHVuc3RhYmxlIG9iamVjdCBzb3VyY2UgZGF0YSBmb3IgJXMiCittc2dzdHIgImNoxrBhIHLDtSByw6BuZyBiYW93aXIgZOG7ryBsaeG7h3Ugbmd14buTbiDEkeG7kWkgdMaw4bujbmcga2jDtG5nIOG7lW4gxJHhu4tuaCBjaG8gJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE4OTUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB1dGltZSgpIG9uICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSB1dGltZSgpIHRyw6puIOKAnCVz4oCdIgorCisjOiBzaGExLWZpbGUuYzoxOTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgxJHhu5FpIHTGsOG7o25nIGNobyAlcyIKKworIzogc2hhMS1maWxlLmM6MjAxMQorbXNnaWQgImNvcnJ1cHQgY29tbWl0IgorbXNnc3RyICJs4bqnbiBjaHV54buDbiBnaWFvIHNhaSBo4buPbmciCisKKyM6IHNoYTEtZmlsZS5jOjIwMTkKK21zZ2lkICJjb3JydXB0IHRhZyIKK21zZ3N0ciAidGjhursgc2FpIGjhu49uZyIKKworIzogc2hhMS1maWxlLmM6MjExOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIGVycm9yIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSDEkeG7jWMga2hpIMSRw6FuaCBt4bulYyBs4bulYyAlcyIKKworIzogc2hhMS1maWxlLmM6MjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCByZWFkIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICJraMO0bmcgxJHhu41jIG5n4bqvbiBraGkgxJHDoW5oIG3hu6VjIGzhu6VjICVzIgorCisjOiBzaGExLWZpbGUuYzoyMTk1IHNoYTEtZmlsZS5jOjIyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIKK21zZ3N0ciAiJXM6IGfhurdwIGzhu5dpIGtoaSB0aMOqbSB2w6BvIGPGoSBz4bufIGThu68gbGnhu4d1IgorCisjOiBzaGExLWZpbGUuYzoyMjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bnN1cHBvcnRlZCBmaWxlIHR5cGUiCittc2dzdHIgIiVzOiBraeG7g3UgdOG6rXAgdGluIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIgorCisjOiBzaGExLWZpbGUuYzoyMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIG9iamVjdCIKK21zZ3N0ciAiJXMga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgxJHhu5FpIHTGsOG7o25nIGjhu6NwIGzhu4ciCisKKyM6IHNoYTEtZmlsZS5jOjIyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiVzIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IMSR4buRaSB0xrDhu6NuZyDigJwlc+KAnSBo4bujcCBs4buHIgorCisjOiBzaGExLWZpbGUuYzoyMjY0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0NTQgc2hhMS1maWxlLmM6MjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIG1pc21hdGNoIGZvciAlcyAoZXhwZWN0ZWQgJXMpIgorbXNnc3RyICJtw6MgYsSDbSBraMO0bmcga2jhu5twIGNobyAlcyAoY+G6p24gJXMpIgorCisjOiBzaGExLWZpbGUuYzoyNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbW1hcCAlcyIKKworIzogc2hhMS1maWxlLmM6MjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdp4bqjaSBnw7NpIHBo4bqnbiDEkeG6p3UgY+G7p2Eg4oCcJXPigJ0iCisKKyM6IHNoYTEtZmlsZS5jOjI0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIHBo4bqnbiDEkeG6p3UgY+G7p2Eg4oCcJXPigJ0iCisKKyM6IHNoYTEtZmlsZS5jOjI1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayBjb250ZW50cyBvZiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdp4bqjaSBnw7NpIG7hu5lpIGR1bmcgY+G7p2Eg4oCcJXPigJ0iCisKKyM6IHNoYTEtbmFtZS5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCBTSEExICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAidMOzbSBsxrDhu6NjIFNIQTEgJXMgY2jGsGEgcsO1IHLDoG5nIgorCisjOiBzaGExLW5hbWUuYzo0OTcKK21zZ2lkICJUaGUgY2FuZGlkYXRlcyBhcmU6IgorbXNnc3RyICJDw6FjIOG7qW5nIGPhu60gbMOgOiIKKworIzogc2hhMS1uYW1lLmM6Nzk2Cittc2dpZCAiIgorIkdpdCBub3JtYWxseSBuZXZlciBjcmVhdGVzIGEgcmVmIHRoYXQgZW5kcyB3aXRoIDQwIGhleCBjaGFyYWN0ZXJzXG4iCisiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorIm1heSBiZSBjcmVhdGVkIGJ5IG1pc3Rha2UuIEZvciBleGFtcGxlLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorIkdpdCB0aMaw4budbmcga2jDtG5nIGJhbyBnaeG7nSB04bqhbyB0aGFtIGNoaeG6v3UgbcOgIG7DsyBr4bq/dCB0aMO6YyB24bubaSA0MCBrw70gdOG7sSBoZXhcbiIKKyJi4bufaSB2w6wgbsOzIHPhur0gYuG7iyBi4buPIHF1YSBraGkgYuG6oW4gY2jhu4kgxJHhu4tuaCA0MC1oZXguIE5o4buvbmcgdGhhbSBjaGnhur91IG7DoHlcbiIKKyJjw7MgbOG6vSDEkcaw4bujYyB04bqhbyByYSBi4bufaSBt4buZdCBzYWkgc8OzdCBuw6BvIMSRw7MuIFbDrSBk4bulLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ24bubaSBcIiRiclwiIGtow7RuZyBoaeG7g3UgbMO9IGRvIHbDrCBzYW8gdHLhu5FuZyBy4buXbmcgdsOgIG3hu5l0IHRoYW0gY2hp4bq/dSA0MC1oZXggxJHGsOG7o2MgIgorInThuqFvIHJhLlxuIgorIlhpbiBow6N5IGtp4buDbSB0cmEgbmjhu69uZyB0aGFtIGNoaeG6v3UgbsOgeSB2w6AgY8OzIHRo4buDIHjDs2EgY2jDum5nIMSRaS4gVOG6r3QgbOG7nWkgbmjhuq9uICIKKyJuw6B5XG4iCisiYuG6sW5nIGPDoWNoIGNo4bqheSBs4buHbmggXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIgorCisjOiBzaGExLW5hbWUuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciAnJS4qcycgb25seSBnb2VzIGJhY2sgdG8gJXMiCittc2dzdHIgIm5o4bqtdCBrw70gY2hvICclLipzJyBjaOG7iSDEkWkgbOG6oWkgY2hvICVzIgorCisjOiBzaGExLW5hbWUuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciAnJS4qcycgb25seSBoYXMgJWQgZW50cmllcyIKK21zZ3N0ciAibmjhuq10IGvDvSBjaG8gJyUuKnMnIGNo4buJIGPDsyAlZCBt4bulYyIKKworIzogc2hhMS1uYW1lLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gJyUuKnMnIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24g4oCcJXPigJ0gY8OzIOG7nyB0csOqbiDEkcSpYSwgbmjGsG5nIGtow7RuZyB0cm9uZyDigJwlLipz4oCdIgorCisjOiBzaGExLW5hbWUuYzoxNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXRoICclcycgZXhpc3RzLCBidXQgbm90ICclcydcbiIKKyJoaW50OiBEaWQgeW91IG1lYW4gJyUuKnM6JXMnIGFrYSAnJS4qczouLyVzJz8iCittc2dzdHIgIiIKKyLEkcaw4budbmcgZOG6q24gJyVzJyB04buTbiB04bqhaSwgbmjGsG5nIGtow7RuZyBwaOG6o2kgJyVzJ1xuIgorImfhu6NpIMO9OiBDw7MgcGjhuqNpIMO9IGLhuqFuIGzDoCAnJS4qczolcycgYWthICclLipzOi4vJXMnPyIKKworIzogc2hhMS1uYW1lLmM6MTcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QgaW4gJyUuKnMnIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24g4oCcJXPigJ0ga2jDtG5nIHThu5NuIHThuqFpIHRyb25nICclLipzJyIKKworIzogc2hhMS1uYW1lLmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicGF0aCAnJXMnIGlzIGluIHRoZSBpbmRleCwgYnV0IG5vdCBhdCBzdGFnZSAlZFxuIgorImhpbnQ6IERpZCB5b3UgbWVhbiAnOiVkOiVzJz8iCittc2dzdHIgIiIKKyLEkcaw4budbmcgZOG6q24gJyVzJyBu4bqxbSB0cm9uZyBjaOG7iSBt4bulYywgbmjGsG5nIGtow7RuZyBwaOG6o2kg4bufIGdpYWkgxJFv4bqhbiAlZFxuIgorImfhu6NpIMO9OiBDw7MgcGjhuqNpIMO9IGLhuqFuIGzDoCAnOiVkOiVzJz8iCisKKyM6IHNoYTEtbmFtZS5jOjE3NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInBhdGggJyVzJyBpcyBpbiB0aGUgaW5kZXgsIGJ1dCBub3QgJyVzJ1xuIgorImhpbnQ6IERpZCB5b3UgbWVhbiAnOiVkOiVzJyBha2EgJzolZDouLyVzJz8iCittc2dzdHIgIiIKKyLEkcaw4budbmcgZOG6q24gJyVzJyBu4bqxbSB0cm9uZyBjaOG7iSBt4bulYywgbmjGsG5nIGtow7RuZyBwaOG6o2kgJyVzJ1xuIgorImfhu6NpIMO9OiBDw7MgcGjhuqNpIMO9IGLhuqFuIGzDoCAnOiUgZDolcyAnIGFrYSAnOiVkOi4vJXMnPyIKKworIzogc2hhMS1uYW1lLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gdGhlIGluZGV4IgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gJyVzJyB04buTbiB04bqhaSB0csOqbiDEkcSpYSwgbmjGsG5nIGtow7RuZyBjw7MgdHJvbmcgY2jhu4kgbeG7pWMiCisKKyM6IHNoYTEtbmFtZS5jOjE3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IChuZWl0aGVyIG9uIGRpc2sgbm9yIGluIHRoZSBpbmRleCkiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSBraMO0bmcgdOG7k24gdOG6oWkgKGtow7RuZyB0csOqbiDEkcSpYSBjxaluZyBraMO0bmcgdHJvbmcgbeG7pWMgbOG7pWMpIgorCisjOiBzaGExLW5hbWUuYzoxNzcxCittc2dpZCAicmVsYXRpdmUgcGF0aCBzeW50YXggY2FuJ3QgYmUgdXNlZCBvdXRzaWRlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiY8O6IHBow6FwIMSRxrDhu51uZyBk4bqrbiB0xrDGoW5nIMSR4buRaSBraMO0bmcgdGjhu4MgdGjhu4MgZMO5bmcgbmdvw6BpIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IHNoYTEtbmFtZS5jOjE5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgbmFtZSAnJS4qcycuIgorbXNnc3RyICInJS4qcycga2jDtG5nIHBo4bqjaSBsw6AgdMOqbiDEkeG7kWkgdMaw4bujbmcgaOG7o3AgbOG7hyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlCisjOiBzdHJidWYuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCIgorbXNnc3RyICIldS4lMi4ydSBHaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgR2lCL2dpw6J5IgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUKKyM6IHN0cmJ1Zi5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIiCittc2dzdHIgIiV1LiUyLjJ1IE1pQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQi9zIgorbXNnc3RyICIldS4lMi4ydSBNaUIvZ2nDonkiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZQorIzogc3RyYnVmLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQiIKK21zZ3N0ciAiJXUuJTIuMnUgS2lCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCL3MiCittc2dzdHIgIiV1LiUyLjJ1IEtpQi9nacOieSIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUKKyM6IHN0cmJ1Zi5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlIgorbXNnaWRfcGx1cmFsICIldSBieXRlcyIKK21zZ3N0clswXSAiJXUgYnl0ZSIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnl0ZS9zIgorbXNnaWRfcGx1cmFsICIldSBieXRlcy9zIgorbXNnc3RyWzBdICIldSBieXRlL2dpw6J5IgorCisjOiBzdHJidWYuYzoxMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBlZGl0ICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBz4butYSDigJwlc+KAnSIKKworIzogc3VibW9kdWxlLmM6MTE0IHN1Ym1vZHVsZS5jOjE0MworbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdW5tZXJnZWQgLmdpdG1vZHVsZXMsIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIGZpcnN0IgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIHRoYXkgxJHhu5VpIC5naXRtb2R1bGVzIGNoxrBhIGjDsmEgdHLhu5luLCBow6N5IGdp4bqjaSBxdXnhur90IHh1bmcgxJHhu5l0IHRy4buZbiAiCisidHLGsOG7m2MiCisKKyM6IHN1Ym1vZHVsZS5jOjExOCBzdWJtb2R1bGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgcGjhuqduIHRyb25nIC5naXRtb2R1bGVzIG7GoWkgbcOgIMSRxrDhu51uZ19k4bqrbj0lcyIKKworIzogc3VibW9kdWxlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ+G7oSBi4buPIG3hu6VjIC5naXRtb2R1bGVzIGTDoG5oIGNobyAlcyIKKworIzogc3VibW9kdWxlLmM6MTY1Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHThu5UgY2jhu6ljIC5naXRtb2R1bGVzIMSRw6MgY+G6rXAgbmjhuq10IgorCisjOiBzdWJtb2R1bGUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW4gdW5wb3B1bGF0ZWQgc3VibW9kdWxlICclcyciCittc2dzdHIgInRyb25nIG3DtC3EkXVuLWNvbiBraMO0bmcgY8OzIGfDrCDigJwlc+KAnSIKKworIzogc3VibW9kdWxlLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAixJDhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIHRow6wg4bufIHRyb25nIG3DtC3EkXVuLWNvbiDigJwlLipz4oCdIgorCisjOiBzdWJtb2R1bGUuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0taWdub3JlLXN1Ym1vZHVsZXMgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLEkeG7kWkgc+G7kSAtLWlnbm9yZS1zdWJtb2R1bGVzIHNhaTogJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIGluIGNvbW1pdCAlcyBhdCBwYXRoOiAnJXMnIGNvbGxpZGVzIHdpdGggYSBzdWJtb2R1bGUgbmFtZWQgdGhlICIKKyJzYW1lLiBTa2lwcGluZyBpdC4iCittc2dzdHIgIiIKKyJNw7QtxJF1bi1jb24gdHJvbmcgbOG6p24gY2h1eeG7g24gZ2lhbyAlcyB04bqhaSDEkcaw4budbmcgZOG6q246ICclcycgdmEgY2jhuqFtIHbhu5tpIG3DtC3EkXVuLSIKKyJjb24gY8O5bmcgdMOqbi4gTsOqbiBi4buPIHF1YSBuw7MuIgorCisjOiBzdWJtb2R1bGUuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGVudHJ5ICclcycgKCVzKSBpcyBhICVzLCBub3QgYSBjb21taXQiCittc2dzdHIgIiIKKyJt4bulYyB0aW4gbcO0LcSRdW4tY29uIOKAnCVz4oCdICglcykgbMOgIG3hu5l0ICVzLCBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBzdWJtb2R1bGUuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCA8Y29tbWl0cz4gLS1ub3QgLS1yZW1vdGVzIC1uIDEnIGNvbW1hbmQgaW4gIgorInN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBjaOG6oXkgbOG7h25oIOKAnGdpdCByZXYtbGlzdCA8Y8OhYyBs4bqnbiBjaHV54buDbiBnaWFvPiAtLW5vdCAtLXJlbW90ZXMgLW4gIgorIjHigJ0gdHJvbmcgbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBzdWJtb2R1bGUuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInByb2Nlc3MgZm9yIHN1Ym1vZHVsZSAnJXMnIGZhaWxlZCIKK21zZ3N0ciAieOG7rSBsw70gY2hvIG3DtC3EkXVuLWNvbiDigJwlc+KAnSBn4bq3cCBs4buXaSIKKworIzogc3VibW9kdWxlLmM6MTE0NyBidWlsdGluL2JyYW5jaC5jOjY4MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjA0NQorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgcGjDom4gZ2nhuqNpIEhFQUQgbmjGsCBsw6AgbeG7mXQgdGhhbSBjaGnhur91IGjhu6NwIGzhu4cuIgorCisjOiBzdWJtb2R1bGUuYzoxMTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAixJDhuql5IGzDqm4gbcO0LcSRdW4tY29uIOKAnCVz4oCdXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjExNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHB1c2ggc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4bqpeSBsw6puIG3DtC3EkXVuLWNvbiDigJwlc+KAnVxuIgorCisjOiBzdWJtb2R1bGUuYzoxNDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIHN1Ym1vZHVsZSAlcyVzXG4iCittc2dzdHIgIsSQYW5nIGzhuqV5IHbhu4EgbcO0LcSRdW4tY29uICVzJXNcbiIKKworIzogc3VibW9kdWxlLmM6MTQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYWNjZXNzIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIktow7RuZyB0aOG7gyB0cnV5IGPhuq1wIG3DtC3EkXVuLWNvbiDigJwlc+KAnVxuIgorCisjOiBzdWJtb2R1bGUuYzoxNjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvcnMgZHVyaW5nIHN1Ym1vZHVsZSBmZXRjaDpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkPDsyBs4buXaSBraGkgbOG6pXkgduG7gSBtw7QtxJF1bi1jb246XG4iCisiIOKAnCVz4oCdIgorCisjOiBzdWJtb2R1bGUuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbm90IHJlY29nbml6ZWQgYXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAia2jDtG5nIG5o4bqtbiByYSDigJwlc+KAnSBsw6AgbeG7mXQga2hvIGdpdCIKKworIzogc3VibW9kdWxlLmM6MTY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTInIGluIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGNo4bqheSDigJxnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTLigJ0gdHJvbmcgbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBzdWJtb2R1bGUuYzoxNzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIidnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTInIGZhaWxlZCBpbiBzdWJtb2R1bGUgJXMiCittc2dzdHIgIuKAnGdpdCBzdGF0dXMgLS1wb3JjZWxhaW49MuKAnSBn4bq3cCBs4buXaSB0cm9uZyBtw7QtxJF1bi1jb24g4oCcJXPigJ0iCisKKyM6IHN1Ym1vZHVsZS5jOjE4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXJ0ICdnaXQgc3RhdHVzJyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRo4buRbmcga8OqIOKAnGdpdCBzdGF0dXPigJ0gdHJvbmcgbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBzdWJtb2R1bGUuYzoxODEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY2jhuqF5IOKAnGdpdCBzdGF0dXPigJ0gdHJvbmcgbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBzdWJtb2R1bGUuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG6t3QgY29yZS53b3JrdHJlZSB0cm9uZyBtw7QtxJF1bi1jb24g4oCcJXPigJ0iCisKKyM6IHN1Ym1vZHVsZS5jOjE4NTUgc3VibW9kdWxlLmM6MjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu4cgcXV5IHbDoG8gdHJvbmcgbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBzdWJtb2R1bGUuYzoxODc2Cittc2dpZCAiY291bGQgbm90IHJlc2V0IHN1Ym1vZHVsZSBpbmRleCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4bq3dCBs4bqhaSBt4bulYyBs4bulYyBj4bunYSBtw7QtxJF1bi1jb24iCisKKyM6IHN1Ym1vZHVsZS5jOjE5MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgaGFzIGRpcnR5IGluZGV4IgorbXNnc3RyICJtw7QtxJF1bi1jb24g4oCcJXPigJ0gY8OzIG3hu6VjIGzhu6VjIGPDsm4gYuG6qW4iCisKKyM6IHN1Ym1vZHVsZS5jOjE5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgY291bGQgbm90IGJlIHVwZGF0ZWQuIgorbXNnc3RyICJNw7QtxJF1bi1jb24g4oCcJXPigJ0ga2jDtG5nIHRo4buDIMSRxrDhu6NjIGPhuq1wIG5o4bqtdC4iCisKKyM6IHN1Ym1vZHVsZS5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGdpdCBkaXIgJyVzJyBpcyBpbnNpZGUgZ2l0IGRpciAnJS4qcyciCittc2dzdHIgInRoxrAgbeG7pWMgZ2l0IG3DtCDEkXVuIGNvbiAnJXMnIGzDoCBiw6puIHRyb25nIGdpdCBESVIgJyUuKnMnIgorCisjOiBzdWJtb2R1bGUuYzoyMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJyZWxvY2F0ZV9naXRkaXIgZm9yIHN1Ym1vZHVsZSAnJXMnIHdpdGggbW9yZSB0aGFuIG9uZSB3b3JrdHJlZSBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisicmVsb2NhdGVfZ2l0ZGlyIGNobyBtw7QtxJF1bi1jb24g4oCcJXPigJ0gduG7m2kgbmhp4buBdSBoxqFuIG3hu5l0IGPDonkgbMOgbSB2aeG7h2MgbMOgIGNoxrBhICIKKyLEkcaw4bujYyBo4buXIHRy4bujIgorCisjOiBzdWJtb2R1bGUuYzoyMDcxIHN1Ym1vZHVsZS5jOjIxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBuYW1lIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHTDrG0ga2nhur9tIHTDqm4gY2hvIG3DtC3EkXVuLWNvbiDigJwlc+KAnSIKKworIzogc3VibW9kdWxlLmM6MjA3NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBtb3ZlICclcycgaW50byBhbiBleGlzdGluZyBnaXQgZGlyIgorbXNnc3RyICJ04burIGNo4buRaSBkaSBjaHV54buDbiAnICVzICcgdsOgbyB0cm9uZyBt4buZdCB0aMawIG3hu6VjIGdpdCBz4bq1biBjw7MiCisKKyM6IHN1Ym1vZHVsZS5jOjIwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1pZ3JhdGluZyBnaXQgZGlyZWN0b3J5IG9mICclcyVzJyBmcm9tXG4iCisiJyVzJyB0b1xuIgorIiclcydcbiIKK21zZ3N0ciAiIgorIkRpIGPGsCB0aMawIG3hu6VjIGdpdCBj4bunYSDigJwlcyVz4oCdIHThu6tcbiIKKyLigJwlc+KAnSBzYW5nXG4iCisi4oCcJXPigJ1cbiIKKworIzogc3VibW9kdWxlLmM6MjIwOQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBscy1maWxlcyBpbiAuLiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogduG7gSBscy1maWxlcyB0cm9uZyAuLiIKKworIzogc3VibW9kdWxlLmM6MjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJscy10cmVlIHJldHVybmVkIHVuZXhwZWN0ZWQgcmV0dXJuIGNvZGUgJWQiCittc2dzdHIgImxzLXRyZWUgdHLhuqMgduG7gSBtw6Mga2jDtG5nIG5oxrAgbW9uZyDEkeG7o2kgJWQiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgc3VzcGljaW91cyBzdWJtb2R1bGUgbmFtZTogJXMiCittc2dzdHIgIsSRYW5nIGzhu50gxJFpIHTDqm4gbcO0LcSRdW4tY29uIG3huq1wIG3hu506ICVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MzAzCittc2dpZCAibmVnYXRpdmUgdmFsdWVzIG5vdCBhbGxvd2VkIGZvciBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorbXNnc3RyICJraMO0bmcgY2hvIHBow6lwIGdpw6EgdHLhu4sgw6JtIOG7nyBzdWJtb2R1bGUuZmV0Y2hKb2JzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICclcycgd2hpY2ggbWF5IGJlIGludGVycHJldGVkIGFzIGEgY29tbWFuZC1saW5lIG9wdGlvbjogJXMiCittc2dzdHIgIiIKKyLEkWFuZyBi4buPIHF1YSDigJwlc+KAnSBjw6FpIG3DoCBjw7MgdGjhu4MgxJHGsOG7o2MgcGhpw6puIGThu4tjaCBuaMawIGzDoCBt4buZdCB0w7l5IGNo4buNbiBkw7JuZyAiCisibOG7h25oOiAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAiZ2nDoSB0cuG7iyBjaG8gJXMga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSAuZ2l0bW9kdWxlcyBlbnRyeSAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCBt4bulYyAuZ2l0bW9kdWxlcyAlcyIKKworIzogdHJhaWxlci5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJydW5uaW5nIHRyYWlsZXIgY29tbWFuZCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiY2jhuqF5IGzhu4duaCBrw6lvIHRoZW8g4oCcJXPigJ0gZ+G6t3AgbOG7l2kiCisKKyM6IHRyYWlsZXIuYzo0ODUgdHJhaWxlci5jOjQ5MCB0cmFpbGVyLmM6NDk1IHRyYWlsZXIuYzo1NDkgdHJhaWxlci5jOjU1MworIzogdHJhaWxlci5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IGdpw6EgdHLhu4sg4oCcJXPigJ0gY2hvIGtow7NhIOKAnCVz4oCdIgorCisjOiB0cmFpbGVyLmM6NTM5IHRyYWlsZXIuYzo1NDQgYnVpbHRpbi9yZW1vdGUuYzoyOTggYnVpbHRpbi9yZW1vdGUuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAibmhp4buBdSBoxqFuIG3hu5l0ICVzIgorCisjOiB0cmFpbGVyLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHRyYWlsZXIgdG9rZW4gaW4gdHJhaWxlciAnJS4qcyciCittc2dzdHIgInRo4bq7IHRo4burYSB0cuG7kW5nIHLhu5duZyB0cm9uZyBwaOG6p24gdGjhu6thIOKAnCUuKnPigJ0iCisKKyM6IHRyYWlsZXIuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgxJHhu41jIMSRxrDhu6NjIHThuq1wIHRpbiDEkeG6p3UgdsOgbyDigJwlc+KAnSIKKworIzogdHJhaWxlci5jOjc1MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiB0cmFpbGVyLmM6MTAxMSB3cmFwcGVyLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB24buBICVzIgorCisjOiB0cmFpbGVyLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAiXCIlc1wiIGtow7RuZyBwaOG6o2kgbMOgIHThuq1wIHRpbiBiw6xuaCB0aMaw4budbmciCisKKyM6IHRyYWlsZXIuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IHdyaXRhYmxlIGJ5IHVzZXIiCittc2dzdHIgInThuq1wIHRpbiAlcyBuZ8aw4budaSBkw7luZyBraMO0bmcgdGjhu4MgZ2hpIMSRxrDhu6NjIgorCisjOiB0cmFpbGVyLmM6MTAyNworbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdOG6rXAgdGluIHThuqFtIHRo4budaSIKKworIzogdHJhaWxlci5jOjEwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSB0ZW1wb3JhcnkgZmlsZSB0byAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buVaSB0w6puIHThuq1wIHRpbiB04bqhbSB0aOG7nWkgdGjDoG5oICVzIgorCisjOiB0cmFuc3BvcnQuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2V0IHVwc3RyZWFtIG9mICclcycgdG8gJyVzJyBvZiAnJXMnXG4iCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG6t3QgdGjGsOG7o25nIG5ndeG7k24gY+G7p2Eg4oCcJXPigJ0gdGjDoG5oIOKAnCVz4oCdIGPhu6dhIOKAnCVz4oCdXG4iCisKKyM6IHRyYW5zcG9ydC5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBidW5kbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBiw7Mg4oCcJXPigJ0iCisKKyM6IHRyYW5zcG9ydC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQ6IGludmFsaWQgZGVwdGggb3B0aW9uICclcyciCittc2dzdHIgInbhuq1uIGNodXnhu4NuOiB0w7l5IGNo4buNbiDEkeG7mSBzw6J1IOKAnCVz4oCdIGtow7RuZyBo4bujcCBs4buHIgorCisjOiB0cmFuc3BvcnQuYzoyNjYKK21zZ2lkICJzZWUgcHJvdG9jb2wudmVyc2lvbiBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBkZXRhaWxzIgorbXNnc3RyICJ4ZW0gcHJvdG9jb2wudmVyc2lvbiB0cm9uZyDigJxnaXQgaGVscCBjb25maWfigJ0gxJHhu4MgY8OzIHRow6ptIHRow7RuZyB0aW4iCisKKyM6IHRyYW5zcG9ydC5jOjI2NworbXNnaWQgInNlcnZlciBvcHRpb25zIHJlcXVpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGxhdGVyIgorbXNnc3RyICJjw6FjIHTDuXkgY2jhu41uIG3DoXkgY2jhu6cgecOqdSBj4bqndSBnaWFvIHRo4bupYyBwaGnDqm4gYuG6o24gMiBob+G6t2MgbeG7m2kgaMahbiIKKworIzogdHJhbnNwb3J0LmM6NjMyCittc2dpZCAiY291bGQgbm90IHBhcnNlIHRyYW5zcG9ydC5jb2xvci4qIGNvbmZpZyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPDuiBwaMOhcCBj4bqldSBow6xuaCB0cmFuc3BvcnQuY29sb3IuKiIKKworIzogdHJhbnNwb3J0LmM6NzA1Cittc2dpZCAic3VwcG9ydCBmb3IgcHJvdG9jb2wgdjIgbm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAidmnhu4djIGjhu5cgdHLhu6MgZ2lhbyB0aOG7qWMgdjIgY2jGsGEgxJHGsOG7o2MgdGjhu7FjIGhp4buHbiIKKworIzogdHJhbnNwb3J0LmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgZm9yIGNvbmZpZyAnJXMnOiAlcyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSBnacOhIHRy4buLIGNobyBjaG8gY+G6pXUgaMOsbmgg4oCcJXPigJ06ICVzIgorCisjOiB0cmFuc3BvcnQuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0ICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgImtow7RuZyBjaG8gcGjDqXAgcGjGsMahbmcgdGjhu6ljIHbhuq1uIGNodXnhu4NuIOKAnCVz4oCdIgorCisjOiB0cmFuc3BvcnQuYzo5NDkKK21zZ2lkICJnaXQtb3Zlci1yc3luYyBpcyBubyBsb25nZXIgc3VwcG9ydGVkIgorbXNnc3RyICJnaXQtb3Zlci1yc3luYyBraMO0bmcgY8OybiDEkcaw4bujYyBo4buXIHRy4bujIG7hu69hIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKKyJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIKK21zZ3N0ciAiIgorIkPDoWMgxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiBzYXUgxJHDonkgY8OzIGNo4bupYSBjw6FjIHRoYXkgxJHhu5VpIGPDoWkgbcOgXG4iCisiY8OzIHRo4buDIMSRxrDhu6NjIHTDrG0gdGjhuqV5IHRyw6puIG3hu41pIG3DoXkgcGjhu6VjIHbhu6U6XG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBsZWFzZSB0cnlcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisidG8gcHVzaCB0aGVtIHRvIGEgcmVtb3RlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiSMOjeSB0aOG7rVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisiaG/hurdjIGNkIMSR4bq/biDEkcaw4budbmcgZOG6q24gdsOgIGTDuW5nXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorIsSR4buDIMSR4bqpeSBjaMO6bmcgbMOqbiBtw6F5IHBo4bulYyB24bulLlxuIgorIlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDU2Cittc2dpZCAiQWJvcnRpbmcuIgorbXNnc3RyICJCw6NpIGLhu48uIgorCisjOiB0cmFuc3BvcnQuYzoxMjAxCittc2dpZCAiZmFpbGVkIHRvIHB1c2ggYWxsIG5lZWRlZCBzdWJtb2R1bGVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHhuql5IGThu68gbGnhu4d1IGPhu6dhIHThuqV0IGPhuqMgY8OhYyBtw7QtxJF1bi1jb24gY+G6p24gdGhp4bq/dCIKKworIzogdHJhbnNwb3J0LmM6MTM0NSB0cmFuc3BvcnQtaGVscGVyLmM6NjU3Cittc2dpZCAib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgInRoYW8gdMOhYyBraMO0bmcgxJHGsOG7o2MgZ2lhIHRo4bupYyBo4buXIHRy4bujIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEgdHJhbnNwb3J0LWhlbHBlci5jOjkwCittc2dpZCAiZnVsbCB3cml0ZSB0byByZW1vdGUgaGVscGVyIGZhaWxlZCIKK21zZ3N0ciAiZ2hpIMSR4bqneSDEkeG7pyBsw6puIGLhu5kgaOG7lyB0cuG7oyBtw6F5IGNo4bunIGfhurdwIGzhu5dpIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIHJlbW90ZSBoZWxwZXIgZm9yICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB0w6xtIHRo4bqleSBi4buZIGjhu5cgdHLhu6MgbcOheSBjaOG7pyBjaG8g4oCcJXPigJ0iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNjAgdHJhbnNwb3J0LWhlbHBlci5jOjU3MQorbXNnaWQgImNhbid0IGR1cCBoZWxwZXIgb3V0cHV0IGZkIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbmjDom4gxJHDtGkgZmQgZOG6p3UgcmEgYuG7mSBo4buXIHRy4bujIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmtub3duIG1hbmRhdG9yeSBjYXBhYmlsaXR5ICVzOyB0aGlzIHJlbW90ZSBoZWxwZXIgcHJvYmFibHkgbmVlZHMgbmV3ZXIgIgorInZlcnNpb24gb2YgR2l0IgorbXNnc3RyICIiCisia2jDtG5nIGhp4buDdSBjYXBhYmlsaXR5IGLhuq90IGJ14buZYyAlczsgYuG7mSBo4buXIHRy4bujIG3DoXkgY2jhu6cgbsOgeSBn4bqnbiBuaMawIGNo4bqvYyBjaOG6r24gIgorImzDoCBj4bqnbiBwaGnDqm4gYuG6o24gR2l0IG3hu5tpIGjGoW4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyMTcKK21zZ2lkICJ0aGlzIHJlbW90ZSBoZWxwZXIgc2hvdWxkIGltcGxlbWVudCByZWZzcGVjIGNhcGFiaWxpdHkiCittc2dzdHIgImLhu5kgaOG7lyB0cuG7oyBtw6F5IGNo4bunIG7DoHkgY+G6p24gcGjhuqNpIHRo4buxYyB0aGkgY2FwYWJpbGl0eSDEkeG6t2MgdOG6oyB0aGFtIGNoaeG6v3UiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyODQgdHJhbnNwb3J0LWhlbHBlci5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIKK21zZ3N0ciAiJXMgc2FpZCBi4bqldCBuZ+G7nTog4oCcJXPigJ0iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxzbyBsb2NrZWQgJXMiCittc2dzdHIgIiVzIGPFqW5nIGtow7NhICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDkzCittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtaW1wb3J0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgY2jhuqF5IGZhc3QtaW1wb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTE2Cittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWltcG9ydCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kgdHJvbmcga2hpIGNo4bqheSBmYXN0LWltcG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU0NSB0cmFuc3BvcnQtaGVscGVyLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgdGhhbSBjaGnhur91ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcmVzcG9uc2UgdG8gY29ubmVjdDogJXMiCittc2dzdHIgImtow7RuZyBoaeG7g3UgxJHDoXAg4bupbmcgxJHhu4Mga+G6v3QgbuG7kWk6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEyCittc2dpZCAic2V0dGluZyByZW1vdGUgc2VydmljZSBwYXRoIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgImdpYW8gdGjhu6ljIG7DoHkga2jDtG5nIGjhu5cgdHLhu6MgY8OgaSDEkeG6t3QgxJHGsOG7nW5nIGThuqtuIGThu4tjaCB24bulIG3DoXkgY2jhu6ciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTQKK21zZ2lkICJpbnZhbGlkIHJlbW90ZSBzZXJ2aWNlIHBhdGgiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiBk4buLY2ggduG7pSBtw6F5IGNo4bunIGtow7RuZyBo4bujcCBs4buHIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNvbm5lY3QgdG8gc3Vic2VydmljZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGvhur90IG7hu5FpIMSR4bq/biBk4buLY2ggduG7pSBwaOG7pSAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBvay9lcnJvciwgaGVscGVyIHNhaWQgJyVzJyIKK21zZ3N0ciAiY+G6p24gb2svZXJyb3IsIG5oxrBuZyBi4buZIGjhu5cgdHLhu6MgbOG6oWkgbsOzaSDigJwlc+KAnSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgcmVwb3J0ZWQgdW5leHBlY3RlZCBzdGF0dXMgb2YgJXMiCittc2dzdHIgImLhu5kgaOG7lyB0cuG7oyBiw6FvIGPDoW8gcuG6sW5nIGtow7RuZyBj4bqnbiB0w6xuaCB0cuG6oW5nIGPhu6dhICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODUwCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IGRyeS1ydW4iCittc2dzdHIgImhlbHBlciAlcyBraMO0bmcgaOG7lyB0cuG7oyBkcnktcnVuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIgorbXNnc3RyICJoZWxwZXIgJXMga2jDtG5nIGjhu5cgdHLhu6MgLS1zaWduZWQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQ9aWYtYXNrZWQiCittc2dzdHIgImhlbHBlciAlcyBraMO0bmcgaOG7lyB0cuG7oyAtLXNpZ25lZD1pZi1hc2tlZCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyIKK21zZ3N0ciAiaGVscGVyICVzIGtow7RuZyBo4buXIHRy4bujIC0tYXRvbWljIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdwdXNoLW9wdGlvbiciCittc2dzdHIgImhlbHBlciAlcyBraMO0bmcgaOG7lyB0cuG7oyDigJxwdXNoLW9wdGlvbuKAnSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk2NQorbXNnaWQgInJlbW90ZS1oZWxwZXIgZG9lc24ndCBzdXBwb3J0IHB1c2g7IHJlZnNwZWMgbmVlZGVkIgorbXNnc3RyICJyZW1vdGUtaGVscGVyIGtow7RuZyBo4buXIHRy4bujIHB1c2g7IGPhuqduIMSR4bq3YyB04bqjIHRoYW0gY2hp4bq/dSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAnZm9yY2UnIgorbXNnc3RyICJoZWxwZXIgJXMga2jDtG5nIGjhu5cgdHLhu6Mg4oCcZm9yY2XigJ0iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDE3Cittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtZXhwb3J0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgY2jhuqF5IGZhc3QtZXhwb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAyMgorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1leHBvcnQiCittc2dzdHIgImfhurdwIGzhu5dpIHRyb25nIGtoaSBjaOG6oXkgZmFzdC1leHBvcnQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyByZWZzIGluIGNvbW1vbiBhbmQgbm9uZSBzcGVjaWZpZWQ7IGRvaW5nIG5vdGhpbmcuXG4iCisiUGVyaGFwcyB5b3Ugc2hvdWxkIHNwZWNpZnkgYSBicmFuY2ggc3VjaCBhcyAnbWFzdGVyJy5cbiIKK21zZ3N0ciAiIgorIktow7RuZyBjw7MgY8OhYyB0aGFtIGNoaeG6v3UgdHJvbmcgcGjhuqduIGNodW5nIHbDoCBjaMawYSBjaOG7iSDEkeG7i25oOyBuw6puIGtow7RuZyBsw6BtIGfDrCAiCisiY+G6oy5cbiIKKyJUdXkgbmhpw6puIGLhuqFuIG7Dqm4gY2jhu4kgxJHhu4tuaCBt4buZdCBuaMOhbmggbmjGsCDigJxtYXN0ZXLigJ0gY2jhurNuZyBo4bqhbi5cbiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHJlc3BvbnNlIGluIHJlZiBsaXN0OiAlcyIKK21zZ3N0ciAixJHDoXAg4bupbmcgc2FpIGThuqFuZyB0cm9uZyBkYW5oIHPDoWNoIHRoYW0gY2hp4bq/dTogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQoJXMpIGZhaWxlZCIKK21zZ3N0ciAicmVhZCglcykgZ+G6t3AgbOG7l2kiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRlKCVzKSBmYWlsZWQiCittc2dzdHIgIndyaXRlKCVzKSBn4bq3cCBs4buXaSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGhyZWFkIGZhaWxlZCIKK21zZ3N0ciAidHV54bq/biB0csOsbmggJXMgZ+G6t3AgbOG7l2kiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiCittc2dzdHIgInR1eeG6v24gdHLDrG5oICVzIGfhurdwIGzhu5dpIGtoaSBnaWEgbmjhuq1wOiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNzEgdHJhbnNwb3J0LWhlbHBlci5jOjEzNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGE6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4Mga2jhu59pIGNo4bqheSB0dXnhur9uIHRyw6xuaCDEkeG7gyBzYW8gY2jDqXAgZOG7ryBsaeG7h3U6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCB0byB3YWl0IgorbXNnc3RyICJ44butIGzDvSAlcyBn4bq3cCBs4buXaSBraGkgxJHhu6NpIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAieOG7rSBsw70gJXMgZ+G6t3AgbOG7l2kiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDM0IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDQzCittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGEiCittc2dzdHIgImtow7RuZyB0aOG7gyBraOG7n2kgY2jhuqF5IHR1eeG6v24gdHLDrG5oIGNobyB2aeG7h2MgY2jDqXAgZOG7ryBsaeG7h3UiCisKKyM6IHRyZWUtd2Fsay5jOjMyCittc2dpZCAidG9vLXNob3J0IHRyZWUgb2JqZWN0IgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgY8OieSBxdcOhIG5n4bqvbiIKKworIzogdHJlZS13YWxrLmM6MzgKK21zZ2lkICJtYWxmb3JtZWQgbW9kZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICJjaOG6vyDEkeG7mSBk4buLIGjDrG5oIHRyb25nIMSR4buBIG3hu6VjIGPDonkiCisKKyM6IHRyZWUtd2Fsay5jOjQyCittc2dpZCAiZW1wdHkgZmlsZW5hbWUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAidMOqbiB04bqtcCB0aW4gdHLhu5FuZyBy4buXbmcgdHJvbmcgbeG7pWMgdGluIGPDonkiCisKKyM6IHRyZWUtd2Fsay5jOjExNworbXNnaWQgInRvby1zaG9ydCB0cmVlIGZpbGUiCittc2dzdHIgInThuq1wIHRpbiBjw6J5IHF1w6Egbmfhuq9uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiQ8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZIGPhu6dhIGLhuqFuIHbhu5tpIGPDoWMgdOG6rXAgdGluIHNhdSDEkcOieSBz4bq9IGLhu4sgZ2hpIMSRw6ggYuG7n2kgbOG7h25oICIKKyJjaGVja291dDpcbiIKKyIlJXNWdWkgbMOybmcgY2h1eeG7g24gZ2lhbyBjw6FjIHRoYXkgxJHhu5VpIGhheSB04bqhbSBj4bqldCBjaMO6bmcgxJFpIHRyxrDhu5tjIGtoaSBi4bqhbiAiCisiY2h1eeG7g24gbmjDoW5oLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJDw6FjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kgY+G7p2EgYuG6oW4gduG7m2kgY8OhYyB04bqtcCB0aW4gc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggIgorImNoZWNrb3V0OlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiQ8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZIGPhu6dhIGLhuqFuIHbhu5tpIGPDoWMgdOG6rXAgdGluIHNhdSDEkcOieSBz4bq9IGLhu4sgZ2hpIMSRw6ggYuG7n2kgbOG7h25oICIKKyJow7JhIHRy4buZbjpcbiIKKyIlJXNWdWkgbMOybmcgY2h1eeG7g24gZ2lhbyBjw6FjIHRoYXkgxJHhu5VpIGhheSB04bqhbSBj4bqldCBjaMO6bmcgxJFpIHRyxrDhu5tjIGtoaSBi4bqhbiBow7JhICIKKyJ0cuG7mW4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkPDoWMgdGhheSDEkeG7lWkgbuG7mWkgYuG7mSBj4bunYSBi4bqhbiB24bubaSBjw6FjIHThuq1wIHRpbiBzYXUgxJHDonkgc+G6vSBi4buLIGdoaSDEkcOoIGLhu59pIGzhu4duaCAiCisiaMOyYSB0cuG7mW46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyJDw6FjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kgY+G7p2EgYuG6oW4gduG7m2kgY8OhYyB04bqtcCB0aW4gc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggIgorIiVzOlxuIgorIiUlc1Z1aSBsw7JuZyBjaHV54buDbiBnaWFvIGPDoWMgdGhheSDEkeG7lWkgaGF5IHThuqFtIGPhuqV0IGNow7puZyDEkWkgdHLGsOG7m2Mga2hpIGLhuqFuICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJDw6FjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kgY+G7p2EgYuG6oW4gduG7m2kgY8OhYyB04bqtcCB0aW4gc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggIgorIiVzOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIHRoZW06XG4iCisiJXMiCittc2dzdHIgIiIKKyJWaeG7h2MgY+G6rXAgbmjhuq10IGPDoWMgdGjGsCBt4bulYyBzYXUgxJHDonkgY8OzIHRo4buDIGzDoG0gbeG6pXQgY8OhYyB04bqtcCB0aW4gY2jGsGEgdGhlbyBkw7VpICIKKyJ0cm9uZyBuw7M6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBn4buhIGLhu48gYuG7n2kgbOG7h25oICIKKyJjaGVja291dDpcbiIKKyIlJXNWdWkgbMOybmcgZGkgY2h1eeG7g24gaGF5IGfhu6EgYuG7jyBjaMO6bmcgdHLGsOG7m2Mga2hpIGLhuqFuIGNodXnhu4NuIG5ow6FuaC4iCisKKyM6IHVucGFjay10cmVlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBn4buhIGLhu48gYuG7n2kgbOG7h25oICIKKyJjaGVja291dDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJDw6FjIHThuq1wIHRpbiBjw6J5IGzDoG0gdmnhu4djIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSBzYXUgxJHDonkgc+G6vSBi4buLIGfhu6EgYuG7jyBi4bufaSBs4buHbmggaMOyYSAiCisidHLhu5luOlxuIgorIiUlc1Z1aSBsw7JuZyBkaSBjaHV54buDbiBoYXkgZ+G7oSBi4buPIGNow7puZyB0csaw4bubYyBraGkgYuG6oW4gaMOyYSB0cuG7mW4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkPDoWMgdOG6rXAgdGluIGPDonkgbMOgbSB2aeG7h2MgY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIHNhdSDEkcOieSBz4bq9IGLhu4sgZ+G7oSBi4buPIGLhu59pIGzhu4duaCBow7JhICIKKyJ0cuG7mW46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBn4buhIGLhu48gYuG7n2kgJXM6XG4iCisiJSVzVnVpIGzDsm5nIGRpIGNodXnhu4NuIGhheSBn4buhIGLhu48gY2jDum5nIHRyxrDhu5tjIGtoaSBi4bqhbiAlcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBn4buhIGLhu48gYuG7n2kgJXM6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggIgorImNoZWNrb3V0OlxuIgorIiUlc1Z1aSBsw7JuZyBkaSBjaHV54buDbiBoYXkgZ+G7oSBi4buPIGNow7puZyB0csaw4bubYyBraGkgYuG6oW4gY2h1eeG7g24gbmjDoW5oLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkPDoWMgdOG6rXAgdGluIGPDonkgbMOgbSB2aeG7h2MgY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIHNhdSDEkcOieSBz4bq9IGLhu4sgZ2hpIMSRw6ggYuG7n2kgbOG7h25oICIKKyJjaGVja291dDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggIgorImjDsmEgdHLhu5luOlxuIgorIiUlc1Z1aSBsw7JuZyBkaSBjaHV54buDbiBoYXkgZ+G7oSBi4buPIGNow7puZyB0csaw4bubYyBraGkgYuG6oW4gaMOyYSB0cuG7mW4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJDw6FjIHThuq1wIHRpbiBjw6J5IGzDoG0gdmnhu4djIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSBzYXUgxJHDonkgc+G6vSBi4buLIGdoaSDEkcOoIGLhu59pIGzhu4duaCAiCisiaMOyYSB0cuG7mW46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIkPDoWMgdOG6rXAgdGluIGPDonkgbMOgbSB2aeG7h2MgY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIHNhdSDEkcOieSBz4bq9IGLhu4sgZ2hpIMSRw6ggYuG7n2kgbOG7h25oICIKKyIlczpcbiIKKyIlJXNWdWkgbMOybmcgZGkgY2h1eeG7g24gaGF5IGfhu6EgYuG7jyBjaMO6bmcgdHLGsOG7m2Mga2hpIGLhuqFuICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggIgorIiVzOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudHJ5ICclcycgb3ZlcmxhcHMgd2l0aCAnJXMnLiAgQ2Fubm90IGJpbmQuIgorbXNnc3RyICJN4bulYyDigJwlc+KAnSDEkcOoIGzDqm4g4oCcJXPigJ0uIEtow7RuZyB0aOG7gyBideG7mWMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0OiB0aGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIG5vdCB1cCB0byBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCBjaGVja291dCBy4bqjaSByw6FjOiBjw6FjIG3hu6VjIHRpbiBzYXUgxJHDonkgY2jGsGEgY+G6rXAgbmjhuq10OlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSBj4bqtcCAiCisibmjhuq10IGNoZWNrb3V0IHLhuqNpIHLDoWM6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkPDoWMgdOG6rXAgdGluIGPDonkgbMOgbSB2aeG7h2MgY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIHNhdSDEkcOieSBz4bq9IGLhu4sgeMOzYSBi4buPIGLhu59pIGPhuq1wICIKKyJuaOG6rXQgY2hlY2tvdXQgcuG6o2kgcsOhYzpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHN1Ym1vZHVsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgbcO0LcSRdW4tY29uOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmdcbiIKK21zZ3N0ciAiQsOjaSBi4buPXG4iCisKKyM6IHVucGFjay10cmVlcy5jOjMxNworbXNnaWQgIlVwZGF0aW5nIGZpbGVzIgorbXNnc3RyICLEkGFuZyBj4bqtcCBuaOG6rXQgY8OhYyB04bqtcCB0aW4iCisKKyM6IHVucGFjay10cmVlcy5jOjM0OQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHBhdGhzIGhhdmUgY29sbGlkZWQgKGUuZy4gY2FzZS1zZW5zaXRpdmUgcGF0aHNcbiIKKyJvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSkgYW5kIG9ubHkgb25lIGZyb20gdGhlIHNhbWVcbiIKKyJjb2xsaWRpbmcgZ3JvdXAgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZTpcbiIKK21zZ3N0ciAiIgorImPDoWMgxJHGsOG7nW5nIGThuqtuIHNhdSDEkcOieSBjw7MgeHVuZyDEkeG7mXQodmQ6IGPDoWMgxJHGsOG7nW5nIGThuqtuIHBow6JuIGJp4buHdFxuIgorIkhPQS90aMaw4budbmcgdHLDqm4gbeG7mXQgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBraMO0bmcgcGjDom4gYmnhu4d0IEhPQS90aMaw4budbmcpXG4iCisidsOgIGNo4buJIG3hu5l0IHThu6sgY8O5bmcgbeG7mXQgbmjDs20geHVuZyDEkeG7mXQgbMOgIHRyb25nIGPDonkgbMOgbSB2aeG7h2MgaGnhu4duIHThuqFpOlxuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDQ1Cittc2dpZCAiVXBkYXRpbmcgaW5kZXggZmxhZ3MiCittc2dzdHIgIsSQYW5nIGPhuq1wIG5o4bqtdCBjw6FjIGPhu50gbeG7pWMgbOG7pWMiCisKKyM6IHVybG1hdGNoLmM6MTYzCittc2dpZCAiaW52YWxpZCBVUkwgc2NoZW1lIG5hbWUgb3IgbWlzc2luZyAnOi8vJyBzdWZmaXgiCittc2dzdHIgInTDqm4gbMaw4bujYyDEkeG7kyBVUkwga2jDtG5nIGjhu6NwIGzhu4csIGhv4bq3YyB0aGnhur91IGjhuq11IHThu5Eg4oCcOi8v4oCdIgorCisjOiB1cmxtYXRjaC5jOjE4NyB1cmxtYXRjaC5jOjM0NiB1cmxtYXRjaC5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgInRob8OhdCBjaHXhu5dpICVYWCBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAidGhp4bq/dSBtw6F5IGNo4bunIHbDoCBsxrDhu6NjIMSR4buTIHRow6wga2jDtG5nIHBo4bqjaSBsw6AgZ2lhbyB0aOG7qWMg4oCcZmlsZTrigJ0iCisKKyM6IHVybG1hdGNoLmM6MjMyCittc2dpZCAiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIKK21zZ3N0ciAibeG7mXQgVVJMIGtp4buDdSDigJxmaWxlOuKAnSBraMO0bmcgxJHGsOG7o2MgY2jhu6lhIGPhu5VuZyIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICJjw7MgY8OhYyBrw70gdOG7sSBraMO0bmcgaOG7o3AgbOG7hyB0cm9uZyB0w6puIG3DoXkiCisKKyM6IHVybG1hdGNoLmM6MjkyIHVybG1hdGNoLmM6MzAzCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAidMOqbiBj4buVbmcga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IHVybG1hdGNoLmM6MzcxCittc2dpZCAiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIKK21zZ3N0ciAixJFv4bqhbiDEkcaw4budbmcgZOG6q24g4oCcLi7igJ0ga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IHdhbGtlci5jOjE3MAorbXNnaWQgIkZldGNoaW5nIG9iamVjdHMiCittc2dzdHIgIsSQYW5nIGzhuqV5IHbhu4EgY8OhYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IHdvcmt0cmVlLmM6MjU5IGJ1aWx0aW4vYW0uYzoyMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkeG7jWMg4oCcJXPigJ0iCisKKyM6IHdvcmt0cmVlLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXQgbWFpbiB3b3JraW5nIHRyZWUgaXMgbm90IHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSIKK21zZ3N0ciAi4oCcJXPigJ0gdOG6oWkgY8OieSBsw6BtIHZp4buHYyBjaMOsbmgga2jDtG5nIHBo4bqjaSBsw6AgdGjGsCBt4bulYyBraG8iCisKKyM6IHdvcmt0cmVlLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsZSBkb2VzIG5vdCBjb250YWluIGFic29sdXRlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZSBsb2NhdGlvbiIKK21zZ3N0ciAiIgorInThuq1wIHRpbiDigJwlc+KAnSBraMO0bmcgY2jhu6lhIMSRxrDhu51uZyBk4bqrbiB0dXnhu4d0IMSR4buRaSDEkeG6v24gduG7iyB0csOtIGPDonkgbMOgbSB2aeG7h2MgaGnhu4duIgorCisjOiB3b3JrdHJlZS5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJcIiVzXCIga2jDtG5nIHThu5NuIHThuqFpIgorCisjOiB3b3JrdHJlZS5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIC5naXQgZmlsZSwgZXJyb3IgY29kZSAlZCIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBsw6AgdOG6rXAgdGluIC5naXQsIG3DoyBs4buXaSAlZCIKKworIzogd29ya3RyZWUuYzozNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCBiYWNrIHRvICclcyciCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBjaOG7iSBuZ8aw4bujYyDEkeG6v24g4oCcJXPigJ0iCisKKyM6IHdyYXBwZXIuYzoxODYgd3JhcHBlci5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyDigJwlc+KAnSDEkeG7gyDEkeG7jWMgdsOgIGdoaSIKKworIzogd3JhcHBlci5jOjM4NyB3cmFwcGVyLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRydXkgY+G6rXAg4oCcJXPigJ0iCisKKyM6IHdyYXBwZXIuYzo1OTYKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aMawIG3hu6VjIGzDoG0gdmnhu4djIGhp4buHbiBow6BuaCIKKworIzogd3Qtc3RhdHVzLmM6MTU4Cittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICJOaOG7r25nIMSRxrDhu51uZyBk4bqrbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbjoiCisKKyM6IHd0LXN0YXR1cy5jOjE4NyB3dC1zdGF0dXMuYzoyMTkKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAoZMO5bmcgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8dOG6rXAtdGluPuKAplwiIMSR4buDIGLhu48gcmEga2jhu49pIGLhu4cgcGjDs25nKSIKKworIzogd3Qtc3RhdHVzLmM6MTkwIHd0LXN0YXR1cy5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXNvdXJjZT0lcyAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorIiAgKGTDuW5nIFwiZ2l0IHJlc3RvcmUgLS1zb3VyY2U9JXMgLS1zdGFnZWQgPHThuq1wLXRpbj7igKZcIiDEkeG7gyBi4buPIHJhIGto4buPaSBi4buHICIKKyJwaMOzbmcpIgorCisjOiB3dC1zdGF0dXMuYzoxOTMgd3Qtc3RhdHVzLmM6MjI1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBybSAtLWNhY2hlZCA8dOG6rXAtdGluPuKAplwiIMSR4buDIGLhu48gcmEga2jhu49pIGLhu4cgcGjDs25nKSIKKworIzogd3Qtc3RhdHVzLmM6MTk3Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBhZGQgPHThuq1wLXRpbj7igKZcIiDEkeG7gyDEkcOhbmggZOG6pXUgbMOgIGPhuqduIGdp4bqjaSBxdXnhur90KSIKKworIzogd3Qtc3RhdHVzLmM6MTk5IHd0LXN0YXR1cy5jOjIwMworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorIiAgKGTDuW5nIFwiZ2l0IGFkZC9ybSA8dOG6rXAtdGluPuKAplwiIG5oxrAgbMOgIG3hu5l0IGPDoWNoIHRow61jaCBo4bujcCDEkeG7gyDEkcOhbmggZOG6pXUgbMOgICIKKyJj4bqnbiDEkcaw4bujYyBnaeG6o2kgcXV54bq/dCkiCisKKyM6IHd0LXN0YXR1cy5jOjIwMQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBybSA8dOG6rXAtdGluPuKAplwiIMSR4buDIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gZ2nhuqNpIHF1eeG6v3QpIgorCisjOiB3dC1zdGF0dXMuYzoyMTEgd3Qtc3RhdHVzLmM6MTA3NAorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiTmjhu69uZyB0aGF5IMSR4buVaSBz4bq9IMSRxrDhu6NjIGNodXnhu4NuIGdpYW86IgorCisjOiB3dC1zdGF0dXMuYzoyMzQgd3Qtc3RhdHVzLmM6MTA4MworbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAiQ8OhYyB0aGF5IMSR4buVaSBjaMawYSDEkcaw4bujYyDEkeG6t3QgbMOqbiBi4buHIHBow7NuZyDEkeG7gyBjaHV54buDbiBnaWFvOiIKKworIzogd3Qtc3RhdHVzLmM6MjM4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiAgKGTDuW5nIFwiZ2l0IGFkZCA8dOG6rXAtdGluPuKAplwiIMSR4buDIGPhuq1wIG5o4bqtdCBuaOG7r25nIGfDrCBz4bq9IGNodXnhu4NuIGdpYW8pIgorCisjOiB3dC1zdGF0dXMuYzoyNDAKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKGTDuW5nIFwiZ2l0IGFkZC9ybSA8dOG6rXAtdGluPuKAplwiIMSR4buDIGPhuq1wIG5o4bqtdCBuaOG7r25nIGfDrCBz4bq9IMSRxrDhu6NjIGNodXnhu4NuIGdpYW8pIgorCisjOiB3dC1zdGF0dXMuYzoyNDEKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIKK21zZ3N0ciAiIgorIiAgKGTDuW5nIFwiZ2l0IHJlc3RvcmUgPHThuq1wLXRpbj7igKZcIiDEkeG7gyBsb+G6oWkgYuG7jyBjw6FjIHRoYXkgxJHhu5VpIHRyb25nIHRoxrAgbeG7pWMgbMOgbSAiCisidmnhu4djKSIKKworIzogd3Qtc3RhdHVzLmM6MjQzCittc2dpZCAiICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpIgorbXNnc3RyICIiCisiICAoY2h1eeG7g24gZ2lhbyBob+G6t2MgbMOgIGxv4bqhaSBi4buPIGPDoWMgbuG7mWkgZHVuZyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgaGF5IMSRw6Mgc+G7rWEgIgorImNo4buvYSB0cm9uZyBtw7QtxJF1bi1jb24pIgorCisjOiB3dC1zdGF0dXMuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgIChkw7luZyBcImdpdCAlcyA8dOG6rXAtdGluPuKAplwiIMSR4buDIHRow6ptIHbDoG8gbmjhu69uZyBnw6wgY+G6p24gxJHGsOG7o2MgY2h1eeG7g24gZ2lhbykiCisKKyM6IHd0LXN0YXR1cy5jOjI2OAorbXNnaWQgImJvdGggZGVsZXRlZDoiCittc2dzdHIgImLhu4sgeMOzYSBi4bufaSBj4bqjIGhhaToiCisKKyM6IHd0LXN0YXR1cy5jOjI3MAorbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAixJHGsOG7o2MgdGjDqm0gdsOgbyBi4bufaSBjaMO6bmcgdGE6IgorCisjOiB3dC1zdGF0dXMuYzoyNzIKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICJi4buLIHjDs2EgxJFpIGLhu59pIGjhu406IgorCisjOiB3dC1zdGF0dXMuYzoyNzQKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAixJHGsOG7o2MgdGjDqm0gdsOgbyBi4bufaSBo4buNOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc2Cittc2dpZCAiZGVsZXRlZCBieSB1czoiCittc2dzdHIgImLhu4sgeMOzYSBi4bufaSBjaMO6bmcgdGE6IgorCisjOiB3dC1zdGF0dXMuYzoyNzgKK21zZ2lkICJib3RoIGFkZGVkOiIKK21zZ3N0ciAixJHGsOG7o2MgdGjDqm0gdsOgbyBi4bufaSBj4bqjIGhhaToiCisKKyM6IHd0LXN0YXR1cy5jOjI4MAorbXNnaWQgImJvdGggbW9kaWZpZWQ6IgorbXNnc3RyICJi4buLIHPhu61hIGLhu59pIGPhuqMgaGFpOiIKKworIzogd3Qtc3RhdHVzLmM6MjkwCittc2dpZCAibmV3IGZpbGU6IgorbXNnc3RyICJ04bqtcCB0aW4gbeG7m2k6IgorCisjOiB3dC1zdGF0dXMuYzoyOTIKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICLEkcOjIGNow6lwOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk0Cittc2dpZCAiZGVsZXRlZDoiCittc2dzdHIgIsSRw6MgeMOzYToiCisKKyM6IHd0LXN0YXR1cy5jOjI5NgorbXNnaWQgIm1vZGlmaWVkOiIKK21zZ3N0ciAixJHDoyBz4butYToiCisKKyM6IHd0LXN0YXR1cy5jOjI5OAorbXNnaWQgInJlbmFtZWQ6IgorbXNnc3RyICLEkcOjIMSR4buVaSB0w6puOiIKKworIzogd3Qtc3RhdHVzLmM6MzAwCittc2dpZCAidHlwZWNoYW5nZToiCittc2dzdHIgIsSR4buVaS1raeG7g3U6IgorCisjOiB3dC1zdGF0dXMuYzozMDIKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAia2jDtG5nIGhp4buDdToiCisKKyM6IHd0LXN0YXR1cy5jOjMwNAorbXNnaWQgInVubWVyZ2VkOiIKK21zZ3N0ciAiY2jGsGEgaMOyYSB0cuG7mW46IgorCisjOiB3dC1zdGF0dXMuYzozODQKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICJs4bqnbiBjaHV54buDbiBnaWFvIG3hu5tpLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM4NgorbXNnaWQgIm1vZGlmaWVkIGNvbnRlbnQsICIKK21zZ3N0ciAibuG7mWkgZHVuZyBi4buLIHPhu61hIMSR4buVaSwgIgorCisjOiB3dC1zdGF0dXMuYzozODgKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICJu4buZaSBkdW5nIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSwgIgorCisjOiB3dC1zdGF0dXMuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJ5IgorbXNnaWRfcGx1cmFsICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cmllcyIKK21zZ3N0clswXSAiQuG6oW4gaGnhu4duIG5heSDhu58gdHJvbmcgcGjhuqduIGPhuqV0IMSRaSDEkWFuZyBjw7MgJWQgbeG7pWMiCisKKyM6IHd0LXN0YXR1cy5jOjkzOAorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICJOaOG7r25nIG3DtC3EkXVuLWNvbiDEkcOjIGLhu4sgdGhheSDEkeG7lWkgbmjGsG5nIGNoxrBhIMSRxrDhu6NjIGPhuq1wIG5o4bqtdDoiCisKKyM6IHd0LXN0YXR1cy5jOjk0MAorbXNnaWQgIlN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIk5o4buvbmcgbcO0LcSRdW4tY29uIHRoYXkgxJHhu5VpIMSRw6MgxJHGsOG7o2MgY2h1eeG7g24gZ2lhbzoiCisKKyM6IHd0LXN0YXR1cy5jOjEwMjIKK21zZ2lkICIiCisiRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuXG4iCisiRXZlcnl0aGluZyBiZWxvdyBpdCB3aWxsIGJlIGlnbm9yZWQuIgorbXNnc3RyICIiCisiS2jDtG5nIHPhu61hIGhheSB4w7NhIGLhu48gxJHGsOG7nW5nIOG7nyB0csOqbi5cbiIKKyJN4buNaSB0aOG7qSBwaMOtYSBkxrDhu5tpIHPhur0gxJHGsOG7o2MgeMOzYSBi4buPLiIKKworIzogd3Qtc3RhdHVzLmM6MTExNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gY29tcHV0ZSB0aGUgYnJhbmNoIGFoZWFkL2JlaGluZCB2YWx1ZXMuXG4iCisiWW91IGNhbiB1c2UgJy0tbm8tYWhlYWQtYmVoaW5kJyB0byBhdm9pZCB0aGlzLlxuIgorbXNnc3RyICIiCisiXG4iCisiTsOzIGPhuqduICUuMmYgZ2nDonkgxJHhu4MgdMOtbmggdG/DoW4gZ2nDoSB0cuG7iyBj4bunYSB0csaw4bubYy9zYXUgY+G7p2EgbmjDoW5oLlxuIgorIkLhuqFuIGPDsyB0aOG7gyBkw7luZyAnLS1uby1haGVhZC1iZWhpbmQnIHRyw6FuaCBwaOG6o2kgxJFp4buBdSBuw6B5LlxuIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ0Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICJC4bqhbiBjw7Mgbmjhu69uZyDEkcaw4budbmcgZOG6q24gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4uIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ3Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNvbW1pdFwiKSIKK21zZ3N0ciAiICAoc+G7rWEgY8OhYyB4dW5nIMSR4buZdCBy4buTaSBjaOG6oXkgXCJnaXQgY29tbWl0XCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ5Cittc2dpZCAiICAodXNlIFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiB0byBhYm9ydCB0aGUgbWVyZ2UpIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBtZXJnZSAtLWFib3J0XCIgxJHhu4MgYsOjaSBi4buPIHZp4buHYyBow7JhIHRy4buZbikiCisKKyM6IHd0LXN0YXR1cy5jOjExNTMKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgorbXNnc3RyICJU4bqldCBj4bqjIGPDoWMgeHVuZyDEkeG7mXQgxJHDoyDEkcaw4bujYyBnaeG6o2kgcXV54bq/dCBuaMawbmcgYuG6oW4gduG6q24gxJFhbmcgaMOyYSB0cuG7mW4uIgorCisjOiB3dC1zdGF0dXMuYzoxMTU2Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdFwiIHRvIGNvbmNsdWRlIG1lcmdlKSIKK21zZ3N0ciAiICAoZMO5bmcgXCJnaXQgY29tbWl0XCIgxJHhu4MgaG/DoG4gdOG6pXQgdmnhu4djIGjDsmEgdHLhu5luKSIKKworIzogd3Qtc3RhdHVzLmM6MTE2NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAiQuG6oW4gxJFhbmcg4bufIGdp4buvYSBj4bunYSBt4buZdCBwaGnDqm4g4oCcYW3igJ0uIgorCisjOiB3dC1zdGF0dXMuYzoxMTY4Cittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICJNaeG6v25nIHbDoSBoaeG7h24gdOG6oWkgYuG7iyB0cuG7kW5nIHLhu5duZy4iCisKKyM6IHd0LXN0YXR1cy5jOjExNzIKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChz4butYSBjw6FjIHh1bmcgxJHhu5l0IHbDoCBzYXUgxJHDsyBjaOG6oXkgbOG7h25oIFwiZ2l0IGFtIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjExNzQKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoZMO5bmcgXCJnaXQgYW0gLS1za2lwXCIgxJHhu4MgYuG7jyBxdWEgbWnhur9uZyB2w6EgbsOgeSkiCisKKyM6IHd0LXN0YXR1cy5jOjExNzYKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKGTDuW5nIFwiZ2l0IGFtIC0tYWJvcnRcIiDEkeG7gyBwaOG7pWMgaOG7k2kgbOG6oWkgbmjDoW5oIG5ndXnDqm4gdGjhu6d5KSIKKworIzogd3Qtc3RhdHVzLmM6MTMwOQorbXNnaWQgImdpdC1yZWJhc2UtdG9kbyBpcyBtaXNzaW5nLiIKK21zZ3N0ciAidGhp4bq/dSBnaXQtcmViYXNlLXRvZG8uIgorCisjOiB3dC1zdGF0dXMuYzoxMzExCittc2dpZCAiTm8gY29tbWFuZHMgZG9uZS4iCittc2dzdHIgIktow7RuZyB0aOG7sWMgaGnhu4duIGzhu4duaCBuw6BvLiIKKworIzogd3Qtc3RhdHVzLmM6MTMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXN0IGNvbW1hbmQgZG9uZSAoJWQgY29tbWFuZCBkb25lKToiCittc2dpZF9wbHVyYWwgIkxhc3QgY29tbWFuZHMgZG9uZSAoJWQgY29tbWFuZHMgZG9uZSk6IgorbXNnc3RyWzBdICJM4buHbmggdGjhu7FjIGhp4buHbiBjdeG7kWkgKCVkIGzhu4duaCDEkcaw4bujYyB0aOG7sWMgdGhpKToiCisKKyM6IHd0LXN0YXR1cy5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAoc2VlIG1vcmUgaW4gZmlsZSAlcykiCittc2dzdHIgIiAgKHhlbSB0aMOqbSB0cm9uZyAlcykiCisKKyM6IHd0LXN0YXR1cy5jOjEzMzAKK21zZ2lkICJObyBjb21tYW5kcyByZW1haW5pbmcuIgorbXNnc3RyICJLaMO0bmcgY8OzIGzhu4duaCBuw6BvIGPDsm4gbOG6oWkuIgorCisjOiB3dC1zdGF0dXMuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5leHQgY29tbWFuZCB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmQpOiIKK21zZ2lkX3BsdXJhbCAiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiCittc2dzdHJbMF0gIkzhu4duaCBj4bqnbiBsw6BtIGvhur8gdGnhur9wICglZCBs4buHbmggY8OybiBs4bqhaSk6IgorCisjOiB3dC1zdGF0dXMuYzoxMzQxCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIgIChkw7luZyBs4buHbmggXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgxJHhu4MgeGVtIHbDoCBz4butYSkiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIkLhuqFuIGhp4buHbiBuYXkgxJFhbmcgdGjhu7FjIGhp4buHbiB2aeG7h2Mg4oCccmViYXNl4oCdIG5ow6FuaCDigJwlc+KAnSB0csOqbiDigJwlc+KAnS4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNTgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgIkLhuqFuIGhp4buHbiBuYXkgxJFhbmcgdGjhu7FjIGhp4buHbiB2aeG7h2Mg4oCccmViYXNl4oCdICjigJxj4bqjaSB04buV4oCdKS4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNzEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKHPhu61hIGPDoWMgeHVuZyDEkeG7mXQgdsOgIHNhdSDEkcOzIGNo4bqheSBs4buHbmgg4oCcY+G6o2kgdOG7leKAnSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTM3MworbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoZMO5bmcgbOG7h25oIOKAnGPhuqNpIHThu5XigJ0gXCJnaXQgcmViYXNlIC0tc2tpcFwiIMSR4buDIGLhu48gcXVhIGzhuqduIHbDoSBuw6B5KSIKKworIzogd3Qtc3RhdHVzLmM6MTM3NQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKGTDuW5nIGzhu4duaCDigJxj4bqjaSB04buV4oCdIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgxJHhu4MgY2hlY2stb3V0IG5ow6FuaCBuZ3V5w6puIHRo4buneSkiCisKKyM6IHd0LXN0YXR1cy5jOjEzODIKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChraGkgdOG6pXQgY+G6oyBjw6FjIHh1bmcgxJHhu5l0IMSRw6Mgc+G7rWEgeG9uZzogY2jhuqF5IGzhu4duaCDigJxj4bqjaSB04buV4oCdIFwiZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTM4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisiQuG6oW4gaGnhu4duIG5heSDEkWFuZyB0aOG7sWMgaGnhu4duIHZp4buHYyBjaGlhIHTDoWNoIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gdHJvbmcga2hpICIKKyLEkWFuZyDigJxyZWJhc2XigJ0gbmjDoW5oIOKAnCVz4oCdIHRyw6puIOKAnCVz4oCdLiIKKworIzogd3Qtc3RhdHVzLmM6MTM5MQorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICIiCisiQuG6oW4gaGnhu4duIHThuqFpIMSRYW5nIGPhuq90IMSRw7RpIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gdHJvbmcga2hpIMSRYW5nIHRo4buxYyBoaeG7h24gdmnhu4djICIKKyJyZWJhc2UuIgorCisjOiB3dC1zdGF0dXMuYzoxMzk0Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChN4buZdCBraGkgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBj4bunYSBi4bqhbiDEkcOjIGfhu41uIGfDoG5nLCBjaOG6oXkgbOG7h25oIOKAnGPhuqNpIHThu5XigJ0gXCJnaXQgIgorInJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJC4bqhbiBoaeG7h24gbmF5IMSRYW5nIHRo4buxYyBoaeG7h24gdmnhu4djIHPhu61hIGNo4buvYSBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIHRyb25nIGtoaSDEkWFuZyAiCisicmViYXNlIG5ow6FuaCDigJwlc+KAnSB0csOqbiDigJwlc+KAnS4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIkLhuqFuIGhp4buHbiDEkWFuZyBz4butYSBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIHRyb25nIGtoaSBi4bqhbiB0aOG7sWMgaGnhu4duIHJlYmFzZS4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBjb21taXQgLS1hbWVuZFwiIMSR4buDIOKAnHR1IGLhu5XigJ0gbOG6p24gY2h1eeG7g24gZ2lhbyBoaeG7h24gdOG6oWkpIgorCisjOiB3dC1zdGF0dXMuYzoxNDA4Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIiCisiICAoY2jhuqF5IGzhu4duaCDigJxj4bqjaSB04buV4oCdIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgbeG7mXQga2hpIGLhuqFuIGPhuqNtIHRo4bqleSBow6BpICIKKyJsw7JuZyB24buBIG5o4buvbmcgdGhheSDEkeG7lWkgY+G7p2EgbcOsbmgpIgorCisjOiB3dC1zdGF0dXMuYzoxNDE5Cittc2dpZCAiQ2hlcnJ5LXBpY2sgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiQ2hlcnJ5LXBpY2sgaGnhu4duIHThuqFpIMSRYW5nIMSRxrDhu6NjIHRo4buxYyBoaeG7h24uIgorCisjOiB3dC1zdGF0dXMuYzoxNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIkLhuqFuIGhp4buHbiBuYXkgxJFhbmcgdGjhu7FjIGhp4buHbiB2aeG7h2MgY2hlcnJ5LXBpY2sgbOG6p24gY2h1eeG7g24gZ2lhbyAlcy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MjkKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKHPhu61hIGPDoWMgeHVuZyDEkeG7mXQgdsOgIHNhdSDEkcOzIGNo4bqheSBs4buHbmggXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzMgorbXNnaWQgIiAgKHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIChjaOG6oXkgbOG7h25oIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiDEkeG7gyB0aeG6v3AgdOG7pWMpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM1Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChraGkgdOG6pXQgY+G6oyBjw6FjIHh1bmcgxJHhu5l0IMSRw6Mgc+G7rWEgeG9uZzogY2jhuqF5IGzhu4duaCBcImdpdCBjaGVycnktcGljayAtLSIKKyJjb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzNworbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiDEkeG7gyBi4buPIHF1YSBtaeG6v25nIHbDoSBuw6B5KSIKKworIzogd3Qtc3RhdHVzLmM6MTQzOQorbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgxJHhu4MgaOG7p3kgYuG7jyB0aGFvIHTDoWMgY2hlcnJ5LXBpY2spIgorCisjOiB3dC1zdGF0dXMuYzoxNDQ5Cittc2dpZCAiUmV2ZXJ0IGN1cnJlbnRseSBpbiBwcm9ncmVzcy4iCittc2dzdHIgIkhvw6BuIG5ndXnDqm4gaGnhu4duIHThuqFpIMSRYW5nIHRo4buxYyBoaeG7h24uIgorCisjOiB3dC1zdGF0dXMuYzoxNDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJldmVydGluZyBjb21taXQgJXMuIgorbXNnc3RyICJC4bqhbiBoaeG7h24gbmF5IMSRYW5nIHRo4buxYyBoaeG7h24gdGhhbyB0w6FjIGhvw6BuIG5ndXnDqm4gbOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnS4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTgKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHPhu61hIGPDoWMgeHVuZyDEkeG7mXQgdsOgIHNhdSDEkcOzIGNo4bqheSBs4buHbmggXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjEKK21zZ2lkICIgIChydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIiB0byBjb250aW51ZSkiCittc2dzdHIgIiAgKGNo4bqheSBs4buHbmggXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIiDEkeG7gyB0aeG6v3AgdOG7pWMpIgorCisjOiB3dC1zdGF0dXMuYzoxNDY0Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAoa2hpIHThuqV0IGPhuqMgY8OhYyB4dW5nIMSR4buZdCDEkcOjIHPhu61hIHhvbmc6IGNo4bqheSBs4buHbmggXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjYKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKGTDuW5nIGzhu4duaCBcImdpdCByZXZlcnQgLS1za2lwXCIgxJHhu4MgYuG7jyBxdWEgbOG6p24gdsOhIG7DoHkpIgorCisjOiB3dC1zdGF0dXMuYzoxNDY4Cittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICAoZMO5bmcgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiDEkeG7gyBo4buneSBi4buPIHRoYW8gdMOhYyBob8OgbiBuZ3V5w6puKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJyVzJy4iCittc2dzdHIgIiIKKyJC4bqhbiBoaeG7h24gbmF5IMSRYW5nIHRo4buxYyBoaeG7h24gdGhhbyB0w6FjIGRpIGNodXnhu4NuIG7hu61hIGLGsOG7m2MgKGJpc2VjdCksIGLhuq90IMSR4bqndSB04burICIKKyJuaMOhbmgg4oCcJXPigJ0uIgorCisjOiB3dC1zdGF0dXMuYzoxNDgyCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLiIKK21zZ3N0ciAiQuG6oW4gaGnhu4duIHThuqFpIMSRYW5nIHRo4buxYyBoaeG7h24gdmnhu4djIGJpc2VjdCAoZGkgY2h1eeG7g24gbuG7rWEgYsaw4bubYykuIgorCisjOiB3dC1zdGF0dXMuYzoxNDg1Cittc2dpZCAiICAodXNlIFwiZ2l0IGJpc2VjdCByZXNldFwiIHRvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBiaXNlY3QgcmVzZXRcIiDEkeG7gyBxdWF5IHRy4bufIGzhuqFpIG5ow6FuaCBuZ3V5w6puIHRo4buneSkiCisKKyM6IHd0LXN0YXR1cy5jOjE2OTQKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICJUcsOqbiBuaMOhbmggIgorCisjOiB3dC1zdGF0dXMuYzoxNzAxCittc2dpZCAiaW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAicmViYXNlIOG7nyBjaOG6vyDEkeG7mSB0xrDGoW5nIHTDoWMgxJFhbmcgxJHGsOG7o2MgdGjhu7FjIGhp4buHbjsgbMOqbiB0csOqbiAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDMKK21zZ2lkICJyZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICJyZWJhc2UgxJFhbmcgxJHGsOG7o2MgdGjhu7FjIGhp4buHbjogbMOqbiB0csOqbiAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MTMKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICJIaeG7h24gdOG6oWkgY2jhurNuZyDhu58gbmjDoW5oIG7DoG8gY+G6oy4iCisKKyM6IHd0LXN0YXR1cy5jOjE3MzAKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyBraOG7n2kgdOG6oW8iCisKKyM6IHd0LXN0YXR1cy5jOjE3MzEKK21zZ2lkICJObyBjb21taXRzIHlldCIKK21zZ3N0ciAiVuG6q24gY2jGsGEgY2h1eeG7g24gZ2lhbyIKKworIzogd3Qtc3RhdHVzLmM6MTc0NQorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiTmjhu69uZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ3Cittc2dpZCAiSWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiTmjhu69uZyB04bqtcCB0aW4gYuG7iyBs4budIMSRaSIKKworIzogd3Qtc3RhdHVzLmM6MTc1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisiQ+G6p24gJS4yZiBnacOieSDEkeG7gyBsaeG7h3Qga8OqIHThuqV0IGPhuqMgY8OhYyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpLiDigJxzdGF0dXMgLSIKKyJ1bm/igJ1cbiIKKyJjw7MgbOG6vSBsw6BtIG7DsyBuaGFuaCBoxqFuLCBuaMawbmcgYuG6oW4gcGjhuqNpIGPhuqluIHRo4bqtbiDEkeG7q25nIHF1w6puIG3DrG5oIHBo4bqjaVxuIgorInThu7EgdGjDqm0gY8OhYyB04bqtcCB0aW4gbeG7m2kgKHhlbSDigJxnaXQgaGVscCBzdGF0dXPigJ0uLiIKKworIzogd3Qtc3RhdHVzLmM6MTc1NworIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICJOaOG7r25nIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkga2jDtG5nIMSRxrDhu6NjIGxp4buHdCBrw6ogcmEgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTkKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIgKGTDuW5nIHTDuXkgY2jhu41uIC11IMSR4buDIGhp4buDbiB0aOG7iyBjw6FjIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkpIgorCisjOiB3dC1zdGF0dXMuYzoxNzY1Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aGF5IMSR4buVaSBuw6BvIgorCisjOiB3dC1zdGF0dXMuYzoxNzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICIiCisia2jDtG5nIGPDsyB0aGF5IMSR4buVaSBuw6BvIMSRxrDhu6NjIHRow6ptIHbDoG8gxJHhu4MgY2h1eeG7g24gZ2lhbyAoZMO5bmcgXCJnaXQgYWRkXCIgdsOgL2hv4bq3YyAiCisiXCJnaXQgY29tbWl0IC1hXCIpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXRcbiIKK21zZ3N0ciAia2jDtG5nIGPDsyB0aGF5IMSR4buVaSBuw6BvIMSRxrDhu6NjIHRow6ptIHbDoG8gxJHhu4MgY2h1eeG7g24gZ2lhb1xuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIiIKKyJraMO0bmcgY8OzIGfDrCDEkcaw4bujYyB0aMOqbSB2w6BvIGzhuqduIGNodXnhu4NuIGdpYW8gbmjGsG5nIGPDsyBuaOG7r25nIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyAiCisidGhlbyBkw7VpIGhp4buHbiBkaeG7h24gKGTDuW5nIFwiZ2l0IGFkZFwiIMSR4buDIMSRxrBhIHbDoG8gdGhlbyBkw7VpKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICIiCisia2jDtG5nIGPDsyBnw6wgxJHGsOG7o2MgdGjDqm0gdsOgbyBs4bqnbiBjaHV54buDbiBnaWFvIG5oxrBuZyBjw7Mgbmjhu69uZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgIgorInRoZW8gZMO1aSBoaeG7h24gZGnhu4duXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iCittc2dzdHIgIiIKKyJraMO0bmcgY8OzIGfDrCDEkeG7gyBjaHV54buDbiBnaWFvICh04bqhby9zYW8tY2jDqXAgY8OhYyB04bqtcCB0aW4gdsOgIGTDuW5nIFwiZ2l0IGFkZFwiIMSR4buDICIKKyLEkcawYSB2w6BvIHRoZW8gZMO1aSlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc4NSB3dC1zdGF0dXMuYzoxNzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0XG4iCittc2dzdHIgImtow7RuZyBjw7MgZ8OsIMSR4buDIGNodXnhu4NuIGdpYW9cbiIKKworIzogd3Qtc3RhdHVzLmM6MTc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKVxuIgorbXNnc3RyICIiCisia2jDtG5nIGPDsyBnw6wgxJHhu4MgY2h1eeG7g24gZ2lhbyAoZMO5bmcgLXUgeGVtIGPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuXG4iCittc2dzdHIgImtow7RuZyBjw7MgZ8OsIMSR4buDIGNodXnhu4NuIGdpYW8sIHRoxrAgbeG7pWMgbMOgbSB2aeG7h2Mgc+G6oWNoIHPhur1cbiIKKworIzogd3Qtc3RhdHVzLmM6MTkwNQorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IG9uICIKK21zZ3N0ciAiVuG6q24ga2jDtG5nIHRo4buxYyBoaeG7h24gbOG7h25oIGNodXnhu4NuIGdpYW8gbsOgbyAiCisKKyM6IHd0LXN0YXR1cy5jOjE5MDkKK21zZ2lkICJIRUFEIChubyBicmFuY2gpIgorbXNnc3RyICJIRUFEIChraMO0bmcgbmjDoW5oKSIKKworIzogd3Qtc3RhdHVzLmM6MTk0MAorbXNnaWQgImRpZmZlcmVudCIKK21zZ3N0ciAia2jDoWMiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDIgd3Qtc3RhdHVzLmM6MTk1MAorbXNnaWQgImJlaGluZCAiCittc2dzdHIgIsSR4bqxbmcgc2F1ICIKKworIzogd3Qtc3RhdHVzLmM6MTk0NSB3dC1zdGF0dXMuYzoxOTQ4Cittc2dpZCAiYWhlYWQgIgorbXNnc3RyICJwaMOtYSB0csaw4bubYyAiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgYWN0aW9uIGlzIGUuZy4gInB1bGwgd2l0aCByZWJhc2UiCisjOiB3dC1zdGF0dXMuYzoyNDcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgImtow7RuZyB0aOG7gyAlczogQuG6oW4gY8OzIGPDoWMgdGhheSDEkeG7lWkgY2jGsGEgxJHGsOG7o2MgxJHGsGEgbMOqbiBi4buHIHBow7NuZy4iCisKKyM6IHd0LXN0YXR1cy5jOjI0NzYKK21zZ2lkICJhZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJ0aMOqbSB2w6BvIMSRw7MsIGLhuqNuZyBt4bulYyBs4bulYyBj4bunYSBi4bqhbiBjw7MgY2jhu6lhIGPDoWMgdGhheSDEkeG7lWkgY2jGsGEgxJHGsOG7o2MgY2h1eeG7g24gZ2lhby4iCisKKyM6IHd0LXN0YXR1cy5jOjI0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDICVzOiBN4bulYyBs4bulYyBj4bunYSBi4bqhbiBjw7MgY2jhu6lhIGPDoWMgdGhheSDEkeG7lWkgY2jGsGEgxJHGsOG7o2MgY2h1eeG7g24gZ2lhby4iCisKKyM6IGNvbXBhdC9wcmVjb21wb3NlX3V0ZjguYzo1OCBidWlsdGluL2Nsb25lLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGLhu48gbGnDqm4ga+G6v3QgKHVubGluaykg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbLS1dICA8cGF0aHNwZWM+4oCmIgorCisjOiBidWlsdGluL2FkZC5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgInRy4bqhbmcgdGjDoWkgbOG7h25oIGRpZmYga2jDtG5nIG5oxrAgbW9uZyDEkeG7o2kgJWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6OTMgYnVpbHRpbi9jb21taXQuYzoyODgKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgImPhuq1wIG5o4bqtdCB04bqtcCB0aW4gZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgImfhu6EgYuG7jyDigJwlc+KAnVxuIgorCisjOiBidWlsdGluL2FkZC5jOjE3OAorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVmcmVzaGluZyB0aGUgaW5kZXg6IgorbXNnc3RyICIiCisixJDGsGEgcmEga2jhu49pIGLhu4cgcGjDs25nIGPDoWMgdGhheSDEkeG7lWkgc2F1IGtoaSBsw6BtIHTGsMahaSBt4bubaSBs4bqhaSBi4bqjbmcgbeG7pWMgbOG7pWM6IgorCisjOiBidWlsdGluL2FkZC5jOjI2NiBidWlsdGluL3Jldi1wYXJzZS5jOjg5OQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buNYyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyDigJwlc+KAnSDEkeG7gyBnaGkuIgorCisjOiBidWlsdGluL2FkZC5jOjI4MQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSByYSBtaeG6v25nIHbDoSIKKworIzogYnVpbHRpbi9hZGQuYzoyODQKK21zZ2lkICJlZGl0aW5nIHBhdGNoIGZhaWxlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHPhu61hIG1p4bq/bmcgdsOhIgorCisjOiBidWlsdGluL2FkZC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB24buBIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2FkZC5jOjI4OQorbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAiTWnhur9uZyB2w6EgdHLhu5FuZyBy4buXbmcuIE7Dqm4gYuG7jyBxdWEuIgorCisjOiBidWlsdGluL2FkZC5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMOhcCBk4bulbmcgbWnhur9uZyB2w6Eg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzAyCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICIiCisiQ8OhYyDEkcaw4budbmcgZOG6q24gdGhlbyBzYXUgxJHDonkgc+G6vSBi4buLIGzhu50gxJFpIGLhu59pIG3hu5l0IHRyb25nIGPDoWMgdOG6rXAgdGluIC5naXRpZ25vcmUgIgorImPhu6dhIGLhuqFuOlxuIgorCisjOiBidWlsdGluL2FkZC5jOjMyMiBidWlsdGluL2NsZWFuLmM6OTEwIGJ1aWx0aW4vZmV0Y2guYzoxNjMgYnVpbHRpbi9tdi5jOjEyNAorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NiBidWlsdGluL3B1bGwuYzoyMDMgYnVpbHRpbi9wdXNoLmM6NTQ4CisjOiBidWlsdGluL3JlbW90ZS5jOjE0MjEgYnVpbHRpbi9ybS5jOjI0MiBidWlsdGluL3NlbmQtcGFjay5jOjE2NQorbXNnaWQgImRyeSBydW4iCittc2dzdHIgImNo4bqheSB0aOG7rSIKKworIzogYnVpbHRpbi9hZGQuYzozMjUKK21zZ2lkICJpbnRlcmFjdGl2ZSBwaWNraW5nIgorbXNnc3RyICJz4butYSBi4bqxbmcgY8OhY2ggdMawxqFuZyB0w6FjIgorCisjOiBidWlsdGluL2FkZC5jOjMyNiBidWlsdGluL2NoZWNrb3V0LmM6MTUxMSBidWlsdGluL3Jlc2V0LmM6MzA3Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgImNo4buNbiDigJxodW5rc+KAnSB0aGVvIGtp4buDdSB0xrDGoW5nIHTDoWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI3Cittc2dpZCAiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IgorbXNnc3RyICJz4butYSBkaWZmIGhp4buHbiBuYXkgdsOgIMOhcCBk4bulbmcgbsOzIgorCisjOiBidWlsdGluL2FkZC5jOjMyOAorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiY2hvIHBow6lwIHRow6ptIGPDoWMgdOG6rXAgdGluIGLhu4sgYuG7jyBxdWEga2jDoWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI5Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgImPhuq1wIG5o4bqtdCBjw6FjIHThuq1wIHRpbiDEkcaw4bujYyB0aGVvIGTDtWkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMwCittc2dpZCAicmVub3JtYWxpemUgRU9MIG9mIHRyYWNrZWQgZmlsZXMgKGltcGxpZXMgLXUpIgorbXNnc3RyICJ0aMaw4budbmcgaMOzYSBs4bqhaSBFT0wgY+G7p2EgY8OhYyB04bqtcCB0aW4gxJHGsOG7o2MgdGhlbyBkw7VpICjDvSBsw6AgLXUpIgorCisjOiBidWlsdGluL2FkZC5jOjMzMQorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAiY2jhu4kgZ2hpIGzhuqFpIHPhu7Egdmnhu4djIG3DoCDEkcaw4budbmcgZOG6q24gc+G6vSDEkcaw4bujYyB0aMOqbSB2w6BvIHNhdSIKKworIzogYnVpbHRpbi9hZGQuYzozMzIKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIiIKKyJ0aMOqbSBjw6FjIHRoYXkgxJHhu5VpIHThu6sgdOG6pXQgY+G6oyBjw6FjIHThuq1wIHRpbiBjw7MgY8WpbmcgbmjGsCBraMO0bmcgxJHGsOG7o2MgdGhlbyBkw7VpIGThuqV1ICIKKyJ24bq/dCIKKworIzogYnVpbHRpbi9hZGQuYzozMzUKK21zZ2lkICJpZ25vcmUgcGF0aHMgcmVtb3ZlZCBpbiB0aGUgd29ya2luZyB0cmVlIChzYW1lIGFzIC0tbm8tYWxsKSIKK21zZ3N0ciAiIgorImzhu50gxJFpIGPDoWMgxJHGsOG7nW5nIGThuqtuIGLhu4sgZ+G7oSBi4buPIHRyb25nIGPDonkgdGjGsCBt4bulYyBsw6BtIHZp4buHYyAoZ2nhu5FuZyB24bubaSAtLW5vLWFsbCkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM3Cittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJraMO0bmcgdGjDqm0sIGNo4buJIGzDoG0gdMawxqFpIG3hu5tpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9hZGQuYzozMzgKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICJjaGllIGLhu48gcXVhIG5o4buvbmcgdOG6rXAgdGluIG3DoCBuw7Mga2jDtG5nIHRo4buDIMSRxrDhu6NjIHRow6ptIHbDoG8gYuG7n2kgdsOsIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL2FkZC5jOjMzOQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAiIgorImtp4buDbSB0cmEgeGVtIC0gdGjhuq1tIGNow60gdGhp4bq/dSAtIHThuq1wIHRpbiBi4buLIGLhu48gcXVhIHRyb25nIHF1w6EgdHLDrG5oIGNo4bqheSB0aOG7rSIKKworIzogYnVpbHRpbi9hZGQuYzozNDEgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA0Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgImdoaSDEkcOoIGzDqm4gYsOtdCB0aGkgaMOgbmggY+G7p2EgY8OhYyB04bqtcCB0aW4gxJHGsOG7o2MgbGnhu4d0IGvDqiIKKworIzogYnVpbHRpbi9hZGQuYzozNDMKK21zZ2lkICJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiCittc2dzdHIgImPhuqNuaCBiw6FvIGtoaSB0aMOqbSBt4buZdCBraG8gbmjDum5nIgorCisjOiBidWlsdGluL2FkZC5jOjM0NQorbXNnaWQgImJhY2tlbmQgZm9yIGBnaXQgc3Rhc2ggLXBgIgorbXNnc3RyICLhu6luZyBk4bulbmcgY2jhuqF5IHBow61hIHNhdSBjaG8gJ2dpdCBzdGFzaCAtcCciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIklmIHlvdSBhZGRlZCB0aGlzIHBhdGggYnkgbWlzdGFrZSwgeW91IGNhbiByZW1vdmUgaXQgZnJvbSB0aGVcbiIKKyJpbmRleCB3aXRoOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2VlIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiQuG6oW4gduG7q2EgdGjDqm0gbeG7mXQga2hvIGdpdCB2w6BvIGLDqm4gdHJvbmcga2hvIGhp4buHbiB04bqhaSBj4bunYSBi4bqhbi5cbiIKKyJDw6FjIGLhuqNuIHNhbyBj4bunYSBraG8gbmdvw6BpIHPhur0ga2jDtG5nIGNo4bupYSBjw6FjIG7hu5lpIGR1bmcgY+G7p2FcbiIKKyJraG8gbmjDum5nIHbDoCBz4bq9IGtow7RuZyBiaeG6v3QgbMOgbSB0aOG6vyBuw6BvIMSR4buDIGzhuqV5IG7Dsy5cbiIKKyJO4bq/dSDDvSBi4bqhbiBsw6AgdGjDqm0gbeG7mXQgbcO0LcSRdW4tY29uLCBow6N5IGNo4bqheTpcbiIKKyJcbiIKKyJcdGdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisiTuG6v3UgYuG6oW4gxJHDoyB0aMOqbSBtaeG6v25nIHbDoSBuw6B5IGNo4buJIGzDoCBzYWkgc8OzdCwgYuG6oW4gY8OzIHRo4buDIHjDs2EgYuG7j1xuIgorIm7DsyBraOG7j2kgbeG7pWMgbOG7pWMgYuG6sW5nOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiWGVtIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QuIgorCisjOiBidWlsdGluL2FkZC5jOjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRpbmcgZW1iZWRkZWQgZ2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICJ0aMOqbSBj4bqnbiBt4buZdCBraG8gZ2l0IG5ow7puZzogJXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDEwCittc2dpZCAiIgorIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZElnbm9yZWRGaWxlIGZhbHNlXCIiCittc2dzdHIgIiIKKyJT4butIGThu6VuZyAtZiBu4bq/dSBi4bqhbiB0aOG7sWMgc+G7sSBtdeG7kW4gdGjDqm0gY2jDum5nLlxuIgorIlThuq90IHRow7RuZyBiw6FvIG7DoHkgYuG6sW5nIGPDoWNoIGNo4bqheSBs4buHbmhcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZElnbm9yZWRGaWxlIGZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDE5Cittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAidGjDqm0gdOG6rXAgdGluIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL2FkZC5jOjQ0NyBidWlsdGluL2NvbW1pdC5jOjM0OAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0taW50ZXJhY3RpdmUvLS1wYXRjaCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgeHVuZyBraOG6r2MgduG7m2kgLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjQ2NAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgeHVuZyBraOG6r2MgduG7m2kgLS1lZGl0IgorCisjOiBidWlsdGluL2FkZC5jOjQ3NgorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICItQSB2w6AgLXUgeHVuZyBraOG6r2MgbmhhdSIKKworIzogYnVpbHRpbi9hZGQuYzo0NzkKK21zZ2lkICJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIgorbXNnc3RyICJUw7l5IGNo4buNbiAtLWlnbm9yZS1taXNzaW5nIGNo4buJIGPDsyB0aOG7gyDEkcaw4bujYyBkw7luZyBjw7luZyB24bubaSAtLWRyeS1ydW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tY2htb2QgcGFyYW0gJyVzJyBtdXN0IGJlIGVpdGhlciAteCBvciAreCIKK21zZ3N0ciAiLS1jaG1vZCB0aGFtIHPhu5Eg4oCcJXPigJ0gcGjhuqNpIGhv4bq3YyBsw6AgLXggaGF5ICt4IgorCisjOiBidWlsdGluL2FkZC5jOjUwMSBidWlsdGluL2NoZWNrb3V0LmM6MTY3NSBidWlsdGluL2NvbW1pdC5jOjM1NAorIzogYnVpbHRpbi9yZXNldC5jOjMyNyBidWlsdGluL3JtLmM6MjcyIGJ1aWx0aW4vc3Rhc2guYzoxNTA5Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSB4dW5nIGto4bqvYyB24bubaSBjw6FjIHRoYW0gc+G7kSDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTA4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjg3IGJ1aWx0aW4vY29tbWl0LmM6MzYwCisjOiBidWlsdGluL3Jlc2V0LmM6MzMzIGJ1aWx0aW4vcm0uYzoyNzggYnVpbHRpbi9zdGFzaC5jOjE1MTUKK21zZ2lkICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorbXNnc3RyICItLXBhdGhzcGVjLWZpbGUtbnVsIGPhuqduIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorCisjOiBidWlsdGluL2FkZC5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBnw6wgxJHGsOG7o2MgY2jhu4kgcmEsIGtow7RuZyBjw7MgZ8OsIMSRxrDhu6NjIHRow6ptIHbDoG8uXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTE0Cittc2dpZCAiIgorIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5hZGRFbXB0eVBhdGhzcGVjIGZhbHNlXCIiCittc2dzdHIgIiIKKyJDw7MgbOG6vSBi4bqhbiBtdeG7kW4gY2jhuqF5ICdnaXQgYWRkIC4nP1xuIgorIlThuq90IHRow7RuZyBiw6FvIG7DoHkgYuG6sW5nIGPDoWNoIGNo4bqheSBs4buHbmhcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZEVtcHR5UGF0aHNwZWMgZmFsc2VcIiIKKworIzogYnVpbHRpbi9hbS5jOjM1MgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBhdXRob3Igc2NyaXB0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY8O6IHBow6FwIHbEg24gbOG7h25oIHTDoWMgZ2nhuqMiCisKKyM6IGJ1aWx0aW4vYW0uYzo0MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyB3YXMgZGVsZXRlZCBieSB0aGUgYXBwbHlwYXRjaC1tc2cgaG9vayIKK21zZ3N0ciAi4oCcJXPigJ0gYuG7iyB4w7NhIGLhu59pIG3Ds2MgYXBwbHlwYXRjaC1tc2ciCisKKyM6IGJ1aWx0aW4vYW0uYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICJEw7JuZyDEkeG6p3UgdsOgbyBk4buLIGjDrG5oOiDigJwlc+KAnS4iCisKKyM6IGJ1aWx0aW4vYW0uYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBzYW8gY2jDqXAgZ2hpIGNow7ogKG5vdGUpIHThu6sg4oCcJXPigJ0gdOG7m2kg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYW0uYzo1NDIKK21zZ2lkICJmc2VlayBmYWlsZWQiCittc2dzdHIgImZzZWVrIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL2FtLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXRjaCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY8O6IHBow6FwIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2FtLmM6Nzk1Cittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgIkNo4buJIGPDsyBt4buZdCBzw6otcmkgbWnhur9uZyB2w6EgU3RHSVQgxJHGsOG7o2Mgw6FwIGThu6VuZyBt4buZdCBsw7pjIgorCisjOiBidWlsdGluL2FtLmM6ODQzCittc2dpZCAiaW52YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgImThuqV1IHRo4budaSBnaWFuIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBidWlsdGluL2FtLmM6ODQ4IGJ1aWx0aW4vYW0uYzo4NjAKK21zZ2lkICJpbnZhbGlkIERhdGUgbGluZSIKK21zZ3N0ciAiZMOybmcgTmfDoHkgdGjDoW5nIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBidWlsdGluL2FtLmM6ODU1Cittc2dpZCAiaW52YWxpZCB0aW1lem9uZSBvZmZzZXQiCittc2dzdHIgIsSR4buZIGzhu4djaCBtw7ppIGdp4budIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBidWlsdGluL2FtLmM6OTQ4Cittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICJEw7IgdMOsbSDEkeG7i25oIGThuqFuZyBtaeG6v25nIHbDoSBn4bq3cCBs4buXaS4iCisKKyM6IGJ1aWx0aW4vYW0uYzo5NTMgYnVpbHRpbi9jbG9uZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJ04bqhbyB0aMawIG3hu6VjIFwiJXNcIiBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9hbS5jOjk1OAorbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGNoaWEgbmjhu48gY8OhYyBtaeG6v25nIHbDoS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIlcyAtLWNvbnRpbnVlXCIuIgorbXNnc3RyICJLaGkgYuG6oW4gxJHDoyBwaMOibiBnaeG6o2kgeG9uZyB0cuG7pWMgdHLhurdjIG7DoHksIGjDo3kgY2jhuqF5IFwiJXMgLS1jb250aW51ZVwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIgorbXNnc3RyICIiCisiTuG6v3UgYuG6oW4gbXXhu5FuIGLhu48gcXVhIG1p4bq/bmcgdsOhIG7DoHksIGjDo3kgY2jhuqF5IGzhu4duaCBcIiVzIC0tc2tpcFwiIMSR4buDIHRoYXkgdGjhur8uIgorCisjOiBidWlsdGluL2FtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iCittc2dzdHIgIsSQ4buDIHBo4bulYyBo4buTaSBs4bqhaSBuaMOhbmggZ+G7kWMgdsOgIGThu6tuZyB2w6EsIGjDo3kgY2jhuqF5IFwiJXMgLS1hYm9ydFwiLiIKKworIzogYnVpbHRpbi9hbS5jOjExNzQKK21zZ2lkICJQYXRjaCBzZW50IHdpdGggZm9ybWF0PWZsb3dlZDsgc3BhY2UgYXQgdGhlIGVuZCBvZiBsaW5lcyBtaWdodCBiZSBsb3N0LiIKK21zZ3N0ciAiIgorIk1p4bq/bmcgdsOhIMSRxrDhu6NjIGfhu61pIHbhu5tpIGZvcm1hdD1mbG93ZWQ7IGtob+G6o25nIHRy4buRbmcg4bufIGN14buRaSBj4bunYSBjw6FjIGTDsm5nIGPDsyB0aOG7gyAiCisiYuG7iyBt4bqldC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjAyCittc2dpZCAiUGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICJNaeG6v25nIHbDoSB0cuG7kW5nIHLhu5duZy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYXV0aG9yIGxpbmUgaW4gY29tbWl0ICVzIgorbXNnc3RyICJ0aGnhur91IGTDsm5nIHTDoWMgZ2nhuqMgdHJvbmcgbOG6p24gY2h1eeG7g24gZ2lhICVzIgorCisjOiBidWlsdGluL2FtLmM6MTI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICUuKnMiCittc2dzdHIgImTDsm5nIHRo4buldCBs4buBIGtow7RuZyBo4bujcCBs4buHOiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTQ4OQorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIktobyB0aGnhur91IMSR4buRaSB0xrDhu6NuZyBibG9iIGPhuqduIHRoaeG6v3QgxJHhu4MgdHLhu58gduG7gSB0csOqbiDigJwzLXdheSBtZXJnZeKAnS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDkxCittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAiIgorIlPhu60gZOG7pW5nIHRow7RuZyB0aW4gdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjIMSR4buDIGPhuqV1IHRyw7pjIGzhuqFpIG3hu5l0IGPDonkgKHRyZWUpIGPGoSBz4buf4oCmIgorCisjOiBidWlsdGluL2FtLmM6MTUxMAorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgIiIKKyJC4bqhbiDEkcOjIHPhu61hIG1p4bq/bmcgdsOhIGPhu6dhIG3DrG5oIGLhurFuZyBjw6FjaCB0aOG7pyBjw7RuZyDDoD9cbiIKKyJOw7Mga2jDtG5nIHRo4buDIMOhcCBk4bulbmcgY8OhYyBibG9iIMSRw6MgxJHGsOG7o2MgZ2hpIGzhuqFpIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyBj4bunYSBuw7MuIgorCisjOiBidWlsdGluL2FtLmM6MTUxNgorbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAixJBhbmcgdHLhu58gbOG6oWkgxJHhu4MgdsOhIGPGoSBz4bufIHbDoCDigJxow7JhIHRy4buZbiAzLcSRxrDhu51uZ+KAneKApiIKKworIzogYnVpbHRpbi9hbS5jOjE1NDIKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdHLhu5luIHbDoG8gY8OhYyB0aGF5IMSR4buVaS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTc0Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAiw6FwIGThu6VuZyB2w6BvIG3hu5l0IGzhu4tjaCBz4butIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL2FtLmM6MTYyMSBidWlsdGluL2FtLmM6MTYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgImtow7RuZyB0aOG7gyBwaOG7pWMgaOG7k2k6ICVzIGtow7RuZyB04buTbiB04bqhaS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjQzCittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICJUaMOibiBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIGzDoDoiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgIiIKKyLDgXAgZOG7pW5nPyDEkeG7k25nIMO9IFt5XS9raMO0W25dZy9jaOG7iW5oIHPhu61hIFtlXS9oaeG7g24gdGjhu4sgbWnhur9uZyBbdl3DoS9jaOG6pXAgbmjhuq1uIHThuqV0ICIKKyJj4bqjIFthXTogIgorCisjOiBidWlsdGluL2FtLmM6MTcwMCBidWlsdGluL2NvbW1pdC5jOjM5OAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiBsxrB1IG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2FtLmM6MTcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAlcykiCittc2dzdHIgIkLhuqNuZyBt4bulYyBs4bulYyBi4bqpbjoga2jDtG5nIHRo4buDIMOhcCBk4bulbmcgY8OhYyBtaeG6v25nIHbDoSAoYuG6qW46ICVzKSIKKworIzogYnVpbHRpbi9hbS5jOjE3NDQgYnVpbHRpbi9hbS5jOjE4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICUuKnMiCittc2dzdHIgIsOBcCBk4bulbmc6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzYxCittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICJLaMO0bmcgdGhheSDEkeG7lWkgZ8OsIGPhuqMgLS0gTWnhur9uZyB2w6EgxJHDoyDEkcaw4bujYyDDoXAgZOG7pW5nIHLhu5NpLiIKKworIzogYnVpbHRpbi9hbS5jOjE3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICVzICUuKnMiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB2w6EgdOG6oWkgJXMgJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE3NzEKK21zZ2lkICJVc2UgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaD1kaWZmJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAiRMO5bmcg4oCcZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoPWRpZmbigJ0gxJHhu4MgeGVtIG1p4bq/bmcgdsOhIGLhu4sgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODE1Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisiS2jDtG5nIGPDsyB0aGF5IMSR4buVaSBuw6BvIC0gYuG6oW4gxJHDoyBxdcOqbiBz4butIGThu6VuZyBs4buHbmgg4oCcZ2l0IGFkZOKAnSDDoD9cbiIKKyJO4bq/dSDhu58gxJHDonkga2jDtG5nIGPDsyBnw6wgY8OybiBs4bqhaSBzdGFnZSwgdMOsbmggY+G7nSBsw6AgY8OzIG3hu5l0IHPhu5EgdGjhu6kga2jDoWNcbiIKKyLEkcOjIHPhurVuIMSRxrDhu6NjIMSRxrBhIHbDoG8gduG7m2kgY8O5bmcgbuG7mWkgZHVuZyB0aGF5IMSR4buVaTsgYuG6oW4gY8OzIGzhur0gbXXhu5FuIGLhu48gcXVhIG1p4bq/bmcgIgorInbDoSBuw6B5LiIKKworIzogYnVpbHRpbi9hbS5jOjE4MjIKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJZb3Ugc2hvdWxkICdnaXQgYWRkJyBlYWNoIGZpbGUgd2l0aCByZXNvbHZlZCBjb25mbGljdHMgdG8gbWFyayB0aGVtIGFzICIKKyJzdWNoLlxuIgorIllvdSBtaWdodCBydW4gYGdpdCBybWAgb24gYSBmaWxlIHRvIGFjY2VwdCBcImRlbGV0ZWQgYnkgdGhlbVwiIGZvciBpdC4iCittc2dzdHIgIiIKKyJC4bqhbiB24bqrbiBjw7Mgbmjhu69uZyDEkcaw4budbmcgZOG6q24gY2jGsGEgaMOyYSB0cuG7mW4gdHJvbmcgY2jhu4kgbeG7pWMgY+G7p2EgYuG6oW4uXG4iCisiQuG6oW4gbsOqbiDigJxnaXQgYWRk4oCdIHThu6tuZyB04bqtcCB0aW4gduG7m2kgY8OhYyB4dW5nIMSR4buZdCDEkcOjIMSRxrDhu6NjIGdp4bqjaSBxdXnhur90IMSR4buDIMSRw6FuaCAiCisiZOG6pXUgY2jDum5nIGzDoCB0aOG6vy5cbiIKKyJC4bqhbiBjw7MgbOG6vSBtdeG7kW4gY2jhuqF5IOKAnGdpdCBybeKAnCB0csOqbiBt4buZdCB04bqtcCB0aW4gxJHhu4MgY2jhuqVwIG5o4bqtbiBcIsSRxrDhu6NjIHjDs2EgYuG7n2kgaOG7jSIKKyJcIiBjaG8gbsOzLiIKKworIzogYnVpbHRpbi9hbS5jOjE5MjkgYnVpbHRpbi9hbS5jOjE5MzMgYnVpbHRpbi9hbS5jOjE5NDUgYnVpbHRpbi9yZXNldC5jOjM0NgorIzogYnVpbHRpbi9yZXNldC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggxJHhu5FpIHTGsOG7o25nIOKAnCVz4oCdLiIKKworIzogYnVpbHRpbi9hbS5jOjE5ODEKK21zZ2lkICJmYWlsZWQgdG8gY2xlYW4gaW5kZXgiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBk4buNbiBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMDI1Cittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKyJC4bqhbiBjw7MgbOG6vSDEkcOjIGPDsyBIRUFEIMSRw6MgYuG7iyBkaSBjaHV54buDbiDEkWkga+G7gyB04burIGzhuqduIOKAnGFt4oCdIHRo4bqldCBi4bqhaSBjdeG7kWkgY8O5bmcuXG4iCisiS2jDtG5nIHRo4buDIGNodXnhu4NuIHThu5tpIE9SSUdfSEVBRCIKKworIzogYnVpbHRpbi9hbS5jOjIxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICJHacOhIHRy4buLIGtow7RuZyBo4bujcCBs4buHIGNobyAtLXBhdGNoLWZvcm1hdDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIC0tc2hvdy1jdXJyZW50LXBhdGNoOiAlcyIKK21zZ3N0ciAiR2nDoSB0cuG7iyBraMO0bmcgaOG7o3AgbOG7hyBjaG8gLS1zaG93LWN1cnJlbnQtcGF0Y2g6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICItLXNob3ctY3VycmVudC1wYXRjaD0lcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXNob3ctY3VycmVudC1wYXRjaD0lcyIKK21zZ3N0ciAiLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMgeHVuZyBraOG6r2MgduG7m2kgLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA3Cittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCittc2dzdHIgImdpdCBhbSBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbKDxtYm94Pnw8TWFpbGRpcj4p4oCmXSIKKworIzogYnVpbHRpbi9hbS5jOjIyMDgKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKK21zZ3N0ciAiZ2l0IGFtIFs8Y8OhYyB0w7l5IGNo4buNbj5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE0Cittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgImNo4bqheSBraeG7g3UgdMawxqFuZyB0w6FjIgorCisjOiBidWlsdGluL2FtLmM6MjIxNgorbXNnaWQgImhpc3RvcmljYWwgb3B0aW9uIC0tIG5vLW9wIgorbXNnc3RyICJ0w7l5IGNo4buNbiBs4buLY2ggc+G7rSAtLSBraMO0bmctdG/DoW4tdOG7rSIKKworIzogYnVpbHRpbi9hbS5jOjIyMTgKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAiY2hvIHBow6lwIHF1YXkgdHLhu58gbOG6oWkgxJHhu4MgaMOyYSB0cuG7mW4ga2nhu4N1IOKAnDN3YXnigJ0gbuG6v3UgY+G6p24iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE5IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU4CisjOiBidWlsdGluL3JlcGFjay5jOjMwNCBidWlsdGluL3N0YXNoLmM6ODEyCittc2dpZCAiYmUgcXVpZXQiCittc2dzdHIgImltIGzhurduZyIKKworIzogYnVpbHRpbi9hbS5jOjIyMjEKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJ0aMOqbSBkw7JuZyBTaWduZWQtb2ZmLWJ5IGNobyBnaGkgY2jDuiBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2FtLmM6MjIyNAorbXNnaWQgInJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpIgorbXNnc3RyICJjaHV54buDbiBtw6MgdGjDoG5oIHV0ZjggKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL2FtLmM6MjIyNgorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgImNodXnhu4NuIGPhu50gLWsgY2hvIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIyMjgKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJjaHV54buDbiBj4budIC1iIGNobyBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAiY2h1eeG7g24gY+G7nSAtbSBjaG8gZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjIzMgorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgImNodXnhu4NuIGPhu50gLS1rZWVwLWNyIGNobyBnaXQtbWFpbHNwbGl0IHbhu5tpIMSR4buLbmggZOG6oW5nIG1ib3giCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM1Cittc2dpZCAiZG8gbm90IHBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudCBvZiBhbS5rZWVwY3IiCittc2dzdHIgIiIKKyLEkeG7q25nIGNodXnhu4NuIGPhu50gLS1rZWVwLWNyIGNobyBnaXQtbWFpbHNwbGl0IGtow7RuZyBwaOG7pSB0aHXhu5ljIHbDoG8gYW0ua2VlcGNyIgorCisjOiBidWlsdGluL2FtLmM6MjIzOAorbXNnaWQgInN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSIKK21zZ3N0ciAiY+G6r3QgbeG7jWkgdGjhu6kgdHLGsOG7m2MgZMOybmcgc2Npc3NvcnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQwIGJ1aWx0aW4vYW0uYzoyMjQzIGJ1aWx0aW4vYW0uYzoyMjQ2IGJ1aWx0aW4vYW0uYzoyMjQ5CisjOiBidWlsdGluL2FtLmM6MjI1MiBidWlsdGluL2FtLmM6MjI1NSBidWlsdGluL2FtLmM6MjI1OCBidWlsdGluL2FtLmM6MjI2MQorIzogYnVpbHRpbi9hbS5jOjIyNjcKK21zZ2lkICJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IgorbXNnc3RyICJjaHV54buDbiBuw7MgcXVhIGdpdC1hcHBseSIKKworIzogYnVpbHRpbi9hbS5jOjIyNTcgYnVpbHRpbi9jb21taXQuYzoxMzkxIGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MAorIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczIGJ1aWx0aW4vZ3JlcC5jOjg3MSBidWlsdGluL21lcmdlLmM6MjUwCisjOiBidWlsdGluL3B1bGwuYzoxNDAgYnVpbHRpbi9wdWxsLmM6MTk5IGJ1aWx0aW4vcmViYXNlLmM6MTUwNQorIzogYnVpbHRpbi9yZXBhY2suYzozMTUgYnVpbHRpbi9yZXBhY2suYzozMTkgYnVpbHRpbi9yZXBhY2suYzozMjEKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAgYnVpbHRpbi9zaG93LXJlZi5jOjE3MiBidWlsdGluL3RhZy5jOjQwMworIzogcGFyc2Utb3B0aW9ucy5oOjE1NCBwYXJzZS1vcHRpb25zLmg6MTc1IHBhcnNlLW9wdGlvbnMuaDozMTYKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2FtLmM6MjI2MyBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTYgYnVpbHRpbi90YWcuYzo0MzcgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgIsSR4buLbmggZOG6oW5nIgorCisjOiBidWlsdGluL2FtLmM6MjI2NAorbXNnaWQgImZvcm1hdCB0aGUgcGF0Y2goZXMpIGFyZSBpbiIKK21zZ3N0ciAixJHhu4tuaCBk4bqhbmcgKGPDoWMpIG1p4bq/bmcgdsOhIHRoZW8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjcwCittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICLEkcOoIGzDqm4gY8OhYyBs4budaSBuaOG6r24gbOG7l2kga2hpIHjhuqN5IHJhIGzhu5dpIHbDoSBuZ2hpw6ptIHRy4buNbmciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjcyCittc2dpZCAiY29udGludWUgYXBwbHlpbmcgcGF0Y2hlcyBhZnRlciByZXNvbHZpbmcgYSBjb25mbGljdCIKK21zZ3N0ciAidGnhur9wIHThu6VjIMOhcCBk4bulbmcgY8OhYyBtaeG6v25nIHbDoSBzYXUga2hpIGdp4bqjaSBxdXnhur90IHh1bmcgxJHhu5l0IgorCisjOiBidWlsdGluL2FtLmM6MjI3NQorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICLEkeG7k25nIG5naMSpYSB24bubaSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL2FtLmM6MjI3OAorbXNnaWQgInNraXAgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgImLhu48gcXVhIG1p4bq/bmcgdsOhIGhp4buHbiBow6BuaCIKKworIzogYnVpbHRpbi9hbS5jOjIyODEKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICJwaOG7pWMgaOG7k2kgbOG6oWkgbmjDoW5oIGfhu5FjIHbDoCBsb+G6oWkgYuG7jyB0aGFvIHTDoWMgdsOhLiIKKworIzogYnVpbHRpbi9hbS5jOjIyODQKK21zZ2lkICJhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uIGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMuIgorbXNnc3RyICJi4buPIHF1YSB0aGFvIHTDoWMgdsOhIG5oxrBuZyB24bqrbiBnaeG7ryBIRUFEIGNo4buJIMSR4bq/biBuw7MuIgorCisjOiBidWlsdGluL2FtLmM6MjI4OAorbXNnaWQgInNob3cgdGhlIHBhdGNoIGJlaW5nIGFwcGxpZWQiCittc2dzdHIgImhp4buDbiB0aOG7iyBtaeG6v25nIHbDoSDEkcOjIMSRxrDhu6NjIMOhcCBk4bulbmcgcuG7k2kiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjkzCittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICJuw7NpIGThu5FpIHbhu4EgbmfDoHkgY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9hbS5jOjIyOTUKK21zZ2lkICJ1c2UgY3VycmVudCB0aW1lc3RhbXAgZm9yIGF1dGhvciBkYXRlIgorbXNnc3RyICJkw7luZyBk4bqldSB0aOG7nWkgZ2lhbiBoaeG7h24gdOG6oWkgY2hvIG5nw6B5IHTDoWMgZ2nhuqMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk3IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMjAgYnVpbHRpbi9jb21taXQuYzoxNTEyCisjOiBidWlsdGluL21lcmdlLmM6Mjg3IGJ1aWx0aW4vcHVsbC5jOjE3NCBidWlsdGluL3JlYmFzZS5jOjUxNworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTU2IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE3IGJ1aWx0aW4vdGFnLmM6NDE4Cittc2dpZCAia2V5LWlkIgorbXNnc3RyICJtw6Mtc+G7kS1raMOzYSIKKworIzogYnVpbHRpbi9hbS5jOjIyOTggYnVpbHRpbi9yZWJhc2UuYzo1MTggYnVpbHRpbi9yZWJhc2UuYzoxNTU3Cittc2dpZCAiR1BHLXNpZ24gY29tbWl0cyIKK21zZ3N0ciAiQ8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGvDvS1HUEciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzAxCittc2dpZCAiKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCittc2dzdHIgIihkw7luZyBu4buZaSBi4buZIGNobyBnaXQtcmViYXNlKSIKKworIzogYnVpbHRpbi9hbS5jOjIzMTkKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKyJUw7l5IGNo4buNbiAtYi8tLWJpbmFyeSDEkcOjIGtow7RuZyBkw7luZyB04burIGzDonUgcuG7k2ksIHbDoFxuIgorIm7DsyBz4bq9IMSRxrDhu6NjIGLhu48gxJFpLiBYaW4gxJHhu6tuZyBz4butIGThu6VuZyBuw7MgdGjDqm0gbuG7r2EuIgorCisjOiBidWlsdGluL2FtLmM6MjMyNgorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kgxJHhu41jIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9hbS5jOjIzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICJ0aMawIG3hu6VjIHJlYmFzZSB0csaw4bubYyAlcyBraMO0bmcgc+G6tW4gY8OzIG5oxrBuZyBtYm94IGzhuqFpIMSRxrBhIHJhLiIKKworIzogYnVpbHRpbi9hbS5jOjIzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN0cmF5ICVzIGRpcmVjdG9yeSBmb3VuZC5cbiIKKyJVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlbW92ZSBpdC4iCittc2dzdHIgIiIKKyJUw6xtIHRo4bqleSB0aMawIG3hu6VjIGzhuqFjICVzLlxuIgorIkTDuW5nIFwiZ2l0IGFtIC0tYWJvcnRcIiDEkeG7gyBsb+G6oWkgYuG7jyBuw7MgxJFpLiIKKworIzogYnVpbHRpbi9hbS5jOjIzNzEKK21zZ2lkICJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIgorbXNnc3RyICJUaGFvIHTDoWMgcGjDom4gZ2nhuqNpIGtow7RuZyDEkcaw4bujYyB0aeG6v24gaMOgbmgsIGNow7puZyB0YSBraMO0bmcgcGjhu6VjIGjhu5NpIGzhuqFpLiIKKworIzogYnVpbHRpbi9hbS5jOjIzODEKK21zZ2lkICJpbnRlcmFjdGl2ZSBtb2RlIHJlcXVpcmVzIHBhdGNoZXMgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiY2jhur8gxJHhu5kgdMawxqFuZyB0w6FjIHnDqnUgY+G6p3UgY8OzIGPDoWMgbWnhur9uZyB2w6EgdHLDqm4gZMOybmcgbMOqbmgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4Cittc2dpZCAiZ2l0IGFwcGx5IFs8b3B0aW9ucz5dIFs8cGF0Y2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGFwcGx5IFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8bWnhur9uZy12w6E+4oCmXSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIHThuq1wIHRpbiBraG8gKGzGsHUgdHLhu68sIG7DqW4pIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgImtow7RuZyB0aOG7gyBjaHV54buDbiBoxrDhu5tuZyBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IE3DoXkgY2jhu6cga2jDtG5nIGPDsyDEkeG7i2EgY2jhu4kgVVJMIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBhcmNoaXZlOiBj4bqnbiBBQ0svTkFLLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjIGfDs2kgZmx1c2giCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjUKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlOiBs4buXaSBnaWFvIHRo4bupYyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjkKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IGPhuqduIG3hu5l0IGZsdXNoICjEkeG6qXkgZOG7ryBsaeG7h3UgbMOqbiDEkcSpYSkiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMgorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8YmFkX3Rlcm0+IDxnb29kX3Rlcm0+IgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8YmFkX3Rlcm0+IDxnb29kX3Rlcm0+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjQKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXJlc2V0IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGzhuqduX2NodXnhu4NuX2dpYW8+XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI2Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSBbLS1uby1sb2ddIDxzdGF0ZT4gPHJldmlzaW9uPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSBbLS1uby1sb2ddIDxzdGF0ZT4gPHJldmlzaW9uPiA8bMO6Y19zYWk+ICIKKyI8bMO6Y1/EkcO6bmc+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjcKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPGNvbW1hbmQ+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPGNvbW1hbmQ+IDxsw7pjX3NhaT4gIgorIjxsw7pjX8SRw7puZz4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOAorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrIDxnb29kX3Rlcm0+IDxiYWRfdGVybT4gWzx0ZXJtPl0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrIDxsw7pjX3NhaT4gPGzDumNfxJHDum5nPiBbPHRlcm0+XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC10ZXJtcyBbLS10ZXJtLWdvb2QgfCAtLXRlcm0tb2xkIHwgLS10ZXJtLWJhZCB8IC0tIgorInRlcm0tbmV3XSIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC10ZXJtcyBbLS10ZXJtLWdvb2QgfCAtLXRlcm0tb2xkIHwgLS10ZXJtLWJhZCB8IC0tIgorInRlcm0tbmV3XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMwCittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1zdGFydCBbLS10ZXJtLXtvbGQsZ29vZH09PHRlcm0+IC0tdGVybS17bmV3LGJhZH0iCisiPTx0ZXJtPl1bLS1uby1jaGVja291dF0gWzxiYWQ+IFs8Z29vZD4uLi5dXSBbLS1dIFs8cGF0aHM+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1zdGFydCBbLS10ZXJtLXtvbGQsZ29vZH09PHRlcm0+IC0tdGVybS17bmV3LGJhZH0iCisiPTx0ZXJtPl1bLS1uby1jaGVja291dF0gWzxzYWk+IFs8xJHDum5nPuKApl1dIFstLV0gWzwvY8OhYy/Ekcaw4budbmcvZOG6q24+4oCmXSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGVybSIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBt4buZdCB0aOG7nWkgaOG6oW4gaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHVzZSB0aGUgYnVpbHRpbiBjb21tYW5kICclcycgYXMgYSB0ZXJtIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZMO5bmcgbOG7h25oIHTDrWNoIGjhu6NwIOKAnCVz4oCdIG5oxrAgbMOgIG3hu5l0IHRo4budaSBr4buzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgdGVybSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdGhheSDEkeG7lWkgbmdoxKlhIGPhu6dhIHRo4budaSBr4buzIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTExCittc2dpZCAicGxlYXNlIHVzZSB0d28gZGlmZmVyZW50IHRlcm1zIgorbXNnc3RyICJ2dWkgbMOybmcgZMO5bmcgaGFpIHRo4budaSBr4buzIGtow6FjIG5oYXUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTgKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0aGUgZmlsZSBCSVNFQ1RfVEVSTVMiCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIHThuq1wIHRpbiBCSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuXG4iCittc2dzdHIgIkNow7puZyB0w7RpIMSRYW5nIGtow7RuZyBiaXNlY3QuXG4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyBo4bujcCBs4buHIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyVzJy4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4MgbOG6pXkgcmEgSEVBRCBuZ3V5w6puIHRo4buneSBj4bunYSDigJwlc+KAnS4gSMOjeSB0aOG7rSDigJxnaXQgYmlzZWN0IHJlc2V0IDxs4bqnbi0iCisiY2h1eeG7g24tZ2lhbz7igJ0uIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLEkOG7kWkgc+G7kSBiaXNlY3Rfd3JpdGUgc2FpOiAlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBnZXQgdGhlIG9pZCBvZiB0aGUgcmV2ICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSBvaWQgY+G7p2EgxJFp4buDbSB4w6l0IGR1eeG7h3Qg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3Qgb3BlbiB0aGUgZmlsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21tYW5kOiB5b3UncmUgY3VycmVudGx5IGluIGEgJXMvJXMgYmlzZWN0IgorbXNnc3RyICJM4buHbmgga2jDtG5nIGjhu6NwIGzhu4c6IGLhuqFuIGhp4buHbiDEkWFuZyDhu58gbeG7mXQgYmlzZWN0ICVzLyVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorIkLhuqFuIHBo4bqjaSBjaOG7iSBjaG8gdMO0aSDDrXQgbmjhuqV0IG3hu5l0IMSRaeG7g20gJXMgdsOgIG3hu5l0ICVzLlxuIgorIkLhuqFuIGPDsyB0aOG7gyBz4butIGThu6VuZyBcImdpdCBiaXNlY3QgJXNcIiB2w6AgXCJnaXQgYmlzZWN0ICVzXCIgY2hvIGPDoWkgxJHDsy4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyJC4bqhbiBj4bqnbiBi4bqvdCDEkeG6p3UgYuG6sW5nIGzhu4duaCBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJC4bqhbiBzYXUgxJHDsyBj4bqnbiBwaOG6o2kgY2jhu4kgY2hvIHTDtGkgw610IG5o4bqldCBt4buZdCDEkWnhu4NtIHjDqXQgZHV54buHdCAlcyB2w6AgbeG7mXQgJXMuXG4iCisiQuG6oW4gY8OzIHRo4buDIHPhu60gZOG7pW5nIFwiZ2l0IGJpc2VjdCAlc1wiIHbDoCBcImdpdCBiaXNlY3QgJXNcIiBjaG8gY2jDum5nLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiaXNlY3Rpbmcgb25seSB3aXRoIGEgJXMgY29tbWl0IgorbXNnc3RyICJjaOG7iSB0aOG7sWMgaGnhu4duIHZp4buHYyBiaXNlY3QgduG7m2kgbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyAlcyIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMxOAorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICJC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBjaMawYSBbWS9uXT8gIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mzc5Cittc2dpZCAibm8gdGVybXMgZGVmaW5lZCIKK21zZ3N0ciAiY2jGsGEgxJHhu4tuaCBuZ2jEqWEgdGjhu51pIGvhu7MgbsOgbyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjdXJyZW50IHRlcm1zIGFyZSAlcyBmb3IgdGhlIG9sZCBzdGF0ZVxuIgorImFuZCAlcyBmb3IgdGhlIG5ldyBzdGF0ZS5cbiIKK21zZ3N0ciAiIgorIkLhuqFuIGhp4buHbiB04bqhaSDEkWFuZyDhu58gdGjhu51pIGvhu7MgJXMgY2hvIHTDrG5oIHRy4bqhbmcgY8WpXG4iCisidsOgICVzIGNobyB0w6xuaCB0cuG6oW5nIG3hu5tpLlxuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAnZ2l0IGJpc2VjdCB0ZXJtcycuXG4iCisiU3VwcG9ydGVkIG9wdGlvbnMgYXJlOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIGFuZCAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIgorbXNnc3RyICIiCisidGhhbSBz4buRIGtow7RuZyBo4bujcCBs4buHICVzIGNobyDigJxnaXQgYmlzZWN0IHRlcm1z4oCdLlxuIgorIkPDoWMgdMO5eSBjaOG7jW4gaOG7lyB0cuG7oyBsw6A6IC0tdGVybS1nb29kfC0tdGVybS1vbGQgdsOgIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIG9wdGlvbjogJyVzJyIKK21zZ3N0ciAidMO5eSBjaOG7jW4ga2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW46IOKAnCVz4oCdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgcmV2aXNpb24iCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBjw7MgduG6uyBuaMawIGzDoCBt4buZdCDEkWnhu4NtIHjDqXQgZHV54buHdCBo4bujcCBs4buHIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTE0Cittc2dpZCAiYmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIgorbXNnc3RyICJzYWkgSEVBRCAtIFTDtGkgY+G6p24gbeG7mXQgSEVBRCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjaGVja2luZyBvdXQgJyVzJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCBzdGFydCA8dmFsaWQtYnJhbmNoPicuIgorbXNnc3RyICJs4bqleSByYSDigJwlc+KAnSByYSBn4bq3cCBs4buXaS4gSMOjeSB0aOG7rSBcImdpdCBiaXNlY3QgcmVzZXQgPG5ow6FuaF9o4bujcF9s4buHPlwiLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MAorbXNnaWQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiCittc2dzdHIgInPhur0ga2jDtG5nIGRpIGNodXnhu4NuIG7hu61hIGLGsOG7m2MgdHLDqm4gY8OieSDEkcaw4bujYyBjZy1zZWVrIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTUzCittc2dpZCAiYmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAic2FpIEhFQUQgLSB0aGFtIGNoaeG6v3UgbeG7gW0ga+G7syBs4bqhIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmOiAnJXMnIgorbXNnc3RyICJyZWZzcGVjIGtow7RuZyBo4bujcCBs4buHOiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMworbXNnaWQgInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciCittc2dzdHIgInRo4buxYyBoaeG7h24g4oCcZ2l0IGJpc2VjdCBuZXh04oCdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM1Cittc2dpZCAid3JpdGUgdGhlIHRlcm1zIHRvIC5naXQvQklTRUNUX1RFUk1TIgorbXNnc3RyICJnaGkgdGjhu51pIGvhu7MgdsOgbyAuZ2l0L0JJU0VDVF9URVJNUyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNworbXNnaWQgImNsZWFudXAgdGhlIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAiZOG7jW4gZOG6uXAgdMOsbmggdHLhuqFuZyBkaSBjaHV54buDbiBu4butYSBixrDhu5tjIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM5Cittc2dpZCAiY2hlY2sgZm9yIGV4cGVjdGVkIHJldnMiCittc2dzdHIgImtp4buDbSB0cmEgY2hvIMSRaeG7g20geGVtIHjDqXQgY+G6p24gZMO5bmciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDEKK21zZ2lkICJyZXNldCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICLEkeG6t3QgbOG6oWkgdHLhuqFuZyBkaSBjaHV54buDbiBu4butYSBixrDhu5tjIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQzCittc2dpZCAid3JpdGUgb3V0IHRoZSBiaXNlY3Rpb24gc3RhdGUgaW4gQklTRUNUX0xPRyIKK21zZ3N0ciAiZ2hpIHJhIHTDrG5oIHRy4bqhbmcgZGkgY2h1eeG7g24gbuG7rWEgYsaw4bubYyB0cm9uZyBCSVNFQ1RfTE9HIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ1Cittc2dpZCAiY2hlY2sgYW5kIHNldCB0ZXJtcyBpbiBhIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAia2nhu4NtIHRyYSB2w6AgxJHhurd0IHRo4budaSDEkWnhu4NtIHRyb25nIGRpIGNodXnhu4NuIG7hu61hIGLGsOG7m2MiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDcKK21zZ2lkICJjaGVjayB3aGV0aGVyIGJhZCBvciBnb29kIHRlcm1zIGV4aXN0IgorbXNnc3RyICJraeG7g20gdHJhIHhlbSBjw6FjIHRo4budaSDEkWnhu4NtIHjhuqV1L3Thu5F0IGPDsyB04buTbiB04bqhaSBraMO0bmciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDkKK21zZ2lkICJwcmludCBvdXQgdGhlIGJpc2VjdCB0ZXJtcyIKK21zZ3N0ciAiaW4gcmEgY8OhYyB0aOG7nWkgxJFp4buDbSBkaSBjaHV54buDbiBu4butYSBixrDhu5tjIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjUxCittc2dpZCAic3RhcnQgdGhlIGJpc2VjdCBzZXNzaW9uIgorbXNnc3RyICJi4bqvdCDEkeG6p3UgcGhpw6puIGRpIGNodXnhu4NuIG7hu61hIGLGsOG7m2MiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTMKK21zZ2lkICJ1cGRhdGUgQklTRUNUX0hFQUQgaW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IgorbXNnc3RyICIiCisiY+G6rXAgbmjhuq10IEJJU0VDVF9IRUFEIHRoYXkgdsOsIGzhuqV5IHJhIChjaGVja2luZyBvdXQpIGzhuqduIGNodXnhu4NuIGdpYW8gaGnhu4duIGjDoG5oIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjU1Cittc2dpZCAibm8gbG9nIGZvciBCSVNFQ1RfV1JJVEUiCittc2dzdHIgImtow7RuZyBjw7Mgbmjhuq10IGvDvSBjaG8gQklTRUNUX1dSSVRFIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjczCittc2dpZCAiLS13cml0ZS10ZXJtcyByZXF1aXJlcyB0d28gYXJndW1lbnRzIgorbXNnc3RyICItLXdyaXRlLXRlcm1zIGPhuqduIGhhaSB0aGFtIHPhu5EiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzcKK21zZ2lkICItLWJpc2VjdC1jbGVhbi1zdGF0ZSByZXF1aXJlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIGtow7RuZyBuaOG6rW4gxJHhu5FpIHPhu5EiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODQKK21zZ2lkICItLWJpc2VjdC1yZXNldCByZXF1aXJlcyBlaXRoZXIgbm8gYXJndW1lbnQgb3IgYSBjb21taXQiCittc2dzdHIgIiIKKyItLWJpc2VjdC1yZXNldCByZXF1aXJlcyBraMO0bmcgbmjhuq1uIMSR4buRaSBz4buRIGPFqW5nIGtow7RuZyBuaOG6rW4gbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4OAorbXNnaWQgIi0tYmlzZWN0LXdyaXRlIHJlcXVpcmVzIGVpdGhlciA0IG9yIDUgYXJndW1lbnRzIgorbXNnc3RyICItLWJpc2VjdC13cml0ZSBj4bqnbiA0IGhv4bq3YyA1IHRoYW0gc+G7kSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY5NAorbXNnaWQgIi0tY2hlY2stYW5kLXNldC10ZXJtcyByZXF1aXJlcyAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIGPhuqduIDMgdGhhbSBz4buRIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NzAwCittc2dpZCAiLS1iaXNlY3QtbmV4dC1jaGVjayByZXF1aXJlcyAyIG9yIDMgYXJndW1lbnRzIgorbXNnc3RyICItLWJpc2VjdC1uZXh0LWNoZWNrIGPhuqduIDIgaG/hurdjIDMgdGhhbSBz4buRIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NzA2Cittc2dpZCAiLS1iaXNlY3QtdGVybXMgcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50IgorbXNnc3RyICItLWJpc2VjdC10ZXJtcyBj4bqnbiAwIGhv4bq3YyAxIHRoYW0gc+G7kSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjMxCittc2dpZCAiZ2l0IGJsYW1lIFs8b3B0aW9ucz5dIFs8cmV2LW9wdHM+XSBbPHJldj5dIFstLV0gPGZpbGU+IgorbXNnc3RyICJnaXQgYmxhbWUgWzxjw6FjIHTDuXkgY2jhu41uPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8dOG6rXAtdGluPiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjM2Cittc2dpZCAiPHJldi1vcHRzPiBhcmUgZG9jdW1lbnRlZCBpbiBnaXQtcmV2LWxpc3QoMSkiCittc2dzdHIgIjxyZXYtb3B0cz4gxJHGsOG7o2MgbcO0IHThuqMgdHJvbmcgdMOgaSBsaeG7h3UgZ2l0LXJldi1saXN0KDEpIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGluZyBhIGNvbG9yOiAlcyIKK21zZ3N0ciAiY+G6p24gbeG7mXQgbcOgdTogJXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MTYKK21zZ2lkICJtdXN0IGVuZCB3aXRoIGEgY29sb3IiCittc2dzdHIgInBo4bqjaSBr4bq/dCB0aMO6YyBi4bqxbmcgbeG7mXQgbcOgdSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yICclcycgaW4gY29sb3IuYmxhbWUucmVwZWF0ZWRMaW5lcyIKK21zZ3N0ciAibcOgdSBraMO0bmcgaOG7o3AgbOG7hyDigJwlc+KAnSB0cm9uZyBjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVzIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzQ3Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgYmxhbWUuY29sb3JpbmciCittc2dzdHIgIm3DoHUga2jDtG5nIGjhu6NwIGzhu4cgY2hvIGJsYW1lLmNvbG9yaW5nIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIHJldmlzaW9uICVzIHRvIGlnbm9yZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IMSRaeG7g20geMOpdCBkdXnhu4d0ICVzIMSR4buDIG3DoCBi4buPIHF1YSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NAorbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgIkhp4buDbiB0aOG7iyBjw6FjIG3hu6VjIOKAnGJsYW1l4oCdIG5oxrAgbMOgIGNow7puZyB0YSB0aOG6pXkgY2jDum5nLCB0xINuZyBk4bqnbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NQorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyJIaeG7g24gdGjhu4sgU0hBLTEgdHLhuq9uZyBjaG8gbmjhu69uZyBs4bqnbiBjaHV54buDbiBnaWFvIGJpw6puIGdp4bubaSAoTeG6t2MgxJHhu4tuaDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NgorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiS2jDtG5nIGNvaSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gZ+G7kWMgbMOgIGdp4bubaSBo4bqhbiAoTeG6t2MgxJHhu4tuaDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0aOG7kW5nIGvDqiBjw7RuZyBz4bupYyBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiw4lwIGJ14buZYyBiw6FvIGPDoW8gdGnhur9uIHRyaeG7g24gY8O0bmcgdmnhu4djIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ5Cittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIkhp4buDbiB0aOG7iyBr4bq/dCB4deG6pXQgxJFp4buDbSBz4buRIGPDsyBjw6FjIG3hu6VjIHRpbiDigJxibGFtZeKAnSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MAorbXNnaWQgIlNob3cgb3JpZ2luYWwgZmlsZW5hbWUgKERlZmF1bHQ6IGF1dG8pIgorbXNnc3RyICJIaeG7g24gdGjhu4sgdMOqbiB04bqtcCB0aW4gZ+G7kWMgKE3hurdjIMSR4buLbmg6IGF1dG8pIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUxCittc2dpZCAiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJIaeG7g24gdGjhu4sgc+G7kSBkw7JuZyBn4buRYyAoTeG6t2MgxJHhu4tuaDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MgorbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIkhp4buDbiB0aOG7iyDhu58gxJHhu4tuaCBk4bqhbmcgxJHDoyB0aGnhur90IGvhur8gY2hvIHPhu7EgdGnDqnUgZMO5bmcgYuG6sW5nIG3DoXkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTMKK21zZ2lkICJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIkhp4buDbiB0aOG7iyDEkeG7i25oIGThuqFuZyDigJxwb3JjZWxhaW7igJ0gduG7m2kgdGjDtG5nIHRpbiBjaHV54buDbiBnaWFvIG3hu5dpIGTDsm5nIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU0Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiRMO5bmcgY8O5bmcgY2jhur8gxJHhu5kgeHXhuqV0IHJhIHbhu5tpIGdpdC1hbm5vdGF0ZSAoTeG6t2MgxJHhu4tuaDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NQorbXNnaWQgIlNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGThuqV1IHbhur90IHRo4budaSBnaWFuIGThuqFuZyB0aMO0IChN4bq3YyDEkeG7i25oOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU2Cittc2dpZCAiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJIaeG7g24gdGjhu4sgU0hBMSBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIGThuqFuZyBkw6BpIChN4bq3YyDEkeG7i25oOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU3Cittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiS2jDtG5nIGhp4buDbiB0aOG7iyB0w6puIHTDoWMgZ2nhuqMgdsOgIGThuqV1IHbhur90IHRo4budaSBnaWFuIChN4bq3YyDEkeG7i25oOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU4Cittc2dpZCAiU2hvdyBhdXRob3IgZW1haWwgaW5zdGVhZCBvZiBuYW1lIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJIaeG7g24gdGjhu4sgdGjGsCDEkWnhu4duIHThu60gY+G7p2EgdMOhYyBnaeG6oyB0aGF5IHbDrCB0w6puIChN4bq3YyDEkeG7i25oOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU5Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgIkLhu48gcXVhIGPDoWMga2jDoWMgYmnhu4d0IGRvIGtob+G6o25nIHRy4bqvbmcgZ8OieSByYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MCBidWlsdGluL2xvZy5jOjE3MDIKK21zZ2lkICJyZXYiCittc2dzdHIgInJldiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MAorbXNnaWQgIklnbm9yZSA8cmV2PiB3aGVuIGJsYW1pbmciCittc2dzdHIgIkLhu48gcXVhIDxyZXY+IGtoaSBibGFtZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MQorbXNnaWQgIklnbm9yZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4iCittc2dzdHIgIkLhu48gcXVhIGPDoWMgxJFp4buDbSB4w6l0IGR1eeG7h3QgdOG7qyA8dOG6rXAgdGluPiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MgorbXNnaWQgImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiCittc2dzdHIgInNpw6p1IGThu68gbGnhu4d1IGTGsCB0aOG7q2EgbcOgdSB04burIGTDsm5nIHRyxrDhu5tjIGtow6FjIGjhurNuIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYzCittc2dpZCAiY29sb3IgbGluZXMgYnkgYWdlIgorbXNnc3RyICJjw6FjIGTDsm5nIG3DoHUgdGhlbyB0deG7lWkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjQKK21zZ2lkICJTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCBiZXR0ZXIgbWF0Y2giCittc2dzdHIgIlRpw6p1IHRo4bulIHRow6ptIG7Eg25nIHTDoGkgbmd1ecOqbiBtw6F5IG3Ds2MgxJHhu4MgdMOsbSBraeG6v20gdOG7kXQgaMahbiBu4buvYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NQorbXNnaWQgIlVzZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4gaW5zdGVhZCBvZiBjYWxsaW5nIGdpdC1yZXYtbGlzdCIKK21zZ3N0ciAiIgorIlPhu60gZOG7pW5nIMSRaeG7g20geMOpdCBkdXnhu4d0IChyZXZpc2lvbikgdOG7qyA8dOG6rXAgdGluPiB0aGF5IHbDrCBn4buNaSDigJxnaXQtcmV2LWxpc3TigJ0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjYKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICJT4butIGThu6VuZyBu4buZaSBkdW5nIGPhu6dhIDx04bqtcCB0aW4+IG5oxrAgbMOgIOG6o25oIGN14buRaSBjw7luZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NyBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAic2NvcmUiCittc2dzdHIgIsSRaeG7g20gc+G7kSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NworbXNnaWQgIkZpbmQgbGluZSBjb3BpZXMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIlTDrG0gY8OhYyBi4bqjbiBzYW8gY2jDqXAgZMOybmcgdHJvbmcgdsOgIG5nYW5nIHF1YSB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjgKK21zZ2lkICJGaW5kIGxpbmUgbW92ZW1lbnRzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJUw6xtIGPDoWMgZGkgY2h1eeG7g24gZMOybmcgdHJvbmcgdsOgIG5nYW5nIHF1YSB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjkKK21zZ2lkICJuLG0iCittc2dzdHIgIm4sbSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICJY4butIGzDvSBjaOG7iSBkw7JuZyB2w7luZyBuLG0sIHTDrW5oIHThu6sgMSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjkyMQorbXNnaWQgIi0tcHJvZ3Jlc3MgY2FuJ3QgYmUgdXNlZCB3aXRoIC0taW5jcmVtZW50YWwgb3IgcG9yY2VsYWluIGZvcm1hdHMiCittc2dzdHIgIiIKKyItLXByb2dyZXNzIGtow7RuZyDEkcaw4bujYyBkw7luZyBjw7luZyB24bubaSAtLWluY3JlbWVudGFsIGhheSBjw6FjIMSR4buLbmggZOG6oW5nIHBvcmNlbGFpbiIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUKKyMuIG1heGltdW0gZGlzcGxheSB3aWR0aCBmb3IgYSByZWxhdGl2ZSB0aW1lc3RhbXAgaW4KKyMuICJnaXQgYmxhbWUiIG91dHB1dC4gIEZvciBDIGxvY2FsZSwgIjQgeWVhcnMsIDExCisjLiBtb250aHMgYWdvIiwgd2hpY2ggdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdAorIy4gYW1vbmcgdmFyaW91cyBmb3JtcyBvZiByZWxhdGl2ZSB0aW1lc3RhbXBzLCBidXQKKyMuIHlvdXIgbGFuZ3VhZ2UgbWF5IG5lZWQgbW9yZSBvciBmZXdlciBkaXNwbGF5CisjLiBjb2x1bW5zLgorIy4KKyM6IGJ1aWx0aW4vYmxhbWUuYzo5NzIKK21zZ2lkICI0IHllYXJzLCAxMSBtb250aHMgYWdvIgorbXNnc3RyICI0IG7Eg20sIDExIHRow6FuZyB0csaw4bubYyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjEwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZSIKK21zZ2lkX3BsdXJhbCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZXMiCittc2dzdHJbMF0gInThuq1wIHRpbiAlcyBjaOG7iSBjw7MgJWx1IGTDsm5nIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTEyNQorbXNnaWQgIkJsYW1pbmcgbGluZXMiCittc2dzdHIgIkPDoWMgZMOybmcgYmxhbWUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjkKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxjw6FjIHTDuXkgY2jhu41uPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFstbF0gWy1mXSA8dMOqbi1uaMOhbmg+IFs8xJFp4buDbS3EkeG6p3U+XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaC1uYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbLXJdICgtZCB8IC1EKSA8dMOqbi1uaMOhbmg+IOKApiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMgorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPGPDoWMgdMO5eSBjaOG7jW4+XSAoLW0gfCAtTSkgWzxuaMOhbmgtY8WpPl0gPG5ow6FuaC1t4bubaT4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzMKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtYyB8IC1DKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzxjw6FjIHTDuXkgY2jhu41uPl0gKC1jIHwgLUMpIFs8bmjDoW5oLWPFqT5dIDxuaMOhbmgtbeG7m2k+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM0Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozNQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxjw6FjIHTDuXkgY2jhu41uPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorIsSRYW5nIHjDs2EgbmjDoW5oIOKAnCVz4oCdIG3DoCBuw7MgbOG6oWkgxJHDoyDEkcaw4bujYyBow7JhIHRy4buZbiB2w6BvXG4iCisiICAgICAgICAg4oCcJXPigJ0sIG5oxrBuZyB24bqrbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbiB2w6BvIEhFQUQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyJraMO0bmcgeMOzYSBuaMOhbmgg4oCcJXPigJ0gY8OhaSBtw6AgY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4gdsOgb1xuIgorIiAgICAgICAgIOKAnCVz4oCdLCBjaG8gZMO5IGzDoCBuw7MgxJHDoyDEkcaw4bujYyBow7JhIHRy4buZbiB2w6BvIEhFQUQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyB0w6xtIGtp4bq/bSDEkeG7kWkgdMaw4bujbmcgY2h1eeG7g24gZ2lhbyBjaG8g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorIk5ow6FuaCDigJwlc+KAnSBraMO0bmcgxJHGsOG7o2MgdHLhu5luIG3hu5l0IGPDoWNoIMSR4bqneSDEkeG7py5cbiIKKyJO4bq/dSBi4bqhbiB0aOG7sWMgc+G7sSBtdeG7kW4geMOzYSBuw7MsIHRow6wgY2jhuqF5IGzhu4duaCDigJxnaXQgYnJhbmNoIC1EICVz4oCdLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODkKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJD4bqtcCBuaOG6rXQgdOG6rXAgdGluIGPhuqV1IGjDrG5oIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyMAorbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGTDuW5nIHTDuXkgY2jhu41uIC1hIHbhu5tpIC1kIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNgorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHTDrG0ga2nhur9tIMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIGNobyBIRUFEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnIGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyB4w7NhIG5ow6FuaCDigJwlc+KAnSDEkcOjIMSRxrDhu6NjIGzhuqV5IHJhIHThuqFpIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAia2jDtG5nIHTDrG0gdGjhuqV5IG5ow6FuaCB0aGVvIGTDtWkgbcOheSBjaOG7pyDigJwlc+KAnS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgImtow7RuZyB0w6xtIHRo4bqleSBuaMOhbmgg4oCcJXPigJ0uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkWFuZyB4w7NhIG5ow6FuaCB0aGVvIGTDtWkgbcOheSBjaOG7pyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB4w7NhIGLhu48gbmjDoW5oIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZS10cmFja2luZyBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIsSQw6MgeMOzYSBuaMOhbmggdGhlbyBkw7VpIG3DoXkgY2jhu6cgXCIlc1wiICh04burbmcgbMOgICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIk5ow6FuaCDigJwlc+KAnSDEkcOjIGLhu4sgeMOzYSAodOG7q25nIGzDoCAlcylcbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjkgYnVpbHRpbi90YWcuYzo2MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY2h14buXaSDEkeG7i25oIGThuqFuZyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjAKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpIEhFQUQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgKCVzKSBwb2ludHMgb3V0c2lkZSBvZiByZWZzL2hlYWRzLyIKK21zZ3N0ciAiSEVBRCAoJXMpIGNo4buJIGLDqm4gbmdvw6BpIGPhu6dhIHJlZnMvaGVhZHMvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgcmViYXNlZCBhdCAlcyIKK21zZ3N0ciAiTmjDoW5oICVzIMSRYW5nIMSRxrDhu6NjIGPhuqNpIHThu5UgbOG6oWkgdOG6oWkgJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyBiaXNlY3RlZCBhdCAlcyIKK21zZ3N0ciAiTmjDoW5oICVzIMSRYW5nIMSRxrDhu6NjIGRpIGNodXnhu4NuIHBow6JuIMSRw7RpIChiaXNlY3QpIHThuqFpICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUwMgorbXNnaWQgImNhbm5vdCBjb3B5IHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHNhbyBjaMOpcCBuaMOhbmggaGnhu4duIGjDoG5oIHRyb25nIGtoaSBuw7MgY2jhurNuZyDhu58gxJHDonUgY+G6oy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTA0Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7lWkgdMOqbiBuaMOhbmggaGnhu4duIGjDoG5oIHRyb25nIGtoaSBuw7MgY2jhurNuZyDhu58gxJHDonUgY+G6oy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYnJhbmNoIG5hbWU6ICclcyciCittc2dzdHIgIlTDqm4gbmjDoW5oIGtow7RuZyBo4bujcCBs4buHOiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDIKK21zZ2lkICJCcmFuY2ggcmVuYW1lIGZhaWxlZCIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buVaSB0w6puIG5ow6FuaCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDQKK21zZ2lkICJCcmFuY2ggY29weSBmYWlsZWQiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBzYW8gY2jDqXAgbmjDoW5oIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGEgY29weSBvZiBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIgorbXNnc3RyICLEkMOjIHThuqFvIG3hu5l0IGLhuqNuIHNhbyBj4bunYSBuaMOhbmgga2h1eeG6v3QgZGFuaCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgIsSQw6MgxJHhu5VpIHTDqm4gbmjDoW5oIGtodXnhur90IGRhbmgg4oCcJXPigJ0gxJFpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICJOaMOhbmggYuG7iyDEkeG7lWkgdMOqbiB0aMOgbmggJXMsIG5oxrBuZyBIRUFEIGzhuqFpIGtow7RuZyDEkcaw4bujYyBj4bqtcCBuaOG6rXQhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2NgorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiTmjDoW5oIGLhu4sgxJHhu5VpIHTDqm4sIG5oxrBuZyBj4bqtcCBuaOG6rXQgdOG6rXAgdGluIGPhuqV1IGjDrG5oIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2OAorbXNnaWQgIkJyYW5jaCBpcyBjb3BpZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJOaMOhbmggxJHDoyDEkcaw4bujYyBzYW8gY2jDqXAsIG5oxrBuZyBj4bqtcCBuaOG6rXQgdOG6rXAgdGluIGPhuqV1IGjDrG5oIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoXG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIHN0cmlwcGVkLlxuIgorbXNnc3RyICIiCisiVmnhur90IGPDoWMgZ2hpIGNow7ogY2hvIG5ow6FuaDpcbiIKKyIgICVzXG4iCisiTmjhu69uZyBkw7JuZyDEkcaw4bujYyBi4bqvdCDEkeG6p3UgYuG6sW5nIOKAnCVj4oCdIHPhur0gxJHGsOG7o2MgY+G6r3QgYuG7jy5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTgKK21zZ2lkICJHZW5lcmljIG9wdGlvbnMiCittc2dzdHIgIlTDuXkgY2jhu41uIGNodW5nIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMAorbXNnaWQgInNob3cgaGFzaCBhbmQgc3ViamVjdCwgZ2l2ZSB0d2ljZSBmb3IgdXBzdHJlYW0gYnJhbmNoIgorbXNnc3RyICJoaeG7g24gdGjhu4sgbcOjIGLEg20gdsOgIGNo4bunIMSR4buBLCDEkcawYSByYSBoYWkgbOG6p24gY2hvIG5ow6FuaCB0aMaw4bujbmcgbmd14buTbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjEKK21zZ2lkICJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIgorbXNnc3RyICJraMO0bmcgeHXhuqV0IGPDoWMgdGjDtG5nIHRpbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjIKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIKK21zZ3N0ciAiY8OgaSDEkeG6t3QgY2jhur8gxJHhu5kgdGhlbyBkw7VpICh4ZW0gZ2l0LXB1bGwoMSkpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNAorbXNnaWQgImRvIG5vdCB1c2UiCittc2dzdHIgImtow7RuZyBkw7luZyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYgYnVpbHRpbi9yZWJhc2UuYzo1MTMKK21zZ2lkICJ1cHN0cmVhbSIKK21zZ3N0ciAidGjGsOG7o25nIG5ndeG7k24iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI2Cittc2dpZCAiY2hhbmdlIHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICJ0aGF5IMSR4buVaSB0aMO0bmcgdGluIHRoxrDhu6NuZyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNworbXNnaWQgInVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICJi4buPIMSR4bq3dCB0aMO0bmcgdGluIHRoxrDhu6NuZyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOAorbXNnaWQgInVzZSBjb2xvcmVkIG91dHB1dCIKK21zZ3N0ciAidMO0IG3DoHUga+G6v3QgeHXhuqV0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOQorbXNnaWQgImFjdCBvbiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgInRoYW8gdMOhYyB0csOqbiBuaMOhbmgg4oCccmVtb3RlLXRyYWNraW5n4oCdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMSBidWlsdGluL2JyYW5jaC5jOjYzMworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIG5ow6FuaCBtw6AgbsOzIGNo4bupYSBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMiBidWlsdGluL2JyYW5jaC5jOjYzNAorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIG5ow6FuaCBtw6AgbsOzIGtow7RuZyBjaOG7qWEgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzcKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICJIw6BuaCDEkeG7mW5nIGdpdC1icmFuY2g6IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzOAorbXNnaWQgImxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICJsaeG7h3Qga8OqIGPhuqMgbmjDoW5oIOKAnHJlbW90ZS10cmFja2luZ+KAnSB2w6AgbuG7mWkgYuG7mSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDAKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAieMOzYSBt4buZdCB0b8OgbiBi4buZIG5ow6FuaCDEkcOjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MQorbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgInjDs2EgbmjDoW5oIChjaG8gZMO5IGzDoCBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbikiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQyCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgImRpIGNodXnhu4NuIGhheSDEkeG7lWkgdMOqbiBt4buZdCBuaMOhbmggdsOgIHJlZmxvZyBj4bunYSBuw7MiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiZGkgY2h1eeG7g24gaG/hurdjIMSR4buVaSB0w6puIG3hu5l0IG5ow6FuaCBuZ2F5IGPhuqMga2hpIMSRw61jaCDEkcOjIGPDsyBz4bq1biIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDQKK21zZ2lkICJjb3B5IGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJzYW8gY2jDqXAgbeG7mXQgbmjDoW5oIHbDoCByZWZsb2cgY+G7p2EgbsOzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NQorbXNnaWQgImNvcHkgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAic2FvIGNow6lwIG3hu5l0IG5ow6FuaCBuZ2F5IGPhuqMga2hpIMSRw61jaCDEkcOjIGPDsyBz4bq1biIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDYKK21zZ2lkICJsaXN0IGJyYW5jaCBuYW1lcyIKK21zZ3N0ciAibGnhu4d0IGvDqiBjw6FjIHTDqm4gbmjDoW5oIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NworbXNnaWQgInNob3cgY3VycmVudCBicmFuY2ggbmFtZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIG5ow6FuaCBoaeG7h24gaMOgbmgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ4Cittc2dpZCAiY3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2ciCittc2dzdHIgInThuqFvIHJlZmxvZyBj4bunYSBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUwCittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgInPhu61hIG3DtCB04bqjIGNobyBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUxCittc2dpZCAiZm9yY2UgY3JlYXRpb24sIG1vdmUvcmVuYW1lLCBkZWxldGlvbiIKK21zZ3N0ciAiYnXhu5ljIHThuqFvLCBkaSBjaHV54buDbi/EkeG7lWkgdMOqbiwgeMOzYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTIKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIG5o4buvbmcgbmjDoW5oIG3DoCBuw7MgxJHGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyBuaMOhbmggbcOgIG7DsyBraMO0bmcgxJHGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU0Cittc2dpZCAibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJsaeG7h3Qga8OqIGPDoWMgbmjDoW5oIHRyb25nIGPDoWMgY+G7mXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU3IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIgYnVpbHRpbi9ub3Rlcy5jOjQxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQxOCBidWlsdGluL25vdGVzLmM6NTgxIGJ1aWx0aW4vbm90ZXMuYzo1ODQKKyM6IGJ1aWx0aW4vdGFnLmM6NDMzCittc2dpZCAib2JqZWN0IgogbXNnc3RyICLEkeG7kWkgdMaw4bujbmciCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODA1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCi1tc2dzdHIgIktow7RuZyB0aOG7gyB04bqhbyBsacOqbiBr4bq/dCBj4bupbmcgxJHhu5FpIHTGsOG7o25nOiAlcyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU4Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgY8OhYyBuaMOhbmggY+G7p2EgxJHhu5FpIHTGsOG7o25nIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg2MAotbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIiIKLSJLaMO0bmcgdGjhu4MgbOG6pXkgY8OhYyBuaMOhbmggdsOgIMSR4buRaSB0xrDhu6NuZy4gWGVtIGvhur90IHh14bqldCB04burIGLhuqNuZyDEkWnhu4F1IGtoaeG7g24gxJHhu4MgY8OzICIKLSJ0aMOqbSB0aMO0bmcgdGluLiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYwIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDggYnVpbHRpbi90YWcuYzo0NDAKK21zZ2lkICJzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgYXJlIGNhc2UgaW5zZW5zaXRpdmUiCittc2dzdHIgInPhuq9wIHjhur9wIHbDoCBs4buNYyBsw6AgcGjDom4gYmnhu4d0IEhPQSB0aMaw4budbmciCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODcxCi1tc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgotbXNnc3RyICIiCi0iS2jDtG5nIHRo4buDIGzhuqV5IHbhu4EgY8OhYyB0aOG6uy4gSMOjeSB4ZW0ga+G6v3QgeHXhuqV0IHThu6sgYuG6o25nIMSRaeG7gXUga2hp4buDbiDEkeG7gyBjw7MgdGjDqm0gIgotInRow7RuZyB0aW4gY2hpIHRp4bq/dC4iCisjOiBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4IGJ1aWx0aW4vdGFnLmM6NDM4CisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozOAorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgIsSR4buLbmggZOG6oW5nIHPhur0gZMO5bmcgY2hvIMSR4bqndSByYSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTUKLW1zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIEhFQUQuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgotbXNnc3RyICIiCi0iS2jDtG5nIHRo4buDIGTDsiB0w6xtIEhFQUQuIEjDo3kgeGVtIGvhur90IHh14bqldCB04burIGLhuqNuZyDEkWnhu4F1IGtoaeG7g24gxJHhu4MgY8OzIHRow6ptIHRow7RuZyAiCi0idGluIGNoaSB0aeG6v3QuIgorIzogYnVpbHRpbi9icmFuY2guYzo2ODQgYnVpbHRpbi9jbG9uZS5jOjc4NQorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgSEVBRCDhu58gZMaw4bubaSByZWZzL2hlYWRzISIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY2xlYW51cCAlcyIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIGThu41uIHPhuqFjaCAlcyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzA4Cittc2dpZCAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICJ0w7l5IGNo4buNbiAtLWNvbHVtbiB2w6AgLS12ZXJib3NlIHh1bmcga2jhuq9jIG5oYXUiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTEwCi1tc2dpZCAiQ2xvbmUgZmFpbGVkLiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIG5ow6JuIGLhuqNuLiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzIzIGJ1aWx0aW4vYnJhbmNoLmM6Nzc3IGJ1aWx0aW4vYnJhbmNoLmM6Nzg2Cittc2dpZCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgImPhuqduIGNo4buJIHJhIHTDqm4gbmjDoW5oIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNwotbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKLW1zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IG5ow6FuaCBt4bq3YyDEkeG7i25oLiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzUzCittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSRxrBhIHJhIG3DtCB04bqjIEhFQUQgxJHDoyB0w6FjaCBy4budaSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCi1tc2dzdHIgIktow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kgJXMgbmjGsCBsw6AgbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhby4iCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OAorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICJraMO0bmcgdGjhu4Mgc+G7rWEgbcO0IHThuqMgY2hvIG5oaeG7gXUgaMahbiBt4buZdCBuaMOhbmgiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTQwCi1tc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCi1tc2dzdHIgIsSQYW5nIHThuqFvIHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MiCisjOiBidWlsdGluL2JyYW5jaC5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIKK21zZ3N0ciAiVuG6q24gY2jGsGEgY2h1eeG7g24gZ2lhbyB0csOqbiBuaMOhbmgg4oCcJXPigJ0uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk0MSBsaWIvaW5kZXgudGNsOjcwIGxpYi9pbmRleC50Y2w6MTM2Ci0jOiBsaWIvaW5kZXgudGNsOjIwNwotbXNnaWQgImZpbGVzIgotbXNnc3RyICJ04bqtcCB0aW4iCisjOiBidWlsdGluL2JyYW5jaC5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBicmFuY2ggbmFtZWQgJyVzJy4iCittc2dzdHIgIktow7RuZyBjw7MgbmjDoW5oIG7DoG8gY8OzIHTDqm4g4oCcJXPigJ0uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk3MAotbXNnaWQgIkluaXRpYWwgZmlsZSBjaGVja291dCBmYWlsZWQuIgotbXNnc3RyICJM4bqleSByYSB04bqtcCB0aW4ga2jhu59pIHThuqFvIGfhurdwIGzhu5dpLiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzgzCittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgZm9yIGEgY29weSBvcGVyYXRpb24iCittc2dzdHIgInF1w6Egbmhp4buBdSBuaMOhbmggZMOgbmggY2hvIHRoYW8gdMOhYyBzYW8gY2jDqXAiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNAotbXNnaWQgIk9wZW4iCi1tc2dzdHIgIk3hu58iCisjOiBidWlsdGluL2JyYW5jaC5jOjc5MgorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgYSByZW5hbWUgb3BlcmF0aW9uIgorbXNnc3RyICJxdcOhIG5oaeG7gXUgdGhhbSBz4buRIGNobyB0aGFvIHTDoWMgxJHhu5VpIHTDqm4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyNAotbXNnaWQgIlJlcG9zaXRvcnk6IgotbXNnc3RyICJLaG86IgorIzogYnVpbHRpbi9icmFuY2guYzo3OTcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAicXXDoSBuaGnhu4F1IHRoYW0gc+G7kSDEkeG7gyDEkeG6t3QgdGjGsOG7o25nIG5ndeG7k24gbeG7m2kiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgbeG7nyBraG8gJXM6IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTIKLW1zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgotbXNnc3RyICLEkMOieSBsw6Agdmnhu4djIGzhuqV5IHJhIGLhu4sgdMOhY2ggcuG7nWkiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo2MAotbXNnaWQgIlJldmlzaW9uIEV4cHJlc3Npb246IgotbXNnc3RyICJCaeG7g3UgdGjhu6ljIMSRaeG7g20geMOpdDoiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3MgotbXNnaWQgIkxvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiTmjDoW5oIG7hu5lpIGLhu5kiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NwotbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKLW1zZ3N0ciAiTmjDoW5oIFRoZW8gZMO1aSIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjgyIGxpYi9jaG9vc2VfcmV2LnRjbDo1NDQKLW1zZ2lkICJUYWciCi1tc2dzdHIgIlRo4bq7IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzIxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCByZXZpc2lvbjogJXMiCi1tc2dzdHIgIsSQaeG7g20geMOpdCBkdXnhu4d0IGtow7RuZyBo4bujcCBs4buHOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjM0MgotbXNnaWQgIk5vIHJldmlzaW9uIHNlbGVjdGVkLiIKLW1zZ3N0ciAiQ2jGsGEgY2jhu41uIMSRaeG7g20geMOpdCBkdXnhu4d0LiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjM1MAotbXNnaWQgIlJldmlzaW9uIGV4cHJlc3Npb24gaXMgZW1wdHkuIgotbXNnc3RyICJCaeG7g3UgdGjhu6ljIGNow61uaCBxdXkgcuG7l25nLiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjUzNwotbXNnaWQgIlVwZGF0ZWQiCi1tc2dzdHIgIsSQw6MgY+G6rXAgbmjhuq10IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTY1Ci1tc2dpZCAiVVJMIgotbXNnc3RyICJVUkwiCi0KLSM6IGxpYi9jb21taXQudGNsOjkKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODAxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJUaGVyZSBpcyBub3RoaW5nIHRvIGFtZW5kLlxuIgotIlxuIgotIllvdSBhcmUgYWJvdXQgdG8gY3JlYXRlIHRoZSBpbml0aWFsIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGNvbW1pdCBiZWZvcmUgdGhpcyAiCi0idG8gYW1lbmQuXG4iCisiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCiBtc2dzdHIgIiIKLSLhu54gxJHDonkgY2jhurNuZyBjw7MgZ8OsIMSR4buDIHR1IGLhu5UgY+G6oy5cbiIKLSJcbiIKLSJC4bqhbiDEkWFuZyB04bqhbyBs4bqnbiBjaHV54buDbiBnaWFvIGto4bufaSB04bqhby4g4bueIMSRw6J5IGtow7RuZyBjw7MgbOG6p24gY2h1eeG7g24gZ2lhbyB0csaw4bubYyAiCi0ibsOgbyDEkeG7gyBtw6AgdHUgYuG7lS5cbiIKKyJraMO0bmcgdGjhu4MgxJHhurd0IHRoxrDhu6NuZyBuZ3Xhu5NuIGPhu6dhIEhFQUQgdGjDoG5oICVzIGtoaSBtw6AgbsOzIGNo4bqzbmcgY2jhu4kgxJHhur9uIG5ow6FuaCAiCisibsOgbyBj4bqjLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTgKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODA0IGJ1aWx0aW4vYnJhbmNoLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoICclcyciCittc2dzdHIgImtow7RuZyBjw7MgbmjDoW5oIG7DoG8gbmjGsCB0aOG6vyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImNoxrBhIGPDsyBuaMOhbmgg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHVuc2V0IHVwc3RyZWFtIgorbXNnc3RyICJxdcOhIG5oaeG7gXUgdGhhbSBz4buRIMSR4buDIGLhu48gxJHhurd0IHRoxrDhu6NuZyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNQorbXNnaWQgImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgImtow7RuZyB0aOG7gyBi4buPIMSR4bq3dCB0aMaw4bujbmcgbmd14buTbiBj4bunYSBIRUFEIGtow7RuZyBjaOG7iSDEkeG6v24gbeG7mXQgbmjDoW5oIG7DoG8gY+G6oy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTmjDoW5oIOKAnCVz4oCdIGtow7RuZyBjw7MgdGjDtG5nIHRpbiB0aMaw4bujbmcgbmd14buTbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDEKIG1zZ2lkICIiCi0iQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCi0iXG4iCi0iWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKLSJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgotImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCisiVGhlIC1hLCBhbmQgLXIsIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCB0YWtlIGEgYnJhbmNoIG5hbWUuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHVzZTogLWF8LXIgLS1saXN0IDxwYXR0ZXJuPj8iCiBtc2dzdHIgIiIKLSJLaMO0bmcgdGjhu4MgdHUgYuG7lSB0cm9uZyBraGkgaMOyYSB0cuG7mW4uXG4iCi0iXG4iCi0iQuG6oW4gaGnhu4duIMSRYW5nIOG7nyBnaeG7r2EgcXXDoSB0csOsbmggaMOyYSB0csO0biwgbcOgIG7DsyBjaMawYSBob8OgbiB04bqldC4gQuG6oW4ga2jDtG5nIHRo4buDICIKLSJ0dSBi4buVICBs4bqnbiBjaHV54buDbiBnaWFvIHRp4buBbiBuaGnhu4dtIHRy4burIHBoaSBi4bqhbiBiw6NpIGLhu48gbOG6p24gaMOyYSB0cuG7mW4gaGnhu4duIMSRYW5nICIKLSJrw61jaCBob+G6oXQuXG4iCisiSGFpIHTDuXkgY2jhu41uIC1hIHbDoCAtciDDoXAgZOG7pW5nIGNobyBs4buHbmgg4oCcZ2l0IGJyYW5jaOKAnSBraMO0bmcgbmjhuq1uIG3hu5l0IHTDqm4gIgorIm5ow6FuaC5cbiIKKyJDw7MgcGjhuqNpIMO9IGLhuqFuIGzDoCBkw7luZzogLWF8LXIgLS1saXN0IDxt4bqrdT4/IgogCi0jOiBsaWIvY29tbWl0LnRjbDo0OAotbXNnaWQgIkVycm9yIGxvYWRpbmcgY29tbWl0IGRhdGEgZm9yIGFtZW5kOiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHThuqNpIGThu68gbGnhu4d1IGNodXnhu4NuIGdpYW8gY2hvIGzhu4duaCB0dSBi4buVOiIKLQotIzogbGliL2NvbW1pdC50Y2w6NzUKLW1zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgotbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgxJHGsOG7o2MgxJHhu4tuaCBkYW5oIGPhu6dhIGLhuqFuOiIKLQotIzogbGliL2NvbW1pdC50Y2w6ODAKLW1zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgotbXNnc3RyICJHSVRfQ09NTUlUVEVSX0lERU5UIGtow7RuZyBo4bujcCBs4buHOiIKLQotIzogbGliL2NvbW1pdC50Y2w6MTI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCi1tc2dzdHIgImPhuqNuaCBiw6FvOiBUY2wga2jDtG5nIGjhu5cgdHLhu6MgYuG6o25nIG3DoyAnJXMnLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MTQ5CisjOiBidWlsdGluL2JyYW5jaC5jOjg0NQogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisidGhlICctLXNldC11cHN0cmVhbScgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgJy0tdHJhY2snIG9yICIKKyInLS1zZXQtdXBzdHJlYW0tdG8nIGluc3RlYWQuIgogbXNnc3RyICIiCi0iVHLhuqFuZyB0aMOhaSBxdcOpdCBraMO0bmcga2jhu5twIHbhu5tpIHRy4bqhbmcgdGjDoWkga2hvLlxuIgotIlxuIgotIkPDsyBHaXQga2jDoWMgxJHDoyBz4butYSBraG8gbsOgeSBr4buDIHThu6sgbOG6p24gcXXDqXQgY3Xhu5FpLiBD4bqnbiBxdcOpdCBs4bqhaSB0csaw4bubYyBraGkgdGjhu7FjICIKLSJoaeG7h24gdmnhu4djIGNodXnhu4NuIGdpYW8ga2jDoWMuXG4iCi0iXG4iCi0iU+G6vSB0aOG7sWMgaGnhu4duIHZp4buHYyBxdcOpdCBs4bqhaSBuZ2F5IGLDonkgZ2nhu51pLlxuIgorInTDuXkgY2jhu41uIC0tc2V0LXVwc3RyZWFtIMSRw6Mga2jDtG5nIGPDsm4gxJHGsOG7o2MgaOG7lyB0cuG7oyBu4buvYS4gVnVpIGzDsm5nIGTDuW5nIOKAnC0tIgorInRyYWNr4oCdIGhv4bq3YyDigJwtLXNldC11cHN0cmVhbS10b+KAnSDEkeG7gyB0aGF5IHRo4bq/LiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTczCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2J1bmRsZS5jOjE1IGJ1aWx0aW4vYnVuZGxlLmM6MjMKK21zZ2lkICJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxjw6FjIHTDuXkgY2jhu41uPl0gPHThuq1wX3Rpbj4gPGdpdC1yZXYtbGlzdCBhcmdzPiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNiBidWlsdGluL2J1bmRsZS5jOjI4Cittc2dpZCAiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzxvcHRpb25zPl0gPGZpbGU+IgorbXNnc3RyICJnaXQgYnVuZGxlIHZlcmlmeSBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8dOG6rXAtdGluPiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNyBidWlsdGluL2J1bmRsZS5jOjMzCittc2dpZCAiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDx04bqtcCB0aW4+IFs8dMOqbiB0aGFtIGNoaeG6v3U+Li4uXSIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOCBidWlsdGluL2J1bmRsZS5jOjM4Cittc2dpZCAiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iCittc2dzdHIgImdpdCBidW5kbGUgdW5idW5kbGUgPHThuq1wIHRpbj4gWzx0w6puIHRoYW0gY2hp4bq/dT4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM3NQorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJraMO0bmcgaGnhu4NuIHRo4buLIGLhu5kgxJFvIHRp4bq/biB0csOsbmgiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzc3Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGLhu5kgxJFvIHRp4bq/biB0csOsbmgiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzc5Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb2JqZWN0IHdyaXRpbmcgcGhhc2UiCittc2dzdHIgImhp4buDbiB0aOG7iyBi4buZIMSRbyB0aeG6v24gdHJp4buDbiB0cm9uZyBzdeG7kXQgcGhhIGdoaSDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzgyCittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICJ0xrDGoW5nIHThu7EgLS1hbGwtcHJvZ3Jlc3Mga2hpIGLhu5kgxJFvIHRp4bq/biB0csOsbmggxJHGsOG7o2MgeHXhuqV0IGhp4buHbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo5MworbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIkPhuqduIG3hu5l0IGtobyBjaOG7qWEgxJHhu4MgY8OzIHRo4buDIHThuqFvIG3hu5l0IGJ1bmRsZS4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTA0Cittc2dpZCAiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiCittc2dzdHIgImtow7RuZyBoaeG7g24gdGjhu4sgY2hpIHRp4bq/dCBidW5kbGUgKGLDsykiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAi4oCcJXPigJ0gdOG7kXRcbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNjAKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iCittc2dzdHIgIkPhuqduIG3hu5l0IGtobyBjaOG7qWEgxJHhu4MgY8OzIHRo4buDIGdp4bqjaSBuw6luIG3hu5l0IGJ1bmRsZS4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTY4NgorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgImNoaSB0aeG6v3Q7IHBo4bqjaSDEkcaw4bujYyDEkeG6t3QgdHLGsOG7m2MgbeG7mXQgbOG7h25oLWNvbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzoxNzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIktow7RuZyBoaeG7g3UgY8OidSBs4buHbmggY29uOiAlcyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NQogbXNnaWQgIiIKLSJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgotIlxuIgotIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4gIFlvdSBtdXN0IHJlc29sdmUgdGhlbSBhbmQgc3RhZ2UgdGhlIGZpbGUgIgotImJlZm9yZSBjb21taXR0aW5nLlxuIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHBhdGg+XSA8b2JqZWN0PiIKIG1zZ3N0ciAiIgotIkPDoWMgdOG6rXAgdGluIGNoxrBhIGjDsmEgdHLhu5luIGtow7RuZyB0aOG7gyDEkcaw4bujYyBjaHV54buDbiBnaWFvLlxuIgotIlxuIgotIlThuq1wIHRpbiAlcyBjw7MgeHVuZyDEkeG7mXQgaMOyYSB0cuG7mW4uIELhuqFuIHBo4bqjaSBnaeG6o2kgcXV54bq/dCBjaMO6bmcgdsOgIMSRxrBhIGzDqm4gYuG7hyAiCi0icGjDs25nIHRyxrDhu5tjIGtoaSBjaHV54buDbiBnaWFvLlxuIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDxraeG7g3U+IHwgLS10ZXh0Y29udikgfCAtLWZpbHRlcnMpIFstLXBhdGg9PMSRxrDhu51uZy9k4bqrbj5dIDzEkeG7kWlfdMaw4bujbmc+IgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODEKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTYKIG1zZ2lkICIiCi0iVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgotIlxuIgotIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgogbXNnc3RyICIiCi0iVMOsbSB0aOG6pXkgdHLhuqFuZyB0aMOhaSB04bqtcCB0aW0ga2jDtG5nIGhp4buDdSAlcy5cbiIKLSJcbiIKLSJU4bqtcCB0aW4gJXMga2jDtG5nIHRo4buDIMSRxrDhu6NjIGNodXnhu4NuIGdpYW8gYuG7n2kgY2jGsMahbmcgdHLDrG5oIG7DoHkuXG4iCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODkKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MTcKK21zZ2lkICJvbmx5IG9uZSBiYXRjaCBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiY2jhu4kgbeG7mXQgdMO5eSBjaOG7jW4gYmF0Y2ggxJHGsOG7o2MgY2jhu4kgcmEiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzUKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIjxraeG7g3U+IGzDoCBt4buZdCB0cm9uZyBz4buROiBibG9iLCB0cmVlLCBjb21taXQgaG/hurdjIHRhZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNgorbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgImhp4buDbiB0aOG7iyBraeG7g3UgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM3Cittc2dpZCAic2hvdyBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGvDrWNoIHRoxrDhu5tjIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzOQorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAidGhvw6F0IHbhu5tpIDAga2hpIGtow7RuZyBjw7MgbOG7l2kiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDAKK21zZ2lkICJwcmV0dHktcHJpbnQgb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiaW4gbuG7mWkgZHVuZyDEkeG7kWkgdMaw4bujbmcgZOG6oW5nIGThu4UgxJHhu41jIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQyCittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgInbhu5tpIMSR4buRaSB0xrDhu6NuZyBibG9iLCBjaOG6oXkgbOG7h25oIHRleHRjb252IHRyw6puIG7hu5lpIGR1bmcgY+G7p2EgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ0Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIGZpbHRlcnMgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiduG7m2kgxJHhu5FpIHTGsOG7o25nIGJsb2IsIGNo4bqheSBs4buHbmggZmlsdGVycyB0csOqbiBu4buZaSBkdW5nIGPhu6dhIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NSBnaXQtc3VibW9kdWxlLnNoOjEwMDIKK21zZ2lkICJibG9iIgorbXNnc3RyICJibG9iIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ2Cittc2dpZCAidXNlIGEgc3BlY2lmaWMgcGF0aCBmb3IgLS10ZXh0Y29udi8tLWZpbHRlcnMiCittc2dzdHIgImTDuW5nIG3hu5l0IMSRxrDhu51uZyBk4bqrbiByw7UgcsOgbmcgY2hvIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ4Cittc2dpZCAiYWxsb3cgLXMgYW5kIC10IHRvIHdvcmsgd2l0aCBicm9rZW4vY29ycnVwdCBvYmplY3RzIgorbXNnc3RyICJjaG8gcGjDqXAgLXMgdsOgIC10IMSR4buDIGzDoG0gdmnhu4djIHbhu5tpIGPDoWMgxJHhu5FpIHTGsOG7o25nIHNhaS9o4buPbmciCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDkKK21zZ2lkICJidWZmZXIgLS1iYXRjaCBvdXRwdXQiCittc2dzdHIgIsSR4buHbSBr4bq/dCB4deG6pXQgLS1iYXRjaCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1MQorbXNnaWQgInNob3cgaW5mbyBhbmQgY29udGVudCBvZiBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorImhp4buDbiB0aOG7iyB0aMO0bmcgdGluIHbDoCBu4buZaSBkdW5nIGPhu6dhIGPDoWMgxJHhu5FpIHTGsOG7o25nIGzhuqV5IHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1NQorbXNnaWQgInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgdGjDtG5nIHRpbiB24buBIMSR4buRaSB0xrDhu6NuZyBmZWQgIHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1OQorbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAidGhlbyBsacOqbiBr4bq/dCBt4buBbSB0cm9uZy1jw6J5ICjEkcaw4bujYyBkw7luZyB24bubaSAtLWJhdGNoIGhheSAtLWJhdGNoLWNoZWNrKSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MQorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgImhp4buDbiB0aOG7iyBt4buNaSDEkeG7kWkgdMaw4bujbmcgduG7m2kgLS1iYXRjaCBoYXkgLS1iYXRjaC1jaGVjayIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MworbXNnaWQgImRvIG5vdCBvcmRlciAtLWJhdGNoLWFsbC1vYmplY3RzIG91dHB1dCIKK21zZ3N0ciAixJHhu6tuZyBz4bqvcCB44bq/cCDEkeG6p3UgcmEgLS1iYXRjaC1hbGwtb2JqZWN0cyIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTMKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPuKApl0gWy0tXSB0w6puLcSRxrDhu51uZy1k4bqrbuKApiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTQKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj7igKZdIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAiYsOhbyBjw6FvIHThuqV0IGPhuqMgY8OhYyB0aHXhu5ljIHTDrW5oIMSR4bq3dCB0csOqbiB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIyCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgImNo4buJIGTDuW5nIC5naXRhdHRyaWJ1dGVzIHThu6sgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI1IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDIKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAixJHhu41jIHTDqm4gdOG6rXAgdGluIHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjUgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNworbXNnaWQgInRlcm1pbmF0ZSBpbnB1dCBhbmQgb3V0cHV0IHJlY29yZHMgYnkgYSBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJjaOG6pW0gZOG7qXQgY8OhYyBi4bqjbiBnaGkgdsOgbyB2w6AgcmEgYuG6sW5nIGvDvSB04buxIE5VTEwiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjEgYnVpbHRpbi9jaGVja291dC5jOjE0NjQgYnVpbHRpbi9nYy5jOjUzNworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5OQorbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiY2jhurduIGPDoWMgYsOhbyBjw6FvIHRp4bq/biB0csOsbmggaG/huqF0IMSR4buZbmciCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjkKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBpbnB1dCBwYXRocyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIG5o4buvbmcgxJHGsOG7nW5nIGThuqtuIMSR4bqndSB2w6BvIGtow7RuZyBraOG7m3AgduG7m2kgbeG6q3UiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MzEKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAiYuG7jyBxdWEgbeG7pWMgbOG7pWMga2hpIGtp4buDbSB0cmEiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYzCittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNo4buJIMSR4buLbmggY8OhYyB0w6puIMSRxrDhu51uZyBk4bqrbiB24bubaSAtLXN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2NgorbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICIteiBjaOG7iSBo4bujcCBsw70gduG7m2kgLS1zdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjgKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZCIKK21zZ3N0ciAiY2jGsGEgY2jhu4kgcmEgxJHGsOG7nW5nIGThuqtuIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MgorbXNnaWQgIi0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorbXNnc3RyICItLXF1aWV0IGNo4buJIGjhu6NwIGzhu4cgduG7m2kgdMOqbiDEkcaw4budbmcgZOG6q24gxJHGoW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc0Cittc2dpZCAiY2Fubm90IGhhdmUgYm90aCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UiCittc2dzdHIgImtow7RuZyB0aOG7gyBkw7luZyBj4bqjIGhhaSB0w7l5IGNo4buNbiAtLXF1aWV0IHbDoCAtLXZlcmJvc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc3Cittc2dpZCAiLS1ub24tbWF0Y2hpbmcgaXMgb25seSB2YWxpZCB3aXRoIC0tdmVyYm9zZSIKK21zZ3N0ciAidMO5eS1jaOG7jW4gLS1ub24tbWF0Y2hpbmcgY2jhu4kgaOG7o3AgbOG7hyBraGkgZMO5bmcgduG7m2kgLS12ZXJib3NlIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo5Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stbWFpbG1hcCBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8ZGFuaC1i4bqhPuKApiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MTQKK21zZ2lkICJhbHNvIHJlYWQgY29udGFjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAixJHhu5NuZyB0aOG7nWkgxJHhu41jIGPDoWMgZGFuaCBi4bqhIHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggZGFuaCBi4bqhOiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6NDgKK21zZ2lkICJubyBjb250YWN0cyBzcGVjaWZpZWQiCittc2dzdHIgImNoxrBhIGNo4buJIHJhIGRhbmggYuG6oSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjEzMQorbXNnaWQgImdpdCBjaGVja291dC1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2tvdXQtaW5kZXggWzxjw6FjIHTDuXkgY2jhu41uPl0gWy0tXSBbPHThuq1wLXRpbj7igKZdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTQ4Cittc2dpZCAic3RhZ2Ugc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMyBvciBhbGwiCittc2dzdHIgInN0YWdlIG7Dqm4gZ2nhu69hIDEgdsOgIDMgaGF5IGFsbCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICJs4bqleSByYSB0b8OgbiBi4buZIGPDoWMgdOG6rXAgdGluIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NQorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBleGlzdGluZyBmaWxlcyIKK21zZ3N0ciAiw6lwIGJ14buZYyBnaGkgxJHDqCBsw6puIHThuq1wIHRpbiDEkcOjIHPhurVuIGPDsyB04burIHRyxrDhu5tjIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY3Cittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAiIgorImtow7RuZyBj4bqjbmggYsOhbyBjaG8gbmjhu69uZyB04bqtcCB0aW4gdOG7k24gdOG6oWkgdsOgIGtow7RuZyBjw7MgdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY5Cittc2dpZCAiZG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzIgorbXNnc3RyICJraMO0bmcgY2hlY2tvdXQgY8OhYyB04bqtcCB0aW4gbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzEKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAiY+G6rXAgbmjhuq10IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogdHJvbmcgdOG6rXAgdGluIGzGsHUgYuG6o25nIG3hu6VjIGzhu6VjIG3hu5tpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc1Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLEkeG7jWMgZGFuaCBzw6FjaCDEkcaw4budbmcgZOG6q24gdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc3Cittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICJnaGkgbuG7mWkgZHVuZyB2w6BvIHThuq1wIHRpbiB04bqhbSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3OCBidWlsdGluL2NvbHVtbi5jOjMxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwMCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwMworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTEgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDkKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NzIKK21zZ2lkICJzdHJpbmciCittc2dzdHIgImNodeG7l2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzkKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICJraGkgdOG6oW8gY8OhYyB04bqtcCB0aW4sIG7hu5FpIHRow6ptIDxjaHXhu5dpPiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE4MQorbXNnaWQgImNvcHkgb3V0IHRoZSBmaWxlcyBmcm9tIG5hbWVkIHN0YWdlIgorbXNnc3RyICJzYW8gY2jDqXAgcmEgY8OhYyB04bqtcCB0aW4gdOG7qyBi4buHIHBow7NuZyBjw7MgdMOqbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMxCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIDxicmFuY2g+IgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxjw6FjIHTDuXkgY2jhu41uPl0gPG5ow6FuaD4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMgorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8bmjDoW5oPl0gLS0gPHThuq1wLXRpbj7igKYiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozNworbXNnaWQgImdpdCBzd2l0Y2ggWzxvcHRpb25zPl0gWzxicmFuY2g+XSIKK21zZ3N0ciAiZ2l0IHN3aXRjaCBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbPG5ow6FuaD5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIKK21zZ2lkICJnaXQgcmVzdG9yZSBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PGJyYW5jaD5dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc3RvcmUgWzxjw6FjIHTDuXkgY2jhu41uPl0gWy0tc291cmNlPTxuaMOhbmg+XSA8dOG6rXAgdGluPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NSBidWlsdGluL2NoZWNrb3V0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24g4oCcJXPigJ0ga2jDtG5nIGPDsyBjw6FjIHBoacOqbiBi4bqjbiBj4bunYSBjaMO6bmcgdGEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcgYnVpbHRpbi9jaGVja291dC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24g4oCcJXPigJ0ga2jDtG5nIGPDsyBjw6FjIHBoacOqbiBi4bqjbiBj4bunYSBjaMO6bmciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgYWxsIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIGtow7RuZyBjw7MgdOG6pXQgY+G6oyBjw6FjIHBoacOqbiBi4bqjbiBj4bqnbiB0aGnhur90IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIGtow7RuZyBjw7MgY8OhYyBwaGnDqm4gYuG6o24gY+G6p24gdGhp4bq/dCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdOiBraMO0bmcgdGjhu4MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyB0aMOqbSBr4bq/dCBxdeG6oyBow7JhIHRy4buZbiBjaG8g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICLEkMOjIHThuqFvIGzhuqFpICVkIHh1bmcgxJHhu5l0IGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tICVzIgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gJXMiCittc2dzdHJbMF0gIsSQw6MgY+G6rXAgbmjhuq10IMSRxrDhu51uZyBk4bqrbiAlZCB04burICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tIHRoZSBpbmRleCIKK21zZ2lkX3BsdXJhbCAiVXBkYXRlZCAlZCBwYXRocyBmcm9tIHRoZSBpbmRleCIKK21zZ3N0clswXSAixJDDoyBj4bqtcCBuaOG6rXQgxJHGsOG7nW5nIGThuqtuICVkIHThu6sgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTIgYnVpbHRpbi9jaGVja291dC5jOjQxNSBidWlsdGluL2NoZWNrb3V0LmM6NDE4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAia2jDtG5nIMSRxrDhu6NjIGTDuW5nIOKAnCVz4oCdIHbhu5tpIGPDoWMgxJHGsOG7nW5nIGThuqtuIGPhuq1wIG5o4bqtdCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyNSBidWlsdGluL2NoZWNrb3V0LmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAia2jDtG5nIMSRxrDhu6NjIGTDuW5nIOKAnCVz4oCdIHbhu5tpICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgY8OhYyDEkcaw4budbmcgZOG6q24gdsOgIGNodXnhu4NuIMSR4bq/biBuaMOhbmgg4oCcJXPigJ0gY8O5bmcgbeG7mXQgbMO6Yy4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibmVpdGhlciAnJXMnIG9yICclcycgaXMgc3BlY2lmaWVkIgorbXNnc3RyICJraMO0bmcgY2jhu4kgxJHhu4tuaCAnJXMnIGtow7RuZyAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbXVzdCBiZSB1c2VkIHdoZW4gJyVzJyBpcyBub3Qgc3BlY2lmaWVkIgorbXNnc3RyICJwaOG6o2kgY8OzIOKAnCVz4oCdIGtoaSBraMO0bmcgY2jhu4kgxJHhu4tuaCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0NSBidWlsdGluL2NoZWNrb3V0LmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgb3IgJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICInJXMnIGhheSAnJXMnIGtow7RuZyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjUwOSBidWlsdGluL2NoZWNrb3V0LmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIGtow7RuZyDEkcaw4bujYyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY4NCBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjEwNgorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICJi4bqhbiBj4bqnbiBwaOG6o2kgZ2nhuqNpIHF1eeG6v3QgYuG6o25nIG3hu6VjIGzhu6VjIGhp4buHbiB04bqhaSBj4bunYSBi4bqhbiB0csaw4bubYyDEkcOjIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzM0CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorImNhbm5vdCBjb250aW51ZSB3aXRoIHN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6XG4iCisiJXMiCiBtc2dzdHIgIiIKLSJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7DoG8gY+G6p24gY2h1eeG7g24gZ2lhby5cbiIKLSJcbiIKLSJC4bqhbiBwaOG6o2kgxJHGsGEgbMOqbiBi4buHIHBow7NuZyDDrXQgbmjhuqV0IGzDoCBt4buZdCB04bqtcCB0aW4gdHLGsOG7m2Mga2hpIGPDsyB0aOG7gyBjaHV54buDbiAiCi0iZ2lhby5cbiIKKyJraMO0bmcgdGjhu4MgdGnhur9wIHThu6VjIHbhu5tpIGPDoWMgdGhheSDEkeG7lWkgxJHDoyDEkcaw4bujYyDEkcawYSBsw6puIGLhu4cgcGjDs25nIHRyb25nIGPDoWMgZMOybmcgIgorInNhdTpcbiIKKyIlcyIKIAotIzogbGliL2NvbW1pdC50Y2w6MjA0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiByZWZsb2cgY2hvIOKAnCVz4oCdOiAlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODc5Cittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIkhFQUQgaGnhu4duIGdp4budIHThuqFpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODgzIGJ1aWx0aW4vY2xvbmUuYzo3MTcKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIEhFQUQiCittc2dzdHIgImtow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgSEVBRCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4NworIywgYy1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLEkOG6t3QgbOG6oWkgbmjDoW5oIOKAnCVz4oCdXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSBvbiAnJXMnXG4iCittc2dzdHIgIsSQw6Mgc+G6tW4gc8OgbmcgdHLDqm4g4oCcJXPigJ1cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAixJDDoyBjaHV54buDbiB04bubaSB2w6AgxJHhurd0IGzhuqFpIG5ow6FuaCDigJwlc+KAnVxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIsSQw6MgY2h1eeG7g24gxJHhur9uIG5ow6FuaCBt4bubaSDigJwlc+KAnVxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIsSQw6MgY2h1eeG7g24gxJHhur9uIG5ow6FuaCDigJwlc+KAnVxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiDigKYgdsOgIG5oaeG7gXUgaMahbiAlZC5cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk1NQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCiAiXG4iCi0iQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCiAiXG4iCi0iLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgotIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCi0iLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgotbXNnc3RyICIiCi0iSMOjeSBjdW5nIGPhuqVwIGzhu51pIGNow7ogZ2nhuqNpIGNobyBs4bqnbiBjaHV54buDbiBnaWFvLlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKKyJD4bqjbmggYsOhbzogYuG6oW4gxJHDoyBy4budaSBi4buPICVkIGzhuqduIGNodXnhu4NuIGdpYW8gbOG6oWkgxJHhurFuZyBzYXUsIGtow7RuZyDEkcaw4bujYyBr4bq/dCBu4buRaSAiCisixJHhur9uXG4iCisiYuG6pXQga+G7syBuaMOhbmggbsOgbyBj4bunYSBi4bqhbjpcbiIKICJcbiIKLSJM4budaSBjaMO6IGdp4bqjaSB04buRdCBuaOG6pXQgbsOqbiBjw7MgxJHhu4tuaCBk4bqhbmcgc2F1OlxuIgotIlxuIgotIi0gRMOybmcgxJHhuqd1IHRpw6puOiBNw7QgdOG6oyBuaOG7r25nIGfDrCBi4bqhbiDEkcOjIGzDoG0uXG4iCi0iLSBEw7JuZyB0aOG7qSBoYWk6IMSQ4buDIHRy4buRbmdcbiIKLSItIEPDoWMgZMOybmcgY8OybiBs4bqhaTogTcO0IHThuqMgeGVtIHbDrCBzYW8gbmjhu69uZyB0aGF5IMSR4buVaSBuw6B5IGzDoCBj4bqnbiB0aGnhur90LlxuIgorIiVzXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjIzNQotbXNnaWQgIkNhbGxpbmcgcHJlLWNvbW1pdCBob29rLi4uIgotbXNnc3RyICLEkGFuZyBn4buNaSBtw7NjIChob29rKSBwcmUtY29tbWl0Li4uIgotCi0jOiBsaWIvY29tbWl0LnRjbDoyNTAKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKLW1zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyBi4buLIGtoxrDhu5tjIHThu6sgZG8gbcOzYyBwcmUtY29tbWl0LiIKLQotIzogbGliL2NvbW1pdC50Y2w6MjY5CisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTc0CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJZb3UgYXJlIGFib3V0IHRvIGNvbW1pdCBvbiBhIGRldGFjaGVkIGhlYWQuIFRoaXMgaXMgYSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgIgotInRoaW5nIHRvIGRvIGJlY2F1c2UgaWYgeW91IHN3aXRjaCB0byBhbm90aGVyIGJyYW5jaCB5b3Ugd2lsbCBsb3NlIHlvdXIgIgotImNoYW5nZXMgYW5kIGl0IGNhbiBiZSBkaWZmaWN1bHQgdG8gcmV0cmlldmUgdGhlbSBsYXRlciBmcm9tIHRoZSByZWZsb2cuIFlvdSAiCi0ic2hvdWxkIHByb2JhYmx5IGNhbmNlbCB0aGlzIGNvbW1pdCBhbmQgY3JlYXRlIGEgbmV3IGJyYW5jaCB0byBjb250aW51ZS5cbiIKLSIgXG4iCi0iIERvIHlvdSByZWFsbHkgd2FudCB0byBwcm9jZWVkIHdpdGggeW91ciBDb21taXQ/IgotbXNnc3RyICIiCi0iQuG6oW4gdGjhu7FjIGhp4buHbiBjaHV54buDbiBnaWFvIOG7nyBjaOG7lyDEkcOjIHTDoWNoIHLhu51pIGto4buPaSBjw6FjIMSR4bqndS4gxJBp4buBdSBuw6B5IGzDoCBuZ3V5ICIKLSJoaeG7g20gYuG7n2kgbuG6v3UgYuG6oW4gY2h1eeG7g24gc2FuZyBuaMOhbmgga2jDoWMgdGjDrCBi4bqhbiBz4bq9IG3huqV0IG5o4buvbmcgdGhheSDEkeG7lWkgbsOgeSB2w6AgIgotInZp4buHYyBs4bqleSBs4bqhaSBjaMO6bmcgdOG7qyByZWZsb2cgY8Wpbmcga2jDsyBraMSDbi4gQuG6oW4gZ+G6p24gbmjGsCBjaOG6r2MgY2jhuq9uIGzDoCBuw6puIGjhu6d5ICIKLSJi4buPIGzhuqduIGNodXnhu4NuIGdpYW8gbsOgeSB2w6AgdOG6oW8gbeG7mXQgbmjDoW5oIG3hu5tpIHRyxrDhu5tjIGtoaSB0aeG6v3AgdOG7pWMuXG4iCi0iIFxuIgotIiBC4bqhbiBjw7MgdGjhu7FjIHPhu7EgbXXhu5FuIHRp4bq/cCB04bulYyBjaHV54buDbiBnaWFvPyIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAiIgorIk7hur91IGLhuqFuIG114buRbiBnaeG7ryAoY2jDum5nKSBuw7MgYuG6sW5nIGPDoWNoIHThuqFvIHJhIG3hu5l0IG5ow6FuaCBt4bubaSwgxJHDonkgY8OzIGzhur0gbMOgXG4iCisibeG7mXQgdGjhu51pIMSRaeG7g20gdGjDrWNoIGjhu6NwIMSR4buDIGzDoG0gdGjhur8gYuG6sW5nIGzhu4duaDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8dMOqbl9uaMOhbmhfbeG7m2k+ICVzXG4iCisiXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI5MAotbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICLEkGFuZyBn4buNaSBtw7NjIGNvbW1pdC1tc2cuLi4iCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwOQorbXNnaWQgImludGVybmFsIGVycm9yIGluIHJldmlzaW9uIHdhbGsiCittc2dzdHIgImzhu5dpIG7hu5lpIGLhu5kgdHJvbmcga2hpIGRpIGNodXnhu4NuIHF1YSBjw6FjIMSRaeG7g20geMOpdCBkdXnhu4d0IgogCi0jOiBsaWIvY29tbWl0LnRjbDozMDUKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyBi4buLIGtoxrDhu5tjIHThu6sgZG8gbcOzYyBjb21taXQtbXNnLiIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDEzCittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgIlbhu4sgdHLDrSB0csaw4bubYyBraWEgY+G7p2EgSEVBRCBsw6AiCiAKLSM6IGxpYi9jb21taXQudGNsOjMxOAotbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKLW1zZ3N0ciAiQ2h1eeG7g24gZ2lhbyBjw6FjIHRoYXkgxJHhu5VpLi4uIgorIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTMgYnVpbHRpbi9jaGVja291dC5jOjEzMTUKK21zZ2lkICJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJC4bqhbiB04bqhaSBuaMOhbmggbcOgIG7DsyBjaMawYSBo4buBIMSRxrDhu6NjIHNpbmggcmEiCiAKLSM6IGxpYi9jb21taXQudGNsOjMzNAotbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHdyaXRlLXRyZWU6IgotCi0jOiBsaWIvY29tbWl0LnRjbDozMzUgbGliL2NvbW1pdC50Y2w6Mzc5IGxpYi9jb21taXQudGNsOjQwMAotbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgY2h1eeG7g24gZ2lhby4iCi0KLSM6IGxpYi9jb21taXQudGNsOjM1MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCi1tc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW8gJXMgY8OzIHbhursgxJHDoyBoxrAgaOG7j25nIgotCi0jOiBsaWIvY29tbWl0LnRjbDozNTcKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTI4CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJObyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGJ5IHRoaXMgY29tbWl0IGFuZCBpdCB3YXMgbm90IGEgbWVyZ2UgY29tbWl0LlxuIgotIlxuIgotIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyInJXMnIGNvdWxkIGJlIGJvdGggYSBsb2NhbCBmaWxlIGFuZCBhIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJQbGVhc2UgdXNlIC0tIChhbmQgb3B0aW9uYWxseSAtLW5vLWd1ZXNzKSB0byBkaXNhbWJpZ3VhdGUiCiBtc2dzdHIgIiIKLSJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7DoG8gxJHhu4MgY2h1eeG7g24gZ2lhby5cbiIKLSJcbiIKLSJLaMO0bmcgY8OzIHThuq1wIHRpbiBuw6BvIMSRxrDhu6NjIHPhu61hIGLhu59pIGzhuqduIGNodXnhu4NuIGdpYW8gbsOgeSB2w6AgbsOzIGtow7RuZyBwaOG6o2kgbMOgICIKLSJs4bqnbiBjaHV54buDbiBnaWFvIGjDsmEgdHLhu5luLlxuIgotIlxuIgotIlPhur0gdGjhu7FjIGhp4buHbiB2aeG7h2MgcXXDqXQgbOG6oWkgbmdheSBiw6J5IGdp4budLlxuIgorIuKAnCVz4oCdIGtow7RuZyB0aOG7gyBsw6AgY+G6oyB04bqtcCB0aW4gbuG7mWkgYuG7mSB2w6AgbeG7mXQgbmjDoW5oIHRoZW8gZMO1aS5cbiIKKyJWdWkgbG9uZyBkw7luZyAtLSAodsOgIHTDuXkgY2jhu41uIHRow6ptIC0tbm8tZ3Vlc3MpIMSR4buDIHRyw6FuaCBs4bqrbiBs4buZbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzY0Ci1tc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgotbXNnc3RyICJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7DoG8gxJHhu4MgY2h1eeG7g24gZ2lhby4iCi0KLSM6IGxpYi9jb21taXQudGNsOjM3OAotbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCi1tc2dzdHIgImNvbW1pdC10cmVlIGfhurdwIGzhu5dpOiIKLQotIzogbGliL2NvbW1pdC50Y2w6Mzk5Ci1tc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgotbXNnc3RyICJj4bqtcCBuaOG6rXQgdGhhbSBjaGnhur91IHRo4bqldCBi4bqhaToiCi0KLSM6IGxpYi9jb21taXQudGNsOjQ5MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKLW1zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIHThuqFvICVzOiAlcyIKLQotIzogbGliL2NvbnNvbGUudGNsOjU5Ci1tc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAixJBhbmcgY2jhuqF5Li4gdnVpIGzDsm5nIMSR4bujaS4uLiIKLQotIzogbGliL2NvbnNvbGUudGNsOjE4NgotbXNnaWQgIlN1Y2Nlc3MiCi1tc2dzdHIgIlRow6BuaCBjw7RuZyIKLQotIzogbGliL2NvbnNvbGUudGNsOjIwMAotbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKLW1zZ3N0ciAiTOG7l2k6IEPDonUgbOG7h25oIGfhurdwIGzhu5dpIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQyCi1tc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCi1tc2dzdHIgIlPhu5EgbMaw4bujbmcgxJHhu5FpIHTGsOG7o25nIGLhu4sgbeG6pXQiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDMKLW1zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKLW1zZ3N0ciAiRHVuZyBsxrDhu6NuZyDEkcSpYSDEkcaw4bujYyBkw7luZyBi4bufaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBi4buLIG3huqV0IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ0Ci1tc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICJT4buRIGzGsOG7o25nIMSR4buRaSB0xrDhu6NuZyDEkcaw4bujYyDEkcOzbmcgZ8OzaSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NQotbXNnaWQgIk51bWJlciBvZiBwYWNrcyIKLW1zZ3N0ciAiU+G7kSBsxrDhu6NuZyBnw7NpIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ2Ci1tc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICJEdW5nIGzGsOG7o25nIMSRxKlhIMSRxrDhu6NjIGTDuW5nIGLhu59pIGPDoWMgxJHhu5FpIHTGsOG7o25nIGfDs2kiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKLW1zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgotbXNnc3RyICJDw6FjIMSR4buRaSB0xrDhu6NuZyBnw7NpIGNo4budIHjDqW4gYuG7m3QiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKLW1zZ2lkICJHYXJiYWdlIGZpbGVzIgotbXNnc3RyICJDw6FjIHThuq1wIHRpbiByw6FjIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjcyCi1tc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKLW1zZ3N0ciAiTsOpbiBjxqEgc+G7nyBk4buvIGxp4buHdSDEkeG7kWkgdMaw4bujbmciCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKLW1zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKLW1zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSBjxqEgc+G7nyBk4buvIGxp4buHdSDEkeG7kWkgdMaw4bujbmcgYuG6sW5nIGzhu4duaCBmc2NrIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjEwNwotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9jaGVja291dC5jOjExMzUKIG1zZ2lkICIiCi0iVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgorIklmIHlvdSBtZWFudCB0byBjaGVjayBvdXQgYSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIG9uLCBlLmcuICdvcmlnaW4nLFxuIgorInlvdSBjYW4gZG8gc28gYnkgZnVsbHkgcXVhbGlmeWluZyB0aGUgbmFtZSB3aXRoIHRoZSAtLXRyYWNrIG9wdGlvbjpcbiIKICJcbiIKLSJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKLSJ0aGUgZGF0YWJhc2UuXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtZT5cbiIKICJcbiIKLSJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKKyJJZiB5b3UnZCBsaWtlIHRvIGFsd2F5cyBoYXZlIGNoZWNrb3V0cyBvZiBhbiBhbWJpZ3VvdXMgPG5hbWU+IHByZWZlclxuIgorIm9uZSByZW1vdGUsIGUuZy4gdGhlICdvcmlnaW4nIHJlbW90ZSwgY29uc2lkZXIgc2V0dGluZ1xuIgorImNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIGluIHlvdXIgY29uZmlnLiIKIG1zZ3N0ciAiIgotIkhp4buHbiBraG8gbsOgeSBt4bqldCDGsOG7m2MgY2jhu6tuZyBraG/huqNuZyAlaSDEkeG7kWkgdMaw4bujbmcuXG4iCisiTuG6v3Ugw70gYuG6oW4gbMOgIGzhuqV5IHJhIG5ow6FuaCBtw6F5IGNo4bunIMSRxrDhu6NjIHRoZW8gZMO1aSwgdsOtIGThu6Ug4oCcb3JpZ2lu4oCdLFxuIgorImLhuqFuIGPDsyB0aOG7gyBsw6BtIG5oxrAgduG6rXkgYuG6sW5nIGPDoWNoIGNo4buJIMSR4buLbmggxJHhuqd5IMSR4bunIHTDqm4gduG7m2kgdMO5eSBjaOG7jW4gLS10cmFjazpcbiIKICJcbiIKLSLEkOG7gyB04buRaSDGsHUgaMOzYSBoaeG7h3Ugc3XhuqV0LCBraHV54bq/biBuZ2jhu4sgYuG6oW4gbsOqbiBuw6luIGPGoSBz4bufIGThu68gbGnhu4d1IGPhu6dhIG3DrG5oICIKLSJs4bqhaS5cbiIKKyIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luLzx0w6puPlxuIgogIlxuIgotIk7DqW4gY8ahIHPhu58gZOG7ryBsaeG7h3UgY2jhu6k/IgorIk7hur91IGLhuqFuIG114buRbiBsdcO0biBs4bqleSByYSB04burIG3hu5l0IDx0w6puPiBt4buZdCBtw6F5IGNo4bunIMawYSB0aMOtY2hcbiIKKyJjaMawYSByw7UgcsOgbmcsIHbDrSBk4bulIG3DoXkgY2jhu6cg4oCcb3JpZ2lu4oCdLCBjw6JuIG5o4bqvYyBjw6BpIMSR4bq3dFxuIgorImNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIHRyb25nIGPhuqV1IGjDrG5oIGPhu6dhIGLhuqFuLiIKIAotIzogbGliL2RhdGUudGNsOjI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKLW1zZ3N0ciAiTmfDoHkgdGjDoW5nIGtow7RuZyBo4bujcCBs4buHIHThu6sgR2l0OiAlcyIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbWF0Y2hlZCBtdWx0aXBsZSAoJWQpIHJlbW90ZSB0cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi4oCcJXPigJ0ga2jhu5twIHbhu5tpIG5oaeG7gXUgKCVkKSBuaMOhbmggbcOheSBjaOG7pyDEkcaw4bujYyB0aGVvIGTDtWkiCiAKLSM6IGxpYi9kaWZmLnRjbDo2NAotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9jaGVja291dC5jOjEyMTEKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQiCittc2dzdHIgImNo4buJIGPhuqduIG3hu5l0IHRoYW0gY2hp4bq/dSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iCittc2dzdHIgImNo4buJIGPhuqduIG3hu5l0IHRoYW0gY2hp4bq/dSwgbmjGsG5nIGzhuqFpIMSRxrBhIHJhICVkLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNzQgYnVpbHRpbi93b3JrdHJlZS5jOjI4MyBidWlsdGluL3dvcmt0cmVlLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAidGhhbSBjaGnhur91IGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyODcgYnVpbHRpbi9jaGVja291dC5jOjE2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICJ0aGFtIGNoaeG6v3Uga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgY8OieTolcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCB0YWcgJyVzJyIKK21zZ3N0ciAiY+G6p24gbeG7mXQgbmjDoW5oLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjIHRo4bq7IOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IHJlbW90ZSBicmFuY2ggJyVzJyIKK21zZ3N0ciAiY+G6p24gbeG7mXQgbmjDoW5oLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjIG5ow6FuaCBtw6F5IHBo4bulYyB24bulIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNyBidWlsdGluL2NoZWNrb3V0LmM6MTM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290ICclcyciCittc2dzdHIgImPhuqduIG3hu5l0IG5ow6FuaCwgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCBjb21taXQgJyVzJyIKK21zZ3N0ciAiY+G6p24gbeG7mXQgbmjDoW5oLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1NgogbXNnaWQgIiIKLSJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKLSJcbiIKLSIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKLSJcbiIKLSJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCAiCi0idGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKLSJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlICIKLSJ0aGUgc2FtZSBzdGF0ZS4iCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgbWVyZ2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IG1lcmdlIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKIG1zZ3N0ciAiIgotIktow7RuZyB0w6xtIHRo4bqleSBraMOhYyBiaeG7h3QgZ8OsLlxuIgotIlxuIgotIiVzIGtow7RuZyB0aGF5IMSR4buVaS5cbiIKLSJcbiIKLSJUaOG7nWkgZ2lhbiBz4butYSDEkeG7lWkgY+G7p2EgdOG6rXAgdGluIG7DoHkgxJHGsOG7o2MgY+G6rXAgbmjhuq10IGLhu59pIOG7qW5nIGThu6VuZyBraMOhYywgbmjGsG5nIG7hu5lpICIKLSJkdW5nIGLDqm4gdHJvbmcgdOG6rXAgdGluIHRow6wga2jDtG5nIHRoYXkgxJHhu5VpLlxuIgotIlxuIgotIlPhur0gdGjhu7FjIGhp4buHbiBxdcOpdCBs4bqhaSBt4buZdCBjw6FjaCB04buxIMSR4buZbmcgxJHhu4MgdMOsbSBjw6FjIHThuq1wIHRpbiBraMOhYyBjw6FpIG3DoCBjw7MgdGjhu4MgIgotImPDsyBjw7luZyB0w6xuaCB0cuG6oW5nLiIKKyJraMO0bmcgdGjhu4MgY2h1eeG7g24gbmjDoW5oIHRyb25nIGtoaSDEkWFuZyBow7JhIHRy4buZblxuIgorIkPDom4gbmjhuq9jIGR1bmcgXCJnaXQgbWVyZ2UgLS1xdWl0XCIgaG/hurdjIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKIAotIzogbGliL2RpZmYudGNsOjEwNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKLW1zZ3N0ciAixJBhbmcgdOG6o2kgZGlmZiBj4bunYSAlcy4uLiIKLQotIzogbGliL2RpZmYudGNsOjEyNQorIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjAKIG1zZ2lkICIiCi0iTE9DQUw6IGRlbGV0ZWRcbiIKLSJSRU1PVEU6XG4iCisiY2Fubm90IHN3aXRjaCBicmFuY2ggaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uXG4iCisiQ29uc2lkZXIgXCJnaXQgYW0gLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgogbXNnc3RyICIiCi0iTuG7mElC4buYOiDEkcOjIHhvw6FcbiIKLSJNw4FZQ0jhu6Y6XG4iCisia2jDtG5nIHRo4buDIGNodXnhu4NuIG5oYW5oIOG7nyBnaeG7r2EgbeG7mXQgcGhpw6puIGFtXG4iCisiQ8OibiBuaOG6r2MgZMO5bmcgXCJnaXQgYW0gLS1xdWl0XCIgaG/hurdjIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKIAotIzogbGliL2RpZmYudGNsOjEzMAorIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjQKIG1zZ2lkICIiCi0iUkVNT1RFOiBkZWxldGVkXG4iCi0iTE9DQUw6XG4iCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZWJhc2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgogbXNnc3RyICIiCi0iTcOBWUNI4bumOiDEkcOjIHhvw6FcbiIKLSJO4buYSULhu5g6XG4iCisia2jDtG5nIHRo4buDIGNodXnhu4NuIG5ow6FuaCB0cm9uZyBraGkgY+G6o2kgdOG7lVxuIgorIkPDom4gbmjhuq9jIGTDuW5nIFwiZ2l0IHJlYmFzZSAtLXF1aXRcIiBoYXkgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgogCi0jOiBsaWIvZGlmZi50Y2w6MTM3Ci1tc2dpZCAiTE9DQUw6XG4iCi1tc2dzdHIgIk7hu5hJLULhu5g6XG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoxNDAKLW1zZ2lkICJSRU1PVEU6XG4iCi1tc2dzdHIgIk3DgVktQ0jhu6Y6XG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoyMDIgbGliL2RpZmYudGNsOjM0MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgaGnhu4NuIHRo4buLICVzIgotCi0jOiBsaWIvZGlmZi50Y2w6MjAzCi1tc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKLW1zZ3N0ciAiTOG7l2kga2hpIHThuqNpIHThuq1wIHRpbjoiCi0KLSM6IGxpYi9kaWZmLnRjbDoyMTAKLW1zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCi1tc2dzdHIgIktobyBHaXQgKGThu7Egw6FuIGNvbikiCi0KLSM6IGxpYi9kaWZmLnRjbDoyMjIKLW1zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCi1tc2dzdHIgIiogVOG6rXAgdGluIG5o4buLIHBow6JuIChraMO0bmcgaGnhu4NuIHRo4buLIG7hu5lpIGR1bmcpLiIKLQotIzogbGliL2RpZmYudGNsOjIyNwotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjgKIG1zZ2lkICIiCi0iKiBVbnRyYWNrZWQgZmlsZSBpcyAlZCBieXRlcy5cbiIKLSIqIFNob3dpbmcgb25seSBmaXJzdCAlZCBieXRlcy5cbiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSBjaGVycnktcGlja2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKIG1zZ3N0ciAiIgotIiogVOG6rXAgdGluIGNoxrBhIHRoZW8gZMO1aSBsw6AgJWQgYnl0ZS5cbiIKLSIqIENo4buJIGhp4buDbiB0aOG7iyAlZCBieXRlIMSR4bqndSAuXG4iCisia2jDtG5nIHRo4buDIGNodXnhu4NuIG5ow6FuaCB0cm9uZyBraGkgIGNoZXJyeS1waWNraW5nXG4iCisiQ8OibiBuaOG6r2MgZMO5bmcgXCJnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0XCIgaGF5IFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKIAotIzogbGliL2RpZmYudGNsOjIzMwotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzIKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmV2ZXJ0aW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgcmV2ZXJ0IC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyBjaHV54buDbiBuaMOhbmggdHJvbmcga2hpIGhvw6BuIG5ndXnDqm5cbiIKKyJDw6JuIG5o4bqvYyBkw7luZyBcImdpdCByZXZlcnQgLS1xdWl0XCIgaG/hurdjIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzYKK21zZ2lkICJ5b3UgYXJlIHN3aXRjaGluZyBicmFuY2ggd2hpbGUgYmlzZWN0aW5nIgorbXNnc3RyICIiCisiYuG6oW4gaGnhu4duIHThuqFpIMSRYW5nIHRo4buxYyBoaeG7h24gdmnhu4djIGNodXnhu4NuIG5ow6FuaCB0cm9uZyBraGkgxJFhbmcgZGkgY2h1eeG7g24gbuG7rWEgIgorImLGsOG7m2MiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgzCittc2dpZCAicGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgImPDoWMgxJHGsOG7nW5nIGThuqtuIGtow7RuZyB0aOG7gyBkw7luZyBjw7luZyB24bubaSBjw6FjIG5ow6FuaCBjaHV54buDbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODYgYnVpbHRpbi9jaGVja291dC5jOjEzOTAgYnVpbHRpbi9jaGVja291dC5jOjEzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIHRo4buDIMSRxrDhu6NjIHPhu60gZOG7pW5nIHbhu5tpIGPDoWMgbmjDoW5oIGNodXnhu4NuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5OCBidWlsdGluL2NoZWNrb3V0LmM6MTQwMSBidWlsdGluL2NoZWNrb3V0LmM6MTQwNAorIzogYnVpbHRpbi9jaGVja291dC5jOjE0MDkgYnVpbHRpbi9jaGVja291dC5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyB0aOG7gyDEkcaw4bujYyBkw7luZyB24bubaSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgdGFrZSA8c3RhcnQtcG9pbnQ+IgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgdGjhu4Mgbmjhuq1uIDzEkWnhu4NtLcSR4bqndT4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY2h1eeG7g24gbmjDoW5oIMSR4bq/biBt4buZdCB0aOG7qSBraMO0bmcgcGjhuqNpIGzDoCBs4bqnbiBjaHV54buDbiBnaWFvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQyNgorbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG9yIGNvbW1pdCBhcmd1bWVudCIKK21zZ3N0ciAidGhp4bq/dSB0aGFtIHPhu5EgbMOgIG5ow6FuaCBob+G6t2MgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjggYnVpbHRpbi9jbG9uZS5jOjkxIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NzIKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM1IGJ1aWx0aW4vZmV0Y2guYzoxNjcgYnVpbHRpbi9tZXJnZS5jOjI4NgorIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjcgYnVpbHRpbi9wdWxsLmM6MTE4IGJ1aWx0aW4vcHVzaC5jOjU2MworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzQKK21zZ2lkICJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIsOpcCBideG7mWMgYsOhbyBjw6FvIHRp4bq/biB0cmnhu4NuIGPDtG5nIHZp4buHYyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjkKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAidGjhu7FjIGhp4buHbiBow7JhIHRy4buZbiBraeG7g3UgMy13YXkgduG7m2kgbmjDoW5oIG3hu5tpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ3MCBidWlsdGluL2xvZy5jOjE2OTAgcGFyc2Utb3B0aW9ucy5oOjMyMgorbXNnaWQgInN0eWxlIgorbXNnc3RyICJraeG7g3UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDcxCittc2dpZCAiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIKK21zZ3N0ciAieHVuZyDEkeG7mXQga2nhu4N1IChow7JhIHRy4buZbiBob+G6t2MgZGlmZjMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MyBidWlsdGluL3dvcmt0cmVlLmM6NDk2Cittc2dpZCAiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICJy4budaSBi4buPIEhFQUQgdOG6oWkgbOG6p24gY2h1eeG7g24gZ2lhbyB0aGVvIHTDqm4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg0Cittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgIsSR4bq3dCB0aMO0bmcgdGluIHRoxrDhu6NuZyBuZ3Xhu5NuIGNobyBuaMOhbmggbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg2Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgIsOpcCBideG7mWMgbOG6pXkgcmEgKGLhu48gxJFpIG5o4buvbmcgdGhheSDEkeG7lWkgbuG7mWkgYuG7mSkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg4Cittc2dpZCAibmV3LWJyYW5jaCIKK21zZ3N0ciAibmjDoW5oLW3hu5tpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4OAorbXNnaWQgIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIKK21zZ3N0ciAibmjDoW5oIGtow7RuZyBjaGEgbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDkwIGJ1aWx0aW4vbWVyZ2UuYzoyODkKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgImPhuq1wIG5o4bqtdCBjw6FjIHThuq1wIHRpbiBi4buLIGLhu48gcXVhICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0OTMKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgImtow7RuZyBraeG7g20gdHJhIG7hur91IGPDonkgbMOgbSB2aeG7h2Mga2jDoWMgxJFhbmcgZ2nhu68gdGhhbSBjaGnhur91IMSRw6MgY2hvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUwNgorbXNnaWQgImNoZWNrb3V0IG91ciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiIgorImzhuqV5IHJhIChjaGVja291dCkgcGhpw6puIGLhuqNuIGPhu6dhIGNow7puZyB0YSBjaG8gY8OhYyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTA5Cittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgIiIKKyJs4bqleSByYSAoY2hlY2tvdXQpIHBoacOqbiBi4bqjbiBj4bunYSBjaMO6bmcgaOG7jSBjaG8gY8OhYyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTEzCittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICJraMO0bmcgZ2nhu5tpIGjhuqFuIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiB0aMOgbmggY2jhu4kgY8OhYyBt4bulYyBy4bqjaSByw6FjIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU2NQorbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiAtYiwgLUIgdsOgIC0tb3JwaGFuIGxv4bqhaSB04burIGzhuqtuIG5oYXUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTY4Cittc2dpZCAiLXAgYW5kIC0tb3ZlcmxheSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItcCB2w6AgLS1vdmVybGF5IGxv4bqhaSB04burIGzhuqtuIG5oYXUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjA1Cittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICItLXRyYWNrIGPhuqduIHTDqm4gbeG7mXQgbmjDoW5oIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYxMAorbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAidGhp4bq/dSB0w6puIG5ow6FuaDsgaMOjeSB0aOG7rSAtYiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjU4Cittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDEkcOjIGNobyBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBjb21taXQgYW5kIGEgYnJhbmNoICclcycgY2Fubm90IGJlIGNyZWF0ZWQgZnJvbSBpdCIKK21zZ3N0ciAiIgorIuKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gdsOgIG3hu5l0IG5ow6FuaCclc+KAnSBraMO0bmcgdGjhu4MgxJHGsOG7o2MgdOG6oW8gIgorInThu6sgxJHDsyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGtow7RuZyBuaOG6rW4gbeG7mXQgxJHhu5FpIHPhu5EgxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY3OAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZGV0YWNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSB4dW5nIGto4bqvYyB24bubaSAtLWRldGFjaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2ODEgYnVpbHRpbi9yZXNldC5jOjMyNCBidWlsdGluL3N0YXNoLmM6MTUwNgorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHh1bmcga2jhuq9jIHbhu5tpIC0tcGF0Y2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjkyCittc2dpZCAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgdsOgIC0tbWVyZ2UgbMOgIHh1bmcga2jhuq9jIHbhu5tpIG5oYXUga2hpXG4iCisiY2hlY2tvdXQgYuG6o25nIG3hu6VjIGzhu6VjIChpbmRleCkuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY5NworbXNnaWQgInlvdSBtdXN0IHNwZWNpZnkgcGF0aChzKSB0byByZXN0b3JlIgorbXNnc3RyICJi4bqhbiBwaOG6o2kgY2jhu4kgxJHhu4tuaCBjw6FjIHRoxrAgbeG7pWMgbXXhu5FuIGjhu5NpIHBo4bulYyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjMgYnVpbHRpbi9jaGVja291dC5jOjE3MjUgYnVpbHRpbi9jaGVja291dC5jOjE3NzQKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc2IGJ1aWx0aW4vY2xvbmUuYzoxMjEgYnVpbHRpbi9yZW1vdGUuYzoxNzAKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcyIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTIgYnVpbHRpbi93b3JrdHJlZS5jOjQ5NAorbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAibmjDoW5oIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyNAorbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICJ04bqhbyB2w6AgY2hlY2tvdXQgbeG7mXQgbmjDoW5oIG3hu5tpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyNgorbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgY2hlY2tvdXQgYSBicmFuY2giCittc2dzdHIgInThuqFvL8SR4bq3dF9s4bqhaSB2w6AgY2hlY2tvdXQgbeG7mXQgbmjDoW5oIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyNworbXNnaWQgImNyZWF0ZSByZWZsb2cgZm9yIG5ldyBicmFuY2giCittc2dzdHIgInThuqFvIHJlZmxvZyBjaG8gbmjDoW5oIG3hu5tpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyOQorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIChkZWZhdWx0KSIKK21zZ3N0ciAixJFvw6FuIHRo4bupIGhhaSAnZ2l0IGNoZWNrb3V0IDxraMO0bmctbmjDoW5oLW7DoG8tbmjGsC124bqteT4nICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MzAKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIChkZWZhdWx0KSIKK21zZ3N0ciAiZMO5bmcgY2jhur8gxJHhu5kgY2hlIHBo4bunICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzUKK21zZ2lkICJjcmVhdGUgYW5kIHN3aXRjaCB0byBhIG5ldyBicmFuY2giCittc2dzdHIgInThuqFvIHbDoCBjaHV54buDbiDEkeG6v24gbeG7mXQgbmjDoW5oIG3hu5tpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3NworbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgc3dpdGNoIHRvIGEgYnJhbmNoIgorbXNnc3RyICJ04bqhby/EkeG6t3RfbOG6oWkgdsOgIGNodXnhu4NuIMSR4bq/biBt4buZdCBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc5Cittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgc3dpdGNoIDxuby1zdWNoLWJyYW5jaD4nIgorbXNnc3RyICJn4bujaSDDvSB0aOG7qSBoYWkgXCJnaXQgY2hlY2tvdXQgPGtow7RuZy1uaMOhbmgtbsOgby1uaMawLXbhuq15PlwiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc4MQorbXNnaWQgInRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAiduG7qXQgYuG7jyBjw6FjIHPhu61hIMSR4buVaSDEkeG7i2EgcGjGsMahbmciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODEzCittc2dpZCAid2hpY2ggdHJlZS1pc2ggdG8gY2hlY2tvdXQgZnJvbSIKK21zZ3N0ciAibOG6pXkgcmEgdOG7qyB0cmVlLWlzaCBuw6BvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxNQorbXNnaWQgInJlc3RvcmUgdGhlIGluZGV4IgorbXNnc3RyICJwaOG7pWMgaOG7k2kgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxNworbXNnaWQgInJlc3RvcmUgdGhlIHdvcmtpbmcgdHJlZSAoZGVmYXVsdCkiCittc2dzdHIgInBo4bulYyBo4buTaSBjw6J5IGzDoG0gdmnhu4djICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTkKK21zZ2lkICJpZ25vcmUgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiYuG7jyBxdWEgbmjhu69uZyB0aOG7qSBjaMawYSBow7JhIHRy4buZbjogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODIwCittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSIKK21zZ3N0ciAiZMO5bmcgY2jhur8gxJHhu5kgY2hlIHBo4bunIgorCisjOiBidWlsdGluL2NsZWFuLmM6MjgKK21zZ2lkICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPG3huqt1Pl0gWy14IHwgLVhdIFstLV0gPC9jw6FjL8SRxrDhu51uZy8iCisiZOG6q24+4oCmIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAixJBhbmcgZ+G7oSBi4buPICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMworIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiQ8OzIHRo4buDIGfhu6EgYuG7jyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICLEkGFuZyBi4buPIHF1YSBraG8gY2jhu6lhICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBza2lwIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAiTsOqbiBi4buPIHF1YSBraG8gY2jhu6lhICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgZ+G7oSBi4buPICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxzdGF0ICVzXG4iCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aMO0bmcgdGluIHRo4buRbmcga8OqIMSR4bqneSDEkeG7pyBj4bunYSAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbVxuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmdcbiIKK21zZ3N0ciAiIgorIlRy4bujIGdpw7pwIHbhu4Egbmjhuq9jOlxuIgorIjEgICAgICAgICAgLSBjaOG7jW4gbeG7mXQgbeG7pWMgxJHGsOG7o2MgxJHDoW5oIHPhu5FcbiIKKyJmb28gICAgICAgIC0gY2jhu41uIG3hu6VjIHRyw6puIGPGoSBz4bufIHRp4buBbiB04buRIGR1eSBuaOG6pXRcbiIKKyIgICAgICAgICAgIC0gKMSR4buDIHRy4buRbmcpIGtow7RuZyBjaOG7jW4gZ8OsIGPhuqNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIHNpbmdsZSBpdGVtXG4iCisiMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zXG4iCisiMi0zLDYtOSAgICAtIHNlbGVjdCBtdWx0aXBsZSByYW5nZXNcbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIi0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXNcbiIKKyIqICAgICAgICAgIC0gY2hvb3NlIGFsbCBpdGVtc1xuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmdcbiIKK21zZ3N0ciAiIgorIlRy4bujIGdpw7pwIHbhu4Egbmjhuq9jOlxuIgorIjEgICAgICAgICAgLSBjaOG7jW4gbeG7mXQgbeG7pWMgxJHGoW5cbiIKKyIzLTUgICAgICAgIC0gY2jhu41uIG3hu5l0IHbDuW5nXG4iCisiMi0zLDYtOSAgICAtIGNo4buNbiBuaGnhu4F1IHbDuW5nXG4iCisiZm9vICAgICAgICAtIGNo4buNbiBt4bulYyBk4buxYSB0csOqbiB0aeG7gW4gdOG7kSBkdXkgbmjhuqV0XG4iCisiLeKApiAgICAgICAgIC0ga2jDtG5nIGNo4buNbiBjw6FjIG3hu6VjIMSRw6MgY2jhu4kgcmFcbiIKKyIqICAgICAgICAgIC0gY2jhu41uIHThuqV0XG4iCisiICAgICAgICAgICAtICjEkeG7gyB0cuG7kW5nKSBr4bq/dCB0aMO6YyB2aeG7h2MgY2jhu41uXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTc1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT9cbiIKK21zZ3N0ciAiSOG6oyAoJXMpP1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIKK21zZ3N0ciAiTeG6q3UgxJHhu4MgbOG7jWMgY8OhYyB04bqtcCB0aW4gxJHhuqd1IHbDoG8gY+G6p24gbOG7nSDEkWk+PiAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogQ2Fubm90IGZpbmQgaXRlbXMgbWF0Y2hlZCBieTogJXMiCittc2dzdHIgIkPhuqJOSCBCw4FPOiBLaMO0bmcgdMOsbSB0aOG6pXkgY8OhYyBt4bulYyDEkcaw4bujYyBraOG7m3AgYuG7n2k6ICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzIxCittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAiQ2jhu41uIG3hu6VjIG114buRbiB4w7NhIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGtlZXAgW3kvTl0gYXMgaXMKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZlICVzIFt5L05dPyAiCittc2dzdHIgIljDs2EgYuG7jyDigJwlc+KAnSBbeS9OXT8gIgorCisjOiBidWlsdGluL2NsZWFuLmM6Nzk1Cittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gYuG6r3QgxJHhuqd1IGThu41uIGThurlwXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGxv4bqhaSB0cuG7qyBjw6FjIG3hu6VjIGto4buPaSB2aeG7h2MgeMOzYVxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBjaOG7jW4gY8OhYyBt4bulYyBj4bqnbiB4w7NhIGLhurFuZyBz4buRXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIHjDoWMgbmjhuq1uIHRyxrDhu5tjIG3hu5dpIGzhuqduIHjDs2EgKGdp4buRbmcgbmjGsCBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIGThu6tuZyB2aeG7h2MgZOG7jW4gZOG6uXAgbOG6oWlcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gaGnhu4NuIHRo4buLIGNow61uaCB0cuG7oyBnacO6cCBuw6B5XG4iCisiPyAgICAgICAgICAgICAgICAgICAtIHRy4bujIGdpw7pwIGTDoG5oIGNobyBjaOG7jW4gYuG6sW5nIGPDoWNoIG5o4bqvYyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzMQorbXNnaWQgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IgorbXNnaWRfcGx1cmFsICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiCittc2dzdHJbMF0gIkPDsyBtdeG7kW4gZ+G7oSBi4buPIChjw6FjKSBt4bulYyBzYXUgxJHDonkga2jDtG5nOiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg0NworbXNnaWQgIk5vIG1vcmUgZmlsZXMgdG8gY2xlYW4sIGV4aXRpbmcuIgorbXNnc3RyICJLaMO0bmcgY8OybiB04bqtcC10aW4gbsOgbyDEkeG7gyBk4buNbiBk4bq5cCwgxJFhbmcgdGhvw6F0IHJhLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwOQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICJraMO0bmcgaGnhu4NuIHRo4buLIHTDqm4gY+G7p2EgY8OhYyB04bqtcCB0aW4gxJHDoyBn4buhIGLhu48iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTEKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAiw6lwIGJ14buZYyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMgorbXNnaWQgImludGVyYWN0aXZlIGNsZWFuaW5nIgorbXNnc3RyICJk4buNbiBi4bqxbmcga2nhu4N1IHTGsMahbmcgdMOhYyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAiZ+G7oSBi4buPIHRvw6BuIGLhu5kgdGjGsCBt4bulYyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNSBidWlsdGluL2Rlc2NyaWJlLmM6NTYyIGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjQKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4OSBidWlsdGluL2xvZy5jOjE3NyBidWlsdGluL2xvZy5jOjE3OQorIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NyBidWlsdGluL25hbWUtcmV2LmM6NTI2IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjgKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJwYXR0ZXJuIgorbXNnc3RyICJt4bqrdSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNgorbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICJ0aMOqbSA8beG6q3U+IHbDoG8gdHJvbmcgcXVpIHThuq9jIGLhu48gcXVhIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE3Cittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAixJHhu5NuZyB0aOG7nWkgZ+G7oSBi4buPIGPhuqMgY8OhYyB04bqtcCB0aW4gYuG7iyBi4buPIHF1YSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxOQorbXNnaWQgInJlbW92ZSBvbmx5IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgImNo4buJIGfhu6EgYuG7jyBuaOG7r25nIHThuq1wIHRpbiBi4buLIGLhu48gcXVhIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTM3Cittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIteCB2w6AgLVgga2jDtG5nIHRo4buDIGTDuW5nIGPDuW5nIG5oYXUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDEKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgxJHGsOG7o2MgxJHhurd0IHRow6BuaCB0cnVlIHbDoCBraMO0bmcgxJHGsGEgcmEgdMO5eSBjaOG7jW4gLWksIC1uIG3DoCAiCisiY8Wpbmcga2jDtG5nIC1mOyB04burIGNo4buRaSBs4buHbmggZOG7jW4gZOG6uXAgKGNsZWFuKSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0NAorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIG3hurdjIMSR4buLbmggxJHGsOG7o2MgxJHhurd0IGzDoCB0cnVlIHbDoCBraMO0bmcgxJHGsGEgcmEgdMO5eSBjaOG7jW4gLWksIC1uICIKKyJtw6AgY8Wpbmcga2jDtG5nIC1mOyB04burIGNo4buRaSBs4buHbmggZOG7jW4gZOG6uXAgKGNsZWFuKSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ1Cittc2dpZCAiZ2l0IGNsb25lIFs8b3B0aW9ucz5dIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgImdpdCBjbG9uZSBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbLS1dIDxraG8+IFs8dC5t4bulYz5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAia2jDtG5nIHThuqFvIG3hu5l0IGNoZWNrb3V0IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQgYnVpbHRpbi9jbG9uZS5jOjk2IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4OQorbXNnaWQgImNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAidOG6oW8ga2hvIHRodeG6p24iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OAorbXNnaWQgImNyZWF0ZSBhIG1pcnJvciByZXBvc2l0b3J5IChpbXBsaWVzIGJhcmUpIgorbXNnc3RyICJ04bqhbyBraG8gYuG6o24gc2FvICjDvSBsw6Aga2hvIHRodeG6p24pIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwCittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIsSR4buDIG5ow6JuIGLhuqNuIHThu6sga2hvIG7hu5lpIGLhu5kiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDIKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAia2jDtG5nIHPhu60gZOG7pW5nIGxpw6puIGvhur90IGPhu6luZyBu4buZaSBi4buZLCBsdcO0biBzYW8gY2jDqXAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY8OgaSDEkeG6t3QgxJHDonkgbMOgIGtobyBjaGlhIHPhursiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJwYXRoc3BlYyIKK21zZ3N0ciAixJHhurdjLXThuqMtxJHGsOG7nW5nLWThuqtuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIKK21zZ3N0ciAia2jhu59pIHThuqFvIG3DtC3EkXVuLWNvbiB0cm9uZyBi4bqjbiBzYW8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgInPhu5EgbMaw4bujbmcgbcO0LcSRdW4tY29uIMSRxrDhu6NjIG5ow6JuIGLhuqNuIMSR4buTbmcgdGjhu51pIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTExIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NgorbXNnaWQgInRlbXBsYXRlLWRpcmVjdG9yeSIKK21zZ3N0ciAidGjGsC1t4bulYy1t4bqrdSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMiBidWlsdGluL2luaXQtZGIuYzo0ODcKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICJ0aMawIG3hu6VjIG3DoCB04bqhaSDEkcOzIGPDoWMgbeG6q3Ugc+G6vSDEkcaw4bujYyBkw7luZyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNCBidWlsdGluL2Nsb25lLmM6MTE2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA3CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMgorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICJraG8gdGhhbSBjaGnhur91IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxNAorbXNnaWQgInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciCittc2dzdHIgImNo4buJIGTDuW5nIC0tcmVmZXJlbmNlIGtoaSBuaMOibiBi4bqjbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOSBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ2CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDEgYnVpbHRpbi9yZXBhY2suYzozMjcKK21zZ2lkICJuYW1lIgorbXNnc3RyICJ0w6puIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIwCittc2dpZCAidXNlIDxuYW1lPiBpbnN0ZWFkIG9mICdvcmlnaW4nIHRvIHRyYWNrIHVwc3RyZWFtIgorbXNnc3RyICJkw7luZyA8dMOqbj4gdGhheSBjaG8g4oCcb3JpZ2lu4oCdIMSR4buDIHRoZW8gZMO1aSB0aMaw4bujbmcgbmd14buTbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMgorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgImzhuqV5IHJhIDxuaMOhbmg+IHRoYXkgY2hvIEhFQUQgY+G7p2EgbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNAorbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDEkeG6v24gZ2l0LXVwbG9hZC1wYWNrIHRyw6puIG3DoXkgY2jhu6ciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjUgYnVpbHRpbi9mZXRjaC5jOjE2OCBidWlsdGluL2dyZXAuYzo4MjgKKyM6IGJ1aWx0aW4vcHVsbC5jOjIwNworbXNnaWQgImRlcHRoIgorbXNnc3RyICLEkeG7mS1zw6J1IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI2Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICJ04bqhbyBi4bqjbiBzYW8ga2jDtG5nIMSR4bqneSDEkeG7pyBjaG8gbeG7qWMgc8OidSDEkcOjIGNobyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNyBidWlsdGluL2ZldGNoLmM6MTcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzMAorbXNnaWQgInRpbWUiCittc2dzdHIgInRo4budaS1naWFuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgInThuqFvIGLhuqNuIHNhbyBraMO0bmcgxJHhuqd5IMSR4bunIHThu6sgdGjhu51pIMSRaeG7g20gxJHDoyBjaG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjkgYnVpbHRpbi9mZXRjaC5jOjE3MiBidWlsdGluL2ZldGNoLmM6MTk1CisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODAKK21zZ2lkICJyZXZpc2lvbiIKK21zZ3N0ciAixJFp4buDbSB4w6l0IGR1eeG7h3QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzAgYnVpbHRpbi9mZXRjaC5jOjE3MworbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUsIGV4Y2x1ZGluZyByZXYiCittc2dzdHIgImzDoG0gc8OidSBoxqFuIGzhu4tjaCBz4butIGPhu6dhIGLhuqNuIHNhbyBzaGFsbG93LCBi4bqxbmcgxJFp4buDbSB4w6l0IGR1eeG7h3QgbG/huqFpIHRy4burIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDE5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyOAorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAiY2jhu4kgbmjDom4gYuG6o24gbeG7mXQgbmjDoW5oLCBIRUFEIGhv4bq3YyAtLWJyYW5jaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNAorbXNnaWQgImRvbid0IGNsb25lIGFueSB0YWdzLCBhbmQgbWFrZSBsYXRlciBmZXRjaGVzIG5vdCB0byBmb2xsb3cgdGhlbSIKK21zZ3N0ciAiIgorIsSR4bupbmcgY8OzIG5ow6JuIGLhuqNuIGLhuqV0IGvhu7MgbmjDoW5oIG7DoG8sIHbDoCBsw6BtIGNobyBuaOG7r25nIGzhuqduIGzhuqV5IHbhu4Egc2F1IGtow7RuZyAiCisidGhlbyBjaMO6bmcgbuG7r2EiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzYKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCBiZSBzaGFsbG93IgorbXNnc3RyICJt4buNaSBtw7QtxJF1bi1jb24gbmjDom4gYuG6o24gc+G6vSBsw6Agc2hhbGxvdyAobsO0bmcpIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiZ2l0ZGlyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM4IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NgorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgImtow7RuZyBkw7luZyBjaHVuZyB0aMawIG3hu6VjIGTDoG5oIHJpw6puZyBjaG8gZ2l0IHbDoCB0aMawIG3hu6VjIGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM5Cittc2dpZCAia2V5PXZhbHVlIgorbXNnc3RyICJraMOzYT1nacOhX3Ry4buLIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQwCittc2dpZCAic2V0IGNvbmZpZyBpbnNpZGUgdGhlIG5ldyByZXBvc2l0b3J5IgorbXNnc3RyICLEkeG6t3QgY+G6pXUgaMOsbmggYsOqbiB0cm9uZyBt4buZdCBraG8gY2jhu6lhIG3hu5tpIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQyIGJ1aWx0aW4vZmV0Y2guYzoxOTAgYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorIzogYnVpbHRpbi9wdXNoLmM6NTczIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTcyCittc2dpZCAic2VydmVyLXNwZWNpZmljIgorbXNnc3RyICLEkeG6t2MtdOG6oy1tw6F5LXBo4bulYy124bulIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQyIGJ1aWx0aW4vZmV0Y2guYzoxOTAgYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorIzogYnVpbHRpbi9wdXNoLmM6NTczIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTczCittc2dpZCAib3B0aW9uIHRvIHRyYW5zbWl0IgorbXNnc3RyICJ0w7l5IGNo4buNbiDEkeG7gyBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQzIGJ1aWx0aW4vZmV0Y2guYzoxOTEgYnVpbHRpbi9wdWxsLmM6MjIwCisjOiBidWlsdGluL3B1c2guYzo1NzQKK21zZ2lkICJ1c2UgSVB2NCBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAiY2jhu4kgZMO5bmcgxJHhu4thIGNo4buJIElQdjQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDUgYnVpbHRpbi9mZXRjaC5jOjE5MyBidWlsdGluL3B1bGwuYzoyMjMKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3NgorbXNnaWQgInVzZSBJUHY2IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICJjaOG7iSBkw7luZyDEkeG7i2EgY2jhu4kgSVB2NiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0OQorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIHVzZSB0aGVpciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJt4buNaSBtw7QtxJF1bi1jb24gbmjDom4gYuG6o24gc+G6vSBkdW5nIG5ow6FuaCB0aGVvIGTDtWkgbcOheSBjaOG7pyBj4bunYSBjaMO6bmciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNTEKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCBmaWxlIHRvIGluY2x1ZGUgb25seSBmaWxlcyBhdCByb290IgorbXNnc3RyICJraOG7n2kgdOG6oW8gdOG6rXAgdGluIHNwYXJzZS1jaGVja291dCDEkeG7gyBiYW8gZ+G7k20gY2jhu4kgY8OhYyB04bqtcCB0aW4g4bufIGfhu5FjIgorCisjOiBidWlsdGluL2Nsb25lLmM6Mjg3Cittc2dpZCAiIgorIk5vIGRpcmVjdG9yeSBuYW1lIGNvdWxkIGJlIGd1ZXNzZWQuXG4iCisiUGxlYXNlIHNwZWNpZnkgYSBkaXJlY3Rvcnkgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiIgorIktow7RuZyDEkW/DoW4gxJHGsOG7o2MgdGjGsCBt4bulYyB0w6puIGzDoCBnw6wuXG4iCisiVnVpIGzDsm5nIGNo4buJIMSR4buLbmggdMOqbiBt4buZdCB0aMawIG3hu6VjIHRyw6puIGTDsm5nIGzhu4duaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZvOiBDb3VsZCBub3QgYWRkIGFsdGVybmF0ZSBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAidGjDtG5nIHRpbjoga2jDtG5nIHRo4buDIHRow6ptIHRoYXkgdGjhur8gY2hvIOKAnCVz4oCdOiAlc1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIlcyBjw7MgdOG7k24gdOG6oWkgbmjGsG5nIGzhuqFpIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IHRoxrAgbeG7pWMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXJ0IGl0ZXJhdG9yIG92ZXIgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGLhuq90IMSR4bqndSBs4bq3cCBxdWEg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB04bqhbyDEkcaw4bujYyBsacOqbiBr4bq/dCBt4buBbSAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBzYW8gY2jDqXAgdOG6rXAgdGluIHbDoCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gaXRlcmF0ZSBvdmVyICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBs4bq3cCBxdWEg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAiaG/DoG4gdOG6pXQuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1MDgKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB3aXRoICdnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEIDovJ1xuIgorbXNnc3RyICIiCisiVmnhu4djIG5ow6JuIGLhuqNuIHRow6BuaCBjw7RuZywgbmjGsG5nIGNoZWNrb3V0IGfhurdwIGzhu5dpLlxuIgorIkLhuqFuIGtp4buDbSB0cmEga+G7uSB4ZW0gY8OhaSBnw6wgxJHGsOG7o2MgbOG6pXkgcmEgYuG6sW5nIGzhu4duaCDigJxnaXQgc3RhdHVz4oCdXG4iCisidsOgIHRo4butIGzhuqV5IHJhIHbhu5tpIGzhu4duaCAnZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LydcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IG5ow6FuaCBtw6F5IGNo4bunICVzIMSR4buDIG5ow6JuIGLhuqNuIChjbG9uZSkuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NTMKK21zZ2lkICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBraOG7n2kgdOG6oW8gc3BhcnNlLWNoZWNrb3V0IgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzc2Cittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICJyZWZlcnMgSEVBRCBtw6F5IGNo4bunICBjaOG7iSDEkeG6v24gcmVmIGtow7RuZyB04buTbiB04bqhaSwga2jDtG5nIHRo4buDIGzhuqV5IHJhLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODA3Cittc2dpZCAidW5hYmxlIHRvIGNoZWNrb3V0IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHJhIChjaGVja291dCkgY8OieSBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIGPDoWMgdGhhbSBz4buRIHbDoG8gdOG6rXAgdGluIGPhuqV1IGjDrG5oIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTI1Cittc2dpZCAiY2Fubm90IHJlcGFjayB0byBjbGVhbiB1cCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSRw7NuZyBnw7NpIMSR4buDIGThu41uIGThurlwIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTI3Cittc2dpZCAiY2Fubm90IHVubGluayB0ZW1wb3JhcnkgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgYuG7jyBsacOqbiBr4bq/dCB04bqtcCB0aW4gdGhheSB0aOG6vyB04bqhbSB0aOG7nWkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjUgYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTUwCittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzLiIKK21zZ3N0ciAiQ8OzIHF1w6Egbmhp4buBdSDEkeG7kWkgc+G7kS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjkKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIkLhuqFuIHBo4bqjaSBjaOG7iSDEkeG7i25oIG3hu5l0IGtobyDEkeG7gyBtw6AgbmjDom4gYuG6o24gKGNsb25lKS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJ0w7l5IGNo4buNbiAtLWJhcmUgdsOgIC0tb3JpZ2luICVzIHh1bmcga2jhuq9jIG5oYXUuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTg1Cittc2dpZCAiLS1iYXJlIGFuZCAtLXNlcGFyYXRlLWdpdC1kaXIgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgInTDuXkgY2jhu41uIC0tYmFyZSB2w6AgLS1zZXBhcmF0ZS1naXQtZGlyIHh1bmcga2jhuq9jIG5oYXUuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAia2hvIGNo4bupYSDigJwlc+KAnSBjaMawYSB04buTbiB04bqhaSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMDQgYnVpbHRpbi9mZXRjaC5jOjE3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVwdGggJXMgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICLEkeG7mSBzw6J1ICVzIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IHPhu5Egbmd1ecOqbiBkxrDGoW5nIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAxNAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gxJHDrWNoIOKAnCVz4oCdIMSRw6MgY8OzIHThu6sgdHLGsOG7m2MgdsOgIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IHRoxrAgbeG7pWMgcuG7l25nLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJjw6J5IGzDoG0gdmnhu4djIOKAnCVz4oCdIMSRw6Mgc+G6tW4gdOG7k24gdOG6oWkgcuG7k2kuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAzOSBidWlsdGluL2Nsb25lLmM6MTA2MCBidWlsdGluL2RpZmZ0b29sLmM6MjcxCisjOiBidWlsdGluL2xvZy5jOjE4NjYgYnVpbHRpbi93b3JrdHJlZS5jOjI5NSBidWlsdGluL3dvcmt0cmVlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gY8OhYyB0aMawIG3hu6VjIGThuqtuIMSR4bqndSBj4bunYSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyBjw6J5IHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgZGlyIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAixJBhbmcgbmjDom4gYuG6o24gdGjDoG5oIGtobyBjaOG7qWEgYmFyZSDigJwlc+KAneKAplxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICLEkGFuZyBuaMOibiBi4bqjbiB0aMOgbmgg4oCcJXPigJ3igKZcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwOTAKK21zZ2lkICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBib3RoIC0tcmVmZXJlbmNlIGFuZCAtLXJlZmVyZW5jZS1pZi0iCisiYWJsZSIKK21zZ3N0ciAiIgorIm5ow6JuIGLhuqNuIC0tcmVjdXJzaXZlIGtow7RuZyB0xrDGoW5nIHRow61jaCB24bubaSBj4bqjIGhhaSAtLXJlZmVyZW5jZSB2w6AgLS1yZWZlcmVuY2UtIgorImlmLWFibGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU0Cittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tZGVwdGggYuG7iyBs4budIMSRaSBraGkgbmjDom4gYuG6o24gbuG7mWkgYuG7mTsgaMOjeSBz4butIGThu6VuZyBmaWxlOi8vIMSR4buDIHRoYXkgdGjhur8uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1NgorbXNnaWQgIi0tc2hhbGxvdy1zaW5jZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLXNoYWxsb3ctc2luY2UgYuG7iyBs4budIMSRaSBraGkgbmjDom4gYuG6o24gbuG7mWkgYuG7mTsgaMOjeSBz4butIGThu6VuZyBmaWxlOi8vIMSR4buDIHRoYXkgIgorInRo4bq/LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTgKK21zZ2lkICItLXNoYWxsb3ctZXhjbHVkZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLXNoYWxsb3ctZXhjbHVkZSBi4buLIGzhu50gxJFpIGtoaSBuaMOibiBi4bqjbiBu4buZaSBi4buZOyBow6N5IHPhu60gZOG7pW5nIGZpbGU6Ly8gxJHhu4MgdGhheSAiCisidGjhur8uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2MAorbXNnaWQgIi0tZmlsdGVyIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tZmlsdGVyIGLhu4sgbOG7nSDEkWkga2hpIG5ow6JuIGLhuqNuIG7hu5lpIGLhu5k7IGjDo3kgc+G7rSBk4bulbmcgZmlsZTovLyDEkeG7gyB0aGF5IHRo4bq/LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjMKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICJraG8gbmd14buTbiBsw6AgbsO0bmcsIG7Dqm4gYuG7jyBxdWEgLS1sb2NhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjgKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwgYuG7iyBs4budIMSRaSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNDMgYnVpbHRpbi9jbG9uZS5jOjEyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIk5ow6FuaCBtw6F5IGNo4bunICVzIGtow7RuZyB0w6xtIHRo4bqleSB0cm9uZyB0aMaw4bujbmcgbmd14buTbiAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNTQKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJC4bqhbiBow6xuaCBuaMawIGzDoCDEkcOjIG5ow6JuIGLhuqNuIG3hu5l0IGtobyB0cuG7kW5nIHLhu5duZy4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MTAKK21zZ2lkICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29sdW1uIFs8Y8OhYyB0w7l5IGNo4buNbj5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICJ0w6xtIGtp4bq/bSBiaeG6v24gY+G6pXUgaMOsbmgiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgImLhu5EgY+G7pWMgxJHhu4MgZMO5bmciCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJNYXhpbXVtIHdpZHRoIgorbXNnc3RyICLEkOG7mSBy4buZbmcgdOG7kWkgxJFhIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMxCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIKK21zZ3N0ciAiQ2jDqG4gdGjDqm0ga2hv4bqjbmcgdHLhu5FuZyB2w6BvIGLDqm4gdHLDoWkiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIHJpZ2h0IGJvcmRlciIKK21zZ3N0ciAiQ2jDqG4gdGjDqm0ga2hv4bqjbmcgdHLhuq9uZyB2w6BvIGLDqm4gcGjhuqNpIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMzCittc2dpZCAiUGFkZGluZyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMiCittc2dzdHIgIkNow6huIHRow6ptIGtob+G6o25nIHRy4bqvbmcgZ2nhu69hIGPDoWMgY+G7mXQiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgIi0tY29tbWFuZCBwaOG6o2kgbMOgIMSR4buRaSBz4buRIMSR4bqndSB0acOqbiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjE4Cittc2dpZCAiIgorImdpdCBjb21taXQtdHJlZSBbKC1wIDxwYXJlbnQ+KS4uLl0gWy1TWzxrZXlpZD5dXSBbKC1tIDxtZXNzYWdlPikuLi5dIFsoLUYgIgorIjxmaWxlPikuLi5dIDx0cmVlPiIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtdHJlZSBbKC1wIDxjaGE+KeKApl0gWy1TWzxrZXlpZD5dXSBbKC1tIDxnaGkgY2jDuj4p4oCmXSBbKC1GIDx04bqtcCB0aW4+KSIKKyLigKZdIDxjw6J5PiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBwYXJlbnQgJXMgaWdub3JlZCIKK21zZ3N0ciAiY2hhIG3hurkgYuG7iyB0csO5bmcgbOG6t3AgJXMgxJHDoyBi4buLIGLhu48gcXVhIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6NTYgYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzNiBidWlsdGluL2xvZy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAia2jDtG5nIHBo4bqjaSBsw6AgdMOqbiDEkeG7kWkgdMaw4bujbmcgaOG7o3AgbOG7hyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjkzCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBn4bq3cCBs4buXaSBraGkgbeG7nyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBn4bq3cCBs4buXaSBraGkgxJHhu41jIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gY2xvc2UgJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBn4bq3cCBs4buXaSBraGkgxJHDs25nIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICJjaGEtbeG6uSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExMgorbXNnaWQgImlkIG9mIGEgcGFyZW50IGNvbW1pdCBvYmplY3QiCittc2dzdHIgIm3DoyBz4buRIGPhu6dhIMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIGNoYSBt4bq5IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE0IGJ1aWx0aW4vY29tbWl0LmM6MTUwMSBidWlsdGluL21lcmdlLmM6MjcxCisjOiBidWlsdGluL25vdGVzLmM6NDA5IGJ1aWx0aW4vbm90ZXMuYzo1NzUgYnVpbHRpbi9zdGFzaC5jOjE0NzcKKyM6IGJ1aWx0aW4vdGFnLmM6NDEyCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAiY2jDuiB0aMOtY2giCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTUgYnVpbHRpbi9jb21taXQuYzoxNTAxCittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImNow7ogdGjDrWNoIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTgKK21zZ2lkICJyZWFkIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgIsSR4buNYyBjaMO6IHRow61jaCBuaOG6rXQga8O9IGzhuqduIGNodXnhu4NuIGdpYW8gdOG7qyB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMjEgYnVpbHRpbi9jb21taXQuYzoxNTEzIGJ1aWx0aW4vbWVyZ2UuYzoyODgKKyM6IGJ1aWx0aW4vcHVsbC5jOjE3NSBidWlsdGluL3JldmVydC5jOjExOAorbXNnaWQgIkdQRyBzaWduIGNvbW1pdCIKK21zZ3N0ciAiS8O9IGzhuqduIGNodXnhu4NuIGdpYW8gZMO5bmcgR1BHIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTMzCittc2dpZCAibXVzdCBnaXZlIGV4YWN0bHkgb25lIHRyZWUiCittc2dzdHIgInBo4bqjaSDEkcawYSByYSBjaMOtbmggeMOhYyBt4buZdCBjw6J5IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTQwCittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBn4bq3cCBs4buXaSBraGkgxJHhu41jIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQxCittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzxjw6FjIHTDuXkgY2jhu41uPl0gWy0tXSA8cGF0aHNwZWM+4oCmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2Cittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBzdGF0dXMgWzxjw6FjIHTDuXkgY2jhu41uPl0gWy0tXSA8cGF0aHNwZWM+4oCmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUxCittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisiQuG6oW4gxJHDoyB5w6p1IGPhuqd1IGFtZW5kICjigJx0dSBi4buV4oCdKSBwaOG6p24gbOG7m24gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGfhuqduIMSRw6J5LCBuaMawbmcgIgorImzDoG0gbmjGsCB0aOG6v1xuIgorImPDsyB0aOG7gyBsw6BtIGNobyBuw7MgdHLhu58gbsOqbiB0cuG7kW5nIHLhu5duZy4gQuG6oW4gY8OzIHRo4buDIGzhurdwIGzhuqFpIGzhu4duaCBj4bunYSBtw6xuaCBi4bqxbmcgIgorIi0tYWxsb3ctZW1wdHksXG4iCisiaG/hurdjIGzDoCBi4bqhbiBn4buhIGLhu48gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIG3hu5l0IGPDoWNoIGhvw6BuIHRvw6BuIGLhurFuZyBs4buHbmg6XG4iCisiXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisiTOG6p24gY2hlcnJ5LXBpY2sgdHLGsOG7m2MgaGnhu4duIG5heSB0cuG7kW5nIHLhu5duZywgY8OzIGzhur0gbMOgIGLhu59pIHbDrCBz4buxIHBow6JuIGdp4bqjaSB4dW5nICIKKyLEkeG7mXQuXG4iCisiTuG6v3UgYuG6oW4gduG6q24gbXXhu5FuIGNodXnhu4NuIGdpYW8gbsOzIGNobyBkw7kgdGjhur8gbsOgbyDEkWkgbuG7r2EsIGjDo3kgZMO5bmc6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzCittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgY2hlcnJ5LXBpY2sgLS1za2lwJ1xuIgorbXNnc3RyICJO4bq/dSBraMO0bmcgxJHGsOG7o2MgdGjDrCBkw7luZyBs4buHbmggXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NgorbXNnaWQgIiIKKyJhbmQgdGhlbiB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCisiXG4iCisidG8gcmVzdW1lIGNoZXJyeS1waWNraW5nIHRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLXNraXBcbiIKKyJcbiIKK21zZ3N0ciAiIgorInbDoCBzYXUgxJHDsyBkw7luZzpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcbiIKKyJcbiIKKyLEkeG7gyBs4bqhaSB0aeG6v3AgdOG7pWMgY2hlcnJ5LXBpY2tpbmcgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGPDsm4gbOG6oWkuXG4iCisiTuG6v3UgYuG6oW4gbXXhu5FuIGLhu48gcXVhIGzhuqduIGNodXnhu4NuIGdpYW8gbsOgeSB0aMOsIGTDuW5nOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzE1Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdGjDoW8gZOG7oSBIRUFEIMSR4buRaSB0xrDhu6NuZyBjw6J5IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgduG7m2kgLWEgbMOgIGtow7RuZyBjw7Mgw70gbmdoxKlhIGfDrCIKKworIzogYnVpbHRpbi9jb21taXQuYzozNjQKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIktow7RuZyDEkcaw4budbmcgZOG6q24gduG7m2kgY8OhYyB0w7l5IGNo4buNbiAtLWluY2x1ZGUvLS1vbmx5IGtow7RuZyBo4bujcCBsw70uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM3NgorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gYuG6o25nIG3hu6VjIGzhu6VjIHThuqFtIHRo4budaSIKKworIzogYnVpbHRpbi9jb21taXQuYzozODUKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdGjDqm0gYuG6sW5nIGPDoWNoIHTGsMahbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDAwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgImtow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgYuG6o25nIG3hu6VjIGzhu6VjIHThuqFtIHRo4budaSIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MDIKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGPhuq1wIG5o4bqtdCBjw6J5IGLhu5kgbmjhu5sgxJHhu4dtIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQyNyBidWlsdGluL2NvbW1pdC5jOjQ1MCBidWlsdGluL2NvbW1pdC5jOjQ5NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSB04bqtcCB0aW4gbMawdSBi4bqjbmcgbeG7pWMgbOG7pWMgbeG7m2kgKG5ld19pbmRleCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc5Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gdmnhu4djIGNodXnhu4NuIGdpYW8gY+G7pWMgYuG7mSB0cm9uZyBraGkgxJFhbmcgxJHGsOG7o2MgaMOyYSB0cuG7mW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4MQorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIHZp4buHYyBjaHV54buDbiBnaWFvIGLhu5kgcGjhuq1uIHRyb25nIGtoaSDEkWFuZyBjaGVycnktcGljay4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDg5Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJraMO0bmcgxJHhu41jIMSRxrDhu6NjIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MDgKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgdOG6rXAgdGluIGzGsHUgYuG6o25nIG3hu6VjIGzhu6VjIHThuqFtIHRo4budaSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgbGFja3MgYXV0aG9yIGhlYWRlciIKK21zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnSB0aGnhur91IHBo4bqnbiB0w6FjIGdp4bqjIOG7nyDEkeG6p3UiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGhhcyBtYWxmb3JtZWQgYXV0aG9yIGxpbmUiCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8g4oCcJXPigJ0gY8OzIHBo4bqnbiB0w6FjIGdp4bqjIOG7nyDEkeG6p3UgZOG7iyBk4bqhbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjI3Cittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAixJHhu5FpIHPhu5EgY2hvIC0tYXV0aG9yIGLhu4sgZOG7iyBow6xuaCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2ODAKK21zZ2lkICIiCisidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKyJpbiB0aGUgY3VycmVudCBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyBjaOG7jW4gbeG7mXQga8O9IHThu7EgZ2hpIGNow7ogY8OhaSBtw6Aga2jDtG5nIMSRxrDhu6NjIGTDuW5nXG4iCisidHJvbmcgcGjhuqduIGdoaSBjaMO6IGhp4buHbiB04bqhaSIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MTggYnVpbHRpbi9jb21taXQuYzo3NTEgYnVpbHRpbi9jb21taXQuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdMOsbSBraeG6v20gY29tbWl0IChs4bqnbiBjaHV54buDbiBnaWFvKSAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzAgYnVpbHRpbi9zaG9ydGxvZy5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIoxJFhbmcgxJHhu41jIHRow7RuZyDEkWnhu4dwIG5o4bqtdCBrw70gdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluKVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMgorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIG5o4bqtdCBrw70gdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgxJHhu41jIMSRxrDhu6NjIHThu4dwIG5o4bqtdCBrw70g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzY3IGJ1aWx0aW4vY29tbWl0LmM6NzgzCittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc3NAorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBNRVJHRV9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODM0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSBt4bqrdSBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1MworIywgYy1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCi0iKiBVbnRyYWNrZWQgZmlsZSBjbGlwcGVkIGhlcmUgYnkgJXMuXG4iCi0iKiBUbyBzZWUgdGhlIGVudGlyZSBmaWxlLCB1c2UgYW4gZXh0ZXJuYWwgZWRpdG9yLlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgogbXNnc3RyICIiCiAiXG4iCi0iKiBU4bqtcCB0aW4gY2jGsGEgdGhlbyBkw7VpIMSRxrDhu6NjIGPhuq90IHThuqFpIMSRw6J5IGLhu59pICVzLlxuIgotIiogxJDhu4MgeGVtIHRvw6BuIGLhu5kgdOG6rXAgdGluLCBow6N5IGTDuW5nIOG7qW5nIGThu6VuZyBiacOqbiBzb+G6oW4gYsOqbiBuZ2/DoGkuXG4iCisiTsOzIHRyw7RuZyBnaeG7kW5nIHbhu5tpIHZp4buHYyBi4bqhbiDEkWFuZyBjaHV54buDbiBnaWFvIG3hu5l0IGzhuqduIGjDsmEgdHLhu5luLlxuIgorIk7hur91IGtow7RuZyBwaOG6o2kgduG6rXksIHhpbiBow6N5IGfhu6EgYuG7jyB04bqtcCB0aW5cbiIKKyJcdCVzXG4iCisidsOgIHRo4butIGzhuqFpLlxuIgogCi0jOiBsaWIvZGlmZi50Y2w6NTYwCi1tc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBi4buPIHJhIGto4buPaSBi4buHIHBow7NuZyBraOG7kWkgxJHDoyBjaOG7jW4iCisjOiBidWlsdGluL2NvbW1pdC5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOw7MgdHLDtG5nIGdp4buRbmcgduG7m2kgdmnhu4djIGLhuqFuIMSRYW5nIGNodXnhu4NuIGdpYW8gbeG7mXQgbOG6p24gY2hlcnJ5LXBpY2suXG4iCisiTuG6v3Uga2jDtG5nIHBo4bqjaSB24bqteSwgeGluIGjDo3kgZ+G7oSBi4buPIHThuq1wIHRpblxuIgorIlx0JXNcbiIKKyJ2w6AgdGjhu60gbOG6oWkuXG4iCiAKLSM6IGxpYi9kaWZmLnRjbDo1NjcKLW1zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkcawYSBsw6puIGLhu4cgcGjDs25nIGto4buRaSDEkcOjIGNo4buNbiIKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJIw6N5IG5o4bqtcCB2w6BvIGPDoWMgdGjDtG5nIHRpbiDEkeG7gyBnaeG6o2kgdGjDrWNoIGPDoWMgdGhheSDEkeG7lWkgY+G7p2EgYuG6oW4uIE5o4buvbmcgZMOybmcgIgorIsSRxrDhu6NjXG4iCisiYuG6r3QgxJHhuqd1IGLhurFuZyDigJwlY+KAnSBz4bq9IMSRxrDhu6NjIGLhu48gcXVhLCBu4bq/dSBwaOG6p24gY2jDuiB0aMOtY2ggcuG7l25nIHPhur0gaOG7p3kgYuG7jyBs4bqnbiAiCisiY2h1eeG7g24gZ2lhby5cbiIKIAotIzogbGliL2RpZmYudGNsOjY0NgotbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGxpbmUuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgYuG7jyByYSBraOG7j2kgYuG7hyBwaMOzbmcgZMOybmcgxJHDoyBjaOG7jW4iCisjOiBidWlsdGluL2NvbW1pdC5jOjg3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkjDo3kgbmjhuq1wIHbDoG8gY8OhYyB0aMO0bmcgdGluIMSR4buDIGdp4bqjaSB0aMOtY2ggY8OhYyB0aGF5IMSR4buVaSBj4bunYSBi4bqhbi4gTmjhu69uZyBkw7JuZyAiCisixJHGsOG7o2NcbiIKKyJi4bqvdCDEkeG6p3UgYuG6sW5nIOKAnCVj4oCdIHPhur0gxJHGsOG7o2MgYuG7jyBxdWE7IGLhuqFuIGPDsyB0aOG7gyB4w7NhIGNow7puZyDEkWkgbuG6v3UgbXXhu5FuIHRo4bq/LlxuIgorIlBo4bqnbiBjaMO6IHRow61jaCBuw6B5IG7hur91IHRy4buRbmcgcuG7l25nIHPhur0gaOG7p3kgYuG7jyBs4bqnbiBjaHV54buDbiBnaWFvLlxuIgogCi0jOiBsaWIvZGlmZi50Y2w6NjU0Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHGsGEgbMOqbiBi4buHIHBow7NuZyBkw7JuZyDEkcOjIGNo4buNbiIKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXNUw6FjIGdp4bqjOiAgICAgICAgICAgJS4qcyA8JS4qcz4iCiAKLSM6IGxpYi9lbmNvZGluZy50Y2w6NDQzCi1tc2dpZCAiRGVmYXVsdCIKLW1zZ3N0ciAiTeG6t2MgxJHhu4tuaCIKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXNOZ8OgeSB0aMOhbmc6ICAgICAgICAlcyIKIAotIzogbGliL2VuY29kaW5nLnRjbDo0NDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTeXN0ZW0gKCVzKSIKLW1zZ3N0ciAiSOG7hyB0aOG7kW5nICglcykiCisjOiBidWlsdGluL2NvbW1pdC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzTmfGsOG7nWkgY2h1eeG7g24gZ2lhbzogJS4qcyA8JS4qcz4iCiAKLSM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1CisjOiBidWlsdGluL2NvbW1pdC5jOjkyOQorbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICJLaMO0bmcgxJHhu41jIMSRxrDhu6NjIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9jb21taXQuYzo5OTcKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHjDonkgZOG7sW5nIGPDonkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAxMSBidWlsdGluL3RhZy5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIlhpbiBow6N5IGN1bmcgY+G6pXAgbOG7nWkgY2jDuiBnaeG6o2kgaG/hurdjIGzDoCBkw7luZyB0w7l5IGNo4buNbiAtbSBob+G6t2MgbMOgIC1GLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1hdXRob3IgJyVzJyBpcyBub3QgJ05hbWUgPGVtYWlsPicgYW5kIG1hdGNoZXMgbm8gZXhpc3RpbmcgYXV0aG9yIgorbXNnc3RyICIiCisiLS1hdXRob3Ig4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBsw6Ag4oCcSOG7jSB2w6AgdMOqbiA8dGjGsCDEkWnhu4duIHThu61sPuKAnSB2w6Aga2jDtG5nIGto4bubcCBi4bqldCBr4buzICIKKyJ0w6FjIGdp4bqjIG7DoG8gc+G6tW4gY8OzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpZ25vcmVkIG1vZGUgJyVzJyIKK21zZ3N0ciAiQ2jhur8gxJHhu5kgYuG7jyBxdWEga2jDtG5nIGjhu6NwIGzhu4cg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA4NyBidWlsdGluL2NvbW1pdC5jOjEzMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICJDaOG6vyDEkeG7mSBjaG8gY8OhYyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIGtow7RuZyBo4bujcCBs4buHIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMjcKK21zZ2lkICItLWxvbmcgYW5kIC16IGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgImhhaSB0w7l5IGNo4buNbiAtbG9uZyB2w6AgLXoga2jDtG5nIHTGsMahbmcgdGjDrWNoIHbhu5tpIG5oYXUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3MQorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIlPhu60gZOG7pW5nIGPhuqMgaGFpIHTDuXkgY2jhu41uIC0tcmVzZXQtYXV0aG9yIHbDoCAtLWF1dGhvciBraMO0bmcgaOG7o3AgbMO9IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODAKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBnw6wgxJHhu4MgbcOgIOKAnHR1IGLhu5XigJ0gY+G6oy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MworbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIiIKKyJC4bqhbiDEkWFuZyDhu58gZ2nhu69hIGPhu6dhIHF1w6EgdHLDrG5oIGjDsmEgdHLhu5luIC0tIGtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIHZp4buHYyDigJx0dSBi4buV4oCdLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTg1Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hlcnJ5LXBpY2sgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiIgorIkLhuqFuIMSRYW5nIOG7nyBnaeG7r2EgY+G7p2EgcXXDoSB0csOsbmggY2hlcnJ5LXBpY2sgLS0ga2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gdmnhu4djIOKAnHR1ICIKKyJi4buV4oCdLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTg4Cittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiAtLXNxdWFzaCB2w6AgLS1maXh1cCBraMO0bmcgdGjhu4Mgc+G7rSBk4bulbmcgY8O5bmcgduG7m2kgbmhhdSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk4Cittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIkNo4buJIMSRxrDhu6NjIGTDuW5nIG3hu5l0IHRyb25nIHPhu5EgdMO5eSBjaOG7jW4gdHJvbmcgc+G7kSAtYy8tQy8tRi8tLWZpeHVwLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjAwCittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLiIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gLW0ga2jDtG5nIHRo4buDIMSRxrDhu6NjIHThu5UgaOG7o3AgY8O5bmcgduG7m2kgLWMvLUMvLUYuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDgKK21zZ2lkICItLXJlc2V0LWF1dGhvciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggLUMsIC1jIG9yIC0tYW1lbmQuIgorbXNnc3RyICIiCisiLS1yZXNldC1hdXRob3IgY2jhu4kgY8OzIHRo4buDIMSRxrDhu6NjIHPhu60gZOG7pW5nIHbhu5tpIHTDuXkgY2jhu41uIC1DLCAtYyBoYXkgLS1hbWVuZC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyNQorbXNnaWQgIk9ubHkgb25lIG9mIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiIgorIkNo4buJIG3hu5l0IHRyb25nIGPDoWMgdMO5eSBjaOG7jW4gLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggxJHGsOG7o2MgIgorInPhu60gZOG7pW5nLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzICclcyAuLi4nIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiY8OhYyDEkcaw4budbmcgZOG6q24g4oCcJXMg4oCm4oCdIHbhu5tpIHTDuXkgY2jhu41uIC1hIGtow7RuZyBo4bujcCBsw70iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MiBidWlsdGluL2NvbW1pdC5jOjE1MjQKK21zZ2lkICJzaG93IHN0YXR1cyBjb25jaXNlbHkiCittc2dzdHIgImhp4buDbiB0aOG7iyB0cuG6oW5nIHRow6FpIOG7nyBk4bqhbmcgc8O6YyB0w61jaCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY0IGJ1aWx0aW4vY29tbWl0LmM6MTUyNgorbXNnaWQgInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIgorbXNnc3RyICJoaeG7g24gdGjhu4sgdGjDtG5nIHRpbiBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NgorbXNnaWQgInNob3cgc3Rhc2ggaW5mb3JtYXRpb24iCittc2dzdHIgImhp4buDbiB0aOG7iyB0aMO0bmcgdGluIHbhu4EgdOG6oW0gY+G6pXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2OCBidWlsdGluL2NvbW1pdC5jOjE1MjgKK21zZ2lkICJjb21wdXRlIGZ1bGwgYWhlYWQvYmVoaW5kIHZhbHVlcyIKK21zZ3N0ciAidMOtbmggxJHhuqd5IMSR4bunIGdpw6EgdHLhu4sgdHLGsOG7m2Mvc2F1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzAKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJwaGnDqm4gYuG6o24iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MCBidWlsdGluL2NvbW1pdC5jOjE1MzAgYnVpbHRpbi9wdXNoLmM6NTQ5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjQzCittc2dpZCAibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiCittc2dzdHIgImvhur90IHh14bqldCBk4bqhbmcgbcOheS1jw7MtdGjhu4MtxJHhu41jIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzMgYnVpbHRpbi9jb21taXQuYzoxNTMyCittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICJoaeG7g24gdGjhu4sgdHLhuqFuZyB0aMOhaSDhu58gxJHhu4tuaCBk4bqhbmcgZMOgaSAobeG6t2MgxJHhu4tuaCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3NiBidWlsdGluL2NvbW1pdC5jOjE1MzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAiY2jhuqVtIGThu6l0IGPDoWMgbeG7pWMgYuG6sW5nIE5VTCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc4IGJ1aWx0aW4vY29tbWl0LmM6MTM4MiBidWlsdGluL2NvbW1pdC5jOjE1MzgKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTUzIGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU2CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1OSBidWlsdGluL3JlYmFzZS5jOjE1NjkgcGFyc2Utb3B0aW9ucy5oOjMzNgorbXNnaWQgIm1vZGUiCittc2dzdHIgImNo4bq/IMSR4buZIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzkgYnVpbHRpbi9jb21taXQuYzoxNTM4Cittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisiaGnhu4NuIHRo4buLIGPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSAgZOG6pXUgduG6v3QsIGPDoWMgY2jhur8gxJHhu5kgdMO5eSBjaOG7jW46ICBhbGwsICIKKyJub3JtYWwsIG5vLiAoTeG6t2MgxJHhu4tuaDogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgzCittc2dpZCAiIgorInNob3cgaWdub3JlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uIChEZWZhdWx0OiAiCisidHJhZGl0aW9uYWwpIgorbXNnc3RyICIiCisiaGnhu4NuIHRo4buLIGPDoWMgdOG6rXAgdGluIGLhu4sgYuG7jyBxdWEsIGPDoWMgY2jhur8gxJHhu5kgdMO5eSBjaOG7jW46IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgIgorIm5vLiAoTeG6t2MgxJHhu4tuaDogdHJhZGl0aW9uYWwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODUgcGFyc2Utb3B0aW9ucy5oOjE5MgorbXNnaWQgIndoZW4iCittc2dzdHIgImtoaSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg2Cittc2dpZCAiIgorImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisiYuG7jyBxdWEgY8OhYyB0aGF5IMSR4buVaSB0cm9uZyBtw7QtxJF1bi1jb24sIHTDuXkgY2jhu41uIGtoaTogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKE3hurdjIMSR4buLbmg6IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4OAorbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgImhp4buDbiB0aOG7iyBkYW5oIHPDoWNoIGPDoWMgdOG6rXAtdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSB0cm9uZyBjw6FjIGPhu5l0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODkKK21zZ2lkICJkbyBub3QgZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgImtow7RuZyBkw7IgdMOsbSBjw6FjIHTDqm4gdGhheSDEkeG7lWkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM5MQorbXNnaWQgImRldGVjdCByZW5hbWVzLCBvcHRpb25hbGx5IHNldCBzaW1pbGFyaXR5IGluZGV4IgorbXNnc3RyICJkw7IgY8OhYyB0w6puIHRoYXkgxJHhu5VpLCB0w7l5IMO9IMSR4bq3dCBt4bulYyBs4bulYyB0xrDGoW5nIHThu7EiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQxMQorbXNnaWQgIlVuc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIGlnbm9yZWQgYW5kIHVudHJhY2tlZC1maWxlcyBhcmd1bWVudHMiCittc2dzdHIgIiIKKyJLaMO0bmcgaOG7lyB0cuG7oSB04buVIGjhu6NwIGPDoWMgdGhhbSBz4buRIGPDoWMgdOG6rXAgdGluIGLhu4sgYuG7jyBxdWEgdsOgIGtow7RuZyDEkcaw4bujYyB0aGVvIGTDtWkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NAorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgImtow7RuZyBoaeG7g24gdGjhu4sgdOG7lW5nIGvhur90IHNhdSBraGkgY2h1eeG7g24gZ2lhbyB0aMOgbmggY8O0bmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NQorbXNnaWQgInNob3cgZGlmZiBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHPhu7Ega2jDoWMgYmnhu4d0IHRyb25nIG3huqt1IHRpbiBuaOG6r24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk3Cittc2dpZCAiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiBnaGkgY2jDuiBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OCBidWlsdGluL21lcmdlLmM6Mjc1IGJ1aWx0aW4vdGFnLmM6NDE0Cittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAixJHhu41jIGNow7ogdGjDrWNoIHThu6sgdOG6rXAgdGluIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTkKK21zZ2lkICJhdXRob3IiCittc2dzdHIgInTDoWMgZ2nhuqMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICJnaGkgxJHDqCB0w6FjIGdp4bqjIGNobyBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMCBidWlsdGluL2djLmM6NTM4Cittc2dpZCAiZGF0ZSIKK21zZ3N0ciAibmfDoHkgdGjDoW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgImdoaSDEkcOoIG5nw6B5IHRow6FuZyBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAyIGJ1aWx0aW4vY29tbWl0LmM6MTUwMyBidWlsdGluL2NvbW1pdC5jOjE1MDQKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNSBwYXJzZS1vcHRpb25zLmg6MzI4IHJlZi1maWx0ZXIuaDo5MgorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAibOG6p25fY2h1eeG7g25fZ2lhbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgImTDuW5nIGzhuqFpIGPDoWMgZ2hpIGNow7ogdOG7qyBs4bqnbiBjaHV54buDbiBnaWFvIMSRw6MgY2hvIG5oxrBuZyBjw7MgY2hvIHPhu61hIGNo4buvYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAzCittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgImTDuW5nIGzhuqFpIGPDoWMgZ2hpIGNow7ogdOG7qyBs4bqnbiBjaHV54buDbiBnaWFvIMSRw6MgY2hvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDQKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisiZMO5bmcgZ2hpIGNow7ogY8OzIMSR4buLbmggZOG6oW5nIGF1dG9zcXVhc2ggxJHhu4Mgc+G7rWEgY2jhu69hIGzhuqduIGNodXnhu4NuIGdpYW8gxJHDoyBjaOG7iSByYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA1Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gc3F1YXNoIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyJkw7luZyBs4budaSBuaOG6r24gY8OzIMSR4buLbmggZOG6oW5nIHThu7EgxJHhu5luZyBuw6luIMSR4buDIG7DqW4gbOG6oWkgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIMSRw6MgY2jhu4kgIgorInJhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDYKK21zZ2lkICJ0aGUgY29tbWl0IGlzIGF1dGhvcmVkIGJ5IG1lIG5vdyAodXNlZCB3aXRoIC1DLy1jLy0tYW1lbmQpIgorbXNnc3RyICIiCisibOG6p24gY2h1eeG7g24gZ2lhbyBuaOG6rW4gdMO0aSBsw6AgdMOhYyBnaeG6oyAoxJHGsOG7o2MgZMO5bmcgduG7m2kgdMO5eSBjaOG7jW4gLUMvLWMvLS1hbWVuZCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNyBidWlsdGluL2xvZy5jOjE2MzQgYnVpbHRpbi9tZXJnZS5jOjI5MAorIzogYnVpbHRpbi9wdWxsLmM6MTQ0IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEwCittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICIobsOqbiBkw7luZykgdGjDqm0gZMOybmcgU2lnbmVkLW9mZi1ieToiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwOAorbXNnaWQgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIKK21zZ3N0ciAic+G7rSBk4bulbmcgdOG6rXAgdGluIG3huqt1IMSRw6MgY2hvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDkKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAiw6lwIGJ14buZYyBz4butYSBs4bqnbiBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMQorbXNnaWQgImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJiYW8gZ+G7k20gY8OhYyB0cuG6oW5nIHRow6FpIHRyb25nIG3huqt1IGdoaSBjaMO6IGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNgorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICJDw6FjIHTDuXkgbuG7mWkgZHVuZyBnaGkgY2jDuiBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNworbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiY2h1eeG7g24gZ2lhbyB04bqldCBj4bqjIGPDoWMgdOG6rXAgdGluIGPDsyB0aGF5IMSR4buVaSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE4Cittc2dpZCAiYWRkIHNwZWNpZmllZCBmaWxlcyB0byBpbmRleCBmb3IgY29tbWl0IgorbXNnc3RyICJ0aMOqbSBjw6FjIHThuq1wIHRpbiDEkcOjIGNo4buJIHJhIHbDoG8gYuG6o25nIG3hu6VjIGzhu6VjIMSR4buDIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxOQorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGZpbGVzIgorbXNnc3RyICJ0aMOqbSBjw6FjIHThuq1wLXRpbiBi4bqxbmcgdMawxqFuZyB0w6FjIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjAKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIgorbXNnc3RyICJ0aMOqbSBjw6FjIHRoYXkgxJHhu5VpIGLhurFuZyB0xrDGoW5nIHTDoWMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMQorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAiY2jhu4kgY2h1eeG7g24gZ2lhbyBjw6FjIHThuq1wIHRpbiDEkcOjIGNo4buJIHJhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjIKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAidsOybmcgcXVhIG3Ds2MgKGhvb2spIHByZS1jb21taXQgdsOgIGNvbW1pdC1tc2ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMworbXNnaWQgInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiCittc2dzdHIgImhp4buDbiB0aOG7iyB4ZW0gY8OhaSBnw6wgY8OzIHRo4buDIMSRxrDhu6NjIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzNgorbXNnaWQgImFtZW5kIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi4oCcdHUgYuG7leKAnSAoYW1lbmQpIGzhuqduIGNvbW1pdCB0csaw4bubYyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM3Cittc2dpZCAiYnlwYXNzIHBvc3QtcmV3cml0ZSBob29rIgorbXNnc3RyICJ2w7JuZyBxdWEgbcOzYyAoaG9vaykgcG9zdC1yZXdyaXRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NDQKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICJvayDEkeG7gyBnaGkgbOG6oWkgbeG7mXQgdGhheSDEkeG7lWkgdHLhu5FuZyBy4buXbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU0NgorbXNnaWQgIm9rIHRvIHJlY29yZCBhIGNoYW5nZSB3aXRoIGFuIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgIm9rIMSR4buDIGdoaSBjw6FjIHRoYXkgxJHhu5VpIHbhu5tpIGzhu51pIG5o4bqvbiB0cuG7kW5nIHLhu5duZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIlThuq1wIHRpbiBNRVJHRV9IRUFEIHNhaSBo4buPbmcgKCVzKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjI2Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTU9ERSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBNRVJHRV9NT0RFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIHBo4bqnbiBjaMO6IHRow61jaCAobWVzc2FnZSkgY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbzogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJCw6NpIGLhu48gdmnhu4djIGNodXnhu4NuIGdpYW8gYuG7n2kgdsOsIHBo4bqnbiBjaMO6IHRow61jaCBj4bunYSBuw7MgdHLhu5FuZyBy4buXbmcuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY1NworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgIiIKKyLEkGFuZyBi4buPIHF1YSB2aeG7h2MgY2h1eeG7g24gZ2lhbzsgYuG6oW4gxJHDoyBraMO0bmcgYmnDqm4gc2/huqFuIHBo4bqnbiBjaMO6IHRow61jaCAiCisiKG1lc3NhZ2UpLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2OTEKK21zZ2lkICIiCisicmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBhbmQgcXVvdGEgaXNcbiIKKyJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgOi9cIiB0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorImtobyBjaOG7qWEgxJHDoyDEkcaw4bujYyBj4bqtcCBuaOG6rXQsIG5oxrBuZyBraMO0bmcgdGjhu4MgZ2hpIHbDoG9cbiIKKyJ04bqtcCB0aW4gbmV3X2luZGV4IChi4bqjbmcgbeG7pWMgbOG7pWMgbeG7m2kpLiBIw6N5IGtp4buDbSB0cmEgeGVtIMSRxKlhXG4iCisiY8OzIGLhu4sgxJHhuqd5IHF1w6EgaGF5IHF1b3RhICho4bqhbiBuZ2jhuqFjaCDEkcSpYSBj4bupbmcpIGLhu4sgdsaw4bujdCBxdcOhLFxuIgorInbDoCBzYXUgxJHDsyBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDovXCIgxJHhu4Mga2jhuq9jIHBo4bulYy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNworbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXSIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPC90aMawL23hu6VjL8SR4buRaS90xrDhu6NuZz5dIFstLXNoYWxsb3ddIFstLSIKKyJbbm8tXXByb2dyZXNzXSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIyCittc2dpZCAiIgorImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tYXBwZW5kfC0tc3BsaXRdIFstLSIKKyJyZWFjaGFibGV8LS1zdGRpbi1wYWNrc3wtLXN0ZGluLWNvbW1pdHNdIFstLVtuby1dcHJvZ3Jlc3NdIDxzcGxpdCBvcHRpb25zPiIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8L3RoxrAvbeG7pWMvxJHhu5FpL3TGsOG7o25nPl0gWy0tYXBwZW5kfC0tIgorInNwbGl0XSBbLS1yZWFjaGFibGV8LS1zdGRpbi1wYWNrc3wtLXN0ZGluLWNvbW1pdHNdIFstLVtuby1dcHJvZ3Jlc3NdIDxjw6FjICIKKyJ0w7l5IGNo4buNbiBjaGlhIHTDoWNoPiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBvYmplY3QgZGlyZWN0b3J5IG1hdGNoaW5nICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgdGjGsCBt4bulYyDEkeG7kWkgdMaw4bujbmcga2jhu5twIHbhu5tpIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjY4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTI1CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIxMCBidWlsdGluL2ZldGNoLmM6MTc5IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgImRpciIKK21zZ3N0ciAidG3hu6VjIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjY5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTI2CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIxMQorbXNnaWQgIlRoZSBvYmplY3QgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBncmFwaCIKK21zZ3N0ciAiVGjGsCBt4bulYyDEkeG7kWkgdMaw4bujbmcgxJHhu4MgbMawdSDEkeG7kyB0aOG7iyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo3MQorbXNnaWQgImlmIHRoZSBjb21taXQtZ3JhcGggaXMgc3BsaXQsIG9ubHkgdmVyaWZ5IHRoZSB0aXAgZmlsZSIKK21zZ3N0ciAiIgorIm7hur91IMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBi4buLIGNoaWEgY+G6r3QsIHRow6wgY2jhu4kgdGjhuqltIHRyYSB04bqtcCB0aW4gxJHhu4luaCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo5NCB0L2hlbHBlci90ZXN0LXJlYWQtZ3JhcGguYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBjb21taXQtZ3JhcGggJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIG3hu58gxJHhu5MgdGjhu4sgY2h1eeG7g24gZ2lhbyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMjgKK21zZ2lkICJzdGFydCB3YWxrIGF0IGFsbCByZWZzIgorbXNnc3RyICJi4bqvdCDEkeG6p3UgZGkgY2h1eeG7g24gdOG6oWkgbeG7jWkgdGhhbSBjaGnhur91IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzMAorbXNnaWQgInNjYW4gcGFjay1pbmRleGVzIGxpc3RlZCBieSBzdGRpbiBmb3IgY29tbWl0cyIKK21zZ3N0ciAiIgorInF1w6l0IGTDsyBjw6FjIG3hu6VjIGzhu6VjIGfDs2kgxJHGsOG7o2MgbGnhu4d0IGvDqiBi4bufaSDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIGNobyBjw6FjIGzhuqduICIKKyJjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzMgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgIiIKKyJi4bqvdCDEkeG6p3UgZGkgY2h1eeG7g24gdOG6oWkgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIMSRxrDhu6NjIGxp4buHdCBrw6ogYuG7n2kgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzQKK21zZ2lkICJpbmNsdWRlIGFsbCBjb21taXRzIGFscmVhZHkgaW4gdGhlIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICIiCisiYmFvIGfhu5NtIG3hu41pIGzhuqduIGNodXnhu4NuIGdpYW8gxJHDoyBz4bq1biBjw7MgdHJvbmfGsOG7nWkgdOG6rXAgdGluIMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tIgorImdpYW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM3Cittc2dpZCAiYWxsb3cgd3JpdGluZyBhbiBpbmNyZW1lbnRhbCBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiY2hvIHBow6lwIGdoaSBt4buZdCB04bqtcCB0aW4gxJHhu5MgaOG7jWEgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGzhu5tuIGzDqm4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTQzCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorInPhu5EgbMaw4bujbmcgdOG7kWkgxJFhIGPhu6dhIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyB0cm9uZyBt4buZdCDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gIgorImNoaWEgY+G6r3Qga2jDtG5nLWPGoS1z4bufIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE0MQorbXNnaWQgIm1heGltdW0gcmF0aW8gYmV0d2VlbiB0d28gbGV2ZWxzIG9mIGEgc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICJ04bu3IGzhu4cgdOG7kWkgxJFhIGdp4buvYSBoYWkgbeG7qWMgY+G7p2EgbeG7mXQgxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIGNoaWEgY+G6r3QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTU5Cittc2dpZCAidXNlIGF0IG1vc3Qgb25lIG9mIC0tcmVhY2hhYmxlLCAtLXN0ZGluLWNvbW1pdHMsIG9yIC0tc3RkaW4tcGFja3MiCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4Mgc+G7rSBk4bulbmcgaMahbiBt4buZdCAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzLCBoYXkgLS1zdGRpbi1wYWNrcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMQorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb25maWcgWzxjw6FjIHTDuXkgY2jhu41uPl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTA0IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgLS10eXBlIGFyZ3VtZW50LCAlcyIKK21zZ3N0ciAixJHhu5FpIHPhu5Ega2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW4gLS10eXBlLCAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMTYKK21zZ2lkICJvbmx5IG9uZSB0eXBlIGF0IGEgdGltZSIKK21zZ3N0ciAiY2jhu4kgbeG7mXQga2nhu4N1IG3hu5l0IGzhuqduIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNQorbXNnaWQgIkNvbmZpZyBmaWxlIGxvY2F0aW9uIgorbXNnc3RyICJW4buLIHRyw60gdOG6rXAgdGluIGPhuqV1IGjDrG5oIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNgorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgImTDuW5nIHThuq1wIHRpbiBj4bqldSBow6xuaCB0b8OgbiBj4bulYyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjcKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICJz4butIGThu6VuZyB04bqtcCB0aW4gY+G6pXUgaMOsbmggaOG7hyB0aOG7kW5nIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOAorbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICJkw7luZyB04bqtcCB0aW4gY+G6pXUgaMOsbmggY+G7p2Ega2hvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOQorbXNnaWQgInVzZSBwZXItd29ya3RyZWUgY29uZmlnIGZpbGUiCittc2dzdHIgImTDuW5nIHThuq1wIHRpbiBj4bqldSBow6xuaCBwZXItd29ya3RyZWUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAidXNlIGdpdmVuIGNvbmZpZyBmaWxlIgorbXNnc3RyICJz4butIGThu6VuZyB04bqtcCB0aW4gY+G6pXUgaMOsbmggxJHDoyBjaG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMxCittc2dpZCAiYmxvYi1pZCIKK21zZ3N0ciAiYmxvYi1pZCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzEKK21zZ2lkICJyZWFkIGNvbmZpZyBmcm9tIGdpdmVuIGJsb2Igb2JqZWN0IgorbXNnc3RyICLEkeG7jWMgY+G6pXUgaMOsbmggdOG7qyDEkeG7kWkgdMaw4bujbmcgYmxvYiDEkcOjIGNobyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzIKK21zZ2lkICJBY3Rpb24iCittc2dzdHIgIkjDoG5oIMSR4buZbmciCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMzCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImzhuqV5IGdpw6EtdHLhu4s6IHTDqm4gW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzQKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImzhuqV5IHThuqV0IGPhuqMgZ2nDoS10cuG7izoga2jDs2EgW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzUKK21zZ2lkICJnZXQgdmFsdWVzIGZvciByZWdleHA6IG5hbWUtcmVnZXggW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAibOG6pXkgZ2nDoSB0cuG7iyBjaG8gcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM2Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAibOG6pXkgxJHhurdjIHThuqMgZ2nDoSB0cuG7iyBjaG8gVVJMOiBwaOG6p25bLmJp4bq/bl0gVVJMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNworbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICJ0aGF5IHRo4bq/IHThuqV0IGPhuqMgY8OhYyBiaeG6v24ga2jhu5twIG3huqt1OiB0w6puIGdpw6EtdHLhu4sgW3ZhbHVlX3JlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzgKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgInRow6ptIGJp4bq/biBt4bubaTogdMOqbiBnacOhLXRy4buLIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOQorbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImfhu6EgYuG7jyBiaeG6v246IHTDqm4gW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDAKK21zZ2lkICJyZW1vdmUgYWxsIG1hdGNoZXM6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiZ+G7oSBi4buPIG3hu41pIGPDoWkga2jhu5twOiB0w6puIFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQxCittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICLEkeG7lWkgdMOqbiBwaOG6p246IHTDqm4tY8WpIHTDqm4tbeG7m2kiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQyCittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAiZ+G7oSBi4buPIHBo4bqnbjogdMOqbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDMKK21zZ2lkICJsaXN0IGFsbCIKK21zZ3N0ciAibGnhu4d0IGvDqiB04bqldCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDQKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAibeG7nyBt4buZdCB0csOsbmggYmnDqm4gc2/huqFuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NQorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICJ0w6xtIGPhuqV1IGjDrG5oIG3DoHUgc+G6r2M6IHNsb3QgW23hurdjIMSR4buLbmhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NgorbXNnaWQgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IHNsb3QgW3N0ZG91dC1pcy10dHldIgorbXNnc3RyICJ0w6xtIGPDoWMgY8OgaSDEkeG6t3QgduG7gSBtw6B1IHPhuq9jOiBzbG90IFtzdGRvdXQtbMOgLXR0eV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ3Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiS2nhu4N1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OCBidWlsdGluL2Vudi0taGVscGVyLmM6MzgKK21zZ2lkICJ2YWx1ZSBpcyBnaXZlbiB0aGlzIHR5cGUiCittc2dzdHIgImdpw6EgdHLhu4sgxJHGsOG7o2MgxJHGsGEga2nhu4N1IG7DoHkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ5Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICJnacOhIHRy4buLIGzDoCBcInRydWVcIiBob+G6t2MgXCJmYWxzZVwiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MAorbXNnaWQgInZhbHVlIGlzIGRlY2ltYWwgbnVtYmVyIgorbXNnc3RyICJnacOhIHRy4buLIOG7nyBk4bqhbmcgc+G7kSB0aOG6rXAgcGjDom4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUxCittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICJnacOhIHRy4buLIGzDoCAtLWJvb2wgaG/hurdjIC0taW50IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MgorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgImdpw6EgdHLhu4sgbMOgIMSRxrDhu51uZyBk4bqrbiAodMOqbiB04bqtcCB0aW4gaGF5IHRoxrAgbeG7pWMpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MworbXNnaWQgInZhbHVlIGlzIGFuIGV4cGlyeSBkYXRlIgorbXNnc3RyICJnacOhIHRy4buLIGzDoCBt4buZdCBuZ8OgeSBo4bq/dCBo4bqhbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTQKIG1zZ2lkICJPdGhlciIKIG1zZ3N0ciAiS2jDoWMiCiAKLSM6IGxpYi9lcnJvci50Y2w6MjAgbGliL2Vycm9yLnRjbDoxMTYKLW1zZ2lkICJlcnJvciIKLW1zZ3N0ciAibOG7l2kiCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NQorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAiY2jhuqVtIGThu6l0IGdpw6EgdHLhu4sgduG7m2kgYnl0ZSBOVUwiCiAKLSM6IGxpYi9lcnJvci50Y2w6MzYKLW1zZ2lkICJ3YXJuaW5nIgotbXNnc3RyICJj4bqjbmggYsOhbyIKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU2Cittc2dpZCAic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgY8OhYyB0w6puIGJp4bq/biIKIAotIzogbGliL2Vycm9yLnRjbDo5NgotbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCi1tc2dzdHIgIkLhuqFuIHBo4bqjaSBz4butYSBjw6FjIGzhu5dpIHRyw6puIHRyxrDhu5tjIGtoaSBjaHV54buDbiBnaWFvLiIKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU3Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICJ0w7RuIHRy4buNbmcga+G7gyBjw6AgY8OhYyBoxrDhu5tuZyB0cm9uZyB0w6xtIGtp4bq/bSIKIAotIzogbGliL2luZGV4LnRjbDo2Ci1tc2dpZCAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgYuG7jyBraMOzYSBi4bqjbmcgbeG7pWMgbOG7pWMiCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OAorbXNnaWQgInNob3cgb3JpZ2luIG9mIGNvbmZpZyAoZmlsZSwgc3RhbmRhcmQgaW5wdXQsIGJsb2IsIGNvbW1hbmQgbGluZSkiCittc2dzdHIgIiIKKyJoaeG7g24gdGjhu4sgbmd1ecOqbiBn4buRYyBj4bunYSBj4bqldSBow6xuaCAodOG6rXAgdGluLCDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluLCBibG9iLCBkw7JuZyAiCisibOG7h25oKSIKIAotIzogbGliL2luZGV4LnRjbDoxNwotbXNnaWQgIkluZGV4IEVycm9yIgotbXNnc3RyICJM4buXaSBt4bulYyBs4bulYyIKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU5Cittc2dpZCAic2hvdyBzY29wZSBvZiBjb25maWcgKHdvcmt0cmVlLCBsb2NhbCwgZ2xvYmFsLCBzeXN0ZW0sIGNvbW1hbmQpIgorbXNnc3RyICIiCisiaGnhu4NuIHRo4buLIHBo4bqhbSB2aSBj4bunYSBj4bqldSBow6xuaCAoY8OieSBsw6BtIHZp4buHYywgY+G7pWMgYuG7mSwgdG/DoG4gY+G6p3UsIGjhu4cgdGjhu5FuZywgIgorImzhu4duaCkiCiAKLSM6IGxpYi9pbmRleC50Y2w6MTkKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTYwIGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MAorbXNnaWQgInZhbHVlIgorbXNnc3RyICJnacOhIHRy4buLIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE2MAorbXNnaWQgIndpdGggLS1nZXQsIHVzZSBkZWZhdWx0IHZhbHVlIHdoZW4gbWlzc2luZyBlbnRyeSIKK21zZ3N0ciAiduG7m2kgLS1nZXQsIGTDuW5nIGdpw6EgdHLhu4sgbeG6t2MgxJHhu4tuaCBraGkgdGhp4bq/dSBt4bulYyB0aW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIHNob3VsZCBiZSAlZCIKK21zZ3N0ciAic2FpIHPhu5EgbMaw4bujbmcgdGhhbSBz4buRLCBwaOG6o2kgbMOgICVkIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgZnJvbSAlZCB0byAlZCIKK21zZ3N0ciAic2FpIHPhu5EgbMaw4bujbmcgdGhhbSBz4buRLCBwaOG6o2kgdOG7qyAlZCDEkeG6v24gJWQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IHBhdHRlcm46ICVzIgorbXNnc3RyICJt4bqrdSBraMOzYSBraMO0bmcgaOG7o3AgbOG7hzogJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmb3JtYXQgZGVmYXVsdCBjb25maWcgdmFsdWU6ICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHhu4tuaCBk4bqhbmcgZ2nDoSB0cuG7iyBj4bqldSBow6xuaCBt4bq3YyDEkeG7i25oOiAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGNvbG9yICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBtw6B1IOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ1OQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBkZWZhdWx0IGNvbG9yIHZhbHVlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggZ2nDoSB0cuG7iyBtw6B1IG3hurdjIMSR4buLbmgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTEyIGJ1aWx0aW4vY29uZmlnLmM6NzY4Cittc2dpZCAibm90IGluIGEgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAia2jDtG5nIHRyb25nIHRoxrAgbeG7pWMgZ2l0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUxNQorbXNnaWQgIndyaXRpbmcgdG8gc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAidmnhu4djIGdoaSByYSDEkeG6p3UgcmEgdGnDqnUgY2h14bqpbiBsw6Aga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTE4Cittc2dpZCAid3JpdGluZyBjb25maWcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAia2jDtG5nIGjhu5cgdHLhu6MgZ2hpIGPhuqV1IGjDrG5oIGPDoWMgYmxvYiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MDMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgotInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCisiIyBUaGlzIGlzIEdpdCdzIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiIKKyJbdXNlcl1cbiIKKyIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgogbXNnc3RyICIiCi0iQ+G6rXAgbmjhuq10IG3hu6VjIGzhu6VjIGNobyBHaXQgZ+G6t3AgbOG7l2kuIFZp4buHYyBxdcOpdCBs4bqhaSBz4bq9IHThu7EgxJHhu5luZyDEkcaw4bujYyBraOG7n2kgY2jhuqF5IMSR4buDICIKLSLEkeG7k25nIGjDs2EgbOG6oWkgduG7m2kgZ2l0LWd1aS4iCisiIyDEkMOieSBsw6AgdOG6rXAgdGluIGPhuqV1IGjDrG5oIGNobyB04burbmcgbmfGsOG7nWkgZMO5bmcgR2l0LlxuIgorIlt1c2VyXVxuIgorIiMgVnVpIGzDsm5nIHPhu61hIGzhuqFpIGNobyB0aMOtY2ggaOG7o3AgdsOgIGLhu48gZOG6pXUgZ2hpIGNow7ogY8OhYyBkw7JuZyBzYXU6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgogCi0jOiBsaWIvaW5kZXgudGNsOjMwCi1tc2dpZCAiQ29udGludWUiCi1tc2dzdHIgIlRp4bq/cCB04bulYyIKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjI3Cittc2dpZCAib25seSBvbmUgY29uZmlnIGZpbGUgYXQgYSB0aW1lIgorbXNnc3RyICJjaOG7iSBt4buZdCB04bqtcCB0aW4gY+G6pXUgaMOsbmggbeG7mXQgbOG6p24iCiAKLSM6IGxpYi9pbmRleC50Y2w6MzMKLW1zZ2lkICJVbmxvY2sgSW5kZXgiCi1tc2dzdHIgIkLhu48ga2jDs2EgbeG7pWMgbOG7pWMiCisjOiBidWlsdGluL2NvbmZpZy5jOjYzMgorbXNnaWQgIi0tbG9jYWwgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1sb2NhbCBjaOG7iSBjw7MgdGjhu4MgxJHGsOG7o2MgZMO5bmcgYsOqbiB0cm9uZyBt4buZdCBraG8gZ2l0IgogCi0jOiBsaWIvaW5kZXgudGNsOjI5OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKLW1zZ3N0ciAiQuG7jyAlcyByYSBraOG7j2kgdmnhu4djIGNodXnhu4NuIGdpYW8iCisjOiBidWlsdGluL2NvbmZpZy5jOjYzNQorbXNnaWQgIi0tYmxvYiBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLWJsb2IgY2jhu4kgY8OzIHRo4buDIMSRxrDhu6NjIGTDuW5nIGLDqm4gdHJvbmcgbeG7mXQga2hvIGdpdCIKIAotIzogbGliL2luZGV4LnRjbDozMzcKLW1zZ2lkICJSZWFkeSB0byBjb21taXQuIgotbXNnc3RyICLEkMOjIGNodXnhu4NuIGdpYW8gcuG7k2kuIgorIzogYnVpbHRpbi9jb25maWcuYzo2NTUKK21zZ2lkICIkSE9NRSBub3Qgc2V0IgorbXNnc3RyICJDaMawYSDEkeG6t3QgYmnhur9uIG3DtGkgdHLGsOG7nW5nIEhPTUUiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzUwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWRkaW5nICVzIgotbXNnc3RyICLEkGFuZyB0aMOqbSAlcyIKLQotIzogbGliL2luZGV4LnRjbDozODAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTdGFnZSAlZCB1bnRyYWNrZWQgZmlsZXM/IgotbXNnc3RyICLEkMawYSAlZCB04bqtcCB0aW4gY2jGsGEgdGhlbyBkw7VpIGzDqm4gYuG7hyBwaMOzbmcgxJHhu4MgY2h1eeG7g24gZ2lhbz8iCi0KLSM6IGxpYi9pbmRleC50Y2w6NDI4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCi1tc2dzdHIgIkhvw6BuIG5ndXnDqm4gY8OhYyB0aGF5IMSR4buVaSB0cm9uZyB04bqtcCB0aW4gJXM/IgotCi0jOiBsaWIvaW5kZXgudGNsOjQzMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKLW1zZ3N0ciAiSG/DoG4gbmd1ecOqbiBjw6FjIHRoYXkgxJHhu5VpIHRyb25nICVpIHThuq1wIHRpbj8iCi0KLSM6IGxpYi9pbmRleC50Y2w6NDM4Ci1tc2dpZCAiQW55IHVuc3RhZ2VkIGNoYW5nZXMgd2lsbCBiZSBwZXJtYW5lbnRseSBsb3N0IGJ5IHRoZSByZXZlcnQuIgotbXNnc3RyICIiCi0iTeG7jWkgdGhheSDEkeG7lWkgY2jGsGEgxJHGsOG7o2MgxJHGsGEgbMOqbiBi4buHIHBow7NuZyBz4bq9IG3huqV0IHbEqW5oIHZp4buFbiBkbyBs4buHbmggcmV2ZXJ0LiIKLQotIzogbGliL2luZGV4LnRjbDo0NDEKLW1zZ2lkICJEbyBOb3RoaW5nIgotbXNnc3RyICJLaMO0bmcgbMOgbSBnw6wiCi0KLSM6IGxpYi9pbmRleC50Y2w6NDU5Ci1tc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgotbXNnc3RyICLEkGFuZyBob8OgbiBuZ3V5w6puIGPDoWMgdOG6rXAgdGluIMSRw6MgY2jhu41uIgotCi0jOiBsaWIvaW5kZXgudGNsOjQ2MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydGluZyAlcyIKLW1zZ3N0ciAixJBhbmcgaG/DoG4gbmd1ecOqbiAlcyIKLQotIzogbGliL2xpbmUudGNsOjE3Ci1tc2dpZCAiR290byBMaW5lOiIKLW1zZ3N0ciAiTmjhuqN5IMSR4bq/biBkw7JuZzoiCi0KLSM6IGxpYi9saW5lLnRjbDoyMwotbXNnaWQgIkdvIgotbXNnc3RyICJOaOG6o3kiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTMKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Njc5CiBtc2dpZCAiIgotIkNhbm5vdCBtZXJnZSB3aGlsZSBhbWVuZGluZy5cbiIKLSJcbiIKLSJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGFueSB0eXBlIG9mIG1lcmdlLlxuIgorIi0td29ya3RyZWUgY2Fubm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIHVubGVzcyB0aGUgY29uZmlnXG4iCisiZXh0ZW5zaW9uIHdvcmt0cmVlQ29uZmlnIGlzIGVuYWJsZWQuIFBsZWFzZSByZWFkIFwiQ09ORklHVVJBVElPTiBGSUxFXCJcbiIKKyJzZWN0aW9uIGluIFwiZ2l0IGhlbHAgd29ya3RyZWVcIiBmb3IgZGV0YWlscyIKIG1zZ3N0ciAiIgotIktow7RuZyB0aOG7gyBow7JhIHRy4buZbiB0cm9uZyBraGkgdHUgYuG7lS5cbiIKLSJcbiIKLSJC4bqhbiBwaOG6o2kgaG/DoG4gdOG6pXQgdmnhu4djIHR1IGLhu5UgbOG6p24gY2h1eeG7g24gZ2lhbyB0csaw4bubYyBraGkgYuG6r3QgxJHhuqd1IGLhuqV0IGvhu7Mga2nhu4N1ICIKLSJow7JhIHRy4buZbiBuw6BvLlxuIgorIi0td29ya3RyZWUga2jDtG5nIHRo4buDIGTDuW5nIHbhu5tpIG5oaeG7gXUgY8OieSBsw6BtIHZp4buHYyB0cuG7qyBraGkgY+G6pXUgaMOsbmggbeG7nyBy4buZbmdcbiIKKyJ3b3JrdHJlZUNvbmZpZyDEkcaw4bujYyBi4bqtdC4gVnVpIGzDsm5nIMSR4buNYyBwaOG6p24gXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInRyb25nIFwiZ2l0IGhlbHAgd29ya3RyZWVcIiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dCIKIAotIzogbGliL21lcmdlLnRjbDoyNworIzogYnVpbHRpbi9jb25maWcuYzo3MTQKK21zZ2lkICItLWdldC1jb2xvciBhbmQgdmFyaWFibGUgdHlwZSBhcmUgaW5jb2hlcmVudCIKK21zZ3N0ciAiLS1nZXQtY29sb3IgdsOgIGtp4buDdSBiaeG6v24gbMOgIGtow7RuZyBt4bqhY2ggbOG6oWMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzE5Cittc2dpZCAib25seSBvbmUgYWN0aW9uIGF0IGEgdGltZSIKK21zZ3N0ciAiY2jhu4kgbeG7mXQgdGhhbyB0w6FjIG3hu5dpIGzhuqduIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczMgorbXNnaWQgIi0tbmFtZS1vbmx5IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWxpc3Qgb3IgLS1nZXQtcmVnZXhwIgorbXNnc3RyICItLW5hbWUtb25seSBjaOG7iSDEkcaw4bujYyDDoXAgZOG7pW5nIGNobyAtLWxpc3QgaG/hurdjIC0tZ2V0LXJlZ2V4cCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzgKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGEgbWVyZ2UgY2FuIGJlIHBlcmZvcm1lZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyItLXNob3ctb3JpZ2luIGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCwgLS1nZXQtYWxsLCAtLWdldC1yZWdleHAsIGFuZCAtLSIKKyJsaXN0IgogbXNnc3RyICIiCi0iVHLhuqFuZyB0aMOhaSBxdcOpdCBraMO0bmcga2jhu5twIHbhu5tpIHRy4bqhbmcgdGjDoWkga2hvLlxuIgotIlxuIgotIkPDsyBHaXQga2jDoWMgxJHDoyBz4butYSBraG8gbsOgeSBr4buDIHThu6sgbOG6p24gcXXDqXQgY3Xhu5FpLiBD4bqnbiBxdcOpdCBs4bqhaSB0csaw4bubYyBraGkgdGjhu7FjICIKLSJoaeG7h24gdmnhu4djIGjDsmEgdHLhu5luLlxuIgotIlxuIgotIlPhur0gdGjhu7FjIGhp4buHbiB2aeG7h2MgcXXDqXQgbOG6oWkgbmdheSBiw6J5IGdp4budaS5cbiIKKyItLXNob3ctb3JpZ2luIGNo4buJIMSRxrDhu6NjIMOhcCBk4bulbmcgY2hvIC0tZ2V0LCAtLWdldC1hbGwsIC0tZ2V0LXJlZ2V4cCwgaG/hurdjIC0tIgorImxpc3QiCiAKLSM6IGxpYi9tZXJnZS50Y2w6NDUKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzQ0Cittc2dpZCAiLS1kZWZhdWx0IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCIKK21zZ3N0ciAiLS1kZWZhdWx0IGNo4buJIMSRxrDhu6NjIMOhcCBk4bulbmcgY2hvIC0tZ2V0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIHThuq1wIHRpbiBj4bqldSBow6xuaCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NjAKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGNvbmZpZyBmaWxlKHMpIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgeOG7rSBsw70gY8OhYyB04bqtcCB0aW4gY+G6pXUgaMOsbmgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzcwCittc2dpZCAiZWRpdGluZyBzdGRpbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJz4butYSBjaOG7r2EgxJHhuqd1IHJhIHRpw6p1IGNodeG6qW4gbMOgIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3MgorbXNnaWQgImVkaXRpbmcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAidmnhu4djIHPhu61hIGNo4buvYSBjw6FjIGJsb2IgbMOgIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIHThuq1wIHRpbiBj4bqldSBow6xuaCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3OTkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCi0iXG4iCi0iRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgotIlxuIgotIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgotIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKKyJjYW5ub3Qgb3ZlcndyaXRlIG11bHRpcGxlIHZhbHVlcyB3aXRoIGEgc2luZ2xlIHZhbHVlXG4iCisiICAgICAgIFVzZSBhIHJlZ2V4cCwgLS1hZGQgb3IgLS1yZXBsYWNlLWFsbCB0byBjaGFuZ2UgJXMuIgogbXNnc3RyICIiCi0iQuG6oW4gxJFhbmcg4bufIGdp4buvYSB2aeG7h2MgdGhheSDEkeG7lWkuXG4iCi0iXG4iCi0iVOG6rXAgdGluICVzIMSRw6MgYuG7iyBz4butYSDEkeG7lWkuXG4iCi0iXG4iCi0iQuG6oW4gbsOqbiBob8OgbiB0aGnhu4duIGzhuqduIGNodXnhu4NuIGdpYW8gaGnhu4duIG5heSB0csaw4bubYyBraGkgaMOyYSB0cuG7mW4uIENo4buJIGPDsyB0aOG6vyAiCi0iYuG6oW4gbeG7m2kgY8OzIHRo4buDIGLhuq90IMSR4bqndSBow7JhIHRy4buZbiBjw6FpIC5cbiIKKyJraMO0bmcgdGjhu4MgZ2hpIMSRw6ggbmhp4buBdSBnacOhIHRy4buLIHbhu5tpIG3hu5l0IGdpw6EgdHLhu4sgxJHGoW5cbiIKKyIgICAgICBEw7luZyBt4buZdCBiaeG7g3UgdGjhu6ljIGNow61uaCBxdXksIC0tYWRkIGhheSAtLXJlcGxhY2UtYWxsIMSR4buDIHRoYXkgxJHhu5VpICVzLiIKIAotIzogbGliL21lcmdlLnRjbDo1NQotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9jb25maWcuYzo4NzMgYnVpbHRpbi9jb25maWcuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBzZWN0aW9uOiAlcyIKK21zZ3N0ciAia2jDtG5nIGPDsyDEkW/huqFuOiAlcyIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTAKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorbXNnc3RyICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzoxMDAKK21zZ2lkICJwcmludCBzaXplcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtYXQiCittc2dzdHIgImhp4buDbiB0aOG7iyBrw61jaCBj4buhIHRoZW8gxJHhu4tuaCBk4bqhbmcgZMOgbmggY2hvIG5nxrDhu51pIMSR4buNYyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI2Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIFs8Y29tbWl0LWlzaD4uLi5dIgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxjw6FjIHTDuXkgY2jhu41uPl0gPGNvbW1pdC1pc2g+KiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIC0tZGlydHkiCittc2dzdHIgImdpdCBkZXNjcmliZSBbPGPDoWMgdMO5eSBjaOG7jW4+XSAtLWRpcnR5IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjIKK21zZ2lkICJoZWFkIgorbXNnc3RyICJwaMOtYSB0csaw4bubYyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAibGlnaHR3ZWlnaHQiCittc2dzdHIgImjhuqFuZyBuaOG6uSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiYW5ub3RhdGVkIgorbXNnc3RyICJjw7MgZGnhu4VuIGdp4bqjaSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgInRo4bq7IMSRw6MgxJHGsOG7o2MgZ2hpIGNow7ogJXMga2jDtG5nIHPhurVuIMSR4buDIGTDuW5nIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgInRo4bq7IMSRxrDhu6NjIGNow7ogZ2nhuqNpICVzIGtow7RuZyBjw7MgdMOqbiBuaMO6bmciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAidGjhursg4oCcJXPigJ0gxJHDoyB0aOG7sWMgc+G7sSDhu58gxJHDonkg4oCcJXPigJ0gcuG7k2kiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICJraMO0bmcgY8OzIHRo4bq7IG7DoG8ga2jhu5twIGNow61uaCB4w6FjIHbhu5tpIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGV4YWN0IG1hdGNoIG9uIHJlZnMgb3IgdGFncywgc2VhcmNoaW5nIHRvIGRlc2NyaWJlXG4iCittc2dzdHIgIktow7RuZyBjw7MgdGhhbSBjaGnhur91IGhheSB0aOG6uyBraOG7m3AgxJHDum5nLCDEkWFuZyB0w6xtIGtp4bq/bSBtw7QgdOG6o1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICJ2aeG7h2MgdMOsbSBraeG6v20gxJHDoyBr4bq/dCB0aMO6YyB04bqhaSAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDIxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCi0iXG4iCi0iRmlsZSAlcyBpcyBtb2RpZmllZC5cbiIKLSJcbiIKLSJZb3Ugc2hvdWxkIGNvbXBsZXRlIHRoZSBjdXJyZW50IGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYSBtZXJnZS4gIERvaW5nIHNvICIKLSJ3aWxsIGhlbHAgeW91IGFib3J0IGEgZmFpbGVkIG1lcmdlLCBzaG91bGQgdGhlIG5lZWQgYXJpc2UuXG4iCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKIG1zZ3N0ciAiIgotIkLhuqFuIMSRYW5nIOG7nyBnaeG7r2Egdmnhu4djIHRoYXkgxJHhu5VpLlxuIgotIlxuIgotIlThuq1wIHRpbiAlcyDEkcOjIGLhu4sgc+G7rWEgxJHhu5VpLlxuIgotIlxuIgotIkLhuqFuIG7Dqm4gaG/DoG4gdGhp4buHbiBs4bqnbiBjaHV54buDbiBnaWFvIGhp4buHbiBuYXkgdHLGsOG7m2Mga2hpIGjDsmEgdHLhu5luLiAgTMOgbSBuaMawIHbhuq15ICIKLSJnacO6cCBi4bqhbiBjw7MgdGjhu4MgbG/huqFpIGLhu48gdmnhu4djIGzhu5dpIHRyb25nIGjDsmEgdHLhu5luLlxuIgorIktow7RuZyBjw7MgdGjhursgxJHGsOG7o2MgY2jDuiBnaeG6o2kgbsOgbyDEkcaw4bujYyBtw7QgdOG6oyBsw6Ag4oCcJXPigJ0uXG4iCisiVHV5IG5oacOqbiwg4bufIMSRw6J5IGPDsyBuaOG7r25nIHRo4bq7IGtow7RuZyDEkcaw4bujYyBjaMO6IGdp4bqjaTogaMOjeSB0aOG7rSAtLXRhZ3MuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEwOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIG9mICVzIgotbXNnc3RyICIlcyB0csOqbiAlcyIKLQotIzogbGliL21lcmdlLnRjbDoxMjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKLW1zZ3N0ciAixJBhbmcgaMOyYSB0cuG7mW4gJXMgdsOgICVzLi4uIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEzMwotbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgotbXNnc3RyICJIw7JhIHRy4buZbiDEkcOjIHRo4buxYyBoaeG7h24gdGjDoG5oIGPDtG5nLiIKLQotIzogbGliL21lcmdlLnRjbDoxMzUKLW1zZ2lkICJNZXJnZSBmYWlsZWQuICBDb25mbGljdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkLiIKLW1zZ3N0ciAiSMOyYSB0cuG7mW4gZ+G6t3AgbOG7l2kuIEPhuqduIGdp4bqjaSBxdXnhur90IGPDoWMgeHVuZyDEkeG7mXQgdHLGsOG7m2MuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjE2MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1lcmdlIEludG8gJXMiCi1tc2dzdHIgIkjDsmEgdHLhu5luIHbDoG8gJXMiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTc5Ci1tc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCi1tc2dzdHIgIsSQaeG7g20gY+G6p24gaMOyYSB0cuG7mW4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MjE0CisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDI1CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDYW5ub3QgYWJvcnQgd2hpbGUgYW1lbmRpbmcuXG4iCi0iXG4iCi0iWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0LlxuIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKIG1zZ3N0ciAiIgotIktow7RuZyB0aOG7gyBo4buneSBi4buPIHRyb25nIGtoaSDEkWFuZyB0dSBi4buVLlxuIgotIlxuIgotIkLhuqFuIGPhuqduIHBo4bqjaSBob8OgbiB04bqldCB2aeG7h2MgdHUgYuG7lSBs4bqnbiBjaHV54buDbiBnaWFvIG7DoHkuXG4iCisiS2jDtG5nIGPDsyB0aOG6uyBjw7MgdGjhu4MgbcO0IHThuqMg4oCcJXPigJ0uXG4iCisiSMOjeSB0aOG7rSAtLWFsd2F5cywgaG/hurdjIHThuqFvIG3hu5l0IHPhu5EgdGjhursuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIyNAorIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmF2ZXJzZWQgJWx1IGNvbW1pdHNcbiIKK21zZ3N0ciAixJHDoyB4dXnDqm4gJWx1IHF1YSBs4bqnbiBjaHV54buDbiBnaWFvXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NTgKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkFib3J0IG1lcmdlP1xuIgotIlxuIgotIkFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgotIlxuIgotIkNvbnRpbnVlIHdpdGggYWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2U/IgorIm1vcmUgdGhhbiAlaSB0YWdzIGZvdW5kOyBsaXN0ZWQgJWkgbW9zdCByZWNlbnRcbiIKKyJnYXZlIHVwIHNlYXJjaCBhdCAlc1xuIgogbXNnc3RyICIiCi0iQsOjaSBi4buPIGjDsmEgdHLhu5luP1xuIgotIlxuIgotIkLDo2kgYuG7jyBow7JhIHRy4buZbiBoaeG7h24gbmF5IHPhur0gbMOgbSAqVOG6pFQgQ+G6oiogY8OhYyB0aGF5IMSR4buVaSBjaMawYSDEkcaw4bujYyBjaHV54buDbiBnaWFvICIKLSJi4buLIG3huqV0LlxuIgotIlxuIgotIlRp4bq/cCB04bulYyBiw6NpIGLhu48gdmnhu4djIGjDsmEgdHLhu5luIGhp4buHbiB04bqhaT8iCisidMOsbSB0aOG6pXkgbmhp4buBdSBoxqFuICVpIHRo4bq7OyDEkcOjIGxp4buHdCBrw6ogJWkgY8OhaSBn4bqnblxuIgorIsSRw6J5IG5o4bqldCBi4buPIMSRaSB0w6xtIGtp4bq/bSB04bqhaSAlc1xuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIzMAorIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJkZXNjcmliZSAlc1xuIgorbXNnc3RyICJtw7QgdOG6oyAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICJLaMO0bmcgcGjhuqNpIHTDqm4gxJHhu5FpIHTGsOG7o25nICVzIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbmVpdGhlciBhIGNvbW1pdCBub3IgYmxvYiIKK21zZ3N0ciAiJXMga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgbOG6p24gY29tbWl0IGPFqW5nIGtow7RuZyBwaOG6o2kgYmxvYiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MQorbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgInTDrG0gY8OhYyB0aOG6uyBtw6AgbsOzIMSR4bq/biB0csaw4bubYyBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUyCittc2dpZCAiZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVyciIKK21zZ3N0ciAiY2hp4bq/biBsxrDhu6NjIHTDrG0ga2nhur9tIGfhu6EgbOG7l2kgdHLDqm4gxJHhuqd1IHJhIGzhu5dpIGNodeG6qW4gc3RkZXJyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUzCittc2dpZCAidXNlIGFueSByZWYiCittc2dzdHIgImTDuW5nIHJlZiBi4bqldCBr4buzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU0Cittc2dpZCAidXNlIGFueSB0YWcsIGV2ZW4gdW5hbm5vdGF0ZWQiCittc2dzdHIgImTDuW5nIHRo4bq7IGLhuqV0IGvhu7MsIGPhuqMga2hpIOKAnHVuYW5ub3RhdGVk4oCdIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU1Cittc2dpZCAiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIKK21zZ3N0ciAibHXDtG4gZMO5bmcgxJHhu4tuaCBk4bqhbmcgZMOgaSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NgorbXNnaWQgIm9ubHkgZm9sbG93IGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiY2jhu4kgdGhlbyBjaGEgbeG6uSDEkeG6p3UgdGnDqm4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTkKK21zZ2lkICJvbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIgorbXNnc3RyICJjaOG7iSB4deG6pXQgbmjhu69uZyBnw6wga2jhu5twIGNow61uaCB4w6FjIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTYxCittc2dpZCAiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIKK21zZ3N0ciAiY29pIG5oxrAgPG4+IHRo4bq7IGfhuqduIMSRw6J5IG5o4bqldCAobeG6t2MgxJHhu4tuaDogMTApIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTYzCittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiY2jhu4kgY8OibiBuaOG6r2MgxJHhur9uIG5o4buvbmcgdGjhursga2jhu5twIHbhu5tpIDxt4bqrdT4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjUKK21zZ2lkICJkbyBub3QgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgImtow7RuZyBjb2kgcuG6sW5nIGPDoWMgdGjhursga2jhu5twIHbhu5tpIDxt4bqrdT4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjcgYnVpbHRpbi9uYW1lLXJldi5jOjUzNQorbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIHbhuq9uIHThuq90IG5oxrAgbMOgIGZhbGxiYWNrIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY4IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NzEKK21zZ2lkICJtYXJrIgorbXNnc3RyICJk4bqldSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2OQorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIKK21zZ3N0ciAidGjDqm0gPGThuqV1PiB0csOqbiBjw6J5IHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgYuG6qW4gKG3hurdjIMSR4buLbmggXCItZGlydHlcIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NzIKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGJyb2tlbiB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWJyb2tlblwiKSIKK21zZ3N0ciAidGjDqm0gPGThuqV1PiB0csOqbiBjw6J5IHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgYuG7iyBo4buPbmcgKG3hurdjIMSR4buLbmggXCItYnJva2VuXCIpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTkwCittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIi0tbG9uZyBsw6AgeHVuZyBraOG6r2MgduG7m2kgdMO5eSBjaOG7jW4gLS1hYmJyZXY9MCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYxOQorbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgY8OhYyB0w6puLCBraMO0bmcgdGjhu4MgbcO0IHThuqMgZ8OsIGPhuqMuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjcwCittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tZGlydHkgbMOgIHh1bmcga2jhuq9jIHbhu5tpIGPDoWMgdMO5eSBjaOG7jW4gY29tbWl0LWlzaCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY3MgorbXNnaWQgIi0tYnJva2VuIGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1icm9rZW4gbMOgIHh1bmcga2jhuq9jIHbhu5tpIGNvbW1pdC1pc2hlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiCittc2dzdHIgIuKAnCVz4oCdOiBraMO0bmcgcGjhuqNpIHThuq1wIHRpbiBiw6xuaCB0aMaw4budbmcgaGF5IGxpw6puIGvhur90IG3hu4FtIgorCisjOiBidWlsdGluL2RpZmYuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcHRpb246ICVzIgorbXNnc3RyICJ0w7l5IGNo4buNbiBraMO0bmcgaOG7o3AgbOG7hzogJXMiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM1MAorbXNnaWQgIk5vdCBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICJLaMO0bmcgcGjhuqNpIGzDoCBraG8gZ2l0IgorCisjOiBidWlsdGluL2RpZmYuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyDEkcOjIGNobyDigJwlc+KAnSBraMO0bmcgaOG7o3AgbOG7hy4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIgorbXNnc3RyICLEkcOjIGNobyBuaGnhu4F1IGjGoW4gaGFpIMSR4buRaSB0xrDhu6NuZyBibG9iOiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9kaWZmLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIsSRw6MgY2hvIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgdGjhu4MgbuG6r20gZ2nhu68g4oCcJXPigJ0uIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAKK21zZ2lkICJnaXQgZGlmZnRvb2wgWzxvcHRpb25zPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgZGlmZnRvb2wgWzxjw6FjIHTDuXkgY2jhu41uPl0gWzxs4bqnbl9jaHV54buDbl9naWFvPiBbPGzhuqduX2NodXnhu4NuX2dpYW8+XV0gWy0tXSA8LyIKKyLEkcaw4budbmcvZOG6q24+4oCmXSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQ6ICVkIgorbXNnc3RyICJn4bq3cCBs4buXaTogJWQiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBsacOqbiBr4bq/dCBt4buBbSAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rIGZpbGUgJXMiCittc2dzdHIgImtow7RuZyDEkeG7jWMgxJHGsOG7o2MgdOG6rXAgdGluIGxpw6puIGvhur90IG3hu4FtICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyBmb3Igc3ltbGluayAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyDEkeG7kWkgdMaw4bujbmcgJXMgY2hvIGxpw6puIGvhur90IG3hu4FtICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NDEzCiBtc2dpZCAiIgotIlJlc2V0IGNoYW5nZXM/XG4iCi0iXG4iCi0iUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgotIlxuIgotIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgorImNvbWJpbmVkIGRpZmYgZm9ybWF0cygnLWMnIGFuZCAnLS1jYycpIGFyZSBub3Qgc3VwcG9ydGVkIGluXG4iCisiZGlyZWN0b3J5IGRpZmYgbW9kZSgnLWQnIGFuZCAnLS1kaXItZGlmZicpLiIKIG1zZ3N0ciAiIgotIsSQ4bq3dCBs4bqhaSBt4buNaSB0aGF5IMSR4buVaT9cbiIKLSJcbiIKLSJWaeG7h2MgxJHhurd0IGzhuqFpIGPDoWMgdGhheSDEkeG7lWkgc+G6vSBsw6BtICpN4buMSSogdGhheSDEkeG7lWkgY2jGsGEgY2h1eeG7g24gZ2lhbyBiaeG6v24gbeG6pXQuXG4iCi0iXG4iCi0iVuG6q24gdGnhur9wIHThu6VjIMSR4bq3dCBs4bqhaSBjw6FjIHRoYXkgxJHhu5VpIGhp4buHbiB04bqhaT8iCisiY8OhYyDEkeG7i25oIGThuqFuZyBkaWZmIHThu5UgaOG7o3Ao4oCcLWPigJ0gdsOgIOKAnC0tY2PigJ0pIGNoxrBhIMSRxrDhu6NjIGjhu5cgdHLhu6MgdHJvbmdcbiIKKyJjaOG6vyDEkeG7mSBkaWZmIHRoxrAgbeG7pWMo4oCcLWTigJ0gdsOgIOKAnC0tZGlyLWRpZmbigJ0pLiIKIAotIzogbGliL21lcmdlLnRjbDoyNDEKLW1zZ2lkICJBYm9ydGluZyIKLW1zZ3N0ciAiQsOjaSBi4buPIgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJib3RoIGZpbGVzIG1vZGlmaWVkOiAnJXMnIGFuZCAnJXMnLiIKK21zZ3N0ciAiY+G6oyBoYWkgdOG6rXAgdGluIMSRw6MgYuG7iyBz4butYTog4oCcJXPigJ0gdsOgIOKAnCVz4oCdLiIKIAotIzogbGliL21lcmdlLnRjbDoyNDEKLW1zZ2lkICJmaWxlcyByZXNldCIKLW1zZ3N0ciAixJHhurd0IGzhuqFpIGPDoWMgdOG6rXAgdGluIgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNgorbXNnaWQgIndvcmtpbmcgdHJlZSBmaWxlIGhhcyBiZWVuIGxlZnQuIgorbXNnc3RyICJjw6J5IGzDoG0gdmnhu4djIOG7nyBiw6puIHRyw6FpLiIKIAotIzogbGliL21lcmdlLnRjbDoyNjkKLW1zZ2lkICJBYm9ydCBmYWlsZWQuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgYsOjaSBi4buPLiIKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcG9yYXJ5IGZpbGVzIGV4aXN0IGluICclcycuIgorbXNnc3RyICJjw6FjIHThuq1wIHRpbiB04bqhbSDEkcOjIHPhurVuIGPDsyB0cm9uZyDigJwlc+KAnS4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjcxCi1tc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgotbXNnc3RyICLEkMOjIGLDo2kgYuG7jyB4b25nLiAgU+G6tW4gc8OgbmcuIgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0OAorbXNnaWQgInlvdSBtYXkgd2FudCB0byBjbGVhbnVwIG9yIHJlY292ZXIgdGhlc2UuIgorbXNnc3RyICJi4bqhbiBjw7MgbOG6vSBtdeG7kW4gZOG7jW4gZOG6uXAgaGF5IHBo4bulYyBo4buTaSDhu58gxJHDonkuIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo4Ci1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKLW1zZ3N0ciAiQnXhu5ljIHBow6JuIGdp4bqjaSB0aMOgbmggbmjDoW5oIGPGoSBz4bufPyIKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTcKK21zZ2lkICJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIKK21zZ3N0ciAiZMO5bmcg4oCcZGlmZi5ndWl0b29s4oCcIHRoYXkgdsOsIGTDuW5nIOKAnGRpZmYudG9vbOKAnCIKIAotIzogbGliL21lcmdldG9vbC50Y2w6OQotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhpcyBicmFuY2g/IgotbXNnc3RyICJCdeG7mWMgcGjDom4gZ2nhuqNpIHRow6BuaCBuaMOhbmggbsOgeT8iCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njk5Cittc2dpZCAicGVyZm9ybSBhIGZ1bGwtZGlyZWN0b3J5IGRpZmYiCittc2dzdHIgInRo4buxYyBoaeG7h24gbeG7mXQgZGlmZiB0b8OgbiB0aMawIG3hu6VjIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxMAotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIG90aGVyIGJyYW5jaD8iCi1tc2dzdHIgIkJ14buZYyBwaMOibiBnaeG6o2kgdGjDoG5oIG5ow6FuaCBraMOhYz8iCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzAxCittc2dpZCAiZG8gbm90IHByb21wdCBiZWZvcmUgbGF1bmNoaW5nIGEgZGlmZiB0b29sIgorbXNnc3RyICLEkeG7q25nIG5o4bqvYyBraGkga2jhu59pIGNo4bqheSBjw7RuZyBj4bulIGRpZmYiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA2Cittc2dpZCAidXNlIHN5bWxpbmtzIGluIGRpci1kaWZmIG1vZGUiCittc2dzdHIgImTDuW5nIGxpw6puIGvhur90IG3hu4FtIHRyb25nIGRpZmYtdGjGsC1t4bulYyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNworbXNnaWQgInRvb2wiCittc2dzdHIgImPDtG5nIGPhu6UiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDgKK21zZ2lkICJ1c2UgdGhlIHNwZWNpZmllZCBkaWZmIHRvb2wiCittc2dzdHIgImTDuW5nIGPDtG5nIGPhu6UgZGlmZiDEkcOjIGNobyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxMAorbXNnaWQgInByaW50IGEgbGlzdCBvZiBkaWZmIHRvb2xzIHRoYXQgbWF5IGJlIHVzZWQgd2l0aCBgLS10b29sYCIKK21zZ3N0ciAiaW4gcmEgZGFuaCBzw6FjaCBjw6FjIGPDtG5nIGPhu6UgZGlmIGPDoWkgbcOgIGPDsyB0aOG6uyBkw7luZyB24bubaSDigJwtLXRvb2zigJwiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTMKIG1zZ2lkICIiCi0iTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKLSJcbiIKLSIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgotIlxuIgotIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCisibWFrZSAnZ2l0LWRpZmZ0b29sJyBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbiAtIHplcm8gZXhpdCAiCisiY29kZSIKIG1zZ3N0ciAiIgotIkNow7ogw70gbMOgIGRpZmYgY2jhu4kgaGnhu4NuIHRo4buLIG5o4buvbmcgdGhheSDEkeG7lWkgeHVuZyDEkeG7mXQuXG4iCi0iXG4iCi0iJXMgc+G6vSBi4buLIGdoaSDEkcOoLlxuIgotIlxuIgotIlRoYW8gdMOhYyBuw6B5IGNo4buJIGPDsyB0aOG7gyBi4buPIGThu58gYuG6sW5nIGPDoWNoIGto4bufaSDEkeG7mW5nIGzhuqFpIHZp4buHYyBow7JhIHRy4buZbi4iCisibMOgbSBjaG8g4oCcZ2l0LWRpZmZ0b29s4oCdIHRob8OhdCBraGkgZ+G7jWkgY8O0bmcgY+G7pSBkaWZmIHRy4bqjIHbhu4EgbcOjIGtow7RuZyBwaOG6o2kgc+G7kSAiCisia2jDtG5nIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxNgorbXNnaWQgInNwZWNpZnkgYSBjdXN0b20gY29tbWFuZCBmb3Igdmlld2luZyBkaWZmcyIKK21zZ3N0ciAiY2jhu4kgxJHhu4tuaCBt4buZdCBs4buHbmggdMO5eSDDvSDEkeG7gyB4ZW0gZGlmZiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxNworbXNnaWQgInBhc3NlZCB0byBgZGlmZmAiCittc2dzdHIgImNodXnhu4NuIGNobyDigJxkaWZm4oCdIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzMyCittc2dpZCAiZGlmZnRvb2wgcmVxdWlyZXMgd29ya3RyZWUgb3IgLS1uby1pbmRleCIKK21zZ3N0ciAiZGlmZnRvb2wgY+G6p24gY8OieSBsw6BtIHZp4buHYyBob+G6t2MgLS1uby1pbmRleCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjczOQorbXNnaWQgIi0tZGlyLWRpZmYgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiLS1kaXItZGlmZiB4dW5nIGto4bqvYyB24bubaSAtLW5vLWluZGV4IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzQyCittc2dpZCAiLS1ndWksIC0tdG9vbCBhbmQgLS1leHRjbWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1ndWksIC0tdG9vbCB2w6AgLS1leHRjbWQgbG/huqFpIHThu6sgbOG6q24gbmhhdSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1MAorbXNnaWQgIm5vIDx0b29sPiBnaXZlbiBmb3IgLS10b29sPTx0b29sPiIKK21zZ3N0ciAiY2jGsGEgxJHGsGEgcmEgPGPDtG5nX2Phu6U+IGNobyAtLXRvb2w9PGPDtG5nX2Phu6U+IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzU3Cittc2dpZCAibm8gPGNtZD4gZ2l2ZW4gZm9yIC0tZXh0Y21kPTxjbWQ+IgorbXNnc3RyICJjaMawYSDEkcawYSByYSA8bOG7h25oPiBjaG8gLS1leHRjbWQ9PGzhu4duaD4iCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2Cittc2dpZCAiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPG9wdGlvbnM+IDxlbnYtdmFyPiIKK21zZ3N0ciAiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPGPDoWMgdMO5eSBjaOG7jW4+IDxlbnYtdmFyPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjM3IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgInR5cGUiCittc2dzdHIgImtp4buDdSIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQxCittc2dpZCAiZGVmYXVsdCBmb3IgZ2l0X2Vudl8qKC4uLikgdG8gZmFsbCBiYWNrIG9uIgorbXNnc3RyICJt4bq3YyDEkeG7i25oIGNobyBnaXRfZW52XyooLi4uKSDEkeG7gyBxdWF5IHbhu4EiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MworbXNnaWQgImJlIHF1aWV0IG9ubHkgdXNlIGdpdF9lbnZfKigpIHZhbHVlIGFzIGV4aXQgY29kZSIKK21zZ3N0ciAiaW0gbOG6t25nIGNo4buJIGtoaSBkdW5nIGdpw6EgdHLhu4sgZ2l0X2Vudl8qKCkgbMOgbSBtw6MgdGhvw6F0IgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYSBib29sZWFuIHZhbHVlIHdpdGggYC0tdHlwZT1ib29sYCwgbm90IGAlc2AiCiBtc2dzdHIgIiIKLSJU4bqtcCB0aW4gJXMgY8OzIHbhursgY2jGsGEgxJHGsOG7o2MgZ2nhuqNpIHF1eeG6v3QgeHVuZyDEkeG7mXQsIHbhuqtuIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gY2h1eeG7g24gIgotImdpYW8/IgorInTDuXkgY2jhu41uIGAtLWRlZmF1bHQnIGPhuqduIG3hu5l0IGdpw6EgdHLhu4sgbG9naWMgduG7m2kgYC0tdHlwZT1ib29sYCwga2jDtG5nIHBo4bqjaSBgJXNgIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKLW1zZ3N0ciAixJBhbmcgcGjDom4gZ2nhuqNpIGNobyAlcyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MTQxCi1tc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpIHh1bmcgxJHhu5l0IHjDs2EgaGF5IGxpw6puIGvhur90IGTDuW5nIG3hu5l0IGPDtG5nIGPhu6UiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0NgotbXNnaWQgIkNvbmZsaWN0IGZpbGUgZG9lcyBub3QgZXhpc3QiCi1tc2dzdHIgIlThuq1wIHRpbiB4dW5nIMSR4buZdCBraMO0bmcgdOG7k24gdOG6oWkiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjI0NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgotbXNnc3RyICJLaMO0bmcgcGjhuqNpIGzDoCBt4buZdCBjw7RuZyBj4bulIGjDsmEgdHLhu5luIEdVSTogJyVzJyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6Mjc1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgotbXNnc3RyICJLaMO0bmcgaOG7lyB0cuG7oyBjw7RuZyBj4bulIHRy4buZbiAnJXMnIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozMTAKLW1zZ2lkICJNZXJnZSB0b29sIGlzIGFscmVhZHkgcnVubmluZywgdGVybWluYXRlIGl0PyIKLW1zZ3N0ciAiQ8O0bmcgY+G7pSBow7JhIHRy4buZbiDEkWFuZyBjaOG6oXkgcuG7k2ksIGNo4bqlbSBk4bupdCBuw7M/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozMzAKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo3NworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiIKLSIlcyIKKyJvcHRpb24gYC0tZGVmYXVsdCcgZXhwZWN0cyBhbiB1bnNpZ25lZCBsb25nIHZhbHVlIHdpdGggYC0tdHlwZT11bG9uZ2AsIG5vdCBgIgorIiVzYCIKIG1zZ3N0ciAiIgotIkfhurdwIGzhu5dpIGtoaSB0cnV5IGzhuqFpIHBoacOqbiBi4bqjbjpcbiIKLSIlcyIKKyJ0w7l5IGNo4buNbiBgLS1kZWZhdWx0JyBj4bqnbiBt4buZdCBnacOhIHRy4buLIHPhu5Egbmd1ecOqbiBkw6BpIGtow7RuZyBk4bqldSB24bubaSBgLS0iCisidHlwZT11bG9uZ2AsIGtow7RuZyBwaOG6o2kgYCVzYCIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzUwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIkNvdWxkIG5vdCBzdGFydCB0aGUgbWVyZ2UgdG9vbDpcbiIKLSJcbiIKLSIlcyIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyOQorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo4NTMKK21zZ2lkICJFcnJvcjogQ2Fubm90IGV4cG9ydCBuZXN0ZWQgdGFncyB1bmxlc3MgLS1tYXJrLXRhZ3MgaXMgc3BlY2lmaWVkLiIKK21zZ3N0ciAiTOG7l2k6IGtow7RuZyB0aOG7gyB4deG6pXQgdGjhursgbOG7k25nIG5oYXUgdHLhu6sga2hpIC0tbWFyay10YWdzIMSRxrDhu6NjIGNo4buJIMSR4buLbmguIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgYWZ0ZXIgPG4+IG9iamVjdHMiCittc2dzdHIgImhp4buDbiB0aOG7iyB0aeG6v24gdHJp4buDbiBzYXUgPG4+IMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTQKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgImNo4buNbiDEkWnhu4F1IGtoaeG7g24gY+G7p2EgdGjhursgxJHDoyBrw70iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU3Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAiY2jhu41uIHPhu7EgeOG7rSBsw70gY+G7p2EgY8OhYyB0aOG6uywgY8OhaSBtw6AgxJHDoW5oIHRo4bq7IGPDoWMgxJHhu5FpIHTGsOG7o25nIMSRxrDhu6NjIGzhu41jIHJhIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MAorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBjb21taXQgbWVzc2FnZXMgaW4gYW4gYWx0ZXJuYXRlIGVuY29kaW5nIgogbXNnc3RyICIiCi0iS2jDtG5nIHRo4buDIGto4bufaSBjaOG6oXkgY8O0bmcgY+G7pSBow7JhIHRy4buZbjpcbiIKLSJcbiIKLSIlcyIKKyJjaOG7jW4gYuG7mSB44butIGzDvSBjaG8gY8OhYyBnaGkgY2jDuiBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIHRoZW8gbeG7mXQgYuG7mSBtw6MgdGhheSB0aOG6vyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzU0Ci1tc2dpZCAiUnVubmluZyBtZXJnZSB0b29sLi4uIgotbXNnc3RyICLEkGFuZyBjaOG6oXkgY8O0bmcgY+G7pSB0cuG7mW4uLi4iCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MworbXNnaWQgIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIgorbXNnc3RyICLEkOG7lSBjw6FjIMSRw6FuaCBk4bqldSBuw6B5IHbDoG8gdOG6rXAtdGluIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozODIgbGliL21lcmdldG9vbC50Y2w6MzkwCi1tc2dpZCAiTWVyZ2UgdG9vbCBmYWlsZWQuIgotbXNnc3RyICJDw7RuZyBj4bulIHRy4buZbiBn4bq3cCBs4buXaS4iCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2NQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSIKK21zZ3N0ciAiTmjhuq1wIHbDoG8gxJHDoW5oIGThuqV1IHThu6sgdOG6rXAgdGluIG7DoHkiCiAKLSM6IGxpYi9vcHRpb24udGNsOjExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKLW1zZ3N0ciAiQuG6o25nIG3DoyB0b8OgbiBj4bulYyBraMO0bmcgaOG7o3AgbOG7hyAnJXMnIgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjkKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUgaWYgaXQgZXhpc3RzIgorbXNnc3RyICJOaOG6rXAgdsOgbyDEkcOhbmggZOG6pXUgdOG7qyB04bqtcCB0aW4gc+G6tW4gY8OzIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgcmVwbyBlbmNvZGluZyAnJXMnIgotbXNnc3RyICJC4bqjbmcgbcOjIGtobyBjaOG7qWEga2jDtG5nIGjhu6NwIGzhu4cgJyVzJyIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTcxCittc2dpZCAiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiCittc2dzdHIgIkzDoG0gZ2nhuqMgbeG7mXQgY8OhaSB0aOG6uyBraGkgdGjhursgYuG7iyB0aGnhur91IG3hu5l0IGPDoWkiCiAKLSM6IGxpYi9vcHRpb24udGNsOjExOQotbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCi1tc2dzdHIgIlBo4bulYyBo4buTaSB0aMOgbmggbeG6t2MgxJHhu4tuaCIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTczCittc2dpZCAiT3V0cHV0IGZ1bGwgdHJlZSBmb3IgZWFjaCBjb21taXQiCittc2dzdHIgIlh14bqldCByYSB0b8OgbiBi4buZIGPDonkgY2hvIG3hu5dpIGzhuqduIGNodXnhu4NuIGdpYW8iCiAKLSM6IGxpYi9vcHRpb24udGNsOjEyMwotbXNnaWQgIlNhdmUiCi1tc2dzdHIgIkdoaSBs4bqhaSIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc1Cittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgIlPhu60gZOG7pW5nIHTDrW5oIG7Eg25nIGRvbmUgxJHhu4MgY2jhuqVtIGThu6l0IGx14buTbmcgZOG7ryBsaeG7h3UiCiAKLSM6IGxpYi9vcHRpb24udGNsOjEzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIFJlcG9zaXRvcnkiCi1tc2dzdHIgIiVzIGtobyIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc2Cittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICJC4buPIHF1YSBr4bq/dCB4deG6pXQgY+G7p2EgZOG7ryBsaeG7h3UgYmxvYiIKIAotIzogbGliL29wdGlvbi50Y2w6MTM0Ci1tc2dpZCAiR2xvYmFsIChBbGwgUmVwb3NpdG9yaWVzKSIKLW1zZ3N0ciAiVG/DoG4gY+G7pWMgKE3hu41pIGtobykiCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NyBidWlsdGluL2xvZy5jOjE3MDUKK21zZ2lkICJyZWZzcGVjIgorbXNnc3RyICJyZWZzcGVjIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDAKLW1zZ2lkICJVc2VyIE5hbWUiCi1tc2dzdHIgIlTDqm4gbmfGsOG7nWkgZMO5bmciCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OAorbXNnaWQgIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIKK21zZ3N0ciAiw4FwIGThu6VuZyByZWZzcGVjIGNobyByZWZzIMSRw6MgeHXhuqV0IgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDEKLW1zZ2lkICJFbWFpbCBBZGRyZXNzIgotbXNnc3RyICLEkOG7i2EgY2jhu4kgdGjGsCDEkWnhu4duIHThu60iCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OQorbXNnaWQgImFub255bWl6ZSBvdXRwdXQiCittc2dzdHIgImvhur90IHh14bqldCBhbm9ueW1pemUiCiAKLSM6IGxpYi9vcHRpb24udGNsOjE0MwotbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgotbXNnc3RyICJU4buVbmcgaOG7o3AgduG7gSBow7JhIHRy4buZbiBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0NAotbXNnaWQgIk1lcmdlIFZlcmJvc2l0eSIKLW1zZ3N0ciAiQ2hpIHRp4bq/dCB2aeG7h2MgaMOyYSB0cuG7mW4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0NQotbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCi1tc2dzdHIgIkhp4buDbiB0aOG7iyB0aOG7kW5nIGvDqiBraMOhYyBiaeG7h3Qgc2F1IGjDsmEgdHLhu5luIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDYKLW1zZ2lkICJVc2UgTWVyZ2UgVG9vbCIKLW1zZ3N0ciAiRMO5bmcgQ8O0bmcgY+G7pSB0cuG7mW4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0OAotbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCi1tc2dzdHIgIlRpbiBk4bqldSB24bq/dCB0aOG7nWkgZ2lhbiBz4butYSDEkeG7lWkgdOG6rXAgdGluIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDkKLW1zZ2lkICJQcnVuZSBUcmFja2luZyBCcmFuY2hlcyBEdXJpbmcgRmV0Y2giCi1tc2dzdHIgIljDqW4gY8OhYyBuaMOhbmggdGhlbyBkw7VpIHRyb25nIGtoaSBs4bqleSB24buBIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTAKLW1zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2hlcyIKLW1zZ3N0ciAiS2jhu5twIG5ow6FuaCB0aGVvIGTDtWkiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MQotbXNnaWQgIlVzZSBUZXh0Y29udiBGb3IgRGlmZnMgYW5kIEJsYW1lcyIKLW1zZ3N0ciAiRMO5bmcgVGV4dGNvbnYgQ2hvIERpZmZzIHbDoCBCbGFtZXMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MgotbXNnaWQgIkJsYW1lIENvcHkgT25seSBPbiBDaGFuZ2VkIEZpbGVzIgotbXNnc3RyICJDaOG7iSBjaMOpcCBibGFtZSB0csOqbiBjw6FjIHThuq1wIHRpbiB0aGF5IMSR4buVaSIKLQotIzogbGliL29wdGlvbi50Y2w6MTUzCi1tc2dpZCAiTWF4aW11bSBMZW5ndGggb2YgUmVjZW50IFJlcG9zaXRvcmllcyBMaXN0IgotbXNnc3RyICJT4buRIGzGsOG7o25nIGtobyBt4bubaSBkw7luZyB04buRaSDEkWEgxJHGsOG7o2MgbMawdSB0cuG7ryIKLQotIzogbGliL29wdGlvbi50Y2w6MTU0Ci1tc2dpZCAiTWluaW11bSBMZXR0ZXJzIFRvIEJsYW1lIENvcHkgT24iCi1tc2dzdHIgIkNo4buvIHThu5FpIHRoaeG7g3UgxJHhu4MgYmxhbWUgY2jDqXAgdsOgbyIKLQotIzogbGliL29wdGlvbi50Y2w6MTU1Ci1tc2dpZCAiQmxhbWUgSGlzdG9yeSBDb250ZXh0IFJhZGl1cyAoZGF5cykiCi1tc2dzdHIgIkLDoW4ga8Otbmggbmfhu68gY+G6o25oIGzhu4tjaCBz4butIGJsYW1lIChuZ8OgeSkiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1NgotbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCi1tc2dzdHIgIlPhu5EgZMOybmcgbuG7mWkgZHVuZyBEaWZmIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTcKLW1zZ2lkICJBZGRpdGlvbmFsIERpZmYgUGFyYW1ldGVycyIKLW1zZ3N0ciAixJDhu5FpIHPhu5EgYuG7lSB4dW5nIGNobyBEaWZmIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTgKLW1zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgotbXNnc3RyICJDaGnhu4F1IHLhu5luZyBj4bunYSBwaOG6p24gY2jDuiB0aMOtY2giCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1OQotbXNnaWQgIk5ldyBCcmFuY2ggTmFtZSBUZW1wbGF0ZSIKLW1zZ3N0ciAiTeG6q3UgdMOqbiBuaMOhbmggbeG7m2kiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE2MAotbXNnaWQgIkRlZmF1bHQgRmlsZSBDb250ZW50cyBFbmNvZGluZyIKLW1zZ3N0ciAiQuG6o25nIG3DoyBkw6BuaCBjaG8gbuG7mWkgZHVuZyB04bqtcCB0aW4gbeG6t2MgxJHhu4tuaCIKLQotIzogbGliL29wdGlvbi50Y2w6MTYxCi1tc2dpZCAiV2FybiBiZWZvcmUgY29tbWl0dGluZyB0byBhIGRldGFjaGVkIGhlYWQiCi1tc2dzdHIgIkPhuqNuaCBiw6FvIHRyxrDhu5tjIGtoaSBjaHV54buDbiBnaWFvIG3hu5l0IMSR4bqndSBi4buLIHTDoWNoIHLhu51pIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNjIKLW1zZ2lkICJTdGFnaW5nIG9mIHVudHJhY2tlZCBmaWxlcyIKLW1zZ3N0ciAixJDDoW5oIGThuqV1IG5o4buvbmcgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSBsw6AgY+G6p24gY2h1eeG7g24gZ2lhbyIKLQotIzogbGliL29wdGlvbi50Y2w6MTYzCi1tc2dpZCAiU2hvdyB1bnRyYWNrZWQgZmlsZXMiCi1tc2dzdHIgIkhp4buHbiBjw6FjIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkiCi0KLSM6IGxpYi9vcHRpb24udGNsOjIwOQotbXNnaWQgIkNoYW5nZSIKLW1zZ3N0ciAiVGhheSDEkeG7lWkiCi0KLSM6IGxpYi9vcHRpb24udGNsOjI1MwotbXNnaWQgIlNwZWxsaW5nIERpY3Rpb25hcnk6IgotbXNnc3RyICJU4burIMSRaeG7g24gY2jDrW5oIHThuqM6IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyODMKLW1zZ2lkICJDaGFuZ2UgRm9udCIKLW1zZ3N0ciAixJDhu5VpIHBow7RuZyBjaOG7ryIKLQotIzogbGliL29wdGlvbi50Y2w6Mjg3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hvb3NlICVzIgotbXNnc3RyICJDaOG7jW4gJXMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjI5MwotbXNnaWQgInB0LiIKLW1zZ3N0ciAicHQuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDozMDcKLW1zZ2lkICJQcmVmZXJlbmNlcyIKLW1zZ3N0ciAiQ8OhIG5ow6JuIGjDs2EiCi0KLSM6IGxpYi9vcHRpb24udGNsOjM0NAotbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBob8OgbiB04bqldCBnaGkgbOG6oWkgY8OhYyB0w7l5IGNo4buNbjoiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyMAotbXNnaWQgIkFkZCBSZW1vdGUiCi1tc2dzdHIgIlRow6ptIG3DoXkgY2jhu6ciCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyNQotbXNnaWQgIkFkZCBOZXcgUmVtb3RlIgotbXNnc3RyICJUaMOqbSBtw6F5IGNo4bunIG3hu5tpIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzAgbGliL3Rvb2xzX2RsZy50Y2w6MzcKLW1zZ2lkICJBZGQiCi1tc2dzdHIgIlRow6ptIHbDoG8iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDozOQotbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgotbXNnc3RyICJDaGkgdGnhur90IHbhu4EgbcOheSBjaOG7pyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjUwCi1tc2dpZCAiTG9jYXRpb246IgotbXNnc3RyICJW4buLIHRyw606IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjAKLW1zZ2lkICJGdXJ0aGVyIEFjdGlvbiIKLW1zZ3N0ciAiSMOgbmggxJHhu5luZyB0aMOqbSIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjYzCi1tc2dpZCAiRmV0Y2ggSW1tZWRpYXRlbHkiCi1tc2dzdHIgIkzhuqV5IHbhu4EgbmdheSBs4bqtcCB04bupYyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjY5Ci1tc2dpZCAiSW5pdGlhbGl6ZSBSZW1vdGUgUmVwb3NpdG9yeSBhbmQgUHVzaCIKLW1zZ3N0ciAiS2jhu59pIHThuqFvIEtobyBtw6F5IGNo4bunIHbDoCDEkeG6qXkgZOG7ryBsaeG7h3UgbMOqbiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjc1Ci1tc2dpZCAiRG8gTm90aGluZyBFbHNlIE5vdyIKLW1zZ3N0ciAiS2jDtG5nIGzDoG0gZ8OsIGPhuqMiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMDAKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgcmVtb3RlIG5hbWUuIgotbXNnc3RyICJIw6N5IGN1bmcgY+G6pXAgdMOqbiBtw6F5IGNo4bunLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjExMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgcmVtb3RlIG5hbWUuIgotbXNnc3RyICInJXMnIGtow7RuZyBwaOG6o2kgbMOgIHTDqm4gbcOheSBjaOG7pyDEkcaw4bujYyBjaOG6pXAgbmjhuq1uLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEyNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBhZGQgcmVtb3RlICclcycgb2YgbG9jYXRpb24gJyVzJy4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB0aMOqbSBtw6F5IGNo4bunICclcycgY+G7p2EgduG7iyB0csOtICclcycuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMyIGxpYi90cmFuc3BvcnQudGNsOjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmZXRjaCAlcyIKLW1zZ3N0ciAibOG6pXkgduG7gSAlcyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nIHRoZSAlcyIKLW1zZ3N0ciAixJBhbmcgbOG6pXkgduG7gSAlcyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE1NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRvIG5vdCBrbm93IGhvdyB0byBpbml0aWFsaXplIHJlcG9zaXRvcnkgYXQgbG9jYXRpb24gJyVzJy4iCi1tc2dzdHIgIktow7RuZyBoaeG7g3UgbMOgbSB0aOG6vyBuw6BvIMSR4buDIGto4bufaSB04bqhbyBraG8gY2jhu6lhIHThuqFpIHbhu4sgdHLDrSAnJXMnLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MiBsaWIvdHJhbnNwb3J0LnRjbDo1NCBsaWIvdHJhbnNwb3J0LnRjbDo5MgotIzogbGliL3RyYW5zcG9ydC50Y2w6MTEwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAicHVzaCAlcyIKLW1zZ3N0ciAixJHhuql5ICVzIGzDqm4gbcOheSBjaOG7pyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgdXAgdGhlICVzIChhdCAlcykiCi1tc2dzdHIgIkPDoGkgxJHhurd0ICclcycgKHThuqFpICVzKSIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM0Ci1tc2dpZCAiRGVsZXRlIEJyYW5jaCBSZW1vdGVseSIKLW1zZ3N0ciAiWMOzYSBuaMOhbmggdHLDqm4gbcOheSBjaOG7pyIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0OAotbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKLW1zZ3N0ciAiVOG7qyBLaG8iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTEgbGliL3RyYW5zcG9ydC50Y2w6MTY1Ci1tc2dpZCAiUmVtb3RlOiIKLW1zZ3N0ciAiTcOheSBjaOG7pzoiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NzIgbGliL3RyYW5zcG9ydC50Y2w6MTg3Ci1tc2dpZCAiQXJiaXRyYXJ5IExvY2F0aW9uOiIKLW1zZ3N0ciAixJDhu4thIMSRaeG7g20gdMO5eSDDvToiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6ODgKLW1zZ2lkICJCcmFuY2hlcyIKLW1zZ3N0ciAiTmjDoW5oIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMAotbXNnaWQgIkRlbGV0ZSBPbmx5IElmIgotbXNnc3RyICJDaOG7iSB4b8OhIE7hur91IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMgotbXNnaWQgIk1lcmdlZCBJbnRvOiIKLW1zZ3N0ciAixJDDoyB0cuG7mW4gdsOgbzoiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTUzCi1tc2dpZCAiQSBicmFuY2ggaXMgcmVxdWlyZWQgZm9yICdNZXJnZWQgSW50bycuIgotbXNnc3RyICJD4bqnbiBt4buZdCBuaMOhbmggY2hvICdIw7JhIHRy4buZbiB2w6BvJy4iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOlxuIgotIlxuIgotIiAtICVzIgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODEKK21zZ2lkICJSZWZlcmVuY2UgcGFyZW50cyB3aGljaCBhcmUgbm90IGluIGZhc3QtZXhwb3J0IHN0cmVhbSBieSBvYmplY3QgaWQiCiBtc2dzdHIgIiIKLSJDw6FjIG5ow6FuaCBzYXUgxJHDonkga2jDtG5nIMSRxrDhu6NjIGjDsmEgdHLhu5luIGhvw6BuIHRvw6BuIHbDoG8gJXM6XG4iCi0iXG4iCi0iIC0gJXMiCisiQ8OhYyBjaGEgbeG6uSB0aGFtIGNoaeG6v3UgY8OhaSBtw6AgayB0cm9uZyBsdeG7k25nIGThu68gbGnhu4d1IGZhc3QtZXhwb3J0IGLhu59pIG3DoyBpZCDEkeG7kWkgIgorInTGsOG7o25nIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE5MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKLSJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKLW1zZ3N0ciAiIgotIk3hu5l0IGhheSBuaGnhu4F1IGjGoW4ga2nhu4NtIHRyYSBow7JhIHRy4buZbiBraMO0bmcgxJHhuqF0IGLhu59pIHbDrCBi4bqhbiDEkcOjIGtow7RuZyBs4bqleSB24buBICIKLSJuaOG7r25nIGzhuqduIGNodXnhu4NuIGdpYW8gY+G6p24gdGhp4bq/dC4gSMOjeSBs4bqleSB24buBIHThu6sgJXMgdHLGsOG7m2MgxJHDoy4iCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MworbXNnaWQgIlNob3cgb3JpZ2luYWwgb2JqZWN0IGlkcyBvZiBibG9icy9jb21taXRzIgorbXNnc3RyICJIaeG7g24gdGjhu4sgY8OhYyBtw6MgaWQgbmd1ecOqbiBn4buRYyBj4bunYSBibG9icy9jb21taXRzIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwOAotbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKLW1zZ3N0ciAiWGluIGjDo3kgY2jhu41uIG3hu5l0IGhheSBuaGnhu4F1IG5ow6FuaCBj4bqnbiB4w7NhLiIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTg1Cittc2dpZCAiTGFiZWwgdGFncyB3aXRoIG1hcmsgaWRzIgorbXNnc3RyICJH4bqvbiBuaMOjbiB0aOG6uyBJRCBk4bqldSIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgotbXNnc3RyICLEkGFuZyB4b8OhIGPDoWMgbmjDoW5oIHThu6sgJXMiCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTIyMAorbXNnaWQgIkNhbm5vdCBwYXNzIGJvdGggLS1pbXBvcnQtbWFya3MgYW5kIC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGNodXnhu4NuIHF1YSBj4bqjIGhhaSAtLWltcG9ydC1tYXJrcyB2w6AgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjMwMAotbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgotbXNnc3RyICJDaMawYSBjaOG7jW4ga2hvLiIKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNAorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8a2hvLWNo4bupYT4gWzxyZWZzcGVjPuKApl1dIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjMwNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNjYW5uaW5nICVzLi4uIgotbXNnc3RyICLEkGFuZyBxdcOpdDogJXMuLi4iCisjOiBidWlsdGluL2ZldGNoLmM6MzUKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8bmjDs20+IgogCi0jOiBsaWIvcmVtb3RlLnRjbDoyMDAKLW1zZ2lkICJQdXNoIHRvIgotbXNnc3RyICLEkOG6qXkgbMOqbiIKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNgorbXNnaWQgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbKDxraG8+IHwgPG5ow7NtPinigKZdIgogCi0jOiBsaWIvcmVtb3RlLnRjbDoyMTgKLW1zZ2lkICJSZW1vdmUgUmVtb3RlIgotbXNnc3RyICJH4buhIGLhu48gTcOheSBjaOG7pyIKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNworbXNnaWQgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tYWxsIFs8Y8OhYyB0w7l5IGNo4buNbj5dIgogCi0jOiBsaWIvcmVtb3RlLnRjbDoyMjMKLW1zZ2lkICJQcnVuZSBmcm9tIgotbXNnc3RyICJYw6luIHThu6siCisjOiBidWlsdGluL2ZldGNoLmM6MTE2Cittc2dpZCAiZmV0Y2gucGFyYWxsZWwgY2Fubm90IGJlIG5lZ2F0aXZlIgorbXNnc3RyICJmZXRjaC5wYXJhbGxlbCBraMO0bmcgdGjhu4Mgw6JtIgogCi0jOiBsaWIvcmVtb3RlLnRjbDoyMjgKLW1zZ2lkICJGZXRjaCBmcm9tIgotbXNnc3RyICJM4bqleSB24buBIHThu6siCi0KLSM6IGxpYi9zZWFyY2gudGNsOjQ4Ci1tc2dpZCAiRmluZDoiCi1tc2dzdHIgIlTDrG06IgotCi0jOiBsaWIvc2VhcmNoLnRjbDo1MAotbXNnaWQgIk5leHQiCi1tc2dzdHIgIlRp4bq/cCIKLQotIzogbGliL3NlYXJjaC50Y2w6NTEKLW1zZ2lkICJQcmV2IgotbXNnc3RyICJUcsaw4bubYyIKLQotIzogbGliL3NlYXJjaC50Y2w6NTIKLW1zZ2lkICJSZWdFeHAiCi1tc2dzdHIgIkJUQ1EiCi0KLSM6IGxpYi9zZWFyY2gudGNsOjU0Ci1tc2dpZCAiQ2FzZSIKLW1zZ3N0ciAiSG9hIgotCi0jOiBsaWIvc2hvcnRjdXQudGNsOjIxIGxpYi9zaG9ydGN1dC50Y2w6NjIKLW1zZ2lkICJDYW5ub3Qgd3JpdGUgc2hvcnRjdXQ6IgotbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIGzhu5FpIHThuq90OiIKLQotIzogbGliL3Nob3J0Y3V0LnRjbDoxMzcKLW1zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCi1tc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgYmnhu4N1IHTGsOG7o25nOiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiS2jDtG5nIGjhu5cgdHLhu6Mga2nhu4NtIHRyYSBjaMOtbmggdOG6oyIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjY1Ci1tc2dpZCAiU3BlbGwgY2hlY2tpbmcgaXMgdW5hdmFpbGFibGUiCi1tc2dzdHIgIktp4buDbSB0cmEgY2jDrW5oIHThuqMga2jDtG5nIHPhurVuIHPDoG5nIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NjgKLW1zZ2lkICJJbnZhbGlkIHNwZWxsIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24iCi1tc2dzdHIgIkPhuqV1IGjDrG5oIGLhu5kgc2/DoXQgY2jDrW5oIHThuqMga2jDtG5nIGjhu6NwIGzhu4ciCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydGluZyBkaWN0aW9uYXJ5IHRvICVzLiIKLW1zZ3N0ciAixJBhbmcgaG/DoG4gbmd1ecOqbiB04burIMSRaeG7g24gdGjDoG5oICVzLiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjczCi1tc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKLW1zZ3N0ciAiUGjhuqduIGtp4buDbSB0cmEgY2jDrW5oIHThuqMgxJHDoyBn4bq3cCBs4buXaSBraGkga2jhu59pIMSR4buZbmciCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAotbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJLaMO0bmcgY2jhuqVwIG5o4bqtbiBi4buZIGtp4buDbSB0cmEgY2jDrW5oIHThuqMiCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDoxODYKLW1zZ2lkICJObyBTdWdnZXN0aW9ucyIKLW1zZ3N0ciAiS2jDtG5nIGPDsyBn4bujaSDDvSIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjM4OAotbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiR+G6t3Aga+G6v3QgdGjDumMgYuG6pXQgbmfhu50gdOG7qyBi4buZIGtp4buDbSB0cmEgY2jDrW5oIHThuqMiCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKLW1zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKLW1zZ3N0ciAiS2nhu4NtIHRyYSBjaMOtbmggdOG6oyBraMO0bmcgdGjDoG5oIGPDtG5nIgotCi0jOiBsaWIvc3Noa2V5LnRjbDozMQotbXNnaWQgIk5vIGtleXMgZm91bmQuIgotbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkga2jDs2EgbsOgby4iCi0KLSM6IGxpYi9zc2hrZXkudGNsOjM0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRm91bmQgYSBwdWJsaWMga2V5IGluOiAlcyIKLW1zZ3N0ciAiVMOsbSB0aOG6pXkga2hvw6EgY8O0bmcga2hhaSB0cm9uZzogJXMiCi0KLSM6IGxpYi9zc2hrZXkudGNsOjQwCi1tc2dpZCAiR2VuZXJhdGUgS2V5IgotbXNnc3RyICJU4bqhbyBraG/DoSIKLQotIzogbGliL3NzaGtleS50Y2w6NTgKLW1zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKLW1zZ3N0ciAiQ2jDqXAgdsOgbyBjbGlwYm9hcmQiCi0KLSM6IGxpYi9zc2hrZXkudGNsOjcyCi1tc2dpZCAiWW91ciBPcGVuU1NIIFB1YmxpYyBLZXkiCi1tc2dzdHIgIktow7NhIGPDtG5nIE9wZW5TU0ggY+G7p2EgYuG6oW4iCi0KLSM6IGxpYi9zc2hrZXkudGNsOjgwCi1tc2dpZCAiR2VuZXJhdGluZy4uLiIKLW1zZ3N0ciAixJBhbmcgdOG6oW8uLi4iCi0KLSM6IGxpYi9zc2hrZXkudGNsOjg2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuIgotIlxuIgotIiVzIgotbXNnc3RyICIiCi0iS2jDtG5nIHRo4buDIGNo4bqheSBzc2gta2V5Z2VuOlxuIgotIlxuIgotIiVzIgotCi0jOiBsaWIvc3Noa2V5LnRjbDoxMTMKLW1zZ2lkICJHZW5lcmF0aW9uIGZhaWxlZC4iCi1tc2dzdHIgIlZp4buHYyB04bqhbyBraG/DoSDEkcOjIHRo4bqldCBi4bqhaS4iCi0KLSM6IGxpYi9zc2hrZXkudGNsOjEyMAotbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VlZGVkLCBidXQgbm8ga2V5cyBmb3VuZC4iCi1tc2dzdHIgIlZp4buHYyB04bqhbyB0aMOgbmggY8O0bmcgbmjGsG5nIGzhuqFpIGtow7RuZyB0w6xtIHRo4bqleSBraMOzYS4iCi0KLSM6IGxpYi9zc2hrZXkudGNsOjEyMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIllvdXIga2V5IGlzIGluOiAlcyIKLW1zZ3N0ciAiS2jDs2EgY+G7p2EgYuG6oW4gdHJvbmc6ICVzIgotCi0jOiBsaWIvc3RhdHVzX2Jhci50Y2w6ODcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgotbXNnc3RyICIlcyAuLi4gJSppIHRyb25nICUqaSAlcyAoJTNpJSUpIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgotbXNnaWQgIkFkZCBUb29sIgotbXNnc3RyICJUaMOqbSBjw7RuZyBj4bulIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyOAotbXNnaWQgIkFkZCBOZXcgVG9vbCBDb21tYW5kIgotbXNnc3RyICJUaMOqbSBs4buHbmggY8O0bmcgY+G7pSBt4bubaSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQKLW1zZ2lkICJBZGQgZ2xvYmFsbHkiCi1tc2dzdHIgIlRow6ptIHRvw6BuIGPhu6VjIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo0NgotbXNnaWQgIlRvb2wgRGV0YWlscyIKLW1zZ3N0ciAiQ2hpIHRp4bq/dCBjw7RuZyBj4bulIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo0OQotbXNnaWQgIlVzZSAnLycgc2VwYXJhdG9ycyB0byBjcmVhdGUgYSBzdWJtZW51IHRyZWU6IgotbXNnc3RyICJEw7luZyBk4bqldSBuZ8SDbiBjw6FjaCAnLycgxJHhu4MgdOG6oW8gY8OieSB0csOsbmggxJHGoW4gY29uOiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NjAKLW1zZ2lkICJDb21tYW5kOiIKLW1zZ3N0ciAiTOG7h25oOiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NzEKLW1zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgotbXNnc3RyICJIaeG7g24gdGjhu4sgaOG7mXAgdGhv4bqhaSB0csaw4bubYyBraGkgY2jhuqF5IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo3NwotbXNnaWQgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyAkUkVWSVNJT04pIgotbXNnc3RyICJI4buPaSBuZ8aw4budaSBkw7luZyBjaOG7jW4gxJFp4buDbSB4ZW0geMOpdCAoxJHhurd0IGJp4bq/biAkUkVWSVNJT04pIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo4MgotbXNnaWQgIkFzayB0aGUgdXNlciBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgKHNldHMgJEFSR1MpIgotbXNnc3RyICJI4buPaSBuZ8aw4budaSBkw7luZyBjw6FjIMSR4buRaSBz4buRIGLhu5UgeHVuZyB0aMOqbSAoxJHhurd0IGJp4bq/biAkQVJHUykiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjg5Ci1tc2dpZCAiRG9uJ3Qgc2hvdyB0aGUgY29tbWFuZCBvdXRwdXQgd2luZG93IgotbXNnc3RyICJLaMO0bmcgaGnhu4NuIHRo4buLIGPhu61hIHPhu5Uga+G6v3QgeHXhuqV0IGPDonUgbOG7h25oIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo5NAotbXNnaWQgIlJ1biBvbmx5IGlmIGEgZGlmZiBpcyBzZWxlY3RlZCAoJEZJTEVOQU1FIG5vdCBlbXB0eSkiCi1tc2dzdHIgIkNo4buJIGNo4bqheSBu4bq/dSBkaWZmIMSRxrDhu6NjIGNo4buNbiAoYmnhur9uICRGSUxFTkFNRSBraMO0bmcgcuG7l25nKSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTE4Ci1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIG5hbWUgZm9yIHRoZSB0b29sLiIKLW1zZ3N0ciAiSMOjeSBjdW5nIGPhuqVwIHTDqm4gY2hvIGPDtG5nIGPhu6UuIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJDw7RuZyBj4bulICclcycgxJHDoyBz4bq1biBjw7MuIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxNDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iQ291bGQgbm90IGFkZCB0b29sOlxuIgotIiVzIgotbXNnc3RyICIiCi0iS2jDtG5nIHRo4buDIHRow6ptIGPDtG5nIGPhu6U6XG4iCi0iJXMiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjE4NwotbXNnaWQgIlJlbW92ZSBUb29sIgotbXNnc3RyICJH4buhIGLhu48gY8O0bmcgY+G7pSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTkzCi1tc2dpZCAiUmVtb3ZlIFRvb2wgQ29tbWFuZHMiCi1tc2dzdHIgIkfhu6EgYuG7jyBjw7RuZyBj4bulIGzhu4duaCIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk4Ci1tc2dpZCAiUmVtb3ZlIgotbXNnc3RyICJH4buhIGLhu48iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjIzMQotbXNnaWQgIihCbHVlIGRlbm90ZXMgcmVwb3NpdG9yeS1sb2NhbCB0b29scykiCi1tc2dzdHIgIihDw6FjIGPDtG5nIGPhu6UgY2jhu4kgdGjhu4sga2hvLW7hu5lpLWLhu5kgeGFuaCkiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjI5MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1biBDb21tYW5kOiAlcyIKLW1zZ3N0ciAiQ2jhuqF5IGzhu4duaDogJXMiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjMwNgotbXNnaWQgIkFyZ3VtZW50cyIKLW1zZ3N0ciAixJDhu5FpIHPhu5EiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjM0MQotbXNnaWQgIk9LIgotbXNnc3RyICLEkOG7k25nIMO9IgotCi0jOiBsaWIvdG9vbHMudGNsOjc1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVubmluZyAlcyByZXF1aXJlcyBhIHNlbGVjdGVkIGZpbGUuIgotbXNnc3RyICJDaOG6oXkgJXMgecOqdSBj4bqndSBj4bqnbiBwaOG6o2kgY2jhu41uIG3hu5l0IHThuq1wIHRpbi4iCi0KLSM6IGxpYi90b29scy50Y2w6OTEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICUxJHMgb24gZmlsZSBcIiUyJHNcIj8iCi1tc2dzdHIgIkLhuqFuIGPDsyBjaOG6r2MgbMOgIG114buRbiBjaOG6oXkgJTEkcyB0csOqbiB04bqtcCB0aW4gXCIlMiRzXCIga2jDtG5nPyIKLQotIzogbGliL3Rvb2xzLnRjbDo5NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJXM/IgotbXNnc3RyICJC4bqhbiBjw7MgY2jhuq9jIGzDoCBtdeG7kW4gY2jhuqF5ICVzIGtow7RuZz8iCi0KLSM6IGxpYi90b29scy50Y2w6MTE2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbDogJXMiCi1tc2dzdHIgIkPDtG5nIGPhu6U6ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjExNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmc6ICVzIgotbXNnc3RyICLEkGFuZyBjaOG6oXk6ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjE1NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCi1tc2dzdHIgIkPDtG5nIGPhu6UgxJHGsOG7o2MgYmnDqm4gZOG7i2NoIHRow6BuaCBjw7RuZzogJXMiCi0KLSM6IGxpYi90b29scy50Y2w6MTU3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCBmYWlsZWQ6ICVzIgotbXNnc3RyICJDw7RuZyBj4bulIGfhurdwIGzhu5dpOiAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gJXMiCi1tc2dzdHIgIkzhuqV5IGPDoWMgdGhheSDEkeG7lWkgbeG7m2kgdOG7qyAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCi1tc2dzdHIgInjDqW4gYuG7m3QgdHLDqm4gbcOheSBjaOG7pyAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKLW1zZ3N0ciAiWMOpbiBi4bubdCBjw6FjIG5ow6FuaCB0aGVvIGTDtWkgYuG7iyB4w7NhIHThu6sgJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjI1Ci1tc2dpZCAiZmV0Y2ggYWxsIHJlbW90ZXMiCisjOiBidWlsdGluL2ZldGNoLmM6MTM5IGJ1aWx0aW4vcHVsbC5jOjE4NAorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCiBtc2dzdHIgImzhuqV5IHbhu4EgdOG7qyB04bqldCBj4bqjIGPDoWMgbcOheSBjaOG7pyIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MjYKLW1zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tIGFsbCByZW1vdGVzIgotbXNnc3RyICLEkGFuZyBs4bqleSBjw6FjIHRoYXkgxJHhu5VpIG3hu5tpIHThu6sgbeG7jWkgbcOheSBjaOG7pyIKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDEgYnVpbHRpbi9wdWxsLmM6MjI4Cittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9mZXRjaCIKK21zZ3N0ciAixJHhurd0IHRoxrDhu6NuZyBuZ3Xhu5NuIGNobyBnaXQgcHVsbC9mZXRjaCIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6NDAKLW1zZ2lkICJyZW1vdGUgcHJ1bmUgYWxsIHJlbW90ZXMiCi1tc2dzdHIgInjDqW4gYuG7m3QgbeG7jWkgbcOheSBjaOG7pyIKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMgYnVpbHRpbi9wdWxsLmM6MTg3Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICJu4buRaSB0aMOqbSB2w6BvIC5naXQvRkVUQ0hfSEVBRCB0aGF5IHbDrCBnaGkgxJHDqCBsw6puIG7DsyIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6NDEKLW1zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSBhbGwgcmVtb3RlcyIKLW1zZ3N0ciAiWMOpbiB04buJYSBjw6FjIG5ow6FuaCDEkcOjIHRoZW8gZMO1aSBi4buLIHjDs2EgdOG7qyBt4buNaSBtw6F5IGNo4bunIgorIzogYnVpbHRpbi9mZXRjaC5jOjE0NSBidWlsdGluL3B1bGwuYzoxOTAKK21zZ2lkICJwYXRoIHRvIHVwbG9hZCBwYWNrIG9uIHJlbW90ZSBlbmQiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDEkeG6v24gZ8OzaSB04bqjaSBsw6puIHRyw6puIG3DoXkgY2jhu6cgY3Xhu5FpIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo1NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKLW1zZ3N0ciAixJBhbmcgxJHhuql5IGPDoWMgbmjDoW5oIGzDqm4gJXMiCisjOiBidWlsdGluL2ZldGNoLmM6MTQ2Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIHJlZmVyZW5jZSIKK21zZ3N0ciAiw6lwIGJ14buZYyBnaGkgxJHDqCBsw6puIHRoYW0gY2hp4bq/dSBu4buZaSBi4buZIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo5MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1pcnJvcmluZyB0byAlcyIKLW1zZ3N0ciAiQuG6o24gc2FvIMSR4bq/biAlcyIKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDgKK21zZ2lkICJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiCittc2dzdHIgImzhuqV5IHThu6sgbmhp4buBdSBtw6F5IGNo4bunIGPDuW5nIGzDumMiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjExMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlB1c2hpbmcgJXMgJXMgdG8gJXMiCi1tc2dzdHIgIsSQYW5nICjEkeG6qXkpICVzICVzIGzDqm4gJXMiCisjOiBidWlsdGluL2ZldGNoLmM6MTUwIGJ1aWx0aW4vcHVsbC5jOjE5NAorbXNnaWQgImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgImzhuqV5IHThuqV0IGPhuqMgY8OhYyB0aOG6uyBjw7luZyB24bubaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBsacOqbiBxdWFuIMSR4bq/biBuw7MiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjEzMgotbXNnaWQgIlB1c2ggQnJhbmNoZXMiCi1tc2dzdHIgIsSQ4bqpeSBsw6puIGPDoWMgbmjDoW5oIgorIzogYnVpbHRpbi9mZXRjaC5jOjE1MgorbXNnaWQgImRvIG5vdCBmZXRjaCBhbGwgdGFncyAoLS1uby10YWdzKSIKK21zZ3N0ciAia2jDtG5nIGzhuqV5IHThuqV0IGPhuqMgY8OhYyB0aOG6uyAoLS1uby10YWdzKSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTQ3Ci1tc2dpZCAiU291cmNlIEJyYW5jaGVzIgotbXNnc3RyICJOaMOhbmggbmd14buTbiIKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTQKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBmZXRjaGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICJz4buRIGzGsOG7o25nIG3DtC3EkXVuLWNvbiDEkcaw4bujYyBs4bqleSDEkeG7k25nIHRo4budaSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTYyCi1tc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKLW1zZ3N0ciAiS2hvIGNo4bupYSDEkcOtY2giCisjOiBidWlsdGluL2ZldGNoLmM6MTU2IGJ1aWx0aW4vcHVsbC5jOjE5NworbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICIiCisiY+G6r3QgY+G7pXQgKHBydW5lKSBjw6FjIG5ow6FuaCDigJxyZW1vdGUtdHJhY2tpbmfigJ0ga2jDtG5nIGPDsm4gdOG7k24gdOG6oWkgdHLDqm4gbcOheSBjaOG7pyAiCisibuG7r2EiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjIwNQotbXNnaWQgIlRyYW5zZmVyIE9wdGlvbnMiCi1tc2dzdHIgIlTDuXkgY2jhu41uIHRydXnhu4FuIgorIzogYnVpbHRpbi9mZXRjaC5jOjE1OAorbXNnaWQgInBydW5lIGxvY2FsIHRhZ3Mgbm8gbG9uZ2VyIG9uIHJlbW90ZSBhbmQgY2xvYmJlciBjaGFuZ2VkIHRhZ3MiCittc2dzdHIgImPhuq90IHjDqW0gY8OhYyB0aOG6uyBu4buZaSBi4buZIGtow7RuZyBjw7JuIOG7nyBtw6F5IGNo4bunIHbDoCB4w7NhIGPDoWMgdGjhursgxJHDoyB0aGF5IMSR4buVaSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MjA3Ci1tc2dpZCAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiCi1tc2dzdHIgIsOJcCBideG7mWMgZ2hpIMSRw6ggbmjDoW5oIHPhurVuIGPDsyAoY8OzIHRo4buDIHPhur0gbG/huqFpIGLhu48gY8OhYyB0aGF5IMSR4buVaSkiCisjOiBidWlsdGluL2ZldGNoLmM6MTU5IGJ1aWx0aW4vZmV0Y2guYzoxODIgYnVpbHRpbi9wdWxsLmM6MTIxCittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICJraGktY+G6p24iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjIxMQotbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgotbXNnc3RyICJEw7luZyBnw7NpIG3hu49uZyAoZMOgbmggY2hvIGvhur90IG7hu5FpIG3huqFuZyBjaOG6rW0pIgorIzogYnVpbHRpbi9mZXRjaC5jOjE2MAorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIsSRaeG7gXUga2hp4buDbiB2aeG7h2MgbOG6pXkgduG7gSDEkeG7hyBxdXkgdHJvbmcgY8OhYyBtw7QtxJF1bi1jb24iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjIxNQotbXNnaWQgIkluY2x1ZGUgdGFncyIKLW1zZ3N0ciAiQmFvIGfhu5NtIGPDoWMgdGjhursiCisjOiBidWlsdGluL2ZldGNoLmM6MTY0IGJ1aWx0aW4vcHVsbC5jOjIwNQorbXNnaWQgImtlZXAgZG93bmxvYWRlZCBwYWNrIgorbXNnc3RyICJnaeG7ryBs4bqhaSBnw7NpIMSRw6MgdOG6o2kgduG7gSIKIAotI34gbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgotI34gbXNnc3RyICJDw7MgcGjDom4gYmnhu4d0IEhPQS90aMaw4budbmciCisjOiBidWlsdGluL2ZldGNoLmM6MTY2Cittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgImNobyBwaMOpcCBj4bqtcCBuaOG6rXQgdGguY2hp4bq/dSBIRUFEIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY5IGJ1aWx0aW4vZmV0Y2guYzoxNzUgYnVpbHRpbi9wdWxsLmM6MjA4Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAibMOgbSBzw6J1IGjGoW4gbOG7i2NoIHPhu60gY+G7p2EgYuG6o24gc2FvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcxCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyByZXBvc2l0b3J5IGJhc2VkIG9uIHRpbWUiCittc2dzdHIgImzDoG0gc8OidSBoxqFuIGzhu4tjaCBz4butIGPhu6dhIGtobyBi4bqjbiBzYW8gc2hhbGxvdyBk4buxYSB0csOqbiB0aOG7nWkgZ2lhbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NyBidWlsdGluL3B1bGwuYzoyMTEKK21zZ2lkICJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY2h1eeG7g24gxJHhu5VpIGhvw6BuIHRvw6BuIHNhbmcga2hvIGdpdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MAorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgInNv4bqhbiBz4bq1biBjw6FpIG7DoHkgY2hvIGvhur90IHh14bqldCDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgzCittc2dpZCAiIgorImRlZmF1bHQgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIChsb3dlciBwcmlvcml0eSB0aGFuIGNvbmZpZyAiCisiZmlsZXMpIgorbXNnc3RyICIiCisibeG6t2MgxJHhu4tuaCBjaG8gdmnhu4djIGzhuqV5IMSR4buHIHF1eSBjw6FjIG3DtC3EkXVuLWNvbiAoY8OzIG3hu6ljIMawdSB0acOqbiB0aOG6pXAgaMahbiBjw6FjIHThuq1wICIKKyJ0aW4gY+G6pXUgaMOsbmggY29uZmlnKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NyBidWlsdGluL3B1bGwuYzoyMTQKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgImNo4bqlcCBuaOG6rW4gdGhhbSBjaGnhur91IGPhuq1wIG5o4bqtdCAuZ2l0L3NoYWxsb3ciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODggYnVpbHRpbi9wdWxsLmM6MjE2Cittc2dpZCAicmVmbWFwIgorbXNnc3RyICJyZWZtYXAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODkgYnVpbHRpbi9wdWxsLmM6MjE3Cittc2dpZCAic3BlY2lmeSBmZXRjaCByZWZtYXAiCittc2dzdHIgImNo4buJIHJhIHJlZm1hcCBj4bqnbiBs4bqleSB24buBIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk2Cittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgIiIKKyJiw6FvIGPDoW8gcuG6sW5nIGNow7puZyB0YSBjaOG7iSBjw7MgY8OhYyDEkeG7kWkgdMaw4bujbmcgdGnhur9wIGPhuq1uIMSRxrDhu6NjIHThu6sgxJHhu5FpIHTGsOG7o25nIG7DoHkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxOTkKK21zZ2lkICJydW4gJ2djIC0tYXV0bycgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgImNo4bqheSAnZ2MgLS1hdXRvJyBzYXUga2hpIGzhuqV5IHbhu4EiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDEgYnVpbHRpbi9wdWxsLmM6MjI2Cittc2dpZCAiY2hlY2sgZm9yIGZvcmNlZC11cGRhdGVzIG9uIGFsbCB1cGRhdGVkIGJyYW5jaGVzIgorbXNnc3RyICJraeG7g20gY2hvIGPDoWMtY+G6rXAtbmjhuq10LWLhuq90LWJ14buZYyB0csOqbiBt4buNaSBuaMOhbmggxJHDoyBj4bqtcCBuaOG6rXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDMKK21zZ2lkICJ3cml0ZSB0aGUgY29tbWl0LWdyYXBoIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJnaGkgcmEgxJHhu5MgdGjhu4sgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIHNhdSBraGkgbOG6pXkgduG7gSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUxMworbXNnaWQgIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgbcOheSBjaOG7pyBjaG8gdGhhbSBjaGnhur91IEhFQUQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlndXJhdGlvbiBmZXRjaC5vdXRwdXQgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAlcyIKK21zZ3N0ciAicGjhuqduIGPhuqV1IGjDrG5oIGZldGNoLm91dHB1dCBjw7MgY2jhu6lhIGdpw6EtdHLhu4sga2jDtG5nIGjhu6NwIGzhu4cgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAia2jDtG5nIHTDrG0gdGjhuqV5IMSR4buRaSB0xrDhu6NuZyAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1NQorbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW8SRw6MgY+G6rXAgbmjhuq10XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2OCBidWlsdGluL2ZldGNoLmM6Nzg0IGJ1aWx0aW4vZmV0Y2guYzo4NTYKK21zZ2lkICJbcmVqZWN0ZWRdIgorbXNnc3RyICJbQuG7iyB04burIGNo4buRaV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NjkKK21zZ2lkICJjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGZldGNoIChs4bqleSkgduG7gSBuaMOhbmggaGnhu4duIGjDoG5oIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzc5Cittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICJbY+G6rXAgbmjhuq10IHRo4bq7XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4MCBidWlsdGluL2ZldGNoLmM6ODE3IGJ1aWx0aW4vZmV0Y2guYzo4MzkKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCB0aGFtIGNoaeG6v3UgbuG7mWkgYuG7mSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4NAorbXNnaWQgIndvdWxkIGNsb2JiZXIgZXhpc3RpbmcgdGFnIgorbXNnc3RyICJuw6puIHjDs2EgY2jhu5NuZyBjw6FjIHRo4bq7IGPDsyBz4bq1biIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwNgorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW3Ro4bq7IG3hu5tpXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwOQorbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW25ow6FuaCBt4bubaV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MTIKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIltyZWYgKHRoYW0gY2hp4bq/dSkgbeG7m2ldIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAiY8aw4buhbmcgYuG7qWMgY+G6rXAgbmjhuq10IgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAia2jDtG5nLXBo4bqjaS1jaHV54buDbi10aeG6v3AtbmhhbmgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NzcKK21zZ2lkICIiCisiRmV0Y2ggbm9ybWFsbHkgaW5kaWNhdGVzIHdoaWNoIGJyYW5jaGVzIGhhZCBhIGZvcmNlZCB1cGRhdGUsXG4iCisiYnV0IHRoYXQgY2hlY2sgaGFzIGJlZW4gZGlzYWJsZWQuIFRvIHJlLWVuYWJsZSwgdXNlICctLXNob3ctZm9yY2VkLXVwZGF0ZXMnXG4iCisiZmxhZyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgdHJ1ZScuIgorbXNnc3RyICIiCisiVmnhu4djIGzhuqV5IHbhu4EgdGjGsOG7nW5nIGNo4buJIHJhIGPDoWMgbmjDoW5oIGJ14buZYyBwaOG6o2kgY+G6rXAgbmjhuq10LFxuIgorIm5oxrBuZyBs4buxYSBjaOG7jW4gYuG7iyB04bqvdC4gxJDhu4Mga8OtY2ggaG/huqF0IGzhuqFpLCBz4butIGThu6VuZyBj4budXG4iCisiJy0tc2hvdy1mb3JjZWQtdXBkYXRlcycgaG/hurdjIGNo4bqheSAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGNoZWNrIGZvcmNlZCB1cGRhdGVzLiBZb3UgY2FuIHVzZVxuIgorIictLW5vLXNob3ctZm9yY2VkLXVwZGF0ZXMnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyAiCisiZmFsc2UnXG4iCisiIHRvIGF2b2lkIHRoaXMgY2hlY2suXG4iCittc2dzdHIgIiIKKyJWaeG7h2MgbsOgeSBj4bqnbiAlLjJmIGdpw6J5IMSR4buDIGtp4buDbSB0cmEgY8OhYyBj4bqtcCBuaOG6rXQgw6lwIGJ14buZYy4gQuG6oW4gY8OzIHRo4buDIGTDuW5nXG4iCisiJy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcycgaG/hurdjIGNo4bqheSAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyAiCisiZmFsc2UnXG4iCisixJHhu4MgdHLDoW5oIGtp4buDbSB0cmEgbsOgeS5cbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzIMSRw6Mga2jDtG5nIGfhu61pIHThuqV0IGPhuqMgY8OhYyDEkeG7kWkgdMaw4bujbmcgY+G6p24gdGhp4bq/dFxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTQxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgInThu6sgY2jhu5FpICVzIGLhu59pIHbDrCBjw6FjIGfhu5FjIG7DtG5nIHRow6wga2jDtG5nIMSRxrDhu6NjIHBow6lwIGPhuq1wIG5o4bqtdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMjYgYnVpbHRpbi9mZXRjaC5jOjExNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIlThu6sgJS4qc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisibeG7mXQgc+G7kSB0aGFtIGNoaeG6v3UgbuG7mWkgYuG7mSBraMO0bmcgdGjhu4MgxJHGsOG7o2MgY+G6rXAgbmjhuq10OyBow6N5IHRo4butIGNo4bqheVxuIgorIiDigJxnaXQgcmVtb3RlIHBydW5lICVz4oCdIMSR4buDIGLhu48gxJFpIG5o4buvbmcgbmjDoW5oIGPFqSwgaGF5IGLhu4sgeHVuZyDEkeG7mXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyBz4bq9IHRy4bufIHRow6BuaCBraMO0bmcgxJHhuqd1IChraMO0bmcgxJHGsOG7o2MgcXXhuqNuIGzDvSkpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyDEkcOjIHRy4bufIHRow6BuaCBraMO0bmcgxJHhuqd1IChraMO0bmcgxJHGsOG7o2MgcXXhuqNuIGzDvSkpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2NworbXNnaWQgIltkZWxldGVkXSIKK21zZ3N0ciAiW8SRw6MgeMOzYV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTExMgorbXNnaWQgIihub25lKSIKK21zZ3N0ciAiKGtow7RuZykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorIlThu6sgY2jhu5FpIHZp4buHYyBs4bqleSB2w6BvIHRyb25nIG5ow6FuaCBoaeG7h24gdOG6oWkgJXMgY+G7p2EgbeG7mXQga2hvIGNo4bupYSBraMO0bmcgcGjhuqNpIGtobyAiCisidHLhuqduIChiYXJlKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gXCIlc1wiIGPDsyBnacOhIHRy4buLIFwiJXNcIiBsw6Aga2jDtG5nIGjhu6NwIGzhu4cgY2hvICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgIlTDuXkgY2jhu41uIFwiJXNcIiBi4buLIGLhu48gcXVhIHbhu5tpICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDIxCittc2dpZCAibXVsdGlwbGUgYnJhbmNoZXMgZGV0ZWN0ZWQsIGluY29tcGF0aWJsZSB3aXRoIC0tc2V0LXVwc3RyZWFtIgorbXNnc3RyICJwaMOhdCBoaeG7h24gbmhp4buBdSBuaMOhbmgsIGtow7RuZyB0xrDGoW5nIHRow61jaCB24bubaSAtLXNldC11cHN0cmVhbSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzYKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAia2jDtG5nIGPDoGkgxJHhurd0IHRoxrDhu6NuZyBuZ3Xhu5NuIGNobyBt4buZdCBuaMOhbmggxJHGsOG7o2MgdGhlbyBkw7VpIHRyw6puIG3DoXkgY2jhu6ciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDM4Cittc2dpZCAibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHRhZyIKK21zZ3N0ciAia2jDtG5nIGPDoGkgxJHhurd0IHRoxrDhu6NuZyBuZ3Xhu5NuIGNobyBt4buZdCB0aOG6uyBuaMOhbmggdHLDqm4gbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NDAKK21zZ2lkICJ1bmtub3duIGJyYW5jaCB0eXBlIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IGtp4buDdSBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDQyCittc2dpZCAiIgorIm5vIHNvdXJjZSBicmFuY2ggZm91bmQuXG4iCisieW91IG5lZWQgdG8gc3BlY2lmeSBleGFjdGx5IG9uZSBicmFuY2ggd2l0aCB0aGUgLS1zZXQtdXBzdHJlYW0gb3B0aW9uLiIKK21zZ3N0ciAiIgorImtow7RuZyB0w6xtIHRo4bqleSBuaMOhbmggbmd14buTbi5cbiIKKyJi4bqhbiBj4bqnbiBwaOG6o2kgY2jhu4kgxJHhu4tuaCBjaMOtbmggeMOhYyBt4buZdCBuaMOhbmggduG7m2kgdMO5eSBjaOG7jW4gLS1zZXQtdXBzdHJlYW0uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2OCBidWlsdGluL2ZldGNoLmM6MTYzMQorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICLEkGFuZyBs4bqleSDigJwlc+KAnSB24buBXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTc4IGJ1aWx0aW4vZmV0Y2guYzoxNjMzIGJ1aWx0aW4vcmVtb3RlLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzhuqV54oCcJXPigJ0gduG7gSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZldGNoICclcycgKGV4aXQgY29kZTogJWQpXG4iCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSDigJwlc+KAnSAobcOjIHRob8OhdDogJWQpXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjkzCittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJDaMawYSBjaOG7iSByYSBraG8gY2jhu6lhIG3DoXkgY2jhu6cuICBYaW4gaMOjeSBjaOG7iSDEkeG7i25oIGhv4bq3YyBsw6AgVVJMIGhv4bq3Y1xuIgorInTDqm4gbcOheSBjaOG7pyB04burIGPDoWkgbcOgIG5o4buvbmcgxJFp4buDbSB4w6l0IGR1eeG7h3QgbeG7m2kgY8OzIHRo4buDIMSRxrDhu6NjIGZldGNoIChs4bqleSB24buBKS4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzMwCittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAiQuG6oW4gcGjhuqNpIMSR4buLbmggcsO1IHTDqm4gdGjhursuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc4MAorbXNnaWQgIk5lZ2F0aXZlIGRlcHRoIGluIC0tZGVlcGVuIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIk3hu6ljIHPDonUgbMOgIHPhu5Egw6JtIHRyb25nIC0tZGVlcGVuIGzDoCBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODIKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uLS1kZWVwZW4gdsOgIC0tZGVwdGggbG/huqFpIHThu6sgbOG6q24gbmhhdSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODcKK21zZ2lkICItLWRlcHRoIGFuZCAtLXVuc2hhbGxvdyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAidMO5eSBjaOG7jW4gLS1kZXB0aCB2w6AgLS11bnNoYWxsb3cga2jDtG5nIHRo4buDIHPhu60gZOG7pW5nIGPDuW5nIHbhu5tpIG5oYXUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzg5Cittc2dpZCAiLS11bnNoYWxsb3cgb24gYSBjb21wbGV0ZSByZXBvc2l0b3J5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tdW5zaGFsbG93IHRyw6puIGtobyBob8OgbiBjaOG7iW5oIGzDoCBraMO0bmcgaOG7o3AgbMO9IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwNQorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICJs4buHbmggbOG6pXkgduG7gSBcImZldGNoIC0tYWxsXCIga2jDtG5nIGzhuqV5IMSR4buRaSBz4buRIGtobyBjaOG7qWEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODA3Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJs4buHbmggbOG6pXkgduG7gSBcImZldGNoIC0tYWxsXCIga2jDtG5nIGjhu6NwIGzDvSB24bubaSByZWZzcGVjcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAiS2jDtG5nIGPDsyBuaMOzbSBtw6F5IGNo4bunIGhheSBtw6F5IGNo4bunIG5oxrAgdGjhur86ICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgyMworbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiVmnhu4djIGzhuqV5IHbhu4EgY+G6oyBt4buZdCBuaMOzbSB2w6AgY2jhu4kgxJHhu4tuaCByZWZzcGVjcyBraMO0bmcgaOG7o3AgbMO9IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg0MQorbXNnaWQgIiIKKyItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSBjb25maWd1cmVkIGluIGV4dGVuc2lvbnMuIgorInBhcnRpYWxjbG9uZSIKK21zZ3N0ciAiIgorIi0tZmlsdGVyIGNo4buJIGPDsyB0aOG7gyDEkcaw4bujYyBkw7luZyB24bubaSBtw6F5IGNo4bunIMSRxrDhu6NjIGPhuqV1IGjDrG5oIGLhurFuZyBleHRlbnNpb25zLiIKKyJwYXJ0aWFsY2xvbmUiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjE4Cittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPGNow7pfdGjDrWNoPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPHThuq1wLSIKKyJ0aW4+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcxCittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICJn4bqvbiBuaOG6rXQga8O9IHbhu5tpIMOtdCBuaOG6pXQgPG4+IG3hu6VjIHThu6sgbOG7h25oIOKAnHNob3J0bG9n4oCdIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzQKK21zZ2lkICJhbGlhcyBmb3IgLS1sb2cgKGRlcHJlY2F0ZWQpIgorbXNnc3RyICJiw60gZGFuaCBjaG8gLS1sb2cgKGtow7RuZyDEkcaw4bujYyBkw7luZykiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NworbXNnaWQgInRleHQiCittc2dzdHIgInbEg24gYuG6o24iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3OAorbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAiZMO5bmcgPHbEg24gYuG6o24gdGjGsOG7nW5nPiDEkeG7gyBi4bqvdCDEkeG6p3UgZ2hpIGNow7oiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3OQorbXNnaWQgImZpbGUgdG8gcmVhZCBmcm9tIgorbXNnc3RyICJ04bqtcCB0aW4gxJHhu4MgxJHhu41jIGThu68gbGnhu4d1IHThu6sgxJHDsyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMAorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWzxjw6FjIHTDuXkgY2jhu41uPl0gWzxt4bqrdT5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamVjdD5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8xJHhu5FpIHTGsOG7o25nPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTIKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGzhuqduLWNodXnhu4NuLWdpYW8+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTMKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIFstLW5vLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIgorbXNnc3RyICIiCisiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPGzhuqduLWNodXnhu4NuLWdpYW8+XV0gWy0tbm8tY29udGFpbnMgWzxs4bqnbi0iCisiY2h1eeG7g24tZ2lhbz5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIgorbXNnc3RyICJ0csOtY2ggZOG6q24gxJHhu4MgcGjDuSBo4bujcCBjaG8gaOG7hyB24buPIChzaGVsbCkiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgInRyw61jaCBk4bqrbiDEkeG7gyBwaMO5IGjhu6NwIGNobyBwZXJsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMyCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgInRyw61jaCBk4bqrbiDEkeG7gyBwaMO5IGjhu6NwIGNobyBweXRob24iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAidHLDrWNoIGThuqtuIMSR4buDIHBow7kgaOG7o3AgY2hvIFRjbCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNworbXNnaWQgInNob3cgb25seSA8bj4gbWF0Y2hlZCByZWZzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY2jhu4kgPG4+IHRoYW0gY2hp4bq/dSBraOG7m3AiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzkgYnVpbHRpbi90YWcuYzo0MzkKK21zZ2lkICJyZXNwZWN0IGZvcm1hdCBjb2xvcnMiCittc2dzdHIgImPDoWMgbcOgdSDEkeG7i25oIGThuqFuZyBsxrB1IHTDom0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggcG9pbnRzIGF0IHRoZSBnaXZlbiBvYmplY3QiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBjw6FjIHRoYW0gY2hp4bq/dSBtw6AgbsOzIGNo4buJIMSR4bq/biDEkeG7kWkgdMaw4bujbmcgxJHDoyBjaG8iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDQKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyB0aGFtIGNoaeG6v3UgbcOgIG7DsyDEkcaw4bujYyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NQorbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyB0aGFtIGNoaeG6v3UgbcOgIG7DsyBraMO0bmcgxJHGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDYKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyB0aGFtIGNoaeG6v3UgbcOgIG7DsyBjaOG7qWEgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NworbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIHRoYW0gY2hp4bq/dSBtw6AgbsOzIGtow7RuZyBjaOG7qWEgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjggYnVpbHRpbi9mc2NrLmM6MTQ3IGJ1aWx0aW4vZnNjay5jOjE0OAorbXNnaWQgInVua25vd24iCittc2dzdHIgImtow7RuZyBoaeG7g3UiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIGVycm9yIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjEwMCBidWlsdGluL2ZzY2suYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gJXMgJXM6ICVzIgorbXNnc3RyICJs4buXaSB0cm9uZyAlcyAlczogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIHdhcm5pbmcgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmcgaW4gJXMgJXM6ICVzIgorbXNnc3RyICJjw7MgY+G6o25oIGLDoW8gdHJvbmcgJXMgJXM6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoxNDMgYnVpbHRpbi9mc2NrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBsaW5rIGZyb20gJTdzICVzIgorbXNnc3RyICJsacOqbiBr4bq/dCBnw6N5IHThu6sgJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoxNTUKK21zZ2lkICJ3cm9uZyBvYmplY3QgdHlwZSBpbiBsaW5rIgorbXNnc3RyICJraeG7g3UgxJHhu5FpIHTGsOG7o25nIHNhaSB0cm9uZyBsacOqbiBr4bq/dCIKKworIzogYnVpbHRpbi9mc2NrLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJicm9rZW4gbGluayBmcm9tICU3cyAlc1xuIgorIiAgICAgICAgICAgICAgdG8gJTdzICVzIgorbXNnc3RyICIiCisibGnDqm4ga+G6v3QgZ8OjeSB04burICU3cyAlcyBcbiIKKyIgICAgICAgICAgICAgIHThu5tpICU3cyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgJXMiCittc2dzdHIgInRoaeG6v3UgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlYWNoYWJsZSAlcyAlcyIKK21zZ3N0ciAia2jDtG5nIHRp4bq/cCBj4bqtbiDEkcaw4bujYyAlcyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImRhbmdsaW5nICVzICVzIgorbXNnc3RyICJkYW5nbGluZyAlcyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzM5Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsb3N0LWZvdW5kIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGhvw6BuIHRow6BuaCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9mc2NrLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIgorbXNnc3RyICLEkGFuZyBraeG7g20gdHJhICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5ICglZCBvYmplY3RzKSIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSBr4bq/dCBu4buRaSAoJWQgxJHhu5FpIHTGsOG7o25nKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzICVzIgorbXNnc3RyICLEkGFuZyBraeG7g20gdHJhICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0MjkKK21zZ2lkICJicm9rZW4gbGlua3MiCittc2dzdHIgImPDoWMgbGnDqm4ga+G6v3QgYuG7iyBn4bqreSIKKworIzogYnVpbHRpbi9mc2NrLmM6NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJvb3QgJXMiCittc2dzdHIgImfhu5FjICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnZ2VkICVzICVzICglcykgaW4gJXMiCittc2dzdHIgIsSRw6MgxJHDoW5oIHRo4bq7ICVzICVzICglcykgdHJvbmcgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZyIKK21zZ3N0ciAiJXM6IMSR4buRaSB0xrDhu6NuZyB0aGnhur91IGhheSBo4buPbmciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCByZWZsb2cgZW50cnkgJXMiCittc2dzdHIgIiVzOiBt4bulYyByZWZsb2cga2jDtG5nIGjhu6NwIGzhu4cgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZWZsb2cgJXMtPiVzIgorbXNnc3RyICLEkGFuZyBraeG7g20gdHJhIHZp4buHYyDEkeG7lWkgdMOqbiBj4bunYSDigJwlc+KAnSB0aMOgbmgg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgJXMiCittc2dzdHIgIiVzOiBjb24gdHLhu48gc2hhMSBraMO0bmcgaOG7o3AgbOG7hyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSBjb21taXQiCittc2dzdHIgIiVzOiBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2ZzY2suYzo2MDkKK21zZ2lkICJub3RpY2U6IE5vIGRlZmF1bHQgcmVmZXJlbmNlcyIKK21zZ3N0ciAiY+G6o25oIGLDoW86IEtow7RuZyBjw7MgY8OhYyB0aGFtIGNoaeG6v3UgbeG6t2MgxJHhu4tuaCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiJXM6IHRoaeG6v3UgxJHhu5FpIHTGsOG7o25nIGhv4bq3YyBo4buPbmc6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3VsZCBub3QgYmUgcGFyc2VkOiAlcyIKK21zZ3N0ciAiJXM6IGtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjw7ogxJHhu5FpIHTGsOG7o25nOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaGExIGZpbGU6ICVzIgorbXNnc3RyICJ04bqtcCB0aW4gc2hhMSBzYWk6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzIKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3J5IgorbXNnc3RyICLEkGFuZyBraeG7g20gdHJhIHRoxrAgbeG7pWMgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzUKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgIsSQYW5nIGtp4buDbSB0cmEgY8OhYyB0aMawIG3hu6VjIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIGxpbmsiCittc2dzdHIgIsSQYW5nIGzhuqV5IGxpw6puIGvhur90ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2OTUgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMiCittc2dzdHIgIiVzIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIHRvIHNvbWV0aGluZyBzdHJhbmdlICglcykiCittc2dzdHIgIiVzIGNo4buJIMSR4bq/biB0aOG7qSBnw6wgxJHDsyB4YSBs4bqhICglcykiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZGV0YWNoZWQgSEVBRCBwb2ludHMgYXQgbm90aGluZyIKK21zZ3N0ciAiJXM6IEhFQUQgxJHDoyB0w6FjaCBy4budaSBraMO0bmcgY2jhu4kgdsOgbyDEkcOidSBj4bqjIgorCisjOiBidWlsdGluL2ZzY2suYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aWNlOiAlcyBwb2ludHMgdG8gYW4gdW5ib3JuIGJyYW5jaCAoJXMpIgorbXNnc3RyICJjaMO6IMO9OiAlcyBjaOG7iSDEkeG6v24gbeG7mXQgbmjDoW5oIGNoxrBhIHNpbmggKCVzKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI0Cittc2dpZCAiQ2hlY2tpbmcgY2FjaGUgdHJlZSIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSBjw6J5IG5o4bubIHThuqFtIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyIGluIGNhY2hlLXRyZWUiCittc2dzdHIgIiVzOiBjb24gdHLhu48gc2hhMSBraMO0bmcgaOG7o3AgbOG7hyB0cm9uZyBjYWNoZS10cmVlIgorCisjOiBidWlsdGluL2ZzY2suYzo3MzgKK21zZ2lkICJub24tdHJlZSBpbiBjYWNoZS10cmVlIgorbXNnc3RyICJub24tdHJlZSB0cm9uZyBjYWNoZS10cmVlIgorCisjOiBidWlsdGluL2ZzY2suYzo3NjkKK21zZ2lkICJnaXQgZnNjayBbPG9wdGlvbnM+XSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgZnNjayBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbPMSR4buRaS10xrDhu6NuZz7igKZdIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzUKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgdGjhu4MgxJHhu41jIMSRxrDhu6NjIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzYKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgxJHGsOG7o2MgcXXhuqNuIGzDvSIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc3Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgImLDoW8gY8OhbyBjw6FjIHRo4bq7IgorCisjOiBidWlsdGluL2ZzY2suYzo3NzgKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAiYsOhbyBjw6FvIG5vZGUgZ+G7kWMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3OQorbXNnaWQgIm1ha2UgaW5kZXggb2JqZWN0cyBoZWFkIG5vZGVzIgorbXNnc3RyICJ04bqhbyDigJxpbmRleCBvYmplY3RzIGhlYWQgbm9kZXPigJ0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MAorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAidOG6oW8g4oCccmVmbG9ncyBoZWFkIG5vZGVz4oCdICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgxCittc2dpZCAiYWxzbyBjb25zaWRlciBwYWNrcyBhbmQgYWx0ZXJuYXRlIG9iamVjdHMiCittc2dzdHIgImPFqW5nIGPDom4gbmjhuq9jIMSR4bq/biBjw6FjIMSR4buRaSB0xrDhu6NuZyBnw7NpIHbDoCB0aGF5IHRo4bq/IgorCisjOiBidWlsdGluL2ZzY2suYzo3ODIKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAiY2jhu4kga2nhu4NtIHRyYSBr4bq/dCBu4buRaSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgzCittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICJjaG8gcGjDqXAga2nhu4NtIHRyYSBo4bqhbiBjaOG6vyBoxqFuIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODUKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAiZ2hpIGPDoWMgxJHhu5FpIHTGsOG7o25nIGtow7RuZyDEkcaw4bujYyBxdeG6o24gbMO9IHRyb25nIC5naXQvbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg2IGJ1aWx0aW4vcHJ1bmUuYzoxMzIKK21zZ2lkICJzaG93IHByb2dyZXNzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgcXXDoSB0csOsbmgiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NworbXNnaWQgInNob3cgdmVyYm9zZSBuYW1lcyBmb3IgcmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImhp4buDbiB0aOG7iyB0w6puIGNoaSB0aeG6v3QgY2hvIGPDoWMgxJHhu5FpIHTGsOG7o25nIMSR4buNYyDEkcaw4bujYyIKKworIzogYnVpbHRpbi9mc2NrLmM6ODQ2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyNQorbXNnaWQgIkNoZWNraW5nIG9iamVjdHMiCittc2dzdHIgIsSQYW5nIGtp4buDbSB0cmEgY8OhYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IG1pc3NpbmciCittc2dzdHIgIiVzOiB0aGnhur91IMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9mc2NrLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyOiBleHBlY3RlZCBzaGExLCBnb3QgJyVzJyIKK21zZ3N0ciAidGhhbSBz4buRIGtow7RuZyBo4bujcCBs4buHOiBj4bqnbiBzaGExLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2djLmM6MzUKK21zZ2lkICJnaXQgZ2MgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBnYyBbPGPDoWMgdMO5eSBjaOG7jW4+XSIKKworIzogYnVpbHRpbi9nYy5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmc3RhdCAlczogJXMiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBs4bqleSB0aMO0bmcgdGluIHRo4buRbmcga8OqIHbhu4EgdOG6rXAgdGluICVzOiAlcyIKKworIzogYnVpbHRpbi9nYy5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJyVzJyB2YWx1ZSAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgcGjDom4gdMOtY2gg4oCcJXPigJ0gZ2nDoSB0cuG7iyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9nYy5jOjQ3NSBidWlsdGluL2luaXQtZGIuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB24buBIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2djLmM6NDg0IGJ1aWx0aW4vbm90ZXMuYzoyNDAgYnVpbHRpbi90YWcuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9nYy5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGxhc3QgZ2MgcnVuIHJlcG9ydGVkIHRoZSBmb2xsb3dpbmcuIFBsZWFzZSBjb3JyZWN0IHRoZSByb290IGNhdXNlXG4iCisiYW5kIHJlbW92ZSAlcy5cbiIKKyJBdXRvbWF0aWMgY2xlYW51cCB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgdW50aWwgdGhlIGZpbGUgaXMgcmVtb3ZlZC5cbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkzhuqduIGNo4bqheSBnYyBjdeG7kWkgxJHDoyBiw6FvIGPDoW8gY8OhYyB24bqlbiDEkeG7gSBzYXUgxJHDonkuIFZ1aSBsw7JuZyBz4butYSBuZ3V5w6puIG5ow6JuXG4iCisidOG6rW4gZ+G7kWMgdsOgIHjDs2EgYuG7jyAlcy5cbiIKKyJWaeG7h2MgdOG7sSDEkeG7mW5nIGThu41uIGThurlwIHPhur0ga2jDtG5nIHRo4buxYyB0aGkgY2hvIMSR4bq/biBraGkgdOG6rXAgdGluIMSRxrDhu6NjIHjDs2EgYuG7jy5cbiIKKyJcbiIKKyIlcyIKKworIzogYnVpbHRpbi9nYy5jOjUzOQorbXNnaWQgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICJ4w7NhIGLhu48gY8OhYyDEkeG7kWkgdMaw4bujbmcga2jDtG5nIMSRxrDhu6NjIHRoYW0gY2hp4bq/dSIKKworIzogYnVpbHRpbi9nYy5jOjU0MQorbXNnaWQgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIKK21zZ3N0ciAiY+G6qW4gdGjhuq1uIGjGoW4gbuG7r2EgKHTEg25nIHRo4budaSBnaWFuIGNo4bqheSkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICJi4bqtdCBjaOG6vyDEkeG7mSBhdXRvLWdjIgorCisjOiBidWlsdGluL2djLmM6NTQ1Cittc2dpZCAiZm9yY2UgcnVubmluZyBnYyBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGdjIHJ1bm5pbmciCittc2dzdHIgImJ14buZYyBnYyBjaOG6oXkgbmdheSBj4bqjIGtoaSBjw7MgdGnhur9uIHRyw6xuaCBnYyBraMOhYyDEkWFuZyBjaOG6oXkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDgKK21zZ2lkICJyZXBhY2sgYWxsIG90aGVyIHBhY2tzIGV4Y2VwdCB0aGUgbGFyZ2VzdCBwYWNrIgorbXNnc3RyICLEkcOzbmcgZ8OzaSBs4bqhaSB04bqldCBj4bqjIGPDoWMgZ8OzaSBraMOhYyBuZ2/huqFpIHRy4burIGfDs2kgbOG7m24gbmjhuqV0IgorCisjOiBidWlsdGluL2djLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBnYy5sb2dleHBpcnkgdmFsdWUgJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBwaMOibiB0w61jaCBnacOhIHRy4buLIGdjLmxvZ2V4cGlyeSAlcyIKKworIzogYnVpbHRpbi9nYy5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgcHJ1bmUgZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgcGjDom4gdMOtY2ggZ2nDoSB0cuG7iyBwcnVuZSAlcyIKKworIzogYnVpbHRpbi9nYy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaW4gYmFja2dyb3VuZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiIgorIlThu7EgxJHhu5luZyDEkcOzbmcgZ8OzaSBraG8gY2jhu6lhIHRyw6puIG7hu4FuIGjhu4cgdGjhu5FuZyDEkeG7gyB04buRaSDGsHUgaMOzYSBoaeG7h3Ugc3XhuqV0IGzDoG0gIgorInZp4buHYy5cbiIKKworIzogYnVpbHRpbi9nYy5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIlThu7EgxJHhu5luZyDEkcOzbmcgZ8OzaSBraG8gY2jhu6lhIMSR4buDIHThu5FpIMawdSBow7NhIGhp4buHdSBzdeG6pXQgbMOgbSB2aeG7h2MuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIKK21zZ3N0ciAiWGVtIFwiZ2l0IGhlbHAgZ2NcIiDEkeG7gyBjw7MgaMaw4bubbmcgZOG6q24gY+G7pSB0aOG7gyB24buBIGPDoWNoIGThu41uIGThurlwIGtobyBnaXQuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCittc2dzdHIgIiIKKyJnYyDEkWFuZyDEkcaw4bujYyB0aOG7sWMgaGnhu4duIHRyw6puIG3DoXkg4oCcJXPigJ0gcGlkICU8UFJJdU1BWD4gKGTDuW5nIC0tZm9yY2UgbuG6v3Uga2jDtG5nICIKKyJwaOG6o2kgdGjhur8pIgorCisjOiBidWlsdGluL2djLmM6Njk0Cittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgorbXNnc3RyICIiCisiQ8OzIHF1w6Egbmhp4buBdSDEkeG7kWkgdMaw4bujbmcgdOG7sSBkbyBraMO0bmcgxJHGsOG7o2MgZMO5bmcgxJHhur9uOyBow6N5IGNo4bqheSBs4buHbmgg4oCcZ2l0IHBydW5l4oCdICIKKyLEkeG7gyB4w7NhIGLhu48gY2jDum5nIMSRaS4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjMwCittc2dpZCAiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8cGF0dGVybj4gWzxyZXY+Li4uXSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZ3JlcCBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbLWVdIDxt4bqrdT4gWzxyZXY+4oCmXSBbWy0tXSA8L8SRxrDhu51uZy9k4bqrbj7igKZdIgorCisjOiBidWlsdGluL2dyZXAuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVwOiBn4bq3cCBs4buXaSB04bqhbyB0dXnhur9uICh0aHJlYWQpOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkgZm9yICVzIgorbXNnc3RyICJz4buRIHR1eeG6v24gxJHDoyBjaG8ga2jDtG5nIGjhu6NwIGzhu4cgKCVkKSBjaG8gJXMiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBpcyB0aGUgY29uZmlndXJhdGlvbgorIy4gdmFyaWFibGUgZm9yIHR3ZWFraW5nIHRocmVhZHMsIGN1cnJlbnRseQorIy4gZ3JlcC50aHJlYWRzCisjLgorIzogYnVpbHRpbi9ncmVwLmM6Mjg3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzggYnVpbHRpbi9pbmRleC1wYWNrLmM6MTczMQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiCittc2dzdHIgImtow7RuZyBo4buXIHRy4bujIMSRYSB0dXnhur9uLCBi4buPIHF1YSAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NDUzIGJ1aWx0aW4vZ3JlcC5jOjU3OCBidWlsdGluL2dyZXAuYzo2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIGPDonkgKCVzKSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIGzhu4duaCBncmVwIChs4buNYyB0w6xtKSB04burIMSR4buRaSB0xrDhu6NuZyB0aHXhu5ljIGtp4buDdSAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgImNodXnhu4NuIMSR4bq/biDigJwlY+KAnSBj4bqnbiBt4buZdCBnacOhIHRy4buLIGLhurFuZyBz4buRIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDMKK21zZ2lkICJzZWFyY2ggaW4gaW5kZXggaW5zdGVhZCBvZiBpbiB0aGUgd29yayB0cmVlIgorbXNnc3RyICJ0w6xtIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyB0aGF5IHbDrCB0cm9uZyBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDUKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAidMOsbSB0cm9uZyBu4buZaSBkdW5nIGtow7RuZyDEkcaw4bujYyBxdeG6o24gbMO9IGLhu59pIGdpdCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODA3Cittc2dpZCAic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJ0w6xtIGtp4bq/bSBjw6FjIHThuq1wIHRpbiDEkcaw4bujYyB2w6AgY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIGThuqV1IHbhur90IgorCisjOiBidWlsdGluL2dyZXAuYzo4MDkKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgImPDoWMgdOG6rXAgdGluIGLhu4sgYuG7jyBxdWEgxJHGsOG7o2MgY2jhu4kgxJHhu4tuaCB0aMO0bmcgcXVhIOKAnC5naXRpZ25vcmXigJ0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxMQorbXNnaWQgInJlY3Vyc2l2ZWx5IHNlYXJjaCBpbiBlYWNoIHN1Ym1vZHVsZSIKK21zZ3N0ciAidMOsbSBraeG6v20gxJHhu4cgcXV5IHRyb25nIHThu6tuZyBtw7QtxJF1bi1jb24iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNAorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgbmjhu69uZyBkw7JuZyBraMO0bmcga2jhu5twIHbhu5tpIG3huqt1IgorCisjOiBidWlsdGluL2dyZXAuYzo4MTYKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICJwaMOibiBiaeG7h3QgSE9BL3RoxrDhu51uZyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE4Cittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgImNo4buJIGto4bubcCBt4bqrdSB04bqhaSDEkcaw4budbmcgcmFuaCBnaeG7m2kgdOG7qyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIwCittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAieOG7rSBsw70gdOG6rXAgdGluIG5o4buLIHBow6JuIG5oxrAgbMOgIGThuqFuZyB2xINuIGLhuqNuIHRoxrDhu51uZyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIyCittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICJraMO0bmcga2jhu5twIG3huqt1IHRyb25nIGPDoWMgdOG6rXAgdGluIG5o4buLIHBow6JuIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjUKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyB3aXRoIHRleHRjb252IGZpbHRlcnMiCittc2dzdHIgInjhu60gbMO9IHThuq1wIHRpbiBuaOG7iyBwaMOibiB24bubaSBjw6FjIGLhu5kgbOG7jWMg4oCcdGV4dGNvbnbigJ0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNworbXNnaWQgInNlYXJjaCBpbiBzdWJkaXJlY3RvcmllcyAoZGVmYXVsdCkiCittc2dzdHIgInTDrG0ga2nhur9tIHRyb25nIHRoxrAgbeG7pWMgY29uICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI5Cittc2dpZCAiZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4gbGV2ZWxzIgorbXNnc3RyICJo4bqhIHh14buRbmcgw610IG5o4bqldCBsw6AgbeG7qWMgPHPDonU+IgorCisjOiBidWlsdGluL2dyZXAuYzo4MzMKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAiZMO5bmcgYmnhu4N1IHRo4bupYyBjaMOtbmggcXVpIFBPU0lYIGPDsyBt4bufIHLhu5luZyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM2Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICJz4butIGThu6VuZyBiaeG7g3UgdGjhu6ljIGNow61uaCBxdXkga2nhu4N1IFBPU0lYICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM5Cittc2dpZCAiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiCittc2dzdHIgImRp4buFbiBk4buLY2ggY8OhYyBt4bqrdSBuaMawIGzDoCBjaHXhu5dpIGPhu5EgxJHhu4tuaCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQyCittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJz4butIGThu6VuZyBiaeG7g3UgdGjhu6ljIGNow61uaCBxdXkgdMawxqFuZyB0aMOtY2ggUGVybCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ1Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgImhp4buDbiB0aOG7iyBz4buRIGPhu6dhIGTDsm5nIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDYKK21zZ2lkICJzaG93IGNvbHVtbiBudW1iZXIgb2YgZmlyc3QgbWF0Y2giCittc2dzdHIgImhp4buDbiB0aOG7iyBz4buRIGPhu5l0IGPhu6dhIGto4bubcCB24bubaSBt4bqrdSDEkeG6p3UgdGnDqm4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NworbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICJraMO0bmcgaGnhu4NuIHRo4buLIHTDqm4gdOG6rXAgdGluIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDgKK21zZ2lkICJzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgdMOqbiB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgImhp4buDbiB0aOG7iyB0w6puIHThuq1wIHRpbiB0xrDGoW5nIMSR4buRaSB24bubaSB0aMawIG3hu6VjIMSR4buJbmggKHRvcCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MgorbXNnaWQgInNob3cgb25seSBmaWxlbmFtZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIHTDqm4gdOG6rXAgdGluIHRoYXkgdsOsIG5o4buvbmcgZMOybmcga2jhu5twIHbhu5tpIG3huqt1IgorCisjOiBidWlsdGluL2dyZXAuYzo4NTQKK21zZ2lkICJzeW5vbnltIGZvciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKK21zZ3N0ciAixJHhu5NuZyBuZ2jEqWEgduG7m2kgLS1maWxlcy13aXRoLW1hdGNoZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NworbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIHTDqm4gY2hvIG5o4buvbmcgdOG6rXAgdGluIGtow7RuZyBraOG7m3AgduG7m2kgbeG6q3UiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1OQorbXNnaWQgInByaW50IE5VTCBhZnRlciBmaWxlbmFtZXMiCittc2dzdHIgInRow6ptIE5VTCB2w6BvIHNhdSB0w6puIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYyCittc2dpZCAic2hvdyBvbmx5IG1hdGNoaW5nIHBhcnRzIG9mIGEgbGluZSIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIG5o4buvbmcgcGjhuqduIGto4bubcCB24bubaSBt4bqrdSBj4bunYSBt4buZdCBkw7JuZyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY0Cittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHPhu5EgbMaw4bujbmcga2jhu5twIHRoYXkgdsOsIG5o4buvbmcgZMOybmcga2jhu5twIHbhu5tpIG3huqt1IgorCisjOiBidWlsdGluL2dyZXAuYzo4NjUKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAidMO0IHPDoW5nIHBo4bqnbiBraOG7m3AgbeG6q3UiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NworbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgZMOybmcgdHLhu5FuZyBnaeG7r2EgY8OhYyBs4bqnbiBraOG7m3AgdOG7qyBjw6FjIHThuq1wIHRpbiBraMOhYyBiaeG7h3QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2OQorbXNnaWQgInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiCittc2dzdHIgIiIKKyJoaeG7g24gdGjhu4sgdMOqbiB04bqtcCB0aW4gbeG7mXQgbOG6p24gcGjDrWEgdHLDqm4gY8OhYyBs4bqnbiBraOG7m3AgdOG7qyBjw7luZyBt4buZdCB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3MgorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgPG4+IGTDsm5nIG7hu5lpIGR1bmcgcGjDrWEgdHLGsOG7m2MgdsOgIHNhdSBjw6FjIGzhuqduIGto4bubcCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc1Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIDxuPiBkw7JuZyBu4buZaSBkdW5nIHRyxrDhu5tjIGto4bubcCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc3Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgPG4+IGTDsm5nIG7hu5lpIGR1bmcgc2F1IGto4bubcCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc5Cittc2dpZCAidXNlIDxuPiB3b3JrZXIgdGhyZWFkcyIKK21zZ3N0ciAiZMO5bmcgPG4+IHR1eeG6v24gdHLDrG5oIGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODAKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICJk4bqhbmcgdmnhur90IHThuq90IGPhu6dhIC1DIFPhu5AiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4MworbXNnaWQgInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBkw7JuZyB2w7NpIHTDqm4gaMOgbSB0csaw4bubYyBjw6FjIGzhuqduIGto4bubcCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg1Cittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgImhp4buDbiB0aOG7iyBow6BtIGJhbyBxdWFuaCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg4Cittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgIsSR4buNYyBt4bqrdSB04burIHThuq1wLXRpbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkwCittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJtYXRjaCA8beG6q3U+IgorCisjOiBidWlsdGluL2dyZXAuYzo4OTIKK21zZ2lkICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIgorbXNnc3RyICJ04buVIGjhu6NwIG3huqt1IMSRxrDhu6NjIGNo4buJIHJhIHbhu5tpIHTDuXkgY2jhu41uIC1lIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDQKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAixJHGsGEgcmEgZ+G7o2kgw70gduG7m2kgdHLhuqFuZyB0aMOhaSB0aG/DoXQgbcOgIGtow7RuZyBjw7Mga+G6v3QgeHXhuqV0IgorCisjOiBidWlsdGluL2dyZXAuYzo5MDYKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hlcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2ggYWxsIHBhdHRlcm5zIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyBjw6FpIGto4bubcCB04burIHThuq1wIHRpbiBtw6AgbsOzIGto4bubcCB0b8OgbiBi4buZIGPDoWMgbeG6q3UiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwOAorbXNnaWQgInNob3cgcGFyc2UgdHJlZSBmb3IgZ3JlcCBleHByZXNzaW9uIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OieSBwaMOibiB0w61jaCBjw7ogcGjDoXAgY2hvIGJp4buDdSB0aOG7qWMg4oCcZ3JlcOKAnSAodMOsbSBraeG6v20pIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTIKK21zZ2lkICJwYWdlciIKK21zZ3N0ciAiZMOgbiB0cmFuZyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTEyCittc2dpZCAic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIHThuq1wIHRpbiBraOG7m3AgdHJvbmcgdHJhbmcgZ2nhuqV5IgorCisjOiBidWlsdGluL2dyZXAuYzo5MTYKK21zZ2lkICJhbGxvdyBjYWxsaW5nIG9mIGdyZXAoMSkgKGlnbm9yZWQgYnkgdGhpcyBidWlsZCkiCittc2dzdHIgImNobyBwaMOpcCBn4buNaSBncmVwKDEpIChi4buLIGLhu48gcXVhIGLhu59pIGzhuqduIGThu4tjaCBuw6B5KSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTgzCittc2dpZCAibm8gcGF0dGVybiBnaXZlbiIKK21zZ3N0ciAiY2jGsGEgY2jhu4kgcmEgbeG6q3UiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMTkKK21zZ2lkICItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cyIKK21zZ3N0ciAiLS1uby1pbmRleCBoYXkgLS11bnRyYWNrZWQga2jDtG5nIMSRxrDhu6NjIHPhu60gZOG7pW5nIGPDuW5nIHbhu5tpIHJldnMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgcmV2aXNpb246ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpIMSRaeG7g20geMOpdCBkdXnhu4d0OiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA1NworbXNnaWQgIi0tdW50cmFja2VkIG5vdCBzdXBwb3J0ZWQgd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIKK21zZ3N0ciAidMO5eSBjaOG7jW4gLS11bnRyYWNrZWQga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MgduG7m2kgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjEKK21zZ2lkICJpbnZhbGlkIG9wdGlvbiBjb21iaW5hdGlvbiwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICJ04buVIGjhu6NwIHTDuXkgY2jhu41uIGtow7RuZyBo4bujcCBs4buHLCBi4buPIHF1YSAtLXRocmVhZHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjQgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTQ3Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgImtow7RuZyBo4buXIHRy4bujIMSRYSB0dXnhur9uLCBi4buPIHF1YSAtLXRocmVhZHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSIKK21zZ3N0ciAic+G7kSB0dXnhur9uIGNo4buJIHJhIGtow7RuZyBo4bujcCBs4buHICglZCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMDEKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBjaOG7iSBsw6BtIHZp4buHYyB0csOqbiBjw6J5LWzDoG0tdmnhu4djIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTI3Cittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICItLWNhY2hlZCBoYXkgLS11bnRyYWNrZWQga2jDtG5nIMSRxrDhu6NjIHPhu60gZOG7pW5nIHbhu5tpIC0tbm8taW5kZXgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzMKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cyIKK21zZ3N0ciAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQga2jDtG5nIHRo4buDIHPhu60gZOG7pW5nIGNobyBu4buZaSBkdW5nIGzGsHUgZOG6pXUgduG6v3QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExNDEKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4iCittc2dzdHIgImPhuqMgaGFpIC0tY2FjaGVkIHbDoCBjw6FjIGPDonkgcGjhuqNpIMSRxrDhu6NjIGNo4buJIHJhIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODUKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDxraeG7g3U+XSBbLXddIFstLXBhdGg9PHThuq1wLXRpbj4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8dOG6rXAtdGluPuKApiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg2Cittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICJraeG7g3UgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiZ2hpIMSR4buRaSB0xrDhu6NuZyB2w6BvIGThu68gbGnhu4d1IMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMQorbXNnaWQgInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIgorbXNnc3RyICLEkeG7jWMgxJHhu5FpIHTGsOG7o25nIHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiBzdGRpbiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMworbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICJsxrB1IGPDoWMgdOG6rXAgdGluIG3DoCBuw7Mga2jDtG5nIGPDsyBjw6FjIGLhu5kgbOG7jWMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDQKK21zZ2lkICIiCisianVzdCBoYXNoIGFueSByYW5kb20gZ2FyYmFnZSB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgR2l0IgorbXNnc3RyICJjaOG7iSBj4bqnbiBixINtIHLDoWMgbmfhuqt1IG5oacOqbiDEkeG7gyB04bqhbyBt4buZdCDEkeG7kWkgdMaw4bujbmcgaOG7j25nIMSR4buDIG3DoCBn4buhIGzhu5dpIEdpdCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNQorbXNnaWQgInByb2Nlc3MgZmlsZSBhcyBpdCB3ZXJlIGZyb20gdGhpcyBwYXRoIgorbXNnc3RyICJ44butIGzDvSB04bqtcCB0aW4gbmjGsCBsw6AgbsOzIMSRYW5nIOG7nyB0aMawIG3hu6VjIG7DoHkiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2Cittc2dpZCAicHJpbnQgYWxsIGF2YWlsYWJsZSBjb21tYW5kcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGRhbmggc8OhY2ggY8OhYyBjw6J1IGzhu4duaCBuZ8aw4budaSBkw7luZyBjw7MgdGjhu4Mgc+G7rSBk4bulbmciCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3Cittc2dpZCAiZXhjbHVkZSBndWlkZXMiCittc2dzdHIgImjGsOG7m25nIGThuqtuIGxv4bqhaSB0cuG7qyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDgKK21zZ2lkICJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBkYW5oIHPDoWNoIGPDoWMgaMaw4bubbmcgZOG6q24gaOG7r3UgZOG7pW5nIgorCisjOiBidWlsdGluL2hlbHAuYzo0OQorbXNnaWQgInByaW50IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIgorbXNnc3RyICJpbiByYSB04bqldCBj4bqjIGPDoWMgdMOqbiBiaeG6v24gY+G6pXUgaMOsbmgiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUxCittc2dpZCAic2hvdyBtYW4gcGFnZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRyYW5nIG1hbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTIKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGjGsOG7m25nIGThuqtuIHPhu60gZOG7pW5nIHRyb25nIHRyw6xuaCBkdXnhu4d0IHdlYiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTQKK21zZ2lkICJzaG93IGluZm8gcGFnZSIKK21zZ3N0ciAiaGnhu4duIHRyYW5nIGluZm8iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU2Cittc2dpZCAicHJpbnQgY29tbWFuZCBkZXNjcmlwdGlvbiIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIG3DtCB04bqjIGzhu4duaCIKKworIzogYnVpbHRpbi9oZWxwLmM6NjEKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8bOG7h25oPl0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICJraMO0bmcgbmjhuq1uIHJhIMSR4buLbmggZOG6oW5nIHRy4bujIGdpw7pwIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDQKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkga2jhu59pIGNo4bqheSBlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExNworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHBow6JuIHTDrWNoIHBoacOqbiBi4bqjbiBlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICJwaGnDqm4gYuG6o24gY+G7p2EgZW1hY3NjbGllbnQg4oCcJWTigJ0gcXXDoSBjxakgKDwgMjIpLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTQzIGJ1aWx0aW4vaGVscC5jOjE2NSBidWlsdGluL2hlbHAuYzoxNzUgYnVpbHRpbi9oZWxwLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB0aOG7sWMgdGhpIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2hlbHAuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyLigJwlc+KAnTogxJHGsOG7nW5nIGThuqtuIGtow7RuZyBo4buXIHRy4bujIGLhu5kgdHLDrG5oIGNoaeG6v3UgbWFuLlxuIgorIkjDo3kgY8OibiBuaOG6r2MgxJHhur9uIHZp4buHYyBz4butIGThu6VuZyDigJxtYW4uPHRvb2w+LmNtZOKAnSDEkeG7gyB0aGF5IHRo4bq/LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIuKAnCVz4oCdOiBjbWQgKGzhu4duaCkgaOG7lyB0cuG7oyBi4buZIHRyw6xuaCBjaGnhur91IG1hbi5cbiIKKyJIw6N5IGPDom4gbmjhuq9jIMSR4bq/biB2aeG7h2Mgc+G7rSBk4bulbmcg4oCcbWFuLjx0b29sPi5wYXRo4oCdIMSR4buDIHRoYXkgdGjhur8uIgorCisjOiBidWlsdGluL2hlbHAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAi4oCcJXPigJ06IGtow7RuZyByw7UgY2jGsMahbmcgdHLDrG5oIHhlbSBtYW4uIgorCisjOiBidWlsdGluL2hlbHAuYzozNjcKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImtow7RuZyBjw7MgdHLDrG5oIHhlbSB0cuG7oyBnacO6cCBk4bqhbmcgbWFucGFnZSB0aeG6v3AgaOG7o3AgduG7m2kgecOqdSBj4bqndSIKKworIzogYnVpbHRpbi9oZWxwLmM6Mzc1Cittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAia2jDtG5nIGPDsyB0csOsbmggeGVtIHRy4bujIGdpw7pwIGThuqFuZyBpbmZvIHRp4bq/cCBo4bujcCB24bubaSB5w6p1IGPhuqd1IgorCisjOiBidWlsdGluL2hlbHAuYzo0MzQgYnVpbHRpbi9oZWxwLmM6NDQ1IGdpdC5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFsaWFzZWQgdG8gJyVzJyIKK21zZ3N0ciAi4oCcJXPigJ0gxJHGsOG7o2MgxJHhurd0IGLDrSBkYW5oIHRow6BuaCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ4IGdpdC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiY2h14buXaSBhbGlhcy4lcyBzYWk6ICVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NzcgYnVpbHRpbi9oZWxwLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICJjw6FjaCBkw7luZzogJXMlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkxCittc2dpZCAiJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgaW5mb3JtYXRpb24iCittc2dzdHIgIkNo4bqheSBs4buHbmgg4oCcZ2l0IGhlbHAgY29uZmln4oCdIMSR4buDIGPDsyB0aMOqbSB0aMO0bmcgdGluIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgImtp4buDdSDEkeG7kWkgdMaw4bujbmcga2jDtG5nIGto4bubcCB04bqhaSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB24buBIMSR4buRaSB0xrDhu6NuZyBj4bqnbiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyAlczogY+G6p24ga2nhu4N1ICVzIG5oxrBuZyBs4bqhaSBuaOG6rW4gxJHGsOG7o2MgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAia2jDtG5nIHRo4buDIMSRaeG7gW4gdGjDqm0gdsOgbyAlZCBieXRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjgKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgImfhurdwIGvhur90IHRow7pjIHThuq1wIHRpbiBFT0YgcXXDoSBz4bubbSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY5Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAibOG7l2kgxJHhu41jIOG7nyDEkeG6p3UgdsOgbyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjgxCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgInPhu60gZOG7pW5nIG5oaeG7gXUgaMahbiBz4buRIGzGsOG7o25nIGJ5dGUgbcOgIG7DsyBz4bq1biBjw7MiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4OCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjYwNgorbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgImfDs2kgcXXDoSBs4bubbiBzbyB24bubaSDEkeG7i25oIG5naMSpYSBoaeG7h24gdOG6oWkgY+G7p2Ega2nhu4N1IG9mZl90IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTEgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjk1Cittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICJnw7NpIMSRw6Mgdsaw4bujdCBxdcOhIGPhu6EgdOG7kWkgxJFhIMSRxrDhu6NjIHBow6lwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gcGFja2ZpbGUg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyNgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICJjaOG7ryBrw70gY2hvIGfDs2kga2jDtG5nIGto4bubcCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgImtow7RuZyBo4buXIHRy4bujIHBoacOqbiBi4bqjbiBnw7NpICU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICU8UFJJdU1BWD46ICVzIgorbXNnc3RyICJnw7NpIGPDsyDEkeG7kWkgdMaw4bujbmcgc2FpIHThuqFpIGtob+G6o25nIGLDuSAlPFBSSXVNQVg+OiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmxhdGUgcmV0dXJuZWQgJWQiCittc2dzdHIgInjhuqMgbsOpbiB0cuG6oyB24buBICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MTUKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICJ0csOgbiBnacOhIHRy4buLIGtob+G6o25nIGLDuSBjaG8gxJHhu5FpIHTGsOG7o25nIGRlbHRhIGPGoSBz4bufIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MjMKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBpcyBvdXQgb2YgYm91bmQiCittc2dzdHIgImtob+G6o25nIGLDuSBjxqEgc+G7nyBjaG8gZGVsdGEgbuG6sW0gbmdvw6BpIHBo4bqhbSB2aSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb2JqZWN0IHR5cGUgJWQiCittc2dzdHIgImtow7RuZyBoaeG7g3Uga2nhu4N1IMSR4buRaSB0xrDhu6NuZyAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTYyCittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNo4bqheSBow6BtIHByZWFkIGNobyB04bqtcCB0aW4gZ8OzaSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAidOG6rXAgdGluIGfDs2kgYuG7iyBr4bq/dCB0aMO6YyBz4bubbSwgdGhp4bq/dSAlPFBSSXVNQVg+IGJ5dGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU5MAorbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICJz4buxIG3DonUgdGh14bqrbiB44bqjIG7DqW4gbmdoacOqbSB0cuG7jW5nIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzUgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc2NQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgIlPhu7AgVkEgQ0jhuqBNIFNIQTEgxJDDgyBY4bqiWSBSQSBW4buaSSAlcyEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1OAorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgaW5mbyAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyB0aMO0bmcgdGluIMSR4buRaSB0xrDhu6NuZyBz4bq1biBjw7MgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgxJHhu5FpIHTGsOG7o25nIMSRw6MgdOG7k24gdOG6oWkgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgYmxvYiBraMO0bmcgaOG7o3AgbOG7hyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NgorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFja2VkIG9iamVjdCIKK21zZ3N0ciAibOG7l2kgZnNjayB0cm9uZyDEkeG7kWkgdMaw4bujbmcgxJHDs25nIGfDs2kiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiS2jDtG5nIHBo4bqjaSB04bqldCBj4bqjIGPDoWMgxJHhu5FpIHTGsOG7o25nIGNvbiBj4bunYSAlcyBsw6AgY8OzIHRo4buDIHbhu5tpIHThu5tpIMSRxrDhu6NjIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MjAgYnVpbHRpbi9pbmRleC1wYWNrLmM6OTUxCittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgw6FwIGThu6VuZyBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEyMQorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICLEkGFuZyBuaOG6rW4gduG7gSBjw6FjIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEyMQorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIkPDoWMgxJHhu5FpIHTGsOG7o25nIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1NQorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAiZ8OzaSBi4buLIHNhaSBo4buPbmcgKFNIQTEga2jDtG5nIGto4bubcCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjAKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aMO0bmcgdGluIHRo4buRbmcga8OqIHBhY2tmaWxlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTYzCittc2dpZCAicGFjayBoYXMganVuayBhdCB0aGUgZW5kIgorbXNnc3RyICJwYWNrIGPDsyBwaOG6p24gdGjhu6thIOG7nyBjdeG7kWkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNzUKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICJs4buZbiB44buZbiBoxqFuIGPhuqMgxJFpw6puIHLhu5Mga2hpIGNo4bqheSBow6BtIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTk4Cittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAixJBhbmcgcGjDom4gZ2nhuqNpIGPDoWMgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMDggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIHR1eeG6v246ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjQ5Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAibOG7mW4geOG7mW4gaMahbiBj4bqjIMSRacOqbiBy4buTIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0clswXSAixJHhuqd5IMSR4bunIHbhu5tpICVkIMSR4buRaSB0xrDhu6NuZyBu4buZaSBi4buZIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICJH4bq3cCB04buVbmcga2nhu4NtIHRyYSB0YWlsIGtow7RuZyBj4bqnbiBjaG8gJXMgKMSRxKlhIGjhu49uZz8pIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGEiCittc2dpZF9wbHVyYWwgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIgorbXNnc3RyWzBdICJnw7NpIGPDsyAlZCBkZWx0YSBjaMawYSDEkcaw4bujYyBnaeG6o2kgcXV54bq/dCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBhcHBlbmRlZCBvYmplY3QgKCVkKSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHjhuqMgbsOpbiDEkeG7kWkgdMaw4bujbmcgbuG7kWkgdGjDqm0gKCVkKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIG7hu5lpIGLhu5kgJXMgYuG7iyBo4buPbmciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgInTDqm4gdOG6rXAgdGluIHThuq1wIHRpbiBnw7NpIOKAnCVz4oCdIGtow7RuZyDEkcaw4bujYyBr4bq/dCB0aMO6YyBi4bqxbmcgxJF1w7RpIOKAnC5wYWNr4oCdIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAlcyBmaWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgJXMgdOG6rXAgdGluIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSB3cml0dGVuICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSRw7NuZyB04bqtcCB0aW4gxJHGsOG7o2MgZ2hpICVzIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDYzCittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgImfhurdwIGzhu5dpIHRyb25nIGtoaSDEkcOzbmcgdOG6rXAgdGluIGfDs2kiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzcKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbMawdSB04bqtcCB0aW4gZ8OzaSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ4NQorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbMawdSB0cuG7ryB04bqtcCB0aW4gZ2hpIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTI5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICJzYWkgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4gZ8OzaSDEkcOjIHPhurVuIGPDsyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4gaWR4IGPhu6dhIGfDs2kgY2hvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gImtow7RuZyBkZWx0YTogJWQgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gImNoaeG7gXUgZMOgaSB4w61jaCA9ICVkOiAlbHUgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjkzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIktow7RuZyB0aOG7gyBxdWF5IGzhuqFpIGN3ZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc0MiBidWlsdGluL2luZGV4LXBhY2suYzoxNzQ1CisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzYxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICIlcyBzYWkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3ODEKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAiLS1maXgtdGhpbiBraMO0bmcgdGjhu4MgxJHGsOG7o2MgZMO5bmcgbcOgIGtow7RuZyBjw7MgLS1zdGRpbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4MworbXNnaWQgIi0tc3RkaW4gcmVxdWlyZXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1zdGRpbiBj4bqnbiBt4buZdCBraG8gZ2l0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzg5Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICJkw7luZyB0w7l5IGNo4buNbiAtLXZlcmlmeSBtw6Aga2jDtG5nIMSRxrBhIHJhIHTDqm4gcGFja2ZpbGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4MzcgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjU4MgorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFjayBvYmplY3RzIgorbXNnc3RyICJs4buXaSBmc2NrIHRyb25nIGPDoWMgxJHhu5FpIHTGsOG7o25nIGfDs2kiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aMO0bmcgdGluIHRo4buRbmcga8OqIHbhu4EgbeG6q3Ug4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBvcGVuZGlyKCkg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcmVhZGxpbmsg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIGxpw6puIGvhur90IG3hu4FtIChzeW1saW5rKSDigJwlc+KAnSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4Mgc2FvIGNow6lwIOKAnCVz4oCdIHNhbmcg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICLEkWFuZyBs4budIMSRaSBt4bqrdSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgaW4gJXMiCittc2dzdHIgImPDoWMgbeG6q3Uga2jDtG5nIMSRxrDhu6NjIHTDrG0gdGjhuqV5IHRyb25nICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIGZyb20gJyVzJzogJXMiCittc2dzdHIgImtow7RuZyBzYW8gY2jDqXAgY8OhYyBt4bqrdSB04burIOKAnCVz4oCdOiAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICJraMO0bmcgdGjhu4MgeOG7rSBsw70gKGhhbmRsZSkgdOG6rXAgdGluIGtp4buDdSAlZCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICJraMO0bmcgZGkgY2h1eeG7g24gxJHGsOG7o2MgJXMgdsOgbyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU0IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMgxJHDoyBjw7MgdOG7qyB0csaw4bubYyBy4buTaSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAixJDDoyBraOG7n2kgdOG6oW8gbOG6oWkga2hvIEdpdCBjaGlhIHPhursgc+G6tW4gY8OzIHRyb25nICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICLEkMOjIGto4bufaSB04bqhbyBs4bqhaSBraG8gR2l0IHPhurVuIGPDsyB0cm9uZyAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICLEkMOjIGto4bufaSB04bqhbyBs4bqhaSBraG8gR2l0IGNoaWEgc+G6uyB0cuG7kW5nIHLhu5duZyBz4bq1biBjw7MgdHJvbmcgJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICLEkMOjIGto4bufaSB04bqhbyBs4bqhaSBraG8gR2l0IHRy4buRbmcgcuG7l25nIHPhurVuIGPDsyB0cm9uZyAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ2OAorbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGjGsC1t4bulYy104bqhbT5dIFstLXNoYXJlZFs9PGPDoWMtIgorInF1eeG7gW4+XV0gW3RoxrAtbeG7pWNdIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTEKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAiY8OhYyBxdXnhu4FuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTIKK21zZ2lkICJzcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMiCittc2dzdHIgImNo4buJIHJhIGPDoWkgbcOgIGtobyBnaXQgxJHGsOG7o2MgY2hpYSBz4bq7IGdp4buvYSBuaGnhu4F1IG5nxrDhu51pIGTDuW5nIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MjkgYnVpbHRpbi9pbml0LWRiLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG1rZGlyICh04bqhbyB0aMawIG3hu6VjKTogJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBjaGRpciAoY2h1eeG7g24gxJHhu5VpIHRoxrAgbeG7pWMpIHNhbmcgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIiCisiJXMgKGhv4bq3YyAtLXdvcmstdHJlZT08dGjGsC1t4bulYz4pIGtow7RuZyBjaG8gcGjDqXAga2jDtG5nIGNo4buJIMSR4buLbmggJXMgKGhv4bq3YyAtLWdpdC0iCisiZGlyPTx0aMawLW3hu6VjPikiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdHJ1eSBj4bqtcCBjw6J5ICh0cmVlKSBsw6BtIHZp4buHYyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNgorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHRva2VuPlsoPXw6KTx2YWx1ZT5dKS4uLl0gWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHRo4bq7PlsoPXw6KTxnacOhLXRy4buLPl0p4oCmXSBbPHThuq1wLXRpbj7igKZdIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk1Cittc2dpZCAiZWRpdCBmaWxlcyBpbiBwbGFjZSIKK21zZ3N0ciAic+G7rWEgY8OhYyB04bqtcCB0aW4gdOG6oWkgY2jhu5ciCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTYKK21zZ2lkICJ0cmltIGVtcHR5IHRyYWlsZXJzIgorbXNnc3RyICJi4buZIGTDsiB24bq/dCBj4bqvdCBi4buPIHBo4bqnbiB0cuG7kW5nIHLhu5duZyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OQorbXNnaWQgIndoZXJlIHRvIHBsYWNlIHRoZSBuZXcgdHJhaWxlciIKK21zZ3N0ciAixJHhurd0IHBo4bqnbiDEkXXDtGkgbeG7m2kg4bufIMSRw6J1IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMQorbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJ0aGFvIHTDoWMga2hpIMSRw6MgY8OzIHBo4bqnbiDEkXXDtGkiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAzCittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgaXMgbWlzc2luZyIKK21zZ3N0ciAidGhhbyB0w6FjIGtoaSB0aGnhur91IHBo4bqnbiDEkXXDtGkiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA1Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIHRyYWlsZXJzIgorbXNnc3RyICJjaOG7iSB4deG6pXQgcGjhuqduIMSRdcO0aSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDYKK21zZ2lkICJkbyBub3QgYXBwbHkgY29uZmlnIHJ1bGVzIgorbXNnc3RyICLEkeG7q25nIMOhcCBk4bulbmcgY8OhYyBxdXkgdOG6r2MgY+G6pXUgaMOsbmgiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA3Cittc2dpZCAiam9pbiB3aGl0ZXNwYWNlLWNvbnRpbnVlZCB2YWx1ZXMiCittc2dzdHIgIm7hu5FpIGPDoWMgZ2nDoSB0cuG7iyBraG/huqNuZy10cuG6r25nLWxpw6puLXRp4bq/cCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDgKK21zZ2lkICJzZXQgcGFyc2luZyBvcHRpb25zIgorbXNnc3RyICLEkeG6t3QgY8OhYyB0w7l5IGNo4buNbiBwaMOibiB0w61jaCBjw7ogcGjDoXAiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEwCittc2dpZCAiZG8gbm90IHRyZWF0IC0tLSBzcGVjaWFsbHkiCittc2dzdHIgImtow7RuZyBjb2kgLS0tIGzDoCDEkeG6t2MgYmnhu4d0IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMQorbXNnaWQgInRyYWlsZXIiCittc2dzdHIgImLhu5kgZMOyIHbhur90IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMgorbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICJi4buZIGTDsiB24bq/dCBj4bqnbiB0aMOqbSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMjMKK21zZ2lkICItLXRyYWlsZXIgd2l0aCAtLW9ubHktaW5wdXQgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS10cmFpbGVyIGPDuW5nIHbhu5tpIC0tb25seS1pbnB1dCBraMO0bmcgaOG7o3AgbMO9IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEzMworbXNnaWQgIm5vIGlucHV0IGZpbGUgZ2l2ZW4gZm9yIGluLXBsYWNlIGVkaXRpbmciCittc2dzdHIgImtow7RuZyDEkcawYSByYSB04bqtcCB0aW4gxJHhuqd1IHbDoG8gxJHhu4Mgc+G7rWEgdOG6oWktY2jhu5ciCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTYKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbG9nIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8dsO5bmcteGVtLXjDqXQ+XSBbWy0tXSA8L8SRxrDhu51uZy9k4bqrbj7igKZdIgorCisjOiBidWlsdGluL2xvZy5jOjU3Cittc2dpZCAiZ2l0IHNob3cgWzxvcHRpb25zPl0gPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCBzaG93IFs8Y8OhYyB0w7l5IGNo4buNbj5dIDzEkeG7kWktdMaw4bujbmc+4oCmIgorCisjOiBidWlsdGluL2xvZy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tZGVjb3JhdGUgb3B0aW9uOiAlcyIKK21zZ3N0ciAidMO5eSBjaOG7jW4tLWRlY29yYXRlIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzQKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIG3DoyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL2xvZy5jOjE3NQorbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICJT4butIGThu6VuZyB04bqtcCB0aW4gw6FuaCB44bqhIHRoxrAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc3Cittc2dpZCAib25seSBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJjaOG7iSB0w7Qgc8OhbmcgY8OhYyB0aGFtIGNoaeG6v3Uga2jhu5twIHbhu5tpIDxt4bqrdT4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc5Cittc2dpZCAiZG8gbm90IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgImtow7RuZyB0w7Qgc8OhbmcgY8OhYyB0aGFtIGNoaeG6v3Uga2jhu5twIHbhu5tpIDxt4bqrdT4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwCittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAiY8OhYyB0w7l5IGNo4buNbiB0cmFuZyB0csOtIgorCisjOiBidWlsdGluL2xvZy5jOjE4MworbXNnaWQgIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICJY4butIGzDvSBjaOG7iSBkw7JuZyB2w7luZyBuLG0gdHJvbmcgdOG6rXAgdGluLCB0w61uaCB04burIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmFsIG91dHB1dDogJWQgJXNcbiIKK21zZ3N0ciAiS+G6v3QgeHXhuqV0IGN14buRaSBjw7luZzogJWQgJXNcbiIKKworIzogYnVpbHRpbi9sb2cuYzo1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHNob3cgJXM6IGJhZCBmaWxlIgorbXNnc3RyICJnaXQgc2hvdyAlczogc2FpIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9sb2cuYzo1NTAgYnVpbHRpbi9sb2cuYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIMSR4buRaSB0xrDhu6NuZyAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB0eXBlOiAlZCIKK21zZ3N0ciAia2jDtG5nIG5o4bqtbiByYSBraeG7g3U6ICVkIgorCisjOiBidWlsdGluL2xvZy5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBjb3ZlciBmcm9tIGRlc2NyaXB0aW9uIG1vZGUiCittc2dzdHIgIiVzOiBiYW8gYuG7jWMga2jDtG5nIGjhu6NwIGzhu4cgdOG7qyBjaOG6vyDEkeG7mSBtw7QgdOG6oyIKKworIzogYnVpbHRpbi9sb2cuYzo4MjEKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyBraMO0bmcgY8OzIGdpw6EgdHLhu4sgY+G7pSB0aOG7gyIKKworIzogYnVpbHRpbi9sb2cuYzo5MzYKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgInTDqm4gY+G7p2EgdGjGsCBt4bulYyBr4bq/dCB4deG6pXQgcXXDoSBkw6BpIgorCisjOiBidWlsdGluL2xvZy5jOjk1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4gbWnhur9uZyB2w6E6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjk2OQorbXNnaWQgIm5lZWQgZXhhY3RseSBvbmUgcmFuZ2UiCittc2dzdHIgImPhuqduIGNow61uaCB4w6FjIG3hu5l0IHbDuW5nIgorCisjOiBidWlsdGluL2xvZy5jOjk3OQorbXNnaWQgIm5vdCBhIHJhbmdlIgorbXNnc3RyICJraMO0bmcgcGjhuqNpIGzDoCBt4buZdCB2w7luZyIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQzCittc2dpZCAiY292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAi4oCcY292ZXIgbGV0dGVy4oCdIGPhuqduIGNobyDEkeG7i25oIGThuqFuZyB0aMawIgorCisjOiBidWlsdGluL2xvZy5jOjExNDkKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGNvdmVyLWxldHRlciBmaWxlIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdOG6oW8gY8OhYyB04bqtcCB0aW4gY292ZXItbGV0dGVyIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAiaW4tcmVwbHktdG8gxJFpw6puIHLhu5M6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTUKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggWzxjw6FjIHTDuXkgY2jhu41uPl0gWzxr4buDLXThu6s+IHwgPHbDuW5nLXhlbS14w6l0Pl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMxMworbXNnaWQgInR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICJoYWkgdGjGsCBt4bulYyBr4bq/dCB4deG6pXQ/IgorCisjOiBidWlsdGluL2xvZy5jOjE0MjQgYnVpbHRpbi9sb2cuYzoyMTk3IGJ1aWx0aW4vbG9nLmM6MjE5OSBidWlsdGluL2xvZy5jOjIyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21taXQgJXMiCittc2dzdHIgImtow7RuZyBoaeG7g3UgbOG6p24gY2h1eeG7g24gZ2lhbyAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDM0IGJ1aWx0aW4vcmVwbGFjZS5jOjU4IGJ1aWx0aW4vcmVwbGFjZS5jOjIwNworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBwaMOibiBnaeG6o2kg4oCcJXPigJ0gbmjGsCBsw6AgbeG7mXQgdGhhbSBjaGnhur91IGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzOQorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgImtow7RuZyB0w6xtIHRo4bqleSBu4buBbiBow7JhIHRy4buZbiBjaMOtbmggeMOhYyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDQzCittc2dpZCAiIgorImZhaWxlZCB0byBnZXQgdXBzdHJlYW0sIGlmIHlvdSB3YW50IHRvIHJlY29yZCBiYXNlIGNvbW1pdCBhdXRvbWF0aWNhbGx5LFxuIgorInBsZWFzZSB1c2UgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byB0byB0cmFjayBhIHJlbW90ZSBicmFuY2guXG4iCisiT3IgeW91IGNvdWxkIHNwZWNpZnkgYmFzZSBjb21taXQgYnkgLS1iYXNlPTxiYXNlLWNvbW1pdC1pZD4gbWFudWFsbHkiCittc2dzdHIgIiIKKyJn4bq3cCBs4buXaSBraGkgbOG6pXkgdGjGsOG7o25nIG5ndeG7k24sIG7hur91IGLhuqFuIG114buRbiBnaGkgbOG6oWkgbOG6p24gY2h1eeG7g24gZ2lhbyBu4buBbiBt4buZdFxuIgorImPDoWNoIHThu7EgxJHhu5luZywgdnVpIGzDsm5nIGTDuW5nIFwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10b1wiIMSR4buDIHRoZW8gZMO1aVxuIgorIm5ow6FuaCBtw6F5IGNo4bunLiBIb+G6t2MgbMOgIGLhuqFuIGPDsyB0aOG7gyBjaOG7iSDEkeG7i25oIGzhuqduIGNodXnhu4NuIGdpYW8gbuG7gW4gYuG6sW5nXG4iCisiXCItLWJhc2U9PGJhc2UtY29tbWl0LWlkPlwiIG3hu5l0IGPDoWNoIHRo4bunIGPDtG5nIgorCisjOiBidWlsdGluL2xvZy5jOjE0NjMKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdMOsbSBu4buBbiBow7JhIHRy4buZbiBjaMOtbmggeMOhYyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc0Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkIGJlIHRoZSBhbmNlc3RvciBvZiByZXZpc2lvbiBsaXN0IgorbXNnc3RyICJs4bqnbiBjaHV54buDbiBnaWFvIG7hu4FuIGtow7RuZyBsw6AgdOG7lSB0acOqbiBj4bunYSBkYW5oIHPDoWNoIMSRaeG7g20geMOpdCBkdXnhu4d0IgorCisjOiBidWlsdGluL2xvZy5jOjE0NzgKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGRuJ3QgYmUgaW4gcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyBu4buBbiBraMO0bmcgxJHGsOG7o2MgdHJvbmcgZGFuaCBzw6FjaCDEkWnhu4NtIHjDqXQgZHV54buHdCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTMxCittc2dpZCAiY2Fubm90IGdldCBwYXRjaCBpZCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IG3DoyBtaeG6v25nIHbDoSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTgzCittc2dpZCAiZmFpbGVkIHRvIGluZmVyIHJhbmdlLWRpZmYgcmFuZ2VzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgc3V5IGx14bqtbiByYW5nZS1kaWZmICh2w7luZyBraMOhYyBiaeG7h3QpIgorCisjOiBidWlsdGluL2xvZy5jOjE2MjkKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICJkw7luZyBbUEFUQ0ggbi9tXSBuZ2F5IGPhuqMgduG7m2kgbWnhur9uZyB2w6EgxJHGoW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzMgorbXNnaWQgInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIgorbXNnc3RyICJkw7luZyBbVsOBXSBuZ2F5IGPhuqMgduG7m2kgY8OhYyBtaeG6v25nIHbDoSBwaOG7qWMgdOG6oXAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzNgorbXNnaWQgInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IgorbXNnc3RyICJoaeG7g24gdGjhu4sgbWnhur9uZyB2w6EgcmEgxJHhuqd1IHJhIGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzOAorbXNnaWQgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIgorbXNnc3RyICJ04bqhbyBiw6wgdGjGsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQwCittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICJz4butIGThu6VuZyBjaOG7l2kgZMOjeSBz4buRIGThuqFuZyDEkcahbiBnaeG6o24gY2hvIHTDqm4gdOG6rXAtdGluIHh14bqldCByYSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQxCittc2dpZCAic2Z4IgorbXNnc3RyICJzZngiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MgorbXNnaWQgInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIgorbXNnc3RyICJz4butIGThu6VuZyA8c2Z4PiB0aGF5IGNobyDigJwucGF0Y2jigJ0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NAorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgImLhuq90IMSR4bqndSDEkcOhbmggc+G7kSBtaeG6v25nIHbDoSB04burIDxuPiB0aGF5IHbDrCAxIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDYKK21zZ2lkICJtYXJrIHRoZSBzZXJpZXMgYXMgTnRoIHJlLXJvbGwiCittc2dzdHIgIsSRw6FuaCBk4bqldSBjaHXhu5dpIG7hu5FpIHRp4bq/cCBk4bqhbmcgdGjhu6ktTiByZS1yb2xsIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDgKK21zZ2lkICJVc2UgW1JGQyBQQVRDSF0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICJEw7luZyBbUkZDIFbDgV0gdGhheSBjaG8gW1bDgV0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1MQorbXNnaWQgImNvdmVyLWZyb20tZGVzY3JpcHRpb24tbW9kZSIKK21zZ3N0ciAiY292ZXItZnJvbS1kZXNjcmlwdGlvbi1tb2RlIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTIKK21zZ2lkICJnZW5lcmF0ZSBwYXJ0cyBvZiBhIGNvdmVyIGxldHRlciBiYXNlZCBvbiBhIGJyYW5jaCdzIGRlc2NyaXB0aW9uIgorbXNnc3RyICJ04bqhbyByYSBjw6FjIHBo4bqnbiBj4bunYSBt4buZdCBsw6EgdGjGsCBiYW8gZ+G7k20gZOG7sWEgdHLDqm4gbcO0IHThuqMgY+G7p2EgbmjDoW5oIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTQKK21zZ2lkICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIkTDuW5nIFs8dGnhu4FuLXThu5E+XSB0aGF5IGNobyBbVsOBXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAic3RvcmUgcmVzdWx0aW5nIGZpbGVzIGluIDxkaXI+IgorbXNnc3RyICJsxrB1IGPDoWMgdOG6rXAgdGluIGvhur90IHF14bqjIHRyb25nIDx0Lm3hu6VjPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYwCittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgImtow7RuZyBzdHJpcC9hZGQgW1bDgV0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MworbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgImtow7RuZyBr4bq/dCB4deG6pXQgZGlmZiAobmjhu69uZyBraMOhYyBiaeG7h3QpIG5o4buLIHBow6JuIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjUKK21zZ2lkICJvdXRwdXQgYWxsLXplcm8gaGFzaCBpbiBGcm9tIGhlYWRlciIKK21zZ3N0ciAieHXhuqV0IG3hu41pIG3DoyBixINtIGFsbC16ZXJvIHRyb25nIHBo4bqnbiDEkeG6p3UgRnJvbSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY3Cittc2dpZCAiZG9uJ3QgaW5jbHVkZSBhIHBhdGNoIG1hdGNoaW5nIGEgY29tbWl0IHVwc3RyZWFtIgorbXNnc3RyICJraMO0bmcgYmFvIGfhu5NtIG1p4bq/bmcgdsOhIGto4bubcCB24bubaSBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIHRoxrDhu6NuZyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjkKK21zZ2lkICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiCittc2dzdHIgImhp4buDbiB0aOG7iyDEkeG7i25oIGThuqFuZyBtaeG6v25nIHbDoSB0aGF5IHbDrCBt4bq3YyDEkeG7i25oIChtaeG6v25nIHbDoSArIHRo4buRbmcga8OqKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjcxCittc2dpZCAiTWVzc2FnaW5nIgorbXNnc3RyICJM4budaSBuaOG6r24iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MgorbXNnaWQgImhlYWRlciIKK21zZ3N0ciAixJHhuqd1IMSR4buBIHRoxrAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MworbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgInRow6ptIMSR4bqndSDEkeG7gSB0aMawIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzQgYnVpbHRpbi9sb2cuYzoxNjc2Cittc2dpZCAiZW1haWwiCittc2dzdHIgInRoxrAgxJFp4buHbiB04butIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzQKK21zZ2lkICJhZGQgVG86IGhlYWRlciIKK21zZ3N0ciAidGjDqm0gVG86IMSR4bqndSDEkeG7gSB0aMawIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAidGjDqm0gQ2M6IMSR4bqndSDEkeG7gSB0aMawIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzgKK21zZ2lkICJpZGVudCIKK21zZ3N0ciAidGjhu6V0IGzhu4EiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3OQorbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgIiIKKyLEkeG6t3Qg4oCcxJDhu4thIGNo4buJIGfhu61p4oCdIHRow6BuaCA8dGjhu6UgbOG7gT4gKGhv4bq3YyB0aOG7pXQgbOG7gSBuZ8aw4budaSBjb21taXQgbuG6v3UgYuG7jyBxdcOqbikiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MQorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgIm1lc3NhZ2UtaWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MgorbXNnaWQgIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIKK21zZ3N0ciAiZMO5bmcgdGjGsCDEkeG6p3UgdGnDqm4gxJHhu4MgdHLhuqMgbOG7nWkgPG1lc3NhZ2UtaWQ+IgorCisjOiBidWlsdGluL2xvZy5jOjE2ODMgYnVpbHRpbi9sb2cuYzoxNjg2Cittc2dpZCAiYm91bmRhcnkiCittc2dzdHIgInJhbmggZ2nhu5tpIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODQKK21zZ2lkICJhdHRhY2ggdGhlIHBhdGNoIgorbXNnc3RyICLEkcOtbmgga8OobSBtaeG6v25nIHbDoSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjg3Cittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAiZMO5bmcgbWnhur9uZyB2w6EgbMOgbSBu4buZaSBkdW5nIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTEKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAiY2hvIHBow6lwIGx14buTbmcgbOG7nWkgbmjhuq9uLCBraeG7g3U6IOKAnHNoYWxsb3figJ0sIOKAnGRlZXDigJ0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5MworbXNnaWQgInNpZ25hdHVyZSIKK21zZ3N0ciAiY2jhu68ga8O9IgorCisjOiBidWlsdGluL2xvZy5jOjE2OTQKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUiCittc2dzdHIgInRow6ptIGNo4buvIGvDvSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk1Cittc2dpZCAiYmFzZS1jb21taXQiCittc2dzdHIgImzhuqduX2NodXnhu4NuX2dpYW9fbuG7gW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NgorbXNnaWQgImFkZCBwcmVyZXF1aXNpdGUgdHJlZSBpbmZvIHRvIHRoZSBwYXRjaCBzZXJpZXMiCittc2dzdHIgImFkZCB0csaw4bubYyBo4bq/dCDEkcOyaSBo4buPaSB0aMO0bmcgdGluIGPDonkgdOG7m2kgc8OqLXJpIG1p4bq/bmcgdsOhIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTgKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUgZnJvbSBhIGZpbGUiCittc2dzdHIgInRow6ptIGNo4buvIGvDvSB04burIG3hu5l0IHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk5Cittc2dpZCAiZG9uJ3QgcHJpbnQgdGhlIHBhdGNoIGZpbGVuYW1lcyIKK21zZ3N0ciAia2jDtG5nIGhp4buDbiB0aOG7iyBjw6FjIHTDqm4gdOG6rXAgdGluIGPhu6dhIG1p4bq/bmcgdsOhIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDEKK21zZ2lkICJzaG93IHByb2dyZXNzIHdoaWxlIGdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGLhu5kgxJFvIHRp4bq/biB0cmnhu4NuIHRyb25nIGtoaSB04bqhbyBjw6FjIG1p4bq/bmcgdsOhIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDMKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmV2PiBpbiBjb3ZlciBsZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisiaGnhu4NuIHRo4buLIGPDoWMgdGhheSDEkeG7lWkgZOG7sWEgdHLDqm4gPHJldj4gdHJvbmcgY8OhYyBjaOG7ryBiYW8gYuG7jWMgaG/hurdjIG1p4bq/bmcgdsOhIMSRxqFuIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDYKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmVmc3BlYz4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorImhp4buDbiB0aOG7iyBjw6FjIHRoYXkgxJHhu5VpIGThu7FhIHRyw6puIDxyZWZzcGVjPiB0cm9uZyBjw6FjIGNo4buvIGJhbyBi4buNYyBob+G6t2MgbWnhur9uZyB2w6EgIgorIsSRxqFuIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDgKK21zZ2lkICJwZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIgorbXNnc3RyICJ04bu3IGzhu4cgcGjhuqduIHRyxINtIHRoZW8gY8OhaSB04bqhbyBsw6Agd2VpZ2h0ZWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICVzIgorbXNnc3RyICJkw7JuZyB0aOG7pXQgbOG7gSBraMO0bmcgaOG7o3AgbOG7hzogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwNworbXNnaWQgIi1uIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItbiB2w6AgIC1rIGxv4bqhaSB04burIGzhuqtuIG5oYXUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwOQorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgdsOgIC1rIHh1bmcga2jhuq9jIG5oYXUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxNworbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1vbmx5IGtow7RuZyBo4bujcCBsw70iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxOQorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLXN0YXR1cyBraMO0bmcgaOG7o3AgbMO9IgorCisjOiBidWlsdGluL2xvZy5jOjE4MjEKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tY2hlY2sga2jDtG5nIGjhu6NwIGzDvSIKKworIzogYnVpbHRpbi9sb2cuYzoxODU0Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgIsSR4bqndSByYSBjaHXhuqluLCBoYXkgdGjGsCBt4bulYywgY2jhu41uIGPDoWkgbsOgbz8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk1OAorbXNnaWQgIi0taW50ZXJkaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiLS1pbnRlcmRpZmYgY+G6p24gLS1jb3Zlci1sZXR0ZXIgaG/hurdjIHbDoSDEkcahbiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYyCittc2dpZCAiSW50ZXJkaWZmOiIKK21zZ3N0ciAiSW50ZXJkaWZmOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVyZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIkludGVyZGlmZiBk4buxYSB0csOqbiB2JWQ6IgorCisjOiBidWlsdGluL2xvZy5jOjE5NjkKK21zZ2lkICItLWNyZWF0aW9uLWZhY3RvciByZXF1aXJlcyAtLXJhbmdlLWRpZmYiCittc2dzdHIgIi0tY3JlYXRpb24tZmFjdG9yIHnDqnUgY+G6p3UgLS1yYW5nZS1kaWZmIgorCisjOiBidWlsdGluL2xvZy5jOjE5NzMKK21zZ2lkICItLXJhbmdlLWRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICItLXJhbmdlLWRpZmYgecOqdSBj4bqndSAtLWNvdmVyLWxldHRlciBob+G6t2MgbWnhur9uZyB2w6EgxJHGoW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk4MQorbXNnaWQgIlJhbmdlLWRpZmY6IgorbXNnc3RyICJSYW5nZS1kaWZmOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJhbmdlLWRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICJSYW5nZS1kaWZmIGThu7FhIHRyw6puIHYlZDoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk5MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzaWduYXR1cmUgZmlsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIHThuq1wIHRpbiBjaOG7ryBrw70g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjAyOQorbXNnaWQgIkdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAixJBhbmcgdOG6oW8gY8OhYyBtaeG6v25nIHbDoSIKKworIzogYnVpbHRpbi9sb2cuYzoyMDczCittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB04bqhbyBjw6FjIHThuq1wIHRpbiBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjEzMgorbXNnaWQgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIgorbXNnc3RyICJnaXQgY2hlcnJ5IFstdl0gWzx0aMaw4bujbmctbmd14buTbj4gWzzEkeG6p3U+IFs8Z2nhu5tpLWjhuqFuPl1dXSIKKworIzogYnVpbHRpbi9sb2cuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIKK21zZ3N0ciAiIgorIktow7RuZyB0w6xtIHRo4bqleSBuaMOhbmggbeG6oW5nIMSRxrDhu6NjIHRoZW8gZMO1aSwgaMOjeSBjaOG7iSDEkeG7i25oIDx0aMaw4bujbmctbmd14buTbj4gbeG7mXQgIgorImPDoWNoIHRo4bunIGPDtG5nLlxuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDcwCittc2dpZCAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgbHMtZmlsZXMgWzxjw6FjIHTDuXkgY2jhu41uPl0gWzx04bqtcC10aW4+4oCmXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyNgorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgIm5o4bqtbiBk4bqhbmcgY8OhYyB0cuG6oW5nIHRow6FpIHThuq1wIHRpbiB24bubaSB0aOG6uyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyOAorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIgorbXNnc3RyICIiCisiZMO5bmcgY2jhu68gY8OhaSB2aeG6v3QgdGjGsOG7nW5nIGNobyBjw6FjIHThuq1wIHRpbiDigJxhc3N1bWUgdW5jaGFuZ2Vk4oCdIChnaeG6oyDEkeG7i25oIGtow7RuZyAiCisidGhheSDEkeG7lWkpIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMwCittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnZnNtb25pdG9yIGNsZWFuJyBmaWxlcyIKK21zZ3N0ciAiZMO5bmcgY2jhu68gY8OhaSB2aeG6v3QgdGjGsOG7nW5nIGNobyBjw6FjIHThuq1wIHRpbiDigJxmc21vbml0b3IgY2xlYW7igJ0iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzIKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgdOG6rXAgdGluIMSRxrDhu6NjIG5o4bubIHThuqFtIHbDoG8gxJHhuqd1IHJhICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNAorbXNnaWQgInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyB04bqtcCB0aW4gxJHDoyB4w7NhIHRyb25nIGvhur90IHh14bqldCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNgorbXNnaWQgInNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgdOG6rXAgdGluIMSRw6MgYuG7iyBz4butYSDEkeG7lWkgcmEga+G6v3QgeHXhuqV0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM4Cittc2dpZCAic2hvdyBvdGhlciBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyB04bqtcCB0aW4ga2jDoWMgdHJvbmcga+G6v3QgeHXhuqV0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQwCittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIHThuq1wIHRpbiBi4buLIGLhu48gcXVhIHRyb25nIGvhur90IHh14bqldCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MworbXNnaWQgInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJoaeG7g24gdGjhu4sgdMOqbiDEkeG7kWkgdMaw4bujbmcgY+G7p2EgbuG7mWkgZHVuZyDEkcaw4bujYyDEkeG6t3QgbMOqbiBi4buHIHBow7NuZyByYSBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDUKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyB04bqtcCB0aW4gdHLDqm4gaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBtw6AgbsOzIGPhuqduIMSRxrDhu6NjIGfhu6EgYuG7jyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NworbXNnaWQgInNob3cgJ290aGVyJyBkaXJlY3RvcmllcycgbmFtZXMgb25seSIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIHTDqm4gY+G7p2EgY8OhYyB0aMawIG3hu6VjIOKAnGtow6Fj4oCdIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ5Cittc2dpZCAic2hvdyBsaW5lIGVuZGluZ3Mgb2YgZmlsZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBr4bq/dCB0aMO6YyBkw7JuZyBj4bunYSBjw6FjIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1MQorbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgImtow7RuZyBoaeG7g24gdGjhu4sgdGjGsCBt4bulYyBy4buXbmciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTQKK21zZ2lkICJzaG93IHVubWVyZ2VkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIHThuq1wIHRpbiBjaMawYSBow7JhIHRy4buZbiB0cm9uZyBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTYKK21zZ2lkICJzaG93IHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRow7RuZyB0aW4gcmVzb2x2ZS11bmRvIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU4Cittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICJi4buPIHF1YSBuaOG7r25nIHThuq1wIHRpbiBraOG7m3AgduG7m2kgbeG7mXQgbeG6q3UiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjEKK21zZ2lkICJleGNsdWRlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gPGZpbGU+IgorbXNnc3RyICJt4bqrdSBsb+G6oWkgdHLhu6sgxJHGsOG7o2MgxJHhu41jIHThu6sgPHThuq1wIHRpbj4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjQKK21zZ2lkICJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIKK21zZ3N0ciAixJHhu41jIHRow6ptIGPDoWMgbeG6q3Ugbmdv4bqhaSB0cuG7qyBt4buXaSB0aMawIG3hu6VjIHRyb25nIDx04bqtcCB0aW4+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY2Cittc2dpZCAiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIKK21zZ3N0ciAidGjDqm0gbG/huqFpIHRy4burIHRpw6p1IGNodeG6qW4ga2nhu4N1IGdpdCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MAorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJsw6BtIGNobyBr4bq/dCB4deG6pXQgbGnDqm4gcXVhbiDEkeG6v24gdGjGsCBt4bulYyDhu58gbeG7qWMgY2FvIG5o4bqldCAoZ+G7kWMpIGPhu6dhIGThu7Egw6FuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTczCittc2dpZCAicmVjdXJzZSB0aHJvdWdoIHN1Ym1vZHVsZXMiCittc2dzdHIgIsSR4buHIHF1eSB4dXnDqm4gcXVhIG3DtC3EkXVuIGNvbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NQorbXNnaWQgImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIKK21zZ3N0ciAibuG6v3UgPHThuq1wIHRpbj4gYuG6pXQga+G7syBraMO0bmcg4bufIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYywgeOG7rSBsw70gbsOzIG5oxrAgbeG7mXQgbOG7l2kiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzYKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAidHJlZS1pc2giCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzcKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICIiCisiZ2nhuqMgxJHhu4tuaCBy4bqxbmcgY8OhYyDEkcaw4budbmcgZOG6q24gxJHDoyBi4buLIGfhu6EgYuG7jyBr4buDIHThu6sgPHRyZWUtaXNoPiBuYXkgduG6q24gaGnhu4duIGRp4buHbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3OQorbXNnaWQgInNob3cgZGVidWdnaW5nIGRhdGEiCittc2dzdHIgImhp4buDbiB0aOG7iyBk4buvIGxp4buHdSBn4buhIGzhu5dpIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjkKK21zZ2lkICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8a2hvPiBbPGPDoWMgdGhhbSBjaGnhur91PuKApl1dIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjU5Cittc2dpZCAiZG8gbm90IHByaW50IHJlbW90ZSBVUkwiCittc2dzdHIgImtow7RuZyBoaeG7g24gdGjhu4sgVVJMIG3DoXkgY2jhu6ciCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAgYnVpbHRpbi9scy1yZW1vdGUuYzo2MiBidWlsdGluL3JlYmFzZS5jOjE1NjEKK21zZ2lkICJleGVjIgorbXNnc3RyICJ0aOG7sWMgdGhpIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYxIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjMKK21zZ2lkICJwYXRoIG9mIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIGhvc3QiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiBj4bunYSBnaXQtdXBsb2FkLXBhY2sgdHLDqm4gbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NQorbXNnaWQgImxpbWl0IHRvIHRhZ3MiCittc2dzdHIgImdp4bubaSBo4bqhbiB04bubaSBjw6FjIHRo4bq7IgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY2Cittc2dpZCAibGltaXQgdG8gaGVhZHMiCittc2dzdHIgImdp4bubaSBo4bqhbiBjaG8gY8OhYyDEkeG6p3UiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjcKK21zZ2lkICJkbyBub3Qgc2hvdyBwZWVsZWQgdGFncyIKK21zZ3N0ciAia2jDtG5nIGhp4buDbiB0aOG7iyB0aOG6uyBi4buLIHBlZWwgKGfhu410IGLhu48pIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY5Cittc2dpZCAidGFrZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiBpbnRvIGFjY291bnQiCittc2dzdHIgImzhuqV5IHVybC48YmFzZT4uaW5zdGVhZE9mIHbDoG8gdHJvbmcgdMOgaSBraG/huqNuIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjcyCittc2dpZCAiZXhpdCB3aXRoIGV4aXQgY29kZSAyIGlmIG5vIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kIgorbXNnc3RyICJ0aG/DoXQgduG7m2kgbcOjIGzDoCAyIG7hur91IGtow7RuZyB0w6xtIHRo4bqleSB0aGFtIGNoaeG6v3UgbsOgbyBraOG7m3AiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzUKK21zZ2lkICJzaG93IHVuZGVybHlpbmcgcmVmIGluIGFkZGl0aW9uIHRvIHRoZSBvYmplY3QgcG9pbnRlZCBieSBpdCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRoYW0gY2hp4bq/dSBu4bqxbSBkxrDhu5tpIMSR4buDIHRow6ptIHbDoG8gxJHhu5FpIHTGsOG7o25nIMSRxrDhu6NjIGNo4buJIGLhu59pIG7DsyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MzAKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8dHJlZS1pc2g+IFs8L8SRxrDhu51uZy9k4bqrbj7igKZdIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjgKK21zZ2lkICJvbmx5IHNob3cgdHJlZXMiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBjw6FjIHRyZWUiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMAorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIKK21zZ3N0ciAixJHhu4cgcXV5IHbDoG8gY8OhYyB0aMawIG3hu6VjIGNvbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMyCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDonkga2hpIMSR4buHIHF1eSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAiY2jhuqVtIGThu6l0IG3hu6VjIHRpbiB24bubaSBieXRlIE5VTCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM2Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiZ+G7k20gY+G6oyBrw61jaCB0aMaw4bubYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzOCBidWlsdGluL2xzLXRyZWUuYzoxNDAKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICJjaOG7iSBsaeG7h3Qga8OqIHTDqm4gdOG6rXAgdGluIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDMKK21zZ2lkICJ1c2UgZnVsbCBwYXRoIG5hbWVzIgorbXNnc3RyICJkw7luZyB0w6puIMSRxrDhu51uZyBk4bqrbiDEkeG6p3kgxJHhu6ciCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0NQorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAibGnhu4d0IGvDqiBjw6J5IG3hu6VjIHRpbjsga2jDtG5nIGNo4buJIHRoxrAgbeG7pWMgaGnhu4duIGjDoG5oIChuZ+G7pSDDvSAtLWZ1bGwtbmFtZSkiCisKKyM6IGJ1aWx0aW4vbWFpbHNwbGl0LmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IG1ib3g6ICclcyciCittc2dzdHIgIm1ib3ggdHLhu5FuZyBy4buXbmc6IOKAnCVz4oCdIgorCisjOiBidWlsdGluL21lcmdlLmM6NTUKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IG1lcmdlIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8Y29tbWl0PuKApl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NgorbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU3Cittc2dpZCAiZ2l0IG1lcmdlIC0tY29udGludWUiCittc2dzdHIgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE5Cittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJzd2l0Y2gg4oCcbeKAnSB5w6p1IGPhuqd1IG3hu5l0IGdpw6EgdHLhu4siCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAidMO5eSBjaOG7jW4g4oCcJXPigJ0gecOqdSBj4bqndSBt4buZdCBnacOhIHRy4buLIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBjaGnhur9uIGzGsOG7o2MgaMOyYSB0cuG7mW4g4oCcJXPigJ0uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiQ8OhYyBjaGnhur9uIGzGsOG7o2Mgc+G6tW4gc8OgbmcgbMOgOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiQ8OhYyBjaGnhur9uIGzGsOG7o2MgdMO5eSBjaOG7iW5oIHPhurVuIHPDoG5nIGzDoDoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDUgYnVpbHRpbi9wdWxsLmM6MTMyCittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAia2jDtG5nIGhp4buDbiB0aOG7iyB0aOG7kW5nIGvDqiBraMOhYyBiaeG7h3QgdOG6oWkgY3Xhu5FpIGPhu6dhIGzhuqduIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ4IGJ1aWx0aW4vcHVsbC5jOjEzNQorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRo4buRbmcga8OqIGtow6FjIGJp4buHdCB04bqhaSBjdeG7kWkgY+G7p2EgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDkgYnVpbHRpbi9wdWxsLmM6MTM4Cittc2dpZCAiKHN5bm9ueW0gdG8gLS1zdGF0KSIKK21zZ3N0ciAiKMSR4buTbmcgbmdoxKlhIHbhu5tpIC0tc3RhdCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTEgYnVpbHRpbi9wdWxsLmM6MTQxCittc2dpZCAiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJ0aMOqbSAow610IG5o4bqldCA8bj4pIG3hu6VjIHThu6sgc2hvcnRsb2cgY2hvIGdoaSBjaMO6IGNodXnhu4NuIGdpYW8gaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTQgYnVpbHRpbi9wdWxsLmM6MTQ3Cittc2dpZCAiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiCittc2dzdHIgInThuqFvIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gxJHGsG9uIHRoYXkgdsOsIHRo4buxYyBoaeG7h24gdmnhu4djIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU2IGJ1aWx0aW4vcHVsbC5jOjE1MAorbXNnaWQgInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIKK21zZ3N0ciAidGjhu7FjIGhp4buHbiBjaHV54buDbiBnaWFvIG7hur91IGjDsmEgdHLhu5luIHRow6BuaCBjw7RuZyAobeG6t2MgxJHhu4tuaCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTggYnVpbHRpbi9wdWxsLmM6MTUzCittc2dpZCAiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIgorbXNnc3RyICJz4butYSBjaMO6IHRow61jaCB0csaw4bubYyBraGkgY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MAorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgImNobyBwaMOpcCBjaHV54buDbi10aeG6v3AtbmhhbmggKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjYyIGJ1aWx0aW4vcHVsbC5jOjE2MAorbXNnaWQgImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiCittc2dzdHIgImLhu48gcXVhIG7hur91IGNodXnhu4NuLXRp4bq/cC1uaGFuaCBraMO0bmcgdGjhu4MgxJHGsOG7o2MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjYgYnVpbHRpbi9wdWxsLmM6MTYzCittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICJ0aOG6qW0gdHJhIHhlbSBs4bqnbiBjaHV54buDbiBnaWFvIGPDsyB0w6puIMSRw7MgY8OzIGNo4buvIGvDvSBHUEcgaOG7o3AgbOG7hyBoYXkga2jDtG5nIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY3IGJ1aWx0aW4vbm90ZXMuYzo3ODcgYnVpbHRpbi9wdWxsLmM6MTY3CisjOiBidWlsdGluL3JlYmFzZS5jOjUyMCBidWlsdGluL3JlYmFzZS5jOjE1NzUgYnVpbHRpbi9yZXZlcnQuYzoxMTQKK21zZ2lkICJzdHJhdGVneSIKK21zZ3N0ciAiY2hp4bq/biBsxrDhu6NjIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY4IGJ1aWx0aW4vcHVsbC5jOjE2OAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAiY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luIHPhur0gZMO5bmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjkgYnVpbHRpbi9wdWxsLmM6MTcxCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICJ0w7l5X2No4buNbj1nacOhX3Ry4buLIgorCisjOiBidWlsdGluL21lcmdlLmM6MjcwIGJ1aWx0aW4vcHVsbC5jOjE3MgorbXNnaWQgIm9wdGlvbiBmb3Igc2VsZWN0ZWQgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInTDuXkgY2jhu41uIGNobyBjaGnhur9uIGzGsOG7o2MgaMOyYSB0cuG7mW4gxJHDoyBjaOG7jW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzIKK21zZ2lkICJtZXJnZSBjb21taXQgbWVzc2FnZSAoZm9yIGEgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZSkiCittc2dzdHIgIiIKKyJow7JhIHRy4buZbiBnaGkgY2jDuiBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIChkw6BuaCBjaG8gaMOyYSB0cuG7mW4ga2jDtG5nLWNodXnhu4NuLXRp4bq/cC0iCisibmhhbmgpIgorCisjOiBidWlsdGluL21lcmdlLmM6Mjc5Cittc2dpZCAiYWJvcnQgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgImLDo2kgYuG7jyBxdcOhIHRyw6xuaCBow7JhIHRy4buZbiBoaeG7h24gdOG6oWkgxJFhbmcgdGjhu7FjIGhp4buHbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MQorbXNnaWQgIi0tYWJvcnQgYnV0IGxlYXZlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgYWxvbmUiCittc2dzdHIgIi0tYWJvcnQgbmjGsG5nIMSR4buDIGzhuqFpIGLhuqNuZyBt4bulYyBs4bulYyB2w6AgY8OieSBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MworbXNnaWQgImNvbnRpbnVlIHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICJ0aeG6v3AgdOG7pWMgcXXDoSB0csOsbmggaMOyYSB0cuG7mW4gaGnhu4duIHThuqFpIMSRYW5nIHRo4buxYyBoaeG7h24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODUgYnVpbHRpbi9wdWxsLmM6MTc5Cittc2dpZCAiYWxsb3cgbWVyZ2luZyB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJjaG8gcGjDqXAgaMOyYSB0cuG7mW4gbOG7i2NoIHPhu60ga2jDtG5nIGxpw6puIHF1YW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyOTEKK21zZ2lkICJieXBhc3MgcHJlLW1lcmdlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAidsOybmcgcXVhIG3Ds2MgKGhvb2spIHByZS1tZXJnZS1jb21taXQgdsOgIGNvbW1pdC1tc2ciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMDgKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNo4bqheSBzdGFzaC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTMKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgImzhu4duaCB04bqhbSBj4bqldCBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICJraMO0bmcgcGjhuqNpIGzDoCBt4buZdCDEkeG7kWkgdMaw4bujbmcgaOG7o3AgbOG7hzogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNDAgYnVpbHRpbi9tZXJnZS5jOjM1NworbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgInJlYWQtdHJlZSBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM4NworbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKGtow7RuZyBjw7MgZ8OsIMSR4buDIHNxdWFzaCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJTcXVhc2ggY29tbWl0IC0tIGtow7RuZyBj4bqtcCBuaOG6rXQgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBs4budaSBjaMO6IHRow61jaCBow7JhIHRy4buZbiAtLSBuw6puIGtow7RuZyBj4bqtcCBuaOG6rXQgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBjaOG7iSDEkeG6v24gbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6BvIGPhuqMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiQ2h14buXaSBicmFuY2guJXMubWVyZ2VvcHRpb25zIHNhaTogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MDgKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJLaMO0bmcgY+G6p20gbuG6r20gZ8OsIG5nb8OgaSBoYWkgaGVhZCBow7JhIHRy4buZbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSB0w7l5IGNo4buNbiBjaG8gbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgdOG7qyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyJW4bqrbiBjaMawYSBow7JhIHRy4buZbiBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW87IHPhu60gZOG7pW5nIGzhu4duaCDigJxnaXQgY29tbWl04oCdIMSR4buDIGhvw6BuIHThuqV0ICIKKyJ2aeG7h2MgaMOyYSB0cuG7mW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIGEgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB3aHkgdGhpcyBtZXJnZSBpcyBuZWNlc3NhcnksXG4iCisiZXNwZWNpYWxseSBpZiBpdCBtZXJnZXMgYW4gdXBkYXRlZCB1cHN0cmVhbSBpbnRvIGEgdG9waWMgYnJhbmNoLlxuIgorIlxuIgorbXNnc3RyICIiCisiSMOjeSBuaOG6rXAgdsOgbyBjw6FjIHRow7RuZyB0aW4gxJHhu4MgZ2nhuqNpIHRow61jaCB04bqhaSBzYW8gc+G7sSBow7JhIHRy4buZbiBuw6B5IGzDoCBj4bqnbiAiCisidGhp4bq/dCxcbiIKKyLEkeG6t2MgYmnhu4d0IGzDoCBraGkgbsOzIGjDsmEgdHLhu5luIHRoxrDhu6NuZyBuZ3Xhu5NuIMSRw6MgY+G6rXAgbmjhuq10IHbDoG8gdHJvbmcgbeG7mXQgbmjDoW5oICIKKyJ0b3BpYy5cbiIKKyJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwOQorbXNnaWQgIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIk7hur91IHBo4bqnbiBjaMO6IHRow61jaCBy4buXbmcgc+G6vSBo4buneSBi4buPIGzhuqduIGNodXnhu4NuIGdpYW8uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJOaOG7r25nIGTDsm5nIMSRxrDhu6NjIGLhuq90IMSR4bqndSBi4bqxbmcg4oCcJWPigJ0gc+G6vSDEkcaw4bujYyBi4buPIHF1YSwgdsOgIG7hur91IHBo4bqnbiBjaMO6XG4iCisidGjDrWNoIHLhu5duZyBz4bq9IGjhu6d5IGLhu48gbOG6p24gY2h1eeG7g24gZ2lhby5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg2NQorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAiQ2jDuiB0aMOtY2ggY+G7p2EgbOG6p24gY29tbWl0IChjaHV54buDbiBnaWFvKSBi4buLIHRy4buRbmcgcuG7l25nLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIlR1eeG7h3QgduG7nWkuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorIlZp4buHYyB04buxIMSR4buZbmcgaMOyYSB0cuG7mW4gZ+G6t3AgbOG7l2k7IGjDo3kgc+G7rWEgY8OhYyB4dW5nIMSR4buZdCBzYXUgxJHDsyBjaHV54buDbiBnaWFvIGvhur90ICIKKyJxdeG6oy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4MAorbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiS2jDtG5nIHBo4bqjaSBuaMOhbmggaGnhu4duIGjDoG5oLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4MgorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBtw6F5IGNo4bunIGNobyBuaMOhbmggaGnhu4duIGjDoG5oLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4NAorbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aMaw4bujbmcgbmd14buTbiBt4bq3YyDEkeG7i25oIMSRxrDhu6NjIMSR4buLbmggbmdoxKlhIGNobyBuaMOhbmggaGnhu4duIGjDoG5oLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICJLaMO0bmcgbmjDoW5oIG3huqFuZyB0aGVvIGTDtWkgY2hvICVzIHThu6sgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciCittc2dzdHIgIkdpw6EgdHLhu4sgc2FpIOKAnCVz4oCdIHRyb25nIGJp4bq/biBtw7RpIHRyxrDhu51uZyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UgaW4gJXM6ICVzIgorbXNnc3RyICJraMO0bmcgcGjhuqNpIGzDoCBt4buZdCB0aOG7qSBnw6wgxJHDsyBtw6AgY2jDum5nIHTDtGkgY8OzIHRo4buDIGjDsmEgdHLhu5luIHRyb25nICVzOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExODMKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAia2jDtG5nIHBo4bqjaSBsw6AgdGjhu6kgZ8OsIMSRw7MgbcOgIGNow7puZyB0w7RpIGPDsyB0aOG7gyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODYKK21zZ2lkICItLWFib3J0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWFib3J0IGtow7RuZyBuaOG6rW4gY8OhYyDEkeG7kWkgc+G7kSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTAKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIiIKKyLhu54gxJHDonkga2jDtG5nIGPDsyBs4bqnbiBow7JhIHRy4buZbiBuw6BvIMSRxrDhu6NjIGjhu6d5IGLhu48gZ2nhu69hIGNo4burbmcgY+G6oyAodGhp4bq/dSBNRVJHRV9IRUFEKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk5Cittc2dpZCAiLS1xdWl0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLXF1aXQga2jDtG5nIG5o4bqtbiBjw6FjIMSR4buRaSBz4buRIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMxMgorbXNnaWQgIi0tY29udGludWUgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tY29udGludWUga2jDtG5nIG5o4bqtbiDEkeG7kWkgc+G7kSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTYKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIuG7niDEkcOieSBraMO0bmcgY8OzIGzhuqduIGjDsmEgdHLhu5luIG7DoG8gxJFhbmcgxJHGsOG7o2MgeOG7rSBsw70gY+G6oyAodGhp4bq/dSBNRVJHRV9IRUFEKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzMyCittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkLhuqFuIGNoxrBhIGvhur90IHRow7pjIHZp4buHYyBow7JhIHRy4buZbiAoTUVSR0VfSEVBRCB24bqrbiB04buTbiB04bqhaSkuXG4iCisiSMOjeSBjaHV54buDbiBnaWFvIGPDoWMgdGhheSDEkeG7lWkgdHLGsOG7m2Mga2hpIGLhuqFuIGPDsyB0aOG7gyBow7JhIHRy4buZbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM5Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkLhuqFuIGNoxrBhIGvhur90IHRow7pjIHZp4buHYyBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCB24bqrbiB04buTbiB04bqhaSkuXG4iCisiSMOjeSBjaHV54buDbiBnaWFvIGPDoWMgdGhheSDEkeG7lWkgdHLGsOG7m2Mga2hpIGLhuqFuIGPDsyB0aOG7gyBow7JhIHRy4buZbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzQyCittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICJC4bqhbiBjaMawYSBr4bq/dCB0aMO6YyB2aeG7h2MgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgduG6q24gdOG7k24gdOG6oWkpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTYKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiQuG6oW4ga2jDtG5nIHRo4buDIGvhur90IGjhu6NwIC0tc3F1YXNoIHbhu5tpIC0tbm8tZmYuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1OAorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tY29tbWl0LiIKK21zZ3N0ciAiQuG6oW4ga2jDtG5nIHRo4buDIGvhur90IGjhu6NwIC0tc3F1YXNoIHbhu5tpIC0tY29tbWl0LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNzQKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiS2jDtG5nIGNo4buJIHJhIGzhuqduIGNodXnhu4NuIGdpYW8gdsOgIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIGNoxrBhIMSRxrDhu6NjIMSR4bq3dC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkxCittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgIlNxdWFzaCBjb21taXQgdsOgbyBt4buZdCBoZWFkIHRy4buRbmcgcuG7l25nIHbhuqtuIGNoxrBhIMSRxrDhu6NjIGjhu5cgdHLhu6MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkzCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKyJDaHV54buDbiBnaWFvIGtow7RuZy1jaHV54buDbi10aeG6v3Atbmhhbmgga2jDtG5nIGjhu6NwIGzDvSDhu58gdHJvbmcgbeG7mXQgaGVhZCB0cuG7kW5nIHLhu5duZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSBraMO0bmcgcGjhuqNpIGzDoCB0aOG7qSBnw6wgxJHDsyBtw6AgY2jDum5nIHTDtGkgY8OzIHRo4buDIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQwMAorbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgaMOyYSB0cuG7mW4gbeG7mXQgY8OhY2ggxJHDum5nIMSR4bqvbiBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIHbDoG8gbeG7mXQgaGVhZCBy4buXbmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDgxCittc2dpZCAicmVmdXNpbmcgdG8gbWVyZ2UgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAidOG7qyBjaOG7kWkgaMOyYSB0cuG7mW4gbOG7i2NoIHPhu60ga2jDtG5nIGxpw6puIHF1YW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDkwCittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiIKK21zZ3N0ciAixJDDoyBj4bqtcCBuaOG6rXQgcuG7k2kuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAixJBhbmcgY+G6rXAgbmjhuq10ICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAixJBhbmcgdGjhu60gaMOyYSB0cuG7mW4ga2nhu4N1IOKAnHRyaXZpYWwgaW4taW5kZXjigJ3igKZcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAiS2jDtG5nLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU3NAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4gWWVlYWghIgorbXNnc3RyICLEkMOjIGPhuq1wIG5o4bqtdCBy4buTaS4gWWVlYWghIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU4MAorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAiVGjhu7FjIGhp4buHbiBs4buHbmggY2h1eeG7g24tdGnhur9wLW5oYW5oIGzDoCBraMO0bmcgdGjhu4MgxJHGsOG7o2MsIMSRYW5nIGLhu48gcXVhLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDMgYnVpbHRpbi9tZXJnZS5jOjE2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIsSQYW5nIHR1YSBs4bqhaSBjw6J5IHRow6BuaCB0aOG7nWkgeGEgeMawYeKAplxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAixJBhbmcgdGjhu60gY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luICVz4oCmXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICJLaMO0bmcgY8OzIGNoaeG6v24gbMaw4bujYyBow7JhIHRy4buZbiBuw6BvIMSRxrDhu6NjIG7huq9tIGdp4buvIChoYW5kbGUpIHPhu7EgaMOyYSB0cuG7mW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICJIw7JhIHRy4buZbiB24bubaSBjaGnhur9uIGzGsOG7o2MgJXMgZ+G6t3AgbOG7l2kuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICJT4butIGThu6VuZyAlcyDEkeG7gyBjaHXhuqluIGLhu4sgZ2nhuqNpIHF1eeG6v3QgYuG6sW5nIHRheS5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAiIgorIkjDsmEgdHLhu5luIHThu7EgxJHhu5luZyDEkcOjIHRy4bufIG7Dqm4gdOG7kXQ7IGLhu4sgZOG7q25nIHRyxrDhu5tjIGtoaSB2aeG7h2MgY2h1eeG7g24gZ2lhbyDEkcaw4bujYyB5w6p1ICIKKyJj4bqndVxuIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxs4bqnbl9jaHV54buDbl9naWFvPiA8bOG6p25fY2h1eeG7g25fZ2lhbz7igKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMzCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8bOG6p25fY2h1eeG7g25fZ2lhbz7igKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM0Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8bOG6p25fY2h1eeG7g25fZ2lhbz7igKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM1Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8bOG6p25fY2h1eeG7g25fZ2lhbz4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM2Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8dGhhbS1jaGnhur91PiBbPGzhuqduX2NodXnhu4NuX2dpYW8+XSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTUzCittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICJ4deG6pXQgcmEgdOG6pXQgY+G6oyBjw6FjIMO0bmcgYsOgLCB04buVIHRpw6puIGNodW5nIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTUKK21zZ2lkICJmaW5kIGFuY2VzdG9ycyBmb3IgYSBzaW5nbGUgbi13YXkgbWVyZ2UiCittc2dzdHIgInTDrG0gdOG7lSB0acOqbiBj4bunYSBow7JhIHRy4buZbiBuLXdheSDEkcahbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU3Cittc2dpZCAibGlzdCByZXZzIG5vdCByZWFjaGFibGUgZnJvbSBvdGhlcnMiCittc2dzdHIgImxp4buHdCBrw6ogY8OhYyDigJxyZXbigJ0gbcOgIG7DsyBraMO0bmcgdGjhu4MgxJHhu41jIMSRxrDhu6NjIHThu6sgY8OhaSBraMOhYyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU5Cittc2dpZCAiaXMgdGhlIGZpcnN0IG9uZSBhbmNlc3RvciBvZiB0aGUgb3RoZXI/IgorbXNnc3RyICJsw6AgY2hhIG3hurkgxJHhuqd1IHRpw6puIGPhu6dhIGPDoWkga2jDoWM/IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNjEKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAidMOsbSB4ZW0gPGNvbW1pdD4gxJHGsOG7o2MgcuG6vSBuaMOhbmgg4bufIMSRw6J1IHThu6sgcmVmbG9nIGPhu6dhIDx0aC5jaGnhur91PiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6OQorbXNnaWQgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPG9wdGlvbnM+XSBbLUwgPG5hbWUxPiBbLUwgPG9yaWc+IFstTCA8bmFtZTI+XV1dIDxmaWxlMT4gIgorIjxvcmlnLWZpbGU+IDxmaWxlMj4iCittc2dzdHIgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbLUwgPHTDqm4xPiBbLUwgPGfhu5FjPiBbLUwgPHTDqm4yPl1dXSA8dOG6rXAtIgorInRpbjE+IDx04bqtcC10aW4tZ+G7kWM+IDx04bqtcC10aW4yPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJn4butaSBr4bq/dCBxdeG6oyB2w6BvIMSR4bqndSByYSB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNgorbXNnaWQgInVzZSBhIGRpZmYzIGJhc2VkIG1lcmdlIgorbXNnc3RyICJkw7luZyBraeG7g3UgaMOyYSBk4buxYSB0csOqbiBkaWZmMyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgIsSR4buDIHRyw6FuaCB4dW5nIMSR4buZdCwgc+G7rSBk4bulbmcgcGhpw6puIGLhuqNuIGPhu6dhIGNow7puZyB0YSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAixJHhu4MgdHLDoW5oIHh1bmcgxJHhu5l0LCBz4butIGThu6VuZyBwaGnDqm4gYuG6o24gY+G7p2EgaOG7jSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDEKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIgorbXNnc3RyICLEkeG7gyB0csOhbmggeHVuZyDEkeG7mXQsIHPhu60gZOG7pW5nIHBoacOqbiBi4bqjbiBr4bq/dCBo4bujcCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAixJHhu4MgdHLDoW5oIHh1bmcgxJHhu5l0LCBow6N5IHPhu60gZOG7pW5nIGvDrWNoIHRoxrDhu5tjIGLhu5kgdOG6oW8gbsOgeSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDUKK21zZ2lkICJkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMiCittc2dzdHIgImtow7RuZyBj4bqjbmggYsOhbyB24buBIGPDoWMgeHVuZyDEkeG7mXQgeOG6o3kgcmEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ3Cittc2dpZCAic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZy1maWxlL2ZpbGUyIgorbXNnc3RyICLEkeG6t3QgbmjDo24gY2hvIHThuq1wLXRpbi0xL3Thuq1wLXRpbi1n4buRYy904bqtcC10aW4tMiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiAlcyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSB0w7l5IGNo4buNbiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCDEkeG7kWkgdMaw4bujbmcg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZS4gSWdub3JpbmcgJXMuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlcy4gSWdub3JpbmcgJXMuIgorbXNnc3RyWzBdICJraMO0bmcgdGjhu4MgeOG7rSBsw70gbmhp4buBdSBoxqFuICVkIG7hu4FuLiBC4buPIHF1YSAlcy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NjUKK21zZ2lkICJub3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJraMO0bmcgeOG7rSBsw70gZ8OsIG5nb8OgaSBoYWkgaGVhZCBow7JhIHRy4buZbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzQgYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSByZWYgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSB0aGFtIGNoaeG6v3UgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzXG4iCittc2dzdHIgIsSQYW5nIGjDsmEgdHLhu5luICVzIHbhu5tpICVzXG4iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6NjYKK21zZ2lkICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorbXNnc3RyICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NAorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICLEkeG6p3UgdsOgbyDEkcaw4bujYyBjaOG6pW0gZOG7qXQgYuG7n2kgTlVMIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NSBidWlsdGluL3dyaXRlLXRyZWUuYzoyNgorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiY2hvIHBow6lwIHRoaeG6v3UgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NgorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAiY2hvIHBow6lwIHThuqFvIG5oaeG7gXUgaMahbiBt4buZdCBjw6J5IgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo5Cittc2dpZCAiIgorImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8b3B0aW9ucz5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTxzaXplPikiCittc2dzdHIgIiIKKyJnaXQgbXVsdGktcGFjay1pbmRleCBbPGPDoWMtdMO5eS1jaOG7jW4+XSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC0iCisic2l6ZT08Y+G7oT4pIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNgorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiCittc2dzdHIgInRoxrAgbeG7pWMgxJHhu5FpIHTGsOG7o25nIGPDsyBjaOG7qWEgbeG7mXQgYuG7mSBjw6FjIHThuq1wIHRpbiBnw7NpIHbDoCBj4bq3cCBwYWNrLWluZGV4IgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyOQorbXNnaWQgIiIKKyJkdXJpbmcgcmVwYWNrLCBjb2xsZWN0IHBhY2stZmlsZXMgb2Ygc21hbGxlciBzaXplIGludG8gYSBiYXRjaCB0aGF0IGlzICIKKyJsYXJnZXIgdGhhbiB0aGlzIHNpemUiCittc2dzdHIgIiIKKyJ0cm9uZyBzdeG7kXQgcXXDoSB0csOsbmggxJHDs25nIGfDs2kgbOG6oWksIGdvbSBjw6FjIHThuq1wIHRpbiBnw7NpIGPDsyBrw61jaCBj4buhIG5o4buPIGjGoW4gIgorInbDoG8gbeG7mXQgYsOzIGPDoWkgbcOgIGzhu5tuIGjGoW4ga8OtY2ggdGjGsOG7m2MgbsOgeSIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NTAgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo2NworbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyIKK21zZ3N0ciAiY8OzIHF1w6Egbmhp4buBdSDEkeG7kWkgc+G7kSIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjAKK21zZ2lkICItLWJhdGNoLXNpemUgb3B0aW9uIGlzIG9ubHkgZm9yICdyZXBhY2snIHN1YmNvbW1hbmQiCittc2dzdHIgInTDuXkgY2jhu41uIC0tYmF0Y2gtc2l6ZSBjaOG7iSBjaG8gbOG7h25oIGNvbiAncmVwYWNrJyIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IGPDonUgbOG7h25oIGNvbjogJXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOAorbXNnaWQgImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICJnaXQgbXYgWzxjw6FjIHTDuXkgY2jhu41uPl0gPG5ndeG7k24+4oCmIDzEkcOtY2g+IgorCisjOiBidWlsdGluL212LmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IgorbXNnc3RyICJUaMawIG3hu6VjIOKAnCVz4oCdIGPDsyDhu58gdHJvbmcgY2jhu4kgbeG7pWMgbcOgIGtow7RuZyBjw7MgbcO0LcSRdW4gY29uPyIKKworIzogYnVpbHRpbi9tdi5jOjg1Cittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJIw6N5IMSRxrBhIGPDoWMgdGhheSDEkeG7lWkgY+G7p2EgYuG6oW4gdsOgbyAuZ2l0bW9kdWxlcyBoYXkgdOG6oW0gY+G6pXQgY2jDum5nIMSRaSDEkeG7gyB44butIGzDvSIKKworIzogYnVpbHRpbi9tdi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICIlLipzIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9tdi5jOjEyNQorbXNnaWQgImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiw6lwIGJ14buZYyBkaSBjaHV54buDbiBoYXkgxJHhu5VpIHTDqm4gdGjhuq1tIGNow60gY+G6oyBraGkgxJHDrWNoIMSRw6MgdOG7k24gdOG6oWkiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjcKK21zZ2lkICJza2lwIG1vdmUvcmVuYW1lIGVycm9ycyIKK21zZ3N0ciAiYuG7jyBxdWEgY8OhYyBs4buXaSBsacOqbiBxdWFuIMSR4bq/biBkaSBjaHV54buDbiwgxJHhu5VpIHTDqm4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gJyVzJyBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgImPDsyDEkcOtY2gg4oCcJXPigJ0gbmjGsG5nIMSRw6J5IGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IHRoxrAgbeG7pWMiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICLEkGFuZyBraeG7g20gdHJhIHZp4buHYyDEkeG7lWkgdMOqbiBj4bunYSDigJwlc+KAnSB0aMOgbmgg4oCcJXPigJ1cbiIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgIm5ndeG7k24gc2FpIgorCisjOiBidWlsdGluL212LmM6MTg3Cittc2dpZCAiY2FuIG5vdCBtb3ZlIGRpcmVjdG9yeSBpbnRvIGl0c2VsZiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGRpIGNodXnhu4NuIG3hu5l0IHRoxrAgbeG7pWMgdsOgbyB0cm9uZyBjaMOtbmggbsOzIMSRxrDhu6NjIgorCisjOiBidWlsdGluL212LmM6MTkwCittc2dpZCAiY2Fubm90IG1vdmUgZGlyZWN0b3J5IG92ZXIgZmlsZSIKK21zZ3N0ciAia2jDtG5nIGRpIGNodXnhu4NuIMSRxrDhu6NjIHRoxrAgbeG7pWMgdGjDtG5nIHF1YSB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTkKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICJ0aMawIG3hu6VjIG5ndeG7k24gbMOgIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL212LmM6MjI0Cittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAia2jDtG5nIG7hurFtIGTGsOG7m2kgc+G7sSBxdeG6o24gbMO9IG3DoyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL212LmM6MjI3Cittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICLEkcOtY2ggxJHDoyB04buTbiB04bqhaSBz4bq1biBy4buTaSIKKworIzogYnVpbHRpbi9tdi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICLEkWFuZyBnaGkgxJHDqCBsw6puIOKAnCVz4oCdIgorCisjOiBidWlsdGluL212LmM6MjM4Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSDEkcOoIgorCisjOiBidWlsdGluL212LmM6MjQxCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICJuaGnhu4F1IG5ndeG7k24gY2hvIGPDuW5nIG3hu5l0IMSRw61jaCIKKworIzogYnVpbHRpbi9tdi5jOjI0MworbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAidGjGsCBt4bulYyDEkcOtY2gga2jDtG5nIHThu5NuIHThuqFpIgorCisjOiBidWlsdGluL212LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIlcywgbmd14buTbj0lcywgxJHDrWNoPSVzIgorCisjOiBidWlsdGluL212LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIsSQ4buVaSB0w6puICVzIHRow6BuaCAlc1xuIgorCisjOiBidWlsdGluL212LmM6Mjc3IGJ1aWx0aW4vcmVtb3RlLmM6NzgxIGJ1aWx0aW4vcmVwYWNrLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHhu5VpIHTDqm4g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8Y29tbWl0PuKApiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NgorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8Y8OhYyB0w7l5IGNo4buNbj5dIC0tYWxsIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY3Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tc3RkaW4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPGPDoWMgdMO5eSBjaOG7jW4+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI0Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgdMOqbiAoa2jDtG5nIFNIQS0xKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUyNQorbXNnaWQgIm9ubHkgdXNlIHRhZ3MgdG8gbmFtZSB0aGUgY29tbWl0cyIKK21zZ3N0ciAiY2jhu4kgZMO5bmcgY8OhYyB0aOG6uyDEkeG7gyDEkeG6t3QgdMOqbiBjaG8gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI3Cittc2dpZCAib25seSB1c2UgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgImNo4buJIHPhu60gZOG7pW5nIGPDoWMgdGhhbSBjaGnhur91IGto4bubcCB24bubaSA8beG6q3U+IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI5Cittc2dpZCAiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJi4buPIHF1YSBjw6FjIHRoYW0gY2hp4bq/dSBraOG7m3AgduG7m2kgPG3huqt1PiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUzMQorbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgIiIKKyJsaeG7h3Qga8OqIHThuqV0IGPhuqMgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGPDsyB0aOG7gyDEkeG7jWMgxJHGsOG7o2MgdOG7qyB04bqldCBj4bqjIGPDoWMgdGhhbSBjaGnhur91IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTMyCittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICLEkeG7jWMgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTMzCittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIgorbXNnc3RyICJjaG8gcGjDqXAgaW4gY8OhYyB0w6puIOKAnGNoxrBhIMSR4buLbmggbmdoxKlh4oCdICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUzOQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW4gdGhlIGlucHV0IChpbnRlcm5hbCB1c2UpIgorbXNnc3RyICJiw6NpIGLhu48gdGhhbSBjaGnhur91IGPDoWMgdGjhursgdHJvbmcgxJHhuqd1IHbDoG8gKGTDuW5nIG7hu5lpIGLhu5kpIgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzzEkeG7kWktdMaw4bujbmc+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+ICIKKyJ8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPGzhu51pLW5o4bqvbj4gfCAtRiAiCisiPHThuq1wLXRpbj4gfCAoLWMgfCAtQykgPMSR4buRaS10xrDhu6NuZz5dIFs8xJHhu5FpLXTGsOG7o25nPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPHThu6stxJHhu5FpLXTGsOG7o25nPiA8xJHhur9uLcSR4buRaS10xrDhu6NuZz4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICIKKyIoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bOG7nWktbmjhuq9uPiB8IC1GICIKKyI8dOG6rXAtdGluPiB8ICgtYyB8IC1DKSA8xJHhu5FpLXTGsOG7o25nPl0gWzzEkeG7kWktdMaw4bujbmc+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzzEkeG7kWktdMaw4bujbmc+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBzaG93IFs8xJHhu5FpLXTGsOG7o25nPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8Y2hp4bq/bi1sxrDhu6NjPiBdIDxub3Rlcy1yZWY+IgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHJlbW92ZSBbPMSR4buRaS10xrDhu6NuZz7igKZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW5dIFstdl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHBydW5lIFstbl0gWy12XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0Cittc2dpZCAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgW2xpc3QgWzzEkeG7kWkgdMaw4bujbmc+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OQorbXNnaWQgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFkZCBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbPMSR4buRaS10xrDhu6NuZz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NTQKK21zZ2lkICJnaXQgbm90ZXMgY29weSBbPG9wdGlvbnM+XSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICJnaXQgbm90ZXMgY29weSBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8dOG7qy3EkeG7kWktdMaw4bujbmc+IDzEkeG6v24txJHhu5FpLXTGsOG7o25nPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzx04burLcSR4buRaS10xrDhu6NuZz4gPMSR4bq/bi3EkeG7kWktdMaw4bujbmc+XeKApiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwCittc2dpZCAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYXBwZW5kIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8xJHhu5FpLXTGsOG7o25nPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NQorbXNnaWQgImdpdCBub3RlcyBlZGl0IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBlZGl0IFs8xJHhu5FpIHTGsOG7o25nPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MAorbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBzaG93IFs8xJHhu5FpIHTGsOG7o25nPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NQorbXNnaWQgImdpdCBub3RlcyBtZXJnZSBbPG9wdGlvbnM+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIFs8Y8OhYyB0w7l5IGNo4buNbj5dIDxub3Rlcy1yZWY+IgorCisjOiBidWlsdGluL25vdGVzLmM6NzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPGPDoWMgdMO5eSBjaOG7jW4+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc3Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8Y8OhYyB0w7l5IGNo4buNbj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODIKK21zZ2lkICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyByZW1vdmUgWzzEkeG7kWkgdMaw4bujbmc+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3Cittc2dpZCAiZ2l0IG5vdGVzIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgcHJ1bmUgWzxjw6FjIHTDuXkgY2jhu41uPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MgorbXNnaWQgImdpdCBub3RlcyBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3Cittc2dpZCAiV3JpdGUvZWRpdCB0aGUgbm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgb2JqZWN0OiIKK21zZ3N0ciAiR2hpIGhheSBz4butYSBnaGkgY2jDuiBjaG8gxJHhu5FpIHTGsOG7o25nIHNhdSDEkcOieToiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBraOG7n2kgY2jhuqF5IOKAnHNob3figJ0gY2hvIMSR4buRaSB0xrDhu6NuZyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1NAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdzaG93JyBvdXRwdXQiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMga+G6v3QgeHXhuqV0IOKAnHNob3figJ0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgaG/DoG4gdGjDoG5oIOKAnHNob3figJ0gY2hvIMSR4buRaSB0xrDhu6NuZyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE5NworbXNnaWQgInBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAiIgorInhpbiBow6N5IMOhcCBk4bulbmcgbuG7mWkgZHVuZyBj4bunYSBnaGkgY2jDuiBz4butIGThu6VuZyBob+G6t2MgbMOgIHTDuXkgY2jhu41uIC1tIGhv4bq3YyBsw6AgLUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbm90ZSBvYmplY3QiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgxJHhu5FpIHTGsOG7o25nIGdoaSBjaMO6IChub3RlKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAibuG7mWkgZHVuZyBnaGkgY2jDuiBjw7JuIGzhuqFpICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6MjQyIGJ1aWx0aW4vdGFnLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gaGF5IMSR4buNYyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2MyBidWlsdGluL25vdGVzLmM6MzEzIGJ1aWx0aW4vbm90ZXMuYzozMTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODMgYnVpbHRpbi9ub3Rlcy5jOjQzOCBidWlsdGluL25vdGVzLmM6NTI2CisjOiBidWlsdGluL25vdGVzLmM6NTMxIGJ1aWx0aW4vbm90ZXMuYzo2MTAgYnVpbHRpbi9ub3Rlcy5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHBow6JuIGdp4bqjaSDigJwlc+KAnSBuaMawIGzDoCBt4buZdCB0aGFtIGNoaeG6v3UgaOG7o3AgbOG7hy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICclcycuIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHhu41jIMSR4buRaSB0xrDhu6NuZyDigJwlc+KAnS4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgbm90ZSBkYXRhIGZyb20gbm9uLWJsb2Igb2JqZWN0ICclcycuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIGThu68gbGnhu4d1IGdoaSBjaMO6IHThu6sgxJHhu5FpIHTGsOG7o25nIGtow7RuZy1ibG9iIOKAnCVz4oCdLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgImTDsm5nIMSR4bqndSB2w6BvIGThu4sgaMOsbmg6IOKAnCVz4oCdLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHNhbyBjaMOpcCBnaGkgY2jDuiAobm90ZSkgdOG7qyDigJwlc+KAnSBzYW5nIOKAnCVz4oCdIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGZpcnN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBnaXQKKyMuIG5vdGVzIGNvbW1hbmQ6ICdhZGQnLCAnbWVyZ2UnLCAncmVtb3ZlJywgZXRjLgorIy4KKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gJXMgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICJ04burIGNo4buRaSAlcyBnaGkgY2jDuiB0cm9uZyAlcyAobuG6sW0gbmdvw6BpIHJlZnMvbm90ZXMvKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3NiBidWlsdGluL25vdGVzLmM6NDMxIGJ1aWx0aW4vbm90ZXMuYzo1MDkKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MjEgYnVpbHRpbi9ub3Rlcy5jOjU5OCBidWlsdGluL25vdGVzLmM6NjY1CisjOiBidWlsdGluL25vdGVzLmM6ODE1IGJ1aWx0aW4vbm90ZXMuYzo5NjMgYnVpbHRpbi9ub3Rlcy5jOjk4NQorbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgInF1w6Egbmhp4buBdSDEkeG7kWkgc+G7kSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4OSBidWlsdGluL25vdGVzLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgImtow7RuZyB0w6xtIHRo4bqleSBnaGkgY2jDuiBjaG8gxJHhu5FpIHTGsOG7o25nICVzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMCBidWlsdGluL25vdGVzLmM6NTc2Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAibuG7mWkgZHVuZyBnaGkgY2jDuiAobm90ZSkgbuG6sW0gdHJvbmcgbeG7mXQgY2h14buXaSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMyBidWlsdGluL25vdGVzLmM6NTc5Cittc2dpZCAibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiCittc2dzdHIgIm7hu5lpIGR1bmcgZ2hpIGNow7ogKG5vdGUpIG7hurFtIHRyb25nIG3hu5l0IHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxNiBidWlsdGluL25vdGVzLmM6NTgyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICJkw7luZyBs4bqhaSBuaMawbmcgY8OzIHPhu61hIGNo4buvYSDEkeG7kWkgdMaw4bujbmcgbm90ZSDEkcOjIGNo4buJIHJhIgorCisjOiBidWlsdGluL25vdGVzLmM6NDE5IGJ1aWx0aW4vbm90ZXMuYzo1ODUKK21zZ2lkICJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgImTDuW5nIGzhuqFpIMSR4buRaSB0xrDhu6NuZyBnaGkgY2jDuiAobm90ZSkgxJHDoyBjaOG7iSByYSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyMiBidWlsdGluL25vdGVzLmM6NTg4Cittc2dpZCAiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIgorbXNnc3RyICJjaG8gbMawdSB0cuG7ryBnaGkgY2jDuiB0cuG7kW5nIHLhu5duZyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyMyBidWlsdGluL25vdGVzLmM6NDk2Cittc2dpZCAicmVwbGFjZSBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAidGhheSB0aOG6vyBnaGkgY2jDuiB0csaw4bubYyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyB0aMOqbSBjw6FjIGdoaSBjaMO6LiDEkMOjIHTDrG0gdGjhuqV5IGPDoWMgZ2hpIGNow7ogxJHDoyBjw7Mgc+G6tW4gY2hvIMSR4buRaSB0xrDhu6NuZyAiCisiJXMuIFPhu60gZOG7pW5nIHTDuXkgY2jhu41uIOKAnC1m4oCdIMSR4buDIGdoaSDEkcOoIGzDqm4gY8OhYyBnaGkgY2jDuiBjxakiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjMgYnVpbHRpbi9ub3Rlcy5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIsSQYW5nIGdoaSDEkcOoIGzDqm4gZ2hpIGNow7ogY8WpIGNobyDEkeG7kWkgdMaw4bujbmcgJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3NSBidWlsdGluL25vdGVzLmM6NjM3IGJ1aWx0aW4vbm90ZXMuYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIsSQYW5nIGfhu6EgYuG7jyBnaGkgY2jDuiAobm90ZSkgY2hvIMSR4buRaSB0xrDhu6NuZyAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDk3Cittc2dpZCAicmVhZCBvYmplY3RzIGZyb20gc3RkaW4iCittc2dzdHIgIsSR4buNYyBjw6FjIMSR4buRaSB0xrDhu6NuZyB04burIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTkKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAidOG6o2kgY+G6pXUgaMOsbmggY2jDqXAgbOG6oWkgY2hvIDxs4buHbmg+IChuZ+G6p20gxJHhu4tuaCBsw6AgLS1zdGRpbikiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTcKK21zZ2lkICJ0b28gZmV3IHBhcmFtZXRlcnMiCittc2dzdHIgInF1w6Egw610IMSR4buRaSBz4buRIgorCisjOiBidWlsdGluL25vdGVzLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBzYW8gY2jDqXAgY8OhYyBnaGkgY2jDui4gxJDDoyB0w6xtIHRo4bqleSBjw6FjIGdoaSBjaMO6IMSRw6MgY8OzIHPhurVuIGNobyDEkeG7kWkgIgorInTGsOG7o25nICVzLiBT4butIGThu6VuZyB0w7l5IGNo4buNbiDigJwtZuKAnSDEkeG7gyBnaGkgxJHDqCBsw6puIGPDoWMgZ2hpIGNow7ogY8WpIgorCisjOiBidWlsdGluL25vdGVzLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICJ0aGnhur91IGdoaSBjaMO6IHRyw6puIMSR4buRaSB0xrDhu6NuZyBuZ3Xhu5NuICVzLiBLaMO0bmcgdGjhu4Mgc2FvIGNow6lwLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKyJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIgorbXNnc3RyICIiCisiQ8OhYyB0w7l5IGNo4buNbiAtbS8tRi8tYy8tQyDEkcOjIGPhu5Uga2jDtG5nIGPDsm4gZMO5bmcgbuG7r2EgY2hvIGzhu4duaCBjb24g4oCcZWRpdOKAnS5cbiIKKyJYaW4gaMOjeSBz4butIGThu6VuZyBs4buHbmggc2F1IMSR4buDIHRoYXkgdGjhur86IOKAnGdpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUPigJ0uXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OTgKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgeMOzYSB0aGFtIGNoaeG6v3UgTk9URVNfTUVSR0VfUEFSVElBTCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwMAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgcmVmIE5PVEVTX01FUkdFX1JFRiIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHjDs2EgdGhhbSBjaGnhur91IE5PVEVTX01FUkdFX1JFRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwMgorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJ2dpdCBub3RlcyBtZXJnZScgd29ya3RyZWUiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBn4buhIGLhu48gY8OieSBsw6BtIHZp4buHYyDigJxnaXQgbm90ZXMgbWVyZ2XigJ0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjIKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buNYyB0aGFtIGNoaeG6v3UgTk9URVNfTUVSR0VfUEFSVElBTCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyNAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgbOG6p24gY2h1eeG7g24gZ2lhbyB04burIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY8O6IHBow6FwIGzhuqduIGNodXnhu4NuIGdpYW8gdOG7qyBOT1RFU19NRVJHRV9QQVJUSUFMLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjczOQorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlIE5PVEVTX01FUkdFX1JFRiIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHBow6JuIGdp4bqjaSBOT1RFU19NRVJHRV9SRUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NDIKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgbm90ZXMgbWVyZ2UiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBob8OgbiB0aMOgbmggaMOyYSB0cuG7mW4gZ2hpIGNow7oiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub3RlcyBtZXJnZSBzdHJhdGVneSAlcyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSBjaGnhur9uIGzGsOG7o2MgaMOyYSB0cuG7mW4gZ2hpIGNow7ogJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODQKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIlTDuXkgY2jhu41uIGNodW5nIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg2Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gduG7gSBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4OAorbXNnaWQgIiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCittc2dzdHIgIiIKKyJwaMOibiBnaeG6o2kgY8OhYyB4dW5nIMSR4buZdCDigJxub3Rlc+KAnSBz4butIGThu6VuZyBjaGnhur9uIGzGsOG7o2MgxJHDoyDEkcawYSByYSAobWFudWFsL291cnMvIgorInRoZWlycy91bmlvbi9jYXRfc29ydF91bmlxKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MAorbXNnaWQgIkNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIkNodXnhu4NuIGdpYW8gY8OhYyBub3RlIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL25vdGVzLmM6NzkyCittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiIgorImPDoWMgbm90ZSBjdeG7kWkgY8O5bmcgxJHGsOG7o2MgaMOyYSB0cuG7mW4gYuG7n2kgY8OhYyBub3RlIGNoxrBhIGjDsmEgdHLhu5luIGPhu6dhIGzhuqduIGNodXnhu4NuICIKKyJnaWFvIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzk0Cittc2dpZCAiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAiSOG7p3kgYuG7jyBwaMOibiBnaeG6o2kgZ2hpIGNow7ogKG5vdGUpIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzk2Cittc2dpZCAiYWJvcnQgbm90ZXMgbWVyZ2UiCittc2dzdHIgImLhu48gcXVhIGjDsmEgdHLhu5luIGPDoWMgZ2hpIGNow7ogKG5vdGUpIgorCisjOiBidWlsdGluL25vdGVzLmM6ODA3Cittc2dpZCAiY2Fubm90IG1peCAtLWNvbW1pdCwgLS1hYm9ydCBvciAtcy8tLXN0cmF0ZWd5IgorbXNnc3RyICJraMO0bmcgdGjhu4MgdHLhu5luIGzhuqtuIC0tY29tbWl0LCAtLWFib3J0IGhheSAtcy8tLXN0cmF0ZWd5IgorCisjOiBidWlsdGluL25vdGVzLmM6ODEyCittc2dpZCAibXVzdCBzcGVjaWZ5IGEgbm90ZXMgcmVmIHRvIG1lcmdlIgorbXNnc3RyICJi4bqhbiBwaOG6o2kgY2jhu4kgxJHhu4tuaCB0aGFtIGNoaeG6v3UgZ2hpIGNow7ogxJHhu4MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAtcy8tLXN0cmF0ZWd5OiAlcyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSAtcy8tLXN0cmF0ZWd5OiAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJhIG5vdGVzIG1lcmdlIGludG8gJXMgaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBhdCAlcyIKK21zZ3N0ciAibeG7mXQgZ2hpIGNow7ogaMOyYSB0cuG7mW4gdsOgbyAlcyDEkcOjIHPhurVuIHRyb25nIHF1w6EgdHLDrG5oIHjhu60gbMO9IHThuqFpICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdG9yZSBsaW5rIHRvIGN1cnJlbnQgbm90ZXMgcmVmICglcykiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBsxrB1IGxpw6puIGvhur90IMSR4bq/biB0aGFtIGNoaeG6v3UgZ2hpIGNow7ogaGnhu4duIHThuqFpICglcykiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF1dG9tYXRpYyBub3RlcyBtZXJnZSBmYWlsZWQuIEZpeCBjb25mbGljdHMgaW4gJXMgYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggIgorIidnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvciBhYm9ydCB0aGUgbWVyZ2Ugd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tIgorImFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIkfhurdwIGzhu5dpIGtoaSBow7JhIHRy4buZbiBjw6FjIGdoaSBjaMO6IHThu7EgxJHhu5luZy4gU+G7rWEgY8OhYyB4dW5nIMSR4buZdCBuw6B5IHRyb25nICVzIHbDoCAiCisiY2h1eeG7g24gZ2lhbyBr4bq/dCBxdeG6oyBi4bqxbmcg4oCcZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl04oCdLCBob+G6t2MgYsOjaSBi4buPIHZp4buHYyBow7JhICIKKyJ0cuG7mW4gYuG6sW5nIOKAnGdpdCBub3RlcyBtZXJnZSAtLWFib3J04oCdLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODk3IGJ1aWx0aW4vdGFnLmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgcGjDom4gZ2nhuqNpIOKAnCVz4oCdIG5oxrAgbMOgIG3hu5l0IHRoYW0gY2hp4bq/dSBo4bujcCBs4buHLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAixJDhu5FpIHTGsOG7o25nICVzIGtow7RuZyBjw7MgZ2hpIGNow7ogKG5vdGUpXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MTIKK21zZ2lkICJhdHRlbXB0IHRvIHJlbW92ZSBub24tZXhpc3RlbnQgbm90ZSBpcyBub3QgYW4gZXJyb3IiCittc2dzdHIgImPhu5EgZ+G6r25nIGfhu6EgYuG7jyBt4buZdCBub3RlIGNoxrBhIHThu6tuZyB04buTbiB04bqhaSBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBs4buXaSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxNQorbXNnaWQgInJlYWQgb2JqZWN0IG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLEkeG7jWMgdMOqbiDEkeG7kWkgdMaw4bujbmcgdOG7qyB0aGnhur90IGLhu4sgbmjhuq1wIGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTQgYnVpbHRpbi9wcnVuZS5jOjEzMCBidWlsdGluL3dvcmt0cmVlLmM6MTY0Cittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICJraMO0bmcgZ+G7oSBi4buPLCBjaOG7iSBoaeG7g24gdGjhu4siCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTUKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG5vdGVzIgorbXNnc3RyICJiw6FvIGPDoW8gY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHDoyBwcnVuZSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OAorbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAibm90ZXMtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6OTk5Cittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzLXJlZj4iCittc2dzdHIgImTDuW5nIOKAnG5vdGVz4oCdIHThu6sgPG5vdGVzLXJlZj4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDM0IGJ1aWx0aW4vc3Rhc2guYzoxNjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgImtow7RuZyBoaeG7g3UgY8OidSBs4buHbmggY29uOiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1MgorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3B0aW9ucz4uLi5dIFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbY8OhYyB0w7l5IGNo4buNbuKApl0gWzwgPGRhbmgtc8OhY2gtdGhhbS1jaGnhur91PiB8IDwgIgorIjxkYW5oLXPDoWNoLcSR4buRaS10xrDhu6NuZz5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUzCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIFtjw6FjIHTDuXkgY2jhu41u4oCmXSA8YmFzZS1uYW1lPiBbPCA8ZGFuaC1zw6FjaC1yZWY+IHwgPCA8ZGFuaC0iCisic8OhY2gtxJHhu5FpLXTGsOG7o25nPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrZWQgb2JqZWN0IENSQyBmb3IgJXMiCittc2dzdHIgIkNSQyBj4bunYSDEkeG7kWkgdMaw4bujbmcgZ8OzaSBzYWkgduG7m2kgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGFja2VkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyDEkcOjIMSRw7NuZyBnw7NpIHNhaSBo4buPbmcgY2hvICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgZGVsdGEgZGV0ZWN0ZWQgZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAiZMOyIHRo4bqleSBkZWx0YSDEkeG7hyBxdXkgY2hvIMSR4buRaSB0xrDhu6NuZyAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAib3JkZXJlZCAldSBvYmplY3RzLCBleHBlY3RlZCAlPFBSSXUzMj4iCittc2dzdHIgIsSRw6Mgc+G6r3AgeOG6v3AgJXUgxJHhu5FpIHTGsOG7o25nLCBj4bqnbiAlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTcyCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBwYWNrcyBhcmUgc3BsaXQgZHVlIHRvIHBhY2sucGFja1NpemVMaW1pdCIKK21zZ3N0ciAidOG6r3QgZ2hpIGJpdG1hcCwgY8OhYyBnw7NpIGLhu4sgY2hpYSBuaOG7jyBi4bufaSB2w6wgcGFjay5wYWNrU2l6ZUxpbWl0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk4NQorbXNnaWQgIldyaXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAixJBhbmcgZ2hpIGzhuqFpIGPDoWMgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwNDYgYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGzhuqV5IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogduG7gSAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb3RlICU8UFJJdTMyPiBvYmplY3RzIHdoaWxlIGV4cGVjdGluZyAlPFBSSXUzMj4iCittc2dzdHIgIsSRw6MgZ2hpICU8UFJJdTMyPiDEkeG7kWkgdMaw4bujbmcgdHJvbmcga2hpIGPhuqduICU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMjk3Cittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgInThuq90IGdoaSBiaXRtYXAsIG5oxrAgduG6rXkgbeG7mXQgc+G7kSDEkeG7kWkgdMaw4bujbmcgc+G6vSBraMO0bmcgxJHGsOG7o2MgxJHDs25nIGfDs2kiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTcyNAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdmVyZmxvdyBpbiBwYWNrIGZvciAlcyIKK21zZ3N0ciAia2hv4bqjbmcgYsO5IGPGoSBz4bufIGNobyBkZWx0YSBi4buLIHRyw6BuIHRyb25nIGfDs2kgY2hvICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3V0IG9mIGJvdW5kIGZvciAlcyIKK21zZ3N0ciAia2hv4bqjbmcgYsO5IGPGoSBz4bufIGNobyBkZWx0YSBu4bqxbSBuZ2/DoGkgcGjhuqFtIGNobyAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDA0Cittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAixJBhbmcgxJHhur9tIGPDoWMgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdCBoZWFkZXIgb2YgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBwaOG6p24gxJHhuqd1IMSR4buRaSB0xrDhu6NuZyBj4bunYSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjE5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjIzNQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyDEkeG7kWkgdMaw4bujbmcgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjIyMiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGluY29uc2lzdGVudCBvYmplY3QgbGVuZ3RoICglPFBSSXVNQVg+IHZzICU8UFJJdU1BWD4pIgorbXNnc3RyICIiCisixJHhu5FpIHTGsOG7o25nICVzIGtow7RuZyBuaOG6pXQgcXXDoW4gduG7gSBjaGnhu4F1IGTDoGkgxJHhu5FpIHTGsOG7o25nICglPFBSSXVNQVg+IHNvIHbhu5tpICIKKyIlPFBSSXVNQVg+KSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjU5Cittc2dpZCAic3Vib3B0aW1hbCBwYWNrIC0gb3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAic3Vib3B0aW1hbCBwYWNrIC0gaOG6v3QgYuG7mSBuaOG7myIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbHRhIGNvbXByZXNzaW9uIHVzaW5nIHVwIHRvICVkIHRocmVhZHMiCittc2dzdHIgIk7DqW4gZGVsdGEgZMO5bmcgdOG7m2kgJWQgdHV54bq/biB0csOsbmgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcxMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFjayBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRhZyAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSRw7NuZyBnw7NpIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRp4bq/cCBj4bqtbiDEkcaw4bujYyB04burIHRo4bq7IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4MDEKK21zZ2lkICJDb21wcmVzc2luZyBvYmplY3RzIgorbXNnc3RyICLEkGFuZyBuw6luIGPDoWMgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4MDcKK21zZ2lkICJpbmNvbnNpc3RlbmN5IHdpdGggZGVsdGEgY291bnQiCittc2dzdHIgIm3DonUgdGh14bqrbiB24bubaSBz4buRIGzGsOG7o25nIGRlbHRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIGVkZ2Ugb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCittc2dzdHIgIiIKKyJj4bqnbiBJRCDEkeG7kWkgdMaw4bujbmcgY+G6oW5oLCBuaOG6rW4gxJHGsOG7o2MgcsOhYzpcbiIKKyIgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCittc2dzdHIgIiIKKyJj4bqnbiBJRCDEkeG7kWkgdMaw4bujbmcsIG5o4bqtbiDEkcaw4bujYyByw6FjOlxuIgorIiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTkyCittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICJnacOhIHRy4buLIGNobyAtLW1pc3Npbmcga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA1MSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTkKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4IgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyBt4bulYyBs4bulYyBj4bunYSBnw7NpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0IGF0ICVzIGNvdWxkIG5vdCBiZSBleGFtaW5lZCIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIG3huqV0IHThuqFpICVzIGtow7RuZyB0aOG7gyDEkcOjIGtp4buDbSB0cmEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE2NworbXNnaWQgInVuYWJsZSB0byBmb3JjZSBsb29zZSBvYmplY3QiCittc2dzdHIgImtow7RuZyB0aOG7gyBideG7mWMgbeG6pXQgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmV2ICclcyciCittc2dzdHIgImtow7RuZyBwaOG6o2kgbeG7mXQgcmV2IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uICclcyciCittc2dzdHIgIsSRaeG7g20geGVtIHjDqXQgc2FpIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODgKK21zZ2lkICJ1bmFibGUgdG8gYWRkIHJlY2VudCBvYmplY3RzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdGjDqm0gY8OhYyDEkeG7kWkgdMaw4bujbmcgbeG7m2kgZMO5bmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIgorbXNnc3RyICJwaGnDqm4gYuG6o24gbeG7pWMgbOG7pWMga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICJwaGnDqm4gYuG6o24gbeG7pWMgbOG7pWMgc2FpIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODMKK21zZ2lkICI8dmVyc2lvbj5bLDxvZmZzZXQ+XSIKK21zZ3N0ciAiPHBoacOqbiBi4bqjbj5bLG9mZnNldF0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4NAorbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgImdoaSB04bqtcCB0aW4gYuG6o25nIG3hu6VjIGzhu6VjIGfDs2kgKHBhY2spIOG7nyBwaGnDqm4gYuG6o24gxJHhu4tuaCBk4bqhbmcgaWR4IMSRw6MgY2hvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODcKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlIgorbXNnc3RyICJrY8OtaCB0aMaw4bubYyB04buRaSDEkWEgY2hvIHThuq1wIHRpbiBnw7NpIMSRxrDhu6NjIHThuqFvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODkKK21zZ2lkICJpZ25vcmUgYm9ycm93ZWQgb2JqZWN0cyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUiCittc2dzdHIgImLhu48gcXVhIGPDoWMgxJHhu5FpIHTGsOG7o25nIHZheSBtxrDhu6NuIHThu6sga2hvIMSR4buRaSB0xrDhu6NuZyB0aGF5IHRo4bq/IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTEKK21zZ2lkICJpZ25vcmUgcGFja2VkIG9iamVjdHMiCittc2dzdHIgImLhu48gcXVhIGPDoWMgxJHhu5FpIHTGsOG7o25nIMSRw7NuZyBnw7NpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTMKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBvYmplY3RzIgorbXNnc3RyICJnaeG7m2kgaOG6oW4gY+G7rWEgc+G7lSDEkcOzbmcgZ8OzaSB0aGVvIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk1Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAiZ2nhu5tpIGjhuqFuIGPhu61hIHPhu5UgxJHDs25nIGfDs2kgdGhlbyBi4buZIG5o4bubIGPhu5luZyB0aMOqbSB24bubaSBnaeG7m2kgaOG6oW4gxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTcKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAixJHhu5kgZMOgaSB04buRaSDEkWEgY+G7p2EgY2h14buXaSBtw7NjIHjDrWNoIOKAnGRlbHRh4oCdIMSRxrDhu6NjIHBow6lwIHRyb25nIGfDs2kga+G6v3QgcXXhuqMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5OQorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAiZMO5bmcgbOG6oWkgY8OhYyBkZWx0YSBz4bq1biBjw7MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwMQorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgImTDuW5nIGzhuqFpIGPDoWMgxJHhu5FpIHTGsOG7o25nIHPhurVuIGPDsyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDAzCittc2dpZCAidXNlIE9GU19ERUxUQSBvYmplY3RzIgorbXNnc3RyICJkw7luZyBjw6FjIMSR4buRaSB0xrDhu6NuZyBPRlNfREVMVEEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNQorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgInPhu60gZOG7pW5nIGPDoWMgdHV54bq/biB0csOsbmgga2hpIHTDrG0ga2nhur9tIGNobyBjw6FjIG3huqt1IGto4bubcCBkZWx0YSB04buRdCBuaOG6pXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNworbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyBr4bq/dCB4deG6pXQgZ8OzaSB0cuG7kW5nIHLhu5duZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA5Cittc2dpZCAicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAixJHhu41jIHRoYW0gc+G7kSDigJxyZXZpc2lvbuKAnSB04burIHRoaeG6v3QgYuG7iyBuaOG6rXAgY2h14bqpbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDExCittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgImdp4bubaSBo4bqhbiBjw6FjIMSR4buRaSB0xrDhu6NuZyB0aMOgbmggbmjhu69uZyBjw6FpIG3DoCBjaMO6bmcgduG6q24gY2jGsGEgxJHGsOG7o2MgxJHDs25nIGfDs2kiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQxNAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWFjaGFibGUgZnJvbSBhbnkgcmVmZXJlbmNlIgorbXNnc3RyICJiYW8gZ+G7k20gY8OhYyDEkeG7kWkgdMaw4bujbmcgY8OzIHRo4buDIMSR4buNYyDEkcaw4bujYyB04burIGLhuqV0IGvhu7MgdGhhbSBjaGnhur91IG7DoG8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQxNworbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCBieSByZWZsb2cgZW50cmllcyIKK21zZ3N0ciAiYmFvIGfhu5NtIGPDoWMgxJHhu5FpIHTGsOG7o25nIMSRxrDhu6NjIHRoYW0gY2hp4bq/dSBi4bufaSBjw6FjIG3hu6VjIHJlZmxvZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDIwCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIKK21zZ3N0ciAiYmFvIGfhu5NtIGPDoWMgxJHhu5FpIHTGsOG7o25nIMSRxrDhu6NjIHRoYW0gY2hp4bq/dSBi4bufaSBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDIzCittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICJ4deG6pXQgZ8OzaSByYSDEkeG6p3UgcmEgdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI1Cittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICJiYW8gZ+G7k20gY8OhYyDEkeG7kWkgdMaw4bujbmcgdGhhbSBjaGnhur91IMSR4bq/biBjw6FjIMSR4buRaSB0xrDhu6NuZyDEkcaw4bujYyDEkcOzbmcgZ8OzaSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI3Cittc2dpZCAia2VlcCB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJnaeG7ryBs4bqhaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgdGjhu4MgxJHhu41jIMSRxrDhu6NjIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjkKK21zZ2lkICJwYWNrIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgInBhY2sgbeG6pXQgY8OhYyDEkeG7kWkgdMaw4bujbmcga2jDtG5nIHRo4buDIMSR4buNYyDEkcaw4bujYyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDMxCittc2dpZCAidW5wYWNrIHVucmVhY2hhYmxlIG9iamVjdHMgbmV3ZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIiIKKyJ44bqjIG7DqW4gKGfhu6Ega2jhu49pIGfDs2kpIGPDoWMgxJHhu5FpIHTGsOG7o25nIGtow7RuZyB0aOG7gyDEkeG7jWMgxJHGsOG7o2MgbeG7m2kgaMahbiA8dGjhu51pLWdpYW4+IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzQKK21zZ2lkICJ1c2UgdGhlIHNwYXJzZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIgorbXNnc3RyICJz4butIGThu6VuZyB0aHXhuq10IHRvw6FuIOKAnHNwYXJzZSByZWFjaGFiaWxpdHnigJ0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzNgorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICJ04bqhbyBnw7NpIG5o4bq5IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzgKK21zZ2lkICJjcmVhdGUgcGFja3Mgc3VpdGFibGUgZm9yIHNoYWxsb3cgZmV0Y2hlcyIKK21zZ3N0ciAidOG6oW8gZ8OzaSDEkeG7gyBwaMO5IGjhu6NwIGNobyBs4bqleSB24buBIG7DtG5nIChzaGFsbG93KSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQwCittc2dpZCAiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIKK21zZ3N0ciAiYuG7jyBxdWEgY8OhYyBnw7NpIG3DoCBuw7MgY8OzIHThuq1wIHRpbiAua2VlcCDEkWkga8OobSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDQyCittc2dpZCAiaWdub3JlIHRoaXMgcGFjayIKK21zZ3N0ciAiYuG7jyBxdWEgZ8OzaSBuw6B5IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDQKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICJt4bupYyBuw6luIGfDs2kiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0NgorbXNnaWQgImRvIG5vdCBoaWRlIGNvbW1pdHMgYnkgZ3JhZnRzIgorbXNnc3RyICJraMO0bmcg4bqpbiBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gYuG7n2kg4oCcZ3JhZnRz4oCdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDgKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgImTDuW5nIG3hu6VjIGzhu6VjIMOhbmggeOG6oSBu4bq/dSBjw7MgdGjhu4MgxJHGsOG7o2MgxJHhu4MgbsOibmcgY2FvIHThu5FjIMSR4buZIMSR4bq/bSDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1MAorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgImdoaSBt4buZdCBt4bulYyBs4bulYyDDoW5oIHjhuqEgY8O5bmcgduG7m2kgbeG7pWMgbOG7pWMgZ8OzaSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDU0Cittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggaWYgcG9zc2libGUiCittc2dzdHIgImdoaSBt4bulYyBs4bulYyDDoW5oIHjhuqEgbuG6v3UgxJHGsOG7o2MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1OAorbXNnaWQgImhhbmRsaW5nIGZvciBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgInjhu60gbMO9IGNobyB0aGnhur91IMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDYxCittc2dpZCAiZG8gbm90IHBhY2sgb2JqZWN0cyBpbiBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkcOzbmcgZ8OzaSBjw6FjIMSR4buRaSB0xrDhu6NuZyB0cm9uZyBjw6FjIHThuq1wIHRpbiBnw7NpIGjhu6lhIGjhurluIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NjMKK21zZ2lkICJyZXNwZWN0IGlzbGFuZHMgZHVyaW5nIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICJ0w7RuIHRy4buNbmcgaXNsYW5kIHRyb25nIHN14buRdCBxdcOhIHRyw6xuaCBuw6luIOKAnGRlbHRh4oCdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgY2hhaW4gZGVwdGggJWQgaXMgdG9vIGRlZXAsIGZvcmNpbmcgJWQiCittc2dzdHIgIm3hu6ljIHNhdSB4w61jaCBkZWx0YSAlZCBsw6AgcXXDoSBzw6J1LCBideG7mWMgZMO5bmcgJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrLmRlbHRhQ2FjaGVMaW1pdCBpcyB0b28gaGlnaCwgZm9yY2luZyAlZCIKK21zZ3N0ciAicGFjay5kZWx0YUNhY2hlTGltaXQgbMOgIHF1w6EgY2FvLCDDqXAgZMO5bmcgJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU1MQorbXNnaWQgIi0tbWF4LXBhY2stc2l6ZSBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhIHBhY2sgZm9yIHRyYW5zZmVyIgorbXNnc3RyICIiCisiLS1tYXgtcGFjay1zaXplIGtow7RuZyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyB4w6J5IGThu7FuZyBt4buZdCBnw7NpIMSR4buDIHbhuq1uIGNodXnhu4NuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NTMKK21zZ2lkICJtaW5pbXVtIHBhY2sgc2l6ZSBsaW1pdCBpcyAxIE1pQiIKK21zZ3N0ciAiZ2nhu5tpIGjhuqFuIGvDrWNoIHRoxrDhu5tjIHThu5FpIHRoaeG7g3UgY+G7p2EgZ8OzaSBsw6AgMSBNaUIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU1OAorbXNnaWQgIi0tdGhpbiBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhbiBpbmRleGFibGUgcGFjayIKK21zZ3N0ciAiLS10aGluIGtow7RuZyB0aOG7gyDEkcaw4bujYyBkw7luZyDEkeG7gyB4w6J5IGThu7FuZyBnw7NpIMSRw6FuaCBt4bulYyBs4bulYyDEkcaw4bujYyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTYxCittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtLXVucGFjay11bnJlYWNoYWJsZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUgdsOgIC0tdW5wYWNrLXVucmVhY2hhYmxlIHh1bmcga2jhuq9jIG5oYXUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU2NworbXNnaWQgImNhbm5vdCB1c2UgLS1maWx0ZXIgd2l0aG91dCAtLXN0ZG91dCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGTDuW5nIHTDuXkgY2jhu41uIC0tZmlsdGVyIG3DoCBraMO0bmcgY8OzIC0tc3Rkb3V0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM2MjcKK21zZ2lkICJFbnVtZXJhdGluZyBvYmplY3RzIgorbXNnc3RyICLEkMOhbmggc+G7kSBjw6FjIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUb3RhbCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHJldXNlZCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHBhY2stIgorInJldXNlZCAlPFBSSXUzMj4iCittc2dzdHIgIiIKKyJU4buVbmcgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pLCBkw7luZyBs4bqhaSAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHBhY2stIgorInJldXNlZCAlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6OAorbXNnaWQgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBwYWNrLXJlZnMgWzxjw6FjIHTDuXkgY2jhu41uPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTYKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmciCittc2dzdHIgIsSRw7NuZyBnw7NpIG3hu41pIHRo4bupIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE3Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgInBydW5lIChj4bqvdCBj4buldCkgbmjhu69uZyB0aGFtIGNoaeG6v3UgYuG7iyBt4bqldCAobeG6t2MgxJHhu4tuaCkiCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6OQorbXNnaWQgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKK21zZ3N0ciAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjQyCittc2dpZCAiUmVtb3ZpbmcgZHVwbGljYXRlIG9iamVjdHMiCittc2dzdHIgIsSQYW5nIGfhu6EgY8OhYyDEkeG7kWkgdMaw4bujbmcgdHLDuW5nIGzhurdwIgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRo4budaS1naWFuPl0gWy0tXSBbPGhlYWQ+4oCmXSIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzMQorbXNnaWQgInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIKK21zZ3N0ciAiYsOhbyBjw6FvIGPDoWMgxJHhu5FpIHTGsOG7o25nIMSRw6MgcHJ1bmUiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiY8OhYyDEkeG7kWkgdMaw4bujbmcgaOG6v3QgaOG6oW4gY8WpIGjGoW4ga2hv4bqjbmcgPHRo4budaSBnaWFuPiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNgorbXNnaWQgImxpbWl0IHRyYXZlcnNhbCB0byBvYmplY3RzIG91dHNpZGUgcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICJnaeG7m2kgaOG6oW4gZ2lhbyDEkeG6v24gY8OhYyDEkeG7kWkgdMaw4bujbmcgbuG6sW0gbmdvw6BpIGPDoWMgdOG6rXAgdGluIGfDs2kgaOG7qWEgaOG6uW4iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxNTAKK21zZ2lkICJjYW5ub3QgcHJ1bmUgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgImtow7RuZyB0aOG7gyB04buJYSBi4bubdCB0cm9uZyBt4buZdCBraG8gxJHhu5FpX3TGsOG7o25nX3bEqV/EkeG6oWkiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1IGJ1aWx0aW4vcHVsbC5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiR2nDoSB0cuG7iyBraMO0bmcgaOG7o3AgbOG7hyAlczogJXMiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjY3Cittc2dpZCAiZ2l0IHB1bGwgWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBwdWxsIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8a2hvLWNo4bupYT4gWzxyZWZzcGVjPuKApl1dIgorCisjOiBidWlsdGluL3B1bGwuYzoxMjIKK21zZ2lkICJjb250cm9sIGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAixJFp4buBdSBraGnhu4NuIHZp4buHYyBs4bqleSB24buBIMSR4buHIHF1eSBj4bunYSBjw6FjIG3DtC3EkXVuLWNvbiIKKworIzogYnVpbHRpbi9wdWxsLmM6MTI2Cittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgIkPDoWMgdMO5eSBjaOG7jW4gbGnDqm4gcXVhbiDEkeG6v24gaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjEyOQorbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAiY8OhYyB0aGF5IMSR4buVaSBo4bujcCBuaOG6pXQgYuG6sW5nIGPhuqNpIHThu5UgdGhheSB2w6wgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE1NyBidWlsdGluL3JlYmFzZS5jOjQ3MSBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiY2hvIHBow6lwIGNodXnhu4NuLXRp4bq/cC1uaGFuaCIKKworIzogYnVpbHRpbi9wdWxsLmM6MTY2Cittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciByZWJhc2UiCittc2dzdHIgInThu7EgxJHhu5luZyBzdGFzaC9zdGFzaCBwb3AgdMaw4bubYyB2w6Agc2F1IHR1IGLhu5UgKHJlYmFzZSkiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE4MgorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiBsacOqbiBxdWFuIMSR4bq/biBs4buHbmggbOG6pXkgduG7gSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTkyCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiw6lwIGJ14buZYyBnaGkgxJHDqCBsw6puIG5ow6FuaCBu4buZaSBi4buZIgorCisjOiBidWlsdGluL3B1bGwuYzoyMDAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBwdWxsZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgInPhu5EgbMaw4bujbmcgbcO0LcSRdW4tY29uIMSRxrDhu6NjIMSR4bqpeSBsw6puIMSR4buTbmcgdGjhu51pIgorCisjOiBidWlsdGluL3B1bGwuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgcHVsbC5mZjogJXMiCittc2dzdHIgIkdpw6EgdHLhu4sga2jDtG5nIGjhu6NwIGzhu4cgY2hvIHB1bGwuZmY6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo0MjYKK21zZ2lkICIiCisiVGhlcmUgaXMgbm8gY2FuZGlkYXRlIGZvciByZWJhc2luZyBhZ2FpbnN0IGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgIgorImZldGNoZWQuIgorbXNnc3RyICIiCisi4bueIMSRw6J5IGtow7RuZyBjw7Mg4bupbmcgY+G7rSBuw6BvIMSR4buDIGPhuqNpIHThu5UgbOG6oWkgdHJvbmcgc+G7kSBjw6FjIHRoYW0gY2hp4bq/dSBtw6AgYuG6oW4gduG7q2EgIgorImzhuqV5IHbhu4EuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MjgKK21zZ2lkICIiCisiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIuG7niDEkcOieSBraMO0bmcgY8OzIOG7qW5nIGPhu60gbsOgbyDEkeG7gyBow7JhIHRy4buZbiB0cm9uZyBz4buRIGPDoWMgdGhhbSBjaGnhur91IG3DoCBi4bqhbiB24burYSBs4bqleSAiCisiduG7gS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyOQorbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIiIKKyLEkOG6oWkgdGjhu4MgxJFp4buBdSBuw6B5IGPDsyBuZ2jEqWEgbMOgIGLhuqFuIMSRw6MgY3VuZyBj4bqlcCDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24gZOG6oW5nIGTDuW5nIGvDvSAiCisidOG7sVxuIgorIsSR4bqhaSBkaeG7h24gbcOgIG7DsyBs4bqhaSBraMO0bmcga2jhu5twIHRyw6puIMSRaeG7g20gY3Xhu5FpIG3DoXkgcGjhu6VjIHbhu6UuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBwdWxsIGZyb20gdGhlIHJlbW90ZSAnJXMnLCBidXQgZGlkIG5vdCBzcGVjaWZ5XG4iCisiYSBicmFuY2guIEJlY2F1c2UgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQgY29uZmlndXJlZCByZW1vdGVcbiIKKyJmb3IgeW91ciBjdXJyZW50IGJyYW5jaCwgeW91IG11c3Qgc3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK21zZ3N0ciAiIgorIkLhuqFuIHnDqnUgY+G6p3UgcHVsbCB04burIG3DoXkgZOG7i2NoIHbhu6Ug4oCcJXPigJ0sIG5oxrBuZyBs4bqhaSBjaMawYSBjaOG7iSDEkeG7i25oXG4iCisibmjDoW5oIG7DoG8uIELhu59pIHbDrCDEkcOieSBraMO0bmcgcGjhuqNpIGzDoCBtw6F5IGThu4tjaCB24bulIMSRxrDhu6NjIGPhuqV1IGjDrG5oXG4iCisidGhlbyBt4bq3YyDEkeG7i25oIGNobyBuaMOhbmggaGnhu4duIHThuqFpIGPhu6dhIGLhuqFuLCBi4bqhbiBwaOG6o2kgY2jhu4kgxJHhu4tuaFxuIgorIm3hu5l0IG5ow6FuaCB0csOqbiBkw7JuZyBs4buHbmguIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzcgYnVpbHRpbi9yZWJhc2UuYzoxNDA5IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzMKK21zZ2lkICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIgorbXNnc3RyICJIaeG7h24gdOG6oWkgYuG6oW4gY2jhurNuZyDhu58gbmjDoW5oIG7DoG8gY+G6oy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOSBidWlsdGluL3B1bGwuYzo0NTQgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIlZ1aSBsw7JuZyBjaOG7iSDEkeG7i25oIG5ow6FuaCBuw6BvIGLhuqFuIG114buRbiBj4bqjaSB04buVIGzhuqFpLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQxIGJ1aWx0aW4vcHVsbC5jOjQ1NiBnaXQtcGFyc2UtcmVtb3RlLnNoOjgyCittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIG1lcmdlIHdpdGguIgorbXNnc3RyICJWdWkgbMOybmcgY2jhu4kgxJHhu4tuaCBuaMOhbmggbsOgbyBi4bqhbiBtdeG7kW4gaMOyYSB0cuG7mW4gdsOgby4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MiBidWlsdGluL3B1bGwuYzo0NTcKK21zZ2lkICJTZWUgZ2l0LXB1bGwoMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICJYZW0gZ2l0LXB1bGwoMSkgxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDQgYnVpbHRpbi9wdWxsLmM6NDUwIGJ1aWx0aW4vcHVsbC5jOjQ1OQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNDE1IGdpdC1wYXJzZS1yZW1vdGUuc2g6NjQKK21zZ2lkICI8cmVtb3RlPiIKK21zZ3N0ciAiPG3DoXkgY2jhu6c+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NDQgYnVpbHRpbi9wdWxsLmM6NDU5IGJ1aWx0aW4vcHVsbC5jOjQ2NAorIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NQorbXNnaWQgIjxicmFuY2g+IgorbXNnc3RyICI8bmjDoW5oPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcmViYXNlLmM6MTQwNyBnaXQtcGFyc2UtcmVtb3RlLnNoOjc1Cittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIuG7niDEkcOieSBraMO0bmcgY8OzIHRow7RuZyB0aW4gdGhlbyBkw7VpIGNobyBuaMOhbmggaGnhu4duIGjDoG5oLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDYxIGdpdC1wYXJzZS1yZW1vdGUuc2g6OTUKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6IgorbXNnc3RyICIiCisiTuG6v3UgYuG6oW4gbXXhu5FuIHRoZW8gZMO1aSB0aMO0bmcgdGluIGNobyBuaMOhbmggbsOgeSBi4bqhbiBjw7MgdGjhu4MgdGjhu7FjIGhp4buHbiBi4bqxbmcgbOG7h25oOiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIHRvIG1lcmdlIHdpdGggdGhlIHJlZiAnJXMnXG4iCisiZnJvbSB0aGUgcmVtb3RlLCBidXQgbm8gc3VjaCByZWYgd2FzIGZldGNoZWQuIgorbXNnc3RyICIiCisiQ8OhYyDEkeG6t2MgdOG6oyBj4bqldSBow6xuaCBj4bunYSBi4bqhbiDEkeG7gyBow7JhIHRy4buZbiB24bubaSB0aGFtIGNoaeG6v3Ug4oCcJXPigJ1cbiIKKyJ04burIG3DoXkgZOG7i2NoIHbhu6UsIG5oxrBuZyBraMO0bmcgY8OzIG5ow6FuaCBuw6BvIG5oxrAgdGjhur8gxJHGsOG7o2MgbOG6pXkgduG7gS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIGNvbW1pdCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRydXkgY+G6rXAgbOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9wdWxsLmM6ODU3Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICJi4buPIHF1YSAtLXZlcmlmeS1zaWduYXR1cmVzIGtoaSByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkxMgorbXNnaWQgIi0tW25vLV1hdXRvc3Rhc2ggb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXJlYmFzZS4iCittc2dzdHIgInTDuXkgY2jhu41uIC0tW25vLV1hdXRvc3Rhc2ggY2jhu4kgaOG7o3AgbOG7hyBraGkgZMO5bmcgduG7m2kgLS1yZWJhc2UuIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICIiCisixJBhbmcgY+G6rXAgbmjhuq10IG3hu5l0IG5ow6FuaCBjaMawYSDEkcaw4bujYyBzaW5oIHJhIHbhu5tpIGPDoWMgdGhheSDEkeG7lWkgxJHGsOG7o2MgdGjDqm0gdsOgbyAiCisiYuG6o25nIG3hu6VjIGzhu6VjLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTI0Cittc2dpZCAicHVsbCB3aXRoIHJlYmFzZSIKK21zZ3N0ciAicHVsbCB24bubaSByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyNQorbXNnaWQgInBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgInhpbiBow6N5IGNodXnhu4NuIGdpYW8gaG/hurdjIHThuqFtIGPhuqV0IChzdGFzaCkgY2jDum5nLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorImZldGNoIMSRw6MgY+G6rXAgbmjhuq10IGhlYWQgbmjDoW5oIGhp4buHbiB04bqhaS5cbiIKKyLEkWFuZyBjaHV54buDbi10aeG6v3AtbmhhbmggY8OieSBsw6BtIHZp4buHYyBj4bunYSBi4bqhbiB04burXG4iCisibOG6p24gY2h1eeG7g24gZ2lhb3QgJXMuIgorCisjOiBidWlsdGluL3B1bGwuYzo5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGNodXnhu4NuIHRp4bq/cCBuaGFuaCBjw6J5IGzDoG0gdmnhu4djIGPhu6dhIGLhuqFuLlxuIgorIlNhdSBraGkgY2jhuq9jIGNo4bqvbiBy4bqxbmcgbcOsbmggxJHDoyBnaGkgbOG6oWkgbeG7jWkgdGjhu6lcbiIKKyJxdcO9IGLDoXUgdOG7qyBr4bq/dCB4deG6pXQgY+G7p2EgbOG7h25oXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorImNo4bqheVxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorIsSR4buDIGtow7RpIHBo4bulYyBs4bqhaS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk3MQorbXNnaWQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgaMOyYSB0cuG7mW4gbmhp4buBdSBuaMOhbmggdsOgbyB0cm9uZyBt4buZdCBoZWFkIHRy4buRbmcgcuG7l25nLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTc1Cittc2dpZCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gbOG7h25oIHJlYmFzZSAoY+G6o2kgdOG7lSkgdHLDqm4gbmhp4buBdSBuaMOhbmguIgorCisjOiBidWlsdGluL3B1bGwuYzo5ODIKK21zZ2lkICJjYW5ub3QgcmViYXNlIHdpdGggbG9jYWxseSByZWNvcmRlZCBzdWJtb2R1bGUgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyBj4bqjaSB04buVIHbhu5tpIGPDoWMgdGhheSDEkeG7lWkgbcO0LcSRdW4tY29uIMSRxrDhu6NjIGdoaSBs4bqhaSBt4buZdCBjw6FjaCBj4bulYyBi4buZIgorCisjOiBidWlsdGluL3B1c2guYzoxOQorbXNnaWQgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVzaCBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbPGtoby1jaOG7qWE+IFs8cmVmc3BlYz7igKZdXSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTEyCittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICJkw7luZyB04buRYyBrw70gdGjhursga2jDtG5nIGPDsyA8dGjhurs+IgorCisjOiBidWlsdGluL3B1c2guYzoxMjIKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUgY2jhu4kgY2jhuqVwIG5o4bqtbiBjw6FjIHTDqm4gdGhhbSBjaGnhur91IGThuqFuZyB0aMaw4budbmciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE2OAorbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKyJcbiIKKyLEkOG7gyBjaOG7jW4gbeG7l2kgdMO5eSBjaOG7jW4gbeG7mXQgY8OhY2ggY+G7kSDEkeG7i25oLCB4ZW0gcHVzaC5kZWZhdWx0IHRyb25nIOKAnGdpdCBoZWxwICIKKyJjb25maWfigJ0uIgorCisjOiBidWlsdGluL3B1c2guYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEXG4iCisiJXMiCittc2dzdHIgIiIKKyJOaMOhbmggdGjGsOG7o25nIG5ndeG7k24gY+G7p2EgbmjDoW5oIGhp4buHbiB04bqhaSBj4bunYSBi4bqhbiBraMO0bmcga2jhu5twXG4iCisiduG7m2kgdMOqbiBj4bunYSBuaMOhbmggaGnhu4duIHThuqFpIGPhu6dhIGLhuqFuLiAgxJDhu4MgxJHhuql5IGzDqm4gxJHhur9uIG5ow6FuaFxuIgorInRoxrDhu6NuZyBuZ3Xhu5NuIHRyw6puIG3DoXkgY2jhu6csIHPhu60gZOG7pW5nXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyLEkOG7gyDEkeG6qXkgdOG7m2kgbmjDoW5oIGPDuW5nIHTDqm4gdHLDqm4gbcOheSBjaOG7pywgc+G7rSBk4bulbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRFxuIgorIiVzIgorCisjOiBidWlsdGluL3B1c2guYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisic3RhdGUgbm93LCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgorbXNnc3RyICIiCisiQuG6oW4gaGnhu4duIG5heSBraMO0bmcg4bufIG3hu5l0IG5ow6FuaC5cbiIKKyLEkOG7gyDEkeG6qXkgbOG7i2NoIHPhu60gbMOqbiB0csOqbiB0cuG6oW5nIHRow6FpIGhp4buHbiBow6BuaCAoSEVBRCDEkcOjIGLhu4sgdMOhY2ggcuG7nWkpXG4iCisibmdheSBiw6J5IGdp4budLCBz4butIGThu6VuZ1xuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjx0w6puLWPhu6dhLW5ow6FuaC1tw6F5LWNo4bunPlxuIgorCisjOiBidWlsdGluL3B1c2guYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgIiIKKyJOaMOhbmggaGnhu4duIHThuqFpICVzIGtow7RuZyBjw7MgbmjDoW5oIHRoxrDhu6NuZyBuZ3Xhu5NuIG7DoG8uXG4iCisixJDhu4MgcHVzaCAoxJHhuql5IGzDqm4pIG5ow6FuaCBoaeG7h24gdOG6oWkgdsOgIMSR4bq3dCBtw6F5IGNo4bunIG7DoHkgbMOgbSB0aMaw4bujbmcgbmd14buTbiAiCisiKHVwc3RyZWFtKSwgc+G7rSBk4bulbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICJOaMOhbmggaGnhu4duIHThuqFpICVzIGPDsyBuaGnhu4F1IG5ow6FuaCB0aMaw4bujbmcgbmd14buTbiwgdOG7qyBjaOG7kWkgcHVzaC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisiQuG6oW4gxJFhbmcgcHVzaCAoxJHhuql5IGzDqm4pIG3DoXkgY2jhu6cg4oCcJXPigJ0sIG3DoCBuw7Mga2jDtG5nIHBo4bqjaSBsw6AgdGjGsOG7o25nIG5ndeG7k24gIgorIih1cHN0cmVhbSkgY+G7p2FcbiIKKyJuaMOhbmggaGnhu4duIHThuqFpIOKAnCVz4oCdIGPhu6dhIGLhuqFuLCBtw6Aga2jDtG5nIGLDoW8gY2hvIHTDtGkgYmnhur90IGzDoCBjw6FpIGfDrCDEkcaw4bujYyBwdXNoXG4iCisixJHhu4MgY+G6rXAgbmjhuq10IG5ow6FuaCBtw6F5IGNo4bunIG7DoG8uIgorCisjOiBidWlsdGluL3B1c2guYzoyNzAKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAiIgorIkLhuqFuIMSRw6Mga2jDtG5nIGNo4buJIHJhIG3hu5l0IHJlZnNwZWNzIG7DoG8gxJHhu4MgxJHhuql5IGzDqm4sIHbDoCBwdXNoLmRlZmF1bHQgbMOgIFwia2jDtG5nICIKKyJsw6AgZ8OsIGPhuqNcIi4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3NworbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gSW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLlxuIgorIidnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIlZp4buHYyBj4bqtcCBuaOG6rXQgYuG7iyB04burIGNo4buRaSBi4bufaSB2w6wgxJHhuqd1IG3DunQgY+G7p2EgbmjDoW5oIGhp4buHbiB04bqhaSBj4bunYSBi4bqhbiBu4bqxbSDEkeG6sW5nXG4iCisic2F1IGLhu5kgcGjhuq1uIHTGsMahbmcg4bupbmcgY+G7p2EgbcOheSBjaOG7py4gSMOyYSB0cuG7mW4gduG7m2kgY8OhYyB0aGF5IMSR4buVaSB04burIG3DoXkgY2jhu6dcbiIKKyIodi5kLiBcImdpdCBwdWxsIOKAplwiKSB0csaw4bubYyBraGkgxJHhuql5IGzDqm4gbOG6p24gbuG7r2EuXG4iCisiWGVtIOKAnE5vdGUgYWJvdXQgZmFzdC1mb3J3YXJkc+KAnSB0cm9uZyDigJxnaXQgcHVzaCAtLWhlbHDigJ0gxJHhu4MgY8OzIHRow7RuZyB0aW4gY2hpICIKKyJ0aeG6v3QuIgorCisjOiBidWlsdGluL3B1c2guYzoyODMKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJWaeG7h2MgY+G6rXAgbmjhuq10IGLhu4sgdOG7qyBjaOG7kWkgYuG7n2kgdsOsIMSR4bqndSBtw7p0IGPhu6dhIG5ow6FuaCDEkcOjIMSR4bqpeSBsw6puIG7hurFtIMSR4bqxbmcgc2F1ICIKKyJi4buZXG4iCisicGjhuq1uIHTGsMahbmcg4bupbmcgY+G7p2EgbcOheSBjaOG7py4gQ2hlY2tvdSBuaMOhbmggbsOgeSB2w6AgaMOyYSB0cuG7mW4gduG7m2kgY8OhYyB0aGF5IMSR4buVaVxuIgorInThu6sgbcOheSBjaOG7pyAodi5kLiDigJxnaXQgcHVsbCDigKbigJ0pIHRyxrDhu5tjIGtoaSBs4bqhaSBwdXNoIGzhuqduIG7hu69hLlxuIgorIlhlbSDigJxOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHPigJ0gdHJvbmcg4oCcZ2l0IHB1c2ggLS1oZWxw4oCdIMSR4buDIGPDsyB0aMO0bmcgdGluIGNoaSAiCisidGnhur90LiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg5Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIlZp4buHYyBj4bqtcCBuaOG6rXQgYuG7iyB04burIGNo4buRaSBi4bufaSB2w6wgbcOheSBjaOG7pyBjw7MgY2jhu6lhIGPDtG5nIHZp4buHYyBtw6AgYuG6oW4ga2jDtG5nXG4iCisiY8OzIOG7nyBtw6F5IG7hu5lpIGLhu5kgY+G7p2EgbcOsbmguIEzhu5dpIG7DoHkgdGjGsOG7nW5nIGPDsyBuZ3V5w6puIG5ow6JuIGLhu59pIGtobyBraMOhYyDEkeG6qXlcbiIKKyJk4buvIGxp4buHdSBsw6puIGPDuW5nIG3hu5l0IHRoYW0gY2hp4bq/dS4gQuG6oW4gY8OzIGzhur0gbXXhu5FuIGjDsmEgdHLhu5luIHbhu5tpIGPDoWMgdGhheSDEkeG7lWlcbiIKKyJ04burIG3DoXkgY2jhu6cgKHYuZC4g4oCcZ2l0IHB1bGzigKbigJ0pIHRyxrDhu5tjIGtoaSBs4bqhaSBwdXNoIGzhuqduIG7hu69hLlxuIgorIlhlbSDigJxOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHPigJ0gdHJvbmcg4oCcZ2l0IHB1c2ggLS1oZWxw4oCdIMSR4buDIGPDsyB0aMO0bmcgdGluIGNoaSAiCisidGnhur90LiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk2Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAiVmnhu4djIGPhuq1wIG5o4bqtdCBi4buLIHThu6sgY2jhu5FpIGLhu59pIHbDrCB0aOG6uyDEkcOjIHPhurVuIGPDsyB04burIHRyxrDhu5tjIHRyw6puIG3DoXkgY2jhu6cuIgorCisjOiBidWlsdGluL3B1c2guYzoyOTkKK21zZ2lkICIiCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgbeG7mXQgdGhhbSBjaGnhur91IHRyw6puIG3DoXkgY2jhu6cgbcOgIG7DsyBjaOG7iSDEkeG6v24gxJHhu5FpIHTGsOG7o25nICIKKyJraMO0bmdcbiIKKyJwaOG6o2kgbMOgIGzhuqduIGNodXnhu4NuIGdpYW8sIGhv4bq3YyBj4bqtcCBuaOG6rXQgbeG7mXQgdGhhbSBjaGnhur91IG3DoXkgY2jhu6cgxJHhu4MgbsOzIGNo4buJIMSR4bq/biAiCisixJHhu5FpIHTGsOG7o25nXG4iCisia2jDtG5nIHBo4bqjaSBjaHV54buDbiBnaWFvLCBtw6Aga2jDtG5nIHPhu60gZOG7pW5nIHTDuXkgY2jhu41uIOKAnC0tZm9yY2XigJ0uXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIsSQYW5nIMSR4bqpeSBsw6puICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4bqpeSB04bubaSBt4buZdCBz4buRIHRoYW0gY2hp4bq/dSDEkeG6v24g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MgorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgImtobyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQzIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY0Cittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAixJHhuql5IHThuqV0IGPhuqMgY8OhYyB0aGFtIGNoaeG6v3UiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NCBidWlsdGluL3NlbmQtcGFjay5jOjE2NgorbXNnaWQgIm1pcnJvciBhbGwgcmVmcyIKK21zZ3N0ciAibWlycm9yIHThuqV0IGPhuqMgY8OhYyB0aGFtIGNoaeG6v3UiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NgorbXNnaWQgImRlbGV0ZSByZWZzIgorbXNnc3RyICJ4w7NhIGPDoWMgdGhhbSBjaGnhur91IgorCisjOiBidWlsdGluL3B1c2guYzo1NDcKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgIsSR4bqpeSBjw6FjIHRo4bq7IChraMO0bmcgZMO5bmcgY8O5bmcgduG7m2kgLS1hbGwgaGF5IC0tbWlycm9yKSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY3Cittc2dpZCAiZm9yY2UgdXBkYXRlcyIKK21zZ3N0ciAiw6lwIGJ14buZYyBj4bqtcCBuaOG6rXQiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MiBidWlsdGluL3NlbmQtcGFjay5jOjE4MQorbXNnaWQgIjxyZWZuYW1lPjo8ZXhwZWN0PiIKK21zZ3N0ciAiPHTDqm4tdGhhbS1jaGnhur91Pjo8Y+G6p24+IgorCisjOiBidWlsdGluL3B1c2guYzo1NTMgYnVpbHRpbi9zZW5kLXBhY2suYzoxODIKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAiecOqdSBj4bqndSBnacOhLXRy4buLIGPFqSBj4bunYSB0aGFtIGNoaeG6v3UgdGjDrCBsw6AgZ2nDoS10cuG7iyBuw6B5IgorCisjOiBidWlsdGluL3B1c2guYzo1NTYKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIsSRaeG7gXUga2hp4buDbiB2aeG7h2MgxJHhuql5IGzDqm4gKHB1c2gpIMSR4buHIHF1aSBj4bunYSBtw7QtxJF1bi1jb24iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OCBidWlsdGluL3NlbmQtcGFjay5jOjE3NQorbXNnaWQgInVzZSB0aGluIHBhY2siCittc2dzdHIgInThuqFvIGfDs2kgbmjhurkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OSBidWlsdGluL3B1c2guYzo1NjAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjEKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYyCittc2dpZCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iCittc2dzdHIgImNoxrDGoW5nIHRyw6xuaCBuaOG6rW4gZ8OzaSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYxCittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgIsSR4bq3dCB0aMaw4bujbmcgbmd14buTbiBjaG8gZ2l0IHB1bGwvc3RhdHVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NjQKK21zZ2lkICJwcnVuZSBsb2NhbGx5IHJlbW92ZWQgcmVmcyIKK21zZ3N0ciAieMOpbiB04buJYSBuaOG7r25nIHRoYW0gY2hp4bq/dSBi4buLIGfhu6EgYuG7jyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY2Cittc2dpZCAiYnlwYXNzIHByZS1wdXNoIGhvb2siCittc2dzdHIgInbDsm5nIHF1YSBtw7NjIHRp4buBbi3EkeG6qXkgKHByZS1wdXNoKSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY3Cittc2dpZCAicHVzaCBtaXNzaW5nIGJ1dCByZWxldmFudCB0YWdzIgorbXNnc3RyICJwdXNoIHBo4bqnbiBi4buLIHRoaeG6v3UgbmjGsG5nIGPDoWMgdGjhursgbOG6oWkgdGjDrWNoIGjhu6NwIgorCisjOiBidWlsdGluL3B1c2guYzo1NzAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjkKK21zZ2lkICJHUEcgc2lnbiB0aGUgcHVzaCIKK21zZ3N0ciAia8O9IGzhuqduIMSR4bqpeSBkw7luZyBHUEciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MiBidWlsdGluL3NlbmQtcGFjay5jOjE3NgorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICJ5w6p1IGPhuqd1IGdpYW8gZOG7i2NoIGjhuqF0IG5ow6JuIGLDqm4gcGjDrWEgbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTkwCittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIi0tZGVsZXRlIGzDoCB4dW5nIGto4bqvYyB24bubaSBjw6FjIHTDuXkgY2jhu41uIC0tYWxsLCAtLW1pcnJvciB2w6AgLS10YWdzIgorCisjOiBidWlsdGluL3B1c2guYzo1OTIKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiLS1kZWxldGUga2jDtG5nIGjhu6NwIGzDvSBu4bq/dSBraMO0bmcgY8OzIGLhuqV0IGvhu7MgdGhhbSBjaGnhur91IG7DoG8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICJyZXBvc2l0b3J5IChraG8pIHNhaSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjEzCittc2dpZCAiIgorIk5vIGNvbmZpZ3VyZWQgcHVzaCBkZXN0aW5hdGlvbi5cbiIKKyJFaXRoZXIgc3BlY2lmeSB0aGUgVVJMIGZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBjb25maWd1cmUgYSByZW1vdGUgIgorInJlcG9zaXRvcnkgdXNpbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisiXG4iCisiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iCittc2dzdHIgIiIKKyJDaMawYSBj4bqldSBow6xuaCDEkcOtY2ggxJHhu4MgxJHhuql5IGzDqm4uXG4iCisiSG/hurdjIGzDoCBjaOG7iSByYSBVUkwgdOG7qyBkw7JuZyBs4buHbmggaG/hurdjIGzDoCBj4bqldSBow6xuaCBt4buZdCBraG8gbcOheSBjaOG7pyBz4butIGThu6VuZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8dMOqbj4gPHVybD5cbiIKKyJcbiIKKyJ2w6Agc2F1IMSRw7MgxJHhuql5IGzDqm4gc+G7rSBk4bulbmcgdMOqbiBtw6F5IGNo4bunXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDx0w6puPlxuIgorCisjOiBidWlsdGluL3B1c2guYzo2MjgKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIHbDoCAtLXRhZ3MgeHVuZyBraOG6r2MgbmhhdSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjMwCittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1hbGwga2jDtG5nIHRo4buDIMSRxrDhu6NjIHThu5UgaOG7o3AgY8O5bmcgduG7m2kgxJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIgorCisjOiBidWlsdGluL3B1c2guYzo2MzQKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbWlycm9yIHbDoCAtLXRhZ3MgeHVuZyBraOG6r2MgbmhhdSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM2Cittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1taXJyb3Iga2jDtG5nIHRo4buDIMSRxrDhu6NjIHThu5UgaOG7o3AgY8O5bmcgduG7m2kgxJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIgorCisjOiBidWlsdGluL3B1c2guYzo2MzkKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgdsOgIC0tbWlycm9yIHh1bmcga2jhuq9jIG5oYXUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjY0MworbXNnaWQgInB1c2ggb3B0aW9ucyBtdXN0IG5vdCBoYXZlIG5ldyBsaW5lIGNoYXJhY3RlcnMiCittc2dzdHIgImPDoWMgdMO5eSBjaOG7jW4gcHVzaCBwaOG6o2kga2jDtG5nIGPDsyBrw70gdOG7sSBkw7JuZyBt4bubaSIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtYmFzZT4uLjxvbGQtdGlwPiA8bmV3LWJhc2U+Li48bmV3LXRpcD4iCittc2dzdHIgIiIKKyJnaXQgcmFuZ2UtZGlmZiBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8b2xkLWJhc2U+Li48b2xkLXRpcD4gPG5ldy1iYXNlPi4uPG5ldy10aXA+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo5Cittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPG9sZC10aXA+Li4uPG5ldy10aXA+IgorbXNnc3RyICJnaXQgcmFuZ2UtZGlmZiBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8b2xkLXRpcD7igKY8bmV3LXRpcD4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjEwCittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPGJhc2U+IDxvbGQtdGlwPiA8bmV3LXRpcD4iCittc2dzdHIgImdpdCByYW5nZS1kaWZmIFs8Y8OhYyB0w7l5IGNo4buNbj5dIDxiYXNlPiA8b2xkLXRpcD4gPG5ldy10aXA+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyMgorbXNnaWQgIlBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiCittc2dzdHIgIlThu7cgbOG7hyBwaOG6p24gdHLEg20gY8OhaSB04bqhbyBsw6Agd2VpZ2h0ZWQiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI0Cittc2dpZCAidXNlIHNpbXBsZSBkaWZmIGNvbG9ycyIKK21zZ3N0ciAiZMO5bmcgbcOgdSBkaWZmIMSRxqFuIGdp4bqjbiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjYKK21zZ2lkICJub3RlcyIKK21zZ3N0ciAiZ2hpIGNow7oiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAicGFzc2VkIHRvICdnaXQgbG9nJyIKK21zZ3N0ciAiY2h1eeG7g24gY2hvIOKAnGdpdCBsb2figJ0iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjUwIGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIC4uIGluIHJhbmdlOiAnJXMnIgorbXNnc3RyICJraMO0bmcgY8OzIC4uIHRyb25nIHbDuW5nOiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NjQKK21zZ2lkICJzaW5nbGUgYXJnIGZvcm1hdCBtdXN0IGJlIHN5bW1ldHJpYyByYW5nZSIKK21zZ3N0ciAixJHhu4tuaCBk4bqhbmcgxJHhu5FpIHPhu5EgxJHGoW4gcGjhuqNpIGzDoCBt4buZdCB2w7luZyDEkeG7kWkgeOG7qW5nIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo3OQorbXNnaWQgIm5lZWQgdHdvIGNvbW1pdCByYW5nZXMiCittc2dzdHIgImPhuqduIGhhaSB2w7luZyBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjQxCittc2dpZCAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4PikgIgorIlstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLSIKKyJpbmRleC1vdXRwdXQ9PGZpbGU+XSAoLS1lbXB0eSB8IDx0cmVlLWlzaDE+IFs8dHJlZS1pc2gyPiBbPHRyZWUtaXNoMz5dXSkiCittc2dzdHIgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHRp4buBbi0iCisidOG7kT4pIFstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdICIKKyJbLS1pbmRleC1vdXRwdXQ9PHThuq1wLXRpbj5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS0iCisiaXNoMz5dXSkiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAiZ2hpIG3hu6VjIGzhu6VjIGvhur90IHF14bqjIHbDoG8gPHThuq1wLXRpbj4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI3Cittc2dpZCAib25seSBlbXB0eSB0aGUgaW5kZXgiCittc2dzdHIgImNo4buJIHbhu5tpIGLhuqNuZyBt4bulYyBs4bulYyB0cuG7kW5nIHLhu5duZyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjkKK21zZ2lkICJNZXJnaW5nIgorbXNnc3RyICJIw7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzEKK21zZ2lkICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIgorbXNnc3RyICJ0aOG7sWMgaGnhu4duIG3hu5l0IGjDsmEgdHLhu5luIHRow6ptIHbDoG8gdmnhu4djIMSR4buNYyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzMKK21zZ2lkICIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiCittc2dzdHIgIiIKKyJow7JhIHRy4buZbiBraeG7g3Ug4oCcMy13YXnigJ0gbuG6v3Uga2jDtG5nIGPDsyB04bqtcCB0aW4gbeG7qWMgaMOyYSB0cuG7mW4gbsOgbyDEkcaw4bujYyB5w6p1IGPhuqd1IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgIjMtd2F5IG1lcmdlIGluIHByZXNlbmNlIG9mIGFkZHMgYW5kIHJlbW92ZXMiCittc2dzdHIgImjDsmEgdHLhu5luIDMtd2F5IHRyb25nIHPhu7EgaGnhu4duIGRp4buHbiBj4bunYSDigJxhZGRz4oCdIHbDoCDigJxyZW1vdmVz4oCdIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgImdp4buRbmcgduG7m2kgLW0sIG5oxrBuZyBi4buPIHF1YSBjw6FjIG3hu6VjIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOAorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiPHRoxrAtbeG7pWMtY29uPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM5Cittc2dpZCAicmVhZCB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB1bmRlciA8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIsSR4buNYyBjw6J5IHbDoG8gdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjIGTGsOG7m2kgPHRoxrBfbeG7pWNfY29uPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQyCittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAiY+G6rXAgbmjhuq10IGPDonkgbMOgbSB2aeG7h2MgduG7m2kga+G6v3QgcXXhuqMgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ0Cittc2dpZCAiZ2l0aWdub3JlIgorbXNnc3RyICJnaXRpZ25vcmUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ1Cittc2dpZCAiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIgorbXNnc3RyICJjaG8gcGjDqXAgY8OhYyB04bqtcCB0aW4gcsO1IHLDoG5nIGLhu4sgbOG7nSDEkWkgxJHGsOG7o2MgZ2hpIMSRw6giCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ4Cittc2dpZCAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIgorbXNnc3RyICJraMO0bmcga2nhu4NtIHRyYSBjw6J5IGzDoG0gdmnhu4djIHNhdSBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDkKK21zZ2lkICJkb24ndCB1cGRhdGUgdGhlIGluZGV4IG9yIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgImtow7RuZyBj4bqtcCBuaOG6rXQgYuG6o25nIG3hu6VjIGzhu6VjIGhheSBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MQorbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAiYuG7jyBxdWEgw6FwIGThu6VuZyBi4buZIGzhu41jIGzhuqV5IHJhIChjaGVja291dCkgdGjGsGEgdGjhu5t0IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MworbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAiZ+G7oSBs4buXaSDigJx1bnBhY2stdHJlZXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTU3Cittc2dpZCAic3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMiCittc2dzdHIgImtow7RuZyB4deG6pXQgY8OhYyB0aMO0bmcgdGluIHBo4bqjbiBo4buTaSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxODgKK21zZ2lkICJZb3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAiQuG6oW4gY+G6p24gcGjhuqNpIGdp4bqjaSBxdXnhur90IGLhuqNuZyBt4bulYyBs4bulYyBoaeG7h24gdOG6oWkgY+G7p2EgYuG6oW4gdHLGsOG7m2MgxJHDoyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozMgorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+IHwgLS1rZWVwLWJhc2VdICIKKyJbPHVwc3RyZWFtPiBbPGJyYW5jaD5dXSIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgWy1pXSBbY8OhYyB0w7l5IGNo4buNbl0gWy0tZXhlYyA8bOG7h25oPl0gWy0tb250byA8bmV3YmFzZT4gfCAtLWtlZXAtIgorImJhc2VdIFs8dXBzdHJlYW0+XSBbPG5ow6FuaD5dXSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNAorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XSAtLXJvb3QgWzxicmFuY2g+XSIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgWy1pXSBbY8OhYyB0w7l5IGNo4buNbl0gWy0tZXhlYyA8bOG7h25oPl0gWy0tb250byA8bmV3YmFzZT5dIC0tcm9vdCAiCisiWzxuaMOhbmg+XSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNgorbXNnaWQgImdpdCByZWJhc2UgLS1jb250aW51ZSB8IC0tYWJvcnQgfCAtLXNraXAgfCAtLWVkaXQtdG9kbyIKK21zZ3N0ciAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NSBidWlsdGluL3JlYmFzZS5jOjE5OSBidWlsdGluL3JlYmFzZS5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSB0b2RvIGxpc3Q6ICclcyciCittc2dzdHIgImRhbmggc8OhY2ggY+G6p24gbMOgbSBraMO0bmcgZMO5bmcgxJHGsOG7o2M6IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvICVzIHThuqFtIHRo4budaSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyOTgKK21zZ2lkICJjb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSRw6FuaCBk4bqldSBsw6AgdMawxqFuZyB0w6FjIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM1MgorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSB0b2RvIGxpc3QiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyBkYW5oIHPDoWNoIGPhuqduIGzDoG0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzkxCittc2dpZCAiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8gY8ahIHPhu48gcGjhuqNpIMSRxrDhu6NjIGNo4buJIMSR4buLbmggduG7m2kgLS11cHN0cmVhbSBob+G6t2MgLS1vbnRvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ2MQorbXNnaWQgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSBbPGPDoWMgdMO5eSBjaOG7jW4+XSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzQgYnVpbHRpbi9yZWJhc2UuYzoxNTUwCittc2dpZCAiKERFUFJFQ0FURUQpIGtlZXAgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAiKEPFqCkgZ2nhu68gbOG6oWkgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIHLhu5duZyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzggYnVpbHRpbi9yZXZlcnQuYzoxMjgKK21zZ2lkICJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgImNo4bqlcCBuaOG6rW4gY2h1eeG7g24gZ2lhbyBtw6Aga2jDtG5nIGdoaSBjaMO6IGfDrCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODAKK21zZ2lkICJyZWJhc2UgbWVyZ2UgY29tbWl0cyIKK21zZ3N0ciAiY+G6o2kgdOG7lSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgyCittc2dpZCAia2VlcCBvcmlnaW5hbCBicmFuY2ggcG9pbnRzIG9mIGNvdXNpbnMiCittc2dzdHIgImdp4buvIGPDoWMgxJFp4buDbSBuaMOhbmggbmd1ecOqbiBi4bqjbiBj4bunYSBjw6FjIGFuaCBlbSBo4buNIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NAorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgImRpIGNodXnhu4NuIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBi4bqvdCDEkeG6p3UgYuG6sW5nIHNxdWFzaCEvZml4dXAhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NQorbXNnaWQgInNpZ24gY29tbWl0cyIKK21zZ3N0ciAia8O9IGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODcgYnVpbHRpbi9yZWJhc2UuYzoxNDkwCittc2dpZCAiZGlzcGxheSBhIGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIG3hu5l0IGRpZmZzdGF0IGPhu6dhIG5o4buvbmcgdGhheSDEkeG7lWkgdGjGsOG7o25nIG5ndeG7k24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg5Cittc2dpZCAiY29udGludWUgcmViYXNlIgorbXNnc3RyICJ0aeG6v3AgdOG7pWMgY+G6o2kgdOG7lSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTEKK21zZ2lkICJza2lwIGNvbW1pdCIKK21zZ3N0ciAiYuG7jyBxdWEgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTIKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QiCittc2dzdHIgInPhu61hIGRhbmggc8OhY2ggY+G6p24gbMOgbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTQKK21zZ2lkICJzaG93IHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICJoaeG7g24gdGjhu4sgbWnhur9uZyB2w6EgaGnhu4duIGjDoG5oIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NworbXNnaWQgInNob3J0ZW4gY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJyw7p0IG5n4bqvbiBtw6MgY2h1eeG7g24gZ2lhbyB0cm9uZyBkYW5oIHPDoWNoIGPhuqduIGzDoG0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk5Cittc2dpZCAiZXhwYW5kIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAia2hhaSB0cmnhu4NuIG3DoyBjaHV54buDbiBnaWFvIHRyb25nIGRhbmggc8OhY2ggY+G6p24gbMOgbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDEKK21zZ2lkICJjaGVjayB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJraeG7g20gdHJhIGRhbmggc8OhY2ggY+G6p24gbMOgbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDMKK21zZ2lkICJyZWFycmFuZ2UgZml4dXAvc3F1YXNoIGxpbmVzIgorbXNnc3RyICJz4bqvcCB44bq/cCBs4bqhaSBjw6FjIGTDsm5nIGZpeHVwL3NxdWFzaCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDUKK21zZ2lkICJpbnNlcnQgZXhlYyBjb21tYW5kcyBpbiB0b2RvIGxpc3QiCittc2dzdHIgImNow6huIGPDoWMgbOG7h25oIHRo4buxYyB0aGkgdHJvbmcgZGFuaCBzw6FjaCBj4bqnbiBsw6BtIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwNgorbXNnaWQgIm9udG8iCittc2dzdHIgImzDqm4gdHLDqm4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA5Cittc2dpZCAicmVzdHJpY3QtcmV2aXNpb24iCittc2dzdHIgIsSRaeG7g20teMOpdC1kdXnhu4d0LWjhuqFuLWNo4bq/IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwOQorbXNnaWQgInJlc3RyaWN0IHJldmlzaW9uIgorbXNnc3RyICLEkWnhu4NtIHjDqXQgZHV54buHdCBo4bqhbiBjaOG6vyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTEKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLWzDqm4tdHLDqm4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTEyCittc2dpZCAic3F1YXNoIG9udG8iCittc2dzdHIgInNxdWFzaCBsw6puIHRyw6puIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNAorbXNnaWQgInRoZSB1cHN0cmVhbSBjb21taXQiCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8gdGjGsOG7o25nIG5ndeG7k24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE2Cittc2dpZCAiaGVhZC1uYW1lIgorbXNnc3RyICJ0w6puLcSR4bqndSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJoZWFkIG5hbWUiCittc2dzdHIgInTDqm4gxJHhuqd1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMQorbXNnaWQgInJlYmFzZSBzdHJhdGVneSIKK21zZ3N0ciAiY2hp4bq/biBsxrDhu6NjIGPhuqNpIHThu5UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIyCittc2dpZCAic3RyYXRlZ3ktb3B0cyIKK21zZ3N0ciAidMO5eS1jaOG7jW4tY2hp4bq/bi1sxrDhu6NjIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMworbXNnaWQgInN0cmF0ZWd5IG9wdGlvbnMiCittc2dzdHIgImPDoWMgdMO5eSBjaOG7jW4gY2hp4bq/biBsxrDhu6NjIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNAorbXNnaWQgInN3aXRjaC10byIKK21zZ3N0ciAiY2h1eeG7g24txJHhur9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNQorbXNnaWQgInRoZSBicmFuY2ggb3IgY29tbWl0IHRvIGNoZWNrb3V0IgorbXNnc3RyICJuaMOhbmggaGF5IGzhuqduIGNodXnhu4NuIGdpYW8gbOG6p24gbOG6pXkgcmEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI2Cittc2dpZCAib250by1uYW1lIgorbXNnc3RyICJvbnRvLW5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI2Cittc2dpZCAib250byBuYW1lIgorbXNnc3RyICJ0w6puIGzDqm4gdHLDqm4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI3Cittc2dpZCAiY21kIgorbXNnc3RyICJs4buHbmgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI3Cittc2dpZCAidGhlIGNvbW1hbmQgdG8gcnVuIgorbXNnc3RyICJs4buHbmggbXXhu5FuIGNo4bqheSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MzAgYnVpbHRpbi9yZWJhc2UuYzoxNTg0Cittc2dpZCAiYXV0b21hdGljYWxseSByZS1zY2hlZHVsZSBhbnkgYGV4ZWNgIHRoYXQgZmFpbHMiCittc2dzdHIgImzhuq1wIGzhu4tjaCBs4bqhaSBt4buZdCBjw6FjaCB04buxIMSR4buZbmcgYuG6pXQga+G7syDigJxleGVj4oCcIGLhu4sgbOG7l2kiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTQ2Cittc2dpZCAiLS1bbm8tXXJlYmFzZS1jb3VzaW5zIGhhcyBubyBlZmZlY3Qgd2l0aG91dCAtLXJlYmFzZS1tZXJnZXMiCittc2dzdHIgIi0tW25vLV1yZWJhc2UtY291c2lucyBraMO0bmcgY8OzIHTDoWMgZOG7pW5nIGtoaSBraMO0bmcgY8OzIC0tcmViYXNlLW1lcmdlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICIlcyBj4bqnbiBt4buZdCBj4bqjaSB04buVIGtp4buDdSB0xrDGoW5nIHTDoWMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgJ29udG8nOiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhurd0IGzhuqV5IOKAnG9udG/igJ06IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYyNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yaWctaGVhZDogJyVzJyIKK21zZ3N0ciAib3JpZy1oZWFkIGtow7RuZyBo4bujcCBs4buHOiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgaW52YWxpZCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogJyVzJyIKK21zZ3N0ciAixJFhbmcgYuG7jyBxdWEgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUga2jDtG5nIGjhu6NwIGzhu4c6IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjcyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu41jIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBsxrB1IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjg1MworbXNnaWQgImNvdWxkIG5vdCBkZXRlcm1pbmUgSEVBRCByZXZpc2lvbiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGTDsiB0w6xtIMSRaeG7g20geMOpdCBkdXnhu4d0IEhFQUQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6OTc2IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MQorbXNnaWQgIiIKKyJSZXNvbHZlIGFsbCBjb25mbGljdHMgbWFudWFsbHksIG1hcmsgdGhlbSBhcyByZXNvbHZlZCB3aXRoXG4iCisiXCJnaXQgYWRkL3JtIDxjb25mbGljdGVkX2ZpbGVzPlwiLCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIllvdSBjYW4gaW5zdGVhZCBza2lwIHRoaXMgY29tbWl0OiBydW4gXCJnaXQgcmViYXNlIC0tc2tpcFwiLlxuIgorIlRvIGFib3J0IGFuZCBnZXQgYmFjayB0byB0aGUgc3RhdGUgYmVmb3JlIFwiZ2l0IHJlYmFzZVwiLCBydW4gXCJnaXQgcmViYXNlIC0tIgorImFib3J0XCIuIgorbXNnc3RyICIiCisiR2nhuqNpIHF1eeG6v3QgduG6pW4gxJHhu4EgbsOgeSB0aOG7pyBjw7RuZywgaMOjeSDEkWFuaCBk4bqldSBjaMO6bmcgxJHDoyDEkcaw4bujYyBnaeG6o2kgcXV54bq/dCBi4bqxbmdcbiIKKyJow6N5IGNo4bqheSBs4buHbmggXCJnaXQgYWRkL3JtIDxjw6FjX3Thuq1wX3Rpbl94dW5nX8SR4buZdD5cIiwgc2F1IMSRw7MgY2jhuqF5IFwiZ2l0ICIKKyJyZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIkLhuqFuIGPDsyB0aOG7gyBi4buPIHF1YSBtaeG6v25nIHbDoSwgY2jhuqF5IFwiZ2l0IHJlYmFzZSAtLXNraXBcIi5cbiIKKyLEkOG7gyBiw6NpIGLhu48gdsOgIHF1YXkgdHLhu58gbOG6oWkgdHLhuqFuZyB0aMOhaSB0csaw4bubYyBcImdpdCByZWJhc2VcIiwgY2jhuqF5IFwiZ2l0IHJlYmFzZSAiCisiLS1hYm9ydFwiLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJnaXQgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgcHJlcGFyaW5nIHRoZSBwYXRjaGVzIHRvIHJlcGxheVxuIgorInRoZXNlIHJldmlzaW9uczpcbiIKKyJcbiIKKyIgICAgJXNcbiIKKyJcbiIKKyJBcyBhIHJlc3VsdCwgZ2l0IGNhbm5vdCByZWJhc2UgdGhlbS4iCittc2dzdHIgIiIKKyJcbiIKKyJnaXQgY2jhuqFtIHRyw6FuIG3hu5l0IGzhu5dpIHRyb25nIGtoaSDEkWFuZyBjaHXhuqluIGLhu4sgY8OhYyBtaeG6v25nIHbDoSDEkeG7gyBkaeG7hW4gbOG6oWlcbiIKKyJuaOG7r25nIMSRaeG7g20geMOpdCBkdXnhu4d0IG7DoHk6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiS+G6v3QgcXXhuqMgbMOgIGdpdCBraMO0bmcgdGjhu4MgY+G6o2kgdOG7lSBs4bqhaSBjaMO6bmcuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVucmVjb2duaXplZCBlbXB0eSB0eXBlICclcyc7IHZhbGlkIHZhbHVlcyBhcmUgXCJkcm9wXCIsIFwia2VlcFwiLCBhbmQgXCJhc2siCisiXCIuIgorbXNnc3RyICIiCisia2nhu4N1IHLhu5duZyBraMO0bmcgxJHGsOG7o2Mgbmjhuq1uIGThuqFuZyAnJXMnOyBnacOhIHRy4buLIGjhu6NwIGzhu4cgbMOgIFwiZHJvcFwiLCBcImtlZXBcIiwgIgorInbDoCBcImFza1wiLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlc1xuIgorIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC5cbiIKKyJTZWUgZ2l0LXJlYmFzZSgxKSBmb3IgZGV0YWlscy5cbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAnPGJyYW5jaD4nXG4iCisiXG4iCittc2dzdHIgIiIKKyIlc1xuIgorIlZ1aSBsw7JuZyBjaOG7iSDEkeG7i25oIG5ow6FuaCBuw6BvIGLhuqFuIG114buRbiBj4bqjaSB04buVIGThu7FhIHbDoG8uXG4iCisiWGVtIGdpdC1yZWJhc2UoMSkgxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2Ug4oCcPG5ow6FuaD7igJ1cbiIKKyJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiTuG6v3UgYuG6oW4gbXXhu5FuIHRoZW8gZMO1aSB0aMO0bmcgdGluIGNobyBuaMOhbmggbsOgeSBi4bqhbiBjw7MgdGjhu4MgdGjhu7FjIGhp4buHbiBi4bqxbmcgIgorImzhu4duaDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88bmjDoW5oPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDcKK21zZ2lkICJleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICJjw6FjIGzhu4duaCB0aOG7sWMgdGhpIGtow7RuZyB0aOG7gyBjaOG7qWEgY8OhYyBrw70gdOG7sSBkw7JuZyBt4bubaSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDUxCittc2dpZCAiZW1wdHkgZXhlYyBjb21tYW5kIgorbXNnc3RyICJs4buHbmggdGjhu7FjIHRoaSB0cuG7kW5nIHLhu5duZyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDgxCittc2dpZCAicmViYXNlIG9udG8gZ2l2ZW4gYnJhbmNoIGluc3RlYWQgb2YgdXBzdHJlYW0iCittc2dzdHIgImPhuqNpIHThu5UgdsOgbyBuaMOhbmggxJHDoyBjaG8gdGhheSBjaG8gdGjGsOG7o25nIG5ndeG7k24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MworbXNnaWQgInVzZSB0aGUgbWVyZ2UtYmFzZSBvZiB1cHN0cmVhbSBhbmQgYnJhbmNoIGFzIHRoZSBjdXJyZW50IGJhc2UiCittc2dzdHIgIiIKKyJz4butIGThu6VuZyBjw6FjIGPGoSBz4bufIGjDsmEgdHLhu5luIGPhu6dhIHRoxrDhu6NuZyBuZ3Xhu5NuIHbDoCBuaMOhbmggbmjGsCBsw6AgY8ahIHPhu58gaGnhu4duIHThuqFpIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODUKK21zZ2lkICJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIgorbXNnc3RyICJjaG8gcGjDqXAgbcOzYyAoaG9vaykgcHJlLXJlYmFzZSDEkcaw4bujYyBjaOG6oXkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4NworbXNnaWQgImJlIHF1aWV0LiBpbXBsaWVzIC0tbm8tc3RhdCIKK21zZ3N0ciAiaMOjeSBpbSBs4bq3bmcuIMO9IGzDoCAtLW5vLXN0YXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MworbXNnaWQgImRvIG5vdCBzaG93IGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAixJHhu6tuZyBoaeG7g24gdGjhu4sgZGlmZnN0YXQgY+G7p2Egbmjhu69uZyB0aGF5IMSR4buVaSB0aMaw4bujbmcgbmd14buTbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDk2Cittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieTogbGluZSB0byBlYWNoIGNvbW1pdCIKK21zZ3N0ciAidGjDqm0gZMOybmcgU2lnbmVkLW9mZi1ieTogY2hvIHThu6tuZyBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTggYnVpbHRpbi9yZWJhc2UuYzoxNTAyIGJ1aWx0aW4vcmViYXNlLmM6MTUwNAorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFtJyIKK21zZ3N0ciAiY2h1eeG7g24gY2hvIOKAnGdpdCBhbeKAnSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTA2IGJ1aWx0aW4vcmViYXNlLmM6MTUwOAorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFwcGx5JyIKK21zZ3N0ciAiY2h1eeG7g24gY2hvIOKAnGdpdCBhcHBseeKAnSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTEwIGJ1aWx0aW4vcmViYXNlLmM6MTUxMworbXNnaWQgImNoZXJyeS1waWNrIGFsbCBjb21taXRzLCBldmVuIGlmIHVuY2hhbmdlZCIKK21zZ3N0ciAiIgorImNoZXJyeS1waWNrIHThuqV0IGPhuqMgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvLCBuZ2F5IGPhuqMga2hpIGtow7RuZyBjw7MgdGhheSDEkeG7lWkgZ8OsIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTUKK21zZ2lkICJjb250aW51ZSIKK21zZ3N0ciAidGnhur9wIHThu6VjIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTgKK21zZ2lkICJza2lwIGN1cnJlbnQgcGF0Y2ggYW5kIGNvbnRpbnVlIgorbXNnc3RyICJi4buPIHF1YSBtaeG6v25nIHbDoSBoaeG7h24gaMOgbmggdsOgIHRp4bq/cCB04bulYyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTIwCittc2dpZCAiYWJvcnQgYW5kIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIgorbXNnc3RyICJiw6NpIGLhu48gdsOgIGzhuqV5IHJhIG5ow6FuaCBuZ3V5w6puIHRo4buneSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTIzCittc2dpZCAiYWJvcnQgYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcyIKK21zZ3N0ciAiYsOjaSBi4buPIG5oxrBuZyB24bqrbiB24bqrbiBnaeG7ryBIRUFEIGNo4buJIMSR4bq/biBuw7MiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCBkdXJpbmcgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICJz4butYSBkYW5oIHPDoWNoIGPhuqduIGzDoG0gdHJvbmcgcXXDoSB0csOsbmgg4oCccmViYXNl4oCdIChj4bqjaSB04buVKSB0xrDGoW5nIHTDoWMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNworbXNnaWQgInNob3cgdGhlIHBhdGNoIGZpbGUgYmVpbmcgYXBwbGllZCBvciBtZXJnZWQiCittc2dzdHIgImhp4buDbiB0aOG7iyBtaeG6v25nIHbDoSDEkcOjIMSRxrDhu6NjIMOhcCBk4bulbmcgaGF5IGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzAKK21zZ2lkICJ1c2UgYXBwbHkgc3RyYXRlZ2llcyB0byByZWJhc2UiCittc2dzdHIgImTDuW5nIGNoaeG6v24gbMaw4bujYyDDoXAgZOG7pW5nIMSR4buDIGPhuqNpIHThu5UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzNAorbXNnaWQgInVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICJkw7luZyBjaGnhur9uIGzGsOG7o2MgaMOyYSB0cuG7mW4gxJHhu4MgY+G6o2kgdOG7lSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTM4Cittc2dpZCAibGV0IHRoZSB1c2VyIGVkaXQgdGhlIGxpc3Qgb2YgY29tbWl0cyB0byByZWJhc2UiCittc2dzdHIgIsSR4buDIG5nxrDhu51pIGTDuW5nIHPhu61hIGRhbmggc8OhY2ggY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIG114buRbiBj4bqjaSB04buVIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NDIKK21zZ2lkICIoREVQUkVDQVRFRCkgdHJ5IHRvIHJlY3JlYXRlIG1lcmdlcyBpbnN0ZWFkIG9mIGlnbm9yaW5nIHRoZW0iCittc2dzdHIgIijEkMODIEzhuqBDIEjhuqxVKSBoYXkgdGjhu60gdOG6oW8gbOG6oWkgY8OhYyBow7JhIHRy4buZbiB0aGF5IHbDrCBi4buPIHF1YSBjaMO6bmciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU0NworbXNnaWQgImhvdyB0byBoYW5kbGUgY29tbWl0cyB0aGF0IGJlY29tZSBlbXB0eSIKK21zZ3N0ciAieOG7rSBsw70gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIG3DoCBuw7MgdHLhu58gdGjDoG5oIHRy4buRbmcgcuG7l25nIG5oxrAgdGjhur8gbsOgbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTU0Cittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISB1bmRlciAtaSIKK21zZ3N0ciAiZGkgY2h1eeG7g24gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIG3DoCBi4bqvdCDEkeG6p3UgYuG6sW5nIHNxdWFzaCEvZml4dXAhIGTGsOG7m2kgLWkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2MAorbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIiCittc2dzdHIgInThu7EgxJHhu5luZyBzdGFzaC9zdGFzaCBwb3AgdHLGsOG7m2MgdsOgIHNhdSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTYyCittc2dpZCAiYWRkIGV4ZWMgbGluZXMgYWZ0ZXIgZWFjaCBjb21taXQgb2YgdGhlIGVkaXRhYmxlIGxpc3QiCittc2dzdHIgInRow6ptIGPDoWMgZMOybmcgdGjhu7FjIHRoaSBzYXUgdOG7q25nIGzhuqduIGNodXnhu4NuIGdpYW8gY+G7p2EgZGFuaCBzw6FjaCBz4butYSDEkcaw4bujYyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTY2Cittc2dpZCAiYWxsb3cgcmViYXNpbmcgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICJjaOG6pXAgbmjhuq1uIGPhuqNpIHThu5UgY8OhYyBjaHV54buDbiBnaWFvIG3DoCBraMO0bmcgZ2hpIGNow7ogZ8OsIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzAKK21zZ2lkICJ0cnkgdG8gcmViYXNlIG1lcmdlcyBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZW0iCittc2dzdHIgImPhu5EgdGjhu60gY+G6o2kgdOG7lSBjw6FjIGjDsmEgdHLhu5luIHRoYXkgdsOsIGLhu48gcXVhIGNow7puZyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTczCittc2dpZCAidXNlICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcgdG8gcmVmaW5lIHVwc3RyZWFtIgorbXNnc3RyICJkw7luZyDigJxtZXJnZS1iYXNlIC0tZm9yay1wb2ludOKAnSDEkeG7gyDEkeG7i25oIG5naMSpYSBs4bqhaSB0aMaw4bujbmcgbmd14buTbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTc1Cittc2dpZCAidXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiZMO5bmcgY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luIMSRw6MgY2hvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzcgYnVpbHRpbi9yZXZlcnQuYzoxMTUKK21zZ2lkICJvcHRpb24iCittc2dzdHIgInTDuXkgY2jhu41uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzgKK21zZ2lkICJwYXNzIHRoZSBhcmd1bWVudCB0aHJvdWdoIHRvIHRoZSBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiY2h1eeG7g24gdGhhbyBz4buRIMSR4bq/biBjaGnhur9uIGzGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU4MQorbXNnaWQgInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiCittc2dzdHIgImPhuqNpIHThu5UgdOG6pXQgY8OhYyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gY2hvIMSR4bq/biByb290IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1OTgKK21zZ2lkICIiCisidGhlIHJlYmFzZS51c2VCdWlsdGluIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCFcbiIKKyJTZWUgaXRzIGVudHJ5IGluICdnaXQgaGVscCBjb25maWcnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorInZp4buHYyBo4buXIHRy4bujIHJlYmFzZS51c2VCdWlsdGluIMSRw6MgYuG7iyB4w7NhIVxuIgorIlhlbSBt4bulYyB0aW4gY+G7p2EgbsOzIHRyb25nIOKAnCBnaXQgaGVscCBjb25maWfigJ0gxJHhu4MgYmnhur90IGNoaSB0aeG6v3QuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDQKK21zZ2lkICJJdCBsb29rcyBsaWtlICdnaXQgYW0nIGlzIGluIHByb2dyZXNzLiBDYW5ub3QgcmViYXNlLiIKK21zZ3N0ciAiIgorIkjDrG5oIG5oxrAgxJFhbmcgdHJvbmcgcXXDoSB0csOsbmggdGjhu7FjIGhp4buHbiBs4buHbmgg4oCcZ2l0LWFt4oCdLiBLaMO0bmcgdGjhu4MgcmViYXNlLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjQ1Cittc2dpZCAiIgorImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgaXMgZGVwcmVjYXRlZC4gVXNlIC0tcmViYXNlLW1lcmdlcyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgxJHDoyBs4bqhYyBo4bqtdS4gSMOjeSBkw7luZyAtLXJlYmFzZS1tZXJnZXMgxJHhu4MgdGhheSAiCisidGjhur8uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTAKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tb250byciCittc2dzdHIgImtow7RuZyB0aOG7gyBr4bq/dCBo4bujcCDigJwtLWtlZXAtYmFzZeKAnSB24bubaSDigJwtLW9udG/igJ0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1MgorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1yb290JyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGvhur90IGjhu6NwIOKAnC0ta2VlcC1iYXNl4oCdIHbhu5tpIOKAnC0tcm9vdOKAnSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjU2Cittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aeG6v24gdHLDrG5oIHJlYmFzZSBuw6BvIHBo4bqjaSBraMO0bmc/IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NjAKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIiIKKyJIw6BuaCDEkeG7mW5nIOKAnC0tZWRpdC10b2Rv4oCdIGNo4buJIGPDsyB0aOG7gyBkw7luZyB0cm9uZyBxdcOhIHRyw6xuaCDigJxyZWJhc2XigJ0gKHPhu61hIGzhu4tjaCAiCisic+G7rSkgdMawxqFuZyB0w6FjLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjgzCittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buNYyBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2OTUKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyJC4bqhbiBwaOG6o2kgc+G7rWEgdOG6pXQgY+G6oyBjw6FjIGzhuqduIGjDsmEgdHLhu5luIHh1bmcgxJHhu5l0IHbDoCBzYXVcbiIKKyLEkcOzIMSRw6FuaCBk4bqldSBjaMO6bmcgbMOgIGPhuqduIHjhu60gbMO9IHPhu60gZOG7pW5nIGzhu4duaCBnaXQgYWRkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MTQKK21zZ2lkICJjb3VsZCBub3QgZGlzY2FyZCB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbG/huqFpIGLhu48gY8OhYyB0aGF5IMSR4buVaSBjw6J5LWzDoG0tdmnhu4djIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1vdmUgYmFjayB0byAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHF1YXkgdHLhu58gbOG6oWkgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJXMgZGlyZWN0b3J5LCBhbmRcbiIKKyJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorImNhc2UsIHBsZWFzZSB0cnlcbiIKKyJcdCVzXG4iCisiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZVxuIgorIlx0JXNcbiIKKyJhbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZ1xuIgorInZhbHVhYmxlIHRoZXJlLlxuIgorbXNnc3RyICIiCisiSMOsbmggbmjGsCBsw6Ag4bufIMSRw6J5IHPhurVuIGPDsyBt4buZdCB0aMawIG3hu6VjICVzLCB2w6BcbiIKKyJUw7RpIHThu7EgaOG7j2kgY8OzIHBo4bqjaSBi4bqhbiDEkWFuZyDhu58gZ2nhu69hIG3hu5l0IGzhu4duaCByZWJhc2Uga2jDoWMuIE7hur91IMSRw7puZyBsw6BcbiIKKyJuaMawIHbhuq15LCB4aW4gaMOjeSB0aOG7rVxuIgorIlx0JXNcbiIKKyJO4bq/dSBraMO0bmcgcGjhuqNpIHRo4bq/LCBow6N5IHRo4butXG4iCisiXHQlc1xuIgorInbDoCBjaOG6oXkgVMOUSSBs4bqnbiBu4buvYS4gVMOUSSBk4burbmcgbOG6oWkgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIGLhuqFuIHbhuqtuXG4iCisiY8OzIG3hu5l0IHPhu5EgdGjhu6kgcXXDvSBnacOhIOG7nyDEkcOieS5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODA2Cittc2dpZCAic3dpdGNoIGBDJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJ0w7l5IGNo4buNbiDigJwlY+KAnSBj4bqnbiBt4buZdCBnacOhIHRy4buLIGLhurFuZyBz4buRIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBtb2RlOiAlcyIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSBjaOG6vyDEkeG7mTogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg2OQorbXNnaWQgIi0tc3RyYXRlZ3kgcmVxdWlyZXMgLS1tZXJnZSBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXN0cmF0ZWd5IGPhuqduIC0tbWVyZ2UgaGF5IC0taW50ZXJhY3RpdmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5OQorbXNnaWQgImNhbm5vdCBjb21iaW5lIGFwcGx5IG9wdGlvbnMgd2l0aCBtZXJnZSBvcHRpb25zIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG7lSBo4bujcCBjw6FjIHTDuXkgY2jhu41uIMOhcCBk4bulbmcgduG7m2kgY8OhYyB0w7l5IGNo4buNbiBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gcmViYXNlIGJhY2tlbmQ6ICVzIgorbXNnc3RyICJLaMO0bmcgaGnhu4N1IOG7qW5nIGThu6VuZyBjaOG6oXkgcGjDrWEgc2F1IGzhu4duaCBj4bqjaSB04buVOiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTM3Cittc2dpZCAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIHJlcXVpcmVzIC0tZXhlYyBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMgY+G6p24gLS1leGVjIGhheSAtLWludGVyYWN0aXZlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5NTcKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmViYXNlLW1lcmdlcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBr4bq/dCBo4bujcCDigJwtLXByZXNlcnZlLW1lcmdlc+KAnSB24bubaSDigJwtLXJlYmFzZS1tZXJnZXPigJ0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk2MQorbXNnaWQgIiIKKyJlcnJvcjogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnIgorbXNnc3RyICJraMO0bmcgdGjhu4Mga+G6v3QgaOG7o3Ag4oCcLS1wcmVzZXJ2ZS1tZXJnZXPigJ0gduG7m2kg4oCcLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVj4oCdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJXMnIgorbXNnc3RyICJ0aMaw4bujbmcgbmd14buTbiBraMO0bmcgaOG7o3AgbOG7hyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTkxCittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBuZXcgcm9vdCBjb21taXQiCittc2dzdHIgIktow7RuZyB0aOG7gyB04bqhbyBs4bqnbiBjaHV54buDbiBnaWFvIGfhu5FjIG3hu5tpIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIHdpdGggYnJhbmNoIgorbXNnc3RyICLigJwlc+KAnTogY+G6p24gY2jDrW5oIHjDoWMgbeG7mXQgY8ahIHPhu58gaMOyYSB0cuG7mW4gduG7m2kgbmjDoW5oIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIgorbXNnc3RyICLigJwlc+KAnTogY+G6p24gY2jDrW5oIHjDoWMgbeG7mXQgY8ahIHPhu58gaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjAyOAorIywgYy1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdCAnJXMnIgorbXNnc3RyICJLaMO0bmcgY2jhu4kgxJHhur9uIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8ga2jDtG5nIGjhu6NwIGzhu4cg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2gvY29tbWl0ICclcyciCittc2dzdHIgIm5naGnDqm0gdHLhu41uZzoga2jDtG5nIGPDsyBuaMOhbmgvbOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnSBuaMawIHRo4bq/IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNjIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlZjogJXMiCittc2dzdHIgIktow7RuZyBjw7MgdGhhbSBjaGnhur91IG7DoG8gbmjGsCB0aOG6vzogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA3MworbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgdG8gYSByZXZpc2lvbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSBs4bqnbiBjaHV54buDbiBnaWFvIEhFQUQgxJHhur9uIG3hu5l0IMSRaeG7g20geMOpdCBkdXnhu4d0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTEKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgYXV0b3N0YXNoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCBzdGFzaCByZXNwb25zZTogJyVzJyIKK21zZ3N0ciAiR+G6t3AgxJHDoXAg4bupbmcgc3Rhc2gga2jDtG5nIGPhuqduOiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdOG6oW8gdGjGsCBt4bulYyBjaG8g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyMworIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJXNcbiIKK21zZ3N0ciAixJDDoyB04bqhbyBhdXRvc3Rhc2g6ICVzXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyNgorbXNnaWQgImNvdWxkIG5vdCByZXNldCAtLWhhcmQiCittc2dzdHIgImtow7RuZyB0aOG7gyByZXNldCAtLWhhcmQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEzNQorbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIlhpbiBow6N5IGNodXnhu4NuIGdpYW8gaG/hurdjIHThuqFtIGPhuqV0IChzdGFzaCkgY2jDum5nLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzd2l0Y2ggdG8gJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBjaHV54buDbiDEkeG6v24gJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE4MAorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkhFQUQgxJHDoyBj4bqtcCBuaOG6rXQuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZS5cbiIKK21zZ3N0ciAiTmjDoW5oIGhp4buHbiB04bqhaSAlcyDEkcOjIMSRxrDhu6NjIGPhuq1wIG5o4bqtdCBy4buTaS5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTkwCittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiSEVBRCBoaeG7h24gxJHDoyDEkcaw4bujYyBj4bqtcCBuaOG6rXQgcuG7k2ksIGLhu4sgw6lwIGJ14buZYyByZWJhc2UuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC5cbiIKK21zZ3N0ciAiTmjDoW5oIGhp4buHbiB04bqhaSAlcyDEkcOjIMSRxrDhu6NjIGPhuq1wIG5o4bqtdCBy4buTaSwgbOG7h25oIHJlYmFzZSDDqXAgYnXhu5ljLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMDAKK21zZ2lkICJUaGUgcHJlLXJlYmFzZSBob29rIHJlZnVzZWQgdG8gcmViYXNlLiIKK21zZ3N0ciAiTcOzYyAoaG9vaykgcHJlLXJlYmFzZSB04burIGNo4buRaSByZWJhc2UuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyB0byAlczpcbiIKK21zZ3N0ciAiVGhheSDEkeG7lWkgdGjDoG5oICVzOlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIgorbXNnc3RyICJUaGF5IMSR4buVaSB04burICVzIHRow6BuaCAlczpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLlxuIgorbXNnc3RyICIiCisiVHLGsOG7m2MgdGnDqm4sIGRpIGNodXnhu4NuIGhlYWQgxJHhu4MgeGVtIGzhuqFpIGPDoWMgY8O0bmcgdmnhu4djIHRyw6puIMSR4buJbmggY+G7p2EgbsOz4oCmXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjI0NAorbXNnaWQgIkNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHTDoWNoIHLhu51pIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAlcyB0byAlcy5cbiIKK21zZ3N0ciAiQ2h1eeG7g24tdGnhur9wLW5oYW5oICVzIMSR4bq/biAlcy5cbiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzozMworbXNnaWQgImdpdCByZWNlaXZlLXBhY2sgPGdpdC1kaXI+IgorbXNnc3RyICJnaXQgcmVjZWl2ZS1wYWNrIDx0aMawLW3hu6VjLWdpdD4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODIxCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnlcbiIKKyJpcyBkZW5pZWQsIGJlY2F1c2UgaXQgd2lsbCBtYWtlIHRoZSBpbmRleCBhbmQgd29yayB0cmVlIGluY29uc2lzdGVudFxuIgorIndpdGggd2hhdCB5b3UgcHVzaGVkLCBhbmQgd2lsbCByZXF1aXJlICdnaXQgcmVzZXQgLS1oYXJkJyB0byBtYXRjaFxuIgorInRoZSB3b3JrIHRyZWUgdG8gSEVBRC5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCB0aGUgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVcbiIKKyJ0byAnaWdub3JlJyBvciAnd2FybicgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IHB1c2hpbmcgaW50b1xuIgorIml0cyBjdXJyZW50IGJyYW5jaDsgaG93ZXZlciwgdGhpcyBpcyBub3QgcmVjb21tZW5kZWQgdW5sZXNzIHlvdVxuIgorImFycmFuZ2VkIHRvIHVwZGF0ZSBpdHMgd29yayB0cmVlIHRvIG1hdGNoIHdoYXQgeW91IHB1c2hlZCBpbiBzb21lXG4iCisib3RoZXIgd2F5LlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2aW91ciwgc2V0XG4iCisiJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisiVGhlbyBt4bq3YyDEkeG7i25oLCB2aeG7h2MgY+G6rXAgbmjhuq10IG5ow6FuaCBoaeG7h24gdOG6oWkgdHJvbmcgbeG7mXQga2hvIGtow7RuZy10aHXhuqduXG4iCisiYuG7iyB04burIGNo4buRaSwgYuG7n2kgdsOsIG7DsyBz4bq9IGzDoG0gY2hvIGNo4buJIG3hu6VjIHbDoCBjw6J5IGzDoG0gdmnhu4djIG3DonUgdGh14bqrbiB24bubaVxuIgorImPDoWkgbcOgIGLhuqFuIMSR4bqpeSBsw6puLCB2w6Agc+G6vSB5w6p1IGPhuqd1IGzhu4duaCDigJxnaXQgcmVzZXQgLS1oYXJk4oCdIMSR4buDIG3DoCBsw6BtXG4iCisiY2hvIGPDonkgbMOgbSB2aeG7h2Mga2jhu5twIHbhu5tpIEhFQUQuXG4iCisiXG4iCisiQuG6oW4gY8OzIHRo4buDIMSR4bq3dCBiaeG6v24gY+G6pXUgaMOsbmgg4oCccmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaOKAnSB0aMOgbmhcbiIKKyLigJxpZ25vcmXigJ0gaGF5IOKAnHdhcm7igJ0gdHJvbmcga2hvIG3DoXkgY2jhu6cgxJHhu4MgY2hvIHBow6lwIMSR4bqpeSBsw6puIG5ow6FuaFxuIgorImhp4buHbiB04bqhaSBj4bunYSBuw7M7IHR1eSBuaGnDqm4sIGtow7RuZyBuw6puIGzDoG0gbmjGsCB0aOG6vyB0cuG7qyBwaGkgYuG6oW5cbiIKKyJz4bqvcCDEkeG6t3QgxJHhu4MgY+G6rXAgbmjhuq10IGPDonkgbMOgbSB2aeG7h2MgY+G7p2EgbsOzIHTGsMahbmcg4bupbmcgduG7m2kgY8OhaSBtw6AgYuG6oW4gxJHhuql5XG4iCisibMOqbiB0aGVvIGPDoWNoIG7DoG8gxJHDsy5cbiIKKyJcbiIKKyLEkOG7gyBjaOG6pW0gZOG7qXQgbOG7nWkgbmjhuq9uIG7DoHkgdsOgIHbhuqtuIGdp4buvIGPDoWNoIOG7qW5nIHjhu60gbeG6t2MgxJHhu4tuaCwgaMOjeSDEkeG6t3RcbiIKKyJiaeG6v24gY+G6pXUgaMOsbmgg4oCccmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaOKAnSB0aMOgbmgg4oCccmVmdXNl4oCdLiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4NDEKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGRlbmllZCwgYmVjYXVzZSB0aGUgbmV4dFxuIgorIidnaXQgY2xvbmUnIHdvbid0IHJlc3VsdCBpbiBhbnkgZmlsZSBjaGVja2VkIG91dCwgY2F1c2luZyBjb25mdXNpb24uXG4iCisiXG4iCisiWW91IGNhbiBzZXQgJ3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG9cbiIKKyInd2Fybicgb3IgJ2lnbm9yZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IGRlbGV0aW5nIHRoZVxuIgorImN1cnJlbnQgYnJhbmNoLCB3aXRoIG9yIHdpdGhvdXQgYSB3YXJuaW5nIG1lc3NhZ2UuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorIlRoZW8gbeG6t2MgxJHhu4tuaCwgdmnhu4djIGPhuq1wIHjDs2EgbmjDoW5oIGhp4buHbiB04bqhaSBi4buLIHThu6sgY2jhu5FpLCBi4bufaSB2w6xcbiIKKyJs4buHbmgg4oCcZ2l0IGNsb25l4oCdIHRp4bq/cCB0aGVvIHPhur0ga2jDtG5nIGPDsyB0w6FjIGThu6VuZyB0cm9uZyB2aeG7h2MgbOG6pXlcbiIKKyJyYSBi4bqldCBr4buzIHThuq1wIHRpbiBuw6BvLCBk4bqrbiDEkeG6v24gaOG7l24gbG/huqFuXG4iCisiXG4iCisiQuG6oW4gY8OzIHRo4buDIMSR4bq3dCBiaeG6v24gY+G6pXUgaMOsbmgg4oCccmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudOKAnSB0aMOgbmhcbiIKKyLigJx3YXJu4oCdIGhheSDigJxpZ25vcmXigJ0gdHJvbmcga2hvIG3DoXkgY2jhu6cgxJHhu4MgY2hvIHBow6lwIMSR4bqpeSB4w7NhIG5ow6FuaFxuIgorImhp4buHbiB04bqhaSBj4bunYSBuw7MgY8OzIGhv4bq3YyBraMO0bmcgY+G6o25oIGLDoW8uXG4iCisiXG4iCisixJDhu4MgY2jhuqVtIGThu6l0IGzhu51pIG5o4bqvbiBuw6B5LCBi4bqhbiBow6N5IMSR4bq3dCBuw7MgdGjDoG5oIOKAnHJlZnVzZeKAnS4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTkzOAorbXNnaWQgInF1aWV0IgorbXNnc3RyICJpbSBs4bq3bmciCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MgorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIgorbXNnc3RyICJC4bqhbiBwaOG6o2kgY2jhu4kgxJHhu4tuaCB0aMawIG3hu6VjLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoxNworbXNnaWQgIiIKKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9PHRpbWU+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHRpbWU+XSBbLS0iCisicmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gWy0tYWxsXSAiCisiPHJlZnM+Li4uIgorbXNnc3RyICIiCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0aW1lPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxjw6FjIHRoYW0gY2hp4bq/dT7igKYiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjIKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gIgorIjxjw6FjIHRoYW0gY2hp4bq/dT7igKYiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjUKK21zZ2lkICJnaXQgcmVmbG9nIGV4aXN0cyA8cmVmPiIKK21zZ3N0ciAiZ2l0IHJlZmxvZyBleGlzdHMgPHRoYW1fY2hp4bq/dT4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NTY4IGJ1aWx0aW4vcmVmbG9nLmM6NTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgcGjhuqNpIGzDoCBk4bqldSB0aOG7nWkgZ2lhbiBo4bujcCBs4buHIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nIHJlYWNoYWJsZSBvYmplY3RzLi4uIgorbXNnc3RyICLEkMOhbmggZOG6pXUgY8OhYyDEkeG7kWkgdMaw4bujbmcgdGnhur9wIGPhuq1uIMSRxrDhu6Nj4oCmIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgbm93aGVyZSEiCittc2dzdHIgIiVzIGNo4bqzbmcgY2jhu4kgxJHhur9uIMSRw6J1IGPhuqMhIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY5NgorbXNnaWQgIm5vIHJlZmxvZyBzcGVjaWZpZWQgdG8gZGVsZXRlIgorbXNnc3RyICJjaMawYSBjaOG7iSByYSByZWZsb2cgxJHhu4MgeMOzYSIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmVmbG9nOiAlcyIKK21zZ3N0ciAia2jDtG5nIHBo4bqjaSBt4buZdCByZWZsb2c6ICVzIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjcxMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyByZWZsb2cgZm9yICclcyciCittc2dzdHIgImtow7RuZyByZWZsb2cgY2hvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZiBmb3JtYXQ6ICVzIgorbXNnc3RyICLEkeG7i25oIGThuqFuZyB0aGFtIGNoaeG6v3Uga2jDtG5nIGjhu6NwIGzhu4c6ICVzIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc2NQorbXNnaWQgImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iCittc2dzdHIgImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOAorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxuaMOhbmg+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFnc3wtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8dMOqbj4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkgYnVpbHRpbi9yZW1vdGUuYzozOQorbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSA8dMOqbi1jxak+IDx0w6puLW3hu5tpPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMCBidWlsdGluL3JlbW90ZS5jOjQ0Cittc2dpZCAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbW92ZSA8dMOqbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjEgYnVpbHRpbi9yZW1vdGUuYzo0OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNoPikiCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWhlYWQgPHTDqm4+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8bmjDoW5oPikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8dMOqbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjMKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPHTDqm4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0Cittc2dpZCAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3JvdXA+IHwgPHJlbW90ZT4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8bmjDs20+IHwgPG3DoXktY2jhu6c+KeKApl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjUKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8dMOqbj4gPG5ow6FuaD7igKYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjYgYnVpbHRpbi9yZW1vdGUuYzo3NQorbXNnaWQgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPHTDqm4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI3IGJ1aWx0aW4vcmVtb3RlLmM6ODAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+IFs8b2xkdXJsPl0iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8dMOqbj4gPHVybC1t4bubaT4gWzx1cmwtY8WpPl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjggYnVpbHRpbi9yZW1vdGUuYzo4MQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtZT4gPG5ld3VybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8dMOqbj4gPHVybC1t4bubaT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjkgYnVpbHRpbi9yZW1vdGUuYzo4MgorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8dMOqbj4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzQKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs8Y8OhYyB0w7l5IGNo4buNbj5dIDx0w6puPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPHTDqm4+IDxuaMOhbmg+4oCmIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU1Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8dMOqbj4gPG5ow6FuaD7igKYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjAKK21zZ2lkICJnaXQgcmVtb3RlIHNob3cgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNob3cgWzxjw6FjIHTDuXkgY2jhu41uPl0gPHTDqm4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY1Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWzxjw6FjIHTDuXkgY2jhu41uPl0gPHTDqm4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwCittc2dpZCAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcHRpb25zPl0gWzxncm91cD4gfCA8cmVtb3RlPl0uLi4iCittc2dzdHIgImdpdCByZW1vdGUgdXBkYXRlIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8bmjDs20+IHwgPG3DoXktY2jhu6c+XeKApiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAixJBhbmcgY+G6rXAgbmjhuq10ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMQorbXNnaWQgIiIKKyItLW1pcnJvciBpcyBkYW5nZXJvdXMgYW5kIGRlcHJlY2F0ZWQ7IHBsZWFzZVxuIgorIlx0IHVzZSAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoIGluc3RlYWQiCittc2dzdHIgIiIKKyItLW1pcnJvciBuZ3V5IGhp4buDbSB2w6Aga2jDtG5nIGTDuW5nIG7hu69hOyB4aW4gaMOjeVxuIgorIlx0IHPhu60gZOG7pW5nIHTDuXkgY2jhu41uIC0tbWlycm9yPWZldGNoIGhv4bq3YyAtLW1pcnJvcj1wdXNoIMSR4buDIHRoYXkgdGjhur8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSB0aGFtIHPhu5EgbcOheSBi4bqjbiBzYW8gKG1pcnJvcik6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NAorbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgImzhuqV5IHbhu4EgY8OhYyBuaMOhbmggdOG7qyBtw6F5IGNo4bunIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NgorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgIm5o4bqtcCB2w6BvIHThuqV0IGPhuqMgY8OhYyDEkeG7kWkgdMaw4bujbmcgdGjhursgdsOgIHRow6BuaCBwaOG6p24gbGnDqm4gcXVhbiBraGkgbOG6pXkgduG7gSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjkKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgImhv4bq3YyBraMO0bmcgbOG6pXkgduG7gSBi4bqldCBr4buzIHRo4bq7IG7DoG8gKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcxCittc2dpZCAiYnJhbmNoKGVzKSB0byB0cmFjayIKK21zZ3N0ciAiY8OhYyBuaMOhbmggxJHhu4MgdGhlbyBkw7VpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MgorbXNnaWQgIm1hc3RlciBicmFuY2giCittc2dzdHIgIm5ow6FuaCBtYXN0ZXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTc0Cittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgIsSR4bq3dCBtw6F5IGNo4bunIChyZW1vdGUpIG5oxrAgbMOgIG3hu5l0IG3DoXkgYuG6o24gc2FvIMSR4buDIHB1c2ggaGF5IGZldGNoIHThu6sgxJHDsyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODYKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICLEkWFuZyBjaOG7iSDEkeG7i25oIG3hu5l0IG5ow6FuaCBtYXN0ZXIga2jDtG5nIGjhu6NwIGzDvSB24bubaSB0w7l5IGNo4buNbiAtLW1pcnJvciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODgKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICJjaOG7iSDEkeG7i25oIG5o4buvbmcgbmjDoW5oIMSR4buDIHRoZW8gZMO1aSBjaOG7iSBo4bujcCBsw70gduG7m2kgY8OhYyDigJxmZXRjaCBtaXJyb3LigJ0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk1IGJ1aWx0aW4vcmVtb3RlLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIm3DoXkgY2jhu6cgJXMgxJHDoyB04buTbiB04bqhaSBy4buTaS4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk5IGJ1aWx0aW4vcmVtb3RlLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBwaOG6o2kgdMOqbiBtw6F5IGNo4bunIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPDoGkgxJHhurd0IG5ow6FuaCBtYXN0ZXIg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgw6FuaCB44bqhIChtYXApIGZldGNoIGNobyDEkeG6t2MgdOG6oyB0aGFtIGNoaeG6v3UgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDUzIGJ1aWx0aW4vcmVtb3RlLmM6NDYxCittc2dpZCAiKG1hdGNoaW5nKSIKK21zZ3N0ciAiKGto4bubcCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDY1Cittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIih4w7NhKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhurd0IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlICVzIGNvbmZpZ3VyYXRpb24gcmVtb3RlLnB1c2hEZWZhdWx0IGluOlxuIgorIlx0JXM6JWRcbiIKKyJub3cgbmFtZXMgdGhlIG5vbi1leGlzdGVudCByZW1vdGUgJyVzJyIKK21zZ3N0ciAiIgorIkPhuqV1IGjDrG5oICVzIHJlbW90ZS5wdXNoRGVmYXVsdCB0cm9uZzpcbiIKKyJcdCVzOiVkXG4iCisiYsOieSBnaeG7nSB0w6puIHRyw6puIG3DoXkgY2jhu6cga2jDtG5nIHThu5NuIHThuqFpICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njg5IGJ1aWx0aW4vcmVtb3RlLmM6ODMyIGJ1aWx0aW4vcmVtb3RlLmM6OTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAnJXMnIgorbXNnc3RyICJLaMO0bmcgY8OzIG3DoXkgY2jhu6cgbsOgbyBuaMawIHbhuq15OiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7lWkgdMOqbiBwaOG6p24gY+G7p2EgY+G6pXUgaMOsbmggdOG7qyDigJwlc+KAnSB0aMOgbmgg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorIktow7RuZyBj4bqtcCBuaOG6rXQg4oCcbm9uLWRlZmF1bHQgZmV0Y2ggcmVzcGVj4oCdXG4iCisiXHQlc1xuIgorIlx0WGluIGjDo3kgY+G6rXAgbmjhuq10IHBo4bqnbiBj4bqldSBow6xuaCBt4buZdCBjw6FjaCB0aOG7pyBjw7RuZyBu4bq/dSB0aOG6pXkgY+G6p24gdGhp4bq/dC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgeMOzYSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB04bqhbyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4NzYKK21zZ2lkICIiCisiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSBpdCwgdXNlOiIKK21zZ2lkX3BsdXJhbCAiIgorIk5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgdGhlbSwgdXNlOiIKK21zZ3N0clswXSAiIgorIkNow7ogw706IE3hu5l0IHPhu5EgbmjDoW5oIG7hurFtIG5nb8OgaSBo4buHIHRo4buRbmcgcmVmcy9yZW1vdGVzLyDEkcOjIGtow7RuZyDEkcaw4bujYyBn4buhIGLhu48gIgorIsSRaTtcbiIKKyLEkeG7gyB4w7NhIMSRaSwgc+G7rSBk4bulbmc6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyBn4buhIGLhu48gcGjhuqduIGPhuqV1IGjDrG5oIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5MworIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiBt4bubaSAobOG6p24gbOG6pXkgduG7gSB0aeG6v3AgdGhlbyBz4bq9IGzGsHUgdHJvbmcgcmVtb3Rlcy8lcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTk2Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiDEkcaw4bujYyB0aGVvIGTDtWkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTk4Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiBjxakgcsOtY2ggKGTDuW5nIOKAnGdpdCByZW1vdGUgcHJ1bmXigJ0gxJHhu4MgZ+G7oSBi4buPKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDAwCittc2dpZCAiID8/PyIKK21zZ3N0ciAiID8/PyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYnJhbmNoLiVzLm1lcmdlOyBjYW5ub3QgcmViYXNlIG9udG8gPiAxIGJyYW5jaCIKK21zZ3N0ciAiYnJhbmNoLiVzLm1lcmdlIGtow7RuZyBo4bujcCBs4buHOyBraMO0bmcgdGjhu4MgY+G6o2kgdOG7lSB24buBIHBow61hID4gMSBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgb250byByZW1vdGUgJXMiCittc2dzdHIgInRo4buxYyBoaeG7h24gcmViYXNlIG3hu5l0IGPDoWNoIHTGsMahbmcgdMOhYyB0csOqbiBtw6F5IGNo4bunICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5ICh3aXRoIG1lcmdlcykgb250byByZW1vdGUgJXMiCittc2dzdHIgIiIKKyJ0aOG7sWMgaGnhu4duIGPhuqNpIHThu5UgKHbhu5tpIGPDoWMgaMOyYSB0cuG7mW4pIG3hu5l0IGPDoWNoIHTGsMahbmcgdMOhYyBsw6puIHRyw6puIG3DoXkgY2jhu6cgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJ0aOG7sWMgaGnhu4duIHJlYmFzZSB0csOqbiBtw6F5IGNo4bunICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiIGjDsmEgdHLhu5luIHbhu5tpIG3DoXkgY2jhu6cgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgImjDsmEgdHLhu5luIHbhu5tpIG3DoXkgY2jhu6cgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlLSpzICAgIGFuZCB3aXRoIHJlbW90ZSAlc1xuIgorbXNnc3RyICIlLSpzICAgIHbDoCB24bubaSBtw6F5IGNo4bunICVzXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEwOAorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAidOG6oW8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTExMQorbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAieMOzYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE1Cittc2dpZCAidXAgdG8gZGF0ZSIKK21zZ3N0ciAixJHDoyBj4bqtcCBuaOG6rXQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTExOAorbXNnaWQgImZhc3QtZm9yd2FyZGFibGUiCittc2dzdHIgImPDsy10aOG7gy1jaHV54buDbi10aeG6v3AtbmhhbmgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyMQorbXNnaWQgImxvY2FsIG91dCBvZiBkYXRlIgorbXNnc3RyICJk4buvIGxp4buHdSBu4buZaSBi4buZIMSRw6MgY8WpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgw6lwIGJ14buZYyB0aMOgbmggJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgxJHhuql5IGzDqm4gdGjDoG5oICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgw6lwIGJ14buZYyB0aMOgbmggJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzOAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIMSR4bqpeSBsw6puIHRow6BuaCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjA2Cittc2dpZCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiCittc2dzdHIgImtow7RuZyB0cnV5IHbhuqVuIGPDoWMgbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqIG3DoXkgY2jhu6cgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiAgVVJMIMSR4buDIGzhuqV5IHbhu4E6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzUgYnVpbHRpbi9yZW1vdGUuYzoxMjUxIGJ1aWx0aW4vcmVtb3RlLmM6MTM5MAorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIoa2jDtG5nIGPDsyBVUkwpIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uICc6JyBzaG91bGQgYWxpZ24KKyMuIHdpdGggdGhlIG9uZSBpbiAiIEZldGNoIFVSTDogJXMiCisjLiB0cmFuc2xhdGlvbi4KKyMuCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDkgYnVpbHRpbi9yZW1vdGUuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUHVzaCAgVVJMOiAlcyIKK21zZ3N0ciAiICBVUkwgxJHhu4MgxJHhuql5IGzDqm46ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTMgYnVpbHRpbi9yZW1vdGUuYzoxMjU1IGJ1aWx0aW4vcmVtb3RlLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICBOaMOhbmggSEVBRDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MworbXNnaWQgIihub3QgcXVlcmllZCkiCittc2dzdHIgIihraMO0bmcgecOqdSBj4bqndSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1NQorbXNnaWQgIih1bmtub3duKSIKK21zZ3N0ciAiKGtow7RuZyBoaeG7g3UpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIKK21zZ3N0ciAiICBuaMOhbmggSEVBRCAoSEVBRCBtw6F5IGNo4bunIGNoxrBhIHLDtSByw6BuZywgY8OzIGzhur0gbMOgIG3hu5l0IHRyb25nIHPhu5Egc2F1KTpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAgTmjhu69uZyBuaMOhbmggdHLDqm4gbcOheSBjaOG7pzolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc0IGJ1aWx0aW4vcmVtb3RlLmM6MTMwMAorbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiICh0cuG6oW5nIHRow6FpIGtow7RuZyDEkcaw4bujYyB5w6p1IGPhuqd1KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgzCittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAgTmjhu69uZyBuaMOhbmggbuG7mWkgYuG7mSDEkcOjIMSRxrDhu6NjIGPhuqV1IGjDrG5oIGNobyBs4buHbmgg4oCcZ2l0IHB1bGzigJ06IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTEKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIgIHJlZnMgbuG7mWkgYuG7mSBz4bq9IMSRxrDhu6NjIHBo4bqjbiBjaGnhur91IGLhu59pIGzhu4duaCDigJxnaXQgcHVzaOKAnSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzBdICIgIE5o4buvbmcgdGhhbSBjaGnhur91IG7hu5lpIGLhu5kgxJHGsOG7o2MgY+G6pXUgaMOsbmggY2hvIGzhu4duaCDigJxnaXQgcHVzaOKAnSVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzE4Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICLEkeG6t3QgcmVmcy9yZW1vdGVzLzx0w6puPi9IRUFEIGNobyBwaMO5IGjhu6NwIHbhu5tpIG3DoXkgY2jhu6ciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyMAorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgInjDs2EgcmVmcy9yZW1vdGVzLzx0w6puPi9IRUFEIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMzUKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIHJlbW90ZSBIRUFEIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgeMOhYyDEkeG7i25oIMSRxrDhu6NjIEhFQUQgbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzM3Cittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIk5oaeG7gXUgbmjDoW5oIEhFQUQgbcOheSBjaOG7py4gSMOjeSBjaOG7jW4gcsO1IHLDoG5nIG3hu5l0OiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyB4w7NhIGLhu48gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICJLaMO0bmcgcGjhuqNpIGzDoCB0aGFtIGNoaeG6v3UgaOG7o3AgbOG7hzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBjw6BpIMSR4bq3dCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyBz4bq9IHRy4bufIHRow6BuaCBraMO0bmcgxJHhuqd1IChraMO0bmcgxJHGsOG7o2MgcXXhuqNuIGzDvSkhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMgxJHDoyB0cuG7nyB0aMOgbmgga2jDtG5nIMSR4bqndSAoa2jDtG5nIMSRxrDhu6NjIHF14bqjbiBsw70pISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgIsSQYW5nIHjDqW4gYuG7m3QgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM4NworIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICJVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3dvdWxkIHBydW5lXSAlcyIKK21zZ3N0ciAiICogW27Dqm4geMOpbiBi4bubdF0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQwNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiICogW8SRw6MgYuG7iyB4w6luXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDUxCittc2dpZCAicHJ1bmUgcmVtb3RlcyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiY+G6r3QgbcOheSBjaOG7pyBzYXUga2hpIGzhuqV5IHbhu4EiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUxNCBidWlsdGluL3JlbW90ZS5jOjE1NjggYnVpbHRpbi9yZW1vdGUuYzoxNjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIktow7RuZyBjw7MgbcOheSBjaOG7pyBuw6BvIGPDsyB0w6puIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzAKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICJ0aMOqbSBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNworbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgImNoxrBhIGNo4buJIHJhIG3DoXkgY2jhu6cgbsOgbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTU0Cittc2dpZCAicXVlcnkgcHVzaCBVUkxzIHJhdGhlciB0aGFuIGZldGNoIFVSTHMiCittc2dzdHIgInRydXkgduG6pW4gxJHhuql5IFVSTCB0aGF5IHbDrCBs4bqleSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTU2Cittc2dpZCAicmV0dXJuIGFsbCBVUkxzIgorbXNnc3RyICJ0cuG6oyB24buBIG3hu41pIFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIFVSTHMgY29uZmlndXJlZCBmb3IgcmVtb3RlICclcyciCittc2dzdHIgImtow7RuZyBjw7MgVVJMIG7DoG8gxJHGsOG7o2MgY+G6pXUgaMOsbmggY2hvIG5ow6FuaCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjEwCittc2dpZCAibWFuaXB1bGF0ZSBwdXNoIFVSTHMiCittc2dzdHIgIsSR4bqpeSBjw6FjIOKAnFVSTOKAnSBi4bqxbmcgdGF5IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MTIKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICJ0aMOqbSBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxNAorbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICJ4w7NhIFVSTHMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYyMQorbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1hZGQgLS1kZWxldGUga2jDtG5nIGjhu6NwIGzDvSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2xkIFVSTCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiS2nhu4N1IG3huqt1IFVSTCBjxakga2jDtG5nIGjhu6NwIGzhu4c6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgVVJMIG5oxrAgduG6rXk6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NzAKK21zZ2lkICJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiCittc2dzdHIgIlPhur0ga2jDtG5nIHjDs2Egbmjhu69uZyDEkeG7i2EgY2jhu4kgVVJMIGtow7RuZy1wdXNoIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIzCittc2dpZCAiZ2l0IHJlcGFjayBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHJlcGFjayBbPGPDoWMgdMO5eSBjaOG7jW4+XSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOAorbXNnaWQgIiIKKyJJbmNyZW1lbnRhbCByZXBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBiaXRtYXAgaW5kZXhlcy4gIFVzZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9yIGRpc2FibGUgdGhlIHBhY2sud3JpdGViaXRtYXBzIGNvbmZpZ3VyYXRpb24uIgorbXNnc3RyICIiCisiR2lhIHTEg25nIHJlcGFjayBsw6Aga2jDtG5nIHTGsMahbmcgdGjDrWNoIHbhu5tpIGNo4buJIG3hu6VjIGJpdG1hcC4gRMO5bmdcbiIKKyItLW5vLXdyaXRlLWJpdG1hcC1pbmRleCBoYXkgdOG6r3QgY+G6pXUgaMOsbmggcGFjay53cml0ZWJpdG1hcHMuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE5MQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4MgbOG6pXkgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiBwYWNrLW9iamVjdHMgxJHhu4MgbcOgIMSRw7NuZyBnw7NpIGzhuqFpIGPDoWMgxJHhu5FpICIKKyJ0xrDhu6NuZyBo4bupYSBo4bq5biIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMzAgYnVpbHRpbi9yZXBhY2suYzo0MTYKK21zZ2lkICJyZXBhY2s6IEV4cGVjdGluZyBmdWxsIGhleCBvYmplY3QgSUQgbGluZXMgb25seSBmcm9tIHBhY2stb2JqZWN0cy4iCittc2dzdHIgIiIKKyJyZXBhY2s6IMSQYW5nIGNo4buJIGPhuqduIGPDoWMgZMOybmcgSUQgxJHhu5FpIHTGsOG7o25nIGThuqFuZyB0aOG6rXAgbOG7pWMgcGjDom4gxJHhuqd5IGThu6cgdOG7qyBwYWNrLSIKKyJvYmplY3RzLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyNTQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGhvw6BuIHThuqV0IHBhY2stb2JqZWN0cyDEkeG7gyDEkcOzbmcgZ8OzaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBo4bupYSBo4bq5biIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTIKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAixJHDs25nIGfDs2kgbeG7jWkgdGjhu6kgdHJvbmcgbeG7mXQgZ8OzaSDEkcahbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTQKK21zZ2lkICJzYW1lIGFzIC1hLCBhbmQgdHVybiB1bnJlYWNoYWJsZSBvYmplY3RzIGxvb3NlIgorbXNnc3RyICJnaeG7kW5nIHbhu5tpIC1hLCB2w6AgY2jhu4luaCBz4butYSBjw6FjIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgxJHhu41jIMSRxrDhu6NjIHRoaeG6v3Ugc8OzdCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTcKK21zZ2lkICJyZW1vdmUgcmVkdW5kYW50IHBhY2tzLCBhbmQgcnVuIGdpdC1wcnVuZS1wYWNrZWQiCittc2dzdHIgInjDs2EgYuG7jyBjw6FjIGfDs2kgZMawIHRo4burYSwgdsOgIGNo4bqheSBnaXQtcHJ1bmUtcGFja2VkIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5OQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJjaHV54buDbiAtLW5vLXJldXNlLWRlbHRhIGNobyBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwMQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1vYmplY3QgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiY2h1eeG7g24gLS1uby1yZXVzZS1vYmplY3QgY2hvIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzAzCittc2dpZCAiZG8gbm90IHJ1biBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorbXNnc3RyICJraMO0bmcgY2jhuqF5IGdpdC11cGRhdGUtc2VydmVyLWluZm8iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA2Cittc2dpZCAicGFzcyAtLWxvY2FsIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgImNodXnhu4NuIC0tbG9jYWwgY2hvIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA4Cittc2dpZCAid3JpdGUgYml0bWFwIGluZGV4IgorbXNnc3RyICJnaGkgbeG7pWMgbOG7pWMgw6FuaCB44bqhIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMAorbXNnaWQgInBhc3MgLS1kZWx0YS1pc2xhbmRzIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgImNodXnhu4NuIC0tZGVsdGEtaXNsYW5kcyBjaG8gZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTEKK21zZ2lkICJhcHByb3hpZGF0ZSIKK21zZ3N0ciAibmfDoHkgxrDhu5tjIHTDrW5oIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMgorbXNnaWQgIndpdGggLUEsIGRvIG5vdCBsb29zZW4gb2JqZWN0cyBvbGRlciB0aGFuIHRoaXMiCittc2dzdHIgInbhu5tpIC1BLCBjw6FjIMSR4buRaSB0xrDhu6NuZyBjxakgaMahbiBraG/huqNuZyB0aOG7nWkgZ2lhbiBuw6B5IHRow6wga2jDtG5nIGLhu4sgbeG6pXQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE0Cittc2dpZCAid2l0aCAtYSwgcmVwYWNrIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgInbhu5tpIC1hLCDEkcOzbmcgZ8OzaSBs4bqhaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgdGjhu4MgxJHhu41jIMSRxrDhu6NjIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNgorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAia8OtY2ggdGjGsOG7m2MgY+G7rWEgc+G7lSDEkcaw4bujYyBkw7luZyBjaG8gbsOpbiDigJxkZWx0YeKAnSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTcgYnVpbHRpbi9yZXBhY2suYzozMjMKK21zZ2lkICJieXRlcyIKK21zZ3N0ciAiYnl0ZSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTgKK21zZ2lkICJzYW1lIGFzIHRoZSBhYm92ZSwgYnV0IGxpbWl0IG1lbW9yeSBzaXplIGluc3RlYWQgb2YgZW50cmllcyBjb3VudCIKK21zZ3N0ciAiZ2nhu5FuZyBuaMawIHRyw6puLCBuaMawbmcgZ2nhu5tpIGjhuqFuIGvDrWNoIHRoxrDhu5tjIGLhu5kgbmjhu5sgaGF5IHbDrCBz4buRIGzGsOG7o25nIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMAorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBkZWx0YSBkZXB0aCIKK21zZ3N0ciAiZ2nhu5tpIGjhuqFuIMSR4buZIHPDonUgdOG7kWkgxJFhIGPhu6dhIOKAnGRlbHRh4oCdIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMgorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyIKK21zZ3N0ciAiZ2nhu5tpIGjhuqFuIHPhu5EgbMaw4bujbmcgdOG7kWkgxJFhIHR1eeG6v24gdHLDrG5oIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICJrw61jaCB0aMaw4bubYyB04buRaSDEkWEgY2hvIHThu6tuZyB04bqtcCB0aW4gZ8OzaSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjYKK21zZ2lkICJyZXBhY2sgb2JqZWN0cyBpbiBwYWNrcyBtYXJrZWQgd2l0aCAua2VlcCIKK21zZ3N0ciAixJHDs25nIGfDs2kgbOG6oWkgY8OhYyDEkeG7kWkgdMaw4bujbmcgdHJvbmcgY8OhYyBnw7NpIMSRw6MgxJHDoW5oIGThuqV1IGLhurFuZyAua2VlcCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjgKK21zZ2lkICJkbyBub3QgcmVwYWNrIHRoaXMgcGFjayIKK21zZ3N0ciAixJHhu6tuZyDEkcOzbmcgZ8OzaSBs4bqhaSBnw7NpIG7DoHkiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzM4Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBwYWNrcyBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHjDs2EgY8OhYyBnw7NpIHRyb25nIG3hu5l0IGtobyDEkeG7kWlfdMaw4bujbmdfdsSpX8SR4bqhaSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozNDIKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC1BIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSB2w6AgLUEgeHVuZyBraOG6r2MgbmhhdSIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0MjUKK21zZ2lkICJOb3RoaW5nIG5ldyB0byBwYWNrLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBnw6wgbeG7m2kgxJHhu4MgbcOgIMSRw7NuZyBnw7NpLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFNvbWUgcGFja3MgaW4gdXNlIGhhdmUgYmVlbiByZW5hbWVkIGJ5XG4iCisiV0FSTklORzogcHJlZml4aW5nIG9sZC0gdG8gdGhlaXIgbmFtZSwgaW4gb3JkZXIgdG9cbiIKKyJXQVJOSU5HOiByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlXG4iCisiV0FSTklORzogZmlsZS4gIEJ1dCB0aGUgb3BlcmF0aW9uIGZhaWxlZCwgYW5kIHRoZVxuIgorIldBUk5JTkc6IGF0dGVtcHQgdG8gcmVuYW1lIHRoZW0gYmFjayB0byB0aGVpclxuIgorIldBUk5JTkc6IG9yaWdpbmFsIG5hbWVzIGFsc28gZmFpbGVkLlxuIgorIldBUk5JTkc6IFBsZWFzZSByZW5hbWUgdGhlbSBpbiAlcyBtYW51YWxseTpcbiIKK21zZ3N0ciAiIgorIkPhuqJOSCBCw4FPOiBN4buZdCBz4buRIGfDs2kgxJFhbmcgZMO5bmcgduG7q2EgxJHGsOG7o2MgxJHhu5VpIHTDqm4gYuG6sW5nIGPDoWNoXG4iCisiQ+G6ok5IIELDgU86IMSRw6FuaCB0aeG7gW4gdOG7kSBvbGQtIHbDoG8gdMOqbiBj4bunYSBjaMO6bmcsIG3hu6VjIMSRw61jaCBsw6BcbiIKKyJD4bqiTkggQsOBTzogdGhheSBjaMO6bmcgYuG6sW5nIHBoacOqbiBi4bqjbiBt4bubaSBj4bunYSB04bqtcFxuIgorIkPhuqJOSCBCw4FPOiB0aW4uIE5oxrBuZyB0aGFvIHTDoWMgbOG6oWkgZ+G6t3AgbOG7l2ksIHbDoCBu4buXXG4iCisiQ+G6ok5IIELDgU86IGzhu7FjIMSR4buDIMSR4buVaSBuZ8aw4bujYyBs4bqhaSB0w6puIGNow7puZyBjaG8gxJHDum5nIHbhu5tpIHTDqm5cbiIKKyJD4bqiTkggQsOBTzogbmd1ecOqbiBn4buRYyBj4bunYSBuw7MgY8WpbmcgZ+G6t3AgbOG7l2kuXG4iCisiQ+G6ok5IIELDgU86IFZ1aSBsw7JuZyDEkeG7lWkgdMOqbiBjaMO6bmcgdHJvbmcgJXMgYuG6sW5nIHRheTpcbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgZ+G7oSBi4buPIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMgorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gPG9iamVjdD4gPHJlcGxhY2VtZW50PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSA8xJHhu5FpLXTGsOG7o25nPiA8dGhheS10aOG6vz4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDzEkeG7kWkgdMaw4bujbmc+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNAorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGzhuqduX2NodXnhu4NuX2dpYW8+IFs8Y2hhX23hurk+4oCmXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjUKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tY29udmVydC1ncmFmdC1maWxlIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tY29udmVydC1ncmFmdC1maWxlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNgorbXNnaWQgImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgcmVwbGFjZSAtZCA8xJHhu5FpIHTGsOG7o25nPuKApiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcKK21zZ2lkICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFstbCBbPHBhdHRlcm4+XV0iCittc2dzdHIgImdpdCByZXBsYWNlIFstLWZvcm1hdD08xJHhu4tuaF9k4bqhbmc+XSBbLWwgWzxt4bqrdT5dXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgcmVwbGFjZSBmb3JtYXQgJyVzJ1xuIgorInZhbGlkIGZvcm1hdHMgYXJlICdzaG9ydCcsICdtZWRpdW0nIGFuZCAnbG9uZyciCittc2dzdHIgIiIKKyLEkeG7i25oIGThuqFuZyB0aGF5IHRo4bq/IGtow7RuZyBo4bujcCBs4buHIOKAnCVz4oCdXG4iCisixJHhu4tuaCBk4bqhbmcgaOG7o3AgbOG7hyBsw6Ag4oCcc2hvcnTigJ0sIOKAnG1lZGl1beKAnSB2w6Ag4oCcbG9uZ+KAnSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgcmVmICclcycgbm90IGZvdW5kIgorbXNnc3RyICJraMO0bmcgdMOsbSB0aOG6pXkgdGhhbSBjaGnhur91IHRoYXkgdGjhur8g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlcGxhY2UgcmVmICclcyciCittc2dzdHIgIsSQw6MgeMOzYSB0aGFtIGNoaeG6v3UgdGhheSB0aOG6vyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVmIG5hbWUiCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBwaOG6o2kgdMOqbiB0aGFtIGNoaeG6v3UgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgcmVmICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgInRoYW0gY2hp4bq/dSB0aGF5IHRo4bq/IOKAnCVz4oCdIMSRw6MgdOG7k24gdOG6oWkgcuG7k2kiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4iCisiJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlZCBvYmplY3Qgb2YgdHlwZSAnJXMnXG4iCisid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgdHlwZSAnJXMnLiIKK21zZ3N0ciAiIgorIkPDoWMgxJHhu5FpIHTGsOG7o25nIHBo4bqjaSBjw7luZyBraeG7g3UuXG4iCisi4oCcJXPigJ0gY2jhu4kgxJHhur9uIMSR4buRaSB0xrDhu6NuZyB0aGF5IHRo4bq/IGPhu6dhIGtp4buDdSDigJwlc+KAnVxuIgorInRyb25nIGtoaSDigJwlc+KAnSBjaOG7iSDEkeG6v24gxJHhu5FpIHTGsOG7o25nIHRoYW0gY2hp4bq/dSBj4bunYSBraeG7g3Ug4oCcJXPigJ0uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIOKAnCVz4oCdIMSR4buDIGdoaSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQyCittc2dpZCAiY2F0LWZpbGUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAiY2F0LWZpbGUgxJHDoyBiw6FvIGPDoW8gZ+G6t3AgbOG7l2kgbmdoacOqbSB0cuG7jW5nIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIOKAnCVz4oCdIMSR4buDIMSR4buNYyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcyCittc2dpZCAidW5hYmxlIHRvIHNwYXduIG1rdHJlZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHNpbmggdGnhur9uIHRyw6xuaCBjb24gbWt0cmVlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNzYKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIG1rdHJlZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyB04burIG1rdHJlZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjg1Cittc2dpZCAibWt0cmVlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgIm1rdHJlZSDEkcOjIGLDoW8gY8OhbyBn4bq3cCBs4buXaSBuZ2hpw6ptIHRy4buNbmciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4OQorbXNnaWQgIm1rdHJlZSBkaWQgbm90IHJldHVybiBhbiBvYmplY3QgbmFtZSIKK21zZ3N0ciAibWt0cmVlIMSRw6Mga2jDtG5nIHRy4bqjIHbhu4EgbeG7mXQgdMOqbiDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZnN0YXQgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBmc3RhdCAlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzAzCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG9iamVjdCB0byBkYXRhYmFzZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSDEkeG7kWkgdMaw4bujbmcgdsOgbyBjxqEgc+G7nyBk4buvIGxp4buHdSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzIyIGJ1aWx0aW4vcmVwbGFjZS5jOjM3OCBidWlsdGluL3JlcGxhY2UuYzo0MjQKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIKK21zZ3N0ciAia2jDtG5nIHBo4bqjaSBsw6AgdMOqbiDEkeG7kWkgdMaw4bujbmcgaOG7o3AgbOG7hzog4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IG9iamVjdCB0eXBlIGZvciAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IGtp4buDdSDEkeG7kWkgdMaw4bujbmcgY2hvICVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNDIKK21zZ2lkICJlZGl0aW5nIG9iamVjdCBmaWxlIGZhaWxlZCIKK21zZ3N0ciAidmnhu4djIHPhu61hIHThuq1wIHRpbiDEkeG7kWkgdMaw4bujbmcgZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgbeG7m2kgbMOgIGdp4buRbmcgduG7m2kgY8OhaSBjxak6IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIGFzIGEgY29tbWl0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggJXMgbmjGsCBsw6AgbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAidGjhursgaMOyYSB0cuG7mW4gc2FpIHRyb25nIGzhuqduIGNodXnhu4NuIGdpYW8g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgInRo4bq7IGjDsmEgdHLhu5luIGtow7RuZyDEkcO6bmcgZOG6oW5nIOG7nyBs4bqnbiBjaHV54buDbiBnaWFvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9yaWdpbmFsIGNvbW1pdCAnJXMnIGNvbnRhaW5zIG1lcmdldGFnICclcycgdGhhdCBpcyBkaXNjYXJkZWQ7IHVzZSAtLWVkaXQgIgorImluc3RlYWQgb2YgLS1ncmFmdCIKK21zZ3N0ciAiIgorImzhuqduIGNodXnhu4NuIGdpYW8gZ+G7kWMg4oCcJXPigJ0gY8OzIGNo4bupYSB0aOG6uyBow7JhIHRy4buZbiDigJwlc+KAnSBjw6FpIG3DoCBi4buLIGxv4bqhaSBi4buPOyBkw7luZyAiCisidMO5eSBjaOG7jW4gLS1lZGl0IHRoYXkgY2hvIC0tZ3JhZnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgb3JpZ2luYWwgY29tbWl0ICclcycgaGFzIGEgZ3BnIHNpZ25hdHVyZSIKK21zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyBn4buRYyDigJwlc+KAnSBjw7MgY2jhu68ga8O9IEdQRyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDcwCittc2dpZCAidGhlIHNpZ25hdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHJlcGxhY2VtZW50IGNvbW1pdCEiCittc2dzdHIgImNo4buvIGvDvSBz4bq9IMSRxrDhu6NjIGLhu48gxJFpIHRyb25nIGzhuqduIGNodXnhu4NuIGdpYW8gdGhheSB0aOG6vyEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSBs4bqnbiBjaHV54buDbiBnaWFvIHRoYXkgdGjhur8gY2hvOiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImdyYWZ0IGZvciAnJXMnIHVubmVjZXNzYXJ5IgorbXNnc3RyICJncmFmdCBjaG8g4oCcJXPigJ0ga2jDtG5nIGPhuqduIHRoaeG6v3QiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgY29tbWl0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICJs4bqnbiBjaHV54buDbiBnaWFvIG3hu5tpIGzDoCBnaeG7kW5nIHbhu5tpIGPDoWkgY8WpOiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY29udmVydCB0aGUgZm9sbG93aW5nIGdyYWZ0KHMpOlxuIgorIiVzIgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIGNodXnhu4NuIMSR4buVaSBjw6FjIGdyYWZ0IHNhdSDEkcOieTpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ4Cittc2dpZCAibGlzdCByZXBsYWNlIHJlZnMiCittc2dzdHIgImxp4buHdCBrw6ogY8OhYyByZWZzIHRoYXkgdGjhur8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0OQorbXNnaWQgImRlbGV0ZSByZXBsYWNlIHJlZnMiCittc2dzdHIgInjDs2EgdGhhbSBjaGnhur91IHRoYXkgdGjhur8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MAorbXNnaWQgImVkaXQgZXhpc3Rpbmcgb2JqZWN0IgorbXNnc3RyICJz4butYSDEkeG7kWkgdMaw4bujbmcgc+G6tW4gY8OzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTEKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICJ0aGF5IMSR4buVaSBjaGEgbeG6uSBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTIKK21zZ2lkICJjb252ZXJ0IGV4aXN0aW5nIGdyYWZ0IGZpbGUiCittc2dzdHIgImNodXnhu4NuIMSR4buVaSBjw6FjIHThuq1wIHRpbiBncmFmdCBz4bq1biBjw7MiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MworbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgInRoYXkgdGjhur8gdGhhbSBjaGnhur91IG7hur91IG7DsyDEkcOjIHPhurVuIGPDsyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU1Cittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICLEkeG7q25nIGluIMSR4bq5cCBjw6FjIG7hu5lpIGR1bmcgY2hvIC0tZWRpdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU2Cittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICJkw7luZyDEkeG7i25oIGThuqFuZyBuw6B5IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NjkKK21zZ2lkICItLWZvcm1hdCBjYW5ub3QgYmUgdXNlZCB3aGVuIG5vdCBsaXN0aW5nIgorbXNnc3RyICItLWZvcm1hdCBraMO0bmcgdGjhu4MgxJHGsOG7o2MgZMO5bmcga2hpIGtow7RuZyBsaeG7h3Qga8OqIGfDrCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTc3Cittc2dpZCAiLWYgb25seSBtYWtlcyBzZW5zZSB3aGVuIHdyaXRpbmcgYSByZXBsYWNlbWVudCIKK21zZ3N0ciAiLWYgY2jhu4kgaOG7o3AgbMO9IGtoaSBnaGkgbeG7mXQgY8OhaSB0aGF5IHRo4bq/IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODEKK21zZ2lkICItLXJhdyBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1lZGl0IgorbXNnc3RyICItLXJhdyBjaOG7iSBo4bujcCBsw70gduG7m2kgLS1lZGl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODcKK21zZ2lkICItZCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1kIGPhuqduIMOtdCBuaOG6pXQgbeG7mXQgdGhhbSBz4buRIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1OTMKK21zZ2lkICJiYWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAic+G7kSDEkeG7kWkgc+G7kSBraMO0bmcgxJHDum5nIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1OTkKK21zZ2lkICItZSBuZWVkcyBleGFjdGx5IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWUgY+G6p24gY2jDrW5oIGPDoWMgbMOgIG3hu5l0IMSR4buRaSBz4buRIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MDUKK21zZ2lkICItZyBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1xIGPhuqduIMOtdCBuaOG6pXQgbeG7mXQgdGhhbSBz4buRIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTEKK21zZ2lkICItLWNvbnZlcnQtZ3JhZnQtZmlsZSB0YWtlcyBubyBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUga2jDtG5nIG5o4bqtbiDEkeG7kWkgc+G7kSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjE3Cittc2dpZCAib25seSBvbmUgcGF0dGVybiBjYW4gYmUgZ2l2ZW4gd2l0aCAtbCIKK21zZ3N0ciAiY2jhu4kgbeG7mXQgbeG6q3UgxJHGsOG7o2MgY2jhu4kgcmEgduG7m2kgdMO5eSBjaOG7jW4gLWwiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTMKK21zZ2lkICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorbXNnc3RyICIiCisiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPMSRxrDhu51uZyBk4bqrbj7igKYgfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjYwCittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgInPhu5UgZ2hpIGThu41uIHPhuqFjaCBjw6FjIHBow6JuIGdp4bqjaSB0cm9uZyBi4bqjbiBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo3OQorbXNnaWQgIidnaXQgcmVyZXJlIGZvcmdldCcgd2l0aG91dCBwYXRocyBpcyBkZXByZWNhdGVkIgorbXNnc3RyICLigJxnaXQgcmVyZXJlIGZvcmdldOKAnSBtw6Aga2jDtG5nIGPDsyBjw6FjIMSRxrDhu51uZyBk4bqrbiBsw6AgxJHDoyBs4bqhYyBo4bqtdSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgZm9yICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyBraMOhYyBiaeG7h3QgY2hvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8xJHhurdjL3ThuqMvxJHGsOG7nW5nL2ThuqtuPi4uLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAiIgorImdpdCByZXNldCBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs8dHJlZS1pc2g+XSIKK21zZ3N0ciAiIgorImdpdCByZXNldCBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs8dHJlZS1pc2g+XSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1Cittc2dpZCAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRoc3BlYz4uLi5dIgorbXNnc3RyICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPMSR4bq3Yy904bqjL8SRxrDhu51uZy9k4bqrbj4uLi5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAicGhhIHRy4buZbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAic29mdCIKK21zZ3N0ciAibeG7gW0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImhhcmQiCittc2dzdHIgImPhu6luZyIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWVyZ2UiCittc2dzdHIgImjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJrZWVwIgorbXNnc3RyICJnaeG7ryBs4bqhaSIKKworIzogYnVpbHRpbi9yZXNldC5jOjgyCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIkLhuqFuIGtow7RuZyBjw7MgSEVBRCBuw6BvIGjhu6NwIGzhu4cuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdMOsbSBjw6J5IGPhu6dhIEhFQUQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB0w6xtIGPDonkgY+G7p2EgJXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJIRUFEIGhp4buHbiBnaeG7nSB04bqhaSAlcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiBt4buZdCAlcyByZXNldCDhu58gZ2nhu69hIGPhu6dhIHF1w6EgdHLDrG5oIGjDsmEgdHLhu5luLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NCBidWlsdGluL3N0YXNoLmM6NTIwIGJ1aWx0aW4vc3Rhc2guYzo1OTUKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MTkKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICJsw6BtIHZp4buHYyDhu58gY2jhur8gxJHhu5kgaW0gbOG6t25nLCBjaOG7iSBoaeG7g24gdGjhu4sga2hpIGPDsyBs4buXaSIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NgorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICLEkeG6t3QgbOG6oWkgKHJlc2V0KSBIRUFEIHbDoCBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTcKK21zZ2lkICJyZXNldCBvbmx5IEhFQUQiCittc2dzdHIgImNo4buJIMSR4bq3dCBs4bqhaSAocmVzZXQpIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTkgYnVpbHRpbi9yZXNldC5jOjMwMQorbXNnaWQgInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiCittc2dzdHIgIsSR4bq3dCBs4bqhaSBIRUFELCBi4bqjbmcgbeG7pWMgbOG7pWMgdsOgIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDMKK21zZ2lkICJyZXNldCBIRUFEIGJ1dCBrZWVwIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIsSR4bq3dCBs4bqhaSBIRUFEIG5oxrBuZyBnaeG7ryBs4bqhaSBjw6FjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDkKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAiY2jhu4kgZ2hpIGzhuqFpIG5o4buvbmcgxJHGsOG7nW5nIGThuqtuIHRo4buxYyBz4buxIHPhur0gxJHGsOG7o2MgdGjDqm0gdsOgbyBzYXUgbsOgeSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmV2aXNpb24uIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgcGjDom4gZ2nhuqNpIOKAnCVz4oCdIG5oxrAgbMOgIMSRaeG7g20geMOpdCBkdXnhu4d0IGjhu6NwIGzhu4cuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCB0cmVlLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHBow6JuIGdp4bqjaSDigJwlc+KAnSBuaMawIGzDoCBt4buZdCBjw6J5ICh0cmVlKSBo4bujcCBs4buHLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM2MAorbXNnaWQgIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggLS17aGFyZCxtaXhlZCxzb2Z0fSIKK21zZ3N0ciAiLS1wYXRjaCB4dW5nIGto4bqvYyB24bubaSAtLXtoYXJkLG1peGVkLHNvZnR9IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcwCittc2dpZCAiLS1taXhlZCB3aXRoIHBhdGhzIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnZ2l0IHJlc2V0IC0tIDxwYXRocz4nIGluc3RlYWQuIgorbXNnc3RyICIiCisiLS1taXhlZCB24bubaSBjw6FjIMSRxrDhu51uZyBk4bqrbiBraMO0bmcgY8OybiBkw7luZyBu4buvYTsgaMOjeSB0aGF5IHRo4bq/IGLhurFuZyBs4buHbmgg4oCcZ2l0ICIKKyJyZXNldCAtLSA8L2PDoWMvxJHGsOG7nW5nL2ThuqtuPuKAnS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiBs4buHbmggJXMgcmVzZXQgduG7m2kgY8OhYyDEkcaw4budbmcgZOG6q24uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICIlcyByZXNldCBraMO0bmcgxJHGsOG7o2MgcGjDqXAgdHLDqm4ga2hvIHRodeG6p24iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozOTEKK21zZ2lkICItTiBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1taXhlZCIKK21zZ3N0ciAiLU4gY2jhu4kgxJHGsOG7o2MgZMO5bmcga2hpIGPDsyAtLW1peGVkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIk5o4buvbmcgdGhheSDEkeG7lWkgxJHGsOG7o2MgxJHGsGEgcmEga2jhu49pIGLhu4cgcGjDs25nIHNhdSBraGkgcmVzZXQ6IgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldC4gIFlvdSBjYW5cbiIKKyJ1c2UgJy0tcXVpZXQnIHRvIGF2b2lkIHRoaXMuICBTZXQgdGhlIGNvbmZpZyBzZXR0aW5nIHJlc2V0LnF1aWV0IHRvIHRydWVcbiIKKyJ0byBtYWtlIHRoaXMgdGhlIGRlZmF1bHQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJD4bqnbiAlLjJmIGdpw6J5IMSR4buDIGtp4buDbSDEkeG6v20gY8OhYyB0aGF5IMSR4buVaSBjaMawYSDEkcawYSBsw6puIGLhu4cgcGjDs25nIHNhdSBraGkgxJHhurd0ICIKKyJs4bqhaS5cbiIKKyJC4bqhbiBjw7MgdGjhu4Mgc+G7rSBk4bulbmcgxJHhu4MgdHLDoW5oIHZp4buHYyBuw6B5LiDEkOG6t3QgcmVzZXQucXVpZXQgdGjDoG5oIHRydWUgdHJvbmdcbiIKKyJjw6BpIMSR4bq3dCBjb25maWcgbuG6v3UgYuG6oW4gbXXhu5FuIHRo4buxYyBoaeG7h24gbsOzIG5oxrAgbMOgIG3hurdjIMSR4buLbmguXG4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG6t3QgbOG6oWkgKHJlc2V0KSBi4bqjbmcgbeG7pWMgbOG7pWMgdGjDoG5oIMSRaeG7g20geMOpdCBkdXnhu4d0IOKAnCVz4oCdLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyOQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgdOG6rXAgdGluIGzGsHUgYuG6o25nIG3hu6VjIGzhu6VjIG3hu5tpLiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ5OQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGFuZCAtLW1pc3NpbmciCittc2dzdHIgImtow7RuZyB0aOG7gyB04buVIGjhu6NwIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIHbDoCAtLW1pc3NpbmciCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1NjAKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIHJlcXVpcmVzIC0tb2JqZWN0cyIKK21zZ3N0ciAibOG7jWMgxJHhu5FpIHTGsOG7o25nIHnDqnUgY+G6p3UgLS1vYmplY3RzIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NjEwCittc2dpZCAicmV2LWxpc3QgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5IG9mIG5vdGVzIgorbXNnc3RyICJyZXYtbGlzdCBraMO0bmcgaOG7lyB0cuG7oyBoaeG7g24gdGjhu4sgY8OhYyBnaGkgY2jDuiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjYxNQorbXNnaWQgIm1hcmtlZCBjb3VudGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW9iamVjdHMiCittc2dzdHIgIsSRxrDhu6NjIMSRw6FuaCBk4bqldSDEkeG6v20gbMOgIHh1bmcga2jhuq9jIHbhu5tpIC0tb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MDgKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPGPDoWMgdMO5eSBjaOG7jW4+XSAtLSBbPGPDoWMgdGhhbSBz4buRPuKApl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDEzCittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICJnaeG7ryBs4bqhaSDigJwtLeKAnSBjaHV54buDbiBzYW5nIGzDoG0gdGhhbSBz4buRIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxNQorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAiZOG7q25nIHBow6JuIHTDrWNoIHNhdSDEkeG7kWkgc+G7kSDEkeG6p3UgdGnDqm4ga2jDtG5nIGPDsyB0w7l5IGNo4buNbiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTgKK21zZ2lkICJvdXRwdXQgaW4gc3R1Y2sgbG9uZyBmb3JtIgorbXNnc3RyICJr4bq/dCB4deG6pXQgdHJvbmcgxJHhu4tuaCBk4bqhbmcgZ+G6rXkgZMOgaSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1NTEKK21zZ2lkICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxjw6FjIHTDuXkgY2jhu41uPl0gLS0gWzxjw6FjIMSR4buRaSBz4buRPuKApl1cbiIKKyIgICBob+G6t2M6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPMSRLnPhu5E+4oCmXVxuIgorIiAgIGhv4bq3YzogZ2l0IHJldi1wYXJzZSBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbPMSRLnPhu5E+4oCmXVxuIgorIlxuIgorIkNo4bqheSBs4buHbmggXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiDEkeG7gyBjw7MgdGjDqm0gdGjDtG5nIHRpbiB24buBIGPDoWNoIGTDuW5nLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNAorbXNnaWQgImdpdCByZXZlcnQgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgcmV2ZXJ0IFs8Y8OhYyB0w7l5IGNo4buNbj5dIDxjb21taXQtaXNoPuKApiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNQorbXNnaWQgImdpdCByZXZlcnQgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgcmV2ZXJ0IDxs4buHbmgtY29uPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMAorbXNnaWQgImdpdCBjaGVycnktcGljayBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCBjaGVycnktcGljayBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8Y29tbWl0LWlzaD7igKYiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzEKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPGzhu4duaC1jb24+IgorCisjOiBidWlsdGluL3JldmVydC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8iCittc2dzdHIgInTDuXkgY2jhu41uIOKAnCVz4oCdIGPhuqduIG3hu5l0IGdpw6EgdHLhu4sgYuG6sW5nIHPhu5EgbOG7m24gaMahbiBraMO0bmciCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzOiAlcyBraMO0bmcgdGjhu4MgxJHGsOG7o2Mgc+G7rSBk4bulbmcgduG7m2kgJXMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAyCittc2dpZCAiZW5kIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAia+G6v3QgdGjDumMgY2hlcnJ5LXBpY2sgaGF5IGhvw6BuIG5ndXnDqm4gbGnDqm4gdGnhur9wIG5oYXUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAicGjhu6VjIGjhu5NpIGzhuqFpIGNoZXJyeS1waWNrIGhheSBob8OgbiBuZ3V5w6puIGxpw6puIHRp4bq/cCBuaGF1IgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImtow7RuZyBjaGVycnktcGljayBoYXkgaG/DoG4gbmd1ecOqbiBsacOqbiB0aeG6v3AgbmhhdSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJza2lwIGN1cnJlbnQgY29tbWl0IGFuZCBjb250aW51ZSIKK21zZ3N0ciAiYuG7jyBxdWEgbOG6p24gY2h1eeG7g24gZ2lhbyBoaeG7h24gdOG6oWkgdsOgIHRp4bq/cCB04bulYyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDcKK21zZ2lkICJkb24ndCBhdXRvbWF0aWNhbGx5IGNvbW1pdCIKK21zZ3N0ciAixJHhu6tuZyBjaHV54buDbiBnaWFvIG3hu5l0IGPDoWNoIHThu7EgxJHhu5luZyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDgKK21zZ2lkICJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAic+G7rWEgbOG6oWkgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTExCittc2dpZCAicGFyZW50LW51bWJlciIKK21zZ3N0ciAic+G7kS1jaGEtbeG6uSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJzZWxlY3QgbWFpbmxpbmUgcGFyZW50IgorbXNnc3RyICJjaOG7jW4gY2hhIG3hurkgbHXhu5NuZyBjaMOtbmgiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgImNoaeG6v24gbMaw4bujYyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTYKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJ0w7l5IGNo4buNbiBjaG8gY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNQorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAibuG7kWkgdGjDqm0gdMOqbiBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNworbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICJj4bqlbSBraOG7n2kgdOG6oW8gbOG6p24gY2h1eeG7g24gZ2lhbyB0cuG7kW5nIHLhu5duZyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjkKK21zZ2lkICJrZWVwIHJlZHVuZGFudCwgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAiZ2nhu68gbOG6oWkgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGTGsCB0aOG7q2EsIHLhu5duZyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzIKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJob8OgbiBuZ3V5w6puIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0NQorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAiY2hlcnJ5LXBpY2sgZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOQorbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJtIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFstLV0gPHThuq1wLXRpbj7igKYiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMDcKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorImPDoWMgdOG6rXAgdGluIHNhdSDEkcOieSBjw7Mga2jDoWMgYmnhu4d0IG7hu5lpIGR1bmcgxJHDoyDEkcawYSBsw6puIGLhu4cgcGjDs25nXG4iCisidOG7qyBj4bqjIHThuq1wIHRpbiB2w6AgY+G6oyBIRUFEOiIKKworIzogYnVpbHRpbi9ybS5jOjIxMgorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKGTDuW5nIC1mIMSR4buDIGJ14buZYyBn4buhIGLhu48pIgorCisjOiBidWlsdGluL3JtLmM6MjE2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ3N0clswXSAiY8OhYyB04bqtcCB0aW4gc2F1IMSRw6J5IGPDsyB0aGF5IMSR4buVaSB0cuG6oW5nIHRow6FpIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYzoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjAgYnVpbHRpbi9ybS5jOjIyOQorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKGTDuW5nIHTDuXkgY2jhu41uIC0tY2FjaGVkIMSR4buDIGdp4buvIHThuq1wIHRpbiwgaG/hurdjIC1mIMSR4buDIMOpcCBideG7mWMgZ+G7oSBi4buPKSIKKworIzogYnVpbHRpbi9ybS5jOjIyNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ3N0clswXSAibmjhu69uZyB04bqtcCB0aW4gc2F1IMSRw6J5IGPDsyBuaOG7r25nIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5k6IgorCisjOiBidWlsdGluL3JtLmM6MjQzCittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAia2jDtG5nIGxp4buHdCBrw6ogY8OhYyB04bqtcCB0aW4gxJHDoyBn4buhIGLhu48iCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDQKK21zZ2lkICJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiY2jhu4kgZ+G7oSBi4buPIHThu6sgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDUKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAiZ2hpIMSRw6ggbMOqbiBraeG7g20gdHJhIGPhuq1wIG5o4bqtdCIKKworIzogYnVpbHRpbi9ybS5jOjI0NgorbXNnaWQgImFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIgorbXNnc3RyICJjaG8gcGjDqXAgZ+G7oSBi4buPIMSR4buHIHF1aSIKKworIzogYnVpbHRpbi9ybS5jOjI0OAorbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICJ0aG/DoXQgcmEgduG7m2kgdHLhuqFuZyB0aMOhaSBraMOhYyBraMO0bmcgdGjhuq1tIGNow60gbuG6v3Uga2jDtG5nIGPDsyBnw6wga2jhu5twIgorCisjOiBidWlsdGluL3JtLmM6MjgyCittc2dpZCAiTm8gcGF0aHNwZWMgd2FzIGdpdmVuLiBXaGljaCBmaWxlcyBzaG91bGQgSSByZW1vdmU/IgorbXNnc3RyICJLaMO0bmcgxJHGsGEgcmEgxJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuLiBUw7RpIG7Dqm4gbG/huqFpIGLhu48gY8OhYyB04bqtcCB0aW4gbsOgbz8iCisKKyM6IGJ1aWx0aW4vcm0uYzozMDUKK21zZ2lkICJwbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAiIgorImjDo3kgxJHGsGEgY8OhYyB0aGF5IMSR4buVaSBj4bunYSBi4bqhbiB2w6BvIC5naXRtb2R1bGVzIGhheSB04bqhbSBj4bqldCBjaMO6bmcgxJFpIMSR4buDIHjhu60gbMO9IgorCisjOiBidWlsdGluL3JtLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiCittc2dzdHIgImtow7RuZyB0aOG7gyBn4buhIGLhu48g4oCcJXPigJ0gbeG7mXQgY8OhY2ggxJHhu4cgcXVpIG3DoCBraMO0bmcgY8OzIHTDuXkgY2jhu41uIC1yIgorCisjOiBidWlsdGluL3JtLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJtOiBraMO0bmcgdGjhu4MgZ+G7oSBi4buPICVzIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjIwCittc2dpZCAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiAiCisiWzxyZWY+Li4uXVxuIgorIiAgLS1hbGwgYW5kIGV4cGxpY2l0IDxyZWY+IHNwZWNpZmljYXRpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxtw6F5PjpdPHRoxrAvbeG7pWM+IFs8Y8OhYy10aGFtLSIKKyJjaGnhur91PuKApl1cbiIKKyIgIC0tYWxsIHbDoCDEkeG6t2MgdOG6oyA8cmVmPiByw7UgcsOgbmcgbMOgIGxv4bqhaSB0cuG7qyBs4bqrbiBuaGF1LiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjMKK21zZ2lkICJyZW1vdGUgbmFtZSIKK21zZ3N0ciAidMOqbiBtw6F5IGThu4tjaCB24bulIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NworbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICJkw7luZyBnaWFvIHRo4bupYyBSUEMga2jDtG5nIOG7lW4gxJHhu4tuaCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzgKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAixJHhu41jIHRoYW0gY2hp4bq/dSB04burIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc5Cittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAiaW4gY8OhYyB0cuG6oW5nIHRow6FpIHThu6sgcGjhuqduIGjGsOG7m25nIGThuqtuIHRyw6puIG3DoXkgZOG7i2NoIHbhu6UiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNAorbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHNob3J0bG9nIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8dsO5bmcteMOpdC1kdXnhu4d0Pl0gW1stLV0gWzzEkcaw4budbmcvZOG6q24+4oCmXV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNQorbXNnaWQgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzxjw6FjIHTDuXkgY2jhu41uPl0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjQKK21zZ2lkICJHcm91cCBieSBjb21taXR0ZXIgcmF0aGVyIHRoYW4gYXV0aG9yIgorbXNnc3RyICJOaMOzbSB0aGVvIG5nxrDhu51pIGNodXnhu4NuIGdpYW8gdGhheSB2w6wgdMOhYyBnaeG6oyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NgorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAic+G6r3AgeOG6v3Aga+G6v3QgeHXhuqV0IHR1w6JuIHRoZW8gc+G7kSBsxrDhu6NuZyBjaHV54buDbiBnaWFvIHRyw6puIG3hu5dpIHTDoWMgZ2nhuqMiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjgKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAiQ2jhurduIG3hu41pIG3DtCB04bqjIGzhuqduIGNodXnhu4NuIGdpYW8sIGNo4buJIMSRxrBhIHJhIHPhu5EgbMaw4bujbmcgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0aMawIMSRaeG7h24gdOG7rSBjaG8gdOG7q25nIHTDoWMgZ2nhuqMiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzEKK21zZ2lkICI8dz5bLDxpMT5bLDxpMj5dXSIKK21zZ3N0ciAiPHc+Wyw8aTE+Wyw8aTI+XV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzIKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgIk5n4bqvdCBkw7JuZyBraGkgcXXDoSBkw6BpIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MzAxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGdpdmVuIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAicXXDoSBuaGnhu4F1IHRoYW0gc+G7kSDEkcawYSByYSBuZ2/DoGkga2hvIGNo4bupYSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjEzCittc2dpZCAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08a2hpPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4p4oCmXSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjE3Cittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxu4buBbj5dXSBbLS1saXN0XSBbPHJlZj5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWYiCittc2dpZF9wbHVyYWwgImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWZzIgorbXNnc3RyWzBdICLEkWFuZyBi4buPIHF1YSAlczsga2jDtG5nIHRo4buDIHjhu60gbMO9IG5oaeG7gXUgaMahbiAlZCB0aGFtIGNoaeG6v3UiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbWF0Y2hpbmcgcmVmcyB3aXRoICVzIgorbXNnc3RyICJraMO0bmcgdGhhbSBjaGnhur91IG7DoG8ga2jhu5twIHbhu5tpICVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ1Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyBuaMOhbmggcmVtb3RlLXRyYWNraW5nIHbDoCBu4buZaSBi4buZIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ3Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIG5ow6FuaCByZW1vdGUtdHJhY2tpbmciCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDkKK21zZ2lkICJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIgorbXNnc3RyICJtw6B1IOKAnCohKy3igJ0gdMawxqFuZyDhu6luZyB24bubaSBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTEKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRow6ptIDxuPiBs4bqnbiBjaHV54buDbiBnaWFvIHNhdSBjaGEgbeG6uSBjaHVuZyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MworbXNnaWQgInN5bm9ueW0gdG8gbW9yZT0tMSIKK21zZ3N0ciAixJHhu5NuZyBuZ2jEqWEgduG7m2kgbW9yZT0tMSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NAorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICJjaOG6t24gY8OhYyBjaHXhu5dpIMSR4bq3dCB0w6puIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU2Cittc2dpZCAiaW5jbHVkZSB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgImJhbyBn4buTbSBuaMOhbmggaGnhu4duIGjDoG5oIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU4Cittc2dpZCAibmFtZSBjb21taXRzIHdpdGggdGhlaXIgb2JqZWN0IG5hbWVzIgorbXNnc3RyICLEkeG6t3QgdMOqbiBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gYuG6sW5nIGPDoWMgdMOqbiBj4bunYSDEkeG7kWkgdMaw4bujbmcgY+G7p2EgY2jDum5nIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYwCittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIG3hu41pIGPGoSBz4bufIGPDsyB0aOG7gyBkw7luZyDEkeG7gyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MgorbXNnaWQgInNob3cgcmVmcyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciByZWYiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIHRoYW0gY2hp4bq/dSBraMO0bmcgdGjhu4MgxJHGsOG7o2MgxJHhu41jIGLhu59pIGLhuqV0IGvhu7MgdGhhbSBjaGnhur91IGtow6FjIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY0Cittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIHRoZW8gdGjhu6kgdOG7sSB0w7Rww7QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjcKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBraMO0bmcgbuG6sW0gdHLDqm4gbmjDoW5oIMSR4bqndSB0acOqbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2OQorbXNnaWQgInNob3cgbWVyZ2VzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lIHRpcCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgbOG6p24gaMOyYSB0cuG7mW4gY8OzIHRo4buDIMSR4buNYyDEkcaw4bujYyBjaOG7iSB04burIG3hu5l0IMSR4bqndSBtw7p0IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcxCittc2dpZCAidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyIHdoZXJlIHBvc3NpYmxlIgorbXNnc3RyICJz4bqvcCB44bq/cCBow6xuaCB0aMOhaSBo4buNYywgYuG6o28gdHLDrCB0aOG7qSB04buxIG5nw6B5IG7hur91IGPDsyB0aOG7gyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw8Y8ahX3Phu58+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NQorbXNnaWQgInNob3cgPG4+IG1vc3QgcmVjZW50IHJlZi1sb2cgZW50cmllcyBzdGFydGluZyBhdCBiYXNlIgorbXNnc3RyICJoaeG7g24gdGjhu4sgPG4+IGPDoWMgbeG7pWMg4oCccmVmLWxvZ+KAnSBn4bqnbiBuaOG6pXQga+G7gyB04burIG7hu4FuIChiYXNlKSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjcxMQorbXNnaWQgIiIKKyItLXJlZmxvZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50IG9yIC0tbWVyZ2UtYmFzZSIKK21zZ3N0ciAiIgorIi0tcmVmbG9nIGzDoCBraMO0bmcgdMawxqFuZyB0aMOtY2ggduG7m2kgY8OhYyB0w7l5IGNo4buNbiAtLWFsbCwgLS1yZW1vdGVzLCAtLSIKKyJpbmRlcGVuZGVudCBoYXkgLS1tZXJnZS1iYXNlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM1Cittc2dpZCAibm8gYnJhbmNoZXMgZ2l2ZW4sIGFuZCBIRUFEIGlzIG5vdCB2YWxpZCIKK21zZ3N0ciAiY2jGsGEgxJHGsGEgcmEgbmjDoW5oLCB2w6AgSEVBRCBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczOAorbXNnaWQgIi0tcmVmbG9nIG9wdGlvbiBuZWVkcyBvbmUgYnJhbmNoIG5hbWUiCittc2dzdHIgIi0tcmVmbG9nIGPhuqduIHTDqm4gbeG7mXQgbmjDoW5oIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgJWQgZW50cnkgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ2lkX3BsdXJhbCAib25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dzdHJbMF0gImNo4buJIGPDsyB0aOG7gyBoaeG7g24gdGjhu4sgY8O5bmcgbMO6YyAlZCBo4bqhbmcgbeG7pWMuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmICVzIgorbXNnc3RyICJraMO0bmcgY8OzIHRoYW0gY2hp4bq/dSBuw6BvIG5oxrAgdGjhur8gJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2LiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2cy4iCittc2dzdHJbMF0gImtow7RuZyB0aOG7gyB44butIGzDvSBuaGnhu4F1IGjGoW4gJWQgxJFp4buDbSB4w6l0IGR1eeG7h3QuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSB0aGFtIGNoaeG6v3UgaOG7o3AgbOG7hy4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgY29tbWl0ICVzICglcykiCittc2dzdHIgImtow7RuZyB0aOG7gyB0w6xtIHRo4bqleSBs4bqnbiBjaHV54buDbiBnaWFvICVzICglcykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMgorbXNnaWQgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPG3huqt1PuKApl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMworbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxt4bqrdT5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYyCittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIHRo4bq7IChjw7MgdGjhu4MgdOG7lSBo4bujcCBjw7luZyB24bubaSDEkeG6p3UpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYzCittc2dpZCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIMSR4bqndSAoY8OzIHRo4buDIHThu5UgaOG7o3AgY8O5bmcgduG7m2kgdGjhurspIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY0Cittc2dpZCAic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCByZXF1aXJlcyBleGFjdCByZWYgcGF0aCIKK21zZ3N0ciAiIgorInZp4buHYyBraeG7g20gdHJhIHRoYW0gY2hp4bq/dSBjaMOtbmggeMOhYywgxJHDsmkgaOG7j2kgY2jDrW5oIHjDoWMgxJHGsOG7nW5nIGThuqtuIHRoYW0gY2hp4bq/dSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NyBidWlsdGluL3Nob3ctcmVmLmM6MTY5Cittc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IgorbXNnc3RyICJoaeG7g24gdGjhu4sgdGhhbSBjaGnhur91IEhFQUQsIG5nYXkgY+G6oyBraGkgbsOzIMSRw6MgxJHGsOG7o2MgbOG7jWMgcmEiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzEKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAiYsOjaSBi4buPIHRoYW0gY2hp4bq/dSBjw6FjIHRo4bq7IHRow6BuaCByYSBjw6FjIElEIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MworbXNnaWQgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIG3DoyBixINtIFNIQTEgc+G7rSBk4bulbmcgPG4+IGNo4buvIHPhu5EiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzcKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVzdWx0cyB0byBzdGRvdXQgKHVzZWZ1bCB3aXRoIC0tdmVyaWZ5KSIKK21zZ3N0ciAiIgorImtow7RuZyBoaeG7g24gdGjhu4sga+G6v3QgcXXhuqMgcmEgxJHhuqd1IHJhIGNodeG6qW4gKHN0ZG91dCkgKGNo4buJIGjhu691IGThu6VuZyB24bubaSAtLXZlcmlmeSkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICIiCisiaGnhu4NuIHRo4buLIGPDoWMgdGhhbSBjaGnhur91IHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiAoc3RkaW4pIGPDoWkgbcOgIGtow7RuZyDhu58ga2hvIG7hu5lpICIKKyJi4buZIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIxCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxhZGR8ZGlzYWJsZSkgPG9wdGlvbnM+IgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGFkZHxkaXNhYmxlKSA8Y8OhYy10w7l5LWNo4buNbj4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NjQKK21zZ2lkICJ0aGlzIHdvcmt0cmVlIGlzIG5vdCBzcGFyc2UgKHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBub3QgZXhpc3QpIgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPDuiBwaMOhcCBjw6J5IGzDoG0gdmnhu4djIG7DoHkgKHThuq1wIHRpbiBzcGFyc2UtY2hlY2tvdXQgY8OzIGzhur0gIgorImtow7RuZyB04buTbiB04bqhaSkiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjI1Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yIHNwYXJzZS1jaGVja291dCBmaWxlIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdOG6oW8gdGjGsCBt4bulYyBjaG8gdOG6rXAgdGluIHNwYXJzZS1jaGVja291dCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyNjYKK21zZ2lkICJmYWlsZWQgdG8gc2V0IGV4dGVuc2lvbnMud29ya3RyZWVDb25maWcgc2V0dGluZyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4bq3dCBjw6BpIMSR4bq3dCBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI4MworbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCBbLS1jb25lXSIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IFstLWNvbmVdIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjMwMgorbXNnaWQgImluaXRpYWxpemUgdGhlIHNwYXJzZS1jaGVja291dCBpbiBjb25lIG1vZGUiCittc2dzdHIgImto4bufaSB04bqhbyBzcGFyc2UtY2hlY2tvdXQgdHJvbmcgY2jhur8gxJHhu5kgbsOzbiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozMDgKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAia2jhu59pIHThuqFvIHNwYXJzZS1jaGVja291dCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIG3hu58g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBub3JtYWxpemUgcGF0aCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRoxrDhu51uZyBow7NhIMSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0MTAKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChzZXR8YWRkKSAoLS1zdGRpbiB8IDxwYXR0ZXJucz4pIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IChzZXR8YWRkKSAoLS1zdGRpbiB8IDxjw6FjIG3huqt1PikiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDM1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnF1b3RlIEMtc3R5bGUgc3RyaW5nICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBi4buPIHRyw61jaCBk4bqrbiBjaHXhu5dpIGtp4buDdSBDIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjQ4OSBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjUxMworbXNnaWQgInVuYWJsZSB0byBsb2FkIGV4aXN0aW5nIHNwYXJzZS1jaGVja291dCBwYXR0ZXJucyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqNpIGPDoWMgbeG6q3Ugc3BhcnNlLWNoZWNrb3V0IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjU1OAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBzdGFuZGFyZCBpbiIKK21zZ3N0ciAixJHhu41jIGPDoWMgbeG6q3UgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjU2NAorbXNnaWQgInNldCBzcGFyc2UtY2hlY2tvdXQgcGF0dGVybnMiCittc2dzdHIgIsSR4bq3dCBjw6FjIG3huqt1IHNwYXJzZS1jaGVja291dCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1ODEKK21zZ2lkICJkaXNhYmxlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAidOG6r3Qgc3BhcnNlLWNoZWNrb3V0IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjU5MworbXNnaWQgImVycm9yIHdoaWxlIHJlZnJlc2hpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkeG7jWMgbOG6oWkgdGjGsCBt4bulYyBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyIGJ1aWx0aW4vc3Rhc2guYzozOAorbXNnaWQgImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgc3Rhc2ggbGlzdCBbPGPDoWMgdMO5eSBjaOG7jW4+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIzIGJ1aWx0aW4vc3Rhc2guYzo0MworbXNnaWQgImdpdCBzdGFzaCBzaG93IFs8b3B0aW9ucz5dIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHNob3cgWzxjw6FjIHTDuXkgY2jhu41uPl0gPHN0YXNoPiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI0IGJ1aWx0aW4vc3Rhc2guYzo0OAorbXNnaWQgImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNQorbXNnaWQgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNiBidWlsdGluL3N0YXNoLmM6NjMKK21zZ2lkICJnaXQgc3Rhc2ggYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBicmFuY2ggPHTDqm4tbmjDoW5oPiBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNyBidWlsdGluL3N0YXNoLmM6NjgKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI4Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdXVxuIgorIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPGzhu51pIG5o4bqvbj5dXG4iCisiICAgICAgICAgIFstLXBhdGhzcGVjLWZyb20tZmlsZT08dOG6rXBfdGluPiBbLS1wYXRoc3BlYy1maWxlLW51bF1dXG4iCisiICAgICAgICAgIFstLV0gWzzEkeG6t2MvdOG6oy/Ekcaw4budbmcvZOG6q24+4oCmXV0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzozMiBidWlsdGluL3N0YXNoLmM6ODUKK21zZ2lkICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8bWVzc2FnZT5dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8Z2hpIGNow7o+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUzCittc2dpZCAiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU4Cittc2dpZCAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3MworbXNnaWQgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IgorbXNnc3RyICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA8Z2hpIGNow7o+XSBbLXF8LS1xdWlldF0gPGNvbW1pdD4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3OAorbXNnaWQgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XVxuIgorIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPGzhu51pIG5o4bqvbj5dXG4iCisiICAgICAgICAgIFstLV0gWzzEkeG6t2MvdOG6oy/Ekcaw4budbmcvZOG6q24+4oCmXV0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBsw6AgbOG6p24gY2h1eeG7g24gZ2lhbyBraeG7g3Utc3Rhc2ggKGPhuqV0IMSRaSkiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDolcyIKK21zZ3N0ciAiQ2jhu4kgcmEgcXXDoSBuaGnhu4F1IMSRaeG7g20geMOpdCBkdXnhu4d0OiAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU0OQorbXNnaWQgIk5vIHN0YXNoIGVudHJpZXMgZm91bmQuIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgY8OhYyBt4bulYyB04bqhbSBj4bqldCAoc3Rhc2gpIG7DoG8uIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBt4buZdCB0aGFtIGNoaeG6v3UgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyNSBnaXQtbGVnYWN5LXN0YXNoLnNoOjc1Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIGNsZWFyIHbhu5tpIGPDoWMgdGhhbSBz4buRIGzDoCBjaMawYSDEkcaw4bujYyB0aOG7sWMgaGnhu4duIChraMO0bmcgbmjhuq1uIMSR4buRaSBz4buRKSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQwNAorbXNnaWQgImNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMOhcCBk4bulbmcgbeG7mXQgc3Rhc2gg4bufIGdp4buvYSBj4bunYSBxdcOhIHRyw6xuaCBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgZGlmZiAlc14hLiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIGRpZmYgJXNeIS4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjIKK21zZ2lkICJjb25mbGljdHMgaW4gaW5kZXguVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgInh1bmcgxJHhu5l0IHRyb25nIGLhuqNuZyBt4bulYyBs4bulYy4gSMOjeSB0aOG7rSBtw6Aga2jDtG5nIGTDuW5nIHTDuXkgY2jhu41uIC0taW5kZXguIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDI4Cittc2dpZCAiY291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSBs4bqhaSBjw6J5IGNo4buJIG3hu6VjIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDM3Cittc2dpZCAiY291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2giCittc2dzdHIgImtow7RuZyB0aOG7gyBwaOG7pWMgaOG7k2kgY8OhYyB04bqtcCB0aW4gY2jGsGEgdGhlbyBkw7VpIHThu6sgbeG7pWMgY+G6pXQgxJFpIChzdGFzaCkiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzIgorbXNnc3RyICLEkGFuZyBow7JhIHRy4buZbiAlcyB24bubaSAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ2MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjY4MQorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAiQuG6o25nIG3hu6VjIGzhu6VjIMSRw6Mga2jDtG5nIMSRxrDhu6NjIGLhu48gc3Rhc2guIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTIyIGJ1aWx0aW4vc3Rhc2guYzo2MjEKK21zZ2lkICJhdHRlbXB0IHRvIHJlY3JlYXRlIHRoZSBpbmRleCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kgxJHhu41jIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICVzICglcykiCittc2dzdHIgIsSQw6MgeMOzYSAlcyAoJXMpIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJXM6IEtow7RuZyB0aOG7gyB4w7NhIGLhu48gbeG7pWMgc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIuKAnSVz4oCdIGtow7RuZyBwaOG6o2kgdGhhbSBjaGnhur91IMSR4bq/biBzdGFzaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjYzMyBnaXQtbGVnYWN5LXN0YXNoLnNoOjY5NQorbXNnaWQgIlRoZSBzdGFzaCBlbnRyeSBpcyBrZXB0IGluIGNhc2UgeW91IG5lZWQgaXQgYWdhaW4uIgorbXNnc3RyICJDw6FjIG3hu6VjIHThuqFtIGPhuqV0IChzdGFzaCkgxJHGsOG7o2MgZ2nhu68gdHJvbmcgdHLGsOG7nW5nIGjhu6NwIGLhuqFuIGzhuqFpIGPhuqduIG7Dsy4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2NTYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MTMKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIkNoxrBhIGNo4buJIHJhIHTDqm4gY+G7p2EgbmjDoW5oIgorCisjOiBidWlsdGluL3N0YXNoLmM6Nzk2IGJ1aWx0aW4vc3Rhc2guYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAlcyB3aXRoICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10ICVzIHbhu5tpICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODE0IGJ1aWx0aW4vc3Rhc2guYzoxNDc4IGJ1aWx0aW4vc3Rhc2guYzoxNTQzCittc2dpZCAic3Rhc2ggbWVzc2FnZSIKK21zZ3N0ciAicGjhuqduIGNow7ogdGjDrWNoIGNobyBzdGFzaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgyNAorbXNnaWQgIlwiZ2l0IHN0YXNoIHN0b3JlXCIgcmVxdWlyZXMgb25lIDxjb21taXQ+IGFyZ3VtZW50IgorbXNnc3RyICJcImdpdCBzdGFzaCBzdG9yZVwiIGPhuqduIG3hu5l0IMSR4buRaSBz4buRIDxs4bqnbiBjaHV54buDbiBnaWFvPiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEwNDkgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTgKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICJDaMawYSBjw7MgdGhheSDEkeG7lWkgbsOgbyDEkcaw4bujYyBjaOG7jW4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTQ5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MTUwCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIkLhuqFuIGNoxrBhIGPDsm4gY8OzIGzhuqduIGNodXnhu4NuIGdpYW8ga2jhu59pIHThuqFvIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE3NiBnaXQtbGVnYWN5LXN0YXNoLnNoOjE2NQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIGzhuqFpIHRy4bqhbmcgdGjDoWkgYuG6o25nIG3hu6VjIGzhu6VjIGhp4buHbiBow6BuaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExODUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxODAKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIGzhuqFpIGPDoWMgdOG6rXAgdGluIGNoxrBhIHRoZW8gZMO1aSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExOTYgYnVpbHRpbi9zdGFzaC5jOjEyMDUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMDEKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjE0Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgbOG6oWkgdHLhuqFuZyB0aMOhaSBjw6J5LWzDoG0tdmnhu4djIGhp4buHbiBow6BuaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyMzMgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMzQKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBs4bqhaSB0cuG6oW5nIHRow6FpIGPDonkgbMOgbSB2aeG7h2MgaGnhu4duIGjDoG5oIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI4MiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMzOAorbXNnaWQgIkNhbid0IHVzZSAtLXBhdGNoIGFuZCAtLWluY2x1ZGUtdW50cmFja2VkIG9yIC0tYWxsIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIktow7RuZyB0aOG7gyBkw7luZyAtLXBhdGNoIHbDoCAtLWluY2x1ZGUtdW50cmFja2VkIGhheSAtLWFsbCBjw7luZyBt4buZdCBsw7pjIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI5OAorbXNnaWQgIkRpZCB5b3UgZm9yZ2V0IHRvICdnaXQgYWRkJz8iCittc2dzdHIgIkPDsyBs4bq9IGLhuqFuIMSRw6MgcXXDqm4g4oCcZ2l0IGFkZCDigJ0gcGjhuqNpIGtow7RuZz8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzEzIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzQ2Cittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kgbsOgbyDEkcaw4bujYyBnaGkgbOG6oWkiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzIwIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzUxCittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIktow7RuZyB0aOG7gyBraOG7n2kgdOG6oW8gc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzM1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIGzhuqFpIHRy4bqhbmcgdGjDoWkgaGnhu4duIGjDoG5oIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJXMiCittc2dzdHIgIsSQw6MgZ2hpIGzhuqFpIHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgdsOgIHRy4bqhbmcgdGjDoWkgbeG7pWMgbOG7pWMgJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDMwIGdpdC1sZWdhY3ktc3Rhc2guc2g6Mzg1Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ+G7oSBi4buPIGPDoWMgdGhheSDEkeG7lWkgY8OieS1sw6BtLXZp4buHYyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjkgYnVpbHRpbi9zdGFzaC5jOjE1MzQKK21zZ2lkICJrZWVwIGluZGV4IgorbXNnc3RyICJnaeG7ryBuZ3V5w6puIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NzEgYnVpbHRpbi9zdGFzaC5jOjE1MzYKK21zZ2lkICJzdGFzaCBpbiBwYXRjaCBtb2RlIgorbXNnc3RyICJj4bqldCDEkWkg4bufIGNo4bq/IMSR4buZIG1p4bq/bmcgdsOhIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3MiBidWlsdGluL3N0YXNoLmM6MTUzNworbXNnaWQgInF1aWV0IG1vZGUiCittc2dzdHIgImNo4bq/IMSR4buZIGltIGzhurduZyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NzQgYnVpbHRpbi9zdGFzaC5jOjE1MzkKK21zZ2lkICJpbmNsdWRlIHVudHJhY2tlZCBmaWxlcyBpbiBzdGFzaCIKK21zZ3N0ciAiYmFvIGfhu5NtIGPDoWMgdOG6rXAgdGluIGtow7RuZyDEkcaw4bujYyB0aGVvIGTDtWkgdHJvbmcgc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDc2IGJ1aWx0aW4vc3Rhc2guYzoxNTQxCittc2dpZCAiaW5jbHVkZSBpZ25vcmUgZmlsZXMiCittc2dzdHIgImJhbyBn4buTbSBjw6FjIHThuq1wIHRpbiBi4buLIGLhu48gcXVhIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhlYyAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRo4buxYyB0aGkgJXMiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM3Cittc2dpZCAic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIgorbXNnc3RyICJnaeG7ryB2w6AgeMOzYSBi4buPIG3hu41pIGTDsm5nIGLhuq90IMSR4bqndSBi4bqxbmcga8O9IHThu7EgZ2hpIGNow7oiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjQwCittc2dpZCAicHJlcGVuZCBjb21tZW50IGNoYXJhY3RlciBhbmQgc3BhY2UgdG8gZWFjaCBsaW5lIgorbXNnc3RyICJ0cmVvIHRyxrDhu5tjIGvDvSB04buxIGdoaSBjaMO6IHbDoCBrw70gdOG7sSBraG/huqNuZyB0cuG6r25nIGNobyB04burbmcgZMOybmciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiCittc2dzdHIgIkPhuqduIHTDqm4gdGhhbSBjaGnhur91IGThuqFuZyDEkeG6p3kgxJHhu6csIG5oxrBuZyBs4bqhaSBuaOG6rW4gxJHGsOG7o2MgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NAorbXNnaWQgInN1Ym1vZHVsZS0taGVscGVyIHByaW50LWRlZmF1bHQtcmVtb3RlIHRha2VzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAic3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUgdGFrZXMga2jDtG5nIG5o4bqtbiB0aGFtIHPhu5EiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY+G6r3QgYuG7jyBt4buZdCB0aMOgbmggcGjhuqduIHJhIGto4buPaSDigJwlc+KAnSB1cmwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MTAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTUKK21zZ2lkICJhbHRlcm5hdGl2ZSBhbmNob3IgZm9yIHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICLEkWnhu4NtIG5lbyB0aGF5IHRo4bq/IGNobyBjw6FjIMSRxrDhu51uZyBk4bqrbiB0xrDGoW5nIMSR4buRaSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PC/Ekcaw4budbmcvZOG6q24+XSBbPC/Ekcaw4budbmcvZOG6q24+4oCmXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjMwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVybCBmb3VuZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IHVybCBjaG8gxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwlc+KAnSB0cm9uZyAuZ2l0bW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRlcmluZyAnJXMnXG4iCittc2dzdHIgIsSQYW5nIHbDoG8g4oCcJXPigJ1cbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIGZvciAlc1xuIgorIi4iCittc2dzdHIgIiIKKyJydW5fY29tbWFuZCB0cuG6oyB24buBIHRy4bqhbmcgdGjDoWkga2jDoWMga2jDtG5nIGNobyAlc1xuIgorIi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyB3aGlsZSByZWN1cnNpbmcgaW4gdGhlIG5lc3RlZCAiCisic3VibW9kdWxlcyBvZiAlc1xuIgorIi4iCittc2dzdHIgIiIKKyJydW5fY29tbWFuZCB0cuG6oyB24buBIHRy4bqhbmcgdGjDoWkga2jDoWMga2jDtG5nIHRyb25nIGtoaSDEkeG7hyBxdXkgdHJvbmcgY8OhYyBtw7QtxJF1bi0iCisiY29uIGzhu5NuZyBuaGF1IGPhu6dhICVzXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBlbnRlcmluZyBlYWNoIHN1Ym1vZHVsZSBjb21tYW5kIgorbXNnc3RyICJDaOG6t24ga+G6v3QgeHXhuqV0IGPhu6dhIHThu6tuZyBs4buHbmggbcO0LcSRdW4tY29uIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDYzCittc2dpZCAiUmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzIgorbXNnc3RyICLEkOG7hyBxdXkgdsOgbyB0cm9uZyBjw6FjIG3DtC3EkXVuLWNvbiBs4buTbmcgbmhhdSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU3MgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBmb3JlYWNoIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gPGNvbW1hbmQ+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dICA8bOG7h25oPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGxvb2sgdXAgY29uZmlndXJhdGlvbiAnJXMnLiBBc3N1bWluZyB0aGlzIHJlcG9zaXRvcnkgaXMgaXRzIG93biAiCisiYXV0aG9yaXRhdGl2ZSB1cHN0cmVhbS4iCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgY+G6pXUgaMOsbmgg4oCcJXPigJ0uIENvaSBy4bqxbmcgxJHDonkgbMOgIGtobyB0aMaw4bujbmcgbmd14buTbiBjw7MgcXV54buBbiAiCisic+G7nyBo4buvdSBjaMOtbmggbsOzLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHEg25nIGvDvSB1cmwgY2hvIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSByZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiTcO0LcSRdW4tY29uIOKAnCVz4oCdICglcykgxJHGsOG7o2MgxJHEg25nIGvDvSBjaG8gxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogY29tbWFuZCB1cGRhdGUgbW9kZSBzdWdnZXN0ZWQgZm9yIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgImPhuqNuaCBiw6FvOiBjaOG6vyDEkeG7mSBs4buHbmggY+G6rXAgbmjhuq10IMSRxrDhu6NjIGfhu6NpIMO9IGNobyBtw7QtxJF1bi1jb24g4oCcJXPigJ1cbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkcSDbmcga8O9IGNo4bq/IMSR4buZIGPhuq1wIG5o4bqtdCBjaG8gxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxMAorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBmb3IgaW5pdGlhbGl6aW5nIGEgc3VibW9kdWxlIgorbXNnc3RyICJDaOG6t24ga+G6v3QgeHXhuqV0IGNobyBraOG7n2kgdOG6oW8gbeG7mXQgbcO0LcSRdW4tY29uIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzxvcHRpb25zPl0gWzxwYXRoPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8L8SRxrDhu51uZy9k4bqrbj5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Nzg5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorImtow7RuZyB0w6xtIHRo4bqleSDDoW5oIHjhuqEgKG1hcHBpbmcpIG3DtC3EkXVuLWNvbiB0cm9uZyAuZ2l0bW9kdWxlcyBjaG8gxJHGsOG7nW5nIGThuqtuICIKKyLigJwlc+KAnSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHJlZiBpbnNpZGUgdGhlIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpIHRoYW0gY2hp4bq/dSBIRUFEIGLDqm4gdHJvbmcgbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODY0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkeG7hyBxdXkgdsOgbyB0cm9uZyBtw7QtxJF1bi1jb24g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTkKK21zZ2lkICJTdXBwcmVzcyBzdWJtb2R1bGUgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAiQ2jhurduIGvDqXQgeHXhuqV0IHTDrG5oIHRy4bqhbmcgbcO0LcSRdW4tY29uIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODg5Cittc2dpZCAiIgorIlVzZSBjb21taXQgc3RvcmVkIGluIHRoZSBpbmRleCBpbnN0ZWFkIG9mIHRoZSBvbmUgc3RvcmVkIGluIHRoZSBzdWJtb2R1bGUgIgorIkhFQUQiCittc2dzdHIgIiIKKyJEw7luZyBs4bqnbiBjaHV54buDbiBnaWFvIGzGsHUgdHJvbmcgbeG7pWMgbOG7pWMgdGhheSBjaG8gY8OhaSDEkcaw4bujYyBsxrB1IHRyb25nIEhFQUQgbcO0LSIKKyLEkXVuLWNvbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg5MAorbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAixJHhu4cgcXV5IHbDoG8gdHJvbmcgbcO0LcSRdW4tY29uIGzhu5NuZyBuaGF1IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODk1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzwvxJHGsOG7nW5nL2ThuqtuPuKApl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MTkKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8cGF0aD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDwvxJHGsOG7nW5nL2ThuqtuPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk4MworIywgYy1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICclcydcbiIKK21zZ3N0ciAiVXJsIG3DtC3EkXVuLWNvbiDEkeG7k25nIGLhu5kgaMOzYSBjaG8g4oCcJXPigJ1cbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHEg25nIGvDvSB1cmwgY2hvIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGzhuqV5IG3DoXkgY2jhu6cgbeG6t2MgxJHhu4tuaCBjaG8gbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBj4bqtcCBuaOG6rXQgY2hvIG3DtC3EkXVuLWNvbiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNjEKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIgorbXNnc3RyICJDaOG6t24ga+G6v3QgeHXhuqV0IGNobyDEkeG7k25nIGLhu5kgdXJsIG3DtC3EkXVuLWNvbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNjgKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzwvxJHGsOG7nW5nL2ThuqtuPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSAodXNlICdybSAtcmYnIGlmIHlvdSAiCisicmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIgorbXNnc3RyICIiCisiQ8OieSBsw6BtIHZp4buHYyBtw7QtxJF1bi1jb24g4oCcJXPigJ0gY8OzIGNo4bupYSB0aMawIG3hu6VjIC5naXQgKGTDuW5nIOKAnHJtIC1yZuKAnSBu4bq/dSBi4bqhbiAiCisidGjhu7FjIHPhu7EgbXXhu5FuIGfhu6EgYuG7jyBuw7MgY8O5bmcgduG7m2kgdG/DoG4gYuG7mSBs4buLY2ggc+G7rSBj4bunYSBjaMO6bmcpIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvIGRpc2NhcmQgIgorInRoZW0iCittc2dzdHIgIiIKKyJDw6J5IGzDoG0gdmnhu4djIG3DtC3EkXVuLWNvbiDigJwlc+KAnSBjaOG7qWEgY8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZOyBow6N5IGTDuW5nIOKAnC1m4oCdIMSR4buDIGxv4bqhaSAiCisiYuG7jyBjaMO6bmcgxJFpIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmVkIGRpcmVjdG9yeSAnJXMnXG4iCittc2dzdHIgIsSQw6MgeMOzYSB0aMawIG3hu6VjIOKAnCVz4oCdXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgc3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnXG4iCittc2dzdHIgIktow7RuZyB0aOG7gyBn4buhIGLhu48gY8OieSBsw6BtIHZp4buHYyBtw7QtxJF1bi1jb24g4oCcJXPigJ1cbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdGjGsCBt4bulYyBtw7QtxJF1bi1jb24gcuG7l25nIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIk3DtC3EkXVuLWNvbiDigJwlc+KAnSAoJXMpIMSRxrDhu6NjIMSRxINuZyBrw70gY2hvIMSRxrDhu51uZyBk4bqrbiDigJwlc+KAnVxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIwMAorbXNnaWQgIlJlbW92ZSBzdWJtb2R1bGUgd29ya2luZyB0cmVlcyBldmVuIGlmIHRoZXkgY29udGFpbiBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJH4buhIGLhu48gY8OieSBsw6BtIHZp4buHYyBj4bunYSBtw7QtxJF1bi1jb24gbmdheSBj4bqjIGtoaSBuw7MgY8OzIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjAxCittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiQuG7jyDEkcSDbmcga8O9IHThuqV0IGPhuqMgY8OhYyB0cm9uZyBtw7QtxJF1bi1jb24iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjA2Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8cGF0aD4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dICBbPC/Ekcaw4budbmcvZOG6q24+4oCmXV0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjIwCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiRMO5bmcg4oCcLS1hbGzigJ0gbuG6v3UgYuG6oW4gdGjhu7FjIHPhu7EgbXXhu5FuIGjhu6d5IGto4bufaSB04bqhbyBt4buNaSBtw7QtxJF1bi1jb24iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjg5Cittc2dpZCAiIgorIkFuIGFsdGVybmF0ZSBjb21wdXRlZCBmcm9tIGEgc3VwZXJwcm9qZWN0J3MgYWx0ZXJuYXRlIGlzIGludmFsaWQuXG4iCisiVG8gYWxsb3cgR2l0IHRvIGNsb25lIHdpdGhvdXQgYW4gYWx0ZXJuYXRlIGluIHN1Y2ggYSBjYXNlLCBzZXRcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSB0byAnaW5mbycgb3IsIGVxdWl2YWxlbnRseSwgY2xvbmUgd2l0aFxuIgorIictLXJlZmVyZW5jZS1pZi1hYmxlJyBpbnN0ZWFkIG9mICctLXJlZmVyZW5jZScuIgorbXNnc3RyICIiCisiTeG7mXQgY8OhaSB0aGF5IHRo4bq/IMSRxrDhu6NjIHTDrW5oIHRvw6FuIHThu6sgbeG7mXQgdGhheSB0aOG6vyBj4bunYSBzacOqdSBk4buxIMOhbiBsw6Aga2jDtG5nIGjhu6NwICIKKyJs4buHLlxuIgorIsSQ4buDIGNobyBHaXQgdGjhu7FjIGhp4buHbiBuaMOibiBi4bqjbiBtw6Aga2jDtG5nIGPDsyBjw6FpIHRoYXkgdGjhur8gbmjGsCB0cm9uZyB0csaw4budbmcgaOG7o3AgIgorIm7DoHksIMSR4bq3dFxuIgorInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IHRow6BuaCAnaW5mbycgaG/hurdjLCB0xrDGoW5nIMSRxrDGoW5nLCBuaMOibiBi4bqjbiAiCisiYuG6sW5nXG4iCisiJy0tcmVmZXJlbmNlLWlmLWFibGUnIHRoYXkgdsOsIGTDuW5nICctLXJlZmVyZW5jZScuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMyOCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBjYW5ub3QgYWRkIGFsdGVybmF0ZTogJXMiCittc2dzdHIgIm3DtC3EkXVuLWNvbiDigJwlc+KAnSBraMO0bmcgdGjhu4MgdGjDqm0gdGhheSB0aOG6vzogJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJHacOhIHRy4buLIOKAnCVz4oCdIGNobyBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBraMO0bmcgxJHGsOG7o2MgdGjhu6thIG5o4bqtbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJHacOhIHRy4buLIOKAnCVz4oCdIGNobyBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24ga2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk4Cittc2dpZCAid2hlcmUgdGhlIG5ldyBzdWJtb2R1bGUgd2lsbCBiZSBjbG9uZWQgdG8iCittc2dzdHIgIm5ow6JuIGLhuqNuIG3DtC3EkXVuLWNvbiBt4bubaSB2w6BvIGNo4buXIG7DoG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAxCittc2dpZCAibmFtZSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSIKK21zZ3N0ciAidMOqbiBj4bunYSBtw7QtxJF1bi1jb24gbeG7m2kiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA0Cittc2dpZCAidXJsIHdoZXJlIHRvIGNsb25lIHRoZSBzdWJtb2R1bGUgZnJvbSIKK21zZ3N0ciAidXJsIG7GoWkgbcOgIG5ow6JuIGLhuqNuIG3DtC3EkXVuLWNvbiB04burIMSRw7MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDEyCittc2dpZCAiZGVwdGggZm9yIHNoYWxsb3cgY2xvbmVzIgorbXNnc3RyICJjaGnhu4F1IHPDonUgbOG7i2NoIHPhu60ga2hpIHThuqFvIGLhuqNuIHNhbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MjQKK21zZ2lkICJmb3JjZSBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICLDqXAgYnXhu5ljIHRp4bq/biB0csOsbmggbmjDom4gYuG6o24iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDE3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTI2Cittc2dpZCAiZGlzYWxsb3cgY2xvbmluZyBpbnRvIG5vbi1lbXB0eSBkaXJlY3RvcnkiCittc2dzdHIgImzDoG0gxJHhuqd5IMSR4bunIGThu68gbGnhu4d1IGNobyBi4bqjbiBzYW8gdsOgbyB0cm9uZyBt4buZdCB0aMawIG3hu6VjIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQyNAorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxuYW1lPl0gWy0tZGVwdGggPGRlcHRoPl0gWy0tc2luZ2xlLWJyYW5jaF0gLS11cmwgIgorIjx1cmw+IC0tcGF0aCA8cGF0aD4iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTwvxJHGsOG7nW5nL2ThuqtuPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPGtobz5dIFstLW5hbWUgPHTDqm4+XSBbLS1kZXB0aCA8c8OidT5dIFstLXNpbmdsZS1icmFuY2hdIFstLXVybCA8dXJsPl0gLS1wYXRoICIKKyI8L8SRxrDhu51uZy9k4bqrbj4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGNyZWF0ZS91c2UgJyVzJyBpbiBhbm90aGVyIHN1Ym1vZHVsZSdzIGdpdCBkaXIiCittc2dzdHIgInThu6sgY2jhu5FpIHThuqFvL2TDuW5nICclcycgdHJvbmcgbeG7mXQgdGjGsCBt4bulYyBnaXQgY+G7p2EgbcO0IMSRdW4gY29uIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9uZSBvZiAnJXMnIGludG8gc3VibW9kdWxlIHBhdGggJyVzJyBmYWlsZWQiCittc2dzdHIgInZp4buHYyBzYW8g4oCcJXPigJ0gdsOgbyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCVz4oCdIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJkaXJlY3Rvcnkgbm90IGVtcHR5OiAnJXMnIgorbXNnc3RyICJ0aMawIG3hu6VjIGtow7RuZyB0cuG7kW5nOiAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aMawIG3hu6VjIG3DtC3EkXVuLWNvbiBjaG8g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiQ2jhur8gxJHhu5kgY+G6rXAgbmjhuq10IOKAnCVz4oCdIGtow7RuZyBo4bujcCBs4buHIGNobyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgY29uZmlndXJlZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorIkNo4bq/IMSR4buZIGPhuq1wIG5o4bqtdCDigJwlc+KAnSBraMO0bmcgaOG7o3AgbOG7hyDEkcaw4bujYyBj4bqldSBow6xuaCBjaG8gxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyVzJyBub3QgaW5pdGlhbGl6ZWQiCittc2dzdHIgIsSQxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJXPigJ0gY2jGsGEgxJHGsOG7o2Mga2jhu59pIHThuqFvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYyMQorbXNnaWQgIk1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IgorbXNnc3RyICJDw7MgbOG6vSBi4bqhbiBsw6AgYuG6oW4gbXXhu5FuIGTDuW5nIFwidXBkYXRlIC0taW5pdFwiIHBo4bqjaSBraMO0bmc/IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyB1bm1lcmdlZCBzdWJtb2R1bGUgJXMiCittc2dzdHIgIkLhu48gcXVhIGPDoWMgbcO0LcSRdW4tY29uIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiQuG7jyBxdWEgbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJy4gUmV0cnkgc2NoZWR1bGVkIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgbmjDom4gYuG6o24g4oCcJXPigJ0uIFRo4butIGzhuqFpIGzhu4tjaCB0csOsbmgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnIGEgc2Vjb25kIHRpbWUsIGFib3J0aW5nIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgbmjDom4gYuG6o24g4oCcJXPigJ0gbOG6p24gdGjhu6kgaGFpIG7Dqm4gYsOjaSBi4buPIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwMyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE0OQorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gxJHhur9uIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA2Cittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUsIGFjcm9zcyBuZXN0ZWQgc3VibW9kdWxlIGJvdW5kYXJpZXMiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDEkeG6v24gY8OieSBsw6BtIHZp4buHYywgY2jDqW8gYmnDqm4gZ2nhu5tpIG3DtC3EkXVuLWNvbiBs4buTbmcgbmhhdSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTAKK21zZ2lkICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvciBub25lIgorbXNnc3RyICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBob+G6t2Mga2jDtG5nIGzDoG0gZ8OsIGPhuqMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE2Cittc2dpZCAiQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSB0cnVuY2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zIgorbXNnc3RyICIiCisiVOG6oW8gbeG7mXQgYuG6o24gc2FvIG7DtG5nIMSRxrDhu6NjIGPhuq90IG5n4bqvbiB0aMOgbmggc+G7kSBsxrDhu6NuZyDEkWnhu4NtIHjDqXQgZHV54buHdCDEkcOjIGNobyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTkKK21zZ2lkICJwYXJhbGxlbCBqb2JzIgorbXNnc3RyICJjw7RuZyB2aeG7h2MgxJHhu5NuZyB0aOG7nWkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTIxCittc2dpZCAid2hldGhlciB0aGUgaW5pdGlhbCBjbG9uZSBzaG91bGQgZm9sbG93IHRoZSBzaGFsbG93IHJlY29tbWVuZGF0aW9uIgorbXNnc3RyICJuaMOibiBi4bqjbiBs4bqnbiDEkeG6p3UgY8OzIG7Dqm4gdGhlbyBraHV54bq/biBuZ2jhu4sgbMOgIG7DtG5nIGhheSBraMO0bmciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTIyCittc2dpZCAiZG9uJ3QgcHJpbnQgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAixJHhu6tuZyBpbiB0aeG6v24gdHLDrG5oIG5ow6JuIGLhuqNuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkzMworbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciB1cGRhdGUtY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08L8SRxrDhu51uZy9k4bqrbj5dIFs8L8SRxrDhu51uZy9k4bqrbj7igKZdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk0NgorbXNnaWQgImJhZCB2YWx1ZSBmb3IgdXBkYXRlIHBhcmFtZXRlciIKK21zZ3N0ciAiZ2nDoSB0cuG7iyBjaG8gIHRoYW0gc+G7kSBj4bqtcCBuaOG6rXQgYuG7iyBzYWkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0IGJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0ICIKKyJ0aGUgc3VwZXJwcm9qZWN0IGlzIG5vdCBvbiBhbnkgYnJhbmNoIgorbXNnc3RyICIiCisiTmjDoW5oIG3DtC3EkXVuLWNvbiAoJXMpIMSRxrDhu6NjIGPhuqV1IGjDrG5oIGvhur8gdGjhu6thIG5ow6FuaCB04burIHNpw6p1IGThu7Egw6FuLCBuaMawbmcgc2nDqnUgIgorImThu7Egw6FuIGzhuqFpIGtow7RuZyB0csOqbiBi4bqldCBr4buzIG5ow6FuaCBuw6BvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjExNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGEgcmVwb3NpdG9yeSBoYW5kbGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgdGjhursgcXXhuqNuIGtobyBjaG8gbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE1MAorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIgorbXNnc3RyICLEkeG7hyBxdXkgdsOgbyB0cm9uZyBtw7QtxJF1bi1jb24iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTU2Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbPC/Ekcaw4budbmcvZOG6q24+4oCmXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMTIKK21zZ2lkICJjaGVjayBpZiBpdCBpcyBzYWZlIHRvIHdyaXRlIHRvIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICJjaOG7jW4gbuG6v3UgbsOzIGzDoCBhbiB0b8OgbiDEkeG7gyBnaGkgdsOgbyB04bqtcCB0aW4gLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjE1Cittc2dpZCAidW5zZXQgdGhlIGNvbmZpZyBpbiB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAiYuG7jyDEkeG6t3QgY+G6pXUgaMOsbmggdHJvbmcgdOG6rXAgdGluIC5naXRtb2R1bGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIyMAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgPG5hbWU+IFs8dmFsdWU+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA8dMOqbj4gWzxnacOhIHRy4buLPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjIxCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLXVuc2V0IDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLXVuc2V0IDx0w6puPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMjIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI0MSBnaXQtc3VibW9kdWxlLnNoOjE3NAorIywgc2gtZm9ybWF0Cittc2dpZCAicGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGlzIGluIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgImjDo3kgxJHhuqNtIGLhuqNvIHLhurFuZyB04bqtcCB0aW4gLmdpdG1vZHVsZXMgY8OzIHRyb25nIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjkxIGdpdC5jOjQzMyBnaXQuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lc24ndCBzdXBwb3J0IC0tc3VwZXItcHJlZml4IgorbXNnc3RyICIlcyBraMO0bmcgaOG7lyB0cuG7oyAtLXN1cGVyLXByZWZpeCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBzdWJtb2R1bGUtLWhlbHBlciBzdWJjb21tYW5kIgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgcGjhuqNpIGzDoCBs4buHbmggY29uIHN1Ym1vZHVsZS0taGVscGVyIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OAorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgWzxjw6FjIHTDuXkgY2jhu41uPl0gPHTDqm4+IFs8dC5jaGnhur91Pl0iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OQorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bmFtZT4iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8dMOqbj4iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDAKK21zZ2lkICJzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGZvciBub24tc3ltYm9saWMgKGRldGFjaGVkKSByZWZzIgorbXNnc3RyICJjaOG6t24gY8OhYyB0aMO0bmcgdGluIGzhu5dpIGNobyBjw6FjIHRoYW0gY2hp4bq/dSDigJxraMO0bmctbeG7gW3igJ0gKGLhu4sgdMOhY2ggcmEpIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAieMOzYSB0aGFtIGNoaeG6v3UgbeG7gW0iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDIKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgImzDoG0gbmfhuq9uIGvhur90IHh14bqldCByZWYgKHRoYW0gY2hp4bq/dSkiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIgorbXNnc3RyICJsw70gZG8iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIG9mIHRoZSB1cGRhdGUiCittc2dzdHIgImzDvSBkbyBj4bqtcCBuaOG6rXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjUKK21zZ2lkICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl1cbiIKKyJcdFx0PHRhZ25hbWU+IFs8aGVhZD5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDx04bqtcC10aW4+XVxuIgorIlx0XHQ8dMOqbi10aOG6uz4gWzxoZWFkPl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjcKK21zZ2lkICJnaXQgdGFnIC1kIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtZCA8dMOqbi10aOG6uz7igKYiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjgKK21zZ2lkICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPGNvbW1pdD5dIFstLSIKKyJwb2ludHMtYXQgPG9iamVjdD5dXG4iCisiXHRcdFstLWZvcm1hdD08Zm9ybWF0Pl0gWy0tW25vLV1tZXJnZWQgWzxjb21taXQ+XV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIC1sIFstbls8c+G7kT5dXSBbLS1jb250YWlucyA8bOG6p25fY2h1eeG7g25fZ2lhbz5dIFstLW5vLWNvbnRhaW5zICIKKyI8bOG6p25fY2h1eeG7g25fZ2lhbz5dIFstLXBvaW50cy1hdCA8xJHhu5FpLXTGsOG7o25nPl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTzEkeG7i25oX2ThuqFuZz5dIFstLVtuby1dbWVyZ2VkIFs8bOG6p25fY2h1eeG7g25fZ2lhbz5dXSBbPG3huqt1PuKApl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzAKK21zZ2lkICJnaXQgdGFnIC12IFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC12IFstLWZvcm1hdD08xJHhu4tuaF9k4bqhbmc+XSAgPHTDqm4tdGjhurs+4oCmIgorCisjOiBidWlsdGluL3RhZy5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgImtow7RuZyB0w6xtIHRo4bqleSB0w6xtIHRo4bqleSB0aOG6uyDigJwlc+KAnS4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiVGjhursgxJHDoyBi4buLIHjDs2Eg4oCcJXPigJ0gKHThu6tuZyBsw6AgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlZp4bq/dCBjw6FjIGdoaSBjaMO6IGNobyB0aOG6uzpcbiIKKyIgICVzXG4iCisiTmjhu69uZyBkw7JuZyDEkcaw4bujYyBi4bqvdCDEkeG6p3UgYuG6sW5nIOKAnCVj4oCdIHPhur0gxJHGsOG7o2MgYuG7jyBxdWEuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3UgIgorIndhbnQgdG8uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWaeG6v3QgY8OhYyBnaGkgY2jDuiBjaG8gdGjhurs6XG4iCisiICAlc1xuIgorIk5o4buvbmcgZMOybmcgxJHGsOG7o2MgYuG6r3QgxJHhuqd1IGLhurFuZyDigJwlY+KAnSBz4bq9IMSRxrDhu6NjIGdp4buvIGzhuqFpOyBi4bqhbiBjw7MgdGjhu4MgeMOzYSBjaMO6bmcgxJFpICIKKyJu4bq/dSBtdeG7kW4uXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTk4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGvDvSB0aOG6uyIKKworIzogYnVpbHRpbi90YWcuYzoyMDAKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgdsOgbyB04bqtcCB0aW4gbMawdSB0aOG6uyIKKworIzogYnVpbHRpbi90YWcuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIGNyZWF0ZWQgYSBuZXN0ZWQgdGFnLiBUaGUgb2JqZWN0IHJlZmVycmVkIHRvIGJ5IHlvdXIgbmV3IHRhZyBpc1xuIgorImFscmVhZHkgYSB0YWcuIElmIHlvdSBtZWFudCB0byB0YWcgdGhlIG9iamVjdCB0aGF0IGl0IHBvaW50cyB0bywgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKK21zZ3N0ciAiIgorIkLhuqFuIMSRw6MgdOG6oW8gbeG7mXQgdGjhursgbOG7k25nIG5oYXUuIMSQ4buRaSB0xrDhu6NuZyDEkcaw4bujYyBjaOG7iSDEkeG6v24gdGjhursgbeG7m2kgY+G7p2EgYuG6oW4gbMOgXG4iCisixJHDoyBsw6AgbeG7mXQgdGjhursuIE7hur91IMO9IGLhuqFuIGzDoCBn4bqvbiB0aOG6uyDEkeG7kWkgdMaw4bujbmcgbcOgIG7DsyB0cuG7jyDEkeG6v24sIHPhu60gZOG7pW5nOlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKKworIzogYnVpbHRpbi90YWcuYzoyMzIKK21zZ2lkICJiYWQgb2JqZWN0IHR5cGUuIgorbXNnc3RyICJraeG7g3UgxJHhu5FpIHTGsOG7o25nIHNhaS4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mjg0Cittc2dpZCAibm8gdGFnIG1lc3NhZ2U/IgorbXNnc3RyICJraMO0bmcgY8OzIGNow7ogdGjDrWNoIGfDrCBjaG8gY2hvIHRo4bq7IMOgPyIKKworIzogYnVpbHRpbi90YWcuYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiTuG7mWkgZHVuZyBnaGkgY2jDuiBjw7JuIGzhuqFpICVzXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAyCittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgImNo4buJIGxp4buHdCBrw6ogdMOqbiBjw6FjIHRo4bq7IgorCisjOiBidWlsdGluL3RhZy5jOjQwNAorbXNnaWQgInByaW50IDxuPiBsaW5lcyBvZiBlYWNoIHRhZyBtZXNzYWdlIgorbXNnc3RyICJoaeG7g24gdGjhu4sgPG4+IGTDsm5nIGNobyBt4buXaSBnaGkgY2jDuiIKKworIzogYnVpbHRpbi90YWcuYzo0MDYKK21zZ2lkICJkZWxldGUgdGFncyIKK21zZ3N0ciAieMOzYSB0aOG6uyIKKworIzogYnVpbHRpbi90YWcuYzo0MDcKK21zZ2lkICJ2ZXJpZnkgdGFncyIKK21zZ3N0ciAidGjhuqltIHRyYSB0aOG6uyIKKworIzogYnVpbHRpbi90YWcuYzo0MDkKK21zZ2lkICJUYWcgY3JlYXRpb24gb3B0aW9ucyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gdOG6oW8gdGjhursiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDExCittc2dpZCAiYW5ub3RhdGVkIHRhZywgbmVlZHMgYSBtZXNzYWdlIgorbXNnc3RyICLEkeG7gyBjaMO6IGdp4bqjaSBjaG8gdGjhurssIGPhuqduIG3hu5l0IGzhu51pIGdoaSBjaMO6IgorCisjOiBidWlsdGluL3RhZy5jOjQxMworbXNnaWQgInRhZyBtZXNzYWdlIgorbXNnc3RyICJwaOG6p24gY2jDuiB0aMOtY2ggY2hvIHRo4bq7IgorCisjOiBidWlsdGluL3RhZy5jOjQxNQorbXNnaWQgImZvcmNlIGVkaXQgb2YgdGFnIG1lc3NhZ2UiCittc2dzdHIgIsOpcCBideG7mWMgc+G7rWEgdGjhursgbOG6p24gY29tbWl0IgorCisjOiBidWlsdGluL3RhZy5jOjQxNgorbXNnaWQgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciCittc2dzdHIgInRo4bq7IGNow7ogZ2nhuqNpIHbDoCBrw70ga2nhu4N1IEdQRyIKKworIzogYnVpbHRpbi90YWcuYzo0MTkKK21zZ2lkICJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJkw7luZyBraMOhbyBraMOhYyDEkeG7gyBrw70gdGjhursiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIwCittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAidGhheSB0aOG6vyBu4bq/dSB0aOG6uyDEkcOzIMSRw6MgY8OzIHRyxrDhu5tjIgorCisjOiBidWlsdGluL3RhZy5jOjQyMSBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjkKK21zZ2lkICJjcmVhdGUgYSByZWZsb2ciCittc2dzdHIgInThuqFvIG3hu5l0IHJlZmxvZyIKKworIzogYnVpbHRpbi90YWcuYzo0MjMKK21zZ2lkICJUYWcgbGlzdGluZyBvcHRpb25zIgorbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIGxp4buHdCBrw6ogdGjhursiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI0Cittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICJoaeG7g24gdGjhu4sgZGFuaCBzw6FjaCB0aOG6uyB0cm9uZyBjw6FjIGPhu5l0IgorCisjOiBidWlsdGluL3RhZy5jOjQyNSBidWlsdGluL3RhZy5jOjQyNworbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIG5o4buvbmcgbmjDoW5oIG3DoCBuw7MgY2jhu6lhIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI2IGJ1aWx0aW4vdGFnLmM6NDI4Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyB0aOG6uyBtw6AgbsOzIGtow7RuZyBjaOG7qWEgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi90YWcuYzo0MjkKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyB0aOG6uyBtw6AgbsOzIMSRxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyB0aOG6uyBtw6AgbsOzIGtow7RuZyDEkcaw4bujYyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi90YWcuYzo0MzQKK21zZ2lkICJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIGPDoWMgdGjhursgY+G7p2EgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3RhZy5jOjQ4MgorbXNnaWQgIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiB2w6AgLW4geHVuZyBraOG6r2MgbmhhdSIKKworIzogYnVpbHRpbi90YWcuYzo1MDQKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAidMO5eSBjaOG7jW4gLW4gY2jhu4kgY2hvIHBow6lwIGTDuW5nIHRyb25nIGNo4bq/IMSR4buZIGxp4buHdCBrw6oiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA2Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAidMO5eSBjaOG7jW4gLS1jb250YWlucyBjaOG7iSBjaG8gcGjDqXAgZMO5bmcgdHJvbmcgY2jhur8gxJHhu5kgbGnhu4d0IGvDqiIKKworIzogYnVpbHRpbi90YWcuYzo1MDgKK21zZ2lkICItLW5vLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJ0w7l5IGNo4buNbiAtLW5vLWNvbnRhaW5zIGNo4buJIGNobyBwaMOpcCBkw7luZyB0cm9uZyBjaOG6vyDEkeG7mSBsaeG7h3Qga8OqIgorCisjOiBidWlsdGluL3RhZy5jOjUxMAorbXNnaWQgIi0tcG9pbnRzLWF0IG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJ0w7l5IGNo4buNbiAtLXBvaW50cy1hdCBjaOG7iSBjaG8gcGjDqXAgZMO5bmcgdHJvbmcgY2jhur8gxJHhu5kgbGnhu4d0IGvDqiIKKworIzogYnVpbHRpbi90YWcuYzo1MTIKK21zZ2lkICItLW1lcmdlZCBhbmQgLS1uby1tZXJnZWQgb3B0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiIgorInTDuXkgY2jhu41uIC0tbWVyZ2VkIHbDoCAtLW5vLW1lcmdlZCBjaOG7iSBjaG8gcGjDqXAgZMO5bmcgdHJvbmcgY2jhur8gxJHhu5kgbGnhu4d0IGvDqiIKKworIzogYnVpbHRpbi90YWcuYzo1MjMKK21zZ2lkICJvbmx5IG9uZSAtRiBvciAtbSBvcHRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgImNo4buJIGPDsyBt4buZdCB0w7l5IGNo4buNbiAtRiBob+G6t2MgLW0gbMOgIMSRxrDhu6NjIHBow6lwLiIKKworIzogYnVpbHRpbi90YWcuYzo1NDIKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgInF1w6Egbmhp4buBdSDEkeG7kWkgc+G7kSIKKworIzogYnVpbHRpbi90YWcuYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBwaOG6o2kgdGjhursgaOG7o3AgbOG7hy4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJ0aOG6uyDigJwlc+KAnSDEkcOjIHThu5NuIHThuqFpIHLhu5NpIgorCisjOiBidWlsdGluL3RhZy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIsSQw6MgY+G6rXAgbmjhuq10IHRo4bq7IOKAnCVz4oCdICh0csaw4bubYyBsw6AgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1MDIKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAixJBhbmcgZ2nhuqNpIG7DqW4gY8OhYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgInThuqFvIHRoxrAgbeG7pWMgXCIlc1wiIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB04bqhbyB04bqtcCB0aW4gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHjDs2EgdOG6rXAgdGluICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNSBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHjDs2EgdGjGsCBt4bulYyAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGVzdGluZyBtdGltZSBpbiAnJXMnICIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRo4butIG10aW1lIHRyb25nIOKAnCVz4oCdICIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNTQKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZmlsZSIKK21zZ3N0ciAidGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB0aMawIG3hu6VjIGtow7RuZyB0aGF5IMSR4buVaSBzYXUga2hpIHRow6ptIHThuq1wIHRpbiBt4bubaSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNjcKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICJ0aMO0bmcgdGluIHRo4buRbmcga8OqIHRoxrAgbeG7pWMga2jDtG5nIHRoYXkgxJHhu5VpIHNhdSBraGkgdGjDqm0gdGjGsCBt4bulYyBt4bubaSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxODAKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgdXBkYXRpbmcgYSBmaWxlIgorbXNnc3RyICJ0aMO0bmcgdGluIHRo4buRbmcga8OqIHRoxrAgbeG7pWMgdGhheSDEkeG7lWkgc2F1IGtoaSBj4bqtcCBuaOG6rXQgdOG6rXAgdGluIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5MQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciBhZGRpbmcgYSBmaWxlIGluc2lkZSBzdWJkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJ0aMO0bmcgdGluIHRo4buRbmcga8OqIHRoxrAgbeG7pWMgdGhheSDEkeG7lWkgc2F1IGtoaSB0aMOqbSB04bqtcCB0aW4gbeG7m2kgdsOgbyB0cm9uZyB0aMawICIKKyJt4bulYyBjb24iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjAyCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBmaWxlIgorbXNnc3RyICJ0aMO0bmcgdGluIHRo4buRbmcga8OqIHRoxrAgbeG7pWMga2jDtG5nIHRoYXkgxJHhu5VpIHNhdSBraGkgeMOzYSB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjE1Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBkaXJlY3RvcnkiCittc2dzdHIgInRow7RuZyB0aW4gdGjhu5FuZyBrw6ogdGjGsCBt4bulYyBraMO0bmcgdGhheSDEkeG7lWkgc2F1IGtoaSB4w7NhIHRoxrAgbeG7pWMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIyCittc2dpZCAiIE9LIgorbXNnc3RyICIgxJDhu5NuZyDDvSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo1OTEKK21zZ2lkICJnaXQgdXBkYXRlLWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCB1cGRhdGUtaW5kZXggWzxjw6FjIHTDuXkgY2jhu41uPl0gWy0tXSBbPHThuq1wLXRpbj7igKZdIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NAorbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAidGnhur9wIHThu6VjIGzDoG0gbeG7m2kgbmdheSBj4bqjIGtoaSBi4bqjbmcgbeG7pWMgbOG7pWMgY+G6p24gxJHGsOG7o2MgY+G6rXAgbmjhuq10IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NworbXNnaWQgInJlZnJlc2g6IGlnbm9yZSBzdWJtb2R1bGVzIgorbXNnc3RyICJyZWZyZXNoOiBs4budIMSRaSBtw7QtxJF1bi1jb24iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgwCittc2dpZCAiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiCittc2dzdHIgImtow7RuZyBi4buPIHF1YSBjw6FjIHThuq1wIHRpbiBt4bubaSB04bqhbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODIKK21zZ2lkICJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIKK21zZ3N0ciAixJHhu4MgY8OhYyB04bqtcCB0aW4gdGhheSB0aOG6vyBjw6FjIHRoxrAgbeG7pWMgdsOgIOKAnHZpY2UtdmVyc2HigJ0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg0Cittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAidGjDtG5nIGLDoW8gY8OhYyB04bqtcC10aW4gdGhp4bq/dSB0cm9uZyB0aMawLW3hu6VjIGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NgorbXNnaWQgInJlZnJlc2ggZXZlbiBpZiBpbmRleCBjb250YWlucyB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICIiCisibMOgbSB0xrDGoWkgbeG7m2kgdGjhuq1tIGNow60ga2hpIGLhuqNuZyBt4bulYyBs4bulYyBjaOG7qWEgY8OhYyBt4bulYyB0aW4gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg5Cittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICJs4bqleSBs4bqhaSB0aMO0bmcgdGluIHRo4buRbmcga8OqIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5MworbXNnaWQgImxpa2UgLS1yZWZyZXNoLCBidXQgaWdub3JlIGFzc3VtZS11bmNoYW5nZWQgc2V0dGluZyIKK21zZ3N0ciAiZ2nhu5FuZyAtLXJlZnJlc2gsIG5oxrBuZyBi4buPIHF1YSBjw6FjIGPDoGkgxJHhurd0IOKAnGFzc3VtZS11bmNoYW5nZWTigJ0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk3Cittc2dpZCAiPG1vZGU+LDxvYmplY3Q+LDxwYXRoPiIKK21zZ3N0ciAiPGNo4bq/X8SR4buZPiw8xJHhu5FpX3TGsOG7o25nPiw8xJHGsOG7nW5nX2ThuqtuPiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTgKK21zZ2lkICJhZGQgdGhlIHNwZWNpZmllZCBlbnRyeSB0byB0aGUgaW5kZXgiCittc2dzdHIgInRow6ptIGPDoWMgdOG6rXAgdGluIMSRw6MgY2jhu4kgcmEgdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwOAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAixJHDoW5oIGThuqV1IGPDoWMgdOG6rXAgdGluIGzDoCBcImtow7RuZyB0aGF5IMSR4buVaVwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTEKK21zZ2lkICJjbGVhciBhc3N1bWVkLXVuY2hhbmdlZCBiaXQiCittc2dzdHIgInjDs2EgYsOtdCBhc3N1bWVkLXVuY2hhbmdlZCAoZ2nhuqMgxJHhu4tuaCBsw6Aga2jDtG5nIHRoYXkgxJHhu5VpKSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE0Cittc2dpZCAibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIKK21zZ3N0ciAixJHDoW5oIGThuqV1IGPDoWMgdOG6rXAgdGluIGzDoCDigJxjaOG7iS3EkeG7jWPigJ0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNworbXNnaWQgImNsZWFyIHNraXAtd29ya3RyZWUgYml0IgorbXNnc3RyICJ4w7NhIGLDrXQgc2tpcC13b3JrdHJlZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIwCittc2dpZCAiZG8gbm90IHRvdWNoIGluZGV4LW9ubHkgZW50cmllcyIKK21zZ3N0ciAixJHhu6tuZyDEkeG7mW5nIHbDoG8gY8OhYyBt4bulYyBpbmRleC1vbmx5IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjIKK21zZ2lkICJhZGQgdG8gaW5kZXggb25seTsgZG8gbm90IGFkZCBjb250ZW50IHRvIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorImNo4buJIHRow6ptIHbDoG8gYuG6o25nIG3hu6VjIGzhu6VjOyBraMO0bmcgdGjDqm0gbuG7mWkgZHVuZyB2w6BvIGPGoSBz4bufIGThu68gbGnhu4d1IMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI0Cittc2dpZCAicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIKK21zZ3N0ciAiIgorImfhu6EgYuG7jyBjw6FjIMSRxrDhu51uZyBk4bqrbiDEkcaw4bujYyDEkeG6t3QgdMOqbiB0aOG6rW0gY2jDrSBj4bqjIGtoaSBuw7MgaGnhu4duIGRp4buHbiB0cm9uZyB0aMawIG3hu6VjICIKKyJsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI2Cittc2dpZCAid2l0aCAtLXN0ZGluOiBpbnB1dCBsaW5lcyBhcmUgdGVybWluYXRlZCBieSBudWxsIGJ5dGVzIgorbXNnc3RyICJ24bubaSB0w7l5IGNo4buNbiAtLXN0ZGluOiBjw6FjIGTDsm5nIMSR4bqndSB2w6BvIMSRxrDhu6NjIGNo4bqlbSBk4bupdCBi4bufaSBrw70gdOG7sSBudWxsIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjgKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLEkeG7jWMgZGFuaCBzw6FjaCDEkcaw4budbmcgZOG6q24gY+G6p24gY+G6rXAgbmjhuq10IHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDMyCittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgY8OhYyBt4bulYyB04burIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4gdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzNgorbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAicGjhu6VjIGjhu5NpIGPDoWMgdHLhuqFuZyB0aMOhaSAjMiB2w6AgIzMgY2hvIGPDoWMgxJHGsOG7nW5nIGThuqtuIMSRxrDhu6NjIGxp4buHdCBrw6oiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0MAorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICJjaOG7iSBj4bqtcCBuaOG6rXQgY8OhYyBt4bulYyB0aW4gbcOgIG7DsyBraMOhYyBiaeG7h3Qgc28gduG7m2kgSEVBRCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ0Cittc2dpZCAiaWdub3JlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiYuG7jyBxdWEgY8OhYyB04bqtcC10aW4gdGhp4bq/dSB0cm9uZyB0aMawLW3hu6VjIGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDcKK21zZ2lkICJyZXBvcnQgYWN0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgImLDoW8gY8OhbyBjw6FjIHRoYW8gdMOhYyByYSB0aGnhur90IGLhu4sgeHXhuqV0IGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0OQorbXNnaWQgIihmb3IgcG9yY2VsYWlucykgZm9yZ2V0IHNhdmVkIHVucmVzb2x2ZWQgY29uZmxpY3RzIgorbXNnc3RyICIoY2hvIOKAnHBvcmNlbGFpbnPigJ0pIHF1w6puIGPDoWMgeHVuZyDEkeG7mXQgY2jGsGEgxJHGsOG7o2MgZ2nhuqNpIHF1eeG6v3QgxJHDoyBnaGkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1MworbXNnaWQgIndyaXRlIGluZGV4IGluIHRoaXMgZm9ybWF0IgorbXNnc3RyICJnaGkgbeG7pWMgbOG7pWMg4bufIMSR4buLbmggZOG6oW5nIG7DoHkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICJi4bqtdC904bqvdCBjaGlhIGPhuq90IGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU3Cittc2dpZCAiZW5hYmxlL2Rpc2FibGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICJi4bqtdC904bqvdCBi4buZIMSR4buHbSBraMO0bmcgdGhlbyB24bq/dCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU5Cittc2dpZCAidGVzdCBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgImtp4buDbSB0cmEgeGVtIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OzIGjhu5cgdHLhu6MgxJHhu4dtIGtow7RuZyB0aGVvIGTDtWkgaGF5IGtow7RuZyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDYxCittc2dpZCAiZW5hYmxlIHVudHJhY2tlZCBjYWNoZSB3aXRob3V0IHRlc3RpbmcgdGhlIGZpbGVzeXN0ZW0iCittc2dzdHIgImLhuq10IGLhu5kgxJHhu4dtIGtow7RuZyB0aGVvIHbhur90IG3DoCBraMO0bmcga2nhu4NtIHRyYSBo4buHIHRo4buRbmcgdOG6rXAgdGluIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjMKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGluZGV4IGV2ZW4gaWYgaXMgbm90IGZsYWdnZWQgYXMgY2hhbmdlZCIKK21zZ3N0ciAiZ2hpIHJhIG3hu6VjIGzhu6VjIG5nYXkgY+G6oyBraGkga2jDtG5nIMSRxrDhu6NjIMSRw6FuaCBj4budIGzDoCBjw7MgdGhheSDEkeG7lWkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIGZpbGUgc3lzdGVtIG1vbml0b3IiCittc2dzdHIgImLhuq10L3Thuq90IHRoZW8gZMO1aSBo4buHIHRo4buRbmcgdOG6rXAgdGluIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjcKK21zZ2lkICJtYXJrIGZpbGVzIGFzIGZzbW9uaXRvciB2YWxpZCIKK21zZ3N0ciAixJHDoW5oIGThuqV1IGPDoWMgdOG6rXAgdGluIGzDoCBo4bujcCBs4buHIGZzbW9uaXRvciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDcwCittc2dpZCAiY2xlYXIgZnNtb25pdG9yIHZhbGlkIGJpdCIKK21zZ3N0ciAieMOzYSBiw610IGjhu6NwIGzhu4cgZnNtb25pdG9yIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNzMKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJlbmFibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggxJHGsOG7o2MgxJHhurd0IGzDoCBzYWk7IHjDs2EgYuG7jyBoYXkgdGhheSDEkeG7lWkgbsOzLCBu4bq/dSBi4bqhbiB0aOG7sWMgc+G7sSAiCisibXXhu5FuIGLhuq10IGNoaWEgdMOhY2ggbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE4MgorbXNnaWQgIiIKKyJjb3JlLnNwbGl0SW5kZXggaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiIgorImNvcmUuc3BsaXRJbmRleCDEkcaw4bujYyDEkeG6t3QgbMOgIMSRw7puZzsgeMOzYSBi4buPIGhheSB0aGF5IMSR4buVaSBuw7MsIG7hur91IGLhuqFuIHRo4buxYyBz4buxICIKKyJtdeG7kW4gdOG6r3QgY2hpYSB0w6FjaCBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk0Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZGlzYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSDEkcaw4bujYyDEkeG6t3QgbMOgIMSRw7puZzsgeMOzYSBi4buPIGhheSB0aGF5IMSR4buVaSBuw7MsIG7hur91IGLhuqFuIHRo4buxYyAiCisic+G7sSBtdeG7kW4gdOG6r3QgYuG7mSDEkeG7h20gY2jGsGEgdGhlbyBkw7VpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTgKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIk5o4bubIMSR4buHbSBraMO0bmcgdGhlbyB24bq/dCBi4buLIHThuq90IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMDYKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZW5hYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIMSRxrDhu6NjIMSR4bq3dCBsw6Agc2FpOyB4w7NhIGLhu48gaGF5IHRoYXkgxJHhu5VpIG7DsywgbuG6v3UgYuG6oW4gdGjhu7FjIHPhu7EgIgorIm114buRbiBi4bqtdCBi4buZIMSR4buHbSBjaMawYSB0aGVvIGTDtWkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZW5hYmxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiTmjhu5sgxJHhu4dtIGtow7RuZyB0aGVvIHbhur90IMSRxrDhu6NjIGLhuq10IGNobyDigJwlc+KAnSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjE4Cittc2dpZCAiY29yZS5mc21vbml0b3IgaXMgdW5zZXQ7IHNldCBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZW5hYmxlIGZzbW9uaXRvciIKK21zZ3N0ciAiIgorImNvcmUuZnNtb25pdG9yIGNoxrBhIMSRxrDhu6NjIMSR4bq3dDsgxJHhurd0IG7DsyBu4bq/dSBi4bqhbiB0aOG7sWMgc+G7sSBtdeG7kW4gYuG6rXQgdGhlbyBkw7VpIGjhu4cgIgorInRo4buRbmcgdOG6rXAgdGluIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjIKK21zZ2lkICJmc21vbml0b3IgZW5hYmxlZCIKK21zZ3N0ciAiZnNtb25pdG9yIMSRxrDhu6NjIGLhuq10IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjUKK21zZ2lkICIiCisiY29yZS5mc21vbml0b3IgaXMgc2V0OyByZW1vdmUgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGRpc2FibGUgZnNtb25pdG9yIgorbXNnc3RyICIiCisiY29yZS5mc21vbml0b3IgxJHDoyDEkcaw4bujYyDEkeG6t3Q7IGLhu48gxJHhurd0IG7DsyBu4bq/dSBi4bqhbiB0aOG7sWMgc+G7sSBtdeG7kW4gYuG6rXQgdGhlbyBkw7VpIGjhu4cgIgorInRo4buRbmcgdOG6rXAgdGluIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjkKK21zZ2lkICJmc21vbml0b3IgZGlzYWJsZWQiCittc2dzdHIgImZzbW9uaXRvciBi4buLIHThuq90IgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMAorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC1kIDxyZWZuYW1lPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxjw6FjIHTDuXkgY2jhu41uPl0gLWQgPHJlZm5hbWU+IFs8Ymnhur9uLWPFqT5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMQorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dICAgIDxyZWZuYW1lPiA8bmV3LXZhbD4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8Y8OhYyB0w7l5IGNo4buNbj5dICAgIDxyZWZuYW1lPiA8Ymnhur9uLW3hu5tpPiBbPGJp4bq/bi1jxak+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTIKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtLXN0ZGluIFstel0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8Y8OhYyB0w7l5IGNo4buNbj5dIC0tc3RkaW4gWy16XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY0Cittc2dpZCAiZGVsZXRlIHRoZSByZWZlcmVuY2UiCittc2dzdHIgInjDs2EgdGhhbSBjaGnhur91IgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjYKK21zZ2lkICJ1cGRhdGUgPHJlZm5hbWU+IG5vdCB0aGUgb25lIGl0IHBvaW50cyB0byIKK21zZ3N0ciAiY+G6rXAgbmjhuq10IDx0w6puLXRoYW0tY2hp4bq/dT4ga2jDtG5nIHBo4bqjaSBjw6FpIG7DsyBjaOG7iSB04bubaSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIKK21zZ3N0ciAixJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiBjw7MgY8OhYyDEkeG7kWkgc+G7kSDEkcaw4bujYyBjaOG6pW0gZOG7qXQgYuG7n2kgTlVMIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjgKK21zZ2lkICJyZWFkIHVwZGF0ZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAixJHhu41jIGPhuq1wIG5o4bqtdCB04burIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6NworbXNnaWQgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorbXNnc3RyICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNQorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgImPhuq1wIG5o4bqtdCBjw6FjIHThuq1wIHRpbiB0aMO0bmcgdGluIHThu6sgxJFp4buDbSB4deG6pXQgcGjDoXQiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoxMQorbXNnaWQgImdpdCB1cGxvYWQtcGFjayBbPG9wdGlvbnM+XSA8ZGlyPiIKK21zZ3N0ciAiZ2l0IHVwbG9hZC1wYWNrIFs8Y8OhYyB0w7l5IGNo4buNbj5dIDwvxJHGsOG7nW5nL2ThuqtuPiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjIzIHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzoxNworbXNnaWQgInF1aXQgYWZ0ZXIgYSBzaW5nbGUgcmVxdWVzdC9yZXNwb25zZSBleGNoYW5nZSIKK21zZ3N0ciAidGhvw6F0IHNhdSBraGkgbeG7mXQgdHJhbyDEkeG7lWkgecOqdSBj4bqndSBoYXkgdHLhuqMgbOG7nWkgxJHGoW4iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyNQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCIKK21zZ3N0ciAidGhvw6F0IG5nYXkgc2F1IGtoaSBraOG7n2kgdOG6oW8gcXXhuqNuZyBjw6FvIHRoYW0gY2hp4bq/dSIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI3Cittc2dpZCAiZG8gbm90IHRyeSA8ZGlyZWN0b3J5Pi8uZ2l0LyBpZiA8ZGlyZWN0b3J5PiBpcyBubyBHaXQgZGlyZWN0b3J5IgorbXNnc3RyICLEkeG7q25nIHRo4butIDx0aMawX23hu6VjPi8uZ2l0LyBu4bq/dSA8dGjGsF9t4bulYz4ga2jDtG5nIHBo4bqjaSBsw6AgdGjGsCBt4bulYyBHaXQiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyOQorbXNnaWQgImludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5IgorbXNnc3RyICJuZ+G6r3QgdHJ1eeG7gW4gdGjDtG5nIHNhdSA8bj4gZ2nDonkga2jDtG5nIGhv4bqhdCDEkeG7mW5nIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxOQorbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGzhuqduX2NodXnhu4NuX2dpYW8+4oCmIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo2OAorbXNnaWQgInByaW50IGNvbW1pdCBjb250ZW50cyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIG7hu5lpIGR1bmcgY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjkgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzcKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgImluIGvhur90IHh14bqldCB0cuG6oW5nIHRow6FpIGdwZyBk4bqhbmcgdGjDtCIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU1Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxnw7NpPuKApiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY1Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAiY2hpIHRp4bq/dCIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY3Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyB0aOG7kW5nIGvDqiIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MTgKK21zZ2lkICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTzEkeG7i25oX2ThuqFuZz5dIDx0aOG6uz7igKYiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM2Cittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgbuG7mWkgZHVuZyBj4bunYSB0aOG6uyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE3Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gWzxjb21taXQtaXNoPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBhZGQgWzxjw6FjIHTDuXkgY2jhu41uPl0gPC/Ekcaw4budbmcvZOG6q24+IFs8Y29tbWl0LWlzaD5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTgKK21zZ2lkICJnaXQgd29ya3RyZWUgbGlzdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxpc3QgWzxjw6FjIHTDuXkgY2jhu41uPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOQorbXNnaWQgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B0aW9ucz5dIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxjw6FjIHTDuXkgY2jhu41uPl0gPC/Ekcaw4budbmcvZOG6q24+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjAKK21zZ2lkICJnaXQgd29ya3RyZWUgbW92ZSA8d29ya3RyZWU+IDxuZXctcGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBtb3ZlIDx3b3JrdHJlZT4gPC/Ekcaw4budbmcvZOG6q24vbeG7m2k+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjEKK21zZ2lkICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBwcnVuZSBbPGPDoWMgdMO5eSBjaOG7jW4+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIyCittc2dpZCAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPG9wdGlvbnM+XSA8d29ya3RyZWU+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgcmVtb3ZlIFs8Y8OhYyB0w7l5IGNo4buNbj5dIDx3b3JrdHJlZT4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMworbXNnaWQgImdpdCB3b3JrdHJlZSB1bmxvY2sgPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgdW5sb2NrIDwvxJHGsOG7nW5nL2ThuqtuPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjYwIGJ1aWx0aW4vd29ya3RyZWUuYzo4OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgeMOzYSDigJwlc+KAnSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogbm90IGEgdmFsaWQgZGlyZWN0b3J5IgorbXNnc3RyICJH4buhIGLhu48gY8OieSBsw6BtIHZp4buHYy8lczoga2jDtG5nIHBo4bqjaSBsw6AgdGjGsCBt4bulYyBo4bujcCBs4buHIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiR+G7oSBi4buPIGPDonkgbMOgbSB2aeG7h2MvJXM6IGtow7RuZyBjw7MgdOG6rXAgdGluIGdpdGRpciIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkwIGJ1aWx0aW4vd29ya3RyZWUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHVuYWJsZSB0byByZWFkIGdpdGRpciBmaWxlICglcykiCittc2dzdHIgIkfhu6EgYuG7jyBjw6J5IGzDoG0gdmnhu4djLyVzOiBraMO0bmcgdGjhu4MgxJHhu41jIHThuq1wIHRpbiBnaXRkaXIgKCVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBzaG9ydCByZWFkIChleHBlY3RlZCAlPFBSSXVNQVg+IGJ5dGVzLCByZWFkICIKKyIlPFBSSXVNQVg+KSIKK21zZ3N0ciAiR+G7oSBi4buPIGPDonkgbMOgbSB2aeG7h2MvJXM6IMSR4buNYyBuZ+G6r24gKGPhuqduICU8UFJJdU1BWD4gYnl0ZSwgxJHhu41jICU8UFJJdU1BWD4pIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogaW52YWxpZCBnaXRkaXIgZmlsZSIKK21zZ3N0ciAiR+G7oSBi4buPIGPDonkgbMOgbSB2aeG7h2MvJXM6IHThuq1wIHRpbiBnaXRkaXIga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICJH4buhIGLhu48gY8OieSBsw6BtIHZp4buHYy8lczogdOG6rXAgdGluIGdpdGRpciBjaOG7iSDEkeG6v24gduG7iyB0csOtIGtow7RuZyB04buTbiB04bqhaSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiYsOhbyBjw6FvIGPDoWMgY8OieSBsw6BtIHZp4buHYyDEkcOjIHBydW5lIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY3Cittc2dpZCAiZXhwaXJlIHdvcmtpbmcgdHJlZXMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgImPDoWMgY8OieSBsw6BtIHZp4buHYyBo4bq/dCBo4bqhbiBjxakgaMahbiBraG/huqNuZyA8dGjhu51pIGdpYW4+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIuKAnCVz4oCdIMSRw6MgY8OzIHThu6sgdHLGsOG7m2MgcuG7k2kiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlLWFkZCB3b3JrdHJlZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdGjDqm0tbOG6oWkgY8OieSDigJwlc+KAnSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGxvY2tlZCB3b3JrdHJlZTtcbiIKKyJ1c2UgJ2FkZCAtZiAtZicgdG8gb3ZlcnJpZGUsIG9yICd1bmxvY2snIGFuZCAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisi4oCcJXPigJ0gYuG7iyBt4bqldCBuaMawbmcgY8OieSBsw6BtIHZp4buHYyBi4buLIGtow7NhO1xuIgorImTDuW5nIOKAnGFkZCAtZiAtZuKAnSDEkeG7gyBnaGkgxJHDqCwgaG/hurdjIOKAnHVubG9ja+KAnSB2w6Ag4oCccHJ1bmXigJ0gaGF5IOKAnHJlbW92ZeKAnSDEkeG7gyB4w7NhIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgYWxyZWFkeSByZWdpc3RlcmVkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mJyB0byBvdmVycmlkZSwgb3IgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIuKAnCVz4oCdIGLhu4sgbeG6pXQgbmjGsG5nIGPDonkgbMOgbSB2aeG7h2MgxJHDoyDEkcaw4bujYyDEkcSDbmcga8O9O1xuIgorImTDuW5nIOKAnGFkZCAtZuKAnSDEkeG7gyBnaGkgxJHDqCwgaG/hurdjIOKAnHBydW5l4oCdIGhheSDigJxyZW1vdmXigJ0gxJHhu4MgeMOzYSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdGjGsCBt4bulYyBj4bunYSDigJwlc+KAnSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzMiBidWlsdGluL3dvcmt0cmVlLmM6NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAobmV3IGJyYW5jaCAnJXMnKSIKK21zZ3N0ciAixJBhbmcgY2h14bqpbiBi4buLIGPDonkgbMOgbSB2aeG7h2MgKG5ow6FuaCBt4bubaSDigJwlc+KAnSkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChyZXNldHRpbmcgYnJhbmNoICclcyc7IHdhcyBhdCAlcykiCittc2dzdHIgIsSQYW5nIGNodeG6qW4gYuG7iyBjw6J5IGzDoG0gdmnhu4djICjEkWFuZyBjw6BpIMSR4bq3dCBuaMOhbmgg4oCcJXPigJ0sIHRyxrDhu5tjIMSRw6J5IHThuqFpICVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGNoZWNraW5nIG91dCAnJXMnKSIKK21zZ3N0ciAixJBhbmcgY2h14bqpbiBi4buLIGPDonkgbMOgbSB2aeG7h2MgKMSRYW5nIGzhuqV5IHJhIOKAnCVz4oCdKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGRldGFjaGVkIEhFQUQgJXMpIgorbXNnc3RyICLEkGFuZyBjaHXhuqluIGLhu4sgY8OieSBsw6BtIHZp4buHYyAoSEVBRCDEkcOjIHTDoWNoIHLhu51pIOKAnCVz4oCdKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5MAorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGV2ZW4gaWYgYWxyZWFkeSBjaGVja2VkIG91dCBpbiBvdGhlciB3b3JrdHJlZSIKK21zZ3N0ciAibOG6pXkgcmEgPG5ow6FuaD4gbmdheSBj4bqjIGtoaSBuw7MgxJHDoyDEkcaw4bujYyBs4bqleSByYSDhu58gY8OieSBsw6BtIHZp4buHYyBraMOhYyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5MworbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgInThuqFvIG5ow6FuaCBt4bubaSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5NQorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAidOG6oW8gaGF5IMSR4bq3dCBs4bqhaSBt4buZdCBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTcKK21zZ2lkICJwb3B1bGF0ZSB0aGUgbmV3IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiZGkgY2h1eeG7g24gY8OieSBsw6BtIHZp4buHYyBt4bubaSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5OAorbXNnaWQgImtlZXAgdGhlIG5ldyB3b3JraW5nIHRyZWUgbG9ja2VkIgorbXNnc3RyICJnaeG7ryBjw6J5IGzDoG0gdmnhu4djIG3hu5tpIGLhu4sga2jDs2EiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDEKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1icmFuY2goMSkpIgorbXNnc3RyICJjw6BpIMSR4bq3dCBjaOG6vyDEkeG7mSB0aGVvIGTDtWkgKHhlbSBnaXQtYnJhbmNoKDEpKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNAorbXNnaWQgInRyeSB0byBtYXRjaCB0aGUgbmV3IGJyYW5jaCBuYW1lIHdpdGggYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJjw7Mga2jhu5twIHTDqm4gdMOqbiBuaMOhbmggbeG7m2kgduG7m2kgbeG7mXQgbmjDoW5oIHRoZW8gZMO1aSBtw6F5IGNo4bunIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTEyCittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiAtYiwgLUIsIHbDoCAtLWRldGFjaCBsb+G6oWkgdOG7qyBs4bqrbiBuaGF1IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTczCittc2dpZCAiLS1bbm8tXXRyYWNrIGNhbiBvbmx5IGJlIHVzZWQgaWYgYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQiCittc2dzdHIgIi0tW25vLV10cmFjayBjaOG7iSBjw7MgdGjhu4MgxJHGsOG7o2MgZMO5bmcgbuG6v3UgbeG7mXQgbmjDoW5oIG3hu5tpIMSRxrDhu6NjIHThuqFvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjczCittc2dpZCAicmVhc29uIGZvciBsb2NraW5nIgorbXNnc3RyICJsw70gZG8ga2jDs2EiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2ODUgYnVpbHRpbi93b3JrdHJlZS5jOjcxOCBidWlsdGluL3dvcmt0cmVlLmM6NzkyCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIgorbXNnc3RyICIlcyBraMO0bmcgcGjhuqNpIGzDoCBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njg3IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjAKK21zZ2lkICJUaGUgbWFpbiB3b3JraW5nIHRyZWUgY2Fubm90IGJlIGxvY2tlZCBvciB1bmxvY2tlZCIKK21zZ3N0ciAiQ8OieSB0aMawIG3hu6VjIGzDoG0gdmnhu4djIGNow61uaCBraMO0bmcgdGjhu4Mga2jDs2EgaGF5IGLhu48ga2jDs2EgxJHGsOG7o2MiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCwgcmVhc29uOiAlcyIKK21zZ3N0ciAi4oCcJXPigJ0gxJHDoyDEkcaw4bujYyBraMOzYSBy4buTaSwgbMO9IGRvOiAlcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkIgorbXNnc3RyICLigJwlc+KAnSDEkcOjIMSRxrDhu6NjIGtow7NhIHLhu5NpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAi4oCcJXPigJ0gY2jGsGEgYuG7iyBraMOzYSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc2MworbXNnaWQgIndvcmtpbmcgdHJlZXMgY29udGFpbmluZyBzdWJtb2R1bGVzIGNhbm5vdCBiZSBtb3ZlZCBvciByZW1vdmVkIgorbXNnc3RyICJjw6J5IGzDoG0gdmnhu4djIGPDsyBjaOG7qWEgbcO0LcSRdW4tY29uIGtow7RuZyB0aOG7gyBkaSBjaHV54buDbiBoYXkgeMOzYSBi4buPIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzcxCittc2dpZCAiZm9yY2UgbW92ZSBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiw6lwIGJ14buZYyBuZ2F5IGPhuqMga2hpIGPDonkgbMOgbSB2aeG7h2MgxJFhbmcgYuG6qW4gaGF5IGLhu4sga2jDs2EiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTQgYnVpbHRpbi93b3JrdHJlZS5jOjkyMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGEgbWFpbiB3b3JraW5nIHRyZWUiCittc2dzdHIgIuKAnCVz4oCdIGzDoCBjw6J5IGzDoG0gdmnhu4djIGNow61uaCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmlndXJlIG91dCBkZXN0aW5hdGlvbiBuYW1lIGZyb20gJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6FjIGjhu41hIHJhIHTDqm4gxJHDrWNoIMSR4bq/biDigJwlc+KAnSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YXJnZXQgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAixJHDrWNoIOKAnCVz4oCdIMSRw6MgdOG7k24gdOG6oWkgcuG7k2kiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4MgZGkgY2h1eeG7g24gbeG7mXQgY8OieS1sw6BtLXZp4buHYyBi4buLIGtow7NhLCBraMOzYSB2w6w6ICVzXG4iCisiZMO5bmcg4oCcbW92ZSAtZiAtZuKAnSDEkeG7gyBnaGkgxJHDqCBob+G6t2MgbeG7nyBraMOzYSB0csaw4bubYyDEkcOjIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODE1Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyBkaSBjaHV54buDbiBt4buZdCBjw6J5LWzDoG0tdmnhu4djIGLhu4sga2jDs2E7XG4iCisiZMO5bmcg4oCcbW92ZSAtZiAtZuKAnSDEkeG7gyBnaGkgxJHDqCBob+G6t2MgbeG7nyBraMOzYSB0csaw4bubYyDEkcOjIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODE4CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICJ0aOG6qW0gdHJhIGfhurdwIGzhu5dpLCBraMO0bmcgdGjhu4MgZGkgY2h1eeG7g24gbeG7mXQgY8OieS1sw6BtLXZp4buHYzogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG1vdmUgJyVzJyB0byAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgY2h1eeG7g24g4oCcJXPigJ0gc2FuZyDigJwlc+KAnSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgY2jhuqF5IOKAnGdpdCBzdGF0dXPigJ0gdsOgbyDigJwlc+KAnSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNvbnRhaW5zIG1vZGlmaWVkIG9yIHVudHJhY2tlZCBmaWxlcywgdXNlIC0tZm9yY2UgdG8gZGVsZXRlIGl0IgorbXNnc3RyICIiCisi4oCcJXPigJ0gY8OzIGNo4bupYSBjw6FjIHThuq1wIHRpbiDEkcOjIGLhu4sgc+G7rWEgY2jhu69hIGhv4bq3YyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWksIGjDo3kgZMO5bmcgLS0iCisiZm9yY2UgxJHhu4MgeMOzYSBuw7MiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJywgY29kZSAlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGNo4bqheSDigJxnaXQgc3RhdHVz4oCdIHRyb25nIOKAnCVz4oCdLCBtw6MgJWQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MDMKK21zZ2lkICJmb3JjZSByZW1vdmFsIGV2ZW4gaWYgd29ya3RyZWUgaXMgZGlydHkgb3IgbG9ja2VkIgorbXNnc3RyICLDqXAgYnXhu5ljIGRpIGNodXnhu4NuIHRo4bqtbSBjaMOtIGPhuqMga2hpIGPDonkgbMOgbSB2aeG7h2MgxJFhbmcgYuG6qW4gaGF5IGLhu4sga2jDs2EiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXNcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIHjDs2EgYuG7jyBt4buZdCBjw6J5LWzDoG0tdmnhu4djIGLhu4sga2jDs2EsIGtow7NhIHbDrDogJXNcbiIKKyJkw7luZyDigJxyZW1vdmUgLWYgLWbigJ0gxJHhu4MgZ2hpIMSRw6ggaG/hurdjIG3hu58ga2jDs2EgdHLGsOG7m2MgxJHDoyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkyOAorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIHjDs2EgYuG7jyBt4buZdCBjw6J5LWzDoG0tdmnhu4djIGLhu4sga2jDs2E7XG4iCisiZMO5bmcg4oCccmVtb3ZlIC1mIC1m4oCdIMSR4buDIGdoaSDEkcOoIGhv4bq3YyBt4bufIGtow7NhIHRyxrDhu5tjIMSRw6MiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCByZW1vdmUgd29ya2luZyB0cmVlOiAlcyIKK21zZ3N0ciAidGjhuqltIHRyYSBn4bq3cCBs4buXaSwga2jDtG5nIHRo4buDIGfhu6EgYuG7jyBt4buZdCBjw6J5LWzDoG0tdmnhu4djOiAlcyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MTUKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTx0aeG7gW4tdOG7kT4vXSIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjgKK21zZ2lkICI8cHJlZml4Pi8iCittc2dzdHIgIjx0aeG7gW4gdOG7kT4vIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOQorbXNnaWQgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIKK21zZ3N0ciAiZ2hpIMSR4buRaSB0xrDhu6NuZyBjw6J5ICh0cmVlKSBjaG8gPHRp4buBbiB04buRPiB0aMawIG3hu6VjIGNvbiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MzEKK21zZ2lkICJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIgorbXNnc3RyICJjaOG7iSBo4buvdSDDrWNoIGtoaSBj4bqnbiBn4buhIGzhu5dpIgorCisjOiBmYXN0LWltcG9ydC5jOjMxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgJ21hcmsnIGNvbW1hbmQsIGdvdCAlcyIKK21zZ3N0ciAiQ+G6p24gbOG7h25oICdtYXJrJywgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyAlcyIKKworIzogZmFzdC1pbXBvcnQuYzozMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICd0bycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICJD4bqnbiBs4buHbmggJ3RvJywgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyAlcyIKKworIzogZmFzdC1pbXBvcnQuYzozMjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZlYXR1cmUgJyVzJyBmb3JiaWRkZW4gaW4gaW5wdXQgd2l0aG91dCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIKK21zZ3N0ciAiIgorInTDrW5oIG7Eg25nICcgJXMgJyBi4buLIGPhuqVtIGNo4buJIHRyb25nIMSR4bqndSB2w6BvIG3DoCBraMO0bmcgY8OzIC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwZXJtaXNzaW9ucyBvbiB5b3VyIHNvY2tldCBkaXJlY3RvcnkgYXJlIHRvbyBsb29zZTsgb3RoZXJcbiIKKyJ1c2VycyBtYXkgYmUgYWJsZSB0byByZWFkIHlvdXIgY2FjaGVkIGNyZWRlbnRpYWxzLiBDb25zaWRlciBydW5uaW5nOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKK21zZ3N0ciAiIgorIlF1eeG7gW4gaOG6oW4gdHLDqm4gdGjGsCBt4bulYyBnw7NpIG3huqFuZyBj4bunYSBi4bqhbiBraMO0bmcgY2jDrW5oIHjDoWM7IG5nxrDhu51pIGTDuW5nXG4iCisia2jDoWMgY8OzIGzhur0gY8OzIHRo4buDIMSR4buNYyDEkcaw4bujYyBjaOG7qW5nIHRoxrAgxJHGsOG7o2MgbMawdSDEkeG7h20gY+G7p2EgYuG6oW4uIEPDom4gbmjhuq9jIGNo4bqheTpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjI3MgorbXNnaWQgInByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyB0byBzdGRlcnIiCittc2dzdHIgImluIHRow7RuZyB0aW4gZ+G7oSBs4buXaSByYSDEkeG6p3UgcmEgbOG7l2kgdGnDqnUgY2h14bqpbiIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgbm90IG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8gJXMgY2jGsGEgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGzDoCB0aeG6v3AgY+G6rW4gxJHGsOG7o2MiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNjIKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgImPDsyBxdcOhIG5oaeG7gXUgbOG6p24gY2h1eeG7g24gZ2lhbyDEkcaw4bujYyDEkcOhbmggZOG6pXUgbMOgIHRp4bq/cCBj4bqtbiDEkcaw4bujYyIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjcKK21zZ2lkICJ0ZXN0LXRvb2wgc2VydmUtdjIgWzxvcHRpb25zPl0iCittc2dzdHIgInRlc3QtdG9vbCBzZXJ2ZS12MiBbPGPDoWMgdMO5eSBjaOG7jW4+XSIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE5Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBhZHZlcnRpc2luZyBjYXBhYmlsaXRpZXMiCittc2dzdHIgInRob8OhdCBuZ2F5IHNhdSBraGkga2jhu59pIHThuqFvIHF14bqjbmcgY8OhbyBjYXBhYmlsaXRpZXMiCisKKyM6IGdpdC5jOjI3Cittc2dpZCAiIgorImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPHBhdGg+XSBbLWMgPG5hbWU+PTx2YWx1ZT5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTxwYXRoPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tcGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tIgorImJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPTxwYXRoPl0gWy0td29yay10cmVlPTxwYXRoPl0gWy0tbmFtZXNwYWNlPTxuYW1lPl1cbiIKKyIgICAgICAgICAgIDxjb21tYW5kPiBbPGFyZ3M+XSIKK21zZ3N0ciAiIgorImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPC/Ekcaw4budbmcvZOG6q24vPl0gWy1jIDx0w6puPj08Z2nDoSB0cuG7iz5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTwvxJHGsOG7nW5nL2ThuqtuLz5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLSIKKyJwYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tIgorImJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPTwvxJHGsOG7nW5nL2ThuqtuLz5dIFstLXdvcmstdHJlZT08L8SRxrDhu51uZy9k4bqrbi8+XSBbLS0iCisibmFtZXNwYWNlPTx0w6puPl1cbiIKKyIgICAgICAgICAgIDxs4buHbmg+IFs8Y8OhYyB0aGFtIHPhu5E+XSIKKworIzogZ2l0LmM6MzQKK21zZ2lkICIiCisiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJ0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCBvciBjb25jZXB0LlxuIgorIlNlZSAnZ2l0IGhlbHAgZ2l0JyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS4iCittc2dzdHIgIiIKKyLigJxnaXQgaGVscCAtYeKAnSB2w6Ag4oCcZ2l0IGhlbHAgLWfigJ0gbGnhu4d0IGvDqiBjw6FjIGPDonUgbOG7h25oIGNvbiBz4bq1biBjw7MgdsOgIG3hu5l0IHPhu5FcbiIKKyJoxrDhu5tuZyBk4bqrbiB24buBIGtow6FpIG5p4buHbS4gWGVtIOKAnGdpdCBoZWxwIDxs4buHbmg+4oCdIGhheSDigJxnaXQgaGVscCA8a2jDoWktbmnhu4dtPuKAnVxuIgorIsSR4buDIHhlbSBjw6FjIMSR4bq3YyB04bqjIGNobyBs4buHbmggaGF5IGtow6FpIG5p4buHbSBj4bulIHRo4buDLlxuIgorIlhlbSAnZ2l0IGhlbHAgZ2l0JyDEkeG7gyBiaeG6v3QgdOG7lW5nIHF1YW4gY+G7p2EgaOG7hyB0aOG7kW5nLiIKKworIzogZ2l0LmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS1naXQtZGlyXG4iCittc2dzdHIgImNoxrBhIGNo4buJIHJhIHRoxrAgbeG7pWMgY2hvIC0tZ2l0LWRpclxuIgorCisjOiBnaXQuYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbmFtZXNwYWNlIGdpdmVuIGZvciAtLW5hbWVzcGFjZVxuIgorbXNnc3RyICJjaMawYSDEkcawYSByYSBraMO0bmcgZ2lhbiBsw6BtIHZp4buHYyBjaG8gLS1uYW1lc3BhY2VcbiIKKworIzogZ2l0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS13b3JrLXRyZWVcbiIKK21zZ3N0ciAiY2jGsGEgxJHGsGEgcmEgY8OieSBsw6BtIHZp4buHYyBjaG8gLS13b3JrLXRyZWVcbiIKKworIzogZ2l0LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByZWZpeCBnaXZlbiBmb3IgLS1zdXBlci1wcmVmaXhcbiIKK21zZ3N0ciAiY2jGsGEgxJHGsGEgcmEgdGnhu4FuIHThu5EgY2hvIC0tc3VwZXItcHJlZml4XG4iCisKKyM6IGdpdC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICItYyBleHBlY3RzIGEgY29uZmlndXJhdGlvbiBzdHJpbmdcbiIKK21zZ3N0ciAiLWMgY+G6p24gbeG7mXQgY2h14buXaSBj4bqldSBow6xuaFxuIgorCisjOiBnaXQuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtQ1xuIgorbXNnc3RyICJjaMawYSDEkcawYSByYSB0aMawIG3hu6VjIGNobyAtQ1xuIgorCisjOiBnaXQuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgImtow7RuZyBoaeG7g3UgdMO5eSBjaOG7jW46ICVzXG4iCisKKyM6IGdpdC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgYWxpYXMgJyVzJzogJyVzJyIKK21zZ3N0ciAidHJvbmcga2hpIHRyaeG7g24ga2hhaSBiw60gZGFuaCDigJwlc+KAnTog4oCcJXPigJ0iCisKKyM6IGdpdC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYWxpYXMgJyVzJyBjaGFuZ2VzIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiIKKyJZb3UgY2FuIHVzZSAnIWdpdCcgaW4gdGhlIGFsaWFzIHRvIGRvIHRoaXMiCittc2dzdHIgIiIKKyJiw60gZGFuaCDigJwlc+KAnSB0aGF5IMSR4buVaSBiaeG6v24gbcO0aSB0csaw4budbmcuXG4iCisiQuG6oW4gY8OzIHRo4buDIHPhu60gZOG7pW5nIOKAnCFnaXTigJ0gdHJvbmcgxJHhurd0IGLDrSBkYW5oIMSR4buDIGzDoG0gdmnhu4djIG7DoHkiCisKKyM6IGdpdC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBhbGlhcyBmb3IgJXMiCittc2dzdHIgImzDoG0gdHLhu5FuZyBiw60gZGFuaCBjaG8gJXMiCisKKyM6IGdpdC5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgYWxpYXM6ICVzIgorbXNnc3RyICLEkeG7hyBxdXkgY8OhYyBiw60gZGFuaDogJXMiCisKKyM6IGdpdC5jOjQ1OQorbXNnaWQgIndyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJs4buXaSBnaGkgbmdoacOqbSB0cm9uZyB0csOqbiDEkeG6p3UgcmEgdGnDqnUgY2h14bqpbiIKKworIzogZ2l0LmM6NDYxCittc2dpZCAidW5rbm93biB3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAibOG7l2kgbmdoacOqbSB0cuG7jW5nIGNoxrBhIGJp4bq/dCBraGkgZ2hpIHJhIMSR4bqndSByYSB0acOqdSBjaHXhuqluIgorCisjOiBnaXQuYzo0NjMKK21zZ2lkICJjbG9zZSBmYWlsZWQgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHDs25nIMSR4bqndSByYSB0acOqdSBjaHXhuqluIgorCisjOiBnaXQuYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgbG9vcCBkZXRlY3RlZDogZXhwYW5zaW9uIG9mICclcycgZG9lcyBub3QgdGVybWluYXRlOiVzIgorbXNnc3RyICIiCisiZMOyIHTDrG0gdGjhuqV5IGPDoWMgYsOtIGRhbmggcXXhuqluIHRyw7JuOiBiaeG7g3UgdGjhu6ljIGPhu6dhIOKAnCVz4oCdIGtow7RuZyBjw7MgxJFp4buDbSBr4bq/dDolcyIKKworIzogZ2l0LmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgJXMgYXMgYSBidWlsdGluIgorbXNnc3RyICJraMO0bmcgdGjhu4MgeOG7rSBsw70gJXMgbmjGsCBsw6AgbeG7mXQgcGjhuqduIGLhu5Ugc3VuZyIKKworIzogZ2l0LmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1c2FnZTogJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorImPDoWNoIGTDuW5nOiAlc1xuIgorIlxuIgorCisjOiBnaXQuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwYW5zaW9uIG9mIGFsaWFzICclcycgZmFpbGVkOyAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kXG4iCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBraGFpIHRyaeG7g24gYsOtIGRhbmgg4oCcJXPigJ07IOKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbMOgIGzhu4duaCBnaXRcbiIKKworIzogZ2l0LmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gY29tbWFuZCAnJXMnOiAlc1xuIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgY2jhuqF5IGzhu4duaCDigJwlc+KAnTogJXNcbiIKKworIzogaHR0cC5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZSBmb3IgaHR0cC5wb3N0YnVmZmVyOyBkZWZhdWx0aW5nIHRvICVkIgorbXNnc3RyICJnacOhIHRy4buLIMOibSBjaG8gaHR0cC5wb3N0YnVmZmVyOyDEkeG6t3QgdGjDoG5oIG3hurdjIMSR4buLbmggbMOgICVkIgorCisjOiBodHRwLmM6Mzk5Cittc2dpZCAiRGVsZWdhdGlvbiBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4yMi4wIgorbXNnc3RyICLEkGnhu4F1IGtoaeG7g24gZ2lhbyBxdXnhu4FuIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIHbhu5tpIGNVUkwgPCA3LjIyLjAiCisKKyM6IGh0dHAuYzo0MDgKK21zZ2lkICJQdWJsaWMga2V5IHBpbm5pbmcgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIkNo4buRdCBraMOzYSBjw7RuZyBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyB24bubaSBjVVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6ODc2Cittc2dpZCAiQ1VSTFNTTE9QVF9OT19SRVZPS0Ugbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIkNVUkxTU0xPUFRfTk9fUkVWT0tFIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIHbhu5tpIGNVUkwgPCA3LjQ0LjAiCisKKyM6IGh0dHAuYzo5NDkKK21zZ2lkICJQcm90b2NvbCByZXN0cmljdGlvbnMgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjE5LjQiCittc2dzdHIgIkPDoWMgaOG6oW4gY2jhur8gZ2lhbyB0aOG7qWMga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MgduG7m2kgY1VSTCA8IDcuMTkuNCIKKworIzogaHR0cC5jOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgU1NMIGJhY2tlbmQgJyVzJy4gU3VwcG9ydGVkIFNTTCBiYWNrZW5kczoiCittc2dzdHIgIiIKKyJLaMO0bmcgaOG7lyB0cuG7oyDhu6luZyBk4bulbmcgU1NMIGNo4bqheSBwaMOtYSBzYXUg4oCcJXPigJ0uIEjhu5cgdHLhu6Mg4bupbmcgZOG7pW5nIFNTTCBjaOG6oXkgcGjDrWEgIgorInNhdToiCisKKyM6IGh0dHAuYzoxMDkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogY1VSTCB3YXMgYnVpbHQgd2l0aG91dCBTU0wgYmFja2VuZHMiCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgxJHhurd0IOG7qW5nIGThu6VuZyBjaOG6oXkgU1NMIHBow61hIHNhdSDigJwlc+KAnTogY1VSTCDEkcaw4bujYyBiacOqbiBk4buLY2gga2jDtG5nIGPDsyAiCisic+G7sSBo4buXIHRy4bujIOG7qW5nIGThu6VuZyBjaOG6oXkgcGjDrWEgc2F1IFNTTCIKKworIzogaHR0cC5jOjEwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBhbHJlYWR5IHNldCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4bq3dCDhu6luZyBk4bulbmcgY2jhuqF5IHNhdSBTU0wgY2hvIOKAnCVz4oCdOiDEkcOjIMSR4bq3dCBy4buTaSIKKworIzogaHR0cC5jOjE5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byB1cGRhdGUgdXJsIGJhc2UgZnJvbSByZWRpcmVjdGlvbjpcbiIKKyIgIGFza2VkIGZvcjogJXNcbiIKKyIgICByZWRpcmVjdDogJXMiCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IGThu7FhIHRyw6puIGPGoSBz4bufIHVybCB04burIGNodXnhu4NuIGjGsOG7m25nOlxuIgorIiAgICAgIGjhu49pIGNobzogJXNcbiIKKyIgY2h1eeG7g24gaMaw4bubbmc6ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHF1b3RpbmcgaW4gcHVzaC1vcHRpb24gdmFsdWU6ICclcyciCittc2dzdHIgInNhaSB0csOtY2ggZOG6q24gdHJvbmcgZ2nDoSB0cuG7iyBwdXNoLW9wdGlvbiA64oCcJXPigJ0iCisKKyM6IHJlbW90ZS1jdXJsLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaW5mby9yZWZzIG5vdCB2YWxpZDogaXMgdGhpcyBhIGdpdCByZXBvc2l0b3J5PyIKK21zZ3N0ciAiJXNpbmZvL3JlZnMga2jDtG5nIGjhu6NwIGzhu4c6IMSRw6J5IGPDsyBwaOG6o2kgbMOgIG3hu5l0IGtobyBnaXQ/IgorCisjOiByZW1vdGUtY3VybC5jOjM2NAorbXNnaWQgImludmFsaWQgc2VydmVyIHJlc3BvbnNlOyBleHBlY3RlZCBzZXJ2aWNlLCBnb3QgZmx1c2ggcGFja2V0IgorbXNnc3RyICIiCisixJHDoXAg4bupbmcgdOG7qyBtw6F5IHBo4bulYyB24bulIGtow7RuZyBo4bujcCBs4buHOyBj4bqnbiBk4buLY2ggduG7pSwgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyBnw7NpICIKKyJmbHVzaCIKKworIzogcmVtb3RlLWN1cmwuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGdvdCAnJXMnIgorbXNnc3RyICJ0cuG6oyB24buBIGPhu6dhIG3DoXkgcGjhu6VjIHbhu6Uga2jDtG5nIGjhu6NwIGzhu4c7IG5o4bqtbiDEkcaw4bujYyAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAia2jDtG5nIHTDrG0gdGjhuqV5IGtobyDigJwlc+KAnSIKKworIzogcmVtb3RlLWN1cmwuYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0aGVudGljYXRpb24gZmFpbGVkIGZvciAnJXMnIgorbXNnc3RyICJYw6FjIHRo4buxYyBn4bq3cCBs4buXaSBjaG8g4oCcJXPigJ0iCisKKyM6IHJlbW90ZS1jdXJsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB0cnV5IGPhuq1wIOKAnCVz4oCdOiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgdG8gJXMiCittc2dzdHIgImNodXnhu4NuIGjGsOG7m25nIMSR4bq/biAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo1OTMKK21zZ2lkICJzaG91bGRuJ3QgaGF2ZSBFT0Ygd2hlbiBub3QgZ2VudGxlIG9uIEVPRiIKK21zZ3N0ciAia2jDtG5nIG7Dqm4gY8OzIEVPRiBraGkga2jDtG5nIGdlbnRsZSB0csOqbiBFT0YiCisKKyM6IHJlbW90ZS1jdXJsLmM6NjczCittc2dpZCAidW5hYmxlIHRvIHJld2luZCBycGMgcG9zdCBkYXRhIC0gdHJ5IGluY3JlYXNpbmcgaHR0cC5wb3N0QnVmZmVyIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdHVhIGzhuqFpIGThu68gbGnhu4d1IHBvc3QgcnBjIC0gdGjhu60gdMSDbmcgaHR0cC5wb3N0QnVmZmVyIgorCisjOiByZW1vdGUtY3VybC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJSUEMgZmFpbGVkOyAlcyIKK21zZ3N0ciAiUlBDIGfhurdwIGzhu5dpOyAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo3NzMKK21zZ2lkICJjYW5ub3QgaGFuZGxlIHB1c2hlcyB0aGlzIGJpZyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHjhu60gbMO9IMSR4bqpeSBjw6FpIGzhu5tuIG7DoHkiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZGVmbGF0ZSBlcnJvciAlZCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdp4bqjaSBuw6luIHnDqnUgY+G6p3U7IGPDsyBs4buXaSBraGkgZ2nhuqNpIG7DqW4gY+G7p2EgemxpYiAlZCIKKworIzogcmVtb3RlLWN1cmwuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBlbmQgZXJyb3IgJWQiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaeG6o2kgbsOpbiB5w6p1IGPhuqd1OyBjw7MgbOG7l2kg4bufIGN14buRaSAlZCIKKworIzogcmVtb3RlLWN1cmwuYzoxMDIzCittc2dpZCAiZHVtYiBodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2FwYWJpbGl0aWVzIgorbXNnc3RyICLEkeG7lSB24bqtbiBjaHV54buDbiBodHRwIGtow7RuZyBo4buXIHRy4bujIGto4bqjIG7Eg25nIG7DtG5nIgorCisjOiByZW1vdGUtY3VybC5jOjEwMzgKK21zZ2lkICJmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJs4bqleSB24buBIGfhurdwIGzhu5dpLiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDg2Cittc2dpZCAiY2Fubm90IGZldGNoIGJ5IHNoYTEgb3ZlciBzbWFydCBodHRwIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgduG7gSBi4bqxbmcgc2hhMSB0aMO0bmcgcXVhIHNtYXJ0IGh0dHAiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTEzMCByZW1vdGUtY3VybC5jOjExMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAnJXMnIgorbXNnc3RyICJs4buXaSBnaWFvIHRo4bupYzogY+G6p24gc2hhL3JlZiwgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyDigJwlc+KAnSIKKworIzogcmVtb3RlLWN1cmwuYzoxMTQ4IHJlbW90ZS1jdXJsLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0ICVzIgorbXNnc3RyICJ24bqtbiBjaHV54buDbiBodHRwIGtow7RuZyBo4buXIHRy4bujICVzIgorCisjOiByZW1vdGUtY3VybC5jOjExODQKK21zZ2lkICJnaXQtaHR0cC1wdXNoIGZhaWxlZCIKK21zZ3N0ciAiZ2l0LWh0dHAtcHVzaCBn4bq3cCBs4buXaSIKKworIzogcmVtb3RlLWN1cmwuYzoxMzY5Cittc2dpZCAicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPHJlbW90ZT4gWzx1cmw+XSIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPG3DoXkgY2jhu6c+IFs8dXJsPl0iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwMQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybDogZ+G6t3AgbOG7l2kga2hpIMSR4buNYyBsdeG7k25nIGThu68gbGnhu4d1IGzhu4duaCB04burIGdpdCIKKworIzogcmVtb3RlLWN1cmwuYzoxNDA4Cittc2dpZCAicmVtb3RlLWN1cmw6IGZldGNoIGF0dGVtcHRlZCB3aXRob3V0IGEgbG9jYWwgcmVwbyIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IMSRw6MgY+G7kSBn4bqvbmcgZmV0Y2ggbcOgIGtow7RuZyBjw7Mga2hvIG7hu5lpIGLhu5kiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtY3VybDogdW5rbm93biBjb21tYW5kICclcycgZnJvbSBnaXQiCittc2dzdHIgInJlbW90ZS1jdXJsOiBraMO0bmcgaGnhu4N1IGzhu4duaCDigJwlc+KAnSB04burIGdpdCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODUKK21zZ2lkICJhcmdzIgorbXNnc3RyICJjw6FjX3RoYW1fc+G7kSIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODYKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICJs4buNYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxODMKK21zZ2lkICJleHBpcnktZGF0ZSIKK21zZ3N0ciAibmfDoHkgaOG6v3QgaOG6oW4iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxOTcKK21zZ2lkICJuby1vcCAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSkiCittc2dzdHIgIm5vLW9wICh0xrDGoW5nIHRow61jaCBuZ8aw4bujYykiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMDkKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgImNoaSB0aeG6v3QgaMahbiBu4buvYSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxMQorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgImltIGzhurduZyBoxqFuIG7hu69hIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzE3Cittc2dpZCAidXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMiCittc2dzdHIgInPhu60gZOG7pW5nIDxuPiBjaOG7ryBz4buRIMSR4buDIGhp4buDbiB0aOG7iyBTSEEtMXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICJsw6BtIHRo4bq/IG7DoG8gxJHhu4MgY+G6r3QgYuG7jyBraG/huqNuZyB0cuG6r25nIHbDoCAjZ2hpY2jDuiB04burIG3huql1IHRpbiBuaOG6r24iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzcKK21zZ2lkICJyZWFkIHBhdGhzcGVjIGZyb20gZmlsZSIKK21zZ3N0ciAixJHhu41jIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiB04burIHThuq1wIHRpbiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzOAorbXNnaWQgIiIKKyJ3aXRoIC0tcGF0aHNwZWMtZnJvbS1maWxlLCBwYXRoc3BlYyBlbGVtZW50cyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorInbhu5tpIC0tcGF0aHNwZWMtZnJvbS1maWxlLCBjw6FjIHBo4bqnbiB04butIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiBi4buLIG5nxINuIGPDoWNoIGLhu59pIGvDvSAiCisidOG7sSBOVUxMIgorCisjOiByZWYtZmlsdGVyLmg6MTAxCittc2dpZCAia2V5IgorbXNnc3RyICJraMOzYSIKKworIzogcmVmLWZpbHRlci5oOjEwMQorbXNnaWQgImZpZWxkIG5hbWUgdG8gc29ydCBvbiIKK21zZ3N0ciAidMOqbiB0csaw4budbmcgY+G6p24gc+G6r3AgeOG6v3AiCisKKyM6IHJlcmVyZS5oOjQ0Cittc2dpZCAidXBkYXRlIHRoZSBpbmRleCB3aXRoIHJldXNlZCBjb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlIgorbXNnc3RyICJj4bqtcCBuaOG6rXQgYuG6o25nIG3hu6VjIGzhu6VjIHbhu5tpIHBow6JuIGdp4bqjaSB4dW5nIMSR4buZdCBkw7luZyBs4bqhaSBu4bq/dSDEkcaw4bujYyIKKworIzogd3Qtc3RhdHVzLmg6NjcKK21zZ2lkICJIRUFEIGRldGFjaGVkIGF0ICIKK21zZ3N0ciAiSEVBRCDEkcaw4bujYyB0w6FjaCBy4budaSB04bqhaSAiCisKKyM6IHd0LXN0YXR1cy5oOjY4Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBmcm9tICIKK21zZ3N0ciAiSEVBRCDEkcaw4bujYyB0w6FjaCBy4budaSB04burICIKKworIzogY29tbWFuZC1saXN0Lmg6NTAKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIlRow6ptIG7hu5lpIGR1bmcgdOG6rXAgdGluIHbDoG8gYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MQorbXNnaWQgIkFwcGx5IGEgc2VyaWVzIG9mIHBhdGNoZXMgZnJvbSBhIG1haWxib3giCittc2dzdHIgIsOBcCBk4bulbmcgbeG7mXQgY2h14buXaSBjw6FjIG1p4bq/bmcgdsOgIHThu6sgbeG7mXQgbWFpbGJveCIKKworIzogY29tbWFuZC1saXN0Lmg6NTIKK21zZ2lkICJBbm5vdGF0ZSBmaWxlIGxpbmVzIHdpdGggY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICJDw6FjIGTDsm5nIGRp4buFbiBnaeG6o2kgdOG6rXAgdGluIHbhu5tpIHRow7RuZyB0aW4gY2h1eeG7g24gZ2lhbyIKKworIzogY29tbWFuZC1saXN0Lmg6NTMKK21zZ2lkICJBcHBseSBhIHBhdGNoIHRvIGZpbGVzIGFuZC9vciB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKyLDgXAgZOG7pW5nIG3hu5l0IG1p4bq/bmcgdsOhIGNobyBjw6FjIHThuq1wIHRpbiDEkcOjIGNo4buJIHJhIHbDoC9ob+G6t2MgdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU0Cittc2dpZCAiSW1wb3J0IGEgR05VIEFyY2ggcmVwb3NpdG9yeSBpbnRvIEdpdCIKK21zZ3N0ciAiTmjhuq1wIG3hu5l0IGtobyBHTlUgQXJjaCB2w6BvIG3hu5l0IGtobyBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU1Cittc2dpZCAiQ3JlYXRlIGFuIGFyY2hpdmUgb2YgZmlsZXMgZnJvbSBhIG5hbWVkIHRyZWUiCittc2dzdHIgIlThuqFvIG3hu5l0IGtobyBuw6luIGPDoWMgdOG6rXAgdGluIHThu6sgY8OieSBsw6BtIHZp4buHYyBjw7MgdMOqbiIKKworIzogY29tbWFuZC1saXN0Lmg6NTYKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICJUw6xtIGtp4bq/bSBk4bqhbmcgbmjhu4sgcGjDom4gxJHhu4MgdMOsbSByYSBs4bqnbiBjaHV54buDbiBnaWFvIG7DoG8gxJHGsGEgcmEgbOG7l2kiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU3Cittc2dpZCAiU2hvdyB3aGF0IHJldmlzaW9uIGFuZCBhdXRob3IgbGFzdCBtb2RpZmllZCBlYWNoIGxpbmUgb2YgYSBmaWxlIgorbXNnc3RyICIiCisiSGnhu4NuIHRo4buLIHPhu5EgaGnhu4d1IHBoacOqbiBi4bqjbiB2w6AgdMOhYyBnaeG6oyBz4butYSDEkeG7lWkgY3Xhu5FpIGNobyB04burbmcgZMOybmcgY+G7p2EgbeG7mXQgdOG6rXAgIgorInRpbiIKKworIzogY29tbWFuZC1saXN0Lmg6NTgKK21zZ2lkICJMaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcyIKK21zZ3N0ciAiTGnhu4d0IGvDqiwgdOG6oW8gaGF5IGzDoCB4w7NhIGPDoWMgbmjDoW5oIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OQorbXNnaWQgIk1vdmUgb2JqZWN0cyBhbmQgcmVmcyBieSBhcmNoaXZlIgorbXNnc3RyICJEaSBjaHV54buDbiBjw6FjIMSR4buRaSB0xrDhu6NuZyB2w6AgdGhhbSBjaGnhur91IHRoZW8ga2hvIGzGsHUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYwCittc2dpZCAiUHJvdmlkZSBjb250ZW50IG9yIHR5cGUgYW5kIHNpemUgaW5mb3JtYXRpb24gZm9yIHJlcG9zaXRvcnkgb2JqZWN0cyIKK21zZ3N0ciAiQ3VuZyBj4bqlcCBu4buZaSBkdW5nIGhv4bq3YyB0aMO0bmcgdGluIHbhu4Ega2nhu4N1IHbDoCBj4buhIGNobyBjw6FjIMSR4buRaSB0xrDhu6NuZyBraG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYxCittc2dpZCAiRGlzcGxheSBnaXRhdHRyaWJ1dGVzIGluZm9ybWF0aW9uIgorbXNnc3RyICJIaeG7g24gdGjhu4sgdGjDtG5nIHRpbiBnaXRhdHRyaWJ1dGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MgorbXNnaWQgIkRlYnVnIGdpdGlnbm9yZSAvIGV4Y2x1ZGUgZmlsZXMiCittc2dzdHIgIkfhu6EgbOG7l2kgY8OhYyB04bqtcCB0aW4gZ2l0aWdub3JlIC8gZXhjbHVkZSIKKworIzogY29tbWFuZC1saXN0Lmg6NjMKK21zZ2lkICJTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzIgorbXNnc3RyICJIaeG7g24gdGjhu4sgdMOqbiB2w6AgxJHhu4thIGNo4buJIHRoxrAgxJFp4buHbiB04butIGPhu6dhIGPDoWMgbGnDqm4gaOG7hyBk4bqhbmcgY2h14bqpbiBow7NhIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NAorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiQ2h1eeG7g24gY8OhYyBuaMOhbmggaG/hurdjIHBo4bulYyBo4buTaSBs4bqhaSBjw6FjIHThuq1wIHRpbiBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NQorbXNnaWQgIkNvcHkgZmlsZXMgZnJvbSB0aGUgaW5kZXggdG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiU2FvIGNow6lwIGPDoWMgdOG6rXAgdGluIHThu6sgbeG7pWMgbOG7pWMgcmEgY8OieSBsw6BtIHZp4buHYyIKKworIzogY29tbWFuZC1saXN0Lmg6NjYKK21zZ2lkICJFbnN1cmVzIHRoYXQgYSByZWZlcmVuY2UgbmFtZSBpcyB3ZWxsIGZvcm1lZCIKK21zZ3N0ciAixJDhuqNtIGLhuqNvIHLhurFuZyBt4buZdCB0w6puIHRoYW0gY2hp4bq/dSDhu58gZOG6oW5nIHRo4bupYyB04buRdCIKKworIzogY29tbWFuZC1saXN0Lmg6NjcKK21zZ2lkICJGaW5kIGNvbW1pdHMgeWV0IHRvIGJlIGFwcGxpZWQgdG8gdXBzdHJlYW0iCittc2dzdHIgIlTDrG0gbmjhu69uZyBs4bqnbiBjaHV54buDbiBnaWFvIGPDsm4gY2jGsGEgxJHGsOG7o2Mgw6FwIGThu6VuZyBsw6puIHRoxrDhu6NuZyBuZ3Xhu5NuIgorCisjOiBjb21tYW5kLWxpc3QuaDo2OAorbXNnaWQgIkFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICLDgXAgZOG7pW5nIGPDoWMgdGhheSDEkeG7lWkgxJHGsOG7o2MgxJHGsGEgcmEgYuG7n2kgbeG7mXQgc+G7kSBs4bqnbiBjaHV54buDbiBnaWFvIHPhurVuIGPDsyIKKworIzogY29tbWFuZC1saXN0Lmg6NjkKK21zZ2lkICJHcmFwaGljYWwgYWx0ZXJuYXRpdmUgdG8gZ2l0LWNvbW1pdCIKK21zZ3N0ciAiVMawxqFuZyB0w6FjIMSR4buTIGjhu41hIHbhu5tpIGdpdC1jb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcwCittc2dpZCAiUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIkfhu6EgYuG7jyBjw6FjIHThuq1wIHRpbiBraMO0bmcgxJHGsOG7o2MgdGhlbyBkw7VpIHThu6sgY8OieSBsw6BtIHZp4buHYyIKKworIzogY29tbWFuZC1saXN0Lmg6NzEKK21zZ2lkICJDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIk5ow6JuIGLhuqNuIG3hu5l0IGtobyBjaOG7qWEgxJHhur9uIG3hu5l0IHRoxrAgbeG7pWMgbeG7m2kiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcyCittc2dpZCAiRGlzcGxheSBkYXRhIGluIGNvbHVtbnMiCittc2dzdHIgIkhp4buDbiB0aOG7iyBk4buvIGxp4buHdSBk4bqhbmcgY8OhYyBj4buZdCIKKworIzogY29tbWFuZC1saXN0Lmg6NzMKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiR2hpIGPDoWMgdGhheSDEkeG7lWkgdsOgbyBraG8gY2jhu6lhIgorCisjOiBjb21tYW5kLWxpc3QuaDo3NAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgR2l0IGNvbW1pdC1ncmFwaCBmaWxlcyIKK21zZ3N0ciAiR2hpIHbDoCB0aOG6qW0gdHJhIGPDoWMgdOG6rXAgdGluIMSR4buTIGjhu41hIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc1Cittc2dpZCAiQ3JlYXRlIGEgbmV3IGNvbW1pdCBvYmplY3QiCittc2dzdHIgIlThuqFvIG3hu5l0IMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgIkzhuqV5IHbDoCDEkeG6t3Qga2hvIGhv4bq3YyBjw6FjIHTDuXkgY2jhu41uIHRvw6BuIGPhu6VjIgorCisjOiBjb21tYW5kLWxpc3QuaDo3NworbXNnaWQgIkNvdW50IHVucGFja2VkIG51bWJlciBvZiBvYmplY3RzIGFuZCB0aGVpciBkaXNrIGNvbnN1bXB0aW9uIgorbXNnc3RyICIiCisixJDhur9tIHPhu5EgbMaw4bujbmcgxJHhu5FpIHTGsOG7o25nIGNoxrBhIMSRxrDhu6NjIMSRw7NuZyBnw7NpIHbDoCBt4bupYyB0acOqdSBkw7luZyDEkcSpYSBj4bunYSBjaMO6bmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc4Cittc2dpZCAiUmV0cmlldmUgYW5kIHN0b3JlIHVzZXIgY3JlZGVudGlhbHMiCittc2dzdHIgIk5o4bqtbiB2w6AgbMawdSBjaOG7qW5nIG5o4bqtbiBj4bunYSBuZ8aw4budaSBkw7luZyIKKworIzogY29tbWFuZC1saXN0Lmg6NzkKK21zZ2lkICJIZWxwZXIgdG8gdGVtcG9yYXJpbHkgc3RvcmUgcGFzc3dvcmRzIGluIG1lbW9yeSIKK21zZ3N0ciAiQuG7mSBo4buXIHRy4bujIMSR4buDIGzGsHUgbeG6rXQga2jhuql1IHThuqFtIHRo4budaSB0cm9uZyBi4buZIG5o4bubIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MAorbXNnaWQgIkhlbHBlciB0byBzdG9yZSBjcmVkZW50aWFscyBvbiBkaXNrIgorbXNnc3RyICJC4buZIGjhu5cgdHLhu6MgxJHhu4MgbMawdSBjaOG7qW5nIG5o4bqtbiB2w6BvIMSRxKlhIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MQorbXNnaWQgIkV4cG9ydCBhIHNpbmdsZSBjb21taXQgdG8gYSBDVlMgY2hlY2tvdXQiCittc2dzdHIgIlh14bqldCBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIHRow6BuaCBt4buZdCBs4bqnbiBs4bqleSByYSBDVlMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgyCittc2dpZCAiU2FsdmFnZSB5b3VyIGRhdGEgb3V0IG9mIGFub3RoZXIgU0NNIHBlb3BsZSBsb3ZlIHRvIGhhdGUiCittc2dzdHIgIlhlbSB4w6l0IGdpw6EgdHLhu4sgZOG7ryBsaeG7h3UgY+G7p2EgYuG6oW4ga2jhu49pIG5nxrDhu51pIGtow6FjIHnDqnUgU0NNIMSR4buDIGdow6l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo4MworbXNnaWQgIkEgQ1ZTIHNlcnZlciBlbXVsYXRvciBmb3IgR2l0IgorbXNnc3RyICJN4buZdCBi4buZIG3DtCBwaOG7j25nIG3DoXkgZOG7i2NoIHbhu6UgQ1ZTIGNobyBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg0Cittc2dpZCAiQSByZWFsbHkgc2ltcGxlIHNlcnZlciBmb3IgR2l0IHJlcG9zaXRvcmllcyIKK21zZ3N0ciAiTeG7mXQgbcOheSBwaOG7pWMgduG7pSB0aOG7sWMgc+G7sSDEkcahbiBnaeG6o24gZMOgbmggY2hvIGtobyBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg1Cittc2dpZCAiR2l2ZSBhbiBvYmplY3QgYSBodW1hbiByZWFkYWJsZSBuYW1lIGJhc2VkIG9uIGFuIGF2YWlsYWJsZSByZWYiCittc2dzdHIgIiIKKyLEkMawYSByYSBt4buZdCDEkeG7kWkgdMaw4bujbmcgZOG7sWEgdHLDqm4gbeG7mXQgdMOqbiDhu58gZOG6oW5nIGNvbiBuZ8aw4budaSDEkeG7jWMgxJHGsOG7o2MgdHLDqm4gbeG7mXQgIgorInRoYW0gY2hp4bq/dSBz4bq1biBjw7MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg2Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiIgorIkhp4buDbiB0aOG7iyBjw6FjIHRoYXkgxJHhu5VpIGdp4buvYSBuaOG7r25nIGzhuqduIGNodXnhu4NuIGdpYW8sIGdp4buvYSBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvICIKKyJ2w6AgY8OieSBsw6BtIHZp4buHYywgdi52Li4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg3Cittc2dpZCAiQ29tcGFyZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IgorbXNnc3RyICJTbyBzw6FuaCBjw6FjIHThuq1wIHRpbiB0cm9uZyBjw6J5IGzDoG0gdmnhu4djIHbDoCBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg4Cittc2dpZCAiQ29tcGFyZSBhIHRyZWUgdG8gdGhlIHdvcmtpbmcgdHJlZSBvciBpbmRleCIKK21zZ3N0ciAiU28gc8OhbmggY8OhYyBjw6J5IHRyb25nIGPDonkgbMOgbSB2aeG7h2MgaG/hurdjIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogY29tbWFuZC1saXN0Lmg6ODkKK21zZ2lkICJDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cyIKK21zZ3N0ciAiIgorIlNvIHPDoW5oIG7hu5lpIGR1bmcgdsOgIGNo4bq/IMSR4buZIGPhu6dhIGPDoWMgYmxvYiB0w6xtIHRo4bqleSB0aMO0bmcgcXVhIGhhaSDEkeG7kWkgdMaw4bujbmcgY8OieSIKKworIzogY29tbWFuZC1saXN0Lmg6OTAKK21zZ2lkICJTaG93IGNoYW5nZXMgdXNpbmcgY29tbW9uIGRpZmYgdG9vbHMiCittc2dzdHIgIkhp4buDbiB0aOG7iyBjw6FjIHRoYXkgxJHhu5VpIHPhu60gZOG7pW5nIGPDoWMgY8O0bmcgY+G7pSBkaWZmIGNodW5nIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MQorbXNnaWQgIkdpdCBkYXRhIGV4cG9ydGVyIgorbXNnc3RyICJC4buZIHh14bqldCBk4buvIGxp4buHdSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkyCittc2dpZCAiQmFja2VuZCBmb3IgZmFzdCBHaXQgZGF0YSBpbXBvcnRlcnMiCittc2dzdHIgIuG7qG5nIGThu6VuZyBjaOG6oXkgcGjDrWEgc2F1IGNobyBi4buZIG5o4bqtcCBuaGFuaCBk4buvIGxp4buHdSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkzCittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiVOG6o2kgduG7gSBjw6FjIMSR4buRaSB0xrDhu6NuZyB2w6AgdGhhbSBjaGnhur91IHThu6sga2hvIGNo4bupYSBraMOhYyIKKworIzogY29tbWFuZC1saXN0Lmg6OTQKK21zZ2lkICJSZWNlaXZlIG1pc3Npbmcgb2JqZWN0cyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiVOG6o2kgduG7gSBjw6FjIMSR4buRaSB0xrDhu6NuZyBjw7JuIHRoaeG6v3UgdOG7qyBraG8gY2jhu6lhIGtow6FjIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NQorbXNnaWQgIlJld3JpdGUgYnJhbmNoZXMiCittc2dzdHIgIk5o4buvbmcgbmjDoW5oIGdoaSBs4bqhaSIKKworIzogY29tbWFuZC1saXN0Lmg6OTYKK21zZ2lkICJQcm9kdWNlIGEgbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIlPhuqNuIHNpbmggbeG7mXQgZ2hpIGNow7ogbOG6p24gY2h1eeG7g24gZ2lhbyBow7JhIHRy4buZbiIKKworIzogY29tbWFuZC1saXN0Lmg6OTcKK21zZ2lkICJPdXRwdXQgaW5mb3JtYXRpb24gb24gZWFjaCByZWYiCittc2dzdHIgIlh14bqldCB0aMO0bmcgdGluIGNobyB04burbmcgdGhhbSBjaGnhur91IgorCisjOiBjb21tYW5kLWxpc3QuaDo5OAorbXNnaWQgIlByZXBhcmUgcGF0Y2hlcyBmb3IgZS1tYWlsIHN1Ym1pc3Npb24iCittc2dzdHIgIkNodeG6qW4gYuG7iyBjw6FjIG1p4bq/bmcgdsOhIMSR4buDIGfhu61pIHF1YSB0aMawIMSRaeG7h24gdOG7rSIKKworIzogY29tbWFuZC1saXN0Lmg6OTkKK21zZ2lkICJWZXJpZmllcyB0aGUgY29ubmVjdGl2aXR5IGFuZCB2YWxpZGl0eSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgZGF0YWJhc2UiCittc2dzdHIgIiIKKyJUaOG6qW0gdHJhIGzhuqFpIHTDrW5oIGvhur90IG7hu5FpIHbDoCB0w61uaCBoaeG7h3UgbOG7sWMgY+G6o3UgY8OhYyDEkeG7kWkgdMaw4bujbmcgdHJvbmcgY8ahIHPhu58gZOG7ryAiCisibGnhu4d1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDAKK21zZ2lkICJDbGVhbnVwIHVubmVjZXNzYXJ5IGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiROG7jW4gZOG6uXAgY8OhYyB04bqtcCB0aW4ga2jDtG5nIGPhuqduIHRoaeG6v3QgdsOgIHThu5FpIMawdSBraG8gbuG7mWkgYuG7mSIKKworIzogY29tbWFuZC1saXN0Lmg6MTAxCittc2dpZCAiRXh0cmFjdCBjb21taXQgSUQgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgdXNpbmcgZ2l0LWFyY2hpdmUiCittc2dzdHIgIiIKKyJSw7p0IHRyw61jaCBtw6Mgc+G7kSBs4bqnbiBjaHV54buDbiBnaWFvIHThu6sgbeG7mXQga2hvIG7DqW4gxJHDoyDEkcaw4bujYyB04bqhbyBi4bufaSBnaXQtYXJjaGl2ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTAyCittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICJJbiByYSBuaOG7r25nIGTDsm5nIGto4bubcCB24bubaSBt4buZdCBt4bqrdSIKKworIzogY29tbWFuZC1saXN0Lmg6MTAzCittc2dpZCAiQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdCIKK21zZ3N0ciAiTeG7mXQgZ2lhbyBkaeG7h24gxJHhu5MgaOG7jWEga2jhuqMgY2h1eeG7g24gY2hvIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA0Cittc2dpZCAiQ29tcHV0ZSBvYmplY3QgSUQgYW5kIG9wdGlvbmFsbHkgY3JlYXRlcyBhIGJsb2IgZnJvbSBhIGZpbGUiCittc2dzdHIgIlTDrW5oIHRvw6FuIElEIMSR4buRaSB0xrDhu6NuZyB2w6AgdMO5eSBjaOG7jW4gbMOgIHThuqFvIG3hu5l0IGJsb2IgdOG7qyBt4buZdCB04bqtcCB0aW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNQorbXNnaWQgIkRpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiBhYm91dCBHaXQiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0aMO0bmcgdGluIHRy4bujIGdpw7pwIHbhu4EgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDYKK21zZ2lkICJTZXJ2ZXIgc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBHaXQgb3ZlciBIVFRQIgorbXNnc3RyICJUaGkgaMOgbmggcGjDrWEgbcOheSBjaOG7pyBj4bunYSBHaXQgcXVhIEhUVFAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNworbXNnaWQgIkRvd25sb2FkIGZyb20gYSByZW1vdGUgR2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAiCittc2dzdHIgIlThuqNpIHbhu4EgdOG7qyBt4buZdCBraG8gY2jhu6lhIEdpdCB0csOqbiBt4bqhbmcgdGjDtG5nIHF1YSBIVFRQIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDgKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBIVFRQL0RBViB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIsSQ4bqpeSBjw6FjIMSR4buRaSB0xrDhu6NuZyBsw6puIHRow7RuZyBxdWEgSFRUUC9EQVYgxJHhur9uIGtobyBjaOG7qWEga2jDoWMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOQorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgZnJvbSBzdGRpbiB0byBhbiBJTUFQIGZvbGRlciIKK21zZ3N0ciAiIgorIkfhu61pIG3hu5l0IGLhu5kgc8awdSB04bqtcCBjw6FjIG1p4bq/bmcgdsOhIHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiDEkeG6v24gbeG7mXQgdGjGsCBt4bulYyBJTUFQIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTAKK21zZ2lkICJCdWlsZCBwYWNrIGluZGV4IGZpbGUgZm9yIGFuIGV4aXN0aW5nIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICJYw6J5IGThu7FuZyB04bqtcCB0aW4gbeG7pWMgbOG7pWMgZ8OzaSBjaG8gbeG7mXQga2hvIG7DqW4gxJHDoyDEkcOzbmcgZ8OzaSBz4bq1biBjw7MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMQorbXNnaWQgIkNyZWF0ZSBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeSBvciByZWluaXRpYWxpemUgYW4gZXhpc3Rpbmcgb25lIgorbXNnc3RyICJU4bqhbyBt4buZdCBraG8gZ2l0IG3hu5tpIGhheSBraOG7n2kgdOG6oW8gbOG6oWkgbeG7mXQga2hvIMSRw6MgdOG7k24gdOG6oWkgdOG7qyB0csaw4bubYyIKKworIzogY29tbWFuZC1saXN0Lmg6MTEyCittc2dpZCAiSW5zdGFudGx5IGJyb3dzZSB5b3VyIHdvcmtpbmcgcmVwb3NpdG9yeSBpbiBnaXR3ZWIiCittc2dzdHIgIkR1eeG7h3QgbmdheSBraG8gbMOgbSB2aeG7h2MgY+G7p2EgYuG6oW4gdHJvbmcgZ2l0d2ViIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTMKK21zZ2lkICJBZGQgb3IgcGFyc2Ugc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBpbiBjb21taXQgbWVzc2FnZXMiCittc2dzdHIgIlRow6ptIGhheSBwaMOibiB0w61jaCB0aMO0bmcgdGluIGPhuqV1IHRyw7pjIHRyb25nIGdoaSBjaMO6IGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNAorbXNnaWQgIlRoZSBHaXQgcmVwb3NpdG9yeSBicm93c2VyIgorbXNnc3RyICJC4buZIGR1eeG7h24ga2hvIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE1Cittc2dpZCAiU2hvdyBjb21taXQgbG9ncyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIG5o4bqtdCBrw70gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTYKK21zZ2lkICJTaG93IGluZm9ybWF0aW9uIGFib3V0IGZpbGVzIGluIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIHRow7RuZyB0aW4gduG7gSBjw6FjIHThuq1wIHRpbiB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMgdsOgIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNworbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIHJlbW90ZSByZXBvc2l0b3J5IgorbXNnc3RyICJMaeG7h3Qga8OqIGPDoWMgdGhhbSBjaGnhur91IHRyb25nIG3hu5l0IGtobyBjaOG7qWEgdHLDqm4gbeG6oW5nIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTgKK21zZ2lkICJMaXN0IHRoZSBjb250ZW50cyBvZiBhIHRyZWUgb2JqZWN0IgorbXNnc3RyICJMaeG7h3Qga8OqIG7hu5lpIGR1bmcgY+G7p2EgxJHhu5FpIHTGsOG7o25nIGPDonkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOQorbXNnaWQgIkV4dHJhY3RzIHBhdGNoIGFuZCBhdXRob3JzaGlwIGZyb20gYSBzaW5nbGUgZS1tYWlsIG1lc3NhZ2UiCittc2dzdHIgIlRyw61jaCB4deG6pXQgbWnhur9uZyB2w6AgdsOgIG5ndeG7k24gdMOhYyBnaeG6oyB04burIG3hu5l0IHRoxrAgxJFp4buHbiB04butIMSRxqFuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjAKK21zZ2lkICJTaW1wbGUgVU5JWCBtYm94IHNwbGl0dGVyIHByb2dyYW0iCittc2dzdHIgIkNoxrDGoW5nIHRyw6xuaCBwaMOibiB0w6FjaCBVTklYIG1ib3ggxJHGoW4gZ2nhuqNuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjEKK21zZ2lkICJKb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlciIKK21zZ3N0ciAiSOG7o3AgbmjhuqV0IGhhaSBoYXkgbmhp4buBdSBoxqFuIGzhu4tjaCBz4butIGPhu6dhIGPDoWMgbmjDoCBwaMOhdCB0cmnhu4NuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjIKK21zZ2lkICJGaW5kIGFzIGdvb2QgY29tbW9uIGFuY2VzdG9ycyBhcyBwb3NzaWJsZSBmb3IgYSBtZXJnZSIKK21zZ3N0ciAiVMOsbSBjw6FjIHThu5UgdGnDqm4gY2h1bmcgdOG7kXQgY8OzIHRo4buDIMSRxrDhu6NjIGNobyBow7JhIHRy4buZbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTIzCittc2dpZCAiUnVuIGEgdGhyZWUtd2F5IGZpbGUgbWVyZ2UiCittc2dzdHIgIkNo4bqheSBt4buZdCBow7JhIHRy4buZbiB04bqtcCB0aW4g4oCcMy3Ekcaw4budbmfigJ0iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNAorbXNnaWQgIlJ1biBhIG1lcmdlIGZvciBmaWxlcyBuZWVkaW5nIG1lcmdpbmciCittc2dzdHIgIkNo4bqheSBt4buZdCBow7JhIHRy4buZbiBjaG8gY8OhYyB04bqtcCB0aW4gY+G6p24gaMOyYSB0cuG7mW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNQorbXNnaWQgIlRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCBnaXQtbWVyZ2UtaW5kZXgiCittc2dzdHIgIk3hu5l0IGNoxrDGoW5nIHRyw6xuaCBo4buXIHRy4bujIHRpw6p1IGNodeG6qW4gZMO5bmcgduG7m2kgZ2l0LW1lcmdlLWluZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjYKK21zZ2lkICJSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0ciAiIgorIkNo4bqheSBjw7RuZyBj4bulIHBow6JuIGdp4bqjaSB4dW5nIMSR4buZdCBow7JhIHRy4buZbiDEkeG7gyBtw6AgZ2nhuqNpIHF1eeG6v3QgY8OhYyB4dW5nIMSR4buZdCBow7JhICIKKyJ0cuG7mW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNworbXNnaWQgIlNob3cgdGhyZWUtd2F5IG1lcmdlIHdpdGhvdXQgdG91Y2hpbmcgaW5kZXgiCittc2dzdHIgIkhp4buDbiB0aOG7iyBow7JhIHRy4buZbiBiYS3Ekcaw4budbmcgbcOgIGtow7RuZyDEkeG7pW5nIGNo4bqhbSDEkeG6v24gbeG7pWMgbOG7pWMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgbXVsdGktcGFjay1pbmRleGVzIgorbXNnc3RyICJHaGkgdsOgIHRo4bqpbSB0cmEgY8OhYyBtdWx0aS1wYWNrLWluZGV4ZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOQorbXNnaWQgIkNyZWF0ZXMgYSB0YWcgb2JqZWN0IgorbXNnc3RyICJU4bqhbyBt4buZdCDEkeG7kWkgdMaw4bujbmcgdGjhursiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMAorbXNnaWQgIkJ1aWxkIGEgdHJlZS1vYmplY3QgZnJvbSBscy10cmVlIGZvcm1hdHRlZCB0ZXh0IgorbXNnc3RyICJYw6J5IGThu7FuZyBt4buZdCB0cmVlLW9iamVjdCB04burIHbEg24gYuG6o24gxJHhu4tuaCBk4bqhbmcgbHMtdHJlZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTMxCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICJEaSBjaHV54buDbiBoYXkgxJHhu5VpIHTDqm4gbeG7mXQgdOG6rXAgdGluLCB0aMawIG3hu6VjIGhv4bq3YyBsacOqbiBr4bq/dCBt4buBbSIKKworIzogY29tbWFuZC1saXN0Lmg6MTMyCittc2dpZCAiRmluZCBzeW1ib2xpYyBuYW1lcyBmb3IgZ2l2ZW4gcmV2cyIKK21zZ3N0ciAiVMOsbSBjw6FjIHTDqm4gbGnDqm4ga+G6v3QgbeG7gW0gY2hvIMSRaeG7g20geMOpdCDEkcOjIGNobyIKKworIzogY29tbWFuZC1saXN0Lmg6MTMzCittc2dpZCAiQWRkIG9yIGluc3BlY3Qgb2JqZWN0IG5vdGVzIgorbXNnc3RyICJUaMOqbSBob+G6t2MgxJFp4buBdSB0cmEgxJHhu5FpIHTGsOG7o25nIGdoaSBjaMO6IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzQKK21zZ2lkICJJbXBvcnQgZnJvbSBhbmQgc3VibWl0IHRvIFBlcmZvcmNlIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAiTmjhuq1wIHbDoG8gdOG7qyB2w6AgZ+G7rWkgxJHhur9uIGPDoWMga2hvIGPhuqduIHRoaeG6v3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNQorbXNnaWQgIkNyZWF0ZSBhIHBhY2tlZCBhcmNoaXZlIG9mIG9iamVjdHMiCittc2dzdHIgIlThuqFvIG3hu5l0IGtobyBsxrB1IMSRxrDhu6NjIMSRw7NuZyBnw7NpIGNobyBjw6FjIMSR4buRaSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM2Cittc2dpZCAiRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcyIKK21zZ3N0ciAiVMOsbSBjw6FjIHThuq1wIHRpbiBnw7NpIGTGsCB0aOG7q2EiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNworbXNnaWQgIlBhY2sgaGVhZHMgYW5kIHRhZ3MgZm9yIGVmZmljaWVudCByZXBvc2l0b3J5IGFjY2VzcyIKK21zZ3N0ciAixJDDs25nIGfDs2kgY8OhYyBwaOG6p24gxJHhuqd1IHbDoCB0aOG6uyDEkeG7gyB0cnV5IGPhuq1wIGtobyBoaeG7h3UgcXXhuqMgaMahbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM4Cittc2dpZCAiUm91dGluZXMgdG8gaGVscCBwYXJzaW5nIHJlbW90ZSByZXBvc2l0b3J5IGFjY2VzcyBwYXJhbWV0ZXJzIgorbXNnc3RyICJDw6FjIHRo4bunIHThu6VjIMSR4buDIGdpw7pwIHBow6JuIHTDrWNoIGPDoWMgdGhhbSBz4buRIHRydXkgY+G6rXAga2hvIGNo4bupYSB0csOqbiBt4bqhbmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOQorbXNnaWQgIkNvbXB1dGUgdW5pcXVlIElEIGZvciBhIHBhdGNoIgorbXNnc3RyICJUw61uaCB0b8OhbiBJRCBkdXkgbmjhuqV0IGNobyBt4buZdCBtaeG6v25nIHbDoSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQwCittc2dpZCAiUHJ1bmUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisiWMOpbiBi4bubdCB04bqldCBjw6FjIGPDoWMgxJHhu5FpIHTGsOG7o25nIGtow7RuZyB0aeG6v3AgY+G6rW4gxJHGsOG7o2MgdOG7qyBjxqEgc+G7nyBk4buvIGxp4buHdSDEkeG7kWkgdMaw4bujbmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MQorbXNnaWQgIlJlbW92ZSBleHRyYSBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgaW4gcGFjayBmaWxlcyIKK21zZ3N0ciAiWMOzYSBi4buPIGPDoWMgxJHhu5FpIHTGsOG7o25nIG3hu58gcuG7mW5nIGPDoWkgbcOgIMSRw6Mgc+G6tW4gY8OzIHRyb25nIGPDoWMgdOG6rXAgdGluIGfDs2kiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MgorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiTOG6pXkgduG7gSB2w6AgaOG7o3AgbmjhuqV0IHbhu5tpIGtobyBraMOhYyBoYXkgbeG7mXQgbmjDoW5oIG7hu5lpIGLhu5kiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MworbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiQ+G6rXAgbmjhuq10IHRoLmNoaeG6v3UgbcOheSBjaOG7pyBjw7luZyB24bubaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBsacOqbiBxdWFuIMSR4bq/biBuw7MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NAorbXNnaWQgIkFwcGxpZXMgYSBxdWlsdCBwYXRjaHNldCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAi4bqkcCBk4bulbmcgbeG7mXQgYuG7mSBtaeG6v25nIHbDoSBxdWlsdCB2w6BvIHRyb25nIG5ow6FuaCBoaeG7h24gaMOgbmgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NQorbXNnaWQgIkNvbXBhcmUgdHdvIGNvbW1pdCByYW5nZXMgKGUuZy4gdHdvIHZlcnNpb25zIG9mIGEgYnJhbmNoKSIKK21zZ3N0ciAiU28gc8OhbmggaGFpIHbDuW5nIGNodXnhu4NuIGdpYW8gKHZkOiBoYWkgcGhpw6puIGLhuqNuIGPhu6dhIG3hu5l0IG5ow6FuaCkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NgorbXNnaWQgIlJlYWRzIHRyZWUgaW5mb3JtYXRpb24gaW50byB0aGUgaW5kZXgiCittc2dzdHIgIsSQ4buNYyB0aMO0bmcgdGluIGPDonkgdsOgbyB0cm9uZyBt4bulYyBs4bulYyIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ3Cittc2dpZCAiUmVhcHBseSBjb21taXRzIG9uIHRvcCBvZiBhbm90aGVyIGJhc2UgdGlwIgorbXNnc3RyICJUaHUgaG/huqFjaCBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gdHLDqm4gxJHhu4luaCBj4bunYSDEkeG6p3UgbcO6dCBjxqEgc+G7nyBraMOhYyIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ4Cittc2dpZCAiUmVjZWl2ZSB3aGF0IGlzIHB1c2hlZCBpbnRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJOaOG6rW4gY8OhaSBtw6AgxJHGsOG7o2MgxJHhuql5IHbDoG8gdHJvbmcga2hvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDkKK21zZ2lkICJNYW5hZ2UgcmVmbG9nIGluZm9ybWF0aW9uIgorbXNnc3RyICJRdeG6o24gbMO9IHRow7RuZyB0aW4gcmVmbG9nIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTAKK21zZ2lkICJNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJRdeG6o24gbMO9IHThuq1wIGjhu6NwIGPDoWMga2hvIGNo4bupYSDEkcOjIMSRxrDhu6NjIHRoZW8gZMO1aSIKKworIzogY29tbWFuZC1saXN0Lmg6MTUxCittc2dpZCAiUGFjayB1bnBhY2tlZCBvYmplY3RzIGluIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAixJDDs25nIGfDs2kgY8OhYyDEkeG7kWkgdMaw4bujbmcgY2jGsGEgxJHDs25nIGfDs2kg4bufIG3hu5l0IGtobyBjaOG7qWEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MgorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIHJlZnMgdG8gcmVwbGFjZSBvYmplY3RzIgorbXNnc3RyICJU4bqhbywgbGnhu4d0IGvDqiwgeMOzYSBjw6FjIHRoYW0gY2hp4bq/dSDEkeG7gyB0aGF5IHRo4bq/IGPDoWMgxJHhu5FpIHTGsOG7o25nIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTMKK21zZ2lkICJHZW5lcmF0ZXMgYSBzdW1tYXJ5IG9mIHBlbmRpbmcgY2hhbmdlcyIKK21zZ3N0ciAiVOG6oW8gcmEgbeG7mXQgdMOzbSB04bqvdCBjw6FjIHRoYXkgxJHhu5VpIGPDsm4gdHJlbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTU0Cittc2dpZCAiUmV1c2UgcmVjb3JkZWQgcmVzb2x1dGlvbiBvZiBjb25mbGljdGVkIG1lcmdlcyIKK21zZ3N0ciAiRMO5bmcgbOG6oWkgY8OhYyBnaeG6o2kgcGjDoXAgxJHDoyBnaGkgbOG6oWkgY+G7p2EgY8OhYyBow7JhIHRy4buZbiBi4buLIHh1bmcgxJHhu5l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTUKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAixJDhurd0IGzhuqFpIEhFQUQgaGnhu4duIGjDoG5oIHRow6BuaCB0cuG6oW5nIHRow6FpIMSRw6MgY2hvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTYKK21zZ2lkICJSZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiSG/DoG4gbmd1ecOqbiBjw6FjIHThuq1wIHRpbiBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTcKK21zZ2lkICJSZXZlcnQgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICJIb8OgbiBs4bqhaSBt4buZdCBz4buRIGzhuqduIGNodXnhu4NuIGdpYW8gc+G6tW4gY8OzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTgKK21zZ2lkICJMaXN0cyBjb21taXQgb2JqZWN0cyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIkxp4buHdCBrw6ogY8OhYyDEkeG7kWkgdMaw4bujbmcgY2h1eeG7g24gZ2lhbyB0aGVvIHRo4bupIHThu7EgdMO0cMO0IMSR4bqjbyBuZ8aw4bujYyIKKworIzogY29tbWFuZC1saXN0Lmg6MTU5Cittc2dpZCAiUGljayBvdXQgYW5kIG1hc3NhZ2UgcGFyYW1ldGVycyIKK21zZ3N0ciAiQ+G6rXkgcmEgdsOgIHjhu60gbMO9IGPDoWMgdGhhbSBz4buRIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjAKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiR+G7oSBi4buPIGPDoWMgdOG6rXAgdGluIHThu6sgY8OieSBsw6BtIHZp4buHYyB2w6AgdOG7qyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MQorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgYXMgZW1haWxzIgorbXNnc3RyICJH4butaSBt4buZdCB04bqtcCBo4bujcCBj4bunYSBjw6FjIG1p4bq/bmcgdsOhIOG7nyBk4bqhbmcgdGjGsCDEkWnhu4duIHThu60iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MgorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEdpdCBwcm90b2NvbCB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIsSQ4bqpeSBjw6FjIMSR4buRaSB0xrDhu6NuZyBsw6puIHRow7RuZyBxdWEgZ2lhbyB0aOG7qWMgR2l0IMSR4bq/biBraG8gY2jhu6lhIGtow6FjIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjMKK21zZ2lkICJSZXN0cmljdGVkIGxvZ2luIHNoZWxsIGZvciBHaXQtb25seSBTU0ggYWNjZXNzIgorbXNnc3RyICJI4buHIHbhu48gxJHEg25nIG5o4bqtcCBjw7MgaOG6oW4gY2jhur8gY2hvIHRydXkgY+G6rXAgU1NIIGNo4buJLUdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY0Cittc2dpZCAiU3VtbWFyaXplICdnaXQgbG9nJyBvdXRwdXQiCittc2dzdHIgIkvhur90IHh14bqldCDigJxnaXQgbG9n4oCdIGThuqFuZyB0w7NtIHThuq90IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjUKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGPDoWMga2nhu4N1IGtow6FjIG5oYXUgY+G7p2EgY8OhYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NgorbXNnaWQgIlNob3cgYnJhbmNoZXMgYW5kIHRoZWlyIGNvbW1pdHMiCittc2dzdHIgIkhp4buDbiB0aOG7iyBuaOG7r25nIG5ow6FuaCB2w6AgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGPhu6dhIGNow7puZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTY3Cittc2dpZCAiU2hvdyBwYWNrZWQgYXJjaGl2ZSBpbmRleCIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGPDoWMgbXVjIGzhu6VjIGtobyBuw6luIMSRw6MgxJHDs25nIGfDs2kiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OAorbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIkxp4buHdCBrw6ogY8OhYyB0aGFtIGNoaeG6v3UgdHJvbmcgbeG7mXQga2hvIG7hu5lpIGLhu5kiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OQorbXNnaWQgIkdpdCdzIGkxOG4gc2V0dXAgY29kZSBmb3Igc2hlbGwgc2NyaXB0cyIKK21zZ3N0ciAiTsOjIGPDoGkgxJHhurd0IHF14buRYyB04bq/IGjDs2EgY+G7p2EgR2l0IGNobyB2xINuIGzhu4duaCBo4buHIHbhu48iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MAorbXNnaWQgIkNvbW1vbiBHaXQgc2hlbGwgc2NyaXB0IHNldHVwIGNvZGUiCittc2dzdHIgIk3DoyBjw6BpIMSR4bq3dCB2xINuIGzhu4duaCBo4buHIHbhu48gR2l0IGNodW5nIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzEKK21zZ2lkICJJbml0aWFsaXplIGFuZCBtb2RpZnkgdGhlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiS2jhu59pIHThuqFvIHbDoCBz4butYSDEkeG7lWkgc3BhcnNlLWNoZWNrb3V0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzIKK21zZ2lkICJTdGFzaCB0aGUgY2hhbmdlcyBpbiBhIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGF3YXkiCittc2dzdHIgIlThuqFtIGPhuqV0IMSRaSBjw6FjIHRoYXkgxJHhu5VpIHRyb25nIG3hu5l0IHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgYuG6qW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MworbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBzdGFnaW5nIGFyZWEiCittc2dzdHIgIlRow6ptIG7hu5lpIGR1bmcgdOG6rXAgdGluIHbDoG8gdsO5bmcgYuG7hyBwaMOzbmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NAorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0cuG6oW5nIHRow6FpIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NQorbXNnaWQgIlJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIgorbXNnc3RyICJYw7NhIGLhu48gY8OhYyBraG/huqNuZyB0cuG6r25nIGtow7RuZyBj4bqnbiB0aGnhur90IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzYKK21zZ2lkICJJbml0aWFsaXplLCB1cGRhdGUgb3IgaW5zcGVjdCBzdWJtb2R1bGVzIgorbXNnc3RyICJLaOG7n2kgdOG6oW8sIGPhuq1wIG5o4bqtdCBoYXkgxJFp4buBdSB0cmEgY8OhYyBtw7QtxJF1bi1jb24iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NworbXNnaWQgIkJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYW5kIEdpdCIKK21zZ3N0ciAiVGhhbyB0w6FjIGhhaSBoxrDhu5tuZyBnaeG7ryBoYWkga2hvIFN1YnZlcnNpb24gdsOgIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc4Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIgorbXNnc3RyICJDw6FjIG5ow6FuaCBjaHV54buDbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc5Cittc2dpZCAiUmVhZCwgbW9kaWZ5IGFuZCBkZWxldGUgc3ltYm9saWMgcmVmcyIKK21zZ3N0ciAixJDhu41jLCBz4butYSB2w6AgeMOzYSB0aGFtIGNoaeG6v3UgbeG7gW0iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MAorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIG9yIHZlcmlmeSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHIgorbXNnc3RyICJU4bqhbywgbGnhu4d0IGvDqiwgeMOzYSBoYXkgeMOhYyB0aOG7sWMgbeG7mXQgxJHhu5FpIHTGsOG7o25nIHRo4bq7IMSRxrDhu6NjIGvDvSBi4bqxbmcgR1BHIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODEKK21zZ2lkICJDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBhIGJsb2IncyBjb250ZW50cyIKK21zZ3N0ciAiVOG6oW8gbeG7mXQgdOG6rXAgdGluIHThuqFtIHbhu5tpIG7hu5lpIGR1bmcgY+G7p2EgYmxvYiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgyCittc2dpZCAiVW5wYWNrIG9iamVjdHMgZnJvbSBhIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICJH4buhIGPDoWMgxJHhu5FpIHTGsOG7o25nIGto4buPaSBt4buZdCBraG8gbMawdSDEkcOjIMSRw7NuZyBnw7NpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODMKK21zZ2lkICJSZWdpc3RlciBmaWxlIGNvbnRlbnRzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGluZGV4IgorbXNnc3RyICLEkMSDbmcga8O9IG7hu5lpIGR1bmcgdOG6rXAgdGluIHThu6sgY8OieSBsw6BtIHZp4buHYyDEkeG6v24gYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODQKK21zZ2lkICJVcGRhdGUgdGhlIG9iamVjdCBuYW1lIHN0b3JlZCBpbiBhIHJlZiBzYWZlbHkiCittc2dzdHIgIkPhuq1wIG5o4bqtdCB0w6puIMSR4buRaSB0xrDhu6NuZyDEkcaw4bujYyBsxrB1IHRyb25nIG3hu5l0IHRoYW0gY2hp4bq/dSBt4buZdCBjw6FjaCBhbiB0b8OgbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg1Cittc2dpZCAiVXBkYXRlIGF1eGlsaWFyeSBpbmZvIGZpbGUgdG8gaGVscCBkdW1iIHNlcnZlcnMiCittc2dzdHIgIkPhuq1wIG5o4bqtdCB04bqtcCB0aW4gdGjDtG5nIHRpbiBwaOG7pSB0cuG7oyDEkeG7gyBnacO6cCDEkeG7oSBjw6FjIGThu4tjaCB24bulIGR1bWIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NgorbXNnaWQgIlNlbmQgYXJjaGl2ZSBiYWNrIHRvIGdpdC1hcmNoaXZlIgorbXNnc3RyICJH4butaSB0cuG7nyBs4bqhaSBraG8gbMawdSDEkeG6v24gZ2l0LWFyY2hpdmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NworbXNnaWQgIlNlbmQgb2JqZWN0cyBwYWNrZWQgYmFjayB0byBnaXQtZmV0Y2gtcGFjayIKK21zZ3N0ciAiR+G7rWkgdHLhu58gbOG6oWkgY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHDoyDEkcOzbmcgZ8OzaSBjaG8gZ2l0LWZldGNoLXBhY2siCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OAorbXNnaWQgIlNob3cgYSBHaXQgbG9naWNhbCB2YXJpYWJsZSIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIG3hu5l0IGJp4bq/biBHaXQgbHXhuq1uIGzDvSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg5Cittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgY29tbWl0cyIKK21zZ3N0ciAiS2nhu4NtIHRyYSBrw70gbOG6p24gY2h1eeG7g24gZ2lhbyBkw7luZyBHUEciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MAorbXNnaWQgIlZhbGlkYXRlIHBhY2tlZCBHaXQgYXJjaGl2ZSBmaWxlcyIKK21zZ3N0ciAiS2nhu4NtIHRyYSBs4bqhaSBjw6FjIHThuq1wIHRpbiBraG8gKGzGsHUgdHLhu68sIG7DqW4pIEdpdCDEkcOjIMSRxrDhu6NjIMSRw7NuZyBnw7NpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTEKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiB0YWdzIgorbXNnc3RyICJLaeG7g20gdHJhIGNo4buvIGvDvSBHUEcgY+G7p2EgY8OhYyB0aOG6uyIKKworIzogY29tbWFuZC1saXN0Lmg6MTkyCittc2dpZCAiR2l0IHdlYiBpbnRlcmZhY2UgKHdlYiBmcm9udGVuZCB0byBHaXQgcmVwb3NpdG9yaWVzKSIKK21zZ3N0ciAiR2lhbyBkaeG7h24gR2l0IHRyw6puIG7hu4FuIHdlYiAo4bupbmcgZOG7pW5nIHdlYiBjaOG6oXkgdHLDqm4ga2hvIEdpdCkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MworbXNnaWQgIlNob3cgbG9ncyB3aXRoIGRpZmZlcmVuY2UgZWFjaCBjb21taXQgaW50cm9kdWNlcyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGPDoWMgbmjhuq10IGvDvSB24bubaSB04burbmcgbOG6p24gY2h1eeG7g24gZ2lhbyBraMOhYyBuaGF1IMSRxrBhIHJhIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTQKK21zZ2lkICJNYW5hZ2UgbXVsdGlwbGUgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiUXXhuqNuIGzDvSBuaGnhu4F1IGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NQorbXNnaWQgIkNyZWF0ZSBhIHRyZWUgb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgIlThuqFvIG3hu5l0IMSR4buRaSB0xrDhu6NuZyBjw6J5IHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiBzdGRpbiBoaeG7h24gdOG6oWkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NgorbXNnaWQgIkRlZmluaW5nIGF0dHJpYnV0ZXMgcGVyIHBhdGgiCittc2dzdHIgIsSQ4buLbmggbmdoxKlhIGPDoWMgdGh14buZYyB0w61uaCBjaG8gbeG7l2kgxJHGsOG7nW5nIGThuqtuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTcKK21zZ2lkICJHaXQgY29tbWFuZC1saW5lIGludGVyZmFjZSBhbmQgY29udmVudGlvbnMiCittc2dzdHIgIkdpYW8gZGnhu4duIGTDsm5nIGzhu4duaCBHaXQgdsOgIHF1eSDGsOG7m2MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OAorbXNnaWQgIkEgR2l0IGNvcmUgdHV0b3JpYWwgZm9yIGRldmVsb3BlcnMiCittc2dzdHIgIkjGsOG7m25nIGThuqtuIEdpdCBjxqEgYuG6o24gY2hvIG5ow6AgcGjDoXQgdHJp4buDbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk5Cittc2dpZCAiR2l0IGZvciBDVlMgdXNlcnMiCittc2dzdHIgIkdpdCBkw6BuaCBjaG8gbmjhu69uZyBuZ8aw4budaSBkw7luZyBDVlMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMAorbXNnaWQgIlR3ZWFraW5nIGRpZmYgb3V0cHV0IgorbXNnc3RyICJDaOG7iW5oIGvhur90IHh14bqldCBkaWZmIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDEKK21zZ2lkICJBIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcyBmb3IgRXZlcnlkYXkgR2l0IgorbXNnc3RyICJN4buZdCB04bqtcCBo4bujcCBs4buHbmggaOG7r3UgZOG7pW5nIHThu5FpIHRoaeG7g3UgxJHhu4MgZMO5bmcgR2l0IGjDoG5nIG5nw6B5IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDIKK21zZ2lkICJBIEdpdCBHbG9zc2FyeSIKK21zZ3N0ciAiVGh14bqtdCBuZ+G7ryBjaHV5w6puIG3DtG4gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDMKK21zZ2lkICJIb29rcyB1c2VkIGJ5IEdpdCIKK21zZ3N0ciAiQ8OhYyBtw7NjIMSRxrDhu6NjIHPhu60gZOG7pW5nIGLhu59pIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA0Cittc2dpZCAiU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZSIKK21zZ3N0ciAiQ2jhu4kgxJHhu4tuaCBjw6FjIHThuq1wIHRpbiBraMO0bmcgY+G6p24gdGhlbyBkw7VpIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDUKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAixJDhu4tuaCBuZ2jEqWEgdGh14buZYyB0w61uaCBtw7QtxJF1bi1jb24iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNgorbXNnaWQgIkdpdCBuYW1lc3BhY2VzIgorbXNnc3RyICJLaMO0bmcgZ2lhbiB0w6puIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA3Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICJC4buRIGPhu6VjIGtobyBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOAorbXNnaWQgIlNwZWNpZnlpbmcgcmV2aXNpb25zIGFuZCByYW5nZXMgZm9yIEdpdCIKK21zZ3N0ciAiQ2jhu4kgxJHhu4tuaCDEkWnhu4NtIHjDqXQgZHV54buHdCB2w6AgdsO5bmcgY2hvIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA5Cittc2dpZCAiTW91bnRpbmcgb25lIHJlcG9zaXRvcnkgaW5zaWRlIGFub3RoZXIiCittc2dzdHIgIkfhuq9uIG3hu5l0IGtobyBjaOG7qWEgdsOgbyB0cm9uZyBt4buZdCBjw6FpIGtow6FjIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTAKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQ6IHBhcnQgdHdvIgorbXNnc3RyICJIxrDhu5tuZyBk4bqrbiBjw6FjaCBkw7luZyBHaXQ6IHBo4bqnbiBoYWkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMQorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdCIKK21zZ3N0ciAiSMaw4bubbmcgZOG6q24gY8OhY2ggZMO5bmcgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTIKK21zZ2lkICJBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQiCittc2dzdHIgIlThu5VuZyBxdWFuIHbhu4EgbHXhu5NuZyBjw7RuZyB2aeG7h2Mga2h1eeG6v24gbmdo4buLIG7Dqm4gZMO5bmcgduG7m2kgR2l0IgorCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgIkLhuqFuIGPhuqduIGto4bufaSDEkeG6p3UgYuG6sW5nIFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6NjAKK21zZ2lkICJEbyB5b3Ugd2FudCBtZSB0byBkbyBpdCBmb3IgeW91IFtZL25dPyAiCittc2dzdHIgIkLhuqFuIGPDsyBtdeG7kW4gdMO0aSB0aOG7sWMgaGnhu4duIMSRaeG7gXUgbsOgeSBjaG8gYuG6oW4ga2jDtG5nIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICLEkOG6p3UgdsOgbyByZXYgc2FpOiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGJpc2VjdGVkX2hlYWQiCittc2dzdHIgIsSQ4bqndSB2w6BvIHJldiBzYWk6ICRiaXNlY3RlZF9oZWFkIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAixJDhuqd1IHbDoG8gcmV2IHNhaTogJHJldiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICLigJxnaXQgYmlzZWN0ICRURVJNX0JBROKAnSBjw7MgdGjhu4MgbOG6pXkgY2jhu4kgbeG7mXQgxJHhu5FpIHPhu5EuIgorCisjOiBnaXQtYmlzZWN0LnNoOjIwOQorbXNnaWQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iCittc2dzdHIgIkNoxrBhIGNo4buJIHJhIHThuq1wIHRpbiBnaGkgbmjhuq10IGvDvSIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICRmaWxlIGZvciByZXBsYXlpbmciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgJGZpbGUgxJHhu4MgdGhhbyBkaeG7hW4gbOG6oWkiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjMyCittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICI/PyBi4bqhbiDEkWFuZyBuw7NpIGfDrCB0aOG6vz8iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQxCittc2dpZCAiYmlzZWN0IHJ1biBmYWlsZWQ6IG5vIGNvbW1hbmQgcHJvdmlkZWQuIgorbXNnc3RyICJiaXNlY3QgY2jhuqF5IGfhurdwIGzhu5dpOiBraMO0bmcgxJHGsGEgcmEgbOG7h25oLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgIsSRYW5nIGNo4bqheSBs4buHbmggJGNvbW1hbmQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgIiIKKyJjaOG6oXkgYmlzZWN0IGfhurdwIGzhu5dpOlxuIgorIm3DoyB0cuG6oyB24buBICRyZXMgdOG7qyBs4buHbmgg4oCcJGNvbW1hbmTigJ0gbMOgIDwgMCBob+G6t2MgPj0gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJiaXNlY3Qga2jDtG5nIHRo4buDIHRp4bq/cCB04bulYyB0aMOqbSDEkcaw4bujYyBu4buvYSIKKworIzogZ2l0LWJpc2VjdC5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICIiCisiY2jhuqF5IGJpc2VjdCBn4bq3cCBs4buXaTpcbiIKKyLigJ1iaXNlY3Rfc3RhdGUgJHN0YXRl4oCdIMSRw6MgdGhvw6F0IHJhIHbhu5tpIG3DoyBs4buXaSAkcmVzIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAiYmlzZWN0IGNo4bqheSB0aMOgbmggY8O0bmciCisKKyM6IGdpdC1iaXNlY3Quc2g6MzAwCittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICJDaMO6bmcgdMO0aSBraMO0bmcgYmlzZWN0LiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NDYKK21zZ2lkICIiCisiRXJyb3I6IFlvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJtZXJnZSIKK21zZ3N0ciAiIgorIkzhu5dpOiBDw6FjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kgY+G7p2EgYuG6oW4gduG7m2kgY8OhYyB04bqtcCB0aW4gc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSAiCisibOG7h25oIGjDsmEgdHLhu5luIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MQorbXNnaWQgIkF1dG9tYXRlZCBtZXJnZSBkaWQgbm90IHdvcmsuIgorbXNnc3RyICJIw7JhIHRy4buZbiBt4buZdCBjw6FjaCB04buxIMSR4buZbmcga2jDtG5nIGzDoG0gdmnhu4djLiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjIKK21zZ2lkICJTaG91bGQgbm90IGJlIGRvaW5nIGFuIG9jdG9wdXMuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiBt4buZdCBvY3RvcHVzLiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGNvbW1vbiBjb21taXQgd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIktow7RuZyB0aOG7gyB0w6xtIHRo4bqleSBs4bqnbiBjaHV54buDbiBnaWFvIGNodW5nIHbhu5tpICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAixJDDoyBj4bqtcCBuaOG6rXQgduG7m2kgJHByZXR0eV9uYW1lIHLhu5NpIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHRvOiAkcHJldHR5X25hbWUiCittc2dzdHIgIkNodXnhu4NuLXRp4bq/cC1uaGFuaCDEkeG6v246ICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6OTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIsSQYW5nIHRo4butIGjDsmEgdHLhu5luIMSRxqFuIGdp4bqjbiB24bubaSAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjEwMgorbXNnaWQgIlNpbXBsZSBtZXJnZSBkaWQgbm90IHdvcmssIHRyeWluZyBhdXRvbWF0aWMgbWVyZ2UuIgorbXNnc3RyICJIw7JhIHRy4buZbiDEkcahbiBnaeG6o24ga2jDtG5nIGzDoG0gdmnhu4djLCB0aOG7rSBow7JhIHRy4buZbiB04buxIMSR4buZbmcuIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIyMQorbXNnaWQgIkNhbm5vdCByZW1vdmUgdGVtcG9yYXJ5IGluZGV4IChjYW4ndCBoYXBwZW4pIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ+G7oSBi4buPIGLhuqNuZyBt4bulYyBs4bulYyB04bqhbSB0aOG7nWkgKGtow7RuZyB0aOG7gyB44bqjeSByYSkiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIktow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgJHJlZl9zdGFzaCB24bubaSAkd19jb21taXQiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzI0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBwdXNoJzogJG9wdGlvbiIKK21zZ3N0ciAibOG7l2k6IGtow7RuZyBoaeG7g3UgdMO5eSBjaOG7jW4gY2hvIOKAnHN0YXNoIHB1c2jigJ06ICRvcHRpb24iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJHN0YXNoX21zZyIKK21zZ3N0ciAixJDDoyBnaGkgbOG6oWkgdGjGsCBt4bulYyBsw6BtIHZp4buHYyB2w6AgdHLhuqFuZyB0aMOhaSBt4bulYyBs4bulYyAkc3Rhc2hfbXNnIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjUzNgorIywgc2gtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICRvcHQiCittc2dzdHIgImtow7RuZyBoaeG7g3UgdMO5eSBjaOG7jW46ICRvcHQiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICJDaOG7iSByYSBxdcOhIG5oaeG7gXUgxJFp4buDbSB4w6l0IGR1eeG7h3Q6ICRSRVYiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZSBraMO0bmcgcGjhuqNpIGzDoCB0aGFtIGNoaeG6v3UgaOG7o3AgbOG7hyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIuKAnCRhcmdz4oCdIGtow7RuZyBwaOG6o2kgbMOgIGzhuqduIGNodXnhu4NuIGdpYW8ga2nhu4N1LXN0YXNoIChj4bqldCDEkWkpIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIuKAnSRhcmdz4oCdIGtow7RuZyBwaOG6o2kgdGhhbSBjaGnhur91IMSR4bq/biBzdGFzaCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MTgKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzDoG0gdMawxqFpIG3hu5tpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MjIKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIktow7RuZyB0aOG7gyDDoXAgZOG7pW5nIG3hu5l0IHN0YXNoIOG7nyBnaeG7r2EgY+G7p2EgcXXDoSB0csOsbmggaMOyYSB0cuG7mW4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMwCittc2dpZCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiWHVuZyDEkeG7mXQgdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjLiBIw6N5IHRo4butIG3DoCBraMO0bmcgZMO5bmcgdMO5eSBjaOG7jW4gLS1pbmRleC4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMyCittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBs4bqhaSBjw6J5IGNo4buJIG3hu6VjIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY0MQorbXNnaWQgIkNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIGVudHJ5IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjhu6VjIGjhu5NpIGPDoWMgdOG6rXAgdGluIGNoxrBhIHRoZW8gZMO1aSB04burIG3hu6VjIGPhuqV0IMSRaSAoc3Rhc2gpIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY2NgorbXNnaWQgIkNhbm5vdCB1bnN0YWdlIG1vZGlmaWVkIGZpbGVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgYuG7jyByYSBraOG7j2kgYuG7hyBwaMOzbmcgY8OhYyB04bqtcCB0aW4gxJHDoyDEkcaw4bujYyBz4butYSBjaOG7r2EiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICLEkMOjIHjDs2EgJHtSRVZ9ICgkcykiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIke1JFVn06IEtow7RuZyB0aOG7gyB4w7NhIGLhu48gbeG7pWMgc3Rhc2giCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzkyCittc2dpZCAiKFRvIHJlc3RvcmUgdGhlbSB0eXBlIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorbXNnc3RyICIoxJDhu4MgcGjhu6VjIGjhu5NpIGzhuqFpIGNow7puZyBow6N5IGfDtSBcImdpdCBzdGFzaCBhcHBseVwiKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMDMKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIsSQxrDhu51uZyBk4bqrbiB0xrDGoW5nIMSR4buRaSBjaOG7iSBjw7MgdGjhu4MgZMO5bmcgdOG7qyB0aMawIG3hu6VjIOG7nyBt4bupYyBjYW8gbmjhuqV0IGPhu6dhIGPDonkgbMOgbSAiCisidmnhu4djIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMworIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAiIgorInJlcG8gVVJMOiDigJwkcmVwb+KAnSBwaOG6o2kgbMOgIMSRxrDhu51uZyBk4bqrbiB0dXnhu4d0IMSR4buRaSBob+G6t2MgbMOgIGLhuq90IMSR4bqndSBi4bqxbmcgLi98Li4vIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzMgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIuKAnSRzbV9wYXRo4oCdIHRo4buxYyBz4buxIMSRw6MgdOG7k24gdOG6oWkg4bufIGLhuqNuZyBt4bulYyBs4bulYyBy4buTaSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IGFuZCBpcyBub3QgYSBzdWJtb2R1bGUiCittc2dzdHIgIiIKKyLigJ0kc21fcGF0aOKAnSB0aOG7sWMgc+G7sSDEkcOjIHThu5NuIHThuqFpIOG7nyBi4bqjbmcgbeG7pWMgbOG7pWMgcuG7k2kgdsOgIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IG3DtC3EkXVuLSIKKyJjb24iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIuKAnCRzbV9wYXRo4oCdIGtow7RuZyBjw7MgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6BvIMSRxrDhu6NjIGzhuqV5IHJhIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MworIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIsSQYW5nIHRow6ptIHJlcG8gY8OzIHPhurVuIHThuqFpIOKAnCRzbV9wYXRo4oCdIHbDoG8gYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIuKAnSRzbV9wYXRo4oCdIMSRw6MgdOG7k24gdOG6oWkgdOG7qyB0csaw4bubYyB2w6Aga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQga2hvIGdpdCBo4bujcCBs4buHIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4MworIywgc2gtZm9ybWF0Cittc2dpZCAiQSBnaXQgZGlyZWN0b3J5IGZvciAnJHNtX25hbWUnIGlzIGZvdW5kIGxvY2FsbHkgd2l0aCByZW1vdGUocyk6IgorbXNnc3RyICIiCisiVGjGsCBt4bulYyBnaXQgY2hvIOKAnCRzbV9uYW1l4oCdIMSRxrDhu6NjIHTDrG0gdGjhuqV5IG3hu5l0IGPDoWNoIGPhu6VjIGLhu5kgduG7m2kgY8OhYyBtw6F5IGNo4bunOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb21cbiIKKyIgICRyZWFscmVwb1xuIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0ICIKKyJyZXBvXG4iCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorIm9wdGlvbi4iCittc2dzdHIgIiIKKyJO4bq/dSBi4bqhbiBtdeG7kW4gc+G7rSBk4bulbmcgbOG6oWkgdGjGsCBt4bulYyBu4buZaSBi4buZIG7DoHkgdGhheSB2w6wgbmjDom4gYuG6o24gbOG6oWkgbOG6p24gbuG7r2EgdOG7q1xuIgorIiAgJHJlYWxyZXBvXG4iCisiZMO5bmcgdMO5eSBjaOG7jW4g4oCcLS1mb3JjZeKAnS4gTuG6v3UgdGjGsCBt4bulYyBnaXQgbuG7mWkgYuG7mSBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBraG8gxJHDum5nXG4iCisiaG/hurdjIGzDoCBi4bqhbiBraMO0bmcgY2jhuq9jIGNo4bqvbiDEkWnhu4F1IMSRw7MgbmdoxKlhIGzDoCBnw6wgdGjDrCBjaOG7jW4gdMOqbiBraMOhYyB24bubaSB0w7l5ICIKKyJjaOG7jW4g4oCcLS1uYW1l4oCdLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgIiIKKyJQaOG7pWMgaOG7k2kgc+G7sSBob+G6oXQgxJHhu5luZyBj4bunYSB0aMawIG3hu6VjIGdpdCBu4buZaSBi4buZIGNobyBtw7QtxJF1bi1jb24g4oCcJHNtX25hbWXigJ0uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwMworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgcmEgbcO0LcSRdW4tY29uIOKAnCRzbV9wYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRow6ptIG3DtC3EkXVuLWNvbiDigJwkc21fcGF0aOKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSRxINuZyBrw70gduG7m2kgaOG7hyB0aOG7kW5nIG3DtC3EkXVuLWNvbiDigJwkc21fcGF0aOKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJLaMO0bmcgdMOsbSB0aOG6pXkgxJFp4buDbSB4w6l0IGR1eeG7h3QgaGnhu4duIGjDoG5oIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24gIgorIuKAnCRkaXNwbGF5cGF0aOKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgduG7gSB0cm9uZyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRzbV9wYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICIKKyInJHNtX3BhdGgnIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IMSRaeG7g20geMOpdCBkdXnhu4d0IGhp4buHbiBow6BuaCAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0gdHJvbmcgIgorIsSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJHNtX3BhdGjigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjIzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOyB0cnlpbmcgdG8gZGlyZWN0bHkgZmV0Y2ggIgorIiRzaGExOiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBs4bqleSB24buBIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJGRpc3BsYXlwYXRo4oCdOyB0aOG7rSBs4bqleSB24buBIHRy4buxYyAiCisidGnhur9wICRzaGExOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJGZXRjaGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnLCBidXQgaXQgZGlkIG5vdCBjb250YWluICRzaGExLiAiCisiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iCittc2dzdHIgIiIKKyLEkMOjIGzhuqV5IHbhu4EgdOG7qyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4gY29uIOKAnCRkaXNwbGF5cGF0aOKAnSwgbmjGsG5nIG7DsyBraMO0bmcgY2jhu6lhICRzaGExLiAiCisiTOG6pXkgduG7gSB0aGVvIMSR4buLbmggaMaw4bubbmcgY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOzIGfhurdwIGzhu5dpLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgcmEg4oCcJHNoYTHigJ0gdHJvbmcgxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwkZGlzcGxheXBhdGjigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAixJDGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwkZGlzcGxheXBhdGjigJ06IMSRw6MgY2hlY2tvdXQg4oCcJHNoYTHigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIktow7RuZyB0aOG7gyBj4bqjaSB04buVIOKAnCRzaGEx4oCdIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJGRpc3BsYXlwYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICLEkMaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRkaXNwbGF5cGF0aOKAnTogxJHGsOG7o2MgcmViYXNlIHbDoG8gdHJvbmcg4oCcJHNoYTHigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQ3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBow7JhIHRy4buZbiAobWVyZ2UpIOKAnCRzaGEx4oCdIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJGRpc3BsYXlwYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0OAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICLEkMaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRkaXNwbGF5cGF0aOKAnTogxJHGsOG7o2MgaMOyYSB0cuG7mW4gdsOgbyDigJwkc2hhMeKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBvZiAnJGNvbW1hbmQgJHNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorIlRo4buxYyBoaeG7h24ga2jDtG5nIHRow6BuaCBjw7RuZyBs4buHbmgg4oCcJGNvbW1hbmQgJHNoYTHigJ0gdHJvbmcgxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiAiCisi4oCcJGRpc3BsYXlwYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY1NAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6ICckY29tbWFuZCAkc2hhMSciCittc2dzdHIgIsSQxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJGRpc3BsYXlwYXRo4oCdOiDigJwkY29tbWFuZCAkc2hhMeKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2ODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG7hyBxdXkgdsOgbyB0cm9uZyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRkaXNwbGF5cGF0aOKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTYKK21zZ2lkICJUaGUgLS1jYWNoZWQgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC0tZmlsZXMgb3B0aW9uIgorbXNnc3RyICJUw7l5IGNo4buNbiAtLWNhY2hlZCBraMO0bmcgdGjhu4MgZMO5bmcgY8O5bmcgduG7m2kgdMO5eSBjaOG7jW4gLS1maWxlcyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgbW9kZSAkbW9kX2RzdCIKK21zZ3N0ciAiY2jhur8gxJHhu5kga2jDtG5nIG5oxrAgbW9uZyBjaOG7nSAkbW9kX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX3NyYyIKK21zZ3N0ciAiICBD4bqjbmggYsOhbzogJGRpc3BsYXlfbmFtZSBraMO0bmcgY2jhu6lhIGzhuqduIGNodXnhu4NuIGdpYW8gJHNoYTFfc3JjIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgIEPhuqNuaCBiw6FvOiAkZGlzcGxheV9uYW1lIGtow7RuZyBjaOG7qWEgbOG6p24gY2h1eeG7g24gZ2lhbyAkc2hhMV9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTc0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiIKKyIgIEPhuqNuaCBiw6FvOiAkZGlzcGxheV9uYW1lIGtow7RuZyBjaOG7qWEgbmjhu69uZyBs4bqnbiBjaHV54buDbiBnaWFvICRzaGExX3NyYyB2w6AgIgorIiRzaGExX2RzdCIKKworIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU2VlIGdpdC0ke2NtZH0oMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICJYZW0gZ2l0LSR7Y21kfSgxKSDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dC4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDkKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC4iCittc2dzdHIgIsSQw6Mgw6FwIGThu6VuZyBhdXRvc3Rhc2guIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgIktow7RuZyB0aOG7gyBsxrB1ICRzdGFzaF9zaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2luZyAoJG5ld19jb3VudC8kdG90YWwpIgorbXNnc3RyICLEkGFuZyByZWJhc2UgKCRuZXdfY291bnQvJHRvdGFsKSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIwNworbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNlIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdFxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisieCwgZXhlYyA8Y29tbWl0PiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJDw6FjIGzhu4duaDpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gZMO5bmcgbOG6p24gY2h1eeG7g24gZ2lhb1xuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IGTDuW5nIGzhuqduIGNodXnhu4NuIGdpYW8sIG5oxrBuZyBz4butYSBs4bqhaSBwaOG6p24gY2jDuiB0aMOtY2hcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gZMO5bmcgbOG6p24gY2h1eeG7g24gZ2lhbywgbmjGsG5nIGThu6tuZyBs4bqhaSDEkeG7gyB0dSBi4buVIChhbWVuZClcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSBkw7luZyBs4bqnbiBjaHV54buDbiBnaWFvLCBuaMawbmcgbWVsZCB2w6BvIGzhuqduIGNodXnhu4NuIGdpYW8ga+G6vyAiCisidHLGsOG7m2NcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGdp4buRbmcgbmjGsCBcInNxdWFzaFwiLCBuaMawbmcgbG/huqFpIGLhu48gY2jDuiB0aMOtY2ggY+G7p2EgbOG6p24gIgorImNodXnhu4NuIGdpYW8gbsOgeVxuIgorIngsIGV4ZWMgPGNvbW1pdD4gPSBjaOG6oXkgbOG7h25oIChwaOG6p24gY8OybiBs4bqhaSBj4bunYSBkw7JuZykgZMO5bmcgaOG7hyB24buPXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHjDs2EgbOG6p24gY2h1eeG7g24gZ2lhb1xuIgorImwsIGxhYmVsIDxsYWJlbD4gPSDEkcOhbmggbmjDo24gSEVBRCBoaeG7h24gdOG6oWkgYuG6sW5nIG3hu5l0IHTDqm5cbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gxJHhurd0IGzhuqFpIEhFQUQgdGjDoG5oIG3hu5l0IG5ow6NuXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxuaMOjbj4gWyMgPG3hu5l0X2TDsm5nPl1cbiIKKyIuICAgICAgIHThuqFvIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gaMOyYSB0cuG7mW4gc+G7rSBk4bulbmcgY2jDuiB0aMOtY2ggY+G7p2EgbOG6p24gY2h1eeG7g25cbiIKKyIuICAgICAgIGdpYW8gaMOyYSB0cuG7mW4gZ+G7kWMgKGhv4bq3YyBt4buZdF9kw7JuZywgbuG6v3Uga2jDtG5nIGNo4buJIMSR4buLbmggbOG6p24gY2h1eeG7g24gZ2lhbyAiCisiaMOyYVxuIgorIi4gICAgICAgdHLhu5luIGfhu5FjKS4gRMO5bmcgLWMgPGNvbW1pdD4gxJHhu4MgcmV3b3JkIGNow7ogdGjDrWNoIGPhu6dhIGzhuqduIGNodXnhu4NuICIKKyJnaWFvLlxuIgorIlxuIgorIk5o4buvbmcgZMOybmcgbsOgeSBjw7MgdGjhu4MgxJHhuqNvIG5nxrDhu6NjIHRo4bupIHThu7E7IGNow7puZyBjaOG6oXkgdOG7qyB0csOqbiDEkeG7iW5oIHh14buRbmcgZMaw4bubaSAiCisixJHDoXkuXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyNzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIkLhuqFuIGPDsyB0aOG7gyB0dSBi4buVIGzhuqduIGNodXnhu4NuIGdpYW8gbmdheSBiw6J5IGdp4budIGLhurFuZzpcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIk3hu5l0IGtoaSDEkcOjIGjDoGkgbMOybmcgduG7m2kgbmjhu69uZyB0aGF5IMSR4buVaSBj4bunYSBtw6xuaCwgdGjDrCBjaOG6oXk6XG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyOTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRzaGExOiBub3QgYSBjb21taXQgdGhhdCBjYW4gYmUgcGlja2VkIgorbXNnc3RyICIkc2hhMToga2jDtG5nIHBo4bqjaSBsw6AgbOG6p24gY2h1eeG7g24gZ2lhbyBtw6AgY8OzIHRo4buDIGzhuqV5IHJhIMSRxrDhu6NjIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzM0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKK21zZ3N0ciAiVMOqbiBs4bqnbiBjaHV54buDbiBnaWFvIGtow7RuZyBo4bujcCBs4buHOiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjM2NAorbXNnaWQgIkNhbm5vdCB3cml0ZSBjdXJyZW50IGNvbW1pdCdzIHJlcGxhY2VtZW50IHNoYTEiCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgbOG6oWkgc2hhMSB0aGF5IHRo4bq/IGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAiQ2h1eeG7g24tdGnhur9wLW5oYW5oIMSR4bq/biAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGNodXnhu4NuLXRp4bq/cC1uaGFuaCDEkeG6v24gJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBtb3ZlIEhFQUQgdG8gJGZpcnN0X3BhcmVudCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGRpIGNodXnhu4NuIEhFQUQgxJHhur9uICRmaXJzdF9wYXJlbnQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiAkc2hhMSIKK21zZ3N0ciAiVOG7qyBjaOG7kWkgc3F1YXNoIGzhuqduIGjDsmEgdHLhu5luOiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVkb2luZyBtZXJnZSAkc2hhMSIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGhvw6BuIGzhuqFpIGLGsOG7m2MgaMOyYSB0cuG7mW4gJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwaWNrICRzaGExIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgcmEgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMke259OiIKK21zZ3N0ciAixJDDonkgbMOgIGNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupICMke259OiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMke259IHdpbGwgYmUgc2tpcHBlZDoiCittc2dzdHIgIkNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupICMke259IHPhur0gYuG7iyBi4buPIHF1YToiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0ODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0LiIKK21zZ2lkX3BsdXJhbCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXRzLiIKK21zZ3N0clswXSAixJDDonkgbMOgIHThu5UgaOG7o3AgY+G7p2EgJGNvdW50IGzhuqduIGNodXnhu4NuIGdpYW8uIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgJGZpeHVwX21zZyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDICRmaXh1cF9tc2ciCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTUKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgMiBjb21taXRzLiIKK21zZ3N0ciAixJDDonkgbMOgIHThu5UgaOG7o3AgY+G7p2EgMiBs4bqnbiBjaHV54buDbiBnaWFvLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjUzNiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTc5CisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTgyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJHNoYTEuLi4gJHJlc3QiCittc2dzdHIgIktow7RuZyB0aOG7gyDDoXAgZOG7pW5nICRzaGEx4oCmICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFtZW5kIGNvbW1pdCBhZnRlciBzdWNjZXNzZnVsbHkgcGlja2luZyAkc2hhMS4uLiAkcmVzdFxuIgorIlRoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlLCBvciB0aGUgcHJlLWNvbW1pdCBob29rXG4iCisiZmFpbGVkLiBJZiB0aGUgcHJlLWNvbW1pdCBob29rIGZhaWxlZCwgeW91IG1heSBuZWVkIHRvIHJlc29sdmUgdGhlIGlzc3VlICIKKyJiZWZvcmVcbiIKKyJ5b3UgYXJlIGFibGUgdG8gcmV3b3JkIHRoZSBjb21taXQuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIHR1IGLhu5UgbOG6p24gY2h1eeG7g24gZ2lhbyBzYXUga2hpIGzhuqV5IHJhICRzaGEx4oCmICRyZXN0IHRow6BuaCBjw7RuZ1xuIgorIlZp4buHYyBuw6B5IGPDsyB0aOG7gyBsw6AgZG8gbeG7mXQgZ2hpIGNow7ogY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gbMOgIHRy4buRbmcgcuG7l25nLCBob+G6t2MgIgorIm3Ds2MgcHJlLWNvbW1pdFxuIgorImfhurdwIGzhu5dpLiBO4bq/dSBsw6AgbcOzYyBwcmUtY29tbWl0IGLhu4sgbOG7l2ksIELhuqFuIGPDsyBs4bq9IGPhuqduIGdp4bqjaSBxdXnhur90IHRy4bulYyB0cuG6t2MgIgorIm7DoHlcbiIKKyJ0csaw4bubYyBraGkgYuG6oW4gY8OzIHRo4buDIGzDoG0gdmnhu4djIGzhuqFpIHbhu5tpIGzhuqduIGNodXnhu4NuIGdpYW8uIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICRzaGExX2FiYnJldi4uLiAkcmVzdCIKK21zZ3N0ciAiQuG7iyBk4burbmcgdOG6oWkgJHNoYTFfYWJicmV24oCmICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJyRzcXVhc2hfc3R5bGUnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIktow7RuZyDigJwkc3F1YXNoX3N0eWxl4oCdIHRo4buDIG3DoCBraMO0bmcgY8OzIGzhuqduIGNodXnhu4NuIGdpYW8ga+G6vyB0csaw4bubYyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY4MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nOiAkcmVzdCIKK21zZ3N0ciAiVGjhu7FjIHRoaTogJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBmYWlsZWQ6ICRyZXN0IgorbXNnc3RyICJUaOG7sWMgdGhpIGfhurdwIGzhu5dpOiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5MworbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJ2w6AgdOG6oW8gY8OhYyB0aGF5IMSR4buVaSBi4bqjbmcgbeG7pWMgbOG7pWMgdsOgL2hheSBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Njk1Cittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIkLhuqFuIGPDsyB0aOG7gyBz4butYSBjw6FjIHRy4bulYyB0cuG6t2MsIHbDoCBzYXUgxJHDsyBjaOG6oXkgbOG7h25oIOKAnGPhuqNpIHThu5XigJ06XG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyMuIFRSQU5TTEFUT1JTOiBhZnRlciB0aGVzZSBsaW5lcyBpcyBhIGNvbW1hbmQgdG8gYmUgaXNzdWVkIGJ5IHRoZSB1c2VyCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRXhlY3V0aW9uIHN1Y2NlZWRlZDogJHJlc3RcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiVGjhu7FjIHRoaSB0aMOgbmggY8O0bmc6ICRyZXN0XG4iCisibmjGsG5nIGPDsm4gY8OhYyB0aGF5IMSR4buVaSB0cm9uZyBt4bulYyBs4bulYyB2w6AvaG/hurdjIGPDonkgbMOgbSB2aeG7h2NcbiIKKyJDaHV54buDbiBnaWFvIGhheSB04bqhbSBj4bqldCBjw6FjIHRoYXkgxJHhu5VpIG7DoHkgxJFpLCBy4buTaSBjaOG6oXlcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21tYW5kOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKK21zZ3N0ciAiTOG7h25oIGNoxrBhIGJp4bq/dDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MjAKK21zZ2lkICJQbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAiVnVpIGzDsm5nIHPhu61hIGzhu5dpIG7DoHkgYuG6sW5nIGPDoWNoIGTDuW5nIOKAnGdpdCByZWJhc2UgLS1lZGl0LXRvZG/igJ0uIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzU1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCAkaGVhZF9uYW1lLiIKK21zZ3N0ciAiQ8OgaSB04buVIHbDoCBj4bqtcCBuaOG6rXQgJGhlYWRfbmFtZSBt4buZdCBjw6FjaCB0aMOgbmggY8O0bmcuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEyCittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgeMOzYSBi4buPIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZVxuIgorInNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJC4bqhbiBjw7MgY8OhYyB0aGF5IMSR4buVaSBzbyB24bubaSB0cm9uZyBi4buHIHBow7NuZyB0cm9uZ1xuIgorInRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgY+G7p2EgYuG6oW4uIE7hur91IGPDoWMgdGhheSDEkeG7lWkgbsOgeSBsw6AgbXXhu5FuXG4iCisic3F1YXNoIHbDoG8gbOG6p24gY2h1eeG7g24gZ2lhbyBr4bq/IHRyxrDhu5tjLCBjaOG6oXk6XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJO4bq/dSBjaMO6bmcgY8OzIMO9IGzDoCDEkWkgxJHhur9uIGzhuqduIGNodXnhu4NuIGdpYW8gbeG7m2ksIHRow6wgY2jhuqF5OlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIlRyb25nIGPhuqMgaGFpIHRyxrDhu51uZyBo4bujcCwgbeG7mXQga2hpIGLhuqFuIGzDoG0geG9uZywgdGnhur9wIHThu6VjIGLhurFuZzpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM0Cittc2dpZCAiRXJyb3IgdHJ5aW5nIHRvIGZpbmQgdGhlIGF1dGhvciBpZGVudGl0eSB0byBhbWVuZCBjb21taXQiCittc2dzdHIgIkzhu5dpIGtoaSBj4buRIHTDrG0gxJHhu4tuaCBkYW5oIGPhu6dhIHTDoWMgZ2nhuqMgxJHhu4MgdHUgYuG7lSBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM5Cittc2dpZCAiIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJC4bqhbiBjw7MgY8OhYyB0aGF5IMSR4buVaSBjaMawYSBjaHV54buDbiBnaWFvIHRyb25nIHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MuXG4iCisiVnVpIGzDsm5nIGNodXnhu4NuIGdpYW8gY2jDum5nIHbDoCBzYXUgxJHDsyBjaOG6oXkgbOG7h25oIOKAnGdpdCByZWJhc2UgLS1jb250aW51ZeKAnSBs4bqnbiAiCisibuG7r2EuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ0IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDgKK21zZ2lkICJDb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGNodXnhu4NuIGdpYW8gY8OhYyB0aGF5IMSR4buVaSDEkcOjIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODc5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NjUKK21zZ2lkICJDb3VsZCBub3QgZXhlY3V0ZSBlZGl0b3IiCittc2dzdHIgIktow7RuZyB0aOG7gyB0aOG7sWMgdGhpIHRyw6xuaCBiacOqbiBzb+G6oW4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjaGVja291dCAkc3dpdGNoX3RvIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY2hlY2tvdXQgJHN3aXRjaF90byIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwNworbXNnaWQgIk5vIEhFQUQ/IgorbXNnc3RyICJLaMO0bmcgSEVBRD8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICRzdGF0ZV9kaXIiCittc2dzdHIgIktow7RuZyB0aOG7gyB04bqhbyB0aMawIG3hu6VjIHThuqFtIHRo4budaSAkc3RhdGVfZGlyIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTExCittc2dpZCAiQ291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIktow7RuZyB0aOG7gyDEkcOhbmggZOG6pXUgbMOgIHTGsMahbmcgdMOhYyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0MworIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmRzKSIKK21zZ3N0clswXSAiQ+G6o2kgdOG7lSAkc2hvcnRyZXZpc2lvbnMgdsOgbyAkc2hvcnRvbnRvIChjw6FjIGzhu4duaCAkdG9kb2NvdW50KSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk1NQorbXNnaWQgIk5vdGUgdGhhdCBlbXB0eSBjb21taXRzIGFyZSBjb21tZW50ZWQgb3V0IgorbXNnc3RyICJDaMO6IMO9IHLhurFuZyBs4bqnbiBjaHV54buDbiBnaWFvIHRy4buRbmcgcuG7l25nIGzDoCBnaGkgY2jDuiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk5NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTAwMgorbXNnaWQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorbXNnc3RyICJLaMO0bmcgdGjhu4Mga2jhu59pIHThuqFvIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBnaGkgbOG6oWkiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDo4OSBnaXQtc2gtc2V0dXAuc2g6OTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVzYWdlOiAkZGFzaGxlc3MgJFVTQUdFIgorbXNnc3RyICJjw6FjaCBkw7luZzogJGRhc2hsZXNzICRVU0FHRSIKKworIzogZ2l0LXNoLXNldHVwLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGNoZGlyIHRvICRjZHVwLCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBjaHV54buDbiB0aMawIG3hu6VjIChjaGRpcikgc2FuZyAkY2R1cCwgdGjGsCBt4bulYyDhu58gbeG7qWMgY2FvIG5o4bqldCBj4bunYSBjw6J5ICIKKyJsw6BtIHZp4buHYyIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIwMCBnaXQtc2gtc2V0dXAuc2g6MjA3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogJHByb2dyYW1fbmFtZSBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiIgorImzhu5dpIG5naGnDqm0gdHLhu41uZzogJHByb2dyYW1fbmFtZSBraMO0bmcgdGjhu4MgxJHGsOG7o2MgZMO5bmcgbmdvYW9pZiB0aMawIG3hu6VjIGzDoG0gdmnhu4djLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyMQorbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY+G6o2kgdOG7lTogQuG6oW4gY8OzIGPDoWMgdGhheSDEkeG7lWkgY2jGsGEgxJHGsOG7o2MgxJHGsGEgbMOqbiBi4buHIHBow7NuZy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjQKK21zZ2lkICJDYW5ub3QgcmV3cml0ZSBicmFuY2hlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgZ2hpIGzhuqFpIGPDoWMgbmjDoW5oOiBC4bqhbiBjw7MgY8OhYyB0aGF5IMSR4buVaSBjaMawYSDEkcaw4bujYyDEkcawYSBsw6puIGLhu4cgcGjDs25nLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNworbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBwdWxsIHbhu5tpIGPhuqNpIHThu5U6IELhuqFuIGPDsyBjw6FjIHRoYXkgxJHhu5VpIGNoxrBhIMSRxrDhu6NjIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIktow7RuZyB0aOG7gyAkYWN0aW9uOiBC4bqhbiBjw7MgY8OhYyB0aGF5IMSR4buVaSBjaMawYSDEkcaw4bujYyDEkcawYSBsw6puIGLhu4cgcGjDs25nLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0MworbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgY+G6o2kgdOG7lTogTeG7pWMgbOG7pWMgY+G7p2EgYuG6oW4gY8OzIGNo4bupYSBjw6FjIHRoYXkgxJHhu5VpIGNoxrBhIMSRxrDhu6NjIGNodXnhu4NuIGdpYW8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ2Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIktow7RuZyB0aOG7gyBwdWxsIHbhu5tpIGPhuqNpIHThu5U6IELhuqFuIGPDsyBjw6FjIHRoYXkgxJHhu5VpIGNoxrBhIMSRxrDhu6NjIGNodXnhu4NuIGdpYW8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyAkYWN0aW9uOiBN4bulYyBs4bulYyBj4bunYSBi4bqhbiBjw7MgY2jhu6lhIGPDoWMgdGhheSDEkeG7lWkgY2jGsGEgxJHGsOG7o2MgY2h1eeG7g24gIgorImdpYW8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjUzCittc2dpZCAiQWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiVGjDqm0gdsOgbyDEkcOzLCBi4bqjbmcgbeG7pWMgbOG7pWMgY+G7p2EgYuG6oW4gY8OzIGNo4bupYSBjw6FjIHRoYXkgxJHhu5VpIGNoxrBhIMSRxrDhu6NjIGNodXnhu4NuIGdpYW8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MzczCittc2dpZCAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiQuG6oW4gY+G6p24gY2jhuqF5IGzhu4duaCBuw6B5IHThu6sgdGjGsCBt4bulYyDhu58gbeG7qWMgY2FvIG5o4bqldCBj4bunYSBjw6J5IGzDoG0gdmnhu4djLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3OAorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgYWJzb2x1dGUgcGF0aCBvZiBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZMOyIHTDrG0gxJHGsOG7nW5nIGThuqtuIHR1eeG7h3QgxJHhu5FpIGPhu6dhIHRoxrAgbeG7pWMgZ2l0IgorCisjLiBUUkFOU0xBVE9SUzogeW91IGNhbiBhZGp1c3QgdGhpcyB0byBhbGlnbiAiZ2l0IGFkZCAtaSIgc3RhdHVzIG1lbnUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiUxMnMgJTEycyAlcyIKK21zZ3N0ciAiJTEycyAlMTJzICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ0b3VjaGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidG91Y2hlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIlZCDEkcaw4budbmcgZOG6q24gxJHDoyB0b3VjaCAoY2jhuqFtKVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTMKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YWdpbmcuIgorbXNnc3RyICIiCisiTuG6v3UgbWnhur9uZyB2w6EgxJHGsOG7o2Mgw6FwIGThu6VuZyBz4bqhY2ggc+G6vSwga2jDumMgxJHDoyBz4butYSBz4bq9IG5nYXkgbOG6rXAgdOG7qWNcbiIKKyLEkcaw4bujYyDEkcOhbmggZOG6pXUgxJHhu4MgY2h1eeG7g24gbMOqbiBi4buHIHBow7NuZy4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1NgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3Rhc2hpbmcuIgorbXNnc3RyICIiCisiTuG6v3UgbWnhur9uZyB2w6EgxJHGsOG7o2Mgw6FwIGThu6VuZyBz4bqhY2ggc+G6vSwga2jDumMgxJHDoyBz4butYSBz4bq9IG5nYXkgbOG6rXAgdOG7qWNcbiIKKyLEkcaw4bujYyDEkcOhbmggZOG6pXUgxJHhu4MgdOG6oW0gY+G6pXQuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTkKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHVuc3RhZ2luZy4iCittc2dzdHIgIiIKKyJO4bq/dSBtaeG6v25nIHbDoSDEkcaw4bujYyDDoXAgZOG7pW5nIHPhuqFjaCBz4bq9LCBraMO6YyDEkcOjIHPhu61hIHPhur0gbmdheSBs4bqtcCB04bupY1xuIgorIsSRxrDhu6NjIMSRw6FuaCBk4bqldSDEkeG7gyBi4buPIGNodXnhu4NuIGzDqm4gYuG7hyBwaMOzbmcuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDcxCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzcKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGFwcGx5aW5nLiIKK21zZ3N0ciAiIgorIk7hur91IG1p4bq/bmcgdsOhIMSRxrDhu6NjIMOhcCBk4bulbmcgc+G6oWNoIHPhur0sIGtow7pjIMSRw6Mgc+G7rWEgc+G6vSBuZ2F5IGzhuq1wIHThu6ljXG4iCisixJHGsOG7o2MgxJHDoW5oIGThuqV1IMSR4buDIMOhcCBk4bulbmcuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzQKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGRpc2NhcmRpbmcuIgorbXNnc3RyICIiCisiTuG6v3UgbWnhur9uZyB2w6EgxJHGsOG7o2Mgw6FwIGThu6VuZyBz4bqhY2ggc+G6vSwga2jDumMgxJHDoyBz4butYSBz4bq9IG5nYXkgbOG6rXAgdOG7qWNcbiIKKyLEkcaw4bujYyDEkcOhbmggZOG6pXUgxJHhu4MgbG/huqFpIGLhu48uIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdOG6rXAgdGluIHPhu61hIGtow7pjIMSR4buDIGdoaTogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVzIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorIi0tLVxuIgorIsSQ4buDIGfhu6EgYuG7jyBjw6FjIGTDsm5nIOKAnCVz4oCdLCBsw6BtIGNow7puZyB0aMOgbmggbmjhu69uZyBkw7JuZyDigJwg4oCcIChu4buZaSBkdW5nKS5cbiIKKyLEkOG7gyB4w7NhIGLhu48gZMOybmcg4oCcJXPigJ0sIHjDs2EgY2jDum5nIMSRaS5cbiIKKyJOaOG7r25nIGTDsm5nIGLhuq90IMSR4bqndSBi4bqxbmcgJXMgc+G6vSBi4buLIGxv4bqhaSBi4buPLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExNDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHJlYWRpbmc6ICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgbeG7nyB04bqtcCB0aW4ga2jDumMgxJHhu4MgxJHhu41jOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjQ4Cittc2dpZCAiIgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcga2jDumMgbsOgeVxuIgorIm4gLSDEkeG7q25nIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcga2jDumMgbsOgeVxuIgorInEgLSB0aG/DoXQ7IMSR4burbmcgxJHGsGEgbMOqbiBi4buHIHBow7NuZyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gY8OybiBs4bqhaVxuIgorImEgLSDEkcawYSBsw6puIGLhu4cgcGjDs25nIGtow7pjIG7DoHkgdsOgIHThuqV0IGPhuqMgY8OhYyBraMO6YyBzYXUgbsOgeSB0cm9uZyB04bqtcCB0aW5cbiIKKyJkIC0gxJHhu6tuZyDEkcawYSBsw6puIGLhu4cgcGjDs25nIGtow7pjIG7DoHkgY8WpbmcgbmjGsCBi4bqldCBr4buzIGPDoWkgbsOgbyBjw7JuIGzhuqFpIHRyb25nIHThuq1wICIKKyJ0aW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI1NAorbXNnaWQgIiIKKyJ5IC0gc3Rhc2ggdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YXNoIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSB04bqhbSBj4bqldCBraMO6YyBuw6B5XG4iCisibiAtIMSR4burbmcgdOG6oW0gY+G6pXQga2jDumMgbsOgeVxuIgorInEgLSB0aG/DoXQ7IMSR4burbmcgdOG6oW0gY+G6pXQga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWlcbiIKKyJhIC0gdOG6oW0gY+G6pXQga2jDumMgbsOgeSB2w6AgdOG6pXQgY+G6oyBjw6FjIGtow7pjIHNhdSBuw6B5IHRyb25nIHThuq1wIHRpblxuIgorImQgLSDEkeG7q25nIHThuqFtIGPhuqV0IGtow7pjIG7DoHkgY8WpbmcgbmjGsCBi4bqldCBr4buzIGPDoWkgbsOgbyBjw7JuIGzhuqFpIHRyb25nIHThuq1wIHRpbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjYwCittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDEkcawYSByYSBraOG7j2kgYuG7hyBwaMOzbmcga2jDumMgbsOgeVxuIgorIm4gLSDEkeG7q25nIMSRxrBhIHJhIGto4buPaSBi4buHIHBow7NuZyBraMO6YyBuw6B5XG4iCisicSAtIHRob8OhdDsgxJHhu6tuZyDEkcawYSByYSBraOG7j2kgYuG7hyBwaMOzbmcga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gIgorImzhuqFpXG4iCisiYSAtIMSRxrBhIHJhIGto4buPaSBi4buHIHBow7NuZyBraMO6YyBuw6B5IHbDoCB04bqldCBj4bqjIGPDoWMga2jDumMgc2F1IG7DoHkgdHJvbmcgdOG6rXAgdGluXG4iCisiZCAtIMSR4burbmcgxJHGsGEgcmEga2jhu49pIGLhu4cgcGjDs25nIGtow7pjIG7DoHkgY8WpbmcgbmjGsCBi4bqldCBr4buzIGPDoWkgbsOgbyBjw7JuIGzhuqFpIHRyb25nICIKKyJ04bqtcCB0aW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDDoXAgZOG7pW5nIGtow7pjIG7DoHkgdsOgbyBt4bulYyBs4bulY1xuIgorIm4gLSDEkeG7q25nIMOhcCBk4bulbmcga2jDumMgbsOgeSB2w6BvIG3hu6VjIGzhu6VjXG4iCisicSAtIHRob8OhdDsgxJHhu6tuZyDDoXAgZOG7pW5nIGtow7pjIG7DoHkgY8WpbmcgbmjGsCBi4bqldCBr4buzIGPDoWkgbsOgbyBjw7JuIGzhuqFpXG4iCisiYSAtIMOhcCBk4bulbmcga2jDumMgbsOgeSB2w6AgdOG6pXQgY+G6oyBjw6FjIGtow7pjIHNhdSBuw6B5IHRyb25nIHThuq1wIHRpblxuIgorImQgLSDEkeG7q25nIMOhcCBk4bulbmcga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIHNhdSBuw6B5IHRyb25nIHThuq1wIHRpbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5MAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGxv4bqhaSBi4buPIGtow7pjIG7DoHkga2jhu49pIGPDonkgbMOgbSB2aeG7h2NcbiIKKyJuIC0gxJHhu6tuZyBsb+G6oWkgYuG7jyBraMO6YyBraOG7j2kgY8OieSBsw6BtIHZp4buHY1xuIgorInEgLSB0aG/DoXQ7IMSR4burbmcgbG/huqFpIGLhu48ga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWlcbiIKKyJhIC0gbG/huqFpIGLhu48ga2jDumMgbsOgeSB2w6AgdOG6pXQgY+G6oyBjw6FjIGtow7pjIHNhdSBuw6B5IHRyb25nIHThuq1wIHRpblxuIgorImQgLSDEkeG7q25nIGxv4bqhaSBi4buPIGtow7pjIG7DoHkgY8WpbmcgbmjGsCBi4bqldCBr4buzIGPDoWkgbsOgbyBzYXUgbsOgeSB0cm9uZyB04bqtcCB0aW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3OAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gbG/huqFpIGLhu48ga2jDumMgbsOgeSBraOG7j2kgbeG7pWMgbOG7pWMgdsOgIGPDonkgbMOgbSB2aeG7h2NcbiIKKyJuIC0gxJHhu6tuZyBsb+G6oWkgYuG7jyBraMO6YyBraOG7j2kgbeG7pWMgbOG7pWMgdsOgIGPDonkgbMOgbSB2aeG7h2NcbiIKKyJxIC0gdGhvw6F0OyDEkeG7q25nIGxv4bqhaSBi4buPIGtow7pjIG7DoHkgY8WpbmcgbmjGsCBi4bqldCBr4buzIGPDoWkgbsOgbyBjw7JuIGzhuqFpXG4iCisiYSAtIGxv4bqhaSBi4buPIGtow7pjIG7DoHkgdsOgIHThuqV0IGPhuqMgY8OhYyBraMO6YyBzYXUgbsOgeSB0cm9uZyB04bqtcCB0aW5cbiIKKyJkIC0gxJHhu6tuZyBsb+G6oWkgYuG7jyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gc2F1IG7DoHkgdHJvbmcgdOG6rXAgdGluIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyODQKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDDoXAgZOG7pW5nIGtow7pjIG7DoHkgdsOgbyBt4bulYyBs4bulYyB2w6AgY8OieSBsw6BtIHZp4buHY1xuIgorIm4gLSDEkeG7q25nIMOhcCBk4bulbmcga2jDumMgdsOgbyBt4bulYyBs4bulYyB2w6AgY8OieSBsw6BtIHZp4buHY1xuIgorInEgLSB0aG/DoXQ7IMSR4burbmcgw6FwIGThu6VuZyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gY8OybiBs4bqhaVxuIgorImEgLSDDoXAgZOG7pW5nIGtow7pjIG7DoHkgdsOgIHThuqV0IGPhuqMgY8OhYyBraMO6YyBzYXUgbsOgeSB0cm9uZyB04bqtcCB0aW5cbiIKKyJkIC0gxJHhu6tuZyDDoXAgZOG7pW5nIGtow7pjIG7DoHkgY8WpbmcgbmjGsCBi4bqldCBr4buzIGPDoWkgbsOgbyBzYXUgbsOgeSB0cm9uZyB04bqtcCB0aW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDDoXAgZOG7pW5nIGtow7pjIG7DoHkgdsOgbyBjw6J5IGzDoG0gdmnhu4djXG4iCisibiAtIMSR4burbmcgw6FwIGThu6VuZyBraMO6YyB2w6BvIGPDonkgbMOgbSB2aeG7h2NcbiIKKyJxIC0gdGhvw6F0OyDEkeG7q25nIMOhcCBk4bulbmcga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWlcbiIKKyJhIC0gw6FwIGThu6VuZyBraMO6YyBuw6B5IHbDoCB04bqldCBj4bqjIGPDoWMga2jDumMgc2F1IG7DoHkgdHJvbmcgdOG6rXAgdGluXG4iCisiZCAtIMSR4burbmcgw6FwIGThu6VuZyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gc2F1IG7DoHkgdHJvbmcgdOG6rXAgdGluIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMTEKK21zZ2lkICIiCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJnIC0gY2jhu41uIG3hu5l0IGtow7pjIG114buRbiB04bubaVxuIgorIi8gLSB0w6xtIG3hu5l0IGtow7pjIGto4bubcCB24bubaSBiaeG7g3UgdGjhu6ljIGNow61uaCBxdXkgxJHGsGEgcmFcbiIKKyJqIC0gxJHhu4MgbOG6oWkga2jDumMgbsOgeSBsw6AgY2jGsGEgcXV54bq/dCDEkeG7i25oLCB4ZW0ga2jDumMgY2jGsGEgcXV54bq/dCDEkeG7i25oIGvhur9cbiIKKyJKIC0gxJHhu4MgbOG6oWkga2jDumMgbsOgeSBsw6AgY2jGsGEgcXV54bq/dCDEkeG7i25oLCB4ZW0ga2jDumMga+G6v1xuIgorImsgLSDEkeG7gyBs4bqhaSBraMO6YyBuw6B5IGzDoCBjaMawYSBxdXnhur90IMSR4buLbmgsIHhlbSBraMO6YyBjaMawYSBxdXnhur90IMSR4buLbmgga+G6vyB0csaw4bubY1xuIgorIksgLSDEkeG7gyBs4bqhaSBraMO6YyBuw6B5IGzDoCBjaMawYSBxdXnhur90IMSR4buLbmgsIHhlbSBraMO6YyBr4bq/IHRyxrDhu5tjXG4iCisicyAtIGNoaWEga2jDumMgaGnhu4duIHThuqFpIHRow6BuaCBjw6FjIGtow7pjIG5o4buPIGjGoW5cbiIKKyJlIC0gc+G7rWEgYuG6sW5nIHRheSBraMO6YyBoaeG7h24gaMOgbmhcbiIKKyI/IC0gaW4gdHLhu6MgZ2nDunBcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQyCittc2dpZCAiVGhlIHNlbGVjdGVkIGh1bmtzIGRvIG5vdCBhcHBseSB0byB0aGUgaW5kZXghXG4iCittc2dzdHIgIkPDoWMga2jDumMgxJHDoyBjaOG7jW4ga2jDtG5nIMSRxrDhu6NjIMOhcCBk4bulbmcgdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWMhXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXNcbiIKK21zZ3N0ciAiYuG7jyBxdWEgbmjhu69uZyB0aOG7qSBjaMawYSBow7JhIHRy4buZbjogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLDgXAgZOG7pW5nIHRoYXkgxJHhu5VpIGNo4bq/IMSR4buZIGNobyBjw6J5IGzDoG0gdmnhu4djIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsOBcCBk4bulbmcgdmnhu4djIHjDs2EgY2hvIGPDonkgbMOgbSB2aeG7h2MgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsOBcCBk4bulbmcga2jDumMgbsOgeSB2w6BvIGPDonkgbMOgbSB2aeG7h2MgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3MAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG9cbiIKK21zZ3N0ciAiS2jDtG5nIGPDsm4ga2jDumMgbsOgbyDEkeG7gyBtw6AgbmjhuqN5IMSR4bq/blxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1ODgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXI6ICclcydcbiIKK21zZ3N0ciAiU+G7kSBraMO0bmcgaOG7o3AgbOG7hzog4oCcJXPigJ1cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTkzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLlxuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuXG4iCittc2dzdHJbMF0gIlLhuqV0IHRp4bq/YywgY2jhu4kgY8OzIHPhurVuICVkIGtow7pjLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MTkKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBzZWFyY2hcbiIKK21zZ3N0ciAiS2jDtG5nIGPDsm4ga2jDumMgbsOgbyDEkeG7gyBtw6AgdMOsbSBraeG6v21cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjM2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlc1xuIgorbXNnc3RyICLEkOG7i25oIGThuqFuZyB0w6xtIGtp4bq/bSBj4bunYSBiaeG7g3UgdGjhu6ljIGNow61uaCBxdXkga2jDtG5nIMSRw7puZyAlczogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjQ2Cittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iCittc2dzdHIgIktow7RuZyB0aOG6pXkga2jDumMgbsOgbyBraOG7m3AgbeG6q3UgxJHDoyBjaG9cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjU4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY4MAorbXNnaWQgIk5vIHByZXZpb3VzIGh1bmtcbiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBraMO6YyBr4bq/IHRyxrDhu5tjXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY2NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODYKK21zZ2lkICJObyBuZXh0IGh1bmtcbiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBraMO6YyBr4bq/IHRp4bq/cFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2OTIKK21zZ2lkICJTb3JyeSwgY2Fubm90IHNwbGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICJS4bqldCB0aeG6v2MsIGtow7RuZyB0aOG7gyBjaGlhIG5o4buPIGtow7pjIG7DoHlcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjk4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVuay5cbiIKK21zZ2lkX3BsdXJhbCAiU3BsaXQgaW50byAlZCBodW5rcy5cbiIKK21zZ3N0clswXSAiQ2hpIG5o4buPIHRow6BuaCAlZCBraMO6Yy5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzA4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICJS4bqldCB0aeG6v2MsIGtow7RuZyB0aOG7gyBz4butYSBraMO6YyBuw6B5XG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2UgZG8gbm90IHRyYW5zbGF0ZSB0aGUgY29tbWFuZCBuYW1lcworIy4gJ3N0YXR1cycsICd1cGRhdGUnLCAncmV2ZXJ0JywgZXRjLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzczCittc2dpZCAiIgorInN0YXR1cyAgICAgICAgLSBzaG93IHBhdGhzIHdpdGggY2hhbmdlc1xuIgorInVwZGF0ZSAgICAgICAgLSBhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXNcbiIKKyJyZXZlcnQgICAgICAgIC0gcmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb25cbiIKKyJwYXRjaCAgICAgICAgIC0gcGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5XG4iCisiZGlmZiAgICAgICAgICAtIHZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4XG4iCisiYWRkIHVudHJhY2tlZCAtIGFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgIgorImNoYW5nZXNcbiIKK21zZ3N0ciAiIgorInN0YXR1cyAgICAgICAgLSBoaeG7g24gdGjhu4sgY8OhYyDEkcaw4budbmcgZOG6q24gduG7m2kgY8OhYyB0aGF5IMSR4buVaVxuIgorInVwZGF0ZSAgICAgICAgLSDEkeG6t3QgdHLhuqFuZyB0aMOhaSBjw6J5IGzDoG0gdmnhu4djIHRow6BuaCB04bqtcCBo4bujcCBjw6FjIHRoYXkgxJHhu5VpIMSRw6MgIgorIsSR4bq3dCBsw6puIGLhu4cgcGjDs25nXG4iCisicmV2ZXJ0ICAgICAgICAtIGhvw6BuIG5ndXnDqm4gdOG6rXAgaOG7o3AgY8OhYyB0aGF5IMSR4buVaSDEkcOjIMSR4bq3dCBsw6puIGLhu4cgcGjDs25nIHRy4bufIGzhuqFpICIKKyJwaGnDqm4gYuG6o24gSEVBRFxuIgorInBhdGNoICAgICAgICAgLSBj4bqteSBjw6FjIGtow7pjIHbDoCBj4bqtcCBuaOG6rXQgY8OzIGzhu7FhIGNo4buNblxuIgorImRpZmZcdCAgICAgIC0geGVtIGtow6FjIGJp4buHdCBnaeG7r2EgSEVBRCB2w6AgbeG7pWMgbOG7pWNcbiIKKyJhZGQgdW50cmFja2VkIC0gdGjDqm0gbuG7mWkgZHVuZyBjw6FjIGPDoWMgdOG6rXAgdGluIGNoxrBhIHRoZW8gZMO1aSB2w6AgdOG6rXAgaOG7o3AgY8OhYyAiCisidGhheSDEkeG7lWkgxJHDoyDEkeG6t3QgbMOqbiBi4buHIHBow7NuZ1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODI1Cittc2dpZCAibWlzc2luZyAtLSIKK21zZ3N0ciAidGhp4bq/dSAtLSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODIxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVua25vd24gLS1wYXRjaCBtb2RlOiAlcyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSBjaOG6vyDEkeG7mSAtLXBhdGNoOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODI3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgzMworIywgcGVybC1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50ICVzLCBleHBlY3RpbmcgLS0iCittc2dzdHIgIsSR4buRaSBz4buRIGtow7RuZyBo4bujcCBs4buHICVzLCBj4bqnbiAtLSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzgKK21zZ2lkICJsb2NhbCB6b25lIGRpZmZlcnMgZnJvbSBHTVQgYnkgYSBub24tbWludXRlIGludGVydmFsXG4iCittc2dzdHIgIm3DumkgZ2nhu50gbuG7mWkgYuG7mSBraMOhYyBiaeG7h3QgduG7m2kgR01UIGLhu59pIGtob+G6o25nIHRo4budaSBnaWFuIGtow7RuZy1waMO6dFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MQorbXNnaWQgImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIgorbXNnc3RyICJraG/huqNuZyBiw7kgdGjhu51pIGdpYW4gbuG7mWkgYuG7mSBs4bubbiBoxqFuIGhv4bq3YyBi4bqxbmcgMjQgZ2nhu51cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoyMjMgZ2l0LXNlbmQtZW1haWwucGVybDoyMjkKK21zZ2lkICJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciCittc2dzdHIgInRyw6xuaCBzb+G6oW4gdGjhuqNvIHRob8OhdCBraMO0bmcgc+G6oWNoIHPhur0sIGLDo2kgYuG7jyBt4buNaSB0aOG7qSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMTAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIiclcycgY29udGFpbnMgYW4gaW50ZXJtZWRpYXRlIHZlcnNpb24gb2YgdGhlIGVtYWlsIHlvdSB3ZXJlIGNvbXBvc2luZy5cbiIKK21zZ3N0ciAi4oCcJXPigJ0gY8OzIGNoxrBhIG3hu5l0IHBoacOqbiBi4bqjbiB0cnVuZyBnaWFuIGPhu6dhIHRoxrAgYuG6oW4gxJHDoyBzb+G6oW4uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzE1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiclcy5maW5hbCcgY29udGFpbnMgdGhlIGNvbXBvc2VkIGVtYWlsLlxuIgorbXNnc3RyICLigJwlcy5maW5hbOKAnSBjaOG7qWEgdGjGsCDEkWnhu4duIHThu60gxJHDoyBzb+G6oW4gdGjhuqNvLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQwOAorbXNnaWQgIi0tZHVtcC1hbGlhc2VzIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIG9wdGlvbnNcbiIKK21zZ3N0ciAiLS1kdW1wLWFsaWFzZXMgeHVuZyBraOG6r2MgduG7m2kgY8OhYyB0w7l5IGNo4buNbiBraMOhY1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4MSBnaXQtc2VuZC1lbWFpbC5wZXJsOjY4MworbXNnaWQgIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iCittc2dzdHIgIktow7RuZyB0aOG7gyBjaOG6oXkgZ2l0IGZvcm1hdC1wYXRjaCDhu58gbmdvw6BpIG3hu5l0IGtobyBjaOG7qWFcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0ODQKK21zZ2lkICIiCisiYGJhdGNoLXNpemVgIGFuZCBgcmVsb2dpbmAgbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgKHZpYSBjb21tYW5kLWxpbmUgb3IgIgorImNvbmZpZ3VyYXRpb24gb3B0aW9uKVxuIgorbXNnc3RyICIiCisi4oCcYmF0Y2gtc2l6ZeKAnSB2w6Ag4oCccmVsb2dpbuKAnSBwaOG6o2kgxJHGsOG7o2MgY2jhu4kgxJHhu4tuaCBjw7luZyB24bubaSBuaGF1ICh0aMO0bmcgcXVhIGTDsm5nICIKKyJs4buHbmggaG/hurdjIHTDuXkgY2jhu41uIGPhuqV1IGjDrG5oKVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ5NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tc3VwcHJlc3MtY2MgZmllbGQ6ICclcydcbiIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSB0csaw4budbmcgLS1zdXBwcmVzcy1jYzog4oCcJXPigJ1cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLWNvbmZpcm0gc2V0dGluZzogJyVzJ1xuIgorbXNnc3RyICJLaMO0bmcgaGnhu4N1IGPDoGkgxJHhurd0IC0tY29uZmlybTog4oCcJXPigJ1cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgYWxpYXMgd2l0aCBxdW90ZXMgaXMgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiY+G6o25oIGLDoW86IGLDrSBkYW5oIHNlbmRtYWlsIHbhu5tpIGThuqV1IHRyw61jaCBk4bqrbiBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7ozogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYDppbmNsdWRlOmAgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiY+G6o25oIGLDoW86IOKAnDppbmNsdWRlOuKAnCBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7ozogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NjAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYC9maWxlYCBvciBgfHBpcGVgIHJlZGlyZWN0aW9uIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgImPhuqNuaCBiw6FvOiBjaHV54buDbiBoxrDhu5tuZyDigJwvZmlsZeKAnCBoYXkg4oCcfHBpcGXigJwga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6M6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGxpbmUgaXMgbm90IHJlY29nbml6ZWQ6ICVzXG4iCittc2dzdHIgImPhuqNuaCBiw6FvOiBkw7JuZyBzZW5kbWFpbCBraMO0bmcgbmjhuq1uIHJhIMSRxrDhu6NjOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY0OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSAnJXMnIGV4aXN0cyBidXQgaXQgY291bGQgYWxzbyBiZSB0aGUgcmFuZ2Ugb2YgY29tbWl0c1xuIgorInRvIHByb2R1Y2UgcGF0Y2hlcyBmb3IuICBQbGVhc2UgZGlzYW1iaWd1YXRlIGJ5Li4uXG4iCisiXG4iCisiICAgICogU2F5aW5nIFwiLi8lc1wiIGlmIHlvdSBtZWFuIGEgZmlsZTsgb3JcbiIKKyIgICAgKiBHaXZpbmcgLS1mb3JtYXQtcGF0Y2ggb3B0aW9uIGlmIHlvdSBtZWFuIGEgcmFuZ2UuXG4iCittc2dzdHIgIiIKKyJU4bqtcCB0aW4g4oCcJXPigJ0gxJHDoyBjw7Mgc+G6tW4gbmjGsG5nIG7DsyBjw7MgbOG6vSBjxaluZyBsw6AgY2h14bqpbiBi4buLIGPhu6dhXG4iCisiY8OhYyBtaeG6v25nIHbDoSB04bqhbyBs4bqnbiBjaHV54buDbiBnaWFvLiBWdWkgbMOybmcgbMOgbSByw7Ugw70gYuG6sW5n4oCmXG4iCisiXG4iCisiICAgICogTsOzaSBcIi4vJXNcIiBu4bq/dSDDvSBi4bqhbiBsw6AgbeG7mXQgdOG6rXAgdGluOyBob+G6t2NcbiIKKyIgICAgKiDEkMawYSByYSB0w7l5IGNo4buNbiAtLWZvcm1hdC1wYXRjaCBu4bq/dSDDvSBi4bqhbiBsw6AgY2h14bqpbiBi4buLLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbmRpciAlczogJXMiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBt4bufIHRoxrAgbeG7pWMg4oCcJXPigJ06ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY5NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiZmF0YWw6ICVzOiAlc1xuIgorIndhcm5pbmc6IG5vIHBhdGNoZXMgd2VyZSBzZW50XG4iCittc2dzdHIgIiIKKyJuZ2hpw6ptIHRy4buNbmc6ICVzOiAlc1xuIgorImPhuqNuaCBiw6FvOiBraMO0bmcgY8OzIG1p4bq/bmcgdsOhIG7DoG8gxJHGsOG7o2MgZ+G7rWkgxJFpXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzA1Cittc2dpZCAiIgorIlxuIgorIk5vIHBhdGNoIGZpbGVzIHNwZWNpZmllZCFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkNoxrBhIGNo4buJIMSR4buLbmggY8OhYyB04bqtcCB0aW4gbWnhur9uZyB2w6EhXG4iCisiXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk5vIHN1YmplY3QgbGluZSBpbiAlcz8iCittc2dzdHIgIktow7RuZyBjw7MgZMOybmcgY2jhu6cgxJHhu4EgdHJvbmcgJXM/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAlczogJXMiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBt4bufIOKAnCVz4oCdIMSR4buDIGdoaTogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzM5Cittc2dpZCAiIgorIkxpbmVzIGJlZ2lubmluZyBpbiBcIkdJVDpcIiB3aWxsIGJlIHJlbW92ZWQuXG4iCisiQ29uc2lkZXIgaW5jbHVkaW5nIGFuIG92ZXJhbGwgZGlmZnN0YXQgb3IgdGFibGUgb2YgY29udGVudHNcbiIKKyJmb3IgdGhlIHBhdGNoIHlvdSBhcmUgd3JpdGluZy5cbiIKKyJcbiIKKyJDbGVhciB0aGUgYm9keSBjb250ZW50IGlmIHlvdSBkb24ndCB3aXNoIHRvIHNlbmQgYSBzdW1tYXJ5LlxuIgorbXNnc3RyICIiCisiQ8OhYyBkw7JuZyBi4bqvdCDEkeG6p3UgYuG6sW5nIFwiR0lUOlwiIHPhur0gYuG7iyB4w7NhIGLhu48uXG4iCisiQ8OibiBuaOG6r2MgYmFvIGfhu5NtIG3hu5l0IHRo4buRbmcga8OqIGRpZmYgdG/DoG4gdGjhu4MgaGF5IGLhuqNuZyBu4buZaSBkdW5nXG4iCisiY2hvIG1p4bq/bmcgdsOhIG3DoCBi4bqhbiDEkWFuZyB2aeG6v3QuXG4iCisiXG4iCisiWMOzYSBu4buZaSBkdW5nIHBo4bqnbiB0aMOibiBu4bq/dSBi4bqhbiBraMO0bmcgbXXhu5FuIGfhu61pIHTDs20gdOG6r3QuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzOiAlcyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIG3hu58g4oCcJXPigJ06ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc4MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlcy5maW5hbDogJXMiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBt4bufICVzLmZpbmFsOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4MjMKK21zZ2lkICJTdW1tYXJ5IGVtYWlsIGlzIGVtcHR5LCBza2lwcGluZyBpdFxuIgorbXNnc3RyICJUaMawIHThu5VuZyB0aOG7gyBsw6AgdHLhu5FuZyBy4buXbmcsIG7Dqm4gYuG7jyBxdWEgbsOzXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCBbeS9OXSBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1c2UgPCVzPiBbeS9OXT8gIgorbXNnc3RyICJC4bqhbiBjw7MgY2jhuq9jIG114buRbiBkw7luZyA8JXM+IFt5L05dPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTEzCittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIDhiaXQsIGJ1dCBkbyBub3QgZGVjbGFyZSBhIENvbnRlbnQtVHJhbnNmZXItIgorIkVuY29kaW5nLlxuIgorbXNnc3RyICIiCisiQ8OhYyB0csaw4budbmcgc2F1IMSRw6J5IGzDoCA4Yml0LCBuaMawbmcga2jDtG5nIGtoYWkgYsOhbyBt4buZdCBDb250ZW50LVRyYW5zZmVyLSIKKyJFbmNvZGluZy5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTgKK21zZ2lkICJXaGljaCA4Yml0IGVuY29kaW5nIHNob3VsZCBJIGRlY2xhcmUgW1VURi04XT8gIgorbXNnc3RyICJC4bqjbmcgbcOjIDhiaXQgbsOgbyB0w7RpIG7Dqm4ga2hhaSBiw6FvIFtVVEYtOF0/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MjYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIlJlZnVzaW5nIHRvIHNlbmQgYmVjYXVzZSB0aGUgcGF0Y2hcbiIKKyJcdCVzXG4iCisiaGFzIHRoZSB0ZW1wbGF0ZSBzdWJqZWN0ICcqKiogU1VCSkVDVCBIRVJFICoqKicuIFBhc3MgLS1mb3JjZSBpZiB5b3UgcmVhbGx5ICIKKyJ3YW50IHRvIHNlbmQuXG4iCittc2dzdHIgIiIKKyJU4burIGNo4buRaSBn4butaSBi4bufaSB2w6wgbWnhur9uZyB2w6FcbiIKKyJcdCVzXG4iCisiY8OzIGNo4bunIMSR4buBIOG7nyBk4bqhbmcgbeG6q3Ug4oCcKioqIFNVQkpFQ1QgSEVSRSAqKirigJ0uIETDuW5nIC0tZm9yY2UgbuG6v3UgYuG6oW4gdGjhu7FjIHPhu7EgIgorIm114buRbiBn4butaS5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NDUKK21zZ2lkICJUbyB3aG9tIHNob3VsZCB0aGUgZW1haWxzIGJlIHNlbnQgKGlmIGFueW9uZSk/IgorbXNnc3RyICJU4bubaSBuZ8aw4budaSBtw6AgdGjGsCDEkcaw4bujYyBn4butaSAobuG6v3UgY8OzKT8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBhbGlhcyAnJXMnIGV4cGFuZHMgdG8gaXRzZWxmXG4iCittc2dzdHIgIm5naGnDqm0gdHLhu41uZzogYsOtIGRhbmgg4oCcJXPigJ0gxJHGsOG7o2Mga2hhaSB0cmnhu4NuIHRow6BuaCBjaMOtbmggbsOzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTc1Cittc2dpZCAiTWVzc2FnZS1JRCB0byBiZSB1c2VkIGFzIEluLVJlcGx5LVRvIGZvciB0aGUgZmlyc3QgZW1haWwgKGlmIGFueSk/ICIKK21zZ3N0ciAiTWVzc2FnZS1JRCDEkcaw4bujYyBkw7luZyBuaMawIGzDoCBJbi1SZXBseS1UbyBjaG8gdGjGsCDEkeG6p3UgdGnDqm4gKG7hur91IGPDsyk/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDMzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJlcnJvcjogdW5hYmxlIHRvIGV4dHJhY3QgYSB2YWxpZCBhZGRyZXNzIGZyb206ICVzXG4iCittc2dzdHIgImzhu5dpOiBraMO0bmcgdGjhu4MgcsO6dCB0csOtY2ggbeG7mXQgxJHhu4thIGNo4buJIGjhu6NwIGzhu4cgdOG7qzogJXNcbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtxXSBbZF0gW2VdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwNDUKK21zZ2lkICJXaGF0IHRvIGRvIHdpdGggdGhpcyBhZGRyZXNzPyAoW3FddWl0fFtkXXJvcHxbZV1kaXQpOiAiCittc2dzdHIgIkzDoG0gZ8OsIHbhu5tpIMSR4buLYSBjaOG7iSBuw6B5PyAodGhvw6F0W3FdfHjDs2FbZF18c+G7rWFbZV0pOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM2MgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJDQSBwYXRoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAixJDGsOG7nW5nIGThuqtuIENBIOKAnCVz4oCdIGtow7RuZyB04buTbiB04bqhaSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDQ1Cittc2dpZCAiIgorIiAgICBUaGUgQ2MgbGlzdCBhYm92ZSBoYXMgYmVlbiBleHBhbmRlZCBieSBhZGRpdGlvbmFsXG4iCisiICAgIGFkZHJlc3NlcyBmb3VuZCBpbiB0aGUgcGF0Y2ggY29tbWl0IG1lc3NhZ2UuIEJ5IGRlZmF1bHRcbiIKKyIgICAgc2VuZC1lbWFpbCBwcm9tcHRzIGJlZm9yZSBzZW5kaW5nIHdoZW5ldmVyIHRoaXMgb2NjdXJzLlxuIgorIiAgICBUaGlzIGJlaGF2aW9yIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHNlbmRlbWFpbC5jb25maXJtXG4iCisiICAgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy5cbiIKKyJcbiIKKyIgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHJ1biAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJy5cbiIKKyIgICAgVG8gcmV0YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yLCBidXQgc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsXG4iCisiICAgIHJ1biAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiAgICBEYW5oIHPDoWNoIENjIOG7nyB0csOqbiDEkcaw4bujYyBkaeG7hW4gZ2nhuqNpIGLhurFuZyBjw6FjIMSR4buLYSBjaOG7iSBwaOG7pVxuIgorIiAgICB0aMOqbSB0w6xtIHRo4bqleSB0cm9uZyBs4budaSBnaGkgY2jDuiBs4bqnbiBjaHV54buDbiBnaWFvIGPhu6dhIG1p4bq/bmcgdsOhLlxuIgorIiAgICBUaGVvIG3hurdjIMSR4buLbmggc2VuZC1lbWFpbCBz4bq9IG5o4bqvYyB0csaw4bubYyBraGkgZ+G7rWkgYuG6pXQgY+G7qSBraGlcbiIKKyIgICAgbsOgbyDEkWnhu4F1IG7DoHkgeOG6o3kgcmEuIEPDoWNoIGjDoG5oIHjhu60gbsOgeSDEkcaw4bujYyDEkWnhu4F1IGtoaeG7g24gYuG7n2kgY8OgaVxuIgorIiAgICDEkeG6t3QgY+G6pXUgaMOsbmggc2VuZGVtYWlsLmNvbmZpcm0uXG4iCisiXG4iCisiICAgIMSQ4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90LCBow6N5IGNo4bqheSBs4buHbmgg4oCcZ2l0IHNlbmQtZW1haWwgLS1oZWxw4oCdLlxuIgorIiAgICDEkOG7gyBnaeG7ryBs4bqhaSBjw6FjaCBow6BuaCB44butIGhp4buHbiBuYXksIGzDoG0gaOG6v3QgbOG7nWkgbmjhuq9uIG7DoHksXG4iCisiICAgIGNo4bqheSDigJxnaXQgY29uZmlnIC0tZ2xvYmFsIHNlbmRlbWFpbC5jb25maXJtIGF1dG/igJ0uXG4iCisiXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0gW25dIFtlXSBbcV0gW2FdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjAKK21zZ2lkICJTZW5kIHRoaXMgZW1haWw/IChbeV1lc3xbbl1vfFtlXWRpdHxbcV11aXR8W2FdbGwpOiAiCittc2dzdHIgIkfhu61pIHRoxrAgbsOgeSBjaOG7qT8gKFt5XWPDs3xbbl1raMO0bmd8W2Vdc+G7rWF8W3FddGhvw6F0fFthXXThuqV0KTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjMKK21zZ2lkICJTZW5kIHRoaXMgZW1haWwgcmVwbHkgcmVxdWlyZWQiCittc2dzdHIgIkfhu61pIHRoxrAgbsOgeSB0cuG6oyBs4budaSB5w6p1IGPhuqd1IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0OTEKK21zZ2lkICJUaGUgcmVxdWlyZWQgU01UUCBzZXJ2ZXIgaXMgbm90IHByb3Blcmx5IGRlZmluZWQuIgorbXNnc3RyICJNw6F5IHBo4bulYyB24bulIFNNVFAgY2jGsGEgxJHGsOG7o2MgxJHhu4tuaCBuZ2jEqWEgbeG7mXQgY8OhY2ggdGjDrWNoIGjhu6NwLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTM4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFNUQVJUVExTISAlcyIKK21zZ3N0ciAiTcOheSBjaOG7pyBraMO0bmcgaOG7lyB0cuG7oyBTVEFSVFRMUyEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0MyBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU1RBUlRUTFMgZmFpbGVkISAlcyIKK21zZ3N0ciAiU1RBUlRUTFMgZ+G6t3AgbOG7l2khICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NTYKK21zZ2lkICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTTVRQIHByb3Blcmx5LiBDaGVjayBjb25maWcgYW5kIHVzZSAtLXNtdHAtZGVidWcuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGto4bufaSB04bqhbyBTTVRQIG3hu5l0IGPDoWNoIMSRw7puZyDEkeG6r24uIEtp4buDbSB0cmEgY+G6pXUgaMOsbmggdsOgIGTDuW5nIC0tc210cC0iCisiZGVidWcuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHNlbmQgJXNcbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGfhu61pICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEcnktU2VudCAlc1xuIgorbXNnc3RyICJUaOG7rSBn4butaSAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VudCAlc1xuIgorbXNnc3RyICJH4butaSAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJEcnktT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICJEcnktT0suIE5o4bqtdCBrw70gbsOzaSBy4bqxbmc6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIk9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiT0suIE5o4bqtdCBrw70gbsOzaSBy4bqxbmc6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU5MQorbXNnaWQgIlJlc3VsdDogIgorbXNnc3RyICJL4bq/dCBxdeG6ozogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1OTQKK21zZ2lkICJSZXN1bHQ6IE9LXG4iCittc2dzdHIgIkvhur90IHF14bqjOiBU4buRdFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2MTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4g4oCcJXPigJ0iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY1OSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NzkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIFRow6ptIGNjOiAlcyB04burIGTDsm5nIOKAnCVz4oCdXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgxJBhbmcgdGjDqm0gdG86ICVzIHThu6sgZMOybmcg4oCcJXPigJ1cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobm9uLW1ib3gpIFRow6ptIGNjOiAlcyB04burIGTDsm5nIOKAnCVz4oCdXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTc1MworIywgcGVybC1mb3JtYXQKK21zZ2lkICIoYm9keSkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIoYm9keSkgVGjDqm0gY2M6ICVzIHThu6sgZMOybmcg4oCcJXPigJ1cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODY0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQ291bGQgbm90IGV4ZWN1dGUgJyVzJyIKK21zZ3N0ciAiKCVzKSBLaMO0bmcgdGjhu4MgdGjhu7FjIHRoaSDigJwlc+KAnSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODcxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQWRkaW5nICVzOiAlcyBmcm9tOiAnJXMnXG4iCittc2dzdHIgIiglcykgxJBhbmcgdGjDqm0gJXM6ICVzIHThu6s6IOKAnCVz4oCdXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg3NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIGZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICclcyciCittc2dzdHIgIiglcykgZ+G6t3AgbOG7l2kga2hpIMSRw7NuZyDEkcaw4budbmcg4buRbmcgxJHhur9uIOKAnCVz4oCdIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MDUKK21zZ2lkICJjYW5ub3Qgc2VuZCBtZXNzYWdlIGFzIDdiaXQiCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSBn4butaSB0aMawIGThuqFuZyA3IGLDrXQiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkxMworbXNnaWQgImludmFsaWQgdHJhbnNmZXIgZW5jb2RpbmciCittc2dzdHIgImLhuqNuZyBtw6MgdHJ1eeG7gW4ga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NCBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwMDYgZ2l0LXNlbmQtZW1haWwucGVybDoyMDE2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyAlczogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTU3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBjb250YWlucyBhIGxpbmUgbG9uZ2VyIHRoYW4gOTk4IGNoYXJhY3RlcnMiCittc2dzdHIgIiVzOiBtaeG6v25nIHbDoSBjw7MgY2jhu6lhIGTDsm5nIGTDoGkgaMahbiA5OTgga8O9IHThu7EiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk3NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyAlcyB3aXRoIGJhY2t1cCBzdWZmaXggJyVzJy5cbiIKK21zZ3N0ciAiQuG7jyBxdWEgJXMgduG7m2kgaOG6rXUgdOG7kSBzYW8gbMawdSBk4buxIHBow7JuZyDigJwlc+KAnS5cbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwICJbeXxOXSIgYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHNlbmQgJXM/IFt5fE5dOiAiCittc2dzdHIgIkLhuqFuIGPDsyB0aOG7sWMgc+G7sSBtdeG7kW4gZ+G7rWkgJXM/IFt5fE5dKGPDsy9LSMOUTkcpOiAiCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixhLHEsZCVzLD9dPyAiCisjfiBtc2dzdHIgIlRoYXkgxJHhu5VpIGNo4bq/IMSR4buZIGLhu4cgcGjDs25nIFt5LG4sYSxxLGQlcyw/XT8gIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4sYSxxLGQlcyw/XT8gIgorI34gbXNnc3RyICJYw7NhIGto4buPaSBi4buHIHBow7NuZyBbeSxuLGEscSxkJXMsP10/ICIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixhLHEsZCVzLD9dPyAiCisjfiBtc2dzdHIgIsSQxrBhIGzDqm4gYuG7hyBwaMOzbmcga2jDumMgbsOgeSBbeSxuLGEscSxkJXMsP10/ICIKKworI34gbXNnaWQgIiIKKyN+ICJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorI34gIm1hcmtlZCBmb3Igc3RhZ2luZy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIk7hur91IG1p4bq/bmcgdsOhIMSRxrDhu6NjIMOhcCBk4bulbmcgc+G6oWNoIHPhur0sIGtow7pjIMSRw6Mgc+G7rWEgc+G6vSBuZ2F5IGzhuq1wIHThu6ljXG4iCisjfiAixJHGsOG7o2MgxJHDoW5oIGThuqV1IMSR4buDIGNodXnhu4NuIGzDqm4gYuG7hyBwaMOzbmcuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorI34gIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisjfiAicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorI34gImEgLSBzdGFnZSB0aGlzIGFuZCBhbGwgdGhlIHJlbWFpbmluZyBodW5rc1xuIgorI34gImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG5vciBhbnkgb2YgdGhlIHJlbWFpbmluZyBodW5rc1xuIgorI34gbXNnc3RyICIiCisjfiAieSAtIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcga2jDumMgbsOgeVxuIgorI34gIm4gLSDEkeG7q25nIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcga2jDumMgbsOgeVxuIgorI34gInEgLSB0aG/DoXQ7IMSR4burbmcgxJHGsGEgbMOqbiBi4buHIHBow7NuZyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gY8OybiAiCisjfiAibOG6oWlcbiIKKyN+ICJhIC0gxJHGsGEgbMOqbiBi4buHIHBow7NuZyBraMO6YyBuw6B5IHbDoCB04bqldCBj4bqjIGPDoWMga2jDumMgY8OybiBs4bqhaSBzYXUgbsOgeVxuIgorI34gImQgLSDEkeG7q25nIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWlcbiIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcycuIgorI34gbXNnc3RyICJraMO0bmcgdGjhu4MgY2jDqXAg4oCcJXPigJ0gc2FuZyDigJwlc+KAnS4iCisKKyN+IG1zZ2lkICJtYWxmb3JtZWQgaWRlbnQgbGluZSIKKyN+IG1zZ3N0ciAidGjhu6V0IMSR4bqndSBkw7JuZyBk4buLIGjDrG5oIgorCisjfiBtc2dpZCAiY29ycnVwdGVkIGF1dGhvciB3aXRob3V0IGRhdGUgaW5mb3JtYXRpb24iCisjfiBtc2dzdHIgInTDoWMgZ2nhuqMgc2FpIGjhu49uZyBraMO0bmcgY8OzIHRow7RuZyB0aW4gbsOgeSB0aMOhbmciCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiY291bGQgbm90IHBhcnNlICclLipzJyIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPDuiBwaMOhcCDigJwlLipz4oCdIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgImNvdWxkIG5vdCBjaGVja291dCAlcyIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHJhICVzIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgImZpbGVuYW1lIGluIHRyZWUgZW50cnkgY29udGFpbnMgYmFja3NsYXNoOiAnJXMnIgorI34gbXNnc3RyICJ0w6puIHThuq1wIHRpbiB0cm9uZyBt4bulYyB0aW4gY8OieSBjw7MgY2jhu6lhIGvDvSB04buxIGfhuqFjaCBuZ8aw4bujYzogJyVzJyIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorI34gbXNnc3RyICJT4butIGThu6VuZyB0w7l5IGNo4buNbiAtZiBu4bq/dSBi4bqhbiB0aOG7sWMgc+G7sSBtdeG7kW4gdGjDqm0gY2jDum5nIHbDoG8uXG4iCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCisjfiBtc2dzdHIgIkPDsyBs4bq9IMO9IGLhuqFuIGzDoCDigJxnaXQgYWRkIC7igJ0gcGjhuqNpIGtow7RuZz9cbiIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJwYWNrZmlsZSBpcyBpbnZhbGlkOiAlcyIKKyN+IG1zZ3N0ciAidOG6rXAgdGluIGfDs2kga2jDtG5nIGjhu6NwIGzhu4c6ICVzIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgInVuYWJsZSB0byBvcGVuIHBhY2tmaWxlIGZvciByZXVzZTogJXMiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIHThuq1wIHRpbiBnw7NpIMSR4buDIGTDuW5nIGzhuqFpOiAlcyIKKworI34gbXNnaWQgInVuYWJsZSB0byBzZWVrIGluIHJldXNlZCBwYWNrZmlsZSIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGRpIGNodXnhu4NuIHbhu4sgdHLDrSDEkeG7jWMgdHJvbmcgdOG6rXAgdGluIGfDs2kgZMO5bmcgbOG6oWkiCisKKyN+IG1zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIHJldXNlZCBwYWNrZmlsZSIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyB04burIHThuq1wIHRpbiBnw7NpIGTDuW5nIGzhuqFpIgorCisjfiBtc2dpZCAibm8gSEVBRD8iCisjfiBtc2dzdHIgImtow7RuZyBIRUFEPyIKKworI34gbXNnaWQgIm1ha2UgY29tbWl0dGVyIGRhdGUgbWF0Y2ggYXV0aG9yIGRhdGUiCisjfiBtc2dzdHIgImzDoG0gbmfDoHkgdGjDoW5nIGNodXnhu4NuIGdpYW8ga2jhu5twIHbhu5tpIG5nw6B5IGPhu6dhIHTDoWMgZ2nhuqMiCisKKyN+IG1zZ2lkICJpZ25vcmUgYXV0aG9yIGRhdGUgYW5kIHVzZSBjdXJyZW50IGRhdGUiCisjfiBtc2dzdHIgImLhu48gcXVhIG5nw6B5IHTDoWMgZ2nhuqMgdsOgIHPhu60gZOG7pW5nIG5nw6B5IHRow6FuZyBoaeG7h24gdOG6oWkiCisKKyN+IG1zZ2lkICJzeW5vbnltIG9mIC0tcmVzZXQtYXV0aG9yLWRhdGUiCisjfiBtc2dzdHIgIsSR4buTbmcgbmdoxKlhIHbhu5tpIC0tcmVzZXQtYXV0aG9yLWRhdGUiCisKKyN+IG1zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIgorI34gbXNnc3RyICJs4budIMSRaSBz4buxIHRoYXkgxJHhu5VpIGRvIGtob+G6o25nIHRy4bqvbmcgZ8OieSByYSIKKworI34gbXNnaWQgInByZXNlcnZlIGVtcHR5IGNvbW1pdHMgZHVyaW5nIHJlYmFzZSIKKyN+IG1zZ3N0ciAibmfEg24gY+G6pW0gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIHRy4buRbmcgcuG7l25nIHRyb25nIHN14buRdCBxdcOhIHRyw6xuaCBj4bqjaSB04buVIgorCisjfiBtc2dpZCAiY2Fubm90IGNvbWJpbmUgLS11c2UtYml0bWFwLWluZGV4IHdpdGggb2JqZWN0IGZpbHRlcmluZyIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIHThu5UgaOG7o3AgLS11c2UtYml0bWFwLWluZGV4IHbhu5tpIGzhu41jIMSR4buRaSB0xrDhu6NuZyIKKworIywgc2gtZm9ybWF0CisjfiBtc2dpZCAiIgorI34gIlRoZSBmb2xsb3dpbmcgcGF0aCBpcyBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCisjfiAiJHNtX3BhdGhcbiIKKyN+ICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCBpdC4iCisjfiBtc2dzdHIgIiIKKyN+ICJDw6FjIMSRxrDhu51uZyBk4bqrbiB0aGVvIHNhdSDEkcOieSBz4bq9IGLhu4sgbOG7nSDEkWkgYuG7n2kgbeG7mXQgdHJvbmcgY8OhYyB04bqtcCB0aW4gLiIKKyN+ICJnaXRpZ25vcmUgY+G7p2EgYuG6oW46XG4iCisjfiAiJHNtX3BhdGhcbiIKKyN+ICJT4butIGThu6VuZyAtZiBu4bq/dSBi4bqhbiB0aOG7sWMgc+G7sSBtdeG7kW4gdGjDqm0gbsOzIHbDoG8uIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgInVuYWJsZSB0byBnZXQgdHJlZSBmb3IgJXMiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSBjw6J5IGNobyAlcyIKKworI34gbXNnaWQgIlVzZSBhbiBleHBlcmltZW50YWwgaGV1cmlzdGljIHRvIGltcHJvdmUgZGlmZnMiCisjfiBtc2dzdHIgIkTDuW5nIG3hu5l0IHBo4buPbmcgxJFvw6FuIHRo4butIG5naGnhu4dtIMSR4buDIHTEg25nIGPGsOG7nW5nIGPDoWMgZGlmZiIKKworI34gbXNnaWQgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCisjfiBtc2dzdHIgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCisKKyN+IG1zZ2lkICJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCisjfiBtc2dzdHIgImdpdCBjb21taXQtZ3JhcGggcmVhZCBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJ1bmtub3duIGNvcmUudW50cmFja2VkQ2FjaGUgdmFsdWUgJyVzJzsgdXNpbmcgJ2tlZXAnIGRlZmF1bHQgdmFsdWUiCisjfiBtc2dzdHIgIiIKKyN+ICJraMO0bmcgaGnhu4N1IGdpw6EgdHLhu4sgY29yZS51bnRyYWNrZWRDYWNoZSDigJwlc+KAnTsgZMO5bmcgZ2nDoSB0cuG7iyBt4bq3YyDEkeG7i25oIOKAnGtlZXDigJ0iCisKKyN+IG1zZ2lkICJjYW5ub3QgY2hhbmdlIHBhcnRpYWwgY2xvbmUgcHJvbWlzb3IgcmVtb3RlIgorI34gbXNnc3RyICJraMO0bmcgdGjhu4MgdGhheSDEkeG7lWkgbmjDom4gYuG6o24gdOG7q25nIHBo4bqnbiBtw6F5IGNo4bunIHByb21pc29yIgorCisjfiBtc2dpZCAiZXJyb3IgYnVpbGRpbmcgdHJlZXMiCisjfiBtc2dzdHIgImfhurdwIGzhu5dpIGtoaSB4w6J5IGThu7FuZyBjw6J5IgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQgJyVzJyBpbiAnJXMnIgorI34gbXNnc3RyICLEkeG7i25oIGThuqFuZyBuZ8OgeSB0aMOhbmcga2jDtG5nIGjhu6NwIGzhu4cg4oCcJXPigJ0gdHJvbmcg4oCcJXPigJ0iCisKKyN+IG1zZ2lkICJ3cml0aW5nIHJvb3QgY29tbWl0IgorI34gbXNnc3RyICJnaGkgY2h1eeG7g24gZ2lhbyBn4buRYyIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJzdGFnZWQgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIGZpbGVzIG1heSBiZSBsb3N0OiAlcyIKKyN+IG1zZ3N0ciAiIgorI34gImPDoWMgdGhheSDEkeG7lWkgxJHDoyDEkcawYSBsw6puIGLhu4cgcGjDs25nIHRyb25nIGPDoWMgdOG6rXAgdGluIHNhdSDEkcOieSBjw7MgdGjhu4MgYuG7iyBt4bqldDogIgorI34gIiVzIgorCisjfiBtc2dpZCAiIgorI34gIi0tZmlsdGVyIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgcmVtb3RlIGNvbmZpZ3VyZWQgaW4gZXh0ZW5zaW9ucy4iCisjfiAicGFydGlhbENsb25lIgorI34gbXNnc3RyICIiCisjfiAiLS1maWx0ZXIgY2jhu4kgY8OzIHRo4buDIMSRxrDhu6NjIGTDuW5nIHbhu5tpIG3DoXkgY2jhu6cgxJHGsOG7o2MgY+G6pXUgaMOsbmggYuG6sW5nIGV4dGVuc2lvbnMuIgorI34gInBhcnRpYWxDbG9uZSIKKworI34gbXNnaWQgInZlcmlmeSBjb21taXQtbXNnIGhvb2siCisjfiBtc2dzdHIgInRo4bqpbSB0cmEgbcOzYyAoaG9vaykgY29tbWl0LW1zZyIKKworI34gbXNnaWQgImNhbm5vdCBjb21iaW5lICctLXJlYmFzZS1tZXJnZXMnIHdpdGggJy0tc3RyYXRlZ3ktb3B0aW9uJyIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGvhur90IGjhu6NwIOKAnC0tcmViYXNlLW1lcmdlc+KAnSB24bubaSDigJwtLXN0cmF0ZWd5LW9wdGlvbuKAnSIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJpbnZhbGlkIHNwYXJzZSB2YWx1ZSAnJXMnIgorI34gbXNnc3RyICJnacOhIHRy4buLIHNwYXJzZSBraMO0bmcgaOG7o3AgbOG7hyDigJwlc+KAnSIKKworI34gbXNnaWQgIiIKKyN+ICJGZXRjaCBub3JtYWxseSBpbmRpY2F0ZXMgd2hpY2ggYnJhbmNoZXMgaGFkIGEgZm9yY2VkIHVwZGF0ZSwgYnV0IHRoYXQgIgorI34gImNoZWNrIGhhcyBiZWVuIGRpc2FibGVkLiIKKyN+IG1zZ3N0ciAiIgorI34gIkzhuqV5IHbhu4EgYsOsbmggdGjGsOG7nW5nIGNobyBiaeG6v3QgY8OhYyBjw6FjIG5ow6FuaCBuw6BvIGJ14buZYyBwaOG6o2kgY+G6rXAgbmjhuq10LCBuaMawbmcgIgorI34gInZp4buHYyBraeG7g20gdHJhIMSRw6MgYuG7iyB2w7QgaGnhu4d1IGjDs2EuIgorCisjfiBtc2dpZCAiIgorI34gIm9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyBmYWxzZScgdG8gYXZvaWQgdGhpcyBjaGVjay5cbiIKKyN+IG1zZ3N0ciAiIgorI34gImhv4bq3YyBjaOG6oXkgJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgZmFsc2UnIMSR4buDIHRyw6FuaCBraeG7g20gdHJhICIKKyN+ICJuw6B5LlxuIgorCisjfiBtc2dpZCAiIgorI34gImxvZy5tYWlsbWFwIGlzIG5vdCBzZXQ7IGl0cyBpbXBsaWNpdCB2YWx1ZSB3aWxsIGNoYW5nZSBpbiBhblxuIgorI34gInVwY29taW5nIHJlbGVhc2UuIFRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBwcmVzZXJ2ZSBjdXJyZW50XG4iCisjfiAiYmVoYXZpb3VyLCBzZXQgdGhlIGxvZy5tYWlsbWFwIGNvbmZpZ3VyYXRpb24gdmFsdWUgdG8gZmFsc2UuXG4iCisjfiAiXG4iCisjfiAiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3VyIG5vdywgc2V0IHRoZVxuIgorI34gImxvZy5tYWlsbWFwIGNvbmZpZ3VyYXRpb24gdmFsdWUgdG8gdHJ1ZS5cbiIKKyN+ICJcbiIKKyN+ICJTZWUgJ2dpdCBoZWxwIGNvbmZpZycgYW5kIHNlYXJjaCBmb3IgJ2xvZy5tYWlsbWFwJyBmb3IgZnVydGhlciAiCisjfiAiaW5mb3JtYXRpb24uIgorI34gbXNnc3RyICIiCisjfiAibG9nLm1haWxtYXAga2jDtG5nIMSRxrDhu6NjIMSR4bq3dDsgZ2nDoSB0cuG7iyBuZ+G6p20gY+G7p2EgbsOzIHPhur0gdGhheSDEkeG7lWkgdHJvbmcgbeG7mXRcbiIKKyN+ICJwaMOhdCBow6BuaCBz4bqvcCB04bubaS4gxJDhu4MgY2jhuqVtIGThu6l0IHRow7RuZyBiw6FvIG7DoHkgdsOgIGR1eSB0csOsIGjDoG5oIHjhu61cbiIKKyN+ICJoaeG7h24gdOG6oWksIMSR4bq3dCBnacOhIHRy4buLIGPhuqV1IGjDrG5oIGxvZy5tYWlsbWFwIHRow6BuaCBmYWxzZS5cbiIKKyN+ICJcbiIKKyN+ICLEkOG7gyBsw6BtIGNo4bqlbSBk4bupdCB0aMO0bmcgYsOhbyBuw6B5IHbDoCDDoXAgY8OhY2ggaMOgbmggeOG7rSBt4bubaSwgaMOjeSDEkeG6t3RcbiIKKyN+ICJnacOhIHRy4buLIGPhuqV1IGjDrG5oIGxvZy5tYWlsbWFwIHRydWUuXG4iCisjfiAiXG4iCisjfiAiWGVtICdnaXQgaGVscCBjb25maWcgJyB2w6AgdMOsbSBraeG6v20gJyBsb2cubWFpbG1hcCAnIMSR4buDIGJp4bq/dCB0aMOqbSB0aMO0bmcgdGluLiIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBtdWx0aV9hY2tfZGV0YWlsZWQiCisjfiBtc2dzdHIgIk3DoXkgY2jhu6cgaOG7lyB0cuG7oyBtdWx0aV9hY2tfZGV0YWlsZWQiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgbm8tZG9uZSIKKyN+IG1zZ3N0ciAiTcOheSBjaOG7pyBo4buXIHRy4bujIG5vLWRvbmUiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlfYWNrIgorI34gbXNnc3RyICJNw6F5IGNo4bunIGjhu5cgdHLhu6MgbXVsdGlfYWNrIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIHNpZGUtYmFuZC02NGsiCisjfiBtc2dzdHIgIk3DoXkgY2jhu6cgaOG7lyB0cuG7oyBzaWRlLWJhbmQtNjRrIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIHNpZGUtYmFuZCIKKyN+IG1zZ3N0ciAiTcOheSBjaOG7pyBo4buXIHRy4bujIHNpZGUtYmFuZCIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBhbGxvdy10aXAtc2hhMS1pbi13YW50IgorI34gbXNnc3RyICJNw6F5IGNo4bunIGjhu5cgdHLhu6MgYWxsb3ctdGlwLXNoYTEtaW4td2FudCIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBhbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50IgorI34gbXNnc3RyICJNw6F5IGNo4bunIGjhu5cgdHLhu6MgYWxsb3ctcmVhY2hhYmxlLXNoYTEtaW4td2FudCIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBvZnMtZGVsdGEiCisjfiBtc2dzdHIgIk3DoXkgY2jhu6cgaOG7lyB0cuG7oyBvZnMtZGVsdGEiCisKKyN+IG1zZ2lkICIoSEVBRCBkZXRhY2hlZCBhdCAlcykiCisjfiBtc2dzdHIgIihIRUFEIMSRxrDhu6NjIHTDoWNoIHLhu51pIHThuqFpICVzKSIKKworI34gbXNnaWQgIihIRUFEIGRldGFjaGVkIGZyb20gJXMpIgorI34gbXNnc3RyICIoSEVBRCDEkcaw4bujYyB0w6FjaCBy4budaSB04burICVzKSIKKworI34gbXNnaWQgIkNoZWNraW5nIG91dCBmaWxlcyIKKyN+IG1zZ3N0ciAixJBhbmcgbOG6pXkgcmEgY8OhYyB04bqtcCB0aW4iCisKKyN+IG1zZ2lkICJjYW5ub3QgYmUgaW50ZXJhY3RpdmUgd2l0aG91dCBzdGRpbiBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4iCisjfiBtc2dzdHIgIiIKKyN+ICJraMO0bmcgdGjhu4MgxJHGsOG7o2MgdMawxqFuZyB0w6FjIG3DoCBraMO0bmcgY8OzIHN0ZGluIGvhur90IG7hu5FpIHbhu5tpIG3hu5l0IHRoaeG6v3QgYuG7iyBjdeG7kWkuIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKKyN+IG1zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGzhuqV5IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogduG7gSAlc1xuIgorCisjfiBtc2dpZCAiIgorI34gIklmIHlvdSB3aXNoIHRvIHNraXAgdGhpcyBjb21taXQsIHVzZTpcbiIKKyN+ICJcbiIKKyN+ICIgICAgZ2l0IHJlc2V0XG4iCisjfiAiXG4iCisjfiAiVGhlbiBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgd2lsbCByZXN1bWUgY2hlcnJ5LXBpY2tpbmdcbiIKKyN+ICJ0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJO4bq/dSBi4bqhbiBtdeG7kW4gYuG7jyBxdWEgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6B5IHRow6wgZMO5bmc6XG4iCisjfiAiXG4iCisjfiAiICAgIGdpdCByZXNldFxuIgorI34gIlxuIgorI34gIlRo4bq/IHRow6wgXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHPhur0gcGjhu6VjIGjhu5NpIGzhuqFpIHZp4buHYyBjaGVycnktcGlja1xuIgorI34gIm5o4buvbmcgbOG6p24gY2h1eeG7g24gZ2lhbyBjw7JuIGzhuqFpLlxuIgorCisjfiBtc2dpZCAidW5yZWNvZ25pemVkIHZlcmI6ICVzIgorI34gbXNnc3RyICJ2ZXJiIGtow7RuZyDEkcaw4bujYyB0aOG7q2Egbmjhuq1uOiAlcyIKKworI34gbXNnaWQgImhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorI34gbXNnc3RyICJwaGnDqm4gYuG6o24gYsSDbSDigJwlWOKAnSBraMO0bmcgY8OzIHBoacOqbiBi4bqjbiBraOG7m3AgJVgiCisKKyN+IG1zZ2lkICJvcHRpb24gJyVzJyByZXF1aXJlcyBhIHZhbHVlIgorI34gbXNnc3RyICJ0w7l5IGNo4buNbiDigJwlc+KAnSB5w6p1IGPhuqd1IG3hu5l0IGdpw6EgdHLhu4siCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgdHJhbnNmb3JtIHRoZSB0b2RvIGxpc3QiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBjaHV54buDbiBk4bqhbmcgZGFuaCBzw6FjaCBj4bqnbiBsw6BtIgorCisjfiBtc2dpZCAiZGVmYXVsdCIKKyN+IG1zZ3N0ciAibeG6t2MgxJHhu4tuaCIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCisjfiBtc2dzdHIgIktow7RuZyB0aOG7gyB04bqhbyB0aMawIG3hu6VjIOKAnCVz4oCdIgorCisjfiBtc2dpZCAiYWxsb3cgcmVyZXJlIHRvIHVwZGF0ZSBpbmRleCB3aXRoIHJlc29sdmVkIGNvbmZsaWN0IgorI34gbXNnc3RyICIiCisjfiAiY2hvIHBow6lwIHJlcmVyZSBj4bqtcCBuaOG6rXQgYuG6o25nIG3hu6VjIGzhu6VjIHbhu5tpIGPDoWMgeHVuZyDEkeG7mXQgxJHDoyDEkcaw4bujYyBnaeG6o2kgcXV54bq/dCIKKworI34gbXNnaWQgImNvdWxkIG5vdCBvcGVuICVzIgorI34gbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyAlcyIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJGhlYWRfbmFtZSIKKyN+IG1zZ3N0ciAiS2jDtG5nIHRo4buDIHF1YXkgdHLhu58gbOG6oWkgJGhlYWRfbmFtZSIKKworI34gbXNnaWQgIiIKKyN+ICJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAkc3RhdGVfZGlyX2Jhc2UgZGlyZWN0b3J5LCBhbmRcbiIKKyN+ICJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorI34gImNhc2UsIHBsZWFzZSB0cnlcbiIKKyN+ICJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyN+ICJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisjfiAiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorI34gImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisjfiAidmFsdWFibGUgdGhlcmUuIgorI34gbXNnc3RyICIiCisjfiAiSMOsbmggbmjGsCBsw6Ag4bufIMSRw6J5IHPhurVuIGPDsyBt4buZdCB0aMawIG3hu6VjICRzdGF0ZV9kaXJfYmFzZSwgdsOgXG4iCisjfiAiVMO0aSB04buxIGjhu49pIGPDsyBwaOG6o2kgYuG6oW4gxJFhbmcg4bufIGdp4buvYSBt4buZdCBs4buHbmggcmViYXNlIGtow6FjLiBO4bq/dSDEkcO6bmcgbMOgXG4iCisjfiAibmjGsCB24bqteSwgeGluIGjDo3kgdGjhu61cbiIKKyN+ICJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyN+ICJO4bq/dSBraMO0bmcgcGjhuqNpIHRo4bq/LCBow6N5IHRo4butXG4iCisjfiAiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorI34gInbDoCBjaOG6oXkgVMOUSSBs4bqnbiBu4buvYS4gVMOUSSAgZOG7q25nIGzhuqFpIHRyb25nIHRyxrDhu51uZyBo4bujcCBi4bqhbiB24bqrblxuIgorI34gImPDsyBt4buZdCBz4buRIHRo4bupIHF1w70gZ2nDoSDhu58gxJHDonkuIgorCisjfiBtc2dpZCAiIgorI34gImZhdGFsOiBjYW5ub3QgY29tYmluZSBhbSBvcHRpb25zIHdpdGggZWl0aGVyIGludGVyYWN0aXZlIG9yIG1lcmdlIG9wdGlvbnMiCisjfiBtc2dzdHIgIiIKKyN+ICJs4buXaSBuZ2hpw6ptIHRy4buNbmc6IGtow7RuZyB0aOG7gyB04buVIGjhu6NwIGPDoWMgdMO5eSBjaOG7jW4gYW0gduG7m2kgY8OhYyB0w7l5IGNo4buNbiB0xrDGoW5nICIKKyN+ICJ0w6FjIGhheSBow7JhIHRy4buZbiIKKworI34gbXNnaWQgImZhdGFsOiBjYW5ub3QgY29tYmluZSAnLS1zaWdub2ZmJyB3aXRoICctLXByZXNlcnZlLW1lcmdlcyciCisjfiBtc2dzdHIgIiIKKyN+ICJs4buXaSBuZ2hpw6ptIHRy4buNbmc6IGtow7RuZyB0aOG7gyBr4bq/dCBo4bujcCDigJwtLXNpZ25vZmbigJ0gduG7m2kg4oCcLS1wcmVzZXJ2ZS1tZXJnZXPigJ0iCisKKyN+IG1zZ2lkICJmYXRhbDogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorI34gbXNnc3RyICIiCisjfiAibOG7l2kgbmdoacOqbSB0cuG7jW5nOiBraMO0bmcgdGjhu4Mga+G6v3QgaOG7o3Ag4oCcLS1wcmVzZXJ2ZS1tZXJnZXPigJ0gduG7m2kg4oCcLS1yZWJhc2UtIgorI34gIm1lcmdlc+KAnSIKKworI34gbXNnaWQgImZhdGFsOiBjYW5ub3QgY29tYmluZSAnLS1yZWJhc2UtbWVyZ2VzJyB3aXRoICctLXN0cmF0ZWd5LW9wdGlvbiciCisjfiBtc2dzdHIgIiIKKyN+ICJs4buXaSBuZ2hpw6ptIHRy4buNbmc6IGtow7RuZyB0aOG7gyBr4bq/dCBo4bujcCDigJwtLXJlYmFzZS1tZXJnZXPigJ0gduG7m2kg4oCcLS1zdHJhdGVneS0iCisjfiAib3B0aW9u4oCdIgorCisjfiBtc2dpZCAiZmF0YWw6IGNhbm5vdCBjb21iaW5lICctLXJlYmFzZS1tZXJnZXMnIHdpdGggJy0tc3RyYXRlZ3knIgorI34gbXNnc3RyICIiCisjfiAibOG7l2kgbmdoacOqbSB0cuG7jW5nOiBraMO0bmcgdGjhu4Mga+G6v3QgaOG7o3Ag4oCcLS1yZWJhc2UtbWVyZ2Vz4oCdIHbhu5tpIOKAnC0tc3RyYXRlZ3nigJ0iCisKKyN+IG1zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICckdXBzdHJlYW1fbmFtZSciCisjfiBtc2dzdHIgInRoxrDhu6NuZyBuZ3Xhu5NuIGtow7RuZyBo4bujcCBs4buHIOKAnCR1cHN0cmVhbV9uYW1l4oCdIgorCisjfiBtc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbWVyZ2UgYmFzZXMiCisjfiBtc2dzdHIgIiRvbnRvX25hbWU6IOG7nyDEkcOieSBjw7Mgbmhp4buBdSBoxqFuIG3hu5l0IG7hu4FuIG3Ds25nIGjDsmEgdHLhu5luIgorCisjfiBtc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgaXMgbm8gbWVyZ2UgYmFzZSIKKyN+IG1zZ3N0ciAiJG9udG9fbmFtZTog4bufIMSRw6J5IGtow7RuZyBjw7MgbuG7gW4gbcOzbmcgaMOyYSB0cuG7mW4gbsOgbyIKKworI34gbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0OiAkb250b19uYW1lIgorI34gbXNnc3RyICJLaMO0bmcgY2jhu4kgxJHhur9uIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8ga2jDtG5nIGjhu6NwIGzhu4c6ICRvbnRvX25hbWUiCisKKyN+IG1zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2gvY29tbWl0ICckYnJhbmNoX25hbWUnIgorI34gbXNnc3RyICJuZ2hpw6ptIHRy4buNbmc6IGtow7RuZyBjw7MgbmjDoW5oIG5oxrAgdGjhur86IOKAnCRicmFuY2hfbmFtZeKAnSIKKworI34gbXNnaWQgIkNyZWF0ZWQgYXV0b3N0YXNoOiAkc3Rhc2hfYWJicmV2IgorI34gbXNnc3RyICLEkMOjIHThuqFvIGF1dG9zdGFzaDogJHN0YXNoX2FiYnJldiIKKworI34gbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLiIKKyN+IG1zZ3N0ciAiTmjDoW5oIGhp4buHbiB04bqhaSAkYnJhbmNoX25hbWUgxJHDoyDEkcaw4bujYyBj4bqtcCBuaOG6rXQgcuG7k2kuIgorCisjfiBtc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorI34gbXNnc3RyICIiCisjfiAiTmjDoW5oIGhp4buHbiB04bqhaSAkYnJhbmNoX25hbWUgxJHDoyDEkcaw4bujYyBj4bqtcCBuaOG6rXQgcuG7k2ksIGzhu4duaCByZWJhc2Ugw6lwIGJ14buZYy4iCisKKyN+IG1zZ2lkICJDaGFuZ2VzIHRvICRvbnRvOiIKKyN+IG1zZ3N0ciAiVGhheSDEkeG7lWkgdGjDoG5oICRvbnRvOiIKKworI34gbXNnaWQgIkNoYW5nZXMgZnJvbSAkbWIgdG8gJG9udG86IgorI34gbXNnc3RyICJUaGF5IMSR4buVaSB04burICRtYiB0aMOgbmggJG9udG86IgorCisjfiBtc2dpZCAiRmFzdC1mb3J3YXJkZWQgJGJyYW5jaF9uYW1lIHRvICRvbnRvX25hbWUuIgorI34gbXNnc3RyICJDaHV54buDbi10aeG6v3AtbmhhbmggJGJyYW5jaF9uYW1lIHRow6BuaCAkb250b19uYW1lLiIKKworI34gbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKKyN+IG1zZ3N0ciAiIgorI34gIlRyxrDhu5tjIHRpw6puLCBkaSBjaHV54buDbiBoZWFkIMSR4buDIHhlbSBs4bqhaSBjw6FjIGPDtG5nIHZp4buHYyB0csOqbiDEkeG7iW5oIGPhu6dhIG7Ds+KApiIKKworI34gbXNnaWQgImlnbm9yaW5nIHVua25vd24gY29sb3ItbW92ZWQtd3MgbW9kZSAnJXMnIgorI34gbXNnc3RyICJi4buPIHF1YSBjaOG6vyDEkeG7mSBjb2xvci1tb3ZlZC13cyBjaMawYSBiaeG6v3Qg4oCcJXPigJ0iCisKKyN+IG1zZ2lkICJvbmx5ICd0cmVlOjAnIGlzIHN1cHBvcnRlZCIKKyN+IG1zZ3N0ciAiY2jhu4kg4oCcdHJlZTow4oCdIGzDoCDEkcaw4bujYyBo4buXIHRy4bujIgorCisjfiBtc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXMgYW5kICVzIHRvICVzIGluc3RlYWQiCisjfiBtc2dzdHIgIsSQYW5nIMSR4buVaSB0w6puICVzIHRow6BuaCAlcyB0aGF5IHbDrCAlcyB0aMOgbmggJXMiCisKKyN+IG1zZ2lkICJBZGRpbmcgbWVyZ2VkICVzIgorI34gbXNnc3RyICJUaMOqbSBow7JhIHRy4buZbiAlcyIKKworI34gbXNnaWQgIkludGVybmFsIGVycm9yIgorI34gbXNnc3RyICJM4buXaSBu4buZaSBi4buZIgorCisjfiBtc2dpZCAibWFpbmxpbmUgd2FzIHNwZWNpZmllZCBidXQgY29tbWl0ICVzIGlzIG5vdCBhIG1lcmdlLiIKKyN+IG1zZ3N0ciAiIgorI34gImx14buTbmcgY2jDrW5oIMSRw6MgxJHGsOG7o2MgY2jhu4kgcmEgbmjGsG5nIGzhuqduIGNodXnhu4NuIGdpYW8gJXMga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgbOG6p24gIgorI34gImjDsmEgdHLhu5luLiIKKworI34gbXNnaWQgInVuYWJsZSB0byB3cml0ZSBzaGExIGZpbGVuYW1lICVzIgorI34gbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIHbDoG8gdMOqbiB04bqtcCB0aW4gc2hhMSAlcyIKKworI34gbXNnaWQgImNhbm5vdCByZWFkIHNoYTFfZmlsZSBmb3IgJXMiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgc2hhMV9maWxlIGNobyAlcyIKKworI34gbXNnaWQgIiIKKyN+ICJlcnJvcjogY2Fubm90IGNvbWJpbmUgaW50ZXJhY3RpdmUgb3B0aW9ucyAoLS1pbnRlcmFjdGl2ZSwgLS1leGVjLCAtLSIKKyN+ICJyZWJhc2UtbWVyZ2VzLCAtLXByZXNlcnZlLW1lcmdlcywgLS1rZWVwLWVtcHR5LCAtLXJvb3QgKyAtLW9udG8pIHdpdGggYW0gIgorI34gIm9wdGlvbnMgKCVzKSIKKyN+IG1zZ3N0ciAiIgorI34gImzhu5dpOiBraMO0bmcgdGjhu4MgdOG7lSBo4bujcCBjw6FjIHTDuXkgY2jhu41uIHTGsMahbmcgdMOhYyAoLS1pbnRlcmFjdGl2ZSwgLS1leGVjLCAtLSIKKyN+ICJyZWJhc2UtbWVyZ2VzLCAtLXByZXNlcnZlLW1lcmdlcywgLS1rZWVwLWVtcHR5LCAtLXJvb3QgKyAtLW9udG8pIHbhu5tpIGPDoWMgIgorI34gInTDuXkgY2jhu41uIGFtICglcykiCisKKyN+IG1zZ2lkICIiCisjfiAiZXJyb3I6IGNhbm5vdCBjb21iaW5lIG1lcmdlIG9wdGlvbnMgKC0tbWVyZ2UsIC0tc3RyYXRlZ3ksIC0tc3RyYXRlZ3ktIgorI34gIm9wdGlvbikgd2l0aCBhbSBvcHRpb25zICglcykiCisjfiBtc2dzdHIgIiIKKyN+ICJs4buXaToga2jDtG5nIHRo4buDIGvhur90IGjhu6NwIGPDoWMgdMO5eSBjaOG7jW4gaMOyYSB0cuG7mW4gKC0tbWVyZ2UsIC0tc3RyYXRlZ3ksIC0tIgorI34gInN0cmF0ZWd5LW9wdGlvbikgduG7m2kgbeG7mXQgdMO5eSBjaOG7jW4gYW0gKCVzKSIKKworI34gbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKKyN+IG1zZ3N0ciAia2jDtG5nIGPDtG5nIG5o4bqtbiB0w7l5IGNo4buNbjog4oCcJGFyZ+KAnSIKKworI34gbXNnaWQgIickaW52YWxpZCcgaXMgbm90IGEgdmFsaWQgY29tbWl0IgorI34gbXNnc3RyICLigJ0kaW52YWxpZOKAnSBraMO0bmcgcGjhuqNpIGzDoCBs4bqnbiBjaHV54buDbiBnaWFvIGjhu6NwIGzhu4ciCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgcGFyc2UgJyVzJyAobG9va2luZyBmb3IgJyVzJykiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCDigJwlc+KAnSAoxJFhbmcgdMOsbSBraeG6v20gY2hvIOKAnCVz4oCdKSIKKworI34gbXNnaWQgImRlcHJlY2F0ZWQgc3lub255bSBmb3IgLS1jcmVhdGUtcmVmbG9nIgorI34gbXNnc3RyICLEkeG7k25nIG5naMSpYSDEkcOjIGzhuqFjIGjhuq11IGNobyAtLWNyZWF0ZS1yZWZsb2ciCisKKyN+IG1zZ2lkICJDYW4ndCBzdGF0ICVzIgorI34gbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB24buBIOKAnCVz4oCdIgorCisjfiBtc2dpZCAiYWJvcnQgcmViYXNlIgorI34gbXNnc3RyICJiw6NpIGLhu48gdmnhu4djIGPhuqNpIHThu5UiCisKKyN+IG1zZ2lkICJtYWtlIHJlYmFzZSBzY3JpcHQiCisjfiBtc2dzdHIgInThuqFvIHbEg24gbOG7h25oIHJlYmFzZSIKKworI34gbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAlcyIKKyN+IG1zZ3N0ciAiS2jDtG5nIGPDsyBtw6F5IGNo4bunIG7DoG8gbmjGsCB0aOG6vzogJXMiCisKKyN+IG1zZ2lkICJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBkaSBjaHV54buDbiBt4buZdCBjw6J5LWzDoG0tdmnhu4djIGLhu4sga2jDs2EiCisKKyN+IG1zZ2lkICJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGfhu6EgYuG7jyBt4buZdCBjw6J5LWzDoG0tdmnhu4djIGLhu4sga2jDs2EiCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiXHRIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorI34gIlxuIgorI34gIlx0IgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiXHRUdXkgbmhpw6puLCBu4bq/dSBi4bqhbiB4w7NhIGLhu48gbeG7jWkgdGjhu6ksIHZp4buHYyBj4bqjaSB04buVIHPhur0gYuG7iyBiw6NpIGLhu48uXG4iCisjfiAiXG4iCisjfiAiXHQiCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgcGFyc2UgJyVzJyAobG9va2luZyBmb3IgJyVzJyIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIOKAnCVz4oCdICh0w6xtIGtp4bq/bSBjaG8g4oCcJXPigJ0iCisKKyN+IG1zZ2lkICJwdXNofGZldGNoIgorI34gbXNnc3RyICJwdXNofGZldGNoIgorCisjfiBtc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBtZXJnZSAoZGlydHk6ICVzKSIKKyN+IG1zZ3N0ciAiQuG6o25nIG3hu6VjIGzhu6VjIGLhuqluOiBraMO0bmcgdGjhu4MgaMOyYSB0cuG7mW4gKGLhuqluOiAlcykiCisKKyN+IG1zZ2lkICIoKy8tKXgiCisjfiBtc2dzdHIgIigrLy0peCIKKworI34gbXNnaWQgIjxjb21tYW5kPiIKKyN+IG1zZ3N0ciAiPGzhu4duaD4iCisKKyN+IG1zZ2lkICJ3WyxpMVssaTJdXSIKKyN+IG1zZ3N0ciAid1ssaTFbLGkyXV0iCisKKyN+IG1zZ2lkICJFbnRlcmluZyAnJGRpc3BsYXlwYXRoJyIKKyN+IG1zZ3N0ciAixJBhbmcgdsOgbyDigJwkZGlzcGxheXBhdGjigJ0iCisKKyN+IG1zZ2lkICJTdG9wcGluZyBhdCAnJGRpc3BsYXlwYXRoJzsgc2NyaXB0IHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cy4iCisjfiBtc2dzdHIgIkThu6tuZyBs4bqhaSB04bqhaSDigJwkZGlzcGxheXBhdGjigJ07IHNjcmlwdCB0cuG6oyB24buBIHRy4bqhbmcgdGjDoWkga2jDoWMga2jDtG5nLiIKKworI34gbXNnaWQgIkV2ZXJ5ZGF5IEdpdCBXaXRoIDIwIENvbW1hbmRzIE9yIFNvIgorI34gbXNnc3RyICJN4buXaSBuZ8OgeSBo4buNYyAyMCBs4buHbmggR2l0IGhheSBoxqFuIgorCisjfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKKyN+IG1zZ3N0ciAiS2jDtG5nIHRo4buDIG3hu58g4oCcJXPigJ0gxJHhu4MgZ2hpIgorCisjfiBtc2dpZCAiIgorI34gInVuZXhwZWN0ZWQgMXN0IGxpbmUgb2Ygc3F1YXNoIG1lc3NhZ2U6XG4iCisjfiAiXG4iCisjfiAiXHQlLipzIgorI34gbXNnc3RyICIiCisjfiAia2jDtG5nIGPhuqduIGTDsm5nIHRo4bupIG5o4bqldCBj4bunYSBnaGkgY2jDuiBzcXVhc2g6XG4iCisjfiAiXG4iCisjfiAiXHQlLipzIgorCisjfiBtc2dpZCAiIgorI34gImludmFsaWQgMXN0IGxpbmUgb2Ygc3F1YXNoIG1lc3NhZ2U6XG4iCisjfiAiXG4iCisjfiAiXHQlLipzIgorI34gbXNnc3RyICIiCisjfiAiZMOybmcgdGjhu6kgbmjhuqV0IGPhu6dhIGdoaSBjaMO6IHNxdWFzaCBraMO0bmcgaOG7o3AgbOG7hzpcbiIKKyN+ICJcbiIKKyN+ICJcdCUuKnMiCisKKyN+IG1zZ2lkICJCVUc6IHJldHVybmVkIHBhdGggc3RyaW5nIGRvZXNuJ3QgbWF0Y2ggY3dkPyIKKyN+IG1zZ3N0ciAiTOG7lkk6IHRy4bqjIHbhu4EgY2h14buXaSDEkcaw4budbmcgZOG6q24ga2jDtG5nIGto4bubcCBjd2Q/IgorCisjfiBtc2dpZCAiRXJyb3IgaW4gb2JqZWN0IgorI34gbXNnc3RyICJM4buXaSB0cm9uZyDEkeG7kWkgdMaw4bujbmciCisKKyN+IG1zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290IEVPRiIKKyN+IG1zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IGPhuqduIEFDSy9OQUssIG5oxrBuZyBs4bqhaSBuaOG6rW4gxJHGsOG7o2MgRU9GIgorCisjfiBtc2dpZCAiaW52YWxpZCBmaWx0ZXItc3BlYyBleHByZXNzaW9uICclcyciCisjfiBtc2dzdHIgImJp4buDdSB0aOG7qWMgxJHhurdjIHThuqMgYuG7mSBs4buNYyDigJwlc+KAnSBraMO0bmcgaOG7o3AgbOG7hyIKKworI34gbXNnaWQgIlRoZSBjb3B5IG9mIHRoZSBwYXRjaCB0aGF0IGZhaWxlZCBpcyBmb3VuZCBpbjogJXMiCisjfiBtc2dzdHIgIkLhuqNuIHNhbyBjaMOpcCBj4bunYSBtaeG6v25nIHbDoSBtw6AgbsOzIGfhurdwIGzhu5dpIHRow6wgxJHGsOG7o2MgdMOsbSB0aOG6pXkgdHJvbmc6ICVzIgorCisjfiBtc2dpZCAicGF0aHNwZWMgYW5kIC0tYWxsIGFyZSBpbmNvbXBhdGlibGUiCisjfiBtc2dzdHIgIsSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiB2w6AgLS1hbGwgeHVuZyBraOG6r2MgbmhhdSIKKworI34gbXNnaWQgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggJyRkaXNwbGF5cGF0aCciCisjfiBtc2dzdHIgIiIKKyN+ICJNw7QtxJF1bi1jb24g4oCcJG5hbWXigJ0gKCR1cmwpIMSRxrDhu6NjIGLhu48gxJHEg25nIGvDvSBjaG8gxJHGsOG7nW5nIGThuqtuIOKAnCRkaXNwbGF5cGF0aOKAnSIKKworI34gbXNnaWQgIlRvL0NjL0JjYyBmaWVsZHMgYXJlIG5vdCBpbnRlcnByZXRlZCB5ZXQsIHRoZXkgaGF2ZSBiZWVuIGlnbm9yZWRcbiIKKyN+IG1zZ3N0ciAiQ8OhYyB0csaw4budbmcgVG8vQ2MvQmNjIGtow7RuZyDEkcaw4bujYyBwaGnDqm4gZOG7i2NoLCBjaMO6bmcgYuG7iyBi4buPIHF1YVxuIgorCisjfiBtc2dpZCAiIgorI34gImVtcHR5IHN0cmluZ3MgYXMgcGF0aHNwZWNzIHdpbGwgYmUgbWFkZSBpbnZhbGlkIGluIHVwY29taW5nIHJlbGVhc2VzLiAiCisjfiAicGxlYXNlIHVzZSAuIGluc3RlYWQgaWYgeW91IG1lYW50IHRvIG1hdGNoIGFsbCBwYXRocyIKKyN+IG1zZ3N0ciAiIgorI34gImNodeG7l2kgcuG7l25nIGzDoG0gxJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIGtow7RuZyBo4bujcCBs4buHIOG7nyBs4bqnbiBwaMOhdCBow6BuaCBr4bq/IHRp4bq/cC4gVnVpICIKKyN+ICJsw7JuZyBkw7luZyAuIMSR4buDIHRoYXkgdGjhur8gbuG6v3Ugw70gYuG6oW4gbMOgIGto4bubcCBt4buNaSDEkcaw4budbmcgZOG6q24iCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgdHJ1bmNhdGUgJyVzJyIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGPhuq90IGPhu6V0IOKAnCVz4oCdIgorCisjfiBtc2dpZCAiY291bGQgbm90IGNsb3NlICVzIgorI34gbXNnc3RyICJraMO0bmcgdGjhu4MgxJHDs25nICVzIgorCisjfiBtc2dpZCAiQ29waWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKKyN+IG1zZ3N0ciAixJDDoyBjaMOpcCBuaMOhbmgga2h1eeG6v3QgZGFuaCDigJwlc+KAnSDEkWkiCisKKyN+IG1zZ2lkICJpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGNyZWF0ZSAnSEVBRCcgbWFudWFsbHkiCisjfiBtc2dzdHIgImtow7RuZyBo4bujcCBsw70ga2hpIHThuqFvIOKAnEhFQUTigJ0gdGjhu6cgY8O0bmciCisKKyN+IG1zZ2lkICJEb24ndCBrbm93IGhvdyB0byBjbG9uZSAlcyIKKyN+IG1zZ3N0ciAiS2jDtG5nIGJp4bq/dCBsw6BtIGPDoWNoIG7DoG8gxJHhu4MgbmjDom4gYuG6o24gKGNsb25lKSAlcyIKKworI34gbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGZldGNoIGZyb20gJXMiCisjfiBtc2dzdHIgIktow7RuZyBiaeG6v3QgbMOgbSBjw6FjaCBuw6BvIMSR4buDIGzhuqV5IHbhu4EgdOG7qyAlcyIKKworI34gbXNnaWQgIickdGVybScgaXMgbm90IGEgdmFsaWQgdGVybSIKKyN+IG1zZ3N0ciAi4oCcJHRlcm3igJ0ga2jDtG5nIHBo4bqjaSBsw6AgdGjhu51pIGvhu7MgaOG7o3AgbOG7hyIKKworI34gbXNnaWQgIiIKKyN+ICJlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBzYXZlJzogJG9wdGlvblxuIgorI34gIiAgICAgICBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICckb3B0aW9uJyIKKyN+IG1zZ3N0ciAiIgorI34gImzhu5dpOiBraMO0bmcgaGnhu4N1IHTDuXkgY2jhu41uIGNobyDigJxzdGFzaCBzYXZl4oCdOiAkb3B0aW9uXG4iCisjfiAiICAgICDEkOG7gyBjw7MgdGjhu4MgZMO5bmcgbOG7nWkgY2jDuiB0aMOtY2ggY8OzIGNo4bupYSAtLSDhu58gxJHhuqd1LFxuIgorI34gIiAgICAgZMO5bmcgZ2l0IHN0YXNoIHNhdmUgLS0gXCIkb3B0aW9uXCIiCisKKyN+IG1zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCisjfiBtc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG7hyBxdXkgdsOgbyB0cm9uZyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRzbV9wYXRo4oCdIgorCisjfiBtc2dpZCAiJSUodHJhaWxlcnMpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorI34gbXNnc3RyICIlJSh0cmFpbGVycykga2jDtG5nIG5o4bqtbiBjw6FjIMSR4buRaSBz4buRIgorCisjfiBtc2dpZCAic3VibW9kdWxlIHVwZGF0ZSBzdHJhdGVneSBub3Qgc3VwcG9ydGVkIGZvciBzdWJtb2R1bGUgJyVzJyIKKyN+IG1zZ3N0ciAiIgorI34gImNoaeG6v24gbMaw4bujYyBj4bqtcCBuaOG6rXQgbcO0LcSRdW4tY29uIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIGNobyBtw7QtxJF1bi1jb24g4oCcJXPigJ0iCisKKyN+IG1zZ2lkICJjaGFuZ2UgdXBzdHJlYW0gaW5mbyIKKyN+IG1zZ3N0ciAidGhheSDEkeG7lWkgdGjDtG5nIHRpbiB0aMaw4bujbmcgbmd14buTbiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJJZiB5b3Ugd2FudGVkIHRvIG1ha2UgJyVzJyB0cmFjayAnJXMnLCBkbyB0aGlzOlxuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiTuG6v3UgYuG6oW4gbXXhu5FuIOKAnCVz4oCdIHRoZW8gZMO1aSDigJwlc+KAnSwgdGjhu7FjIGhp4buHbiBs4buHbmggc2F1OlxuIgorI34gIlxuIgorCisjfiBtc2dpZCAiYmFzZW5hbWUiCisjfiBtc2dzdHIgInTDqm4gY8ahIHPhu58iCisKKyN+IG1zZ2lkICIiCisjfiAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorI34gIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCJnaXQgcmViYXNlIC0tc2tpcFwiIGluc3RlYWQuXG4iCisjfiAiVG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcmViYXNpbmcsIHJ1biBcImdpdCByZWJhc2UgLS0iCisjfiAiYWJvcnRcIi4iCisjfiBtc2dzdHIgIiIKKyN+ICJLaGkgYuG6oW4gY+G6p24gZ2nhuqNpIHF1eeG6v3QgduG6pW4gxJHhu4EgbsOgeSBow6N5IGNo4bqheSBs4buHbmggXCJnaXQgcmViYXNlIC0tY29udGludWUiCisjfiAiXCIuXG4iCisjfiAiTuG6v3UgYuG6oW4gY8OzIMO9IMSR4buLbmggYuG7jyBxdWEgbWnhur9uZyB2w6EsIHRoYXkgdsOgbyDEkcOzIGLhuqFuIGNo4bqheSBcImdpdCByZWJhc2UgLS0iCisjfiAic2tpcFwiLlxuIgorI34gIsSQ4buDIHBo4bulYyBo4buTaSBs4bqhaSB0aMOgbmggbmjDoW5oIG5ndXnDqm4gdGjhu6d5IHbDoCBk4burbmcgdmnhu4djIHbDoSBs4bqhaSB0aMOsIGNo4bqheSAiCisjfiAiXCJnaXQgcmViYXNlIC0tYWJvcnRcIi4iCisKKyN+IG1zZ2lkICIiCisjfiAiV2FybmluZzogdGhlIFNIQS0xIGlzIG1pc3Npbmcgb3IgaXNuJ3QgYSBjb21taXQgaW4gdGhlIGZvbGxvd2luZyBsaW5lOlxuIgorI34gIiAtICRsaW5lIgorI34gbXNnc3RyICIiCisjfiAiQ+G6o25oIGLDoW86IFNIQS0xIGLhu4sgdGhp4bq/dSBob+G6t2Mga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyB0cm9uZyAiCisjfiAiZMOybmcgc2F1IMSRw6J5OlxuIgorI34gIiAtICRsaW5lIgorCisjfiBtc2dpZCAiIgorI34gIldhcm5pbmc6IHRoZSBjb21tYW5kIGlzbid0IHJlY29nbml6ZWQgaW4gdGhlIGZvbGxvd2luZyBsaW5lOlxuIgorI34gIiAtICRsaW5lIgorI34gbXNnc3RyICIiCisjfiAiQ+G6o25oIGLDoW86IGzhu4duaCBraMO0bmcgbmjhuq1uIHJhIHRyb25nIGTDsm5nIHNhdSDEkcOieTpcbiIKKyN+ICIgLSAkbGluZSIKKworI34gbXNnaWQgIk9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLiIKKyN+IG1zZ3N0ciAiSG/hurdjIGzDoCBi4bqhbiBjw7MgdGjhu4MgYsOjaSBi4buPIGzhuqduIGPhuqNpIHThu5UgduG7m2kgbOG7h25oIOKAnGdpdCByZWJhc2UgLS1hYm9ydOKAnS4iCisKKyN+IG1zZ2lkICIlIgorI34gbXNnaWRfcGx1cmFsICIlIgorI34gbXNnc3RyWzBdICIlIgorCisjfiBtc2dpZCAiJXMsICUiCisjfiBtc2dpZF9wbHVyYWwgIiVzLCAlIgorI34gbXNnc3RyWzBdICIlcywgJSIKKworI34gbXNnaWQgImluICUwLjFmIHNlY29uZHMgYXV0b21hdGljYWxseS4uLiIKKyN+IG1zZ3N0ciAidHJvbmcgJTAuMWYgZ2nDonkgbeG7mXQgY8OhY2ggdOG7sSDEkeG7mW5n4oCmIgorCisjfiBtc2dpZCAiZHVwMiglZCwlZCkgZmFpbGVkIgorI34gbXNnc3RyICJkdXAyKCVkLCVkKSBn4bq3cCBs4buXaSIKKworI34gbXNnaWQgIkluaXRpYWwgY29tbWl0IG9uICIKKyN+IG1zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyBraOG7n2kgdOG6oW8gdHLDqm4gIgorCisjfiBtc2dpZCAiUGF0Y2ggaXMgZW1wdHkuIFdhcyBpdCBzcGxpdCB3cm9uZz8iCisjfiBtc2dzdHIgIk1p4bq/bmcgdsOhIHRy4buRbmcgcuG7l25nLiBRdcOhIHRyw6xuaCBjaGlhIG5o4buPIG1p4bq/bmcgdsOhIGPDsyBs4buXaT8iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyN+ICJEaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnPyIKKyN+IG1zZ3N0ciAiIgorI34gIkLhuqFuIHbhuqtuIGPDsyBuaOG7r25nIMSRxrDhu51uZyBk4bqrbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbiB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMgY+G7p2EgIgorI34gIm3DrG5oLlxuIgorI34gIkLhuqFuIMSRw6MgcXXDqm4gc+G7rSBk4bulbmcgbOG7h25oIOKAnGdpdCBhZGTigJ0gw6A/IgorCisjfiBtc2dpZCAiIgorI34gIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLlxuIgorI34gIkRpZCB5b3UgaW50ZW5kIHRvIGNoZWNrb3V0ICclcycgd2hpY2ggY2FuIG5vdCBiZSByZXNvbHZlZCBhcyBjb21taXQ/IgorI34gbXNnc3RyICIiCisjfiAiS2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCB2w6AgY2h1eeG7g24gdGjDoG5oIG5ow6FuaCDigJwlc+KAnSBjw7luZyBsw7pjXG4iCisjfiAiQuG6oW4gxJHDoyBjw7Mgw70gxJHhu4tuaCBjaGVja291dCDigJwlc+KAnSBjw6FpIG3DoCBraMO0bmcgdGjhu4MgxJHGsOG7o2MgcGjDom4gZ2nhuqNpIG5oxrAgbMOgIGzhuqduICIKKyN+ICJjaHV54buDbiBnaWFvPyIKKworI34gbXNnaWQgIkV4cGxpY2l0IHBhdGhzIHNwZWNpZmllZCB3aXRob3V0IC1pIG9yIC1vOyBhc3N1bWluZyAtLW9ubHkgcGF0aHMuLi4iCisjfiBtc2dzdHIgIiIKKyN+ICJOaOG7r25nIMSRxrDhu51uZyBk4bqrbiByw7UgcsOgbmcgxJHGsOG7o2MgY2jhu4kgcmEga2jDtG5nIGPDsyB0w7l5IGNo4buNbiAtaSBjxaluZyBraMO0bmcgLW87ICIKKyN+ICJjb2kgbMOgIC0tb25seSBuaOG7r25nIMSRxrDhu51uZyBk4bqrbiIKKworI34gbXNnaWQgImRlZmF1bHQgbW9kZSBmb3IgcmVjdXJzaW9uIgorI34gbXNnc3RyICJjaOG6vyDEkeG7mSBt4bq3YyDEkeG7i25oIGNobyDEkeG7hyBxdWkiCisKKyN+IG1zZ2lkICJzdWJtb2R1bGUtLWhlbHBlciBzdWJjb21tYW5kIG11c3QgYmUgY2FsbGVkIHdpdGggYSBzdWJjb21tYW5kIgorI34gbXNnc3RyICJs4buHbmggY29uIHN1Ym1vZHVsZS0taGVscGVyIHBo4bqjaSDEkcaw4bujYyBn4buNaSB24bubaSBt4buZdCBs4buHbmggY29uIgorCisjfiBtc2dpZCAidGFnOiB0YWdnaW5nICIKKyN+IG1zZ3N0ciAidGjhurs6IMSRYW5nIMSRw6FuaCB0aOG6uyIKKworI34gbXNnaWQgImNvbW1pdCBvYmplY3QiCisjfiBtc2dzdHIgIsSR4buRaSB0xrDhu6NuZyBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjfiBtc2dpZCAidHJlZSBvYmplY3QiCisjfiBtc2dzdHIgIsSR4buRaSB0xrDhu6NuZyBjw6J5IgorCisjfiBtc2dpZCAiYmxvYiBvYmplY3QiCisjfiBtc2dzdHIgIsSR4buRaSB0xrDhu6NuZyBibG9iIgorCisjfiBtc2dpZCAiIgorI34gIlRoZXJlIGlzIG5vdGhpbmcgdG8gZXhjbHVkZSBmcm9tIGJ5IDooZXhjbHVkZSkgcGF0dGVybnMuXG4iCisjfiAiUGVyaGFwcyB5b3UgZm9yZ290IHRvIGFkZCBlaXRoZXIgJzovJyBvciAnLicgPyIKKyN+IG1zZ3N0ciAiIgorI34gIuG7niDEkcOieSBraMO0bmcgY8OzIGfDrCBi4buLIGxv4bqhaSB0cuG7qyBi4bufaTogY8OhYyBt4bqrdSAobG/huqFpIHRy4burKS5cbiIKKyN+ICJDw7MgbOG6vSBi4bqhbiDEkcOjIHF1w6puIHRow6ptIGhv4bq3YyBsw6Ag4oCcOi/igJ0gaG/hurdjIGzDoCDigJwu4oCdPyIKKworI34gbXNnaWQgInVucmVjb2duaXplZCBmb3JtYXQ6ICUlKCVzKSIKKyN+IG1zZ3N0ciAia2jDtG5nIG5o4bqtbiByYSDEkeG7i25oIGThuqFuZzogJSUoJXMpIgorCisjfiBtc2dpZCAiOnN0cmlwPSByZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXIgYXJndW1lbnQiCisjfiBtc2dzdHIgIjpzdHJpcD0gY+G6p24gbeG7mXQgxJHhu5FpIHPhu5Egbmd1ecOqbiBkxrDGoW5nIgorCisjfiBtc2dpZCAicmVmICclcycgZG9lcyBub3QgaGF2ZSAlbGQgY29tcG9uZW50cyB0byA6c3RyaXAiCisjfiBtc2dzdHIgInRoYW0gY2hp4bq/dSDigJwlc+KAnSBraMO0bmcgY8OzICVsZCB0aMOgbmggcGjhuqduIMSR4buDIG3DoCA6c3RyaXAiCisKKyN+IG1zZ2lkICJbJXM6IGdvbmVdIgorI34gbXNnc3RyICJbJXM6IMSRw6MgcmEgxJFpXSIKKworI34gbXNnaWQgIlslc10iCisjfiBtc2dzdHIgIlslc10iCisKKyN+IG1zZ2lkICJbJXM6IGJlaGluZCAlZF0iCisjfiBtc2dzdHIgIlslczogxJHhu6luZyBzYXUgJWRdIgorCisjfiBtc2dpZCAiWyVzOiBhaGVhZCAlZF0iCisjfiBtc2dzdHIgIlslczogcGjDrWEgdHLGsOG7m2MgJWRdIgorCisjfiBtc2dpZCAiWyVzOiBhaGVhZCAlZCwgYmVoaW5kICVkXSIKKyN+IG1zZ3N0ciAiWyVzOiB0csaw4bubYyAlZCwgc2F1ICVkXSIKKworI34gbXNnaWQgIiAqKioqIGludmFsaWQgcmVmICoqKioiCisjfiBtc2dzdHIgIiAqKioqIHRoYW0gY2hp4bq/dSBraMO0bmcgaOG7o3AgbOG7hyAqKioqIgorCisjfiBtc2dpZCAiaW5zYW5lbHkgbG9uZyBvYmplY3QgZGlyZWN0b3J5ICUuKnMiCisjfiBtc2dzdHIgInRoxrAgbeG7pWMgxJHhu5FpIHTGsOG7o25nIGTDoGkgbeG7mXQgY8OhY2ggxJFpw6puIHLhu5MgJS4qcyIKKworI34gbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSA8bXNnPiBIRUFEIDxjb21taXQ+IgorI34gbXNnc3RyICJnaXQgbWVyZ2UgWzxjw6FjLXTDuXktY2jhu41uPl0gPHRpbi1uaOG6r24+IEhFQUQgPGNvbW1pdD4iCisKKyN+IG1zZ2lkICJ0YWcgbmFtZSB0b28gbG9uZzogJS4qcy4uLiIKKyN+IG1zZ3N0ciAidMOqbiB0aOG6uyBxdcOhIGTDoGk6ICUuKnPigKYiCisKKyN+IG1zZ2lkICJ0YWcgaGVhZGVyIHRvbyBiaWcuIgorI34gbXNnc3RyICJwaOG6p24gxJHhuqd1IHRo4bq7IHF1w6EgbOG7m24uIgorCisjfiBtc2dpZCAiIgorI34gIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisjfiAibWFya2VkIGZvciBkaXNjYXJkaW5nIgorI34gbXNnc3RyICIiCisjfiAiTuG6v3UgbWnhur9uZyB2w6EgxJHGsOG7o2Mgw6FwIGThu6VuZyBz4bqhY2ggc+G6vSwgaHVuayDEkcOjIHPhu61hIHPhur0gbmdheSBs4bqtcCB04bupY1xuIgorI34gIsSRxrDhu6NjIMSRw6FuaCBk4bqldSDEkeG7gyBsb+G6oWkgYuG7jyIKKworI34gbXNnaWQgIlVzZSBhbiBleHBlcmltZW50YWwgYmxhbmstbGluZS1iYXNlZCBoZXVyaXN0aWMgdG8gaW1wcm92ZSBkaWZmcyIKKyN+IG1zZ3N0ciAiIgorI34gIkTDuW5nIG3hu5l0IHBo4buPbmcgxJFvw6FuIGThu7FhIHRyw6puIGTDsm5nIHRy4bqvbmcgdGjhu60gbmdoaeG7h20gxJHhu4MgdMSDbmcgY8aw4budbmcgY8OhYyBkaWZmIgorCisjfiBtc2dpZCAiQ2xldmVyLi4uIGFtZW5kaW5nIHRoZSBsYXN0IG9uZSB3aXRoIGRpcnR5IGluZGV4LiIKKyN+IG1zZ3N0ciAiR2nhu49p4oCmICDigJx0dSBi4buV4oCdIGPDoWkgY3Xhu5FpIHbhu5tpIGLhuqNuZyBt4bulYyBs4bulYyBi4bqpbi4iCisKKyN+IG1zZ2lkICIiCisjfiAidGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgKG9yIG9uZSBvZiBpdHMgbmVzdGVkIHN1Ym1vZHVsZXMpXG4iCisjfiAidXNlcyBhIC5naXQgZGlyZWN0b3J5OiIKKyN+IG1zZ2lkX3BsdXJhbCAiIgorI34gInRoZSBmb2xsb3dpbmcgc3VibW9kdWxlcyAob3Igb25lIG9mIHRoZWlyIG5lc3RlZCBzdWJtb2R1bGVzKVxuIgorI34gInVzZSBhIC5naXQgZGlyZWN0b3J5OiIKKyN+IG1zZ3N0clswXSAiIgorI34gImPDoWMgbcO0LcSRdW4tY29uIHNhdSDEkcOieSAoaGF5IG3hu5l0IHRyb25nIHPhu5EgbcO0LcSRdW4tY29uIGLDqm4gdHJvbmcgY+G7p2EgbsOzKVxuIgorI34gImTDuW5nIG3hu5l0IHRoxrAgbeG7pWMgLmdpdDoiCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiKHVzZSAncm0gLXJmJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzICIKKyN+ICJoaXN0b3J5KSIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIihkw7luZyAvXCJybSAtcmYvXCIgbuG6v3UgYuG6oW4gdGjhu7FjIHPhu7EgbXXhu5FuIGfhu6EgYuG7jyBuw7MgY8O5bmcgduG7m2kgdOG6pXQgY+G6oyBs4buLY2ggc+G7rSAiCisjfiAiY+G7p2EgY2jDum5nKSIKKworI34gbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzLiIKKyN+IG1zZ3N0ciAiTOG7l2kgYmFvIGLhu41jICVzLiIKKworI34gbXNnaWQgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVycnktcGljay4iCisjfiBtc2dzdHIgIkPDoWMgdGhheSDEkeG7lWkgbuG7mWkgYuG7mSBj4bunYSBi4bqhbiBjw7MgdGjhu4MgYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggY2hlcnJ5LXBpY2suIgorCisjfiBtc2dpZCAiQ2Fubm90IHJldmVydCBkdXJpbmcgYW5vdGhlciByZXZlcnQuIgorI34gbXNnc3RyICJLaMO0bmcgdGjhu4MgaG/DoG4gbmd1ecOqbiB0cm9uZyBraGkgY8OzIGhvw6BuIG5ndXnDqm4ga2jDoWMuIgorCisjfiBtc2dpZCAiQ2Fubm90IGNoZXJyeS1waWNrIGR1cmluZyBhbm90aGVyIGNoZXJyeS1waWNrLiIKKyN+IG1zZ3N0ciAiIgorI34gIktow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIHZp4buHYyBjaGVycnktcGljayB0cm9uZyBraGkga2hpIMSRYW5nIGNoZXJyeS1waWNrIGtow6FjLiIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuICVzIgorI34gbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyAlcyIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBmb3JtYXQgJXMuIgorI34gbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu4tuaCBk4bqhbmcg4oCcJXPigJ0uIgorCisjfiBtc2dpZCAiJXM6ICVzIgorI34gbXNnc3RyICIlczogJXMiCisKKyN+IG1zZ2lkICJZb3UgbmVlZCB0byBzZXQgeW91ciBjb21taXR0ZXIgaW5mbyBmaXJzdCIKKyN+IG1zZ3N0ciAiQuG6oW4gY+G6p24gxJHhurd0IHRow7RuZyB0aW4gduG7gSBuZ8aw4budaSBjaHV54buDbiBnaWFvIG3DoyBuZ3Xhu5NuIHRyxrDhu5tjIMSRw6MiCisKKyN+IG1zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogaW52YWxpZCB1bml0IgorI34gbXNnc3RyICJzYWkgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSBj4bunYSBj4bqldSBow6xuaCDigJwlc+KAnSBjaG8g4oCcJXPigJ06IMSRxqFuIHbhu4sgc2FpIgorCisjfiBtc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gYmxvYiAlczogaW52YWxpZCB1bml0IgorI34gbXNnc3RyICIiCisjfiAic2FpIGdpw6EgdHLhu4sgYuG6sW5nIHPhu5EgY+G7p2EgY+G6pXUgaMOsbmgg4oCcJXPigJ0gY2hvIOKAnCVz4oCdIHRyb25nIGJsb2IgJXM6IMSRxqFuIHbhu4sgc2FpIgorCisjfiBtc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gZmlsZSAlczogaW52YWxpZCB1bml0IgorI34gbXNnc3RyICIiCisjfiAic2FpIGdpw6EgdHLhu4sgYuG6sW5nIHPhu5EgY+G7p2EgY+G6pXUgaMOsbmgg4oCcJXPigJ0gY2hvIOKAnCVz4oCdIHRyb25nIHThuq1wIHRpbiAlczogxJHGoW4gduG7iyAiCisjfiAic2FpIgorCisjfiBtc2dpZCAiIgorI34gImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN0YW5kYXJkIGlucHV0OiBpbnZhbGlkIHVuaXQiCisjfiBtc2dzdHIgIiIKKyN+ICJzYWkgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSBj4bunYSBj4bqldSBow6xuaCDigJwlc+KAnSBjaG8g4oCcJXPigJ0gdHJvbmcgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbjogIgorI34gIsSRxqFuIHbhu4sga2jDtG5nIGjhu6NwIGzhu4ciCisKKyN+IG1zZ2lkICIiCisjfiAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6IGludmFsaWQgdW5pdCIKKyN+IG1zZ3N0ciAiIgorI34gInNhaSBnacOhIHRy4buLIGLhurFuZyBz4buRIGPhu6dhIGPhuqV1IGjDrG5oIOKAnCVz4oCdIGNobyDigJwlc+KAnSB0cm9uZyBzdWJtb2R1bGUtYmxvYiAlczogIgorI34gIsSRxqFuIHbhu4sga2jDtG5nIGjhu6NwIGzhu4ciCisKKyN+IG1zZ2lkICIiCisjfiAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gY29tbWFuZCBsaW5lICVzOiBpbnZhbGlkIHVuaXQiCisjfiBtc2dzdHIgIiIKKyN+ICJzYWkgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSBj4bunYSBj4bqldSBow6xuaCDigJwlc+KAnSBjaG8g4oCcJXPigJ0gdHJvbmcgZMOybmcgbOG7h25oICVzOiDEkcahbiB24buLICIKKyN+ICJraMO0bmcgaOG7o3AgbOG7hyIKKworI34gbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiBpbnZhbGlkIHVuaXQiCisjfiBtc2dzdHIgIiIKKyN+ICJzYWkgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSBj4bunYSBj4bqldSBow6xuaCDigJwlc+KAnSBjaG8g4oCcJXPigJ0gdHJvbmcgJXM6IMSRxqFuIHbhu4sga2jDtG5nIGjhu6NwICIKKyN+ICJs4buHIgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgMm5kIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAixJDDonkgbMOgIGNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDI6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgM3JkIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAixJDDonkgbMOgIGNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDM6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgNHRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAixJDDonkgbMOgIGNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDQ6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgNXRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAixJDDonkgbMOgIGNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDU6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgNnRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAixJDDonkgbMOgIGNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDY6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgN3RoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAixJDDonkgbMOgIGNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDc6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgOHRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAixJDDonkgbMOgIGNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDg6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgOXRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAixJDDonkgbMOgIGNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDk6IgorCisjfiBtc2dpZCAiVGhpcyBpcyB0aGUgMTB0aCBjb21taXQgbWVzc2FnZToiCisjfiBtc2dzdHIgIsSQw6J5IGzDoCBjaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSAxMDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAke259dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICLEkMOieSBsw6AgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgJHtufToiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAke259c3QgY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICLEkMOieSBsw6AgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgJHtufToiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAke259bmQgY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICLEkMOieSBsw6AgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgJHtufToiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAke259cmQgY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICLEkMOieSBsw6AgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgJHtufToiCisKKyN+IG1zZ2lkICJUaGUgMXN0IGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIG5o4bqldCBz4bq9IGLhu4sgYuG7jyBxdWE6IgorCisjfiBtc2dpZCAiVGhlIDJuZCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJDaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSAyIHPhur0gYuG7iyBi4buPIHF1YToiCisKKyN+IG1zZ2lkICJUaGUgM3JkIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDMgc+G6vSBi4buLIGLhu48gcXVhOiIKKworI34gbXNnaWQgIlRoZSA0dGggY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQ2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgNCBz4bq9IGLhu4sgYuG7jyBxdWE6IgorCisjfiBtc2dpZCAiVGhlIDV0aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJDaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSA1IHPhur0gYuG7iyBi4buPIHF1YToiCisKKyN+IG1zZ2lkICJUaGUgNnRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDYgc+G6vSBi4buLIGLhu48gcXVhOiIKKworI34gbXNnaWQgIlRoZSA3dGggY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQ2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgNyBz4bq9IGLhu4sgYuG7jyBxdWE6IgorCisjfiBtc2dpZCAiVGhlIDh0aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJDaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSA4IHPhur0gYuG7iyBi4buPIHF1YToiCisKKyN+IG1zZ2lkICJUaGUgOXRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDkgc+G6vSBi4buLIGLhu48gcXVhOiIKKworI34gbXNnaWQgIlRoZSAxMHRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDEwIHPhur0gYuG7iyBi4buPIHF1YToiCisKKyN+IG1zZ2lkICJUaGUgJHtufXRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupICR7bn0gc+G6vSBi4buLIGLhu48gcXVhOiIKKworI34gbXNnaWQgIlRoZSAke259c3QgY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQ2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgJHtufSBz4bq9IGLhu4sgYuG7jyBxdWE6IgorCisjfiBtc2dpZCAiVGhlICR7bn1uZCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJDaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSAke259IHPhur0gYuG7iyBi4buPIHF1YToiCisKKyN+IG1zZ2lkICJUaGUgJHtufXJkIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupICR7bn0gc+G6vSBi4buLIGLhu48gcXVhOiIKKworI34gbXNnaWQgImNvdWxkIG5vdCBydW4gZ3BnLiIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGNo4bqheSBncGcuIgorCisjfiBtc2dpZCAiZ3BnIGRpZCBub3QgYWNjZXB0IHRoZSBkYXRhIgorI34gbXNnc3RyICJncGcgxJHDoyBraMO0bmcgY2jhuqVwIG5o4bqtbiBk4buvIGxp4buHdSIKKworI34gbXNnaWQgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlIGluIHRoZSB0cmVlIgorI34gbXNnc3RyICJraeG7g3UgxJHhu5FpIHTGsOG7o25nIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIHRyb25nIGPDonkgKHRyZWUpIgorCisjfiBtc2dpZCAiRmF0YWwgbWVyZ2UgZmFpbHVyZSwgc2hvdWxkbid0IGhhcHBlbi4iCisjfiBtc2dzdHIgIlZp4buHYyBow7JhIHRy4buZbiBo4buPbmcgbmdoacOqbSB0cuG7jW5nLCBraMO0bmcgbsOqbiDEkeG7gyB44bqjeSByYS4iCisKKyN+IG1zZ2lkICJVbnByb2Nlc3NlZCBwYXRoPz8/ICVzIgorI34gbXNnc3RyICLEkMaw4budbmcgZOG6q24gY2jGsGEgxJHGsOG7o2MgeOG7rSBsw70/Pz8gJXMiCisKKyN+IG1zZ2lkICJDYW5ub3QgJXMgZHVyaW5nIGEgJXMiCisjfiBtc2dzdHIgIktow7RuZyB0aOG7gyAlcyB0cm9uZyBraGkgJXMiCisKKyN+IG1zZ2lkICJDYW4ndCBjaGVycnktcGljayBpbnRvIGVtcHR5IGhlYWQiCisjfiBtc2dzdHIgIktow7RuZyB0aOG7gyBjaGVycnktcGljayB2w6BvIG3hu5l0IMSR4bqndSAoaGVhZCkgdHLhu5FuZyBy4buXbmciCisKKyN+IG1zZ2lkICJjb3VsZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gJXMgxJHhu4MgZ2hpIgorCisjfiBtc2dpZCAiYnVnOiB1bmhhbmRsZWQgdW5tZXJnZWQgc3RhdHVzICV4IgorI34gbXNnc3RyICJs4buXaToga2jDtG5nIHRo4buDIHRp4bq/cCBuaOG6rW4gdHLhuqFuZyB0aMOhaSBjaMawYSBow7JhIHRy4buZbiAleCIKKworI34gbXNnaWQgImJ1ZzogdW5oYW5kbGVkIGRpZmYgc3RhdHVzICVjIgorI34gbXNnc3RyICJs4buXaToga2jDtG5nIHRo4buDIHRp4bq/cCBuaOG6rW4gdHLhuqFuZyB0aMOhaSBs4buHbmggZGlmZiAlYyIKKworI34gbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBicmFuY2ggZGVzY3JpcHRpb24gdGVtcGxhdGUiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgbeG6q3UgbcO0IHThuqMgbmjDoW5oIgorCisjfiBtc2dpZCAiY29ycnVwdCBpbmRleCBmaWxlIgorI34gbXNnc3RyICJ04bqtcCB0aW4gZ2hpIGLhuqNuZyBt4bulYyBs4bulYyBi4buLIGjhu49uZyIKKworI34gbXNnaWQgImRldGFjaCB0aGUgSEVBRCBhdCBuYW1lZCBjb21taXQiCisjfiBtc2dzdHIgInLhu51pIGLhu48gSEVBRCB04bqhaSBs4bqnbiBjaHV54buDbiBnaWFvIGRhbmggbmdoxKlhIgorCisjfiBtc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5Li4uICIKKyN+IG1zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSBr4bq/dCBu4buRaeKApiAiCisKKyN+IG1zZ2lkICIgICh1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZikiCisjfiBtc2dzdHIgIiAgKGtow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgdGhhbSBjaGnhur91IG7hu5lpIGLhu5kpIgorCisjfiBtc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyIKKyN+IG1zZ3N0ciAiS2jhu59pIHThuqFvIGzhuqFpIMSRw6Mgc+G6tW4gY8OzIHLhu5NpIgorCisjfiBtc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkiCisjfiBtc2dzdHIgIkto4bufaSB04bqhbyB0cuG7kW5nIHLhu5duZyIKKworI34gbXNnaWQgIiBzaGFyZWQiCisjfiBtc2dzdHIgIiDEkcOjIGNoaWEgc+G6uyIKKworI34gbXNnaWQgIlZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKKyN+IG1zZ3N0ciAiIgorI34gIlRo4bqpbSB0cmEgeGVtIGzhuqduIGNodXnhu4NuIGdpYW8gY8OzIHTDqm4gxJHDsyBjw7MgY2jhu68ga8O9IEdQRyBo4bujcCBs4buHIGhheSBraMO0bmciCisKKyN+IG1zZ2lkICJXcml0aW5nIFNRVUFTSF9NU0ciCisjfiBtc2dzdHIgIsSQYW5nIGdoaSBTUVVBU0hfTVNHIgorCisjfiBtc2dpZCAiRmluaXNoaW5nIFNRVUFTSF9NU0ciCisjfiBtc2dzdHIgIkhvw6BuIHRow6BuaCBTUVVBU0hfTVNHIgorCisjfiBtc2dpZCAiICAgYW5kIHdpdGggcmVtb3RlIgorI34gbXNnc3RyICIgICB2w6AgduG7m2kgbcOheSBjaOG7pyIKKworI34gbXNnaWQgInJlbW92aW5nICclcycgZmFpbGVkIgorI34gbXNnc3RyICJn4bq3cCBs4buXaSBraGkgeMOzYSBi4buPIOKAnCVz4oCdIgorCisjfiBtc2dpZCAiUGxlYXNlIGNhbGwgJ2Jpc2VjdF9zdGF0ZScgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIgorI34gbXNnc3RyICJIw6N5IGfhu41pIGzhu4duaGwg4oCcYmlzZWN0X3N0YXRl4oCdIHbhu5tpIMOtdCBuaOG6pXQgbeG7mXQgxJHhu5FpIHPhu5EuIgorCisjfiBtc2dpZCAiIgorI34gIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gIgorI34gImZyb20iCisjfiBtc2dzdHIgIk7hur91IGLhuqFuIG114buRbiBkw7luZyBs4bqhaSB0aMawIG3hu6VjIGdpdCBu4buZaSBi4buZIG7DoHkgdGhheSB2w6wgbmjDom4gYuG6o24gdOG7qyBuw7MiCisKKyN+IG1zZ2lkICIiCisjfiAidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgIgorI34gInJlcG8iCisjfiBtc2dzdHIgIiIKKyN+ICJkw7luZyB0w7l5IGNo4buNbiDigJwtLWZvcmNl4oCdLiBO4bq/dSB0aMawIG3hu6VjIGdpdCBu4buZaSBi4buZIGtow7RuZyBwaOG6o2kgbMOgIHJlcG8gKGtobykgIgorI34gIsSRw7puZyIKKworI34gbXNnaWQgIiIKKyN+ICJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyAiCisjfiAib3B0aW9uLiIKKyN+IG1zZ3N0ciAiIgorI34gImhheSBi4bqhbiBraMO0bmcgY2jhuq9jIGNo4bqvbiDEkWnhu4F1IMSRw7MgY8OzIG5naMSpYSBnw6wgY2jhu41uIHTDqm4ga2jDoWMgduG7m2kgdMO5eSBjaOG7jW4g4oCcLS0iCisjfiAibmFtZeKAnS4iCisKKyN+IG1zZ2lkICJTdWJtb2R1bGUgd29yayB0cmVlICckZGlzcGxheXBhdGgnIGNvbnRhaW5zIGEgLmdpdCBkaXJlY3RvcnkiCisjfiBtc2dzdHIgIkPDonkgbMOgbSB2aeG7h2MgbcO0LcSRdW4tY29uIOKAnCRkaXNwbGF5cGF0aOKAnSBjw7MgY2jhu6lhIHRoxrAgbeG7pWMgLmdpdCIKKworI34gbXNnaWQgIiIKKyN+ICIodXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgIgorI34gImhpc3RvcnkpIgorI34gbXNnc3RyICIiCisjfiAiKGTDuW5nIOKAnHJtIC1yZuKAnSBu4bq/dSBi4bqhbiB0aOG7sWMgc+G7sSBtdeG7kW4gZ+G7oSBi4buPIG7DsyBjw7luZyB24bubaSB04bqldCBj4bqjIGzhu4tjaCBz4butIGPhu6dhICIKKyN+ICJjaMO6bmcpIgorCisjfiBtc2dpZCAiJyVzJzogJXMiCisjfiBtc2dzdHIgIuKAnCVz4oCdOiAlcyIKKworI34gbXNnaWQgIiAgICBnaXQgYnJhbmNoIC1kICVzXG4iCisjfiBtc2dzdHIgIiAgICBnaXQgYnJhbmNoIC1kICVzXG4iCisKKyN+IG1zZ2lkICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgorI34gbXNnc3RyICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgorCisjfiBtc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzXG4iCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBt4bufICVzOiAlc1xuIgorCisjfiBtc2dpZCAiUGxlYXNlLCBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorI34gbXNnc3RyICIiCisjfiAiVnVpIGzDsm5nIMSRxrBhIGPDoWMgdGhheSDEkeG7lWkgY+G7p2EgYuG6oW4gdsOgbyDigJwuZ2l0bW9kdWxlc+KAnSBoYXkgdOG6oW0gY+G6pXQgY2jDum5nIMSRaSAiCisjfiAixJHhu4MgeOG7rSBsw70iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlOiAlcyIKKyN+IG1zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGfhu6EgYuG7jzogJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcgbm90IGluaXRpYWxpemVkXG4iCisjfiAiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCisjfiBtc2dzdHIgIiIKKyN+ICLEkMaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRkaXNwbGF5cGF0aOKAnSBjaMawYSDEkcaw4bujYyBraOG7n2kgdOG6oW8uXG4iCisjfiAiQ8OzIGzhur0gYuG6oW4gbXXhu5FuIHPhu60gZOG7pW5nIGzhu4duaCDigJx1cGRhdGUgLS1pbml04oCdPyIKKworI34gbXNnaWQgIkZvcndhcmQtcG9ydCBsb2NhbCBjb21taXRzIHRvIHRoZSB1cGRhdGVkIHVwc3RyZWFtIGhlYWQiCisjfiBtc2dzdHIgIiIKKyN+ICJDaHV54buDbiB0aeG6v3Agbmjhu69uZyBs4bqnbiBjaHV54buDbiBnaWFvIG7hu5lpIGLhu5kgdOG7m2kgaGVhZCB0aMaw4bujbmcgbmd14buTbiDEkcOjIGPhuq1wIG5o4bqtdCIKKworI34gbXNnaWQgImltcHJvcGVyIGZvcm1hdCBlbnRlcmVkIGFsaWduOiVzIgorI34gbXNnc3RyICLEkeG7i25oIGThuqFuZyBraMO0bmcgxJHDum5nIGNo4buXIGPEg24gY2jhu4luaDolcyIKKworI34gbXNnaWQgIiIKKyN+ICJwdXNoLmRlZmF1bHQgaXMgdW5zZXQ7IGl0cyBpbXBsaWNpdCB2YWx1ZSBoYXMgY2hhbmdlZCBpblxuIgorI34gIkdpdCAyLjAgZnJvbSAnbWF0Y2hpbmcnIHRvICdzaW1wbGUnLiBUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZVxuIgorI34gImFuZCBtYWludGFpbiB0aGUgdHJhZGl0aW9uYWwgYmVoYXZpb3IsIHVzZTpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IG1hdGNoaW5nXG4iCisjfiAiXG4iCisjfiAiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igbm93LCB1c2U6XG4iCisjfiAiXG4iCisjfiAiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcbiIKKyN+ICJcbiIKKyN+ICJXaGVuIHB1c2guZGVmYXVsdCBpcyBzZXQgdG8gJ21hdGNoaW5nJywgZ2l0IHdpbGwgcHVzaCBsb2NhbCBicmFuY2hlc1xuIgorI34gInRvIHRoZSByZW1vdGUgYnJhbmNoZXMgdGhhdCBhbHJlYWR5IGV4aXN0IHdpdGggdGhlIHNhbWUgbmFtZS5cbiIKKyN+ICJcbiIKKyN+ICJTaW5jZSBHaXQgMi4wLCBHaXQgZGVmYXVsdHMgdG8gdGhlIG1vcmUgY29uc2VydmF0aXZlICdzaW1wbGUnXG4iCisjfiAiYmVoYXZpb3IsIHdoaWNoIG9ubHkgcHVzaGVzIHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgY29ycmVzcG9uZGluZ1xuIgorI34gInJlbW90ZSBicmFuY2ggdGhhdCAnZ2l0IHB1bGwnIHVzZXMgdG8gdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC5cbiIKKyN+ICJcbiIKKyN+ICJTZWUgJ2dpdCBoZWxwIGNvbmZpZycgYW5kIHNlYXJjaCBmb3IgJ3B1c2guZGVmYXVsdCcgZm9yIGZ1cnRoZXIgIgorI34gImluZm9ybWF0aW9uLlxuIgorI34gIih0aGUgJ3NpbXBsZScgbW9kZSB3YXMgaW50cm9kdWNlZCBpbiBHaXQgMS43LjExLiBVc2UgdGhlIHNpbWlsYXIgbW9kZVxuIgorI34gIidjdXJyZW50JyBpbnN0ZWFkIG9mICdzaW1wbGUnIGlmIHlvdSBzb21ldGltZXMgdXNlIG9sZGVyIHZlcnNpb25zIG9mIEdpdCkiCisjfiBtc2dzdHIgIiIKKyN+ICJiaeG6v24gcHVzaC5kZWZhdWx0IGNoxrBhIMSRxrDhu6NjIMSR4bq3dDsgZ2nDoSB0cuG7iyBuZ+G6p20gxJHhu4tuaCBj4bunYSBuw7NcbiIKKyN+ICLEkcOjIMSRxrDhu6NjIHRoYXkgxJHhu5VpIHRyb25nIEdpdCAyLjAgdOG7qyDigJxtYXRjaGluZ+KAnSB0aMOgbmgg4oCcc2ltcGxl4oCdLlxuIgorI34gIsSQ4buDIGtow7RuZyBoaeG7g24gdGjhu4sgbmjhuq9jIG5o4bufIG7DoHkgdsOgIGR1eSB0csOsIGPDoWNoIHjhu60gbMO9IGPFqSwgaMOjeSBjaOG6oXkgbOG7h25oOlxuIgorI34gIlxuIgorI34gIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgbWF0Y2hpbmdcbiIKKyN+ICJcbiIKKyN+ICLEkOG7gyBraMO0bmcgaGnhu4NuIHRo4buLIG5o4bqvYyBuaOG7nyBuw6B5IHbDoCDDoXAgZOG7pW5nIGPDoWNoIOG7qW5nIHjhu60gbeG7m2ksIGjDo3kgY2jhuqF5ICIKKyN+ICJs4buHbmg6XG4iCisjfiAiXG4iCisjfiAiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcbiIKKyN+ICJcbiIKKyN+ICJLaGkgcHVzaC5kZWZhdWx0IMSRxrDhu6NjIMSR4bq3dCB0aMOgbmgg4oCcbWF0Y2hpbmfigJ0sIGdpdCBz4bq9IMSR4bqpeSBjw6FjIG5ow6FuaCBu4buZaSBi4buZXG4iCisjfiAibMOqbiBjw6FjIG5ow6FuaCB0csOqbiBtw6F5IGNo4bunLCBjw6FpIG3DoCDEkcOjIHPhurVuIGPDsyB2w6AgY8O5bmcgdMOqbi5cbiIKKyN+ICJcbiIKKyN+ICJUcm9uZyAyLjAsIEdpdCBz4bq9IG3hurdjIMSR4buLbmggZHV5IHRyw6wgY8OhYyDhu6luZyB44butIOKAnHNpbXBsZeKAnSxcbiIKKyN+ICJjw6FpIG7DoHkgY2jhu4kgxJHhuql5IG5o4buvbmcgbmjDoW5oIGhp4buHbiBow6BuaCBsw6puIGPDoWMgbmjDoW5oIHTGsMahbmcg4bupbmdcbiIKKyN+ICJ0csOqbiBtw6F5IGNo4bunIGPDoWkgbcOgIGzhu4duaCDigJxnaXQgcHVsbOKAnSBkw7luZyDEkeG7gyBj4bqtcCBuaOG6rXQgbmjDoW5oIGhp4buHbiB04bqhaS5cbiIKKyN+ICJcbiIKKyN+ICJYZW0g4oCcZ2l0IGhlbHAgY29uZmln4oCdIHbDoCB0w6xtIMSR4bq/biDigJxwdXNoLmRlZmF1bHTigJ0gxJHhu4MgY8OzIHRow6ptIHRow7RuZyB0aW4uXG4iCisjfiAiKGNo4bq/IMSR4buZIOKAnHNpbXBsZeKAnSDEkcaw4bujYyBi4bqvdCDEkeG6p3Ugc+G7rSBk4bulbmcgdOG7qyBHaXQgMS43LjExLiBT4butIGThu6VuZyBjaOG6vyDEkeG7mSB0xrDGoW5nICIKKyN+ICJ04buxXG4iCisjfiAi4oCcY3VycmVudOKAnSB0aGF5IHbDrCDigJxzaW1wbGXigJ0gbuG6v3UgYuG6oW4gdGjhu4luaCB0aG/huqNuZyBwaOG6o2kgc+G7rSBk4bulbmcgYuG6o24gR2l0IGPFqSkiCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcyciCisjfiBtc2dzdHIgIktow7RuZyB0aOG7gyBu4buRaSB0aMOqbSDigJwlc+KAnSIKKworI34gbXNnaWQgInVuYWJsZSB0byBsb29rIHVwIGN1cnJlbnQgdXNlciBpbiB0aGUgcGFzc3dkIGZpbGU6ICVzIgorI34gbXNnc3RyICJraMO0bmcgdMOsbSB0aOG6pXkgbmfGsOG7nWkgZMO5bmcgaGnhu4duIHThuqFpIHRyb25nIHThuq1wIHRpbiBwYXNzd2Q6ICVzIgorCisjfiBtc2dpZCAibm8gc3VjaCB1c2VyIgorI34gbXNnc3RyICJraMO0bmcgY8OzIG5nxrDhu51pIGTDuW5nIG5oxrAgduG6rXkiCisKKyN+IG1zZ2lkICJUZXN0aW5nICIKKyN+IG1zZ3N0ciAixJBhbmcgdGjhu60iCisKKyN+IG1zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBwb2ludCBhdCBhIGNvbW1pdCIKKyN+IG1zZ3N0ciAibmjDoW5oIOKAnCVz4oCdIGtow7RuZyBjaOG7iSDEkeG6v24gbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6BvIGPhuqMiCisKKyN+IG1zZ2lkICJwcmludCBvbmx5IG1lcmdlZCBicmFuY2hlcyIKKyN+IG1zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIGPDoWMgbmjDoW5oIMSRw6MgaMOyYSB0cuG7mW4iCisKKyN+IG1zZ2lkICItLWRpc3NvY2lhdGUgZ2l2ZW4sIGJ1dCB0aGVyZSBpcyBubyAtLXJlZmVyZW5jZSIKKyN+IG1zZ3N0ciAixJHDoyDEkcawYSByYSAtLWRpc3NvY2lhdGUsIG5oxrBuZyDhu58gxJHDonkgbOG6oWkga2jDtG5nIGPDsyAtLXJlZmVyZW5jZSIKKworI34gbXNnaWQgInNob3cgdXNhZ2UiCisjfiBtc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjaCBkw7luZyIKKworI34gbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgbmFtZSAlcyIKKyN+IG1zZ3N0ciAidMOqbiBt4bqrdSBkw6BpIG3hu5l0IGPDoWNoIMSRacOqbiBy4buTICVzIgorCisjfiBtc2dpZCAiaW5zYW5lbHkgbG9uZyBzeW1saW5rICVzIgorI34gbXNnc3RyICJsacOqbiBr4bq/dCBt4buBbSBkw6BpIG3hu5l0IGPDoWNoIMSRacOqbiBy4buTICVzIgorCisjfiBtc2dpZCAiaW5zYW5lbHkgbG9uZyB0ZW1wbGF0ZSBwYXRoICVzIgorI34gbXNnc3RyICLEkcaw4budbmcgZOG6q24gbeG6q3Ug4oCcJXPigJ0gZMOgaSBt4buZdCBjw6FjaCDEkWnDqm4gcuG7kyIKKworI34gbXNnaWQgInVuc3VwcG9ydGVkIHNvcnQgc3BlY2lmaWNhdGlvbiAnJXMnIgorI34gbXNnc3RyICJraMO0bmcgaOG7lyB0cuG7oyDEkeG6t2MgdOG6oyBz4bqvcCB44bq/cCDigJwlc+KAnSIKKworI34gbXNnaWQgInVuc3VwcG9ydGVkIHNvcnQgc3BlY2lmaWNhdGlvbiAnJXMnIGluIHZhcmlhYmxlICclcyciCisjfiBtc2dzdHIgImtow7RuZyBo4buXIHRy4bujIMSR4bq3YyB04bqjIHPhuq9wIHjhur9wIOKAnCVz4oCdIHRyb25nIGJp4bq/biDigJwlc+KAnSIKKworI34gbXNnaWQgInN3aXRjaCAncG9pbnRzLWF0JyByZXF1aXJlcyBhbiBvYmplY3QiCisjfiBtc2dzdHIgImNodXnhu4NuIMSR4bq/biDigJxwb2ludHMtYXTigJ0gecOqdSBj4bqnbiBt4buZdCDEkeG7kWkgdMaw4bujbmciCisKKyN+IG1zZ2lkICItLXNvcnQgYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCisjfiBtc2dzdHIgIi0tc29ydCB2w6AgLW4geHVuZyBraOG6r2MgbmhhdSIKKworI34gbXNnaWQgIkdpdGRpciAnJGEnIGlzIHBhcnQgb2YgdGhlIHN1Ym1vZHVsZSBwYXRoICckYicgb3IgdmljZSB2ZXJzYSIKKyN+IG1zZ3N0ciAiIgorI34gIkdpdGRpciDigJwkYeKAnSBsw6AgYuG7mSBwaOG6rW4gY+G7p2EgxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwkYuKAnSBob+G6t2MgXCJ2aWNlIHZlcnNhXCIiCisKKyN+IG1zZ2lkICJmYWxzZXx0cnVlfHByZXNlcnZlIgorI34gbXNnc3RyICJmYWxzZXx0cnVlfHByZXNlcnZlIgorCisjfiBtc2dpZCAiQlVHOiByZW9wZW4gYSBsb2NrZmlsZSB0aGF0IGlzIHN0aWxsIG9wZW4iCisjfiBtc2dzdHIgIkzhu5ZJOiBt4bufIGzhuqFpIHThuq1wIHRpbiBraMOzYSBtw6AgbsOzIGzhuqFpIMSRYW5nIMSRxrDhu6NjIG3hu58iCisKKyN+IG1zZ2lkICJCVUc6IHJlb3BlbiBhIGxvY2tmaWxlIHRoYXQgaGFzIGJlZW4gY29tbWl0dGVkIgorI34gbXNnc3RyICJM4buWSTogbeG7nyBs4bqhaSB04bqtcCB0aW4ga2jDs2EgbcOgIG7DsyDEkcOjIMSRxrDhu6NjIGNodXnhu4NuIGdpYW8iCisKKyN+IG1zZ2lkICJvcHRpb24gJXMgZG9lcyBub3QgYWNjZXB0IG5lZ2F0aXZlIGZvcm0iCisjfiBtc2dzdHIgInTDuXkgY2jhu41uICVzIGtow7RuZyBjaOG6pXAgbmjhuq1uIGThuqFuZyB0aOG7qWMgw6JtIgorCisjfiBtc2dpZCAiLWIgYW5kIC1CIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCisjfiBtc2dzdHIgIi1iIHbDoCAtQiBsb+G6oWkgdOG7qyBs4bqrbiBuaGF1LiIKKworI34gbXNnaWQgIlBhdGNoIGZvcm1hdCAkcGF0Y2hfZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIgorI34gbXNnc3RyICLEkOG7i25oIGThuqFuZyBtaeG6v25nIHbDoSAkcGF0Y2hfZm9ybWF0IGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujLiIKKworI34gbXNnaWQgIlBsZWFzZSBtYWtlIHVwIHlvdXIgbWluZC4gLS1za2lwIG9yIC0tYWJvcnQ/IgorI34gbXNnc3RyICJYaW4gaMOjeSByw7UgcsOgbmcuIC0tc2tpcCBoYXkgLS1hYm9ydD8iCisKKyN+IG1zZ2lkICIiCisjfiAiUGF0Y2ggaXMgZW1wdHkuICBXYXMgaXQgc3BsaXQgd3Jvbmc/XG4iCisjfiAiSWYgeW91IHdvdWxkIHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIGluc3RlYWQgcnVuIFwiJGNtZGxpbmUgLS1za2lwXCIuXG4iCisjfiAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nIHJ1biBcIiRjbWRsaW5lIC0tYWJvcnRcIi4iCisjfiBtc2dzdHIgIiIKKyN+ICJNaeG6v25nIHbDoSB0cuG7kW5nIHLhu5duZy4gIE7DsyDEkcOjIGLhu4sgY2hpYSBj4bqvdCBzYWkgcGjhuqNpIGtow7RuZz9cbiIKKyN+ICJO4bq/dSBi4bqhbiB0aMOtY2ggYuG7jyBxdWEgbWnhur9uZyB2w6EgbsOgeSwgaMOjeSBjaOG6oXkgbOG7h25oIHNhdSDEkeG7gyB0aGF5IHRo4bq/ICIKKyN+ICJcIiRjbWRsaW5lIC0tc2tpcFwiLlxuIgorI34gIsSQ4buDIHBo4bulYyBo4buTaSBs4bqhaSBuaMOhbmggbmd1ecOqbiB0aOG7p3kgdsOgIGThu6tuZyB2w6EgbOG6oWkgaMOjeSBjaOG6oXkgbOG7h25oIFwiJGNtZGxpbmUgIgorI34gIi0tYWJvcnRcIi4iCisKKyN+IG1zZ2lkICJQYXRjaCBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZS1tYWlsIGFkZHJlc3MuIgorI34gbXNnc3RyICJNaeG6v25nIHbDoSBraMO0bmcgY8OzIMSR4buLYSBjaOG7iSB0aMawIMSRaeG7h24gdOG7rSBo4bujcCBs4buHLiIKKworI34gbXNnaWQgIkFwcGx5aW5nOiAkRklSU1RMSU5FIgorI34gbXNnc3RyICLEkGFuZyDDoXAgZOG7pW5nIChtaeG6v25nIHbDoSk6ICRGSVJTVExJTkUiCisKKyN+IG1zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJG1zZ251bSAkRklSU1RMSU5FIgorI34gbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdsOhIHThuqFpICRtc2dudW0gJEZJUlNUTElORSIKKworI34gbXNnaWQgIiIKKyN+ICJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLlxuIgorI34gIlBsZWFzZSwgZml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyN+ICJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIgorI34gbXNnc3RyICIiCisjfiAiUHVsbCBsw6Aga2jDtG5nIHRo4buDIMSRxrDhu6NjIGLhu59pIHbDrCBi4bqhbiBjw7Mgbmjhu69uZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4uXG4iCisjfiAiWGluIGjDo3kgc+G7rWEgY2jhu69hIGNow7puZyB0csaw4bubYywgdsOgIHNhdSDEkcOzIHPhu60gZOG7pW5nIGzhu4duaCDigJxnaXQgYWRkL3JtIDx04bqtcC0iCisjfiAidGluPuKAnVxuIgorI34gIsSR4buDIHBow6ogY2h14bqpbiB2aeG7h2MgxJHDoW5oIGThuqV1IMSRw6J5IGPhuqduIMSRxrDhu6NjIGdp4bqjaSBxdXnhur90IHbDoCB04bqhbyBt4buZdCBs4bqnbiBjaHV54buDbiAiCisjfiAiZ2lhby4iCisKKyN+IG1zZ2lkICJubyBicmFuY2ggc3BlY2lmaWVkIgorI34gbXNnc3RyICJjaMawYSBjaOG7iSByYSB0w6puIGPhu6dhIG5ow6FuaCIKKworI34gbXNnaWQgInBydW5lIC5naXQvd29ya3RyZWVzIgorI34gbXNnc3RyICJ4w6luIC5naXQvd29ya3RyZWVzIgorCisjfiBtc2dpZCAiVGhlIG1vc3QgY29tbW9ubHkgdXNlZCBnaXQgY29tbWFuZHMgYXJlOiIKKyN+IG1zZ3N0ciAiTmjhu69uZyBs4buHbmggZ2l0IGhheSDEkcaw4bujYyBkw7luZyBuaOG6pXQgbMOgOiIKKworI34gbXNnaWQgIk5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorI34gbXNnc3RyICJLaMO0bmcgY8OzIG5ow6FuaCBuw6BvIG5oxrAgdGjhur86IOKAnCVz4oCdIgorCisjfiBtc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBnaXQgbGluayAlcyIKKyN+IG1zZ3N0ciAiS2jDtG5nIHRo4buDIHThuqFvIGxpw6puIGvhur90IGdpdCDigJwlc+KAnSIKKworI34gbXNnaWQgIkludmFsaWQgZ2MucHJ1bmVleHBpcmU6ICclcyciCisjfiBtc2dzdHIgImdjLnBydW5lZXhwaXJlIGtow7RuZyBo4bujcCBs4buHOiDigJwlc+KAnSIKKworI34gbXNnaWQgIihkZXRhY2hlZCBmcm9tICVzKSIKKyN+IG1zZ3N0ciAiKMSRxrDhu6NjIHTDoWNoIHLhu51pIHThu6sgJXMpIgorCisjfiBtc2dpZCAiTm8gZXhpc3RpbmcgYXV0aG9yIGZvdW5kIHdpdGggJyVzJyIKKyN+IG1zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IHTDoWMgZ2nhuqMgY8OzIHPhurVuIHbhu5tpIOKAnCVz4oCdIgorCisjfiBtc2dpZCAic2VhcmNoIGFsc28gaW4gaWdub3JlZCBmaWxlcyIKKyN+IG1zZ3N0ciAidMOsbSBj4bqjIHRyb25nIGPDoWMgdOG6rXAgdGluIMSRw6MgYuG7iyBs4budIMSRaSIKKworI34gbXNnaWQgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfDxicmFuY2g+KSIKKyN+IG1zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8dMOqbj4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxuaMOhbmg+KSIKKworI34gbXNnaWQgIm5vIGZpbGVzIGFkZGVkIgorI34gbXNnc3RyICJjaMawYSBjw7MgdOG6rXAgdGluIG7DoG8gxJHGsOG7o2MgdGjDqm0gdsOgbyIKKworI34gbXNnaWQgInNsb3QiCisjfiBtc2dzdHIgImtoZSIKKworI34gbXNnaWQgImNoZWNrIgorI34gbXNnc3RyICJraeG7g20gdHJhIgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIGxvY2sgcmVmIGZvciB1cGRhdGUiCisjfiBtc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBraMOzYSB0aGFtIGNoaeG6v3UgxJHhu4MgY+G6rXAgbmjhuq10IgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIHdyaXRlIHJlZiIKKyN+IG1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGdoaSB0aGFtIGNoaeG6v3UiCisKKyN+IG1zZ2lkICJjb21taXQgaGFzIGVtcHR5IG1lc3NhZ2UiCisjfiBtc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8gY8OzIGdoaSBjaMO6IHRy4buRbmcgcuG7l25nIgorCisjfiBtc2dpZCAiY2Fubm90IGxvY2sgSEVBRCByZWYiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBraMOzYSBIRUFEIHJlZiAodGhhbSBjaGnhur91KSIKKworI34gbXNnaWQgImNhbm5vdCB1cGRhdGUgSEVBRCByZWYiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgcmVmICh0aGFtIGNoaeG6v3UpIEhFQUQiCisKKyN+IG1zZ2lkICJGYWlsZWQgdG8gY2hkaXI6ICVzIgorI34gbXNnc3RyICJH4bq3cCBs4buXaSB24bubaSBs4buHbmggY2hkaXI6ICVzIgorCisjfiBtc2dpZCAiJXM6IGNhbm5vdCBsb2NrIHRoZSByZWYiCisjfiBtc2dzdHIgIiVzOiBraMO0bmcgdGjhu4Mga2jDs2EgcmVmICh0aGFtIGNoaeG6v3UpIgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIGxvY2sgSEVBRCBkdXJpbmcgZmFzdF9mb3J3YXJkX3RvIgorI34gbXNnc3RyICJH4bq3cCBs4buXaSBraGkga2jDs2EgSEVBRCB0cm9uZyBxdcOhIHRyw6xuaCBmYXN0X2ZvcndhcmRfdG8iCisKKyN+IG1zZ2lkICJrZXkgaWQiCisjfiBtc2dzdHIgImlkIGPhu6dhIGtow7NhIgorCisjfiBtc2dpZCAiVHJhY2tpbmcgbm90IHNldCB1cDogbmFtZSB0b28gbG9uZzogJXMiCisjfiBtc2dzdHIgIlZp4buHYyB0aGVvIGTDtWkgY2jGsGEgxJHGsOG7o2MgY8OgaSDEkeG6t3Q6IHTDqm4gcXXDoSBkw6BpOiAlcyIKKworI34gbXNnaWQgImJ1ZyIKKyN+IG1zZ3N0ciAibOG7l2kiCisKKyN+IG1zZ2lkICIsIGJlaGluZCAiCisjfiBtc2dzdHIgIiwgxJHhurFuZyBzYXUgIgorCisjfiBtc2dpZCAiY291bGQgbm90IGZpbmQgLmdpdG1vZHVsZXMgaW4gaW5kZXgiCisjfiBtc2dzdHIgImtow7RuZyB0w6xtIHRo4bqleSAuZ2l0bW9kdWxlcyB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyN+IG1zZ2lkICJyZWFkaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorI34gbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHhu41jIGPhuq1wIG5o4bqtdCAuZ2l0bW9kdWxlcyIKKworI34gbXNnaWQgInVuYWJsZSB0byBzdGF0IHVwZGF0ZWQgLmdpdG1vZHVsZXMiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aOG7kW5nIGvDqiAuZ2l0bW9kdWxlcyDEkcOjIGPhuq1wIG5o4bqtdCIKKworI34gbXNnaWQgInVuYWJsZSB0byByZW1vdmUgLmdpdG1vZHVsZXMgZnJvbSBpbmRleCIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGfhu6EgYuG7jyAuZ2l0bW9kdWxlcyB04burIG3hu6VjIGzhu6VjIgorCisjfiBtc2dpZCAiYWRkaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorI34gbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdGjDqm0gLmdpdG1vZHVsZXMgxJHDoyBj4bqtcCBuaOG6rXQiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlIGJlaGF2aW9yIG9mICdnaXQgYWRkICVzIChvciAlcyknIHdpdGggbm8gcGF0aCBhcmd1bWVudCBmcm9tIGFcbiIKKyN+ICJzdWJkaXJlY3Rvcnkgb2YgdGhlIHRyZWUgd2lsbCBjaGFuZ2UgaW4gR2l0IDIuMCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkICIKKyN+ICJhbnltb3JlLlxuIgorI34gIlRvIGFkZCBjb250ZW50IGZvciB0aGUgd2hvbGUgdHJlZSwgcnVuOlxuIgorI34gIlxuIgorI34gIiAgZ2l0IGFkZCAlcyA6L1xuIgorI34gIiAgKG9yIGdpdCBhZGQgJXMgOi8pXG4iCisjfiAiXG4iCisjfiAiVG8gcmVzdHJpY3QgdGhlIGNvbW1hbmQgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBydW46XG4iCisjfiAiXG4iCisjfiAiICBnaXQgYWRkICVzIC5cbiIKKyN+ICIgIChvciBnaXQgYWRkICVzIC4pXG4iCisjfiAiXG4iCisjfiAiV2l0aCB0aGUgY3VycmVudCBHaXQgdmVyc2lvbiwgdGhlIGNvbW1hbmQgaXMgcmVzdHJpY3RlZCB0byB0aGUgY3VycmVudCAiCisjfiAiZGlyZWN0b3J5LlxuIgorI34gbXNnc3RyICIiCisjfiAiQ8OhY2gg4bupbmcgeOG7rSBj4bunYSBs4buHbmgg4oCcZ2l0IGFkZCAlcyAoaGF5ICVzKeKAnSBraGkga2jDtG5nIGPDsyB0aGFtIHPhu5EgxJHGsOG7nW5nIGThuqtuICIKKyN+ICJ04burXG4iCisjfiAidGjGsC1t4bulYyBjb24gY+G7p2EgY8OieSBz4bq9IHRoYXkgxJHhu5VpIGvhu4MgdOG7qyBHaXQgMi4wIHbDoCBraMO0bmcgdGjhu4Mgc+G7rSBk4bulbmcgbmjGsCAiCisjfiAidGjhur8gbuG7r2EuXG4iCisjfiAixJDhu4MgdGjDqm0gbuG7mWkgZHVuZyBjaG8gdG/DoG4gYuG7mSBjw6J5LCBjaOG6oXk6XG4iCisjfiAiXG4iCisjfiAiICBnaXQgYWRkICVzIDovXG4iCisjfiAiICAoaG/hurdjIGdpdCBhZGQgJXMgOi8pXG4iCisjfiAiXG4iCisjfiAixJDhu4MgaOG6oW4gY2jhur8gbOG7h25oIGNobyB0aMawLW3hu6VjIGhp4buHbiB04bqhaSwgY2jhuqF5OlxuIgorI34gIlxuIgorI34gIiAgZ2l0IGFkZCAlcyAuXG4iCisjfiAiICAoaG/hurdjIGdpdCBhZGQgJXMgLilcbiIKKyN+ICJcbiIKKyN+ICJW4bubaSBwaGnDqm4gYuG6o24gaGnhu4duIHThuqFpIGPhu6dhIEdpdCwgbOG7h25oIGLhu4sgaOG6oW4gY2jhur8gY2hvIHRoxrAtbeG7pWMgaGnhu4duIHThuqFpLlxuIgorCisjfiBtc2dpZCAiIgorI34gIllvdSByYW4gJ2dpdCBhZGQnIHdpdGggbmVpdGhlciAnLUEgKC0tYWxsKScgb3IgJy0taWdub3JlLXJlbW92YWwnLFxuIgorI34gIndob3NlIGJlaGF2aW91ciB3aWxsIGNoYW5nZSBpbiBHaXQgMi4wIHdpdGggcmVzcGVjdCB0byBwYXRocyB5b3UgIgorI34gInJlbW92ZWQuXG4iCisjfiAiUGF0aHMgbGlrZSAnJXMnIHRoYXQgYXJlXG4iCisjfiAicmVtb3ZlZCBmcm9tIHlvdXIgd29ya2luZyB0cmVlIGFyZSBpZ25vcmVkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIEdpdC5cbiIKKyN+ICJcbiIKKyN+ICIqICdnaXQgYWRkIC0taWdub3JlLXJlbW92YWwgPHBhdGhzcGVjPicsIHdoaWNoIGlzIHRoZSBjdXJyZW50IGRlZmF1bHQsXG4iCisjfiAiICBpZ25vcmVzIHBhdGhzIHlvdSByZW1vdmVkIGZyb20geW91ciB3b3JraW5nIHRyZWUuXG4iCisjfiAiXG4iCisjfiAiKiAnZ2l0IGFkZCAtLWFsbCA8cGF0aHNwZWM+JyB3aWxsIGxldCB5b3UgYWxzbyByZWNvcmQgdGhlIHJlbW92YWxzLlxuIgorI34gIlxuIgorI34gIlJ1biAnZ2l0IHN0YXR1cycgdG8gY2hlY2sgdGhlIHBhdGhzIHlvdSByZW1vdmVkIGZyb20geW91ciB3b3JraW5nIHRyZWUuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJC4bqhbiBjaOG6oXkg4oCcZ2l0IGFkZOKAnSBtw6Aga2jDtG5nIGPDsyDigJwtQSAoLS1hbGwp4oCdIGPFqW5nIGtow7RuZyDigJwtLWlnbm9yZS0iCisjfiAicmVtb3ZhbOKAnSxcbiIKKyN+ICJjw6FjaCDhu6luZyB44butIGPhu6dhIG7DsyBz4bq9IHRoYXkgxJHhu5VpIGvhu4MgdOG7qyBHaXQgMi4wOiBuw7MgcXVhbiB0w6JtIMSR4bq/biBjw6FjIMSRxrDhu51uZyAiCisjfiAiZOG6q24gbcOgXG4iCisjfiAiYuG6oW4gxJHDoyBn4buhIGLhu48uIEPDoWMgxJHGsOG7nW5nIGThuqtuIG5oxrAgbMOgIOKAnCVz4oCdIGPDoWkgbcOgXG4iCisjfiAiYuG7iyBn4buhIGLhu48gdOG7qyBjw6J5IGzDoG0gdmnhu4djIGPhu6dhIGLhuqFuIHRow6wgYuG7iyBi4buPIHF1YSB24bubaSBwaGnDqm4gYuG6o24gbsOgeSBj4bunYSAiCisjfiAiR2l0LlxuIgorI34gIlxuIgorI34gIiog4oCcZ2l0IGFkZCAtLWlnbm9yZS1yZW1vdmFsIDxwYXRoc3BlYz7igJ0sIGPDoWkgaGnhu4duIHThuqFpIGzDoCBt4bq3YyDEkeG7i25oLFxuIgorI34gIiAgYuG7jyBxdWEgY8OhYyDEkcaw4budbmcgZOG6q24gYuG6oW4gxJHDoyBn4buhIGLhu48gdOG7qyBjw6J5IGzDoG0gdmnhu4djIGPhu6dhIGLhuqFuLlxuIgorI34gIlxuIgorI34gIiog4oCcZ2l0IGFkZCAtLWFsbCA8cGF0aHNwZWM+4oCdIHPhur0gxJHhu5NuZyB0aOG7nWkgZ2nDunAgYuG6oW4gZ2hpIGzhuqFpIHZp4buHYyBk4budaSDEkWkuXG4iCisjfiAiXG4iCisjfiAiQ2jhuqF5IOKAnGdpdCBzdGF0dXPigJ0gxJHhu4Mga2nhu4NtIHRyYSBjw6FjIMSRxrDhu51uZyBk4bqrbiBi4bqhbiDEkcOjIGfhu6EgYuG7jyB04burIGPDonkgbMOgbSB2aeG7h2MgIgorI34gImPhu6dhIGLhuqFuLlxuIgorCisjfiBtc2dpZCAiIgorI34gIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS4gWW91IG1heSBhbHNvXG4iCisjfiAicnVuIFwiZ2l0IGdjXCIgbWFudWFsbHkuIFNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJU4buxIMSR4buZbmcgxJHDs25nIGfDs2kga2hvIGNo4bupYSDEkeG7gyB04buRaSDGsHUgaMOzYSBoaeG7h3Ugc3XhuqV0IGzDoG0gdmnhu4djLlxuIgorI34gImNo4bqheSBs4buHbmggXCJnaXQgZ2NcIiBt4buZdCBjw6FjaCB0aOG7pyBjw7RuZy4gSMOjeSB4ZW0gXCJnaXQgaGVscCBnY1wiIMSR4buDIGJp4bq/dCAiCisjfiAidGjDqm0gY2hpIHRp4bq/dC5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisjfiAiY291bnRlcnBhcnQuIElmIHlvdSBkaWQgbm90IGludGVuZCB0byBwdXNoIHRoYXQgYnJhbmNoLCB5b3UgbWF5IHdhbnQgdG9cbiIKKyN+ICJzcGVjaWZ5IGJyYW5jaGVzIHRvIHB1c2ggb3Igc2V0IHRoZSAncHVzaC5kZWZhdWx0JyBjb25maWd1cmF0aW9uICIKKyN+ICJ2YXJpYWJsZVxuIgorI34gInRvICdzaW1wbGUnLCAnY3VycmVudCcgb3IgJ3Vwc3RyZWFtJyB0byBwdXNoIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoLiIKKyN+IG1zZ3N0ciAiIgorI34gIlZp4buHYyBj4bqtcCBuaOG6rXQgYuG7iyB04burIGNo4buRaSBi4bufaSB2w6wgxJHhuqd1IG3DunQgY+G7p2EgbmjDoW5oIMSRxrDhu6NjIHB1c2ggbuG6sW0gxJHhurFuZyBzYXUgIgorI34gImLhu5lcbiIKKyN+ICJwaOG6rW4gdMawxqFuZyDhu6luZyBj4bunYSBtw6F5IGNo4bunLiBO4bq/dSBi4bqhbiBraMO0bmcgY8OzIMO9IMSR4buLbmggcHVzaCBuaMOhbmggxJHDsywgYuG6oW4gY8OzICIKKyN+ICJs4bq9IG114buRblxuIgorI34gImNo4buJIMSR4buLbmggY8OhYyBuaMOhbmggxJHhu4MgcHVzaCBob+G6t3QgbMOgIMSR4bq3dCBu4buZaSBkdW5nIGNobyBiaeG6v24gY+G6pXUgaMOsbmgg4oCccHVzaC4iCisjfiAiZGVmYXVsdOKAnVxuIgorI34gInRow6BuaCDigJxzaW1wbGXigJ0sIOKAnGN1cnJlbnTigJ0gaG/hurdjIOKAnHVwc3RyZWFt4oCdIMSR4buDIGNo4buJIHB1c2ggbmjDoW5oIGhp4buHbiBow6BuaCBtw6AgIgorI34gInRow7RpLiIKKworI34gbXNnaWQgImNvcGllZDogICAgICVzIC0+ICVzIgorI34gbXNnc3RyICLEkcOjIHNhbyBjaMOpcDogICAlcyAtPiAlcyIKKworI34gbXNnaWQgImRlbGV0ZWQ6ICAgICVzIgorI34gbXNnc3RyICLEkcOjIHjDs2E6ICAgICAgICAlcyIKKworI34gbXNnaWQgIm1vZGlmaWVkOiAgICVzIgorI34gbXNnc3RyICLEkcOjIHPhu61hIMSR4buVaTogICAgJXMiCisKKyN+IG1zZ2lkICJyZW5hbWVkOiAgICAlcyAtPiAlcyIKKyN+IG1zZ3N0ciAixJHDoyDEkeG7lWkgdMOqbjogICAgJXMgLT4gJXMiCisKKyN+IG1zZ2lkICJ1bm1lcmdlZDogICAlcyIKKyN+IG1zZ3N0ciAiY2jGsGEgaMOyYSB0cuG7mW46ICVzIgorCisjfiBtc2dpZCAiaW5wdXQgcGF0aHMgYXJlIHRlcm1pbmF0ZWQgYnkgYSBudWxsIGNoYXJhY3RlciIKKyN+IG1zZ3N0ciAiY8OhYyDEkcaw4budbmcgZOG6q24gxJHGsOG7o2MgIG5nxINuIGPDoWNoIGLhu59pIGvDvSB04buxIG51bGwiCisKKyN+IG1zZ2lkICIiCisjfiAiQWJvcnRpbmcuIENvbnNpZGVyIHVzaW5nIGVpdGhlciB0aGUgLS1mb3JjZSBvciAtLWluY2x1ZGUtdW50cmFja2VkIG9wdGlvbi4iCisjfiBtc2dzdHIgIiIKKyN+ICJCw6NpIGLhu48uIEPDom4gbmjhuq9jIGTDuW5nIG3hu5l0IHRyb25nIGhhaSB0w7l5IGNo4buNbiAtLWZvcmNlIHbDoCAtLWluY2x1ZGUtIgorI34gInVudHJhY2tlZC4iCisKKyN+IG1zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLXJlc29sdmVkXCIpIgorI34gbXNnc3RyICIgIChz4butYSBjw6FjIHh1bmcgxJHhu5l0IHbDoCBzYXUgxJHDsyBjaOG6oXkgbOG7h25oIFwiZ2l0IGFtIC0tcmVzb2x2ZWRcIikiCisKKyN+IG1zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY29tbWl0XCIpIgorI34gbXNnc3RyICIgIChraGkgdOG6pXQgY+G6oyBjw6FjIHh1bmcgxJHhu5l0IMSRw6Mgc+G7rWEgeG9uZzogY2jhuqF5IGzhu4duaCBcImdpdCBjb21taXRcIikiCisKKyN+IG1zZ2lkICJtb3JlIHRoYW4gJWQgdHJlZXMgZ2l2ZW46ICclcyciCisjfiBtc2dzdHIgIsSRw6MgY2jhu4kgcmEgbmhp4buBdSBoxqFuICVkIGPDonkgKHRyZWUpOiDigJwlc+KAnSIKKworI34gbXNnaWQgIiIKKyN+ICInJXMnIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXhcbiIKKyN+ICIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorI34gbXNnc3RyICIiCisjfiAi4oCcJXPigJ0gY8OzIGPDoWMgdGhheSDEkeG7lWkgxJHGsOG7o2MgbMawdSB0cuG6oW5nIHRow6FpIHRyb25nIGLhuqNuZyBt4bulYyBs4bulY1xuIgorI34gIihkw7luZyB0w7l5IGNo4buNbiAtLWNhY2hlZCDEkeG7gyBnaeG7ryB04bqtcCB0aW4sIGhv4bq3YyAtZiDEkeG7gyDDqXAgYnXhu5ljIGfhu6EgYuG7jykiCisKKyN+IG1zZ2lkICJzaG93IGNvbW1pdHMgd2hlcmUgbm8gcGFyZW50IGNvbWVzIGJlZm9yZSBpdHMgY2hpbGRyZW4iCisjfiBtc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gbsahaSBtw6AgY2hhIG3hurkgxJHhur9uIHRyxrDhu5tjIGNvbiBj4bunYSBuw7MiCisKKyN+IG1zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSIKKyN+IG1zZ3N0ciAiaGnhu4NuIHRo4buLIHRoYW0gY2hp4bq/dSBj4bunYSBIRUFEIgorCisjfiBtc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckcHJlZml4JHNtX3BhdGgnIgorI34gbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgduG7gSB0cm9uZyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRwcmVmaXgkc21fcGF0aOKAnSIKKworI34gbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRwcmVmaXgkc21fcGF0aCciCisjfiBtc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG7hyBxdXkgdsOgbyB0cm9uZyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRwcmVmaXgkc21fcGF0aOKAnSIKKworI34gbXNnaWQgIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICAnc3RhdHVzIC11bm8nIgorI34gbXNnc3RyICJD4bqnbiAlLjJmIGdpw6J5IMSR4buDIMSR4bq/bSBjw6FjIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkuICDigJxzdGF0dXMgLXVub+KAnSIKKworI34gbXNnaWQgIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGQiCisjfiBtc2dzdHIgIiIKKyN+ICJjw7MgdGjhu4MgbMOgbSBuw7MgbmhhbmggbMOqbiwgbmjGsG5nIGLhuqFuIHBo4bqjaSBj4bqpbiB0cuG7jW5nIMSR4burbmcgcXXDqm4gdGjDqm0gbsOzIHbDoG8iCisKKyN+IG1zZ2lkICJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorI34gbXNnc3RyICJ04bqtcCB0aW4gbeG7m2kgY+G7p2EgY2jDrW5oIGLhuqFuICh4ZW0g4oCcZ2l0IGhlbHAgc3RhdHVz4oCdLi4iCisKKyN+IG1zZ2lkICJnaXQgc2hvcnRsb2cgWy1uXSBbLXNdIFstZV0gWy13XSBbcmV2LW9wdHNdIFstLV0gWzxjb21taXQtaWQ+Li4uIF0iCisjfiBtc2dzdHIgImdpdCBzaG9ydGxvZyBbLW5dIFstc10gWy1lXSBbLXddIFtyZXYtb3B0c10gWy0tXSBbPGNvbW1pdC1pZD7igKYgXSIKKworI34gbXNnaWQgInVzZSBhbnkgcmVmIGluIC5naXQvcmVmcyIKKyN+IG1zZ3N0ciAic+G7rSBk4bulbmcgYuG6pXQga+G7syByZWYgbsOgbyB0cm9uZyAuZ2l0L3JlZnMiCisKKyN+IG1zZ2lkICJ1c2UgYW55IHRhZyBpbiAuZ2l0L3JlZnMvdGFncyIKKyN+IG1zZ3N0ciAic+G7rSBk4bulbmcgYuG6pXQga+G7syB0aOG6uyBuw6BvIHRyb25nIC5naXQvcmVmcy90YWdzIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKKyN+IG1zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSRw7NuZyDEkcaw4budbmcg4buRbmcgY2hvIGzhu4duaCDigJxzaG934oCdIGNobyDEkeG7kWkgdMaw4bujbmcg4oCcJXPigJ0iCisKKyN+IG1zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFEIgorI34gbXNnc3RyICJC4bqhbiBraMO0bmcgY8OzIEhFQUQgbsOgbyBo4bujcCBs4buHIgorCisjfiBtc2dpZCAib29wcyIKKyN+IG1zZ3N0ciAiw7RpPyIKKworI34gbXNnaWQgIk5vdCByZW1vdmluZyAlc1xuIgorI34gbXNnc3RyICJLaMO0bmcgeMOzYSAlc1xuIgorCisjfiBtc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLWQgfCA8YnJhbmNoPl0pIgorI34gbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDx0w6puPiAoLWEgfCAtZCB8IDxuaMOhbmg+XSkiCisKKyN+IG1zZ2lkICIgJWQgZmlsZSBjaGFuZ2VkIgorI34gbXNnaWRfcGx1cmFsICIgJWQgZmlsZXMgY2hhbmdlZCIKKyN+IG1zZ3N0clswXSAiICVkIHThuq1wIHRpbiB0aGF5IMSR4buVaSIKKworI34gbXNnaWQgIiwgJWQgaW5zZXJ0aW9uKCspIgorI34gbXNnaWRfcGx1cmFsICIsICVkIGluc2VydGlvbnMoKykiCisjfiBtc2dzdHJbMF0gIiwgJWQgdGjDqm0oKykiCisKKyN+IG1zZ2lkICIsICVkIGRlbGV0aW9uKC0pIgorI34gbXNnaWRfcGx1cmFsICIsICVkIGRlbGV0aW9ucygtKSIKKyN+IG1zZ3N0clswXSAiLCAlZCB4w7NhKC0pIgorCisjfiBtc2dpZCAiICh1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spIgorI34gbXNnc3RyICIgKGTDuW5nIFwiZ2l0IGFkZFwiIMSR4buDIHRoZW8gZMO1aSBk4bqldSB24bq/dCkiCisKKyN+IG1zZ2lkICItLWRldGFjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIC1iLy1CLy0tb3JwaGFuIgorI34gbXNnc3RyICItLWRldGFjaCBraMO0bmcgdGjhu4MgxJHGsOG7o2Mgc+G7rSBk4bulbmcgduG7m2kgdMO5eSBjaOG7jW4gLWIvLUIvLS1vcnBoYW4iCisKKyN+IG1zZ2lkICItLWRldGFjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIC10IgorI34gbXNnc3RyICItLWRldGFjaCBraMO0bmcgdGjhu4MgxJHGsOG7o2Mgc+G7rSBk4bulbmcgduG7m2kgdMO5eSBjaOG7jW4gLXQiCisKKyN+IG1zZ2lkICItLW9ycGhhbiBhbmQgLWJ8LUIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKKyN+IG1zZ3N0ciAiVMO5eSBjaOG7jW4gLS1vcnBoYW4gdsOgIC1ifC1CIGxv4bqhaSB04burIGzhuqtuIG5oYXUiCisKKyN+IG1zZ2lkICItLW9ycGhhbiBjYW5ub3QgYmUgdXNlZCB3aXRoIC10IgorI34gbXNnc3RyICItLW9ycGhhbiBraMO0bmcgdGjhu4MgxJHGsOG7o2Mgc+G7rSBk4bulbmcgduG7m2kgdMO5eSBjaOG7jW4gLXQiCisKKyN+IG1zZ2lkICJnaXQgY2hlY2tvdXQ6IC1mIGFuZCAtbSBhcmUgaW5jb21wYXRpYmxlIgorI34gbXNnc3RyICJnaXQgY2hlY2tvdXQ6IGhhaSB0w7l5IGNo4buNbiAtZiB2w6AgLW0geHVuZyBraOG6r2MgbmhhdSIKKworI34gbXNnaWQgIiIKKyN+ICJnaXQgY2hlY2tvdXQ6IHVwZGF0aW5nIHBhdGhzIGlzIGluY29tcGF0aWJsZSB3aXRoIHN3aXRjaGluZyBicmFuY2hlcy4iCisjfiBtc2dzdHIgIiIKKyN+ICJnaXQgY2hlY2tvdXQ6IHZp4buHYyBj4bqtcCBuaOG6rXQgY8OhYyDEkcaw4budbmcgZOG6q24gbMOgIHh1bmcga2jhuq9jIHbhu5tpIHZp4buHYyBjaHV54buDbiAiCisjfiAixJHhu5VpIGPDoWMgbmjDoW5oLiIKKworI34gbXNnaWQgImRpZmYgc2V0dXAgZmFpbGVkIgorI34gbXNnc3RyICJjw6BpIMSR4bq3dCBkaWZmIGfhurdwIGzhu5dpIgorCisjfiBtc2dpZCAibWVyZ2UtcmVjdXJzaXZlOiBkaXNrIGZ1bGw/IgorI34gbXNnc3RyICJtZXJnZS1yZWN1cnNpdmU6IMSRxKlhIGLhu4sgxJHhuqd5PyIKKworI34gbXNnaWQgImRpZmZfc2V0dXBfZG9uZSBmYWlsZWQiCisjfiBtc2dzdHIgImRpZmZfc2V0dXBfZG9uZSBn4bq3cCBs4buXaSIKKworI34gbXNnaWQgIiVzOiBoYXMgYmVlbiBkZWxldGVkL3JlbmFtZWQiCisjfiBtc2dzdHIgIiVzOiDEkcOjIMSRxrDhu6NjIHjDs2EvdGhheS10w6puIgorCisjfiBtc2dpZCAiJyVzJzogbm90IGEgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkuIgorI34gbXNnc3RyICLigJ0lc+KAnToga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgdGjGsCBt4bulYyB0w6BpIGxp4buHdS4iCisKKyN+IG1zZ2lkICItLSIKKyN+IG1zZ3N0ciAiLS0iCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgZXh0cmFjdCBlbWFpbCBmcm9tIGNvbW1pdHRlciBpZGVudGl0eS4iCisjfiBtc2dzdHIgIiIKKyN+ICJLaMO0bmcgdGjhu4MgcsO6dCB0csOtY2ggxJHhu4thIGNo4buJIHRoxrAgxJFp4buHbiB04butIHThu6sgxJHhu4tuaCBkYW5oIG5nxrDhu51pIGNodXnhu4NuIGdpYW8iCmRpZmYgLS1naXQgYS9wby96aF9DTi5wbyBiL3BvL3poX0NOLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZTUyNTgKLS0tIC9kZXYvbnVsbAorKysgYi9wby96aF9DTi5wbwpAQCAtMCwwICsxLDI0MTkyIEBACisjIENoaW5lc2UgdHJhbnNsYXRpb25zIGZvciBHaXQgcGFja2FnZQorIyBHaXQg6L2v5Lu25YyF55qE566A5L2T5Lit5paH57+76K+RLgorIyBDb3B5cmlnaHQgKEMpIDIwMTIsMjAxMyBKaWFuZyBYaW4gPHdvcmxkaGVsbG8ubmV0IEFUIGdtYWlsLmNvbT4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEdpdCBwYWNrYWdlLgorIyBDb250cmlidXRvcnM6CisjICAgLSBGYW5neWkgWmhvdSA8bWUgQVQgZmFuZ3lpLmlvPgorIyAgIC0gSmlhbmcgWGluIDx3b3JsZGhlbGxvLm5ldCBBVCBnbWFpbC5jb20+CisjICAgLSBMaWFuIENoZW5nIDxyaHl0aG0ubWFpbCBBVCBnbWFpbC5jb20+CisjICAgLSBSYXkgQ2hlbiA8b2xkc2hhcnAgQVQgZ21haWwuY29tPgorIyAgIC0gUmlrdSA8bHUucmlrdSBBVCBnbWFpbC5jb20+CisjICAgLSBUaHluc29uIDxsYW54aW5nY2FuIEFUIGdtYWlsLmNvbT4KKyMgICAtIHdzMzM4OSA8d2lsbHNtaXRoMzM4OSBBVCBnbWFpbC5jb20+CisjICAgLSBXYW5nIFNoZW5nIDx3YW5nc2hlbmcyMDA4bG92ZSBBVCAxNjMuY29tPgorIyAgIC0g5L6d5LqRIDxsaWx5ZGp3ZyBBVCBnbWFpbC5jb20+CisjICAgLSBZaWNoYW8gWXUgPHl5YzE5OTIgQVQgZ21haWwuY29tPgorIyAgIC0gWmh1YW5nIFlhIDx6aHVhbmd5YSBBVCBtZS5jb20+CisjCisjICBHaXQgZ2xvc3NhcnkgZm9yIENoaW5lc2UgdHJhbnNsYXRvcnMKKyMKKyMgICBFbmdsaXNoICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBDaGluZXNlCisjICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgMy13YXkgbWVyZ2UgICAgICAgICAgICAgICAgICAgICAgfCAg5LiJ5pa55ZCI5bm2CisjICAgYWJicmV2aWF0ZSAgICAgICAgICAgICAgICAgICAgICAgfCAg566A5YaZ77yI55qEIFNIQS0xIOWAvO+8iQorIyAgIGFsdGVybmF0ZSBvYmplY3QgZGF0YWJhc2UgICAgICAgIHwgIOWkh+eUqOWvueixoeW6kworIyAgIGFtZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOS/ruihpQorIyAgIGFuY2VzdG9yICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOelluWFiO+8jOelluWFiOaPkOS6pAorIyAgIGFubm90YXRlZCB0YWcgICAgICAgICAgICAgICAgICAgIHwgIOmZhOazqOagh+etvgorIyAgIGJhcmUgcmVwb3NpdG9yeSAgICAgICAgICAgICAgICAgIHwgIOe6r+S7k+W6kworIyAgIGJpc2VjdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOS6jOWIhuafpeaJvgorIyAgIGJsb2Igb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgIHwgIOaVsOaNruWvueixoQorIyAgIGJyYW5jaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWIhuaUrworIyAgIGJ1bmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWMhQorIyAgIGJ5cGFzcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOe7lei/hworIyAgIGNhY2hlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOe0ouW8le+8iOeahOWIq+ensO+8iQorIyAgIGNoYWluICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIO+8iOaPkOS6pO+8iemTvgorIyAgIGNoYW5nZXNldCAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWPmOabtOmbhgorIyAgIGNoZWNrb3V0ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOajgOWHugorIyAgIGNoZWNrc3VtICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOagoemqjO+8jOagoemqjOWSjAorIyAgIGNoZXJyeS1waWNraW5nICAgICAgICAgICAgICAgICAgIHwgIOaLo+mAiQorIyAgIGNsZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOW5suWHgO+8iOeahOW3peS9nOWMuu+8iQorIyAgIGNsb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWFi+mahgorIyAgIGNvbW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaPkOS6pAorIyAgIGNvbW1pdCBtZXNzYWdlICAgICAgICAgICAgICAgICAgIHwgIOaPkOS6pOivtOaYjgorIyAgIGNvbW1pdCBvYmplY3QgICAgICAgICAgICAgICAgICAgIHwgIOaPkOS6pOWvueixoQorIyAgIGNvbW1pdC1pc2ggKGFsc28gY29tbWl0dGlzaCkgICAgIHwgIOaPkOS6pOWPtworIyAgIGNvbmZsaWN0ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWGsueqgQorIyAgIGNvcmUgR2l0ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaguOW/gyBHaXQg5bel5YW3CisjICAgY292ZXIgbGV0dGVyICAgICAgICAgICAgICAgICAgICAgfCAg6ZmE5Ye9CisjICAgREFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5pyJ5ZCR5peg546v5Zu+CisjICAgZGFuZ2xpbmcgb2JqZWN0ICAgICAgICAgICAgICAgICAgfCAg5oKs56m65a+56LGhCisjICAgZGV0YWNoZWQgSEVBRCAgICAgICAgICAgICAgICAgICAgfCAg5YiG56a75aS05oyH6ZKICisjICAgZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgfCAg55uu5b2VCisjICAgZGlydHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6ISP77yI55qE5bel5L2c5Yy677yJCisjICAgZHVtYiBIVFRQIHByb3RvY29sICAgICAgICAgICAgICAgfCAg5ZORIEhUVFAg5Y2P6K6uCisjICAgZXZpbCBtZXJnZSAgICAgICAgICAgICAgICAgICAgICAgfCAg5Z2P5ZCI5bm277yI5ZCI5bm25byV5YWl5LqG54i25o+Q5Lqk5rKh5pyJ55qE5L+u5pS577yJCisjICAgZmFzdC1mb3J3YXJkICAgICAgICAgICAgICAgICAgICAgfCAg5b+r6L+bCisjICAgZmV0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6I635Y+WCisjICAgZmlsZSBzeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgfCAg5paH5Lu257O757ufCisjICAgZm9yayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5rS+55SfCisjICAgR2l0IGFyY2hpdmUgICAgICAgICAgICAgICAgICAgICAgfCAg5LuT5bqT77yI5a+55LqOIGFyY2gg55So5oi377yJCisjICAgZ2l0ZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZ2l0ZmlsZe+8iOS7k+W6k+mTvuaOpeaWh+S7tu+8iQorIyAgIGdyYWZ0cyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIO+8iOaPkOS6pO+8ieenu+akjQorIyAgIGhhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWTiOW4jOWAvAorIyAgIEhFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEhFQUTvvIjlpLTmjIfpkojvvIzkuqbljbPlvZPliY3liIbmlK/vvIkKKyMgICBoZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDlpLTjgIHliIbmlK8KKyMgICBoZWFkIHJlZiAgICAgICAgICAgICAgICAgICAgICAgICB8ICDliIbmlK8KKyMgICBoZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDlpLTkv6Hmga8KKyMgICBob29rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDpkqnlrZAKKyMgICBodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDooaXkuIHniYfmrrUKKyMgICBpbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDntKLlvJUKKyMgICBpbmRleCBlbnRyeSAgICAgICAgICAgICAgICAgICAgICB8ICDntKLlvJXmnaHnm64KKyMgICBsb29zZSBvYmplY3QgICAgICAgICAgICAgICAgICAgICB8ICDmnb7mlaPlr7nosaEKKyMgICBsb29zZSByZWZzICAgICAgICAgICAgICAgICAgICAgICB8ICDmnb7mlaPlvJXnlKgKKyMgICBtYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBtYXN0ZXLvvIjpu5jorqTliIbmlK/lkI3vvIkKKyMgICBtZXJnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDlkIjlubYKKyMgICBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDlr7nosaEKKyMgICBvYmplY3QgZGF0YWJhc2UgICAgICAgICAgICAgICAgICB8ICDlr7nosaHlupMKKyMgICBvYmplY3QgaWRlbnRpZmllciAgICAgICAgICAgICAgICB8ICDlr7nosaHmoIfor4bnrKYKKyMgICBvYmplY3QgbmFtZSAgICAgICAgICAgICAgICAgICAgICB8ICDlr7nosaHlkI3np7AKKyMgICBvYmplY3QgdHlwZSAgICAgICAgICAgICAgICAgICAgICB8ICDlr7nosaHnsbvlnosKKyMgICBvY3RvcHVzICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDnq6DpsbzlvI/lkIjlubbvvIjkuKTliIbmlK/ku6XkuIrnmoTlkIjlubbvvIkKKyMgICBvcmlnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcmlnaW7vvIjpu5jorqTnmoTov5znqIvlkI3np7DvvIkKKyMgICBwYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDljIUKKyMgICBwYWNrIGluZGV4ICAgICAgICAgICAgICAgICAgICAgICB8ICDljIXntKLlvJUKKyMgICBwYWNrZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICDljIXmlofku7YKKyMgICBwYXJlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDniLbmj5DkuqQKKyMgICBwYXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDooaXkuIEKKyMgICBwYXRoc3BlYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICDot6/lvoTop4TmoLwKKyMgICBwYXR0ZXJuICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDmqKHlvI8KKyMgICBwaWNrYXhlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDmjJbmjpgKKyMgICBwbHVtYmluZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICDnrqHku7bvvIhHaXQg5bqV5bGC5qC45b+D5ZG95Luk55qE5Yir56ew77yJCisjICAgcG9yY2VsYWluICAgICAgICAgICAgICAgICAgICAgICAgfCAg55O35Lu277yIR2l0IOS4iuWxguWwgeijheWRveS7pOeahOWIq+ensO+8iQorIyAgIHByZWNpb3VzLW9iamVjdHMgcmVwbyAgICAgICAgICAgIHwgIOePjeWTgeS7k+W6kworIyAgIHBydW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOa4hemZpAorIyAgIHB1bGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaLie+8jOaLieWPlgorIyAgIHB1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaOqO+8jOaOqOmAgQorIyAgIHJlYWNoYWJsZSAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWPr+i+vgorIyAgIHJlYmFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWPmOWfugorIyAgIHJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOW8leeUqAorIyAgIHJlZmxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOW8leeUqOaXpeW/lworIyAgIHJlZnNwZWMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOW8leeUqOinhOagvAorIyAgIHJlbW90ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOi/nOeoi++8jOi/nOeoi+S7k+W6kworIyAgIHJlbW90ZS10cmFja2luZyBicmFuY2ggICAgICAgICAgIHwgIOi/nOeoi+i3n+i4quWIhuaUrworIyAgIHJlcGxheSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOmHjeaUvgorIyAgIHJlcG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOS7k+W6kworIyAgIHJlcG9zaXRvcnkgICAgICAgICAgICAgICAgICAgICAgIHwgIOS7k+W6kworIyAgIHJlc29sdmUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIO+8iOWGsueqge+8ieino+WGsworIyAgIHJldmVydCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOi/mOWOnworIyAgIHJldmlzaW9uICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOeJiOacrAorIyAgIHJld2luZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWbnumAgAorIyAgIFNDTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOa6kOS7o+eggeeuoeeQhu+8iOW3peWFt++8iQorIyAgIFNIQS0xICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFNIQS0x77yI5a6J5YWo5ZOI5biM566X5rOVMe+8iQorIyAgIHNoYWxsb3cgcmVwb3NpdG9yeSAgICAgICAgICAgICAgIHwgIOa1he+8iOWFi+mahu+8ieS7k+W6kworIyAgIHNpZ25lZCB0YWcgICAgICAgICAgICAgICAgICAgICAgIHwgIOetvuWQjeagh+etvgorIyAgIHNtYXJ0IEhUVFAgcHJvdG9jb2wgICAgICAgICAgICAgIHwgIOaZuuiDvSBIVFRQIOWNj+iurgorIyAgIHNxdWFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWOi+e8qQorIyAgIHN0YWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG4uIOaaguWtmOWMuu+8iOWNs+e0ouW8le+8iTsgdi4g5pqC5a2YCisjICAgc3Rhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgbi4g6LSu6JeP5Yy6OyB2LiDotK7ol48KKyMgICBzdWJtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICB8ICDlrZDmqKHnu4QKKyMgICBzeW1yZWYgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDnrKblj7flvJXnlKgKKyMgICB0YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBuLiDmoIfnrb47IHYuIOaJk+agh+etvgorIyAgIHRhZyBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgIHwgIOagh+etvuWvueixoQorIyAgIHRhZ2dlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaJk+agh+etvuiAhQorIyAgIHRvcGljIGJyYW5jaCAgICAgICAgICAgICAgICAgICAgIHwgIOS4u+mimOWIhuaUrworIyAgIHRyYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOi3n+i4qgorIyAgIHRyYWlsZXIgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWwvumDqOe9suWQjQorIyAgIHRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOagke+8iOW3peS9nOWMuuaIluagkeWvueixoe+8iQorIyAgIHRyZWUgb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgIHwgIOagkeWvueixoQorIyAgIHRyZWUtaXNoIChhbHNvIHRyZWVpc2gpICAgICAgICAgIHwgIOagkeWvueixoe+8iOaIluWPr+S7peino+aekOS4uuS4gOagkeWvueixoe+8iQorIyAgIHVubWVyZ2VkIGluZGV4ICAgICAgICAgICAgICAgICAgIHwgIOacquWQiOW5tue0ouW8lQorIyAgIHVucGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOino+WMhQorIyAgIHVucmVhY2hhYmxlIG9iamVjdCAgICAgICAgICAgICAgIHwgIOS4jeWPr+i+vuWvueixoQorIyAgIHVuc3RhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWPlua2iOaaguWtmAorIyAgIHVwc3RyZWFtICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOS4iua4uAorIyAgIHVwc3RyZWFtIGJyYW5jaCAgICAgICAgICAgICAgICAgIHwgIOS4iua4uOWIhuaUrworIyAgIHdvcmtpbmcgdHJlZSAgICAgICAgICAgICAgICAgICAgIHwgIOW3peS9nOWMugorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMjAtMDMtMTEgMTU6MjYrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMjAtMDMtMTEgMTU6MzgrMDgwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmlhbmcgWGluIDx3b3JsZGhlbGxvLm5ldEBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogR2l0SHViIDxodHRwczovL2dpdGh1Yi5jb20vamlhbmd4aW4vZ2l0Lz5cbiIKKyJMYW5ndWFnZTogemhfQ05cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpPyIKK21zZ3N0ciAi5Zev77yIJXPvvInvvJ8iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjUyMSBhZGQtaW50ZXJhY3RpdmUuYzo4MjIgc2VxdWVuY2VyLmM6MzEyNAorIzogc2VxdWVuY2VyLmM6MzU2MiBidWlsdGluL3JlYmFzZS5jOjg3NSBidWlsdGluL3JlYmFzZS5jOjE2ODcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA4NiBidWlsdGluL3JlYmFzZS5jOjIxMzAKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAi5LiN6IO96K+75Y+W57Si5byVIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1NzYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNjkKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjk0Cittc2dpZCAiYmluYXJ5IgorbXNnc3RyICLkuozov5vliLYiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYzNCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI3OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMzIKK21zZ2lkICJub3RoaW5nIgorbXNnc3RyICLml6AiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYzNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMxNAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMjkKK21zZ2lkICJ1bmNoYW5nZWQiCittc2dzdHIgIuayoeacieS/ruaUuSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjQzCittc2dpZCAiVXBkYXRlIgorbXNnc3RyICLmm7TmlrAiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY4OSBhZGQtaW50ZXJhY3RpdmUuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YWdlICclcyciCittc2dzdHIgIuS4jeiDveaaguWtmCAnJXMnIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTUgYWRkLWludGVyYWN0aXZlLmM6ODg0IHNlcXVlbmNlci5jOjMzMTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODk5Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGluZGV4IgorbXNnc3RyICLkuI3og73lhpnlhaXntKLlvJUiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY5OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyOAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAidXBkYXRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInVwZGF0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi5pu05paw5LqGICVkIOS4qui3r+W+hFxuIgorbXNnc3RyWzFdICLmm7TmlrDkuoYgJWQg5Liq6Lev5b6EXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcxNiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY3OAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAibm90ZTogJXMgaXMgdW50cmFja2VkIG5vdy5cbiIKK21zZ3N0ciAi6K+05piO77yaJXMg546w5bey5oiQ5Li65pyq6Lef6Liq55qE44CCXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcyMSBhcHBseS5jOjQxMTAgYnVpbHRpbi9jaGVja291dC5jOjI4MQorIzogYnVpbHRpbi9yZXNldC5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICLlr7not6/lvoQgJyVzJyDnmoQgbWFrZV9jYWNoZV9lbnRyeSDmk43kvZzlpLHotKUiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjc1MSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY1NQorbXNnaWQgIlJldmVydCIKK21zZ3N0ciAi6L+Y5Y6fIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NjcKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgSEVBRF57dHJlZX0iCittc2dzdHIgIuS4jeiDveino+aekCBIRUFEXnt0cmVlfSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjMxCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJyZXZlcnRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInJldmVydGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIui/mOWOn+S6hiAlZCDkuKrot6/lvoRcbiIKK21zZ3N0clsxXSAi6L+Y5Y6f5LqGICVkIOS4qui3r+W+hFxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4NTYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdW50cmFja2VkIGZpbGVzLlxuIgorbXNnc3RyICLmsqHmnInmnKrot5/ouKrnmoTmlofku7bjgIJcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODYwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njg5Cittc2dpZCAiQWRkIHVudHJhY2tlZCIKK21zZ3N0ciAi5re75Yqg5pyq6Lef6Liq55qEIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgImFkZGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAiYWRkZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi5aKe5Yqg5LqGICVkIOS4qui3r+W+hFxuIgorbXNnc3RyWzFdICLlop7liqDkuoYgJWQg5Liq6Lev5b6EXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkxNworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXMiCittc2dzdHIgIuW/veeVpeacquWQiOWFpeeahO+8miVzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MjkgYWRkLXBhdGNoLmM6MTY3NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAi5Y+q5pyJ5LqM6L+b5Yi25paH5Lu26KKr5L+u5pS544CCXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkzMSBhZGQtcGF0Y2guYzoxNjczIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjaGFuZ2VzLlxuIgorbXNnc3RyICLmsqHmnInkv67mlLnjgIJcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3NgorbXNnaWQgIlBhdGNoIHVwZGF0ZSIKK21zZ3N0ciAi6KGl5LiB5pu05pawIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5NzQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzU0Cittc2dpZCAiUmV2aWV3IGRpZmYiCittc2dzdHIgIuajgOinhiBkaWZmIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDAyCittc2dpZCAic2hvdyBwYXRocyB3aXRoIGNoYW5nZXMiCittc2dzdHIgIuaYvuekuuWQq+WPmOabtOeahOi3r+W+hCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNAorbXNnaWQgImFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAi5bCG5bel5L2c5Yy654q25oCB5re75Yqg5Yiw5pqC5a2Y5Yy65L+u5pS56ZuG5LitIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA2Cittc2dpZCAicmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb24iCittc2dzdHIgIuWwhuaaguWtmOeahOS/ruaUuembhuaBouWkjeS4uiBIRUFEIOeJiOacrCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwOAorbXNnaWQgInBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseSIKK21zZ3N0ciAi5oyR6YCJ5pWw5o2u5Z2X5bm25pyJ6YCJ5oup5Zyw5pu05pawIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEwCittc2dpZCAidmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgIuaYvuekuiBIRUFEIOWSjOe0ouW8leeahOW3ruW8giIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAxMgorbXNnaWQgImFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAi5bCG5pyq6Lef6Liq5paH5Lu255qE5YaF5a655re75Yqg5Yiw5pqC5a2Y5Yy65L+u5pS56ZuG5LitIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDIwIGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjkKK21zZ2lkICJQcm9tcHQgaGVscDoiCittc2dzdHIgIuW4ruWKqe+8miIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAyMgorbXNnaWQgInNlbGVjdCBhIHNpbmdsZSBpdGVtIgorbXNnc3RyICLpgInmi6nkuIDkuKrmnaHnm64iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMjQKK21zZ2lkICJzZWxlY3QgYSByYW5nZSBvZiBpdGVtcyIKK21zZ3N0ciAi6YCJ5oup5LiA57O75YiX5p2h55uuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI2Cittc2dpZCAic2VsZWN0IG11bHRpcGxlIHJhbmdlcyIKK21zZ3N0ciAi6YCJ5oup5aSa5Liq6IyD5Zu0IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI4IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNzMKK21zZ2lkICJzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4IgorbXNnc3RyICLln7rkuo7llK/kuIDliY3nvIDpgInmi6nmnaHnm64iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMzAKK21zZ2lkICJ1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXMiCittc2dzdHIgIuWPjemAieaMh+WumueahOadoeebriIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAzMgorbXNnaWQgImNob29zZSBhbGwgaXRlbXMiCittc2dzdHIgIumAieaLqeaJgOacieadoeebriIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAzNAorbXNnaWQgIihlbXB0eSkgZmluaXNoIHNlbGVjdGluZyIKK21zZ3N0ciAi77yI56m677yJ57uT5p2f6YCJ5oupIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDcxCittc2dpZCAic2VsZWN0IGEgbnVtYmVyZWQgaXRlbSIKK21zZ3N0ciAi6YCJ5oup5LiA5Liq57yW5Y+35p2h55uuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDc1Cittc2dpZCAiKGVtcHR5KSBzZWxlY3Qgbm90aGluZyIKK21zZ3N0ciAi77yI56m677yJ5LiN6YCJ5oup5Lu75L2V5YaF5a65IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDgzIGJ1aWx0aW4vY2xlYW4uYzo4MjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODUxCittc2dpZCAiKioqIENvbW1hbmRzICoqKiIKK21zZ3N0ciAiKioqIOWRveS7pCAqKioiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwODQgYnVpbHRpbi9jbGVhbi5jOjgyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NDgKK21zZ2lkICJXaGF0IG5vdyIKK21zZ3N0ciAi6K+36YCJ5oupIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAic3RhZ2VkIgorbXNnc3RyICLnvJPlrZgiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMzYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJ1bnN0YWdlZCIKK21zZ3N0ciAi5pyq57yT5a2YIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGFwcGx5LmM6NDk2NyBhcHBseS5jOjQ5NzAgYnVpbHRpbi9hbS5jOjIyNTEKKyM6IGJ1aWx0aW4vYW0uYzoyMjU0IGJ1aWx0aW4vY2xvbmUuYzoxMjMgYnVpbHRpbi9mZXRjaC5jOjE0NAorIzogYnVpbHRpbi9tZXJnZS5jOjI3NCBidWlsdGluL3B1bGwuYzoxODkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTcKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTAyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA1CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE0OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInBhdGgiCittc2dzdHIgIui3r+W+hCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTE0MworbXNnaWQgImNvdWxkIG5vdCByZWZyZXNoIGluZGV4IgorbXNnc3RyICLkuI3og73liLfmlrDntKLlvJUiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExNTcgYnVpbHRpbi9jbGVhbi5jOjc4NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnllLlxuIgorbXNnc3RyICLlho3op4HjgIJcbiIKKworIzogYWRkLXBhdGNoLmM6MzMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5pqC5a2Y5qih5byP5Y+Y5pu0IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzozNCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjkKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLmmoLlrZjliKDpmaTliqjkvZwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLmmoLlrZjor6XlnZcgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjM3Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorInN0YWdpbmcuIgorbXNnc3RyICLlpoLmnpzooaXkuIHog73mraPnoa7lnLDlupTnlKjvvIznvJbovpHlnZflsIbnq4vljbPmoIforrDkuLrmmoLlrZjjgIIiCisKKyM6IGFkZC1wYXRjaC5jOjQwCittc2dpZCAiIgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0g5pqC5a2Y6K+l5Z2XXG4iCisibiAtIOS4jeimgeaaguWtmOivpeWdl1xuIgorInEgLSDpgIDlh7rjgILkuI3mmoLlrZjor6XlnZflj4rlkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJhIC0g5pqC5a2Y6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisiZCAtIOS4jeaaguWtmOivpeWdl+WSjOacrOaWh+S7tuS4reWQjumdoueahOWFqOmDqOWdl1xuIgorCisjOiBhZGQtcGF0Y2guYzo1NCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLotK7ol4/mqKHlvI/lj5jmm7QgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjU1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIui0ruiXj+WIoOmZpOWKqOS9nCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NTYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIui0ruiXj+ivpeWdlyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NTgKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisic3Rhc2hpbmcuIgorbXNnc3RyICLlpoLmnpzooaXkuIHog73mraPnoa7lnLDlupTnlKjvvIznvJbovpHlnZflsIbnq4vljbPmoIforrDkuLrotK7ol4/jgIIiCisKKyM6IGFkZC1wYXRjaC5jOjYxCittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0g6LSu6JeP6K+l5Z2XXG4iCisibiAtIOS4jeimgei0ruiXj+ivpeWdl1xuIgorInEgLSDpgIDlh7rjgILkuI3otK7ol4/or6XlnZflj4rlkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJhIC0g6LSu6JeP6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisiZCAtIOS4jei0ruiXj+ivpeWdl+WSjOacrOaWh+S7tuS4reWQjumdoueahOWFqOmDqOWdl1xuIgorCisjOiBhZGQtcGF0Y2guYzo3NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWPlua2iOaaguWtmOaooeW8j+WPmOabtCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6NzggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM5CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlj5bmtojmmoLlrZjliKDpmaTliqjkvZwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjc5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWPlua2iOaaguWtmOivpeWdlyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6ODEKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisidW5zdGFnaW5nLiIKK21zZ3N0ciAi5aaC5p6c6KGl5LiB6IO95q2j56Gu5Zyw5bqU55So77yM57yW6L6R5Z2X5bCG56uL5Y2z5qCH6K6w5Li65pyq5pqC5a2Y44CCIgorCisjOiBhZGQtcGF0Y2guYzo4NAorbXNnaWQgIiIKKyJ5IC0gdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHVuc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkgLSDlj5bmtojmmoLlrZjor6XlnZdcbiIKKyJuIC0g5LiN6KaB5Y+W5raI5pqC5a2Y6K+l5Z2XXG4iCisicSAtIOmAgOWHuuOAguS4jeimgeWPlua2iOaaguWtmOivpeWdl+WPiuWQjumdoueahOWFqOmDqOWdl1xuIgorImEgLSDlj5bmtojmmoLlrZjor6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJkIC0g5LiN6KaB5Y+W5raI5pqC5a2Y6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisKKyM6IGFkZC1wYXRjaC5jOjk5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MworIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWwhuaooeW8j+WPmOabtOW6lOeUqOWIsOe0ouW8lSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTAwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWwhuWIoOmZpOaTjeS9nOW6lOeUqOWIsOe0ouW8lSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlsIbor6XlnZflupTnlKjliLDntKLlvJUgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEwMyBhZGQtcGF0Y2guYzoxNjggYWRkLXBhdGNoLmM6MjExCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorImFwcGx5aW5nLiIKK21zZ3N0ciAi5aaC5p6c6KGl5LiB6IO95q2j56Gu5Zyw5bqU55So77yM57yW6L6R5Z2X5bCG56uL5Y2z5qCH6K6w5Li65bqU55So44CCIgorCisjOiBhZGQtcGF0Y2guYzoxMDYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkgLSDlnKjntKLlvJXkuK3lupTnlKjor6XlnZdcbiIKKyJuIC0g5LiN6KaB5Zyo57Si5byV5Lit5bqU55So6K+l5Z2XXG4iCisicSAtIOmAgOWHuuOAguS4jeimgeW6lOeUqOivpeWdl+WPiuWQjumdoueahOWFqOmDqOWdl1xuIgorImEgLSDlupTnlKjor6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJkIC0g5LiN6KaB5bqU55So6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisKKyM6IGFkZC1wYXRjaC5jOjEyMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MworIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLku47lt6XkvZzljLrkuK3kuKLlvIPmqKHlvI/lj5jmm7QgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyMiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDkKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLku47lt6XkvZzljLrkuK3kuKLlvIPliKDpmaTliqjkvZwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5LuO5bel5L2c5Yy65Lit5Lii5byD6K+l5Z2XIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjUgYWRkLXBhdGNoLmM6MTQ3IGFkZC1wYXRjaC5jOjE5MAorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJkaXNjYXJkaW5nLiIKK21zZ3N0ciAi5aaC5p6c6KGl5LiB6IO95q2j56Gu5Zyw5bqU55So77yM57yW6L6R5Z2X5bCG56uL5Y2z5qCH6K6w5Li65Lii5byD44CCIgorCisjOiBhZGQtcGF0Y2guYzoxMjggYWRkLXBhdGNoLmM6MTkzCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkgLSDlnKjlt6XkvZzljLrkuK3kuKLlvIPor6XlnZdcbiIKKyJuIC0g5LiN6KaB5Zyo5bel5L2c5Yy65Lit5Lii5byD6K+l5Z2XXG4iCisicSAtIOmAgOWHuuOAguS4jeimgeS4ouW8g+ivpeWdl+WPiuWQjumdoueahOWFqOmDqOWdl1xuIgorImEgLSDkuKLlvIPor6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJkIC0g5LiN6KaB5Lii5byD6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisKKyM6IGFkZC1wYXRjaC5jOjE0MyBhZGQtcGF0Y2guYzoxODYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUzCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLku47ntKLlvJXlkozlt6XkvZzljLrkuK3kuKLlvIPmqKHlvI/lj5jmm7QgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE0NCBhZGQtcGF0Y2guYzoxODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLku47ntKLlvJXlkozlt6XkvZzljLrkuK3kuKLlvIPliKDpmaQgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE0NSBhZGQtcGF0Y2guYzoxODggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5LuO57Si5byV5ZKM5bel5L2c5Yy65Lit5Lii5byD6K+l5Z2XIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNTAKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0g5Zyo57Si5byV5ZKM5bel5L2c5Yy65Lit5Lii5byD6K+l5Z2XXG4iCisibiAtIOS4jeimgeWcqOe0ouW8leWSjOW3peS9nOWMuuS4reS4ouW8g+ivpeWdl1xuIgorInEgLSDpgIDlh7rjgILkuI3opoHkuKLlvIPor6XlnZflj4rlkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJhIC0g5Lii5byD6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisiZCAtIOS4jeimgeS4ouW8g+ivpeWdl+WSjOacrOaWh+S7tuS4reWQjumdoueahOWFqOmDqOWdl1xuIgorCisjOiBhZGQtcGF0Y2guYzoxNjQgYWRkLXBhdGNoLmM6MjA3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlsIbmqKHlvI/lj5jmm7TlupTnlKjliLDntKLlvJXlkozlt6XkvZzljLogW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE2NSBhZGQtcGF0Y2guYzoyMDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU5CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWwhuWIoOmZpOaTjeS9nOW6lOeUqOWIsOe0ouW8leWSjOW3peS9nOWMuiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTY2IGFkZC1wYXRjaC5jOjIwOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjAKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWwhuivpeWdl+W6lOeUqOWIsOe0ouW8leWSjOW3peS9nOWMuiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTcxCittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkgLSDlnKjntKLlvJXlkozlt6XkvZzljLrkuK3lupTnlKjor6XlnZdcbiIKKyJuIC0g5LiN6KaB5Zyo57Si5byV5ZKM5bel5L2c5Yy65Lit5bqU55So6K+l5Z2XXG4iCisicSAtIOmAgOWHuuOAguS4jeimgeW6lOeUqOivpeWdl+WPiuWQjumdoueahOWFqOmDqOWdl1xuIgorImEgLSDlupTnlKjor6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJkIC0g5LiN6KaB5bqU55So6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisKKyM6IGFkZC1wYXRjaC5jOjIxNAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIOWcqOW3peS9nOWMuuS4reW6lOeUqOivpeWdl1xuIgorIm4gLSDkuI3opoHlnKjlt6XkvZzljLrkuK3lupTnlKjor6XlnZdcbiIKKyJxIC0g6YCA5Ye644CC5LiN6KaB5bqU55So6K+l5Z2X5Y+K5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisiYSAtIOW6lOeUqOivpeWdl+WSjOacrOaWh+S7tuS4reWQjumdoueahOWFqOmDqOWdl1xuIgorImQgLSDkuI3opoHlupTnlKjor6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZdcbiIKKworIzogYWRkLXBhdGNoLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciAnJS4qcyciCittc2dzdHIgIuaXoOazleino+aekOaVsOaNruWdl+WktOS/oeaBryAnJS4qcyciCisKKyM6IGFkZC1wYXRjaC5jOjMzNyBhZGQtcGF0Y2guYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgaHVuayBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICLml6Dms5Xop6PmnpDlvanoibLmlbDmja7lnZflpLTkv6Hmga8gJyUuKnMnIgorCisjOiBhZGQtcGF0Y2guYzozOTUKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZGlmZiIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5beu5byC5L+h5oGvIgorCisjOiBhZGQtcGF0Y2guYzo0MTQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBkaWZmIgorbXNnc3RyICLkuI3og73op6PmnpDlvanoibLlt67lvILkv6Hmga8iCisKKyM6IGFkZC1wYXRjaC5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICclcyciCittc2dzdHIgIui/kOihjCAnJXMnIOWksei0pSIKKworIzogYWRkLXBhdGNoLmM6NTg3Cittc2dpZCAibWlzbWF0Y2hlZCBvdXRwdXQgZnJvbSBpbnRlcmFjdGl2ZS5kaWZmRmlsdGVyIgorbXNnc3RyICJpbnRlcmFjdGl2ZS5kaWZmRmlsdGVyIOeahOi+k+WHuuS4jeWMuemFjSIKKworIzogYWRkLXBhdGNoLmM6NTg4Cittc2dpZCAiIgorIllvdXIgZmlsdGVyIG11c3QgbWFpbnRhaW4gYSBvbmUtdG8tb25lIGNvcnJlc3BvbmRlbmNlXG4iCisiYmV0d2VlbiBpdHMgaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4iCittc2dzdHIgIuaCqOeahOi/h+a7pOWZqOW/hemhu+WcqOWFtui+k+WFpeWSjOi+k+WHuueahOihjOS5i+mXtOS/neaMgeS4gOS4gOWvueW6lOeahOWFs+ezu+OAgiIKKworIzogYWRkLXBhdGNoLmM6NzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBjb250ZXh0IGxpbmUgIyVkIGluXG4iCisiJS4qcyIKK21zZ3N0ciAiIgorIumihOacn+S4iuS4i+aWh+ihjCAjJWQg5LqOXG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJodW5rcyBkbyBub3Qgb3ZlcmxhcDpcbiIKKyIlLipzXG4iCisiXHRkb2VzIG5vdCBlbmQgd2l0aDpcbiIKKyIlLipzIgorbXNnc3RyICIiCisi5Z2X5LiN6YeN5Y+g77yaXG4iCisiJS4qc1xuIgorIlx05LiN5piv57uT5bC+5LqO77yaXG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6MTA1MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTIKK21zZ2lkICJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgYSBxdWljayBndWlkZS5cbiIKK21zZ3N0ciAi5omL5Yqo5Z2X57yW6L6R5qih5byPIC0tIOafpeeci+W6lemDqOeahOW/q+mAn+aMh+WNl+OAglxuIgorCisjOiBhZGQtcGF0Y2guYzoxMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclYycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJWMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisiLS0tXG4iCisi6KaB5Yig6ZmkICclYycg5byA5aeL55qE6KGM77yM5L2/5YW25oiQ5Li6ICcgJyDlvIDlp4vnmoTooYzvvIjkuIrkuIvmlofvvInjgIJcbiIKKyLopoHliKDpmaQgJyVjJyDlvIDlp4vnmoTooYzvvIzliKDpmaTlroPku6zjgIJcbiIKKyLku6UgJWMg5byA5aeL55qE6KGM5bCG6KKr5Yig6Zmk44CCXG4iCisKKyMuIFRSQU5TTEFUT1JTOiAnaXQnIHJlZmVycyB0byB0aGUgcGF0Y2ggbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBtZXNzYWdlcy4KKyM6IGFkZC1wYXRjaC5jOjEwNzAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTI2Cittc2dpZCAiIgorIklmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlIGdpdmVuIGFuIG9wcG9ydHVuaXR5IHRvXG4iCisiZWRpdCBhZ2Fpbi4gIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgcmVtb3ZlZCwgdGhlbiB0aGUgZWRpdCBpc1xuIgorImFib3J0ZWQgYW5kIHRoZSBodW5rIGlzIGxlZnQgdW5jaGFuZ2VkLlxuIgorbXNnc3RyICIiCisi5aaC5p6c5LiN6IO95bmy5YeA5Zyw5bqU55So77yM5oKo5bCG5pyJ5py65Lya6YeN5paw57yW6L6R44CC5aaC5p6c6K+l5Z2X55qE5YWo6YOo5YaF5a655Yig6Zmk77yM5YiZXG4iCisi5q2k5qyh57yW6L6R6KKr57uI5q2i77yM6K+l5Z2X5LiN5Lya6KKr5L+u5pS544CCXG4iCisKKyM6IGFkZC1wYXRjaC5jOjExMDMKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIiCittc2dzdHIgIuaXoOazleino+aekOaVsOaNruWdl+WktOS/oeaBryIKKworIzogYWRkLXBhdGNoLmM6MTE0OAorbXNnaWQgIidnaXQgYXBwbHkgLS1jYWNoZWQnIGZhaWxlZCIKK21zZ3N0ciAiJ2dpdCBhcHBseSAtLWNhY2hlZCcg5aSx6LSlIgorCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIy4KKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIzogYWRkLXBhdGNoLmM6MTIxOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyMzkKK21zZ2lkICIiCisiWW91ciBlZGl0ZWQgaHVuayBkb2VzIG5vdCBhcHBseS4gRWRpdCBhZ2FpbiAoc2F5aW5nIFwibm9cIiBkaXNjYXJkcyEpIFt5L25dPyAiCittc2dzdHIgIuaCqOeahOe8lui+keWdl+S4jeiDveiiq+W6lOeUqOOAgumHjeaWsOe8lui+ke+8iOmAieaLqSBcIm5vXCIg5Lii5byD77yB77yJIFt5L25dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyNjEKK21zZ2lkICJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCEiCittc2dzdHIgIumAieS4reeahOWdl+S4jeiDveW6lOeUqOWIsOe0ouW8le+8gSIKKworIzogYWRkLXBhdGNoLmM6MTI2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDMKK21zZ2lkICJBcHBseSB0aGVtIHRvIHRoZSB3b3JrdHJlZSBhbnl3YXk/ICIKK21zZ3N0ciAi5peg6K665aaC5L2V6YO96KaB5bqU55So5Yiw5bel5L2c5Yy65LmI77yfIgorCisjOiBhZGQtcGF0Y2guYzoxMjY5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0NgorbXNnaWQgIk5vdGhpbmcgd2FzIGFwcGxpZWQuXG4iCittc2dzdHIgIuacquW6lOeUqOOAglxuIgorCisjOiBhZGQtcGF0Y2guYzoxMzI2Cittc2dpZCAiIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiaiAtIOe7tOaMgeivpeWdl+acquWGs+eKtuaAge+8jOafpeeci+S4i+S4gOS4quacquWGs+Wdl1xuIgorIkogLSDnu7TmjIHor6XlnZfmnKrlhrPnirbmgIHvvIzmn6XnnIvkuIvkuIDkuKrlnZdcbiIKKyJrIC0g57u05oyB6K+l5Z2X5pyq5Yaz54q25oCB77yM5p+l55yL5LiK5LiA5Liq5pyq5Yaz5Z2XXG4iCisiSyAtIOe7tOaMgeivpeWdl+acquWGs+eKtuaAge+8jOafpeeci+S4iuS4gOS4quWdl1xuIgorImcgLSDpgInmi6not7PovazliLDkuIDkuKrlnZdcbiIKKyIvIC0g5p+l5om+5ZKM57uZ5a6a5q2j5YiZ6KGo6L6+5byP5Yy56YWN55qE5Z2XXG4iCisicyAtIOaLhuWIhuW9k+WJjeWdl+S4uuabtOWwj+eahOWdl1xuIgorImUgLSDmiYvliqjnvJbovpHlvZPliY3lnZdcbiIKKyI/IC0g5pi+56S65biu5YqpXG4iCisKKyM6IGFkZC1wYXRjaC5jOjE0NDcgYWRkLXBhdGNoLmM6MTQ1NworbXNnaWQgIk5vIHByZXZpb3VzIGh1bmsiCittc2dzdHIgIuayoeacieWJjeS4gOS4quWdlyIKKworIzogYWRkLXBhdGNoLmM6MTQ1MiBhZGQtcGF0Y2guYzoxNDYyCittc2dpZCAiTm8gbmV4dCBodW5rIgorbXNnc3RyICLmsqHmnInkuIvkuIDkuKrlnZciCisKKyM6IGFkZC1wYXRjaC5jOjE0NjgKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvIgorbXNnc3RyICLmsqHmnInlhbblroPlj6/kvpvot7PovaznmoTlnZciCisKKyM6IGFkZC1wYXRjaC5jOjE0NzkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc3Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuayAoPHJldD4gdG8gc2VlIG1vcmUpPyAiCittc2dzdHIgIui3s+i9rOWIsOWTquS4quWdl++8iDzlm57ovaY+IOafpeeci+abtOWkmu+8ie+8nyAiCisKKyM6IGFkZC1wYXRjaC5jOjE0ODAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc5Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuaz8gIgorbXNnc3RyICLot7PovazliLDlk6rkuKrlnZfvvJ8iCisKKyM6IGFkZC1wYXRjaC5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXI6ICclcyciCittc2dzdHIgIuaXoOaViOaVsOWtl++8miclcyciCisKKyM6IGFkZC1wYXRjaC5jOjE0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU29ycnksIG9ubHkgJWQgaHVuayBhdmFpbGFibGUuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuIgorbXNnc3RyWzBdICLlr7nkuI3otbfvvIzlj6rmnIkgJWQg5Liq5Y+v55So5Z2X44CCIgorbXNnc3RyWzFdICLlr7nkuI3otbfvvIzlj6rmnIkgJWQg5Liq5Y+v55So5Z2X44CCIgorCisjOiBhZGQtcGF0Y2guYzoxNTA1Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoIgorbXNnc3RyICLmsqHmnInlhbblroPlj6/kvpvmn6Xmib7nmoTlnZciCisKKyM6IGFkZC1wYXRjaC5jOjE1MTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjIzCittc2dpZCAic2VhcmNoIGZvciByZWdleD8gIgorbXNnc3RyICLkvb/nlKjmraPliJnooajovr7lvI/mkJzntKLvvJ8iCisKKyM6IGFkZC1wYXRjaC5jOjE1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzIgorbXNnc3RyICLplJnor6/nmoTmraPliJnooajovr7lvI8gJXPvvJolcyIKKworIzogYWRkLXBhdGNoLmM6MTU0MworbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybiIKK21zZ3N0ciAi5rKh5pyJ5ZKM57uZ5a6a5qih5byP55u45Yy56YWN55qE5Z2XIgorCisjOiBhZGQtcGF0Y2guYzoxNTUwCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmsiCittc2dzdHIgIuWvueS4jei1t++8jOS4jeiDveaLhuWIhui/meS4quWdlyIKKworIzogYWRkLXBhdGNoLmM6MTU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmtzLiIKK21zZ3N0ciAi5ouG5YiG5Li6ICVkIOWdl+OAgiIKKworIzogYWRkLXBhdGNoLmM6MTU1OAorbXNnaWQgIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmsiCittc2dzdHIgIuWvueS4jei1t++8jOS4jeiDvee8lui+kei/meS4quWdlyIKKworIzogYWRkLXBhdGNoLmM6MTYwOQorbXNnaWQgIidnaXQgYXBwbHknIGZhaWxlZCIKK21zZ3N0ciAiJ2dpdCBhcHBseScg5aSx6LSlIgorCisjOiBhZHZpY2UuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNoaW50OiAlLipzJXNcbiIKK21zZ3N0ciAiJXPmj5DnpLrvvJolLipzJXNcbiIKKworIzogYWR2aWNlLmM6MTY4Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLml6Dms5Xmi6PpgInvvIzlm6DkuLrmgqjmnInmnKrlkIjlubbnmoTmlofku7bjgIIiCisKKyM6IGFkdmljZS5jOjE3MAorbXNnaWQgIkNvbW1pdHRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLml6Dms5Xmj5DkuqTvvIzlm6DkuLrmgqjmnInmnKrlkIjlubbnmoTmlofku7bjgIIiCisKKyM6IGFkdmljZS5jOjE3MgorbXNnaWQgIk1lcmdpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLml6Dms5XlkIjlubbvvIzlm6DkuLrmgqjmnInmnKrlkIjlubbnmoTmlofku7bjgIIiCisKKyM6IGFkdmljZS5jOjE3NAorbXNnaWQgIlB1bGxpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLml6Dms5Xmi4nlj5bvvIzlm6DkuLrmgqjmnInmnKrlkIjlubbnmoTmlofku7bjgIIiCisKKyM6IGFkdmljZS5jOjE3NgorbXNnaWQgIlJldmVydGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIuaXoOazleWbnumAgO+8jOWboOS4uuaCqOacieacquWQiOW5tueahOaWh+S7tuOAgiIKKworIzogYWR2aWNlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkl0IGlzIG5vdCBwb3NzaWJsZSB0byAlcyBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi5peg5rOVICVz77yM5Zug5Li65oKo5pyJ5pyq5ZCI5bm255qE5paH5Lu244CCIgorCisjOiBhZHZpY2UuYzoxODYKK21zZ2lkICIiCisiRml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIgorbXNnc3RyICIiCisi6K+35Zyo5bel5L2c5Yy65pS55q2j5paH5Lu277yM54S25ZCO6YWM5oOF5L2/55SoICdnaXQgYWRkL3JtIDzmlofku7Y+JyDlkb3ku6TmoIforrBcbiIKKyLop6PlhrPmlrnmoYjlubbmj5DkuqTjgIIiCisKKyM6IGFkdmljZS5jOjE5NAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiBhbiB1bnJlc29sdmVkIGNvbmZsaWN0LiIKK21zZ3N0ciAi5Zug5Li65a2Y5Zyo5pyq6Kej5Yaz55qE5Yay56qB6ICM6YCA5Ye644CCIgorCisjOiBhZHZpY2UuYzoxOTkgYnVpbHRpbi9tZXJnZS5jOjEzMzUKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIuaCqOWwmuacque7k+adn+aCqOeahOWQiOW5tu+8iOWtmOWcqCBNRVJHRV9IRUFE77yJ44CCIgorCisjOiBhZHZpY2UuYzoyMDEKK21zZ2lkICJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIG1lcmdpbmcuIgorbXNnc3RyICLor7flnKjlkIjlubbliY3lhYjmj5DkuqTmgqjnmoTkv67mlLnjgIIiCisKKyM6IGFkdmljZS5jOjIwMgorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiB1bmZpbmlzaGVkIG1lcmdlLiIKK21zZ3N0ciAi5Zug5Li65a2Y5Zyo5pyq5a6M5oiQ55qE5ZCI5bm26ICM6YCA5Ye644CCIgorCisjOiBhZHZpY2UuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IHN3aXRjaGluZyB0byAnJXMnLlxuIgorIlxuIgorIllvdSBhcmUgaW4gJ2RldGFjaGVkIEhFQUQnIHN0YXRlLiBZb3UgY2FuIGxvb2sgYXJvdW5kLCBtYWtlIGV4cGVyaW1lbnRhbFxuIgorImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKKyJzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgc3dpdGNoaW5nIGJhY2sgdG8gYSBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCB0byByZXRhaW4gY29tbWl0cyB5b3UgY3JlYXRlLCB5b3UgbWF5XG4iCisiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWMgd2l0aCB0aGUgc3dpdGNoIGNvbW1hbmQuIEV4YW1wbGU6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jIDxuZXctYnJhbmNoLW5hbWU+XG4iCisiXG4iCisiT3IgdW5kbyB0aGlzIG9wZXJhdGlvbiB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtXG4iCisiXG4iCisiVHVybiBvZmYgdGhpcyBhZHZpY2UgYnkgc2V0dGluZyBjb25maWcgdmFyaWFibGUgYWR2aWNlLmRldGFjaGVkSGVhZCB0byAiCisiZmFsc2VcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuazqOaEj++8muato+WcqOWIh+aNouWIsCAnJXMn44CCXG4iCisiXG4iCisi5oKo5q2j5aSE5LqO5YiG56a75aS05oyH6ZKI54q25oCB44CC5oKo5Y+v5Lul5p+l55yL44CB5YGa6K+V6aqM5oCn55qE5L+u5pS55Y+K5o+Q5Lqk77yM5bm25LiU5oKo5Y+v5Lul5Zyo5YiH5o2iXG4iCisi5Zue5LiA5Liq5YiG5pSv5pe277yM5Lii5byD5Zyo5q2k54q25oCB5LiL5omA5YGa55qE5o+Q5Lqk6ICM5LiN5a+55YiG5pSv6YCg5oiQ5b2x5ZON44CCXG4iCisiXG4iCisi5aaC5p6c5oKo5oOz6KaB6YCa6L+H5Yib5bu65YiG5pSv5p2l5L+d55WZ5Zyo5q2k54q25oCB5LiL5omA5YGa55qE5o+Q5Lqk77yM5oKo5Y+v5Lul6YCa6L+H5ZyoIHN3aXRjaCDlkb3ku6RcbiIKKyLkuK3mt7vliqDlj4LmlbAgLWMg5p2l5a6e546w77yI546w5Zyo5oiW56iN5ZCO77yJ44CC5L6L5aaC77yaXG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jIDzmlrDliIbmlK/lkI0+XG4iCisiXG4iCisi5oiW6ICF5pKk6ZSA5q2k5pON5L2c77yaXG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyLpgJrov4flsIbphY3nva7lj5jph48gYWR2aWNlLmRldGFjaGVkSGVhZCDorr7nva7kuLogZmFsc2Ug5p2l5YWz6Zet5q2k5bu66K6uXG4iCisiXG4iCisKKyM6IGFsaWFzLmM6NTAKK21zZ2lkICJjbWRsaW5lIGVuZHMgd2l0aCBcXCIKK21zZ3N0ciAi5ZG95Luk6KGM5LulIFxcIOe7k+WwviIKKworIzogYWxpYXMuYzo1MQorbXNnaWQgInVuY2xvc2VkIHF1b3RlIgorbXNnc3RyICLmnKrlhbPpl63nmoTlvJXlj7ciCisKKyM6IGFwcGx5LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciCittc2dzdHIgIuacquiDveivhuWIq+eahOepuueZveWtl+espumAiemhuSAnJXMnIgorCisjOiBhcHBseS5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAi5pyq6IO96K+G5Yir55qE56m655m95a2X56ym5b+955Wl6YCJ6aG5ICclcyciCisKKyM6IGFwcGx5LmM6MTM1Cittc2dpZCAiLS1yZWplY3QgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tcmVqZWN0IOWSjCAtLTN3YXkg5LiN6IO95ZCM5pe25L2/55So44CCIgorCisjOiBhcHBseS5jOjEzNworbXNnaWQgIi0tY2FjaGVkIGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICItLWNhY2hlZCDlkowgLS0zd2F5IOS4jeiDveWQjOaXtuS9v+eUqOOAgiIKKworIzogYXBwbHkuYzoxNDAKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tM3dheSDlnKjkuIDkuKrku5PlupPkuYvlpJYiCisKKyM6IGFwcGx5LmM6MTUxCittc2dpZCAiLS1pbmRleCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1pbmRleCDlnKjkuIDkuKrku5PlupPkuYvlpJYiCisKKyM6IGFwcGx5LmM6MTU0Cittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tY2FjaGVkIOWcqOS4gOS4quS7k+W6k+S5i+WkliIKKworIzogYXBwbHkuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAi5peg5rOV5YeG5aSH5pe26Ze05oiz5q2j5YiZ6KGo6L6+5byPICVzIgorCisjOiBhcHBseS5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgInJlZ2V4ZWMg6L+U5ZueICVk77yM6L6T5YWl5Li677yaJXMiCisKKyM6IGFwcGx5LmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIuS4jeiDveWcqOihpeS4geeahOesrCAlZCDooYzmib7liLDmlofku7blkI0iCisKKyM6IGFwcGx5LmM6OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx577ya6ZSZ6K+v55qEIGdpdC1kaWZmIC0g5bqU5Li6IC9kZXYvbnVsbO+8jOS9huWcqOesrCAlMiRkIOihjOW+l+WIsCAlMSRzIgorCisjOiBhcHBseS5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx577ya6ZSZ6K+v55qEIGdpdC1kaWZmIC0g56ysICVkIOihjOS4iuaWsOaWh+S7tuWQjeS4jeS4gOiHtCIKKworIzogYXBwbHkuYzo5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBsee+8mumUmeivr+eahCBnaXQtZGlmZiAtIOesrCAlZCDooYzkuIrml6fmlofku7blkI3kuI3kuIDoh7QiCisKKyM6IGFwcGx5LmM6OTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBsee+8mumUmeivr+eahCBnaXQtZGlmZiAtIOesrCAlZCDooYzlpITlupTkuLogL2Rldi9udWxsIgorCisjOiBhcHBseS5jOjk2MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgb24gbGluZSAlZDogJXMiCittc2dzdHIgIuesrCAlZCDooYzljIXlkKvml6DmlYjmlofku7bmqKHlvI/vvJolcyIKKworIzogYXBwbHkuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgImluY29uc2lzdGVudCBoZWFkZXIgbGluZXMgJWQgYW5kICVkIgorbXNnc3RyICLkuI3kuIDoh7TnmoTmlofku7blpLTvvIwlZCDooYzlkowgJWQg6KGMIgorCisjOiBhcHBseS5jOjEzNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAi5b2T56e76ZmkICVkIOS4quWJjeWvvOi3r+W+hOWQjiBnaXQgZGlmZiDlpLTnvLrkuY/mlofku7blkI3kv6Hmga/vvIjnrKwgJWQg6KGM77yJIgorbXNnc3RyWzFdICLlvZPnp7vpmaQgJWQg5Liq5YmN5a+86Lev5b6E5ZCOIGdpdCBkaWZmIOWktOe8uuS5j+aWh+S7tuWQjeS/oeaBr++8iOesrCAlZCDooYzvvIkiCisKKyM6IGFwcGx5LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gKGxpbmUgJWQpIgorbXNnc3RyICJnaXQgZGlmZiDnmoTlpLTkv6Hmga/kuK3nvLrkuY/mlofku7blkI3kv6Hmga/vvIjnrKwgJWQg6KGM77yJIgorCisjOiBhcHBseS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJyZWNvdW5077ya5oSP5aSW55qE6KGM77yaJS4qcyIKKworIzogYXBwbHkuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIuesrCAlZCDooYznmoTooaXkuIHniYfmrrXmsqHmnInlpLTkv6Hmga/vvJolLipzIgorCisjOiBhcHBseS5jOjE3NTMKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAi5paw5paH5Lu25L6d6LWW5pen5YaF5a65IgorCisjOiBhcHBseS5jOjE3NTUKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICLliKDpmaTnmoTmlofku7bku43mnInlhoXlrrkiCisKKyM6IGFwcGx5LmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIuihpeS4geWcqOesrCAlZCDooYzmjZ/lnY8iCisKKyM6IGFwcGx5LmM6MTgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAi5paw5paH5Lu2ICVzIOS+nei1luaXp+WGheWuuSIKKworIzogYXBwbHkuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgIuWIoOmZpOeahOaWh+S7tiAlcyDku43mnInlhoXlrrkiCisKKyM6IGFwcGx5LmM6MTgzMQorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIqKiDorablkYrvvJrmlofku7YgJXMg5oiQ5Li656m65paH5Lu25L2G5bm25pyq5Yig6ZmkIgorCisjOiBhcHBseS5jOjE5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAi5LqM6L+b5Yi26KGl5LiB5Zyo56ysICVkIOihjOaNn+Wdj++8miUuKnMiCisKKyM6IGFwcGx5LmM6MjAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIuacquiDveivhuWIq+eahOS6jOi/m+WItuihpeS4geS9jeS6juesrCAlZCDooYwiCisKKyM6IGFwcGx5LmM6MjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICLooaXkuIHmlofku7bnmoTnrKwgJWQg6KGM5Y+q5pyJ5Z6D5Zy+5pWw5o2uIgorCisjOiBhcHBseS5jOjIyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAi5peg5rOV6K+75Y+W56ym5Y+36ZO+5o6lICVzIgorCisjOiBhcHBseS5jOjIyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIKK21zZ3N0ciAi5LiN6IO95omT5byA5oiW6K+75Y+WICVzIgorCisjOiBhcHBseS5jOjI5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydCBvZiBsaW5lOiAnJWMnIgorbXNnc3RyICLml6DmlYjnmoTooYzpppblrZfnrKbvvJonJWMnIgorCisjOiBhcHBseS5jOjMwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICLlnZcgIyVkIOaIkOWKn+W6lOeUqOS6jiAlZO+8iOWBj+enuyAlZCDooYzvvIkiCittc2dzdHJbMV0gIuWdlyAjJWQg5oiQ5Yqf5bqU55So5LqOICVk77yI5YGP56e7ICVkIOihjO+8iSIKKworIzogYXBwbHkuYzozMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIuS4iuS4i+aWh+WHj+WwkeWIsO+8iCVsZC8lbGTvvInku6XlnKjnrKwgJWQg6KGM5bqU55So6KGl5LiB54mH5q61IgorCisjOiBhcHBseS5jOjMwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndoaWxlIHNlYXJjaGluZyBmb3I6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorIuW9k+afpeivou+8mlxuIgorIiUuKnMiCisKKyM6IGFwcGx5LmM6MzA5NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIgorbXNnc3RyICLnvLrlpLEgJyVzJyDnmoTkuozov5vliLbooaXkuIHmlbDmja4iCisKKyM6IGFwcGx5LmM6MzEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmV2ZXJzZS1hcHBseSBhIGJpbmFyeSBwYXRjaCB3aXRob3V0IHRoZSByZXZlcnNlIGh1bmsgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO95Y+N5ZCR5bqU55So5LiA5Liq57y65bCR5YiwICclcycg55qE5Y+N5ZCR5pWw5o2u5Z2X55qE5LqM6L+b5Yi26KGl5LiBIgorCisjOiBhcHBseS5jOjMxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFwcGx5IGJpbmFyeSBwYXRjaCB0byAnJXMnIHdpdGhvdXQgZnVsbCBpbmRleCBsaW5lIgorbXNnc3RyICLkuI3og73lnKggJyVzJyDkuIrlupTnlKjmsqHmnInlrozmlbTntKLlvJXooYznmoTkuozov5vliLbooaXkuIEiCisKKyM6IGFwcGx5LmM6MzE2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIHBhdGNoIGFwcGxpZXMgdG8gJyVzJyAoJXMpLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBjb250ZW50cy4iCittc2dzdHIgIuihpeS4geW6lOeUqOWIsCAnJXMn77yIJXPvvInvvIzkvYbmmK/lkozlvZPliY3lhoXlrrnkuI3ljLnphY3jgIIiCisKKyM6IGFwcGx5LmM6MzE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcGF0Y2ggYXBwbGllcyB0byBhbiBlbXB0eSAnJXMnIGJ1dCBpdCBpcyBub3QgZW1wdHkiCittc2dzdHIgIuihpeS4geW6lOeUqOWIsOepuuaWh+S7tiAnJXMn77yM5L2G5YW25bm26Z2e56m65paH5Lu2IgorCisjOiBhcHBseS5jOjMxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG5lY2Vzc2FyeSBwb3N0aW1hZ2UgJXMgZm9yICclcycgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgIuaXoOazleivu+WPliAnJTIkcycg5b+F6ZyA55qE55uu5qCH5paH5Lu2ICUxJHMiCisKKyM6IGFwcGx5LmM6MzIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggZG9lcyBub3QgYXBwbHkgdG8gJyVzJyIKK21zZ3N0ciAi5LqM6L+b5Yi26KGl5LiB5pyq5bqU55So5YiwICclcyciCisKKyM6IGFwcGx5LmM6MzIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKK21zZ3N0ciAi5YiwICclcycg55qE5LqM6L+b5Yi26KGl5LiB5Lqn55Sf5LqG5LiN5q2j56Gu55qE57uT5p6c77yI5bqU5Li6ICVz77yM5Y205Li6ICVz77yJIgorCisjOiBhcHBseS5jOjMyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgIuaJk+ihpeS4geWksei0pe+8miVzOiVsZCIKKworIzogYXBwbHkuYzozMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAi5LiN6IO95qOA5Ye6ICVzIgorCisjOiBhcHBseS5jOjM0MDUgYXBwbHkuYzozNDE2IGFwcGx5LmM6MzQ2MiBtaWR4LmM6NjEgc2V0dXAuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXMiCittc2dzdHIgIuaXoOazleivu+WPliAlcyIKKworIzogYXBwbHkuYzozNDEzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIuivu+WPluS9jeS6juespuWPt+mTvuaOpeS4reeahCAnJXMnIgorCisjOiBhcHBseS5jOjM0NDIgYXBwbHkuYzozNjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIgorbXNnc3RyICLot6/lvoQgJXMg5bey57uP6KKr6YeN5ZG95ZCNL+WIoOmZpCIKKworIzogYXBwbHkuYzozNTI4IGFwcGx5LmM6MzcwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVz77ya5LiN5a2Y5Zyo5LqO57Si5byV5LitIgorCisjOiBhcHBseS5jOjM1MzcgYXBwbHkuYzozNzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXPvvJrlkozntKLlvJXkuI3ljLnphY0iCisKKyM6IGFwcGx5LmM6MzU3MgorbXNnaWQgInJlcG9zaXRvcnkgbGFja3MgdGhlIG5lY2Vzc2FyeSBibG9iIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIuS7k+W6k+e8uuS5j+W/heimgeeahOaVsOaNruWvueixoeS7pei/m+ihjOS4ieaWueWQiOW5tuOAgiIKKworIzogYXBwbHkuYzozNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhbGxpbmcgYmFjayB0byB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAi5Zue6JC95Yiw5LiJ5pa55ZCI5bm2Li4uXG4iCisKKyM6IGFwcGx5LmM6MzU5MSBhcHBseS5jOjM1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgJyVzJyIKK21zZ3N0ciAi5peg5rOV6K+75Y+WICclcycg55qE5b2T5YmN5YaF5a65IgorCisjOiBhcHBseS5jOjM2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZhbGwgYmFjayBvbiB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAi5peg5rOV5Zue6JC95Yiw5LiJ5pa55ZCI5bm2Li4uXG4iCisKKyM6IGFwcGx5LmM6MzYyMQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgd2l0aCBjb25mbGljdHMuXG4iCittc2dzdHIgIuW6lOeUqOihpeS4geWIsCAnJXMnIOWtmOWcqOWGsueqgeOAglxuIgorCisjOiBhcHBseS5jOjM2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIGNsZWFubHkuXG4iCittc2dzdHIgIuaIkOWKn+W6lOeUqOihpeS4geWIsCAnJXMn44CCXG4iCisKKyM6IGFwcGx5LmM6MzY1MgorbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgIuenu+mZpOihpeS4geS7jeeVmeS4i+S6huaWh+S7tuWGheWuuSIKKworIzogYXBwbHkuYzozNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3cm9uZyB0eXBlIgorbXNnc3RyICIlc++8mumUmeivr+exu+WeiyIKKworIzogYXBwbHkuYzozNzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMg55qE57G75Z6L5pivICVv77yM5bqU5Li6ICVvIgorCisjOiBhcHBseS5jOjM4NzggYXBwbHkuYzozODgwIHJlYWQtY2FjaGUuYzo4MzAgcmVhZC1jYWNoZS5jOjg1NgorIzogcmVhZC1jYWNoZS5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXRoICclcyciCittc2dzdHIgIuaXoOaViOi3r+W+hCAnJXMnIgorCisjOiBhcHBseS5jOjM5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IgorbXNnc3RyICIlc++8muW3sue7j+WtmOWcqOS6jue0ouW8leS4rSIKKworIzogYXBwbHkuYzozOTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXPvvJrlt7Lnu4/lrZjlnKjkuo7lt6XkvZzljLrkuK0iCisKKyM6IGFwcGx5LmM6Mzk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgIiUyJHMg55qE5paw5qih5byP77yIJTEkb++8ieWSjOaXp+aooeW8j++8iCUzJG/vvInkuI3ljLnphY0iCisKKyM6IGFwcGx5LmM6Mzk2NAorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykgb2YgJXMiCittc2dzdHIgIiUyJHMg55qE5paw5qih5byP77yIJTEkb++8ieWSjCAlNCRzIOeahOaXp+aooeW8j++8iCUzJG/vvInkuI3ljLnphY0iCisKKyM6IGFwcGx5LmM6Mzk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAi5Y+X5b2x5ZON55qE5paH5Lu2ICclcycg5L2N5LqO56ym5Y+36ZO+5o6l5LitIgorCisjOiBhcHBseS5jOjM5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIlc++8muihpeS4geacquW6lOeUqCIKKworIzogYXBwbHkuYzo0MDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHBhdGNoICVzLi4uIgorbXNnc3RyICLmraPlnKjmo4Dmn6XooaXkuIEgJXMuLi4iCisKKyM6IGFwcGx5LmM6NDA5NQorIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICLlrZDmqKHnu4QgJXMg55qEIHNoYTEg5L+h5oGv57y65aSx5oiW5peg5pWIIgorCisjOiBhcHBseS5jOjQxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9kZSBjaGFuZ2UgZm9yICVzLCB3aGljaCBpcyBub3QgaW4gY3VycmVudCBIRUFEIgorbXNnc3RyICIlcyDnmoTmqKHlvI/lj5jmm7TvvIzkvYblroPkuI3lnKjlvZPliY0gSEVBRCDkuK0iCisKKyM6IGFwcGx5LmM6NDEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAoJXMpLiIKK21zZ3N0ciAic2hhMSDkv6Hmga/nvLrlpLHmiJbml6DmlYjvvIglc++8ieOAgiIKKworIzogYXBwbHkuYzo0MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhZGQgJXMgdG8gdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICLkuI3og73lnKjkuLTml7bntKLlvJXkuK3mt7vliqAgJXMiCisKKyM6IGFwcGx5LmM6NDEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdGVtcG9yYXJ5IGluZGV4IHRvICVzIgorbXNnc3RyICLkuI3og73miorkuLTml7bntKLlvJXlhpnlhaXliLAgJXMiCisKKyM6IGFwcGx5LmM6NDI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiCittc2dzdHIgIuS4jeiDveS7jue0ouW8leS4reenu+mZpCAlcyIKKworIzogYXBwbHkuYzo0Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi5a2Q5qih57uEICVzIOaNn+Wdj+eahOihpeS4gSIKKworIzogYXBwbHkuYzo0MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73lr7nmlrDlu7rmlofku7YgJyVzJyDosIPnlKggc3RhdCIKKworIzogYXBwbHkuYzo0MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICLkuI3og73kuLrmlrDlu7rmlofku7YgJXMg5Yib5bu65ZCO56uv5a2Y5YKoIgorCisjOiBhcHBseS5jOjQzMTYgYXBwbHkuYzo0NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIgorbXNnc3RyICLml6Dms5XkuLogJXMg5re75Yqg57yT5a2Y5p2h55uuIgorCisjOiBhcHBseS5jOjQzNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIHRvICclcyciCittc2dzdHIgIuWGmeWFpSAnJXMnIOWksei0pSIKKworIzogYXBwbHkuYzo0MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICLlhbPpl63mlofku7YgJyVzJyIKKworIzogYXBwbHkuYzo0NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIKK21zZ3N0ciAi5LiN6IO95YaZ5paH5Lu2ICclcycg5p2D6ZmQICVvIgorCisjOiBhcHBseS5jOjQ1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIKK21zZ3N0ciAi5oiQ5Yqf5bqU55So6KGl5LiBICVz44CCIgorCisjOiBhcHBseS5jOjQ1MzkKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAi5YaF6YOo6ZSZ6K+vIgorCisjOiBhcHBseS5jOjQ1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0Li4uIgorbXNnaWRfcGx1cmFsICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3RzLi4uIgorbXNnc3RyWzBdICLlupTnlKggJSVzIOS4quihpeS4ge+8jOWFtuS4rSAlZCDkuKrooqvmi5Lnu50uLi4iCittc2dzdHJbMV0gIuW6lOeUqCAlJXMg5Liq6KGl5LiB77yM5YW25LitICVkIOS4quiiq+aLkue7nS4uLiIKKworIzogYXBwbHkuYzo0NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAi5oiq55+tIC5yZWog5paH5Lu25ZCN5Li6ICUuKnMucmVqIgorCisjOiBhcHBseS5jOjQ1NjEgYnVpbHRpbi9mZXRjaC5jOjkwMSBidWlsdGluL2ZldGNoLmM6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAi5LiN6IO95omT5byAICVzIgorCisjOiBhcHBseS5jOjQ1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAi56ysICMlZCDkuKrniYfmrrXmiJDlip/lupTnlKjjgIIiCisKKyM6IGFwcGx5LmM6NDU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIuaLkue7neesrCAjJWQg5Liq54mH5q6144CCIgorCisjOiBhcHBseS5jOjQ2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCBwYXRjaCAnJXMnLiIKK21zZ3N0ciAi55Wl6L+H6KGl5LiBICclcyfjgIIiCisKKyM6IGFwcGx5LmM6NDcwNgorbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAi5pyq6IO96K+G5Yir55qE6L6T5YWlIgorCisjOiBhcHBseS5jOjQ3MjYKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5Xor7vlj5bntKLlvJXmlofku7YiCisKKyM6IGFwcGx5LmM6NDg4MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIHBhdGNoICclcyc6ICVzIgorbXNnc3RyICLkuI3og73miZPlvIDooaXkuIEgJyVzJ++8miVzIgorCisjOiBhcHBseS5jOjQ5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAi5oqR5Yi25LiL5LuN5pyJICVkIOS4quepuueZveWtl+espuivr+eUqCIKK21zZ3N0clsxXSAi5oqR5Yi25LiL5LuN5pyJICVkIOS4quepuueZveWtl+espuivr+eUqCIKKworIzogYXBwbHkuYzo0OTE2IGFwcGx5LmM6NDkzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCDooYzmlrDlop7kuobnqbrnmb3lrZfnrKbor6/nlKjjgIIiCittc2dzdHJbMV0gIiVkIOihjOaWsOWinuS6huepuueZveWtl+espuivr+eUqOOAgiIKKworIzogYXBwbHkuYzo0OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIuS/ruWkjeepuueZvemUmeivr+WQju+8jOW6lOeUqOS6hiAlZCDooYzjgIIiCittc2dzdHJbMV0gIuS/ruWkjeepuueZvemUmeivr+WQju+8jOW6lOeUqOS6hiAlZCDooYzjgIIiCisKKyM6IGFwcGx5LmM6NDk0MCBidWlsdGluL2FkZC5jOjYxMiBidWlsdGluL212LmM6MzAxIGJ1aWx0aW4vcm0uYzo0MDYKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIuaXoOazleWGmeWFpeaWsOe0ouW8leaWh+S7tiIKKworIzogYXBwbHkuYzo0OTY4Cittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAi5LiN6KaB5bqU55So5LiO57uZ5Ye66Lev5b6E5ZCR5Yy56YWN55qE5Y+Y5pu0IgorCisjOiBhcHBseS5jOjQ5NzEKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICLlupTnlKjkuI7nu5nlh7rot6/lvoTlkJHljLnphY3nmoTlj5jmm7QiCisKKyM6IGFwcGx5LmM6NDk3MyBidWlsdGluL2FtLmM6MjI2MAorbXNnaWQgIm51bSIKK21zZ3N0ciAi5pWw5a2XIgorCisjOiBhcHBseS5jOjQ5NzQKK21zZ2lkICJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIKK21zZ3N0ciAi5LuO5Lyg57uf55qEIGRpZmYg6Lev5b6E5Lit56e76Zmk5oyH5a6a5pWw6YeP55qE5YmN5a+85pac57q/IgorCisjOiBhcHBseS5jOjQ5NzcKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICLlv73nlaXooaXkuIHkuK3nmoTmt7vliqDnmoTmlofku7YiCisKKyM6IGFwcGx5LmM6NDk3OQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAi5LiN5bqU55So6KGl5LiB77yM6ICM5piv5pi+56S66L6T5YWl55qE5beu5byC57uf6K6h77yIZGlmZnN0YXTvvIkiCisKKyM6IGFwcGx5LmM6NDk4MworbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIuS7peWNgei/m+WItuaVsOaYvuekuua3u+WKoOWSjOWIoOmZpOeahOihjOaVsCIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAi5LiN5bqU55So6KGl5LiB77yM6ICM5piv5pi+56S66L6T5YWl55qE5qaC6KaBIgorCisjOiBhcHBseS5jOjQ5ODcKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIgorbXNnc3RyICLkuI3lupTnlKjooaXkuIHvvIzogIzmmK/mn6XnnIvooaXkuIHmmK/lkKblj6/lupTnlKgiCisKKyM6IGFwcGx5LmM6NDk4OQorbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAi56Gu6K6k6KGl5LiB5Y+v5Lul5bqU55So5Yiw5b2T5YmN57Si5byVIgorCisjOiBhcHBseS5jOjQ5OTEKK21zZ2lkICJtYXJrIG5ldyBmaWxlcyB3aXRoIGBnaXQgYWRkIC0taW50ZW50LXRvLWFkZGAiCittc2dzdHIgIuS9v+eUqOWRveS7pCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIOagh+iusOaWsOWinuaWh+S7tiIKKworIzogYXBwbHkuYzo0OTkzCittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuW6lOeUqOihpeS4geiAjOS4jeS/ruaUueW3peS9nOWMuiIKKworIzogYXBwbHkuYzo0OTk1Cittc2dpZCAiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIKK21zZ3N0ciAi5o6l5Y+X5L+u5pS55bel5L2c5Yy65LmL5aSW5paH5Lu255qE6KGl5LiBIgorCisjOiBhcHBseS5jOjQ5OTgKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAi6L+Y5bqU55So5q2k6KGl5LiB77yI5LiOIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjayDpgInpobnlkIzml7bkvb/nlKjvvIkiCisKKyM6IGFwcGx5LmM6NTAwMAorbXNnaWQgImF0dGVtcHQgdGhyZWUtd2F5IG1lcmdlIGlmIGEgcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIuWmguaenOS4gOS4quihpeS4geS4jeiDveW6lOeUqOWImeWwneivleS4ieaWueWQiOW5tiIKKworIzogYXBwbHkuYzo1MDAyCittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgIuWIm+W7uuS4gOS4quS4tOaXtue0ouW8leWfuuS6juW1jOWFpeeahOe0ouW8leS/oeaBryIKKworIzogYXBwbHkuYzo1MDA1IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzMgYnVpbHRpbi9scy1maWxlcy5jOjUyNAorbXNnaWQgInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICLot6/lvoTku6UgTlVMIOWtl+espuWIhumalCIKKworIzogYXBwbHkuYzo1MDA3Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICLnoa7kv53oh7PlsJHljLnphY0gPG4+IOihjOS4iuS4i+aWhyIKKworIzogYXBwbHkuYzo1MDA4IGJ1aWx0aW4vYW0uYzoyMjM5IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTgKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAwIGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAyCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NTcgYnVpbHRpbi9yZWJhc2UuYzoxNTA4Cittc2dpZCAiYWN0aW9uIgorbXNnc3RyICLliqjkvZwiCisKKyM6IGFwcGx5LmM6NTAwOQorbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICLmo4Dmn6XmlrDlop7lkozkv67mlLnnmoTooYzkuK3pl7TnmoTnqbrnmb3lrZfnrKbmu6XnlKgiCisKKyM6IGFwcGx5LmM6NTAxMiBhcHBseS5jOjUwMTUKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICLmn6Xmib7kuIrkuIvmlofml7blv73nlaXnqbrnmb3lrZfnrKbnmoTlj5jmm7QiCisKKyM6IGFwcGx5LmM6NTAxOAorbXNnaWQgImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIgorbXNnc3RyICLlj43lkJHlupTnlKjooaXkuIEiCisKKyM6IGFwcGx5LmM6NTAyMAorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICLml6DpnIDoh7PlsJHkuIDooYzkuIrkuIvmlociCisKKyM6IGFwcGx5LmM6NTAyMgorbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICLlsIbmi5Lnu53nmoTooaXkuIHniYfmrrXkv53lrZjlnKjlr7nlupTnmoQgKi5yZWog5paH5Lu25LitIgorCisjOiBhcHBseS5jOjUwMjQKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAi5YWB6K646YeN5Y+g55qE6KGl5LiB54mH5q61IgorCisjOiBhcHBseS5jOjUwMjUgYnVpbHRpbi9hZGQuYzozMjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMgorIzogYnVpbHRpbi9jb21taXQuYzoxMzYwIGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk4IGJ1aWx0aW4vZnNjay5jOjc3NAorIzogYnVpbHRpbi9sb2cuYzoyMTY2IGJ1aWx0aW4vbXYuYzoxMjMgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICLlhpfplb/ovpPlh7oiCisKKyM6IGFwcGx5LmM6NTAyNworbXNnaWQgInRvbGVyYXRlIGluY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgbmV3LWxpbmUgYXQgdGhlIGVuZCBvZiBmaWxlIgorbXNnc3RyICLlhYHorrjkuI3mraPnoa7nmoTmlofku7bmnKvlsL7mjaLooYznrKYiCisKKyM6IGFwcGx5LmM6NTAzMAorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAi5LiN5L+h5Lu76KGl5LiB54mH5q6155qE5aS05L+h5oGv5Lit55qE6KGM5Y+3IgorCisjOiBhcHBseS5jOjUwMzIgYnVpbHRpbi9hbS5jOjIyNDgKK21zZ2lkICJyb290IgorbXNnc3RyICLmoLnnm67lvZUiCisKKyM6IGFwcGx5LmM6NTAzMworbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgIuS4uuaJgOacieaWh+S7tuWQjeWJjea3u+WKoCA85qC555uu5b2VPiIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgWzzpgInpobk+XSA85qCR5a+56LGhPiBbPOi3r+W+hD4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTUKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjE2Cittc2dpZCAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPOS7k+W6kz4gWy0tZXhlYyA85ZG95LukPl0gWzzpgInpobk+XSA85qCR5a+56LGhPiBbPOi3r+W+hD4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTcKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA85LuT5bqTPiBbLS1leGVjIDzlkb3ku6Q+XSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzozNzIgYnVpbHRpbi9hZGQuYzoxODEgYnVpbHRpbi9hZGQuYzo1ODggYnVpbHRpbi9ybS5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICLot6/lvoTop4TmoLwgJyVzJyDmnKrljLnphY3ku7vkvZXmlofku7YiCisKKyM6IGFyY2hpdmUuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWY6ICUuKnMiCittc2dzdHIgIuaXoOatpOW8leeUqO+8miUuKnMiCisKKyM6IGFyY2hpdmUuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICVzIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjnmoTlr7nosaHlkI3vvJolcyIKKworIzogYXJjaGl2ZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB0cmVlIG9iamVjdDogJXMiCittc2dzdHIgIuS4jeaYr+S4gOS4quagkeWvueixoe+8miVzIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgIuW9k+WJjeW3peS9nOebruW9leacquiiq+i3n+i4qiIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImZtdCIKK21zZ3N0ciAi5qC85byPIgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgIuW9kuaho+agvOW8jyIKKworIzogYXJjaGl2ZS5jOjQ1OCBidWlsdGluL2xvZy5jOjE2NTMKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgIuWJjee8gCIKKworIzogYXJjaGl2ZS5jOjQ1OQorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgIuS4uuW9kuaho+S4reavj+S4qui3r+W+hOWQjeWKoOS4iuWJjee8gCIKKworIzogYXJjaGl2ZS5jOjQ2MCBidWlsdGluL2JsYW1lLmM6ODYxIGJ1aWx0aW4vYmxhbWUuYzo4NjUgYnVpbHRpbi9ibGFtZS5jOjg2NgorIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNyBidWlsdGluL2NvbmZpZy5jOjEzMCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjQgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjggYnVpbHRpbi9ncmVwLmM6ODg3CisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjAgYnVpbHRpbi9scy1maWxlcy5jOjU2MworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMiBidWlsdGluL25vdGVzLmM6NTc4IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIzCisjOiBwYXJzZS1vcHRpb25zLmg6MTkwCittc2dpZCAiZmlsZSIKK21zZ3N0ciAi5paH5Lu2IgorCisjOiBhcmNoaXZlLmM6NDYxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICLlvZLmoaPlhpnlhaXmraTmlofku7YiCisKKyM6IGFyY2hpdmUuYzo0NjMKK21zZ2lkICJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLor7vlj5blt6XkvZzljLrkuK3nmoQgLmdpdGF0dHJpYnV0ZXMiCisKKyM6IGFyY2hpdmUuYzo0NjQKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICLlnKjmoIflh4bplJnor6/kuIrmiqXlkYrlvZLmoaPmlofku7YiCisKKyM6IGFyY2hpdmUuYzo0NjUKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICLlj6rlrZjlgqgiCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgIuWOi+e8qemAn+W6puabtOW/qyIKKworIzogYXJjaGl2ZS5jOjQ3NAorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAi5Y6L57yp5pWI5p6c5pu05aW9IgorCisjOiBhcmNoaXZlLmM6NDc3Cittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICLliJflh7rmlK/mjIHnmoTlvZLmoaPmoLzlvI8iCisKKyM6IGFyY2hpdmUuYzo0NzkgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9jbG9uZS5jOjExMyBidWlsdGluL2Nsb25lLmM6MTE2CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMQorbXNnaWQgInJlcG8iCittc2dzdHIgIuS7k+W6kyIKKworIzogYXJjaGl2ZS5jOjQ4MCBidWlsdGluL2FyY2hpdmUuYzo5MgorbXNnaWQgInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IgorbXNnc3RyICLku47ov5znqIvku5PlupPvvIg85LuT5bqTPu+8ieaPkOWPluW9kuaho+aWh+S7tiIKKworIzogYXJjaGl2ZS5jOjQ4MSBidWlsdGluL2FyY2hpdmUuYzo5MyBidWlsdGluL2RpZmZ0b29sLmM6NzE1CisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAi5ZG95LukIgorCisjOiBhcmNoaXZlLmM6NDgyIGJ1aWx0aW4vYXJjaGl2ZS5jOjk0Cittc2dpZCAicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIgorbXNnc3RyICLov5znqIsgZ2l0LXVwbG9hZC1hcmNoaXZlIOWRveS7pOeahOi3r+W+hCIKKworIzogYXJjaGl2ZS5jOjQ4OQorbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICLmnKrnn6Xlj4LmlbAgLS1yZW1vdGUiCisKKyM6IGFyY2hpdmUuYzo0OTEKK21zZ2lkICJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIKK21zZ3N0ciAi6YCJ6aG5IC0tZXhlYyDlj6rog73lkowgLS1yZW1vdGUg5ZCM5pe25L2/55SoIgorCisjOiBhcmNoaXZlLmM6NDkzCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIuacquefpeWPguaVsCAtLW91dHB1dCIKKworIzogYXJjaGl2ZS5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGFyY2hpdmUgZm9ybWF0ICclcyciCittc2dzdHIgIuacquefpeW9kuaho+agvOW8jyAnJXMnIgorCisjOiBhcmNoaXZlLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiCittc2dzdHIgIuWPguaVsOS4jeaUr+aMgeatpOagvOW8jyAnJXMn77yaLSVkIgorCisjOiBhcmNoaXZlLXRhci5jOjEyNSBhcmNoaXZlLXppcC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyZWFtIGJsb2IgJXMiCittc2dzdHIgIuS4jeiDveaJk+W8gOaVsOaNruWvueixoSAlcyIKKworIzogYXJjaGl2ZS10YXIuYzoyNjYgYXJjaGl2ZS16aXAuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgZmlsZSBtb2RlOiAwJW8gKFNIQTE6ICVzKSIKK21zZ3N0ciAi5LiN5pSv5oyB55qE5paH5Lu25qih5byP77yaMCVvIChTSEExOiAlcykiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjkzIGFyY2hpdmUtemlwLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzIgorbXNnc3RyICLkuI3og73or7vlj5YgJXMiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnJXMnIGZpbHRlciIKK21zZ3N0ciAi5peg5rOV5ZCv5YqoICclcycg6L+H5ruk5ZmoIgorCisjOiBhcmNoaXZlLXRhci5jOjQ2OAorbXNnaWQgInVuYWJsZSB0byByZWRpcmVjdCBkZXNjcmlwdG9yIgorbXNnc3RyICLml6Dms5Xph43lrprlkJHmj4/ov7DnrKYiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsdGVyIHJlcG9ydGVkIGVycm9yIgorbXNnc3RyICInJXMnIOi/h+a7pOWZqOaKpeWRiuS6humUmeivryIKKworIzogYXJjaGl2ZS16aXAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCBpcyBub3QgdmFsaWQgVVRGLTg6ICVzIgorbXNnc3RyICLot6/lvoTkuI3mmK/mnInmlYjnmoQgVVRGLTjvvJolcyIKKworIzogYXJjaGl2ZS16aXAuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCB0b28gbG9uZyAoJWQgY2hhcnMsIFNIQTE6ICVzKTogJXMiCittc2dzdHIgIui3r+W+hOWkqumVv++8iCVkIOWtl+espu+8jFNIQTHvvJolc++8ie+8miVzIgorCisjOiBhcmNoaXZlLXppcC5jOjQ4MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlIGVycm9yICglZCkiCittc2dzdHIgIuWOi+e8qemUmeivryAoJWQpIgorCisjOiBhcmNoaXZlLXppcC5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lc3RhbXAgdG9vIGxhcmdlIGZvciB0aGlzIHN5c3RlbTogJTxQUkl1TUFYPiIKK21zZ3N0ciAi5a+55LqO5pys57O757uf5pe26Ze05oiz5aSq5aSn77yaJTxQUkl1TUFYPiIKKworIzogYXR0ci5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lIgorbXNnc3RyICIlLipzIOS4jeaYr+S4gOS4quacieaViOeahOWxnuaAp+WQjSIKKworIzogYXR0ci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBub3QgYWxsb3dlZDogJXM6JWQiCittc2dzdHIgIuS4jeWFgeiuuCAlc++8miVzOiVkIgorCisjOiBhdHRyLmM6NDA5Cittc2dpZCAiIgorIk5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBpZ25vcmVkIGluIGdpdCBhdHRyaWJ1dGVzXG4iCisiVXNlICdcXCEnIGZvciBsaXRlcmFsIGxlYWRpbmcgZXhjbGFtYXRpb24uIgorbXNnc3RyICIiCisi6LSf5YC85qih54mI5ZyoIGdpdCBhdHRyaWJ1dGVzIOS4reiiq+W/veeVpVxuIgorIuW9k+Wtl+espuS4suehruWunuimgeS7peaEn+WPueWPt+W8gOWni+aXtu+8jOS9v+eUqCAnXFwhJ+OAgiIKKworIzogYmlzZWN0LmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiCittc2dzdHIgIuaWh+S7tiAnJXMnIOWMheWQq+mUmeivr+eahOW8leeUqOagvOW8j++8miVzIgorCisjOiBiaXNlY3QuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICLmiJHku6zml6Dms5Xov5vooYzmm7TlpJrnmoTkuozliIbmn6Xmib7vvIFcbiIKKworIzogYmlzZWN0LmM6NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjnmoTmj5DkuqTlkI0gJXMiCisKKyM6IGJpc2VjdC5jOjc3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisi5ZCI5bm25Z+657q/ICVzIOaYr+Wdj+eahOOAglxuIgorIui/meaEj+WRs+edgOS7i+S6jiAlcyDlkowgWyVzXSDkuYvpl7TnmoQgYnVnIOW3sue7j+iiq+S/ruWkjeOAglxuIgorCisjOiBiaXNlY3QuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIG5ldy5cbiIKKyJUaGUgcHJvcGVydHkgaGFzIGNoYW5nZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIuWQiOW5tuWfuue6vyAlcyDmmK/mlrDnmoTjgIJcbiIKKyLku4vkuo4gJXMg5ZKMIFslc10g5LmL6Ze055qE5bGe5oCn5bey57uP6KKr5L+u5pS544CCXG4iCisKKyM6IGJpc2VjdC5jOjc4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIuWQiOW5tuWfuue6vyAlcyDmmK8gJXPjgIJcbiIKKyLov5nmhI/lkbPnnYDnrKzkuIDkuKogJyVzJyDmj5DkuqTkvY3kuo4gJXMg5ZKMIFslc10g5LmL6Ze044CCXG4iCisKKyM6IGJpc2VjdC5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU29tZSAlcyByZXZzIGFyZSBub3QgYW5jZXN0b3JzIG9mIHRoZSAlcyByZXYuXG4iCisiZ2l0IGJpc2VjdCBjYW5ub3Qgd29yayBwcm9wZXJseSBpbiB0aGlzIGNhc2UuXG4iCisiTWF5YmUgeW91IG1pc3Rvb2sgJXMgYW5kICVzIHJldnM/XG4iCittc2dzdHIgIiIKKyLkuIDkupsgJXMg54mI5pys5LiN5pivICVzIOeJiOacrOeahOelluWFiOOAglxuIgorIui/meenjeaDheWGteS4iyBnaXQg5LqM5YiG5p+l5om+5peg5rOV5q2j5bi45bel5L2c44CCXG4iCisi5oKo5Y+v6IO95byE6ZSZ5LqGICVzIOWSjCAlcyDniYjmnKzvvJ9cbiIKKworIzogYmlzZWN0LmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdIG11c3QgYmUgc2tpcHBlZC5cbiIKKyJTbyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGUgZmlyc3QgJXMgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kICVzLlxuIgorIldlIGNvbnRpbnVlIGFueXdheS4iCittc2dzdHIgIiIKKyLku4vkuo4gJXMg5ZKMIFslc10g55qE5ZCI5bm25Z+657q/5LiA5a6a6KKr5b+955Wl5LqG44CCXG4iCisi5omA5Lul5oiR5Lus5peg5rOV56Gu6K6k56ys5LiA5LiqICVzIOaPkOS6pOaYr+WQpuS7i+S6jiAlcyDlkowgJXMg5LmL6Ze044CCXG4iCisi5oiR5Lus5LuN5pen57un57ut44CCIgorCisjOiBiaXNlY3QuYzo4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIKK21zZ3N0ciAi5LqM5YiG5p+l5om+5Lit77ya5ZCI5bm25Z+657q/5b+F6aG75piv57uP6L+H5rWL6K+V55qEXG4iCisKKyM6IGJpc2VjdC5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJhICVzIHJldmlzaW9uIGlzIG5lZWRlZCIKK21zZ3N0ciAi6ZyA6KaB5LiA5LiqICVzIOeJiOacrCIKKworIzogYmlzZWN0LmM6OTIwIGJ1aWx0aW4vbm90ZXMuYzoxNzcgYnVpbHRpbi90YWcuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgIuS4jeiDveWIm+W7uuaWh+S7tiAnJXMnIgorCisjOiBiaXNlY3QuYzo5NjYgYnVpbHRpbi9tZXJnZS5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciCittc2dzdHIgIuS4jeiDveivu+WPluaWh+S7tiAnJXMnIgorCisjOiBiaXNlY3QuYzo5OTcKK21zZ2lkICJyZWFkaW5nIGJpc2VjdCByZWZzIGZhaWxlZCIKK21zZ3N0ciAi6K+75Y+W5LqM5YiG5p+l5om+5byV55So5aSx6LSlIgorCisjOiBiaXNlY3QuYzoxMDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHdhcyBib3RoICVzIGFuZCAlc1xuIgorbXNnc3RyICIlcyDlkIzml7bkuLogJXMg5ZKMICVzXG4iCisKKyM6IGJpc2VjdC5jOjEwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKyJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iCittc2dzdHIgIiIKKyLmsqHmnInlj5HnjrDlj6/mtYvor5XnmoTmj5DkuqTjgIJcbiIKKyLlj6/og73mgqjlnKjov5DooYzml7bkvb/nlKjkuobplJnor6/nmoTot6/lvoTlj4LmlbDvvJ9cbiIKKworIzogYmlzZWN0LmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICIocm91Z2hseSAlZCBzdGVwKSIKK21zZ2lkX3BsdXJhbCAiKHJvdWdobHkgJWQgc3RlcHMpIgorbXNnc3RyWzBdICLvvIjlpKfmpoIgJWQg5q2l77yJIgorbXNnc3RyWzFdICLvvIjlpKfmpoIgJWQg5q2l77yJIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGxhc3QgJXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoICIocm91Z2hseSAlZAorIy4gc3RlcHMpIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBiaXNlY3QuYzoxMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogJWQgcmV2aXNpb24gbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIKK21zZ2lkX3BsdXJhbCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIKK21zZ3N0clswXSAi5LqM5YiG5p+l5om+5Lit77ya5Zyo5q2k5LmL5ZCO77yM6L+Y5YmpICVkIOS4queJiOacrOW+hea1i+ivlSAlc1xuIgorbXNnc3RyWzFdICLkuozliIbmn6Xmib7kuK3vvJrlnKjmraTkuYvlkI7vvIzov5jliakgJWQg5Liq54mI5pys5b6F5rWL6K+VICVzXG4iCisKKyM6IGJsYW1lLmM6MjcwMAorbXNnaWQgIi0tY29udGVudHMgYW5kIC0tcmV2ZXJzZSBkbyBub3QgYmxlbmQgd2VsbC4iCittc2dzdHIgIi0tY29udGVudHMg5ZKMIC0tcmV2ZXJzZSDkuI3og73mt7fnlKjjgIIiCisKKyM6IGJsYW1lLmM6MjcxNAorbXNnaWQgImNhbm5vdCB1c2UgLS1jb250ZW50cyB3aXRoIGZpbmFsIGNvbW1pdCBvYmplY3QgbmFtZSIKK21zZ3N0ciAi5LiN6IO95bCGIC0tY29udGVudHMg5ZKM5pyA57uI55qE5o+Q5Lqk5a+56LGh5ZCN5YWx55SoIgorCisjOiBibGFtZS5jOjI3MzUKK21zZ2lkICItLXJldmVyc2UgYW5kIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgc3BlY2lmaWVkIGxhdGVzdCBjb21taXQiCittc2dzdHIgIi0tcmV2ZXJzZSDlkowgLS1maXJzdC1wYXJlbnQg5YWx55So77yM6ZyA6KaB5oyH5a6a5pyA5paw55qE5o+Q5LqkIgorCisjOiBibGFtZS5jOjI3NDQgYnVuZGxlLmM6MTY3IHJlZi1maWx0ZXIuYzoyMjAzIHJlbW90ZS5jOjE5NDIgc2VxdWVuY2VyLmM6MjAwNgorIzogc2VxdWVuY2VyLmM6NDM1OCBzdWJtb2R1bGUuYzo4NDcgYnVpbHRpbi9jb21taXQuYzoxMDQ1IGJ1aWx0aW4vbG9nLmM6Mzg4CisjOiBidWlsdGluL2xvZy5jOjk5MSBidWlsdGluL2xvZy5jOjE1MjAgYnVpbHRpbi9sb2cuYzoxOTI1IGJ1aWx0aW4vbG9nLmM6MjIxNQorIzogYnVpbHRpbi9tZXJnZS5jOjQxMiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkwCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTkyCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgIueJiOacrOmBjeWOhuiuvue9ruWksei0pSIKKworIzogYmxhbWUuYzoyNzYyCittc2dpZCAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHJhbmdlIGFsb25nIGZpcnN0LXBhcmVudCBjaGFpbiIKK21zZ3N0ciAiLS1yZXZlcnNlIOWSjCAtLWZpcnN0LXBhcmVudCDlhbHnlKjvvIzpnIDopoHnrKzkuIDnpZblhYjpk77kuIrnmoTmj5DkuqTojIPlm7QiCisKKyM6IGJsYW1lLmM6Mjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHBhdGggJXMgaW4gJXMiCittc2dzdHIgIuWcqCAlMiRzIOS4reaXoOatpOi3r+W+hCAlMSRzIgorCisjOiBibGFtZS5jOjI3ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgYmxvYiAlcyBmb3IgcGF0aCAlcyIKK21zZ3N0ciAi5LiN6IO95Li66Lev5b6EICUyJHMg6K+75Y+W5pWw5o2u5a+56LGhICUxJHMiCisKKyM6IGJyYW5jaC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJBZnRlciBmaXhpbmcgdGhlIGVycm9yIGNhdXNlIHlvdSBtYXkgdHJ5IHRvIGZpeCB1cFxuIgorInRoZSByZW1vdGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYnkgaW52b2tpbmdcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgorbXNnc3RyICIiCisiXG4iCisi5Zyo5L+u5aSN6ZSZ6K+v5ZCO77yM5oKo5Y+v5Lul5bCd6K+V5L+u5pS56L+c56iL6Lef6Liq5YiG5pSv77yM6YCa6L+H5omn6KGM5ZG95LukXG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiIOOAgiIKKworIzogYnJhbmNoLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIgorbXNnc3RyICLmnKrorr7nva7liIbmlK8gJXMg5L2c5Li65a6D6Ieq5bex55qE5LiK5ri444CCIgorCisjOiBicmFuY2guYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIuWIhuaUryAnJTEkcycg6K6+572u5Li65L2/55So5Y+Y5Z+65p2l6Lef6Liq5p2l6IeqICclMyRzJyDnmoTov5znqIvliIbmlK8gJyUyJHMn44CCIgorCisjOiBicmFuY2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJy4iCittc2dzdHIgIuWIhuaUryAnJTEkcycg6K6+572u5Li66Lef6Liq5p2l6IeqICclMyRzJyDnmoTov5znqIvliIbmlK8gJyUyJHMn44CCIgorCisjOiBicmFuY2guYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICLliIbmlK8gJyVzJyDorr7nva7kuLrkvb/nlKjlj5jln7rmnaXot5/ouKrmnKzlnLDliIbmlK8gJyVzJ+OAgiIKKworIzogYnJhbmNoLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAi5YiG5pSvICclcycg6K6+572u5Li66Lef6Liq5pys5Zyw5YiG5pSvICclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAi5YiG5pSvICclcycg6K6+572u5Li65L2/55So5Y+Y5Z+65p2l6Lef6Liq6L+c56iL5byV55SoICclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnLiIKK21zZ3N0ciAi5YiG5pSvICclcycg6K6+572u5Li66Lef6Liq6L+c56iL5byV55SoICclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICLliIbmlK8gJyVzJyDorr7nva7kuLrkvb/nlKjlj5jln7rmnaXot5/ouKrmnKzlnLDlvJXnlKggJyVzJ+OAgiIKKworIzogYnJhbmNoLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJy4iCittc2dzdHIgIuWIhuaUryAnJXMnIOiuvue9ruS4uui3n+i4quacrOWcsOW8leeUqCAnJXMn44CCIgorCisjOiBicmFuY2guYzoxMTkKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgdXBzdHJlYW0gYnJhbmNoIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIuaXoOazleWGmeWFpeS4iua4uOWIhuaUr+mFjee9riIKKworIzogYnJhbmNoLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCB0cmFja2luZzogYW1iaWd1b3VzIGluZm9ybWF0aW9uIGZvciByZWYgJXMiCittc2dzdHIgIuacqui3n+i4qu+8muW8leeUqCAlcyDmnInmrafkuYkiCisKKyM6IGJyYW5jaC5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDkuKrmnInmlYjnmoTliIbmlK/lkI3np7DjgIIiCisKKyM6IGJyYW5jaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi5LiA5Liq5YiG5pSv5ZCNICclcycg5bey57uP5a2Y5Zyo44CCIgorCisjOiBicmFuY2guYzoyMTMKK21zZ2lkICJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIuaXoOazleW8uuWItuabtOaWsOW9k+WJjeWIhuaUr+OAgiIKKworIzogYnJhbmNoLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzZXR1cCB0cmFja2luZyBpbmZvcm1hdGlvbjsgc3RhcnRpbmcgcG9pbnQgJyVzJyBpcyBub3QgYSBicmFuY2guIgorbXNnc3RyICLml6Dms5Xorr7nva7ot5/ouKrkv6Hmga/vvJvotbflp4vngrkgJyVzJyDkuI3mmK/kuIDkuKrliIbmlK/jgIIiCisKKyM6IGJyYW5jaC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLor7fmsYLnmoTkuIrmuLjliIbmlK8gJyVzJyDkuI3lrZjlnKgiCisKKyM6IGJyYW5jaC5jOjIzNworbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGJhc2luZyB5b3VyIHdvcmsgb24gYW4gdXBzdHJlYW1cbiIKKyJicmFuY2ggdGhhdCBhbHJlYWR5IGV4aXN0cyBhdCB0aGUgcmVtb3RlLCB5b3UgbWF5IG5lZWQgdG9cbiIKKyJydW4gXCJnaXQgZmV0Y2hcIiB0byByZXRyaWV2ZSBpdC5cbiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIHRvIHB1c2ggb3V0IGEgbmV3IGxvY2FsIGJyYW5jaCB0aGF0XG4iCisid2lsbCB0cmFjayBpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LCB5b3UgbWF5IHdhbnQgdG8gdXNlXG4iCisiXCJnaXQgcHVzaCAtdVwiIHRvIHNldCB0aGUgdXBzdHJlYW0gY29uZmlnIGFzIHlvdSBwdXNoLiIKK21zZ3N0ciAiIgorIlxuIgorIuWmguaenOaCqOato+iuoeWIkuWfuuS6jui/nOeoi+S4gOS4queOsOWtmOeahOS4iua4uOWIhuaUr+W8gOWni+S9oOeahOW3peS9nO+8jFxuIgorIuaCqOWPr+iDvemcgOimgeaJp+ihjCBcImdpdCBmZXRjaFwiIOadpeiOt+WPluWIhuaUr+OAglxuIgorIlxuIgorIuWmguaenOaCqOato+iuoeWIkuaOqOmAgeS4gOS4quiDveS4juWvueW6lOi/nOeoi+WIhuaUr+W7uueri+i3n+i4queahOaWsOeahOacrOWcsOWIhuaUr++8jFxuIgorIuaCqOWPr+iDvemcgOimgeS9v+eUqCBcImdpdCBwdXNoIC11XCIg5o6o6YCB5YiG5pSv5bm26YWN572u5ZKM5LiK5ri455qE5YWz6IGU44CCIgorCisjOiBicmFuY2guYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjnmoTlr7nosaHlkI3vvJonJXMn44CCIgorCisjOiBicmFuY2guYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAi5q2n5LmJ55qE5a+56LGh5ZCN77yaJyVzJ+OAgiIKKworIzogYnJhbmNoLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIuaXoOaViOeahOWIhuaUr+eCue+8miclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiJyVzJyDlt7Lnu4/mo4Dlh7rliLAgJyVzJyIKKworIzogYnJhbmNoLmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgb2Ygd29ya2luZyB0cmVlICVzIGlzIG5vdCB1cGRhdGVkIgorbXNnc3RyICLlt6XkvZzljLogJXMg55qEIEhFQUQg5oyH5ZCR5rKh5pyJ6KKr5pu05pawIgorCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICInJXMnIOS4jeWDj+aYr+S4gOS4qiB2MiDniYjmnKznmoTljIXmlofku7YiCisKKyM6IGJ1bmRsZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAi5pyq6IO96K+G5Yir55qE5YyF5aS077yaJXMlcyAoJWQpIgorCisjOiBidW5kbGUuYzo5MCByZXJlcmUuYzo0ODAgcmVyZXJlLmM6NjkwIHNlcXVlbmNlci5jOjIyNTggc2VxdWVuY2VyLmM6MzAxNgorIzogYnVpbHRpbi9jb21taXQuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAi5LiN6IO95omT5byAICclcyciCisKKyM6IGJ1bmRsZS5jOjE0MworbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICLku5PlupPkuK3nvLrlsJHov5nkupvlv4XlpIfnmoTmj5DkuqTvvJoiCisKKyM6IGJ1bmRsZS5jOjE0NgorbXNnaWQgIm5lZWQgYSByZXBvc2l0b3J5IHRvIHZlcmlmeSBhIGJ1bmRsZSIKK21zZ3N0ciAi6ZyA6KaB5LiA5Liq5LuT5bqT5p2l5qCh6aqM5LiA5Liq5YyFIgorCisjOiBidW5kbGUuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIui/meS4quWMheS4reWQq+aciei/meS4quW8leeUqO+8miIKK21zZ3N0clsxXSAi6L+Z5Liq5YyF5Lit5ZCr5pyJICVkIOS4quW8leeUqO+8miIKKworIzogYnVuZGxlLmM6MjA0Cittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIui/meS4quWMheiusOW9leS4gOS4quWujOaVtOWOhuWPsuOAgiIKKworIzogYnVuZGxlLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICLov5nkuKrljIXpnIDopoHov5nkuKrlvJXnlKjvvJoiCittc2dzdHJbMV0gIui/meS4quWMhemcgOimgSAlZCDkuKrlvJXnlKjvvJoiCisKKyM6IGJ1bmRsZS5jOjI3MworbXNnaWQgInVuYWJsZSB0byBkdXAgYnVuZGxlIGRlc2NyaXB0b3IiCittc2dzdHIgIuaXoOazleWkjeWItiBidW5kbGUg5o+P6L+w56ymIgorCisjOiBidW5kbGUuYzoyODAKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICLkuI3og73nlJ/miJAgcGFjay1vYmplY3RzIOi/m+eoiyIKKworIzogYnVuZGxlLmM6MjkxCittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgInBhY2stb2JqZWN0cyDnu4jmraIiCisKKyM6IGJ1bmRsZS5jOjMzMworbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgInJldi1saXN0IOe7iOatoiIKKworIzogYnVuZGxlLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICLlvJXnlKggJyVzJyDooqsgcmV2LWxpc3Qg6YCJ6aG55o6S6ZmkIgorCisjOiBidW5kbGUuYzo0NjEgYnVpbHRpbi9sb2cuYzoyMDMgYnVpbHRpbi9sb2cuYzoxODE0IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq6IO96K+G5Yir55qE5Y+C5pWw77yaJXMiCisKKyM6IGJ1bmRsZS5jOjQ2OQorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICLkuI3og73liJvlu7rnqbrljIXjgIIiCisKKyM6IGJ1bmRsZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIuS4jeiDveWIm+W7uiAnJXMnIgorCisjOiBidW5kbGUuYzo1MDQKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgImluZGV4LXBhY2sg57uI5q2iIgorCisjOiBjb2xvci5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yIHZhbHVlOiAlLipzIgorbXNnc3RyICLml6DmlYjnmoTpopzoibLlgLzvvJolLipzIgorCisjOiBjb21taXQuYzo1MSBzZXF1ZW5jZXIuYzoyNzE5IGJ1aWx0aW4vYW0uYzozNTkgYnVpbHRpbi9hbS5jOjQwMworIzogYnVpbHRpbi9hbS5jOjEzNzEgYnVpbHRpbi9hbS5jOjIwMTQgYnVpbHRpbi9yZXBsYWNlLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6QICVzIgorCisjOiBjb21taXQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICIlcyAlcyDkuI3mmK/kuIDkuKrmj5DkuqTvvIEiCisKKyM6IGNvbW1pdC5jOjE5MworbXNnaWQgIiIKKyJTdXBwb3J0IGZvciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaXMgZGVwcmVjYXRlZFxuIgorImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgR2l0IHZlcnNpb24uXG4iCisiXG4iCisiUGxlYXNlIHVzZSBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyJ0byBjb252ZXJ0IHRoZSBncmFmdHMgaW50byByZXBsYWNlIHJlZnMuXG4iCisiXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIiIKK21zZ3N0ciAiIgorIuWvuSA8R0lUX0RJUj4vaW5mby9ncmFmdHMg55qE5pSv5oyB5bey6KKr5byD55So77yM5bm25bCG5ZyoXG4iCisi5pyq5p2l55qER2l054mI5pys5Lit6KKr56e76Zmk44CCXG4iCisiXG4iCisi6K+35L2/55SoIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIiDlsIZcbiIKKyJncmFmdHMg6L2s5o2i5Li65pu/5o2i5byV55So44CCXG4iCisiXG4iCisi6K6+572uIFwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiXG4iCisi5Y+v5YWz6Zet5pys5raI5oGvIgorCisjOiBjb21taXQuYzoxMTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIuaPkOS6pCAlcyDmnInkuIDkuKrpnZ7lj6/kv6HnmoTlo7Dnp7DmnaXoh6ogJXMg55qEIEdQRyDnrb7lkI3jgIIiCisKKyM6IGNvbW1pdC5jOjExNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIuaPkOS6pCAlcyDmnInkuIDkuKrplJnor6/nmoTlo7Dnp7DmnaXoh6ogJXMg55qEIEdQRyDnrb7lkI3jgIIiCisKKyM6IGNvbW1pdC5jOjExNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlLiIKK21zZ3N0ciAi5o+Q5LqkICVzIOayoeaciSBHUEcg562+5ZCN44CCIgorCisjOiBjb21taXQuYzoxMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAi5o+Q5LqkICVzIOacieS4gOS4quadpeiHqiAlcyDnmoTlpb3nmoQgR1BHIOetvuWQjeOAglxuIgorCisjOiBjb21taXQuYzoxNDE3Cittc2dpZCAiIgorIldhcm5pbmc6IGNvbW1pdCBtZXNzYWdlIGRpZCBub3QgY29uZm9ybSB0byBVVEYtOC5cbiIKKyJZb3UgbWF5IHdhbnQgdG8gYW1lbmQgaXQgYWZ0ZXIgZml4aW5nIHRoZSBtZXNzYWdlLCBvciBzZXQgdGhlIGNvbmZpZ1xuIgorInZhcmlhYmxlIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gdGhlIGVuY29kaW5nIHlvdXIgcHJvamVjdCB1c2VzLlxuIgorbXNnc3RyICIiCisi6K2m5ZGK77ya5o+Q5Lqk6K+05piO5LiN56ym5ZCIIFVURi04IOWtl+espue8lueggeOAglxuIgorIuaCqOWPr+S7pemAmui/h+S/ruihpeaPkOS6pOadpeaUueato+aPkOS6pOivtOaYju+8jOaIluiAheWwhumFjee9ruWPmOmHjyBpMThuLmNvbW1pdGVuY29kaW5nXG4iCisi6K6+572u5Li65oKo6aG555uu5omA55So55qE5a2X56ym57yW56CB44CCXG4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMgorbXNnaWQgImNvbW1pdC1ncmFwaCBmaWxlIGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAi5o+Q5Lqk5Zu+5b2i5paH5Lu25aSq5bCPIgorCisjOiBjb21taXQtZ3JhcGguYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHNpZ25hdHVyZSAlWCBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUgJVgiCittc2dzdHIgIuaPkOS6pOWbvuW9ouetvuWQjSAlWCDlkoznrb7lkI0gJVgg5LiN5Yy56YWNIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAi5o+Q5Lqk5Zu+5b2i54mI5pysICVYIOWSjOeJiOacrCAlWCDkuI3ljLnphY0iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgIuaPkOS6pOWbvuW9ouWTiOW4jOeJiOacrCAlWCDlkozniYjmnKwgJVgg5LiN5Yy56YWNIgorCisjOiBjb21taXQtZ3JhcGguYzoyMjYKK21zZ2lkICJjb21taXQtZ3JhcGggY2h1bmsgbG9va3VwIHRhYmxlIGVudHJ5IG1pc3Npbmc7IGZpbGUgbWF5IGJlIGluY29tcGxldGUiCittc2dzdHIgIuaPkOS6pOWbvuW9ouWdl+afpeaJvuihqOadoeebruS4ouWkse+8jOaWh+S7tuWPr+iDveS4jeWujOaVtCIKKworIzogY29tbWl0LWdyYXBoLmM6MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBpbXByb3BlciBjaHVuayBvZmZzZXQgJTA4eCUwOHgiCittc2dzdHIgIuaPkOS6pOWbvuW9ouS4jeato+ehrueahOWdl+WBj+enuyAlMDh4JTA4eCIKKworIzogY29tbWl0LWdyYXBoLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBpZCAlMDh4IGFwcGVhcnMgbXVsdGlwbGUgdGltZXMiCittc2dzdHIgIuaPkOS6pOWbvuW9ouWdlyBpZCAlMDh4IOWHuueOsOS6huWkmuasoSIKKworIzogY29tbWl0LWdyYXBoLmM6MzQzCittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBubyBiYXNlIGdyYXBocyBjaHVuayIKK21zZ3N0ciAi5o+Q5Lqk5Zu+5b2i5rKh5pyJ5Z+656GA5Zu+5b2i5Z2XIgorCisjOiBjb21taXQtZ3JhcGguYzozNTMKK21zZ2lkICJjb21taXQtZ3JhcGggY2hhaW4gZG9lcyBub3QgbWF0Y2giCittc2dzdHIgIuaPkOS6pOWbvuW9oumTvuS4jeWMuemFjSIKKworIzogY29tbWl0LWdyYXBoLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0LWdyYXBoIGNoYWluOiBsaW5lICclcycgbm90IGEgaGFzaCIKK21zZ3N0ciAi5peg5pWI55qE5o+Q5Lqk5Zu+5b2i6ZO+77ya6KGMICclcycg5LiN5piv5LiA5Liq5ZOI5biM5YC8IgorCisjOiBjb21taXQtZ3JhcGguYzo0MjUKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBhbGwgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICLml6Dms5Xmib7liLDmiYDmnInmj5DkuqTlm77lvaLmlofku7YiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU1OCBjb21taXQtZ3JhcGguYzo2MTgKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBwb3NpdGlvbi4gY29tbWl0LWdyYXBoIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICLml6DmlYjnmoTmj5DkuqTkvY3nva7jgILmj5DkuqTlm77lvaLlj6/og73lt7LmjZ/lnY8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiCittc2dzdHIgIuaXoOazleaJvuWIsOaPkOS6pCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6ODUyIGJ1aWx0aW4vYW0uYzoxMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIuS4jeiDveino+aekOaPkOS6pCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTAxMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCB0eXBlIG9mIG9iamVjdCAlcyIKK21zZ3N0ciAi5peg5rOV6I635b6X5a+56LGhICVzIOexu+WeiyIKKworIzogY29tbWl0LWdyYXBoLmM6MTA0MworbXNnaWQgIkxvYWRpbmcga25vd24gY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOWKoOi9veaPkOS6pOWbvuS4reeahOW3suefpeaPkOS6pCIKKworIzogY29tbWl0LWdyYXBoLmM6MTA2MAorbXNnaWQgIkV4cGFuZGluZyByZWFjaGFibGUgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOaJqeWxleaPkOS6pOWbvuS4reeahOWPr+i+vuaPkOS6pCIKKworIzogY29tbWl0LWdyYXBoLmM6MTA3OQorbXNnaWQgIkNsZWFyaW5nIGNvbW1pdCBtYXJrcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOa4hemZpOaPkOS6pOWbvuS4reeahOaPkOS6pOagh+iusCIKKworIzogY29tbWl0LWdyYXBoLmM6MTA5OAorbXNnaWQgIkNvbXB1dGluZyBjb21taXQgZ3JhcGggZ2VuZXJhdGlvbiBudW1iZXJzIgorbXNnc3RyICLmraPlnKjorqHnrpfmj5DkuqTlm77kuJbku6PmlbDlrZciCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFjayIKK21zZ2lkX3BsdXJhbCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFja3MiCittc2dzdHJbMF0gIuato+WcqCAlZCDkuKrljIXkuK3mn6Xmib7mj5DkuqTlm77nmoTmj5DkuqQiCittc2dzdHJbMV0gIuato+WcqCAlZCDkuKrljIXkuK3mn6Xmib7mj5DkuqTlm77nmoTmj5DkuqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgYWRkaW5nIHBhY2sgJXMiCittc2dzdHIgIua3u+WKoOWMhSAlcyDlh7rplJkiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyBpbmRleCBmb3IgJXMiCittc2dzdHIgIuS4uiAlcyDmiZPlvIDntKLlvJXlh7rplJkiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmcyIKK21zZ3N0clswXSAi5q2j5Zyo5LuOICVkIOS4quW8leeUqOS4reafpeaJvuaPkOS6pOWbvueahOaPkOS6pCIKK21zZ3N0clsxXSAi5q2j5Zyo5LuOICVkIOS4quW8leeUqOS4reafpeaJvuaPkOS6pOWbvueahOaPkOS6pCIKKworIzogY29tbWl0LWdyYXBoLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBvYmplY3QgaWQ6ICVzIgorbXNnc3RyICLml6DmlYjnmoTmj5DkuqTlr7nosaEgSUTvvJolcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTI0OQorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGFtb25nIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLmraPlnKjmiZPljIXlr7nosaHkuK3mn6Xmib7mj5DkuqTlm77nmoTmj5DkuqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNjQKK21zZ2lkICJDb3VudGluZyBkaXN0aW5jdCBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAi5q2j5Zyo6K6h566X5o+Q5Lqk5Zu+5Lit5LiN5ZCM55qE5o+Q5LqkIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjk0Cittc2dpZCAiRmluZGluZyBleHRyYSBlZGdlcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOafpeaJvuaPkOS6pOWbvuS4remineWklueahOi+uSIKKworIzogY29tbWl0LWdyYXBoLmM6MTM0MAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb3JyZWN0IG51bWJlciBvZiBiYXNlIGdyYXBoIGlkcyIKK21zZ3N0ciAi5peg5rOV5YaZ5YWl5q2j56Gu5pWw6YeP55qE5Z+656GA5Zu+5b2iIElEIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzczIG1pZHguYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIgorbXNnc3RyICLkuI3og73kuLogJXMg5Yib5bu65YWI5a+855uu5b2VIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzg1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMwNiBidWlsdGluL3JlcGFjay5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgIuS4jeiDveWIm+W7uiAnJXMnIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzIgorbXNnaWRfcGx1cmFsICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzc2VzIgorbXNnc3RyWzBdICLmraPlnKjnlKggJWQg5q2l5YaZ5Ye65o+Q5Lqk5Zu+IgorbXNnc3RyWzFdICLmraPlnKjnlKggJWQg5q2l5YaZ5Ye65o+Q5Lqk5Zu+IgorCisjOiBjb21taXQtZ3JhcGguYzoxNDg2Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gY29tbWl0LWdyYXBoIGNoYWluIGZpbGUiCittc2dzdHIgIuaXoOazleaJk+W8gOaPkOS6pOWbvuW9oumTvuaWh+S7tiIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ5OAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgYmFzZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAi5peg5rOV6YeN5ZG95ZCN5Z+656GA5o+Q5Lqk5Zu+5b2i5paH5Lu2IgorCisjOiBjb21taXQtZ3JhcGguYzoxNTE4Cittc2dpZCAiZmFpbGVkIHRvIHJlbmFtZSB0ZW1wb3JhcnkgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIuaXoOazlemHjeWRveWQjeS4tOaXtuaPkOS6pOWbvuW9ouaWh+S7tiIKKworIzogY29tbWl0LWdyYXBoLmM6MTYzMQorbXNnaWQgIlNjYW5uaW5nIG1lcmdlZCBjb21taXRzIgorbXNnc3RyICLmraPlnKjmiavmj4/lkIjlubbmj5DkuqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkdXBsaWNhdGUgY29tbWl0IGlkICVzIgorbXNnc3RyICLmhI/lpJbnmoTph43lpI3mj5DkuqQgSUQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NjUKK21zZ2lkICJNZXJnaW5nIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAi5q2j5Zyo5ZCI5bm25o+Q5Lqk5Zu+5b2iIgorCisjOiBjb21taXQtZ3JhcGguYzoxODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBjb21taXQgZ3JhcGggZm9ybWF0IGNhbm5vdCB3cml0ZSAlZCBjb21taXRzIgorbXNnc3RyICLmj5DkuqTlm77moLzlvI/kuI3og73lhpnlhaUgJWQg5Liq5o+Q5LqkIgorCisjOiBjb21taXQtZ3JhcGguYzoxODU1Cittc2dpZCAidG9vIG1hbnkgY29tbWl0cyB0byB3cml0ZSBncmFwaCIKK21zZ3N0ciAi5o+Q5Lqk5aSq5aSa5LiN6IO955S75Zu+IgorCisjOiBjb21taXQtZ3JhcGguYzoxOTQ0Cittc2dpZCAidGhlIGNvbW1pdC1ncmFwaCBmaWxlIGhhcyBpbmNvcnJlY3QgY2hlY2tzdW0gYW5kIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICLmj5DkuqTlm77mlofku7bnmoTmoKHpqoznoIHplJnor6/vvIzlj6/og73lt7Lnu4/mjZ/lnY8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgT0lEIG9yZGVyOiAlcyB0aGVuICVzIgorbXNnc3RyICLmj5DkuqTlm77lvaLnmoTlr7nosaEgSUQg6aG65bqP5LiN5q2j56Gu77yaJXMg54S25ZCOICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTY0IGNvbW1pdC1ncmFwaC5jOjE5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgZmFub3V0IHZhbHVlOiBmYW5vdXRbJWRdID0gJXUgIT0gJXUiCittc2dzdHIgIuaPkOS6pOWbvuW9ouacieS4jeato+ehrueahOaJh+WHuuWAvO+8mmZhbm91dFslZF0gPSAldSAhPSAldSIKKworIzogY29tbWl0LWdyYXBoLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gY29tbWl0LWdyYXBoIgorbXNnc3RyICLml6Dms5Xku47mj5DkuqTlm77lvaLkuK3op6PmnpDmj5DkuqQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5ODkKK21zZ2lkICJWZXJpZnlpbmcgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOagoemqjOaPkOS6pOWbvuS4reeahOaPkOS6pCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAwMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gb2JqZWN0IGRhdGFiYXNlIGZvciBjb21taXQtZ3JhcGgiCittc2dzdHIgIuaXoOazleS7juaPkOS6pOWbvuW9oueahOWvueixoeW6k+S4reino+aekOaPkOS6pCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJyb290IHRyZWUgT0lEIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICVzICE9ICVzIgorbXNnc3RyICLmj5DkuqTlm77lvaLkuK3nmoTmj5DkuqQgJXMg55qE5qC55qCR5a+56LGhIElEIOaYryAlcyAhPSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyBpcyB0b28gbG9uZyIKK21zZ3N0ciAi5o+Q5LqkICVzIOeahOaPkOS6pOWbvuW9oueItuaPkOS6pOWIl+ihqOWkqumVv+S6hiIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGZvciAlcyBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiJXMg55qE5o+Q5Lqk5Zu+5b2i54i25o+Q5Lqk5pivICVzICE9ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIHRlcm1pbmF0ZXMgZWFybHkiCittc2dzdHIgIuaPkOS6pCAlcyDnmoTmj5DkuqTlm77lvaLniLbmj5DkuqTliJfooajov4fml6nnu4jmraIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgZ2VuZXJhdGlvbiBudW1iZXIgemVybyBmb3IgY29tbWl0ICVzLCBidXQgbm9uLXplcm8gZWxzZXdoZXJlIgorbXNnc3RyICLmj5DkuqTlm77lvaLkuK3mj5DkuqQgJXMg55qE5LiW5Luj5Y+35piv6Zu277yM5L2G5YW25a6D5Zyw5pa56Z2e6Zu2IgorCisjOiBjb21taXQtZ3JhcGguYzoyMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb21taXQtZ3JhcGggaGFzIG5vbi16ZXJvIGdlbmVyYXRpb24gbnVtYmVyIGZvciBjb21taXQgJXMsIGJ1dCB6ZXJvIGVsc2V3aGVyZSIKK21zZ3N0ciAi5o+Q5Lqk5Zu+5b2i5Lit5o+Q5LqkICVzIOeahOS4luS7o+WPt+mdnumbtu+8jOS9huWFtuWug+WcsOaWueaYr+mbtiIKKworIzogY29tbWl0LWdyYXBoLmM6MjA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggZ2VuZXJhdGlvbiBmb3IgY29tbWl0ICVzIGlzICV1ICE9ICV1IgorbXNnc3RyICLmj5DkuqTlm77lvaLkuK3nmoTmj5DkuqQgJXMg55qE5LiW5Luj5Y+35pivICV1ICE9ICV1IgorCisjOiBjb21taXQtZ3JhcGguYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCBkYXRlIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKK21zZ3N0ciAi5o+Q5Lqk5Zu+5b2i5Lit5o+Q5LqkICVzIOeahOaPkOS6pOaXpeacn+aYryAlPFBSSXVNQVg+ICE9ICU8UFJJdU1BWD4iCisKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA2IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAi5YaF5a2Y6ICX5bC9IgorCisjOiBjb25maWcuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4Y2VlZGVkIG1heGltdW0gaW5jbHVkZSBkZXB0aCAoJWQpIHdoaWxlIGluY2x1ZGluZ1xuIgorIlx0JXNcbiIKKyJmcm9tXG4iCisiXHQlc1xuIgorIlRoaXMgbWlnaHQgYmUgZHVlIHRvIGNpcmN1bGFyIGluY2x1ZGVzLiIKK21zZ3N0ciAiIgorIui2hei/h+S6huacgOWkp+WMheWQq+a3seW6pu+8iCUxJGTvvInvvIzlvZPku45cbiIKKyJcdCUzJHNcbiIKKyLljIXlkKtcbiIKKyJcdCUyJHNcbiIKKyLov5nlj6/og73mmK/lm6DkuLrlvqrnjq/ljIXlkKvjgIIiCisKKyM6IGNvbmZpZy5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhwYW5kIGluY2x1ZGUgcGF0aCAnJXMnIgorbXNnc3RyICLml6Dms5XmianlsZXljIXlkKvot6/lvoQgJyVzJyIKKworIzogY29uZmlnLmM6MTUxCittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICLnm7jlr7not6/lvoTnmoTphY3nva7mlofku7blvJXnlKjlv4XpobvmnaXoh6rkuo7mlofku7YiCisKKyM6IGNvbmZpZy5jOjE5NworbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAi55u45a+56Lev5b6E55qE6YWN572u5paH5Lu25p2h5Lu25byV55So5b+F6aG75p2l6Ieq5LqO5paH5Lu2IgorCisjOiBjb25maWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlcyIKK21zZ3N0ciAi6ZSu5ZCN5rKh5pyJ5YyF5ZCr5LiA5Liq5bCP6IqC5ZCN56ew77yaJXMiCisKKyM6IGNvbmZpZy5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiB2YXJpYWJsZSBuYW1lOiAlcyIKK21zZ3N0ciAi6ZSu5ZCN5rKh5pyJ5YyF5ZCr5Y+Y6YeP5ZCN77yaJXMiCisKKyM6IGNvbmZpZy5jOjQwNiBzZXF1ZW5jZXIuYzoyNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAi5peg5pWI6ZSu5ZCN77yaJXMiCisKKyM6IGNvbmZpZy5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIgorbXNnc3RyICLml6DmlYjplK7lkI3vvIjmnInmjaLooYznrKbvvInvvJolcyIKKworIzogY29uZmlnLmM6NDQ4IGNvbmZpZy5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBjb25maWcgcGFyYW1ldGVyOiAlcyIKK21zZ3N0ciAi5Lyq6YWN572u5Y+C5pWw77yaJXMiCisKKyM6IGNvbmZpZy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBmb3JtYXQgaW4gJXMiCittc2dzdHIgIiVzIOS4reagvOW8j+mUmeivryIKKworIzogY29uZmlnLmM6ODIxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBibG9iICVzIgorbXNnc3RyICLmlbDmja7lr7nosaEgJTIkcyDkuK3plJnor6/nmoTphY3nva7ooYwgJTEkZCIKKworIzogY29uZmlnLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBmaWxlICVzIgorbXNnc3RyICLmlofku7YgJTIkcyDkuK3plJnor6/nmoTphY3nva7ooYwgJTEkZCIKKworIzogY29uZmlnLmM6ODI5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi5qCH5YeG6L6T5YWl5Lit6ZSZ6K+v55qE6YWN572u6KGMICVkIgorCisjOiBjb25maWcuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN1Ym1vZHVsZS1ibG9iICVzIgorbXNnc3RyICLlrZDmqKHnu4TmlbDmja7lr7nosaEgJTIkcyDkuK3plJnor6/nmoTphY3nva7ooYwgJTEkZCIKKworIzogY29uZmlnLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBjb21tYW5kIGxpbmUgJXMiCittc2dzdHIgIuWRveS7pOihjCAlMiRzIOS4remUmeivr+eahOmFjee9ruihjCAlMSRkIgorCisjOiBjb25maWcuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIgorbXNnc3RyICLlnKggJTIkcyDkuK3plJnor6/nmoTphY3nva7ooYwgJTEkZCIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAib3V0IG9mIHJhbmdlIgorbXNnc3RyICLotoXlh7rojIPlm7QiCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgImludmFsaWQgdW5pdCIKK21zZ3N0ciAi5peg5pWI55qE5Y2V5L2NIgorCisjOiBjb25maWcuYzo5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6ICVzIgorbXNnc3RyICLphY3nva7lj5jph48gJyUyJHMnIOeahOaVsOWtl+WPluWAvCAnJTEkcycg6K6+572u6ZSZ6K+v77yaJTMkcyIKKworIzogY29uZmlnLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGJsb2IgJXM6ICVzIgorbXNnc3RyICLmlbDmja7lr7nosaEgJTMkcyDkuK3phY3nva7lj5jph48gJyUyJHMnIOmUmeivr+eahOWPluWAvCAnJTEkcyfvvJolNCRzIgorCisjOiBjb25maWcuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIgorbXNnc3RyICLmlofku7YgJTMkcyDkuK3phY3nva7lj5jph48gJyUyJHMnIOmUmeivr+eahOWPluWAvCAnJTEkcyfvvJolNCRzIgorCisjOiBjb25maWcuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN0YW5kYXJkIGlucHV0OiAlcyIKK21zZ3N0ciAi5qCH5YeG6L6T5YWl5Lit6YWN572u5Y+Y6YePICclMiRzJyDplJnor6/nmoTlj5blgLwgJyUxJHMn77yaJTMkcyIKKworIzogY29uZmlnLmM6MTAwNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdWJtb2R1bGUtYmxvYiAlczogJXMiCittc2dzdHIgIuWtkOaooee7hOaVsOaNriAlMyRzIOS4remFjee9ruWPmOmHjyAnJTIkcycg6ZSZ6K+v55qE5Y+W5YC8ICclMSRzJ++8miU0JHMiCisKKyM6IGNvbmZpZy5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gY29tbWFuZCBsaW5lICVzOiAlcyIKK21zZ3N0ciAi5ZG95Luk6KGMICUzJHMg5Lit6YWN572u5Y+Y6YePICclMiRzJyDplJnor6/nmoTlj5blgLwgJyUxJHMn77yaJTQkcyIKKworIzogY29uZmlnLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgIuWcqCAlMyRzIOS4remFjee9ruWPmOmHjyAnJTIkcycg6ZSZ6K+v55qE5Y+W5YC8ICclMSRzJ++8miU0JHMiCisKKyM6IGNvbmZpZy5jOjExMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAi5peg5rOV5omp5bGV55So5oi355uu5b2V77yaJyVzJyIKKworIzogY29uZmlnLmM6MTExNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZvciAnJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJyUyJHMnIOeahOWAvCAnJTEkcycg5LiN5piv5LiA5Liq5pyJ5pWI55qE5pe26Ze05oizIgorCisjOiBjb25maWcuYzoxMjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYnJldiBsZW5ndGggb3V0IG9mIHJhbmdlOiAlZCIKK21zZ3N0ciAi57yp5YaZ6ZW/5bqm6LaF5Ye66IyD5Zu077yaJWQiCisKKyM6IGNvbmZpZy5jOjEyMjIgY29uZmlnLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAi6ZSZ6K+v55qEIHpsaWIg5Y6L57yp57qn5YirICVkIgorCisjOiBjb25maWcuYzoxMzI1Cittc2dpZCAiY29yZS5jb21tZW50Q2hhciBzaG91bGQgb25seSBiZSBvbmUgY2hhcmFjdGVyIgorbXNnc3RyICJjb3JlLmNvbW1lbnRDaGFyIOW6lOivpeaYr+S4gOS4quWtl+espiIKKworIzogY29uZmlnLmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiCittc2dzdHIgIuaXoOaViOeahOWvueixoeWIm+W7uuaooeW8j++8miVzIgorCisjOiBjb25maWcuYzoxNDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgIiVzIOeahOWPluWAvOagvOW8j+mUmeivryIKKworIzogY29uZmlnLmM6MTQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiJXMg55qE5Y+W5YC85qC85byP6ZSZ6K+v77yaJXMiCisKKyM6IGNvbmZpZy5jOjE0NTcKK21zZ2lkICJtdXN0IGJlIG9uZSBvZiBub3RoaW5nLCBtYXRjaGluZywgc2ltcGxlLCB1cHN0cmVhbSBvciBjdXJyZW50IgorbXNnc3RyICLlv4XpobvmmK/lhbbkuK3kuYvkuIDvvJpub3RoaW5n44CBbWF0Y2hpbmfjgIFzaW1wbGXjgIF1cHN0cmVhbSDmiJYgY3VycmVudCIKKworIzogY29uZmlnLmM6MTUxOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIumUmeivr+eahOaJk+WMheWOi+e8qee6p+WIqyAlZCIKKworIzogY29uZmlnLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBjb25maWcgYmxvYiBvYmplY3QgJyVzJyIKK21zZ3N0ciAi5peg5rOV5LuO5pWw5o2u5a+56LGhICclcycg5Yqg6L296YWN572uIgorCisjOiBjb25maWcuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgYmxvYiIKK21zZ3N0ciAi5byV55SoICclcycg5rKh5pyJ5oyH5ZCR5LiA5Liq5pWw5o2u5a+56LGhIgorCisjOiBjb25maWcuYzoxNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIGNvbmZpZyBibG9iICclcyciCittc2dzdHIgIuS4jeiDveino+aekOmFjee9ruWvueixoSAnJXMnIgorCisjOiBjb25maWcuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAlcyIKK21zZ3N0ciAi6Kej5p6QICVzIOWksei0pSIKKworIzogY29uZmlnLmM6MTc0MworbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICLml6Dms5Xop6PmnpDlkb3ku6TooYzkuK3nmoTphY3nva4iCisKKyM6IGNvbmZpZy5jOjIwOTcKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgIuWcqOivu+WPlumFjee9ruaWh+S7tuaXtumBh+WIsOacquefpemUmeivryIKKworIzogY29uZmlnLmM6MjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICLml6DmlYggJXPvvJonJXMnIgorCisjOiBjb25maWcuYzoyMzEyCisjLCBjLWZvcm1hdAorbXNnaWQgInNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSB2YWx1ZSAnJWQnIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCIKK21zZ3N0ciAic3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIOeahOWPluWAvCAnJWQnIOW6lOivpeS7i+S6jiAwIOWSjCAxMDAg5LmL6Ze0IgorCisjOiBjb25maWcuYzoyMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJXMnIGZyb20gY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q5ZG95Luk6KGM6YWN572u5Lit55qEICclcyciCisKKyM6IGNvbmZpZy5jOjIzNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICLlnKjmlofku7YgJyUyJHMnIOeahOesrCAlMyRkIOihjOWPkeeOsOmUmeivr+eahOmFjee9ruWPmOmHjyAnJTEkcyciCisKKyM6IGNvbmZpZy5jOjI0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWUgJyVzJyIKK21zZ3N0ciAi5peg5pWI55qE5bCP6IqC5ZCN56ewICclcyciCisKKyM6IGNvbmZpZy5jOjI0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiJXMg5pyJ5aSa5Liq5Y+W5YC8IgorCisjOiBjb25maWcuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICLlhpnlhaXmlrDnmoTphY3nva7mlofku7YgJXMg5aSx6LSlIgorCisjOiBjb25maWcuYzoyNzU0IGNvbmZpZy5jOjMwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIuS4jeiDvemUgeWumumFjee9ruaWh+S7tiAlcyIKKworIzogY29uZmlnLmM6Mjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nICVzIgorbXNnc3RyICLmiZPlvIAgJXMiCisKKyM6IGNvbmZpZy5jOjI4MDAgYnVpbHRpbi9jb25maWcuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAi5peg5pWI5qih5byP77yaJXMiCisKKyM6IGNvbmZpZy5jOjI4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAi5peg5pWI55qE6YWN572u5paH5Lu2ICVzIgorCisjOiBjb25maWcuYzoyODM4IGNvbmZpZy5jOjMwOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnN0YXQgb24gJXMgZmFpbGVkIgorbXNnc3RyICLlr7kgJXMg6LCD55SoIGZzdGF0IOWksei0pSIKKworIzogY29uZmlnLmM6Mjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAnJXMnIgorbXNnc3RyICLkuI3og70gbW1hcCAnJXMnIgorCisjOiBjb25maWcuYzoyODU4IGNvbmZpZy5jOjMwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2htb2Qgb24gJXMgZmFpbGVkIgorbXNnc3RyICLlr7kgJXMg6LCD55SoIGNobW9kIOWksei0pSIKKworIzogY29uZmlnLmM6Mjk0MyBjb25maWcuYzozMTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAi5LiN6IO95YaZ5YWl6YWN572u5paH5Lu2ICVzIgorCisjOiBjb25maWcuYzoyOTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73orr7nva4gJyVzJyDkuLogJyVzJyIKKworIzogY29uZmlnLmM6Mjk3OSBidWlsdGluL3JlbW90ZS5jOjY1NSBidWlsdGluL3JlbW90ZS5jOjg0OSBidWlsdGluL3JlbW90ZS5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Y+W5raI6K6+572uICclcyciCisKKyM6IGNvbmZpZy5jOjMwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWU6ICVzIgorbXNnc3RyICLml6DmlYjnmoTlsI/oioLlkI3np7DvvJolcyIKKworIzogY29uZmlnLmM6MzIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIHZhbHVlIGZvciAnJXMnIgorbXNnc3RyICIlcyDnmoTlj5blgLznvLrlpLEiCisKKyM6IGNvbm5lY3QuYzo2MQorbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdXBvbiBpbml0aWFsIGNvbnRhY3QiCittc2dzdHIgIui/nOerr+WcqOWIneWni+i/nuaOpeaXtuWNs+aMguaWrSIKKworIzogY29ubmVjdC5jOjYzCittc2dpZCAiIgorIkNvdWxkIG5vdCByZWFkIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkuXG4iCisiXG4iCisiUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBhY2Nlc3MgcmlnaHRzXG4iCisiYW5kIHRoZSByZXBvc2l0b3J5IGV4aXN0cy4iCittc2dzdHIgIiIKKyLml6Dms5Xor7vlj5bov5znqIvku5PlupPjgIJcbiIKKyJcbiIKKyLor7fnoa7orqTmgqjmnInmraPnoa7nmoTorr/pl67mnYPpmZDlubbkuJTku5PlupPlrZjlnKjjgIIiCisKKyM6IGNvbm5lY3QuYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0ICclcyciCittc2dzdHIgIuacjeWKoeWZqOS4jeaUr+aMgSAnJXMnIgorCisjOiBjb25uZWN0LmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciBkb2Vzbid0IHN1cHBvcnQgZmVhdHVyZSAnJXMnIgorbXNnc3RyICLmnI3liqHlmajkuI3mlK/mjIHnibnmgKcgJyVzJyIKKworIzogY29ubmVjdC5jOjExNAorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAi5Zyo6IO95Yqb5LmL5ZCO5bqU5Li65LiA5LiqIGZsdXNoIOWMhSIKKworIzogY29ubmVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBjYXBhYmlsaXRpZXMgYWZ0ZXIgZmlyc3QgbGluZSAnJXMnIgorbXNnc3RyICLlv73nlaXnrKzkuIDooYwgJyVzJyDkuYvlkI7nmoTog73lipvlrZfmrrUiCisKKyM6IGNvbm5lY3QuYzoyNTIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCBjYXBhYmlsaXRpZXNee30iCittc2dzdHIgIuWNj+iurumUmeivr++8muaEj+WklueahCBjYXBhYmlsaXRpZXNee30iCisKKyM6IGNvbm5lY3QuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYWxsb3cgc2hhLTEsIGdvdCAnJXMnIgorbXNnc3RyICLljY/orq7plJnor6/vvJrpooTmnJ/mtYXlhYvpmoYgc2hhLTHvvIzljbTlvpfliLAgJyVzJyIKKworIzogY29ubmVjdC5jOjI3NQorbXNnaWQgInJlcG9zaXRvcnkgb24gdGhlIG90aGVyIGVuZCBjYW5ub3QgYmUgc2hhbGxvdyIKK21zZ3N0ciAi5Y+m5LiA56uv55qE5LuT5bqT5LiN6IO95piv5rWF5YWL6ZqG5LuT5bqTIgorCisjOiBjb25uZWN0LmM6MzEzCittc2dpZCAiaW52YWxpZCBwYWNrZXQiCittc2dzdHIgIuaXoOaViOaVsOaNruWMhSIKKworIzogY29ubmVjdC5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCAnJXMnIgorbXNnc3RyICLljY/orq7plJnor6/vvJrmhI/lpJbnmoQgJyVzJyIKKworIzogY29ubmVjdC5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxzLXJlZnMgcmVzcG9uc2U6ICVzIgorbXNnc3RyICLml6DmlYjnmoQgbHMtcmVmcyDlk43lupTvvJolcyIKKworIzogY29ubmVjdC5jOjQ0NQorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIHJlZiBsaXN0aW5nIgorbXNnc3RyICLlnKjlvJXnlKjliJfooajkuYvlkI7lupTor6XmnInkuIDkuKogZmx1c2gg5YyFIgorCisjOiBjb25uZWN0LmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sICclcycgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi5LiN5pSv5oyBICclcycg5Y2P6K6uIgorCisjOiBjb25uZWN0LmM6NTk1Cittc2dpZCAidW5hYmxlIHRvIHNldCBTT19LRUVQQUxJVkUgb24gc29ja2V0IgorbXNnc3RyICLml6Dms5XkuLogc29ja2V0IOiuvue9riBTT19LRUVQQUxJVkUiCisKKyM6IGNvbm5lY3QuYzo2MzUgY29ubmVjdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29raW5nIHVwICVzIC4uLiAiCittc2dzdHIgIuafpeaJviAlcyAuLi4iCisKKyM6IGNvbm5lY3QuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgJXMgKHBvcnQgJXMpICglcykiCittc2dzdHIgIuaXoOazleafpeaJviAlc++8iOerr+WPoyAlc++8ie+8iCVz77yJIgorCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJMb29raW5nIHVwICVzIC4uLiAiCisjOiBjb25uZWN0LmM6NjQzIGNvbm5lY3QuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmUuXG4iCisiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKK21zZ3N0ciAiIgorIuWujOaIkOOAglxuIgorIui/nuaOpeWIsCAlc++8iOerr+WPoyAlc++8iS4uLiAiCisKKyM6IGNvbm5lY3QuYzo2NjUgY29ubmVjdC5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIGNvbm5lY3QgdG8gJXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyLml6Dms5Xov57mjqXliLAgJXPvvJpcbiIKKyIlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKKyM6IGNvbm5lY3QuYzo2NzEgY29ubmVjdC5jOjc0OAorbXNnaWQgImRvbmUuIgorbXNnc3RyICLlrozmiJDjgIIiCisKKyM6IGNvbm5lY3QuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIKK21zZ3N0ciAi5peg5rOV5p+l5om+ICVz77yIJXPvvIkiCisKKyM6IGNvbm5lY3QuYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwb3J0ICVzIgorbXNnc3RyICLmnKrnn6Xnq6/lj6MgJXMiCisKKyM6IGNvbm5lY3QuYzo4NDUgY29ubmVjdC5jOjExNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBob3N0bmFtZSAnJXMnIGJsb2NrZWQiCittc2dzdHIgIuW3sumYu+atouWlh+aAqueahOS4u+acuuWQjSAnJXMnIgorCisjOiBjb25uZWN0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcG9ydCAnJXMnIGJsb2NrZWQiCittc2dzdHIgIuW3sumYu+atouWlh+aAqueahOerr+WPo+WPtyAnJXMnIgorCisjOiBjb25uZWN0LmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGFydCBwcm94eSAlcyIKK21zZ3N0ciAi5LiN6IO95ZCv5Yqo5Luj55CGICVzIgorCisjOiBjb25uZWN0LmM6OTI4Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQ7IHNlZSAnZ2l0IGhlbHAgcHVsbCcgZm9yIHZhbGlkIHVybCBzeW50YXgiCittc2dzdHIgIuacquaMh+Wumui3r+W+hO+8jOaJp+ihjCAnZ2l0IGhlbHAgcHVsbCcg5p+l55yL5pyJ5pWI55qEIHVybCDor63ms5UiCisKKyM6IGNvbm5lY3QuYzoxMTIzCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNCIKK21zZ3N0ciAic3NoIOWPmOS9kyAnc2ltcGxlJyDkuI3mlK/mjIEgLTQiCisKKyM6IGNvbm5lY3QuYzoxMTM1Cittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNiIKK21zZ3N0ciAic3NoIOWPmOS9kyAnc2ltcGxlJyDkuI3mlK/mjIEgLTYiCisKKyM6IGNvbm5lY3QuYzoxMTUyCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIHBvcnQiCittc2dzdHIgInNzaCDlj5jkvZMgJ3NpbXBsZScg5LiN5pSv5oyB6K6+572u56uv5Y+jIgorCisjOiBjb25uZWN0LmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBhdGhuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAi5bey6Zi75q2i5aWH5oCq55qE6Lev5b6E5ZCNICclcyciCisKKyM6IGNvbm5lY3QuYzoxMzExCittc2dpZCAidW5hYmxlIHRvIGZvcmsiCittc2dzdHIgIuaXoOazlSBmb3JrIgorCisjOiBjb25uZWN0ZWQuYzo5OCBidWlsdGluL2ZzY2suYzoyMDggYnVpbHRpbi9wcnVuZS5jOjQzCittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IgorbXNnc3RyICLmraPlnKjmo4Dmn6Xov57pgJrmgKciCisKKyM6IGNvbm5lY3RlZC5jOjExMAorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgIuS4jeiDveaJp+ihjCAnZ2l0IHJldi1saXN0JyIKKworIzogY29ubmVjdGVkLmM6MTMwCittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0IgorbXNnc3RyICLlhpnlhaUgcmV2LWxpc3Qg5aSx6LSlIgorCisjOiBjb25uZWN0ZWQuYzoxMzcKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbiIKK21zZ3N0ciAi5YWz6ZetIHJldi1saXN0IOeahOagh+WHhui+k+WFpeWksei0pSIKKworIzogY29udmVydC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIgorbXNnc3RyICLpnZ7ms5XnmoQgY3JsZiDliqjkvZwgJWQiCisKKyM6IGNvbnZlcnQuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1JMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcyIKK21zZ3N0ciAiJXMg5Lit55qEIENSTEYg5bCG6KKrIExGIOabv+aNoiIKKworIzogY29udmVydC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyIlcyDkuK3nmoQgQ1JMRiDlsIbooqsgTEYg5pu/5o2i44CCPFxuIgorIuWcqOW3peS9nOWMuuS4reivpeaWh+S7tuS7jeS/neaMgeWOn+acieeahOaNouihjOespuOAgiIKKworIzogY29udmVydC5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIgorbXNnc3RyICLmlofku7YgJXMg5Lit55qEIExGIOWwhuiiqyBDUkxGIOabv+aNoiIKKworIzogY29udmVydC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyIlcyDkuK3nmoQgTEYg5bCG6KKrIENSTEYg5pu/5o2i44CCXG4iCisi5Zyo5bel5L2c5Yy65Lit6K+l5paH5Lu25LuN5L+d5oyB5Y6f5pyJ55qE5o2i6KGM56ymIgorCisjOiBjb252ZXJ0LmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyBwcm9oaWJpdGVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAi5aaC5p6c5L2/55SoICUyJHMg57yW56CB77yM56aB5q2i5ZyoICclMSRzJyDkuK3kvb/nlKggQk9NIgorCisjOiBjb252ZXJ0LmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lLipzIGFzICIKKyJ3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisi5paH5Lu2ICclcycg5YyF5ZCr5LiA5Liq5a2X6IqC6aG65bqP5qCH6K6w77yIQk9N77yJ44CC6K+35L2/55SoIFVURi0lLipzIOS9nOS4uuW3peS9nOWMuue8lueggeOAgiIKKworIzogY29udmVydC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcmVxdWlyZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICLlpoLmnpznvJbnoIHkuLogJTIkc++8jOmcgOimgeWcqCAnJTEkcycg5Lit5L2/55SoIEJPTSIKKworIzogY29udmVydC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBpcyBtaXNzaW5nIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lc0JFIG9yIFVURi0iCisiJXNMRSAoZGVwZW5kaW5nIG9uIHRoZSBieXRlIG9yZGVyKSBhcyB3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisi5paH5Lu2ICclcycg57y65aSx5LiA5Liq5a2X6IqC6aG65bqP5qCH6K6w77yIQk9N77yJ44CC6K+35L2/55SoIFVURi0lc0JFIG9yIFVURi0lc0xF77yI5Y+W5Yaz5LqO5a2XIgorIuiKguW6j++8ieS9nOS4uuW3peS9nOWMuue8lueggeOAgiIKKworIzogY29udmVydC5jOjQxOSBjb252ZXJ0LmM6NDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBlbmNvZGUgJyVzJyBmcm9tICVzIHRvICVzIgorbXNnc3RyICLml6Dms5Xlr7kgJyVzJyDov5vooYzku44gJXMg5YiwICVzIOeahOe8lueggSIKKworIzogY29udmVydC5jOjQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICJlbmNvZGluZyAnJXMnIGZyb20gJXMgdG8gJXMgYW5kIGJhY2sgaXMgbm90IHRoZSBzYW1lIgorbXNnc3RyICLlsIYnJXMnIOeahOe8lueggeS7jiAlcyDliLAgJXMg5p2l5Zue6L2s5o2i5LiN5LiA6Ie0IgorCisjOiBjb252ZXJ0LmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmb3JrIHRvIHJ1biBleHRlcm5hbCBmaWx0ZXIgJyVzJyIKK21zZ3N0ciAi5LiN6IO9IGZvcmsg5Lul5omn6KGM5aSW6YOo6L+H5ruk5ZmoICclcyciCisKKyM6IGNvbnZlcnQuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZlZWQgdGhlIGlucHV0IHRvIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICLkuI3og73lsIbovpPlhaXkvKDpgJLnu5nlpJbpg6jov4fmu6TlmaggJyVzJyIKKworIzogY29udmVydC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQgJWQiCittc2dzdHIgIuWklumDqOi/h+a7pOWZqCAnJXMnIOWksei0peeggSAlZCIKKworIzogY29udmVydC5jOjczMCBjb252ZXJ0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZnJvbSBleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIuS7juWklumDqOi/h+a7pOWZqCAnJXMnIOivu+WPluWksei0pSIKKworIzogY29udmVydC5jOjczNiBjb252ZXJ0LmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi5aSW6YOo6L+H5ruk5ZmoICclcycg5aSx6LSlIgorCisjOiBjb252ZXJ0LmM6ODM5Cittc2dpZCAidW5leHBlY3RlZCBmaWx0ZXIgdHlwZSIKK21zZ3N0ciAi5oSP5aSW55qE6L+H5ruk57G75Z6LIgorCisjOiBjb252ZXJ0LmM6ODUwCittc2dpZCAicGF0aCBuYW1lIHRvbyBsb25nIGZvciBleHRlcm5hbCBmaWx0ZXIiCittc2dzdHIgIuWklumDqOi/h+a7pOWZqOeahOi3r+W+hOWQjeWkqumVvyIKKworIzogY29udmVydC5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXh0ZXJuYWwgZmlsdGVyICclcycgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGFsdGhvdWdoIG5vdCBhbGwgcGF0aHMgaGF2ZSAiCisiYmVlbiBmaWx0ZXJlZCIKK21zZ3N0ciAi5aSW6YOo6L+H5ruk5ZmoICclcycg5LiN5YaN5Y+v55So77yM5L2G5bm26Z2e5omA5pyJ6Lev5b6E6YO95bey6L+H5rukIgorCisjOiBjb252ZXJ0LmM6MTIyMworbXNnaWQgInRydWUvZmFsc2UgYXJlIG5vIHZhbGlkIHdvcmtpbmctdHJlZS1lbmNvZGluZ3MiCittc2dzdHIgInRydWUvZmFsc2Ug5LiN5piv5pyJ5pWI55qE5bel5L2c5Yy657yW56CBIgorCisjOiBjb252ZXJ0LmM6MTQxMSBjb252ZXJ0LmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4gZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICIlc++8mmNsZWFuIOi/h+a7pOWZqCAnJXMnIOWksei0pSIKKworIzogY29udmVydC5jOjE0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHNtdWRnZSBmaWx0ZXIgJXMgZmFpbGVkIgorbXNnc3RyICIlc++8mnNtdWRnZSDov4fmu6TlmaggJXMg5aSx6LSlIgorCisjOiBkYXRlLmM6MTM4Cittc2dpZCAiaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAi5Zyo5bCG5p2lIgorCisjOiBkYXRlLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiDnp5Lpkp/liY0iCittc2dzdHJbMV0gIiU8UFJJdU1BWD4g56eS6ZKf5YmNIgorCisjOiBkYXRlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbWludXRlIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiDliIbpkp/liY0iCittc2dzdHJbMV0gIiU8UFJJdU1BWD4g5YiG6ZKf5YmNIgorCisjOiBkYXRlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gaG91cnMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IOWwj+aXtuWJjSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiDlsI/ml7bliY0iCisKKyM6IGRhdGUuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IGRheXMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IOWkqeWJjSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiDlpKnliY0iCisKKyM6IGRhdGUuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB3ZWVrcyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4g5ZGo5YmNIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IOWRqOWJjSIKKworIzogZGF0ZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IOS4quaciOWJjSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiDkuKrmnIjliY0iCisKKyM6IGRhdGUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IOW5tCIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiDlubQiCisKKyMuIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiCisjOiBkYXRlLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiJXMgJTxQUkl1TUFYPiDkuKrmnIjliY0iCittc2dzdHJbMV0gIiVzICU8UFJJdU1BWD4g5Liq5pyI5YmNIgorCisjOiBkYXRlLmM6MTk3IGRhdGUuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4g5bm05YmNIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IOW5tOWJjSIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI3MgorbXNnaWQgIlByb3BhZ2F0aW5nIGlzbGFuZCBtYXJrcyIKK21zZ3N0ciAi5q2j5Zyo5Lyg5pKt5pWw5o2u5bKb5qCH6K6wIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB0cmVlIG9iamVjdCAlcyIKK21zZ3N0ciAi5Z2P55qE5qCR5a+56LGhICVzIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIGlzbGFuZCByZWdleCBmb3IgJyVzJzogJXMiCittc2dzdHIgIuacquiDveWKoOi9vSAnJXMnIOeahOaVsOaNruWym+ato+WImeihqOi+vuW8j++8miVzIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlzbGFuZCByZWdleCBmcm9tIGNvbmZpZyBoYXMgdG9vIG1hbnkgY2FwdHVyZSBncm91cHMgKG1heD0lZCkiCittc2dzdHIgIuadpeiHqiBjb25maWcg55qE5pWw5o2u5bKb5q2j5YiZ6KGo6L6+5byP5pyJ5aSq5aSa55qE5o2V6I6357uE77yI5pyA5aSaICVkIOS4qu+8iSIKKworIzogZGVsdGEtaXNsYW5kcy5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJrZWQgJWQgaXNsYW5kcywgZG9uZS5cbiIKK21zZ3N0ciAi5bey5qCH6K6wICVkIOS4quaVsOaNruWym++8jOe7k+adn+OAglxuIgorCisjOiBkaWZmY29yZS1vcmRlci5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9yZGVyZmlsZSAnJXMnIgorbXNnc3RyICLor7vlj5bmjpLluo/mlofku7YgJyVzJyDlpLHotKUiCisKKyM6IGRpZmZjb3JlLXJlbmFtZS5jOjU0MworbXNnaWQgIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICLmraPlnKjov5vooYzpnZ7nsr7noa7nmoTph43lkb3lkI3mjqLmtYsiCisKKyM6IGRpZmYtbm8taW5kZXguYzoyMzgKK21zZ2lkICJnaXQgZGlmZiAtLW5vLWluZGV4IFs8b3B0aW9ucz5dIDxwYXRoPiA8cGF0aD4iCittc2dzdHIgImdpdCBkaWZmIC0tbm8taW5kZXggWzzpgInpobk+XSA86Lev5b6EPiA86Lev5b6EPiIKKworIzogZGlmZi1uby1pbmRleC5jOjI2MworbXNnaWQgIiIKKyJOb3QgYSBnaXQgcmVwb3NpdG9yeS4gVXNlIC0tbm8taW5kZXggdG8gY29tcGFyZSB0d28gcGF0aHMgb3V0c2lkZSBhIHdvcmtpbmcgIgorInRyZWUiCittc2dzdHIgIuS4jeaYr+S4gOS4qiBnaXQg5LuT5bqT44CC5L2/55SoIC0tbm8taW5kZXgg5q+U6L6D5bel5L2c5Yy65LmL5aSW55qE5Lik5Liq6Lev5b6EIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGRpZmYuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIgorbXNnc3RyICIgIOaXoOazleino+aekCBkaXJzdGF0IOaIquatou+8iGN1dC1vZmbvvInnmb7liIbmr5QgJyVzJ1xuIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGRpZmYuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclcydcbiIKK21zZ3N0ciAiICDmnKrnn6XnmoQgZGlyc3RhdCDlj4LmlbAgJyVzJ1xuIgorCisjOiBkaWZmLmM6Mjk2Cittc2dpZCAiIgorImNvbG9yIG1vdmVkIHNldHRpbmcgbXVzdCBiZSBvbmUgb2YgJ25vJywgJ2RlZmF1bHQnLCAnYmxvY2tzJywgJ3plYnJhJywgIgorIidkaW1tZWQtemVicmEnLCAncGxhaW4nIgorbXNnc3RyICIiCisi56e75Yqo55qE6aKc6Imy6K6+572u5b+F6aG75pivICdubyfjgIEnZGVmYXVsdCfjgIEnYmxvY2tzJ+OAgSd6ZWJyYSfjgIEnZGltbWVkX3plYnJhJyDmiJYgIgorIidwbGFpbiciCisKKyM6IGRpZmYuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVua25vd24gY29sb3ItbW92ZWQtd3MgbW9kZSAnJXMnLCBwb3NzaWJsZSB2YWx1ZXMgYXJlICdpZ25vcmUtc3BhY2UtY2hhbmdlJywgIgorIidpZ25vcmUtc3BhY2UtYXQtZW9sJywgJ2lnbm9yZS1hbGwtc3BhY2UnLCAnYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlJyIKK21zZ3N0ciAiIgorIuacquefpeeahCBjb2xvci1tb3ZlZC13cyDmqKHlvI8gJyVzJ++8jOWPr+iDveeahOWPluWAvOaciSAnaWdub3JlLXNwYWNlLWNoYW5nZSfjgIEnaWdub3JlLSIKKyJzcGFjZS1hdC1lb2wn44CBJ2lnbm9yZS1hbGwtc3BhY2Un44CBJ2FsbG93LWluZGVudGF0aW9uLWNoYW5nZSciCisKKyM6IGRpZmYuYzozMzIKK21zZ2lkICIiCisiY29sb3ItbW92ZWQtd3M6IGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciAiCisid2hpdGVzcGFjZSBtb2RlcyIKK21zZ3N0ciAiY29sb3ItbW92ZWQtd3PvvJphbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2Ug5LiN6IO95LiO5YW25a6D56m655m95a2X56ym5qih5byP5YWx55SoIgorCisjOiBkaWZmLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdmFsdWUgZm9yICdkaWZmLnN1Ym1vZHVsZScgY29uZmlnIHZhcmlhYmxlOiAnJXMnIgorbXNnc3RyICLphY3nva7lj5jph48gJ2RpZmYuc3VibW9kdWxlJyDmnKrnn6XnmoTlj5blgLzvvJonJXMnIgorCisjOiBkaWZmLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3VuZCBlcnJvcnMgaW4gJ2RpZmYuZGlyc3RhdCcgY29uZmlnIHZhcmlhYmxlOlxuIgorIiVzIgorbXNnc3RyICIiCisi5Y+R546w6YWN572u5Y+Y6YePICdkaWZmLmRpcnN0YXQnIOS4reeahOmUmeivr++8mlxuIgorIiVzIgorCisjOiBkaWZmLmM6NDIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICLlpJbpg6ggZGlmZiDpgIDlh7rvvIzlgZzmraLlnKggJXMiCisKKyM6IGRpZmYuYzo0NTQ3Cittc2dpZCAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tbmFtZS1vbmx544CBLS1uYW1lLXN0YXR1c+OAgS0tY2hlY2sg5ZKMIC1zIOaYr+S6kuaWpeeahCIKKworIzogZGlmZi5jOjQ1NTAKK21zZ2lkICItRywgLVMgYW5kIC0tZmluZC1vYmplY3QgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLUfjgIEtUyDlkowgLS1maW5kLW9iamVjdCDmmK/kupLmlqXnmoQiCisKKyM6IGRpZmYuYzo0NjI4Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIi0tZm9sbG93IOaYjuehruimgeaxguWPqui3n+S4gOS4qui3r+W+hOinhOagvCIKKworIzogZGlmZi5jOjQ2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLXN0YXQgdmFsdWU6ICVzIgorbXNnc3RyICLml6DmlYjnmoQgLS1zdGF0IOWAvO+8miVzIgorCisjOiBkaWZmLmM6NDY4MSBkaWZmLmM6NDY4NiBkaWZmLmM6NDY5MSBkaWZmLmM6NDY5NiBkaWZmLmM6NTIwOQorIzogcGFyc2Utb3B0aW9ucy5jOjE5NyBwYXJzZS1vcHRpb25zLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiVzIOacn+acm+S4gOS4quaVsOWtl+WAvCIKKworIzogZGlmZi5jOjQ3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuaXoOazleino+aekCAtLWRpcnN0YXQvLVgg6YCJ6aG555qE5Y+C5pWw77yaXG4iCisiJXMiCisKKyM6IGRpZmYuYzo0Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY2hhbmdlIGNsYXNzICclYycgaW4gLS1kaWZmLWZpbHRlcj0lcyIKK21zZ3N0ciAiLS1kaWZmLWZpbHRlcj0lMiRzIOS4reacquefpeeahOWPmOabtOexuyAnJTEkYyciCisKKyM6IGRpZmYuYzo0ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgYWZ0ZXIgd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCittc2dzdHIgIndzLWVycm9yLWhpZ2hsaWdodD0lLipzIOS5i+WQjuacquefpeeahOWAvCIKKworIzogZGlmZi5jOjQ4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAi5LiN6IO96Kej5p6QICclcyciCisKKyM6IGRpZmYuYzo0ODg2IGRpZmYuYzo0ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgPG4+LzxtPiBmb3JtIgorbXNnc3RyICIlcyDmnJ/mnJsgPG4+LzxtPiDmoLzlvI8iCisKKyM6IGRpZmYuYzo0OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBjaGFyYWN0ZXIsIGdvdCAnJXMnIgorbXNnc3RyICIlcyDmnJ/mnJvkuIDkuKrlrZfnrKbvvIzlvpfliLAgJyVzJyIKKworIzogZGlmZi5jOjQ5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0tY29sb3ItbW92ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLlnY/nmoQgLS1jb2xvci1tb3ZlZCDlj4LmlbDvvJolcyIKKworIzogZGlmZi5jOjQ5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlICclcycgaW4gLS1jb2xvci1tb3ZlZC13cyIKK21zZ3N0ciAiLS1jb2xvci1tb3ZlZC13cyDkuK3nmoTml6DmlYjmqKHlvI8gJyVzJyAiCisKKyM6IGRpZmYuYzo0OTg0Cittc2dpZCAiIgorIm9wdGlvbiBkaWZmLWFsZ29yaXRobSBhY2NlcHRzIFwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2VcIiBhbmQgIgorIlwiaGlzdG9ncmFtXCIiCittc2dzdHIgIiIKKyJkaWZmLWFsZ29yaXRobSDpgInpobnmnIkgXCJteWVyc1wi44CBXCJtaW5pbWFsXCLjgIFcInBhdGllbmNlXCIg5ZKMIFwiaGlzdG9ncmFtXCIiCisKKyM6IGRpZmYuYzo1MDIwIGRpZmYuYzo1MDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgdG8gJXMiCittc2dzdHIgIiVzIOeahOWPguaVsOaXoOaViCIKKworIzogZGlmZi5jOjUxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIC0tc3VibW9kdWxlIG9wdGlvbiBwYXJhbWV0ZXI6ICclcyciCittc2dzdHIgIuaXoOazleino+aekCAtLXN1Ym1vZHVsZSDpgInpobnnmoTlj4LmlbDvvJonJXMnIgorCisjOiBkaWZmLmM6NTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS13b3JkLWRpZmYgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLlnY/nmoQgLS13b3JkLWRpZmYg5Y+C5pWw77yaJXMiCisKKyM6IGRpZmYuYzo1MjU3Cittc2dpZCAiRGlmZiBvdXRwdXQgZm9ybWF0IG9wdGlvbnMiCittc2dzdHIgIuW3ruW8gui+k+WHuuagvOW8j+WMlumAiemhuSIKKworIzogZGlmZi5jOjUyNTkgZGlmZi5jOjUyNjUKK21zZ2lkICJnZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAi55Sf5oiQ6KGl5LiBIgorCisjOiBkaWZmLmM6NTI2MiBidWlsdGluL2xvZy5jOjE3MworbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICLkuI3mmL7npLrlt67lvILovpPlh7oiCisKKyM6IGRpZmYuYzo1MjY3IGRpZmYuYzo1MzgxIGRpZmYuYzo1Mzg4Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGRpZmYuYzo1MjY4IGRpZmYuYzo1MjcxCittc2dpZCAiZ2VuZXJhdGUgZGlmZnMgd2l0aCA8bj4gbGluZXMgY29udGV4dCIKK21zZ3N0ciAi55Sf5oiQ5ZCrIDxuPiDooYzkuIrkuIvmlofnmoTlt67lvIIiCisKKyM6IGRpZmYuYzo1MjczCittc2dpZCAiZ2VuZXJhdGUgdGhlIGRpZmYgaW4gcmF3IGZvcm1hdCIKK21zZ3N0ciAi55Sf5oiQ5Y6f5aeL5qC85byP55qE5beu5byCIgorCisjOiBkaWZmLmM6NTI3NgorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXJhdyciCittc2dzdHIgIuWSjCAnLXAgLS1yYXcnIOWQjOS5iSIKKworIzogZGlmZi5jOjUyODAKK21zZ2lkICJzeW5vbnltIGZvciAnLXAgLS1zdGF0JyIKK21zZ3N0ciAi5ZKMICctcCAtLXN0YXQnIOWQjOS5iSIKKworIzogZGlmZi5jOjUyODQKK21zZ2lkICJtYWNoaW5lIGZyaWVuZGx5IC0tc3RhdCIKK21zZ3N0ciAi5py65Zmo5Y+L5aW955qEIC0tc3RhdCIKKworIzogZGlmZi5jOjUyODcKK21zZ2lkICJvdXRwdXQgb25seSB0aGUgbGFzdCBsaW5lIG9mIC0tc3RhdCIKK21zZ3N0ciAi5Y+q6L6T5Ye6IC0tc3RhdCDnmoTmnIDlkI7kuIDooYwiCisKKyM6IGRpZmYuYzo1Mjg5IGRpZmYuYzo1Mjk3Cittc2dpZCAiPHBhcmFtMSxwYXJhbTI+Li4uIgorbXNnc3RyICI85Y+C5pWwMSzlj4LmlbAyPi4uLiIKKworIzogZGlmZi5jOjUyOTAKK21zZ2lkICIiCisib3V0cHV0IHRoZSBkaXN0cmlidXRpb24gb2YgcmVsYXRpdmUgYW1vdW50IG9mIGNoYW5nZXMgZm9yIGVhY2ggc3ViLWRpcmVjdG9yeSIKK21zZ3N0ciAi6L6T5Ye65q+P5Liq5a2Q55uu5b2V55u45a+55Y+Y5pu055qE5YiG5biDIgorCisjOiBkaWZmLmM6NTI5NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1jdW11bGF0aXZlIgorbXNnc3RyICLlkowgLS1kaXJzdGF0PWN1bXVsYXRpdmUg5ZCM5LmJIgorCisjOiBkaWZmLmM6NTI5OAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1maWxlcyxwYXJhbTEscGFyYW0yLi4uIgorbXNnc3RyICLmmK8gLS1kaXJzdGF0PWZpbGVzLHBhcmFtMSxwYXJhbTIuLi4g55qE5ZCM5LmJ6K+NIgorCisjOiBkaWZmLmM6NTMwMgorbXNnaWQgIndhcm4gaWYgY2hhbmdlcyBpbnRyb2R1Y2UgY29uZmxpY3QgbWFya2VycyBvciB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAi5aaC5p6c5Y+Y5pu05Lit5byV5YWl5Yay56qB5a6a55WM56ym5oiW56m655m96ZSZ6K+v77yM57uZ5Ye66K2m5ZGKIgorCisjOiBkaWZmLmM6NTMwNQorbXNnaWQgImNvbmRlbnNlZCBzdW1tYXJ5IHN1Y2ggYXMgY3JlYXRpb25zLCByZW5hbWVzIGFuZCBtb2RlIGNoYW5nZXMiCittc2dzdHIgIueyvueugOaRmOimge+8jOS+i+WmguWIm+W7uuOAgemHjeWRveWQjeWSjOaooeW8j+WPmOabtCIKKworIzogZGlmZi5jOjUzMDgKK21zZ2lkICJzaG93IG9ubHkgbmFtZXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAi5Y+q5pi+56S65Y+Y5pu05paH5Lu255qE5paH5Lu25ZCNIgorCisjOiBkaWZmLmM6NTMxMQorbXNnaWQgInNob3cgb25seSBuYW1lcyBhbmQgc3RhdHVzIG9mIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgIuWPquaYvuekuuWPmOabtOaWh+S7tueahOaWh+S7tuWQjeWSjOeKtuaAgSIKKworIzogZGlmZi5jOjUzMTMKK21zZ2lkICI8d2lkdGg+Wyw8bmFtZS13aWR0aD5bLDxjb3VudD5dXSIKK21zZ3N0ciAiPOWuveW6pj5bLDzmlofku7blkI3lrr3luqY+Wyw85qyh5pWwPl1dIgorCisjOiBkaWZmLmM6NTMxNAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IgorbXNnc3RyICLnlJ/miJDlt67lvILnu5/orqHvvIhkaWZmc3RhdO+8iSIKKworIzogZGlmZi5jOjUzMTYgZGlmZi5jOjUzMTkgZGlmZi5jOjUzMjIKK21zZ2lkICI8d2lkdGg+IgorbXNnc3RyICI85a695bqmPiIKKworIzogZGlmZi5jOjUzMTcKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gd2lkdGgiCittc2dzdHIgIuS9v+eUqOe7meWumueahOmVv+W6pueUn+aIkOW3ruW8gue7n+iuoSIKKworIzogZGlmZi5jOjUzMjAKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gbmFtZSB3aWR0aCIKK21zZ3N0ciAi5L2/55So57uZ5a6a55qE5paH5Lu25ZCN6ZW/5bqm55Sf5oiQ5beu5byC57uf6K6hIgorCisjOiBkaWZmLmM6NTMyMworbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiBncmFwaCB3aWR0aCIKK21zZ3N0ciAi5L2/55So57uZ5a6a55qE5Zu+5b2i6ZW/5bqm55Sf5oiQ5beu5byC57uf6K6hIgorCisjOiBkaWZmLmM6NTMyNQorbXNnaWQgIjxjb3VudD4iCittc2dzdHIgIjzmrKHmlbA+IgorCisjOiBkaWZmLmM6NTMyNgorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggbGltaXRlZCBsaW5lcyIKK21zZ3N0ciAi55Sf5oiQ5pyJ6ZmQ6KGM5pWw55qE5beu5byC57uf6K6hIgorCisjOiBkaWZmLmM6NTMyOQorbXNnaWQgImdlbmVyYXRlIGNvbXBhY3Qgc3VtbWFyeSBpbiBkaWZmc3RhdCIKK21zZ3N0ciAi55Sf5oiQ5beu5byC57uf6K6h55qE566A5rSB5pGY6KaBIgorCisjOiBkaWZmLmM6NTMzMgorbXNnaWQgIm91dHB1dCBhIGJpbmFyeSBkaWZmIHRoYXQgY2FuIGJlIGFwcGxpZWQiCittc2dzdHIgIui+k+WHuuS4gOS4quWPr+S7peW6lOeUqOeahOS6jOi/m+WItuW3ruW8giIKKworIzogZGlmZi5jOjUzMzUKK21zZ2lkICJzaG93IGZ1bGwgcHJlLSBhbmQgcG9zdC1pbWFnZSBvYmplY3QgbmFtZXMgb24gdGhlIFwiaW5kZXhcIiBsaW5lcyIKK21zZ3N0ciAi5ZyoIFwiaW5kZXhcIiDooYzmmL7npLrlrozmlbTnmoTliY3lkI7lr7nosaHlkI3np7AiCisKKyM6IGRpZmYuYzo1MzM3Cittc2dpZCAic2hvdyBjb2xvcmVkIGRpZmYiCittc2dzdHIgIuaYvuekuuW4puminOiJsueahOW3ruW8giIKKworIzogZGlmZi5jOjUzMzgKK21zZ2lkICI8a2luZD4iCittc2dzdHIgIjznsbvlnos+IgorCisjOiBkaWZmLmM6NTMzOQorbXNnaWQgIiIKKyJoaWdobGlnaHQgd2hpdGVzcGFjZSBlcnJvcnMgaW4gdGhlICdjb250ZXh0JywgJ29sZCcgb3IgJ25ldycgbGluZXMgaW4gdGhlICIKKyJkaWZmIgorbXNnc3RyICLlr7nkuo7lt67lvILkuK3nmoTkuIrkuIvmlofjgIHml6fnmoTlkozmlrDnmoTooYzvvIzliqDkuq7mmL7npLrplJnor6/nmoTnqbrnmb3lrZfnrKYiCisKKyM6IGRpZmYuYzo1MzQyCittc2dpZCAiIgorImRvIG5vdCBtdW5nZSBwYXRobmFtZXMgYW5kIHVzZSBOVUxzIGFzIG91dHB1dCBmaWVsZCB0ZXJtaW5hdG9ycyBpbiAtLXJhdyBvciAiCisiLS1udW1zdGF0IgorbXNnc3RyICIiCisi5ZyoIC0tcmF3IOaIluiAhSAtLW51bXN0YXQg5Lit77yM5LiN5a+56Lev5b6E5a2X56ym6L2s56CB5bm25L2/55SoIE5VTCDlrZfnrKblgZrkuLrovpPlh7rlrZfmrrXnmoTliIbpmpQiCisi56ymIgorCisjOiBkaWZmLmM6NTM0NSBkaWZmLmM6NTM0OCBkaWZmLmM6NTM1MSBkaWZmLmM6NTQ1NworbXNnaWQgIjxwcmVmaXg+IgorbXNnc3RyICI85YmN57yAPiIKKworIzogZGlmZi5jOjUzNDYKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBzb3VyY2UgcHJlZml4IGluc3RlYWQgb2YgXCJhL1wiIgorbXNnc3RyICLmmL7npLrnu5nlrprnmoTmupDliY3nvIDlj5bku6MgXCJhL1wiIgorCisjOiBkaWZmLmM6NTM0OQorbXNnaWQgInNob3cgdGhlIGdpdmVuIGRlc3RpbmF0aW9uIHByZWZpeCBpbnN0ZWFkIG9mIFwiYi9cIiIKK21zZ3N0ciAi5pi+56S657uZ5a6a55qE55uu5qCH5YmN57yA5Y+W5LujIFwiYi9cIiIKKworIzogZGlmZi5jOjUzNTIKK21zZ2lkICJwcmVwZW5kIGFuIGFkZGl0aW9uYWwgcHJlZml4IHRvIGV2ZXJ5IGxpbmUgb2Ygb3V0cHV0IgorbXNnc3RyICLovpPlh7rnmoTmr4/kuIDooYzpmYTliqDliY3nvIAiCisKKyM6IGRpZmYuYzo1MzU1Cittc2dpZCAiZG8gbm90IHNob3cgYW55IHNvdXJjZSBvciBkZXN0aW5hdGlvbiBwcmVmaXgiCittc2dzdHIgIuS4jeaYvuekuuS7u+S9lea6kOWSjOebruagh+WJjee8gCIKKworIzogZGlmZi5jOjUzNTgKK21zZ2lkICJzaG93IGNvbnRleHQgYmV0d2VlbiBkaWZmIGh1bmtzIHVwIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGxpbmVzIgorbXNnc3RyICLmmL7npLrmjIflrprooYzmlbDnmoTlt67lvILlnZfpl7TnmoTkuIrkuIvmlociCisKKyM6IGRpZmYuYzo1MzYyIGRpZmYuYzo1MzY3IGRpZmYuYzo1MzcyCittc2dpZCAiPGNoYXI+IgorbXNnc3RyICI85a2X56ymPiIKKworIzogZGlmZi5jOjUzNjMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBuZXcgbGluZSBpbnN0ZWFkIG9mICcrJyIKK21zZ3N0ciAi5oyH5a6a5LiA5Liq5a2X56ym5Y+W5LujICcrJyDmnaXooajnpLrmlrDnmoTkuIDooYwiCisKKyM6IGRpZmYuYzo1MzY4Cittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGFuIG9sZCBsaW5lIGluc3RlYWQgb2YgJy0nIgorbXNnc3RyICLmjIflrprkuIDkuKrlrZfnrKblj5bku6MgJy0nIOadpeihqOekuuaXp+eahOS4gOihjCIKKworIzogZGlmZi5jOjUzNzMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBjb250ZXh0IGluc3RlYWQgb2YgJyAnIgorbXNnc3RyICLmjIflrprkuIDkuKrlrZfnrKblj5bku6MgJyAnIOadpeihqOekuuS4gOihjOS4iuS4i+aWhyIKKworIzogZGlmZi5jOjUzNzYKK21zZ2lkICJEaWZmIHJlbmFtZSBvcHRpb25zIgorbXNnc3RyICLlt67lvILph43lkb3lkI3pgInpobkiCisKKyM6IGRpZmYuYzo1Mzc3Cittc2dpZCAiPG4+Wy88bT5dIgorbXNnc3RyICI8bj5bLzxtPl0iCisKKyM6IGRpZmYuYzo1Mzc4Cittc2dpZCAiYnJlYWsgY29tcGxldGUgcmV3cml0ZSBjaGFuZ2VzIGludG8gcGFpcnMgb2YgZGVsZXRlIGFuZCBjcmVhdGUiCittc2dzdHIgIuWwhuWujOWFqOmHjeWGmeeahOWPmOabtOaJk+egtOS4uuaIkOWvueeahOWIoOmZpOWSjOWIm+W7uiIKKworIzogZGlmZi5jOjUzODIKK21zZ2lkICJkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAi5qOA5rWL6YeN5ZG95ZCNIgorCisjOiBkaWZmLmM6NTM4NgorbXNnaWQgIm9taXQgdGhlIHByZWltYWdlIGZvciBkZWxldGVzIgorbXNnc3RyICLnnIHnlaXliKDpmaTmk43kvZznmoTlt67lvILovpPlh7oiCisKKyM6IGRpZmYuYzo1Mzg5Cittc2dpZCAiZGV0ZWN0IGNvcGllcyIKK21zZ3N0ciAi5qOA5rWL5ou36LSdIgorCisjOiBkaWZmLmM6NTM5MworbXNnaWQgInVzZSB1bm1vZGlmaWVkIGZpbGVzIGFzIHNvdXJjZSB0byBmaW5kIGNvcGllcyIKK21zZ3N0ciAi5L2/55So5pyq5L+u5pS555qE5paH5Lu25YGa5Li65Y+R546w5ou36LSd55qE5rqQIgorCisjOiBkaWZmLmM6NTM5NQorbXNnaWQgImRpc2FibGUgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAi56aB55So6YeN5ZG95ZCN5o6i5rWLIgorCisjOiBkaWZmLmM6NTM5OAorbXNnaWQgInVzZSBlbXB0eSBibG9icyBhcyByZW5hbWUgc291cmNlIgorbXNnc3RyICLkvb/nlKjnqbrnmoTmlbDmja7lr7nosaHlgZrkuLrph43lkb3lkI3nmoTmupAiCisKKyM6IGRpZmYuYzo1NDAwCittc2dpZCAiY29udGludWUgbGlzdGluZyB0aGUgaGlzdG9yeSBvZiBhIGZpbGUgYmV5b25kIHJlbmFtZXMiCittc2dzdHIgIue7p+e7reWIl+WHuuaWh+S7tumHjeWRveWQjeS7peWklueahOWOhuWPsuiusOW9lSIKKworIzogZGlmZi5jOjU0MDMKK21zZ2lkICIiCisicHJldmVudCByZW5hbWUvY29weSBkZXRlY3Rpb24gaWYgdGhlIG51bWJlciBvZiByZW5hbWUvY29weSB0YXJnZXRzIGV4Y2VlZHMgIgorImdpdmVuIGxpbWl0IgorbXNnc3RyICLlpoLmnpzph43lkb3lkI0v5ou36LSd55uu5qCH6LaF6L+H57uZ5a6a55qE6ZmQ5Yi277yM56aB5q2i6YeN5ZG95ZCNL+aLt+i0neajgOa1iyIKKworIzogZGlmZi5jOjU0MDUKK21zZ2lkICJEaWZmIGFsZ29yaXRobSBvcHRpb25zIgorbXNnc3RyICLlt67lvILnrpfms5XpgInpobkiCisKKyM6IGRpZmYuYzo1NDA3Cittc2dpZCAicHJvZHVjZSB0aGUgc21hbGxlc3QgcG9zc2libGUgZGlmZiIKK21zZ3N0ciAi55Sf5oiQ5bC95Y+v6IO95bCP55qE5beu5byCIgorCisjOiBkaWZmLmM6NTQxMAorbXNnaWQgImlnbm9yZSB3aGl0ZXNwYWNlIHdoZW4gY29tcGFyaW5nIGxpbmVzIgorbXNnc3RyICLooYzmr5TovoPml7blv73nlaXnqbrnmb3lrZfnrKYiCisKKyM6IGRpZmYuYzo1NDEzCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gYW1vdW50IG9mIHdoaXRlc3BhY2UiCittc2dzdHIgIuW/veeVpeepuueZveWtl+espueahOWPmOabtCIKKworIzogZGlmZi5jOjU0MTYKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIGF0IEVPTCIKK21zZ3N0ciAi5b+955Wl6KGM5bC+55qE56m655m95a2X56ym5Y+Y5pu0IgorCisjOiBkaWZmLmM6NTQxOQorbXNnaWQgImlnbm9yZSBjYXJyaWVyLXJldHVybiBhdCB0aGUgZW5kIG9mIGxpbmUiCittc2dzdHIgIuW/veeVpeihjOWwvueahOWbnui9puespu+8iENS77yJIgorCisjOiBkaWZmLmM6NTQyMgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHdob3NlIGxpbmVzIGFyZSBhbGwgYmxhbmsiCittc2dzdHIgIuW/veeVpeaVtOihjOmDveaYr+epuueZveeahOWPmOabtCIKKworIzogZGlmZi5jOjU0MjUKK21zZ2lkICJoZXVyaXN0aWMgdG8gc2hpZnQgZGlmZiBodW5rIGJvdW5kYXJpZXMgZm9yIGVhc3kgcmVhZGluZyIKK21zZ3N0ciAi5ZCv5Y+R5byP6L2s5o2i5beu5byC6L6555WM5Lul5L6/6ZiF6K+7IgorCisjOiBkaWZmLmM6NTQyOAorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwicGF0aWVuY2UgZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAi5L2/55SoIFwicGF0aWVuY2UgZGlmZlwiIOeul+azleeUn+aIkOW3ruW8giIKKworIzogZGlmZi5jOjU0MzIKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImhpc3RvZ3JhbSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICLkvb/nlKggXCJoaXN0b2dyYW0gZGlmZlwiIOeul+azleeUn+aIkOW3ruW8giIKKworIzogZGlmZi5jOjU0MzQKK21zZ2lkICI8YWxnb3JpdGhtPiIKK21zZ3N0ciAiPOeul+azlT4iCisKKyM6IGRpZmYuYzo1NDM1Cittc2dpZCAiY2hvb3NlIGEgZGlmZiBhbGdvcml0aG0iCittc2dzdHIgIumAieaLqeS4gOS4quW3ruW8gueul+azlSIKKworIzogZGlmZi5jOjU0MzcKK21zZ2lkICI8dGV4dD4iCittc2dzdHIgIjzmlofmnKw+IgorCisjOiBkaWZmLmM6NTQzOAorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwiYW5jaG9yZWQgZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAi5L2/55SoIFwiYW5jaG9yZWQgZGlmZlwiIOeul+azleeUn+aIkOW3ruW8giIKKworIzogZGlmZi5jOjU0NDAgZGlmZi5jOjU0NDkgZGlmZi5jOjU0NTIKK21zZ2lkICI8bW9kZT4iCittc2dzdHIgIjzmqKHlvI8+IgorCisjOiBkaWZmLmM6NTQ0MQorbXNnaWQgInNob3cgd29yZCBkaWZmLCB1c2luZyA8bW9kZT4gdG8gZGVsaW1pdCBjaGFuZ2VkIHdvcmRzIgorbXNnc3RyICLmmL7npLrljZXor43lt67lvILvvIzkvb/nlKggPOaooeW8jz4g5YiG6ZqU5Y+Y5pu055qE5Y2V6K+NIgorCisjOiBkaWZmLmM6NTQ0MyBkaWZmLmM6NTQ0NiBkaWZmLmM6NTQ5MQorbXNnaWQgIjxyZWdleD4iCittc2dzdHIgIjzmraPliJk+IgorCisjOiBkaWZmLmM6NTQ0NAorbXNnaWQgInVzZSA8cmVnZXg+IHRvIGRlY2lkZSB3aGF0IGEgd29yZCBpcyIKK21zZ3N0ciAi5L2/55SoIDzmraPliJnooajovr7lvI8+IOehruWumuS9leS4uuS4gOS4quivjSIKKworIzogZGlmZi5jOjU0NDcKK21zZ2lkICJlcXVpdmFsZW50IHRvIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxyZWdleD4iCittc2dzdHIgIuebuOW9k+S6jiAtLXdvcmQtZGlmZj1jb2xvciAtLXdvcmQtZGlmZi1yZWdleD085q2j5YiZPiIKKworIzogZGlmZi5jOjU0NTAKK21zZ2lkICJtb3ZlZCBsaW5lcyBvZiBjb2RlIGFyZSBjb2xvcmVkIGRpZmZlcmVudGx5IgorbXNnc3RyICLnp7vliqjnmoTku6PnoIHooYznlKjkuI3lkIzmlrnlvI/nnYDoibIiCisKKyM6IGRpZmYuYzo1NDUzCittc2dpZCAiaG93IHdoaXRlIHNwYWNlcyBhcmUgaWdub3JlZCBpbiAtLWNvbG9yLW1vdmVkIgorbXNnc3RyICLlnKggLS1jb2xvci1tb3ZlZCDkuIvlpoLkvZXlv73nlaXnqbrnmb3lrZfnrKYiCisKKyM6IGRpZmYuYzo1NDU2Cittc2dpZCAiT3RoZXIgZGlmZiBvcHRpb25zIgorbXNnc3RyICLlhbblroPlt67lvILpgInpobkiCisKKyM6IGRpZmYuYzo1NDU4Cittc2dpZCAid2hlbiBydW4gZnJvbSBzdWJkaXIsIGV4Y2x1ZGUgY2hhbmdlcyBvdXRzaWRlIGFuZCBzaG93IHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICLlvZPku47lrZDnm67lvZXov5DooYzvvIzmjpLpmaTnm67lvZXkuYvlpJbnmoTlj5jmm7TlubbmmL7npLrnm7jlr7not6/lvoQiCisKKyM6IGRpZmYuYzo1NDYyCittc2dpZCAidHJlYXQgYWxsIGZpbGVzIGFzIHRleHQiCittc2dzdHIgIuaKiuaJgOacieaWh+S7tuW9k+WBmuaWh+acrOWkhOeQhiIKKworIzogZGlmZi5jOjU0NjQKK21zZ2lkICJzd2FwIHR3byBpbnB1dHMsIHJldmVyc2UgdGhlIGRpZmYiCittc2dzdHIgIuS6pOaNouS4pOS4qui+k+WFpe+8jOWPjei9rOW3ruW8giIKKworIzogZGlmZi5jOjU0NjYKK21zZ2lkICJleGl0IHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzLCAwIG90aGVyd2lzZSIKK21zZ3N0ciAi5pyJ5beu5byC5pe26YCA5Ye656CB5Li6IDHvvIzlkKbliJnkuLogMCIKKworIzogZGlmZi5jOjU0NjgKK21zZ2lkICJkaXNhYmxlIGFsbCBvdXRwdXQgb2YgdGhlIHByb2dyYW0iCittc2dzdHIgIuemgeeUqOacrOeoi+W6j+eahOaJgOaciei+k+WHuiIKKworIzogZGlmZi5jOjU0NzAKK21zZ2lkICJhbGxvdyBhbiBleHRlcm5hbCBkaWZmIGhlbHBlciB0byBiZSBleGVjdXRlZCIKK21zZ3N0ciAi5YWB6K645omn6KGM5LiA5Liq5aSW572u55qE5beu5byC5Yqp5omLIgorCisjOiBkaWZmLmM6NTQ3MgorbXNnaWQgInJ1biBleHRlcm5hbCB0ZXh0IGNvbnZlcnNpb24gZmlsdGVycyB3aGVuIGNvbXBhcmluZyBiaW5hcnkgZmlsZXMiCittc2dzdHIgIuW9k+avlOi+g+S6jOi/m+WItuaWh+S7tuaXtu+8jOi/kOihjOWklumDqOeahOaWh+acrOi9rOaNoui/h+a7pOWZqCIKKworIzogZGlmZi5jOjU0NzQKK21zZ2lkICI8d2hlbj4iCittc2dzdHIgIjzkvZXml7Y+IgorCisjOiBkaWZmLmM6NTQ3NQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgaW4gdGhlIGRpZmYgZ2VuZXJhdGlvbiIKK21zZ3N0ciAi5Zyo55Sf5oiQ5beu5byC5pe277yM5b+955Wl5a2Q5qih57uE55qE5pu05pS5IgorCisjOiBkaWZmLmM6NTQ3OAorbXNnaWQgIjxmb3JtYXQ+IgorbXNnc3RyICI85qC85byPPiIKKworIzogZGlmZi5jOjU0NzkKK21zZ2lkICJzcGVjaWZ5IGhvdyBkaWZmZXJlbmNlcyBpbiBzdWJtb2R1bGVzIGFyZSBzaG93biIKK21zZ3N0ciAi5oyH5a6a5a2Q5qih57uE55qE5beu5byC5aaC5L2V5pi+56S6IgorCisjOiBkaWZmLmM6NTQ4MworbXNnaWQgImhpZGUgJ2dpdCBhZGQgLU4nIGVudHJpZXMgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIumakOiXj+e0ouW8leS4rSAnZ2l0IGFkZCAtTicg5p2h55uuIgorCisjOiBkaWZmLmM6NTQ4NgorbXNnaWQgInRyZWF0ICdnaXQgYWRkIC1OJyBlbnRyaWVzIGFzIHJlYWwgaW4gdGhlIGluZGV4IgorbXNnc3RyICLlsIbntKLlvJXkuK0gJ2dpdCBhZGQgLU4nIOadoeebruW9k+WBmuecn+WunueahCIKKworIzogZGlmZi5jOjU0ODgKK21zZ2lkICI8c3RyaW5nPiIKK21zZ3N0ciAiPOWtl+espuS4sj4iCisKKyM6IGRpZmYuYzo1NDg5Cittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisic3RyaW5nIgorbXNnc3RyICLmn6Xmib7mlLnlj5jkuobmjIflrprlrZfnrKbkuLLlh7rnjrDmrKHmlbDnmoTlt67lvIIiCisKKyM6IGRpZmYuYzo1NDkyCittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisicmVnZXgiCittc2dzdHIgIuafpeaJvuaUueWPmOaMh+Wumuato+WImeWMuemFjeWHuueOsOasoeaVsOeahOW3ruW8giIKKworIzogZGlmZi5jOjU0OTUKK21zZ2lkICJzaG93IGFsbCBjaGFuZ2VzIGluIHRoZSBjaGFuZ2VzZXQgd2l0aCAtUyBvciAtRyIKK21zZ3N0ciAi5pi+56S65L2/55SoIC1TIOaIliAtRyDnmoTlj5jmm7Tpm4bnmoTmiYDmnInlj5jmm7QiCisKKyM6IGRpZmYuYzo1NDk4Cittc2dpZCAidHJlYXQgPHN0cmluZz4gaW4gLVMgYXMgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICLlsIYgLVMg55qEIDxzdHJpbmc+IOW9k+WBmuaJqeWxleeahCBQT1NJWCDmraPliJnooajovr7lvI8iCisKKyM6IGRpZmYuYzo1NTAxCittc2dpZCAiY29udHJvbCB0aGUgb3JkZXIgaW4gd2hpY2ggZmlsZXMgYXBwZWFyIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIuaOp+WItui+k+WHuuS4reeahOaWh+S7tuaYvuekuumhuuW6jyIKKworIzogZGlmZi5jOjU1MDIKK21zZ2lkICI8b2JqZWN0LWlkPiIKK21zZ3N0ciAiPOWvueixoSBJRD4iCisKKyM6IGRpZmYuYzo1NTAzCittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisib2JqZWN0IgorbXNnc3RyICLmn6Xmib7mlLnlj5jmjIflrprlr7nosaHlh7rnjrDmrKHmlbDnmoTlt67lvIIiCisKKyM6IGRpZmYuYzo1NTA1Cittc2dpZCAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorbXNnc3RyICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCisKKyM6IGRpZmYuYzo1NTA2Cittc2dpZCAic2VsZWN0IGZpbGVzIGJ5IGRpZmYgdHlwZSIKK21zZ3N0ciAi6YCa6L+H5beu5byC57G75Z6L6YCJ5oup5paH5Lu2IgorCisjOiBkaWZmLmM6NTUwOAorbXNnaWQgIjxmaWxlPiIKK21zZ3N0ciAiPOaWh+S7tj4iCisKKyM6IGRpZmYuYzo1NTA5Cittc2dpZCAiT3V0cHV0IHRvIGEgc3BlY2lmaWMgZmlsZSIKK21zZ3N0ciAi6L6T5Ye65Yiw5LiA5Liq5oyH5a6a55qE5paH5Lu2IgorCisjOiBkaWZmLmM6NjE2NAorbXNnaWQgImluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiB3YXMgc2tpcHBlZCBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICLlm6DkuLrmlofku7blpKrlpJrvvIznlaXov4fkuI3kuKXmoLznmoTph43lkb3lkI3mo4Dmn6XjgIIiCisKKyM6IGRpZmYuYzo2MTY3Cittc2dpZCAib25seSBmb3VuZCBjb3BpZXMgZnJvbSBtb2RpZmllZCBwYXRocyBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICLlm6DkuLrmlofku7blpKrlpJrvvIzlj6rlnKjkv67mlLnnmoTot6/lvoTkuK3mn6Xmib7mi7fotJ3jgIIiCisKKyM6IGRpZmYuYzo2MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgbWF5IHdhbnQgdG8gc2V0IHlvdXIgJXMgdmFyaWFibGUgdG8gYXQgbGVhc3QgJWQgYW5kIHJldHJ5IHRoZSBjb21tYW5kLiIKK21zZ3N0ciAi5oKo5Y+v6IO95oOz6KaB5bCG5Y+Y6YePICVzIOiuvue9ruS4uuiHs+WwkSAlZCDlubblho3mrKHmiafooYzmraTlkb3ku6TjgIIiCisKKyM6IGRpci5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGUocykga25vd24gdG8gZ2l0IgorbXNnc3RyICLot6/lvoTop4TmoLwgJyVzJyDmnKrljLnphY3ku7vkvZUgZ2l0IOW3suefpeaWh+S7tiIKKworIzogZGlyLmM6Njk1IGRpci5jOjcyNCBkaXIuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBhdHRlcm46ICclcyciCittc2dzdHIgIuacquivhuWIq+eahOaooeW8j++8miclcyciCisKKyM6IGRpci5jOjc1NCBkaXIuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIG5lZ2F0aXZlIHBhdHRlcm46ICclcyciCittc2dzdHIgIuacquivhuWIq+eahOWPjeWQkeaooeW8j++8miclcyciCisKKyM6IGRpci5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBoYXZlIGlzc3VlczogcGF0dGVybiAnJXMnIGlzIHJlcGVhdGVkIgorbXNnc3RyICLmgqjnmoQgc3BhcnNlLWNoZWNrb3V0IOaWh+S7tuWPr+iDveaciemXrumimO+8mumHjeWkjeeahOaooeW8jyAnJXMnIgorCisjOiBkaXIuYzo3OTYKK21zZ2lkICJkaXNhYmxpbmcgY29uZSBwYXR0ZXJuIG1hdGNoaW5nIgorbXNnc3RyICLnpoHmraIgY29uZSDmqKHlvI/ljLnphY0iCisKKyM6IGRpci5jOjExNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiCittc2dzdHIgIuS4jeiDveWwhiAlcyDnlKjkvZzmjpLpmaTmlofku7YiCisKKyM6IGRpci5jOjIxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gZGlyZWN0b3J5ICclcyciCittc2dzdHIgIuS4jeiDveaJk+W8gOebruW9lSAnJXMnIgorCisjOiBkaXIuYzoyNDc5Cittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgIuaXoOazleiOt+W+l+WGheaguOWQjeensOWSjOS/oeaBryIKKworIzogZGlyLmM6MjYwMworbXNnaWQgInVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbSBvciBsb2NhdGlvbiIKK21zZ3N0ciAi57yT5a2Y5pyq6Lef6Liq5paH5Lu25Zyo5pys57O757uf5oiW5L2N572u5Lit6KKr56aB55SoIgorCisjOiBkaXIuYzozNDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCBpbiByZXBvICVzIgorbXNnc3RyICLku5PlupMgJXMg5Lit55qE57Si5byV5paH5Lu25o2f5Z2PIgorCisjOiBkaXIuYzozNDUyIGRpci5jOjM0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgJXMiCittc2dzdHIgIuS4jeiDveS4uiAlcyDliJvlu7rnm67lvZUiCisKKyM6IGRpci5jOjM0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1pZ3JhdGUgZ2l0IGRpcmVjdG9yeSBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO95LuOICclcycg6L+B56e7IGdpdCDnm67lvZXliLAgJyVzJyIKKworIzogZWRpdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGludDogV2FpdGluZyBmb3IgeW91ciBlZGl0b3IgdG8gY2xvc2UgdGhlIGZpbGUuLi4lYyIKK21zZ3N0ciAi5o+Q56S677ya562J5b6F5oKo55qE57yW6L6R5Zmo5YWz6Zet5paH5Lu2Li4uJWMiCisKKyM6IGVudHJ5LmM6MTc4Cittc2dpZCAiRmlsdGVyaW5nIGNvbnRlbnQiCittc2dzdHIgIui/h+a7pOWGheWuuSIKKworIzogZW50cnkuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73lr7nmlofku7YgJyVzJyDosIPnlKggc3RhdCIKKworIzogZW52aXJvbm1lbnQuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpdCBuYW1lc3BhY2UgcGF0aCBcIiVzXCIiCittc2dzdHIgIumUmeivr+eahCBnaXQg5ZCN5a2X56m66Ze06Lev5b6EIFwiJXNcIiIKKworIzogZW52aXJvbm1lbnQuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBHSVRfRElSIHRvICclcyciCittc2dzdHIgIuS4jeiDveiuvue9riBHSVRfRElSIOS4uiAnJXMnIgorCisjOiBleGVjLWNtZC5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmdzIHRvIHJ1biAlcyIKK21zZ3N0ciAi5omn6KGMICVzIOeahOWPguaVsOWkquWkmiIKKworIzogZmV0Y2gtcGFjay5jOjE1MAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNr77ya5bqU5Li6IHNoYWxsb3cg5YiX6KGoIgorCisjOiBmZXRjaC1wYWNrLmM6MTUzCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIGEgZmx1c2ggcGFja2V0IGFmdGVyIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2vvvJrlnKjmtYXlhYvpmobliJfooajkuYvlkI7mnJ/mnJvkuIDkuKogZmx1c2gg5YyFIgorCisjOiBmZXRjaC1wYWNrLmM6MTY0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2vvvJrmnJ/mnJsgQUNLL05BS++8jOWNtOW+l+WIsCBmbHVzaCDljIUiCisKKyM6IGZldGNoLXBhY2suYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCAnJXMnIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFja++8muW6lOS4uiBBQ0svTkFL77yM5Y205b6X5YiwICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxOTUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdG8gcmVtb3RlIgorbXNnc3RyICLml6Dms5XlhpnliLDov5znqIsiCisKKyM6IGZldGNoLXBhY2suYzoyNTcKK21zZ2lkICItLXN0YXRlbGVzcy1ycGMgcmVxdWlyZXMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICItLXN0YXRlbGVzcy1ycGMg6ZyA6KaBIG11bHRpX2Fja19kZXRhaWxlZCIKKworIzogZmV0Y2gtcGFjay5jOjM1NiBmZXRjaC1wYWNrLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgIuaXoOaViOeahCBzaGFsbG93IOS/oeaBr++8miVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzYyIGZldGNoLXBhY2suYzoxMzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdW5zaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICLml6DmlYjnmoQgdW5zaGFsbG93IOS/oeaBr++8miVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY0IGZldGNoLXBhY2suYzoxMzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICLlr7nosaHmnKrmib7liLDvvJolcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NyBmZXRjaC1wYWNrLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICLlr7nosaHkuK3lh7rplJnvvJolcyIKKworIzogZmV0Y2gtcGFjay5jOjM2OSBmZXRjaC1wYWNrLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaGFsbG93IGZvdW5kOiAlcyIKK21zZ3N0ciAi5pyq5Y+R546wIHNoYWxsb3fvvJolcyIKKworIzogZmV0Y2gtcGFjay5jOjM3MiBmZXRjaC1wYWNrLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBzaGFsbG93L3Vuc2hhbGxvdywgZ290ICVzIgorbXNnc3RyICLlupTkuLogc2hhbGxvdy91bnNoYWxsb3fvvIzljbTlvpfliLAgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICVkICVzIgorbXNnc3RyICLlvpfliLAgJXMgJWQgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgJXMiCittc2dzdHIgIuaXoOaViOaPkOS6pCAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQ2MgorbXNnaWQgImdpdmluZyB1cCIKK21zZ3N0ciAi5pS+5byDIgorCisjOiBmZXRjaC1wYWNrLmM6NDc1IHByb2dyZXNzLmM6MzIzCittc2dpZCAiZG9uZSIKK21zZ3N0ciAi5a6M5oiQIgorCisjOiBmZXRjaC1wYWNrLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAoJWQpICVzIgorbXNnc3RyICLlvpfliLAgJXMgKCVkKSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nICVzIGFzIGNvbXBsZXRlIgorbXNnc3RyICLmoIforrAgJXMg5Li65a6M5oiQIgorCisjOiBmZXRjaC1wYWNrLmM6NzU0CisjLCBjLWZvcm1hdAorbXNnaWQgImFscmVhZHkgaGF2ZSAlcyAoJXMpIgorbXNnc3RyICLlt7Lnu4/mnIkgJXPvvIglc++8iSIKKworIzogZmV0Y2gtcGFjay5jOjgxOAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJmZXRjaC1wYWNr77ya5peg5rOV5rS+55SfIHNpZGViYW5kIOWkmui3r+i+k+WHuiIKKworIzogZmV0Y2gtcGFjay5jOjgyNgorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgIuWNj+iurumUmeivr++8muWdj+eahOWMheWktCIKKworIzogZmV0Y2gtcGFjay5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgJXMiCittc2dzdHIgImZldGNoLXBhY2vvvJrml6Dms5XmtL7nlJ/ov5vnqIsgJXMiCisKKyM6IGZldGNoLXBhY2suYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZmFpbGVkIgorbXNnc3RyICIlcyDlpLHotKUiCisKKyM6IGZldGNoLXBhY2suYzo5MTgKK21zZ2lkICJlcnJvciBpbiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJzaWRlYmFuZCDlpJrot6/ovpPlh7rlh7rplJkiCisKKyM6IGZldGNoLXBhY2suYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb24gaXMgJS4qcyIKK21zZ3N0ciAi5pyN5Yqh5Zmo54mI5pysICUuKnMiCisKKyM6IGZldGNoLXBhY2suYzo5NzAgZmV0Y2gtcGFjay5jOjk3NiBmZXRjaC1wYWNrLmM6OTc5IGZldGNoLXBhY2suYzo5ODUKKyM6IGZldGNoLXBhY2suYzo5ODkgZmV0Y2gtcGFjay5jOjk5MyBmZXRjaC1wYWNrLmM6OTk3IGZldGNoLXBhY2suYzoxMDAxCisjOiBmZXRjaC1wYWNrLmM6MTAwNSBmZXRjaC1wYWNrLmM6MTAwOSBmZXRjaC1wYWNrLmM6MTAxMyBmZXRjaC1wYWNrLmM6MTAxNworIzogZmV0Y2gtcGFjay5jOjEwMjMgZmV0Y2gtcGFjay5jOjEwMjkgZmV0Y2gtcGFjay5jOjEwMzQgZmV0Y2gtcGFjay5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzICVzIgorbXNnc3RyICLmnI3liqHlmajmlK/mjIEgJXMiCisKKyM6IGZldGNoLXBhY2suYzo5NzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiCittc2dzdHIgIuacjeWKoeWZqOS4jeaUr+aMgSBzaGFsbGxvdyDlrqLmiLfnq68iCisKKyM6IGZldGNoLXBhY2suYzoxMDMyCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LXNpbmNlIgorbXNnc3RyICLmnI3liqHlmajkuI3mlK/mjIEgLS1zaGFsbG93LXNpbmNlIgorCisjOiBmZXRjaC1wYWNrLmM6MTAzNworbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1leGNsdWRlIgorbXNnc3RyICLmnI3liqHlmajkuI3mlK/mjIEgLS1zaGFsbG93LWV4Y2x1ZGUiCisKKyM6IGZldGNoLXBhY2suYzoxMDQxCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1kZWVwZW4iCittc2dzdHIgIuacjeWKoeWZqOS4jeaUr+aMgSAtLWRlZXBlbiIKKworIzogZmV0Y2gtcGFjay5jOjEwNTgKK21zZ2lkICJubyBjb21tb24gY29tbWl0cyIKK21zZ3N0ciAi5rKh5pyJ5YWx5ZCM55qE5o+Q5LqkIgorCisjOiBmZXRjaC1wYWNrLmM6MTA3MCBmZXRjaC1wYWNrLmM6MTUzNgorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFja++8muiOt+WPluWksei0peOAgiIKKworIzogZmV0Y2gtcGFjay5jOjEyMDkKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IHJlcXVlc3RzIgorbXNnc3RyICLmnI3liqHlmajkuI3mlK/mjIEgc2hhbGxsb3cg6K+35rGCIgorCisjOiBmZXRjaC1wYWNrLmM6MTIxNgorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBmaWx0ZXIiCittc2dzdHIgIuacjeWKoeWZqOaUr+aMgSBmaWx0ZXIiCisKKyM6IGZldGNoLXBhY2suYzoxMjM5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcXVlc3QgdG8gcmVtb3RlIgorbXNnc3RyICLml6Dms5XlsIbor7fmsYLlhpnliLDov5znqIsiCisKKyM6IGZldGNoLXBhY2suYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgc2VjdGlvbiBoZWFkZXIgJyVzJyIKK21zZ3N0ciAi6K+75Y+W6IqC5qCH6aKYICclcycg5Ye66ZSZIgorCisjOiBmZXRjaC1wYWNrLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAnJXMnLCByZWNlaXZlZCAnJXMnIgorbXNnc3RyICLpooTmnJ8gJyVzJ++8jOW+l+WIsCAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGFja25vd2xlZGdtZW50IGxpbmU6ICclcyciCittc2dzdHIgIuaEj+WklueahOehruiupOihjO+8miclcyciCisKKyM6IGZldGNoLXBhY2suYzoxMzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgYWNrczogJWQiCittc2dzdHIgIuWkhOeQhiBhY2sg5Ye66ZSZ77yaJWQiCisKKyM6IGZldGNoLXBhY2suYzoxMzE4Cittc2dpZCAiZXhwZWN0ZWQgcGFja2ZpbGUgdG8gYmUgc2VudCBhZnRlciAncmVhZHknIgorbXNnc3RyICLpooTmnJ/lnKggJ3JlYWR5JyDkuYvlkI7lj5HpgIEgcGFja2ZpbGUiCisKKyM6IGZldGNoLXBhY2suYzoxMzIwCittc2dpZCAiZXhwZWN0ZWQgbm8gb3RoZXIgc2VjdGlvbnMgdG8gYmUgc2VudCBhZnRlciBubyAncmVhZHknIgorbXNnc3RyICLlnKjmsqHmnIkgJ3JlYWR5JyDkuI3lupTor6Xlj5HpgIHlhbblroPlsI/oioIiCisKKyM6IGZldGNoLXBhY2suYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIKK21zZ3N0ciAi5aSE55CG5rWF5YWL6ZqG5L+h5oGv5Ye66ZSZ77yaJWQiCisKKyM6IGZldGNoLXBhY2suYzoxNDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHdhbnRlZC1yZWYsIGdvdCAnJXMnIgorbXNnc3RyICLpooTmnJ8gd2FudGVkLXJlZu+8jOW+l+WIsCAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIHdhbnRlZC1yZWY6ICclcyciCittc2dzdHIgIuaEj+WklueahCB3YW50ZWQtcmVm77yaJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyB3YW50ZWQgcmVmczogJWQiCittc2dzdHIgIuWkhOeQhuimgeiOt+WPlueahOW8leeUqOWHuumUme+8miVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTc2MgorbXNnaWQgIm5vIG1hdGNoaW5nIHJlbW90ZSBoZWFkIgorbXNnc3RyICLmsqHmnInljLnphY3nmoTov5znqIvliIbmlK8iCisKKyM6IGZldGNoLXBhY2suYzoxNzg1IGJ1aWx0aW4vY2xvbmUuYzo2ODkKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAi6L+c56iL5rKh5pyJ5Y+R6YCB5omA5pyJ5b+F6ZyA55qE5a+56LGhIgorCisjOiBmZXRjaC1wYWNrLmM6MTgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlbW90ZSByZWYgJXMiCittc2dzdHIgIuayoeaciei/meagt+eahOi/nOeoi+W8leeUqCAlcyIKKworIzogZmV0Y2gtcGFjay5jOjE4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IGFsbG93IHJlcXVlc3QgZm9yIHVuYWR2ZXJ0aXNlZCBvYmplY3QgJXMiCittc2dzdHIgIuacjeWKoeWZqOS4jeWFgeiuuOivt+axguacquWFrOW8gOeahOWvueixoSAlcyIKKworIzogZ3BnLWludGVyZmFjZS5jOjQwOAorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAiZ3BnIOaVsOaNruetvuWQjeWksei0pSIKKworIzogZ3BnLWludGVyZmFjZS5jOjQzNAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIuS4jeiDveWIm+W7uuS4tOaXtuaWh+S7tiIKKworIzogZ3BnLWludGVyZmFjZS5jOjQzNworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJyIKK21zZ3N0ciAi5peg5rOV5bCG5YiG56a75byP562+5ZCN5YaZ5YWlICclcyciCisKKyM6IGdyYXBoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JlIGludmFsaWQgY29sb3IgJyUuKnMnIGluIGxvZy5ncmFwaENvbG9ycyIKK21zZ3N0ciAi5b+955WlIGxvZy5ncmFwaENvbG9ycyDkuK3ml6DmlYjnmoTpopzoibIgJyUuKnMnIgorCisjOiBncmVwLmM6NjY4Cittc2dpZCAiIgorImdpdmVuIHBhdHRlcm4gY29udGFpbnMgTlVMTCBieXRlICh2aWEgLWYgPGZpbGU+KS4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCAiCisid2l0aCAtUCB1bmRlciBQQ1JFIHYyIgorbXNnc3RyICIiCisi57uZ5a6a55qE5qih5byP5YyF5ZCrIE5VTEwg5a2X56ym77yI6YCa6L+HIC1mIDzmlofku7Y+IOWPguaVsO+8ieOAguWPquaciSBQQ1JFIHYyIOS4i+eahCAtUCDmlK/mjIHmraQiCisi5Yqf6IO9IgorCisjOiBncmVwLmM6MjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJyVzJ++8muaXoOazleivu+WPliAlcyIKKworIzogZ3JlcC5jOjIxNDUgc2V0dXAuYzoxNjYgYnVpbHRpbi9jbG9uZS5jOjQxMSBidWlsdGluL2RpZmYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICLlr7kgJyVzJyDosIPnlKggc3RhdCDlpLHotKUiCisKKyM6IGdyZXAuYzoyMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQiCittc2dzdHIgIiclcyfvvJror7vlj5bkuI3lrozmlbQiCisKKyM6IGhlbHAuYzoyMworbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICLlvIDlp4vkuIDkuKrlt6XkvZzljLrvvIjlj4Lop4HvvJpnaXQgaGVscCB0dXRvcmlhbO+8iSIKKworIzogaGVscC5jOjI0Cittc2dpZCAid29yayBvbiB0aGUgY3VycmVudCBjaGFuZ2UgKHNlZSBhbHNvOiBnaXQgaGVscCBldmVyeWRheSkiCittc2dzdHIgIuWcqOW9k+WJjeWPmOabtOS4iuW3peS9nO+8iOWPguinge+8mmdpdCBoZWxwIGV2ZXJ5ZGF577yJIgorCisjOiBoZWxwLmM6MjUKK21zZ2lkICJleGFtaW5lIHRoZSBoaXN0b3J5IGFuZCBzdGF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHJldmlzaW9ucykiCittc2dzdHIgIuajgOafpeWOhuWPsuWSjOeKtuaAge+8iOWPguinge+8mmdpdCBoZWxwIHJldmlzaW9uc++8iSIKKworIzogaGVscC5jOjI2Cittc2dpZCAiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIKK21zZ3N0ciAi5omp5bGV44CB5qCH6K6w5ZKM6LCD5qCh5oKo55qE5Y6G5Y+y6K6w5b2VIgorCisjOiBoZWxwLmM6MjcKK21zZ2lkICJjb2xsYWJvcmF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHdvcmtmbG93cykiCittc2dzdHIgIuWNj+WQjO+8iOWPguinge+8mmdpdCBoZWxwIHdvcmtmbG93c++8iSIKKworIzogaGVscC5jOjMxCittc2dpZCAiTWFpbiBQb3JjZWxhaW4gQ29tbWFuZHMiCittc2dzdHIgIuS4u+imgeeahOS4iuWxguWRveS7pCIKKworIzogaGVscC5jOjMyCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICLovoXliqnlkb3ku6Qv5pON5L2c6ICFIgorCisjOiBoZWxwLmM6MzMKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIgorbXNnc3RyICLovoXliqnlkb3ku6Qv6K+i6Zeu6ICFIgorCisjOiBoZWxwLmM6MzQKK21zZ2lkICJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIKK21zZ3N0ciAi5LiO5YW25a6D57O757uf5Lqk5LqSIgorCisjOiBoZWxwLmM6MzUKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIuS9jue6p+WRveS7pC/mk43kvZzogIUiCisKKyM6IGhlbHAuYzozNgorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIuS9jue6p+WRveS7pC/or6Lpl67ogIUiCisKKyM6IGhlbHAuYzozNworbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIFN5bmNpbmcgUmVwb3NpdG9yaWVzIgorbXNnc3RyICLkvY7nuqflkb3ku6Qv5ZCM5q2l5LuT5bqTIgorCisjOiBoZWxwLmM6MzgKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcm5hbCBIZWxwZXJzIgorbXNnc3RyICLkvY7nuqflkb3ku6Qv5YaF6YOo5Yqp5omLIgorCisjOiBoZWxwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAi5ZyoICclcycg5LiL5Y+v55So55qEIGdpdCDlkb3ku6QiCisKKyM6IGhlbHAuYzozMDUKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgIuWcqCAkUEFUSCDot6/lvoTkuK3nmoTlhbbku5blnLDmlrnlj6/nlKjnmoQgZ2l0IOWRveS7pCIKKworIzogaGVscC5jOjMxNAorbXNnaWQgIlRoZXNlIGFyZSBjb21tb24gR2l0IGNvbW1hbmRzIHVzZWQgaW4gdmFyaW91cyBzaXR1YXRpb25zOiIKK21zZ3N0ciAi6L+Z5Lqb5piv5ZCE56eN5Zy65ZCI5bi46KeB55qEIEdpdCDlkb3ku6TvvJoiCisKKyM6IGhlbHAuYzozNjMgZ2l0LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgY29tbWFuZCBsaXN0aW5nIHR5cGUgJyVzJyIKK21zZ3N0ciAi5LiN5pSv5oyB55qE5ZG95Luk5YiX6KGo57G75Z6LICclcyciCisKKyM6IGhlbHAuYzo0MDMKK21zZ2lkICJUaGUgY29tbW9uIEdpdCBndWlkZXMgYXJlOiIKK21zZ3N0ciAi5pyA5bi455So55qEIEdpdCDlkJHlr7zmnInvvJoiCisKKyM6IGhlbHAuYzo1MTIKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgdG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQiCittc2dzdHIgIuaJp+ihjOOAgCdnaXQgaGVscCA8Y29tbWFuZD4nIOadpeafpeeci+eJueWumuWtkOWRveS7pCIKKworIzogaGVscC5jOjUxNworbXNnaWQgIkV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICLlpJbpg6jlkb3ku6QiCisKKyM6IGhlbHAuYzo1MzIKK21zZ2lkICJDb21tYW5kIGFsaWFzZXMiCittc2dzdHIgIuWRveS7pOWIq+WQjSIKKworIzogaGVscC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKyInJXMnIOWDj+aYr+S4gOS4qiBnaXQg5ZG95Luk77yM5L2G5Y205peg5rOV6L+Q6KGM44CCXG4iCisi5Y+v6IO95pivIGdpdC0lcyDlj5fmjZ/vvJ8iCisKKyM6IGhlbHAuYzo2NTUKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAi5ZSJ5ZGA77yM5oKo55qE57O757uf5Lit5pyq5Y+R546wIEdpdCDlkb3ku6TjgIIiCisKKyM6IGhlbHAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAi6K2m5ZGK77ya5oKo6L+Q6KGM5LqG5LiA5Liq5bm25LiN5a2Y5Zyo55qEIEdpdCDlkb3ku6QgJyVzJ+OAgiIKKworIzogaGVscC5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICLlgYflrprkvaDmg7PopoHnmoTmmK8gJyVzJyDlubbnu6fnu63jgIIiCisKKyM6IGhlbHAuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyBpbiAlMC4xZiBzZWNvbmRzLCBhc3N1bWluZyB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAi5YGH5a6a5L2g5oOz6KaB55qE5pivICclMiRzJ++8jOWcqCAlMSQwLjFmIOenkumSn+WQjue7p+e7reOAgiIKKworIzogaGVscC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXTvvJonJXMnIOS4jeaYr+S4gOS4qiBnaXQg5ZG95Luk44CC5Y+C6KeBICdnaXQgLS1oZWxwJ+OAgiIKKworIzogaGVscC5jOjY5OQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmRzIGFyZSIKK21zZ3N0clswXSAiIgorIlxuIgorIuacgOebuOS8vOeahOWRveS7pOaYryIKK21zZ3N0clsxXSAiIgorIlxuIgorIuacgOebuOS8vOeahOWRveS7pOaYryIKKworIzogaGVscC5jOjcxNAorbXNnaWQgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgdmVyc2lvbiBbPOmAiemhuT5dIgorCisjOiBoZWxwLmM6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIlc++8miVzIC0gJXMiCisKKyM6IGhlbHAuYzo3ODcKK21zZ2lkICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKKyJcbiIKKyLmgqjmjIfnmoTmmK/ov5nkuKrkuYjvvJ8iCittc2dzdHJbMV0gIiIKKyJcbiIKKyLmgqjmjIfnmoTmmK/ov5nlhbbkuK3nmoTmn5DkuIDkuKrkuYjvvJ8iCisKKyM6IGlkZW50LmM6MzQ5Cittc2dpZCAiIgorIlxuIgorIioqKiBQbGVhc2UgdGVsbCBtZSB3aG8geW91IGFyZS5cbiIKKyJcbiIKKyJSdW5cbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisidG8gc2V0IHlvdXIgYWNjb3VudCdzIGRlZmF1bHQgaWRlbnRpdHkuXG4iCisiT21pdCAtLWdsb2JhbCB0byBzZXQgdGhlIGlkZW50aXR5IG9ubHkgaW4gdGhpcyByZXBvc2l0b3J5LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiKioqIOivt+WRiuivieaIkeS9oOaYr+iwgeOAglxuIgorIlxuIgorIui/kOihjFxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyJcbiIKKyLmnaXorr7nva7mgqjotKblj7fnmoTnvLrnnIHouqvku73moIfor4bjgIJcbiIKKyLlpoLmnpzku4XlnKjmnKzku5PlupPorr7nva7ouqvku73moIfor4bvvIzliJnnnIHnlaUgLS1nbG9iYWwg5Y+C5pWw44CCXG4iCisKKyM6IGlkZW50LmM6Mzc5Cittc2dpZCAibm8gZW1haWwgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAi5pyq5o+Q5L6b6YKu5Lu25Zyw5Z2A5LiU6Ieq5Yqo5o6i5rWL6KKr56aB55SoIgorCisjOiBpZGVudC5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgZW1haWwgYWRkcmVzcyAoZ290ICclcycpIgorbXNnc3RyICLml6Dms5Xoh6rliqjmjqLmtYvpgq7ku7blnLDlnYDvvIjlvpfliLAgJyVzJ++8iSIKKworIzogaWRlbnQuYzo0MDEKK21zZ2lkICJubyBuYW1lIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiCittc2dzdHIgIuacquaPkOS+m+Wnk+WQjeS4lOiHquWKqOaOoua1i+iiq+emgeeUqCIKKworIzogaWRlbnQuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IG5hbWUgKGdvdCAnJXMnKSIKK21zZ3N0ciAi5peg5rOV6Ieq5Yqo5o6i5rWL5aeT5ZCN77yI5b6X5YiwICclcyfvvIkiCisKKyM6IGlkZW50LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGlkZW50IG5hbWUgKGZvciA8JXM+KSBub3QgYWxsb3dlZCIKK21zZ3N0ciAi5LiN5YWB6K6456m655qE5aeT5ZCN77yI5a+55LqOIDwlcz7vvIkiCisKKyM6IGlkZW50LmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIgorbXNnc3RyICLlp5PlkI3kuK3ku4XljIXlkKvnpoHnlKjlrZfnrKbvvJolcyIKKworIzogaWRlbnQuYzo0MzYgYnVpbHRpbi9jb21taXQuYzo2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkYXRlIGZvcm1hdDogJXMiCittc2dzdHIgIuaXoOaViOeahOaXpeacn+agvOW8j++8miVzIgorCisjOiBsaXN0LW9iamVjdHMuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyB0cmVlIG1vZGUsIGJ1dCBpcyBub3QgYSB0cmVlIgorbXNnc3RyICLmoJEgJTIkcyDkuK3nmoTmnaHnm64gJyUxJHMnIOWFt+acieagkeeahOWxnuaAp++8jOS9huS4jeaYr+S4gOS4quagkeWvueixoSIKKworIzogbGlzdC1vYmplY3RzLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgYmxvYiBtb2RlLCBidXQgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAi5qCRICUyJHMg5Lit55qE5p2h55uuICclMSRzJyDlhbfmnInmlbDmja7lr7nosaHnmoTlsZ7mgKfvvIzkvYbkuI3mmK/kuIDkuKrmlbDmja7lr7nosaEiCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCByb290IHRyZWUgZm9yIGNvbW1pdCAlcyIKK21zZ3N0ciAi5peg5rOV5Li65o+Q5LqkICVzIOWKoOi9veagueagkSIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIHNwYXJzZSBibG9iIGluICclcyciCittc2dzdHIgIuS4jeiDveiuv+mXriAnJXMnIOS4reeahOeogOeWj+aVsOaNruWvueixoSIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugc3BhcnNlIGZpbHRlciBkYXRhIGluICVzIgorbXNnc3RyICLml6Dms5Xop6PmnpAgJXMg5Lit55qE56iA55aP6L+H5ruk5Zmo5pWw5o2uIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo1OAorbXNnaWQgImV4cGVjdGVkICd0cmVlOjxkZXB0aD4nIgorbXNnc3RyICLmnJ/mnJsgJ3RyZWU6POa3seW6pj4nIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo3MworbXNnaWQgInNwYXJzZTpwYXRoIGZpbHRlcnMgc3VwcG9ydCBoYXMgYmVlbiBkcm9wcGVkIgorbXNnc3RyICJzcGFyc2U6cGF0aCDov4fmu6TlmajmlK/mjIHlt7LooqvliKDpmaQiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsdGVyLXNwZWMgJyVzJyIKK21zZ3N0ciAi5peg5pWI55qE6L+H5ruk5Zmo6KGo6L6+5byPICclcyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtdXN0IGVzY2FwZSBjaGFyIGluIHN1Yi1maWx0ZXItc3BlYzogJyVjJyIKK21zZ3N0ciAi5b+F6aG75a+5IHN1Yi1maWx0ZXItc3BlYyDkuK3nmoTlrZfnrKbov5vooYzovazkuYnvvJonJWMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxNDQKK21zZ2lkICJleHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgY29tYmluZToiCittc2dzdHIgIuacn+acm+WcqOe7hOWQiOWQjuacieS4gOS6m+S4nOilv++8miIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MjI2Cittc2dpZCAibXVsdGlwbGUgZmlsdGVyLXNwZWNzIGNhbm5vdCBiZSBjb21iaW5lZCIKK21zZ3N0ciAi5LiN6IO95re355So5aSa56eN6L+H5ruk6KeE5qC8IgorCisjOiBsb2NrZmlsZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuIgorIlxuIgorIkFub3RoZXIgZ2l0IHByb2Nlc3Mgc2VlbXMgdG8gYmUgcnVubmluZyBpbiB0aGlzIHJlcG9zaXRvcnksIGUuZy5cbiIKKyJhbiBlZGl0b3Igb3BlbmVkIGJ5ICdnaXQgY29tbWl0Jy4gUGxlYXNlIG1ha2Ugc3VyZSBhbGwgcHJvY2Vzc2VzXG4iCisiYXJlIHRlcm1pbmF0ZWQgdGhlbiB0cnkgYWdhaW4uIElmIGl0IHN0aWxsIGZhaWxzLCBhIGdpdCBwcm9jZXNzXG4iCisibWF5IGhhdmUgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllcjpcbiIKKyJyZW1vdmUgdGhlIGZpbGUgbWFudWFsbHkgdG8gY29udGludWUuIgorbXNnc3RyICIiCisi5peg5rOV5Yib5bu6ICclcy5sb2NrJ++8miVz44CCXG4iCisiXG4iCisi5Ly85LmO5Y+m5aSW5LiA5LiqIGdpdCDov5vnqIvlnKjov5nkuKrku5PlupPkuK3ov5DooYzvvIzkvovlpoLvvJonZ2l0IGNvbW1pdCcg5ZG95Luk5omTXG4iCisi5byA5LqG5LiA5Liq57yW6L6R5Zmo44CC6K+356Gu6K6k5omA5pyJ6L+b56iL6YO95bey57uP5YWz6Zet54S25ZCO6YeN6K+V44CC5aaC5p6c5LuN54S25oql6ZSZ77yMXG4iCisi5Y+v6IO95LmL5YmN5pyJ5LiA5LiqIGdpdCDov5vnqIvlnKjov5nkuKrku5PlupPkuK3lvILluLjpgIDlh7rvvJpcbiIKKyLmiYvliqjliKDpmaTov5nkuKrmlofku7blho3nu6fnu63jgIIiCisKKyM6IGxvY2tmaWxlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIKK21zZ3N0ciAi5LiN6IO95Yib5bu6ICclcy5sb2NrJ++8miVzIgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICLor7vlj5bnvJPlrZjlpLHotKUiCisKKyM6IG1lcmdlLmM6MTA3IHJlcmVyZS5jOjcyMCBidWlsdGluL2FtLmM6MTg3OSBidWlsdGluL2FtLmM6MTkxMworIzogYnVpbHRpbi9jaGVja291dC5jOjU0MSBidWlsdGluL2NoZWNrb3V0LmM6ODAwIGJ1aWx0aW4vY2xvbmUuYzo4MTAKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNjUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIuaXoOazleWGmeaWsOeahOe0ouW8leaWh+S7tiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzU2Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIu+8iOWdj+aPkOS6pO+8iVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICJhZGRfY2FjaGVpbmZvIOWvuei3r+W+hCAnJXMnIOaJp+ihjOWksei0pe+8jOWQiOW5tue7iOatouOAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIHRvIHJlZnJlc2ggZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICJhZGRfY2FjaGVpbmZvIOaXoOazleWIt+aWsOi3r+W+hCAnJXMn77yM5ZCI5bm257uI5q2i44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAi5Yib5bu66Lev5b6EICclcyclcyDlpLHotKUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICLliKDpmaQgJXMg5Lul5L6/5Li65a2Q55uu5b2V55WZ5Ye656m66Ze0XG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg5OSBtZXJnZS1yZWN1cnNpdmUuYzo5MTgKK21zZ2lkICI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IgorbXNnc3RyICLvvJrlj6/og73mmK/kuIDkuKrnm67lvZUv5paH5Lu25Yay56qB77yfIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICLmi5Lnu53kuKLlvIMgJyVzJyDkuK3nmoTmnKrot5/ouKrmlofku7YiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk0OSBidWlsdGluL2NhdC1maWxlLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgIuS4jeiDveivu+WPluWvueixoSAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAiJXMgJyVzJyDlupTkuLrmlbDmja7lr7nosaEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAi5omT5byAICclcycg5aSx6LSl77yaJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnOiAlcyIKK21zZ3N0ciAi5Yib5bu656ym5Y+36ZO+5o6lICclcycg5aSx6LSl77yaJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIgorbXNnc3RyICLkuI3nn6XpgZPlpoLkvZXlpITnkIYgJTA2byAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBjaGVja2VkIG91dCkiCittc2dzdHIgIuaXoOazleWQiOW5tuWtkOaooee7hCAlcyDvvIjmsqHmnInmo4Dlh7rvvIkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBub3QgcHJlc2VudCkiCittc2dzdHIgIuaXoOazleWQiOW5tuWtkOaooee7hCAlc++8iOaPkOS6pOS4jeWtmOWcqO+8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIGRvbid0IGZvbGxvdyBtZXJnZS1iYXNlKSIKK21zZ3N0ciAi5peg5rOV5ZCI5bm25a2Q5qih57uEICVzIO+8iOaPkOS6pOacqui3n+maj+WQiOW5tuWfuue6v++8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxMyBtZXJnZS1yZWN1cnNpdmUuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMgdG8gdGhlIGZvbGxvd2luZyBjb21taXQ6IgorbXNnc3RyICLlrZDmqKHnu4QgJXMg5b+r6L+b5Yiw5aaC5LiL5o+Q5Lqk77yaIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjE2IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi5b+r6L+b5a2Q5qih57uEICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG1lcmdlIGZvbGxvd2luZyBjb21taXRzIG5vdCBmb3VuZCkiCittc2dzdHIgIuaXoOazleWQiOW5tuWtkOaooee7hCAlcyDvvIjmsqHlj5HnjrDlkIjlubbot5/pmo/nmoTmj5DkuqTvvIkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGZhc3QtZm9yd2FyZCkiCittc2dzdHIgIuaXoOazleWQiOW5tuWtkOaooee7hCAlc++8iOmdnuW/q+i/m++8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1NgorbXNnaWQgIkZvdW5kIGEgcG9zc2libGUgbWVyZ2UgcmVzb2x1dGlvbiBmb3IgdGhlIHN1Ym1vZHVsZTpcbiIKK21zZ3N0ciAi5om+5Yiw5a2Q5qih57uE55qE5LiA5Liq5Y+v6IO955qE5ZCI5bm25pa55qGI77yaXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHRoaXMgaXMgY29ycmVjdCBzaW1wbHkgYWRkIGl0IHRvIHRoZSBpbmRleCBmb3IgZXhhbXBsZVxuIgorImJ5IHVzaW5nOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisid2hpY2ggd2lsbCBhY2NlcHQgdGhpcyBzdWdnZXN0aW9uLlxuIgorbXNnc3RyICIiCisi5aaC5p6c6L+Z5Liq5q2j56Gu77yM5bCG5YW25re75Yqg5Yiw57Si5byV77yM5L6L5aaC5L2/55So5ZG95Luk77yaXG4iCisiXG4iCisiICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcbiIKKyJcbiIKKyLku6XmjqXlj5fmraTlu7rorq7jgIJcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtdWx0aXBsZSBtZXJnZXMgZm91bmQpIgorbXNnc3RyICLml6Dms5XlkIjlubblrZDmqKHnu4QgJXMg77yI5Y+R546w5aSa5Liq5ZCI5bm277yJIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzQxCittc2dpZCAiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiCittc2dzdHIgIuaXoOazleaJp+ihjOWGhemDqOWQiOW5tiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICLkuI3og73mt7vliqAgJXMg6Iez5a+56LGh5bqTIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAi6Ieq5Yqo5ZCI5bm2ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyB3cml0aW5nIHRvICVzIGluc3RlYWQuIgorbXNnc3RyICLplJnor6/vvJrmi5Lnu53kuKLlpLHmnKrot5/ouKrmlofku7YgJyVzJ++8jOiAjOaYr+WGmeWFpSAlc+OAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisi5Yay56qB77yIJTEkcy/liKDpmaTvvInvvJolMiRzIOWcqCAlMyRzIOS4reiiq+WIoOmZpO+8jOWcqCAlNSRzIOS4reiiqyAlNCRz44CCJTckcyDnmoQgJTYkcyDniYgiCisi5pys6KKr5L+d55WZ44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZS4iCittc2dzdHIgIiIKKyLlhrLnqoHvvIglMSRzL+WIoOmZpO+8ie+8miUyJHMg5ZyoICUzJHMg5Lit6KKr5Yig6Zmk77yM5ZyoICU2JHMg5Lit55qEICU1JHMg6KKrICU0JHPjgIIlOCRzIOeahCAiCisiJTckcyDniYjmnKzooqvkv53nlZnjgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIuWGsueqge+8iCUxJHMv5Yig6Zmk77yJ77yaJTIkcyDlnKggJTMkcyDkuK3ooqvliKDpmaTvvIzlnKggJTUkcyDkuK3ooqsgJTQkc+OAgiU3JHMg55qEICU2JHMg54mIIgorIuacrOS/neeVmeWcqCAlOCRzIOS4reOAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisi5Yay56qB77yIJTEkcy/liKDpmaTvvInvvJolMiRzIOWcqCAlMyRzIOS4reiiq+WIoOmZpO+8jOWcqCAlNiRzIOS4reeahCAlNSRzIOiiqyAlNCRz44CCJTgkcyDnmoQgIgorIiU3JHMg54mI5pys5L+d55WZ5ZyoICU5JHMg5Lit44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI2Cittc2dpZCAicmVuYW1lIgorbXNnc3RyICLph43lkb3lkI0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjYKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICLph43lkb3lkI0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NzcgbWVyZ2UtcmVjdXJzaXZlLmM6MjQ3MiBtZXJnZS1yZWN1cnNpdmUuYzozMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCAlcyIKK21zZ3N0ciAi5ouS57ud5Lii5aSx6ISP5paH5Lu2ICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAi5ouS57ud5ZyoICclcycg5aSE5aSx5Y675pyq6Lef6Liq5paH5Lu277yM5Y2z5L2/5a6D5a2Y5Zyo5LqO6YeN5ZG95ZCN5Lit44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gIEFkZGVkICVzIGluICVzIgorbXNnc3RyICLlhrLnqoHvvIjph43lkb3lkI0v5re75Yqg77yJ77ya5ZyoICUzJHMg5Lit6YeN5ZG95ZCNICUxJHMtPiUyJHPjgILlnKggJTUkcyDkuK3mt7vliqAgJTQkcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiJXMg5pivICVzIOS4reeahOS4gOS4quebruW9leiAjOS7pSAlcyDkuLrlkI3ooqvmt7vliqAiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIuaLkue7neS4ouWkseacqui3n+i4quaWh+S7tiAnJXMn77yM6ICM5piv5re75Yqg5Li6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBcIiVzXCItPlwiJXNcIiBpbiBicmFuY2ggXCIlc1wiIHJlbmFtZSBcIiVzIgorIlwiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCittc2dzdHIgIiIKKyLlhrLnqoHvvIjph43lkb3lkI0v6YeN5ZG95ZCN77yJ77ya5Zyo5YiG5pSvIFwiJTMkc1wiIOS4remHjeWRveWQjSBcIiUxJHNcIi0+XCIlMiRzXCLvvIzlnKjliIbmlK8gIgorIlwiJTYkc1wiIOS4remHjeWRveWQjSBcIiU0JHNcIi0+XCIlNSRzXCIlNyRzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzEzCittc2dpZCAiIChsZWZ0IHVucmVzb2x2ZWQpIgorbXNnc3RyICLvvIjnlZnkuIvmnKrop6PlhrPvvIkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgJXMtPiVzIGluICVzLiBSZW5hbWUgJXMtPiVzIGluICVzIgorbXNnc3RyICIiCisi5Yay56qB77yI6YeN5ZG95ZCNL+mHjeWRveWQje+8ie+8muWcqCAlMyRzIOS4remHjeWRveWQjSAlMSRzLT4lMiRz77yM5ZyoICU2JHMg5Lit6YeN5ZG95ZCNICU0JHMtPiIKKyIlNSRzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZGlyZWN0b3J5IHJlbmFtZSBzcGxpdCk6IFVuY2xlYXIgd2hlcmUgdG8gcGxhY2UgJXMgYmVjYXVzZSAiCisiZGlyZWN0b3J5ICVzIHdhcyByZW5hbWVkIHRvIG11bHRpcGxlIG90aGVyIGRpcmVjdG9yaWVzLCB3aXRoIG5vIGRlc3RpbmF0aW9uICIKKyJnZXR0aW5nIGEgbWFqb3JpdHkgb2YgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIuWGsueqge+8iOWIhuWJsueahOebruW9lemHjeWRveWQje+8ie+8muS4jea4healmiAlcyDlupTor6XmlL7lnKjlk6rph4zvvIzlm6DkuLrnm67lvZUgJXMg6KKr6YeN5ZG95ZCN5Yiw5aSa5LiqIgorIuWFtuWug+ebruW9le+8jOayoeacieebruW9leWMheWQq+Wkp+mDqOWIhuaWh+S7tuOAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBFeGlzdGluZyBmaWxlL2RpciBhdCAlcyBpbiB0aGUgd2F5IG9mICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lKHMpIHB1dHRpbmcgdGhlIGZvbGxvd2luZyBwYXRoKHMpIHRoZXJlOiAlcy4iCittc2dzdHIgIiIKKyLlhrLnqoHvvIjpmpDlvI/nm67lvZXph43lkb3lkI3vvInvvJrlpITkuo7pmpDlvI/nm67lvZXph43lkb3lkI3nmoTnjrDlrZjmlofku7Yv55uu5b2VICVz77yM5bCG5Lul5LiL6Lev5b6E5pS+IgorIuWcqO+8miVz44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IENhbm5vdCBtYXAgbW9yZSB0aGFuIG9uZSBwYXRoIHRvICVzOyAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZXMgdHJpZWQgdG8gcHV0IHRoZXNlIHBhdGhzIHRoZXJlOiAlcyIKK21zZ3N0ciAiIgorIuWGsueqge+8iOmakOW8j+ebruW9lemHjeWRveWQje+8ie+8muaXoOazleaYoOWwhOS4gOS4quS7peS4iui3r+W+hOWIsCAlc++8jOmakOW8j+ebruW9lemHjeWRveWQjeWwneivleWwhui/meS6m+i3ryIKKyLlvoTmlL7nva7kuo7mraTvvJolcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgZGlyZWN0b3J5ICVzLT4lcyBpbiAlcy4gUmVuYW1lIGRpcmVjdG9yeSAlcy0iCisiPiVzIGluICVzIgorbXNnc3RyICIiCisi5Yay56qB77yI6YeN5ZG95ZCNL+mHjeWRveWQje+8ie+8muWcqCAlMyRzIOS4remHjeWRveWQjeebruW9lSAlMSRzLT4lMiRz77yM5ZyoICU2JHMg5Lit6YeN5ZG95ZCN55uu5b2VICIKKyIlNCRzLT4lNSRzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNDM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBBdm9pZGluZyBhcHBseWluZyAlcyAtPiAlcyByZW5hbWUgdG8gJXMsIGJlY2F1c2UgJXMgaXRzZWxmIHdhcyAiCisicmVuYW1lZC4iCittc2dzdHIgIuitpuWRiu+8mumBv+WFjeW6lOeUqCAlcyAtPiAlcyDnmoTph43lkb3lkI3liLAgJXPvvIzlm6DkuLogJXMg5pys6Lqr5bey6KKr6YeN5ZG95ZCN44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyOTYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5a+56LGhICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyOTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIgorbXNnc3RyICLlr7nosaEgJXMg5LiN5piv5LiA5Liq5pWw5o2u5a+56LGhIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDI4Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICLkv67mlLkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMjgKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAi5L+u5pS5IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDQwCittc2dpZCAiY29udGVudCIKK21zZ3N0ciAi5YaF5a65IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDQ0Cittc2dpZCAiYWRkL2FkZCIKK21zZ3N0ciAi5re75YqgL+a3u+WKoCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA2NworIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIueVpei/hyAlc++8iOW3sue7j+WBmui/h+ebuOWQjOWQiOW5tu+8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA4OSBnaXQtc3VibW9kdWxlLnNoOjEwMDMKK21zZ2lkICJzdWJtb2R1bGUiCittc2dzdHIgIuWtkOaooee7hCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAi5Yay56qB77yIJXPvvInvvJrlkIjlubblhrLnqoHkuo4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIuiAjOaYr+S7pSAlcyDkuLrlkI3mt7vliqAiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhdGggdXBkYXRlZDogJXMgYWRkZWQgaW4gJXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gJXM7ICIKKyJtb3ZpbmcgaXQgdG8gJXMuIgorbXNnc3RyICIiCisi6Lev5b6E5bey5pu05paw77yaJXMg5re75Yqg5YiwICVz77yM5L2N5LqO5LiA5Liq6KKr6YeN5ZG95ZCN5YiwICVzIOeahOebruW9leS4re+8jOWwhuWFtuenu+WKqOWIsCAlc+OAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCAiCisiaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisi5Yay56qB77yI5paH5Lu25L2N572u77yJ77yaJXMg5re75Yqg5YiwICVz77yM5L2N5LqO5LiA5Liq6KKr6YeN5ZG95ZCN5Li6ICVzIOeahOebruW9leS4re+8jOW7uuiuruWwhuWFtuenu+WKqCIKKyLliLAgJXPjgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhdGggdXBkYXRlZDogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gIgorIiVzOyBtb3ZpbmcgaXQgdG8gJXMuIgorbXNnc3RyICIiCisi6Lev5b6E5bey5pu05paw77yaJTEkcyDph43lkb3lkI3kuLogJTMkcyDkuK3nmoQgJTIkc++8jOiAjOivpeebruW9leiiq+mHjeWRveWQjeWIsCAlNCRzIOS4re+8jOWwhuWFtuenuyIKKyLliqjliLAgJTUkc+OAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCAiCisid2FzIHJlbmFtZWQgaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisi5Yay56qB77yI5paH5Lu25L2N572u77yJ77yaJTEkcyDph43lkb3lkI3kuLogJTMkcyDkuK3nmoQgJTIkc++8jOiAjOivpeebruW9leiiq+mHjeWRveWQjeWIsCAlNCRzIOS4re+8jCIKKyLlu7rorq7lsIblhbbnp7vliqjliLAgJTUkc+OAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzMyNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAi5Yig6ZmkICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzUwCittc2dpZCAiZmlsZS9kaXJlY3RvcnkiCittc2dzdHIgIuaWh+S7ti/nm67lvZUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNTUKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAi55uu5b2VL+aWh+S7tiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAi5Yay56qB77yIJTEkc++8ie+8muWcqCAlMyRzIOS4reacieS4gOS4quWQjeS4uiAlMiRzIOeahOebruW9leOAguS7pSAlNSRzIOS4uuWQjea3u+WKoCAlNCRzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAi5re75YqgICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChhZGQvYWRkKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIuWGsueqge+8iGFkZC9hZGTvvInvvJrlkIjlubblhrLnqoHkuo4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MjQKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUhIgorbXNnc3RyICLlt7Lnu4/mmK/mnIDmlrDnmoTvvIEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICLml6Dms5XlkIjlubbmoJEgJXMg5ZKMICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTM3Cittc2dpZCAiTWVyZ2luZzoiCittc2dzdHIgIuWQiOW5tu+8miIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IgorbXNnaWRfcGx1cmFsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIKK21zZ3N0clswXSAi5Y+R546wICV1IOS4quWFseWQjOelluWFiO+8miIKK21zZ3N0clsxXSAi5Y+R546wICV1IOS4quWFseWQjOelluWFiO+8miIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzYwMAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAi5ZCI5bm25pyq6L+U5Zue5o+Q5LqkIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIgICVzIgorbXNnc3RyICIiCisi5oKo5a+55LiL5YiX5paH5Lu255qE5pys5Zyw5L+u5pS55bCG6KKr5ZCI5bm25pON5L2c6KaG55uW77yaXG4iCisiICAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIuS4jeiDveino+aekOWvueixoSAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzc0IGJ1aWx0aW4vbWVyZ2UuYzo2OTcgYnVpbHRpbi9tZXJnZS5jOjg3NworbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iCittc2dzdHIgIuS4jeiDveWGmeWFpee0ouW8leOAgiIKKworIzogbWlkeC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggZmlsZSAlcyBpcyB0b28gc21hbGwiCittc2dzdHIgIuWkmuWMhee0ouW8leaWh+S7tiAlcyDlpKrlsI8iCisKKyM6IG1pZHguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSAweCUwOHggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAi5aSa5YyF57Si5byV562+5ZCNIDB4JTA4eCDlkoznrb7lkI0gMHglMDh4IOS4jeWMuemFjSIKKworIzogbWlkeC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggdmVyc2lvbiAlZCBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCDniYjmnKwgJWQg5LiN6IO96KKr6K+G5YirIgorCisjOiBtaWR4LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCB2ZXJzaW9uICV1IGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICLmlaPliJfniYjmnKwgJXUg5LiN5Yy56YWNIgorCisjOiBtaWR4LmM6MTA4Cittc2dpZCAiaW52YWxpZCBjaHVuayBvZmZzZXQgKHRvbyBsYXJnZSkiCittc2dzdHIgIuaXoOaViOeahOWdl+WBj+enu++8iOWkquWkp++8iSIKKworIzogbWlkeC5jOjEzMgorbXNnaWQgInRlcm1pbmF0aW5nIG11bHRpLXBhY2staW5kZXggY2h1bmsgaWQgYXBwZWFycyBlYXJsaWVyIHRoYW4gZXhwZWN0ZWQiCittc2dzdHIgIue7iOatouWkmuWMhee0ouW8leWdlyBpZCDlh7rnjrDml7bpl7Tml6nkuo7pooTmnJ8iCisKKyM6IG1pZHguYzoxNDUKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgcGFjay1uYW1lIGNodW5rIgorbXNnc3RyICLlpJrljIXntKLlvJXnvLrlsJHlv4XpnIDnmoTljIXlkI3lnZciCisKKyM6IG1pZHguYzoxNDcKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGZhbm91dCBjaHVuayIKK21zZ3N0ciAi5aSa5YyF57Si5byV57y65bCR5b+F6ZyA55qE5a+56LGhIElEIOaJh+WHuuWdlyIKKworIzogbWlkeC5jOjE0OQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgbG9va3VwIGNodW5rIgorbXNnc3RyICLlpJrljIXntKLlvJXnvLrlsJHlv4XpnIDnmoTlr7nosaEgSUQg5p+l6K+i5Z2XIgorCisjOiBtaWR4LmM6MTUxCittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBvZmZzZXRzIGNodW5rIgorbXNnc3RyICLlpJrljIXntKLlvJXnvLrlsJHlv4XpnIDnmoTlr7nosaHlgY/np7vlnZciCisKKyM6IG1pZHguYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBwYWNrIG5hbWVzIG91dCBvZiBvcmRlcjogJyVzJyBiZWZvcmUgJyVzJyIKK21zZ3N0ciAi5aSa5YyF57Si5byV5YyF5ZCN5peg5bqP77yaJyVzJyDlnKggJyVzJyDkuYvliY0iCisKKyM6IG1pZHguYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2staW50LWlkOiAldSAoJXUgdG90YWwgcGFja3MpIgorbXNnc3RyICLplJnnmoQgcGFjay1pbnQtaWTvvJolde+8iOWFseaciSAldSDkuKrljIXvvIkiCisKKyM6IG1pZHguYzoyNjAKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHN0b3JlcyBhIDY0LWJpdCBvZmZzZXQsIGJ1dCBvZmZfdCBpcyB0b28gc21hbGwiCittc2dzdHIgIuWkmuWMhee0ouW8leWtmOWCqOS4gOS4qjY05L2N5YGP56e777yM5L2G5pivIG9mZl90IOWkquWwjyIKKworIzogbWlkeC5jOjI4OAorbXNnaWQgImVycm9yIHByZXBhcmluZyBwYWNrZmlsZSBmcm9tIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIuS7juWkmuWMhee0ouW8leWHhuWkhyBwYWNrZmlsZSDlh7rplJkiCisKKyM6IG1pZHguYzo0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFkZCBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICLmt7vliqDljIXmlofku7YgJyVzJyDlpLHotKUiCisKKyM6IG1pZHguYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGFjay1pbmRleCAnJXMnIgorbXNnc3RyICLmiZPlvIDljIXntKLlvJUgJyVzJyDlpLHotKUiCisKKyM6IG1pZHguYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvY2F0ZSBvYmplY3QgJWQgaW4gcGFja2ZpbGUiCittc2dzdHIgIuWcqOWMheaWh+S7tuS4reWumuS9jeWvueixoSAlZCDlpLHotKUiCisKKyM6IG1pZHguYzo4NDIKK21zZ2lkICJBZGRpbmcgcGFja2ZpbGVzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIua3u+WKoOWMheaWh+S7tuWIsOWkmuWMhee0ouW8lSIKKworIzogbWlkeC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHNlZSBwYWNrLWZpbGUgJXMgdG8gZHJvcCIKK21zZ3N0ciAi5rKh5pyJ55yL5Yiw6KaB5Lii5byD55qE5YyF5paH5Lu2ICVzIgorCisjOiBtaWR4LmM6OTczCittc2dpZCAiV3JpdGluZyBjaHVua3MgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAi5YaZ5YWl5Z2X5Yiw5aSa5YyF57Si5byVIgorCisjOiBtaWR4LmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2xlYXIgbXVsdGktcGFjay1pbmRleCBhdCAlcyIKK21zZ3N0ciAi5riF55CG5L2N5LqOICVzIOeahOWkmuWMhee0ouW8leWksei0pSIKKworIzogbWlkeC5jOjExMDgKK21zZ2lkICJMb29raW5nIGZvciByZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAi5q2j5Zyo5p+l5om+5byV55So55qE5YyF5paH5Lu2IgorCisjOiBtaWR4LmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisib2lkIGZhbm91dCBvdXQgb2Ygb3JkZXI6IGZhbm91dFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSBmYW5vdXRbJWRdIgorbXNnc3RyICLlr7nosaEgSUQg5omH5Ye65peg5bqP77yaZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCisKKyM6IG1pZHguYzoxMTI4Cittc2dpZCAiVmVyaWZ5aW5nIE9JRCBvcmRlciBpbiBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICLmoKHpqozlpJrljIXntKLlvJXkuK3nmoQgT0lEIOmhuuW6jyIKKworIzogbWlkeC5jOjExMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAib2lkIGxvb2t1cCBvdXQgb2Ygb3JkZXI6IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCittc2dzdHIgIuWvueixoSBJRCDmn6Xor6Lml6Dluo/vvJpvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorCisjOiBtaWR4LmM6MTE1NworbXNnaWQgIlNvcnRpbmcgb2JqZWN0cyBieSBwYWNrZmlsZSIKK21zZ3N0ciAi6YCa6L+H5YyF5paH5Lu25Li65a+56LGh5o6S5bqPIgorCisjOiBtaWR4LmM6MTE2NAorbXNnaWQgIlZlcmlmeWluZyBvYmplY3Qgb2Zmc2V0cyIKK21zZ3N0ciAi5qCh6aqM5a+56LGh5YGP56e7IgorCisjOiBtaWR4LmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrIGVudHJ5IGZvciBvaWRbJWRdID0gJXMiCittc2dzdHIgIuS4uiBvaWRbJWRdID0gJXMg5Yqg6L295YyF5p2h55uu5aSx6LSlIgorCisjOiBtaWR4LmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrLWluZGV4IGZvciBwYWNrZmlsZSAlcyIKK21zZ3N0ciAi5Li65YyF5paH5Lu2ICVzIOWKoOi9veWMhee0ouW8leWksei0pSIKKworIzogbWlkeC5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb3JyZWN0IG9iamVjdCBvZmZzZXQgZm9yIG9pZFslZF0gPSAlczogJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKK21zZ3N0ciAib2lkWyVkXSA9ICVzIOmUmeivr+eahOWvueixoeWBj+enu++8miU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCisKKyM6IG1pZHguYzoxMjIwCittc2dpZCAiQ291bnRpbmcgcmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICLmraPlnKjlr7nlvJXnlKjlr7nosaHorqHmlbAiCisKKyM6IG1pZHguYzoxMjMwCittc2dpZCAiRmluZGluZyBhbmQgZGVsZXRpbmcgdW5yZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAi5q2j5Zyo5p+l5om+5ZKM5Yig6Zmk5pyq5byV55So55qE5YyF5paH5Lu2IgorCisjOiBtaWR4LmM6MTM4OAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMiCittc2dzdHIgIuS4jeiDveW8gOWniyBwYWNrLW9iamVjdHMiCisKKyM6IG1pZHguYzoxNDA3Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMiCittc2dzdHIgIuS4jeiDvee7k+adnyBwYWNrLW9iamVjdHMiCisKKyM6IG5hbWUtaGFzaC5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfZGlyIHRocmVhZDogJXMiCittc2dzdHIgIuS4jeiDveWIm+W7uiBsYXp5X2RpciDnur/nqIvvvJolcyIKKworIzogbmFtZS1oYXNoLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgIuS4jeiDveWIm+W7uiBsYXp5X25hbWUg57q/56iL77yaJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsYXp5X25hbWUgdGhyZWFkOiAlcyIKK21zZ3N0ciAi5LiN6IO95Yqg5YWlIGxhc3lfbmFtZSDnur/nqIvvvJolcyIKKworIzogbm90ZXMtbWVyZ2UuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBwcmV2aW91cyBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIHVzZSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHRvICIKKyJjb21taXQvYWJvcnQgdGhlIHByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgbm90ZXMgbWVyZ2UuIgorbXNnc3RyICIiCisi5oKo55qE5YmN5LiA5qyh5rOo6YeK5ZCI5bm25bCa5pyq57uT5p2f77yI5a2Y5ZyoICVz77yJ44CCXG4iCisi5Zyo5byA5aeL5LiA5Liq5paw55qE5rOo6YeK5ZCI5bm25LmL5YmN77yM6K+35L2/55SoICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIOaIluiAhSAnZ2l0ICIKKyJub3RlcyBtZXJnZSAtLWFib3J0JyDmnaXmj5DkuqQv57uI5q2i5YmN5LiA5qyh5ZCI5bm244CCIgorCisjOiBub3Rlcy1tZXJnZS5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuIgorbXNnc3RyICLmgqjlsJrmnKrnu5PmnZ/ms6jph4rlkIjlubbvvIjlrZjlnKggJXPvvInjgIIiCisKKyM6IG5vdGVzLXV0aWxzLmM6NDYKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIuS4jeiDveaPkOS6pOacquWIneWni+WMli/mnKrlvJXnlKjnmoTms6jop6PmoJEiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAi5Z2P55qEIG5vdGVzLnJld3JpdGVNb2RlIOWAvO+8miclcyciCisKKyM6IG5vdGVzLXV0aWxzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICLmi5Lnu53lkJEgJXPvvIjlnKggcmVmcy9ub3Rlcy8g5LmL5aSW77yJ5YaZ5YWl5rOo6KejIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mCisjLiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMKKyMuIGl0cyB2YWx1ZS4KKyMuCisjOiBub3Rlcy11dGlscy5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIuWdj+eahCAlcyDlgLzvvJonJXMnIgorCisjOiBvYmplY3QuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIFwiJXNcIiIKK21zZ3N0ciAi5peg5pWI55qE5a+56LGh57G75Z6LIFwiJXNcIiIKKworIzogb2JqZWN0LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBhICVzLCBub3QgYSAlcyIKK21zZ3N0ciAi5a+56LGhICVzIOaYr+S4gOS4qiAlc++8jOS4jeaYr+S4gOS4qiAlcyIKKworIzogb2JqZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBoYXMgdW5rbm93biB0eXBlIGlkICVkIgorbXNnc3RyICLlr7nosaEgJXMg5pyJ5pyq55+l55qE57G75Z6LIGlkICVkIgorCisjOiBvYmplY3QuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdDogJXMiCittc2dzdHIgIuS4jeiDveino+aekOWvueixoe+8miVzIgorCisjOiBvYmplY3QuYzoyNjYgb2JqZWN0LmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggJXMiCittc2dzdHIgIuWTiOW4jOWAvOS4jiAlcyDkuI3ljLnphY0iCisKKyM6IHBhY2tmaWxlLmM6NjI5Cittc2dpZCAib2Zmc2V0IGJlZm9yZSBlbmQgb2YgcGFja2ZpbGUgKGJyb2tlbiAuaWR4PykiCittc2dzdHIgIuWBj+enu+mHj+WcqOWMheaWh+S7tue7k+adn+S5i+WJje+8iOaNn+Wdj+eahCAuaWR477yf77yJIgorCisjOiBwYWNrZmlsZS5jOjE4OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJlZm9yZSBzdGFydCBvZiBwYWNrIGluZGV4IGZvciAlcyAoY29ycnVwdCBpbmRleD8pIgorbXNnc3RyICLlgY/np7vph4/lnKggJXMg55qE5YyF57Si5byV5byA5aeL5LmL5YmN77yI5o2f5Z2P55qE57Si5byV77yf77yJIgorCisjOiBwYWNrZmlsZS5jOjE5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFjayBpbmRleCBmb3IgJXMgKHRydW5jYXRlZCBpbmRleD8pIgorbXNnc3RyICLlgY/np7vph4/otorov4fkuoYgJXMg55qE5YyF57Si5byV55qE57uT5bC+77yI6KKr5oiq5pat55qE57Si5byV77yf77yJIgorCisjOiBwYWNrLWJpdG1hcC5jOjgwMCBwYWNrLWJpdG1hcC5jOjgwNiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBzaXplIG9mICVzIgorbXNnc3RyICLml6Dms5XlvpfliLAgJXMg55qE5aSn5bCPIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiJXMg6ZyA6KaB5LiA5Liq5YC8IgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJXMiCittc2dzdHIgIiVzIOS4jiAlcyDkuI3lhbzlrrkiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IGluY29tcGF0aWJsZSB3aXRoIHNvbWV0aGluZyBlbHNlIgorbXNnc3RyICIlc++8muWSjOWFtuWug+eahOS4jeWFvOWuuSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkyIHBhcnNlLW9wdGlvbnMuYzo5NiBwYXJzZS1vcHRpb25zLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRha2VzIG5vIHZhbHVlIgorbXNnc3RyICIlcyDkuI3lj5blgLwiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpc24ndCBhdmFpbGFibGUiCittc2dzdHIgIiVzIOS4jeWPr+eUqCIKKworIzogcGFyc2Utb3B0aW9ucy5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2l0aCBhbiBvcHRpb25hbCBrL20vZyBzdWZmaXgiCittc2dzdHIgIiVzIOacn+acm+S4gOS4qumdnui0n+aVtOaVsOWSjOS4gOS4quWPr+mAieeahCBrL20vZyDlkI7nvIAiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIG9wdGlvbjogJXMgKGNvdWxkIGJlIC0tJXMlcyBvciAtLSVzJXMpIgorbXNnc3RyICLmnInmrafkuYnnmoTpgInpobnvvJolc++8iOWPr+S7peaYryAtLSVzJXMg5oiWIC0tJXMlc++8iSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjQyMCBwYXJzZS1vcHRpb25zLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyk/IgorbXNnc3RyICLkvaDnmoTmhI/mgJ3mmK8gYC0tJXNg77yI5pyJ5Lik5Liq55+t57q/77yJ77yfIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uIGAlcyciCittc2dzdHIgIuacquefpemAiemhuSBgJXMnIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3dpdGNoIGAlYyciCittc2dzdHIgIuacquefpeW8gOWFsyBgJWMnIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm9uLWFzY2lpIG9wdGlvbiBpbiBzdHJpbmc6IGAlcyciCittc2dzdHIgIuWtl+espuS4suS4reacquefpeeahOmdniBhc2NpaSDlrZfnrKbpgInpobnvvJpgJXMnIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODg1Cittc2dpZCAiLi4uIgorbXNnc3RyICIuLi4iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzIgorbXNnc3RyICLnlKjms5XvvJolcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uLgorIy4KKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgb3I6ICVzIgorbXNnc3RyICIgIOaIlu+8miVzIgorCisjICDor5HogIXvvJrkuLrkv53or4HlnKjovpPlh7rkuK3lr7npvZDvvIzms6jmhI/osIPmlbTlj6XkuK3nqbrmoLzvvIEKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICVzIgorbXNnc3RyICIgICAgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NTIKK21zZ2lkICItTlVNIgorbXNnc3RyICIt5pWw5a2XIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIG9mIC0tJXMiCittc2dzdHIgIi0tJXMg55qE5Yir5ZCNIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MjAgcGFyc2Utb3B0aW9ucy1jYi5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIumAiemhuSBgJXMnIOacn+acm+S4gOS4quaVsOWtl+WAvCIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBleHBpcmF0aW9uIGRhdGUgJyVzJyIKK21zZ3N0ciAi5qC85byP6ZSZ6K+v55qE5Yiw5pyf5pe26Ze077yaJyVzJyIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgXCJhbHdheXNcIiwgXCJhdXRvXCIsIG9yIFwibmV2ZXJcIiIKK21zZ3N0ciAi6YCJ6aG5IGAlcycg5pyf5pybIFwiYWx3YXlzXCLjgIFcImF1dG9cIiDmiJYgXCJuZXZlclwiIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MTMwIHBhcnNlLW9wdGlvbnMtY2IuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIuagvOW8j+mUmeivr+eahOWvueixoeWQjSAnJXMnIgorCisjOiBwYXRoLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICLkuI3og73orr7nva4gJXMg5Li657uE5Y+v5YaZIgorCisjOiBwYXRoc3BlYy5jOjEzMAorbXNnaWQgIkVzY2FwZSBjaGFyYWN0ZXIgJ1xcJyBub3QgYWxsb3dlZCBhcyBsYXN0IGNoYXJhY3RlciBpbiBhdHRyIHZhbHVlIgorbXNnc3RyICLovazkuYnlrZfnrKYgJ1xcJyDkuI3og73kvZzkuLrlsZ7mgKflgLznmoTmnIDlkI7kuIDkuKrlrZfnrKYiCisKKyM6IHBhdGhzcGVjLmM6MTQ4Cittc2dpZCAiT25seSBvbmUgJ2F0dHI6JyBzcGVjaWZpY2F0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICLlj6rlhYHorrjkuIDkuKogJ2F0dHI6JyDop4TmoLzjgIIiCisKKyM6IHBhdGhzcGVjLmM6MTUxCittc2dpZCAiYXR0ciBzcGVjIG11c3Qgbm90IGJlIGVtcHR5IgorbXNnc3RyICLlsZ7mgKfop4TmoLzkuI3og73kuLrnqboiCisKKyM6IHBhdGhzcGVjLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIG5hbWUgJXMiCittc2dzdHIgIuaXoOaViOeahOWxnuaAp+WQjSAlcyIKKworIzogcGF0aHNwZWMuYzoyNTkKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICLlhajlsYDnmoQgJ2dsb2InIOWSjCAnbm9nbG9iJyDot6/lvoTop4TmoLzorr7nva7kuI3lhbzlrrkiCisKKyM6IHBhdGhzcGVjLmM6MjY2Cittc2dpZCAiIgorImdsb2JhbCAnbGl0ZXJhbCcgcGF0aHNwZWMgc2V0dGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgZ2xvYmFsICIKKyJwYXRoc3BlYyBzZXR0aW5ncyIKK21zZ3N0ciAi5YWo5bGA55qEICdsaXRlcmFsJyDot6/lvoTop4TmoLzorr7nva7lkozlhbblroPnmoTlhajlsYDot6/lvoTop4TmoLzorr7nva7kuI3lhbzlrrkiCisKKyM6IHBhdGhzcGVjLmM6MzA2Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICLot6/lvoTop4TmoLzljIXlkKvml6DmlYjnmoTnpZ7lpYfliY3nvIAiCisKKyM6IHBhdGhzcGVjLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIuWcqOi3r+W+hOinhOagvCAnJTMkcycg5Lit5peg5pWI55qE56We5aWH5YmN57yAICclMiQuKjEkcyciCisKKyM6IHBhdGhzcGVjLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAi6Lev5b6E6KeE5qC8ICclcycg55qE56We5aWH5YmN57yA57uT5bC+5bCR5LqG5LiA5LiqICcpJyIKKworIzogcGF0aHNwZWMuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIui3r+W+hOinhOagvCAnJTIkcycg5Lit5YyF5ZCr5pyq5a6e546w55qE56We5aWH5YmN57yAICclMSRjJyIKKworIzogcGF0aHNwZWMuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICdsaXRlcmFsJyBhbmQgJ2dsb2InIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiVz77yaJ2xpdGVyYWwnIOWSjCAnZ2xvYicg5LiN5YW85a65IgorCisjOiBwYXRoc3BlYy5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkgYXQgJyVzJyIKK21zZ3N0ciAiJXPvvJonJXMnIOWcqOS9jeS6jiAnJXMnIOeahOS7k+W6k+S5i+WkliIKKworIzogcGF0aHNwZWMuYzo1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyAobW5lbW9uaWM6ICclYycpIgorbXNnc3RyICInJXMn77yI5Yqp6K6w56ym77yaJyVjJ++8iSIKKworIzogcGF0aHNwZWMuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGhzcGVjIG1hZ2ljIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjb21tYW5kOiAlcyIKK21zZ3N0ciAiJXPvvJrot6/lvoTop4TmoLznpZ7lpYfliY3nvIDkuI3ooqvmraTlkb3ku6TmlK/mjIHvvJolcyIKKworIzogcGF0aHNwZWMuYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLot6/lvoTop4TmoLwgJyVzJyDkvY3kuo7nrKblj7fpk77mjqXkuK0iCisKKyM6IHBhdGhzcGVjLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgaXMgYmFkbHkgcXVvdGVkOiAlcyIKK21zZ3N0ciAi6KGM6KKr6ZSZ6K+v5Zyw5byV55So77yaJXMiCisKKyM6IHBrdC1saW5lLmM6OTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmx1c2ggcGFja2V0IgorbXNnc3RyICLml6Dms5XlhpkgZmx1c2gg5YyFIgorCisjOiBwa3QtbGluZS5jOjk5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGRlbGltIHBhY2tldCIKK21zZ3N0ciAi5peg5rOV5YaZIGRlbGltIOWMhSIKKworIzogcGt0LWxpbmUuYzoxMDYKK21zZ2lkICJmbHVzaCBwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICJmbHVzaCDljIXlhpnplJnor68iCisKKyM6IHBrdC1saW5lLmM6MTQ2IHBrdC1saW5lLmM6MjMyCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGltcG9zc2libHkgbG9uZyBsaW5lIgorbXNnc3RyICLljY/orq7plJnor6/vvJrkuI3lj6/og73nmoTplb/ooYwiCisKKyM6IHBrdC1saW5lLmM6MTYyIHBrdC1saW5lLmM6MTY0Cittc2dpZCAicGFja2V0IHdyaXRlIHdpdGggZm9ybWF0IGZhaWxlZCIKK21zZ3N0ciAi5qC85byP5YyW5YyF5YaZ5YWl6ZSZ6K+vIgorCisjOiBwa3QtbGluZS5jOjE5NgorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQgLSBkYXRhIGV4Y2VlZHMgbWF4IHBhY2tldCBzaXplIgorbXNnc3RyICLlhpnmlbDmja7ljIXlpLHotKXvvJrmlbDmja7otoXov4fkuobljIXnmoTmnIDlpKfplb/luqYiCisKKyM6IHBrdC1saW5lLmM6MjAzIHBrdC1saW5lLmM6MjEwCittc2dpZCAicGFja2V0IHdyaXRlIGZhaWxlZCIKK21zZ3N0ciAi5pWw5o2u5YyF5YaZ5YWl5aSx6LSlIgorCisjOiBwa3QtbGluZS5jOjI5NQorbXNnaWQgInJlYWQgZXJyb3IiCittc2dzdHIgIuivu+WPlumUmeivryIKKworIzogcGt0LWxpbmUuYzozMDMKK21zZ2lkICJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVuZXhwZWN0ZWRseSIKK21zZ3N0ciAi6L+c56uv5oSP5aSW5oyC5pat5LqGIgorCisjOiBwa3QtbGluZS5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIGxpbmUgbGVuZ3RoIGNoYXJhY3RlcjogJS40cyIKK21zZ3N0ciAi5Y2P6K6u6ZSZ6K+v77ya6ZSZ6K+v55qE6KGM6ZW/5bqm5a2X56ym5Liy77yaJS40cyIKKworIzogcGt0LWxpbmUuYzozNDEgcGt0LWxpbmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCAlZCIKK21zZ3N0ciAi5Y2P6K6u6ZSZ6K+v77ya6ZSZ6K+v55qE6KGM6ZW/5bqmICVkIgorCisjOiBwa3QtbGluZS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICLov5znqIvplJnor6/vvJolcyIKKworIzogcHJlbG9hZC1pbmRleC5jOjExOQorbXNnaWQgIlJlZnJlc2hpbmcgaW5kZXgiCittc2dzdHIgIuato+WcqOWIt+aWsOe0ouW8lSIKKworIzogcHJlbG9hZC1pbmRleC5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZGVkIGxzdGF0OiAlcyIKK21zZ3N0ciAi5peg5rOV5Yib5bu657q/56iLIGxzdGF077yaJXMiCisKKyM6IHByZXR0eS5jOjk4MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgIuS4jeiDveino+aekCAtLXByZXR0eSDmoLzlvI8iCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjIzCittc2dpZCAiUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICLov5znqIvmnKrorr7nva4gVVJMIgorCisjOiBwcm9taXNvci1yZW1vdGUuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9taXNvciByZW1vdGUgbmFtZSBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICJwcm9taXNvciDov5znqIvlkI3np7DkuI3og73ku6UgJy8nIOW8gOWni++8miVzIgorCisjOiByYW5nZS1kaWZmLmM6NzUKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgYGxvZ2AiCittc2dzdHIgIuS4jeiDveWQr+WKqCBgbG9nYCIKKworIzogcmFuZ2UtZGlmZi5jOjc3Cittc2dpZCAiY291bGQgbm90IHJlYWQgYGxvZ2Agb3V0cHV0IgorbXNnc3RyICLkuI3og73or7vlj5YgYGxvZ2Ag55qE6L6T5Ye6IgorCisjOiByYW5nZS1kaWZmLmM6OTYgc2VxdWVuY2VyLmM6NTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICclcyciCittc2dzdHIgIuS4jeiDveino+aekOaPkOS6pCAnJXMnIgorCisjOiByYW5nZS1kaWZmLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBnaXQgaGVhZGVyICclLipzJyIKK21zZ3N0ciAi5peg5rOV6Kej5p6QIGdpdCDlpLQgJyUuKnMnIgorCisjOiByYW5nZS1kaWZmLmM6Mjg1Cittc2dpZCAiZmFpbGVkIHRvIGdlbmVyYXRlIGRpZmYiCittc2dzdHIgIueUn+aIkCBkaWZmIOWksei0pSIKKworIzogcmFuZ2UtZGlmZi5jOjUxOCByYW5nZS1kaWZmLmM6NTIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBsb2cgZm9yICclcyciCittc2dzdHIgIuS4jeiDveino+aekCAnJXMnIOeahOaXpeW/lyIKKworIzogcmVhZC1jYWNoZS5jOjY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBhZGQgZmlsZSBhbGlhcyAnJXMnICgnJXMnIGFscmVhZHkgZXhpc3RzIGluIGluZGV4KSIKK21zZ3N0ciAi5bCG5LiN5Lya5re75Yqg5paH5Lu25Yir5ZCNICclcyfvvIgnJXMnIOW3sue7j+WtmOWcqOS6jue0ouW8leS4re+8iSIKKworIzogcmVhZC1jYWNoZS5jOjY5NgorbXNnaWQgImNhbm5vdCBjcmVhdGUgYW4gZW1wdHkgYmxvYiBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLkuI3og73lnKjlr7nosaHmlbDmja7lupPkuK3liJvlu7rnqbrnmoTmlbDmja7lr7nosaEiCisKKyM6IHJlYWQtY2FjaGUuYzo3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbiBvbmx5IGFkZCByZWd1bGFyIGZpbGVzLCBzeW1ib2xpYyBsaW5rcyBvciBnaXQtZGlyZWN0b3JpZXMiCittc2dzdHIgIiVz77ya5Y+q6IO95re75Yqg5bi46KeE5paH5Lu244CB56ym5Y+36ZO+5o6l5oiWIGdpdCDnm67lvZUiCisKKyM6IHJlYWQtY2FjaGUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0IgorbXNnc3RyICInJXMnIOayoeacieajgOWHuuS4gOS4quaPkOS6pCIKKworIzogcmVhZC1jYWNoZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaW5kZXggZmlsZSAnJXMnIgorbXNnc3RyICLml6Dms5XntKLlvJXmlofku7YgJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkICclcycgdG8gaW5kZXgiCittc2dzdHIgIuaXoOazleWcqOe0ouW8leS4rea3u+WKoCAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0ICclcyciCittc2dzdHIgIuaXoOazleWvuSAlcyDmiafooYwgc3RhdCIKKworIzogcmVhZC1jYWNoZS5jOjEzMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhcHBlYXJzIGFzIGJvdGggYSBmaWxlIGFuZCBhcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJyVzJyDnnIvotbfmnaXml6LmmK/mlofku7blj4jmmK/nm67lvZUiCisKKyM6IHJlYWQtY2FjaGUuYzoxNTM2Cittc2dpZCAiUmVmcmVzaCBpbmRleCIKK21zZ3N0ciAi5Yi35paw57Si5byVIgorCisjOiByZWFkLWNhY2hlLmM6MTY1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5kZXgudmVyc2lvbiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisi6K6+572u5LqGIGluZGV4LnZlcnNpb27vvIzkvYbmmK/lj5blgLzml6DmlYjjgIJcbiIKKyLkvb/nlKjniYjmnKwgJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisi6K6+572u5LqGIEdJVF9JTkRFWF9WRVJTSU9O77yM5L2G5piv5Y+W5YC85peg5pWI44CCXG4iCisi5L2/55So54mI5pysICVpIgorCisjOiByZWFkLWNhY2hlLmM6MTcxNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAi5Z2P55qE562+5ZCNIDB4JTA4eCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJWQiCittc2dzdHIgIuWdj+eahOe0ouW8leeJiOacrCAlZCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjkKK21zZ2lkICJiYWQgaW5kZXggZmlsZSBzaGExIHNpZ25hdHVyZSIKK21zZ3N0ciAi5Z2P55qE57Si5byV5paH5Lu2IHNoYTEg562+5ZCNIgorCisjOiByZWFkLWNhY2hlLmM6MTc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCB1c2VzICUuNHMgZXh0ZW5zaW9uLCB3aGljaCB3ZSBkbyBub3QgdW5kZXJzdGFuZCIKK21zZ3N0ciAi57Si5byV5L2/55So5LiN6KKr5pSv5oyB55qEICUuNHMg5omp5bGVIgorCisjIAkKKyM6IHJlYWQtY2FjaGUuYzoxNzYxCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICUuNHMgZXh0ZW5zaW9uIgorbXNnc3RyICLlv73nlaUgJS40cyDmianlsZUiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW5kZXggZW50cnkgZm9ybWF0IDB4JTA4eCIKK21zZ3N0ciAi5pyq55+l55qE57Si5byV5p2h55uu5qC85byPIDB4JTA4eCIKKworIzogcmVhZC1jYWNoZS5jOjE4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG5hbWUgZmllbGQgaW4gdGhlIGluZGV4LCBuZWFyIHBhdGggJyVzJyIKK21zZ3N0ciAi57Si5byV5Lit6Z2g6L+R6Lev5b6EICclcycg5pyJ6ZSZ6K+v55qE5ZCN56ew5a2X5q61IgorCisjOiByZWFkLWNhY2hlLmM6MTg3MQorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGluIGluZGV4IgorbXNnc3RyICLntKLlvJXkuK3mnInmnKrmjpLluo/nmoTmmoLlrZjmnaHnm64iCisKKyM6IHJlYWQtY2FjaGUuYzoxODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHN0YWdlIGVudHJpZXMgZm9yIG1lcmdlZCBmaWxlICclcyciCittc2dzdHIgIuWQiOW5tuaWh+S7tiAnJXMnIOacieWkmuS4quaaguWtmOadoeebriIKKworIzogcmVhZC1jYWNoZS5jOjE4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgZm9yICclcyciCittc2dzdHIgIiclcycg55qE5pyq5o6S5bqP5pqC5a2Y5p2h55uuIgorCisjOiByZWFkLWNhY2hlLmM6MTk4MyByZWFkLWNhY2hlLmM6MjI3MSByZXJlcmUuYzo1NjUgcmVyZXJlLmM6NTk5IHJlcmVyZS5jOjExMTEKKyM6IHN1Ym1vZHVsZS5jOjE2MTkgYnVpbHRpbi9hZGQuYzo1MzIgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxODEKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NzAgYnVpbHRpbi9jaGVja291dC5jOjY1NiBidWlsdGluL2NsZWFuLmM6OTY3CisjOiBidWlsdGluL2NvbW1pdC5jOjM2NyBidWlsdGluL2RpZmYtdHJlZS5jOjEyMCBidWlsdGluL2dyZXAuYzo0ODUKKyM6IGJ1aWx0aW4vbXYuYzoxNDUgYnVpbHRpbi9yZXNldC5jOjI0NiBidWlsdGluL3JtLmM6MjkwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzMyCittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICLntKLlvJXmlofku7bmjZ/lnY8iCisKKyM6IHJlYWQtY2FjaGUuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgIuaXoOazleWIm+W7uiBsb2FkX2NhY2hlX2VudHJpZXMg57q/56iL77yaJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICLml6Dms5XliqDlhaUgbG9hZF9jYWNoZV9lbnRyaWVzIOe6v+eoi++8miVzIgorCisjOiByZWFkLWNhY2hlLmM6MjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW5kZXggZmlsZSBvcGVuIGZhaWxlZCIKK21zZ3N0ciAiJXPvvJrmiZPlvIDntKLlvJXmlofku7blpLHotKUiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgc3RhdCB0aGUgb3BlbiBpbmRleCIKK21zZ3N0ciAiJXPvvJrkuI3og73lr7nmiZPlvIDnmoTntKLlvJXmiafooYwgc3RhdCDmk43kvZwiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiJXPvvJrntKLlvJXmlofku7bmr5TpooTmnJ/nmoTlsI8iCisKKyM6IHJlYWQtY2FjaGUuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmFibGUgdG8gbWFwIGluZGV4IGZpbGUiCittc2dzdHIgIiVz77ya5peg5rOV5a+557Si5byV5paH5Lu25omn6KGMIG1hcCDmk43kvZwiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgIuaXoOazleWIm+W7uiBsb2FkX2luZGV4X2V4dGVuc2lvbnMg57q/56iL77yaJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICLml6Dms5XliqDlhaUgbG9hZF9pbmRleF9leHRlbnNpb25zIOe6v+eoi++8miVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI4MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZnJlc2hlbiBzaGFyZWQgaW5kZXggJyVzJyIKK21zZ3N0ciAi5peg5rOV5Yi35paw5YWx5Lqr57Si5byVICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzoyMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiCittc2dzdHIgIuaNn+Wdj+eahOe0ouW8le+8jOacn+acm+WcqCAlMiRzIOS4reeahCAlMSRz77yM5b6X5YiwICUzJHMiCisKKyM6IHJlYWQtY2FjaGUuYzozMDI2IHN0cmJ1Zi5jOjExNjAgd3JhcHBlci5jOjYyMiBidWlsdGluL21lcmdlLmM6MTEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAi5LiN6IO95YWz6ZetICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzozMTI5IHNlcXVlbmNlci5jOjIzNDMgc2VxdWVuY2VyLmM6Mzk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICLkuI3og73lr7kgJyVzJyDosIPnlKggc3RhdCIKKworIzogcmVhZC1jYWNoZS5jOjMxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gZ2l0IGRpcjogJXMiCittc2dzdHIgIuS4jeiDveaJk+W8gCBnaXQg55uu5b2V77yaJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bmxpbms6ICVzIgorbXNnc3RyICLml6Dms5XliKDpmaTvvJolcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpeCBwZXJtaXNzaW9uIGJpdHMgb24gJyVzJyIKK21zZ3N0ciAi5LiN6IO95L+u5aSNICclcycg55qE5p2D6ZmQ5L2NIgorCisjOiByZWFkLWNhY2hlLmM6MzMyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IGRyb3AgdG8gc3RhZ2UgIzAiCittc2dzdHIgIiVz77ya5LiN6IO96JC95Yiw5pqC5a2Y5Yy6ICMwIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMQorbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGlzIHdpdGggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZScuXG4iCisiT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCittc2dzdHIgIiIKKyLmgqjlj6/ku6XnlKggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIOS/ruato++8jOeEtuWQjuaJp+ihjCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJ+OAglxuIgorIuaIluiAheaCqOWPr+S7peeUqCAnZ2l0IHJlYmFzZSAtLWFib3J0JyDnu4jmraLlj5jln7rjgIJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVucmVjb2duaXplZCBzZXR0aW5nICVzIGZvciBvcHRpb24gcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suIElnbm9yaW5nLiIKK21zZ3N0ciAi6YCJ6aG5IHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrIOeahOWAvCAlcyDml6Dms5Xor4bliKvjgILlt7Llv73nlaXjgIIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjQyCittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21tYW5kPiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJiLCBicmVhayA9IHN0b3AgaGVyZSAoY29udGludWUgcmViYXNlIGxhdGVyIHdpdGggJ2dpdCByZWJhc2UgLS1jb250aW51ZScpXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLlxuIgorbXNnc3RyICIiCisiXG4iCisi5ZG95LukOlxuIgorInAsIHBpY2sgPOaPkOS6pD4gPSDkvb/nlKjmj5DkuqRcbiIKKyJyLCByZXdvcmQgPOaPkOS6pD4gPSDkvb/nlKjmj5DkuqTvvIzkvYbkv67mlLnmj5DkuqTor7TmmI5cbiIKKyJlLCBlZGl0IDzmj5DkuqQ+ID0g5L2/55So5o+Q5Lqk77yM6L+b5YWlIHNoZWxsIOS7peS+v+i/m+ihjOaPkOS6pOS/ruihpVxuIgorInMsIHNxdWFzaCA85o+Q5LqkPiA9IOS9v+eUqOaPkOS6pO+8jOS9huiejeWQiOWIsOWJjeS4gOS4quaPkOS6pFxuIgorImYsIGZpeHVwIDzmj5DkuqQ+ID0g57G75Ly85LqOIFwic3F1YXNoXCLvvIzkvYbkuKLlvIPmj5DkuqTor7TmmI7ml6Xlv5dcbiIKKyJ4LCBleGVjIDzlkb3ku6Q+ID0g5L2/55SoIHNoZWxsIOi/kOihjOWRveS7pO+8iOatpOihjOWJqeS9memDqOWIhu+8iVxuIgorImIsIGJyZWFrID0g5Zyo5q2k5aSE5YGc5q2i77yI5L2/55SoICdnaXQgcmViYXNlIC0tY29udGludWUnIOe7p+e7reWPmOWfuu+8iVxuIgorImQsIGRyb3AgPOaPkOS6pD4gPSDliKDpmaTmj5DkuqRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0g5Li65b2T5YmNIEhFQUQg5omT5LiK5qCH6K6wXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IOmHjee9riBIRUFEIOWIsOivpeagh+iusFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIOWIm+W7uuS4gOS4quWQiOW5tuaPkOS6pO+8jOW5tuS9v+eUqOWOn+Wni+eahOWQiOW5tuaPkOS6pOivtOaYju+8iOWmguaenOayoeacieaMh+WumlxuIgorIi4gICAgICAg5Y6f5aeL5o+Q5Lqk77yM5L2/55So5rOo6YeK6YOo5YiG55qEIG9uZWxpbmUg5L2c5Li65o+Q5Lqk6K+05piO77yJ44CC5L2/55SoXG4iCisiLiAgICAgICAtYyA85o+Q5LqkPiDlj6/ku6XnvJbovpHmj5DkuqTor7TmmI7jgIJcbiIKKyJcbiIKKyLlj6/ku6Xlr7nov5nkupvooYzph43mlrDmjpLluo/vvIzlsIbku47kuIroh7PkuIvmiafooYzjgIJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmQpIgorbXNnaWRfcGx1cmFsICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZHMpIgorbXNnc3RyWzBdICLlj5jln7ogJXMg5YiwICVz77yIJWQg5Liq5o+Q5Lqk77yJIgorbXNnc3RyWzFdICLlj5jln7ogJXMg5YiwICVz77yIJWQg5Liq5o+Q5Lqk77yJIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo3MiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjI4Cittc2dpZCAiIgorIlxuIgorIkRvIG5vdCByZW1vdmUgYW55IGxpbmUuIFVzZSAnZHJvcCcgZXhwbGljaXRseSB0byByZW1vdmUgYSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLkuI3opoHliKDpmaTku7vmhI/kuIDooYzjgILkvb/nlKggJ2Ryb3AnIOaYvuW8j+WcsOWIoOmZpOS4gOS4quaPkOS6pOOAglxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo3NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjMyCittc2dpZCAiIgorIlxuIgorIklmIHlvdSByZW1vdmUgYSBsaW5lIGhlcmUgVEhBVCBDT01NSVQgV0lMTCBCRSBMT1NULlxuIgorbXNnc3RyICIiCisiXG4iCisi5aaC5p6c5oKo5Zyo6L+Z6YeM5Yig6Zmk5LiA6KGM77yM5a+55bqU55qE5o+Q5Lqk5bCG5Lya5Lii5aSx44CCXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjgxIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzEKK21zZ2lkICIiCisiXG4iCisiWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuXG4iCisiVG8gY29udGludWUgcmViYXNlIGFmdGVyIGVkaXRpbmcsIHJ1bjpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLmgqjmraPlnKjkv67mlLnov5vooYzkuK3nmoTkuqTkupLlvI/lj5jln7rlvoXlip7liJfooajjgILoi6XopoHlnKjnvJbovpHnu5PmnZ/lkI7nu6fnu63lj5jln7rvvIxcbiIKKyLor7fmiafooYzvvJpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjg2IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDgKK21zZ2lkICIiCisiXG4iCisiSG93ZXZlciwgaWYgeW91IHJlbW92ZSBldmVyeXRoaW5nLCB0aGUgcmViYXNlIHdpbGwgYmUgYWJvcnRlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIueEtuiAjO+8jOWmguaenOaCqOWIoOmZpOWFqOmDqOWGheWuue+8jOWPmOWfuuaTjeS9nOWwhuS8mue7iOatouOAglxuIgorIlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMTAgcmVyZXJlLmM6NDg1IHJlcmVyZS5jOjY5MiBzZXF1ZW5jZXIuYzozNDQ0CisjOiBzZXF1ZW5jZXIuYzozNDcwIHNlcXVlbmNlci5jOjUxMjUgYnVpbHRpbi9mc2NrLmM6MzQ2IGJ1aWx0aW4vcmViYXNlLmM6MjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICLkuI3og73lhpnlhaUgJyVzJyIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTE2IGJ1aWx0aW4vcmViYXNlLmM6MTg0IGJ1aWx0aW4vcmViYXNlLmM6MjEwCisjOiBidWlsdGluL3JlYmFzZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iCittc2dzdHIgIuS4jeiDveWGmeWFpSAnJXMn44CCIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LlxuIgorIkRyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOlxuIgorbXNnc3RyICIiCisi6K2m5ZGK77ya5LiA5Lqb5o+Q5Lqk5Y+v6IO96KKr5oSP5aSW5Lii5byD44CCXG4iCisi5Lii5byD55qE5o+Q5Lqk77yI5LuO5paw5Yiw5pen77yJ77yaXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgXCJkcm9wXCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuXG4iCisiXG4iCisiVXNlICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyB0byBjaGFuZ2UgdGhlIGxldmVsIG9mICIKKyJ3YXJuaW5ncy5cbiIKKyJUaGUgcG9zc2libGUgYmVoYXZpb3VycyBhcmU6IGlnbm9yZSwgd2FybiwgZXJyb3IuXG4iCisiXG4iCittc2dzdHIgIiIKKyLkuLrpgb/lhY3ov5nmnaHkv6Hmga/vvIzkvb/nlKggXCJkcm9wXCIg5oyH5Luk5pi+5byP5Zyw5Yig6Zmk5LiA5Liq5o+Q5Lqk44CCXG4iCisiXG4iCisi5L2/55SoICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyDmnaXkv67mlLnorablkYrnuqfliKvjgIJcbiIKKyLlj6/pgInlgLzmnInvvJppZ25vcmXjgIF3YXJu44CBZXJyb3LjgIJcbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MjMzIHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjIzOCBzZXF1ZW5jZXIuYzoyMjYyCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MCBidWlsdGluL3JlYmFzZS5jOjE5NSBidWlsdGluL3JlYmFzZS5jOjIyMQorIzogYnVpbHRpbi9yZWJhc2UuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJy4iCittc2dzdHIgIuS4jeiDveivu+WPliAnJXMn44CCIgorCisjOiByZWZzLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgb2JqZWN0ISIKK21zZ3N0ciAiJXMg5rKh5pyJ5oyH5ZCR5LiA5Liq5pyJ5pWI55qE5a+56LGh77yBIgorCisjOiByZWZzLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGRhbmdsaW5nIHN5bXJlZiAlcyIKK21zZ3N0ciAi5b+955Wl5oKs56m656ym5Y+35byV55SoICVzIgorCisjOiByZWZzLmM6NjY5IHJlZi1maWx0ZXIuYzoyMDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGJyb2tlbiByZWYgJXMiCittc2dzdHIgIuW/veeVpeaNn+Wdj+eahOW8leeUqCAlcyIKKworIzogcmVmcy5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAi5peg5rOV5Li65YaZ5YWl5omT5byAICclcyfvvJolcyIKKworIzogcmVmcy5jOjgxNCByZWZzLmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAnJXMnIgorbXNnc3RyICLml6Dms5Xor7vlj5blvJXnlKggJyVzJyIKKworIzogcmVmcy5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi5byV55SoICclcycg5bey57uP5a2Y5ZyoIgorCisjOiByZWZzLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gd3JpdGluZyAnJXMnIgorbXNnc3RyICLlhpnlhaUgJyVzJyDml7bmhI/lpJbnmoTlr7nosaEgSUQiCisKKyM6IHJlZnMuYzo4MzMgc2VxdWVuY2VyLmM6NDA3IHNlcXVlbmNlci5jOjI3MDEgc2VxdWVuY2VyLmM6MjkwNQorIzogc2VxdWVuY2VyLmM6MjkxOSBzZXF1ZW5jZXIuYzozMTc3IHNlcXVlbmNlci5jOjUwMzYgc3RyYnVmLmM6MTE1NworIzogd3JhcHBlci5jOjYyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO95YaZ5YWlICclcyciCisKKyM6IHJlZnMuYzo4NjAgc3RyYnVmLmM6MTE1NSB3cmFwcGVyLmM6MTg4IHdyYXBwZXIuYzozNTggYnVpbHRpbi9hbS5jOjcxOQorIzogYnVpbHRpbi9yZWJhc2UuYzoxMDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgIuaXoOazleaJk+W8gCAnJXMnIOi/m+ihjOWGmeWFpSIKKworIzogcmVmcy5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG9iamVjdCBJRCB3aGVuIGRlbGV0aW5nICclcyciCittc2dzdHIgIuWIoOmZpCAnJXMnIOaXtuaEj+WklueahOWvueixoSBJRCIKKworIzogcmVmcy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyBoYXMgZ2FwIGFmdGVyICVzIgorbXNnc3RyICLlvJXnlKggJXMg55qE5pel5b+X5ZyoICVzIOS5i+WQjuaciee8uuWPoyIKKworIzogcmVmcy5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgdW5leHBlY3RlZGx5IGVuZGVkIG9uICVzIgorbXNnc3RyICLlvJXnlKggJXMg55qE5pel5b+X5oSP5aSW57uI5q2i5LqOICVzICIKKworIzogcmVmcy5jOjEwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciAlcyBpcyBlbXB0eSIKK21zZ3N0ciAiJXMg55qE5pel5b+X5Li656m6IgorCisjOiByZWZzLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byB1cGRhdGUgcmVmIHdpdGggYmFkIG5hbWUgJyVzJyIKK21zZ3N0ciAi5ouS57ud5pu05paw5pyJ6ZSZ6K+v5ZCN56ewICclcycg55qE5byV55SoIgorCisjOiByZWZzLmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cGRhdGVfcmVmIGZhaWxlZCBmb3IgcmVmICclcyc6ICVzIgorbXNnc3RyICLlr7nlvJXnlKggJyVzJyDmiafooYwgdXBkYXRlX3JlZiDlpLHotKXvvJolcyIKKworIzogcmVmcy5jOjIwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgdXBkYXRlcyBmb3IgcmVmICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgIuS4jeWFgeiuuOWvueW8leeUqCAnJXMnIOWkmuasoeabtOaWsCIKKworIzogcmVmcy5jOjIwNTUKK21zZ2lkICJyZWYgdXBkYXRlcyBmb3JiaWRkZW4gaW5zaWRlIHF1YXJhbnRpbmUgZW52aXJvbm1lbnQiCittc2dzdHIgIuWcqOmalOemu+eOr+Wig+S4reemgeatouabtOaWsOW8leeUqCIKKworIzogcmVmcy5jOjIxNTEgcmVmcy5jOjIxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiJyVzJyDlt7LlrZjlnKjvvIzml6Dms5XliJvlu7ogJyVzJyIKKworIzogcmVmcy5jOjIxNTcgcmVmcy5jOjIxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHByb2Nlc3MgJyVzJyBhbmQgJyVzJyBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICLml6Dms5XlkIzml7blpITnkIYgJyVzJyDlkowgJyVzJyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIHJlZmVyZW5jZSAlcyIKK21zZ3N0ciAi5peg5rOV5Yig6Zmk5byV55SoICVzIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjQ3IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTQxCisjOiByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZSAlczogJXMiCittc2dzdHIgIuaXoOazleWIoOmZpOW8leeUqCAlc++8miVzIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjUwIHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiCittc2dzdHIgIuaXoOazleWIoOmZpOW8leeUqO+8miVzIgorCisjOiByZWZzcGVjLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmc3BlYyAnJXMnIgorbXNnc3RyICLml6DmlYjnmoTlvJXnlKjooajovr7lvI/vvJonJXMnIgorCisjOiByZWYtZmlsdGVyLmM6NDIgd3Qtc3RhdHVzLmM6MTkzOAorbXNnaWQgImdvbmUiCittc2dzdHIgIuS4ouWksSIKKworIzogcmVmLWZpbHRlci5jOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkIgorbXNnc3RyICLpooblhYggJWQiCisKKyM6IHJlZi1maWx0ZXIuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJiZWhpbmQgJWQiCittc2dzdHIgIuiQveWQjiAlZCIKKworIzogcmVmLWZpbHRlci5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWQiCittc2dzdHIgIumihuWFiCAlZO+8jOiQveWQjiAlZCIKKworIzogcmVmLWZpbHRlci5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGNvbG9yOjxjb2xvcj4pIgorbXNnc3RyICLmnJ/mnJvnmoTmoLzlvI/vvJolJShjb2xvcjo86aKc6ImyPikiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiCittc2dzdHIgIuacquiDveivhuWIq+eahOminOiJsu+8miUlKGNvbG9yOiVzKSIKKworIzogcmVmLWZpbHRlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6bHN0cmlwPSVzIgorbXNnc3RyICLmnJ/mnJvmlbTmlbDlgLwgcmVmbmFtZTpsc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOnJzdHJpcD0lcyIKK21zZ3N0ciAi5pyf5pyb5pW05pWw5YC8IHJlZm5hbWU6cnN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJSglcykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLmnKrog73or4bliKvnmoQgJSUoJXMpIOWPguaVsO+8miVzIgorCisjOiByZWYtZmlsdGVyLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKG9iamVjdHR5cGUpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShvYmplY3R0eXBlKSDkuI3luKblj4LmlbAiCisKKyM6IHJlZi1maWx0ZXIuYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdHNpemUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq6IO96K+G5Yir55qEICUlKG9iamVjdHNpemUpIOWPguaVsO+8miVzIgorCisjOiByZWYtZmlsdGVyLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGRlbHRhYmFzZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGRlbHRhYmFzZSkg5LiN5bim5Y+C5pWwIgorCisjOiByZWYtZmlsdGVyLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGJvZHkpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShib2R5KSDkuI3luKblj4LmlbAiCisKKyM6IHJlZi1maWx0ZXIuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoc3ViamVjdCkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKHN1YmplY3QpIOS4jeW4puWPguaVsCIKKworIzogcmVmLWZpbHRlci5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duICUlKHRyYWlsZXJzKSBhcmd1bWVudDogJXMiCittc2dzdHIgIuacquefpeeahCAlJSh0cmFpbGVycykg5Y+C5pWw77yaJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgY29udGVudHM6bGluZXM9JXMiCittc2dzdHIgIuacn+acm+S4gOS4quato+aVsCBjb250ZW50czpsaW5lcz0lcyIKKworIzogcmVmLWZpbHRlci5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoY29udGVudHMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq6IO96K+G5Yir55qEICUlKGNvbnRlbnRzKSDlj4LmlbDvvJolcyIKKworIzogcmVmLWZpbHRlci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBvYmplY3RuYW1lOnNob3J0PSVzIgorbXNnc3RyICLmnJ/mnJvkuIDkuKrmraPmlbAgb2JqZWN0bmFtZTpzaG9ydD0lcyIKKworIzogcmVmLWZpbHRlci5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0bmFtZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLmnKrog73or4bliKvnmoQgJSUob2JqZWN0bmFtZSkg5Y+C5pWw77yaJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShhbGlnbjo8d2lkdGg+LDxwb3NpdGlvbj4pIgorbXNnc3RyICLmnJ/mnJvnmoTmoLzlvI/vvJolJShhbGlnbjo85a695bqmPiw85L2N572uPikiCisKKyM6IHJlZi1maWx0ZXIuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBvc2l0aW9uOiVzIgorbXNnc3RyICLmnKrog73or4bliKvnmoTkvY3nva7vvJolcyIKKworIzogcmVmLWZpbHRlci5jOjQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2lkdGg6JXMiCittc2dzdHIgIuacquiDveivhuWIq+eahOWuveW6pu+8miVzIgorCisjOiByZWYtZmlsdGVyLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLmnKrog73or4bliKvnmoQgJSUoYWxpZ24pIOWPguaVsO+8miVzIgorCisjOiByZWYtZmlsdGVyLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHdpZHRoIGV4cGVjdGVkIHdpdGggdGhlICUlKGFsaWduKSBhdG9tIgorbXNnc3RyICLlhYPntKAgJSUoYWxpZ24pIOmcgOimgeS4gOS4quato+aVsOeahOWuveW6piIKKworIzogcmVmLWZpbHRlci5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoaWYpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq6IO96K+G5Yir55qEICUlKGlmKSDlj4LmlbDvvJolcyIKKworIzogcmVmLWZpbHRlci5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAi5qC85byP6ZSZ6K+v55qE5a2X5q615ZCN77yaJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIuacquefpeeahOWtl+auteWQje+8miUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5LCBidXQgdGhlIGZpZWxkICclLipzJyByZXF1aXJlcyBhY2Nlc3MgdG8gb2JqZWN0IGRhdGEiCittc2dzdHIgIuS4jeaYr+S4gOS4qiBnaXQg5LuT5bqT77yM5L2G5piv5a2X5q61ICclLipzJyDpnIDopoHorr/pl67lr7nosaHmlbDmja4iCisKKyM6IHJlZi1maWx0ZXIuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShpZikgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICLmoLzlvI/vvJrkvb/nlKjkuoYgJSUoaWYpIOWFg+e0oOiAjOayoeaciSAlJSh0aGVuKSDlhYPntKAiCisKKyM6IHJlZi1maWx0ZXIuYzo3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAi5qC85byP77ya5L2/55So5LqGICUlKHRoZW4pIOWFg+e0oOiAjOayoeaciSAlJShpZikg5YWD57SgIgorCisjOiByZWYtZmlsdGVyLmM6Nzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICLmoLzlvI/vvJolJSh0aGVuKSDlhYPntKDnlKjkuoblpJrmrKEiCisKKyM6IHJlZi1maWx0ZXIuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgYWZ0ZXIgJSUoZWxzZSkiCittc2dzdHIgIuagvOW8j++8miUlKHRoZW4pIOWFg+e0oOeUqOWcqOS6hiAlJShlbHNlKSDkuYvlkI4iCisKKyM6IHJlZi1maWx0ZXIuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAi5qC85byP77ya5L2/55So5LqGICUlKGVsc2UpIOWFg+e0oOiAjOayoeaciSAlJShpZikg5YWD57SgIgorCisjOiByZWYtZmlsdGVyLmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICLmoLzlvI/vvJrkvb/nlKjkuoYgJSUoZWxzZSkg5YWD57Sg6ICM5rKh5pyJICUlKHRoZW4pIOWFg+e0oCIKKworIzogcmVmLWZpbHRlci5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAi5qC85byP77yaJSUoZWxzZSkg5YWD57Sg55So5LqG5aSa5qyhIgorCisjOiByZWYtZmlsdGVyLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIHVzZWQgd2l0aG91dCBjb3JyZXNwb25kaW5nIGF0b20iCittc2dzdHIgIuagvOW8j++8muS9v+eUqOS6hiAlJShlbmQpIOWFg+e0oOWNtOayoeacieWug+eahOWvueW6lOWFg+e0oCIKKworIzogcmVmLWZpbHRlci5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZm9ybWF0IHN0cmluZyAlcyIKK21zZ3N0ciAi6ZSZ6K+v55qE5qC85byP5YyW5a2X56ym5LiyICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIHJlYmFzaW5nICVzIgorbXNnc3RyICLpnZ7liIbmlK/vvIzmraPlj5jln7ogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgcmViYXNpbmcgZGV0YWNoZWQgSEVBRCAlcyIKK21zZ3N0ciAi6Z2e5YiG5pSv77yM5q2j5Y+Y5Z+65YiG56a75aS05oyH6ZKIICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIGJpc2VjdCBzdGFydGVkIG9uICVzIgorbXNnc3RyICLpnZ7liIbmlK/vvIzkuozliIbmn6Xmib7lvIDlp4vkuo4gJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTA0Cittc2dpZCAibm8gYnJhbmNoIgorbXNnc3RyICLpnZ7liIbmlK8iCisKKyM6IHJlZi1maWx0ZXIuYzoxNTQwIHJlZi1maWx0ZXIuYzoxNzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgb2JqZWN0ICVzIGZvciAlcyIKK21zZ3N0ciAi57y65aSxICUyJHMg55qE5a+56LGhICUxJHMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhcnNlX29iamVjdF9idWZmZXIgZmFpbGVkIG9uICVzIGZvciAlcyIKK21zZ3N0ciAicGFyc2Vfb2JqZWN0X2J1ZmZlciDlpLHotKXkuo4gJTIkcyDnmoQgJTEkcyIKKworIzogcmVmLWZpbHRlci5jOjIwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICLmoLzlvI/plJnor6/nmoTlr7nosaEgJyVzJyIKKworIzogcmVmLWZpbHRlci5jOjIwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgJXMiCittc2dzdHIgIuW/veeVpeW4puaciemUmeivr+WQjeensCAlcyDnmoTlvJXnlKgiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIG1pc3NpbmciCittc2dzdHIgIuagvOW8j++8mue8uuWwkSAlJShlbmQpIOWFg+e0oCIKKworIzogcmVmLWZpbHRlci5jOjI0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1tZXJnZWQiCittc2dzdHIgIumAiemhuSBgJXMnIOWSjCAtLW1lcmdlZCDkuI3lhbzlrrkiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8tbWVyZ2VkIgorbXNnc3RyICLpgInpobkgYCVzJyDlkowgLS1uby1tZXJnZWQg5LiN5YW85a65IgorCisjOiByZWYtZmlsdGVyLmM6MjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIuagvOW8j+mUmeivr+eahOWvueixoeWQjSAlcyIKKworIzogcmVmLWZpbHRlci5jOjI1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgbXVzdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAi6YCJ6aG5IGAlcycg5b+F6aG75oyH5ZCR5LiA5Liq5o+Q5LqkIgorCisjOiByZW1vdGUuYzozNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlnIHJlbW90ZSBzaG9ydGhhbmQgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIKK21zZ3N0ciAi6YWN572u55qE6L+c56iL55+t5ZCN56ew5LiN6IO95LulICcvJyDlvIDlp4vvvJolcyIKKworIzogcmVtb3RlLmM6NDE0Cittc2dpZCAibW9yZSB0aGFuIG9uZSByZWNlaXZlcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0IgorbXNnc3RyICLmj5DkvpvkuobkuIDkuKrku6XkuIrnmoQgcmVjZWl2ZXBhY2vvvIzkvb/nlKjnrKzkuIDkuKoiCisKKyM6IHJlbW90ZS5jOjQyMgorbXNnaWQgIm1vcmUgdGhhbiBvbmUgdXBsb2FkcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0IgorbXNnc3RyICLmj5DkvpvkuobkuIDkuKrku6XkuIrnmoQgdXBsb2FkcGFja++8jOS9v+eUqOesrOS4gOS4qiIKKworIzogcmVtb3RlLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAi5LiN6IO95ZCM5pe26I635Y+WICVzIOWSjCAlcyDoh7MgJXMiCisKKyM6IHJlbW90ZS5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1c3VhbGx5IHRyYWNrcyAlcywgbm90ICVzIgorbXNnc3RyICIlcyDpgJrluLjot5/ouKogJXPvvIzogIzpnZ4gJXMiCisKKyM6IHJlbW90ZS5jOjYyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiCittc2dzdHIgIiVzIOWQjOaXtui3n+i4qiAlcyDlkowgJXMiCisKKyM6IHJlbW90ZS5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgJyVzJyBvZiBwYXR0ZXJuIGhhZCBubyAnKiciCittc2dzdHIgIuaooeW8j+eahOmUriAnJXMnIOayoeaciSAnKiciCisKKyM6IHJlbW90ZS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIKK21zZ3N0ciAi5qih5byP55qE5YC8ICclcycg5rKh5pyJICcqJyIKKworIzogcmVtb3RlLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkiCittc2dzdHIgIua6kOW8leeUqOihqOi+vuW8jyAlcyDmsqHmnInljLnphY0iCisKKyM6IHJlbW90ZS5jOjEwMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICLmupDlvJXnlKjooajovr7lvI8gJXMg5Yy56YWN6LaF6L+H5LiA5LiqIgorCisjLiBUUkFOU0xBVE9SUzogIm1hdGNoZXMgJyVzJyUiIGlzIHRoZSA8ZHN0PiBwYXJ0IG9mICJnaXQgcHVzaAorIy4gPHJlbW90ZT4gPHNyYz46PGRzdD4iIHB1c2gsIGFuZCAiYmVpbmcgcHVzaGVkICgnJXMnKSIgaXMKKyMuIHRoZSA8c3JjPi4KKyMuCisjOiByZW1vdGUuYzoxMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGVzdGluYXRpb24geW91IHByb3ZpZGVkIGlzIG5vdCBhIGZ1bGwgcmVmbmFtZSAoaS5lLixcbiIKKyJzdGFydGluZyB3aXRoIFwicmVmcy9cIikuIFdlIHRyaWVkIHRvIGd1ZXNzIHdoYXQgeW91IG1lYW50IGJ5OlxuIgorIlxuIgorIi0gTG9va2luZyBmb3IgYSByZWYgdGhhdCBtYXRjaGVzICclcycgb24gdGhlIHJlbW90ZSBzaWRlLlxuIgorIi0gQ2hlY2tpbmcgaWYgdGhlIDxzcmM+IGJlaW5nIHB1c2hlZCAoJyVzJylcbiIKKyIgIGlzIGEgcmVmIGluIFwicmVmcy97aGVhZHMsdGFnc30vXCIuIElmIHNvIHdlIGFkZCBhIGNvcnJlc3BvbmRpbmdcbiIKKyIgIHJlZnMve2hlYWRzLHRhZ3N9LyBwcmVmaXggb24gdGhlIHJlbW90ZSBzaWRlLlxuIgorIlxuIgorIk5laXRoZXIgd29ya2VkLCBzbyB3ZSBnYXZlIHVwLiBZb3UgbXVzdCBmdWxseSBxdWFsaWZ5IHRoZSByZWYuIgorbXNnc3RyICIiCisi5oKo5o+Q5L6b55qE55uu5qCH5LiN5piv5LiA5Liq5a6M5pW055qE5byV55So5ZCN56ew77yI5Y2z5LulIFwicmVmcy9cIiDlvIDlpLTvvInjgILmiJHku6xcbiIKKyLor5XnnYDnjJzmtYvmgqjnmoTmg7Pms5XvvJpcbiIKKyJcbiIKKyItIOWcqOi/nOerr+afpeivouWSjCAnJXMnIOWMuemFjeeahOW8leeUqOOAglxuIgorIi0g5qOA5p+l6KaB5o6o6YCB55qEIDxzcmM+77yIJyVzJ++8ieaYr+S4jeaYr+WcqCBcInJlZnMve2hlYWRzLHRhZ3N9L1wiIOS4reeahFxuIgorIiAg5byV55So44CC5aaC5p6c5piv77yM5oiR5Lus5Lya5Zyo5a+55bqU55qE6L+c56uv5re75YqgIHJlZnMve2hlYWRzLHRhZ3N9LyDliY3nvIDjgIJcbiIKKyJcbiIKKyLpg73kuI3ooYzvvIzmiYDku6XmiJHku6zlt7LmlL7lvIPjgILmgqjlv4Xpobvnu5nlh7rlrozmlbTnmoTlvJXnlKjjgIIiCisKKyM6IHJlbW90ZS5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgY29tbWl0IG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvaGVhZHMvJXMnPyIKK21zZ3N0ciAiIgorIuW8leeUqOihqOi+vuW8j+eahCA8c3JjPiDmmK/kuIDkuKrmj5DkuqTlr7nosaHjgILmgqjmmK/mg7PliJvlu7rkuIDkuKrmlrDnmoTliIbmlK/ogIzlkJFcbiIKKyInJXM6cmVmcy9oZWFkcy8lcycg5o6o6YCB5LmI77yfIgorCisjOiByZW1vdGUuYzoxMDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRhZyBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyB0YWcgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIuW8leeUqOihqOi+vuW8j+eahCA8c3JjPiDmmK/kuIDkuKrmoIfnrb7lr7nosaHjgILmgqjmmK/mg7PliJvlu7rkuIDkuKrmlrDnmoTmoIfnrb7ogIzlkJFcbiIKKyInJXM6cmVmcy90YWdzLyVzJyDmjqjpgIHkuYjvvJ8iCisKKyM6IHJlbW90ZS5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgdHJlZSBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyB0cmVlIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyLlvJXnlKjooajovr7lvI/nmoQgPHNyYz4g5piv5LiA5Liq5qCR5a+56LGh44CC5oKo5piv5oOz5Li66L+Z5Liq5qCR5a+56LGh5Yib5bu65qCH562+6ICM5ZCRXG4iCisiJyVzOnJlZnMvdGFncy8lcycg5o6o6YCB5LmI77yfIgorCisjOiByZW1vdGUuYzoxMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGJsb2Igb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgYmxvYiBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisi5byV55So6KGo6L6+5byP55qEIDxzcmM+IOaYr+S4gOS4quaVsOaNruWvueixoeOAguaCqOaYr+aDs+S4uui/meS4quaVsOaNruWvueixoeWIm+W7uuagh+etvuiAjOWQkVxuIgorIiclczpyZWZzL3RhZ3MvJXMnIOaOqOmAgeS5iO+8nyIKKworIzogcmVtb3RlLmM6MTA5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYnJhbmNoIgorbXNnc3RyICIlcyDml6Dms5Xooqvop6PmnpDkuLrliIbmlK8iCisKKyM6IHJlbW90ZS5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlbGV0ZSAnJXMnOiByZW1vdGUgcmVmIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLml6Dms5XliKDpmaQgJyVzJ++8mui/nOeoi+W8leeUqOS4jeWtmOWcqCIKKworIzogcmVtb3RlLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgIuebruagh+W8leeUqOihqOi+vuW8jyAlcyDljLnphY3otoXov4fkuIDkuKoiCisKKyM6IHJlbW90ZS5jOjExMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHN0IHJlZiAlcyByZWNlaXZlcyBmcm9tIG1vcmUgdGhhbiBvbmUgc3JjIgorbXNnc3RyICLnm67moIflvJXnlKggJXMg5o6l5pS26LaF6L+H5LiA5Liq5rqQIgorCisjOiByZW1vdGUuYzoxNjI4IHJlbW90ZS5jOjE3MjkKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICJIRUFEIOayoeacieaMh+WQkeS4gOS4quWIhuaUryIKKworIzogcmVtb3RlLmM6MTYzNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAi5rKh5pyJ5q2k5YiG5pSv77yaJyVzJyIKKworIzogcmVtb3RlLmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAi5bCa5pyq57uZ5YiG5pSvICclcycg6K6+572u5LiK5ri4IgorCisjOiByZW1vdGUuYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLkuIrmuLjliIbmlK8gJyVzJyDmsqHmnInlrZjlgqjkuLrkuIDkuKrov5znqIvot5/ouKrliIbmlK8iCisKKyM6IHJlbW90ZS5jOjE2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giCittc2dzdHIgIuaOqOmAgeebruaghyAnJXMnIOiHs+i/nOeoiyAnJXMnIOayoeacieacrOWcsOi3n+i4quWIhuaUryIKKworIzogcmVtb3RlLmM6MTY3MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICLliIbmlK8gJyVzJyDmsqHmnInorr7nva7opoHmjqjpgIHnmoTov5znqIvmnI3liqHlmagiCisKKyM6IHJlbW90ZS5jOjE2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICLlkJEgJyVzJyDmjqjpgIHlvJXnlKjop4TmoLzmnKrljIXlkKsgJyVzJyIKKworIzogcmVtb3RlLmM6MTY5NgorbXNnaWQgInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIKK21zZ3N0ciAi5o6o6YCB5peg55uu5qCH77yIcHVzaC5kZWZhdWx0IOaYryAnbm90aGluZyfvvIkiCisKKyM6IHJlbW90ZS5jOjE3MTgKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSAnc2ltcGxlJyBwdXNoIHRvIGEgc2luZ2xlIGRlc3RpbmF0aW9uIgorbXNnc3RyICLml6Dms5Xop6PmnpAgJ3NpbXBsZScg5o6o6YCB6Iez5LiA5Liq5Y2V54us55qE55uu5qCHIgorCisjOiByZW1vdGUuYzoxODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiAlcyIKK21zZ3N0ciAi5peg5rOV5om+5Yiw6L+c56iL5byV55SoICVzIgorCisjOiByZW1vdGUuYzoxODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiogSWdub3JpbmcgZnVubnkgcmVmICclcycgbG9jYWxseSIKK21zZ3N0ciAiKiDlnKjmnKzlnLDlv73nlaXlj6/nrJHnmoTlvJXnlKggJyVzJyIKKworIzogcmVtb3RlLmM6MjAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiYXNlZCBvbiAnJXMnLCBidXQgdGhlIHVwc3RyZWFtIGlzIGdvbmUuXG4iCittc2dzdHIgIuaCqOeahOWIhuaUr+WfuuS6jiAnJXMn77yM5L2G5q2k5LiK5ri45YiG5pSv5bey57uP5LiN5a2Y5Zyo44CCXG4iCisKKyM6IHJlbW90ZS5jOjIwMjQKK21zZ2lkICIgICh1c2UgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB0byBmaXh1cClcbiIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiDmnaXkv67lpI3vvIlcbiIKKworIzogcmVtb3RlLmM6MjAyNworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyB1cCB0byBkYXRlIHdpdGggJyVzJy5cbiIKK21zZ3N0ciAi5oKo55qE5YiG5pSv5LiO5LiK5ri45YiG5pSvICclcycg5LiA6Ie044CCXG4iCisKKyM6IHJlbW90ZS5jOjIwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggYW5kICclcycgcmVmZXIgdG8gZGlmZmVyZW50IGNvbW1pdHMuXG4iCittc2dzdHIgIuaCqOeahOWIhuaUr+WSjCAnJXMnIOaMh+WQkeS4jeWQjOeahOaPkOS6pOOAglxuIgorCisjOiByZW1vdGUuYzoyMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcIiVzXCIgZm9yIGRldGFpbHMpXG4iCittc2dzdHIgIiAg77yI5L2/55SoIFwiJXNcIiDmn6XnnIvor6bmg4XvvIlcbiIKKworIzogcmVtb3RlLmM6MjAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICLmgqjnmoTliIbmlK/pooblhYggJyVzJyDlhbEgJWQg5Liq5o+Q5Lqk44CCXG4iCittc2dzdHJbMV0gIuaCqOeahOWIhuaUr+mihuWFiCAnJXMnIOWFsSAlZCDkuKrmj5DkuqTjgIJcbiIKKworIzogcmVtb3RlLmM6MjA0NAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHB1c2hcIiDmnaXlj5HluIPmgqjnmoTmnKzlnLDmj5DkuqTvvIlcbiIKKworIzogcmVtb3RlLmM6MjA0NworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICLmgqjnmoTliIbmlK/okL3lkI4gJyVzJyDlhbEgJWQg5Liq5o+Q5Lqk77yM5bm25LiU5Y+v5Lul5b+r6L+b44CCXG4iCittc2dzdHJbMV0gIuaCqOeahOWIhuaUr+iQveWQjiAnJXMnIOWFsSAlZCDkuKrmj5DkuqTvvIzlubbkuJTlj6/ku6Xlv6vov5vjgIJcbiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiByZW1vdGUuYzoyMDU1Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHB1bGxcIiDmnaXmm7TmlrDmgqjnmoTmnKzlnLDliIbmlK/vvIlcbiIKKworIzogcmVtb3RlLmM6MjA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKKyLmgqjnmoTliIbmlK/lkowgJyVzJyDlh7rnjrDkuoblgY/nprvvvIxcbiIKKyLlubbkuJTliIbliKvmnIkgJWQg5ZKMICVkIOWkhOS4jeWQjOeahOaPkOS6pOOAglxuIgorbXNnc3RyWzFdICIiCisi5oKo55qE5YiG5pSv5ZKMICclcycg5Ye6546w5LqG5YGP56a777yMXG4iCisi5bm25LiU5YiG5Yir5pyJICVkIOWSjCAlZCDlpITkuI3lkIznmoTmj5DkuqTjgIJcbiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiByZW1vdGUuYzoyMDY4Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBwdWxsXCIg5p2l5ZCI5bm26L+c56iL5YiG5pSv77yJXG4iCisKKyM6IHJlbW90ZS5jOjIyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGV4cGVjdGVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIuaXoOazleino+aekOacn+acm+eahOWvueixoeWQjSAnJXMnIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBsYWNlIHJlZiBuYW1lOiAlcyIKK21zZ3N0ciAi6ZSZ6K+v55qE5pu/5o2i5byV55So5ZCN56ew77yaJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAi6YeN5aSN55qE5pu/5o2i5byV55So77yaJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSBkZXB0aCB0b28gaGlnaCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICLlr7nosaEgJXMg55qE5pu/5o2i5bGC57qn5aSq5rexIgorCisjOiByZXJlcmUuYzoyMTcgcmVyZXJlLmM6MjI2IHJlcmVyZS5jOjIyOQorbXNnaWQgImNvcnJ1cHQgTUVSR0VfUlIiCittc2dzdHIgIuaNn+Wdj+eahCBNRVJHRV9SUiIKKworIzogcmVyZXJlLmM6MjY0IHJlcmVyZS5jOjI2OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXJlcmUgcmVjb3JkIgorbXNnc3RyICLml6Dms5XlhpnlhaUgcmVyZXJlIOiusOW9lSIKKworIzogcmVyZXJlLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZXJlIHdlcmUgZXJyb3JzIHdoaWxlIHdyaXRpbmcgJyVzJyAoJXMpIgorbXNnc3RyICLlhpnlhaUgJyVzJyAoJXMpIOaXtuWHuumUmSIKKworIzogcmVyZXJlLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmbHVzaCAnJXMnIgorbXNnc3RyICLliLfmlrAgJyVzJyDlpLHotKUiCisKKyM6IHJlcmVyZS5jOjUwMyByZXJlcmUuYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb25mbGljdCBodW5rcyBpbiAnJXMnIgorbXNnc3RyICLkuI3og73op6PmnpAgJyVzJyDkuK3nmoTlhrLnqoHlnZciCisKKyM6IHJlcmVyZS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdXRpbWUoKSBvbiAnJXMnIgorbXNnc3RyICLlnKggJyVzJyDkuIrosIPnlKggdXRpbWUoKSDlpLHotKUiCisKKyM6IHJlcmVyZS5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cml0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICLlhpnlhaUgJyVzJyDlpLHotKUiCisKKyM6IHJlcmVyZS5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAi5L2/55So5LmL5YmN55qE6Kej5Yaz5pa55qGI5pqC5a2YICclcyfjgIIiCisKKyM6IHJlcmVyZS5jOjc1MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNvcmRlZCByZXNvbHV0aW9uIGZvciAnJXMnLiIKK21zZ3N0ciAi5bey6K6w5b2VICclcycg55qE6Kej5Yaz5pa55qGI44CCIgorCisjOiByZXJlcmUuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzb2x2ZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAi5L2/55So5LmL5YmN55qE6Kej5Yaz5pa55qGI6Kej5YazICclcyfjgIIiCisKKyM6IHJlcmVyZS5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rIHN0cmF5ICclcyciCittc2dzdHIgIuS4jeiDveWIoOmZpCBzdHJheSAnJXMnIgorCisjOiByZXJlcmUuYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIuS4uiAnJXMnIOiusOW9lSBwcmVpbWFnZSIKKworIzogcmVyZXJlLmM6ODgxIHN1Ym1vZHVsZS5jOjIwNzggYnVpbHRpbi9sb2cuYzoxODcxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ1NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICLkuI3og73liJvlu7rnm67lvZUgJyVzJyIKKworIzogcmVyZXJlLmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIGNvbmZsaWN0ZWQgc3RhdGUgaW4gJyVzJyIKK21zZ3N0ciAi5pu05pawICclcycg5Lit55qE5Yay56qB54q25oCB5aSx6LSlIgorCisjOiByZXJlcmUuYzoxMDY4IHJlcmVyZS5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIgorbXNnc3RyICLmsqHmnInkuLogJyVzJyDorrDlv4bnmoTop6PlhrPmlrnmoYgiCisKKyM6IHJlcmVyZS5jOjEwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayAnJXMnIgorbXNnc3RyICLkuI3og73liKDpmaQgJyVzJyIKKworIzogcmVyZXJlLmM6MTA4NworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICLlt7LkuLogJyVzJyDmm7TmlrAgcHJlaW1hZ2UiCisKKyM6IHJlcmVyZS5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9yZ290IHJlc29sdXRpb24gZm9yICclcydcbiIKK21zZ3N0ciAi5b+Y6K6wICclcycg55qE6Kej5Yaz5pa55qGIXG4iCisKKyM6IHJlcmVyZS5jOjExOTkKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiByci1jYWNoZSBkaXJlY3RvcnkiCittc2dzdHIgIuS4jeiDveaJk+W8gCByci1jYWNoZSDnm67lvZUiCisKKyM6IHJldmlzaW9uLmM6MjQ5NworbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgIuaCqOeahOW9k+WJjeWIhuaUr+WlveWDj+iiq+aNn+WdjyIKKworIzogcmV2aXNpb24uYzoyNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIKK21zZ3N0ciAi5oKo55qE5b2T5YmN5YiG5pSvICclcycg5bCa5peg5Lu75L2V5o+Q5LqkIgorCisjOiByZXZpc2lvbi5jOjI3MDgKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAiLS1maXJzdC1wYXJlbnQg5LiOIC0tYmlzZWN0IOS4jeWFvOWuuSIKKworIzogcmV2aXNpb24uYzoyNzEyCittc2dpZCAiLUwgZG9lcyBub3QgeWV0IHN1cHBvcnQgZGlmZiBmb3JtYXRzIGJlc2lkZXMgLXAgYW5kIC1zIgorbXNnc3RyICItTCDlsJrkuI3mlK/mjIEgLXAg5ZKMIC1zIOS5i+WklueahOW3ruW8guagvOW8jyIKKworIzogcnVuLWNvbW1hbmQuYzo3NjMKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiCittc2dzdHIgIuS4jeiDveaJk+W8gCAvZGV2L251bGwiCisKKyM6IHJ1bi1jb21tYW5kLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFzeW5jIHRocmVhZDogJXMiCittc2dzdHIgIuS4jeiDveWIm+W7uiBhc3luYyDnur/nqIvvvJolcyIKKworIzogcnVuLWNvbW1hbmQuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJyVzJyBob29rIHdhcyBpZ25vcmVkIGJlY2F1c2UgaXQncyBub3Qgc2V0IGFzIGV4ZWN1dGFibGUuXG4iCisiWW91IGNhbiBkaXNhYmxlIHRoaXMgd2FybmluZyB3aXRoIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAuIgorbXNnc3RyICIiCisi5Zug5Li65rKh5pyJ5bCG6ZKp5a2QICclcycg6K6+572u5Li65Y+v5omn6KGM77yM6ZKp5a2Q6KKr5b+955Wl44CC5oKo5Y+v5Lul6YCa6L+HXG4iCisi6YWN572uIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAg5p2l5YWz6Zet6L+Z5p2h6K2m5ZGK44CCIgorCisjOiBzZW5kLXBhY2suYzoxNDQKK21zZ2lkICJ1bmV4cGVjdGVkIGZsdXNoIHBhY2tldCB3aGlsZSByZWFkaW5nIHJlbW90ZSB1bnBhY2sgc3RhdHVzIgorbXNnc3RyICLor7vlj5bov5znqIvop6PljIXnirbmgIHml7bmlLbliLDmhI/lpJbnmoQgZmx1c2gg5YyFIgorCisjOiBzZW5kLXBhY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHJlbW90ZSB1bnBhY2sgc3RhdHVzOiAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q6L+c56iL6Kej5YyF54q25oCB77yaJXMiCisKKyM6IHNlbmQtcGFjay5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgdW5wYWNrIGZhaWxlZDogJXMiCittc2dzdHIgIui/nOeoi+ino+WMheWksei0pe+8miVzIgorCisjOiBzZW5kLXBhY2suYzozMDkKK21zZ2lkICJmYWlsZWQgdG8gc2lnbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSIKK21zZ3N0ciAi5Li65o6o6YCB6K+B5Lmm562+5ZCN5aSx6LSlIgorCisjOiBzZW5kLXBhY2suYzo0MjMKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIHB1c2giCittc2dzdHIgIuaOpeaUtuerr+S4jeaUr+aMgeetvuWQjeaOqOmAgSIKKworIzogc2VuZC1wYWNrLmM6NDI1Cittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tIgorInNpZ25lZCBwdXNoIgorbXNnc3RyICLmnKrlj5HpgIHmjqjpgIHor4HkuabvvIzlm6DkuLrmjqXmlLbnq6/kuI3mlK/mjIHnrb7lkI3mjqjpgIEiCisKKyM6IHNlbmQtcGFjay5jOjQzNworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMgcHVzaCIKK21zZ3N0ciAi5o6l5pS256uv5LiN5pSv5oyB5Y6f5a2Q5o6o6YCBIgorCisjOiBzZW5kLXBhY2suYzo0NDIKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IHB1c2ggb3B0aW9ucyIKK21zZ3N0ciAi5o6l5pS256uv5LiN5pSv5oyB5o6o6YCB6YCJ6aG5IgorCisjOiBzZXF1ZW5jZXIuYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgbWVzc2FnZSBjbGVhbnVwIG1vZGUgJyVzJyIKK21zZ3N0ciAi5peg5pWI55qE5o+Q5Lqk5L+h5oGv5riF55CG5qih5byPICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlICclcyciCittc2dzdHIgIuaXoOazleWIoOmZpCAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozMTUgYnVpbHRpbi9yZWJhc2UuYzo3ODUgYnVpbHRpbi9yZWJhc2UuYzoxNzUwIGJ1aWx0aW4vcm0uYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSAnJXMnIgorbXNnc3RyICLml6Dms5XliKDpmaQgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzI1Cittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICLov5jljp8iCisKKyM6IHNlcXVlbmNlci5jOjMyNworbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICLmi6PpgIkiCisKKyM6IHNlcXVlbmNlci5jOjMyOQorbXNnaWQgInJlYmFzZSIKK21zZ3N0ciAi5Y+Y5Z+6IgorCisjOiBzZXF1ZW5jZXIuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBhY3Rpb246ICVkIgorbXNnc3RyICLmnKrnn6XliqjkvZzvvJolZCIKKworIzogc2VxdWVuY2VyLmM6Mzg5Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKyLlhrLnqoHop6PlhrPlrozmr5XlkI7vvIznlKggJ2dpdCBhZGQgPOi3r+W+hD4nIOaIliAnZ2l0IHJtIDzot6/lvoQ+J1xuIgorIuWRveS7pOagh+iusOS/ruato+WQjueahOaWh+S7tiIKKworIzogc2VxdWVuY2VyLmM6MzkyCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKyLlhrLnqoHop6PlhrPlrozmr5XlkI7vvIznlKggJ2dpdCBhZGQgPOi3r+W+hD4nIOaIliAnZ2l0IHJtIDzot6/lvoQ+J1xuIgorIuWvueS/ruato+WQjueahOaWh+S7tuWBmuagh+iusO+8jOeEtuWQjueUqCAnZ2l0IGNvbW1pdCcg5o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzo0MDUgc2VxdWVuY2VyLmM6MjkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayAnJXMnIgorbXNnc3RyICLkuI3og73plIHlrpogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBlb2wgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO95bCG5o2i6KGM56ym5YaZ5YWlICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQxNyBzZXF1ZW5jZXIuYzoyNzA2IHNlcXVlbmNlci5jOjI5MDcgc2VxdWVuY2VyLmM6MjkyMQorIzogc2VxdWVuY2VyLmM6MzE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgJyVzJyIKK21zZ3N0ciAi5peg5rOV5a6M5oiQICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQ0MCBzZXF1ZW5jZXIuYzoxNjEzIHNlcXVlbmNlci5jOjI3MjYgc2VxdWVuY2VyLmM6MzE2NworIzogc2VxdWVuY2VyLmM6MzI3NiBidWlsdGluL2FtLmM6MjQ5IGJ1aWx0aW4vY29tbWl0LmM6Nzg3IGJ1aWx0aW4vbWVyZ2UuYzoxMTIwCisjOiBidWlsdGluL3JlYmFzZS5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICLkuI3og73or7vlj5YgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlcy4iCittc2dzdHIgIuaCqOeahOacrOWcsOS/ruaUueWwhuiiqyVz6KaG55uW44CCIgorCisjOiBzZXF1ZW5jZXIuYzo0NzAKK21zZ2lkICJjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iCittc2dzdHIgIuaPkOS6pOaCqOeahOS/ruaUueaIlui0ruiXj+WQjuWGjee7p+e7reOAgiIKKworIzogc2VxdWVuY2VyLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiVz77ya5b+r6L+bIgorCisjOiBzZXF1ZW5jZXIuYzo1NDEgYnVpbHRpbi90YWcuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgIuaXoOaViOeahOa4heeQhuaooeW8jyAlcyIKKworIy4gVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIsICJjaGVycnktcGljayIgb3IKKyMuICJyZWJhc2UiLgorIy4KKyM6IHNlcXVlbmNlci5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlc++8muaXoOazleWGmeWFpeaWsOe0ouW8leaWh+S7tiIKKworIzogc2VxdWVuY2VyLmM6NjUyCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlIgorbXNnc3RyICLkuI3og73mm7TmlrDnvJPlrZjmoJEiCisKKyM6IHNlcXVlbmNlci5jOjY2NgorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICLkuI3og73op6PmnpAgSEVBRCDmj5DkuqQiCisKKyM6IHNlcXVlbmNlci5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBrZXkgcHJlc2VudCBpbiAnJS4qcyciCittc2dzdHIgIuWcqCAnJS4qcycg5Lit5rKh5pyJIGtleSIKKworIzogc2VxdWVuY2VyLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZXF1b3RlIHZhbHVlIG9mICclcyciCittc2dzdHIgIuaXoOazleS4uiAnJXMnIOeahOWAvOWOu+W8leWPtyIKKworIzogc2VxdWVuY2VyLmM6Nzk0IHdyYXBwZXIuYzoxOTAgd3JhcHBlci5jOjM2MCBidWlsdGluL2FtLmM6NzEwCisjOiBidWlsdGluL2FtLmM6ODAyIGJ1aWx0aW4vbWVyZ2UuYzoxMTE3IGJ1aWx0aW4vcmViYXNlLmM6MTA3MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICLml6Dms5XmiZPlvIAgJyVzJyDov5vooYzor7vlj5YiCisKKyM6IHNlcXVlbmNlci5jOjgwNAorbXNnaWQgIidHSVRfQVVUSE9SX05BTUUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIuW3sue7j+e7meWHuiAnR0lUX0FVVEhPUl9OQU1FJyIKKworIzogc2VxdWVuY2VyLmM6ODA5Cittc2dpZCAiJ0dJVF9BVVRIT1JfRU1BSUwnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIuW3sue7j+e7meWHuiAnR0lUX0FVVEhPUl9FTUFJTCciCisKKyM6IHNlcXVlbmNlci5jOjgxNAorbXNnaWQgIidHSVRfQVVUSE9SX0RBVEUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIuW3sue7j+e7meWHuiAnR0lUX0FVVEhPUl9EQVRFJyIKKworIzogc2VxdWVuY2VyLmM6ODE4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFyaWFibGUgJyVzJyIKK21zZ3N0ciAi5pyq55+l5Y+Y6YePICclcyciCisKKyM6IHNlcXVlbmNlci5jOjgyMworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfTkFNRSciCittc2dzdHIgIue8uuWwkSAnR0lUX0FVVEhPUl9OQU1FJyIKKworIzogc2VxdWVuY2VyLmM6ODI1Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9FTUFJTCciCittc2dzdHIgIue8uuWwkSAnR0lUX0FVVEhPUl9FTUFJTCciCisKKyM6IHNlcXVlbmNlci5jOjgyNworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfREFURSciCittc2dzdHIgIue8uuWwkSAnR0lUX0FVVEhPUl9EQVRFJyIKKworIzogc2VxdWVuY2VyLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZVxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlIHNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLmgqjnmoTlt6XkvZzljLrkuK3lrZjlnKjlt7LmmoLlrZjnmoTkv67mlLlcbiIKKyLlpoLmnpzov5nkupvkv67mlLnpnIDopoHooqvlubblhaXliY3kuIDkuKrmj5DkuqTvvIzmiafooYzvvJpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIuWmguaenOi/meS6m+S/ruaUueimgeW9ouaIkOS4gOS4quaWsOaPkOS6pO+8jOaJp+ihjO+8mlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIuaXoOiuuuWTquenjeaDheWGte+8jOW9k+aCqOWujOaIkOaPkOS6pO+8jOe7p+e7reaJp+ihjO+8mlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjExNDgKK21zZ2lkICIncHJlcGFyZS1jb21taXQtbXNnJyBob29rIGZhaWxlZCIKK21zZ3N0ciAiJ3ByZXBhcmUtY29tbWl0LW1zZycg6ZKp5a2Q5aSx6LSlIgorCisjOiBzZXF1ZW5jZXIuYzoxMTU0Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseS4gUnVuIHRoZVxuIgorImZvbGxvd2luZyBjb21tYW5kIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIGVkaXRvciB0byBlZGl0XG4iCisieW91ciBjb25maWd1cmF0aW9uIGZpbGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisi5oKo55qE5aeT5ZCN5ZKM6YKu5Lu25Zyw5Z2A5Z+65LqO55m75b2V5ZCN5ZKM5Li75py65ZCN6L+b6KGM5LqG6Ieq5Yqo6K6+572u44CC6K+35qOA5p+l5a6D5Lus5q2j56GuXG4iCisi5LiO5ZCm44CC5oKo5Y+v5Lul5a+55YW26L+b6KGM6K6+572u5Lul5YWN5YaN5Ye6546w5pys5o+Q56S65L+h5oGv44CC6L+Q6KGM5aaC5LiL5ZG95Luk5Zyo57yW6L6R5ZmoXG4iCisi5Lit57yW6L6R5oKo55qE6YWN572u5paH5Lu277yaXG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisi6K6+572u5a6M5q+V5ZCO77yM5oKo5Y+v5Lul55So5LiL6Z2i55qE5ZG95Luk5p2l5L+u5q2j5pys5qyh5o+Q5Lqk5omA5L2/55So55qE55So5oi36Lqr5Lu977yaXG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMTY3Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisi5oKo55qE5aeT5ZCN5ZKM6YKu5Lu25Zyw5Z2A5Z+65LqO55m75b2V5ZCN5ZKM5Li75py65ZCN6L+b6KGM5LqG6Ieq5Yqo6K6+572u44CC6K+35qOA5p+l5a6D5Lus5q2j56GuXG4iCisi5LiO5ZCm44CC5oKo5Y+v5Lul5a+55YW26L+b6KGM6K6+572u5Lul5YWN5YaN5Ye6546w5pys5o+Q56S65L+h5oGv77yaXG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIuiuvue9ruWujOavleWQju+8jOaCqOWPr+S7peeUqOS4i+mdoueahOWRveS7pOadpeS/ruato+acrOasoeaPkOS6pOaJgOS9v+eUqOeahOeUqOaIt+i6q+S7ve+8mlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTIwOQorbXNnaWQgImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIuaXoOazleaJvuWIsOaWsOWIm+W7uueahOaPkOS6pCIKKworIzogc2VxdWVuY2VyLmM6MTIxMQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5paw5Yib5bu655qE5o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzoxMjU3Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgSEVBRCBhZnRlciBjcmVhdGluZyBjb21taXQiCittc2dzdHIgIuWIm+W7uuaPkOS6pOWQju+8jOS4jeiDveino+aekCBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxMjU5Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAi5YiG56a75aS05oyH6ZKIIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IHNlcXVlbmNlci5jOjEyNjMKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAi77yI5qC55o+Q5Lqk77yJIgorCisjOiBzZXF1ZW5jZXIuYzoxMjg0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQiCittc2dzdHIgIuS4jeiDveino+aekCBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxMjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiSEVBRCAlcyDkuI3mmK/kuIDkuKrmj5DkuqTvvIEiCisKKyM6IHNlcXVlbmNlci5jOjEyOTAgc2VxdWVuY2VyLmM6MTM2NCBidWlsdGluL2NvbW1pdC5jOjE1NzQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgIuS4jeiDveino+aekCBIRUFEIOaPkOS6pCIKKworIzogc2VxdWVuY2VyLmM6MTM0MiBzZXF1ZW5jZXIuYzoxOTY4Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCBhdXRob3IiCittc2dzdHIgIuS4jeiDveino+aekOaPkOS6pOS9nOiAhSIKKworIzogc2VxdWVuY2VyLmM6MTM1MyBidWlsdGluL2FtLmM6MTU2NiBidWlsdGluL21lcmdlLmM6Njg3Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUg5peg5rOV5YaZ5YWl5qCR5a+56LGhIgorCisjOiBzZXF1ZW5jZXIuYzoxMzg2IHNlcXVlbmNlci5jOjE0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgZnJvbSAnJXMnIgorbXNnc3RyICLkuI3og73ku44gJyVzJyDor7vlj5bmj5DkuqTor7TmmI4iCisKKyM6IHNlcXVlbmNlci5jOjE0MTMgYnVpbHRpbi9hbS5jOjE1ODggYnVpbHRpbi9jb21taXQuYzoxNjczIGJ1aWx0aW4vbWVyZ2UuYzo4ODYKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MTEKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAi5YaZ5o+Q5Lqk5a+56LGh5aSx6LSlIgorCisjOiBzZXF1ZW5jZXIuYzoxNDc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIuS4jeiDveino+aekOaPkOS6pCAlcyIKKworIzogc2VxdWVuY2VyLmM6MTQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q54i25o+Q5LqkICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNTYyIHNlcXVlbmNlci5jOjE2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kOiAlZCIKK21zZ3N0ciAi5pyq55+l5ZG95Luk77yaJWQiCisKKyM6IHNlcXVlbmNlci5jOjE2MjAgc2VxdWVuY2VyLmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJWQgY29tbWl0cy4iCittc2dzdHIgIui/meaYr+S4gOS4qiAlZCDkuKrmj5DkuqTnmoTnu4TlkIjjgIIiCisKKyM6IHNlcXVlbmNlci5jOjE2MzAKK21zZ2lkICJuZWVkIGEgSEVBRCB0byBmaXh1cCIKK21zZ3N0ciAi6ZyA6KaB5LiA5LiqIEhFQUQg5p2l5L+u5aSNIgorCisjOiBzZXF1ZW5jZXIuYzoxNjMyIHNlcXVlbmNlci5jOjMyMTIKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEIgorbXNnc3RyICLkuI3og73or7vlj5YgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTYzNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQncyBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi5LiN6IO96K+75Y+WIEhFQUQg55qE5o+Q5Lqk6K+05piOIgorCisjOiBzZXF1ZW5jZXIuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICLkuI3og73lhpkgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTY0NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk2Cittc2dpZCAiVGhpcyBpcyB0aGUgMXN0IGNvbW1pdCBtZXNzYWdlOiIKK21zZ3N0ciAi6L+Z5piv56ys5LiA5Liq5o+Q5Lqk6K+05piO77yaIgorCisjOiBzZXF1ZW5jZXIuYzoxNjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIgorbXNnc3RyICLkuI3og73or7vlj5YgJXMg55qE5o+Q5Lqk6K+05piOIgorCisjOiBzZXF1ZW5jZXIuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMlZDoiCittc2dzdHIgIui/meaYr+aPkOS6pOivtOaYjiAjJWTvvJoiCisKKyM6IHNlcXVlbmNlci5jOjE2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICLmj5DkuqTor7TmmI4gIyVkIOWwhuiiq+i3s+i/h++8miIKKworIzogc2VxdWVuY2VyLmM6MTc1NgorbXNnaWQgInlvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgIuaCqOeahOe0ouW8leaWh+S7tuacquWujOaIkOWQiOW5tuOAgiIKKworIzogc2VxdWVuY2VyLmM6MTc2MworbXNnaWQgImNhbm5vdCBmaXh1cCByb290IGNvbW1pdCIKK21zZ3N0ciAi5LiN6IO95L+u5aSN5qC55o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAi5o+Q5LqkICVzIOaYr+S4gOS4quWQiOW5tuaPkOS6pOS9huacquaPkOS+myAtbSDpgInpobnjgIIiCisKKyM6IHNlcXVlbmNlci5jOjE3OTAgc2VxdWVuY2VyLmM6MTc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIuaPkOS6pCAlcyDmsqHmnInnrKwgJWQg5Liq54i25o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzoxODA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICLkuI3og73lvpfliLAgJXMg55qE5o+Q5Lqk6K+05piOIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgYSAidG9kbyIgY29tbWFuZCBsaWtlCisjLiAicmV2ZXJ0IiBvciAicGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExLgorIzogc2VxdWVuY2VyLmM6MTgyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVz77ya5LiN6IO96Kej5p6Q54i25o+Q5LqkICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73lsIYgJyVzJyDph43lkb3lkI3kuLogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTk0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICLkuI3og73ov5jljp8gJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICLkuI3og73lupTnlKggJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHJvcHBpbmcgJXMgJXMgLS0gcGF0Y2ggY29udGVudHMgYWxyZWFkeSB1cHN0cmVhbVxuIgorbXNnc3RyICLkuKLlvIMgJXMgJXMgLS0g6KGl5LiB5YaF5a655bey5Zyo5LiK5ri4XG4iCisKKyM6IHNlcXVlbmNlci5jOjIwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlc++8muaXoOazleivu+WPlue0ouW8lSIKKworIzogc2VxdWVuY2VyLmM6MjAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVz77ya5peg5rOV5Yi35paw57Si5byVIgorCisjOiBzZXF1ZW5jZXIuYzoyMTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IGFjY2VwdCBhcmd1bWVudHM6ICclcyciCittc2dzdHIgIiVzIOS4jeaOpeWPl+WPguaVsO+8miclcyciCisKKyM6IHNlcXVlbmNlci5jOjIxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhcmd1bWVudHMgZm9yICVzIgorbXNnc3RyICLnvLrlsJEgJXMg55qE5Y+C5pWwIgorCisjOiBzZXF1ZW5jZXIuYzoyMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJXMnIgorbXNnc3RyICLml6Dms5Xop6PmnpAgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIuaXoOaViOihjCAlZO+8miUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjIyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi5rKh5pyJ54i25o+Q5Lqk55qE5oOF5Ya15LiL5LiN6IO9ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjIyOTgKK21zZ2lkICJjYW5jZWxsaW5nIGEgY2hlcnJ5IHBpY2tpbmcgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIuato+WcqOWPlua2iOS4gOS4qui/m+ihjOS4reeahOaLo+mAiSIKKworIzogc2VxdWVuY2VyLmM6MjMwNQorbXNnaWQgImNhbmNlbGxpbmcgYSByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIuato+WcqOWPlua2iOS4gOS4qui/m+ihjOS4reeahOi/mOWOnyIKKworIzogc2VxdWVuY2VyLmM6MjM0OQorbXNnaWQgInBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICLor7fnlKggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIOadpeS/ruaUueOAgiIKKworIzogc2VxdWVuY2VyLmM6MjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJyVzJyIKK21zZ3N0ciAi5LiN5Y+v55So55qE5oyH5Luk5riF5Y2V77yaJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjM1NgorbXNnaWQgIm5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAi5rKh5pyJ6Kej5p6Q5o+Q5Lqk44CCIgorCisjOiBzZXF1ZW5jZXIuYzoyMzY3Cittc2dpZCAiY2Fubm90IGNoZXJyeS1waWNrIGR1cmluZyBhIHJldmVydC4iCittc2dzdHIgIuS4jeiDveWcqOWbnumAgOS4reaJp+ihjOaLo+mAieOAgiIKKworIzogc2VxdWVuY2VyLmM6MjM2OQorbXNnaWQgImNhbm5vdCByZXZlcnQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICLkuI3og73lnKjmi6PpgInkuK3miafooYzlm57pgIDjgIIiCisKKyM6IHNlcXVlbmNlci5jOjI0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICIlcyDnmoTlgLzml6DmlYjvvJolcyIKKworIzogc2VxdWVuY2VyLmM6MjU0MAorbXNnaWQgInVudXNhYmxlIHNxdWFzaC1vbnRvIgorbXNnc3RyICLkuI3lj6/nlKjnmoQgc3F1YXNoLW9udG8iCisKKyM6IHNlcXVlbmNlci5jOjI1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICclcyciCittc2dzdHIgIuagvOW8j+mUmeivr+eahOmAiemhuea4heWNle+8miclcyciCisKKyM6IHNlcXVlbmNlci5jOjI2NDQgc2VxdWVuY2VyLmM6NDM2MQorbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICLmj5DkvpvkuobnqbrnmoTmj5DkuqTpm4YiCisKKyM6IHNlcXVlbmNlci5jOjI2NjAKK21zZ2lkICJyZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi5LiA5Liq6L+Y5Y6f5pON5L2c5bey5Zyo6L+b6KGMIgorCisjOiBzZXF1ZW5jZXIuYzoyNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgIuWwneivlSBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjI2NjUKK21zZ2lkICJjaGVycnktcGljayBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICLmi6PpgInmk43kvZzlt7LlnKjov5vooYwiCisKKyM6IHNlcXVlbmNlci5jOjI2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICLlsJ3or5UgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjI2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIuS4jeiDveWIm+W7uuW6j+WIl+ebruW9lSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyNjk2Cittc2dpZCAiY291bGQgbm90IGxvY2sgSEVBRCIKK21zZ3N0ciAi5LiN6IO96ZSB5a6aIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI3NTYgc2VxdWVuY2VyLmM6NDA5OQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi5ouj6YCJ5oiW6L+Y5Y6f5pON5L2c5bm25pyq6L+b6KGMIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU4IHNlcXVlbmNlci5jOjI3NjkKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICLkuI3og73op6PmnpAgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6Mjc2MCBzZXF1ZW5jZXIuYzoyODA0Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIuS4jeiDveS7juWwmuacquW7uueri+eahOWIhuaUr+e7iOatoiIKKworIzogc2VxdWVuY2VyLmM6Mjc5MCBidWlsdGluL2dyZXAuYzo3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJyVzJyIKK21zZ3N0ciAi5LiN6IO95omT5byAICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJzogJXMiCittc2dzdHIgIuS4jeiDveivu+WPliAnJXMn77yaJXMiCisKKyM6IHNlcXVlbmNlci5jOjI3OTMKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICLmhI/lpJbnmoTmlofku7bnu5PmnZ8iCisKKyM6IHNlcXVlbmNlci5jOjI3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICLkv53lrZjmi6PpgInmj5DkuqTliY3nmoQgSEVBRCDmlofku7YgJyVzJyDmjZ/lnY8iCisKKyM6IHNlcXVlbmNlci5jOjI4MTAKK21zZ2lkICJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQuIE5vdCByZXdpbmRpbmcsIGNoZWNrIHlvdXIgSEVBRCEiCittc2dzdHIgIuaCqOWlveWDj+enu+WKqOS6hiBIRUFE44CC5pyq6IO95Zue6YCA77yM5qOA5p+l5oKo55qEIEhFQUTvvIEiCisKKyM6IHNlcXVlbmNlci5jOjI4NTEKK21zZ2lkICJubyByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIuayoeacieato+WcqOi/m+ihjOeahOi/mOWOnyIKKworIzogc2VxdWVuY2VyLmM6Mjg1OQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIGluIHByb2dyZXNzIgorbXNnc3RyICLmsqHmnInmraPlnKjov5vooYznmoTmi6PpgIkiCisKKyM6IHNlcXVlbmNlci5jOjI4NjkKK21zZ2lkICJmYWlsZWQgdG8gc2tpcCB0aGUgY29tbWl0IgorbXNnc3RyICLml6Dms5Xot7Pov4fov5nkuKrmj5DkuqQiCisKKyM6IHNlcXVlbmNlci5jOjI4NzYKK21zZ2lkICJ0aGVyZSBpcyBub3RoaW5nIHRvIHNraXAiCittc2dzdHIgIuayoeacieimgei3s+i/h+eahCIKKworIzogc2VxdWVuY2VyLmM6Mjg3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaGF2ZSB5b3UgY29tbWl0dGVkIGFscmVhZHk/XG4iCisidHJ5IFwiZ2l0ICVzIC0tY29udGludWVcIiIKK21zZ3N0ciAiIgorIuaCqOW3sue7j+aPkOS6pOS6huS5iO+8n1xuIgorIuivleivlSBcImdpdCAlcyAtLWNvbnRpbnVlXCIiCisKKyM6IHNlcXVlbmNlci5jOjMwMDMgc2VxdWVuY2VyLmM6NDAxMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlICVzIgorbXNnc3RyICLkuI3og73mm7TmlrAgJXMiCisKKyM6IHNlcXVlbmNlci5jOjMwNDIgc2VxdWVuY2VyLmM6Mzk5MQorbXNnaWQgImNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIuS4jeiDveivu+WPliBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAi5peg5rOV5ou36LSdICclcycg6IezICclcyciCisKKyM6IHNlcXVlbmNlci5jOjMwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLmgqjnjrDlnKjlj6/ku6Xkv67ooaXov5nkuKrmj5DkuqTvvIzkvb/nlKhcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIuW9k+aCqOWvueWPmOabtOaEn+WIsOa7oeaEj++8jOaJp+ihjFxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjMwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICVzLi4uICUuKnMiCittc2dzdHIgIuS4jeiDveW6lOeUqCAlcy4uLiAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzozMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtZXJnZSAlLipzIgorbXNnc3RyICLkuI3og73lkIjlubYgJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MzA5OCBzZXF1ZW5jZXIuYzozMTAyIGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73mi7fotJ0gJyVzJyDoh7MgJyVzJyIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBzZXF1ZW5jZXIuYzozMTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gZmFpbGVkOiAlc1xuIgorIiVzWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyLmiafooYzlpLHotKXvvJolc1xuIgorIiVz5oKo5Y+v5Lul5pS55q2j6K+l6Zeu6aKY77yM54S25ZCO6L+Q6KGMXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogc2VxdWVuY2VyLmM6MzEzNQorbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCittc2dzdHIgIuW5tuS4lOS/ruaUuee0ouW8leWSjC/miJblt6XkvZzljLpcbiIKKworIzogc2VxdWVuY2VyLmM6MzE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIHN1Y2NlZWRlZDogJXNcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyLmiafooYzmiJDlip/vvJolc1xuIgorIuS9huaYr+WcqOe0ouW8leWSjC/miJblt6XkvZzljLrkuK3lrZjlnKjlj5jmm7RcbiIKKyLmj5DkuqTmiJbotK7ol4/kv67mlLnvvIznhLblkI7ov5DooYxcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgbGFiZWwgbmFtZTogJyUuKnMnIgorbXNnc3RyICLpnZ7ms5XnmoTmoIfnrb7lkI3np7DvvJonJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjMyNTYKK21zZ2lkICJ3cml0aW5nIGZha2Ugcm9vdCBjb21taXQiCittc2dzdHIgIuWGmeS8quagueaPkOS6pCIKKworIzogc2VxdWVuY2VyLmM6MzI2MQorbXNnaWQgIndyaXRpbmcgc3F1YXNoLW9udG8iCittc2dzdHIgIuWGmeWFpSBzcXVhc2gtb250byIKKworIzogc2VxdWVuY2VyLmM6MzI5OSBidWlsdGluL3JlYmFzZS5jOjg4MCBidWlsdGluL3JlYmFzZS5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzIgorbXNnc3RyICLml6Dms5Xmib7liLAgJXMg5oyH5ZCR55qE5qCR44CCIgorCisjOiBzZXF1ZW5jZXIuYzozMzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgIuaXoOazleino+aekCAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozMzc1Cittc2dpZCAiY2Fubm90IG1lcmdlIHdpdGhvdXQgYSBjdXJyZW50IHJldmlzaW9uIgorbXNnc3RyICLmsqHmnInlvZPliY3niYjmnKzkuI3og73lkIjlubYiCisKKyM6IHNlcXVlbmNlci5jOjMzOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclLipzJyIKK21zZ3N0ciAi5peg5rOV6Kej5p6QICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIG1lcmdlOiAnJS4qcyciCittc2dzdHIgIuaXoOWPr+eUqOWQiOW5tu+8miclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzQxOAorbXNnaWQgIm9jdG9wdXMgbWVyZ2UgY2Fubm90IGJlIGV4ZWN1dGVkIG9uIHRvcCBvZiBhIFtuZXcgcm9vdF0iCittc2dzdHIgIueroOmxvOWQiOW5tuS4jeiDveWcqOS4gOS4quaWsOeahOagueaPkOS6pOS4iuaJp+ihjCIKKworIzogc2VxdWVuY2VyLmM6MzQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIG9mICclcyciCittc2dzdHIgIuS4jeiDveiOt+WPliAnJXMnIOeahOaPkOS6pOivtOaYjiIKKworIzogc2VxdWVuY2VyLmM6MzU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXZlbiBhdHRlbXB0IHRvIG1lcmdlICclLipzJyIKK21zZ3N0ciAi55Sa6Iez5LiN6IO95bCd6K+V5ZCI5bm2ICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzYxMAorbXNnaWQgIm1lcmdlOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIuWQiOW5tu+8muaXoOazleWGmeWFpeaWsOe0ouW8leaWh+S7tiIKKworIzogc2VxdWVuY2VyLmM6MzY3OSBidWlsdGluL3JlYmFzZS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC5cbiIKK21zZ3N0ciAi5bey5bqU55SoIGF1dG9zdGFzaOOAglxuIgorCisjOiBzZXF1ZW5jZXIuYzozNjkxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAi5LiN6IO95a2Y5YKoICVzIgorCisjOiBzZXF1ZW5jZXIuYzozNjk0IGJ1aWx0aW4vcmViYXNlLmM6NzUzIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuXG4iCisiWW91ciBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBzdGFzaC5cbiIKKyJZb3UgY2FuIHJ1biBcImdpdCBzdGFzaCBwb3BcIiBvciBcImdpdCBzdGFzaCBkcm9wXCIgYXQgYW55IHRpbWUuXG4iCittc2dzdHIgIiIKKyLlupTnlKggYXV0b3N0YXNoIOWvvOiHtOWGsueqgeOAglxuIgorIuaCqOeahOS/ruaUueWuieWFqOWcsOS/neWtmOWcqOi0ruiXj+WMuuS4reOAglxuIgorIuaCqOWPr+S7peWcqOS7u+S9leaXtuWAmei/kOihjCBcImdpdCBzdGFzaCBwb3BcIiDmiJYgXCJnaXQgc3Rhc2ggZHJvcFwi44CCXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIHZhbGlkIE9JRCIKK21zZ3N0ciAiJXPvvJrkuI3mmK/kuIDkuKrmnInmlYjnmoTlr7nosaEgSUQiCisKKyM6IHNlcXVlbmNlci5jOjM3NjAgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc3OQorbXNnaWQgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAi5LiN6IO95YiG56a75aS05oyH6ZKIIgorCisjOiBzZXF1ZW5jZXIuYzozNzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgSEVBRFxuIgorbXNnc3RyICLlgZzmraLlnKggSEVBRFxuIgorCisjOiBzZXF1ZW5jZXIuYzozNzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXNcbiIKK21zZ3N0ciAi5YGc5q2i5ZyoICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBleGVjdXRlIHRoZSB0b2RvIGNvbW1hbmRcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLml6Dms5XmiafooYzlvoXlip7lkb3ku6RcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIuW3suiiq+mHjeaWsOWuieaOku+8jOWcqOe7p+e7reS5i+WJjee8lui+keWRveS7pO+8jOivt+WFiOe8lui+keW+heWKnuWIl+ihqO+8mlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tZWRpdC10b2RvXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzozODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXMuLi4gICUuKnNcbiIKK21zZ3N0ciAi5YGc5q2i5ZyoICVzLi4uICUuKnNcbiIKKworIzogc2VxdWVuY2VyLmM6Mzk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQgJWQiCittc2dzdHIgIuacquefpeWRveS7pCAlZCIKKworIzogc2VxdWVuY2VyLmM6Mzk5OQorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9yaWctaGVhZCIKK21zZ3N0ciAi5LiN6IO96K+75Y+WIG9yaWctaGVhZCIKKworIzogc2VxdWVuY2VyLmM6NDAwNAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdvbnRvJyIKK21zZ3N0ciAi5LiN6IO96K+75Y+WICdvbnRvJyIKKworIzogc2VxdWVuY2VyLmM6NDAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlIEhFQUQgdG8gJXMiCittc2dzdHIgIuS4jeiDveabtOaWsCBIRUFEIOS4uiAlcyIKKworIzogc2VxdWVuY2VyLmM6NDExMQorbXNnaWQgImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLkuI3og73lj5jln7rvvJrmgqjmnInmnKrmmoLlrZjnmoTlj5jmm7TjgIIiCisKKyM6IHNlcXVlbmNlci5jOjQxMjAKK21zZ2lkICJjYW5ub3QgYW1lbmQgbm9uLWV4aXN0aW5nIGNvbW1pdCIKK21zZ3N0ciAi5LiN6IO95L+u6KGl5LiN5a2Y5Zyo55qE5o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzo0MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsZTogJyVzJyIKK21zZ3N0ciAi5peg5pWI5paH5Lu277yaJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbnRlbnRzOiAnJXMnIgorbXNnc3RyICLml6DmlYjlhoXlrrnvvJonJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTI3Cittc2dpZCAiIgorIlxuIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSwgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisiXG4iCisi5oKo55qE5bel5L2c5Yy65Lit5pyJ5pyq5o+Q5Lqk55qE5Y+Y5pu044CC6K+35YWI5o+Q5Lqk54S25ZCO5YaN5qyh6L+Q6KGMICdnaXQgcmViYXNlIC0tY29udGludWUn44CCIgorCisjOiBzZXF1ZW5jZXIuYzo0MTYzIHNlcXVlbmNlci5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGZpbGU6ICclcyciCittc2dzdHIgIuS4jeiDveWGmeWFpeaWh+S7tu+8miclcyciCisKKyM6IHNlcXVlbmNlci5jOjQyMTcKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIuS4jeiDveWIoOmZpCBDSEVSUllfUElDS19IRUFEIgorCisjOiBzZXF1ZW5jZXIuYzo0MjI0Cittc2dpZCAiY291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIuS4jeiDveaPkOS6pOaaguWtmOeahOS/ruaUueOAgiIKKworIzogc2VxdWVuY2VyLmM6NDMzOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiJXPvvJrkuI3og73mi6PpgInkuIDkuKolcyIKKworIzogc2VxdWVuY2VyLmM6NDM0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlc++8mumUmeivr+eahOeJiOacrCIKKworIzogc2VxdWVuY2VyLmM6NDM3NworbXNnaWQgImNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAi5LiN6IO95L2c5Li65Yid5aeL5o+Q5Lqk5Zue6YCAIgorCisjOiBzZXF1ZW5jZXIuYzo0ODQ2Cittc2dpZCAibWFrZV9zY3JpcHQ6IHVuaGFuZGxlZCBvcHRpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdO+8muacieacquiDveWkhOeQhueahOmAiemhuSIKKworIzogc2VxdWVuY2VyLmM6NDg0OQorbXNnaWQgIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJpbmcgcmV2aXNpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdO+8muWHhuWkh+eJiOacrOaXtumUmeivryIKKworIzogc2VxdWVuY2VyLmM6NTA4MyBzZXF1ZW5jZXIuYzo1MTAwCittc2dpZCAibm90aGluZyB0byBkbyIKK21zZ3N0ciAi5peg5LqL5Y+v5YGaIgorCisjOiBzZXF1ZW5jZXIuYzo1MTE5Cittc2dpZCAiY291bGQgbm90IHNraXAgdW5uZWNlc3NhcnkgcGljayBjb21tYW5kcyIKK21zZ3N0ciAi5peg5rOV6Lez6L+H5LiN5b+F6KaB55qE5ouj6YCJIgorCisjOiBzZXF1ZW5jZXIuYzo1MjEzCittc2dpZCAidGhlIHNjcmlwdCB3YXMgYWxyZWFkeSByZWFycmFuZ2VkLiIKK21zZ3N0ciAi6ISa5pys5bey57uP6YeN5paw57yW5o6S44CCIgorCisjOiBzZXR1cC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSBhdCAnJXMnIgorbXNnc3RyICInJXMnIOWcqOS9jeS6jiAnJXMnIOeahOS7k+W6k+S5i+WkliIKKworIzogc2V0dXAuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBubyBzdWNoIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJ2dpdCA8Y29tbWFuZD4gLS0gPHBhdGg+Li4uJyB0byBzcGVjaWZ5IHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGxvY2FsbHkuIgorbXNnc3RyICIiCisiJXPvvJrlt6XkvZzljLrkuK3ml6DmraTot6/lvoTjgIJcbiIKKyLkvb/nlKjlkb3ku6QgJ2dpdCA85ZG95LukPiAtLSA86Lev5b6EPi4uLicg5p2l5oyH5a6a5pys5Zyw5LiN5a2Y5Zyo55qE6Lev5b6E44CCIgorCisjOiBzZXR1cC5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyLmnInmrafkuYnnmoTlj4LmlbAgJyVzJ++8muacquefpeeahOeJiOacrOaIlui3r+W+hOS4jeWtmOWcqOS6juW3peS9nOWMuuS4reOAglxuIgorIuS9v+eUqCAnLS0nIOadpeWIhumalOeJiOacrOWSjOi3r+W+hO+8jOS+i+Wmgu+8mlxuIgorIidnaXQgPOWRveS7pD4gWzzniYjmnKw+Li4uXSAtLSBbPOaWh+S7tj4uLi5dJyIKKworIzogc2V0dXAuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICclcycgbXVzdCBjb21lIGJlZm9yZSBub24tb3B0aW9uIGFyZ3VtZW50cyIKK21zZ3N0ciAi6YCJ6aG5ICclcycg5b+F6aG75Zyo5YW25LuW6Z2e6YCJ6aG55Y+C5pWw5LmL5YmNIgorCisjOiBzZXR1cC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisi5pyJ5q2n5LmJ55qE5Y+C5pWwICclcyfvvJrlj6/lkIzml7bmmK/niYjmnKzlkozmlofku7ZcbiIKKyLkvb/nlKggJy0tJyDmnaXliIbpmpTniYjmnKzlkozot6/lvoTvvIzkvovlpoLvvJpcbiIKKyInZ2l0IDzlkb3ku6Q+IFs854mI5pysPi4uLl0gLS0gWzzmlofku7Y+Li4uXSciCisKKyM6IHNldHVwLmM6NDA5Cittc2dpZCAidW5hYmxlIHRvIHNldCB1cCB3b3JrIHRyZWUgdXNpbmcgaW52YWxpZCBjb25maWciCittc2dzdHIgIuaXoOazleS9v+eUqOaXoOaViOmFjee9ruadpeWIm+W7uuW3peS9nOWMuiIKKworIzogc2V0dXAuYzo0MTMKK21zZ2lkICJ0aGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIKK21zZ3N0ciAi6K+l5pON5L2c5b+F6aG75Zyo5LiA5Liq5bel5L2c5Yy65Lit6L+Q6KGMIgorCisjOiBzZXR1cC5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCBnaXQgcmVwbyB2ZXJzaW9uIDw9ICVkLCBmb3VuZCAlZCIKK21zZ3N0ciAi5pyf5pybIGdpdCDku5PlupPniYjmnKwgPD0gJWTvvIzljbTlvpfliLAgJWQiCisKKyM6IHNldHVwLmM6NTY3Cittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICLlj5HnjrDmnKrnn6XnmoTku5PlupPmianlsZXvvJoiCisKKyM6IHNldHVwLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAi5omT5byAICclcycg5Ye66ZSZIgorCisjOiBzZXR1cC5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbGFyZ2UgdG8gYmUgYSAuZ2l0IGZpbGU6ICclcyciCittc2dzdHIgIuaWh+S7tuWkquWkp++8jOaXoOazleS9nOS4uiAuZ2l0IOaWh+S7tu+8miclcyciCisKKyM6IHNldHVwLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgJXMiCittc2dzdHIgIuivu+WPliAlcyDlh7rplJkiCisKKyM6IHNldHVwLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZ2l0ZmlsZSBmb3JtYXQ6ICVzIgorbXNnc3RyICLml6DmlYjnmoQgZ2l0ZmlsZSDmoLzlvI/vvJolcyIKKworIzogc2V0dXAuYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcGF0aCBpbiBnaXRmaWxlOiAlcyIKK21zZ3N0ciAi5ZyoIGdpdGZpbGUg5Lit5rKh5pyJ6Lev5b6E77yaJXMiCisKKyM6IHNldHVwLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5LiqIGdpdCDku5PlupPvvJolcyIKKworIzogc2V0dXAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyQlcycgdG9vIGJpZyIKK21zZ3N0ciAiJyQlcycg5aSq5aSnIgorCisjOiBzZXR1cC5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJyVzJyIKK21zZ3N0ciAi5LiN5piv5LiA5LiqIGdpdCDku5PlupPvvJonJXMnIgorCisjOiBzZXR1cC5jOjczOCBzZXR1cC5jOjc0MCBzZXR1cC5jOjc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO95YiH5o2i55uu5b2V5YiwICclcyciCisKKyM6IHNldHVwLmM6NzQzIHNldHVwLmM6Nzk5IHNldHVwLmM6ODA5IHNldHVwLmM6ODQ4IHNldHVwLmM6ODU2Cittc2dpZCAiY2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIuaXoOazlei/lOWbnuW9k+WJjeW3peS9nOebruW9lSIKKworIzogc2V0dXAuYzo4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyUqcyVzJXMnIgorbXNnc3RyICLojrflj5YgJyUqcyVzJXMnIOeKtuaAge+8iHN0YXTvvInlpLHotKUiCisKKyM6IHNldHVwLmM6MTEwOAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIuS4jeiDveivu+WPluW9k+WJjeW3peS9nOebruW9lSIKKworIzogc2V0dXAuYzoxMTE3IHNldHVwLmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hhbmdlIHRvICclcyciCittc2dzdHIgIuS4jeiDveWIh+aNouWIsCAnJXMnIgorCisjOiBzZXR1cC5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzKTogJXMiCittc2dzdHIgIuS4jeaYr+S4gOS4qiBnaXQg5LuT5bqT77yI5oiW6ICF5Lu75L2V54i255uu5b2V77yJ77yaJXMiCisKKyM6IHNldHVwLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisiU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS4iCittc2dzdHIgIiIKKyLkuI3mmK/kuIDkuKogZ2l0IOS7k+W6k++8iOaIluiAheebtOiHs+aMgui9veeCuSAlcyDnmoTku7vkvZXniLbnm67lvZXvvIlcbiIKKyLlgZzmraLlnKjmlofku7bns7vnu5/ovrnnlYzvvIjmnKrorr7nva4gR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTe+8ieOAgiIKKworIzogc2V0dXAuYzoxMjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwcm9ibGVtIHdpdGggY29yZS5zaGFyZWRSZXBvc2l0b3J5IGZpbGVtb2RlIHZhbHVlICgwJS4zbykuXG4iCisiVGhlIG93bmVyIG9mIGZpbGVzIG11c3QgYWx3YXlzIGhhdmUgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMuIgorbXNnc3RyICIiCisi5Y+C5pWwIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSDnmoTmlofku7blsZ7mgKflgLzmnInpl67popjvvIgwJS4zb++8ieOAglxuIgorIuaWh+S7tuWxnuS4u+W/hemhu+Wni+e7iOaLpeacieivu+WGmeadg+mZkOOAgiIKKworIzogc2V0dXAuYzoxMjg5Cittc2dpZCAib3BlbiAvZGV2L251bGwgb3IgZHVwIGZhaWxlZCIKK21zZ3N0ciAi5LiN6IO95omT5byA5oiW6ICF5aSN5Yi2IC9kZXYvbnVsbCIKKworIzogc2V0dXAuYzoxMzA0Cittc2dpZCAiZm9yayBmYWlsZWQiCittc2dzdHIgImZvcmsg5aSx6LSlIgorCisjOiBzZXR1cC5jOjEzMDkKK21zZ2lkICJzZXRzaWQgZmFpbGVkIgorbXNnc3RyICJzZXRzaWQg5aSx6LSlIgorCisjOiBzaGExLWZpbGUuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdDsgY2hlY2sgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKK21zZ3N0ciAi5a+56LGh55uu5b2VICVzIOS4jeWtmOWcqO+8jOajgOafpSAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorCisjOiBzaGExLWZpbGUuYzo1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG5vcm1hbGl6ZSBhbHRlcm5hdGUgb2JqZWN0IHBhdGg6ICVzIgorbXNnc3RyICLml6Dms5Xop4TojIPljJblpIfnlKjlr7nosaHot6/lvoTvvJolcyIKKworIzogc2hhMS1maWxlLmM6NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpZ25vcmluZyBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlcywgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiJXPvvJrlv73nlaXlpIfnlKjlr7nosaHlupPvvIzltYzlpZflpKrmt7EiCisKKyM6IHNoYTEtZmlsZS5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIG9iamVjdCBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICLml6Dms5Xop4TojIPljJblr7nosaHnm67lvZU6ICVzIgorCisjOiBzaGExLWZpbGUuYzo2MjUKK21zZ2lkICJ1bmFibGUgdG8gZmRvcGVuIGFsdGVybmF0ZXMgbG9ja2ZpbGUiCittc2dzdHIgIuaXoOazlSBmZG9wZW4g5pu/5o2i6ZSB5paH5Lu2IgorCisjOiBzaGExLWZpbGUuYzo2NDMKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgIuaXoOazleivu+WPluabv+S7o+aWh+S7tiIKKworIzogc2hhMS1maWxlLmM6NjUwCittc2dpZCAidW5hYmxlIHRvIG1vdmUgbmV3IGFsdGVybmF0ZXMgZmlsZSBpbnRvIHBsYWNlIgorbXNnc3RyICLml6Dms5XlsIbmlrDnmoTmm7/ku6Pmlofku7bnp7vliqjliLDkvY0iCisKKyM6IHNoYTEtZmlsZS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIui3r+W+hCAnJXMnIOS4jeWtmOWcqCIKKworIzogc2hhMS1maWxlLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgYXMgYSBsaW5rZWQgY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIgorbXNnc3RyICLlsJrkuI3mlK/mjIHlsIblj4LogIPku5PlupMgJyVzJyDkvZzkuLrkuIDkuKrpk77mjqXmo4Dlh7rjgIIiCisKKyM6IHNoYTEtZmlsZS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICLlj4LogIPku5PlupMgJyVzJyDkuI3mmK/kuIDkuKrmnKzlnLDku5PlupPjgIIiCisKKyM6IHNoYTEtZmlsZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgIuWPguiAg+S7k+W6kyAnJXMnIOaYr+S4gOS4qua1heWFi+mahiIKKworIzogc2hhMS1maWxlLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgZ3JhZnRlZCIKK21zZ3N0ciAi5Y+C6ICD5LuT5bqTICclcycg5bey6KKr56e75qSNIgorCisjOiBzaGExLWZpbGUuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBsaW5lIHdoaWxlIHBhcnNpbmcgYWx0ZXJuYXRlIHJlZnM6ICVzIgorbXNnc3RyICLop6PmnpDlpIfnlKjlvJXnlKjml7bml6DmlYjnmoTooYzvvJolcyIKKworIzogc2hhMS1maWxlLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAi5bCd6K+VIG1tYXAgJTxQUkl1TUFYPu+8jOi2hei/h+S6huacgOWkp+WAvCAlPFBSSXVNQVg+IgorCisjOiBzaGExLWZpbGUuYzo5NjQKK21zZ2lkICJtbWFwIGZhaWxlZCIKK21zZ3N0ciAibW1hcCDlpLHotKUiCisKKyM6IHNoYTEtZmlsZS5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGZpbGUgJXMgaXMgZW1wdHkiCittc2dzdHIgIuWvueixoeaWh+S7tiAlcyDkuLrnqboiCisKKyM6IHNoYTEtZmlsZS5jOjEyNjMgc2hhMS1maWxlLmM6MjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICLmjZ/lnY/nmoTmnb7mlaPlr7nosaEgJyVzJyIKKworIzogc2hhMS1maWxlLmM6MTI2NSBzaGExLWZpbGUuYzoyNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICLmnb7mlaPlr7nosaEgJyVzJyDlkI7pnaLmnInlnoPlnL7mlbDmja4iCisKKyM6IHNoYTEtZmlsZS5jOjEzMDcKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIgorbXNnc3RyICLml6DmlYjnmoTlr7nosaHnsbvlnosiCisKKyM6IHNoYTEtZmlsZS5jOjEzOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAi5peg5rOV55SoIC0tYWxsb3ctdW5rbm93bi10eXBlIOWPguaVsOino+W8gCAlcyDlpLTkv6Hmga8iCisKKyM6IHNoYTEtZmlsZS5jOjEzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIiCittc2dzdHIgIuaXoOazleino+W8gCAlcyDlpLTpg6giCisKKyM6IHNoYTEtZmlsZS5jOjE0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIgorbXNnc3RyICLml6Dms5XnlKggLS1hbGxvdy11bmtub3duLXR5cGUg5Y+C5pWw6Kej5p6QICVzIOWktOS/oeaBryIKKworIzogc2hhMS1maWxlLmM6MTQwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIgorbXNnc3RyICLml6Dms5Xop6PmnpAgJXMg5aS06YOoIgorCisjOiBzaGExLWZpbGUuYzoxNjI5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAi6K+75Y+W5a+56LGhICVzIOWksei0pSIKKworIzogc2hhMS1maWxlLmM6MTYzMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlbWVudCAlcyBub3QgZm91bmQgZm9yICVzIgorbXNnc3RyICLmib7kuI3liLAgJTIkcyDnmoTmm7/ku6MgJTEkcyIKKworIzogc2hhMS1maWxlLmM6MTYzNworIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAi5p2+5pWj5a+56LGhICVz77yI5L+d5a2Y5ZyoICVz77yJ5bey5o2f5Z2PIgorCisjOiBzaGExLWZpbGUuYzoxNjQxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tlZCBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAi5omT5YyF5a+56LGhICVz77yI5L+d5a2Y5ZyoICVz77yJ5bey5o2f5Z2PIgorCisjOiBzaGExLWZpbGUuYzoxNzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICVzIgorbXNnc3RyICLml6Dms5Xlhpnmlofku7YgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBwZXJtaXNzaW9uIHRvICclcyciCittc2dzdHIgIuaXoOazleS4uiAnJXMnIOiuvue9ruadg+mZkCIKKworIzogc2hhMS1maWxlLmM6MTc2MAorbXNnaWQgImZpbGUgd3JpdGUgZXJyb3IiCittc2dzdHIgIuaWh+S7tuWGmemUmeivryIKKworIzogc2hhMS1maWxlLmM6MTc4MAorbXNnaWQgImVycm9yIHdoZW4gY2xvc2luZyBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAi5YWz6Zet5p2+5pWj5a+56LGh5paH5Lu25pe25Ye66ZSZIgorCisjOiBzaGExLWZpbGUuYzoxODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImluc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciBhZGRpbmcgYW4gb2JqZWN0IHRvIHJlcG9zaXRvcnkgZGF0YWJhc2UgJXMiCittc2dzdHIgIuadg+mZkOS4jei2s++8jOaXoOazleWcqOS7k+W6k+WvueixoeW6kyAlcyDkuK3mt7vliqDlr7nosaEiCisKKyM6IHNoYTEtZmlsZS5jOjE4NDcKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICLml6Dms5XliJvlu7rkuLTml7bmlofku7YiCisKKyM6IHNoYTEtZmlsZS5jOjE4NzEKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgIuS4jeiDveWGmeadvuaVo+WvueixoeaWh+S7tiIKKworIzogc2hhMS1maWxlLmM6MTg3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBuZXcgb2JqZWN0ICVzICglZCkiCittc2dzdHIgIuS4jeiDveWOi+e8qeaWsOWvueixoSAlc++8iCVk77yJIgorCisjOiBzaGExLWZpbGUuYzoxODgxCisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGVFbmQgb24gb2JqZWN0ICVzIGZhaWxlZCAoJWQpIgorbXNnc3RyICLlnKjlr7nosaEgJXMg5LiK6LCD55SoIGRlZmxhdGVFbmQg5aSx6LSl77yIJWTvvIkiCisKKyM6IHNoYTEtZmlsZS5jOjE4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZnVzZWQgYnkgdW5zdGFibGUgb2JqZWN0IHNvdXJjZSBkYXRhIGZvciAlcyIKK21zZ3N0ciAi6KKrICVzIOeahOS4jeeos+WumuWvueixoea6kOaVsOaNruaQnueziua2guS6hiIKKworIzogc2hhMS1maWxlLmM6MTg5NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJXMiCittc2dzdHIgIuWcqCAlcyDkuIrosIPnlKggdXRpbWUoKSDlpLHotKUiCisKKyM6IHNoYTEtZmlsZS5jOjE5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5a+56LGhICVzIgorCisjOiBzaGExLWZpbGUuYzoyMDExCittc2dpZCAiY29ycnVwdCBjb21taXQiCittc2dzdHIgIuaNn+Wdj+eahOaPkOS6pCIKKworIzogc2hhMS1maWxlLmM6MjAxOQorbXNnaWQgImNvcnJ1cHQgdGFnIgorbXNnc3RyICLmjZ/lnY/nmoTmoIfnrb4iCisKKyM6IHNoYTEtZmlsZS5jOjIxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBlcnJvciB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAi57Si5byVICVzIOaXtuivu+WPlumUmeivryIKKworIzogc2hhMS1maWxlLmM6MjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCByZWFkIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICLntKLlvJUgJXMg5pe26K+75YWl5LiN5a6M5pW0IgorCisjOiBzaGExLWZpbGUuYzoyMTk1IHNoYTEtZmlsZS5jOjIyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIKK21zZ3N0ciAiJXPvvJrmj5LlhaXmlbDmja7lupPlpLHotKUiCisKKyM6IHNoYTEtZmlsZS5jOjIyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIKK21zZ3N0ciAiJXPvvJrkuI3mlK/mjIHnmoTmlofku7bnsbvlnosiCisKKyM6IHNoYTEtZmlsZS5jOjIyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgb2JqZWN0IgorbXNnc3RyICIlcyDkuI3mmK/kuIDkuKrmnInmlYjnmoTlr7nosaEiCisKKyM6IHNoYTEtZmlsZS5jOjIyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiVzIOS4jeaYr+S4gOS4quacieaViOeahCAnJXMnIOWvueixoSIKKworIzogc2hhMS1maWxlLmM6MjI2NCBidWlsdGluL2luZGV4LXBhY2suYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgIuS4jeiDveaJk+W8gCAlcyIKKworIzogc2hhMS1maWxlLmM6MjQ1NCBzaGExLWZpbGUuYzoyNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggZm9yICVzIChleHBlY3RlZCAlcykiCittc2dzdHIgIiVzIOeahOWTiOW4jOWAvOS4jeWMuemFje+8iOmihOacnyAlc++8iSIKKworIzogc2hhMS1maWxlLmM6MjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAlcyIKK21zZ3N0ciAi5LiN6IO9IG1tYXAgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayBoZWFkZXIgb2YgJXMiCittc2dzdHIgIuaXoOazleino+WOi+e8qSAlcyDnmoTlpLTpg6giCisKKyM6IHNoYTEtZmlsZS5jOjI0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAi5peg5rOV6Kej5p6QICVzIOeahOWktOmDqCIKKworIzogc2hhMS1maWxlLmM6MjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGNvbnRlbnRzIG9mICVzIgorbXNnc3RyICLml6Dms5Xop6PljovnvKkgJXMg55qE5YaF5a65IgorCisjOiBzaGExLW5hbWUuYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgU0hBMSAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIuefrSBTSEExICVzIOWtmOWcqOatp+S5iSIKKworIzogc2hhMS1uYW1lLmM6NDk3Cittc2dpZCAiVGhlIGNhbmRpZGF0ZXMgYXJlOiIKK21zZ3N0ciAi5YCZ6YCJ6ICF5pyJ77yaIgorCisjOiBzaGExLW5hbWUuYzo3OTYKK21zZ2lkICIiCisiR2l0IG5vcm1hbGx5IG5ldmVyIGNyZWF0ZXMgYSByZWYgdGhhdCBlbmRzIHdpdGggNDAgaGV4IGNoYXJhY3RlcnNcbiIKKyJiZWNhdXNlIGl0IHdpbGwgYmUgaWdub3JlZCB3aGVuIHlvdSBqdXN0IHNwZWNpZnkgNDAtaGV4LiBUaGVzZSByZWZzXG4iCisibWF5IGJlIGNyZWF0ZWQgYnkgbWlzdGFrZS4gRm9yIGV4YW1wbGUsXG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorIlxuIgorIndoZXJlIFwiJGJyXCIgaXMgc29tZWhvdyBlbXB0eSBhbmQgYSA0MC1oZXggcmVmIGlzIGNyZWF0ZWQuIFBsZWFzZVxuIgorImV4YW1pbmUgdGhlc2UgcmVmcyBhbmQgbWF5YmUgZGVsZXRlIHRoZW0uIFR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieVxuIgorInJ1bm5pbmcgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIgorbXNnc3RyICIiCisiR2l0IOmAmuW4uOS4jeS8muWIm+W7uuS4gOS4quS7pTQw5Liq5Y2B5YWt6L+b5Yi25a2X56ym57uT5bC+55qE5byV55So77yM5Zug5Li65b2T5oKo5Y+q5o+Q5L6bNDBcbiIKKyLkuKrljYHlha3ov5vliLblrZfnrKbml7blsIbooqvlv73nlaXjgILov5nkupvlvJXnlKjlj6/og73ooqvplJnor6/lnLDliJvlu7rjgILkvovlpoLvvJpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisi5b2TIFwiJGJyXCIg5p+Q56eN5Y6f5Zug56m655m95pe277yM5LiA5LiqNDDkvY3ljYHlha3ov5vliLbnmoTlvJXnlKjlsIbooqvliJvlu7rjgILor7fmo4Dmn6Xov5nkuptcbiIKKyLlvJXnlKjvvIzlj6/og73pnIDopoHliKDpmaTlroPku6zjgILov5DooYwgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZ1xuIgorImZhbHNlXCIg5ZG95Luk5YWz6Zet5pys5raI5oGv6YCa55+l44CCIgorCisjOiBzaGExLW5hbWUuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciAnJS4qcycgb25seSBnb2VzIGJhY2sgdG8gJXMiCittc2dzdHIgIiclLipzJyDnmoTml6Xlv5fku4Xog73lm57liLAgJXMiCisKKyM6IHNoYTEtbmFtZS5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICclLipzJyBvbmx5IGhhcyAlZCBlbnRyaWVzIgorbXNnc3RyICInJS4qcycg55qE5pel5b+X5LuF5pyJICVkIOS4quadoeebriIKKworIzogc2hhMS1uYW1lLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gJyUuKnMnIgorbXNnc3RyICLot6/lvoQgJyVzJyDlnKjno4Hnm5jkuIrvvIzkvYbmmK/kuI3lnKggJyUuKnMnIOS4rSIKKworIzogc2hhMS1uYW1lLmM6MTY5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicGF0aCAnJXMnIGV4aXN0cywgYnV0IG5vdCAnJXMnXG4iCisiaGludDogRGlkIHlvdSBtZWFuICclLipzOiVzJyBha2EgJyUuKnM6Li8lcyc/IgorbXNnc3RyICIiCisi6Lev5b6EICclcycg5a2Y5Zyo77yM6ICMICclcycg5LiN5a2Y5ZyoXG4iCisi5o+Q56S677ya5oKo55qE5oSP5oCd5pivICclLipzOiVzJyDkuqbljbMgJyUuKnM6Li8lcyfvvJ8iCisKKyM6IHNoYTEtbmFtZS5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IGluICclLipzJyIKK21zZ3N0ciAi6Lev5b6EICclcycg5LiN5ZyoICclLipzJyDkuK0iCisKKyM6IHNoYTEtbmFtZS5jOjE3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInBhdGggJyVzJyBpcyBpbiB0aGUgaW5kZXgsIGJ1dCBub3QgYXQgc3RhZ2UgJWRcbiIKKyJoaW50OiBEaWQgeW91IG1lYW4gJzolZDolcyc/IgorbXNnc3RyICIiCisi6Lev5b6EICclcycg5Zyo57Si5byV5Lit77yM5L2G5LiN5Zyo5pqC5a2Y5Yy6ICVkIOS4rVxuIgorIuaPkOekuu+8muaCqOeahOaEj+aAneaYryAnOiVkOiVzJ++8nyIKKworIzogc2hhMS1uYW1lLmM6MTc0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicGF0aCAnJXMnIGlzIGluIHRoZSBpbmRleCwgYnV0IG5vdCAnJXMnXG4iCisiaGludDogRGlkIHlvdSBtZWFuICc6JWQ6JXMnIGFrYSAnOiVkOi4vJXMnPyIKK21zZ3N0ciAiIgorIui3r+W+hCAnJXMnIOWcqOe0ouW8leS4re+8jOS9hiAnJXMnIOS4jeWcqFxuIgorIuaPkOekuu+8muaCqOeahOaEj+aAneaYryAnOiVkOiVzJyDkuqbljbMgJzolZDouLyVzJ++8nyIKKworIzogc2hhMS1uYW1lLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gdGhlIGluZGV4IgorbXNnc3RyICLot6/lvoQgJyVzJyDlnKjno4Hnm5jkuIrvvIzkvYbkuI3lnKjntKLlvJXph4wiCisKKyM6IHNoYTEtbmFtZS5jOjE3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IChuZWl0aGVyIG9uIGRpc2sgbm9yIGluIHRoZSBpbmRleCkiCittc2dzdHIgIui3r+W+hCAnJXMnIOS4jeWtmOWcqO+8iOaXouS4jeWcqOejgeebmOS4iu+8jOS5n+S4jeWcqOe0ouW8leS4re+8iSIKKworIzogc2hhMS1uYW1lLmM6MTc3MQorbXNnaWQgInJlbGF0aXZlIHBhdGggc3ludGF4IGNhbid0IGJlIHVzZWQgb3V0c2lkZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuS4jeiDveWcqOW3peS9nOWMuuS5i+WkluS9v+eUqOebuOWvuei3r+W+hOivreazlSIKKworIzogc2hhMS1uYW1lLmM6MTkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCBuYW1lICclLipzJy4iCittc2dzdHIgIuaXoOaViOeahOWvueixoeWQjSAnJS4qcyfjgIIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZQorIzogc3RyYnVmLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEdpQiIKK21zZ3N0ciAiJXUuJTIuMnUgR2lCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCL3MiCittc2dzdHIgIiV1LiUyLjJ1IEdpQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUKKyM6IHN0cmJ1Zi5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIiCittc2dzdHIgIiV1LiUyLjJ1IE1pQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQi9zIgorbXNnc3RyICIldS4lMi4ydSBNaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlCisjOiBzdHJidWYuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCIgorbXNnc3RyICIldS4lMi4ydSBLaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBLaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgS2lCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlCisjOiBzdHJidWYuYzo4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiJXUgYnl0ZXMiCittc2dzdHJbMF0gIiV1IOWtl+iKgiIKK21zZ3N0clsxXSAiJXUg5a2X6IqCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg2NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlL3MiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzL3MiCittc2dzdHJbMF0gIiV1IOWtl+iKgi/np5IiCittc2dzdHJbMV0gIiV1IOWtl+iKgi/np5IiCisKKyM6IHN0cmJ1Zi5jOjExNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGVkaXQgJyVzJyIKK21zZ3N0ciAi5LiN6IO957yW6L6RICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjExNCBzdWJtb2R1bGUuYzoxNDMKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAi5peg5rOV5L+u5pS55pyq5ZCI5bm255qEIC5naXRtb2R1bGVz77yM5YWI6Kej5Yaz5ZCI5bm25Yay56qBIgorCisjOiBzdWJtb2R1bGUuYzoxMTggc3VibW9kdWxlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAi5peg5rOV5ZyoIC5naXRtb2R1bGVzIOS4reaJvuWIsCBwYXRoPSVzIOeahOWwj+iKgiIKKworIzogc3VibW9kdWxlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICLml6Dms5Xnp7vpmaQgJXMg55qEIC5naXRtb2R1bGVzIOadoeebriIKKworIzogc3VibW9kdWxlLmM6MTY1Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAi5bCG5pu05paw5ZCOIC5naXRtb2R1bGVzIOa3u+WKoOaaguWtmOWMuuWksei0pSIKKworIzogc3VibW9kdWxlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLkvY3kuo7mnKrmo4Dlh7rnmoTlrZDmqKHnu4QgJyVzJyIKKworIzogc3VibW9kdWxlLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAi6Lev5b6E6KeE5qC8ICclcycg5Zyo5a2Q5qih57uEICclLipzJyDkuK0iCisKKyM6IHN1Ym1vZHVsZS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS1pZ25vcmUtc3VibW9kdWxlcyBhcmd1bWVudDogJXMiCittc2dzdHIgIuWdj+eahCAtLWlnbm9yZS1zdWJtb2R1bGVzIOWPguaVsO+8miVzIgorCisjOiBzdWJtb2R1bGUuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSBpbiBjb21taXQgJXMgYXQgcGF0aDogJyVzJyBjb2xsaWRlcyB3aXRoIGEgc3VibW9kdWxlIG5hbWVkIHRoZSAiCisic2FtZS4gU2tpcHBpbmcgaXQuIgorbXNnc3RyICLmj5DkuqQgJXMg5Lit5L2N5LqO6Lev5b6EICclcycg55qE5a2Q5qih57uE5ZKM5ZCM5ZCN55qE5a2Q5qih57uE5Yay56qB44CCIOi3s+i/h+Wug+OAgiIKKworIzogc3VibW9kdWxlLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSBlbnRyeSAnJXMnICglcykgaXMgYSAlcywgbm90IGEgY29tbWl0IgorbXNnc3RyICLlrZDmqKHnu4TmnaHnm64gJyVzJ++8iCVz77yJ5piv5LiA5LiqICVz77yM5LiN5piv5LiA5Liq5o+Q5LqkIgorCisjOiBzdWJtb2R1bGUuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCA8Y29tbWl0cz4gLS1ub3QgLS1yZW1vdGVzIC1uIDEnIGNvbW1hbmQgaW4gIgorInN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi5peg5rOV5Zyo5a2Q5qih57uEICVzIOS4reaJp+ihjCAnZ2l0IHJldi1saXN0IDzmj5DkuqQ+IC0tbm90IC0tcmVtb3RlcyAtbiAxJyIKKworIzogc3VibW9kdWxlLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9jZXNzIGZvciBzdWJtb2R1bGUgJyVzJyBmYWlsZWQiCittc2dzdHIgIuWkhOeQhuWtkOaooee7hCAnJXMnIOWksei0pSIKKworIzogc3VibW9kdWxlLmM6MTE0NyBidWlsdGluL2JyYW5jaC5jOjY4MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjA0NQorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLml6Dms5XlsIYgSEVBRCDop6PmnpDkuLrmnInmlYjlvJXnlKjjgIIiCisKKyM6IHN1Ym1vZHVsZS5jOjExNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICLmraPlnKjmjqjpgIHlrZDmqKHnu4QgJyVzJ1xuIgorCisjOiBzdWJtb2R1bGUuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBwdXNoIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIuaXoOazleaOqOmAgeWtkOaooee7hCAnJXMnXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjE0NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgc3VibW9kdWxlICVzJXNcbiIKK21zZ3N0ciAi5q2j5Zyo6I635Y+W5a2Q5qih57uEICVzJXNcbiIKKworIzogc3VibW9kdWxlLmM6MTQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYWNjZXNzIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIuaXoOazleiuv+mXruWtkOaooee7hCAnJXMnXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjE2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9ycyBkdXJpbmcgc3VibW9kdWxlIGZldGNoOlxuIgorIiVzIgorbXNnc3RyICIiCisi6I635Y+W5a2Q5qih57uE5pe255qE6ZSZ6K+v77yaXG4iCisiJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBub3QgcmVjb2duaXplZCBhcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICLml6Dms5XlsIYgJyVzJyDor4bliKvkuLrkuIDkuKogZ2l0IOS7k+W6kyIKKworIzogc3VibW9kdWxlLmM6MTY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTInIGluIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi5peg5rOV5Zyo5a2Q5qih57uEICVzIOS4reaJp+ihjCAnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj0yJyIKKworIzogc3VibW9kdWxlLmM6MTcyMAorIywgYy1mb3JtYXQKK21zZ2lkICInZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj0yJyBmYWlsZWQgaW4gc3VibW9kdWxlICVzIgorbXNnc3RyICLlnKjlrZDmqKHnu4QgJXMg5Lit5omn6KGMICdnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTInIOWksei0pSIKKworIzogc3VibW9kdWxlLmM6MTgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLml6Dms5XlnKjlrZDmqKHnu4QgJyVzJyDkuK3lkK/liqggJ2dpdCBzdGF0dXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLml6Dms5XlnKjlrZDmqKHnu4QgJyVzJyDkuK3miafooYwgJ2dpdCBzdGF0dXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIuaXoOazleWcqOWtkOaooee7hCAnJXMnIOS4reWPlua2iCBjb3JlLndvcmt0cmVlIOeahOiuvue9riIKKworIzogc3VibW9kdWxlLmM6MTg1NSBzdWJtb2R1bGUuYzoyMTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgIuaXoOazlemAkuW9kui/m+WtkOaooee7hOi3r+W+hCAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODc2Cittc2dpZCAiY291bGQgbm90IHJlc2V0IHN1Ym1vZHVsZSBpbmRleCIKK21zZ3N0ciAi5peg5rOV6YeN572u5a2Q5qih57uE57Si5byVIgorCisjOiBzdWJtb2R1bGUuYzoxOTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGhhcyBkaXJ0eSBpbmRleCIKK21zZ3N0ciAi5a2Q5qih57uEICclcycg5Lit5pyJ6ISP57Si5byVIgorCisjOiBzdWJtb2R1bGUuYzoxOTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnIGNvdWxkIG5vdCBiZSB1cGRhdGVkLiIKK21zZ3N0ciAi5a2Q5qih57uEICclcycg5peg5rOV6KKr5pu05paw44CCIgorCisjOiBzdWJtb2R1bGUuYzoyMDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSBnaXQgZGlyICclcycgaXMgaW5zaWRlIGdpdCBkaXIgJyUuKnMnIgorbXNnc3RyICLlrZDmqKHnu4QgZ2l0IOebruW9lSAnJXMnIOS9jeS6jiBnaXQg55uu5b2VICclLipzJyDkuK0iCisKKyM6IHN1Ym1vZHVsZS5jOjIwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIuS4jeaUr+aMgeWvueacieWkmuS4quW3peS9nOWMuueahOWtkOaooee7hCAnJXMnIOaJp+ihjCByZWxvY2F0ZV9naXRkaXIiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNzEgc3VibW9kdWxlLmM6MjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIG5hbWUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLkuI3og73mn6Xor6LlrZDmqKHnu4QgJyVzJyDnmoTlkI3np7AiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbW92ZSAnJXMnIGludG8gYW4gZXhpc3RpbmcgZ2l0IGRpciIKK21zZ3N0ciAi56aB5q2i56e75YqoICclcycg5Yiw546w5a2YIGdpdCDnm67lvZXkuK0iCisKKyM6IHN1Ym1vZHVsZS5jOjIwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1pZ3JhdGluZyBnaXQgZGlyZWN0b3J5IG9mICclcyVzJyBmcm9tXG4iCisiJyVzJyB0b1xuIgorIiclcydcbiIKK21zZ3N0ciAiIgorIuWwhiAnJXMlcycg55qEIGdpdCDnm67lvZXku45cbiIKKyInJXMnIOi/geenu+iHs1xuIgorIiclcydcbiIKKworIzogc3VibW9kdWxlLmM6MjIwOQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBscy1maWxlcyBpbiAuLiIKK21zZ3N0ciAi5peg5rOV5ZyoIC4uIOS4reWQr+WKqCBscy1maWxlcyIKKworIzogc3VibW9kdWxlLmM6MjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJscy10cmVlIHJldHVybmVkIHVuZXhwZWN0ZWQgcmV0dXJuIGNvZGUgJWQiCittc2dzdHIgImxzLXRyZWUg6L+U5Zue5pyq55+l6L+U5Zue5YC8ICVkIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHN1c3BpY2lvdXMgc3VibW9kdWxlIG5hbWU6ICVzIgorbXNnc3RyICLlv73nlaXlj6/nlpHnmoTlrZDmqKHnu4TlkI3np7DvvJolcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjMwMworbXNnaWQgIm5lZ2F0aXZlIHZhbHVlcyBub3QgYWxsb3dlZCBmb3Igc3VibW9kdWxlLmZldGNoam9icyIKK21zZ3N0ciAic3VibW9kdWxlLmZldGNoam9icyDkuI3lhYHorrjkuLrotJ/lgLwiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJyVzJyB3aGljaCBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uOiAlcyIKK21zZ3N0ciAi5b+955Wl5Y+v6IO96KKr6Kej5p6Q5Li65ZG95Luk6KGM6YCJ6aG555qEICclcyfvvJolcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAiJXMg55qE5YC85peg5pWIIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiCittc2dzdHIgIuS4jeiDveabtOaWsCAuZ2l0bW9kdWxlcyDmnaHnm64gJXMiCisKKyM6IHRyYWlsZXIuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiCittc2dzdHIgIuaJp+ihjCB0cmFpbGVyIOWRveS7pCAnJXMnIOWksei0pSIKKworIzogdHJhaWxlci5jOjQ4NSB0cmFpbGVyLmM6NDkwIHRyYWlsZXIuYzo0OTUgdHJhaWxlci5jOjU0OSB0cmFpbGVyLmM6NTUzCisjOiB0cmFpbGVyLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgJyVzJyBmb3Iga2V5ICclcyciCittc2dzdHIgIumUriAnJTIkcycg55qE5pyq55+l5Y+W5YC8ICclMSRzJyIKKworIzogdHJhaWxlci5jOjUzOSB0cmFpbGVyLmM6NTQ0IGJ1aWx0aW4vcmVtb3RlLmM6Mjk4IGJ1aWx0aW4vcmVtb3RlLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgIuWkmuS6juS4gOS4qiAlcyIKKworIzogdHJhaWxlci5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIgorbXNnc3RyICLnrb7lkI0gJyUuKnMnIOeahOmUruS4uuepuiIKKworIzogdHJhaWxlci5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICclcyciCittc2dzdHIgIuS4jeiDveivu+WPlui+k+WFpeaWh+S7tiAnJXMnIgorCisjOiB0cmFpbGVyLmM6NzUzCittc2dpZCAiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAi5LiN6IO96Ieq5qCH5YeG6L6T5YWl6K+75Y+WIgorCisjOiB0cmFpbGVyLmM6MTAxMSB3cmFwcGVyLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICLkuI3og73lr7kgJXMg6LCD55SoIHN0YXQiCisKKyM6IHRyYWlsZXIuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IGEgcmVndWxhciBmaWxlIgorbXNnc3RyICLmlofku7YgJXMg5LiN5piv5LiA5Liq5q2j6KeE5paH5Lu2IgorCisjOiB0cmFpbGVyLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCB3cml0YWJsZSBieSB1c2VyIgorbXNnc3RyICLmlofku7YgJXMg55So5oi35LiN5Y+v5YaZIgorCisjOiB0cmFpbGVyLmM6MTAyNworbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICLkuI3og73miZPlvIDkuLTml7bmlofku7YiCisKKyM6IHRyYWlsZXIuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgdGVtcG9yYXJ5IGZpbGUgdG8gJXMiCittc2dzdHIgIuS4jeiDvemHjeWRveWQjeS4tOaXtuaWh+S7tuS4uiAlcyIKKworIzogdHJhbnNwb3J0LmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNldCB1cHN0cmVhbSBvZiAnJXMnIHRvICclcycgb2YgJyVzJ1xuIgorbXNnc3RyICLlsIbopoHorr7nva4gJyUxJHMnIOeahOS4iua4uOS4uiAnJTMkcycg55qEICclMiRzJ1xuIgorCisjOiB0cmFuc3BvcnQuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgYnVuZGxlICclcyciCittc2dzdHIgIuaXoOazleivu+WPliBidW5kbGUgJyVzJyIKKworIzogdHJhbnNwb3J0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIKK21zZ3N0ciAi5Lyg6L6T77ya5peg5pWI55qE5rex5bqm6YCJ6aG5ICclcyciCisKKyM6IHRyYW5zcG9ydC5jOjI2NgorbXNnaWQgInNlZSBwcm90b2NvbC52ZXJzaW9uIGluICdnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGRldGFpbHMiCittc2dzdHIgIuafpeeciyAnZ2l0IGhlbHAgY29uZmlnJyDkuK3nmoQgcHJvdG9jb2wudmVyc2lvbiDojrflj5bmm7TlpJrkv6Hmga8iCisKKyM6IHRyYW5zcG9ydC5jOjI2NworbXNnaWQgInNlcnZlciBvcHRpb25zIHJlcXVpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGxhdGVyIgorbXNnc3RyICLmnI3liqHnq6/pgInpobnpnIDopoHniYjmnKwgMiDljY/orq7miJbmm7Tpq5giCisKKyM6IHRyYW5zcG9ydC5jOjYzMgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSB0cmFuc3BvcnQuY29sb3IuKiBjb25maWciCittc2dzdHIgIuS4jeiDveino+aekCB0cmFuc3BvcnQuY29sb3IuKiDphY3nva4iCisKKyM6IHRyYW5zcG9ydC5jOjcwNQorbXNnaWQgInN1cHBvcnQgZm9yIHByb3RvY29sIHYyIG5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIuWNj+iuriB2MiDnmoTmlK/mjIHlsJrmnKrlrp7njrAiCisKKyM6IHRyYW5zcG9ydC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGZvciBjb25maWcgJyVzJzogJXMiCittc2dzdHIgIumFjee9riAnJXMnIOeahOWPluWAvOacquefpe+8miVzIgorCisjOiB0cmFuc3BvcnQuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0ICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgIuS8oOi+kyAnJXMnIOS4jeWFgeiuuCIKKworIzogdHJhbnNwb3J0LmM6OTQ5Cittc2dpZCAiZ2l0LW92ZXItcnN5bmMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIKK21zZ3N0ciAi5LiN5YaN5pSv5oyBIGdpdC1vdmVyLXJzeW5jIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKKyJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIKK21zZ3N0ciAi5LiL5YiX5a2Q5qih57uE6Lev5b6E5omA5YyF5ZCr55qE5L+u5pS55Zyo5Lu75L2V6L+c56iL5rqQ5Lit6YO95om+5LiN5Yiw77yaXG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBsZWFzZSB0cnlcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisidG8gcHVzaCB0aGVtIHRvIGEgcmVtb3RlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisi6K+35bCd6K+VXG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyLmiJbogIXov5vlhaXliLDlrZDnm67lvZXmiafooYxcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisi5Lul5o6o6YCB6Iez6L+c56iL44CCXG4iCisiXG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwNTYKK21zZ2lkICJBYm9ydGluZy4iCittc2dzdHIgIuato+WcqOe7iOatouOAgiIKKworIzogdHJhbnNwb3J0LmM6MTIwMQorbXNnaWQgImZhaWxlZCB0byBwdXNoIGFsbCBuZWVkZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAi5LiN6IO95o6o6YCB5YWo6YOo6ZyA6KaB55qE5a2Q5qih57uEIgorCisjOiB0cmFuc3BvcnQuYzoxMzQ1IHRyYW5zcG9ydC1oZWxwZXIuYzo2NTcKK21zZ2lkICJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAi5Y2P6K6u5LiN5pSv5oyB6K+l5pON5L2cIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEgdHJhbnNwb3J0LWhlbHBlci5jOjkwCittc2dpZCAiZnVsbCB3cml0ZSB0byByZW1vdGUgaGVscGVyIGZhaWxlZCIKK21zZ3N0ciAi5a6M5pW05YaZ5YWl6L+c56iL5Yqp5omL5aSx6LSlIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIHJlbW90ZSBoZWxwZXIgZm9yICclcyciCittc2dzdHIgIuaXoOazleS4uiAnJXMnIOaJvuWIsOi/nOeoi+WKqeaJiyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE2MCB0cmFuc3BvcnQtaGVscGVyLmM6NTcxCittc2dpZCAiY2FuJ3QgZHVwIGhlbHBlciBvdXRwdXQgZmQiCittc2dzdHIgIuaXoOazleWkjeWItuWKqeaJi+i+k+WHuuaWh+S7tuWPpeafhCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBtYW5kYXRvcnkgY2FwYWJpbGl0eSAlczsgdGhpcyByZW1vdGUgaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyICIKKyJ2ZXJzaW9uIG9mIEdpdCIKK21zZ3N0ciAi5pyq55+l55qE5by65Yi26IO95YqbICVz77yM6K+l6L+c56iL5Yqp5omL5Y+v6IO96ZyA6KaB5paw54mI5pys55qER2l0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjE3Cittc2dpZCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IgorbXNnc3RyICLov5znqIvliqnmiYvpnIDopoHlrp7njrAgcmVmc3BlYyDog73lipsiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyODQgdHJhbnNwb3J0LWhlbHBlci5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIKK21zZ3N0ciAiJXMg5oSP5aSW5Zyw6K+077yaJyVzJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHNvIGxvY2tlZCAlcyIKK21zZ3N0ciAiJXMg5Lmf6ZSB5a6a5LqGICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDkzCittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtaW1wb3J0IgorbXNnc3RyICLkuI3og73miafooYwgZmFzdC1pbXBvcnQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1MTYKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtaW1wb3J0IgorbXNnc3RyICLmiafooYwgZmFzdC1pbXBvcnQg5Ye66ZSZIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTQ1IHRyYW5zcG9ydC1oZWxwZXIuYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAlcyIKK21zZ3N0ciAi5peg5rOV6K+75Y+W5byV55SoICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcmVzcG9uc2UgdG8gY29ubmVjdDogJXMiCittc2dzdHIgIui/nuaOpeaXtuacquefpeeahOWTjeW6lO+8miVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEyCittc2dpZCAic2V0dGluZyByZW1vdGUgc2VydmljZSBwYXRoIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgIuWNj+iuruS4jeaUr+aMgeiuvue9rui/nOeoi+acjeWKoei3r+W+hCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxNAorbXNnaWQgImludmFsaWQgcmVtb3RlIHNlcnZpY2UgcGF0aCIKK21zZ3N0ciAi5peg5pWI55qE6L+c56iL5pyN5Yqh6Lev5b6EIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNvbm5lY3QgdG8gc3Vic2VydmljZSAlcyIKK21zZ3N0ciAi5LiN6IO96L+e5o6l5Yiw5a2Q5pyN5YqhICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIG9rL2Vycm9yLCBoZWxwZXIgc2FpZCAnJXMnIgorbXNnc3RyICLpooTmnJ8gb2svZXJyb3LvvIzliqnmiYvor7QgJyVzJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgcmVwb3J0ZWQgdW5leHBlY3RlZCBzdGF0dXMgb2YgJXMiCittc2dzdHIgIuWKqeaJi+aKpeWRiiAlcyDnmoTmhI/lpJbnirbmgIEiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgZHJ5LXJ1biIKK21zZ3N0ciAi5Yqp5omLICVzIOS4jeaUr+aMgSBkcnktcnVuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIgorbXNnc3RyICLliqnmiYsgJXMg5LiN5pSv5oyBIC0tc2lnbmVkIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkPWlmLWFza2VkIgorbXNnc3RyICLliqnmiYsgJXMg5LiN5pSv5oyBIC0tc2lnbmVkPWlmLWFza2VkIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIgorbXNnc3RyICLliqnmiYsgJXMg5LiN5pSv5oyBIC0tYXRvbWljIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdwdXNoLW9wdGlvbiciCittc2dzdHIgIuWKqeaJiyAlcyDkuI3mlK/mjIEgJ3B1c2gtb3B0aW9uJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk2NQorbXNnaWQgInJlbW90ZS1oZWxwZXIgZG9lc24ndCBzdXBwb3J0IHB1c2g7IHJlZnNwZWMgbmVlZGVkIgorbXNnc3RyICJyZW1vdGUtaGVwZXIg5LiN5pSv5oyBIHB1c2jvvIzpnIDopoHlvJXnlKjooajovr7lvI8iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ2ZvcmNlJyIKK21zZ3N0ciAi5Yqp5omLICVzIOS4jeaUr+aMgSAnZm9yY2UnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAxNworbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIKK21zZ3N0ciAi5peg5rOV5omn6KGMIGZhc3QtZXhwb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAyMgorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1leHBvcnQiCittc2dzdHIgIuaJp+ihjCBmYXN0LWV4cG9ydCDml7blh7rplJkiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyByZWZzIGluIGNvbW1vbiBhbmQgbm9uZSBzcGVjaWZpZWQ7IGRvaW5nIG5vdGhpbmcuXG4iCisiUGVyaGFwcyB5b3Ugc2hvdWxkIHNwZWNpZnkgYSBicmFuY2ggc3VjaCBhcyAnbWFzdGVyJy5cbiIKK21zZ3N0ciAiIgorIuayoeacieWFseWQjOeahOW8leeUqOW5tuS4lOS5n+ayoeacieaMh+Wumu+8jOS7gOS5iOS5n+S4jeS8muWBmuOAglxuIgorIuWPr+iDveaCqOW6lOivpeaMh+WumuS4gOS4quWIhuaUr+WmgiAnbWFzdGVyJ+OAglxuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgcmVzcG9uc2UgaW4gcmVmIGxpc3Q6ICVzIgorbXNnc3RyICLlvJXnlKjliJfooajkuK3moLzlvI/plJnor6/nmoTlk43lupTvvJolcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCglcykgZmFpbGVkIgorbXNnc3RyICLor7vlj5bvvIglc++8ieWksei0pSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGUoJXMpIGZhaWxlZCIKK21zZ3N0ciAi5YaZ77yIJXPvvInlpLHotKUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQiCittc2dzdHIgIiVzIOe6v+eoi+Wksei0pSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGhyZWFkIGZhaWxlZCB0byBqb2luOiAlcyIKK21zZ3N0ciAiJXMg57q/56iL562J5b6F5aSx6LSl77yaJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzcxIHRyYW5zcG9ydC1oZWxwZXIuYzoxMzc1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhOiAlcyIKK21zZ3N0ciAi5LiN6IO95ZCv5Yqo57q/56iL5p2l5ou36LSd5pWw5o2u77yaJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIHRvIHdhaXQiCittc2dzdHIgIiVzIOi/m+eoi+etieW+heWksei0pSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiVzIOi/m+eoi+Wksei0pSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MzQgdHJhbnNwb3J0LWhlbHBlci5jOjE0NDMKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIKK21zZ3N0ciAi5LiN6IO95ZCv5Yqo57q/56iL5p2l5ou36LSd5pWw5o2uIgorCisjOiB0cmVlLXdhbGsuYzozMgorbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAi5aSq55+t55qE5qCR5a+56LGhIgorCisjOiB0cmVlLXdhbGsuYzozOAorbXNnaWQgIm1hbGZvcm1lZCBtb2RlIGluIHRyZWUgZW50cnkiCittc2dzdHIgIuagkeWvueixoeS4reeahOadoeebruaooeW8j+mUmeivryIKKworIzogdHJlZS13YWxrLmM6NDIKK21zZ2lkICJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICLmoJHlr7nosaHmnaHnm67kuK3nqbrnmoTmlofku7blkI0iCisKKyM6IHRyZWUtd2Fsay5jOjExNworbXNnaWQgInRvby1zaG9ydCB0cmVlIGZpbGUiCittc2dzdHIgIuWkquefreeahOagkeaWh+S7tiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIuaCqOWvueS4i+WIl+aWh+S7tueahOacrOWcsOS/ruaUueWwhuiiq+ajgOWHuuaTjeS9nOimhueblu+8mlxuIgorIiUlc+ivt+WcqOWIh+aNouWIhuaUr+WJjeaPkOS6pOaIlui0ruiXj+aCqOeahOS/ruaUueOAgiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLmgqjlr7nkuIvliJfmlofku7bnmoTmnKzlnLDkv67mlLnlsIbooqvmo4Dlh7rmk43kvZzopobnm5bvvJpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIuaCqOWvueS4i+WIl+aWh+S7tueahOacrOWcsOS/ruaUueWwhuiiq+WQiOW5tuaTjeS9nOimhueblu+8mlxuIgorIiUlc+ivt+WcqOWQiOW5tuWJjeaPkOS6pOaIlui0ruiXj+aCqOeahOS/ruaUueOAgiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLmgqjlr7nkuIvliJfmlofku7bnmoTmnKzlnLDkv67mlLnlsIbooqvlkIjlubbmk43kvZzopobnm5bvvJpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIuaCqOWvueS4i+WIl+aWh+S7tueahOacrOWcsOS/ruaUueWwhuiiqyAlcyDopobnm5bvvJpcbiIKKyIlJXPor7flnKggJXMg5LmL5YmN5o+Q5Lqk5oiW6LSu6JeP5oKo55qE5L+u5pS544CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuaCqOWvueS4i+WIl+aWh+S7tueahOacrOWcsOS/ruaUueWwhuiiqyAlcyDopobnm5bvvJpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVtOlxuIgorIiVzIgorbXNnc3RyICIiCisi5pu05paw5aaC5LiL55uu5b2V5bCG5Lya5Lii5aSx5YW25Lit5pyq6Lef6Liq55qE5paH5Lu277yaXG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisi5bel5L2c5Yy65Lit5LiL5YiX5pyq6Lef6Liq55qE5paH5Lu25bCG5Lya5Zug5Li65qOA5Ye65pON5L2c6ICM6KKr5Yig6Zmk77yaXG4iCisiJSVz6K+35Zyo5YiH5o2i5YiG5pSv5LmL5YmN56e75Yqo5oiW5Yig6Zmk44CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuW3peS9nOWMuuS4reS4i+WIl+acqui3n+i4queahOaWh+S7tuWwhuS8muWboOS4uuajgOWHuuaTjeS9nOiAjOiiq+WIoOmZpO+8mlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIuW3peS9nOWMuuS4reS4i+WIl+acqui3n+i4queahOaWh+S7tuWwhuS8muWboOS4uuWQiOW5tuaTjeS9nOiAjOiiq+WIoOmZpO+8mlxuIgorIiUlc+ivt+WcqOWQiOW5tuWJjeenu+WKqOaIluWIoOmZpOOAgiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLlt6XkvZzljLrkuK3kuIvliJfmnKrot5/ouKrnmoTmlofku7blsIbkvJrlm6DkuLrlkIjlubbmk43kvZzogIzooqvliKDpmaTvvJpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyLlt6XkvZzljLrkuK3kuIvliJfmnKrot5/ouKrnmoTmlofku7blsIbkvJrlm6DkuLogJXMg5pON5L2c6ICM6KKr5Yig6Zmk77yaXG4iCisiJSVz6K+35ZyoICVzIOWJjeenu+WKqOaIluWIoOmZpOOAgiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLlt6XkvZzljLrkuK3kuIvliJfmnKrot5/ouKrnmoTmlofku7blsIbkvJrlm6DkuLogJXMg5pON5L2c6ICM6KKr5Yig6Zmk77yaXG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisi5bel5L2c5Yy65Lit5LiL5YiX5pyq6Lef6Liq55qE5paH5Lu25bCG5Lya5Zug5Li65qOA5Ye65pON5L2c6ICM6KKr6KaG55uW77yaXG4iCisiJSVz6K+35Zyo5YiH5o2i5YiG5pSv5YmN56e75Yqo5oiW5Yig6Zmk44CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisi5bel5L2c5Yy65Lit5LiL5YiX5pyq6Lef6Liq55qE5paH5Lu25bCG5Lya5Zug5Li65qOA5Ye65pON5L2c6ICM6KKr6KaG55uW77yaXG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIuW3peS9nOWMuuS4reS4i+WIl+acqui3n+i4queahOaWh+S7tuWwhuS8muWboOS4uuWQiOW5tuaTjeS9nOiAjOiiq+imhueblu+8mlxuIgorIiUlc+ivt+WcqOWQiOW5tuWJjeenu+WKqOaIluWIoOmZpOOAgiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisi5bel5L2c5Yy65Lit5LiL5YiX5pyq6Lef6Liq55qE5paH5Lu25bCG5Lya5Zug5Li65ZCI5bm25pON5L2c6ICM6KKr6KaG55uW77yaXG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIuW3peS9nOWMuuS4reS4i+WIl+acqui3n+i4queahOaWh+S7tuWwhuS8muWboOS4uiAlcyDmk43kvZzogIzooqvopobnm5bvvJpcbiIKKyIlJXPor7flnKggJXMg5YmN56e75Yqo5oiW5Yig6Zmk44CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLlt6XkvZzljLrkuK3kuIvliJfmnKrot5/ouKrnmoTmlofku7blsIbkvJrlm6DkuLogJXMg5pON5L2c6ICM6KKr6KaG55uW77yaXG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50cnkgJyVzJyBvdmVybGFwcyB3aXRoICclcycuICBDYW5ub3QgYmluZC4iCittc2dzdHIgIuadoeebriAnJXMnIOWSjCAnJXMnIOmHjeWPoOOAguaXoOazleWQiOW5tuOAgiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHNwYXJzZSBjaGVja291dDogdGhlIGZvbGxvd2luZyBlbnRyaWVzIGFyZSBub3QgdXAgdG8gZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuaXoOazleabtOaWsOeogOeWj+ajgOWHuu+8muWmguS4i+adoeebruS4jeaYr+acgOaWsO+8mlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisi5bel5L2c5Yy65Lit5LiL5YiX5paH5Lu25bCG6KKr56iA55aP5qOA5Ye65pu05paw5omA6KaG55uW77yaXG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuW3peS9nOWMuuS4reS4i+WIl+aWh+S7tuWwhuiiq+eogOeWj+ajgOWHuuabtOaWsOaJgOWIoOmZpO+8mlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3VibW9kdWxlOlxuIgorIiVzIgorbXNnc3RyICIiCisi5peg5rOV5pu05paw5a2Q5qih57uE77yaXG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZ1xuIgorbXNnc3RyICLmraPlnKjnu4jmraJcbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MzE3Cittc2dpZCAiVXBkYXRpbmcgZmlsZXMiCittc2dzdHIgIuato+WcqOabtOaWsOaWh+S7tiIKKworIzogdW5wYWNrLXRyZWVzLmM6MzQ5Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgcGF0aHMgaGF2ZSBjb2xsaWRlZCAoZS5nLiBjYXNlLXNlbnNpdGl2ZSBwYXRoc1xuIgorIm9uIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtKSBhbmQgb25seSBvbmUgZnJvbSB0aGUgc2FtZVxuIgorImNvbGxpZGluZyBncm91cCBpcyBpbiB0aGUgd29ya2luZyB0cmVlOlxuIgorbXNnc3RyICIiCisi5Lul5LiL6Lev5b6E5Y+R55Sf56Kw5pKe77yI5aaC77ya5Zyo5LiN5Yy65YiG5aSn5bCP5YaZ55qE5paH5Lu257O757uf5LiK55qE5Yy65YiG5aSn5bCP5YaZ55qE6Lev5b6E77yJ77yMXG4iCisi5bm25LiU56Kw5pKe57uE5Lit5Y+q5pyJ5LiA5Liq5paH5Lu25a2Y5Zyo5bel5L2c5Yy65Lit77yaXG4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0NDUKK21zZ2lkICJVcGRhdGluZyBpbmRleCBmbGFncyIKK21zZ3N0ciAi5q2j5Zyo5pu05paw57Si5byV5qCH5b+XIgorCisjOiB1cmxtYXRjaC5jOjE2MworbXNnaWQgImludmFsaWQgVVJMIHNjaGVtZSBuYW1lIG9yIG1pc3NpbmcgJzovLycgc3VmZml4IgorbXNnc3RyICLml6DmlYjnmoQgVVJMIOaWueahiOWQjeensOaIluS4ouWksSAnOi8vJyDlkI7nvIAiCisKKyM6IHVybG1hdGNoLmM6MTg3IHVybG1hdGNoLmM6MzQ2IHVybG1hdGNoLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJVhYIGVzY2FwZSBzZXF1ZW5jZSIKK21zZ3N0ciAi5peg5pWI55qEICVYWCDovazkuYnluo/liJciCisKKyM6IHVybG1hdGNoLmM6MjE1Cittc2dpZCAibWlzc2luZyBob3N0IGFuZCBzY2hlbWUgaXMgbm90ICdmaWxlOiciCittc2dzdHIgIue8uuWkseS4u+acuuWQjeS4lCBVUkwg5pa55qGI5LiN5pivICdmaWxlOiciCisKKyM6IHVybG1hdGNoLmM6MjMyCittc2dpZCAiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIKK21zZ3N0ciAi5LiA5LiqICdmaWxlOicgVVJMIOS4jeW6lOivpeWMheWQq+err+WPo+WPtyIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICLkuLvmnLrlkI3kuK3ljIXlkKvml6DmlYjnmoTlrZfnrKYiCisKKyM6IHVybG1hdGNoLmM6MjkyIHVybG1hdGNoLmM6MzAzCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAi5peg5pWI55qE56uv5Y+j5Y+3IgorCisjOiB1cmxtYXRjaC5jOjM3MQorbXNnaWQgImludmFsaWQgJy4uJyBwYXRoIHNlZ21lbnQiCittc2dzdHIgIuaXoOaViOeahCAnLi4nIOi3r+W+hOeJh+autSIKKworIzogd2Fsa2VyLmM6MTcwCittc2dpZCAiRmV0Y2hpbmcgb2JqZWN0cyIKK21zZ3N0ciAi5q2j5Zyo6I635Y+W5a+56LGhIgorCisjOiB3b3JrdHJlZS5jOjI1OSBidWlsdGluL2FtLmM6MjA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICLor7vlj5YgJyVzJyDlpLHotKUiCisKKyM6IHdvcmt0cmVlLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXQgbWFpbiB3b3JraW5nIHRyZWUgaXMgbm90IHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSIKK21zZ3N0ciAi5Zyo5Li75bel5L2c5Yy655qEICclcycg5LiN5piv5LuT5bqT55uu5b2VIgorCisjOiB3b3JrdHJlZS5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbGUgZG9lcyBub3QgY29udGFpbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB3b3JraW5nIHRyZWUgbG9jYXRpb24iCittc2dzdHIgIuaWh+S7tiAnJXMnIOS4jeWMheWQq+W3peS9nOWMuueahOe7neWvuei3r+W+hCIKKworIzogd29ya3RyZWUuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiJyVzJyDkuI3lrZjlnKgiCisKKyM6IHdvcmt0cmVlLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgLmdpdCBmaWxlLCBlcnJvciBjb2RlICVkIgorbXNnc3RyICInJXMnIOS4jeaYr+S4gOS4qiAuZ2l0IOaWh+S7tu+8jOmUmeivr+eggSAlZCIKKworIzogd29ya3RyZWUuYzozNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCBiYWNrIHRvICclcyciCittc2dzdHIgIiclcycg5rKh5pyJ5oyH5Zue5YiwICclcyciCisKKyM6IHdyYXBwZXIuYzoxODYgd3JhcHBlci5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICLml6Dms5XmiZPlvIAgJyVzJyDov5vooYzor7vlhpkiCisKKyM6IHdyYXBwZXIuYzozODcgd3JhcHBlci5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyciCittc2dzdHIgIuS4jeiDveiuv+mXriAnJXMnIgorCisjOiB3cmFwcGVyLmM6NTk2Cittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLkuI3og73ojrflj5blvZPliY3lt6XkvZznm67lvZUiCisKKyM6IHd0LXN0YXR1cy5jOjE1OAorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAi5pyq5ZCI5bm255qE6Lev5b6E77yaIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE4NyB3dC1zdGF0dXMuYzoyMTkKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA85paH5Lu2Pi4uLlwiIOS7peWPlua2iOaaguWtmO+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxOTAgd3Qtc3RhdHVzLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDzmlofku7Y+Li4uXCIg5Lul5Y+W5raI5pqC5a2Y77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE5MyB3dC1zdGF0dXMuYzoyMjUKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHJtIC0tY2FjaGVkIDzmlofku7Y+Li4uXCIg5Lul5Y+W5raI5pqC5a2Y77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE5NworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgYWRkIDzmlofku7Y+Li4uXCIg5qCH6K6w6Kej5Yaz5pa55qGI77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE5OSB3dC1zdGF0dXMuYzoyMDMKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAg77yI6YWM5oOF5L2/55SoIFwiZ2l0IGFkZC9ybSA85paH5Lu2Pi4uLlwiIOagh+iusOino+WGs+aWueahiO+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoyMDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgcm0gPOaWh+S7tj4uLi5cIiDmoIforrDop6PlhrPmlrnmoYjvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjIxMSB3dC1zdGF0dXMuYzoxMDc0Cittc2dpZCAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICLopoHmj5DkuqTnmoTlj5jmm7TvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjIzNCB3dC1zdGF0dXMuYzoxMDgzCittc2dpZCAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IgorbXNnc3RyICLlsJrmnKrmmoLlrZjku6XlpIfmj5DkuqTnmoTlj5jmm7TvvJoiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MjM4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGFkZCA85paH5Lu2Pi4uLlwiIOabtOaWsOimgeaPkOS6pOeahOWGheWuue+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoyNDAKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgYWRkL3JtIDzmlofku7Y+Li4uXCIg5pu05paw6KaB5o+Q5Lqk55qE5YaF5a6577yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjI0MQorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmVzdG9yZSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCByZXN0b3JlIDzmlofku7Y+Li4uXCIg5Lii5byD5bel5L2c5Yy655qE5pS55Yqo77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjI0MworbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiICDvvIjmj5DkuqTmiJbkuKLlvIPlrZDmqKHnu4TkuK3mnKrot5/ouKrmiJbkv67mlLnnmoTlhoXlrrnvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCAlcyA85paH5Lu2Pi4uLlwiIOS7peWMheWQq+imgeaPkOS6pOeahOWGheWuue+8iSIKKworIzogd3Qtc3RhdHVzLmM6MjY4Cittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAi5Y+M5pa55Yig6Zmk77yaIgorCisjOiB3dC1zdGF0dXMuYzoyNzAKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgIueUseaIkeS7rOa3u+WKoO+8miIKKworIzogd3Qtc3RhdHVzLmM6MjcyCittc2dpZCAiZGVsZXRlZCBieSB0aGVtOiIKK21zZ3N0ciAi55Sx5LuW5Lus5Yig6Zmk77yaIgorCisjOiB3dC1zdGF0dXMuYzoyNzQKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAi55Sx5LuW5Lus5re75Yqg77yaIgorCisjOiB3dC1zdGF0dXMuYzoyNzYKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAi55Sx5oiR5Lus5Yig6Zmk77yaIgorCisjOiB3dC1zdGF0dXMuYzoyNzgKK21zZ2lkICJib3RoIGFkZGVkOiIKK21zZ3N0ciAi5Y+M5pa55re75Yqg77yaIgorCisjOiB3dC1zdGF0dXMuYzoyODAKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAi5Y+M5pa55L+u5pS577yaIgorCisjOiB3dC1zdGF0dXMuYzoyOTAKK21zZ2lkICJuZXcgZmlsZToiCittc2dzdHIgIuaWsOaWh+S7tu+8miIKKworIzogd3Qtc3RhdHVzLmM6MjkyCittc2dpZCAiY29waWVkOiIKK21zZ3N0ciAi5ou36LSd77yaIgorCisjOiB3dC1zdGF0dXMuYzoyOTQKK21zZ2lkICJkZWxldGVkOiIKK21zZ3N0ciAi5Yig6Zmk77yaIgorCisjOiB3dC1zdGF0dXMuYzoyOTYKK21zZ2lkICJtb2RpZmllZDoiCittc2dzdHIgIuS/ruaUue+8miIKKworIzogd3Qtc3RhdHVzLmM6Mjk4Cittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgIumHjeWRveWQje+8miIKKworIzogd3Qtc3RhdHVzLmM6MzAwCittc2dpZCAidHlwZWNoYW5nZToiCittc2dzdHIgIuexu+Wei+WPmOabtO+8miIKKworIzogd3Qtc3RhdHVzLmM6MzAyCittc2dpZCAidW5rbm93bjoiCittc2dzdHIgIuacquefpe+8miIKKworIzogd3Qtc3RhdHVzLmM6MzA0Cittc2dpZCAidW5tZXJnZWQ6IgorbXNnc3RyICLmnKrlkIjlubbvvJoiCisKKyMgIOivkeiAhe+8muacq+WwvuS4pOS4quWtl+iKguWPr+iDveiiq+WIoOWHj++8jOWmguaenOe/u+ivkeS4uuS4reaWh+agh+eCueS8muWHuueOsOWNiuS4quaxieWtlworIzogd3Qtc3RhdHVzLmM6Mzg0Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAi5paw5o+Q5LqkLCAiCisKKyMgIOivkeiAhe+8muacq+WwvuS4pOS4quWtl+iKguWPr+iDveiiq+WIoOWHj++8jOWmguaenOe/u+ivkeS4uuS4reaWh+agh+eCueS8muWHuueOsOWNiuS4quaxieWtlworIzogd3Qtc3RhdHVzLmM6Mzg2Cittc2dpZCAibW9kaWZpZWQgY29udGVudCwgIgorbXNnc3RyICLkv67mlLnnmoTlhoXlrrksICIKKworIyAg6K+R6ICF77ya5pyr5bC+5Lik5Liq5a2X6IqC5Y+v6IO96KKr5Yig5YeP77yM5aaC5p6c57+76K+R5Li65Lit5paH5qCH54K55Lya5Ye6546w5Y2K5Liq5rGJ5a2XCisjOiB3dC1zdGF0dXMuYzozODgKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICLmnKrot5/ouKrnmoTlhoXlrrksICIKKworIzogd3Qtc3RhdHVzLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJpZXMiCittc2dzdHJbMF0gIuaCqOeahOi0ruiXj+WMuuW9k+WJjeaciSAlZCDmnaHorrDlvZUiCittc2dzdHJbMV0gIuaCqOeahOi0ruiXj+WMuuW9k+WJjeaciSAlZCDmnaHorrDlvZUiCisKKyM6IHd0LXN0YXR1cy5jOjkzOAorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICLlrZDmqKHnu4Tlt7Lkv67mlLnkvYblsJrmnKrmm7TmlrDvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjk0MAorbXNnaWQgIlN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIuimgeaPkOS6pOeahOWtkOaooee7hOWPmOabtO+8miIKKworIzogd3Qtc3RhdHVzLmM6MTAyMgorbXNnaWQgIiIKKyJEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS5cbiIKKyJFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4iCittc2dzdHIgIiIKKyLkuI3opoHmlLnliqjmiJbliKDpmaTkuIrpnaLnmoTkuIDooYzjgIJcbiIKKyLlhbbkuIvmiYDmnInlhoXlrrnpg73lsIbooqvlv73nlaXjgIIiCisKKyM6IHd0LXN0YXR1cy5jOjExMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGNvbXB1dGUgdGhlIGJyYW5jaCBhaGVhZC9iZWhpbmQgdmFsdWVzLlxuIgorIllvdSBjYW4gdXNlICctLW5vLWFoZWFkLWJlaGluZCcgdG8gYXZvaWQgdGhpcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuiKseS6hiAlLjJmIOenkuaJjeiuoeeul+WHuuWIhuaUr+eahOmihuWFiC/okL3lkI7ojIPlm7TjgIJcbiIKKyLkuLrpgb/lhY3vvIzmgqjlj6/ku6Xkvb/nlKggJy0tbm8tYWhlYWQtYmVoaW5kJ+OAglxuIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ0Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICLmgqjmnInlsJrmnKrlkIjlubbnmoTot6/lvoTjgIIiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTE0NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiAg77yI6Kej5Yaz5Yay56qB5bm26L+Q6KGMIFwiZ2l0IGNvbW1pdFwi77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjExNDkKK21zZ2lkICIgICh1c2UgXCJnaXQgbWVyZ2UgLS1hYm9ydFwiIHRvIGFib3J0IHRoZSBtZXJnZSkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiDnu4jmraLlkIjlubbvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjExNTMKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgorbXNnc3RyICLmiYDmnInlhrLnqoHlt7Lop6PlhrPkvYbmgqjku43lpITkuo7lkIjlubbkuK3jgIIiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTE1NgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGNvbW1pdFwiIOe7k+adn+WQiOW5tu+8iSIKKworIzogd3Qtc3RhdHVzLmM6MTE2NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAi5oKo5q2j5aSE5LqOIGFtIOaTjeS9nOi/h+eoi+S4reOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTE2OAorbXNnaWQgIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAi5b2T5YmN55qE6KGl5LiB5Li656m644CCIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjExNzIKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIO+8iOino+WGs+WGsueqge+8jOeEtuWQjui/kOihjCBcImdpdCBhbSAtLWNvbnRpbnVlXCLvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTE3NAorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBhbSAtLXNraXBcIiDot7Pov4fmraTooaXkuIHvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTE3NgorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgYW0gLS1hYm9ydFwiIOaBouWkjeWOn+acieWIhuaUr++8iSIKKworIzogd3Qtc3RhdHVzLmM6MTMwOQorbXNnaWQgImdpdC1yZWJhc2UtdG9kbyBpcyBtaXNzaW5nLiIKK21zZ3N0ciAiZ2l0LXJlYmFzZS10b2RvIOS4ouWkseOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTMxMQorbXNnaWQgIk5vIGNvbW1hbmRzIGRvbmUuIgorbXNnc3RyICLmsqHmnInlkb3ku6TooqvmiafooYzjgIIiCisKKyM6IHd0LXN0YXR1cy5jOjEzMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGFzdCBjb21tYW5kIGRvbmUgKCVkIGNvbW1hbmQgZG9uZSk6IgorbXNnaWRfcGx1cmFsICJMYXN0IGNvbW1hbmRzIGRvbmUgKCVkIGNvbW1hbmRzIGRvbmUpOiIKK21zZ3N0clswXSAi5pyA5ZCO5LiA5p2h5ZG95Luk5bey5a6M5oiQ77yIJWQg5p2h5ZG95Luk6KKr5omn6KGM77yJ77yaIgorbXNnc3RyWzFdICLmnIDlkI7nmoTlkb3ku6Tlt7LlrozmiJDvvIglZCDmnaHlkb3ku6TooqvmiafooYzvvInvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAoc2VlIG1vcmUgaW4gZmlsZSAlcykiCittc2dzdHIgIiAg77yI5pu05aSa5Y+C6KeB5paH5Lu2ICVz77yJIgorCisjOiB3dC1zdGF0dXMuYzoxMzMwCittc2dpZCAiTm8gY29tbWFuZHMgcmVtYWluaW5nLiIKK21zZ3N0ciAi5pyq5Ymp5LiL5Lu75L2V5ZG95Luk44CCIgorCisjOiB3dC1zdGF0dXMuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5leHQgY29tbWFuZCB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmQpOiIKK21zZ2lkX3BsdXJhbCAiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiCittc2dzdHJbMF0gIuaOpeS4i+adpeimgeaJp+ihjOeahOWRveS7pO+8iOWJqeS9mSAlZCDmnaHlkb3ku6TvvInvvJoiCittc2dzdHJbMV0gIuaOpeS4i+adpeimgeaJp+ihjOeahOWRveS7pO+8iOWJqeS9mSAlZCDmnaHlkb3ku6TvvInvvJoiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTM0MQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiB0byB2aWV3IGFuZCBlZGl0KSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIg5p2l5p+l55yL5ZKM57yW6L6R77yJIgorCisjOiB3dC1zdGF0dXMuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICLmgqjlnKjmiafooYzlsIbliIbmlK8gJyVzJyDlj5jln7rliLAgJyVzJyDnmoTmk43kvZzjgIIiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgIuaCqOWcqOaJp+ihjOWPmOWfuuaTjeS9nOOAgiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxMzcxCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAg77yI6Kej5Yaz5Yay56qB77yM54S25ZCO6L+Q6KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTM3MworbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgcmViYXNlIC0tc2tpcFwiIOi3s+i/h+atpOihpeS4ge+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxMzc1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCByZWJhc2UgLS1hYm9ydFwiIOS7peajgOWHuuWOn+acieWIhuaUr++8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxMzgyCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIO+8iOaJgOacieWGsueqgeW3suino+WGs++8mui/kOihjCBcImdpdCByZWJhc2UgLS1jb250aW51ZVwi77yJIgorCisjOiB3dC1zdGF0dXMuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIuaCqOWcqOaJp+ihjOWwhuWIhuaUryAnJXMnIOWPmOWfuuWIsCAnJXMnIOeahOaTjeS9nOaXtuaLhuWIhuaPkOS6pOOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTM5MQorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICLmgqjlnKjmiafooYzlj5jln7rmk43kvZzml7bmi4bliIbmj5DkuqTjgIIiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTM5NAorbXNnaWQgIiAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIO+8iOS4gOaXpuaCqOW3peS9nOebruW9leaPkOS6pOW5suWHgOWQju+8jOi/kOihjCBcImdpdCByZWJhc2UgLS1jb250aW51ZVwi77yJIgorCisjOiB3dC1zdGF0dXMuYzoxMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIuaCqOWcqOaJp+ihjOWwhuWIhuaUryAnJXMnIOWPmOWfuuWIsCAnJXMnIOeahOaTjeS9nOaXtue8lui+keaPkOS6pOOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTQwMworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAi5oKo5Zyo5omn6KGM5Y+Y5Z+65pON5L2c5pe257yW6L6R5o+Q5Lqk44CCIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0MDYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBjb21taXQgLS1hbWVuZFwiIOS/ruihpeW9k+WJjeaPkOS6pO+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxNDA4Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIgIO+8iOW9k+aCqOWvueaCqOeahOS/ruaUuea7oeaEj+WQjuaJp+ihjCBcImdpdCByZWJhc2UgLS1jb250aW51ZVwi77yJIgorCisjOiB3dC1zdGF0dXMuYzoxNDE5Cittc2dpZCAiQ2hlcnJ5LXBpY2sgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAi5ouj6YCJ5pON5L2c5q2j5Zyo6L+b6KGM5Lit44CCIgorCisjOiB3dC1zdGF0dXMuYzoxNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIuaCqOWcqOaJp+ihjOaLo+mAieaPkOS6pCAlcyDnmoTmk43kvZzjgIIiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTQyOQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIO+8iOino+WGs+WGsueqgeW5tui/kOihjCBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCLvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTQzMgorbXNnaWQgIiAgKHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIO+8iOaJp+ihjCBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIg5Lul57un57ut77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0MzUKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICDvvIjmiYDmnInlhrLnqoHlt7Lop6PlhrPvvJrov5DooYwgXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwi77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0MzcKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCIg6Lez6L+H5q2k6KGl5LiB77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0MzkKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIOS7peWPlua2iOaLo+mAieaTjeS9nO+8iSIKKworIzogd3Qtc3RhdHVzLmM6MTQ0OQorbXNnaWQgIlJldmVydCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICLov5jljp/mk43kvZzmraPlnKjooYzkuK3jgIIiCisKKyM6IHd0LXN0YXR1cy5jOjE0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIuaCqOWcqOaJp+ihjOWPjei9rOaPkOS6pCAlcyDnmoTmk43kvZzjgIIiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTQ1OAorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICDvvIjop6PlhrPlhrLnqoHlubbmiafooYwgXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIu+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxNDYxCittc2dpZCAiICAocnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIO+8iOaJp+ihjCBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIOS7pee7p+e7re+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxNDY0Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIO+8iOaJgOacieWGsueqgeW3suino+WGs++8muaJp+ihjCBcImdpdCByZXZlcnQgLS1jb250aW51ZVwi77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0NjYKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHJldmVydCAtLXNraXBcIiDot7Pov4fmraTooaXkuIHvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTQ2OAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHJldmVydCAtLWFib3J0XCIg5Lul5Y+W5raI5Y+N6L2s5o+Q5Lqk5pON5L2c77yJIgorCisjOiB3dC1zdGF0dXMuYzoxNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAi5oKo5Zyo5omn6KGM5LuO5YiG5pSvICclcycg5byA5aeL55qE5LqM5YiG5p+l5om+5pON5L2c44CCIgorCisjOiB3dC1zdGF0dXMuYzoxNDgyCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLiIKK21zZ3N0ciAi5oKo5Zyo5omn6KGM5LqM5YiG5p+l5om+5pON5L2c44CCIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0ODUKK21zZ2lkICIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGJpc2VjdCByZXNldFwiIOS7peWbnuWIsOWOn+acieWIhuaUr++8iSIKKworIzogd3Qtc3RhdHVzLmM6MTY5NAorbXNnaWQgIk9uIGJyYW5jaCAiCittc2dzdHIgIuS9jeS6juWIhuaUryAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDEKK21zZ2lkICJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICLkuqTkupLlvI/lj5jln7rmk43kvZzmraPlnKjov5vooYzkuK3vvJvoh7MgIgorCisjOiB3dC1zdGF0dXMuYzoxNzAzCittc2dpZCAicmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAi5Y+Y5Z+65pON5L2c5q2j5Zyo6L+b6KGM5Lit77yb6IezICIKKworIzogd3Qtc3RhdHVzLmM6MTcxMworbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIuW9k+WJjeS4jeWcqOS7u+S9leWIhuaUr+S4iuOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTczMAorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICLliJ3lp4vmj5DkuqQiCisKKyM6IHd0LXN0YXR1cy5jOjE3MzEKK21zZ2lkICJObyBjb21taXRzIHlldCIKK21zZ3N0ciAi5bCa5peg5o+Q5LqkIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ1Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLmnKrot5/ouKrnmoTmlofku7YiCisKKyM6IHd0LXN0YXR1cy5jOjE3NDcKK21zZ2lkICJJZ25vcmVkIGZpbGVzIgorbXNnc3RyICLlv73nlaXnmoTmlofku7YiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICdzdGF0dXMgLXVubydcbiIKKyJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkXG4iCisibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKK21zZ3N0ciAiIgorIuiAl+i0ueS6hiAlLjJmIOenkuS7peaemuS4vuacqui3n+i4queahOaWh+S7tuOAgidzdGF0dXMgLXVubycg5Lmf6K646IO95o+Q6auY6YCf5bqm77yMXG4iCisi5L2G5oKo6ZyA6KaB5bCP5b+D5LiN6KaB5b+Y5LqG5re75Yqg5paw5paH5Lu277yI5Y+C6KeBICdnaXQgaGVscCBzdGF0dXMn77yJ44CCIgorCisjOiB3dC1zdGF0dXMuYzoxNzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIuacqui3n+i4queahOaWh+S7tuayoeacieWIl+WHuiVzIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE3NTkKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICLvvIjkvb/nlKggLXUg5Y+C5pWw5pi+56S65pyq6Lef6Liq55qE5paH5Lu277yJIgorCisjOiB3dC1zdGF0dXMuYzoxNzY1Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAi5rKh5pyJ5L+u5pS5IgorCisjOiB3dC1zdGF0dXMuYzoxNzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICLkv67mlLnlsJrmnKrliqDlhaXmj5DkuqTvvIjkvb/nlKggXCJnaXQgYWRkXCIg5ZKML+aIliBcImdpdCBjb21taXQgLWFcIu+8iVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgIuS/ruaUueWwmuacquWKoOWFpeaPkOS6pFxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIuaPkOS6pOS4uuepuu+8jOS9huaYr+WtmOWcqOWwmuacqui3n+i4queahOaWh+S7tu+8iOS9v+eUqCBcImdpdCBhZGRcIiDlu7rnq4vot5/ouKrvvIlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAi5o+Q5Lqk5Li656m677yM5L2G5piv5a2Y5Zyo5bCa5pyq6Lef6Liq55qE5paH5Lu2XG4iCisKKyMgIOivkeiAhe+8muS4reaWh+Wtl+espuS4suaLvOaOpe+8jOWPr+WIoOmZpOWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAi5peg5paH5Lu26KaB5o+Q5Lqk77yI5Yib5bu6L+aLt+i0neaWh+S7tuW5tuS9v+eUqCBcImdpdCBhZGRcIiDlu7rnq4vot5/ouKrvvIlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc4NSB3dC1zdGF0dXMuYzoxNzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0XG4iCittc2dzdHIgIuaXoOaWh+S7tuimgeaPkOS6pFxuIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAi5peg5paH5Lu26KaB5o+Q5Lqk77yI5L2/55SoIC11IOaYvuekuuacqui3n+i4queahOaWh+S7tu+8iVxuIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhblxuIgorbXNnc3RyICLml6Dmlofku7bopoHmj5DkuqTvvIzlubLlh4DnmoTlt6XkvZzljLpcbiIKKworIzogd3Qtc3RhdHVzLmM6MTkwNQorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IG9uICIKK21zZ3N0ciAi5bCa5peg5o+Q5Lqk5ZyoICIKKworIzogd3Qtc3RhdHVzLmM6MTkwOQorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUTvvIjpnZ7liIbmlK/vvIkiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDAKK21zZ2lkICJkaWZmZXJlbnQiCittc2dzdHIgIuS4jeWQjCIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5Y+l5bC+56m65qC8CisjOiB3dC1zdGF0dXMuYzoxOTQyIHd0LXN0YXR1cy5jOjE5NTAKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICLokL3lkI4gIgorCisjOiB3dC1zdGF0dXMuYzoxOTQ1IHd0LXN0YXR1cy5jOjE5NDgKK21zZ2lkICJhaGVhZCAiCittc2dzdHIgIumihuWFiCAiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgYWN0aW9uIGlzIGUuZy4gInB1bGwgd2l0aCByZWJhc2UiCisjOiB3dC1zdGF0dXMuYzoyNDcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIuS4jeiDvSVz77ya5oKo5pyJ5pyq5pqC5a2Y55qE5Y+Y5pu044CCIgorCisjOiB3dC1zdGF0dXMuYzoyNDc2Cittc2dpZCAiYWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLlj6blpJbvvIzmgqjnmoTntKLlvJXkuK3ljIXlkKvmnKrmj5DkuqTnmoTlj5jmm7TjgIIiCisKKyM6IHd0LXN0YXR1cy5jOjI0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLkuI3og70lc++8muaCqOeahOe0ouW8leS4reWMheWQq+acquaPkOS6pOeahOWPmOabtOOAgiIKKworIzogY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jOjU4IGJ1aWx0aW4vY2xvbmUuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICLliKDpmaQgJyVzJyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbPOmAiemhuT5dIFstLV0gPOi3r+W+hOinhOagvD4uLi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAi5oSP5aSW55qE5beu5byC54q25oCBICVjIgorCisjOiBidWlsdGluL2FkZC5jOjkzIGJ1aWx0aW4vY29tbWl0LmM6Mjg4Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLmm7TmlrDmlofku7blpLHotKUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgIuWIoOmZpCAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc4Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIuWIt+aWsOe0ouW8leS5i+WQjuWwmuacquiiq+aaguWtmOeahOWPmOabtO+8miIKKworIzogYnVpbHRpbi9hZGQuYzoyNjYgYnVpbHRpbi9yZXYtcGFyc2UuYzo4OTkKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIuS4jeiDveivu+WPlue0ouW8lSIKKworIzogYnVpbHRpbi9hZGQuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIuaXoOazleS4uuWGmeWFpeaJk+W8gCAnJXMn44CCIgorCisjOiBidWlsdGluL2FkZC5jOjI4MQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAi5LiN6IO955Sf5oiQ6KGl5LiBIgorCisjOiBidWlsdGluL2FkZC5jOjI4NAorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICLnvJbovpHooaXkuIHlpLHotKUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIuS4jeiDveWvuSAnJXMnIOiwg+eUqCBzdGF0IgorCisjOiBidWlsdGluL2FkZC5jOjI4OQorbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAi56m66KGl5LiB44CC5byC5bi457uI5q2i44CCIgorCisjOiBidWlsdGluL2FkZC5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAi5LiN6IO95bqU55SoICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzAyCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICLkuIvliJfot6/lvoTmoLnmja7mgqjnmoTkuIDkuKogLmdpdGlnbm9yZSDmlofku7bogIzooqvlv73nlaXvvJpcbiIKKworIzogYnVpbHRpbi9hZGQuYzozMjIgYnVpbHRpbi9jbGVhbi5jOjkxMCBidWlsdGluL2ZldGNoLmM6MTYzIGJ1aWx0aW4vbXYuYzoxMjQKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTYgYnVpbHRpbi9wdWxsLmM6MjAzIGJ1aWx0aW4vcHVzaC5jOjU0OAorIzogYnVpbHRpbi9yZW1vdGUuYzoxNDIxIGJ1aWx0aW4vcm0uYzoyNDIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjUKK21zZ2lkICJkcnkgcnVuIgorbXNnc3RyICLmvJTkuaAiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI1Cittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAi5Lqk5LqS5byP5ouj6YCJIgorCisjOiBidWlsdGluL2FkZC5jOjMyNiBidWlsdGluL2NoZWNrb3V0LmM6MTUxMSBidWlsdGluL3Jlc2V0LmM6MzA3Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgIuS6pOS6kuW8j+aMkemAieaVsOaNruWdlyIKKworIzogYnVpbHRpbi9hZGQuYzozMjcKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgIue8lui+keW9k+WJjeW3ruW8guW5tuW6lOeUqCIKKworIzogYnVpbHRpbi9hZGQuYzozMjgKK21zZ2lkICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiCittc2dzdHIgIuWFgeiuuOa3u+WKoOW/veeVpeeahOaWh+S7tiIKKworIzogYnVpbHRpbi9hZGQuYzozMjkKK21zZ2lkICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi5pu05paw5bey6Lef6Liq55qE5paH5Lu2IgorCisjOiBidWlsdGluL2FkZC5jOjMzMAorbXNnaWQgInJlbm9ybWFsaXplIEVPTCBvZiB0cmFja2VkIGZpbGVzIChpbXBsaWVzIC11KSIKK21zZ3N0ciAi5a+55bey6Lef6Liq5paH5Lu277yI5pqX5ZCrIC1177yJ6YeN5paw5b2S5LiA5o2i6KGM56ymIgorCisjOiBidWlsdGluL2FkZC5jOjMzMQorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAi5Y+q6K6w5b2V77yM6K+l6Lev5b6E56iN5ZCO5YaN5re75YqgIgorCisjOiBidWlsdGluL2FkZC5jOjMzMgorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi5re75Yqg5omA5pyJ5pS55Y+Y55qE5bey6Lef6Liq5paH5Lu25ZKM5pyq6Lef6Liq5paH5Lu2IgorCisjOiBidWlsdGluL2FkZC5jOjMzNQorbXNnaWQgImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIgorbXNnc3RyICLlv73nlaXlt6XkvZzljLrkuK3np7vpmaTnmoTot6/lvoTvvIjlkowgLS1uby1hbGwg55u45ZCM77yJIgorCisjOiBidWlsdGluL2FkZC5jOjMzNworbXNnaWQgImRvbid0IGFkZCwgb25seSByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAi5LiN5re75Yqg77yM5Y+q5Yi35paw57Si5byVIgorCisjOiBidWlsdGluL2FkZC5jOjMzOAorbXNnaWQgImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiCittc2dzdHIgIui3s+i/h+WboOWHuumUmeS4jeiDvea3u+WKoOeahOaWh+S7tiIKKworIzogYnVpbHRpbi9hZGQuYzozMzkKK21zZ2lkICJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iCittc2dzdHIgIuajgOafpeWcqOa8lOS5oOaooeW8j+S4i+aWh+S7tu+8iOWNs+S9v+S4jeWtmOWcqO+8ieaYr+WQpuiiq+W/veeVpSIKKworIzogYnVpbHRpbi9hZGQuYzozNDEgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA0Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgIuimhuebluWIl+ihqOmHjOaWh+S7tueahOWPr+aJp+ihjOS9jSIKKworIzogYnVpbHRpbi9hZGQuYzozNDMKK21zZ2lkICJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiCittc2dzdHIgIuWIm+W7uuS4gOS4quW1jOWFpeW8j+S7k+W6k+aXtue7meS6iOitpuWRiiIKKworIzogYnVpbHRpbi9hZGQuYzozNDUKK21zZ2lkICJiYWNrZW5kIGZvciBgZ2l0IHN0YXNoIC1wYCIKK21zZ3N0ciAiYGdpdCBzdGFzaCAtcGAg55qE5ZCO56uvIgorCisjOiBidWlsdGluL2FkZC5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91J3ZlIGFkZGVkIGFub3RoZXIgZ2l0IHJlcG9zaXRvcnkgaW5zaWRlIHlvdXIgY3VycmVudCByZXBvc2l0b3J5LlxuIgorIkNsb25lcyBvZiB0aGUgb3V0ZXIgcmVwb3NpdG9yeSB3aWxsIG5vdCBjb250YWluIHRoZSBjb250ZW50cyBvZlxuIgorInRoZSBlbWJlZGRlZCByZXBvc2l0b3J5IGFuZCB3aWxsIG5vdCBrbm93IGhvdyB0byBvYnRhaW4gaXQuXG4iCisiSWYgeW91IG1lYW50IHRvIGFkZCBhIHN1Ym1vZHVsZSwgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyJJZiB5b3UgYWRkZWQgdGhpcyBwYXRoIGJ5IG1pc3Rha2UsIHlvdSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhlXG4iCisiaW5kZXggd2l0aDpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIlNlZSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIuaCqOWcqOW9k+WJjeS7k+W6k+S4rea3u+WKoOS6huWPpuS4gOS4qkdpdOS7k+W6k+OAguWFi+mahuWkluWxgueahOS7k+W6k+WwhuS4jeWMheWQq+W1jOWFpeS7k+W6k+eahFxuIgorIuWGheWuue+8jOW5tuS4lOS4jeefpemBk+ivpeWmguS9leiOt+WPluWug+OAguWmguaenOaCqOimgea3u+WKoOS4gOS4quWtkOaooee7hO+8jOS9v+eUqO+8mlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyLlpoLmnpzmgqjkuI3lsI/lv4Pmt7vliqDkuobov5nkuKrot6/lvoTvvIzlj6/ku6XnlKjkuIvpnaLnmoTlkb3ku6TlsIblhbbku47ntKLlvJXkuK3liKDpmaTvvJpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIuWPguingSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIOiOt+WPluabtOWkmuS/oeaBr+OAgiIKKworIzogYnVpbHRpbi9hZGQuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5nIGVtYmVkZGVkIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAi5q2j5Zyo5re75Yqg5bWM5YWl5byPIGdpdCDku5PlupPvvJolcyIKKworIzogYnVpbHRpbi9hZGQuYzo0MTAKK21zZ2lkICIiCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKKyJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkSWdub3JlZEZpbGUgZmFsc2VcIiIKK21zZ3N0ciAiIgorIuWmguaenOaCqOehruWunuimgea3u+WKoOWug+S7rO+8jOS9v+eUqCAtZiDlj4LmlbDjgIJcbiIKKyLov5DooYzkuIvpnaLnmoTlkb3ku6TmnaXlhbPpl63mnKzmtojmga9cbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmFkZElnbm9yZWRGaWxlIGZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDE5Cittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAi5re75Yqg5paH5Lu25aSx6LSlIgorCisjOiBidWlsdGluL2FkZC5jOjQ0NyBidWlsdGluL2NvbW1pdC5jOjM0OAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0taW50ZXJhY3RpdmUvLS1wYXRjaCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUg5LiOIC0taW50ZXJhY3RpdmUvLS1wYXRjaCDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDY0Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1lZGl0IgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSDkuI4gLS1lZGl0IOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9hZGQuYzo0NzYKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLUEg5ZKMIC11IOmAiemhueS6kuaWpSIKKworIzogYnVpbHRpbi9hZGQuYzo0NzkKK21zZ2lkICJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIgorbXNnc3RyICLpgInpobkgLS1pZ25vcmUtbWlzc2luZyDlj6rog73lkowgLS1kcnktcnVuIOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9hZGQuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1jaG1vZCBwYXJhbSAnJXMnIG11c3QgYmUgZWl0aGVyIC14IG9yICt4IgorbXNnc3RyICLlj4LmlbAgLS1jaG1vZCDlj5blgLwgJyVzJyDlv4XpobvmmK8gLXgg5oiWICt4IgorCisjOiBidWlsdGluL2FkZC5jOjUwMSBidWlsdGluL2NoZWNrb3V0LmM6MTY3NSBidWlsdGluL2NvbW1pdC5jOjM1NAorIzogYnVpbHRpbi9yZXNldC5jOjMyNyBidWlsdGluL3JtLmM6MjcyIGJ1aWx0aW4vc3Rhc2guYzoxNTA5Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSDkuI7ot6/lvoTooajovr7lvI/lj4LmlbDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTA4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjg3IGJ1aWx0aW4vY29tbWl0LmM6MzYwCisjOiBidWlsdGluL3Jlc2V0LmM6MzMzIGJ1aWx0aW4vcm0uYzoyNzggYnVpbHRpbi9zdGFzaC5jOjE1MTUKK21zZ2lkICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorbXNnc3RyICItLXBhdGhzcGVjLWZpbGUtbnVsIOmcgOimgSAtLXBhdGhzcGVjLWZyb20tZmlsZSIKKworIzogYnVpbHRpbi9hZGQuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuXG4iCittc2dzdHIgIuayoeacieaMh+WumuaWh+S7tu+8jOS5n+ayoeacieaWh+S7tuiiq+a3u+WKoOOAglxuIgorCisjOiBidWlsdGluL2FkZC5jOjUxNAorbXNnaWQgIiIKKyJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKKyJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkRW1wdHlQYXRoc3BlYyBmYWxzZVwiIgorbXNnc3RyICIiCisi5Lmf6K645oKo5oOz6KaB5omn6KGMICdnaXQgYWRkIC4n77yfXG4iCisi6L+Q6KGM5LiL6Z2i55qE5ZG95Luk5p2l5YWz6Zet5pys5raI5oGvXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5hZGRFbXB0eVBhdGhzcGVjIGZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vYW0uYzozNTIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5L2c6ICF6ISa5pysIgorCisjOiBidWlsdGluL2FtLmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgIiclcycg6KKrIGFwcGx5cGF0Y2gtbXNnIOmSqeWtkOWIoOmZpCIKKworIzogYnVpbHRpbi9hbS5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIumdnuazleeahOi+k+WFpeihjO+8miclcyfjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIuS7jiAnJXMnIOaLt+i0neazqOino+WIsCAnJXMnIOaXtuWksei0pSIKKworIzogYnVpbHRpbi9hbS5jOjU0MgorbXNnaWQgImZzZWVrIGZhaWxlZCIKK21zZ3N0ciAiZnNlZWsg5aSx6LSlIgorCisjOiBidWlsdGluL2FtLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXRjaCAnJXMnIgorbXNnc3RyICLml6Dms5Xop6PmnpDooaXkuIEgJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjc5NQorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICLkuIDmrKHlj6rog73mnInkuIDkuKogU3RHSVQg6KGl5LiB6Zif5YiX6KKr5bqU55SoIgorCisjOiBidWlsdGluL2FtLmM6ODQzCittc2dpZCAiaW52YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIuaXoOaViOeahOaXtumXtOaIsyIKKworIzogYnVpbHRpbi9hbS5jOjg0OCBidWlsdGluL2FtLmM6ODYwCittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgIuaXoOaViOeahOaXpeacn+ihjCIKKworIzogYnVpbHRpbi9hbS5jOjg1NQorbXNnaWQgImludmFsaWQgdGltZXpvbmUgb2Zmc2V0IgorbXNnc3RyICLml6DmlYjnmoTml7bljLrlgY/np7vlgLwiCisKKyM6IGJ1aWx0aW4vYW0uYzo5NDgKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgIuihpeS4geagvOW8j+aOoua1i+Wksei0peOAgiIKKworIzogYnVpbHRpbi9hbS5jOjk1MyBidWlsdGluL2Nsb25lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIuWIm+W7uuebruW9lSAnJXMnIOWksei0pSIKKworIzogYnVpbHRpbi9hbS5jOjk1OAorbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAi5ouG5YiG6KGl5LiB5aSx6LSl44CCIgorCisjOiBidWlsdGluL2FtLmM6MTA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJXMgLS1jb250aW51ZVwiLiIKK21zZ3N0ciAi5b2T5oKo6Kej5Yaz6L+Z5LiA6Zeu6aKY77yM5omn6KGMIFwiJXMgLS1jb250aW51ZVwi44CCIgorCisjOiBidWlsdGluL2FtLmM6MTA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJXMgLS1za2lwXCIgaW5zdGVhZC4iCittc2dzdHIgIuWmguaenOaCqOaDs+imgei3s+i/h+i/meS4gOihpeS4ge+8jOWImeaJp+ihjCBcIiVzIC0tc2tpcFwi44CCIgorCisjOiBidWlsdGluL2FtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iCittc2dzdHIgIuiLpeimgeWkjeWOn+iHs+WOn+Wni+WIhuaUr+W5tuWBnOatouihpeS4geaTjeS9nO+8jOaJp+ihjCBcIiVzIC0tYWJvcnRcIuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjExNzQKK21zZ2lkICJQYXRjaCBzZW50IHdpdGggZm9ybWF0PWZsb3dlZDsgc3BhY2UgYXQgdGhlIGVuZCBvZiBsaW5lcyBtaWdodCBiZSBsb3N0LiIKK21zZ3N0ciAi6KGl5LiB5L2/55SoIGZvcm1hdD1mbG93ZWQg5qC85byP5Y+R6YCB77yM6KGM5bC+55qE56m65qC85Y+v6IO95Lya5Lii5aSx44CCIgorCisjOiBidWlsdGluL2FtLmM6MTIwMgorbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAi6KGl5LiB5Li656m644CCIgorCisjOiBidWlsdGluL2FtLmM6MTI2NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGF1dGhvciBsaW5lIGluIGNvbW1pdCAlcyIKK21zZ3N0ciAi5Zyo5o+Q5LqkICVzIOS4ree8uuWkseS9nOiAheihjCIKKworIzogYnVpbHRpbi9hbS5jOjEyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlLipzIgorbXNnc3RyICLml6DmlYjnmoTouqvku73moIfor4bvvJolLipzIgorCisjOiBidWlsdGluL2FtLmM6MTQ4OQorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIuS7k+W6k+e8uuS5j+W/heimgeeahOaVsOaNruWvueixoeS7pei/m+ihjOS4ieaWueWQiOW5tuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjE0OTEKK21zZ2lkICJVc2luZyBpbmRleCBpbmZvIHRvIHJlY29uc3RydWN0IGEgYmFzZSB0cmVlLi4uIgorbXNnc3RyICLkvb/nlKjntKLlvJXmnaXph43lu7rkuIDkuKrvvIjkuInmlrnlkIjlubbnmoTvvInln7rnoYDnm67lvZXmoJEuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTEwCittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorIuaCqOaYr+WQpuabvuaJi+WKqOe8lui+kei/h+aCqOeahOihpeS4ge+8n1xuIgorIuaXoOazleW6lOeUqOihpeS4geWIsOe0ouW8leS4reeahOaVsOaNruWvueixoeS4iuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjE1MTYKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIuWbnuiQveWIsOWfuuehgOeJiOacrOS4iuaJk+ihpeS4geWPiui/m+ihjOS4ieaWueWQiOW5ti4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE1NDIKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICLml6Dms5XlkIjlubblj5jmm7TjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTc0Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAi5q2j5bqU55So5Yiw5LiA5Liq56m65Y6G5Y+y5LiKIgorCisjOiBidWlsdGluL2FtLmM6MTYyMSBidWlsdGluL2FtLmM6MTYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIuaXoOazlee7p+e7re+8miVzIOS4jeWtmOWcqOOAgiIKKworIzogYnVpbHRpbi9hbS5jOjE2NDMKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgIuaPkOS6pOWGheWuueS4uu+8miIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5Y+l5bC+56m65qC8CisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2FtLmM6MTY1MworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorbXNnc3RyICLlupTnlKjvvJ/mmK9beV0v5ZCmW25dL+e8lui+kVtlXS/mn6XnnIvooaXkuIFbdl0v5bqU55So5omA5pyJW2Fd77yaIgorCisjOiBidWlsdGluL2FtLmM6MTcwMCBidWlsdGluL2NvbW1pdC5jOjM5OAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5XlhpnlhaXntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAi6ISP57Si5byV77ya5LiN6IO95bqU55So6KGl5LiB77yI6ISP5paH5Lu277yaJXPvvIkiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzQ0IGJ1aWx0aW4vYW0uYzoxODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICLlupTnlKjvvJolLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc2MQorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAi5rKh5pyJ5Y+Y5pu0IOKAlOKAlCDooaXkuIHlt7Lnu4/lupTnlKjov4fjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGNoIGZhaWxlZCBhdCAlcyAlLipzIgorbXNnc3RyICLmiZPooaXkuIHlpLHotKXkuo4gJXMgJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE3NzEKK21zZ2lkICJVc2UgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaD1kaWZmJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAi55SoICdnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2g9ZGlmZicg5ZG95Luk5p+l55yL5aSx6LSl55qE6KGl5LiBIgorCisjOiBidWlsdGluL2FtLmM6MTgxNQorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKK21zZ3N0ciAiIgorIuayoeacieWPmOabtCDigJTigJQg5oKo5piv5LiN5piv5b+Y5LqG5omn6KGMICdnaXQgYWRkJ++8n1xuIgorIuWmguaenOayoeacieS7gOS5iOimgea3u+WKoOWIsOaaguWtmOWMuueahO+8jOWImeW+iOWPr+iDveaYr+WFtuWug+aPkOS6pOW3sue7j+W8leWFpeS6huebuOWQjOeahOWPmOabtOOAglxuIgorIuaCqOS5n+iuuOaDs+imgei3s+i/h+i/meS4quihpeS4geOAgiIKKworIzogYnVpbHRpbi9hbS5jOjE4MjIKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJZb3Ugc2hvdWxkICdnaXQgYWRkJyBlYWNoIGZpbGUgd2l0aCByZXNvbHZlZCBjb25mbGljdHMgdG8gbWFyayB0aGVtIGFzICIKKyJzdWNoLlxuIgorIllvdSBtaWdodCBydW4gYGdpdCBybWAgb24gYSBmaWxlIHRvIGFjY2VwdCBcImRlbGV0ZWQgYnkgdGhlbVwiIGZvciBpdC4iCittc2dzdHIgIiIKKyLlnKjmgqjnmoTntKLlvJXkuK3ku43lrZjlnKjmnKrlkIjlubbnmoTot6/lvoTjgIJcbiIKKyLmgqjlupTor6Xlr7nlt7Lnu4/lhrLnqoHop6PlhrPnmoTmr4/kuIDkuKrmlofku7bmiafooYwgJ2dpdCBhZGQnIOadpeagh+iusOW3sue7j+WujOaIkOOAgiBcbiIKKyLkvaDlj6/ku6Xlr7kgXCLnlLHku5bku6zliKDpmaRcIiDnmoTmlofku7bmiafooYwgYGdpdCBybWAg5ZG95Luk44CCIgorCisjOiBidWlsdGluL2FtLmM6MTkyOSBidWlsdGluL2FtLmM6MTkzMyBidWlsdGluL2FtLmM6MTk0NSBidWlsdGluL3Jlc2V0LmM6MzQ2CisjOiBidWlsdGluL3Jlc2V0LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIuS4jeiDveino+aekOWvueixoSAnJXMn44CCIgorCisjOiBidWlsdGluL2FtLmM6MTk4MQorbXNnaWQgImZhaWxlZCB0byBjbGVhbiBpbmRleCIKK21zZ3N0ciAi5riF56m657Si5byV5aSx6LSlIgorCisjOiBidWlsdGluL2FtLmM6MjAyNQorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICLmgqjlpb3lg4/lnKjkuIrkuIDmrKEgJ2FtJyDlpLHotKXlkI7np7vliqjkuoYgSEVBROOAguacquWbnumAgOiHsyBPUklHX0hFQUQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIC0tcGF0Y2gtZm9ybWF0OiAlcyIKK21zZ3N0ciAi5peg5pWI55qEIC0tcGF0Y2gtZm9ybWF0IOWAvO+8miVzIgorCisjOiBidWlsdGluL2FtLmM6MjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXNob3ctY3VycmVudC1wYXRjaDogJXMiCittc2dzdHIgIuaXoOaViOeahCAtLXNob3ctY3VycmVudC1wYXRjaCDlgLzvvJolcyIKKworIzogYnVpbHRpbi9hbS5jOjIxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMiCittc2dzdHIgIi0tc2hvdy1jdXJyZW50LXBhdGNoPSVzIOWSjCAtLXNob3ctY3VycmVudC1wYXRjaD0lcyDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA3Cittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCittc2dzdHIgImdpdCBhbSBbPOmAiemhuT5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA4Cittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCittc2dzdHIgImdpdCBhbSBbPOmAiemhuT5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE0Cittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgIuS7peS6pOS6kuW8j+aWueW8j+i/kOihjCIKKworIzogYnVpbHRpbi9hbS5jOjIyMTYKK21zZ2lkICJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIKK21zZ3N0ciAi6ICB55qE5Y+C5pWwIOKAlOKAlCDml6DkvZznlKgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE4Cittc2dpZCAiYWxsb3cgZmFsbCBiYWNrIG9uIDN3YXkgbWVyZ2luZyBpZiBuZWVkZWQiCittc2dzdHIgIuWmguaenOW/heimge+8jOWFgeiuuOS9v+eUqOS4ieaWueWQiOW5tuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIyMTkgYnVpbHRpbi9pbml0LWRiLmM6NDk0IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTgKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA0IGJ1aWx0aW4vc3Rhc2guYzo4MTIKK21zZ2lkICJiZSBxdWlldCIKK21zZ3N0ciAi6Z2Z6buY5qih5byPIgorCisjOiBidWlsdGluL2FtLmM6MjIyMQorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIuWcqOaPkOS6pOivtOaYjuS4rea3u+WKoOS4gOS4qiBTaWduZWQtb2ZmLWJ5IOetvuWQjSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjQKK21zZ2lkICJyZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KSIKK21zZ3N0ciAi5L2/55SoIHV0Zjgg5a2X56ym6ZuG77yI6buY6K6k77yJIgorCisjOiBidWlsdGluL2FtLmM6MjIyNgorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgIuWQkSBnaXQtbWFpbGluZm8g5Lyg6YCSIC1rIOWPguaVsCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjgKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICLlkJEgZ2l0LW1haWxpbmZvIOS8oOmAkiAtYiDlj4LmlbAiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAi5ZCRIGdpdC1tYWlsaW5mbyDkvKDpgJIgLW0g5Y+C5pWwIgorCisjOiBidWlsdGluL2FtLmM6MjIzMgorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgIumSiOWvuSBtYm94IOagvOW8j++8jOWQkSBnaXQtbWFpbHNwbGl0IOS8oOmAkiAtLWtlZXAtY3Ig5Y+C5pWwIgorCisjOiBidWlsdGluL2FtLmM6MjIzNQorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICLkuI3lkJEgZ2l0LW1haWxzcGxpdCDkvKDpgJIgLS1rZWVwLWNyIOWPguaVsO+8jOimhuebliBhbS5rZWVwY3Ig55qE6K6+572uIgorCisjOiBidWlsdGluL2FtLmM6MjIzOAorbXNnaWQgInN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSIKK21zZ3N0ciAi5Lii5byD6KOB5YiH57q/5YmN55qE5omA5pyJ5YaF5a65IgorCisjOiBidWlsdGluL2FtLmM6MjI0MCBidWlsdGluL2FtLmM6MjI0MyBidWlsdGluL2FtLmM6MjI0NiBidWlsdGluL2FtLmM6MjI0OQorIzogYnVpbHRpbi9hbS5jOjIyNTIgYnVpbHRpbi9hbS5jOjIyNTUgYnVpbHRpbi9hbS5jOjIyNTggYnVpbHRpbi9hbS5jOjIyNjEKKyM6IGJ1aWx0aW4vYW0uYzoyMjY3Cittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAi5Lyg6YCS57uZIGdpdC1hcHBseSIKKworIzogYnVpbHRpbi9hbS5jOjIyNTcgYnVpbHRpbi9jb21taXQuYzoxMzkxIGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MAorIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczIGJ1aWx0aW4vZ3JlcC5jOjg3MSBidWlsdGluL21lcmdlLmM6MjUwCisjOiBidWlsdGluL3B1bGwuYzoxNDAgYnVpbHRpbi9wdWxsLmM6MTk5IGJ1aWx0aW4vcmViYXNlLmM6MTUwNQorIzogYnVpbHRpbi9yZXBhY2suYzozMTUgYnVpbHRpbi9yZXBhY2suYzozMTkgYnVpbHRpbi9yZXBhY2suYzozMjEKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAgYnVpbHRpbi9zaG93LXJlZi5jOjE3MiBidWlsdGluL3RhZy5jOjQwMworIzogcGFyc2Utb3B0aW9ucy5oOjE1NCBwYXJzZS1vcHRpb25zLmg6MTc1IHBhcnNlLW9wdGlvbnMuaDozMTYKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2FtLmM6MjI2MyBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTYgYnVpbHRpbi90YWcuYzo0MzcgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgIuagvOW8jyIKKworIzogYnVpbHRpbi9hbS5jOjIyNjQKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgIuihpeS4geeahOagvOW8jyIKKworIzogYnVpbHRpbi9hbS5jOjIyNzAKK21zZ2lkICJvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMiCittc2dzdHIgIuaJk+ihpeS4geWksei0peaXtuaYvuekuueahOmUmeivr+S/oeaBryIKKworIzogYnVpbHRpbi9hbS5jOjIyNzIKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICLlhrLnqoHop6PlhrPlkI7nu6fnu63lupTnlKjooaXkuIEiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc1Cittc2dpZCAic3lub255bXMgZm9yIC0tY29udGludWUiCittc2dzdHIgIuWSjCAtLWNvbnRpbnVlIOWQjOS5iSIKKworIzogYnVpbHRpbi9hbS5jOjIyNzgKK21zZ2lkICJza2lwIHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICLot7Pov4flvZPliY3ooaXkuIEiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjgxCittc2dpZCAicmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLiIKK21zZ3N0ciAi5oGi5aSN5Y6f5aeL5YiG5pSv5bm257uI5q2i5omT6KGl5LiB5pON5L2c44CCIgorCisjOiBidWlsdGluL2FtLmM6MjI4NAorbXNnaWQgImFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24gYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcy4iCittc2dzdHIgIue7iOatouihpeS4geaTjeS9nOS9huS/neaMgSBIRUFEIOS4jeWPmOOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIyODgKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBiZWluZyBhcHBsaWVkIgorbXNnc3RyICLmmL7npLrmraPlnKjlupTnlKjnmoTooaXkuIEiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjkzCittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICLlsIbkvZzogIXml6XmnJ/kvZzkuLrmj5DkuqTml6XmnJ8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk1Cittc2dpZCAidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIKK21zZ3N0ciAi55So5b2T5YmN5pe26Ze05L2c5Li65L2c6ICF5pel5pyfIgorCisjOiBidWlsdGluL2FtLmM6MjI5NyBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIwIGJ1aWx0aW4vY29tbWl0LmM6MTUxMgorIzogYnVpbHRpbi9tZXJnZS5jOjI4NyBidWlsdGluL3B1bGwuYzoxNzQgYnVpbHRpbi9yZWJhc2UuYzo1MTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NiBidWlsdGluL3JldmVydC5jOjExNyBidWlsdGluL3RhZy5jOjQxOAorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAia2V5LWlkIgorCisjOiBidWlsdGluL2FtLmM6MjI5OCBidWlsdGluL3JlYmFzZS5jOjUxOCBidWlsdGluL3JlYmFzZS5jOjE1NTcKK21zZ2lkICJHUEctc2lnbiBjb21taXRzIgorbXNnc3RyICLkvb/nlKggR1BHIOetvuWQjeaPkOS6pCIKKworIzogYnVpbHRpbi9hbS5jOjIzMDEKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAi77yI5YaF6YOo5L2/55So77yM55So5LqOIGdpdC1yZWJhc2XvvIkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzE5Cittc2dpZCAiIgorIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmRcbiIKKyJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIgorbXNnc3RyICIiCisi5Y+C5pWwIC1iLy0tYmluYXJ5IOW3sue7j+W+iOmVv+aXtumXtOS4jeWBmuS7u+S9leWunui0qOaTjeS9nOS6hu+8jOW5tuS4lOWwhuiiq+enu+mZpOOAglxuIgorIuivt+S4jeimgeWGjeS9v+eUqOWug+S6huOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjYKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIuivu+WPlue0ouW8leWksei0pSIKKworIzogYnVpbHRpbi9hbS5jOjIzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICLkuYvliY3nmoTlj5jln7rnm67lvZUgJXMg5LuN54S25a2Y5Zyo77yM5L2G5Y205o+Q5L6b5LqGIG1ib3jjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisi5Y+R546w5LqG6ZSZ6K+v55qEICVzIOebruW9leOAglxuIgorIuS9v+eUqCBcImdpdCBhbSAtLWFib3J0XCIg5Yig6Zmk5a6D44CCIgorCisjOiBidWlsdGluL2FtLmM6MjM3MQorbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgIuino+WGs+aTjeS9nOacqui/m+ihjO+8jOaIkeS7rOS4jeS8mue7p+e7reOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIzODEKK21zZ2lkICJpbnRlcmFjdGl2ZSBtb2RlIHJlcXVpcmVzIHBhdGNoZXMgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAi5Lqk5LqS5byP5qih5byP6ZyA6KaB5ZG95Luk6KGM5LiK5o+Q5L6b6KGl5LiBIgorCisjOiBidWlsdGluL2FwcGx5LmM6OAorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbPOmAiemhuT5dIFs86KGl5LiBPi4uLl0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgIuS4jeiDveWIm+W7uuW9kuaho+aWh+S7tiAnJXMnIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgIuS4jeiDvemHjeWumuWQkei+k+WHuiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2Ze+8muacquaPkOS+m+i/nOeoiyBVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmXvvJrmnJ/mnJvmmK8gQUNLL05BS++8jOWNtOW+l+WIsCBmbHVzaCDljIUiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2Ze+8mk5BQ0sgJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY1Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICJnaXQgYXJjaGl2Ze+8muWNj+iurumUmeivryIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjkKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmXvvJrlupTmnInkuIDkuKogZmx1c2gg5YyFIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPGJhZF90ZXJtPiA8Z29vZF90ZXJtPiIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPOWdjy3mnK/or60+IDzlpb0t5pyv6K+tPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI0Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNQorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzzmj5DkuqQ+XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI2Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSBbLS1uby1sb2ddIDxzdGF0ZT4gPHJldmlzaW9uPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSBbLS1uby1sb2ddIDznirbmgIE+IDzniYjmnKw+IDzlpb0t5pyv6K+tPiA85Z2PLeacr+ivrSIKKyI+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjcKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPGNvbW1hbmQ+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPOWRveS7pD4gPOWlvS3mnK/or60+IDzlnY8t5pyv6K+tPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPGdvb2RfdGVybT4gPGJhZF90ZXJtPiBbPHRlcm0+XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPOWlvS3mnK/or60+IDzlnY8t5pyv6K+tPiBbPOacr+ivrT5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzAKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PHRlcm0+XVstLW5vLWNoZWNrb3V0XSBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT085pyv6K+tPiAtLXRlcm0te25ldyxiYWR9IgorIj085pyv6K+tPl1bLS1uby1jaGVja291dF0gWzzlnY8+IFs85aW9Pi4uLl1dIFstLV0gWzzot6/lvoQ+Li4uXSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGVybSIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDkuKrmnInmlYjnmoTmnK/or60iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnJXMnIGFzIGEgdGVybSIKK21zZ3N0ciAi5LiN6IO95L2/55So5YaF572u5ZG95LukICclcycg5L2c5Li65pyv6K+tIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgdGVybSAnJXMnIgorbXNnc3RyICLkuI3og73kv67mlLnmnK/or60gJyVzJyDnmoTlkKvkuYkiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTEKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgIuivt+S9v+eUqOS4pOS4quS4jeWQjOeahOacr+ivrSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExOAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRoZSBmaWxlIEJJU0VDVF9URVJNUyIKK21zZ3N0ciAi5LiN6IO95omT5byA5paH5Lu2IEJJU0VDVF9URVJNUyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJXZSBhcmUgbm90IGJpc2VjdGluZy5cbiIKK21zZ3N0ciAi5oiR5Lus5rKh5pyJ5Zyo5LqM5YiG5p+l5om+44CCXG4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIiclcycg5LiN5piv5LiA5Liq5pyJ5pWI55qE5o+Q5LqkIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyVzJy4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIuS4jeiDveajgOWHuuWOn+WniyBIRUFEICclcyfjgILlsJ3or5UgJ2dpdCBiaXNlY3QgcmVzZXQgPOaPkOS6pD4n44CCIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLlnY/nmoQgYmlzZWN0X3dyaXRlIOWPguaVsO+8miVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGdldCB0aGUgb2lkIG9mIHRoZSByZXYgJyVzJyIKK21zZ3N0ciAi5peg5rOV6I635Y+W54mI5pysICclcycg55qE5a+56LGhIElEIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IG9wZW4gdGhlIGZpbGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV5omT5byA5paH5Lu2ICclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21tYW5kOiB5b3UncmUgY3VycmVudGx5IGluIGEgJXMvJXMgYmlzZWN0IgorbXNnc3RyICLml6DmlYjnmoTlkb3ku6TvvJrmgqjlvZPliY3mraPlpITkuo7kuIDkuKogJXMvJXMg5LqM5YiG5p+l5om+5LitIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorIuaCqOmcgOimgee7meaIkeiHs+WwkeS4gOS4qiAlcyDlkozkuIDkuKogJXMg54mI5pys44CCXG4iCisi5Li65q2k5oKo5Y+v5Lul55SoIFwiZ2l0IGJpc2VjdCAlc1wiIOWSjCBcImdpdCBiaXNlY3QgJXNcIuOAgiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorIuaCqOmcgOimgeaJp+ihjCBcImdpdCBiaXNlY3Qgc3RhcnRcIiDmnaXlvIDlp4vjgIJcbiIKKyLnhLblkI7pnIDopoHmj5DkvpvmiJHoh7PlsJHkuIDkuKogJXMg5ZKM5LiA5LiqICVzIOeJiOacrOOAglxuIgorIuS4uuatpOaCqOWPr+S7peeUqCBcImdpdCBiaXNlY3QgJXNcIiDlkowgXCJnaXQgYmlzZWN0ICVzXCIg5ZG95Luk44CCIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJpc2VjdGluZyBvbmx5IHdpdGggYSAlcyBjb21taXQiCittc2dzdHIgIuWcqOWPquacieS4gOS4qiAlcyDmj5DkuqTnmoTmg4XlhrXkuIvkuozliIbmn6Xmib4iCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWPpeWwvuepuuagvAorIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMxOAorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICLmgqjnoa7orqTkuYhbWS9uXe+8nyAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozNzkKK21zZ2lkICJubyB0ZXJtcyBkZWZpbmVkIgorbXNnc3RyICLmnKrlrprkuYnmnK/or60iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY3VycmVudCB0ZXJtcyBhcmUgJXMgZm9yIHRoZSBvbGQgc3RhdGVcbiIKKyJhbmQgJXMgZm9yIHRoZSBuZXcgc3RhdGUuXG4iCittc2dzdHIgIuaCqOW9k+WJjemSiOWvueaXp+eKtuaAgeeahOacr+ivreaYryAlc++8jOWvueaWsOeKtuaAgeeahOacr+ivreaYryAlc+OAglxuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAnZ2l0IGJpc2VjdCB0ZXJtcycuXG4iCisiU3VwcG9ydGVkIG9wdGlvbnMgYXJlOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIGFuZCAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIgorbXNnc3RyICIiCisi5ZG95LukICdnaXQgYmlzZWN0IHRlcm1zJyDnmoTlj4LmlbAgJXMg5peg5pWI44CCXG4iCisi5pSv5oyB55qE6YCJ6aG55pyJ77yaLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCDlkowgLS10ZXJtLWJhZHwtLXRlcm0tbmV344CCIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBvcHRpb246ICclcyciCittc2dzdHIgIuacquivhuWIq+eahOmAiemhue+8miclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiJyVzJyDnnIvotbfmnaXkuI3mmK/kuIDkuKrmnInmlYjnmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MTQKK21zZ2lkICJiYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIuWdj+eahCBIRUFEIC0g5oiR6ZyA6KaB5LiA5LiqIEhFQUQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hlY2tpbmcgb3V0ICclcycgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3Qgc3RhcnQgPHZhbGlkLWJyYW5jaD4nLiIKK21zZ3N0ciAi5qOA5Ye6ICclcycg5aSx6LSl44CC5bCd6K+VICdnaXQgYmlzZWN0IHN0YXJ0IDzmnInmlYjliIbmlK8+J+OAgiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MAorbXNnaWQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiCittc2dzdHIgIuS4jeS8muWcqOWBmuS6hiBjZy1zZWVrIOeahOagkeS4iuWBmuS6jOWIhuafpeaJviIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MworbXNnaWQgImJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIuWdj+eahCBIRUFEIC0g5aWH5oCq55qE56ym5Y+35byV55SoIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmOiAnJXMnIgorbXNnc3RyICLml6DmlYjnmoTlvJXnlKjvvJonJXMnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMzCittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAi5omn6KGMICdnaXQgYmlzZWN0IG5leHQnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM1Cittc2dpZCAid3JpdGUgdGhlIHRlcm1zIHRvIC5naXQvQklTRUNUX1RFUk1TIgorbXNnc3RyICLlsIbmnK/or63lhpnlhaUgLmdpdC9CSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzcKK21zZ2lkICJjbGVhbnVwIHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIua4hemZpOS6jOWIhuafpeaJvueKtuaAgSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzOQorbXNnaWQgImNoZWNrIGZvciBleHBlY3RlZCByZXZzIgorbXNnc3RyICLmo4Dmn6XpooTmnJ/nmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDEKK21zZ2lkICJyZXNldCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICLmuIXpmaTkuozliIbmn6Xmib7nirbmgIEiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDMKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGJpc2VjdGlvbiBzdGF0ZSBpbiBCSVNFQ1RfTE9HIgorbXNnc3RyICLlsIbkuozliIbmn6Xmib7nmoTnirbmgIHlhpnlhaUgQklTRUNUX0xPRyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NQorbXNnaWQgImNoZWNrIGFuZCBzZXQgdGVybXMgaW4gYSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIuWcqOS4gOS4quS6jOWIhuafpeaJvueKtuaAgeS4reajgOafpeWSjOiuvue9ruacr+ivrSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NworbXNnaWQgImNoZWNrIHdoZXRoZXIgYmFkIG9yIGdvb2QgdGVybXMgZXhpc3QiCittc2dzdHIgIuajgOafpeWdj+eahOaIluWlveeahOacr+ivreaYr+WQpuWtmOWcqCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0OQorbXNnaWQgInByaW50IG91dCB0aGUgYmlzZWN0IHRlcm1zIgorbXNnc3RyICLmiZPljbDkuozliIbmn6Xmib7mnK/or60iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTEKK21zZ2lkICJzdGFydCB0aGUgYmlzZWN0IHNlc3Npb24iCittc2dzdHIgIuWQr+WKqOS6jOWIhuafpeaJvui/h+eoiyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MworbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgIuabtOaWsCBCSVNFQ1RfSEVBRCDogIzpnZ7mo4Dlh7rlvZPliY3mj5DkuqQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTUKK21zZ2lkICJubyBsb2cgZm9yIEJJU0VDVF9XUklURSIKK21zZ3N0ciAiQklTRUNUX1dSSVRFIOaXoOaXpeW/lyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3MworbXNnaWQgIi0td3JpdGUtdGVybXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS13cml0ZS10ZXJtcyDpnIDopoHkuKTkuKrlj4LmlbAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzcKK21zZ2lkICItLWJpc2VjdC1jbGVhbi1zdGF0ZSByZXF1aXJlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIOS4jeW4puWPguaVsCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4NAorbXNnaWQgIi0tYmlzZWN0LXJlc2V0IHJlcXVpcmVzIGVpdGhlciBubyBhcmd1bWVudCBvciBhIGNvbW1pdCIKK21zZ3N0ciAiLS1iaXNlY3QtcmVzZXQg5peg6ZyA5Y+C5pWw5oiW6ICF6ZyA6KaB5LiA5Liq5o+Q5LqkIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg4Cittc2dpZCAiLS1iaXNlY3Qtd3JpdGUgcmVxdWlyZXMgZWl0aGVyIDQgb3IgNSBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LXdyaXRlIOmcgOimgSA0IOaIliA1IOS4quWPguaVsCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY5NAorbXNnaWQgIi0tY2hlY2stYW5kLXNldC10ZXJtcyByZXF1aXJlcyAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIOmcgOimgSAzIOS4quWPguaVsCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcwMAorbXNnaWQgIi0tYmlzZWN0LW5leHQtY2hlY2sgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtbmV4dC1jaGVjayDpnIDopoEgMiDmiJYgMyDkuKrlj4LmlbAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3MDYKK21zZ2lkICItLWJpc2VjdC10ZXJtcyByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnQiCittc2dzdHIgIi0tYmlzZWN0LXRlcm1zIOmcgOimgSAwIOaIliAxIOS4quWPguaVsCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjMxCittc2dpZCAiZ2l0IGJsYW1lIFs8b3B0aW9ucz5dIFs8cmV2LW9wdHM+XSBbPHJldj5dIFstLV0gPGZpbGU+IgorbXNnc3RyICJnaXQgYmxhbWUgWzzpgInpobk+XSBbPOeJiOacrOmAiemhuT5dIFs854mI5pysPl0gWy0tXSA85paH5Lu2PiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjM2Cittc2dpZCAiPHJldi1vcHRzPiBhcmUgZG9jdW1lbnRlZCBpbiBnaXQtcmV2LWxpc3QoMSkiCittc2dzdHIgIjzniYjmnKzpgInpobk+IOeahOaWh+aho+iusOW9leWcqCBnaXQtcmV2LWxpc3QoMSkg5LitIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGluZyBhIGNvbG9yOiAlcyIKK21zZ3N0ciAi5pyf5pyb5LiA5Liq6aKc6Imy77yaJXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MTYKK21zZ2lkICJtdXN0IGVuZCB3aXRoIGEgY29sb3IiCittc2dzdHIgIuW/hemhu+S7peS4gOS4quminOiJsue7k+WwviIKKworIzogYnVpbHRpbi9ibGFtZS5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yICclcycgaW4gY29sb3IuYmxhbWUucmVwZWF0ZWRMaW5lcyIKK21zZ3N0ciAi6K6+572uIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMg5Lit55qE5peg5pWI6aKc6ImyICclcyciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3NDcKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciBibGFtZS5jb2xvcmluZyIKK21zZ3N0ciAi6K6+572uIGJsYW1lLmNvbG9yaW5nIOS4reeahOaXoOaViOWPluWAvCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmluZCByZXZpc2lvbiAlcyB0byBpZ25vcmUiCittc2dzdHIgIuS4jeiDveaJvuWIsOimgeW/veeVpeeahOeJiOacrCAlcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NAorbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgIuWinumHj+W8j+WcsOaYvuekuuWPkeeOsOeahCBibGFtZSDmnaHnm64iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDUKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLovrnnlYzmj5DkuqTmmL7npLrnqbrnmoQgU0hBLTHvvIjpu5jorqTvvJrlhbPpl63vvIkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDYKK21zZ2lkICJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuS4jeaKiuagueaPkOS6pOS9nOS4uui+ueeVjO+8iOm7mOiupO+8muWFs+mXre+8iSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIuaYvuekuuWRveS7pOa2iOiAl+e7n+iuoSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi5by65Yi26L+b5bqm5pi+56S6IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ5Cittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIuaYvuekuuWIpOaWrSBibGFtZSDmnaHnm67kvY3np7vnmoTlvpfliIbor4rmlq3kv6Hmga8iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTAKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAi5pi+56S65Y6f5aeL5paH5Lu25ZCN77yI6buY6K6k77ya6Ieq5Yqo77yJIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUxCittc2dpZCAiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLmmL7npLrljp/lp4vnmoTooYzlj7fvvIjpu5jorqTvvJrlhbPpl63vvIkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTIKK21zZ2lkICJTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIgorbXNnc3RyICLmmL7npLrkuLrkuIDkuKrpgILlkIjmnLrlmajor7vlj5bnmoTmoLzlvI8iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTMKK21zZ2lkICJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIuS4uuavj+S4gOihjOaYvuekuuacuuWZqOmAgueUqOeahOaPkOS6pOS/oeaBryIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NAorbXNnaWQgIlVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBnaXQtYW5ub3RhdGUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuS9v+eUqOWSjCBnaXQtYW5ub3RhdGUg55u45ZCM55qE6L6T5Ye65qih5byP77yI6buY6K6k77ya5YWz6Zet77yJIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU1Cittc2dpZCAiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLmmL7npLrljp/lp4vml7bpl7TmiLPvvIjpu5jorqTvvJrlhbPpl63vvIkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTYKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuaYvuekuumVv+eahCBTSEExIOaPkOS6pOWPt++8iOm7mOiupO+8muWFs+mXre+8iSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NworbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIumakOiXj+S9nOiAheWQjeWtl+WSjOaXtumXtOaIs++8iOm7mOiupO+8muWFs+mXre+8iSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1OAorbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi5pi+56S65L2c6ICF55qE6YKu566x6ICM5LiN5piv5ZCN5a2X77yI6buY6K6k77ya5YWz6Zet77yJIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU5Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgIuW/veeVpeepuueZveW3ruW8giIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MCBidWlsdGluL2xvZy5jOjE3MDIKK21zZ2lkICJyZXYiCittc2dzdHIgIueJiOacrCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MAorbXNnaWQgIklnbm9yZSA8cmV2PiB3aGVuIGJsYW1pbmciCittc2dzdHIgIuWcqOaJp+ihjCBibGFtZSDmk43kvZzml7blv73nlaUgPOeJiOacrD4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjEKK21zZ2lkICJJZ25vcmUgcmV2aXNpb25zIGZyb20gPGZpbGU+IgorbXNnc3RyICLlv73nlaXmnaXoh6ogPOaWh+S7tj4g5Lit55qE54mI5pysIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYyCittc2dpZCAiY29sb3IgcmVkdW5kYW50IG1ldGFkYXRhIGZyb20gcHJldmlvdXMgbGluZSBkaWZmZXJlbnRseSIKK21zZ3N0ciAi5L2/55So6aKc6Imy6Ze06ZqU6L6T5Ye65LiO5YmN5LiA6KGM5LiN5ZCM55qE6YeN5aSN5YWD5L+h5oGvIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYzCittc2dpZCAiY29sb3IgbGluZXMgYnkgYWdlIgorbXNnc3RyICLkvp3mja7ml7bpl7TnnYDoibIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjQKK21zZ2lkICJTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCBiZXR0ZXIgbWF0Y2giCittc2dzdHIgIuiKsei0uemineWklueahOW+queOr+adpeaJvuWIsOabtOWlveeahOWMuemFjSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NQorbXNnaWQgIlVzZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4gaW5zdGVhZCBvZiBjYWxsaW5nIGdpdC1yZXYtbGlzdCIKK21zZ3N0ciAi5L2/55So5p2l6IeqIDzmlofku7Y+IOeahOS/ruiuoumbhuiAjOS4jeaYr+iwg+eUqCBnaXQtcmV2LWxpc3QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjYKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICLkvb/nlKggPOaWh+S7tj4g55qE5YaF5a655L2c5Li65pyA57uI55qE5Zu+54mHIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY3IGJ1aWx0aW4vYmxhbWUuYzo4NjgKK21zZ2lkICJzY29yZSIKK21zZ3N0ciAi5b6X5YiGIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY3Cittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAi5om+5Yiw5paH5Lu25YaF5Y+K6Leo5paH5Lu255qE6KGM5ou36LSdIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAi5om+5Yiw5paH5Lu25YaF5Y+K6Leo5paH5Lu255qE6KGM56e75YqoIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAibixtIgorbXNnc3RyICJuLG0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjkKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAi5Y+q5aSE55CG6KGM6IyD5Zu05ZyoIG4g5ZKMIG0g5LmL6Ze055qE77yM5LuOIDEg5byA5aeLIgorCisjOiBidWlsdGluL2JsYW1lLmM6OTIxCittc2dpZCAiLS1wcm9ncmVzcyBjYW4ndCBiZSB1c2VkIHdpdGggLS1pbmNyZW1lbnRhbCBvciBwb3JjZWxhaW4gZm9ybWF0cyIKK21zZ3N0ciAiLS1wcm9ncmVzcyDkuI3og73lkowgLS1pbmNyZW1lbnRhbCDmiJYgLS1wb3JjZWxhaW4g5ZCM5pe25L2/55SoIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBzdHJpbmcgaXMgdXNlZCB0byB0ZWxsIHVzIHRoZQorIy4gbWF4aW11bSBkaXNwbGF5IHdpZHRoIGZvciBhIHJlbGF0aXZlIHRpbWVzdGFtcCBpbgorIy4gImdpdCBibGFtZSIgb3V0cHV0LiAgRm9yIEMgbG9jYWxlLCAiNCB5ZWFycywgMTEKKyMuIG1vbnRocyBhZ28iLCB3aGljaCB0YWtlcyAyMiBwbGFjZXMsIGlzIHRoZSBsb25nZXN0CisjLiBhbW9uZyB2YXJpb3VzIGZvcm1zIG9mIHJlbGF0aXZlIHRpbWVzdGFtcHMsIGJ1dAorIy4geW91ciBsYW5ndWFnZSBtYXkgbmVlZCBtb3JlIG9yIGZld2VyIGRpc3BsYXkKKyMuIGNvbHVtbnMuCisjLgorIzogYnVpbHRpbi9ibGFtZS5jOjk3MgorbXNnaWQgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iCittc2dzdHIgIjQg5bm0IDExIOS4quaciOWJjSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjEwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZSIKK21zZ2lkX3BsdXJhbCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZXMiCittc2dzdHJbMF0gIuaWh+S7tiAlcyDlj6rmnIkgJWx1IOihjCIKK21zZ3N0clsxXSAi5paH5Lu2ICVzIOWPquaciSAlbHUg6KGMIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTEyNQorbXNnaWQgIkJsYW1pbmcgbGluZXMiCittc2dzdHIgIui/vei4quS7o+eggeihjCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyOQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOmAiemhuT5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzAKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstbF0gWy1mXSA8YnJhbmNoLW5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOmAiemhuT5dIFstbF0gWy1mXSA85YiG5pSv5ZCNPiBbPOi1t+Wni+eCuT5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMxCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs86YCJ6aG5Pl0gWy1yXSAoLWQgfCAtRCkgPOWIhuaUr+WQjT4uLi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzIKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzzpgInpobk+XSAoLW0gfCAtTSkgWzzml6fliIbmlK8+XSA85paw5YiG5pSvPiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMworbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1jIHwgLUMpIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOmAiemhuT5dICgtYyB8IC1DKSBbPOiAgeWIhuaUrz5dIDzmlrDliIbmlK8+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM0Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOmAiemhuT5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOmAiemhuT5dIFstciB8IC1hXSBbLS1mb3JtYXRdIgorCisjICDor5HogIXvvJrkv53mjIHljp/mjaLooYzmoLzlvI/vvIzlnKjovpPlh7rml7YgJXMg55qE5pu/5Luj5YaF5a655Lya6K6p5a2X56ym5Liy5Y+Y6ZW/CisjOiBidWlsdGluL2JyYW5jaC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBidXQgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyLlsIbopoHliKDpmaTnmoTliIbmlK8gJyVzJyDlt7Lnu4/ooqvlkIjlubbliLBcbiIKKyIgICAgICAgICAnJXMn77yM5L2G5pyq5ZCI5bm25YiwIEhFQUTjgIIiCisKKyMgIOivkeiAhe+8muS/neaMgeWOn+aNouihjOagvOW8j++8jOWcqOi+k+WHuuaXtiAlcyDnmoTmm7/ku6PlhoXlrrnkvJrorqnlrZfnrKbkuLLlj5jplb8KKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorIuW5tuacquWIoOmZpOWIhuaUryAnJXMn77yMIOiZveeEtuWug+W3sue7j+WQiOW5tuWIsCBIRUFE77yMXG4iCisiICAgICAgICAg54S26ICM5Y205bCa5pyq6KKr5ZCI5bm25Yiw5YiG5pSvICclcycg44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgIuaXoOazleafpeivoiAnJXMnIOaMh+WQkeeahOaPkOS6pOWvueixoSIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisi5YiG5pSvICclcycg5rKh5pyJ5a6M5YWo5ZCI5bm244CCXG4iCisi5aaC5p6c5oKo56Gu6K6k6KaB5Yig6Zmk5a6D77yM5omn6KGMICdnaXQgYnJhbmNoIC1EICVzJ+OAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODkKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICLmm7TmlrDphY3nva7mlofku7blpLHotKUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjIwCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICLkuI3og73lsIYgLWEg5ZKMIC1kIOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjYKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgIuaXoOazleafpeivoiBIRUFEIOaMh+WQkeeahOaPkOS6pOWvueixoSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSBicmFuY2ggJyVzJyBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICLml6Dms5XliKDpmaTmo4Dlh7rkuo4gJyUyJHMnIOeahOWIhuaUryAnJTEkcyfjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICLmnKrog73mib7liLDov5znqIvot5/ouKrliIbmlK8gJyVzJ+OAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAi5YiG5pSvICclcycg5pyq5Y+R546w44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgIuaXoOazleWIoOmZpOi/nOeoi+i3n+i4quWIhuaUryAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAi5peg5rOV5Yig6Zmk5YiG5pSvICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAi5bey5Yig6Zmk6L+c56iL6Lef6Liq5YiG5pSvICVz77yI5pu+5Li6ICVz77yJ44CCXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICLlt7LliKDpmaTliIbmlK8gJXPvvIjmm77kuLogJXPvvInjgIJcbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjkgYnVpbHRpbi90YWcuYzo2MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICLkuI3og73op6PmnpDmoLzlvI/ljJblrZfnrKbkuLIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDYwCittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAi5LiN6IO96Kej5p6QIEhFQUQg5o+Q5LqkIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEICglcykgcG9pbnRzIG91dHNpZGUgb2YgcmVmcy9oZWFkcy8iCittc2dzdHIgIkhFQUQgKCVzKSDmjIflkJEgcmVmcy9oZWFkcy8g5LmL5aSWIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgcmViYXNlZCBhdCAlcyIKK21zZ3N0ciAi5YiG5pSvICVzIOato+iiq+WPmOWfuuWIsCAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIGJpc2VjdGVkIGF0ICVzIgorbXNnc3RyICLliIbmlK8gJXMg5q2j6KKr5LqM5YiG5p+l5om+5LqOICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUwMgorbXNnaWQgImNhbm5vdCBjb3B5IHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAi5peg5rOV5ou36LSd5b2T5YmN5YiG5pSv5Zug5Li65LiN5aSE5LqO5Lu75L2V5YiG5pSv5LiK44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUwNAorbXNnaWQgImNhbm5vdCByZW5hbWUgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICLml6Dms5Xph43lkb3lkI3lvZPliY3liIbmlK/lm6DkuLrkuI3lpITkuo7ku7vkvZXliIbmlK/kuIrjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYnJhbmNoIG5hbWU6ICclcyciCittc2dzdHIgIuaXoOaViOeahOWIhuaUr+WQje+8miclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQyCittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIuWIhuaUr+mHjeWRveWQjeWksei0pSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDQKK21zZ2lkICJCcmFuY2ggY29weSBmYWlsZWQiCittc2dzdHIgIuWIhuaUr+aLt+i0neWksei0pSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhIGNvcHkgb2YgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyIKK21zZ3N0ciAi5bey5Li66ZSZ6K+v5ZG95ZCN55qE5YiG5pSvICclcycg5Yib5bu65LqG5LiA5Liq5Ymv5pysIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAi5bey5bCG6ZSZ6K+v5ZG95ZCN55qE5YiG5pSvICclcycg6YeN5ZG95ZCNIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICLliIbmlK/ph43lkb3lkI3kuLogJXPvvIzkvYYgSEVBRCDmsqHmnInmm7TmlrDvvIEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY2Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICLliIbmlK/ooqvph43lkb3lkI3vvIzkvYbmm7TmlrDphY3nva7mlofku7blpLHotKUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY4Cittc2dpZCAiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIuWIhuaUr+W3suaLt+i0ne+8jOS9huabtOaWsOmFjee9ruaWh+S7tuWksei0pSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaFxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBzdHJpcHBlZC5cbiIKK21zZ3N0ciAiIgorIuivt+e8lui+keWIhuaUr+eahOaPj+i/sFxuIgorIiAgJXNcbiIKKyLku6UgJyVjJyDlvIDlpLTnmoTooYzlsIbooqvov4fmu6TjgIJcbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTgKK21zZ2lkICJHZW5lcmljIG9wdGlvbnMiCittc2dzdHIgIumAmueUqOmAiemhuSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjAKK21zZ2lkICJzaG93IGhhc2ggYW5kIHN1YmplY3QsIGdpdmUgdHdpY2UgZm9yIHVwc3RyZWFtIGJyYW5jaCIKK21zZ3N0ciAi5pi+56S65ZOI5biM5YC85ZKM5Li76aKY77yM6Iul5Y+C5pWw5Ye6546w5Lik5qyh5YiZ5pi+56S65LiK5ri45YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMQorbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgIuS4jeaYvuekuuS/oeaBryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjIKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIKK21zZ3N0ciAi6K6+572u6Lef6Liq5qih5byP77yI5Y+C6KeBIGdpdC1wdWxsKDEp77yJIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNAorbXNnaWQgImRvIG5vdCB1c2UiCittc2dzdHIgIuS4jeimgeS9v+eUqCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYgYnVpbHRpbi9yZWJhc2UuYzo1MTMKK21zZ2lkICJ1cHN0cmVhbSIKK21zZ3N0ciAi5LiK5ri4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNgorbXNnaWQgImNoYW5nZSB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAi5pS55Y+Y5LiK5ri45L+h5oGvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNworbXNnaWQgInVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICLlj5bmtojkuIrmuLjkv6Hmga/nmoTorr7nva4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI4Cittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICLkvb/nlKjlvanoibLovpPlh7oiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI5Cittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi5L2c55So5LqO6L+c56iL6Lef6Liq5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMSBidWlsdGluL2JyYW5jaC5jOjYzMworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIuWPquaJk+WNsOWMheWQq+ivpeaPkOS6pOeahOWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzIgYnVpbHRpbi9icmFuY2guYzo2MzQKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLlj6rmiZPljbDkuI3ljIXlkKvor6Xmj5DkuqTnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM3Cittc2dpZCAiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIKK21zZ3N0ciAi5YW35L2T55qEIGdpdC1icmFuY2gg5Yqo5L2c77yaIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzOAorbXNnaWQgImxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICLliJflh7rov5znqIvot5/ouKrlj4rmnKzlnLDliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQwCittc2dpZCAiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giCittc2dzdHIgIuWIoOmZpOWujOWFqOWQiOW5tueahOWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDEKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICLliKDpmaTliIbmlK/vvIjljbPkvb/msqHmnInlkIjlubbvvIkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQyCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgIuenu+WKqC/ph43lkb3lkI3kuIDkuKrliIbmlK/vvIzku6Xlj4rlroPnmoTlvJXnlKjml6Xlv5ciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi56e75YqoL+mHjeWRveWQjeS4gOS4quWIhuaUr++8jOWNs+S9v+ebruagh+W3suWtmOWcqCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDQKK21zZ2lkICJjb3B5IGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICLmi7fotJ3kuIDkuKrliIbmlK/lkozlroPnmoTlvJXnlKjml6Xlv5ciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ1Cittc2dpZCAiY29weSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICLmi7fotJ3kuIDkuKrliIbmlK/vvIzljbPkvb/nm67moIflt7LlrZjlnKgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ2Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgIuWIl+WHuuWIhuaUr+WQjSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IGN1cnJlbnQgYnJhbmNoIG5hbWUiCittc2dzdHIgIuaYvuekuuW9k+WJjeWIhuaUr+WQjSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDgKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAi5Yib5bu65YiG5pSv55qE5byV55So5pel5b+XIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MAorbXNnaWQgImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICLmoIforrDliIbmlK/nmoTmj4/ov7AiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUxCittc2dpZCAiZm9yY2UgY3JlYXRpb24sIG1vdmUvcmVuYW1lLCBkZWxldGlvbiIKK21zZ3N0ciAi5by65Yi25Yib5bu644CB56e75YqoL+mHjeWRveWQjeOAgeWIoOmZpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTIKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAi5Y+q5omT5Y2w5bey57uP5ZCI5bm255qE5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAi5Y+q5omT5Y2w5bCa5pyq5ZCI5bm255qE5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NAorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAi5Lul5YiX55qE5pa55byP5pi+56S65YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NyBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQyIGJ1aWx0aW4vbm90ZXMuYzo0MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTggYnVpbHRpbi9ub3Rlcy5jOjU4MSBidWlsdGluL25vdGVzLmM6NTg0CisjOiBidWlsdGluL3RhZy5jOjQzMworbXNnaWQgIm9iamVjdCIKK21zZ3N0ciAi5a+56LGhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1OAorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAi5Y+q5omT5Y2w5oyH5ZCR6K+l5a+56LGh55qE5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY2MCBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ4IGJ1aWx0aW4vdGFnLmM6NDQwCittc2dpZCAic29ydGluZyBhbmQgZmlsdGVyaW5nIGFyZSBjYXNlIGluc2Vuc2l0aXZlIgorbXNnc3RyICLmjpLluo/lkozov4fmu6TlsZ7kuo7lpKflsI/lhpnkuI3mlY/mhJ8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzggYnVpbHRpbi90YWcuYzo0MzgKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAi6L6T5Ye65qC85byPIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY4NCBidWlsdGluL2Nsb25lLmM6Nzg1Cittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgIkhFQUQg5rKh5pyJ5L2N5LqOIC9yZWZzL2hlYWRzIOS5i+S4i++8gSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MDgKK21zZ2lkICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIOWSjCAtLXZlcmJvc2Ug5LiN5YW85a65IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyMyBidWlsdGluL2JyYW5jaC5jOjc3NyBidWlsdGluL2JyYW5jaC5jOjc4NgorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICLlv4Xpobvmj5DkvpvliIbmlK/lkI0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzUzCittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAi5LiN6IO95ZCR5YiG56a75aS05oyH6ZKI5o+Q5L6b5o+P6L+wIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OAorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICLkuI3og73kuLrkuIDkuKrku6XkuIrnmoTliIbmlK/nvJbovpHmj4/ov7AiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIgorbXNnc3RyICLliIbmlK8gJyVzJyDlsJrml6Dmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIKK21zZ3N0ciAi5rKh5pyJ5YiG5pSvICclcyfjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzgzCittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgZm9yIGEgY29weSBvcGVyYXRpb24iCittc2dzdHIgIuS4uuaLt+i0neaTjeS9nOaPkOS+m+S6huWkquWkmueahOWIhuaUr+WQjSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTIKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZm9yIGEgcmVuYW1lIG9wZXJhdGlvbiIKK21zZ3N0ciAi5Li66YeN5ZG95ZCN5pON5L2c5o+Q5L6b5LqG5aSq5aSa55qE5Y+C5pWwIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5NworbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byBzZXQgbmV3IHVwc3RyZWFtIgorbXNnc3RyICLkuLrorr7nva7mlrDkuIrmuLjmj5DkvpvkuoblpKrlpJrnmoTlj4LmlbAiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3Qgc2V0IHVwc3RyZWFtIG9mIEhFQUQgdG8gJXMgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAi5peg5rOV6K6+572uIEhFQUQg55qE5LiK5ri45Li6ICVz77yM5Zug5Li6IEhFQUQg5rKh5pyJ5oyH5ZCR5Lu75L2V5YiG5pSv44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwNCBidWlsdGluL2JyYW5jaC5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaCAnJXMnIgorbXNnc3RyICLmsqHmnInmraTliIbmlK8gJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIuWIhuaUryAnJXMnIOS4jeWtmOWcqCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjEKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gdW5zZXQgdXBzdHJlYW0iCittc2dzdHIgIuS4uuWPlua2iOS4iua4uOiuvue9ruaTjeS9nOaPkOS+m+S6huWkquWkmueahOWPguaVsCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjUKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICLml6Dms5Xlj5bmtoggSEVBRCDnmoTkuIrmuLjorr7nva7lm6DkuLrlroPmsqHmnInmjIflkJHkuIDkuKrliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi5YiG5pSvICclcycg5rKh5pyJ5LiK5ri45L+h5oGvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MQorbXNnaWQgIiIKKyJUaGUgLWEsIGFuZCAtciwgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IHRha2UgYSBicmFuY2ggbmFtZS5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdXNlOiAtYXwtciAtLWxpc3QgPHBhdHRlcm4+PyIKK21zZ3N0ciAiIgorIidnaXQgYnJhbmNoJyDnmoQgLWEg5ZKMIC1yIOmAiemhueS4jeW4puS4gOS4quWIhuaUr+WQjeOAglxuIgorIuaCqOaYr+WQpuaDs+imgeS9v+eUqO+8mi1hfC1yIC0tbGlzdCA85qih5byPPu+8nyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDUKK21zZ2lkICIiCisidGhlICctLXNldC11cHN0cmVhbScgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgJy0tdHJhY2snIG9yICIKKyInLS1zZXQtdXBzdHJlYW0tdG8nIGluc3RlYWQuIgorbXNnc3RyICIiCisi5LiN5YaN5pSv5oyB6YCJ6aG5ICctLXNldC11cHN0cmVhbSfjgILor7fkvb/nlKggJy0tdHJhY2snIOaIliAnLS1zZXQtdXBzdHJlYW0tdG8n44CCIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE1IGJ1aWx0aW4vYnVuZGxlLmM6MjMKK21zZ2lkICJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSBjcmVhdGUgWzzpgInpobk+XSA85paH5Lu2PiA8Z2l0LXJldi1saXN0IOWPguaVsD4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYgYnVpbHRpbi9idW5kbGUuYzoyOAorbXNnaWQgImdpdCBidW5kbGUgdmVyaWZ5IFs8b3B0aW9ucz5dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzzpgInpobk+XSA85paH5Lu2PiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNyBidWlsdGluL2J1bmRsZS5jOjMzCittc2dpZCAiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDzmlofku7Y+IFs85byV55So5ZCNPi4uLl0iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTggYnVpbHRpbi9idW5kbGUuYzozOAorbXNnaWQgImdpdCBidW5kbGUgdW5idW5kbGUgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICJnaXQgYnVuZGxlIHVuYnVuZGxlIDzmlofku7Y+IFs85byV55So5ZCNPi4uLl0iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzc1Cittc2dpZCAiZG8gbm90IHNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgIuS4jeaYvuekuui/m+W6puihqCIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2OCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNzcKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICLmmL7npLrov5vluqbooagiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzc5Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb2JqZWN0IHdyaXRpbmcgcGhhc2UiCittc2dzdHIgIuWcqOWvueixoeWGmeWFpemYtuauteaYvuekuui/m+W6puihqCIKKworIzogYnVpbHRpbi9idW5kbGUuYzo3MyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODIKK21zZ2lkICJzaW1pbGFyIHRvIC0tYWxsLXByb2dyZXNzIHdoZW4gcHJvZ3Jlc3MgbWV0ZXIgaXMgc2hvd24iCittc2dzdHIgIuW9k+i/m+W6puihqOaYvuekuuaXtuexu+S8vOS6jiAtLWFsbC1wcm9ncmVzcyIKKworIzogYnVpbHRpbi9idW5kbGUuYzo5MworbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIumcgOimgeS4gOS4quS7k+W6k+adpeWIm+W7uuWMheOAgiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxMDQKK21zZ2lkICJkbyBub3Qgc2hvdyBidW5kbGUgZGV0YWlscyIKK21zZ3N0ciAi5LiN5pi+56S6IGJ1bmRsZSDnu4boioIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAiJXMg5Y+v5LulXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICLpnIDopoHkuIDkuKrku5PlupPmnaXop6PljIXjgIIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTY4NgorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgIuWGl+mVv+i+k+WHuu+8m+W/hemhu+e9ruS6juWtkOWRveS7pOS5i+WJjSIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzoxNzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIuacquefpeWtkOWRveS7pO+8miVzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTk1Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHBhdGg+XSA8b2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDznsbvlnos+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD086Lev5b6EPl0gPOWvueixoT4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTYKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjE3Cittc2dpZCAib25seSBvbmUgYmF0Y2ggb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQiCittc2dzdHIgIuWPquiDveaMh+WumuS4gOS4quaJueWkhOeQhumAiemhuSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNQorbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiPOexu+Weiz4g5Y+v5Lul5piv5YW25Lit5LmL5LiA77yaYmxvYuOAgXRyZWXjgIFjb21taXTjgIF0YWciCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzYKK21zZ2lkICJzaG93IG9iamVjdCB0eXBlIgorbXNnc3RyICLmmL7npLrlr7nosaHnsbvlnosiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzcKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICLmmL7npLrlr7nosaHlpKflsI8iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzkKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgIuW9k+ayoeaciemUmeivr+aXtumAgOWHuuW5tui/lOWbnumbtiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MAorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICLnvo7op4LlnLDmiZPljbDlr7nosaHnmoTlhoXlrrkiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDIKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAi5a+55LqO5pWw5o2u5a+56LGh77yM5a+55YW25YaF5a655YGa5paH5pys6L2s5o2iIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ0Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIGZpbHRlcnMgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAi5a+55LqO5pWw5o2u5a+56LGh77yM5a+55YW25YaF5a655YGa6L+H5rukIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ1IGdpdC1zdWJtb2R1bGUuc2g6MTAwMgorbXNnaWQgImJsb2IiCittc2dzdHIgIuaVsOaNruWvueixoSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NgorbXNnaWQgInVzZSBhIHNwZWNpZmljIHBhdGggZm9yIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorbXNnc3RyICLlr7nkuo4gLS10ZXh0Y29udi8tLWZpbHRlcnMg5L2/55So5LiA5Liq54m55a6a55qE6Lev5b6EIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ4Cittc2dpZCAiYWxsb3cgLXMgYW5kIC10IHRvIHdvcmsgd2l0aCBicm9rZW4vY29ycnVwdCBvYmplY3RzIgorbXNnc3RyICLlhYHorrggLXMg5ZKMIC10IOWvueaNn+Wdj+eahOWvueixoeeUn+aViCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0OQorbXNnaWQgImJ1ZmZlciAtLWJhdGNoIG91dHB1dCIKK21zZ3N0ciAi57yT5YayIC0tYmF0Y2gg55qE6L6T5Ye6IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjUxCittc2dpZCAic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLmmL7npLrku47moIflh4bovpPlhaXmj5DkvpvnmoTlr7nosaHnmoTkv6Hmga/lkozlhoXlrrkiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTUKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIuaYvuekuuS7juagh+WHhui+k+WFpeaPkOS+m+eahOWvueixoeeahOS/oeaBryIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1OQorbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAi6Lef6ZqP5qCR5YaF56ym5Y+36ZO+5o6l77yI5ZKMIC0tYmF0Y2gg5oiWIC0tYmF0Y2gtY2hlY2sg5YWx55So77yJIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYxCittc2dpZCAic2hvdyBhbGwgb2JqZWN0cyB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjayIKK21zZ3N0ciAi5L2/55SoIC0tYmF0Y2gg5oiWIC0tYmF0Y2gtY2hlY2sg5Y+C5pWw5pi+56S65omA5pyJ5a+56LGhIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYzCittc2dpZCAiZG8gbm90IG9yZGVyIC0tYmF0Y2gtYWxsLW9iamVjdHMgb3V0cHV0IgorbXNnc3RyICLkuI3opoHlr7kgLS1iYXRjaC1hbGwtb2JqZWN0cyDnmoTovpPlh7rmjpLluo8iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjEzCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA85bGe5oCnPi4uLl0gWy0tXSA86Lev5b6E5ZCNPi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTQKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA85bGe5oCnPi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIxCittc2dpZCAicmVwb3J0IGFsbCBhdHRyaWJ1dGVzIHNldCBvbiBmaWxlIgorbXNnc3RyICLmiqXlkYrorr7nva7lnKjmlofku7bkuIrnmoTmiYDmnInlsZ7mgKciCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIyCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIuWPquS9v+eUqOe0ouW8leS4reeahCAuZ2l0YXR0cmlidXRlcyIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNSBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAyCittc2dpZCAicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iCittc2dzdHIgIuS7juagh+WHhui+k+WFpeivu+WHuuaWh+S7tuWQjSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjUgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNworbXNnaWQgInRlcm1pbmF0ZSBpbnB1dCBhbmQgb3V0cHV0IHJlY29yZHMgYnkgYSBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICLovpPlhaXlkozovpPlh7rnmoTorrDlvZXkvb/nlKggTlVMIOWtl+espue7iOe7kyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMSBidWlsdGluL2NoZWNrb3V0LmM6MTQ2NCBidWlsdGluL2djLmM6NTM3CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk5Cittc2dpZCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLkuI3mmL7npLrov5vluqbmiqXlkYoiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjkKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBpbnB1dCBwYXRocyIKK21zZ3N0ciAi5pi+56S65pyq5Yy56YWN55qE6L6T5YWl6Lev5b6EIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjMxCittc2dpZCAiaWdub3JlIGluZGV4IHdoZW4gY2hlY2tpbmciCittc2dzdHIgIuajgOafpeaXtuW/veeVpee0ouW8lSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICJjYW5ub3Qgc3BlY2lmeSBwYXRobmFtZXMgd2l0aCAtLXN0ZGluIgorbXNnc3RyICLkuI3og73lkIzml7bmjIflrprot6/lvoTlj4ogLS1zdGRpbiDlj4LmlbAiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY2Cittc2dpZCAiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iCittc2dzdHIgIi16IOmcgOimgeWSjCAtLXN0ZGluIOWPguaVsOWFseeUqOaJjeacieaEj+S5iSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjgKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZCIKK21zZ3N0ciAi5pyq5oyH5a6a6Lev5b6EIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MgorbXNnaWQgIi0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorbXNnc3RyICLlj4LmlbAgLS1xdWlldCDlj6rlnKjmj5DkvpvkuIDkuKrot6/lvoTlkI3ml7bmnInmlYgiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc0Cittc2dpZCAiY2Fubm90IGhhdmUgYm90aCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UiCittc2dzdHIgIuS4jeiDveWQjOaXtuaPkOS+myAtLXF1aWV0IOWSjCAtLXZlcmJvc2Ug5Y+C5pWwIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3NworbXNnaWQgIi0tbm9uLW1hdGNoaW5nIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXZlcmJvc2UiCittc2dzdHIgIi0tbm9uLW1hdGNoaW5nIOmAiemhueWPquWcqOS9v+eUqCAtLXZlcmJvc2Ug5pe25pyJ5pWIIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo5Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stbWFpbG1hcCBbPOmAiemhuT5dIDzogZTns7vlnLDlnYA+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoxNAorbXNnaWQgImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICLov5jku47moIflh4bovpPlhaXor7vlj5bogZTns7vlnLDlnYAiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb250YWN0OiAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q6IGU57O75Zyw5Z2A77yaJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjQ4Cittc2dpZCAibm8gY29udGFjdHMgc3BlY2lmaWVkIgorbXNnc3RyICLmnKrmjIflrprogZTns7vlnLDlnYAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMzEKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFs86YCJ6aG5Pl0gWy0tXSBbPOaWh+S7tj4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTQ4Cittc2dpZCAic3RhZ2Ugc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMyBvciBhbGwiCittc2dzdHIgIue0ouW8leWAvOW6lOivpeWPluWAvCAxIOWIsCAzIOaIluiAhSBhbGwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjQKK21zZ2lkICJjaGVjayBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAi5qOA5Ye657Si5byV5Yy655qE5omA5pyJ5paH5Lu2IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY1Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICLlvLrliLbopobnm5bnjrDmnInnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjcKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICLlrZjlnKjmiJbkuI3lnKjntKLlvJXkuK3nmoTmlofku7bpg73msqHmnInorablkYoiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjkKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgIuS4jeajgOWHuuaWsOaWh+S7tiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MQorbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICLmm7TmlrDntKLlvJXkuK3mlofku7bnmoTnirbmgIHkv6Hmga8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzUKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIuS7juagh+WHhui+k+WFpeivu+WPlui3r+W+hOWIl+ihqCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NworbXNnaWQgIndyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcyIKK21zZ3N0ciAi5bCG5YaF5a655YaZ5YWl5Li05pe25paH5Lu2IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc4IGJ1aWx0aW4vY29sdW1uLmM6MzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAzCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxMSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwOQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY3MgorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAi5a2X56ym5LiyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc5Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAi5Zyo5Yib5bu65paH5Lu25pe277yM5Zyo5YmN6Z2i5Yqg5LiKIDzlrZfnrKbkuLI+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTgxCittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgIuS7juaMh+WumuaaguWtmOWMuuS4reaLt+WHuuaWh+S7tiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMxCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIDxicmFuY2g+IgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzzpgInpobk+XSA85YiG5pSvPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMyCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzzpgInpobk+XSBbPOWIhuaUrz5dIC0tIDzmlofku7Y+Li4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzcKK21zZ2lkICJnaXQgc3dpdGNoIFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0iCittc2dzdHIgImdpdCBzd2l0Y2ggWzzpgInpobk+XSBbPOWIhuaUrz5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIKK21zZ2lkICJnaXQgcmVzdG9yZSBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PGJyYW5jaD5dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc3RvcmUgWzzpgInpobk+XSBbLS1zb3VyY2U9POWIhuaUrz5dIDzmlofku7Y+Li4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc1IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgIui3r+W+hCAnJXMnIOayoeacieaIkeS7rOeahOeJiOacrCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NyBidWlsdGluL2NoZWNrb3V0LmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIui3r+W+hCAnJXMnIOayoeacieS7luS7rOeahOeJiOacrCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLot6/lvoQgJyVzJyDmsqHmnInlhajpg6jlv4XpnIDnmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLot6/lvoQgJyVzJyDmsqHmnInlv4XpnIDnmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgInBhdGggJyVzJ++8muaXoOazleWQiOW5tiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAi5peg5rOV5Li6ICclcycg5re75Yqg5ZCI5bm257uT5p6cIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAi6YeN5paw5Yib5bu65LqGICVkIOS4quWQiOW5tuWGsueqgSIKK21zZ3N0clsxXSAi6YeN5paw5Yib5bu65LqGICVkIOS4quWQiOW5tuWGsueqgSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkICVkIHBhdGggZnJvbSAlcyIKK21zZ2lkX3BsdXJhbCAiVXBkYXRlZCAlZCBwYXRocyBmcm9tICVzIgorbXNnc3RyWzBdICLku44gJTIkcyDmm7TmlrDkuoYgJTEkZCDkuKrot6/lvoQiCittc2dzdHJbMV0gIuS7jiAlMiRzIOabtOaWsOS6hiAlMSRkIOS4qui3r+W+hCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkICVkIHBhdGggZnJvbSB0aGUgaW5kZXgiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSB0aGUgaW5kZXgiCittc2dzdHJbMF0gIuS7jue0ouW8leWMuuabtOaWsOS6hiAlZCDkuKrot6/lvoQiCittc2dzdHJbMV0gIuS7jue0ouW8leWMuuabtOaWsOS6hiAlZCDkuKrot6/lvoQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTIgYnVpbHRpbi9jaGVja291dC5jOjQxNSBidWlsdGluL2NoZWNrb3V0LmM6NDE4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiJyVzJyDkuI3og73lnKjmm7TmlrDot6/lvoTml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjUgYnVpbHRpbi9jaGVja291dC5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiclcycg5LiN6IO95ZKMICVzIOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iCittc2dzdHIgIuS4jeiDveWQjOaXtuabtOaWsOi3r+W+hOW5tuWIh+aNouWIsOWIhuaUryclcyfjgIIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibmVpdGhlciAnJXMnIG9yICclcycgaXMgc3BlY2lmaWVkIgorbXNnc3RyICInJXMnIOaIliAnJXMnIOmDveayoeacieaMh+WumiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgdXNlZCB3aGVuICclcycgaXMgbm90IHNwZWNpZmllZCIKK21zZ3N0ciAi5pyq5oyH5a6aICclMiRzJyDml7bvvIzlv4Xpobvkvb/nlKggJyUxJHMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQ1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBvciAnJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiclcycg5oiWICclcycg5LiN6IO95ZKMICVzIOS4gOi1t+S9v+eUqCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjUwOSBidWlsdGluL2NoZWNrb3V0LmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAi6Lev5b6EICclcycg5pyq5ZCI5bm2IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njg0IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MTA2Cittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIuaCqOmcgOimgeWFiOino+WGs+W9k+WJjee0ouW8leeahOWGsueqgSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IGNvbnRpbnVlIHdpdGggc3RhZ2VkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyBmaWxlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuS4jeiDvee7p+e7re+8jOS4i+WIl+aWh+S7tuacieaaguWtmOeahOS/ruaUue+8mlxuIgorIiVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICLkuI3og73lr7kgJyVzJyDmiafooYwgcmVmbG9nIOaTjeS9nO+8miVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NzkKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCDnm67liY3kvY3kuo4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODMgYnVpbHRpbi9jbG9uZS5jOjcxNworbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgSEVBRCIKK21zZ3N0ciAi5LiN6IO95pu05pawIEhFQUQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi6YeN572u5YiG5pSvICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAi5bey57uP5L2N5LqOICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi5YiH5o2i5bm26YeN572u5YiG5pSvICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NiBidWlsdGluL2NoZWNrb3V0LmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLliIfmjaLliLDkuIDkuKrmlrDliIbmlK8gJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIuWIh+aNouWIsOWIhuaUryAnJXMnXG4iCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogYnVpbHRpbi9jaGVja291dC5jOjk0OQorIywgYy1mb3JtYXQKK21zZ2lkICIgLi4uIGFuZCAlZCBtb3JlLlxuIgorbXNnc3RyICIgLi4uIOWPiuWFtuWugyAlZCDkuKrjgIJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorIuitpuWRiu+8muaCqOato+S4ouS4iyAlZCDkuKrmj5DkuqTvvIzmnKrlkozku7vkvZXliIbmlK/lhbPogZTvvJpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzFdICIiCisi6K2m5ZGK77ya5oKo5q2j5Lii5LiLICVkIOS4quaPkOS6pO+8jOacquWSjOS7u+S9leWIhuaUr+WFs+iBlO+8mlxuIgorIlxuIgorIiVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgaXQgYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ2lkX3BsdXJhbCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzBdICIiCisi5aaC5p6c5oKo5oOz6KaB6YCa6L+H5Yib5bu65paw5YiG5pSv5L+d5a2Y5a6D77yM6L+Z5Y+v6IO95piv5LiA5Liq5aW95pe25YCZ44CCXG4iCisi5aaC5LiL5pON5L2c77yaXG4iCisiXG4iCisiIGdpdCBicmFuY2ggPOaWsOWIhuaUr+WQjT4gJXNcbiIKKyJcbiIKK21zZ3N0clsxXSAiIgorIuWmguaenOaCqOaDs+imgemAmui/h+WIm+W7uuaWsOWIhuaUr+S/neWtmOWug+S7rO+8jOi/meWPr+iDveaYr+S4gOS4quWlveaXtuWAmeOAglxuIgorIuWmguS4i+aTjeS9nO+8mlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDzmlrDliIbmlK/lkI0+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA5Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAi5Zyo54mI5pys6YGN5Y6G5pe26YGH5Yiw5YaF6YOo6ZSZ6K+vIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxMworbXNnaWQgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIgorbXNnc3RyICLkuYvliY3nmoQgSEVBRCDkvY3nva7mmK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDUzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzE1Cittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAi5oKo5L2N5LqO5LiA5Liq5bCa5pyq5Yid5aeL5YyW55qE5YiG5pSvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBjb3VsZCBiZSBib3RoIGEgbG9jYWwgZmlsZSBhbmQgYSB0cmFja2luZyBicmFuY2guXG4iCisiUGxlYXNlIHVzZSAtLSAoYW5kIG9wdGlvbmFsbHkgLS1uby1ndWVzcykgdG8gZGlzYW1iaWd1YXRlIgorbXNnc3RyICIiCisiJyVzJyDml6Llj6/ku6XmmK/kuIDkuKrmnKzlnLDmlofku7bvvIzkuZ/lj6/ku6XmmK/kuIDkuKrot5/ouKrliIbmlK/jgIJcbiIKKyLor7fkvb/nlKggLS3vvIjlkozlj6/pgInnmoQgLS1uby1ndWVzc++8ieadpea2iOmZpOatp+S5iSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzUKK21zZ2lkICIiCisiSWYgeW91IG1lYW50IHRvIGNoZWNrIG91dCBhIHJlbW90ZSB0cmFja2luZyBicmFuY2ggb24sIGUuZy4gJ29yaWdpbicsXG4iCisieW91IGNhbiBkbyBzbyBieSBmdWxseSBxdWFsaWZ5aW5nIHRoZSBuYW1lIHdpdGggdGhlIC0tdHJhY2sgb3B0aW9uOlxuIgorIlxuIgorIiAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4vPG5hbWU+XG4iCisiXG4iCisiSWYgeW91J2QgbGlrZSB0byBhbHdheXMgaGF2ZSBjaGVja291dHMgb2YgYW4gYW1iaWd1b3VzIDxuYW1lPiBwcmVmZXJcbiIKKyJvbmUgcmVtb3RlLCBlLmcuIHRoZSAnb3JpZ2luJyByZW1vdGUsIGNvbnNpZGVyIHNldHRpbmdcbiIKKyJjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbiBpbiB5b3VyIGNvbmZpZy4iCittc2dzdHIgIiIKKyLlpoLmnpzmgqjmg7PopoHmo4Dlh7rkuIDkuKrov5znqIvot5/ouKrliIbmlK/vvIzkvovlpoLlnKggJ29yaWdpbicg5LiK55qE77yM5oKo5Y+v5Lul5L2/55So5YiG5pSvXG4iCisi5YWo5ZCN5ZKMIC0tdHJhY2sg6YCJ6aG577yaXG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi885ZCN56ewPlxuIgorIlxuIgorIuWmguaenOaCqOaAu+aYr+WWnOasouS9v+eUqOaooeeziueahOeugOefreWIhuaUr+WQjSA85ZCN56ewPu+8jOiAjOS4jeWWnOasouWmgiAnb3JpZ2luJyDnmoTov5znqItcbiIKKyLlkI3np7DvvIzlj6/ku6XlnKjphY3nva7kuK3orr7nva4gY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW7jgIIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbWF0Y2hlZCBtdWx0aXBsZSAoJWQpIHJlbW90ZSB0cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiJyVzJyDljLnphY3lpJrkuKrvvIglZCDkuKrvvInov5znqIvot5/ouKrliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjExCittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkIgorbXNnc3RyICLlj6rmnJ/mnJvkuIDkuKrlvJXnlKgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCwgJWQgZ2l2ZW4uIgorbXNnc3RyICLlupTlj6rmnInkuIDkuKrlvJXnlKjvvIzljbTnu5nlh7rkuoYgJWQg5LiqIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI3NCBidWlsdGluL3dvcmt0cmVlLmM6MjgzIGJ1aWx0aW4vd29ya3RyZWUuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICLml6DmlYjlvJXnlKjvvJolcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyODcgYnVpbHRpbi9jaGVja291dC5jOjE2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICLlvJXnlKjkuI3mmK/kuIDkuKrmoJHvvJolcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCB0YWcgJyVzJyIKK21zZ3N0ciAi5pyf5pyb5LiA5Liq5YiG5pSv77yM5b6X5Yiw5qCH562+ICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM2CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgcmVtb3RlIGJyYW5jaCAnJXMnIgorbXNnc3RyICLmnJ/mnJvkuIDkuKrliIbmlK/vvIzlvpfliLDov5znqIvliIbmlK8gJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzcgYnVpbHRpbi9jaGVja291dC5jOjEzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCAnJXMnIgorbXNnc3RyICLmnJ/mnJvkuIDkuKrliIbmlK/vvIzlvpfliLAgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCBjb21taXQgJyVzJyIKK21zZ3N0ciAi5pyf5pyb5LiA5Liq5YiG5pSv77yM5b6X5Yiw5o+Q5LqkICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzU2Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIG1lcmdpbmdcbiIKKyJDb25zaWRlciBcImdpdCBtZXJnZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyLkuI3og73lnKjlkIjlubbml7bliIfmjaLliIbmlK9cbiIKKyLogIPomZHkvb/nlKggXCJnaXQgbWVyZ2UgLS1xdWl0XCIg5oiWIFwiZ2l0IHdvcmt0cmVlIGFkZFwi44CCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2MAorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb25cbiIKKyJDb25zaWRlciBcImdpdCBhbSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyLkuI3og73lnKjkuIDkuKogYW0g5Lya6K+d5pyf6Ze05YiH5o2i5YiG5pSvXG4iCisi6ICD6JmR5L2/55SoIFwiZ2l0IGFtIC0tcXVpdFwiIOaIliBcImdpdCB3b3JrdHJlZSBhZGRcIuOAgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjQKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZWJhc2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisi5LiN6IO95Zyo5Y+Y5Z+65pe25YiH5o2i5YiG5pSvXG4iCisi6ICD6JmR5L2/55SoIFwiZ2l0IHJlYmFzZSAtLXF1aXRcIiDmiJYgXCJnaXQgd29ya3RyZWUgYWRkXCLjgIIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY4Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIGNoZXJyeS1waWNraW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisi5LiN6IO95Zyo5ouj6YCJ5pe25YiH5o2i5YiG5pSvXG4iCisi6ICD6JmR5L2/55SoIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIOaIliBcImdpdCB3b3JrdHJlZSBhZGRcIuOAgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzIKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmV2ZXJ0aW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgcmV2ZXJ0IC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIuS4jeiDveWcqOi/mOWOn+aXtuWIh+aNouWIhuaUr1xuIgorIuiAg+iZkeS9v+eUqCBcImdpdCByZXZlcnQgLS1xdWl0XCIg5oiWIFwiZ2l0IHdvcmt0cmVlIGFkZFwi44CCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM3NgorbXNnaWQgInlvdSBhcmUgc3dpdGNoaW5nIGJyYW5jaCB3aGlsZSBiaXNlY3RpbmciCittc2dzdHIgIuaCqOWcqOaJp+ihjOS6jOWIhuafpeaJvuaXtuWIh+aNouWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODMKK21zZ2lkICJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAi6Lev5b6E5LiN6IO95ZKM5YiH5o2i5YiG5pSv5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4NiBidWlsdGluL2NoZWNrb3V0LmM6MTM5MCBidWlsdGluL2NoZWNrb3V0LmM6MTM5NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICInJXMnIOS4jeiDveWSjOWIh+aNouWIhuaUr+WQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzOTggYnVpbHRpbi9jaGVja291dC5jOjE0MDEgYnVpbHRpbi9jaGVja291dC5jOjE0MDQKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDA5IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIgorbXNnc3RyICInJXMnIOS4jeiDveWSjCAnJXMnIOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgdGFrZSA8c3RhcnQtcG9pbnQ+IgorbXNnc3RyICInJXMnIOS4jeW4piA86LW35aeL54K5PiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0ICclcyciCittc2dzdHIgIuS4jeiDveWIh+aNouWIhuaUr+WIsOS4gOS4qumdnuaPkOS6pCAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQyNgorbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG9yIGNvbW1pdCBhcmd1bWVudCIKK21zZ3N0ciAi57y65bCR5YiG5pSv5oiW5o+Q5Lqk5Y+C5pWwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ2OCBidWlsdGluL2Nsb25lLmM6OTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzo3MgorIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzUgYnVpbHRpbi9mZXRjaC5jOjE2NyBidWlsdGluL21lcmdlLmM6Mjg2CisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNyBidWlsdGluL3B1bGwuYzoxMTggYnVpbHRpbi9wdXNoLmM6NTYzCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NAorbXNnaWQgImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi5by65Yi25pi+56S66L+b5bqm5oql5ZGKIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ2OQorbXNnaWQgInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICLlkozmlrDnmoTliIbmlK/miafooYzkuInmlrnlkIjlubYiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDcwIGJ1aWx0aW4vbG9nLmM6MTY5MCBwYXJzZS1vcHRpb25zLmg6MzIyCittc2dpZCAic3R5bGUiCittc2dzdHIgIumjjuagvCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NzEKK21zZ2lkICJjb25mbGljdCBzdHlsZSAobWVyZ2Ugb3IgZGlmZjMpIgorbXNnc3RyICLlhrLnqoHovpPlh7rpo47moLzvvIhtZXJnZSDmiJYgZGlmZjPvvIkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDgzIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTYKK21zZ2lkICJkZXRhY2ggSEVBRCBhdCBuYW1lZCBjb21taXQiCittc2dzdHIgIkhFQUQg5LuO5oyH5a6a55qE5o+Q5Lqk5YiG56a7IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4NAorbXNnaWQgInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLkuLrmlrDnmoTliIbmlK/orr7nva7kuIrmuLjkv6Hmga8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg2Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgIuW8uuWItuajgOWHuu+8iOS4ouW8g+acrOWcsOS/ruaUue+8iSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODgKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICLmlrDliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg4Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICLmlrDnmoTmsqHmnInniLbmj5DkuqTnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDkwIGJ1aWx0aW4vbWVyZ2UuYzoyODkKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgIuabtOaWsOW/veeVpeeahOaWh+S7tu+8iOm7mOiupO+8iSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0OTMKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgIuS4jeajgOafpeaMh+WumueahOW8leeUqOaYr+WQpuiiq+WFtuS7luW3peS9nOWMuuaJgOWNoOeUqCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MDYKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgIuWvueWwmuacquWQiOW5tueahOaWh+S7tuajgOWHuuaIkeS7rOeahOeJiOacrCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MDkKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAi5a+55bCa5pyq5ZCI5bm255qE5paH5Lu25qOA5Ye65LuW5Lus55qE54mI5pysIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUxMworbXNnaWQgImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIKK21zZ3N0ciAi5a+56Lev5b6E5LiN5YGa56iA55aP5qOA5Ye655qE6ZmQ5Yi2IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU2NQorbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWLjgIEtQiDlkowgLS1vcnBoYW4g5piv5LqS5pal55qEIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU2OAorbXNnaWQgIi1wIGFuZCAtLW92ZXJsYXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLXAg5ZKMIC0tb3ZlcmxheSDkupLmlqUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjA1Cittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICItLXRyYWNrIOmcgOimgeS4gOS4quWIhuaUr+WQjSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2MTAKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIue8uuWwkeWIhuaUr+WQje+8jOWwneivlSAtYiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJXMiCittc2dzdHIgIuaXoOazleino+aekCAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NTgKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAi5peg5pWI55qE6Lev5b6E6KeE5qC8IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY2NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIGNvbW1pdCBhbmQgYSBicmFuY2ggJyVzJyBjYW5ub3QgYmUgY3JlYXRlZCBmcm9tIGl0IgorbXNnc3RyICInJXMnIOS4jeaYr+S4gOS4quaPkOS6pO+8jOS4jeiDveWfuuS6juWug+WIm+W7uuWIhuaUryAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY2OQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGRvZXMgbm90IHRha2UgYSBwYXRoIGFyZ3VtZW50ICclcyciCittc2dzdHIgImdpdCBjaGVja291dO+8mi0tZGV0YWNoIOS4jeiDveaOpeaUtui3r+W+hOWPguaVsCAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY3OAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZGV0YWNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSDkuI4gLS1kZXRhY2gg5LiN5YW85a65IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY4MSBidWlsdGluL3Jlc2V0LmM6MzI0IGJ1aWx0aW4vc3Rhc2guYzoxNTA2Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1wYXRjaCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUg5LiOIC0tcGF0Y2gg5LiN5YW85a65IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY5MgorbXNnaWQgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorImdpdCBjaGVja291dO+8muWcqOS7jue0ouW8leajgOWHuuaXtu+8jC0tb3Vycy8tLXRoZWlyc+OAgS0tZm9yY2Ug5ZKMIC0tbWVyZ2Ug5LiN5YW85a6544CCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY5NworbXNnaWQgInlvdSBtdXN0IHNwZWNpZnkgcGF0aChzKSB0byByZXN0b3JlIgorbXNnc3RyICLmgqjlv4XpobvmjIflrprkuIDkuKropoHmgaLlpI3nmoTot6/lvoQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI1IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3NiBidWlsdGluL2Nsb25lLmM6MTIxIGJ1aWx0aW4vcmVtb3RlLmM6MTcwCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MiBidWlsdGluL3dvcmt0cmVlLmM6NDkyIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTQKK21zZ2lkICJicmFuY2giCittc2dzdHIgIuWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjQKK21zZ2lkICJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAi5Yib5bu65bm25qOA5Ye65LiA5Liq5paw55qE5YiG5pSvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyNgorbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgY2hlY2tvdXQgYSBicmFuY2giCittc2dzdHIgIuWIm+W7ui/ph43nva7lubbmo4Dlh7rkuIDkuKrliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI3Cittc2dpZCAiY3JlYXRlIHJlZmxvZyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAi5Li65paw55qE5YiG5pSv5Yib5bu65byV55So5pel5b+XIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyOQorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIChkZWZhdWx0KSIKK21zZ3N0ciAi5LqM5qyh54yc5rWLICdnaXQgY2hlY2tvdXQgPOaXoOatpOWIhuaUrz4n77yI6buY6K6k77yJIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTczMAorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUgKGRlZmF1bHQpIgorbXNnc3RyICLkvb/nlKjlj6DliqDmqKHlvI/vvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc1Cittc2dpZCAiY3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoIgorbXNnc3RyICLliJvlu7rlubbliIfmjaLkuIDkuKrmlrDliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBzd2l0Y2ggdG8gYSBicmFuY2giCittc2dzdHIgIuWIm+W7ui/ph43nva7lubbliIfmjaLkuIDkuKrliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc5Cittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgc3dpdGNoIDxuby1zdWNoLWJyYW5jaD4nIgorbXNnc3RyICLkuozmrKHnjJzmtYsgJ2dpdCBzd2l0Y2ggPOaXoOatpOWIhuaUrz4nIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc4MQorbXNnaWQgInRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAi5Lii5byD5pys5Zyw5L+u5pS5IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMworbXNnaWQgIndoaWNoIHRyZWUtaXNoIHRvIGNoZWNrb3V0IGZyb20iCittc2dzdHIgIuimgeajgOWHuuWTquS4gOS4quagkSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTUKK21zZ2lkICJyZXN0b3JlIHRoZSBpbmRleCIKK21zZ3N0ciAi5oGi5aSN57Si5byVIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxNworbXNnaWQgInJlc3RvcmUgdGhlIHdvcmtpbmcgdHJlZSAoZGVmYXVsdCkiCittc2dzdHIgIuaBouWkjeW3peS9nOWMuu+8iOm7mOiupO+8iSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTkKK21zZ2lkICJpZ25vcmUgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAi5b+955Wl5pyq5ZCI5bm25p2h55uuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgyMAorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUiCittc2dzdHIgIuS9v+eUqOWPoOWKoOaooeW8jyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjI4Cittc2dpZCAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDzmqKHlvI8+XSBbLXggfCAtWF0gWy0tXSA86Lev5b6EPi4uLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIuato+WIoOmZpCAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgIuWwhuWIoOmZpCAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICLlv73nlaXku5PlupMgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICLlsIblv73nlaXku5PlupMgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgIuWIoOmZpCAlcyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbHN0YXQgJXNcbiIKK21zZ3N0ciAi5LiN6IO95a+5ICVzIOiwg+eUqCBsc3RhdFxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbVxuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmdcbiIKK21zZ3N0ciAiIgorIuW4ruWKqe+8mlxuIgorIjEgICAgICAgICAgLSDpgJrov4fnvJblj7fpgInmi6nkuIDkuKrpgInpoblcbiIKKyJmb28gICAgICAgIC0g6YCa6L+H5ZSv5LiA5YmN57yA6YCJ5oup5LiA5Liq6YCJ6aG5XG4iCisiICAgICAgICAgICAtIO+8iOepuu+8ieS7gOS5iOS5n+S4jemAieaLqVxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZ1xuIgorbXNnc3RyICIiCisi5biu5Yqp77yaXG4iCisiMSAgICAgICAgICAtIOmAieaLqeS4gOS4qumAiemhuVxuIgorIjMtNSAgICAgICAgLSDpgInmi6nkuIDkuKrojIPlm7TlhoXnmoTmiYDmnInpgInpoblcbiIKKyIyLTMsNi05ICAgIC0g6YCJ5oup5aSa5Liq6IyD5Zu05YaF55qE5omA5pyJ6YCJ6aG5XG4iCisiZm9vICAgICAgICAtIOmAmui/h+WUr+S4gOWJjee8gOmAieaLqeS4gOS4qumAiemhuVxuIgorIi0uLi4gICAgICAgLSDlj43pgInnibnlrprnmoTpgInpoblcbiIKKyIqICAgICAgICAgIC0g6YCJ5oup5omA5pyJ6YCJ6aG5XG4iCisiICAgICAgICAgICAtIO+8iOepuu+8iee7k+adn+mAieaLqVxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTIxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTcwCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU3NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/XG4iCittc2dzdHIgIuWXr++8iCVz77yJ77yfXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIgorbXNnc3RyICLovpPlhaXmqKHniYjku6XmjpLpmaTmnaHnm64+PiAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogQ2Fubm90IGZpbmQgaXRlbXMgbWF0Y2hlZCBieTogJXMiCittc2dzdHIgIuitpuWRiu+8muaXoOazleaJvuWIsOWSjCAlcyDljLnphY3nmoTmnaHnm64iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MjEKK21zZ2lkICJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlIgorbXNnc3RyICLpgInmi6nopoHliKDpmaTnmoTmnaHnm64iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAi5Yig6ZmkICVzIFt5L05d77yfIgorCisjOiBidWlsdGluL2NsZWFuLmM6Nzk1Cittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0g5byA5aeL5riF55CGXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIOmAmui/h+aooeeJiOaOkumZpOimgeWIoOmZpOeahOadoeebrlxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSDpgJrov4fmlbDlrZfpgInmi6nopoHliKDpmaTnmoTmnaHnm65cbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0g6ZKI5a+55Yig6Zmk6YCQ5LiA6K+i6Zeu77yI5bCx5YOPIFwicm0gLWlcIu+8iVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSDlgZzmraLliKDpmaTlubbpgIDlh7pcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0g5pi+56S65pys5biu5YqpXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIOaYvuekuuWmguS9leWcqOaPkOekuuespuS4i+mAieaLqeeahOW4ruWKqSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzMQorbXNnaWQgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IgorbXNnaWRfcGx1cmFsICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiCittc2dzdHJbMF0gIuWwhuWIoOmZpOWmguS4i+adoeebru+8miIKK21zZ3N0clsxXSAi5bCG5Yig6Zmk5aaC5LiL5p2h55uu77yaIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODQ3Cittc2dpZCAiTm8gbW9yZSBmaWxlcyB0byBjbGVhbiwgZXhpdGluZy4iCittc2dzdHIgIuayoeacieimgea4heeQhueahOaWh+S7tu+8jOmAgOWHuuOAgiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwOQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICLkuI3miZPljbDliKDpmaTmlofku7bnmoTlkI3np7AiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTEKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAi5by65Yi2IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTEyCittc2dpZCAiaW50ZXJhY3RpdmUgY2xlYW5pbmciCittc2dzdHIgIuS6pOS6kuW8j+a4hemZpCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAi5Yig6Zmk5pW05Liq55uu5b2VIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjIgYnVpbHRpbi9kZXNjcmliZS5jOjU2NAorIzogYnVpbHRpbi9ncmVwLmM6ODg5IGJ1aWx0aW4vbG9nLmM6MTc3IGJ1aWx0aW4vbG9nLmM6MTc5CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjYgYnVpbHRpbi9uYW1lLXJldi5jOjUyOAorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgIuaooeW8jyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNgorbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICLmt7vliqAgPOaooeW8jz4g5Yiw5b+955Wl6KeE5YiZIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE3Cittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAi5Lmf5Yig6Zmk5b+955Wl55qE5paH5Lu2IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE5Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAi5Y+q5Yig6Zmk5b+955Wl55qE5paH5Lu2IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTM3Cittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIteCDlkowgLVgg5LiN6IO95ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTQxCittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBzZXQgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgcmVmdXNpbmcgdG8gIgorImNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIOiuvue9ruS4uiB0cnVlIOS4lOacquaPkOS+myAtaeOAgS1uIOaIliAtZiDpgInpobnvvIzmi5Lnu53miafooYzmuIXnkIbliqjkvZwiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDQKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKyJyZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSDpu5jorqTkuLogdHJ1ZSDkuJTmnKrmj5DkvpsgLWnjgIEtbiDmiJYgLWYg6YCJ6aG577yM5ouS57ud5omn6KGM5riF55CG5Yqo5L2cIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDUKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs86YCJ6aG5Pl0gWy0tXSA85LuT5bqTPiBbPOi3r+W+hD5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAi5LiN5Yib5bu65LiA5Liq5qOA5Ye6IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQgYnVpbHRpbi9jbG9uZS5jOjk2IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4OQorbXNnaWQgImNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5Yib5bu65LiA5Liq57qv5LuT5bqTIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgKK21zZ2lkICJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIKK21zZ3N0ciAi5Yib5bu65LiA5Liq6ZWc5YOP5LuT5bqT77yI5Lmf5piv57qv5LuT5bqT77yJIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwCittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIuS7juacrOWcsOS7k+W6k+WFi+mahiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMgorbXNnaWQgImRvbid0IHVzZSBsb2NhbCBoYXJkbGlua3MsIGFsd2F5cyBjb3B5IgorbXNnc3RyICLkuI3kvb/nlKjmnKzlnLDnoazpk77mjqXvvIzlp4vnu4jlpI3liLYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAi6K6+572u5Li65YWx5Lqr5LuT5bqTIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAicGF0aHNwZWMiCittc2dzdHIgIui3r+W+hOinhOagvCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgIuWcqOWFi+mahuaXtuWIneWni+WMluWtkOaooee7hCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGNsb25lZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAi5bm25Y+R5YWL6ZqG55qE5a2Q5qih57uE55qE5pWw6YePIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTExIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NgorbXNnaWQgInRlbXBsYXRlLWRpcmVjdG9yeSIKK21zZ3N0ciAi5qih5p2/55uu5b2VIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEyIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NworbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgIuaooeadv+ebruW9leWwhuiiq+S9v+eUqCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNCBidWlsdGluL2Nsb25lLmM6MTE2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA3CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMgorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICLlj4LogIPku5PlupMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE0Cittc2dpZCAidXNlIC0tcmVmZXJlbmNlIG9ubHkgd2hpbGUgY2xvbmluZyIKK21zZ3N0ciAi5LuF5Zyo5YWL6ZqG5pe25Y+C6ICDIC0tcmVmZXJlbmNlIOaMh+WQkeeahOacrOWcsOS7k+W6kyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOSBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ2CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDEgYnVpbHRpbi9yZXBhY2suYzozMjcKK21zZ2lkICJuYW1lIgorbXNnc3RyICLlkI3np7AiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjAKK21zZ2lkICJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iCittc2dzdHIgIuS9v+eUqCA85ZCN56ewPiDogIzkuI3mmK8gJ29yaWdpbicg5Y676Lef6Liq5LiK5ri4IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIyCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAi5qOA5Ye6IDzliIbmlK8+IOiAjOS4jeaYr+i/nOeoiyBIRUFEIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0Cittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAi6L+c56iLIGdpdC11cGxvYWQtcGFjayDot6/lvoQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjUgYnVpbHRpbi9mZXRjaC5jOjE2OCBidWlsdGluL2dyZXAuYzo4MjgKKyM6IGJ1aWx0aW4vcHVsbC5jOjIwNworbXNnaWQgImRlcHRoIgorbXNnc3RyICLmt7HluqYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjYKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoYXQgZGVwdGgiCittc2dzdHIgIuWIm+W7uuS4gOS4quaMh+Wumua3seW6pueahOa1heWFi+mahiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNyBidWlsdGluL2ZldGNoLmM6MTcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzMAorbXNnaWQgInRpbWUiCittc2dzdHIgIuaXtumXtCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOAorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgc2luY2UgYSBzcGVjaWZpYyB0aW1lIgorbXNnc3RyICLku47kuIDkuKrnibnlrprml7bpl7TliJvlu7rkuIDkuKrmtYXlhYvpmoYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjkgYnVpbHRpbi9mZXRjaC5jOjE3MiBidWlsdGluL2ZldGNoLmM6MTk1CisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODAKK21zZ2lkICJyZXZpc2lvbiIKK21zZ3N0ciAi54mI5pysIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMwIGJ1aWx0aW4vZmV0Y2guYzoxNzMKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lLCBleGNsdWRpbmcgcmV2IgorbXNnc3RyICLmt7HljJbmtYXlhYvpmobnmoTljoblj7LvvIzpmaTkuobnibnlrprniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTI4Cittc2dpZCAiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIgorbXNnc3RyICLlj6rlhYvpmobkuIDkuKrliIbmlK/jgIFIRUFEIOaIliAtLWJyYW5jaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNAorbXNnaWQgImRvbid0IGNsb25lIGFueSB0YWdzLCBhbmQgbWFrZSBsYXRlciBmZXRjaGVzIG5vdCB0byBmb2xsb3cgdGhlbSIKK21zZ3N0ciAi5LiN6KaB5YWL6ZqG5Lu75L2V5qCH562+77yM5bm25LiU5ZCO57ut6I635Y+W5pON5L2c5Lmf5LiN5LiL6L295a6D5LusIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM2Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgYmUgc2hhbGxvdyIKK21zZ3N0ciAi5a2Q5qih57uE5bCG5Lul5rWF5LiL6L295qih5byP5YWL6ZqGIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiZ2l055uu5b2VIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM4IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NgorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgImdpdOebruW9leWSjOW3peS9nOWMuuWIhuemuyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOQorbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAia2V5PXZhbHVlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQwCittc2dpZCAic2V0IGNvbmZpZyBpbnNpZGUgdGhlIG5ldyByZXBvc2l0b3J5IgorbXNnc3RyICLlnKjmlrDku5PlupPkuK3orr7nva7phY3nva7kv6Hmga8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJzZXJ2ZXItc3BlY2lmaWMiCittc2dzdHIgInNlcnZlci1zcGVjaWZpYyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgIm9wdGlvbiB0byB0cmFuc21pdCIKK21zZ3N0ciAi5Lyg6L6T6YCJ6aG5IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQzIGJ1aWx0aW4vZmV0Y2guYzoxOTEgYnVpbHRpbi9wdWxsLmM6MjIwCisjOiBidWlsdGluL3B1c2guYzo1NzQKK21zZ2lkICJ1c2UgSVB2NCBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAi5Y+q5L2/55SoIElQdjQg5Zyw5Z2AIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ1IGJ1aWx0aW4vZmV0Y2guYzoxOTMgYnVpbHRpbi9wdWxsLmM6MjIzCisjOiBidWlsdGluL3B1c2guYzo1NzYKK21zZ2lkICJ1c2UgSVB2NiBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAi5Y+q5L2/55SoIElQdjYg5Zyw5Z2AIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ5Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgdXNlIHRoZWlyIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIuS7u+S9leWFi+mahueahOWtkOaooee7hOWwhuS9v+eUqOWug+S7rOeahOi/nOeoi+i3n+i4quWIhuaUryIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE1MQorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgdG8gaW5jbHVkZSBvbmx5IGZpbGVzIGF0IHJvb3QiCittc2dzdHIgIuWIneWni+WMlueogOeWj+ajgOWHuuaWh+S7tu+8jOWPquWMheWQq+agueebruW9leaWh+S7tiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI4NworbXNnaWQgIiIKKyJObyBkaXJlY3RvcnkgbmFtZSBjb3VsZCBiZSBndWVzc2VkLlxuIgorIlBsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKyLml6Dms5XnjJzliLDnm67lvZXlkI3jgIJcbiIKKyLor7flnKjlkb3ku6TooYzmjIflrprkuIDkuKrnm67lvZUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbzogQ291bGQgbm90IGFkZCBhbHRlcm5hdGUgZm9yICclcyc6ICVzXG4iCittc2dzdHIgImluZm86IOS4jeiDveS4uiAnJXMnIOa3u+WKoOS4gOS4quWkh+eUqO+8miVzXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzIOWtmOWcqOS4lOS4jeaYr+S4gOS4quebruW9lSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhcnQgaXRlcmF0b3Igb3ZlciAnJXMnIgorbXNnc3RyICLml6Dms5XlnKggJyVzJyDkuIrlkK/liqjov63ku6PlmagiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgIuWIm+W7uumTvuaOpSAnJXMnIOWksei0pSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgIuaLt+i0neaWh+S7tuiHsyAnJXMnIOWksei0pSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gaXRlcmF0ZSBvdmVyICclcyciCittc2dzdHIgIuaXoOazleWcqCAnJXMnIOS4iui/reS7oyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICLlrozmiJDjgIJcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjUwOAorbXNnaWQgIiIKKyJDbG9uZSBzdWNjZWVkZWQsIGJ1dCBjaGVja291dCBmYWlsZWQuXG4iCisiWW91IGNhbiBpbnNwZWN0IHdoYXQgd2FzIGNoZWNrZWQgb3V0IHdpdGggJ2dpdCBzdGF0dXMnXG4iCisiYW5kIHJldHJ5IHdpdGggJ2dpdCByZXN0b3JlIC0tc291cmNlPUhFQUQgOi8nXG4iCittc2dzdHIgIiIKKyLlhYvpmobmiJDlip/vvIzkvYbmmK/mo4Dlh7rlpLHotKXjgIJcbiIKKyLmgqjlj6/ku6XpgJrov4cgJ2dpdCBzdGF0dXMnIOajgOafpeWTquS6m+W3suiiq+ajgOWHuu+8jOeEtuWQjuS9v+eUqOWRveS7pFxuIgorIidnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEIDovJyDph43or5VcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAi5LiN6IO95Y+R546w6KaB5YWL6ZqG55qE6L+c56iL5YiG5pSvICVz44CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgJXMiCittc2dzdHIgIuS4jeiDveabtOaWsCAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc1MworbXNnaWQgImZhaWxlZCB0byBpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAi5peg5rOV5Yid5aeL5YyW56iA55aP5qOA5Ye6IgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzc2Cittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICLov5znqIsgSEVBRCDmjIflkJHkuIDkuKrkuI3lrZjlnKjnmoTlvJXnlKjvvIzml6Dms5Xmo4Dlh7rjgIJcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwNworbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgIuS4jeiDveajgOWHuuW3peS9nOWMuiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICLml6Dms5XlsIblj4LmlbDlhpnlhaXphY3nva7mlofku7YiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjUKK21zZ2lkICJjYW5ub3QgcmVwYWNrIHRvIGNsZWFuIHVwIgorbXNnc3RyICLml6Dms5XmiafooYwgcmVwYWNrIOadpea4heeQhiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNworbXNnaWQgImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAi5peg5rOV5Yig6Zmk5Li05pe255qEIGFsdGVybmF0ZXMg5paH5Lu2IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTY1IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgIuWkquWkmuWPguaVsOOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2OQorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAi5oKo5b+F6aG75oyH5a6a5LiA5Liq5LuT5bqT5p2l5YWL6ZqG44CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiLS1iYXJlIOWSjCAtLW9yaWdpbiAlcyDpgInpobnkuI3lhbzlrrnjgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5ODUKK21zZ2lkICItLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpciBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiLS1iYXJlIOWSjCAtLXNlcGFyYXRlLWdpdC1kaXIg6YCJ6aG55LiN5YW85a6544CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi5LuT5bqTICclcycg5LiN5a2Y5ZyoIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwNCBidWlsdGluL2ZldGNoLmM6MTc5NgorIywgYy1mb3JtYXQKK21zZ2lkICJkZXB0aCAlcyBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgIua3seW6piAlcyDkuI3mmK/kuIDkuKrmraPmlbAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIuebruagh+i3r+W+hCAnJXMnIOW3sue7j+WtmOWcqO+8jOW5tuS4lOS4jeaYr+S4gOS4quepuuebruW9leOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLlt6XkvZzljLogJyVzJyDlt7Lnu4/lrZjlnKjjgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDM5IGJ1aWx0aW4vY2xvbmUuYzoxMDYwIGJ1aWx0aW4vZGlmZnRvb2wuYzoyNzEKKyM6IGJ1aWx0aW4vbG9nLmM6MTg2NiBidWlsdGluL3dvcmt0cmVlLmM6Mjk1IGJ1aWx0aW4vd29ya3RyZWUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgIuS4jeiDveS4uiAnJXMnIOWIm+W7uuWFiOWvvOebruW9lSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgIuS4jeiDveWIm+W7uuW3peS9nOWMuuebruW9lSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAi5YWL6ZqG5Yiw57qv5LuT5bqTICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAi5q2j5YWL6ZqG5YiwICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwOTAKK21zZ2lkICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBib3RoIC0tcmVmZXJlbmNlIGFuZCAtLXJlZmVyZW5jZS1pZi0iCisiYWJsZSIKK21zZ3N0ciAiY2xvbmUgLS1yZWN1cnNpdmUg5ZKMIC0tcmVmZXJlbmNlIOS7peWPiiAtLXJlZmVyZW5jZS1pZi1hYmxlIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTQKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1kZXB0aCDlnKjmnKzlnLDlhYvpmobml7booqvlv73nlaXvvIzor7fmlLnnlKggZmlsZTovLyDljY/orq7jgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU2Cittc2dpZCAiLS1zaGFsbG93LXNpbmNlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1zaGFsbG93LXNpbmNlIOWcqOacrOWcsOWFi+mahuaXtuiiq+W/veeVpe+8jOivt+aUueeUqCBmaWxlOi8vIOWNj+iuruOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTgKK21zZ2lkICItLXNoYWxsb3ctZXhjbHVkZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tc2hhbGxvdy1leGNsdWRlIOWcqOacrOWcsOWFi+mahuaXtuiiq+W/veeVpe+8jOivt+aUueeUqCBmaWxlOi8vIOWNj+iuruOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjAKK21zZ2lkICItLWZpbHRlciBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tZmlsdGVyIOWcqOacrOWcsOWFi+mahuaXtuiiq+W/veeVpe+8jOivt+aUueeUqCBmaWxlOi8vIOWNj+iuruOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjMKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICLmupDku5PlupPmmK/mtYXlhYvpmobvvIzlv73nlaUgLS1sb2NhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjgKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwg6KKr5b+955WlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0MyBidWlsdGluL2Nsb25lLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAi6L+c56iL5YiG5pSvICVzIOWcqOS4iua4uCAlcyDmnKrlj5HnjrAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjU0Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAi5oKo5Ly85LmO5YWL6ZqG5LqG5LiA5Liq56m65LuT5bqT44CCIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjEwCittc2dpZCAiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbHVtbiBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICLmn6Xmib7phY3nva7lj5jph48iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgIuimgeS9v+eUqOeahOW4g+WxgCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIuacgOWkp+WuveW6piIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIuW3pui+ueahhueahOWhq+WFheepuumXtCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMgorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICLlj7PovrnmoYbnmoTloavlhYXnqbrpl7QiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzMKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAi5Lik5YiX5LmL6Ze055qE5aGr5YWF56m66Ze0IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICItLWNvbW1hbmQg5b+F6aG75piv56ys5LiA5Liq5Y+C5pWwIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTgKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPHBhcmVudD4pLi4uXSBbLVNbPGtleWlkPl1dIFsoLW0gPG1lc3NhZ2U+KS4uLl0gWygtRiAiCisiPGZpbGU+KS4uLl0gPHRyZWU+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPOeItuaPkOS6pD4pLi4uXSBbLVNbPGtleWlkPl1dIFsoLW0gPOa2iOaBrz4pLi4uXSBbKC1GIDzmlofku7YiCisiPikuLi5dIDzmoJE+IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHBhcmVudCAlcyBpZ25vcmVkIgorbXNnc3RyICLlv73nlaXph43lpI3nmoTniLbmj5DkuqQgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo1NiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTM2IGJ1aWx0aW4vbG9nLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjnmoTlr7nosaHlkI0gJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZe+8muaXoOazleaJk+W8gCAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWXvvJrml6Dms5Xor7vlj5YgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIGNsb3NlICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZe+8muaXoOazleWFs+mXrSAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICLniLbmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTIKK21zZ2lkICJpZCBvZiBhIHBhcmVudCBjb21taXQgb2JqZWN0IgorbXNnc3RyICLniLbmj5DkuqTlr7nosaEgSUQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTQgYnVpbHRpbi9jb21taXQuYzoxNTAxIGJ1aWx0aW4vbWVyZ2UuYzoyNzEKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDkgYnVpbHRpbi9ub3Rlcy5jOjU3NSBidWlsdGluL3N0YXNoLmM6MTQ3NworIzogYnVpbHRpbi90YWcuYzo0MTIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICLor7TmmI4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTUgYnVpbHRpbi9jb21taXQuYzoxNTAxCittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIuaPkOS6pOivtOaYjiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExOAorbXNnaWQgInJlYWQgY29tbWl0IGxvZyBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAi5LuO5paH5Lu25Lit6K+75Y+W5o+Q5Lqk6K+05piOIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIxIGJ1aWx0aW4vY29tbWl0LmM6MTUxMyBidWlsdGluL21lcmdlLmM6Mjg4CisjOiBidWlsdGluL3B1bGwuYzoxNzUgYnVpbHRpbi9yZXZlcnQuYzoxMTgKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgIkdQRyDmj5DkuqTnrb7lkI0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMzMKK21zZ2lkICJtdXN0IGdpdmUgZXhhY3RseSBvbmUgdHJlZSIKK21zZ3N0ciAi5b+F6aG757K+56Gu5Zyw5o+Q5L6b5LiA5Liq5qCRIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTQwCittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVl77ya6K+75Y+W5aSx6LSlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQxCittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzzpgInpobk+XSBbLS1dIDzot6/lvoTop4TmoLw+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2Cittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBzdGF0dXMgWzzpgInpobk+XSBbLS1dIDzot6/lvoTop4TmoLw+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUxCittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisi5oKo6KaB5L+u6KGl5pyA6L+R55qE5o+Q5Lqk77yM5L2G6L+Z5LmI5YGa5Lya6K6p5a6D5oiQ5Li656m65o+Q5Lqk44CC5oKo5Y+v5Lul6YeN5aSN5oKo55qE5ZG95Luk5bm25bim5LiKXG4iCisiLS1hbGxvdy1lbXB0eSDpgInpobnvvIzmiJbogIXmgqjlj6/nlKjlkb3ku6QgXCJnaXQgcmVzZXQgSEVBRF5cIiDmlbTkuKrliKDpmaTor6Xmj5DkuqTjgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisi5LmL5YmN55qE5ouj6YCJ5pON5L2c546w5Zyo5piv5LiA5Liq56m65o+Q5Lqk77yM5Y+v6IO95piv55Sx5Yay56qB6Kej5Yaz5a+86Ie055qE44CC5aaC5p6c5oKo5peg6K665aaC5L2VXG4iCisi5Lmf6KaB5o+Q5Lqk77yM5L2/55So5ZG95Luk77yaXG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzCittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgY2hlcnJ5LXBpY2sgLS1za2lwJ1xuIgorbXNnc3RyICLlkKbliJnvvIzor7fkvb/nlKggJ2dpdCBjaGVycnktcGljayAtLXNraXAnXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjYKK21zZ2lkICIiCisiYW5kIHRoZW4gdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorInRvIHJlc3VtZSBjaGVycnktcGlja2luZyB0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCittc2dzdHIgIiIKKyLnhLblkI7kvb/nlKjvvJpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcbiIKKyJcbiIKKyLmnaXnu6fnu63mi6PpgInliankvZnmj5DkuqTjgILlpoLmnpzmgqjmg7Pot7Pov4fmraTmj5DkuqTvvIzkvb/nlKjvvJpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMxNQorbXNnaWQgImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIKK21zZ3N0ciAi6Kej5YyFIEhFQUQg5qCR5a+56LGh5aSx6LSlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUg5ZKMIC1hIOWcqOS4gOi1t+ayoeacieaEj+S5iSIKKworIzogYnVpbHRpbi9jb21taXQuYzozNjQKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIuWPguaVsCAtLWluY2x1ZGUvLS1vbmx5IOS4jei3n+i3r+W+hOayoeacieaEj+S5ieOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNzYKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi5LiN6IO95Yib5bu65Li05pe257Si5byVIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4NQorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgIuS6pOS6kuW8j+a3u+WKoOWksei0pSIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MDAKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi5peg5rOV5pu05paw5Li05pe257Si5byVIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQwMgorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICLkuI3og73mm7TmlrDmoJHnmoTkuLvnvJPlrZgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDI3IGJ1aWx0aW4vY29tbWl0LmM6NDUwIGJ1aWx0aW4vY29tbWl0LmM6NDk2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5XlhpkgbmV3X2luZGV4IOaWh+S7tiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzkKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgIuWcqOWQiOW5tui/h+eoi+S4reS4jeiDveWBmumDqOWIhuaPkOS6pOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0ODEKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIuWcqOaLo+mAiei/h+eoi+S4reS4jeiDveWBmumDqOWIhuaPkOS6pOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0ODkKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIuaXoOazleivu+WPlue0ouW8lSIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MDgKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgIuaXoOazleWGmeS4tOaXtue0ouW8leaWh+S7tiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgbGFja3MgYXV0aG9yIGhlYWRlciIKK21zZ3N0ciAi5o+Q5LqkICclcycg57y65bCR5L2c6ICF5L+h5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBoYXMgbWFsZm9ybWVkIGF1dGhvciBsaW5lIgorbXNnc3RyICLmj5DkuqQgJyVzJyDmnInmoLzlvI/plJnor6/nmoTkvZzogIXkv6Hmga8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjI3Cittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAi5qC85byP6ZSZ6K+v55qEIC0tYXV0aG9yIOWPguaVsCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2ODAKK21zZ2lkICIiCisidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKyJpbiB0aGUgY3VycmVudCBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi5peg5rOV6YCJ5oup5LiA5Liq5pyq6KKr5b2T5YmN5o+Q5Lqk6K+05piO5L2/55So55qE5rOo6YeK5a2X56ymIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcxOCBidWlsdGluL2NvbW1pdC5jOjc1MSBidWlsdGluL2NvbW1pdC5jOjEwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgIuS4jeiDveafpeivouaPkOS6pCAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzAgYnVpbHRpbi9zaG9ydGxvZy5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICLvvIjmraPku47moIflh4bovpPlhaXkuK3or7vlj5bml6Xlv5fkv6Hmga/vvIlcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzIKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi5LiN6IO95LuO5qCH5YeG6L6T5YWl5Lit6K+75Y+W5pel5b+X5L+h5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73or7vlj5bml6Xlv5fmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NjcgYnVpbHRpbi9jb21taXQuYzo3ODMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIgorbXNnc3RyICLkuI3og73or7vlj5YgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NzQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgIuS4jeiDveivu+WPliBNRVJHRV9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODM0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAi5LiN6IO95YaZ5o+Q5Lqk5qih54mIIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyLkvLzkuY7mgqjmraPlnKjlgZrkuIDkuKrlkIjlubbmj5DkuqTjgILlpoLmnpzkuI3lr7nvvIzor7fliKDpmaTmlofku7ZcbiIKKyJcdCVzXG4iCisi54S25ZCO6YeN6K+V44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuS8vOS5juaCqOato+WcqOWBmuS4gOS4quaLo+mAieaPkOS6pOOAguWmguaenOS4jeWvue+8jOivt+WIoOmZpOaWh+S7tlxuIgorIlx0JXNcbiIKKyLnhLblkI7ph43or5XjgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuivt+S4uuaCqOeahOWPmOabtOi+k+WFpeaPkOS6pOivtOaYjuOAguS7pSAnJWMnIOW8gOWni+eahOihjOWwhuiiq+W/veeVpe+8jOiAjOS4gOS4quepuueahOaPkOS6pFxuIgorIuivtOaYjuWwhuS8mue7iOatouaPkOS6pOOAglxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuivt+S4uuaCqOeahOWPmOabtOi+k+WFpeaPkOS6pOivtOaYjuOAguS7pSAnJWMnIOW8gOWni+eahOihjOWwhuiiq+S/neeVme+8jOWmguaenOaCqOWOn+aEj1xuIgorIuS5n+WPr+S7peWIoOmZpOWug+S7rOOAguS4gOS4quepuueahOaPkOS6pOivtOaYjuWwhuS8mue7iOatouaPkOS6pOOAglxuIgorCisjICDor5HogIXvvJrkuLrkv53or4HlnKjovpPlh7rkuK3lr7npvZDvvIzms6jmhI/osIPmlbTlj6XkuK3nqbrmoLzvvIEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPkvZzogIXvvJogICUuKnMgPCUuKnM+IgorCisjICDor5HogIXvvJrkuLrkv53or4HlnKjovpPlh7rkuK3lr7npvZDvvIzms6jmhI/osIPmlbTlj6XkuK3nqbrmoLzvvIEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXPml6XmnJ/vvJogICVzIgorCisjICDor5HogIXvvJrkuLrkv53or4HlnKjovpPlh7rkuK3lr7npvZDvvIzms6jmhI/osIPmlbTlj6XkuK3nqbrmoLzvvIEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPmj5DkuqTogIXvvJolLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MjkKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAi5peg5rOV6K+75Y+W57Si5byVIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5NworbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICLml6Dms5XliJvlu7rmoJHlr7nosaEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAxMSBidWlsdGluL3RhZy5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIuivt+S9v+eUqCAtbSDmiJYgLUYg6YCJ6aG55o+Q5L6b5o+Q5Lqk6K+05piO44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIi0tYXV0aG9yICclcycg5LiN5pivICflp5PlkI0gPOmCrueusT4nIOagvOW8j++8jOS4lOacquiDveWcqOeOsOacieS9nOiAheS4reaJvuWIsOWMuemFjSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaWdub3JlZCBtb2RlICclcyciCittc2dzdHIgIuaXoOaViOeahOW/veeVpeaooeW8jyAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODcgYnVpbHRpbi9jb21taXQuYzoxMzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAi5peg5pWI55qE5pyq6L+96Liq5paH5Lu25Y+C5pWwICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEyNworbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1sb25nIOWSjCAteiDpgInpobnkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3MQorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIuWQjOaXtuS9v+eUqCAtLXJlc2V0LWF1dGhvciDlkowgLS1hdXRob3Ig5rKh5pyJ5oSP5LmJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODAKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAi5oKo5rKh5pyJ5Y+v5L+u6KGl55qE5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODMKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLmgqjmraPlpITkuo7kuIDkuKrlkIjlubbov4fnqIvkuK0gLS0g5peg5rOV5L+u6KGl5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODUKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLmgqjmraPlpITkuo7kuIDkuKrmi6PpgInov4fnqIvkuK0gLS0g5peg5rOV5L+u6KGl5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODgKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLpgInpobkgLS1zcXVhc2gg5ZKMIC0tZml4dXAg5LiN6IO95ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTgKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAi5Y+q6IO955So5LiA5LiqIC1jLy1DLy1GLy0tZml4dXAg6YCJ6aG544CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDAKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYuIgorbXNnc3RyICLpgInpobkgLW0g5LiN6IO95ZKMIC1jLy1DLy1GIOWQjOaXtuS9v+eUqOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjA4Cittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiLS1yZXNldC1hdXRob3Ig5Y+q6IO95ZKMIC1D44CBLWMg5oiWIC0tYW1lbmQg5ZCM5pe25L2/55So44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjUKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIuWPquiDveeUqOS4gOS4qiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCDpgInpobnjgIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRocyAnJXMgLi4uJyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIui3r+W+hCAgJyVzIC4uLicg5ZKMIC1hIOmAiemhueWQjOaXtuS9v+eUqOayoeacieaEj+S5iSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYyIGJ1aWx0aW4vY29tbWl0LmM6MTUyNAorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAi5Lul566A5rSB55qE5qC85byP5pi+56S654q25oCBIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjQgYnVpbHRpbi9jb21taXQuYzoxNTI2Cittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgIuaYvuekuuWIhuaUr+S/oeaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY2Cittc2dpZCAic2hvdyBzdGFzaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi5pi+56S66LSu6JeP5Yy65L+h5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjggYnVpbHRpbi9jb21taXQuYzoxNTI4Cittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgIuiuoeeul+WujOaVtOeahOmihuWFiC/okL3lkI7lgLwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MAorbXNnaWQgInZlcnNpb24iCittc2dzdHIgIueJiOacrCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzcwIGJ1aWx0aW4vY29tbWl0LmM6MTUzMCBidWlsdGluL3B1c2guYzo1NDkKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NDMKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAi5py65Zmo5Y+v6K+755qE6L6T5Ye6IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzMgYnVpbHRpbi9jb21taXQuYzoxNTMyCittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICLku6Xplb/moLzlvI/mmL7npLrnirbmgIHvvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3NiBidWlsdGluL2NvbW1pdC5jOjE1MzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAi5p2h55uu5LulIE5VTCDlrZfnrKbnu5PlsL4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OCBidWlsdGluL2NvbW1pdC5jOjEzODIgYnVpbHRpbi9jb21taXQuYzoxNTM4CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTkgYnVpbHRpbi9yZWJhc2UuYzoxNTY5IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJtb2RlIgorbXNnc3RyICLmqKHlvI8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OSBidWlsdGluL2NvbW1pdC5jOjE1MzgKK21zZ2lkICJzaG93IHVudHJhY2tlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IGFsbCwgbm9ybWFsLCBuby4gKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIuaYvuekuuacqui3n+i4queahOaWh+S7tu+8jOKAnOaooeW8j+KAneeahOWPr+mAieWPguaVsO+8mmFsbOOAgW5vcm1hbOOAgW5v44CC77yI6buY6K6k77yaYWxs77yJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODMKK21zZ2lkICIiCisic2hvdyBpZ25vcmVkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogdHJhZGl0aW9uYWwsIG1hdGNoaW5nLCBuby4gKERlZmF1bHQ6ICIKKyJ0cmFkaXRpb25hbCkiCittc2dzdHIgIiIKKyLmmL7npLrlt7Llv73nlaXnmoTmlofku7bvvIzlj6/pgInmqKHlvI/vvJp0cmFkaXRpb25hbOOAgW1hdGNoaW5n44CBbm/jgILvvIjpu5jorqTvvJp0cmFkaXRpb25hbO+8iSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg1IHBhcnNlLW9wdGlvbnMuaDoxOTIKK21zZ2lkICJ3aGVuIgorbXNnc3RyICLkvZXml7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4NgorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorIuW/veeVpeWtkOaooee7hOeahOabtOaUue+8jOKAnOS9leaXtuKAneeahOWPr+mAieWPguaVsO+8mmFsbOOAgWRpcnR544CBdW50cmFja2Vk44CC77yI6buY6K6k77yaYWxs77yJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODgKK21zZ2lkICJsaXN0IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zIgorbXNnc3RyICLku6XliJfnmoTmlrnlvI/mmL7npLrmnKrot5/ouKrnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4OQorbXNnaWQgImRvIG5vdCBkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAi5LiN5qOA5rWL6YeN5ZG95ZCNIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzOTEKK21zZ2lkICJkZXRlY3QgcmVuYW1lcywgb3B0aW9uYWxseSBzZXQgc2ltaWxhcml0eSBpbmRleCIKK21zZ3N0ciAi5qOA5rWL6YeN5ZG95ZCN77yM5Y+v5Lul6K6+572u57Si5byV55u45Ly85bqmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MTEKK21zZ2lkICJVbnN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBpZ25vcmVkIGFuZCB1bnRyYWNrZWQtZmlsZXMgYXJndW1lbnRzIgorbXNnc3RyICLkuI3mlK/mjIHlt7Llv73nlaXlkozmnKrot5/ouKrmlofku7blj4LmlbDnmoTnu4TlkIgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NAorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgIuaPkOS6pOaIkOWKn+WQjuS4jeaYvuekuuamgui/sOS/oeaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1Cittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICLlnKjmj5DkuqTor7TmmI7mqKHmnb/ph4zmmL7npLrlt67lvIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NworbXNnaWQgIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiCittc2dzdHIgIuaPkOS6pOivtOaYjumAiemhuSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk4IGJ1aWx0aW4vbWVyZ2UuYzoyNzUgYnVpbHRpbi90YWcuYzo0MTQKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICLku47mlofku7bkuK3or7vlj5bmj5DkuqTor7TmmI4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorbXNnaWQgImF1dGhvciIKK21zZ3N0ciAi5L2c6ICFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTkKK21zZ2lkICJvdmVycmlkZSBhdXRob3IgZm9yIGNvbW1pdCIKK21zZ3N0ciAi5o+Q5Lqk5pe26KaG55uW5L2c6ICFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAgYnVpbHRpbi9nYy5jOjUzOAorbXNnaWQgImRhdGUiCittc2dzdHIgIuaXpeacnyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAwCittc2dpZCAib3ZlcnJpZGUgZGF0ZSBmb3IgY29tbWl0IgorbXNnc3RyICLmj5DkuqTml7bopobnm5bml6XmnJ8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMiBidWlsdGluL2NvbW1pdC5jOjE1MDMgYnVpbHRpbi9jb21taXQuYzoxNTA0CisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDUgcGFyc2Utb3B0aW9ucy5oOjMyOCByZWYtZmlsdGVyLmg6OTIKK21zZ2lkICJjb21taXQiCittc2dzdHIgIuaPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIumHjeeUqOW5tue8lui+keaMh+WumuaPkOS6pOeahOaPkOS6pOivtOaYjiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAzCittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIumHjeeUqOaMh+WumuaPkOS6pOeahOaPkOS6pOivtOaYjiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA0Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi5L2/55SoIGF1dG9zcXVhc2gg5qC85byP55qE5o+Q5Lqk6K+05piO55So5Lul5L+u5q2j5oyH5a6a55qE5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDUKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi5L2/55SoIGF1dG9zcXVhc2gg5qC85byP55qE5o+Q5Lqk6K+05piO55So5Lul5Y6L57yp6Iez5oyH5a6a55qE5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDYKK21zZ2lkICJ0aGUgY29tbWl0IGlzIGF1dGhvcmVkIGJ5IG1lIG5vdyAodXNlZCB3aXRoIC1DLy1jLy0tYW1lbmQpIgorbXNnc3RyICLnjrDlnKjlsIbor6Xmj5DkuqTnmoTkvZzogIXmlLnkuLrmiJHvvIjlkowgLUMvLWMvLS1hbWVuZCDlj4LmlbDlhbHnlKjvvIkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNyBidWlsdGluL2xvZy5jOjE2MzQgYnVpbHRpbi9tZXJnZS5jOjI5MAorIzogYnVpbHRpbi9wdWxsLmM6MTQ0IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEwCittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICLmt7vliqAgU2lnbmVkLW9mZi1ieTog562+5ZCNIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDgKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgIuS9v+eUqOaMh+WumueahOaooeadv+aWh+S7tiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA5Cittc2dpZCAiZm9yY2UgZWRpdCBvZiBjb21taXQiCittc2dzdHIgIuW8uuWItue8lui+keaPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTExCittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIuWcqOaPkOS6pOivtOaYjuaooeadv+mHjOWMheWQq+eKtuaAgeS/oeaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE2Cittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIuaPkOS6pOWGheWuuemAiemhuSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE3Cittc2dpZCAiY29tbWl0IGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICLmj5DkuqTmiYDmnInmlLnliqjnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxOAorbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAi5re75Yqg5oyH5a6a55qE5paH5Lu25Yiw57Si5byV5Yy6562J5b6F5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTkKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAi5Lqk5LqS5byP5re75Yqg5paH5Lu2IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjAKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIgorbXNnc3RyICLkuqTkupLlvI/mt7vliqDlj5jmm7QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMQorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAi5Y+q5o+Q5Lqk5oyH5a6a55qE5paH5Lu2IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjIKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAi57uV6L+HIHByZS1jb21taXQg5ZKMIGNvbW1pdC1tc2cg6ZKp5a2QIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjMKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICLmmL7npLrlsIbopoHmj5DkuqTnmoTlhoXlrrkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzNgorbXNnaWQgImFtZW5kIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi5L+u5pS55YWI5YmN55qE5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzcKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgIue7lei/hyBwb3N0LXJld3JpdGUg6ZKp5a2QIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NDQKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICLlhYHorrjkuIDkuKrnqbrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU0NgorbXNnaWQgIm9rIHRvIHJlY29yZCBhIGNoYW5nZSB3aXRoIGFuIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgIuWFgeiuuOepuueahOaPkOS6pOivtOaYjiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIuaNn+Wdj+eahCBNRVJHRV9IRUFEIOaWh+S7tu+8iCVz77yJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MjYKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICLkuI3og73or7vlj5YgTUVSR0VfTU9ERSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5o+Q5Lqk6K+05piO77yaJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICLnu4jmraLmj5DkuqTlm6DkuLrmj5DkuqTor7TmmI7kuLrnqbrjgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdDsgeW91IGRpZCBub3QgZWRpdCB0aGUgbWVzc2FnZS5cbiIKK21zZ3N0ciAi57uI5q2i5o+Q5Lqk77yb5oKo5pyq5pu05pS55p2l6Ieq5qih54mI55qE5o+Q5Lqk6K+05piO44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY5MQorbXNnaWQgIiIKKyJyZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisi5LuT5bqT5bey5pu05paw77yM5L2G5peg5rOV5YaZIG5ld19pbmRleCDmlofku7bjgILmo4Dmn6XmmK/lkKbno4Hnm5jlt7Lmu6HmiJZcbiIKKyLno4Hnm5jphY3pop3lt7LogJflsL3vvIznhLblkI7miafooYwgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIOaBouWkjeOAgiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE3Cittc2dpZCAiIgorImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLXNoYWxsb3ddIFstLVtuby1dcHJvZ3Jlc3NdIgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA85a+56LGh55uu5b2VPl0gWy0tc2hhbGxvd10gWy0tIgorIltuby1dcHJvZ3Jlc3NdIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjIKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDzlr7nosaHnm67lvZU+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIG9iamVjdCBkaXJlY3RvcnkgbWF0Y2hpbmcgJXMiCittc2dzdHIgIuaXoOazleaJvuWIsOWSjCAlcyDljLnphY3nmoTlr7nosaHnm67lvZUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NjggYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMjUKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjEwIGJ1aWx0aW4vZmV0Y2guYzoxNzkgYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAiZGlyIgorbXNnc3RyICLnm67lvZUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NjkgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMjYKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjExCittc2dpZCAiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIgorbXNnc3RyICLkv53lrZjlm77lvaLnmoTlr7nosaHnm67lvZUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NzEKK21zZ2lkICJpZiB0aGUgY29tbWl0LWdyYXBoIGlzIHNwbGl0LCBvbmx5IHZlcmlmeSB0aGUgdGlwIGZpbGUiCittc2dzdHIgIuWmguaenOaPkOS6pOWbvuW9ouiiq+aLhuWIhu+8jOWPqumqjOivgeWktOS4gOS4quaWh+S7tiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo5NCB0L2hlbHBlci90ZXN0LXJlYWQtZ3JhcGguYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBjb21taXQtZ3JhcGggJyVzJyIKK21zZ3N0ciAi5peg5rOV5omT5byA5o+Q5Lqk5Zu+5b2iICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTI4Cittc2dpZCAic3RhcnQgd2FsayBhdCBhbGwgcmVmcyIKK21zZ3N0ciAi5byA5aeL6YGN5Y6G5omA5pyJ5byV55SoIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzMAorbXNnaWQgInNjYW4gcGFjay1pbmRleGVzIGxpc3RlZCBieSBzdGRpbiBmb3IgY29tbWl0cyIKK21zZ3N0ciAi5LuO5qCH5YeG6L6T5YWl5Lit55qE5YyF57Si5byV5paH5Lu25YiX6KGo5Lit5omr5o+P5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzMgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgIuS7juagh+WHhui+k+WFpeS4reeahOaPkOS6pOW8gOWni+aJq+aPjyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzQKK21zZ2lkICJpbmNsdWRlIGFsbCBjb21taXRzIGFscmVhZHkgaW4gdGhlIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICLljIXlkKsgY29tbWl0LWdyYXBoIOaWh+S7tuS4reW3suacieaJgOacieaPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzcKK21zZ2lkICJhbGxvdyB3cml0aW5nIGFuIGluY3JlbWVudGFsIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICLlhYHorrjlhpnkuIDkuKrlop7ph4/mj5DkuqTlm77lvaLmlofku7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTQzCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAi5Zyo6Z2e5Z+65pys5ouG5YiG5o+Q5Lqk5Zu+5b2i5Lit55qE5pyA5aSn5o+Q5Lqk5pWwIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE0MQorbXNnaWQgIm1heGltdW0gcmF0aW8gYmV0d2VlbiB0d28gbGV2ZWxzIG9mIGEgc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICLkuIDkuKrmi4bliIbmj5DkuqTlm77lvaLnmoTkuKTkuKrnuqfliKvkuYvpl7TnmoTmnIDlpKfmr5TnjociCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTU5Cittc2dpZCAidXNlIGF0IG1vc3Qgb25lIG9mIC0tcmVhY2hhYmxlLCAtLXN0ZGluLWNvbW1pdHMsIG9yIC0tc3RkaW4tcGFja3MiCittc2dzdHIgIuS4jeiDveWQjOaXtuS9v+eUqCAtLXJlYWNoYWJsZeOAgS0tc3RkaW4tY29tbWl0cyDmiJYgLS1zdGRpbi1wYWNrcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMQorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb25maWcgWzzpgInpobk+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMDQgYnVpbHRpbi9lbnYtLWhlbHBlci5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAtLXR5cGUgYXJndW1lbnQsICVzIgorbXNnc3RyICLmnKrog73or4bliKvnmoQgLS10eXBlIOWPguaVsO+8jCVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExNgorbXNnaWQgIm9ubHkgb25lIHR5cGUgYXQgYSB0aW1lIgorbXNnc3RyICLkuIDmrKHlj6rog73kuIDkuKrnsbvlnosiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI1Cittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgIumFjee9ruaWh+S7tuS9jee9riIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjYKK21zZ2lkICJ1c2UgZ2xvYmFsIGNvbmZpZyBmaWxlIgorbXNnc3RyICLkvb/nlKjlhajlsYDphY3nva7mlofku7YiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI3Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAi5L2/55So57O757uf57qn6YWN572u5paH5Lu2IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOAorbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICLkvb/nlKjku5PlupPnuqfphY3nva7mlofku7YiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI5Cittc2dpZCAidXNlIHBlci13b3JrdHJlZSBjb25maWcgZmlsZSIKK21zZ3N0ciAi5L2/55So5bel5L2c5Yy657qn5Yir55qE6YWN572u5paH5Lu2IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMAorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAi5L2/55So5oyH5a6a55qE6YWN572u5paH5Lu2IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgImJsb2ItaWQiCittc2dzdHIgIuaVsOaNruWvueixoSBJRCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzEKK21zZ2lkICJyZWFkIGNvbmZpZyBmcm9tIGdpdmVuIGJsb2Igb2JqZWN0IgorbXNnc3RyICLku47nu5nlrprnmoTmlbDmja7lr7nosaHor7vlj5bphY3nva4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMyCittc2dpZCAiQWN0aW9uIgorbXNnc3RyICLmk43kvZwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMzCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIuiOt+WPluWAvO+8mm5hbWUgW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzQKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIuiOt+W+l+aJgOacieeahOWAvO+8mmtleSBbdmFsdWUtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNQorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLmoLnmja7mraPliJnooajovr7lvI/ojrflvpflgLzvvJpuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM2Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAi6I635b6XIFVSTCDlj5blgLzvvJpzZWN0aW9uWy52YXJdIFVSTCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzcKK21zZ2lkICJyZXBsYWNlIGFsbCBtYXRjaGluZyB2YXJpYWJsZXM6IG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XSIKK21zZ3N0ciAi5pu/5o2i5omA5pyJ5Yy56YWN55qE5Y+Y6YeP77yabmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOAorbXNnaWQgImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIKK21zZ3N0ciAi5re75Yqg5LiA5Liq5paw55qE5Y+Y6YeP77yabmFtZSB2YWx1ZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzkKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLliKDpmaTkuIDkuKrlj5jph4/vvJpuYW1lIFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQwCittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIuWIoOmZpOaJgOacieWMuemFjemhue+8mm5hbWUgW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDEKK21zZ2lkICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiCittc2dzdHIgIumHjeWRveWQjeWwj+iKgu+8mm9sZC1uYW1lIG5ldy1uYW1lIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MgorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgIuWIoOmZpOS4gOS4quWwj+iKgu+8mm5hbWUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQzCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgIuWIl+WHuuaJgOaciSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDQKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAi5omT5byA5LiA5Liq57yW6L6R5ZmoIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NQorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICLojrflvpfphY3nva7nmoTpopzoibLvvJrphY3nva4gW+m7mOiupF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ2Cittc2dpZCAiZmluZCB0aGUgY29sb3Igc2V0dGluZzogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCittc2dzdHIgIuiOt+W+l+minOiJsuiuvue9ru+8mumFjee9riBbc3Rkb3V0LWlzLXR0eV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ3Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAi57G75Z6LIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OCBidWlsdGluL2Vudi0taGVscGVyLmM6MzgKK21zZ2lkICJ2YWx1ZSBpcyBnaXZlbiB0aGlzIHR5cGUiCittc2dzdHIgIuWPluWAvOS4uuivpeexu+WeiyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDkKK21zZ2lkICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiCittc2dzdHIgIuWAvOaYryBcInRydWVcIiDmiJYgXCJmYWxzZVwiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MAorbXNnaWQgInZhbHVlIGlzIGRlY2ltYWwgbnVtYmVyIgorbXNnc3RyICLlgLzmmK/ljYHov5vliLbmlbAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUxCittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICLlgLzmmK8gLS1ib29sIG9yIC0taW50IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MgorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgIuWAvOaYr+S4gOS4qui3r+W+hO+8iOaWh+S7tuaIluebruW9leWQje+8iSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTMKK21zZ2lkICJ2YWx1ZSBpcyBhbiBleHBpcnkgZGF0ZSIKK21zZ3N0ciAi5YC85piv5LiA5Liq5Yiw5pyf5pel5pyfIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NAorbXNnaWQgIk90aGVyIgorbXNnc3RyICLlhbblroMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU1Cittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICLnu4jmraLlgLzmmK8gTlVMIOWtl+iKgiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTYKK21zZ2lkICJzaG93IHZhcmlhYmxlIG5hbWVzIG9ubHkiCittc2dzdHIgIuWPquaYvuekuuWPmOmHj+WQjSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTcKK21zZ2lkICJyZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcyBvbiBsb29rdXAiCittc2dzdHIgIuafpeivouaXtuWPgueFpyBpbmNsdWRlIOaMh+S7pOmAkuW9kuafpeaJviIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTgKK21zZ2lkICJzaG93IG9yaWdpbiBvZiBjb25maWcgKGZpbGUsIHN0YW5kYXJkIGlucHV0LCBibG9iLCBjb21tYW5kIGxpbmUpIgorbXNnc3RyICLmmL7npLrphY3nva7nmoTmnaXmupDvvIjmlofku7bjgIHmoIflh4bovpPlhaXjgIHmlbDmja7lr7nosaHvvIzmiJblkb3ku6TooYzvvIkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU5Cittc2dpZCAic2hvdyBzY29wZSBvZiBjb25maWcgKHdvcmt0cmVlLCBsb2NhbCwgZ2xvYmFsLCBzeXN0ZW0sIGNvbW1hbmQpIgorbXNnc3RyICLmmL7npLrphY3nva7nmoTkvZznlKjln5/vvIjlt6XkvZzljLrjgIHmnKzlnLDjgIHlhajlsYDjgIHns7vnu5/jgIHlkb3ku6TvvIkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTYwIGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MAorbXNnaWQgInZhbHVlIgorbXNnc3RyICLlj5blgLwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTYwCittc2dpZCAid2l0aCAtLWdldCwgdXNlIGRlZmF1bHQgdmFsdWUgd2hlbiBtaXNzaW5nIGVudHJ5IgorbXNnc3RyICLkvb/nlKggLS1nZXQg5Y+C5pWw77yM5b2T57y65bCR6K6+572u5pe25L2/55So6buY6K6k5YC8IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgJWQiCittc2dzdHIgIumUmeivr+eahOWPguaVsOS4quaVsO+8jOW6lOivpeS4uiAlZCDkuKoiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIHNob3VsZCBiZSBmcm9tICVkIHRvICVkIgorbXNnc3RyICLplJnor6/nmoTlj4LmlbDkuKrmlbDvvIzlupTor6XkuLrku44gJWQg5Liq5YiwICVkIOS4qiIKKworIzogYnVpbHRpbi9jb25maWcuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgIuaXoOaViOmUruWQjeaooeW8j++8miVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZm9ybWF0IGRlZmF1bHQgY29uZmlnIHZhbHVlOiAlcyIKK21zZ3N0ciAi5qC85byP5YyW6buY6K6k6YWN572u5YC85aSx6LSl77yaJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBjb2xvciAnJXMnIgorbXNnc3RyICLml6Dms5Xop6PmnpDpopzoibIgJyVzJyIKKworIzogYnVpbHRpbi9jb25maWcuYzo0NTkKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q6buY6K6k6aKc6Imy5YC8IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUxMiBidWlsdGluL2NvbmZpZy5jOjc2OAorbXNnaWQgIm5vdCBpbiBhIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIuS4jeWcqCBnaXQg5LuT5bqT5LitIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUxNQorbXNnaWQgIndyaXRpbmcgdG8gc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi5LiN5pSv5oyB5YaZ5Yiw5qCH5YeG6L6T5YWlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUxOAorbXNnaWQgIndyaXRpbmcgY29uZmlnIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIuS4jeaUr+aMgeWGmeWIsOmFjee9ruaVsOaNruWvueixoSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiMgVGhpcyBpcyBHaXQncyBwZXItdXNlciBjb25maWd1cmF0aW9uIGZpbGUuXG4iCisiW3VzZXJdXG4iCisiIyBQbGVhc2UgYWRhcHQgYW5kIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKK21zZ3N0ciAiIgorIiMgVGhpcyBpcyBHaXQncyBwZXItdXNlciBjb25maWd1cmF0aW9uIGZpbGUuXG4iCisiW3VzZXJdXG4iCisiIyBQbGVhc2UgYWRhcHQgYW5kIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MjcKK21zZ2lkICJvbmx5IG9uZSBjb25maWcgZmlsZSBhdCBhIHRpbWUiCittc2dzdHIgIuS4gOasoeWPquiDveacieS4gOS4qumFjee9ruaWh+S7tiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MzIKK21zZ2lkICItLWxvY2FsIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tbG9jYWwg5Y+q6IO95Zyo5LiA5Liq5LuT5bqT5YaF5L2/55SoIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYzNQorbXNnaWQgIi0tYmxvYiBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLWJsb2Ig5Y+q6IO95Zyo5LiA5Liq5LuT5bqT5YaF5L2/55SoIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1NQorbXNnaWQgIiRIT01FIG5vdCBzZXQiCittc2dzdHIgIiRIT01FIOacquiuvue9riIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NzkKK21zZ2lkICIiCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgorbXNnc3RyICIiCisi5LiN6IO95ZKM5aSa5Liq5bel5L2c5Yy65LiA6LW35L2/55SoIC0td29ya3RyZWXvvIzpmaTpnZ7lkK/nlKggd29ya3RyZWVDb25maWcg6YWN572u5omp5bGV44CCXG4iCisi6K+m5oOF6K+36ZiF6K+74oCcZ2l0IGhlbHAgd29ya3RyZWXigJ3nmoTigJxDT05GSUdVUkFUSU9OIEZJTEXigJ3lsI/oioIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzE0Cittc2dpZCAiLS1nZXQtY29sb3IgYW5kIHZhcmlhYmxlIHR5cGUgYXJlIGluY29oZXJlbnQiCittc2dzdHIgIi0tZ2V0LWNvbG9yIOWSjOWPmOmHj+exu+Wei+S4jeWFvOWuuSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTkKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICLkuIDmrKHlj6rog73mnInkuIDkuKrliqjkvZwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzMyCittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIi0tbmFtZS1vbmx5IOS7hemAgueUqOS6jiAtLWxpc3Qg5oiWIC0tZ2V0LXJlZ2V4cCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzgKK21zZ2lkICIiCisiLS1zaG93LW9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwLCBhbmQgLS0iCisibGlzdCIKK21zZ3N0ciAiLS1zaG93LW9yaWdpbiDku4XpgILnlKjkuo4gLS1nZXTjgIEtLWdldC1hbGzjgIEtLWdldC1yZWdleHAg5ZKMIC0tbGlzdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDQKK21zZ2lkICItLWRlZmF1bHQgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0IgorbXNnc3RyICItLWRlZmF1bHQg5LuF6YCC55So5LqOIC0tZ2V0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIgorbXNnc3RyICLml6Dms5Xor7vlj5bphY3nva7mlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NjAKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGNvbmZpZyBmaWxlKHMpIgorbXNnc3RyICLlpITnkIbphY3nva7mlofku7blh7rplJkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzcwCittc2dpZCAiZWRpdGluZyBzdGRpbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICLkuI3mlK/mjIHnvJbovpHmoIflh4bovpPlhaUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzcyCittc2dpZCAiZWRpdGluZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICLkuI3mlK/mjIHnvJbovpHmlbDmja7lr7nosaEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICLkuI3og73liJvlu7rphY3nva7mlofku7YgJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3Qgb3ZlcndyaXRlIG11bHRpcGxlIHZhbHVlcyB3aXRoIGEgc2luZ2xlIHZhbHVlXG4iCisiICAgICAgIFVzZSBhIHJlZ2V4cCwgLS1hZGQgb3IgLS1yZXBsYWNlLWFsbCB0byBjaGFuZ2UgJXMuIgorbXNnc3RyICIiCisi5peg5rOV55So5LiA5Liq5YC86KaG55uW5aSa5Liq5YC8XG4iCisiICAgICAgIOS9v+eUqOS4gOS4quato+WImeihqOi+vuW8j+OAgS0tYWRkIOaIliAtLXJlcGxhY2UtYWxsIOadpeS/ruaUuSAlc+OAgiIKKworIzogYnVpbHRpbi9jb25maWcuYzo4NzMgYnVpbHRpbi9jb25maWcuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBzZWN0aW9uOiAlcyIKK21zZ3N0ciAi5peg5q2k5bCP6IqC77yaJXMiCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjkwCittc2dpZCAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKK21zZ3N0ciAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6MTAwCittc2dpZCAicHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0IgorbXNnc3RyICLku6XnlKjmiLflj6/or7vnmoTmoLzlvI/mmL7npLrlpKflsI8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNgorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs86YCJ6aG5Pl0gWzzmj5DkuqTlj7c+Li4uXSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIC0tZGlydHkiCittc2dzdHIgImdpdCBkZXNjcmliZSBbPOmAiemhuT5dIC0tZGlydHkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImhlYWQiCittc2dzdHIgIuWktCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAibGlnaHR3ZWlnaHQiCittc2dzdHIgIui9u+mHj+e6p+eahCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiYW5ub3RhdGVkIgorbXNnc3RyICLpmYTms6jnmoQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICLpmYTms6jmoIfnrb4gJXMg5peg5pWIIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgIumZhOazqOagh+etviAlcyDmsqHmnInltYzlhaXlkI3np7AiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAi5qCH562+ICclcycg55qE56Gu5piv5ZyoICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICLmsqHmnInmoIfnrb7lh4bnoa7ljLnphY0gJyVzJyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJObyBleGFjdCBtYXRjaCBvbiByZWZzIG9yIHRhZ3MsIHNlYXJjaGluZyB0byBkZXNjcmliZVxuIgorbXNnc3RyICLmsqHmnInnsr7noa7ljLnphY3liLDlvJXnlKjmiJbmoIfnrb7vvIznu6fnu63mkJzntKLov5vooYzmj4/ov7BcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAi5a6M5oiQ5pCc57SiICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKyLmsqHmnInpmYTms6jmoIfnrb7og73mj4/ov7AgJyVzJ+OAglxuIgorIueEtuiAjO+8jOWtmOWcqOacqumZhOazqOagh+etvu+8muWwneivlSAtLXRhZ3PjgIIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorIuayoeacieagh+etvuiDveaPj+i/sCAnJXMn44CCXG4iCisi5bCd6K+VIC0tYWx3YXlz77yM5oiW6ICF5Yib5bu65LiA5Lqb5qCH562+44CCIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICLlt7LpgY3ljoYgJWx1IOS4quaPkOS6pFxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorIuWPkeeOsOWkmuS6jiAlaSDkuKrmoIfnrb7vvIzliJflh7rmnIDov5HnmoQgJWkg5LiqXG4iCisi5ZyoICVzIOaUvuW8g+aQnOe0olxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc2NyaWJlICVzXG4iCittc2dzdHIgIuaPj+i/sCAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjnmoTlr7nosaHlkI0gJXMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbmVpdGhlciBhIGNvbW1pdCBub3IgYmxvYiIKK21zZ3N0ciAiJXMg5pei5LiN5piv5o+Q5Lqk5Lmf5LiN5piv5pWw5o2u5a+56LGhIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUxCittc2dpZCAiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIKK21zZ3N0ciAi5a+75om+6K+l5o+Q5Lqk5LmL5ZCO55qE5qCH562+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUyCittc2dpZCAiZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVyciIKK21zZ3N0ciAi5Zyo5qCH5YeG6ZSZ6K+v5LiK6LCD6K+V5pCc57Si562W55WlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUzCittc2dpZCAidXNlIGFueSByZWYiCittc2dzdHIgIuS9v+eUqOS7u+aEj+W8leeUqCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NAorbXNnaWQgInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIgorbXNnc3RyICLkvb/nlKjku7vmhI/moIfnrb7vvIzljbPkvb/mnKrpmYTluKbms6jph4oiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTUKK21zZ2lkICJhbHdheXMgdXNlIGxvbmcgZm9ybWF0IgorbXNnc3RyICLlp4vnu4jkvb/nlKjplb/mj5DkuqTlj7fmoLzlvI8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTYKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgIuWPqui3n+maj+esrOS4gOS4queItuaPkOS6pCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1OQorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgIuWPqui+k+WHuueyvuehruWMuemFjSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2MQorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgIuiAg+iZkeacgOi/kSA8bj4g5Liq5qCH562+77yI6buY6K6k77yaMTDvvIkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjMKK21zZ2lkICJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLlj6rogIPomZHljLnphY0gPOaooeW8jz4g55qE5qCH562+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY1Cittc2dpZCAiZG8gbm90IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLkuI3ogIPomZHljLnphY0gPOaooeW8jz4g55qE5qCH562+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY3IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzUKK21zZ2lkICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siCittc2dzdHIgIuaYvuekuueugOWGmeeahOaPkOS6pOWPt+S9nOS4uuWQjuWkhyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2OCBidWlsdGluL2Rlc2NyaWJlLmM6NTcxCittc2dpZCAibWFyayIKK21zZ3N0ciAi5qCH6K6wIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY5Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICLlr7nkuo7ohI/lt6XkvZzljLrvvIzov73liqAgPOagh+iusD7vvIjpu5jorqTvvJpcIi1kaXJ0eVwi77yJIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTcyCittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBicm9rZW4gd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1icm9rZW5cIikiCittc2dzdHIgIuWvueS6juaNn+Wdj+eahOW3peS9nOWMuu+8jOi/veWKoCA85qCH6K6wPu+8iOm7mOiupO+8mlwiLWJyb2tlblwi77yJIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTkwCittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIi0tbG9uZyDkuI4gLS1hYmJyZXY9MCDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MTkKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAi5rKh5pyJ5Y+R546w5ZCN56ew77yM5peg5rOV5o+P6L+w5Lu75L2V5Lic6KW/44CCIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjcwCittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tZGlydHkg5LiO5o+Q5Lqk5Y+35LiN5YW85a65IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjcyCittc2dpZCAiLS1icm9rZW4gaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWJyb2tlbiDkuI7mj5DkuqTlj7fkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICInJXMn77ya5LiN5piv5LiA5Liq5q2j6KeE5paH5Lu25oiW56ym5Y+36ZO+5o6lIgorCisjOiBidWlsdGluL2RpZmYuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcHRpb246ICVzIgorbXNnc3RyICLml6DmlYjpgInpobnvvJolcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzUwCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIuS4jeaYr+S4gOS4qiBnaXQg5LuT5bqTIgorCisjOiBidWlsdGluL2RpZmYuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIuaPkOS+m+S6huaXoOaViOWvueixoSAnJXMn44CCIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIHR3byBibG9icyBnaXZlbjogJyVzJyIKK21zZ3N0ciAi5o+Q5L6b5LqG6LaF6L+H5Lik5Liq5pWw5o2u5a+56LGh77yaJyVzJyIKKworIzogYnVpbHRpbi9kaWZmLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIuaXoOazleWkhOeQhueahOWvueixoSAnJXMn44CCIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAKK21zZ2lkICJnaXQgZGlmZnRvb2wgWzxvcHRpb25zPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBkaWZmdG9vbCBbPOmAiemhuT5dIFs85o+Q5LqkPiBbPOaPkOS6pD5dXSBbLS1dIFs86Lev5b6EPi4uLl0iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkOiAlZCIKK21zZ3N0ciAi5aSx6LSl77yaJWQiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAi5peg5rOV6K+75Y+W56ym5Y+36ZO+5o6lICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgZmlsZSAlcyIKK21zZ3N0ciAi5peg5rOV6K+75Y+W56ym5Y+36ZO+5o6l5paH5Lu2ICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyBmb3Igc3ltbGluayAlcyIKK21zZ3N0ciAi5peg5rOV6K+75Y+W56ym5Y+36ZO+5o6lICUyJHMg5oyH5ZCR55qE5a+56LGhICUxJHMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo0MTMKK21zZ2lkICIiCisiY29tYmluZWQgZGlmZiBmb3JtYXRzKCctYycgYW5kICctLWNjJykgYXJlIG5vdCBzdXBwb3J0ZWQgaW5cbiIKKyJkaXJlY3RvcnkgZGlmZiBtb2RlKCctZCcgYW5kICctLWRpci1kaWZmJykuIgorbXNnc3RyICIiCisi5LiN5pSv5oyB5Zyo55uu5b2V5q+U6L6D5qih5byP77yIJy1kJyDlkowgJy0tZGlyLWRpZmYn77yJ5Lit6YeH55So57uE5ZCI5beu5byC5qC85byP77yIJy1jJyDlkowgJy0tIgorImNjJ++8ieOAgiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJib3RoIGZpbGVzIG1vZGlmaWVkOiAnJXMnIGFuZCAnJXMnLiIKK21zZ3N0ciAi5Lik5Liq5paH5Lu26YO96KKr5L+u5pS577yaJyVzJyDlkowgJyVzJ+OAgiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNgorbXNnaWQgIndvcmtpbmcgdHJlZSBmaWxlIGhhcyBiZWVuIGxlZnQuIgorbXNnc3RyICLlt6XkvZzljLrmlofku7booqvnlZnkuobkuIvmnaXjgIIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcG9yYXJ5IGZpbGVzIGV4aXN0IGluICclcycuIgorbXNnc3RyICLkuLTml7bmlofku7blrZjlnKjkuo4gJyVzJ+OAgiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0OAorbXNnaWQgInlvdSBtYXkgd2FudCB0byBjbGVhbnVwIG9yIHJlY292ZXIgdGhlc2UuIgorbXNnc3RyICLmgqjlj6/og73mg7PopoHmuIXnkIbmiJbogIXmgaLlpI3lroPku6zjgIIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTcKK21zZ2lkICJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIKK21zZ3N0ciAi5L2/55SoIGBkaWZmLmd1aXRvb2xgIOS7o+abvyBgZGlmZi50b29sYCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5OQorbXNnaWQgInBlcmZvcm0gYSBmdWxsLWRpcmVjdG9yeSBkaWZmIgorbXNnc3RyICLmiafooYzkuIDkuKrlhajnm67lvZXlt67lvILmr5TovoMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDEKK21zZ2lkICJkbyBub3QgcHJvbXB0IGJlZm9yZSBsYXVuY2hpbmcgYSBkaWZmIHRvb2wiCittc2dzdHIgIuWQr+WKqOW3ruW8guavlOi+g+W3peWFt+S5i+WJjeS4jeaPkOekuiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNgorbXNnaWQgInVzZSBzeW1saW5rcyBpbiBkaXItZGlmZiBtb2RlIgorbXNnc3RyICLlnKggZGlyLWRpZmYg5qih5byP5Lit5L2/55So56ym5Y+36ZO+5o6lIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA3Cittc2dpZCAidG9vbCIKK21zZ3N0ciAi5bel5YW3IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA4Cittc2dpZCAidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIgorbXNnc3RyICLkvb/nlKjmjIflrprnmoTlt67lvILmr5TovoPlt6XlhbciCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTAKK21zZ2lkICJwcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggYC0tdG9vbGAiCittc2dzdHIgIuaYvuekuuWPr+S7peeUqOWcqCBgLS10b29sYCDlj4LmlbDlkI7nmoTlt67lvILlt6XlhbfliJfooagiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTMKK21zZ2lkICIiCisibWFrZSAnZ2l0LWRpZmZ0b29sJyBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbiAtIHplcm8gZXhpdCAiCisiY29kZSIKK21zZ3N0ciAi5b2T5omn6KGMIGRpZmYg5bel5YW36L+U5Zue6Z2e6Zu26YCA5Ye656CB5pe277yM5L2/ICdnaXQtZGlmZnRvb2wnIOmAgOWHuiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxNgorbXNnaWQgInNwZWNpZnkgYSBjdXN0b20gY29tbWFuZCBmb3Igdmlld2luZyBkaWZmcyIKK21zZ3N0ciAi5oyH5a6a5LiA5Liq55So5LqO5p+l55yL5beu5byC55qE6Ieq5a6a5LmJ5ZG95LukIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE3Cittc2dpZCAicGFzc2VkIHRvIGBkaWZmYCIKK21zZ3N0ciAi5Lyg6YCS57uZIGBkaWZmYCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjczMgorbXNnaWQgImRpZmZ0b29sIHJlcXVpcmVzIHdvcmt0cmVlIG9yIC0tbm8taW5kZXgiCittc2dzdHIgImRpZmZ0b29sIOimgeaxguW3peS9nOWMuuaIluiAhSAtLW5vLWluZGV4IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzM5Cittc2dpZCAiLS1kaXItZGlmZiBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICItLWRpci1kaWZmIOWSjCAtLW5vLWluZGV4IOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc0MgorbXNnaWQgIi0tZ3VpLCAtLXRvb2wgYW5kIC0tZXh0Y21kIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tZ3Vp44CBLS10b29sIOWSjCAtLWV4dGNtZCDkupLmlqUiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NTAKK21zZ2lkICJubyA8dG9vbD4gZ2l2ZW4gZm9yIC0tdG9vbD08dG9vbD4iCittc2dzdHIgIuayoeacieS4uiAtLXRvb2w9POW3peWFtz4g5Y+C5pWw5o+Q5L6bIDzlt6Xlhbc+IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzU3Cittc2dpZCAibm8gPGNtZD4gZ2l2ZW4gZm9yIC0tZXh0Y21kPTxjbWQ+IgorbXNnc3RyICLmsqHmnInkuLogLS1leHRjbWQ9POWRveS7pD4g5Y+C5pWw5o+Q5L6bIDzlkb3ku6Q+IgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NgorbXNnaWQgImdpdCBlbnYtLWhlbHBlciAtLXR5cGU9W2Jvb2x8dWxvbmddIDxvcHRpb25zPiA8ZW52LXZhcj4iCittc2dzdHIgImdpdCBlbnYtLWhlbHBlciAtLXR5cGU9W2Jvb2x8dWxvbmddIDzpgInpobk+IDznjq/looPlj5jph48+IgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6MzcgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAidHlwZSIKK21zZ3N0ciAi57G75Z6LIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NDEKK21zZ2lkICJkZWZhdWx0IGZvciBnaXRfZW52XyooLi4uKSB0byBmYWxsIGJhY2sgb24iCittc2dzdHIgImdpdF9lbnZfKiguLi4pIOeahOm7mOiupOWAvCIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQzCittc2dpZCAiYmUgcXVpZXQgb25seSB1c2UgZ2l0X2Vudl8qKCkgdmFsdWUgYXMgZXhpdCBjb2RlIgorbXNnc3RyICLlronpnZnmqKHlvI/vvIzlj6rkvb/nlKggZ2l0X2Vudl8qKCkg55qE5YC85L2c5Li66YCA5Ye656CBIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYSBib29sZWFuIHZhbHVlIHdpdGggYC0tdHlwZT1ib29sYCwgbm90IGAlc2AiCittc2dzdHIgIumAiemhuSBgLS1kZWZhdWx0JyDlkowgYHR5cGU9Ym9vbGAg5pyf5pyb5LiA5Liq5biD5bCU5YC877yM5LiN5pivIGAlc2AiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYW4gdW5zaWduZWQgbG9uZyB2YWx1ZSB3aXRoIGAtLXR5cGU9dWxvbmdgLCBub3QgYCIKKyIlc2AiCittc2dzdHIgIumAiemhuSBgLS1kZWZhdWx0JyDlkowgYHR5cGU9dWxvbmdgIOacn+acm+S4gOS4quaXoOespuWPt+mVv+aVtOWei++8jOS4jeaYryBgJXNgIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjkKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6ODUzCittc2dpZCAiRXJyb3I6IENhbm5vdCBleHBvcnQgbmVzdGVkIHRhZ3MgdW5sZXNzIC0tbWFyay10YWdzIGlzIHNwZWNpZmllZC4iCittc2dzdHIgIumUmeivr++8mumZpOmdnuaMh+WumiAtLW1hcmstdGFnc++8jOWQpuWImeaXoOazleWvvOWHuuW1jOWll+agh+etvuOAgiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTIKK21zZ2lkICJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIgorbXNnc3RyICLlnKggPG4+IOS4quWvueixoeS5i+WQjuaYvuekuui/m+W6piIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTQKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgIumAieaLqeWmguS9leWkhOeQhuetvuWQjeagh+etviIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTcKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgdGFncyB0aGF0IHRhZyBmaWx0ZXJlZCBvYmplY3RzIgorbXNnc3RyICLpgInmi6nlvZPmoIfnrb7mjIflkJHooqvov4fmu6Tlr7nosaHml7bor6XmoIfnrb7nmoTlpITnkIbmlrnlvI8iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYwCittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIGNvbW1pdCBtZXNzYWdlcyBpbiBhbiBhbHRlcm5hdGUgZW5jb2RpbmciCittc2dzdHIgIumAieaLqeS9v+eUqOWkh+eUqOe8lueggeWkhOeQhuaPkOS6pOivtOaYjiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjMKK21zZ2lkICJEdW1wIG1hcmtzIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAi5oqK5qCH6K6w5a2Y5YKo5Yiw6L+Z5Liq5paH5Lu2IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2NQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSIKK21zZ3N0ciAi5LuO6L+Z5Liq5paH5Lu25a+85YWl5qCH6K6wIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSBpZiBpdCBleGlzdHMiCittc2dzdHIgIuS7juivpeaWh+S7tuWvvOWFpeagh+iusO+8iOWmguaenOWtmOWcqOeahOivne+8iSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzEKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAi5b2T5qCH562+57y65bCR5qCH6K6w6ICF5a2X5q615pe277yM5YGH6KOF5o+Q5L6b5LiA5LiqIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3MworbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICLmr4/mrKHmj5DkuqTpg73ovpPlh7rmlbTkuKrmoJEiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc1Cittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgIuS9v+eUqCBkb25lIOWKn+iDveadpee7iOatoua1gSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzYKK21zZ2lkICJTa2lwIG91dHB1dCBvZiBibG9iIGRhdGEiCittc2dzdHIgIui3s+i/h+aVsOaNruWvueixoeeahOi+k+WHuiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzcgYnVpbHRpbi9sb2cuYzoxNzA1Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAi5byV55So6KeE5qC8IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OAorbXNnaWQgIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIKK21zZ3N0ciAi5a+55a+85Ye655qE5byV55So5bqU55So5byV55So6KeE5qC8IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OQorbXNnaWQgImFub255bWl6ZSBvdXRwdXQiCittc2dzdHIgIuWMv+WQjei+k+WHuiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODEKK21zZ2lkICJSZWZlcmVuY2UgcGFyZW50cyB3aGljaCBhcmUgbm90IGluIGZhc3QtZXhwb3J0IHN0cmVhbSBieSBvYmplY3QgaWQiCittc2dzdHIgIuW8leeUqOeItuWvueixoSBJRCDkuI3lnKggZmFzdC1leHBvcnQg5rWB5LitIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MworbXNnaWQgIlNob3cgb3JpZ2luYWwgb2JqZWN0IGlkcyBvZiBibG9icy9jb21taXRzIgorbXNnc3RyICLmmL7npLrmlbDmja7lr7nosaEv5o+Q5Lqk55qE5Y6f5aeL5a+56LGhIElEIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4NQorbXNnaWQgIkxhYmVsIHRhZ3Mgd2l0aCBtYXJrIGlkcyIKK21zZ3N0ciAi5a+55bim5pyJ5qCH6K6wIElEIOeahOagh+etvuWBmuagh+iusCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEyMjAKK21zZ2lkICJDYW5ub3QgcGFzcyBib3RoIC0taW1wb3J0LW1hcmtzIGFuZCAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHMiCittc2dzdHIgIuS4jeiDveWQjOaXtuS8oOmAkuWPguaVsCAtLWltcG9ydC1tYXJrcyDlkowgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzQKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBmZXRjaCBbPOmAiemhuT5dIFs85LuT5bqTPiBbPOW8leeUqOinhOagvD4uLi5dXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cD4iCittc2dzdHIgImdpdCBmZXRjaCBbPOmAiemhuT5dIDznu4Q+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MzYKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzzpgInpobk+XSBbKDzku5PlupM+IHwgPOe7hD4pLi4uXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM3Cittc2dpZCAiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1hbGwgWzzpgInpobk+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNgorbXNnaWQgImZldGNoLnBhcmFsbGVsIGNhbm5vdCBiZSBuZWdhdGl2ZSIKK21zZ3N0ciAiZmV0Y2gucGFyYWxsZWwg5LiN6IO95Li66LSf5pWwIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM5IGJ1aWx0aW4vcHVsbC5jOjE4NAorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIuS7juaJgOacieeahOi/nOeoi+aKk+WPliIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MSBidWlsdGluL3B1bGwuYzoyMjgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL2ZldGNoIgorbXNnc3RyICLkuLogZ2l0IHB1bGwvZmV0Y2gg6K6+572u5LiK5ri4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzIGJ1aWx0aW4vcHVsbC5jOjE4NworbXNnaWQgImFwcGVuZCB0byAuZ2l0L0ZFVENIX0hFQUQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyIKK21zZ3N0ciAi6L+95Yqg5YiwIC5naXQvRkVUQ0hfSEVBRCDogIzkuI3mmK/opobnm5blroMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDUgYnVpbHRpbi9wdWxsLmM6MTkwCittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICLkuIrkvKDljIXliLDov5znqIvnmoTot6/lvoQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDYKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgcmVmZXJlbmNlIgorbXNnc3RyICLlvLrliLbopobnm5bmnKzlnLDlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDgKK21zZ2lkICJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiCittc2dzdHIgIuS7juWkmuS4qui/nOeoi+aKk+WPliIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MCBidWlsdGluL3B1bGwuYzoxOTQKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICLmipPlj5bmiYDmnInnmoTmoIfnrb7lkozlhbPogZTlr7nosaEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTIKK21zZ2lkICJkbyBub3QgZmV0Y2ggYWxsIHRhZ3MgKC0tbm8tdGFncykiCittc2dzdHIgIuS4jeaKk+WPluS7u+S9leagh+etvigtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU0Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgZmV0Y2hlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAi5a2Q5qih57uE6I635Y+W55qE5bm25Y+R5pWwIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2IGJ1aWx0aW4vcHVsbC5jOjE5NworbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICLmuIXpmaTov5znqIvlt7Lnu4/kuI3lrZjlnKjnmoTliIbmlK/nmoTot5/ouKrliIbmlK8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTgKK21zZ2lkICJwcnVuZSBsb2NhbCB0YWdzIG5vIGxvbmdlciBvbiByZW1vdGUgYW5kIGNsb2JiZXIgY2hhbmdlZCB0YWdzIgorbXNnc3RyICLmuIXpmaTov5znqIvkuI3lrZjlnKjnmoTmnKzlnLDmoIfnrb7vvIzlubbkuJTmm7/mjaLlj5jmm7TmoIfnrb4iCisKKyMgIOivkeiAhe+8muWPr+mAieWAvO+8jOS4jeiDvee/u+ivkQorIzogYnVpbHRpbi9mZXRjaC5jOjE1OSBidWlsdGluL2ZldGNoLmM6MTgyIGJ1aWx0aW4vcHVsbC5jOjEyMQorbXNnaWQgIm9uLWRlbWFuZCIKK21zZ3N0ciAib24tZGVtYW5kIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYwCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAi5o6n5Yi25a2Q5qih57uE55qE6YCS5b2S5oqT5Y+WIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY0IGJ1aWx0aW4vcHVsbC5jOjIwNQorbXNnaWQgImtlZXAgZG93bmxvYWRlZCBwYWNrIgorbXNnc3RyICLkv53mjIHkuIvovb3ljIUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjYKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAi5YWB6K645pu05pawIEhFQUQg5byV55SoIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY5IGJ1aWx0aW4vZmV0Y2guYzoxNzUgYnVpbHRpbi9wdWxsLmM6MjA4Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAi5rex5YyW5rWF5YWL6ZqG55qE5Y6G5Y+yIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcxCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyByZXBvc2l0b3J5IGJhc2VkIG9uIHRpbWUiCittc2dzdHIgIuWfuuS6juaXtumXtOadpea3seWMlua1heWFi+mahueahOWOhuWPsiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NyBidWlsdGluL3B1bGwuYzoyMTEKK21zZ2lkICJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi6L2s5o2i5Li65LiA5Liq5a6M5pW055qE5LuT5bqTIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwCittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAi5Zyo5a2Q5qih57uE6Lev5b6E6L6T5Ye655qE5YmN6Z2i5Yqg5LiK5q2k55uu5b2VIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgzCittc2dpZCAiIgorImRlZmF1bHQgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIChsb3dlciBwcmlvcml0eSB0aGFuIGNvbmZpZyAiCisiZmlsZXMpIgorbXNnc3RyICLpgJLlvZLojrflj5blrZDmqKHnu4TnmoTnvLrnnIHlgLzvvIjmr5TphY3nva7mlofku7bkvJjlhYjnuqfkvY7vvIkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODcgYnVpbHRpbi9wdWxsLmM6MjE0Cittc2dpZCAiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IgorbXNnc3RyICLmjqXlj5fmm7TmlrAgLmdpdC9zaGFsbG93IOeahOW8leeUqCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OCBidWlsdGluL3B1bGwuYzoyMTYKK21zZ2lkICJyZWZtYXAiCittc2dzdHIgIuW8leeUqOaYoOWwhCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OSBidWlsdGluL3B1bGwuYzoyMTcKK21zZ2lkICJzcGVjaWZ5IGZldGNoIHJlZm1hcCIKK21zZ3N0ciAi5oyH5a6a6I635Y+W5pON5L2c55qE5byV55So5pig5bCEIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk2Cittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgIuaKpeWRiuaIkeS7rOWPquaLpeacieS7juivpeWvueixoeW8gOWni+WPr+i+vueahOWvueixoSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5OQorbXNnaWQgInJ1biAnZ2MgLS1hdXRvJyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAi6I635Y+W5ZCO5omn6KGMICdnYyAtLWF1dG8nIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAxIGJ1aWx0aW4vcHVsbC5jOjIyNgorbXNnaWQgImNoZWNrIGZvciBmb3JjZWQtdXBkYXRlcyBvbiBhbGwgdXBkYXRlZCBicmFuY2hlcyIKK21zZ3N0ciAi5Zyo5omA5pyJ5pu05paw5YiG5pSv5LiK5qOA5p+l5by65Yi25pu05pawIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAzCittc2dpZCAid3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAi5oqT5Y+W5ZCO5YaZ5o+Q5Lqk5Zu+IgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEzCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIuaXoOazleWPkeeOsOi/nOeoiyBIRUFEIOW8leeUqCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWd1cmF0aW9uIGZldGNoLm91dHB1dCBjb250YWlucyBpbnZhbGlkIHZhbHVlICVzIgorbXNnc3RyICLphY3nva7lj5jph48gZmV0Y2gub3V0cHV0IOWMheWQq+aXoOaViOWAvCAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1MQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICLlr7nosaEgJXMg5pyq5Y+R546wIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzU1Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJb5pyA5pawXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2OCBidWlsdGluL2ZldGNoLmM6Nzg0IGJ1aWx0aW4vZmV0Y2guYzo4NTYKK21zZ2lkICJbcmVqZWN0ZWRdIgorbXNnc3RyICJb5bey5ouS57udXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2OQorbXNnaWQgImNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICLlvZPliY3liIbmlK/kuIvkuI3og73miafooYzojrflj5bmk43kvZwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzkKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIlvmoIfnrb7mm7TmlrBdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzgwIGJ1aWx0aW4vZmV0Y2guYzo4MTcgYnVpbHRpbi9mZXRjaC5jOjgzOQorIzogYnVpbHRpbi9mZXRjaC5jOjg1MQorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICLkuI3og73mm7TmlrDmnKzlnLDlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODQKK21zZ2lkICJ3b3VsZCBjbG9iYmVyIGV4aXN0aW5nIHRhZyIKK21zZ3N0ciAi5Lya56C05Z2P546w5pyJ55qE5qCH562+IgorCisjOiBidWlsdGluL2ZldGNoLmM6ODA2Cittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICJb5paw5qCH562+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwOQorbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW+aWsOWIhuaUr10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MTIKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIlvmlrDlvJXnlKhdIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAi5by65Yi25pu05pawIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAi6Z2e5b+r6L+bIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODc3Cittc2dpZCAiIgorIkZldGNoIG5vcm1hbGx5IGluZGljYXRlcyB3aGljaCBicmFuY2hlcyBoYWQgYSBmb3JjZWQgdXBkYXRlLFxuIgorImJ1dCB0aGF0IGNoZWNrIGhhcyBiZWVuIGRpc2FibGVkLiBUbyByZS1lbmFibGUsIHVzZSAnLS1zaG93LWZvcmNlZC11cGRhdGVzJ1xuIgorImZsYWcgb3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIHRydWUnLiIKK21zZ3N0ciAiIgorIuiOt+WPluaTjeS9nOmAmuW4uOaYvuekuuWTquS6m+WIhuaUr+WPkeeUn+S6huW8uuWItuabtOaWsO+8jOS9huivpeajgOafpeW3suiiq+emgeeUqOOAglxuIgorIuimgemHjeaWsOWQr+eUqO+8jOivt+S9v+eUqCAnLS1zaG93LWZvcmNlZC11cGRhdGVzJyDpgInpobnmiJbov5DooYxcbiIKKyInZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJ+OAgiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gY2hlY2sgZm9yY2VkIHVwZGF0ZXMuIFlvdSBjYW4gdXNlXG4iCisiJy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcycgb3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzICIKKyJmYWxzZSdcbiIKKyIgdG8gYXZvaWQgdGhpcyBjaGVjay5cbiIKK21zZ3N0ciAiIgorIuiKseS6hiAlLjJmIOenkuadpeajgOafpeW8uuWItuabtOaWsOOAguaCqOWPr+S7peS9v+eUqCAnLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJ1xuIgorIuaIlui/kOihjCAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyBmYWxzZScg5Lul6YG/5YWN5q2k6aG55qOA5p+l44CCXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIlcyDmnKrlj5HpgIHmiYDmnInlv4XpnIDnmoTlr7nosaFcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk0MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWplY3QgJXMgYmVjYXVzZSBzaGFsbG93IHJvb3RzIGFyZSBub3QgYWxsb3dlZCB0byBiZSB1cGRhdGVkIgorbXNnc3RyICLmi5Lnu50gJXMg5Zug5Li65rWF5YWL6ZqG5LiN5YWB6K646KKr5pu05pawIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAyNiBidWlsdGluL2ZldGNoLmM6MTE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAi5p2l6IeqICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorIuS4gOS6m+acrOWcsOW8leeUqOS4jeiDveiiq+abtOaWsO+8m+Wwneivlei/kOihjFxuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycg5p2l5Yig6Zmk5pen55qE44CB5pyJ5Yay56qB55qE5YiG5pSvIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgIO+8iCVzIOWwhuaIkOS4uuaCrOepuueKtuaAge+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBidWlsdGluL2ZldGNoLmM6MTEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgIO+8iCVzIOW3suaIkOS4uuaCrOepuueKtuaAge+8iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNjcKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIlvlt7LliKDpmaRdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2OCBidWlsdGluL3JlbW90ZS5jOjExMTIKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIu+8iOaXoO+8iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyBvZiBub24tYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICLmi5Lnu53ojrflj5bliLDpnZ7nuq/ku5PlupPnmoTlvZPliY3liIbmlK8gJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIumAiemhuSBcIiVzXCIg55qE5YC8IFwiJXNcIiDlr7nkuo4gJXMg5piv5peg5pWI55qEIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgIumAiemhuSBcIiVzXCIg5Li6ICVzIOaJgOW/veeVpVxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQyMQorbXNnaWQgIm11bHRpcGxlIGJyYW5jaGVzIGRldGVjdGVkLCBpbmNvbXBhdGlibGUgd2l0aCAtLXNldC11cHN0cmVhbSIKK21zZ3N0ciAi5qOA5rWL5Yiw5aSa5YiG5pSv77yM5ZKMIC0tc2V0LXVwc3RyZWFtIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzYKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi5rKh5pyJ5Li65LiA5Liq6L+c56iL6Lef6Liq5YiG5pSv6K6+572u5LiK5ri4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzOAorbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSB0YWciCittc2dzdHIgIuayoeacieS4uuS4gOS4qui/nOeoi+agh+etvuiuvue9ruS4iua4uCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NDAKK21zZ2lkICJ1bmtub3duIGJyYW5jaCB0eXBlIgorbXNnc3RyICLmnKrnn6XnmoTliIbmlK/nsbvlnosiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDQyCittc2dpZCAiIgorIm5vIHNvdXJjZSBicmFuY2ggZm91bmQuXG4iCisieW91IG5lZWQgdG8gc3BlY2lmeSBleGFjdGx5IG9uZSBicmFuY2ggd2l0aCB0aGUgLS1zZXQtdXBzdHJlYW0gb3B0aW9uLiIKK21zZ3N0ciAiIgorIuacquWPkeeOsOa6kOWIhuaUr+OAglxuIgorIuaCqOmcgOimgeS9v+eUqCAtLXNldC11cHN0cmVhbSDpgInpobnmjIflrprkuIDkuKrliIbmlK/jgIIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTY4IGJ1aWx0aW4vZmV0Y2guYzoxNjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIuato+WcqOiOt+WPliAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU3OCBidWlsdGluL2ZldGNoLmM6MTYzMyBidWlsdGluL3JlbW90ZS5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgIuS4jeiDveiOt+WPliAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZldGNoICclcycgKGV4aXQgY29kZTogJWQpXG4iCittc2dzdHIgIuaXoOazleiOt+WPliAnJXMn77yI6YCA5Ye656CB77yaJWTvvIlcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2OTMKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAi5pyq5oyH5a6a6L+c56iL5LuT5bqT44CC6K+36YCa6L+H5LiA5LiqIFVSTCDmiJbov5znqIvku5PlupPlkI3mjIflrprvvIznlKjku6Xojrflj5bmlrDmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzMwCittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAi5oKo6ZyA6KaB5oyH5a6a5LiA5Liq5qCH562+5ZCN56ew44CCIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc4MAorbXNnaWQgIk5lZ2F0aXZlIGRlcHRoIGluIC0tZGVlcGVuIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIi0tZGVlcGVuIOS4jeaUr+aMgei0n+aVsOa3seW6piIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODIKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWRlZXBlbiDlkowgLS1kZXB0aCDmmK/kupLmlqXnmoQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzg3Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi0tZGVwdGgg5ZKMIC0tdW5zaGFsbG93IOS4jeiDveWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODkKK21zZ2lkICItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi5a+55LqO5LiA5Liq5a6M5pW055qE5LuT5bqT77yM5Y+C5pWwIC0tdW5zaGFsbG93IOayoeacieaEj+S5iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MDUKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwg5LiN6IO95bim5LiA5Liq5LuT5bqT5Y+C5pWwIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwNworbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwg5bim5byV55So6KeE5qC85rKh5pyJ5Lu75L2V5oSP5LmJIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICLmsqHmnInov5nmoLfnmoTov5znqIvmiJbov5znqIvnu4TvvJolcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MjMKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIuiOt+WPlue7hOW5tuaMh+WumuW8leeUqOinhOagvOayoeacieaEj+S5iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NDEKK21zZ2lkICIiCisiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyJwYXJ0aWFsY2xvbmUiCittc2dzdHIgIuWPquWPr+S7peWwhiAtLWZpbHRlciDnlKjkuo7lnKggZXh0ZW5zaW9ucy5wYXJ0aWFsQ2xvbmUg5Lit6YWN572u55qE6L+c56iL5LuT5bqTIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzoxOAorbXNnaWQgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8ZmlsZT5dIgorbXNnc3RyICJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPOivtOaYjj5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDzmlofku7Y+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcxCittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICLlkJHmj5DkuqTor7TmmI7kuK3mnIDlpJrlpI3liLbmjIflrprmnaHnm67vvIjlkIjlubbogIzmnaXnmoTmj5DkuqTvvInnmoTnroDnn63or7TmmI4iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NAorbXNnaWQgImFsaWFzIGZvciAtLWxvZyAoZGVwcmVjYXRlZCkiCittc2dzdHIgIuWPguaVsCAtLWxvZyDnmoTliKvlkI3vvIjlt7LlvIPnlKjvvIkiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NworbXNnaWQgInRleHQiCittc2dzdHIgIuaWh+acrCIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc4Cittc2dpZCAidXNlIDx0ZXh0PiBhcyBzdGFydCBvZiBtZXNzYWdlIgorbXNnc3RyICLkvb/nlKggPOaWh+acrD4g5L2c5Li65o+Q5Lqk6K+05piO55qE5byA5aeLIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzkKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAi5LuO5paH5Lu25Lit6K+75Y+WIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbPOmAiemhuT5dIFs85qih5byPPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTEKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDzlr7nosaE+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMgorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbW1pdD5dXSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs85o+Q5LqkPl1dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEzCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPGNvbW1pdD5dXSBbLS1uby1jb250YWlucyBbPGNvbW1pdD5dXSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPOaPkOS6pD5dXSBbLS1uby1jb250YWlucyBbPOaPkOS6pD5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIgorbXNnc3RyICLlvJXnlKjljaDkvY3nrKbpgILnlKjkuo4gc2hlbGxzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMwCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBwZXJsIgorbXNnc3RyICLlvJXnlKjljaDkvY3nrKbpgILnlKjkuo4gcGVybCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICLlvJXnlKjljaDkvY3nrKbpgILnlKjkuo4gcHl0aG9uIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM0Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBUY2wiCittc2dzdHIgIuW8leeUqOWNoOS9jeespumAgueUqOS6jiBUY2wiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzcKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAi5Y+q5pi+56S6IDxuPiDkuKrljLnphY3nmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzkgYnVpbHRpbi90YWcuYzo0MzkKK21zZ2lkICJyZXNwZWN0IGZvcm1hdCBjb2xvcnMiCittc2dzdHIgIumBteeFp+agvOW8j+S4reeahOminOiJsui+k+WHuiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBwb2ludHMgYXQgdGhlIGdpdmVuIG9iamVjdCIKK21zZ3N0ciAi5Y+q5omT5Y2w5oyH5ZCR57uZ5a6a5a+56LGh55qE5byV55SoIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ0Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAi5Y+q5omT5Y2w5bey57uP5ZCI5bm255qE5byV55SoIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ1Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgIuWPquaJk+WNsOayoeacieWQiOW5tueahOW8leeUqCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIuWPquaJk+WNsOWMheWQq+ivpeaPkOS6pOeahOW8leeUqCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NworbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIuWPquaJk+WNsOS4jeWMheWQq+ivpeaPkOS6pOeahOW8leeUqCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjggYnVpbHRpbi9mc2NrLmM6MTQ3IGJ1aWx0aW4vZnNjay5jOjE0OAorbXNnaWQgInVua25vd24iCittc2dzdHIgIuacquefpSIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTAwIGJ1aWx0aW4vZnNjay5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiAlcyAlczogJXMiCittc2dzdHIgIiVzICVzIOmUmeivr++8miVzIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiB3YXJuaW5nIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nIGluICVzICVzOiAlcyIKK21zZ3N0ciAiJXMgJXMg6K2m5ZGK77yaJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE0MyBidWlsdGluL2ZzY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXMiCittc2dzdHIgIuadpeiHqiAlN3MgJXMg55qE5o2f5Z2P55qE6ZO+5o6lIgorCisjOiBidWlsdGluL2ZzY2suYzoxNTUKK21zZ2lkICJ3cm9uZyBvYmplY3QgdHlwZSBpbiBsaW5rIgorbXNnc3RyICLpk77mjqXkuK3plJnor6/nmoTlr7nosaHnsbvlnosiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgIHRvICU3cyAlcyIKK21zZ3N0ciAiIgorIuaNn+Wdj+eahOmTvuaOpeadpeiHquS6jiAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgIOWIsCAlN3MgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzICVzIgorbXNnc3RyICLnvLrlpLEgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlYWNoYWJsZSAlcyAlcyIKK21zZ3N0ciAi5LiN5Y+v6L6+ICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGFuZ2xpbmcgJXMgJXMiCittc2dzdHIgIuaCrOepuiAlcyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzM5Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsb3N0LWZvdW5kIgorbXNnc3RyICLkuI3og73liJvlu7ogbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggJyVzJyIKK21zZ3N0ciAi5LiN6IO95a6M5oiQICclcyciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyIKK21zZ3N0ciAi5q2j5Zyo5qOA5p+lICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5ICglZCBvYmplY3RzKSIKK21zZ3N0ciAi5q2j5Zyo5qOA5p+l6L+e6YCa5oCn77yIJWQg5Liq5a+56LGh77yJIgorCisjOiBidWlsdGluL2ZzY2suYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMgJXMiCittc2dzdHIgIuato+WcqOajgOafpSAlcyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDI5Cittc2dpZCAiYnJva2VuIGxpbmtzIgorbXNnc3RyICLmjZ/lnY/nmoTpk77mjqUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJyb290ICVzIgorbXNnc3RyICLmoLkgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWdnZWQgJXMgJXMgKCVzKSBpbiAlcyIKK21zZ3N0ciAi5qCH6K6wICVzICVzICglcykg5LqOICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3NpbmciCittc2dzdHIgIiVz77ya5a+56LGh5o2f5Z2P5oiW5Lii5aSxIgorCisjOiBidWlsdGluL2ZzY2suYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgcmVmbG9nIGVudHJ5ICVzIgorbXNnc3RyICIlc++8muaXoOaViOeahOW8leeUqOaXpeW/l+adoeebriAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlZmxvZyAlcy0+JXMiCittc2dzdHIgIuato+WcqOajgOafpeW8leeUqOaXpeW/lyAlcy0+JXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgJXMiCittc2dzdHIgIiVz77ya5peg5pWI55qEIHNoYTEg5oyH6ZKIICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiJXPvvJrkuI3mmK/kuIDkuKrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYwOQorbXNnaWQgIm5vdGljZTogTm8gZGVmYXVsdCByZWZlcmVuY2VzIgorbXNnc3RyICLms6jmhI/vvJrml6Dpu5jorqTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZzogJXMiCittc2dzdHIgIiVz77ya5a+56LGh5o2f5Z2P5oiW5Lii5aSx77yaJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICVzIgorbXNnc3RyICIlc++8muS4jeiDveino+aekOWvueixoe+8miVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNoYTEgZmlsZTogJXMiCittc2dzdHIgIuWdj+eahCBzaGExIOaWh+S7tu+8miVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzIKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3J5IgorbXNnc3RyICLmraPlnKjmo4Dmn6Xlr7nosaHnm67lvZUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3NQorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIKK21zZ3N0ciAi5q2j5Zyo5qOA5p+l5a+56LGh55uu5b2VIgorCisjOiBidWlsdGluL2ZzY2suYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMgbGluayIKK21zZ3N0ciAi5q2j5Zyo5qOA5p+lICVzIOmTvuaOpSIKKworIzogYnVpbHRpbi9mc2NrLmM6Njk1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICLml6DmlYjnmoQgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIKK21zZ3N0ciAiJXMg5oyH5ZCR5aWH5oCq55qE5Lic6KW/77yIJXPvvIkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZGV0YWNoZWQgSEVBRCBwb2ludHMgYXQgbm90aGluZyIKK21zZ3N0ciAiJXPvvJrliIbnprvlpLTmjIfpkojnmoTmjIflkJHkuI3lrZjlnKgiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RpY2U6ICVzIHBvaW50cyB0byBhbiB1bmJvcm4gYnJhbmNoICglcykiCittc2dzdHIgIuazqOaEj++8miVzIOaMh+WQkeS4gOS4quWwmuacquivnueUn+eahOWIhuaUr++8iCVz77yJIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjQKK21zZ2lkICJDaGVja2luZyBjYWNoZSB0cmVlIgorbXNnc3RyICLmraPlnKjmo4Dmn6XnvJPlrZjmoJEiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAiJXPvvJpjYWNoZS10cmVlIOS4reaXoOaViOeahCBzaGExIOaMh+mSiCIKKworIzogYnVpbHRpbi9mc2NrLmM6NzM4Cittc2dpZCAibm9uLXRyZWUgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAiY2FjaGUtdHJlZSDkuK3pnZ7moJHlr7nosaEiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc2OQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs86YCJ6aG5Pl0gWzzlr7nosaE+Li4uXSIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc1Cittc2dpZCAic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLmmL7npLrkuI3lj6/ovr7nmoTlr7nosaEiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NgorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAi5pi+56S65oKs56m655qE5a+56LGhIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzcKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAi5oql5ZGK5qCH562+IgorCisjOiBidWlsdGluL2ZzY2suYzo3NzgKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAi5oql5ZGK5qC56IqC54K5IgorCisjOiBidWlsdGluL2ZzY2suYzo3NzkKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAi5bCG57Si5byV5Lqm5L2c5Li65qOA5p+l55qE5aS06IqC54K5IgorCisjOiBidWlsdGluL2ZzY2suYzo3ODAKK21zZ2lkICJtYWtlIHJlZmxvZ3MgaGVhZCBub2RlcyAoZGVmYXVsdCkiCittc2dzdHIgIuWwhuW8leeUqOaXpeW/l+S9nOS4uuajgOafpeeahOWktOiKgueCue+8iOm7mOiupO+8iSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgxCittc2dpZCAiYWxzbyBjb25zaWRlciBwYWNrcyBhbmQgYWx0ZXJuYXRlIG9iamVjdHMiCittc2dzdHIgIuS5n+iAg+iZkeWMheWSjOWkh+eUqOWvueixoSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgyCittc2dpZCAiY2hlY2sgb25seSBjb25uZWN0aXZpdHkiCittc2dzdHIgIuS7heajgOafpei/numAmuaApyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgzCittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICLlkK/nlKjmm7TkuKXmoLznmoTmo4Dmn6UiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NQorbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICLlsIbmgqznqbrlr7nosaHlhpnlhaUgLmdpdC9sb3N0LWZvdW5kIOS4rSIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg2IGJ1aWx0aW4vcHJ1bmUuYzoxMzIKK21zZ2lkICJzaG93IHByb2dyZXNzIgorbXNnc3RyICLmmL7npLrov5vluqYiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NworbXNnaWQgInNob3cgdmVyYm9zZSBuYW1lcyBmb3IgcmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIuaYvuekuuWPr+i+vuWvueixoeeahOivpue7huWQjeensCIKKworIzogYnVpbHRpbi9mc2NrLmM6ODQ2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyNQorbXNnaWQgIkNoZWNraW5nIG9iamVjdHMiCittc2dzdHIgIuato+WcqOajgOafpeWvueixoSIKKworIzogYnVpbHRpbi9mc2NrLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgbWlzc2luZyIKK21zZ3N0ciAiJXPvvJrlr7nosaHnvLrlpLEiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlcjogZXhwZWN0ZWQgc2hhMSwgZ290ICclcyciCittc2dzdHIgIuaXoOaViOeahOWPguaVsO+8muacn+acmyBzaGEx77yM5b6X5YiwICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzozNQorbXNnaWQgImdpdCBnYyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGdjIFs86YCJ6aG5Pl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZnN0YXQgJXM6ICVzIgorbXNnc3RyICLlr7kgJXMg6LCD55SoIGZzdGF0IOWksei0pe+8miVzIgorCisjOiBidWlsdGluL2djLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAnJXMnIHZhbHVlICclcyciCittc2dzdHIgIuaXoOazleino+aekCAnJXMnIOWAvCAnJXMnIgorCisjOiBidWlsdGluL2djLmM6NDc1IGJ1aWx0aW4vaW5pdC1kYi5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgIuS4jeiDveWvuSAnJXMnIOiwg+eUqCBzdGF0IgorCisjOiBidWlsdGluL2djLmM6NDg0IGJ1aWx0aW4vbm90ZXMuYzoyNDAgYnVpbHRpbi90YWcuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAi5LiN6IO96K+75Y+WICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBsYXN0IGdjIHJ1biByZXBvcnRlZCB0aGUgZm9sbG93aW5nLiBQbGVhc2UgY29ycmVjdCB0aGUgcm9vdCBjYXVzZVxuIgorImFuZCByZW1vdmUgJXMuXG4iCisiQXV0b21hdGljIGNsZWFudXAgd2lsbCBub3QgYmUgcGVyZm9ybWVkIHVudGlsIHRoZSBmaWxlIGlzIHJlbW92ZWQuXG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyLmnIDlkI7kuIDmrKEgZ2Mg5pON5L2c5oql5ZGK5aaC5LiL5L+h5oGv44CC6K+35qOA5p+l5Y6f5Zug5bm25Yig6ZmkICVz44CCXG4iCisi5Zyo6K+l5paH5Lu26KKr5Yig6Zmk5LmL5YmN77yM6Ieq5Yqo5riF55CG5bCG5LiN5Lya5omn6KGM44CCXG4iCisiXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1MzkKK21zZ2lkICJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAi5riF6Zmk5pyq5byV55So55qE5a+56LGhIgorCisjOiBidWlsdGluL2djLmM6NTQxCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICLmm7TlvbvlupXvvIjlop7liqDov5DooYzml7bpl7TvvIkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICLlkK/nlKjoh6rliqjlnoPlnL7lm57mlLbmqKHlvI8iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDUKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAi5by65Yi25omn6KGMIGdjIOWNs+S9v+WPpuWkluS4gOS4qiBnYyDmraPlnKjmiafooYwiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDgKK21zZ2lkICJyZXBhY2sgYWxsIG90aGVyIHBhY2tzIGV4Y2VwdCB0aGUgbGFyZ2VzdCBwYWNrIgorbXNnc3RyICLpmaTkuobmnIDlpKfnmoTljIXkuYvlpJbvvIzlr7nmiYDmnInlhbblroPljIXmlofku7bph43mlrDmiZPljIUiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGdjLmxvZ2V4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAi6Kej5p6QIGdjLmxvZ2V4cGlyeSDnmoTlgLwgJXMg5aSx6LSlIgorCisjOiBidWlsdGluL2djLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBwcnVuZSBleHBpcnkgdmFsdWUgJXMiCittc2dzdHIgIuino+aekOa4hemZpOacn+mZkOWAvCAlcyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGluIGJhY2tncm91bmQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIuiHquWKqOWcqOWQjuWPsOaJp+ihjOS7k+W6k+aJk+WMheS7peaxguacgOS9s+aAp+iDveOAglxuIgorCisjOiBidWlsdGluL2djLmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAi6Ieq5Yqo5omT5YyF5LuT5bqT5Lul5rGC5pyA5L2z5oCn6IO944CCXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIKK21zZ3N0ciAi5omL5bel57u05oqk5Y+C6KeBIFwiZ2l0IGhlbHAgZ2NcIuOAglxuIgorCisjOiBidWlsdGluL2djLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnYyBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gbWFjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBpZiBub3QpIgorbXNnc3RyICIiCisi5bey57uP5pyJ5LiA5LiqIGdjIOato+i/kOihjOWcqOacuuWZqCAnJXMnIHBpZCAlPFBSSXVNQVg+77yI5aaC5p6c5LiN5piv77yM5L2/55SoIC0tZm9yY2XvvIkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo2OTQKK21zZ2lkICIiCisiVGhlcmUgYXJlIHRvbyBtYW55IHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHM7IHJ1biAnZ2l0IHBydW5lJyB0byByZW1vdmUgdGhlbS4iCittc2dzdHIgIuacieWkquWkmuS4jeWPr+i+vueahOadvuaVo+Wvueixoe+8jOi/kOihjCAnZ2l0IHBydW5lJyDliKDpmaTlroPku6zjgIIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjMwCittc2dpZCAiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8cGF0dGVybj4gWzxyZXY+Li4uXSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZ3JlcCBbPOmAiemhuT5dIFstZV0gPOaooeW8jz4gWzzniYjmnKw+Li4uXSBbWy0tXSA86Lev5b6EPi4uLl0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXDvvJrml6Dms5XliJvlu7rnur/nqIvvvJolcyIKKworIzogYnVpbHRpbi9ncmVwLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkgZm9yICVzIgorbXNnc3RyICLkuLogJTIkcyDorr7lrprnmoTnur/nqIvmlbAgKCUxJGQpIOaXoOaViCIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGlzIHRoZSBjb25maWd1cmF0aW9uCisjLiB2YXJpYWJsZSBmb3IgdHdlYWtpbmcgdGhyZWFkcywgY3VycmVudGx5CisjLiBncmVwLnRocmVhZHMKKyMuCisjOiBidWlsdGluL2dyZXAuYzoyODcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzOCBidWlsdGluL2luZGV4LXBhY2suYzoxNzMxCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAi5rKh5pyJ57q/56iL5pSv5oyB77yM5b+955WlICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo0NTMgYnVpbHRpbi9ncmVwLmM6NTc4IGJ1aWx0aW4vZ3JlcC5jOjYxOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgIuaXoOazleivu+WPluagke+8iCVz77yJIgorCisjOiBidWlsdGluL2dyZXAuYzo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAi5peg5rOV5oqT5Y+W5p2l6Ieq5LqOICVzIOexu+Wei+eahOWvueixoSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIuW8gOWFsyBgJWMnIOacn+acm+S4gOS4quaVsOWtl+WAvCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODAzCittc2dpZCAic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAi5Zyo57Si5byV5Yy65pCc57Si6ICM5LiN5piv5Zyo5bel5L2c5Yy6IgorCisjOiBidWlsdGluL2dyZXAuYzo4MDUKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAi5Zyo5pyq6KKrIGdpdCDnrqHnkIbnmoTlhoXlrrnkuK3mn6Xmib4iCisKKyMgIOivkeiAhe+8muS4reaWh+Wtl+espuS4suaLvOaOpe+8jOWPr+WIoOmZpOWJjeWvvOepuuagvAorIzogYnVpbHRpbi9ncmVwLmM6ODA3Cittc2dpZCAic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLlnKjot5/ouKrlkozmnKrot5/ouKrnmoTmlofku7bkuK3mkJzntKIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwOQorbXNnaWQgImlnbm9yZSBmaWxlcyBzcGVjaWZpZWQgdmlhICcuZ2l0aWdub3JlJyIKK21zZ3N0ciAi5b+955WlICcuZ2l0aWdub3JlJyDljIXlkKvnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxMQorbXNnaWQgInJlY3Vyc2l2ZWx5IHNlYXJjaCBpbiBlYWNoIHN1Ym1vZHVsZSIKK21zZ3N0ciAi5Zyo5q+P5LiA5Liq5a2Q5qih57uE5Lit6YCS5b2S5pCc57SiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTQKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAi5pi+56S65pyq5Yy56YWN55qE6KGMIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTYKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICLkuI3ljLrliIblpKflsI/lhpnljLnphY0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxOAorbXNnaWQgIm1hdGNoIHBhdHRlcm5zIG9ubHkgYXQgd29yZCBib3VuZGFyaWVzIgorbXNnc3RyICLlj6rlnKjljZXor43ovrnnlYzljLnphY3mqKHlvI8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMAorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgIuaKiuS6jOi/m+WItuaWh+S7tuW9k+WBmuaWh+acrOWkhOeQhiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIyCittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICLkuI3lnKjkuozov5vliLbmlofku7bkuK3ljLnphY3mqKHlvI8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNQorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAi55SoIHRleHRjb252IOi/h+a7pOWZqOWkhOeQhuS6jOi/m+WItuaWh+S7tiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI3Cittc2dpZCAic2VhcmNoIGluIHN1YmRpcmVjdG9yaWVzIChkZWZhdWx0KSIKK21zZ3N0ciAi5Zyo5a2Q55uu5b2V5Lit5a+75om+77yI6buY6K6k77yJIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjkKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgIuacgOWkmuS7peaMh+WumueahOa3seW6puWQkeS4i+Wvu+aJviIKKworIzogYnVpbHRpbi9ncmVwLmM6ODMzCittc2dpZCAidXNlIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgIuS9v+eUqOaJqeWxleeahCBQT1NJWCDmraPliJnooajovr7lvI8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNgorbXNnaWQgInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIKK21zZ3N0ciAi5L2/55So5Z+65pys55qEIFBPU0lYIOato+WImeihqOi+vuW8j++8iOm7mOiupO+8iSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM5Cittc2dpZCAiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiCittc2dzdHIgIuaKiuaooeW8j+ino+aekOS4uuWbuuWumueahOWtl+espuS4siIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQyCittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICLkvb/nlKggUGVybCDlhbzlrrnnmoTmraPliJnooajovr7lvI8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NQorbXNnaWQgInNob3cgbGluZSBudW1iZXJzIgorbXNnc3RyICLmmL7npLrooYzlj7ciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NgorbXNnaWQgInNob3cgY29sdW1uIG51bWJlciBvZiBmaXJzdCBtYXRjaCIKK21zZ3N0ciAi5pi+56S656ys5LiA5Liq5Yy56YWN55qE5YiX5Y+3IgorCisjOiBidWlsdGluL2dyZXAuYzo4NDcKK21zZ2lkICJkb24ndCBzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAi5LiN5pi+56S65paH5Lu25ZCNIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDgKK21zZ2lkICJzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAi5pi+56S65paH5Lu25ZCNIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTAKK21zZ2lkICJzaG93IGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICLmmL7npLrnm7jlr7nkuo7pobbnuqfnm67lvZXnmoTmlofku7blkI0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MgorbXNnaWQgInNob3cgb25seSBmaWxlbmFtZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAi5Y+q5pi+56S65paH5Lu25ZCN6ICM5LiN5pi+56S65Yy56YWN55qE6KGMIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTQKK21zZ2lkICJzeW5vbnltIGZvciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKK21zZ3N0ciAi5ZKMIC0tZmlsZXMtd2l0aC1tYXRjaGVzIOWQjOS5iSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU3Cittc2dpZCAic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIgorbXNnc3RyICLlj6rmmL7npLrmnKrljLnphY3nmoTmlofku7blkI0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1OQorbXNnaWQgInByaW50IE5VTCBhZnRlciBmaWxlbmFtZXMiCittc2dzdHIgIuWcqOaWh+S7tuWQjeWQjui+k+WHuiBOVUwg5a2X56ymIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjIKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hpbmcgcGFydHMgb2YgYSBsaW5lIgorbXNnc3RyICLlj6rmmL7npLrooYzkuK3nmoTljLnphY3nmoTpg6jliIYiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NAorbXNnaWQgInNob3cgdGhlIG51bWJlciBvZiBtYXRjaGVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIuaYvuekuuaAu+WMuemFjeihjOaVsO+8jOiAjOS4jeaYvuekuuWMuemFjeeahOihjCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY1Cittc2dpZCAiaGlnaGxpZ2h0IG1hdGNoZXMiCittc2dzdHIgIumrmOS6ruaYvuekuuWMuemFjemhuSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY3Cittc2dpZCAicHJpbnQgZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMiCittc2dzdHIgIuWcqOS4jeWQjOaWh+S7tueahOWMuemFjemhueS5i+mXtOaJk+WNsOepuuihjCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY5Cittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAi5Y+q5Zyo5ZCM5LiA5paH5Lu255qE5Yy56YWN6aG555qE5LiK6Z2i5pi+56S65LiA5qyh5paH5Lu25ZCNIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzIKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAi5pi+56S65Yy56YWN6aG55YmN5ZCO55qEIDxuPiDooYzkuIrkuIvmlociCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NQorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIuaYvuekuuWMuemFjemhueWJjSA8bj4g6KGM5LiK5LiL5paHIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzcKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIuaYvuekuuWMuemFjemhueWQjiA8bj4g6KGM5LiK5LiL5paHIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzkKK21zZ2lkICJ1c2UgPG4+IHdvcmtlciB0aHJlYWRzIgorbXNnc3RyICLkvb/nlKggPG4+IOS4quW3peS9nOe6v+eoiyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgwCittc2dpZCAic2hvcnRjdXQgZm9yIC1DIE5VTSIKK21zZ3N0ciAi5b+r5o236ZSuIC1DIOaVsOWtlyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgzCittc2dpZCAic2hvdyBhIGxpbmUgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAi5Zyo5Yy56YWN55qE5YmN6Z2i5pi+56S65LiA6KGM5Ye95pWw5ZCNIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODUKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAi5pi+56S65omA5Zyo5Ye95pWw55qE5YmN5ZCO5YaF5a65IgorCisjOiBidWlsdGluL2dyZXAuYzo4ODgKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIKK21zZ3N0ciAi5LuO5paH5Lu26K+75Y+W5qih5byPIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTAKK21zZ2lkICJtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgIuWMuemFjSA85qih5byPPiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkyCittc2dpZCAiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIKK21zZ3N0ciAi57uE5ZCI55SoIC1lIOWPguaVsOiuvuWumueahOaooeW8jyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTA0Cittc2dpZCAiaW5kaWNhdGUgaGl0IHdpdGggZXhpdCBzdGF0dXMgd2l0aG91dCBvdXRwdXQiCittc2dzdHIgIuS4jei+k+WHuu+8jOiAjOeUqOmAgOWHuueggeagh+ivhuWRveS4reeKtuaAgSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTA2Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIKK21zZ3N0ciAi5Y+q5pi+56S65Yy56YWN5omA5pyJ5qih5byP55qE5paH5Lu25Lit55qE5Yy56YWNIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDgKK21zZ2lkICJzaG93IHBhcnNlIHRyZWUgZm9yIGdyZXAgZXhwcmVzc2lvbiIKK21zZ3N0ciAi5pi+56S6IGdyZXAg6KGo6L6+5byP55qE6Kej5p6Q5qCRIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTIKK21zZ2lkICJwYWdlciIKK21zZ3N0ciAi5YiG6aG1IgorCisjOiBidWlsdGluL2dyZXAuYzo5MTIKK21zZ2lkICJzaG93IG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciIKK21zZ3N0ciAi5YiG6aG15pi+56S65Yy56YWN55qE5paH5Lu2IgorCisjOiBidWlsdGluL2dyZXAuYzo5MTYKK21zZ2lkICJhbGxvdyBjYWxsaW5nIG9mIGdyZXAoMSkgKGlnbm9yZWQgYnkgdGhpcyBidWlsZCkiCittc2dzdHIgIuWFgeiuuOiwg+eUqCBncmVwKDEp77yI5pys5qyh5p6E5bu65b+955Wl77yJIgorCisjOiBidWlsdGluL2dyZXAuYzo5ODMKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuIgorbXNnc3RyICLmnKrmj5DkvpvljLnphY3mqKHlvI8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMTkKK21zZ2lkICItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cyIKK21zZ3N0ciAiLS1uby1pbmRleCDmiJYgLS11bnRyYWNrZWQg5LiN6IO95ZKM54mI5pys5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q54mI5pys77yaJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNTcKK21zZ2lkICItLXVudHJhY2tlZCBub3Qgc3VwcG9ydGVkIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCittc2dzdHIgIi0tdW50cmFja2VkIOS4jeaUr+aMgeWSjCAtLXJlY3Vyc2Utc3VibW9kdWxlcyDlhbHnlKgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjEKK21zZ2lkICJpbnZhbGlkIG9wdGlvbiBjb21iaW5hdGlvbiwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICLml6DmlYjnmoTpgInpobnnu4TlkIjvvIzlv73nlaUgLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY0IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU0NworbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICLmsqHmnInnur/nqIvmlK/mjIHvvIzlv73nlaUgLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODUxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgIuaMh+WumueahOe6v+eoi+aVsOaXoOaViO+8iCVk77yJIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTAxCittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICItLW9wZW4tZmlsZXMtaW4tcGFnZXIg5LuF55So5LqO5bel5L2c5Yy6IgorCisjOiBidWlsdGluL2dyZXAuYzoxMTI3Cittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICItLWNhY2hlZCDmiJYgLS11bnRyYWNrZWQg5LiN6IO95LiOIC0tbm8taW5kZXgg5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTMzCittc2dpZCAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMiCittc2dzdHIgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIOS4jeiDveeUqOS6juW3sui3n+i4quWGheWuuSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTE0MQorbXNnaWQgImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbiIKK21zZ3N0ciAi5ZCM5pe257uZ5Ye65LqGIC0tY2FjaGVkIOWSjOagkeWvueixoSIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg1Cittc2dpZCAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGZpbGU+Li4uIgorbXNnc3RyICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA857G75Z6LPl0gWy13XSBbLS1wYXRoPTzmlofku7Y+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPOaWh+S7tj4uLi4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4NgorbXNnaWQgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyIKK21zZ3N0ciAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTgKK21zZ2lkICJvYmplY3QgdHlwZSIKK21zZ3N0ciAi5a+56LGh57G75Z6LIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAi5bCG5a+56LGh5YaZ5YWl5a+56LGh5pWw5o2u5bqTIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAxCittc2dpZCAicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iCittc2dzdHIgIuS7juagh+WHhui+k+WFpeivu+WPluWvueixoSIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMworbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICLljp/moLflrZjlgqjmlofku7bkuI3kvb/nlKjov4fmu6TlmagiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDQKK21zZ2lkICIiCisianVzdCBoYXNoIGFueSByYW5kb20gZ2FyYmFnZSB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgR2l0IgorbXNnc3RyICLlhYHorrjlr7nku7vmhI/pmo/mnLrlnoPlnL7mlbDmja7lgZrmlaPliJfmnaXliJvlu7rmjZ/lnY/nmoTlr7nosaHku6Xkvr/osIPor5UgR2l0IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1Cittc2dpZCAicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiCittc2dzdHIgIuWkhOeQhuaWh+S7tuW5tuWBh+iuvuWFtuadpeiHquS6juatpOi3r+W+hCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDYKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICLmiZPljbDmiYDmnInlj6/nlKjnmoTlkb3ku6QiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3Cittc2dpZCAiZXhjbHVkZSBndWlkZXMiCittc2dzdHIgIuaOkumZpOWQkeWvvCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDgKK21zZ2lkICJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiCittc2dzdHIgIuaYvuekuuacieeUqOeahOaMh+WNl+WIl+ihqCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkKK21zZ2lkICJwcmludCBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1lcyIKK21zZ3N0ciAi5omT5Y2w5omA5pyJ6YWN572u5Y+Y6YeP5ZCN56ewIgorCisjOiBidWlsdGluL2hlbHAuYzo1MQorbXNnaWQgInNob3cgbWFuIHBhZ2UiCittc2dzdHIgIuaYvuekuiBtYW4g5omL5YaMIgorCisjOiBidWlsdGluL2hlbHAuYzo1MgorbXNnaWQgInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIgorbXNnc3RyICLlnKggd2ViIOa1j+iniOWZqOS4reaYvuekuuaJi+WGjCIKKworIzogYnVpbHRpbi9oZWxwLmM6NTQKK21zZ2lkICJzaG93IGluZm8gcGFnZSIKK21zZ3N0ciAi5pi+56S6IGluZm8g5omL5YaMIgorCisjOiBidWlsdGluL2hlbHAuYzo1NgorbXNnaWQgInByaW50IGNvbW1hbmQgZGVzY3JpcHRpb24iCittc2dzdHIgIuaJk+WNsOWRveS7pOaPj+i/sCIKKworIzogYnVpbHRpbi9oZWxwLmM6NjEKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs85ZG95LukPl0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICLmnKrog73or4bliKvnmoTluK7liqnmoLzlvI8gJyVzJyIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA0Cittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAi5peg5rOV5ZCv5YqoIGVtYWNzY2xpZW5044CCIgorCisjOiBidWlsdGluL2hlbHAuYzoxMTcKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZW1hY3NjbGllbnQgdmVyc2lvbi4iCittc2dzdHIgIuaXoOazleino+aekCBlbWFjc2NsaWVudCDniYjmnKzjgIIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICJlbWFjc2NsaWVudCDniYjmnKwgJyVkJyDlpKrogIHvvIg8IDIy77yJ44CCIgorCisjOiBidWlsdGluL2hlbHAuYzoxNDMgYnVpbHRpbi9oZWxwLmM6MTY1IGJ1aWx0aW4vaGVscC5jOjE3NSBidWlsdGluL2hlbHAuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWMgJyVzJyIKK21zZ3N0ciAi5omn6KGMICclcycg5aSx6LSlIgorCisjOiBidWlsdGluL2hlbHAuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMn77ya5LiN5pSv5oyB55qEIG1hbiDmiYvlhozmn6XnnIvlmajnmoTot6/lvoTjgIJcbiIKKyLor7fkvb/nlKggJ21hbi485bel5YW3Pi5jbWQn44CCIgorCisjOiBidWlsdGluL2hlbHAuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LnBhdGgnIGluc3RlYWQuIgorbXNnc3RyICIiCisiJyVzJzog5pSv5oyB55qEIG1hbiDmiYvlhozmn6XnnIvlmajlkb3ku6TjgIJcbiIKKyLor7fkvb/nlKggJ21hbi485bel5YW3Pi5wYXRoJ+OAgiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iCittc2dzdHIgIiclcyfvvJrmnKrnn6XnmoQgbWFuIOafpeeci+WZqOOAgiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzY3Cittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICLmsqHmnIkgbWFuIOafpeeci+WZqOWkhOeQhuatpOivt+axgiIKKworIzogYnVpbHRpbi9oZWxwLmM6Mzc1Cittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAi5rKh5pyJIGluZm8g5p+l55yL5Zmo5aSE55CG5q2k6K+35rGCIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzQgYnVpbHRpbi9oZWxwLmM6NDQ1IGdpdC5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFsaWFzZWQgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJyDmmK8gJyVzJyDnmoTliKvlkI0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0OCBnaXQuYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGFsaWFzLiVzIHN0cmluZzogJXMiCittc2dzdHIgIuWdj+eahCBhbGlhcy4lcyDlrZfnrKbkuLLvvJolcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDc3IGJ1aWx0aW4vaGVscC5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMlcyIKK21zZ3N0ciAi55So5rOV77yaJXMlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkxCittc2dpZCAiJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgaW5mb3JtYXRpb24iCittc2dzdHIgIidnaXQgaGVscCBjb25maWcnIOiOt+WPluabtOWkmuS/oeaBryIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCB0eXBlIG1pc21hdGNoIGF0ICVzIgorbXNnc3RyICIlcyDnmoTlr7nosaHnsbvlnovkuI3ljLnphY0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHJlY2VpdmUgZXhwZWN0ZWQgb2JqZWN0ICVzIgorbXNnc3RyICLmnKrog73ojrflj5bpooTmnJ/nmoTlr7nosaEgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXM6IGV4cGVjdGVkIHR5cGUgJXMsIGZvdW5kICVzIgorbXNnc3RyICLlr7nosaEgJXPvvJrlupTkuLrnsbvlnosgJXPvvIzljbTmmK8gJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAi5peg5rOV5aGr5YWFICVkIOWtl+iKgiIKK21zZ3N0clsxXSAi5peg5rOV5aGr5YWFICVkIOWtl+iKgiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY4Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICLov4fml6nnmoTmlofku7bnu5PmnZ/nrKbvvIhFT0bvvIkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2OQorbXNnaWQgInJlYWQgZXJyb3Igb24gaW5wdXQiCittc2dzdHIgIui+k+WFpeS4iueahOivu+mUmeivryIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjgxCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgIueUqOaOieS6hui2hei/h+WPr+eUqOeahOWtl+iKgiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjg4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NjA2Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAi5YyF5aSq5aSn6LaF6L+H5LqG5b2T5YmNIG9mZl90IOeahOWumuS5iSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjkxIGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo5NQorbXNnaWQgInBhY2sgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZSIKK21zZ3N0ciAi5YyF6LaF6L+H5LqG5pyA5aSn5YWB6K645YC8IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV5omT5byA5YyF5paH5Lu2ICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyNgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICLljIXnrb7lkI3kuI3ljLnphY0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIHZlcnNpb24gJTxQUkl1MzI+IHVuc3VwcG9ydGVkIgorbXNnc3RyICLkuI3mlK/mjIHljIXniYjmnKwgJTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJTxQUkl1TUFYPjogJXMiCittc2dzdHIgIuWMheS4reaciemUmeivr+eahOWvueixoeS9jeS6juWBj+enu+mHjyAlPFBSSXVNQVg+77yaJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICLop6PljovnvKnov5Tlm54gJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUxNQorbXNnaWQgIm9mZnNldCB2YWx1ZSBvdmVyZmxvdyBmb3IgZGVsdGEgYmFzZSBvYmplY3QiCittc2dzdHIgIuWBj+enu+WAvOimhuebluS6hiBkZWx0YSDln7rlh4blr7nosaEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUyMworbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IGlzIG91dCBvZiBib3VuZCIKK21zZ3N0ciAiZGVsdGEg5Z+65YeG5YGP56e76LaK55WMIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAi5pyq55+l5a+56LGh57G75Z6LICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjIKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICLml6Dms5Xor7vlj5bljIXmlofku7YiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlIG1pc3NpbmciCittc2dpZF9wbHVyYWwgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGVzIG1pc3NpbmciCittc2dzdHJbMF0gIuWMheaWh+S7tui/h+aXqee7k+adn++8jOe8uuWwkSAlPFBSSXVNQVg+IOWtl+iKgiIKK21zZ3N0clsxXSAi5YyF5paH5Lu26L+H5pep57uT5p2f77yM57y65bCRICU8UFJJdU1BWD4g5a2X6IqCIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1OTAKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAi6Kej5Y6L57yp5Lil6YeN55qE5LiN5LiA6Ie0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzUgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc2NQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgIuWPkeeOsCAlcyDlh7rnjrAgU0hBMSDlhrLnqoHvvIEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1OAorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIuS4jeiDveivuyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCBpbmZvICVzIgorbXNnc3RyICLkuI3og73or7vlj5bnjrDlrZjlr7nosaHkv6Hmga8gJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgIuS4jeiDveivu+WPlueOsOWtmOWvueixoSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvYiBvYmplY3QgJXMiCittc2dzdHIgIuaXoOaViOeahOaVsOaNruWvueixoSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NgorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFja2VkIG9iamVjdCIKK21zZ3N0ciAi5a+55omT5YyF5a+56LGhIGZzY2sg5qOA5p+l5Ye66ZSZIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgIiVzIOeahOaJgOacieWtkOWvueixoeW5tumdnumDveWPr+i+viIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTIwIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk1MQorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAi5bqU55SoIGRlbHRhIOWksei0pSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEyMQorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICLmjqXmlLblr7nosaHkuK0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjEKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICLntKLlvJXlr7nosaHkuK0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTUKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgIuWMheWGsueqge+8iFNIQTEg5LiN5Yy56YWN77yJIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTYwCittc2dpZCAiY2Fubm90IGZzdGF0IHBhY2tmaWxlIgorbXNnc3RyICLkuI3og73lr7nljIXmlofku7bosIPnlKggZnN0YXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjMKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgIuWMheeahOe7k+WwvuacieWeg+WcvuaVsOaNriIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE3NQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgInBhcnNlX3BhY2tfb2JqZWN0cygpIOS4remBh+WIsOS4jeWPr+eQhuWWu+eahOmXrumimCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE5OAorbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIuWkhOeQhiBkZWx0YSDkuK0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMDggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAi5LiN6IO95Yib5bu657q/56iL77yaJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNDkKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICLkuI3lj6/nkIbllrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3RzIgorbXNnc3RyWzBdICLlrozmiJAgJWQg5Liq5pys5Zyw5a+56LGhIgorbXNnc3RyWzFdICLlrozmiJAgJWQg5Liq5pys5Zyw5a+56LGhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICLlr7kgJXMg55qE5bC+6YOo5qCh6aqM5Ye6546w5oSP5aSW77yI56OB55uY5o2f5Z2P77yf77yJIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGEiCittc2dpZF9wbHVyYWwgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIgorbXNnc3RyWzBdICLljIXmnIkgJWQg5Liq5pyq6Kej5Yaz55qEIGRlbHRhIgorbXNnc3RyWzFdICLljIXmnIkgJWQg5Liq5pyq6Kej5Yaz55qEIGRlbHRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICLkuI3og73ljovnvKnpmYTliqDlr7nosaHvvIglZO+8iSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAi5pys5Zyw5a+56LGhICVzIOW3suaNn+WdjyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAi5YyF5paH5Lu25ZCNICclcycg5rKh5pyJ5LulICcucGFjaycg57uT5bC+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAlcyBmaWxlICclcyciCittc2dzdHIgIuaXoOazleWGmeWFpSAlcyDmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiAlcyBmaWxlICclcyciCittc2dzdHIgIuaXoOazleWFs+mXreW3suWGmeWFpeeahCAlcyDmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ2MworbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICLlhbPpl63ljIXmlofku7bml7blh7rplJkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzcKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICLml6Dms5XlrZjlgqjljIXmlofku7YiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0ODUKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAi5peg5rOV5a2Y5YKo57Si5byV5paH5Lu2IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTI5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICLlnY/nmoQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICLml6Dms5XmiZPlvIDnjrDlrZjljIXmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIgorbXNnc3RyICLml6Dms5XkuLogJXMg5omT5byA5YyF57Si5byV5paH5Lu2IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gIumdniBkZWx0Ye+8miVkIOS4quWvueixoSIKK21zZ3N0clsxXSAi6Z2eIGRlbHRh77yaJWQg5Liq5a+56LGhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gIumTvumVvyA9ICVkOiAlbHUg5a+56LGhIgorbXNnc3RyWzFdICLpk77plb8gPSAlZDogJWx1IOWvueixoSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY5MworbXNnaWQgIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICLml6Dms5Xov5Tlm57lvZPliY3lt6XkvZznm67lvZUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NDIgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc0NQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc2MSBidWlsdGluL2luZGV4LXBhY2suYzoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAi6ZSZ6K+v6YCJ6aG5ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzgxCittc2dpZCAiLS1maXgtdGhpbiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IC0tc3RkaW4iCittc2dzdHIgIi0tZml4LXRoaW4g5LiN6IO95ZKMIC0tc3RkaW4g5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzgzCittc2dpZCAiLS1zdGRpbiByZXF1aXJlcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLXN0ZGluIOmcgOimgeS4gOS4qiBnaXQg5LuT5bqTIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzg5Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICItLXZlcmlmeSDmsqHmnInmj5DkvpvljIXmlofku7blkI3lj4LmlbAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4MzcgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjU4MgorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFjayBvYmplY3RzIgorbXNnc3RyICLlnKjmiZPljIXlr7nosaHkuK0gZnNjayDmo4Dmn6Xlh7rplJkiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgIuS4jeiDveWvueaooeeJiCAnJXMnIOiwg+eUqCBzdGF0IgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbmRpciAnJXMnIgorbXNnc3RyICLkuI3og73miZPlvIDnm67lvZUgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgIuS4jeiDveivu+WPlumTvuaOpSAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgIuS4jeiDveiHqiAnJXMnIOWIsCAnJXMnIOWIm+W7uuespuWPt+mTvuaOpSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73mi7fotJ0gJyVzJyDoh7MgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdGVtcGxhdGUgJXMiCittc2dzdHIgIuW/veeVpeaooeeJiCAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgaW4gJXMiCittc2dzdHIgIuayoeacieWcqCAlcyDkuK3mib7liLDmqKHniYgiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgZnJvbSAnJXMnOiAlcyIKK21zZ3N0ciAi5rKh5pyJ5LuOICclcycg5aSN5Yi25qih54mI77yaJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaGFuZGxlIGZpbGUgdHlwZSAlZCIKK21zZ3N0ciAi5LiN6IO95aSE55CGICVkIOexu+Wei+eahOaWh+S7tiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICLkuI3og73np7vliqggJXMg6IezICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNTQgYnVpbHRpbi9pbml0LWRiLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIlcyDlt7Lnu4/lrZjlnKgiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIumHjeaWsOWIneWni+WMluW3suWtmOWcqOeahOWFseS6qyBHaXQg5LuT5bqT5LqOICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICLph43mlrDliJ3lp4vljJblt7LlrZjlnKjnmoQgR2l0IOS7k+W6k+S6jiAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICLlt7LliJ3lp4vljJbnqbrnmoTlhbHkuqsgR2l0IOS7k+W6k+S6jiAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIuW3suWIneWni+WMluepuueahCBHaXQg5LuT5bqT5LqOICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDY4Cittc2dpZCAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZS1kaXJlY3Rvcnk+XSBbLS0iCisic2hhcmVkWz08cGVybWlzc2lvbnM+XV0gWzxkaXJlY3Rvcnk+XSIKK21zZ3N0ciAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTzmqKHmnb/nm67lvZU+XSBbLS1zaGFyZWRbPTzmnYPpmZA+XV0gIgorIls855uu5b2VPl0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MQorbXNnaWQgInBlcm1pc3Npb25zIgorbXNnc3RyICLmnYPpmZAiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MgorbXNnaWQgInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIKK21zZ3N0ciAi5oyH5a6aIGdpdCDku5PlupPmmK/lpJrkuKrnlKjmiLfkuYvpl7TlhbHkuqvnmoQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyOSBidWlsdGluL2luaXQtZGIuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICLkuI3og73liJvlu7rnm67lvZUgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgIuS4jeiDveWIh+aNouebruW9leWIsCAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgc3BlY2lmeWluZyAlcyAob3IgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIuS4jeWFgeiuuCAlc++8iOaIliAtLXdvcmstdHJlZT0855uu5b2VPu+8ieiAjOayoeacieaMh+WumiAlc++8iOaIliAtLWdpdC1kaXI9POebruW9lT7vvIkiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICLkuI3og73orr/pl67lt6XkvZzljLogJyVzJyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNgorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHRva2VuPlsoPXw6KTx2YWx1ZT5dKS4uLl0gWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciA86ZSuPlsoPXw6KTzlgLwiCisiPl0pLi4uXSBbPOaWh+S7tj4uLi5dIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk1Cittc2dpZCAiZWRpdCBmaWxlcyBpbiBwbGFjZSIKK21zZ3N0ciAi5Zyo5Y6f5L2N57yW6L6R5paH5Lu2IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk2Cittc2dpZCAidHJpbSBlbXB0eSB0cmFpbGVycyIKK21zZ3N0ciAi5Yig6Zmk56m655qE5bC+6YOo572y5ZCNIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk5Cittc2dpZCAid2hlcmUgdG8gcGxhY2UgdGhlIG5ldyB0cmFpbGVyIgorbXNnc3RyICLlnKjlk6rph4zmlL7nva7mlrDnmoTlsL7pg6jnvbLlkI0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAxCittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIuW9k+WwvumDqOe9suWQjeW3sue7j+WtmOWcqOaXtuaJgOmHh+WPlueahOWKqOS9nCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDMKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBpcyBtaXNzaW5nIgorbXNnc3RyICLlvZPlsL7pg6jnvbLlkI3nvLrlpLHml7bmiYDph4flj5bnmoTliqjkvZwiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA1Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIHRyYWlsZXJzIgorbXNnc3RyICLlj6rovpPlh7rlsL7pg6jnvbLlkI0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA2Cittc2dpZCAiZG8gbm90IGFwcGx5IGNvbmZpZyBydWxlcyIKK21zZ3N0ciAi5LiN6KaB5bqU55So6YWN572u6KeE5YiZIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNworbXNnaWQgImpvaW4gd2hpdGVzcGFjZS1jb250aW51ZWQgdmFsdWVzIgorbXNnc3RyICLov57mjqXnqbrnmb3mipjooYznmoTlgLwiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA4Cittc2dpZCAic2V0IHBhcnNpbmcgb3B0aW9ucyIKK21zZ3N0ciAi6K6+572u6Kej5p6Q6YCJ6aG5IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMAorbXNnaWQgImRvIG5vdCB0cmVhdCAtLS0gc3BlY2lhbGx5IgorbXNnc3RyICLkuI3opoHlr7kgLS0tIOeJueauiuWkhOeQhiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTEKK21zZ2lkICJ0cmFpbGVyIgorbXNnc3RyICLlsL7pg6jnvbLlkI0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEyCittc2dpZCAidHJhaWxlcihzKSB0byBhZGQiCittc2dzdHIgIuimgea3u+WKoOeahOWwvumDqOe9suWQjSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMjMKK21zZ2lkICItLXRyYWlsZXIgd2l0aCAtLW9ubHktaW5wdXQgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS10cmFpbGVyIOWSjCAtLW9ubHktaW5wdXQg5ZCM5pe25L2/55So5rKh5pyJ5oSP5LmJIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEzMworbXNnaWQgIm5vIGlucHV0IGZpbGUgZ2l2ZW4gZm9yIGluLXBsYWNlIGVkaXRpbmciCittc2dzdHIgIuayoeaciee7meWHuuimgeWOn+S9jee8lui+keeahOaWh+S7tiIKKworIzogYnVpbHRpbi9sb2cuYzo1NgorbXNnaWQgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBsb2cgWzzpgInpobk+XSBbPOeJiOacrOiMg+WbtD5dIFtbLS1dIDzot6/lvoQ+Li4uXSIKKworIzogYnVpbHRpbi9sb2cuYzo1NworbXNnaWQgImdpdCBzaG93IFs8b3B0aW9ucz5dIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgc2hvdyBbPOmAiemhuT5dIDzlr7nosaE+Li4uIgorCisjOiBidWlsdGluL2xvZy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tZGVjb3JhdGUgb3B0aW9uOiAlcyIKK21zZ3N0ciAi5peg5pWI55qEIC0tZGVjb3JhdGUg6YCJ6aG577yaJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc0Cittc2dpZCAic2hvdyBzb3VyY2UiCittc2dzdHIgIuaYvuekuua6kCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzUKK21zZ2lkICJVc2UgbWFpbCBtYXAgZmlsZSIKK21zZ3N0ciAi5L2/55So6YKu5Lu25pig5bCE5paH5Lu2IgorCisjOiBidWlsdGluL2xvZy5jOjE3NworbXNnaWQgIm9ubHkgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAi5Y+q5L+u6aWw5LiOIDzmqKHlvI8+IOWMuemFjeeahOW8leeUqCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzkKK21zZ2lkICJkbyBub3QgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAi5LiN5L+u6aWw5ZKMIDzmqKHlvI8+IOWMuemFjeeahOW8leeUqCIKKworIzogYnVpbHRpbi9sb2cuYzoxODAKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICLkv67ppbDpgInpobkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgzCittc2dpZCAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIuWkhOeQhuaWh+S7tuS4reesrCBuIOWIsCBtIOS5i+mXtOeahOihjO+8jOS7jiAxIOW8gOWniyIKKworIzogYnVpbHRpbi9sb2cuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICLmnIDnu4jovpPlh7rvvJolZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgImdpdCBzaG93ICVzOiDmjZ/lnY/nmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTUwIGJ1aWx0aW4vbG9nLmM6NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5a+56LGhICVzIgorCisjOiBidWlsdGluL2xvZy5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHR5cGU6ICVkIgorbXNnc3RyICLmnKrnn6XnsbvlnovvvJolZCIKKworIzogYnVpbHRpbi9sb2cuYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgY292ZXIgZnJvbSBkZXNjcmlwdGlvbiBtb2RlIgorbXNnc3RyICIlc++8muS7juaPj+i/sOeUn+aIkOmZhOWHveeahOaooeW8j+aXoOaViCIKKworIzogYnVpbHRpbi9sb2cuYzo4MjEKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyDmsqHmnInlgLwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTM2Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICLovpPlh7rnm67lvZXlkI3lpKrplb8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgIuaXoOazleaJk+W8gOihpeS4geaWh+S7tiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo5NjkKK21zZ2lkICJuZWVkIGV4YWN0bHkgb25lIHJhbmdlIgorbXNnc3RyICLlj6rpnIDopoHkuIDkuKrojIPlm7QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTc5Cittc2dpZCAibm90IGEgcmFuZ2UiCittc2dzdHIgIuS4jeaYr+S4gOS4quiMg+WbtCIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQzCittc2dpZCAiY292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAi6ZmE5Ye96ZyA6KaB6YKu5Lu25Zyw5Z2A5qC85byPIgorCisjOiBidWlsdGluL2xvZy5jOjExNDkKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGNvdmVyLWxldHRlciBmaWxlIgorbXNnc3RyICLml6Dms5XliJvlu7rpmYTlh73mlofku7YiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmUgaW4tcmVwbHktdG86ICVzIgorbXNnc3RyICLkuI3mraPluLjnmoQgaW4tcmVwbHktdG/vvJolcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU1Cittc2dpZCAiZ2l0IGZvcm1hdC1wYXRjaCBbPG9wdGlvbnM+XSBbPHNpbmNlPiB8IDxyZXZpc2lvbi1yYW5nZT5dIgorbXNnc3RyICJnaXQgZm9ybWF0LXBhdGNoIFs86YCJ6aG5Pl0gWzzku44+IHwgPOeJiOacrOiMg+WbtD5dIgorCisjOiBidWlsdGluL2xvZy5jOjEzMTMKK21zZ2lkICJ0d28gb3V0cHV0IGRpcmVjdG9yaWVzPyIKK21zZ3N0ciAi5Lik5Liq6L6T5Ye655uu5b2V77yfIgorCisjOiBidWlsdGluL2xvZy5jOjE0MjQgYnVpbHRpbi9sb2cuYzoyMTk3IGJ1aWx0aW4vbG9nLmM6MjE5OSBidWlsdGluL2xvZy5jOjIyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21taXQgJXMiCittc2dzdHIgIuacquefpeaPkOS6pCAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDM0IGJ1aWx0aW4vcmVwbGFjZS5jOjU4IGJ1aWx0aW4vcmVwbGFjZS5jOjIwNworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYiCittc2dzdHIgIuaXoOazleWwhiAnJXMnIOino+aekOS4uuS4gOS4quacieaViOW8leeUqCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDM5Cittc2dpZCAiY291bGQgbm90IGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIKK21zZ3N0ciAi5LiN6IO95om+5Yiw5YeG56Gu55qE5ZCI5bm25Z+657q/IgorCisjOiBidWlsdGluL2xvZy5jOjE0NDMKK21zZ2lkICIiCisiZmFpbGVkIHRvIGdldCB1cHN0cmVhbSwgaWYgeW91IHdhbnQgdG8gcmVjb3JkIGJhc2UgY29tbWl0IGF1dG9tYXRpY2FsbHksXG4iCisicGxlYXNlIHVzZSBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIHRvIHRyYWNrIGEgcmVtb3RlIGJyYW5jaC5cbiIKKyJPciB5b3UgY291bGQgc3BlY2lmeSBiYXNlIGNvbW1pdCBieSAtLWJhc2U9PGJhc2UtY29tbWl0LWlkPiBtYW51YWxseSIKK21zZ3N0ciAiIgorIuaXoOazleW+l+WIsOS4iua4uOWcsOWdgO+8jOWmguaenOS9oOaDs+iHquWKqOiusOW9leWfuue6v+aPkOS6pO+8jOivt+S9v+eUqOWRveS7pFxuIgorImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8g5p2l6Lef6Liq5LiA5Liq6L+c56iL5YiG5pSv44CC5oiW6ICF5L2g5Y+v5Lul6YCa6L+HXG4iCisi5Y+C5pWwIC0tYmFzZT085Z+657q/5o+Q5LqkPiDmiYvliqjmjIflrprkuIDkuKrln7rnur/mj5DkuqQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2MworbXNnaWQgImZhaWxlZCB0byBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgIuaXoOazleaJvuWIsOWHhuehrueahOWQiOW5tuWfuue6vyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc0Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkIGJlIHRoZSBhbmNlc3RvciBvZiByZXZpc2lvbiBsaXN0IgorbXNnc3RyICLln7rnur/mj5DkuqTlupTor6XmmK/niYjmnKzliJfooajnmoTnpZblhYgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ3OAorbXNnaWQgImJhc2UgY29tbWl0IHNob3VsZG4ndCBiZSBpbiByZXZpc2lvbiBsaXN0IgorbXNnc3RyICLln7rnur/mj5DkuqTkuI3lupTor6Xlh7rnjrDlnKjniYjmnKzliJfooajkuK0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzMQorbXNnaWQgImNhbm5vdCBnZXQgcGF0Y2ggaWQiCittc2dzdHIgIuaXoOazleW+l+WIsOihpeS4gSBpZCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTgzCittc2dpZCAiZmFpbGVkIHRvIGluZmVyIHJhbmdlLWRpZmYgcmFuZ2VzIgorbXNnc3RyICLml6Dms5Xmjqjmlq0gcmFuZ2UtZGlmZiDojIPlm7QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYyOQorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgIuS9v+eUqCBbUEFUQ0ggbi9tXe+8jOWNs+S9v+WPquacieS4gOS4quihpeS4gSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjMyCittc2dpZCAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiCittc2dzdHIgIuS9v+eUqCBbUEFUQ0hd77yM5Y2z5L2/5pyJ5aSa5Liq6KGl5LiBIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzYKK21zZ2lkICJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIKK21zZ3N0ciAi5omT5Y2w6KGl5LiB5Yiw5qCH5YeG6L6T5Ye6IgorCisjOiBidWlsdGluL2xvZy5jOjE2MzgKK21zZ2lkICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIKK21zZ3N0ciAi55Sf5oiQ5LiA5bCB6ZmE5Ye9IgorCisjOiBidWlsdGluL2xvZy5jOjE2NDAKK21zZ2lkICJ1c2Ugc2ltcGxlIG51bWJlciBzZXF1ZW5jZSBmb3Igb3V0cHV0IGZpbGUgbmFtZXMiCittc2dzdHIgIuS9v+eUqOeugOWNleeahOaVsOWtl+W6j+WIl+S9nOS4uui+k+WHuuaWh+S7tuWQjSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQxCittc2dpZCAic2Z4IgorbXNnc3RyICLlkI7nvIAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MgorbXNnaWQgInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIgorbXNnc3RyICLkvb/nlKggPOWQjue8gD4g5Luj5pu/ICcucGF0Y2gnIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDQKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICLooaXkuIHku6UgPG4+IOW8gOWni+e8luWPt++8jOiAjOS4jeaYrzEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NgorbXNnaWQgIm1hcmsgdGhlIHNlcmllcyBhcyBOdGggcmUtcm9sbCIKK21zZ3N0ciAi5qCH6K6w6KGl5LiB57O75YiX5piv56ys5Yeg5qyh6YeN5Yi2IgorCisjOiBidWlsdGluL2xvZy5jOjE2NDgKK21zZ2lkICJVc2UgW1JGQyBQQVRDSF0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICLkvb/nlKggW1JGQyBQQVRDSF0g5Luj5pu/IFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1MQorbXNnaWQgImNvdmVyLWZyb20tZGVzY3JpcHRpb24tbW9kZSIKK21zZ3N0ciAi5LuO5YiG5pSv5o+P6L+w6I635Y+W6ZmE5Ye955qE5qih5byPIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTIKK21zZ2lkICJnZW5lcmF0ZSBwYXJ0cyBvZiBhIGNvdmVyIGxldHRlciBiYXNlZCBvbiBhIGJyYW5jaCdzIGRlc2NyaXB0aW9uIgorbXNnc3RyICLln7rkuo7kuIDkuKrliIbmlK/mj4/ov7DnlJ/miJDpg6jliIbpmYTlh70iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NAorbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAi5L2/55SoIFs85YmN57yAPl0g5Luj5pu/IFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIKK21zZ3N0ciAi5oqK57uT5p6c5paH5Lu25a2Y5YKo5ZyoIDznm67lvZU+IgorCisjOiBidWlsdGluL2xvZy5jOjE2NjAKK21zZ2lkICJkb24ndCBzdHJpcC9hZGQgW1BBVENIXSIKK21zZ3N0ciAi5LiN5Yig6ZmkL+a3u+WKoCBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjMKK21zZ2lkICJkb24ndCBvdXRwdXQgYmluYXJ5IGRpZmZzIgorbXNnc3RyICLkuI3ovpPlh7rkuozov5vliLblt67lvIIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NQorbXNnaWQgIm91dHB1dCBhbGwtemVybyBoYXNoIGluIEZyb20gaGVhZGVyIgorbXNnc3RyICLlnKggRnJvbSDlpLTkv6Hmga/kuK3ovpPlh7rlhajkuLrpm7bnmoTlk4jluIzlgLwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NworbXNnaWQgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIKK21zZ3N0ciAi5LiN5YyF5ZCr5bey5Zyo5LiK5ri45o+Q5Lqk5Lit55qE6KGl5LiBIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjkKK21zZ2lkICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiCittc2dzdHIgIuaYvuekuue6r+ihpeS4geagvOW8j+iAjOmdnum7mOiupOeahO+8iOihpeS4gSvnirbmgIHvvIkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MQorbXNnaWQgIk1lc3NhZ2luZyIKK21zZ3N0ciAi6YKu5Lu25Y+R6YCBIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzIKK21zZ2lkICJoZWFkZXIiCittc2dzdHIgImhlYWRlciIKKworIzogYnVpbHRpbi9sb2cuYzoxNjczCittc2dpZCAiYWRkIGVtYWlsIGhlYWRlciIKK21zZ3N0ciAi5re75Yqg6YKu5Lu25aS0IgorCisjOiBidWlsdGluL2xvZy5jOjE2NzQgYnVpbHRpbi9sb2cuYzoxNjc2Cittc2dpZCAiZW1haWwiCittc2dzdHIgIumCruS7tuWcsOWdgCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0Cittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgIua3u+WKoOaUtuS7tuS6uiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc2Cittc2dpZCAiYWRkIENjOiBoZWFkZXIiCittc2dzdHIgIua3u+WKoOaKhOmAgSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc4Cittc2dpZCAiaWRlbnQiCittc2dzdHIgIuagh+ivhiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc5Cittc2dpZCAic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIKK21zZ3N0ciAi5bCGIEZyb20g5Zyw5Z2A6K6+572u5Li6IDzmoIfor4Y+77yI5aaC6Iul5LiN5o+Q5L6b77yM5YiZ55So5o+Q5Lqk6ICFIElEIOWBmuS4uuWcsOWdgO+8iSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgxCittc2dpZCAibWVzc2FnZS1pZCIKK21zZ3N0ciAi6YKu5Lu25qCH6K+GIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODIKK21zZ2lkICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iCittc2dzdHIgIuS9v+esrOS4gOWwgemCruS7tuS9nOS4uuWvuSA86YKu5Lu25qCH6K+GPiDnmoTlm57lpI0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MyBidWlsdGluL2xvZy5jOjE2ODYKK21zZ2lkICJib3VuZGFyeSIKK21zZ3N0ciAi6L6555WMIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODQKK21zZ2lkICJhdHRhY2ggdGhlIHBhdGNoIgorbXNnc3RyICLpmYTku7bmlrnlvI/mt7vliqDooaXkuIEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NworbXNnaWQgImlubGluZSB0aGUgcGF0Y2giCittc2dzdHIgIuWGheiBlOaYvuekuuihpeS4gSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkxCittc2dpZCAiZW5hYmxlIG1lc3NhZ2UgdGhyZWFkaW5nLCBzdHlsZXM6IHNoYWxsb3csIGRlZXAiCittc2dzdHIgIuWQr+eUqOmCruS7tue6v+e0ou+8jOmjjuagvO+8mua1he+8jOa3sSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkzCittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICLnrb7lkI0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSIKK21zZ3N0ciAi5re75Yqg5LiA5Liq562+5ZCNIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTUKK21zZ2lkICJiYXNlLWNvbW1pdCIKK21zZ3N0ciAi5Z+657q/5o+Q5LqkIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTYKK21zZ2lkICJhZGQgcHJlcmVxdWlzaXRlIHRyZWUgaW5mbyB0byB0aGUgcGF0Y2ggc2VyaWVzIgorbXNnc3RyICLkuLrooaXkuIHliJfooajmt7vliqDliY3nva7moJHkv6Hmga8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5OAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSBmcm9tIGEgZmlsZSIKK21zZ3N0ciAi5LuO5paH5Lu25re75Yqg5LiA5Liq562+5ZCNIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTkKK21zZ2lkICJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIgorbXNnc3RyICLkuI3opoHmiZPljbDooaXkuIHmlofku7blkI0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMQorbXNnaWQgInNob3cgcHJvZ3Jlc3Mgd2hpbGUgZ2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICLlnKjnlJ/miJDooaXkuIHml7bmmL7npLrov5vluqYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMworbXNnaWQgInNob3cgY2hhbmdlcyBhZ2FpbnN0IDxyZXY+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIuWcqOmZhOWHveaIluWNleS4quihpeS4geS4reaYvuekuuWSjCA8cmV2PiDnmoTlt67lvIIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwNgorbXNnaWQgInNob3cgY2hhbmdlcyBhZ2FpbnN0IDxyZWZzcGVjPiBpbiBjb3ZlciBsZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICLlnKjpmYTlh73miJbljZXkuKrooaXkuIHkuK3mmL7npLrlkowgPHJlZnNwZWM+IOeahOW3ruW8giIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA4Cittc2dpZCAicGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAi5Yib5bu65p2D6YeN55qE55m+5YiG5q+UIgorCisjOiBidWlsdGluL2xvZy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAi5YyF5ZCr5peg5pWI55qE6Lqr5Lu95qCH6K+G77yaJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwNworbXNnaWQgIi1uIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItbiDlkowgLWsg5LqS5palIgorCisjOiBidWlsdGluL2xvZy5jOjE4MDkKK21zZ2lkICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIOWSjCAtayDkupLmlqUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxNworbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1vbmx5IOaXoOaEj+S5iSIKKworIzogYnVpbHRpbi9sb2cuYzoxODE5Cittc2dpZCAiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtc3RhdHVzIOaXoOaEj+S5iSIKKworIzogYnVpbHRpbi9sb2cuYzoxODIxCittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWNoZWNrIOaXoOaEj+S5iSIKKworIzogYnVpbHRpbi9sb2cuYzoxODU0Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgIuagh+WHhui+k+WHuuaIluebruW9le+8jOWTquS4gOS4qu+8nyIKKworIzogYnVpbHRpbi9sb2cuYzoxOTU4Cittc2dpZCAiLS1pbnRlcmRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICItLWludGVyZGlmZiDpnIDopoEgLS1jb3Zlci1sZXR0ZXIg5oiW5Y2V5LiA6KGl5LiBIgorCisjOiBidWlsdGluL2xvZy5jOjE5NjIKK21zZ2lkICJJbnRlcmRpZmY6IgorbXNnc3RyICLniYjmnKzpl7Tlt67lvILvvJoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlcmRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICLlr7kgdiVkIOeahOeJiOacrOW3ruW8gu+8miIKKworIzogYnVpbHRpbi9sb2cuYzoxOTY5Cittc2dpZCAiLS1jcmVhdGlvbi1mYWN0b3IgcmVxdWlyZXMgLS1yYW5nZS1kaWZmIgorbXNnc3RyICItLWNyZWF0aW9uLWZhY3RvciDpnIDopoEgLS1yYW5nZS1kaWZmIgorCisjOiBidWlsdGluL2xvZy5jOjE5NzMKK21zZ2lkICItLXJhbmdlLWRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICItLXJhbmdlLWRpZmYg6ZyA6KaBIC0tY292ZXItbGV0dGVyIOaIluWNleS4gOihpeS4gSIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgxCittc2dpZCAiUmFuZ2UtZGlmZjoiCittc2dzdHIgIuiMg+WbtOW3ruW8gu+8miIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJhbmdlLWRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICLlr7kgdiVkIOeahOiMg+WbtOW3ruW8gu+8miIKKworIzogYnVpbHRpbi9sb2cuYzoxOTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgIuaXoOazleivu+WPluetvuWQjeaWh+S7tiAnJXMnIgorCisjOiBidWlsdGluL2xvZy5jOjIwMjkKK21zZ2lkICJHZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgIueUn+aIkOihpeS4gSIKKworIzogYnVpbHRpbi9sb2cuYzoyMDczCittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiCittc2dzdHIgIuaXoOazleWIm+W7uui+k+WHuuaWh+S7tiIKKworIzogYnVpbHRpbi9sb2cuYzoyMTMyCittc2dpZCAiZ2l0IGNoZXJyeSBbLXZdIFs8dXBzdHJlYW0+IFs8aGVhZD4gWzxsaW1pdD5dXV0iCittc2dzdHIgImdpdCBjaGVycnkgWy12XSBbPOS4iua4uD4gWzzlpLQ+IFs86ZmQ5Yi2Pl1dXSIKKworIzogYnVpbHRpbi9sb2cuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIKK21zZ3N0ciAi5LiN6IO95om+5Yiw6Lef6Liq55qE6L+c56iL5YiG5pSv77yM6K+35omL5bel5oyH5a6aIDzkuIrmuLg+44CCXG4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzAKK21zZ2lkICJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBscy1maWxlcyBbPOmAiemhuT5dIFs85paH5Lu2Pi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjYKK21zZ2lkICJpZGVudGlmeSB0aGUgZmlsZSBzdGF0dXMgd2l0aCB0YWdzIgorbXNnc3RyICLnlKjmoIfnrb7moIfor4bmlofku7bnmoTnirbmgIEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjgKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdhc3N1bWUgdW5jaGFuZ2VkJyBmaWxlcyIKK21zZ3N0ciAi5L2/55So5bCP5YaZ5a2X5q+N6KGo56S6ICflgYforr7mnKrmlLnlj5jnmoQnIOaWh+S7tiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzMAorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2ZzbW9uaXRvciBjbGVhbicgZmlsZXMiCittc2dzdHIgIuS9v+eUqOWwj+WGmeWtl+avjeihqOekuiAnZnNtb25pdG9yIGNsZWFuJyDmlofku7YiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzIKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAi5pi+56S657yT5a2Y55qE5paH5Lu277yI6buY6K6k77yJIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM0Cittc2dpZCAic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIuaYvuekuuW3suWIoOmZpOeahOaWh+S7tiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNgorbXNnaWQgInNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi5pi+56S65bey5L+u5pS555qE5paH5Lu2IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM4Cittc2dpZCAic2hvdyBvdGhlciBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLmmL7npLrlhbblroPmlofku7YiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDAKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi5pi+56S65b+955Wl55qE5paH5Lu2IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQzCittc2dpZCAic2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIuaYvuekuuaaguWtmOWMuuWGheWuueeahOWvueixoeWQjeensCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NQorbXNnaWQgInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiCittc2dzdHIgIuaYvuekuuaWh+S7tuezu+e7n+mcgOimgeWIoOmZpOeahOaWh+S7tiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NworbXNnaWQgInNob3cgJ290aGVyJyBkaXJlY3RvcmllcycgbmFtZXMgb25seSIKK21zZ3N0ciAi5Y+q5pi+56S64oCc5YW25LuW4oCd55uu5b2V55qE5ZCN56ewIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ5Cittc2dpZCAic2hvdyBsaW5lIGVuZGluZ3Mgb2YgZmlsZXMiCittc2dzdHIgIuaYvuekuuaWh+S7tuaNouihjOespuagvOW8jyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1MQorbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgIuS4jeaYvuekuuepuuebruW9lSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi5pi+56S65pyq5ZCI5bm255qE5paH5Lu2IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU2Cittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIuaYvuekuiByZXNvbHZlLXVuZG8g5L+h5oGvIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU4Cittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICLljLnphY3mjpLpmaTmlofku7bnmoTmqKHlvI8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjEKK21zZ2lkICJleGNsdWRlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gPGZpbGU+IgorbXNnc3RyICLku44gPOaWh+S7tj4g5Lit6K+75Y+W5o6S6Zmk5qih5byPIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY0Cittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgIuS7jiA85paH5Lu2PiDor7vlj5bpop3lpJbnmoTmr4/kuKrnm67lvZXnmoTmjpLpmaTmqKHlvI8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjYKK21zZ2lkICJhZGQgdGhlIHN0YW5kYXJkIGdpdCBleGNsdXNpb25zIgorbXNnc3RyICLmt7vliqDmoIflh4bnmoQgZ2l0IOaOkumZpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MAorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICLmmL7npLrnm7jlr7nkuo7pobbnuqfnm67lvZXnmoTmlofku7blkI0iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzMKK21zZ2lkICJyZWN1cnNlIHRocm91Z2ggc3VibW9kdWxlcyIKK21zZ3N0ciAi5Zyo5a2Q5qih57uE5Lit6YCS5b2SIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc1Cittc2dpZCAiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIgorbXNnc3RyICLlpoLmnpzku7vkvZUgPOaWh+S7tj4g6YO95LiN5Zyo57Si5byV5Yy677yM6KeG5Li66ZSZ6K+vIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc2Cittc2dpZCAidHJlZS1pc2giCittc2dzdHIgIuagkeWvueixoSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NworbXNnaWQgInByZXRlbmQgdGhhdCBwYXRocyByZW1vdmVkIHNpbmNlIDx0cmVlLWlzaD4gYXJlIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIuWBh+ijheiHquS7jiA85qCR5a+56LGhPiDkuYvlkI7liKDpmaTnmoTot6/lvoTku43nhLblrZjlnKgiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzkKK21zZ2lkICJzaG93IGRlYnVnZ2luZyBkYXRhIgorbXNnc3RyICLmmL7npLrosIPor5XmlbDmja4iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6OQorbXNnaWQgIiIKKyJnaXQgbHMtcmVtb3RlIFstLWhlYWRzXSBbLS10YWdzXSBbLS1yZWZzXSBbLS11cGxvYWQtcGFjaz08ZXhlYz5dXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy1xIHwgLS1xdWlldF0gWy0tZXhpdC1jb2RlXSBbLS1nZXQtdXJsXVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstLXN5bXJlZl0gWzxyZXBvc2l0b3J5PiBbPHJlZnM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgbHMtcmVtb3RlIFstLWhlYWRzXSBbLS10YWdzXSBbLS1yZWZzXSBbLS11cGxvYWQtcGFjaz08ZXhlYz5dXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy1xIHwgLS1xdWlldF0gWy0tZXhpdC1jb2RlXSBbLS1nZXQtdXJsXVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstLXN5bXJlZl0gWzzku5PlupM+IFs85byV55SoPi4uLl1dIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjU5Cittc2dpZCAiZG8gbm90IHByaW50IHJlbW90ZSBVUkwiCittc2dzdHIgIuS4jeaJk+WNsOi/nOeoiyBVUkwiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAgYnVpbHRpbi9scy1yZW1vdGUuYzo2MiBidWlsdGluL3JlYmFzZS5jOjE1NjEKK21zZ2lkICJleGVjIgorbXNnc3RyICJleGVjIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYxIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjMKK21zZ2lkICJwYXRoIG9mIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIGhvc3QiCittc2dzdHIgIui/nOeoi+S4u+acuuS4iueahCBnaXQtdXBsb2FkLXBhY2sg6Lev5b6EIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY1Cittc2dpZCAibGltaXQgdG8gdGFncyIKK21zZ3N0ciAi5LuF6ZmQ5LqO5qCH562+IgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY2Cittc2dpZCAibGltaXQgdG8gaGVhZHMiCittc2dzdHIgIuS7hemZkOS6juWIhuaUryIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NworbXNnaWQgImRvIG5vdCBzaG93IHBlZWxlZCB0YWdzIgorbXNnc3RyICLkuI3mmL7npLrlt7Lop6PmnpDnmoTmoIfnrb4iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjkKK21zZ2lkICJ0YWtlIHVybC48YmFzZT4uaW5zdGVhZE9mIGludG8gYWNjb3VudCIKK21zZ3N0ciAi5Y+C6ICDIHVybC48YmFzZT4uaW5zdGVhZE9mIOiuvue9riIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3MgorbXNnaWQgImV4aXQgd2l0aCBleGl0IGNvZGUgMiBpZiBubyBtYXRjaGluZyByZWZzIGFyZSBmb3VuZCIKK21zZ3N0ciAi6Iul5pyq5om+5Yiw5Yy56YWN55qE5byV55So5YiZ5Lul6YCA5Ye656CBMumAgOWHuiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3NQorbXNnaWQgInNob3cgdW5kZXJseWluZyByZWYgaW4gYWRkaXRpb24gdG8gdGhlIG9iamVjdCBwb2ludGVkIGJ5IGl0IgorbXNnc3RyICLpmaTkuobmmL7npLrmjIflkJHnmoTlr7nosaHlpJbvvIzmmL7npLrmjIflkJHnmoTlvJXnlKjlkI0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjMwCittc2dpZCAiZ2l0IGxzLXRyZWUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLXRyZWUgWzzpgInpobk+XSA85qCR5a+56LGhPiBbPOi3r+W+hD4uLi5dIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjgKK21zZ2lkICJvbmx5IHNob3cgdHJlZXMiCittc2dzdHIgIuWPquaYvuekuuagkSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMwCittc2dpZCAicmVjdXJzZSBpbnRvIHN1YnRyZWVzIgorbXNnc3RyICLpgJLlvZLliLDlrZDmoJEiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMgorbXNnaWQgInNob3cgdHJlZXMgd2hlbiByZWN1cnNpbmciCittc2dzdHIgIuW9k+mAkuW9kuaXtuaYvuekuuagkSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAi5p2h55uu5LulIE5VTCDlrZfnrKbnu4jmraIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNgorbXNnaWQgImluY2x1ZGUgb2JqZWN0IHNpemUiCittc2dzdHIgIuWMheaLrOWvueixoeWkp+WwjyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM4IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MAorbXNnaWQgImxpc3Qgb25seSBmaWxlbmFtZXMiCittc2dzdHIgIuWPquWIl+WHuuaWh+S7tuWQjSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQzCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAi5L2/55So5paH5Lu255qE5YWo6Lev5b6EIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDUKK21zZ2lkICJsaXN0IGVudGlyZSB0cmVlOyBub3QganVzdCBjdXJyZW50IGRpcmVjdG9yeSAoaW1wbGllcyAtLWZ1bGwtbmFtZSkiCittc2dzdHIgIuWIl+WHuuaVtOS4quagke+8m+S4jeS7heS7heW9k+WJjeebruW9le+8iOmakOWQqyAtLWZ1bGwtbmFtZe+8iSIKKworIzogYnVpbHRpbi9tYWlsc3BsaXQuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgbWJveDogJyVzJyIKK21zZ3N0ciAi56m655qEIG1ib3jvvJonJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6NTUKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IG1lcmdlIFs86YCJ6aG5Pl0gWzzmj5DkuqQ+Li4uXSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU2Cittc2dpZCAiZ2l0IG1lcmdlIC0tYWJvcnQiCittc2dzdHIgImdpdCBtZXJnZSAtLWFib3J0IgorCisjOiBidWlsdGluL21lcmdlLmM6NTcKK21zZ2lkICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTkKK21zZ2lkICJzd2l0Y2ggYG0nIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIuW8gOWFsyBgbScg6ZyA6KaB5LiA5Liq5YC8IgorCisjOiBidWlsdGluL21lcmdlLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIumAiemhuSBgJXMnIOmcgOimgeS4gOS4quWAvCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBtZXJnZSBzdHJhdGVneSAnJXMnLlxuIgorbXNnc3RyICLkuI3og73mib7liLDlkIjlubbnrZbnlaUgJyVzJ+OAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIuWPr+eUqOeahOetlueVpeacie+8miIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAi5Y+v55So55qE6Ieq5a6a5LmJ562W55Wl5pyJ77yaIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ1IGJ1aWx0aW4vcHVsbC5jOjEzMgorbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIuWcqOWQiOW5tueahOacgOWQjuS4jeaYvuekuuW3ruW8gue7n+iuoSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0OCBidWlsdGluL3B1bGwuYzoxMzUKK21zZ2lkICJzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIuWcqOWQiOW5tueahOacgOWQjuaYvuekuuW3ruW8gue7n+iuoSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0OSBidWlsdGluL3B1bGwuYzoxMzgKK21zZ2lkICIoc3lub255bSB0byAtLXN0YXQpIgorbXNnc3RyICLvvIjlkowgLS1zdGF0IOWQjOS5ie+8iSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1MSBidWlsdGluL3B1bGwuYzoxNDEKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIuWcqOWQiOW5tuaPkOS6pOS/oeaBr+S4rea3u+WKoO+8iOacgOWkmiA8bj4g5p2h77yJ57K+566A5o+Q5Lqk6K6w5b2VIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU0IGJ1aWx0aW4vcHVsbC5jOjE0NworbXNnaWQgImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIgorbXNnc3RyICLliJvlu7rkuIDkuKrljZXni6znmoTmj5DkuqTogIzkuI3mmK/lgZrkuIDmrKHlkIjlubYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTYgYnVpbHRpbi9wdWxsLmM6MTUwCittc2dpZCAicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIgorbXNnc3RyICLlpoLmnpzlkIjlubbmiJDlip/vvIzmiafooYzkuIDmrKHmj5DkuqTvvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTggYnVpbHRpbi9wdWxsLmM6MTUzCittc2dpZCAiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIgorbXNnc3RyICLlnKjmj5DkuqTliY3nvJbovpHmj5DkuqTor7TmmI4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjAKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIgorbXNnc3RyICLlhYHorrjlv6vov5vvvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjIgYnVpbHRpbi9wdWxsLmM6MTYwCittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAi5aaC5p6c5LiN6IO95b+r6L+b5bCx5pS+5byD5ZCI5bm2IgorCisjOiBidWlsdGluL21lcmdlLmM6MjY2IGJ1aWx0aW4vcHVsbC5jOjE2MworbXNnaWQgInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAi6aqM6K+B5oyH5a6a55qE5o+Q5Lqk5piv5ZCm5YyF5ZCr5LiA5Liq5pyJ5pWI55qEIEdQRyDnrb7lkI0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjcgYnVpbHRpbi9ub3Rlcy5jOjc4NyBidWlsdGluL3B1bGwuYzoxNjcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIwIGJ1aWx0aW4vcmViYXNlLmM6MTU3NSBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICLnrZbnlaUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjggYnVpbHRpbi9wdWxsLmM6MTY4Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIgorbXNnc3RyICLopoHkvb/nlKjnmoTlkIjlubbnrZbnlaUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjkgYnVpbHRpbi9wdWxsLmM6MTcxCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICJvcHRpb249dmFsdWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzAgYnVpbHRpbi9wdWxsLmM6MTcyCittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi5omA6YCJ55qE5ZCI5bm2562W55Wl55qE6YCJ6aG5IgorCisjOiBidWlsdGluL21lcmdlLmM6MjcyCittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICLlkIjlubbnmoTmj5DkuqTor7TmmI7vvIjpkojlr7npnZ7lv6vov5vlvI/lkIjlubbvvIkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzkKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAi5pS+5byD5b2T5YmN5q2j5Zyo6L+b6KGM55qE5ZCI5bm2IgorCisjCisjOiBidWlsdGluL21lcmdlLmM6MjgxCittc2dpZCAiLS1hYm9ydCBidXQgbGVhdmUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSBhbG9uZSIKK21zZ3N0ciAiLS1hYm9ydO+8jOS9huaYr+S/neeVmee0ouW8leWSjOW3peS9nOWMuiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MworbXNnaWQgImNvbnRpbnVlIHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICLnu6fnu63lvZPliY3mraPlnKjov5vooYznmoTlkIjlubYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODUgYnVpbHRpbi9wdWxsLmM6MTc5Cittc2dpZCAiYWxsb3cgbWVyZ2luZyB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICLlhYHorrjlkIjlubbkuI3nm7jlhbPnmoTljoblj7IiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyOTEKK21zZ2lkICJieXBhc3MgcHJlLW1lcmdlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAi57uV6L+HIHByZS1tZXJnZS1jb21taXQg5ZKMIGNvbW1pdC1tc2cg6ZKp5a2QIgorCisjOiBidWlsdGluL21lcmdlLmM6MzA4Cittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgIuS4jeiDvei/kOihjOi0ruiXj+OAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxMworbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAi6LSu6JeP5aSx6LSlIgorCisjOiBidWlsdGluL21lcmdlLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgIuS4jeaYr+S4gOS4quacieaViOWvueixoe+8miVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MzQwIGJ1aWx0aW4vbWVyZ2UuYzozNTcKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICLor7vlj5bmoJHlpLHotKUiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogYnVpbHRpbi9tZXJnZS5jOjM4NworbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIg77yI5peg5Y+v5Y6L57yp77yJIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAi5Y6L57yp5o+Q5LqkIC0tIOacquabtOaWsCBIRUFEXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICLml6DlkIjlubbkv6Hmga8gLS0g5pyq5pu05pawIEhFQURcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICInJXMnIOayoeacieaMh+WQkeS4gOS4quaPkOS6pCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBzdHJpbmc6ICVzIgorbXNnc3RyICLlnY/nmoQgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyDlrZfnrKbkuLLvvJolcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcwOAorbXNnaWQgIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgIuacquWkhOeQhuS4pOS4quWktOWQiOW5tuS5i+WklueahOS7u+S9leaTjeS9nOOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICJtZXJnZS1yZWN1cnNpdmUg55qE5pyq55+l6YCJ6aG577yaLVglcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgJXMiCittc2dzdHIgIuS4jeiDveWGmSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIuS4jeiDveS7jiAnJXMnIOivu+WPliIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIuacquaPkOS6pOWQiOW5tu+8jOS9v+eUqCAnZ2l0IGNvbW1pdCcg5a6M5oiQ5q2k5qyh5ZCI5bm244CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIGEgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB3aHkgdGhpcyBtZXJnZSBpcyBuZWNlc3NhcnksXG4iCisiZXNwZWNpYWxseSBpZiBpdCBtZXJnZXMgYW4gdXBkYXRlZCB1cHN0cmVhbSBpbnRvIGEgdG9waWMgYnJhbmNoLlxuIgorIlxuIgorbXNnc3RyICIiCisi6K+36L6T5YWl5LiA5Liq5o+Q5Lqk5L+h5oGv5Lul6Kej6YeK5q2k5ZCI5bm255qE5b+F6KaB5oCn77yM5bCk5YW25piv5bCG5LiA5Liq5pu05paw5ZCO55qE5LiK5ri45YiG5pSvXG4iCisi5ZCI5bm25Yiw5Li76aKY5YiG5pSv44CCXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDkKK21zZ2lkICJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICLnqbrnmoTmj5DkuqTor7TmmI7kvJrnu4jmraLmj5DkuqTjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAi5LulICclYycg5byA5aeL55qE6KGM5bCG6KKr5b+955Wl77yM6ICM56m655qE5o+Q5Lqk6K+05piO5bCG57uI5q2i5o+Q5Lqk44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NjUKK21zZ2lkICJFbXB0eSBjb21taXQgbWVzc2FnZS4iCittc2dzdHIgIuepuuaPkOS6pOS/oeaBr+OAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIuWkquajkuS6huOAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iCittc2dzdHIgIuiHquWKqOWQiOW5tuWksei0pe+8jOS/ruato+WGsueqgeeEtuWQjuaPkOS6pOS/ruato+eahOe7k+aenOOAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTgwCittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICLmsqHmnInlvZPliY3liIbmlK/jgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODIKK21zZ2lkICJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIuW9k+WJjeWIhuaUr+ayoeacieWvueW6lOeahOi/nOeoi+S7k+W6k+OAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4NAorbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi5b2T5YmN5YiG5pSv5rKh5pyJ5a6a5LmJ6buY6K6k55qE5LiK5ri45YiG5pSv44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgIuWvueS6jiAlcyDmsqHmnInmnaXoh6ogJXMg55qE6L+c56iL6Lef6Liq5YiG5pSvIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgdmFsdWUgJyVzJyBpbiBlbnZpcm9ubWVudCAnJXMnIgorbXNnc3RyICLnjq/looMgJyUyJHMnIOS4reWtmOWcqOWdj+eahOWPluWAvCAnJTEkcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIGluICVzOiAlcyIKK21zZ3N0ciAi5LiN6IO95ZyoICVzIOS4reWQiOW5tu+8miVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE4MworbXNnaWQgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICLkuI3og73lkIjlubYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjg2Cittc2dpZCAiLS1hYm9ydCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1hYm9ydCDkuI3luKblj4LmlbAiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjkwCittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICLmsqHmnInopoHnu4jmraLnmoTlkIjlubbvvIhNRVJHRV9IRUFEIOS4ouWkse+8ieOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTkKK21zZ2lkICItLXF1aXQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tcXVpdCDkuI3luKblj4LmlbAiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzEyCittc2dpZCAiLS1jb250aW51ZSBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1jb250aW51ZSDkuI3luKblj4LmlbAiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzE2Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgaW4gcHJvZ3Jlc3MgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICLmsqHmnInov5vooYzkuK3nmoTlkIjlubbvvIhNRVJHRV9IRUFEIOS4ouWkse+8ieOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzIKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi5oKo5bCa5pyq57uT5p2f5oKo55qE5ZCI5bm277yI5a2Y5ZyoIE1FUkdFX0hFQUTvvInjgIJcbiIKKyLor7flnKjlkIjlubbliY3lhYjmj5DkuqTmgqjnmoTkv67mlLnjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM5Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIuaCqOWwmuacque7k+adn+aCqOeahOaLo+mAie+8iOWtmOWcqCBDSEVSUllfUElDS19IRUFE77yJ44CCXG4iCisi6K+35Zyo5ZCI5bm25YmN5YWI5o+Q5Lqk5oKo55qE5L+u5pS544CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM0MgorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAi5oKo5bCa5pyq57uT5p2f5oKo55qE5ouj6YCJ77yI5a2Y5ZyoIENIRVJSWV9QSUNLX0hFQUTvvInjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzU2Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCittc2dzdHIgIuaCqOS4jeiDveWwhiAtLXNxdWFzaCDlkowgLS1uby1mZiDnu4TlkIjkvb/nlKjjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzU4Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1jb21taXQuIgorbXNnc3RyICLmgqjkuI3og73lsIYgLS1zcXVhc2gg5ZKMIC0tY29tbWl0IOe7hOWQiOS9v+eUqOOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNzQKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAi5pyq5oyH5a6a5o+Q5Lqk5bm25LiUIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIOacquiuvue9ruOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTEKK21zZ2lkICJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIKK21zZ3N0ciAi5bCa5LiN5pSv5oyB5Yiw56m65YiG5pSv55qE5Y6L57yp5o+Q5LqkIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5MworbXNnaWQgIk5vbi1mYXN0LWZvcndhcmQgY29tbWl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW50byBhbiBlbXB0eSBoZWFkIgorbXNnc3RyICLliLDnqbrliIbmlK/nmoTpnZ7lv6vov5vlvI/mj5DkuqTmsqHmnInmhI/kuYkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiVzIC0g5LiN6IO96KKr5ZCI5bm2IgorCisjOiBidWlsdGluL21lcmdlLmM6MTQwMAorbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIuWPquiDveWwhuS4gOS4quaPkOS6pOWQiOW5tuWIsOepuuWIhuaUr+S4iiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0ODEKK21zZ2lkICJyZWZ1c2luZyB0byBtZXJnZSB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICLmi5Lnu53lkIjlubbml6DlhbPnmoTljoblj7IiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDkwCittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiIKK21zZ3N0ciAi5bey57uP5piv5pyA5paw55qE44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAi5pu05pawICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAi5bCd6K+V6Z2e5bi45bCP55qE57Si5byV5YaF5ZCI5bm2Li4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIuaXoOOAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU3NAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4gWWVlYWghIgorbXNnc3RyICLlt7Lnu4/mmK/mnIDmlrDnmoTjgILogLbvvIEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTgwCittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICLml6Dms5Xlv6vov5vvvIznu4jmraLjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjAzIGJ1aWx0aW4vbWVyZ2UuYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICLlsIbmoJHlm57mu5roh7Pljp/lp4vnirbmgIEuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iCittc2dzdHIgIuWwneivleWQiOW5tuetlueVpSAlcy4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAi5rKh5pyJ5ZCI5bm2562W55Wl5aSE55CG5q2k5ZCI5bm244CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICLkvb/nlKjnrZbnlaUgJXMg5ZCI5bm25aSx6LSl44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICLkvb/nlKggJXMg5Lul5YeG5aSH5omL5bel6Kej5Yaz44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgIuiHquWKqOWQiOW5tui/m+WxlemhuuWIqe+8jOaMieimgeaxguWcqOaPkOS6pOWJjeWBnOatolxuIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDzmj5DkuqQ+IDzmj5DkuqQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMworbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSAtLW9jdG9wdXMgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSAtLW9jdG9wdXMgPOaPkOS6pD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM0Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA85o+Q5LqkPi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzUKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDzmj5DkuqQ+IDzmj5DkuqQ+IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8cmVmPiBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPOW8leeUqD4gWzzmj5DkuqQ+XSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTUzCittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICLovpPlh7rmiYDmnInlhbHlkIznmoTnpZblhYgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NQorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAi5p+l5om+5LiA5Liq5aSa6Lev5ZCI5bm255qE56WW5YWI5o+Q5LqkIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTcKK21zZ2lkICJsaXN0IHJldnMgbm90IHJlYWNoYWJsZSBmcm9tIG90aGVycyIKK21zZ3N0ciAi5pi+56S65LiN6IO96KKr5YW25LuW6K6/6Zeu5Yiw55qE54mI5pysIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTkKK21zZ2lkICJpcyB0aGUgZmlyc3Qgb25lIGFuY2VzdG9yIG9mIHRoZSBvdGhlcj8iCittc2dzdHIgIuesrOS4gOS4quaYr+WFtuS7lueahOelluWFiOaPkOS6pOS5iO+8nyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTYxCittc2dpZCAiZmluZCB3aGVyZSA8Y29tbWl0PiBmb3JrZWQgZnJvbSByZWZsb2cgb2YgPHJlZj4iCittc2dzdHIgIuagueaNriA85byV55SoPiDnmoTlvJXnlKjml6Xlv5fmn6Xmib4gPOaPkOS6pD4g55qE5rS+55Sf5aSEIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo5Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiAiCisiPG9yaWctZmlsZT4gPGZpbGUyPiIKK21zZ3N0ciAiIgorImdpdCBtZXJnZS1maWxlIFs86YCJ6aG5Pl0gWy1MIDzmlofku7YxPiBbLUwgPOWIneWniz4gWy1MIDzlkI3lrZcyPl1dXSA85paH5Lu2MT4gPOWIneWni+aWhyIKKyLku7Y+IDzmlofku7YyPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICLlsIbnu5Pmnpzlj5HpgIHliLDmoIflh4bovpPlh7oiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM2Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgIuS9v+eUqOWfuuS6jiBkaWZmMyDnmoTlkIjlubYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM3Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIgorbXNnc3RyICLlpoLmnpzlhrLnqoHvvIzkvb/nlKjmiJHku6znmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM5Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIuWmguaenOWGsueqge+8jOS9v+eUqOS7luS7rOeahOeJiOacrCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDEKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIgorbXNnc3RyICLlpoLmnpzlhrLnqoHvvIzkvb/nlKjogZTlkIjniYjmnKwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ0Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoaXMgbWFya2VyIHNpemUiCittc2dzdHIgIuWmguaenOWGsueqge+8jOS9v+eUqOaMh+WumumVv+W6pueahOagh+iusCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDUKK21zZ2lkICJkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMiCittc2dzdHIgIuS4jeimgeitpuWRiuWGsueqgSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDcKK21zZ2lkICJzZXQgbGFiZWxzIGZvciBmaWxlMS9vcmlnLWZpbGUvZmlsZTIiCittc2dzdHIgIuS4uiDmlofku7YxL+WIneWni+aWh+S7ti/mlofku7YyIOiuvue9ruagh+etviIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiAlcyIKK21zZ3N0ciAi5pyq55+l6YCJ6aG5ICVzIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5a+56LGhICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZS4gSWdub3JpbmcgJXMuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlcy4gSWdub3JpbmcgJXMuIgorbXNnc3RyWzBdICLml6Dms5XlpITnkIYgJWQg5p2h5Lul5LiK55qE5Z+657q/44CC5b+955WlICVz44CCIgorbXNnc3RyWzFdICLml6Dms5XlpITnkIYgJWQg5p2h5Lul5LiK55qE5Z+657q/44CC5b+955WlICVz44CCIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjY1Cittc2dpZCAibm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAi5LiN6IO95aSE55CG5Lik5Liq5aS05ZCI5bm25LmL5aSW55qE5Lu75L2V5pON5L2c44CCIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjc0IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgcmVmICclcyciCittc2dzdHIgIuaXoOazleino+aekOW8leeUqCAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgd2l0aCAlc1xuIgorbXNnc3RyICLlkIjlubYgJXMg5ZKMICVzXG4iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6NjYKK21zZ2lkICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorbXNnc3RyICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NAorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICLovpPlhaXku6UgTlVMIOWtl+espue7iOatoiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTUgYnVpbHRpbi93cml0ZS10cmVlLmM6MjYKK21zZ2lkICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgIuWFgeiuuOS4ouWkseeahOWvueixoSIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTYKK21zZ2lkICJhbGxvdyBjcmVhdGlvbiBvZiBtb3JlIHRoYW4gb25lIHRyZWUiCittc2dzdHIgIuWFgeiuuOWIm+W7uuS4gOS4quS7peS4iueahOagkSIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6OQorbXNnaWQgIiIKKyJnaXQgbXVsdGktcGFjay1pbmRleCBbPG9wdGlvbnM+XSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC0iCisic2l6ZT08c2l6ZT4pIgorbXNnc3RyICIiCisiZ2l0IG11bHRpLXBhY2staW5kZXggWzzpgInpobk+XSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC1zaXplPTzlpKflsI8iCisiPikiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI2Cittc2dpZCAib2JqZWN0IGRpcmVjdG9yeSBjb250YWluaW5nIHNldCBvZiBwYWNrZmlsZSBhbmQgcGFjay1pbmRleCBwYWlycyIKK21zZ3N0ciAi5YyF5ZCr5oiQ5a+55YyF5paH5Lu25ZKM5YyF57Si5byV55qE5a+56LGh55uu5b2VIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyOQorbXNnaWQgIiIKKyJkdXJpbmcgcmVwYWNrLCBjb2xsZWN0IHBhY2stZmlsZXMgb2Ygc21hbGxlciBzaXplIGludG8gYSBiYXRjaCB0aGF0IGlzICIKKyJsYXJnZXIgdGhhbiB0aGlzIHNpemUiCittc2dzdHIgIuWcqCByZXBhY2sg5pyf6Ze077yM5bCG6L6D5bCP5bC65a+455qE5YyF5paH5Lu25pS26ZuG5Yiw5aSn5LqO5q2k5aSn5bCP55qE5om55qyh5LitIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo1MCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjY3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICLlpKrlpJrlj4LmlbAiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjYwCittc2dpZCAiLS1iYXRjaC1zaXplIG9wdGlvbiBpcyBvbmx5IGZvciAncmVwYWNrJyBzdWJjb21tYW5kIgorbXNnc3RyICItLWJhdGNoLXNpemUg6YCJ6aG55LuF55So5LqOICdyZXBhY2snIOWtkOWRveS7pCIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICLmnKror4bliKvnmoTlrZDlkb3ku6TvvJolcyIKKworIzogYnVpbHRpbi9tdi5jOjE4Cittc2dpZCAiZ2l0IG12IFs8b3B0aW9ucz5dIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCittc2dzdHIgImdpdCBtdiBbPOmAiemhuT5dIDzmupA+Li4uIDznm67moIc+IgorCisjOiBidWlsdGluL212LmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IgorbXNnc3RyICLnm67lvZUgJXMg5Zyo57Si5byV5Lit5bm25LiU5LiN5piv5a2Q5qih57uE77yfIgorCisjOiBidWlsdGluL212LmM6ODUKK21zZ2lkICJQbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAi6K+35bCG5oKo55qE5L+u5pS55pqC5a2Y5YiwIC5naXRtb2R1bGVzIOS4reaIlui0ruiXj+WQjuWGjee7p+e7rSIKKworIzogYnVpbHRpbi9tdi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICIlLipzIOWcqOe0ouW8leS4rSIKKworIzogYnVpbHRpbi9tdi5jOjEyNQorbXNnaWQgImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi5by65Yi256e75YqoL+mHjeWRveS7pO+8jOWNs+S9v+ebruagh+WtmOWcqCIKKworIzogYnVpbHRpbi9tdi5jOjEyNworbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICLot7Pov4fnp7vliqgv6YeN5ZG95ZCN6ZSZ6K+vIgorCisjOiBidWlsdGluL212LmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICLnm67moIcgJyVzJyDkuI3mmK/kuIDkuKrnm67lvZUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICLmo4Dmn6UgJyVzJyDliLAgJyVzJyDnmoTph43lkb3lkI1cbiIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgIuWdj+eahOa6kCIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIuS4jeiDveWwhuebruW9leenu+WKqOWIsOiHqui6qyIKKworIzogYnVpbHRpbi9tdi5jOjE5MAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgIuS4jeiDveWwhuebruW9leenu+WKqOWIsOaWh+S7tiIKKworIzogYnVpbHRpbi9tdi5jOjE5OQorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgIua6kOebruW9leS4uuepuiIKKworIzogYnVpbHRpbi9tdi5jOjIyNAorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgIuS4jeWcqOeJiOacrOaOp+WItuS5i+S4iyIKKworIzogYnVpbHRpbi9tdi5jOjIyNworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAi55uu5qCH5bey5a2Y5ZyoIgorCisjOiBidWlsdGluL212LmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgIuimhuebliAnJXMnIgorCisjOiBidWlsdGluL212LmM6MjM4Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAi5LiN6IO96KaG55uWIgorCisjOiBidWlsdGluL212LmM6MjQxCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICLlkIzkuIDnm67moIflhbfmnInlpJrkuKrmupAiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDMKK21zZ2lkICJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIuebruagh+ebruW9leS4jeWtmOWcqCIKKworIzogYnVpbHRpbi9tdi5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiJXPvvIzmupA9JXPvvIznm67moIc9JXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAi6YeN5ZG95ZCNICVzIOiHsyAlc1xuIgorCisjOiBidWlsdGluL212LmM6Mjc3IGJ1aWx0aW4vcmVtb3RlLmM6NzgxIGJ1aWx0aW4vcmVwYWNrLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICLph43lkb3lkI0gJyVzJyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPOmAiemhuT5dIDzmj5DkuqQ+Li4uIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY2Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzpgInpobk+XSAtLWFsbCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NworbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLXN0ZGluIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzpgInpobk+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI0Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICLlj6rmiZPljbDlkI3np7DvvIjml6AgU0hBLTHvvIkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjUKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgIuWPquS9v+eUqOagh+etvuadpeWRveWQjeaPkOS6pCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUyNworbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLlj6rkvb/nlKjlkowgPOaooeW8jz4g55u45Yy56YWN55qE5byV55SoIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI5Cittc2dpZCAiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLlv73nlaXlkowgPOaooeW8jz4g55u45Yy56YWN55qE5byV55SoIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTMxCittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAi5YiX5Ye65Y+v5Lul5LuO5omA5pyJ5byV55So6K6/6Zeu55qE5o+Q5LqkIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTMyCittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICLku47moIflh4bovpPlhaXor7vlj5YiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzMKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgIuWFgeiuuOaJk+WNsCBg5pyq5a6a5LmJYCDnmoTlkI3np7DvvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzkKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAi5Y+N5ZCR6Kej5p6Q6L6T5YWl5Lit55qE5qCH562+77yI5YaF6YOo5L2/55So77yJIgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA85rOo6Kej5byV55SoPl0gW2xpc3QgWzzlr7nosaE+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+ICIKKyJ8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPOazqOino+W8leeUqD5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPOivtOaYjj4gfCAtRiA85paH5Lu2PiAiCisifCAoLWMgfCAtQykgPOWvueixoT5dIFs85a+56LGhPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzms6jop6PlvJXnlKg+XSBjb3B5IFstZl0gPOa6kOWvueixoT4gPOebruagh+WvueixoT4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICIKKyIoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDzms6jop6PlvJXnlKg+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA86K+05piOPiB8IC1GIDzmlofku7Y+IHwgIgorIigtYyB8IC1DKSA85a+56LGhPl0gWzzlr7nosaE+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA85rOo6Kej5byV55SoPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzzlr7nosaE+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzms6jop6PlvJXnlKg+XSBzaG93IFs85a+56LGhPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzms6jop6PlvJXnlKg+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDznrZbnlaU+IF0gPOazqOino+W8leeUqD4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNQorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSByZW1vdmUgWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA85rOo6Kej5byV55SoPl0gcmVtb3ZlIFs85a+56LGhPi4uLl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHBydW5lIFstbl0gWy12XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA85rOo6Kej5byV55SoPl0gcHJ1bmUgWy1uXSBbLXZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzkKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzms6jop6PlvJXnlKg+XSBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQKK21zZ2lkICJnaXQgbm90ZXMgW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbbGlzdCBbPOWvueixoT5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5Cittc2dpZCAiZ2l0IG5vdGVzIGFkZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYWRkIFs86YCJ6aG5Pl0gWzzlr7nosaE+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgWzzpgInpobk+XSA85rqQ5a+56LGhPiA855uu5qCH5a+56LGhPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzzmupDlr7nosaE+IDznm67moIflr7nosaE+XS4uLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwCittc2dpZCAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYXBwZW5kIFs86YCJ6aG5Pl0gWzzlr7nosaE+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY1Cittc2dpZCAiZ2l0IG5vdGVzIGVkaXQgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGVkaXQgWzzlr7nosaE+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwCittc2dpZCAiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHNob3cgWzzlr7nosaE+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgWzzpgInpobk+XSA85rOo6Kej5byV55SoPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzzpgInpobk+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc3Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs86YCJ6aG5Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MgorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHJlbW92ZSBbPOWvueixoT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODcKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBwcnVuZSBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6OTIKK21zZ2lkICJnaXQgbm90ZXMgZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NworbXNnaWQgIldyaXRlL2VkaXQgdGhlIG5vdGVzIGZvciB0aGUgZm9sbG93aW5nIG9iamVjdDoiCittc2dzdHIgIuS4uuS4i+mdoueahOWvueixoeWGmS/nvJbovpHor7TmmI7vvJoiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIuS4jeiDveS4uuWvueixoSAnJXMnIOW8gOWniyAnc2hvdyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnc2hvdycgb3V0cHV0IgorbXNnc3RyICLkuI3og73or7vlj5YgJ3Nob3cnIOeahOi+k+WHuiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIuaXoOazleS4uuWvueixoSAnJXMnIOWujOaIkCAnc2hvdyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxOTcKK21zZ2lkICJwbGVhc2Ugc3VwcGx5IHRoZSBub3RlIGNvbnRlbnRzIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24iCittc2dzdHIgIuivt+mAmui/hyAtbSDmiJYgLUYg6YCJ6aG55Li65rOo6Kej5o+Q5L6b5YaF5a65IgorCisjOiBidWlsdGluL25vdGVzLmM6MjA2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICLkuI3og73lhpnms6jop6Plr7nosaEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG5vdGUgY29udGVudHMgaGF2ZSBiZWVuIGxlZnQgaW4gJXMiCittc2dzdHIgIuazqOino+WGheWuueiiq+eVmeWcqCAlcyDkuK0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNDIgYnVpbHRpbi90YWcuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICLkuI3og73miZPlvIDmiJbor7vlj5YgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2MyBidWlsdGluL25vdGVzLmM6MzEzIGJ1aWx0aW4vbm90ZXMuYzozMTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODMgYnVpbHRpbi9ub3Rlcy5jOjQzOCBidWlsdGluL25vdGVzLmM6NTI2CisjOiBidWlsdGluL25vdGVzLmM6NTMxIGJ1aWx0aW4vbm90ZXMuYzo2MTAgYnVpbHRpbi9ub3Rlcy5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAi5peg5rOV6Kej5p6QICclcycg5Li65LiA5Liq5pyJ5pWI5byV55So44CCIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAi6K+75Y+W5a+56LGhICclcycg5aSx6LSl44CCIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG5vdGUgZGF0YSBmcm9tIG5vbi1ibG9iIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAi5LiN6IO95LuO6Z2e5pWw5o2u5a+56LGhICclcycg5Lit6K+75Y+W5rOo6Kej5pWw5o2u44CCIgorCisjOiBidWlsdGluL25vdGVzLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAi5qC85byP6ZSZ6K+v55qE6L6T5YWl6KGM77yaJyVzJ+OAgiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAi5LuOICclcycg5ou36LSd5rOo6Kej5YiwICclcycg5pe25aSx6LSlIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGZpcnN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBnaXQKKyMuIG5vdGVzIGNvbW1hbmQ6ICdhZGQnLCAnbWVyZ2UnLCAncmVtb3ZlJywgZXRjLgorIy4KKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gJXMgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICLmi5Lnu53lkJEgJTIkc++8iOWcqCByZWZzL25vdGVzLyDkuYvlpJbvvIklMSRz5rOo6KejIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzc2IGJ1aWx0aW4vbm90ZXMuYzo0MzEgYnVpbHRpbi9ub3Rlcy5jOjUwOQorIzogYnVpbHRpbi9ub3Rlcy5jOjUyMSBidWlsdGluL25vdGVzLmM6NTk4IGJ1aWx0aW4vbm90ZXMuYzo2NjUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTUgYnVpbHRpbi9ub3Rlcy5jOjk2MyBidWlsdGluL25vdGVzLmM6OTg1Cittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAi5Y+C5pWw5aSq5aSaIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzg5IGJ1aWx0aW4vbm90ZXMuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIKK21zZ3N0ciAi5pyq5Y+R546w5a+56LGhICVzIOeahOazqOino+OAgiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMCBidWlsdGluL25vdGVzLmM6NTc2Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAi5rOo6Kej5YaF5a655L2c5Li65LiA5Liq5a2X56ym5LiyIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEzIGJ1aWx0aW4vbm90ZXMuYzo1NzkKK21zZ2lkICJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIKK21zZ3N0ciAi5rOo6Kej5YaF5a655Yiw5LiA5Liq5paH5Lu25LitIgorCisjOiBidWlsdGluL25vdGVzLmM6NDE2IGJ1aWx0aW4vbm90ZXMuYzo1ODIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgIumHjeeUqOWSjOe8lui+keaMh+WumueahOazqOino+WvueixoSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxOSBidWlsdGluL25vdGVzLmM6NTg1Cittc2dpZCAicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICLph43nlKjmjIflrprnmoTms6jop6Plr7nosaEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MjIgYnVpbHRpbi9ub3Rlcy5jOjU4OAorbXNnaWQgImFsbG93IHN0b3JpbmcgZW1wdHkgbm90ZSIKK21zZ3N0ciAi5YWB6K645L+d5a2Y56m655m95rOo6YeKIgorCisjOiBidWlsdGluL25vdGVzLmM6NDIzIGJ1aWx0aW4vbm90ZXMuYzo0OTYKK21zZ2lkICJyZXBsYWNlIGV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICLmm7/mjaLlt7LlrZjlnKjnmoTms6jop6MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIuS4jeiDvea3u+WKoOazqOino+OAguWPkeeOsOWvueixoSAlcyDlt7LlrZjlnKjms6jop6PjgILkvb/nlKggJy1mJyDopobnm5bnjrDlrZjms6jop6MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjMgYnVpbHRpbi9ub3Rlcy5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIuimhuebluWvueixoSAlcyDnjrDlrZjms6jop6NcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3NSBidWlsdGluL25vdGVzLmM6NjM3IGJ1aWx0aW4vbm90ZXMuYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIuWIoOmZpOWvueixoSAlcyDnmoTms6jop6NcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5NworbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICLku47moIflh4bovpPlhaXor7vlj5blr7nosaEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTkKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAi6YeN5paw5Yqg6L29IDzlkb3ku6Q+IOeahOmFjee9ru+8iOmakOWQqyAtLXN0ZGlu77yJIgorCisjOiBidWlsdGluL25vdGVzLmM6NTE3Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICLlj4LmlbDlpKrlsJEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICLkuI3og73mi7fotJ3ms6jop6PjgILlj5HnjrDlr7nosaEgJXMg5bey5a2Y5Zyo5rOo6Kej44CC5L2/55SoICctZicg6KaG55uW546w5a2Y5rOo6KejIgorCisjOiBidWlsdGluL25vdGVzLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICLmupDlr7nosaEgJXMg57y65bCR5rOo6Kej44CC5LiN6IO95ou36LSd44CCIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyLlrZDlkb3ku6QgJ2VkaXQnIOeahOmAiemhuSAtbS8tRi8tYy8tQyDlt7LlvIPnlKjjgIJcbiIKKyLor7fmjaLnlKggJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMn44CCXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OTgKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICLliKDpmaTlvJXnlKggTk9URVNfTUVSR0VfUEFSVElBTCDlpLHotKUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDAKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgIuWIoOmZpOW8leeUqCBOT1RFU19NRVJHRV9SRUYg5aSx6LSlIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAyCittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnZ2l0IG5vdGVzIG1lcmdlJyB3b3JrdHJlZSIKK21zZ3N0ciAi5Yig6ZmkICdnaXQgbm90ZXMgbWVyZ2UnIOW3peS9nOWMuuWksei0pSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyMgorbXNnaWQgImZhaWxlZCB0byByZWFkIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICLor7vlj5blvJXnlKggTk9URVNfTUVSR0VfUEFSVElBTCDlpLHotKUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAi5peg5rOV5LuOIE5PVEVTX01FUkdFX1BBUlRJQUwg5Lit5om+5Yiw5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICLml6Dms5Xku44gTk9URVNfTUVSR0VfUEFSVElBTCDkuK3op6PmnpDmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MzkKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgIuino+aekCBOT1RFU19NRVJHRV9SRUYg5aSx6LSlIgorCisjOiBidWlsdGluL25vdGVzLmM6NzQyCittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplIG5vdGVzIG1lcmdlIgorbXNnc3RyICLml6Dms5XlrozmiJDms6jop6PlkIjlubYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub3RlcyBtZXJnZSBzdHJhdGVneSAlcyIKK21zZ3N0ciAi5pyq55+l55qE5rOo6Kej5ZCI5bm2562W55WlICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg0Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICLpgJrnlKjpgInpobkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODYKK21zZ2lkICJNZXJnZSBvcHRpb25zIgorbXNnc3RyICLlkIjlubbpgInpobkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODgKK21zZ2lkICIiCisicmVzb2x2ZSBub3RlcyBjb25mbGljdHMgdXNpbmcgdGhlIGdpdmVuIHN0cmF0ZWd5IChtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vIgorImNhdF9zb3J0X3VuaXEpIgorbXNnc3RyICLkvb/nlKjmjIflrprnmoTnrZbnlaXop6PlhrPms6jop6PlhrLnqoEgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi9jYXRfc29ydF91bmlxKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MAorbXNnaWQgIkNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIuaPkOS6pOacquWQiOW5tueahOazqOinoyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MgorbXNnaWQgImZpbmFsaXplIG5vdGVzIG1lcmdlIGJ5IGNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIumAmui/h+aPkOS6pOacquWQiOW5tueahOazqOino+adpeWujOaIkOazqOino+WQiOW5tiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NAorbXNnaWQgIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIuS4reatouazqOino+WQiOW5tueahOaWueahiCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NgorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICLkuK3mraLms6jop6PlkIjlubYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MDcKK21zZ2lkICJjYW5ub3QgbWl4IC0tY29tbWl0LCAtLWFib3J0IG9yIC1zLy0tc3RyYXRlZ3kiCittc2dzdHIgIuS4jeiDvea3t+eUqCAtLWNvbW1pdOOAgS0tYWJvcnQg5oiWIC1zLy0tc3RyYXRlZ3kiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTIKK21zZ2lkICJtdXN0IHNwZWNpZnkgYSBub3RlcyByZWYgdG8gbWVyZ2UiCittc2dzdHIgIuW/hemhu+aMh+WumuS4gOS4quazqOino+W8leeUqOadpeWQiOW5tiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC1zLy0tc3RyYXRlZ3k6ICVzIgorbXNnc3RyICLmnKrnn6XnmoQgLXMvLS1zdHJhdGVnee+8miVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgImEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICLkvY3kuo4gJTIkcyDnmoTkuIDkuKrliLAgJTEkcyDkuK3nmoTms6jop6PlkIjlubbmraPlnKjmiafooYzkuK0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0b3JlIGxpbmsgdG8gY3VycmVudCBub3RlcyByZWYgKCVzKSIKK21zZ3N0ciAi5peg5rOV5a2Y5YKo6ZO+5o6l5Yiw5b2T5YmN55qE5rOo6Kej5byV55So77yIJXPvvIkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF1dG9tYXRpYyBub3RlcyBtZXJnZSBmYWlsZWQuIEZpeCBjb25mbGljdHMgaW4gJXMgYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggIgorIidnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvciBhYm9ydCB0aGUgbWVyZ2Ugd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tIgorImFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIuiHquWKqOWQiOW5tuivtOaYjuWksei0peOAguS/ruaUuSAlcyDkuK3nmoTlhrLnqoHlubbkuJTkvb/nlKjlkb3ku6QgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcg5o+QIgorIuS6pOe7k+aenO+8jOaIluiAheS9v+eUqOWRveS7pCAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIOe7iOatouWQiOW5tuOAglxuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODk3IGJ1aWx0aW4vdGFnLmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLml6Dms5Xop6PmnpAgJyVzJyDkuLrkuIDkuKrmnInmlYjlvJXnlKjjgIIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgIuWvueixoSAlcyDmsqHmnInms6jop6NcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxMgorbXNnaWQgImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIKK21zZ3N0ciAi5bCd6K+V5Yig6Zmk5LiN5a2Y5Zyo55qE5rOo6Kej5LiN5piv5LiA5Liq6ZSZ6K+vIgorCisjOiBidWlsdGluL25vdGVzLmM6OTE1Cittc2dpZCAicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIuS7juagh+WHhui+k+WFpeivu+WPluWvueixoeWQjeensCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NCBidWlsdGluL3BydW5lLmM6MTMwIGJ1aWx0aW4vd29ya3RyZWUuYzoxNjQKK21zZ2lkICJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiCittc2dzdHIgIuS4jeWIoOmZpO+8jOWPquaYvuekuiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgbm90ZXMiCittc2dzdHIgIuaKpeWRiua4hemZpOeahOazqOinoyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OAorbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAi5rOo6Kej5byV55SoIgorCisjOiBidWlsdGluL25vdGVzLmM6OTk5Cittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzLXJlZj4iCittc2dzdHIgIuS7jiA85rOo6Kej5byV55SoPiDkvb/nlKjms6jop6MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDM0IGJ1aWx0aW4vc3Rhc2guYzoxNjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIuacquefpeWtkOWRveS7pO+8miVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUyCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzzpgInpobk+Li4uXSBbPCA85byV55So5YiX6KGoPiB8IDwgPOWvueixoeWIl+ihqD5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUzCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgImdpdCBwYWNrLW9iamVjdHMgWzzpgInpobk+Li4uXSA85YmN57yA5ZCN56ewPiBbPCA85byV55So5YiX6KGoPiB8IDwgPOWvueixoeWIl+ihqD5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIgorbXNnc3RyICIlcyDplJnnmoTljIXlr7nosaEgQ1JDIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhY2tlZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICIlcyDmjZ/lnY/nmoTljIXlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBkZWx0YSBkZXRlY3RlZCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICLlj5HnjrDlr7nosaEgJXMg6YCS5b2SIGRlbHRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICJvcmRlcmVkICV1IG9iamVjdHMsIGV4cGVjdGVkICU8UFJJdTMyPiIKK21zZ3N0ciAi5o6S5bqP5LqGICV1IOS4quWvueixoe+8jOmihOacnyAlPFBSSXUzMj4g5LiqIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk3MgorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgcGFja3MgYXJlIHNwbGl0IGR1ZSB0byBwYWNrLnBhY2tTaXplTGltaXQiCittc2dzdHIgIuemgeeUqCBiaXRtYXAg5YaZ5YWl77yM5Zug5Li6IHBhY2sucGFja1NpemVMaW1pdCDorr7nva7kvb/lvpfljIXooqvliIfliIbkuLrlpJrkuKoiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTg1Cittc2dpZCAiV3JpdGluZyBvYmplY3RzIgorbXNnc3RyICLlhpnlhaXlr7nosaHkuK0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTA0NiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICLlr7kgJXMg6LCD55SoIHN0YXQg5aSx6LSlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvdGUgJTxQUkl1MzI+IG9iamVjdHMgd2hpbGUgZXhwZWN0aW5nICU8UFJJdTMyPiIKK21zZ3N0ciAi5YaZ5YWlICU8UFJJdTMyPiDkuKrlr7nosaHogIzpooTmnJ8gJTxQUkl1MzI+IOS4qiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMjk3Cittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgIuemgeeUqCBiaXRtYXAg5YaZ5YWl77yM5Zug5Li65LiA5Lqb5a+56LGh5bCG5LiN5Lya6KKr5omT5YyFIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3ZlcmZsb3cgaW4gcGFjayBmb3IgJXMiCittc2dzdHIgIiVzIOWOi+e8qeS4rSBkZWx0YSDln7rlh4blgY/np7votornlYwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTczMworIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdXQgb2YgYm91bmQgZm9yICVzIgorbXNnc3RyICIlcyDnmoQgZGVsdGEg5Z+65YeG5YGP56e76LaK55WMIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwMDQKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICLlr7nosaHorqHmlbDkuK0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0IGhlYWRlciBvZiAlcyIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q5a+56LGhICVzIOWktOS/oeaBryIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjE5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjIzNQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAi5a+56LGhICVzIOaXoOazleivu+WPliIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjIyIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGggKCU8UFJJdU1BWD4gdnMgJTxQUkl1TUFYPikiCittc2dzdHIgIuWvueixoSAlcyDkuI3kuIDoh7TnmoTlr7nosaHplb/luqbvvIglPFBSSXVNQVg+IHZzICU8UFJJdU1BWD7vvIkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI1OQorbXNnaWQgInN1Ym9wdGltYWwgcGFjayAtIG91dCBvZiBtZW1vcnkiCittc2dzdHIgIuasoeS8mO+8iHN1Ym9wdGltYWzvvInmiZPljIUgLSDlhoXlrZjkuI3otrMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU3NAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWx0YSBjb21wcmVzc2lvbiB1c2luZyB1cCB0byAlZCB0aHJlYWRzIgorbXNnc3RyICLkvb/nlKggJWQg5Liq57q/56iL6L+b6KGM5Y6L57ypIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhY2sgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0YWcgJXMiCittc2dzdHIgIuaXoOazleS4uuagh+etviAlcyDljovnvKnlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjgwMQorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIuWOi+e8qeWvueixoeS4rSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODA3Cittc2dpZCAiaW5jb25zaXN0ZW5jeSB3aXRoIGRlbHRhIGNvdW50IgorbXNnc3RyICLkuI3kuIDoh7TnmoTlt67lvILorqHmlbAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgZWRnZSBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorIumihOacn+i+ueeVjOWvueixoe+8iGVkZ2Ugb2JqZWN077yJSUTvvIzljbTlvpfliLDlnoPlnL7mlbDmja7vvJpcbiIKKyIgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCittc2dzdHIgIiIKKyLpooTmnJ/lr7nosaEgSUTvvIzljbTlvpfliLDlnoPlnL7mlbDmja7vvJpcbiIKKyIgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjk5MgorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIC0tbWlzc2luZyIKK21zZ3N0ciAi6YCJ6aG5IC0tbWlzc2luZyDnmoTlgLzml6DmlYgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA1MSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTkKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4IgorbXNnc3RyICLml6Dms5XmiZPlvIDljIXmlofku7bntKLlvJUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA4MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgYXQgJXMgY291bGQgbm90IGJlIGV4YW1pbmVkIgorbXNnc3RyICLml6Dms5Xmo4Dmn6UgJXMg5aSE55qE5p2+5pWj5a+56LGhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNjcKK21zZ2lkICJ1bmFibGUgdG8gZm9yY2UgbG9vc2Ugb2JqZWN0IgorbXNnc3RyICLml6Dms5XlvLrliLbmnb7mlaPlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSByZXYgJyVzJyIKK21zZ3N0ciAi5LiN5piv5LiA5Liq54mI5pysICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gJyVzJyIKK21zZ3N0ciAi5Z2P55qE54mI5pysICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4OAorbXNnaWQgInVuYWJsZSB0byBhZGQgcmVjZW50IG9iamVjdHMiCittc2dzdHIgIuaXoOazlea3u+WKoOacgOi/keeahOWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgIuS4jeaUr+aMgeeahOe0ouW8leeJiOacrCAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgIuWdj+eahOe0ouW8leeJiOacrCAnJXMnIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODMKK21zZ2lkICI8dmVyc2lvbj5bLDxvZmZzZXQ+XSIKK21zZ3N0ciAiPOeJiOacrD5bLDzlgY/np7s+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg0Cittc2dpZCAid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIKK21zZ3N0ciAi55So5oyH5a6a55qEIGlkeCDmoLzlvI/niYjmnKzmnaXlhpnljIXntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4NworbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgIuavj+S4qui+k+WHuuWMheeahOacgOWkp+WwuuWvuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg5Cittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICLlv73nlaXku47lpIfnlKjlr7nosaHlrZjlgqjph4zlgJ/nlKjlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5MQorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAi5b+955Wl5YyF5a+56LGhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTMKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBvYmplY3RzIgorbXNnc3RyICLpmZDliLbmiZPljIXnqpflj6PnmoTlr7nosaHmlbAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5NQorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgIumZpOWvueixoeaVsOmHj+mZkOWItuWkluiuvue9ruaJk+WMheeql+WPo+eahOWGheWtmOmZkOWItiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk3Cittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgIuaJk+WMheWFgeiuuOeahCBkZWx0YSDpk77nmoTmnIDlpKfplb/luqYiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5OQorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAi6YeN55So5bey5a2Y5Zyo55qEIGRlbHRhcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDAxCittc2dpZCAicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIKK21zZ3N0ciAi6YeN55So5bey5a2Y5Zyo55qE5a+56LGhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDMKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgIuS9v+eUqCBPRlNfREVMVEEg5a+56LGhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDUKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICLkvb/nlKjnur/nqIvmn6Xor6LmnIDkvbMgZGVsdGEg5Yy56YWNIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDcKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICLkuI3liJvlu7rnqbrnmoTljIXovpPlh7oiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwOQorbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIuS7juagh+WHhui+k+WFpeivu+WPlueJiOacrOWPt+WPguaVsCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDExCittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgIumZkOWItumCo+S6m+WwmuacquaJk+WMheeahOWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDE0Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgIuWMheaLrOWPr+S7peS7juS7u+S9leW8leeUqOiuv+mXruWIsOeahOWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDE3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICLljIXmi6zooqvlvJXnlKjml6Xlv5flvJXnlKjliLDnmoTlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgIuWMheaLrOiiq+e0ouW8leW8leeUqOWIsOeahOWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDIzCittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICLovpPlh7rljIXliLDmoIflh4bovpPlh7oiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyNQorbXNnaWQgImluY2x1ZGUgdGFnIG9iamVjdHMgdGhhdCByZWZlciB0byBvYmplY3RzIHRvIGJlIHBhY2tlZCIKK21zZ3N0ciAi5YyF5ous6YKj5Lqb5byV55So5LqG5b6F5omT5YyF5a+56LGh55qE5qCH562+5a+56LGhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjcKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIue7tOaMgeS4jeWPr+i+vueahOWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI5Cittc2dpZCAicGFjayBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLmiZPljIXmnb7mlaPnmoTkuI3lj6/ovr7lr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzMQorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICLlsIbmr5Tnu5nlrpogPOaXtumXtD4g5paw55qE5peg5rOV6K6/6Zeu55qE5a+56LGh6Kej5YyFIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzQKK21zZ2lkICJ1c2UgdGhlIHNwYXJzZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIgorbXNnc3RyICLkvb/nlKjnqIDnlo/lj6/ovr7mgKfnrpfms5UiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzNgorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICLliJvlu7rnsr7nroDljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzOAorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICLliJvlu7rpgILlkIjmtYXlhYvpmobku5PlupPojrflj5bnmoTljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0MAorbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgIuW/veeVpemFjeaciSAua2VlcCDmlofku7bnmoTljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0MgorbXNnaWQgImlnbm9yZSB0aGlzIHBhY2siCittc2dzdHIgIuW/veeVpeivpSBwYWNrIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDQKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICLmiZPljIXljovnvKnnuqfliKsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0NgorbXNnaWQgImRvIG5vdCBoaWRlIGNvbW1pdHMgYnkgZ3JhZnRzIgorbXNnc3RyICLmmL7npLrooqvnp7vmpI3pmpDol4/nmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0OAorbXNnaWQgInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi5L2/55SoIGJpdG1hcCDntKLlvJXvvIjlpoLmnpzmnInnmoTor53vvInku6Xmj5Dpq5jlr7nosaHorqHmlbDml7bnmoTpgJ/luqYiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1MAorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgIuWcqOW7uueri+WMhee0ouW8leeahOWQjOaXtuWIm+W7uiBiaXRtYXAg57Si5byVIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NTQKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCBpZiBwb3NzaWJsZSIKK21zZ3N0ciAi5aaC5p6c5Y+v6IO977yM5YaZIGJpdG1hcCDntKLlvJUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1OAorbXNnaWQgImhhbmRsaW5nIGZvciBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgIuWkhOeQhuS4ouWkseeahOWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDYxCittc2dpZCAiZG8gbm90IHBhY2sgb2JqZWN0cyBpbiBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgIuS4jeimgeaJk+WMhSBwcm9taXNvciDljIXmlofku7bkuK3nmoTlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ2MworbXNnaWQgInJlc3BlY3QgaXNsYW5kcyBkdXJpbmcgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgIuWcqOWinumHj+WOi+e8qeaXtuWPguiAg+aVsOaNruWymyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGNoYWluIGRlcHRoICVkIGlzIHRvbyBkZWVwLCBmb3JjaW5nICVkIgorbXNnc3RyICLlop7ph4/pk77mt7HluqYgJWQg5aSq5rex5LqG77yM5by65Yi25Li6ICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjay5kZWx0YUNhY2hlTGltaXQgaXMgdG9vIGhpZ2gsIGZvcmNpbmcgJWQiCittc2dzdHIgIumFjee9riBwYWNrLmRlbHRhQ2FjaGVMaW1pdCDlpKrpq5jkuobvvIzlvLrliLbkuLogJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU1MQorbXNnaWQgIi0tbWF4LXBhY2stc2l6ZSBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhIHBhY2sgZm9yIHRyYW5zZmVyIgorbXNnc3RyICLkuI3og73kvb/nlKggLS1tYXgtcGFjay1zaXplIOadpeaehOW7uuS8oOi+k+eUqOeahOWMheaWh+S7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTUzCittc2dpZCAibWluaW11bSBwYWNrIHNpemUgbGltaXQgaXMgMSBNaUIiCittc2dzdHIgIuacgOWwj+eahOWMheaWh+S7tuWkp+Wwj+aYryAxIE1pQiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTU4Cittc2dpZCAiLS10aGluIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGFuIGluZGV4YWJsZSBwYWNrIgorbXNnc3RyICItLXRoaW4g5LiN6IO955So5LqO5Yib5bu65LiA5Liq5Y+v57Si5byV5YyFIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NjEKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC0tdW5wYWNrLXVucmVhY2hhYmxlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSDlkowgLS11bnBhY2stdW5yZWFjaGFibGUg5LiN5YW85a65IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NjcKK21zZ2lkICJjYW5ub3QgdXNlIC0tZmlsdGVyIHdpdGhvdXQgLS1zdGRvdXQiCittc2dzdHIgIuS4jeiDveWcqOayoeaciSAtLXN0ZG91dCDnmoTmg4XlhrXkuIvkvb/nlKggLS1maWx0ZXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzYyNworbXNnaWQgIkVudW1lcmF0aW5nIG9iamVjdHMiCittc2dzdHIgIuaemuS4vuWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUb3RhbCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHJldXNlZCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHBhY2stIgorInJldXNlZCAlPFBSSXUzMj4iCittc2dzdHIgIiIKKyLmgLvlhbEgJTxQUkl1MzI+77yI5beu5byCICU8UFJJdTMyPu+8ie+8jOWkjeeUqCAlPFBSSXUzMj7vvIjlt67lvIIgJTxQUkl1MzI+77yJ77yM5YyF5aSN55SoICIKKyIlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6OAorbXNnaWQgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBwYWNrLXJlZnMgWzzpgInpobk+XSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAi5omT5YyF5LiA5YiHIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE3Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgIua4hemZpOadvuaVo+eahOW8leeUqO+8iOm7mOiupO+8iSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo5Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDIKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAi5q2j5Zyo5Yig6Zmk6YeN5aSN5a+56LGhIgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPOaXtumXtD5dIFstLV0gWzxoZWFkPi4uLl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzEKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgIuaKpeWRiua4hemZpOeahOWvueixoSIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNAorbXNnaWQgImV4cGlyZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICLkvb/ml6nkuo7nu5nlrprml7bpl7TnmoTlr7nosaHov4fmnJ8iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzYKK21zZ2lkICJsaW1pdCB0cmF2ZXJzYWwgdG8gb2JqZWN0cyBvdXRzaWRlIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAi6ZmQ5Yi26YGN5Y6GIHByb21pc29yIOWMheS7peWklueahOWvueixoSIKKworIzogYnVpbHRpbi9wcnVuZS5jOjE1MAorbXNnaWQgImNhbm5vdCBwcnVuZSBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAi5LiN6IO95Zyo54+N5ZOB5LuT5bqT5Lit5omn6KGM5riF55CG5pON5L2cIgorCisjOiBidWlsdGluL3B1bGwuYzo0NSBidWlsdGluL3B1bGwuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiVzIOeahOWAvOaXoOaViO+8miVzIgorCisjOiBidWlsdGluL3B1bGwuYzo2NworbXNnaWQgImdpdCBwdWxsIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVsbCBbPOmAiemhuT5dIFs85LuT5bqTPiBbPOW8leeUqOinhOagvD4uLi5dXSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTIyCittc2dpZCAiY29udHJvbCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIuaOp+WItuWtkOaooee7hOeahOmAkuW9kuiOt+WPliIKKworIzogYnVpbHRpbi9wdWxsLmM6MTI2Cittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgIuWSjOWQiOW5tuebuOWFs+eahOmAiemhuSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTI5Cittc2dpZCAiaW5jb3Jwb3JhdGUgY2hhbmdlcyBieSByZWJhc2luZyByYXRoZXIgdGhhbiBtZXJnaW5nIgorbXNnc3RyICLkvb/nlKjlj5jln7rmk43kvZzlj5bku6PlkIjlubbmk43kvZzku6XlkIjlhaXkv67mlLkiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE1NyBidWlsdGluL3JlYmFzZS5jOjQ3MSBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAi5YWB6K645b+r6L+b5byPIgorCisjOiBidWlsdGluL3B1bGwuYzoxNjYKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIHJlYmFzZSIKK21zZ3N0ciAi5Y+Y5Z+65pON5L2c5YmN5ZCO5omn6KGM6Ieq5Yqo6LSu6JeP5ZKM5by55Ye66LSu6JePIgorCisjOiBidWlsdGluL3B1bGwuYzoxODIKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmciCittc2dzdHIgIuWSjOiOt+WPluebuOWFs+eahOWPguaVsCIKKworIzogYnVpbHRpbi9wdWxsLmM6MTkyCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAi5by65Yi26KaG55uW5pys5Zyw5YiG5pSvIgorCisjOiBidWlsdGluL3B1bGwuYzoyMDAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBwdWxsZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIuW5tuWPkeaLieWPlueahOWtkOaooee7hOeahOaVsOmHjyIKKworIzogYnVpbHRpbi9wdWxsLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICJwdWxsLmZmIOeahOWPluWAvOaXoOaViO+8miVzIgorCisjOiBidWlsdGluL3B1bGwuYzo0MjYKK21zZ2lkICIiCisiVGhlcmUgaXMgbm8gY2FuZGlkYXRlIGZvciByZWJhc2luZyBhZ2FpbnN0IGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgIgorImZldGNoZWQuIgorbXNnc3RyICLlnKjmgqjliJrliJrojrflj5bliLDnmoTlvJXnlKjkuK3msqHmnInlj5jln7rmk43kvZznmoTlgJnpgInjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyOAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorbXNnc3RyICLlnKjmgqjliJrliJrojrflj5bliLDnmoTlvJXnlKjkuK3msqHmnInlkIjlubbmk43kvZznmoTlgJnpgInjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyOQorbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIumAmuW4uOi/meaEj+WRs+edgOaCqOaPkOS+m+S6huS4gOS4qumAmumFjeespuW8leeUqOinhOagvOS9huacquiDveWSjOi/nOerr+WMuemFjeOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIiIKKyLmgqjopoHmsYLku47ov5znqIsgJyVzJyDmi4nlj5bvvIzkvYbmmK/mnKrmjIflrprkuIDkuKrliIbmlK/jgILlm6DkuLrov5nkuI3mmK/lvZPliY1cbiIKKyLliIbmlK/pu5jorqTnmoTov5znqIvku5PlupPvvIzmgqjlv4XpobvlnKjlkb3ku6TooYzkuK3mjIflrprkuIDkuKrliIbmlK/lkI3jgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNyBidWlsdGluL3JlYmFzZS5jOjE0MDkgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3MworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgIuaCqOW9k+WJjeS4jeWcqOS4gOS4quWIhuaUr+S4iuOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM5IGJ1aWx0aW4vcHVsbC5jOjQ1NCBnaXQtcGFyc2UtcmVtb3RlLnNoOjc5Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIKK21zZ3N0ciAi6K+35oyH5a6a5oKo6KaB5Y+Y5Z+65Yiw5ZOq5LiA5Liq5YiG5pSv44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDEgYnVpbHRpbi9wdWxsLmM6NDU2IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODIKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iCittc2dzdHIgIuivt+aMh+WumuaCqOimgeWQiOW5tuWTquS4gOS4quWIhuaUr+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQyIGJ1aWx0aW4vcHVsbC5jOjQ1NworbXNnaWQgIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIuivpuingSBnaXQtcHVsbCgxKeOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ0IGJ1aWx0aW4vcHVsbC5jOjQ1MCBidWlsdGluL3B1bGwuYzo0NTkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxNSBnaXQtcGFyc2UtcmVtb3RlLnNoOjY0Cittc2dpZCAiPHJlbW90ZT4iCittc2dzdHIgIjzov5znqIs+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NDQgYnVpbHRpbi9wdWxsLmM6NDU5IGJ1aWx0aW4vcHVsbC5jOjQ2NAorIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NQorbXNnaWQgIjxicmFuY2g+IgorbXNnc3RyICI85YiG5pSvPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcmViYXNlLmM6MTQwNyBnaXQtcGFyc2UtcmVtb3RlLnNoOjc1Cittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIuW9k+WJjeWIhuaUr+ayoeaciei3n+i4quS/oeaBr+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDYxIGdpdC1wYXJzZS1yZW1vdGUuc2g6OTUKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6IgorbXNnc3RyICLlpoLmnpzmgqjmg7PopoHkuLrmraTliIbmlK/liJvlu7rot5/ouKrkv6Hmga/vvIzmgqjlj6/ku6XmiafooYzvvJoiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIuaCqOeahOmFjee9ruS4reaMh+WumuimgeWQiOW5tui/nOeoi+eahOW8leeUqCAnJXMn77yMXG4iCisi5L2G5piv5rKh5pyJ6I635Y+W5Yiw6L+Z5Liq5byV55So44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBjb21taXQgJXMiCittc2dzdHIgIuaXoOazleiuv+mXruaPkOS6pCAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODU3Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICLkuLrlj5jln7rmk43kvZzlv73nlaUgLS12ZXJpZnktc2lnbmF0dXJlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6OTEyCittc2dpZCAiLS1bbm8tXWF1dG9zdGFzaCBvcHRpb24gaXMgb25seSB2YWxpZCB3aXRoIC0tcmViYXNlLiIKK21zZ3N0ciAiLS1bbm8tXWF1dG9zdGFzaCDpgInpobnlj6rlnKjkvb/nlKggLS1yZWJhc2Ug5pe25pyJ5pWI44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICLmm7TmlrDlsJrmnKror57nlJ/nmoTliIbmlK/vvIzlj5jmm7Tmt7vliqDoh7PntKLlvJXjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyNAorbXNnaWQgInB1bGwgd2l0aCByZWJhc2UiCittc2dzdHIgIuWPmOWfuuW8j+aLieWPliIKKworIzogYnVpbHRpbi9wdWxsLmM6OTI1Cittc2dpZCAicGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAi6K+35o+Q5Lqk5oiW6LSu6JeP5a6D5Lus44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuXG4iCisiZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb21cbiIKKyJjb21taXQgJXMuIgorbXNnc3RyICIiCisiZmV0Y2gg5pu05paw5LqG5b2T5YmN55qE5YiG5pSv44CC5b+r6L+b5oKo55qE5bel5L2c5Yy6XG4iCisi6Iez5o+Q5LqkICVz44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICIiCisi5oKo5b2T5YmN55qE5bel5L2c5Yy65peg5rOV5omn6KGM5b+r6L+b5pON5L2c44CCXG4iCisi6aaW5YWI5omn6KGM5aaC5LiL5ZG95Luk77yaXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIuS7peehruiupOaJgOacieacieeUqOeahOaVsOaNruWdh+W3suS/neWtmOOAgueEtuWQjuaJp+ihjOS4i+mdoueahOWRveS7pFxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorIuaBouWkjeS5i+WJjeeahOeKtuaAgeOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTcxCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIuaXoOazleWwhuWkmuS4quWIhuaUr+WQiOW5tuWIsOepuuWIhuaUr+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTc1Cittc2dpZCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzLiIKK21zZ3N0ciAi5peg5rOV5Y+Y5Z+65Yiw5aSa5Liq5YiG5pSv44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo5ODIKK21zZ2lkICJjYW5ub3QgcmViYXNlIHdpdGggbG9jYWxseSByZWNvcmRlZCBzdWJtb2R1bGUgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAi5pys5Zyw5a2Q5qih57uE5Lit5pyJ5L+u5pS577yM5peg5rOV5Y+Y5Z+6IgorCisjOiBidWlsdGluL3B1c2guYzoxOQorbXNnaWQgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVzaCBbPOmAiemhuT5dIFs85LuT5bqTPiBbPOW8leeUqOinhOagvD4uLi5dXSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTEyCittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICLmoIfnrb7lkI7pnaLmnKrmj5DkvpsgPOagh+etvj4g5Y+C5pWwIgorCisjOiBidWlsdGluL3B1c2guYzoxMjIKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUg5Y+q5o6l5Y+X566A5Y2V55qE55uu5qCH5byV55So5ZCNIgorCisjOiBidWlsdGluL3B1c2guYzoxNjgKK21zZ2lkICIiCisiXG4iCisiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksIHNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIgorbXNnc3RyICIiCisiXG4iCisi5Li65LqG5rC45LmF5Zyw6YCJ5oup5Lu75LiA6YCJ6aG577yM5Y+C6KeBICdnaXQgaGVscCBjb25maWcnIOS4reeahCBwdXNoLmRlZmF1bHTjgIIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGRvZXMgbm90IG1hdGNoXG4iCisidGhlIG5hbWUgb2YgeW91ciBjdXJyZW50IGJyYW5jaC4gIFRvIHB1c2ggdG8gdGhlIHVwc3RyZWFtIGJyYW5jaFxuIgorIm9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiVG8gcHVzaCB0byB0aGUgYnJhbmNoIG9mIHRoZSBzYW1lIG5hbWUgb24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuaCqOW9k+WJjeWIhuaUr+eahOS4iua4uOWIhuaUr+WSjOaCqOW9k+WJjeWIhuaUr+WQjeS4jeWMuemFje+8jOS4uuaOqOmAgeWIsOi/nOeoi+eahOS4iua4uOWIhuaUr++8jFxuIgorIuS9v+eUqFxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisi5Li65o6o6YCB6Iez6L+c56iL5ZCM5ZCN5YiG5pSv77yM5L2/55SoXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAiIgorIuaCqOW9k+WJjeS4jeWcqOS4gOS4quWIhuaUr+S4iuOAglxuIgorIueOsOWcqOS4uuaOqOmAgeW9k+WJje+8iOWIhuemu+WktOaMh+mSiO+8ieeahOWOhuWPsu+8jOS9v+eUqFxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjzov5znqIvliIbmlK/lkI3lrZc+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorIuW9k+WJjeWIhuaUryAlcyDmsqHmnInlr7nlupTnmoTkuIrmuLjliIbmlK/jgIJcbiIKKyLkuLrmjqjpgIHlvZPliY3liIbmlK/lubblu7rnq4vkuI7ov5znqIvkuIrmuLjnmoTot5/ouKrvvIzkvb/nlKhcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICLlvZPliY3liIbmlK8gJXMg5pyJ5aSa5Liq5LiK5ri45YiG5pSv77yM5ouS57ud5o6o6YCB44CCIgorCisjOiBidWlsdGluL3B1c2guYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKK21zZ3N0ciAiIgorIuaCqOato+aOqOmAgeiHs+i/nOeoiyAnJXMn77yI5YW25bm26Z2e5b2T5YmN5YiG5pSvICclcycg55qE5LiK5ri477yJ77yMXG4iCisi6ICM5rKh5pyJ5ZGK6K+J5oiR6KaB5o6o6YCB5LuA5LmI44CB5pu05paw5ZOq5Liq6L+c56iL5YiG5pSv44CCIgorCisjOiBidWlsdGluL3B1c2guYzoyNzAKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAi5oKo5rKh5pyJ5Li65o6o6YCB5oyH5a6a5Lu75L2V5byV55So6KeE5qC877yM5bm25LiUIHB1c2guZGVmYXVsdCDkuLogXCJub3RoaW5nXCLjgIIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3NworbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gSW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLlxuIgorIidnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIuabtOaWsOiiq+aLkue7ne+8jOWboOS4uuaCqOW9k+WJjeWIhuaUr+eahOacgOaWsOaPkOS6pOiQveWQjuS6juWFtuWvueW6lOeahOi/nOeoi+WIhuaUr+OAglxuIgorIuWGjeasoeaOqOmAgeWJje+8jOWFiOS4jui/nOeoi+WPmOabtOWQiOW5tu+8iOWmgiAnZ2l0IHB1bGwgLi4uJ++8ieOAguivpuingVxuIgorIidnaXQgcHVzaCAtLWhlbHAnIOS4reeahCAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyDlsI/oioLjgIIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4MworbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisiY291bnRlcnBhcnQuIENoZWNrIG91dCB0aGlzIGJyYW5jaCBhbmQgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIuabtOaWsOiiq+aLkue7ne+8jOWboOS4uuaOqOmAgeeahOS4gOS4quWIhuaUr+eahOacgOaWsOaPkOS6pOiQveWQjuS6juWFtuWvueW6lOeahOi/nOeoi+WIhuaUr+OAglxuIgorIuajgOWHuuivpeWIhuaUr+W5tuaVtOWQiOi/nOeoi+WPmOabtO+8iOWmgiAnZ2l0IHB1bGwgLi4uJ++8ie+8jOeEtuWQjuWGjeaOqOmAgeOAguivpuingVxuIgorIidnaXQgcHVzaCAtLWhlbHAnIOS4reeahCAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyDlsI/oioLjgIIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4OQorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgcmVtb3RlIGNvbnRhaW5zIHdvcmsgdGhhdCB5b3UgZG9cbiIKKyJub3QgaGF2ZSBsb2NhbGx5LiBUaGlzIGlzIHVzdWFsbHkgY2F1c2VkIGJ5IGFub3RoZXIgcmVwb3NpdG9yeSBwdXNoaW5nXG4iCisidG8gdGhlIHNhbWUgcmVmLiBZb3UgbWF5IHdhbnQgdG8gZmlyc3QgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuLCAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLmm7TmlrDooqvmi5Lnu53vvIzlm6DkuLrov5znqIvku5PlupPljIXlkKvmgqjmnKzlnLDlsJrkuI3lrZjlnKjnmoTmj5DkuqTjgILov5npgJrluLjmmK/lm6DkuLrlj6blpJZcbiIKKyLkuIDkuKrku5PlupPlt7LlkJHor6XlvJXnlKjov5vooYzkuobmjqjpgIHjgILlho3mrKHmjqjpgIHliY3vvIzmgqjlj6/og73pnIDopoHlhYjmlbTlkIjov5znqIvlj5jmm7RcbiIKKyLvvIjlpoIgJ2dpdCBwdWxsIC4uLifvvInjgIJcbiIKKyLor6bop4EgJ2dpdCBwdXNoIC0taGVscCcg5Lit55qEICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIOWwj+iKguOAgiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk2Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAi5pu05paw6KKr5ouS57ud77yM5Zug5Li66K+l5qCH562+5Zyo6L+c56iL5bey57uP5a2Y5Zyo44CCIgorCisjOiBidWlsdGluL3B1c2guYzoyOTkKK21zZ2lkICIiCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIuWmguaenOS4jeS9v+eUqCAnLS1mb3JjZScg5Y+C5pWw77yM5oKo5LiN6IO95pu05paw5LiA5Liq5oyH5ZCR6Z2e5o+Q5Lqk5a+56LGh55qE6L+c56iL5byV55So77yMXG4iCisi5Lmf5LiN6IO95pu05paw6L+c56iL5byV55So6K6p5YW25oyH5ZCR5LiA5Liq6Z2e5o+Q5Lqk5a+56LGh44CCXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIuaOqOmAgeWIsCAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgIuaOqOmAgeS4gOS6m+W8leeUqOWIsCAnJXMnIOWksei0pSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQyCittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAi5LuT5bqTIgorCisjOiBidWlsdGluL3B1c2guYzo1NDMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjQKK21zZ2lkICJwdXNoIGFsbCByZWZzIgorbXNnc3RyICLmjqjpgIHmiYDmnInlvJXnlKgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NCBidWlsdGluL3NlbmQtcGFjay5jOjE2NgorbXNnaWQgIm1pcnJvciBhbGwgcmVmcyIKK21zZ3N0ciAi6ZWc5YOP5omA5pyJ5byV55SoIgorCisjOiBidWlsdGluL3B1c2guYzo1NDYKK21zZ2lkICJkZWxldGUgcmVmcyIKK21zZ3N0ciAi5Yig6Zmk5byV55SoIgorCisjOiBidWlsdGluL3B1c2guYzo1NDcKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgIuaOqOmAgeagh+etvu+8iOS4jeiDveS9v+eUqCAtLWFsbCBvciAtLW1pcnJvcu+8iSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY3Cittc2dpZCAiZm9yY2UgdXBkYXRlcyIKK21zZ3N0ciAi5by65Yi25pu05pawIgorCisjOiBidWlsdGluL3B1c2guYzo1NTIgYnVpbHRpbi9zZW5kLXBhY2suYzoxODEKK21zZ2lkICI8cmVmbmFtZT46PGV4cGVjdD4iCittc2dzdHIgIjzlvJXnlKjlkI0+OjzmnJ/mnJvlgLw+IgorCisjOiBidWlsdGluL3B1c2guYzo1NTMgYnVpbHRpbi9zZW5kLXBhY2suYzoxODIKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAi6KaB5rGC5byV55So5pen55qE5Y+W5YC85Li66K6+5a6a5YC8IgorCisjOiBidWlsdGluL3B1c2guYzo1NTYKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIuaOp+WItuWtkOaooee7hOeahOmAkuW9kuaOqOmAgSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU4IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAi5L2/55So57K+566A5omT5YyFIgorCisjOiBidWlsdGluL3B1c2guYzo1NTkgYnVpbHRpbi9wdXNoLmM6NTYwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYxCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgInJlY2VpdmUgcGFjayBwcm9ncmFtIgorbXNnc3RyICLmjqXmlLbljIXnqIvluo8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2MQorbXNnaWQgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvc3RhdHVzIgorbXNnc3RyICLorr7nva4gZ2l0IHB1bGwvc3RhdHVzIOeahOS4iua4uCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY0Cittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgIua4hemZpOacrOWcsOWIoOmZpOeahOW8leeUqCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY2Cittc2dpZCAiYnlwYXNzIHByZS1wdXNoIGhvb2siCittc2dzdHIgIue7lei/hyBwcmUtcHVzaCDpkqnlrZAiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NworbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAi5o6o6YCB57y65aSx5L2G5pyJ5YWz55qE5qCH562+IgorCisjOiBidWlsdGluL3B1c2guYzo1NzAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjkKK21zZ2lkICJHUEcgc2lnbiB0aGUgcHVzaCIKK21zZ3N0ciAi55SoIEdQRyDkuLrmjqjpgIHnrb7lkI0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MiBidWlsdGluL3NlbmQtcGFjay5jOjE3NgorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICLpnIDopoHov5znq6/mlK/mjIHljp/lrZDkuovliqEiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU5MAorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICItLWRlbGV0ZSDkuI4gLS1hbGzjgIEtLW1pcnJvciDlj4ogLS10YWdzIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTkyCittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIi0tZGVsZXRlIOacquaOpeS7u+S9leW8leeUqOayoeacieaEj+S5iSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBvc2l0b3J5ICclcyciCittc2dzdHIgIuWdj+eahOS7k+W6kyAnJXMnIgorCisjOiBidWlsdGluL3B1c2guYzo2MTMKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSAiCisicmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAiIgorIuayoeaciemFjee9ruaOqOmAgeebruagh+OAglxuIgorIuaIlumAmui/h+WRveS7pOihjOaMh+WumiBVUkzvvIzmiJbnlKjkuIvpnaLlkb3ku6TphY3nva7kuIDkuKrov5znqIvku5PlupNcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPOWQjeensD4gPOWcsOWdgD5cbiIKKyJcbiIKKyLnhLblkI7kvb/nlKjor6Xov5znqIvku5PlupPlkI3miafooYzmjqjpgIFcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPOWQjeensD5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjI4Cittc2dpZCAiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCDlkowgLS10YWdzIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjMwCittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1hbGwg5LiN6IO95ZKM5byV55So6KeE5qC85ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL3B1c2guYzo2MzQKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbWlycm9yIOWSjCAtLXRhZ3Mg5LiN5YW85a65IgorCisjOiBidWlsdGluL3B1c2guYzo2MzYKK21zZ2lkICItLW1pcnJvciBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLW1pcnJvciDkuI3og73lkozlvJXnlKjop4TmoLzlkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzOQorbXNnaWQgIi0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCDlkowgLS1taXJyb3Ig5LiN5YW85a65IgorCisjOiBidWlsdGluL3B1c2guYzo2NDMKK21zZ2lkICJwdXNoIG9wdGlvbnMgbXVzdCBub3QgaGF2ZSBuZXcgbGluZSBjaGFyYWN0ZXJzIgorbXNnc3RyICLmjqjpgIHpgInpobnkuI3og73mnInmjaLooYznrKYiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjgKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLWJhc2U+Li48b2xkLXRpcD4gPG5ldy1iYXNlPi4uPG5ldy10aXA+IgorbXNnc3RyICJnaXQgcmFuZ2UtZGlmZiBbPOmAiemhuT5dIDxvbGQtYmFzZT4uLjxvbGQtdGlwPiA8bmV3LWJhc2U+Li48bmV3LXRpcD4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjkKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLXRpcD4uLi48bmV3LXRpcD4iCittc2dzdHIgImdpdCByYW5nZS1kaWZmIFs86YCJ6aG5Pl0gPG9sZC10aXA+Li4uPG5ldy10aXA+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoxMAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxiYXNlPiA8b2xkLXRpcD4gPG5ldy10aXA+IgorbXNnc3RyICJnaXQgcmFuZ2UtZGlmZiBbPOmAiemhuT5dIDxiYXNlPiA8b2xkLXRpcD4gPG5ldy10aXA+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyMgorbXNnaWQgIlBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiCittc2dzdHIgIuWIm+W7uuadg+mHjeeahOeZvuWIhuavlCIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjQKK21zZ2lkICJ1c2Ugc2ltcGxlIGRpZmYgY29sb3JzIgorbXNnc3RyICLkvb/nlKjnroDljZXlt67lvILpopzoibIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAibm90ZXMiCittc2dzdHIgIuazqOinoyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjYKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBsb2cnIgorbXNnc3RyICLkvKDpgJLnu5kgJ2dpdCBsb2cnIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo1MCBidWlsdGluL3JhbmdlLWRpZmYuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyAuLiBpbiByYW5nZTogJyVzJyIKK21zZ3N0ciAi5rKh5pyJ5Zyo6IyD5Zu05Lit5L2/55SoIC4u77yaJyVzJyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NjQKK21zZ2lkICJzaW5nbGUgYXJnIGZvcm1hdCBtdXN0IGJlIHN5bW1ldHJpYyByYW5nZSIKK21zZ3N0ciAi5Y2V5Liq5Y+C5pWw5qC85byP5b+F6aG75piv5a+556ew6IyD5Zu077yI5Y2z5YyF5ZCrLi4u77yJIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo3OQorbXNnaWQgIm5lZWQgdHdvIGNvbW1pdCByYW5nZXMiCittc2dzdHIgIumcgOimgeS4pOS4quaPkOS6pOiMg+WbtCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzo0MQorbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTzliY3nvIA+KSBbLSIKKyJ1IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD085paH5Lu2Pl0gKC0tZW1wdHkgfCA85qCR5a+56LGhMT4gWzzmoJHlr7nosaEyPiBbPOagkeWvueixoTM+XV0pIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNAorbXNnaWQgIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iCittc2dzdHIgIuWwhue0ouW8lee7k+aenOWGmeWFpSA85paH5Lu2PiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjcKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAi5Y+q5piv5riF56m657Si5byVIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyOQorbXNnaWQgIk1lcmdpbmciCittc2dzdHIgIuWQiOW5tiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzEKK21zZ2lkICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIgorbXNnc3RyICLor7vlj5bkuYvkvZnlho3miafooYzkuIDkuKrlkIjlubYiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMzCittc2dpZCAiMy13YXkgbWVyZ2UgaWYgbm8gZmlsZSBsZXZlbCBtZXJnaW5nIHJlcXVpcmVkIgorbXNnc3RyICLlpoLmnpzmsqHmnInmlofku7bnuqflkIjlubbpnIDopoHvvIzmiafooYzkuInmlrnlkIjlubYiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM1Cittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAi5a2Y5Zyo5re75Yqg5ZKM5Yig6Zmk5pe277yM5Lmf5omn6KGM5LiJ5pa55ZCI5bm2IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgIuexu+S8vOS6jiAtbe+8jOS9huS4ouW8g+acquWQiOW5tueahOadoeebriIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzgKK21zZ2lkICI8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIjzlrZDnm67lvZU+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzkKK21zZ2lkICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAi6K+75Y+W5qCR5a+56LGh5Yiw57Si5byV55qEIDzlrZDnm67lvZU+LyDkuIsiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQyCittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAi55So5ZCI5bm255qE57uT5p6c5pu05paw5bel5L2c5Yy6IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiZ2l0aWdub3JlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAi5YWB6K645b+955Wl5paH5Lu25Lit6K6+5a6a55qE5paH5Lu25Y+v5Lul6KKr6KaG55uWIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OAorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAi5ZCI5bm25ZCO5LiN5qOA5p+l5bel5L2c5Yy6IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OQorbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAi5LiN5pu05paw57Si5byV5Yy65ZKM5bel5L2c5Yy6IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MQorbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAi6Lez6L+H5bqU55So56iA55aP5qOA5Ye66L+H5ruk5ZmoIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MworbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAi6LCD6K+VIHVucGFjay10cmVlcyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTcKK21zZ2lkICJzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcyIKK21zZ3N0ciAi5oqR5Yi25Y+N6aaI5L+h5oGvIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE4OAorbXNnaWQgIllvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICLmgqjpnIDopoHlhYjop6PlhrPlvZPliY3ntKLlvJXnmoTlhrLnqoEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPiB8IC0ta2VlcC1iYXNlXSAiCisiWzx1cHN0cmVhbT4gWzxicmFuY2g+XV0iCittc2dzdHIgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPOWRveS7pD5dIFstLW9udG8gPOaWsOWfuue6vz4gfCAtLWtlZXAtYmFzZV0gWzwiCisi5LiK5ri4PiBbPOWIhuaUrz5dXSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNAorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XSAtLXJvb3QgWzxicmFuY2g+XSIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgWy1pXSBb6YCJ6aG5XSBbLS1leGVjIDzlkb3ku6Q+XSBbLS1vbnRvIDzmlrDln7rnur8+XSAtLXJvb3QgWzzliIbmlK8+XSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNgorbXNnaWQgImdpdCByZWJhc2UgLS1jb250aW51ZSB8IC0tYWJvcnQgfCAtLXNraXAgfCAtLWVkaXQtdG9kbyIKK21zZ3N0ciAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NSBidWlsdGluL3JlYmFzZS5jOjE5OSBidWlsdGluL3JlYmFzZS5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSB0b2RvIGxpc3Q6ICclcyciCittc2dzdHIgIuS4jeWPr+eUqOeahOW+heWKnuWIl+ihqO+8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIgorbXNnc3RyICLml6Dms5XliJvlu7rkuLTml7bnmoQgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6Mjk4Cittc2dpZCAiY291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIuaXoOazleagh+iusOS4uuS6pOS6kuW8jyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNTIKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgdG9kbyBsaXN0IgorbXNnc3RyICLml6Dms5XnlJ/miJDlvoXlip7liJfooagiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzkxCittc2dpZCAiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iCittc2dzdHIgIuS9v+eUqCAtLXVwc3RyZWFtIOaIliAtLW9udG8g5b+F6aG75o+Q5L6b5LiA5Liq5Z+657q/5o+Q5LqkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ2MQorbXNnaWQgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NCBidWlsdGluL3JlYmFzZS5jOjE1NTAKK21zZ2lkICIoREVQUkVDQVRFRCkga2VlcCBlbXB0eSBjb21taXRzIgorbXNnc3RyICLvvIjlt7LlvIPnlKjvvInkv53nlZnnqbrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc4IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI4Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICLlhYHorrjmj5DkuqTor7TmmI7kuLrnqboiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgwCittc2dpZCAicmViYXNlIG1lcmdlIGNvbW1pdHMiCittc2dzdHIgIuWvueWQiOW5tuaPkOS6pOWPmOWfuiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODIKK21zZ2lkICJrZWVwIG9yaWdpbmFsIGJyYW5jaCBwb2ludHMgb2YgY291c2lucyIKK21zZ3N0ciAi5L+d5oyB5YWE5byf5o+Q5Lqk55qE5Y6f5aeL5YiG5pSv54K5IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NAorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgIuenu+WKqOS7pSBzcXVhc2ghL2ZpeHVwISDlvIDlpLTnmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg1Cittc2dpZCAic2lnbiBjb21taXRzIgorbXNnc3RyICLnrb7lkI3mj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg3IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MAorbXNnaWQgImRpc3BsYXkgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgIuaYvuekuuS4iua4uOWPmOWMlueahOW3ruW8gue7n+iuoSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODkKK21zZ2lkICJjb250aW51ZSByZWJhc2UiCittc2dzdHIgIue7p+e7reWPmOWfuiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTEKK21zZ2lkICJza2lwIGNvbW1pdCIKK21zZ3N0ciAi6Lez6L+H5o+Q5LqkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MgorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAi5Y+Y5Z+65b6F5Yqe5YiX6KGoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NAorbXNnaWQgInNob3cgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgIuaYvuekuuW9k+WJjeihpeS4gSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTcKK21zZ2lkICJzaG9ydGVuIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAi57yp55+t5b6F5Yqe5YiX6KGo5Lit55qE5o+Q5Lqk5Y+3IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5OQorbXNnaWQgImV4cGFuZCBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgIuaJqeWxleW+heWKnuWIl+ihqOS4reeahOaPkOS6pOWPtyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDEKK21zZ2lkICJjaGVjayB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICLmo4Dmn6XlvoXlip7liJfooagiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAzCittc2dpZCAicmVhcnJhbmdlIGZpeHVwL3NxdWFzaCBsaW5lcyIKK21zZ3N0ciAi6YeN5paw5o6S5YiXIGZpeHVwL3NxdWFzaCDooYwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA1Cittc2dpZCAiaW5zZXJ0IGV4ZWMgY29tbWFuZHMgaW4gdG9kbyBsaXN0IgorbXNnc3RyICLlnKjlvoXlip7liJfooajkuK3mj5LlhaUgZXhlYyDmiafooYzlkb3ku6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA2Cittc2dpZCAib250byIKK21zZ3N0ciAib250byIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDkKK21zZ2lkICJyZXN0cmljdC1yZXZpc2lvbiIKK21zZ3N0ciAicmVzdHJpY3QtcmV2aXNpb24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA5Cittc2dpZCAicmVzdHJpY3QgcmV2aXNpb24iCittc2dzdHIgIumZkOWItueJiOacrCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTEKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLW9udG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTEyCittc2dpZCAic3F1YXNoIG9udG8iCittc2dzdHIgInNxdWFzaCBvbnRvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNAorbXNnaWQgInRoZSB1cHN0cmVhbSBjb21taXQiCittc2dzdHIgIuS4iua4uOaPkOS6pCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJoZWFkLW5hbWUiCittc2dzdHIgImhlYWQtbmFtZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJoZWFkIG5hbWUiCittc2dzdHIgImhlYWQg5ZCN56ewIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMQorbXNnaWQgInJlYmFzZSBzdHJhdGVneSIKK21zZ3N0ciAi5Y+Y5Z+6562W55WlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMgorbXNnaWQgInN0cmF0ZWd5LW9wdHMiCittc2dzdHIgInN0cmF0ZWd5LW9wdHMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIzCittc2dpZCAic3RyYXRlZ3kgb3B0aW9ucyIKK21zZ3N0ciAi562W55Wl6YCJ6aG5IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNAorbXNnaWQgInN3aXRjaC10byIKK21zZ3N0ciAi5YiH5o2i5YiwIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNQorbXNnaWQgInRoZSBicmFuY2ggb3IgY29tbWl0IHRvIGNoZWNrb3V0IgorbXNnc3RyICLopoHmo4Dlh7rnmoTliIbmlK/miJbmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI2Cittc2dpZCAib250by1uYW1lIgorbXNnc3RyICJvbnRvLW5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI2Cittc2dpZCAib250byBuYW1lIgorbXNnc3RyICJvbnRvIG5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI3Cittc2dpZCAiY21kIgorbXNnc3RyICJjbWQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI3Cittc2dpZCAidGhlIGNvbW1hbmQgdG8gcnVuIgorbXNnc3RyICLopoHmiafooYznmoTlkb3ku6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTMwIGJ1aWx0aW4vcmViYXNlLmM6MTU4NAorbXNnaWQgImF1dG9tYXRpY2FsbHkgcmUtc2NoZWR1bGUgYW55IGBleGVjYCB0aGF0IGZhaWxzIgorbXNnc3RyICLoh6rliqjph43mlrDlronmjpLku7vkvZXlpLHotKXnmoQgYGV4ZWNgIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU0NgorbXNnaWQgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1yZWJhc2UtbWVyZ2VzIgorbXNnc3RyICLkuI3kvb/nlKggLS1yZWJhc2UtbWVyZ2Vz77yM5YiZIC0tW25vLV1yZWJhc2UtY291c2lucyDmsqHmnInmlYjmnpwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiJXMg6ZyA6KaB5Lqk5LqS5byP5Y+Y5Z+6IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0ICdvbnRvJzogJyVzJyIKK21zZ3N0ciAi5peg5rOV6I635Y+WICdvbnRvJ++8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjI3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3JpZy1oZWFkOiAnJXMnIgorbXNnc3RyICLml6DmlYjnmoTljp/lp4sgaGVhZO+8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGludmFsaWQgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU6ICclcyciCittc2dzdHIgIuW/veeVpeaXoOaViOeahCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0Ze+8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIuS4jeiDveivu+WPliAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIuS4jeiDveWtmOWCqCAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo4NTMKK21zZ2lkICJjb3VsZCBub3QgZGV0ZXJtaW5lIEhFQUQgcmV2aXNpb24iCittc2dzdHIgIuS4jeiDveehruWumiBIRUFEIOeJiOacrCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo5NzYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxCittc2dpZCAiIgorIlJlc29sdmUgYWxsIGNvbmZsaWN0cyBtYW51YWxseSwgbWFyayB0aGVtIGFzIHJlc29sdmVkIHdpdGhcbiIKKyJcImdpdCBhZGQvcm0gPGNvbmZsaWN0ZWRfZmlsZXM+XCIsIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiWW91IGNhbiBpbnN0ZWFkIHNraXAgdGhpcyBjb21taXQ6IHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIuXG4iCisiVG8gYWJvcnQgYW5kIGdldCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgXCJnaXQgcmViYXNlXCIsIHJ1biBcImdpdCByZWJhc2UgLS0iCisiYWJvcnRcIi4iCittc2dzdHIgIiIKKyLmiYvlt6Xop6PlhrPmiYDmnInlhrLnqoHvvIzmiafooYwgXCJnaXQgYWRkL3JtIDzlhrLnqoHnmoTmlofku7Y+XCIg5qCH6K6wXG4iCisi5Yay56qB5bey6Kej5Yaz77yM54S25ZCO5omn6KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLjgILmgqjkuZ/lj6/ku6XmiafooYxcbiIKKyJcImdpdCByZWJhc2UgLS1za2lwXCIg5ZG95Luk6Lez6L+H6L+Z5Liq5o+Q5Lqk44CC5aaC5p6c5oOz6KaB57uI5q2i5omn6KGM5bm25Zue5YiwXG4iCisiXCJnaXQgcmViYXNlXCIg5omn6KGM5LmL5YmN55qE54q25oCB77yM5omn6KGMIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCLjgIIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiZ2l0IGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIHByZXBhcmluZyB0aGUgcGF0Y2hlcyB0byByZXBsYXlcbiIKKyJ0aGVzZSByZXZpc2lvbnM6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiQXMgYSByZXN1bHQsIGdpdCBjYW5ub3QgcmViYXNlIHRoZW0uIgorbXNnc3RyICIiCisiXG4iCisi5Zyo5Li66YeN5pS+6L+Z5Lqb54mI5pys6ICM5YeG5aSH6KGl5LiB5pe277yMZ2l0IOmBh+WIsOS6huS4gOS4qumUmeivr++8mlxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIuWboOatpCBnaXQg5peg5rOV5a+55YW25Y+Y5Z+644CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVucmVjb2duaXplZCBlbXB0eSB0eXBlICclcyc7IHZhbGlkIHZhbHVlcyBhcmUgXCJkcm9wXCIsIFwia2VlcFwiLCBhbmQgXCJhc2siCisiXCIuIgorbXNnc3RyICLml6Dms5Xor4bliKvnmoTnqbrnsbvlnosgJyVzJ++8m+acieaViOWAvOaciSBcImRyb3BcIuOAgVwia2VlcFwiIOWSjCBcImFza1wi44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzXG4iCisiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LlxuIgorIlNlZSBnaXQtcmViYXNlKDEpIGZvciBkZXRhaWxzLlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlICc8YnJhbmNoPidcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzXG4iCisi6K+35oyH5a6a5oKo6KaB5Y+Y5Z+65Yiw5ZOq5Liq5YiG5pSv44CCXG4iCisi6K+m6KeBIGdpdC1yZWJhc2UoMSnjgIJcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAnPGJyYW5jaD4nXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMvPGJyYW5jaD4gJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuWmguaenOaCqOaDs+imgeS4uuatpOWIhuaUr+WIm+W7uui3n+i4quS/oeaBr++8jOaCqOWPr+S7peaJp+ihjO+8mlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0NworbXNnaWQgImV4ZWMgY29tbWFuZHMgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiCittc2dzdHIgImV4ZWMg5ZG95Luk5LiN6IO95YyF5ZCr5o2i6KGM56ymIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NTEKK21zZ2lkICJlbXB0eSBleGVjIGNvbW1hbmQiCittc2dzdHIgIuepuueahCBleGVjIOWRveS7pCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDgxCittc2dpZCAicmViYXNlIG9udG8gZ2l2ZW4gYnJhbmNoIGluc3RlYWQgb2YgdXBzdHJlYW0iCittc2dzdHIgIuWPmOWfuuWIsOe7meWumueahOWIhuaUr+iAjOmdnuS4iua4uCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDgzCittc2dpZCAidXNlIHRoZSBtZXJnZS1iYXNlIG9mIHVwc3RyZWFtIGFuZCBicmFuY2ggYXMgdGhlIGN1cnJlbnQgYmFzZSIKK21zZ3N0ciAi5L2/55So5LiK5ri45ZKM5YiG5pSv55qE5ZCI5bm25Z+657q/5YGa5Li65b2T5YmN5Z+657q/IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODUKK21zZ2lkICJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIgorbXNnc3RyICLlhYHorrjmiafooYwgcHJlLXJlYmFzZSDpkqnlrZAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4NworbXNnaWQgImJlIHF1aWV0LiBpbXBsaWVzIC0tbm8tc3RhdCIKK21zZ3N0ciAi5a6J6Z2Z44CC5pqX56S6IC0tbm8tc3RhdCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDkzCittc2dpZCAiZG8gbm90IHNob3cgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICLkuI3mmL7npLrkuIrmuLjlj5jljJbnmoTlt67lvILnu5/orqEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5NgorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnk6IGxpbmUgdG8gZWFjaCBjb21taXQiCittc2dzdHIgIuS4uuavj+S4gOS4quaPkOS6pOa3u+WKoOS4gOS4qiBTaWduZWQtb2ZmLWJ5OiDnrb7lkI0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5OCBidWlsdGluL3JlYmFzZS5jOjE1MDIgYnVpbHRpbi9yZWJhc2UuYzoxNTA0Cittc2dpZCAicGFzc2VkIHRvICdnaXQgYW0nIgorbXNnc3RyICLkvKDpgJLnu5kgJ2dpdCBhbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTA2IGJ1aWx0aW4vcmViYXNlLmM6MTUwOAorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFwcGx5JyIKK21zZ3N0ciAi5Lyg6YCS57uZICdnaXQgYXBwbHknIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTAgYnVpbHRpbi9yZWJhc2UuYzoxNTEzCittc2dpZCAiY2hlcnJ5LXBpY2sgYWxsIGNvbW1pdHMsIGV2ZW4gaWYgdW5jaGFuZ2VkIgorbXNnc3RyICLmi6PpgInmiYDmnInmj5DkuqTvvIzljbPkvb/mnKrkv67mlLkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxNQorbXNnaWQgImNvbnRpbnVlIgorbXNnc3RyICLnu6fnu60iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxOAorbXNnaWQgInNraXAgY3VycmVudCBwYXRjaCBhbmQgY29udGludWUiCittc2dzdHIgIui3s+i/h+W9k+WJjeihpeS4geW5tue7p+e7rSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjAKK21zZ2lkICJhYm9ydCBhbmQgY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2giCittc2dzdHIgIue7iOatouW5tuajgOWHuuWOn+acieWIhuaUryIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTIzCittc2dpZCAiYWJvcnQgYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcyIKK21zZ3N0ciAi57uI5q2i5L2G5L+d5oyBIEhFQUQg5LiN5Y+YIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjQKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAi5Zyo5Lqk5LqS5byP5Y+Y5Z+65Lit57yW6L6R5b6F5Yqe5YiX6KGoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjcKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBmaWxlIGJlaW5nIGFwcGxpZWQgb3IgbWVyZ2VkIgorbXNnc3RyICLmmL7npLrmraPlnKjlupTnlKjmiJblkIjlubbnmoTooaXkuIHmlofku7YiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzMAorbXNnaWQgInVzZSBhcHBseSBzdHJhdGVnaWVzIHRvIHJlYmFzZSIKK21zZ3N0ciAi5L2/55So5bqU55So562W55Wl6L+b6KGM5Y+Y5Z+6IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzQKK21zZ2lkICJ1c2UgbWVyZ2luZyBzdHJhdGVnaWVzIHRvIHJlYmFzZSIKK21zZ3N0ciAi5L2/55So5ZCI5bm2562W55Wl6L+b6KGM5Y+Y5Z+6IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzgKK21zZ2lkICJsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbGlzdCBvZiBjb21taXRzIHRvIHJlYmFzZSIKK21zZ3N0ciAi6K6p55So5oi357yW6L6R6KaB5Y+Y5Z+655qE5o+Q5Lqk5YiX6KGoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NDIKK21zZ2lkICIoREVQUkVDQVRFRCkgdHJ5IHRvIHJlY3JlYXRlIG1lcmdlcyBpbnN0ZWFkIG9mIGlnbm9yaW5nIHRoZW0iCittc2dzdHIgIu+8iOW3suW8g+eUqO+8ieWwneivlemHjeW7uuWQiOW5tuaPkOS6pOiAjOmdnuW/veeVpeWug+S7rCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTQ3Cittc2dpZCAiaG93IHRvIGhhbmRsZSBjb21taXRzIHRoYXQgYmVjb21lIGVtcHR5IgorbXNnc3RyICLlpoLkvZXlpITnkIbmiJDkuLrnqbrmj5DkuqTnmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NAorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEgdW5kZXIgLWkiCittc2dzdHIgIuWcqCAtaSDkuqTkupLmqKHlvI/kuIvvvIznp7vliqjku6Ugc3F1YXNoIS9maXh1cCEg5byA5aS055qE5o+Q5LqkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NjAKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIgorbXNnc3RyICLlnKjmk43kvZzliY3lkI7miafooYzoh6rliqjotK7ol4/lkozlvLnlh7rotK7ol48iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2MgorbXNnaWQgImFkZCBleGVjIGxpbmVzIGFmdGVyIGVhY2ggY29tbWl0IG9mIHRoZSBlZGl0YWJsZSBsaXN0IgorbXNnc3RyICLlj6/nvJbovpHliJfooajnmoTmr4/kuIDkuKrmj5DkuqTkuIvpnaLlop7liqDkuIDooYwgZXhlYyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTY2Cittc2dpZCAiYWxsb3cgcmViYXNpbmcgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICLlhYHorrjpkojlr7nnqbrmj5DkuqTor7TmmI7nmoTmj5DkuqTlj5jln7oiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3MAorbXNnaWQgInRyeSB0byByZWJhc2UgbWVyZ2VzIGluc3RlYWQgb2Ygc2tpcHBpbmcgdGhlbSIKK21zZ3N0ciAi5bCd6K+V5a+55ZCI5bm25o+Q5Lqk5Y+Y5Z+66ICM5LiN5piv5b+955Wl5a6D5LusIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzMKK21zZ2lkICJ1c2UgJ21lcmdlLWJhc2UgLS1mb3JrLXBvaW50JyB0byByZWZpbmUgdXBzdHJlYW0iCittc2dzdHIgIuS9v+eUqCAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIOadpeS8mOWMluS4iua4uCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTc1Cittc2dpZCAidXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi5L2/55So57uZ5a6a55qE5ZCI5bm2562W55WlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzcgYnVpbHRpbi9yZXZlcnQuYzoxMTUKK21zZ2lkICJvcHRpb24iCittc2dzdHIgIumAiemhuSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTc4Cittc2dpZCAicGFzcyB0aGUgYXJndW1lbnQgdGhyb3VnaCB0byB0aGUgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIuWwhuWPguaVsOS8oOmAkue7meWQiOW5tuetlueVpSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTgxCittc2dpZCAicmViYXNlIGFsbCByZWFjaGFibGUgY29tbWl0cyB1cCB0byB0aGUgcm9vdChzKSIKK21zZ3N0ciAi5bCG5omA5pyJ5Y+v6L6+55qE5o+Q5Lqk5Y+Y5Z+65Yiw5qC55o+Q5LqkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1OTgKK21zZ2lkICIiCisidGhlIHJlYmFzZS51c2VCdWlsdGluIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCFcbiIKKyJTZWUgaXRzIGVudHJ5IGluICdnaXQgaGVscCBjb25maWcnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIuWvuSByZWJhc2UudXNlQnVpbHRpbiDnmoTmlK/mjIHlt7LooqvliKDpmaTvvIFcbiIKKyLor6bop4EgJ2dpdCBoZWxwIGNvbmZpZycg5Lit55qE5p2h55uu44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDQKK21zZ2lkICJJdCBsb29rcyBsaWtlICdnaXQgYW0nIGlzIGluIHByb2dyZXNzLiBDYW5ub3QgcmViYXNlLiIKK21zZ3N0ciAi55yL6LW35p2lICdnaXQtYW0nIOato+WcqOaJp+ihjOS4reOAguaXoOazleWPmOWfuuOAgiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjQ1Cittc2dpZCAiIgorImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgaXMgZGVwcmVjYXRlZC4gVXNlIC0tcmViYXNlLW1lcmdlcyBpbnN0ZWFkLiIKK21zZ3N0ciAiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyDooqvlvIPnlKjjgILnlKggLS1yZWJhc2UtbWVyZ2VzIOS7o+abv+OAgiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjUwCittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0ta2VlcC1iYXNlJyB3aXRoICctLW9udG8nIgorbXNnc3RyICLkuI3og73lsIYgJy0ta2VlcC1iYXNlJyDlkowgJy0tb250bycg57uE5ZCI5L2/55SoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTIKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tcm9vdCciCittc2dzdHIgIuS4jeiDveWwhiAnLS1rZWVwLWJhc2UnIOWSjCAnLS1yb290JyDnu4TlkIjkvb/nlKgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1NgorbXNnaWQgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCittc2dzdHIgIuayoeacieato+WcqOi/m+ihjOeahOWPmOWfuu+8nyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjYwCittc2dpZCAiVGhlIC0tZWRpdC10b2RvIGFjdGlvbiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnRlcmFjdGl2ZSByZWJhc2UuIgorbXNnc3RyICLliqjkvZwgLS1lZGl0LXRvZG8g5Y+q6IO955So5Zyo5Lqk5LqS5byP5Y+Y5Z+66L+H56iL5Lit44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2ODMKK21zZ2lkICJDYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICLkuI3og73or7vlj5YgSEVBRCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjk1Cittc2dpZCAiIgorIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlblxuIgorIm1hcmsgdGhlbSBhcyByZXNvbHZlZCB1c2luZyBnaXQgYWRkIgorbXNnc3RyICIiCisi5oKo5b+F6aG757yW6L6R5omA5pyJ55qE5ZCI5bm25Yay56qB77yM54S25ZCO6YCa6L+HIGdpdCBhZGRcbiIKKyLlkb3ku6TlsIblroPku6zmoIforrDkuLrlt7Lop6PlhrMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTcxNAorbXNnaWQgImNvdWxkIG5vdCBkaXNjYXJkIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIuaXoOazleS4ouW8g+W3peS9nOWMuuWPmOabtCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJXMiCittc2dzdHIgIuaXoOazleenu+WbniAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAlcyBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JXNcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQlc1xuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuXG4iCittc2dzdHIgIiIKKyLkvLzkuY7lt7LmnInkuIDkuKogJXMg55uu5b2V77yM5oiR5oCA55aR5oKo5q2j5aSE5LqO5Y+m5aSW5LiA5Liq5Y+Y5Z+65pON5L2c6L+H56iL5Lit44CCXG4iCisi5aaC5p6c5piv6L+Z5qC377yM6K+35omn6KGMXG4iCisiXHQlc1xuIgorIuWmguaenOS4jeaYr+i/meagt++8jOivt+aJp+ihjFxuIgorIlx0JXNcbiIKKyLnhLblkI7lho3ph43mlrDmiafooYzjgIIg5Li66YG/5YWN5Lii5aSx6YeN6KaB5pWw5o2u77yM5oiR5bey57uP5YGc5q2i5b2T5YmN5pON5L2c44CCXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTgwNgorbXNnaWQgInN3aXRjaCBgQycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAi5byA5YWzIGBDJyDmnJ/mnJvkuIDkuKrmlbDlrZflgLwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg0NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG1vZGU6ICVzIgorbXNnc3RyICLmnKrnn6XmqKHlvI/vvJolcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODY5Cittc2dpZCAiLS1zdHJhdGVneSByZXF1aXJlcyAtLW1lcmdlIG9yIC0taW50ZXJhY3RpdmUiCittc2dzdHIgIi0tc3RyYXRlZ3kg6ZyA6KaBIC0tbWVyZ2Ug5oiWIC0taW50ZXJhY3RpdmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5OQorbXNnaWQgImNhbm5vdCBjb21iaW5lIGFwcGx5IG9wdGlvbnMgd2l0aCBtZXJnZSBvcHRpb25zIgorbXNnc3RyICLkuI3og73nu4TlkIjkvb/nlKjlupTnlKjpgInpobnlkozlkIjlubbpgInpobkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHJlYmFzZSBiYWNrZW5kOiAlcyIKK21zZ3N0ciAi5pyq55+l55qE5Y+Y5Z+65ZCO56uv77yaJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkzNworbXNnaWQgIi0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyByZXF1aXJlcyAtLWV4ZWMgb3IgLS1pbnRlcmFjdGl2ZSIKK21zZ3N0ciAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIOmcgOimgSAtLWV4ZWMg5oiWIC0taW50ZXJhY3RpdmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1NworbXNnaWQgImNhbm5vdCBjb21iaW5lICctLXByZXNlcnZlLW1lcmdlcycgd2l0aCAnLS1yZWJhc2UtbWVyZ2VzJyIKK21zZ3N0ciAi5LiN6IO95bCGICctLXByZXNlcnZlLW1lcmdlcycg5ZKMICctLXJlYmFzZS1tZXJnZXMnIOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTYxCittc2dpZCAiIgorImVycm9yOiBjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyciCittc2dzdHIgIiIKKyLplJnor6/vvJrkuI3og73lsIYgJy0tcHJlc2VydmUtbWVyZ2VzJyDlkowgJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYycg5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJXMnIgorbXNnc3RyICLml6DmlYjnmoTkuIrmuLggJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTkxCittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBuZXcgcm9vdCBjb21taXQiCittc2dzdHIgIuS4jeiDveWIm+W7uuaWsOeahOagueaPkOS6pCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSB3aXRoIGJyYW5jaCIKK21zZ3N0ciAiJyVzJ++8muWPqumcgOimgeS4juWIhuaUr+eahOS4gOS4quWQiOW5tuWfuue6vyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSIKK21zZ3N0ciAiJyVzJ++8muWPqumcgOimgeS4gOS4quWQiOW5tuWfuue6vyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0ICclcyciCittc2dzdHIgIuayoeacieaMh+WQkeS4gOS4quacieaViOeahOaPkOS6pCAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoL2NvbW1pdCAnJXMnIgorbXNnc3RyICLoh7Tlkb3plJnor6/vvJrml6DmraTliIbmlK8v5o+Q5LqkICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA2MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVmOiAlcyIKK21zZ3N0ciAi5rKh5pyJ6L+Z5qC355qE5byV55So77yaJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA3MworbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgdG8gYSByZXZpc2lvbiIKK21zZ3N0ciAi5peg5rOV5bCGIEhFQUQg6Kej5p6Q5Li65LiA5Liq54mI5pysIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTEKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICLml6Dms5UgYXV0b3N0YXNoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCBzdGFzaCByZXNwb25zZTogJyVzJyIKK21zZ3N0ciAi5oSP5aSW55qEIHN0YXNoIOWTjeW6lO+8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Li6ICclcycg5Yib5bu655uu5b2VIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICVzXG4iCittc2dzdHIgIuWIm+W7uuS6hiBhdXRvc3Rhc2jvvJolc1xuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjYKK21zZ2lkICJjb3VsZCBub3QgcmVzZXQgLS1oYXJkIgorbXNnc3RyICLml6Dms5UgcmVzZXQgLS1oYXJkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMzUKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICLor7fmj5DkuqTmiJbotK7ol4/kv67mlLnjgIIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3dpdGNoIHRvICVzIgorbXNnc3RyICLml6Dms5XliIfmjaLliLAgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE4MAorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkhFQUQg5piv5pyA5paw55qE44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZS5cbiIKK21zZ3N0ciAi5b2T5YmN5YiG5pSvICVzIOaYr+acgOaWsOeahOOAglxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxOTAKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICJIRUFEIOaYr+acgOaWsOeahO+8jOW8uuWItuWPmOWfuuOAgiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuXG4iCittc2dzdHIgIuW9k+WJjeWIhuaUryAlcyDmmK/mnIDmlrDnmoTvvIzlvLrliLblj5jln7rjgIJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjAwCittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgInByZS1yZWJhc2Ug6ZKp5a2Q5ouS57ud5LqG5Y+Y5Z+65pON5L2c44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyB0byAlczpcbiIKK21zZ3N0ciAi5YiwICVzIOeahOWPmOabtO+8mlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIgorbXNnc3RyICLku44gJXMg5YiwICVzIOeahOWPmOabtO+8mlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uXG4iCittc2dzdHIgIummluWFiO+8jOWbnumAgOWktOaMh+mSiOS7peS+v+WcqOWFtuS4iumHjeaUvuaCqOeahOW3peS9nC4uLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyNDQKK21zZ2lkICJDb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIuaXoOazleWIhuemu+WktOaMh+mSiCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICVzIHRvICVzLlxuIgorbXNnc3RyICLlv6vov5sgJXMg5YiwICVz44CCXG4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MzMKK21zZ2lkICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKK21zZ3N0ciAiZ2l0IHJlY2VpdmUtcGFjayA85LuT5bqT55uu5b2VPiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4MjEKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeVxuIgorImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisid2l0aCB3aGF0IHlvdSBwdXNoZWQsIGFuZCB3aWxsIHJlcXVpcmUgJ2dpdCByZXNldCAtLWhhcmQnIHRvIG1hdGNoXG4iCisidGhlIHdvcmsgdHJlZSB0byBIRUFELlxuIgorIlxuIgorIllvdSBjYW4gc2V0IHRoZSAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvXG4iCisiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWVcbiIKKyJvdGhlciB3YXkuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXRcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyLpu5jorqTnpoHmraLmm7TmlrDpnZ7nuq/ku5PlupPnmoTlvZPliY3liIbmlK/vvIzlm6DkuLrmgqjmjqjpgIHnmoTlhoXlrrnlsIblr7zoh7TntKLlvJXlkozlt6XkvZzljLpcbiIKKyLkuI3kuIDoh7TvvIzlubbkuJTlsIbpnIDopoHmiafooYwgJ2dpdCByZXNldCAtLWhhcmQnIOWwhuW3peS9nOWMuuWMuemFjeWIsCBIRUFE44CCXG4iCisiXG4iCisi5oKo5Y+v5Lul5Zyo6L+c56iL5LuT5bqT5Lit6K6+572uICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyDphY3nva7lj5jph4/kuLpcbiIKKyInaWdub3JlJyDmiJYgJ3dhcm4nIOS7peWFgeiuuOaOqOmAgeWIsOW9k+WJjeWIhuaUr+OAgueEtuiAjOS4jeaOqOiNkOi/meS5iOWBmu+8jOmZpOmdnuaCqFxuIgorIueUqOafkOenjeaWueW8j+WwhuWFtuW3peS9nOWMuuabtOaWsOiHs+aCqOaOqOmAgeeahOeKtuaAgeOAglxuIgorIlxuIgorIuiLpeimgeWxj+iUveatpOS/oeaBr+S4lOS/neaMgem7mOiupOihjOS4uu+8jOiuvue9riAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCdcbiIKKyLphY3nva7lj5jph4/kuLogJ3JlZnVzZSfjgIIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODQxCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIGRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBkZW5pZWQsIGJlY2F1c2UgdGhlIG5leHRcbiIKKyInZ2l0IGNsb25lJyB3b24ndCByZXN1bHQgaW4gYW55IGZpbGUgY2hlY2tlZCBvdXQsIGNhdXNpbmcgY29uZnVzaW9uLlxuIgorIlxuIgorIllvdSBjYW4gc2V0ICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvXG4iCisiJ3dhcm4nIG9yICdpZ25vcmUnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBkZWxldGluZyB0aGVcbiIKKyJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlLCB5b3UgY2FuIHNldCBpdCB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyLpu5jorqTnpoHmraLliKDpmaTlvZPliY3liIbmlK/vvIzlm6DkuLrkuIvkuIDmrKEgJ2dpdCBjbG9uZScg5bCG5LiN5Lya5qOA5Ye65Lu75L2V5paH5Lu277yMXG4iCisi5a+86Ie05Zuw5oOR44CCXG4iCisiXG4iCisi5oKo5Y+v5Lul5Zyo6L+c56iL5LuT5bqT5Lit6K6+572uICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyDphY3nva7lj5jph4/kuLpcbiIKKyInd2FybifvvIjmmL7npLrorablkYrkv6Hmga/vvInmiJYgJ2lnbm9yZSfvvIjlv73nlaXorablkYrkv6Hmga/vvInku6XlhYHorrjliKDpmaTlvZPliY3liIbmlK/jgIJcbiIKKyJcbiIKKyLoi6XopoHlsY/olL3mraTkv6Hmga/vvIzmgqjlj6/ku6Xorr7nva7lroPkuLogJ3JlZnVzZSfjgIIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTkzOAorbXNnaWQgInF1aWV0IgorbXNnc3RyICLpnZnpu5jmqKHlvI8iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MgorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIgorbXNnc3RyICLmgqjlv4XpobvmjIflrprkuIDkuKrnm67lvZXjgIIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0aW1lPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT085pe26Ze0Pl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTzml7bpl7Q+XSBbLS0iCisicmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gWy0tYWxsXSA85byVIgorIueUqD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjIKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gPOW8lSIKKyLnlKg+Li4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjI1Cittc2dpZCAiZ2l0IHJlZmxvZyBleGlzdHMgPHJlZj4iCittc2dzdHIgImdpdCByZWZsb2cgZXhpc3RzIDzlvJXnlKg+IgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU2OCBidWlsdGluL3JlZmxvZy5jOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDkuKrmnInmlYjnmoTml7bpl7TmiLMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgcmVhY2hhYmxlIG9iamVjdHMuLi4iCittc2dzdHIgIuato+WcqOagh+iusOWPr+i+vuWvueixoS4uLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIG5vd2hlcmUhIgorbXNnc3RyICIlcyDmjIflkJHkuI3lrZjlnKjvvIEiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6Njk2Cittc2dpZCAibm8gcmVmbG9nIHNwZWNpZmllZCB0byBkZWxldGUiCittc2dzdHIgIuacquaMh+WumuimgeWIoOmZpOeahOW8leeUqOaXpeW/lyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmVmbG9nOiAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5Liq5byV55So5pel5b+X77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlZmxvZyBmb3IgJyVzJyIKK21zZ3N0ciAi5rKh5pyJICclcycg55qE5byV55So5pel5b+XIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZiBmb3JtYXQ6ICVzIgorbXNnc3RyICLml6DmlYjnmoTlvJXnlKjmoLzlvI/vvJolcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NjUKK21zZ2lkICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorbXNnc3RyICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTgKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgYWRkIFstdCA85YiG5pSvPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA85ZCN56ewPiA85Zyw5Z2APiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOSBidWlsdGluL3JlbW90ZS5jOjM5Cittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgImdpdCByZW1vdGUgcmVuYW1lIDzml6flkI3np7A+IDzmlrDlkI3np7A+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NDQKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDzlkI3np7A+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIxIGJ1aWx0aW4vcmVtb3RlLmM6NDkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDzlkI3np7A+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA85YiG5pSvPikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA85ZCN56ewPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMworbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA85ZCN56ewPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNAorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg857uEPiB8IDzov5znqIs+KS4uLl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjUKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA85ZCN56ewPiA85YiG5pSvPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNiBidWlsdGluL3JlbW90ZS5jOjc1Cittc2dpZCAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA85ZCN56ewPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNyBidWlsdGluL3JlbW90ZS5jOjgwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPOWQjeensD4gPOaWsOeahOWcsOWdgD4gWzzml6fnmoTlnLDlnYA+XSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOCBidWlsdGluL3JlbW90ZS5jOjgxCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDzlkI3np7A+IDzmlrDnmoTlnLDlnYA+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI5IGJ1aWx0aW4vcmVtb3RlLmM6ODIKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPOWQjeensD4gPOWcsOWdgD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzQKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs86YCJ6aG5Pl0gPOWQjeensD4gPOWcsOWdgD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTQKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDzlkI3np7A+IDzliIbmlK8+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU1Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA85ZCN56ewPiA85YiG5pSvPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MAorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2hvdyBbPOmAiemhuT5dIDzlkI3np7A+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY1Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWzzpgInpobk+XSA85ZCN56ewPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MAorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBbPOmAiemhuT5dIFs857uEPiB8IDzov5znqIs+XS4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAi5pu05pawICVzIOS4rSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzEKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3Ig6YCJ6aG55Y2x6Zmp5LiU6L+H5pe277yM6K+35L2/55SoIC0tbWlycm9yPWZldGNoXG4iCisiXHQg5oiWIC0tbWlycm9yPXB1c2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq55+l55qE6ZWc5YOP5Y+C5pWw77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY0Cittc2dpZCAiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIKK21zZ3N0ciAi5oqT5Y+W6L+c56iL55qE5YiG5pSvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NgorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgIuaKk+WPluaXtuWvvOWFpeaJgOacieeahOagh+etvuWSjOWFs+iBlOWvueixoSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjkKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgIuaIluS4jeaKk+WPluS7u+S9leagh+etvu+8iC0tbm8tdGFnc++8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEKK21zZ2lkICJicmFuY2goZXMpIHRvIHRyYWNrIgorbXNnc3RyICLot5/ouKrnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcyCittc2dpZCAibWFzdGVyIGJyYW5jaCIKK21zZ3N0ciAi5Li757q/5YiG5pSvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3NAorbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICLmiorov5znqIvorr7nva7kuLrnlKjku6XmjqjpgIHmiJbmipPlj5bnmoTplZzlg48iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg2Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAi5oyH5a6a5LiA5LiqIG1hc3RlciDliIbmlK/lubbkvb/nlKggLS1taXJyb3Ig6YCJ6aG55rKh5pyJ5oSP5LmJIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4OAorbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgIuaMh+Wumuimgei3n+i4queahOWIhuaUr+WPquWcqOS4juiOt+WPlumVnOWDj+WQjOaXtuS9v+eUqOaJjeacieaEj+S5iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTUgYnVpbHRpbi9yZW1vdGUuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi6L+c56iLICVzIOW3sue7j+WtmOWcqOOAgiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTkgYnVpbHRpbi9yZW1vdGUuYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDkuKrmnInmlYjnmoTov5znqIvlkI3np7AiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAi5peg5rOV6K6+572uIG1hc3RlciAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIKK21zZ3N0ciAi5peg5rOV5b6X5Yiw5byV55So6KeE5qC8ICVzIOeahOiOt+WPluWIl+ihqCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NTMgYnVpbHRpbi9yZW1vdGUuYzo0NjEKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICLvvIjljLnphY3vvIkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDY1Cittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIu+8iOWIoOmZpO+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICLkuI3og73orr7nva4gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAlcyBjb25maWd1cmF0aW9uIHJlbW90ZS5wdXNoRGVmYXVsdCBpbjpcbiIKKyJcdCVzOiVkXG4iCisibm93IG5hbWVzIHRoZSBub24tZXhpc3RlbnQgcmVtb3RlICclcyciCittc2dzdHIgIiIKKyLphY3nva7vvIglc++8iXJlbW90ZS5wdXNoRGVmYXVsdCDkvY3kuo7vvJpcbiIKKyJcdCVzOiVkXG4iCisi546w5Zyo5Zyo5Li65LiN5a2Y5Zyo55qE6L+c56iL5ZCNICclcycg5ZG95ZCNIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY4OSBidWlsdGluL3JlbW90ZS5jOjgzMiBidWlsdGluL3JlbW90ZS5jOjk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZTogJyVzJyIKK21zZ3N0ciAi5rKh5pyJ5q2k6L+c56iL5LuT5bqT77yaJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIuS4jeiDvemHjeWRveWQjemFjee9ruWwj+iKgiAnJXMnIOWIsCAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlZnNwZWNcbiIKKyJcdCVzXG4iCisiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iCittc2dzdHIgIiIKKyLmsqHmnInmm7TmlrDpnZ7pu5jorqTnmoTojrflj5blvJXnlKjop4TmoLxcbiIKKyJcdCVzXG4iCisiXHTlpoLmnpzlv4XopoHor7fmiYvliqjmm7TmlrDphY3nva7jgIIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICLliKDpmaQgJyVzJyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICLliJvlu7ogJyVzJyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODc2Cittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIuazqOaEj++8mnJlZi9yZW1vdGVzIOWxgue6p+S5i+WklueahOS4gOS4quWIhuaUr+acquiiq+enu+mZpOOAguimgeWIoOmZpOWug++8jOS9v+eUqO+8miIKK21zZ3N0clsxXSAi5rOo5oSP77yacmVmL3JlbW90ZXMg5bGC57qn5LmL5aSW55qE5LiA5Lqb5YiG5pSv5pyq6KKr56e76Zmk44CC6KaB5Yig6Zmk5a6D5Lus77yM5L2/55So77yaIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciCittc2dzdHIgIuS4jeiDveenu+mZpOmFjee9ruWwj+iKgiAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5MworIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiDmlrDnmoTvvIjkuIvkuIDmrKHojrflj5blsIblrZjlgqjkuo4gcmVtb3Rlcy8lc++8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OTYKK21zZ2lkICIgdHJhY2tlZCIKK21zZ3N0ciAiIOW3sui3n+i4qiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OTgKK21zZ2lkICIgc3RhbGUgKHVzZSAnZ2l0IHJlbW90ZSBwcnVuZScgdG8gcmVtb3ZlKSIKK21zZ3N0ciAiIOi/h+aXtu+8iOS9v+eUqCAnZ2l0IHJlbW90ZSBwcnVuZScg5p2l56e76Zmk77yJIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDAKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICLml6DmlYjnmoQgYnJhbmNoLiVzLm1lcmdl77yM5LiN6IO95Y+Y5Z+65Yiw5LiA5Liq5Lul5LiK55qE5YiG5pSvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5IG9udG8gcmVtb3RlICVzIgorbXNnc3RyICLkuqTkupLlvI/lj5jln7rliLDov5znqIsgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgKHdpdGggbWVyZ2VzKSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAi5Lqk5LqS5byP5Y+Y5Z+677yI5ZCr5ZCI5bm25o+Q5Lqk77yJ5Yiw6L+c56iLICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAi5Y+Y5Z+65Yiw6L+c56iLICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiIOS4jui/nOeoiyAlcyDlkIjlubYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIuS4jui/nOeoiyAlcyDlkIjlubYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlLSpzICAgIGFuZCB3aXRoIHJlbW90ZSAlc1xuIgorbXNnc3RyICIlLSpzICAgIOS7peWPiuWSjOi/nOeoiyAlc1xuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMDgKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgIuWIm+W7uiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTExCittc2dpZCAiZGVsZXRlIgorbXNnc3RyICLliKDpmaQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTExNQorbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgIuacgOaWsCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE4Cittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAi5Y+v5b+r6L+bIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjEKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAi5pys5Zyw5bey6L+H5pe2IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMg5by65Yi25o6o6YCB6IezICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIOaOqOmAgeiHsyAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIOW8uuWItuaOqOmAgeiHsyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMg5o6o6YCB6IezICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDYKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAi5LiN5p+l6K+i6L+c56iLIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiog6L+c56iLICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIOiOt+WPluWcsOWdgO+8miVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzUgYnVpbHRpbi9yZW1vdGUuYzoxMjUxIGJ1aWx0aW4vcmVtb3RlLmM6MTM5MAorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIo5pegIFVSTCkiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gJzonIHNob3VsZCBhbGlnbgorIy4gd2l0aCB0aGUgb25lIGluICIgRmV0Y2ggVVJMOiAlcyIKKyMuIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI0OSBidWlsdGluL3JlbW90ZS5jOjEyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIgIOaOqOmAgeWcsOWdgO+8miVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTMgYnVpbHRpbi9yZW1vdGUuYzoxMjU1IGJ1aWx0aW4vcmVtb3RlLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICBIRUFEIOWIhuaUr++8miVzIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MworbXNnaWQgIihub3QgcXVlcmllZCkiCittc2dzdHIgIu+8iOacquafpeivou+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU1Cittc2dpZCAiKHVua25vd24pIgorbXNnc3RyICLvvIjmnKrnn6XvvIkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIgIEhFQUQg5YiG5pSv77yI6L+c56iLIEhFQUQg5qih57OK77yM5Y+v6IO95piv5LiL5YiX5Lit55qE5LiA5Liq77yJ77yaXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIOi/nOeoi+WIhuaUr++8miVzIgorbXNnc3RyWzFdICIgIOi/nOeoi+WIhuaUr++8miVzIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NCBidWlsdGluL3JlbW90ZS5jOjEzMDAKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIu+8iOeKtuaAgeacquafpeivou+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgzCittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAg5Li6ICdnaXQgcHVsbCcg6YWN572u55qE5pys5Zyw5YiG5pSv77yaIgorbXNnc3RyWzFdICIgIOS4uiAnZ2l0IHB1bGwnIOmFjee9rueahOacrOWcsOWIhuaUr++8miIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjkxCittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiICDmnKzlnLDlvJXnlKjlsIblnKggJ2dpdCBwdXNoJyDml7booqvplZzlg48iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5NworIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICDkuLogJ2dpdCBwdXNoJyDphY3nva7nmoTmnKzlnLDlvJXnlKglc++8miIKK21zZ3N0clsxXSAiICDkuLogJ2dpdCBwdXNoJyDphY3nva7nmoTmnKzlnLDlvJXnlKglc++8miIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzE4Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICLmoLnmja7ov5znqIvorr7nva4gcmVmcy9yZW1vdGVzLzzlkI3np7A+L0hFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyMAorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgIuWIoOmZpCByZWZzL3JlbW90ZXMvPOWQjeensD4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzM1Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAi5peg5rOV56Gu5a6a6L+c56iLIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMzNworbXNnaWQgIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6IgorbXNnc3RyICLlpJrkuKrov5znqIsgSEVBRCDliIbmlK/jgILor7fmmI7noa7lnLDpgInmi6nkuIDkuKrnlKjlkb3ku6TvvJoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICLml6Dms5XliKDpmaQgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjlvJXnlKjvvJolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAi5LiN6IO96K6+572uICVzIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMg5bCG5oiQ5Li65oKs56m654q25oCB77yBIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NgorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyDlt7LmiJDkuLrmgqznqbrnirbmgIHvvIEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICLkv67liaogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM4NworIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICJVUkzvvJolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFvlsIbliKDpmaRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3BydW5lZF0gJXMiCittc2dzdHIgIiAqIFvlt7LliKDpmaRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTEKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICLmipPlj5blkI7muIXpmaTov5znqIsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUxNCBidWlsdGluL3JlbW90ZS5jOjE1NjggYnVpbHRpbi9yZW1vdGUuYzoxNjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIuayoeacieatpOi/nOeoiyAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzAKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICLmt7vliqDliIbmlK8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNworbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgIuacquaMh+Wumui/nOeoiyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTU0Cittc2dpZCAicXVlcnkgcHVzaCBVUkxzIHJhdGhlciB0aGFuIGZldGNoIFVSTHMiCittc2dzdHIgIuafpeivouaOqOmAgSBVUkwg5Zyw5Z2A77yM6ICM6Z2e6I635Y+WIFVSTCDlnLDlnYAiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU1NgorbXNnaWQgInJldHVybiBhbGwgVVJMcyIKK21zZ3N0ciAi6L+U5Zue5omA5pyJIFVSTCDlnLDlnYAiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBVUkxzIGNvbmZpZ3VyZWQgZm9yIHJlbW90ZSAnJXMnIgorbXNnc3RyICLmsqHmnInnu5nov5znqIvku5PlupMgJyVzJyDorr7lrpogVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MTAKK21zZ2lkICJtYW5pcHVsYXRlIHB1c2ggVVJMcyIKK21zZ3N0ciAi5pON5L2c5o6o6YCBIFVSTFMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxMgorbXNnaWQgImFkZCBVUkwiCittc2dzdHIgIua3u+WKoCBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxNAorbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICLliKDpmaQgVVJMUyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjIxCittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWFkZCAtLWRlbGV0ZSDml6DmhI/kuYkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgIuaXoOaViOeahOaXpyBVUkwg5Yy56YWN5qih54mI77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgIuacquaJvuWIsOatpCBVUkzvvJolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjcwCittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICLlsIbkuI3kvJrliKDpmaTmiYDmnInpnZ7mjqjpgIEgVVJMIOWcsOWdgCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZXBhY2sgWzzpgInpobk+XSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOAorbXNnaWQgIiIKKyJJbmNyZW1lbnRhbCByZXBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBiaXRtYXAgaW5kZXhlcy4gIFVzZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9yIGRpc2FibGUgdGhlIHBhY2sud3JpdGViaXRtYXBzIGNvbmZpZ3VyYXRpb24uIgorbXNnc3RyICIiCisi5aKe6YePIHJlcGFjayDlkowgYml0bWFwIOe0ouW8leS4jeWFvOWuueOAgiAg5L2/55SoIC0tbm8td3JpdGUtYml0bWFwLWluZGV4XG4iCisi5oiW56aB55SoIHBhY2sud3JpdGViaXRtYXBzIOmFjee9ruOAgiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTEKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICLml6Dms5XlvIDlp4sgcGFjay1vYmplY3RzIOadpemHjeaWsOaJk+WMhSBwcm9taXNvciDlr7nosaEiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMwIGJ1aWx0aW4vcmVwYWNrLmM6NDE2Cittc2dpZCAicmVwYWNrOiBFeHBlY3RpbmcgZnVsbCBoZXggb2JqZWN0IElEIGxpbmVzIG9ubHkgZnJvbSBwYWNrLW9iamVjdHMuIgorbXNnc3RyICJyZXBhY2vvvJrmnJ/mnJvmnaXoh6ogcGFjay1vYmplY3RzIOeahOWujOaVtOWNgeWFrei/m+WItuWvueixoSBJROOAgiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyNTQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAi5peg5rOV5a6M5oiQIHBhY2stb2JqZWN0cyDmnaXph43mlrDmiZPljIUgcHJvbWlzb3Ig5a+56LGhIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5MgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICLmiYDmnInlhoXlrrnmiZPljIXliLDkuIDkuKrljIXmlofku7bkuK0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk0Cittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAi5ZKMIC1hIOebuOWQjO+8jOW5tuWwhuS4jeWPr+i+vueahOWvueixoeiuvuS4uuadvuaVo+WvueixoSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTcKK21zZ2lkICJyZW1vdmUgcmVkdW5kYW50IHBhY2tzLCBhbmQgcnVuIGdpdC1wcnVuZS1wYWNrZWQiCittc2dzdHIgIuWIoOmZpOWkmuS9meeahOWMhe+8jOi/kOihjCBnaXQtcHJ1bmUtcGFja2VkIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5OQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICLlkJEgZ2l0LXBhY2stb2JqZWN0cyDkvKDpgJLlj4LmlbAgLS1uby1yZXVzZS1kZWx0YSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDEKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIuWQkSBnaXQtcGFjay1vYmplY3RzIOS8oOmAkuWPguaVsCAtLW5vLXJldXNlLW9iamVjdCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDMKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgIuS4jei/kOihjCBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwNgorbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICLlkJEgZ2l0LXBhY2stb2JqZWN0cyDkvKDpgJLlj4LmlbAgLS1sb2NhbCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDgKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgIuWGmSBiaXRtYXAg57Si5byVIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMAorbXNnaWQgInBhc3MgLS1kZWx0YS1pc2xhbmRzIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIuWQkSBnaXQtcGFjay1vYmplY3RzIOS8oOmAkuWPguaVsCAtLWRlbHRhLWlzbGFuZHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzExCittc2dpZCAiYXBwcm94aWRhdGUiCittc2dzdHIgIui/keS8vOaXpeacnyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTIKK21zZ2lkICJ3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzIgorbXNnc3RyICLkvb/nlKggLUHvvIzkuI3opoHlsIbml6nkuo7nu5nlrprml7bpl7TnmoTlr7nosaHov4fmnJ8iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE0Cittc2dpZCAid2l0aCAtYSwgcmVwYWNrIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIuS9v+eUqCAtYSDvvIzph43mlrDlr7nkuI3lj6/ovr7lr7nosaHmiZPljIUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE2Cittc2dpZCAic2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICLnlKjkuo7lop7ph4/ljovnvKnnmoTnqpflj6PlgLwiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE3IGJ1aWx0aW4vcmVwYWNrLmM6MzIzCittc2dpZCAiYnl0ZXMiCittc2dzdHIgIuWtl+iKgiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTgKK21zZ2lkICJzYW1lIGFzIHRoZSBhYm92ZSwgYnV0IGxpbWl0IG1lbW9yeSBzaXplIGluc3RlYWQgb2YgZW50cmllcyBjb3VudCIKK21zZ3N0ciAi5ZKM5LiK6Z2i55qE55u45Ly877yM5L2G6ZmQ5Yi25YaF5a2Y5aSn5bCP6ICM6Z2e5p2h55uu5pWwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMAorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBkZWx0YSBkZXB0aCIKK21zZ3N0ciAi6ZmQ5Yi25pyA5aSn5aKe6YeP5rex5bqmIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMgorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyIKK21zZ3N0ciAi6ZmQ5Yi25pyA5aSn57q/56iL5pWwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICLmr4/kuKrljIXmlofku7bnmoTmnIDlpKflsLrlr7giCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI2Cittc2dpZCAicmVwYWNrIG9iamVjdHMgaW4gcGFja3MgbWFya2VkIHdpdGggLmtlZXAiCittc2dzdHIgIuWvueagh+iusOS4uiAua2VlcCDnmoTljIXkuK3nmoTlr7nosaHph43mlrDmiZPljIUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI4Cittc2dpZCAiZG8gbm90IHJlcGFjayB0aGlzIHBhY2siCittc2dzdHIgIuS4jeimgeWvueivpeWMheaWh+S7tumHjeaWsOaJk+WMhSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMzgKK21zZ2lkICJjYW5ub3QgZGVsZXRlIHBhY2tzIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICLkuI3og73liKDpmaTnj43lk4Hku5PlupPkuK3nmoTmiZPljIXmlofku7YiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzQyCittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtQSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUg5ZKMIC1BIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0MjUKK21zZ2lkICJOb3RoaW5nIG5ldyB0byBwYWNrLiIKK21zZ3N0ciAi5rKh5pyJ5paw55qE6KaB5omT5YyF44CCIgorCisjOiBidWlsdGluL3JlcGFjay5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogU29tZSBwYWNrcyBpbiB1c2UgaGF2ZSBiZWVuIHJlbmFtZWQgYnlcbiIKKyJXQVJOSU5HOiBwcmVmaXhpbmcgb2xkLSB0byB0aGVpciBuYW1lLCBpbiBvcmRlciB0b1xuIgorIldBUk5JTkc6IHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGVcbiIKKyJXQVJOSU5HOiBmaWxlLiAgQnV0IHRoZSBvcGVyYXRpb24gZmFpbGVkLCBhbmQgdGhlXG4iCisiV0FSTklORzogYXR0ZW1wdCB0byByZW5hbWUgdGhlbSBiYWNrIHRvIHRoZWlyXG4iCisiV0FSTklORzogb3JpZ2luYWwgbmFtZXMgYWxzbyBmYWlsZWQuXG4iCisiV0FSTklORzogUGxlYXNlIHJlbmFtZSB0aGVtIGluICVzIG1hbnVhbGx5OlxuIgorbXNnc3RyICIiCisi6K2m5ZGK77ya5Li65LqG5bCG5YyF5paH5Lu25pu/5o2i5Li65paw54mI5pys77yM5LiA5Lqb5L2/55So5Lit55qE5YyF5bey57uPXG4iCisi6K2m5ZGK77ya6YCa6L+H5re75YqgIG9sZC0g5YmN57yA55qE5pa55byP6YeN5ZG95ZCN44CC5L2G5piv5pON5L2c5aSx6LSl77yMXG4iCisi6K2m5ZGK77ya5bm25LiU5bCd6K+V6YeN5ZG95ZCN5pS55Zue5Y6f5pyJ5paH5Lu25ZCN55qE5pON5L2c5Lmf5aSx6LSl44CCXG4iCisi6K2m5ZGK77ya6K+35omL5Yqo5bCGICVzIOS4i+eahOi/meS6m+aWh+S7tumHjeWRveWQje+8mlxuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICclcyciCittc2dzdHIgIuWIoOmZpCAnJXMnIOWksei0pSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPOWvueixoT4gPOabv+aNoueJqT4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDzlr7nosaE+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNAorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPOaPkOS6pD4gWzzniLbmj5DkuqQ+Li4uXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjUKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tY29udmVydC1ncmFmdC1maWxlIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tY29udmVydC1ncmFmdC1maWxlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNgorbXNnaWQgImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgcmVwbGFjZSAtZCA85a+56LGhPi4uLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcKK21zZ2lkICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFstbCBbPHBhdHRlcm4+XV0iCittc2dzdHIgImdpdCByZXBsYWNlIFstLWZvcm1hdD085qC85byPPl0gWy1sIFs85qih5byPPl1dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCByZXBsYWNlIGZvcm1hdCAnJXMnXG4iCisidmFsaWQgZm9ybWF0cyBhcmUgJ3Nob3J0JywgJ21lZGl1bScgYW5kICdsb25nJyIKK21zZ3N0ciAiIgorIuaXoOaViOeahOabv+aNouagvOW8jyAnJXMnXG4iCisi5pyJ5pWI55qE5qC85byP5pyJICdzaG9ydCfjgIEnbWVkaXVtJyDlkowgJ2xvbmcnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBub3QgZm91bmQiCittc2dzdHIgIuacquWPkeeOsOabv+aNouW8leeUqCAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZXBsYWNlIHJlZiAnJXMnIgorbXNnc3RyICLlt7LliKDpmaTmm7/mjaLlvJXnlKggJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVmIG5hbWUiCittc2dzdHIgIiclcycg5LiN5piv5LiA5Liq5pyJ5pWI55qE5byV55So5ZCNIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi5pu/5o2i5byV55SoICclcycg5bey57uP5a2Y5ZyoIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk9iamVjdHMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlLlxuIgorIiclcycgcG9pbnRzIHRvIGEgcmVwbGFjZWQgb2JqZWN0IG9mIHR5cGUgJyVzJ1xuIgorIndoaWxlICclcycgcG9pbnRzIHRvIGEgcmVwbGFjZW1lbnQgb2JqZWN0IG9mIHR5cGUgJyVzJy4iCittc2dzdHIgIiIKKyLlr7nosaHlv4XpobvlsZ7kuo7lkIzkuIDnsbvlnovjgIJcbiIKKyInJXMnIOaMh+WQkSAnJXMnIOexu+Wei+eahOabv+aNouWvueixoVxuIgorIuiAjCAnJXMnIOaMh+WQkSAnJXMnIOexu+Wei+eahOabv+aNouWvueixoeOAgiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICLml6Dms5XkuLrlhpnlhaXmiZPlvIAgJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0MgorbXNnaWQgImNhdC1maWxlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgImNhdC1maWxlIOaKpeWRiuWksei0pSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICLml6Dms5XkuLror7vlj5bmiZPlvIAgJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3MgorbXNnaWQgInVuYWJsZSB0byBzcGF3biBta3RyZWUiCittc2dzdHIgIuaXoOazleWQr+WKqCBta3RyZWUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3NgorbXNnaWQgInVuYWJsZSB0byByZWFkIGZyb20gbWt0cmVlIgorbXNnc3RyICLml6Dms5Xku44gbWt0cmVlIOivu+WPliIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjg1Cittc2dpZCAibWt0cmVlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgIm1rdHJlZSDmiqXlkYrlpLHotKUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4OQorbXNnaWQgIm1rdHJlZSBkaWQgbm90IHJldHVybiBhbiBvYmplY3QgbmFtZSIKK21zZ3N0ciAibWt0cmVlIOayoeaciei/lOWbnuS4gOS4quWvueixoeWQjSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmc3RhdCAlcyIKK21zZ3N0ciAi5peg5rOV5a+5ICVzIOaJp+ihjCBmc3RhdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzAzCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG9iamVjdCB0byBkYXRhYmFzZSIKK21zZ3N0ciAi5peg5rOV5ZCR5pWw5o2u5bqT5YaZ5YWl5a+56LGhIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjIgYnVpbHRpbi9yZXBsYWNlLmM6Mzc4IGJ1aWx0aW4vcmVwbGFjZS5jOjQyNAorIzogYnVpbHRpbi9yZXBsYWNlLmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjnmoTlr7nosaHlkI3vvJonJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBvYmplY3QgdHlwZSBmb3IgJXMiCittc2dzdHIgIuaXoOazleW+l+WIsCAlcyDnmoTlr7nosaHnsbvlnosiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM0MgorbXNnaWQgImVkaXRpbmcgb2JqZWN0IGZpbGUgZmFpbGVkIgorbXNnc3RyICLnvJbovpHlr7nosaHmlofku7blpLHotKUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICLmlrDlr7nosaHlkozml6flr7nosaHnm7jlkIzvvJonJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIGFzIGEgY29tbWl0IgorbXNnc3RyICLml6Dms5XlsIYgJXMg6Kej5p6Q5Li65LiA5Liq5o+Q5LqkIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICLmj5DkuqQgJyVzJyDkuK3lkKvmnInmjZ/lnY/nmoTlkIjlubbmoIfnrb4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgIuaPkOS6pCAnJXMnIOS4reWQq+acieagvOW8j+mUmeivr+eahOWQiOW5tuagh+etviIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcmlnaW5hbCBjb21taXQgJyVzJyBjb250YWlucyBtZXJnZXRhZyAnJXMnIHRoYXQgaXMgZGlzY2FyZGVkOyB1c2UgLS1lZGl0ICIKKyJpbnN0ZWFkIG9mIC0tZ3JhZnQiCittc2dzdHIgIuWOn+Wni+aPkOS6pCAnJXMnIOWMheWQq+W3sue7j+S4ouW8g+eahOWQiOW5tuagh+etviAnJXMn77yM5L2/55SoIC0tZWRpdCDku6Pmm78gLS1ncmFmdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBvcmlnaW5hbCBjb21taXQgJyVzJyBoYXMgYSBncGcgc2lnbmF0dXJlIgorbXNnc3RyICLljp/lp4vmj5DkuqQgJyVzJyDkuK3mnInkuIDkuKogZ3BnIOetvuWQjSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDcwCittc2dpZCAidGhlIHNpZ25hdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHJlcGxhY2VtZW50IGNvbW1pdCEiCittc2dzdHIgIuWcqOabv+aNoueahOaPkOS6pOS4reetvuWQjeWwhuiiq+enu+mZpO+8gSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSByZXBsYWNlbWVudCBjb21taXQgZm9yOiAnJXMnIgorbXNnc3RyICLkuI3og73kuLogJyVzJyDlhpnmm7/mjaLmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJncmFmdCBmb3IgJyVzJyB1bm5lY2Vzc2FyeSIKK21zZ3N0ciAi5a+5ICclcycg56e75qSN5rKh5pyJ5b+F6KaBIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGNvbW1pdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAi5paw5o+Q5Lqk5ZKM5pen55qE5LiA5qC377yaJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY29udmVydCB0aGUgZm9sbG93aW5nIGdyYWZ0KHMpOlxuIgorIiVzIgorbXNnc3RyICIiCisi5LiN6IO96L2s5o2i5LiL5YiX56e75qSN77yaXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0OAorbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICLliJflh7rmm7/mjaLnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0OQorbXNnaWQgImRlbGV0ZSByZXBsYWNlIHJlZnMiCittc2dzdHIgIuWIoOmZpOabv+aNoueahOW8leeUqCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUwCittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgIue8lui+keeOsOWtmOeahOWvueixoSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUxCittc2dpZCAiY2hhbmdlIGEgY29tbWl0J3MgcGFyZW50cyIKK21zZ3N0ciAi5L+u5pS55LiA5Liq5o+Q5Lqk55qE54i25o+Q5LqkIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTIKK21zZ2lkICJjb252ZXJ0IGV4aXN0aW5nIGdyYWZ0IGZpbGUiCittc2dzdHIgIui9rOaNoueOsOWtmOeahOenu+akjeaWh+S7tiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUzCittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAi5aaC5p6c5a2Y5Zyo5YiZ5pu/5o2i5byV55SoIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTUKK21zZ2lkICJkbyBub3QgcHJldHR5LXByaW50IGNvbnRlbnRzIGZvciAtLWVkaXQiCittc2dzdHIgIuS4jeimgeS4uiAtLWVkaXQg5pON5L2c576O6KeC5pi+56S65YaF5a65IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTYKK21zZ2lkICJ1c2UgdGhpcyBmb3JtYXQiCittc2dzdHIgIuS9v+eUqOatpOagvOW8jyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTY5Cittc2dpZCAiLS1mb3JtYXQgY2Fubm90IGJlIHVzZWQgd2hlbiBub3QgbGlzdGluZyIKK21zZ3N0ciAi5LiN5YiX5Ye65pe25LiN6IO95L2/55SoIC0tZm9ybWF0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NzcKK21zZ2lkICItZiBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gd3JpdGluZyBhIHJlcGxhY2VtZW50IgorbXNnc3RyICLlj6rmnInlhpnkuIDkuKrmm7/mjaLml7YgLWYg5omN5pyJ5oSP5LmJIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODEKK21zZ2lkICItLXJhdyBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1lZGl0IgorbXNnc3RyICItLXJhdyDlj6rmnInlkowgLS1lZGl0IOWFseeUqOaJjeacieaEj+S5iSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTg3Cittc2dpZCAiLWQgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICItZCDpnIDopoHoh7PlsJHkuIDkuKrlj4LmlbAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU5MworbXNnaWQgImJhZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICLplJnor6/nmoTlj4LmlbDkuKrmlbAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU5OQorbXNnaWQgIi1lIG5lZWRzIGV4YWN0bHkgb25lIGFyZ3VtZW50IgorbXNnc3RyICItZSDpnIDopoHkuJTku4XpnIDopoHkuIDkuKrlj4LmlbAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYwNQorbXNnaWQgIi1nIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWcg6ZyA6KaB6Iez5bCR5LiA5Liq5Y+C5pWwIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTEKK21zZ2lkICItLWNvbnZlcnQtZ3JhZnQtZmlsZSB0YWtlcyBubyBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUg5LiN5bim5Y+C5pWwIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTcKK21zZ2lkICJvbmx5IG9uZSBwYXR0ZXJuIGNhbiBiZSBnaXZlbiB3aXRoIC1sIgorbXNnc3RyICLlj6rog73kuLogLWwg5o+Q5L6b5LiA5Liq5qih5byPIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjEzCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBhdGg+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKK21zZ3N0ciAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPOi3r+W+hD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjYwCittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgIuWcqOe0ouW8leS4reazqOWGjOW5suWHgOeahOino+WGs+aWueahiCIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo3OQorbXNnaWQgIidnaXQgcmVyZXJlIGZvcmdldCcgd2l0aG91dCBwYXRocyBpcyBkZXByZWNhdGVkIgorbXNnc3RyICLmsqHmnInot6/lvoTnmoQgJ2dpdCByZXJlcmUgZm9yZ2V0JyDlt7Lnu4/ov4fml7YiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmIGZvciAnJXMnIgorbXNnc3RyICLml6Dms5XkuLogJyVzJyDnlJ/miJDlt67lvIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMgorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzzmj5DkuqQ+XSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gWzzmoJHlr7nosaE+XSBbLS1dIDzot6/lvoTooajovr7lvI8+Li4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstcV0gWy0tcGF0aHNwZWMtZnJvbS1maWxlIFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWzx0cmVlLWlzaD5dIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPOagkeWvueixoT5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0iCittc2dzdHIgImdpdCByZXNldCAtLXBhdGNoIFs85qCR5a+56LGhPl0gWy0tXSBbPOi3r+W+hOihqOi+vuW8jz4uLi5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAi5re35p2CIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJzb2Z0IgorbXNnc3RyICLova/mgKciCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImhhcmQiCittc2dzdHIgIuehrOaApyIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWVyZ2UiCittc2dzdHIgIuWQiOW5tiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAia2VlcCIKK21zZ3N0ciAi5L+d5oyBIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODIKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFELiIKK21zZ3N0ciAi5oKo5rKh5pyJ5LiA5Liq5pyJ5pWI55qEIEhFQUTjgIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4NAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgSEVBRC4iCittc2dzdHIgIuaXoOazleaJvuWIsCBIRUFEIOaMh+WQkeeahOagkeOAgiIKKworIzogYnVpbHRpbi9yZXNldC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICLml6Dms5Xmib7liLAgJXMg5oyH5ZCR55qE5qCR44CCIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJIRUFEIOeOsOWcqOS9jeS6jiAlcyIKKworIyAg6K+R6ICF77ya5rGJ5a2X5LmL6Ze05peg56m65qC877yM5pWF5Yig6ZmkJXPliY3lkI7nqbrmoLwKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAi5Zyo5ZCI5bm26L+H56iL5Lit5LiN6IO95YGaJXPph43nva7mk43kvZzjgIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTQgYnVpbHRpbi9zdGFzaC5jOjUyMCBidWlsdGluL3N0YXNoLmM6NTk1CisjOiBidWlsdGluL3N0YXNoLmM6NjE5Cittc2dpZCAiYmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycyIKK21zZ3N0ciAi5a6J6Z2Z5qih5byP77yM5Y+q5oql5ZGK6ZSZ6K+vIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk2Cittc2dpZCAicmVzZXQgSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgIumHjee9riBIRUFEIOWSjOe0ouW8lSIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NworbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAi5Y+q6YeN572uIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTkgYnVpbHRpbi9yZXNldC5jOjMwMQorbXNnaWQgInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiCittc2dzdHIgIumHjee9riBIRUFE44CB57Si5byV5ZKM5bel5L2c5Yy6IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzAzCittc2dpZCAicmVzZXQgSEVBRCBidXQga2VlcCBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICLph43nva4gSEVBRCDkvYbkv53lrZjmnKzlnLDlj5jmm7QiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDkKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAi5bCG5Yig6Zmk55qE6Lev5b6E5qCH6K6w5Li656iN5ZCO5re75YqgIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZXZpc2lvbi4iCittc2dzdHIgIuaXoOazleWwhiAnJXMnIOino+aekOS4uuS4gOS4quacieaViOeahOeJiOacrOOAgiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIuaXoOazleWwhiAnJXMnIOino+aekOS4uuS4gOS4quacieaViOeahOagkeWvueixoeOAgiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM2MAorbXNnaWQgIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggLS17aGFyZCxtaXhlZCxzb2Z0fSIKK21zZ3N0ciAiLS1wYXRjaCDkuI4gLS17aGFyZOOAgW1peGVk44CBc29mdH0g6YCJ6aG55LiN5YW85a65IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcwCittc2dpZCAiLS1taXhlZCB3aXRoIHBhdGhzIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnZ2l0IHJlc2V0IC0tIDxwYXRocz4nIGluc3RlYWQuIgorbXNnc3RyICItLW1peGVkIOW4pui3r+W+hOW3suW8g+eUqO+8jOiAjOaYr+eUqCAnZ2l0IHJlc2V0IC0tIDzot6/lvoQ+J+OAgiIKKworIyAg6K+R6ICF77ya5rGJ5a2X5LmL6Ze05peg56m65qC877yM5pWF5Yig6ZmkJXPliY3lkI7nqbrmoLwKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICLkuI3og73luKbot6/lvoTov5vooYwlc+mHjee9ruOAgiIKKworIyAg6K+R6ICF77ya5rGJ5a2X5LmL6Ze05peg56m65qC877yM5pWF5Yig6ZmkJXPliY3lkI7nqbrmoLwKKyM6IGJ1aWx0aW4vcmVzZXQuYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIuS4jeiDveWvuee6r+S7k+W6k+i/m+ihjCVz6YeN572uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzkxCittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgIi1OIOWPquiDveWSjCAtLW1peGVkIOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxMgorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6IgorbXNnc3RyICLph43nva7lkI7lj5bmtojmmoLlrZjnmoTlj5jmm7TvvJoiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0LiAgWW91IGNhblxuIgorInVzZSAnLS1xdWlldCcgdG8gYXZvaWQgdGhpcy4gIFNldCB0aGUgY29uZmlnIHNldHRpbmcgcmVzZXQucXVpZXQgdG8gdHJ1ZVxuIgorInRvIG1ha2UgdGhpcyB0aGUgZGVmYXVsdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIumHjee9ruWQju+8jOaemuS4vuacquaaguWtmOWPmOabtOiKsei0ueS6hiAlLjJmIOenkuOAgiDmgqjlj6/ku6Xkvb/nlKggJy0tcXVpZXQnIOmBv+WFjeatpOaDheWGteOAglxuIgorIuWwhumFjee9ruWPmOmHjyByZXNldC5xdWlldCDorr7nva7kuLogdHJ1ZSDlj6/kvb/lhbbmiJDkuLrpu5jorqTlgLzjgIJcbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAi5LiN6IO96YeN572u57Si5byV5paH5Lu26Iez54mI5pysICclcyfjgIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MjkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIgorbXNnc3RyICLkuI3og73lhpnlhaXmlrDnmoTntKLlvJXmlofku7bjgIIiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo0OTkKK21zZ2lkICJjYW5ub3QgY29tYmluZSAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBhbmQgLS1taXNzaW5nIgorbXNnc3RyICLkuI3og73lkIzml7bkvb/nlKggLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMg5ZKMIC0tbWlzc2luZyDpgInpobkiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1NjAKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIHJlcXVpcmVzIC0tb2JqZWN0cyIKK21zZ3N0ciAi5a+56LGh6L+H5ruk6ZyA6KaBIC0tb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjYxMAorbXNnaWQgInJldi1saXN0IGRvZXMgbm90IHN1cHBvcnQgZGlzcGxheSBvZiBub3RlcyIKK21zZ3N0ciAicmV2LWxpc3Qg5LiN5pSv5oyB5pi+56S65rOo6KejIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NjE1Cittc2dpZCAibWFya2VkIGNvdW50aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tb2JqZWN0cyIKK21zZ3N0ciAi5qCH6K6w6K6h5pWw5ZKMIC0tb2JqZWN0cyDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDA4Cittc2dpZCAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dIgorbXNnc3RyICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzzpgInpobk+XSAtLSBbPOWPguaVsD4uLi5dIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxMworbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAi5L+d5oyBIGAtLWAg5L2c5Li65LiA5Liq5Y+C5pWw5Lyg6YCSIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxNQorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAi6YGH5Yiw56ys5LiA5Liq6Z2e6YCJ6aG55Y+C5pWw5ZCO5YGc5q2i6Kej5p6QIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxOAorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgIuS7peWbuuWumumVv+agvOW8j+i+k+WHuiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1NTEKK21zZ2lkICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzzpgInpobk+XSAtLSBbPOWPguaVsD4uLi5dXG4iCisiICAg5oiW6ICF77yaZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs85Y+C5pWwPi4uLl1cbiIKKyIgICDmiJbogIXvvJpnaXQgcmV2LXBhcnNlIFs86YCJ6aG5Pl0gWzzlj4LmlbA+Li4uXVxuIgorIlxuIgorIuWIneasoeS9v+eUqOaXtuaJp+ihjCBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIOadpeiOt+W+l+abtOWkmuS/oeaBr+OAgiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNAorbXNnaWQgImdpdCByZXZlcnQgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgcmV2ZXJ0IFs86YCJ6aG5Pl0gPOaPkOS6pOWPtz4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjUKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHJldmVydCA85a2Q5ZG95LukPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMAorbXNnaWQgImdpdCBjaGVycnktcGljayBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCBjaGVycnktcGljayBbPOmAiemhuT5dIDzmj5DkuqTlj7c+Li4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjMxCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIDzlrZDlkb3ku6Q+IgorCisjOiBidWlsdGluL3JldmVydC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8iCittc2dzdHIgIumAiemhuSBgJXMnIOacn+acm+S4gOS4quWkp+S6jumbtueahOaVsOWtlyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJXPvvJolcyDkuI3og73lkowgJXMg5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMgorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIue7iOatouWPjei9rOaIluaLo+mAieaTjeS9nCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDMKK21zZ2lkICJyZXN1bWUgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICLnu6fnu63lj43ovazmiJbmi6PpgInmk43kvZwiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA0Cittc2dpZCAiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi5Y+W5raI5Y+N6L2s5oiW5ouj6YCJ5pON5L2cIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNQorbXNnaWQgInNraXAgY3VycmVudCBjb21taXQgYW5kIGNvbnRpbnVlIgorbXNnc3RyICLot7Pov4flvZPliY3mj5DkuqTlubbnu6fnu60iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA3Cittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgIuS4jeimgeiHquWKqOaPkOS6pCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDgKK21zZ2lkICJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi57yW6L6R5o+Q5Lqk6K+05piOIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMQorbXNnaWQgInBhcmVudC1udW1iZXIiCittc2dzdHIgIueItue8luWPtyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJzZWxlY3QgbWFpbmxpbmUgcGFyZW50IgorbXNnc3RyICLpgInmi6nkuLvlubLniLbmj5DkuqTnvJblj7ciCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIuWQiOW5tuetlueVpSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTYKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLlkIjlubbnrZbnlaXnmoTpgInpobkiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI1Cittc2dpZCAiYXBwZW5kIGNvbW1pdCBuYW1lIgorbXNnc3RyICLov73liqDmj5DkuqTlkI3np7AiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI3Cittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIuS/neeVmeWIneWni+WMlueahOepuuaPkOS6pCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjkKK21zZ2lkICJrZWVwIHJlZHVuZGFudCwgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAi5L+d5oyB5aSa5L2Z55qE44CB56m655qE5o+Q5LqkIgorCisjOiBidWlsdGluL3JldmVydC5jOjIzMgorbXNnaWQgInJldmVydCBmYWlsZWQiCittc2dzdHIgIui/mOWOn+Wksei0pSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNDUKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgIuaLo+mAieWksei0pSIKKworIzogYnVpbHRpbi9ybS5jOjE5Cittc2dpZCAiZ2l0IHJtIFs8b3B0aW9ucz5dIFstLV0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcm0gWzzpgInpobk+XSBbLS1dIDzmlofku7Y+Li4uIgorCisjOiBidWlsdGluL3JtLmM6MjA3Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dpZF9wbHVyYWwgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dzdHJbMF0gIuWmguS4i+aWh+S7tuWFtuaaguWtmOeahOWGheWuueWSjOW3peS9nOWMuuWPiiBIRUFEIOS4reeahOmDveS4jeS4gOagt++8miIKK21zZ3N0clsxXSAi5aaC5LiL5paH5Lu25YW25pqC5a2Y55qE5YaF5a655ZKM5bel5L2c5Yy65Y+KIEhFQUQg5Lit55qE6YO95LiN5LiA5qC377yaIgorCisjOiBidWlsdGluL3JtLmM6MjEyCittc2dpZCAiIgorIlxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyLvvIjkvb/nlKggLWYg5by65Yi25Yig6Zmk77yJIgorCisjOiBidWlsdGluL3JtLmM6MjE2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ3N0clswXSAi5LiL5YiX5paH5Lu257Si5byV5Lit5pyJ5Y+Y5pu0IgorbXNnc3RyWzFdICLkuIvliJfmlofku7bntKLlvJXkuK3mnInlj5jmm7QiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjAgYnVpbHRpbi9ybS5jOjIyOQorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisi77yI5L2/55SoIC0tY2FjaGVkIOS/neeVmeacrOWcsOaWh+S7tu+8jOaIlueUqCAtZiDlvLrliLbliKDpmaTvvIkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjYKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dzdHJbMF0gIuWmguS4i+aWh+S7tuacieacrOWcsOS/ruaUue+8miIKK21zZ3N0clsxXSAi5aaC5LiL5paH5Lu25pyJ5pys5Zyw5L+u5pS577yaIgorCisjOiBidWlsdGluL3JtLmM6MjQzCittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAi5LiN5YiX5Ye65Yig6Zmk55qE5paH5Lu2IgorCisjOiBidWlsdGluL3JtLmM6MjQ0Cittc2dpZCAib25seSByZW1vdmUgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIuWPquS7jue0ouW8leWMuuWIoOmZpCIKKworIzogYnVpbHRpbi9ybS5jOjI0NQorbXNnaWQgIm92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrIgorbXNnc3RyICLlv73nlaXmlofku7bmm7TmlrDnirbmgIHmo4Dmn6UiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDYKK21zZ2lkICJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIKK21zZ3N0ciAi5YWB6K646YCS5b2S5Yig6ZmkIgorCisjOiBidWlsdGluL3JtLmM6MjQ4Cittc2dpZCAiZXhpdCB3aXRoIGEgemVybyBzdGF0dXMgZXZlbiBpZiBub3RoaW5nIG1hdGNoZWQiCittc2dzdHIgIuWNs+S9v+ayoeacieWMuemFje+8jOS5n+S7pembtueKtuaAgemAgOWHuiIKKworIzogYnVpbHRpbi9ybS5jOjI4MgorbXNnaWQgIk5vIHBhdGhzcGVjIHdhcyBnaXZlbi4gV2hpY2ggZmlsZXMgc2hvdWxkIEkgcmVtb3ZlPyIKK21zZ3N0ciAi5rKh5pyJ5o+Q5L6b6Lev5b6E6KeE5qC844CC5oiR5bqU6K+l5Yig6Zmk5ZOq5Lqb5paH5Lu277yfIgorCisjOiBidWlsdGluL3JtLmM6MzA1Cittc2dpZCAicGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIuivt+WwhuaCqOeahOS/ruaUueaaguWtmOWIsCAuZ2l0bW9kdWxlcyDkuK3miJbotK7ol4/lkI7lho3nu6fnu60iCisKKyM6IGJ1aWx0aW4vcm0uYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAi5pyq5o+Q5L6bIC1yIOmAiemhueS4jeS8mumAkuW9kuWIoOmZpCAnJXMnIgorCisjOiBidWlsdGluL3JtLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJt77ya5LiN6IO95Yig6ZmkICVzIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjIwCittc2dpZCAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiAiCisiWzxyZWY+Li4uXVxuIgorIiAgLS1hbGwgYW5kIGV4cGxpY2l0IDxyZWY+IHNwZWNpZmljYXRpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzzkuLvmnLo+Ol0855uu5b2VPiBbPOW8leeUqD4uLi5dXG4iCisiICAtLWFsbCDlkozmmI7noa7nmoQgPOW8leeUqD4g5LqS5pal44CCIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MworbXNnaWQgInJlbW90ZSBuYW1lIgorbXNnc3RyICLov5znqIvlkI3np7AiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc3Cittc2dpZCAidXNlIHN0YXRlbGVzcyBSUEMgcHJvdG9jb2wiCittc2dzdHIgIuS9v+eUqOaXoOeKtuaAgeeahCBSUEMg5Y2P6K6uIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OAorbXNnaWQgInJlYWQgcmVmcyBmcm9tIHN0ZGluIgorbXNnc3RyICLku47moIflh4bovpPlhaXor7vlj5blvJXnlKgiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc5Cittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAi5omT5Y2w5p2l6Ieq6L+c56iLIGhlbHBlciDnmoTnirbmgIEiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNAorbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHNob3J0bG9nIFs86YCJ6aG5Pl0gWzzniYjmnKzojIPlm7Q+XSBbWy0tXSA86Lev5b6EPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNQorbXNnaWQgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzzpgInpobk+XSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NAorbXNnaWQgIkdyb3VwIGJ5IGNvbW1pdHRlciByYXRoZXIgdGhhbiBhdXRob3IiCittc2dzdHIgIuaMieeFp+aPkOS6pOiAheWIhue7hOiAjOS4jeaYr+S9nOiAhSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NgorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAi5qC55o2u5q+P5Liq5L2c6ICF55qE5o+Q5Lqk5pWw6YeP5o6S5bqPIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY4Cittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgIumakOiXj+aPkOS6pOivtOaYju+8jOWPquaPkOS+m+aPkOS6pOaVsOmHjyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgIuaYvuekuuavj+S4quS9nOiAheeahOeUteWtkOmCruS7tuWcsOWdgCIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MQorbXNnaWQgIjx3PlssPGkxPlssPGkyPl1dIgorbXNnc3RyICI8dz5bLDxpMT5bLDxpMj5dXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MgorbXNnaWQgIkxpbmV3cmFwIG91dHB1dCIKK21zZ3N0ciAi5oqY6KGM6L6T5Ye6IgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MzAxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGdpdmVuIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5LuT5bqT5aSW5omn6KGM5o+Q5L6b5LqG5aSq5aSa55qE5Y+C5pWwIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTMKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTzkvZXml7Y+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg854mI5pysPiB8IDzpgJrphY3nrKY+KS4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxNworbXNnaWQgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw86LW35aeL54K5Pl1dIFstLWxpc3RdIFs85byV55SoPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZnMiCittc2dzdHJbMF0gIuW/veeVpSAlc++8jOaXoOazleWkhOeQhiAlZCDkuKrku6XkuIrnmoTlvJXnlKgiCittc2dzdHJbMV0gIuW/veeVpSAlc++8jOaXoOazleWkhOeQhiAlZCDkuKrku6XkuIrnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbWF0Y2hpbmcgcmVmcyB3aXRoICVzIgorbXNnc3RyICLmsqHmnInlkowgJXMg5Yy56YWN55qE5byV55SoIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ1Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICLmmL7npLrov5znqIvot5/ouKrnmoTlkozmnKzlnLDnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi5pi+56S66L+c56iL6Lef6Liq55qE5YiG5pSvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ5Cittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAi552A6ImyICcqISstJyDliLDnm7jlupTnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTEKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAi5pi+56S65YWx5ZCM56WW5YWI5ZCO55qEIDxuPiDkuKrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTMKK21zZ2lkICJzeW5vbnltIHRvIG1vcmU9LTEiCittc2dzdHIgIuWSjCBtb3JlPS0xIOWQjOS5iSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NAorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICLkuI3mmL7npLrlrZfnrKbkuLLlkb3lkI0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTYKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAi5YyF5ous5b2T5YmN5YiG5pSvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU4Cittc2dpZCAibmFtZSBjb21taXRzIHdpdGggdGhlaXIgb2JqZWN0IG5hbWVzIgorbXNnc3RyICLku6Xlr7nosaHlkI3lrZflkb3lkI3mj5DkuqQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjAKK21zZ2lkICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIgorbXNnc3RyICLmmL7npLrlj6/og73lkIjlubbnmoTln7rnur8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjIKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICLmmL7npLrmsqHmnInku7vkvZXlvJXnlKjnmoTnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjQKK21zZ2lkICJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIuS7peaLk+aJkemhuuW6j+aYvuekuuaPkOS6pCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NworbXNnaWQgInNob3cgb25seSBjb21taXRzIG5vdCBvbiB0aGUgZmlyc3QgYnJhbmNoIgorbXNnc3RyICLlj6rmmL7npLrkuI3lnKjnrKzkuIDkuKrliIbmlK/kuIrnmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjkKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgIuaYvuekuuS7heS4gOS4quWIhuaUr+WPr+iuv+mXrueahOWQiOW5tuaPkOS6pCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MQorbXNnaWQgInRvcG9sb2dpY2FsbHkgc29ydCwgbWFpbnRhaW5pbmcgZGF0ZSBvcmRlciB3aGVyZSBwb3NzaWJsZSIKK21zZ3N0ciAi5ouT5omR5pa55byP5o6S5bqP77yM5bm25bC95Y+v6IO95Zyw5L+d5oyB5pel5pyf6aG65bqPIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc0Cittc2dpZCAiPG4+Wyw8YmFzZT5dIgorbXNnc3RyICI8bj5bLDxiYXNlPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzUKK21zZ2lkICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgYmFzZSIKK21zZ3N0ciAi5pi+56S65LuO6LW35aeL54K55byA5aeL55qEIDxuPiDmnaHmnIDov5HnmoTlvJXnlKjml6Xlv5forrDlvZUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MTEKK21zZ2lkICIiCisiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvciAtLW1lcmdlLWJhc2UiCittc2dzdHIgIi0tcmVmbG9nIOWSjCAtLWFsbOOAgS0tcmVtb3Rlc+OAgS0taW5kZXBlbmRlbnQg5oiWIC0tbWVyZ2UtYmFzZSDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MzUKK21zZ2lkICJubyBicmFuY2hlcyBnaXZlbiwgYW5kIEhFQUQgaXMgbm90IHZhbGlkIgorbXNnc3RyICLmnKrmj5DkvpvliIbmlK/vvIzkuJQgSEVBRCDml6DmlYgiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MzgKK21zZ2lkICItLXJlZmxvZyBvcHRpb24gbmVlZHMgb25lIGJyYW5jaCBuYW1lIgorbXNnc3RyICLpgInpobkgLS1yZWZsb2cg6ZyA6KaB5LiA5Liq5YiG5pSv5ZCNIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgJWQgZW50cnkgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ2lkX3BsdXJhbCAib25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dzdHJbMF0gIuS4gOasoeWPquiDveaYvuekuiAlZCDkuKrmnaHnm67jgIIiCittc2dzdHJbMV0gIuS4gOasoeWPquiDveaYvuekuiAlZCDkuKrmnaHnm67jgIIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWYgJXMiCittc2dzdHIgIuaXoOatpOW8leeUqCAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXYuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXZzLiIKK21zZ3N0clswXSAi5LiN6IO95aSE55CGICVkIOS4quS7peS4iueahOeJiOacrOOAgiIKK21zZ3N0clsxXSAi5LiN6IO95aSE55CGICVkIOS4quS7peS4iueahOeJiOacrOOAgiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiclcycg5LiN5piv5LiA5Liq5pyJ5pWI55qE5byV55So44CCIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIGNvbW1pdCAlcyAoJXMpIgorbXNnc3RyICLkuI3og73mib7liLDmj5DkuqQgJXPvvIglc++8iSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjEyCittc2dpZCAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs85qih5byPPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMworbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTzmqKHlvI8+XSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MgorbXNnaWQgIm9ubHkgc2hvdyB0YWdzIChjYW4gYmUgY29tYmluZWQgd2l0aCBoZWFkcykiCittc2dzdHIgIuWPquaYvuekuuagh+etvu+8iOWPr+S7peWSjOWktOWFseeUqO+8iSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MworbXNnaWQgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiCittc2dzdHIgIuWPquaYvuekuuWktO+8iOWPr+S7peWSjOagh+etvuWFseeUqO+8iSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NAorbXNnaWQgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgcmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiCittc2dzdHIgIuabtOS4peagvOeahOW8leeUqOajgOa1i++8jOmcgOimgeeyvuehrueahOW8leeUqOi3r+W+hCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NyBidWlsdGluL3Nob3ctcmVmLmM6MTY5Cittc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IgorbXNnc3RyICLmmL7npLogSEVBRCDlvJXnlKjvvIzljbPkvb/ooqvov4fmu6TmjokiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzEKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAi6L2s5o2i5qCH562+5Yiw5a+56LGhIElEIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTczCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICLlj6rmmL7npLrkvb/nlKggPG4+IOS4quaVsOWtl+eahCBTSEExIOWTiOW4jCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3NworbXNnaWQgImRvIG5vdCBwcmludCByZXN1bHRzIHRvIHN0ZG91dCAodXNlZnVsIHdpdGggLS12ZXJpZnkpIgorbXNnc3RyICLkuI3miZPljbDnu5PmnpzliLDmoIflh4bovpPlh7rvvIjkvovlpoLkuI4gLS12ZXJpZnkg5Y+C5pWw5YWx55So77yJIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5pi+56S65LuO5qCH5YeG6L6T5YWl5Lit6K+75YWl55qE5LiN5Zyo5pys5Zyw5LuT5bqT5Lit55qE5byV55SoIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIxCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxhZGR8ZGlzYWJsZSkgPG9wdGlvbnM+IgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGFkZHxkaXNhYmxlKSA86YCJ6aG5PiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo2NAorbXNnaWQgInRoaXMgd29ya3RyZWUgaXMgbm90IHNwYXJzZSAoc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IG5vdCBleGlzdCkiCittc2dzdHIgIuacrOW3peS9nOWMuuS4jeaYr+eogOeWj+aooeW8j++8iOeogOeWj+ajgOWHuuaWh+S7tuWPr+iDveS4jeWtmOWcqO+8iSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMjUKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSBmb3Igc3BhcnNlLWNoZWNrb3V0IGZpbGUiCittc2dzdHIgIuaXoOazleS4uueogOeWj+ajgOWHuuaWh+S7tuWIm+W7uuebruW9lSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyNjYKK21zZ2lkICJmYWlsZWQgdG8gc2V0IGV4dGVuc2lvbnMud29ya3RyZWVDb25maWcgc2V0dGluZyIKK21zZ3N0ciAi5peg5rOV6K6+572uIGV4dGVuc2lvbnMud29ya3RyZWVDb25maWciCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjgzCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IFstLWNvbmVdIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzAyCittc2dpZCAiaW5pdGlhbGl6ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGluIGNvbmUgbW9kZSIKK21zZ3N0ciAi5Yid5aeL5YyW56iA55aP5qOA5Ye65Li6IGNvbmUg5qih5byPIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjMwOAorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICLliJ3lp4vljJbnqIDnlo/mo4Dlh7oiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgIuaXoOazleaJk+W8gCAnJXMnIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgbm9ybWFsaXplIHBhdGggJXMiCittc2dzdHIgIuaXoOazleinhOiMg+WMlui3r+W+hCAlcyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0MTAKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChzZXR8YWRkKSAoLS1zdGRpbiB8IDxwYXR0ZXJucz4pIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IChzZXR8YWRkKSAoLS1zdGRpbiB8IDzmqKHlvI8+KSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucXVvdGUgQy1zdHlsZSBzdHJpbmcgJyVzJyIKK21zZ3N0ciAi5peg5rOV5Li6IEMg6K+t6KiA6aOO5qC855qE5a2X56ym5LiyICclcycg5Y675byV5Y+3IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjQ4OSBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjUxMworbXNnaWQgInVuYWJsZSB0byBsb2FkIGV4aXN0aW5nIHNwYXJzZS1jaGVja291dCBwYXR0ZXJucyIKK21zZ3N0ciAi5peg5rOV5Yqg6L29546w5a2Y55qE56iA55aP5qOA5Ye65qih5byPIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjU1OAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBzdGFuZGFyZCBpbiIKK21zZ3N0ciAi5LuO5qCH5YeG6L6T5YWl6K+75Y+W5qih5byPIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjU2NAorbXNnaWQgInNldCBzcGFyc2UtY2hlY2tvdXQgcGF0dGVybnMiCittc2dzdHIgIuiuvue9rueogOeWj+ajgOWHuuaooeW8jyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo1ODEKK21zZ2lkICJkaXNhYmxlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAi56aB55So56iA55aP5qOA5Ye6IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjU5MworbXNnaWQgImVycm9yIHdoaWxlIHJlZnJlc2hpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIuWIt+aWsOW3peS9nOebruW9leaXtuWHuumUmSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyIGJ1aWx0aW4vc3Rhc2guYzozOAorbXNnaWQgImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgc3Rhc2ggbGlzdCBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjMgYnVpbHRpbi9zdGFzaC5jOjQzCittc2dpZCAiZ2l0IHN0YXNoIHNob3cgWzxvcHRpb25zPl0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggc2hvdyBbPOmAiemhuT5dIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI0IGJ1aWx0aW4vc3Rhc2guYzo0OAorbXNnaWQgImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNQorbXNnaWQgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNiBidWlsdGluL3N0YXNoLmM6NjMKK21zZ2lkICJnaXQgc3Rhc2ggYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBicmFuY2ggPOWIhuaUr+WQjT4gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjcgYnVpbHRpbi9zdGFzaC5jOjY4Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIgorbXNnc3RyICJnaXQgc3Rhc2ggY2xlYXIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyOAorbXNnaWQgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XVxuIgorIiAgICAgICAgICBbLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+IFstLXBhdGhzcGVjLWZpbGUtbnVsXV1cbiIKKyIgICAgICAgICAgWy0tXSBbPHBhdGhzcGVjPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDzmtojmga8+XVxuIgorIiAgICAgICAgICBbLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+IFstLXBhdGhzcGVjLWZpbGUtbnVsXV1cbiIKKyIgICAgICAgICAgWy0tXSBbPOi3r+W+hOinhOagvD4uLi5dXSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjMyIGJ1aWx0aW4vc3Rhc2guYzo4NQorbXNnaWQgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZXNzYWdlPl0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzzmtojmga8+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUzCittc2dpZCAiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU4Cittc2dpZCAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3MworbXNnaWQgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IgorbXNnc3RyICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA85raI5oGvPl0gWy1xfC0tcXVpZXRdIDzmj5DkuqQ+IgorCisjOiBidWlsdGluL3N0YXNoLmM6NzgKK21zZ2lkICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl1cbiIKKyIgICAgICAgICAgWy0tXSBbPHBhdGhzcGVjPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDzmtojmga8+XVxuIgorIiAgICAgICAgICBbLS1dIFs86Lev5b6E6KeE5qC8Pi4uLl1dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIiclcycg5LiN5YOP5piv5LiA5Liq6LSu6JeP5o+Q5LqkIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6JXMiCittc2dzdHIgIuaMh+WumuS6huWkquWkmueahOeJiOacrO+8miVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTYyIGdpdC1sZWdhY3ktc3Rhc2guc2g6NTQ5Cittc2dpZCAiTm8gc3Rhc2ggZW50cmllcyBmb3VuZC4iCittc2dzdHIgIuacquWPkeeOsOi0ruiXj+adoeebruOAgiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiVzIOS4jeaYr+S4gOS4quacieaViOeahOW8leeUqOWQjSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyNSBnaXQtbGVnYWN5LXN0YXNoLnNoOjc1Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIgorbXNnc3RyICJnaXQgc3Rhc2ggY2xlYXIg5LiN5pSv5oyB5Y+C5pWwIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDA0Cittc2dpZCAiY2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICLml6Dms5XlnKjlkIjlubbov4fnqIvlupTnlKjotK7ol48iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIGRpZmYgJXNeIS4iCittc2dzdHIgIuaXoOazleeUn+aIkOW3ruW8giAlc14hLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyMgorbXNnaWQgImNvbmZsaWN0cyBpbiBpbmRleC5Ucnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAi57Si5byV5Lit5pyJ5Yay56qB44CC5bCd6K+V5LiN55SoIC0taW5kZXjjgIIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjgKK21zZ2lkICJjb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICLkuI3og73kv53lrZjntKLlvJXmoJEiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MzcKK21zZ2lkICJjb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCIKK21zZ3N0ciAi5peg5rOV5LuO6LSu6JeP5p2h55uu5Lit5oGi5aSN5pyq6Lef6Liq5paH5Lu2IgorCisjOiBidWlsdGluL3N0YXNoLmM6NDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgd2l0aCAlcyIKK21zZ3N0ciAi5q2j5Zyo5ZCI5bm2ICVzIOWSjCAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ2MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjY4MQorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAi57Si5byV5pyq5LuO6LSu6JeP5Lit5oGi5aSN44CCIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTIyIGJ1aWx0aW4vc3Rhc2guYzo2MjEKK21zZ2lkICJhdHRlbXB0IHRvIHJlY3JlYXRlIHRoZSBpbmRleCIKK21zZ3N0ciAi5bCd6K+V6YeN5bu657Si5byVIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJXMgKCVzKSIKK21zZ3N0ciAi5Lii5byD5LqGICVz77yIJXPvvIkiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIlc++8muaXoOazleS4ouW8g+i0ruiXj+adoeebriIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU4MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDkuKrotK7ol4/lvJXnlKgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MzMgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2OTUKK21zZ2lkICJUaGUgc3Rhc2ggZW50cnkgaXMga2VwdCBpbiBjYXNlIHlvdSBuZWVkIGl0IGFnYWluLiIKK21zZ3N0ciAi6LSu6JeP5p2h55uu6KKr5L+d55WZ5Lul5aSH5oKo5YaN5qyh6ZyA6KaB44CCIgorCisjOiBidWlsdGluL3N0YXNoLmM6NjU2IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzEzCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICLmnKrmjIflrprliIbmlK/lkI0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3OTYgYnVpbHRpbi9zdGFzaC5jOjgzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICVzIHdpdGggJXMiCittc2dzdHIgIuaXoOazleeUqCAlMiRzIOabtOaWsCAlMSRzIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODE0IGJ1aWx0aW4vc3Rhc2guYzoxNDc4IGJ1aWx0aW4vc3Rhc2guYzoxNTQzCittc2dpZCAic3Rhc2ggbWVzc2FnZSIKK21zZ3N0ciAi6LSu6JeP6K+05piOIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODI0Cittc2dpZCAiXCJnaXQgc3Rhc2ggc3RvcmVcIiByZXF1aXJlcyBvbmUgPGNvbW1pdD4gYXJndW1lbnQiCittc2dzdHIgIlwiZ2l0IHN0YXNoIHN0b3JlXCIg6ZyA6KaB5LiA5LiqIDzmj5DkuqQ+IOWPguaVsCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEwNDkgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTgKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICLmsqHmnInpgInmi6nlj5jmm7QiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTQ5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MTUwCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIuaCqOWwmuacquW7uueri+WIneWni+aPkOS6pCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNzYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNjUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAi5peg5rOV5L+d5a2Y5b2T5YmN57Si5byV54q25oCBIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE4NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE4MAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIuaXoOazleS/neWtmOacqui3n+i4quaWh+S7tiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExOTYgYnVpbHRpbi9zdGFzaC5jOjEyMDUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMDEKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjE0Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCittc2dzdHIgIuaXoOazleS/neWtmOW9k+WJjeW3peS9nOWMuueKtuaAgSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyMzMgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMzQKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAi5LiN6IO96K6w5b2V5bel5L2c5Yy654q25oCBIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI4MiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMzOAorbXNnaWQgIkNhbid0IHVzZSAtLXBhdGNoIGFuZCAtLWluY2x1ZGUtdW50cmFja2VkIG9yIC0tYWxsIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIuS4jeiDveWQjOaXtuS9v+eUqOWPguaVsCAtLXBhdGNoIOWSjCAtLWluY2x1ZGUtdW50cmFja2VkIOaIliAtLWFsbCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOTgKK21zZ2lkICJEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/IgorbXNnc3RyICLmgqjmmK/lkKblv5jkuobmiafooYwgJ2dpdCBhZGQn77yfIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMxMyBnaXQtbGVnYWN5LXN0YXNoLnNoOjM0NgorbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAi5rKh5pyJ6KaB5L+d5a2Y55qE5pys5Zyw5L+u5pS5IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMyMCBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1MQorbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICLml6Dms5XliJ3lp4vljJbotK7ol48iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzM1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICLml6Dms5Xkv53lrZjlvZPliY3nirbmgIEiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAlcyIKK21zZ3N0ciAi5L+d5a2Y5bel5L2c55uu5b2V5ZKM57Si5byV54q25oCBICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQzMCBnaXQtbGVnYWN5LXN0YXNoLnNoOjM4NQorbXNnaWQgIkNhbm5vdCByZW1vdmUgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAi5peg5rOV5Yig6Zmk5bel5L2c5Yy65Y+Y5pu0IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2OSBidWlsdGluL3N0YXNoLmM6MTUzNAorbXNnaWQgImtlZXAgaW5kZXgiCittc2dzdHIgIuS/neaMgee0ouW8lSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NzEgYnVpbHRpbi9zdGFzaC5jOjE1MzYKK21zZ2lkICJzdGFzaCBpbiBwYXRjaCBtb2RlIgorbXNnc3RyICLku6XooaXkuIHmqKHlvI/otK7ol48iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDcyIGJ1aWx0aW4vc3Rhc2guYzoxNTM3Cittc2dpZCAicXVpZXQgbW9kZSIKK21zZ3N0ciAi6Z2Z6buY5qih5byPIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3NCBidWlsdGluL3N0YXNoLmM6MTUzOQorbXNnaWQgImluY2x1ZGUgdW50cmFja2VkIGZpbGVzIGluIHN0YXNoIgorbXNnc3RyICLotK7ol4/kuK3ljIXlkKvmnKrot5/ouKrmlofku7YiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDc2IGJ1aWx0aW4vc3Rhc2guYzoxNTQxCittc2dpZCAiaW5jbHVkZSBpZ25vcmUgZmlsZXMiCittc2dzdHIgIuWMheWQq+W/veeVpeeahOaWh+S7tiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4ZWMgJXMiCittc2dzdHIgIuS4jeiDveaJp+ihjCAlcyIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTgKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE5Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MzcKK21zZ2lkICJza2lwIGFuZCByZW1vdmUgYWxsIGxpbmVzIHN0YXJ0aW5nIHdpdGggY29tbWVudCBjaGFyYWN0ZXIiCittc2dzdHIgIui3s+i/h+WSjOenu+mZpOaJgOacieeahOazqOmHiuihjCIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6NDAKK21zZ2lkICJwcmVwZW5kIGNvbW1lbnQgY2hhcmFjdGVyIGFuZCBzcGFjZSB0byBlYWNoIGxpbmUiCittc2dzdHIgIuS4uuavj+S4gOihjOeahOihjOmmlua3u+WKoOazqOmHiuespuWSjOepuuagvCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGluZyBhIGZ1bGwgcmVmIG5hbWUsIGdvdCAlcyIKK21zZ3N0ciAi5pyf5pyb5LiA5Liq5a6M5pW055qE5byV55So5ZCN56ew77yM5Y205b6X5YiwICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjQKK21zZ2lkICJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSB0YWtlcyBubyBhcmd1bWVudHMiCittc2dzdHIgInN1Ym1vZHVsZS0taGVscGVyIHByaW50LWRlZmF1bHQtcmVtb3RlIOS4jeW4puWPguaVsCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICclcyciCittc2dzdHIgIuaXoOazleS7jiB1cmwgJyVzJyDliaXnprvkuIDkuKrnu4Tku7YiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MTAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTUKK21zZ2lkICJhbHRlcm5hdGl2ZSBhbmNob3IgZm9yIHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICLnm7jlr7not6/lvoTnmoTmm7/ku6PplJrorrDvvIhhbmNob3LvvIkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MTUKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTzot6/lvoQ+XSBbPOi3r+W+hD4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICLlnKggLmdpdG1vZHVsZXMg5Lit5pyq5om+5Yiw5a2Q5qih57uEICclcycg55qEIHVybCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRlcmluZyAnJXMnXG4iCittc2dzdHIgIui/m+WFpSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyBmb3IgJXNcbiIKKyIuIgorbXNnc3RyICIiCisi5a+5ICVzIOaJp+ihjCBydW5fY29tbWFuZCDov5Tlm57pnZ7pm7blgLzjgIJcbiIKKyIuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgd2hpbGUgcmVjdXJzaW5nIGluIHRoZSBuZXN0ZWQgIgorInN1Ym1vZHVsZXMgb2YgJXNcbiIKKyIuIgorbXNnc3RyICIiCisi5Zyo6YCS5b2SICVzIOeahOWtkOaooee7hOaJp+ihjCBydW5fY29tbWFuZCDml7bov5Tlm57pnZ7pm7blgLzjgIJcbiIKKyIuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY1Cittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IG9mIGVudGVyaW5nIGVhY2ggc3VibW9kdWxlIGNvbW1hbmQiCittc2dzdHIgIumYu+atoui/m+WFpeavj+S4gOS4quWtkOaooee7hOWRveS7pOeahOi+k+WHuiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA2MworbXNnaWQgIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAi6YCS5b2S6L+b5YWl5bWM5aWX5a2Q5qih57uE5LitIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTcyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWy0tXSA8Y29tbWFuZD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBmb3JlYWNoIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gPOWRveS7pD4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBsb29rIHVwIGNvbmZpZ3VyYXRpb24gJyVzJy4gQXNzdW1pbmcgdGhpcyByZXBvc2l0b3J5IGlzIGl0cyBvd24gIgorImF1dGhvcml0YXRpdmUgdXBzdHJlYW0uIgorbXNnc3RyICLml6Dms5Xmib7liLDphY3nva4gJyVzJ+OAguWBh+Wumui/meS4quS7k+W6k+aYr+WFtuiHqui6q+eahOWumOaWueS4iua4uOOAgiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICLml6Dms5XkuLrlrZDmqKHnu4QgJyVzJyDms6jlhowgdXJsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIuWtkOaooee7hCAnJXMn77yIJXPvvInlt7Llr7not6/lvoQgJyVzJyDms6jlhoxcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBjb21tYW5kIHVwZGF0ZSBtb2RlIHN1Z2dlc3RlZCBmb3Igc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAi6K2m5ZGK77ya5bu66K6u5a2Q5qih57uEICclcycg5L2/55So5ZG95Luk5pu05paw5qih5byPXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICLml6Dms5XkuLrlrZDmqKHnu4QgJyVzJyDms6jlhozmm7TmlrDmqKHlvI8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTAKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAi6Zi75q2i5a2Q5qih57uE5Yid5aeL5YyW55qE6L6T5Ye6IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzxvcHRpb25zPl0gWzxwYXRoPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs86YCJ6aG5Pl0gWzzot6/lvoQ+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjc4OSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICclcyciCittc2dzdHIgIuWcqCAuZ2l0bW9kdWxlcyDkuK3msqHmnInlj5HnjrDot6/lvoQgJyVzJyDnmoTlrZDmqKHnu4TmmKDlsIQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCByZWYgaW5zaWRlIHRoZSBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q5a2Q5qih57uEICclcycg55qEIEhFQUQg5byV55SoIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODY0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgIumAkuW9kuWtkOaooee7hCAnJXMnIOWksei0pSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4OCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5OQorbXNnaWQgIlN1cHByZXNzIHN1Ym1vZHVsZSBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICLpmLvmraLlrZDmqKHnu4TnirbmgIHovpPlh7oiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODkKK21zZ2lkICIiCisiVXNlIGNvbW1pdCBzdG9yZWQgaW4gdGhlIGluZGV4IGluc3RlYWQgb2YgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIHN1Ym1vZHVsZSAiCisiSEVBRCIKK21zZ3N0ciAi5L2/55So5a2Y5YKo5Zyo57Si5byV5Lit55qE5o+Q5Lqk77yM6ICM6Z2e5a2Y5YKo5Zyo5a2Q5qih57uEIEhFQUQg5Lit55qE5o+Q5LqkIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODkwCittc2dpZCAicmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzIgorbXNnc3RyICLpgJLlvZLov5vlhaXltYzlpZflrZDmqKHnu4TkuK0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4OTUKK21zZ2lkICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs86Lev5b6EPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MTkKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8cGF0aD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDzot6/lvoQ+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJyVzJ1xuIgorbXNnc3RyICLkuLogJyVzJyDlkIzmraXlrZDmqKHnu4QgdXJsXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAi5peg5rOV5Li65a2Q5qih57uE6Lev5b6EICclcycg5rOo5YaMIHVybCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGdldCB0aGUgZGVmYXVsdCByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLml6Dms5XlvpfliLDlrZDmqKHnu4QgJyVzJyDnmoTpu5jorqTov5znqIvlhbPogZQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV5Li65a2Q5qih57uEICclcycg5pu05paw6L+c56iL5YWz6IGUIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA2MQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBzeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwiCittc2dzdHIgIumYu+atouWtkOaooee7hCB1cmwg5ZCM5q2l55qE6L6T5Ye6IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA2OAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPOi3r+W+hD5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGEgLmdpdCBkaXJlY3RvcnkgKHVzZSAncm0gLXJmJyBpZiB5b3UgIgorInJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorIuWtkOaooee7hOW3peS9nOWMuiAnJXMnIOWMheWQq+S4gOS4qiAuZ2l0IOebruW9le+8iOWmguaenOaCqOehrumcgOWIoOmZpOWug+WPiuWFtuWFqOmDqOWOhuWPsu+8jOS9v+eUqCAncm0gIgorIi1yZicg5ZG95Luk77yJIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvIGRpc2NhcmQgIgorInRoZW0iCittc2dzdHIgIuWtkOaooee7hOW3peS9nOWMuiAnJXMnIOWMheWQq+acrOWcsOS/ruaUue+8m+S9v+eUqCAnLWYnIOS4ouW8g+Wug+S7rCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyVzJ1xuIgorbXNnc3RyICLlt7LmuIXpmaTnm67lvZUgJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIgorbXNnc3RyICLml6Dms5Xnp7vpmaTlrZDmqKHnu4Tlt6XkvZzljLogJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGVtcHR5IHN1Ym1vZHVsZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIuS4jeiDveWIm+W7uuepuueahOWtkOaooee7hOebruW9lSAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIgorbXNnc3RyICLlrZDmqKHnu4QgJyVzJ++8iCVz77yJ5pyq5a+56Lev5b6EICclcycg5rOo5YaMXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjAwCittc2dpZCAiUmVtb3ZlIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWVzIGV2ZW4gaWYgdGhleSBjb250YWluIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIuWIoOmZpOWtkOaooee7hOW3peS9nOWMuu+8jOWNs+S9v+WMheWQq+acrOWcsOS/ruaUuSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMDEKK21zZ2lkICJVbnJlZ2lzdGVyIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICLlsIbmiYDmnInlrZDmqKHnu4Tlj5bmtojms6jlhowiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjA2Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8cGF0aD4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs86Lev5b6EPi4uLl1dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIyMAorbXNnaWQgIlVzZSAnLS1hbGwnIGlmIHlvdSByZWFsbHkgd2FudCB0byBkZWluaXRpYWxpemUgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgIuWmguaenOaCqOehruWunuaDs+imgeWvueaJgOacieWtkOaooee7hOaJp+ihjOWPlua2iOWIneWni+WMlu+8jOivt+S9v+eUqCAnLS1hbGwnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTI4OQorbXNnaWQgIiIKKyJBbiBhbHRlcm5hdGUgY29tcHV0ZWQgZnJvbSBhIHN1cGVycHJvamVjdCdzIGFsdGVybmF0ZSBpcyBpbnZhbGlkLlxuIgorIlRvIGFsbG93IEdpdCB0byBjbG9uZSB3aXRob3V0IGFuIGFsdGVybmF0ZSBpbiBzdWNoIGEgY2FzZSwgc2V0XG4iCisic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgdG8gJ2luZm8nIG9yLCBlcXVpdmFsZW50bHksIGNsb25lIHdpdGhcbiIKKyInLS1yZWZlcmVuY2UtaWYtYWJsZScgaW5zdGVhZCBvZiAnLS1yZWZlcmVuY2UnLiIKK21zZ3N0ciAiIgorIuS7juS4gOS4queItumhueebrueahOWkh+eUqOS7k+W6k+S4reiuoeeul+WHuueahOWkh+eUqOS7k+W6k+aXoOaViOOAglxuIgorIuatpOWcuuaZr+S4i++8jOiuvue9riBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSDkuLogJ2luZm8n77yM5Lul5YWB6K64XG4iCisiR2l0IOS4jeS9v+eUqOWkh+eUqOS7k+W6k+WFi+mahu+8jOaIluiAheetieaViOWcsOS9v+eUqCAnLS1yZWZlcmVuY2UtaWYtYWJsZScg6ICM6Z2eXG4iCisiJy0tcmVmZXJlbmNlJyDmnaXlhYvpmobjgIIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzI4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBhZGQgYWx0ZXJuYXRlOiAlcyIKK21zZ3N0ciAi5a2Q5qih57uEICclcycg5LiN6IO95re75Yqg5LuT5bqT5aSH6YCJ77yaJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICLkuI3og73or4bliKsgc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kg55qE5Y+W5YC8ICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAi5LiN6IO96K+G5YirIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhaW9uIOeahOWPluWAvCAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5OAorbXNnaWQgIndoZXJlIHRoZSBuZXcgc3VibW9kdWxlIHdpbGwgYmUgY2xvbmVkIHRvIgorbXNnc3RyICLmlrDnmoTlrZDmqKHnu4TlsIbopoHlhYvpmobnmoTot6/lvoQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAxCittc2dpZCAibmFtZSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSIKK21zZ3N0ciAi5paw5a2Q5qih57uE55qE5ZCN56ewIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNAorbXNnaWQgInVybCB3aGVyZSB0byBjbG9uZSB0aGUgc3VibW9kdWxlIGZyb20iCittc2dzdHIgIuWFi+mahuWtkOaooee7hOeahCB1cmwg5Zyw5Z2AIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxMgorbXNnaWQgImRlcHRoIGZvciBzaGFsbG93IGNsb25lcyIKK21zZ3N0ciAi5rWF5YWL6ZqG55qE5rex5bqmIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxNSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyNAorbXNnaWQgImZvcmNlIGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgIuW8uuWItuaYvuekuuWFi+mahui/m+W6piIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MjYKK21zZ2lkICJkaXNhbGxvdyBjbG9uaW5nIGludG8gbm9uLWVtcHR5IGRpcmVjdG9yeSIKK21zZ3N0ciAi5LiN5YWB6K645YWL6ZqG5Yiw5LiA5Liq6Z2e56m655uu5b2VIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQyNAorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxuYW1lPl0gWy0tZGVwdGggPGRlcHRoPl0gWy0tc2luZ2xlLWJyYW5jaF0gLS11cmwgIgorIjx1cmw+IC0tcGF0aCA8cGF0aD4iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTzot6/lvoQ+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlIDzku5PlupM+XSAiCisiWy0tbmFtZSA85ZCN5a2XPl0gWy0tZGVwdGggPOa3seW6pj5dIFstLXNpbmdsZS1icmFuY2hdIC0tdXJsIDx1cmw+IC0tcGF0aCA86Lev5b6EPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gY3JlYXRlL3VzZSAnJXMnIGluIGFub3RoZXIgc3VibW9kdWxlJ3MgZ2l0IGRpciIKK21zZ3N0ciAi5ouS57ud5Zyo5Y+m5LiA5Liq5a2Q5qih57uE55qEIGdpdCBkaXIg5Lit5Yib5bu6L+S9v+eUqCAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9uZSBvZiAnJXMnIGludG8gc3VibW9kdWxlIHBhdGggJyVzJyBmYWlsZWQiCittc2dzdHIgIuaXoOazleWFi+mahiAnJXMnIOWIsOWtkOaooee7hOi3r+W+hCAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJkaXJlY3Rvcnkgbm90IGVtcHR5OiAnJXMnIgorbXNnc3RyICLnm67lvZXpnZ7nqbrvvJonJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIuaXoOazleW+l+WIsCAnJXMnIOeahOWtkOaooee7hOebruW9lSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICLlrZDmqKHnu4QgJyUyJHMnIOeahOabtOaWsOaooeW8jyAnJTEkcycg5peg5pWIIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgY29uZmlndXJlZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAi5Li65a2Q5qih57uEICclMiRzJyDphY3nva7nmoTmm7TmlrDmqKHlvI8gJyUxJHMnIOaXoOaViCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyVzJyBub3QgaW5pdGlhbGl6ZWQiCittc2dzdHIgIuWtkOaooee7hCAnJXMnIOWwmuacquWIneWni+WMliIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MjEKK21zZ2lkICJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAi5Lmf6K645oKo5oOz6KaB5omn6KGMICd1cGRhdGUgLS1pbml0J++8nyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgdW5tZXJnZWQgc3VibW9kdWxlICVzIgorbXNnc3RyICLnlaXov4fmnKrlkIjlubbnmoTlrZDmqKHnu4QgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLnlaXov4flrZDmqKHnu4QgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNsb25lICclcycuIFJldHJ5IHNjaGVkdWxlZCIKK21zZ3N0ciAi5YWL6ZqGICclcycg5aSx6LSl44CC5oyJ6K6h5YiS6YeN6K+VIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJyBhIHNlY29uZCB0aW1lLCBhYm9ydGluZyIKK21zZ3N0ciAi56ys5LqM5qyh5bCd6K+V5YWL6ZqGICclcycg5aSx6LSl77yM6YCA5Ye6IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwMyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE0OQorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLliLDlt6XkvZzljLrnmoTot6/lvoQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA2Cittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUsIGFjcm9zcyBuZXN0ZWQgc3VibW9kdWxlIGJvdW5kYXJpZXMiCittc2dzdHIgIuW3peS9nOWMuuS4reeahOi3r+W+hO+8jOmAkuW9kuW1jOWll+WtkOaooee7hCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTAKK21zZ2lkICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvciBub25lIgorbXNnc3RyICJyZWJhc2XjgIFtZXJnZeOAgWNoZWNrb3V0IOaIliBub25lIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxNgorbXNnaWQgIkNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgdHJ1bmNhdGVkIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldmlzaW9ucyIKK21zZ3N0ciAi5Yib5bu65LiA5Liq5oyH5a6a5rex5bqm55qE5rWF5YWL6ZqGIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxOQorbXNnaWQgInBhcmFsbGVsIGpvYnMiCittc2dzdHIgIuW5tuWPkeS7u+WKoSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MjEKK21zZ2lkICJ3aGV0aGVyIHRoZSBpbml0aWFsIGNsb25lIHNob3VsZCBmb2xsb3cgdGhlIHNoYWxsb3cgcmVjb21tZW5kYXRpb24iCittc2dzdHIgIuWIneWni+WFi+mahuaYr+WQpuW6lOivpemBteWuiOaOqOiNkOeahOa1heWFi+mahumAiemhuSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MjIKK21zZ2lkICJkb24ndCBwcmludCBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICLkuI3opoHovpPlh7rlhYvpmobov5vluqYiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTMzCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZS1jbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZS1jbG9uZSBbLS1wcmVmaXg9POi3r+W+hD5dIFs86Lev5b6EPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTQ2Cittc2dpZCAiYmFkIHZhbHVlIGZvciB1cGRhdGUgcGFyYW1ldGVyIgorbXNnc3RyICJ1cGRhdGUg5Y+C5pWw5Y+W5YC86ZSZ6K+vIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlICglcykgYnJhbmNoIGNvbmZpZ3VyZWQgdG8gaW5oZXJpdCBicmFuY2ggZnJvbSBzdXBlcnByb2plY3QsIGJ1dCAiCisidGhlIHN1cGVycHJvamVjdCBpcyBub3Qgb24gYW55IGJyYW5jaCIKK21zZ3N0ciAi5a2Q5qih57uE77yIJXPvvInnmoTliIbmlK/phY3nva7kuLrnu6fmib/kuIrnuqfpobnnm67nmoTliIbmlK/vvIzkvYbmmK/kuIrnuqfpobnnm67kuI3lnKjku7vkvZXliIbmlK/kuIoiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgYSByZXBvc2l0b3J5IGhhbmRsZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIuaXoOazleiOt+W+l+WtkOaooee7hCAnJXMnIOeahOS7k+W6k+WPpeafhCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNTAKK21zZ2lkICJyZWN1cnNlIGludG8gc3VibW9kdWxlcyIKK21zZ3N0ciAi5Zyo5a2Q5qih57uE5Lit6YCS5b2SIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE1NgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBhYnNvcmItZ2l0LWRpcnMgWzxvcHRpb25zPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBhYnNvcmItZ2l0LWRpcnMgWzzpgInpobk+XSBbPOi3r+W+hD4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIxMgorbXNnaWQgImNoZWNrIGlmIGl0IGlzIHNhZmUgdG8gd3JpdGUgdG8gdGhlIC5naXRtb2R1bGVzIGZpbGUiCittc2dzdHIgIuajgOafpeWGmeWFpSAuZ2l0bW9kdWxlcyDmlofku7bmmK/lkKblronlhagiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjE1Cittc2dpZCAidW5zZXQgdGhlIGNvbmZpZyBpbiB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAi5Y+W5raIIC5naXRtb2R1bGVzIOaWh+S7tuS4reeahOiuvue9riIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMjAKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIDxuYW1lPiBbPHZhbHVlPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgPOWQjeensD4gWzzlgLw+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMjEKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPOWQjeensD4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjIyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyNDEgZ2l0LXN1Ym1vZHVsZS5zaDoxNzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpcyBpbiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLor7fnoa7orqQgLmdpdG1vZHVsZXMg5paH5Lu25Zyo5bel5L2c5Yy66YeMIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI5MSBnaXQuYzo0MzMgZ2l0LmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXNuJ3Qgc3VwcG9ydCAtLXN1cGVyLXByZWZpeCIKK21zZ3N0ciAiJXMg5LiN5pSv5oyBIC0tc3VwZXItcHJlZml4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI5NworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHN1Ym1vZHVsZS0taGVscGVyIHN1YmNvbW1hbmQiCittc2dzdHIgIiclcycg5LiN5piv5LiA5Liq5pyJ5pWI55qEIHN1Ym1vZHVsZS0taGVscGVyIOWtkOWRveS7pCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo4Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiBbPG9wdGlvbnM+XSA8bmFtZT4gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiBbPOmAiemhuT5dIDzlkI3np7A+IFs85byV55SoPl0iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OQorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bmFtZT4iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA85ZCN56ewPiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MAorbXNnaWQgInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiCittc2dzdHIgIuS4jeaYvuekuumdnuespuWPt++8iOWIhuemu+eahO+8ieW8leeUqOeahOmUmeivr+S/oeaBryIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MQorbXNnaWQgImRlbGV0ZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIuWIoOmZpOespuWPt+W8leeUqCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MgorbXNnaWQgInNob3J0ZW4gcmVmIG91dHB1dCIKK21zZ3N0ciAi57yp55+t5byV55So6L6T5Ye6IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiIKK21zZ3N0ciAi5Y6f5ZugIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICLmm7TmlrDnmoTljp/lm6AiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjUKK21zZ2lkICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl1cbiIKKyJcdFx0PHRhZ25hbWU+IFs8aGVhZD5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA85raI5oGvPiB8IC1GIDzmlofku7Y+XVxuIgorIlx0XHQ85qCH562+5ZCNPiBbPOWktD5dIgorCisjOiBidWlsdGluL3RhZy5jOjI3Cittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLWQgPOagh+etvuWQjT4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjgKK21zZ2lkICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPGNvbW1pdD5dIFstLSIKKyJwb2ludHMtYXQgPG9iamVjdD5dXG4iCisiXHRcdFstLWZvcm1hdD08Zm9ybWF0Pl0gWy0tW25vLV1tZXJnZWQgWzxjb21taXQ+XV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIC1sIFstbls85pWw5a2XPl1dIFstLWNvbnRhaW5zIDzmj5DkuqQ+XSBbLS1uby1jb250YWlucyA85o+Q5LqkPl0gWy0tcG9pbnRzLSIKKyJhdCA85a+56LGhPl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTzmoLzlvI8+XSBbLS1bbm8tXW1lcmdlZCBbPOaPkOS6pD5dXSBbPOaooeW8jz4uLi5dIgorCisjOiBidWlsdGluL3RhZy5jOjMwCittc2dpZCAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9POagvOW8jz5dIDzmoIfnrb7lkI0+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIuacquWPkeeOsOagh+etviAnJXMn44CCIgorCisjOiBidWlsdGluL3RhZy5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIuW3suWIoOmZpOagh+etviAnJXMn77yI5pu+5Li6ICVz77yJXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIui+k+WFpeS4gOS4quagh+etvuivtOaYju+8mlxuIgorIiAgJXNcbiIKKyLku6UgJyVjJyDlvIDlpLTnmoTooYzlsIbooqvlv73nlaXjgIJcbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKK21zZ3N0ciAiIgorIlxuIgorIui+k+WFpeS4gOS4quagh+etvuivtOaYju+8mlxuIgorIiAgJXNcbiIKKyLku6UgJyVjJyDlvIDlpLTnmoTooYzlsIbooqvkv53nlZnvvIzlpoLmnpzmgqjmhL/mhI/kuZ/lj6/ku6XliKDpmaTlroPku6zjgIJcbiIKKworIzogYnVpbHRpbi90YWcuYzoxOTgKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICLml6Dms5Xnrb7nvbLmoIfnrb4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjAwCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIgorbXNnc3RyICLml6Dms5XlhpnmoIfnrb7mlofku7YiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBjcmVhdGVkIGEgbmVzdGVkIHRhZy4gVGhlIG9iamVjdCByZWZlcnJlZCB0byBieSB5b3VyIG5ldyB0YWcgaXNcbiIKKyJhbHJlYWR5IGEgdGFnLiBJZiB5b3UgbWVhbnQgdG8gdGFnIHRoZSBvYmplY3QgdGhhdCBpdCBwb2ludHMgdG8sIHVzZTpcbiIKKyJcbiIKKyJcdGdpdCB0YWcgLWYgJXMgJXNee30iCittc2dzdHIgIiIKKyLmgqjliJvlu7rkuobkuIDkuKrltYzlpZfnmoTmoIfnrb7jgILmgqjnmoTmlrDmoIfnrb7mjIflkJHnmoTlr7nosaHlt7Lnu4/mmK/kuIDkuKrmoIfnrb7jgILlpoLmnpzmgqjmg7PopoFcbiIKKyLlr7nlhbbmjIflkJHnmoTnm67moIfliJvlu7rmoIfnrb7vvIzkvb/nlKjvvJpcbiIKKyJcbiIKKyJcdGdpdCB0YWcgLWYgJXMgJXNee30iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjMyCittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAi5Z2P55qE5a+56LGh57G75Z6L44CCIgorCisjOiBidWlsdGluL3RhZy5jOjI4NAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAi5peg5qCH562+6K+05piO77yfIgorCisjOiBidWlsdGluL3RhZy5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgdGFnIG1lc3NhZ2UgaGFzIGJlZW4gbGVmdCBpbiAlc1xuIgorbXNnc3RyICLmoIfnrb7or7TmmI7ooqvkv53nlZnlnKggJXNcbiIKKworIzogYnVpbHRpbi90YWcuYzo0MDIKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAi5YiX5Ye65qCH562+5ZCN56ewIgorCisjOiBidWlsdGluL3RhZy5jOjQwNAorbXNnaWQgInByaW50IDxuPiBsaW5lcyBvZiBlYWNoIHRhZyBtZXNzYWdlIgorbXNnc3RyICLmr4/kuKrmoIfnrb7kv6Hmga/miZPljbAgPG4+IOihjCIKKworIzogYnVpbHRpbi90YWcuYzo0MDYKK21zZ2lkICJkZWxldGUgdGFncyIKK21zZ3N0ciAi5Yig6Zmk5qCH562+IgorCisjOiBidWlsdGluL3RhZy5jOjQwNworbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICLpqozor4HmoIfnrb4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA5Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIuagh+etvuWIm+W7uumAiemhuSIKKworIzogYnVpbHRpbi90YWcuYzo0MTEKK21zZ2lkICJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiCittc2dzdHIgIumZhOazqOagh+etvu+8jOmcgOimgeS4gOS4quivtOaYjiIKKworIzogYnVpbHRpbi90YWcuYzo0MTMKK21zZ2lkICJ0YWcgbWVzc2FnZSIKK21zZ3N0ciAi5qCH562+6K+05piOIgorCisjOiBidWlsdGluL3RhZy5jOjQxNQorbXNnaWQgImZvcmNlIGVkaXQgb2YgdGFnIG1lc3NhZ2UiCittc2dzdHIgIuW8uuWItue8lui+keagh+etvuivtOaYjiIKKworIzogYnVpbHRpbi90YWcuYzo0MTYKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICLpmYTms6jlubbpmYTliqAgR1BHIOetvuWQjeeahOagh+etviIKKworIzogYnVpbHRpbi90YWcuYzo0MTkKK21zZ2lkICJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICLkvb/nlKjlj6blpJbnmoTnp4HpkqXnrb7lkI3or6XmoIfnrb4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIwCittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAi5aaC5p6c5a2Y5Zyo77yM5pu/5o2i546w5pyJ55qE5qCH562+IgorCisjOiBidWlsdGluL3RhZy5jOjQyMSBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjkKK21zZ2lkICJjcmVhdGUgYSByZWZsb2ciCittc2dzdHIgIuWIm+W7uuW8leeUqOaXpeW/lyIKKworIzogYnVpbHRpbi90YWcuYzo0MjMKK21zZ2lkICJUYWcgbGlzdGluZyBvcHRpb25zIgorbXNnc3RyICLmoIfnrb7liJfooajpgInpobkiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI0Cittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICLku6XliJfnmoTmlrnlvI/mmL7npLrmoIfnrb7liJfooagiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI1IGJ1aWx0aW4vdGFnLmM6NDI3Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLlj6rmiZPljbDljIXlkKvor6Xmj5DkuqTnmoTmoIfnrb4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI2IGJ1aWx0aW4vdGFnLmM6NDI4Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLlj6rmiZPljbDkuI3ljIXlkKvor6Xmj5DkuqTnmoTmoIfnrb4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI5Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAi5Y+q5omT5Y2w5bey57uP5ZCI5bm255qE5qCH562+IgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICLlj6rmiZPljbDlsJrmnKrlkIjlubbnmoTmoIfnrb4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDM0Cittc2dpZCAicHJpbnQgb25seSB0YWdzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgIuWPquaJk+WNsOaMh+WQkeivpeWvueixoeeahOagh+etviIKKworIzogYnVpbHRpbi90YWcuYzo0ODIKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4g5ZKMIC1uIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi90YWcuYzo1MDQKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiLW4g6YCJ6aG55Y+q5YWB6K6455So5Zyo5YiX6KGo5pi+56S65qih5byPIgorCisjOiBidWlsdGluL3RhZy5jOjUwNgorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIi0tY29udGFpbnMg6YCJ6aG55Y+q5YWB6K6455So5Zyo5YiX6KGo5pi+56S65qih5byPIgorCisjOiBidWlsdGluL3RhZy5jOjUwOAorbXNnaWQgIi0tbm8tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIi0tbm8tY29udGFpbnMg6YCJ6aG55Y+q5YWB6K6455So5Zyo5YiX6KGo5pi+56S65qih5byPIgorCisjOiBidWlsdGluL3RhZy5jOjUxMAorbXNnaWQgIi0tcG9pbnRzLWF0IG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICItLXBvaW50cy1hdCDpgInpobnlj6rlhYHorrjnlKjlnKjliJfooajmmL7npLrmqKHlvI8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEyCittc2dpZCAiLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIi0tbWVyZ2VkIOWSjCAtLW5vLW1lcmdlZCDpgInpobnlj6rlhYHorrjnlKjlnKjliJfooajmmL7npLrmqKHlvI8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTIzCittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICLlj6rlhYHorrjkuIDkuKogLUYg5oiWIC1tIOmAiemhueOAgiIKKworIzogYnVpbHRpbi90YWcuYzo1NDIKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgIuWkquWkmuWPguaVsCIKKworIzogYnVpbHRpbi90YWcuYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iCittc2dzdHIgIiclcycg5LiN5piv5LiA5Liq5pyJ5pWI55qE5qCH562+5ZCN56ew44CCIgorCisjOiBidWlsdGluL3RhZy5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi5qCH562+ICclcycg5bey5a2Y5ZyoIgorCisjOiBidWlsdGluL3RhZy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIuW3suabtOaWsOagh+etviAnJXMn77yI5pu+5Li6ICVz77yJXG4iCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1MDIKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAi5bGV5byA5a+56LGh5LitIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLliJvlu7rnm67lvZUgJXMg5aSx6LSlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgIuWIm+W7uuaWh+S7tiAlcyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAi5Yig6Zmk5paH5Lu2ICVzIOWksei0pSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTUgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIuWIoOmZpOebruW9lSAlcyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRlc3RpbmcgbXRpbWUgaW4gJyVzJyAiCittc2dzdHIgIuWcqCAnJXMnIOS4rea1i+ivlSBtdGltZSAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTU0Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGZpbGUiCittc2dzdHIgIua3u+WKoOS4gOS4quaWsOaWh+S7tuWQju+8jOebruW9leeahOeKtuaAgeS/oeaBr+acquaUueWPmCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNjcKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICLmt7vliqDkuIDkuKrmlrDnm67lvZXlkI7vvIznm67lvZXnmoTnirbmgIHkv6Hmga/mnKrmlLnlj5giCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTgwCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIHVwZGF0aW5nIGEgZmlsZSIKK21zZ3N0ciAi5pu05paw5LiA5Liq5paH5Lu25ZCO77yM55uu5b2V55qE54q25oCB5L+h5oGv6KKr5L+u5pS5IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5MQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciBhZGRpbmcgYSBmaWxlIGluc2lkZSBzdWJkaXJlY3RvcnkiCittc2dzdHIgIuWcqOWtkOebruW9leS4rea3u+WKoOaWh+S7tuWQju+8jOebruW9leeahOeKtuaAgeS/oeaBr+iiq+S/ruaUuSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDIKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGZpbGUiCittc2dzdHIgIuWIoOmZpOS4gOS4quaWh+S7tuWQju+8jOebruW9leeahOeKtuaAgeS/oeaBr+acquaUueWPmCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTUKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAi5Yig6Zmk5LiA5Liq55uu5b2V5ZCO77yM55uu5b2V55qE54q25oCB5L+h5oGv5pyq5pS55Y+YIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIyMgorbXNnaWQgIiBPSyIKK21zZ3N0ciAiIE9LIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjU5MQorbXNnaWQgImdpdCB1cGRhdGUtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1pbmRleCBbPOmAiemhuT5dIFstLV0gWzzmlofku7Y+Li4uXSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzQKK21zZ2lkICJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiCittc2dzdHIgIuW9k+e0ouW8lemcgOimgeabtOaWsOaXtue7p+e7reWIt+aWsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzcKK21zZ2lkICJyZWZyZXNoOiBpZ25vcmUgc3VibW9kdWxlcyIKK21zZ3N0ciAi5Yi35paw77ya5b+955Wl5a2Q5qih57uEIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MAorbXNnaWQgImRvIG5vdCBpZ25vcmUgbmV3IGZpbGVzIgorbXNnc3RyICLkuI3lv73nlaXmlrDnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgyCittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgIuiuqeaWh+S7tuabv+aNouebruW9le+8iOWPjeS5i+S6pueEtu+8iSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODQKK21zZ2lkICJub3RpY2UgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICLpgJrnn6Xmlofku7bku47lt6XkvZzljLrkuKLlpLEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg2Cittc2dpZCAicmVmcmVzaCBldmVuIGlmIGluZGV4IGNvbnRhaW5zIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgIuWNs+S9v+e0ouW8leWMuuWMheWQq+acquWQiOW5tueahOadoeebruS5n+aJp+ihjOWIt+aWsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODkKK21zZ2lkICJyZWZyZXNoIHN0YXQgaW5mb3JtYXRpb24iCittc2dzdHIgIuWIt+aWsOe7n+iuoeS/oeaBryIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTMKK21zZ2lkICJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciCittc2dzdHIgIuexu+S8vOS6jiAtLXJlZnJlc2jvvIzkvYbmmK/lv73nlaUgYXNzdW1lLXVuY2hhbmdlZCDorr7nva4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk3Cittc2dpZCAiPG1vZGU+LDxvYmplY3Q+LDxwYXRoPiIKK21zZ3N0ciAiPOWtmOWPluaooeW8jz4sPOWvueixoT4sPOi3r+W+hD4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk4Cittc2dpZCAiYWRkIHRoZSBzcGVjaWZpZWQgZW50cnkgdG8gdGhlIGluZGV4IgorbXNnc3RyICLmt7vliqDmjIflrprnmoTmnaHnm67liLDntKLlvJXljLoiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwOAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAi5oqK5paH5Lu25qCH6K6w5Li6IFwi5rKh5pyJ5Y+Y5pu0XCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxMQorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAi5riF6ZmkIGFzc3VtZWQtdW5jaGFuZ2VkIOS9jSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE0Cittc2dpZCAibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIKK21zZ3N0ciAi5oqK5paH5Lu25qCH6K6w5Li6IFwi5LuF57Si5byVXCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNworbXNnaWQgImNsZWFyIHNraXAtd29ya3RyZWUgYml0IgorbXNnc3RyICLmuIXpmaQgc2tpcC13b3JrdHJlZSDkvY0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMAorbXNnaWQgImRvIG5vdCB0b3VjaCBpbmRleC1vbmx5IGVudHJpZXMiCittc2dzdHIgIuS4jeimgeinpueisOS7hee0ouW8leadoeebriIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIyCittc2dpZCAiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIuWPqua3u+WKoOWIsOe0ouW8leWMuu+8m+S4jea3u+WKoOWvueixoeWIsOWvueixoeW6kyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI0Cittc2dpZCAicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIKK21zZ3N0ciAi5Y2z5L2/5a2Y5Zyo5bel5L2c5Yy66YeM77yM5Lmf5Yig6Zmk6Lev5b6EIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjYKK21zZ2lkICJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiCittc2dzdHIgIuaQuuW4piAtLXN0ZGlu77ya6L6T5YWl55qE6KGM5LulIG51bGwg5a2X56ym57uI5q2iIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjgKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLku47moIflh4bovpPlhaXkuK3or7vlj5bpnIDopoHmm7TmlrDnmoTot6/lvoTliJfooagiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzMgorbXNnaWQgImFkZCBlbnRyaWVzIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGluZGV4IgorbXNnc3RyICLku47moIflh4bovpPlhaXmt7vliqDmnaHnm67liLDntKLlvJXljLoiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzNgorbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAi5Li65oyH5a6a5paH5Lu26YeN5paw55Sf5oiQ56ysMuWSjOesrDPmmoLlrZjljLoiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0MAorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICLlj6rmm7TmlrDkuI4gSEVBRCDkuI3lkIznmoTmnaHnm64iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NAorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgIuW/veeVpeW3peS9nOWMuuS4ouWkseeahOaWh+S7tiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ3Cittc2dpZCAicmVwb3J0IGFjdGlvbnMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICLlnKjmoIflh4bovpPlh7rmmL7npLrmk43kvZwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0OQorbXNnaWQgIihmb3IgcG9yY2VsYWlucykgZm9yZ2V0IHNhdmVkIHVucmVzb2x2ZWQgY29uZmxpY3RzIgorbXNnc3RyICIoZm9yIHBvcmNlbGFpbnMpIOW/mOiusOS/neWtmOeahOacquino+WGs+eahOWGsueqgSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDUzCittc2dpZCAid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiCittc2dzdHIgIuS7pei/meenjeagvOW8j+WGmeWFpee0ouW8leWMuiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU1Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIuWQr+eUqOaIluemgeeUqOe0ouW8leaLhuWIhiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU3Cittc2dpZCAiZW5hYmxlL2Rpc2FibGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICLlkK/nlKgv56aB55So5a+55pyq6Lef6Liq5paH5Lu255qE57yT5a2YIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTkKK21zZ2lkICJ0ZXN0IGlmIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAi5rWL6K+V5paH5Lu257O757uf5piv5ZCm5pSv5oyB5pyq6Lef6Liq5paH5Lu257yT5a2YIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjEKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAi5peg6ZyA5qOA5rWL5paH5Lu257O757uf77yM5ZCv55So5a+55pyq6Lef6Liq5paH5Lu255qE57yT5a2YIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjMKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGluZGV4IGV2ZW4gaWYgaXMgbm90IGZsYWdnZWQgYXMgY2hhbmdlZCIKK21zZ3N0ciAi5Y2z5L2/5rKh5pyJ6KKr5qCH6K6w5Li65bey5pu05pS577yM5Lmf6KaB5YaZ5Ye657Si5byVIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjUKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBmaWxlIHN5c3RlbSBtb25pdG9yIgorbXNnc3RyICLlkK/nlKjmiJbnpoHnlKjmlofku7bns7vnu5/nm5HmjqciCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NworbXNnaWQgIm1hcmsgZmlsZXMgYXMgZnNtb25pdG9yIHZhbGlkIgorbXNnc3RyICLmoIforrDmlofku7bkuLogZnNtb25pdG9yIOacieaViCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDcwCittc2dpZCAiY2xlYXIgZnNtb25pdG9yIHZhbGlkIGJpdCIKK21zZ3N0ciAi5riF6ZmkIGZzbW9uaXRvciDmnInmlYjkvY0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE3MworbXNnaWQgIiIKKyJjb3JlLnNwbGl0SW5kZXggaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImVuYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiIgorImNvcmUuc3BsaXRJbmRleCDooqvorr7nva7kuLogZmFsc2XjgILlpoLmnpzmgqjnoa7lrp7opoHlkK/nlKjntKLlvJXmi4bliIbvvIzor7fliKDpmaTmiJbkv67mlLnlroPjgIIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE4MgorbXNnaWQgIiIKKyJjb3JlLnNwbGl0SW5kZXggaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiIgorImNvcmUuc3BsaXRJbmRleCDooqvorr7nva7kuLogdHJ1ZeOAguWmguaenOaCqOehruWunuimgeemgeeUqOe0ouW8leaLhuWIhu+8jOivt+WIoOmZpOaIluS/ruaUueWug+OAgiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk0Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZGlzYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSDooqvorr7nva7kuLogdHJ1ZeOAguWmguaenOaCqOehruWunuimgeemgeeUqOacqui3n+i4quaWh+S7tue8k+WtmO+8jOivt+WIoOmZpOaIluS/riIKKyLmlLnlroPjgIIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE5OAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAi57yT5a2Y5pyq6Lef6Liq5paH5Lu26KKr56aB55SoIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMDYKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZW5hYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIOiiq+iuvue9ruS4uiBmYWxzZeOAguWmguaenOaCqOehruWunuimgeWQr+eUqOacqui3n+i4quaWh+S7tue8k+WtmO+8jOivt+WIoOmZpOaIliIKKyLkv67mlLnlroPjgIIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZW5hYmxlZCBmb3IgJyVzJyIKK21zZ3N0ciAi57yT5a2Y5pyq6Lef6Liq5paH5Lu25ZyoICclcycg5ZCv55SoIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMTgKK21zZ2lkICJjb3JlLmZzbW9uaXRvciBpcyB1bnNldDsgc2V0IGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBlbmFibGUgZnNtb25pdG9yIgorbXNnc3RyICJjb3JlLmZzbW9uaXRvciDmnKrorr7nva7vvJvlpoLmnpzmg7PopoHlkK/nlKggZnNtb25pdG9yIOivt+iuvue9ruivpemAiemhuSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjIyCittc2dpZCAiZnNtb25pdG9yIGVuYWJsZWQiCittc2dzdHIgImZzbW9uaXRvciDooqvlkK/nlKgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyNQorbXNnaWQgIiIKKyJjb3JlLmZzbW9uaXRvciBpcyBzZXQ7IHJlbW92ZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBmc21vbml0b3IiCittc2dzdHIgImNvcmUuZnNtb25pdG9yIOW3suiuvue9ru+8m+WmguaenOaDs+imgeemgeeUqCBmc21vbml0b3Ig6K+356e76Zmk6K+l6YCJ6aG5IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjkKK21zZ2lkICJmc21vbml0b3IgZGlzYWJsZWQiCittc2dzdHIgImZzbW9uaXRvciDooqvnpoHnlKgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEwCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPOmAiemhuT5dIC1kIDzlvJXnlKjlkI0+IFs85pen5YC8Pl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gICAgPHJlZm5hbWU+IDxuZXctdmFsPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzzpgInpobk+XSAgICA85byV55So5ZCNPiA85paw5YC8PiBbPOaXp+WAvD5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMgorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzzpgInpobk+XSAtLXN0ZGluIFstel0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NAorbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICLliKDpmaTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInVwZGF0ZSA8cmVmbmFtZT4gbm90IHRoZSBvbmUgaXQgcG9pbnRzIHRvIgorbXNnc3RyICLmm7TmlrAgPOW8leeUqOWQjT4g5pys6Lqr6ICM5LiN5piv5a6D5oyH5ZCR55qE5byV55SoIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjcKK21zZ2lkICJzdGRpbiBoYXMgTlVMLXRlcm1pbmF0ZWQgYXJndW1lbnRzIgorbXNnc3RyICLmoIflh4bovpPlhaXmnInku6UgTlVMIOWtl+espue7iOatoueahOWPguaVsCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgIuS7juagh+WHhui+k+WFpeivu+WPluabtOaWsCIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo3Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE1Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAi5LuO5aS05byA5aeL5pu05paw5paH5Lu25L+h5oGvIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MTEKK21zZ2lkICJnaXQgdXBsb2FkLXBhY2sgWzxvcHRpb25zPl0gPGRpcj4iCittc2dzdHIgImdpdCB1cGxvYWQtcGFjayBbPOmAiemhuT5dIDznm67lvZU+IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjMgdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE3Cittc2dpZCAicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIgorbXNnc3RyICLlnKjkuIDmrKHljZXni6znmoTor7fmsYIv5ZON5bqU5LmL5ZCO6YCA5Ye6IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjUKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGluaXRpYWwgcmVmIGFkdmVydGlzZW1lbnQiCittc2dzdHIgIuWcqOWIneWni+eahOW8leeUqOW5v+WRiuWQjueri+WNs+mAgOWHuiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI3Cittc2dpZCAiZG8gbm90IHRyeSA8ZGlyZWN0b3J5Pi8uZ2l0LyBpZiA8ZGlyZWN0b3J5PiBpcyBubyBHaXQgZGlyZWN0b3J5IgorbXNnc3RyICLlpoLmnpwgPOebruW9lT4g5LiN5piv5LiA5LiqIEdpdCDnm67lvZXvvIzkuI3opoHlsJ3or5UgPOebruW9lT4vLmdpdC8iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyOQorbXNnaWQgImludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5IgorbXNnc3RyICLkuI3mtLvliqggPG4+IOenkumSn+WQjue7iOatouS8oOi+kyIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6MTkKK21zZ2lkICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDzmj5DkuqQ+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo2OAorbXNnaWQgInByaW50IGNvbW1pdCBjb250ZW50cyIKK21zZ3N0ciAi5omT5Y2w5o+Q5Lqk5YaF5a65IgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo2OSBidWlsdGluL3ZlcmlmeS10YWcuYzozNworbXNnaWQgInByaW50IHJhdyBncGcgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAi5omT5Y2w5Y6f5aeLIGdwZyDnirbmgIHovpPlh7oiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NQorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA85YyFPi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY1Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAi5YaX6ZW/6L6T5Ye6IgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjcKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAi5Y+q5pi+56S657uf6K6hIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxOAorbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9POagvOW8jz5dIDzmoIfnrb4+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozNgorbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAi5omT5Y2w5qCH562+5YaF5a65IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTcKK21zZ2lkICJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxwYXRoPiBbPGNvbW1pdC1pc2g+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGFkZCBbPOmAiemhuT5dIDzot6/lvoQ+IFs85o+Q5LqkPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOAorbXNnaWQgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgbGlzdCBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTkKK21zZ2lkICJnaXQgd29ya3RyZWUgbG9jayBbPG9wdGlvbnM+XSA8cGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsb2NrIFs86YCJ6aG5Pl0gPOi3r+W+hD4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMAorbXNnaWQgImdpdCB3b3JrdHJlZSBtb3ZlIDx3b3JrdHJlZT4gPG5ldy1wYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIG1vdmUgPOW3peS9nOWMuj4gPOaWsOi3r+W+hD4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMQorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHBydW5lIFs86YCJ6aG5Pl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMgorbXNnaWQgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHRpb25zPl0gPHdvcmt0cmVlPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPOmAiemhuT5dIDzlt6XkvZzljLo+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjMKK21zZ2lkICJnaXQgd29ya3RyZWUgdW5sb2NrIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHVubG9jayA86Lev5b6EPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjYwIGJ1aWx0aW4vd29ya3RyZWUuYzo4OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSAnJXMnIgorbXNnc3RyICLliKDpmaQgJyVzJyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIKK21zZ3N0ciAi5Yig6Zmk5bel5L2c5Yy6LyVz77ya5LiN5piv5LiA5Liq5pyJ5pWI55qE55uu5b2VIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi5Yig6ZmkIHdvcmt0cmVlcy8lc++8mmdpdGRpciDmlofku7bkuI3lrZjlnKgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MCBidWlsdGluL3dvcmt0cmVlLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICLliKDpmaQgd29ya3RyZWVzLyVz77ya5peg5rOV6K+75Y+WIGdpdGRpciDmlofku7YgKCVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBzaG9ydCByZWFkIChleHBlY3RlZCAlPFBSSXVNQVg+IGJ5dGVzLCByZWFkICIKKyIlPFBSSXVNQVg+KSIKK21zZ3N0ciAi5Yig6Zmk5bel5L2c5qCRLyVz77ya6K+75Y+W6L+H55+t77yI5pyf5pybICU8UFJJdU1BWD4g5a2X6IqC77yM6K+75Y+WICU8UFJJdU1BWD7vvIkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICLliKDpmaQgd29ya3RyZWVzLyVz77ya5peg5pWI55qEIGdpdGRpciDmlofku7YiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICLliKDpmaQgd29ya3RyZWVzLyVz77yaZ2l0ZGlyIOaWh+S7tueahOaMh+WQkeS4jeWtmOWcqCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAi5oql5ZGK5riF6Zmk55qE5bel5L2c5Yy6IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY3Cittc2dpZCAiZXhwaXJlIHdvcmtpbmcgdHJlZXMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIuWwhuaXqeS6jiA85pe26Ze0PiDnmoTlt6XkvZzljLrov4fmnJ8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJyVzJyDlt7Lnu4/lrZjlnKgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlLWFkZCB3b3JrdHJlZSAnJXMnIgorbXNnc3RyICLml6Dms5Xlho3mrKHmt7vliqDlt6XkvZzljLogJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGxvY2tlZCB3b3JrdHJlZTtcbiIKKyJ1c2UgJ2FkZCAtZiAtZicgdG8gb3ZlcnJpZGUsIG9yICd1bmxvY2snIGFuZCAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisiJyVzJyDmmK/kuIDkuKrkuKLlpLHkvYbplIHlrprnmoTlt6XkvZzljLrvvIzkvb/nlKhcbiIKKyInYWRkIC1mIC1mJyDopobnm5bvvIzmiJYgJ3VubG9jaycg5ZKMICdwcnVuZScg5oiWICdyZW1vdmUnIOa4hemZpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGFscmVhZHkgcmVnaXN0ZXJlZCB3b3JrdHJlZTtcbiIKKyJ1c2UgJ2FkZCAtZicgdG8gb3ZlcnJpZGUsIG9yICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKyInJXMnIOaYr+S4gOS4quS4ouWkseS9huW3sue7j+azqOWGjOeahOW3peS9nOWMuu+8jOS9v+eUqFxuIgorIidhZGQgLWYnIOimhueblu+8jOaIliAncHJ1bmUnIOaIliAncmVtb3ZlJyDmuIXpmaQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkgb2YgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Yib5bu655uu5b2VICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzIgYnVpbHRpbi93b3JrdHJlZS5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKG5ldyBicmFuY2ggJyVzJykiCittc2dzdHIgIuWHhuWkh+W3peS9nOWMuu+8iOaWsOWIhuaUryAnJXMn77yJIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAocmVzZXR0aW5nIGJyYW5jaCAnJXMnOyB3YXMgYXQgJXMpIgorbXNnc3RyICLlh4blpIflt6XkvZzljLrvvIjph43nva7liIbmlK8gJyVzJ++8jOS5i+WJjeS4uiAlc++8iSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGNoZWNraW5nIG91dCAnJXMnKSIKK21zZ3N0ciAi5YeG5aSH5bel5L2c5Yy677yI5qOA5Ye6ICclcyfvvIkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChkZXRhY2hlZCBIRUFEICVzKSIKK21zZ3N0ciAi5YeG5aSH5bel5L2c5Yy677yI5YiG56a75aS05oyH6ZKIICVz77yJIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDkwCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICLmo4Dlh7ogPOWIhuaUrz7vvIzljbPkvb/lt7Lnu4/ooqvmo4Dlh7rliLDlhbblroPlt6XkvZzljLoiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTMKK21zZ2lkICJjcmVhdGUgYSBuZXcgYnJhbmNoIgorbXNnc3RyICLliJvlu7rkuIDkuKrmlrDliIbmlK8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTUKK21zZ2lkICJjcmVhdGUgb3IgcmVzZXQgYSBicmFuY2giCittc2dzdHIgIuWIm+W7uuaIlumHjee9ruS4gOS4quWIhuaUryIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5NworbXNnaWQgInBvcHVsYXRlIHRoZSBuZXcgd29ya2luZyB0cmVlIgorbXNnc3RyICLnlJ/miJDmlrDnmoTlt6XkvZzljLoiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTgKK21zZ2lkICJrZWVwIHRoZSBuZXcgd29ya2luZyB0cmVlIGxvY2tlZCIKK21zZ3N0ciAi6ZSB5a6a5paw5bel5L2c5Yy6IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAxCittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtYnJhbmNoKDEpKSIKK21zZ3N0ciAi6K6+572u6Lef6Liq5qih5byP77yI5Y+C6KeBIGdpdC1icmFuY2goMSnvvIkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDQKK21zZ2lkICJ0cnkgdG8gbWF0Y2ggdGhlIG5ldyBicmFuY2ggbmFtZSB3aXRoIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi5bCd6K+V5Li65paw5YiG5pSv5ZCN5Yy56YWN5LiA5Liq6L+c56iL6Lef6Liq5YiG5pSvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTEyCittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWLjgIEtQiDlkowgLS1kZXRhY2gg5piv5LqS5pal55qEIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTczCittc2dpZCAiLS1bbm8tXXRyYWNrIGNhbiBvbmx5IGJlIHVzZWQgaWYgYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQiCittc2dzdHIgIuWPquiDveWcqOWIm+W7uuaWsOWIhuaUr+aXtuS9v+eUqOmAiemhuSAtLVtuby1ddHJhY2sgIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjczCittc2dpZCAicmVhc29uIGZvciBsb2NraW5nIgorbXNnc3RyICLplIHlrprljp/lm6AiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2ODUgYnVpbHRpbi93b3JrdHJlZS5jOjcxOCBidWlsdGluL3dvcmt0cmVlLmM6NzkyCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIOS4jeaYr+S4gOS4quW3peS9nOWMuiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4NyBidWlsdGluL3dvcmt0cmVlLmM6NzIwCittc2dpZCAiVGhlIG1haW4gd29ya2luZyB0cmVlIGNhbm5vdCBiZSBsb2NrZWQgb3IgdW5sb2NrZWQiCittc2dzdHIgIuS4u+W3peS9nOWMuuaXoOazleiiq+WKoOmUgeaIluino+mUgSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkLCByZWFzb246ICVzIgorbXNnc3RyICInJXMnIOW3suiiq+mUgeWumu+8jOWOn+WboO+8miVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiCittc2dzdHIgIiclcycg5bey6KKr6ZSB5a6aIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiJyVzJyDmnKrooqvplIHlrpoiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NjMKK21zZ2lkICJ3b3JraW5nIHRyZWVzIGNvbnRhaW5pbmcgc3VibW9kdWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVtb3ZlZCIKK21zZ3N0ciAi5LiN6IO956e75Yqo5oiW5Yig6Zmk5YyF5ZCr5a2Q5qih57uE55qE5bel5L2c5Yy6IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzcxCittc2dpZCAiZm9yY2UgbW92ZSBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAi5by65Yi256e75Yqo77yM5Y2z5L2/5bel5L2c5Yy65piv6ISP55qE5oiW5bey6ZSB5a6aIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzk0IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIOaYr+S4gOS4quS4u+W3peS9nOWMuiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmlndXJlIG91dCBkZXN0aW5hdGlvbiBuYW1lIGZyb20gJyVzJyIKK21zZ3N0ciAi5peg5rOV5LuOICclcycg566X5Ye655uu5qCH5ZCN56ewIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInRhcmdldCAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLnm67moIcgJyVzJyDlt7LlrZjlnKgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyLml6Dms5Xnp7vliqjkuIDkuKrplIHlrprnmoTlt6XkvZzljLrvvIzplIHlrprljp/lm6DvvJolc1xuIgorIuS9v+eUqCAnbW92ZSAtZiAtZicg6KaG55uW5oiW5YWI6Kej6ZSBIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODE1Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorIuaXoOazleenu+WKqOS4gOS4qumUgeWumueahOW3peS9nOWMuu+8jFxuIgorIuS9v+eUqCAnbW92ZSAtZiAtZicg6KaG55uW5oiW5YWI6Kej6ZSBIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODE4CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICLpqozor4HlpLHotKXvvIzml6Dms5Xnp7vliqjlt6XkvZzljLrvvJolcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbW92ZSAnJXMnIHRvICclcyciCittc2dzdHIgIuenu+WKqCAnJXMnIOWIsCAnJXMnIOWksei0pSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnIgorbXNnc3RyICLlnKggJyVzJyDkuK3miafooYwgJ2dpdCBzdGF0dXMnIOWksei0pSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNvbnRhaW5zIG1vZGlmaWVkIG9yIHVudHJhY2tlZCBmaWxlcywgdXNlIC0tZm9yY2UgdG8gZGVsZXRlIGl0IgorbXNnc3RyICInJXMnIOWMheWQq+S/ruaUueaIluacqui3n+i4queahOaWh+S7tu+8jOS9v+eUqCAtLWZvcmNlIOWIoOmZpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICLlnKggJyVzJyDkuK3miafooYwgJ2dpdCBzdGF0dXMnIOWksei0pe+8jOmAgOWHuueggSAlZCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkwMworbXNnaWQgImZvcmNlIHJlbW92YWwgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgIuW8uuWItuWIoOmZpO+8jOWNs+S9v+W3peS9nOWMuuaYr+iEj+eahOaIluW3sumUgeWumiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyLml6Dms5XliKDpmaTkuIDkuKrplIHlrprnmoTlt6XkvZzljLrvvIzplIHlrprljp/lm6DvvJolc1xuIgorIuS9v+eUqCAncmVtb3ZlIC1mIC1mJyDopobnm5bmiJblhYjop6PplIEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjgKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWU7XG4iCisidXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorIuaXoOazleWIoOmZpOS4gOS4qumUgeWumueahOW3peS9nOWMuu+8jFxuIgorIuS9v+eUqCAncmVtb3ZlIC1mIC1mJyDopobnm5bmiJblhYjop6PplIEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCByZW1vdmUgd29ya2luZyB0cmVlOiAlcyIKK21zZ3N0ciAi6aqM6K+B5aSx6LSl77yM5peg5rOV5Yig6Zmk5bel5L2c5Yy677yaJXMiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjE1Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD085YmN57yAPi9dIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOAorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiPOWJjee8gD4vIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOQorbXNnaWQgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIKK21zZ3N0ciAi5bCGIDzliY3nvIA+IOWtkOebruW9leWGheWuueWGmeWIsOS4gOS4quagkeWvueixoSIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MzEKK21zZ2lkICJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIgorbXNnc3RyICLlj6rlr7nosIPor5XmnInnlKgiCisKKyM6IGZhc3QtaW1wb3J0LmM6MzEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCAnbWFyaycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICLpooTmnJ8gJ21hcmsnIOWRveS7pO+8jOW+l+WIsCAlcyIKKworIzogZmFzdC1pbXBvcnQuYzozMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICd0bycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICLpooTmnJ8gJ3RvJyDlkb3ku6TvvIzlvpfliLAgJXMiCisKKyM6IGZhc3QtaW1wb3J0LmM6MzI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJmZWF0dXJlICclcycgZm9yYmlkZGVuIGluIGlucHV0IHdpdGhvdXQgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMiCittc2dzdHIgIuS4jeW4piAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyDnmoTovpPlhaXkuK3npoHmraLkvb/nlKjlip/og70gJyVzJyIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGVybWlzc2lvbnMgb24geW91ciBzb2NrZXQgZGlyZWN0b3J5IGFyZSB0b28gbG9vc2U7IG90aGVyXG4iCisidXNlcnMgbWF5IGJlIGFibGUgdG8gcmVhZCB5b3VyIGNhY2hlZCBjcmVkZW50aWFscy4gQ29uc2lkZXIgcnVubmluZzpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCittc2dzdHIgIiIKKyLmgqjnmoQgc29ja2V0IOebruW9leadg+mZkOi/h+S6juWuveadvu+8jOWFtuS7lueUqOaIt+WPr+iDveS8muivu+WPluaCqOe8k+WtmOeahOiupOivgeS/oeaBr+OAguiAg+iZkeaJpyIKKyLooYzvvJpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjI3MgorbXNnaWQgInByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyB0byBzdGRlcnIiCittc2dzdHIgIuiwg+ivleS/oeaBr+i+k+WHuuWIsOagh+WHhumUmeivryIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgbm90IG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgIuaPkOS6pCAlcyDmsqHmnInmoIforrDkuLrlj6/ovr4iCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNjIKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgIuWkquWkmuaPkOS6pOagh+iusOS4uuWPr+i+viIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjcKK21zZ2lkICJ0ZXN0LXRvb2wgc2VydmUtdjIgWzxvcHRpb25zPl0iCittc2dzdHIgInRlc3QtdG9vbCBzZXJ2ZS12MiBbPOmAiemhuT5dIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTkKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGFkdmVydGlzaW5nIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAi5a+56IO95Yqb5bm/5ZGK5LmL5ZCO56uL5Y2z6YCA5Ye6IgorCisjOiBnaXQuYzoyNworbXNnaWQgIiIKKyJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxwYXRoPl0gWy1jIDxuYW1lPj08dmFsdWU+XVxuIgorIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08cGF0aD5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLXBhdGhdXG4iCisiICAgICAgICAgICBbLXAgfCAtLXBhZ2luYXRlIHwgLVAgfCAtLW5vLXBhZ2VyXSBbLS1uby1yZXBsYWNlLW9iamVjdHNdIFstLSIKKyJiYXJlXVxuIgorIiAgICAgICAgICAgWy0tZ2l0LWRpcj08cGF0aD5dIFstLXdvcmstdHJlZT08cGF0aD5dIFstLW5hbWVzcGFjZT08bmFtZT5dXG4iCisiICAgICAgICAgICA8Y29tbWFuZD4gWzxhcmdzPl0iCittc2dzdHIgIiIKKyJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDzot6/lvoQ+XSBbLWMgPOWQjeensD49POWPluWAvD5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTzot6/lvoQ+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9POi3r+W+hD5dIFstLXdvcmstdHJlZT086Lev5b6EPl0gWy0tbmFtZXNwYWNlPTzlkI3np7A+XVxuIgorIiAgICAgICAgICAgPOWRveS7pD4gWzzlj4LmlbA+XSIKKworIzogZ2l0LmM6MzQKK21zZ2lkICIiCisiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJ0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCBvciBjb25jZXB0LlxuIgorIlNlZSAnZ2l0IGhlbHAgZ2l0JyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS4iCittc2dzdHIgIiIKKyLlkb3ku6QgJ2dpdCBoZWxwIC1hJyDlkowgJ2dpdCBoZWxwIC1nJyDmmL7npLrlj6/nlKjnmoTlrZDlkb3ku6TlkozkuIDkupvmpoLlv7XluK7liqnjgIJcbiIKKyLmn6XnnIsgJ2dpdCBoZWxwIDzlkb3ku6Q+JyDmiJYgJ2dpdCBoZWxwIDzmpoLlv7U+JyDku6Xojrflj5bnu5nlrprlrZDlkb3ku6TmiJbmpoLlv7XnmoRcbiIKKyLluK7liqnjgIJcbiIKKyLmnInlhbPns7vnu5/nmoTmpoLov7DvvIzmn6XnnIsgJ2dpdCBoZWxwIGdpdCfjgIIiCisKKyM6IGdpdC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tZ2l0LWRpclxuIgorbXNnc3RyICLmsqHmnInkuLogLS1naXQtZGlyIOaPkOS+m+ebruW9lVxuIgorCisjOiBnaXQuYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbmFtZXNwYWNlIGdpdmVuIGZvciAtLW5hbWVzcGFjZVxuIgorbXNnc3RyICLmsqHmnInkuLogLS1uYW1lc3BhY2Ug5o+Q5L6b5ZG95ZCN56m66Ze0XG4iCisKKyM6IGdpdC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgIuayoeacieS4uiAtLXdvcmstdHJlZSDmj5Dkvpvnm67lvZVcbiIKKworIzogZ2l0LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByZWZpeCBnaXZlbiBmb3IgLS1zdXBlci1wcmVmaXhcbiIKK21zZ3N0ciAi5rKh5pyJ5Li6IC0tc3VwZXItcHJlZml4IOaPkOS+m+WJjee8gFxuIgorCisjOiBnaXQuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLWMgZXhwZWN0cyBhIGNvbmZpZ3VyYXRpb24gc3RyaW5nXG4iCittc2dzdHIgIuW6lOS4uiAtYyDmj5DkvpvkuIDkuKrphY3nva7lrZfnrKbkuLJcbiIKKworIzogZ2l0LmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLUNcbiIKK21zZ3N0ciAi5rKh5pyJ5Li6IC1DIOaPkOS+m+ebruW9lVxuIgorCisjOiBnaXQuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgIuacquefpemAiemhue+8miVzXG4iCisKKyM6IGdpdC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgYWxpYXMgJyVzJzogJyVzJyIKK21zZ3N0ciAi5Zyo5omp5bGV5Yir5ZCNICclcycg5pe277yaJyVzJyIKKworIzogZ2l0LmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbGlhcyAnJXMnIGNoYW5nZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuIgorIllvdSBjYW4gdXNlICchZ2l0JyBpbiB0aGUgYWxpYXMgdG8gZG8gdGhpcyIKK21zZ3N0ciAiIgorIuWIq+WQjSAnJXMnIOS/ruaUueeOr+Wig+WPmOmHj+OAguaCqOWPr+S7peS9v+eUqOWcqOWIq+WQjeS4rVxuIgorIuS9v+eUqCAnIWdpdCciCisKKyM6IGdpdC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBhbGlhcyBmb3IgJXMiCittc2dzdHIgIiVzIOeahOepuuWIq+WQjSIKKworIzogZ2l0LmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBhbGlhczogJXMiCittc2dzdHIgIumAkuW9kueahOWIq+WQje+8miVzIgorCisjOiBnaXQuYzo0NTkKK21zZ2lkICJ3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAi5Zyo5qCH5YeG6L6T5Ye65YaZ5YWl5aSx6LSlIgorCisjOiBnaXQuYzo0NjEKK21zZ2lkICJ1bmtub3duIHdyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICLliLDmoIflh4bovpPlh7rnmoTmnKrnn6XlhpnlhaXplJnor68iCisKKyM6IGdpdC5jOjQ2MworbXNnaWQgImNsb3NlIGZhaWxlZCBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIuagh+WHhui+k+WHuuWFs+mXreWksei0pSIKKworIzogZ2l0LmM6NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIGxvb3AgZGV0ZWN0ZWQ6IGV4cGFuc2lvbiBvZiAnJXMnIGRvZXMgbm90IHRlcm1pbmF0ZTolcyIKK21zZ3N0ciAi5qOA5rWL5Yiw5Yir5ZCN5b6q546v77yaJyVzJ+eahOaJqeWxleacque7iOatou+8miVzIgorCisjOiBnaXQuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSAlcyBhcyBhIGJ1aWx0aW4iCittc2dzdHIgIuS4jeiDveS9nOS4uuWGhee9ruWRveS7pOWkhOeQhiAlcyIKKworIzogZ2l0LmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1c2FnZTogJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIueUqOazle+8miVzXG4iCisiXG4iCisKKyM6IGdpdC5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBhbnNpb24gb2YgYWxpYXMgJyVzJyBmYWlsZWQ7ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmRcbiIKK21zZ3N0ciAi5bGV5byA5Yir5ZCN5ZG95LukICclcycg5aSx6LSl77yMJyVzJyDkuI3mmK/kuIDkuKogZ2l0IOWRveS7pFxuIgorCisjOiBnaXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iCittc2dzdHIgIui/kOihjOWRveS7pCAnJXMnIOWksei0pe+8miVzXG4iCisKKyM6IGh0dHAuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibmVnYXRpdmUgdmFsdWUgZm9yIGh0dHAucG9zdGJ1ZmZlcjsgZGVmYXVsdGluZyB0byAlZCIKK21zZ3N0ciAiaHR0cC5wb3N0YnVmZmVyIOS4uui0n+WAvO+8jOm7mOiupOS4uiAlZCIKKworIzogaHR0cC5jOjM5OQorbXNnaWQgIkRlbGVnYXRpb24gY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMjIuMCIKK21zZ3N0ciAi5LiN5pSv5oyB5aeU5omY5o6n5Yi277yM5Zug5Li6IGNVUkwgPCA3LjIyLjAiCisKKyM6IGh0dHAuYzo0MDgKK21zZ2lkICJQdWJsaWMga2V5IHBpbm5pbmcgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIuS4jeaUr+aMgeWFrOmSpeaWh+S7tumUgeWumu+8jOWboOS4uiBjVVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6ODc2Cittc2dpZCAiQ1VSTFNTTE9QVF9OT19SRVZPS0Ugbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIuS4jeaUr+aMgSBDVVJMU1NMT1BUX05PX1JFVk9LRe+8jOWboOS4uiBjVVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6OTQ5Cittc2dpZCAiUHJvdG9jb2wgcmVzdHJpY3Rpb25zIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4xOS40IgorbXNnc3RyICLkuI3mlK/mjIHljY/orq7pmZDliLbvvIzlm6DkuLogY1VSTCA8IDcuMTkuNCIKKworIzogaHR0cC5jOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgU1NMIGJhY2tlbmQgJyVzJy4gU3VwcG9ydGVkIFNTTCBiYWNrZW5kczoiCittc2dzdHIgIuS4jeaUr+aMgeeahCBTU0wg5ZCO56uvICclcyfjgILmlK/mjIHnmoQgU1NMIOWQjuerr++8miIKKworIzogaHR0cC5jOjEwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBjVVJMIHdhcyBidWlsdCB3aXRob3V0IFNTTCBiYWNrZW5kcyIKK21zZ3N0ciAi5peg5rOV6K6+572uIFNTTCDlkI7nq6/kuLogJyVzJ++8mmNVUkw6IGNVUkwg5rKh5pyJ5L2/55SoIFNTTCDlkI7nq6/mnoTlu7oiCisKKyM6IGh0dHAuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogYWxyZWFkeSBzZXQiCittc2dzdHIgIuaXoOazleWwhiBTU0wg5ZCO56uv6K6+572u5Li6ICclcyfvvJrlt7Lnu4/orr7nva4iCisKKyM6IGh0dHAuYzoxOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gdXBkYXRlIHVybCBiYXNlIGZyb20gcmVkaXJlY3Rpb246XG4iCisiICBhc2tlZCBmb3I6ICVzXG4iCisiICAgcmVkaXJlY3Q6ICVzIgorbXNnc3RyICIiCisi5LiN6IO95pu05paw6YeN5a6a5ZCR55qEIHVybCBiYXNl77yaXG4iCisiICAgICDor7fmsYLvvJolc1xuIgorIiAgIOmHjeWumuWQke+8miVzIgorCisjOiByZW1vdGUtY3VybC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHF1b3RpbmcgaW4gcHVzaC1vcHRpb24gdmFsdWU6ICclcyciCittc2dzdHIgIuWcqCBwdXNoLW9wdGlvbiDlj5blgLzkuK3ml6DmlYjnmoTlvJXlj7fvvJonJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlc2luZm8vcmVmcyBub3QgdmFsaWQ6IGlzIHRoaXMgYSBnaXQgcmVwb3NpdG9yeT8iCittc2dzdHIgIiVzaW5mby9yZWZzIOaXoOaViO+8mui/meaYr+S4gOS4qiBnaXQg5LuT5bqT5LmI77yfIgorCisjOiByZW1vdGUtY3VybC5jOjM2NAorbXNnaWQgImludmFsaWQgc2VydmVyIHJlc3BvbnNlOyBleHBlY3RlZCBzZXJ2aWNlLCBnb3QgZmx1c2ggcGFja2V0IgorbXNnc3RyICLml6DmlYjnmoTmnI3liqHnq6/lk43lupTjgILpooTmnJ/mnI3liqHvvIzlvpfliLAgZmx1c2gg5YyFIgorCisjOiByZW1vdGUtY3VybC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZ290ICclcyciCittc2dzdHIgIuaXoOaViOeahOacjeWKoeerr+WTjeW6lO+8jOW+l+WIsCAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgbm90IGZvdW5kIgorbXNnc3RyICLku5PlupMgJyVzJyDmnKrmib7liLAiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiJyVzJyDpibTmnYPlpLHotKUiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiCittc2dzdHIgIuaXoOazleiuv+mXriAnJXMn77yaJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIHRvICVzIgorbXNnc3RyICLph43lrprlkJHliLAgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6NTkzCittc2dpZCAic2hvdWxkbid0IGhhdmUgRU9GIHdoZW4gbm90IGdlbnRsZSBvbiBFT0YiCittc2dzdHIgIuW9k+ayoeacieiuvue9rua4qeWSjOWkhOeQhuaWh+S7tue7k+adn+espu+8iEVPRu+8ieaXtu+8jOS4jeW6lOivpeacieaWh+S7tue7k+adn+espiIKKworIzogcmVtb3RlLWN1cmwuYzo2NzMKK21zZ2lkICJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiCittc2dzdHIgIuaXoOazleWAkuWbniBycGMgcG9zdCDmlbDmja4gLSDlsJ3or5Xlop7liqAgaHR0cC5wb3N0QnVmZmVyIgorCisjOiByZW1vdGUtY3VybC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJSUEMgZmFpbGVkOyAlcyIKK21zZ3N0ciAiUlBDIOWksei0peOAgiVzIgorCisjOiByZW1vdGUtY3VybC5jOjc3MworbXNnaWQgImNhbm5vdCBoYW5kbGUgcHVzaGVzIHRoaXMgYmlnIgorbXNnc3RyICLkuI3og73lpITnkIbov5nkuYjlpKfnmoTmjqjpgIEiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZGVmbGF0ZSBlcnJvciAlZCIKK21zZ3N0ciAi5LiN6IO95Y6L57yp6K+35rGC77yMemxpYiDljovnvKnplJnor68gJWQiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZW5kIGVycm9yICVkIgorbXNnc3RyICLkuI3og73ljovnvKnor7fmsYLvvIx6bGliIOe7k+adn+mUmeivryAlZCIKKworIzogcmVtb3RlLWN1cmwuYzoxMDIzCittc2dpZCAiZHVtYiBodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2FwYWJpbGl0aWVzIgorbXNnc3RyICLlk5EgaHR0cCDkvKDovpPkuI3mlK/mjIEgc2hhbGxsb3cg6IO95YqbIgorCisjOiByZW1vdGUtY3VybC5jOjEwMzgKK21zZ2lkICJmZXRjaCBmYWlsZWQuIgorbXNnc3RyICLojrflj5blpLHotKXjgIIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTA4NgorbXNnaWQgImNhbm5vdCBmZXRjaCBieSBzaGExIG92ZXIgc21hcnQgaHR0cCIKK21zZ3N0ciAi5peg5rOV6YCa6L+H5pm66IO9IEhUVFAg6I635Y+WIHNoYTEiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTEzMCByZW1vdGUtY3VybC5jOjExMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAnJXMnIgorbXNnc3RyICLljY/orq7plJnor6/vvJrmnJ/mnJsgc2hhL3JlZu+8jOWNtOW+l+WIsCAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjExNDggcmVtb3RlLWN1cmwuYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiCittc2dzdHIgImh0dHAg5Lyg6L6T5Y2P6K6u5LiN5pSv5oyBICVzIgorCisjOiByZW1vdGUtY3VybC5jOjExODQKK21zZ2lkICJnaXQtaHR0cC1wdXNoIGZhaWxlZCIKK21zZ3N0ciAiZ2l0LWh0dHAtcHVzaCDlpLHotKUiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM2OQorbXNnaWQgInJlbW90ZS1jdXJsOiB1c2FnZTogZ2l0IHJlbW90ZS1jdXJsIDxyZW1vdGU+IFs8dXJsPl0iCittc2dzdHIgInJlbW90ZS1jdXJs77ya55So5rOV77yaZ2l0IHJlbW90ZS1jdXJsIDzov5znqIs+IFs8dXJsPl0iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwMQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybO+8mumUmeivr+ivu+WPluadpeiHqiBnaXQg55qE5ZG95Luk5rWBIgorCisjOiByZW1vdGUtY3VybC5jOjE0MDgKK21zZ2lkICJyZW1vdGUtY3VybDogZmV0Y2ggYXR0ZW1wdGVkIHdpdGhvdXQgYSBsb2NhbCByZXBvIgorbXNnc3RyICJyZW1vdGUtY3VybO+8muWwneivleayoeacieacrOWcsOS7k+W6k+S4i+iOt+WPliIKKworIzogcmVtb3RlLWN1cmwuYzoxNDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS1jdXJsOiB1bmtub3duIGNvbW1hbmQgJyVzJyBmcm9tIGdpdCIKK21zZ3N0ciAicmVtb3RlLWN1cmzvvJrmnKrnn6XnmoTmnaXoh6ogZ2l0IOeahOWRveS7pCAnJXMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NQorbXNnaWQgImFyZ3MiCittc2dzdHIgIuWPguaVsCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODYKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICLlr7nosaHov4fmu6QiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxODMKK21zZ2lkICJleHBpcnktZGF0ZSIKK21zZ3N0ciAi5Yiw5pyf5pe26Ze0IgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTk3Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICLnqbrmk43kvZzvvIjlkJHlkI7lhbzlrrnvvIkiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMDkKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgIuabtOWKoOivpue7hiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxMQorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgIuabtOWKoOWuiemdmSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxNworbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICLnlKggPG4+IOS9jeaVsOWtl+aYvuekuiBTSEEtMSDlk4jluIzlgLwiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICLorr7nva7lpoLkvZXliKDpmaTmj5DkuqTor7TmmI7ph4znmoTnqbrmoLzlkowj5rOo6YeKIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM3Cittc2dpZCAicmVhZCBwYXRoc3BlYyBmcm9tIGZpbGUiCittc2dzdHIgIuS7juaWh+S7tuivu+WPlui3r+W+hOihqOi+vuW8jyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzOAorbXNnaWQgIiIKKyJ3aXRoIC0tcGF0aHNwZWMtZnJvbS1maWxlLCBwYXRoc3BlYyBlbGVtZW50cyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAi5L2/55SoIC0tcGF0aHNwZWMtZnJvbS1maWxl77yM6Lev5b6E6KGo6L6+5byP55So56m65a2X56ym5YiG6ZqUIgorCisjOiByZWYtZmlsdGVyLmg6MTAxCittc2dpZCAia2V5IgorbXNnc3RyICJrZXkiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgIuaOkuW6j+eahOWtl+auteWQjSIKKworIzogcmVyZXJlLmg6NDQKK21zZ2lkICJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiCittc2dzdHIgIuWmguaenOWPr+iDve+8jOmHjeeUqOWGsueqgeino+WGs+abtOaWsOe0ouW8lSIKKworIzogd3Qtc3RhdHVzLmg6NjcKK21zZ2lkICJIRUFEIGRldGFjaGVkIGF0ICIKK21zZ3N0ciAi5aS05oyH6ZKI5YiG56a75LqOICIKKworIzogd3Qtc3RhdHVzLmg6NjgKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICLlpLTmjIfpkojliIbnprvoh6ogIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MAorbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi5re75Yqg5paH5Lu25YaF5a656Iez57Si5byVIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MQorbXNnaWQgIkFwcGx5IGEgc2VyaWVzIG9mIHBhdGNoZXMgZnJvbSBhIG1haWxib3giCittc2dzdHIgIuW6lOeUqOmCrueuseagvOW8j+eahOezu+WIl+ihpeS4gSIKKworIzogY29tbWFuZC1saXN0Lmg6NTIKK21zZ2lkICJBbm5vdGF0ZSBmaWxlIGxpbmVzIHdpdGggY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICLkvb/nlKjmj5DkuqTkv6Hmga/ms6jph4rmlofku7booYwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUzCittc2dpZCAiQXBwbHkgYSBwYXRjaCB0byBmaWxlcyBhbmQvb3IgdG8gdGhlIGluZGV4IgorbXNnc3RyICLlupTnlKjkuIDkuKrooaXkuIHliLDmlofku7blkowv5oiW57Si5byV5Yy6IgorCisjOiBjb21tYW5kLWxpc3QuaDo1NAorbXNnaWQgIkltcG9ydCBhIEdOVSBBcmNoIHJlcG9zaXRvcnkgaW50byBHaXQiCittc2dzdHIgIuWwhuS4gOS4qiBHTlUgQXJjaCDku5PlupPlr7zlhaXliLAgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo1NQorbXNnaWQgIkNyZWF0ZSBhbiBhcmNoaXZlIG9mIGZpbGVzIGZyb20gYSBuYW1lZCB0cmVlIgorbXNnc3RyICLln7rkuo7kuIDkuKrmjIflrprnmoTmoJHliJvlu7rmlofku7blrZjmoaMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU2Cittc2dpZCAiVXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAi6YCa6L+H5LqM5YiG5p+l5om+5a6a5L2N5byV5YWlIGJ1ZyDnmoTmj5DkuqQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU3Cittc2dpZCAiU2hvdyB3aGF0IHJldmlzaW9uIGFuZCBhdXRob3IgbGFzdCBtb2RpZmllZCBlYWNoIGxpbmUgb2YgYSBmaWxlIgorbXNnc3RyICLmmL7npLrmlofku7bmr4/kuIDooYzmnIDlkI7kv67mlLnnmoTniYjmnKzlkozkv67mlLnogIUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU4Cittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgIuWIl+WHuuOAgeWIm+W7uuaIluWIoOmZpOWIhuaUryIKKworIzogY29tbWFuZC1saXN0Lmg6NTkKK21zZ2lkICJNb3ZlIG9iamVjdHMgYW5kIHJlZnMgYnkgYXJjaGl2ZSIKK21zZ3N0ciAi6YCa6L+H5b2S5qGj56e75Yqo5a+56LGh5ZKM5byV55SoIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MAorbXNnaWQgIlByb3ZpZGUgY29udGVudCBvciB0eXBlIGFuZCBzaXplIGluZm9ybWF0aW9uIGZvciByZXBvc2l0b3J5IG9iamVjdHMiCittc2dzdHIgIuaPkOS+m+S7k+W6k+WvueixoeeahOWGheWuueOAgeexu+Wei+aIluWkp+WwjyIKKworIzogY29tbWFuZC1saXN0Lmg6NjEKK21zZ2lkICJEaXNwbGF5IGdpdGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24iCittc2dzdHIgIuaYvuekuiBnaXRhdHRyaWJ1dGVzIOS/oeaBryIKKworIzogY29tbWFuZC1saXN0Lmg6NjIKK21zZ2lkICJEZWJ1ZyBnaXRpZ25vcmUgLyBleGNsdWRlIGZpbGVzIgorbXNnc3RyICLosIPor5UgZ2l0aWdub3JlIC8gZXhjbHVkZSDmlofku7YiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYzCittc2dpZCAiU2hvdyBjYW5vbmljYWwgbmFtZXMgYW5kIGVtYWlsIGFkZHJlc3NlcyBvZiBjb250YWN0cyIKK21zZ3N0ciAi5pi+56S66IGU57O75Lq655qE6KeE6IyD5ZCN56ew5ZKM55S15a2Q6YKu5Lu2IgorCisjOiBjb21tYW5kLWxpc3QuaDo2NAorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAi5YiH5o2i5YiG5pSv5oiW5oGi5aSN5bel5L2c5Yy65paH5Lu2IgorCisjOiBjb21tYW5kLWxpc3QuaDo2NQorbXNnaWQgIkNvcHkgZmlsZXMgZnJvbSB0aGUgaW5kZXggdG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi5LuO57Si5byV5ou36LSd5paH5Lu25Yiw5bel5L2c5Yy6IgorCisjOiBjb21tYW5kLWxpc3QuaDo2NgorbXNnaWQgIkVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBuYW1lIGlzIHdlbGwgZm9ybWVkIgorbXNnc3RyICLnoa7kv53lvJXnlKjlkI3np7DmoLzlvI/mraPnoa4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY3Cittc2dpZCAiRmluZCBjb21taXRzIHlldCB0byBiZSBhcHBsaWVkIHRvIHVwc3RyZWFtIgorbXNnc3RyICLmn6Xmib7lsJrmnKrlupTnlKjliLDkuIrmuLjnmoTmj5DkuqQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY4Cittc2dpZCAiQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIuW6lOeUqOS4gOS6m+eOsOWtmOaPkOS6pOW8leWFpeeahOS/ruaUuSIKKworIzogY29tbWFuZC1saXN0Lmg6NjkKK21zZ2lkICJHcmFwaGljYWwgYWx0ZXJuYXRpdmUgdG8gZ2l0LWNvbW1pdCIKK21zZ3N0ciAiZ2l0LWNvbW1pdCDnmoTlm77lvaLmm7/ku6PnlYzpnaIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcwCittc2dpZCAiUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuS7juW3peS9nOWMuuS4reWIoOmZpOacqui3n+i4quaWh+S7tiIKKworIzogY29tbWFuZC1saXN0Lmg6NzEKK21zZ2lkICJDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIuWFi+mahuS7k+W6k+WIsOS4gOS4quaWsOebruW9lSIKKworIzogY29tbWFuZC1saXN0Lmg6NzIKK21zZ2lkICJEaXNwbGF5IGRhdGEgaW4gY29sdW1ucyIKK21zZ3N0ciAi5Lul5YiX55qE5pa55byP5pi+56S65pWw5o2uIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MworbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICLorrDlvZXlj5jmm7TliLDku5PlupMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc0Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBHaXQgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICLlhpnlhaXlkozmoKHpqowgR2l0IOaPkOS6pOWbvuaWh+S7tiIKKworIzogY29tbWFuZC1saXN0Lmg6NzUKK21zZ2lkICJDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAi5Yib5bu65LiA5Liq5paw55qE5o+Q5Lqk5a+56LGhIgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgIuiOt+WPluWSjOiuvue9ruS7k+W6k+aIluiAheWFqOWxgOmAiemhuSIKKworIzogY29tbWFuZC1saXN0Lmg6NzcKK21zZ2lkICJDb3VudCB1bnBhY2tlZCBudW1iZXIgb2Ygb2JqZWN0cyBhbmQgdGhlaXIgZGlzayBjb25zdW1wdGlvbiIKK21zZ3N0ciAi6K6h566X5pyq5omT5YyF5a+56LGh55qE5pWw6YeP5ZKM56OB55uY56m66Ze05Y2g55SoIgorCisjOiBjb21tYW5kLWxpc3QuaDo3OAorbXNnaWQgIlJldHJpZXZlIGFuZCBzdG9yZSB1c2VyIGNyZWRlbnRpYWxzIgorbXNnc3RyICLmo4DntKLlkozlrZjlgqjnlKjmiLflr4bnoIEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc5Cittc2dpZCAiSGVscGVyIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHBhc3N3b3JkcyBpbiBtZW1vcnkiCittc2dzdHIgIuWcqOWGheWtmOS4reS4tOaXtuWtmOWCqOWvhueggeeahOWKqeaJiyIKKworIzogY29tbWFuZC1saXN0Lmg6ODAKK21zZ2lkICJIZWxwZXIgdG8gc3RvcmUgY3JlZGVudGlhbHMgb24gZGlzayIKK21zZ3N0ciAi5Zyo56OB55uY5a2Y5YKo5a+G56CB55qE5Yqp5omLIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MQorbXNnaWQgIkV4cG9ydCBhIHNpbmdsZSBjb21taXQgdG8gYSBDVlMgY2hlY2tvdXQiCittc2dzdHIgIuWwhuS4gOS4quaPkOS6pOWvvOWHuuWIsCBDVlMg5qOA5Ye65LitIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MgorbXNnaWQgIlNhbHZhZ2UgeW91ciBkYXRhIG91dCBvZiBhbm90aGVyIFNDTSBwZW9wbGUgbG92ZSB0byBoYXRlIgorbXNnc3RyICLku47lj6blpJbkuIDkuKrkurrku6zniLHmgajnmoTphY3nva7nrqHnkIbns7vnu5/kuK3mi6/mlZHkvaDnmoTmlbDmja4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgzCittc2dpZCAiQSBDVlMgc2VydmVyIGVtdWxhdG9yIGZvciBHaXQiCittc2dzdHIgIkdpdCDnmoTkuIDkuKogQ1ZTIOacjeWKoeaooeaLn+WZqCIKKworIzogY29tbWFuZC1saXN0Lmg6ODQKK21zZ2lkICJBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHaXQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICLkuIDkuKrpnZ7luLjnroDljZXnmoQgR2l0IOS7k+W6k+acjeWKoeWZqCIKKworIzogY29tbWFuZC1saXN0Lmg6ODUKK21zZ2lkICJHaXZlIGFuIG9iamVjdCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgYmFzZWQgb24gYW4gYXZhaWxhYmxlIHJlZiIKK21zZ3N0ciAi5Z+65LqO5LiA5Liq546w5a2Y55qE5byV55So5Li65LiA5Liq5a+56LGh6LW35LiA5Liq5Y+v6K+755qE5ZCN56ewIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NgorbXNnaWQgIlNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMiCittc2dzdHIgIuaYvuekuuaPkOS6pOS5i+mXtOOAgeaPkOS6pOWSjOW3peS9nOWMuuS5i+mXtOetieeahOW3ruW8giIKKworIzogY29tbWFuZC1saXN0Lmg6ODcKK21zZ2lkICJDb21wYXJlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgiCittc2dzdHIgIuavlOi+g+W3peS9nOWMuuWSjOe0ouW8leWMuuS4reeahOaWh+S7tiIKKworIzogY29tbWFuZC1saXN0Lmg6ODgKK21zZ2lkICJDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4IgorbXNnc3RyICLlsIbkuIDkuKrmoJHlkozlt6XkvZzljLrmiJbntKLlvJXlgZrmr5TovoMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg5Cittc2dpZCAiQ29tcGFyZXMgdGhlIGNvbnRlbnQgYW5kIG1vZGUgb2YgYmxvYnMgZm91bmQgdmlhIHR3byB0cmVlIG9iamVjdHMiCittc2dzdHIgIuavlOi+g+S4pOS4quagkeWvueixoeeahOaWh+S7tuWGheWuueWSjOaooeW8jyIKKworIzogY29tbWFuZC1saXN0Lmg6OTAKK21zZ2lkICJTaG93IGNoYW5nZXMgdXNpbmcgY29tbW9uIGRpZmYgdG9vbHMiCittc2dzdHIgIuS9v+eUqOW4uOingeeahOW3ruW8guW3peWFt+aYvuekuuabtOaUuSIKKworIzogY29tbWFuZC1saXN0Lmg6OTEKK21zZ2lkICJHaXQgZGF0YSBleHBvcnRlciIKK21zZ3N0ciAiR2l0IOaVsOaNruWvvOWHuuWZqCIKKworIzogY29tbWFuZC1saXN0Lmg6OTIKK21zZ2lkICJCYWNrZW5kIGZvciBmYXN0IEdpdCBkYXRhIGltcG9ydGVycyIKK21zZ3N0ciAiR2l0IOW/q+mAn+aVsOaNruWvvOWFpeWZqOWQjuerryIKKworIzogY29tbWFuZC1saXN0Lmg6OTMKK21zZ2lkICJEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICLku47lj6blpJbkuIDkuKrku5PlupPkuIvovb3lr7nosaHlkozlvJXnlKgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk0Cittc2dpZCAiUmVjZWl2ZSBtaXNzaW5nIG9iamVjdHMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIuS7juWPpuS4gOS4quS7k+W6k+iOt+WPlue8uuWkseeahOWvueixoSIKKworIzogY29tbWFuZC1saXN0Lmg6OTUKK21zZ2lkICJSZXdyaXRlIGJyYW5jaGVzIgorbXNnc3RyICLph43lhpnliIbmlK8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk2Cittc2dpZCAiUHJvZHVjZSBhIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLnlJ/miJDkuIDkuKrlkIjlubbmj5DkuqTkv6Hmga8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk3Cittc2dpZCAiT3V0cHV0IGluZm9ybWF0aW9uIG9uIGVhY2ggcmVmIgorbXNnc3RyICLlr7nmr4/kuIDkuKrlvJXnlKjovpPlh7rkv6Hmga8gIgorCisjOiBjb21tYW5kLWxpc3QuaDo5OAorbXNnaWQgIlByZXBhcmUgcGF0Y2hlcyBmb3IgZS1tYWlsIHN1Ym1pc3Npb24iCittc2dzdHIgIuWHhuWkh+eUteWtkOmCruS7tuaPkOS6pOeahOihpeS4gSIKKworIzogY29tbWFuZC1saXN0Lmg6OTkKK21zZ2lkICJWZXJpZmllcyB0aGUgY29ubmVjdGl2aXR5IGFuZCB2YWxpZGl0eSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgZGF0YWJhc2UiCittc2dzdHIgIumqjOivgeS7k+W6k+S4reWvueixoeeahOi/numAmuaAp+WSjOacieaViOaApyIKKworIzogY29tbWFuZC1saXN0Lmg6MTAwCittc2dpZCAiQ2xlYW51cCB1bm5lY2Vzc2FyeSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIua4hemZpOS4jeW/heimgeeahOaWh+S7tuWSjOS8mOWMluacrOWcsOS7k+W6kyIKKworIzogY29tbWFuZC1saXN0Lmg6MTAxCittc2dpZCAiRXh0cmFjdCBjb21taXQgSUQgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgdXNpbmcgZ2l0LWFyY2hpdmUiCittc2dzdHIgIuS7jiBnaXQtYXJjaGl2ZSDliJvlu7rnmoTlvZLmoaPmlofku7bkuK3mj5Dlj5bmj5DkuqQgSUQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMgorbXNnaWQgIlByaW50IGxpbmVzIG1hdGNoaW5nIGEgcGF0dGVybiIKK21zZ3N0ciAi6L6T5Ye65ZKM5qih5byP5Yy56YWN55qE6KGMIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDMKK21zZ2lkICJBIHBvcnRhYmxlIGdyYXBoaWNhbCBpbnRlcmZhY2UgdG8gR2l0IgorbXNnc3RyICLkuIDkuKrkvr/mkLrnmoQgR2l0IOWbvuW9ouWuouaIt+erryIKKworIzogY29tbWFuZC1saXN0Lmg6MTA0Cittc2dpZCAiQ29tcHV0ZSBvYmplY3QgSUQgYW5kIG9wdGlvbmFsbHkgY3JlYXRlcyBhIGJsb2IgZnJvbSBhIGZpbGUiCittc2dzdHIgIuS7juS4gOS4quaWh+S7tuiuoeeul+WvueixoSBJRO+8jOW5tuWPr+S7peWIm+W7uiBibG9iIOaVsOaNruWvueixoSIKKworIzogY29tbWFuZC1saXN0Lmg6MTA1Cittc2dpZCAiRGlzcGxheSBoZWxwIGluZm9ybWF0aW9uIGFib3V0IEdpdCIKK21zZ3N0ciAi5pi+56S6IEdpdCDnmoTluK7liqnkv6Hmga8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNgorbXNnaWQgIlNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdpdCBvdmVyIEhUVFAiCittc2dzdHIgIkdpdCBIVFRQIOWNj+iurueahOacjeWKoeerr+WunueOsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA3Cittc2dpZCAiRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUCIKK21zZ3N0ciAi6YCa6L+HIEhUVFAg5LuO6L+c56iLIEdpdCDku5PlupPkuIvovb0iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOAorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEhUVFAvREFWIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAi6YCa6L+HIEhUVFAvREFWIOaOqOmAgeWvueixoeWPpuS4gOS4quS7k+W6kyIKKworIzogY29tbWFuZC1saXN0Lmg6MTA5Cittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBmcm9tIHN0ZGluIHRvIGFuIElNQVAgZm9sZGVyIgorbXNnc3RyICLku47moIflh4bovpPlhaXlsIbkuIDnu4TooaXkuIHlj5HpgIHliLBJTUFQ5paH5Lu25aS5IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTAKK21zZ2lkICJCdWlsZCBwYWNrIGluZGV4IGZpbGUgZm9yIGFuIGV4aXN0aW5nIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICLku47kuIDkuKrnjrDlrZjnmoTljIXlrZjmoaPmlofku7bliJvlu7rljIXntKLlvJUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMQorbXNnaWQgIkNyZWF0ZSBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeSBvciByZWluaXRpYWxpemUgYW4gZXhpc3Rpbmcgb25lIgorbXNnc3RyICLliJvlu7rkuIDkuKrnqbrnmoQgR2l0IOS7k+W6k+aIlumHjeaWsOWIneWni+WMluS4gOS4quW3suWtmOWcqOeahOS7k+W6kyIKKworIzogY29tbWFuZC1saXN0Lmg6MTEyCittc2dpZCAiSW5zdGFudGx5IGJyb3dzZSB5b3VyIHdvcmtpbmcgcmVwb3NpdG9yeSBpbiBnaXR3ZWIiCittc2dzdHIgIuWcqCBnaXR3ZWIg5Lit5Y2z5pe25rWP6KeI5oKo55qE5bel5L2c5LuT5bqTIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTMKK21zZ2lkICJBZGQgb3IgcGFyc2Ugc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBpbiBjb21taXQgbWVzc2FnZXMiCittc2dzdHIgIua3u+WKoOaIluino+aekOaPkOS6pOivtOaYjuS4reeahOe7k+aehOWMluS/oeaBryIKKworIzogY29tbWFuZC1saXN0Lmg6MTE0Cittc2dpZCAiVGhlIEdpdCByZXBvc2l0b3J5IGJyb3dzZXIiCittc2dzdHIgIkdpdCDku5PlupPmtY/op4jlmagiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNQorbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgIuaYvuekuuaPkOS6pOaXpeW/lyIKKworIzogY29tbWFuZC1saXN0Lmg6MTE2Cittc2dpZCAiU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBpbiB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuaYvuekuue0ouW8leWSjOW3peS9nOWMuuS4reaWh+S7tueahOS/oeaBryIKKworIzogY29tbWFuZC1saXN0Lmg6MTE3Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkiCittc2dzdHIgIuaYvuekuuS4gOS4qui/nOeoi+S7k+W6k+eahOW8leeUqCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE4Cittc2dpZCAiTGlzdCB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdCIKK21zZ3N0ciAi5pi+56S65LiA5Liq5qCR5a+56LGh55qE5YaF5a65IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTkKK21zZ2lkICJFeHRyYWN0cyBwYXRjaCBhbmQgYXV0aG9yc2hpcCBmcm9tIGEgc2luZ2xlIGUtbWFpbCBtZXNzYWdlIgorbXNnc3RyICLku47ljZXkuKrnlLXlrZDpgq7ku7bkuK3mj5Dlj5booaXkuIHlkozkvZzogIXouqvku70iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMAorbXNnaWQgIlNpbXBsZSBVTklYIG1ib3ggc3BsaXR0ZXIgcHJvZ3JhbSIKK21zZ3N0ciAi566A5Y2V55qEIFVOSVggbWJveCDpgq7nrrHliIfliIbnqIvluo8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMQorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICLlkIjlubbkuKTkuKrmiJbmm7TlpJrlvIDlj5Hljoblj7IiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMgorbXNnaWQgIkZpbmQgYXMgZ29vZCBjb21tb24gYW5jZXN0b3JzIGFzIHBvc3NpYmxlIGZvciBhIG1lcmdlIgorbXNnc3RyICLkuLrkuoblkIjlubbmn6Xmib7lsL3lj6/og73lpb3nmoTlhazlhbHnpZblhYjmj5DkuqQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMworbXNnaWQgIlJ1biBhIHRocmVlLXdheSBmaWxlIG1lcmdlIgorbXNnc3RyICLov5DooYzkuIDkuKrkuInot6/mlofku7blkIjlubYiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNAorbXNnaWQgIlJ1biBhIG1lcmdlIGZvciBmaWxlcyBuZWVkaW5nIG1lcmdpbmciCittc2dzdHIgIuWvueS6jumcgOimgeWQiOW5tueahOaWh+S7tuaJp+ihjOWQiOW5tiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI1Cittc2dpZCAiVGhlIHN0YW5kYXJkIGhlbHBlciBwcm9ncmFtIHRvIHVzZSB3aXRoIGdpdC1tZXJnZS1pbmRleCIKK21zZ3N0ciAi5LiOIGdpdC1tZXJnZS1pbmRleCDkuIDotbfkvb/nlKjnmoTmoIflh4blkJHlr7znqIvluo8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNgorbXNnaWQgIlJ1biBtZXJnZSBjb25mbGljdCByZXNvbHV0aW9uIHRvb2xzIHRvIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIgorbXNnc3RyICLov5DooYzlkIjlubblhrLnqoHop6PlhrPlt6Xlhbfku6Xop6PlhrPlkIjlubblhrLnqoEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNworbXNnaWQgIlNob3cgdGhyZWUtd2F5IG1lcmdlIHdpdGhvdXQgdG91Y2hpbmcgaW5kZXgiCittc2dzdHIgIuaYvuekuuS4iei3r+WQiOW5tuiAjOS4jeWKqOe0ouW8lSIKKworIzogY29tbWFuZC1saXN0Lmg6MTI4Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBtdWx0aS1wYWNrLWluZGV4ZXMiCittc2dzdHIgIuWGmeWFpeWSjOagoemqjOWkmuWMhee0ouW8lSIKKworIzogY29tbWFuZC1saXN0Lmg6MTI5Cittc2dpZCAiQ3JlYXRlcyBhIHRhZyBvYmplY3QiCittc2dzdHIgIuWIm+W7uuS4gOS4quagh+etvuWvueixoSIKKworIzogY29tbWFuZC1saXN0Lmg6MTMwCittc2dpZCAiQnVpbGQgYSB0cmVlLW9iamVjdCBmcm9tIGxzLXRyZWUgZm9ybWF0dGVkIHRleHQiCittc2dzdHIgIuWfuuS6jiBscy10cmVlIOeahOagvOW8j+WMluaWh+acrOWIm+W7uuS4gOS4quagkeWvueixoSIKKworIzogY29tbWFuZC1saXN0Lmg6MTMxCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICLnp7vliqjmiJbph43lkb3lkI3kuIDkuKrmlofku7bjgIHnm67lvZXmiJbnrKblj7fpk77mjqUiCisKKyMg5p+l5om+57uZ5a6a54mI5pys55qE56ym5Y+35ZCN56ewCisjOiBjb21tYW5kLWxpc3QuaDoxMzIKK21zZ2lkICJGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzIgorbXNnc3RyICLmn6Xmib7nu5nlrprniYjmnKznmoTnrKblj7flkI3np7AiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMworbXNnaWQgIkFkZCBvciBpbnNwZWN0IG9iamVjdCBub3RlcyIKK21zZ3N0ciAi5re75Yqg5oiW5qOA5p+l5a+56LGh5rOo6YeKIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzQKK21zZ2lkICJJbXBvcnQgZnJvbSBhbmQgc3VibWl0IHRvIFBlcmZvcmNlIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAi5a+85YWl5ZKM5o+Q5Lqk5YiwIFBlcmZvcmNlIOS7k+W6k+S4rSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM1Cittc2dpZCAiQ3JlYXRlIGEgcGFja2VkIGFyY2hpdmUgb2Ygb2JqZWN0cyIKK21zZ3N0ciAi5Yib5bu65a+56LGh55qE5a2Y5qGj5YyFIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzYKK21zZ2lkICJGaW5kIHJlZHVuZGFudCBwYWNrIGZpbGVzIgorbXNnc3RyICLmn6Xmib7lhpfkvZnnmoTljIXmlofku7YiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNworbXNnaWQgIlBhY2sgaGVhZHMgYW5kIHRhZ3MgZm9yIGVmZmljaWVudCByZXBvc2l0b3J5IGFjY2VzcyIKK21zZ3N0ciAi5omT5YyF5aS05ZKM5qCH562+5Lul5a6e546w6auY5pWI55qE5LuT5bqT6K6/6ZeuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzgKK21zZ2lkICJSb3V0aW5lcyB0byBoZWxwIHBhcnNpbmcgcmVtb3RlIHJlcG9zaXRvcnkgYWNjZXNzIHBhcmFtZXRlcnMiCittc2dzdHIgIuW4ruWKqeino+aekOi/nOeoi+S7k+W6k+iuv+mXruWPguaVsOeahOS+i+eoiyIKKworIzogY29tbWFuZC1saXN0Lmg6MTM5Cittc2dpZCAiQ29tcHV0ZSB1bmlxdWUgSUQgZm9yIGEgcGF0Y2giCittc2dzdHIgIuiuoeeul+S4gOS4quihpeS4geeahOWUr+S4gCBJRCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQwCittc2dpZCAiUHJ1bmUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLliKDpmaTlr7nosaHlupPkuK3miYDmnInkuI3lj6/ovr7lr7nosaEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MQorbXNnaWQgIlJlbW92ZSBleHRyYSBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgaW4gcGFjayBmaWxlcyIKK21zZ3N0ciAi5Yig6Zmk5bey57uP5Zyo5YyF5paH5Lu25Lit55qE5aSa5L2Z5a+56LGhIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDIKK21zZ2lkICJGZXRjaCBmcm9tIGFuZCBpbnRlZ3JhdGUgd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgIuiOt+WPluW5tuaVtOWQiOWPpuWklueahOS7k+W6k+aIluS4gOS4quacrOWcsOWIhuaUryIKKworIzogY29tbWFuZC1saXN0Lmg6MTQzCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICLmm7TmlrDov5znqIvlvJXnlKjlkoznm7jlhbPnmoTlr7nosaEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NAorbXNnaWQgIkFwcGxpZXMgYSBxdWlsdCBwYXRjaHNldCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAi5bCG5LiA5LiqIHF1aWx0IOihpeS4gembhuW6lOeUqOWIsOW9k+WJjeWIhuaUr+OAgiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ1Cittc2dpZCAiQ29tcGFyZSB0d28gY29tbWl0IHJhbmdlcyAoZS5nLiB0d28gdmVyc2lvbnMgb2YgYSBicmFuY2gpIgorbXNnc3RyICLmr5TovoPkuKTkuKrmj5DkuqTojIPlm7TvvIjlpoLkuIDkuKrliIbmlK/nmoTkuKTkuKrniYjmnKzvvIkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NgorbXNnaWQgIlJlYWRzIHRyZWUgaW5mb3JtYXRpb24gaW50byB0aGUgaW5kZXgiCittc2dzdHIgIuWwhuagkeS/oeaBr+ivu+WPluWIsOe0ouW8lSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ3Cittc2dpZCAiUmVhcHBseSBjb21taXRzIG9uIHRvcCBvZiBhbm90aGVyIGJhc2UgdGlwIgorbXNnc3RyICLlnKjlj6bkuIDkuKrliIbmlK/kuIrph43mlrDlupTnlKjmj5DkuqQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OAorbXNnaWQgIlJlY2VpdmUgd2hhdCBpcyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5o6l5pS25o6o6YCB5Yiw5LuT5bqT5Lit55qE5a+56LGhIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDkKK21zZ2lkICJNYW5hZ2UgcmVmbG9nIGluZm9ybWF0aW9uIgorbXNnc3RyICLnrqHnkIYgcmVmbG9nIOS/oeaBryIKKworIzogY29tbWFuZC1saXN0Lmg6MTUwCittc2dpZCAiTWFuYWdlIHNldCBvZiB0cmFja2VkIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAi566h55CG5bey6Lef6Liq5LuT5bqTIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTEKK21zZ2lkICJQYWNrIHVucGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5IgorbXNnc3RyICLmiZPljIXku5PlupPkuK3mnKrmiZPljIXlr7nosaEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MgorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIHJlZnMgdG8gcmVwbGFjZSBvYmplY3RzIgorbXNnc3RyICLliJvlu7rjgIHliJflh7rjgIHliKDpmaTlr7nosaHmm7/mjaLlvJXnlKgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MworbXNnaWQgIkdlbmVyYXRlcyBhIHN1bW1hcnkgb2YgcGVuZGluZyBjaGFuZ2VzIgorbXNnc3RyICLnlJ/miJDlvoXlrprmm7TmlLnnmoTmkZjopoEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NAorbXNnaWQgIlJldXNlIHJlY29yZGVkIHJlc29sdXRpb24gb2YgY29uZmxpY3RlZCBtZXJnZXMiCittc2dzdHIgIumHjeeUqOWGsueqgeWQiOW5tueahOino+WGs+aWueahiOiusOW9lSIKKworIzogY29tbWFuZC1saXN0Lmg6MTU1Cittc2dpZCAiUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUiCittc2dzdHIgIumHjee9ruW9k+WJjSBIRUFEIOWIsOaMh+WumueKtuaAgSIKKworIzogY29tbWFuZC1saXN0Lmg6MTU2Cittc2dpZCAiUmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIuaBouWkjeW3peS9nOWMuuaWh+S7tiIKKworIzogY29tbWFuZC1saXN0Lmg6MTU3Cittc2dpZCAiUmV2ZXJ0IHNvbWUgZXhpc3RpbmcgY29tbWl0cyIKK21zZ3N0ciAi5Zue6YCA5LiA5Lqb546w5a2Y5o+Q5LqkIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTgKK21zZ2lkICJMaXN0cyBjb21taXQgb2JqZWN0cyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIuaMieaXtumXtOmhuuW6j+WIl+WHuuaPkOS6pOWvueixoSIKKworIzogY29tbWFuZC1saXN0Lmg6MTU5Cittc2dpZCAiUGljayBvdXQgYW5kIG1hc3NhZ2UgcGFyYW1ldGVycyIKK21zZ3N0ciAi6YCJ5Ye65bm25aSE55CG5Y+C5pWwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjAKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAi5LuO5bel5L2c5Yy65ZKM57Si5byV5Lit5Yig6Zmk5paH5Lu2IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjEKK21zZ2lkICJTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGFzIGVtYWlscyIKK21zZ3N0ciAi6YCa6L+H55S15a2Q6YKu5Lu25Y+R6YCB5LiA57uE6KGl5LiBIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjIKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBHaXQgcHJvdG9jb2wgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICLkvb/nlKggR2l0IOWNj+iuruaOqOmAgeWvueixoeWIsOWPpuS4gOS4quS7k+W6kyIKKworIzogY29tbWFuZC1saXN0Lmg6MTYzCittc2dpZCAiUmVzdHJpY3RlZCBsb2dpbiBzaGVsbCBmb3IgR2l0LW9ubHkgU1NIIGFjY2VzcyIKK21zZ3N0ciAi5Y+q5YWB6K64IEdpdCBTU0gg6K6/6Zeu55qE5Y+X6ZmQ55m75b2Vc2hlbGwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NAorbXNnaWQgIlN1bW1hcml6ZSAnZ2l0IGxvZycgb3V0cHV0IgorbXNnc3RyICInZ2l0IGxvZycg6L6T5Ye65pGY6KaBIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjUKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAi5pi+56S65ZCE56eN57G75Z6L55qE5a+56LGhIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjYKK21zZ2lkICJTaG93IGJyYW5jaGVzIGFuZCB0aGVpciBjb21taXRzIgorbXNnc3RyICLmmL7npLrliIbmlK/lkozmj5DkuqQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NworbXNnaWQgIlNob3cgcGFja2VkIGFyY2hpdmUgaW5kZXgiCittc2dzdHIgIuaYvuekuuaJk+WMheW9kuaho+e0ouW8lSIKKworIzogY29tbWFuZC1saXN0Lmg6MTY4Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5pi+56S65pys5Zyw5LuT5bqT5Lit55qE5byV55SoIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjkKK21zZ2lkICJHaXQncyBpMThuIHNldHVwIGNvZGUgZm9yIHNoZWxsIHNjcmlwdHMiCittc2dzdHIgIuS4uiBzaGVsbCDohJrmnKzlh4blpIfnmoQgR2l0IOWbvemZheWMluiuvue9ruS7o+eggSIKKworIzogY29tbWFuZC1saXN0Lmg6MTcwCittc2dpZCAiQ29tbW9uIEdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZSIKK21zZ3N0ciAi5bi455So55qEIEdpdCBzaGVsbCDohJrmnKzorr7nva7ku6PnoIEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MQorbXNnaWQgIkluaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICLliJ3lp4vljJblj4rkv67mlLnnqIDnlo/mo4Dlh7oiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MgorbXNnaWQgIlN0YXNoIHRoZSBjaGFuZ2VzIGluIGEgZGlydHkgd29ya2luZyBkaXJlY3RvcnkgYXdheSIKK21zZ3N0ciAi6LSu6JeP6ISP5bel5L2c5Yy65Lit55qE5L+u5pS5IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzMKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgc3RhZ2luZyBhcmVhIgorbXNnc3RyICLlsIbmlofku7blhoXlrrnmt7vliqDliLDntKLlvJUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NAorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgIuaYvuekuuW3peS9nOWMuueKtuaAgSIKKworIzogY29tbWFuZC1saXN0Lmg6MTc1Cittc2dpZCAiUmVtb3ZlIHVubmVjZXNzYXJ5IHdoaXRlc3BhY2UiCittc2dzdHIgIuWIoOmZpOS4jeW/heimgeeahOepuueZveWtl+espiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc2Cittc2dpZCAiSW5pdGlhbGl6ZSwgdXBkYXRlIG9yIGluc3BlY3Qgc3VibW9kdWxlcyIKK21zZ3N0ciAi5Yid5aeL5YyW44CB5pu05paw5oiW5qOA5p+l5a2Q5qih57uEIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzcKK21zZ2lkICJCaWRpcmVjdGlvbmFsIG9wZXJhdGlvbiBiZXR3ZWVuIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IGFuZCBHaXQiCittc2dzdHIgIlN1YmVyc2lvbiDku5PlupPlkowgR2l0IOS5i+mXtOeahOWPjOWQkeaTjeS9nCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc4Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIgorbXNnc3RyICLliIfmjaLliIbmlK8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3OQorbXNnaWQgIlJlYWQsIG1vZGlmeSBhbmQgZGVsZXRlIHN5bWJvbGljIHJlZnMiCittc2dzdHIgIuivu+WPluOAgeS/ruaUueWSjOWIoOmZpOespuWPt+W8leeUqCIKKworIzogY29tbWFuZC1saXN0Lmg6MTgwCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIuWIm+W7uuOAgeWIl+WHuuOAgeWIoOmZpOaIluagoemqjOS4gOS4qiBHUEcg562+5ZCN55qE5qCH562+5a+56LGhIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODEKK21zZ2lkICJDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBhIGJsb2IncyBjb250ZW50cyIKK21zZ3N0ciAi55SoIGJsb2Ig5pWw5o2u5a+56LGh55qE5YaF5a655Yib5bu65LiA5Liq5Li05pe25paH5Lu2IgorCisjOiBjb21tYW5kLWxpc3QuaDoxODIKK21zZ2lkICJVbnBhY2sgb2JqZWN0cyBmcm9tIGEgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIuS7juaJk+WMheaWh+S7tuS4reino+WOi+e8qeWvueixoSIKKworIzogY29tbWFuZC1saXN0Lmg6MTgzCittc2dpZCAiUmVnaXN0ZXIgZmlsZSBjb250ZW50cyBpbiB0aGUgd29ya2luZyB0cmVlIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi5bCG5bel5L2c5Yy655qE5paH5Lu25YaF5a655rOo5YaM5Yiw57Si5byVIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODQKK21zZ2lkICJVcGRhdGUgdGhlIG9iamVjdCBuYW1lIHN0b3JlZCBpbiBhIHJlZiBzYWZlbHkiCittc2dzdHIgIuWuieWFqOWcsOabtOaWsOWtmOWCqOS6juW8leeUqOS4reeahOWvueixoeWQjeensCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg1Cittc2dpZCAiVXBkYXRlIGF1eGlsaWFyeSBpbmZvIGZpbGUgdG8gaGVscCBkdW1iIHNlcnZlcnMiCittc2dzdHIgIuabtOaWsOi+heWKqeS/oeaBr+aWh+S7tuS7peW4ruWKqeWTkeWNj+iuruacjeWKoSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg2Cittc2dpZCAiU2VuZCBhcmNoaXZlIGJhY2sgdG8gZ2l0LWFyY2hpdmUiCittc2dzdHIgIuWwhuWtmOaho+WPkemAgeWbniBnaXQtYXJjaGl2ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg3Cittc2dpZCAiU2VuZCBvYmplY3RzIHBhY2tlZCBiYWNrIHRvIGdpdC1mZXRjaC1wYWNrIgorbXNnc3RyICLlsIblr7nosaHljovnvKnljIXlj5HpgIHlm54gZ2l0LWZldGNoLXBhY2siCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OAorbXNnaWQgIlNob3cgYSBHaXQgbG9naWNhbCB2YXJpYWJsZSIKK21zZ3N0ciAi5pi+56S65LiA5LiqR2l06YC76L6R5Y+Y6YePIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODkKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiBjb21taXRzIgorbXNnc3RyICLmo4Dmn6UgR1BHIOaPkOS6pOetvuWQjSIKKworIzogY29tbWFuZC1saXN0Lmg6MTkwCittc2dpZCAiVmFsaWRhdGUgcGFja2VkIEdpdCBhcmNoaXZlIGZpbGVzIgorbXNnc3RyICLmoKHpqozmiZPljIXnmoRHaXTlrZjku5Pmlofku7YiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MQorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIHRhZ3MiCittc2dzdHIgIuajgOafpeagh+etvueahCBHUEcg562+5ZCNIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTIKK21zZ2lkICJHaXQgd2ViIGludGVyZmFjZSAod2ViIGZyb250ZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMpIgorbXNnc3RyICJHaXQgd2ViIOeVjOmdou+8iEdpdCDku5PlupPnmoQgd2ViIOWJjeerr++8iSIKKworIzogY29tbWFuZC1saXN0Lmg6MTkzCittc2dpZCAiU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIgorbXNnc3RyICLmmL7npLrmr4/kuIDkuKrmj5DkuqTlvJXlhaXnmoTlt67lvILml6Xlv5ciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NAorbXNnaWQgIk1hbmFnZSBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIgorbXNnc3RyICLnrqHnkIblpJrkuKrlt6XkvZzljLoiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NQorbXNnaWQgIkNyZWF0ZSBhIHRyZWUgb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgIuS7juW9k+WJjee0ouW8leWIm+W7uuS4gOS4quagkeWvueixoSIKKworIzogY29tbWFuZC1saXN0Lmg6MTk2Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAi5a6a5LmJ6Lev5b6E55qE5bGe5oCnIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTcKK21zZ2lkICJHaXQgY29tbWFuZC1saW5lIGludGVyZmFjZSBhbmQgY29udmVudGlvbnMiCittc2dzdHIgIkdpdCDlkb3ku6TooYznlYzpnaLlkoznuqblrpoiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OAorbXNnaWQgIkEgR2l0IGNvcmUgdHV0b3JpYWwgZm9yIGRldmVsb3BlcnMiCittc2dzdHIgIumdouWQkeW8gOWPkeS6uuWRmOeahCBHaXQg5qC45b+D5pWZ56iLIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTkKK21zZ2lkICJHaXQgZm9yIENWUyB1c2VycyIKK21zZ3N0ciAi6YCC5ZCIIENWUyDnlKjmiLfnmoQgR2l0IOW4ruWKqSIKKworIzogY29tbWFuZC1saXN0Lmg6MjAwCittc2dpZCAiVHdlYWtpbmcgZGlmZiBvdXRwdXQiCittc2dzdHIgIuiwg+aVtOW3ruW8gui+k+WHuiIKKworIzogY29tbWFuZC1saXN0Lmg6MjAxCittc2dpZCAiQSB1c2VmdWwgbWluaW11bSBzZXQgb2YgY29tbWFuZHMgZm9yIEV2ZXJ5ZGF5IEdpdCIKK21zZ3N0ciAi5q+P5LiA5aSpIEdpdCDnmoTkuIDnu4TmnInnlKjnmoTmnIDlsI/lkb3ku6Tpm4blkIgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMgorbXNnaWQgIkEgR2l0IEdsb3NzYXJ5IgorbXNnc3RyICJHaXQg6K+N5rGH6KGoIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDMKK21zZ2lkICJIb29rcyB1c2VkIGJ5IEdpdCIKK21zZ3N0ciAiR2l0IOS9v+eUqOeahOmSqeWtkCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA0Cittc2dpZCAiU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZSIKK21zZ3N0ciAi5b+955Wl5oyH5a6a55qE5pyq6Lef6Liq5paH5Lu2IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDUKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAi5a6a5LmJ5a2Q5qih57uE5bGe5oCnIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDYKK21zZ2lkICJHaXQgbmFtZXNwYWNlcyIKK21zZ3N0ciAiR2l0IOWQjeWtl+epuumXtCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA3Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICJHaXQg5LuT5bqT5biD5bGAIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDgKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgIuaMh+WumiBHaXQg55qE54mI5pys5ZKM54mI5pys6IyD5Zu0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDkKK21zZ2lkICJNb3VudGluZyBvbmUgcmVwb3NpdG9yeSBpbnNpZGUgYW5vdGhlciIKK21zZ3N0ciAi5bCG5LiA5Liq5LuT5bqT5a6J6KOF5Yiw5Y+m5aSW5LiA5Liq5LuT5bqT5LitIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTAKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQ6IHBhcnQgdHdvIgorbXNnc3RyICLkuIDkuKogR2l0IOaVmeeoi++8muesrOS6jOmDqOWIhiIKKworIzogY29tbWFuZC1saXN0Lmg6MjExCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0IgorbXNnc3RyICLkuIDkuKogR2l0IOaVmeeoiyIKKworIzogY29tbWFuZC1saXN0Lmg6MjEyCittc2dpZCAiQW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQgd29ya2Zsb3dzIHdpdGggR2l0IgorbXNnc3RyICJHaXQg5o6o6I2Q55qE5bel5L2c5rWB5qaC6KeIIgorCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgIuaCqOmcgOimgeaJp+ihjCBcImdpdCBiaXNlY3Qgc3RhcnRcIiDmnaXlvIDlp4siCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWPpeWwvuepuuagvAorIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjYwCittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICLmgqjmg7PorqnmiJHkuLrmgqjov5nmoLflgZrkuYhbWS9uXe+8nyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICLlnY/nmoTovpPlhaXniYjmnKzvvJokYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGJpc2VjdGVkX2hlYWQiCittc2dzdHIgIuWdj+eahOi+k+WFpeeJiOacrO+8miRiaXNlY3RlZF9oZWFkIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAi5Z2P55qE6L6T5YWl54mI5pys77yaJHJldiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIOWPquiDveW4puS4gOS4quWPguaVsOOAgiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMDkKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICLmnKrmj5Dkvpvml6Xlv5fmlofku7YiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICLkuI3og73or7vlj5YgJGZpbGUg5p2l6YeN5pS+IgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMgorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiPz8g5oKo5Zyo6K+05LuA5LmIPyIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDEKK21zZ2lkICJiaXNlY3QgcnVuIGZhaWxlZDogbm8gY29tbWFuZCBwcm92aWRlZC4iCittc2dzdHIgIuS6jOWIhuafpeaJvui/kOihjOWksei0pe+8muayoeacieaPkOS+m+WRveS7pOOAgiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgIui/kOihjCAkY29tbWFuZCIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyJleGl0IGNvZGUgJHJlcyBmcm9tICckY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIKK21zZ3N0ciAiIgorIuS6jOWIhuafpeaJvui/kOihjOWksei0pe+8mlxuIgorIuWRveS7pCAnJGNvbW1hbmQnIOeahOmAgOWHuueggSAkcmVzIOWwj+S6jiAwIOaIluWkp+S6juetieS6jiAxMjgiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjc5Cittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgIuS6jOWIhuafpeaJvuS4jeiDvee7p+e7rei/kOihjCIKKworIzogZ2l0LWJpc2VjdC5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICIiCisi5LqM5YiG5p+l5om+6L+Q6KGM5aSx6LSl77yaXG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIOmAgOWHuueggeS4uiAkcmVzIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAi5LqM5YiG5p+l5om+6L+Q6KGM5oiQ5YqfIgorCisjOiBnaXQtYmlzZWN0LnNoOjMwMAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAi5oiR5Lus5rKh5pyJ5Zyo5LqM5YiG5p+l5om+44CCIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICLplJnor6/vvJrmgqjlr7nkuIvliJfmlofku7bnmoTmnKzlnLDkv67mlLnlsIbooqvlkIjlubbmk43kvZzopobnm5YiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIuiHquWKqOWQiOW5tuacqueUn+aViOOAgiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjIKK21zZ2lkICJTaG91bGQgbm90IGJlIGRvaW5nIGFuIG9jdG9wdXMuIgorbXNnc3RyICLkuI3lupTor6XmiafooYznq6DpsbzlvI/lkIjlubbjgIIiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjb21tb24gY29tbWl0IHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICLml6Dms5Xmib7liLDlkowgJHByZXR0eV9uYW1lIOeahOWfuue6v+aPkOS6pCIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAi5bey57uP5ZKMICRwcmV0dHlfbmFtZSDkv53mjIHkuIDoh7QiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgdG86ICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAi5b+r6L+b6Iez77yaJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo5NworIywgc2gtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAi5bCd6K+V5ZKMICRwcmV0dHlfbmFtZSDnmoTnroDljZXlkIjlubYiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjEwMgorbXNnaWQgIlNpbXBsZSBtZXJnZSBkaWQgbm90IHdvcmssIHRyeWluZyBhdXRvbWF0aWMgbWVyZ2UuIgorbXNnc3RyICLnroDljZXlkIjlubbmnKrnlJ/mlYjvvIzlsJ3or5Xoh6rliqjlkIjlubbjgIIiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjIxCittc2dpZCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiCittc2dzdHIgIuaXoOazleWIoOmZpOS4tOaXtue0ouW8le+8iOS4jeW6lOWPkeeUn++8iSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyNzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJHJlZl9zdGFzaCB3aXRoICR3X2NvbW1pdCIKK21zZ3N0ciAi5peg5rOV55SoICR3X2NvbW1pdCDmm7TmlrAgJHJlZl9zdGFzaCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHB1c2gnOiAkb3B0aW9uIgorbXNnc3RyICLplJnor6/vvJonc3Rhc2ggcHVzaCcg55qE5pyq55+l6YCJ6aG577yaJG9wdGlvbiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAkc3Rhc2hfbXNnIgorbXNnc3RyICLkv53lrZjlt6XkvZznm67lvZXlkozntKLlvJXnirbmgIEgJHN0YXNoX21zZyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICLmnKrnn6XpgInpobk6ICRvcHQiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICLmjIflrprkuoblpKrlpJrnmoTniYjmnKzvvJokUkVWIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiRyZWZlcmVuY2Ug5LiN5piv5LiA5Liq5pyJ5pWI55qE5byV55SoIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyRhcmdzJyDkuI3mmK/otK7ol4/lvI/mj5DkuqQiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiJyRhcmdzJyDkuI3mmK/kuIDkuKrotK7ol4/lvJXnlKgiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjE4Cittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgIuaXoOazleWIt+aWsOe0ouW8lSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MjIKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIuaXoOazleWcqOWQiOW5tui/h+eoi+W6lOeUqOi0ruiXjyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzAKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICLntKLlvJXkuK3mnInlhrLnqoHjgILlsJ3or5XkuI3kvb/nlKggLS1pbmRleOOAgiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzIKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICLkuI3og73kv53lrZjntKLlvJXmoJEiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjQxCittc2dpZCAiQ291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2ggZW50cnkiCittc2dzdHIgIuaXoOazleS7jui0ruiXj+adoeebruS4reaBouWkjeacqui3n+i4quaWh+S7tiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NjYKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAi5peg5rOV5bCG5L+u5pS555qE5paH5Lu25Y+W5raI5pqC5a2YIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAi5Lii5byD5LqGICR7UkVWfSAoJHMpIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ977ya5peg5rOV5Lii5byD6LSu6JeP5p2h55uuIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjc5MgorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAi77yI5Li65oGi5aSN5pWw5o2u6L6T5YWlIFwiZ2l0IHN0YXNoIGFwcGx5XCLvvIkiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjAzCittc2dpZCAiUmVsYXRpdmUgcGF0aCBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuWPquiDveWcqOW3peS9nOWMuueahOmhtue6p+ebruW9leS4reS9v+eUqOebuOWvuei3r+W+hCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgIuS7k+W6kyBVUkzvvJonJHJlcG8nIOW/hemhu+aYr+e7neWvuei3r+W+hOaIluS7pSAuL3wuLi8g6LW35aeLIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzMgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIickc21fcGF0aCcg5bey57uP5a2Y5Zyo5LqO57Si5byV5LitIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiJyRzbV9wYXRoJyDlt7Lnu4/lrZjlnKjkuo7ntKLlvJXkuK3kuJTkuI3mmK/kuIDkuKrlrZDmqKHnu4QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIickc21fcGF0aCcg5rKh5pyJ5qOA5Ye655qE5o+Q5LqkIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MworIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIua3u+WKoOS9jeS6jiAnJHNtX3BhdGgnIOeahOeOsOWtmOS7k+W6k+WIsOe0ouW8lSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICInJHNtX3BhdGgnIOW3suWtmOWcqOS4lOS4jeaYr+S4gOS4quacieaViOeahCBnaXQg5LuT5bqTIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4MworIywgc2gtZm9ybWF0Cittc2dpZCAiQSBnaXQgZGlyZWN0b3J5IGZvciAnJHNtX25hbWUnIGlzIGZvdW5kIGxvY2FsbHkgd2l0aCByZW1vdGUocyk6IgorbXNnc3RyICLmnKzlnLDlj5HnjrAgJyRzbV9uYW1lJyDnmoTkuIDkuKogZ2l0IOebruW9le+8jOS4juWFtuWvueW6lOeahOi/nOeoi+S7k+W6k++8miIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb21cbiIKKyIgICRyZWFscmVwb1xuIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0ICIKKyJyZXBvXG4iCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorIm9wdGlvbi4iCittc2dzdHIgIiIKKyLlpoLmnpzmgqjmg7PopoHph43nlKjov5nkuKrmnKzlnLAgZ2l0IOebruW9leiAjOmdnumHjeaWsOWFi+mahuiHqlxuIgorIiAgJHJlYWxyZXBvXG4iCisi5L2/55SoICctLWZvcmNlJyDpgInpobnjgILlpoLmnpzmnKzlnLAgZ2l0IOebruW9leS4jeaYr+ato+ehrueahOS7k+W6k1xuIgorIuaIluiAheaCqOS4jeehruWumui/memHjOeahOWQq+S5ie+8jOS9v+eUqCAnLS1uYW1lJyDpgInpobnpgInmi6nlj6blpJbnmoTlkI3np7DjgIIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWFjdGl2YXRpbmcgbG9jYWwgZ2l0IGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlICckc21fbmFtZScuIgorbXNnc3RyICLmv4DmtLvmnKzlnLAgZ2l0IOebruW9leWIsOWtkOaooee7hCAnJHNtX25hbWUn44CCIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwMworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICLkuI3og73mo4Dlh7rlrZDmqKHnu4QgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIuaXoOazlea3u+WKoOWtkOaooee7hCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMxNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICLml6Dms5Xms6jlhozlrZDmqKHnu4QgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIuaXoOazleWcqOWtkOaooee7hOi3r+W+hCAnJGRpc3BsYXlwYXRoJyDkuK3mib7liLDlvZPliY3niYjmnKwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAi5peg5rOV5Zyo5a2Q5qih57uE6Lev5b6EICckc21fcGF0aCcg5Lit6I635Y+WIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICIKKyInJHNtX3BhdGgnIgorbXNnc3RyICLml6Dms5XlnKjlrZDmqKHnu4Tot6/lvoQgJyRzbV9wYXRoJyDkuK3mib7liLDlvZPliY3niYjmnKwgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyMworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzsgdHJ5aW5nIHRvIGRpcmVjdGx5IGZldGNoICIKKyIkc2hhMToiCittc2dzdHIgIuaXoOazleWcqOWtkOaooee7hOi3r+W+hCAnJGRpc3BsYXlwYXRoJyDkuK3ojrflj5bvvIzlsJ3or5Xnm7TmjqXojrflj5YgJHNoYTHvvJoiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjI5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRmV0Y2hlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJywgYnV0IGl0IGRpZCBub3QgY29udGFpbiAkc2hhMS4gIgorIkRpcmVjdCBmZXRjaGluZyBvZiB0aGF0IGNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICIiCisi6I635Y+W5LqG5a2Q5qih57uE6Lev5b6EICckZGlzcGxheXBhdGgn77yM5L2G5piv5a6D5rKh5pyJ5YyF5ZCrICRzaGEx44CC55u05o6l6I635Y+W6K+l5o+Q5Lqk5aSx6LSl44CCIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIuaXoOazleWcqOWtkOaooee7hOi3r+W+hCAnJGRpc3BsYXlwYXRoJyDkuK3mo4Dlh7ogJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICLlrZDmqKHnu4Tot6/lvoQgJyRkaXNwbGF5cGF0aCfvvJrmo4Dlh7ogJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi5peg5rOV5Zyo5a2Q5qih57uE6Lev5b6EICckZGlzcGxheXBhdGgnIOS4reWPmOWfuiAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICLlrZDmqKHnu4Tot6/lvoQgJyRkaXNwbGF5cGF0aCfvvJrlj5jln7roh7MgJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLml6Dms5XlkIjlubYgJyRzaGExJyDliLDlrZDmqKHnu4Tot6/lvoQgJyRkaXNwbGF5cGF0aCcg5LitIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0OAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICLlrZDmqKHnu4Tot6/lvoQgJyRkaXNwbGF5cGF0aCfvvJrlt7LlkIjlubblhaUgJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBvZiAnJGNvbW1hbmQgJHNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi5Zyo5a2Q5qih57uEICckZGlzcGxheXBhdGgnIOS4reaJp+ihjCAnJGNvbW1hbmQgJHNoYTEnIOWksei0pSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICLlrZDmqKHnu4QgJyRkaXNwbGF5cGF0aCfvvJonJGNvbW1hbmQgJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi5peg5rOV6YCS5b2S6L+b5a2Q5qih57uE6Lev5b6EICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIumAiemhuSAtLWNhY2hlZCDkuI3og73lkozpgInpobkgLS1maWxlcyDlkIzml7bkvb/nlKgiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTQ4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG1vZGUgJG1vZF9kc3QiCittc2dzdHIgIuaEj+WklueahOaooeW8jyAkbW9kX2RzdCIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBnaXQtc3VibW9kdWxlLnNoOjk2OAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgIOitpuWRiu+8miRkaXNwbGF5X25hbWUg5pyq5YyF5ZCr5o+Q5LqkICRzaGExX3NyYyIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBnaXQtc3VibW9kdWxlLnNoOjk3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgIOitpuWRiu+8miRkaXNwbGF5X25hbWUg5pyq5YyF5ZCr5o+Q5LqkICRzaGExX2RzdCIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBnaXQtc3VibW9kdWxlLnNoOjk3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIgIOitpuWRiu+8miRkaXNwbGF5X25hbWUg5pyq5YyF5ZCr5o+Q5LqkICRzaGExX3NyYyDlkowgJHNoYTFfZHN0IgorCisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTZWUgZ2l0LSR7Y21kfSgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIuivpuingSBnaXQtJHtjbWR9KDEp44CCIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTA5Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guIgorbXNnc3RyICLlt7LlupTnlKggYXV0b3N0YXNo44CCIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgIuS4jeiDveWtmOWCqCAkc3Rhc2hfc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNpbmcgKCRuZXdfY291bnQvJHRvdGFsKSIKK21zZ3N0ciAi5Y+Y5Z+65Lit77yIJG5ld19jb3VudC8kdG90YWzvvIkiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMDcKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1pdD4gPSBydW4gY29tbWFuZCAodGhlIHJlc3Qgb2YgdGhlIGxpbmUpIHVzaW5nIHNoZWxsXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLlxuIgorbXNnc3RyICIiCisiXG4iCisi5ZG95LukOlxuIgorInAsIHBpY2sgPOaPkOS6pD4gPSDkvb/nlKjmj5DkuqRcbiIKKyJyLCByZXdvcmQgPOaPkOS6pD4gPSDkvb/nlKjmj5DkuqTvvIzkvYbkv67mlLnmj5DkuqTor7TmmI5cbiIKKyJlLCBlZGl0IDzmj5DkuqQ+ID0g5L2/55So5o+Q5Lqk77yM5L2G5YGc5LiL5p2l5L+u6KGlXG4iCisicywgc3F1YXNoIDzmj5DkuqQ+ID0g5L2/55So5o+Q5Lqk77yM5L2G6J6N5ZCI5Yiw5YmN5LiA5Liq5o+Q5LqkXG4iCisiZiwgZml4dXAgPOaPkOS6pD4gPSDnsbvkvLzkuo4gXCJzcXVhc2hcIu+8jOS9huS4ouW8g+aPkOS6pOivtOaYjuaXpeW/l1xuIgorIngsIGV4ZWMgPOWRveS7pD4gPSDkvb/nlKggc2hlbGwg6L+Q6KGM5ZG95Luk77yI5q2k6KGM5Ymp5L2Z6YOo5YiG77yJXG4iCisiZCwgZHJvcCA85o+Q5LqkPiA9IOWIoOmZpOaPkOS6pFxuIgorImwsIGxhYmVsIDzmoIfnrb4+ID0g5Li65b2T5YmNIEhFQUQg5omT5LiK5qCH562+XG4iCisidCwgcmVzZXQgPOagh+etvj4gPSDph43nva4gSEVBRCDliLDor6XmoIfnrb5cbiIKKyJtLCBtZXJnZSBbLUMgPOaPkOS6pD4gfCAtYyA85o+Q5LqkPl0gPOagh+etvj4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAg5Yib5bu65LiA5Liq5ZCI5bm25o+Q5Lqk77yM5bm25L2/55So5Y6f5aeL55qE5ZCI5bm25o+Q5Lqk6K+05piO77yI5aaC5p6c5rKh5pyJ5oyH5a6aXG4iCisiLiAgICAgICDljp/lp4vmj5DkuqTvvIzkvb/nlKjms6jph4rpg6jliIbnmoQgb25lbGluZSDkvZzkuLrmj5DkuqTor7TmmI7vvInjgILkvb/nlKhcbiIKKyIuICAgICAgIC1jIDzmj5DkuqQ+IOWPr+S7pee8lui+keaPkOS6pOivtOaYjuOAglxuIgorIlxuIgorIuWPr+S7peWvuei/meS6m+ihjOmHjeaWsOaOkuW6j++8jOWwhuS7juS4iuiHs+S4i+aJp+ihjOOAglxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyLmgqjnjrDlnKjlj6/ku6Xkv67ooaXov5nkuKrmj5DkuqTvvIzkvb/nlKhcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIuW9k+aCqOWvueWPmOabtOaEn+WIsOa7oeaEj++8jOaJp+ihjFxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Mjk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkc2hhMTogbm90IGEgY29tbWl0IHRoYXQgY2FuIGJlIHBpY2tlZCIKK21zZ3N0ciAiJHNoYTHvvJrkuI3mmK/kuIDkuKrlj6/ku6Xooqvmi6PpgInnmoTmj5DkuqQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozMzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWl0IG5hbWU6ICRzaGExIgorbXNnc3RyICLml6DmlYjnmoTmj5DkuqTlkI3vvJokc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjM2NAorbXNnaWQgIkNhbm5vdCB3cml0ZSBjdXJyZW50IGNvbW1pdCdzIHJlcGxhY2VtZW50IHNoYTEiCittc2dzdHIgIuS4jeiDveWGmeWFpeW9k+WJjeaPkOS6pOeahOabv+S7oyBzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIuW/q+i/m+WIsCAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAi5LiN6IO95b+r6L+b5YiwICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgbW92ZSBIRUFEIHRvICRmaXJzdF9wYXJlbnQiCittc2dzdHIgIuS4jeiDveenu+WKqCBIRUFEIOWIsCAkZmlyc3RfcGFyZW50IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBzcXVhc2ggYSBtZXJnZTogJHNoYTEiCittc2dzdHIgIuaLkue7neWOi+e8qeS4gOS4quWQiOW5tu+8miRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWRvaW5nIG1lcmdlICRzaGExIgorbXNnc3RyICLml6Dms5Xph43lgZrlkIjlubYgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwaWNrICRzaGExIgorbXNnc3RyICLkuI3og73mi6PpgIkgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMke259OiIKK21zZ3N0ciAi6L+Z5piv5o+Q5Lqk6K+05piOICMke25977yaIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyR7bn0gd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAi5o+Q5Lqk6K+05piOICMke259IOWwhuiiq+i3s+i/h++8miIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ4MworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXQuIgorbXNnaWRfcGx1cmFsICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdHMuIgorbXNnc3RyWzBdICLov5nmmK/kuIDkuKogJGNvdW50IOS4quaPkOS6pOeahOe7hOWQiOOAgiIKK21zZ3N0clsxXSAi6L+Z5piv5LiA5LiqICRjb3VudCDkuKrmj5DkuqTnmoTnu4TlkIjjgIIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB3cml0ZSAkZml4dXBfbXNnIgorbXNnc3RyICLkuI3og73lhpnlhaUgJGZpeHVwX21zZyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5NQorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHMuIgorbXNnc3RyICLov5nmmK/kuIDkuKogMiDkuKrmj5DkuqTnmoTnu4TlkIjjgIIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1MzYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU3OQorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICRzaGExLi4uICRyZXN0IgorbXNnc3RyICLkuI3og73lupTnlKggJHNoYTEuLi4gJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgYW1lbmQgY29tbWl0IGFmdGVyIHN1Y2Nlc3NmdWxseSBwaWNraW5nICRzaGExLi4uICRyZXN0XG4iCisiVGhpcyBpcyBtb3N0IGxpa2VseSBkdWUgdG8gYW4gZW1wdHkgY29tbWl0IG1lc3NhZ2UsIG9yIHRoZSBwcmUtY29tbWl0IGhvb2tcbiIKKyJmYWlsZWQuIElmIHRoZSBwcmUtY29tbWl0IGhvb2sgZmFpbGVkLCB5b3UgbWF5IG5lZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUgIgorImJlZm9yZVxuIgorInlvdSBhcmUgYWJsZSB0byByZXdvcmQgdGhlIGNvbW1pdC4iCittc2dzdHIgIiIKKyLkuI3og73lnKjmiJDlip/mi6PpgIkgJHNoYTEuLi4gJHJlc3Qg5LmL5ZCO5L+u6KGl5o+Q5LqkXG4iCisi6L+Z6YCa5bi45piv5Zug5Li656m655qE5o+Q5Lqk6K+05piO77yM5oiW6ICFIHByZS1jb21taXQg6ZKp5a2Q5omn6KGM5aSx6LSl44CC5aaC5p6c5pivIHByZS1jb21taXRcbiIKKyLpkqnlrZDmiafooYzlpLHotKXvvIzkvaDlj6/og73pnIDopoHlnKjph43lhpnmj5DkuqTor7TmmI7liY3op6PlhrPov5nkuKrpl67popjjgIIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJHNoYTFfYWJicmV2Li4uICRyZXN0IgorbXNnc3RyICLlgZzmraLlnKggJHNoYTFfYWJicmV2Li4uICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJyRzcXVhc2hfc3R5bGUnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIuayoeacieeItuaPkOS6pOeahOaDheWGteS4i+S4jeiDvSAnJHNxdWFzaF9zdHlsZSciCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2ODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZzogJHJlc3QiCittc2dzdHIgIuaJp+ihjO+8miRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gZmFpbGVkOiAkcmVzdCIKK21zZ3N0ciAi5omn6KGM5aSx6LSl77yaJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTMKK21zZ2lkICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi5bm25LiU5L+u5pS557Si5byV5ZKML+aIluW3peS9nOWMuiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Njk1Cittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIuaCqOWPr+S7peino+WGs+i/meS4qumXrumimO+8jOeEtuWQjui/kOihjFxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjLiBUUkFOU0xBVE9SUzogYWZ0ZXIgdGhlc2UgbGluZXMgaXMgYSBjb21tYW5kIHRvIGJlIGlzc3VlZCBieSB0aGUgdXNlcgorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICRyZXN0XG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIuaJp+ihjOaIkOWKn++8miRyZXN0XG4iCisi5L2G5piv5Zyo57Si5byV5ZKML+aIluW3peS9nOWMuuS4reWtmOWcqOWPmOabtOOAguaPkOS6pOaIlui0ruiXj+S/ruaUue+8jOeEtuWQjui/kOihjFxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzE5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1hbmQ6ICRjb21tYW5kICRzaGExICRyZXN0IgorbXNnc3RyICLmnKrnn6Xlkb3ku6TvvJokY29tbWFuZCAkc2hhMSAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcyMAorbXNnaWQgIlBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICLopoHkv67mlLnor7fkvb/nlKjlkb3ku6QgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8n44CCIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzU1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCAkaGVhZF9uYW1lLiIKK21zZ3N0ciAi5oiQ5Yqf5Y+Y5Z+65bm25pu05pawICRoZWFkX25hbWXjgIIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTIKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIuS4jeiDveWIoOmZpCBDSEVSUllfUElDS19IRUFEIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmVcbiIKKyJzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisi5oKo5bey5pqC5a2Y5LqG5bel5L2c5Yy655qE5L+u5pS544CC5aaC5p6c6L+Z5Lqb5L+u5pS56KaB5Y6L57yp5Yiw5YmN5LiA5Liq5o+Q5Lqk77yM5omn6KGM77yaXG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyLlpoLmnpzov5nkupvlj5jmm7TopoHlvaLmiJDkuIDkuKrmlrDmj5DkuqTvvIzmiafooYzvvJpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyLml6Dorrrlk6rnp43mg4XlhrXvvIzlvZPmgqjlrozmiJDmj5DkuqTvvIznu6fnu63miafooYzvvJpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM0Cittc2dpZCAiRXJyb3IgdHJ5aW5nIHRvIGZpbmQgdGhlIGF1dGhvciBpZGVudGl0eSB0byBhbWVuZCBjb21taXQiCittc2dzdHIgIuWcqOS/ruihpeaPkOS6pOS4reafpeaJvuS9nOiAheS/oeaBr+aXtumBh+WIsOmUmeivryIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgzOQorbXNnaWQgIiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisi5oKo55qE5bel5L2c5Yy65Lit5pyJ5pyq5o+Q5Lqk55qE5Y+Y5pu044CC6K+35YWI5o+Q5Lqk54S25ZCO5YaN5qyh6L+Q6KGMICdnaXQgcmViYXNlIC0tY29udGludWUn44CCIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ0IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDgKK21zZ2lkICJDb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5LiN6IO95o+Q5Lqk5pqC5a2Y55qE5L+u5pS544CCIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODc5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NjUKK21zZ2lkICJDb3VsZCBub3QgZXhlY3V0ZSBlZGl0b3IiCittc2dzdHIgIuaXoOazlei/kOihjOe8lui+keWZqCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCittc2dzdHIgIuS4jeiDveajgOWHuiAkc3dpdGNoX3RvIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA3Cittc2dpZCAiTm8gSEVBRD8iCittc2dzdHIgIuayoeaciSBIRUFE77yfIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAkc3RhdGVfZGlyIgorbXNnc3RyICLkuI3og73liJvlu7rkuLTml7YgJHN0YXRlX2RpciIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkxMQorbXNnaWQgIkNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICLkuI3og73moIforrDkuLrkuqTkupLlvI8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmQpIgorbXNnaWRfcGx1cmFsICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kcykiCittc2dzdHJbMF0gIuWPmOWfuiAkc2hvcnRyZXZpc2lvbnMg5YiwICRzaG9ydG9udG/vvIgkdG9kb2NvdW50IOS4quaPkOS6pO+8iSIKK21zZ3N0clsxXSAi5Y+Y5Z+6ICRzaG9ydHJldmlzaW9ucyDliLAgJHNob3J0b250b++8iCR0b2RvY291bnQg5Liq5o+Q5Lqk77yJIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTU1Cittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgIuazqOaEj+epuuaPkOS6pOW3suiiq+azqOmHiuaOiSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk5NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTAwMgorbXNnaWQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorbXNnc3RyICLkuI3og73lr7nph43lhpnmj5DkuqTov5vooYzliJ3lp4vljJYiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDo4OSBnaXQtc2gtc2V0dXAuc2g6OTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVzYWdlOiAkZGFzaGxlc3MgJFVTQUdFIgorbXNnc3RyICLnlKjms5XvvJokZGFzaGxlc3MgJFVTQUdFIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgY2hkaXIgdG8gJGNkdXAsIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLkuI3og73liIfmjaLnm67lvZXliLAgJGNkdXDvvIzlt6XkvZzljLrnmoTpobbnuqfnm67lvZUiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMDAgZ2l0LXNoLXNldHVwLnNoOjIwNworIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6ICRwcm9ncmFtX25hbWUgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIuiHtOWRvemUmeivr++8miRwcm9ncmFtX25hbWUg5LiN6IO95Zyo5rKh5pyJ5bel5L2c5Yy655qE5oOF5Ya15LiL5L2/55SoIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjIxCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIuS4jeiDveWPmOWfuu+8muaCqOacieacquaaguWtmOeahOWPmOabtOOAgiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNAorbXNnaWQgIkNhbm5vdCByZXdyaXRlIGJyYW5jaGVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5LiN6IO96YeN5YaZ5YiG5pSv77ya5oKo5pyJ5pyq5pqC5a2Y55qE5Y+Y5pu044CCIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI3Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLml6Dms5XpgJrov4flj5jln7rmlrnlvI/mi4nlj5bvvJrmgqjmnInmnKrmmoLlrZjnmoTlj5jmm7TjgIIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5LiN6IO9ICRhY3Rpb27vvJrmgqjmnInmnKrmmoLlrZjnmoTlj5jmm7TjgIIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDMKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLkuI3og73lj5jln7rvvJrmgqjnmoTntKLlvJXkuK3ljIXlkKvmnKrmj5DkuqTnmoTlj5jmm7TjgIIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDYKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5peg5rOV6YCa6L+H5Y+Y5Z+65pa55byP5ouJ5Y+W77ya5oKo55qE57Si5byV5Lit5YyF5ZCr5pyq5o+Q5Lqk55qE5Y+Y5pu044CCIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5LiN6IO9ICRhY3Rpb27vvJrmgqjnmoTntKLlvJXkuK3ljIXlkKvmnKrmj5DkuqTnmoTlj5jmm7TjgIIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTMKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIuiAjOS4lOaCqOeahOe0ouW8leS4reWMheWQq+acquaPkOS6pOeahOWPmOabtOOAgiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3MworbXNnaWQgIllvdSBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIuaCqOmcgOimgeWcqOW3peS9nOWMuueahOmhtue6p+ebruW9leS4rei/kOihjOi/meS4quWRveS7pOOAgiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3OAorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgYWJzb2x1dGUgcGF0aCBvZiBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICLkuI3og73noa7lrpogZ2l0IOebruW9leeahOe7neWvuei3r+W+hCIKKworIy4gVFJBTlNMQVRPUlM6IHlvdSBjYW4gYWRqdXN0IHRoaXMgdG8gYWxpZ24gImdpdCBhZGQgLWkiIHN0YXR1cyBtZW51CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIlMTJzICUxMnMgJXMiCittc2dzdHIgIiUxMnMgJTEycyAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidG91Y2hlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInRvdWNoZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi6Kem56Kw5LqGICVkIOS4qui3r+W+hFxuIgorbXNnc3RyWzFdICLop6bnorDkuoYgJWQg5Liq6Lev5b6EXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1MworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy4iCittc2dzdHIgIuWmguaenOihpeS4geiDveW5suWHgOWcsOW6lOeUqO+8jOe8lui+keWdl+Wwhueri+WNs+agh+iusOS4uuaaguWtmOOAgiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDU2Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFzaGluZy4iCittc2dzdHIgIuWmguaenOihpeS4geiDveW5suWHgOWcsOW6lOeUqO+8jOe8lui+keWdl+Wwhueri+WNs+agh+iusOS4uui0ruiXj+OAgiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDU5Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciB1bnN0YWdpbmcuIgorbXNnc3RyICLlpoLmnpzooaXkuIHog73lubLlh4DlnLDlupTnlKjvvIznvJbovpHlnZflsIbnq4vljbPmoIforrDkuLrmnKrmmoLlrZjjgIIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzEKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgYXBwbHlpbmcuIgorbXNnc3RyICLlpoLmnpzooaXkuIHog73lubLlh4DlnLDlupTnlKjvvIznvJbovpHlnZflsIbnq4vljbPmoIforrDkuLrlupTnlKjjgIIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NAorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgZGlzY2FyZGluZy4iCittc2dzdHIgIuWmguaenOihpeS4geiDveW5suWHgOWcsOW6lOeUqO+8jOe8lui+keWdl+Wwhueri+WNs+agh+iusOS4uuS4ouW8g+OAgiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTExCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAi5Li65YaZ5YWl5omT5byA5Z2X57yW6L6R5paH5Lu25aSx6LSl77yaJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVzIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorIi0tLVxuIgorIuimgeWIoOmZpCAnJXMnIOW8gOWni+eahOihjO+8jOS9v+WFtuaIkOS4uiAnICcg5byA5aeL55qE6KGM77yI5LiK5LiL5paH77yJ44CCXG4iCisi6KaB5Yig6ZmkICclcycg5byA5aeL55qE6KGM77yM5Yig6Zmk5a6D5Lus44CCXG4iCisi5LulICVzIOW8gOWni+eahOihjOWwhuiiq+WIoOmZpOOAglxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExNDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHJlYWRpbmc6ICVzIgorbXNnc3RyICLml6Dms5Xor7vlj5blnZfnvJbovpHmlofku7bvvJolcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjQ4Cittc2dpZCAiIgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIOaaguWtmOivpeWdl1xuIgorIm4gLSDkuI3opoHmmoLlrZjor6XlnZdcbiIKKyJxIC0g6YCA5Ye644CC5LiN5pqC5a2Y6K+l5Z2X5Y+K5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisiYSAtIOaaguWtmOivpeWdl+WSjOacrOaWh+S7tuS4reWQjumdoueahOWFqOmDqOWdl1xuIgorImQgLSDkuI3mmoLlrZjor6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZciCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI1NAorbXNnaWQgIiIKKyJ5IC0gc3Rhc2ggdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YXNoIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDotK7ol4/or6XlnZdcbiIKKyJuIC0g5LiN6KaB6LSu6JeP6K+l5Z2XXG4iCisicSAtIOmAgOWHuuOAguS4jei0ruiXj+ivpeWdl+WPiuWQjumdoueahOWFqOmDqOWdl1xuIgorImEgLSDotK7ol4/or6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJkIC0g5LiN6LSu6JeP6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNjAKK21zZ2lkICIiCisieSAtIHVuc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSB1bnN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIOS4jeaaguWtmOivpeWdl1xuIgorIm4gLSDkuI3opoHkuI3mmoLlrZjor6XlnZdcbiIKKyJxIC0g6YCA5Ye644CC5LiN6KaB5LiN5pqC5a2Y6K+l5Z2X5Y+K5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisiYSAtIOS4jeaaguWtmOivpeWdl+WSjOacrOaWh+S7tuS4reWQjumdoueahOWFqOmDqOWdl1xuIgorImQgLSDkuI3opoHkuI3mmoLlrZjor6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZciCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDlnKjntKLlvJXkuK3lupTnlKjor6XlnZdcbiIKKyJuIC0g5LiN6KaB5Zyo57Si5byV5Lit5bqU55So6K+l5Z2XXG4iCisicSAtIOmAgOWHuuOAguS4jeimgeW6lOeUqOivpeWdl+WPiuWQjumdoueahOWFqOmDqOWdl1xuIgorImEgLSDlupTnlKjor6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJkIC0g5LiN6KaB5bqU55So6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjkwCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g5Zyo5bel5L2c5Yy65Lit5Lii5byD6K+l5Z2XXG4iCisibiAtIOS4jeimgeWcqOW3peS9nOWMuuS4reS4ouW8g+ivpeWdl1xuIgorInEgLSDpgIDlh7rjgILkuI3opoHkuKLlvIPor6XlnZflj4rlkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJhIC0g5Lii5byD6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisiZCAtIOS4jeimgeS4ouW8g+ivpeWdl+WSjOacrOaWh+S7tuS4reWQjumdoueahOWFqOmDqOWdlyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjc4Cittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDlnKjntKLlvJXlkozlt6XkvZzljLrkuK3kuKLlvIPor6XlnZdcbiIKKyJuIC0g5LiN6KaB5Zyo57Si5byV5ZKM5bel5L2c5Yy65Lit5Lii5byD6K+l5Z2XXG4iCisicSAtIOmAgOWHuuOAguS4jeimgeS4ouW8g+ivpeWdl+WPiuWQjumdoueahOWFqOmDqOWdl1xuIgorImEgLSDkuKLlvIPor6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJkIC0g5LiN6KaB5Lii5byD6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyODQKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDlnKjntKLlvJXlkozlt6XkvZzljLrkuK3lupTnlKjor6XlnZdcbiIKKyJuIC0g5LiN6KaB5Zyo57Si5byV5ZKM5bel5L2c5Yy65Lit5bqU55So6K+l5Z2XXG4iCisicSAtIOmAgOWHuuOAguS4jeimgeW6lOeUqOivpeWdl+WPiuWQjumdoueahOWFqOmDqOWdl1xuIgorImEgLSDlupTnlKjor6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJkIC0g5LiN6KaB5bqU55So6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyOTYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g5Zyo5bel5L2c5Yy65Lit5bqU55So6K+l5Z2XXG4iCisibiAtIOS4jeimgeWcqOW3peS9nOWMuuS4reW6lOeUqOivpeWdl1xuIgorInEgLSDpgIDlh7rjgILkuI3opoHlupTnlKjor6XlnZflj4rlkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJhIC0g5bqU55So6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisiZCAtIOS4jeimgeW6lOeUqOivpeWdl+WSjOacrOaWh+S7tuS4reWQjumdoueahOWFqOmDqOWdlyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzExCittc2dpZCAiIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiZyAtIOmAieaLqei3s+i9rOWIsOS4gOS4quWdl1xuIgorIi8gLSDmn6Xmib7lkoznu5nlrprmraPliJnooajovr7lvI/ljLnphY3nmoTlnZdcbiIKKyJqIC0g57u05oyB6K+l5Z2X5pyq5Yaz54q25oCB77yM5p+l55yL5LiL5LiA5Liq5pyq5Yaz5Z2XXG4iCisiSiAtIOe7tOaMgeivpeWdl+acquWGs+eKtuaAge+8jOafpeeci+S4i+S4gOS4quWdl1xuIgorImsgLSDnu7TmjIHor6XlnZfmnKrlhrPnirbmgIHvvIzmn6XnnIvkuIrkuIDkuKrmnKrlhrPlnZdcbiIKKyJLIC0g57u05oyB6K+l5Z2X5pyq5Yaz54q25oCB77yM5p+l55yL5LiK5LiA5Liq5Z2XXG4iCisicyAtIOaLhuWIhuW9k+WJjeWdl+S4uuabtOWwj+eahOWdl1xuIgorImUgLSDmiYvliqjnvJbovpHlvZPliY3lnZdcbiIKKyI/IC0g5pi+56S65biu5YqpXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MgorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIgorbXNnc3RyICLpgInkuK3nmoTlnZfkuI3og73lupTnlKjliLDntKLlvJXvvIFcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzU3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlc1xuIgorbXNnc3RyICLlv73nlaXmnKrlkIjlhaXnmoTvvJolc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWwhuaooeW8j+WPmOabtOW6lOeUqOWIsOW3peS9nOWMuiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlsIbliKDpmaTmk43kvZzlupTnlKjliLDlt6XkvZzljLogW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWwhuivpeWdl+W6lOeUqOWIsOW3peS9nOWMuiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTcwCittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290b1xuIgorbXNnc3RyICLmsqHmnInlhbblroPlj6/kvpvot7PovaznmoTlnZdcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTg4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnXG4iCittc2dzdHIgIuaXoOaViOaVsOWtl++8miclcydcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTkzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLlxuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuXG4iCittc2dzdHJbMF0gIuWvueS4jei1t++8jOWPquaciSAlZCDkuKrlj6/nlKjlnZfjgIJcbiIKK21zZ3N0clsxXSAi5a+55LiN6LW377yM5Y+q5pyJICVkIOS4quWPr+eUqOWdl+OAglxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MTkKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBzZWFyY2hcbiIKK21zZ3N0ciAi5rKh5pyJ5YW25a6D5Y+v5L6b5p+l5om+55qE5Z2XXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYzNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAlczogJXNcbiIKK21zZ3N0ciAi6ZSZ6K+v55qE5q2j5YiZ6KGo6L6+5byPICVz77yaJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjQ2Cittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iCittc2dzdHIgIuayoeacieWSjOe7meWumuaooeW8j+ebuOWMuemFjeeahOWdl1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjgwCittc2dpZCAiTm8gcHJldmlvdXMgaHVua1xuIgorbXNnc3RyICLmsqHmnInliY3kuIDkuKrlnZdcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjY3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY4NgorbXNnaWQgIk5vIG5leHQgaHVua1xuIgorbXNnc3RyICLmsqHmnInkuIvkuIDkuKrlnZdcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjkyCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmtcbiIKK21zZ3N0ciAi5a+55LiN6LW377yM5LiN6IO95ouG5YiG6L+Z5Liq5Z2XXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmsuXG4iCittc2dpZF9wbHVyYWwgIlNwbGl0IGludG8gJWQgaHVua3MuXG4iCittc2dzdHJbMF0gIuaLhuWIhuS4uiAlZCDlnZfjgIJcbiIKK21zZ3N0clsxXSAi5ouG5YiG5Li6ICVkIOWdl+OAglxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3MDgKK21zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIuWvueS4jei1t++8jOS4jeiDvee8lui+kei/meS4quWdl1xuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGRvIG5vdCB0cmFuc2xhdGUgdGhlIGNvbW1hbmQgbmFtZXMKKyMuICdzdGF0dXMnLCAndXBkYXRlJywgJ3JldmVydCcsIGV0Yy4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc3MworbXNnaWQgIiIKKyJzdGF0dXMgICAgICAgIC0gc2hvdyBwYXRocyB3aXRoIGNoYW5nZXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzXG4iCisicmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uXG4iCisicGF0Y2ggICAgICAgICAtIHBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseVxuIgorImRpZmYgICAgICAgICAgLSB2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleFxuIgorImFkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mICIKKyJjaGFuZ2VzXG4iCittc2dzdHIgIiIKKyJzdGF0dXMgICAgICAgIC0g5pi+56S65ZCr5Y+Y5pu055qE6Lev5b6EXG4iCisidXBkYXRlICAgICAgICAtIOa3u+WKoOW3peS9nOWMuueKtuaAgeiHs+aaguWtmOWIl+ihqFxuIgorInJldmVydCAgICAgICAgLSDov5jljp/kv67mlLnnmoTmmoLlrZjpm4boh7MgSEVBRCDniYjmnKxcbiIKKyJwYXRjaCAgICAgICAgIC0g5oyR6YCJ5Z2X5bm25LiU5pyJ6YCJ5oup5Zyw5pu05pawXG4iCisiZGlmZiAgICAgICAgICAtIOaYvuekuiBIRUFEIOWSjOe0ouW8lemXtOW3ruW8glxuIgorImFkZCB1bnRyYWNrZWQgLSDmt7vliqDmnKrot5/ouKrmlofku7bnmoTlhoXlrrnoh7PmmoLlrZjliJfooahcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzkwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5NQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgwNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgxNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNQorbXNnaWQgIm1pc3NpbmcgLS0iCittc2dzdHIgIue8uuWksSAtLSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODIxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVua25vd24gLS1wYXRjaCBtb2RlOiAlcyIKK21zZ3N0ciAi5pyq55+l55qEIC0tcGF0Y2gg5qih5byP77yaJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcywgZXhwZWN0aW5nIC0tIgorbXNnc3RyICLml6DmlYjnmoTlj4LmlbAgJXPvvIzmnJ/mnJvmmK8gLS0iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM4Cittc2dpZCAibG9jYWwgem9uZSBkaWZmZXJzIGZyb20gR01UIGJ5IGEgbm9uLW1pbnV0ZSBpbnRlcnZhbFxuIgorbXNnc3RyICLmnKzlnLDml7bpl7TlkowgR01UIOacieS4jeWIsOS4gOWIhumSn+mXtOmalFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MQorbXNnaWQgImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIgorbXNnc3RyICLmnKzlnLDml7bpl7TlgY/np7vph4/lpKfkuo7nrYnkuo4gMjQg5bCP5pe2XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjIzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MjI5Cittc2dpZCAidGhlIGVkaXRvciBleGl0ZWQgdW5jbGVhbmx5LCBhYm9ydGluZyBldmVyeXRoaW5nIgorbXNnc3RyICLnvJbovpHlmajpnZ7mraPluLjpgIDlh7rvvIznu4jmraLmiYDmnInmk43kvZwiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzEwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvbnRhaW5zIGFuIGludGVybWVkaWF0ZSB2ZXJzaW9uIG9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iCittc2dzdHIgIiclcycg5YyF5ZCr5oKo5q2j5Zyo57yW5YaZ55qE5LiA5Liq5Lit6Ze054mI5pys55qE6YKu5Lu244CCXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzE1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiclcy5maW5hbCcgY29udGFpbnMgdGhlIGNvbXBvc2VkIGVtYWlsLlxuIgorbXNnc3RyICInJXMuZmluYWwnIOWMheWQq+e8lui+keeahOmCruS7tuOAglxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQwOAorbXNnaWQgIi0tZHVtcC1hbGlhc2VzIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIG9wdGlvbnNcbiIKK21zZ3N0ciAiLS1kdW1wLWFsaWFzZXMg5ZKM5YW25a6D6YCJ6aG55LiN5YW85a65XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDgxIGdpdC1zZW5kLWVtYWlsLnBlcmw6NjgzCittc2dpZCAiQ2Fubm90IHJ1biBnaXQgZm9ybWF0LXBhdGNoIGZyb20gb3V0c2lkZSBhIHJlcG9zaXRvcnlcbiIKK21zZ3N0ciAi5LiN6IO95Zyo5LuT5bqT5LmL5aSW6L+Q6KGMIGdpdCBmb3JtYXQtcGF0Y2hcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0ODQKK21zZ2lkICIiCisiYGJhdGNoLXNpemVgIGFuZCBgcmVsb2dpbmAgbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgKHZpYSBjb21tYW5kLWxpbmUgb3IgIgorImNvbmZpZ3VyYXRpb24gb3B0aW9uKVxuIgorbXNnc3RyICJgYmF0Y2gtc2l6ZWAg5ZKMIGByZWxvZ2luYCDlv4XpobvlkIzml7blrprkuYnvvIjpgJrov4flkb3ku6TooYzmiJbogIXphY3nva7pgInpobnvvIlcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0OTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLXN1cHByZXNzLWNjIGZpZWxkOiAnJXMnXG4iCittc2dzdHIgIuacquefpeeahCAtLXN1cHByZXNzLWNjIOWtl+aute+8miclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLWNvbmZpcm0gc2V0dGluZzogJyVzJ1xuIgorbXNnc3RyICLmnKrnn6XnmoQgLS1jb25maXJtIOiuvue9ru+8miclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgYWxpYXMgd2l0aCBxdW90ZXMgaXMgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAi6K2m5ZGK77ya5LiN5pSv5oyB5bim5byV5Y+355qEIHNlbmRtYWlsIOWIq+WQje+8miVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGA6aW5jbHVkZTpgIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIuitpuWRiu+8muS4jeaUr+aMgSBgOmluY2x1ZGU6YO+8miVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTYwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGAvZmlsZWAgb3IgYHxwaXBlYCByZWRpcmVjdGlvbiBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICLorablkYrvvJrkuI3mlK/mjIEgYC9maWxlYCDmiJYgYHxwaXBlYCDph43lrprlkJHvvJolc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBsaW5lIGlzIG5vdCByZWNvZ25pemVkOiAlc1xuIgorbXNnc3RyICLorablkYrvvJrkuI3og73or4bliKvnmoQgc2VuZG1haWwg6KGM77yaJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NDkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgJyVzJyBleGlzdHMgYnV0IGl0IGNvdWxkIGFsc28gYmUgdGhlIHJhbmdlIG9mIGNvbW1pdHNcbiIKKyJ0byBwcm9kdWNlIHBhdGNoZXMgZm9yLiAgUGxlYXNlIGRpc2FtYmlndWF0ZSBieS4uLlxuIgorIlxuIgorIiAgICAqIFNheWluZyBcIi4vJXNcIiBpZiB5b3UgbWVhbiBhIGZpbGU7IG9yXG4iCisiICAgICogR2l2aW5nIC0tZm9ybWF0LXBhdGNoIG9wdGlvbiBpZiB5b3UgbWVhbiBhIHJhbmdlLlxuIgorbXNnc3RyICIiCisi5a2Y5Zyo5paH5Lu2ICclcycg5L2G5piv5a6D5Lmf5Y+v6IO95piv5LiA5Liq55So5LqO5Lqn55Sf6KGl5LiB5YiX6KGo55qE5o+Q5Lqk6IyD5Zu044CC6K+355So5aaC5LiL5pa55rOV5raI6ZmkIgorIuatp+S5ie+8mlxuIgorIlxuIgorIiAgICAqIOWmguaenOWQq+S5ieS4uuS4gOS4quaWh+S7tu+8jOS9v+eUqCBcIi4vJXNcIu+8jOaIluiAhVxuIgorIiAgICAqIOWmguaenOWQq+S5ieS4uuS4gOS4quiMg+WbtO+8jOS9v+eUqCAtLWZvcm1hdC1wYXRjaCDpgInpobnjgIJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW5kaXIgJXM6ICVzIgorbXNnc3RyICLml6Dms5XmiZPlvIDnm67lvZUgJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY5NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiZmF0YWw6ICVzOiAlc1xuIgorIndhcm5pbmc6IG5vIHBhdGNoZXMgd2VyZSBzZW50XG4iCittc2dzdHIgIiIKKyLoh7Tlkb3plJnor6/vvJolc++8miVzXG4iCisi6K2m5ZGK77ya6KGl5LiB5pyq6IO95Y+R6YCBXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzA1Cittc2dpZCAiIgorIlxuIgorIk5vIHBhdGNoIGZpbGVzIHNwZWNpZmllZCFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIuacquaMh+WumuihpeS4geaWh+S7tu+8gVxuIgorIlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJObyBzdWJqZWN0IGxpbmUgaW4gJXM/IgorbXNnc3RyICLlnKggJXMg5Lit5rKh5pyJ5qCH6aKY6KGM77yfIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAlczogJXMiCittc2dzdHIgIuS4uuWGmeWFpeaJk+W8gCAlcyDlpLHotKU6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjczOQorbXNnaWQgIiIKKyJMaW5lcyBiZWdpbm5pbmcgaW4gXCJHSVQ6XCIgd2lsbCBiZSByZW1vdmVkLlxuIgorIkNvbnNpZGVyIGluY2x1ZGluZyBhbiBvdmVyYWxsIGRpZmZzdGF0IG9yIHRhYmxlIG9mIGNvbnRlbnRzXG4iCisiZm9yIHRoZSBwYXRjaCB5b3UgYXJlIHdyaXRpbmcuXG4iCisiXG4iCisiQ2xlYXIgdGhlIGJvZHkgY29udGVudCBpZiB5b3UgZG9uJ3Qgd2lzaCB0byBzZW5kIGEgc3VtbWFyeS5cbiIKK21zZ3N0ciAiIgorIuS7pSBcIkdJVDpcIiDlvIDlpLTnmoTooYzlsIbooqvliKDpmaTjgIJcbiIKKyLogIPomZHljIXlkKvkuIDkuKrmlbTkvZPnmoTlt67lvILnu5/orqHmiJbogIXmgqjmraPlnKjlhpnnmoTooaXkuIHnmoTnm67lvZXjgIJcbiIKKyJcbiIKKyLlpoLmnpzmgqjkuI3mg7Plj5HpgIHmkZjopoHvvIzmuIXpmaTlhoXlrrnjgIJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXM6ICVzIgorbXNnc3RyICLml6Dms5XmiZPlvIAgJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc4MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlcy5maW5hbDogJXMiCittc2dzdHIgIuaXoOazleaJk+W8gCAlcy5maW5hbDogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODIzCittc2dpZCAiU3VtbWFyeSBlbWFpbCBpcyBlbXB0eSwgc2tpcHBpbmcgaXRcbiIKK21zZ3N0ciAi5pGY6KaB6YKu5Lu25Li656m677yM6Lez6L+HXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCBbeS9OXSBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1c2UgPCVzPiBbeS9OXT8gIgorbXNnc3RyICLmgqjnoa7orqTopoHkvb/nlKggPCVzPiBbeS9OXe+8nyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTMKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgOGJpdCwgYnV0IGRvIG5vdCBkZWNsYXJlIGEgQ29udGVudC1UcmFuc2Zlci0iCisiRW5jb2RpbmcuXG4iCittc2dzdHIgIuWmguS4i+aWh+S7tuWQqyA4Yml0IOWGheWuue+8jOS9huayoeacieWjsOaYjuS4gOS4qiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n44CCXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTE4Cittc2dpZCAiV2hpY2ggOGJpdCBlbmNvZGluZyBzaG91bGQgSSBkZWNsYXJlIFtVVEYtOF0/ICIKK21zZ3N0ciAi6KaB5aOw5piOIDhiaXQg5Li65LuA5LmI5qC355qE57yW56CB5qC85byPIFtVVEYtOF3vvJ8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTI2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJSZWZ1c2luZyB0byBzZW5kIGJlY2F1c2UgdGhlIHBhdGNoXG4iCisiXHQlc1xuIgorImhhcyB0aGUgdGVtcGxhdGUgc3ViamVjdCAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiBQYXNzIC0tZm9yY2UgaWYgeW91IHJlYWxseSAiCisid2FudCB0byBzZW5kLlxuIgorbXNnc3RyICIiCisi5ouS57ud5Y+R6YCB77yM5Zug5Li66KGl5LiBXG4iCisiXHQlc1xuIgorIuWMheWQq+aooeeJiOagh+mimCAnKioqIFNVQkpFQ1QgSEVSRSAqKion44CC5aaC5p6c56Gu5a6e5oOz6KaB5Y+R6YCB77yM5L2/55So5Y+C5pWwIC0tZm9yY2XjgIJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NDUKK21zZ2lkICJUbyB3aG9tIHNob3VsZCB0aGUgZW1haWxzIGJlIHNlbnQgKGlmIGFueW9uZSk/IgorbXNnc3RyICLpgq7ku7blsIbopoHlj5HpgIHnu5nosIHvvJ8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBhbGlhcyAnJXMnIGV4cGFuZHMgdG8gaXRzZWxmXG4iCittc2dzdHIgIuiHtOWRvemUmeivr++8muWIq+WQjSAnJXMnIOaJqeWxleS4uuWug+iHquW3sVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk3NQorbXNnaWQgIk1lc3NhZ2UtSUQgdG8gYmUgdXNlZCBhcyBJbi1SZXBseS1UbyBmb3IgdGhlIGZpcnN0IGVtYWlsIChpZiBhbnkpPyAiCittc2dzdHIgIk1lc3NhZ2UtSUQg6KKr55So5L2c56ys5LiA5bCB6YKu5Lu255qEIEluLVJlcGx5LVRvIO+8nyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDMzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJlcnJvcjogdW5hYmxlIHRvIGV4dHJhY3QgYSB2YWxpZCBhZGRyZXNzIGZyb206ICVzXG4iCittc2dzdHIgIumUmeivr++8muS4jeiDveS7jiAlcyDkuK3mj5Dlj5bkuIDkuKrmnInmlYjnmoTpgq7ku7blnLDlnYBcbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtxXSBbZF0gW2VdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwNDUKK21zZ2lkICJXaGF0IHRvIGRvIHdpdGggdGhpcyBhZGRyZXNzPyAoW3FddWl0fFtkXXJvcHxbZV1kaXQpOiAiCittc2dzdHIgIuWmguS9leWkhOeQhui/meS4quWcsOWdgO+8nyhbcV11aXR8W2Rdcm9wfFtlXWRpdCnvvJoiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM2MgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJDQSBwYXRoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiQ0Eg6Lev5b6EIFwiJXNcIiDkuI3lrZjlnKgiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ0NQorbXNnaWQgIiIKKyIgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbFxuIgorIiAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0XG4iCisiICAgIHNlbmQtZW1haWwgcHJvbXB0cyBiZWZvcmUgc2VuZGluZyB3aGVuZXZlciB0aGlzIG9jY3Vycy5cbiIKKyIgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybVxuIgorIiAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4iCisiXG4iCisiICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLFxuIgorIiAgICBydW4gJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCittc2dzdHIgIiIKKyIgICAg5Lul5LiK55qE5oqE6YCB5YiX6KGo77yIQ2PvvInlt7Lnu4/nlKjooaXkuIHmj5DkuqTkv6Hmga/kuK3lj5HnjrDnmoTlnLDlnYDov5vooYxcbiIKKyIgICAg5LqG5omp5bGV44CC57y655yBIHNlbmQtZW1haWwg5Lya57uZ5Ye65o+Q56S644CC6L+Z5Liq6KGM5Li65Y+v5Lul6YCa6L+HXG4iCisiICAgIHNlbmRlbWFpbC5jb25maXJtIOmFjee9ruiuvue9ruOAglxuIgorIlxuIgorIiAgICDmm7TlpJrkv6Hmga/vvIzmiafooYwgJ2dpdCBzZW5kLWVtYWlsIC0taGVscCfjgIJcbiIKKyIgICAg6KaB5L+d5oyB5b2T5YmN6KGM5Li677yM5L2G5LiN5pi+56S65q2k5L+h5oGv77yM6L+Q6KGMICdnaXQgY29uZmlnIC0tZ2xvYmFsXG4iCisiICAgIHNlbmRlbWFpbC5jb25maXJtIGF1dG8n44CCXG4iCisiXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0gW25dIFtlXSBbcV0gW2FdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjAKK21zZ2lkICJTZW5kIHRoaXMgZW1haWw/IChbeV1lc3xbbl1vfFtlXWRpdHxbcV11aXR8W2FdbGwpOiAiCittc2dzdHIgIuWPkemAgei/meWwgemCruS7tu+8nyhbeV1lc3xbbl1vfFtlXWRpdHxbcV11aXR8W2FdbGwpOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ2MworbXNnaWQgIlNlbmQgdGhpcyBlbWFpbCByZXBseSByZXF1aXJlZCIKK21zZ3N0ciAi5Y+R6YCB6KaB5rGC55qE6YKu5Lu25Zue5aSNIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0OTEKK21zZ2lkICJUaGUgcmVxdWlyZWQgU01UUCBzZXJ2ZXIgaXMgbm90IHByb3Blcmx5IGRlZmluZWQuIgorbXNnc3RyICLopoHmsYLnmoQgU01UUCDmnI3liqHlmajmnKrooqvmraPnoa7lrprkuYnjgIIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUzOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBTVEFSVFRMUyEgJXMiCittc2dzdHIgIuacjeWKoeWZqOS4jeaUr+aMgSBTVEFSVFRMU++8gSVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDMgZ2l0LXNlbmQtZW1haWwucGVybDoxNTQ3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNUQVJUVExTIGZhaWxlZCEgJXMiCittc2dzdHIgIlNUQVJUVExTIOWksei0pe+8gSVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NTYKK21zZ2lkICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTTVRQIHByb3Blcmx5LiBDaGVjayBjb25maWcgYW5kIHVzZSAtLXNtdHAtZGVidWcuIgorbXNnc3RyICLml6Dms5XmraPnoa7lnLDliJ3lp4vljJYgU01UUOOAguajgOafpemFjee9ruW5tuS9v+eUqCAtLXNtdHAtZGVidWfjgIIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gc2VuZCAlc1xuIgorbXNnc3RyICLml6Dms5Xlj5HpgIEgJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRyeS1TZW50ICVzXG4iCittc2dzdHIgIua8lOS5oOWPkemAgSAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VudCAlc1xuIgorbXNnc3RyICLmraPlj5HpgIEgJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc5Cittc2dpZCAiRHJ5LU9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAi5ryU5Lmg5oiQ5Yqf44CC5pel5b+X6K+077yaXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIk9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiT0vjgILml6Xlv5for7TvvJpcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTkxCittc2dpZCAiUmVzdWx0OiAiCittc2dzdHIgIue7k+aenO+8miIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTk0Cittc2dpZCAiUmVzdWx0OiBPS1xuIgorbXNnc3RyICLnu5PmnpzvvJpPS1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2MTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICLml6Dms5XmiZPlvIDmlofku7YgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY1OSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NzkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIOa3u+WKoCBjY++8miVzIOiHquihjCAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkg5re75YqgIHRv77yaJXMg6Ieq6KGMICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobm9uLW1ib3gpIOa3u+WKoCBjY++8miVzIOiHquihjCAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTc1MworIywgcGVybC1mb3JtYXQKK21zZ2lkICIoYm9keSkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIoYm9keSkg5re75YqgIGNjOiAlcyDoh6rooYwgJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NjQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBDb3VsZCBub3QgZXhlY3V0ZSAnJXMnIgorbXNnc3RyICIoJXMpIOS4jeiDveaJp+ihjCAnJXMnIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIKK21zZ3N0ciAiKCVzKSDmt7vliqAgJXM6ICVzIOiHqu+8miclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODc1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJyVzJyIKK21zZ3N0ciAiKCVzKSDml6Dms5XlhbPpl63nrqHpgZPoh7MgJyVzJyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTA1Cittc2dpZCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IgorbXNnc3RyICLkuI3og73ku6UgN2JpdCDlvaLlvI/lj5HpgIHkv6Hmga8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkxMworbXNnaWQgImludmFsaWQgdHJhbnNmZXIgZW5jb2RpbmciCittc2dzdHIgIuaXoOaViOeahOS8oOmAgee8lueggSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTU0IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjAwNiBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwMTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIuS4jeiDveaJk+W8gCAlc++8miVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlc++8muihpeS4geWMheWQq+S4gOS4qui2hei/hyA5OTgg5a2X56ym55qE6KGMIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgJXMgd2l0aCBiYWNrdXAgc3VmZml4ICclcycuXG4iCittc2dzdHIgIueVpei/hyAlcyDlkKvlpIfku73lkI7nvIAgJyVzJ+OAglxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk3OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAlcz8gW3l8Tl06ICIKK21zZ3N0ciAi5oKo55yf55qE6KaB5Y+R6YCBICVz77yfW3l8Tl3vvJoiCmRpZmYgLS1naXQgYS9wby96aF9UVy5wbyBiL3BvL3poX1RXLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZmU0OTYKLS0tIC9kZXYvbnVsbAorKysgYi9wby96aF9UVy5wbwpAQCAtMCwwICsxLDI0MTIwIEBACisjIENoaW5lc2UgKHRyYWRpdGlvbmFsKSB0cmFuc2xhdGlvbnMgZm9yIEdpdCBwYWNrYWdlCisjIEdpdCDlpZfoo53ou5/pq5TnmoTnuYHpq5TkuK3mlofnv7vora/jgIIKKyMgQ29weXJpZ2h0IChDKSAyMDEyLDIwMTMgSmlhbmcgWGluIDx3b3JsZGhlbGxvLm5ldCBBVCBnbWFpbC5jb20+CisjIENvcHlyaWdodCAoQykgMjAxOSwyMDIwIFlpLUp5dW4gUGFuIDxwYW45MzQxMkBnbWFpbC5jb20+CisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KKyMgQ29udHJpYnV0b3JzIChDTik6CisjICAgLSBGYW5neWkgWmhvdSA8bWUgQVQgZmFuZ3lpLmlvPgorIyAgIC0gSmlhbmcgWGluIDx3b3JsZGhlbGxvLm5ldCBBVCBnbWFpbC5jb20+CisjICAgLSBMaWFuIENoZW5nIDxyaHl0aG0ubWFpbCBBVCBnbWFpbC5jb20+CisjICAgLSBSYXkgQ2hlbiA8b2xkc2hhcnAgQVQgZ21haWwuY29tPgorIyAgIC0gUmlrdSA8bHUucmlrdSBBVCBnbWFpbC5jb20+CisjICAgLSBUaHluc29uIDxsYW54aW5nY2FuIEFUIGdtYWlsLmNvbT4KKyMgICAtIHdzMzM4OSA8d2lsbHNtaXRoMzM4OSBBVCBnbWFpbC5jb20+CisjICAgLSBXYW5nIFNoZW5nIDx3YW5nc2hlbmcyMDA4bG92ZSBBVCAxNjMuY29tPgorIyAgIC0g5L6d5LqRIDxsaWx5ZGp3ZyBBVCBnbWFpbC5jb20+CisjICAgLSBZaWNoYW8gWXUgPHl5YzE5OTIgQVQgZ21haWwuY29tPgorIyAgIC0gWmh1YW5nIFlhIDx6aHVhbmd5YSBBVCBtZS5jb20+CisjCisjICBHaXQgZ2xvc3NhcnkgZm9yIENoaW5lc2UgdHJhbnNsYXRvcnMKKyMKKyMgICBFbmdsaXNoICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBDaGluZXNlCisjICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgMy13YXkgbWVyZ2UgICAgICAgICAgICAgICAgICAgICAgfCAg5LiJ5pa55ZCI5L21CisjICAgYWJicmV2aWF0ZSAgICAgICAgICAgICAgICAgICAgICAgfCAg57Ch5a+r77yI55qEIFNIQS0xIOWAvO+8iQorIyAgIGFsdGVybmF0ZSBvYmplY3QgZGF0YWJhc2UgICAgICAgIHwgIOWCmeeUqOeJqeS7tuW6qworIyAgIGFtZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOS/ruijnAorIyAgIGFuY2VzdG9yICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOelluWFiO+8jOelluWFiOaPkOS6pAorIyAgIGFubm90YXRlZCB0YWcgICAgICAgICAgICAgICAgICAgIHwgIOmZhOiou+aomeexpAorIyAgIGJhcmUgcmVwb3NpdG9yeSAgICAgICAgICAgICAgICAgIHwgIOe0lOeJiOacrOW6qworIyAgIGJpc2VjdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOS6jOWIhuWwi+aJvgorIyAgIGJsb2Igb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgIHwgIOizh+aWmeeJqeS7tgorIyAgIGJyYW5jaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWIhuaUrworIyAgIGJ1bmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWMhQorIyAgIGJ5cGFzcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOe5numBjgorIyAgIGNhY2hlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOe0ouW8le+8iOeahOWIpeeose+8iQorIyAgIGNoYWluICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIO+8iOaPkOS6pO+8iemPiAorIyAgIGNoYW5nZXNldCAgICAgICAgICAgICAgICAgICAgICAgIHwgIOiuiuabtOmbhgorIyAgIGNoZWNrb3V0ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOewveWHugorIyAgIGNoZWNrc3VtICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOagoempl++8jOagoempl+WSjAorIyAgIGNoZXJyeS1waWNraW5nICAgICAgICAgICAgICAgICAgIHwgIOaPgOmBuAorIyAgIGNsZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOS5vua3qO+8iOeahOW3peS9nOWNgO+8iQorIyAgIGNsb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOikh+ijvQorIyAgIGNvbW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaPkOS6pAorIyAgIGNvbW1pdCBtZXNzYWdlICAgICAgICAgICAgICAgICAgIHwgIOaPkOS6pOiqquaYjgorIyAgIGNvbW1pdCBvYmplY3QgICAgICAgICAgICAgICAgICAgIHwgIOaPkOS6pOeJqeS7tgorIyAgIGNvbW1pdC1pc2ggKGFsc28gY29tbWl0dGlzaCkgICAgIHwgIOaPkOS6pOiZnworIyAgIGNvbmZsaWN0ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOihneeqgQorIyAgIGNvcmUgR2l0ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaguOW/gyBHaXQg5bel5YW3CisjICAgY292ZXIgbGV0dGVyICAgICAgICAgICAgICAgICAgICAgfCAg6ZmE5Ye9CisjICAgREFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5pyJ5ZCR54Sh55Kw5ZyWCisjICAgZGFuZ2xpbmcgb2JqZWN0ICAgICAgICAgICAgICAgICAgfCAg5oe456m654mp5Lu2CisjICAgZGV0YWNoZWQgSEVBRCAgICAgICAgICAgICAgICAgICAgfCAg5YiG6Zui6ZaL6aCt5oyH5qiZCisjICAgZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgfCAg55uu6YyECisjICAgZGlydHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6auS77yI55qE5bel5L2c5Y2A77yJCisjICAgZHVtYiBIVFRQIHByb3RvY29sICAgICAgICAgICAgICAgfCAg5ZWeIEhUVFAg5Y2U5a6aCisjICAgZXZpbCBtZXJnZSAgICAgICAgICAgICAgICAgICAgICAgfCAg5aOe5ZCI5L2177yI5ZCI5L215byV5YWl5LqG54i25o+Q5Lqk5rKS5pyJ55qE5L+u5pS577yJCisjICAgZmFzdC1mb3J3YXJkICAgICAgICAgICAgICAgICAgICAgfCAg5b+r6L2JCisjICAgZmV0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Y+W5b6XCisjICAgZmlsZSBzeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgfCAg5qqU5qGI57O757WxCisjICAgZm9yayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6KGN55SfCisjICAgR2l0IGFyY2hpdmUgICAgICAgICAgICAgICAgICAgICAgfCAg54mI5pys5bqr77yI5bCN5pa8IGFyY2gg5L2/55So6ICF77yJCisjICAgZ2l0ZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZ2l0ZmlsZe+8iOeJiOacrOW6q+mAo+e1kOaqlOahiO+8iQorIyAgIGdyYWZ0cyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIO+8iOaPkOS6pO+8ieenu+akjQorIyAgIGhhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOmbnOa5iuWAvAorIyAgIEhFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEhFQUTvvIjplovpoK3mjIfmqJnvvIzkuqbljbPnm67liY3liIbmlK/vvIkKKyMgICBoZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDpoK3jgIHliIbmlK8KKyMgICBoZWFkIHJlZiAgICAgICAgICAgICAgICAgICAgICAgICB8ICDliIbmlK8KKyMgICBoZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDmqJnpoK3oqIrmga8KKyMgICBob29rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDmjpvpiaQKKyMgICBodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDkv67oo5zmqpTniYfmrrUKKyMgICBpbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDntKLlvJUKKyMgICBpbmRleCBlbnRyeSAgICAgICAgICAgICAgICAgICAgICB8ICDntKLlvJXmop3nm64KKyMgICBsb29zZSBvYmplY3QgICAgICAgICAgICAgICAgICAgICB8ICDprIbmlaPnianku7YKKyMgICBsb29zZSByZWZzICAgICAgICAgICAgICAgICAgICAgICB8ICDprIbmlaPlvJXnlKgKKyMgICBtYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBtYXN0ZXLvvIjpoJDoqK3liIbmlK/lkI3vvIkKKyMgICBtZXJnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDlkIjkvbUKKyMgICBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDnianku7YKKyMgICBvYmplY3QgZGF0YWJhc2UgICAgICAgICAgICAgICAgICB8ICDnianku7bluqsKKyMgICBvYmplY3QgaWRlbnRpZmllciAgICAgICAgICAgICAgICB8ICDnianku7borZjliKXlhYMKKyMgICBvYmplY3QgbmFtZSAgICAgICAgICAgICAgICAgICAgICB8ICDnianku7blkI3nqLEKKyMgICBvYmplY3QgdHlwZSAgICAgICAgICAgICAgICAgICAgICB8ICDnianku7bpoZ7lnosKKyMgICBvY3RvcHVzICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDnq6DprZrlvI/lkIjkvbXvvIjlhanliIbmlK/ku6XkuIrnmoTlkIjkvbXvvIkKKyMgICBvcmlnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcmlnaW7vvIjpoJDoqK3nmoTpgaDnq6/lkI3nqLHvvIkKKyMgICBwYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDljIUKKyMgICBwYWNrIGluZGV4ICAgICAgICAgICAgICAgICAgICAgICB8ICDljIXntKLlvJUKKyMgICBwYWNrZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICDljIXmqpTmoYgKKyMgICBwYXJlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDniLbmj5DkuqQKKyMgICBwYXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDkv67oo5zmqpQKKyMgICBwYXRoc3BlYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICDot6/lvpHopo/moLwKKyMgICBwYXR0ZXJuICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDmqKHlvI8KKyMgICBwaWNrYXhlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDmjJbmjpgKKyMgICBwbHVtYmluZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICDnrqHku7bvvIhHaXQg5bqV5bGk5qC45b+D5oyH5Luk55qE5Yil56ix77yJCisjICAgcG9yY2VsYWluICAgICAgICAgICAgICAgICAgICAgICAgfCAg55O35Lu277yIR2l0IOS4iuWxpOWwgeijneaMh+S7pOeahOWIpeeose+8iQorIyAgIHByZWNpb3VzLW9iamVjdHMgcmVwbyAgICAgICAgICAgIHwgIOePjeWTgeeJiOacrOW6qworIyAgIHBydW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOa4hemZpAorIyAgIHB1bGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaLie+8jOaLieWPlgorIyAgIHB1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaOqO+8jOaOqOmAgQorIyAgIHJlYWNoYWJsZSAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWPr+S7peWPluW+lworIyAgIHJlYmFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOmHjeWumuWfuuW6lQorIyAgIHJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOW8leeUqAorIyAgIHJlZmxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOW8leeUqOaXpeiqjAorIyAgIHJlZnNwZWMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOW8leeUqOimj+agvAorIyAgIHJlbW90ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOmBoOerr++8jOmBoOerr+eJiOacrOW6qworIyAgIHJlbW90ZS10cmFja2luZyBicmFuY2ggICAgICAgICAgIHwgIOmBoOerr+i/vei5pOWIhuaUrworIyAgIHJlcGxheSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOmHjeaUvgorIyAgIHJlcG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOeJiOacrOW6qworIyAgIHJlcG9zaXRvcnkgICAgICAgICAgICAgICAgICAgICAgIHwgIOeJiOacrOW6qworIyAgIHJlc29sdmUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIO+8iOihneeqge+8ieino+axugorIyAgIHJldmVydCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOmChOWOn+aPkOS6pAorIyAgIHJldmlzaW9uICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOeJiOacrAorIyAgIHJld2luZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOmChOWOnyAoRnV6enkpCisjICAgU0NNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Y6f5aeL56K8566h55CG77yI5bel5YW377yJCisjICAgU0hBLTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgU0hBLTHvvIjlronlhajpm5zmuYrmvJTnrpfms5Ux77yJCisjICAgc2hhbGxvdyByZXBvc2l0b3J5ICAgICAgICAgICAgICAgfCAg5re677yI6KSH6KO977yJ54mI5pys5bqrCisjICAgc2lnbmVkIHRhZyAgICAgICAgICAgICAgICAgICAgICAgfCAg57C95ZCN5qiZ57GkCisjICAgc21hcnQgSFRUUCBwcm90b2NvbCAgICAgICAgICAgICAgfCAg5pm65oWnIEhUVFAg5Y2U5a6aCisjICAgc3F1YXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5aOT57iuCisjICAgc3RhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgbi4g5pqr5a2Y5Y2A77yI5Y2z57Si5byV77yJOyB2LiDmmqvlrZgKKyMgICBzdGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBuLiDlhLLol4/ljYA7IHYuIOWEsuiXjworIyAgIHN1Ym1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWtkOaooee1hAorIyAgIHN5bXJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOespuiZn+W8leeUqAorIyAgIHRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG4uIOaomeexpDsgdi4g5omT5qiZ57GkCisjICAgdGFnIG9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgfCAg5qiZ57Gk54mp5Lu2CisjICAgdGFnZ2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5omT5qiZ57Gk6ICFCisjICAgdG9waWMgYnJhbmNoICAgICAgICAgICAgICAgICAgICAgfCAg5Li76aGM5YiG5pSvCisjICAgdHJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6L+96LmkCisjICAgdHJhaWxlciAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5bC+6YOo572y5ZCNCisjICAgdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5qi577yI5bel5L2c5Y2A5oiW5qi554uA54mp5Lu277yJCisjICAgdHJlZSBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgfCAg5qi554uA54mp5Lu2CisjICAgdHJlZS1pc2ggKGFsc28gdHJlZWlzaCkgICAgICAgICAgfCAg5qi554uA54mp5Lu277yI5oiW5Y+v5Lul6Kej5p6Q54K65LiA5qi554uA54mp5Lu277yJCisjICAgdW5tZXJnZWQgaW5kZXggICAgICAgICAgICAgICAgICAgfCAg5pyq5ZCI5L2157Si5byVCisjICAgdW5wYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6Kej5YyFCisjICAgdW5yZWFjaGFibGUgb2JqZWN0ICAgICAgICAgICAgICAgfCAg54Sh5rOV5Y+W5b6X54mp5Lu2CisjICAgdW5zdGFnZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Y+W5raI5pqr5a2YCisjICAgdXBzdHJlYW0gICAgICAgICAgICAgICAgICAgICAgICAgfCAg5LiK5ri4CisjICAgdXBzdHJlYW0gYnJhbmNoICAgICAgICAgICAgICAgICAgfCAg5LiK5ri45YiG5pSvCisjICAgd29ya2luZyB0cmVlICAgICAgICAgICAgICAgICAgICAgfCAg5bel5L2c5Y2ACisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHaXRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAyMC0wMy0xMSAxNToyNiswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAyMC0wMy0xNSAwMTo0OCswODAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBZaS1KeXVuIFBhbiA8cGFuOTM0MTJAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IENoaW5lc2UgKHRyYWRpdGlvbmFsKSA8emgtbDEwbkBsaXN0cy5saW51eC5vcmcudHc+XG4iCisiTGFuZ3VhZ2U6IHpoX1RXXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1aaENvbnZlcnRlcjog57mB5YyW5aesIGRpY3QtZjRiYzYxN2UtcjkxMCBAIDIwMTkvMTEvMTYgMjA6MjM6MTIgfCBodHRwczovLyIKKyJ6aGNvbnZlcnQub3JnXG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKyJYLUdlbmVyYXRvcjogUG9lZGl0IDIuM1xuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/IgorbXNnc3RyICLll6/vvIglc++8ie+8nyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NTIxIGFkZC1pbnRlcmFjdGl2ZS5jOjgyMiBzZXF1ZW5jZXIuYzozMTI0CisjOiBzZXF1ZW5jZXIuYzozNTYyIGJ1aWx0aW4vcmViYXNlLmM6ODc1IGJ1aWx0aW4vcmViYXNlLmM6MTY4NworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDg2IGJ1aWx0aW4vcmViYXNlLmM6MjEzMAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICLkuI3og73oroDlj5bntKLlvJUiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjU3NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI2OQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyOTQKK21zZ2lkICJiaW5hcnkiCittc2dzdHIgIuS6jOmAsuS9jSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjM0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjc4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMzMgorbXNnaWQgIm5vdGhpbmciCittc2dzdHIgIueEoSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzE0CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMyOQorbXNnaWQgInVuY2hhbmdlZCIKK21zZ3N0ciAi5rKS5pyJ5L+u5pS5IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NzIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NDMKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgIuabtOaWsCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6Njg5IGFkZC1pbnRlcmFjdGl2ZS5jOjg3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhZ2UgJyVzJyIKK21zZ3N0ciAi5LiN6IO95pqr5a2YICclcyciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY5NSBhZGQtaW50ZXJhY3RpdmUuYzo4ODQgc2VxdWVuY2VyLmM6MzMxNworIzogYnVpbHRpbi9yZWJhc2UuYzo4OTkKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgaW5kZXgiCittc2dzdHIgIuS4jeiDveWvq+WFpee0ouW8lSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6Njk4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJ1cGRhdGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidXBkYXRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICLmm7TmlrDkuoYgJWQg5YCL6Lev5b6RXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcxNiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY3OAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAibm90ZTogJXMgaXMgdW50cmFja2VkIG5vdy5cbiIKK21zZ3N0ciAi6Kqq5piO77yaJXMg54++5bey5oiQ54K65pyq6L+96Lmk55qE44CCXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcyMSBhcHBseS5jOjQxMTAgYnVpbHRpbi9jaGVja291dC5jOjI4MQorIzogYnVpbHRpbi9yZXNldC5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICLlsI3ot6/lvpEgJyVzJyDnmoQgbWFrZV9jYWNoZV9lbnRyeSDli5XkvZzlpLHmlZciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjc1MSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY1NQorbXNnaWQgIlJldmVydCIKK21zZ3N0ciAi6YKE5Y6fIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NjcKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgSEVBRF57dHJlZX0iCittc2dzdHIgIuS4jeiDveino+aekCBIRUFEXnvmqLl9IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4MDUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MzEKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInJldmVydGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAicmV2ZXJ0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi6YKE5Y6f5LqGICVkIOWAi+i3r+W+kVxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4NTYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdW50cmFja2VkIGZpbGVzLlxuIgorbXNnc3RyICLmspLmnInmnKrov73ouaTnmoTmqpTmoYjjgIJcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODYwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njg5Cittc2dpZCAiQWRkIHVudHJhY2tlZCIKK21zZ3N0ciAi5paw5aKe5pyq6L+96Lmk55qEIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgImFkZGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAiYWRkZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi5aKe5Yqg5LqGICVkIOWAi+i3r+W+kVxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdW5tZXJnZWQ6ICVzIgorbXNnc3RyICLlv73nlaXmnKrlkIjkvbXvvJolcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTI5IGFkZC1wYXRjaC5jOjE2NzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk9ubHkgYmluYXJ5IGZpbGVzIGNoYW5nZWQuXG4iCittc2dzdHIgIuWPquacieS6jOmAsuS9jeaqlOahiOiiq+S/ruaUueOAglxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MzEgYWRkLXBhdGNoLmM6MTY3MyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY2hhbmdlcy5cbiIKK21zZ3N0ciAi5rKS5pyJ5L+u5pS544CCXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkzNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNzYKK21zZ2lkICJQYXRjaCB1cGRhdGUiCittc2dzdHIgIuS/ruijnOaqlOabtOaWsCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTc0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc1NAorbXNnaWQgIlJldmlldyBkaWZmIgorbXNnc3RyICLmqqLoppYgZGlmZiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwMgorbXNnaWQgInNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzIgorbXNnc3RyICLpoa/npLrmnInorormm7TnmoTot6/lvpEiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDQKK21zZ2lkICJhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiCittc2dzdHIgIuWKoOWFpeW3peS9nOWNgOeLgOaFi+iHs+aaq+WtmOWIl+ihqCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNgorbXNnaWQgInJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uIgorbXNnc3RyICLpgoTljp/kv67mlLnnmoTmmqvlrZjpm4boh7MgSEVBRCDniYjmnKwiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDgKK21zZ2lkICJwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHkiCittc2dzdHIgIuaMkemBuOWNgOWhiuS4pumBuOaTh+aAp+abtOaWsCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAxMAorbXNnaWQgInZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICLmqqLoppYgSEVBRCDlj4rntKLlvJXkuYvplpPnmoTlt67nlbAiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTIKK21zZ2lkICJhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiCittc2dzdHIgIuWKoOWFpeacqui/vei5pOaqlOahiOeahOWFp+WuueiHs+aaq+WtmOWIl+ihqCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAyMCBhZGQtaW50ZXJhY3RpdmUuYzoxMDY5Cittc2dpZCAiUHJvbXB0IGhlbHA6IgorbXNnc3RyICLmj5DnpLroqqrmmI7vvJoiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMjIKK21zZ2lkICJzZWxlY3QgYSBzaW5nbGUgaXRlbSIKK21zZ3N0ciAi6YG45pOH5Zau5LiA6aCF55uuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDI0Cittc2dpZCAic2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXMiCittc2dzdHIgIumBuOaTh+mgheebruevhOWcjSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAyNgorbXNnaWQgInNlbGVjdCBtdWx0aXBsZSByYW5nZXMiCittc2dzdHIgIumBuOaTh+WkmuWAi+evhOWcjSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAyOCBhZGQtaW50ZXJhY3RpdmUuYzoxMDczCittc2dpZCAic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIKK21zZ3N0ciAi5Z+65pa85ZSv5LiA5YmN57a06YG45pOH6aCF55uuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDMwCittc2dpZCAidW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zIgorbXNnc3RyICLlj5bmtojpgbjmk4fmjIflrprpoIXnm64iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMzIKK21zZ2lkICJjaG9vc2UgYWxsIGl0ZW1zIgorbXNnc3RyICLpgbjmk4fmiYDmnInpoIXnm64iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMzQKK21zZ2lkICIoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIu+8iOepuu+8ieWujOaIkOmBuOWPliIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA3MQorbXNnaWQgInNlbGVjdCBhIG51bWJlcmVkIGl0ZW0iCittc2dzdHIgIumBuOaTh+e3qOiZn+mBjueahOmgheebriIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA3NQorbXNnaWQgIihlbXB0eSkgc2VsZWN0IG5vdGhpbmciCittc2dzdHIgIu+8iOepuu+8ieWFqOS4jemBuOWPliIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA4MyBidWlsdGluL2NsZWFuLmM6ODIyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg1MQorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiDmjIfku6QgKioqIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDg0IGJ1aWx0aW4vY2xlYW4uYzo4MjMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODQ4Cittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgIuiri+mBuOaThyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTEzNiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInN0YWdlZCIKK21zZ3N0ciAi5b+r5Y+WIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAidW5zdGFnZWQiCittc2dzdHIgIuacquW/q+WPliIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTEzNiBhcHBseS5jOjQ5NjcgYXBwbHkuYzo0OTcwIGJ1aWx0aW4vYW0uYzoyMjUxCisjOiBidWlsdGluL2FtLmM6MjI1NCBidWlsdGluL2Nsb25lLmM6MTIzIGJ1aWx0aW4vZmV0Y2guYzoxNDQKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzQgYnVpbHRpbi9wdWxsLmM6MTg5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MDkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk3CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwMiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwNQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJwYXRoIgorbXNnc3RyICLot6/lvpEiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExNDMKK21zZ2lkICJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAi54Sh5rOV6YeN5paw5pW055CG57Si5byVIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTU3IGJ1aWx0aW4vY2xlYW4uYzo3ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJ5ZS5cbiIKK21zZ3N0ciAi5YaN6KaL44CCXG4iCisKKyM6IGFkZC1wYXRjaC5jOjMzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuaaq+WtmOaooeW8j+iuiuabtCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MzQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI5CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5pqr5a2Y5Yiq6Zmk5YuV5L2cIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzozNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzAKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5pqr5a2Y5q2k5Y2A5aGKIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzozNworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJzdGFnaW5nLiIKK21zZ3N0ciAi5aaC5p6c5L+u6KOc5qqU6IO95Lm+5reo5Zyw5aWX55So77yM57eo6Lyv5Y2A5aGK5bCH56uL5Y2z5qiZ6KiY54K65pqr5a2Y44CCIgorCisjOiBhZGQtcGF0Y2guYzo0MAorbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIOaaq+WtmOatpOWNgOWhilxuIgorIm4gLSDkuI3opoHmmqvlrZjmraTljYDloYpcbiIKKyJxIC0g6Zui6ZaL44CC5LiN5pqr5a2Y5q2k5Y2A5aGK5Y+K5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiYSAtIOaaq+WtmOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorImQgLSDkuI3mmqvlrZjmraTljYDloYrlkozmnKzmqpTmoYjkuK3lvozpnaLnmoTlhajpg6jljYDloYpcbiIKKworIzogYWRkLXBhdGNoLmM6NTQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMzCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5YSy6JeP5qih5byP6K6K5pu0IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzo1NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzQKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlhLLol4/liKrpmaTli5XkvZwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjU2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlhLLol4/mraTljYDloYogW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjU4Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorInN0YXNoaW5nLiIKK21zZ3N0ciAi5aaC5p6c5L+u6KOc5qqU6IO95Lm+5reo5Zyw5aWX55So77yM57eo6Lyv5Y2A5aGK5bCH56uL5Y2z5qiZ6KiY54K65YSy6JeP44CCIgorCisjOiBhZGQtcGF0Y2guYzo2MQorbXNnaWQgIiIKKyJ5IC0gc3Rhc2ggdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YXNoIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIOWEsuiXj+atpOWNgOWhilxuIgorIm4gLSDkuI3opoHlhLLol4/mraTljYDloYpcbiIKKyJxIC0g6Zui6ZaL44CC5LiN5YSy6JeP5q2k5Y2A5aGK5Y+K5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiYSAtIOWEsuiXj+atpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorImQgLSDkuI3lhLLol4/mraTljYDloYrlkozmnKzmqpTmoYjkuK3lvozpnaLnmoTlhajpg6jljYDloYpcbiIKKworIzogYWRkLXBhdGNoLmM6NzcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlj5bmtojmmqvlrZjmqKHlvI/orormm7QgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjc4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzOQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5Y+W5raI5pqr5a2Y5Yiq6Zmk5YuV5L2cIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzo3OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDAKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlj5bmtojmmqvlrZjmraTljYDloYogW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjgxCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgIgorInVuc3RhZ2luZy4iCittc2dzdHIgIuWmguaenOS/ruijnOaqlOiDveS5vua3qOWcsOWll+eUqO+8jOe3qOi8r+WNgOWhiuWwh+eri+WNs+aomeiomOeCuuacquaaq+WtmOOAgiIKKworIzogYWRkLXBhdGNoLmM6ODQKK21zZ2lkICIiCisieSAtIHVuc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSB1bnN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0g5LiN5pqr5a2Y5q2k5Y2A5aGKXG4iCisibiAtIOS4jeimgeS4jeaaq+WtmOatpOWNgOWhilxuIgorInEgLSDpm6LplovjgILkuI3opoHkuI3mmqvlrZjmraTljYDloYrlj4rlvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJhIC0g5LiN5pqr5a2Y5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiZCAtIOS4jeimgeS4jeaaq+WtmOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorCisjOiBhZGQtcGF0Y2guYzo5OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlsIfmqKHlvI/orormm7TlpZfnlKjliLDntKLlvJUgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEwMCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDQKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlsIfliKrpmaTli5XkvZzlpZfnlKjliLDntKLlvJUgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5bCH5q2k5Y2A5aGK5aWX55So5Yiw57Si5byVIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMDMgYWRkLXBhdGNoLmM6MTY4IGFkZC1wYXRjaC5jOjIxMQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yICIKKyJhcHBseWluZy4iCittc2dzdHIgIuWmguaenOS/ruijnOaqlOiDveS5vua3qOWcsOWll+eUqO+8jOe3qOi8r+WNgOWhiuWwh+eri+WNs+aomeiomOeCuuWll+eUqOOAgiIKKworIzogYWRkLXBhdGNoLmM6MTA2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0g5Zyo57Si5byV5Lit5aWX55So5q2k5Y2A5aGKXG4iCisibiAtIOS4jeimgeWcqOe0ouW8leS4reWll+eUqOatpOWNgOWhilxuIgorInEgLSDpm6LplovjgILkuI3opoHlpZfnlKjmraTljYDloYrlj4rlvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJhIC0g5aWX55So5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiZCAtIOS4jeimgeWll+eUqOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorCisjOiBhZGQtcGF0Y2guYzoxMjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjMKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5b6e5bel5L2c5Y2A5Lit5o2o5qOE5qih5byP6K6K5pu0IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjQKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5b6e5bel5L2c5Y2A5Lit5o2o5qOE5Yiq6Zmk5YuV5L2cIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUwCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuW+nuW3peS9nOWNgOS4reaNqOajhOatpOWNgOWhiiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTI1IGFkZC1wYXRjaC5jOjE0NyBhZGQtcGF0Y2guYzoxOTAKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciAiCisiZGlzY2FyZGluZy4iCittc2dzdHIgIuWmguaenOS/ruijnOaqlOiDveS5vua3qOWcsOWll+eUqO+8jOe3qOi8r+WNgOWhiuWwh+eri+WNs+aomeiomOeCuuaNqOajhOOAgiIKKworIzogYWRkLXBhdGNoLmM6MTI4IGFkZC1wYXRjaC5jOjE5MworbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0g5Zyo5bel5L2c5Y2A5Lit5o2o5qOE5q2k5Y2A5aGKXG4iCisibiAtIOS4jeimgeWcqOW3peS9nOWNgOS4reaNqOajhOatpOWNgOWhilxuIgorInEgLSDpm6LplovjgILkuI3opoHmjajmo4TmraTljYDloYrlj4rlvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJhIC0g5o2o5qOE5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiZCAtIOS4jeimgeaNqOajhOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorCisjOiBhZGQtcGF0Y2guYzoxNDMgYWRkLXBhdGNoLmM6MTg2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1MworIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5b6e57Si5byV5ZKM5bel5L2c5Y2A5Lit5o2o5qOE5qih5byP6K6K5pu0IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNDQgYWRkLXBhdGNoLmM6MTg3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5b6e57Si5byV5ZKM5bel5L2c5Y2A5Lit5o2o5qOE5Yiq6ZmkIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNDUgYWRkLXBhdGNoLmM6MTg4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuW+nue0ouW8leWSjOW3peS9nOWNgOS4reaNqOajhOatpOWNgOWhiiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTUwCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorbXNnc3RyICIiCisieSAtIOWcqOe0ouW8leWSjOW3peS9nOWNgOS4reaNqOajhOatpOWNgOWhilxuIgorIm4gLSDkuI3opoHlnKjntKLlvJXlkozlt6XkvZzljYDkuK3mjajmo4TmraTljYDloYpcbiIKKyJxIC0g6Zui6ZaL44CC5LiN6KaB5o2o5qOE5q2k5Y2A5aGK5Y+K5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiYSAtIOaNqOajhOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorImQgLSDkuI3opoHmjajmo4TmraTljYDloYrlkozmnKzmqpTmoYjkuK3lvozpnaLnmoTlhajpg6jljYDloYpcbiIKKworIzogYWRkLXBhdGNoLmM6MTY0IGFkZC1wYXRjaC5jOjIwNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5bCH5qih5byP6K6K5pu05aWX55So5Yiw57Si5byV5ZKM5bel5L2c5Y2AIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNjUgYWRkLXBhdGNoLmM6MjA4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlsIfliKrpmaTli5XkvZzlpZfnlKjliLDntKLlvJXlkozlt6XkvZzljYAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE2NiBhZGQtcGF0Y2guYzoyMDkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYwCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlsIfmraTljYDloYrlpZfnlKjliLDntKLlvJXlkozlt6XkvZzljYAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE3MQorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCittc2dzdHIgIiIKKyJ5IC0g5Zyo57Si5byV5ZKM5bel5L2c5Y2A5Lit5aWX55So5q2k5Y2A5aGKXG4iCisibiAtIOS4jeimgeWcqOe0ouW8leWSjOW3peS9nOWNgOS4reWll+eUqOatpOWNgOWhilxuIgorInEgLSDpm6LplovjgILkuI3opoHlpZfnlKjmraTljYDloYrlj4rlvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJhIC0g5aWX55So5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiZCAtIOS4jeimgeWll+eUqOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorCisjOiBhZGQtcGF0Y2guYzoyMTQKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKK21zZ3N0ciAiIgorInkgLSDlnKjlt6XkvZzljYDkuK3lpZfnlKjmraTljYDloYpcbiIKKyJuIC0g5LiN6KaB5Zyo5bel5L2c5Y2A5Lit5aWX55So5q2k5Y2A5aGKXG4iCisicSAtIOmboumWi+OAguS4jeimgeWll+eUqOatpOWNgOWhiuWPiuW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorImEgLSDlpZfnlKjmraTljYDloYrlkozmnKzmqpTmoYjkuK3lvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJkIC0g5LiN6KaB5aWX55So5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisKKyM6IGFkZC1wYXRjaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICLnhKHms5Xop6PmnpDljYDloYrmqJnpoK0gJyUuKnMnIgorCisjOiBhZGQtcGF0Y2guYzozMzcgYWRkLXBhdGNoLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAi54Sh5rOV6Kej5p6Q5LiK6Imy6YGO55qE5Y2A5aGK5qiZ6aCtICclLipzJyIKKworIzogYWRkLXBhdGNoLmM6Mzk1Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGRpZmYiCittc2dzdHIgIueEoeazleino+aekOW3rueVsCAoZGlmZikiCisKKyM6IGFkZC1wYXRjaC5jOjQxNAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGRpZmYiCittc2dzdHIgIueEoeazleino+aekOS4iuiJsumBjueahOW3rueVsCAoZGlmZikiCisKKyM6IGFkZC1wYXRjaC5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICclcyciCittc2dzdHIgIueEoeazleWft+ihjCAnJXMnIgorCisjOiBhZGQtcGF0Y2guYzo1ODcKK21zZ2lkICJtaXNtYXRjaGVkIG91dHB1dCBmcm9tIGludGVyYWN0aXZlLmRpZmZGaWx0ZXIiCittc2dzdHIgImludGVyYWN0aXZlLmRpZmZGaWx0ZXIg55qE6Ly45Ye65LiN56ymIgorCisjOiBhZGQtcGF0Y2guYzo1ODgKK21zZ2lkICIiCisiWW91ciBmaWx0ZXIgbXVzdCBtYWludGFpbiBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2VcbiIKKyJiZXR3ZWVuIGl0cyBpbnB1dCBhbmQgb3V0cHV0IGxpbmVzLiIKK21zZ3N0ciAi5oKo55qE6YGO5r++5Zmo5b+F6aCI5Zyo5YW26Ly45YWl5Y+K6Ly45Ye66KGM57at5oyB5LiA5bCN5LiA55qE5bCN5oeJ6Zec5L+C44CCIgorCisjOiBhZGQtcGF0Y2guYzo3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIGNvbnRleHQgbGluZSAjJWQgaW5cbiIKKyIlLipzIgorbXNnc3RyICIiCisi5oeJ5pyJ5LiK5LiL5paH6KGMICMlZCDmlrxcbiIKKyIlLipzIgorCisjOiBhZGQtcGF0Y2guYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImh1bmtzIGRvIG5vdCBvdmVybGFwOlxuIgorIiUuKnNcbiIKKyJcdGRvZXMgbm90IGVuZCB3aXRoOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyLljYDloYrmnKrph43nlorvvJpcbiIKKyIlLipzXG4iCisiXHTkuI3ku6XkuIvov7DntZDlsL7vvJpcbiIKKyIlLipzIgorCisjOiBhZGQtcGF0Y2guYzoxMDUyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMgorbXNnaWQgIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlLlxuIgorbXNnc3RyICLmiYvli5XljYDloYrnt6jovK/mqKHlvI8gLS0g5qqi6KaW5bqV6YOo55qE5b+r6YCf5oyH5Y2X44CCXG4iCisKKyM6IGFkZC1wYXRjaC5jOjEwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlYyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKyItLS1cbiIKKyLopoHliKrpmaQgJyVjJyDplovlp4vnmoTooYzvvIzkvb/lhbbmiJDngrogJyAnIOmWi+Wni+eahOihjO+8iOS4iuS4i+aWh++8ieOAglxuIgorIuimgeWIqumZpCAnJWMnIOmWi+Wni+eahOihjO+8jOWIqumZpOWug+WAkeOAglxuIgorIuS7pSAlYyDplovlp4vnmoTooYzlsIfooqvliKrpmaTjgIJcbiIKKworIy4gVFJBTlNMQVRPUlM6ICdpdCcgcmVmZXJzIHRvIHRoZSBwYXRjaCBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIG1lc3NhZ2VzLgorIzogYWRkLXBhdGNoLmM6MTA3MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMjYKK21zZ2lkICIiCisiSWYgaXQgZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgeW91IHdpbGwgYmUgZ2l2ZW4gYW4gb3Bwb3J0dW5pdHkgdG9cbiIKKyJlZGl0IGFnYWluLiAgSWYgYWxsIGxpbmVzIG9mIHRoZSBodW5rIGFyZSByZW1vdmVkLCB0aGVuIHRoZSBlZGl0IGlzXG4iCisiYWJvcnRlZCBhbmQgdGhlIGh1bmsgaXMgbGVmdCB1bmNoYW5nZWQuXG4iCittc2dzdHIgIiIKKyLlpoLmnpzkuI3og73kub7mt6jlnLDlpZfnlKjvvIzmgqjlsIfmnInmqZ/mnIPph43mlrDnt6jovK/jgILlpoLmnpzmraTljYDloYrnmoTlhajpg6jlhaflrrnliKrpmaTvvIzliYdcbiIKKyLmraTmrKHnt6jovK/ooqvntYLmraLvvIzmraTljYDloYrkuI3mnIPooqvkv67mlLnjgIJcbiIKKworIzogYWRkLXBhdGNoLmM6MTEwMworbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciIKK21zZ3N0ciAi54Sh5rOV6Kej5p6Q5Y2A5aGK5qiZ6aCtIgorCisjOiBhZGQtcGF0Y2guYzoxMTQ4Cittc2dpZCAiJ2dpdCBhcHBseSAtLWNhY2hlZCcgZmFpbGVkIgorbXNnc3RyICLjgIxnaXQgYXBwbHkgLS1jYWNoZWTjgI3lpLHmlZciCisKKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjLgorIy4gVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKyMuIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgdGhhdCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjOiBhZGQtcGF0Y2guYzoxMjE4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIzOQorbXNnaWQgIiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/ICIKK21zZ3N0ciAi5oKo55qE57eo6Lyv5aGK5LiN6IO96KKr5oeJ55So44CC6YeN5paw57eo6Lyv77yI6YG45pOHIFwibm9cIiDmjajmo4TvvIHvvIkgW3kvbl0/ICIKKworIzogYWRkLXBhdGNoLmM6MTI2MQorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4ISIKK21zZ3N0ciAi6YG45Y+W55qE5Y2A5aGK5LiN5pyD5aWX55So6YCy57Si5byV77yBIgorCisjOiBhZGQtcGF0Y2guYzoxMjYyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MworbXNnaWQgIkFwcGx5IHRoZW0gdG8gdGhlIHdvcmt0cmVlIGFueXdheT8gIgorbXNnc3RyICLnhKHoq5blpoLkvZXpg73opoHlpZfnlKjliLDlt6XkvZzljYDll47vvJ8iCisKKyM6IGFkZC1wYXRjaC5jOjEyNjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQ2Cittc2dpZCAiTm90aGluZyB3YXMgYXBwbGllZC5cbiIKK21zZ3N0ciAi5pyq5aWX55So44CCXG4iCisKKyM6IGFkZC1wYXRjaC5jOjEzMjYKK21zZ2lkICIiCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJqIC0g57at5oyB5q2k5Y2A5aGK5pyq5rG654uA5oWL77yM5qqi6KaW5LiL5LiA5YCL5pyq5rG65a6a5Y2A5aGKXG4iCisiSiAtIOe2reaMgeatpOWNgOWhiuacquaxuueLgOaFi++8jOaqouimluS4i+S4gOWAi+WNgOWhilxuIgorImsgLSDntq3mjIHmraTljYDloYrmnKrmsbrni4DmhYvvvIzmqqLoppbkuIrkuIDlgIvmnKrmsbrlrprljYDloYpcbiIKKyJLIC0g57at5oyB5q2k5Y2A5aGK5pyq5rG654uA5oWL77yM5qqi6KaW5LiK5LiA5YCL5Y2A5aGKXG4iCisiZyAtIOmBuOaTh+imgei3s+i9ieiHs+eahOWNgOWhilxuIgorIi8gLSDlsIvmib7nrKblkIjmj5DkvpvkuYvmraPopo/ooajnpLrlvI/nmoTljYDloYpcbiIKKyJzIC0g5YiG5Ymy55uu5YmN5Y2A5aGK54K65pu05bCP55qE5Y2A5aGKXG4iCisiZSAtIOaJi+WLlee3qOi8r+ebruWJjeWNgOWhilxuIgorIj8gLSDpoa/npLroqqrmmI5cbiIKKworIzogYWRkLXBhdGNoLmM6MTQ0NyBhZGQtcGF0Y2guYzoxNDU3Cittc2dpZCAiTm8gcHJldmlvdXMgaHVuayIKK21zZ3N0ciAi5rKS5pyJ5LiK5LiA5YCL5Y2A5aGKIgorCisjOiBhZGQtcGF0Y2guYzoxNDUyIGFkZC1wYXRjaC5jOjE0NjIKK21zZ2lkICJObyBuZXh0IGh1bmsiCittc2dzdHIgIuaykuacieS4i+S4gOWAi+WNgOWhiiIKKworIzogYWRkLXBhdGNoLmM6MTQ2OAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG8iCittc2dzdHIgIuaykuacieWFtuWug+WPr+S+m+i3s+i9ieeahOWNgOWhiiIKKworIzogYWRkLXBhdGNoLmM6MTQ3OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzcKK21zZ2lkICJnbyB0byB3aGljaCBodW5rICg8cmV0PiB0byBzZWUgbW9yZSk/ICIKK21zZ3N0ciAi6Lez6L2J5Yiw5ZOq5YCL5Y2A5aGK77yIPEVudGVyPiDmqqLoppbmm7TlpJrvvInvvJ8gIgorCisjOiBhZGQtcGF0Y2guYzoxNDgwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3OQorbXNnaWQgImdvIHRvIHdoaWNoIGh1bms/ICIKK21zZ3N0ciAi6Lez6L2J5Yiw5ZOq5YCL5Y2A5aGK77yfIgorCisjOiBhZGQtcGF0Y2guYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnIgorbXNnc3RyICLnhKHmlYjmlbjlrZfvvJonJXMnIgorCisjOiBhZGQtcGF0Y2guYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLiIKK21zZ3N0clswXSAi5bCN5LiN6LW377yM5Y+q5pyJICVkIOWAi+WPr+eUqOWNgOWhiuOAgiIKKworIzogYWRkLXBhdGNoLmM6MTUwNQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaCIKK21zZ3N0ciAi5rKS5pyJ5YW25a6D5Y+v5L6b5bCL5om+55qE5Y2A5aGKIgorCisjOiBhZGQtcGF0Y2guYzoxNTExIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYyMworbXNnaWQgInNlYXJjaCBmb3IgcmVnZXg/ICIKK21zZ3N0ciAi5L2/55So5q2j6KaP6KGo56S65byP5pCc5bCL77yfIgorCisjOiBhZGQtcGF0Y2guYzoxNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlcyIKK21zZ3N0ciAi6Yyv6Kqk55qE5q2j6KaP6KGo56S65byPICVz77yaJXMiCisKKyM6IGFkZC1wYXRjaC5jOjE1NDMKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4iCittc2dzdHIgIuaykuacieWSjOaPkOS+m+aooeW8j+ebuOespuWQiOeahOWNgOWhiiIKKworIzogYWRkLXBhdGNoLmM6MTU1MAorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rIgorbXNnc3RyICLlsI3kuI3otbfvvIzkuI3og73liIblibLpgJnlgIvljYDloYoiCisKKyM6IGFkZC1wYXRjaC5jOjE1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rcy4iCittc2dzdHIgIuWIhuWJsueCuiAlZCDloYrjgIIiCisKKyM6IGFkZC1wYXRjaC5jOjE1NTgKK21zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rIgorbXNnc3RyICLlsI3kuI3otbfvvIzkuI3og73nt6jovK/pgJnlgIvljYDloYoiCisKKyM6IGFkZC1wYXRjaC5jOjE2MDkKK21zZ2lkICInZ2l0IGFwcGx5JyBmYWlsZWQiCittc2dzdHIgIidnaXQgYXBwbHknIOWkseaVlyIKKworIzogYWR2aWNlLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaGludDogJS4qcyVzXG4iCittc2dzdHIgIiVz5o+Q56S677yaJS4qcyVzXG4iCisKKyM6IGFkdmljZS5jOjE2OAorbXNnaWQgIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi54Sh5rOV5o+A6YG477yM5Zug54K65oKo5pyJ5pyq5ZCI5L2155qE5qqU5qGI44CCIgorCisjOiBhZHZpY2UuYzoxNzAKK21zZ2lkICJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi54Sh5rOV5o+Q5Lqk77yM5Zug54K65oKo5pyJ5pyq5ZCI5L2155qE5qqU5qGI44CCIgorCisjOiBhZHZpY2UuYzoxNzIKK21zZ2lkICJNZXJnaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi54Sh5rOV5ZCI5L2177yM5Zug54K65oKo5pyJ5pyq5ZCI5L2155qE5qqU5qGI44CCIgorCisjOiBhZHZpY2UuYzoxNzQKK21zZ2lkICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi54Sh5rOV5ouJ5Y+W77yM5Zug54K65oKo5pyJ5pyq5ZCI5L2155qE5qqU5qGI44CCIgorCisjOiBhZHZpY2UuYzoxNzYKK21zZ2lkICJSZXZlcnRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLnhKHms5XpgoTljp/mj5DkuqTvvIzlm6DngrrmgqjmnInmnKrlkIjkvbXnmoTmqpTmoYjjgIIiCisKKyM6IGFkdmljZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJJdCBpcyBub3QgcG9zc2libGUgdG8gJXMgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIueEoeazlSAlc++8jOWboOeCuuaCqOacieacquWQiOS9teeahOaqlOahiOOAgiIKKworIzogYWR2aWNlLmM6MTg2Cittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKK21zZ3N0ciAiIgorIuiri+WcqOW3peS9nOWNgOaUueato+aqlOahiO+8jOeEtuW+jOmFjOaDheS9v+eUqCAnZ2l0IGFkZC9ybSA85qqU5qGIPicg5oyH5Luk5qiZ6KiYXG4iCisi6Kej5rG65pa55qGI5Lim5o+Q5Lqk44CCIgorCisjOiBhZHZpY2UuYzoxOTQKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgYW4gdW5yZXNvbHZlZCBjb25mbGljdC4iCittc2dzdHIgIuWboOeCuuWtmOWcqOacquino+axuueahOihneeqgeiAjOmboumWi+OAgiIKKworIzogYWR2aWNlLmM6MTk5IGJ1aWx0aW4vbWVyZ2UuYzoxMzM1Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICLmgqjlsJrmnKrntZDmnZ/mgqjnmoTlkIjkvbXvvIjlrZjlnKggTUVSR0VfSEVBRO+8ieOAgiIKKworIzogYWR2aWNlLmM6MjAxCittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSBtZXJnaW5nLiIKK21zZ3N0ciAi6KuL5Zyo5ZCI5L215YmN5YWI5o+Q5Lqk5oKo55qE5L+u5pS544CCIgorCisjOiBhZHZpY2UuYzoyMDIKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iCittc2dzdHIgIuWboOeCuuWtmOWcqOacquWujOaIkOeahOWQiOS9teiAjOmboumWi+OAgiIKKworIzogYWR2aWNlLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBzd2l0Y2hpbmcgdG8gJyVzJy5cbiIKKyJcbiIKKyJZb3UgYXJlIGluICdkZXRhY2hlZCBIRUFEJyBzdGF0ZS4gWW91IGNhbiBsb29rIGFyb3VuZCwgbWFrZSBleHBlcmltZW50YWxcbiIKKyJjaGFuZ2VzIGFuZCBjb21taXQgdGhlbSwgYW5kIHlvdSBjYW4gZGlzY2FyZCBhbnkgY29tbWl0cyB5b3UgbWFrZSBpbiB0aGlzXG4iCisic3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHN3aXRjaGluZyBiYWNrIHRvIGEgYnJhbmNoLlxuIgorIlxuIgorIklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gcmV0YWluIGNvbW1pdHMgeW91IGNyZWF0ZSwgeW91IG1heVxuIgorImRvIHNvIChub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1jIHdpdGggdGhlIHN3aXRjaCBjb21tYW5kLiBFeGFtcGxlOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyA8bmV3LWJyYW5jaC1uYW1lPlxuIgorIlxuIgorIk9yIHVuZG8gdGhpcyBvcGVyYXRpb24gd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLVxuIgorIlxuIgorIlR1cm4gb2ZmIHRoaXMgYWR2aWNlIGJ5IHNldHRpbmcgY29uZmlnIHZhcmlhYmxlIGFkdmljZS5kZXRhY2hlZEhlYWQgdG8gIgorImZhbHNlXG4iCisiXG4iCittc2dzdHIgIiIKKyLms6jmhI/vvJrmraPlnKjliIfmj5vliLAgJyVzJ+OAglxuIgorIlxuIgorIuaCqOato+iZleaWvOWIhumboumWi+mgreaMh+aomeeLgOaFi+OAguaCqOWPr+S7peaqouimluOAgeWBmuWvpumpl+aAp+eahOS/ruaUueWPiuaPkOS6pO+8jOS4puS4lOaCqOWPr+S7peWcqOWIhyIKKyLmj5tcbiIKKyLlm57kuIDlgIvliIbmlK/mmYLvvIzmjajmo4TlnKjmraTni4DmhYvkuIvmiYDlgZrnmoTmj5DkuqTogIzkuI3lsI3liIbmlK/pgKDmiJDlvbHpn7/jgIJcbiIKKyJcbiIKKyLlpoLmnpzmgqjmg7PopoHpgI/pgY7lu7rnq4vliIbmlK/kvobkv53nlZnlnKjmraTni4DmhYvkuIvmiYDlgZrnmoTmj5DkuqTvvIzmgqjlj6/ku6XpgI/pgY7lnKggc3dpdGNoIOaMh+S7pFxuIgorIuS4reaWsOWinuWPg+aVuCAtYyDkvoblr6bnj77vvIjnj77lnKjmiJbnqI3lvozvvInjgILkvovlpoLvvJpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPOaWsOWIhuaUr+WQjT5cbiIKKyJcbiIKKyLmiJbogIXlvqnljp/mraTli5XkvZzvvJpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLVxuIgorIlxuIgorIumAj+mBjuWwh+ioreWumuiuiuaVuCBhZHZpY2UuZGV0YWNoZWRIZWFkIOioreWumueCuiBmYWxzZSDkvobpl5zplonmraTlu7rorbBcbiIKKyJcbiIKKworIzogYWxpYXMuYzo1MAorbXNnaWQgImNtZGxpbmUgZW5kcyB3aXRoIFxcIgorbXNnc3RyICLmjIfku6TliJfku6UgXFwg57WQ5bC+IgorCisjOiBhbGlhcy5jOjUxCittc2dpZCAidW5jbG9zZWQgcXVvdGUiCittc2dzdHIgIuacqumWieWQiOeahOW8leiZnyIKKworIzogYXBwbHkuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAi5pyq6IO96K2Y5Yil55qE56m655m95a2X5YWD6YG46aCFICclcyciCisKKyM6IGFwcGx5LmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIgorbXNnc3RyICLmnKrog73orZjliKXnmoTnqbrnmb3lrZflhYPlv73nlaXpgbjpoIUgJyVzJyIKKworIzogYXBwbHkuYzoxMzUKK21zZ2lkICItLXJlamVjdCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1yZWplY3Qg5ZKMIC0tM3dheSDkuI3og73lkIzmmYLkvb/nlKjjgIIiCisKKyM6IGFwcGx5LmM6MTM3Cittc2dpZCAiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tY2FjaGVkIOWSjCAtLTN3YXkg5LiN6IO95ZCM5pmC5L2/55So44CCIgorCisjOiBhcHBseS5jOjE0MAorbXNnaWQgIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS0zd2F5IOWcqOeJiOacrOW6q+S5i+WkliIKKworIzogYXBwbHkuYzoxNTEKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWluZGV4IOWcqOeJiOacrOW6q+S5i+WkliIKKworIzogYXBwbHkuYzoxNTQKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1jYWNoZWQg5Zyo54mI5pys5bqr5LmL5aSWIgorCisjOiBhcHBseS5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICLnhKHms5XmupblgpnmmYLplpPmiLPmraPopo/ooajnpLrlvI8gJXMiCisKKyM6IGFwcGx5LmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIKK21zZ3N0ciAicmVnZXhlYyDov5Tlm54gJWTvvIzovLjlhaXngrrvvJolcyIKKworIzogYXBwbHkuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAi5LiN6IO95Zyo5L+u6KOc5qqU55qE56ysICVkIOihjOaJvuWIsOaqlOahiOWQjSIKKworIzogYXBwbHkuYzo5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwsIGdvdCAlcyBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHnvvJrpjK/oqqTnmoQgZ2l0LWRpZmYgLSDmh4nngrogL2Rldi9udWxs77yM5L2G5Zyo56ysICUyJGQg6KGM5b6X5YiwICUxJHMiCisKKyM6IGFwcGx5LmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHnvvJrpjK/oqqTnmoQgZ2l0LWRpZmYgLSDnrKwgJWQg6KGM5LiK5paw5qqU5qGI5ZCN5LiN5LiA6Ie0IgorCisjOiBhcHBseS5jOjkyOQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx577ya6Yyv6Kqk55qEIGdpdC1kaWZmIC0g56ysICVkIOihjOS4iuiIiuaqlOahiOWQjeS4jeS4gOiHtCIKKworIzogYXBwbHkuYzo5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx577ya6Yyv6Kqk55qEIGdpdC1kaWZmIC0g56ysICVkIOihjOiZleaHieeCuiAvZGV2L251bGwiCisKKyM6IGFwcGx5LmM6OTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBvbiBsaW5lICVkOiAlcyIKK21zZ3N0ciAi56ysICVkIOihjOWMheWQq+eEoeaViOaqlOahiOaooeW8j++8miVzIgorCisjOiBhcHBseS5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb25zaXN0ZW50IGhlYWRlciBsaW5lcyAlZCBhbmQgJWQiCittc2dzdHIgIuS4jeS4gOiHtOeahOaqlOahiOmgre+8jCVkIOihjOWSjCAlZCDooYwiCisKKyM6IGFwcGx5LmM6MTM3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICLnlbbnp7vpmaQgJWQg5YCL5YmN5bCO6Lev5b6R5b6MIGdpdCBkaWZmIOmgree8uuS5j+aqlOahiOWQjeioiuaBr++8iOesrCAlZCDooYzvvIkiCisKKyM6IGFwcGx5LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gKGxpbmUgJWQpIgorbXNnc3RyICJnaXQgZGlmZiDnmoTmqJnpoK3oqIrmga/kuK3nvLrkuY/mqpTmoYjlkI3oqIrmga/vvIjnrKwgJWQg6KGM77yJIgorCisjOiBhcHBseS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJyZWNvdW5077ya5oSP5aSW55qE6KGM77yaJS4qcyIKKworIzogYXBwbHkuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIuesrCAlZCDooYznmoTkv67oo5zmqpTniYfmrrXmspLmnInmqJnpoK3oqIrmga/vvJolLipzIgorCisjOiBhcHBseS5jOjE3NTMKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAi5paw5qqU5qGI5L6d6LO06IiK5YWn5a65IgorCisjOiBhcHBseS5jOjE3NTUKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICLliKrpmaTnmoTmqpTmoYjku43mnInlhaflrrkiCisKKyM6IGFwcGx5LmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIuS/ruijnOaqlOWcqOesrCAlZCDooYznmbznj77mkI3lo54iCisKKyM6IGFwcGx5LmM6MTgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAi5paw5qqU5qGIICVzIOS+neiztOiIiuWFp+WuuSIKKworIzogYXBwbHkuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgIuWIqumZpOeahOaqlOahiCAlcyDku43mnInlhaflrrkiCisKKyM6IGFwcGx5LmM6MTgzMQorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIqKiDorablkYrvvJrmqpTmoYggJXMg5oiQ54K656m65qqU5qGI5L2G5Lim5pyq5Yiq6ZmkIgorCisjOiBhcHBseS5jOjE5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAi5LqM6YCy5L2N5L+u6KOc5qqU5Zyo56ysICVkIOihjOaQjeWjnu+8miUuKnMiCisKKyM6IGFwcGx5LmM6MjAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIuacquiDveitmOWIpeeahOS6jOmAsuS9jeS/ruijnOaqlOS9jeaWvOesrCAlZCDooYwiCisKKyM6IGFwcGx5LmM6MjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICLkv67oo5zmqpTmoYjnmoTnrKwgJWQg6KGM5Y+q5pyJ5Z6D5Zy+6LOH5paZIgorCisjOiBhcHBseS5jOjIyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+W56ym6Jmf6YCj57WQICVzIgorCisjOiBhcHBseS5jOjIyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIKK21zZ3N0ciAi5LiN6IO96ZaL5ZWf5oiW6K6A5Y+WICVzIgorCisjOiBhcHBseS5jOjI5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydCBvZiBsaW5lOiAnJWMnIgorbXNnc3RyICLnhKHmlYjnmoTooYzpppblrZflhYPvvJonJWMnIgorCisjOiBhcHBseS5jOjMwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICLljYDloYogIyVkIOaIkOWKn+Wll+eUqOaWvCAlZO+8iOS9jeenuyAlZCDooYzvvIkiCisKKyM6IGFwcGx5LmM6MzA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICLkuIrkuIvmlofmuJvlsJHliLDvvIglbGQvJWxk77yJ5Lul5Zyo56ysICVkIOihjOWll+eUqOS/ruijnOaqlOeJh+autSIKKworIzogYXBwbHkuYzozMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyLnlbbmn6XoqaLvvJpcbiIKKyIlLipzIgorCisjOiBhcHBseS5jOjMwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAi57y65bCRICclcycg55qE5LqM6YCy5L2N5L+u6KOc5qqU6LOH5paZIgorCisjOiBhcHBseS5jOjMxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJldmVyc2UtYXBwbHkgYSBiaW5hcnkgcGF0Y2ggd2l0aG91dCB0aGUgcmV2ZXJzZSBodW5rIHRvICclcyciCittc2dzdHIgIuS4jeiDveWPjeWQkeWll+eUqOS4gOWAi+e8uuWwkeWIsCAnJXMnIOeahOWPjeWQkeizh+aWmeWNgOWhiueahOS6jOmAsuS9jeS/ruijnOaqlCIKKworIzogYXBwbHkuYzozMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhcHBseSBiaW5hcnkgcGF0Y2ggdG8gJyVzJyB3aXRob3V0IGZ1bGwgaW5kZXggbGluZSIKK21zZ3N0ciAi5LiN6IO95ZyoICclcycg5LiK5aWX55So5rKS5pyJ5a6M5pW057Si5byV6KGM55qE5LqM6YCy5L2N5L+u6KOc5qqUIgorCisjOiBhcHBseS5jOjMxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBwYXRjaCBhcHBsaWVzIHRvICclcycgKCVzKSwgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGVudHMuIgorbXNnc3RyICLkv67oo5zmqpTlpZfnlKjliLAgJyVzJ++8iCVz77yJ77yM5L2G5piv5ZKM55uu5YmN5YWn5a655LiN56ym5ZCI44CCIgorCisjOiBhcHBseS5jOjMxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHBhdGNoIGFwcGxpZXMgdG8gYW4gZW1wdHkgJyVzJyBidXQgaXQgaXMgbm90IGVtcHR5IgorbXNnc3RyICLkv67oo5zmqpTlpZfnlKjliLDnqbrmqpTmoYggJyVzJ++8jOS9huWFtuS4pumdnuepuuaqlOahiCIKKworIzogYXBwbHkuYzozMTg5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBuZWNlc3NhcnkgcG9zdGltYWdlICVzIGZvciAnJXMnIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICLnhKHms5XoroDlj5YgJyUyJHMnIOW/hemcgOeahOebruaomeaqlOahiCAlMSRzIgorCisjOiBhcHBseS5jOjMyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgIuS6jOmAsuS9jeS/ruijnOaqlOacquWll+eUqOWIsCAnJXMnIgorCisjOiBhcHBseS5jOjMyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIuWIsCAnJXMnIOeahOS6jOmAsuS9jeS/ruijnOaqlOeUoueUn+S6huS4jeato+eiuueahOe1kOaenO+8iOaHieeCuiAlc++8jOWNu+eCuiAlc++8iSIKKworIzogYXBwbHkuYzozMjMwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICLmiZPkv67oo5zmqpTlpLHmlZfvvJolczolbGQiCisKKyM6IGFwcGx5LmM6MzM1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgIuS4jeiDveewveWHuiAlcyIKKworIzogYXBwbHkuYzozNDA1IGFwcGx5LmM6MzQxNiBhcHBseS5jOjM0NjIgbWlkeC5jOjYxIHNldHVwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICLnhKHms5XoroDlj5YgJXMiCisKKyM6IGFwcGx5LmM6MzQxMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGZyb20gJyVzJyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLoroDlj5bkvY3mlrznrKbomZ/pgKPntZDkuK3nmoQgJyVzJyIKKworIzogYXBwbHkuYzozNDQyIGFwcGx5LmM6MzY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAi6Lev5b6RICVzIOW3sue2k+iiq+mHjeaWsOWRveWQjS/liKrpmaQiCisKKyM6IGFwcGx5LmM6MzUyOCBhcHBseS5jOjM3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IgorbXNnc3RyICIlc++8muS4jeWtmOWcqOaWvOe0ouW8leS4rSIKKworIzogYXBwbHkuYzozNTM3IGFwcGx5LmM6MzcwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVz77ya5ZKM57Si5byV5LiN56ym5ZCIIgorCisjOiBhcHBseS5jOjM1NzIKK21zZ2lkICJyZXBvc2l0b3J5IGxhY2tzIHRoZSBuZWNlc3NhcnkgYmxvYiB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICLniYjmnKzluqvnvLrkuY/lv4XopoHnmoTos4fmlpnnianku7bku6XpgLLooYzkuInmlrnlkIjkvbXjgIIiCisKKyM6IGFwcGx5LmM6MzU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIuWbnuiQveWIsOS4ieaWueWQiOS9tS4uLlxuIgorCisjOiBhcHBseS5jOjM1OTEgYXBwbHkuYzozNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgIueEoeazleiugOWPliAnJXMnIOeahOebruWJjeWFp+WuuSIKKworIzogYXBwbHkuYzozNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmYWxsIGJhY2sgb24gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIueEoeazleWbnuiQveWIsOS4ieaWueWQiOS9tS4uLlxuIgorCisjOiBhcHBseS5jOjM2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIHdpdGggY29uZmxpY3RzLlxuIgorbXNnc3RyICLlpZfnlKjkv67oo5zmqpTliLAgJyVzJyDlrZjlnKjooZ3nqoHjgIJcbiIKKworIzogYXBwbHkuYzozNjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICLmiJDlip/lpZfnlKjkv67oo5zmqpTliLAgJyVzJ+OAglxuIgorCisjOiBhcHBseS5jOjM2NTIKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICLnp7vpmaTkv67oo5zmqpTku43nlZnkuIvkuobmqpTmoYjlhaflrrkiCisKKyM6IGFwcGx5LmM6MzcyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd3JvbmcgdHlwZSIKK21zZ3N0ciAiJXPvvJrpjK/oqqTpoZ7lnosiCisKKyM6IGFwcGx5LmM6MzcyNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iCittc2dzdHIgIiVzIOeahOmhnuWei+aYryAlb++8jOaHieeCuiAlbyIKKworIzogYXBwbHkuYzozODc4IGFwcGx5LmM6Mzg4MCByZWFkLWNhY2hlLmM6ODMwIHJlYWQtY2FjaGUuYzo4NTYKKyM6IHJlYWQtY2FjaGUuYzoxMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0aCAnJXMnIgorbXNnc3RyICLnhKHmlYjot6/lvpEgJyVzJyIKKworIzogYXBwbHkuYzozOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXPvvJrlt7LntpPlrZjlnKjmlrzntKLlvJXkuK0iCisKKyM6IGFwcGx5LmM6MzkzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiVz77ya5bey57aT5a2Y5Zyo5pa85bel5L2c5Y2A5LitIgorCisjOiBhcHBseS5jOjM5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICIlMiRzIOeahOaWsOaooeW8j++8iCUxJG/vvInlkozoiIrmqKHlvI/vvIglMyRv77yJ5LiN56ym5ZCIIgorCisjOiBhcHBseS5jOjM5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICIlMiRzIOeahOaWsOaooeW8j++8iCUxJG/vvInlkowgJTQkcyDnmoToiIrmqKHlvI/vvIglMyRv77yJ5LiN56ym5ZCIIgorCisjOiBhcHBseS5jOjM5ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWZmZWN0ZWQgZmlsZSAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIuWPl+W9semfv+eahOaqlOahiCAnJXMnIOS9jeaWvOespuiZn+mAo+e1kOS4rSIKKworIzogYXBwbHkuYzozOTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiJXPvvJrkv67oo5zmqpTmnKrlpZfnlKgiCisKKyM6IGFwcGx5LmM6NDAwMworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBwYXRjaCAlcy4uLiIKK21zZ3N0ciAi5q2j5Zyo5qqi5p+l5L+u6KOc5qqUICVzLi4uIgorCisjOiBhcHBseS5jOjQwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi5a2Q5qih57WEICVzIOeahCBzaGExIOioiuaBr+e8uuWwkeaIlueEoeaViCIKKworIzogYXBwbHkuYzo0MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGUgY2hhbmdlIGZvciAlcywgd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgSEVBRCIKK21zZ3N0ciAiJXMg55qE5qih5byP6K6K5pu077yM5L2G5a6D5LiN5Zyo55uu5YmNIEhFQUQg5LitIgorCisjOiBhcHBseS5jOjQxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgKCVzKS4iCittc2dzdHIgInNoYTEg6KiK5oGv57y65bCR5oiW54Sh5pWI77yIJXPvvInjgIIiCisKKyM6IGFwcGx5LmM6NDExNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi5LiN6IO95Zyo5pqr5pmC57Si5byV5Lit5paw5aKeICVzIgorCisjOiBhcHBseS5jOjQxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRlbXBvcmFyeSBpbmRleCB0byAlcyIKK21zZ3N0ciAi5LiN6IO95oqK5pqr5pmC57Si5byV5a+r5YWl5YiwICVzIgorCisjOiBhcHBseS5jOjQyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICLkuI3og73lvp7ntKLlvJXkuK3np7vpmaQgJXMiCisKKyM6IGFwcGx5LmM6NDI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgIuWtkOaooee1hCAlcyDmkI3lo57nmoTkv67oo5zmqpQiCisKKyM6IGFwcGx5LmM6NDMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95bCN5bu656uL5qqU5qGIICclcycg5ZG85Y+rIHN0YXQiCisKKyM6IGFwcGx5LmM6NDMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAi5LiN6IO954K65bu656uL5qqU5qGIICVzIOW7uueri+W+jOerr+WEsuWtmCIKKworIzogYXBwbHkuYzo0MzE2IGFwcGx5LmM6NDQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAi54Sh5rOV54K6ICVzIOaWsOWinuW/q+WPluaineebriIKKworIzogYXBwbHkuYzo0MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSB0byAnJXMnIgorbXNnc3RyICLlr6vlhaUgJyVzJyDlpLHmlZciCisKKyM6IGFwcGx5LmM6NDM2MworIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAi6Zec6ZaJ5qqU5qGIICclcyciCisKKyM6IGFwcGx5LmM6NDQzMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgIuS4jeiDveWvq+WFpeaqlOahiCAnJXMnIOasiumZkCAlbyIKKworIzogYXBwbHkuYzo0NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIuaIkOWKn+Wll+eUqOS/ruijnOaqlCAlc+OAgiIKKworIzogYXBwbHkuYzo0NTM5Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIuWFp+mDqOmMr+iqpCIKKworIzogYXBwbHkuYzo0NTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAi5aWX55SoICUlcyDlgIvkv67oo5zmqpTvvIzlhbbkuK0gJWQg5YCL6KKr5ouS57WVLi4uIgorCisjOiBhcHBseS5jOjQ1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICLmiKrnn60gLnJlaiDmqpTmoYjlkI3ngrogJS4qcy5yZWoiCisKKyM6IGFwcGx5LmM6NDU2MSBidWlsdGluL2ZldGNoLmM6OTAxIGJ1aWx0aW4vZmV0Y2guYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzIgorbXNnc3RyICLkuI3og73plovllZ8gJXMiCisKKyM6IGFwcGx5LmM6NDU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICLnrKwgIyVkIOWAi+eJh+auteaIkOWKn+aHieeUqOOAgiIKKworIzogYXBwbHkuYzo0NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAi5ouS57WV56ysICMlZCDlgIvniYfmrrXjgIIiCisKKyM6IGFwcGx5LmM6NDY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkIHBhdGNoICclcycuIgorbXNnc3RyICLnlaXpgY7kv67oo5zmqpQgJyVzJ+OAgiIKKworIzogYXBwbHkuYzo0NzA2Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICLmnKrog73orZjliKXnmoTovLjlhaUiCisKKyM6IGFwcGx5LmM6NDcyNgorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgIueEoeazleiugOWPlue0ouW8leaqlOahiCIKKworIzogYXBwbHkuYzo0ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgIuS4jeiDvemWi+WVn+S/ruijnOaqlCAnJXMn77yaJXMiCisKKyM6IGFwcGx5LmM6NDkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvciIKK21zZ2lkX3BsdXJhbCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyWzBdICLmipHliLbkuIvku43mnIkgJWQg5YCL56m655m95a2X5YWD6Kqk55SoIgorCisjOiBhcHBseS5jOjQ5MTYgYXBwbHkuYzo0OTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIOihjOaWsOWinuS6huepuueZveWtl+WFg+iqpOeUqOOAgiIKKworIzogYXBwbHkuYzo0OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIuS/ruW+qeepuueZvemMr+iqpOW+jO+8jOaHieeUqOS6hiAlZCDooYzjgIIiCisKKyM6IGFwcGx5LmM6NDk0MCBidWlsdGluL2FkZC5jOjYxMiBidWlsdGluL212LmM6MzAxIGJ1aWx0aW4vcm0uYzo0MDYKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIueEoeazleWvq+WFpeaWsOe0ouW8leaqlOahiCIKKworIzogYXBwbHkuYzo0OTY4Cittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAi5LiN6KaB5oeJ55So6IiH57Wm5Ye66Lev5b6R5ZCR56ym5ZCI55qE6K6K5pu0IgorCisjOiBhcHBseS5jOjQ5NzEKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICLmh4nnlKjoiIfntablh7rot6/lvpHlkJHnrKblkIjnmoTorormm7QiCisKKyM6IGFwcGx5LmM6NDk3MyBidWlsdGluL2FtLmM6MjI2MAorbXNnaWQgIm51bSIKK21zZ3N0ciAi5pW45a2XIgorCisjOiBhcHBseS5jOjQ5NzQKK21zZ2lkICJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIKK21zZ3N0ciAi5b6e5YKz57Wx55qEIGRpZmYg6Lev5b6R5Lit56e76Zmk5oyH5a6a5pW46YeP55qE5YmN5bCO5pac57eaIgorCisjOiBhcHBseS5jOjQ5NzcKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICLlv73nlaXkv67oo5zmqpTkuK3nmoTmlrDlop7nmoTmqpTmoYgiCisKKyM6IGFwcGx5LmM6NDk3OQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAi5LiN5aWX55So5L+u6KOc5qqU77yM6ICM5piv6aGv56S66Ly45YWl55qE5beu55Ww57Wx6KiI77yIZGlmZnN0YXTvvIkiCisKKyM6IGFwcGx5LmM6NDk4MworbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIuS7peWNgemAsuS9jeaVuOmhr+ekuuaWsOWinuWSjOWIqumZpOeahOihjOaVuCIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAi5LiN5aWX55So5L+u6KOc5qqU77yM6ICM5piv6aGv56S66Ly45YWl55qE5qaC6KaBIgorCisjOiBhcHBseS5jOjQ5ODcKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIgorbXNnc3RyICLkuI3lpZfnlKjkv67oo5zmqpTvvIzogIzmmK/mqqLoppbkv67oo5zmqpTmmK/lkKblj6/mh4nnlKgiCisKKyM6IGFwcGx5LmM6NDk4OQorbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAi56K66KqN5L+u6KOc5qqU5Y+v5Lul5aWX55So5Yiw55uu5YmN57Si5byVIgorCisjOiBhcHBseS5jOjQ5OTEKK21zZ2lkICJtYXJrIG5ldyBmaWxlcyB3aXRoIGBnaXQgYWRkIC0taW50ZW50LXRvLWFkZGAiCittc2dzdHIgIuS9v+eUqOaMh+S7pCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIOaomeiomOaWsOWinuaqlOahiCIKKworIzogYXBwbHkuYzo0OTkzCittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuWll+eUqOS/ruijnOaqlOiAjOS4jeS/ruaUueW3peS9nOWNgCIKKworIzogYXBwbHkuYzo0OTk1Cittc2dpZCAiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIKK21zZ3N0ciAi5o6l5Y+X5L+u5pS55bel5L2c5Y2A5LmL5aSW5qqU5qGI55qE5L+u6KOc5qqUIgorCisjOiBhcHBseS5jOjQ5OTgKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAi6YKE5aWX55So5q2k5L+u6KOc5qqU77yI6IiHIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjayDpgbjpoIXlkIzmmYLkvb/nlKjvvIkiCisKKyM6IGFwcGx5LmM6NTAwMAorbXNnaWQgImF0dGVtcHQgdGhyZWUtd2F5IG1lcmdlIGlmIGEgcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIuWmguaenOS4gOWAi+S/ruijnOaqlOS4jeiDveaHieeUqOWJh+WYl+ippuS4ieaWueWQiOS9tSIKKworIzogYXBwbHkuYzo1MDAyCittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgIuW7uueri+S4gOWAi+aaq+aZgue0ouW8leWfuuaWvOW1jOWFpeeahOe0ouW8leioiuaBryIKKworIzogYXBwbHkuYzo1MDA1IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzMgYnVpbHRpbi9scy1maWxlcy5jOjUyNAorbXNnaWQgInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICLot6/lvpHku6UgTlVMIOWtl+WFg+WIhumalCIKKworIzogYXBwbHkuYzo1MDA3Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICLnorrkv53oh7PlsJHnrKblkIggPG4+IOihjOS4iuS4i+aWhyIKKworIzogYXBwbHkuYzo1MDA4IGJ1aWx0aW4vYW0uYzoyMjM5IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTgKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAwIGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAyCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NTcgYnVpbHRpbi9yZWJhc2UuYzoxNTA4Cittc2dpZCAiYWN0aW9uIgorbXNnc3RyICLli5XkvZwiCisKKyM6IGFwcGx5LmM6NTAwOQorbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICLmqqLmn6XmlrDlop7lkozkv67mlLnnmoTooYzkuK3plpPnmoTnqbrnmb3lrZflhYPmv6vnlKgiCisKKyM6IGFwcGx5LmM6NTAxMiBhcHBseS5jOjUwMTUKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICLlsIvmib7kuIrkuIvmlofmmYLlv73nlaXnqbrnmb3lrZflhYPnmoTorormm7QiCisKKyM6IGFwcGx5LmM6NTAxOAorbXNnaWQgImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIgorbXNnc3RyICLlj43lkJHlpZfnlKjkv67oo5zmqpQiCisKKyM6IGFwcGx5LmM6NTAyMAorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICLnhKHpnIDoh7PlsJHkuIDooYzkuIrkuIvmlociCisKKyM6IGFwcGx5LmM6NTAyMgorbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICLlsIfmi5LntZXnmoTkv67oo5zmqpTniYfmrrXlhLLlrZjlnKjlsI3mh4nnmoQgKi5yZWog5qqU5qGI5LitIgorCisjOiBhcHBseS5jOjUwMjQKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAi5YWB6Kix6YeN55aK55qE5L+u6KOc5qqU54mH5q61IgorCisjOiBhcHBseS5jOjUwMjUgYnVpbHRpbi9hZGQuYzozMjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMgorIzogYnVpbHRpbi9jb21taXQuYzoxMzYwIGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk4IGJ1aWx0aW4vZnNjay5jOjc3NAorIzogYnVpbHRpbi9sb2cuYzoyMTY2IGJ1aWx0aW4vbXYuYzoxMjMgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICLoqbPntLDovLjlh7oiCisKKyM6IGFwcGx5LmM6NTAyNworbXNnaWQgInRvbGVyYXRlIGluY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgbmV3LWxpbmUgYXQgdGhlIGVuZCBvZiBmaWxlIgorbXNnc3RyICLlhYHoqLHkuI3mraPnorrnmoTmqpTmoYjmnKvlsL7mj5vooYznrKbomZ8iCisKKyM6IGFwcGx5LmM6NTAzMAorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAi5LiN5L+h5Lu75L+u6KOc5qqU54mH5q6155qE5qiZ6aCt6KiK5oGv5Lit55qE6KGM6JmfIgorCisjOiBhcHBseS5jOjUwMzIgYnVpbHRpbi9hbS5jOjIyNDgKK21zZ2lkICJyb290IgorbXNnc3RyICLmoLnnm67pjIQiCisKKyM6IGFwcGx5LmM6NTAzMworbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgIueCuuaJgOacieaqlOahiOWQjeWJjeaWsOWiniA85qC555uu6YyEPiIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgWzzpgbjpoIU+XSA85qi55oiW5o+Q5LqkPiBbPOi3r+W+kT4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTUKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjE2Cittc2dpZCAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPOeJiOacrOW6qz4gWy0tZXhlYyA85oyH5LukPl0gWzzpgbjpoIU+XSA85qi55oiW5o+Q5LqkPiBbPOi3r+W+kT4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTcKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA854mI5pys5bqrPiBbLS1leGVjIDzmjIfku6Q+XSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzozNzIgYnVpbHRpbi9hZGQuYzoxODEgYnVpbHRpbi9hZGQuYzo1ODggYnVpbHRpbi9ybS5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICLot6/lvpHopo/moLwgJyVzJyDmnKrnrKblkIjku7vkvZXmqpTmoYgiCisKKyM6IGFyY2hpdmUuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWY6ICUuKnMiCittc2dzdHIgIueEoeatpOW8leeUqO+8miUuKnMiCisKKyM6IGFyY2hpdmUuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICVzIgorbXNnc3RyICLkuI3mmK/kuIDlgIvmnInmlYjnmoTnianku7blkI3vvJolcyIKKworIzogYXJjaGl2ZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB0cmVlIG9iamVjdDogJXMiCittc2dzdHIgIuS4jeaYr+S4gOWAi+aoueeLgOeJqeS7tu+8miVzIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgIuebruWJjeW3peS9nOebrumMhOacquiiq+i/vei5pCIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImZtdCIKK21zZ3N0ciAi5qC85byPIgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgIuatuOaqlOagvOW8jyIKKworIzogYXJjaGl2ZS5jOjQ1OCBidWlsdGluL2xvZy5jOjE2NTMKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgIuWJjee2tCIKKworIzogYXJjaGl2ZS5jOjQ1OQorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgIueCuuatuOaqlOS4reavj+WAi+i3r+W+keWQjeWKoOS4iuWJjee2tCIKKworIzogYXJjaGl2ZS5jOjQ2MCBidWlsdGluL2JsYW1lLmM6ODYxIGJ1aWx0aW4vYmxhbWUuYzo4NjUgYnVpbHRpbi9ibGFtZS5jOjg2NgorIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNyBidWlsdGluL2NvbmZpZy5jOjEzMCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjQgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjggYnVpbHRpbi9ncmVwLmM6ODg3CisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjAgYnVpbHRpbi9scy1maWxlcy5jOjU2MworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMiBidWlsdGluL25vdGVzLmM6NTc4IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIzCisjOiBwYXJzZS1vcHRpb25zLmg6MTkwCittc2dpZCAiZmlsZSIKK21zZ3N0ciAi5qqU5qGIIgorCisjOiBhcmNoaXZlLmM6NDYxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICLmrbjmqpTlr6vlhaXmraTmqpTmoYgiCisKKyM6IGFyY2hpdmUuYzo0NjMKK21zZ2lkICJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLoroDlj5blt6XkvZzljYDkuK3nmoQgLmdpdGF0dHJpYnV0ZXMiCisKKyM6IGFyY2hpdmUuYzo0NjQKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICLlnKjmqJnmupbpjK/oqqTkuIrloLHlkYrmrbjmqpTmqpTmoYgiCisKKyM6IGFyY2hpdmUuYzo0NjUKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICLlj6rlhLLlrZgiCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgIuWjk+e4rumAn+W6puabtOW/qyIKKworIzogYXJjaGl2ZS5jOjQ3NAorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAi5aOT57iu5pWI5p6c5pu05aW9IgorCisjOiBhcmNoaXZlLmM6NDc3Cittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICLliJflh7rmlK/mj7TnmoTmrbjmqpTmoLzlvI8iCisKKyM6IGFyY2hpdmUuYzo0NzkgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9jbG9uZS5jOjExMyBidWlsdGluL2Nsb25lLmM6MTE2CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMQorbXNnaWQgInJlcG8iCittc2dzdHIgIueJiOacrOW6qyIKKworIzogYXJjaGl2ZS5jOjQ4MCBidWlsdGluL2FyY2hpdmUuYzo5MgorbXNnaWQgInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IgorbXNnc3RyICLlvp7pgaDnq6/niYjmnKzluqvvvIg854mI5pys5bqrPu+8ieaTt+WPluatuOaqlOaqlOahiCIKKworIzogYXJjaGl2ZS5jOjQ4MSBidWlsdGluL2FyY2hpdmUuYzo5MyBidWlsdGluL2RpZmZ0b29sLmM6NzE1CisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAi5oyH5LukIgorCisjOiBhcmNoaXZlLmM6NDgyIGJ1aWx0aW4vYXJjaGl2ZS5jOjk0Cittc2dpZCAicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIgorbXNnc3RyICLpgaDnq68gZ2l0LXVwbG9hZC1hcmNoaXZlIOaMh+S7pOeahOi3r+W+kSIKKworIzogYXJjaGl2ZS5jOjQ4OQorbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICLmnKrnn6Xlj4PmlbggLS1yZW1vdGUiCisKKyM6IGFyY2hpdmUuYzo0OTEKK21zZ2lkICJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIKK21zZ3N0ciAi6YG46aCFIC0tZXhlYyDlj6rog73lkowgLS1yZW1vdGUg5ZCM5pmC5L2/55SoIgorCisjOiBhcmNoaXZlLmM6NDkzCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIuacquefpeWPg+aVuCAtLW91dHB1dCIKKworIzogYXJjaGl2ZS5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGFyY2hpdmUgZm9ybWF0ICclcyciCittc2dzdHIgIuacquefpeatuOaqlOagvOW8jyAnJXMnIgorCisjOiBhcmNoaXZlLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiCittc2dzdHIgIuWPg+aVuOS4jeaUr+aPtOatpOagvOW8jyAnJXMn77yaLSVkIgorCisjOiBhcmNoaXZlLXRhci5jOjEyNSBhcmNoaXZlLXppcC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyZWFtIGJsb2IgJXMiCittc2dzdHIgIuS4jeiDvemWi+WVn+izh+aWmeeJqeS7tiAlcyIKKworIzogYXJjaGl2ZS10YXIuYzoyNjYgYXJjaGl2ZS16aXAuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgZmlsZSBtb2RlOiAwJW8gKFNIQTE6ICVzKSIKK21zZ3N0ciAi5LiN5pSv5o+055qE5qqU5qGI5qih5byP77yaMCVvIChTSEExOiAlcykiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjkzIGFyY2hpdmUtemlwLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzIgorbXNnc3RyICLkuI3og73oroDlj5YgJXMiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnJXMnIGZpbHRlciIKK21zZ3N0ciAi54Sh5rOV5ZWf5YuVICclcycg6YGO5r++5ZmoIgorCisjOiBhcmNoaXZlLXRhci5jOjQ2OAorbXNnaWQgInVuYWJsZSB0byByZWRpcmVjdCBkZXNjcmlwdG9yIgorbXNnc3RyICLnhKHms5Xph43lrprlkJHmj4/ov7DnrKYiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsdGVyIHJlcG9ydGVkIGVycm9yIgorbXNnc3RyICInJXMnIOmBjua/vuWZqOWgseWRiuS6humMr+iqpCIKKworIzogYXJjaGl2ZS16aXAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCBpcyBub3QgdmFsaWQgVVRGLTg6ICVzIgorbXNnc3RyICLot6/lvpHkuI3mmK/mnInmlYjnmoQgVVRGLTjvvJolcyIKKworIzogYXJjaGl2ZS16aXAuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCB0b28gbG9uZyAoJWQgY2hhcnMsIFNIQTE6ICVzKTogJXMiCittc2dzdHIgIui3r+W+keWkqumVt++8iCVkIOWtl+WFg++8jFNIQTHvvJolc++8ie+8miVzIgorCisjOiBhcmNoaXZlLXppcC5jOjQ4MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlIGVycm9yICglZCkiCittc2dzdHIgIuWjk+e4rumMr+iqpCAoJWQpIgorCisjOiBhcmNoaXZlLXppcC5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lc3RhbXAgdG9vIGxhcmdlIGZvciB0aGlzIHN5c3RlbTogJTxQUkl1TUFYPiIKK21zZ3N0ciAi5bCN5pa85pys57O757Wx5pmC6ZaT5oiz5aSq5aSn77yaJTxQUkl1TUFYPiIKKworIzogYXR0ci5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lIgorbXNnc3RyICIlLipzIOS4jeaYr+S4gOWAi+acieaViOeahOWxrOaAp+WQjSIKKworIzogYXR0ci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBub3QgYWxsb3dlZDogJXM6JWQiCittc2dzdHIgIuS4jeWFgeiosSAlc++8miVzOiVkIgorCisjOiBhdHRyLmM6NDA5Cittc2dpZCAiIgorIk5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBpZ25vcmVkIGluIGdpdCBhdHRyaWJ1dGVzXG4iCisiVXNlICdcXCEnIGZvciBsaXRlcmFsIGxlYWRpbmcgZXhjbGFtYXRpb24uIgorbXNnc3RyICIiCisi5Y+N5ZCR5qih5byP5ZyoIGdpdCBhdHRyaWJ1dGVzIOS4reiiq+W/veeVpVxuIgorIueVtuWtl+S4sueiuuWvpuimgeS7pempmuWYhuiZn+mWi+Wni+aZgu+8jOS9v+eUqCAnXFwhJ+OAgiIKKworIzogYmlzZWN0LmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiCittc2dzdHIgIuaqlOahiCAnJXMnIOWMheWQq+mMr+iqpOeahOW8leeUqOagvOW8j++8miVzIgorCisjOiBiaXNlY3QuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICLmiJHlgJHnhKHms5XpgLLooYzmm7TlpJrnmoTkuozliIblsIvmib7vvIFcbiIKKworIzogYmlzZWN0LmM6NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICLkuI3mmK/kuIDlgIvmnInmlYjnmoTmj5DkuqTlkI0gJXMiCisKKyM6IGJpc2VjdC5jOjc3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisi5ZCI5L215Z+656SOICVzIOaYr+WjnueahOOAglxuIgorIumAmeaEj+WRs+iRl+S7i+aWvCAlcyDlkowgWyVzXSDkuYvplpPnmoQgYnVnIOW3sue2k+iiq+S/ruW+qeOAglxuIgorCisjOiBiaXNlY3QuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIG5ldy5cbiIKKyJUaGUgcHJvcGVydHkgaGFzIGNoYW5nZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIuWQiOS9teWfuuekjiAlcyDmmK/mlrDnmoTjgIJcbiIKKyLku4vmlrwgJXMg5ZKMIFslc10g5LmL6ZaT55qE5bGs5oCn5bey57aT6KKr5L+u5pS544CCXG4iCisKKyM6IGJpc2VjdC5jOjc4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIuWQiOS9teWfuuekjiAlcyDmmK8gJXPjgIJcbiIKKyLpgJnmhI/lkbPokZfnrKzkuIDlgIsgJyVzJyDmj5DkuqTkvY3mlrwgJXMg5ZKMIFslc10g5LmL6ZaT44CCXG4iCisKKyM6IGJpc2VjdC5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU29tZSAlcyByZXZzIGFyZSBub3QgYW5jZXN0b3JzIG9mIHRoZSAlcyByZXYuXG4iCisiZ2l0IGJpc2VjdCBjYW5ub3Qgd29yayBwcm9wZXJseSBpbiB0aGlzIGNhc2UuXG4iCisiTWF5YmUgeW91IG1pc3Rvb2sgJXMgYW5kICVzIHJldnM/XG4iCittc2dzdHIgIiIKKyLkuIDkupsgJXMg54mI5pys5LiN5pivICVzIOeJiOacrOeahOelluWFiOOAglxuIgorIumAmeeoruaDheazgeS4iyBnaXQg5LqM5YiG5bCL5om+54Sh5rOV5q2j5bi45bel5L2c44CCXG4iCisi5oKo5Y+v6IO95byE6Yyv5LqGICVzIOWSjCAlcyDniYjmnKzvvJ9cbiIKKworIzogYmlzZWN0LmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdIG11c3QgYmUgc2tpcHBlZC5cbiIKKyJTbyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGUgZmlyc3QgJXMgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kICVzLlxuIgorIldlIGNvbnRpbnVlIGFueXdheS4iCittc2dzdHIgIiIKKyLku4vmlrwgJXMg5ZKMIFslc10g55qE5ZCI5L215Z+656SO5LiA5a6a6KKr5b+955Wl5LqG44CCXG4iCisi5omA5Lul5oiR5YCR54Sh5rOV56K66KqN56ys5LiA5YCLICVzIOaPkOS6pOaYr+WQpuS7i+aWvCAlcyDlkowgJXMg5LmL6ZaT44CCXG4iCisi5oiR5YCR5LuN6IiK57m857qM44CCIgorCisjOiBiaXNlY3QuYzo4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIKK21zZ3N0ciAi5LqM5YiG5bCL5om+5Lit77ya5ZCI5L215Z+656SO5b+F6aCI5piv57aT6YGO5ris6Kmm55qEXG4iCisKKyM6IGJpc2VjdC5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJhICVzIHJldmlzaW9uIGlzIG5lZWRlZCIKK21zZ3N0ciAi6ZyA6KaB5LiA5YCLICVzIOeJiOacrCIKKworIzogYmlzZWN0LmM6OTIwIGJ1aWx0aW4vbm90ZXMuYzoxNzcgYnVpbHRpbi90YWcuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgIuS4jeiDveW7uueri+aqlOahiCAnJXMnIgorCisjOiBiaXNlY3QuYzo5NjYgYnVpbHRpbi9tZXJnZS5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciCittc2dzdHIgIuS4jeiDveiugOWPluaqlOahiCAnJXMnIgorCisjOiBiaXNlY3QuYzo5OTcKK21zZ2lkICJyZWFkaW5nIGJpc2VjdCByZWZzIGZhaWxlZCIKK21zZ3N0ciAi6K6A5Y+W5LqM5YiG5bCL5om+5byV55So5aSx5pWXIgorCisjOiBiaXNlY3QuYzoxMDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHdhcyBib3RoICVzIGFuZCAlc1xuIgorbXNnc3RyICIlcyDlkIzmmYLngrogJXMg5ZKMICVzXG4iCisKKyM6IGJpc2VjdC5jOjEwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKyJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iCittc2dzdHIgIiIKKyLmspLmnInnmbznj77lj6/muKzoqabnmoTmj5DkuqTjgIJcbiIKKyLlj6/og73mgqjlnKjln7fooYzmmYLkvb/nlKjkuobpjK/oqqTnmoTot6/lvpHlj4PmlbjvvJ9cbiIKKworIzogYmlzZWN0LmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICIocm91Z2hseSAlZCBzdGVwKSIKK21zZ2lkX3BsdXJhbCAiKHJvdWdobHkgJWQgc3RlcHMpIgorbXNnc3RyWzBdICLvvIjlpKfmpoIgJWQg5q2l77yJIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGxhc3QgJXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoICIocm91Z2hseSAlZAorIy4gc3RlcHMpIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBiaXNlY3QuYzoxMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogJWQgcmV2aXNpb24gbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIKK21zZ2lkX3BsdXJhbCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIKK21zZ3N0clswXSAi5LqM5YiG5bCL5om+5Lit77ya5Zyo5q2k5LmL5b6M77yM6YKE5YmpICVkIOWAi+eJiOacrOW+hea4rOippiAlc1xuIgorCisjOiBibGFtZS5jOjI3MDAKK21zZ2lkICItLWNvbnRlbnRzIGFuZCAtLXJldmVyc2UgZG8gbm90IGJsZW5kIHdlbGwuIgorbXNnc3RyICItLWNvbnRlbnRzIOWSjCAtLXJldmVyc2Ug5LiN6IO95re355So44CCIgorCisjOiBibGFtZS5jOjI3MTQKK21zZ2lkICJjYW5ub3QgdXNlIC0tY29udGVudHMgd2l0aCBmaW5hbCBjb21taXQgb2JqZWN0IG5hbWUiCittc2dzdHIgIuS4jeiDveWwhyAtLWNvbnRlbnRzIOWSjOacgOe1gueahOaPkOS6pOeJqeS7tuWQjeWFseeUqCIKKworIzogYmxhbWUuYzoyNzM1Cittc2dpZCAiLS1yZXZlcnNlIGFuZCAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHNwZWNpZmllZCBsYXRlc3QgY29tbWl0IgorbXNnc3RyICItLXJldmVyc2Ug5ZKMIC0tZmlyc3QtcGFyZW50IOWFseeUqO+8jOmcgOimgeaMh+WumuacgOaWsOeahOaPkOS6pCIKKworIzogYmxhbWUuYzoyNzQ0IGJ1bmRsZS5jOjE2NyByZWYtZmlsdGVyLmM6MjIwMyByZW1vdGUuYzoxOTQyIHNlcXVlbmNlci5jOjIwMDYKKyM6IHNlcXVlbmNlci5jOjQzNTggc3VibW9kdWxlLmM6ODQ3IGJ1aWx0aW4vY29tbWl0LmM6MTA0NSBidWlsdGluL2xvZy5jOjM4OAorIzogYnVpbHRpbi9sb2cuYzo5OTEgYnVpbHRpbi9sb2cuYzoxNTIwIGJ1aWx0aW4vbG9nLmM6MTkyNSBidWlsdGluL2xvZy5jOjIyMTUKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0MTIgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MAorIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE5MgorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICLniYjmnKzpgY3mrbfoqK3lrprlpLHmlZciCisKKyM6IGJsYW1lLmM6Mjc2MgorbXNnaWQgIiIKKyItLXJldmVyc2UgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSByYW5nZSBhbG9uZyBmaXJzdC1wYXJlbnQgY2hhaW4iCittc2dzdHIgIi0tcmV2ZXJzZSDlkowgLS1maXJzdC1wYXJlbnQg5YWx55So77yM6ZyA6KaB56ys5LiA56WW5YWI6Y+I5LiK55qE5o+Q5Lqk56+E5ZyNIgorCisjOiBibGFtZS5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBwYXRoICVzIGluICVzIgorbXNnc3RyICLlnKggJTIkcyDkuK3nhKHmraTot6/lvpEgJTEkcyIKKworIzogYmxhbWUuYzoyNzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGJsb2IgJXMgZm9yIHBhdGggJXMiCittc2dzdHIgIuS4jeiDveeCuui3r+W+kSAlMiRzIOiugOWPluizh+aWmeeJqeS7tiAlMSRzIgorCisjOiBicmFuY2guYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQWZ0ZXIgZml4aW5nIHRoZSBlcnJvciBjYXVzZSB5b3UgbWF5IHRyeSB0byBmaXggdXBcbiIKKyJ0aGUgcmVtb3RlIHRyYWNraW5nIGluZm9ybWF0aW9uIGJ5IGludm9raW5nXG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiLiIKK21zZ3N0ciAiIgorIlxuIgorIuWcqOS/ruW+qemMr+iqpOW+jO+8jOaCqOWPr+S7peWYl+ippuS/ruaUuemBoOerr+i/vei5pOWIhuaUr++8jOmAj+mBjuWft+ihjOaMh+S7pFxuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIiDjgIIiCisKKyM6IGJyYW5jaC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAi5pyq6Kit5a6a5YiG5pSvICVzIOS9nOeCuuWug+iHquW3seeahOS4iua4uOOAgiIKKworIzogYnJhbmNoLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICLliIbmlK8gJyUxJHMnIOioreWumueCuuS9v+eUqOmHjeWumuWfuuW6leS+hui/vei5pOS+huiHqiAnJTMkcycg55qE6YGg56uv5YiG5pSvICclMiRzJ+OAgiIKKworIzogYnJhbmNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycuIgorbXNnc3RyICLliIbmlK8gJyUxJHMnIOioreWumueCuui/vei5pOS+huiHqiAnJTMkcycg55qE6YGg56uv5YiG5pSvICclMiRzJ+OAgiIKKworIzogYnJhbmNoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAi5YiG5pSvICclcycg6Kit5a6a54K65L2/55So6YeN5a6a5Z+65bqV5L6G6L+96Lmk5pys5qmf5YiG5pSvICclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJy4iCittc2dzdHIgIuWIhuaUryAnJXMnIOioreWumueCuui/vei5pOacrOapn+WIhuaUryAnJXMn44CCIgorCisjOiBicmFuY2guYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIuWIhuaUryAnJXMnIOioreWumueCuuS9v+eUqOmHjeWumuWfuuW6leS+hui/vei5pOmBoOerr+W8leeUqCAnJXMn44CCIgorCisjOiBicmFuY2guYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJy4iCittc2dzdHIgIuWIhuaUryAnJXMnIOioreWumueCuui/vei5pOmBoOerr+W8leeUqCAnJXMn44CCIgorCisjOiBicmFuY2guYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAi5YiG5pSvICclcycg6Kit5a6a54K65L2/55So6YeN5a6a5Z+65bqV5L6G6L+96Lmk5pys5qmf5byV55SoICclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycuIgorbXNnc3RyICLliIbmlK8gJyVzJyDoqK3lrprngrrov73ouaTmnKzmqZ/lvJXnlKggJyVzJ+OAgiIKKworIzogYnJhbmNoLmM6MTE5Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIHVwc3RyZWFtIGJyYW5jaCBjb25maWd1cmF0aW9uIgorbXNnc3RyICLnhKHms5Xlr6vlhaXkuIrmuLjliIbmlK/oqK3lrpoiCisKKyM6IGJyYW5jaC5jOjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgdHJhY2tpbmc6IGFtYmlndW91cyBpbmZvcm1hdGlvbiBmb3IgcmVmICVzIgorbXNnc3RyICLmnKrov73ouaTvvJrlvJXnlKggJXMg5pyJ5q2n576pIgorCisjOiBicmFuY2guYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcycg5LiN5piv5LiA5YCL5pyJ5pWI55qE5YiG5pSv5ZCN56ix44CCIgorCisjOiBicmFuY2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIuS4gOWAi+WIhuaUr+WQjSAnJXMnIOW3sue2k+WtmOWcqOOAgiIKKworIzogYnJhbmNoLmM6MjEzCittc2dpZCAiQ2Fubm90IGZvcmNlIHVwZGF0ZSB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLnhKHms5XlvLfliLbmm7TmlrDnm67liY3liIbmlK/jgIIiCisKKyM6IGJyYW5jaC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50ICclcycgaXMgbm90IGEgYnJhbmNoLiIKK21zZ3N0ciAi54Sh5rOV6Kit5a6a6L+96Lmk6KiK5oGv77yb6LW35aeL6bueICclcycg5LiN5piv5LiA5YCL5YiG5pSv44CCIgorCisjOiBicmFuY2guYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHJlcXVlc3RlZCB1cHN0cmVhbSBicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi6KuL5rGC55qE5LiK5ri45YiG5pSvICclcycg5LiN5a2Y5ZyoIgorCisjOiBicmFuY2guYzoyMzcKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyBvbiBiYXNpbmcgeW91ciB3b3JrIG9uIGFuIHVwc3RyZWFtXG4iCisiYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXQgdGhlIHJlbW90ZSwgeW91IG1heSBuZWVkIHRvXG4iCisicnVuIFwiZ2l0IGZldGNoXCIgdG8gcmV0cmlldmUgaXQuXG4iCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyB0byBwdXNoIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggdGhhdFxuIgorIndpbGwgdHJhY2sgaXRzIHJlbW90ZSBjb3VudGVycGFydCwgeW91IG1heSB3YW50IHRvIHVzZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB0byBzZXQgdGhlIHVwc3RyZWFtIGNvbmZpZyBhcyB5b3UgcHVzaC4iCittc2dzdHIgIiIKKyJcbiIKKyLlpoLmnpzmgqjmraPoqIjlioPln7rmlrzpgaDnq6/kuIDlgIvnj77lrZjnmoTkuIrmuLjliIbmlK/plovlp4vkvaDnmoTlt6XkvZzvvIxcbiIKKyLmgqjlj6/og73pnIDopoHln7fooYwgXCJnaXQgZmV0Y2hcIiDkvoblj5blvpfliIbmlK/jgIJcbiIKKyJcbiIKKyLlpoLmnpzmgqjmraPoqIjlioPmjqjpgIHkuIDlgIvog73oiIflsI3mh4npgaDnq6/liIbmlK/lu7rnq4vov73ouaTnmoTmlrDnmoTmnKzmqZ/liIbmlK/vvIxcbiIKKyLmgqjlj6/og73pnIDopoHkvb/nlKggXCJnaXQgcHVzaCAtdVwiIOaOqOmAgeWIhuaUr+S4puioreWumuWSjOS4iua4uOeahOmXnOiBr+OAgiIKKworIzogYnJhbmNoLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAi5LiN5piv5LiA5YCL5pyJ5pWI55qE54mp5Lu25ZCN77yaJyVzJ+OAgiIKKworIzogYnJhbmNoLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIuatp+e+qeeahOeJqeS7tuWQje+8miclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBicmFuY2ggcG9pbnQ6ICclcycuIgorbXNnc3RyICLnhKHmlYjnmoTliIbmlK/pu57vvJonJXMn44CCIgorCisjOiBicmFuY2guYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIiclcycg5bey57aT57C95Ye65YiwICclcyciCisKKyM6IGJyYW5jaC5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIG9mIHdvcmtpbmcgdHJlZSAlcyBpcyBub3QgdXBkYXRlZCIKK21zZ3N0ciAi5bel5L2c5Y2AICVzIOeahCBIRUFEIOaMh+WQkeaykuacieiiq+abtOaWsCIKKworIzogYnVuZGxlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAiJyVzJyDkuI3lg4/mmK/kuIDlgIsgdjIg54mI5pys55qE5YyF5qqU5qGIIgorCisjOiBidW5kbGUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgIuacquiDveitmOWIpeeahOWMhemgre+8miVzJXMgKCVkKSIKKworIzogYnVuZGxlLmM6OTAgcmVyZXJlLmM6NDgwIHJlcmVyZS5jOjY5MCBzZXF1ZW5jZXIuYzoyMjU4IHNlcXVlbmNlci5jOjMwMTYKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgIuS4jeiDvemWi+WVnyAnJXMnIgorCisjOiBidW5kbGUuYzoxNDMKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAi54mI5pys5bqr5Lit57y65bCR6YCZ5Lqb5b+F5YKZ55qE5o+Q5Lqk77yaIgorCisjOiBidW5kbGUuYzoxNDYKK21zZ2lkICJuZWVkIGEgcmVwb3NpdG9yeSB0byB2ZXJpZnkgYSBidW5kbGUiCittc2dzdHIgIumcgOimgeeJiOacrOW6q+mpl+itieS4gOWAi+WMhSIKKworIzogYnVuZGxlLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICLpgJnlgIvljIXkuK3lkKvmnInpgJkgJWQg5YCL5byV55So77yaIgorCisjOiBidW5kbGUuYzoyMDQKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAi6YCZ5YCL5YyF6KiY6YyE5LiA5YCL5a6M5pW05q235Y+y44CCIgorCisjOiBidW5kbGUuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIumAmeWAi+WMhemcgOimgemAmSAlZCDlgIvlvJXnlKjvvJoiCisKKyM6IGJ1bmRsZS5jOjI3MworbXNnaWQgInVuYWJsZSB0byBkdXAgYnVuZGxlIGRlc2NyaXB0b3IiCittc2dzdHIgIueEoeazleikh+ijvSBidW5kbGUg5o+P6L+w56ymIgorCisjOiBidW5kbGUuYzoyODAKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICLkuI3og73nlJ/miJAgcGFjay1vYmplY3RzIOmAsueoiyIKKworIzogYnVuZGxlLmM6MjkxCittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgInBhY2stb2JqZWN0cyDntYLmraIiCisKKyM6IGJ1bmRsZS5jOjMzMworbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgInJldi1saXN0IOe1guatoiIKKworIzogYnVuZGxlLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICLlvJXnlKggJyVzJyDooqsgcmV2LWxpc3Qg6YG46aCF5o6S6ZmkIgorCisjOiBidW5kbGUuYzo0NjEgYnVpbHRpbi9sb2cuYzoyMDMgYnVpbHRpbi9sb2cuYzoxODE0IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq6IO96K2Y5Yil55qE5Y+D5pW477yaJXMiCisKKyM6IGJ1bmRsZS5jOjQ2OQorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICLkuI3og73lu7rnq4vnqbrljIXjgIIiCisKKyM6IGJ1bmRsZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIuS4jeiDveW7uueriyAnJXMnIgorCisjOiBidW5kbGUuYzo1MDQKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgImluZGV4LXBhY2sg57WC5q2iIgorCisjOiBjb2xvci5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yIHZhbHVlOiAlLipzIgorbXNnc3RyICLnhKHmlYjnmoTpoY/oibLlgLzvvJolLipzIgorCisjOiBjb21taXQuYzo1MSBzZXF1ZW5jZXIuYzoyNzE5IGJ1aWx0aW4vYW0uYzozNTkgYnVpbHRpbi9hbS5jOjQwMworIzogYnVpbHRpbi9hbS5jOjEzNzEgYnVpbHRpbi9hbS5jOjIwMTQgYnVpbHRpbi9yZXBsYWNlLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6QICVzIgorCisjOiBjb21taXQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICIlcyAlcyDkuI3mmK/kuIDlgIvmj5DkuqTvvIEiCisKKyM6IGNvbW1pdC5jOjE5MworbXNnaWQgIiIKKyJTdXBwb3J0IGZvciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaXMgZGVwcmVjYXRlZFxuIgorImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgR2l0IHZlcnNpb24uXG4iCisiXG4iCisiUGxlYXNlIHVzZSBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyJ0byBjb252ZXJ0IHRoZSBncmFmdHMgaW50byByZXBsYWNlIHJlZnMuXG4iCisiXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIiIKK21zZ3N0ciAiIgorIuWwjSA8R0lUX0RJUj4vaW5mby9ncmFmdHMg55qE5pSv5o+05bey6KKr5qOE55So77yM5Lim5bCH5ZyoXG4iCisi5pyq5L6G55qER2l054mI5pys5Lit6KKr56e76Zmk44CCXG4iCisiXG4iCisi6KuL5L2/55SoIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIiDlsIdcbiIKKyJncmFmdHMg6L2J5o+b54K65Y+W5Luj5byV55So44CCXG4iCisiXG4iCisi6Kit5a6aIFwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiXG4iCisi5Y+v6Zec6ZaJ5pys5raI5oGvIgorCisjOiBjb21taXQuYzoxMTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIuaPkOS6pCAlcyDmnInkuIDlgIvpnZ7lj6/kv6HnmoTogbLnqLHkvoboh6ogJXMg55qEIEdQRyDnsL3lkI3jgIIiCisKKyM6IGNvbW1pdC5jOjExNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIuaPkOS6pCAlcyDmnInkuIDlgIvpjK/oqqTnmoTogbLnqLHkvoboh6ogJXMg55qEIEdQRyDnsL3lkI3jgIIiCisKKyM6IGNvbW1pdC5jOjExNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlLiIKK21zZ3N0ciAi5o+Q5LqkICVzIOaykuaciSBHUEcg57C95ZCN44CCIgorCisjOiBjb21taXQuYzoxMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAi5o+Q5LqkICVzIOacieS4gOWAi+S+huiHqiAlcyDnmoTlpb3nmoQgR1BHIOewveWQjeOAglxuIgorCisjOiBjb21taXQuYzoxNDE3Cittc2dpZCAiIgorIldhcm5pbmc6IGNvbW1pdCBtZXNzYWdlIGRpZCBub3QgY29uZm9ybSB0byBVVEYtOC5cbiIKKyJZb3UgbWF5IHdhbnQgdG8gYW1lbmQgaXQgYWZ0ZXIgZml4aW5nIHRoZSBtZXNzYWdlLCBvciBzZXQgdGhlIGNvbmZpZ1xuIgorInZhcmlhYmxlIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gdGhlIGVuY29kaW5nIHlvdXIgcHJvamVjdCB1c2VzLlxuIgorbXNnc3RyICIiCisi6K2m5ZGK77ya5o+Q5Lqk6Kqq5piO5LiN56ym5ZCIIFVURi04IOWtl+WFg+e3qOeivOOAglxuIgorIuaCqOWPr+S7pemAj+mBjuS/ruijnOaPkOS6pOS+huaUueato+aPkOS6pOiqquaYju+8jOaIluiAheWwh+ioreWumuiuiuaVuCBpMThuLmNvbW1pdGVuY29kaW5nXG4iCisi6Kit5a6a54K65oKo6aCF55uu5omA55So55qE5a2X5YWD57eo56K844CCXG4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMgorbXNnaWQgImNvbW1pdC1ncmFwaCBmaWxlIGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAi5o+Q5Lqk5ZyW5b2i5qqU5qGI5aSq5bCPIgorCisjOiBjb21taXQtZ3JhcGguYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHNpZ25hdHVyZSAlWCBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUgJVgiCittc2dzdHIgIuaPkOS6pOWcluW9ouewveWQjSAlWCDlkoznsL3lkI0gJVgg5LiN56ym5ZCIIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAi5o+Q5Lqk5ZyW5b2i54mI5pysICVYIOWSjOeJiOacrCAlWCDkuI3nrKblkIgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgIuaPkOS6pOWcluW9oumbnOa5iueJiOacrCAlWCDlkozniYjmnKwgJVgg5LiN56ym5ZCIIgorCisjOiBjb21taXQtZ3JhcGguYzoyMjYKK21zZ2lkICJjb21taXQtZ3JhcGggY2h1bmsgbG9va3VwIHRhYmxlIGVudHJ5IG1pc3Npbmc7IGZpbGUgbWF5IGJlIGluY29tcGxldGUiCittc2dzdHIgIuaPkOS6pOWcluW9ouWNgOWhiuWwi+aJvuihqOaineebrumBuuWkse+8jOaqlOahiOWPr+iDveS4jeWujOaVtCIKKworIzogY29tbWl0LWdyYXBoLmM6MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBpbXByb3BlciBjaHVuayBvZmZzZXQgJTA4eCUwOHgiCittc2dzdHIgIuaPkOS6pOWcluW9ouS4jeato+eiuueahOWNgOWhiuS9jeenuyAlMDh4JTA4eCIKKworIzogY29tbWl0LWdyYXBoLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBpZCAlMDh4IGFwcGVhcnMgbXVsdGlwbGUgdGltZXMiCittc2dzdHIgIuaPkOS6pOWcluW9ouWNgOWhiiBpZCAlMDh4IOWHuuePvuS6huWkmuasoSIKKworIzogY29tbWl0LWdyYXBoLmM6MzQzCittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBubyBiYXNlIGdyYXBocyBjaHVuayIKK21zZ3N0ciAi5o+Q5Lqk5ZyW5b2i5rKS5pyJ5Z+656SO5ZyW5b2i5Y2A5aGKIgorCisjOiBjb21taXQtZ3JhcGguYzozNTMKK21zZ2lkICJjb21taXQtZ3JhcGggY2hhaW4gZG9lcyBub3QgbWF0Y2giCittc2dzdHIgIuaPkOS6pOWcluW9oumPiOS4jeespuWQiCIKKworIzogY29tbWl0LWdyYXBoLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0LWdyYXBoIGNoYWluOiBsaW5lICclcycgbm90IGEgaGFzaCIKK21zZ3N0ciAi54Sh5pWI55qE5o+Q5Lqk5ZyW5b2i6Y+I77ya6KGMICclcycg5LiN5piv5LiA5YCL6Zuc5rmK5YC8IgorCisjOiBjb21taXQtZ3JhcGguYzo0MjUKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBhbGwgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICLnhKHms5Xmib7liLDmiYDmnInmj5DkuqTlnJblvaLmqpTmoYgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU1OCBjb21taXQtZ3JhcGguYzo2MTgKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBwb3NpdGlvbi4gY29tbWl0LWdyYXBoIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICLnhKHmlYjnmoTmj5DkuqTkvY3nva7jgILmj5DkuqTlnJblvaLlj6/og73lt7LmkI3lo54iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiCittc2dzdHIgIueEoeazleaJvuWIsOaPkOS6pCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6ODUyIGJ1aWx0aW4vYW0uYzoxMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIuS4jeiDveino+aekOaPkOS6pCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTAxMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCB0eXBlIG9mIG9iamVjdCAlcyIKK21zZ3N0ciAi54Sh5rOV542y5b6X54mp5Lu2ICVzIOmhnuWeiyIKKworIzogY29tbWl0LWdyYXBoLmM6MTA0MworbXNnaWQgIkxvYWRpbmcga25vd24gY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOi8ieWFpeaPkOS6pOWcluS4reeahOW3suefpeaPkOS6pCIKKworIzogY29tbWl0LWdyYXBoLmM6MTA2MAorbXNnaWQgIkV4cGFuZGluZyByZWFjaGFibGUgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOaTtOWxleaPkOS6pOWcluS4reeahOWPr+S7peWPluW+l+aPkOS6pCIKKworIzogY29tbWl0LWdyYXBoLmM6MTA3OQorbXNnaWQgIkNsZWFyaW5nIGNvbW1pdCBtYXJrcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOa4hemZpOaPkOS6pOWcluS4reeahOaPkOS6pOaomeiomCIKKworIzogY29tbWl0LWdyYXBoLmM6MTA5OAorbXNnaWQgIkNvbXB1dGluZyBjb21taXQgZ3JhcGggZ2VuZXJhdGlvbiBudW1iZXJzIgorbXNnc3RyICLmraPlnKjoqIjnrpfmj5DkuqTlnJbkuJbku6PmlbjlrZciCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFjayIKK21zZ2lkX3BsdXJhbCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFja3MiCittc2dzdHJbMF0gIuato+WcqCAlZCDlgIvljIXkuK3lsIvmib7mj5DkuqTlnJbnmoTmj5DkuqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgYWRkaW5nIHBhY2sgJXMiCittc2dzdHIgIuaWsOWinuWMhSAlcyDnmbznlJ/pjK/oqqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyBpbmRleCBmb3IgJXMiCittc2dzdHIgIueCuiAlcyDplovllZ/ntKLlvJXnmbznlJ/pjK/oqqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmcyIKK21zZ3N0clswXSAi5q2j5Zyo5b6eICVkIOWAi+W8leeUqOS4reWwi+aJvuaPkOS6pOWclueahOaPkOS6pCIKKworIzogY29tbWl0LWdyYXBoLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBvYmplY3QgaWQ6ICVzIgorbXNnc3RyICLnhKHmlYjnmoTmj5DkuqTnianku7YgSUTvvJolcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTI0OQorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGFtb25nIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLmraPlnKjmiZPljIXnianku7bkuK3lsIvmib7mj5DkuqTlnJbnmoTmj5DkuqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNjQKK21zZ2lkICJDb3VudGluZyBkaXN0aW5jdCBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAi5q2j5Zyo6KiI566X5o+Q5Lqk5ZyW5Lit5LiN5ZCM55qE5o+Q5LqkIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjk0Cittc2dpZCAiRmluZGluZyBleHRyYSBlZGdlcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOWwi+aJvuaPkOS6pOWcluS4remhjeWklueahOmCiiIKKworIzogY29tbWl0LWdyYXBoLmM6MTM0MAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb3JyZWN0IG51bWJlciBvZiBiYXNlIGdyYXBoIGlkcyIKK21zZ3N0ciAi54Sh5rOV5a+r5YWl5q2j56K65pW46YeP55qE5Z+656SO5ZyW5b2iIElEIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzczIG1pZHguYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIgorbXNnc3RyICLkuI3og73ngrogJXMg5bu656uL5YWI5bCO55uu6YyEIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzg1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMwNiBidWlsdGluL3JlcGFjay5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgIuS4jeiDveW7uueriyAnJXMnIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzIgorbXNnaWRfcGx1cmFsICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzc2VzIgorbXNnc3RyWzBdICLmraPlnKjnlKggJWQg5q2l5a+r5Ye65o+Q5Lqk5ZyWIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDg2Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gY29tbWl0LWdyYXBoIGNoYWluIGZpbGUiCittc2dzdHIgIueEoeazlemWi+WVn+aPkOS6pOWcluW9oumPiOaqlOahiCIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ5OAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgYmFzZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAi54Sh5rOV6YeN5paw5ZG95ZCN5Z+656SO5o+Q5Lqk5ZyW5b2i5qqU5qGIIgorCisjOiBjb21taXQtZ3JhcGguYzoxNTE4Cittc2dpZCAiZmFpbGVkIHRvIHJlbmFtZSB0ZW1wb3JhcnkgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIueEoeazlemHjeaWsOWRveWQjeaaq+aZguaPkOS6pOWcluW9ouaqlOahiCIKKworIzogY29tbWl0LWdyYXBoLmM6MTYzMQorbXNnaWQgIlNjYW5uaW5nIG1lcmdlZCBjb21taXRzIgorbXNnc3RyICLmraPlnKjmjoPmj4/lkIjkvbXmj5DkuqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkdXBsaWNhdGUgY29tbWl0IGlkICVzIgorbXNnc3RyICLmhI/lpJbnmoTph43opIfmj5DkuqQgSUQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NjUKK21zZ2lkICJNZXJnaW5nIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAi5q2j5Zyo5ZCI5L215o+Q5Lqk5ZyW5b2iIgorCisjOiBjb21taXQtZ3JhcGguYzoxODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBjb21taXQgZ3JhcGggZm9ybWF0IGNhbm5vdCB3cml0ZSAlZCBjb21taXRzIgorbXNnc3RyICLmj5DkuqTlnJbmoLzlvI/kuI3og73lr6vlhaUgJWQg5YCL5o+Q5LqkIgorCisjOiBjb21taXQtZ3JhcGguYzoxODU1Cittc2dpZCAidG9vIG1hbnkgY29tbWl0cyB0byB3cml0ZSBncmFwaCIKK21zZ3N0ciAi5o+Q5Lqk5aSq5aSa5LiN6IO955Wr5ZyWIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTQ0Cittc2dpZCAidGhlIGNvbW1pdC1ncmFwaCBmaWxlIGhhcyBpbmNvcnJlY3QgY2hlY2tzdW0gYW5kIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICLmj5DkuqTlnJbmqpTmoYjnmoTnuL3lkozmqqLmn6XnorzpjK/oqqTvvIzlj6/og73lt7LntpPmkI3lo54iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgT0lEIG9yZGVyOiAlcyB0aGVuICVzIgorbXNnc3RyICLmj5DkuqTlnJblvaLnmoTnianku7YgSUQg6aCG5bqP5LiN5q2j56K677yaJXMg54S25b6MICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTY0IGNvbW1pdC1ncmFwaC5jOjE5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgZmFub3V0IHZhbHVlOiBmYW5vdXRbJWRdID0gJXUgIT0gJXUiCittc2dzdHIgIuaPkOS6pOWcluW9ouacieS4jeato+eiuueahOaJh+WHuuWAvO+8mmZhbm91dFslZF0gPSAldSAhPSAldSIKKworIzogY29tbWl0LWdyYXBoLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gY29tbWl0LWdyYXBoIgorbXNnc3RyICLnhKHms5Xlvp7mj5DkuqTlnJblvaLkuK3op6PmnpDmj5DkuqQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5ODkKK21zZ2lkICJWZXJpZnlpbmcgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOmpl+itieaPkOS6pOWcluS4reeahOaPkOS6pCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAwMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gb2JqZWN0IGRhdGFiYXNlIGZvciBjb21taXQtZ3JhcGgiCittc2dzdHIgIueEoeazleW+nuaPkOS6pOWcluW9oueahOeJqeS7tuW6q+S4reino+aekOaPkOS6pCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJyb290IHRyZWUgT0lEIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICVzICE9ICVzIgorbXNnc3RyICLmj5DkuqTlnJblvaLkuK3nmoTmj5DkuqQgJXMg55qE5qC55qi554uA54mp5Lu2IElEIOaYryAlcyAhPSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyBpcyB0b28gbG9uZyIKK21zZ3N0ciAi5o+Q5LqkICVzIOeahOaPkOS6pOWcluW9oueItuaPkOS6pOWIl+ihqOWkqumVt+S6hiIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGZvciAlcyBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiJXMg55qE5o+Q5Lqk5ZyW5b2i54i25o+Q5Lqk5pivICVzICE9ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIHRlcm1pbmF0ZXMgZWFybHkiCittc2dzdHIgIuaPkOS6pCAlcyDnmoTmj5DkuqTlnJblvaLniLbmj5DkuqTliJfooajpgY7ml6nntYLmraIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgZ2VuZXJhdGlvbiBudW1iZXIgemVybyBmb3IgY29tbWl0ICVzLCBidXQgbm9uLXplcm8gZWxzZXdoZXJlIgorbXNnc3RyICLmj5DkuqTlnJblvaLkuK3mj5DkuqQgJXMg55qE5LiW5Luj6Jmf5piv6Zu277yM5L2G5YW25a6D5Zyw5pa56Z2e6Zu2IgorCisjOiBjb21taXQtZ3JhcGguYzoyMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb21taXQtZ3JhcGggaGFzIG5vbi16ZXJvIGdlbmVyYXRpb24gbnVtYmVyIGZvciBjb21taXQgJXMsIGJ1dCB6ZXJvIGVsc2V3aGVyZSIKK21zZ3N0ciAi5o+Q5Lqk5ZyW5b2i5Lit5o+Q5LqkICVzIOeahOS4luS7o+iZn+mdnumbtu+8jOS9huWFtuWug+WcsOaWueaYr+mbtiIKKworIzogY29tbWl0LWdyYXBoLmM6MjA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggZ2VuZXJhdGlvbiBmb3IgY29tbWl0ICVzIGlzICV1ICE9ICV1IgorbXNnc3RyICLmj5DkuqTlnJblvaLkuK3nmoTmj5DkuqQgJXMg55qE5LiW5Luj6Jmf5pivICV1ICE9ICV1IgorCisjOiBjb21taXQtZ3JhcGguYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCBkYXRlIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKK21zZ3N0ciAi5o+Q5Lqk5ZyW5b2i5Lit5o+Q5LqkICVzIOeahOaPkOS6pOaXpeacn+aYryAlPFBSSXVNQVg+ICE9ICU8UFJJdU1BWD4iCisKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA2IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAi6KiY5oa26auU6ICX55uhIgorCisjOiBjb25maWcuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4Y2VlZGVkIG1heGltdW0gaW5jbHVkZSBkZXB0aCAoJWQpIHdoaWxlIGluY2x1ZGluZ1xuIgorIlx0JXNcbiIKKyJmcm9tXG4iCisiXHQlc1xuIgorIlRoaXMgbWlnaHQgYmUgZHVlIHRvIGNpcmN1bGFyIGluY2x1ZGVzLiIKK21zZ3N0ciAiIgorIui2hemBjuS6huacgOWkp+WMheWQq+a3seW6pu+8iCUxJGTvvInvvIznlbblvp5cbiIKKyJcdCUzJHNcbiIKKyLljIXlkKtcbiIKKyJcdCUyJHNcbiIKKyLpgJnlj6/og73mmK/lm6DngrrlvqrnkrDljIXlkKvjgIIiCisKKyM6IGNvbmZpZy5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhwYW5kIGluY2x1ZGUgcGF0aCAnJXMnIgorbXNnc3RyICLnhKHms5Xmk7TlsZXljIXlkKvot6/lvpEgJyVzJyIKKworIzogY29uZmlnLmM6MTUxCittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICLnm7jlsI3ot6/lvpHnmoToqK3lrprmqpTmoYjlvJXnlKjlv4XpoIjkvoboh6rmlrzmqpTmoYgiCisKKyM6IGNvbmZpZy5jOjE5NworbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAi55u45bCN6Lev5b6R55qE6Kit5a6a5qqU5qGI5qKd5Lu25byV55So5b+F6aCI5L6G6Ieq5pa85qqU5qGIIgorCisjOiBjb25maWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlcyIKK21zZ3N0ciAi6Y215ZCN5rKS5pyJ5YyF5ZCr5LiA5YCL5bCP56+A5ZCN56ix77yaJXMiCisKKyM6IGNvbmZpZy5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiB2YXJpYWJsZSBuYW1lOiAlcyIKK21zZ3N0ciAi6Y215ZCN5rKS5pyJ5YyF5ZCr6K6K5pW45ZCN77yaJXMiCisKKyM6IGNvbmZpZy5jOjQwNiBzZXF1ZW5jZXIuYzoyNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAi54Sh5pWI6Y215ZCN77yaJXMiCisKKyM6IGNvbmZpZy5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIgorbXNnc3RyICLnhKHmlYjpjbXlkI3vvIjmnInmj5vooYznrKbomZ/vvInvvJolcyIKKworIzogY29uZmlnLmM6NDQ4IGNvbmZpZy5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBjb25maWcgcGFyYW1ldGVyOiAlcyIKK21zZ3N0ciAi5YG96Kit5a6a5Y+D5pW477yaJXMiCisKKyM6IGNvbmZpZy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBmb3JtYXQgaW4gJXMiCittc2dzdHIgIiVzIOS4reagvOW8j+mMr+iqpCIKKworIzogY29uZmlnLmM6ODIxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBibG9iICVzIgorbXNnc3RyICLos4fmlpnnianku7YgJTIkcyDkuK3pjK/oqqTnmoToqK3lrprooYwgJTEkZCIKKworIzogY29uZmlnLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBmaWxlICVzIgorbXNnc3RyICLmqpTmoYggJTIkcyDkuK3pjK/oqqTnmoToqK3lrprooYwgJTEkZCIKKworIzogY29uZmlnLmM6ODI5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi5qiZ5rqW6Ly45YWl5Lit6Yyv6Kqk55qE6Kit5a6a6KGMICVkIgorCisjOiBjb25maWcuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN1Ym1vZHVsZS1ibG9iICVzIgorbXNnc3RyICLlrZDmqKHntYTos4fmlpnnianku7YgJTIkcyDkuK3pjK/oqqTnmoToqK3lrprooYwgJTEkZCIKKworIzogY29uZmlnLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBjb21tYW5kIGxpbmUgJXMiCittc2dzdHIgIuaMh+S7pOWIlyAlMiRzIOS4remMr+iqpOeahOioreWumuihjCAlMSRkIgorCisjOiBjb25maWcuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIgorbXNnc3RyICLlnKggJTIkcyDkuK3pjK/oqqTnmoToqK3lrprooYwgJTEkZCIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAib3V0IG9mIHJhbmdlIgorbXNnc3RyICLotoXlh7rnr4TlnI0iCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgImludmFsaWQgdW5pdCIKK21zZ3N0ciAi54Sh5pWI55qE5Zau5L2NIgorCisjOiBjb25maWcuYzo5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6ICVzIgorbXNnc3RyICLoqK3lrprorormlbggJyUyJHMnIOeahOaVuOWtl+WPluWAvCAnJTEkcycg6Kit5a6a6Yyv6Kqk77yaJTMkcyIKKworIzogY29uZmlnLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGJsb2IgJXM6ICVzIgorbXNnc3RyICLos4fmlpnnianku7YgJTMkcyDkuK3oqK3lrprorormlbggJyUyJHMnIOmMr+iqpOeahOWPluWAvCAnJTEkcyfvvJolNCRzIgorCisjOiBjb25maWcuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIgorbXNnc3RyICLmqpTmoYggJTMkcyDkuK3oqK3lrprorormlbggJyUyJHMnIOmMr+iqpOeahOWPluWAvCAnJTEkcyfvvJolNCRzIgorCisjOiBjb25maWcuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN0YW5kYXJkIGlucHV0OiAlcyIKK21zZ3N0ciAi5qiZ5rqW6Ly45YWl5Lit6Kit5a6a6K6K5pW4ICclMiRzJyDpjK/oqqTnmoTlj5blgLwgJyUxJHMn77yaJTMkcyIKKworIzogY29uZmlnLmM6MTAwNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdWJtb2R1bGUtYmxvYiAlczogJXMiCittc2dzdHIgIuWtkOaooee1hOizh+aWmSAlMyRzIOS4reioreWumuiuiuaVuCAnJTIkcycg6Yyv6Kqk55qE5Y+W5YC8ICclMSRzJ++8miU0JHMiCisKKyM6IGNvbmZpZy5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gY29tbWFuZCBsaW5lICVzOiAlcyIKK21zZ3N0ciAi5oyH5Luk5YiXICUzJHMg5Lit6Kit5a6a6K6K5pW4ICclMiRzJyDpjK/oqqTnmoTlj5blgLwgJyUxJHMn77yaJTQkcyIKKworIzogY29uZmlnLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgIuWcqCAlMyRzIOS4reioreWumuiuiuaVuCAnJTIkcycg6Yyv6Kqk55qE5Y+W5YC8ICclMSRzJ++8miU0JHMiCisKKyM6IGNvbmZpZy5jOjExMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAi54Sh5rOV5pO05bGV5L2/55So6ICF55uu6YyE77yaJyVzJyIKKworIzogY29uZmlnLmM6MTExNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZvciAnJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJyUyJHMnIOeahOWAvCAnJTEkcycg5LiN5piv5LiA5YCL5pyJ5pWI55qE5pmC6ZaT5oizIgorCisjOiBjb25maWcuYzoxMjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYnJldiBsZW5ndGggb3V0IG9mIHJhbmdlOiAlZCIKK21zZ3N0ciAi57iu5a+r6ZW35bqm6LaF5Ye656+E5ZyN77yaJWQiCisKKyM6IGNvbmZpZy5jOjEyMjIgY29uZmlnLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAi6Yyv6Kqk55qEIHpsaWIg5aOT57iu57Sa5YilICVkIgorCisjOiBjb25maWcuYzoxMzI1Cittc2dpZCAiY29yZS5jb21tZW50Q2hhciBzaG91bGQgb25seSBiZSBvbmUgY2hhcmFjdGVyIgorbXNnc3RyICJjb3JlLmNvbW1lbnRDaGFyIOaHieipsuaYr+S4gOWAi+Wtl+WFgyIKKworIzogY29uZmlnLmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiCittc2dzdHIgIueEoeaViOeahOeJqeS7tuW7uueri+aooeW8j++8miVzIgorCisjOiBjb25maWcuYzoxNDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgIiVzIOeahOWPluWAvOagvOW8j+mMr+iqpCIKKworIzogY29uZmlnLmM6MTQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiJXMg55qE5Y+W5YC85qC85byP6Yyv6Kqk77yaJXMiCisKKyM6IGNvbmZpZy5jOjE0NTcKK21zZ2lkICJtdXN0IGJlIG9uZSBvZiBub3RoaW5nLCBtYXRjaGluZywgc2ltcGxlLCB1cHN0cmVhbSBvciBjdXJyZW50IgorbXNnc3RyICLlv4XpoIjmmK/lhbbkuK3kuYvkuIDvvJpub3RoaW5n44CBbWF0Y2hpbmfjgIFzaW1wbGXjgIF1cHN0cmVhbSDmiJYgY3VycmVudCIKKworIzogY29uZmlnLmM6MTUxOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIumMr+iqpOeahOaJk+WMheWjk+e4rue0muWIpSAlZCIKKworIzogY29uZmlnLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBjb25maWcgYmxvYiBvYmplY3QgJyVzJyIKK21zZ3N0ciAi54Sh5rOV5b6e6LOH5paZ54mp5Lu2ICclcycg6LyJ5YWl6Kit5a6aIgorCisjOiBjb25maWcuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgYmxvYiIKK21zZ3N0ciAi5byV55SoICclcycg5rKS5pyJ5oyH5ZCR5LiA5YCL6LOH5paZ54mp5Lu2IgorCisjOiBjb25maWcuYzoxNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIGNvbmZpZyBibG9iICclcyciCittc2dzdHIgIuS4jeiDveino+aekOioreWumueJqeS7tiAnJXMnIgorCisjOiBjb25maWcuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAlcyIKK21zZ3N0ciAi6Kej5p6QICVzIOWkseaVlyIKKworIzogY29uZmlnLmM6MTc0MworbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICLnhKHms5Xop6PmnpDmjIfku6TliJfkuK3nmoToqK3lrpoiCisKKyM6IGNvbmZpZy5jOjIwOTcKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgIuWcqOiugOWPluioreWumuaqlOahiOaZgumBh+WIsOacquefpemMr+iqpCIKKworIzogY29uZmlnLmM6MjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICLnhKHmlYggJXPvvJonJXMnIgorCisjOiBjb25maWcuYzoyMzEyCisjLCBjLWZvcm1hdAorbXNnaWQgInNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSB2YWx1ZSAnJWQnIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCIKK21zZ3N0ciAic3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIOeahOWPluWAvCAnJWQnIOaHieipsuS7i+aWvCAwIOWSjCAxMDAg5LmL6ZaTIgorCisjOiBjb25maWcuYzoyMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJXMnIGZyb20gY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAi54Sh5rOV6Kej5p6Q5oyH5Luk5YiX6Kit5a6a5Lit55qEICclcyciCisKKyM6IGNvbmZpZy5jOjIzNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICLlnKjmqpTmoYggJyUyJHMnIOeahOesrCAlMyRkIOihjOeZvOePvumMr+iqpOeahOioreWumuiuiuaVuCAnJTEkcyciCisKKyM6IGNvbmZpZy5jOjI0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWUgJyVzJyIKK21zZ3N0ciAi54Sh5pWI55qE5bCP56+A5ZCN56ixICclcyciCisKKyM6IGNvbmZpZy5jOjI0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiJXMg5pyJ5aSa5YCL5Y+W5YC8IgorCisjOiBjb25maWcuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICLlr6vlhaXmlrDnmoToqK3lrprmqpTmoYggJXMg5aSx5pWXIgorCisjOiBjb25maWcuYzoyNzU0IGNvbmZpZy5jOjMwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIuS4jeiDvemOluWumuioreWumuaqlOahiCAlcyIKKworIzogY29uZmlnLmM6Mjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nICVzIgorbXNnc3RyICLplovllZ8gJXMiCisKKyM6IGNvbmZpZy5jOjI4MDAgYnVpbHRpbi9jb25maWcuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAi54Sh5pWI5qih5byP77yaJXMiCisKKyM6IGNvbmZpZy5jOjI4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAi54Sh5pWI55qE6Kit5a6a5qqU5qGIICVzIgorCisjOiBjb25maWcuYzoyODM4IGNvbmZpZy5jOjMwOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnN0YXQgb24gJXMgZmFpbGVkIgorbXNnc3RyICLlsI0gJXMg5ZG85Y+rIGZzdGF0IOWkseaVlyIKKworIzogY29uZmlnLmM6Mjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAnJXMnIgorbXNnc3RyICLkuI3og70gbW1hcCAnJXMnIgorCisjOiBjb25maWcuYzoyODU4IGNvbmZpZy5jOjMwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2htb2Qgb24gJXMgZmFpbGVkIgorbXNnc3RyICLlsI0gJXMg5ZG85Y+rIGNobW9kIOWkseaVlyIKKworIzogY29uZmlnLmM6Mjk0MyBjb25maWcuYzozMTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAi5LiN6IO95a+r5YWl6Kit5a6a5qqU5qGIICVzIgorCisjOiBjb25maWcuYzoyOTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73oqK3lrpogJyVzJyDngrogJyVzJyIKKworIzogY29uZmlnLmM6Mjk3OSBidWlsdGluL3JlbW90ZS5jOjY1NSBidWlsdGluL3JlbW90ZS5jOjg0OSBidWlsdGluL3JlbW90ZS5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Y+W5raI6Kit5a6aICclcyciCisKKyM6IGNvbmZpZy5jOjMwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWU6ICVzIgorbXNnc3RyICLnhKHmlYjnmoTlsI/nr4DlkI3nqLHvvJolcyIKKworIzogY29uZmlnLmM6MzIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIHZhbHVlIGZvciAnJXMnIgorbXNnc3RyICIlcyDnmoTlj5blgLznvLrlsJEiCisKKyM6IGNvbm5lY3QuYzo2MQorbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdXBvbiBpbml0aWFsIGNvbnRhY3QiCittc2dzdHIgIumBoOerr+WcqOWIneWni+mAo+e3muaZguWNs+aOm+aWtyIKKworIzogY29ubmVjdC5jOjYzCittc2dpZCAiIgorIkNvdWxkIG5vdCByZWFkIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkuXG4iCisiXG4iCisiUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBhY2Nlc3MgcmlnaHRzXG4iCisiYW5kIHRoZSByZXBvc2l0b3J5IGV4aXN0cy4iCittc2dzdHIgIiIKKyLnhKHms5XoroDlj5bpgaDnq6/niYjmnKzluqvjgIJcbiIKKyJcbiIKKyLoq4vnorroqo3mgqjmnInmraPnorrnmoTlrZjlj5bmrIrpmZDkuKbkuJTniYjmnKzluqvlrZjlnKjjgIIiCisKKyM6IGNvbm5lY3QuYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0ICclcyciCittc2dzdHIgIuS8uuacjeWZqOS4jeaUr+aPtCAnJXMnIgorCisjOiBjb25uZWN0LmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciBkb2Vzbid0IHN1cHBvcnQgZmVhdHVyZSAnJXMnIgorbXNnc3RyICLkvLrmnI3lmajkuI3mlK/mj7TnibnmgKcgJyVzJyIKKworIzogY29ubmVjdC5jOjExNAorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAi5Zyo6IO95Yqb5LmL5b6M5oeJ54K65LiA5YCLIGZsdXNoIOWMhSIKKworIzogY29ubmVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBjYXBhYmlsaXRpZXMgYWZ0ZXIgZmlyc3QgbGluZSAnJXMnIgorbXNnc3RyICLlv73nlaXnrKzkuIDooYwgJyVzJyDkuYvlvoznmoTog73lipvmrITkvY0iCisKKyM6IGNvbm5lY3QuYzoyNTIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCBjYXBhYmlsaXRpZXNee30iCittc2dzdHIgIuWNlOWumumMr+iqpO+8muaEj+WklueahCBjYXBhYmlsaXRpZXNee30iCisKKyM6IGNvbm5lY3QuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYWxsb3cgc2hhLTEsIGdvdCAnJXMnIgorbXNnc3RyICLljZTlrprpjK/oqqTvvJrpoJDmnJ/mt7ropIfoo70gc2hhLTHvvIzljbvlvpfliLAgJyVzJyIKKworIzogY29ubmVjdC5jOjI3NQorbXNnaWQgInJlcG9zaXRvcnkgb24gdGhlIG90aGVyIGVuZCBjYW5ub3QgYmUgc2hhbGxvdyIKK21zZ3N0ciAi5Y+m5LiA56uv55qE54mI5pys5bqr5LiN6IO95piv5re66KSH6KO954mI5pys5bqrIgorCisjOiBjb25uZWN0LmM6MzEzCittc2dpZCAiaW52YWxpZCBwYWNrZXQiCittc2dzdHIgIueEoeaViOWwgeWMhSIKKworIzogY29ubmVjdC5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCAnJXMnIgorbXNnc3RyICLljZTlrprpjK/oqqTvvJrmhI/lpJbnmoQgJyVzJyIKKworIzogY29ubmVjdC5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxzLXJlZnMgcmVzcG9uc2U6ICVzIgorbXNnc3RyICLnhKHmlYjnmoQgbHMtcmVmcyDlm57mh4nvvJolcyIKKworIzogY29ubmVjdC5jOjQ0NQorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIHJlZiBsaXN0aW5nIgorbXNnc3RyICLlnKjlvJXnlKjliJfooajkuYvlvozmh4noqbLmnInkuIDlgIsgZmx1c2gg5YyFIgorCisjOiBjb25uZWN0LmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sICclcycgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi5LiN5pSv5o+0ICclcycg5Y2U5a6aIgorCisjOiBjb25uZWN0LmM6NTk1Cittc2dpZCAidW5hYmxlIHRvIHNldCBTT19LRUVQQUxJVkUgb24gc29ja2V0IgorbXNnc3RyICLnhKHms5Xngrogc29ja2V0IOioreWumiBTT19LRUVQQUxJVkUiCisKKyM6IGNvbm5lY3QuYzo2MzUgY29ubmVjdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29raW5nIHVwICVzIC4uLiAiCittc2dzdHIgIuWwi+aJviAlcyAuLi4iCisKKyM6IGNvbm5lY3QuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgJXMgKHBvcnQgJXMpICglcykiCittc2dzdHIgIueEoeazleWwi+aJviAlc++8iOWfoCAlc++8ie+8iCVz77yJIgorCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJMb29raW5nIHVwICVzIC4uLiAiCisjOiBjb25uZWN0LmM6NjQzIGNvbm5lY3QuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmUuXG4iCisiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKK21zZ3N0ciAiIgorIuWujOaIkOOAglxuIgorIumAo+e3muWIsCAlc++8iOWfoCAlc++8iS4uLiAiCisKKyM6IGNvbm5lY3QuYzo2NjUgY29ubmVjdC5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIGNvbm5lY3QgdG8gJXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyLnhKHms5XpgKPnt5rliLAgJXPvvJpcbiIKKyIlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKKyM6IGNvbm5lY3QuYzo2NzEgY29ubmVjdC5jOjc0OAorbXNnaWQgImRvbmUuIgorbXNnc3RyICLlrozmiJDjgIIiCisKKyM6IGNvbm5lY3QuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIKK21zZ3N0ciAi54Sh5rOV5bCL5om+ICVz77yIJXPvvIkiCisKKyM6IGNvbm5lY3QuYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwb3J0ICVzIgorbXNnc3RyICLmnKrnn6Xln6AgJXMiCisKKyM6IGNvbm5lY3QuYzo4NDUgY29ubmVjdC5jOjExNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBob3N0bmFtZSAnJXMnIGJsb2NrZWQiCittc2dzdHIgIuW3sumYu+atouWlh+aAqueahOS4u+apn+WQjeeosSAnJXMnIgorCisjOiBjb25uZWN0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcG9ydCAnJXMnIGJsb2NrZWQiCittc2dzdHIgIuW3sumYu+atouWlh+aAqueahOWfoOiZnyAnJXMnIgorCisjOiBjb25uZWN0LmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGFydCBwcm94eSAlcyIKK21zZ3N0ciAi5LiN6IO95ZWf5YuV5Luj55CGICVzIgorCisjOiBjb25uZWN0LmM6OTI4Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQ7IHNlZSAnZ2l0IGhlbHAgcHVsbCcgZm9yIHZhbGlkIHVybCBzeW50YXgiCittc2dzdHIgIuacquaMh+Wumui3r+W+ke+8jOWft+ihjCAnZ2l0IGhlbHAgcHVsbCcg5qqi6KaW5pyJ5pWI55qEIHVybCDoqp7ms5UiCisKKyM6IGNvbm5lY3QuYzoxMTIzCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNCIKK21zZ3N0ciAic3NoIOiuiumrlCAnc2ltcGxlJyDkuI3mlK/mj7QgLTQiCisKKyM6IGNvbm5lY3QuYzoxMTM1Cittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNiIKK21zZ3N0ciAic3NoIOiuiumrlCAnc2ltcGxlJyDkuI3mlK/mj7QgLTYiCisKKyM6IGNvbm5lY3QuYzoxMTUyCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIHBvcnQiCittc2dzdHIgInNzaCDororpq5QgJ3NpbXBsZScg5LiN5pSv5o+06Kit5a6a5Z+gIgorCisjOiBjb25uZWN0LmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBhdGhuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAi5bey6Zi75q2i5aWH5oCq55qE6Lev5b6R5ZCNICclcyciCisKKyM6IGNvbm5lY3QuYzoxMzExCittc2dpZCAidW5hYmxlIHRvIGZvcmsiCittc2dzdHIgIueEoeazlSBmb3JrIgorCisjOiBjb25uZWN0ZWQuYzo5OCBidWlsdGluL2ZzY2suYzoyMDggYnVpbHRpbi9wcnVuZS5jOjQzCittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IgorbXNnc3RyICLmraPlnKjmqqLmn6XpgKPpgJrmgKciCisKKyM6IGNvbm5lY3RlZC5jOjExMAorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgIuS4jeiDveWft+ihjCAnZ2l0IHJldi1saXN0JyIKKworIzogY29ubmVjdGVkLmM6MTMwCittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0IgorbXNnc3RyICLlr6vlhaUgcmV2LWxpc3Qg5aSx5pWXIgorCisjOiBjb25uZWN0ZWQuYzoxMzcKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbiIKK21zZ3N0ciAi6Zec6ZaJIHJldi1saXN0IOeahOaomea6lui8uOWFpeWkseaVlyIKKworIzogY29udmVydC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIgorbXNnc3RyICLpnZ7ms5XnmoQgY3JsZiDli5XkvZwgJWQiCisKKyM6IGNvbnZlcnQuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1JMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcyIKK21zZ3N0ciAiJXMg5Lit55qEIENSTEYg5bCH6KKrIExGIOWPluS7oyIKKworIzogY29udmVydC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyIlcyDkuK3nmoQgQ1JMRiDlsIfooqsgTEYg5Y+W5Luj44CCPFxuIgorIuWcqOW3peS9nOWNgOS4reipsuaqlOahiOS7jeS/neaMgeWOn+acieeahOaPm+ihjOespuiZn+OAgiIKKworIzogY29udmVydC5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIgorbXNnc3RyICLmqpTmoYggJXMg5Lit55qEIExGIOWwh+iiqyBDUkxGIOWPluS7oyIKKworIzogY29udmVydC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyIlcyDkuK3nmoQgTEYg5bCH6KKrIENSTEYg5Y+W5Luj44CCXG4iCisi5Zyo5bel5L2c5Y2A5Lit6Kmy5qqU5qGI5LuN5L+d5oyB5Y6f5pyJ55qE5o+b6KGM56ym6JmfIgorCisjOiBjb252ZXJ0LmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyBwcm9oaWJpdGVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAi5aaC5p6c5L2/55SoICUyJHMg57eo56K877yM56aB5q2i5ZyoICclMSRzJyDkuK3kvb/nlKggQk9NIgorCisjOiBjb252ZXJ0LmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lLipzIGFzICIKKyJ3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICLmqpTmoYggJyVzJyDljIXlkKvkvY3lhYPntYTpoIbluo/mqJnoqJjvvIhCT03vvInjgILoq4vkvb/nlKggVVRGLSUuKnMg5L2c54K65bel5L2c5Y2A57eo56K844CCIgorCisjOiBjb252ZXJ0LmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyByZXF1aXJlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIuWmguaenOe3qOeivOeCuiAlMiRz77yM6ZyA6KaB5ZyoICclMSRzJyDkuK3kvb/nlKggQk9NIgorCisjOiBjb252ZXJ0LmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGlzIG1pc3NpbmcgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSVzQkUgb3IgVVRGLSIKKyIlc0xFIChkZXBlbmRpbmcgb24gdGhlIGJ5dGUgb3JkZXIpIGFzIHdvcmtpbmctdHJlZS1lbmNvZGluZy4iCittc2dzdHIgIiIKKyLmqpTmoYggJyVzJyDnvLrlsJHkuIDlgIvkvY3lhYPntYTpoIbluo/mqJnoqJjvvIhCT03vvInjgILoq4vkvb/nlKggVVRGLSVzQkUgb3IgVVRGLSVzTEXvvIjlj5bmsbrmlrwiCisi5a2X56+A5bqP77yJ5L2c54K65bel5L2c5Y2A57eo56K844CCIgorCisjOiBjb252ZXJ0LmM6NDE5IGNvbnZlcnQuYzo0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGVuY29kZSAnJXMnIGZyb20gJXMgdG8gJXMiCittc2dzdHIgIueEoeazleWwjSAnJXMnIOmAsuihjOW+niAlcyDliLAgJXMg55qE57eo56K8IgorCisjOiBjb252ZXJ0LmM6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVuY29kaW5nICclcycgZnJvbSAlcyB0byAlcyBhbmQgYmFjayBpcyBub3QgdGhlIHNhbWUiCittc2dzdHIgIuWwhyclcycg55qE57eo56K85b6eICVzIOWIsCAlcyDkvobov7TovYnmj5vkuI3kuIDoh7QiCisKKyM6IGNvbnZlcnQuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgdG8gcnVuIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICLkuI3og70gZm9yayDku6Xln7fooYzlpJbpg6jpgY7mv77lmaggJyVzJyIKKworIzogY29udmVydC5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmVlZCB0aGUgaW5wdXQgdG8gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgIuS4jeiDveWwh+i8uOWFpeWCs+mBnue1puWklumDqOmBjua/vuWZqCAnJXMnIgorCisjOiBjb252ZXJ0LmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCAlZCIKK21zZ3N0ciAi5aSW6YOo6YGO5r++5ZmoICclcycg5aSx5pWX56K8ICVkIgorCisjOiBjb252ZXJ0LmM6NzMwIGNvbnZlcnQuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBmcm9tIGV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi5b6e5aSW6YOo6YGO5r++5ZmoICclcycg6K6A5Y+W5aSx5pWXIgorCisjOiBjb252ZXJ0LmM6NzM2IGNvbnZlcnQuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICLlpJbpg6jpgY7mv77lmaggJyVzJyDlpLHmlZciCisKKyM6IGNvbnZlcnQuYzo4MzkKK21zZ2lkICJ1bmV4cGVjdGVkIGZpbHRlciB0eXBlIgorbXNnc3RyICLmhI/lpJbnmoTpgY7mv77poZ7lnosiCisKKyM6IGNvbnZlcnQuYzo4NTAKK21zZ2lkICJwYXRoIG5hbWUgdG9vIGxvbmcgZm9yIGV4dGVybmFsIGZpbHRlciIKK21zZ3N0ciAi5aSW6YOo6YGO5r++5Zmo55qE6Lev5b6R5ZCN5aSq6ZW3IgorCisjOiBjb252ZXJ0LmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHRlcm5hbCBmaWx0ZXIgJyVzJyBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUgYWx0aG91Z2ggbm90IGFsbCBwYXRocyBoYXZlICIKKyJiZWVuIGZpbHRlcmVkIgorbXNnc3RyICLlpJbpg6jpgY7mv77lmaggJyVzJyDkuI3lho3lj6/nlKjvvIzkvYbkuKbpnZ7miYDmnInot6/lvpHpg73lt7LpgY7mv74iCisKKyM6IGNvbnZlcnQuYzoxMjIzCittc2dpZCAidHJ1ZS9mYWxzZSBhcmUgbm8gdmFsaWQgd29ya2luZy10cmVlLWVuY29kaW5ncyIKK21zZ3N0ciAidHJ1ZS9mYWxzZSDkuI3mmK/mnInmlYjnmoTlt6XkvZzljYDnt6jnorwiCisKKyM6IGNvbnZlcnQuYzoxNDExIGNvbnZlcnQuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIiVz77yaY2xlYW4g6YGO5r++5ZmoICclcycg5aSx5pWXIgorCisjOiBjb252ZXJ0LmM6MTQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogc211ZGdlIGZpbHRlciAlcyBmYWlsZWQiCittc2dzdHIgIiVz77yac211ZGdlIOmBjua/vuWZqCAlcyDlpLHmlZciCisKKyM6IGRhdGUuYzoxMzgKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICLlnKjlsIfkvoYiCisKKyM6IGRhdGUuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBzZWNvbmQgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IOenkumQmOWJjSIKKworIzogZGF0ZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbWludXRlcyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4g5YiG6ZCY5YmNIgorCisjOiBkYXRlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gaG91cnMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IOWwj+aZguWJjSIKKworIzogZGF0ZS5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gZGF5cyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4g5aSp5YmNIgorCisjOiBkYXRlLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gd2Vla3MgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IOWRqOWJjSIKKworIzogZGF0ZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IOWAi+aciOWJjSIKKworIzogZGF0ZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIiCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMiCittc2dzdHJbMF0gIiU8UFJJdU1BWD4g5bm0IgorCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVzICU8UFJJdU1BWD4g5YCL5pyI5YmNIgorCisjOiBkYXRlLmM6MTk3IGRhdGUuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4g5bm05YmNIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MjcyCittc2dpZCAiUHJvcGFnYXRpbmcgaXNsYW5kIG1hcmtzIgorbXNnc3RyICLmraPlnKjlgrPmkq3os4fmlpnls7bmqJnoqJgiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHRyZWUgb2JqZWN0ICVzIgorbXNnc3RyICLlo57nmoTmqLnni4Dnianku7YgJXMiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgaXNsYW5kIHJlZ2V4IGZvciAnJXMnOiAlcyIKK21zZ3N0ciAi5pyq6IO96LyJ5YWlICclcycg55qE6LOH5paZ5bO25q2j6KaP6KGo56S65byP77yaJXMiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaXNsYW5kIHJlZ2V4IGZyb20gY29uZmlnIGhhcyB0b28gbWFueSBjYXB0dXJlIGdyb3VwcyAobWF4PSVkKSIKK21zZ3N0ciAi5L6G6IeqIGNvbmZpZyDnmoTos4fmlpnls7bmraPopo/ooajnpLrlvI/mnInlpKrlpJrnmoTmjZXnjbLntYTvvIjmnIDlpJogJWQg5YCL77yJIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtlZCAlZCBpc2xhbmRzLCBkb25lLlxuIgorbXNnc3RyICLlt7LmqJnoqJggJWQg5YCL6LOH5paZ5bO277yM57WQ5p2f44CCXG4iCisKKyM6IGRpZmZjb3JlLW9yZGVyLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciCittc2dzdHIgIuiugOWPluaOkuW6j+aqlOahiCAnJXMnIOWkseaVlyIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTQzCittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIuato+WcqOmAsuihjOmdnueyvueiuueahOmHjeaWsOWRveWQjeWBtea4rCIKKworIzogZGlmZi1uby1pbmRleC5jOjIzOAorbXNnaWQgImdpdCBkaWZmIC0tbm8taW5kZXggWzxvcHRpb25zPl0gPHBhdGg+IDxwYXRoPiIKK21zZ3N0ciAiZ2l0IGRpZmYgLS1uby1pbmRleCBbPOmBuOmghT5dIDzot6/lvpE+IDzot6/lvpE+IgorCisjOiBkaWZmLW5vLWluZGV4LmM6MjYzCittc2dpZCAiIgorIk5vdCBhIGdpdCByZXBvc2l0b3J5LiBVc2UgLS1uby1pbmRleCB0byBjb21wYXJlIHR3byBwYXRocyBvdXRzaWRlIGEgd29ya2luZyAiCisidHJlZSIKK21zZ3N0ciAi5LiN5piv5LiA5YCLIGdpdCDniYjmnKzluqvjgILkvb/nlKggLS1uby1pbmRleCDmr5TovIPlt6XkvZzljYDkuYvlpJbnmoTlhanlgIvot6/lvpEiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogZGlmZi5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJXMnXG4iCittc2dzdHIgIiAg54Sh5rOV6Kej5p6QIGRpcnN0YXQg5oiq5q2i77yIY3V0LW9mZu+8ieeZvuWIhuavlCAnJXMnXG4iCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogZGlmZi5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIOacquefpeeahCBkaXJzdGF0IOWPg+aVuCAnJXMnXG4iCisKKyM6IGRpZmYuYzoyOTYKK21zZ2lkICIiCisiY29sb3IgbW92ZWQgc2V0dGluZyBtdXN0IGJlIG9uZSBvZiAnbm8nLCAnZGVmYXVsdCcsICdibG9ja3MnLCAnemVicmEnLCAiCisiJ2RpbW1lZC16ZWJyYScsICdwbGFpbiciCittc2dzdHIgIiIKKyLnp7vli5XnmoTpoY/oibLoqK3lrprlv4XpoIjmmK8gJ25vJ+OAgSdkZWZhdWx0J+OAgSdibG9ja3Mn44CBJ3plYnJhJ+OAgSdkaW1tZWRfemVicmEnIOaIliAiCisiJ3BsYWluJyIKKworIzogZGlmZi5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcycsIHBvc3NpYmxlIHZhbHVlcyBhcmUgJ2lnbm9yZS1zcGFjZS1jaGFuZ2UnLCAiCisiJ2lnbm9yZS1zcGFjZS1hdC1lb2wnLCAnaWdub3JlLWFsbC1zcGFjZScsICdhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UnIgorbXNnc3RyICIiCisi5pyq55+l55qEIGNvbG9yLW1vdmVkLXdzIOaooeW8jyAnJXMn77yM5Y+v6IO955qE5Y+W5YC85pyJICdpZ25vcmUtc3BhY2UtY2hhbmdlJ+OAgSdpZ25vcmUtIgorInNwYWNlLWF0LWVvbCfjgIEnaWdub3JlLWFsbC1zcGFjZSfjgIEnYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlJyIKKworIzogZGlmZi5jOjMzMgorbXNnaWQgIiIKKyJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyICIKKyJ3aGl0ZXNwYWNlIG1vZGVzIgorbXNnc3RyICJjb2xvci1tb3ZlZC13c++8mmFsbG93LWluZGVudGF0aW9uLWNoYW5nZSDkuI3og73oiIflhbblroPnqbrnmb3lrZflhYPmqKHlvI/lhbHnlKgiCisKKyM6IGRpZmYuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIuioreWumuiuiuaVuCAnZGlmZi5zdWJtb2R1bGUnIOacquefpeeahOWPluWAvO+8miclcyciCisKKyM6IGRpZmYuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyLnmbznj77oqK3lrprorormlbggJ2RpZmYuZGlyc3RhdCcg5Lit55qE6Yyv6Kqk77yaXG4iCisiJXMiCisKKyM6IGRpZmYuYzo0MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGRpZmYgZGllZCwgc3RvcHBpbmcgYXQgJXMiCittc2dzdHIgIuWklumDqCBkaWZmIOmboumWi++8jOWBnOatouWcqCAlcyIKKworIzogZGlmZi5jOjQ1NDcKK21zZ2lkICItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayBhbmQgLXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHnjgIEtLW5hbWUtc3RhdHVz44CBLS1jaGVjayDlkowgLXMg5piv5LqS5pal55qEIgorCisjOiBkaWZmLmM6NDU1MAorbXNnaWQgIi1HLCAtUyBhbmQgLS1maW5kLW9iamVjdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItR+OAgS1TIOWSjCAtLWZpbmQtb2JqZWN0IOaYr+S6kuaWpeeahCIKKworIzogZGlmZi5jOjQ2MjgKK21zZ2lkICItLWZvbGxvdyByZXF1aXJlcyBleGFjdGx5IG9uZSBwYXRoc3BlYyIKK21zZ3N0ciAiLS1mb2xsb3cg5piO56K66KaB5rGC5Y+q6Lef5LiA5YCL6Lev5b6R6KaP5qC8IgorCisjOiBkaWZmLmM6NDY3NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tc3RhdCB2YWx1ZTogJXMiCittc2dzdHIgIueEoeaViOeahCAtLXN0YXQg5YC877yaJXMiCisKKyM6IGRpZmYuYzo0NjgxIGRpZmYuYzo0Njg2IGRpZmYuYzo0NjkxIGRpZmYuYzo0Njk2IGRpZmYuYzo1MjA5CisjOiBwYXJzZS1vcHRpb25zLmM6MTk3IHBhcnNlLW9wdGlvbnMuYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiJXMg5pyf5pyb5LiA5YCL5pW45a2X5YC8IgorCisjOiBkaWZmLmM6NDcxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgorbXNnc3RyICIiCisi54Sh5rOV6Kej5p6QIC0tZGlyc3RhdC8tWCDpgbjpoIXnmoTlj4PmlbjvvJpcbiIKKyIlcyIKKworIzogZGlmZi5jOjQ3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjaGFuZ2UgY2xhc3MgJyVjJyBpbiAtLWRpZmYtZmlsdGVyPSVzIgorbXNnc3RyICItLWRpZmYtZmlsdGVyPSUyJHMg5Lit5pyq55+l55qE6K6K5pu06aGeICclMSRjJyIKKworIzogZGlmZi5jOjQ4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBhZnRlciB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIKK21zZ3N0ciAid3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMg5LmL5b6M5pyq55+l55qE5YC8IgorCisjOiBkaWZmLmM6NDgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICLkuI3og73op6PmnpAgJyVzJyIKKworIzogZGlmZi5jOjQ4ODYgZGlmZi5jOjQ4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyA8bj4vPG0+IGZvcm0iCittc2dzdHIgIiVzIOacn+acmyA8bj4vPG0+IOagvOW8jyIKKworIzogZGlmZi5jOjQ5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIGNoYXJhY3RlciwgZ290ICclcyciCittc2dzdHIgIiVzIOacn+acm+S4gOWAi+Wtl+WFg++8jOW+l+WIsCAnJXMnIgorCisjOiBkaWZmLmM6NDkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS1jb2xvci1tb3ZlZCBhcmd1bWVudDogJXMiCittc2dzdHIgIuWjnueahCAtLWNvbG9yLW1vdmVkIOWPg+aVuO+8miVzIgorCisjOiBkaWZmLmM6NDk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgJyVzJyBpbiAtLWNvbG9yLW1vdmVkLXdzIgorbXNnc3RyICItLWNvbG9yLW1vdmVkLXdzIOS4reeahOeEoeaViOaooeW8jyAnJXMnICIKKworIzogZGlmZi5jOjQ5ODQKK21zZ2lkICIiCisib3B0aW9uIGRpZmYtYWxnb3JpdGhtIGFjY2VwdHMgXCJteWVyc1wiLCBcIm1pbmltYWxcIiwgXCJwYXRpZW5jZVwiIGFuZCAiCisiXCJoaXN0b2dyYW1cIiIKK21zZ3N0ciAiIgorImRpZmYtYWxnb3JpdGhtIOmBuOmgheaciSBcIm15ZXJzXCLjgIFcIm1pbmltYWxcIuOAgVwicGF0aWVuY2VcIiDlkowgXCJoaXN0b2dyYW1cIiIKKworIzogZGlmZi5jOjUwMjAgZGlmZi5jOjUwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCB0byAlcyIKK21zZ3N0ciAiJXMg55qE5Y+D5pW454Sh5pWIIgorCisjOiBkaWZmLmM6NTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIKK21zZ3N0ciAi54Sh5rOV6Kej5p6QIC0tc3VibW9kdWxlIOmBuOmgheeahOWPg+aVuO+8miclcyciCisKKyM6IGRpZmYuYzo1MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLXdvcmQtZGlmZiBhcmd1bWVudDogJXMiCittc2dzdHIgIuWjnueahCAtLXdvcmQtZGlmZiDlj4PmlbjvvJolcyIKKworIzogZGlmZi5jOjUyNTcKK21zZ2lkICJEaWZmIG91dHB1dCBmb3JtYXQgb3B0aW9ucyIKK21zZ3N0ciAi5beu55Ww6Ly45Ye65qC85byP5YyW6YG46aCFIgorCisjOiBkaWZmLmM6NTI1OSBkaWZmLmM6NTI2NQorbXNnaWQgImdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICLnlJ/miJDkv67oo5zmqpQiCisKKyM6IGRpZmYuYzo1MjYyIGJ1aWx0aW4vbG9nLmM6MTczCittc2dpZCAic3VwcHJlc3MgZGlmZiBvdXRwdXQiCittc2dzdHIgIuS4jemhr+ekuuW3rueVsOi8uOWHuiIKKworIzogZGlmZi5jOjUyNjcgZGlmZi5jOjUzODEgZGlmZi5jOjUzODgKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZGlmZi5jOjUyNjggZGlmZi5jOjUyNzEKK21zZ2lkICJnZW5lcmF0ZSBkaWZmcyB3aXRoIDxuPiBsaW5lcyBjb250ZXh0IgorbXNnc3RyICLnlJ/miJDlkKsgPG4+IOihjOS4iuS4i+aWh+eahOW3rueVsCIKKworIzogZGlmZi5jOjUyNzMKK21zZ2lkICJnZW5lcmF0ZSB0aGUgZGlmZiBpbiByYXcgZm9ybWF0IgorbXNnc3RyICLnlJ/miJDljp/lp4vmoLzlvI/nmoTlt67nlbAiCisKKyM6IGRpZmYuYzo1Mjc2Cittc2dpZCAic3lub255bSBmb3IgJy1wIC0tcmF3JyIKK21zZ3N0ciAi5ZKMICctcCAtLXJhdycg5ZCM576pIgorCisjOiBkaWZmLmM6NTI4MAorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXN0YXQnIgorbXNnc3RyICLlkowgJy1wIC0tc3RhdCcg5ZCM576pIgorCisjOiBkaWZmLmM6NTI4NAorbXNnaWQgIm1hY2hpbmUgZnJpZW5kbHkgLS1zdGF0IgorbXNnc3RyICLmqZ/lmajlj4vlpb3nmoQgLS1zdGF0IgorCisjOiBkaWZmLmM6NTI4NworbXNnaWQgIm91dHB1dCBvbmx5IHRoZSBsYXN0IGxpbmUgb2YgLS1zdGF0IgorbXNnc3RyICLlj6rovLjlh7ogLS1zdGF0IOeahOacgOW+jOS4gOihjCIKKworIzogZGlmZi5jOjUyODkgZGlmZi5jOjUyOTcKK21zZ2lkICI8cGFyYW0xLHBhcmFtMj4uLi4iCittc2dzdHIgIjzlj4PmlbgxLOWPg+aVuDI+Li4uIgorCisjOiBkaWZmLmM6NTI5MAorbXNnaWQgIiIKKyJvdXRwdXQgdGhlIGRpc3RyaWJ1dGlvbiBvZiByZWxhdGl2ZSBhbW91bnQgb2YgY2hhbmdlcyBmb3IgZWFjaCBzdWItZGlyZWN0b3J5IgorbXNnc3RyICLovLjlh7rmr4/lgIvlrZDnm67pjITnm7jlsI3orormm7TnmoTliIbluIMiCisKKyM6IGRpZmYuYzo1Mjk0Cittc2dpZCAic3lub255bSBmb3IgLS1kaXJzdGF0PWN1bXVsYXRpdmUiCittc2dzdHIgIuWSjCAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSDlkIznvqkiCisKKyM6IGRpZmYuYzo1Mjk4Cittc2dpZCAic3lub255bSBmb3IgLS1kaXJzdGF0PWZpbGVzLHBhcmFtMSxwYXJhbTIuLi4iCittc2dzdHIgIuaYryAtLWRpcnN0YXQ9ZmlsZXMscGFyYW0xLHBhcmFtMi4uLiDnmoTlkIznvqnoqZ4iCisKKyM6IGRpZmYuYzo1MzAyCittc2dpZCAid2FybiBpZiBjaGFuZ2VzIGludHJvZHVjZSBjb25mbGljdCBtYXJrZXJzIG9yIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICLlpoLmnpzorormm7TkuK3lvJXlhaXooZ3nqoHlrprnlYznrKbmiJbnqbrnmb3pjK/oqqTvvIzntablh7rorablkYoiCisKKyM6IGRpZmYuYzo1MzA1Cittc2dpZCAiY29uZGVuc2VkIHN1bW1hcnkgc3VjaCBhcyBjcmVhdGlvbnMsIHJlbmFtZXMgYW5kIG1vZGUgY2hhbmdlcyIKK21zZ3N0ciAi57K+57Ch5pGY6KaB77yM5L6L5aaC5bu656uL44CB6YeN5paw5ZG95ZCN5ZKM5qih5byP6K6K5pu0IgorCisjOiBkaWZmLmM6NTMwOAorbXNnaWQgInNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICLlj6rpoa/npLrorormm7TmqpTmoYjnmoTmqpTmoYjlkI0iCisKKyM6IGRpZmYuYzo1MzExCittc2dpZCAic2hvdyBvbmx5IG5hbWVzIGFuZCBzdGF0dXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAi5Y+q6aGv56S66K6K5pu05qqU5qGI55qE5qqU5qGI5ZCN5ZKM54uA5oWLIgorCisjOiBkaWZmLmM6NTMxMworbXNnaWQgIjx3aWR0aD5bLDxuYW1lLXdpZHRoPlssPGNvdW50Pl1dIgorbXNnc3RyICI85a+s5bqmPlssPOaqlOahiOWQjeWvrOW6pj5bLDzmrKHmlbg+XV0iCisKKyM6IGRpZmYuYzo1MzE0Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQiCittc2dzdHIgIueUn+aIkOW3rueVsOe1seioiO+8iGRpZmZzdGF077yJIgorCisjOiBkaWZmLmM6NTMxNiBkaWZmLmM6NTMxOSBkaWZmLmM6NTMyMgorbXNnaWQgIjx3aWR0aD4iCittc2dzdHIgIjzlr6zluqY+IgorCisjOiBkaWZmLmM6NTMxNworbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiB3aWR0aCIKK21zZ3N0ciAi5L2/55So5o+Q5L6b55qE6ZW35bqm55Sf5oiQ5beu55Ww57Wx6KiIIgorCisjOiBkaWZmLmM6NTMyMAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiBuYW1lIHdpZHRoIgorbXNnc3RyICLkvb/nlKjmj5DkvpvnmoTmqpTmoYjlkI3plbfluqbnlJ/miJDlt67nlbDntbHoqIgiCisKKyM6IGRpZmYuYzo1MzIzCittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIGdyYXBoIHdpZHRoIgorbXNnc3RyICLkvb/nlKjmj5DkvpvnmoTlnJblvaLplbfluqbnlJ/miJDlt67nlbDntbHoqIgiCisKKyM6IGRpZmYuYzo1MzI1Cittc2dpZCAiPGNvdW50PiIKK21zZ3N0ciAiPOasoeaVuD4iCisKKyM6IGRpZmYuYzo1MzI2Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBsaW1pdGVkIGxpbmVzIgorbXNnc3RyICLnlJ/miJDmnInpmZDooYzmlbjnmoTlt67nlbDntbHoqIgiCisKKyM6IGRpZmYuYzo1MzI5Cittc2dpZCAiZ2VuZXJhdGUgY29tcGFjdCBzdW1tYXJ5IGluIGRpZmZzdGF0IgorbXNnc3RyICLnlJ/miJDlt67nlbDntbHoqIjnmoTnsKHmvZTmkZjopoEiCisKKyM6IGRpZmYuYzo1MzMyCittc2dpZCAib3V0cHV0IGEgYmluYXJ5IGRpZmYgdGhhdCBjYW4gYmUgYXBwbGllZCIKK21zZ3N0ciAi6Ly45Ye65LiA5YCL5Y+v5Lul5oeJ55So55qE5LqM6YCy5L2N5beu55WwIgorCisjOiBkaWZmLmM6NTMzNQorbXNnaWQgInNob3cgZnVsbCBwcmUtIGFuZCBwb3N0LWltYWdlIG9iamVjdCBuYW1lcyBvbiB0aGUgXCJpbmRleFwiIGxpbmVzIgorbXNnc3RyICLlnKggXCJpbmRleFwiIOihjOmhr+ekuuWujOaVtOeahOWJjeW+jOeJqeS7tuWQjeeosSIKKworIzogZGlmZi5jOjUzMzcKK21zZ2lkICJzaG93IGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAi6aGv56S65bi26aGP6Imy55qE5beu55WwIgorCisjOiBkaWZmLmM6NTMzOAorbXNnaWQgIjxraW5kPiIKK21zZ3N0ciAiPOmhnuWeiz4iCisKKyM6IGRpZmYuYzo1MzM5Cittc2dpZCAiIgorImhpZ2hsaWdodCB3aGl0ZXNwYWNlIGVycm9ycyBpbiB0aGUgJ2NvbnRleHQnLCAnb2xkJyBvciAnbmV3JyBsaW5lcyBpbiB0aGUgIgorImRpZmYiCittc2dzdHIgIuWwjeaWvOW3rueVsOS4reeahOS4iuS4i+aWh+OAgeiIiueahOWSjOaWsOeahOihjO+8jOWKoOS6rumhr+ekuumMr+iqpOeahOepuueZveWtl+WFgyIKKworIzogZGlmZi5jOjUzNDIKK21zZ2lkICIiCisiZG8gbm90IG11bmdlIHBhdGhuYW1lcyBhbmQgdXNlIE5VTHMgYXMgb3V0cHV0IGZpZWxkIHRlcm1pbmF0b3JzIGluIC0tcmF3IG9yICIKKyItLW51bXN0YXQiCittc2dzdHIgIiIKKyLlnKggLS1yYXcg5oiW6ICFIC0tbnVtc3RhdCDkuK3vvIzkuI3lsI3ot6/lvpHlrZflhYPovYnmqpTkuKbkvb/nlKggTlVMIOWtl+WFg+WBmueCuui8uOWHuuashOS9jeeahOWIhumalCIKKyLnrKYiCisKKyM6IGRpZmYuYzo1MzQ1IGRpZmYuYzo1MzQ4IGRpZmYuYzo1MzUxIGRpZmYuYzo1NDU3Cittc2dpZCAiPHByZWZpeD4iCittc2dzdHIgIjzliY3ntrQ+IgorCisjOiBkaWZmLmM6NTM0NgorbXNnaWQgInNob3cgdGhlIGdpdmVuIHNvdXJjZSBwcmVmaXggaW5zdGVhZCBvZiBcImEvXCIiCittc2dzdHIgIumhr+ekuuaPkOS+m+eahOa6kOWJjee2tOWPluS7oyBcImEvXCIiCisKKyM6IGRpZmYuYzo1MzQ5Cittc2dpZCAic2hvdyB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gcHJlZml4IGluc3RlYWQgb2YgXCJiL1wiIgorbXNnc3RyICLpoa/npLrmj5DkvpvnmoTnm67mqJnliY3ntrTlj5bku6MgXCJiL1wiIgorCisjOiBkaWZmLmM6NTM1MgorbXNnaWQgInByZXBlbmQgYW4gYWRkaXRpb25hbCBwcmVmaXggdG8gZXZlcnkgbGluZSBvZiBvdXRwdXQiCittc2dzdHIgIui8uOWHuueahOavj+S4gOihjOmZhOWKoOWJjee2tCIKKworIzogZGlmZi5jOjUzNTUKK21zZ2lkICJkbyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeCIKK21zZ3N0ciAi5LiN6aGv56S65Lu75L2V5rqQ5ZKM55uu5qiZ5YmN57a0IgorCisjOiBkaWZmLmM6NTM1OAorbXNnaWQgInNob3cgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbGluZXMiCittc2dzdHIgIumhr+ekuuaMh+WumuihjOaVuOeahOW3rueVsOWNgOWhiumWk+eahOS4iuS4i+aWhyIKKworIzogZGlmZi5jOjUzNjIgZGlmZi5jOjUzNjcgZGlmZi5jOjUzNzIKK21zZ2lkICI8Y2hhcj4iCittc2dzdHIgIjzlrZflhYM+IgorCisjOiBkaWZmLmM6NTM2MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIG5ldyBsaW5lIGluc3RlYWQgb2YgJysnIgorbXNnc3RyICLmjIflrprkuIDlgIvlrZflhYPlj5bku6MgJysnIOS+huihqOekuuaWsOeahOS4gOihjCIKKworIzogZGlmZi5jOjUzNjgKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYW4gb2xkIGxpbmUgaW5zdGVhZCBvZiAnLSciCittc2dzdHIgIuaMh+WumuS4gOWAi+Wtl+WFg+WPluS7oyAnLScg5L6G6KGo56S66IiK55qE5LiA6KGMIgorCisjOiBkaWZmLmM6NTM3MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIGNvbnRleHQgaW5zdGVhZCBvZiAnICciCittc2dzdHIgIuaMh+WumuS4gOWAi+Wtl+WFg+WPluS7oyAnICcg5L6G6KGo56S65LiA6KGM5LiK5LiL5paHIgorCisjOiBkaWZmLmM6NTM3NgorbXNnaWQgIkRpZmYgcmVuYW1lIG9wdGlvbnMiCittc2dzdHIgIuW3rueVsOmHjeaWsOWRveWQjemBuOmghSIKKworIzogZGlmZi5jOjUzNzcKK21zZ2lkICI8bj5bLzxtPl0iCittc2dzdHIgIjxuPlsvPG0+XSIKKworIzogZGlmZi5jOjUzNzgKK21zZ2lkICJicmVhayBjb21wbGV0ZSByZXdyaXRlIGNoYW5nZXMgaW50byBwYWlycyBvZiBkZWxldGUgYW5kIGNyZWF0ZSIKK21zZ3N0ciAi5bCH5a6M5YWo6YeN5a+r55qE6K6K5pu05omT56C054K65oiQ5bCN55qE5Yiq6Zmk5ZKM5bu656uLIgorCisjOiBkaWZmLmM6NTM4MgorbXNnaWQgImRldGVjdCByZW5hbWVzIgorbXNnc3RyICLmqqLmuKzph43mlrDlkb3lkI0iCisKKyM6IGRpZmYuYzo1Mzg2Cittc2dpZCAib21pdCB0aGUgcHJlaW1hZ2UgZm9yIGRlbGV0ZXMiCittc2dzdHIgIuecgeeVpeWIqumZpOWLleS9nOeahOW3rueVsOi8uOWHuiIKKworIzogZGlmZi5jOjUzODkKK21zZ2lkICJkZXRlY3QgY29waWVzIgorbXNnc3RyICLmqqLmuKzopIfoo70iCisKKyM6IGRpZmYuYzo1MzkzCittc2dpZCAidXNlIHVubW9kaWZpZWQgZmlsZXMgYXMgc291cmNlIHRvIGZpbmQgY29waWVzIgorbXNnc3RyICLkvb/nlKjmnKrkv67mlLnnmoTmqpTmoYjlgZrngrrnmbznj77opIfoo73nmoTmupAiCisKKyM6IGRpZmYuYzo1Mzk1Cittc2dpZCAiZGlzYWJsZSByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICLnpoHnlKjph43mlrDlkb3lkI3lgbXmuKwiCisKKyM6IGRpZmYuYzo1Mzk4Cittc2dpZCAidXNlIGVtcHR5IGJsb2JzIGFzIHJlbmFtZSBzb3VyY2UiCittc2dzdHIgIuS9v+eUqOepuueahOizh+aWmeeJqeS7tuWBmueCuumHjeaWsOWRveWQjeeahOa6kCIKKworIzogZGlmZi5jOjU0MDAKK21zZ2lkICJjb250aW51ZSBsaXN0aW5nIHRoZSBoaXN0b3J5IG9mIGEgZmlsZSBiZXlvbmQgcmVuYW1lcyIKK21zZ3N0ciAi57m857qM5YiX5Ye65qqU5qGI6YeN5paw5ZG95ZCN5Lul5aSW55qE5q235Y+y6KiY6YyEIgorCisjOiBkaWZmLmM6NTQwMworbXNnaWQgIiIKKyJwcmV2ZW50IHJlbmFtZS9jb3B5IGRldGVjdGlvbiBpZiB0aGUgbnVtYmVyIG9mIHJlbmFtZS9jb3B5IHRhcmdldHMgZXhjZWVkcyAiCisiZ2l2ZW4gbGltaXQiCittc2dzdHIgIuWmguaenOmHjeaWsOWRveWQjS/opIfoo73nm67mqJnotoXpgY7mj5DkvpvnmoTpmZDliLbvvIznpoHmraLph43mlrDlkb3lkI0v6KSH6KO95qqi5risIgorCisjOiBkaWZmLmM6NTQwNQorbXNnaWQgIkRpZmYgYWxnb3JpdGhtIG9wdGlvbnMiCittc2dzdHIgIuW3rueVsOa8lOeul+azlemBuOmghSIKKworIzogZGlmZi5jOjU0MDcKK21zZ2lkICJwcm9kdWNlIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBkaWZmIgorbXNnc3RyICLnlJ/miJDlhJjlj6/og73lsI/nmoTlt67nlbAiCisKKyM6IGRpZmYuYzo1NDEwCittc2dpZCAiaWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgbGluZXMiCittc2dzdHIgIuihjOavlOi8g+aZguW/veeVpeepuueZveWtl+WFgyIKKworIzogZGlmZi5jOjU0MTMKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiBhbW91bnQgb2Ygd2hpdGVzcGFjZSIKK21zZ3N0ciAi5b+955Wl56m655m95a2X5YWD55qE6K6K5pu0IgorCisjOiBkaWZmLmM6NTQxNgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgYXQgRU9MIgorbXNnc3RyICLlv73nlaXooYzlsL7nmoTnqbrnmb3lrZflhYPorormm7QiCisKKyM6IGRpZmYuYzo1NDE5Cittc2dpZCAiaWdub3JlIGNhcnJpZXItcmV0dXJuIGF0IHRoZSBlbmQgb2YgbGluZSIKK21zZ3N0ciAi5b+955Wl6KGM5bC+55qERW50ZXLnrKbvvIhDUu+8iSIKKworIzogZGlmZi5jOjU0MjIKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyB3aG9zZSBsaW5lcyBhcmUgYWxsIGJsYW5rIgorbXNnc3RyICLlv73nlaXmlbTooYzpg73mmK/nqbrnmb3nmoTorormm7QiCisKKyM6IGRpZmYuYzo1NDI1Cittc2dpZCAiaGV1cmlzdGljIHRvIHNoaWZ0IGRpZmYgaHVuayBib3VuZGFyaWVzIGZvciBlYXN5IHJlYWRpbmciCittc2dzdHIgIuWVn+eZvOW8j+i9ieaPm+W3rueVsOmCiueVjOS7peS+v+mWseiugCIKKworIzogZGlmZi5jOjU0MjgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcInBhdGllbmNlIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgIuS9v+eUqCBcInBhdGllbmNlIGRpZmZcIiDmvJTnrpfms5XnlJ/miJDlt67nlbAiCisKKyM6IGRpZmYuYzo1NDMyCittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJoaXN0b2dyYW0gZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAi5L2/55SoIFwiaGlzdG9ncmFtIGRpZmZcIiDmvJTnrpfms5XnlJ/miJDlt67nlbAiCisKKyM6IGRpZmYuYzo1NDM0Cittc2dpZCAiPGFsZ29yaXRobT4iCittc2dzdHIgIjzmvJTnrpfms5U+IgorCisjOiBkaWZmLmM6NTQzNQorbXNnaWQgImNob29zZSBhIGRpZmYgYWxnb3JpdGhtIgorbXNnc3RyICLpgbjmk4fkuIDlgIvlt67nlbDmvJTnrpfms5UiCisKKyM6IGRpZmYuYzo1NDM3Cittc2dpZCAiPHRleHQ+IgorbXNnc3RyICI85paH5a2XPiIKKworIzogZGlmZi5jOjU0MzgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImFuY2hvcmVkIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgIuS9v+eUqCBcImFuY2hvcmVkIGRpZmZcIiDmvJTnrpfms5XnlJ/miJDlt67nlbAiCisKKyM6IGRpZmYuYzo1NDQwIGRpZmYuYzo1NDQ5IGRpZmYuYzo1NDUyCittc2dpZCAiPG1vZGU+IgorbXNnc3RyICI85qih5byPPiIKKworIzogZGlmZi5jOjU0NDEKK21zZ2lkICJzaG93IHdvcmQgZGlmZiwgdXNpbmcgPG1vZGU+IHRvIGRlbGltaXQgY2hhbmdlZCB3b3JkcyIKK21zZ3N0ciAi6aGv56S65Zau6Kme5beu55Ww77yM5L2/55SoIDzmqKHlvI8+IOWIhumalOiuiuabtOeahOWWruipniIKKworIzogZGlmZi5jOjU0NDMgZGlmZi5jOjU0NDYgZGlmZi5jOjU0OTEKK21zZ2lkICI8cmVnZXg+IgorbXNnc3RyICI85q2j5YmHPiIKKworIzogZGlmZi5jOjU0NDQKK21zZ2lkICJ1c2UgPHJlZ2V4PiB0byBkZWNpZGUgd2hhdCBhIHdvcmQgaXMiCittc2dzdHIgIuS9v+eUqCA85q2j6KaP6KGo56S65byPPiDnorrlrprkvZXngrrkuIDlgIvoqZ4iCisKKyM6IGRpZmYuYzo1NDQ3Cittc2dpZCAiZXF1aXZhbGVudCB0byAtLXdvcmQtZGlmZj1jb2xvciAtLXdvcmQtZGlmZi1yZWdleD08cmVnZXg+IgorbXNnc3RyICLnm7jnlbbmlrwgLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9POato+WJhz4iCisKKyM6IGRpZmYuYzo1NDUwCittc2dpZCAibW92ZWQgbGluZXMgb2YgY29kZSBhcmUgY29sb3JlZCBkaWZmZXJlbnRseSIKK21zZ3N0ciAi56e75YuV55qE56iL5byP56K86KGM55So5LiN5ZCM5pa55byP6JGX6ImyIgorCisjOiBkaWZmLmM6NTQ1MworbXNnaWQgImhvdyB3aGl0ZSBzcGFjZXMgYXJlIGlnbm9yZWQgaW4gLS1jb2xvci1tb3ZlZCIKK21zZ3N0ciAi5ZyoIC0tY29sb3ItbW92ZWQg5LiL5aaC5L2V5b+955Wl56m655m95a2X5YWDIgorCisjOiBkaWZmLmM6NTQ1NgorbXNnaWQgIk90aGVyIGRpZmYgb3B0aW9ucyIKK21zZ3N0ciAi5YW25a6D5beu55Ww6YG46aCFIgorCisjOiBkaWZmLmM6NTQ1OAorbXNnaWQgIndoZW4gcnVuIGZyb20gc3ViZGlyLCBleGNsdWRlIGNoYW5nZXMgb3V0c2lkZSBhbmQgc2hvdyByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAi55W25b6e5a2Q55uu6YyE5Z+36KGM77yM5o6S6Zmk55uu6YyE5LmL5aSW55qE6K6K5pu05Lim6aGv56S655u45bCN6Lev5b6RIgorCisjOiBkaWZmLmM6NTQ2MgorbXNnaWQgInRyZWF0IGFsbCBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICLmiormiYDmnInmqpTmoYjnlbblgZrmloflrZfomZXnkIYiCisKKyM6IGRpZmYuYzo1NDY0Cittc2dpZCAic3dhcCB0d28gaW5wdXRzLCByZXZlcnNlIHRoZSBkaWZmIgorbXNnc3RyICLkuqTmj5vlhanlgIvovLjlhaXvvIzlj43ovYnlt67nlbAiCisKKyM6IGRpZmYuYzo1NDY2Cittc2dpZCAiZXhpdCB3aXRoIDEgaWYgdGhlcmUgd2VyZSBkaWZmZXJlbmNlcywgMCBvdGhlcndpc2UiCittc2dzdHIgIuacieW3rueVsOaZgumboumWi+eivOeCuiAx77yM5ZCm5YmH54K6IDAiCisKKyM6IGRpZmYuYzo1NDY4Cittc2dpZCAiZGlzYWJsZSBhbGwgb3V0cHV0IG9mIHRoZSBwcm9ncmFtIgorbXNnc3RyICLnpoHnlKjmnKznqIvlvI/nmoTmiYDmnInovLjlh7oiCisKKyM6IGRpZmYuYzo1NDcwCittc2dpZCAiYWxsb3cgYW4gZXh0ZXJuYWwgZGlmZiBoZWxwZXIgdG8gYmUgZXhlY3V0ZWQiCittc2dzdHIgIuWFgeioseWft+ihjOS4gOWAi+WklumDqOeahOW3rueVsOWKqeaJiyIKKworIzogZGlmZi5jOjU0NzIKK21zZ2lkICJydW4gZXh0ZXJuYWwgdGV4dCBjb252ZXJzaW9uIGZpbHRlcnMgd2hlbiBjb21wYXJpbmcgYmluYXJ5IGZpbGVzIgorbXNnc3RyICLnlbbmr5TovIPkuozpgLLkvY3mqpTmoYjmmYLvvIzln7fooYzlpJbpg6jnmoTmloflrZfovYnmj5vpgY7mv77lmagiCisKKyM6IGRpZmYuYzo1NDc0Cittc2dpZCAiPHdoZW4+IgorbXNnc3RyICI85L2V5pmCPiIKKworIzogZGlmZi5jOjU0NzUKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzIGluIHRoZSBkaWZmIGdlbmVyYXRpb24iCittc2dzdHIgIuWcqOeUn+aIkOW3rueVsOaZgu+8jOW/veeVpeWtkOaooee1hOeahOabtOaUuSIKKworIzogZGlmZi5jOjU0NzgKK21zZ2lkICI8Zm9ybWF0PiIKK21zZ3N0ciAiPOagvOW8jz4iCisKKyM6IGRpZmYuYzo1NDc5Cittc2dpZCAic3BlY2lmeSBob3cgZGlmZmVyZW5jZXMgaW4gc3VibW9kdWxlcyBhcmUgc2hvd24iCittc2dzdHIgIuaMh+WumuWtkOaooee1hOeahOW3rueVsOWmguS9lemhr+ekuiIKKworIzogZGlmZi5jOjU0ODMKK21zZ2lkICJoaWRlICdnaXQgYWRkIC1OJyBlbnRyaWVzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLpmrHol4/ntKLlvJXkuK0gJ2dpdCBhZGQgLU4nIOaineebriIKKworIzogZGlmZi5jOjU0ODYKK21zZ2lkICJ0cmVhdCAnZ2l0IGFkZCAtTicgZW50cmllcyBhcyByZWFsIGluIHRoZSBpbmRleCIKK21zZ3N0ciAi5bCH57Si5byV5LitICdnaXQgYWRkIC1OJyDmop3nm67nlbblgZrnnJ/lr6bnmoQiCisKKyM6IGRpZmYuYzo1NDg4Cittc2dpZCAiPHN0cmluZz4iCittc2dzdHIgIjzlrZfkuLI+IgorCisjOiBkaWZmLmM6NTQ4OQorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInN0cmluZyIKK21zZ3N0ciAi5bCL5om+5pS56K6K5LqG5oyH5a6a5a2X5Liy5Ye654++5qyh5pW455qE5beu55WwIgorCisjOiBkaWZmLmM6NTQ5MgorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInJlZ2V4IgorbXNnc3RyICLlsIvmib7mlLnorormjIflrprmraPliYfnrKblkIjlh7rnj77mrKHmlbjnmoTlt67nlbAiCisKKyM6IGRpZmYuYzo1NDk1Cittc2dpZCAic2hvdyBhbGwgY2hhbmdlcyBpbiB0aGUgY2hhbmdlc2V0IHdpdGggLVMgb3IgLUciCittc2dzdHIgIumhr+ekuuS9v+eUqCAtUyDmiJYgLUcg55qE6K6K5pu06ZuG55qE5omA5pyJ6K6K5pu0IgorCisjOiBkaWZmLmM6NTQ5OAorbXNnaWQgInRyZWF0IDxzdHJpbmc+IGluIC1TIGFzIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAi5bCHIC1TIOeahCA8c3RyaW5nPiDnlbblgZrmk7TlsZXnmoQgUE9TSVgg5q2j6KaP6KGo56S65byPIgorCisjOiBkaWZmLmM6NTUwMQorbXNnaWQgImNvbnRyb2wgdGhlIG9yZGVyIGluIHdoaWNoIGZpbGVzIGFwcGVhciBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLmjqfliLbovLjlh7rkuK3nmoTmqpTmoYjpoa/npLrpoIbluo8iCisKKyM6IGRpZmYuYzo1NTAyCittc2dpZCAiPG9iamVjdC1pZD4iCittc2dzdHIgIjznianku7YgSUQ+IgorCisjOiBkaWZmLmM6NTUwMworbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorIm9iamVjdCIKK21zZ3N0ciAi5bCL5om+5pS56K6K5oyH5a6a54mp5Lu25Ye654++5qyh5pW455qE5beu55WwIgorCisjOiBkaWZmLmM6NTUwNQorbXNnaWQgIlsoQXxDfER8TXxSfFR8VXxYfEIpLi4uWypdXSIKK21zZ3N0ciAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorCisjOiBkaWZmLmM6NTUwNgorbXNnaWQgInNlbGVjdCBmaWxlcyBieSBkaWZmIHR5cGUiCittc2dzdHIgIumAj+mBjuW3rueVsOmhnuWei+mBuOaTh+aqlOahiCIKKworIzogZGlmZi5jOjU1MDgKK21zZ2lkICI8ZmlsZT4iCittc2dzdHIgIjzmqpTmoYg+IgorCisjOiBkaWZmLmM6NTUwOQorbXNnaWQgIk91dHB1dCB0byBhIHNwZWNpZmljIGZpbGUiCittc2dzdHIgIui8uOWHuuWIsOS4gOWAi+aMh+WumueahOaqlOahiCIKKworIzogZGlmZi5jOjYxNjQKK21zZ2lkICJpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24gd2FzIHNraXBwZWQgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAi5Zug54K65qqU5qGI5aSq5aSa77yM55Wl6YGO5LiN5Zq05qC855qE6YeN5paw5ZG95ZCN5qqi5p+l44CCIgorCisjOiBkaWZmLmM6NjE2NworbXNnaWQgIm9ubHkgZm91bmQgY29waWVzIGZyb20gbW9kaWZpZWQgcGF0aHMgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAi5Zug54K65qqU5qGI5aSq5aSa77yM5Y+q5Zyo5L+u5pS555qE6Lev5b6R5Lit5bCL5om+6KSH6KO944CCIgorCisjOiBkaWZmLmM6NjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IG1heSB3YW50IHRvIHNldCB5b3VyICVzIHZhcmlhYmxlIHRvIGF0IGxlYXN0ICVkIGFuZCByZXRyeSB0aGUgY29tbWFuZC4iCittc2dzdHIgIuaCqOWPr+iDveaDs+imgeWwh+iuiuaVuCAlcyDoqK3lrprngrroh7PlsJEgJWQg5Lim5YaN5qyh5Z+36KGM5q2k5oyH5Luk44CCIgorCisjOiBkaXIuYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdCIKK21zZ3N0ciAi6Lev5b6R6KaP5qC8ICclcycg5pyq56ym5ZCI5Lu75L2VIGdpdCDlt7Lnn6XmqpTmoYgiCisKKyM6IGRpci5jOjY5NSBkaXIuYzo3MjQgZGlyLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICLnhKHms5XorZjliKXmqKPlvI/vvJrjgIwlc+OAjSIKKworIzogZGlyLmM6NzU0IGRpci5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgbmVnYXRpdmUgcGF0dGVybjogJyVzJyIKK21zZ3N0ciAi54Sh5rOV6K2Y5Yil5Y+N5ZCR5qih5byP77ya44CMJXPjgI0iCisKKyM6IGRpci5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBoYXZlIGlzc3VlczogcGF0dGVybiAnJXMnIGlzIHJlcGVhdGVkIgorbXNnc3RyICLmgqjnmoTnqIDnlo/nsL3lh7rmqpTmoYjlj6/og73mnInllY/poYzvvJrjgIwlc+OAjeaoo+W8j+mHjeikhyIKKworIzogZGlyLmM6Nzk2Cittc2dpZCAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIKK21zZ3N0ciAi5YGc55SoIGNvbmUg5qij5byP56ym5ZCI5qih5byPIgorCisjOiBkaXIuYzoxMTczCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1c2UgJXMgYXMgYW4gZXhjbHVkZSBmaWxlIgorbXNnc3RyICLkuI3og73lsIcgJXMg55So5L2c5o6S6Zmk5qqU5qGIIgorCisjOiBkaXIuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICLkuI3og73plovllZ/nm67pjIQgJyVzJyIKKworIzogZGlyLmM6MjQ3OQorbXNnaWQgImZhaWxlZCB0byBnZXQga2VybmVsIG5hbWUgYW5kIGluZm9ybWF0aW9uIgorbXNnc3RyICLnhKHms5XnjbLlvpfmoLjlv4PlkI3nqLHlkozoqIrmga8iCisKKyM6IGRpci5jOjI2MDMKK21zZ2lkICJ1bnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24iCittc2dzdHIgIuW/q+WPluacqui/vei5pOaqlOahiOWcqOacrOezu+e1seaIluS9jee9ruS4reiiq+emgeeUqCIKKworIzogZGlyLmM6MzQwNworIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQgaW4gcmVwbyAlcyIKK21zZ3N0ciAi54mI5pys5bqrICVzIOS4reeahOe0ouW8leaqlOahiOaQjeWjniIKKworIzogZGlyLmM6MzQ1MiBkaXIuYzozNDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIgorbXNnc3RyICLkuI3og73ngrogJXMg5bu656uL55uu6YyEIgorCisjOiBkaXIuYzozNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtaWdyYXRlIGdpdCBkaXJlY3RvcnkgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIuS4jeiDveW+niAnJXMnIOmBt+enuyBnaXQg55uu6YyE5YiwICclcyciCisKKyM6IGVkaXRvci5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6IFdhaXRpbmcgZm9yIHlvdXIgZWRpdG9yIHRvIGNsb3NlIHRoZSBmaWxlLi4uJWMiCittc2dzdHIgIuaPkOekuu+8muetieW+heaCqOeahOe3qOi8r+WZqOmXnOmWieaqlOahiC4uLiVjIgorCisjOiBlbnRyeS5jOjE3OAorbXNnaWQgIkZpbHRlcmluZyBjb250ZW50IgorbXNnc3RyICLpgY7mv77lhaflrrkiCisKKyM6IGVudHJ5LmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0IGZpbGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95bCN5qqU5qGIICclcycg5ZG85Y+rIHN0YXQiCisKKyM6IGVudmlyb25tZW50LmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaXQgbmFtZXNwYWNlIHBhdGggXCIlc1wiIgorbXNnc3RyICLpjK/oqqTnmoQgZ2l0IOWQjeWtl+epuumWk+i3r+W+kSBcIiVzXCIiCisKKyM6IGVudmlyb25tZW50LmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgR0lUX0RJUiB0byAnJXMnIgorbXNnc3RyICLkuI3og73oqK3lrpogR0lUX0RJUiDngrogJyVzJyIKKworIzogZXhlYy1jbWQuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJncyB0byBydW4gJXMiCittc2dzdHIgIuWft+ihjCAlcyDnmoTlj4PmlbjlpKrlpJoiCisKKyM6IGZldGNoLXBhY2suYzoxNTAKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFja++8muaHieeCuiBzaGFsbG93IOWIl+ihqCIKKworIzogZmV0Y2gtcGFjay5jOjE1MworbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBhIGZsdXNoIHBhY2tldCBhZnRlciBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNr77ya5Zyo5re66KSH6KO95YiX6KGo5LmL5b6M5pyf5pyb5LiA5YCLIGZsdXNoIOWMhSIKKworIzogZmV0Y2gtcGFjay5jOjE2NAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBmZXRjaC1wYWNr77ya5pyf5pybIEFDSy9OQUvvvIzljbvlvpfliLAgZmx1c2gg5YyFIgorCisjOiBmZXRjaC1wYWNrLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgJyVzJyIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2vvvJrmh4nngrogQUNLL05BS++8jOWNu+W+l+WIsCAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTk1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRvIHJlbW90ZSIKK21zZ3N0ciAi54Sh5rOV5a+r5Yiw6YGg56uvIgorCisjOiBmZXRjaC1wYWNrLmM6MjU3Cittc2dpZCAiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpcmVzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAiLS1zdGF0ZWxlc3MtcnBjIOmcgOimgSBtdWx0aV9hY2tfZGV0YWlsZWQiCisKKyM6IGZldGNoLXBhY2suYzozNTYgZmV0Y2gtcGFjay5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICLnhKHmlYjnmoQgc2hhbGxvdyDoqIrmga/vvJolcyIKKworIzogZmV0Y2gtcGFjay5jOjM2MiBmZXRjaC1wYWNrLmM6MTM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVuc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAi54Sh5pWI55qEIHVuc2hhbGxvdyDoqIrmga/vvJolcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NCBmZXRjaC1wYWNrLmM6MTM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3Qgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAi54mp5Lu25pyq5om+5Yiw77yaJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjcgZmV0Y2gtcGFjay5jOjEzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gb2JqZWN0OiAlcyIKK21zZ3N0ciAi54mp5Lu25Lit55m855Sf6Yyv6Kqk77yaJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjkgZmV0Y2gtcGFjay5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2hhbGxvdyBmb3VuZDogJXMiCittc2dzdHIgIuacqueZvOePviBzaGFsbG9377yaJXMiCisKKyM6IGZldGNoLXBhY2suYzozNzIgZmV0Y2gtcGFjay5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgc2hhbGxvdy91bnNoYWxsb3csIGdvdCAlcyIKK21zZ3N0ciAi5oeJ54K6IHNoYWxsb3cvdW5zaGFsbG9377yM5Y275b6X5YiwICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAlZCAlcyIKK21zZ3N0ciAi5b6X5YiwICVzICVkICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0ICVzIgorbXNnc3RyICLnhKHmlYjmj5DkuqQgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0NjIKK21zZ2lkICJnaXZpbmcgdXAiCittc2dzdHIgIuaUvuajhCIKKworIzogZmV0Y2gtcGFjay5jOjQ3NSBwcm9ncmVzcy5jOjMyMworbXNnaWQgImRvbmUiCittc2dzdHIgIuWujOaIkCIKKworIzogZmV0Y2gtcGFjay5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgKCVkKSAlcyIKK21zZ3N0ciAi5b6X5YiwICVzICglZCkgJXMiCisKKyM6IGZldGNoLXBhY2suYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyAlcyBhcyBjb21wbGV0ZSIKK21zZ3N0ciAi5qiZ6KiYICVzIOeCuuWujOaIkCIKKworIzogZmV0Y2gtcGFjay5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJhbHJlYWR5IGhhdmUgJXMgKCVzKSIKK21zZ3N0ciAi5bey57aT5pyJICVz77yIJXPvvIkiCisKKyM6IGZldGNoLXBhY2suYzo4MTgKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiZmV0Y2gtcGFja++8mueEoeazleihjeeUnyBzaWRlYmFuZCDlpJrot6/ovLjlh7oiCisKKyM6IGZldGNoLXBhY2suYzo4MjYKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIHBhY2sgaGVhZGVyIgorbXNnc3RyICLljZTlrprpjK/oqqTvvJrlo57nmoTljIXpoK0iCisKKyM6IGZldGNoLXBhY2suYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIgorbXNnc3RyICJmZXRjaC1wYWNr77ya54Sh5rOV6KGN55Sf6YCy56iLICVzIgorCisjOiBmZXRjaC1wYWNrLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGZhaWxlZCIKK21zZ3N0ciAiJXMg5aSx5pWXIgorCisjOiBmZXRjaC1wYWNrLmM6OTE4Cittc2dpZCAiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAic2lkZWJhbmQg5aSa6Lev6Ly45Ye655m855Sf6Yyv6KqkIgorCisjOiBmZXRjaC1wYWNrLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uIGlzICUuKnMiCittc2dzdHIgIuS8uuacjeWZqOeJiOacrCAlLipzIgorCisjOiBmZXRjaC1wYWNrLmM6OTcwIGZldGNoLXBhY2suYzo5NzYgZmV0Y2gtcGFjay5jOjk3OSBmZXRjaC1wYWNrLmM6OTg1CisjOiBmZXRjaC1wYWNrLmM6OTg5IGZldGNoLXBhY2suYzo5OTMgZmV0Y2gtcGFjay5jOjk5NyBmZXRjaC1wYWNrLmM6MTAwMQorIzogZmV0Y2gtcGFjay5jOjEwMDUgZmV0Y2gtcGFjay5jOjEwMDkgZmV0Y2gtcGFjay5jOjEwMTMgZmV0Y2gtcGFjay5jOjEwMTcKKyM6IGZldGNoLXBhY2suYzoxMDIzIGZldGNoLXBhY2suYzoxMDI5IGZldGNoLXBhY2suYzoxMDM0IGZldGNoLXBhY2suYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyAlcyIKK21zZ3N0ciAi5Ly65pyN5Zmo5pSv5o+0ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6OTcyCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjbGllbnRzIgorbXNnc3RyICLkvLrmnI3lmajkuI3mlK/mj7Qgc2hhbGxsb3cg55So5oi256uvIgorCisjOiBmZXRjaC1wYWNrLmM6MTAzMgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1zaW5jZSIKK21zZ3N0ciAi5Ly65pyN5Zmo5LiN5pSv5o+0IC0tc2hhbGxvdy1zaW5jZSIKKworIzogZmV0Y2gtcGFjay5jOjEwMzcKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIKK21zZ3N0ciAi5Ly65pyN5Zmo5LiN5pSv5o+0IC0tc2hhbGxvdy1leGNsdWRlIgorCisjOiBmZXRjaC1wYWNrLmM6MTA0MQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIgorbXNnc3RyICLkvLrmnI3lmajkuI3mlK/mj7QgLS1kZWVwZW4iCisKKyM6IGZldGNoLXBhY2suYzoxMDU4Cittc2dpZCAibm8gY29tbW9uIGNvbW1pdHMiCittc2dzdHIgIuaykuacieWFseWQjOeahOaPkOS6pCIKKworIzogZmV0Y2gtcGFjay5jOjEwNzAgZmV0Y2gtcGFjay5jOjE1MzYKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2vvvJrlj5blvpflpLHmlZfjgIIiCisKKyM6IGZldGNoLXBhY2suYzoxMjA5Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXF1ZXN0cyIKK21zZ3N0ciAi5Ly65pyN5Zmo5LiN5pSv5o+0IHNoYWxsbG93IOiri+axgiIKKworIzogZmV0Y2gtcGFjay5jOjEyMTYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgZmlsdGVyIgorbXNnc3RyICLkvLrmnI3lmajmlK/mj7QgZmlsdGVyIgorCisjOiBmZXRjaC1wYWNrLmM6MTIzOQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXF1ZXN0IHRvIHJlbW90ZSIKK21zZ3N0ciAi54Sh5rOV5bCH6KuL5rGC5a+r5Yiw6YGg56uvIgorCisjOiBmZXRjaC1wYWNrLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIHNlY3Rpb24gaGVhZGVyICclcyciCittc2dzdHIgIuiugOWPluevgOaomemhjCAnJXMnIOeZvOeUn+mMr+iqpCIKKworIzogZmV0Y2gtcGFjay5jOjEyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJyVzJywgcmVjZWl2ZWQgJyVzJyIKK21zZ3N0ciAi6aCQ5pyfICclcyfvvIzlvpfliLAgJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBhY2tub3dsZWRnbWVudCBsaW5lOiAnJXMnIgorbXNnc3RyICLmhI/lpJbnmoTnorroqo3ooYzvvJonJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGFja3M6ICVkIgorbXNnc3RyICLomZXnkIYgYWNrIOeZvOeUn+mMr+iqpO+8miVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTMxOAorbXNnaWQgImV4cGVjdGVkIHBhY2tmaWxlIHRvIGJlIHNlbnQgYWZ0ZXIgJ3JlYWR5JyIKK21zZ3N0ciAi6aCQ5pyf5ZyoICdyZWFkeScg5LmL5b6M5YKz6YCBIHBhY2tmaWxlIgorCisjOiBmZXRjaC1wYWNrLmM6MTMyMAorbXNnaWQgImV4cGVjdGVkIG5vIG90aGVyIHNlY3Rpb25zIHRvIGJlIHNlbnQgYWZ0ZXIgbm8gJ3JlYWR5JyIKK21zZ3N0ciAi5Zyo5rKS5pyJICdyZWFkeScg5LiN5oeJ6Kmy5YKz6YCB5YW25a6D5bCP56+AIgorCisjOiBmZXRjaC1wYWNrLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHNoYWxsb3cgaW5mbzogJWQiCittc2dzdHIgIuiZleeQhua3uuikh+ijveioiuaBr+eZvOeUn+mMr+iqpO+8miVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCB3YW50ZWQtcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAi6aCQ5pyfIHdhbnRlZC1yZWbvvIzlvpfliLAgJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCB3YW50ZWQtcmVmOiAnJXMnIgorbXNnc3RyICLmhI/lpJbnmoQgd2FudGVkLXJlZu+8miclcyciCisKKyM6IGZldGNoLXBhY2suYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgd2FudGVkIHJlZnM6ICVkIgorbXNnc3RyICLomZXnkIbopoHlj5blvpfnmoTlvJXnlKjnmbznlJ/pjK/oqqTvvJolZCIKKworIzogZmV0Y2gtcGFjay5jOjE3NjIKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAi5rKS5pyJ56ym5ZCI55qE6YGg56uv5YiG5pSvIgorCisjOiBmZXRjaC1wYWNrLmM6MTc4NSBidWlsdGluL2Nsb25lLmM6Njg5Cittc2dpZCAicmVtb3RlIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHMiCittc2dzdHIgIumBoOerr+aykuacieWCs+mAgeaJgOacieW/hemcgOeahOeJqeS7tiIKKworIzogZmV0Y2gtcGFjay5jOjE4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZW1vdGUgcmVmICVzIgorbXNnc3RyICLmspLmnInpgJnmqKPnmoTpgaDnq6/lvJXnlKggJXMiCisKKyM6IGZldGNoLXBhY2suYzoxODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICLkvLrmnI3lmajkuI3lhYHoqLHoq4vmsYLmnKrlhazplovnmoTnianku7YgJXMiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzo0MDgKK21zZ2lkICJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiCittc2dzdHIgImdwZyDnhKHms5Xngrros4fmlpnnsL3lkI0iCisKKyM6IGdwZy1pbnRlcmZhY2UuYzo0MzQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICLkuI3og73lu7rnq4vmmqvlrZjmqpQiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzo0MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvICclcyciCittc2dzdHIgIueEoeazleWwh+WIhumbouW8j+ewveWQjeWvq+WFpSAnJXMnIgorCisjOiBncmFwaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yZSBpbnZhbGlkIGNvbG9yICclLipzJyBpbiBsb2cuZ3JhcGhDb2xvcnMiCittc2dzdHIgIuW/veeVpSBsb2cuZ3JhcGhDb2xvcnMg5Lit54Sh5pWI55qE6aGP6ImyICclLipzJyIKKworIzogZ3JlcC5jOjY2OAorbXNnaWQgIiIKKyJnaXZlbiBwYXR0ZXJuIGNvbnRhaW5zIE5VTEwgYnl0ZSAodmlhIC1mIDxmaWxlPikuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgIgorIndpdGggLVAgdW5kZXIgUENSRSB2MiIKK21zZ3N0ciAiIgorIuaPkOS+m+eahOaooeW8j+WMheWQqyBOVUxMIOWtl+WFg++8iOmAmumBjiAtZiA85qqU5qGIPiDlj4PmlbjvvInjgILlj6rmnIkgUENSRSB2MiDkuIvnmoQgLVAg5pSv5o+05q2kIgorIuWKn+iDvSIKKworIzogZ3JlcC5jOjIxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIiclcyfvvJrnhKHms5XoroDlj5YgJXMiCisKKyM6IGdyZXAuYzoyMTQ1IHNldHVwLmM6MTY2IGJ1aWx0aW4vY2xvbmUuYzo0MTEgYnVpbHRpbi9kaWZmLmM6ODIKKyM6IGJ1aWx0aW4vcm0uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAi5bCNICclcycg5ZG85Y+rIHN0YXQg5aSx5pWXIgorCisjOiBncmVwLmM6MjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkIgorbXNnc3RyICInJXMn77ya6K6A5Y+W5LiN5a6M5pW0IgorCisjOiBoZWxwLmM6MjMKK21zZ2lkICJzdGFydCBhIHdvcmtpbmcgYXJlYSAoc2VlIGFsc286IGdpdCBoZWxwIHR1dG9yaWFsKSIKK21zZ3N0ciAi6ZaL5aeL5LiA5YCL5bel5L2c5Y2A77yI5Y+D6KaL77yaZ2l0IGhlbHAgdHV0b3JpYWzvvIkiCisKKyM6IGhlbHAuYzoyNAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICLlnKjnm67liY3orormm7TkuIrlt6XkvZzvvIjlj4PopovvvJpnaXQgaGVscCBldmVyeWRhee+8iSIKKworIzogaGVscC5jOjI1Cittc2dpZCAiZXhhbWluZSB0aGUgaGlzdG9yeSBhbmQgc3RhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCByZXZpc2lvbnMpIgorbXNnc3RyICLmqqLmn6Xmrbflj7Llkozni4DmhYvvvIjlj4PopovvvJpnaXQgaGVscCByZXZpc2lvbnPvvIkiCisKKyM6IGhlbHAuYzoyNgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgIuaTtOWxleOAgeaomeiomOWSjOiqv+agoeaCqOeahOatt+WPsuiomOmMhCIKKworIzogaGVscC5jOjI3Cittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICLljZTlkIzvvIjlj4PopovvvJpnaXQgaGVscCB3b3JrZmxvd3PvvIkiCisKKyM6IGhlbHAuYzozMQorbXNnaWQgIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIgorbXNnc3RyICLkuLvopoHnmoTkuIrlsaTmjIfku6QiCisKKyM6IGhlbHAuYzozMgorbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIE1hbmlwdWxhdG9ycyIKK21zZ3N0ciAi6LyU5Yqp5oyH5LukL+WLleS9nOiAhSIKKworIzogaGVscC5jOjMzCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAi6LyU5Yqp5oyH5LukL+ipouWVj+iAhSIKKworIzogaGVscC5jOjM0Cittc2dpZCAiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiCittc2dzdHIgIuiIh+WFtuWug+ezu+e1seS6kuWLlSIKKworIzogaGVscC5jOjM1Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICLkvY7ntJrmjIfku6Qv5YuV5L2c6ICFIgorCisjOiBoZWxwLmM6MzYKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIgorbXNnc3RyICLkvY7ntJrmjIfku6Qv6Kmi5ZWP6ICFIgorCisjOiBoZWxwLmM6MzcKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBTeW5jaW5nIFJlcG9zaXRvcmllcyIKK21zZ3N0ciAi5L2O57Sa5oyH5LukIC8g5ZCM5q2l54mI5pys5bqrIgorCisjOiBoZWxwLmM6MzgKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcm5hbCBIZWxwZXJzIgorbXNnc3RyICLkvY7ntJrmjIfku6Qv5YWn6YOo5Yqp5omLIgorCisjOiBoZWxwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAi5ZyoICclcycg5LiL5Y+v55So55qEIGdpdCDmjIfku6QiCisKKyM6IGhlbHAuYzozMDUKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgIuWcqCAkUEFUSCDot6/lvpHkuK3nmoTlhbbku5blnLDmlrnlj6/nlKjnmoQgZ2l0IOaMh+S7pCIKKworIzogaGVscC5jOjMxNAorbXNnaWQgIlRoZXNlIGFyZSBjb21tb24gR2l0IGNvbW1hbmRzIHVzZWQgaW4gdmFyaW91cyBzaXR1YXRpb25zOiIKK21zZ3N0ciAi6YCZ5Lqb5piv5ZCE56iu5aC05ZCI5bi46KaL55qEIEdpdCDmjIfku6TvvJoiCisKKyM6IGhlbHAuYzozNjMgZ2l0LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgY29tbWFuZCBsaXN0aW5nIHR5cGUgJyVzJyIKK21zZ3N0ciAi5LiN5pSv5o+055qE5oyH5Luk5YiX6KGo6aGe5Z6LICclcyciCisKKyM6IGhlbHAuYzo0MDMKK21zZ2lkICJUaGUgY29tbW9uIEdpdCBndWlkZXMgYXJlOiIKK21zZ3N0ciAi5pyA5bi455So55qEIEdpdCDlmq7lsI7mnInvvJoiCisKKyM6IGhlbHAuYzo1MTIKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgdG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQiCittc2dzdHIgIuWft+ihjOOAgCdnaXQgaGVscCA8Y29tbWFuZD4nIOS+huaqouimlueJueWumuWtkOaMh+S7pCIKKworIzogaGVscC5jOjUxNworbXNnaWQgIkV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICLlpJbpg6jmjIfku6QiCisKKyM6IGhlbHAuYzo1MzIKK21zZ2lkICJDb21tYW5kIGFsaWFzZXMiCittc2dzdHIgIuaMh+S7pOWIpeWQjSIKKworIzogaGVscC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKyInJXMnIOWDj+aYr+S4gOWAiyBnaXQg5oyH5Luk77yM5L2G5Y2754Sh5rOV5Z+36KGM44CCXG4iCisi5Y+v6IO95pivIGdpdC0lcyDlj5fmkI3vvJ8iCisKKyM6IGhlbHAuYzo2NTUKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAi5ZSJ5ZGA77yM5oKo55qE57O757Wx5Lit5pyq55m854++IEdpdCDmjIfku6TjgIIiCisKKyM6IGhlbHAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAi6K2m5ZGK77ya5oKo5Z+36KGM5LqG5LiA5YCL5Lim5LiN5a2Y5Zyo55qEIEdpdCDmjIfku6QgJyVzJ+OAgiIKKworIzogaGVscC5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICLlgYflrprkvaDmg7PopoHnmoTmmK8gJyVzJyDkuKbnubznuozjgIIiCisKKyM6IGhlbHAuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyBpbiAlMC4xZiBzZWNvbmRzLCBhc3N1bWluZyB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAi5YGH5a6a5L2g5oOz6KaB55qE5pivICclMiRzJ++8jOWcqCAlMSQwLjFmIOenkumQmOW+jOe5vOe6jOOAgiIKKworIzogaGVscC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXTvvJonJXMnIOS4jeaYr+S4gOWAiyBnaXQg5oyH5Luk44CC5Y+D6KaLICdnaXQgLS1oZWxwJ+OAgiIKKworIzogaGVscC5jOjY5OQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmRzIGFyZSIKK21zZ3N0clswXSAiIgorIlxuIgorIuacgOmhnuS8vOeahOaMh+S7pOaciSIKKworIzogaGVscC5jOjcxNAorbXNnaWQgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgdmVyc2lvbiBbPOmBuOmghT5dIgorCisjOiBoZWxwLmM6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIlc++8miVzIC0gJXMiCisKKyM6IGhlbHAuYzo3ODcKK21zZ2lkICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKKyJcbiIKKyLmgqjmjIfnmoTmmK/pgJnlgIvll47vvJ8iCisKKyM6IGlkZW50LmM6MzQ5Cittc2dpZCAiIgorIlxuIgorIioqKiBQbGVhc2UgdGVsbCBtZSB3aG8geW91IGFyZS5cbiIKKyJcbiIKKyJSdW5cbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisidG8gc2V0IHlvdXIgYWNjb3VudCdzIGRlZmF1bHQgaWRlbnRpdHkuXG4iCisiT21pdCAtLWdsb2JhbCB0byBzZXQgdGhlIGlkZW50aXR5IG9ubHkgaW4gdGhpcyByZXBvc2l0b3J5LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiKioqIOiri+WRiuiotOaIkeS9oOaYr+iqsOOAglxuIgorIlxuIgorIuWft+ihjFxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyJcbiIKKyLkvoboqK3lrprmgqjluLPomZ/nmoTpoJDoqK3ouqvku73mqJnoqJjjgIJcbiIKKyLlpoLmnpzlg4XlnKjmnKzniYjmnKzluqvoqK3lrprouqvku73mqJnoqJjvvIzliYfnnIHnlaUgLS1nbG9iYWwg5Y+D5pW444CCXG4iCisKKyM6IGlkZW50LmM6Mzc5Cittc2dpZCAibm8gZW1haWwgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAi5pyq5o+Q5L6b5L+h5Lu25L2N5Z2A5LiU6Ieq5YuV5YG15ris6KKr56aB55SoIgorCisjOiBpZGVudC5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgZW1haWwgYWRkcmVzcyAoZ290ICclcycpIgorbXNnc3RyICLnhKHms5Xoh6rli5XlgbXmuKzkv6Hku7bkvY3lnYDvvIjlvpfliLAgJyVzJ++8iSIKKworIzogaWRlbnQuYzo0MDEKK21zZ2lkICJubyBuYW1lIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiCittc2dzdHIgIuacquaPkOS+m+Wnk+WQjeS4lOiHquWLleWBtea4rOiiq+emgeeUqCIKKworIzogaWRlbnQuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IG5hbWUgKGdvdCAnJXMnKSIKK21zZ3N0ciAi54Sh5rOV6Ieq5YuV5YG15ris5aeT5ZCN77yI5b6X5YiwICclcyfvvIkiCisKKyM6IGlkZW50LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGlkZW50IG5hbWUgKGZvciA8JXM+KSBub3QgYWxsb3dlZCIKK21zZ3N0ciAi5LiN5YWB6Kix56m655qE5aeT5ZCN77yI5bCN5pa8IDwlcz7vvIkiCisKKyM6IGlkZW50LmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIgorbXNnc3RyICLlp5PlkI3kuK3lg4XljIXlkKvnpoHnlKjlrZflhYPvvJolcyIKKworIzogaWRlbnQuYzo0MzYgYnVpbHRpbi9jb21taXQuYzo2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkYXRlIGZvcm1hdDogJXMiCittc2dzdHIgIueEoeaViOeahOaXpeacn+agvOW8j++8miVzIgorCisjOiBsaXN0LW9iamVjdHMuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyB0cmVlIG1vZGUsIGJ1dCBpcyBub3QgYSB0cmVlIgorbXNnc3RyICLmqLkgJTIkcyDkuK3nmoTmop3nm64gJyUxJHMnIOWFt+acieaoueeahOWxrOaAp++8jOS9huS4jeaYr+S4gOWAi+aoueeLgOeJqeS7tiIKKworIzogbGlzdC1vYmplY3RzLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgYmxvYiBtb2RlLCBidXQgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAi5qi5ICUyJHMg5Lit55qE5qKd55uuICclMSRzJyDlhbfmnInos4fmlpnnianku7bnmoTlsazmgKfvvIzkvYbkuI3mmK/kuIDlgIvos4fmlpnnianku7YiCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCByb290IHRyZWUgZm9yIGNvbW1pdCAlcyIKK21zZ3N0ciAi54Sh5rOV54K65o+Q5LqkICVzIOi8ieWFpeagueaouSIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIHNwYXJzZSBibG9iIGluICclcyciCittc2dzdHIgIuS4jeiDveWtmOWPliAnJXMnIOS4reeahOeogOeWj+izh+aWmeeJqeS7tiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugc3BhcnNlIGZpbHRlciBkYXRhIGluICVzIgorbXNnc3RyICLnhKHms5Xop6PmnpAgJXMg5Lit55qE56iA55aP6YGO5r++5Zmo6LOH5paZIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo1OAorbXNnaWQgImV4cGVjdGVkICd0cmVlOjxkZXB0aD4nIgorbXNnc3RyICLmnJ/mnJsgJ3RyZWU6POa3seW6pj4nIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo3MworbXNnaWQgInNwYXJzZTpwYXRoIGZpbHRlcnMgc3VwcG9ydCBoYXMgYmVlbiBkcm9wcGVkIgorbXNnc3RyICJzcGFyc2U6cGF0aCDpgY7mv77lmajmlK/mj7Tlt7LooqvliKrpmaQiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsdGVyLXNwZWMgJyVzJyIKK21zZ3N0ciAi54Sh5pWI55qE6YGO5r++5Zmo6KGo6YGU5byPICclcyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtdXN0IGVzY2FwZSBjaGFyIGluIHN1Yi1maWx0ZXItc3BlYzogJyVjJyIKK21zZ3N0ciAi5b+F6aCI5bCNIHN1Yi1maWx0ZXItc3BlYyDkuK3nmoTlrZflhYPpgLLooYzovYnnvqnvvJonJWMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxNDQKK21zZ2lkICJleHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgY29tYmluZToiCittc2dzdHIgIuacn+acm+WcqOe1hOWQiOW+jOacieS4gOS6m+adseilv++8miIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MjI2Cittc2dpZCAibXVsdGlwbGUgZmlsdGVyLXNwZWNzIGNhbm5vdCBiZSBjb21iaW5lZCIKK21zZ3N0ciAi5LiN6IO95re355So5aSa56iu6YGO5r++6KaP5qC8IgorCisjOiBsb2NrZmlsZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuIgorIlxuIgorIkFub3RoZXIgZ2l0IHByb2Nlc3Mgc2VlbXMgdG8gYmUgcnVubmluZyBpbiB0aGlzIHJlcG9zaXRvcnksIGUuZy5cbiIKKyJhbiBlZGl0b3Igb3BlbmVkIGJ5ICdnaXQgY29tbWl0Jy4gUGxlYXNlIG1ha2Ugc3VyZSBhbGwgcHJvY2Vzc2VzXG4iCisiYXJlIHRlcm1pbmF0ZWQgdGhlbiB0cnkgYWdhaW4uIElmIGl0IHN0aWxsIGZhaWxzLCBhIGdpdCBwcm9jZXNzXG4iCisibWF5IGhhdmUgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllcjpcbiIKKyJyZW1vdmUgdGhlIGZpbGUgbWFudWFsbHkgdG8gY29udGludWUuIgorbXNnc3RyICIiCisi54Sh5rOV5bu656uLICclcy5sb2NrJ++8miVz44CCXG4iCisiXG4iCisi5Ly85LmO5Y+m5aSW5LiA5YCLIGdpdCDpgLLnqIvlnKjpgJnlgIvniYjmnKzluqvkuK3ln7fooYzvvIzkvovlpoLvvJonZ2l0IGNvbW1pdCcg5oyH5Luk5omTXG4iCisi6ZaL5LqG5LiA5YCL57eo6Lyv5Zmo44CC6KuL56K66KqN5omA5pyJ6YCy56iL6YO95bey57aT6Zec6ZaJ54S25b6M6YeN6Kmm44CC5aaC5p6c5LuN54S25aCx6Yyv77yMXG4iCisi5Y+v6IO95LmL5YmN5pyJ5LiA5YCLIGdpdCDpgLLnqIvlnKjpgJnlgIvniYjmnKzluqvkuK3nlbDluLjpm6LplovvvJpcbiIKKyLmiYvli5XliKrpmaTpgJnlgIvmqpTmoYjlho3nubznuozjgIIiCisKKyM6IGxvY2tmaWxlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIKK21zZ3N0ciAi5LiN6IO95bu656uLICclcy5sb2NrJ++8miVzIgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICLoroDlj5blv6vlj5blpLHmlZciCisKKyM6IG1lcmdlLmM6MTA3IHJlcmVyZS5jOjcyMCBidWlsdGluL2FtLmM6MTg3OSBidWlsdGluL2FtLmM6MTkxMworIzogYnVpbHRpbi9jaGVja291dC5jOjU0MSBidWlsdGluL2NoZWNrb3V0LmM6ODAwIGJ1aWx0aW4vY2xvbmUuYzo4MTAKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNjUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIueEoeazleWvq+aWsOeahOe0ouW8leaqlOahiCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzU2Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIu+8iOWjnuaPkOS6pO+8iVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICJhZGRfY2FjaGVpbmZvIOWwjei3r+W+kSAnJXMnIOWft+ihjOWkseaVl++8jOWQiOS9tee1guatouOAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIHRvIHJlZnJlc2ggZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICJhZGRfY2FjaGVpbmZvIOeEoeazlemHjeaWsOaVtOeQhui3r+W+kSAnJXMn77yM5ZCI5L2157WC5q2i44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAi5bu656uL6Lev5b6RICclcyclcyDlpLHmlZciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICLliKrpmaQgJXMg5Lul5L6/54K65a2Q55uu6YyE55WZ5Ye656m66ZaTXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg5OSBtZXJnZS1yZWN1cnNpdmUuYzo5MTgKK21zZ2lkICI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IgorbXNnc3RyICLvvJrlj6/og73mmK/kuIDlgIvnm67pjIQv5qqU5qGI6KGd56qB77yfIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICLmi5LntZXmjajmo4QgJyVzJyDkuK3nmoTmnKrov73ouaTmqpTmoYgiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk0OSBidWlsdGluL2NhdC1maWxlLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgIuS4jeiDveiugOWPlueJqeS7tiAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAiJXMgJyVzJyDmh4nngrros4fmlpnnianku7YiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAi6ZaL5ZWfICclcycg5aSx5pWX77yaJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnOiAlcyIKK21zZ3N0ciAi5bu656uL56ym6Jmf6YCj57WQICclcycg5aSx5pWX77yaJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIgorbXNnc3RyICLkuI3nn6XpgZPlpoLkvZXomZXnkIYgJTA2byAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBjaGVja2VkIG91dCkiCittc2dzdHIgIueEoeazleWQiOS9teWtkOaooee1hCAlcyDvvIjmspLmnInnsL3lh7rvvIkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBub3QgcHJlc2VudCkiCittc2dzdHIgIueEoeazleWQiOS9teWtkOaooee1hCAlc++8iOaPkOS6pOS4jeWtmOWcqO+8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIGRvbid0IGZvbGxvdyBtZXJnZS1iYXNlKSIKK21zZ3N0ciAi54Sh5rOV5ZCI5L215a2Q5qih57WEICVzIO+8iOaPkOS6pOacqui3n+maqOWQiOS9teWfuuekju+8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxMyBtZXJnZS1yZWN1cnNpdmUuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMgdG8gdGhlIGZvbGxvd2luZyBjb21taXQ6IgorbXNnc3RyICLlrZDmqKHntYQgJXMg5b+r6L2J5Yiw5aaC5LiL5o+Q5Lqk77yaIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjE2IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi5b+r6L2J5a2Q5qih57WEICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG1lcmdlIGZvbGxvd2luZyBjb21taXRzIG5vdCBmb3VuZCkiCittc2dzdHIgIueEoeazleWQiOS9teWtkOaooee1hCAlcyDvvIjmspLnmbznj77lkIjkvbXot5/pmqjnmoTmj5DkuqTvvIkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGZhc3QtZm9yd2FyZCkiCittc2dzdHIgIueEoeazleWQiOS9teWtkOaooee1hCAlc++8iOmdnuW/q+i9ie+8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1NgorbXNnaWQgIkZvdW5kIGEgcG9zc2libGUgbWVyZ2UgcmVzb2x1dGlvbiBmb3IgdGhlIHN1Ym1vZHVsZTpcbiIKK21zZ3N0ciAi5om+5Yiw5a2Q5qih57WE55qE5LiA5YCL5Y+v6IO955qE5ZCI5L215pa55qGI77yaXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHRoaXMgaXMgY29ycmVjdCBzaW1wbHkgYWRkIGl0IHRvIHRoZSBpbmRleCBmb3IgZXhhbXBsZVxuIgorImJ5IHVzaW5nOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisid2hpY2ggd2lsbCBhY2NlcHQgdGhpcyBzdWdnZXN0aW9uLlxuIgorbXNnc3RyICIiCisi5aaC5p6c6YCZ5YCL5q2j56K677yM5bCH5YW25paw5aKe5Yiw57Si5byV77yM5L6L5aaC5L2/55So5oyH5Luk77yaXG4iCisiXG4iCisiICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcbiIKKyJcbiIKKyLku6XmjqXlj5fmraTlu7rorbDjgIJcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtdWx0aXBsZSBtZXJnZXMgZm91bmQpIgorbXNnc3RyICLnhKHms5XlkIjkvbXlrZDmqKHntYQgJXMg77yI55m854++5aSa5YCL5ZCI5L2177yJIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzQxCittc2dpZCAiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiCittc2dzdHIgIueEoeazleWft+ihjOWFp+mDqOWQiOS9tSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICLkuI3og73mlrDlop4gJXMg6Iez54mp5Lu25bqrIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAi6Ieq5YuV5ZCI5L21ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyB3cml0aW5nIHRvICVzIGluc3RlYWQuIgorbXNnc3RyICLpjK/oqqTvvJrmi5LntZXpgbrlpLHmnKrov73ouaTmqpTmoYggJyVzJ++8jOiAjOaYr+Wvq+WFpSAlc+OAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisi6KGd56qB77yIJTEkcy/liKrpmaTvvInvvJolMiRzIOWcqCAlMyRzIOS4reiiq+WIqumZpO+8jOWcqCAlNSRzIOS4reiiqyAlNCRz44CCJTckcyDnmoQgJTYkcyDniYgiCisi5pys6KKr5L+d55WZ44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZS4iCittc2dzdHIgIiIKKyLooZ3nqoHvvIglMSRzL+WIqumZpO+8ie+8miUyJHMg5ZyoICUzJHMg5Lit6KKr5Yiq6Zmk77yM5ZyoICU2JHMg5Lit55qEICU1JHMg6KKrICU0JHPjgIIlOCRzIOeahCAiCisiJTckcyDniYjmnKzooqvkv53nlZnjgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIuihneeqge+8iCUxJHMv5Yiq6Zmk77yJ77yaJTIkcyDlnKggJTMkcyDkuK3ooqvliKrpmaTvvIzlnKggJTUkcyDkuK3ooqsgJTQkc+OAgiU3JHMg55qEICU2JHMg54mIIgorIuacrOS/neeVmeWcqCAlOCRzIOS4reOAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisi6KGd56qB77yIJTEkcy/liKrpmaTvvInvvJolMiRzIOWcqCAlMyRzIOS4reiiq+WIqumZpO+8jOWcqCAlNiRzIOS4reeahCAlNSRzIOiiqyAlNCRz44CCJTgkcyDnmoQgIgorIiU3JHMg54mI5pys5L+d55WZ5ZyoICU5JHMg5Lit44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI2Cittc2dpZCAicmVuYW1lIgorbXNnc3RyICLph43mlrDlkb3lkI0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjYKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICLph43mlrDlkb3lkI0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NzcgbWVyZ2UtcmVjdXJzaXZlLmM6MjQ3MiBtZXJnZS1yZWN1cnNpdmUuYzozMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCAlcyIKK21zZ3N0ciAi5ouS57WV6YG65aSx6auS5qqU5qGIICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAi5ouS57WV5ZyoICclcycg6JmV5aSx5Y675pyq6L+96Lmk5qqU5qGI77yM5Y2z5L2/5a6D5a2Y5Zyo5pa86YeN5paw5ZG95ZCN5Lit44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gIEFkZGVkICVzIGluICVzIgorbXNnc3RyICIiCisi6KGd56qB77yI6YeN5paw5ZG95ZCNL+aWsOWinu+8ie+8muWcqCAlMyRzIOS4remHjeaWsOWRveWQjSAlMSRzLT4lMiRz44CC5ZyoICU1JHMg5Lit5paw5aKeICU0JHMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVzIOaYryAlcyDkuK3nmoTkuIDlgIvnm67pjITogIzlt7IgJXMg54K65ZCN6KKr5paw5aKeIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICLmi5LntZXpgbrlpLHmnKrov73ouaTmqpTmoYggJyVzJ++8jOiAjOaYr+aWsOWinueCuiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgorbXNnc3RyICIiCisi6KGd56qB77yI6YeN5paw5ZG95ZCNL+mHjeaWsOWRveWQje+8ie+8muWcqOWIhuaUryBcIiUzJHNcIiDkuK3ph43mlrDlkb3lkI0gXCIlMSRzXCItPlwiJTIkc1wi77yM5ZyoIgorIuWIhuaUryBcIiU2JHNcIiDkuK3ph43mlrDlkb3lkI0gXCIlNCRzXCItPlwiJTUkc1wiJTckcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcxMworbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAi77yI55WZ5LiL5pyq6Kej5rG677yJIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIuihneeqge+8iOmHjeaWsOWRveWQjS/ph43mlrDlkb3lkI3vvInvvJrlnKggJTMkcyDkuK3ph43mlrDlkb3lkI0gJTEkcy0+JTIkc++8jOWcqCAlNiRzIOS4remHjeaWsOWRveWQjSAiCisiJTQkcy0+JTUkcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGRpcmVjdG9yeSByZW5hbWUgc3BsaXQpOiBVbmNsZWFyIHdoZXJlIHRvIHBsYWNlICVzIGJlY2F1c2UgIgorImRpcmVjdG9yeSAlcyB3YXMgcmVuYW1lZCB0byBtdWx0aXBsZSBvdGhlciBkaXJlY3Rvcmllcywgd2l0aCBubyBkZXN0aW5hdGlvbiAiCisiZ2V0dGluZyBhIG1ham9yaXR5IG9mIHRoZSBmaWxlcy4iCittc2dzdHIgIiIKKyLooZ3nqoHvvIjliIblibLnmoTnm67pjITph43mlrDlkb3lkI3vvInvvJrkuI3muIXmpZogJXMg5oeJ6Kmy5pS+5Zyo5ZOq6KOh77yM5Zug54K655uu6YyEICVzIOiiq+mHjeaWsOWRveWQjeWIsCIKKyLlpJrlgIvlhbblroPnm67pjITvvIzmspLmnInnm67pjITljIXlkKvlpKfpg6jliIbmqpTmoYjjgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogRXhpc3RpbmcgZmlsZS9kaXIgYXQgJXMgaW4gdGhlIHdheSBvZiAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZShzKSBwdXR0aW5nIHRoZSBmb2xsb3dpbmcgcGF0aChzKSB0aGVyZTogJXMuIgorbXNnc3RyICIiCisi6KGd56qB77yI6Zqx5byP55uu6YyE6YeN5paw5ZG95ZCN77yJ77ya6JmV5pa86Zqx5byP55uu6YyE6YeN5paw5ZG95ZCN55qE54++5a2Y5qqU5qGIL+ebrumMhCAlc++8jOWwh+S7peS4i+i3r+W+kSIKKyLmlL7lnKjvvJolc+OAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBDYW5ub3QgbWFwIG1vcmUgdGhhbiBvbmUgcGF0aCB0byAlczsgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzIHRyaWVkIHRvIHB1dCB0aGVzZSBwYXRocyB0aGVyZTogJXMiCittc2dzdHIgIiIKKyLooZ3nqoHvvIjpmrHlvI/nm67pjITph43mlrDlkb3lkI3vvInvvJrnhKHms5XmmKDlsITkuIDlgIvku6XkuIrot6/lvpHliLAgJXPvvIzpmrHlvI/nm67pjITph43mlrDlkb3lkI3lmJfoqablsIfpgJkiCisi5Lqb6Lev5b6R5pS+572u5pa85q2k77yaJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIGRpcmVjdG9yeSAlcy0+JXMgaW4gJXMuIFJlbmFtZSBkaXJlY3RvcnkgJXMtIgorIj4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIuihneeqge+8iOmHjeaWsOWRveWQjS/ph43mlrDlkb3lkI3vvInvvJrlnKggJTMkcyDkuK3ph43mlrDlkb3lkI3nm67pjIQgJTEkcy0+JTIkc++8jOWcqCAlNiRzIOS4remHjeaWsCIKKyLlkb3lkI3nm67pjIQgJTQkcy0+JTUkcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjQzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogQXZvaWRpbmcgYXBwbHlpbmcgJXMgLT4gJXMgcmVuYW1lIHRvICVzLCBiZWNhdXNlICVzIGl0c2VsZiB3YXMgIgorInJlbmFtZWQuIgorbXNnc3RyICLorablkYrvvJrpgb/lhY3mh4nnlKggJXMgLT4gJXMg55qE6YeN5paw5ZG95ZCN5YiwICVz77yM5Zug54K6ICVzIOacrOi6q+W3suiiq+mHjeaWsOWRveWQjeOAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mjk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIuS4jeiDveiugOWPlueJqeS7tiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mjk2NAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAi54mp5Lu2ICVzIOS4jeaYr+S4gOWAi+izh+aWmeeJqeS7tiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyOAorbXNnaWQgIm1vZGlmeSIKK21zZ3N0ciAi5L+u5pS5IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDI4Cittc2dpZCAibW9kaWZpZWQiCittc2dzdHIgIuS/ruaUuSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA0MAorbXNnaWQgImNvbnRlbnQiCittc2dzdHIgIuWFp+WuuSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA0NAorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgIuaWsOWini/mlrDlop4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIgorbXNnc3RyICLnlaXpgY4gJXPvvIjlt7LntpPlgZrpgY7nm7jlkIzlkIjkvbXvvIkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODkgZ2l0LXN1Ym1vZHVsZS5zaDoxMDAzCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICLlrZDmqKHntYQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIuihneeqge+8iCVz77yJ77ya5ZCI5L216KGd56qB5pa8ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICLogIzmmK/ku6UgJXMg54K65ZCN5paw5aKeIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzOyAiCisibW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorIui3r+W+keW3suabtOaWsO+8miVzIOaWsOWinuWIsCAlc++8jOS9jeaWvOS4gOWAi+iiq+mHjeaWsOWRveWQjeWIsCAlcyDnmoTnm67pjITkuK3vvIzlsIflhbbnp7vli5XliLAgJXPjgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgYWRkZWQgaW4gJXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgIgorImluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorIuihneeqge+8iOaqlOahiOS9jee9ru+8ie+8miVzIOaWsOWinuWIsCAlc++8jOS9jeaWvOS4gOWAi+iiq+mHjeaWsOWRveWQjeeCuiAlcyDnmoTnm67pjITkuK3vvIzlu7rorbDlsIflhbbnp7siCisi5YuV5YiwICVz44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICIKKyIlczsgbW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorIui3r+W+keW3suabtOaWsO+8miUxJHMg6YeN5paw5ZG95ZCN54K6ICUzJHMg5Lit55qEICUyJHPvvIzogIzoqbLnm67pjITooqvph43mlrDlkb3lkI3liLAgJTQkcyDkuK3vvIzlsIciCisi5YW256e75YuV5YiwICU1JHPjgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgIgorIndhcyByZW5hbWVkIGluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorIuihneeqge+8iOaqlOahiOS9jee9ru+8ie+8miUxJHMg6YeN5paw5ZG95ZCN54K6ICUzJHMg5Lit55qEICUyJHPvvIzogIzoqbLnm67pjITooqvph43mlrDlkb3lkI3liLAgJTQkcyAiCisi5Lit77yM5bu66K2w5bCH5YW256e75YuV5YiwICU1JHPjgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgIuWIqumZpCAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM1MAorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICLmqpTmoYgv55uu6YyEIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzU1Cittc2dpZCAiZGlyZWN0b3J5L2ZpbGUiCittc2dzdHIgIuebrumMhC/mqpTmoYgiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiBBZGRpbmcgJXMgYXMgJXMiCittc2dzdHIgIuihneeqge+8iCUxJHPvvInvvJrlnKggJTMkcyDkuK3mnInkuIDlgIvlkI3ngrogJTIkcyDnmoTnm67pjITjgILku6UgJTUkcyDngrrlkI3mlrDlop4gJTQkcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIuaWsOWiniAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoYWRkL2FkZCk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICLooZ3nqoHvvIhhZGQvYWRk77yJ77ya5ZCI5L216KGd56qB5pa8ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDI0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlISIKK21zZ3N0ciAi5bey57aT5piv5pyA5paw55qE77yBIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDMzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAi54Sh5rOV5ZCI5L215qi5ICVzIOWSjCAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzUzNworbXNnaWQgIk1lcmdpbmc6IgorbXNnc3RyICLlkIjkvbXvvJoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIKK21zZ2lkX3BsdXJhbCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiCittc2dzdHJbMF0gIueZvOePviAldSDlgIvlhbHlkIznpZblhYjvvJoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2MDAKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgIuWQiOS9teacqui/lOWbnuaPkOS6pCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzY1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiICAlcyIKK21zZ3N0ciAiIgorIuaCqOWwjeS4i+WIl+aqlOahiOeahOacrOapn+S/ruaUueWwh+iiq+WQiOS9teWLleS9nOimhuiTi++8mlxuIgorIiAgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICLkuI3og73op6PmnpDnianku7YgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzc3NCBidWlsdGluL21lcmdlLmM6Njk3IGJ1aWx0aW4vbWVyZ2UuYzo4NzcKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICLkuI3og73lr6vlhaXntKLlvJXjgIIiCisKKyM6IG1pZHguYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIgorbXNnc3RyICLlpJrljIXntKLlvJXmqpTmoYggJXMg5aSq5bCPIgorCisjOiBtaWR4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBzaWduYXR1cmUgMHglMDh4IGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgIuWkmuWMhee0ouW8leewveWQjSAweCUwOHgg5ZKM57C95ZCNIDB4JTA4eCDkuI3nrKblkIgiCisKKyM6IG1pZHguYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHZlcnNpb24gJWQgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXgg54mI5pysICVkIOS4jeiDveiiq+itmOWIpSIKKworIzogbWlkeC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggdmVyc2lvbiAldSBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAi5pWj5YiX54mI5pysICV1IOS4jeespuWQiCIKKworIzogbWlkeC5jOjEwOAorbXNnaWQgImludmFsaWQgY2h1bmsgb2Zmc2V0ICh0b28gbGFyZ2UpIgorbXNnc3RyICLnhKHmlYjnmoTljYDloYrkvY3np7vvvIjlpKrlpKfvvIkiCisKKyM6IG1pZHguYzoxMzIKK21zZ2lkICJ0ZXJtaW5hdGluZyBtdWx0aS1wYWNrLWluZGV4IGNodW5rIGlkIGFwcGVhcnMgZWFybGllciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICLntYLmraLlpJrljIXntKLlvJXljYDloYogaWQg5Ye654++5pmC6ZaT5pep5pa86aCQ5pyfIgorCisjOiBtaWR4LmM6MTQ1Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIHBhY2stbmFtZSBjaHVuayIKK21zZ3N0ciAi5aSa5YyF57Si5byV57y65bCR5b+F6ZyA55qE5YyF5ZCN5aGKIgorCisjOiBtaWR4LmM6MTQ3Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBmYW5vdXQgY2h1bmsiCittc2dzdHIgIuWkmuWMhee0ouW8lee8uuWwkeW/hemcgOeahOeJqeS7tiBJRCDmiYflh7rloYoiCisKKyM6IG1pZHguYzoxNDkKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGxvb2t1cCBjaHVuayIKK21zZ3N0ciAi5aSa5YyF57Si5byV57y65bCR5b+F6ZyA55qE54mp5Lu2IElEIOafpeipouWhiiIKKworIzogbWlkeC5jOjE1MQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBvYmplY3Qgb2Zmc2V0cyBjaHVuayIKK21zZ3N0ciAi5aSa5YyF57Si5byV57y65bCR5b+F6ZyA55qE54mp5Lu25L2N56e75aGKIgorCisjOiBtaWR4LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggcGFjayBuYW1lcyBvdXQgb2Ygb3JkZXI6ICclcycgYmVmb3JlICclcyciCittc2dzdHIgIuWkmuWMhee0ouW8leWMheWQjeeEoeW6j++8miclcycg5ZyoICclcycg5LmL5YmNIgorCisjOiBtaWR4LmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLWludC1pZDogJXUgKCV1IHRvdGFsIHBhY2tzKSIKK21zZ3N0ciAi6Yyv55qEIHBhY2staW50LWlk77yaJXXvvIjlhbHmnIkgJXUg5YCL5YyF77yJIgorCisjOiBtaWR4LmM6MjYwCittc2dpZCAibXVsdGktcGFjay1pbmRleCBzdG9yZXMgYSA2NC1iaXQgb2Zmc2V0LCBidXQgb2ZmX3QgaXMgdG9vIHNtYWxsIgorbXNnc3RyICLlpJrljIXntKLlvJXlhLLlrZjkuIDlgIs2NOS9jeS9jeenu++8jOS9huaYryBvZmZfdCDlpKrlsI8iCisKKyM6IG1pZHguYzoyODgKK21zZ2lkICJlcnJvciBwcmVwYXJpbmcgcGFja2ZpbGUgZnJvbSBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICLlvp7lpJrljIXntKLlvJXmupblgpkgcGFja2ZpbGUg5pmC55m855Sf6Yyv6KqkIgorCisjOiBtaWR4LmM6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhZGQgcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAi5paw5aKeIHBhY2tmaWxlICclcycg5aSx5pWXIgorCisjOiBtaWR4LmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBhY2staW5kZXggJyVzJyIKK21zZ3N0ciAi6ZaL5ZWf5YyF57Si5byVICclcycg5aSx5pWXIgorCisjOiBtaWR4LmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2NhdGUgb2JqZWN0ICVkIGluIHBhY2tmaWxlIgorbXNnc3RyICLlnKggcGFja2ZpbGUg5Lit5a6a5L2N54mp5Lu2ICVkIOWkseaVlyIKKworIzogbWlkeC5jOjg0MgorbXNnaWQgIkFkZGluZyBwYWNrZmlsZXMgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAi5q2j5Zyo5paw5aKeIHBhY2tmaWxlIOiHs+WkmuWMhee0ouW8lSIKKworIzogbWlkeC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHNlZSBwYWNrLWZpbGUgJXMgdG8gZHJvcCIKK21zZ3N0ciAi5rKS5pyJ55yL5Yiw6KaB5o2o5qOE55qE5YyF5qqU5qGIICVzIgorCisjOiBtaWR4LmM6OTczCittc2dpZCAiV3JpdGluZyBjaHVua3MgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAi5a+r5YWl5Y2A5aGK6Iez5aSa5YyF57Si5byVIgorCisjOiBtaWR4LmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2xlYXIgbXVsdGktcGFjay1pbmRleCBhdCAlcyIKK21zZ3N0ciAi5riF55CG5L2N5pa8ICVzIOeahOWkmuWMhee0ouW8leWkseaVlyIKKworIzogbWlkeC5jOjExMDgKK21zZ2lkICJMb29raW5nIGZvciByZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAi5q2j5Zyo5bCL5om+5byV55So55qEIHBhY2tmaWxlIgorCisjOiBtaWR4LmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisib2lkIGZhbm91dCBvdXQgb2Ygb3JkZXI6IGZhbm91dFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSBmYW5vdXRbJWRdIgorbXNnc3RyICLnianku7YgSUQg5omH5Ye654Sh5bqP77yaZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCisKKyM6IG1pZHguYzoxMTI4Cittc2dpZCAiVmVyaWZ5aW5nIE9JRCBvcmRlciBpbiBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICLmraPlnKjpqZforYnlpJrljIXntKLlvJXkuK3nmoTnianku7YgSUQg6aCG5bqPIgorCisjOiBtaWR4LmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICJvaWQgbG9va3VwIG91dCBvZiBvcmRlcjogb2lkWyVkXSA9ICVzID49ICVzID0gb2lkWyVkXSIKK21zZ3N0ciAi54mp5Lu2IElEIOafpeipoueEoeW6j++8mm9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCisKKyM6IG1pZHguYzoxMTU3Cittc2dpZCAiU29ydGluZyBvYmplY3RzIGJ5IHBhY2tmaWxlIgorbXNnc3RyICLpgI/pgY4gcGFja2ZpbGUg54K654mp5Lu25o6S5bqPIgorCisjOiBtaWR4LmM6MTE2NAorbXNnaWQgIlZlcmlmeWluZyBvYmplY3Qgb2Zmc2V0cyIKK21zZ3N0ciAi5q2j5Zyo6amX6K2J54mp5Lu25L2N56e7IgorCisjOiBtaWR4LmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrIGVudHJ5IGZvciBvaWRbJWRdID0gJXMiCittc2dzdHIgIueCuiBvaWRbJWRdID0gJXMg6LyJ5YWl5YyF5qKd55uu5aSx5pWXIgorCisjOiBtaWR4LmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrLWluZGV4IGZvciBwYWNrZmlsZSAlcyIKK21zZ3N0ciAi54K6IHBhY2tmaWxlICVzIOi8ieWFpeWMhee0ouW8leWkseaVlyIKKworIzogbWlkeC5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb3JyZWN0IG9iamVjdCBvZmZzZXQgZm9yIG9pZFslZF0gPSAlczogJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKK21zZ3N0ciAib2lkWyVkXSA9ICVzIOmMr+iqpOeahOeJqeS7tuS9jeenu++8miU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCisKKyM6IG1pZHguYzoxMjIwCittc2dpZCAiQ291bnRpbmcgcmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICLmraPlnKjoqIjnrpflvJXnlKjnianku7YiCisKKyM6IG1pZHguYzoxMjMwCittc2dpZCAiRmluZGluZyBhbmQgZGVsZXRpbmcgdW5yZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAi5q2j5Zyo5bCL5om+5Lim5Yiq6Zmk5rKS5pyJ5Y+D6ICD55qEIHBhY2tmaWxlIgorCisjOiBtaWR4LmM6MTM4OAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMiCittc2dzdHIgIuS4jeiDvemWi+WniyBwYWNrLW9iamVjdHMiCisKKyM6IG1pZHguYzoxNDA3Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMiCittc2dzdHIgIuS4jeiDvee1kOadnyBwYWNrLW9iamVjdHMiCisKKyM6IG5hbWUtaGFzaC5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfZGlyIHRocmVhZDogJXMiCittc2dzdHIgIuS4jeiDveW7uueriyBsYXp5X2RpciDln7fooYznt5LvvJolcyIKKworIzogbmFtZS1oYXNoLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgIuS4jeiDveW7uueriyBsYXp5X25hbWUg5Z+36KGM57eS77yaJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsYXp5X25hbWUgdGhyZWFkOiAlcyIKK21zZ3N0ciAi5LiN6IO95Yqg5YWlIGxhc3lfbmFtZSDln7fooYznt5LvvJolcyIKKworIzogbm90ZXMtbWVyZ2UuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBwcmV2aW91cyBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIHVzZSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHRvICIKKyJjb21taXQvYWJvcnQgdGhlIHByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgbm90ZXMgbWVyZ2UuIgorbXNnc3RyICIiCisi5oKo55qE5YmN5LiA5qyh5YKZ6Ki75ZCI5L215bCa5pyq57WQ5p2f77yI5a2Y5ZyoICVz77yJ44CCXG4iCisi5Zyo6ZaL5aeL5LiA5YCL5paw55qE5YKZ6Ki75ZCI5L215LmL5YmN77yM6KuL5L2/55SoICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIOaIluiAhSAnZ2l0ICIKKyJub3RlcyBtZXJnZSAtLWFib3J0JyDkvobmj5DkuqQv57WC5q2i5YmN5LiA5qyh5ZCI5L2144CCIgorCisjOiBub3Rlcy1tZXJnZS5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuIgorbXNnc3RyICLmgqjlsJrmnKrntZDmnZ/lgpnoqLvlkIjkvbXvvIjlrZjlnKggJXPvvInjgIIiCisKKyM6IG5vdGVzLXV0aWxzLmM6NDYKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIuS4jeiDveaPkOS6pOacquWIneWni+WMli/mnKrlvJXnlKjnmoToqLvop6PmqLkiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAi5aOe55qEIG5vdGVzLnJld3JpdGVNb2RlIOWAvO+8miclcyciCisKKyM6IG5vdGVzLXV0aWxzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICLmi5LntZXlkJEgJXPvvIjlnKggcmVmcy9ub3Rlcy8g5LmL5aSW77yJ5a+r5YWl6Ki76KejIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mCisjLiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMKKyMuIGl0cyB2YWx1ZS4KKyMuCisjOiBub3Rlcy11dGlscy5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIuWjnueahCAlcyDlgLzvvJonJXMnIgorCisjOiBvYmplY3QuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIFwiJXNcIiIKK21zZ3N0ciAi54Sh5pWI55qE54mp5Lu26aGe5Z6LIFwiJXNcIiIKKworIzogb2JqZWN0LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBhICVzLCBub3QgYSAlcyIKK21zZ3N0ciAi54mp5Lu2ICVzIOaYr+S4gOWAiyAlc++8jOS4jeaYr+S4gOWAiyAlcyIKKworIzogb2JqZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBoYXMgdW5rbm93biB0eXBlIGlkICVkIgorbXNnc3RyICLnianku7YgJXMg5pyJ5pyq55+l55qE6aGe5Z6LIGlkICVkIgorCisjOiBvYmplY3QuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdDogJXMiCittc2dzdHIgIuS4jeiDveino+aekOeJqeS7tu+8miVzIgorCisjOiBvYmplY3QuYzoyNjYgb2JqZWN0LmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggJXMiCittc2dzdHIgIumbnOa5iuWAvOiIhyAlcyDkuI3nrKblkIgiCisKKyM6IHBhY2tmaWxlLmM6NjI5Cittc2dpZCAib2Zmc2V0IGJlZm9yZSBlbmQgb2YgcGFja2ZpbGUgKGJyb2tlbiAuaWR4PykiCittc2dzdHIgIuS9jeenu+mHj+WcqCBwYWNrZmlsZSDntZDmnZ/kuYvliY3vvIjmkI3lo57nmoQgLmlkeO+8n++8iSIKKworIzogcGFja2ZpbGUuYzoxODk5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZWZvcmUgc3RhcnQgb2YgcGFjayBpbmRleCBmb3IgJXMgKGNvcnJ1cHQgaW5kZXg/KSIKK21zZ3N0ciAi5L2N56e76YeP5ZyoICVzIOeahOWMhee0ouW8lemWi+Wni+S5i+WJje+8iOaQjeWjnueahOe0ouW8le+8n++8iSIKKworIzogcGFja2ZpbGUuYzoxOTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZXlvbmQgZW5kIG9mIHBhY2sgaW5kZXggZm9yICVzICh0cnVuY2F0ZWQgaW5kZXg/KSIKK21zZ3N0ciAi5L2N56e76YeP6LaK6YGO5LqGICVzIOeahOWMhee0ouW8leeahOe1kOWwvu+8iOiiq+aIquaWt+eahOe0ouW8le+8n++8iSIKKworIzogcGFjay1iaXRtYXAuYzo4MDAgcGFjay1iaXRtYXAuYzo4MDYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgc2l6ZSBvZiAlcyIKK21zZ3N0ciAi5LiN6IO95b6X5YiwICVzIOeahOWkp+WwjyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIiVzIOmcgOimgeS4gOWAi+WAvCIKKworIzogcGFyc2Utb3B0aW9ucy5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGluY29tcGF0aWJsZSB3aXRoICVzIgorbXNnc3RyICIlcyDoiIcgJXMg5LiN55u45a65IgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBpbmNvbXBhdGlibGUgd2l0aCBzb21ldGhpbmcgZWxzZSIKK21zZ3N0ciAiJXPvvJrlkozlhbblroPnmoTkuI3nm7jlrrkiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MiBwYXJzZS1vcHRpb25zLmM6OTYgcGFyc2Utb3B0aW9ucy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0YWtlcyBubyB2YWx1ZSIKK21zZ3N0ciAiJXMg5LiN5Y+W5YC8IgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXNuJ3QgYXZhaWxhYmxlIgorbXNnc3RyICIlcyDkuI3lj6/nlKgiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIHdpdGggYW4gb3B0aW9uYWwgay9tL2cgc3VmZml4IgorbXNnc3RyICIlcyDmnJ/mnJvkuIDlgIvpnZ7osqDmlbTmlbjlkozkuIDlgIvlj6/pgbjnmoQgay9tL2cg5b6M57a0IgorCisjOiBwYXJzZS1vcHRpb25zLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyBvcHRpb246ICVzIChjb3VsZCBiZSAtLSVzJXMgb3IgLS0lcyVzKSIKK21zZ3N0ciAi5pyJ5q2n576p55qE6YG46aCF77yaJXPvvIjlj6/ku6XmmK8gLS0lcyVzIOaIliAtLSVzJXPvvIkiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo0MjAgcGFyc2Utb3B0aW9ucy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgeW91IG1lYW4gYC0tJXNgICh3aXRoIHR3byBkYXNoZXMpPyIKK21zZ3N0ciAi5L2g55qE5oSP5oCd5pivIGAtLSVzYO+8iOacieWFqeWAi+efree3mu+8ieWXju+8nyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiBgJXMnIgorbXNnc3RyICLmnKrnn6XpgbjpoIUgYCVzJyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN3aXRjaCBgJWMnIgorbXNnc3RyICLmnKrnn6Xplovpl5wgYCVjJyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vbi1hc2NpaSBvcHRpb24gaW4gc3RyaW5nOiBgJXMnIgorbXNnc3RyICLlrZfkuLLkuK3mnKrnn6XnmoTpnZ4gYXNjaWkg5a2X5YWD6YG46aCF77yaYCVzJyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg4NQorbXNnaWQgIi4uLiIKK21zZ3N0ciAiLi4uIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyIKK21zZ3N0ciAi55So5rOV77yaJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBwYXJzZS1vcHRpb25zLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICDmiJbvvJolcyIKKworIyAg6K2v6ICF77ya54K65L+d6K2J5Zyo6Ly45Ye65Lit5bCN6b2K77yM5rOo5oSP6Kq/5pW05Y+l5Lit56m65qC877yBCisjOiBwYXJzZS1vcHRpb25zLmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTUyCittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLeaVuOWtlyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBvZiAtLSVzIgorbXNnc3RyICItLSVzIOeahOWIpeWQjSIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjIwIHBhcnNlLW9wdGlvbnMtY2IuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICLpgbjpoIUgYCVzJyDmnJ/mnJvkuIDlgIvmlbjlrZflgLwiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZXhwaXJhdGlvbiBkYXRlICclcyciCittc2dzdHIgIuagvOW8j+mMr+iqpOeahOWIsOacn+aZgumWk++8miclcyciCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIFwiYWx3YXlzXCIsIFwiYXV0b1wiLCBvciBcIm5ldmVyXCIiCittc2dzdHIgIumBuOmghSBgJXMnIOacn+acmyBcImFsd2F5c1wi44CBXCJhdXRvXCIg5oiWIFwibmV2ZXJcIiIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjEzMCBwYXJzZS1vcHRpb25zLWNiLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICLmoLzlvI/pjK/oqqTnmoTnianku7blkI0gJyVzJyIKKworIzogcGF0aC5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAi5LiN6IO96Kit5a6aICVzIOeCuue1hOWPr+WvqyIKKworIzogcGF0aHNwZWMuYzoxMzAKK21zZ2lkICJFc2NhcGUgY2hhcmFjdGVyICdcXCcgbm90IGFsbG93ZWQgYXMgbGFzdCBjaGFyYWN0ZXIgaW4gYXR0ciB2YWx1ZSIKK21zZ3N0ciAi6Lez6ISr5a2X5YWDICdcXCcg5LiN6IO95L2c54K65bGs5oCn5YC855qE5pyA5b6M5LiA5YCL5a2X5YWDIgorCisjOiBwYXRoc3BlYy5jOjE0OAorbXNnaWQgIk9ubHkgb25lICdhdHRyOicgc3BlY2lmaWNhdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAi5Y+q5YWB6Kix5LiA5YCLICdhdHRyOicg6KaP5qC844CCIgorCisjOiBwYXRoc3BlYy5jOjE1MQorbXNnaWQgImF0dHIgc3BlYyBtdXN0IG5vdCBiZSBlbXB0eSIKK21zZ3N0ciAi5bGs5oCn6KaP5qC85LiN6IO954K656m6IgorCisjOiBwYXRoc3BlYy5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSBuYW1lICVzIgorbXNnc3RyICLnhKHmlYjnmoTlsazmgKflkI0gJXMiCisKKyM6IHBhdGhzcGVjLmM6MjU5Cittc2dpZCAiZ2xvYmFsICdnbG9iJyBhbmQgJ25vZ2xvYicgcGF0aHNwZWMgc2V0dGluZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAi5YWo5Z+f55qEICdnbG9iJyDlkowgJ25vZ2xvYicg6Lev5b6R6KaP5qC86Kit5a6a5LiN55u45a65IgorCisjOiBwYXRoc3BlYy5jOjI2NgorbXNnaWQgIiIKKyJnbG9iYWwgJ2xpdGVyYWwnIHBhdGhzcGVjIHNldHRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIGdsb2JhbCAiCisicGF0aHNwZWMgc2V0dGluZ3MiCittc2dzdHIgIuWFqOWfn+eahCAnbGl0ZXJhbCcg6Lev5b6R6KaP5qC86Kit5a6a5ZKM5YW25a6D55qE5YWo5Z+f6Lev5b6R6KaP5qC86Kit5a6a5LiN55u45a65IgorCisjOiBwYXRoc3BlYy5jOjMwNgorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyIGZvciBwYXRoc3BlYyBtYWdpYyAncHJlZml4JyIKK21zZ3N0ciAi6Lev5b6R6KaP5qC85YyF5ZCr54Sh5pWI55qE56We5aWH5YmN57a0IgorCisjOiBwYXRoc3BlYy5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIgorbXNnc3RyICLlnKjot6/lvpHopo/moLwgJyUzJHMnIOS4reeEoeaViOeahOelnuWlh+WJjee2tCAnJTIkLioxJHMnIgorCisjOiBwYXRoc3BlYy5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcpJyBhdCB0aGUgZW5kIG9mIHBhdGhzcGVjIG1hZ2ljIGluICclcyciCittc2dzdHIgIui3r+W+keimj+agvCAnJXMnIOeahOelnuWlh+WJjee2tOe1kOWwvuWwkeS6huS4gOWAiyAnKSciCisKKyM6IHBhdGhzcGVjLmM6MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaW1wbGVtZW50ZWQgcGF0aHNwZWMgbWFnaWMgJyVjJyBpbiAnJXMnIgorbXNnc3RyICLot6/lvpHopo/moLwgJyUyJHMnIOS4reWMheWQq+acquWvpuePvueahOelnuWlh+WJjee2tCAnJTEkYyciCisKKyM6IHBhdGhzcGVjLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIlc++8midsaXRlcmFsJyDlkowgJ2dsb2InIOS4jeebuOWuuSIKKworIzogcGF0aHNwZWMuYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IGF0ICclcyciCittc2dzdHIgIiVz77yaJyVzJyDlnKjkvY3mlrwgJyVzJyDnmoTniYjmnKzluqvkuYvlpJYiCisKKyM6IHBhdGhzcGVjLmM6NTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgKG1uZW1vbmljOiAnJWMnKSIKK21zZ3N0ciAiJyVzJ++8iOWKqeiomOespu+8miclYyfvvIkiCisKKyM6IHBhdGhzcGVjLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiVz77ya6Lev5b6R6KaP5qC856We5aWH5YmN57a05LiN6KKr5q2k5oyH5Luk5pSv5o+077yaJXMiCisKKyM6IHBhdGhzcGVjLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAi6Lev5b6R6KaP5qC8ICclcycg5L2N5pa856ym6Jmf6YCj57WQ5LitIgorCisjOiBwYXRoc3BlYy5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lIGlzIGJhZGx5IHF1b3RlZDogJXMiCittc2dzdHIgIuafkOihjOS4jeaHieipsuiiq+aLrOiZn+aLrOS9j++8miVzIgorCisjOiBwa3QtbGluZS5jOjkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAi54Sh5rOV5a+rIGZsdXNoIOWMhSIKKworIzogcGt0LWxpbmUuYzo5OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBkZWxpbSBwYWNrZXQiCittc2dzdHIgIueEoeazleWvqyBkZWxpbSDljIUiCisKKyM6IHBrdC1saW5lLmM6MTA2Cittc2dpZCAiZmx1c2ggcGFja2V0IHdyaXRlIGZhaWxlZCIKK21zZ3N0ciAiZmx1c2gg5YyF5a+r6Yyv6KqkIgorCisjOiBwa3QtbGluZS5jOjE0NiBwa3QtbGluZS5jOjIzMgorbXNnaWQgInByb3RvY29sIGVycm9yOiBpbXBvc3NpYmx5IGxvbmcgbGluZSIKK21zZ3N0ciAi5Y2U5a6a6Yyv6Kqk77ya5LiN5Y+v6IO955qE6ZW36KGMIgorCisjOiBwa3QtbGluZS5jOjE2MiBwa3QtbGluZS5jOjE2NAorbXNnaWQgInBhY2tldCB3cml0ZSB3aXRoIGZvcm1hdCBmYWlsZWQiCittc2dzdHIgIuagvOW8j+WMluWMheWvq+WFpemMr+iqpCIKKworIzogcGt0LWxpbmUuYzoxOTYKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIC0gZGF0YSBleGNlZWRzIG1heCBwYWNrZXQgc2l6ZSIKK21zZ3N0ciAi5a+r5bCB5YyF5aSx5pWX77ya6LOH5paZ6LaF6YGO5LqG5YyF55qE5pyA5aSn6ZW35bqmIgorCisjOiBwa3QtbGluZS5jOjIwMyBwa3QtbGluZS5jOjIxMAorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgIuWwgeWMheWvq+WFpeWkseaVlyIKKworIzogcGt0LWxpbmUuYzoyOTUKK21zZ2lkICJyZWFkIGVycm9yIgorbXNnc3RyICLoroDlj5bpjK/oqqQiCisKKyM6IHBrdC1saW5lLmM6MzAzCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiCittc2dzdHIgIumBoOerr+aEj+WkluaOm+aWt+S6hiIKKworIzogcGt0LWxpbmUuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCBjaGFyYWN0ZXI6ICUuNHMiCittc2dzdHIgIuWNlOWumumMr+iqpO+8mumMr+iqpOeahOihjOmVt+W6puWtl+S4su+8miUuNHMiCisKKyM6IHBrdC1saW5lLmM6MzQxIHBrdC1saW5lLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggJWQiCittc2dzdHIgIuWNlOWumumMr+iqpO+8mumMr+iqpOeahOihjOmVt+W6piAlZCIKKworIzogcGt0LWxpbmUuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAi6YGg56uv6Yyv6Kqk77yaJXMiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMTkKK21zZ2lkICJSZWZyZXNoaW5nIGluZGV4IgorbXNnc3RyICLmraPlnKjph43mlrDmlbTnkIbntKLlvJUiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWRlZCBsc3RhdDogJXMiCittc2dzdHIgIueEoeazleW7uueri+Wft+ihjOe3kiBsc3RhdO+8miVzIgorCisjOiBwcmV0dHkuYzo5ODEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgLS1wcmV0dHkgZm9ybWF0IgorbXNnc3RyICLkuI3og73op6PmnpAgLS1wcmV0dHkg5qC85byPIgorCisjOiBwcm9taXNvci1yZW1vdGUuYzoyMworbXNnaWQgIlJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAi6YGg56uv5pyq6Kit5a6aIFVSTCIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbWlzb3IgcmVtb3RlIG5hbWUgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIKK21zZ3N0ciAicHJvbWlzb3Ig6YGg56uv5ZCN56ix5LiN6IO95LulICcvJyDplovlp4vvvJolcyIKKworIzogcmFuZ2UtZGlmZi5jOjc1Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGBsb2dgIgorbXNnc3RyICLkuI3og73llZ/li5UgYGxvZ2AiCisKKyM6IHJhbmdlLWRpZmYuYzo3NworbXNnaWQgImNvdWxkIG5vdCByZWFkIGBsb2dgIG91dHB1dCIKK21zZ3N0ciAi5LiN6IO96K6A5Y+WIGBsb2dgIOeahOi8uOWHuiIKKworIzogcmFuZ2UtZGlmZi5jOjk2IHNlcXVlbmNlci5jOjUwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAnJXMnIgorbXNnc3RyICLkuI3og73op6PmnpDmj5DkuqQgJyVzJyIKKworIzogcmFuZ2UtZGlmZi5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZ2l0IGhlYWRlciAnJS4qcyciCittc2dzdHIgIueEoeazleino+aekCBnaXQg6aCtICclLipzJyIKKworIzogcmFuZ2UtZGlmZi5jOjI4NQorbXNnaWQgImZhaWxlZCB0byBnZW5lcmF0ZSBkaWZmIgorbXNnc3RyICLnlJ/miJAgZGlmZiDlpLHmlZciCisKKyM6IHJhbmdlLWRpZmYuYzo1MTggcmFuZ2UtZGlmZi5jOjUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbG9nIGZvciAnJXMnIgorbXNnc3RyICLkuI3og73op6PmnpAgJyVzJyDnmoTml6XoqowiCisKKyM6IHJlYWQtY2FjaGUuYzo2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgYWRkIGZpbGUgYWxpYXMgJyVzJyAoJyVzJyBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCkiCittc2dzdHIgIuWwh+S4jeacg+aWsOWinuaqlOahiOWIpeWQjSAnJXMn77yIJyVzJyDlt7LntpPlrZjlnKjmlrzntKLlvJXkuK3vvIkiCisKKyM6IHJlYWQtY2FjaGUuYzo2OTYKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFuIGVtcHR5IGJsb2IgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAi5LiN6IO95Zyo54mp5Lu26LOH5paZ5bqr5Lit5bu656uL56m655qE6LOH5paZ54mp5Lu2IgorCisjOiByZWFkLWNhY2hlLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4gb25seSBhZGQgcmVndWxhciBmaWxlcywgc3ltYm9saWMgbGlua3Mgb3IgZ2l0LWRpcmVjdG9yaWVzIgorbXNnc3RyICIlc++8muWPquiDveaWsOWinuS4gOiIrOaqlOahiOOAgeespuiZn+mAo+e1kOaIliBnaXQg55uu6YyEIgorCisjOiByZWFkLWNhY2hlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAiJyVzJyDmspLmnInnsL3lh7rkuIDlgIvmj5DkuqQiCisKKyM6IHJlYWQtY2FjaGUuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGluZGV4IGZpbGUgJyVzJyIKK21zZ3N0ciAi54Sh5rOV57Si5byV5qqU5qGIICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzo3OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCAnJXMnIHRvIGluZGV4IgorbXNnc3RyICLnhKHms5XlnKjntKLlvJXkuK3mlrDlop4gJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCAnJXMnIgorbXNnc3RyICLnhKHms5XlsI0gJXMg5Z+36KGMIHN0YXQiCisKKyM6IHJlYWQtY2FjaGUuYzoxMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXBwZWFycyBhcyBib3RoIGEgZmlsZSBhbmQgYXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIiclcycg55yL6LW35L6G5pei5piv5qqU5qGI5Y+I5piv55uu6YyEIgorCisjOiByZWFkLWNhY2hlLmM6MTUzNgorbXNnaWQgIlJlZnJlc2ggaW5kZXgiCittc2dzdHIgIumHjeaWsOaVtOeQhue0ouW8lSIKKworIzogcmVhZC1jYWNoZS5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorIuioreWumuS6hiBpbmRleC52ZXJzaW9u77yM5L2G5piv5Y+W5YC854Sh5pWI44CCXG4iCisi5L2/55So54mI5pysICVpIgorCisjOiByZWFkLWNhY2hlLmM6MTY2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR0lUX0lOREVYX1ZFUlNJT04gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorIuioreWumuS6hiBHSVRfSU5ERVhfVkVSU0lPTu+8jOS9huaYr+WPluWAvOeEoeaViOOAglxuIgorIuS9v+eUqOeJiOacrCAlaSIKKworIzogcmVhZC1jYWNoZS5jOjE3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgIuWjnueahOewveWQjSAweCUwOHgiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICVkIgorbXNnc3RyICLlo57nmoTntKLlvJXniYjmnKwgJWQiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzI5Cittc2dpZCAiYmFkIGluZGV4IGZpbGUgc2hhMSBzaWduYXR1cmUiCittc2dzdHIgIuWjnueahOe0ouW8leaqlOahiCBzaGExIOewveWQjSIKKworIzogcmVhZC1jYWNoZS5jOjE3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggdXNlcyAlLjRzIGV4dGVuc2lvbiwgd2hpY2ggd2UgZG8gbm90IHVuZGVyc3RhbmQiCittc2dzdHIgIue0ouW8leS9v+eUqOS4jeiiq+aUr+aPtOeahCAlLjRzIOaTtOWxlSIKKworIworIzogcmVhZC1jYWNoZS5jOjE3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJS40cyBleHRlbnNpb24iCittc2dzdHIgIuW/veeVpSAlLjRzIOaTtOWxlSIKKworIzogcmVhZC1jYWNoZS5jOjE3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbmRleCBlbnRyeSBmb3JtYXQgMHglMDh4IgorbXNnc3RyICLmnKrnn6XnmoTntKLlvJXmop3nm67moLzlvI8gMHglMDh4IgorCisjOiByZWFkLWNhY2hlLmM6MTgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbmFtZSBmaWVsZCBpbiB0aGUgaW5kZXgsIG5lYXIgcGF0aCAnJXMnIgorbXNnc3RyICLntKLlvJXkuK3pnaDov5Hot6/lvpEgJyVzJyDmnInpjK/oqqTnmoTlkI3nqLHmrITkvY0iCisKKyM6IHJlYWQtY2FjaGUuYzoxODcxCittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgaW4gaW5kZXgiCittc2dzdHIgIue0ouW8leS4reacieacquaOkuW6j+eahOaaq+WtmOaineebriIKKworIzogcmVhZC1jYWNoZS5jOjE4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgc3RhZ2UgZW50cmllcyBmb3IgbWVyZ2VkIGZpbGUgJyVzJyIKK21zZ3N0ciAi5ZCI5L215qqU5qGIICclcycg5pyJ5aSa5YCL5pqr5a2Y5qKd55uuIgorCisjOiByZWFkLWNhY2hlLmM6MTg3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBmb3IgJyVzJyIKK21zZ3N0ciAiJyVzJyDnmoTmnKrmjpLluo/mmqvlrZjmop3nm64iCisKKyM6IHJlYWQtY2FjaGUuYzoxOTgzIHJlYWQtY2FjaGUuYzoyMjcxIHJlcmVyZS5jOjU2NSByZXJlcmUuYzo1OTkgcmVyZXJlLmM6MTExMQorIzogc3VibW9kdWxlLmM6MTYxOSBidWlsdGluL2FkZC5jOjUzMiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE4MQorIzogYnVpbHRpbi9jaGVja291dC5jOjQ3MCBidWlsdGluL2NoZWNrb3V0LmM6NjU2IGJ1aWx0aW4vY2xlYW4uYzo5NjcKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY3IGJ1aWx0aW4vZGlmZi10cmVlLmM6MTIwIGJ1aWx0aW4vZ3JlcC5jOjQ4NQorIzogYnVpbHRpbi9tdi5jOjE0NSBidWlsdGluL3Jlc2V0LmM6MjQ2IGJ1aWx0aW4vcm0uYzoyOTAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozMzIKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQiCittc2dzdHIgIue0ouW8leaqlOahiOaQjeWjniIKKworIzogcmVhZC1jYWNoZS5jOjIxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2NhY2hlX2VudHJpZXMgdGhyZWFkOiAlcyIKK21zZ3N0ciAi54Sh5rOV5bu656uLIGxvYWRfY2FjaGVfZW50cmllcyDln7fooYznt5LvvJolcyIKKworIzogcmVhZC1jYWNoZS5jOjIxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgIueEoeazleWKoOWFpSBsb2FkX2NhY2hlX2VudHJpZXMg5Z+36KGM57eS77yaJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIG9wZW4gZmFpbGVkIgorbXNnc3RyICIlc++8mumWi+WVn+e0ouW8leaqlOahiOWkseaVlyIKKworIzogcmVhZC1jYWNoZS5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4IgorbXNnc3RyICIlc++8muS4jeiDveWwjemWi+WVn+eahOe0ouW8leWft+ihjCBzdGF0IOWLleS9nCIKKworIzogcmVhZC1jYWNoZS5jOjIxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgc21hbGxlciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIlc++8mue0ouW8leaqlOahiOavlOmgkOacn+eahOWwjyIKKworIzogcmVhZC1jYWNoZS5jOjIxODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuYWJsZSB0byBtYXAgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXPvvJrnhKHms5XlsI3ntKLlvJXmqpTmoYjln7fooYwgbWFwIOWLleS9nCIKKworIzogcmVhZC1jYWNoZS5jOjIyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2luZGV4X2V4dGVuc2lvbnMgdGhyZWFkOiAlcyIKK21zZ3N0ciAi54Sh5rOV5bu656uLIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyDln7fooYznt5LvvJolcyIKKworIzogcmVhZC1jYWNoZS5jOjIyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgIueEoeazleWKoOWFpSBsb2FkX2luZGV4X2V4dGVuc2lvbnMg5Z+36KGM57eS77yaJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmcmVzaGVuIHNoYXJlZCBpbmRleCAnJXMnIgorbXNnc3RyICLnhKHms5Xph43mlrDmlbTnkIblhbHkuqvntKLlvJUgJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjIzMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGluZGV4LCBleHBlY3QgJXMgaW4gJXMsIGdvdCAlcyIKK21zZ3N0ciAi5pCN5aOe55qE57Si5byV77yM5pyf5pyb5ZyoICUyJHMg5Lit55qEICUxJHPvvIzlvpfliLAgJTMkcyIKKworIzogcmVhZC1jYWNoZS5jOjMwMjYgc3RyYnVmLmM6MTE2MCB3cmFwcGVyLmM6NjIyIGJ1aWx0aW4vbWVyZ2UuYzoxMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAnJXMnIgorbXNnc3RyICLkuI3og73pl5zplokgJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjMxMjkgc2VxdWVuY2VyLmM6MjM0MyBzZXF1ZW5jZXIuYzozOTU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIuS4jeiDveWwjSAnJXMnIOWRvOWPqyBzdGF0IgorCisjOiByZWFkLWNhY2hlLmM6MzE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBnaXQgZGlyOiAlcyIKK21zZ3N0ciAi5LiN6IO96ZaL5ZWfIGdpdCDnm67pjITvvJolcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVubGluazogJXMiCittc2dzdHIgIueEoeazleWIqumZpO+8miVzIgorCisjOiByZWFkLWNhY2hlLmM6MzE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZml4IHBlcm1pc3Npb24gYml0cyBvbiAnJXMnIgorbXNnc3RyICLkuI3og73kv67lvqkgJyVzJyDnmoTmrIrpmZDkvY0iCisKKyM6IHJlYWQtY2FjaGUuYzozMzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgZHJvcCB0byBzdGFnZSAjMCIKK21zZ3N0ciAiJXPvvJrkuI3og73okL3liLDmmqvlrZjljYAgIzAiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjExCittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoaXMgd2l0aCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlJy5cbiIKKyJPciB5b3UgY2FuIGFib3J0IHRoZSByZWJhc2Ugd2l0aCAnZ2l0IHJlYmFzZSAtLWFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIuaCqOWPr+S7peeUqCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycg5L+u5q2j77yM54S25b6M5Z+36KGMICdnaXQgcmViYXNlIC0tY29udGludWUn44CCXG4iCisi5oiW6ICF5oKo5Y+v5Lul55SoICdnaXQgcmViYXNlIC0tYWJvcnQnIOe1guatoumHjeWumuWfuuW6leOAglxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzozMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5yZWNvZ25pemVkIHNldHRpbmcgJXMgZm9yIG9wdGlvbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JpbmcuIgorbXNnc3RyICLpgbjpoIUgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sg55qE5YC8ICVzIOeEoeazleitmOWIpeOAguW3suW/veeVpeOAgiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NDIKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1hbmQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImIsIGJyZWFrID0gc3RvcCBoZXJlIChjb250aW51ZSByZWJhc2UgbGF0ZXIgd2l0aCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJylcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyLmjIfku6Q6XG4iCisicCwgcGljayA85o+Q5LqkPiA9IOS9v+eUqOaPkOS6pFxuIgorInIsIHJld29yZCA85o+Q5LqkPiA9IOS9v+eUqOaPkOS6pO+8jOS9huS/ruaUueaPkOS6pOiqquaYjlxuIgorImUsIGVkaXQgPOaPkOS6pD4gPSDkvb/nlKjmj5DkuqTvvIzpgLLlhaUgc2hlbGwg5Lul5L6/6YCy6KGM5o+Q5Lqk5L+u6KOcXG4iCisicywgc3F1YXNoIDzmj5DkuqQ+ID0g5L2/55So5o+Q5Lqk77yM5L2G6J6N5ZCI5Yiw5YmN5LiA5YCL5o+Q5LqkXG4iCisiZiwgZml4dXAgPOaPkOS6pD4gPSDpoZ7kvLzmlrwgXCJzcXVhc2hcIu+8jOS9huaNqOajhOaPkOS6pOiqquaYjuaXpeiqjFxuIgorIngsIGV4ZWMgPOaMh+S7pD4gPSDkvb/nlKggc2hlbGwg5Z+36KGM5oyH5Luk77yI5q2k6KGM5Ymp6aSY6YOo5YiG77yJXG4iCisiYiwgYnJlYWsgPSDlnKjmraTomZXlgZzmraLvvIjkvb/nlKggJ2dpdCByZWJhc2UgLS1jb250aW51ZScg57m857qM6YeN5a6a5Z+65bqV77yJXG4iCisiZCwgZHJvcCA85o+Q5LqkPiA9IOWIqumZpOaPkOS6pFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSDngrrnm67liY0gSEVBRCDmiZPkuIrmqJnoqJhcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0g6YeN6KitIEhFQUQg5Yiw6Kmy5qiZ6KiYXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAg5bu656uL5LiA5YCL5ZCI5L215o+Q5Lqk77yM5Lim5L2/55So5Y6f5aeL55qE5ZCI5L215o+Q5Lqk6Kqq5piO77yI5aaC5p6c5rKS5pyJ5oyH5a6aXG4iCisiLiAgICAgICDljp/lp4vmj5DkuqTvvIzkvb/nlKjlgpnoqLvpg6jliIbnmoQgb25lbGluZSDkvZzngrrmj5DkuqToqqrmmI7vvInjgILkvb/nlKhcbiIKKyIuICAgICAgIC1jIDzmj5DkuqQ+IOWPr+S7pee3qOi8r+aPkOS6pOiqquaYjuOAglxuIgorIlxuIgorIuWPr+S7peWwjemAmeS6m+ihjOmHjeaWsOaOkuW6j++8jOWwh+W+nuS4iuiHs+S4i+Wft+ihjOOAglxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kcykiCittc2dzdHJbMF0gIumHjeWumuWfuuW6lSAlcyDliLAgJXPvvIglZCDlgIvmj5DkuqTvvIkiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjcyIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMjgKK21zZ2lkICIiCisiXG4iCisiRG8gbm90IHJlbW92ZSBhbnkgbGluZS4gVXNlICdkcm9wJyBleHBsaWNpdGx5IHRvIHJlbW92ZSBhIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuS4jeimgeWIqumZpOS7u+aEj+S4gOihjOOAguS9v+eUqCAnZHJvcCcg6aGv5byP5Zyw5Yiq6Zmk5LiA5YCL5o+Q5Lqk44CCXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc1IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMzIKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLlpoLmnpzmgqjlnKjpgJnoo6HliKrpmaTkuIDooYzvvIzlsI3mh4nnmoTmj5DkuqTlsIfmnIPpgbrlpLHjgIJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6ODEgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg3MQorbXNnaWQgIiIKKyJcbiIKKyJZb3UgYXJlIGVkaXRpbmcgdGhlIHRvZG8gZmlsZSBvZiBhbiBvbmdvaW5nIGludGVyYWN0aXZlIHJlYmFzZS5cbiIKKyJUbyBjb250aW51ZSByZWJhc2UgYWZ0ZXIgZWRpdGluZywgcnVuOlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIuaCqOato+WcqOS/ruaUuemAsuihjOS4reeahOS6kuWLleW8j+mHjeWumuWfuuW6leW+hei+puWIl+ihqOOAguiLpeimgeWcqOe3qOi8r+e1kOadn+W+jOe5vOe6jOmHjeWumuWfuuW6le+8jFxuIgorIuiri+Wft+ihjO+8mlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6ODYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0OAorbXNnaWQgIiIKKyJcbiIKKyJIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisi54S26ICM77yM5aaC5p6c5oKo5Yiq6Zmk5YWo6YOo5YWn5a6577yM6YeN5a6a5Z+65bqV5YuV5L2c5bCH5pyD57WC5q2i44CCXG4iCisiXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjExMCByZXJlcmUuYzo0ODUgcmVyZXJlLmM6NjkyIHNlcXVlbmNlci5jOjM0NDQKKyM6IHNlcXVlbmNlci5jOjM0NzAgc2VxdWVuY2VyLmM6NTEyNSBidWlsdGluL2ZzY2suYzozNDYgYnVpbHRpbi9yZWJhc2UuYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlICclcyciCittc2dzdHIgIuS4jeiDveWvq+WFpSAnJXMnIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMTYgYnVpbHRpbi9yZWJhc2UuYzoxODQgYnVpbHRpbi9yZWJhc2UuYzoyMTAKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnLiIKK21zZ3N0ciAi5LiN6IO95a+r5YWlICclcyfjgIIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc29tZSBjb21taXRzIG1heSBoYXZlIGJlZW4gZHJvcHBlZCBhY2NpZGVudGFsbHkuXG4iCisiRHJvcHBlZCBjb21taXRzIChuZXdlciB0byBvbGRlcik6XG4iCittc2dzdHIgIiIKKyLorablkYrvvJrkuIDkupvmj5DkuqTlj6/og73ooqvmhI/lpJbmjajmo4TjgIJcbiIKKyLmjajmo4TnmoTmj5DkuqTvvIjlvp7mlrDliLDoiIrvvInvvJpcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSBcImRyb3BcIiB0byBleHBsaWNpdGx5IHJlbW92ZSBhIGNvbW1pdC5cbiIKKyJcbiIKKyJVc2UgJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2YgIgorIndhcm5pbmdzLlxuIgorIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIueCuumBv+WFjemAmeaineioiuaBr++8jOS9v+eUqCBcImRyb3BcIiDmjIfku6Tpoa/lvI/lnLDliKrpmaTkuIDlgIvmj5DkuqTjgIJcbiIKKyJcbiIKKyLkvb/nlKggJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIOS+huS/ruaUueitpuWRiue0muWIpeOAglxuIgorIuWPr+mBuOWAvOacie+8mmlnbm9yZeOAgXdhcm7jgIFlcnJvcuOAglxuIgorIlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoyMzMgcmViYXNlLWludGVyYWN0aXZlLmM6MjM4IHNlcXVlbmNlci5jOjIyNjIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTcwIGJ1aWx0aW4vcmViYXNlLmM6MTk1IGJ1aWx0aW4vcmViYXNlLmM6MjIxCisjOiBidWlsdGluL3JlYmFzZS5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnLiIKK21zZ3N0ciAi5LiN6IO96K6A5Y+WICclcyfjgIIiCisKKyM6IHJlZnMuYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QhIgorbXNnc3RyICIlcyDmspLmnInmjIflkJHkuIDlgIvmnInmlYjnmoTnianku7bvvIEiCisKKyM6IHJlZnMuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgZGFuZ2xpbmcgc3ltcmVmICVzIgorbXNnc3RyICLlv73nlaXmh7jnqbrnrKbomZ/lvJXnlKggJXMiCisKKyM6IHJlZnMuYzo2NjkgcmVmLWZpbHRlci5jOjIwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIKK21zZ3N0ciAi5b+955Wl5pCN5aOe55qE5byV55SoICVzIgorCisjOiByZWZzLmM6ODA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICLnhKHms5Xngrrlr6vlhaXplovllZ8gJyVzJ++8miVzIgorCisjOiByZWZzLmM6ODE0IHJlZnMuYzo4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICclcyciCittc2dzdHIgIueEoeazleiugOWPluW8leeUqCAnJXMnIgorCisjOiByZWZzLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLlvJXnlKggJyVzJyDlt7LntpPlrZjlnKgiCisKKyM6IHJlZnMuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciCittc2dzdHIgIuWvq+WFpSAnJXMnIOaZguaEj+WklueahOeJqeS7tiBJRCIKKworIzogcmVmcy5jOjgzMyBzZXF1ZW5jZXIuYzo0MDcgc2VxdWVuY2VyLmM6MjcwMSBzZXF1ZW5jZXIuYzoyOTA1CisjOiBzZXF1ZW5jZXIuYzoyOTE5IHNlcXVlbmNlci5jOjMxNzcgc2VxdWVuY2VyLmM6NTAzNiBzdHJidWYuYzoxMTU3CisjOiB3cmFwcGVyLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICLkuI3og73lr6vlhaUgJyVzJyIKKworIzogcmVmcy5jOjg2MCBzdHJidWYuYzoxMTU1IHdyYXBwZXIuYzoxODggd3JhcHBlci5jOjM1OCBidWlsdGluL2FtLmM6NzE5CisjOiBidWlsdGluL3JlYmFzZS5jOjEwMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWfICclcycg6YCy6KGM5a+r5YWlIgorCisjOiByZWZzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gZGVsZXRpbmcgJyVzJyIKK21zZ3N0ciAi5Yiq6ZmkICclcycg5pmC5oSP5aSW55qE54mp5Lu2IElEIgorCisjOiByZWZzLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIGhhcyBnYXAgYWZ0ZXIgJXMiCittc2dzdHIgIuW8leeUqCAlcyDnmoTml6XoqozlnKggJXMg5LmL5b6M5pyJ57y65Y+jIgorCisjOiByZWZzLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyB1bmV4cGVjdGVkbHkgZW5kZWQgb24gJXMiCittc2dzdHIgIuW8leeUqCAlcyDnmoTml6XoqozmhI/lpJbntYLmraLmlrwgJXMgIgorCisjOiByZWZzLmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICVzIGlzIGVtcHR5IgorbXNnc3RyICIlcyDnmoTml6XoqozngrrnqboiCisKKyM6IHJlZnMuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIHVwZGF0ZSByZWYgd2l0aCBiYWQgbmFtZSAnJXMnIgorbXNnc3RyICLmi5LntZXmm7TmlrDmnInpjK/oqqTlkI3nqLEgJyVzJyDnmoTlvJXnlKgiCisKKyM6IHJlZnMuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVwZGF0ZV9yZWYgZmFpbGVkIGZvciByZWYgJyVzJzogJXMiCittc2dzdHIgIuWwjeW8leeUqCAnJXMnIOWft+ihjCB1cGRhdGVfcmVmIOWkseaVl++8miVzIgorCisjOiByZWZzLmM6MjAyMworIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSB1cGRhdGVzIGZvciByZWYgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAi5LiN5YWB6Kix5bCN5byV55SoICclcycg5aSa5qyh5pu05pawIgorCisjOiByZWZzLmM6MjA1NQorbXNnaWQgInJlZiB1cGRhdGVzIGZvcmJpZGRlbiBpbnNpZGUgcXVhcmFudGluZSBlbnZpcm9ubWVudCIKK21zZ3N0ciAi5Zyo6ZqU6Zui55Kw5aKD5Lit56aB5q2i5pu05paw5byV55SoIgorCisjOiByZWZzLmM6MjE1MSByZWZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICInJXMnIOW3suWtmOWcqO+8jOeEoeazleW7uueriyAnJXMnIgorCisjOiByZWZzLmM6MjE1NyByZWZzLmM6MjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcHJvY2VzcyAnJXMnIGFuZCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIueEoeazleWQjOaZguiZleeQhiAnJXMnIOWSjCAnJXMnIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgcmVmZXJlbmNlICVzIgorbXNnc3RyICLnhKHms5XliKrpmaTlvJXnlKggJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNDcgcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NDEKKyM6IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIKK21zZ3N0ciAi54Sh5rOV5Yiq6Zmk5byV55SoICVz77yaJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNTAgcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIKK21zZ3N0ciAi54Sh5rOV5Yiq6Zmk5byV55So77yaJXMiCisKKyM6IHJlZnNwZWMuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZzcGVjICclcyciCittc2dzdHIgIueEoeaViOeahOW8leeUqOihqOmBlOW8j++8miclcyciCisKKyM6IHJlZi1maWx0ZXIuYzo0MiB3dC1zdGF0dXMuYzoxOTM4Cittc2dpZCAiZ29uZSIKK21zZ3N0ciAi6YG65aSxIgorCisjOiByZWYtZmlsdGVyLmM6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQiCittc2dzdHIgIumgmOWFiCAlZCIKKworIzogcmVmLWZpbHRlci5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImJlaGluZCAlZCIKK21zZ3N0ciAi6JC95b6MICVkIgorCisjOiByZWYtZmlsdGVyLmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQsIGJlaGluZCAlZCIKK21zZ3N0ciAi6aCY5YWIICVk77yM6JC95b6MICVkIgorCisjOiByZWYtZmlsdGVyLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoY29sb3I6PGNvbG9yPikiCittc2dzdHIgIuacn+acm+eahOagvOW8j++8miUlKGNvbG9yOjzpoY/oibI+KSIKKworIzogcmVmLWZpbHRlci5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgY29sb3I6ICUlKGNvbG9yOiVzKSIKK21zZ3N0ciAi5pyq6IO96K2Y5Yil55qE6aGP6Imy77yaJSUoY29sb3I6JXMpIgorCisjOiByZWYtZmlsdGVyLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpsc3RyaXA9JXMiCittc2dzdHIgIuacn+acm+aVtOaVuOWAvCByZWZuYW1lOmxzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6cnN0cmlwPSVzIgorbXNnc3RyICLmnJ/mnJvmlbTmlbjlgLwgcmVmbmFtZTpyc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKCVzKSBhcmd1bWVudDogJXMiCittc2dzdHIgIuacquiDveitmOWIpeeahCAlJSglcykg5Y+D5pW477yaJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUob2JqZWN0dHlwZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKG9iamVjdHR5cGUpIOS4jeW4tuWPg+aVuCIKKworIzogcmVmLWZpbHRlci5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0c2l6ZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLmnKrog73orZjliKXnmoQgJSUob2JqZWN0c2l6ZSkg5Y+D5pW477yaJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoZGVsdGFiYXNlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoZGVsdGFiYXNlKSDkuI3luLblj4PmlbgiCisKKyM6IHJlZi1maWx0ZXIuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoYm9keSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGJvZHkpIOS4jeW4tuWPg+aVuCIKKworIzogcmVmLWZpbHRlci5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlJShzdWJqZWN0KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoc3ViamVjdCkg5LiN5bi25Y+D5pW4IgorCisjOiByZWYtZmlsdGVyLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gJSUodHJhaWxlcnMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq55+l55qEICUlKHRyYWlsZXJzKSDlj4PmlbjvvJolcyIKKworIzogcmVmLWZpbHRlci5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAi5pyf5pyb5LiA5YCL5q2j5pW4IGNvbnRlbnRzOmxpbmVzPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShjb250ZW50cykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLmnKrog73orZjliKXnmoQgJSUoY29udGVudHMpIOWPg+aVuO+8miVzIgorCisjOiByZWYtZmlsdGVyLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIG9iamVjdG5hbWU6c2hvcnQ9JXMiCittc2dzdHIgIuacn+acm+S4gOWAi+ato+aVuCBvYmplY3RuYW1lOnNob3J0PSVzIgorCisjOiByZWYtZmlsdGVyLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RuYW1lKSBhcmd1bWVudDogJXMiCittc2dzdHIgIuacquiDveitmOWIpeeahCAlJShvYmplY3RuYW1lKSDlj4PmlbjvvJolcyIKKworIzogcmVmLWZpbHRlci5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCittc2dzdHIgIuacn+acm+eahOagvOW8j++8miUlKGFsaWduOjzlr6zluqY+LDzkvY3nva4+KSIKKworIzogcmVmLWZpbHRlci5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcG9zaXRpb246JXMiCittc2dzdHIgIuacquiDveitmOWIpeeahOS9jee9ru+8miVzIgorCisjOiByZWYtZmlsdGVyLmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAi5pyq6IO96K2Y5Yil55qE5a+s5bqm77yaJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGFsaWduKSBhcmd1bWVudDogJXMiCittc2dzdHIgIuacquiDveitmOWIpeeahCAlJShhbGlnbikg5Y+D5pW477yaJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgd2lkdGggZXhwZWN0ZWQgd2l0aCB0aGUgJSUoYWxpZ24pIGF0b20iCittc2dzdHIgIuWFg+e0oCAlJShhbGlnbikg6ZyA6KaB5LiA5YCL5q2j5pW455qE5a+s5bqmIgorCisjOiByZWYtZmlsdGVyLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShpZikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLmnKrog73orZjliKXnmoQgJSUoaWYpIOWPg+aVuO+8miVzIgorCisjOiByZWYtZmlsdGVyLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICLmoLzlvI/pjK/oqqTnmoTmrITkvY3lkI3vvJolLipzIgorCisjOiByZWYtZmlsdGVyLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAi5pyq55+l55qE5qyE5L2N5ZCN77yaJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnksIGJ1dCB0aGUgZmllbGQgJyUuKnMnIHJlcXVpcmVzIGFjY2VzcyB0byBvYmplY3QgZGF0YSIKK21zZ3N0ciAi5LiN5piv5LiA5YCLIGdpdCDniYjmnKzluqvvvIzkvYbmmK/mrITkvY0gJyUuKnMnIOmcgOimgeWtmOWPlueJqeS7tuizh+aWmSIKKworIzogcmVmLWZpbHRlci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgIuagvOW8j++8muS9v+eUqOS6hiAlJShpZikg5YWD57Sg6ICM5rKS5pyJICUlKHRoZW4pIOWFg+e0oCIKKworIzogcmVmLWZpbHRlci5jOjc3NworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICLmoLzlvI/vvJrkvb/nlKjkuoYgJSUodGhlbikg5YWD57Sg6ICM5rKS5pyJICUlKGlmKSDlhYPntKAiCisKKyM6IHJlZi1maWx0ZXIuYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgIuagvOW8j++8miUlKHRoZW4pIOWFg+e0oOeUqOS6huWkmuasoSIKKworIzogcmVmLWZpbHRlci5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBhZnRlciAlJShlbHNlKSIKK21zZ3N0ciAi5qC85byP77yaJSUodGhlbikg5YWD57Sg55So5Zyo5LqGICUlKGVsc2UpIOS5i+W+jCIKKworIzogcmVmLWZpbHRlci5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICLmoLzlvI/vvJrkvb/nlKjkuoYgJSUoZWxzZSkg5YWD57Sg6ICM5rKS5pyJICUlKGlmKSDlhYPntKAiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgIuagvOW8j++8muS9v+eUqOS6hiAlJShlbHNlKSDlhYPntKDogIzmspLmnIkgJSUodGhlbikg5YWD57SgIgorCisjOiByZWYtZmlsdGVyLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICLmoLzlvI/vvJolJShlbHNlKSDlhYPntKDnlKjkuoblpJrmrKEiCisKKyM6IHJlZi1maWx0ZXIuYzo4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gdXNlZCB3aXRob3V0IGNvcnJlc3BvbmRpbmcgYXRvbSIKK21zZ3N0ciAi5qC85byP77ya5L2/55So5LqGICUlKGVuZCkg5YWD57Sg5Y275rKS5pyJ5a6D55qE5bCN5oeJ5YWD57SgIgorCisjOiByZWYtZmlsdGVyLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmb3JtYXQgc3RyaW5nICVzIgorbXNnc3RyICLpjK/oqqTnmoTmoLzlvI/ljJblrZfkuLIgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgcmViYXNpbmcgJXMiCittc2dzdHIgIumdnuWIhuaUr++8jOato+mHjeWumuWfuuW6lSAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyBkZXRhY2hlZCBIRUFEICVzIgorbXNnc3RyICLpnZ7liIbmlK/vvIzmraPph43lrprln7rlupXliIbpm6LplovpoK3mjIfmqJkgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gJXMiCittc2dzdHIgIumdnuWIhuaUr++8jOS6jOWIhuWwi+aJvumWi+Wni+aWvCAlcyIKKworIzogcmVmLWZpbHRlci5jOjE1MDQKK21zZ2lkICJubyBicmFuY2giCittc2dzdHIgIumdnuWIhuaUryIKKworIzogcmVmLWZpbHRlci5jOjE1NDAgcmVmLWZpbHRlci5jOjE3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBvYmplY3QgJXMgZm9yICVzIgorbXNnc3RyICLnvLrlsJEgJTIkcyDnmoTnianku7YgJTEkcyIKKworIzogcmVmLWZpbHRlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWlsZWQgb24gJXMgZm9yICVzIgorbXNnc3RyICJwYXJzZV9vYmplY3RfYnVmZmVyIOWkseaVl+aWvCAlMiRzIOeahCAlMSRzIgorCisjOiByZWYtZmlsdGVyLmM6MjAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IGF0ICclcyciCittc2dzdHIgIuagvOW8j+mMr+iqpOeahOeJqeS7tiAnJXMnIgorCisjOiByZWYtZmlsdGVyLmM6MjA5MworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSAlcyIKK21zZ3N0ciAi5b+955Wl5bi25pyJ6Yyv6Kqk5ZCN56ixICVzIOeahOW8leeUqCIKKworIzogcmVmLWZpbHRlci5jOjIzODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gbWlzc2luZyIKK21zZ3N0ciAi5qC85byP77ya57y65bCRICUlKGVuZCkg5YWD57SgIgorCisjOiByZWYtZmlsdGVyLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW1lcmdlZCIKK21zZ3N0ciAi6YG46aCFIGAlcycg5ZKMIC0tbWVyZ2VkIOS4jeebuOWuuSIKKworIzogcmVmLWZpbHRlci5jOjI0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1tZXJnZWQiCittc2dzdHIgIumBuOmghSBgJXMnIOWSjCAtLW5vLW1lcmdlZCDkuI3nm7jlrrkiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAi5qC85byP6Yyv6Kqk55qE54mp5Lu25ZCNICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBtdXN0IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICLpgbjpoIUgYCVzJyDlv4XpoIjmjIflkJHkuIDlgIvmj5DkuqQiCisKKyM6IHJlbW90ZS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICLoqK3lrprnmoTpgaDnq6/nn63lkI3nqLHkuI3og73ku6UgJy8nIOmWi+Wni++8miVzIgorCisjOiByZW1vdGUuYzo0MTQKK21zZ2lkICJtb3JlIHRoYW4gb25lIHJlY2VpdmVwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgIuaPkOS+m+S6huS4gOWAi+S7peS4iueahCByZWNlaXZlcGFja++8jOS9v+eUqOesrOS4gOWAiyIKKworIzogcmVtb3RlLmM6NDIyCittc2dpZCAibW9yZSB0aGFuIG9uZSB1cGxvYWRwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgIuaPkOS+m+S6huS4gOWAi+S7peS4iueahCB1cGxvYWRwYWNr77yM5L2/55So56ys5LiA5YCLIgorCisjOiByZW1vdGUuYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIgorbXNnc3RyICLkuI3og73lkIzmmYLlj5blvpcgJXMg5ZKMICVzIOiHsyAlcyIKKworIzogcmVtb3RlLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHVzdWFsbHkgdHJhY2tzICVzLCBub3QgJXMiCittc2dzdHIgIiVzIOmAmuW4uOi/vei5pCAlc++8jOiAjOmdniAlcyIKKworIzogcmVtb3RlLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyYWNrcyBib3RoICVzIGFuZCAlcyIKK21zZ3N0ciAiJXMg5ZCM5pmC6L+96LmkICVzIOWSjCAlcyIKKworIzogcmVtb3RlLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImtleSAnJXMnIG9mIHBhdHRlcm4gaGFkIG5vICcqJyIKK21zZ3N0ciAi5qih5byP55qE6Y21ICclcycg5rKS5pyJICcqJyIKKworIzogcmVtb3RlLmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbHVlICclcycgb2YgcGF0dGVybiBoYXMgbm8gJyonIgorbXNnc3RyICLmqKHlvI/nmoTlgLwgJyVzJyDmspLmnIkgJyonIgorCisjOiByZW1vdGUuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIGRvZXMgbm90IG1hdGNoIGFueSIKK21zZ3N0ciAi5rqQ5byV55So6KGo6YGU5byPICVzIOaykuacieespuWQiCIKKworIzogcmVtb3RlLmM6MTAwOQorIywgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgIua6kOW8leeUqOihqOmBlOW8jyAlcyDnrKblkIjotoXpgY7kuIDlgIsiCisKKyMuIFRSQU5TTEFUT1JTOiAibWF0Y2hlcyAnJXMnJSIgaXMgdGhlIDxkc3Q+IHBhcnQgb2YgImdpdCBwdXNoCisjLiA8cmVtb3RlPiA8c3JjPjo8ZHN0PiIgcHVzaCwgYW5kICJiZWluZyBwdXNoZWQgKCclcycpIiBpcworIy4gdGhlIDxzcmM+LgorIy4KKyM6IHJlbW90ZS5jOjEwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXN0aW5hdGlvbiB5b3UgcHJvdmlkZWQgaXMgbm90IGEgZnVsbCByZWZuYW1lIChpLmUuLFxuIgorInN0YXJ0aW5nIHdpdGggXCJyZWZzL1wiKS4gV2UgdHJpZWQgdG8gZ3Vlc3Mgd2hhdCB5b3UgbWVhbnQgYnk6XG4iCisiXG4iCisiLSBMb29raW5nIGZvciBhIHJlZiB0aGF0IG1hdGNoZXMgJyVzJyBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiLSBDaGVja2luZyBpZiB0aGUgPHNyYz4gYmVpbmcgcHVzaGVkICgnJXMnKVxuIgorIiAgaXMgYSByZWYgaW4gXCJyZWZzL3toZWFkcyx0YWdzfS9cIi4gSWYgc28gd2UgYWRkIGEgY29ycmVzcG9uZGluZ1xuIgorIiAgcmVmcy97aGVhZHMsdGFnc30vIHByZWZpeCBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiXG4iCisiTmVpdGhlciB3b3JrZWQsIHNvIHdlIGdhdmUgdXAuIFlvdSBtdXN0IGZ1bGx5IHF1YWxpZnkgdGhlIHJlZi4iCittc2dzdHIgIiIKKyLmgqjmj5DkvpvnmoTnm67mqJnkuI3mmK/kuIDlgIvlrozmlbTnmoTlvJXnlKjlkI3nqLHvvIjljbPku6UgXCJyZWZzL1wiIOmWi+mgre+8ieOAguaIkeWAkVxuIgorIuippuiRl+eMnOa4rOaCqOeahOaDs+azle+8mlxuIgorIlxuIgorIi0g5Zyo6YGg56uv5p+l6Kmi5ZKMICclcycg56ym5ZCI55qE5byV55So44CCXG4iCisiLSDmqqLmn6XopoHmjqjpgIHnmoQgPHNyYz7vvIgnJXMn77yJ5piv5LiN5piv5ZyoIFwicmVmcy97aGVhZHMsdGFnc30vXCIg5Lit55qEXG4iCisiICDlvJXnlKjjgILlpoLmnpzmmK/vvIzmiJHlgJHmnIPlnKjlsI3mh4nnmoTpgaDnq6/mlrDlop4gcmVmcy97aGVhZHMsdGFnc30vIOWJjee2tOOAglxuIgorIlxuIgorIumDveS4jeihjO+8jOaJgOS7peaIkeWAkeW3suaUvuajhOOAguaCqOW/hemgiOe1puWHuuWujOaVtOeahOW8leeUqOOAgiIKKworIzogcmVtb3RlLmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBjb21taXQgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy9oZWFkcy8lcyc/IgorbXNnc3RyICIiCisi5byV55So6KGo6YGU5byP55qEIDxzcmM+IOaYr+S4gOWAi+aPkOS6pOeJqeS7tuOAguaCqOaYr+aDs+W7uueri+S4gOWAi+aWsOeahOWIhuaUr+iAjOWQkVxuIgorIiclczpyZWZzL2hlYWRzLyVzJyDmjqjpgIHll47vvJ8iCisKKyM6IHJlbW90ZS5jOjEwNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgdGFnIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgbmV3IHRhZyBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisi5byV55So6KGo6YGU5byP55qEIDxzcmM+IOaYr+S4gOWAi+aomeexpOeJqeS7tuOAguaCqOaYr+aDs+W7uueri+S4gOWAi+aWsOeahOaomeexpOiAjOWQkVxuIgorIiclczpyZWZzL3RhZ3MvJXMnIOaOqOmAgeWXju+8nyIKKworIzogcmVtb3RlLmM6MTA1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IHRyZWUgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIuW8leeUqOihqOmBlOW8j+eahCA8c3JjPiDmmK/kuIDlgIvmqLnni4Dnianku7bjgILmgqjmmK/mg7PngrrpgJnlgIvmqLnni4Dnianku7blu7rnq4vmqJnnsaTogIzlkJFcbiIKKyInJXM6cmVmcy90YWdzLyVzJyDmjqjpgIHll47vvJ8iCisKKyM6IHJlbW90ZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgYmxvYiBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyBibG9iIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyLlvJXnlKjooajpgZTlvI/nmoQgPHNyYz4g5piv5LiA5YCL6LOH5paZ54mp5Lu244CC5oKo5piv5oOz54K66YCZ5YCL6LOH5paZ54mp5Lu25bu656uL5qiZ57Gk6ICM5ZCRXG4iCisiJyVzOnJlZnMvdGFncy8lcycg5o6o6YCB5ZeO77yfIgorCisjOiByZW1vdGUuYzoxMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNhbm5vdCBiZSByZXNvbHZlZCB0byBicmFuY2giCittc2dzdHIgIiVzIOeEoeazleiiq+ino+aekOeCuuWIhuaUryIKKworIzogcmVtb3RlLmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVsZXRlICclcyc6IHJlbW90ZSByZWYgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIueEoeazleWIqumZpCAnJXMn77ya6YGg56uv5byV55So5LiN5a2Y5ZyoIgorCisjOiByZW1vdGUuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAi55uu5qiZ5byV55So6KGo6YGU5byPICVzIOespuWQiOi2hemBjuS4gOWAiyIKKworIzogcmVtb3RlLmM6MTEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmICVzIHJlY2VpdmVzIGZyb20gbW9yZSB0aGFuIG9uZSBzcmMiCittc2dzdHIgIuebruaomeW8leeUqCAlcyDmjqXmlLbotoXpgY7kuIDlgIvmupAiCisKKyM6IHJlbW90ZS5jOjE2MjggcmVtb3RlLmM6MTcyOQorbXNnaWQgIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giCittc2dzdHIgIkhFQUQg5rKS5pyJ5oyH5ZCR5LiA5YCL5YiG5pSvIgorCisjOiByZW1vdGUuYzoxNjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorbXNnc3RyICLmspLmnInmraTliIbmlK/vvJonJXMnIgorCisjOiByZW1vdGUuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICLlsJrmnKrntabliIbmlK8gJyVzJyDoqK3lrprkuIrmuLgiCisKKyM6IHJlbW90ZS5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIuS4iua4uOWIhuaUryAnJXMnIOaykuacieWEsuWtmOeCuuS4gOWAi+mBoOerr+i/vei5pOWIhuaUryIKKworIzogcmVtb3RlLmM6MTY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIGRlc3RpbmF0aW9uICclcycgb24gcmVtb3RlICclcycgaGFzIG5vIGxvY2FsIHRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi5o6o6YCB55uu5qiZICclcycg6Iez6YGg56uvICclcycg5rKS5pyJ5pys5qmf6L+96Lmk5YiG5pSvIgorCisjOiByZW1vdGUuYzoxNjczCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciCittc2dzdHIgIuWIhuaUryAnJXMnIOaykuacieioreWumuimgeaOqOmAgeeahOmBoOerr+S8uuacjeWZqCIKKworIzogcmVtb3RlLmM6MTY4MworIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciCittc2dzdHIgIuWQkSAnJXMnIOaOqOmAgeW8leeUqOimj+agvOacquWMheWQqyAnJXMnIgorCisjOiByZW1vdGUuYzoxNjk2Cittc2dpZCAicHVzaCBoYXMgbm8gZGVzdGluYXRpb24gKHB1c2guZGVmYXVsdCBpcyAnbm90aGluZycpIgorbXNnc3RyICLmjqjpgIHnhKHnm67mqJnvvIhwdXNoLmRlZmF1bHQg5pivICdub3RoaW5nJ++8iSIKKworIzogcmVtb3RlLmM6MTcxOAorbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgIueEoeazleino+aekCAnc2ltcGxlJyDmjqjpgIHoh7PkuIDlgIvllq7njajnmoTnm67mqJkiCisKKyM6IHJlbW90ZS5jOjE4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZmluZCByZW1vdGUgcmVmICVzIgorbXNnc3RyICLnhKHms5Xmib7liLDpgaDnq6/lvJXnlKggJXMiCisKKyM6IHJlbW90ZS5jOjE4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiBJZ25vcmluZyBmdW5ueSByZWYgJyVzJyBsb2NhbGx5IgorbXNnc3RyICIqIOWcqOacrOapn+W/veeVpeWPr+eskeeahOW8leeUqCAnJXMnIgorCisjOiByZW1vdGUuYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJhc2VkIG9uICclcycsIGJ1dCB0aGUgdXBzdHJlYW0gaXMgZ29uZS5cbiIKK21zZ3N0ciAi5oKo55qE5YiG5pSv5Z+65pa8ICclcyfvvIzkvYbmraTkuIrmuLjliIbmlK/lt7LntpPkuI3lrZjlnKjjgIJcbiIKKworIzogcmVtb3RlLmM6MjAyNAorbXNnaWQgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIOS+huS/ruW+qe+8iVxuIgorCisjOiByZW1vdGUuYzoyMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIHVwIHRvIGRhdGUgd2l0aCAnJXMnLlxuIgorbXNnc3RyICLmgqjnmoTliIbmlK/oiIfkuIrmuLjliIbmlK8gJyVzJyDkuIDoh7TjgIJcbiIKKworIzogcmVtb3RlLmM6MjAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBhbmQgJyVzJyByZWZlciB0byBkaWZmZXJlbnQgY29tbWl0cy5cbiIKK21zZ3N0ciAi5oKo55qE5YiG5pSv5ZKMICclcycg5oyH5ZCR5LiN5ZCM55qE5o+Q5Lqk44CCXG4iCisKKyM6IHJlbW90ZS5jOjIwMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiJXNcIiBmb3IgZGV0YWlscylcbiIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCIlc1wiIOaqouimluips+aDhe+8iVxuIgorCisjOiByZW1vdGUuYzoyMDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIuaCqOeahOWIhuaUr+mgmOWFiCAnJXMnIOWFsSAlZCDlgIvmj5DkuqTjgIJcbiIKKworIzogcmVtb3RlLmM6MjA0NAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHB1c2hcIiDkvobnmbzluIPmgqjnmoTmnKzmqZ/mj5DkuqTvvIlcbiIKKworIzogcmVtb3RlLmM6MjA0NworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICLmgqjnmoTliIbmlK/okL3lvowgJyVzJyDlhbEgJWQg5YCL5o+Q5Lqk77yM5Lim5LiU5Y+v5Lul5b+r6L2J44CCXG4iCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogcmVtb3RlLmM6MjA1NQorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gdXBkYXRlIHlvdXIgbG9jYWwgYnJhbmNoKVxuIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBwdWxsXCIg5L6G5pu05paw5oKo55qE5pys5qmf5YiG5pSv77yJXG4iCisKKyM6IHJlbW90ZS5jOjIwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisi5oKo55qE5YiG5pSv5ZKMICclcycg5Ye654++5LqG5YGP6Zui77yMXG4iCisi5Lim5LiU5YiG5Yil5pyJICVkIOWSjCAlZCDomZXkuI3lkIznmoTmj5DkuqTjgIJcbiIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiByZW1vdGUuYzoyMDY4Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBwdWxsXCIg5L6G5ZCI5L216YGg56uv5YiG5pSv77yJXG4iCisKKyM6IHJlbW90ZS5jOjIyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGV4cGVjdGVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIueEoeazleino+aekOacn+acm+eahOeJqeS7tuWQjSAnJXMnIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBsYWNlIHJlZiBuYW1lOiAlcyIKK21zZ3N0ciAi6Yyv6Kqk55qE5Y+W5Luj5byV55So5ZCN56ix77yaJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAi6YeN6KSH55qE5Y+W5Luj5byV55So77yaJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSBkZXB0aCB0b28gaGlnaCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICLnianku7YgJXMg55qE5Y+W5Luj5bGk57Sa5aSq5rexIgorCisjOiByZXJlcmUuYzoyMTcgcmVyZXJlLmM6MjI2IHJlcmVyZS5jOjIyOQorbXNnaWQgImNvcnJ1cHQgTUVSR0VfUlIiCittc2dzdHIgIuaQjeWjnueahCBNRVJHRV9SUiIKKworIzogcmVyZXJlLmM6MjY0IHJlcmVyZS5jOjI2OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXJlcmUgcmVjb3JkIgorbXNnc3RyICLnhKHms5Xlr6vlhaUgcmVyZXJlIOiomOmMhCIKKworIzogcmVyZXJlLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZXJlIHdlcmUgZXJyb3JzIHdoaWxlIHdyaXRpbmcgJyVzJyAoJXMpIgorbXNnc3RyICLlr6vlhaUgJyVzJyAoJXMpIOaZgueZvOeUn+mMr+iqpCIKKworIzogcmVyZXJlLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmbHVzaCAnJXMnIgorbXNnc3RyICLph43mlrDmlbTnkIYgJyVzJyDlpLHmlZciCisKKyM6IHJlcmVyZS5jOjUwMyByZXJlcmUuYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb25mbGljdCBodW5rcyBpbiAnJXMnIgorbXNnc3RyICLkuI3og73op6PmnpAgJyVzJyDkuK3nmoTooZ3nqoHloYoiCisKKyM6IHJlcmVyZS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdXRpbWUoKSBvbiAnJXMnIgorbXNnc3RyICLlnKggJyVzJyDkuIrlkbzlj6sgdXRpbWUoKSDlpLHmlZciCisKKyM6IHJlcmVyZS5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cml0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICLlr6vlhaUgJyVzJyDlpLHmlZciCisKKyM6IHJlcmVyZS5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAi5L2/55So5LmL5YmN55qE6Kej5rG65pa55qGI5pqr5a2YICclcyfjgIIiCisKKyM6IHJlcmVyZS5jOjc1MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNvcmRlZCByZXNvbHV0aW9uIGZvciAnJXMnLiIKK21zZ3N0ciAi5bey6KiY6YyEICclcycg55qE6Kej5rG65pa55qGI44CCIgorCisjOiByZXJlcmUuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzb2x2ZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAi5L2/55So5LmL5YmN55qE6Kej5rG65pa55qGI6Kej5rG6ICclcyfjgIIiCisKKyM6IHJlcmVyZS5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rIHN0cmF5ICclcyciCittc2dzdHIgIuS4jeiDveWIqumZpCBzdHJheSAnJXMnIgorCisjOiByZXJlcmUuYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIueCuiAnJXMnIOiomOmMhCBwcmVpbWFnZSIKKworIzogcmVyZXJlLmM6ODgxIHN1Ym1vZHVsZS5jOjIwNzggYnVpbHRpbi9sb2cuYzoxODcxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ1NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICLkuI3og73lu7rnq4vnm67pjIQgJyVzJyIKKworIzogcmVyZXJlLmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIGNvbmZsaWN0ZWQgc3RhdGUgaW4gJyVzJyIKK21zZ3N0ciAi5pu05pawICclcycg5Lit55qE6KGd56qB54uA5oWL5aSx5pWXIgorCisjOiByZXJlcmUuYzoxMDY4IHJlcmVyZS5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIgorbXNnc3RyICLmspLmnInngrogJyVzJyDoqJjmhrbnmoTop6PmsbrmlrnmoYgiCisKKyM6IHJlcmVyZS5jOjEwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayAnJXMnIgorbXNnc3RyICLkuI3og73liKrpmaQgJyVzJyIKKworIzogcmVyZXJlLmM6MTA4NworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICLlt7LngrogJyVzJyDmm7TmlrAgcHJlaW1hZ2UiCisKKyM6IHJlcmVyZS5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9yZ290IHJlc29sdXRpb24gZm9yICclcydcbiIKK21zZ3N0ciAi5b+Y6KiYICclcycg55qE6Kej5rG65pa55qGIXG4iCisKKyM6IHJlcmVyZS5jOjExOTkKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiByci1jYWNoZSBkaXJlY3RvcnkiCittc2dzdHIgIuS4jeiDvemWi+WVnyByci1jYWNoZSDnm67pjIQiCisKKyM6IHJldmlzaW9uLmM6MjQ5NworbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgIuaCqOeahOebruWJjeWIhuaUr+WlveWDj+iiq+aQjeWjniIKKworIzogcmV2aXNpb24uYzoyNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIKK21zZ3N0ciAi5oKo55qE55uu5YmN5YiG5pSvICclcycg5bCa54Sh5Lu75L2V5o+Q5LqkIgorCisjOiByZXZpc2lvbi5jOjI3MDgKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAiLS1maXJzdC1wYXJlbnQg6IiHIC0tYmlzZWN0IOS4jeebuOWuuSIKKworIzogcmV2aXNpb24uYzoyNzEyCittc2dpZCAiLUwgZG9lcyBub3QgeWV0IHN1cHBvcnQgZGlmZiBmb3JtYXRzIGJlc2lkZXMgLXAgYW5kIC1zIgorbXNnc3RyICItTCDlsJrkuI3mlK/mj7QgLXAg5ZKMIC1zIOS5i+WklueahOW3rueVsOagvOW8jyIKKworIzogcnVuLWNvbW1hbmQuYzo3NjMKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiCittc2dzdHIgIuS4jeiDvemWi+WVnyAvZGV2L251bGwiCisKKyM6IHJ1bi1jb21tYW5kLmM6MTI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFzeW5jIHRocmVhZDogJXMiCittc2dzdHIgIuS4jeiDveW7uueriyBhc3luYyDln7fooYznt5LvvJolcyIKKworIzogcnVuLWNvbW1hbmQuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJyVzJyBob29rIHdhcyBpZ25vcmVkIGJlY2F1c2UgaXQncyBub3Qgc2V0IGFzIGV4ZWN1dGFibGUuXG4iCisiWW91IGNhbiBkaXNhYmxlIHRoaXMgd2FybmluZyB3aXRoIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAuIgorbXNnc3RyICIiCisi5Zug54K65rKS5pyJ5bCH5o6b6YmkICclcycg6Kit5a6a54K65Y+v5Z+36KGM77yM5o6b6Ymk6KKr5b+955Wl44CC5oKo5Y+v5Lul6YCP6YGOXG4iCisi6Kit5a6aIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAg5L6G6Zec6ZaJ6YCZ5qKd6K2m5ZGK44CCIgorCisjOiBzZW5kLXBhY2suYzoxNDQKK21zZ2lkICJ1bmV4cGVjdGVkIGZsdXNoIHBhY2tldCB3aGlsZSByZWFkaW5nIHJlbW90ZSB1bnBhY2sgc3RhdHVzIgorbXNnc3RyICLoroDlj5bpgaDnq6/op6PljIXni4DmhYvmmYLmlLbliLDmhI/lpJbnmoQgZmx1c2gg5YyFIgorCisjOiBzZW5kLXBhY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHJlbW90ZSB1bnBhY2sgc3RhdHVzOiAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q6YGg56uv6Kej5YyF54uA5oWL77yaJXMiCisKKyM6IHNlbmQtcGFjay5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgdW5wYWNrIGZhaWxlZDogJXMiCittc2dzdHIgIumBoOerr+ino+WMheWkseaVl++8miVzIgorCisjOiBzZW5kLXBhY2suYzozMDkKK21zZ2lkICJmYWlsZWQgdG8gc2lnbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSIKK21zZ3N0ciAi54K65o6o6YCB6K2J5pu457Gk5ZCN5aSx5pWXIgorCisjOiBzZW5kLXBhY2suYzo0MjMKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIHB1c2giCittc2dzdHIgIuaOpeaUtuerr+S4jeaUr+aPtOewveWQjeaOqOmAgSIKKworIzogc2VuZC1wYWNrLmM6NDI1Cittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tIgorInNpZ25lZCBwdXNoIgorbXNnc3RyICLmnKrlgrPpgIHmjqjpgIHorYnmm7jvvIzlm6DngrrmjqXmlLbnq6/kuI3mlK/mj7TnsL3lkI3mjqjpgIEiCisKKyM6IHNlbmQtcGFjay5jOjQzNworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMgcHVzaCIKK21zZ3N0ciAi5o6l5pS256uv5LiN5pSv5o+05Y6f5a2Q5o6o6YCBIgorCisjOiBzZW5kLXBhY2suYzo0NDIKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IHB1c2ggb3B0aW9ucyIKK21zZ3N0ciAi5o6l5pS256uv5LiN5pSv5o+05o6o6YCB6YG46aCFIgorCisjOiBzZXF1ZW5jZXIuYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgbWVzc2FnZSBjbGVhbnVwIG1vZGUgJyVzJyIKK21zZ3N0ciAi54Sh5pWI55qE5o+Q5Lqk6KiK5oGv5riF55CG5qih5byPICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlICclcyciCittc2dzdHIgIueEoeazleWIqumZpCAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozMTUgYnVpbHRpbi9yZWJhc2UuYzo3ODUgYnVpbHRpbi9yZWJhc2UuYzoxNzUwIGJ1aWx0aW4vcm0uYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSAnJXMnIgorbXNnc3RyICLnhKHms5XliKrpmaQgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzI1Cittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICLpgoTljp8iCisKKyM6IHNlcXVlbmNlci5jOjMyNworbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICLmj4DpgbgiCisKKyM6IHNlcXVlbmNlci5jOjMyOQorbXNnaWQgInJlYmFzZSIKK21zZ3N0ciAicmViYXNlIgorCisjOiBzZXF1ZW5jZXIuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBhY3Rpb246ICVkIgorbXNnc3RyICLmnKrnn6Xli5XkvZzvvJolZCIKKworIzogc2VxdWVuY2VyLmM6Mzg5Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKyLooZ3nqoHop6PmsbrlroznlaLlvozvvIznlKggJ2dpdCBhZGQgPOi3r+W+kT4nIOaIliAnZ2l0IHJtIDzot6/lvpE+J1xuIgorIuaMh+S7pOaomeiomOS/ruato+W+jOeahOaqlOahiCIKKworIzogc2VxdWVuY2VyLmM6MzkyCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKyLooZ3nqoHop6PmsbrlroznlaLlvozvvIznlKggJ2dpdCBhZGQgPOi3r+W+kT4nIOaIliAnZ2l0IHJtIDzot6/lvpE+J1xuIgorIuWwjeS/ruato+W+jOeahOaqlOahiOWBmuaomeiomO+8jOeEtuW+jOeUqCAnZ2l0IGNvbW1pdCcg5o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzo0MDUgc2VxdWVuY2VyLmM6MjkwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayAnJXMnIgorbXNnc3RyICLkuI3og73pjpblrpogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBlb2wgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO95bCH5o+b6KGM56ym6Jmf5a+r5YWlICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQxNyBzZXF1ZW5jZXIuYzoyNzA2IHNlcXVlbmNlci5jOjI5MDcgc2VxdWVuY2VyLmM6MjkyMQorIzogc2VxdWVuY2VyLmM6MzE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgJyVzJyIKK21zZ3N0ciAi54Sh5rOV5a6M5oiQICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQ0MCBzZXF1ZW5jZXIuYzoxNjEzIHNlcXVlbmNlci5jOjI3MjYgc2VxdWVuY2VyLmM6MzE2NworIzogc2VxdWVuY2VyLmM6MzI3NiBidWlsdGluL2FtLmM6MjQ5IGJ1aWx0aW4vY29tbWl0LmM6Nzg3IGJ1aWx0aW4vbWVyZ2UuYzoxMTIwCisjOiBidWlsdGluL3JlYmFzZS5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICLkuI3og73oroDlj5YgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlcy4iCittc2dzdHIgIuaCqOeahOacrOapn+S/ruaUueWwh+iiqyVz6KaG6JOL44CCIgorCisjOiBzZXF1ZW5jZXIuYzo0NzAKK21zZ2lkICJjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iCittc2dzdHIgIuaPkOS6pOaCqOeahOS/ruaUueaIluWEsuiXj+W+jOWGjee5vOe6jOOAgiIKKworIzogc2VxdWVuY2VyLmM6NTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiVz77ya5b+r6L2JIgorCisjOiBzZXF1ZW5jZXIuYzo1NDEgYnVpbHRpbi90YWcuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgIueEoeaViOeahOa4heeQhuaooeW8jyAlcyIKKworIy4gVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIsICJjaGVycnktcGljayIgb3IKKyMuICJyZWJhc2UiLgorIy4KKyM6IHNlcXVlbmNlci5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlc++8mueEoeazleWvq+WFpeaWsOe0ouW8leaqlOahiCIKKworIzogc2VxdWVuY2VyLmM6NjUyCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlIgorbXNnc3RyICLkuI3og73mm7TmlrDlv6vlj5bmqLkiCisKKyM6IHNlcXVlbmNlci5jOjY2NgorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICLkuI3og73op6PmnpAgSEVBRCDmj5DkuqQiCisKKyM6IHNlcXVlbmNlci5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBrZXkgcHJlc2VudCBpbiAnJS4qcyciCittc2dzdHIgIuWcqCAnJS4qcycg5Lit5rKS5pyJIGtleSIKKworIzogc2VxdWVuY2VyLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZXF1b3RlIHZhbHVlIG9mICclcyciCittc2dzdHIgIueEoeazleeCuiAnJXMnIOeahOWAvOWOu+W8leiZnyIKKworIzogc2VxdWVuY2VyLmM6Nzk0IHdyYXBwZXIuYzoxOTAgd3JhcHBlci5jOjM2MCBidWlsdGluL2FtLmM6NzEwCisjOiBidWlsdGluL2FtLmM6ODAyIGJ1aWx0aW4vbWVyZ2UuYzoxMTE3IGJ1aWx0aW4vcmViYXNlLmM6MTA3MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICLnhKHms5XplovllZ8gJyVzJyDpgLLooYzoroDlj5YiCisKKyM6IHNlcXVlbmNlci5jOjgwNAorbXNnaWQgIidHSVRfQVVUSE9SX05BTUUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIuW3sue2k+e1puWHuiAnR0lUX0FVVEhPUl9OQU1FJyIKKworIzogc2VxdWVuY2VyLmM6ODA5Cittc2dpZCAiJ0dJVF9BVVRIT1JfRU1BSUwnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIuW3sue2k+e1puWHuiAnR0lUX0FVVEhPUl9FTUFJTCciCisKKyM6IHNlcXVlbmNlci5jOjgxNAorbXNnaWQgIidHSVRfQVVUSE9SX0RBVEUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIuW3sue2k+e1puWHuiAnR0lUX0FVVEhPUl9EQVRFJyIKKworIzogc2VxdWVuY2VyLmM6ODE4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFyaWFibGUgJyVzJyIKK21zZ3N0ciAi5pyq55+l6K6K5pW4ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjgyMworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfTkFNRSciCittc2dzdHIgIue8uuWwkSAnR0lUX0FVVEhPUl9OQU1FJyIKKworIzogc2VxdWVuY2VyLmM6ODI1Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9FTUFJTCciCittc2dzdHIgIue8uuWwkSAnR0lUX0FVVEhPUl9FTUFJTCciCisKKyM6IHNlcXVlbmNlci5jOjgyNworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfREFURSciCittc2dzdHIgIue8uuWwkSAnR0lUX0FVVEhPUl9EQVRFJyIKKworIzogc2VxdWVuY2VyLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZVxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlIHNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLmgqjnmoTlt6XkvZzljYDkuK3lrZjlnKjlt7LmmqvlrZjnmoTkv67mlLlcbiIKKyLlpoLmnpzpgJnkupvkv67mlLnpnIDopoHooqvkvbXlhaXliY3kuIDlgIvmj5DkuqTvvIzln7fooYzvvJpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIuWmguaenOmAmeS6m+S/ruaUueimgeW9ouaIkOS4gOWAi+aWsOaPkOS6pO+8jOWft+ihjO+8mlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIueEoeirluWTqueoruaDheazge+8jOeVtuaCqOWujOaIkOaPkOS6pO+8jOe5vOe6jOWft+ihjO+8mlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjExNDgKK21zZ2lkICIncHJlcGFyZS1jb21taXQtbXNnJyBob29rIGZhaWxlZCIKK21zZ3N0ciAiJ3ByZXBhcmUtY29tbWl0LW1zZycg5o6b6Ymk5aSx5pWXIgorCisjOiBzZXF1ZW5jZXIuYzoxMTU0Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseS4gUnVuIHRoZVxuIgorImZvbGxvd2luZyBjb21tYW5kIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIGVkaXRvciB0byBlZGl0XG4iCisieW91ciBjb25maWd1cmF0aW9uIGZpbGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisi5oKo55qE5aeT5ZCN5ZKM5L+h5Lu25L2N5Z2A5Z+65pa855m75YWl5ZCN56ix5ZKM5Li75qmf5ZCN56ix6Ieq5YuV6Kit5a6a44CC6KuL5qqi5p+l5a6D5YCR5q2j56K6XG4iCisi6IiH5ZCm44CC5oKo5Y+v5Lul5bCN5YW26YCy6KGM6Kit5a6a5Lul5YWN5YaN5Ye654++5pys5o+Q56S66KiK5oGv44CC5Z+36KGM5aaC5LiL5oyH5Luk5Zyo57eo6Lyv5ZmoXG4iCisi5Lit57eo6Lyv5oKo55qE6Kit5a6a5qqU5qGI77yaXG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisi6Kit5a6a5a6M55Wi5b6M77yM5oKo5Y+v5Lul55So5LiL6Z2i55qE5oyH5Luk5L6G5L+u5q2j5pys5qyh5o+Q5Lqk5omA5L2/55So55qE5L2/55So6ICF6Lqr5Lu977yaXG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMTY3Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisi5oKo55qE5aeT5ZCN5ZKM5L+h5Lu25L2N5Z2A5Z+65pa855m75YWl5ZCN56ix5ZKM5Li75qmf5ZCN56ix6Ieq5YuV6Kit5a6a44CC6KuL5qqi5p+l5a6D5YCR5q2j56K6XG4iCisi6IiH5ZCm44CC5oKo5Y+v5Lul5bCN5YW26YCy6KGM6Kit5a6a5Lul5YWN5YaN5Ye654++5pys5o+Q56S66KiK5oGv77yaXG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIuioreWumuWujOeVouW+jO+8jOaCqOWPr+S7peeUqOS4i+mdoueahOaMh+S7pOS+huS/ruato+acrOasoeaPkOS6pOaJgOS9v+eUqOeahOS9v+eUqOiAhei6q+S7ve+8mlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTIwOQorbXNnaWQgImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIueEoeazleaJvuWIsOaWsOW7uueri+eahOaPkOS6pCIKKworIzogc2VxdWVuY2VyLmM6MTIxMQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5paw5bu656uL55qE5o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzoxMjU3Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgSEVBRCBhZnRlciBjcmVhdGluZyBjb21taXQiCittc2dzdHIgIuW7uueri+aPkOS6pOW+jO+8jOS4jeiDveino+aekCBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxMjU5Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAi5YiG6Zui6ZaL6aCt5oyH5qiZIgorCisjICDora/ogIXvvJrkuK3mloflrZfkuLLmi7zmjqXvvIzlj6/liKrpmaTliY3lsI7nqbrmoLwKKyM6IHNlcXVlbmNlci5jOjEyNjMKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAiICjmoLnmj5DkuqQpIgorCisjOiBzZXF1ZW5jZXIuYzoxMjg0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQiCittc2dzdHIgIuS4jeiDveino+aekCBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxMjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiSEVBRCAlcyDkuI3mmK/kuIDlgIvmj5DkuqTvvIEiCisKKyM6IHNlcXVlbmNlci5jOjEyOTAgc2VxdWVuY2VyLmM6MTM2NCBidWlsdGluL2NvbW1pdC5jOjE1NzQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgIuS4jeiDveino+aekCBIRUFEIOaPkOS6pCIKKworIzogc2VxdWVuY2VyLmM6MTM0MiBzZXF1ZW5jZXIuYzoxOTY4Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCBhdXRob3IiCittc2dzdHIgIuS4jeiDveino+aekOaPkOS6pOS9nOiAhSIKKworIzogc2VxdWVuY2VyLmM6MTM1MyBidWlsdGluL2FtLmM6MTU2NiBidWlsdGluL21lcmdlLmM6Njg3Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUg54Sh5rOV5a+r5YWl5qi554uA54mp5Lu2IgorCisjOiBzZXF1ZW5jZXIuYzoxMzg2IHNlcXVlbmNlci5jOjE0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgZnJvbSAnJXMnIgorbXNnc3RyICLkuI3og73lvp4gJyVzJyDoroDlj5bmj5DkuqToqqrmmI4iCisKKyM6IHNlcXVlbmNlci5jOjE0MTMgYnVpbHRpbi9hbS5jOjE1ODggYnVpbHRpbi9jb21taXQuYzoxNjczIGJ1aWx0aW4vbWVyZ2UuYzo4ODYKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MTEKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAi5a+r5o+Q5Lqk54mp5Lu25aSx5pWXIgorCisjOiBzZXF1ZW5jZXIuYzoxNDc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIuS4jeiDveino+aekOaPkOS6pCAlcyIKKworIzogc2VxdWVuY2VyLmM6MTQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q54i25o+Q5LqkICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNTYyIHNlcXVlbmNlci5jOjE2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kOiAlZCIKK21zZ3N0ciAi5pyq55+l5oyH5Luk77yaJWQiCisKKyM6IHNlcXVlbmNlci5jOjE2MjAgc2VxdWVuY2VyLmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJWQgY29tbWl0cy4iCittc2dzdHIgIumAmeaYr+S4gOWAiyAlZCDlgIvmj5DkuqTnmoTntYTlkIjjgIIiCisKKyM6IHNlcXVlbmNlci5jOjE2MzAKK21zZ2lkICJuZWVkIGEgSEVBRCB0byBmaXh1cCIKK21zZ3N0ciAi6ZyA6KaB5LiA5YCLIEhFQUQg5L6G5L+u5b6pIgorCisjOiBzZXF1ZW5jZXIuYzoxNjMyIHNlcXVlbmNlci5jOjMyMTIKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEIgorbXNnc3RyICLkuI3og73oroDlj5YgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTYzNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQncyBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi5LiN6IO96K6A5Y+WIEhFQUQg55qE5o+Q5Lqk6Kqq5piOIgorCisjOiBzZXF1ZW5jZXIuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICLkuI3og73lr6sgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTY0NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk2Cittc2dpZCAiVGhpcyBpcyB0aGUgMXN0IGNvbW1pdCBtZXNzYWdlOiIKK21zZ3N0ciAi6YCZ5piv56ys5LiA5YCL5o+Q5Lqk6Kqq5piO77yaIgorCisjOiBzZXF1ZW5jZXIuYzoxNjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIgorbXNnc3RyICLkuI3og73oroDlj5YgJXMg55qE5o+Q5Lqk6Kqq5piOIgorCisjOiBzZXF1ZW5jZXIuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMlZDoiCittc2dzdHIgIumAmeaYr+aPkOS6pOiqquaYjiAjJWTvvJoiCisKKyM6IHNlcXVlbmNlci5jOjE2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICLmj5DkuqToqqrmmI4gIyVkIOWwh+iiq+i3s+mBju+8miIKKworIzogc2VxdWVuY2VyLmM6MTc1NgorbXNnaWQgInlvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgIuaCqOeahOe0ouW8leaqlOahiOacquWujOaIkOWQiOS9teOAgiIKKworIzogc2VxdWVuY2VyLmM6MTc2MworbXNnaWQgImNhbm5vdCBmaXh1cCByb290IGNvbW1pdCIKK21zZ3N0ciAi5LiN6IO95L+u5b6p5qC55o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAi5o+Q5LqkICVzIOaYr+S4gOWAi+WQiOS9teaPkOS6pOS9huacquaPkOS+myAtbSDpgbjpoIXjgIIiCisKKyM6IHNlcXVlbmNlci5jOjE3OTAgc2VxdWVuY2VyLmM6MTc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIuaPkOS6pCAlcyDmspLmnInnrKwgJWQg5YCL54i25o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzoxODA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICLkuI3og73lvpfliLAgJXMg55qE5o+Q5Lqk6Kqq5piOIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgYSAidG9kbyIgY29tbWFuZCBsaWtlCisjLiAicmV2ZXJ0IiBvciAicGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExLgorIzogc2VxdWVuY2VyLmM6MTgyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVz77ya5LiN6IO96Kej5p6Q54i25o+Q5LqkICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73lsIcgJyVzJyDph43mlrDlkb3lkI3ngrogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTk0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICLkuI3og73pgoTljp8gJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICLkuI3og73mh4nnlKggJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHJvcHBpbmcgJXMgJXMgLS0gcGF0Y2ggY29udGVudHMgYWxyZWFkeSB1cHN0cmVhbVxuIgorbXNnc3RyICLmi4vmo4QgJXMgJXMgLS0g5L+u6KOc5qqU55qE5YWn5a655bey5Zyo5LiK5ri4XG4iCisKKyM6IHNlcXVlbmNlci5jOjIwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlc++8mueEoeazleiugOWPlue0ouW8lSIKKworIzogc2VxdWVuY2VyLmM6MjAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVz77ya54Sh5rOV6YeN5paw5pW055CG57Si5byVIgorCisjOiBzZXF1ZW5jZXIuYzoyMTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IGFjY2VwdCBhcmd1bWVudHM6ICclcyciCittc2dzdHIgIiVzIOS4jeaOpeWPl+WPg+aVuO+8miclcyciCisKKyM6IHNlcXVlbmNlci5jOjIxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhcmd1bWVudHMgZm9yICVzIgorbXNnc3RyICLnvLrlsJEgJXMg55qE5Y+D5pW4IgorCisjOiBzZXF1ZW5jZXIuYzoyMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJXMnIgorbXNnc3RyICLnhKHms5Xop6PmnpAgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIueEoeaViOihjCAlZO+8miUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjIyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi5rKS5pyJ54i25o+Q5Lqk55qE5oOF5rOB5LiL5LiN6IO9ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjIyOTgKK21zZ2lkICJjYW5jZWxsaW5nIGEgY2hlcnJ5IHBpY2tpbmcgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIuato+WcqOWPlua2iOS4gOWAi+mAsuihjOS4reeahOaPgOmBuCIKKworIzogc2VxdWVuY2VyLmM6MjMwNQorbXNnaWQgImNhbmNlbGxpbmcgYSByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIuato+WcqOWPlua2iOS4gOWAi+mAsuihjOS4reeahOmChOWOnyIKKworIzogc2VxdWVuY2VyLmM6MjM0OQorbXNnaWQgInBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICLoq4vnlKggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIOS+huS/ruaUueOAgiIKKworIzogc2VxdWVuY2VyLmM6MjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJyVzJyIKK21zZ3N0ciAi5LiN5Y+v55So55qE5oyH5Luk5riF5Zau77yaJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjM1NgorbXNnaWQgIm5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAi5rKS5pyJ6Kej5p6Q5o+Q5Lqk44CCIgorCisjOiBzZXF1ZW5jZXIuYzoyMzY3Cittc2dpZCAiY2Fubm90IGNoZXJyeS1waWNrIGR1cmluZyBhIHJldmVydC4iCittc2dzdHIgIuS4jeiDveWcqOmChOWOn+aPkOS6pOS4reWft+ihjOaPgOmBuOOAgiIKKworIzogc2VxdWVuY2VyLmM6MjM2OQorbXNnaWQgImNhbm5vdCByZXZlcnQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICLkuI3og73lnKjmj4DpgbjkuK3ln7fooYzpgoTljp/mj5DkuqTjgIIiCisKKyM6IHNlcXVlbmNlci5jOjI0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICIlcyDnmoTlgLznhKHmlYjvvJolcyIKKworIzogc2VxdWVuY2VyLmM6MjU0MAorbXNnaWQgInVudXNhYmxlIHNxdWFzaC1vbnRvIgorbXNnc3RyICLkuI3lj6/nlKjnmoQgc3F1YXNoLW9udG8iCisKKyM6IHNlcXVlbmNlci5jOjI1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICclcyciCittc2dzdHIgIuagvOW8j+mMr+iqpOeahOmBuOmghea4heWWru+8miclcyciCisKKyM6IHNlcXVlbmNlci5jOjI2NDQgc2VxdWVuY2VyLmM6NDM2MQorbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICLmj5DkvpvkuobnqbrnmoTmj5DkuqTpm4YiCisKKyM6IHNlcXVlbmNlci5jOjI2NjAKK21zZ2lkICJyZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi5LiA5YCL6YKE5Y6f5YuV5L2c5bey5Zyo6YCy6KGMIgorCisjOiBzZXF1ZW5jZXIuYzoyNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgIuWYl+ippiBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjI2NjUKK21zZ2lkICJjaGVycnktcGljayBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICLmj4Dpgbjli5XkvZzlt7LlnKjpgLLooYwiCisKKyM6IHNlcXVlbmNlci5jOjI2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICLlmJfoqaYgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjI2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIuS4jeiDveW7uueri+W6j+WIl+ebrumMhCAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyNjk2Cittc2dpZCAiY291bGQgbm90IGxvY2sgSEVBRCIKK21zZ3N0ciAi5LiN6IO96Y6W5a6aIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI3NTYgc2VxdWVuY2VyLmM6NDA5OQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi5o+A6YG45oiW6YKE5Y6f5YuV5L2c5Lim5pyq6YCy6KGMIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU4IHNlcXVlbmNlci5jOjI3NjkKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICLkuI3og73op6PmnpAgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6Mjc2MCBzZXF1ZW5jZXIuYzoyODA0Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIuS4jeiDveW+nuWwmuacquW7uueri+eahOWIhuaUr+e1guatoiIKKworIzogc2VxdWVuY2VyLmM6Mjc5MCBidWlsdGluL2dyZXAuYzo3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJyVzJyIKK21zZ3N0ciAi5LiN6IO96ZaL5ZWfICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJzogJXMiCittc2dzdHIgIuS4jeiDveiugOWPliAnJXMn77yaJXMiCisKKyM6IHNlcXVlbmNlci5jOjI3OTMKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICLmhI/lpJbnmoTmqpTmoYjntZDmnZ8iCisKKyM6IHNlcXVlbmNlci5jOjI3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICLlhLLlrZjmj4Dpgbjmj5DkuqTliY3nmoQgSEVBRCDmqpTmoYggJyVzJyDmkI3lo54iCisKKyM6IHNlcXVlbmNlci5jOjI4MTAKK21zZ2lkICJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQuIE5vdCByZXdpbmRpbmcsIGNoZWNrIHlvdXIgSEVBRCEiCittc2dzdHIgIuaCqOWlveWDj+enu+WLleS6hiBIRUFE44CC5pyq6IO96YKE5Y6f77yM5qqi5p+l5oKo55qEIEhFQUTvvIEiCisKKyM6IHNlcXVlbmNlci5jOjI4NTEKK21zZ2lkICJubyByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIuaykuacieato+WcqOmAsuihjOeahOmChOWOnyIKKworIzogc2VxdWVuY2VyLmM6Mjg1OQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIGluIHByb2dyZXNzIgorbXNnc3RyICLmspLmnInmraPlnKjpgLLooYznmoTmj4DpgbgiCisKKyM6IHNlcXVlbmNlci5jOjI4NjkKK21zZ2lkICJmYWlsZWQgdG8gc2tpcCB0aGUgY29tbWl0IgorbXNnc3RyICLnhKHms5Xot7PpgY7pgJnlgIvmj5DkuqQiCisKKyM6IHNlcXVlbmNlci5jOjI4NzYKK21zZ2lkICJ0aGVyZSBpcyBub3RoaW5nIHRvIHNraXAiCittc2dzdHIgIuaykuacieimgei3s+mBjueahCIKKworIzogc2VxdWVuY2VyLmM6Mjg3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaGF2ZSB5b3UgY29tbWl0dGVkIGFscmVhZHk/XG4iCisidHJ5IFwiZ2l0ICVzIC0tY29udGludWVcIiIKK21zZ3N0ciAiIgorIuaCqOW3sue2k+aPkOS6pOS6huWXju+8n1xuIgorIuippuippiBcImdpdCAlcyAtLWNvbnRpbnVlXCIiCisKKyM6IHNlcXVlbmNlci5jOjMwMDMgc2VxdWVuY2VyLmM6NDAxMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlICVzIgorbXNnc3RyICLkuI3og73mm7TmlrAgJXMiCisKKyM6IHNlcXVlbmNlci5jOjMwNDIgc2VxdWVuY2VyLmM6Mzk5MQorbXNnaWQgImNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIuS4jeiDveiugOWPliBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAi54Sh5rOV6KSH6KO9ICclcycg6IezICclcyciCisKKyM6IHNlcXVlbmNlci5jOjMwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLmgqjnj77lnKjlj6/ku6Xkv67oo5zpgJnlgIvmj5DkuqTvvIzkvb/nlKhcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIueVtuaCqOWwjeiuiuabtOaEn+WIsOa7v+aEj++8jOWft+ihjFxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjMwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICVzLi4uICUuKnMiCittc2dzdHIgIuS4jeiDveaHieeUqCAlcy4uLiAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzozMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtZXJnZSAlLipzIgorbXNnc3RyICLkuI3og73lkIjkvbUgJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MzA5OCBzZXF1ZW5jZXIuYzozMTAyIGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73opIfoo70gJyVzJyDoh7MgJyVzJyIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiBzZXF1ZW5jZXIuYzozMTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gZmFpbGVkOiAlc1xuIgorIiVzWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyLln7fooYzlpLHmlZfvvJolc1xuIgorIiVz5oKo5Y+v5Lul5pS55q2j6Kmy5ZWP6aGM77yM54S25b6M5Z+36KGMXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogc2VxdWVuY2VyLmM6MzEzNQorbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCittc2dzdHIgIuS4puS4lOS/ruaUuee0ouW8leWSjC/miJblt6XkvZzljYBcbiIKKworIzogc2VxdWVuY2VyLmM6MzE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIHN1Y2NlZWRlZDogJXNcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyLln7fooYzmiJDlip/vvJolc1xuIgorIuS9huaYr+WcqOe0ouW8leWSjC/miJblt6XkvZzljYDkuK3lrZjlnKjorormm7RcbiIKKyLmj5DkuqTmiJblhLLol4/kv67mlLnvvIznhLblvozln7fooYxcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgbGFiZWwgbmFtZTogJyUuKnMnIgorbXNnc3RyICLpnZ7ms5XnmoTmqJnnsaTlkI3nqLHvvJonJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjMyNTYKK21zZ2lkICJ3cml0aW5nIGZha2Ugcm9vdCBjb21taXQiCittc2dzdHIgIuWvq+WBveagueaPkOS6pCIKKworIzogc2VxdWVuY2VyLmM6MzI2MQorbXNnaWQgIndyaXRpbmcgc3F1YXNoLW9udG8iCittc2dzdHIgIuWvq+WFpSBzcXVhc2gtb250byIKKworIzogc2VxdWVuY2VyLmM6MzI5OSBidWlsdGluL3JlYmFzZS5jOjg4MCBidWlsdGluL3JlYmFzZS5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzIgorbXNnc3RyICLnhKHms5Xmib7liLAgJXMg5oyH5ZCR55qE5qi544CCIgorCisjOiBzZXF1ZW5jZXIuYzozMzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgIueEoeazleino+aekCAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozMzc1Cittc2dpZCAiY2Fubm90IG1lcmdlIHdpdGhvdXQgYSBjdXJyZW50IHJldmlzaW9uIgorbXNnc3RyICLmspLmnInnm67liY3niYjmnKzkuI3og73lkIjkvbUiCisKKyM6IHNlcXVlbmNlci5jOjMzOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclLipzJyIKK21zZ3N0ciAi54Sh5rOV6Kej5p6QICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIG1lcmdlOiAnJS4qcyciCittc2dzdHIgIueEoeWPr+eUqOWQiOS9te+8miclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzQxOAorbXNnaWQgIm9jdG9wdXMgbWVyZ2UgY2Fubm90IGJlIGV4ZWN1dGVkIG9uIHRvcCBvZiBhIFtuZXcgcm9vdF0iCittc2dzdHIgIueroOmtmuWQiOS4puS4jeiDveWcqOS4gOWAi+aWsOeahOagueaPkOS6pOS4iuWft+ihjCIKKworIzogc2VxdWVuY2VyLmM6MzQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIG9mICclcyciCittc2dzdHIgIuS4jeiDveWPluW+lyAnJXMnIOeahOaPkOS6pOiqquaYjiIKKworIzogc2VxdWVuY2VyLmM6MzU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXZlbiBhdHRlbXB0IHRvIG1lcmdlICclLipzJyIKK21zZ3N0ciAi55Sa6Iez5LiN6IO95ZiX6Kmm5ZCI5L21ICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzYxMAorbXNnaWQgIm1lcmdlOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIuWQiOS9te+8mueEoeazleWvq+WFpeaWsOe0ouW8leaqlOahiCIKKworIzogc2VxdWVuY2VyLmM6MzY3OSBidWlsdGluL3JlYmFzZS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC5cbiIKK21zZ3N0ciAi5bey5oeJ55SoIGF1dG9zdGFzaOOAglxuIgorCisjOiBzZXF1ZW5jZXIuYzozNjkxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAi5LiN6IO95YSy5a2YICVzIgorCisjOiBzZXF1ZW5jZXIuYzozNjk0IGJ1aWx0aW4vcmViYXNlLmM6NzUzIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuXG4iCisiWW91ciBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBzdGFzaC5cbiIKKyJZb3UgY2FuIHJ1biBcImdpdCBzdGFzaCBwb3BcIiBvciBcImdpdCBzdGFzaCBkcm9wXCIgYXQgYW55IHRpbWUuXG4iCittc2dzdHIgIiIKKyLmh4nnlKggYXV0b3N0YXNoIOWwjuiHtOihneeqgeOAglxuIgorIuaCqOeahOS/ruaUueWuieWFqOWcsOWEsuWtmOWcqOWEsuiXj+WNgOS4reOAglxuIgorIuaCqOWPr+S7peWcqOS7u+S9leaZguWAmeWft+ihjCBcImdpdCBzdGFzaCBwb3BcIiDmiJYgXCJnaXQgc3Rhc2ggZHJvcFwi44CCXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIHZhbGlkIE9JRCIKK21zZ3N0ciAiJXPvvJrkuI3mmK/kuIDlgIvmnInmlYjnmoTnianku7YgSUQiCisKKyM6IHNlcXVlbmNlci5jOjM3NjAgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc3OQorbXNnaWQgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAi5LiN6IO95YiG6Zui6ZaL6aCt5oyH5qiZIgorCisjOiBzZXF1ZW5jZXIuYzozNzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgSEVBRFxuIgorbXNnc3RyICLlgZzmraLlnKggSEVBRFxuIgorCisjOiBzZXF1ZW5jZXIuYzozNzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXNcbiIKK21zZ3N0ciAi5YGc5q2i5ZyoICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBleGVjdXRlIHRoZSB0b2RvIGNvbW1hbmRcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLnhKHms5Xln7fooYzlvoXovqbmjIfku6RcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIuW3suiiq+mHjeaWsOWuieaOku+8jOWcqOe5vOe6jOS5i+WJjee3qOi8r+aMh+S7pO+8jOiri+WFiOe3qOi8r+W+hei+puWIl+ihqO+8mlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tZWRpdC10b2RvXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzozODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXMuLi4gICUuKnNcbiIKK21zZ3N0ciAi5YGc5q2i5ZyoICVzLi4uICUuKnNcbiIKKworIzogc2VxdWVuY2VyLmM6Mzk0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQgJWQiCittc2dzdHIgIuacquefpeaMh+S7pCAlZCIKKworIzogc2VxdWVuY2VyLmM6Mzk5OQorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9yaWctaGVhZCIKK21zZ3N0ciAi5LiN6IO96K6A5Y+WIG9yaWctaGVhZCIKKworIzogc2VxdWVuY2VyLmM6NDAwNAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdvbnRvJyIKK21zZ3N0ciAi5LiN6IO96K6A5Y+WICdvbnRvJyIKKworIzogc2VxdWVuY2VyLmM6NDAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlIEhFQUQgdG8gJXMiCittc2dzdHIgIuS4jeiDveabtOaWsCBIRUFEIOeCuiAlcyIKKworIzogc2VxdWVuY2VyLmM6NDExMQorbXNnaWQgImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLkuI3og73ph43lrprln7rlupXvvJrmgqjmnInmnKrmmqvlrZjnmoTorormm7TjgIIiCisKKyM6IHNlcXVlbmNlci5jOjQxMjAKK21zZ2lkICJjYW5ub3QgYW1lbmQgbm9uLWV4aXN0aW5nIGNvbW1pdCIKK21zZ3N0ciAi5LiN6IO95L+u6KOc5LiN5a2Y5Zyo55qE5o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzo0MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsZTogJyVzJyIKK21zZ3N0ciAi54Sh5pWI5qqU5qGI77yaJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbnRlbnRzOiAnJXMnIgorbXNnc3RyICLnhKHmlYjlhaflrrnvvJonJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTI3Cittc2dpZCAiIgorIlxuIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSwgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisiXG4iCisi5oKo55qE5bel5L2c5Y2A5Lit5pyJ5pyq5o+Q5Lqk55qE6K6K5pu044CC6KuL5YWI5o+Q5Lqk54S25b6M5YaN5qyh5Z+36KGMICdnaXQgcmViYXNlIC0tY29udGludWUn44CCIgorCisjOiBzZXF1ZW5jZXIuYzo0MTYzIHNlcXVlbmNlci5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGZpbGU6ICclcyciCittc2dzdHIgIuS4jeiDveWvq+WFpeaqlOahiO+8miclcyciCisKKyM6IHNlcXVlbmNlci5jOjQyMTcKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIuS4jeiDveWIqumZpCBDSEVSUllfUElDS19IRUFEIgorCisjOiBzZXF1ZW5jZXIuYzo0MjI0Cittc2dpZCAiY291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIuS4jeiDveaPkOS6pOaaq+WtmOeahOS/ruaUueOAgiIKKworIzogc2VxdWVuY2VyLmM6NDMzOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiJXPvvJrkuI3og73mj4DpgbjkuIDlgIslcyIKKworIzogc2VxdWVuY2VyLmM6NDM0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlc++8mumMr+iqpOeahOeJiOacrCIKKworIzogc2VxdWVuY2VyLmM6NDM3NworbXNnaWQgImNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAi5LiN6IO95L2c54K65Yid5aeL5o+Q5Lqk6YKE5Y6f5o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzo0ODQ2Cittc2dpZCAibWFrZV9zY3JpcHQ6IHVuaGFuZGxlZCBvcHRpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdO+8muacieacquiDveiZleeQhueahOmBuOmghSIKKworIzogc2VxdWVuY2VyLmM6NDg0OQorbXNnaWQgIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJpbmcgcmV2aXNpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdO+8mua6luWCmeeJiOacrOaZgumMr+iqpCIKKworIzogc2VxdWVuY2VyLmM6NTA4MyBzZXF1ZW5jZXIuYzo1MTAwCittc2dpZCAibm90aGluZyB0byBkbyIKK21zZ3N0ciAi54Sh5LqL5Y+v5YGaIgorCisjOiBzZXF1ZW5jZXIuYzo1MTE5Cittc2dpZCAiY291bGQgbm90IHNraXAgdW5uZWNlc3NhcnkgcGljayBjb21tYW5kcyIKK21zZ3N0ciAi54Sh5rOV6Lez6YGO5LiN5b+F6KaB55qE5o+A6YG4IgorCisjOiBzZXF1ZW5jZXIuYzo1MjEzCittc2dpZCAidGhlIHNjcmlwdCB3YXMgYWxyZWFkeSByZWFycmFuZ2VkLiIKK21zZ3N0ciAi6IWz5pys5bey57aT6YeN5paw57eo5o6S44CCIgorCisjOiBzZXR1cC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSBhdCAnJXMnIgorbXNnc3RyICInJXMnIOWcqOS9jeaWvCAnJXMnIOeahOeJiOacrOW6q+S5i+WkliIKKworIzogc2V0dXAuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBubyBzdWNoIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJ2dpdCA8Y29tbWFuZD4gLS0gPHBhdGg+Li4uJyB0byBzcGVjaWZ5IHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGxvY2FsbHkuIgorbXNnc3RyICIiCisiJXPvvJrlt6XkvZzljYDkuK3nhKHmraTot6/lvpHjgIJcbiIKKyLkvb/nlKjmjIfku6QgJ2dpdCA85oyH5LukPiAtLSA86Lev5b6RPi4uLicg5L6G5oyH5a6a5pys5qmf5LiN5a2Y5Zyo55qE6Lev5b6R44CCIgorCisjOiBzZXR1cC5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyLmnInmrafnvqnnmoTlj4PmlbggJyVzJ++8muacquefpeeahOeJiOacrOaIlui3r+W+keS4jeWtmOWcqOaWvOW3peS9nOWNgOS4reOAglxuIgorIuS9v+eUqCAnLS0nIOS+huWIhumalOeJiOacrOWSjOi3r+W+ke+8jOS+i+Wmgu+8mlxuIgorIidnaXQgPOaMh+S7pD4gWzzniYjmnKw+Li4uXSAtLSBbPOaqlOahiD4uLi5dJyIKKworIzogc2V0dXAuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICclcycgbXVzdCBjb21lIGJlZm9yZSBub24tb3B0aW9uIGFyZ3VtZW50cyIKK21zZ3N0ciAi6YG46aCFICclcycg5b+F6aCI5Zyo5YW25LuW6Z2e6YG46aCF5Y+D5pW45LmL5YmNIgorCisjOiBzZXR1cC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisi5pyJ5q2n576p55qE5Y+D5pW4ICclcyfvvJrlj6/lkIzmmYLmmK/niYjmnKzlkozmqpTmoYhcbiIKKyLkvb/nlKggJy0tJyDkvobliIbpmpTniYjmnKzlkozot6/lvpHvvIzkvovlpoLvvJpcbiIKKyInZ2l0IDzmjIfku6Q+IFs854mI5pysPi4uLl0gLS0gWzzmqpTmoYg+Li4uXSciCisKKyM6IHNldHVwLmM6NDA5Cittc2dpZCAidW5hYmxlIHRvIHNldCB1cCB3b3JrIHRyZWUgdXNpbmcgaW52YWxpZCBjb25maWciCittc2dzdHIgIueEoeazleS9v+eUqOeEoeaViOioreWumuS+huW7uueri+W3peS9nOWNgCIKKworIzogc2V0dXAuYzo0MTMKK21zZ2lkICJ0aGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIKK21zZ3N0ciAi6Kmy5YuV5L2c5b+F6aCI5Zyo5LiA5YCL5bel5L2c5Y2A5Lit5Z+36KGMIgorCisjOiBzZXR1cC5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCBnaXQgcmVwbyB2ZXJzaW9uIDw9ICVkLCBmb3VuZCAlZCIKK21zZ3N0ciAi5pyf5pybIGdpdCDniYjmnKzluqvniYjmnKwgPD0gJWTvvIzljbvlvpfliLAgJWQiCisKKyM6IHNldHVwLmM6NTY3Cittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICLnmbznj77mnKrnn6XnmoTniYjmnKzluqvmk7TlsZXvvJoiCisKKyM6IHNldHVwLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAi6ZaL5ZWfICclcycg55m855Sf6Yyv6KqkIgorCisjOiBzZXR1cC5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbGFyZ2UgdG8gYmUgYSAuZ2l0IGZpbGU6ICclcyciCittc2dzdHIgIuaqlOahiOWkquWkp++8jOeEoeazleS9nOeCuiAuZ2l0IOaqlOahiO+8miclcyciCisKKyM6IHNldHVwLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgJXMiCittc2dzdHIgIuiugOWPliAlcyDnmbznlJ/pjK/oqqQiCisKKyM6IHNldHVwLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZ2l0ZmlsZSBmb3JtYXQ6ICVzIgorbXNnc3RyICLnhKHmlYjnmoQgZ2l0ZmlsZSDmoLzlvI/vvJolcyIKKworIzogc2V0dXAuYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcGF0aCBpbiBnaXRmaWxlOiAlcyIKK21zZ3N0ciAi5ZyoIGdpdGZpbGUg5Lit5rKS5pyJ6Lev5b6R77yaJXMiCisKKyM6IHNldHVwLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5YCLIGdpdCDniYjmnKzluqvvvJolcyIKKworIzogc2V0dXAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyQlcycgdG9vIGJpZyIKK21zZ3N0ciAiJyQlcycg5aSq5aSnIgorCisjOiBzZXR1cC5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJyVzJyIKK21zZ3N0ciAi5LiN5piv5LiA5YCLIGdpdCDniYjmnKzluqvvvJonJXMnIgorCisjOiBzZXR1cC5jOjczOCBzZXR1cC5jOjc0MCBzZXR1cC5jOjc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO95YiH5o+b55uu6YyE5YiwICclcyciCisKKyM6IHNldHVwLmM6NzQzIHNldHVwLmM6Nzk5IHNldHVwLmM6ODA5IHNldHVwLmM6ODQ4IHNldHVwLmM6ODU2Cittc2dpZCAiY2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIueEoeazlei/lOWbnuebruWJjeW3peS9nOebrumMhCIKKworIzogc2V0dXAuYzo4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyUqcyVzJXMnIgorbXNnc3RyICLlj5blvpcgJyUqcyVzJXMnIOeLgOaFi++8iHN0YXTvvInlpLHmlZciCisKKyM6IHNldHVwLmM6MTEwOAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIuS4jeiDveiugOWPluebruWJjeW3peS9nOebrumMhCIKKworIzogc2V0dXAuYzoxMTE3IHNldHVwLmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hhbmdlIHRvICclcyciCittc2dzdHIgIuS4jeiDveWIh+aPm+WIsCAnJXMnIgorCisjOiBzZXR1cC5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzKTogJXMiCittc2dzdHIgIuS4jeaYr+S4gOWAiyBnaXQg54mI5pys5bqr77yI5oiW6ICF5Lu75L2V54i255uu6YyE77yJ77yaJXMiCisKKyM6IHNldHVwLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisiU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS4iCittc2dzdHIgIiIKKyLkuI3mmK/kuIDlgIsgZ2l0IOeJiOacrOW6q++8iOaIluiAheebtOiHs+aOm+i8iem7niAlcyDnmoTku7vkvZXniLbnm67pjITvvIlcbiIKKyLlgZzmraLlnKjmqpTmoYjns7vntbHpgornlYzvvIjmnKroqK3lrpogR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTe+8ieOAgiIKKworIzogc2V0dXAuYzoxMjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwcm9ibGVtIHdpdGggY29yZS5zaGFyZWRSZXBvc2l0b3J5IGZpbGVtb2RlIHZhbHVlICgwJS4zbykuXG4iCisiVGhlIG93bmVyIG9mIGZpbGVzIG11c3QgYWx3YXlzIGhhdmUgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMuIgorbXNnc3RyICIiCisi5Y+D5pW4IGNvcmUuc2hhcmVkUmVwb3NpdG9yeSDnmoTmqpTmoYjlsazmgKflgLzmnInllY/poYzvvIgwJS4zb++8ieOAglxuIgorIuaqlOahiOaJgOacieiAheW/hemgiOWni+e1guaTgeacieiugOWvq+asiumZkOOAgiIKKworIzogc2V0dXAuYzoxMjg5Cittc2dpZCAib3BlbiAvZGV2L251bGwgb3IgZHVwIGZhaWxlZCIKK21zZ3N0ciAi5LiN6IO96ZaL5ZWf5oiW6ICF6KSH6KO9IC9kZXYvbnVsbCIKKworIzogc2V0dXAuYzoxMzA0Cittc2dpZCAiZm9yayBmYWlsZWQiCittc2dzdHIgImZvcmsg5aSx5pWXIgorCisjOiBzZXR1cC5jOjEzMDkKK21zZ2lkICJzZXRzaWQgZmFpbGVkIgorbXNnc3RyICJzZXRzaWQg5aSx5pWXIgorCisjOiBzaGExLWZpbGUuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdDsgY2hlY2sgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKK21zZ3N0ciAi54mp5Lu255uu6YyEICVzIOS4jeWtmOWcqO+8jOaqouafpSAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorCisjOiBzaGExLWZpbGUuYzo1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG5vcm1hbGl6ZSBhbHRlcm5hdGUgb2JqZWN0IHBhdGg6ICVzIgorbXNnc3RyICLnhKHms5Xopo/nr4TljJblgpnnlKjnianku7bot6/lvpHvvJolcyIKKworIzogc2hhMS1maWxlLmM6NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpZ25vcmluZyBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlcywgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiJXPvvJrlv73nlaXlgpnnlKjnianku7bluqvvvIzltYzlpZflpKrmt7EiCisKKyM6IHNoYTEtZmlsZS5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIG9iamVjdCBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICLnhKHms5Xopo/nr4TljJbnianku7bnm67pjIQ6ICVzIgorCisjOiBzaGExLWZpbGUuYzo2MjUKK21zZ2lkICJ1bmFibGUgdG8gZmRvcGVuIGFsdGVybmF0ZXMgbG9ja2ZpbGUiCittc2dzdHIgIueEoeazlSBmZG9wZW4g5Y+W5Luj6Y6W5qqU5qGIIgorCisjOiBzaGExLWZpbGUuYzo2NDMKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgIueEoeazleiugOWPluabv+S7o+aqlOahiCIKKworIzogc2hhMS1maWxlLmM6NjUwCittc2dpZCAidW5hYmxlIHRvIG1vdmUgbmV3IGFsdGVybmF0ZXMgZmlsZSBpbnRvIHBsYWNlIgorbXNnc3RyICLnhKHms5XlsIfmlrDnmoTmm7/ku6PmqpTmoYjnp7vli5XliLDkvY0iCisKKyM6IHNoYTEtZmlsZS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIui3r+W+kSAnJXMnIOS4jeWtmOWcqCIKKworIzogc2hhMS1maWxlLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgYXMgYSBsaW5rZWQgY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIgorbXNnc3RyICLlsJrkuI3mlK/mj7TlsIflj4PogIPniYjmnKzluqsgJyVzJyDkvZzngrrkuIDlgIvpgKPntZDnsL3lh7rjgIIiCisKKyM6IHNoYTEtZmlsZS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICLlj4PogIPniYjmnKzluqsgJyVzJyDkuI3mmK/kuIDlgIvmnKzmqZ/niYjmnKzluqvjgIIiCisKKyM6IHNoYTEtZmlsZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgIuWPg+iAg+eJiOacrOW6qyAnJXMnIOaYr+S4gOWAi+a3uuikh+ijvSIKKworIzogc2hhMS1maWxlLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgZ3JhZnRlZCIKK21zZ3N0ciAi5Y+D6ICD54mI5pys5bqrICclcycg5bey6KKr56e75qSNIgorCisjOiBzaGExLWZpbGUuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBsaW5lIHdoaWxlIHBhcnNpbmcgYWx0ZXJuYXRlIHJlZnM6ICVzIgorbXNnc3RyICLop6PmnpDlgpnnlKjlvJXnlKjmmYLnhKHmlYjnmoTooYzvvJolcyIKKworIzogc2hhMS1maWxlLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAi5ZiX6KmmIG1tYXAgJTxQUkl1TUFYPu+8jOi2hemBjuS6huacgOWkp+WAvCAlPFBSSXVNQVg+IgorCisjOiBzaGExLWZpbGUuYzo5NjQKK21zZ2lkICJtbWFwIGZhaWxlZCIKK21zZ3N0ciAibW1hcCDlpLHmlZciCisKKyM6IHNoYTEtZmlsZS5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGZpbGUgJXMgaXMgZW1wdHkiCittc2dzdHIgIueJqeS7tuaqlOahiCAlcyDngrrnqboiCisKKyM6IHNoYTEtZmlsZS5jOjEyNjMgc2hhMS1maWxlLmM6MjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICLmkI3lo57nmoTprIbmlaPnianku7YgJyVzJyIKKworIzogc2hhMS1maWxlLmM6MTI2NSBzaGExLWZpbGUuYzoyNDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICLprIbmlaPnianku7YgJyVzJyDlvozpnaLmnInlnoPlnL7os4fmlpkiCisKKyM6IHNoYTEtZmlsZS5jOjEzMDcKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIgorbXNnc3RyICLnhKHmlYjnmoTnianku7bpoZ7lnosiCisKKyM6IHNoYTEtZmlsZS5jOjEzOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAi54Sh5rOV55SoIC0tYWxsb3ctdW5rbm93bi10eXBlIOWPg+aVuOino+mWiyAlcyDmqJnpoK3oqIrmga8iCisKKyM6IHNoYTEtZmlsZS5jOjEzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIiCittc2dzdHIgIueEoeazleino+mWiyAlcyDpoK3pg6giCisKKyM6IHNoYTEtZmlsZS5jOjE0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIgorbXNnc3RyICLnhKHms5XnlKggLS1hbGxvdy11bmtub3duLXR5cGUg5Y+D5pW46Kej5p6QICVzIOaomemgreioiuaBryIKKworIzogc2hhMS1maWxlLmM6MTQwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIgorbXNnc3RyICLnhKHms5Xop6PmnpAgJXMg6aCt6YOoIgorCisjOiBzaGExLWZpbGUuYzoxNjI5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAi6K6A5Y+W54mp5Lu2ICVzIOWkseaVlyIKKworIzogc2hhMS1maWxlLmM6MTYzMworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlbWVudCAlcyBub3QgZm91bmQgZm9yICVzIgorbXNnc3RyICLmib7kuI3liLAgJTIkcyDnmoTmm7/ku6MgJTEkcyIKKworIzogc2hhMS1maWxlLmM6MTYzNworIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAi6ayG5pWj54mp5Lu2ICVz77yI5YSy5a2Y5ZyoICVz77yJ5bey5pCN5aOeIgorCisjOiBzaGExLWZpbGUuYzoxNjQxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tlZCBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAi5omT5YyF54mp5Lu2ICVz77yI5YSy5a2Y5ZyoICVz77yJ5bey5pCN5aOeIgorCisjOiBzaGExLWZpbGUuYzoxNzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICVzIgorbXNnc3RyICLnhKHms5Xlr6vmqpTmoYggJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBwZXJtaXNzaW9uIHRvICclcyciCittc2dzdHIgIueEoeazleeCuiAnJXMnIOioreWumuasiumZkCIKKworIzogc2hhMS1maWxlLmM6MTc2MAorbXNnaWQgImZpbGUgd3JpdGUgZXJyb3IiCittc2dzdHIgIuaqlOahiOWvq+mMr+iqpCIKKworIzogc2hhMS1maWxlLmM6MTc4MAorbXNnaWQgImVycm9yIHdoZW4gY2xvc2luZyBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAi6Zec6ZaJ6ayG5pWj54mp5Lu25qqU5qGI5pmC55m855Sf6Yyv6KqkIgorCisjOiBzaGExLWZpbGUuYzoxODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImluc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciBhZGRpbmcgYW4gb2JqZWN0IHRvIHJlcG9zaXRvcnkgZGF0YWJhc2UgJXMiCittc2dzdHIgIuasiumZkOS4jei2s++8jOeEoeazleWcqOeJiOacrOW6q+eJqeS7tuW6qyAlcyDkuK3mlrDlop7nianku7YiCisKKyM6IHNoYTEtZmlsZS5jOjE4NDcKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICLnhKHms5Xlu7rnq4vmmqvlrZjmqpQiCisKKyM6IHNoYTEtZmlsZS5jOjE4NzEKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgIuS4jeiDveWvq+mshuaVo+eJqeS7tuaqlOahiCIKKworIzogc2hhMS1maWxlLmM6MTg3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBuZXcgb2JqZWN0ICVzICglZCkiCittc2dzdHIgIuS4jeiDveWjk+e4ruaWsOeJqeS7tiAlc++8iCVk77yJIgorCisjOiBzaGExLWZpbGUuYzoxODgxCisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGVFbmQgb24gb2JqZWN0ICVzIGZhaWxlZCAoJWQpIgorbXNnc3RyICLlnKjnianku7YgJXMg5LiK5ZG85Y+rIGRlZmxhdGVFbmQg5aSx5pWX77yIJWTvvIkiCisKKyM6IHNoYTEtZmlsZS5jOjE4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZnVzZWQgYnkgdW5zdGFibGUgb2JqZWN0IHNvdXJjZSBkYXRhIGZvciAlcyIKK21zZ3N0ciAi6KKrICVzIOeahOS4jeepqeWumueJqeS7tua6kOizh+aWmeaQnueziuWhl+S6hiIKKworIzogc2hhMS1maWxlLmM6MTg5NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJXMiCittc2dzdHIgIuWcqCAlcyDkuIrlkbzlj6sgdXRpbWUoKSDlpLHmlZciCisKKyM6IHNoYTEtZmlsZS5jOjE5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAi5LiN6IO96K6A5Y+W54mp5Lu2ICVzIgorCisjOiBzaGExLWZpbGUuYzoyMDExCittc2dpZCAiY29ycnVwdCBjb21taXQiCittc2dzdHIgIuaQjeWjnueahOaPkOS6pCIKKworIzogc2hhMS1maWxlLmM6MjAxOQorbXNnaWQgImNvcnJ1cHQgdGFnIgorbXNnc3RyICLmkI3lo57nmoTmqJnnsaQiCisKKyM6IHNoYTEtZmlsZS5jOjIxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBlcnJvciB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAi57Si5byVICVzIOaZguiugOWPlumMr+iqpCIKKworIzogc2hhMS1maWxlLmM6MjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCByZWFkIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICLntKLlvJUgJXMg5pmC6K6A5YWl5LiN5a6M5pW0IgorCisjOiBzaGExLWZpbGUuYzoyMTk1IHNoYTEtZmlsZS5jOjIyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIKK21zZ3N0ciAiJXPvvJrmj5LlhaXos4fmlpnluqvlpLHmlZciCisKKyM6IHNoYTEtZmlsZS5jOjIyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIKK21zZ3N0ciAiJXPvvJrkuI3mlK/mj7TnmoTmqpTmoYjpoZ7lnosiCisKKyM6IHNoYTEtZmlsZS5jOjIyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgb2JqZWN0IgorbXNnc3RyICIlcyDkuI3mmK/kuIDlgIvmnInmlYjnmoTnianku7YiCisKKyM6IHNoYTEtZmlsZS5jOjIyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiVzIOS4jeaYr+S4gOWAi+acieaViOeahCAnJXMnIOeJqeS7tiIKKworIzogc2hhMS1maWxlLmM6MjI2NCBidWlsdGluL2luZGV4LXBhY2suYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgIuS4jeiDvemWi+WVnyAlcyIKKworIzogc2hhMS1maWxlLmM6MjQ1NCBzaGExLWZpbGUuYzoyNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggZm9yICVzIChleHBlY3RlZCAlcykiCittc2dzdHIgIiVzIOeahOmbnOa5iuWAvOS4jeespuWQiO+8iOmgkOacnyAlc++8iSIKKworIzogc2hhMS1maWxlLmM6MjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAlcyIKK21zZ3N0ciAi5LiN6IO9IG1tYXAgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayBoZWFkZXIgb2YgJXMiCittc2dzdHIgIueEoeazleino+Wjk+e4riAlcyDnmoTpoK3pg6giCisKKyM6IHNoYTEtZmlsZS5jOjI0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAi54Sh5rOV6Kej5p6QICVzIOeahOmgremDqCIKKworIzogc2hhMS1maWxlLmM6MjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGNvbnRlbnRzIG9mICVzIgorbXNnc3RyICLnhKHms5Xop6Plo5PnuK4gJXMg55qE5YWn5a65IgorCisjOiBzaGExLW5hbWUuYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgU0hBMSAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIuefrSBTSEExICVzIOWtmOWcqOatp+e+qSIKKworIzogc2hhMS1uYW1lLmM6NDk3Cittc2dpZCAiVGhlIGNhbmRpZGF0ZXMgYXJlOiIKK21zZ3N0ciAi5YCZ6YG46ICF5pyJ77yaIgorCisjOiBzaGExLW5hbWUuYzo3OTYKK21zZ2lkICIiCisiR2l0IG5vcm1hbGx5IG5ldmVyIGNyZWF0ZXMgYSByZWYgdGhhdCBlbmRzIHdpdGggNDAgaGV4IGNoYXJhY3RlcnNcbiIKKyJiZWNhdXNlIGl0IHdpbGwgYmUgaWdub3JlZCB3aGVuIHlvdSBqdXN0IHNwZWNpZnkgNDAtaGV4LiBUaGVzZSByZWZzXG4iCisibWF5IGJlIGNyZWF0ZWQgYnkgbWlzdGFrZS4gRm9yIGV4YW1wbGUsXG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorIlxuIgorIndoZXJlIFwiJGJyXCIgaXMgc29tZWhvdyBlbXB0eSBhbmQgYSA0MC1oZXggcmVmIGlzIGNyZWF0ZWQuIFBsZWFzZVxuIgorImV4YW1pbmUgdGhlc2UgcmVmcyBhbmQgbWF5YmUgZGVsZXRlIHRoZW0uIFR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieVxuIgorInJ1bm5pbmcgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIgorbXNnc3RyICIiCisiR2l0IOmAmuW4uOS4jeacg+W7uueri+S4gOWAi+S7pTQw5YCL5Y2B5YWt6YCy5L2N5a2X5YWD57WQ5bC+55qE5byV55So77yM5Zug54K655W25oKo5Y+q5o+Q5L6bNDBcbiIKKyLlgIvljYHlha3pgLLkvY3lrZflhYPmmYLlsIfooqvlv73nlaXjgILpgJnkupvlvJXnlKjlj6/og73ooqvpjK/oqqTlnLDlu7rnq4vjgILkvovlpoLvvJpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisi55W2IFwiJGJyXCIg5p+Q56iu5Y6f5Zug56m655m95pmC77yM5LiA5YCLNDDkvY3ljYHlha3pgLLkvY3nmoTlvJXnlKjlsIfooqvlu7rnq4vjgILoq4vmqqLmn6XpgJnkuptcbiIKKyLlvJXnlKjvvIzlj6/og73pnIDopoHliKrpmaTlroPlgJHjgILln7fooYwgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZ1xuIgorImZhbHNlXCIg5oyH5Luk6Zec6ZaJ5pys5raI5oGv6YCa55+l44CCIgorCisjOiBzaGExLW5hbWUuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciAnJS4qcycgb25seSBnb2VzIGJhY2sgdG8gJXMiCittc2dzdHIgIiclLipzJyDnmoTml6Xoqozlj6rog73lm57liLAgJXMiCisKKyM6IHNoYTEtbmFtZS5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICclLipzJyBvbmx5IGhhcyAlZCBlbnRyaWVzIgorbXNnc3RyICInJS4qcycg55qE5pel6KqM5Y+q5pyJICVkIOWAi+mgheebriIKKworIzogc2hhMS1uYW1lLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gJyUuKnMnIgorbXNnc3RyICLno4Hnop/kuIrlrZjlnKggJyVzJyDot6/lvpHvvIzkvYbkuI3lrZjlnKjmlrwgJyUuKnMnIgorCisjOiBzaGExLW5hbWUuYzoxNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXRoICclcycgZXhpc3RzLCBidXQgbm90ICclcydcbiIKKyJoaW50OiBEaWQgeW91IG1lYW4gJyUuKnM6JXMnIGFrYSAnJS4qczouLyVzJz8iCittc2dzdHIgIiIKKyInJXMnIOi3r+W+keWtmOWcqO+8jOS9huS4jeaYryAnJXMnXG4iCisi5o+Q56S677ya5L2g5Zyo6KqqICclLipzOiVzJ++8jOWNsyAnJS4qczouLyVzJyDll47vvJ8iCisKKyM6IHNoYTEtbmFtZS5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IGluICclLipzJyIKK21zZ3N0ciAiJyVzJyDot6/lvpHkuI3lrZjlnKjmlrwgJyUuKnMnIgorCisjOiBzaGExLW5hbWUuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwYXRoICclcycgaXMgaW4gdGhlIGluZGV4LCBidXQgbm90IGF0IHN0YWdlICVkXG4iCisiaGludDogRGlkIHlvdSBtZWFuICc6JWQ6JXMnPyIKK21zZ3N0ciAiIgorIiclcycg6Lev5b6R5Zyo57Si5byV77yM5L2G5LiN5ZyoICVkIOaaq+WtmOWNgFxuIgorIuaPkOekuu+8muS9oOWcqOiqqiAnOiVkOiVzJyDll47vvJ8iCisKKyM6IHNoYTEtbmFtZS5jOjE3NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInBhdGggJyVzJyBpcyBpbiB0aGUgaW5kZXgsIGJ1dCBub3QgJyVzJ1xuIgorImhpbnQ6IERpZCB5b3UgbWVhbiAnOiVkOiVzJyBha2EgJzolZDouLyVzJz8iCittc2dzdHIgIiIKKyInJXMnIOi3r+W+keWcqOe0ouW8le+8jOS9huS4jeaYryAnJXMnXG4iCisi5o+Q56S677ya5L2g5Zyo6KqqICc6JWQ6JXMn77yM5Y2zICc6JWQ6JXMnIOWXju+8nyIKKworIzogc2hhMS1uYW1lLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gdGhlIGluZGV4IgorbXNnc3RyICLno4Hnop/kuIrlrZjlnKggJyVzJyDot6/lvpHvvIzkvYbkuI3lnKjntKLlvJXkuK0iCisKKyM6IHNoYTEtbmFtZS5jOjE3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IChuZWl0aGVyIG9uIGRpc2sgbm9yIGluIHRoZSBpbmRleCkiCittc2dzdHIgIiclcycg6Lev5b6R5LiN5a2Y5ZyoICjml6LkuI3lrZjlnKjno4Hnop/vvIzkuZ/kuI3lrZjlnKjntKLlvJUpIgorCisjOiBzaGExLW5hbWUuYzoxNzcxCittc2dpZCAicmVsYXRpdmUgcGF0aCBzeW50YXggY2FuJ3QgYmUgdXNlZCBvdXRzaWRlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi55u45bCN6Lev5b6R6IiH5rOV5LiN6IO955So5Zyo5bel5L2c5Y2A5aSWIgorCisjOiBzaGExLW5hbWUuYzoxOTA5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IG5hbWUgJyUuKnMnLiIKK21zZ3N0ciAiJyUuKnMnIOeJqeS7tuWQjeeoseeEoeaViOOAgiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlCisjOiBzdHJidWYuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCIgorbXNnc3RyICIldS4lMi4ydSBHaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgR2lCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZQorIzogc3RyYnVmLmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQiIKK21zZ3N0ciAiJXUuJTIuMnUgTWlCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCL3MiCittc2dzdHIgIiV1LiUyLjJ1IE1pQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBLaUIiCittc2dzdHIgIiV1LiUyLjJ1IEtpQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQi9zIgorbXNnc3RyICIldS4lMi4ydSBLaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUKKyM6IHN0cmJ1Zi5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlIgorbXNnaWRfcGx1cmFsICIldSBieXRlcyIKK21zZ3N0clswXSAiJXUg5L2N5YWD57WEIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg2NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlL3MiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzL3MiCittc2dzdHJbMF0gIiV1IOS9jeWFg+e1hC/np5IiCisKKyM6IHN0cmJ1Zi5jOjExNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGVkaXQgJyVzJyIKK21zZ3N0ciAi54Sh5rOV57eo6LyvICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjExNCBzdWJtb2R1bGUuYzoxNDMKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAi54Sh5rOV5L+u5pS55pyq5ZCI5L2155qEIC5naXRtb2R1bGVz77yM5YWI6Kej5rG65ZCI5L216KGd56qBIgorCisjOiBzdWJtb2R1bGUuYzoxMTggc3VibW9kdWxlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAi54Sh5rOV5ZyoIC5naXRtb2R1bGVzIOS4reaJvuWIsCBwYXRoPSVzIOeahOWwj+evgCIKKworIzogc3VibW9kdWxlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICLnhKHms5Xnp7vpmaQgJXMg55qEIC5naXRtb2R1bGVzIOaineebriIKKworIzogc3VibW9kdWxlLmM6MTY1Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAi5bCH5pu05paw5b6MIC5naXRtb2R1bGVzIOaWsOWinuaaq+WtmOWNgOWkseaVlyIKKworIzogc3VibW9kdWxlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLkvY3mlrzmnKrnsL3lh7rnmoTlrZDmqKHntYQgJyVzJyIKKworIzogc3VibW9kdWxlLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAi6Lev5b6R6KaP5qC8ICclcycg5Zyo5a2Q5qih57WEICclLipzJyDkuK0iCisKKyM6IHN1Ym1vZHVsZS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS1pZ25vcmUtc3VibW9kdWxlcyBhcmd1bWVudDogJXMiCittc2dzdHIgIueEoeaViCAtLWlnbm9yZS1zdWJtb2R1bGVzIOWPg+aVuO+8miVzIgorCisjOiBzdWJtb2R1bGUuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSBpbiBjb21taXQgJXMgYXQgcGF0aDogJyVzJyBjb2xsaWRlcyB3aXRoIGEgc3VibW9kdWxlIG5hbWVkIHRoZSAiCisic2FtZS4gU2tpcHBpbmcgaXQuIgorbXNnc3RyICIlcyDmj5DkuqTkvY3mlrzot6/lvpHvvJonJXMnIOeahOWtkOaooee1hOiIh+WQjOWQjeeahOWtkOaooee1hOihneeqgeOAgui3s+mBjuOAgiIKKworIzogc3VibW9kdWxlLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSBlbnRyeSAnJXMnICglcykgaXMgYSAlcywgbm90IGEgY29tbWl0IgorbXNnc3RyICLlrZDmqKHntYTmop3nm64gJyVzJ++8iCVz77yJ5piv5LiA5YCLICVz77yM5LiN5piv5LiA5YCL5o+Q5LqkIgorCisjOiBzdWJtb2R1bGUuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCA8Y29tbWl0cz4gLS1ub3QgLS1yZW1vdGVzIC1uIDEnIGNvbW1hbmQgaW4gIgorInN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi54Sh5rOV5ZyoICVzIOWtkOaooee1hOWft+ihjCAnZ2l0IHJldi1saXN0IDzmj5DkuqQ+IC0tbm90IC0tcmVtb3RlcyAtbiAxJyDlkb3ku6QiCisKKyM6IHN1Ym1vZHVsZS5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvY2VzcyBmb3Igc3VibW9kdWxlICclcycgZmFpbGVkIgorbXNnc3RyICLomZXnkIYgJyVzJyDlrZDmqKHntYTlpLHmlZciCisKKyM6IHN1Ym1vZHVsZS5jOjExNDcgYnVpbHRpbi9icmFuY2guYzo2ODAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIwNDUKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAi54Sh5rOV5bCHIEhFQUQg6Kej5p6Q54K65pyJ5pWI5byV55So44CCIgorCisjOiBzdWJtb2R1bGUuYzoxMTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAi5q2j5Zyo5o6o6YCBICclcycg5a2Q5qih57WEXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjExNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHB1c2ggc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAi54Sh5rOV5o6o6YCBICclcycg5a2Q5qih57WEXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjE0NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgc3VibW9kdWxlICVzJXNcbiIKK21zZ3N0ciAi5q2j5Zyo5oqT5Y+WICVzJXMg5a2Q5qih57WEXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjE0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFjY2VzcyBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICLnhKHms5XlrZjlj5blrZDmqKHntYQgJyVzJ1xuIgorCisjOiBzdWJtb2R1bGUuYzoxNjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvcnMgZHVyaW5nIHN1Ym1vZHVsZSBmZXRjaDpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuaKk+WPluWtkOaooee1hOaZgueZvOeUn+mMr+iqpO+8mlxuIgorIiVzIgorCisjOiBzdWJtb2R1bGUuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbm90IHJlY29nbml6ZWQgYXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAi54Sh5rOV5bCHICclcycg6K2Y5Yil54K65LiA5YCLIGdpdCDniYjmnKzluqsiCisKKyM6IHN1Ym1vZHVsZS5jOjE2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj0yJyBpbiBzdWJtb2R1bGUgJXMiCittc2dzdHIgIueEoeazleWcqCAlcyDlrZDmqKHntYTln7fooYwgJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49MiciCisKKyM6IHN1Ym1vZHVsZS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49MicgZmFpbGVkIGluIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiJXMg5a2Q5qih57WE5Z+36KGMICdnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTInIOWkseaVlyIKKworIzogc3VibW9kdWxlLmM6MTgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLnhKHms5XlnKjlrZDmqKHntYQgJyVzJyDkuK3llZ/li5UgJ2dpdCBzdGF0dXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLnhKHms5XlnKjlrZDmqKHntYQgJyVzJyDkuK3ln7fooYwgJ2dpdCBzdGF0dXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIueEoeazleWcqOWtkOaooee1hCAnJXMnIOS4reWPlua2iCBjb3JlLndvcmt0cmVlIOeahOioreWumiIKKworIzogc3VibW9kdWxlLmM6MTg1NSBzdWJtb2R1bGUuYzoyMTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgIueEoeazlemBnui/tOWtkOaooee1hOi3r+W+kSAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODc2Cittc2dpZCAiY291bGQgbm90IHJlc2V0IHN1Ym1vZHVsZSBpbmRleCIKK21zZ3N0ciAi54Sh5rOV6YeN6Kit5a2Q5qih57WE55qE57Si5byVIgorCisjOiBzdWJtb2R1bGUuYzoxOTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGhhcyBkaXJ0eSBpbmRleCIKK21zZ3N0ciAi5a2Q5qih57WEICclcycg5Lit5pyJ6auS57Si5byVIgorCisjOiBzdWJtb2R1bGUuYzoxOTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnIGNvdWxkIG5vdCBiZSB1cGRhdGVkLiIKK21zZ3N0ciAi5a2Q5qih57WEICclcycg54Sh5rOV6KKr5pu05paw44CCIgorCisjOiBzdWJtb2R1bGUuYzoyMDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSBnaXQgZGlyICclcycgaXMgaW5zaWRlIGdpdCBkaXIgJyUuKnMnIgorbXNnc3RyICLjgIwlc+OAjeWtkOaooee1hCBnaXQg55uu6YyE5Zyo44CMJS4qc+OAjWdpdCDot6/lvpHkuK0iCisKKyM6IHN1Ym1vZHVsZS5jOjIwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIuS4jeaUr+aPtOWwjeacieWkmuWAi+W3peS9nOWNgOeahOWtkOaooee1hCAnJXMnIOWft+ihjCByZWxvY2F0ZV9naXRkaXIiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNzEgc3VibW9kdWxlLmM6MjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIG5hbWUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLkuI3og73mn6XoqaLlrZDmqKHntYQgJyVzJyDnmoTlkI3nqLEiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbW92ZSAnJXMnIGludG8gYW4gZXhpc3RpbmcgZ2l0IGRpciIKK21zZ3N0ciAi5ouS57WV56e75YuV44CMJXPjgI3oh7Pnj77lrZggZ2l0IOebrumMhCIKKworIzogc3VibW9kdWxlLmM6MjA4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTWlncmF0aW5nIGdpdCBkaXJlY3Rvcnkgb2YgJyVzJXMnIGZyb21cbiIKKyInJXMnIHRvXG4iCisiJyVzJ1xuIgorbXNnc3RyICIiCisi5bCHICclcyVzJyDnmoQgZ2l0IOebrumMhOW+nlxuIgorIiclcycg6YG356e76IezXG4iCisiJyVzJ1xuIgorCisjOiBzdWJtb2R1bGUuYzoyMjA5Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGxzLWZpbGVzIGluIC4uIgorbXNnc3RyICLnhKHms5XlnKggLi4g5Lit5ZWf5YuVIGxzLWZpbGVzIgorCisjOiBzdWJtb2R1bGUuYzoyMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImxzLXRyZWUgcmV0dXJuZWQgdW5leHBlY3RlZCByZXR1cm4gY29kZSAlZCIKK21zZ3N0ciAibHMtdHJlZSDov5Tlm57mnKrnn6Xov5Tlm57lgLwgJWQiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgc3VzcGljaW91cyBzdWJtb2R1bGUgbmFtZTogJXMiCittc2dzdHIgIuW/veeVpeWPr+eWkeeahOWtkOaooee1hOWQjeeose+8miVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MzAzCittc2dpZCAibmVnYXRpdmUgdmFsdWVzIG5vdCBhbGxvd2VkIGZvciBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorbXNnc3RyICJzdWJtb2R1bGUuZmV0Y2hqb2JzIOS4jeWFgeioseeCuuiyoOWAvCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAnJXMnIHdoaWNoIG1heSBiZSBpbnRlcnByZXRlZCBhcyBhIGNvbW1hbmQtbGluZSBvcHRpb246ICVzIgorbXNnc3RyICLlv73nlaXlj6/og73ooqvop6PmnpDngrrmjIfku6TliJfpgbjpoIXnmoQgJyVzJ++8miVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICIlcyDnmoTlgLznhKHmlYgiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSAuZ2l0bW9kdWxlcyBlbnRyeSAlcyIKK21zZ3N0ciAi5LiN6IO95pu05pawIC5naXRtb2R1bGVzIOaineebriAlcyIKKworIzogdHJhaWxlci5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJydW5uaW5nIHRyYWlsZXIgY29tbWFuZCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi5Z+36KGMIHRyYWlsZXIg5oyH5LukICclcycg5aSx5pWXIgorCisjOiB0cmFpbGVyLmM6NDg1IHRyYWlsZXIuYzo0OTAgdHJhaWxlci5jOjQ5NSB0cmFpbGVyLmM6NTQ5IHRyYWlsZXIuYzo1NTMKKyM6IHRyYWlsZXIuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAi6Y21ICclMiRzJyDnmoTmnKrnn6Xlj5blgLwgJyUxJHMnIgorCisjOiB0cmFpbGVyLmM6NTM5IHRyYWlsZXIuYzo1NDQgYnVpbHRpbi9yZW1vdGUuYzoyOTggYnVpbHRpbi9yZW1vdGUuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAi5aSa5pa85LiA5YCLICVzIgorCisjOiB0cmFpbGVyLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHRyYWlsZXIgdG9rZW4gaW4gdHJhaWxlciAnJS4qcyciCittc2dzdHIgIuewveWQjSAnJS4qcycg55qE6Y2154K656m6IgorCisjOiB0cmFpbGVyLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO96K6A5Y+W6Ly45YWl5qqU5qGIICclcyciCisKKyM6IHRyYWlsZXIuYzo3NTMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICLkuI3og73oh6rmqJnmupbovLjlhaXoroDlj5YiCisKKyM6IHRyYWlsZXIuYzoxMDExIHdyYXBwZXIuYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJXMiCittc2dzdHIgIuS4jeiDveWwjSAlcyDlkbzlj6sgc3RhdCIKKworIzogdHJhaWxlci5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUiCittc2dzdHIgIuaqlOahiCAlcyDkuI3mmK/kuIDlgIvmraPopo/mqpTmoYgiCisKKyM6IHRyYWlsZXIuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IHdyaXRhYmxlIGJ5IHVzZXIiCittc2dzdHIgIuaqlOahiCAlcyDkvb/nlKjogIXkuI3lj6/lr6siCisKKyM6IHRyYWlsZXIuYzoxMDI3Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIuS4jeiDvemWi+WVn+aaq+WtmOaqlCIKKworIzogdHJhaWxlci5jOjEwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSB0ZW1wb3JhcnkgZmlsZSB0byAlcyIKK21zZ3N0ciAi5LiN6IO96YeN5paw5ZG95ZCN5pqr5a2Y5qqU54K6ICVzIgorCisjOiB0cmFuc3BvcnQuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2V0IHVwc3RyZWFtIG9mICclcycgdG8gJyVzJyBvZiAnJXMnXG4iCittc2dzdHIgIuWwh+imgeioreWumiAnJTEkcycg55qE5LiK5ri454K6ICclMyRzJyDnmoQgJyUyJHMnXG4iCisKKyM6IHRyYW5zcG9ydC5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBidW5kbGUgJyVzJyIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+WIGJ1bmRsZSAnJXMnIgorCisjOiB0cmFuc3BvcnQuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0OiBpbnZhbGlkIGRlcHRoIG9wdGlvbiAnJXMnIgorbXNnc3RyICLlgrPovLjvvJrnhKHmlYjnmoTmt7HluqbpgbjpoIUgJyVzJyIKKworIzogdHJhbnNwb3J0LmM6MjY2Cittc2dpZCAic2VlIHByb3RvY29sLnZlcnNpb24gaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgZGV0YWlscyIKK21zZ3N0ciAi5qqi6KaWICdnaXQgaGVscCBjb25maWcnIOS4reeahCBwcm90b2NvbC52ZXJzaW9uIOWPluW+l+abtOWkmuioiuaBryIKKworIzogdHJhbnNwb3J0LmM6MjY3Cittc2dpZCAic2VydmVyIG9wdGlvbnMgcmVxdWlyZSBwcm90b2NvbCB2ZXJzaW9uIDIgb3IgbGF0ZXIiCittc2dzdHIgIuacjeWLmeerr+mBuOmghemcgOimgeeJiOacrCAyIOWNlOWumuaIluabtOmrmCIKKworIzogdHJhbnNwb3J0LmM6NjMyCittc2dpZCAiY291bGQgbm90IHBhcnNlIHRyYW5zcG9ydC5jb2xvci4qIGNvbmZpZyIKK21zZ3N0ciAi5LiN6IO96Kej5p6QIHRyYW5zcG9ydC5jb2xvci4qIOioreWumiIKKworIzogdHJhbnNwb3J0LmM6NzA1Cittc2dpZCAic3VwcG9ydCBmb3IgcHJvdG9jb2wgdjIgbm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAi5Y2U5a6aIHYyIOeahOaUr+aPtOWwmuacquWvpuePviIKKworIzogdHJhbnNwb3J0LmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgZm9yIGNvbmZpZyAnJXMnOiAlcyIKK21zZ3N0ciAi6Kit5a6aICclcycg55qE5Y+W5YC85pyq55+l77yaJXMiCisKKyM6IHRyYW5zcG9ydC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAi5YKz6Ly4ICclcycg5LiN5YWB6KixIgorCisjOiB0cmFuc3BvcnQuYzo5NDkKK21zZ2lkICJnaXQtb3Zlci1yc3luYyBpcyBubyBsb25nZXIgc3VwcG9ydGVkIgorbXNnc3RyICLkuI3lho3mlK/mj7QgZ2l0LW92ZXItcnN5bmMiCisKKyM6IHRyYW5zcG9ydC5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgc3VibW9kdWxlIHBhdGhzIGNvbnRhaW4gY2hhbmdlcyB0aGF0IGNhblxuIgorIm5vdCBiZSBmb3VuZCBvbiBhbnkgcmVtb3RlOlxuIgorbXNnc3RyICLkuIvliJflrZDmqKHntYTot6/lvpHmiYDljIXlkKvnmoTkv67mlLnlnKjku7vkvZXpgaDnq6/mupDkuK3pg73mib7kuI3liLDvvJpcbiIKKworIzogdHJhbnNwb3J0LmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGxlYXNlIHRyeVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisib3IgY2QgdG8gdGhlIHBhdGggYW5kIHVzZVxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyJ0byBwdXNoIHRoZW0gdG8gYSByZW1vdGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLoq4vlmJfoqaZcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIuaIluiAhemAsuWFpeWIsOWtkOebrumMhOWft+ihjFxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyLku6XmjqjpgIHoh7PpgaDnq6/jgIJcbiIKKyJcbiIKKworIzogdHJhbnNwb3J0LmM6MTA1NgorbXNnaWQgIkFib3J0aW5nLiIKK21zZ3N0ciAi5q2j5Zyo57WC5q2i44CCIgorCisjOiB0cmFuc3BvcnQuYzoxMjAxCittc2dpZCAiZmFpbGVkIHRvIHB1c2ggYWxsIG5lZWRlZCBzdWJtb2R1bGVzIgorbXNnc3RyICLkuI3og73mjqjpgIHlhajpg6jpnIDopoHnmoTlrZDmqKHntYQiCisKKyM6IHRyYW5zcG9ydC5jOjEzNDUgdHJhbnNwb3J0LWhlbHBlci5jOjY1NworbXNnaWQgIm9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIgorbXNnc3RyICLljZTlrprkuI3mlK/mj7ToqbLli5XkvZwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MSB0cmFuc3BvcnQtaGVscGVyLmM6OTAKK21zZ2lkICJmdWxsIHdyaXRlIHRvIHJlbW90ZSBoZWxwZXIgZmFpbGVkIgorbXNnc3RyICLlrozmlbTlr6vlhaXpgaDnq6/liqnmiYvlpLHmlZciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgcmVtb3RlIGhlbHBlciBmb3IgJyVzJyIKK21zZ3N0ciAi54Sh5rOV54K6ICclcycg5om+5Yiw6YGg56uv5Yqp5omLIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTYwIHRyYW5zcG9ydC1oZWxwZXIuYzo1NzEKK21zZ2lkICJjYW4ndCBkdXAgaGVscGVyIG91dHB1dCBmZCIKK21zZ3N0ciAi54Sh5rOV6KSH6KO95Yqp5omL6Ly45Ye65qqU5qGI5Y+l5p+EIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmtub3duIG1hbmRhdG9yeSBjYXBhYmlsaXR5ICVzOyB0aGlzIHJlbW90ZSBoZWxwZXIgcHJvYmFibHkgbmVlZHMgbmV3ZXIgIgorInZlcnNpb24gb2YgR2l0IgorbXNnc3RyICLmnKrnn6XnmoTlvLfliLbog73lipsgJXPvvIzoqbLpgaDnq6/liqnmiYvlj6/og73pnIDopoHmlrDniYjmnKznmoRHaXQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyMTcKK21zZ2lkICJ0aGlzIHJlbW90ZSBoZWxwZXIgc2hvdWxkIGltcGxlbWVudCByZWZzcGVjIGNhcGFiaWxpdHkiCittc2dzdHIgIumBoOerr+WKqeaJi+mcgOimgeWvpuePviByZWZzcGVjIOiDveWKmyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjI4NCB0cmFuc3BvcnQtaGVscGVyLmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHVuZXhwZWN0ZWRseSBzYWlkOiAnJXMnIgorbXNnc3RyICIlcyDmhI/lpJblnLDoqqrvvJonJXMnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsc28gbG9ja2VkICVzIgorbXNnc3RyICIlcyDkuZ/pjpblrprkuoYgJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0OTMKK21zZ2lkICJjb3VsZG4ndCBydW4gZmFzdC1pbXBvcnQiCittc2dzdHIgIuS4jeiDveWft+ihjCBmYXN0LWltcG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjUxNgorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1pbXBvcnQiCittc2dzdHIgIuWft+ihjCBmYXN0LWltcG9ydCDnmbznlJ/pjK/oqqQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1NDUgdHJhbnNwb3J0LWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICLnhKHms5XoroDlj5blvJXnlKggJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biByZXNwb25zZSB0byBjb25uZWN0OiAlcyIKK21zZ3N0ciAi6YCj57ea5pmC5pyq55+l55qE5Zue5oeJ77yaJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTIKK21zZ2lkICJzZXR0aW5nIHJlbW90ZSBzZXJ2aWNlIHBhdGggbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAi5Y2U5a6a5LiN5pSv5o+06Kit5a6a6YGg56uv5pyN5YuZ6Lev5b6RIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjE0Cittc2dpZCAiaW52YWxpZCByZW1vdGUgc2VydmljZSBwYXRoIgorbXNnc3RyICLnhKHmlYjnmoTpgaDnq6/mnI3li5not6/lvpEiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY29ubmVjdCB0byBzdWJzZXJ2aWNlICVzIgorbXNnc3RyICLkuI3og73pgKPnt5rliLDlrZDmnI3li5kgJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciCittc2dzdHIgIumgkOacnyBvay9lcnJvcu+8jOWKqeaJi+iqqiAnJXMnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciByZXBvcnRlZCB1bmV4cGVjdGVkIHN0YXR1cyBvZiAlcyIKK21zZ3N0ciAi5Yqp5omL5aCx5ZGKICVzIOeahOaEj+WklueLgOaFiyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCBkcnktcnVuIgorbXNnc3RyICLliqnmiYsgJXMg5LiN5pSv5o+0IGRyeS1ydW4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiCittc2dzdHIgIuWKqeaJiyAlcyDkuI3mlK/mj7QgLS1zaWduZWQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQ9aWYtYXNrZWQiCittc2dzdHIgIuWKqeaJiyAlcyDkuI3mlK/mj7QgLS1zaWduZWQ9aWYtYXNrZWQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMiCittc2dzdHIgIuWKqeaJiyAlcyDkuI3mlK/mj7QgLS1hdG9taWMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ3B1c2gtb3B0aW9uJyIKK21zZ3N0ciAi5Yqp5omLICVzIOS4jeaUr+aPtCAncHVzaC1vcHRpb24nIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTY1Cittc2dpZCAicmVtb3RlLWhlbHBlciBkb2Vzbid0IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiCittc2dzdHIgInJlbW90ZS1oZXBlciDkuI3mlK/mj7QgcHVzaO+8jOmcgOimgeW8leeUqOihqOmBlOW8jyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAnZm9yY2UnIgorbXNnc3RyICLliqnmiYsgJXMg5LiN5pSv5o+0ICdmb3JjZSciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDE3Cittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtZXhwb3J0IgorbXNnc3RyICLnhKHms5Xln7fooYwgZmFzdC1leHBvcnQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDIyCittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWV4cG9ydCIKK21zZ3N0ciAi5Z+36KGMIGZhc3QtZXhwb3J0IOaZgueZvOeUn+mMr+iqpCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHJlZnMgaW4gY29tbW9uIGFuZCBub25lIHNwZWNpZmllZDsgZG9pbmcgbm90aGluZy5cbiIKKyJQZXJoYXBzIHlvdSBzaG91bGQgc3BlY2lmeSBhIGJyYW5jaCBzdWNoIGFzICdtYXN0ZXInLlxuIgorbXNnc3RyICIiCisi5rKS5pyJ5YWx5ZCM55qE5byV55So5Lim5LiU5Lmf5rKS5pyJ5oyH5a6a77yM5LuA6bq85Lmf5LiN5pyD5YGa44CCXG4iCisi5Y+v6IO95oKo5oeJ6Kmy5oyH5a6a5LiA5YCL5YiG5pSv5aaCICdtYXN0ZXIn44CCXG4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCByZXNwb25zZSBpbiByZWYgbGlzdDogJXMiCittc2dzdHIgIuW8leeUqOWIl+ihqOS4reagvOW8j+mMr+iqpOeahOWbnuaHie+8miVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkKCVzKSBmYWlsZWQiCittc2dzdHIgIuiugOWPlu+8iCVz77yJ5aSx5pWXIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3cml0ZSglcykgZmFpbGVkIgorbXNnc3RyICLlr6vvvIglc++8ieWkseaVlyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGhyZWFkIGZhaWxlZCIKK21zZ3N0ciAiJXMg5Z+36KGM57eS5aSx5pWXIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM1MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIHRvIGpvaW46ICVzIgorbXNnc3RyICIlcyDln7fooYznt5LnrYnlvoXlpLHmlZfvvJolcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNzEgdHJhbnNwb3J0LWhlbHBlci5jOjEzNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGE6ICVzIgorbXNnc3RyICLkuI3og73llZ/li5Xln7fooYznt5LkvobopIfoo73os4fmlpnvvJolcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQgdG8gd2FpdCIKK21zZ3N0ciAiJXMg6YCy56iL562J5b6F5aSx5pWXIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAiJXMg6YCy56iL5aSx5pWXIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQzNCB0cmFuc3BvcnQtaGVscGVyLmM6MTQ0MworbXNnaWQgImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhIgorbXNnc3RyICLkuI3og73llZ/li5Xln7fooYznt5LkvobopIfoo73os4fmlpkiCisKKyM6IHRyZWUtd2Fsay5jOjMyCittc2dpZCAidG9vLXNob3J0IHRyZWUgb2JqZWN0IgorbXNnc3RyICLlpKrnn63nmoTmqLnni4Dnianku7YiCisKKyM6IHRyZWUtd2Fsay5jOjM4Cittc2dpZCAibWFsZm9ybWVkIG1vZGUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAi5qi554uA54mp5Lu25Lit55qE5qKd55uu5qih5byP6Yyv6KqkIgorCisjOiB0cmVlLXdhbGsuYzo0MgorbXNnaWQgImVtcHR5IGZpbGVuYW1lIGluIHRyZWUgZW50cnkiCittc2dzdHIgIuaoueeLgOeJqeS7tuaineebruS4reepuueahOaqlOahiOWQjSIKKworIzogdHJlZS13YWxrLmM6MTE3Cittc2dpZCAidG9vLXNob3J0IHRyZWUgZmlsZSIKK21zZ3N0ciAi5aSq55+t55qE5qi55qqU5qGIIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisi5oKo5bCN5LiL5YiX5qqU5qGI55qE5pys5qmf5L+u5pS55bCH6KKr57C95Ye65YuV5L2c6KaG6JOL77yaXG4iCisiJSVz6KuL5Zyo5YiH5o+b5YiG5pSv5YmN5o+Q5Lqk5oiW5YSy6JeP5oKo55qE5L+u5pS544CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuaCqOWwjeS4i+WIl+aqlOahiOeahOacrOapn+S/ruaUueWwh+iiq+ewveWHuuWLleS9nOimhuiTi++8mlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi5oKo5bCN5LiL5YiX5qqU5qGI55qE5pys5qmf5L+u5pS55bCH6KKr5ZCI5L215YuV5L2c6KaG6JOL77yaXG4iCisiJSVz6KuL5Zyo5ZCI5L215YmN5o+Q5Lqk5oiW5YSy6JeP5oKo55qE5L+u5pS544CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuaCqOWwjeS4i+WIl+aqlOahiOeahOacrOapn+S/ruaUueWwh+iiq+WQiOS9teWLleS9nOimhuiTi++8mlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisi5oKo5bCN5LiL5YiX5qqU5qGI55qE5pys5qmf5L+u5pS55bCH6KKrICVzIOimhuiTi++8mlxuIgorIiUlc+iri+WcqCAlcyDkuYvliY3mj5DkuqTmiJblhLLol4/mgqjnmoTkv67mlLnjgIIiCisKKyM6IHVucGFjay10cmVlcy5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisi5oKo5bCN5LiL5YiX5qqU5qGI55qE5pys5qmf5L+u5pS55bCH6KKrICVzIOimhuiTi++8mlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIHRoZW06XG4iCisiJXMiCittc2dzdHIgIiIKKyLmm7TmlrDlpoLkuIvnm67pjITlsIfmnIPpgbrlpLHlhbbkuK3mnKrov73ouaTnmoTmqpTmoYjvvJpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyLlt6XkvZzljYDkuK3kuIvliJfmnKrov73ouaTnmoTmqpTmoYjlsIfmnIPlm6DngrrnsL3lh7rli5XkvZzogIzooqvliKrpmaTvvJpcbiIKKyIlJXPoq4vlnKjliIfmj5vliIbmlK/kuYvliY3np7vli5XmiJbliKrpmaTjgIIiCisKKyM6IHVucGFjay10cmVlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisi5bel5L2c5Y2A5Lit5LiL5YiX5pyq6L+96Lmk55qE5qqU5qGI5bCH5pyD5Zug54K657C95Ye65YuV5L2c6ICM6KKr5Yiq6Zmk77yaXG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi5bel5L2c5Y2A5Lit5LiL5YiX5pyq6L+96Lmk55qE5qqU5qGI5bCH5pyD5Zug54K65ZCI5L215YuV5L2c6ICM6KKr5Yiq6Zmk77yaXG4iCisiJSVz6KuL5Zyo5ZCI5L215YmN56e75YuV5oiW5Yiq6Zmk44CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuW3peS9nOWNgOS4reS4i+WIl+acqui/vei5pOeahOaqlOahiOWwh+acg+WboOeCuuWQiOS9teWLleS9nOiAjOiiq+WIqumZpO+8mlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIuW3peS9nOWNgOS4reS4i+WIl+acqui/vei5pOeahOaqlOahiOWwh+acg+WboOeCuiAlcyDli5XkvZzogIzooqvliKrpmaTvvJpcbiIKKyIlJXPoq4vlnKggJXMg5YmN56e75YuV5oiW5Yiq6Zmk44CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuW3peS9nOWNgOS4reS4i+WIl+acqui/vei5pOeahOaqlOahiOWwh+acg+WboOeCuiAlcyDli5XkvZzogIzooqvliKrpmaTvvJpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyLlt6XkvZzljYDkuK3kuIvliJfmnKrov73ouaTnmoTmqpTmoYjlsIfmnIPlm6DngrrnsL3lh7rli5XkvZzogIzooqvopobok4vvvJpcbiIKKyIlJXPoq4vlnKjliIfmj5vliIbmlK/liY3np7vli5XmiJbliKrpmaTjgIIiCisKKyM6IHVucGFjay10cmVlcy5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLlt6XkvZzljYDkuK3kuIvliJfmnKrov73ouaTnmoTmqpTmoYjlsIfmnIPlm6DngrrnsL3lh7rli5XkvZzogIzooqvopobok4vvvJpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi5bel5L2c5Y2A5Lit5LiL5YiX5pyq6L+96Lmk55qE5qqU5qGI5bCH5pyD5Zug54K65ZCI5L215YuV5L2c6ICM6KKr6KaG6JOL77yaXG4iCisiJSVz6KuL5Zyo5ZCI5L215YmN56e75YuV5oiW5Yiq6Zmk44CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLlt6XkvZzljYDkuK3kuIvliJfmnKrov73ouaTnmoTmqpTmoYjlsIfmnIPlm6DngrrlkIjkvbXli5XkvZzogIzooqvopobok4vvvJpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisi5bel5L2c5Y2A5Lit5LiL5YiX5pyq6L+96Lmk55qE5qqU5qGI5bCH5pyD5Zug54K6ICVzIOWLleS9nOiAjOiiq+imhuiTi++8mlxuIgorIiUlc+iri+WcqCAlcyDliY3np7vli5XmiJbliKrpmaTjgIIiCisKKyM6IHVucGFjay10cmVlcy5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuW3peS9nOWNgOS4reS4i+WIl+acqui/vei5pOeahOaqlOahiOWwh+acg+WboOeCuiAlcyDli5XkvZzogIzooqvopobok4vvvJpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiIKK21zZ3N0ciAi5qKd55uuICclcycg5ZKMICclcycg6YeN55aK44CC54Sh5rOV5ZCI5L2144CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0OiB0aGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIG5vdCB1cCB0byBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisi54Sh5rOV5pu05paw56iA55aP57C95Ye677ya5aaC5LiL5qKd55uu5LiN5piv5pyA5paw77yaXG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgc3BhcnNlIGNoZWNrb3V0ICIKKyJ1cGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyLlt6XkvZzljYDkuK3kuIvliJfmqpTmoYjlsIfooqvnqIDnlo/nsL3lh7rmm7TmlrDmiYDopobok4vvvJpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisi5bel5L2c5Y2A5Lit5LiL5YiX5qqU5qGI5bCH6KKr56iA55aP57C95Ye65pu05paw5omA5Yiq6Zmk77yaXG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBzdWJtb2R1bGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyLnhKHms5Xmm7TmlrDlrZDmqKHntYTvvJpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nXG4iCittc2dzdHIgIuato+WcqOe1guatolxuIgorCisjOiB1bnBhY2stdHJlZXMuYzozMTcKK21zZ2lkICJVcGRhdGluZyBmaWxlcyIKK21zZ3N0ciAi5q2j5Zyo5pu05paw5qqU5qGIIgorCisjOiB1bnBhY2stdHJlZXMuYzozNDkKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBwYXRocyBoYXZlIGNvbGxpZGVkIChlLmcuIGNhc2Utc2Vuc2l0aXZlIHBhdGhzXG4iCisib24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pIGFuZCBvbmx5IG9uZSBmcm9tIHRoZSBzYW1lXG4iCisiY29sbGlkaW5nIGdyb3VwIGlzIGluIHRoZSB3b3JraW5nIHRyZWU6XG4iCittc2dzdHIgIiIKKyLku6XkuIvot6/lvpHnmbznlJ/norDmkp7vvIjlpoLvvJrlnKjkuI3ljYDliIblpKflsI/lr6vnmoTmqpTmoYjns7vntbHkuIrnmoTljYDliIblpKflsI/lr6vnmoTot6/lvpHvvInvvIxcbiIKKyLkuKbkuJTnorDmkp7ntYTkuK3lj6rmnInkuIDlgIvmqpTmoYjlrZjlnKjlt6XkvZzljYDkuK3vvJpcbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ0NQorbXNnaWQgIlVwZGF0aW5nIGluZGV4IGZsYWdzIgorbXNnc3RyICLmraPlnKjmm7TmlrDntKLlvJXml5fmqJkiCisKKyM6IHVybG1hdGNoLmM6MTYzCittc2dpZCAiaW52YWxpZCBVUkwgc2NoZW1lIG5hbWUgb3IgbWlzc2luZyAnOi8vJyBzdWZmaXgiCittc2dzdHIgIueEoeaViOeahCBVUkwg5pa55qGI5ZCN56ix5oiW6YG65aSxICc6Ly8nIOW+jOe2tCIKKworIzogdXJsbWF0Y2guYzoxODcgdXJsbWF0Y2guYzozNDYgdXJsbWF0Y2guYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlWFggZXNjYXBlIHNlcXVlbmNlIgorbXNnc3RyICLnhKHmlYjnmoQgJVhYIOi9iee+qeW6j+WIlyIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAi57y65bCR5Li75qmf5ZCN56ix5LiUIFVSTCDmlrnmoYjkuI3mmK8gJ2ZpbGU6JyIKKworIzogdXJsbWF0Y2guYzoyMzIKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICLkuIDlgIsgJ2ZpbGU6JyBVUkwg5LiN5oeJ6Kmy5YyF5ZCr5Z+g6JmfIgorCisjOiB1cmxtYXRjaC5jOjI0NworbXNnaWQgImludmFsaWQgY2hhcmFjdGVycyBpbiBob3N0IG5hbWUiCittc2dzdHIgIuS4u+apn+WQjeeoseS4reWMheWQq+eEoeaViOeahOWtl+WFgyIKKworIzogdXJsbWF0Y2guYzoyOTIgdXJsbWF0Y2guYzozMDMKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICLnhKHmlYjnmoTln6DomZ8iCisKKyM6IHVybG1hdGNoLmM6MzcxCittc2dpZCAiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIKK21zZ3N0ciAi54Sh5pWI55qEICcuLicg6Lev5b6R54mH5q61IgorCisjOiB3YWxrZXIuYzoxNzAKK21zZ2lkICJGZXRjaGluZyBvYmplY3RzIgorbXNnc3RyICLmraPlnKjmipPlj5bnianku7YiCisKKyM6IHdvcmt0cmVlLmM6MjU5IGJ1aWx0aW4vYW0uYzoyMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgIuiugOWPliAnJXMnIOWkseaVlyIKKworIzogd29ya3RyZWUuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhdCBtYWluIHdvcmtpbmcgdHJlZSBpcyBub3QgdGhlIHJlcG9zaXRvcnkgZGlyZWN0b3J5IgorbXNnc3RyICLlnKjkuLvlt6XkvZzljYDnmoQgJyVzJyDkuI3mmK/niYjmnKzluqvnm67pjIQiCisKKyM6IHdvcmt0cmVlLmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsZSBkb2VzIG5vdCBjb250YWluIGFic29sdXRlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZSBsb2NhdGlvbiIKK21zZ3N0ciAi5qqU5qGIICclcycg5LiN5YyF5ZCr5bel5L2c5Y2A55qE57WV5bCN6Lev5b6RIgorCisjOiB3b3JrdHJlZS5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICInJXMnIOS4jeWtmOWcqCIKKworIzogd29ya3RyZWUuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSAuZ2l0IGZpbGUsIGVycm9yIGNvZGUgJWQiCittc2dzdHIgIiclcycg5LiN5piv5LiA5YCLIC5naXQg5qqU5qGI77yM6Yyv6Kqk56K8ICVkIgorCisjOiB3b3JrdHJlZS5jOjM0MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IGJhY2sgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJyDmspLmnInmjIflm57liLAgJyVzJyIKKworIzogd3JhcHBlci5jOjE4NiB3cmFwcGVyLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgIueEoeazlemWi+WVnyAnJXMnIOmAsuihjOiugOWvqyIKKworIzogd3JhcHBlci5jOjM4NyB3cmFwcGVyLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJyIKK21zZ3N0ciAi5LiN6IO95a2Y5Y+WICclcyciCisKKyM6IHdyYXBwZXIuYzo1OTYKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIuS4jeiDveWPluW+l+ebruWJjeW3peS9nOebrumMhCIKKworIzogd3Qtc3RhdHVzLmM6MTU4Cittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICLmnKrlkIjkvbXnmoTot6/lvpHvvJoiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTg3IHd0LXN0YXR1cy5jOjIxOQorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDzmqpTmoYg+Li4uXCIg5Lul5Y+W5raI5pqr5a2Y77yJIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE5MCB3dC1zdGF0dXMuYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc3RvcmUgLS1zb3VyY2U9JXMgLS1zdGFnZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHJlc3RvcmUgLS1zb3VyY2U9JXMgLS1zdGFnZWQgPOaqlOahiD4uLi5cIiDku6Xlj5bmtojmmqvlrZjvvIkiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTkzIHd0LXN0YXR1cy5jOjIyNQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgcm0gLS1jYWNoZWQgPOaqlOahiD4uLi5cIiDku6Xlj5bmtojmmqvlrZjvvIkiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTk3Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBhZGQgPOaqlOahiD4uLi5cIiDmqJnoqJjop6PmsbrmlrnmoYjvvIkiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTk5IHd0LXN0YXR1cy5jOjIwMworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICDvvIjphYzmg4Xkvb/nlKggXCJnaXQgYWRkL3JtIDzmqpTmoYg+Li4uXCIg5qiZ6KiY6Kej5rG65pa55qGI77yJIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjIwMQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBybSA85qqU5qGIPi4uLlwiIOaomeiomOino+axuuaWueahiO+8iSIKKworIzogd3Qtc3RhdHVzLmM6MjExIHd0LXN0YXR1cy5jOjEwNzQKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIuimgeaPkOS6pOeahOiuiuabtO+8miIKKworIzogd3Qtc3RhdHVzLmM6MjM0IHd0LXN0YXR1cy5jOjEwODMKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIuWwmuacquaaq+WtmOS7peWCmeaPkOS6pOeahOiuiuabtO+8miIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoyMzgKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgYWRkIDzmqpTmoYg+Li4uXCIg5pu05paw6KaB5o+Q5Lqk55qE5YWn5a6577yJIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjI0MAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBhZGQvcm0gPOaqlOahiD4uLi5cIiDmm7TmlrDopoHmj5DkuqTnmoTlhaflrrnvvIkiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MjQxCittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZXN0b3JlIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHJlc3RvcmUgPOaqlOahiD4uLi5cIiDmjajmo4Tlt6XkvZzljYDnmoTmlLnli5XvvIkiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MjQzCittc2dpZCAiICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpIgorbXNnc3RyICIgIO+8iOaPkOS6pOaIluaNqOajhOWtkOaooee1hOS4reacqui/vei5pOaIluS/ruaUueeahOWFp+Wuue+8iSIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0ICVzIDzmqpTmoYg+Li4uXCIg5Lul5YyF5ZCr6KaB5o+Q5Lqk55qE5YWn5a6577yJIgorCisjOiB3dC1zdGF0dXMuYzoyNjgKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICLpm5nmlrnliKrpmaTvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI3MAorbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAi55Sx5oiR5YCR5paw5aKe77yaIgorCisjOiB3dC1zdGF0dXMuYzoyNzIKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICLnlLHku5blgJHliKrpmaTvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI3NAorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICLnlLHku5blgJHmlrDlop7vvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI3NgorbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICLnlLHmiJHlgJHliKrpmaTvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI3OAorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICLpm5nmlrnmlrDlop7vvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MAorbXNnaWQgImJvdGggbW9kaWZpZWQ6IgorbXNnc3RyICLpm5nmlrnkv67mlLnvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI5MAorbXNnaWQgIm5ldyBmaWxlOiIKK21zZ3N0ciAi5paw5qqU5qGI77yaIgorCisjOiB3dC1zdGF0dXMuYzoyOTIKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICLopIfoo73vvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI5NAorbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICLliKrpmaTvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI5NgorbXNnaWQgIm1vZGlmaWVkOiIKK21zZ3N0ciAi5L+u5pS577yaIgorCisjOiB3dC1zdGF0dXMuYzoyOTgKK21zZ2lkICJyZW5hbWVkOiIKK21zZ3N0ciAi6YeN5paw5ZG95ZCN77yaIgorCisjOiB3dC1zdGF0dXMuYzozMDAKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAi6aGe5Z6L6K6K5pu077yaIgorCisjOiB3dC1zdGF0dXMuYzozMDIKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAi5pyq55+l77yaIgorCisjOiB3dC1zdGF0dXMuYzozMDQKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgIuacquWQiOS9te+8miIKKworIyAg6K2v6ICF77ya5pyr5bC+5YWp5YCL5L2N5YWD57WE5Y+v6IO96KKr5Yiq5rib77yM5aaC5p6c57+76K2v54K65Lit5paH5qiZ6bue5pyD5Ye654++5Y2K5YCL5ryi5a2XCisjOiB3dC1zdGF0dXMuYzozODQKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICLmlrDmj5DkuqQsICIKKworIyAg6K2v6ICF77ya5pyr5bC+5YWp5YCL5L2N5YWD57WE5Y+v6IO96KKr5Yiq5rib77yM5aaC5p6c57+76K2v54K65Lit5paH5qiZ6bue5pyD5Ye654++5Y2K5YCL5ryi5a2XCisjOiB3dC1zdGF0dXMuYzozODYKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgIuS/ruaUueeahOWFp+WuuSwgIgorCisjICDora/ogIXvvJrmnKvlsL7lhanlgIvkvY3lhYPntYTlj6/og73ooqvliKrmuJvvvIzlpoLmnpznv7vora/ngrrkuK3mlofmqJnpu57mnIPlh7rnj77ljYrlgIvmvKLlrZcKKyM6IHd0LXN0YXR1cy5jOjM4OAorbXNnaWQgInVudHJhY2tlZCBjb250ZW50LCAiCittc2dzdHIgIuacqui/vei5pOeahOWFp+WuuSwgIgorCisjOiB3dC1zdGF0dXMuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJ5IgorbXNnaWRfcGx1cmFsICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cmllcyIKK21zZ3N0clswXSAi5oKo55qE5YSy6JeP5Y2A55uu5YmN5pyJICVkIOainee0gOmMhCIKKworIzogd3Qtc3RhdHVzLmM6OTM4Cittc2dpZCAiU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoiCittc2dzdHIgIuWtkOaooee1hOW3suS/ruaUueS9huWwmuacquabtOaWsO+8miIKKworIzogd3Qtc3RhdHVzLmM6OTQwCittc2dpZCAiU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAi6KaB5o+Q5Lqk55qE5a2Q5qih57WE6K6K5pu077yaIgorCisjOiB3dC1zdGF0dXMuYzoxMDIyCittc2dpZCAiIgorIkRvIG5vdCBtb2RpZnkgb3IgcmVtb3ZlIHRoZSBsaW5lIGFib3ZlLlxuIgorIkV2ZXJ5dGhpbmcgYmVsb3cgaXQgd2lsbCBiZSBpZ25vcmVkLiIKK21zZ3N0ciAiIgorIuS4jeimgeaUueWLleaIluWIqumZpOS4iumdoueahOS4gOihjOOAglxuIgorIuWFtuS4i+aJgOacieWFp+WuuemDveWwh+iiq+W/veeVpeOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTExNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gY29tcHV0ZSB0aGUgYnJhbmNoIGFoZWFkL2JlaGluZCB2YWx1ZXMuXG4iCisiWW91IGNhbiB1c2UgJy0tbm8tYWhlYWQtYmVoaW5kJyB0byBhdm9pZCB0aGlzLlxuIgorbXNnc3RyICIiCisiXG4iCisi6Iqx5LqGICUuMmYg56eS5omN6KiI566X5Ye65YiG5pSv55qE6aCY5YWIL+iQveW+jOevhOWcjeOAglxuIgorIueCuumBv+WFje+8jOaCqOWPr+S7peS9v+eUqCAnLS1uby1haGVhZC1iZWhpbmQn44CCXG4iCisKKyM6IHd0LXN0YXR1cy5jOjExNDQKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgIuaCqOacieWwmuacquWQiOS9teeahOi3r+W+keOAgiIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxMTQ3Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNvbW1pdFwiKSIKK21zZ3N0ciAiICDvvIjop6PmsbrooZ3nqoHkuKbln7fooYwgXCJnaXQgY29tbWl0XCLvvIkiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTE0OQorbXNnaWQgIiAgKHVzZSBcImdpdCBtZXJnZSAtLWFib3J0XCIgdG8gYWJvcnQgdGhlIG1lcmdlKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgbWVyZ2UgLS1hYm9ydFwiIOe1guatouWQiOS9te+8iSIKKworIzogd3Qtc3RhdHVzLmM6MTE1MworbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgIuaJgOacieihneeqgeW3suino+axuuS9huaCqOS7jeiZleaWvOWQiOS9teS4reOAgiIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxMTU2Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdFwiIHRvIGNvbmNsdWRlIG1lcmdlKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgY29tbWl0XCIg57WQ5p2f5ZCI5L2177yJIgorCisjOiB3dC1zdGF0dXMuYzoxMTY1Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uIgorbXNnc3RyICLmgqjmraPomZXmlrwgYW0g5YuV5L2c6YGO56iL5Lit44CCIgorCisjOiB3dC1zdGF0dXMuYzoxMTY4Cittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICLnm67liY3nmoTkv67oo5zmqpTngrrnqbrjgIIiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTE3MgorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tY29udGludWVcIikiCittc2dzdHIgIiAg77yI6Kej5rG66KGd56qB77yM54S25b6M5Z+36KGMIFwiZ2l0IGFtIC0tY29udGludWVcIu+8iSIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxMTc0Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGFtIC0tc2tpcFwiIOi3s+mBjuatpOS/ruijnOaqlO+8iSIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxMTc2Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBhbSAtLWFib3J0XCIg5b6p5Y6f5Y6f5pyJ5YiG5pSv77yJIgorCisjOiB3dC1zdGF0dXMuYzoxMzA5Cittc2dpZCAiZ2l0LXJlYmFzZS10b2RvIGlzIG1pc3NpbmcuIgorbXNnc3RyICJnaXQtcmViYXNlLXRvZG8g6YG65aSx44CCIgorCisjOiB3dC1zdGF0dXMuYzoxMzExCittc2dpZCAiTm8gY29tbWFuZHMgZG9uZS4iCittc2dzdHIgIuaykuacieaMh+S7pOiiq+Wft+ihjOOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXN0IGNvbW1hbmQgZG9uZSAoJWQgY29tbWFuZCBkb25lKToiCittc2dpZF9wbHVyYWwgIkxhc3QgY29tbWFuZHMgZG9uZSAoJWQgY29tbWFuZHMgZG9uZSk6IgorbXNnc3RyWzBdICLmnIDlvozkuIDmop3mjIfku6Tlt7LlrozmiJDvvIglZCDmop3mjIfku6Tooqvln7fooYzvvInvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAoc2VlIG1vcmUgaW4gZmlsZSAlcykiCittc2dzdHIgIiAg77yI5pu05aSa5Y+D6KaL5qqU5qGIICVz77yJIgorCisjOiB3dC1zdGF0dXMuYzoxMzMwCittc2dpZCAiTm8gY29tbWFuZHMgcmVtYWluaW5nLiIKK21zZ3N0ciAi5pyq5Ymp5LiL5Lu75L2V5oyH5Luk44CCIgorCisjOiB3dC1zdGF0dXMuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5leHQgY29tbWFuZCB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmQpOiIKK21zZ2lkX3BsdXJhbCAiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiCittc2dzdHJbMF0gIuaOpeS4i+S+huimgeWft+ihjOeahOaMh+S7pO+8iOWJqemkmCAlZCDmop3mjIfku6TvvInvvJoiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTM0MQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiB0byB2aWV3IGFuZCBlZGl0KSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIg5L6G5qqi6KaW5ZKM57eo6Lyv77yJIgorCisjOiB3dC1zdGF0dXMuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICLmgqjlnKjln7fooYzlsIfliIbmlK8gJyVzJyDph43lrprln7rlupXliLAgJyVzJyDnmoTli5XkvZzjgIIiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgIuaCqOWcqOWft+ihjOmHjeWumuWfuuW6leWLleS9nOOAgiIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxMzcxCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAg77yI6Kej5rG66KGd56qB77yM54S25b6M5Z+36KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLvvIkiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTM3MworbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgcmViYXNlIC0tc2tpcFwiIOi3s+mBjuatpOS/ruijnOaqlO+8iSIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxMzc1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCByZWJhc2UgLS1hYm9ydFwiIOS7peewveWHuuWOn+acieWIhuaUr++8iSIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxMzgyCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIO+8iOaJgOacieihneeqgeW3suino+axuu+8muWft+ihjCBcImdpdCByZWJhc2UgLS1jb250aW51ZVwi77yJIgorCisjOiB3dC1zdGF0dXMuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIuaCqOWcqOWft+ihjOWwh+WIhuaUryAnJXMnIOmHjeWumuWfuuW6leWIsCAnJXMnIOeahOWLleS9nOaZguWIhuWJsuaPkOS6pOOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTM5MQorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICLmgqjlnKjln7fooYzph43lrprln7rlupXli5XkvZzmmYLliIblibLmj5DkuqTjgIIiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTM5NAorbXNnaWQgIiAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIO+8iOS4gOaXpuaCqOW3peS9nOebrumMhOaPkOS6pOS5vua3qOW+jO+8jOWft+ihjCBcImdpdCByZWJhc2UgLS1jb250aW51ZVwi77yJIgorCisjOiB3dC1zdGF0dXMuYzoxMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIuaCqOWcqOWft+ihjOWwh+WIhuaUryAnJXMnIOmHjeWumuWfuuW6leWIsCAnJXMnIOeahOWLleS9nOaZgue3qOi8r+aPkOS6pOOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTQwMworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAi5oKo5Zyo5Z+36KGM6YeN5a6a5Z+65bqV5YuV5L2c5pmC57eo6Lyv5o+Q5Lqk44CCIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0MDYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBjb21taXQgLS1hbWVuZFwiIOS/ruijnOebruWJjeaPkOS6pO+8iSIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxNDA4Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIgIO+8iOeVtuaCqOWwjeaCqOeahOS/ruaUuea7v+aEj+W+jOWft+ihjCBcImdpdCByZWJhc2UgLS1jb250aW51ZVwi77yJIgorCisjOiB3dC1zdGF0dXMuYzoxNDE5Cittc2dpZCAiQ2hlcnJ5LXBpY2sgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAi5o+A6YG45YuV5L2c5q2j5Zyo6YCy6KGM5Lit44CCIgorCisjOiB3dC1zdGF0dXMuYzoxNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIuaCqOWcqOWft+ihjOaPgOmBuOaPkOS6pCAlcyDnmoTli5XkvZzjgIIiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTQyOQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIO+8iOino+axuuihneeqgeS4puWft+ihjCBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCLvvIkiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTQzMgorbXNnaWQgIiAgKHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIO+8iOWft+ihjCBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIg5Lul57m857qM77yJIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0MzUKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICDvvIjmiYDmnInooZ3nqoHlt7Lop6PmsbrvvJrln7fooYwgXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwi77yJIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0MzcKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCIg6Lez6YGO5q2k5L+u6KOc5qqU77yJIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0MzkKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIOS7peWPlua2iOaPgOmBuOWLleS9nO+8iSIKKworIzogd3Qtc3RhdHVzLmM6MTQ0OQorbXNnaWQgIlJldmVydCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICLpgoTljp/li5XkvZzmraPlnKjooYzkuK3jgIIiCisKKyM6IHd0LXN0YXR1cy5jOjE0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIuaCqOWcqOWft+ihjOWPjei9ieaPkOS6pCAlcyDnmoTli5XkvZzjgIIiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTQ1OAorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICDvvIjop6PmsbrooZ3nqoHkuKbln7fooYwgXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIu+8iSIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxNDYxCittc2dpZCAiICAocnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIO+8iOWft+ihjCBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIOS7pee5vOe6jO+8iSIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxNDY0Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIO+8iOaJgOacieihneeqgeW3suino+axuu+8muWft+ihjCBcImdpdCByZXZlcnQgLS1jb250aW51ZVwi77yJIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0NjYKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHJldmVydCAtLXNraXBcIiDot7PpgY7mraTkv67oo5zmqpTvvIkiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTQ2OAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHJldmVydCAtLWFib3J0XCIg5Lul5Y+W5raI5Y+N6L2J5o+Q5Lqk5YuV5L2c77yJIgorCisjOiB3dC1zdGF0dXMuYzoxNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAi5oKo5Zyo5Z+36KGM5b6e5YiG5pSvICclcycg6ZaL5aeL55qE5LqM5YiG5bCL5om+5YuV5L2c44CCIgorCisjOiB3dC1zdGF0dXMuYzoxNDgyCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLiIKK21zZ3N0ciAi5oKo5Zyo5Z+36KGM5LqM5YiG5bCL5om+5YuV5L2c44CCIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0ODUKK21zZ2lkICIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGJpc2VjdCByZXNldFwiIOewveWHuuWOn+acieWIhuaUr++8iSIKKworIzogd3Qtc3RhdHVzLmM6MTY5NAorbXNnaWQgIk9uIGJyYW5jaCAiCittc2dzdHIgIuS9jeaWvOWIhuaUryAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDEKK21zZ2lkICJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICLkupLli5XlvI/ph43lrprln7rlupXli5XkvZzmraPlnKjpgLLooYzkuK3vvJvoh7MgIgorCisjOiB3dC1zdGF0dXMuYzoxNzAzCittc2dpZCAicmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAi6YeN5a6a5Z+65bqV5YuV5L2c5q2j5Zyo6YCy6KGM5Lit77yb6IezICIKKworIzogd3Qtc3RhdHVzLmM6MTcxMworbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIuebruWJjeS4jeWcqOS7u+S9leWIhuaUr+S4iuOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTczMAorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICLliJ3lp4vmj5DkuqQiCisKKyM6IHd0LXN0YXR1cy5jOjE3MzEKK21zZ2lkICJObyBjb21taXRzIHlldCIKK21zZ3N0ciAi5bCa54Sh5o+Q5LqkIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ1Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLmnKrov73ouaTnmoTmqpTmoYgiCisKKyM6IHd0LXN0YXR1cy5jOjE3NDcKK21zZ2lkICJJZ25vcmVkIGZpbGVzIgorbXNnc3RyICLlv73nlaXnmoTmqpTmoYgiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICdzdGF0dXMgLXVubydcbiIKKyJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkXG4iCisibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKK21zZ3N0ciAiIgorIuiAl+iyu+S6hiAlLjJmIOenkuS7peaemuiIieacqui/vei5pOeahOaqlOahiOOAgidzdGF0dXMgLXVubycg5Lmf6Kix6IO95o+Q6auY6YCf5bqm77yMXG4iCisi5L2G5oKo6ZyA6KaB5bCP5b+D5LiN6KaB5b+Y5LqG5paw5aKe5paw5qqU5qGI77yI5Y+D6KaLICdnaXQgaGVscCBzdGF0dXMn77yJ44CCIgorCisjOiB3dC1zdGF0dXMuYzoxNzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIuacqui/vei5pOeahOaqlOahiOaykuacieWIl+WHuiVzIgorCisjICDora/ogIXvvJrkuK3mloflrZfkuLLmi7zmjqXvvIzlj6/liKrpmaTliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE3NTkKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICLvvIjkvb/nlKggLXUg5Y+D5pW46aGv56S65pyq6L+96Lmk55qE5qqU5qGI77yJIgorCisjOiB3dC1zdGF0dXMuYzoxNzY1Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAi5rKS5pyJ5L+u5pS5IgorCisjOiB3dC1zdGF0dXMuYzoxNzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICLkv67mlLnlsJrmnKrliqDlhaXmj5DkuqTvvIjkvb/nlKggXCJnaXQgYWRkXCIg5ZKML+aIliBcImdpdCBjb21taXQgLWFcIu+8iVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgIuS/ruaUueWwmuacquWKoOWFpeaPkOS6pFxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIuaPkOS6pOeCuuepuu+8jOS9huaYr+WtmOWcqOWwmuacqui/vei5pOeahOaqlOahiO+8iOS9v+eUqCBcImdpdCBhZGRcIiDlu7rnq4vov73ouaTvvIlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAi5o+Q5Lqk54K656m677yM5L2G5piv5a2Y5Zyo5bCa5pyq6L+96Lmk55qE5qqU5qGIXG4iCisKKyMgIOitr+iAhe+8muS4reaWh+Wtl+S4suaLvOaOpe+8jOWPr+WIqumZpOWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAi54Sh5qqU5qGI6KaB5o+Q5Lqk77yI5bu656uLL+ikh+ijveaqlOahiOS4puS9v+eUqCBcImdpdCBhZGRcIiDlu7rnq4vov73ouaTvvIlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc4NSB3dC1zdGF0dXMuYzoxNzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0XG4iCittc2dzdHIgIueEoeaqlOahiOimgeaPkOS6pFxuIgorCisjICDora/ogIXvvJrkuK3mloflrZfkuLLmi7zmjqXvvIzlj6/liKrpmaTliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAi54Sh5qqU5qGI6KaB5o+Q5Lqk77yI5L2/55SoIC11IOmhr+ekuuacqui/vei5pOeahOaqlOahiO+8iVxuIgorCisjICDora/ogIXvvJrkuK3mloflrZfkuLLmi7zmjqXvvIzlj6/liKrpmaTliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhblxuIgorbXNnc3RyICLmspLmnInopoHmj5DkuqTnmoTmqpTmoYjvvIzlt6XkvZzljYDngrrkub7mt6jni4DmhYtcbiIKKworIzogd3Qtc3RhdHVzLmM6MTkwNQorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IG9uICIKK21zZ3N0ciAi5bCa54Sh5o+Q5Lqk5ZyoICIKKworIzogd3Qtc3RhdHVzLmM6MTkwOQorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUTvvIjpnZ7liIbmlK/vvIkiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDAKK21zZ2lkICJkaWZmZXJlbnQiCittc2dzdHIgIuS4jeWQjCIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5Y+l5bC+56m65qC8CisjOiB3dC1zdGF0dXMuYzoxOTQyIHd0LXN0YXR1cy5jOjE5NTAKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICLokL3lvowgIgorCisjOiB3dC1zdGF0dXMuYzoxOTQ1IHd0LXN0YXR1cy5jOjE5NDgKK21zZ2lkICJhaGVhZCAiCittc2dzdHIgIumgmOWFiCAiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgYWN0aW9uIGlzIGUuZy4gInB1bGwgd2l0aCByZWJhc2UiCisjOiB3dC1zdGF0dXMuYzoyNDcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIuS4jeiDvSVz77ya5oKo5pyJ5pyq5pqr5a2Y55qE6K6K5pu044CCIgorCisjOiB3dC1zdGF0dXMuYzoyNDc2Cittc2dpZCAiYWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLlj6blpJbvvIzmgqjnmoTntKLlvJXkuK3ljIXlkKvmnKrmj5DkuqTnmoTorormm7TjgIIiCisKKyM6IHd0LXN0YXR1cy5jOjI0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLkuI3og70lc++8muaCqOeahOe0ouW8leS4reWMheWQq+acquaPkOS6pOeahOiuiuabtOOAgiIKKworIzogY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jOjU4IGJ1aWx0aW4vY2xvbmUuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICLliKrpmaQgJyVzJyDlpLHmlZciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbPOmBuOmghT5dIFstLV0gPOi3r+W+keimj+agvD4uLi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAi5oSP5aSW55qE5beu55Ww54uA5oWLICVjIgorCisjOiBidWlsdGluL2FkZC5jOjkzIGJ1aWx0aW4vY29tbWl0LmM6Mjg4Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLmm7TmlrDmqpTmoYjlpLHmlZciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgIuWIqumZpCAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc4Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIumHjeaWsOaVtOeQhue0ouW8leS5i+W+jOWwmuacquiiq+aaq+WtmOeahOiuiuabtO+8miIKKworIzogYnVpbHRpbi9hZGQuYzoyNjYgYnVpbHRpbi9yZXYtcGFyc2UuYzo4OTkKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIuS4jeiDveiugOWPlue0ouW8lSIKKworIzogYnVpbHRpbi9hZGQuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIueEoeazleeCuuWvq+WFpemWi+WVnyAnJXMn44CCIgorCisjOiBidWlsdGluL2FkZC5jOjI4MQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAi5LiN6IO955Sf5oiQ5L+u6KOc5qqUIgorCisjOiBidWlsdGluL2FkZC5jOjI4NAorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICLnt6jovK/kv67oo5zmqpTlpLHmlZciCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIuS4jeiDveWwjSAnJXMnIOWRvOWPqyBzdGF0IgorCisjOiBidWlsdGluL2FkZC5jOjI4OQorbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAi56m65L+u6KOc5qqU44CC55Ww5bi457WC5q2i44CCIgorCisjOiBidWlsdGluL2FkZC5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAi5LiN6IO95oeJ55SoICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzAyCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICLkuIvliJfot6/lvpHmoLnmk5rmgqjnmoTkuIDlgIsgLmdpdGlnbm9yZSDmqpTmoYjogIzooqvlv73nlaXvvJpcbiIKKworIzogYnVpbHRpbi9hZGQuYzozMjIgYnVpbHRpbi9jbGVhbi5jOjkxMCBidWlsdGluL2ZldGNoLmM6MTYzIGJ1aWx0aW4vbXYuYzoxMjQKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTYgYnVpbHRpbi9wdWxsLmM6MjAzIGJ1aWx0aW4vcHVzaC5jOjU0OAorIzogYnVpbHRpbi9yZW1vdGUuYzoxNDIxIGJ1aWx0aW4vcm0uYzoyNDIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjUKK21zZ2lkICJkcnkgcnVuIgorbXNnc3RyICLmuKzoqabln7fooYwiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI1Cittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAi5LqS5YuV5byP5o+A6YG4IgorCisjOiBidWlsdGluL2FkZC5jOjMyNiBidWlsdGluL2NoZWNrb3V0LmM6MTUxMSBidWlsdGluL3Jlc2V0LmM6MzA3Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgIuS6kuWLleW8j+aMkemBuOizh+aWmeWNgOWhiiIKKworIzogYnVpbHRpbi9hZGQuYzozMjcKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgIue3qOi8r+ebruWJjeW3rueVsOS4puaHieeUqCIKKworIzogYnVpbHRpbi9hZGQuYzozMjgKK21zZ2lkICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiCittc2dzdHIgIuWFgeioseaWsOWinuW/veeVpeeahOaqlOahiCIKKworIzogYnVpbHRpbi9hZGQuYzozMjkKK21zZ2lkICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi5pu05paw5bey6L+96Lmk55qE5qqU5qGIIgorCisjOiBidWlsdGluL2FkZC5jOjMzMAorbXNnaWQgInJlbm9ybWFsaXplIEVPTCBvZiB0cmFja2VkIGZpbGVzIChpbXBsaWVzIC11KSIKK21zZ3N0ciAi5bCN5bey6L+96Lmk5qqU5qGI77yI6Zqx5ZCrIC1177yJ6YeN5paw5q245LiA5o+b6KGM56ym6JmfIgorCisjOiBidWlsdGluL2FkZC5jOjMzMQorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAi5Y+q6KiY6YyE77yM6Kmy6Lev5b6R56iN5b6M5YaN5paw5aKeIgorCisjOiBidWlsdGluL2FkZC5jOjMzMgorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi5paw5aKe5omA5pyJ5pS56K6K55qE5bey6L+96Lmk5qqU5qGI5ZKM5pyq6L+96Lmk5qqU5qGIIgorCisjOiBidWlsdGluL2FkZC5jOjMzNQorbXNnaWQgImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIgorbXNnc3RyICLlv73nlaXlt6XkvZzljYDkuK3np7vpmaTnmoTot6/lvpHvvIjlkowgLS1uby1hbGwg55u45ZCM77yJIgorCisjOiBidWlsdGluL2FkZC5jOjMzNworbXNnaWQgImRvbid0IGFkZCwgb25seSByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAi5LiN5paw5aKe77yM5Y+q6YeN5paw5pW055CG57Si5byVIgorCisjOiBidWlsdGluL2FkZC5jOjMzOAorbXNnaWQgImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiCittc2dzdHIgIui3s+mBjuWboOeZvOeUn+mMr+iqpOS4jeiDveaWsOWinueahOaqlOahiCIKKworIzogYnVpbHRpbi9hZGQuYzozMzkKK21zZ2lkICJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iCittc2dzdHIgIuaqouafpeWcqOa4rOippuWft+ihjOaooeW8j+S4i+aqlOahiO+8iOWNs+S9v+S4jeWtmOWcqO+8ieaYr+WQpuiiq+W/veeVpSIKKworIzogYnVpbHRpbi9hZGQuYzozNDEgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA0Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgIuimhuiTi+WIl+ihqOijoeaqlOahiOeahOWPr+Wft+ihjOS9jSIKKworIzogYnVpbHRpbi9hZGQuYzozNDMKK21zZ2lkICJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiCittc2dzdHIgIuW7uueri+S4gOWAi+W1jOWFpeW8j+eJiOacrOW6q+aZgue1puS6iOitpuWRiiIKKworIzogYnVpbHRpbi9hZGQuYzozNDUKK21zZ2lkICJiYWNrZW5kIGZvciBgZ2l0IHN0YXNoIC1wYCIKK21zZ3N0ciAiYGdpdCBzdGFzaCAtcGAg55qE5b6M56uvIgorCisjOiBidWlsdGluL2FkZC5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91J3ZlIGFkZGVkIGFub3RoZXIgZ2l0IHJlcG9zaXRvcnkgaW5zaWRlIHlvdXIgY3VycmVudCByZXBvc2l0b3J5LlxuIgorIkNsb25lcyBvZiB0aGUgb3V0ZXIgcmVwb3NpdG9yeSB3aWxsIG5vdCBjb250YWluIHRoZSBjb250ZW50cyBvZlxuIgorInRoZSBlbWJlZGRlZCByZXBvc2l0b3J5IGFuZCB3aWxsIG5vdCBrbm93IGhvdyB0byBvYnRhaW4gaXQuXG4iCisiSWYgeW91IG1lYW50IHRvIGFkZCBhIHN1Ym1vZHVsZSwgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyJJZiB5b3UgYWRkZWQgdGhpcyBwYXRoIGJ5IG1pc3Rha2UsIHlvdSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhlXG4iCisiaW5kZXggd2l0aDpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIlNlZSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIuaCqOWcqOebruWJjeeJiOacrOW6q+S4reaWsOWinuS6huWPpuWkluS4gOWAiyBHaXQg54mI5pys5bqr44CC6KSH6KO95aSW5bGk55qE54mI5pys5bqr5bCH5LiN5YyF5ZCr5bWM5YWl54mI5pys5bqrIgorIueahOWFp+Wuue+8jOS4puS4lOS4jeefpemBk+ipsuWmguS9leWPluW+l+Wug+OAglxuIgorIuWmguaenOaCqOimgeaWsOWinuS4gOWAi+WtkOaooee1hO+8jOS9v+eUqO+8mlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyLlpoLmnpzmgqjkuI3lsI/lv4PmlrDlop7kuobpgJnlgIvot6/lvpHvvIzlj6/ku6XnlKjkuIvpnaLnmoTmjIfku6TlsIflhbblvp7ntKLlvJXkuK3liKrpmaTvvJpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIuWPg+imiyBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIOWPluW+l+abtOWkmuioiuaBr+OAgiIKKworIzogYnVpbHRpbi9hZGQuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5nIGVtYmVkZGVkIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAi5q2j5Zyo5paw5aKe5bWM5YWl5byPIGdpdCDniYjmnKzluqvvvJolcyIKKworIzogYnVpbHRpbi9hZGQuYzo0MTAKK21zZ2lkICIiCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKKyJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkSWdub3JlZEZpbGUgZmFsc2VcIiIKK21zZ3N0ciAiIgorIuWmguaenOaCqOecn+eahOaDs+WKoOWFpe+8jOiri+S9v+eUqCAtZuOAglxuIgorIuWmguimgemXnOmWieatpOioiuaBr++8jOiri+Wft+ihjFxuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkSWdub3JlZEZpbGUgZmFsc2VcIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MTkKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLmlrDlop7mqpTmoYjlpLHmlZciCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ3IGJ1aWx0aW4vY29tbWl0LmM6MzQ4Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSDoiIcgLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIOS4jeebuOWuuSIKKworIzogYnVpbHRpbi9hZGQuYzo0NjQKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWVkaXQiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIOiIhyAtLWVkaXQg5LiN55u45a65IgorCisjOiBidWlsdGluL2FkZC5jOjQ3NgorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICItQSDlkowgLXUg6YG46aCF5LqS5palIgorCisjOiBidWlsdGluL2FkZC5jOjQ3OQorbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIumBuOmghSAtLWlnbm9yZS1taXNzaW5nIOWPquiDveWSjCAtLWRyeS1ydW4g5ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL2FkZC5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICItLWNobW9kIHBhcmFtICclcycgbXVzdCBiZSBlaXRoZXIgLXggb3IgK3giCittc2dzdHIgIuWPg+aVuCAtLWNobW9kIOWPluWAvCAnJXMnIOW/hemgiOaYryAteCDmiJYgK3giCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTAxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjc1IGJ1aWx0aW4vY29tbWl0LmM6MzU0CisjOiBidWlsdGluL3Jlc2V0LmM6MzI3IGJ1aWx0aW4vcm0uYzoyNzIgYnVpbHRpbi9zdGFzaC5jOjE1MDkKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIOiIhyA86Lev5b6R6KaP5qC8PiDlj4PmlbjkuI3nm7jlrrkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NTA4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjg3IGJ1aWx0aW4vY29tbWl0LmM6MzYwCisjOiBidWlsdGluL3Jlc2V0LmM6MzMzIGJ1aWx0aW4vcm0uYzoyNzggYnVpbHRpbi9zdGFzaC5jOjE1MTUKK21zZ2lkICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorbXNnc3RyICItLXBhdGhzcGVjLWZpbGUtbnVsIOmcgOimgSAtLXBhdGhzcGVjLWZyb20tZmlsZSIKKworIzogYnVpbHRpbi9hZGQuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuXG4iCittc2dzdHIgIuaykuacieaMh+WumuaqlOahiO+8jOS5n+aykuacieaqlOahiOiiq+aWsOWinuOAglxuIgorCisjOiBidWlsdGluL2FkZC5jOjUxNAorbXNnaWQgIiIKKyJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKKyJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkRW1wdHlQYXRoc3BlYyBmYWxzZVwiIgorbXNnc3RyICIiCisi5Y+v6IO95L2g6KaB5YGa55qE5pivICdnaXQgYWRkIC4n77yfXG4iCisi5aaC6KaB6Zec6ZaJ5q2k6KiK5oGv77yM6KuL5Z+36KGMXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5hZGRFbXB0eVBhdGhzcGVjIGZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vYW0uYzozNTIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5L2c6ICF6IWz5pysIgorCisjOiBidWlsdGluL2FtLmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgIiclcycg6KKrIGFwcGx5cGF0Y2gtbXNnIOaOm+mJpOWIqumZpCIKKworIzogYnVpbHRpbi9hbS5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIumdnuazleeahOi8uOWFpeihjO+8miclcyfjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIuW+niAnJXMnIOikh+ijveiou+ino+WIsCAnJXMnIOaZguWkseaVlyIKKworIzogYnVpbHRpbi9hbS5jOjU0MgorbXNnaWQgImZzZWVrIGZhaWxlZCIKK21zZ3N0ciAiZnNlZWsg5aSx5pWXIgorCisjOiBidWlsdGluL2FtLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXRjaCAnJXMnIgorbXNnc3RyICLnhKHms5Xop6PmnpDkv67oo5zmqpQgJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjc5NQorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICLkuIDmrKHlj6rog73mnInkuIDlgIsgU3RHSVQg5L+u6KOc5qqU5L2H5YiX6KKr5oeJ55SoIgorCisjOiBidWlsdGluL2FtLmM6ODQzCittc2dpZCAiaW52YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIueEoeaViOeahOaZgumWk+aIsyIKKworIzogYnVpbHRpbi9hbS5jOjg0OCBidWlsdGluL2FtLmM6ODYwCittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgIueEoeaViOeahOaXpeacn+ihjCIKKworIzogYnVpbHRpbi9hbS5jOjg1NQorbXNnaWQgImludmFsaWQgdGltZXpvbmUgb2Zmc2V0IgorbXNnc3RyICLnhKHmlYjnmoTmmYLljYDkvY3np7vlgLwiCisKKyM6IGJ1aWx0aW4vYW0uYzo5NDgKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgIuS/ruijnOaqlOagvOW8j+WBtea4rOWkseaVl+OAgiIKKworIzogYnVpbHRpbi9hbS5jOjk1MyBidWlsdGluL2Nsb25lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIuW7uueri+ebrumMhCAnJXMnIOWkseaVlyIKKworIzogYnVpbHRpbi9hbS5jOjk1OAorbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAi5YiG5Ymy5L+u6KOc5qqU5aSx5pWX44CCIgorCisjOiBidWlsdGluL2FtLmM6MTA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJXMgLS1jb250aW51ZVwiLiIKK21zZ3N0ciAi55W25oKo6Kej5rG66YCZ5LiA5ZWP6aGM77yM5Z+36KGMIFwiJXMgLS1jb250aW51ZVwi44CCIgorCisjOiBidWlsdGluL2FtLmM6MTA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJXMgLS1za2lwXCIgaW5zdGVhZC4iCittc2dzdHIgIuWmguaenOaCqOaDs+imgei3s+mBjumAmeS4gOS/ruijnOaqlO+8jOWJh+Wft+ihjCBcIiVzIC0tc2tpcFwi44CCIgorCisjOiBidWlsdGluL2FtLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iCittc2dzdHIgIuiLpeimgeW+qeWOn+iHs+WOn+Wni+WIhuaUr+S4puWBnOatouS/ruijnOaqlOWLleS9nO+8jOWft+ihjCBcIiVzIC0tYWJvcnRcIuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjExNzQKK21zZ2lkICJQYXRjaCBzZW50IHdpdGggZm9ybWF0PWZsb3dlZDsgc3BhY2UgYXQgdGhlIGVuZCBvZiBsaW5lcyBtaWdodCBiZSBsb3N0LiIKK21zZ3N0ciAi5L+u6KOc5qqU5L2/55SoIGZvcm1hdD1mbG93ZWQg5qC85byP5YKz6YCB77yM6KGM5bC+55qE56m65qC85Y+v6IO95pyD6YG65aSx44CCIgorCisjOiBidWlsdGluL2FtLmM6MTIwMgorbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAi5L+u6KOc5qqU54K656m644CCIgorCisjOiBidWlsdGluL2FtLmM6MTI2NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGF1dGhvciBsaW5lIGluIGNvbW1pdCAlcyIKK21zZ3N0ciAi5Zyo5o+Q5LqkICVzIOS4ree8uuWwkeS9nOiAheihjCIKKworIzogYnVpbHRpbi9hbS5jOjEyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlLipzIgorbXNnc3RyICLnhKHmlYjnmoTouqvku73mqJnoqJjvvJolLipzIgorCisjOiBidWlsdGluL2FtLmM6MTQ4OQorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIueJiOacrOW6q+e8uuS5j+W/heimgeeahOizh+aWmeeJqeS7tuS7pemAsuihjOS4ieaWueWQiOS9teOAgiIKKworIzogYnVpbHRpbi9hbS5jOjE0OTEKK21zZ2lkICJVc2luZyBpbmRleCBpbmZvIHRvIHJlY29uc3RydWN0IGEgYmFzZSB0cmVlLi4uIgorbXNnc3RyICLkvb/nlKjntKLlvJXkvobph43lu7rkuIDlgIvvvIjkuInmlrnlkIjkvbXnmoTvvInln7rnpI7nm67pjITmqLkuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTEwCittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorIuaCqOaYr+WQpuabvuaJi+WLlee3qOi8r+mBjuaCqOeahOS/ruijnOaqlO+8n1xuIgorIueEoeazleWll+eUqOS/ruijnOaqlOWIsOe0ouW8leS4reeahOizh+aWmeeJqeS7tuS4iuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjE1MTYKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIuWbnuiQveWIsOWfuuekjueJiOacrOS4iuaJk+S/ruijnOaqlOWPiumAsuihjOS4ieaWueWQiOS9tS4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE1NDIKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICLnhKHms5XlkIjkvbXorormm7TjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTc0Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAi5q2j5aWX55So5Yiw5LiA5YCL56m65q235Y+y5LiKIgorCisjOiBidWlsdGluL2FtLmM6MTYyMSBidWlsdGluL2FtLmM6MTYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIueEoeazlee5vOe6jO+8miVzIOS4jeWtmOWcqOOAgiIKKworIzogYnVpbHRpbi9hbS5jOjE2NDMKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgIuaPkOS6pOWFp+WuueeCuu+8miIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5Y+l5bC+56m65qC8CisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2FtLmM6MTY1MworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorbXNnc3RyICLlpZfnlKjvvJ/mmK9beV0v5ZCmW25dL+e3qOi8r1tlXS/mqqLoppbkv67oo5zmqpRbdl0v5oeJ55So5omA5pyJW2Fd77yaIgorCisjOiBidWlsdGluL2FtLmM6MTcwMCBidWlsdGluL2NvbW1pdC5jOjM5OAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIgorbXNnc3RyICLnhKHms5Xlr6vlhaXntKLlvJXmqpTmoYgiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAi6auS57Si5byV77ya5LiN6IO95aWX55So5L+u6KOc5qqU77yI6auS5qqU5qGI77yaJXPvvIkiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzQ0IGJ1aWx0aW4vYW0uYzoxODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICLmh4nnlKjvvJolLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc2MQorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAi5rKS5pyJ6K6K5pu0IOKAlOKAlCDkv67oo5zmqpTlt7LntpPmh4nnlKjpgY7jgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGNoIGZhaWxlZCBhdCAlcyAlLipzIgorbXNnc3RyICLmiZPkv67oo5zmqpTlpLHmlZfmlrwgJXMgJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE3NzEKK21zZ2lkICJVc2UgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaD1kaWZmJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAi55SoICdnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2g9ZGlmZicg5ZG95Luk5qqi6KaW5aSx5pWX55qE5L+u6KOc5qqUIgorCisjOiBidWlsdGluL2FtLmM6MTgxNQorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKK21zZ3N0ciAiIgorIuaykuacieiuiuabtCDigJTigJQg5oKo5piv5LiN5piv5b+Y5LqG5Z+36KGMICdnaXQgYWRkJ++8n1xuIgorIuWmguaenOaykuacieS7gOm6vOimgeaWsOWinuWIsOaaq+WtmOWNgOeahO+8jOWJh+W+iOWPr+iDveaYr+WFtuWug+aPkOS6pOW3sue2k+W8leWFpeS6huebuOWQjOeahOiuiuabtOOAglxuIgorIuaCqOS5n+ioseaDs+imgei3s+mBjumAmeWAi+S/ruijnOaqlOOAgiIKKworIzogYnVpbHRpbi9hbS5jOjE4MjIKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJZb3Ugc2hvdWxkICdnaXQgYWRkJyBlYWNoIGZpbGUgd2l0aCByZXNvbHZlZCBjb25mbGljdHMgdG8gbWFyayB0aGVtIGFzICIKKyJzdWNoLlxuIgorIllvdSBtaWdodCBydW4gYGdpdCBybWAgb24gYSBmaWxlIHRvIGFjY2VwdCBcImRlbGV0ZWQgYnkgdGhlbVwiIGZvciBpdC4iCittc2dzdHIgIiIKKyLlnKjmgqjnmoTntKLlvJXkuK3ku43lrZjlnKjmnKrlkIjkvbXnmoTot6/lvpHjgIJcbiIKKyLmgqjmh4noqbLlsI3lt7LntpPooZ3nqoHop6PmsbrnmoTmr4/kuIDlgIvmqpTmoYjln7fooYwgJ2dpdCBhZGQnIOS+huaomeiomOW3sue2k+WujOaIkOOAgiBcbiIKKyLkvaDlj6/ku6XlsI0gXCLnlLHku5blgJHliKrpmaRcIiDnmoTmqpTmoYjln7fooYwgYGdpdCBybWAg5oyH5Luk44CCIgorCisjOiBidWlsdGluL2FtLmM6MTkyOSBidWlsdGluL2FtLmM6MTkzMyBidWlsdGluL2FtLmM6MTk0NSBidWlsdGluL3Jlc2V0LmM6MzQ2CisjOiBidWlsdGluL3Jlc2V0LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIuS4jeiDveino+aekOeJqeS7tiAnJXMn44CCIgorCisjOiBidWlsdGluL2FtLmM6MTk4MQorbXNnaWQgImZhaWxlZCB0byBjbGVhbiBpbmRleCIKK21zZ3N0ciAi5riF56m657Si5byV5aSx5pWXIgorCisjOiBidWlsdGluL2FtLmM6MjAyNQorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICLmgqjlpb3lg4/lnKjkuIrkuIDmrKEgJ2FtJyDlpLHmlZflvoznp7vli5XkuoYgSEVBROOAguacqumChOWOn+iHsyBPUklHX0hFQUQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIC0tcGF0Y2gtZm9ybWF0OiAlcyIKK21zZ3N0ciAi54Sh5pWI55qEIC0tcGF0Y2gtZm9ybWF0IOWAvO+8miVzIgorCisjOiBidWlsdGluL2FtLmM6MjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXNob3ctY3VycmVudC1wYXRjaDogJXMiCittc2dzdHIgIueEoeaViOeahCAtLXNob3ctY3VycmVudC1wYXRjaCDlgLzvvJolcyIKKworIzogYnVpbHRpbi9hbS5jOjIxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1zaG93LWN1cnJlbnQtcGF0Y2g9JXMiCittc2dzdHIgIi0tc2hvdy1jdXJyZW50LXBhdGNoPSVzIOiIhyAtLXNob3ctY3VycmVudC1wYXRjaD0lcyDkuI3nm7jlrrkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA3Cittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCittc2dzdHIgImdpdCBhbSBbPOmBuOmghT5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA4Cittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCittc2dzdHIgImdpdCBhbSBbPOmBuOmghT5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE0Cittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgIuS7peS6kuWLleW8j+aWueW8j+Wft+ihjCIKKworIzogYnVpbHRpbi9hbS5jOjIyMTYKK21zZ2lkICJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIKK21zZ3N0ciAi6ICB55qE5Y+D5pW4IOKAlOKAlCDnhKHkvZznlKgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE4Cittc2dpZCAiYWxsb3cgZmFsbCBiYWNrIG9uIDN3YXkgbWVyZ2luZyBpZiBuZWVkZWQiCittc2dzdHIgIuWmguaenOW/heimge+8jOWFgeioseS9v+eUqOS4ieaWueWQiOS9teOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIyMTkgYnVpbHRpbi9pbml0LWRiLmM6NDk0IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTgKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA0IGJ1aWx0aW4vc3Rhc2guYzo4MTIKK21zZ2lkICJiZSBxdWlldCIKK21zZ3N0ciAi6Z2c6buY5qih5byPIgorCisjOiBidWlsdGluL2FtLmM6MjIyMQorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIuWcqOaPkOS6pOiqquaYjuS4reaWsOWinuS4gOWAiyBTaWduZWQtb2ZmLWJ5IOewveWQjSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjQKK21zZ2lkICJyZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KSIKK21zZ3N0ciAi5L2/55SoIHV0Zjgg5a2X5YWD6ZuG77yI6aCQ6Kit77yJIgorCisjOiBidWlsdGluL2FtLmM6MjIyNgorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgIuWQkSBnaXQtbWFpbGluZm8g5YKz6YGeIC1rIOWPg+aVuCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjgKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICLlkJEgZ2l0LW1haWxpbmZvIOWCs+mBniAtYiDlj4PmlbgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAi5ZCRIGdpdC1tYWlsaW5mbyDlgrPpgZ4gLW0g5Y+D5pW4IgorCisjOiBidWlsdGluL2FtLmM6MjIzMgorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgIumHneWwjSBtYm94IOagvOW8j++8jOWQkSBnaXQtbWFpbHNwbGl0IOWCs+mBniAtLWtlZXAtY3Ig5Y+D5pW4IgorCisjOiBidWlsdGluL2FtLmM6MjIzNQorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICLkuI3lkJEgZ2l0LW1haWxzcGxpdCDlgrPpgZ4gLS1rZWVwLWNyIOWPg+aVuO+8jOimhuiTiyBhbS5rZWVwY3Ig55qE6Kit5a6aIgorCisjOiBidWlsdGluL2FtLmM6MjIzOAorbXNnaWQgInN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSIKK21zZ3N0ciAi5o2o5qOE6KOB5YiH57ea5YmN55qE5omA5pyJ5YWn5a65IgorCisjOiBidWlsdGluL2FtLmM6MjI0MCBidWlsdGluL2FtLmM6MjI0MyBidWlsdGluL2FtLmM6MjI0NiBidWlsdGluL2FtLmM6MjI0OQorIzogYnVpbHRpbi9hbS5jOjIyNTIgYnVpbHRpbi9hbS5jOjIyNTUgYnVpbHRpbi9hbS5jOjIyNTggYnVpbHRpbi9hbS5jOjIyNjEKKyM6IGJ1aWx0aW4vYW0uYzoyMjY3Cittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAi5YKz6YGe57WmIGdpdC1hcHBseSIKKworIzogYnVpbHRpbi9hbS5jOjIyNTcgYnVpbHRpbi9jb21taXQuYzoxMzkxIGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MAorIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczIGJ1aWx0aW4vZ3JlcC5jOjg3MSBidWlsdGluL21lcmdlLmM6MjUwCisjOiBidWlsdGluL3B1bGwuYzoxNDAgYnVpbHRpbi9wdWxsLmM6MTk5IGJ1aWx0aW4vcmViYXNlLmM6MTUwNQorIzogYnVpbHRpbi9yZXBhY2suYzozMTUgYnVpbHRpbi9yZXBhY2suYzozMTkgYnVpbHRpbi9yZXBhY2suYzozMjEKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAgYnVpbHRpbi9zaG93LXJlZi5jOjE3MiBidWlsdGluL3RhZy5jOjQwMworIzogcGFyc2Utb3B0aW9ucy5oOjE1NCBwYXJzZS1vcHRpb25zLmg6MTc1IHBhcnNlLW9wdGlvbnMuaDozMTYKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2FtLmM6MjI2MyBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTYgYnVpbHRpbi90YWcuYzo0MzcgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgIuagvOW8jyIKKworIzogYnVpbHRpbi9hbS5jOjIyNjQKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgIuS/ruijnOaqlOeahOagvOW8jyIKKworIzogYnVpbHRpbi9hbS5jOjIyNzAKK21zZ2lkICJvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMiCittc2dzdHIgIuaJk+S/ruijnOaqlOWkseaVl+aZgumhr+ekuueahOmMr+iqpOioiuaBryIKKworIzogYnVpbHRpbi9hbS5jOjIyNzIKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICLooZ3nqoHop6PmsbrlvoznubznuozlpZfnlKjkv67oo5zmqpQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc1Cittc2dpZCAic3lub255bXMgZm9yIC0tY29udGludWUiCittc2dzdHIgIuWSjCAtLWNvbnRpbnVlIOWQjOe+qSIKKworIzogYnVpbHRpbi9hbS5jOjIyNzgKK21zZ2lkICJza2lwIHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICLot7PpgY7nm67liY3kv67oo5zmqpQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjgxCittc2dpZCAicmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLiIKK21zZ3N0ciAi5b6p5Y6f5Y6f5aeL5YiG5pSv5Lim57WC5q2i5omT5L+u6KOc5qqU5YuV5L2c44CCIgorCisjOiBidWlsdGluL2FtLmM6MjI4NAorbXNnaWQgImFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24gYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcy4iCittc2dzdHIgIue1guatouS/ruijnOaqlOWLleS9nOS9huS/neaMgSBIRUFEIOS4jeiuiuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIyODgKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBiZWluZyBhcHBsaWVkIgorbXNnc3RyICLpoa/npLrmraPlnKjlpZfnlKjnmoTkv67oo5zmqpQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjkzCittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICLlsIfkvZzogIXml6XmnJ/kvZzngrrmj5DkuqTml6XmnJ8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk1Cittc2dpZCAidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIKK21zZ3N0ciAi55So55uu5YmN5pmC6ZaT5L2c54K65L2c6ICF5pel5pyfIgorCisjOiBidWlsdGluL2FtLmM6MjI5NyBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIwIGJ1aWx0aW4vY29tbWl0LmM6MTUxMgorIzogYnVpbHRpbi9tZXJnZS5jOjI4NyBidWlsdGluL3B1bGwuYzoxNzQgYnVpbHRpbi9yZWJhc2UuYzo1MTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NiBidWlsdGluL3JldmVydC5jOjExNyBidWlsdGluL3RhZy5jOjQxOAorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAia2V5LWlkIgorCisjOiBidWlsdGluL2FtLmM6MjI5OCBidWlsdGluL3JlYmFzZS5jOjUxOCBidWlsdGluL3JlYmFzZS5jOjE1NTcKK21zZ2lkICJHUEctc2lnbiBjb21taXRzIgorbXNnc3RyICLkvb/nlKggR1BHIOewveWQjeaPkOS6pCIKKworIzogYnVpbHRpbi9hbS5jOjIzMDEKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAi77yI5YWn6YOo5L2/55So77yM55So5pa8IGdpdC1yZWJhc2XvvIkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzE5Cittc2dpZCAiIgorIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmRcbiIKKyJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIgorbXNnc3RyICIiCisi5Y+D5pW4IC1iLy0tYmluYXJ5IOW3sue2k+W+iOmVt+aZgumWk+S4jeWBmuS7u+S9leWvpuizquWLleS9nOS6hu+8jOS4puS4lOWwh+iiq+enu+mZpOOAglxuIgorIuiri+S4jeimgeWGjeS9v+eUqOWug+S6huOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjYKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIuiugOWPlue0ouW8leWkseaVlyIKKworIzogYnVpbHRpbi9hbS5jOjIzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICLkuYvliY3nmoTph43lrprln7rlupXnm67pjIQgJXMg5LuN54S25a2Y5Zyo77yM5L2G5Y275o+Q5L6b5LqGIG1ib3jjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisi55m854++5LqG6Yyv6Kqk55qEICVzIOebrumMhOOAglxuIgorIuS9v+eUqCBcImdpdCBhbSAtLWFib3J0XCIg5Yiq6Zmk5a6D44CCIgorCisjOiBidWlsdGluL2FtLmM6MjM3MQorbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgIuino+axuuWLleS9nOacqumAsuihjO+8jOaIkeWAkeS4jeacg+e5vOe6jOOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIzODEKK21zZ2lkICJpbnRlcmFjdGl2ZSBtb2RlIHJlcXVpcmVzIHBhdGNoZXMgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAi5LqS5YuV5byP5qih5byP6ZyA6KaB5oyH5Luk5YiX5LiK5o+Q5L6b5L+u6KOc5qqUIgorCisjOiBidWlsdGluL2FwcGx5LmM6OAorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbPOmBuOmghT5dIFs85L+u6KOc5qqUPi4uLl0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgIuS4jeiDveW7uueri+atuOaqlOaqlOahiCAnJXMnIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgIuS4jeiDvemHjeWumuWQkei8uOWHuiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2Ze+8muacquaPkOS+m+mBoOerryBVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmXvvJrmnJ/mnJvmmK8gQUNLL05BS++8jOWNu+W+l+WIsCBmbHVzaCDljIUiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2Ze+8mk5BQ0sgJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY1Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICJnaXQgYXJjaGl2Ze+8muWNlOWumumMr+iqpCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjkKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmXvvJrmh4nmnInkuIDlgIsgZmx1c2gg5YyFIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPGJhZF90ZXJtPiA8Z29vZF90ZXJtPiIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPOWjni3ooZPoqp4+IDzlpb0t6KGT6KqePiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI0Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNQorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzzmj5DkuqQ+XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI2Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSBbLS1uby1sb2ddIDxzdGF0ZT4gPHJldmlzaW9uPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSBbLS1uby1sb2ddIDzni4DmhYs+IDzniYjmnKw+IDzlpb0t6KGT6KqePiA85aOeLeihk+iqniIKKyI+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjcKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPGNvbW1hbmQ+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPOaMh+S7pD4gPOWlvS3ooZPoqp4+IDzlo54t6KGT6KqePiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPGdvb2RfdGVybT4gPGJhZF90ZXJtPiBbPHRlcm0+XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPOWlvS3ooZPoqp4+IDzlo54t6KGT6KqePiBbPOihk+iqnj5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzAKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PHRlcm0+XVstLW5vLWNoZWNrb3V0XSBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT086KGT6KqePiAtLXRlcm0te25ldyxiYWR9IgorIj086KGT6KqePl1bLS1uby1jaGVja291dF0gWzzlo54+IFs85aW9Pi4uLl1dIFstLV0gWzzot6/lvpE+Li4uXSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGVybSIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDlgIvmnInmlYjnmoTooZPoqp4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnJXMnIGFzIGEgdGVybSIKK21zZ3N0ciAi5LiN6IO95L2/55So5YWn5bu65oyH5LukICclcycg5L2c54K66KGT6KqeIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgdGVybSAnJXMnIgorbXNnc3RyICLkuI3og73kv67mlLnooZPoqp4gJyVzJyDnmoTlkKvnvqkiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTEKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgIuiri+S9v+eUqOWFqeWAi+S4jeWQjOeahOihk+iqniIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExOAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRoZSBmaWxlIEJJU0VDVF9URVJNUyIKK21zZ3N0ciAi5LiN6IO96ZaL5ZWf5qqU5qGIIEJJU0VDVF9URVJNUyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJXZSBhcmUgbm90IGJpc2VjdGluZy5cbiIKK21zZ3N0ciAi5oiR5YCR5rKS5pyJ5Zyo5LqM5YiG5bCL5om+44CCXG4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIiclcycg5LiN5piv5LiA5YCL5pyJ5pWI55qE5o+Q5LqkIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyVzJy4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIuS4jeiDveewveWHuuWOn+WniyBIRUFEICclcyfjgILlmJfoqaYgJ2dpdCBiaXNlY3QgcmVzZXQgPOaPkOS6pD4n44CCIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLlo57nmoQgYmlzZWN0X3dyaXRlIOWPg+aVuO+8miVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGdldCB0aGUgb2lkIG9mIHRoZSByZXYgJyVzJyIKK21zZ3N0ciAi54Sh5rOV5Y+W5b6X54mI5pysICclcycg55qE54mp5Lu2IElEIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IG9wZW4gdGhlIGZpbGUgJyVzJyIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWf5qqU5qGIICclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21tYW5kOiB5b3UncmUgY3VycmVudGx5IGluIGEgJXMvJXMgYmlzZWN0IgorbXNnc3RyICLnhKHmlYjnmoTmjIfku6TvvJrmgqjnm67liY3mraPomZXmlrzkuIDlgIsgJXMvJXMg5LqM5YiG5bCL5om+5LitIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorIuaCqOmcgOimgee1puaIkeiHs+WwkeS4gOWAiyAlcyDlkozkuIDlgIsgJXMg54mI5pys44CCXG4iCisi54K65q2k5oKo5Y+v5Lul55SoIFwiZ2l0IGJpc2VjdCAlc1wiIOWSjCBcImdpdCBiaXNlY3QgJXNcIuOAgiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorIuaCqOmcgOimgeWft+ihjCBcImdpdCBiaXNlY3Qgc3RhcnRcIiDkvobplovlp4vjgIJcbiIKKyLnhLblvozpnIDopoHmj5DkvpvmiJHoh7PlsJHkuIDlgIsgJXMg5ZKM5LiA5YCLICVzIOeJiOacrOOAglxuIgorIueCuuatpOaCqOWPr+S7peeUqCBcImdpdCBiaXNlY3QgJXNcIiDlkowgXCJnaXQgYmlzZWN0ICVzXCIg5oyH5Luk44CCIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJpc2VjdGluZyBvbmx5IHdpdGggYSAlcyBjb21taXQiCittc2dzdHIgIuWcqOWPquacieS4gOWAiyAlcyDmj5DkuqTnmoTmg4Xms4HkuIvkuozliIblsIvmib4iCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWPpeWwvuepuuagvAorIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMxOAorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICLmgqjnorroqo3ll45bWS9uXe+8nyAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozNzkKK21zZ2lkICJubyB0ZXJtcyBkZWZpbmVkIgorbXNnc3RyICLmnKrlrprnvqnooZPoqp4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY3VycmVudCB0ZXJtcyBhcmUgJXMgZm9yIHRoZSBvbGQgc3RhdGVcbiIKKyJhbmQgJXMgZm9yIHRoZSBuZXcgc3RhdGUuXG4iCittc2dzdHIgIuaCqOebruWJjemHneWwjeiIiueLgOaFi+eahOihk+iqnuaYryAlc++8jOWwjeaWsOeLgOaFi+eahOihk+iqnuaYryAlc+OAglxuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAnZ2l0IGJpc2VjdCB0ZXJtcycuXG4iCisiU3VwcG9ydGVkIG9wdGlvbnMgYXJlOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIGFuZCAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIgorbXNnc3RyICIiCisi5oyH5LukICdnaXQgYmlzZWN0IHRlcm1zJyDnmoTlj4PmlbggJXMg54Sh5pWI44CCXG4iCisi5pSv5o+055qE6YG46aCF5pyJ77yaLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCDlkowgLS10ZXJtLWJhZHwtLXRlcm0tbmV344CCIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBvcHRpb246ICclcyciCittc2dzdHIgIuacquitmOWIpeeahOmBuOmghe+8miclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiJyVzJyDnnIvotbfkvobkuI3mmK/kuIDlgIvmnInmlYjnmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MTQKK21zZ2lkICJiYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIuWjnueahCBIRUFEIC0g5oiR6ZyA6KaB5LiA5YCLIEhFQUQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hlY2tpbmcgb3V0ICclcycgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3Qgc3RhcnQgPHZhbGlkLWJyYW5jaD4nLiIKK21zZ3N0ciAi57C95Ye6ICclcycg5aSx5pWX44CC5ZiX6KmmICdnaXQgYmlzZWN0IHN0YXJ0IDzmnInmlYjliIbmlK8+J+OAgiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MAorbXNnaWQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiCittc2dzdHIgIuS4jeacg+WcqOWBmuS6hiBjZy1zZWVrIOeahOaoueS4iuWBmuS6jOWIhuWwi+aJviIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MworbXNnaWQgImJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIuWjnueahCBIRUFEIC0g5aWH5oCq55qE56ym6Jmf5byV55SoIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmOiAnJXMnIgorbXNnc3RyICLnhKHmlYjnmoTlvJXnlKjvvJonJXMnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMzCittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAi5Z+36KGMICdnaXQgYmlzZWN0IG5leHQnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM1Cittc2dpZCAid3JpdGUgdGhlIHRlcm1zIHRvIC5naXQvQklTRUNUX1RFUk1TIgorbXNnc3RyICLlsIfooZPoqp7lr6vlhaUgLmdpdC9CSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzcKK21zZ2lkICJjbGVhbnVwIHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIua4hemZpOS6jOWIhuWwi+aJvueLgOaFiyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzOQorbXNnaWQgImNoZWNrIGZvciBleHBlY3RlZCByZXZzIgorbXNnc3RyICLmqqLmn6XpoJDmnJ/nmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDEKK21zZ2lkICJyZXNldCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICLmuIXpmaTkuozliIblsIvmib7ni4DmhYsiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDMKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGJpc2VjdGlvbiBzdGF0ZSBpbiBCSVNFQ1RfTE9HIgorbXNnc3RyICLlsIfkuozliIblsIvmib7nmoTni4DmhYvlr6vlhaUgQklTRUNUX0xPRyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NQorbXNnaWQgImNoZWNrIGFuZCBzZXQgdGVybXMgaW4gYSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIuWcqOS4gOWAi+S6jOWIhuWwi+aJvueLgOaFi+S4reaqouafpeWSjOioreWumuihk+iqniIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NworbXNnaWQgImNoZWNrIHdoZXRoZXIgYmFkIG9yIGdvb2QgdGVybXMgZXhpc3QiCittc2dzdHIgIuaqouafpeWjnueahOaIluWlveeahOihk+iqnuaYr+WQpuWtmOWcqCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0OQorbXNnaWQgInByaW50IG91dCB0aGUgYmlzZWN0IHRlcm1zIgorbXNnc3RyICLliJfljbDkuozliIblsIvmib7ooZPoqp4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTEKK21zZ2lkICJzdGFydCB0aGUgYmlzZWN0IHNlc3Npb24iCittc2dzdHIgIuWVn+WLleS6jOWIhuWwi+aJvumBjueoiyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MworbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgIuabtOaWsCBCSVNFQ1RfSEVBRCDogIzpnZ7nsL3lh7rnm67liY3mj5DkuqQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTUKK21zZ2lkICJubyBsb2cgZm9yIEJJU0VDVF9XUklURSIKK21zZ3N0ciAiQklTRUNUX1dSSVRFIOeEoeaXpeiqjCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3MworbXNnaWQgIi0td3JpdGUtdGVybXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS13cml0ZS10ZXJtcyDpnIDopoHlhanlgIvlj4PmlbgiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzcKK21zZ2lkICItLWJpc2VjdC1jbGVhbi1zdGF0ZSByZXF1aXJlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIOS4jeW4tuWPg+aVuCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4NAorbXNnaWQgIi0tYmlzZWN0LXJlc2V0IHJlcXVpcmVzIGVpdGhlciBubyBhcmd1bWVudCBvciBhIGNvbW1pdCIKK21zZ3N0ciAiLS1iaXNlY3QtcmVzZXQg54Sh6ZyA5Y+D5pW45oiW6ICF6ZyA6KaB5LiA5YCL5o+Q5LqkIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg4Cittc2dpZCAiLS1iaXNlY3Qtd3JpdGUgcmVxdWlyZXMgZWl0aGVyIDQgb3IgNSBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LXdyaXRlIOmcgOimgSA0IOaIliA1IOWAi+WPg+aVuCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY5NAorbXNnaWQgIi0tY2hlY2stYW5kLXNldC10ZXJtcyByZXF1aXJlcyAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIOmcgOimgSAzIOWAi+WPg+aVuCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcwMAorbXNnaWQgIi0tYmlzZWN0LW5leHQtY2hlY2sgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtbmV4dC1jaGVjayDpnIDopoEgMiDmiJYgMyDlgIvlj4PmlbgiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3MDYKK21zZ2lkICItLWJpc2VjdC10ZXJtcyByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnQiCittc2dzdHIgIi0tYmlzZWN0LXRlcm1zIOmcgOimgSAwIOaIliAxIOWAi+WPg+aVuCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjMxCittc2dpZCAiZ2l0IGJsYW1lIFs8b3B0aW9ucz5dIFs8cmV2LW9wdHM+XSBbPHJldj5dIFstLV0gPGZpbGU+IgorbXNnc3RyICJnaXQgYmxhbWUgWzzpgbjpoIU+XSBbPOeJiOacrOmBuOmghT5dIFs854mI5pysPl0gWy0tXSA85qqU5qGIPiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjM2Cittc2dpZCAiPHJldi1vcHRzPiBhcmUgZG9jdW1lbnRlZCBpbiBnaXQtcmV2LWxpc3QoMSkiCittc2dzdHIgIjzniYjmnKzpgbjpoIU+IOeahOaqlOahiOiomOmMhOWcqCBnaXQtcmV2LWxpc3QoMSkg5LitIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGluZyBhIGNvbG9yOiAlcyIKK21zZ3N0ciAi5pyf5pyb5LiA5YCL6aGP6Imy77yaJXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MTYKK21zZ2lkICJtdXN0IGVuZCB3aXRoIGEgY29sb3IiCittc2dzdHIgIuW/hemgiOS7peS4gOWAi+mhj+iJsue1kOWwviIKKworIzogYnVpbHRpbi9ibGFtZS5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yICclcycgaW4gY29sb3IuYmxhbWUucmVwZWF0ZWRMaW5lcyIKK21zZ3N0ciAi6Kit5a6aIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMg5Lit55qE54Sh5pWI6aGP6ImyICclcyciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3NDcKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciBibGFtZS5jb2xvcmluZyIKK21zZ3N0ciAi6Kit5a6aIGJsYW1lLmNvbG9yaW5nIOS4reeahOeEoeaViOWPluWAvCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmluZCByZXZpc2lvbiAlcyB0byBpZ25vcmUiCittc2dzdHIgIuS4jeiDveaJvuWIsOimgeW/veeVpeeahOeJiOacrCAlcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NAorbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgIuWinumHj+W8j+WcsOmhr+ekuueZvOePvueahCBibGFtZSDmop3nm64iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDUKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLpgornlYzmj5DkuqTpoa/npLrnqbrnmoQgU0hBLTHvvIjpoJDoqK3vvJrpl5zplonvvIkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDYKK21zZ2lkICJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuS4jeaKiuagueaPkOS6pOS9nOeCuumCiueVjO+8iOmgkOiore+8mumXnOmWie+8iSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIumhr+ekuuaMh+S7pOa2iOiAl+e1seioiCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi5by35Yi26YCy5bqm6aGv56S6IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ5Cittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIumhr+ekuuWIpOaWtyBibGFtZSDmop3nm67kvY3np7vnmoTlvpfliIboqLrmlrfoqIrmga8iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTAKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAi6aGv56S65Y6f5aeL5qqU5qGI5ZCN77yI6aCQ6Kit77ya6Ieq5YuV77yJIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUxCittc2dpZCAiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLpoa/npLrljp/lp4vnmoTooYzomZ/vvIjpoJDoqK3vvJrpl5zplonvvIkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTIKK21zZ2lkICJTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIgorbXNnc3RyICLpoa/npLrngrrkuIDlgIvpganlkIjmqZ/lmajoroDlj5bnmoTmoLzlvI8iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTMKK21zZ2lkICJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIueCuuavj+S4gOihjOmhr+ekuuapn+WZqOmBqeeUqOeahOaPkOS6pOioiuaBryIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NAorbXNnaWQgIlVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBnaXQtYW5ub3RhdGUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuS9v+eUqOWSjCBnaXQtYW5ub3RhdGUg55u45ZCM55qE6Ly45Ye65qih5byP77yI6aCQ6Kit77ya6Zec6ZaJ77yJIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU1Cittc2dpZCAiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLpoa/npLrljp/lp4vmmYLplpPmiLPvvIjpoJDoqK3vvJrpl5zplonvvIkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTYKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIumhr+ekuumVt+eahCBTSEExIOaPkOS6pOiZn++8iOmgkOiore+8mumXnOmWie+8iSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NworbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIumaseiXj+S9nOiAheWQjeWtl+WSjOaZgumWk+aIs++8iOmgkOiore+8mumXnOmWie+8iSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1OAorbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi6aGv56S65L2c6ICF55qE5L+h566x6ICM5LiN5piv5ZCN5a2X77yI6aCQ6Kit77ya6Zec6ZaJ77yJIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU5Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgIuW/veeVpeepuueZveW3rueVsCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MCBidWlsdGluL2xvZy5jOjE3MDIKK21zZ2lkICJyZXYiCittc2dzdHIgIueJiOacrCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MAorbXNnaWQgIklnbm9yZSA8cmV2PiB3aGVuIGJsYW1pbmciCittc2dzdHIgIuWcqOWft+ihjCBibGFtZSDli5XkvZzmmYLlv73nlaUgPOeJiOacrD4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjEKK21zZ2lkICJJZ25vcmUgcmV2aXNpb25zIGZyb20gPGZpbGU+IgorbXNnc3RyICLlv73nlaXkvoboh6ogPOaqlOahiD4g5Lit55qE54mI5pysIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYyCittc2dpZCAiY29sb3IgcmVkdW5kYW50IG1ldGFkYXRhIGZyb20gcHJldmlvdXMgbGluZSBkaWZmZXJlbnRseSIKK21zZ3N0ciAi5L2/55So6aGP6Imy6ZaT6ZqU6Ly45Ye66IiH5YmN5LiA6KGM5LiN5ZCM55qE6YeN6KSH5YWD6KiK5oGvIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYzCittc2dpZCAiY29sb3IgbGluZXMgYnkgYWdlIgorbXNnc3RyICLkvp3mk5rmmYLplpPokZfoibIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjQKK21zZ2lkICJTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCBiZXR0ZXIgbWF0Y2giCittc2dzdHIgIuiKseiyu+mhjeWklueahOW+queSsOS+huaJvuWIsOabtOWlveeahOespuWQiCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NQorbXNnaWQgIlVzZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4gaW5zdGVhZCBvZiBjYWxsaW5nIGdpdC1yZXYtbGlzdCIKK21zZ3N0ciAi5L2/55So5L6G6IeqIDzmqpTmoYg+IOeahOS/ruiogumbhuiAjOS4jeaYr+WRvOWPqyBnaXQtcmV2LWxpc3QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjYKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICLkvb/nlKggPOaqlOahiD4g55qE5YWn5a655L2c54K65pyA57WC55qE5ZyW54mHIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY3IGJ1aWx0aW4vYmxhbWUuYzo4NjgKK21zZ2lkICJzY29yZSIKK21zZ3N0ciAi5b6X5YiGIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY3Cittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAi5om+5Yiw5qqU5qGI5YWn5Y+K6Leo5qqU5qGI55qE6KGM6KSH6KO9IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAi5om+5Yiw5qqU5qGI5YWn5Y+K6Leo5qqU5qGI55qE6KGM56e75YuVIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAibixtIgorbXNnc3RyICJuLG0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjkKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAi5Y+q6JmV55CG6KGM56+E5ZyN5ZyoIG4g5ZKMIG0g5LmL6ZaT55qE77yM5b6eIDEg6ZaL5aeLIgorCisjOiBidWlsdGluL2JsYW1lLmM6OTIxCittc2dpZCAiLS1wcm9ncmVzcyBjYW4ndCBiZSB1c2VkIHdpdGggLS1pbmNyZW1lbnRhbCBvciBwb3JjZWxhaW4gZm9ybWF0cyIKK21zZ3N0ciAiLS1wcm9ncmVzcyDkuI3og73lkowgLS1pbmNyZW1lbnRhbCDmiJYgLS1wb3JjZWxhaW4g5ZCM5pmC5L2/55SoIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBzdHJpbmcgaXMgdXNlZCB0byB0ZWxsIHVzIHRoZQorIy4gbWF4aW11bSBkaXNwbGF5IHdpZHRoIGZvciBhIHJlbGF0aXZlIHRpbWVzdGFtcCBpbgorIy4gImdpdCBibGFtZSIgb3V0cHV0LiAgRm9yIEMgbG9jYWxlLCAiNCB5ZWFycywgMTEKKyMuIG1vbnRocyBhZ28iLCB3aGljaCB0YWtlcyAyMiBwbGFjZXMsIGlzIHRoZSBsb25nZXN0CisjLiBhbW9uZyB2YXJpb3VzIGZvcm1zIG9mIHJlbGF0aXZlIHRpbWVzdGFtcHMsIGJ1dAorIy4geW91ciBsYW5ndWFnZSBtYXkgbmVlZCBtb3JlIG9yIGZld2VyIGRpc3BsYXkKKyMuIGNvbHVtbnMuCisjLgorIzogYnVpbHRpbi9ibGFtZS5jOjk3MgorbXNnaWQgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iCittc2dzdHIgIjQg5bm0IDExIOWAi+aciOWJjSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjEwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZSIKK21zZ2lkX3BsdXJhbCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZXMiCittc2dzdHJbMF0gIuaqlOahiCAlcyDlj6rmnIkgJWx1IOihjCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjExMjUKK21zZ2lkICJCbGFtaW5nIGxpbmVzIgorbXNnc3RyICLov73ouaTnqIvlvI/norzooYwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjkKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggWzzpgbjpoIU+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMwCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLWxdIFstZl0gPGJyYW5jaC1uYW1lPiBbPHN0YXJ0LXBvaW50Pl0iCittc2dzdHIgImdpdCBicmFuY2ggWzzpgbjpoIU+XSBbLWxdIFstZl0gPOWIhuaUr+WQjT4gWzzotbflp4vpu54+XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaC1uYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOmBuOmghT5dIFstcl0gKC1kIHwgLUQpIDzliIbmlK/lkI0+Li4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMyCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLW0gfCAtTSkgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs86YG46aCFPl0gKC1tIHwgLU0pIFs86IiK5YiG5pSvPl0gPOaWsOWIhuaUrz4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzMKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtYyB8IC1DKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzzpgbjpoIU+XSAoLWMgfCAtQykgWzzogIHliIbmlK8+XSA85paw5YiG5pSvPiIKKworIzogYnVpbHRpbi9icmFuY2guYzozNAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzzpgbjpoIU+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozNQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzzpgbjpoIU+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKKworIyAg6K2v6ICF77ya5L+d5oyB5Y6f5o+b6KGM5qC85byP77yM5Zyo6Ly45Ye65pmCICVzIOeahOabv+S7o+WFp+Wuueacg+iuk+Wtl+S4suiuiumVtworIzogYnVpbHRpbi9icmFuY2guYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisi5bCH6KaB5Yiq6Zmk55qE5YiG5pSvICclcycg5bey57aT6KKr5ZCI5L215YiwXG4iCisiICAgICAgICAgJyVzJ++8jOS9huacquWQiOS9teWIsCBIRUFE44CCIgorCisjICDora/ogIXvvJrkv53mjIHljp/mj5vooYzmoLzlvI/vvIzlnKjovLjlh7rmmYIgJXMg55qE5pu/5Luj5YWn5a655pyD6K6T5a2X5Liy6K6K6ZW3CisjOiBidWlsdGluL2JyYW5jaC5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyLkuKbmnKrliKrpmaTliIbmlK8gJyVzJ++8jCDpm5bnhLblroPlt7LntpPlkIjkvbXliLAgSEVBRO+8jFxuIgorIiAgICAgICAgIOeEtuiAjOWNu+Wwmuacquiiq+WQiOS9teWIsOWIhuaUryAnJXMnIOOAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICLnhKHms5Xmn6XoqaIgJyVzJyDmjIflkJHnmoTmj5DkuqTnianku7YiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorIuWIhuaUryAnJXMnIOaykuacieWujOWFqOWQiOS9teOAglxuIgorIuWmguaenOaCqOeiuuiqjeimgeWIqumZpOWug++8jOWft+ihjCAnZ2l0IGJyYW5jaCAtRCAlcyfjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTg5Cittc2dpZCAiVXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAi5pu05paw6Kit5a6a5qqU5qGI5aSx5pWXIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyMAorbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAi5LiN6IO95bCHIC1hIOWSjCAtZCDlkIzmmYLkvb/nlKgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI2Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICLnhKHms5Xmn6XoqaIgSEVBRCDmjIflkJHnmoTmj5DkuqTnianku7YiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgYnJhbmNoICclcycgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAi54Sh5rOV5Yiq6Zmk57C95Ye65pa8ICclMiRzJyDnmoTliIbmlK8gJyUxJHMn44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAi5pyq6IO95om+5Yiw6YGg56uv6L+96Lmk5YiG5pSvICclcyfjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIuWIhuaUryAnJXMnIOacqueZvOePvuOAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICLnhKHms5XliKrpmaTpgaDnq6/ov73ouaTliIbmlK8gJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgYnJhbmNoICclcyciCittc2dzdHIgIueEoeazleWIqumZpOWIhuaUryAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZS10cmFja2luZyBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIuW3suWIqumZpOmBoOerr+i/vei5pOWIhuaUryAlc++8iOabvueCuiAlc++8ieOAglxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAi5bey5Yiq6Zmk5YiG5pSvICVz77yI5pu+54K6ICVz77yJ44CCXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDI5IGJ1aWx0aW4vdGFnLmM6NjEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5qC85byP5YyW5a2X5LiyIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2MAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgIuS4jeiDveino+aekCBIRUFEIOaPkOS6pCIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAoJXMpIHBvaW50cyBvdXRzaWRlIG9mIHJlZnMvaGVhZHMvIgorbXNnc3RyICJIRUFEICglcykg5oyH5ZCRIHJlZnMvaGVhZHMvIOS5i+WkliIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIHJlYmFzZWQgYXQgJXMiCittc2dzdHIgIuWIhuaUryAlcyDmraPooqvph43lrprln7rlupXliLAgJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyBiaXNlY3RlZCBhdCAlcyIKK21zZ3N0ciAi5YiG5pSvICVzIOato+iiq+S6jOWIhuWwi+aJvuaWvCAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDIKK21zZ2lkICJjYW5ub3QgY29weSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIueEoeazleikh+ijveebruWJjeWIhuaUr+WboOeCuuS4jeiZleaWvOS7u+S9leWIhuaUr+S4iuOAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDQKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAi54Sh5rOV6YeN5paw5ZG95ZCN55uu5YmN5YiG5pSv5Zug54K65LiN6JmV5pa85Lu75L2V5YiG5pSv5LiK44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICLnhKHmlYjnmoTliIbmlK/lkI3vvJonJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0MgorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICLliIbmlK/ph43mlrDlkb3lkI3lpLHmlZciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ0Cittc2dpZCAiQnJhbmNoIGNvcHkgZmFpbGVkIgorbXNnc3RyICLliIbmlK/opIfoo73lpLHmlZciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYSBjb3B5IG9mIGEgbWlzbmFtZWQgYnJhbmNoICclcyciCittc2dzdHIgIuW3sueCuumMr+iqpOWRveWQjeeahOWIhuaUryAnJXMnIOW7uueri+S6huS4gOWAi+WJr+acrCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgIuW3suWwh+mMr+iqpOWRveWQjeeahOWIhuaUryAnJXMnIOmHjeaWsOWRveWQjSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoIHJlbmFtZWQgdG8gJXMsIGJ1dCBIRUFEIGlzIG5vdCB1cGRhdGVkISIKK21zZ3N0ciAi5YiG5pSv6YeN5paw5ZG95ZCN54K6ICVz77yM5L2GIEhFQUQg5rKS5pyJ5pu05paw77yBIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2NgorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAi5YiG5pSv6KKr6YeN5paw5ZG95ZCN77yM5L2G5pu05paw6Kit5a6a5qqU5qGI5aSx5pWXIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2OAorbXNnaWQgIkJyYW5jaCBpcyBjb3BpZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICLliIbmlK/lt7LopIfoo73vvIzkvYbmm7TmlrDoqK3lrprmqpTmoYjlpLHmlZciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2hcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgc3RyaXBwZWQuXG4iCittc2dzdHIgIiIKKyLoq4vnt6jovK/liIbmlK/nmoTmj4/ov7BcbiIKKyIgICVzXG4iCisi5LulICclYycg6ZaL6aCt55qE6KGM5bCH6KKr6YGO5r++44CCXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjE4Cittc2dpZCAiR2VuZXJpYyBvcHRpb25zIgorbXNnc3RyICLpgJrnlKjpgbjpoIUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIwCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgIumhr+ekuumbnOa5iuWAvOWSjOS4u+mhjO+8jOiLpeWPg+aVuOWHuuePvuWFqeasoeWJh+mhr+ekuuS4iua4uOWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjEKK21zZ2lkICJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIgorbXNnc3RyICLkuI3poa/npLroqIrmga8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIyCittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtcHVsbCgxKSkiCittc2dzdHIgIuioreWumui/vei5pOaooeW8j++8iOWPg+imiyBnaXQtcHVsbCgxKe+8iSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjQKK21zZ2lkICJkbyBub3QgdXNlIgorbXNnc3RyICLkuI3opoHkvb/nlKgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI2IGJ1aWx0aW4vcmViYXNlLmM6NTEzCittc2dpZCAidXBzdHJlYW0iCittc2dzdHIgIuS4iua4uCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYKK21zZ2lkICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgIuaUueiuiuS4iua4uOioiuaBryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjcKK21zZ2lkICJ1bnNldCB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAi5Y+W5raI5LiK5ri46LOH6KiK6Kit5a6aIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOAorbXNnaWQgInVzZSBjb2xvcmVkIG91dHB1dCIKK21zZ3N0ciAi5L2/55So5b2p6Imy6Ly45Ye6IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOQorbXNnaWQgImFjdCBvbiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIuS9nOeUqOaWvOmBoOerr+i/vei5pOWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzEgYnVpbHRpbi9icmFuY2guYzo2MzMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLlj6rliJfljbDljIXlkKvoqbLmj5DkuqTnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMyIGJ1aWx0aW4vYnJhbmNoLmM6NjM0Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi5Y+q5YiX5Y2w5LiN5YyF5ZCr6Kmy5o+Q5Lqk55qE5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzNworbXNnaWQgIlNwZWNpZmljIGdpdC1icmFuY2ggYWN0aW9uczoiCittc2dzdHIgIuWFt+mrlOeahCBnaXQtYnJhbmNoIOWLleS9nO+8miIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzgKK21zZ2lkICJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAi5YiX5Ye66YGg56uv6L+96Lmk5Y+K5pys5qmf5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MAorbXNnaWQgImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIgorbXNnc3RyICLliKrpmaTlrozlhajlkIjkvbXnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQxCittc2dpZCAiZGVsZXRlIGJyYW5jaCAoZXZlbiBpZiBub3QgbWVyZ2VkKSIKK21zZ3N0ciAi5Yiq6Zmk5YiG5pSv77yI5Y2z5L2/5rKS5pyJ5ZCI5L2177yJIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MgorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICLnp7vli5Uv6YeN5paw5ZG95ZCN5LiA5YCL5YiG5pSv77yM5Lul5Y+K5a6D55qE5byV55So5pel6KqMIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MworbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIuenu+WLlS/ph43mlrDlkb3lkI3kuIDlgIvliIbmlK/vvIzljbPkvb/nm67mqJnlt7LlrZjlnKgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ0Cittc2dpZCAiY29weSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIKK21zZ3N0ciAi6KSH6KO95LiA5YCL5YiG5pSv5ZKM5a6D55qE5byV55So5pel6KqMIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NQorbXNnaWQgImNvcHkgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi6KSH6KO95LiA5YCL5YiG5pSv77yM5Y2z5L2/55uu5qiZ5bey5a2Y5ZyoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NgorbXNnaWQgImxpc3QgYnJhbmNoIG5hbWVzIgorbXNnc3RyICLliJflh7rliIbmlK/lkI0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ3Cittc2dpZCAic2hvdyBjdXJyZW50IGJyYW5jaCBuYW1lIgorbXNnc3RyICLpoa/npLrnm67liY3liIbmlK/lkI0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ4Cittc2dpZCAiY3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2ciCittc2dzdHIgIuW7uueri+WIhuaUr+eahOW8leeUqOaXpeiqjCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTAKK21zZ2lkICJlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCIKK21zZ3N0ciAi5qiZ6KiY5YiG5pSv55qE5o+P6L+wIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MQorbXNnaWQgImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iCittc2dzdHIgIuW8t+WItuW7uueri+OAgeenu+WLlS/ph43mlrDlkb3lkI3jgIHliKrpmaQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUyCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgIuWPquWIl+WNsOW3sue2k+WQiOS9teeahOWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgIuWPquWIl+WNsOWwmuacquWQiOS9teeahOWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTQKK21zZ2lkICJsaXN0IGJyYW5jaGVzIGluIGNvbHVtbnMiCittc2dzdHIgIuS7peWIl+eahOaWueW8j+mhr+ekuuWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTcgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MiBidWlsdGluL25vdGVzLmM6NDE1CisjOiBidWlsdGluL25vdGVzLmM6NDE4IGJ1aWx0aW4vbm90ZXMuYzo1ODEgYnVpbHRpbi9ub3Rlcy5jOjU4NAorIzogYnVpbHRpbi90YWcuYzo0MzMKK21zZ2lkICJvYmplY3QiCittc2dzdHIgIueJqeS7tiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTgKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgIuWPquWIl+WNsOaMh+WQkeipsueJqeS7tueahOWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NjAgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0OCBidWlsdGluL3RhZy5jOjQ0MAorbXNnaWQgInNvcnRpbmcgYW5kIGZpbHRlcmluZyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSIKK21zZ3N0ciAi5o6S5bqP5ZKM6YGO5r++5bGs5pa85aSn5bCP5a+r5LiN5pWP5oSfIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4IGJ1aWx0aW4vdGFnLmM6NDM4CisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozOAorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgIui8uOWHuuagvOW8jyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2ODQgYnVpbHRpbi9jbG9uZS5jOjc4NQorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICJIRUFEIOaykuacieS9jeaWvCAvcmVmcy9oZWFkcyDkuYvkuIvvvIEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzA4Cittc2dpZCAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiDlkowgLS12ZXJib3NlIOS4jeebuOWuuSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MjMgYnVpbHRpbi9icmFuY2guYzo3NzcgYnVpbHRpbi9icmFuY2guYzo3ODYKK21zZ2lkICJicmFuY2ggbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAi5b+F6aCI5o+Q5L6b5YiG5pSv5ZCNIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1MworbXNnaWQgIkNhbm5vdCBnaXZlIGRlc2NyaXB0aW9uIHRvIGRldGFjaGVkIEhFQUQiCittc2dzdHIgIuS4jeiDveWQkeWIhumboumWi+mgreaMh+aomeaPkOS+m+aPj+i/sCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTgKK21zZ2lkICJjYW5ub3QgZWRpdCBkZXNjcmlwdGlvbiBvZiBtb3JlIHRoYW4gb25lIGJyYW5jaCIKK21zZ3N0ciAi5LiN6IO954K65LiA5YCL5Lul5LiK55qE5YiG5pSv57eo6Lyv5o+P6L+wIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIKK21zZ3N0ciAi5YiG5pSvICclcycg5bCa54Sh5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBicmFuY2ggbmFtZWQgJyVzJy4iCittc2dzdHIgIuaykuacieWIhuaUryAnJXMn44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4MworbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIGNvcHkgb3BlcmF0aW9uIgorbXNnc3RyICLngrropIfoo73li5XkvZzmj5DkvpvkuoblpKrlpJrnmoTliIbmlK/lkI0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzkyCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgIueCuumHjeaWsOWRveWQjeWLleS9nOaPkOS+m+S6huWkquWkmueahOWPg+aVuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAi54K66Kit5a6a5paw5LiK5ri45o+Q5L6b5LqG5aSq5aSa55qE5Y+D5pW4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIueEoeazleioreWumiBIRUFEIOeahOS4iua4uOeCuiAlc++8jOWboOeCuiBIRUFEIOaykuacieaMh+WQkeS7u+S9leWIhuaUr+OAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDQgYnVpbHRpbi9icmFuY2guYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAi5rKS5pyJ5q2k5YiG5pSvICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODA4CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLliIbmlK8gJyVzJyDkuI3lrZjlnKgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHVuc2V0IHVwc3RyZWFtIgorbXNnc3RyICLngrrlj5bmtojkuIrmuLjoqK3lrprli5XkvZzmj5DkvpvkuoblpKrlpJrnmoTlj4PmlbgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODI1Cittc2dpZCAiY291bGQgbm90IHVuc2V0IHVwc3RyZWFtIG9mIEhFQUQgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAi54Sh5rOV5Y+W5raIIEhFQUQg55qE5LiK5ri46Kit5a6a5Zug54K65a6D5rKS5pyJ5oyH5ZCR5LiA5YCL5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iCittc2dzdHIgIuWIhuaUryAnJXMnIOaykuacieS4iua4uOioiuaBryIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDEKK21zZ2lkICIiCisiVGhlIC1hLCBhbmQgLXIsIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCB0YWtlIGEgYnJhbmNoIG5hbWUuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHVzZTogLWF8LXIgLS1saXN0IDxwYXR0ZXJuPj8iCittc2dzdHIgIiIKKyInZ2l0IGJyYW5jaCcg55qEIC1hIOWSjCAtciDpgbjpoIXkuI3luLbkuIDlgIvliIbmlK/lkI3jgIJcbiIKKyLmgqjmmK/lkKbmg7PopoHkvb/nlKjvvJotYXwtciAtLWxpc3QgPOaooeW8jz7vvJ8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ1Cittc2dpZCAiIgorInRoZSAnLS1zZXQtdXBzdHJlYW0nIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBQbGVhc2UgdXNlICctLXRyYWNrJyBvciAiCisiJy0tc2V0LXVwc3RyZWFtLXRvJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIuS4jeWGjeaUr+aPtOmBuOmghSAnLS1zZXQtdXBzdHJlYW0n44CC6KuL5L2/55SoICctLXRyYWNrJyDmiJYgJy0tc2V0LXVwc3RyZWFtLXRvJ+OAgiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNSBidWlsdGluL2J1bmRsZS5jOjIzCittc2dpZCAiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxvcHRpb25zPl0gPGZpbGU+IDxnaXQtcmV2LWxpc3QgYXJncz4iCittc2dzdHIgImdpdCBidW5kbGUgY3JlYXRlIFs86YG46aCFPl0gPOaqlOahiD4gPGdpdC1yZXYtbGlzdCDlj4Pmlbg+IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2IGJ1aWx0aW4vYnVuZGxlLmM6MjgKK21zZ2lkICJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmlsZT4iCittc2dzdHIgImdpdCBidW5kbGUgdmVyaWZ5IFs86YG46aCFPl0gPOaqlOahiD4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTcgYnVpbHRpbi9idW5kbGUuYzozMworbXNnaWQgImdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iCittc2dzdHIgImdpdCBidW5kbGUgbGlzdC1oZWFkcyA85qqU5qGIPiBbPOWPg+iAg+WQjeeosT4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE4IGJ1aWx0aW4vYnVuZGxlLmM6MzgKK21zZ2lkICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA85qqU5qGIPiBbPOWPg+iAg+WQjeeosT4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM3NQorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICLkuI3poa/npLrpgLLluqbooagiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzc3Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAi6aGv56S66YCy5bqm6KGoIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM3OQorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICLlnKjnianku7blr6vlhaXpmo7mrrXpoa/npLrpgLLluqbooagiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzgyCittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICLnlbbpgLLluqbooajpoa/npLrmmYLpoZ7kvLzmlrwgLS1hbGwtcHJvZ3Jlc3MiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6OTMKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICLpnIDopoHkuIDlgIvniYjmnKzluqvkvoblu7rnq4vljIXjgIIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTA0Cittc2dpZCAiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiCittc2dzdHIgIuS4jemhr+ekuuWMhSAoYnVuZGxlKSDoqbPntLDos4foqIoiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAiJXMg5Y+v5LulXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICLpnIDopoHkuIDlgIvniYjmnKzluqvkvobop6PljIXjgIIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTY4NgorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgIuips+e0sOi8uOWHuu+8m+W/hemgiOe9ruaWvOWtkOaMh+S7pOS5i+WJjSIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzoxNzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIuacquefpeWtkOaMh+S7pO+8miVzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTk1Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHBhdGg+XSA8b2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDzpoZ7lnos+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD086Lev5b6RPl0gPOeJqeS7tj4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTYKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjE3Cittc2dpZCAib25seSBvbmUgYmF0Y2ggb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQiCittc2dzdHIgIuWPquiDveaMh+WumuS4gOWAi+aJueasoeiZleeQhumBuOmghSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNQorbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiPOmhnuWeiz4g5Y+v5Lul5piv5YW25Lit5LmL5LiA77yaYmxvYuOAgXRyZWXjgIFjb21taXTjgIF0YWciCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzYKK21zZ2lkICJzaG93IG9iamVjdCB0eXBlIgorbXNnc3RyICLpoa/npLrnianku7bpoZ7lnosiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzcKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICLpoa/npLrnianku7blpKflsI8iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzkKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgIueVtuaykuaciemMr+iqpOaZgumboumWi+S4pui/lOWbnumbtiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MAorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICLnvo7op4DlnLDliJfljbDnianku7bnmoTlhaflrrkiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDIKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAi5bCN5pa86LOH5paZ54mp5Lu277yM5bCN5YW25YWn5a655YGa5paH5a2X6L2J5o+bIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ0Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIGZpbHRlcnMgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAi5bCN5pa86LOH5paZ54mp5Lu277yM5bCN5YW25YWn5a655YGa6YGO5r++IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ1IGdpdC1zdWJtb2R1bGUuc2g6MTAwMgorbXNnaWQgImJsb2IiCittc2dzdHIgIuizh+aWmeeJqeS7tiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NgorbXNnaWQgInVzZSBhIHNwZWNpZmljIHBhdGggZm9yIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorbXNnc3RyICLlsI3mlrwgLS10ZXh0Y29udi8tLWZpbHRlcnMg5L2/55So5LiA5YCL54m55a6a55qE6Lev5b6RIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ4Cittc2dpZCAiYWxsb3cgLXMgYW5kIC10IHRvIHdvcmsgd2l0aCBicm9rZW4vY29ycnVwdCBvYmplY3RzIgorbXNnc3RyICLlhYHoqLEgLXMg5ZKMIC10IOWwjeaQjeWjnueahOeJqeS7tueUn+aViCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0OQorbXNnaWQgImJ1ZmZlciAtLWJhdGNoIG91dHB1dCIKK21zZ3N0ciAi57ep6KGdIC0tYmF0Y2gg55qE6Ly45Ye6IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjUxCittc2dpZCAic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLpoa/npLrlvp7mqJnmupbovLjlhaXmj5DkvpvnmoTnianku7bnmoToqIrmga/lkozlhaflrrkiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTUKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIumhr+ekuuW+nuaomea6lui8uOWFpeaPkOS+m+eahOeJqeS7tueahOioiuaBryIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1OQorbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAi6Lef6Zqo5qi55YWn56ym6Jmf6YCj57WQ77yI5ZKMIC0tYmF0Y2gg5oiWIC0tYmF0Y2gtY2hlY2sg5YWx55So77yJIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYxCittc2dpZCAic2hvdyBhbGwgb2JqZWN0cyB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjayIKK21zZ3N0ciAi5L2/55SoIC0tYmF0Y2gg5oiWIC0tYmF0Y2gtY2hlY2sg5Y+D5pW46aGv56S65omA5pyJ54mp5Lu2IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYzCittc2dpZCAiZG8gbm90IG9yZGVyIC0tYmF0Y2gtYWxsLW9iamVjdHMgb3V0cHV0IgorbXNnc3RyICLkuI3opoHlsI0gLS1iYXRjaC1hbGwtb2JqZWN0cyDnmoTovLjlh7rmjpLluo8iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjEzCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA85bGs5oCnPi4uLl0gWy0tXSA86Lev5b6R5ZCNPi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTQKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA85bGs5oCnPi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIxCittc2dpZCAicmVwb3J0IGFsbCBhdHRyaWJ1dGVzIHNldCBvbiBmaWxlIgorbXNnc3RyICLloLHlkYroqK3lrprlnKjmqpTmoYjkuIrnmoTmiYDmnInlsazmgKciCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIyCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIuWPquS9v+eUqOe0ouW8leS4reeahCAuZ2l0YXR0cmlidXRlcyIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNSBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAyCittc2dpZCAicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iCittc2dzdHIgIuW+nuaomea6lui8uOWFpeiugOWHuuaqlOahiOWQjSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjUgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNworbXNnaWQgInRlcm1pbmF0ZSBpbnB1dCBhbmQgb3V0cHV0IHJlY29yZHMgYnkgYSBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICLovLjlhaXlkozovLjlh7rnmoTntIDpjITkvb/nlKggTlVMIOWtl+WFg+e1gue1kCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMSBidWlsdGluL2NoZWNrb3V0LmM6MTQ2NCBidWlsdGluL2djLmM6NTM3CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk5Cittc2dpZCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLkuI3poa/npLrpgLLluqbloLHlkYoiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjkKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBpbnB1dCBwYXRocyIKK21zZ3N0ciAi6aGv56S65pyq56ym5ZCI55qE6Ly45YWl6Lev5b6RIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjMxCittc2dpZCAiaWdub3JlIGluZGV4IHdoZW4gY2hlY2tpbmciCittc2dzdHIgIuaqouafpeaZguW/veeVpee0ouW8lSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICJjYW5ub3Qgc3BlY2lmeSBwYXRobmFtZXMgd2l0aCAtLXN0ZGluIgorbXNnc3RyICLkuI3og73lkIzmmYLmjIflrprot6/lvpHlj4ogLS1zdGRpbiDlj4PmlbgiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY2Cittc2dpZCAiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iCittc2dzdHIgIi16IOmcgOimgeWSjCAtLXN0ZGluIOWPg+aVuOWFseeUqOaJjeacieaEj+e+qSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjgKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZCIKK21zZ3N0ciAi5pyq5oyH5a6a6Lev5b6RIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MgorbXNnaWQgIi0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorbXNnc3RyICLlj4PmlbggLS1xdWlldCDlj6rlnKjmj5DkvpvkuIDlgIvot6/lvpHlkI3mmYLmnInmlYgiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc0Cittc2dpZCAiY2Fubm90IGhhdmUgYm90aCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UiCittc2dzdHIgIuS4jeiDveWQjOaZguaPkOS+myAtLXF1aWV0IOWSjCAtLXZlcmJvc2Ug5Y+D5pW4IgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3NworbXNnaWQgIi0tbm9uLW1hdGNoaW5nIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXZlcmJvc2UiCittc2dzdHIgIi0tbm9uLW1hdGNoaW5nIOmBuOmgheWPquWcqOS9v+eUqCAtLXZlcmJvc2Ug5pmC5pyJ5pWIIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo5Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stbWFpbG1hcCBbPOmBuOmghT5dIDzoga/nuavkvY3lnYA+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoxNAorbXNnaWQgImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICLpgoTlvp7mqJnmupbovLjlhaXoroDlj5boga/nuavkvY3lnYAiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb250YWN0OiAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q6IGv57mr5L2N5Z2A77yaJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjQ4Cittc2dpZCAibm8gY29udGFjdHMgc3BlY2lmaWVkIgorbXNnc3RyICLmnKrmjIflrproga/nuavkvY3lnYAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMzEKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFs86YG46aCFPl0gWy0tXSBbPOaqlOahiD4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTQ4Cittc2dpZCAic3RhZ2Ugc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMyBvciBhbGwiCittc2dzdHIgIue0ouW8leWAvOaHieipsuWPluWAvCAxIOWIsCAzIOaIluiAhSBhbGwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjQKK21zZ2lkICJjaGVjayBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAi57C95Ye657Si5byV5Y2A55qE5omA5pyJ5qqU5qGIIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY1Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICLlvLfliLbopobok4vnj77mnInnmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjcKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICLlrZjlnKjmiJbkuI3lnKjntKLlvJXkuK3nmoTmqpTmoYjpg73mspLmnInorablkYoiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjkKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgIuS4jeewveWHuuaWsOaqlOahiCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MQorbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICLmm7TmlrDntKLlvJXkuK3mqpTmoYjnmoTni4DmhYvoqIrmga8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzUKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIuW+nuaomea6lui8uOWFpeiugOWPlui3r+W+keWIl+ihqCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NworbXNnaWQgIndyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcyIKK21zZ3N0ciAi5bCH5YWn5a655a+r5YWl5pqr5a2Y5qqUIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc4IGJ1aWx0aW4vY29sdW1uLmM6MzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAzCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxMSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwOQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY3MgorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAi5a2X5LiyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc5Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAi5Zyo5bu656uL5qqU5qGI5pmC77yM5Zyo5YmN6Z2i5Yqg5LiKIDzlrZfkuLI+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTgxCittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgIuW+nuaMh+Wumuaaq+WtmOWNgOS4reaLt+WHuuaqlOahiCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMxCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIDxicmFuY2g+IgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzzpgbjpoIU+XSA85YiG5pSvPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMyCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzzpgbjpoIU+XSBbPOWIhuaUrz5dIC0tIDzmqpTmoYg+Li4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzcKK21zZ2lkICJnaXQgc3dpdGNoIFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0iCittc2dzdHIgImdpdCBzd2l0Y2ggWzzpgbjpoIU+XSBbPOWIhuaUrz5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIKK21zZ2lkICJnaXQgcmVzdG9yZSBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PGJyYW5jaD5dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc3RvcmUgWzzpgbjpoIU+XSBbLS1zb3VyY2U9POWIhuaUrz5dIDzmqpTmoYg+Li4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc1IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgIui3r+W+kSAnJXMnIOaykuacieaIkeWAkeeahOeJiOacrCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NyBidWlsdGluL2NoZWNrb3V0LmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIui3r+W+kSAnJXMnIOaykuacieS7luWAkeeahOeJiOacrCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLot6/lvpEgJyVzJyDmspLmnInlhajpg6jlv4XpnIDnmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLot6/lvpEgJyVzJyDmspLmnInlv4XpnIDnmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgInBhdGggJyVzJ++8mueEoeazleWQiOS9tSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAi54Sh5rOV54K6ICclcycg5paw5aKe5ZCI5L2157WQ5p6cIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAi6YeN5paw5bu656uL5LqGICVkIOWAi+WQiOS9teihneeqgSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkICVkIHBhdGggZnJvbSAlcyIKK21zZ2lkX3BsdXJhbCAiVXBkYXRlZCAlZCBwYXRocyBmcm9tICVzIgorbXNnc3RyWzBdICLlvp4gJTIkcyDmm7TmlrDkuoYgJTEkZCDlgIvot6/lvpEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyWzBdICLlvp7ntKLlvJXljYDmm7TmlrDkuoYgJWQg5YCL6Lev5b6RIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDEyIGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTUgYnVpbHRpbi9jaGVja291dC5jOjQxOAorIzogYnVpbHRpbi9jaGVja291dC5jOjQyMgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiCittc2dzdHIgIiclcycg5LiN6IO95Zyo5pu05paw6Lev5b6R5pmC5L2/55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDI1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICInJXMnIOS4jeiDveWSjCAlcyDlkIzmmYLkvb/nlKgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIgorbXNnc3RyICLkuI3og73lkIzmmYLmm7TmlrDot6/lvpHkuKbliIfmj5vliLDliIbmlK8nJXMn44CCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5laXRoZXIgJyVzJyBvciAnJXMnIGlzIHNwZWNpZmllZCIKK21zZ3N0ciAiJyVzJyDmiJYgJyVzJyDpg73mspLmnInmjIflrpoiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtdXN0IGJlIHVzZWQgd2hlbiAnJXMnIGlzIG5vdCBzcGVjaWZpZWQiCittc2dzdHIgIuacquaMh+WumiAnJTIkcycg5pmC77yM5b+F6aCI5L2/55SoICclMSRzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0NSBidWlsdGluL2NoZWNrb3V0LmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgb3IgJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICInJXMnIOaIliAnJXMnIOS4jeiDveWSjCAlcyDkuIDotbfkvb/nlKgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MDkgYnVpbHRpbi9jaGVja291dC5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgaXMgdW5tZXJnZWQiCittc2dzdHIgIui3r+W+kSAnJXMnIOacquWQiOS9tSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY4NCBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjEwNgorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICLmgqjpnIDopoHlhYjop6Pmsbrnm67liY3ntKLlvJXnmoTooZ3nqoEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBjb250aW51ZSB3aXRoIHN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyLkuI3og73nubznuozvvIzkuIvliJfmqpTmoYjmnInmmqvlrZjnmoTkv67mlLnvvJpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAi5LiN6IO95bCNICclcycg5Z+36KGMIHJlZmxvZyDli5XkvZzvvJolc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODc5Cittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIkhFQUQg55uu5YmN5L2N5pa8IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODgzIGJ1aWx0aW4vY2xvbmUuYzo3MTcKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIEhFQUQiCittc2dzdHIgIuS4jeiDveabtOaWsCBIRUFEIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIumHjeioreWIhuaUryAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSBvbiAnJXMnXG4iCittc2dzdHIgIuW3sue2k+S9jeaWvCAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIuWIh+aPm+S4pumHjeioreWIhuaUryAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTYgYnVpbHRpbi9jaGVja291dC5jOjEzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi5YiH5o+b5Yiw5LiA5YCL5paw5YiG5pSvICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLliIfmj5vliLDliIbmlK8gJyVzJ1xuIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIC4uLiBhbmQgJWQgbW9yZS5cbiIKK21zZ3N0ciAiIC4uLiDlj4rlhbblroMgJWQg5YCL44CCXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKKyLorablkYrvvJrmgqjmraPkuJ/kuIsgJWQg5YCL5o+Q5Lqk77yM5pyq5ZKM5Lu75L2V5YiG5pSv6Zec6IGv77yaXG4iCisiXG4iCisiJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCBpdCBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnaWRfcGx1cmFsICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCB0aGVtIGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dzdHJbMF0gIiIKKyLlpoLmnpzmgqjmg7PopoHpgI/pgY7lu7rnq4vmlrDliIbmlK/lhLLlrZjlroPvvIzpgJnlj6/og73mmK/kuIDlgIvlpb3mmYLlgJnjgIJcbiIKKyLlpoLkuIvli5XkvZzvvJpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA85paw5YiG5pSv5ZCNPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwOQorbXNnaWQgImludGVybmFsIGVycm9yIGluIHJldmlzaW9uIHdhbGsiCittc2dzdHIgIuWcqOeJiOacrOmBjeatt+aZgumBh+WIsOWFp+mDqOmMr+iqpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTMKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAi5LmL5YmN55qEIEhFQUQg5L2N572u5pivIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA1MyBidWlsdGluL2NoZWNrb3V0LmM6MTMxNQorbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIuaCqOS9jeaWvOS4gOWAi+WwmuacquWIneWni+WMlueahOWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgY291bGQgYmUgYm90aCBhIGxvY2FsIGZpbGUgYW5kIGEgdHJhY2tpbmcgYnJhbmNoLlxuIgorIlBsZWFzZSB1c2UgLS0gKGFuZCBvcHRpb25hbGx5IC0tbm8tZ3Vlc3MpIHRvIGRpc2FtYmlndWF0ZSIKK21zZ3N0ciAiIgorIiclcycg5pei5Y+v5Lul5piv5LiA5YCL5pys5qmf5qqU5qGI77yM5Lmf5Y+v5Lul5piv5LiA5YCL6L+96Lmk5YiG5pSv44CCXG4iCisi6KuL5L2/55SoIC0t77yI5ZKM5Y+v6YG455qEIC0tbm8tZ3Vlc3PvvInkvobmtojpmaTmrafnvqkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM1Cittc2dpZCAiIgorIklmIHlvdSBtZWFudCB0byBjaGVjayBvdXQgYSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIG9uLCBlLmcuICdvcmlnaW4nLFxuIgorInlvdSBjYW4gZG8gc28gYnkgZnVsbHkgcXVhbGlmeWluZyB0aGUgbmFtZSB3aXRoIHRoZSAtLXRyYWNrIG9wdGlvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luLzxuYW1lPlxuIgorIlxuIgorIklmIHlvdSdkIGxpa2UgdG8gYWx3YXlzIGhhdmUgY2hlY2tvdXRzIG9mIGFuIGFtYmlndW91cyA8bmFtZT4gcHJlZmVyXG4iCisib25lIHJlbW90ZSwgZS5nLiB0aGUgJ29yaWdpbicgcmVtb3RlLCBjb25zaWRlciBzZXR0aW5nXG4iCisiY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW4gaW4geW91ciBjb25maWcuIgorbXNnc3RyICIiCisi5aaC5p6c5oKo5oOz6KaB57C95Ye65LiA5YCL6YGg56uv6L+96Lmk5YiG5pSv77yM5L6L5aaCICdvcmlnaW4n77yM5oKo5Y+v5LulXG4iCisi5L2/55SoIC0tdHJhY2sg6YG46aCF5a+r5Ye65YWo5ZCN77yaXG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtZT5cbiIKKyJcbiIKKyLlpoLmnpzmgqjnuL3mmK/llpzmraHkvb/nlKjmqKHns4rnmoTnsKHnn63liIbmlK/lkI0gPG5hbWU+77yM6ICM5LiN5Zac5q2h5aaCICdvcmlnaW4nIOeahOmBoOerr1xuIgorIueJiOacrOW6q+WQje+8jOWPr+S7peWcqOioreWumuS4reioreWumiBjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbuOAgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtYXRjaGVkIG11bHRpcGxlICglZCkgcmVtb3RlIHRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICInJXMnIOespuWQiOWkmuWAiyAoJWQpIOmBoOerr+i/vei5pOWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMTEKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQiCittc2dzdHIgIumgkOacn+WPquacieS4gOWAi+W8leeUqCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iCittc2dzdHIgIuaHieWPquacieS4gOWAi+W8leeUqO+8jOWNu+e1puWHuuS6hiAlZCDlgIsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjc0IGJ1aWx0aW4vd29ya3RyZWUuYzoyODMgYnVpbHRpbi93b3JrdHJlZS5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIueEoeaViOW8leeUqO+8miVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI4NyBidWlsdGluL2NoZWNrb3V0LmM6MTY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiCittc2dzdHIgIuW8leeUqOS4jeaYr+S4gOWAi+aoue+8miVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IHRhZyAnJXMnIgorbXNnc3RyICLmnJ/mnJvkuIDlgIvliIbmlK/vvIzlvpfliLDmqJnnsaQgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCByZW1vdGUgYnJhbmNoICclcyciCittc2dzdHIgIuacn+acm+S4gOWAi+WIhuaUr++8jOW+l+WIsOmBoOerr+WIhuaUryAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNyBidWlsdGluL2NoZWNrb3V0LmM6MTM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290ICclcyciCittc2dzdHIgIuacn+acm+S4gOWAi+WIhuaUr++8jOW+l+WIsCAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IGNvbW1pdCAnJXMnIgorbXNnc3RyICLmnJ/mnJvkuIDlgIvliIbmlK/vvIzlvpfliLDmj5DkuqQgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNTYKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgbWVyZ2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IG1lcmdlIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIuS4jeiDveWcqOWQiOS9teaZguWIh+aPm+WIhuaUr1xuIgorIuiAg+aFruS9v+eUqCBcImdpdCBtZXJnZSAtLXF1aXRcIiDmiJYgXCJnaXQgd29ya3RyZWUgYWRkXCLjgIIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzYwCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvblxuIgorIkNvbnNpZGVyIFwiZ2l0IGFtIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIuS4jeiDveWcqCBhbSDlt6XkvZzpmo7mrrXmnJ/plpPliIfmj5vliIbmlK9cbiIKKyLogIPmha7kvb/nlKggXCJnaXQgYW0gLS1xdWl0XCIg5oiWIFwiZ2l0IHdvcmt0cmVlIGFkZFwi44CCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2NAorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSByZWJhc2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJlYmFzZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyLkuI3og73lnKjph43lrprln7rlupXmmYLliIfmj5vliIbmlK9cbiIKKyLogIPmha7kvb/nlKggXCJnaXQgcmViYXNlIC0tcXVpdFwiIOaIliBcImdpdCB3b3JrdHJlZSBhZGRcIuOAgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjgKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgY2hlcnJ5LXBpY2tpbmdcbiIKKyJDb25zaWRlciBcImdpdCBjaGVycnktcGljayAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyLkuI3og73lnKjmj4DpgbjmmYLliIfmj5vliIbmlK9cbiIKKyLogIPmha7kvb/nlKggXCJnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0XCIg5oiWIFwiZ2l0IHdvcmt0cmVlIGFkZFwi44CCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM3MgorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSByZXZlcnRpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZXZlcnQgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisi5LiN6IO95Zyo6YKE5Y6f5pmC5YiH5o+b5YiG5pSvXG4iCisi6ICD5oWu5L2/55SoIFwiZ2l0IHJldmVydCAtLXF1aXRcIiDmiJYgXCJnaXQgd29ya3RyZWUgYWRkXCLjgIIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzc2Cittc2dpZCAieW91IGFyZSBzd2l0Y2hpbmcgYnJhbmNoIHdoaWxlIGJpc2VjdGluZyIKK21zZ3N0ciAi5oKo5Zyo5Z+36KGM5LqM5YiG5bCL5om+5pmC5YiH5o+b5YiG5pSvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4MworbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICLot6/lvpHkuI3og73lkozliIfmj5vliIbmlK/lkIzmmYLkvb/nlKgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzg2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzkwIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIiclcycg5LiN6IO95ZKM5YiH5o+b5YiG5pSv5ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5OCBidWlsdGluL2NoZWNrb3V0LmM6MTQwMSBidWlsdGluL2NoZWNrb3V0LmM6MTQwNAorIzogYnVpbHRpbi9jaGVja291dC5jOjE0MDkgYnVpbHRpbi9jaGVja291dC5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIiclcycg5LiN6IO95ZKMICclcycg5ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQxMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCB0YWtlIDxzdGFydC1wb2ludD4iCittc2dzdHIgIiclcycg5LiN5bi2IDzotbflp4vpu54+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIKK21zZ3N0ciAi5LiN6IO95YiH5o+b5YiG5pSv5Yiw5LiA5YCL6Z2e5o+Q5LqkICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDI2Cittc2dpZCAibWlzc2luZyBicmFuY2ggb3IgY29tbWl0IGFyZ3VtZW50IgorbXNnc3RyICLnvLrlsJHliIbmlK/miJbmj5DkuqTlj4PmlbgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDY4IGJ1aWx0aW4vY2xvbmUuYzo5MSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjcyCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNSBidWlsdGluL2ZldGNoLmM6MTY3IGJ1aWx0aW4vbWVyZ2UuYzoyODYKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI3IGJ1aWx0aW4vcHVsbC5jOjExOCBidWlsdGluL3B1c2guYzo1NjMKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc0Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLlvLfliLbpoa/npLrpgLLluqbloLHlkYoiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDY5Cittc2dpZCAicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giCittc2dzdHIgIuWSjOaWsOeahOWIhuaUr+Wft+ihjOS4ieaWueWQiOS9tSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NzAgYnVpbHRpbi9sb2cuYzoxNjkwIHBhcnNlLW9wdGlvbnMuaDozMjIKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAi6aKo5qC8IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ3MQorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgIuihneeqgei8uOWHuumiqOagvO+8iG1lcmdlIOaIliBkaWZmM++8iSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODMgYnVpbHRpbi93b3JrdHJlZS5jOjQ5NgorbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAiSEVBRCDlvp7mjIflrprnmoTmj5DkuqTliIbpm6IiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg0Cittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgIueCuuaWsOeahOWIhuaUr+ioreWumuS4iua4uOioiuaBryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODYKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAi5by35Yi257C95Ye677yI5o2o5qOE5pys5qmf5L+u5pS577yJIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4OAorbXNnaWQgIm5ldy1icmFuY2giCittc2dzdHIgIuaWsOWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODgKK21zZ2lkICJuZXcgdW5wYXJlbnRlZCBicmFuY2giCittc2dzdHIgIuaWsOeahOaykuacieeItuaPkOS6pOeahOWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0OTAgYnVpbHRpbi9tZXJnZS5jOjI4OQorbXNnaWQgInVwZGF0ZSBpZ25vcmVkIGZpbGVzIChkZWZhdWx0KSIKK21zZ3N0ciAi5pu05paw5b+955Wl55qE5qqU5qGI77yI6aCQ6Kit77yJIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ5MworbXNnaWQgImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIKK21zZ3N0ciAi5LiN5qqi5p+l5oyH5a6a55qE5byV55So5piv5ZCm6KKr5YW25LuW5bel5L2c5Y2A5omA5Y2g55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUwNgorbXNnaWQgImNoZWNrb3V0IG91ciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAi5bCN5bCa5pyq5ZCI5L2155qE5qqU5qGI57C95Ye65oiR5YCR55qE54mI5pysIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUwOQorbXNnaWQgImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICLlsI3lsJrmnKrlkIjkvbXnmoTmqpTmoYjnsL3lh7rku5blgJHnmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTEzCittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICLlsI3ot6/lvpHkuI3lgZrnqIDnlo/nsL3lh7rnmoTpmZDliLYiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTY1Cittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYuOAgS1CIOWSjCAtLW9ycGhhbiDmmK/kupLmlqXnmoQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTY4Cittc2dpZCAiLXAgYW5kIC0tb3ZlcmxheSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItcCDlkowgLS1vdmVybGF5IOS6kuaWpSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2MDUKK21zZ2lkICItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIi0tdHJhY2sg6ZyA6KaB5LiA5YCL5YiG5pSv5ZCNIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYxMAorbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAi57y65bCR5YiG5pSv5ZCN77yM5ZiX6KmmIC1iIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAlcyIKK21zZ3N0ciAi54Sh5rOV6Kej5p6QICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY1OAorbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICLnhKHmlYjnmoTot6/lvpHopo/moLwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIiclcycg5LiN5piv5LiA5YCL5o+Q5Lqk77yM5LiN6IO95Z+65pa85a6D5bu656uL5YiG5pSvICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V077yaLS1kZXRhY2gg5LiN6IO95o6l5pS26Lev5b6R5Y+D5pW4ICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjc4Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1kZXRhY2giCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIOiIhyAtLWRldGFjaCDkuI3nm7jlrrkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjgxIGJ1aWx0aW4vcmVzZXQuYzozMjQgYnVpbHRpbi9zdGFzaC5jOjE1MDYKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXBhdGNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSDoiIcgLS1wYXRjaCDkuI3nm7jlrrkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjkyCittc2dpZCAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiZ2l0IGNoZWNrb3V077ya5Zyo5b6e57Si5byV57C95Ye65pmC77yMLS1vdXJzLy0tdGhlaXJz44CBLS1mb3JjZSDlkowgLS1tZXJnZSDkuI3nm7jlrrnjgIIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjk3Cittc2dpZCAieW91IG11c3Qgc3BlY2lmeSBwYXRoKHMpIHRvIHJlc3RvcmUiCittc2dzdHIgIuaCqOW/hemgiOaMh+WumuS4gOWAi+imgeW+qeWOn+eahOi3r+W+kSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjMgYnVpbHRpbi9jaGVja291dC5jOjE3MjUgYnVpbHRpbi9jaGVja291dC5jOjE3NzQKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzc2IGJ1aWx0aW4vY2xvbmUuYzoxMjEgYnVpbHRpbi9yZW1vdGUuYzoxNzAKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcyIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTIgYnVpbHRpbi93b3JrdHJlZS5jOjQ5NAorbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAi5YiG5pSvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyNAorbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICLlu7rnq4vkuKbnsL3lh7rkuIDlgIvmlrDnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI2Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAi5bu656uLL+mHjeioreS4puewveWHuuS4gOWAi+WIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjcKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLngrrmlrDnmoTliIbmlK/lu7rnq4vlvJXnlKjml6XoqowiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzI5Cittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPicgKGRlZmF1bHQpIgorbXNnc3RyICLkuozmrKHnjJzmuKwgJ2dpdCBjaGVja291dCA854Sh5q2k5YiG5pSvPifvvIjpoJDoqK3vvIkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzMwCittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSAoZGVmYXVsdCkiCittc2dzdHIgIuS9v+eUqOeWiuWKoOaooeW8j++8iOmgkOiore+8iSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzUKK21zZ2lkICJjcmVhdGUgYW5kIHN3aXRjaCB0byBhIG5ldyBicmFuY2giCittc2dzdHIgIuW7uueri+S4puWIh+aPm+S4gOWAi+aWsOWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzcKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIHN3aXRjaCB0byBhIGJyYW5jaCIKK21zZ3N0ciAi5bu656uLL+mHjeioreS4puWIh+aPm+S4gOWAi+WIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzkKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBzd2l0Y2ggPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgIuS6jOasoeeMnOa4rCAnZ2l0IHN3aXRjaCA854Sh5q2k5YiG5pSvPiciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzgxCittc2dpZCAidGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zIgorbXNnc3RyICLmjajmo4TmnKzmqZ/kv67mlLkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODEzCittc2dpZCAid2hpY2ggdHJlZS1pc2ggdG8gY2hlY2tvdXQgZnJvbSIKK21zZ3N0ciAi6KaB57C95Ye65ZOq5LiA5YCL5qi5IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxNQorbXNnaWQgInJlc3RvcmUgdGhlIGluZGV4IgorbXNnc3RyICLlvqnljp/ntKLlvJUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODE3Cittc2dpZCAicmVzdG9yZSB0aGUgd29ya2luZyB0cmVlIChkZWZhdWx0KSIKK21zZ3N0ciAi5b6p5Y6f5bel5L2c5Y2A77yI6aCQ6Kit77yJIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxOQorbXNnaWQgImlnbm9yZSB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICLlv73nlaXmnKrlkIjkvbXmop3nm64iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODIwCittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSIKK21zZ3N0ciAi5L2/55So55aK5Yqg5qih5byPIgorCisjOiBidWlsdGluL2NsZWFuLmM6MjgKK21zZ2lkICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPOaooeW8jz5dIFsteCB8IC1YXSBbLS1dIDzot6/lvpE+Li4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAi5q2j5Yiq6ZmkICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMworIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAi5bCH5Yiq6ZmkICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIuW/veeVpeeJiOacrOW6qyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIuWwh+W/veeVpeeJiOacrOW6qyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAi5Yiq6ZmkICVzIOWkseaVlyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsc3RhdCAlc1xuIgorbXNnc3RyICLkuI3og73lsI0gJXMg5ZG85Y+rIGxzdGF0XG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZ1xuIgorbXNnc3RyICIiCisi5Y2U5Yqp77yaXG4iCisiMSAgICAgICAgICAtIOmAj+mBjue3qOiZn+mBuOaTh+S4gOWAi+mBuOmghVxuIgorImZvbyAgICAgICAgLSDpgI/pgY7llK/kuIDliY3ntrTpgbjmk4fkuIDlgIvpgbjpoIVcbiIKKyIgICAgICAgICAgIC0g77yI56m677yJ5LuA6bq85Lmf5LiN6YG45pOHXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbVxuIgorIjMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtc1xuIgorIjItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyItLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zXG4iCisiKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXNcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nXG4iCittc2dzdHIgIiIKKyLljZTliqnvvJpcbiIKKyIxICAgICAgICAgIC0g6YG45pOH5LiA5YCL6YG46aCFXG4iCisiMy01ICAgICAgICAtIOmBuOaTh+S4gOWAi+evhOWcjeWFp+eahOaJgOaciemBuOmghVxuIgorIjItMyw2LTkgICAgLSDpgbjmk4flpJrlgIvnr4TlnI3lhafnmoTmiYDmnInpgbjpoIVcbiIKKyJmb28gICAgICAgIC0g6YCP6YGO5ZSv5LiA5YmN57a06YG45pOH5LiA5YCL6YG46aCFXG4iCisiLS4uLiAgICAgICAtIOWPjemBuOeJueWumueahOmBuOmghVxuIgorIiogICAgICAgICAgLSDpgbjmk4fmiYDmnInpgbjpoIVcbiIKKyIgICAgICAgICAgIC0g77yI56m677yJ57WQ5p2f6YG45pOHXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTc1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT9cbiIKK21zZ3N0ciAi5Zev77yIJXPvvInvvJ9cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnB1dCBpZ25vcmUgcGF0dGVybnM+PiAiCittc2dzdHIgIui8uOWFpeevhOacrOS7peaOkumZpOaineebrj4+ICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBDYW5ub3QgZmluZCBpdGVtcyBtYXRjaGVkIGJ5OiAlcyIKK21zZ3N0ciAi6K2m5ZGK77ya54Sh5rOV5om+5Yiw5ZKMICVzIOespuWQiOeahOaineebriIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcyMQorbXNnaWQgIlNlbGVjdCBpdGVtcyB0byBkZWxldGUiCittc2dzdHIgIumBuOaTh+imgeWIqumZpOeahOaineebriIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBrZWVwIFt5L05dIGFzIGlzCisjOiBidWlsdGluL2NsZWFuLmM6NzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92ZSAlcyBbeS9OXT8gIgorbXNnc3RyICLliKrpmaQgJXMgW3kvTl3vvJ8iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3OTUKK21zZ2lkICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKK21zZ3N0ciAiIgorImNsZWFuICAgICAgICAgICAgICAgLSDplovlp4vmuIXnkIZcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0g6YCP6YGO56+E5pys5o6S6Zmk6KaB5Yiq6Zmk55qE5qKd55uuXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIOmAj+mBjuaVuOWtl+mBuOaTh+imgeWIqumZpOeahOaineebrlxuIgorImFzayBlYWNoICAgICAgICAgICAgLSDph53lsI3liKrpmaTpgJDkuIDoqaLllY/vvIjlsLHlg48gXCJybSAtaVwi77yJXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIOWBnOatouWIqumZpOS4pumboumWi1xuIgorImhlbHAgICAgICAgICAgICAgICAgLSDpoa/npLrmnKzljZTliqlcbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0g6aGv56S65aaC5L2V5Zyo5o+Q56S656ym5LiL6YG45pOH55qE5Y2U5YqpIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODMxCittc2dpZCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbToiCittc2dpZF9wbHVyYWwgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW1zOiIKK21zZ3N0clswXSAi5bCH5Yiq6Zmk5aaC5LiL5qKd55uu77yaIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODQ3Cittc2dpZCAiTm8gbW9yZSBmaWxlcyB0byBjbGVhbiwgZXhpdGluZy4iCittc2dzdHIgIuaykuacieimgea4heeQhueahOaqlOahiO+8jOmboumWi+OAgiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwOQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICLkuI3liJfljbDliKrpmaTmqpTmoYjnmoTlkI3nqLEiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTEKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAi5by35Yi2IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTEyCittc2dpZCAiaW50ZXJhY3RpdmUgY2xlYW5pbmciCittc2dzdHIgIuS6kuWLleW8j+a4hemZpCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAi5Yiq6Zmk5pW05YCL55uu6YyEIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjIgYnVpbHRpbi9kZXNjcmliZS5jOjU2NAorIzogYnVpbHRpbi9ncmVwLmM6ODg5IGJ1aWx0aW4vbG9nLmM6MTc3IGJ1aWx0aW4vbG9nLmM6MTc5CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjYgYnVpbHRpbi9uYW1lLXJldi5jOjUyOAorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgIuaooeW8jyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNgorbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICLmlrDlop4gPOaooeW8jz4g5Yiw5b+955Wl6KaP5YmHIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE3Cittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAi5Lmf5Yiq6Zmk5b+955Wl55qE5qqU5qGIIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE5Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAi5Y+q5Yiq6Zmk5b+955Wl55qE5qqU5qGIIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTM3Cittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIteCDlkowgLVgg5LiN6IO95ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTQxCittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBzZXQgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgcmVmdXNpbmcgdG8gIgorImNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIOioreWumueCuiB0cnVlIOS4lOacquaPkOS+myAtaeOAgS1uIOaIliAtZiDpgbjpoIXvvIzmi5LntZXln7fooYzmuIXnkIbli5XkvZwiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDQKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKyJyZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSDpoJDoqK3ngrogdHJ1ZSDkuJTmnKrmj5DkvpsgLWnjgIEtbiDmiJYgLWYg6YG46aCF77yM5ouS57WV5Z+36KGM5riF55CG5YuV5L2cIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDUKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs86YG46aCFPl0gWy0tXSA854mI5pys5bqrPiBbPOi3r+W+kT5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAi5LiN5bu656uL5LiA5YCL57C95Ye6IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQgYnVpbHRpbi9jbG9uZS5jOjk2IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4OQorbXNnaWQgImNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5bu656uL5LiA5YCL57SU54mI5pys5bqrIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgKK21zZ2lkICJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIKK21zZ3N0ciAi5bu656uL5LiA5YCL6Y+h5YOP54mI5pys5bqr77yI5Lmf5piv57SU54mI5pys5bqr77yJIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwCittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIuW+nuacrOapn+eJiOacrOW6q+ikh+ijvSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMgorbXNnaWQgImRvbid0IHVzZSBsb2NhbCBoYXJkbGlua3MsIGFsd2F5cyBjb3B5IgorbXNnc3RyICLkuI3kvb/nlKjmnKzmqZ/noazpgKPntZDvvIzlp4vntYLopIfoo70iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAi6Kit5a6a54K65YWx5Lqr54mI5pys5bqrIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAicGF0aHNwZWMiCittc2dzdHIgIui3r+W+keimj+agvCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgIuWcqOikh+ijveaZguWIneWni+WMluWtkOaooee1hCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGNsb25lZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAi5Lim55m86KSH6KO955qE5a2Q5qih57WE55qE5pW46YePIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTExIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NgorbXNnaWQgInRlbXBsYXRlLWRpcmVjdG9yeSIKK21zZ3N0ciAi56+E5pys55uu6YyEIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEyIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NworbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgIuevhOacrOebrumMhOWwh+iiq+S9v+eUqCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNCBidWlsdGluL2Nsb25lLmM6MTE2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA3CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMgorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICLlj4PogIPniYjmnKzluqsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE0Cittc2dpZCAidXNlIC0tcmVmZXJlbmNlIG9ubHkgd2hpbGUgY2xvbmluZyIKK21zZ3N0ciAi5YOF5Zyo6KSH6KO95pmC5Y+D6ICDIC0tcmVmZXJlbmNlIOaMh+WQkeeahOacrOapn+eJiOacrOW6qyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOSBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ2CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDEgYnVpbHRpbi9yZXBhY2suYzozMjcKK21zZ2lkICJuYW1lIgorbXNnc3RyICLlkI3nqLEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjAKK21zZ2lkICJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iCittc2dzdHIgIuS9v+eUqCA85ZCN56ixPiDogIzkuI3mmK8gJ29yaWdpbicg5Y676L+96Lmk5LiK5ri4IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIyCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAi57C95Ye6IDzliIbmlK8+IOiAjOS4jeaYr+mBoOerryBIRUFEIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0Cittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAi6YGg56uvIGdpdC11cGxvYWQtcGFjayDot6/lvpEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjUgYnVpbHRpbi9mZXRjaC5jOjE2OCBidWlsdGluL2dyZXAuYzo4MjgKKyM6IGJ1aWx0aW4vcHVsbC5jOjIwNworbXNnaWQgImRlcHRoIgorbXNnc3RyICLmt7HluqYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjYKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoYXQgZGVwdGgiCittc2dzdHIgIuW7uueri+S4gOWAi+aMh+Wumua3seW6pueahOa3uuikh+ijvSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNyBidWlsdGluL2ZldGNoLmM6MTcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzMAorbXNnaWQgInRpbWUiCittc2dzdHIgIuaZgumWkyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOAorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgc2luY2UgYSBzcGVjaWZpYyB0aW1lIgorbXNnc3RyICLlvp7kuIDlgIvnibnlrprmmYLplpPlu7rnq4vkuIDlgIvmt7ropIfoo70iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjkgYnVpbHRpbi9mZXRjaC5jOjE3MiBidWlsdGluL2ZldGNoLmM6MTk1CisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODAKK21zZ2lkICJyZXZpc2lvbiIKK21zZ3N0ciAi54mI5pysIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMwIGJ1aWx0aW4vZmV0Y2guYzoxNzMKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lLCBleGNsdWRpbmcgcmV2IgorbXNnc3RyICLmt7HljJbmt7ropIfoo73nmoTmrbflj7LvvIzpmaTkuobnibnlrprniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTI4Cittc2dpZCAiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIgorbXNnc3RyICLlj6ropIfoo73kuIDlgIvliIbmlK/jgIFIRUFEIOaIliAtLWJyYW5jaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNAorbXNnaWQgImRvbid0IGNsb25lIGFueSB0YWdzLCBhbmQgbWFrZSBsYXRlciBmZXRjaGVzIG5vdCB0byBmb2xsb3cgdGhlbSIKK21zZ3N0ciAi5LiN6KaB6KSH6KO95Lu75L2V5qiZ57Gk77yM5Lim5LiU5b6M57qM5Y+W5b6X5YuV5L2c5Lmf5LiN5LiL6LyJ5a6D5YCRIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM2Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgYmUgc2hhbGxvdyIKK21zZ3N0ciAi5a2Q5qih57WE5bCH5Lul5re65LiL6LyJ5qih5byP6KSH6KO9IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiZ2l055uu6YyEIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM4IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NgorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgImdpdOebrumMhOWSjOW3peS9nOWNgOWIhumboiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOQorbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAia2V5PXZhbHVlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQwCittc2dpZCAic2V0IGNvbmZpZyBpbnNpZGUgdGhlIG5ldyByZXBvc2l0b3J5IgorbXNnc3RyICLlnKjmlrDniYjmnKzluqvkuK3oqK3lrproqK3lrproqIrmga8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJzZXJ2ZXItc3BlY2lmaWMiCittc2dzdHIgInNlcnZlci1zcGVjaWZpYyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgIm9wdGlvbiB0byB0cmFuc21pdCIKK21zZ3N0ciAi5YKz6Ly46YG46aCFIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQzIGJ1aWx0aW4vZmV0Y2guYzoxOTEgYnVpbHRpbi9wdWxsLmM6MjIwCisjOiBidWlsdGluL3B1c2guYzo1NzQKK21zZ2lkICJ1c2UgSVB2NCBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAi5Y+q5L2/55SoIElQdjQg5L2N5Z2AIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ1IGJ1aWx0aW4vZmV0Y2guYzoxOTMgYnVpbHRpbi9wdWxsLmM6MjIzCisjOiBidWlsdGluL3B1c2guYzo1NzYKK21zZ2lkICJ1c2UgSVB2NiBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAi5Y+q5L2/55SoIElQdjYg5L2N5Z2AIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ5Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgdXNlIHRoZWlyIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIuS7u+S9leikh+ijveeahOWtkOaooee1hOWwh+S9v+eUqOWug+WAkeeahOmBoOerr+i/vei5pOWIhuaUryIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE1MQorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgdG8gaW5jbHVkZSBvbmx5IGZpbGVzIGF0IHJvb3QiCittc2dzdHIgIuWIneWni+WMlueogOeWj+ewveWHuuaqlOahiO+8jOWPquWMheWQq+agueebrumMhOS4reeahOaqlOahiCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI4NworbXNnaWQgIiIKKyJObyBkaXJlY3RvcnkgbmFtZSBjb3VsZCBiZSBndWVzc2VkLlxuIgorIlBsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKyLnhKHms5XnjJzliLDnm67pjITlkI3jgIJcbiIKKyLoq4vlnKjmjIfku6TliJfmjIflrprkuIDlgIvnm67pjIQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbzogQ291bGQgbm90IGFkZCBhbHRlcm5hdGUgZm9yICclcyc6ICVzXG4iCittc2dzdHIgImluZm86IOS4jeiDveeCuiAnJXMnIOaWsOWinuS4gOWAi+WCmeeUqO+8miVzXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzIOWtmOWcqOS4lOS4jeaYr+S4gOWAi+ebrumMhCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhcnQgaXRlcmF0b3Igb3ZlciAnJXMnIgorbXNnc3RyICLnhKHms5XlnKggJyVzJyDkuIrllZ/li5Xnlorku6PlmagiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgIuW7uueri+mAo+e1kCAnJXMnIOWkseaVlyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgIuikh+ijveaqlOahiOiHsyAnJXMnIOWkseaVlyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gaXRlcmF0ZSBvdmVyICclcyciCittc2dzdHIgIueEoeazleWcqCAnJXMnIOS4iueWiuS7oyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICLlrozmiJDjgIJcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjUwOAorbXNnaWQgIiIKKyJDbG9uZSBzdWNjZWVkZWQsIGJ1dCBjaGVja291dCBmYWlsZWQuXG4iCisiWW91IGNhbiBpbnNwZWN0IHdoYXQgd2FzIGNoZWNrZWQgb3V0IHdpdGggJ2dpdCBzdGF0dXMnXG4iCisiYW5kIHJldHJ5IHdpdGggJ2dpdCByZXN0b3JlIC0tc291cmNlPUhFQUQgOi8nXG4iCittc2dzdHIgIiIKKyLopIfoo73miJDlip/vvIzkvYbmmK/nsL3lh7rlpLHmlZfjgIJcbiIKKyLmgqjlj6/ku6XpgI/pgY4gJ2dpdCBzdGF0dXMnIOaqouafpeWTquS6m+W3suiiq+ewveWHuu+8jOeEtuW+jOS9v+eUqOaMh+S7pFxuIgorIidnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEIDovJyDph43oqaZcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAi5LiN6IO955m854++6KaB6KSH6KO955qE6YGg56uv5YiG5pSvICVz44CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgJXMiCittc2dzdHIgIuS4jeiDveabtOaWsCAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc1MworbXNnaWQgImZhaWxlZCB0byBpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAi54Sh5rOV5Yid5aeL5YyW56iA55aP57C95Ye6IgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzc2Cittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICLpgaDnq68gSEVBRCDmjIflkJHkuIDlgIvkuI3lrZjlnKjnmoTlvJXnlKjvvIznhKHms5XnsL3lh7rjgIJcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwNworbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgIuS4jeiDveewveWHuuW3peS9nOWNgCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICLnhKHms5XlsIflj4Pmlbjlr6vlhaXoqK3lrprmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjUKK21zZ2lkICJjYW5ub3QgcmVwYWNrIHRvIGNsZWFuIHVwIgorbXNnc3RyICLnhKHms5Xln7fooYwgcmVwYWNrIOS+hua4heeQhiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNworbXNnaWQgImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAi54Sh5rOV5Yiq6Zmk5pqr5pmC55qEIGFsdGVybmF0ZXMg5qqU5qGIIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTY1IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgIuWkquWkmuWPg+aVuOOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2OQorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAi5oKo5b+F6aCI5oyH5a6a5LiA5YCL54mI5pys5bqr5L6G6KSH6KO944CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiLS1iYXJlIOWSjCAtLW9yaWdpbiAlcyDpgbjpoIXkuI3nm7jlrrnjgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5ODUKK21zZ2lkICItLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpciBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiLS1iYXJlIOWSjCAtLXNlcGFyYXRlLWdpdC1kaXIg6YG46aCF5LiN55u45a6544CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi54mI5pys5bqrICclcycg5LiN5a2Y5ZyoIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwNCBidWlsdGluL2ZldGNoLmM6MTc5NgorIywgYy1mb3JtYXQKK21zZ2lkICJkZXB0aCAlcyBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgIua3seW6piAlcyDkuI3mmK/kuIDlgIvmraPmlbgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIuebruaomei3r+W+kSAnJXMnIOW3sue2k+WtmOWcqO+8jOS4puS4lOS4jeaYr+S4gOWAi+epuuebrumMhOOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLlt6XkvZzljYAgJyVzJyDlt7LntpPlrZjlnKjjgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDM5IGJ1aWx0aW4vY2xvbmUuYzoxMDYwIGJ1aWx0aW4vZGlmZnRvb2wuYzoyNzEKKyM6IGJ1aWx0aW4vbG9nLmM6MTg2NiBidWlsdGluL3dvcmt0cmVlLmM6Mjk1IGJ1aWx0aW4vd29ya3RyZWUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgIuS4jeiDveeCuiAnJXMnIOW7uueri+WFiOWwjuebrumMhCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgIuS4jeiDveW7uueri+W3peS9nOWNgOebrumMhCAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAi6KSH6KO95Yiw57SU54mI5pys5bqrICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAi5q2j6KSH6KO95YiwICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwOTAKK21zZ2lkICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBib3RoIC0tcmVmZXJlbmNlIGFuZCAtLXJlZmVyZW5jZS1pZi0iCisiYWJsZSIKK21zZ3N0ciAiY2xvbmUgLS1yZWN1cnNpdmUg5ZKMIC0tcmVmZXJlbmNlIOS7peWPiiAtLXJlZmVyZW5jZS1pZi1hYmxlIOS4jeebuOWuuSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTQKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1kZXB0aCDlnKjmnKzmqZ/opIfoo73mmYLooqvlv73nlaXvvIzoq4vmlLnnlKggZmlsZTovLyDljZTlrprjgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU2Cittc2dpZCAiLS1zaGFsbG93LXNpbmNlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1zaGFsbG93LXNpbmNlIOWcqOacrOapn+ikh+ijveaZguiiq+W/veeVpe+8jOiri+aUueeUqCBmaWxlOi8vIOWNlOWumuOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTgKK21zZ2lkICItLXNoYWxsb3ctZXhjbHVkZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tc2hhbGxvdy1leGNsdWRlIOWcqOacrOapn+ikh+ijveaZguiiq+W/veeVpe+8jOiri+aUueeUqCBmaWxlOi8vIOWNlOWumuOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjAKK21zZ2lkICItLWZpbHRlciBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tZmlsdGVyIOWcqOacrOapn+ikh+ijveaZguiiq+W/veeVpe+8jOiri+aUueeUqCBmaWxlOi8vIOWNlOWumuOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjMKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICLmupDniYjmnKzluqvmmK/mt7ropIfoo73vvIzlv73nlaUgLS1sb2NhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjgKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwg6KKr5b+955WlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0MyBidWlsdGluL2Nsb25lLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAi6YGg56uv5YiG5pSvICVzIOWcqOS4iua4uCAlcyDmnKrnmbznj74iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjU0Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAi5oKo5Ly85LmO6KSH6KO95LqG5LiA5YCL56m654mI5pys5bqr44CCIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjEwCittc2dpZCAiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbHVtbiBbPOmBuOmghT5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICLlsIvmib7oqK3lrprorormlbgiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgIuimgeS9v+eUqOeahOmFjee9riIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIuacgOWkp+WvrOW6piIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIuW3pumCiuahhueahOWhq+WFheepuumWkyIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMgorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICLlj7PpgormoYbnmoTloavlhYXnqbrplpMiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzMKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAi5YWp5YiX5LmL6ZaT55qE5aGr5YWF56m66ZaTIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICItLWNvbW1hbmQg5b+F6aCI5piv56ys5LiA5YCL5Y+D5pW4IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTgKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPHBhcmVudD4pLi4uXSBbLVNbPGtleWlkPl1dIFsoLW0gPG1lc3NhZ2U+KS4uLl0gWygtRiAiCisiPGZpbGU+KS4uLl0gPHRyZWU+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPOeItuaPkOS6pD4pLi4uXSBbLVNbPGtleWlkPl1dIFsoLW0gPOa2iOaBrz4pLi4uXSBbKC1GIDzmqpTmoYgiCisiPikuLi5dIDzmqLk+IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHBhcmVudCAlcyBpZ25vcmVkIgorbXNnc3RyICLlv73nlaXph43opIfnmoTniLbmj5DkuqQgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo1NiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTM2IGJ1aWx0aW4vbG9nLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLkuI3mmK/kuIDlgIvmnInmlYjnmoTnianku7blkI0gJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZe+8mueEoeazlemWi+WVnyAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWXvvJrnhKHms5XoroDlj5YgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIGNsb3NlICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZe+8mueEoeazlemXnOmWiSAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICLniLbmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTIKK21zZ2lkICJpZCBvZiBhIHBhcmVudCBjb21taXQgb2JqZWN0IgorbXNnc3RyICLniLbmj5DkuqTnianku7YgSUQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTQgYnVpbHRpbi9jb21taXQuYzoxNTAxIGJ1aWx0aW4vbWVyZ2UuYzoyNzEKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDkgYnVpbHRpbi9ub3Rlcy5jOjU3NSBidWlsdGluL3N0YXNoLmM6MTQ3NworIzogYnVpbHRpbi90YWcuYzo0MTIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICLoqqrmmI4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTUgYnVpbHRpbi9jb21taXQuYzoxNTAxCittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIuaPkOS6pOiqquaYjiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExOAorbXNnaWQgInJlYWQgY29tbWl0IGxvZyBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAi5b6e5qqU5qGI5Lit6K6A5Y+W5o+Q5Lqk6Kqq5piOIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIxIGJ1aWx0aW4vY29tbWl0LmM6MTUxMyBidWlsdGluL21lcmdlLmM6Mjg4CisjOiBidWlsdGluL3B1bGwuYzoxNzUgYnVpbHRpbi9yZXZlcnQuYzoxMTgKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgIkdQRyDmj5DkuqTnsL3lkI0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMzMKK21zZ2lkICJtdXN0IGdpdmUgZXhhY3RseSBvbmUgdHJlZSIKK21zZ3N0ciAi5b+F6aCI57K+56K65Zyw5o+Q5L6b5LiA5YCL5qi5IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTQwCittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVl77ya6K6A5Y+W5aSx5pWXIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQxCittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzzpgbjpoIU+XSBbLS1dIDzot6/lvpHopo/moLw+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2Cittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBzdGF0dXMgWzzpgbjpoIU+XSBbLS1dIDzot6/lvpHopo/moLw+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUxCittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisi5oKo6KaB5L+u6KOc5pyA6L+R55qE5o+Q5Lqk77yM5L2G6YCZ6bq85YGa5pyD6K6T5a6D5oiQ54K656m65o+Q5Lqk44CC5oKo5Y+v5Lul6YeN6KSH5oKo55qE5oyH5Luk5Lim5bi25LiKXG4iCisiLS1hbGxvdy1lbXB0eSDpgbjpoIXvvIzmiJbogIXmgqjlj6/nlKjmjIfku6QgXCJnaXQgcmVzZXQgSEVBRF5cIiDmlbTlgIvliKrpmaToqbLmj5DkuqTjgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisi5LmL5YmN55qE5o+A6YG45YuV5L2c54++5Zyo5piv5LiA5YCL56m65o+Q5Lqk77yM5Y+v6IO95piv55Sx6KGd56qB6Kej5rG65bCO6Ie055qE44CC5aaC5p6c5oKo54Sh6KuW5aaC5L2VXG4iCisi5Lmf6KaB5o+Q5Lqk77yM5L2/55So5oyH5Luk77yaXG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzCittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgY2hlcnJ5LXBpY2sgLS1za2lwJ1xuIgorbXNnc3RyICLlkKbliYfvvIzoq4vkvb/nlKggJ2dpdCBjaGVycnktcGljayAtLXNraXAnXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjYKK21zZ2lkICIiCisiYW5kIHRoZW4gdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorInRvIHJlc3VtZSBjaGVycnktcGlja2luZyB0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCittc2dzdHIgIiIKKyLnhLblvozkvb/nlKjvvJpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcbiIKKyJcbiIKKyLkvobnubznuozmj4DpgbjlianppJjmj5DkuqTjgILlpoLmnpzmgqjmg7Pot7PpgY7mraTmj5DkuqTvvIzkvb/nlKjvvJpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMxNQorbXNnaWQgImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIKK21zZ3N0ciAi6Kej5YyFIEhFQUQg5qi554uA54mp5Lu25aSx5pWXIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUg5ZKMIC1hIOWQjOaZguS9v+eUqOaykuacieaEj+e+qSIKKworIzogYnVpbHRpbi9jb21taXQuYzozNjQKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIuWPg+aVuCAtLWluY2x1ZGUvLS1vbmx5IOS4jei3n+i3r+W+keaykuacieaEj+e+qeOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNzYKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi5LiN6IO95bu656uL5pqr5pmC57Si5byVIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4NQorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgIuS6kuWLleW8j+aWsOWinuWkseaVlyIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MDAKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi54Sh5rOV5pu05paw5pqr5pmC57Si5byVIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQwMgorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICLkuI3og73mm7TmlrDmqLnnmoTkuLvlv6vlj5YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDI3IGJ1aWx0aW4vY29tbWl0LmM6NDUwIGJ1aWx0aW4vY29tbWl0LmM6NDk2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICLnhKHms5Xlr6sgbmV3X2luZGV4IOaqlOahiCIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzkKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgIuWcqOWQiOS9temBjueoi+S4reS4jeiDveWBmumDqOWIhuaPkOS6pOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0ODEKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIuWcqOaPgOmBuOmBjueoi+S4reS4jeiDveWBmumDqOWIhuaPkOS6pOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0ODkKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIueEoeazleiugOWPlue0ouW8lSIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MDgKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgIueEoeazleWvq+aaq+aZgue0ouW8leaqlOahiCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgbGFja3MgYXV0aG9yIGhlYWRlciIKK21zZ3N0ciAi5o+Q5LqkICclcycg57y65bCR5L2c6ICF6KiK5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBoYXMgbWFsZm9ybWVkIGF1dGhvciBsaW5lIgorbXNnc3RyICLmj5DkuqQgJyVzJyDmnInmoLzlvI/pjK/oqqTnmoTkvZzogIXoqIrmga8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjI3Cittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAi5qC85byP6Yyv6Kqk55qEIC0tYXV0aG9yIOWPg+aVuCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2ODAKK21zZ2lkICIiCisidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKyJpbiB0aGUgY3VycmVudCBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi54Sh5rOV6YG45pOH5LiA5YCL5pyq6KKr55uu5YmN5o+Q5Lqk6Kqq5piO5L2/55So55qE5YKZ6Ki75a2X5YWDIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcxOCBidWlsdGluL2NvbW1pdC5jOjc1MSBidWlsdGluL2NvbW1pdC5jOjEwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgIuS4jeiDveafpeipouaPkOS6pCAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzAgYnVpbHRpbi9zaG9ydGxvZy5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICLvvIjmraPlvp7mqJnmupbovLjlhaXkuK3oroDlj5bml6XoqozoqIrmga/vvIlcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzIKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi5LiN6IO95b6e5qiZ5rqW6Ly45YWl5Lit6K6A5Y+W5pel6KqM6KiK5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73oroDlj5bml6XoqozmqpTmoYggJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NjcgYnVpbHRpbi9jb21taXQuYzo3ODMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIgorbXNnc3RyICLkuI3og73oroDlj5YgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NzQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgIuS4jeiDveiugOWPliBNRVJHRV9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODM0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAi5LiN6IO95a+r5o+Q5Lqk56+E5pysIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyLkvLzkuY7mgqjmraPlnKjlgZrkuIDlgIvlkIjkvbXmj5DkuqTjgILlpoLmnpzkuI3lsI3vvIzoq4vliKrpmaTmqpTmoYhcbiIKKyJcdCVzXG4iCisi54S25b6M6YeN6Kmm44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuS8vOS5juaCqOato+WcqOWBmuS4gOWAi+aPgOmBuOaPkOS6pOOAguWmguaenOS4jeWwje+8jOiri+WIqumZpOaqlOahiFxuIgorIlx0JXNcbiIKKyLnhLblvozph43oqabjgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuiri+eCuuaCqOeahOiuiuabtOi8uOWFpeaPkOS6pOiqquaYjuOAguS7pSAnJWMnIOmWi+Wni+eahOihjOWwh+iiq+W/veeVpe+8jOiAjOS4gOWAi+epuueahOaPkOS6pFxuIgorIuiqquaYjuWwh+acg+e1guatouaPkOS6pOOAglxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuiri+eCuuaCqOeahOiuiuabtOi8uOWFpeaPkOS6pOiqquaYjuOAguS7pSAnJWMnIOmWi+Wni+eahOihjOWwh+iiq+S/neeVme+8jOWmguaenOaCqOWOn+aEj1xuIgorIuS5n+WPr+S7peWIqumZpOWug+WAkeOAguS4gOWAi+epuueahOaPkOS6pOiqquaYjuWwh+acg+e1guatouaPkOS6pOOAglxuIgorCisjICDora/ogIXvvJrngrrkv53orYnlnKjovLjlh7rkuK3lsI3pvYrvvIzms6jmhI/oqr/mlbTlj6XkuK3nqbrmoLzvvIEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPkvZzogIXvvJogICUuKnMgPCUuKnM+IgorCisjICDora/ogIXvvJrngrrkv53orYnlnKjovLjlh7rkuK3lsI3pvYrvvIzms6jmhI/oqr/mlbTlj6XkuK3nqbrmoLzvvIEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXPml6XmnJ/vvJogICVzIgorCisjICDora/ogIXvvJrngrrkv53orYnlnKjovLjlh7rkuK3lsI3pvYrvvIzms6jmhI/oqr/mlbTlj6XkuK3nqbrmoLzvvIEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPmj5DkuqTogIXvvJolLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MjkKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+W57Si5byVIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5NworbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICLnhKHms5Xlu7rnq4vmqLnni4Dnianku7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAxMSBidWlsdGluL3RhZy5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIuiri+S9v+eUqCAtbSDmiJYgLUYg6YG46aCF5o+Q5L6b5o+Q5Lqk6Kqq5piO44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIi0tYXV0aG9yICclcycg5LiN5pivICflp5PlkI0gPOS/oeeusT4nIOagvOW8j++8jOS4lOacquiDveWcqOePvuacieS9nOiAheS4reaJvuWIsOespuWQiCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaWdub3JlZCBtb2RlICclcyciCittc2dzdHIgIueEoeaViOeahOW/veeVpeaooeW8jyAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODcgYnVpbHRpbi9jb21taXQuYzoxMzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAi54Sh5pWI55qE5pyq6L+96Lmk5qqU5qGI5Y+D5pW4ICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEyNworbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1sb25nIOWSjCAteiDpgbjpoIXkuI3nm7jlrrkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3MQorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIuWQjOaZguS9v+eUqCAtLXJlc2V0LWF1dGhvciDlkowgLS1hdXRob3Ig5rKS5pyJ5oSP576pIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODAKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAi5oKo5rKS5pyJ5Y+v5L+u6KOc55qE5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODMKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLmgqjmraPomZXmlrzkuIDlgIvlkIjkvbXpgY7nqIvkuK0gLS0g54Sh5rOV5L+u6KOc5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODUKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLmgqjmraPomZXmlrzkuIDlgIvmj4DpgbjpgY7nqIvkuK0gLS0g54Sh5rOV5L+u6KOc5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODgKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLpgbjpoIUgLS1zcXVhc2gg5ZKMIC0tZml4dXAg5LiN6IO95ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTgKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAi5Y+q6IO955So5LiA5YCLIC1jLy1DLy1GLy0tZml4dXAg6YG46aCF44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDAKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYuIgorbXNnc3RyICLpgbjpoIUgLW0g5LiN6IO95ZKMIC1jLy1DLy1GIOWQjOaZguS9v+eUqOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjA4Cittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiLS1yZXNldC1hdXRob3Ig5Y+q6IO95ZKMIC1D44CBLWMg5oiWIC0tYW1lbmQg5ZCM5pmC5L2/55So44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjUKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIuWPquiDveeUqOS4gOWAiyAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCDpgbjpoIXjgIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRocyAnJXMgLi4uJyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIui3r+W+kSAgJyVzIC4uLicg5ZKMIC1hIOmBuOmgheWQjOaZguS9v+eUqOaykuacieaEj+e+qSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYyIGJ1aWx0aW4vY29tbWl0LmM6MTUyNAorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAi5Lul57Ch5r2U55qE5qC85byP6aGv56S654uA5oWLIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjQgYnVpbHRpbi9jb21taXQuYzoxNTI2Cittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgIumhr+ekuuWIhuaUr+ioiuaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY2Cittc2dpZCAic2hvdyBzdGFzaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi6aGv56S65YSy6JeP5Y2A6KiK5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjggYnVpbHRpbi9jb21taXQuYzoxNTI4Cittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgIuioiOeul+WujOaVtOeahOmgmOWFiC/okL3lvozlgLwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MAorbXNnaWQgInZlcnNpb24iCittc2dzdHIgIueJiOacrCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzcwIGJ1aWx0aW4vY29tbWl0LmM6MTUzMCBidWlsdGluL3B1c2guYzo1NDkKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NDMKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAi5qmf5Zmo5Y+v6K6A55qE6Ly45Ye6IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzMgYnVpbHRpbi9jb21taXQuYzoxNTMyCittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICLku6XplbfmoLzlvI/poa/npLrni4DmhYvvvIjpoJDoqK3vvIkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3NiBidWlsdGluL2NvbW1pdC5jOjE1MzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAi5qKd55uu5LulIE5VTCDlrZflhYPntZDlsL4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OCBidWlsdGluL2NvbW1pdC5jOjEzODIgYnVpbHRpbi9jb21taXQuYzoxNTM4CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTkgYnVpbHRpbi9yZWJhc2UuYzoxNTY5IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJtb2RlIgorbXNnc3RyICLmqKHlvI8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OSBidWlsdGluL2NvbW1pdC5jOjE1MzgKK21zZ2lkICJzaG93IHVudHJhY2tlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IGFsbCwgbm9ybWFsLCBuby4gKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIumhr+ekuuacqui/vei5pOeahOaqlOahiO+8jOOAjOaooeW8j+OAjeeahOWPr+mBuOWPg+aVuO+8mmFsbOOAgW5vcm1hbOOAgW5v44CC77yI6aCQ6Kit77yaYWxs77yJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODMKK21zZ2lkICIiCisic2hvdyBpZ25vcmVkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogdHJhZGl0aW9uYWwsIG1hdGNoaW5nLCBuby4gKERlZmF1bHQ6ICIKKyJ0cmFkaXRpb25hbCkiCittc2dzdHIgIiIKKyLpoa/npLrlt7Llv73nlaXnmoTmqpTmoYjvvIzlj6/pgbjmqKHlvI/vvJp0cmFkaXRpb25hbOOAgW1hdGNoaW5n44CBbm/jgILvvIjpoJDoqK3vvJp0cmFkaXRpb25hbO+8iSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg1IHBhcnNlLW9wdGlvbnMuaDoxOTIKK21zZ2lkICJ3aGVuIgorbXNnc3RyICLkvZXmmYIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4NgorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorIuW/veeVpeWtkOaooee1hOeahOabtOaUue+8jOOAjOS9leaZguOAjeeahOWPr+mBuOWPg+aVuO+8mmFsbOOAgWRpcnR544CBdW50cmFja2Vk44CC77yI6aCQ6Kit77yaYWxs77yJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODgKK21zZ2lkICJsaXN0IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zIgorbXNnc3RyICLku6XliJfnmoTmlrnlvI/poa/npLrmnKrov73ouaTnmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4OQorbXNnaWQgImRvIG5vdCBkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAi5LiN5qqi5ris6YeN5paw5ZG95ZCNIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzOTEKK21zZ2lkICJkZXRlY3QgcmVuYW1lcywgb3B0aW9uYWxseSBzZXQgc2ltaWxhcml0eSBpbmRleCIKK21zZ3N0ciAi5qqi5ris6YeN5paw5ZG95ZCN77yM5Y+v5Lul6Kit5a6a57Si5byV55u45Ly85bqmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MTEKK21zZ2lkICJVbnN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBpZ25vcmVkIGFuZCB1bnRyYWNrZWQtZmlsZXMgYXJndW1lbnRzIgorbXNnc3RyICLkuI3mlK/mj7Tlt7Llv73nlaXlkozmnKrov73ouaTmqpTmoYjlj4PmlbjnmoTntYTlkIgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NAorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgIuaPkOS6pOaIkOWKn+W+jOS4jemhr+ekuuamgui/sOioiuaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1Cittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICLlnKjmj5DkuqToqqrmmI7nr4TmnKzoo6Hpoa/npLrlt67nlbAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NworbXNnaWQgIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiCittc2dzdHIgIuaPkOS6pOiqquaYjumBuOmghSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk4IGJ1aWx0aW4vbWVyZ2UuYzoyNzUgYnVpbHRpbi90YWcuYzo0MTQKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICLlvp7mqpTmoYjkuK3oroDlj5bmj5DkuqToqqrmmI4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorbXNnaWQgImF1dGhvciIKK21zZ3N0ciAi5L2c6ICFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTkKK21zZ2lkICJvdmVycmlkZSBhdXRob3IgZm9yIGNvbW1pdCIKK21zZ3N0ciAi5o+Q5Lqk5pmC6KaG6JOL5L2c6ICFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAgYnVpbHRpbi9nYy5jOjUzOAorbXNnaWQgImRhdGUiCittc2dzdHIgIuaXpeacnyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAwCittc2dpZCAib3ZlcnJpZGUgZGF0ZSBmb3IgY29tbWl0IgorbXNnc3RyICLmj5DkuqTmmYLopobok4vml6XmnJ8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMiBidWlsdGluL2NvbW1pdC5jOjE1MDMgYnVpbHRpbi9jb21taXQuYzoxNTA0CisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDUgcGFyc2Utb3B0aW9ucy5oOjMyOCByZWYtZmlsdGVyLmg6OTIKK21zZ2lkICJjb21taXQiCittc2dzdHIgIuaPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIumHjeeUqOS4pue3qOi8r+aMh+WumuaPkOS6pOeahOaPkOS6pOiqquaYjiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAzCittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIumHjeeUqOaMh+WumuaPkOS6pOeahOaPkOS6pOiqquaYjiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA0Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi5L2/55SoIGF1dG9zcXVhc2gg5qC85byP55qE5o+Q5Lqk6Kqq5piO55So5Lul5L+u5q2j5oyH5a6a55qE5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDUKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi5L2/55SoIGF1dG9zcXVhc2gg5qC85byP55qE5o+Q5Lqk6Kqq5piO55So5Lul5aOT57iu6Iez5oyH5a6a55qE5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDYKK21zZ2lkICJ0aGUgY29tbWl0IGlzIGF1dGhvcmVkIGJ5IG1lIG5vdyAodXNlZCB3aXRoIC1DLy1jLy0tYW1lbmQpIgorbXNnc3RyICLnj77lnKjlsIfoqbLmj5DkuqTnmoTkvZzogIXmlLnngrrmiJHvvIjlkowgLUMvLWMvLS1hbWVuZCDlj4PmlbjlhbHnlKjvvIkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNyBidWlsdGluL2xvZy5jOjE2MzQgYnVpbHRpbi9tZXJnZS5jOjI5MAorIzogYnVpbHRpbi9wdWxsLmM6MTQ0IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEwCittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICLmlrDlop4gU2lnbmVkLW9mZi1ieTog57C95ZCNIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDgKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgIuS9v+eUqOaMh+WumueahOevhOacrOaqlOahiCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA5Cittc2dpZCAiZm9yY2UgZWRpdCBvZiBjb21taXQiCittc2dzdHIgIuW8t+WItue3qOi8r+aPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTExCittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIuWcqOaPkOS6pOiqquaYjuevhOacrOijoeWMheWQq+eLgOaFi+ioiuaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE2Cittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIuaPkOS6pOWFp+WuuemBuOmghSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE3Cittc2dpZCAiY29tbWl0IGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICLmj5DkuqTmiYDmnInmlLnli5XnmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxOAorbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAi5paw5aKe5oyH5a6a55qE5qqU5qGI5Yiw57Si5byV5Y2A562J5b6F5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTkKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAi5LqS5YuV5byP5paw5aKe5qqU5qGIIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjAKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIgorbXNnc3RyICLkupLli5XlvI/mlrDlop7orormm7QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUyMQorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAi5Y+q5o+Q5Lqk5oyH5a6a55qE5qqU5qGIIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjIKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAi57me6YGOIHByZS1jb21taXQg5ZKMIGNvbW1pdC1tc2cg5o6b6YmkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MjMKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICLpoa/npLrlsIfopoHmj5DkuqTnmoTlhaflrrkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzNgorbXNnaWQgImFtZW5kIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi5L+u5pS55YWI5YmN55qE5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzcKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgIue5numBjiBwb3N0LXJld3JpdGUg5o6b6YmkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NDQKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICLlhYHoqLHkuIDlgIvnqbrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU0NgorbXNnaWQgIm9rIHRvIHJlY29yZCBhIGNoYW5nZSB3aXRoIGFuIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgIuWFgeioseepuueahOaPkOS6pOiqquaYjiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIuaQjeWjnueahCBNRVJHRV9IRUFEIOaqlOahiO+8iCVz77yJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MjYKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICLkuI3og73oroDlj5YgTUVSR0VfTU9ERSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAi5LiN6IO96K6A5Y+W5o+Q5Lqk6Kqq5piO77yaJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICLntYLmraLmj5DkuqTlm6Dngrrmj5DkuqToqqrmmI7ngrrnqbrjgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdDsgeW91IGRpZCBub3QgZWRpdCB0aGUgbWVzc2FnZS5cbiIKK21zZ3N0ciAi57WC5q2i5o+Q5Lqk77yb5oKo5pyq5pu05pS55L6G6Ieq56+E5pys55qE5o+Q5Lqk6Kqq5piO44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY5MQorbXNnaWQgIiIKKyJyZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisi54mI5pys5bqr5bey5pu05paw77yM5L2G54Sh5rOV5a+rIG5ld19pbmRleCDmqpTmoYjjgILmqqLmn6XmmK/lkKbno4Hnop/lt7Lmu7/miJZcbiIKKyLno4Hnop/phY3poY3lt7LogJfnm6HvvIznhLblvozln7fooYwgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIOW+qeWOn+OAgiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE3Cittc2dpZCAiIgorImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLXNoYWxsb3ddIFstLVtuby1dcHJvZ3Jlc3NdIgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA854mp5Lu255uu6YyEPl0gWy0tc2hhbGxvd10gWy0tIgorIltuby1dcHJvZ3Jlc3NdIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjIKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDznianku7bnm67pjIQ+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIG9iamVjdCBkaXJlY3RvcnkgbWF0Y2hpbmcgJXMiCittc2dzdHIgIuaJvuS4jeWIsOespuWQiCAlcyDnmoTnianku7bnm67pjIQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NjggYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMjUKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjEwIGJ1aWx0aW4vZmV0Y2guYzoxNzkgYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAiZGlyIgorbXNnc3RyICLnm67pjIQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NjkgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMjYKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjExCittc2dpZCAiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIgorbXNnc3RyICLlhLLlrZjlnJblvaLnmoTnianku7bnm67pjIQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NzEKK21zZ2lkICJpZiB0aGUgY29tbWl0LWdyYXBoIGlzIHNwbGl0LCBvbmx5IHZlcmlmeSB0aGUgdGlwIGZpbGUiCittc2dzdHIgIuWmguaenOaPkOS6pOWcluW9ouiiq+WIhuWJsu+8jOWPqumpl+itiemgreS4gOWAi+aqlOahiCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo5NCB0L2hlbHBlci90ZXN0LXJlYWQtZ3JhcGguYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBjb21taXQtZ3JhcGggJyVzJyIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWf5o+Q5Lqk5ZyW5b2iICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTI4Cittc2dpZCAic3RhcnQgd2FsayBhdCBhbGwgcmVmcyIKK21zZ3N0ciAi6ZaL5aeL6YGN5q235omA5pyJ5byV55SoIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzMAorbXNnaWQgInNjYW4gcGFjay1pbmRleGVzIGxpc3RlZCBieSBzdGRpbiBmb3IgY29tbWl0cyIKK21zZ3N0ciAi5b6e5qiZ5rqW6Ly45YWl5Lit55qE5YyF57Si5byV5qqU5qGI5YiX6KGo5Lit5o6D5o+P5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzMgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgIuW+nuaomea6lui8uOWFpeS4reeahOaPkOS6pOmWi+Wni+aOg+aPjyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzQKK21zZ2lkICJpbmNsdWRlIGFsbCBjb21taXRzIGFscmVhZHkgaW4gdGhlIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICLljIXlkKsgY29tbWl0LWdyYXBoIOaqlOahiOS4reW3suacieaJgOacieaPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzcKK21zZ2lkICJhbGxvdyB3cml0aW5nIGFuIGluY3JlbWVudGFsIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICLlhYHoqLHlr6vkuIDlgIvlop7ph4/mj5DkuqTlnJblvaLmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTQzCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAi5Zyo6Z2e5Z+65pys5YiG5Ymy5o+Q5Lqk5ZyW5b2i5Lit55qE5pyA5aSn5o+Q5Lqk5pW4IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE0MQorbXNnaWQgIm1heGltdW0gcmF0aW8gYmV0d2VlbiB0d28gbGV2ZWxzIG9mIGEgc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICLkuIDlgIvliIblibLmj5DkuqTlnJblvaLnmoTlhanlgIvntJrliKXkuYvplpPnmoTmnIDlpKfmr5TnjociCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTU5Cittc2dpZCAidXNlIGF0IG1vc3Qgb25lIG9mIC0tcmVhY2hhYmxlLCAtLXN0ZGluLWNvbW1pdHMsIG9yIC0tc3RkaW4tcGFja3MiCittc2dzdHIgIuS4jeiDveWQjOaZguS9v+eUqCAtLXJlYWNoYWJsZeOAgS0tc3RkaW4tY29tbWl0cyDmiJYgLS1zdGRpbi1wYWNrcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMQorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb25maWcgWzzpgbjpoIU+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMDQgYnVpbHRpbi9lbnYtLWhlbHBlci5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAtLXR5cGUgYXJndW1lbnQsICVzIgorbXNnc3RyICLmnKrog73orZjliKXnmoQgLS10eXBlIOWPg+aVuO+8jCVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExNgorbXNnaWQgIm9ubHkgb25lIHR5cGUgYXQgYSB0aW1lIgorbXNnc3RyICLkuIDmrKHlj6rog73kuIDlgIvpoZ7lnosiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI1Cittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgIuioreWumuaqlOahiOS9jee9riIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjYKK21zZ2lkICJ1c2UgZ2xvYmFsIGNvbmZpZyBmaWxlIgorbXNnc3RyICLkvb/nlKjlhajln5/oqK3lrprmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI3Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAi5L2/55So57O757Wx57Sa6Kit5a6a5qqU5qGIIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOAorbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICLkvb/nlKjniYjmnKzluqvntJroqK3lrprmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI5Cittc2dpZCAidXNlIHBlci13b3JrdHJlZSBjb25maWcgZmlsZSIKK21zZ3N0ciAi5L2/55So5bel5L2c5Y2A57Sa5Yil55qE6Kit5a6a5qqU5qGIIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMAorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAi5L2/55So5oyH5a6a55qE6Kit5a6a5qqU5qGIIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgImJsb2ItaWQiCittc2dzdHIgIuizh+aWmeeJqeS7tiBJRCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzEKK21zZ2lkICJyZWFkIGNvbmZpZyBmcm9tIGdpdmVuIGJsb2Igb2JqZWN0IgorbXNnc3RyICLlvp7mj5DkvpvnmoTos4fmlpnnianku7boroDlj5boqK3lrpoiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMyCittc2dpZCAiQWN0aW9uIgorbXNnc3RyICLli5XkvZwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMzCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIuWPluW+l+WAvO+8mm5hbWUgW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzQKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIueNsuW+l+aJgOacieeahOWAvO+8mmtleSBbdmFsdWUtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNQorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLmoLnmk5rmraPopo/ooajnpLrlvI/njbLlvpflgLzvvJpuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM2Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAi542y5b6XIFVSTCDlj5blgLzvvJpzZWN0aW9uWy52YXJdIFVSTCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzcKK21zZ2lkICJyZXBsYWNlIGFsbCBtYXRjaGluZyB2YXJpYWJsZXM6IG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XSIKK21zZ3N0ciAi5Y+W5Luj5omA5pyJ56ym5ZCI55qE6K6K5pW477yabmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOAorbXNnaWQgImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIKK21zZ3N0ciAi5paw5aKe5LiA5YCL5paw55qE6K6K5pW477yabmFtZSB2YWx1ZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzkKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLliKrpmaTkuIDlgIvorormlbjvvJpuYW1lIFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQwCittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIuWIqumZpOaJgOacieespuWQiOmghe+8mm5hbWUgW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDEKK21zZ2lkICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiCittc2dzdHIgIumHjeaWsOWRveWQjeWwj+evgO+8mm9sZC1uYW1lIG5ldy1uYW1lIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MgorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgIuWIqumZpOS4gOWAi+Wwj+evgO+8mm5hbWUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQzCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgIuWFqOmDqOWIl+WHuiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDQKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAi6ZaL5ZWf5LiA5YCL57eo6Lyv5ZmoIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NQorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICLnjbLlvpfoqK3lrprnmoTpoY/oibLvvJroqK3lrpogW+mgkOiorV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ2Cittc2dpZCAiZmluZCB0aGUgY29sb3Igc2V0dGluZzogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCittc2dzdHIgIueNsuW+l+mhj+iJsuioreWumu+8muioreWumiBbc3Rkb3V0LWlzLXR0eV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ3Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAi6aGe5Z6LIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OCBidWlsdGluL2Vudi0taGVscGVyLmM6MzgKK21zZ2lkICJ2YWx1ZSBpcyBnaXZlbiB0aGlzIHR5cGUiCittc2dzdHIgIuWPluWAvOeCuuipsumhnuWeiyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDkKK21zZ2lkICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiCittc2dzdHIgIuWAvOaYryBcInRydWVcIiDmiJYgXCJmYWxzZVwiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MAorbXNnaWQgInZhbHVlIGlzIGRlY2ltYWwgbnVtYmVyIgorbXNnc3RyICLlgLzmmK/ljYHpgLLkvY3mlbgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUxCittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICLlgLzmmK8gLS1ib29sIG9yIC0taW50IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MgorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgIuWAvOaYr+S4gOWAi+i3r+W+ke+8iOaqlOahiOaIluebrumMhOWQje+8iSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTMKK21zZ2lkICJ2YWx1ZSBpcyBhbiBleHBpcnkgZGF0ZSIKK21zZ3N0ciAi5YC85piv5LiA5YCL5Yiw5pyf5pel5pyfIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NAorbXNnaWQgIk90aGVyIgorbXNnc3RyICLlhbblroMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU1Cittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICLntYLmraLlgLzmmK8gTlVMIOS9jeWFg+e1hCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTYKK21zZ2lkICJzaG93IHZhcmlhYmxlIG5hbWVzIG9ubHkiCittc2dzdHIgIuWPqumhr+ekuuiuiuaVuOWQjSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTcKK21zZ2lkICJyZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcyBvbiBsb29rdXAiCittc2dzdHIgIuafpeipouaZguWPg+eFpyBpbmNsdWRlIOaMh+S7pOmBnui/tOWwi+aJviIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTgKK21zZ2lkICJzaG93IG9yaWdpbiBvZiBjb25maWcgKGZpbGUsIHN0YW5kYXJkIGlucHV0LCBibG9iLCBjb21tYW5kIGxpbmUpIgorbXNnc3RyICLpoa/npLroqK3lrprnmoTkvobmupDvvIjmqpTmoYjjgIHmqJnmupbovLjlhaXjgIHos4fmlpnnianku7bvvIzmiJbmjIfku6TliJfvvIkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU5Cittc2dpZCAic2hvdyBzY29wZSBvZiBjb25maWcgKHdvcmt0cmVlLCBsb2NhbCwgZ2xvYmFsLCBzeXN0ZW0sIGNvbW1hbmQpIgorbXNnc3RyICIiCisi6aGv56S66Kit5a6a5qqU55qE5L2c55So5Z+fICjlt6XkvZzljYAgd29ya3RyZWXjgIHmnKzmqZ8gbG9jYWzjgIHlhajln58gZ2xvYmFs44CB57O757WxIHN5c3RlbeOAgeaMhyIKKyLku6QgY29tbWFuZCkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTYwIGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MAorbXNnaWQgInZhbHVlIgorbXNnc3RyICLlj5blgLwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTYwCittc2dpZCAid2l0aCAtLWdldCwgdXNlIGRlZmF1bHQgdmFsdWUgd2hlbiBtaXNzaW5nIGVudHJ5IgorbXNnc3RyICLkvb/nlKggLS1nZXQg5L2G5pyq5oyH5a6a5Y+D5pW45pmC5omA5L2/55So55qE6aCQ6Kit5YC8IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgJWQiCittc2dzdHIgIumMr+iqpOeahOWPg+aVuOWAi+aVuO+8jOaHieipsueCuiAlZCDlgIsiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIHNob3VsZCBiZSBmcm9tICVkIHRvICVkIgorbXNnc3RyICLpjK/oqqTnmoTlj4PmlbjlgIvmlbjvvIzmh4noqbLngrrlvp4gJWQg5YCL5YiwICVkIOWAiyIKKworIzogYnVpbHRpbi9jb25maWcuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgIueEoeaViOmNteWQjeaooeW8j++8miVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZm9ybWF0IGRlZmF1bHQgY29uZmlnIHZhbHVlOiAlcyIKK21zZ3N0ciAi5qC85byP5YyW6aCQ6Kit6Kit5a6a5YC85aSx5pWX77yaJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBjb2xvciAnJXMnIgorbXNnc3RyICLnhKHms5Xop6PmnpDpoY/oibIgJyVzJyIKKworIzogYnVpbHRpbi9jb25maWcuYzo0NTkKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAi54Sh5rOV6Kej5p6Q6aCQ6Kit6aGP6Imy5YC8IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUxMiBidWlsdGluL2NvbmZpZy5jOjc2OAorbXNnaWQgIm5vdCBpbiBhIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIuS4jeWcqCBnaXQg54mI5pys5bqr5LitIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUxNQorbXNnaWQgIndyaXRpbmcgdG8gc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi5LiN5pSv5o+05a+r5Yiw5qiZ5rqW6Ly45YWlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUxOAorbXNnaWQgIndyaXRpbmcgY29uZmlnIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIuS4jeaUr+aPtOWvq+WIsOioreWumuizh+aWmeeJqeS7tiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiMgVGhpcyBpcyBHaXQncyBwZXItdXNlciBjb25maWd1cmF0aW9uIGZpbGUuXG4iCisiW3VzZXJdXG4iCisiIyBQbGVhc2UgYWRhcHQgYW5kIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKK21zZ3N0ciAiIgorIiMgVGhpcyBpcyBHaXQncyBwZXItdXNlciBjb25maWd1cmF0aW9uIGZpbGUuXG4iCisiW3VzZXJdXG4iCisiIyBQbGVhc2UgYWRhcHQgYW5kIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MjcKK21zZ2lkICJvbmx5IG9uZSBjb25maWcgZmlsZSBhdCBhIHRpbWUiCittc2dzdHIgIuS4gOasoeWPquiDveacieS4gOWAi+ioreWumuaqlOahiCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MzIKK21zZ2lkICItLWxvY2FsIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tbG9jYWwg5Y+q6IO95Zyo5LiA5YCL54mI5pys5bqr5YWn5L2/55SoIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYzNQorbXNnaWQgIi0tYmxvYiBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLWJsb2Ig5Y+q6IO95Zyo5LiA5YCL54mI5pys5bqr5YWn5L2/55SoIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1NQorbXNnaWQgIiRIT01FIG5vdCBzZXQiCittc2dzdHIgIiRIT01FIOacquioreWumiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NzkKK21zZ2lkICIiCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgorbXNnc3RyICIiCisi5LiN6IO95ZKM5aSa5YCL5bel5L2c5Y2A5LiA6LW35L2/55SoIC0td29ya3RyZWXvvIzpmaTpnZ7llZ/nlKggd29ya3RyZWVDb25maWcg6Kit5a6a5pO05bGV44CCXG4iCisi6Kmz5oOF6KuL6Zax6K6A44CMZ2l0IGhlbHAgd29ya3RyZWXjgI3nmoTjgIxDT05GSUdVUkFUSU9OIEZJTEXjgI3lsI/nr4AiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzE0Cittc2dpZCAiLS1nZXQtY29sb3IgYW5kIHZhcmlhYmxlIHR5cGUgYXJlIGluY29oZXJlbnQiCittc2dzdHIgIi0tZ2V0LWNvbG9yIOWSjOiuiuaVuOmhnuWei+S4jeebuOWuuSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTkKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICLkuIDmrKHlj6rog73mnInkuIDlgIvli5XkvZwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzMyCittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIi0tbmFtZS1vbmx5IOWDhemBqeeUqOaWvCAtLWxpc3Qg5oiWIC0tZ2V0LXJlZ2V4cCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzgKK21zZ2lkICIiCisiLS1zaG93LW9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwLCBhbmQgLS0iCisibGlzdCIKK21zZ3N0ciAiLS1zaG93LW9yaWdpbiDlg4XpgannlKjmlrwgLS1nZXTjgIEtLWdldC1hbGzjgIEtLWdldC1yZWdleHAg5ZKMIC0tbGlzdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDQKK21zZ2lkICItLWRlZmF1bHQgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0IgorbXNnc3RyICItLWRlZmF1bHQg5YOF6YGp55So5pa8IC0tZ2V0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIgorbXNnc3RyICLnhKHms5XoroDlj5boqK3lrprmqpTmoYggJyVzJyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NjAKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGNvbmZpZyBmaWxlKHMpIgorbXNnc3RyICLomZXnkIboqK3lrprmqpTmoYjnmbznlJ/pjK/oqqQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzcwCittc2dpZCAiZWRpdGluZyBzdGRpbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICLkuI3mlK/mj7Tnt6jovK/mqJnmupbovLjlhaUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzcyCittc2dpZCAiZWRpdGluZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICLkuI3mlK/mj7Tnt6jovK/os4fmlpnnianku7YiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICLkuI3og73lu7rnq4voqK3lrprmqpTmoYggJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3Qgb3ZlcndyaXRlIG11bHRpcGxlIHZhbHVlcyB3aXRoIGEgc2luZ2xlIHZhbHVlXG4iCisiICAgICAgIFVzZSBhIHJlZ2V4cCwgLS1hZGQgb3IgLS1yZXBsYWNlLWFsbCB0byBjaGFuZ2UgJXMuIgorbXNnc3RyICIiCisi54Sh5rOV55So5LiA5YCL5YC86KaG6JOL5aSa5YCL5YC8XG4iCisiICAgICAgIOS9v+eUqOS4gOWAi+ato+imj+ihqOekuuW8j+OAgS0tYWRkIOaIliAtLXJlcGxhY2UtYWxsIOS+huS/ruaUuSAlc+OAgiIKKworIzogYnVpbHRpbi9jb25maWcuYzo4NzMgYnVpbHRpbi9jb25maWcuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBzZWN0aW9uOiAlcyIKK21zZ3N0ciAi54Sh5q2k5bCP56+A77yaJXMiCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjkwCittc2dpZCAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKK21zZ3N0ciAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6MTAwCittc2dpZCAicHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0IgorbXNnc3RyICLku6Xkvb/nlKjogIXlj6/oroDnmoTmoLzlvI/poa/npLrlpKflsI8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNgorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs86YG46aCFPl0gWzzmj5DkuqTomZ8+Li4uXSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIC0tZGlydHkiCittc2dzdHIgImdpdCBkZXNjcmliZSBbPOmBuOmghT5dIC0tZGlydHkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImhlYWQiCittc2dzdHIgIumgrSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAibGlnaHR3ZWlnaHQiCittc2dzdHIgIui8lemHj+e0mueahCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiYW5ub3RhdGVkIgorbXNnc3RyICLpmYToqLvnmoQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICLpmYToqLvmqJnnsaQgJXMg54Sh5pWIIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgIumZhOiou+aomeexpCAlcyDmspLmnInltYzlhaXlkI3nqLEiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAi5qiZ57GkICclcycg55qE56K65piv5ZyoICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICLmspLmnInmqJnnsaTmupbnorrnrKblkIggJyVzJyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJObyBleGFjdCBtYXRjaCBvbiByZWZzIG9yIHRhZ3MsIHNlYXJjaGluZyB0byBkZXNjcmliZVxuIgorbXNnc3RyICLmspLmnInnsr7norrnrKblkIjliLDlvJXnlKjmiJbmqJnnsaTvvIznubznuozmkJzlsIvpgLLooYzmj4/ov7BcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAi5a6M5oiQ5pCc5bCLICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKyLmspLmnInpmYToqLvmqJnnsaTog73mj4/ov7AgJyVzJ+OAglxuIgorIueEtuiAjO+8jOWtmOWcqOacqumZhOiou+aomeexpO+8muWYl+ippiAtLXRhZ3PjgIIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorIuaykuacieaomeexpOiDveaPj+i/sCAnJXMn44CCXG4iCisi5ZiX6KmmIC0tYWx3YXlz77yM5oiW6ICF5bu656uL5LiA5Lqb5qiZ57Gk44CCIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICLlt7LpgY3mrbcgJWx1IOWAi+aPkOS6pFxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorIueZvOePvuWkmuaWvCAlaSDlgIvmqJnnsaTvvIzliJflh7rmnIDov5HnmoQgJWkg5YCLXG4iCisi5ZyoICVzIOaUvuajhOaQnOWwi1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc2NyaWJlICVzXG4iCittc2dzdHIgIuaPj+i/sCAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLkuI3mmK/kuIDlgIvmnInmlYjnmoTnianku7blkI0gJXMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbmVpdGhlciBhIGNvbW1pdCBub3IgYmxvYiIKK21zZ3N0ciAiJXMg5pei5LiN5piv5o+Q5Lqk5Lmf5LiN5piv6LOH5paZ54mp5Lu2IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUxCittc2dpZCAiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIKK21zZ3N0ciAi5bCL5om+6Kmy5o+Q5Lqk5LmL5b6M55qE5qiZ57GkIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUyCittc2dpZCAiZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVyciIKK21zZ3N0ciAi5Zyo5qiZ5rqW6Yyv6Kqk5LiK6Zmk6Yyv5pCc5bCL562W55WlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUzCittc2dpZCAidXNlIGFueSByZWYiCittc2dzdHIgIuS9v+eUqOS7u+aEj+W8leeUqCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NAorbXNnaWQgInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIgorbXNnc3RyICLkvb/nlKjku7vmhI/mqJnnsaTvvIzljbPkvb/mnKrpmYTluLblgpnoqLsiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTUKK21zZ2lkICJhbHdheXMgdXNlIGxvbmcgZm9ybWF0IgorbXNnc3RyICLlp4vntYLkvb/nlKjplbfmj5DkuqTomZ/moLzlvI8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTYKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgIuWPqui3n+maqOesrOS4gOWAi+eItuaPkOS6pCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1OQorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgIuWPqui8uOWHuueyvueiuuespuWQiCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2MQorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgIuiAg+aFruacgOi/kSA8bj4g5YCL5qiZ57Gk77yI6aCQ6Kit77yaMTDvvIkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NjMKK21zZ2lkICJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLlj6rogIPmha7nrKblkIggPOaooeW8jz4g55qE5qiZ57GkIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY1Cittc2dpZCAiZG8gbm90IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLkuI3ogIPmha7nrKblkIggPOaooeW8jz4g55qE5qiZ57GkIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY3IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzUKK21zZ2lkICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siCittc2dzdHIgIumhr+ekuuewoeWvq+eahOaPkOS6pOiZn+S9nOeCuuW+jOWCmSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2OCBidWlsdGluL2Rlc2NyaWJlLmM6NTcxCittc2dpZCAibWFyayIKK21zZ3N0ciAi5qiZ6KiYIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTY5Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICLlsI3mlrzpq5Llt6XkvZzljYDvvIzov73liqAgPOaomeiomD7vvIjpoJDoqK3vvJpcIi1kaXJ0eVwi77yJIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTcyCittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBicm9rZW4gd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1icm9rZW5cIikiCittc2dzdHIgIuWwjeaWvOaQjeWjnueahOW3peS9nOWNgO+8jOi/veWKoCA85qiZ6KiYPu+8iOmgkOiore+8mlwiLWJyb2tlblwi77yJIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTkwCittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIi0tbG9uZyDoiIcgLS1hYmJyZXY9MCDkuI3nm7jlrrkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MTkKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAi5rKS5pyJ55m854++5ZCN56ix77yM54Sh5rOV5o+P6L+w5Lu75L2V5p2x6KW/44CCIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjcwCittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tZGlydHkg6IiH5o+Q5Lqk6Jmf5LiN55u45a65IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjcyCittc2dpZCAiLS1icm9rZW4gaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWJyb2tlbiDoiIfmj5DkuqTomZ/kuI3nm7jlrrkiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICInJXMn77ya5LiN5piv5LiA5YCL5q2j6KaP5qqU5qGI5oiW56ym6Jmf6YCj57WQIgorCisjOiBidWlsdGluL2RpZmYuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcHRpb246ICVzIgorbXNnc3RyICLnhKHmlYjpgbjpoIXvvJolcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzUwCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIuS4jeaYr+S4gOWAiyBnaXQg54mI5pys5bqrIgorCisjOiBidWlsdGluL2RpZmYuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIuaPkOS+m+S6hueEoeaViOeJqeS7tiAnJXMn44CCIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIHR3byBibG9icyBnaXZlbjogJyVzJyIKK21zZ3N0ciAi5o+Q5L6b5LqG6LaF6YGO5YWp5YCL6LOH5paZ54mp5Lu277yaJyVzJyIKKworIzogYnVpbHRpbi9kaWZmLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIueEoeazleiZleeQhueahOeJqeS7tiAnJXMn44CCIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAKK21zZ2lkICJnaXQgZGlmZnRvb2wgWzxvcHRpb25zPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBkaWZmdG9vbCBbPOmBuOmghT5dIFs85o+Q5LqkPiBbPOaPkOS6pD5dXSBbLS1dIFs86Lev5b6RPi4uLl0iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkOiAlZCIKK21zZ3N0ciAi5aSx5pWX77yaJWQiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+W56ym6Jmf6YCj57WQICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgZmlsZSAlcyIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+W56ym6Jmf6YCj57WQ5qqU5qGIICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyBmb3Igc3ltbGluayAlcyIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+W56ym6Jmf6YCj57WQICUyJHMg5oyH5ZCR55qE54mp5Lu2ICUxJHMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo0MTMKK21zZ2lkICIiCisiY29tYmluZWQgZGlmZiBmb3JtYXRzKCctYycgYW5kICctLWNjJykgYXJlIG5vdCBzdXBwb3J0ZWQgaW5cbiIKKyJkaXJlY3RvcnkgZGlmZiBtb2RlKCctZCcgYW5kICctLWRpci1kaWZmJykuIgorbXNnc3RyICIiCisi5LiN5pSv5o+05Zyo55uu6YyE5q+U6LyD5qih5byP77yIJy1kJyDlkowgJy0tZGlyLWRpZmYn77yJ5Lit5o6h55So57WE5ZCI5beu55Ww5qC85byP77yIJy1jJyDlkowgJy0tIgorImNjJ++8ieOAgiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJib3RoIGZpbGVzIG1vZGlmaWVkOiAnJXMnIGFuZCAnJXMnLiIKK21zZ3N0ciAi5YWp5YCL5qqU5qGI6YO96KKr5L+u5pS577yaJyVzJyDlkowgJyVzJ+OAgiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNgorbXNnaWQgIndvcmtpbmcgdHJlZSBmaWxlIGhhcyBiZWVuIGxlZnQuIgorbXNnc3RyICLlt6XkvZzljYDmqpTmoYjooqvnlZnkuobkuIvkvobjgIIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcG9yYXJ5IGZpbGVzIGV4aXN0IGluICclcycuIgorbXNnc3RyICLmmqvlrZjmqpTlrZjlnKjmlrwgJyVzJ+OAgiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0OAorbXNnaWQgInlvdSBtYXkgd2FudCB0byBjbGVhbnVwIG9yIHJlY292ZXIgdGhlc2UuIgorbXNnc3RyICLmgqjlj6/og73mg7PopoHmuIXnkIbmiJbogIXlvqnljp/lroPlgJHjgIIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTcKK21zZ2lkICJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIKK21zZ3N0ciAi5L2/55SoIGBkaWZmLmd1aXRvb2xgIOS7o+abvyBgZGlmZi50b29sYCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5OQorbXNnaWQgInBlcmZvcm0gYSBmdWxsLWRpcmVjdG9yeSBkaWZmIgorbXNnc3RyICLln7fooYzkuIDlgIvlhajnm67pjITlt67nlbDmr5TovIMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDEKK21zZ2lkICJkbyBub3QgcHJvbXB0IGJlZm9yZSBsYXVuY2hpbmcgYSBkaWZmIHRvb2wiCittc2dzdHIgIuWVn+WLleW3rueVsOavlOi8g+W3peWFt+S5i+WJjeS4jeaPkOekuiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNgorbXNnaWQgInVzZSBzeW1saW5rcyBpbiBkaXItZGlmZiBtb2RlIgorbXNnc3RyICLlnKggZGlyLWRpZmYg5qih5byP5Lit5L2/55So56ym6Jmf6YCj57WQIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA3Cittc2dpZCAidG9vbCIKK21zZ3N0ciAi5bel5YW3IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA4Cittc2dpZCAidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIgorbXNnc3RyICLkvb/nlKjmjIflrprnmoTlt67nlbDmr5TovIPlt6XlhbciCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTAKK21zZ2lkICJwcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggYC0tdG9vbGAiCittc2dzdHIgIumhr+ekuuWPr+S7peeUqOWcqCBgLS10b29sYCDlj4PmlbjlvoznmoTlt67nlbDlt6XlhbfliJfooagiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTMKK21zZ2lkICIiCisibWFrZSAnZ2l0LWRpZmZ0b29sJyBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbiAtIHplcm8gZXhpdCAiCisiY29kZSIKK21zZ3N0ciAi55W25Z+36KGMIGRpZmYg5bel5YW36L+U5Zue6Z2e6Zu26Zui6ZaL56K85pmC77yM5L2/ICdnaXQtZGlmZnRvb2wnIOmboumWiyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxNgorbXNnaWQgInNwZWNpZnkgYSBjdXN0b20gY29tbWFuZCBmb3Igdmlld2luZyBkaWZmcyIKK21zZ3N0ciAi5oyH5a6a5LiA5YCL55So5pa85qqi6KaW5beu55Ww55qE6Ieq6KiC5oyH5LukIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE3Cittc2dpZCAicGFzc2VkIHRvIGBkaWZmYCIKK21zZ3N0ciAi5YKz6YGe57WmIGBkaWZmYCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjczMgorbXNnaWQgImRpZmZ0b29sIHJlcXVpcmVzIHdvcmt0cmVlIG9yIC0tbm8taW5kZXgiCittc2dzdHIgImRpZmZ0b29sIOimgeaxguW3peS9nOWNgOaIluiAhSAtLW5vLWluZGV4IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzM5Cittc2dpZCAiLS1kaXItZGlmZiBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICItLWRpci1kaWZmIOWSjCAtLW5vLWluZGV4IOS4jeebuOWuuSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc0MgorbXNnaWQgIi0tZ3VpLCAtLXRvb2wgYW5kIC0tZXh0Y21kIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tZ3Vp44CBLS10b29sIOWSjCAtLWV4dGNtZCDkupLmlqUiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NTAKK21zZ2lkICJubyA8dG9vbD4gZ2l2ZW4gZm9yIC0tdG9vbD08dG9vbD4iCittc2dzdHIgIuaykuacieeCuiAtLXRvb2w9POW3peWFtz4g5Y+D5pW45o+Q5L6bIDzlt6Xlhbc+IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzU3Cittc2dpZCAibm8gPGNtZD4gZ2l2ZW4gZm9yIC0tZXh0Y21kPTxjbWQ+IgorbXNnc3RyICLmspLmnInngrogLS1leHRjbWQ9POaMh+S7pD4g5Y+D5pW45o+Q5L6bIDzmjIfku6Q+IgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NgorbXNnaWQgImdpdCBlbnYtLWhlbHBlciAtLXR5cGU9W2Jvb2x8dWxvbmddIDxvcHRpb25zPiA8ZW52LXZhcj4iCittc2dzdHIgImdpdCBlbnYtLWhlbHBlciAtLXR5cGU9W2Jvb2x8dWxvbmddIDzpgbjpoIU+IDznkrDlooPorormlbg+IgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6MzcgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAidHlwZSIKK21zZ3N0ciAi6aGe5Z6LIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NDEKK21zZ2lkICJkZWZhdWx0IGZvciBnaXRfZW52XyooLi4uKSB0byBmYWxsIGJhY2sgb24iCittc2dzdHIgImdpdF9lbnZfKiguLi4pIOeahOmgkOioreWAvCIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQzCittc2dpZCAiYmUgcXVpZXQgb25seSB1c2UgZ2l0X2Vudl8qKCkgdmFsdWUgYXMgZXhpdCBjb2RlIgorbXNnc3RyICLlronpnZzmqKHlvI/vvIzlj6rkvb/nlKggZ2l0X2Vudl8qKCkg55qE5YC85L2c54K66Zui6ZaL56K8IgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYSBib29sZWFuIHZhbHVlIHdpdGggYC0tdHlwZT1ib29sYCwgbm90IGAlc2AiCittc2dzdHIgIumBuOmghSBgLS1kZWZhdWx0JyDlkowgYHR5cGU9Ym9vbGAg5pyf5pyb5LiA5YCL5biD5p6X5YC877yM5LiN5pivIGAlc2AiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYW4gdW5zaWduZWQgbG9uZyB2YWx1ZSB3aXRoIGAtLXR5cGU9dWxvbmdgLCBub3QgYCIKKyIlc2AiCittc2dzdHIgIumBuOmghSBgLS1kZWZhdWx0JyDlkowgYHR5cGU9dWxvbmdgIOacn+acm+S4gOWAi+eEoeespuiZn+mVt+aVtOWei++8jOS4jeaYryBgJXNgIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjkKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6ODUzCittc2dpZCAiRXJyb3I6IENhbm5vdCBleHBvcnQgbmVzdGVkIHRhZ3MgdW5sZXNzIC0tbWFyay10YWdzIGlzIHNwZWNpZmllZC4iCittc2dzdHIgIumMr+iqpO+8mumZpOmdnuaMh+WumiAtLW1hcmstdGFnc++8jOWQpuWJh+eEoeazleWMr+WHuuW1jOWll+aomeexpOOAgiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTIKK21zZ2lkICJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIgorbXNnc3RyICLlnKggPG4+IOWAi+eJqeS7tuS5i+W+jOmhr+ekuumAsuW6piIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTQKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgIumBuOaTh+WmguS9leiZleeQhuewveWQjeaomeexpCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTcKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgdGFncyB0aGF0IHRhZyBmaWx0ZXJlZCBvYmplY3RzIgorbXNnc3RyICLpgbjmk4fnlbbmqJnnsaTmjIflkJHooqvpgY7mv77nianku7bmmYLoqbLmqJnnsaTnmoTomZXnkIbmlrnlvI8iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYwCittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIGNvbW1pdCBtZXNzYWdlcyBpbiBhbiBhbHRlcm5hdGUgZW5jb2RpbmciCittc2dzdHIgIumBuOaTh+S9v+eUqOWCmeeUqOe3qOeivOiZleeQhuaPkOS6pOiqquaYjiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjMKK21zZ2lkICJEdW1wIG1hcmtzIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAi5oqK5qiZ6KiY5YSy5a2Y5Yiw6YCZ5YCL5qqU5qGIIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2NQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSIKK21zZ3N0ciAi5b6e6YCZ5YCL5qqU5qGI5Yyv5YWl5qiZ6KiYIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSBpZiBpdCBleGlzdHMiCittc2dzdHIgIuW+nuipsuaqlOahiOWMr+WFpeaomeiomO+8iOWmguaenOWtmOWcqOeahOipse+8iSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzEKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAi55W25qiZ57Gk57y65bCR5qiZ6KiY6ICF5qyE5L2N5pmC77yM5YGH6KOd5o+Q5L6b5LiA5YCLIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3MworbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICLmr4/mrKHmj5DkuqTpg73ovLjlh7rmlbTlgIvmqLkiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc1Cittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgIuS9v+eUqCBkb25lIOWKn+iDveS+hue1guatoua1gSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzYKK21zZ2lkICJTa2lwIG91dHB1dCBvZiBibG9iIGRhdGEiCittc2dzdHIgIui3s+mBjuizh+aWmeeJqeS7tueahOi8uOWHuiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzcgYnVpbHRpbi9sb2cuYzoxNzA1Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAi5byV55So6KaP5qC8IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OAorbXNnaWQgIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIKK21zZ3N0ciAi5bCN5Yyv5Ye655qE5byV55So5oeJ55So5byV55So6KaP5qC8IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OQorbXNnaWQgImFub255bWl6ZSBvdXRwdXQiCittc2dzdHIgIuWMv+WQjei8uOWHuiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODEKK21zZ2lkICJSZWZlcmVuY2UgcGFyZW50cyB3aGljaCBhcmUgbm90IGluIGZhc3QtZXhwb3J0IHN0cmVhbSBieSBvYmplY3QgaWQiCittc2dzdHIgIuW8leeUqOeItueJqeS7tiBJRCDkuI3lnKggZmFzdC1leHBvcnQg5rWB5LitIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MworbXNnaWQgIlNob3cgb3JpZ2luYWwgb2JqZWN0IGlkcyBvZiBibG9icy9jb21taXRzIgorbXNnc3RyICLpoa/npLros4fmlpnnianku7Yv5o+Q5Lqk55qE5Y6f5aeL54mp5Lu2IElEIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4NQorbXNnaWQgIkxhYmVsIHRhZ3Mgd2l0aCBtYXJrIGlkcyIKK21zZ3N0ciAi5bCN5bi25pyJ5qiZ6KiYIElEIOeahOaomeexpOWBmuaomeiomCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEyMjAKK21zZ2lkICJDYW5ub3QgcGFzcyBib3RoIC0taW1wb3J0LW1hcmtzIGFuZCAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHMiCittc2dzdHIgIuS4jeiDveWQjOaZguWCs+mBnuWPg+aVuCAtLWltcG9ydC1tYXJrcyDlkowgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzQKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBmZXRjaCBbPOmBuOmghT5dIFs854mI5pys5bqrPiBbPOW8leeUqOimj+agvD4uLi5dXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cD4iCittc2dzdHIgImdpdCBmZXRjaCBbPOmBuOmghT5dIDzntYQ+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MzYKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzzpgbjpoIU+XSBbKDzniYjmnKzluqs+IHwgPOe1hD4pLi4uXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM3Cittc2dpZCAiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1hbGwgWzzpgbjpoIU+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNgorbXNnaWQgImZldGNoLnBhcmFsbGVsIGNhbm5vdCBiZSBuZWdhdGl2ZSIKK21zZ3N0ciAiZmV0Y2gucGFyYWxsZWwg5LiN6IO954K66LKg5pW4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM5IGJ1aWx0aW4vcHVsbC5jOjE4NAorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIuW+nuaJgOacieeahOmBoOerr+aKk+WPliIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MSBidWlsdGluL3B1bGwuYzoyMjgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL2ZldGNoIgorbXNnc3RyICLngrogZ2l0IHB1bGwvZmV0Y2gg6Kit5a6a5LiK5ri4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzIGJ1aWx0aW4vcHVsbC5jOjE4NworbXNnaWQgImFwcGVuZCB0byAuZ2l0L0ZFVENIX0hFQUQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyIKK21zZ3N0ciAi6L+95Yqg5YiwIC5naXQvRkVUQ0hfSEVBRCDogIzkuI3mmK/opobok4vlroMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDUgYnVpbHRpbi9wdWxsLmM6MTkwCittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICLkuIrlgrPljIXliLDpgaDnq6/nmoTot6/lvpEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDYKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgcmVmZXJlbmNlIgorbXNnc3RyICLlvLfliLbopobok4vmnKzmqZ/lvJXnlKgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDgKK21zZ2lkICJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiCittc2dzdHIgIuW+nuWkmuWAi+mBoOerr+aKk+WPliIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MCBidWlsdGluL3B1bGwuYzoxOTQKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICLmipPlj5bmiYDmnInnmoTmqJnnsaTlkozpl5zoga/nianku7YiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTIKK21zZ2lkICJkbyBub3QgZmV0Y2ggYWxsIHRhZ3MgKC0tbm8tdGFncykiCittc2dzdHIgIuS4jeaKk+WPluS7u+S9leaomeexpCgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU0Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgZmV0Y2hlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAi5a2Q5qih57WE5Y+W5b6X55qE5Lim55m85pW4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2IGJ1aWx0aW4vcHVsbC5jOjE5NworbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICLmuIXpmaTpgaDnq6/lt7LntpPkuI3lrZjlnKjnmoTliIbmlK/nmoTov73ouaTliIbmlK8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTgKK21zZ2lkICJwcnVuZSBsb2NhbCB0YWdzIG5vIGxvbmdlciBvbiByZW1vdGUgYW5kIGNsb2JiZXIgY2hhbmdlZCB0YWdzIgorbXNnc3RyICLmuIXpmaTpgaDnq6/kuI3lrZjlnKjnmoTmnKzmqZ/mqJnnsaTvvIzkuKbkuJTlj5bku6Porormm7TmqJnnsaQiCisKKyMgIOitr+iAhe+8muWPr+mBuOWAvO+8jOS4jeiDvee/u+itrworIzogYnVpbHRpbi9mZXRjaC5jOjE1OSBidWlsdGluL2ZldGNoLmM6MTgyIGJ1aWx0aW4vcHVsbC5jOjEyMQorbXNnaWQgIm9uLWRlbWFuZCIKK21zZ3N0ciAib24tZGVtYW5kIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYwCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAi5o6n5Yi25a2Q5qih57WE55qE6YGe6L+05oqT5Y+WIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY0IGJ1aWx0aW4vcHVsbC5jOjIwNQorbXNnaWQgImtlZXAgZG93bmxvYWRlZCBwYWNrIgorbXNnc3RyICLkv53mjIHkuIvovInljIUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjYKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAi5YWB6Kix5pu05pawIEhFQUQg5byV55SoIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY5IGJ1aWx0aW4vZmV0Y2guYzoxNzUgYnVpbHRpbi9wdWxsLmM6MjA4Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAi5rex5YyW5re66KSH6KO955qE5q235Y+yIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcxCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyByZXBvc2l0b3J5IGJhc2VkIG9uIHRpbWUiCittc2dzdHIgIuWfuuaWvOaZgumWk+S+hua3seWMlua3uuikh+ijveeahOatt+WPsiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NyBidWlsdGluL3B1bGwuYzoyMTEKK21zZ2lkICJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi6L2J5o+b54K65LiA5YCL5a6M5pW055qE54mI5pys5bqrIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwCittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAi5Zyo5a2Q5qih57WE6Lev5b6R6Ly45Ye655qE5YmN6Z2i5Yqg5LiK5q2k55uu6YyEIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgzCittc2dpZCAiIgorImRlZmF1bHQgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIChsb3dlciBwcmlvcml0eSB0aGFuIGNvbmZpZyAiCisiZmlsZXMpIgorbXNnc3RyICLpgZ7ov7Tlj5blvpflrZDmqKHntYTnmoTpoJDoqK3lgLzvvIjmr5ToqK3lrprmqpTmoYjlhKrlhYjluqbkvY7vvIkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODcgYnVpbHRpbi9wdWxsLmM6MjE0Cittc2dpZCAiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IgorbXNnc3RyICLmjqXlj5fmm7TmlrAgLmdpdC9zaGFsbG93IOeahOW8leeUqCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OCBidWlsdGluL3B1bGwuYzoyMTYKK21zZ2lkICJyZWZtYXAiCittc2dzdHIgIuW8leeUqOaYoOWwhCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OSBidWlsdGluL3B1bGwuYzoyMTcKK21zZ2lkICJzcGVjaWZ5IGZldGNoIHJlZm1hcCIKK21zZ3N0ciAi5oyH5a6a5Y+W5b6X5YuV5L2c55qE5byV55So5pig5bCEIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk2Cittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgIuWgseWRiuaIkeWAkeWPquaTgeacieW+nuipsueJqeS7tumWi+Wni+WPr+S7peWPluW+l+eahOeJqeS7tiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5OQorbXNnaWQgInJ1biAnZ2MgLS1hdXRvJyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAi5Y+W5b6X5b6M5Z+36KGMICdnYyAtLWF1dG8nIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAxIGJ1aWx0aW4vcHVsbC5jOjIyNgorbXNnaWQgImNoZWNrIGZvciBmb3JjZWQtdXBkYXRlcyBvbiBhbGwgdXBkYXRlZCBicmFuY2hlcyIKK21zZ3N0ciAi5Zyo5omA5pyJ5pu05paw5YiG5pSv5LiK5qqi5p+l5by35Yi25pu05pawIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAzCittc2dpZCAid3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAi5oqT5Y+W5b6M5a+r5YWl5YiG5pSv5ZyWIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEzCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIueEoeazleeZvOePvumBoOerryBIRUFEIOW8leeUqCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWd1cmF0aW9uIGZldGNoLm91dHB1dCBjb250YWlucyBpbnZhbGlkIHZhbHVlICVzIgorbXNnc3RyICLoqK3lrprorormlbggZmV0Y2gub3V0cHV0IOWMheWQq+eEoeaViOWAvCAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1MQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICLnianku7YgJXMg5pyq55m854++IgorCisjOiBidWlsdGluL2ZldGNoLmM6NzU1Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJb5pyA5pawXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2OCBidWlsdGluL2ZldGNoLmM6Nzg0IGJ1aWx0aW4vZmV0Y2guYzo4NTYKK21zZ2lkICJbcmVqZWN0ZWRdIgorbXNnc3RyICJb5bey5ouS57WVXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2OQorbXNnaWQgImNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICLnm67liY3liIbmlK/kuIvkuI3og73ln7fooYzlj5blvpfli5XkvZwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzkKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIlvmqJnnsaTmm7TmlrBdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzgwIGJ1aWx0aW4vZmV0Y2guYzo4MTcgYnVpbHRpbi9mZXRjaC5jOjgzOQorIzogYnVpbHRpbi9mZXRjaC5jOjg1MQorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICLkuI3og73mm7TmlrDmnKzmqZ/lvJXnlKgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODQKK21zZ2lkICJ3b3VsZCBjbG9iYmVyIGV4aXN0aW5nIHRhZyIKK21zZ3N0ciAi5pyD56C05aOe54++5pyJ55qE5qiZ57GkIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODA2Cittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICJb5paw5qiZ57GkXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwOQorbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW+aWsOWIhuaUr10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MTIKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIlvmlrDlvJXnlKhdIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAi5by35Yi25pu05pawIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAi6Z2e5b+r6L2JIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODc3Cittc2dpZCAiIgorIkZldGNoIG5vcm1hbGx5IGluZGljYXRlcyB3aGljaCBicmFuY2hlcyBoYWQgYSBmb3JjZWQgdXBkYXRlLFxuIgorImJ1dCB0aGF0IGNoZWNrIGhhcyBiZWVuIGRpc2FibGVkLiBUbyByZS1lbmFibGUsIHVzZSAnLS1zaG93LWZvcmNlZC11cGRhdGVzJ1xuIgorImZsYWcgb3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIHRydWUnLiIKK21zZ3N0ciAiIgorIuWPluW+l+WLleS9nOmAmuW4uOmhr+ekuuWTquS6m+WIhuaUr+eZvOeUn+S6huW8t+WItuabtOaWsO+8jOS9huipsuaqouafpeW3suiiq+emgeeUqOOAglxuIgorIuimgemHjeaWsOWVn+eUqO+8jOiri+S9v+eUqCAnLS1zaG93LWZvcmNlZC11cGRhdGVzJyDpgbjpoIXmiJbln7fooYxcbiIKKyInZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJ+OAgiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gY2hlY2sgZm9yY2VkIHVwZGF0ZXMuIFlvdSBjYW4gdXNlXG4iCisiJy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcycgb3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzICIKKyJmYWxzZSdcbiIKKyIgdG8gYXZvaWQgdGhpcyBjaGVjay5cbiIKK21zZ3N0ciAiIgorIuiKseS6hiAlLjJmIOenkuS+huaqouafpeW8t+WItuabtOaWsOOAguaCqOWPr+S7peS9v+eUqCAnLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJ1xuIgorIuaIluWft+ihjCAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyBmYWxzZScg5Lul6YG/5YWN5q2k6aCF5qqi5p+l44CCXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIlcyDmnKrlgrPpgIHmiYDmnInlv4XpnIDnmoTnianku7ZcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk0MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWplY3QgJXMgYmVjYXVzZSBzaGFsbG93IHJvb3RzIGFyZSBub3QgYWxsb3dlZCB0byBiZSB1cGRhdGVkIgorbXNnc3RyICLmi5LntZUgJXMg5Zug54K65re66KSH6KO95LiN5YWB6Kix6KKr5pu05pawIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAyNiBidWlsdGluL2ZldGNoLmM6MTE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAi5L6G6IeqICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorIuS4gOS6m+acrOapn+W8leeUqOS4jeiDveiiq+abtOaWsO+8m+WYl+ippuWft+ihjFxuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycg5L6G5Yiq6Zmk6IiK55qE44CB5pyJ6KGd56qB55qE5YiG5pSvIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgIO+8iCVzIOWwh+aIkOeCuuaHuOepuueLgOaFi++8iSIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiBidWlsdGluL2ZldGNoLmM6MTEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgIO+8iCVzIOW3suaIkOeCuuaHuOepuueLgOaFi++8iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNjcKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIlvlt7LliKrpmaRdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2OCBidWlsdGluL3JlbW90ZS5jOjExMTIKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIu+8iOeEoe+8iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyBvZiBub24tYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICLmi5LntZXlj5blvpfliLDpnZ7ntJTniYjmnKzluqvnmoTnm67liY3liIbmlK8gJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIumBuOmghSBcIiVzXCIg55qE5YC8IFwiJXNcIiDlsI3mlrwgJXMg5piv54Sh5pWI55qEIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgIumBuOmghSBcIiVzXCIg54K6ICVzIOaJgOW/veeVpVxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQyMQorbXNnaWQgIm11bHRpcGxlIGJyYW5jaGVzIGRldGVjdGVkLCBpbmNvbXBhdGlibGUgd2l0aCAtLXNldC11cHN0cmVhbSIKK21zZ3N0ciAi5qqi5ris5Yiw5aSa5YiG5pSv77yM5ZKMIC0tc2V0LXVwc3RyZWFtIOS4jeebuOWuuSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzYKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi5rKS5pyJ54K65LiA5YCL6YGg56uv6L+96Lmk5YiG5pSv6Kit5a6a5LiK5ri4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzOAorbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSB0YWciCittc2dzdHIgIuaykuacieeCuuS4gOWAi+mBoOerr+aomeexpOioreWumuS4iua4uCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NDAKK21zZ2lkICJ1bmtub3duIGJyYW5jaCB0eXBlIgorbXNnc3RyICLmnKrnn6XnmoTliIbmlK/poZ7lnosiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDQyCittc2dpZCAiIgorIm5vIHNvdXJjZSBicmFuY2ggZm91bmQuXG4iCisieW91IG5lZWQgdG8gc3BlY2lmeSBleGFjdGx5IG9uZSBicmFuY2ggd2l0aCB0aGUgLS1zZXQtdXBzdHJlYW0gb3B0aW9uLiIKK21zZ3N0ciAiIgorIuacqueZvOePvua6kOWIhuaUr+OAglxuIgorIuaCqOmcgOimgeS9v+eUqCAtLXNldC11cHN0cmVhbSDpgbjpoIXmjIflrprkuIDlgIvliIbmlK/jgIIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTY4IGJ1aWx0aW4vZmV0Y2guYzoxNjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIuato+WcqOWPluW+lyAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU3OCBidWlsdGluL2ZldGNoLmM6MTYzMyBidWlsdGluL3JlbW90ZS5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgIuS4jeiDveWPluW+lyAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZldGNoICclcycgKGV4aXQgY29kZTogJWQpXG4iCittc2dzdHIgIueEoeazleWPluW+lyAnJXMn77yI6Zui6ZaL56K877yaJWTvvIlcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2OTMKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAi5pyq5oyH5a6a6YGg56uv54mI5pys5bqr44CC6KuL6YCP6YGO5LiA5YCLIFVSTCDmiJbpgaDnq6/niYjmnKzluqvlkI3mjIflrprvvIznlKjku6Xlj5blvpfmlrDmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzMwCittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAi5oKo6ZyA6KaB5oyH5a6a5LiA5YCL5qiZ57Gk5ZCN56ix44CCIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc4MAorbXNnaWQgIk5lZ2F0aXZlIGRlcHRoIGluIC0tZGVlcGVuIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIi0tZGVlcGVuIOS4jeaUr+aPtOiyoOaVuOa3seW6piIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODIKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWRlZXBlbiDlkowgLS1kZXB0aCDmmK/kupLmlqXnmoQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzg3Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi0tZGVwdGgg5ZKMIC0tdW5zaGFsbG93IOS4jeiDveWQjOaZguS9v+eUqCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODkKK21zZ2lkICItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi5bCN5pa85LiA5YCL5a6M5pW055qE54mI5pys5bqr77yM5Y+D5pW4IC0tdW5zaGFsbG93IOaykuacieaEj+e+qSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MDUKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwg5LiN6IO95bi25LiA5YCL54mI5pys5bqr5Y+D5pW4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwNworbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwg5bi25byV55So6KaP5qC85rKS5pyJ5Lu75L2V5oSP576pIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICLmspLmnInpgJnmqKPnmoTpgaDnq6/miJbpgaDnq6/ntYTvvJolcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MjMKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIuWPluW+l+e1hOS4puaMh+WumuW8leeUqOimj+agvOaykuacieaEj+e+qSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NDEKK21zZ2lkICIiCisiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyJwYXJ0aWFsY2xvbmUiCittc2dzdHIgIuWPquWPr+S7peWwhyAtLWZpbHRlciDnlKjmlrzlnKggZXh0ZW5zaW9ucy5wYXJ0aWFsQ2xvbmUg5Lit6Kit5a6a55qE6YGg56uv54mI5pys5bqrIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzoxOAorbXNnaWQgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8ZmlsZT5dIgorbXNnc3RyICJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPOiqquaYjj5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDzmqpTmoYg+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcxCittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICLlkJHmj5DkuqToqqrmmI7kuK3mnIDlpJropIfoo73mjIflrprmop3nm67vvIjlkIjkvbXogIzkvobnmoTmj5DkuqTvvInnmoTnsKHnn63oqqrmmI4iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NAorbXNnaWQgImFsaWFzIGZvciAtLWxvZyAoZGVwcmVjYXRlZCkiCittc2dzdHIgIuWPg+aVuCAtLWxvZyDnmoTliKXlkI3vvIjlt7Lmo4TnlKjvvIkiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NworbXNnaWQgInRleHQiCittc2dzdHIgIuaWh+WtlyIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc4Cittc2dpZCAidXNlIDx0ZXh0PiBhcyBzdGFydCBvZiBtZXNzYWdlIgorbXNnc3RyICLkvb/nlKggPOaWh+Wtlz4g5L2c54K65o+Q5Lqk6Kqq5piO55qE6ZaL5aeLIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzkKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAi5b6e5qqU5qGI5Lit6K6A5Y+WIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbPOmBuOmghT5dIFs85qih5byPPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTEKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDznianku7Y+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMgorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbW1pdD5dXSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs85o+Q5LqkPl1dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEzCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPGNvbW1pdD5dXSBbLS1uby1jb250YWlucyBbPGNvbW1pdD5dXSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPOaPkOS6pD5dXSBbLS1uby1jb250YWlucyBbPOaPkOS6pD5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIgorbXNnc3RyICLlvJXnlKjljaDkvY3nrKbpgannlKjmlrwgc2hlbGxzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMwCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBwZXJsIgorbXNnc3RyICLlvJXnlKjljaDkvY3nrKbpgannlKjmlrwgcGVybCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICLlvJXnlKjljaDkvY3nrKbpgannlKjmlrwgcHl0aG9uIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM0Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBUY2wiCittc2dzdHIgIuW8leeUqOWNoOS9jeespumBqeeUqOaWvCBUY2wiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzcKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAi5Y+q6aGv56S6IDxuPiDlgIvnrKblkIjnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzkgYnVpbHRpbi90YWcuYzo0MzkKK21zZ2lkICJyZXNwZWN0IGZvcm1hdCBjb2xvcnMiCittc2dzdHIgIumBteeFp+agvOW8j+S4reeahOmhj+iJsui8uOWHuiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBwb2ludHMgYXQgdGhlIGdpdmVuIG9iamVjdCIKK21zZ3N0ciAi5Y+q5YiX5Y2w5oyH5ZCR5o+Q5L6b54mp5Lu255qE5byV55SoIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ0Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAi5Y+q5YiX5Y2w5bey57aT5ZCI5L2155qE5byV55SoIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ1Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgIuWPquWIl+WNsOaykuacieWQiOS9teeahOW8leeUqCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIuWPquWIl+WNsOWMheWQq+ipsuaPkOS6pOeahOW8leeUqCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NworbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIuWPquWIl+WNsOS4jeWMheWQq+ipsuaPkOS6pOeahOW8leeUqCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjggYnVpbHRpbi9mc2NrLmM6MTQ3IGJ1aWx0aW4vZnNjay5jOjE0OAorbXNnaWQgInVua25vd24iCittc2dzdHIgIuacquefpSIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTAwIGJ1aWx0aW4vZnNjay5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiAlcyAlczogJXMiCittc2dzdHIgIiVzICVzIOmMr+iqpO+8miVzIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiB3YXJuaW5nIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nIGluICVzICVzOiAlcyIKK21zZ3N0ciAiJXMgJXMg6K2m5ZGK77yaJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE0MyBidWlsdGluL2ZzY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXMiCittc2dzdHIgIuS+huiHqiAlN3MgJXMg55qE5pCN5aOe55qE6YCj57WQIgorCisjOiBidWlsdGluL2ZzY2suYzoxNTUKK21zZ2lkICJ3cm9uZyBvYmplY3QgdHlwZSBpbiBsaW5rIgorbXNnc3RyICLpgKPntZDkuK3pjK/oqqTnmoTnianku7bpoZ7lnosiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgIHRvICU3cyAlcyIKK21zZ3N0ciAiIgorIuaQjeWjnueahOmAo+e1kOS+huiHquaWvCAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgIOWIsCAlN3MgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzICVzIgorbXNnc3RyICLnvLrlsJEgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlYWNoYWJsZSAlcyAlcyIKK21zZ3N0ciAi54Sh5rOV5Y+W5b6XICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGFuZ2xpbmcgJXMgJXMiCittc2dzdHIgIuaHuOepuiAlcyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzM5Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsb3N0LWZvdW5kIgorbXNnc3RyICLkuI3og73lu7rnq4sgbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggJyVzJyIKK21zZ3N0ciAi5LiN6IO95a6M5oiQICclcyciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyIKK21zZ3N0ciAi5q2j5Zyo5qqi5p+lICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5ICglZCBvYmplY3RzKSIKK21zZ3N0ciAi5q2j5Zyo5qqi5p+l6YCj6YCa5oCn77yIJWQg5YCL54mp5Lu277yJIgorCisjOiBidWlsdGluL2ZzY2suYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMgJXMiCittc2dzdHIgIuato+WcqOaqouafpSAlcyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDI5Cittc2dpZCAiYnJva2VuIGxpbmtzIgorbXNnc3RyICLmkI3lo57nmoTpgKPntZAiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJyb290ICVzIgorbXNnc3RyICLmoLkgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWdnZWQgJXMgJXMgKCVzKSBpbiAlcyIKK21zZ3N0ciAi5qiZ6KiYICVzICVzICglcykg5pa8ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3NpbmciCittc2dzdHIgIiVz77ya54mp5Lu25pCN5aOe5oiW6YG65aSxIgorCisjOiBidWlsdGluL2ZzY2suYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgcmVmbG9nIGVudHJ5ICVzIgorbXNnc3RyICIlc++8mueEoeaViOeahOW8leeUqOaXpeiqjOaineebriAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlZmxvZyAlcy0+JXMiCittc2dzdHIgIuato+WcqOaqouafpeW8leeUqOaXpeiqjCAlcy0+JXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgJXMiCittc2dzdHIgIiVz77ya54Sh5pWI55qEIHNoYTEg5oyH5qiZICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiJXPvvJrkuI3mmK/kuIDlgIvmj5DkuqQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYwOQorbXNnaWQgIm5vdGljZTogTm8gZGVmYXVsdCByZWZlcmVuY2VzIgorbXNnc3RyICLms6jmhI/vvJrnhKHpoJDoqK3lvJXnlKgiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZzogJXMiCittc2dzdHIgIiVz77ya54mp5Lu25pCN5aOe5oiW6YG65aSx77yaJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICVzIgorbXNnc3RyICIlc++8muS4jeiDveino+aekOeJqeS7tu+8miVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNoYTEgZmlsZTogJXMiCittc2dzdHIgIuWjnueahCBzaGExIOaqlOahiO+8miVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzIKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3J5IgorbXNnc3RyICLmraPlnKjmqqLmn6Xnianku7bnm67pjIQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3NQorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIKK21zZ3N0ciAi5q2j5Zyo5qqi5p+l54mp5Lu255uu6YyEIgorCisjOiBidWlsdGluL2ZzY2suYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMgbGluayIKK21zZ3N0ciAi5q2j5Zyo5qqi5p+lICVzIOmAo+e1kCIKKworIzogYnVpbHRpbi9mc2NrLmM6Njk1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICLnhKHmlYjnmoQgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIKK21zZ3N0ciAiJXMg5oyH5ZCR5aWH5oCq55qE5p2x6KW/77yIJXPvvIkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZGV0YWNoZWQgSEVBRCBwb2ludHMgYXQgbm90aGluZyIKK21zZ3N0ciAiJXPvvJrliIbpm6LplovpoK3mjIfmqJnnmoTmjIflkJHkuI3lrZjlnKgiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RpY2U6ICVzIHBvaW50cyB0byBhbiB1bmJvcm4gYnJhbmNoICglcykiCittc2dzdHIgIuazqOaEj++8miVzIOaMh+WQkeS4gOWAi+WwmuacquiqleeUn+eahOWIhuaUr++8iCVz77yJIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjQKK21zZ2lkICJDaGVja2luZyBjYWNoZSB0cmVlIgorbXNnc3RyICLmraPlnKjmqqLmn6Xlv6vlj5bmqLkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAiJXPvvJpjYWNoZS10cmVlIOS4reeEoeaViOeahCBzaGExIOaMh+aomSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzM4Cittc2dpZCAibm9uLXRyZWUgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAiY2FjaGUtdHJlZSDkuK3pnZ7mqLnni4Dnianku7YiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc2OQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs86YG46aCFPl0gWzznianku7Y+Li4uXSIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc1Cittc2dpZCAic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLpoa/npLrnhKHms5Xlj5blvpfnmoTnianku7YiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NgorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAi6aGv56S65oe456m655qE54mp5Lu2IgorCisjOiBidWlsdGluL2ZzY2suYzo3NzcKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAi5aCx5ZGK5qiZ57GkIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzgKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAi5aCx5ZGK5qC556+A6bueIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzkKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAi5bCH57Si5byV5Lqm5L2c54K65qqi5p+l55qE6aCt56+A6bueIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODAKK21zZ2lkICJtYWtlIHJlZmxvZ3MgaGVhZCBub2RlcyAoZGVmYXVsdCkiCittc2dzdHIgIuWwh+W8leeUqOaXpeiqjOS9nOeCuuaqouafpeeahOmgreevgOm7nu+8iOmgkOiore+8iSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgxCittc2dpZCAiYWxzbyBjb25zaWRlciBwYWNrcyBhbmQgYWx0ZXJuYXRlIG9iamVjdHMiCittc2dzdHIgIuS5n+iAg+aFruWMheWSjOWCmeeUqOeJqeS7tiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgyCittc2dpZCAiY2hlY2sgb25seSBjb25uZWN0aXZpdHkiCittc2dzdHIgIuWDheaqouafpemAo+mAmuaApyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgzCittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICLllZ/nlKjmm7TlmrTmoLznmoTmqqLmn6UiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NQorbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICLlsIfmh7jnqbrnianku7blr6vlhaUgLmdpdC9sb3N0LWZvdW5kIOS4rSIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg2IGJ1aWx0aW4vcHJ1bmUuYzoxMzIKK21zZ2lkICJzaG93IHByb2dyZXNzIgorbXNnc3RyICLpoa/npLrpgLLluqYiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NworbXNnaWQgInNob3cgdmVyYm9zZSBuYW1lcyBmb3IgcmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIumhr+ekuuWPr+S7peWPluW+l+eJqeS7tueahOips+e0sOWQjeeosSIKKworIzogYnVpbHRpbi9mc2NrLmM6ODQ2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyNQorbXNnaWQgIkNoZWNraW5nIG9iamVjdHMiCittc2dzdHIgIuato+WcqOaqouafpeeJqeS7tiIKKworIzogYnVpbHRpbi9mc2NrLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgbWlzc2luZyIKK21zZ3N0ciAiJXPvvJrnianku7bnvLrlsJEiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlcjogZXhwZWN0ZWQgc2hhMSwgZ290ICclcyciCittc2dzdHIgIueEoeaViOeahOWPg+aVuO+8muacn+acmyBzaGEx77yM5b6X5YiwICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzozNQorbXNnaWQgImdpdCBnYyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGdjIFs86YG46aCFPl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZnN0YXQgJXM6ICVzIgorbXNnc3RyICLlsI0gJXMg5ZG85Y+rIGZzdGF0IOWkseaVl++8miVzIgorCisjOiBidWlsdGluL2djLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAnJXMnIHZhbHVlICclcyciCittc2dzdHIgIueEoeazleino+aekCAnJXMnIOWAvCAnJXMnIgorCisjOiBidWlsdGluL2djLmM6NDc1IGJ1aWx0aW4vaW5pdC1kYi5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgIuS4jeiDveWwjSAnJXMnIOWRvOWPqyBzdGF0IgorCisjOiBidWlsdGluL2djLmM6NDg0IGJ1aWx0aW4vbm90ZXMuYzoyNDAgYnVpbHRpbi90YWcuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAi5LiN6IO96K6A5Y+WICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBsYXN0IGdjIHJ1biByZXBvcnRlZCB0aGUgZm9sbG93aW5nLiBQbGVhc2UgY29ycmVjdCB0aGUgcm9vdCBjYXVzZVxuIgorImFuZCByZW1vdmUgJXMuXG4iCisiQXV0b21hdGljIGNsZWFudXAgd2lsbCBub3QgYmUgcGVyZm9ybWVkIHVudGlsIHRoZSBmaWxlIGlzIHJlbW92ZWQuXG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyLmnIDlvozkuIDmrKEgZ2Mg5YuV5L2c5aCx5ZGK5aaC5LiL6KiK5oGv44CC6KuL5qqi5p+l5Y6f5Zug5Lim5Yiq6ZmkICVz44CCXG4iCisi5Zyo6Kmy5qqU5qGI6KKr5Yiq6Zmk5LmL5YmN77yM6Ieq5YuV5riF55CG5bCH5LiN5pyD5Z+36KGM44CCXG4iCisiXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1MzkKK21zZ2lkICJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAi5riF6Zmk5pyq5byV55So55qE54mp5Lu2IgorCisjOiBidWlsdGluL2djLmM6NTQxCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICLmm7TlvrnlupXvvIjlop7liqDln7fooYzmmYLplpPvvIkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICLllZ/nlKjoh6rli5XlnoPlnL7lm57mlLbmqKHlvI8iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDUKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAi5by35Yi25Z+36KGMIGdjIOWNs+S9v+WPpuWkluS4gOWAiyBnYyDmraPlnKjln7fooYwiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDgKK21zZ2lkICJyZXBhY2sgYWxsIG90aGVyIHBhY2tzIGV4Y2VwdCB0aGUgbGFyZ2VzdCBwYWNrIgorbXNnc3RyICLpmaTkuobmnIDlpKfnmoTljIXkuYvlpJbvvIzlsI3miYDmnInlhbblroPljIXmqpTmoYjph43mlrDmiZPljIUiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGdjLmxvZ2V4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAi6Kej5p6QIGdjLmxvZ2V4cGlyeSDnmoTlgLwgJXMg5aSx5pWXIgorCisjOiBidWlsdGluL2djLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBwcnVuZSBleHBpcnkgdmFsdWUgJXMiCittc2dzdHIgIuino+aekOa4hemZpOacn+mZkOWAvCAlcyDlpLHmlZciCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGluIGJhY2tncm91bmQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIuiHquWLleWcqOW+jOWPsOWft+ihjOeJiOacrOW6q+aJk+WMheS7peaxguacgOS9s+aAp+iDveOAglxuIgorCisjOiBidWlsdGluL2djLmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAi6Ieq5YuV5omT5YyF54mI5pys5bqr5Lul5rGC5pyA5L2z5oCn6IO944CCXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIKK21zZ3N0ciAi5omL5YuV57at6K235Y+D6KaLIFwiZ2l0IGhlbHAgZ2NcIuOAglxuIgorCisjOiBidWlsdGluL2djLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnYyBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gbWFjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBpZiBub3QpIgorbXNnc3RyICJnYyDlt7LlnKjjgIwlc+OAjeapn+WZqCBwaWQgJTxQUkl1TUFYPiDln7fooYzvvIjlpoLmnpzkuI3mmK/vvIzkvb/nlKggLS1mb3JjZe+8iSIKKworIzogYnVpbHRpbi9nYy5jOjY5NAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAi5pyJ5aSq5aSa54Sh5rOV5Y+W5b6X55qE6ayG5pWj54mp5Lu277yM5Z+36KGMICdnaXQgcHJ1bmUnIOWIqumZpOWug+WAkeOAgiIKKworIzogYnVpbHRpbi9ncmVwLmM6MzAKK21zZ2lkICJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBncmVwIFs86YG46aCFPl0gWy1lXSA85qih5byPPiBbPOeJiOacrD4uLi5dIFtbLS1dIDzot6/lvpE+Li4uXSIKKworIzogYnVpbHRpbi9ncmVwLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiZ3JlcO+8mueEoeazleW7uueri+Wft+ihjOe3ku+8miVzIgorCisjOiBidWlsdGluL2dyZXAuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSBmb3IgJXMiCittc2dzdHIgIueCuiAlMiRzIOioreWumueahOWft+ihjOe3kuaVuCAoJTEkZCkg54Sh5pWIIgorCisjLiBUUkFOU0xBVE9SUzogJXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24KKyMuIHZhcmlhYmxlIGZvciB0d2Vha2luZyB0aHJlYWRzLCBjdXJyZW50bHkKKyMuIGdyZXAudGhyZWFkcworIy4KKyM6IGJ1aWx0aW4vZ3JlcC5jOjI4NyBidWlsdGluL2luZGV4LXBhY2suYzoxNTM4IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MzEKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg1NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIgorbXNnc3RyICLmspLmnInln7fooYznt5LmlK/mj7TvvIzlv73nlaUgJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ1MyBidWlsdGluL2dyZXAuYzo1NzggYnVpbHRpbi9ncmVwLmM6NjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+W5qi577yIJXPvvIkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICLnhKHms5XmipPlj5bkvoboh6rmlrwgJXMg6aGe5Z6L55qE54mp5Lu2IgorCisjOiBidWlsdGluL2dyZXAuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAi6ZaL6ZecIGAlYycg5pyf5pyb5LiA5YCL5pW45a2X5YC8IgorCisjOiBidWlsdGluL2dyZXAuYzo4MDMKK21zZ2lkICJzZWFyY2ggaW4gaW5kZXggaW5zdGVhZCBvZiBpbiB0aGUgd29yayB0cmVlIgorbXNnc3RyICLlnKjntKLlvJXljYDmkJzlsIvogIzkuI3mmK/lnKjlt6XkvZzljYAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwNQorbXNnaWQgImZpbmQgaW4gY29udGVudHMgbm90IG1hbmFnZWQgYnkgZ2l0IgorbXNnc3RyICLlnKjmnKrooqsgZ2l0IOeuoeeQhueahOWFp+WuueS4reWwi+aJviIKKworIyAg6K2v6ICF77ya5Lit5paH5a2X5Liy5ou85o6l77yM5Y+v5Yiq6Zmk5YmN5bCO56m65qC8CisjOiBidWlsdGluL2dyZXAuYzo4MDcKK21zZ2lkICJzZWFyY2ggaW4gYm90aCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIuWcqOi/vei5pOWSjOacqui/vei5pOeahOaqlOahiOS4reaQnOWwiyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODA5Cittc2dpZCAiaWdub3JlIGZpbGVzIHNwZWNpZmllZCB2aWEgJy5naXRpZ25vcmUnIgorbXNnc3RyICLlv73nlaUgJy5naXRpZ25vcmUnIOWMheWQq+eahOaqlOahiCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODExCittc2dpZCAicmVjdXJzaXZlbHkgc2VhcmNoIGluIGVhY2ggc3VibW9kdWxlIgorbXNnc3RyICLlnKjmr4/kuIDlgIvlrZDmqKHntYTkuK3pgZ7ov7TmkJzlsIsiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNAorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICLpoa/npLrmnKrnrKblkIjnmoTooYwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNgorbXNnaWQgImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciCittc2dzdHIgIuS4jeWNgOWIhuWkp+Wwj+Wvq+espuWQiCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE4Cittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgIuWPquWcqOWWruipnumCiueVjOespuWQiOaooeW8jyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIwCittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAi5oqK5LqM6YCy5L2N5qqU5qGI55W25YGa5paH5a2X6JmV55CGIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjIKK21zZ2lkICJkb24ndCBtYXRjaCBwYXR0ZXJucyBpbiBiaW5hcnkgZmlsZXMiCittc2dzdHIgIuS4jeWcqOS6jOmAsuS9jeaqlOahiOS4reespuWQiOaooeW8jyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI1Cittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgd2l0aCB0ZXh0Y29udiBmaWx0ZXJzIgorbXNnc3RyICLnlKggdGV4dGNvbnYg6YGO5r++5Zmo6JmV55CG5LqM6YCy5L2N5qqU5qGIIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjcKK21zZ2lkICJzZWFyY2ggaW4gc3ViZGlyZWN0b3JpZXMgKGRlZmF1bHQpIgorbXNnc3RyICLlnKjlrZDnm67pjITkuK3lsIvmib7vvIjpoJDoqK3vvIkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyOQorbXNnaWQgImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIKK21zZ3N0ciAi5pyA5aSa5Lul5oyH5a6a55qE5rex5bqm5ZCR5LiL5bCL5om+IgorCisjOiBidWlsdGluL2dyZXAuYzo4MzMKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAi5L2/55So5pO05bGV55qEIFBPU0lYIOato+imj+ihqOekuuW8jyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM2Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICLkvb/nlKjln7rmnKznmoQgUE9TSVgg5q2j6KaP6KGo56S65byP77yI6aCQ6Kit77yJIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzkKK21zZ2lkICJpbnRlcnByZXQgcGF0dGVybnMgYXMgZml4ZWQgc3RyaW5ncyIKK21zZ3N0ciAi5oqK5qih5byP6Kej5p6Q54K65Zu65a6a55qE5a2X5LiyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDIKK21zZ2lkICJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgIuS9v+eUqCBQZXJsIOebuOWuueeahOato+imj+ihqOekuuW8jyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ1Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgIumhr+ekuuihjOiZnyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ2Cittc2dpZCAic2hvdyBjb2x1bW4gbnVtYmVyIG9mIGZpcnN0IG1hdGNoIgorbXNnc3RyICLpoa/npLrnrKzkuIDlgIvnrKblkIjnmoTliJfomZ8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NworbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICLkuI3poa/npLrmqpTmoYjlkI0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0OAorbXNnaWQgInNob3cgZmlsZW5hbWVzIgorbXNnc3RyICLpoa/npLrmqpTmoYjlkI0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgIumhr+ekuuebuOWwjeaWvOmggue0muebrumMhOeahOaqlOahiOWQjSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODUyCittc2dpZCAic2hvdyBvbmx5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICLlj6rpoa/npLrmqpTmoYjlkI3ogIzkuI3poa/npLrnrKblkIjnmoTooYwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorbXNnc3RyICLlkowgLS1maWxlcy13aXRoLW1hdGNoZXMg5ZCM576pIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTcKK21zZ2lkICJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giCittc2dzdHIgIuWPqumhr+ekuuacquespuWQiOeahOaqlOahiOWQjSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU5Cittc2dpZCAicHJpbnQgTlVMIGFmdGVyIGZpbGVuYW1lcyIKK21zZ3N0ciAi5Zyo5qqU5qGI5ZCN5b6M6Ly45Ye6IE5VTCDlrZflhYMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MgorbXNnaWQgInNob3cgb25seSBtYXRjaGluZyBwYXJ0cyBvZiBhIGxpbmUiCittc2dzdHIgIuWPqumhr+ekuuihjOS4reeahOespuWQiOeahOmDqOWIhiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY0Cittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAi6aGv56S657i956ym5ZCI6KGM5pW477yM6ICM5LiN6aGv56S656ym5ZCI55qE6KGMIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjUKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAi6auY5Lqu6aGv56S656ym5ZCI6aCFIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjcKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAi5Zyo5LiN5ZCM5qqU5qGI55qE56ym5ZCI6aCF5LmL6ZaT5YiX5Y2w56m66KGMIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjkKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICLlj6rlnKjlkIzkuIDmqpTmoYjnmoTnrKblkIjpoIXnmoTkuIrpnaLpoa/npLrkuIDmrKHmqpTmoYjlkI0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3MgorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICLpoa/npLrnrKblkIjpoIXliY3lvoznmoQgPG4+IOihjOS4iuS4i+aWhyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc1Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAi6aGv56S656ym5ZCI6aCF5YmNIDxuPiDooYzkuIrkuIvmlociCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NworbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAi6aGv56S656ym5ZCI6aCF5b6MIDxuPiDooYzkuIrkuIvmlociCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3OQorbXNnaWQgInVzZSA8bj4gd29ya2VyIHRocmVhZHMiCittc2dzdHIgIuS9v+eUqCA8bj4g5YCL5bel5L2c5Z+36KGM57eSIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODAKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICLlv6vmjbfpjbUgLUMg5pW45a2XIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODMKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICLlnKjnrKblkIjnmoTliY3pnaLpoa/npLrkuIDooYzlh73mlbjlkI0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4NQorbXNnaWQgInNob3cgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIgorbXNnc3RyICLpoa/npLrmiYDlnKjlh73mlbjnmoTliY3lvozlhaflrrkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4OAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIgorbXNnc3RyICLlvp7mqpTmoYjoroDlj5bmqKHlvI8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MAorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAi56ym5ZCIIDzmqKHlvI8+IgorCisjOiBidWlsdGluL2dyZXAuYzo4OTIKK21zZ2lkICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIgorbXNnc3RyICLntYTlkIjnlKggLWUg5Y+D5pW46Kit5a6a55qE5qih5byPIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDQKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAi5LiN6Ly45Ye677yM6ICM55So6Zui6ZaL56K85qiZ6KiY5ZG95Lit54uA5oWLIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDYKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hlcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2ggYWxsIHBhdHRlcm5zIgorbXNnc3RyICLlj6rpoa/npLrnrKblkIjmiYDmnInmqKHlvI/nmoTmqpTmoYjkuK3nmoTnrKblkIgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwOAorbXNnaWQgInNob3cgcGFyc2UgdHJlZSBmb3IgZ3JlcCBleHByZXNzaW9uIgorbXNnc3RyICLpoa/npLogZ3JlcCDooajpgZTlvI/nmoTop6PmnpDmqLkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxMgorbXNnaWQgInBhZ2VyIgorbXNnc3RyICLliIbpoIEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxMgorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICLliIbpoIHpoa/npLrnrKblkIjnmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxNgorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAi5YWB6Kix5ZG85Y+rIGdyZXAoMSnvvIjmnKzmrKHmp4vlu7rlv73nlaXvvIkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk4MworbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4iCittc2dzdHIgIuacquaPkOS+m+espuWQiOaooeW8jyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAxOQorbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzIgorbXNnc3RyICItLW5vLWluZGV4IOaIliAtLXVudHJhY2tlZCDkuI3og73lkozniYjmnKzlkIzmmYLkvb/nlKgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgcmV2aXNpb246ICVzIgorbXNnc3RyICLkuI3og73op6PmnpDniYjmnKzvvJolcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA1NworbXNnaWQgIi0tdW50cmFja2VkIG5vdCBzdXBwb3J0ZWQgd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIKK21zZ3N0ciAiLS11bnRyYWNrZWQg5LiN5pSv5o+06IiHIC0tcmVjdXJzZS1zdWJtb2R1bGVzIOS4gOi1t+S9v+eUqCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2MQorbXNnaWQgImludmFsaWQgb3B0aW9uIGNvbWJpbmF0aW9uLCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgIueEoeaViOeahOmBuOmghee1hOWQiO+8jOW/veeVpSAtLXRocmVhZHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjQgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTQ3Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgIuaykuacieWft+ihjOe3kuaUr+aPtO+8jOW/veeVpSAtLXRocmVhZHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSIKK21zZ3N0ciAi5oyH5a6a55qE5Z+36KGM57eS5pW454Sh5pWI77yIJWTvvIkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMDEKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIi0tb3Blbi1maWxlcy1pbi1wYWdlciDlg4XnlKjmlrzlt6XkvZzljYAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMjcKK21zZ2lkICItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIi0tY2FjaGVkIOaIliAtLXVudHJhY2tlZCDkuI3og73oiIcgLS1uby1pbmRleCDlkIzmmYLkvb/nlKgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzMKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cyIKK21zZ3N0ciAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQg5LiN6IO955So5pa85bey6L+96Lmk5YWn5a65IgorCisjOiBidWlsdGluL2dyZXAuYzoxMTQxCittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuIgorbXNnc3RyICLlkIzmmYLntablh7rkuoYgLS1jYWNoZWQg5ZKM5qi554uA54mp5Lu2IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODUKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDzpoZ7lnos+XSBbLXddIFstLXBhdGg9POaqlOahiD4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA85qqU5qGIPi4uLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg2Cittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICLnianku7bpoZ7lnosiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLlsIfnianku7blr6vlhaXnianku7bos4fmlpnluqsiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDEKK21zZ2lkICJyZWFkIHRoZSBvYmplY3QgZnJvbSBzdGRpbiIKK21zZ3N0ciAi5b6e5qiZ5rqW6Ly45YWl6K6A5Y+W54mp5Lu2IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAzCittc2dpZCAic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiCittc2dzdHIgIuWOn+aoo+WEsuWtmOaqlOahiOS4jeS9v+eUqOmBjua/vuWZqCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNAorbXNnaWQgIiIKKyJqdXN0IGhhc2ggYW55IHJhbmRvbSBnYXJiYWdlIHRvIGNyZWF0ZSBjb3JydXB0IG9iamVjdHMgZm9yIGRlYnVnZ2luZyBHaXQiCittc2dzdHIgIuWFgeioseWwjeS7u+aEj+maqOapn+Weg+Wcvuizh+aWmeWBmuaVo+WIl+S+huW7uueri+aQjeWjnueahOeJqeS7tuS7peS+v+mZpOmMryBHaXQiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAi6JmV55CG5qqU5qGI5Lim5YGH6Kit5YW25L6G6Ieq5pa85q2k6Lev5b6RIgorCisjOiBidWlsdGluL2hlbHAuYzo0NgorbXNnaWQgInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiCittc2dzdHIgIuWIl+WNsOaJgOacieWPr+eUqOeahOaMh+S7pCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDcKK21zZ2lkICJleGNsdWRlIGd1aWRlcyIKK21zZ3N0ciAi5o6S6Zmk5Zqu5bCOIgorCisjOiBidWlsdGluL2hlbHAuYzo0OAorbXNnaWQgInByaW50IGxpc3Qgb2YgdXNlZnVsIGd1aWRlcyIKK21zZ3N0ciAi6aGv56S65pyJ55So55qE5oyH5Y2X5YiX6KGoIgorCisjOiBidWlsdGluL2hlbHAuYzo0OQorbXNnaWQgInByaW50IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIgorbXNnc3RyICLliJfljbDmiYDmnInoqK3lrprorormlbjlkI3nqLEiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUxCittc2dpZCAic2hvdyBtYW4gcGFnZSIKK21zZ3N0ciAi6aGv56S6IG1hbiDmiYvlhooiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUyCittc2dpZCAic2hvdyBtYW51YWwgaW4gd2ViIGJyb3dzZXIiCittc2dzdHIgIuWcqCB3ZWIg54CP6Ka95Zmo5Lit6aGv56S65omL5YaKIgorCisjOiBidWlsdGluL2hlbHAuYzo1NAorbXNnaWQgInNob3cgaW5mbyBwYWdlIgorbXNnc3RyICLpoa/npLogaW5mbyDmiYvlhooiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU2Cittc2dpZCAicHJpbnQgY29tbWFuZCBkZXNjcmlwdGlvbiIKK21zZ3N0ciAi5YiX5Y2w5oyH5Luk5o+P6L+wIgorCisjOiBidWlsdGluL2hlbHAuYzo2MQorbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iCittc2dzdHIgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzzmjIfku6Q+XSIKKworIzogYnVpbHRpbi9oZWxwLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgIuacquiDveitmOWIpeeahOWNlOWKqeagvOW8jyAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDQKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICLnhKHms5XllZ/li5UgZW1hY3NjbGllbnTjgIIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExNworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAi54Sh5rOV6Kej5p6QIGVtYWNzY2xpZW50IOeJiOacrOOAgiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iCittc2dzdHIgImVtYWNzY2xpZW50IOeJiOacrCAnJWQnIOWkquiAge+8iDwgMjLvvInjgIIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjE0MyBidWlsdGluL2hlbHAuYzoxNjUgYnVpbHRpbi9oZWxwLmM6MTc1IGJ1aWx0aW4vaGVscC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnIgorbXNnc3RyICLln7fooYwgJyVzJyDlpLHmlZciCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyfvvJrkuI3mlK/mj7TnmoQgbWFuIOaJi+WGiuaqouimluWZqOeahOi3r+W+keOAglxuIgorIuiri+S9v+eUqCAnbWFuLjzlt6Xlhbc+LmNtZCfjgIIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogY21kIGZvciBzdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMnOiDmlK/mj7TnmoQgbWFuIOaJi+WGiuaqouimluWZqOaMh+S7pOOAglxuIgorIuiri+S9v+eUqCAnbWFuLjzlt6Xlhbc+LnBhdGgn44CCIgorCisjOiBidWlsdGluL2hlbHAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAiJyVzJ++8muacquefpeeahCBtYW4g5qqi6KaW5Zmo44CCIgorCisjOiBidWlsdGluL2hlbHAuYzozNjcKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgIuaykuaciSBtYW4g5qqi6KaW5Zmo6JmV55CG5q2k6KuL5rGCIgorCisjOiBidWlsdGluL2hlbHAuYzozNzUKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICLmspLmnIkgaW5mbyDmqqLoppblmajomZXnkIbmraToq4vmsYIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNCBidWlsdGluL2hlbHAuYzo0NDUgZ2l0LmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxpYXNlZCB0byAnJXMnIgorbXNnc3RyICInJXMnIOaYryAnJXMnIOeahOWIpeWQjSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ4IGdpdC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIKK21zZ3N0ciAi5aOe55qEIGFsaWFzLiVzIOWtl+S4su+8miVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NzcgYnVpbHRpbi9oZWxwLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICLnlKjms5XvvJolcyVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0OTEKK21zZ2lkICInZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiJ2dpdCBoZWxwIGNvbmZpZycg5Y+W5b6X5pu05aSa6KiK5oGvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgIiVzIOeahOeJqeS7tumhnuWei+S4jeespuWQiCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgIuacquiDveWPluW+l+mgkOacn+eahOeJqeS7tiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiCittc2dzdHIgIueJqeS7tiAlc++8muaHieeCuumhnuWeiyAlc++8jOWNu+aYryAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICLnhKHms5XloavlhYUgJWQg5L2N5YWD57WEIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjgKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgIumBjuaXqeeahOaqlOahiOe1kOadn+espu+8iEVPRu+8iSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY5Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAi6Ly45YWl5LiK55qE6K6A6Yyv6KqkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODEKK21zZ2lkICJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIKK21zZ3N0ciAi55So5o6J5LqG6LaF6YGO5Y+v55So55qE5L2N5YWD57WEIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo2MDYKK21zZ2lkICJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IgorbXNnc3RyICLljIXlpKrlpKfotoXpgY7kuobnm67liY0gb2ZmX3Qg55qE5a6a576pIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTEgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjk1Cittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICLljIXotoXpgY7kuobmnIDlpKflhYHoqLHlgLwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICLnhKHms5XplovllZ8gcGFja2ZpbGUgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI2Cittc2dpZCAicGFjayBzaWduYXR1cmUgbWlzbWF0Y2giCittc2dzdHIgIuWMheewveWQjeS4jeespuWQiCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgIuS4jeaUr+aPtOWMheeJiOacrCAlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKK21zZ3N0ciAi5YyF5Lit5pyJ6Yyv6Kqk55qE54mp5Lu25L2N5pa85L2N56e76YePICU8UFJJdU1BWD7vvJolcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmxhdGUgcmV0dXJuZWQgJWQiCittc2dzdHIgIuino+Wjk+e4rui/lOWbniAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTE1Cittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAi5L2N56e75YC86KaG6JOL5LqGIGRlbHRhIOWfuua6lueJqeS7tiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIzCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICJkZWx0YSDln7rmupbkvY3np7votornlYwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICLmnKrnn6Xnianku7bpoZ7lnosgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2MgorbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgIueEoeazleiugOWPluWMheaqlOahiCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAi5YyF5qqU5qGI6YGO5pep57WQ5p2f77yM57y65bCRICU8UFJJdU1BWD4g5L2N5YWD57WEIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1OTAKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAi6Kej5aOT57iu5Zq06YeN55qE5LiN5LiA6Ie0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzUgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc2NQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgIueZvOePviAlcyDlh7rnj74gU0hBMSDooZ3nqoHvvIEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1OAorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIuS4jeiDveiugCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCBpbmZvICVzIgorbXNnc3RyICLkuI3og73oroDlj5bnj77lrZjnianku7boqIrmga8gJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgIuS4jeiDveiugOWPluePvuWtmOeJqeS7tiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvYiBvYmplY3QgJXMiCittc2dzdHIgIueEoeaViOeahOizh+aWmeeJqeS7tiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NgorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFja2VkIG9iamVjdCIKK21zZ3N0ciAi5bCN5omT5YyF54mp5Lu2IGZzY2sg5qqi5p+l55m855Sf6Yyv6KqkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgIiVzIOeahOaJgOacieWtkOeJqeS7tuS4pumdnumDveWPr+S7peWPluW+lyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTIwIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk1MQorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAi5oeJ55SoIGRlbHRhIOWkseaVlyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEyMQorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICLmjqXmlLbnianku7bkuK0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMjEKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICLntKLlvJXnianku7bkuK0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTUKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgIuWMheihneeqge+8iFNIQTEg5LiN56ym5ZCI77yJIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTYwCittc2dpZCAiY2Fubm90IGZzdGF0IHBhY2tmaWxlIgorbXNnc3RyICLkuI3og73lsI0gcGFja2ZpbGUg5ZG85Y+rIGZzdGF0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTYzCittc2dpZCAicGFjayBoYXMganVuayBhdCB0aGUgZW5kIgorbXNnc3RyICLljIXnmoTntZDlsL7mnInlnoPlnL7os4fmlpkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNzUKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICJwYXJzZV9wYWNrX29iamVjdHMoKSDkuK3pgYfliLDkuI3lj6/nkIbllrvnmoTllY/poYwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExOTgKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICLomZXnkIYgZGVsdGEg5LitIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjA4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgIuS4jeiDveW7uueri+Wft+ihjOe3ku+8miVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjQ5Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAi5LiN5Y+v55CG5Za7IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0clswXSAi5a6M5oiQICVkIOWAi+acrOapn+eJqeS7tiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHRhaWwgY2hlY2tzdW0gZm9yICVzIChkaXNrIGNvcnJ1cHRpb24/KSIKK21zZ3N0ciAi5bCNICVzIOeahOWwvumDqOe4veWSjOaqouafpeWHuuePvuaEj+Wklu+8iOejgeein+aQjeWjnu+8n++8iSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAi5YyF5pyJICVkIOWAi+acquino+axuueahCBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBhcHBlbmRlZCBvYmplY3QgKCVkKSIKK21zZ3N0ciAi5LiN6IO95aOT57iu6ZmE5Yqg54mp5Lu277yIJWTvvIkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgIuacrOapn+eJqeS7tiAlcyDlt7LmkI3lo54iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgInBhY2tmaWxlIOWQjeeosSAnJXMnIOaykuacieS7pSAnLnBhY2snIOe1kOWwviIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJXMgZmlsZSAnJXMnIgorbXNnc3RyICLnhKHms5Xlr6vlhaUgJXMg5qqU5qGIICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIHdyaXR0ZW4gJXMgZmlsZSAnJXMnIgorbXNnc3RyICLnhKHms5Xpl5zplonlt7Llr6vlhaXnmoQgJXMg5qqU5qGIICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NjMKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAi6Zec6ZaJ5YyF5qqU5qGI5pmC55m855Sf6Yyv6KqkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDc3Cittc2dpZCAiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIKK21zZ3N0ciAi54Sh5rOV5YSy5a2Y5YyF5qqU5qGIIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDg1Cittc2dpZCAiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiCittc2dzdHIgIueEoeazleWEsuWtmOe0ouW8leaqlOahiCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUyOSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAi5aOe55qEIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGZpbGUgJyVzJyIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWf54++5a2Y5YyF5qqU5qGIICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIKK21zZ3N0ciAi54Sh5rOV54K6ICVzIOmWi+WVn+WMhee0ouW8leaqlOahiCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJub24gZGVsdGE6ICVkIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAibm9uIGRlbHRhOiAlZCBvYmplY3RzIgorbXNnc3RyWzBdICLpnZ4gZGVsdGHvvJolZCDlgIvnianku7YiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAi6Y+I6ZW3ID0gJWQ6ICVsdSDnianku7YiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2OTMKK21zZ2lkICJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAi54Sh5rOV6L+U5Zue55uu5YmN5bel5L2c55uu6YyEIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzQyIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NDUKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NjEgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgIumMr+iqpOmBuOmghSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4MQorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluIOS4jeiDveWSjCAtLXN0ZGluIOWQjOaZguS9v+eUqCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4MworbXNnaWQgIi0tc3RkaW4gcmVxdWlyZXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1zdGRpbiDpnIDopoHkuIDlgIsgZ2l0IOeJiOacrOW6qyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4OQorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiLS12ZXJpZnkg5rKS5pyJ5o+Q5L6bIHBhY2tmaWxlIOWQjeeoseWPg+aVuCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTgzNyBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTgyCittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrIG9iamVjdHMiCittc2dzdHIgIuWcqOaJk+WMheeJqeS7tuS4rSBmc2NrIOaqouafpeeZvOeUn+mMr+iqpCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgdGVtcGxhdGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95bCN56+E5pysICclcycg5ZG85Y+rIHN0YXQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgIuS4jeiDvemWi+WVn+ebrumMhCAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAi5LiN6IO96K6A5Y+W6YCj57WQICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAi5LiN6IO96IeqICclcycg5YiwICclcycg5bu656uL56ym6Jmf6YCj57WQIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIuS4jeiDveikh+ijvSAnJXMnIOiHsyAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAi5b+955Wl56+E5pysICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCBpbiAlcyIKK21zZ3N0ciAi5rKS5pyJ5ZyoICVzIOS4reaJvuWIsOevhOacrCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBmcm9tICclcyc6ICVzIgorbXNnc3RyICLmspLmnInlvp4gJyVzJyDopIfoo73nr4TmnKzvvJolcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICLkuI3og73omZXnkIYgJWQg6aGe5Z6L55qE5qqU5qGIIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgIuS4jeiDveenu+WLlSAlcyDoh7MgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NCBidWlsdGluL2luaXQtZGIuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiVzIOW3sue2k+WtmOWcqCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAi6YeN5paw5Yid5aeL5YyW5bey5a2Y5Zyo55qE5YWx5LqrIEdpdCDniYjmnKzluqvmlrwgJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIumHjeaWsOWIneWni+WMluW3suWtmOWcqOeahCBHaXQg54mI5pys5bqr5pa8ICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIuW3suWIneWni+WMluepuueahOWFseS6qyBHaXQg54mI5pys5bqr5pa8ICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAi5bey5Yid5aeL5YyW56m655qEIEdpdCDniYjmnKzluqvmlrwgJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0NjgKK21zZ2lkICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPGRpcmVjdG9yeT5dIgorbXNnc3RyICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9POevhOacrOebrumMhD5dIFstLXNoYXJlZFs9POasiumZkD5dXSAiCisiWzznm67pjIQ+XSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkxCittc2dpZCAicGVybWlzc2lvbnMiCittc2dzdHIgIuasiumZkCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkyCittc2dpZCAic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIgorbXNnc3RyICLmjIflrpogZ2l0IOeJiOacrOW6q+aYr+WkmuWAi+S9v+eUqOiAheS5i+mWk+WFseS6q+eahCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTI5IGJ1aWx0aW4vaW5pdC1kYi5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgIuS4jeiDveW7uueri+ebrumMhCAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAi5LiN6IO95YiH5o+b55uu6YyE5YiwICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAi5LiN5YWB6KixICVz77yI5oiWIC0td29yay10cmVlPTznm67pjIQ+77yJ6ICM5rKS5pyJ5oyH5a6aICVz77yI5oiWIC0tZ2l0LWRpcj0855uu6YyEPu+8iSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgIuS4jeiDveWtmOWPluW3peS9nOWNgCAnJXMnIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjE2Cittc2dpZCAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyIDzpjbU+Wyg9fDopPOWAvCIKKyI+XSkuLi5dIFs85qqU5qGIPi4uLl0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTUKK21zZ2lkICJlZGl0IGZpbGVzIGluIHBsYWNlIgorbXNnc3RyICLlnKjljp/kvY3nt6jovK/mqpTmoYgiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTYKK21zZ2lkICJ0cmltIGVtcHR5IHRyYWlsZXJzIgorbXNnc3RyICLliKrpmaTnqbrnmoTlsL7pg6jnvbLlkI0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTkKK21zZ2lkICJ3aGVyZSB0byBwbGFjZSB0aGUgbmV3IHRyYWlsZXIiCittc2dzdHIgIuWcqOWTquijoeaUvue9ruaWsOeahOWwvumDqOe9suWQjSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDEKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi55W25bC+6YOo572y5ZCN5bey57aT5a2Y5Zyo5pmC5omA5o6h5Y+W55qE5YuV5L2cIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMworbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGlzIG1pc3NpbmciCittc2dzdHIgIueVtuWwvumDqOe9suWQjee8uuWwkeaZguaJgOaOoeWPlueahOWLleS9nCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDUKK21zZ2lkICJvdXRwdXQgb25seSB0aGUgdHJhaWxlcnMiCittc2dzdHIgIuWPqui8uOWHuuWwvumDqOe9suWQjSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDYKK21zZ2lkICJkbyBub3QgYXBwbHkgY29uZmlnIHJ1bGVzIgorbXNnc3RyICLkuI3opoHmh4nnlKjoqK3lrpropo/liYciCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA3Cittc2dpZCAiam9pbiB3aGl0ZXNwYWNlLWNvbnRpbnVlZCB2YWx1ZXMiCittc2dzdHIgIumAo+e3muepuueZveaKmOihjOeahOWAvCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDgKK21zZ2lkICJzZXQgcGFyc2luZyBvcHRpb25zIgorbXNnc3RyICLoqK3lrprop6PmnpDpgbjpoIUiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEwCittc2dpZCAiZG8gbm90IHRyZWF0IC0tLSBzcGVjaWFsbHkiCittc2dzdHIgIuS4jeimgeWwjSAtLS0g54m55q6K6JmV55CGIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMQorbXNnaWQgInRyYWlsZXIiCittc2dzdHIgIuWwvumDqOe9suWQjSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTIKK21zZ2lkICJ0cmFpbGVyKHMpIHRvIGFkZCIKK21zZ3N0ciAi6KaB5paw5aKe55qE5bC+6YOo572y5ZCNIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEyMworbXNnaWQgIi0tdHJhaWxlciB3aXRoIC0tb25seS1pbnB1dCBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLXRyYWlsZXIg5ZKMIC0tb25seS1pbnB1dCDlkIzmmYLkvb/nlKjmspLmnInmhI/nvqkiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTMzCittc2dpZCAibm8gaW5wdXQgZmlsZSBnaXZlbiBmb3IgaW4tcGxhY2UgZWRpdGluZyIKK21zZ3N0ciAi5rKS5pyJ57Wm5Ye66KaB5Y6f5L2N57eo6Lyv55qE5qqU5qGIIgorCisjOiBidWlsdGluL2xvZy5jOjU2Cittc2dpZCAiZ2l0IGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxvZyBbPOmBuOmghT5dIFs854mI5pys56+E5ZyNPl0gW1stLV0gPOi3r+W+kT4uLi5dIgorCisjOiBidWlsdGluL2xvZy5jOjU3Cittc2dpZCAiZ2l0IHNob3cgWzxvcHRpb25zPl0gPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCBzaG93IFs86YG46aCFPl0gPOeJqeS7tj4uLi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICLnhKHmlYjnmoQgLS1kZWNvcmF0ZSDpgbjpoIXvvJolcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzQKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAi6aGv56S65rqQIgorCisjOiBidWlsdGluL2xvZy5jOjE3NQorbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICLkvb/nlKjkv6Hku7bmmKDlsITmqpTmoYgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc3Cittc2dpZCAib25seSBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICLlj6rkv67po77oiIcgPOaooeW8jz4g56ym5ZCI55qE5byV55SoIgorCisjOiBidWlsdGluL2xvZy5jOjE3OQorbXNnaWQgImRvIG5vdCBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICLkuI3kv67po77lkowgPOaooeW8jz4g56ym5ZCI55qE5byV55SoIgorCisjOiBidWlsdGluL2xvZy5jOjE4MAorbXNnaWQgImRlY29yYXRlIG9wdGlvbnMiCittc2dzdHIgIuS/rumjvumBuOmghSIKKworIzogYnVpbHRpbi9sb2cuYzoxODMKK21zZ2lkICJQcm9jZXNzIGxpbmUgcmFuZ2UgbixtIGluIGZpbGUsIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAi6JmV55CG5qqU5qGI5Lit56ysIG4g5YiwIG0g5LmL6ZaT55qE6KGM77yM5b6eIDEg6ZaL5aeLIgorCisjOiBidWlsdGluL2xvZy5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iCittc2dzdHIgIuacgOe1gui8uOWHuu+8miVkICVzXG4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBzaG93ICVzOiBiYWQgZmlsZSIKK21zZ3N0ciAiZ2l0IHNob3cgJXM6IOaQjeWjnueahOaqlOahiCIKKworIzogYnVpbHRpbi9sb2cuYzo1NTAgYnVpbHRpbi9sb2cuYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICLkuI3og73oroDlj5bnianku7YgJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdHlwZTogJWQiCittc2dzdHIgIuacquefpemhnuWei++8miVkIgorCisjOiBidWlsdGluL2xvZy5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBjb3ZlciBmcm9tIGRlc2NyaXB0aW9uIG1vZGUiCittc2dzdHIgIiVz77ya5b6e5o+P6L+w55Si55Sf6ZmE5Ye955qE5qih5byP54Sh5pWIIgorCisjOiBidWlsdGluL2xvZy5jOjgyMQorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgImZvcm1hdC5oZWFkZXJzIOaykuacieWAvCIKKworIzogYnVpbHRpbi9sb2cuYzo5MzYKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgIui8uOWHuuebrumMhOWQjeWkqumVtyIKKworIzogYnVpbHRpbi9sb2cuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWf5L+u6KOc5qqU5qGIICVzIgorCisjOiBidWlsdGluL2xvZy5jOjk2OQorbXNnaWQgIm5lZWQgZXhhY3RseSBvbmUgcmFuZ2UiCittc2dzdHIgIuWPqumcgOimgeS4gOWAi+evhOWcjSIKKworIzogYnVpbHRpbi9sb2cuYzo5NzkKK21zZ2lkICJub3QgYSByYW5nZSIKK21zZ3N0ciAi5LiN5piv5LiA5YCL56+E5ZyNIgorCisjOiBidWlsdGluL2xvZy5jOjExNDMKK21zZ2lkICJjb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IgorbXNnc3RyICLpmYTlh73pnIDopoHkv6Hku7bkvY3lnYDmoLzlvI8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0OQorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgY292ZXItbGV0dGVyIGZpbGUiCittc2dzdHIgIueEoeazleW7uueri+mZhOWHveaqlOahiCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgIuS4jeato+W4uOeahCBpbi1yZXBseS10b++8miVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTUKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggWzzpgbjpoIU+XSBbPOW+nj4gfCA854mI5pys56+E5ZyNPl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMxMworbXNnaWQgInR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICLlhanlgIvovLjlh7rnm67pjITvvJ8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQyNCBidWlsdGluL2xvZy5jOjIxOTcgYnVpbHRpbi9sb2cuYzoyMTk5IGJ1aWx0aW4vbG9nLmM6MjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAi5pyq55+l5o+Q5LqkICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE0MzQgYnVpbHRpbi9yZXBsYWNlLmM6NTggYnVpbHRpbi9yZXBsYWNlLmM6MjA3CisjOiBidWlsdGluL3JlcGxhY2UuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZiIKK21zZ3N0ciAi54Sh5rOV5bCHICclcycg6Kej5p6Q54K65LiA5YCL5pyJ5pWI5byV55SoIgorCisjOiBidWlsdGluL2xvZy5jOjE0MzkKK21zZ2lkICJjb3VsZCBub3QgZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICLkuI3og73mib7liLDmupbnorrnmoTlkIjkvbXln7rnpI4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ0MworbXNnaWQgIiIKKyJmYWlsZWQgdG8gZ2V0IHVwc3RyZWFtLCBpZiB5b3Ugd2FudCB0byByZWNvcmQgYmFzZSBjb21taXQgYXV0b21hdGljYWxseSxcbiIKKyJwbGVhc2UgdXNlIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gdG8gdHJhY2sgYSByZW1vdGUgYnJhbmNoLlxuIgorIk9yIHlvdSBjb3VsZCBzcGVjaWZ5IGJhc2UgY29tbWl0IGJ5IC0tYmFzZT08YmFzZS1jb21taXQtaWQ+IG1hbnVhbGx5IgorbXNnc3RyICIiCisi54Sh5rOV5b6X5Yiw5LiK5ri45L2N5Z2A77yM5aaC5p6c5L2g5oOz6Ieq5YuV6KiY6YyE5Z+656SO5o+Q5Lqk77yM6KuL5L2/55So5oyH5LukXG4iCisiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byDkvobov73ouaTkuIDlgIvpgaDnq6/liIbmlK/jgILmiJbogIXkvaDlj6/ku6XpgI/pgY5cbiIKKyLlj4PmlbggLS1iYXNlPTzln7rnpI7mj5DkuqQ+IOaJi+WLleaMh+WumuS4gOWAi+WfuuekjuaPkOS6pCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDYzCittc2dpZCAiZmFpbGVkIHRvIGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIKK21zZ3N0ciAi54Sh5rOV5om+5Yiw5rqW56K655qE5ZCI5L215Z+656SOIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzQKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGQgYmUgdGhlIGFuY2VzdG9yIG9mIHJldmlzaW9uIGxpc3QiCittc2dzdHIgIuWfuuekjuaPkOS6pOaHieipsuaYr+eJiOacrOWIl+ihqOeahOelluWFiCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc4Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkbid0IGJlIGluIHJldmlzaW9uIGxpc3QiCittc2dzdHIgIuWfuuekjuaPkOS6pOS4jeaHieipsuWHuuePvuWcqOeJiOacrOWIl+ihqOS4rSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTMxCittc2dpZCAiY2Fubm90IGdldCBwYXRjaCBpZCIKK21zZ3N0ciAi54Sh5rOV5b6X5Yiw5L+u6KOc5qqUIGlkIgorCisjOiBidWlsdGluL2xvZy5jOjE1ODMKK21zZ2lkICJmYWlsZWQgdG8gaW5mZXIgcmFuZ2UtZGlmZiByYW5nZXMiCittc2dzdHIgIueEoeazleaOqOaWtyByYW5nZS1kaWZmIOevhOWcjSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjI5Cittc2dpZCAidXNlIFtQQVRDSCBuL21dIGV2ZW4gd2l0aCBhIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAi5L2/55SoIFtQQVRDSCBuL21d77yM5Y2z5L2/5Y+q5pyJ5LiA5YCL5L+u6KOc5qqUIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzIKK21zZ2lkICJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIKK21zZ3N0ciAi5L2/55SoIFtQQVRDSF3vvIzljbPkvb/mnInlpJrlgIvkv67oo5zmqpQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzNgorbXNnaWQgInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IgorbXNnc3RyICLliJfljbDkv67oo5zmqpTliLDmqJnmupbovLjlh7oiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzOAorbXNnaWQgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIgorbXNnc3RyICLnlJ/miJDkuIDlsIHpmYTlh70iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MAorbXNnaWQgInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIKK21zZ3N0ciAi5L2/55So57Ch5Zau55qE5pW45a2X5bqP5YiX5L2c54K66Ly45Ye65qqU5qGI5ZCNIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDEKK21zZ2lkICJzZngiCittc2dzdHIgIuW+jOe2tCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQyCittc2dpZCAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciCittc2dzdHIgIuS9v+eUqCA85b6M57a0PiDku6Pmm78gJy5wYXRjaCciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NAorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgIuS/ruijnOaqlOS7pSA8bj4g6ZaL5aeL57eo6Jmf77yM6ICM5LiN5pivMSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ2Cittc2dpZCAibWFyayB0aGUgc2VyaWVzIGFzIE50aCByZS1yb2xsIgorbXNnc3RyICLmqJnoqJjkv67oo5zmqpTns7vliJfmmK/nrKzlub7mrKHph43oo70iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0OAorbXNnaWQgIlVzZSBbUkZDIFBBVENIXSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIuS9v+eUqCBbUkZDIFBBVENIXSDku6Pmm78gW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUxCittc2dpZCAiY292ZXItZnJvbS1kZXNjcmlwdGlvbi1tb2RlIgorbXNnc3RyICLlvp7mj4/ov7DnlKLnlJ/pmYTlh73nmoTmqKHlvI8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1MgorbXNnaWQgImdlbmVyYXRlIHBhcnRzIG9mIGEgY292ZXIgbGV0dGVyIGJhc2VkIG9uIGEgYnJhbmNoJ3MgZGVzY3JpcHRpb24iCittc2dzdHIgIuWfuuaWvOWIhuaUr+aPj+i/sOeUoueUn+mDqOWIhumZhOWHvSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjU0Cittc2dpZCAiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICLkvb/nlKggWzzliY3ntrQ+XSDku6Pmm78gW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAic3RvcmUgcmVzdWx0aW5nIGZpbGVzIGluIDxkaXI+IgorbXNnc3RyICLmiorntZDmnpzmqpTmoYjlhLLlrZjlnKggPOebrumMhD4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MAorbXNnaWQgImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIgorbXNnc3RyICLkuI3liKrpmaQv5paw5aKeIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MworbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgIuS4jei8uOWHuuS6jOmAsuS9jeW3rueVsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY1Cittc2dpZCAib3V0cHV0IGFsbC16ZXJvIGhhc2ggaW4gRnJvbSBoZWFkZXIiCittc2dzdHIgIuWcqCBGcm9tIOaomemgreioiuaBr+S4rei8uOWHuuWFqOeCuumbtueahOmbnOa5iuWAvCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY3Cittc2dpZCAiZG9uJ3QgaW5jbHVkZSBhIHBhdGNoIG1hdGNoaW5nIGEgY29tbWl0IHVwc3RyZWFtIgorbXNnc3RyICLkuI3ljIXlkKvlt7LlnKjkuIrmuLjmj5DkuqTkuK3nmoTkv67oo5zmqpQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2OQorbXNnaWQgInNob3cgcGF0Y2ggZm9ybWF0IGluc3RlYWQgb2YgZGVmYXVsdCAocGF0Y2ggKyBzdGF0KSIKK21zZ3N0ciAi6aGv56S657SU5L+u6KOc5qqU5qC85byP6ICM6Z2e6aCQ6Kit55qE77yI5L+u6KOc5qqUK+eLgOaFi++8iSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjcxCittc2dpZCAiTWVzc2FnaW5nIgorbXNnc3RyICLkv6Hku7blgrPpgIEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MgorbXNnaWQgImhlYWRlciIKK21zZ3N0ciAiaGVhZGVyIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzMKK21zZ2lkICJhZGQgZW1haWwgaGVhZGVyIgorbXNnc3RyICLmlrDlop7kv6Hku7bpoK0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NCBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJlbWFpbCIKK21zZ3N0ciAi5L+h5Lu25L2N5Z2AIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzQKK21zZ2lkICJhZGQgVG86IGhlYWRlciIKK21zZ3N0ciAi5paw5aKe5pS25Lu25Lq6IgorCisjOiBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAi5paw5aKe5oqE6YCBIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzgKK21zZ2lkICJpZGVudCIKK21zZ3N0ciAi5qiZ6KiYIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzkKK21zZ2lkICJzZXQgRnJvbSBhZGRyZXNzIHRvIDxpZGVudD4gKG9yIGNvbW1pdHRlciBpZGVudCBpZiBhYnNlbnQpIgorbXNnc3RyICLlsIcgRnJvbSDkvY3lnYDoqK3lrprngrogPOaomeiomD7vvIjlpoLoi6XkuI3mj5DkvpvvvIzliYfnlKjmj5DkuqTogIUgSUQg5YGa54K65L2N5Z2A77yJIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODEKK21zZ2lkICJtZXNzYWdlLWlkIgorbXNnc3RyICLkv6Hku7bmqJnoqJgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MgorbXNnaWQgIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIKK21zZ3N0ciAi5L2/56ys5LiA5bCB5L+h5Lu25L2c54K65bCNIDzkv6Hku7bmqJnoqJg+IOeahOWbnuimhiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgzIGJ1aWx0aW4vbG9nLmM6MTY4NgorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICLpgornlYwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NAorbXNnaWQgImF0dGFjaCB0aGUgcGF0Y2giCittc2dzdHIgIumZhOS7tuaWueW8j+aWsOWinuS/ruijnOaqlCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjg3Cittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAi5YWn6IGv6aGv56S65L+u6KOc5qqUIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTEKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAi5ZWf55So5L+h5Lu257ea57Si77yM6aKo5qC877ya5re677yM5rexIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTMKK21zZ2lkICJzaWduYXR1cmUiCittc2dzdHIgIuewveWQjSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk0Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICLmlrDlop7kuIDlgIvnsL3lkI0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NQorbXNnaWQgImJhc2UtY29tbWl0IgorbXNnc3RyICLln7rnpI7mj5DkuqQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NgorbXNnaWQgImFkZCBwcmVyZXF1aXNpdGUgdHJlZSBpbmZvIHRvIHRoZSBwYXRjaCBzZXJpZXMiCittc2dzdHIgIueCuuS/ruijnOaqlOWIl+ihqOaWsOWinuWJjee9ruaoueioiuaBryIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk4Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIgorbXNnc3RyICLlvp7mqpTmoYjmlrDlop7kuIDlgIvnsL3lkI0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5OQorbXNnaWQgImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiCittc2dzdHIgIuS4jeimgeWIl+WNsOS/ruijnOaqlOaqlOahiOWQjSIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAxCittc2dpZCAic2hvdyBwcm9ncmVzcyB3aGlsZSBnZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgIuWcqOeUn+aIkOS/ruijnOaqlOaZgumhr+ekuumAsuW6piIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAzCittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJldj4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAi5Zyo6ZmE5Ye95oiW5Zau5YCL5L+u6KOc5qqU5Lit6aGv56S65ZKMIDxyZXY+IOeahOW3rueVsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA2Cittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJlZnNwZWM+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIuWcqOmZhOWHveaIluWWruWAi+S/ruijnOaqlOS4remhr+ekuuWSjCA8cmVmc3BlYz4g55qE5beu55WwIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDgKK21zZ2lkICJwZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIgorbXNnc3RyICLlu7rnq4vmrIrph43nmoTnmb7liIbmr5QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICVzIgorbXNnc3RyICLljIXlkKvnhKHmlYjnmoTouqvku73mqJnoqJjvvJolcyIKKworIzogYnVpbHRpbi9sb2cuYzoxODA3Cittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1uIOWSjCAtayDkupLmlqUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwOQorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMg5ZKMIC1rIOS6kuaWpSIKKworIzogYnVpbHRpbi9sb2cuYzoxODE3Cittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHkg54Sh5oSP576pIgorCisjOiBidWlsdGluL2xvZy5jOjE4MTkKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1zdGF0dXMg54Sh5oSP576pIgorCisjOiBidWlsdGluL2xvZy5jOjE4MjEKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tY2hlY2sg54Sh5oSP576pIgorCisjOiBidWlsdGluL2xvZy5jOjE4NTQKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAi5qiZ5rqW6Ly45Ye65oiW55uu6YyE77yM5ZOq5LiA5YCL77yfIgorCisjOiBidWlsdGluL2xvZy5jOjE5NTgKK21zZ2lkICItLWludGVyZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIi0taW50ZXJkaWZmIOmcgOimgSAtLWNvdmVyLWxldHRlciDmiJbllq7kuIDkv67oo5zmqpQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2MgorbXNnaWQgIkludGVyZGlmZjoiCittc2dzdHIgIueJiOacrOmWk+W3rueVsO+8miIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVyZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIuWwjSB2JWQg55qE54mI5pys5beu55Ww77yaIgorCisjOiBidWlsdGluL2xvZy5jOjE5NjkKK21zZ2lkICItLWNyZWF0aW9uLWZhY3RvciByZXF1aXJlcyAtLXJhbmdlLWRpZmYiCittc2dzdHIgIi0tY3JlYXRpb24tZmFjdG9yIOmcgOimgSAtLXJhbmdlLWRpZmYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk3MworbXNnaWQgIi0tcmFuZ2UtZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIi0tcmFuZ2UtZGlmZiDpnIDopoEgLS1jb3Zlci1sZXR0ZXIg5oiW5Zau5LiA5L+u6KOc5qqUIgorCisjOiBidWlsdGluL2xvZy5jOjE5ODEKK21zZ2lkICJSYW5nZS1kaWZmOiIKK21zZ3N0ciAi56+E5ZyN5beu55Ww77yaIgorCisjOiBidWlsdGluL2xvZy5jOjE5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmFuZ2UtZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIuWwjSB2JWQg55qE56+E5ZyN5beu55Ww77yaIgorCisjOiBidWlsdGluL2xvZy5jOjE5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+W57C95ZCN5qqU5qGIICclcyciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjAyOQorbXNnaWQgIkdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAi55Sf5oiQ5L+u6KOc5qqUIgorCisjOiBidWlsdGluL2xvZy5jOjIwNzMKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAi54Sh5rOV5bu656uL6Ly45Ye65qqU5qGIIgorCisjOiBidWlsdGluL2xvZy5jOjIxMzIKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs85LiK5ri4PiBbPOmgrT4gWzzpmZDliLY+XV1dIgorCisjOiBidWlsdGluL2xvZy5jOjIxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIgorbXNnc3RyICLkuI3og73mib7liLDov73ouaTnmoTpgaDnq6/liIbmlK/vvIzoq4vmiYvli5XmjIflrpogPOS4iua4uD7jgIJcbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ3MAorbXNnaWQgImdpdCBscy1maWxlcyBbPG9wdGlvbnM+XSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLWZpbGVzIFs86YG46aCFPl0gWzzmqpTmoYg+Li4uXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyNgorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgIueUqOaomeexpOaomeiomOaqlOahiOeahOeLgOaFiyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyOAorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIgorbXNnc3RyICLkvb/nlKjlsI/lr6vlrZfmr43ooajnpLogJ+WBh+ioreacquaUueiuiueahCcg5qqU5qGIIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMwCittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnZnNtb25pdG9yIGNsZWFuJyBmaWxlcyIKK21zZ3N0ciAi5L2/55So5bCP5a+r5a2X5q+N6KGo56S6ICdmc21vbml0b3IgY2xlYW4nIOaqlOahiCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzMgorbXNnaWQgInNob3cgY2FjaGVkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGRlZmF1bHQpIgorbXNnc3RyICLpoa/npLrlv6vlj5bnmoTmqpTmoYjvvIjpoJDoqK3vvIkiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzQKK21zZ2lkICJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi6aGv56S65bey5Yiq6Zmk55qE5qqU5qGIIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM2Cittc2dpZCAic2hvdyBtb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLpoa/npLrlt7Lkv67mlLnnmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzgKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIumhr+ekuuWFtuWug+aqlOahiCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MAorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLpoa/npLrlv73nlaXnmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDMKK21zZ2lkICJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi6aGv56S65pqr5a2Y5Y2A5YWn5a6555qE54mp5Lu25ZCN56ixIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ1Cittc2dpZCAic2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCIKK21zZ3N0ciAi6aGv56S65qqU5qGI57O757Wx6ZyA6KaB5Yiq6Zmk55qE5qqU5qGIIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ3Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICLlj6rpoa/npLrjgIzlhbbku5bjgI3nm67pjITnmoTlkI3nqLEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDkKK21zZ2lkICJzaG93IGxpbmUgZW5kaW5ncyBvZiBmaWxlcyIKK21zZ3N0ciAi6aGv56S65qqU5qGI5o+b6KGM56ym6Jmf5qC85byPIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTUxCittc2dpZCAiZG9uJ3Qgc2hvdyBlbXB0eSBkaXJlY3RvcmllcyIKK21zZ3N0ciAi5LiN6aGv56S656m655uu6YyEIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU0Cittc2dpZCAic2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLpoa/npLrmnKrlkIjkvbXnmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTYKK21zZ2lkICJzaG93IHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi6aGv56S6IHJlc29sdmUtdW5kbyDoqIrmga8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTgKK21zZ2lkICJza2lwIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4iCittc2dzdHIgIuespuWQiOaOkumZpOaqlOahiOeahOaooeW8jyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2MQorbXNnaWQgImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iCittc2dzdHIgIuW+niA85qqU5qGIPiDkuK3oroDlj5bmjpLpmaTmqKHlvI8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjQKK21zZ2lkICJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIKK21zZ3N0ciAi5b6eIDzmqpTmoYg+IOiugOWPlumhjeWklueahOavj+WAi+ebrumMhOeahOaOkumZpOaooeW8jyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NgorbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgIuaWsOWinuaomea6lueahCBnaXQg5o6S6ZmkIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTcwCittc2dpZCAibWFrZSB0aGUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHRvcCBkaXJlY3RvcnkiCittc2dzdHIgIumhr+ekuuebuOWwjeaWvOmggue0muebrumMhOeahOaqlOahiOWQjSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MworbXNnaWQgInJlY3Vyc2UgdGhyb3VnaCBzdWJtb2R1bGVzIgorbXNnc3RyICLlnKjlrZDmqKHntYTkuK3pgZ7ov7QiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzUKK21zZ2lkICJpZiBhbnkgPGZpbGU+IGlzIG5vdCBpbiB0aGUgaW5kZXgsIHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IiCittc2dzdHIgIuWmguaenOS7u+S9lSA85qqU5qGIPiDpg73kuI3lnKjntKLlvJXljYDvvIzoppbngrrpjK/oqqQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzYKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAi5qi55oiW5o+Q5LqkIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc3Cittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAi5YGH6KOd6Ieq5b6eIDzmqLnmiJbmj5DkuqQ+IOS5i+W+jOWIqumZpOeahOi3r+W+keS7jeeEtuWtmOWcqCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3OQorbXNnaWQgInNob3cgZGVidWdnaW5nIGRhdGEiCittc2dzdHIgIumhr+ekuumZpOmMr+izh+aWmSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo5Cittc2dpZCAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPHJlcG9zaXRvcnk+IFs8cmVmcz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPOeJiOacrOW6qz4gWzzlvJXnlKg+Li4uXV0iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAi5LiN5YiX5Y2w6YGg56uvIFVSTCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2MCBidWlsdGluL2xzLXJlbW90ZS5jOjYyIGJ1aWx0aW4vcmViYXNlLmM6MTU2MQorbXNnaWQgImV4ZWMiCittc2dzdHIgImV4ZWMiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjEgYnVpbHRpbi9scy1yZW1vdGUuYzo2MworbXNnaWQgInBhdGggb2YgZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUgaG9zdCIKK21zZ3N0ciAi6YGg56uv5Li75qmf5LiK55qEIGdpdC11cGxvYWQtcGFjayDot6/lvpEiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjUKK21zZ2lkICJsaW1pdCB0byB0YWdzIgorbXNnc3RyICLlg4XpmZDmlrzmqJnnsaQiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjYKK21zZ2lkICJsaW1pdCB0byBoZWFkcyIKK21zZ3N0ciAi5YOF6ZmQ5pa85YiG5pSvIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY3Cittc2dpZCAiZG8gbm90IHNob3cgcGVlbGVkIHRhZ3MiCittc2dzdHIgIuS4jemhr+ekuuW3suino+aekOeahOaomeexpCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2OQorbXNnaWQgInRha2UgdXJsLjxiYXNlPi5pbnN0ZWFkT2YgaW50byBhY2NvdW50IgorbXNnc3RyICLlj4PogIMgdXJsLjxiYXNlPi5pbnN0ZWFkT2Yg6Kit5a6aIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjcyCittc2dpZCAiZXhpdCB3aXRoIGV4aXQgY29kZSAyIGlmIG5vIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kIgorbXNnc3RyICLoi6XmnKrmib7liLDnrKblkIjnmoTlvJXnlKjliYfku6Xpm6Lplovnorwy6Zui6ZaLIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjc1Cittc2dpZCAic2hvdyB1bmRlcmx5aW5nIHJlZiBpbiBhZGRpdGlvbiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgYnkgaXQiCittc2dzdHIgIumZpOS6humhr+ekuuaMh+WQkeeahOeJqeS7tuWklu+8jOmhr+ekuuaMh+WQkeeahOW8leeUqOWQjSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MzAKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBbPOmBuOmghT5dIDzmqLnmiJbmj5DkuqQ+IFs86Lev5b6RPi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOAorbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAi5Y+q6aGv56S65qi5IgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzAKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgIumBnui/tOWIsOWtkOaouSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMyCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAi55W26YGe6L+05pmC6aGv56S65qi5IgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICLmop3nm67ku6UgTlVMIOWtl+WFg+e1guatoiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM2Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAi5YyF5ous54mp5Lu25aSn5bCPIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzggYnVpbHRpbi9scy10cmVlLmM6MTQwCittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAi5Y+q5YiX5Ye65qqU5qGI5ZCNIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDMKK21zZ2lkICJ1c2UgZnVsbCBwYXRoIG5hbWVzIgorbXNnc3RyICLkvb/nlKjmqpTmoYjnmoTlhajot6/lvpEiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0NQorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAi5YiX5Ye65pW05YCL5qi577yb5LiN5YOF5YOF55uu5YmN55uu6YyE77yI6Zqx5ZCrIC0tZnVsbC1uYW1l77yJIgorCisjOiBidWlsdGluL21haWxzcGxpdC5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBtYm94OiAnJXMnIgorbXNnc3RyICLnqbrnmoQgbWJveO+8miclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NQorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICJnaXQgbWVyZ2UgWzzpgbjpoIU+XSBbPOaPkOS6pD4uLi5dIgorCisjOiBidWlsdGluL21lcmdlLmM6NTYKK21zZ2lkICJnaXQgbWVyZ2UgLS1hYm9ydCIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tYWJvcnQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NworbXNnaWQgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorbXNnc3RyICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExOQorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAi6ZaL6ZecIGBtJyDpnIDopoHkuIDlgIvlgLwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAi6YG46aCFIGAlcycg6ZyA6KaB5LiA5YCL5YC8IgorCisjOiBidWlsdGluL21lcmdlLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIuS4jeiDveaJvuWIsOWQiOS9teetlueVpSAnJXMn44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAi5Y+v55So55qE562W55Wl5pyJ77yaIgorCisjOiBidWlsdGluL21lcmdlLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICLlj6/nlKjnmoToh6roqILnrZbnlaXmnInvvJoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDUgYnVpbHRpbi9wdWxsLmM6MTMyCittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAi5Zyo5ZCI5L2155qE5pyA5b6M5LiN6aGv56S65beu55Ww57Wx6KiIIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ4IGJ1aWx0aW4vcHVsbC5jOjEzNQorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAi5Zyo5ZCI5L2155qE5pyA5b6M6aGv56S65beu55Ww57Wx6KiIIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ5IGJ1aWx0aW4vcHVsbC5jOjEzOAorbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIu+8iOWSjCAtLXN0YXQg5ZCM576p77yJIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUxIGJ1aWx0aW4vcHVsbC5jOjE0MQorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi5Zyo5ZCI5L215o+Q5Lqk6KiK5oGv5Lit5paw5aKe77yI5pyA5aSaIDxuPiDmop3vvInnsr7nsKHmj5DkuqToqJjpjIQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTQgYnVpbHRpbi9wdWxsLmM6MTQ3Cittc2dpZCAiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiCittc2dzdHIgIuW7uueri+S4gOWAi+WWrueNqOeahOaPkOS6pOiAjOS4jeaYr+WBmuS4gOasoeWQiOS9tSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NiBidWlsdGluL3B1bGwuYzoxNTAKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgIuWmguaenOWQiOS9teaIkOWKn++8jOWft+ihjOS4gOasoeaPkOS6pO+8iOmgkOiore+8iSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1OCBidWlsdGluL3B1bGwuYzoxNTMKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgIuWcqOaPkOS6pOWJjee3qOi8r+aPkOS6pOiqquaYjiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MAorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgIuWFgeioseW/q+i9ie+8iOmgkOiore+8iSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MiBidWlsdGluL3B1bGwuYzoxNjAKK21zZ2lkICJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIgorbXNnc3RyICLlpoLmnpzkuI3og73lv6vovYnlsLHmlL7mo4TlkIjkvbUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjYgYnVpbHRpbi9wdWxsLmM6MTYzCittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICLpqZforYnmjIflrprnmoTmj5DkuqTmmK/lkKbljIXlkKvkuIDlgIvmnInmlYjnmoQgR1BHIOewveWQjSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NyBidWlsdGluL25vdGVzLmM6Nzg3IGJ1aWx0aW4vcHVsbC5jOjE2NworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjAgYnVpbHRpbi9yZWJhc2UuYzoxNTc1IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgIuetlueVpSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OCBidWlsdGluL3B1bGwuYzoxNjgKK21zZ2lkICJtZXJnZSBzdHJhdGVneSB0byB1c2UiCittc2dzdHIgIuimgeS9v+eUqOeahOWQiOS9teetlueVpSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OSBidWlsdGluL3B1bGwuYzoxNzEKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgIm9wdGlvbj12YWx1ZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3MCBidWlsdGluL3B1bGwuYzoxNzIKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLmiYDpgbjnmoTlkIjkvbXnrZbnlaXnmoTpgbjpoIUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzIKK21zZ2lkICJtZXJnZSBjb21taXQgbWVzc2FnZSAoZm9yIGEgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZSkiCittc2dzdHIgIuWQiOS9teeahOaPkOS6pOiqquaYju+8iOmHneWwjemdnuW/q+i9ieW8j+WQiOS9te+8iSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3OQorbXNnaWQgImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICLmlL7mo4Tnm67liY3mraPlnKjpgLLooYznmoTlkIjkvbUiCisKKyMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODEKK21zZ2lkICItLWFib3J0IGJ1dCBsZWF2ZSBpbmRleCBhbmQgd29ya2luZyB0cmVlIGFsb25lIgorbXNnc3RyICItLWFib3J077yM5L2G5piv5L+d55WZ57Si5byV5ZKM5bel5L2c5Y2AIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgzCittc2dpZCAiY29udGludWUgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgIue5vOe6jOebruWJjeato+WcqOmAsuihjOeahOWQiOS9tSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4NSBidWlsdGluL3B1bGwuYzoxNzkKK21zZ2lkICJhbGxvdyBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgIuWFgeioseWQiOS4puS4jeebuOmXnOeahOatt+WPsiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI5MQorbXNnaWQgImJ5cGFzcyBwcmUtbWVyZ2UtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIgorbXNnc3RyICLnuZ7pgY4gcHJlLW1lcmdlLWNvbW1pdCDlkowgY29tbWl0LW1zZyDmjpvpiaQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMDgKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAi5LiN6IO95Z+36KGM5YSy6JeP44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MzEzCittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICLlhLLol4/lpLHmlZciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5YCL5pyJ5pWI54mp5Lu277yaJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNDAgYnVpbHRpbi9tZXJnZS5jOjM1NworbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgIuiugOWPluaoueWkseaVlyIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiBidWlsdGluL21lcmdlLmM6Mzg3Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiDvvIjnhKHlj6/lo5PnuK7vvIkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICLlo5PnuK7mj5DkuqQgLS0g5pyq5pu05pawIEhFQURcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIueEoeWQiOS9teioiuaBryAtLSDmnKrmm7TmlrAgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiclcycg5rKS5pyJ5oyH5ZCR5LiA5YCL5o+Q5LqkIgorCisjOiBidWlsdGluL21lcmdlLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIuWjnueahCBicmFuY2guJXMubWVyZ2VvcHRpb25zIOWtl+S4su+8miVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzA4Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAi5pyq6JmV55CG5YWp5YCL6aCt5ZCI5L215LmL5aSW55qE5Lu75L2V5YuV5L2c44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCittc2dzdHIgIm1lcmdlLXJlY3Vyc2l2ZSDnmoTmnKrnn6XpgbjpoIXvvJotWCVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAi5LiN6IO95a+rICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAi5LiN6IO95b6eICclcycg6K6A5Y+WIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAi5pyq5o+Q5Lqk5ZCI5Lim77yM5L2/55SoICdnaXQgY29tbWl0JyDlrozmiJDmraTmrKHlkIjkvbXjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwNAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCittc2dzdHIgIiIKKyLoq4vovLjlhaXkuIDlgIvmj5DkuqToqIrmga/ku6Xop6Pph4vmraTlkIjkvbXnmoTlv4XopoHmgKfvvIzlsKTlhbbmmK/lsIfkuIDlgIvmm7TmlrDlvoznmoTkuIrmuLjliIbmlK9cbiIKKyLlkIjkvbXliLDkuLvpoYzliIbmlK/jgIJcbiIKKyJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwOQorbXNnaWQgIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIuepuueahOaPkOS6pOiqquaYjuacg+e1guatouaPkOS6pOOAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICLku6UgJyVjJyDplovlp4vnmoTooYzlsIfooqvlv73nlaXvvIzogIznqbrnmoTmj5DkuqToqqrmmI7lsIfntYLmraLmj5DkuqTjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg2NQorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAi56m65o+Q5Lqk6KiK5oGv44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAi5aSq5qOS5LqG44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAi6Ieq5YuV5ZCI5L215aSx5pWX77yM5L+u5q2j6KGd56qB54S25b6M5o+Q5Lqk5L+u5q2j55qE57WQ5p6c44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODAKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIuaykuacieebruWJjeWIhuaUr+OAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4MgorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi55uu5YmN5YiG5pSv5rKS5pyJ5bCN5oeJ55qE6YGg56uv54mI5pys5bqr44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg0Cittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLnm67liY3liIbmlK/mspLmnInlrprnvqnpoJDoqK3nmoTkuIrmuLjliIbmlK/jgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAi5bCN5pa8ICVzIOaykuacieS+huiHqiAlcyDnmoTpgaDnq6/ov73ouaTliIbmlK8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciCittc2dzdHIgIueSsOWigyAnJTIkcycg5Lit5a2Y5Zyo5aOe55qE5Y+W5YC8ICclMSRzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UgaW4gJXM6ICVzIgorbXNnc3RyICLkuI3og73lnKggJXMg5Lit5ZCI5L2177yaJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTgzCittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIuS4jeiDveWQiOS9tSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODYKK21zZ2lkICItLWFib3J0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWFib3J0IOS4jeW4tuWPg+aVuCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTAKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIuaykuacieimgee1guatoueahOWQiOS9te+8iE1FUkdFX0hFQUQg6YG65aSx77yJ44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5OQorbXNnaWQgIi0tcXVpdCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1xdWl0IOS4jeW4tuWPg+aVuCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTIKK21zZ2lkICItLWNvbnRpbnVlIGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWNvbnRpbnVlIOS4jeW4tuWPg+aVuCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTYKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIuaykuaciemAsuihjOS4reeahOWQiOS9te+8iE1FUkdFX0hFQUQg6YG65aSx77yJ44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzMgorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLmgqjlsJrmnKrntZDmnZ/mgqjnmoTlkIjkvbXvvIjlrZjlnKggTUVSR0VfSEVBRO+8ieOAglxuIgorIuiri+WcqOWQiOS9teWJjeWFiOaPkOS6pOaCqOeahOS/ruaUueOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzkKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi5oKo5bCa5pyq57WQ5p2f5oKo55qE5o+A6YG477yI5a2Y5ZyoIENIRVJSWV9QSUNLX0hFQUTvvInjgIJcbiIKKyLoq4vlnKjlkIjkvbXliY3lhYjmj5DkuqTmgqjnmoTkv67mlLnjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzQyCittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICLmgqjlsJrmnKrntZDmnZ/mgqjnmoTmj4DpgbjvvIjlrZjlnKggQ0hFUlJZX1BJQ0tfSEVBRO+8ieOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTYKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAi5oKo5LiN6IO95bCHIC0tc3F1YXNoIOWSjCAtLW5vLWZmIOe1hOWQiOS9v+eUqOOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTgKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLWNvbW1pdC4iCittc2dzdHIgIuaCqOS4jeiDveWwhyAtLXNxdWFzaCDlkowgLS1jb21taXQg57WE5ZCI5L2/55So44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM3NAorbXNnaWQgIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIgorbXNnc3RyICLmnKrmjIflrprmj5DkuqTkuKbkuJQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0g5pyq6Kit5a6a44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5MQorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICLlsJrkuI3mlK/mj7TliLDnqbrliIbmlK/nmoTlo5PnuK7mj5DkuqQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkzCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIuWIsOepuuWIhuaUr+eahOmdnuW/q+i9ieW8j+aPkOS6pOaykuacieaEj+e+qSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSDkuI3og73ooqvlkIjkvbUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDAwCittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAi5Y+q6IO95bCH5LiA5YCL5o+Q5Lqk5ZCI5Lim5Yiw56m65YiG5pSv5LiKIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ4MQorbXNnaWQgInJlZnVzaW5nIHRvIG1lcmdlIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgIuaLkue1leWQiOS9teeEoemXnOeahOatt+WPsiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0OTAKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIgorbXNnc3RyICLlt7LntpPmmK/mnIDmlrDnmoTjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICLmm7TmlrAgJXMuLiVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICLlmJfoqabpnZ7luLjlsI/nmoTntKLlvJXlhaflkIjkvbUuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAi54Sh44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTc0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiBZZWVhaCEiCittc2dzdHIgIuW3sue2k+aYr+acgOaWsOeahOOAguiAtu+8gSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1ODAKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIueEoeazleW/q+i9ie+8jOe1guatouOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDMgYnVpbHRpbi9tZXJnZS5jOjE2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIuWwh+aoueWbnua7vuiHs+WOn+Wni+eLgOaFiy4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAi5ZiX6Kmm5ZCI5L21562W55WlICVzLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICLmspLmnInlkIjkvbXnrZbnlaXomZXnkIbmraTlkIjkvbXjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugd2l0aCBzdHJhdGVneSAlcyBmYWlsZWQuXG4iCittc2dzdHIgIuS9v+eUqOetlueVpSAlcyDlkIjkvbXlpLHmlZfjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIuS9v+eUqCAlcyDku6XmupblgpnmiYvli5Xop6PmsbrjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAi6Ieq5YuV5ZCI5L216YCy5bGV6aCG5Yip77yM5oyJ6KaB5rGC5Zyo5o+Q5Lqk5YmN5YGc5q2iXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMyCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPOaPkOS6pD4gPOaPkOS6pD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMzCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA85o+Q5LqkPi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzQKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDzmj5DkuqQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPOaPkOS6pD4gPOaPkOS6pD4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM2Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA85byV55SoPiBbPOaPkOS6pD5dIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTMKK21zZ2lkICJvdXRwdXQgYWxsIGNvbW1vbiBhbmNlc3RvcnMiCittc2dzdHIgIui8uOWHuuaJgOacieWFseWQjOeahOelluWFiCIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU1Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICLlsIvmib7kuIDlgIvlpJrot6/lkIjkvbXnmoTnpZblhYjmj5DkuqQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NworbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICLpoa/npLrkuI3og73ooqvlhbbku5blrZjlj5bliLDnmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1OQorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAi56ys5LiA5YCL5piv5YW25LuW55qE56WW5YWI5o+Q5Lqk5ZeO77yfIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNjEKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAi5qC55pOaIDzlvJXnlKg+IOeahOW8leeUqOaXpeiqjOWwi+aJviA85o+Q5LqkPiDnmoTooY3nlJ/omZUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjkKK21zZ2lkICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcHRpb25zPl0gWy1MIDxuYW1lMT4gWy1MIDxvcmlnPiBbLUwgPG5hbWUyPl1dXSA8ZmlsZTE+ICIKKyI8b3JpZy1maWxlPiA8ZmlsZTI+IgorbXNnc3RyICIiCisiZ2l0IG1lcmdlLWZpbGUgWzzpgbjpoIU+XSBbLUwgPOaqlOahiDE+IFstTCA85Yid5aeLPiBbLUwgPOWQjeWtlzI+XV1dIDzmqpTmoYgxPiA85Yid5aeL5paHIgorIuS7tj4gPOaqlOahiDI+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNQorbXNnaWQgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIuWwh+e1kOaenOWCs+mAgeWIsOaomea6lui8uOWHuiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzYKK21zZ2lkICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIKK21zZ3N0ciAi5L2/55So5Z+65pa8IGRpZmYzIOeahOWQiOS9tSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgIuWmguaenOihneeqge+8jOS9v+eUqOaIkeWAkeeahOeJiOacrCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAi5aaC5p6c6KGd56qB77yM5L2/55So5LuW5YCR55qE54mI5pysIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgIuWmguaenOihneeqge+8jOS9v+eUqOiBr+WQiOeJiOacrCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAi5aaC5p6c6KGd56qB77yM5L2/55So5oyH5a6a6ZW35bqm55qE5qiZ6KiYIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAi5LiN6KaB6K2m5ZGK6KGd56qBIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NworbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIKK21zZ3N0ciAi54K6IOaqlOahiDEv5Yid5aeL5qqU5qGIL+aqlOahiDIg6Kit5a6a5qiZ57GkIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uICVzIgorbXNnc3RyICLmnKrnn6XpgbjpoIUgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICLkuI3og73op6PmnpDnianku7YgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiBJZ25vcmluZyAlcy4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiBJZ25vcmluZyAlcy4iCittc2dzdHJbMF0gIueEoeazleiZleeQhiAlZCDmop3ku6XkuIrnmoTln7rnpI7jgILlv73nlaUgJXPjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NjUKK21zZ2lkICJub3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICLkuI3og73omZXnkIblhanlgIvpoK3lkIjkvbXkuYvlpJbnmoTku7vkvZXli5XkvZzjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzQgYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSByZWYgJyVzJyIKK21zZ3N0ciAi54Sh5rOV6Kej5p6Q5byV55SoICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzXG4iCittc2dzdHIgIuWQiOS9tSAlcyDlkowgJXNcbiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NgorbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU0Cittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgIui8uOWFpeS7pSBOVUwg5a2X5YWD57WC5q2iIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NSBidWlsdGluL3dyaXRlLXRyZWUuYzoyNgorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi5YWB6Kix6YG65aSx55qE54mp5Lu2IgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NgorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAi5YWB6Kix5bu656uL5LiA5YCL5Lul5LiK55qE5qi5IgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo5Cittc2dpZCAiIgorImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8b3B0aW9ucz5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTxzaXplPikiCittc2dzdHIgIiIKKyJnaXQgbXVsdGktcGFjay1pbmRleCBbPOmBuOmghT5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLXNpemU9POWkp+WwjyIKKyI+KSIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjYKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2V0IG9mIHBhY2tmaWxlIGFuZCBwYWNrLWluZGV4IHBhaXJzIgorbXNnc3RyICLljIXlkKvmiJDlsI0gcGFja2ZpbGUg5ZKM5YyF57Si5byV55qE54mp5Lu255uu6YyEIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyOQorbXNnaWQgIiIKKyJkdXJpbmcgcmVwYWNrLCBjb2xsZWN0IHBhY2stZmlsZXMgb2Ygc21hbGxlciBzaXplIGludG8gYSBiYXRjaCB0aGF0IGlzICIKKyJsYXJnZXIgdGhhbiB0aGlzIHNpemUiCittc2dzdHIgIuWcqCByZXBhY2sg5pyf6ZaT77yM5bCH6LyD5bCP5bC65a+455qE5YyF5qqU5qGI5pS26ZuG5Yiw5aSn5pa85q2k5aSn5bCP55qE5om55qyh5LitIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo1MCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjY3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICLlpKrlpJrlj4PmlbgiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjYwCittc2dpZCAiLS1iYXRjaC1zaXplIG9wdGlvbiBpcyBvbmx5IGZvciAncmVwYWNrJyBzdWJjb21tYW5kIgorbXNnc3RyICItLWJhdGNoLXNpemUg6YG46aCF5YOF55So5pa8ICdyZXBhY2snIOWtkOaMh+S7pCIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICLmnKrorZjliKXnmoTlrZDmjIfku6TvvJolcyIKKworIzogYnVpbHRpbi9tdi5jOjE4Cittc2dpZCAiZ2l0IG12IFs8b3B0aW9ucz5dIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCittc2dzdHIgImdpdCBtdiBbPOmBuOmghT5dIDzmupA+Li4uIDznm67mqJk+IgorCisjOiBidWlsdGluL212LmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IgorbXNnc3RyICLnm67pjIQgJXMg5Zyo57Si5byV5Lit5Lim5LiU5LiN5piv5a2Q5qih57WE77yfIgorCisjOiBidWlsdGluL212LmM6ODUKK21zZ2lkICJQbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAi6KuL5bCH5oKo55qE5L+u5pS55pqr5a2Y5YiwIC5naXRtb2R1bGVzIOS4reaIluWEsuiXj+W+jOWGjee5vOe6jCIKKworIzogYnVpbHRpbi9tdi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICIlLipzIOWcqOe0ouW8leS4rSIKKworIzogYnVpbHRpbi9tdi5jOjEyNQorbXNnaWQgImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi5by35Yi256e75YuVL+mHjeaMh+S7pO+8jOWNs+S9v+ebruaomeWtmOWcqCIKKworIzogYnVpbHRpbi9tdi5jOjEyNworbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICLot7PpgY7np7vli5Uv6YeN5paw5ZG95ZCN6Yyv6KqkIgorCisjOiBidWlsdGluL212LmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICLnm67mqJkgJyVzJyDkuI3mmK/kuIDlgIvnm67pjIQiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICLmqqLmn6UgJyVzJyDliLAgJyVzJyDnmoTph43mlrDlkb3lkI1cbiIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgIuWjnueahOa6kCIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIuS4jeiDveWwh+ebrumMhOenu+WLleWIsOiHqui6qyIKKworIzogYnVpbHRpbi9tdi5jOjE5MAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgIuS4jeiDveWwh+ebrumMhOenu+WLleWIsOaqlOahiCIKKworIzogYnVpbHRpbi9tdi5jOjE5OQorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgIua6kOebrumMhOeCuuepuiIKKworIzogYnVpbHRpbi9tdi5jOjIyNAorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgIuS4jeWcqOeJiOacrOaOp+WItuS5i+S4iyIKKworIzogYnVpbHRpbi9tdi5jOjIyNworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAi55uu5qiZ5bey5a2Y5ZyoIgorCisjOiBidWlsdGluL212LmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgIuimhuiTiyAnJXMnIgorCisjOiBidWlsdGluL212LmM6MjM4Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAi5LiN6IO96KaG6JOLIgorCisjOiBidWlsdGluL212LmM6MjQxCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICLlkIzkuIDnm67mqJnlhbfmnInlpJrlgIvmupAiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDMKK21zZ2lkICJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIuebruaomeebrumMhOS4jeWtmOWcqCIKKworIzogYnVpbHRpbi9tdi5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiJXPvvIzmupA9JXPvvIznm67mqJk9JXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAi6YeN5paw5ZG95ZCNICVzIOiHsyAlc1xuIgorCisjOiBidWlsdGluL212LmM6Mjc3IGJ1aWx0aW4vcmVtb3RlLmM6NzgxIGJ1aWx0aW4vcmVwYWNrLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICLph43mlrDlkb3lkI0gJyVzJyDlpLHmlZciCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPOmBuOmghT5dIDzmj5DkuqQ+Li4uIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY2Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzpgbjpoIU+XSAtLWFsbCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NworbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLXN0ZGluIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzpgbjpoIU+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI0Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICLlj6rliJfljbDlkI3nqLHvvIjnhKEgU0hBLTHvvIkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MjUKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgIuWPquS9v+eUqOaomeexpOS+huWRveWQjeaPkOS6pCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjUyNworbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLlj6rkvb/nlKjlkowgPOaooeW8jz4g55u456ym5ZCI55qE5byV55SoIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTI5Cittc2dpZCAiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLlv73nlaXlkowgPOaooeW8jz4g55u456ym5ZCI55qE5byV55SoIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTMxCittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAi5YiX5Ye65Y+v5Lul5b6e5omA5pyJ5byV55So5a2Y5Y+W55qE5o+Q5LqkIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NTMyCittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICLlvp7mqJnmupbovLjlhaXoroDlj5YiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzMKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgIuWFgeioseWIl+WNsCBg5pyq5a6a576pYCDnmoTlkI3nqLHvvIjpoJDoqK3vvIkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo1MzkKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAi5Y+N5ZCR6Kej5p6Q6Ly45YWl5Lit55qE5qiZ57Gk77yI5YWn6YOo5L2/55So77yJIgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA86Ki76Kej5byV55SoPl0gW2xpc3QgWzznianku7Y+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+ICIKKyJ8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPOiou+ino+W8leeUqD5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPOiqquaYjj4gfCAtRiA85qqU5qGIPiAiCisifCAoLWMgfCAtQykgPOeJqeS7tj5dIFs854mp5Lu2Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzoqLvop6PlvJXnlKg+XSBjb3B5IFstZl0gPOa6kOeJqeS7tj4gPOebruaomeeJqeS7tj4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICIKKyIoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDzoqLvop6PlvJXnlKg+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA86Kqq5piOPiB8IC1GIDzmqpTmoYg+IHwgIgorIigtYyB8IC1DKSA854mp5Lu2Pl0gWzznianku7Y+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA86Ki76Kej5byV55SoPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzznianku7Y+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzoqLvop6PlvJXnlKg+XSBzaG93IFs854mp5Lu2Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzoqLvop6PlvJXnlKg+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDznrZbnlaU+IF0gPOiou+ino+W8leeUqD4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNQorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSByZW1vdmUgWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA86Ki76Kej5byV55SoPl0gcmVtb3ZlIFs854mp5Lu2Pi4uLl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHBydW5lIFstbl0gWy12XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA86Ki76Kej5byV55SoPl0gcHJ1bmUgWy1uXSBbLXZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzkKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzoqLvop6PlvJXnlKg+XSBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQKK21zZ2lkICJnaXQgbm90ZXMgW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbbGlzdCBbPOeJqeS7tj5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5Cittc2dpZCAiZ2l0IG5vdGVzIGFkZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYWRkIFs86YG46aCFPl0gWzznianku7Y+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgWzzpgbjpoIU+XSA85rqQ54mp5Lu2PiA855uu5qiZ54mp5Lu2PiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzzmupDnianku7Y+IDznm67mqJnnianku7Y+XS4uLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwCittc2dpZCAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYXBwZW5kIFs86YG46aCFPl0gWzznianku7Y+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY1Cittc2dpZCAiZ2l0IG5vdGVzIGVkaXQgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGVkaXQgWzznianku7Y+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwCittc2dpZCAiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHNob3cgWzznianku7Y+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgWzzpgbjpoIU+XSA86Ki76Kej5byV55SoPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzzpgbjpoIU+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc3Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs86YG46aCFPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MgorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHJlbW92ZSBbPOeJqeS7tj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODcKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBwcnVuZSBbPOmBuOmghT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6OTIKK21zZ2lkICJnaXQgbm90ZXMgZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NworbXNnaWQgIldyaXRlL2VkaXQgdGhlIG5vdGVzIGZvciB0aGUgZm9sbG93aW5nIG9iamVjdDoiCittc2dzdHIgIueCuuS4i+mdoueahOeJqeS7tuWvqy/nt6jovK/oqqrmmI7vvJoiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIuS4jeiDveeCuueJqeS7tiAnJXMnIOmWi+WniyAnc2hvdyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnc2hvdycgb3V0cHV0IgorbXNnc3RyICLkuI3og73oroDlj5YgJ3Nob3cnIOeahOi8uOWHuiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIueEoeazleeCuueJqeS7tiAnJXMnIOWujOaIkCAnc2hvdyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxOTcKK21zZ2lkICJwbGVhc2Ugc3VwcGx5IHRoZSBub3RlIGNvbnRlbnRzIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24iCittc2dzdHIgIuiri+mAj+mBjiAtbSDmiJYgLUYg6YG46aCF54K66Ki76Kej5o+Q5L6b5YWn5a65IgorCisjOiBidWlsdGluL25vdGVzLmM6MjA2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICLkuI3og73lr6voqLvop6Pnianku7YiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG5vdGUgY29udGVudHMgaGF2ZSBiZWVuIGxlZnQgaW4gJXMiCittc2dzdHIgIuiou+ino+WFp+Wuueiiq+eVmeWcqCAlcyDkuK0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNDIgYnVpbHRpbi90YWcuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICLkuI3og73plovllZ/miJboroDlj5YgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2MyBidWlsdGluL25vdGVzLmM6MzEzIGJ1aWx0aW4vbm90ZXMuYzozMTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODMgYnVpbHRpbi9ub3Rlcy5jOjQzOCBidWlsdGluL25vdGVzLmM6NTI2CisjOiBidWlsdGluL25vdGVzLmM6NTMxIGJ1aWx0aW4vbm90ZXMuYzo2MTAgYnVpbHRpbi9ub3Rlcy5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAi54Sh5rOV6Kej5p6QICclcycg54K65LiA5YCL5pyJ5pWI5byV55So44CCIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAi6K6A5Y+W54mp5Lu2ICclcycg5aSx5pWX44CCIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG5vdGUgZGF0YSBmcm9tIG5vbi1ibG9iIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAi5LiN6IO95b6e6Z2e6LOH5paZ54mp5Lu2ICclcycg5Lit6K6A5Y+W6Ki76Kej6LOH5paZ44CCIgorCisjOiBidWlsdGluL25vdGVzLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAi5qC85byP6Yyv6Kqk55qE6Ly45YWl6KGM77yaJyVzJ+OAgiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAi5b6eICclcycg6KSH6KO96Ki76Kej5YiwICclcycg5pmC5aSx5pWXIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGZpcnN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBnaXQKKyMuIG5vdGVzIGNvbW1hbmQ6ICdhZGQnLCAnbWVyZ2UnLCAncmVtb3ZlJywgZXRjLgorIy4KKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gJXMgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICLmi5LntZXlkJEgJTIkc++8iOWcqCByZWZzL25vdGVzLyDkuYvlpJbvvIklMSRz6Ki76KejIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzc2IGJ1aWx0aW4vbm90ZXMuYzo0MzEgYnVpbHRpbi9ub3Rlcy5jOjUwOQorIzogYnVpbHRpbi9ub3Rlcy5jOjUyMSBidWlsdGluL25vdGVzLmM6NTk4IGJ1aWx0aW4vbm90ZXMuYzo2NjUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTUgYnVpbHRpbi9ub3Rlcy5jOjk2MyBidWlsdGluL25vdGVzLmM6OTg1Cittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAi5Y+D5pW45aSq5aSaIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzg5IGJ1aWx0aW4vbm90ZXMuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIKK21zZ3N0ciAi5pyq55m854++54mp5Lu2ICVzIOeahOiou+ino+OAgiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMCBidWlsdGluL25vdGVzLmM6NTc2Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAi6Ki76Kej5YWn5a655L2c54K65LiA5YCL5a2X5LiyIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEzIGJ1aWx0aW4vbm90ZXMuYzo1NzkKK21zZ2lkICJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIKK21zZ3N0ciAi6Ki76Kej5YWn5a655Yiw5LiA5YCL5qqU5qGI5LitIgorCisjOiBidWlsdGluL25vdGVzLmM6NDE2IGJ1aWx0aW4vbm90ZXMuYzo1ODIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgIumHjeeUqOWSjOe3qOi8r+aMh+WumueahOiou+ino+eJqeS7tiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxOSBidWlsdGluL25vdGVzLmM6NTg1Cittc2dpZCAicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICLph43nlKjmjIflrprnmoToqLvop6Pnianku7YiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MjIgYnVpbHRpbi9ub3Rlcy5jOjU4OAorbXNnaWQgImFsbG93IHN0b3JpbmcgZW1wdHkgbm90ZSIKK21zZ3N0ciAi5YWB6Kix5YSy5a2Y56m655m95YKZ6Ki7IgorCisjOiBidWlsdGluL25vdGVzLmM6NDIzIGJ1aWx0aW4vbm90ZXMuYzo0OTYKK21zZ2lkICJyZXBsYWNlIGV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICLlj5bku6Plt7LlrZjlnKjnmoToqLvop6MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIuS4jeiDveaWsOWinuiou+ino+OAgueZvOePvueJqeS7tiAlcyDlt7LlrZjlnKjoqLvop6PjgILkvb/nlKggJy1mJyDopobok4vnj77lrZjoqLvop6MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjMgYnVpbHRpbi9ub3Rlcy5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIuimhuiTi+eJqeS7tiAlcyDnj77lrZjoqLvop6NcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3NSBidWlsdGluL25vdGVzLmM6NjM3IGJ1aWx0aW4vbm90ZXMuYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIuWIqumZpOeJqeS7tiAlcyDnmoToqLvop6NcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5NworbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICLlvp7mqJnmupbovLjlhaXoroDlj5bnianku7YiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTkKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAi6YeN5paw6LyJ5YWlIDzmjIfku6Q+IOeahOioreWumu+8iOmaseWQqyAtLXN0ZGlu77yJIgorCisjOiBidWlsdGluL25vdGVzLmM6NTE3Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICLlj4PmlbjlpKrlsJEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICLkuI3og73opIfoo73oqLvop6PjgILnmbznj77nianku7YgJXMg5bey5a2Y5Zyo6Ki76Kej44CC5L2/55SoICctZicg6KaG6JOL54++5a2Y6Ki76KejIgorCisjOiBidWlsdGluL25vdGVzLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICLmupDnianku7YgJXMg57y65bCR6Ki76Kej44CC5LiN6IO96KSH6KO944CCIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyLlrZDmjIfku6QgJ2VkaXQnIOeahOmBuOmghSAtbS8tRi8tYy8tQyDlt7Lmo4TnlKjjgIJcbiIKKyLoq4vmj5vnlKggJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMn44CCXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OTgKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICLliKrpmaTlvJXnlKggTk9URVNfTUVSR0VfUEFSVElBTCDlpLHmlZciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDAKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgIuWIqumZpOW8leeUqCBOT1RFU19NRVJHRV9SRUYg5aSx5pWXIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAyCittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnZ2l0IG5vdGVzIG1lcmdlJyB3b3JrdHJlZSIKK21zZ3N0ciAi5Yiq6ZmkICdnaXQgbm90ZXMgbWVyZ2UnIOW3peS9nOWNgOWkseaVlyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyMgorbXNnaWQgImZhaWxlZCB0byByZWFkIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICLoroDlj5blvJXnlKggTk9URVNfTUVSR0VfUEFSVElBTCDlpLHmlZciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAi54Sh5rOV5b6eIE5PVEVTX01FUkdFX1BBUlRJQUwg5Lit5om+5Yiw5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICLnhKHms5Xlvp4gTk9URVNfTUVSR0VfUEFSVElBTCDkuK3op6PmnpDmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MzkKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgIuino+aekCBOT1RFU19NRVJHRV9SRUYg5aSx5pWXIgorCisjOiBidWlsdGluL25vdGVzLmM6NzQyCittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplIG5vdGVzIG1lcmdlIgorbXNnc3RyICLnhKHms5XlrozmiJDoqLvop6PlkIjkvbUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub3RlcyBtZXJnZSBzdHJhdGVneSAlcyIKK21zZ3N0ciAi5pyq55+l55qE6Ki76Kej5ZCI5L21562W55WlICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg0Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICLpgJrnlKjpgbjpoIUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODYKK21zZ2lkICJNZXJnZSBvcHRpb25zIgorbXNnc3RyICLlkIjkvbXpgbjpoIUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODgKK21zZ2lkICIiCisicmVzb2x2ZSBub3RlcyBjb25mbGljdHMgdXNpbmcgdGhlIGdpdmVuIHN0cmF0ZWd5IChtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vIgorImNhdF9zb3J0X3VuaXEpIgorbXNnc3RyICLkvb/nlKjmjIflrprnmoTnrZbnlaXop6PmsbroqLvop6PooZ3nqoEgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi9jYXRfc29ydF91bmlxKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MAorbXNnaWQgIkNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIuaPkOS6pOacquWQiOS9teeahOiou+inoyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MgorbXNnaWQgImZpbmFsaXplIG5vdGVzIG1lcmdlIGJ5IGNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIumAj+mBjuaPkOS6pOacquWQiOS9teeahOiou+ino+S+huWujOaIkOiou+ino+WQiOS9tSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NAorbXNnaWQgIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIuS4reatouiou+ino+WQiOS9teeahOaWueahiCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NgorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICLkuK3mraLoqLvop6PlkIjkvbUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MDcKK21zZ2lkICJjYW5ub3QgbWl4IC0tY29tbWl0LCAtLWFib3J0IG9yIC1zLy0tc3RyYXRlZ3kiCittc2dzdHIgIuS4jeiDvea3t+eUqCAtLWNvbW1pdOOAgS0tYWJvcnQg5oiWIC1zLy0tc3RyYXRlZ3kiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTIKK21zZ2lkICJtdXN0IHNwZWNpZnkgYSBub3RlcyByZWYgdG8gbWVyZ2UiCittc2dzdHIgIuW/hemgiOaMh+WumuS4gOWAi+iou+ino+W8leeUqOS+huWQiOS9tSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC1zLy0tc3RyYXRlZ3k6ICVzIgorbXNnc3RyICLmnKrnn6XnmoQgLXMvLS1zdHJhdGVnee+8miVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgImEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICLkvY3mlrwgJTIkcyDnmoTkuIDlgIvliLAgJTEkcyDkuK3nmoToqLvop6PlkIjkvbXmraPlnKjln7fooYzkuK0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0b3JlIGxpbmsgdG8gY3VycmVudCBub3RlcyByZWYgKCVzKSIKK21zZ3N0ciAi54Sh5rOV5YSy5a2Y6YCj57WQ5Yiw55uu5YmN55qE6Ki76Kej5byV55So77yIJXPvvIkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF1dG9tYXRpYyBub3RlcyBtZXJnZSBmYWlsZWQuIEZpeCBjb25mbGljdHMgaW4gJXMgYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggIgorIidnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvciBhYm9ydCB0aGUgbWVyZ2Ugd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tIgorImFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIuiHquWLleWQiOS9teiqquaYjuWkseaVl+OAguS/ruaUuSAlcyDkuK3nmoTooZ3nqoHkuKbkuJTkvb/nlKjmjIfku6QgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcg5o+QIgorIuS6pOe1kOaenO+8jOaIluiAheS9v+eUqOaMh+S7pCAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIOe1guatouWQiOS9teOAglxuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODk3IGJ1aWx0aW4vdGFnLmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLnhKHms5Xop6PmnpAgJyVzJyDngrrkuIDlgIvmnInmlYjlvJXnlKjjgIIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgIueJqeS7tiAlcyDmspLmnInoqLvop6NcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxMgorbXNnaWQgImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIKK21zZ3N0ciAi5ZiX6Kmm5Yiq6Zmk5LiN5a2Y5Zyo55qE6Ki76Kej5LiN5piv5LiA5YCL6Yyv6KqkIgorCisjOiBidWlsdGluL25vdGVzLmM6OTE1Cittc2dpZCAicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIuW+nuaomea6lui8uOWFpeiugOWPlueJqeS7tuWQjeeosSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NCBidWlsdGluL3BydW5lLmM6MTMwIGJ1aWx0aW4vd29ya3RyZWUuYzoxNjQKK21zZ2lkICJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiCittc2dzdHIgIuS4jeWIqumZpO+8jOWPqumhr+ekuiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgbm90ZXMiCittc2dzdHIgIuWgseWRiua4hemZpOeahOiou+inoyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OAorbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAi6Ki76Kej5byV55SoIgorCisjOiBidWlsdGluL25vdGVzLmM6OTk5Cittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzLXJlZj4iCittc2dzdHIgIuW+niA86Ki76Kej5byV55SoPiDkvb/nlKjoqLvop6MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDM0IGJ1aWx0aW4vc3Rhc2guYzoxNjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIuacquefpeWtkOaMh+S7pO+8miVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUyCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzzpgbjpoIU+Li4uXSBbPCA85byV55So5YiX6KGoPiB8IDwgPOeJqeS7tuWIl+ihqD5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUzCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgImdpdCBwYWNrLW9iamVjdHMgWzzpgbjpoIU+Li4uXSA85YmN57a05ZCN56ixPiBbPCA85byV55So5YiX6KGoPiB8IDwgPOeJqeS7tuWIl+ihqD5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIgorbXNnc3RyICIlcyDpjK/nmoTljIXnianku7YgQ1JDIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhY2tlZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICIlcyDmkI3lo57nmoTljIXnianku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBkZWx0YSBkZXRlY3RlZCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICLnmbznj77nianku7YgJXMg6YGe6L+0IGRlbHRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICJvcmRlcmVkICV1IG9iamVjdHMsIGV4cGVjdGVkICU8UFJJdTMyPiIKK21zZ3N0ciAi5o6S5bqP5LqGICV1IOWAi+eJqeS7tu+8jOmgkOacnyAlPFBSSXUzMj4g5YCLIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk3MgorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgcGFja3MgYXJlIHNwbGl0IGR1ZSB0byBwYWNrLnBhY2tTaXplTGltaXQiCittc2dzdHIgIuemgeeUqCBiaXRtYXAg5a+r5YWl77yM5Zug54K6IHBhY2sucGFja1NpemVMaW1pdCDoqK3lrprkvb/lvpfljIXooqvliIfliIbngrrlpJrlgIsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTg1Cittc2dpZCAiV3JpdGluZyBvYmplY3RzIgorbXNnc3RyICLlr6vlhaXnianku7bkuK0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTA0NiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICLlsI0gJXMg5ZG85Y+rIHN0YXQg5aSx5pWXIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvdGUgJTxQUkl1MzI+IG9iamVjdHMgd2hpbGUgZXhwZWN0aW5nICU8UFJJdTMyPiIKK21zZ3N0ciAi5a+r5YWlICU8UFJJdTMyPiDlgIvnianku7bogIzpoJDmnJ8gJTxQUkl1MzI+IOWAiyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMjk3Cittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgIuemgeeUqCBiaXRtYXAg5a+r5YWl77yM5Zug54K65LiA5Lqb54mp5Lu25bCH5LiN5pyD6KKr5omT5YyFIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3ZlcmZsb3cgaW4gcGFjayBmb3IgJXMiCittc2dzdHIgIiVzIOWjk+e4ruS4rSBkZWx0YSDln7rmupbkvY3np7votornlYwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTczMworIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdXQgb2YgYm91bmQgZm9yICVzIgorbXNnc3RyICIlcyDnmoQgZGVsdGEg5Z+65rqW5L2N56e76LaK55WMIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwMDQKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICLnianku7boqIjmlbjkuK0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0IGhlYWRlciBvZiAlcyIKK21zZ3N0ciAi54Sh5rOV6Kej5p6Q54mp5Lu2ICVzIOaomemgreioiuaBryIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjE5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjIzNQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAi54mp5Lu2ICVzIOeEoeazleiugOWPliIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMjIyIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGggKCU8UFJJdU1BWD4gdnMgJTxQUkl1TUFYPikiCittc2dzdHIgIueJqeS7tiAlcyDkuI3kuIDoh7TnmoTnianku7bplbfluqbvvIglPFBSSXVNQVg+IHZzICU8UFJJdU1BWD7vvIkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjI1OQorbXNnaWQgInN1Ym9wdGltYWwgcGFjayAtIG91dCBvZiBtZW1vcnkiCittc2dzdHIgIuasoeWEqu+8iHN1Ym9wdGltYWzvvInmiZPljIUgLSDoqJjmhrbpq5TkuI3otrMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU3NAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWx0YSBjb21wcmVzc2lvbiB1c2luZyB1cCB0byAlZCB0aHJlYWRzIgorbXNnc3RyICLkvb/nlKggJWQg5YCL5Z+36KGM57eS6YCy6KGM5aOT57iuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhY2sgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0YWcgJXMiCittc2dzdHIgIueEoeazleeCuuaomeexpCAlcyDlo5PnuK7nianku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjgwMQorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIuWjk+e4rueJqeS7tuS4rSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODA3Cittc2dpZCAiaW5jb25zaXN0ZW5jeSB3aXRoIGRlbHRhIGNvdW50IgorbXNnc3RyICLkuI3kuIDoh7TnmoTlt67nlbDoqIjmlbgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgZWRnZSBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorIumgkOacn+mCiueVjOeJqeS7tu+8iGVkZ2Ugb2JqZWN077yJSUTvvIzljbvlvpfliLDlnoPlnL7os4fmlpnvvJpcbiIKKyIgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCittc2dzdHIgIiIKKyLpoJDmnJ/nianku7YgSUTvvIzljbvlvpfliLDlnoPlnL7os4fmlpnvvJpcbiIKKyIgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjk5MgorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIC0tbWlzc2luZyIKK21zZ3N0ciAi6YG46aCFIC0tbWlzc2luZyDnmoTlgLznhKHmlYgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA1MSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTkKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4IgorbXNnc3RyICLnhKHms5XplovllZ/ljIXmqpTmoYjntKLlvJUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzA4MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgYXQgJXMgY291bGQgbm90IGJlIGV4YW1pbmVkIgorbXNnc3RyICLnhKHms5XmqqLmn6UgJXMg6JmV55qE6ayG5pWj54mp5Lu2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNjcKK21zZ2lkICJ1bmFibGUgdG8gZm9yY2UgbG9vc2Ugb2JqZWN0IgorbXNnc3RyICLnhKHms5XlvLfliLbprIbmlaPnianku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSByZXYgJyVzJyIKK21zZ3N0ciAi5LiN5piv5LiA5YCL54mI5pysICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gJyVzJyIKK21zZ3N0ciAi5aOe55qE54mI5pysICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4OAorbXNnaWQgInVuYWJsZSB0byBhZGQgcmVjZW50IG9iamVjdHMiCittc2dzdHIgIueEoeazleaWsOWinuacgOi/keeahOeJqeS7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgIuS4jeaUr+aPtOeahOe0ouW8leeJiOacrCAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgIuWjnueahOe0ouW8leeJiOacrCAnJXMnIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzODMKK21zZ2lkICI8dmVyc2lvbj5bLDxvZmZzZXQ+XSIKK21zZ3N0ciAiPOeJiOacrD5bLDzkvY3np7s+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg0Cittc2dpZCAid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIKK21zZ3N0ciAi55So5oyH5a6a55qEIGlkeCDmoLzlvI/niYjmnKzkvoblr6vljIXntKLlvJXmqpTmoYgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM4NworbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgIuavj+WAi+i8uOWHuuWMheeahOacgOWkp+WwuuWvuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzg5Cittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICLlv73nlaXlvp7lgpnnlKjnianku7blhLLlrZjoo6HlgJ/nlKjnianku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5MQorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAi5b+955Wl5YyF54mp5Lu2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTMKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBvYmplY3RzIgorbXNnc3RyICLpmZDliLbmiZPljIXoppbnqpfnmoTnianku7bmlbgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5NQorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgIumZpOeJqeS7tuaVuOmHj+mZkOWItuWkluioreWumuaJk+WMheimlueql+eahOiomOaGtumrlOmZkOWItiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk3Cittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgIuaJk+WMheWFgeioseeahCBkZWx0YSDpj4jnmoTmnIDlpKfplbfluqYiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5OQorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAi6YeN55So5bey5a2Y5Zyo55qEIGRlbHRhcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDAxCittc2dpZCAicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIKK21zZ3N0ciAi6YeN55So5bey5a2Y5Zyo55qE54mp5Lu2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDMKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgIuS9v+eUqCBPRlNfREVMVEEg54mp5Lu2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDUKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICLkvb/nlKjln7fooYznt5Lmn6XoqaLmnIDkvbMgZGVsdGEg56ym5ZCIIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDcKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICLkuI3lu7rnq4vnqbrnmoTljIXovLjlh7oiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwOQorbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIuW+nuaomea6lui8uOWFpeiugOWPlueJiOacrOiZn+WPg+aVuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDExCittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgIumZkOWItumCo+S6m+WwmuacquaJk+WMheeahOeJqeS7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDE0Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgIuWMheaLrOWPr+S7peW+nuS7u+S9leW8leeUqOWtmOWPluWIsOeahOeJqeS7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDE3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICLljIXmi6zooqvlvJXnlKjml6XoqozlvJXnlKjliLDnmoTnianku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgIuWMheaLrOiiq+e0ouW8leW8leeUqOWIsOeahOeJqeS7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDIzCittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICLovLjlh7rljIXliLDmqJnmupbovLjlh7oiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyNQorbXNnaWQgImluY2x1ZGUgdGFnIG9iamVjdHMgdGhhdCByZWZlciB0byBvYmplY3RzIHRvIGJlIHBhY2tlZCIKK21zZ3N0ciAi5YyF5ous6YKj5Lqb5byV55So5LqG5b6F5omT5YyF54mp5Lu255qE5qiZ57Gk54mp5Lu2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjcKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIue2reaMgeeEoeazleWPluW+l+eahOeJqeS7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDI5Cittc2dpZCAicGFjayBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLmiZPljIXprIbmlaPnmoTnhKHms5Xlj5blvpfnianku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzMQorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICLlsIfmr5Tmj5DkvpsgPOaZgumWkz4g5paw55qE54Sh5rOV5a2Y5Y+W55qE54mp5Lu26Kej5YyFIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MzQKK21zZ2lkICJ1c2UgdGhlIHNwYXJzZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIgorbXNnc3RyICLkvb/nlKjnqIDnlo/lj6/ku6Xlj5blvpfmgKfmvJTnrpfms5UiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzNgorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICLlu7rnq4vnsr7nsKHljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQzOAorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICLlu7rnq4vpganlkIjmt7ropIfoo73niYjmnKzluqvlj5blvpfnmoTljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0MAorbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgIuW/veeVpemFjeaciSAua2VlcCDmqpTmoYjnmoTljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0MgorbXNnaWQgImlnbm9yZSB0aGlzIHBhY2siCittc2dzdHIgIuW/veeVpeipsiBwYWNrIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NDQKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICLmiZPljIXlo5PnuK7ntJrliKUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0NgorbXNnaWQgImRvIG5vdCBoaWRlIGNvbW1pdHMgYnkgZ3JhZnRzIgorbXNnc3RyICLpoa/npLrooqvnp7vmpI3pmrHol4/nmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ0OAorbXNnaWQgInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi5L2/55SoIGJpdG1hcCDntKLlvJXvvIjlpoLmnpzmnInnmoToqbHvvInku6Xmj5Dpq5jnianku7boqIjmlbjmmYLnmoTpgJ/luqYiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1MAorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgIuWcqOW7uueri+WMhee0ouW8leeahOWQjOaZguW7uueriyBiaXRtYXAg57Si5byVIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0NTQKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCBpZiBwb3NzaWJsZSIKK21zZ3N0ciAi5aaC5p6c5Y+v6IO977yM5a+rIGJpdG1hcCDntKLlvJUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ1OAorbXNnaWQgImhhbmRsaW5nIGZvciBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgIuiZleeQhumBuuWkseeahOeJqeS7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDYxCittc2dpZCAiZG8gbm90IHBhY2sgb2JqZWN0cyBpbiBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgIuS4jeimgeaJk+WMhSBwcm9taXNvciBwYWNrZmlsZSDkuK3nmoTnianku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ2MworbXNnaWQgInJlc3BlY3QgaXNsYW5kcyBkdXJpbmcgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgIuWcqOWinumHj+Wjk+e4ruaZguWPg+iAg+izh+aWmeWztiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGNoYWluIGRlcHRoICVkIGlzIHRvbyBkZWVwLCBmb3JjaW5nICVkIgorbXNnc3RyICLlop7ph4/pj4jmt7HluqYgJWQg5aSq5rex5LqG77yM5by35Yi254K6ICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjay5kZWx0YUNhY2hlTGltaXQgaXMgdG9vIGhpZ2gsIGZvcmNpbmcgJWQiCittc2dzdHIgIuioreWumiBwYWNrLmRlbHRhQ2FjaGVMaW1pdCDlpKrpq5jkuobvvIzlvLfliLbngrogJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzU1MQorbXNnaWQgIi0tbWF4LXBhY2stc2l6ZSBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhIHBhY2sgZm9yIHRyYW5zZmVyIgorbXNnc3RyICLkuI3og73kvb/nlKggLS1tYXgtcGFjay1zaXplIOS+huani+W7uuWCs+i8uOeUqOeahOWMheaqlOahiCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTUzCittc2dpZCAibWluaW11bSBwYWNrIHNpemUgbGltaXQgaXMgMSBNaUIiCittc2dzdHIgIuacgOWwj+eahOWMheaqlOahiOWkp+Wwj+aYryAxIE1pQiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTU4Cittc2dpZCAiLS10aGluIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGFuIGluZGV4YWJsZSBwYWNrIgorbXNnc3RyICItLXRoaW4g5LiN6IO955So5pa85bu656uL5LiA5YCL5Y+v57Si5byV5YyFIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NjEKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC0tdW5wYWNrLXVucmVhY2hhYmxlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSDlkowgLS11bnBhY2stdW5yZWFjaGFibGUg5LiN55u45a65IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1NjcKK21zZ2lkICJjYW5ub3QgdXNlIC0tZmlsdGVyIHdpdGhvdXQgLS1zdGRvdXQiCittc2dzdHIgIuS4jeiDveWcqOaykuaciSAtLXN0ZG91dCDnmoTmg4Xms4HkuIvkvb/nlKggLS1maWx0ZXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzYyNworbXNnaWQgIkVudW1lcmF0aW5nIG9iamVjdHMiCittc2dzdHIgIuaemuiIieeJqeS7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUb3RhbCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHJldXNlZCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHBhY2stIgorInJldXNlZCAlPFBSSXUzMj4iCittc2dzdHIgIiIKKyLnuL3lhbEgJTxQUkl1MzI+ICjlt67nlbAgJTxQUkl1MzI+Ke+8jOW+qeeUqCAlPFBSSXUzMj4gKOW3rueVsCAlPFBSSXUzMj4p77yM6YeN55So5YyFICIKKyIlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6OAorbXNnaWQgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBwYWNrLXJlZnMgWzzpgbjpoIU+XSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAi5omT5YyF5LiA5YiHIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE3Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgIua4hemZpOmshuaVo+eahOW8leeUqO+8iOmgkOiore+8iSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo5Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDIKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAi5q2j5Zyo5Yiq6Zmk6YeN6KSH54mp5Lu2IgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPOaZgumWkz5dIFstLV0gWzxoZWFkPi4uLl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzEKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgIuWgseWRiua4hemZpOeahOeJqeS7tiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNAorbXNnaWQgImV4cGlyZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICLkvb/ml6nmlrzmj5DkvpvmmYLplpPnmoTnianku7bpgY7mnJ8iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzYKK21zZ2lkICJsaW1pdCB0cmF2ZXJzYWwgdG8gb2JqZWN0cyBvdXRzaWRlIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAi6ZmQ5Yi26YGN5q23IHByb21pc29yIHBhY2tmaWxlIOS7peWklueahOeJqeS7tiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjE1MAorbXNnaWQgImNhbm5vdCBwcnVuZSBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAi5LiN6IO95Zyo54+N5ZOB54mI5pys5bqr5Lit5Z+36KGM5riF55CG5YuV5L2cIgorCisjOiBidWlsdGluL3B1bGwuYzo0NSBidWlsdGluL3B1bGwuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiVzIOeahOWAvOeEoeaViO+8miVzIgorCisjOiBidWlsdGluL3B1bGwuYzo2NworbXNnaWQgImdpdCBwdWxsIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVsbCBbPOmBuOmghT5dIFs854mI5pys5bqrPiBbPOW8leeUqOimj+agvD4uLi5dXSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTIyCittc2dpZCAiY29udHJvbCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIuaOp+WItuWtkOaooee1hOeahOmBnui/tOWPluW+lyIKKworIzogYnVpbHRpbi9wdWxsLmM6MTI2Cittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgIuWSjOWQiOS9teebuOmXnOeahOmBuOmghSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTI5Cittc2dpZCAiaW5jb3Jwb3JhdGUgY2hhbmdlcyBieSByZWJhc2luZyByYXRoZXIgdGhhbiBtZXJnaW5nIgorbXNnc3RyICLkvb/nlKjph43lrprln7rlupXli5XkvZzlj5bku6PlkIjkvbXli5XkvZzku6XlpZfnlKjkv67mlLkiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE1NyBidWlsdGluL3JlYmFzZS5jOjQ3MSBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAi5YWB6Kix5b+r6L2J5byPIgorCisjOiBidWlsdGluL3B1bGwuYzoxNjYKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIHJlYmFzZSIKK21zZ3N0ciAi6YeN5a6a5Z+65bqV5YuV5L2c5YmN5b6M5Z+36KGM6Ieq5YuV5YSy6JeP5ZKM5b2I5Ye65YSy6JePIgorCisjOiBidWlsdGluL3B1bGwuYzoxODIKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmciCittc2dzdHIgIuWSjOWPluW+l+ebuOmXnOeahOWPg+aVuCIKKworIzogYnVpbHRpbi9wdWxsLmM6MTkyCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAi5by35Yi26KaG6JOL5pys5qmf5YiG5pSvIgorCisjOiBidWlsdGluL3B1bGwuYzoyMDAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBwdWxsZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIuS4pueZvOaLieWPlueahOWtkOaooee1hOeahOaVuOmHjyIKKworIzogYnVpbHRpbi9wdWxsLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICJwdWxsLmZmIOeahOWPluWAvOeEoeaViO+8miVzIgorCisjOiBidWlsdGluL3B1bGwuYzo0MjYKK21zZ2lkICIiCisiVGhlcmUgaXMgbm8gY2FuZGlkYXRlIGZvciByZWJhc2luZyBhZ2FpbnN0IGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgIgorImZldGNoZWQuIgorbXNnc3RyICLlnKjmgqjliZvliZvlj5blvpfliLDnmoTlvJXnlKjkuK3mspLmnInph43lrprln7rlupXli5XkvZznmoTlgJnpgbjjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyOAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorbXNnc3RyICLlnKjmgqjliZvliZvlj5blvpfliLDnmoTlvJXnlKjkuK3mspLmnInlkIjkvbXli5XkvZznmoTlgJnpgbjjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyOQorbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIumAmuW4uOmAmeaEj+WRs+iRl+aCqOaPkOS+m+S6huS4gOiQrOeUqOWtl+WFg+W8leeUqOimj+agvOS9huacquiDveWSjOmBoOerr+espuWQiOOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIiIKKyLmgqjopoHmsYLlvp7pgaDnq68gJyVzJyDmi4nlj5bvvIzkvYbmmK/mnKrmjIflrprkuIDlgIvliIbmlK/jgILlm6DngrrpgJnkuI3mmK/nm67liY1cbiIKKyLliIbmlK/poJDoqK3nmoTpgaDnq6/niYjmnKzluqvvvIzmgqjlv4XpoIjlnKjmjIfku6TliJfkuK3mjIflrprkuIDlgIvliIbmlK/lkI3jgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNyBidWlsdGluL3JlYmFzZS5jOjE0MDkgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3MworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgIuaCqOebruWJjeS4jeWcqOS4gOWAi+WIhuaUr+S4iuOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM5IGJ1aWx0aW4vcHVsbC5jOjQ1NCBnaXQtcGFyc2UtcmVtb3RlLnNoOjc5Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIKK21zZ3N0ciAi6KuL5oyH5a6a5oKo6KaB6YeN5a6a5Z+65bqV5Yiw5ZOq5LiA5YCL5YiG5pSv44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDEgYnVpbHRpbi9wdWxsLmM6NDU2IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODIKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iCittc2dzdHIgIuiri+aMh+WumuaCqOimgeWQiOS9teWTquS4gOWAi+WIhuaUr+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQyIGJ1aWx0aW4vcHVsbC5jOjQ1NworbXNnaWQgIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIuips+imiyBnaXQtcHVsbCgxKeOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ0IGJ1aWx0aW4vcHVsbC5jOjQ1MCBidWlsdGluL3B1bGwuYzo0NTkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxNSBnaXQtcGFyc2UtcmVtb3RlLnNoOjY0Cittc2dpZCAiPHJlbW90ZT4iCittc2dzdHIgIjzpgaDnq68+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NDQgYnVpbHRpbi9wdWxsLmM6NDU5IGJ1aWx0aW4vcHVsbC5jOjQ2NAorIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NQorbXNnaWQgIjxicmFuY2g+IgorbXNnc3RyICI85YiG5pSvPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcmViYXNlLmM6MTQwNyBnaXQtcGFyc2UtcmVtb3RlLnNoOjc1Cittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIuebruWJjeWIhuaUr+aykuaciei/vei5pOioiuaBr+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDYxIGdpdC1wYXJzZS1yZW1vdGUuc2g6OTUKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6IgorbXNnc3RyICLlpoLmnpzmgqjmg7PopoHngrrmraTliIbmlK/lu7rnq4vov73ouaToqIrmga/vvIzmgqjlj6/ku6Xln7fooYzvvJoiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIuaCqOeahOioreWumuS4reaMh+WumuimgeWQiOS9temBoOerr+eahOW8leeUqCAnJXMn77yMXG4iCisi5L2G5piv5rKS5pyJ5Y+W5b6X5Yiw6YCZ5YCL5byV55So44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBjb21taXQgJXMiCittc2dzdHIgIueEoeazleWtmOWPluaPkOS6pCAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODU3Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICLngrrph43lrprln7rlupXli5XkvZzlv73nlaUgLS12ZXJpZnktc2lnbmF0dXJlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6OTEyCittc2dpZCAiLS1bbm8tXWF1dG9zdGFzaCBvcHRpb24gaXMgb25seSB2YWxpZCB3aXRoIC0tcmViYXNlLiIKK21zZ3N0ciAiLS1bbm8tXWF1dG9zdGFzaCDpgbjpoIXlj6rlnKjkvb/nlKggLS1yZWJhc2Ug5pmC5pyJ5pWI44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICLmm7TmlrDlsJrmnKroqpXnlJ/nmoTliIbmlK/vvIzorormm7TmlrDlop7oh7PntKLlvJXjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyNAorbXNnaWQgInB1bGwgd2l0aCByZWJhc2UiCittc2dzdHIgIumHjeWumuWfuuW6leW8j+aLieWPliIKKworIzogYnVpbHRpbi9wdWxsLmM6OTI1Cittc2dpZCAicGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAi6KuL5o+Q5Lqk5oiW5YSy6JeP5a6D5YCR44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuXG4iCisiZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb21cbiIKKyJjb21taXQgJXMuIgorbXNnc3RyICIiCisiZmV0Y2gg5pu05paw5LqG55uu5YmN55qE5YiG5pSv44CC5b+r6L2J5oKo55qE5bel5L2c5Y2AXG4iCisi6Iez5o+Q5LqkICVz44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICIiCisi5oKo55uu5YmN55qE5bel5L2c5Y2A54Sh5rOV5Z+36KGM5b+r6L2J5YuV5L2c44CCXG4iCisi6aaW5YWI5Z+36KGM5aaC5LiL5oyH5Luk77yaXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIuS7peeiuuiqjeaJgOacieacieeUqOeahOizh+aWmeWdh+W3suWEsuWtmOOAgueEtuW+jOWft+ihjOS4i+mdoueahOaMh+S7pFxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorIuW+qeWOn+S5i+WJjeeahOeLgOaFi+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTcxCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIueEoeazleWwh+WkmuWAi+WIhuaUr+WQiOS9teWIsOepuuWIhuaUr+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTc1Cittc2dpZCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzLiIKK21zZ3N0ciAi54Sh5rOV6YeN5a6a5Z+65bqV5Yiw5aSa5YCL5YiG5pSv44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo5ODIKK21zZ2lkICJjYW5ub3QgcmViYXNlIHdpdGggbG9jYWxseSByZWNvcmRlZCBzdWJtb2R1bGUgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAi5pys5qmf5a2Q5qih57WE5Lit5pyJ5L+u5pS577yM54Sh5rOV6YeN5a6a5Z+65bqVIgorCisjOiBidWlsdGluL3B1c2guYzoxOQorbXNnaWQgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVzaCBbPOmBuOmghT5dIFs854mI5pys5bqrPiBbPOW8leeUqOimj+agvD4uLi5dXSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTEyCittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICLmqJnnsaTlvozpnaLmnKrmj5DkvpsgPOaomeexpD4g5Y+D5pW4IgorCisjOiBidWlsdGluL3B1c2guYzoxMjIKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUg5Y+q5o6l5Y+X57Ch5Zau55qE55uu5qiZ5byV55So5ZCNIgorCisjOiBidWlsdGluL3B1c2guYzoxNjgKK21zZ2lkICIiCisiXG4iCisiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksIHNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIgorbXNnc3RyICIiCisiXG4iCisi54K65LqG5rC45LmF5Zyw6YG45pOH5Lu75LiA6YG46aCF77yM5Y+D6KaLICdnaXQgaGVscCBjb25maWcnIOS4reeahCBwdXNoLmRlZmF1bHTjgIIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGRvZXMgbm90IG1hdGNoXG4iCisidGhlIG5hbWUgb2YgeW91ciBjdXJyZW50IGJyYW5jaC4gIFRvIHB1c2ggdG8gdGhlIHVwc3RyZWFtIGJyYW5jaFxuIgorIm9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiVG8gcHVzaCB0byB0aGUgYnJhbmNoIG9mIHRoZSBzYW1lIG5hbWUgb24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuaCqOebruWJjeWIhuaUr+eahOS4iua4uOWIhuaUr+WSjOaCqOebruWJjeWIhuaUr+WQjeS4jeespuWQiO+8jOeCuuaOqOmAgeWIsOmBoOerr+eahOS4iua4uOWIhuaUr++8jFxuIgorIuS9v+eUqFxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisi54K65o6o6YCB6Iez6YGg56uv5ZCM5ZCN5YiG5pSv77yM5L2/55SoXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAiIgorIuaCqOebruWJjeS4jeWcqOS4gOWAi+WIhuaUr+S4iuOAglxuIgorIuePvuWcqOeCuuaOqOmAgeebruWJje+8iOWIhumboumWi+mgreaMh+aome+8ieeahOatt+WPsu+8jOS9v+eUqFxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjzpgaDnq6/liIbmlK/lkI3lrZc+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorIuebruWJjeWIhuaUryAlcyDmspLmnInlsI3mh4nnmoTkuIrmuLjliIbmlK/jgIJcbiIKKyLngrrmjqjpgIHnm67liY3liIbmlK/kuKblu7rnq4voiIfpgaDnq6/kuIrmuLjnmoTov73ouaTvvIzkvb/nlKhcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICLnm67liY3liIbmlK8gJXMg5pyJ5aSa5YCL5LiK5ri45YiG5pSv77yM5ouS57WV5o6o6YCB44CCIgorCisjOiBidWlsdGluL3B1c2guYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKK21zZ3N0ciAiIgorIuaCqOato+aOqOmAgeiHs+mBoOerryAnJXMn77yI5YW25Lim6Z2e55uu5YmN5YiG5pSvICclcycg55qE5LiK5ri477yJ77yMXG4iCisi6ICM5rKS5pyJ5ZGK6Ki05oiR6KaB5o6o6YCB5LuA6bq844CB5pu05paw5ZOq5YCL6YGg56uv5YiG5pSv44CCIgorCisjOiBidWlsdGluL3B1c2guYzoyNzAKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAi5oKo5rKS5pyJ54K65o6o6YCB5oyH5a6a5Lu75L2V5byV55So6KaP5qC877yM5Lim5LiUIHB1c2guZGVmYXVsdCDngrogXCJub3RoaW5nXCLjgIIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3NworbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gSW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLlxuIgorIidnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIuabtOaWsOiiq+aLkue1le+8jOWboOeCuuaCqOebruWJjeWIhuaUr+eahOacgOaWsOaPkOS6pOiQveW+jOaWvOWFtuWwjeaHieeahOmBoOerr+WIhuaUr+OAglxuIgorIuWGjeasoeaOqOmAgeWJje+8jOWFiOiIh+mBoOerr+iuiuabtOWQiOS9te+8iOWmgiAnZ2l0IHB1bGwgLi4uJ++8ieOAguips+imi1xuIgorIidnaXQgcHVzaCAtLWhlbHAnIOS4reeahCAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyDlsI/nr4DjgIIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4MworbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisiY291bnRlcnBhcnQuIENoZWNrIG91dCB0aGlzIGJyYW5jaCBhbmQgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIuabtOaWsOiiq+aLkue1le+8jOWboOeCuuaOqOmAgeeahOS4gOWAi+WIhuaUr+eahOacgOaWsOaPkOS6pOiQveW+jOaWvOWFtuWwjeaHieeahOmBoOerr+WIhuaUr+OAglxuIgorIuewveWHuuipsuWIhuaUr+S4puaVtOWQiOmBoOerr+iuiuabtO+8iOWmgiAnZ2l0IHB1bGwgLi4uJ++8ie+8jOeEtuW+jOWGjeaOqOmAgeOAguips+imi1xuIgorIidnaXQgcHVzaCAtLWhlbHAnIOS4reeahCAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyDlsI/nr4DjgIIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4OQorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgcmVtb3RlIGNvbnRhaW5zIHdvcmsgdGhhdCB5b3UgZG9cbiIKKyJub3QgaGF2ZSBsb2NhbGx5LiBUaGlzIGlzIHVzdWFsbHkgY2F1c2VkIGJ5IGFub3RoZXIgcmVwb3NpdG9yeSBwdXNoaW5nXG4iCisidG8gdGhlIHNhbWUgcmVmLiBZb3UgbWF5IHdhbnQgdG8gZmlyc3QgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuLCAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLlm6DngrrpgaDnq6/niYjmnKzluqvljIXlkKvmgqjmnKzmqZ/lsJrkuI3lrZjlnKjnmoTmj5DkuqTvvIzogIzlsI7oh7Tmm7TmlrDooqvmi5LntZXjgILpgJnpgJrluLjmmK/lm6Dngrrlj6blpJZcbiIKKyLkuIDlgIvniYjmnKzluqvlt7LlkJHoqbLlvJXnlKjpgLLooYzkuobmjqjpgIHjgILlho3mrKHmjqjpgIHliY3vvIzmgqjlj6/og73pnIDopoHlhYjmlbTlkIjpgaDnq6/orormm7RcbiIKKyLvvIjlpoIgJ2dpdCBwdWxsIC4uLifvvInjgIJcbiIKKyLoqbPoposgJ2dpdCBwdXNoIC0taGVscCcg5Lit55qEICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIOWwj+evgOOAgiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk2Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAi5pu05paw6KKr5ouS57WV77yM5Zug54K66Kmy5qiZ57Gk5Zyo6YGg56uv5bey57aT5a2Y5Zyo44CCIgorCisjOiBidWlsdGluL3B1c2guYzoyOTkKK21zZ2lkICIiCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIuWmguaenOS4jeS9v+eUqCAnLS1mb3JjZScg5Y+D5pW477yM5oKo5LiN6IO95pu05paw5LiA5YCL5oyH5ZCR6Z2e5o+Q5Lqk54mp5Lu255qE6YGg56uv5byV55So77yMXG4iCisi5Lmf5LiN6IO95pu05paw6YGg56uv5byV55So6K6T5YW25oyH5ZCR5LiA5YCL6Z2e5o+Q5Lqk54mp5Lu244CCXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIuaOqOmAgeWIsCAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgIuaOqOmAgeS4gOS6m+W8leeUqOWIsCAnJXMnIOWkseaVlyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQyCittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAi54mI5pys5bqrIgorCisjOiBidWlsdGluL3B1c2guYzo1NDMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjQKK21zZ2lkICJwdXNoIGFsbCByZWZzIgorbXNnc3RyICLmjqjpgIHmiYDmnInlvJXnlKgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NCBidWlsdGluL3NlbmQtcGFjay5jOjE2NgorbXNnaWQgIm1pcnJvciBhbGwgcmVmcyIKK21zZ3N0ciAi6Y+h5YOP5omA5pyJ5byV55SoIgorCisjOiBidWlsdGluL3B1c2guYzo1NDYKK21zZ2lkICJkZWxldGUgcmVmcyIKK21zZ3N0ciAi5Yiq6Zmk5byV55SoIgorCisjOiBidWlsdGluL3B1c2guYzo1NDcKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgIuaOqOmAgeaomeexpO+8iOS4jeiDveS9v+eUqCAtLWFsbCBvciAtLW1pcnJvcu+8iSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY3Cittc2dpZCAiZm9yY2UgdXBkYXRlcyIKK21zZ3N0ciAi5by35Yi25pu05pawIgorCisjOiBidWlsdGluL3B1c2guYzo1NTIgYnVpbHRpbi9zZW5kLXBhY2suYzoxODEKK21zZ2lkICI8cmVmbmFtZT46PGV4cGVjdD4iCittc2dzdHIgIjzlvJXnlKjlkI0+OjzmnJ/mnJvlgLw+IgorCisjOiBidWlsdGluL3B1c2guYzo1NTMgYnVpbHRpbi9zZW5kLXBhY2suYzoxODIKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAi6KaB5rGC5byV55So6IiK55qE5Y+W5YC854K66Kit5a6a5YC8IgorCisjOiBidWlsdGluL3B1c2guYzo1NTYKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIuaOp+WItuWtkOaooee1hOeahOmBnui/tOaOqOmAgSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU4IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAi5L2/55So57K+57Ch5omT5YyFIgorCisjOiBidWlsdGluL3B1c2guYzo1NTkgYnVpbHRpbi9wdXNoLmM6NTYwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYxCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgInJlY2VpdmUgcGFjayBwcm9ncmFtIgorbXNnc3RyICLmjqXmlLbljIXnqIvlvI8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2MQorbXNnaWQgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvc3RhdHVzIgorbXNnc3RyICLoqK3lrpogZ2l0IHB1bGwvc3RhdHVzIOeahOS4iua4uCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY0Cittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgIua4hemZpOacrOapn+WIqumZpOeahOW8leeUqCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY2Cittc2dpZCAiYnlwYXNzIHByZS1wdXNoIGhvb2siCittc2dzdHIgIue5numBjiBwcmUtcHVzaCDmjpvpiaQiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NworbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAi5o6o6YCB57y65bCR5L2G5pyJ6Zec55qE5qiZ57GkIgorCisjOiBidWlsdGluL3B1c2guYzo1NzAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjkKK21zZ2lkICJHUEcgc2lnbiB0aGUgcHVzaCIKK21zZ3N0ciAi55SoIEdQRyDngrrmjqjpgIHnsL3lkI0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MiBidWlsdGluL3NlbmQtcGFjay5jOjE3NgorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICLpnIDopoHpgaDnq6/mlK/mj7Tljp/lrZDkuovli5kiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU5MAorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICItLWRlbGV0ZSDoiIcgLS1hbGzjgIEtLW1pcnJvciDlj4ogLS10YWdzIOS4jeebuOWuuSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTkyCittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIi0tZGVsZXRlIOacquaOpeS7u+S9leW8leeUqOaykuacieaEj+e+qSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBvc2l0b3J5ICclcyciCittc2dzdHIgIuWjnueahOeJiOacrOW6qyAnJXMnIgorCisjOiBidWlsdGluL3B1c2guYzo2MTMKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSAiCisicmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAiIgorIuaykuacieioreWumuaOqOmAgeebruaomeOAglxuIgorIuaIlumAj+mBjuaMh+S7pOWIl+aMh+WumiBVUkzvvIzmiJbnlKjkuIvpnaLmjIfku6ToqK3lrprkuIDlgIvpgaDnq6/niYjmnKzluqtcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPOWQjeeosT4gPOS9jeWdgD5cbiIKKyJcbiIKKyLnhLblvozkvb/nlKjoqbLpgaDnq6/niYjmnKzluqvlkI3ln7fooYzmjqjpgIFcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPOWQjeeosT5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjI4Cittc2dpZCAiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCDlkowgLS10YWdzIOS4jeebuOWuuSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjMwCittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1hbGwg5LiN6IO95ZKM5byV55So6KaP5qC85ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL3B1c2guYzo2MzQKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbWlycm9yIOWSjCAtLXRhZ3Mg5LiN55u45a65IgorCisjOiBidWlsdGluL3B1c2guYzo2MzYKK21zZ2lkICItLW1pcnJvciBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLW1pcnJvciDkuI3og73lkozlvJXnlKjopo/moLzlkIzmmYLkvb/nlKgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzOQorbXNnaWQgIi0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCDlkowgLS1taXJyb3Ig5LiN55u45a65IgorCisjOiBidWlsdGluL3B1c2guYzo2NDMKK21zZ2lkICJwdXNoIG9wdGlvbnMgbXVzdCBub3QgaGF2ZSBuZXcgbGluZSBjaGFyYWN0ZXJzIgorbXNnc3RyICLmjqjpgIHpgbjpoIXkuI3og73mnInmj5vooYznrKbomZ8iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjgKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLWJhc2U+Li48b2xkLXRpcD4gPG5ldy1iYXNlPi4uPG5ldy10aXA+IgorbXNnc3RyICJnaXQgcmFuZ2UtZGlmZiBbPOmBuOmghT5dIDxvbGQtYmFzZT4uLjxvbGQtdGlwPiA8bmV3LWJhc2U+Li48bmV3LXRpcD4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjkKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLXRpcD4uLi48bmV3LXRpcD4iCittc2dzdHIgImdpdCByYW5nZS1kaWZmIFs86YG46aCFPl0gPG9sZC10aXA+Li4uPG5ldy10aXA+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoxMAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxiYXNlPiA8b2xkLXRpcD4gPG5ldy10aXA+IgorbXNnc3RyICJnaXQgcmFuZ2UtZGlmZiBbPOmBuOmghT5dIDxiYXNlPiA8b2xkLXRpcD4gPG5ldy10aXA+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyMgorbXNnaWQgIlBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiCittc2dzdHIgIuW7uueri+asiumHjeeahOeZvuWIhuavlCIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjQKK21zZ2lkICJ1c2Ugc2ltcGxlIGRpZmYgY29sb3JzIgorbXNnc3RyICLkvb/nlKjnsKHllq7lt67nlbDpoY/oibIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAibm90ZXMiCittc2dzdHIgIuiou+inoyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjYKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBsb2cnIgorbXNnc3RyICLlgrPpgZ7ntaYgJ2dpdCBsb2cnIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo1MCBidWlsdGluL3JhbmdlLWRpZmYuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyAuLiBpbiByYW5nZTogJyVzJyIKK21zZ3N0ciAi5rKS5pyJ5Zyo56+E5ZyN5Lit5L2/55SoIC4u77yaJyVzJyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NjQKK21zZ2lkICJzaW5nbGUgYXJnIGZvcm1hdCBtdXN0IGJlIHN5bW1ldHJpYyByYW5nZSIKK21zZ3N0ciAi5Zau5YCL5Y+D5pW45qC85byP5b+F6aCI5piv5bCN56ix56+E5ZyN77yI5Y2z5YyF5ZCrLi4u77yJIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo3OQorbXNnaWQgIm5lZWQgdHdvIGNvbW1pdCByYW5nZXMiCittc2dzdHIgIumcgOimgeWFqeWAi+aPkOS6pOevhOWcjSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzo0MQorbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTzliY3ntrQ+KSBbLSIKKyJ1IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD085qqU5qGIPl0gKC0tZW1wdHkgfCA85qi554uA54mp5Lu2MT4gWzzmqLnni4Dnianku7YyPiBbPOaoueeLgOeJqeS7tjM+XV0pIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNAorbXNnaWQgIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iCittc2dzdHIgIuWwh+e0ouW8lee1kOaenOWvq+WFpSA85qqU5qGIPiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjcKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAi5Y+q5piv5riF56m657Si5byVIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyOQorbXNnaWQgIk1lcmdpbmciCittc2dzdHIgIuWQiOS9tSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzEKK21zZ2lkICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIgorbXNnc3RyICLoroDlj5bkuYvppJjlho3ln7fooYzkuIDlgIvlkIjkvbUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMzCittc2dpZCAiMy13YXkgbWVyZ2UgaWYgbm8gZmlsZSBsZXZlbCBtZXJnaW5nIHJlcXVpcmVkIgorbXNnc3RyICLlpoLmnpzmspLmnInmqpTmoYjntJrlkIjkvbXpnIDopoHvvIzln7fooYzkuInmlrnlkIjkvbUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM1Cittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAi5a2Y5Zyo5paw5aKe5ZKM5Yiq6Zmk5pmC77yM5Lmf5Z+36KGM5LiJ5pa55ZCI5L21IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgIumhnuS8vOaWvCAtbe+8jOS9huaNqOajhOacquWQiOS9teeahOaineebriIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzgKK21zZ2lkICI8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIjzlrZDnm67pjIQ+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzkKK21zZ2lkICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAi6K6A5Y+W5qi554uA54mp5Lu25Yiw57Si5byV55qEIDzlrZDnm67pjIQ+LyDkuIsiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQyCittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAi55So5ZCI5L2155qE57WQ5p6c5pu05paw5bel5L2c5Y2AIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiZ2l0aWdub3JlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAi5YWB6Kix5b+955Wl5qqU5qGI5Lit6Kit5a6a55qE5qqU5qGI5Y+v5Lul6KKr6KaG6JOLIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OAorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAi5ZCI5L215b6M5LiN5qqi5p+l5bel5L2c5Y2AIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OQorbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAi5LiN5pu05paw57Si5byV5Y2A5ZKM5bel5L2c5Y2AIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MQorbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAi6Lez6YGO5oeJ55So56iA55aP57C95Ye66YGO5r++5ZmoIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MworbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAi6Zmk6YyvIHVucGFjay10cmVlcyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTcKK21zZ2lkICJzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcyIKK21zZ3N0ciAi5oqR5Yi25Zue6aWL6KiK5oGvIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE4OAorbXNnaWQgIllvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICLmgqjpnIDopoHlhYjop6Pmsbrnm67liY3ntKLlvJXnmoTooZ3nqoEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPiB8IC0ta2VlcC1iYXNlXSAiCisiWzx1cHN0cmVhbT4gWzxicmFuY2g+XV0iCittc2dzdHIgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPOaMh+S7pD5dIFstLW9udG8gPOaWsOWfuuekjj4gfCAtLWtlZXAtYmFzZV0gWzwiCisi5LiK5ri4PiBbPOWIhuaUrz5dXSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNAorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XSAtLXJvb3QgWzxicmFuY2g+XSIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgWy1pXSBb6YG46aCFXSBbLS1leGVjIDzmjIfku6Q+XSBbLS1vbnRvIDzmlrDln7rnpI4+XSAtLXJvb3QgWzzliIbmlK8+XSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNgorbXNnaWQgImdpdCByZWJhc2UgLS1jb250aW51ZSB8IC0tYWJvcnQgfCAtLXNraXAgfCAtLWVkaXQtdG9kbyIKK21zZ3N0ciAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NSBidWlsdGluL3JlYmFzZS5jOjE5OSBidWlsdGluL3JlYmFzZS5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSB0b2RvIGxpc3Q6ICclcyciCittc2dzdHIgIuS4jeWPr+eUqOeahOW+hei+puWIl+ihqO+8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIgorbXNnc3RyICLnhKHms5Xlu7rnq4vmmqvmmYLnmoQgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6Mjk4Cittc2dpZCAiY291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIueEoeazleaomeiomOeCuuS6kuWLleW8jyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNTIKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgdG9kbyBsaXN0IgorbXNnc3RyICLnhKHms5XnlJ/miJDlvoXovqbliJfooagiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzkxCittc2dpZCAiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iCittc2dzdHIgIuS9v+eUqCAtLXVwc3RyZWFtIOaIliAtLW9udG8g5b+F6aCI5o+Q5L6b5LiA5YCL5Z+656SO5o+Q5LqkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ2MQorbXNnaWQgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSBbPOmBuOmghT5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NCBidWlsdGluL3JlYmFzZS5jOjE1NTAKK21zZ2lkICIoREVQUkVDQVRFRCkga2VlcCBlbXB0eSBjb21taXRzIgorbXNnc3RyICIo5qOE55SoKSDkv53mjIHnqbrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc4IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI4Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICLlhYHoqLHmj5DkuqToqqrmmI7ngrrnqboiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgwCittc2dpZCAicmViYXNlIG1lcmdlIGNvbW1pdHMiCittc2dzdHIgIuWwjeWQiOS9teaPkOS6pOmHjeWumuWfuuW6lSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODIKK21zZ2lkICJrZWVwIG9yaWdpbmFsIGJyYW5jaCBwb2ludHMgb2YgY291c2lucyIKK21zZ3N0ciAi5L+d5oyB5YWE5byf5o+Q5Lqk55qE5Y6f5aeL5YiG5pSv6bueIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NAorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgIuenu+WLleS7pSBzcXVhc2ghL2ZpeHVwISDplovpoK3nmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg1Cittc2dpZCAic2lnbiBjb21taXRzIgorbXNnc3RyICLnsL3lkI3mj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg3IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MAorbXNnaWQgImRpc3BsYXkgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgIumhr+ekuuS4iua4uOiuiuWMlueahOW3rueVsOe1seioiCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODkKK21zZ2lkICJjb250aW51ZSByZWJhc2UiCittc2dzdHIgIue5vOe6jOmHjeWumuWfuuW6lSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTEKK21zZ2lkICJza2lwIGNvbW1pdCIKK21zZ3N0ciAi6Lez6YGO5o+Q5LqkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MgorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAi6YeN5a6a5Z+65bqV5b6F6L6m5YiX6KGoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NAorbXNnaWQgInNob3cgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgIumhr+ekuuebruWJjeS/ruijnOaqlCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTcKK21zZ2lkICJzaG9ydGVuIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAi57iu55+t5b6F6L6m5YiX6KGo5Lit55qE5o+Q5Lqk6JmfIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5OQorbXNnaWQgImV4cGFuZCBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgIuaTtOWxleW+hei+puWIl+ihqOS4reeahOaPkOS6pOiZnyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDEKK21zZ2lkICJjaGVjayB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICLmqqLmn6XlvoXovqbliJfooagiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAzCittc2dpZCAicmVhcnJhbmdlIGZpeHVwL3NxdWFzaCBsaW5lcyIKK21zZ3N0ciAi6YeN5paw5o6S5YiXIGZpeHVwL3NxdWFzaCDooYwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA1Cittc2dpZCAiaW5zZXJ0IGV4ZWMgY29tbWFuZHMgaW4gdG9kbyBsaXN0IgorbXNnc3RyICLlnKjlvoXovqbliJfooajkuK3mj5LlhaUgZXhlYyDln7fooYzmjIfku6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA2Cittc2dpZCAib250byIKK21zZ3N0ciAib250byIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDkKK21zZ2lkICJyZXN0cmljdC1yZXZpc2lvbiIKK21zZ3N0ciAicmVzdHJpY3QtcmV2aXNpb24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA5Cittc2dpZCAicmVzdHJpY3QgcmV2aXNpb24iCittc2dzdHIgIumZkOWItueJiOacrCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTEKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLW9udG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTEyCittc2dpZCAic3F1YXNoIG9udG8iCittc2dzdHIgInNxdWFzaCBvbnRvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNAorbXNnaWQgInRoZSB1cHN0cmVhbSBjb21taXQiCittc2dzdHIgIuS4iua4uOaPkOS6pCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJoZWFkLW5hbWUiCittc2dzdHIgImhlYWQtbmFtZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJoZWFkIG5hbWUiCittc2dzdHIgImhlYWQg5ZCN56ixIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMQorbXNnaWQgInJlYmFzZSBzdHJhdGVneSIKK21zZ3N0ciAi6YeN5a6a5Z+65bqV562W55WlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMgorbXNnaWQgInN0cmF0ZWd5LW9wdHMiCittc2dzdHIgInN0cmF0ZWd5LW9wdHMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIzCittc2dpZCAic3RyYXRlZ3kgb3B0aW9ucyIKK21zZ3N0ciAi562W55Wl6YG46aCFIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNAorbXNnaWQgInN3aXRjaC10byIKK21zZ3N0ciAi5YiH5o+b5YiwIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyNQorbXNnaWQgInRoZSBicmFuY2ggb3IgY29tbWl0IHRvIGNoZWNrb3V0IgorbXNnc3RyICLopoHnsL3lh7rnmoTliIbmlK/miJbmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI2Cittc2dpZCAib250by1uYW1lIgorbXNnc3RyICJvbnRvLW5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI2Cittc2dpZCAib250byBuYW1lIgorbXNnc3RyICJvbnRvIG5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI3Cittc2dpZCAiY21kIgorbXNnc3RyICJjbWQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTI3Cittc2dpZCAidGhlIGNvbW1hbmQgdG8gcnVuIgorbXNnc3RyICLopoHln7fooYznmoTmjIfku6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTMwIGJ1aWx0aW4vcmViYXNlLmM6MTU4NAorbXNnaWQgImF1dG9tYXRpY2FsbHkgcmUtc2NoZWR1bGUgYW55IGBleGVjYCB0aGF0IGZhaWxzIgorbXNnc3RyICLoh6rli5Xph43mlrDlronmjpLku7vkvZXlpLHmlZfnmoQgYGV4ZWNgIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU0NgorbXNnaWQgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1yZWJhc2UtbWVyZ2VzIgorbXNnc3RyICLkuI3kvb/nlKggLS1yZWJhc2UtbWVyZ2Vz77yM5YmHIC0tW25vLV1yZWJhc2UtY291c2lucyDmspLmnInmlYjmnpwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiJXMg6ZyA6KaB5LqS5YuV5byP6YeN5a6a5Z+65bqVIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0ICdvbnRvJzogJyVzJyIKK21zZ3N0ciAi54Sh5rOV5Y+W5b6XICdvbnRvJ++8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjI3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3JpZy1oZWFkOiAnJXMnIgorbXNnc3RyICLnhKHmlYjnmoTljp/lp4sgaGVhZO+8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGludmFsaWQgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU6ICclcyciCittc2dzdHIgIuW/veeVpeeEoeaViOeahCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0Ze+8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIuS4jeiDveiugOWPliAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIuS4jeiDveWEsuWtmCAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo4NTMKK21zZ2lkICJjb3VsZCBub3QgZGV0ZXJtaW5lIEhFQUQgcmV2aXNpb24iCittc2dzdHIgIuS4jeiDveeiuuWumiBIRUFEIOeJiOacrCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo5NzYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxCittc2dpZCAiIgorIlJlc29sdmUgYWxsIGNvbmZsaWN0cyBtYW51YWxseSwgbWFyayB0aGVtIGFzIHJlc29sdmVkIHdpdGhcbiIKKyJcImdpdCBhZGQvcm0gPGNvbmZsaWN0ZWRfZmlsZXM+XCIsIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiWW91IGNhbiBpbnN0ZWFkIHNraXAgdGhpcyBjb21taXQ6IHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIuXG4iCisiVG8gYWJvcnQgYW5kIGdldCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgXCJnaXQgcmViYXNlXCIsIHJ1biBcImdpdCByZWJhc2UgLS0iCisiYWJvcnRcIi4iCittc2dzdHIgIiIKKyLmiYvli5Xop6PmsbrmiYDmnInooZ3nqoHvvIzln7fooYwgXCJnaXQgYWRkL3JtIDzooZ3nqoHnmoTmqpTmoYg+XCIg5qiZ6KiYXG4iCisi6KGd56qB5bey6Kej5rG677yM54S25b6M5Z+36KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLjgILmgqjkuZ/lj6/ku6Xln7fooYxcbiIKKyJcImdpdCByZWJhc2UgLS1za2lwXCIg5oyH5Luk6Lez6YGO6YCZ5YCL5o+Q5Lqk44CC5aaC5p6c5oOz6KaB57WC5q2i5Z+36KGM5Lim5Zue5YiwXG4iCisiXCJnaXQgcmViYXNlXCIg5Z+36KGM5LmL5YmN55qE54uA5oWL77yM5Z+36KGMIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCLjgIIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiZ2l0IGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIHByZXBhcmluZyB0aGUgcGF0Y2hlcyB0byByZXBsYXlcbiIKKyJ0aGVzZSByZXZpc2lvbnM6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiQXMgYSByZXN1bHQsIGdpdCBjYW5ub3QgcmViYXNlIHRoZW0uIgorbXNnc3RyICIiCisiXG4iCisi5Zyo54K66YeN5pS+6YCZ5Lqb54mI5pys6ICM5rqW5YKZ5L+u6KOc5qqU5pmC77yMZ2l0IOmBh+WIsOS6huS4gOWAi+mMr+iqpO+8mlxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIuWboOatpCBnaXQg54Sh5rOV5bCN5YW26YeN5a6a5Z+65bqV44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVucmVjb2duaXplZCBlbXB0eSB0eXBlICclcyc7IHZhbGlkIHZhbHVlcyBhcmUgXCJkcm9wXCIsIFwia2VlcFwiLCBhbmQgXCJhc2siCisiXCIuIgorbXNnc3RyICLnhKHms5XorZjliKXnmoQgJyVzJyDnqbrpoZ7lnovvvJvmnInmlYjnmoTmlbjlgLzmnIkgXCJkcm9wXCLjgIFcImtlZXBcIiDot58gXCJhc2tcIuOAgiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlc1xuIgorIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC5cbiIKKyJTZWUgZ2l0LXJlYmFzZSgxKSBmb3IgZGV0YWlscy5cbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAnPGJyYW5jaD4nXG4iCisiXG4iCittc2dzdHIgIiIKKyIlc1xuIgorIuiri+aMh+WumuaCqOimgemHjeWumuWfuuW6leWIsOWTquWAi+WIhuaUr+OAglxuIgorIuips+imiyBnaXQtcmViYXNlKDEp44CCXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxicmFuY2g+J1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyLlpoLmnpzmgqjmg7PopoHngrrmraTliIbmlK/lu7rnq4vov73ouaToqIrmga/vvIzmgqjlj6/ku6Xln7fooYzvvJpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDcKK21zZ2lkICJleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICJleGVjIOaMh+S7pOS4jeiDveWMheWQq+aPm+ihjOespuiZnyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDUxCittc2dpZCAiZW1wdHkgZXhlYyBjb21tYW5kIgorbXNnc3RyICLnqbrnmoQgZXhlYyDmjIfku6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MQorbXNnaWQgInJlYmFzZSBvbnRvIGdpdmVuIGJyYW5jaCBpbnN0ZWFkIG9mIHVwc3RyZWFtIgorbXNnc3RyICLph43lrprln7rlupXliLDmj5DkvpvnmoTliIbmlK/ogIzpnZ7kuIrmuLgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MworbXNnaWQgInVzZSB0aGUgbWVyZ2UtYmFzZSBvZiB1cHN0cmVhbSBhbmQgYnJhbmNoIGFzIHRoZSBjdXJyZW50IGJhc2UiCittc2dzdHIgIuS9v+eUqOS4iua4uOWSjOWIhuaUr+eahOWQiOS9teWfuuekjuWBmueCuuebruWJjeWfuuekjiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg1Cittc2dpZCAiYWxsb3cgcHJlLXJlYmFzZSBob29rIHRvIHJ1biIKK21zZ3N0ciAi5YWB6Kix5Z+36KGMIHByZS1yZWJhc2Ug5o6b6YmkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODcKK21zZ2lkICJiZSBxdWlldC4gaW1wbGllcyAtLW5vLXN0YXQiCittc2dzdHIgIuWuiemdnOOAguaal+ekuiAtLW5vLXN0YXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MworbXNnaWQgImRvIG5vdCBzaG93IGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAi5LiN6aGv56S65LiK5ri46K6K5YyW55qE5beu55Ww57Wx6KiIIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTYKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5OiBsaW5lIHRvIGVhY2ggY29tbWl0IgorbXNnc3RyICLngrrmr4/kuIDlgIvmj5DkuqTmlrDlop7kuIDlgIsgU2lnbmVkLW9mZi1ieTog57C95ZCNIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTggYnVpbHRpbi9yZWJhc2UuYzoxNTAyIGJ1aWx0aW4vcmViYXNlLmM6MTUwNAorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFtJyIKK21zZ3N0ciAi5YKz6YGe57WmICdnaXQgYW0nIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDYgYnVpbHRpbi9yZWJhc2UuYzoxNTA4Cittc2dpZCAicGFzc2VkIHRvICdnaXQgYXBwbHknIgorbXNnc3RyICLlgrPpgZ7ntaYgJ2dpdCBhcHBseSciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxMCBidWlsdGluL3JlYmFzZS5jOjE1MTMKK21zZ2lkICJjaGVycnktcGljayBhbGwgY29tbWl0cywgZXZlbiBpZiB1bmNoYW5nZWQiCittc2dzdHIgIuaPgOmBuOaJgOacieaPkOS6pO+8jOWNs+S9v+acquS/ruaUuSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTE1Cittc2dpZCAiY29udGludWUiCittc2dzdHIgIue5vOe6jCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTE4Cittc2dpZCAic2tpcCBjdXJyZW50IHBhdGNoIGFuZCBjb250aW51ZSIKK21zZ3N0ciAi6Lez6YGO55uu5YmN5L+u6KOc5qqU5Lim57m857qMIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyMAorbXNnaWQgImFib3J0IGFuZCBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCIKK21zZ3N0ciAi57WC5q2i5Lim57C95Ye65Y6f5pyJ5YiG5pSvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjMKK21zZ2lkICJhYm9ydCBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzIgorbXNnc3RyICLntYLmraLkvYbkv53mjIEgSEVBRCDkuI3orooiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCBkdXJpbmcgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICLlnKjkupLli5XlvI/ph43lrprln7rlupXkuK3nt6jovK/lvoXovqbliJfooagiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNworbXNnaWQgInNob3cgdGhlIHBhdGNoIGZpbGUgYmVpbmcgYXBwbGllZCBvciBtZXJnZWQiCittc2dzdHIgIumhr+ekuuato+WcqOWll+eUqOaIluWQiOS9teeahOS/ruijnOaqlOahiCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTMwCittc2dpZCAidXNlIGFwcGx5IHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICLkvb/nlKjlpZfnlKjnrZbnlaXpgLLooYzph43lrprln7rlupUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzNAorbXNnaWQgInVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICLkvb/nlKjlkIjkvbXnrZbnlaXpgLLooYzph43lrprln7rlupUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzOAorbXNnaWQgImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIgorbXNnc3RyICLorpPkvb/nlKjogIXnt6jovK/opoHph43lrprln7rlupXnmoTmj5DkuqTliJfooagiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU0MgorbXNnaWQgIihERVBSRUNBVEVEKSB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbSIKK21zZ3N0ciAi77yI5bey5qOE55So77yJ5ZiX6Kmm6YeN5bu65ZCI5L215o+Q5Lqk6ICM6Z2e5b+955Wl5a6D5YCRIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NDcKK21zZ2lkICJob3cgdG8gaGFuZGxlIGNvbW1pdHMgdGhhdCBiZWNvbWUgZW1wdHkiCittc2dzdHIgIuiZleeQhuepuueZveaPkOS6pOeahOaWueW8jyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTU0Cittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISB1bmRlciAtaSIKK21zZ3N0ciAi5ZyoIC1pIOS6kuWLleaooeW8j+S4i++8jOenu+WLleS7pSBzcXVhc2ghL2ZpeHVwISDplovpoK3nmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2MAorbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIiCittc2dzdHIgIuWcqOWLleS9nOWJjeW+jOWft+ihjOiHquWLleWEsuiXj+WSjOW9iOWHuuWEsuiXjyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTYyCittc2dpZCAiYWRkIGV4ZWMgbGluZXMgYWZ0ZXIgZWFjaCBjb21taXQgb2YgdGhlIGVkaXRhYmxlIGxpc3QiCittc2dzdHIgIuWPr+e3qOi8r+WIl+ihqOeahOavj+S4gOWAi+aPkOS6pOS4i+mdouWinuWKoOS4gOihjCBleGVjIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NjYKK21zZ2lkICJhbGxvdyByZWJhc2luZyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgIuWFgeiosemHneWwjeepuuaPkOS6pOiqquaYjueahOaPkOS6pOmHjeWumuWfuuW6lSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTcwCittc2dpZCAidHJ5IHRvIHJlYmFzZSBtZXJnZXMgaW5zdGVhZCBvZiBza2lwcGluZyB0aGVtIgorbXNnc3RyICLlmJfoqablsI3lkIjkvbXmj5DkuqTph43lrprln7rlupXogIzkuI3mmK/lv73nlaXlroPlgJEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3MworbXNnaWQgInVzZSAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIHRvIHJlZmluZSB1cHN0cmVhbSIKK21zZ3N0ciAi5L2/55SoICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcg5L6G5pyA5L2z5YyW5LiK5ri4IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzUKK21zZ2lkICJ1c2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLkvb/nlKjmj5DkvpvnmoTlkIjkvbXnrZbnlaUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3NyBidWlsdGluL3JldmVydC5jOjExNQorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAi6YG46aCFIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NzgKK21zZ2lkICJwYXNzIHRoZSBhcmd1bWVudCB0aHJvdWdoIHRvIHRoZSBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi5bCH5Y+D5pW45YKz6YGe57Wm5ZCI5L21562W55WlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1ODEKK21zZ2lkICJyZWJhc2UgYWxsIHJlYWNoYWJsZSBjb21taXRzIHVwIHRvIHRoZSByb290KHMpIgorbXNnc3RyICLlsIfmiYDmnInlj6/ku6Xlj5blvpfnmoTmj5DkuqTph43lrprln7rlupXliLDmoLnmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU5OAorbXNnaWQgIiIKKyJ0aGUgcmViYXNlLnVzZUJ1aWx0aW4gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkIVxuIgorIlNlZSBpdHMgZW50cnkgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisi5bCNIHJlYmFzZS51c2VCdWlsdGluIOeahOaUr+aPtOW3suiiq+WIqumZpO+8gVxuIgorIuips+imiyAnZ2l0IGhlbHAgY29uZmlnJyDkuK3nmoTmop3nm67jgIIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwNAorbXNnaWQgIkl0IGxvb2tzIGxpa2UgJ2dpdCBhbScgaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIgorbXNnc3RyICLnnIvotbfkvoYgJ2dpdC1hbScg5q2j5Zyo5Z+36KGM5Lit44CC54Sh5rOV6YeN5a6a5Z+65bqV44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NDUKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyBpcyBkZXByZWNhdGVkLiBVc2UgLS1yZWJhc2UtbWVyZ2VzIGluc3RlYWQuIgorbXNnc3RyICJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIOiiq+ajhOeUqOOAgueUqCAtLXJlYmFzZS1tZXJnZXMg5Luj5pu/44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTAKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tb250byciCittc2dzdHIgIuS4jeiDveWwhyAnLS1rZWVwLWJhc2UnIOWSjCAnLS1vbnRvJyDntYTlkIjkvb/nlKgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1MgorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1yb290JyIKK21zZ3N0ciAi5LiN6IO95bCHICctLWtlZXAtYmFzZScg5ZKMICctLXJvb3QnIOe1hOWQiOS9v+eUqCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjU2Cittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAi5rKS5pyJ5q2j5Zyo6YCy6KGM55qE6YeN5a6a5Z+65bqV77yfIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NjAKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIuWLleS9nCAtLWVkaXQtdG9kbyDlj6rog73nlKjlnKjkupLli5XlvI/ph43lrprln7rlupXpgY7nqIvkuK3jgIIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY4MworbXNnaWQgIkNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIuS4jeiDveiugOWPliBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2OTUKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyLmgqjlv4XpoIjnt6jovK/miYDmnInnmoTlkIjkvbXooZ3nqoHvvIznhLblvozpgI/pgY4gZ2l0IGFkZFxuIgorIuaMh+S7pOWwh+Wug+WAkeaomeiomOeCuuW3suino+axuiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzE0Cittc2dpZCAiY291bGQgbm90IGRpc2NhcmQgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAi54Sh5rOV5o2o5qOE5bel5L2c5Y2A6K6K5pu0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1vdmUgYmFjayB0byAlcyIKK21zZ3N0ciAi54Sh5rOV56e75ZueICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICVzIGRpcmVjdG9yeSwgYW5kXG4iCisiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyJjYXNlLCBwbGVhc2UgdHJ5XG4iCisiXHQlc1xuIgorIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyJcdCVzXG4iCisiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyJ2YWx1YWJsZSB0aGVyZS5cbiIKK21zZ3N0ciAiIgorIuS8vOS5juW3suacieS4gOWAiyAlcyDnm67pjITvvIzmiJHmh7fnlpHmgqjmraPomZXmlrzlj6blpJbkuIDlgIvph43lrprln7rlupXli5XkvZzpgY7nqIvkuK3jgIJcbiIKKyLlpoLmnpzmmK/pgJnmqKPvvIzoq4vln7fooYxcbiIKKyJcdCVzXG4iCisi5aaC5p6c5LiN5piv6YCZ5qij77yM6KuL5Z+36KGMXG4iCisiXHQlc1xuIgorIueEtuW+jOWGjemHjeaWsOWft+ihjOOAgiDngrrpgb/lhY3pgbrlpLHph43opoHos4fmlpnvvIzmiJHlt7LntpPlgZzmraLnm67liY3li5XkvZzjgIJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODA2Cittc2dpZCAic3dpdGNoIGBDJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICLplovpl5wgYEMnIOacn+acm+S4gOWAi+aVuOWtl+WAvCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gbW9kZTogJXMiCittc2dzdHIgIuacquefpeaooeW8j++8miVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NjkKK21zZ2lkICItLXN0cmF0ZWd5IHJlcXVpcmVzIC0tbWVyZ2Ugb3IgLS1pbnRlcmFjdGl2ZSIKK21zZ3N0ciAiLS1zdHJhdGVneSDpnIDopoEgLS1tZXJnZSDmiJYgLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODk5Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgYXBwbHkgb3B0aW9ucyB3aXRoIG1lcmdlIG9wdGlvbnMiCittc2dzdHIgIuS4jeiDveWwhyBhcHBseSDlpZfnlKjpgbjpoIXoiIcgbWVyZ2Ug5ZCI5L216YG46aCF5LiA6LW35L2/55SoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biByZWJhc2UgYmFja2VuZDogJXMiCittc2dzdHIgIuacquefpSByZWJhc2Ug5b6M56uv77yaJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkzNworbXNnaWQgIi0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyByZXF1aXJlcyAtLWV4ZWMgb3IgLS1pbnRlcmFjdGl2ZSIKK21zZ3N0ciAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIOmcgOimgSAtLWV4ZWMg5oiWIC0taW50ZXJhY3RpdmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1NworbXNnaWQgImNhbm5vdCBjb21iaW5lICctLXByZXNlcnZlLW1lcmdlcycgd2l0aCAnLS1yZWJhc2UtbWVyZ2VzJyIKK21zZ3N0ciAi5LiN6IO95bCHICctLXByZXNlcnZlLW1lcmdlcycg5ZKMICctLXJlYmFzZS1tZXJnZXMnIOWQjOaZguS9v+eUqCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTYxCittc2dpZCAiIgorImVycm9yOiBjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyciCittc2dzdHIgIiIKKyLpjK/oqqTvvJrkuI3og73lsIcgJy0tcHJlc2VydmUtbWVyZ2VzJyDlkowgJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYycg5ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJXMnIgorbXNnc3RyICLnhKHmlYjnmoTkuIrmuLggJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTkxCittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBuZXcgcm9vdCBjb21taXQiCittc2dzdHIgIuS4jeiDveW7uueri+aWsOeahOagueaPkOS6pCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSB3aXRoIGJyYW5jaCIKK21zZ3N0ciAiJyVzJ++8muWPqumcgOimgeiIh+WIhuaUr+eahOS4gOWAi+WQiOS9teWfuuekjiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSIKK21zZ3N0ciAiJyVzJ++8muWPqumcgOimgeS4gOWAi+WQiOS9teWfuuekjiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0ICclcyciCittc2dzdHIgIuaykuacieaMh+WQkeS4gOWAi+acieaViOeahOaPkOS6pCAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoL2NvbW1pdCAnJXMnIgorbXNnc3RyICLoh7Tlkb3pjK/oqqTvvJrnhKHmraTliIbmlK8v5o+Q5LqkICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA2MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVmOiAlcyIKK21zZ3N0ciAi5rKS5pyJ6YCZ5qij55qE5byV55So77yaJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA3MworbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgdG8gYSByZXZpc2lvbiIKK21zZ3N0ciAi54Sh5rOV5bCHIEhFQUQg6Kej5p6Q54K65LiA5YCL54mI5pysIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTEKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICLnhKHms5UgYXV0b3N0YXNoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCBzdGFzaCByZXNwb25zZTogJyVzJyIKK21zZ3N0ciAi5oSP5aSW55qEIHN0YXNoIOWbnuaHie+8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAi5LiN6IO954K6ICclcycg5bu656uL55uu6YyEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICVzXG4iCittc2dzdHIgIuW7uueri+S6hiBhdXRvc3Rhc2jvvJolc1xuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjYKK21zZ2lkICJjb3VsZCBub3QgcmVzZXQgLS1oYXJkIgorbXNnc3RyICLnhKHms5UgcmVzZXQgLS1oYXJkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMzUKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICLoq4vmj5DkuqTmiJblhLLol4/kv67mlLnjgIIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3dpdGNoIHRvICVzIgorbXNnc3RyICLnhKHms5XliIfmj5vliLAgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE4MAorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkhFQUQg5piv5pyA5paw55qE44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZS5cbiIKK21zZ3N0ciAi55uu5YmN5YiG5pSvICVzIOaYr+acgOaWsOeahOOAglxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxOTAKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICJIRUFEIOaYr+acgOaWsOeahO+8jOW8t+WItumHjeWumuWfuuW6leOAgiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuXG4iCittc2dzdHIgIuebruWJjeWIhuaUryAlcyDmmK/mnIDmlrDnmoTvvIzlvLfliLbph43lrprln7rlupXjgIJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjAwCittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgInByZS1yZWJhc2Ug5o6b6Ymk5ouS57WV5LqG6YeN5a6a5Z+65bqV5YuV5L2c44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyB0byAlczpcbiIKK21zZ3N0ciAi5YiwICVzIOeahOiuiuabtO+8mlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIgorbXNnc3RyICLlvp4gJXMg5YiwICVzIOeahOiuiuabtO+8mlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uXG4iCittc2dzdHIgIummluWFiO+8jOmChOWOn+mWi+mgreaMh+aomeS7peS+v+WcqOWFtuS4iumHjeaUvuaCqOeahOW3peS9nC4uLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIyNDQKK21zZ2lkICJDb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIueEoeazleWIhumboumWi+mgreaMh+aomSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICVzIHRvICVzLlxuIgorbXNnc3RyICLlv6vovYkgJXMg5YiwICVz44CCXG4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MzMKK21zZ2lkICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKK21zZ3N0ciAiZ2l0IHJlY2VpdmUtcGFjayA854mI5pys5bqr55uu6YyEPiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4MjEKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeVxuIgorImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisid2l0aCB3aGF0IHlvdSBwdXNoZWQsIGFuZCB3aWxsIHJlcXVpcmUgJ2dpdCByZXNldCAtLWhhcmQnIHRvIG1hdGNoXG4iCisidGhlIHdvcmsgdHJlZSB0byBIRUFELlxuIgorIlxuIgorIllvdSBjYW4gc2V0IHRoZSAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvXG4iCisiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWVcbiIKKyJvdGhlciB3YXkuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXRcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyLpoJDoqK3npoHmraLmm7TmlrDpnZ7ntJTniYjmnKzluqvnmoTnm67liY3liIbmlK/vvIzlm6DngrrmgqjmjqjpgIHnmoTlhaflrrnlsIflsI7oh7TntKLlvJXlkozlt6XkvZzljYBcbiIKKyLkuI3kuIDoh7TvvIzkuKbkuJTlsIfpnIDopoHln7fooYwgJ2dpdCByZXNldCAtLWhhcmQnIOWwh+W3peS9nOWNgOespuWQiOWIsCBIRUFE44CCXG4iCisiXG4iCisi5oKo5Y+v5Lul5Zyo6YGg56uv54mI5pys5bqr5Lit6Kit5a6aICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyDoqK3lrprorormlbjngrpcbiIKKyInaWdub3JlJyDmiJYgJ3dhcm4nIOS7peWFgeioseaOqOmAgeWIsOebruWJjeWIhuaUr+OAgueEtuiAjOS4jeaOqOiWpumAmem6vOWBmu+8jOmZpOmdnuaCqFxuIgorIueUqOafkOeoruaWueW8j+Wwh+WFtuW3peS9nOWNgOabtOaWsOiHs+aCqOaOqOmAgeeahOeLgOaFi+OAglxuIgorIlxuIgorIuiLpeimgeWwgemOluatpOioiuaBr+S4lOS/neaMgemgkOioreihjOeCuu+8jOioreWumiAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCdcbiIKKyLoqK3lrprorormlbjngrogJ3JlZnVzZSfjgIIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODQxCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIGRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBkZW5pZWQsIGJlY2F1c2UgdGhlIG5leHRcbiIKKyInZ2l0IGNsb25lJyB3b24ndCByZXN1bHQgaW4gYW55IGZpbGUgY2hlY2tlZCBvdXQsIGNhdXNpbmcgY29uZnVzaW9uLlxuIgorIlxuIgorIllvdSBjYW4gc2V0ICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvXG4iCisiJ3dhcm4nIG9yICdpZ25vcmUnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBkZWxldGluZyB0aGVcbiIKKyJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlLCB5b3UgY2FuIHNldCBpdCB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyLpoJDoqK3npoHmraLliKrpmaTnm67liY3liIbmlK/vvIzlm6DngrrkuIvkuIDmrKEgJ2dpdCBjbG9uZScg5bCH5LiN5pyD57C95Ye65Lu75L2V5qqU5qGI77yMXG4iCisi5bCO6Ie05Zuw5oOR44CCXG4iCisiXG4iCisi5oKo5Y+v5Lul5Zyo6YGg56uv54mI5pys5bqr5Lit6Kit5a6aICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyDoqK3lrprorormlbjngrpcbiIKKyInd2FybifvvIjpoa/npLrorablkYroqIrmga/vvInmiJYgJ2lnbm9yZSfvvIjlv73nlaXorablkYroqIrmga/vvInku6XlhYHoqLHliKrpmaTnm67liY3liIbmlK/jgIJcbiIKKyJcbiIKKyLoi6XopoHlsIHpjpbmraToqIrmga/vvIzmgqjlj6/ku6XoqK3lrprlroPngrogJ3JlZnVzZSfjgIIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTkzOAorbXNnaWQgInF1aWV0IgorbXNnc3RyICLpnZzpu5jmqKHlvI8iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MgorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIgorbXNnc3RyICLmgqjlv4XpoIjmjIflrprkuIDlgIvnm67pjITjgIIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0aW1lPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT085pmC6ZaTPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTzmmYLplpM+XSBbLS0iCisicmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gWy0tYWxsXSA85byVIgorIueUqD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjIKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gPOW8lSIKKyLnlKg+Li4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjI1Cittc2dpZCAiZ2l0IHJlZmxvZyBleGlzdHMgPHJlZj4iCittc2dzdHIgImdpdCByZWZsb2cgZXhpc3RzIDzlvJXnlKg+IgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU2OCBidWlsdGluL3JlZmxvZy5jOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDlgIvmnInmlYjnmoTmmYLplpPmiLMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgcmVhY2hhYmxlIG9iamVjdHMuLi4iCittc2dzdHIgIuato+WcqOaomeiomOWPr+S7peWPluW+l+eJqeS7ti4uLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIG5vd2hlcmUhIgorbXNnc3RyICIlcyDmjIflkJHkuI3lrZjlnKjvvIEiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6Njk2Cittc2dpZCAibm8gcmVmbG9nIHNwZWNpZmllZCB0byBkZWxldGUiCittc2dzdHIgIuacquaMh+WumuimgeWIqumZpOeahOW8leeUqOaXpeiqjCIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmVmbG9nOiAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5YCL5byV55So5pel6KqM77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlZmxvZyBmb3IgJyVzJyIKK21zZ3N0ciAi5rKS5pyJICclcycg55qE5byV55So5pel6KqMIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZiBmb3JtYXQ6ICVzIgorbXNnc3RyICLnhKHmlYjnmoTlvJXnlKjmoLzlvI/vvJolcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NjUKK21zZ2lkICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorbXNnc3RyICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTgKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgYWRkIFstdCA85YiG5pSvPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA85ZCN56ixPiA85L2N5Z2APiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOSBidWlsdGluL3JlbW90ZS5jOjM5Cittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgImdpdCByZW1vdGUgcmVuYW1lIDzoiIrlkI3nqLE+IDzmlrDlkI3nqLE+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NDQKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDzlkI3nqLE+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIxIGJ1aWx0aW4vcmVtb3RlLmM6NDkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDzlkI3nqLE+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA85YiG5pSvPikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA85ZCN56ixPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMworbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA85ZCN56ixPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNAorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg857WEPiB8IDzpgaDnq68+KS4uLl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjUKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA85ZCN56ixPiA85YiG5pSvPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNiBidWlsdGluL3JlbW90ZS5jOjc1Cittc2dpZCAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA85ZCN56ixPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNyBidWlsdGluL3JlbW90ZS5jOjgwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPOWQjeeosT4gPOaWsOeahOS9jeWdgD4gWzzoiIrnmoTkvY3lnYA+XSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOCBidWlsdGluL3JlbW90ZS5jOjgxCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDzlkI3nqLE+IDzmlrDnmoTkvY3lnYA+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI5IGJ1aWx0aW4vcmVtb3RlLmM6ODIKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPOWQjeeosT4gPOS9jeWdgD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzQKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs86YG46aCFPl0gPOWQjeeosT4gPOS9jeWdgD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTQKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDzlkI3nqLE+IDzliIbmlK8+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU1Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA85ZCN56ixPiA85YiG5pSvPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MAorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2hvdyBbPOmBuOmghT5dIDzlkI3nqLE+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY1Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWzzpgbjpoIU+XSA85ZCN56ixPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MAorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBbPOmBuOmghT5dIFs857WEPiB8IDzpgaDnq68+XS4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAi5pu05pawICVzIOS4rSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzEKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3Ig6YG46aCF5Y2x6Zqq5LiU6YGO5pmC77yM6KuL5L2/55SoIC0tbWlycm9yPWZldGNoXG4iCisiXHQg5oiWIC0tbWlycm9yPXB1c2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq55+l55qE6Y+h5YOP5Y+D5pW477yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY0Cittc2dpZCAiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIKK21zZ3N0ciAi5oqT5Y+W6YGg56uv55qE5YiG5pSvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NgorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgIuaKk+WPluaZguWMr+WFpeaJgOacieeahOaomeexpOWSjOmXnOiBr+eJqeS7tiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjkKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgIuaIluS4jeaKk+WPluS7u+S9leaomeexpO+8iC0tbm8tdGFnc++8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEKK21zZ2lkICJicmFuY2goZXMpIHRvIHRyYWNrIgorbXNnc3RyICLov73ouaTnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcyCittc2dpZCAibWFzdGVyIGJyYW5jaCIKK21zZ3N0ciAi5Li757ea5YiG5pSvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3NAorbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICLmiorpgaDnq6/oqK3lrprngrrnlKjku6XmjqjpgIHmiJbmipPlj5bnmoTpj6Hlg48iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg2Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAi5oyH5a6a5LiA5YCLIG1hc3RlciDliIbmlK/kuKbkvb/nlKggLS1taXJyb3Ig6YG46aCF5rKS5pyJ5oSP576pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4OAorbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgIuaMh+Wumuimgei/vei5pOeahOWIhuaUr+WPquWcqOiIh+WPluW+l+mPoeWDj+WQjOaZguS9v+eUqOaJjeacieaEj+e+qSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTUgYnVpbHRpbi9yZW1vdGUuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi6YGg56uvICVzIOW3sue2k+WtmOWcqOOAgiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTkgYnVpbHRpbi9yZW1vdGUuYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDlgIvmnInmlYjnmoTpgaDnq6/lkI3nqLEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAi54Sh5rOV6Kit5a6aIG1hc3RlciAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIKK21zZ3N0ciAi54Sh5rOV5b6X5Yiw5byV55So6KaP5qC8ICVzIOeahOWPluW+l+WIl+ihqCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NTMgYnVpbHRpbi9yZW1vdGUuYzo0NjEKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICLvvIjnrKblkIjvvIkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDY1Cittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIu+8iOWIqumZpO+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICLnhKHms5XoqK3lrpogJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAlcyBjb25maWd1cmF0aW9uIHJlbW90ZS5wdXNoRGVmYXVsdCBpbjpcbiIKKyJcdCVzOiVkXG4iCisibm93IG5hbWVzIHRoZSBub24tZXhpc3RlbnQgcmVtb3RlICclcyciCittc2dzdHIgIiIKKyLkvY3mlrzkuIvov7DkvY3nva7nmoQgJXMg6Kit5a6a6aCFIHJlbW90ZS5wdXNoRGVmYXVsdO+8mlxuIgorIlx0JXM6JWRcbiIKKyLnj77lkb3lkI3miJDkuI3lrZjlnKjnmoTpgaDnq6/liIbmlK8gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2ODkgYnVpbHRpbi9yZW1vdGUuYzo4MzIgYnVpbHRpbi9yZW1vdGUuYzo5NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICclcyciCittc2dzdHIgIuaykuacieatpOmBoOerr+eJiOacrOW6q++8miclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73ph43mlrDlkb3lkI3oqK3lrprlsI/nr4AgJyVzJyDliLAgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisi5rKS5pyJ5pu05paw6Z2e6aCQ6Kit55qE5Y+W5b6X5byV55So6KaP5qC8XG4iCisiXHQlc1xuIgorIlx05aaC5p6c5b+F6KaB6KuL5omL5YuV5pu05paw6Kit5a6a44CCIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjc2NgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi5Yiq6ZmkICclcycg5aSx5pWXIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi5bu656uLICclcycg5aSx5pWXIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjg3NgorbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICLms6jmhI/vvJpyZWYvcmVtb3RlcyDlsaTntJrkuYvlpJbnmoTkuIDlgIvliIbmlK/mnKrooqvnp7vpmaTjgILopoHliKrpmaTlroPvvIzkvb/nlKjvvJoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAi5LiN6IO956e76Zmk6Kit5a6a5bCP56+AICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIKK21zZ3N0ciAiIOaWsOeahO+8iOS4i+S4gOasoeWPluW+l+Wwh+WEsuWtmOaWvCByZW1vdGVzLyVz77yJIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5NgorbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIg5bey6L+96LmkIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5OAorbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIg6YGO5pmC77yI5L2/55SoICdnaXQgcmVtb3RlIHBydW5lJyDkvobnp7vpmaTvvIkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwMAorbXNnaWQgIiA/Pz8iCittc2dzdHIgIiA/Pz8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgIueEoeaViOeahCBicmFuY2guJXMubWVyZ2XvvIzkuI3og73ph43lrprln7rlupXliLDkuIDlgIvku6XkuIrnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgb250byByZW1vdGUgJXMiCittc2dzdHIgIuS6kuWLleW8j+mHjeWumuWfuuW6leWIsOmBoOerryAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSAod2l0aCBtZXJnZXMpIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICLkupLli5XlvI/ph43lrprln7rlupXvvIjlkKvlkIjkvbXmj5DkuqTvvInliLDpgaDnq68gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICLph43lrprln7rlupXliLDpgaDnq68gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1OQorIywgYy1mb3JtYXQKK21zZ2lkICIgbWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICIg6IiH6YGg56uvICVzIOWQiOS9tSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAi6IiH6YGg56uvICVzIOWQiOS9tSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtKnMgICAgYW5kIHdpdGggcmVtb3RlICVzXG4iCittc2dzdHIgIiUtKnMgICAg5Lul5Y+K5ZKM6YGg56uvICVzXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEwOAorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAi5bu656uLIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTEKK21zZ2lkICJkZWxldGUiCittc2dzdHIgIuWIqumZpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTE1Cittc2dpZCAidXAgdG8gZGF0ZSIKK21zZ3N0ciAi5pyA5pawIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTgKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICLlj6/lv6vovYkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyMQorbXNnaWQgImxvY2FsIG91dCBvZiBkYXRlIgorbXNnc3RyICLmnKzmqZ/lt7LpgY7mmYIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyDlvLfliLbmjqjpgIHoh7MgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMg5o6o6YCB6IezICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMg5by35Yi25o6o6YCB6IezICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyDmjqjpgIHoh7MgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwNgorbXNnaWQgImRvIG5vdCBxdWVyeSByZW1vdGVzIgorbXNnc3RyICLkuI3mn6XoqaLpgaDnq68iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAiKiDpgaDnq68gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiAg5Y+W5b6X5L2N5Z2A77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzNSBidWlsdGluL3JlbW90ZS5jOjEyNTEgYnVpbHRpbi9yZW1vdGUuYzoxMzkwCittc2dpZCAiKG5vIFVSTCkiCittc2dzdHIgIijnhKEgVVJMKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiAnOicgc2hvdWxkIGFsaWduCisjLiB3aXRoIHRoZSBvbmUgaW4gIiBGZXRjaCBVUkw6ICVzIgorIy4gdHJhbnNsYXRpb24uCisjLgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQ5IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAg5o6o6YCB5L2N5Z2A77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MyBidWlsdGluL3JlbW90ZS5jOjEyNTUgYnVpbHRpbi9yZW1vdGUuYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIgIEhFQUQg5YiG5pSv77yaJXMiCisKKyMgIOitr+iAhe+8muS4reaWh+Wtl+S4suaLvOaOpe+8jOWPr+WIqumZpOWJjeWwjuepuuagvAorIzogYnVpbHRpbi9yZW1vdGUuYzoxMjUzCittc2dpZCAiKG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAi77yI5pyq5p+l6Kmi77yJIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTUKK21zZ2lkICIodW5rbm93bikiCittc2dzdHIgIu+8iOacquefpe+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiAgSEVBRCDliIbmlK/vvIjpgaDnq68gSEVBRCDmqKHns4rvvIzlj6/og73mmK/kuIvliJfkuK3nmoTkuIDlgIvvvInvvJpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAg6YGg56uv5YiG5pSv77yaJXMiCisKKyMgIOitr+iAhe+8muS4reaWh+Wtl+S4suaLvOaOpe+8jOWPr+WIqumZpOWJjeWwjuepuuagvAorIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc0IGJ1aWx0aW4vcmVtb3RlLmM6MTMwMAorbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAi77yI54uA5oWL5pyq5p+l6Kmi77yJIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODMKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiICDngrogJ2dpdCBwdWxsJyDoqK3lrprnmoTmnKzmqZ/liIbmlK/vvJoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5MQorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiAg5pys5qmf5byV55So5bCH5ZyoICdnaXQgcHVzaCcg5pmC6KKr6Y+h5YOPIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAg54K6ICdnaXQgcHVzaCcg6Kit5a6a55qE5pys5qmf5byV55SoJXPvvJoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxOAorbXNnaWQgInNldCByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQgYWNjb3JkaW5nIHRvIHJlbW90ZSIKK21zZ3N0ciAi5qC55pOa6YGg56uv6Kit5a6aIHJlZnMvcmVtb3Rlcy885ZCN56ixPi9IRUFEIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjAKK21zZ2lkICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorbXNnc3RyICLliKrpmaQgcmVmcy9yZW1vdGVzLzzlkI3nqLE+L0hFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMzNQorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgcmVtb3RlIEhFQUQiCittc2dzdHIgIueEoeazleeiuuWumumBoOerryBIRUFEIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMzcKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAi5aSa5YCL6YGg56uvIEhFQUQg5YiG5pSv44CC6KuL5piO56K65Zyw6YG45pOH5LiA5YCL55So5oyH5Luk77yaIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAi54Sh5rOV5Yiq6ZmkICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5YCL5pyJ5pWI5byV55So77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIuS4jeiDveioreWumiAlcyIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIOWwh+aIkOeCuuaHuOepuueLgOaFi++8gSIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMg5bey5oiQ54K65oe456m654uA5oWL77yBIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAi5L+u5YmqICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAiVVJM77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQwMworIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIgKiBb5bCH5Yiq6ZmkXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIgKiBb5bey5Yiq6ZmkXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDUxCittc2dpZCAicHJ1bmUgcmVtb3RlcyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAi5oqT5Y+W5b6M5riF6Zmk6YGg56uvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MTQgYnVpbHRpbi9yZW1vdGUuYzoxNTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSAnJXMnIgorbXNnc3RyICLmspLmnInmraTpgaDnq68gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTMwCittc2dpZCAiYWRkIGJyYW5jaCIKK21zZ3N0ciAi5paw5aKe5YiG5pSvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzcKK21zZ2lkICJubyByZW1vdGUgc3BlY2lmaWVkIgorbXNnc3RyICLmnKrmjIflrprpgaDnq68iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU1NAorbXNnaWQgInF1ZXJ5IHB1c2ggVVJMcyByYXRoZXIgdGhhbiBmZXRjaCBVUkxzIgorbXNnc3RyICLmn6XoqaLmjqjpgIEgVVJMIOS9jeWdgO+8jOiAjOmdnuWPluW+lyBVUkwg5L2N5Z2AIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NTYKK21zZ2lkICJyZXR1cm4gYWxsIFVSTHMiCittc2dzdHIgIui/lOWbnuaJgOaciSBVUkwg5L2N5Z2AIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gVVJMcyBjb25maWd1cmVkIGZvciByZW1vdGUgJyVzJyIKK21zZ3N0ciAi5rKS5pyJ57Wm6YGg56uv54mI5pys5bqrICclcycg6Kit5a6aIFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjEwCittc2dpZCAibWFuaXB1bGF0ZSBwdXNoIFVSTHMiCittc2dzdHIgIuWLleS9nOaOqOmAgSBVUkxTIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MTIKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICLmlrDlop4gVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MTQKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAi5Yiq6ZmkIFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjIxCittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWFkZCAtLWRlbGV0ZSDnhKHmhI/nvqkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgIueEoeaViOeahOiIiiBVUkwg56ym5ZCI56+E5pys77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgIuacquaJvuWIsOatpCBVUkzvvJolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjcwCittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICLlsIfkuI3mnIPliKrpmaTmiYDmnInpnZ7mjqjpgIEgVVJMIOS9jeWdgCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZXBhY2sgWzzpgbjpoIU+XSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOAorbXNnaWQgIiIKKyJJbmNyZW1lbnRhbCByZXBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBiaXRtYXAgaW5kZXhlcy4gIFVzZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9yIGRpc2FibGUgdGhlIHBhY2sud3JpdGViaXRtYXBzIGNvbmZpZ3VyYXRpb24uIgorbXNnc3RyICIiCisi5aKe6YePIHJlcGFjayDlkowgYml0bWFwIOe0ouW8leS4jeebuOWuueOAgiAg5L2/55SoIC0tbm8td3JpdGUtYml0bWFwLWluZGV4XG4iCisi5oiW56aB55SoIHBhY2sud3JpdGViaXRtYXBzIOioreWumuOAgiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTEKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICLnhKHms5Xplovlp4sgcGFjay1vYmplY3RzIOS+humHjeaWsOaJk+WMhSBwcm9taXNvciDnianku7YiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMwIGJ1aWx0aW4vcmVwYWNrLmM6NDE2Cittc2dpZCAicmVwYWNrOiBFeHBlY3RpbmcgZnVsbCBoZXggb2JqZWN0IElEIGxpbmVzIG9ubHkgZnJvbSBwYWNrLW9iamVjdHMuIgorbXNnc3RyICJyZXBhY2vvvJrmnJ/mnJvkvoboh6ogcGFjay1vYmplY3RzIOeahOWujOaVtOWNgeWFremAsuS9jeeJqeS7tiBJROOAgiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyNTQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAi54Sh5rOV5a6M5oiQIHBhY2stb2JqZWN0cyDkvobph43mlrDmiZPljIUgcHJvbWlzb3Ig54mp5Lu2IgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5MgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICLmiYDmnInlhaflrrnmiZPljIXliLDkuIDlgIvljIXmqpTmoYjkuK0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk0Cittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAi5ZKMIC1hIOebuOWQjO+8jOS4puWwh+eEoeazleWPluW+l+eahOeJqeS7tuioreeCuumshuaVo+eJqeS7tiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTcKK21zZ2lkICJyZW1vdmUgcmVkdW5kYW50IHBhY2tzLCBhbmQgcnVuIGdpdC1wcnVuZS1wYWNrZWQiCittc2dzdHIgIuWIqumZpOWkmumkmOeahOWMhe+8jOWft+ihjCBnaXQtcHJ1bmUtcGFja2VkIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5OQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICLlkJEgZ2l0LXBhY2stb2JqZWN0cyDlgrPpgZ7lj4PmlbggLS1uby1yZXVzZS1kZWx0YSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDEKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIuWQkSBnaXQtcGFjay1vYmplY3RzIOWCs+mBnuWPg+aVuCAtLW5vLXJldXNlLW9iamVjdCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDMKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgIuS4jeWft+ihjCBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwNgorbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICLlkJEgZ2l0LXBhY2stb2JqZWN0cyDlgrPpgZ7lj4PmlbggLS1sb2NhbCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDgKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgIuWvqyBiaXRtYXAg57Si5byVIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMAorbXNnaWQgInBhc3MgLS1kZWx0YS1pc2xhbmRzIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIuWQkSBnaXQtcGFjay1vYmplY3RzIOWCs+mBnuWPg+aVuCAtLWRlbHRhLWlzbGFuZHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzExCittc2dpZCAiYXBwcm94aWRhdGUiCittc2dzdHIgIui/keS8vOaXpeacnyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTIKK21zZ2lkICJ3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzIgorbXNnc3RyICLkvb/nlKggLUHvvIzkuI3opoHlsIfml6nmlrzmj5DkvpvmmYLplpPnmoTnianku7bpgY7mnJ8iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE0Cittc2dpZCAid2l0aCAtYSwgcmVwYWNrIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIuS9v+eUqCAtYSDvvIzph43mlrDlsI3nhKHms5Xlj5blvpfnianku7bmiZPljIUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE2Cittc2dpZCAic2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICLnlKjmlrzlop7ph4/lo5PnuK7nmoToppbnqpflgLwiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE3IGJ1aWx0aW4vcmVwYWNrLmM6MzIzCittc2dpZCAiYnl0ZXMiCittc2dzdHIgIuS9jeWFg+e1hCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTgKK21zZ2lkICJzYW1lIGFzIHRoZSBhYm92ZSwgYnV0IGxpbWl0IG1lbW9yeSBzaXplIGluc3RlYWQgb2YgZW50cmllcyBjb3VudCIKK21zZ3N0ciAi5ZKM5LiK6Z2i55qE55u45Ly877yM5L2G6ZmQ5Yi26KiY5oa26auU5aSn5bCP6ICM6Z2e5qKd55uu5pW4IgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMAorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBkZWx0YSBkZXB0aCIKK21zZ3N0ciAi6ZmQ5Yi25pyA5aSn5aKe6YeP5rex5bqmIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMgorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyIKK21zZ3N0ciAi6ZmQ5Yi25pyA5aSn5Z+36KGM57eS5pW4IgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICLmr4/lgIsgcGFja2ZpbGUg55qE5pyA5aSn5bC65a+4IgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNgorbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICLlsI3mqJnoqJjngrogLmtlZXAg55qE5YyF5Lit55qE54mp5Lu26YeN5paw5omT5YyFIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyOAorbXNnaWQgImRvIG5vdCByZXBhY2sgdGhpcyBwYWNrIgorbXNnc3RyICLkuI3opoHlsI3oqbLljIXmqpTmoYjph43mlrDmiZPljIUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzM4Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBwYWNrcyBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAi5LiN6IO95Yiq6Zmk54+N5ZOB54mI5pys5bqr5Lit55qE5omT5YyF5qqU5qGIIgorCisjOiBidWlsdGluL3JlcGFjay5jOjM0MgorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLUEgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1rZWVwLXVucmVhY2hhYmxlIOWSjCAtQSDkuI3nm7jlrrkiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDI1Cittc2dpZCAiTm90aGluZyBuZXcgdG8gcGFjay4iCittc2dzdHIgIuaykuacieaWsOeahOimgeaJk+WMheOAgiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFNvbWUgcGFja3MgaW4gdXNlIGhhdmUgYmVlbiByZW5hbWVkIGJ5XG4iCisiV0FSTklORzogcHJlZml4aW5nIG9sZC0gdG8gdGhlaXIgbmFtZSwgaW4gb3JkZXIgdG9cbiIKKyJXQVJOSU5HOiByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlXG4iCisiV0FSTklORzogZmlsZS4gIEJ1dCB0aGUgb3BlcmF0aW9uIGZhaWxlZCwgYW5kIHRoZVxuIgorIldBUk5JTkc6IGF0dGVtcHQgdG8gcmVuYW1lIHRoZW0gYmFjayB0byB0aGVpclxuIgorIldBUk5JTkc6IG9yaWdpbmFsIG5hbWVzIGFsc28gZmFpbGVkLlxuIgorIldBUk5JTkc6IFBsZWFzZSByZW5hbWUgdGhlbSBpbiAlcyBtYW51YWxseTpcbiIKK21zZ3N0ciAiIgorIuitpuWRiu+8mueCuuS6huWwh+WMheaqlOahiOWPluS7o+eCuuaWsOeJiOacrO+8jOS4gOS6m+S9v+eUqOS4reeahOWMheW3sue2k1xuIgorIuitpuWRiu+8mumAj+mBjuaWsOWiniBvbGQtIOWJjee2tOeahOaWueW8j+mHjeaWsOWRveWQjeOAguS9huaYr+WLleS9nOWkseaVl++8jFxuIgorIuitpuWRiu+8muS4puS4lOWYl+ippumHjeaWsOWRveWQjeaUueWbnuWOn+acieaqlOahiOWQjeeahOWLleS9nOS5n+WkseaVl+OAglxuIgorIuitpuWRiu+8muiri+aJi+WLleWwhyAlcyDkuIvnmoTpgJnkupvmqpTmoYjph43mlrDlkb3lkI3vvJpcbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnJXMnIgorbXNnc3RyICLliKrpmaQgJyVzJyDlpLHmlZciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIDznianku7Y+IDzlj5bku6Pniak+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMworbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxvYmplY3Q+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA854mp5Lu2PiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDzmj5DkuqQ+IFs854i25o+Q5LqkPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjYKK21zZ2lkICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgLWQgPOeJqeS7tj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9POagvOW8jz5dIFstbCBbPOaooeW8jz5dXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgcmVwbGFjZSBmb3JtYXQgJyVzJ1xuIgorInZhbGlkIGZvcm1hdHMgYXJlICdzaG9ydCcsICdtZWRpdW0nIGFuZCAnbG9uZyciCittc2dzdHIgIiIKKyLnhKHmlYjnmoTlj5bku6PmoLzlvI8gJyVzJ1xuIgorIuacieaViOeahOagvOW8j+aciSAnc2hvcnQn44CBJ21lZGl1bScg5ZKMICdsb25nJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgcmVmICclcycgbm90IGZvdW5kIgorbXNnc3RyICLmnKrnmbznj77lj5bku6PlvJXnlKggJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVwbGFjZSByZWYgJyVzJyIKK21zZ3N0ciAi5bey5Yiq6Zmk5Y+W5Luj5byV55SoICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZiBuYW1lIgorbXNnc3RyICInJXMnIOS4jeaYr+S4gOWAi+acieaViOeahOW8leeUqOWQjSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgcmVmICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIuWPluS7o+W8leeUqCAnJXMnIOW3sue2k+WtmOWcqCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJPYmplY3RzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZS5cbiIKKyInJXMnIHBvaW50cyB0byBhIHJlcGxhY2VkIG9iamVjdCBvZiB0eXBlICclcydcbiIKKyJ3aGlsZSAnJXMnIHBvaW50cyB0byBhIHJlcGxhY2VtZW50IG9iamVjdCBvZiB0eXBlICclcycuIgorbXNnc3RyICIiCisi54mp5Lu25b+F6aCI5bGs5pa85ZCM5LiA6aGe5Z6L44CCXG4iCisiJyVzJyDmjIflkJEgJyVzJyDpoZ7lnovnmoTlj5bku6Pnianku7ZcbiIKKyLogIwgJyVzJyDmjIflkJEgJyVzJyDpoZ7lnovnmoTlj5bku6Pnianku7bjgIIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAi54Sh5rOV54K65a+r5YWl6ZaL5ZWfICVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNDIKK21zZ2lkICJjYXQtZmlsZSByZXBvcnRlZCBmYWlsdXJlIgorbXNnc3RyICJjYXQtZmlsZSDloLHlkYrlpLHmlZciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAi54Sh5rOV54K66K6A5Y+W6ZaL5ZWfICVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNzIKK21zZ2lkICJ1bmFibGUgdG8gc3Bhd24gbWt0cmVlIgorbXNnc3RyICLnhKHms5XllZ/li5UgbWt0cmVlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNzYKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIG1rdHJlZSIKK21zZ3N0ciAi54Sh5rOV5b6eIG1rdHJlZSDoroDlj5YiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4NQorbXNnaWQgIm1rdHJlZSByZXBvcnRlZCBmYWlsdXJlIgorbXNnc3RyICJta3RyZWUg5aCx5ZGK5aSx5pWXIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODkKK21zZ2lkICJta3RyZWUgZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0IG5hbWUiCittc2dzdHIgIm1rdHJlZSDmspLmnInov5Tlm57kuIDlgIvnianku7blkI0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZnN0YXQgJXMiCittc2dzdHIgIueEoeazleWwjSAlcyDln7fooYwgZnN0YXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMwMworbXNnaWQgInVuYWJsZSB0byB3cml0ZSBvYmplY3QgdG8gZGF0YWJhc2UiCittc2dzdHIgIueEoeazleWQkeizh+aWmeW6q+Wvq+WFpeeJqeS7tiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzIyIGJ1aWx0aW4vcmVwbGFjZS5jOjM3OCBidWlsdGluL3JlcGxhY2UuYzo0MjQKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIKK21zZ3N0ciAi5LiN5piv5LiA5YCL5pyJ5pWI55qE54mp5Lu25ZCN77yaJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgb2JqZWN0IHR5cGUgZm9yICVzIgorbXNnc3RyICLnhKHms5XlvpfliLAgJXMg55qE54mp5Lu26aGe5Z6LIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNDIKK21zZ2lkICJlZGl0aW5nIG9iamVjdCBmaWxlIGZhaWxlZCIKK21zZ3N0ciAi57eo6Lyv54mp5Lu25qqU5qGI5aSx5pWXIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAi5paw54mp5Lu25ZKM6IiK54mp5Lu255u45ZCM77yaJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyBhcyBhIGNvbW1pdCIKK21zZ3N0ciAi54Sh5rOV5bCHICVzIOino+aekOeCuuS4gOWAi+aPkOS6pCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAi5o+Q5LqkICclcycg5Lit5ZCr5pyJ5pCN5aOe55qE5ZCI5L215qiZ57GkIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICLmj5DkuqQgJyVzJyDkuK3lkKvmnInmoLzlvI/pjK/oqqTnmoTlkIjkvbXmqJnnsaQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICLljp/lp4vmj5DkuqQgJyVzJyDljIXlkKvlt7LntpPmjajmo4TnmoTlkIjkvbXmqJnnsaQgJyVzJ++8jOS9v+eUqCAtLWVkaXQg5Luj5pu/IC0tZ3JhZnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgb3JpZ2luYWwgY29tbWl0ICclcycgaGFzIGEgZ3BnIHNpZ25hdHVyZSIKK21zZ3N0ciAi5Y6f5aeL5o+Q5LqkICclcycg5Lit5pyJ5LiA5YCLIGdwZyDnsL3lkI0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ3MAorbXNnaWQgInRoZSBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSByZXBsYWNlbWVudCBjb21taXQhIgorbXNnc3RyICLlnKjlj5bku6PnmoTmj5DkuqTkuK3nsL3lkI3lsIfooqvnp7vpmaTvvIEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIKK21zZ3N0ciAi5LiN6IO954K6ICclcycg5a+r5Y+W5Luj5o+Q5LqkIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JhZnQgZm9yICclcycgdW5uZWNlc3NhcnkiCittc2dzdHIgIuWwjSAnJXMnIOenu+akjeaykuacieW/heimgSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBjb21taXQgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmU6ICclcyciCittc2dzdHIgIuaWsOaPkOS6pOWSjOiIiueahOS4gOaoo++8miclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNvbnZlcnQgdGhlIGZvbGxvd2luZyBncmFmdChzKTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuS4jeiDvei9ieaPm+S4i+WIl+enu+akje+8mlxuIgorIiVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDgKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAi5YiX5Ye65Y+W5Luj55qE5byV55SoIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDkKK21zZ2lkICJkZWxldGUgcmVwbGFjZSByZWZzIgorbXNnc3RyICLliKrpmaTlj5bku6PnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MAorbXNnaWQgImVkaXQgZXhpc3Rpbmcgb2JqZWN0IgorbXNnc3RyICLnt6jovK/nj77lrZjnmoTnianku7YiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MQorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgIuS/ruaUueS4gOWAi+aPkOS6pOeahOeItuaPkOS6pCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUyCittc2dpZCAiY29udmVydCBleGlzdGluZyBncmFmdCBmaWxlIgorbXNnc3RyICLovYnmj5vnj77lrZjnmoTnp7vmpI3mqpTmoYgiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MworbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgIuWmguaenOWtmOWcqOWJh+WPluS7o+W8leeUqCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU1Cittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICLkuI3opoHngrogLS1lZGl0IOWLleS9nOe+juingOmhr+ekuuWFp+WuuSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU2Cittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICLkvb/nlKjmraTmoLzlvI8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU2OQorbXNnaWQgIi0tZm9ybWF0IGNhbm5vdCBiZSB1c2VkIHdoZW4gbm90IGxpc3RpbmciCittc2dzdHIgIuS4jeWIl+WHuuaZguS4jeiDveS9v+eUqCAtLWZvcm1hdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTc3Cittc2dpZCAiLWYgb25seSBtYWtlcyBzZW5zZSB3aGVuIHdyaXRpbmcgYSByZXBsYWNlbWVudCIKK21zZ3N0ciAi5Y+q5pyJ5a+r5LiA5YCL5Y+W5Luj5pmCIC1mIOaJjeacieaEj+e+qSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTgxCittc2dpZCAiLS1yYXcgb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiLS1yYXcg5Y+q5pyJ5ZKMIC0tZWRpdCDlhbHnlKjmiY3mnInmhI/nvqkiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU4NworbXNnaWQgIi1kIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWQg6ZyA6KaB6Iez5bCR5LiA5YCL5Y+D5pW4IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1OTMKK21zZ2lkICJiYWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKK21zZ3N0ciAi6Yyv6Kqk55qE5Y+D5pW45YCL5pW4IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1OTkKK21zZ2lkICItZSBuZWVkcyBleGFjdGx5IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWUg6ZyA6KaB5LiU5YOF6ZyA6KaB5LiA5YCL5Y+D5pW4IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MDUKK21zZ2lkICItZyBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1nIOmcgOimgeiHs+WwkeS4gOWAi+WPg+aVuCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjExCittc2dpZCAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgdGFrZXMgbm8gYXJndW1lbnQiCittc2dzdHIgIi0tY29udmVydC1ncmFmdC1maWxlIOS4jeW4tuWPg+aVuCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjE3Cittc2dpZCAib25seSBvbmUgcGF0dGVybiBjYW4gYmUgZ2l2ZW4gd2l0aCAtbCIKK21zZ3N0ciAi5Y+q6IO954K6IC1sIOaPkOS+m+S4gOWAi+aooeW8jyIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMworbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxwYXRoPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDzot6/lvpE+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo2MAorbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICLlnKjntKLlvJXkuK3oqLvlhorkub7mt6jnmoTop6PmsbrmlrnmoYgiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NzkKK21zZ2lkICInZ2l0IHJlcmVyZSBmb3JnZXQnIHdpdGhvdXQgcGF0aHMgaXMgZGVwcmVjYXRlZCIKK21zZ3N0ciAi5rKS5pyJ6Lev5b6R55qEICdnaXQgcmVyZXJlIGZvcmdldCcg5bey57aT6YGO5pmCIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjExMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZiBmb3IgJyVzJyIKK21zZ3N0ciAi54Sh5rOV54K6ICclcycg55Sf5oiQ5beu55WwIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs85o+Q5LqkPl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgImdpdCByZXNldCBbLXFdIFs8dHJlZS1pc2g+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCByZXNldCBbLXFdIFs85qi55oiW5o+Q5LqkPl0gWy0tXSA86Lev5b6R6KaP5qC8Pi4uLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAiIgorImdpdCByZXNldCBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs8dHJlZS1pc2g+XSIKK21zZ3N0ciAiIgorImdpdCByZXNldCBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs85qi55oiW5o+Q5LqkPl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNQorbXNnaWQgImdpdCByZXNldCAtLXBhdGNoIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHNwZWM+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzzmqLnmiJbmj5DkuqQ+XSBbLS1dIFs86Lev5b6R6KaP5qC8Pi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1peGVkIgorbXNnc3RyICLmt7fpm5wiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgInNvZnQiCittc2dzdHIgIui7n+aApyIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAiaGFyZCIKK21zZ3N0ciAi56Gs5oCnIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAi5ZCI5L21IgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJrZWVwIgorbXNnc3RyICLkv53mjIEiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4MgorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICLmgqjmspLmnInkuIDlgIvmnInmlYjnmoQgSEVBROOAgiIKKworIzogYnVpbHRpbi9yZXNldC5jOjg0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAi54Sh5rOV5om+5YiwIEhFQUQg5oyH5ZCR55qE5qi544CCIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIueEoeazleaJvuWIsCAlcyDmjIflkJHnmoTmqLnjgIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQgJXMiCittc2dzdHIgIkhFQUQg54++5Zyo5L2N5pa8ICVzIgorCisjICDora/ogIXvvJrmvKLlrZfkuYvplpPnhKHnqbrmoLzvvIzmlYXliKrpmaQlc+WJjeW+jOepuuagvAorIzogYnVpbHRpbi9yZXNldC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICLlnKjlkIjkvbXpgY7nqIvkuK3kuI3og73lgZolc+mHjeioreWLleS9nOOAgiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NCBidWlsdGluL3N0YXNoLmM6NTIwIGJ1aWx0aW4vc3Rhc2guYzo1OTUKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MTkKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICLlronpnZzmqKHlvI/vvIzlj6rloLHlkYrpjK/oqqQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTYKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAi6YeN6KitIEhFQUQg5ZKM57Si5byVIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk3Cittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICLlj6rph43oqK0gSEVBRCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5OSBidWlsdGluL3Jlc2V0LmM6MzAxCittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi6YeN6KitIEhFQUTjgIHntKLlvJXlkozlt6XkvZzljYAiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDMKK21zZ2lkICJyZXNldCBIRUFEIGJ1dCBrZWVwIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIumHjeiorSBIRUFEIOS9huWEsuWtmOacrOapn+iuiuabtCIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwOQorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICLlsIfliKrpmaTnmoTot6/lvpHmqJnoqJjngrrnqI3lvozmlrDlop4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIKK21zZ3N0ciAi54Sh5rOV5bCHICclcycg6Kej5p6Q54K65LiA5YCL5pyJ5pWI55qE54mI5pys44CCIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCB0cmVlLiIKK21zZ3N0ciAi54Sh5rOV5bCHICclcycg6Kej5p6Q54K65LiA5YCL5pyJ5pWI55qE5qi554uA54mp5Lu244CCIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzYwCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICItLXBhdGNoIOiIhyAtLXtoYXJk44CBbWl4ZWTjgIFzb2Z0fSDpgbjpoIXkuI3nm7jlrrkiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzAKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIi0tbWl4ZWQg5bi26Lev5b6R5bey5qOE55So77yM6ICM5piv55SoICdnaXQgcmVzZXQgLS0gPOi3r+W+kT4n44CCIgorCisjICDora/ogIXvvJrmvKLlrZfkuYvplpPnhKHnqbrmoLzvvIzmlYXliKrpmaQlc+WJjeW+jOepuuagvAorIzogYnVpbHRpbi9yZXNldC5jOjM3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIuS4jeiDveW4tui3r+W+kemAsuihjCVz6YeN6Kit44CCIgorCisjICDora/ogIXvvJrmvKLlrZfkuYvplpPnhKHnqbrmoLzvvIzmlYXliKrpmaQlc+WJjeW+jOepuuagvAorIzogYnVpbHRpbi9yZXNldC5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5LiN6IO95bCN57SU54mI5pys5bqr6YCy6KGMJXPph43oqK0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozOTEKK21zZ2lkICItTiBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1taXhlZCIKK21zZ3N0ciAiLU4g5Y+q6IO95ZKMIC0tbWl4ZWQg5ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIumHjeioreW+jOWPlua2iOaaq+WtmOeahOiuiuabtO+8miIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQuICBZb3UgY2FuXG4iCisidXNlICctLXF1aWV0JyB0byBhdm9pZCB0aGlzLiAgU2V0IHRoZSBjb25maWcgc2V0dGluZyByZXNldC5xdWlldCB0byB0cnVlXG4iCisidG8gbWFrZSB0aGlzIHRoZSBkZWZhdWx0LlxuIgorbXNnc3RyICIiCisiXG4iCisi6YeN6Kit5b6M77yM5p6a6IiJ5pyq5pqr5a2Y6K6K5pu06Iqx6LK75LqGICUuMmYg56eS44CCIOaCqOWPr+S7peS9v+eUqCAnLS1xdWlldCcg6YG/5YWN5q2k5oOF5rOB44CCXG4iCisi5bCH6Kit5a6a6K6K5pW4IHJlc2V0LnF1aWV0IOioreWumueCuiB0cnVlIOWPr+S9v+WFtuaIkOeCuumgkOioreWAvOOAglxuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICLkuI3og73ph43oqK3ntKLlvJXmqpTmoYjoh7PniYjmnKwgJyVzJ+OAgiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyOQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIuS4jeiDveWvq+WFpeaWsOeahOe0ouW8leaqlOahiOOAgiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ5OQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGFuZCAtLW1pc3NpbmciCittc2dzdHIgIuS4jeiDveWQjOaZguS9v+eUqCAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyDlkowgLS1taXNzaW5nIOmBuOmghSIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjU2MAorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmcgcmVxdWlyZXMgLS1vYmplY3RzIgorbXNnc3RyICLnianku7bpgY7mv77pnIDopoEgLS1vYmplY3RzIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NjEwCittc2dpZCAicmV2LWxpc3QgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5IG9mIG5vdGVzIgorbXNnc3RyICJyZXYtbGlzdCDkuI3mlK/mj7Tpoa/npLroqLvop6MiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo2MTUKK21zZ2lkICJtYXJrZWQgY291bnRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1vYmplY3RzIgorbXNnc3RyICItLW9iamVjdHMg5LiN55u45a655qiZ6KiY6KiI5pW4IChtYXJrZWQgY291bnRpbmcpIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQwOAorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs86YG46aCFPl0gLS0gWzzlj4Pmlbg+Li4uXSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTMKK21zZ2lkICJrZWVwIHRoZSBgLS1gIHBhc3NlZCBhcyBhbiBhcmciCittc2dzdHIgIuS/neaMgSBgLS1gIOS9nOeCuuS4gOWAi+WPg+aVuOWCs+mBniIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTUKK21zZ2lkICJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiCittc2dzdHIgIumBh+WIsOesrOS4gOWAi+mdnumBuOmgheWPg+aVuOW+jOWBnOatouino+aekCIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTgKK21zZ2lkICJvdXRwdXQgaW4gc3R1Y2sgbG9uZyBmb3JtIgorbXNnc3RyICLku6Xlm7rlrprplbfmoLzlvI/ovLjlh7oiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NTUxCittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmc+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3B0aW9ucz5dIFs8YXJnPi4uLl1cbiIKKyJcbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIgorbXNnc3RyICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs86YG46aCFPl0gLS0gWzzlj4Pmlbg+Li4uXVxuIgorIiAgIOaIluiAhe+8mmdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPOWPg+aVuD4uLi5dXG4iCisiICAg5oiW6ICF77yaZ2l0IHJldi1wYXJzZSBbPOmBuOmghT5dIFs85Y+D5pW4Pi4uLl1cbiIKKyJcbiIKKyLliJ3mrKHkvb/nlKjmmYLln7fooYwgXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiDkvobnjbLlvpfmm7TlpJroqIrmga/jgIIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQKK21zZ2lkICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJldmVydCBbPOmBuOmghT5dIDzmj5DkuqTomZ8+Li4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjI1Cittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCByZXZlcnQgPOWtkOaMh+S7pD4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzAKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzzpgbjpoIU+XSA85o+Q5Lqk6JmfPi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMQorbXNnaWQgImdpdCBjaGVycnktcGljayA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCBjaGVycnktcGljayA85a2Q5oyH5LukPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIgorbXNnc3RyICLpgbjpoIUgYCVzJyDmnJ/mnJvkuIDlgIvlpKfmlrzpm7bnmoTmlbjlrZciCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVz77yaJXMg5LiN6IO95ZKMICVzIOWQjOaZguS9v+eUqCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDIKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICLntYLmraLlj43ovYnmiJbmj4Dpgbjli5XkvZwiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi57m857qM5Y+N6L2J5oiW5o+A6YG45YuV5L2cIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIuWPlua2iOWPjei9ieaIluaPgOmBuOWLleS9nCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJza2lwIGN1cnJlbnQgY29tbWl0IGFuZCBjb250aW51ZSIKK21zZ3N0ciAi6Lez6YGO55uu5YmN5o+Q5Lqk5Lim57m857qMIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICLkuI3opoHoh6rli5Xmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA4Cittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIue3qOi8r+aPkOS6pOiqquaYjiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTEKK21zZ2lkICJwYXJlbnQtbnVtYmVyIgorbXNnc3RyICLniLbnt6jomZ8iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEyCittc2dpZCAic2VsZWN0IG1haW5saW5lIHBhcmVudCIKK21zZ3N0ciAi6YG45pOH5Li75bm554i25o+Q5Lqk57eo6JmfIgorCisjOiBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLlkIjkvbXnrZbnlaUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE2Cittc2dpZCAib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi5ZCI5L21562W55Wl55qE6YG46aCFIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNQorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAi6L+95Yqg5o+Q5Lqk5ZCN56ixIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNworbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICLkv53nlZnliJ3lp4vljJbnmoTnqbrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI5Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIuS/neaMgeWkmumkmOeahOOAgeepuueahOaPkOS6pCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzIKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICLpgoTljp/lpLHmlZciCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQ1Cittc2dpZCAiY2hlcnJ5LXBpY2sgZmFpbGVkIgorbXNnc3RyICLmj4DpgbjlpLHmlZciCisKKyM6IGJ1aWx0aW4vcm0uYzoxOQorbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJtIFs86YG46aCFPl0gWy0tXSA85qqU5qGIPi4uLiIKKworIzogYnVpbHRpbi9ybS5jOjIwNworbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnaWRfcGx1cmFsICIiCisidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnc3RyWzBdICLlpoLkuIvmqpTmoYjlhbbmmqvlrZjnmoTlhaflrrnlkozlt6XkvZzljYDlj4ogSEVBRCDkuK3nmoTpg73kuI3kuIDmqKPvvJoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTIKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIu+8iOS9v+eUqCAtZiDlvLfliLbliKrpmaTvvIkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTYKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnc3RyWzBdICLkuIvliJfmqpTmoYjntKLlvJXkuK3mnInorormm7QiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjAgYnVpbHRpbi9ybS5jOjIyOQorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisi77yI5L2/55SoIC0tY2FjaGVkIOS/neeVmeacrOapn+aqlOahiO+8jOaIlueUqCAtZiDlvLfliLbliKrpmaTvvIkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjYKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dzdHJbMF0gIuWmguS4i+aqlOahiOacieacrOapn+S/ruaUue+8miIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgIuS4jeWIl+WHuuWIqumZpOeahOaqlOahiCIKKworIzogYnVpbHRpbi9ybS5jOjI0NAorbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLlj6rlvp7ntKLlvJXljYDliKrpmaQiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDUKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAi5b+955Wl5qqU5qGI5pu05paw54uA5oWL5qqi5p+lIgorCisjOiBidWlsdGluL3JtLmM6MjQ2Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgIuWFgeiosemBnui/tOWIqumZpCIKKworIzogYnVpbHRpbi9ybS5jOjI0OAorbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICLljbPkvb/mspLmnInnrKblkIjvvIzkuZ/ku6Xpm7bni4DmhYvpm6LplosiCisKKyM6IGJ1aWx0aW4vcm0uYzoyODIKK21zZ2lkICJObyBwYXRoc3BlYyB3YXMgZ2l2ZW4uIFdoaWNoIGZpbGVzIHNob3VsZCBJIHJlbW92ZT8iCittc2dzdHIgIuaykuacieaPkOS+m+i3r+W+keimj+agvOOAguaIkeipsuenu+mZpOWTquWAi+aqlOahiO+8nyIKKworIzogYnVpbHRpbi9ybS5jOjMwNQorbXNnaWQgInBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICLoq4vlsIfmgqjnmoTkv67mlLnmmqvlrZjliLAgLmdpdG1vZHVsZXMg5Lit5oiW5YSy6JeP5b6M5YaN57m857qMIgorCisjOiBidWlsdGluL3JtLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiCittc2dzdHIgIuacquaPkOS+myAtciDpgbjpoIXkuI3mnIPpgZ7ov7TliKrpmaQgJyVzJyIKKworIzogYnVpbHRpbi9ybS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgcm06IHVuYWJsZSB0byByZW1vdmUgJXMiCittc2dzdHIgImdpdCBybe+8muS4jeiDveWIqumZpCAlcyIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoyMAorbXNnaWQgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxob3N0PjpdPGRpcmVjdG9yeT4gIgorIls8cmVmPi4uLl1cbiIKKyIgIC0tYWxsIGFuZCBleHBsaWNpdCA8cmVmPiBzcGVjaWZpY2F0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs85Li75qmfPjpdPOebrumMhD4gWzzlvJXnlKg+Li4uXVxuIgorIiAgLS1hbGwg5ZKM5piO56K655qEIDzlvJXnlKg+IOS6kuaWpeOAgiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjMKK21zZ2lkICJyZW1vdGUgbmFtZSIKK21zZ3N0ciAi6YGg56uv5ZCN56ixIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NworbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICLkvb/nlKjnhKHni4DmhYvnmoQgUlBDIOWNlOWumiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzgKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi5b6e5qiZ5rqW6Ly45YWl6K6A5Y+W5byV55SoIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OQorbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgIuWIl+WNsOS+huiHqumBoOerryBoZWxwZXIg55qE54uA5oWLIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTQKK21zZ2lkICJnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzaG9ydGxvZyBbPOmBuOmghT5dIFs854mI5pys56+E5ZyNPl0gW1stLV0gPOi3r+W+kT4uLi5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTUKK21zZ2lkICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs86YG46aCFPl0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjQKK21zZ2lkICJHcm91cCBieSBjb21taXR0ZXIgcmF0aGVyIHRoYW4gYXV0aG9yIgorbXNnc3RyICLmjInnhafmj5DkuqTogIXliIbntYTogIzkuI3mmK/kvZzogIUiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjYKK21zZ2lkICJzb3J0IG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBjb21taXRzIHBlciBhdXRob3IiCittc2dzdHIgIuagueaTmuavj+WAi+S9nOiAheeahOaPkOS6pOaVuOmHj+aOkuW6jyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2OAorbXNnaWQgIlN1cHByZXNzIGNvbW1pdCBkZXNjcmlwdGlvbnMsIG9ubHkgcHJvdmlkZXMgY29tbWl0IGNvdW50IgorbXNnc3RyICLpmrHol4/mj5DkuqToqqrmmI7vvIzlj6rmj5Dkvpvmj5DkuqTmlbjph48iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzAKK21zZ2lkICJTaG93IHRoZSBlbWFpbCBhZGRyZXNzIG9mIGVhY2ggYXV0aG9yIgorbXNnc3RyICLpoa/npLrmr4/lgIvkvZzogIXnmoTpm7vlrZDkv6Hku7bkvY3lnYAiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzEKK21zZ2lkICI8dz5bLDxpMT5bLDxpMj5dXSIKK21zZ3N0ciAiPHc+Wyw8aTE+Wyw8aTI+XV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzIKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgIuaKmOihjOi8uOWHuiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjMwMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBnaXZlbiBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIueJiOacrOW6q+WkluWft+ihjOaPkOS+m+S6huWkquWkmueahOWPg+aVuCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjEzCittc2dpZCAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz085L2V5pmCPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPOeJiOacrD4gfCA86JCs55So5a2X5YWDPikuLi5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTcKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPOi1t+Wni+m7nj5dXSBbLS1saXN0XSBbPOW8leeUqD5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWYiCittc2dpZF9wbHVyYWwgImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWZzIgorbXNnc3RyWzBdICLlv73nlaUgJXPvvIznhKHms5XomZXnkIYgJWQg5YCL5Lul5LiK55qE5byV55SoIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG1hdGNoaW5nIHJlZnMgd2l0aCAlcyIKK21zZ3N0ciAi5rKS5pyJ5ZKMICVzIOespuWQiOeahOW8leeUqCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAi6aGv56S66YGg56uv6L+96Lmk55qE5ZKM5pys5qmf55qE5YiG5pSvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ3Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIumhr+ekuumBoOerr+i/vei5pOeahOWIhuaUryIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0OQorbXNnaWQgImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giCittc2dzdHIgIuiRl+iJsiAnKiErLScg5Yiw55u45oeJ55qE5YiG5pSvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUxCittc2dpZCAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiCittc2dzdHIgIumhr+ekuuWFseWQjOelluWFiOW+jOeahCA8bj4g5YCL5o+Q5LqkIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUzCittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICLlkowgbW9yZT0tMSDlkIznvqkiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTQKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAi5LiN6aGv56S65a2X5Liy5ZG95ZCNIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU2Cittc2dpZCAiaW5jbHVkZSB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgIuWMheaLrOebruWJjeWIhuaUryIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1OAorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAi5Lul54mp5Lu25ZCN5a2X5ZG95ZCN5o+Q5LqkIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYwCittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAi6aGv56S65Y+v6IO95ZCI5L2155qE5Z+656SOIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYyCittc2dpZCAic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIKK21zZ3N0ciAi6aGv56S65rKS5pyJ5Lu75L2V5byV55So55qE55qE5byV55SoIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY0Cittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICLku6Xmi5PmkrLpoIbluo/poa/npLrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjcKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAi5Y+q6aGv56S65LiN5Zyo56ys5LiA5YCL5YiG5pSv5LiK55qE5o+Q5LqkIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY5Cittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICLpoa/npLrlg4XkuIDlgIvliIbmlK/lj6/lrZjlj5bnmoTlkIjkvbXmj5DkuqQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzEKK21zZ2lkICJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgd2hlcmUgcG9zc2libGUiCittc2dzdHIgIuaLk+aSsuaWueW8j+aOkuW6j++8jOS4puWEmOWPr+iDveWcsOS/neaMgeaXpeacn+mghuW6jyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw8YmFzZT5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc1Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgIumhr+ekuuW+nui1t+Wni+m7numWi+Wni+eahCA8bj4g5qKd5pyA6L+R55qE5byV55So5pel6KqM6KiY6YyEIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzExCittc2dpZCAiIgorIi0tcmVmbG9nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQgb3IgLS1tZXJnZS1iYXNlIgorbXNnc3RyICItLXJlZmxvZyDlkowgLS1hbGzjgIEtLXJlbW90ZXPjgIEtLWluZGVwZW5kZW50IOaIliAtLW1lcmdlLWJhc2Ug5LiN55u45a65IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM1Cittc2dpZCAibm8gYnJhbmNoZXMgZ2l2ZW4sIGFuZCBIRUFEIGlzIG5vdCB2YWxpZCIKK21zZ3N0ciAi5pyq5o+Q5L6b5YiG5pSv77yM5LiUIEhFQUQg54Sh5pWIIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM4Cittc2dpZCAiLS1yZWZsb2cgb3B0aW9uIG5lZWRzIG9uZSBicmFuY2ggbmFtZSIKK21zZ3N0ciAi6YG46aCFIC0tcmVmbG9nIOmcgOimgeS4gOWAi+WIhuaUr+WQjSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjc0MQorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5ICVkIGVudHJ5IGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dpZF9wbHVyYWwgIm9ubHkgJWQgZW50cmllcyBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnc3RyWzBdICLkuIDmrKHlj6rog73poa/npLogJWQg5YCL5qKd55uu44CCIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmICVzIgorbXNnc3RyICLnhKHmraTlvJXnlKggJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2LiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2cy4iCittc2dzdHJbMF0gIuS4jeiDveiZleeQhiAlZCDlgIvku6XkuIrnmoTniYjmnKzjgIIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYuIgorbXNnc3RyICInJXMnIOS4jeaYr+S4gOWAi+acieaViOeahOW8leeUqOOAgiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmluZCBjb21taXQgJXMgKCVzKSIKK21zZ3N0ciAi5LiN6IO95om+5Yiw5o+Q5LqkICVz77yIJXPvvIkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMgorbXNnaWQgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPOaooeW8jz4uLi5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTMKK21zZ2lkICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dIgorbXNnc3RyICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz085qih5byPPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjIKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICLlj6rpoa/npLrmqJnnsaTvvIjlj6/ku6XlkozpoK3lhbHnlKjvvIkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjMKK21zZ2lkICJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIgorbXNnc3RyICLlj6rpoa/npLrpoK3vvIjlj6/ku6XlkozmqJnnsaTlhbHnlKjvvIkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjQKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICLmm7TlmrTmoLznmoTlvJXnlKjmqqLmuKzvvIzpnIDopoHnsr7norrnmoTlvJXnlKjot6/lvpEiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjcgYnVpbHRpbi9zaG93LXJlZi5jOjE2OQorbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIKK21zZ3N0ciAi6aGv56S6IEhFQUQg5byV55So77yM5Y2z5L2/6KKr6YGO5r++5o6JIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcxCittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMiCittc2dzdHIgIui9ieaPm+aomeexpOWIsOeJqeS7tiBJRCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MworbXNnaWQgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIKK21zZ3N0ciAi5Y+q6aGv56S65L2/55SoIDxuPiDlgIvmlbjlrZfnmoQgU0hBMSDpm5zmuYoiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzcKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVzdWx0cyB0byBzdGRvdXQgKHVzZWZ1bCB3aXRoIC0tdmVyaWZ5KSIKK21zZ3N0ciAi5LiN5YiX5Y2w57WQ5p6c5Yiw5qiZ5rqW6Ly45Ye677yI5L6L5aaC6IiHIC0tdmVyaWZ5IOWPg+aVuOWFseeUqO+8iSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInNob3cgcmVmcyBmcm9tIHN0ZGluIHRoYXQgYXJlbid0IGluIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIumhr+ekuuW+nuaomea6lui8uOWFpeS4reiugOWFpeeahOS4jeWcqOacrOapn+eJiOacrOW6q+S4reeahOW8leeUqCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMQorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgKGluaXR8bGlzdHxzZXR8YWRkfGRpc2FibGUpIDxvcHRpb25zPiIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxhZGR8ZGlzYWJsZSkgPOmBuOmghT4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NjQKK21zZ2lkICJ0aGlzIHdvcmt0cmVlIGlzIG5vdCBzcGFyc2UgKHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBub3QgZXhpc3QpIgorbXNnc3RyICLpgJnkuI3mmK/nqIDnlo/lt6XkvZzljYDvvIhzcGFyc2UtY2hlY2tvdXQg5qqU5qGI5Y+v6IO95LiN5a2Y5Zyo77yJIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIyNQorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciBzcGFyc2UtY2hlY2tvdXQgZmlsZSIKK21zZ3N0ciAi54Sh5rOV5bu656uL56iA55aP57C95Ye65qqU5qGI55qE55uu6YyEIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI2NgorbXNnaWQgImZhaWxlZCB0byBzZXQgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyBzZXR0aW5nIgorbXNnc3RyICLnhKHms5XoqK3lrpogZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyDoqK3lrpoiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjgzCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IFstLWNvbmVdIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzAyCittc2dpZCAiaW5pdGlhbGl6ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGluIGNvbmUgbW9kZSIKK21zZ3N0ciAi5LulIGNvbmUg5qih5byP5Yid5aeL5YyW56iA55aP57C95Ye6IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjMwOAorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICLliJ3lp4vljJbnqIDnlo/nsL3lh7oiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgIueEoeazlemWi+WVn+OAjCVz44CNIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgbm9ybWFsaXplIHBhdGggJXMiCittc2dzdHIgIueEoeazleaomea6luWMlui3r+W+kSAlcyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0MTAKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChzZXR8YWRkKSAoLS1zdGRpbiB8IDxwYXR0ZXJucz4pIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IChzZXR8YWRkKSAoLS1zdGRpbiB8IDzmqKPlvI8+KSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucXVvdGUgQy1zdHlsZSBzdHJpbmcgJyVzJyIKK21zZ3N0ciAi54Sh5rOV5Y675o6JICclcycgQyDmqKPlvI/lrZfkuLLnmoTlvJXomZ8iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDg5IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTEzCittc2dpZCAidW5hYmxlIHRvIGxvYWQgZXhpc3Rpbmcgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICLnhKHms5XovInlhaXnj77lrZjnmoTnqIDnlo/nsL3lh7rmqKPlvI8iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTU4Cittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIHN0YW5kYXJkIGluIgorbXNnc3RyICLlvp7mqJnmupbovLjlhaXoroDlj5bmqKPlvI8iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTY0Cittc2dpZCAic2V0IHNwYXJzZS1jaGVja291dCBwYXR0ZXJucyIKK21zZ3N0ciAi6Kit5a6a56iA55aP57C95Ye65qij5byPIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjU4MQorbXNnaWQgImRpc2FibGUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICLlgZznlKjnqIDnlo/nsL3lh7oiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NTkzCittc2dpZCAiZXJyb3Igd2hpbGUgcmVmcmVzaGluZyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi6YeN5paw5pW055CG5bel5L2c55uu6YyE5pmC55m855Sf6Yyv6KqkIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjIgYnVpbHRpbi9zdGFzaC5jOjM4Cittc2dpZCAiZ2l0IHN0YXNoIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBzdGFzaCBsaXN0IFs86YG46aCFPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMyBidWlsdGluL3N0YXNoLmM6NDMKK21zZ2lkICJnaXQgc3Rhc2ggc2hvdyBbPG9wdGlvbnM+XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBzaG93IFs86YG46aCFPl0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjQgYnVpbHRpbi9zdGFzaC5jOjQ4Cittc2dpZCAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI1Cittc2dpZCAiZ2l0IHN0YXNoICggcG9wIHwgYXBwbHkgKSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoICggcG9wIHwgYXBwbHkgKSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI2IGJ1aWx0aW4vc3Rhc2guYzo2MworbXNnaWQgImdpdCBzdGFzaCBicmFuY2ggPGJyYW5jaG5hbWU+IFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGJyYW5jaCA85YiG5pSv5ZCNPiBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNyBidWlsdGluL3N0YXNoLmM6NjgKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI4Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdXVxuIgorIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPOioiuaBrz5dXG4iCisiICAgICAgICAgIFstLXBhdGhzcGVjLWZyb20tZmlsZT085qqU5qGIPiBbLS1wYXRoc3BlYy1maWxlLW51bF1dXG4iCisiICAgICAgICAgIFstLV0gWzzot6/lvpHopo/moLw+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzozMiBidWlsdGluL3N0YXNoLmM6ODUKK21zZ2lkICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8bWVzc2FnZT5dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs85raI5oGvPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MworbXNnaWQgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1OAorbXNnaWQgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NzMKK21zZ2lkICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dIFstcXwtLXF1aWV0XSA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IHN0YXNoIHN0b3JlIFstbXwtLW1lc3NhZ2UgPOa2iOaBrz5dIFstcXwtLXF1aWV0XSA85o+Q5LqkPiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjc4Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA85raI5oGvPl1cbiIKKyIgICAgICAgICAgWy0tXSBbPOi3r+W+keimj+agvD4uLi5dXSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICInJXMnIOS4jeWDj+aYr+S4gOWAi+WEsuiXj+aPkOS6pCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiVzIgorbXNnc3RyICLmjIflrprkuoblpKrlpJrnmoTniYjmnKzvvJolcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU0OQorbXNnaWQgIk5vIHN0YXNoIGVudHJpZXMgZm91bmQuIgorbXNnc3RyICLmnKrnmbznj77lhLLol4/mop3nm67jgIIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIlcyDkuI3mmK/kuIDlgIvmnInmlYjnmoTlvJXnlKjlkI0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMjUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3NQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIOS4jeaUr+aPtOWPg+aVuCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQwNAorbXNnaWQgImNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAi54Sh5rOV5Zyo5ZCI5L216YGO56iL5aWX55So5YSy6JePIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSBkaWZmICVzXiEuIgorbXNnc3RyICLnhKHms5XnlJ/miJDlt67nlbAgJXNeIS4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjIKK21zZ2lkICJjb25mbGljdHMgaW4gaW5kZXguVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIue0ouW8leS4reacieihneeqgeOAguWYl+ippuS4jeeUqCAtLWluZGV444CCIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDI4Cittc2dpZCAiY291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAi5LiN6IO95YSy5a2Y57Si5byV5qi5IgorCisjOiBidWlsdGluL3N0YXNoLmM6NDM3Cittc2dpZCAiY291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2giCittc2dzdHIgIueEoeazleW+nuWEsuiXj+aineebruS4reW+qeWOn+acqui/vei5pOaqlOahiCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXMiCittc2dzdHIgIuato+WcqOWQiOS9tSAlcyDlkowgJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NjEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2ODEKK21zZ2lkICJJbmRleCB3YXMgbm90IHVuc3Rhc2hlZC4iCittc2dzdHIgIue0ouW8leacquW+nuWEsuiXj+S4reW+qeWOn+OAgiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUyMiBidWlsdGluL3N0YXNoLmM6NjIxCittc2dpZCAiYXR0ZW1wdCB0byByZWNyZWF0ZSB0aGUgaW5kZXgiCittc2dzdHIgIuWYl+ippumHjeW7uue0ouW8lSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICVzICglcykiCittc2dzdHIgIuaNqOajhOS6hiAlc++8iCVz77yJIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJXPvvJrnhKHms5Xmjajmo4TlhLLol4/mop3nm64iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIiclcycg5LiN5piv5LiA5YCL5YSy6JeP5byV55SoIgorCisjOiBidWlsdGluL3N0YXNoLmM6NjMzIGdpdC1sZWdhY3ktc3Rhc2guc2g6Njk1Cittc2dpZCAiVGhlIHN0YXNoIGVudHJ5IGlzIGtlcHQgaW4gY2FzZSB5b3UgbmVlZCBpdCBhZ2Fpbi4iCittc2dzdHIgIuWEsuiXj+aineebruiiq+S/neeVmeS7peWCmeaCqOWGjeasoemcgOimgeOAgiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjY1NiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcxMworbXNnaWQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAi5pyq5oyH5a6a5YiG5pSv5ZCNIgorCisjOiBidWlsdGluL3N0YXNoLmM6Nzk2IGJ1aWx0aW4vc3Rhc2guYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAlcyB3aXRoICVzIgorbXNnc3RyICLnhKHms5XnlKggJTIkcyDmm7TmlrAgJTEkcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgxNCBidWlsdGluL3N0YXNoLmM6MTQ3OCBidWlsdGluL3N0YXNoLmM6MTU0MworbXNnaWQgInN0YXNoIG1lc3NhZ2UiCittc2dzdHIgIuWEsuiXj+iqquaYjiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgyNAorbXNnaWQgIlwiZ2l0IHN0YXNoIHN0b3JlXCIgcmVxdWlyZXMgb25lIDxjb21taXQ+IGFyZ3VtZW50IgorbXNnc3RyICJcImdpdCBzdGFzaCBzdG9yZVwiIOmcgOimgeS4gOWAiyA85o+Q5LqkPiDlj4PmlbgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMDQ5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjE4Cittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAi5rKS5pyJ6YG45pOH6K6K5pu0IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE0OSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE1MAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICLmgqjlsJrmnKrlu7rnq4vliJ3lp4vmj5DkuqQiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTc2IGdpdC1sZWdhY3ktc3Rhc2guc2g6MTY1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgaW5kZXggc3RhdGUiCittc2dzdHIgIueEoeazleWEsuWtmOebruWJjee0ouW8leeLgOaFiyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExODUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxODAKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLnhKHms5XlhLLlrZjmnKrov73ouaTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTk2IGJ1aWx0aW4vc3Rhc2guYzoxMjA1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjAxCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxNAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICLnhKHms5XlhLLlrZjnm67liY3lt6XkvZzljYDni4DmhYsiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjMzIGdpdC1sZWdhY3ktc3Rhc2guc2g6MjM0Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIuS4jeiDveiomOmMhOW3peS9nOWNgOeLgOaFiyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyODIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMzgKK21zZ2lkICJDYW4ndCB1c2UgLS1wYXRjaCBhbmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICLkuI3og73lkIzmmYLkvb/nlKjlj4PmlbggLS1wYXRjaCDlkowgLS1pbmNsdWRlLXVudHJhY2tlZCDmiJYgLS1hbGwiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjk4Cittc2dpZCAiRGlkIHlvdSBmb3JnZXQgdG8gJ2dpdCBhZGQnPyIKK21zZ3N0ciAi5oKo5piv5ZCm5b+Y5LqG5Z+36KGMICdnaXQgYWRkJ++8nyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMTMgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNDYKK21zZ2lkICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiCittc2dzdHIgIuaykuacieimgeWEsuWtmOeahOacrOapn+S/ruaUuSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMjAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTEKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAi54Sh5rOV5Yid5aeL5YyW5YSy6JePIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMzNSBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1NQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIKK21zZ3N0ciAi54Sh5rOV5YSy5a2Y55uu5YmN54uA5oWLIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJXMiCittc2dzdHIgIuWEsuWtmOW3peS9nOebrumMhOWSjOe0ouW8leeLgOaFiyAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0MzAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozODUKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIueEoeazleWIqumZpOW3peS9nOWNgOiuiuabtCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjkgYnVpbHRpbi9zdGFzaC5jOjE1MzQKK21zZ2lkICJrZWVwIGluZGV4IgorbXNnc3RyICLkv53mjIHntKLlvJUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDcxIGJ1aWx0aW4vc3Rhc2guYzoxNTM2Cittc2dpZCAic3Rhc2ggaW4gcGF0Y2ggbW9kZSIKK21zZ3N0ciAi5Lul5L+u6KOc5qqU5qih5byP5YSy6JePIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3MiBidWlsdGluL3N0YXNoLmM6MTUzNworbXNnaWQgInF1aWV0IG1vZGUiCittc2dzdHIgIumdnOm7mOaooeW8jyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NzQgYnVpbHRpbi9zdGFzaC5jOjE1MzkKK21zZ2lkICJpbmNsdWRlIHVudHJhY2tlZCBmaWxlcyBpbiBzdGFzaCIKK21zZ3N0ciAi5YSy6JeP5Lit5YyF5ZCr5pyq6L+96Lmk5qqU5qGIIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3NiBidWlsdGluL3N0YXNoLmM6MTU0MQorbXNnaWQgImluY2x1ZGUgaWdub3JlIGZpbGVzIgorbXNnc3RyICLljIXlkKvlv73nlaXnmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNjAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBleGVjICVzIgorbXNnc3RyICLkuI3og73ln7fooYwgJXMiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM3Cittc2dpZCAic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIgorbXNnc3RyICLot7PpgY7lkoznp7vpmaTmiYDmnInnmoTlgpnoqLvooYwiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjQwCittc2dpZCAicHJlcGVuZCBjb21tZW50IGNoYXJhY3RlciBhbmQgc3BhY2UgdG8gZWFjaCBsaW5lIgorbXNnc3RyICLngrrmr4/kuIDooYznmoTooYzpppbmlrDlop7lgpnoqLvnrKblkoznqbrmoLwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk5OQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiCittc2dzdHIgIuacn+acm+S4gOWAi+WujOaVtOeahOW8leeUqOWQjeeose+8jOWNu+W+l+WIsCAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY0Cittc2dpZCAic3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUgdGFrZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSDkuI3luLblj4PmlbgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJXMnIgorbXNnc3RyICLnhKHms5Xlvp4gdXJsICclcycg5Ymd6Zui5LiA5YCL5YWD5Lu2IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDEwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk1Cittc2dpZCAiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAi55u45bCN6Lev5b6R55qE5pu/5Luj6Yyo6KiY77yIYW5jaG9y77yJIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD086Lev5b6RPl0gWzzot6/lvpE+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjMwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVybCBmb3VuZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAi5ZyoIC5naXRtb2R1bGVzIOS4reacquaJvuWIsOWtkOaooee1hCAnJXMnIOeahCB1cmwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyVzJ1xuIgorbXNnc3RyICLpgLLlhaUgJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgZm9yICVzXG4iCisiLiIKK21zZ3N0ciAiIgorIuWwjSAlcyDln7fooYwgcnVuX2NvbW1hbmQg6L+U5Zue6Z2e6Zu25YC844CCXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIHdoaWxlIHJlY3Vyc2luZyBpbiB0aGUgbmVzdGVkICIKKyJzdWJtb2R1bGVzIG9mICVzXG4iCisiLiIKK21zZ3N0ciAiIgorIuWcqOmBnui/tCAlcyDnmoTlrZDmqKHntYTln7fooYwgcnVuX2NvbW1hbmQg5pmC6L+U5Zue6Z2e6Zu25YC844CCXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBlbnRlcmluZyBlYWNoIHN1Ym1vZHVsZSBjb21tYW5kIgorbXNnc3RyICLpmLvmraLpgLLlhaXmr4/kuIDlgIvlrZDmqKHntYTmjIfku6TnmoTovLjlh7oiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NjcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNjMKK21zZ2lkICJSZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgIumBnui/tOmAsuWFpeW1jOWll+WtkOaooee1hOS4rSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU3MgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBmb3JlYWNoIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gPGNvbW1hbmQ+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDzmjIfku6Q+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgbG9vayB1cCBjb25maWd1cmF0aW9uICclcycuIEFzc3VtaW5nIHRoaXMgcmVwb3NpdG9yeSBpcyBpdHMgb3duICIKKyJhdXRob3JpdGF0aXZlIHVwc3RyZWFtLiIKK21zZ3N0ciAi54Sh5rOV5om+5Yiw6Kit5a6aICclcyfjgILlgYflrprpgJnlgIvniYjmnKzluqvmmK/lhbboh6rouqvnmoTlrpjmlrnkuIrmuLjjgIIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAi54Sh5rOV54K65a2Q5qih57WEICclcycg6Ki75YaKIHVybCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIgorbXNnc3RyICLlrZDmqKHntYQgJyVzJ++8iCVz77yJ5bey5bCN6Lev5b6RICclcycg6Ki75YaKXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogY29tbWFuZCB1cGRhdGUgbW9kZSBzdWdnZXN0ZWQgZm9yIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIuitpuWRiu+8muW7uuitsOWtkOaooee1hCAnJXMnIOS9v+eUqOaMh+S7pOabtOaWsOaooeW8j1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAi54Sh5rOV54K65a2Q5qih57WEICclcycg6Ki75YaK5pu05paw5qih5byPIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzEwCittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IGZvciBpbml0aWFsaXppbmcgYSBzdWJtb2R1bGUiCittc2dzdHIgIumYu+atouWtkOaooee1hOWIneWni+WMlueahOi8uOWHuiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8b3B0aW9ucz5dIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPOmBuOmghT5dIFs86Lev5b6RPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3ODkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICLlnKggLmdpdG1vZHVsZXMg5Lit5rKS5pyJ55m854++6Lev5b6RICclcycg55qE5a2Q5qih57WE5pig5bCEIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgcmVmIGluc2lkZSB0aGUgc3VibW9kdWxlICclcyciCittc2dzdHIgIueEoeazleino+aekOWtkOaooee1hCAnJXMnIOeahCBIRUFEIOW8leeUqCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg2NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAzMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLpgZ7ov7TlrZDmqKHntYQgJyVzJyDlpLHmlZciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTkKK21zZ2lkICJTdXBwcmVzcyBzdWJtb2R1bGUgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAi6Zi75q2i5a2Q5qih57WE54uA5oWL6Ly45Ye6IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODg5Cittc2dpZCAiIgorIlVzZSBjb21taXQgc3RvcmVkIGluIHRoZSBpbmRleCBpbnN0ZWFkIG9mIHRoZSBvbmUgc3RvcmVkIGluIHRoZSBzdWJtb2R1bGUgIgorIkhFQUQiCittc2dzdHIgIuS9v+eUqOWEsuWtmOWcqOe0ouW8leS4reeahOaPkOS6pO+8jOiAjOmdnuWEsuWtmOWcqOWtkOaooee1hCBIRUFEIOS4reeahOaPkOS6pCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg5MAorbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAi6YGe6L+06YCy5YWl5bWM5aWX5a2Q5qih57WE5LitIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODk1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPOi3r+W+kT4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTE5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHBhdGg+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA86Lev5b6RPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk4MworIywgYy1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICclcydcbiIKK21zZ3N0ciAi54K6ICclcycg5ZCM5q2l5a2Q5qih57WEIHVybFxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIueEoeazleeCuuWtkOaooee1hOi3r+W+kSAnJXMnIOiou+WGiiB1cmwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi54Sh5rOV5b6X5Yiw5a2Q5qih57WEICclcycg55qE6aCQ6Kit6YGg56uv6Zec6IGvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIueEoeazleeCuuWtkOaooee1hCAnJXMnIOabtOaWsOmBoOerr+mXnOiBryIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNjEKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIgorbXNnc3RyICLpmLvmraLlrZDmqKHntYQgdXJsIOWQjOatpeeahOi8uOWHuiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNjgKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzzot6/lvpE+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91ICIKKyJyZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyLlrZDmqKHntYTlt6XkvZzljYAgJyVzJyDljIXlkKvkuIDlgIsgLmdpdCDnm67pjITvvIjlpoLmnpzmgqjnorrpnIDliKrpmaTlroPlj4rlhbblhajpg6jmrbflj7LvvIzkvb/nlKggJ3JtICIKKyItcmYnIOaMh+S7pO+8iSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkICIKKyJ0aGVtIgorbXNnc3RyICLlrZDmqKHntYTlt6XkvZzljYAgJyVzJyDljIXlkKvmnKzmqZ/kv67mlLnvvJvkvb/nlKggJy1mJyDmjajmo4TlroPlgJEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIKK21zZ3N0ciAi5bey5riF6Zmk55uu6YyEICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBzdWJtb2R1bGUgd29yayB0cmVlICclcydcbiIKK21zZ3N0ciAi54Sh5rOV56e76Zmk5a2Q5qih57WE5bel5L2c5Y2AICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLkuI3og73lu7rnq4vnqbrnmoTlrZDmqKHntYTnm67pjIQgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAi5a2Q5qih57WEICclcyfvvIglc++8ieacquWwjei3r+W+kSAnJXMnIOiou+WGilxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIwMAorbXNnaWQgIlJlbW92ZSBzdWJtb2R1bGUgd29ya2luZyB0cmVlcyBldmVuIGlmIHRoZXkgY29udGFpbiBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICLliKrpmaTlrZDmqKHntYTlt6XkvZzljYDvvIzljbPkvb/ljIXlkKvmnKzmqZ/kv67mlLkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjAxCittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAi5bCH5omA5pyJ5a2Q5qih57WE5Y+W5raI6Ki75YaKIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIwNgorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPHBhdGg+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPOi3r+W+kT4uLi5dXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMjAKK21zZ2lkICJVc2UgJy0tYWxsJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGVpbml0aWFsaXplIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICLlpoLmnpzmgqjnorrlr6bmg7PopoHlsI3miYDmnInlrZDmqKHntYTln7fooYzlj5bmtojliJ3lp4vljJbvvIzoq4vkvb/nlKggJy0tYWxsJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyODkKK21zZ2lkICIiCisiQW4gYWx0ZXJuYXRlIGNvbXB1dGVkIGZyb20gYSBzdXBlcnByb2plY3QncyBhbHRlcm5hdGUgaXMgaW52YWxpZC5cbiIKKyJUbyBhbGxvdyBHaXQgdG8gY2xvbmUgd2l0aG91dCBhbiBhbHRlcm5hdGUgaW4gc3VjaCBhIGNhc2UsIHNldFxuIgorInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IHRvICdpbmZvJyBvciwgZXF1aXZhbGVudGx5LCBjbG9uZSB3aXRoXG4iCisiJy0tcmVmZXJlbmNlLWlmLWFibGUnIGluc3RlYWQgb2YgJy0tcmVmZXJlbmNlJy4iCittc2dzdHIgIiIKKyLlvp7kuIrntJrlsIjmoYjnmoTlgpnnlKjniYjmnKzluqvoqIjnrpflvpflh7rnmoTlgpnnlKjniYjmnKzluqvnhKHmlYjjgIJcbiIKKyLpgJnnqK7mg4Xms4HkuIvvvIzoq4voqK3lrpogc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kg54K6ICdpbmZvJ1xuIgorIuS7peWFgeiosSBHaXQg5LiN55So5YKZ55So54mI5pys5bqr6KSH6KO977yM5Lqm5Y+v5L2/55So562J5pWI55qEICctLXJlZmVyZW5jZS1pZi1hYmxlJ1xuIgorIuiAjOmdniAnLS1yZWZlcmVuY2UnIOikh+ijveOAgiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzMjggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgY2Fubm90IGFkZCBhbHRlcm5hdGU6ICVzIgorbXNnc3RyICLlrZDmqKHntYQgJyVzJyDkuI3og73mlrDlop7niYjmnKzluqvlgpnpgbjvvJolcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgaXMgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIuS4jeiDveitmOWIpSBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSDnmoTlj5blgLwgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICLkuI3og73orZjliKUgc3VibW9kdWxlLmFsdGVybmF0ZUxvY2Fpb24g55qE5Y+W5YC8ICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk4Cittc2dpZCAid2hlcmUgdGhlIG5ldyBzdWJtb2R1bGUgd2lsbCBiZSBjbG9uZWQgdG8iCittc2dzdHIgIuaWsOeahOWtkOaooee1hOWwh+imgeikh+ijveeahOi3r+W+kSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDEKK21zZ2lkICJuYW1lIG9mIHRoZSBuZXcgc3VibW9kdWxlIgorbXNnc3RyICLmlrDlrZDmqKHntYTnmoTlkI3nqLEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA0Cittc2dpZCAidXJsIHdoZXJlIHRvIGNsb25lIHRoZSBzdWJtb2R1bGUgZnJvbSIKK21zZ3N0ciAi6KSH6KO95a2Q5qih57WE55qEIHVybCDkvY3lnYAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDEyCittc2dpZCAiZGVwdGggZm9yIHNoYWxsb3cgY2xvbmVzIgorbXNnc3RyICLmt7ropIfoo73nmoTmt7HluqYiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDE1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTI0Cittc2dpZCAiZm9yY2UgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAi5by35Yi26aGv56S66KSH6KO96YCy5bqmIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQxNyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyNgorbXNnaWQgImRpc2FsbG93IGNsb25pbmcgaW50byBub24tZW1wdHkgZGlyZWN0b3J5IgorbXNnc3RyICLkuI3lhYHoqLHopIfoo73oh7PpnZ7nqbrnmb3nm67pjIQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDI0Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8cmVwb3NpdG9yeT5dIFstLW5hbWUgPG5hbWU+XSBbLS1kZXB0aCA8ZGVwdGg+XSBbLS1zaW5nbGUtYnJhbmNoXSAtLXVybCAiCisiPHVybD4gLS1wYXRoIDxwYXRoPiIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9POi3r+W+kT5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgPOeJiOacrOW6qyIKKyI+XSBbLS1uYW1lIDzlkI3lrZc+XSBbLS1kZXB0aCA85rex5bqmPl0gWy0tc2luZ2xlLWJyYW5jaF0gLS11cmwgPHVybD4gLS1wYXRoIDzot68iCisi5b6RPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gY3JlYXRlL3VzZSAnJXMnIGluIGFub3RoZXIgc3VibW9kdWxlJ3MgZ2l0IGRpciIKK21zZ3N0ciAi5ouS57WV5Zyo5YW25LuW5a2Q5qih57WE55qEIGdpdCDot6/lvpHlu7rnq4vvvI/kvb/nlKjjgIwlc+OAjSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2xvbmUgb2YgJyVzJyBpbnRvIHN1Ym1vZHVsZSBwYXRoICclcycgZmFpbGVkIgorbXNnc3RyICLnhKHms5XopIfoo70gJyVzJyDliLDlrZDmqKHntYTot6/lvpEgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlyZWN0b3J5IG5vdCBlbXB0eTogJyVzJyIKK21zZ3N0ciAi55uu6YyE5LiN5piv56m655qE77ya44CMJXPjgI0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgc3VibW9kdWxlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAi54Sh5rOV5b6X5YiwICclcycg55qE5a2Q5qih57WE55uu6YyEIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIuWtkOaooee1hCAnJTIkcycg55qE5pu05paw5qih5byPICclMSRzJyDnhKHmlYgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICLngrrlrZDmqKHntYQgJyUyJHMnIOioreWumueahOabtOaWsOaooeW8jyAnJTEkcycg54Sh5pWIIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYxNworIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJXMnIG5vdCBpbml0aWFsaXplZCIKK21zZ3N0ciAi5a2Q5qih57WEICclcycg5bCa5pyq5Yid5aeL5YyWIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYyMQorbXNnaWQgIk1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IgorbXNnc3RyICLkuZ/oqLHmgqjmg7PopoHln7fooYwgJ3VwZGF0ZSAtLWluaXQn77yfIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyB1bm1lcmdlZCBzdWJtb2R1bGUgJXMiCittc2dzdHIgIueVpemBjuacquWQiOS9teeahOWtkOaooee1hCAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgc3VibW9kdWxlICclcyciCittc2dzdHIgIueVpemBjuWtkOaooee1hCAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJy4gUmV0cnkgc2NoZWR1bGVkIgorbXNnc3RyICLopIfoo70gJyVzJyDlpLHmlZfjgILmjInoqIjlioPph43oqaYiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnIGEgc2Vjb25kIHRpbWUsIGFib3J0aW5nIgorbXNnc3RyICLnrKzkuozmrKHlmJfoqabopIfoo70gJyVzJyDlpLHmlZfvvIzpm6LplosiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTAzIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTQ5Cittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuWIsOW3peS9nOWNgOeahOi3r+W+kSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDYKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSwgYWNyb3NzIG5lc3RlZCBzdWJtb2R1bGUgYm91bmRhcmllcyIKK21zZ3N0ciAi5bel5L2c5Y2A5Lit55qE6Lev5b6R77yM6YGe6L+05bWM5aWX5a2Q5qih57WEIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxMAorbXNnaWQgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiCittc2dzdHIgInJlYmFzZeOAgW1lcmdl44CBY2hlY2tvdXQg5oiWIG5vbmUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE2Cittc2dpZCAiQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSB0cnVuY2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zIgorbXNnc3RyICLlu7rnq4vkuIDlgIvmjIflrprmt7HluqbnmoTmt7ropIfoo70iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE5Cittc2dpZCAicGFyYWxsZWwgam9icyIKK21zZ3N0ciAi5Lim55m85Lu75YuZIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyMQorbXNnaWQgIndoZXRoZXIgdGhlIGluaXRpYWwgY2xvbmUgc2hvdWxkIGZvbGxvdyB0aGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiIKK21zZ3N0ciAi5Yid5aeL6KSH6KO95piv5ZCm5oeJ6Kmy6YG15a6I5o6o6Jam55qE5re66KSH6KO96YG46aCFIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkyMgorbXNnaWQgImRvbid0IHByaW50IGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgIuS4jeimgei8uOWHuuikh+ijvemAsuW6piIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MzMKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD086Lev5b6RPl0gWzzot6/lvpE+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5NDYKK21zZ2lkICJiYWQgdmFsdWUgZm9yIHVwZGF0ZSBwYXJhbWV0ZXIiCittc2dzdHIgInVwZGF0ZSDlj4Pmlbjlj5blgLzpjK/oqqQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0IGJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0ICIKKyJ0aGUgc3VwZXJwcm9qZWN0IGlzIG5vdCBvbiBhbnkgYnJhbmNoIgorbXNnc3RyICLlrZDmqKHntYTvvIglc++8ieeahOWIhuaUr+ioreWumueCuue5vOaJv+S4iue0muWwiOahiOeahOWIhuaUr++8jOS9huaYr+S4iue0muWwiOahiOS4jeWcqOS7u+S9leWIhuaUr+S4iiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBhIHJlcG9zaXRvcnkgaGFuZGxlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi54Sh5rOV542y5b6X5a2Q5qih57WEICclcycg55qE54mI5pys5bqr5Y+l5p+EIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE1MAorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIgorbXNnc3RyICLlnKjlrZDmqKHntYTkuK3pgZ7ov7QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTU2Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPOmBuOmghT5dIFs86Lev5b6RPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjEyCittc2dpZCAiY2hlY2sgaWYgaXQgaXMgc2FmZSB0byB3cml0ZSB0byB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAi5qqi5p+l5a+r5YWlIC5naXRtb2R1bGVzIOaqlOahiOaYr+WQpuWuieWFqCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMTUKK21zZ2lkICJ1bnNldCB0aGUgY29uZmlnIGluIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICLlj5bmtoggLmdpdG1vZHVsZXMg5qqU5qGI5Lit55qE6Kit5a6aIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIyMAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgPG5hbWU+IFs8dmFsdWU+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA85ZCN56ixPiBbPOWAvD5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIyMQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS11bnNldCA8bmFtZT4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS11bnNldCA85ZCN56ixPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMjIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI0MSBnaXQtc3VibW9kdWxlLnNoOjE3NAorIywgc2gtZm9ybWF0Cittc2dpZCAicGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGlzIGluIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuiri+eiuuiqjSAuZ2l0bW9kdWxlcyDmqpTmoYjlnKjlt6XkvZzljYDoo6EiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjkxIGdpdC5jOjQzMyBnaXQuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lc24ndCBzdXBwb3J0IC0tc3VwZXItcHJlZml4IgorbXNnc3RyICIlcyDkuI3mlK/mj7QgLS1zdXBlci1wcmVmaXgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgc3VibW9kdWxlLS1oZWxwZXIgc3ViY29tbWFuZCIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDlgIvmnInmlYjnmoQgc3VibW9kdWxlLS1oZWxwZXIg5a2Q5oyH5LukIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjgKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIDxuYW1lPiBbPHJlZj5dIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIFs86YG46aCFPl0gPOWQjeeosT4gWzzlvJXnlKg+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDzlkI3nqLE+IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwCittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAi5LiN6aGv56S66Z2e56ym6Jmf77yI5YiG6Zui55qE77yJ5byV55So55qE6Yyv6Kqk6KiK5oGvIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAi5Yiq6Zmk56ym6Jmf5byV55SoIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICLnuK7nn63lvJXnlKjovLjlh7oiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIgorbXNnc3RyICLljp/lm6AiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIG9mIHRoZSB1cGRhdGUiCittc2dzdHIgIuabtOaWsOeahOWOn+WboCIKKworIzogYnVpbHRpbi90YWcuYzoyNQorbXNnaWQgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XVxuIgorIlx0XHQ8dGFnbmFtZT4gWzxoZWFkPl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDzmtojmga8+IHwgLUYgPOaqlOahiD5dXG4iCisiXHRcdDzmqJnnsaTlkI0+IFs86aCtPl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjcKK21zZ2lkICJnaXQgdGFnIC1kIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtZCA85qiZ57Gk5ZCNPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzoyOAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0gWy0tIgorInBvaW50cy1hdCA8b2JqZWN0Pl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCB0YWcgLWwgWy1uWzzmlbjlrZc+XV0gWy0tY29udGFpbnMgPOaPkOS6pD5dIFstLW5vLWNvbnRhaW5zIDzmj5DkuqQ+XSBbLS1wb2ludHMtIgorImF0IDznianku7Y+XVxuIgorIlx0XHRbLS1mb3JtYXQ9POagvOW8jz5dIFstLVtuby1dbWVyZ2VkIFs85o+Q5LqkPl1dIFs85qih5byPPi4uLl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzAKK21zZ2lkICJnaXQgdGFnIC12IFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC12IFstLWZvcm1hdD085qC85byPPl0gPOaomeexpOWQjT4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAi5pyq55m854++5qiZ57GkICclcyfjgIIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAi5bey5Yiq6Zmk5qiZ57GkICclcyfvvIjmm77ngrogJXPvvIlcbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisi6Ly45YWl5LiA5YCL5qiZ57Gk6Kqq5piO77yaXG4iCisiICAlc1xuIgorIuS7pSAnJWMnIOmWi+mgreeahOihjOWwh+iiq+W/veeVpeOAglxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91ICIKKyJ3YW50IHRvLlxuIgorbXNnc3RyICIiCisiXG4iCisi6Ly45YWl5LiA5YCL5qiZ57Gk6Kqq5piO77yaXG4iCisiICAlc1xuIgorIuS7pSAnJWMnIOmWi+mgreeahOihjOWwh+iiq+S/neeVme+8jOWmguaenOaCqOmhmOaEj+S5n+WPr+S7peWIqumZpOWug+WAkeOAglxuIgorCisjOiBidWlsdGluL3RhZy5jOjE5OAorbXNnaWQgInVuYWJsZSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgIueEoeazleewvee9suaomeexpCIKKworIzogYnVpbHRpbi90YWcuYzoyMDAKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgIueEoeazleWvq+aomeexpOaqlOahiCIKKworIzogYnVpbHRpbi90YWcuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIGNyZWF0ZWQgYSBuZXN0ZWQgdGFnLiBUaGUgb2JqZWN0IHJlZmVycmVkIHRvIGJ5IHlvdXIgbmV3IHRhZyBpc1xuIgorImFscmVhZHkgYSB0YWcuIElmIHlvdSBtZWFudCB0byB0YWcgdGhlIG9iamVjdCB0aGF0IGl0IHBvaW50cyB0bywgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKK21zZ3N0ciAiIgorIuaCqOW7uueri+S6huS4gOWAi+W1jOWll+eahOaomeexpOOAguaCqOeahOaWsOaomeexpOaMh+WQkeeahOeJqeS7tuW3sue2k+aYr+S4gOWAi+aomeexpOOAguWmguaenOaCqOaDs+imgVxuIgorIuWwjeWFtuaMh+WQkeeahOebruaomeW7uueri+aomeexpO+8jOS9v+eUqO+8mlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKKworIzogYnVpbHRpbi90YWcuYzoyMzIKK21zZ2lkICJiYWQgb2JqZWN0IHR5cGUuIgorbXNnc3RyICLlo57nmoTnianku7bpoZ7lnovjgIIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mjg0Cittc2dpZCAibm8gdGFnIG1lc3NhZ2U/IgorbXNnc3RyICLnhKHmqJnnsaToqqrmmI7vvJ8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgIuaomeexpOiqquaYjuiiq+S/neeVmeWcqCAlc1xuIgorCisjOiBidWlsdGluL3RhZy5jOjQwMgorbXNnaWQgImxpc3QgdGFnIG5hbWVzIgorbXNnc3RyICLliJflh7rmqJnnsaTlkI3nqLEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA0Cittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgIuavj+WAi+aomeexpOioiuaBr+WIl+WNsCA8bj4g6KGMIgorCisjOiBidWlsdGluL3RhZy5jOjQwNgorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICLliKrpmaTmqJnnsaQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA3Cittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgIumpl+itieaomeexpCIKKworIzogYnVpbHRpbi90YWcuYzo0MDkKK21zZ2lkICJUYWcgY3JlYXRpb24gb3B0aW9ucyIKK21zZ3N0ciAi5qiZ57Gk5bu656uL6YG46aCFIgorCisjOiBidWlsdGluL3RhZy5jOjQxMQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAi6ZmE6Ki75qiZ57Gk77yM6ZyA6KaB5LiA5YCL6Kqq5piOIgorCisjOiBidWlsdGluL3RhZy5jOjQxMworbXNnaWQgInRhZyBtZXNzYWdlIgorbXNnc3RyICLmqJnnsaToqqrmmI4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE1Cittc2dpZCAiZm9yY2UgZWRpdCBvZiB0YWcgbWVzc2FnZSIKK21zZ3N0ciAi5by35Yi257eo6Lyv5qiZ57Gk6Kqq5piOIgorCisjOiBidWlsdGluL3RhZy5jOjQxNgorbXNnaWQgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciCittc2dzdHIgIumZhOiou+S4pumZhOWKoCBHUEcg57C95ZCN55qE5qiZ57GkIgorCisjOiBidWlsdGluL3RhZy5jOjQxOQorbXNnaWQgInVzZSBhbm90aGVyIGtleSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgIuS9v+eUqOWPpuWklueahOengemRsOewveWQjeipsuaomeexpCIKKworIzogYnVpbHRpbi90YWcuYzo0MjAKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICLlpoLmnpzlrZjlnKjvvIzlj5bku6Pnj77mnInnmoTmqJnnsaQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIxIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OQorbXNnaWQgImNyZWF0ZSBhIHJlZmxvZyIKK21zZ3N0ciAi5bu656uL5byV55So5pel6KqMIgorCisjOiBidWlsdGluL3RhZy5jOjQyMworbXNnaWQgIlRhZyBsaXN0aW5nIG9wdGlvbnMiCittc2dzdHIgIuaomeexpOWIl+ihqOmBuOmghSIKKworIzogYnVpbHRpbi90YWcuYzo0MjQKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgIuS7peWIl+eahOaWueW8j+mhr+ekuuaomeexpOWIl+ihqCIKKworIzogYnVpbHRpbi90YWcuYzo0MjUgYnVpbHRpbi90YWcuYzo0MjcKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIuWPquWIl+WNsOWMheWQq+ipsuaPkOS6pOeahOaomeexpCIKKworIzogYnVpbHRpbi90YWcuYzo0MjYgYnVpbHRpbi90YWcuYzo0MjgKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIuWPquWIl+WNsOS4jeWMheWQq+ipsuaPkOS6pOeahOaomeexpCIKKworIzogYnVpbHRpbi90YWcuYzo0MjkKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICLlj6rliJfljbDlt7LntpPlkIjkvbXnmoTmqJnnsaQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDMwCittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgIuWPquWIl+WNsOWwmuacquWQiOS9teeahOaomeexpCIKKworIzogYnVpbHRpbi90YWcuYzo0MzQKK21zZ2lkICJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAi5Y+q5YiX5Y2w5oyH5ZCR6Kmy54mp5Lu255qE5qiZ57GkIgorCisjOiBidWlsdGluL3RhZy5jOjQ4MgorbXNnaWQgIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiDlkowgLW4g5LiN55u45a65IgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICItbiDpgbjpoIXlj6rlhYHoqLHnlKjlnKjliJfooajpoa/npLrmqKHlvI8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA2Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiLS1jb250YWlucyDpgbjpoIXlj6rlhYHoqLHnlKjlnKjliJfooajpoa/npLrmqKHlvI8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA4Cittc2dpZCAiLS1uby1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiLS1uby1jb250YWlucyDpgbjpoIXlj6rlhYHoqLHnlKjlnKjliJfooajpoa/npLrmqKHlvI8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEwCittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIi0tcG9pbnRzLWF0IOmBuOmgheWPquWFgeioseeUqOWcqOWIl+ihqOmhr+ekuuaooeW8jyIKKworIzogYnVpbHRpbi90YWcuYzo1MTIKK21zZ2lkICItLW1lcmdlZCBhbmQgLS1uby1tZXJnZWQgb3B0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiLS1tZXJnZWQg5ZKMIC0tbm8tbWVyZ2VkIOmBuOmgheWPquWFgeioseeUqOWcqOWIl+ihqOmhr+ekuuaooeW8jyIKKworIzogYnVpbHRpbi90YWcuYzo1MjMKK21zZ2lkICJvbmx5IG9uZSAtRiBvciAtbSBvcHRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgIuWPquWFgeioseS4gOWAiyAtRiDmiJYgLW0g6YG46aCF44CCIgorCisjOiBidWlsdGluL3RhZy5jOjU0MgorbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAi5aSq5aSa5Y+D5pW4IgorCisjOiBidWlsdGluL3RhZy5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRhZyBuYW1lLiIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDlgIvmnInmlYjnmoTmqJnnsaTlkI3nqLHjgIIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLmqJnnsaQgJyVzJyDlt7LlrZjlnKgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAi5bey5pu05paw5qiZ57GkICclcyfvvIjmm77ngrogJXPvvIlcbiIKKworIzogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjUwMgorbXNnaWQgIlVucGFja2luZyBvYmplY3RzIgorbXNnc3RyICLlsZXplovnianku7bkuK0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIuW7uueri+ebrumMhCAlcyDlpLHmlZciCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAi5bu656uL5qqU5qGIICVzIOWkseaVlyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBmaWxlICVzIgorbXNnc3RyICLliKrpmaTmqpTmoYggJXMg5aSx5pWXIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNSBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAi5Yiq6Zmk55uu6YyEICVzIOWkseaVlyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGVzdGluZyBtdGltZSBpbiAnJXMnICIKK21zZ3N0ciAi5ZyoICclcycg5Lit5ris6KmmIG10aW1lICIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNTQKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZmlsZSIKK21zZ3N0ciAi5paw5aKe5LiA5YCL5paw5qqU5qGI5b6M77yM55uu6YyE55qE54uA5oWL6KiK5oGv5pyq5pS56K6KIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE2NworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIuaWsOWinuS4gOWAi+aWsOebrumMhOW+jO+8jOebrumMhOeahOeLgOaFi+ioiuaBr+acquaUueiuiiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxODAKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgdXBkYXRpbmcgYSBmaWxlIgorbXNnc3RyICLmm7TmlrDkuIDlgIvmqpTmoYjlvozvvIznm67pjITnmoTni4DmhYvoqIrmga/ooqvkv67mlLkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTkxCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIGFkZGluZyBhIGZpbGUgaW5zaWRlIHN1YmRpcmVjdG9yeSIKK21zZ3N0ciAi5Zyo5a2Q55uu6YyE5Lit5paw5aKe5qqU5qGI5b6M77yM55uu6YyE55qE54uA5oWL6KiK5oGv6KKr5L+u5pS5IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIwMgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZmlsZSIKK21zZ3N0ciAi5Yiq6Zmk5LiA5YCL5qqU5qGI5b6M77yM55uu6YyE55qE54uA5oWL6KiK5oGv5pyq5pS56K6KIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIxNQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZGlyZWN0b3J5IgorbXNnc3RyICLliKrpmaTkuIDlgIvnm67pjITlvozvvIznm67pjITnmoTni4DmhYvoqIrmga/mnKrmlLnorooiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIyCittc2dpZCAiIE9LIgorbXNnc3RyICIgT0siCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTkxCittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgdXBkYXRlLWluZGV4IFs86YG46aCFPl0gWy0tXSBbPOaqlOahiD4uLi5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NAorbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAi55W257Si5byV6ZyA6KaB5pu05paw5pmC57m857qM6YeN5paw5pW055CGIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NworbXNnaWQgInJlZnJlc2g6IGlnbm9yZSBzdWJtb2R1bGVzIgorbXNnc3RyICLph43mlrDmlbTnkIbvvJrlv73nlaXlrZDmqKHntYQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgwCittc2dpZCAiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiCittc2dzdHIgIuS4jeW/veeVpeaWsOeahOaqlOahiCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODIKK21zZ2lkICJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIKK21zZ3N0ciAi6K6T5qqU5qGI5Y+W5Luj55uu6YyE77yI5Y+N5LmL5Lqm54S277yJIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NAorbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgIumAmuefpeaqlOahiOW+nuW3peS9nOWNgOmBuuWksSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODYKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAi5Y2z5L2/57Si5byV5Y2A5YyF5ZCr5pyq5ZCI5L2155qE5qKd55uu5Lmf5Z+36KGM6YeN5paw5pW055CGIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4OQorbXNnaWQgInJlZnJlc2ggc3RhdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi6YeN5paw5pW055CG57Wx6KiI6KiK5oGvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5MworbXNnaWQgImxpa2UgLS1yZWZyZXNoLCBidXQgaWdub3JlIGFzc3VtZS11bmNoYW5nZWQgc2V0dGluZyIKK21zZ3N0ciAi6aGe5Ly85pa8IC0tcmVmcmVzaO+8jOS9huaYr+W/veeVpSBhc3N1bWUtdW5jaGFuZ2VkIOioreWumiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTcKK21zZ2lkICI8bW9kZT4sPG9iamVjdD4sPHBhdGg+IgorbXNnc3RyICI85a2Y5Y+W5qih5byPPiw854mp5Lu2Piw86Lev5b6RPiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTgKK21zZ2lkICJhZGQgdGhlIHNwZWNpZmllZCBlbnRyeSB0byB0aGUgaW5kZXgiCittc2dzdHIgIuaWsOWinuaMh+WumueahOaineebruWIsOe0ouW8leWNgCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA4Cittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICLmiormqpTmoYjmqJnoqJjngrogXCLmspLmnInorormm7RcIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDExCittc2dpZCAiY2xlYXIgYXNzdW1lZC11bmNoYW5nZWQgYml0IgorbXNnc3RyICLmuIXpmaQgYXNzdW1lZC11bmNoYW5nZWQg5L2NIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTQKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwiaW5kZXgtb25seVwiIgorbXNnc3RyICLmiormqpTmoYjmqJnoqJjngrogXCLlg4XntKLlvJVcIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE3Cittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgIua4hemZpCBza2lwLXdvcmt0cmVlIOS9jSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIwCittc2dpZCAiZG8gbm90IHRvdWNoIGluZGV4LW9ubHkgZW50cmllcyIKK21zZ3N0ciAi5LiN6KaB5bu656uL5Y+q5pyJ57Si5byV55qE6aCF55uuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjIKK21zZ2lkICJhZGQgdG8gaW5kZXggb25seTsgZG8gbm90IGFkZCBjb250ZW50IHRvIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAi5Y+q5paw5aKe5Yiw57Si5byV5Y2A77yb5LiN5paw5aKe54mp5Lu25Yiw54mp5Lu25bqrIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjQKK21zZ2lkICJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIgorbXNnc3RyICLljbPkvb/lrZjlnKjlt6XkvZzljYDoo6HvvIzkuZ/liKrpmaTot6/lvpEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyNgorbXNnaWQgIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIKK21zZ3N0ciAi5pSc5bi2IC0tc3RkaW7vvJrovLjlhaXnmoTooYzku6UgbnVsbCDlrZflhYPntYLmraIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyOAorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIuW+nuaomea6lui8uOWFpeS4reiugOWPlumcgOimgeabtOaWsOeahOi3r+W+keWIl+ihqCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDMyCittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgIuW+nuaomea6lui8uOWFpeaWsOWinuaineebruWIsOe0ouW8leWNgCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDM2Cittc2dpZCAicmVwb3B1bGF0ZSBzdGFnZXMgIzIgYW5kICMzIGZvciB0aGUgbGlzdGVkIHBhdGhzIgorbXNnc3RyICLngrrmjIflrprmqpTmoYjph43mlrDnlJ/miJDnrKwy5ZKM56ysM+aaq+WtmOWNgCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQwCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgIuWPquabtOaWsOiIhyBIRUFEIOS4jeWQjOeahOaineebriIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ0Cittc2dpZCAiaWdub3JlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAi5b+955Wl5bel5L2c5Y2A6YG65aSx55qE5qqU5qGIIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDcKK21zZ2lkICJyZXBvcnQgYWN0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIuWcqOaomea6lui8uOWHuumhr+ekuuWLleS9nCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ5Cittc2dpZCAiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiCittc2dzdHIgIihmb3IgcG9yY2VsYWlucykg5b+Y6KiY5YSy5a2Y55qE5pyq6Kej5rG655qE6KGd56qBIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTMKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAi5Lul6YCZ56iu5qC85byP5a+r5YWl57Si5byV5Y2AIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTUKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAi5ZWf55So5oiW56aB55So57Si5byV5YiG5YmyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTcKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIuWVn+eUqC/npoHnlKjlsI3mnKrov73ouaTmqpTmoYjnmoTlv6vlj5YiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1OQorbXNnaWQgInRlc3QgaWYgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICLmuKzoqabmqpTmoYjns7vntbHmmK/lkKbmlK/mj7TmnKrov73ouaTmqpTmoYjlv6vlj5YiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2MQorbXNnaWQgImVuYWJsZSB1bnRyYWNrZWQgY2FjaGUgd2l0aG91dCB0ZXN0aW5nIHRoZSBmaWxlc3lzdGVtIgorbXNnc3RyICLnhKHpnIDmqqLmuKzmqpTmoYjns7vntbHvvIzllZ/nlKjlsI3mnKrov73ouaTmqpTmoYjnmoTlv6vlj5YiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2MworbXNnaWQgIndyaXRlIG91dCB0aGUgaW5kZXggZXZlbiBpZiBpcyBub3QgZmxhZ2dlZCBhcyBjaGFuZ2VkIgorbXNnc3RyICLljbPkvb/mspLmnInooqvmqJnoqJjngrrlt7Lmm7TmlLnvvIzkuZ/opoHlr6vlh7rntKLlvJUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIGZpbGUgc3lzdGVtIG1vbml0b3IiCittc2dzdHIgIuWVn+eUqOaIluemgeeUqOaqlOahiOezu+e1seebo+aOpyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY3Cittc2dpZCAibWFyayBmaWxlcyBhcyBmc21vbml0b3IgdmFsaWQiCittc2dzdHIgIuaomeiomOaqlOahiOeCuiBmc21vbml0b3Ig5pyJ5pWIIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNzAKK21zZ2lkICJjbGVhciBmc21vbml0b3IgdmFsaWQgYml0IgorbXNnc3RyICLmuIXpmaQgZnNtb25pdG9yIOacieaViOS9jSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTczCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZW5hYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IOiiq+ioreWumueCuiBmYWxzZeOAguWmguaenOaCqOeiuuWvpuimgeWVn+eUqOe0ouW8leWIhuWJsu+8jOiri+WIqumZpOaIluS/ruaUueWug+OAgiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTgyCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IOiiq+ioreWumueCuiB0cnVl44CC5aaC5p6c5oKo56K65a+m6KaB56aB55So57Si5byV5YiG5Ymy77yM6KuL5Yiq6Zmk5oiW5L+u5pS55a6D44CCIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTQKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBkaXNhYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIOiiq+ioreWumueCuiB0cnVl44CC5aaC5p6c5oKo56K65a+m6KaB56aB55So5pyq6L+96Lmk5qqU5qGI5b+r5Y+W77yM6KuL5Yiq6Zmk5oiW5L+uIgorIuaUueWug+OAgiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk4Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICLlv6vlj5bmnKrov73ouaTmqpTmoYjooqvnpoHnlKgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIwNgorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBlbmFibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUg6KKr6Kit5a6a54K6IGZhbHNl44CC5aaC5p6c5oKo56K65a+m6KaB5ZWf55So5pyq6L+96Lmk5qqU5qGI5b+r5Y+W77yM6KuL5Yiq6Zmk5oiWIgorIuS/ruaUueWug+OAgiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICLlv6vlj5bmnKrov73ouaTmqpTmoYjlnKggJyVzJyDllZ/nlKgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxOAorbXNnaWQgImNvcmUuZnNtb25pdG9yIGlzIHVuc2V0OyBzZXQgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGVuYWJsZSBmc21vbml0b3IiCittc2dzdHIgImNvcmUuZnNtb25pdG9yIOacquioreWumu+8m+WmguaenOaDs+imgeWVn+eUqCBmc21vbml0b3Ig6KuL6Kit5a6a6Kmy6YG46aCFIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjIKK21zZ2lkICJmc21vbml0b3IgZW5hYmxlZCIKK21zZ3N0ciAiZnNtb25pdG9yIOiiq+WVn+eUqCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjI1Cittc2dpZCAiIgorImNvcmUuZnNtb25pdG9yIGlzIHNldDsgcmVtb3ZlIGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBkaXNhYmxlIGZzbW9uaXRvciIKK21zZ3N0ciAiY29yZS5mc21vbml0b3Ig5bey6Kit5a6a77yb5aaC5p6c5oOz6KaB56aB55SoIGZzbW9uaXRvciDoq4vnp7vpmaToqbLpgbjpoIUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyOQorbXNnaWQgImZzbW9uaXRvciBkaXNhYmxlZCIKK21zZ3N0ciAiZnNtb25pdG9yIOiiq+emgeeUqCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs86YG46aCFPl0gLWQgPOW8leeUqOWQjT4gWzzoiIrlgLw+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPOmBuOmghT5dICAgIDzlvJXnlKjlkI0+IDzmlrDlgLw+IFs86IiK5YC8Pl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEyCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPOmBuOmghT5dIC0tc3RkaW4gWy16XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY0Cittc2dpZCAiZGVsZXRlIHRoZSByZWZlcmVuY2UiCittc2dzdHIgIuWIqumZpOW8leeUqCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY2Cittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgIuabtOaWsCA85byV55So5ZCNPiDmnKzouqvogIzkuI3mmK/lroPmjIflkJHnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NworbXNnaWQgInN0ZGluIGhhcyBOVUwtdGVybWluYXRlZCBhcmd1bWVudHMiCittc2dzdHIgIuaomea6lui8uOWFpeacieS7pSBOVUwg5a2X5YWD57WC5q2i55qE5Y+D5pW4IgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjgKK21zZ2lkICJyZWFkIHVwZGF0ZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi5b6e5qiZ5rqW6Ly45YWl6K6A5Y+W5pu05pawIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjcKK21zZ2lkICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6MTUKK21zZ2lkICJ1cGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoIgorbXNnc3RyICLlvp7poK3plovlp4vmm7TmlrDmqpTmoYjoqIrmga8iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoxMQorbXNnaWQgImdpdCB1cGxvYWQtcGFjayBbPG9wdGlvbnM+XSA8ZGlyPiIKK21zZ3N0ciAiZ2l0IHVwbG9hZC1wYWNrIFs86YG46aCFPl0gPOebrumMhD4iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyMyB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTcKK21zZ2lkICJxdWl0IGFmdGVyIGEgc2luZ2xlIHJlcXVlc3QvcmVzcG9uc2UgZXhjaGFuZ2UiCittc2dzdHIgIuWcqOS4gOasoeWWrueNqOeahOiri+axgi/lm57mh4nkuYvlvozpm6LplosiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyNQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCIKK21zZ3N0ciAi5Zyo5Yid5aeL55qE5byV55So5buj5ZGK5b6M56uL5Y2z6Zui6ZaLIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjcKK21zZ2lkICJkbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkiCittc2dzdHIgIuWmguaenCA855uu6YyEPiDkuI3mmK/kuIDlgIsgR2l0IOebrumMhO+8jOS4jeimgeWYl+ippiA855uu6YyEPi8uZ2l0LyIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI5Cittc2dpZCAiaW50ZXJydXB0IHRyYW5zZmVyIGFmdGVyIDxuPiBzZWNvbmRzIG9mIGluYWN0aXZpdHkiCittc2dzdHIgIuS4jea0u+WLlSA8bj4g56eS6ZCY5b6M57WC5q2i5YKz6Ly4IgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxOQorbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPOaPkOS6pD4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY4Cittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICLliJfljbDmj5DkuqTlhaflrrkiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY5IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM3Cittc2dpZCAicHJpbnQgcmF3IGdwZyBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICLliJfljbDljp/lp4sgZ3BnIOeLgOaFi+i8uOWHuiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU1Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDzljIU+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjUKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICLoqbPntLDovLjlh7oiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NworbXNnaWQgInNob3cgc3RhdGlzdGljcyBvbmx5IgorbXNnc3RyICLlj6rpoa/npLrntbHoqIgiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjE4Cittc2dpZCAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWc+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD085qC85byPPl0gPOaomeexpD4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM2Cittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICLliJfljbDmqJnnsaTlhaflrrkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNworbXNnaWQgImdpdCB3b3JrdHJlZSBhZGQgWzxvcHRpb25zPl0gPHBhdGg+IFs8Y29tbWl0LWlzaD5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgYWRkIFs86YG46aCFPl0gPOi3r+W+kT4gWzzmj5DkuqQ+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE4Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsaXN0IFs86YG46aCFPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOQorbXNnaWQgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B0aW9ucz5dIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxvY2sgWzzpgbjpoIU+XSA86Lev5b6RPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIwCittc2dpZCAiZ2l0IHdvcmt0cmVlIG1vdmUgPHdvcmt0cmVlPiA8bmV3LXBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbW92ZSA85bel5L2c5Y2APiA85paw6Lev5b6RPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIxCittc2dpZCAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgcHJ1bmUgWzzpgbjpoIU+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIyCittc2dpZCAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPG9wdGlvbnM+XSA8d29ya3RyZWU+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgcmVtb3ZlIFs86YG46aCFPl0gPOW3peS9nOWNgD4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMworbXNnaWQgImdpdCB3b3JrdHJlZSB1bmxvY2sgPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgdW5sb2NrIDzot6/lvpE+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjAgYnVpbHRpbi93b3JrdHJlZS5jOjg5MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlICclcyciCittc2dzdHIgIuWIqumZpCAnJXMnIOWkseaVlyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogbm90IGEgdmFsaWQgZGlyZWN0b3J5IgorbXNnc3RyICLliKrpmaTlt6XkvZzljYAvJXPvvJrkuI3mmK/kuIDlgIvmnInmlYjnmoTnm67pjIQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLliKrpmaQgd29ya3RyZWVzLyVz77yaZ2l0ZGlyIOaqlOahiOS4jeWtmOWcqCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkwIGJ1aWx0aW4vd29ya3RyZWUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHVuYWJsZSB0byByZWFkIGdpdGRpciBmaWxlICglcykiCittc2dzdHIgIuWIqumZpCB3b3JrdHJlZXMvJXPvvJrnhKHms5XoroDlj5YgZ2l0ZGlyIOaqlOahiCAoJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHNob3J0IHJlYWQgKGV4cGVjdGVkICU8UFJJdU1BWD4gYnl0ZXMsIHJlYWQgIgorIiU8UFJJdU1BWD4pIgorbXNnc3RyICLliKrpmaTlt6XkvZzmqLkvJXPvvJroroDlj5bpgY7nn63vvIjmnJ/mnJsgJTxQUkl1TUFYPiDkvY3lhYPntYTvvIzoroDlj5YgJTxQUkl1TUFYPu+8iSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgIuWIqumZpCB3b3JrdHJlZXMvJXPvvJrnhKHmlYjnmoQgZ2l0ZGlyIOaqlOahiCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIHBvaW50cyB0byBub24tZXhpc3RlbnQgbG9jYXRpb24iCittc2dzdHIgIuWIqumZpCB3b3JrdHJlZXMvJXPvvJpnaXRkaXIg5qqU5qGI55qE5oyH5ZCR5LiN5a2Y5ZyoIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY1Cittc2dpZCAicmVwb3J0IHBydW5lZCB3b3JraW5nIHRyZWVzIgorbXNnc3RyICLloLHlkYrmuIXpmaTnmoTlt6XkvZzljYAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNjcKK21zZ2lkICJleHBpcmUgd29ya2luZyB0cmVlcyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAi5bCH5pep5pa8IDzmmYLplpM+IOeahOW3peS9nOWNgOmBjuacnyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICInJXMnIOW3sue2k+WtmOWcqCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmUtYWRkIHdvcmt0cmVlICclcyciCittc2dzdHIgIueEoeazleWGjeasoeaWsOWinuW3peS9nOWNgCAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgbG9ja2VkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mIC1mJyB0byBvdmVycmlkZSwgb3IgJ3VubG9jaycgYW5kICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKyInJXMnIOaYr+S4gOWAi+mBuuWkseS9humOluWumueahOW3peS9nOWNgO+8jOS9v+eUqFxuIgorIidhZGQgLWYgLWYnIOimhuiTi++8jOaIliAndW5sb2NrJyDlkowgJ3BydW5lJyDmiJYgJ3JlbW92ZScg5riF6ZmkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgYWxyZWFkeSByZWdpc3RlcmVkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mJyB0byBvdmVycmlkZSwgb3IgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIiclcycg5piv5LiA5YCL6YG65aSx5L2G5bey57aT6Ki75YaK55qE5bel5L2c5Y2A77yM5L2/55SoXG4iCisiJ2FkZCAtZicg6KaG6JOL77yM5oiWICdwcnVuZScg5oiWICdyZW1vdmUnIOa4hemZpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICLkuI3og73lu7rnq4vnm67pjIQgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzMiBidWlsdGluL3dvcmt0cmVlLmM6NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAobmV3IGJyYW5jaCAnJXMnKSIKK21zZ3N0ciAi5rqW5YKZ5bel5L2c5Y2A77yI5paw5YiG5pSvICclcyfvvIkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChyZXNldHRpbmcgYnJhbmNoICclcyc7IHdhcyBhdCAlcykiCittc2dzdHIgIua6luWCmeW3peS9nOWNgO+8iOmHjeioreWIhuaUryAnJXMn77yM5LmL5YmN54K6ICVz77yJIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoY2hlY2tpbmcgb3V0ICclcycpIgorbXNnc3RyICLmupblgpnlt6XkvZzljYDvvIjnsL3lh7ogJyVzJ++8iSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGRldGFjaGVkIEhFQUQgJXMpIgorbXNnc3RyICLmupblgpnlt6XkvZzljYDvvIjliIbpm6LplovpoK3mjIfmqJkgJXPvvIkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTAKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBldmVuIGlmIGFscmVhZHkgY2hlY2tlZCBvdXQgaW4gb3RoZXIgd29ya3RyZWUiCittc2dzdHIgIuewveWHuiA85YiG5pSvPu+8jOWNs+S9v+W3sue2k+iiq+ewveWHuuWIsOWFtuWug+W3peS9nOWNgCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5MworbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgIuW7uueri+S4gOWAi+aWsOWIhuaUryIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5NQorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAi5bu656uL5oiW6YeN6Kit5LiA5YCL5YiG5pSvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk3Cittc2dpZCAicG9wdWxhdGUgdGhlIG5ldyB3b3JraW5nIHRyZWUiCittc2dzdHIgIueUn+aIkOaWsOeahOW3peS9nOWNgCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5OAorbXNnaWQgImtlZXAgdGhlIG5ldyB3b3JraW5nIHRyZWUgbG9ja2VkIgorbXNnc3RyICLpjpblrprmlrDlt6XkvZzljYAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDEKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1icmFuY2goMSkpIgorbXNnc3RyICLoqK3lrprov73ouaTmqKHlvI/vvIjlj4PoposgZ2l0LWJyYW5jaCgxKe+8iSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNAorbXNnaWQgInRyeSB0byBtYXRjaCB0aGUgbmV3IGJyYW5jaCBuYW1lIHdpdGggYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLlmJfoqabngrrmlrDliIbmlK/lkI3nrKblkIjkuIDlgIvpgaDnq6/ov73ouaTliIbmlK8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MTIKK21zZ2lkICItYiwgLUIsIGFuZCAtLWRldGFjaCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYuOAgS1CIOWSjCAtLWRldGFjaCDmmK/kupLmlqXnmoQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1NzMKK21zZ2lkICItLVtuby1ddHJhY2sgY2FuIG9ubHkgYmUgdXNlZCBpZiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCIKK21zZ3N0ciAi5Y+q6IO95Zyo5bu656uL5paw5YiG5pSv5pmC5L2/55So6YG46aCFIC0tW25vLV10cmFjayAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NzMKK21zZ2lkICJyZWFzb24gZm9yIGxvY2tpbmciCittc2dzdHIgIumOluWumuWOn+WboCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4NSBidWlsdGluL3dvcmt0cmVlLmM6NzE4IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTIKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiclcycg5LiN5piv5LiA5YCL5bel5L2c5Y2AIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njg3IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjAKK21zZ2lkICJUaGUgbWFpbiB3b3JraW5nIHRyZWUgY2Fubm90IGJlIGxvY2tlZCBvciB1bmxvY2tlZCIKK21zZ3N0ciAi5Li75bel5L2c5Y2A54Sh5rOV6KKr5Yqg6Y6W5oiW6Kej6Y6WIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQsIHJlYXNvbjogJXMiCittc2dzdHIgIiclcycg5bey6KKr6Y6W5a6a77yM5Y6f5Zug77yaJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCIKK21zZ3N0ciAiJyVzJyDlt7LooqvpjpblrpoiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgbG9ja2VkIgorbXNnc3RyICInJXMnIOacquiiq+mOluWumiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc2MworbXNnaWQgIndvcmtpbmcgdHJlZXMgY29udGFpbmluZyBzdWJtb2R1bGVzIGNhbm5vdCBiZSBtb3ZlZCBvciByZW1vdmVkIgorbXNnc3RyICLkuI3og73np7vli5XmiJbliKrpmaTljIXlkKvlrZDmqKHntYTnmoTlt6XkvZzljYAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzEKK21zZ2lkICJmb3JjZSBtb3ZlIGV2ZW4gaWYgd29ya3RyZWUgaXMgZGlydHkgb3IgbG9ja2VkIgorbXNnc3RyICLlvLfliLbnp7vli5XvvIzljbPkvb/lt6XkvZzljYDmmK/pq5LnmoTmiJblt7LpjpblrpoiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTQgYnVpbHRpbi93b3JrdHJlZS5jOjkyMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGEgbWFpbiB3b3JraW5nIHRyZWUiCittc2dzdHIgIiclcycg5piv5LiA5YCL5Li75bel5L2c5Y2AIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaWd1cmUgb3V0IGRlc3RpbmF0aW9uIG5hbWUgZnJvbSAnJXMnIgorbXNnc3RyICLnhKHms5Xlvp4gJyVzJyDnrpflh7rnm67mqJnlkI3nqLEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFyZ2V0ICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIuebruaomSAnJXMnIOW3suWtmOWcqCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXNcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorIueEoeazleenu+WLleS4gOWAi+mOluWumueahOW3peS9nOWNgO+8jOmOluWumuWOn+WboO+8miVzXG4iCisi5L2/55SoICdtb3ZlIC1mIC1mJyDopobok4vmiJblhYjop6PpjpYiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTUKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisi54Sh5rOV56e75YuV5LiA5YCL6Y6W5a6a55qE5bel5L2c5Y2A77yMXG4iCisi5L2/55SoICdtb3ZlIC1mIC1mJyDopobok4vmiJblhYjop6PpjpYiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCBtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgIumpl+itieWkseaVl++8jOeEoeazleenu+WLleW3peS9nOWNgO+8miVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBtb3ZlICclcycgdG8gJyVzJyIKK21zZ3N0ciAi56e75YuVICclcycg5YiwICclcycg5aSx5pWXIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJ2dpdCBzdGF0dXMnIG9uICclcyciCittc2dzdHIgIuWcqCAnJXMnIOS4reWft+ihjCAnZ2l0IHN0YXR1cycg5aSx5pWXIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY29udGFpbnMgbW9kaWZpZWQgb3IgdW50cmFja2VkIGZpbGVzLCB1c2UgLS1mb3JjZSB0byBkZWxldGUgaXQiCittc2dzdHIgIiclcycg5YyF5ZCr5L+u5pS55oiW5pyq6L+96Lmk55qE5qqU5qGI77yM5L2/55SoIC0tZm9yY2Ug5Yiq6ZmkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJ2dpdCBzdGF0dXMnIG9uICclcycsIGNvZGUgJWQiCittc2dzdHIgIuWcqCAnJXMnIOS4reWft+ihjCAnZ2l0IHN0YXR1cycg5aSx5pWX77yM6Zui6ZaL56K8ICVkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTAzCittc2dpZCAiZm9yY2UgcmVtb3ZhbCBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAi5by35Yi25Yiq6Zmk77yM5Y2z5L2/5bel5L2c5Y2A5piv6auS55qE5oiW5bey6Y6W5a6aIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorIueEoeazleWIqumZpOS4gOWAi+mOluWumueahOW3peS9nOWNgO+8jOmOluWumuWOn+WboO+8miVzXG4iCisi5L2/55SoICdyZW1vdmUgLWYgLWYnIOimhuiTi+aIluWFiOino+mOliIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkyOAorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisi54Sh5rOV5Yiq6Zmk5LiA5YCL6Y6W5a6a55qE5bel5L2c5Y2A77yMXG4iCisi5L2/55SoICdyZW1vdmUgLWYgLWYnIOimhuiTi+aIluWFiOino+mOliIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IHJlbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICLpqZforYnlpLHmlZfvvIznhKHms5XliKrpmaTlt6XkvZzljYDvvJolcyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MTUKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTzliY3ntrQ+L10iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI4Cittc2dpZCAiPHByZWZpeD4vIgorbXNnc3RyICI85YmN57a0Pi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI5Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICLlsIcgPOWJjee2tD4g5a2Q55uu6YyE5YWn5a655a+r5Yiw5LiA5YCL5qi554uA54mp5Lu2IgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMQorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgIuWPquWwjemZpOmMr+acieeUqCIKKworIzogZmFzdC1pbXBvcnQuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICdtYXJrJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgIumgkOacnyAnbWFyaycg5oyH5Luk77yM5b6X5YiwICVzIgorCisjOiBmYXN0LWltcG9ydC5jOjMxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgJ3RvJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgIumgkOacnyAndG8nIOaMh+S7pO+8jOW+l+WIsCAlcyIKKworIzogZmFzdC1pbXBvcnQuYzozMjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZlYXR1cmUgJyVzJyBmb3JiaWRkZW4gaW4gaW5wdXQgd2l0aG91dCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIKK21zZ3N0ciAi5rKS5pyJIC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIOaZgu+8jOemgeatouWcqOi8uOWFpeS4reS9v+eUqCAnJXMnIOWKn+iDvSIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGVybWlzc2lvbnMgb24geW91ciBzb2NrZXQgZGlyZWN0b3J5IGFyZSB0b28gbG9vc2U7IG90aGVyXG4iCisidXNlcnMgbWF5IGJlIGFibGUgdG8gcmVhZCB5b3VyIGNhY2hlZCBjcmVkZW50aWFscy4gQ29uc2lkZXIgcnVubmluZzpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCittc2dzdHIgIiIKKyLmgqjnmoQgc29ja2V0IOebrumMhOasiumZkOmBjuaWvOWvrOmshu+8jOWFtuS7luS9v+eUqOiAheWPr+iDveacg+iugOWPluaCqOW/q+WPlueahOiqjeitieioiuaBr+OAguiAg+aFruWftyIKKyLooYzvvJpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjI3MgorbXNnaWQgInByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyB0byBzdGRlcnIiCittc2dzdHIgIumZpOmMr+ioiuaBr+i8uOWHuuWIsOaomea6lumMr+iqpCIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgbm90IG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgIuaPkOS6pCAlcyDmspLmnInmqJnoqJjngrrlj6/ku6Xlj5blvpciCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNjIKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgIuWkquWkmuaPkOS6pOaomeiomOeCuuWPr+S7peWPluW+lyIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjcKK21zZ2lkICJ0ZXN0LXRvb2wgc2VydmUtdjIgWzxvcHRpb25zPl0iCittc2dzdHIgInRlc3QtdG9vbCBzZXJ2ZS12MiBbPOmBuOmghT5dIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTkKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGFkdmVydGlzaW5nIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAi5bCN6IO95Yqb5buj5ZGK5LmL5b6M56uL5Y2z6Zui6ZaLIgorCisjOiBnaXQuYzoyNworbXNnaWQgIiIKKyJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxwYXRoPl0gWy1jIDxuYW1lPj08dmFsdWU+XVxuIgorIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08cGF0aD5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLXBhdGhdXG4iCisiICAgICAgICAgICBbLXAgfCAtLXBhZ2luYXRlIHwgLVAgfCAtLW5vLXBhZ2VyXSBbLS1uby1yZXBsYWNlLW9iamVjdHNdIFstLSIKKyJiYXJlXVxuIgorIiAgICAgICAgICAgWy0tZ2l0LWRpcj08cGF0aD5dIFstLXdvcmstdHJlZT08cGF0aD5dIFstLW5hbWVzcGFjZT08bmFtZT5dXG4iCisiICAgICAgICAgICA8Y29tbWFuZD4gWzxhcmdzPl0iCittc2dzdHIgIiIKKyJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDzot6/lvpE+XSBbLWMgPOWQjeeosT49POWPluWAvD5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTzot6/lvpE+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9POi3r+W+kT5dIFstLXdvcmstdHJlZT086Lev5b6RPl0gWy0tbmFtZXNwYWNlPTzlkI3nqLE+XVxuIgorIiAgICAgICAgICAgPOaMh+S7pD4gWzzlj4Pmlbg+XSIKKworIzogZ2l0LmM6MzQKK21zZ2lkICIiCisiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJ0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCBvciBjb25jZXB0LlxuIgorIlNlZSAnZ2l0IGhlbHAgZ2l0JyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS4iCittc2dzdHIgIiIKKyLmjIfku6QgJ2dpdCBoZWxwIC1hJyDlkowgJ2dpdCBoZWxwIC1nJyDpoa/npLrlj6/nlKjnmoTlrZDmjIfku6TlkozkuIDkupvmpoLlv7XoqqrmmI7jgIJcbiIKKyLmqqLoppYgJ2dpdCBoZWxwIDzmjIfku6Q+JyDmiJYgJ2dpdCBoZWxwIDzmpoLlv7U+JyDku6Xlj5blvpfmj5DkvpvlrZDmjIfku6TmiJbmpoLlv7VcbiIKKyLoqqrmmI7jgIJcbiIKKyLmnInpl5zns7vntbHmpoLov7DvvIzmqqLoppYgJ2dpdCBoZWxwIGdpdCfjgIIiCisKKyM6IGdpdC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tZ2l0LWRpclxuIgorbXNnc3RyICLmspLmnInngrogLS1naXQtZGlyIOaPkOS+m+ebrumMhFxuIgorCisjOiBnaXQuYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbmFtZXNwYWNlIGdpdmVuIGZvciAtLW5hbWVzcGFjZVxuIgorbXNnc3RyICLmspLmnInngrogLS1uYW1lc3BhY2Ug5o+Q5L6b5ZG95ZCN56m66ZaTXG4iCisKKyM6IGdpdC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgIuaykuacieeCuiAtLXdvcmstdHJlZSDmj5Dkvpvnm67pjIRcbiIKKworIzogZ2l0LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByZWZpeCBnaXZlbiBmb3IgLS1zdXBlci1wcmVmaXhcbiIKK21zZ3N0ciAi5rKS5pyJ54K6IC0tc3VwZXItcHJlZml4IOaPkOS+m+WJjee2tFxuIgorCisjOiBnaXQuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLWMgZXhwZWN0cyBhIGNvbmZpZ3VyYXRpb24gc3RyaW5nXG4iCittc2dzdHIgIuaHieeCuiAtYyDmj5DkvpvkuIDlgIvoqK3lrprlrZfkuLJcbiIKKworIzogZ2l0LmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLUNcbiIKK21zZ3N0ciAi5rKS5pyJ54K6IC1DIOaPkOS+m+ebrumMhFxuIgorCisjOiBnaXQuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgIuacquefpemBuOmghe+8miVzXG4iCisKKyM6IGdpdC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgYWxpYXMgJyVzJzogJyVzJyIKK21zZ3N0ciAi5Zyo5pO05bGV5Yil5ZCNICclcycg5pmC77yaJyVzJyIKKworIzogZ2l0LmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbGlhcyAnJXMnIGNoYW5nZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuIgorIllvdSBjYW4gdXNlICchZ2l0JyBpbiB0aGUgYWxpYXMgdG8gZG8gdGhpcyIKK21zZ3N0ciAiIgorIuWIpeWQjSAnJXMnIOS/ruaUueeSsOWig+iuiuaVuOOAguaCqOWPr+S7peS9v+eUqOWcqOWIpeWQjeS4rVxuIgorIuS9v+eUqCAnIWdpdCciCisKKyM6IGdpdC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBhbGlhcyBmb3IgJXMiCittc2dzdHIgIiVzIOeahOepuuWIpeWQjSIKKworIzogZ2l0LmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBhbGlhczogJXMiCittc2dzdHIgIumBnui/tOeahOWIpeWQje+8miVzIgorCisjOiBnaXQuYzo0NTkKK21zZ2lkICJ3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAi5Zyo5qiZ5rqW6Ly45Ye65a+r5YWl5aSx5pWXIgorCisjOiBnaXQuYzo0NjEKK21zZ2lkICJ1bmtub3duIHdyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICLliLDmqJnmupbovLjlh7rnmoTmnKrnn6Xlr6vlhaXpjK/oqqQiCisKKyM6IGdpdC5jOjQ2MworbXNnaWQgImNsb3NlIGZhaWxlZCBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIuaomea6lui8uOWHuumXnOmWieWkseaVlyIKKworIzogZ2l0LmM6NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIGxvb3AgZGV0ZWN0ZWQ6IGV4cGFuc2lvbiBvZiAnJXMnIGRvZXMgbm90IHRlcm1pbmF0ZTolcyIKK21zZ3N0ciAi5qqi5ris5Yiw5Yil5ZCN5b6q55Kw77yaJyVzJ+eahOaTtOWxleacque1guatou+8miVzIgorCisjOiBnaXQuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSAlcyBhcyBhIGJ1aWx0aW4iCittc2dzdHIgIuS4jeiDveS9nOeCuuWFp+W7uuaMh+S7pOiZleeQhiAlcyIKKworIzogZ2l0LmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1c2FnZTogJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIueUqOazle+8miVzXG4iCisiXG4iCisKKyM6IGdpdC5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBhbnNpb24gb2YgYWxpYXMgJyVzJyBmYWlsZWQ7ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmRcbiIKK21zZ3N0ciAi5bGV6ZaL5Yil5ZCN5oyH5LukICclcycg5aSx5pWX77yMJyVzJyDkuI3mmK/kuIDlgIsgZ2l0IOaMh+S7pFxuIgorCisjOiBnaXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iCittc2dzdHIgIuWft+ihjOaMh+S7pCAnJXMnIOWkseaVl++8miVzXG4iCisKKyM6IGh0dHAuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibmVnYXRpdmUgdmFsdWUgZm9yIGh0dHAucG9zdGJ1ZmZlcjsgZGVmYXVsdGluZyB0byAlZCIKK21zZ3N0ciAiaHR0cC5wb3N0YnVmZmVyIOeCuuiyoOWAvO+8jOmgkOioreeCuiAlZCIKKworIzogaHR0cC5jOjM5OQorbXNnaWQgIkRlbGVnYXRpb24gY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMjIuMCIKK21zZ3N0ciAi5LiN5pSv5o+05aeU6KiX5o6n5Yi277yM5Zug54K6IGNVUkwgPCA3LjIyLjAiCisKKyM6IGh0dHAuYzo0MDgKK21zZ2lkICJQdWJsaWMga2V5IHBpbm5pbmcgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIuS4jeaUr+aPtOWFrOmRsOaqlOahiOmOluWumu+8jOWboOeCuiBjVVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6ODc2Cittc2dpZCAiQ1VSTFNTTE9QVF9OT19SRVZPS0Ugbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIuS4jeaUr+aPtCBDVVJMU1NMT1BUX05PX1JFVk9LRe+8jOWboOeCuiBjVVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6OTQ5Cittc2dpZCAiUHJvdG9jb2wgcmVzdHJpY3Rpb25zIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4xOS40IgorbXNnc3RyICLkuI3mlK/mj7TljZTlrprpmZDliLbvvIzlm6DngrogY1VSTCA8IDcuMTkuNCIKKworIzogaHR0cC5jOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgU1NMIGJhY2tlbmQgJyVzJy4gU3VwcG9ydGVkIFNTTCBiYWNrZW5kczoiCittc2dzdHIgIuS4jeaUr+aPtOeahCBTU0wg5b6M56uvICclcyfjgILmlK/mj7TnmoQgU1NMIOW+jOerr++8miIKKworIzogaHR0cC5jOjEwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBjVVJMIHdhcyBidWlsdCB3aXRob3V0IFNTTCBiYWNrZW5kcyIKK21zZ3N0ciAi54Sh5rOV6Kit5a6aIFNTTCDlvoznq6/ngrogJyVzJ++8mmNVUkw6IGNVUkwg5rKS5pyJ5L2/55SoIFNTTCDlvoznq6/mp4vlu7oiCisKKyM6IGh0dHAuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogYWxyZWFkeSBzZXQiCittc2dzdHIgIueEoeazleWwhyBTU0wg5b6M56uv6Kit5a6a54K6ICclcyfvvJrlt7LntpPoqK3lrpoiCisKKyM6IGh0dHAuYzoxOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gdXBkYXRlIHVybCBiYXNlIGZyb20gcmVkaXJlY3Rpb246XG4iCisiICBhc2tlZCBmb3I6ICVzXG4iCisiICAgcmVkaXJlY3Q6ICVzIgorbXNnc3RyICIiCisi5LiN6IO95pu05paw6YeN5a6a5ZCR55qEIHVybCBiYXNl77yaXG4iCisiICAgICDoq4vmsYLvvJolc1xuIgorIiAgIOmHjeWumuWQke+8miVzIgorCisjOiByZW1vdGUtY3VybC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHF1b3RpbmcgaW4gcHVzaC1vcHRpb24gdmFsdWU6ICclcyciCittc2dzdHIgIuWcqCBwdXNoLW9wdGlvbiDlj5blgLzkuK3nhKHmlYjnmoTlvJXomZ/vvJonJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlc2luZm8vcmVmcyBub3QgdmFsaWQ6IGlzIHRoaXMgYSBnaXQgcmVwb3NpdG9yeT8iCittc2dzdHIgIiVzaW5mby9yZWZzIOeEoeaViO+8mumAmeaYr+S4gOWAiyBnaXQg54mI5pys5bqr5ZeO77yfIgorCisjOiByZW1vdGUtY3VybC5jOjM2NAorbXNnaWQgImludmFsaWQgc2VydmVyIHJlc3BvbnNlOyBleHBlY3RlZCBzZXJ2aWNlLCBnb3QgZmx1c2ggcGFja2V0IgorbXNnc3RyICLnhKHmlYjnmoTmnI3li5nnq6/lm57mh4njgILpoJDmnJ/mnI3li5nvvIzlvpfliLAgZmx1c2gg5YyFIgorCisjOiByZW1vdGUtY3VybC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZ290ICclcyciCittc2dzdHIgIueEoeaViOeahOacjeWLmeerr+WbnuaHie+8jOW+l+WIsCAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgbm90IGZvdW5kIgorbXNnc3RyICLniYjmnKzluqsgJyVzJyDmnKrmib7liLAiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiJyVzJyDouqvku73pqZforYnlpLHmlZciCisKKyM6IHJlbW90ZS1jdXJsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiCittc2dzdHIgIueEoeazleWtmOWPliAnJXMn77yaJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIHRvICVzIgorbXNnc3RyICLph43lrprlkJHliLAgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6NTkzCittc2dpZCAic2hvdWxkbid0IGhhdmUgRU9GIHdoZW4gbm90IGdlbnRsZSBvbiBFT0YiCittc2dzdHIgIueVtuaykuacieioreWumua6q+WSjOiZleeQhuaqlOahiOe1kOadn+espu+8iEVPRu+8ieaZgu+8jOS4jeaHieipsuacieaqlOahiOe1kOadn+espiIKKworIzogcmVtb3RlLWN1cmwuYzo2NzMKK21zZ2lkICJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiCittc2dzdHIgIueEoeazlemChOWOnyBycGMgcG9zdCDos4fmlpkgLSDlmJfoqablop7liqAgaHR0cC5wb3N0QnVmZmVyIgorCisjOiByZW1vdGUtY3VybC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJSUEMgZmFpbGVkOyAlcyIKK21zZ3N0ciAiUlBDIOWkseaVl+OAgiVzIgorCisjOiByZW1vdGUtY3VybC5jOjc3MworbXNnaWQgImNhbm5vdCBoYW5kbGUgcHVzaGVzIHRoaXMgYmlnIgorbXNnc3RyICLkuI3og73omZXnkIbpgJnpurzlpKfnmoTmjqjpgIEiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZGVmbGF0ZSBlcnJvciAlZCIKK21zZ3N0ciAi5LiN6IO95aOT57iu6KuL5rGC77yMemxpYiDlo5PnuK7pjK/oqqQgJWQiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZW5kIGVycm9yICVkIgorbXNnc3RyICLkuI3og73lo5PnuK7oq4vmsYLvvIx6bGliIOe1kOadn+mMr+iqpCAlZCIKKworIzogcmVtb3RlLWN1cmwuYzoxMDIzCittc2dpZCAiZHVtYiBodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2FwYWJpbGl0aWVzIgorbXNnc3RyICLllZ4gaHR0cCDlgrPovLjkuI3mlK/mj7Qgc2hhbGxsb3cg6IO95YqbIgorCisjOiByZW1vdGUtY3VybC5jOjEwMzgKK21zZ2lkICJmZXRjaCBmYWlsZWQuIgorbXNnc3RyICLlj5blvpflpLHmlZfjgIIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTA4NgorbXNnaWQgImNhbm5vdCBmZXRjaCBieSBzaGExIG92ZXIgc21hcnQgaHR0cCIKK21zZ3N0ciAi54Sh5rOV6YCP6YGO5pm65oWnIEhUVFAg5Y+W5b6XIHNoYTEiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTEzMCByZW1vdGUtY3VybC5jOjExMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAnJXMnIgorbXNnc3RyICLljZTlrprpjK/oqqTvvJrmnJ/mnJsgc2hhL3JlZu+8jOWNu+W+l+WIsCAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjExNDggcmVtb3RlLWN1cmwuYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiCittc2dzdHIgImh0dHAg5YKz6Ly45Y2U5a6a5LiN5pSv5o+0ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjExODQKK21zZ2lkICJnaXQtaHR0cC1wdXNoIGZhaWxlZCIKK21zZ3N0ciAiZ2l0LWh0dHAtcHVzaCDlpLHmlZciCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM2OQorbXNnaWQgInJlbW90ZS1jdXJsOiB1c2FnZTogZ2l0IHJlbW90ZS1jdXJsIDxyZW1vdGU+IFs8dXJsPl0iCittc2dzdHIgInJlbW90ZS1jdXJs77ya55So5rOV77yaZ2l0IHJlbW90ZS1jdXJsIDzpgaDnq68+IFs8dXJsPl0iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwMQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybO+8mumMr+iqpOiugOWPluS+huiHqiBnaXQg55qE5oyH5Luk5rWBIgorCisjOiByZW1vdGUtY3VybC5jOjE0MDgKK21zZ2lkICJyZW1vdGUtY3VybDogZmV0Y2ggYXR0ZW1wdGVkIHdpdGhvdXQgYSBsb2NhbCByZXBvIgorbXNnc3RyICJyZW1vdGUtY3VybO+8muWYl+ippuaykuacieacrOapn+eJiOacrOW6q+S4i+WPluW+lyIKKworIzogcmVtb3RlLWN1cmwuYzoxNDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS1jdXJsOiB1bmtub3duIGNvbW1hbmQgJyVzJyBmcm9tIGdpdCIKK21zZ3N0ciAicmVtb3RlLWN1cmzvvJrmnKrnn6XnmoTkvoboh6ogZ2l0IOeahOaMh+S7pCAnJXMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NQorbXNnaWQgImFyZ3MiCittc2dzdHIgIuWPg+aVuCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODYKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICLnianku7bpgY7mv74iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxODMKK21zZ2lkICJleHBpcnktZGF0ZSIKK21zZ3N0ciAi5Yiw5pyf5pmC6ZaTIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTk3Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICLnqbrli5XkvZzvvIjlkJHlvoznm7jlrrnvvIkiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMDkKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgIuabtOWKoOips+e0sCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxMQorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgIuabtOWKoOWuiemdnCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxNworbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICLnlKggPG4+IOS9jeaVuOWtl+mhr+ekuiBTSEEtMSDpm5zmuYrlgLwiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICLoqK3lrprlpoLkvZXliKrpmaTmj5DkuqToqqrmmI7oo6HnmoTnqbrmoLzlkowgI+WCmeiouyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzNworbXNnaWQgInJlYWQgcGF0aHNwZWMgZnJvbSBmaWxlIgorbXNnc3RyICLlvp7mqpTmoYjoroDlj5YgPOi3r+W+keimj+agvD4iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzgKK21zZ2lkICIiCisid2l0aCAtLXBhdGhzcGVjLWZyb20tZmlsZSwgcGF0aHNwZWMgZWxlbWVudHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgIuWmguS9v+eUqCAtLXBhdGhzcGVjLWZyb20tZmlsZe+8jOWJhyA86Lev5b6R6KaP5qC8PiDlhYPku7bmnIPkvb/nlKggTlVMIOWtl+WFg+WIhumalCIKKworIzogcmVmLWZpbHRlci5oOjEwMQorbXNnaWQgImtleSIKK21zZ3N0ciAia2V5IgorCisjOiByZWYtZmlsdGVyLmg6MTAxCittc2dpZCAiZmllbGQgbmFtZSB0byBzb3J0IG9uIgorbXNnc3RyICLmjpLluo/nmoTmrITkvY3lkI0iCisKKyM6IHJlcmVyZS5oOjQ0Cittc2dpZCAidXBkYXRlIHRoZSBpbmRleCB3aXRoIHJldXNlZCBjb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlIgorbXNnc3RyICLlpoLmnpzlj6/og73vvIzph43nlKjooZ3nqoHop6Pmsbrmm7TmlrDntKLlvJUiCisKKyM6IHd0LXN0YXR1cy5oOjY3Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBhdCAiCittc2dzdHIgIumWi+mgreaMh+aomeWIhumbouaWvCAiCisKKyM6IHd0LXN0YXR1cy5oOjY4Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBmcm9tICIKK21zZ3N0ciAi6ZaL6aCt5oyH5qiZ5YiG6Zui6IeqICIKKworIzogY29tbWFuZC1saXN0Lmg6NTAKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIuaWsOWinuaqlOahiOWFp+WuueiHs+e0ouW8lSIKKworIzogY29tbWFuZC1saXN0Lmg6NTEKK21zZ2lkICJBcHBseSBhIHNlcmllcyBvZiBwYXRjaGVzIGZyb20gYSBtYWlsYm94IgorbXNnc3RyICLlpZfnlKjkv6HnrrHmoLzlvI/nmoTns7vliJfkv67oo5zmqpQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUyCittc2dpZCAiQW5ub3RhdGUgZmlsZSBsaW5lcyB3aXRoIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi5L2/55So5o+Q5Lqk6KiK5oGv5YKZ6Ki75qqU5qGI6KGMIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MworbXNnaWQgIkFwcGx5IGEgcGF0Y2ggdG8gZmlsZXMgYW5kL29yIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi5aWX55So5LiA5YCL5L+u6KOc5qqU5Yiw5qqU5qGI5ZKML+aIlue0ouW8leWNgCIKKworIzogY29tbWFuZC1saXN0Lmg6NTQKK21zZ2lkICJJbXBvcnQgYSBHTlUgQXJjaCByZXBvc2l0b3J5IGludG8gR2l0IgorbXNnc3RyICLlsIfkuIDlgIsgR05VIEFyY2gg54mI5pys5bqr5Yyv5YWl5YiwIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6NTUKK21zZ2lkICJDcmVhdGUgYW4gYXJjaGl2ZSBvZiBmaWxlcyBmcm9tIGEgbmFtZWQgdHJlZSIKK21zZ3N0ciAi5Z+65pa85ZG95ZCN6YGO55qE5qi55bu656uL5qqU5qGI5bCB5a2YIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NgorbXNnaWQgIlVzZSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgYSBidWciCittc2dzdHIgIumAj+mBjuS6jOWIhuWwi+aJvuWumuS9jeW8leWFpSBidWcg55qE5o+Q5LqkIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NworbXNnaWQgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIKK21zZ3N0ciAi6aGv56S65qqU5qGI5q+P5LiA6KGM5pyA5b6M5L+u5pS555qE54mI5pys5ZKM5L+u5pS56ICFIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OAorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICLliJflh7rjgIHlu7rnq4vmiJbliKrpmaTliIbmlK8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU5Cittc2dpZCAiTW92ZSBvYmplY3RzIGFuZCByZWZzIGJ5IGFyY2hpdmUiCittc2dzdHIgIumAj+mBjuatuOaqlOenu+WLleeJqeS7tuWSjOW8leeUqCIKKworIzogY29tbWFuZC1saXN0Lmg6NjAKK21zZ2lkICJQcm92aWRlIGNvbnRlbnQgb3IgdHlwZSBhbmQgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVwb3NpdG9yeSBvYmplY3RzIgorbXNnc3RyICLmj5DkvpvniYjmnKzluqvnianku7bnmoTlhaflrrnjgIHpoZ7lnovmiJblpKflsI8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYxCittc2dpZCAiRGlzcGxheSBnaXRhdHRyaWJ1dGVzIGluZm9ybWF0aW9uIgorbXNnc3RyICLpoa/npLogZ2l0YXR0cmlidXRlcyDoqIrmga8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYyCittc2dpZCAiRGVidWcgZ2l0aWdub3JlIC8gZXhjbHVkZSBmaWxlcyIKK21zZ3N0ciAi6Zmk6YyvIGdpdGlnbm9yZSAvIGV4Y2x1ZGUg5qqU5qGIIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MworbXNnaWQgIlNob3cgY2Fub25pY2FsIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMgb2YgY29udGFjdHMiCittc2dzdHIgIumhr+ekuuiBr+e1oeS6uueahOimj+evhOWQjeeoseWSjOmbu+WtkOS/oeS7tiIKKworIzogY29tbWFuZC1saXN0Lmg6NjQKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIuWIh+aPm+WIhuaUr+aIluW+qeWOn+W3peS9nOWNgOaqlOahiCIKKworIzogY29tbWFuZC1saXN0Lmg6NjUKK21zZ2lkICJDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuW+nue0ouW8leikh+ijveaqlOahiOWIsOW3peS9nOWNgCIKKworIzogY29tbWFuZC1saXN0Lmg6NjYKK21zZ2lkICJFbnN1cmVzIHRoYXQgYSByZWZlcmVuY2UgbmFtZSBpcyB3ZWxsIGZvcm1lZCIKK21zZ3N0ciAi56K65L+d5byV55So5ZCN56ix5qC85byP5q2j56K6IgorCisjOiBjb21tYW5kLWxpc3QuaDo2NworbXNnaWQgIkZpbmQgY29tbWl0cyB5ZXQgdG8gYmUgYXBwbGllZCB0byB1cHN0cmVhbSIKK21zZ3N0ciAi5bCL5om+5bCa5pyq5aWX55So5Yiw5LiK5ri455qE5o+Q5LqkIgorCisjOiBjb21tYW5kLWxpc3QuaDo2OAorbXNnaWQgIkFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICLmh4nnlKjkuIDkupvnj77lrZjmj5DkuqTlvJXlhaXnmoTkv67mlLkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY5Cittc2dpZCAiR3JhcGhpY2FsIGFsdGVybmF0aXZlIHRvIGdpdC1jb21taXQiCittc2dzdHIgImdpdC1jb21taXQg55qE5ZyW5b2i5pu/5Luj5LuL6Z2iIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MAorbXNnaWQgIlJlbW92ZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLlvp7lt6XkvZzljYDkuK3liKrpmaTmnKrov73ouaTmqpTmoYgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcxCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICLopIfoo73niYjmnKzluqvliLDkuIDlgIvmlrDnm67pjIQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcyCittc2dpZCAiRGlzcGxheSBkYXRhIGluIGNvbHVtbnMiCittc2dzdHIgIuS7peWIl+eahOaWueW8j+mhr+ekuuizh+aWmSIKKworIzogY29tbWFuZC1saXN0Lmg6NzMKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi6KiY6YyE6K6K5pu05Yiw54mI5pys5bqrIgorCisjOiBjb21tYW5kLWxpc3QuaDo3NAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgR2l0IGNvbW1pdC1ncmFwaCBmaWxlcyIKK21zZ3N0ciAi5a+r5YWl5ZKM6amX6K2JIEdpdCDmj5DkuqTlnJbmqpTmoYgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc1Cittc2dpZCAiQ3JlYXRlIGEgbmV3IGNvbW1pdCBvYmplY3QiCittc2dzdHIgIuW7uueri+S4gOWAi+aWsOeahOaPkOS6pOeJqeS7tiIKKworIzogY29tbWFuZC1saXN0Lmg6NzYKK21zZ2lkICJHZXQgYW5kIHNldCByZXBvc2l0b3J5IG9yIGdsb2JhbCBvcHRpb25zIgorbXNnc3RyICLlj5blvpflkozoqK3lrprniYjmnKzluqvmiJbogIXlhajln5/pgbjpoIUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc3Cittc2dpZCAiQ291bnQgdW5wYWNrZWQgbnVtYmVyIG9mIG9iamVjdHMgYW5kIHRoZWlyIGRpc2sgY29uc3VtcHRpb24iCittc2dzdHIgIuioiOeul+acquaJk+WMheeJqeS7tueahOaVuOmHj+WSjOejgeein+epuumWk+WNoOeUqCIKKworIzogY29tbWFuZC1saXN0Lmg6NzgKK21zZ2lkICJSZXRyaWV2ZSBhbmQgc3RvcmUgdXNlciBjcmVkZW50aWFscyIKK21zZ3N0ciAi5qqi57Si5ZKM5YSy5a2Y5L2/55So6ICF5a+G56K8IgorCisjOiBjb21tYW5kLWxpc3QuaDo3OQorbXNnaWQgIkhlbHBlciB0byB0ZW1wb3JhcmlseSBzdG9yZSBwYXNzd29yZHMgaW4gbWVtb3J5IgorbXNnc3RyICLlnKjoqJjmhrbpq5TkuK3mmqvmmYLlhLLlrZjlr4bnorznmoTliqnmiYsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgwCittc2dpZCAiSGVscGVyIHRvIHN0b3JlIGNyZWRlbnRpYWxzIG9uIGRpc2siCittc2dzdHIgIuWcqOejgeein+WEsuWtmOWvhueivOeahOWKqeaJiyIKKworIzogY29tbWFuZC1saXN0Lmg6ODEKK21zZ2lkICJFeHBvcnQgYSBzaW5nbGUgY29tbWl0IHRvIGEgQ1ZTIGNoZWNrb3V0IgorbXNnc3RyICLlsIfkuIDlgIvmj5DkuqTljK/lh7rliLAgQ1ZTIOewveWHuuS4rSIKKworIzogY29tbWFuZC1saXN0Lmg6ODIKK21zZ2lkICJTYWx2YWdlIHlvdXIgZGF0YSBvdXQgb2YgYW5vdGhlciBTQ00gcGVvcGxlIGxvdmUgdG8gaGF0ZSIKK21zZ3N0ciAi5b6e5Y+m5aSW5LiA5YCL5Lq65YCR5oSb5oGo55qE6Kit5a6a566h55CG57O757Wx5Lit5ouv5pWR5L2g55qE6LOH5paZIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MworbXNnaWQgIkEgQ1ZTIHNlcnZlciBlbXVsYXRvciBmb3IgR2l0IgorbXNnc3RyICJHaXQg55qE5LiA5YCLIENWUyDmnI3li5nmqKHmk6zlmagiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg0Cittc2dpZCAiQSByZWFsbHkgc2ltcGxlIHNlcnZlciBmb3IgR2l0IHJlcG9zaXRvcmllcyIKK21zZ3N0ciAi5LiA5YCL6Z2e5bi457Ch5Zau55qEIEdpdCDniYjmnKzluqvkvLrmnI3lmagiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg1Cittc2dpZCAiR2l2ZSBhbiBvYmplY3QgYSBodW1hbiByZWFkYWJsZSBuYW1lIGJhc2VkIG9uIGFuIGF2YWlsYWJsZSByZWYiCittc2dzdHIgIuWfuuaWvOS4gOWAi+ePvuWtmOeahOW8leeUqOeCuuS4gOWAi+eJqeS7tui1t+S4gOWAi+WPr+iugOeahOWQjeeosSIKKworIzogY29tbWFuZC1saXN0Lmg6ODYKK21zZ2lkICJTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjIgorbXNnc3RyICLpoa/npLrmj5DkuqTkuYvplpPjgIHmj5DkuqTlkozlt6XkvZzljYDkuYvplpPnrYnnmoTlt67nlbAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg3Cittc2dpZCAiQ29tcGFyZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IgorbXNnc3RyICLmr5TovIPlt6XkvZzljYDlkozntKLlvJXljYDkuK3nmoTmqpTmoYgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg4Cittc2dpZCAiQ29tcGFyZSBhIHRyZWUgdG8gdGhlIHdvcmtpbmcgdHJlZSBvciBpbmRleCIKK21zZ3N0ciAi5bCH5LiA5YCL5qi55ZKM5bel5L2c5Y2A5oiW57Si5byV5YGa5q+U6LyDIgorCisjOiBjb21tYW5kLWxpc3QuaDo4OQorbXNnaWQgIkNvbXBhcmVzIHRoZSBjb250ZW50IGFuZCBtb2RlIG9mIGJsb2JzIGZvdW5kIHZpYSB0d28gdHJlZSBvYmplY3RzIgorbXNnc3RyICLmr5TovIPlhanlgIvmqLnni4Dnianku7bnmoTmqpTmoYjlhaflrrnlkozmqKHlvI8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkwCittc2dpZCAiU2hvdyBjaGFuZ2VzIHVzaW5nIGNvbW1vbiBkaWZmIHRvb2xzIgorbXNnc3RyICLkvb/nlKjluLjopovnmoTlt67nlbDlt6Xlhbfpoa/npLrmm7TmlLkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkxCittc2dpZCAiR2l0IGRhdGEgZXhwb3J0ZXIiCittc2dzdHIgIkdpdCDos4fmlpnljK/lh7rlmagiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkyCittc2dpZCAiQmFja2VuZCBmb3IgZmFzdCBHaXQgZGF0YSBpbXBvcnRlcnMiCittc2dzdHIgIkdpdCDlv6vpgJ/os4fmlpnljK/lhaXlmajlvoznq68iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkzCittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5b6e5Y+m5aSW5LiA5YCL54mI5pys5bqr5LiL6LyJ54mp5Lu25ZKM5byV55SoIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICLlvp7lj6bkuIDlgIvniYjmnKzluqvlj5blvpfnvLrlsJHnmoTnianku7YiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk1Cittc2dpZCAiUmV3cml0ZSBicmFuY2hlcyIKK21zZ3N0ciAi6YeN5a+r5YiG5pSvIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NgorbXNnaWQgIlByb2R1Y2UgYSBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi55Sf5oiQ5LiA5YCL5ZCI5L215o+Q5Lqk6KiK5oGvIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NworbXNnaWQgIk91dHB1dCBpbmZvcm1hdGlvbiBvbiBlYWNoIHJlZiIKK21zZ3N0ciAi5bCN5q+P5LiA5YCL5byV55So6Ly45Ye66KiK5oGvICIKKworIzogY29tbWFuZC1saXN0Lmg6OTgKK21zZ2lkICJQcmVwYXJlIHBhdGNoZXMgZm9yIGUtbWFpbCBzdWJtaXNzaW9uIgorbXNnc3RyICLmupblgpnpm7vlrZDkv6Hku7bmj5DkuqTnmoTkv67oo5zmqpQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk5Cittc2dpZCAiVmVyaWZpZXMgdGhlIGNvbm5lY3Rpdml0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlIgorbXNnc3RyICLpqZforYnniYjmnKzluqvkuK3nianku7bnmoTpgKPpgJrmgKflkozmnInmlYjmgKciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMAorbXNnaWQgIkNsZWFudXAgdW5uZWNlc3NhcnkgZmlsZXMgYW5kIG9wdGltaXplIHRoZSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLmuIXpmaTkuI3lv4XopoHnmoTmqpTmoYjlkozmnIDkvbPljJbmnKzmqZ/niYjmnKzluqsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMQorbXNnaWQgIkV4dHJhY3QgY29tbWl0IElEIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIHVzaW5nIGdpdC1hcmNoaXZlIgorbXNnc3RyICLlvp4gZ2l0LWFyY2hpdmUg5bu656uL55qE5q245qqU5qqU5qGI5Lit5pO35Y+W5o+Q5LqkIElEIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDIKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIui8uOWHuuWSjOaooeW8j+espuWQiOeahOihjCIKKworIzogY29tbWFuZC1saXN0Lmg6MTAzCittc2dpZCAiQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdCIKK21zZ3N0ciAi5LiA5YCL5L6/5pSc55qEIEdpdCDlnJblvaLnlKjmiLbnq68iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNAorbXNnaWQgIkNvbXB1dGUgb2JqZWN0IElEIGFuZCBvcHRpb25hbGx5IGNyZWF0ZXMgYSBibG9iIGZyb20gYSBmaWxlIgorbXNnc3RyICLlvp7kuIDlgIvmqpTmoYjoqIjnrpfnianku7YgSUTvvIzkuKblj6/ku6Xlu7rnq4sgYmxvYiDos4fmlpnnianku7YiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNQorbXNnaWQgIkRpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiBhYm91dCBHaXQiCittc2dzdHIgIumhr+ekuiBHaXQg55qE6Kqq5piO6KiK5oGvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDYKK21zZ2lkICJTZXJ2ZXIgc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBHaXQgb3ZlciBIVFRQIgorbXNnc3RyICJHaXQgSFRUUCDljZTlrprnmoTmnI3li5nnq6/lr6bnj74iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNworbXNnaWQgIkRvd25sb2FkIGZyb20gYSByZW1vdGUgR2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAiCittc2dzdHIgIumAmumBjiBIVFRQIOW+numBoOerryBHaXQg54mI5pys5bqr5LiL6LyJIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDgKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBIVFRQL0RBViB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIumAmumBjiBIVFRQL0RBViDmjqjpgIHnianku7blj6bkuIDlgIvniYjmnKzluqsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOQorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgZnJvbSBzdGRpbiB0byBhbiBJTUFQIGZvbGRlciIKK21zZ3N0ciAi5b6e5qiZ5rqW6Ly45YWl5bCH5LiA57WE5L+u6KOc5qqU5YKz6YCB5YiwSU1BUOizh+aWmeWkviIKKworIzogY29tbWFuZC1saXN0Lmg6MTEwCittc2dpZCAiQnVpbGQgcGFjayBpbmRleCBmaWxlIGZvciBhbiBleGlzdGluZyBwYWNrZWQgYXJjaGl2ZSIKK21zZ3N0ciAi5b6e5LiA5YCL54++5a2Y55qE5YyF5a2Y5qqU5qqU5qGI5bu656uL5YyF57Si5byVIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTEKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAi5bu656uL5LiA5YCL56m655qEIEdpdCDniYjmnKzluqvmiJbph43mlrDliJ3lp4vljJbkuIDlgIvlt7LlrZjlnKjnmoTniYjmnKzluqsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMgorbXNnaWQgIkluc3RhbnRseSBicm93c2UgeW91ciB3b3JraW5nIHJlcG9zaXRvcnkgaW4gZ2l0d2ViIgorbXNnc3RyICLlnKggZ2l0d2ViIOS4reWNs+aZgueAj+imveaCqOeahOW3peS9nOeJiOacrOW6qyIKKworIzogY29tbWFuZC1saXN0Lmg6MTEzCittc2dpZCAiQWRkIG9yIHBhcnNlIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gaW4gY29tbWl0IG1lc3NhZ2VzIgorbXNnc3RyICLmlrDlop7miJbop6PmnpDmj5DkuqToqqrmmI7kuK3nmoTntZDmp4vljJboqIrmga8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNAorbXNnaWQgIlRoZSBHaXQgcmVwb3NpdG9yeSBicm93c2VyIgorbXNnc3RyICJHaXQg54mI5pys5bqr54CP6Ka95ZmoIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTUKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICLpoa/npLrmj5DkuqTml6XoqowiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNgorbXNnaWQgIlNob3cgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLpoa/npLrntKLlvJXlkozlt6XkvZzljYDkuK3mqpTmoYjnmoToqIrmga8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNworbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIHJlbW90ZSByZXBvc2l0b3J5IgorbXNnc3RyICLpoa/npLrkuIDlgIvpgaDnq6/niYjmnKzluqvnmoTlvJXnlKgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOAorbXNnaWQgIkxpc3QgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QiCittc2dzdHIgIumhr+ekuuS4gOWAi+aoueeLgOeJqeS7tueahOWFp+WuuSIKKworIzogY29tbWFuZC1saXN0Lmg6MTE5Cittc2dpZCAiRXh0cmFjdHMgcGF0Y2ggYW5kIGF1dGhvcnNoaXAgZnJvbSBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZSIKK21zZ3N0ciAi5b6e5Zau5YCL6Zu75a2Q5L+h5Lu25Lit5pO35Y+W5L+u6KOc5qqU5ZKM5L2c6ICF6Lqr5Lu9IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjAKK21zZ2lkICJTaW1wbGUgVU5JWCBtYm94IHNwbGl0dGVyIHByb2dyYW0iCittc2dzdHIgIuewoeWWrueahCBVTklYIG1ib3gg5L+h566x5YiH5YiG56iL5byPIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjEKK21zZ2lkICJKb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlciIKK21zZ3N0ciAi5ZCI5L215YWp5YCL5oiW5pu05aSa6ZaL55m85q235Y+yIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjIKK21zZ2lkICJGaW5kIGFzIGdvb2QgY29tbW9uIGFuY2VzdG9ycyBhcyBwb3NzaWJsZSBmb3IgYSBtZXJnZSIKK21zZ3N0ciAi54K65LqG5ZCI5L215bCL5om+5YSY5Y+v6IO95aW955qE5YWs5YWx56WW5YWI5o+Q5LqkIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjMKK21zZ2lkICJSdW4gYSB0aHJlZS13YXkgZmlsZSBtZXJnZSIKK21zZ3N0ciAi5Z+36KGM5LiA5YCL5LiJ6Lev5qqU5qGI5ZCI5L21IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjQKK21zZ2lkICJSdW4gYSBtZXJnZSBmb3IgZmlsZXMgbmVlZGluZyBtZXJnaW5nIgorbXNnc3RyICLlsI3mlrzpnIDopoHlkIjkvbXnmoTmqpTmoYjln7fooYzlkIjkvbUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNQorbXNnaWQgIlRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCBnaXQtbWVyZ2UtaW5kZXgiCittc2dzdHIgIuiIhyBnaXQtbWVyZ2UtaW5kZXgg5LiA6LW35L2/55So55qE5qiZ5rqW5Zqu5bCO56iL5byPIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjYKK21zZ2lkICJSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0ciAi5Z+36KGM5ZCI5L216KGd56qB6Kej5rG65bel5YW35Lul6Kej5rG65ZCI5L216KGd56qBIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjcKK21zZ2lkICJTaG93IHRocmVlLXdheSBtZXJnZSB3aXRob3V0IHRvdWNoaW5nIGluZGV4IgorbXNnc3RyICLpoa/npLrkuInot6/lkIjkvbXogIzkuI3li5XntKLlvJUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgbXVsdGktcGFjay1pbmRleGVzIgorbXNnc3RyICLlr6vlhaXlkozpqZforYnlpJrljIXntKLlvJUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOQorbXNnaWQgIkNyZWF0ZXMgYSB0YWcgb2JqZWN0IgorbXNnc3RyICLlu7rnq4vkuIDlgIvmqJnnsaTnianku7YiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMAorbXNnaWQgIkJ1aWxkIGEgdHJlZS1vYmplY3QgZnJvbSBscy10cmVlIGZvcm1hdHRlZCB0ZXh0IgorbXNnc3RyICLln7rmlrwgbHMtdHJlZSDnmoTmoLzlvI/ljJbmloflrZflu7rnq4vkuIDlgIvmqLnni4Dnianku7YiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMQorbXNnaWQgIk1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgYSBkaXJlY3RvcnksIG9yIGEgc3ltbGluayIKK21zZ3N0ciAi56e75YuV5oiW6YeN5paw5ZG95ZCN5LiA5YCL5qqU5qGI44CB55uu6YyE5oiW56ym6Jmf6YCj57WQIgorCisjIOWwi+aJvuaPkOS+m+eJiOacrOeahOespuiZn+WQjeeosQorIzogY29tbWFuZC1saXN0Lmg6MTMyCittc2dpZCAiRmluZCBzeW1ib2xpYyBuYW1lcyBmb3IgZ2l2ZW4gcmV2cyIKK21zZ3N0ciAi5bCL5om+5o+Q5L6b54mI5pys55qE56ym6Jmf5ZCN56ixIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzMKK21zZ2lkICJBZGQgb3IgaW5zcGVjdCBvYmplY3Qgbm90ZXMiCittc2dzdHIgIuaWsOWinuaIluaqouafpeeJqeS7tuWCmeiouyIKKworIzogY29tbWFuZC1saXN0Lmg6MTM0Cittc2dpZCAiSW1wb3J0IGZyb20gYW5kIHN1Ym1pdCB0byBQZXJmb3JjZSByZXBvc2l0b3JpZXMiCittc2dzdHIgIuWMr+WFpeWSjOaPkOS6pOWIsCBQZXJmb3JjZSDniYjmnKzluqvkuK0iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNQorbXNnaWQgIkNyZWF0ZSBhIHBhY2tlZCBhcmNoaXZlIG9mIG9iamVjdHMiCittc2dzdHIgIuW7uueri+eJqeS7tueahOWtmOaqlOWMhSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM2Cittc2dpZCAiRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcyIKK21zZ3N0ciAi5bCL5om+5YaX6aSY55qE5YyF5qqU5qGIIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzcKK21zZ2lkICJQYWNrIGhlYWRzIGFuZCB0YWdzIGZvciBlZmZpY2llbnQgcmVwb3NpdG9yeSBhY2Nlc3MiCittc2dzdHIgIuaJk+WMhemgreWSjOaomeexpOS7peWvpuePvumrmOaViOeahOeJiOacrOW6q+WtmOWPliIKKworIzogY29tbWFuZC1saXN0Lmg6MTM4Cittc2dpZCAiUm91dGluZXMgdG8gaGVscCBwYXJzaW5nIHJlbW90ZSByZXBvc2l0b3J5IGFjY2VzcyBwYXJhbWV0ZXJzIgorbXNnc3RyICLljZTliqnop6PmnpDpgaDnq6/niYjmnKzluqvlrZjlj5blj4PmlbjnmoTkvovnqIsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOQorbXNnaWQgIkNvbXB1dGUgdW5pcXVlIElEIGZvciBhIHBhdGNoIgorbXNnc3RyICLoqIjnrpfkuIDlgIvkv67oo5zmqpTnmoTllK/kuIAgSUQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MAorbXNnaWQgIlBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAi5Yiq6Zmk54mp5Lu25bqr5Lit5omA5pyJ54Sh5rOV5Y+W5b6X54mp5Lu2IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDEKK21zZ2lkICJSZW1vdmUgZXh0cmEgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGluIHBhY2sgZmlsZXMiCittc2dzdHIgIuWIqumZpOW3sue2k+WcqOWMheaqlOahiOS4reeahOWkmumkmOeJqeS7tiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQyCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgaW50ZWdyYXRlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoIgorbXNnc3RyICLlj5blvpfkuKbmlbTlkIjlj6blpJbnmoTniYjmnKzluqvmiJbkuIDlgIvmnKzmqZ/liIbmlK8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MworbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAi5pu05paw6YGg56uv5byV55So5ZKM55u46Zec55qE54mp5Lu2IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDQKK21zZ2lkICJBcHBsaWVzIGEgcXVpbHQgcGF0Y2hzZXQgb250byB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgIuWwh+S4gOWAiyBxdWlsdCDkv67oo5zmqpTpm4blpZfnlKjliLDnm67liY3liIbmlK/jgIIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NQorbXNnaWQgIkNvbXBhcmUgdHdvIGNvbW1pdCByYW5nZXMgKGUuZy4gdHdvIHZlcnNpb25zIG9mIGEgYnJhbmNoKSIKK21zZ3N0ciAi5q+U6LyD5YWp5YCL5o+Q5Lqk56+E5ZyN77yI5aaC5LiA5YCL5YiG5pSv55qE5YWp5YCL54mI5pys77yJIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDYKK21zZ2lkICJSZWFkcyB0cmVlIGluZm9ybWF0aW9uIGludG8gdGhlIGluZGV4IgorbXNnc3RyICLlsIfmqLnoqIrmga/oroDlj5bliLDntKLlvJUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NworbXNnaWQgIlJlYXBwbHkgY29tbWl0cyBvbiB0b3Agb2YgYW5vdGhlciBiYXNlIHRpcCIKK21zZ3N0ciAi5Zyo5Y+m5LiA5YCL5YiG5pSv5LiK6YeN5paw5oeJ55So5o+Q5LqkIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDgKK21zZ2lkICJSZWNlaXZlIHdoYXQgaXMgcHVzaGVkIGludG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIuaOpeaUtuaOqOmAgeWIsOeJiOacrOW6q+S4reeahOeJqeS7tiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ5Cittc2dpZCAiTWFuYWdlIHJlZmxvZyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi566h55CGIHJlZmxvZyDoqIrmga8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MAorbXNnaWQgIk1hbmFnZSBzZXQgb2YgdHJhY2tlZCByZXBvc2l0b3JpZXMiCittc2dzdHIgIueuoeeQhuW3sui/vei5pOeJiOacrOW6qyIKKworIzogY29tbWFuZC1saXN0Lmg6MTUxCittc2dpZCAiUGFjayB1bnBhY2tlZCBvYmplY3RzIGluIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5omT5YyF54mI5pys5bqr5Lit5pyq5omT5YyF54mp5Lu2IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTIKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSByZWZzIHRvIHJlcGxhY2Ugb2JqZWN0cyIKK21zZ3N0ciAi5bu656uL44CB5YiX5Ye644CB5Yiq6Zmk54mp5Lu25Y+W5Luj5byV55SoIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTMKK21zZ2lkICJHZW5lcmF0ZXMgYSBzdW1tYXJ5IG9mIHBlbmRpbmcgY2hhbmdlcyIKK21zZ3N0ciAi55Sf5oiQ5b6F5a6a5pu05pS555qE5pGY6KaBIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTQKK21zZ2lkICJSZXVzZSByZWNvcmRlZCByZXNvbHV0aW9uIG9mIGNvbmZsaWN0ZWQgbWVyZ2VzIgorbXNnc3RyICLph43nlKjooZ3nqoHlkIjkvbXnmoTop6PmsbrmlrnmoYjoqJjpjIQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NQorbXNnaWQgIlJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlIgorbXNnc3RyICLph43oqK3nm67liY0gSEVBRCDliLDmjIflrprni4DmhYsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NgorbXNnaWQgIlJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICLlvqnljp/lt6XkvZzljYDmqpTmoYgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NworbXNnaWQgIlJldmVydCBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIumChOWOn+S4gOS6m+ePvuWtmOaPkOS6pCIKKworIzogY29tbWFuZC1saXN0Lmg6MTU4Cittc2dpZCAiTGlzdHMgY29tbWl0IG9iamVjdHMgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICLmjInmmYLplpPpoIbluo/liJflh7rmj5DkuqTnianku7YiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OQorbXNnaWQgIlBpY2sgb3V0IGFuZCBtYXNzYWdlIHBhcmFtZXRlcnMiCittc2dzdHIgIumBuOWHuuS4puiZleeQhuWPg+aVuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTYwCittc2dpZCAiUmVtb3ZlIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIuW+nuW3peS9nOWNgOWSjOe0ouW8leS4reWIqumZpOaqlOahiCIKKworIzogY29tbWFuZC1saXN0Lmg6MTYxCittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBhcyBlbWFpbHMiCittc2dzdHIgIumAj+mBjumbu+WtkOS/oeS7tuWCs+mAgeS4gOe1hOS/ruijnOaqlCIKKworIzogY29tbWFuZC1saXN0Lmg6MTYyCittc2dpZCAiUHVzaCBvYmplY3RzIG92ZXIgR2l0IHByb3RvY29sIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5L2/55SoIEdpdCDljZTlrprmjqjpgIHnianku7bliLDlj6bkuIDlgIvniYjmnKzluqsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MworbXNnaWQgIlJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdpdC1vbmx5IFNTSCBhY2Nlc3MiCittc2dzdHIgIuWPquWFgeiosSBHaXQgU1NIIOWtmOWPlueahOWPl+mZkOeZu+WFpXNoZWxsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjQKK21zZ2lkICJTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dCIKK21zZ3N0ciAiJ2dpdCBsb2cnIOi8uOWHuuaRmOimgSIKKworIzogY29tbWFuZC1saXN0Lmg6MTY1Cittc2dpZCAiU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMiCittc2dzdHIgIumhr+ekuuWQhOeorumhnuWei+eahOeJqeS7tiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY2Cittc2dpZCAiU2hvdyBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cyIKK21zZ3N0ciAi6aGv56S65YiG5pSv5ZKM5o+Q5LqkIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjcKK21zZ2lkICJTaG93IHBhY2tlZCBhcmNoaXZlIGluZGV4IgorbXNnc3RyICLpoa/npLrmiZPljIXmrbjmqpTntKLlvJUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OAorbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIumhr+ekuuacrOapn+eJiOacrOW6q+S4reeahOW8leeUqCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY5Cittc2dpZCAiR2l0J3MgaTE4biBzZXR1cCBjb2RlIGZvciBzaGVsbCBzY3JpcHRzIgorbXNnc3RyICLngrogc2hlbGwg6IWz5pys5rqW5YKZ55qEIEdpdCDlnIvpmpvljJboqK3lrprnqIvlvI/norwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MAorbXNnaWQgIkNvbW1vbiBHaXQgc2hlbGwgc2NyaXB0IHNldHVwIGNvZGUiCittc2dzdHIgIuW4uOeUqOeahCBHaXQgc2hlbGwg6IWz5pys6Kit5a6a56iL5byP56K8IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzEKK21zZ2lkICJJbml0aWFsaXplIGFuZCBtb2RpZnkgdGhlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAi5Yid5aeL5YyW5Lim5L+u5pS556iA55aP57C95Ye6IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzIKK21zZ2lkICJTdGFzaCB0aGUgY2hhbmdlcyBpbiBhIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGF3YXkiCittc2dzdHIgIuWEsuiXj+mrkuW3peS9nOWNgOS4reeahOS/ruaUuSIKKworIzogY29tbWFuZC1saXN0Lmg6MTczCittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIHN0YWdpbmcgYXJlYSIKK21zZ3N0ciAi5bCH5qqU5qGI5YWn5a655paw5aKe5Yiw57Si5byVIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzQKK21zZ2lkICJTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzIgorbXNnc3RyICLpoa/npLrlt6XkvZzljYDni4DmhYsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NQorbXNnaWQgIlJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIgorbXNnc3RyICLliKrpmaTkuI3lv4XopoHnmoTnqbrnmb3lrZflhYMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NgorbXNnaWQgIkluaXRpYWxpemUsIHVwZGF0ZSBvciBpbnNwZWN0IHN1Ym1vZHVsZXMiCittc2dzdHIgIuWIneWni+WMluOAgeabtOaWsOaIluaqouafpeWtkOaooee1hCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc3Cittc2dpZCAiQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhbmQgR2l0IgorbXNnc3RyICJTdWJ2ZXJzaW9uIOeJiOacrOW6q+WSjCBHaXQg5LmL6ZaT55qE6ZuZ5ZCR5YuV5L2cIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzgKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMiCittc2dzdHIgIuWIh+aPm+WIhuaUryIKKworIzogY29tbWFuZC1saXN0Lmg6MTc5Cittc2dpZCAiUmVhZCwgbW9kaWZ5IGFuZCBkZWxldGUgc3ltYm9saWMgcmVmcyIKK21zZ3N0ciAi6K6A5Y+W44CB5L+u5pS55ZKM5Yiq6Zmk56ym6Jmf5byV55SoIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODAKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAi5bu656uL44CB5YiX5Ye644CB5Yiq6Zmk5oiW6amX6K2J5LiA5YCLIEdQRyDnsL3lkI3nmoTmqJnnsaTnianku7YiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MQorbXNnaWQgIkNyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGEgYmxvYidzIGNvbnRlbnRzIgorbXNnc3RyICLnlKggYmxvYiDos4fmlpnnianku7bnmoTlhaflrrnlu7rnq4vkuIDlgIvmmqvlrZjmqpQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MgorbXNnaWQgIlVucGFjayBvYmplY3RzIGZyb20gYSBwYWNrZWQgYXJjaGl2ZSIKK21zZ3N0ciAi5b6e5omT5YyF5qqU5qGI5Lit6Kej5aOT57iu54mp5Lu2IgorCisjOiBjb21tYW5kLWxpc3QuaDoxODMKK21zZ2lkICJSZWdpc3RlciBmaWxlIGNvbnRlbnRzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGluZGV4IgorbXNnc3RyICLlsIflt6XkvZzljYDnmoTmqpTmoYjlhaflrrnoqLvlhorliLDntKLlvJUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NAorbXNnaWQgIlVwZGF0ZSB0aGUgb2JqZWN0IG5hbWUgc3RvcmVkIGluIGEgcmVmIHNhZmVseSIKK21zZ3N0ciAi5a6J5YWo5Zyw5pu05paw5YSy5a2Y5pa85byV55So5Lit55qE54mp5Lu25ZCN56ixIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODUKK21zZ2lkICJVcGRhdGUgYXV4aWxpYXJ5IGluZm8gZmlsZSB0byBoZWxwIGR1bWIgc2VydmVycyIKK21zZ3N0ciAi5pu05paw6LyU5Yqp6KiK5oGv5qqU5qGI5Lul5Y2U5Yqp5ZWe5Y2U5a6a5pyN5YuZIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODYKK21zZ2lkICJTZW5kIGFyY2hpdmUgYmFjayB0byBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAi5bCH5a2Y5qqU5YKz6YCB5ZueIGdpdC1hcmNoaXZlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODcKK21zZ2lkICJTZW5kIG9iamVjdHMgcGFja2VkIGJhY2sgdG8gZ2l0LWZldGNoLXBhY2siCittc2dzdHIgIuWwh+eJqeS7tuWjk+e4ruWMheWCs+mAgeWbniBnaXQtZmV0Y2gtcGFjayIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiU2hvdyBhIEdpdCBsb2dpY2FsIHZhcmlhYmxlIgorbXNnc3RyICLpoa/npLogR2l0IOmCj+i8r+iuiuaVuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg5Cittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgY29tbWl0cyIKK21zZ3N0ciAi5qqi5p+lIEdQRyDmj5DkuqTnsL3lkI0iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MAorbXNnaWQgIlZhbGlkYXRlIHBhY2tlZCBHaXQgYXJjaGl2ZSBmaWxlcyIKK21zZ3N0ciAi6amX6K2J5omT5YyF55qEIEdpdCDlsIHlrZjmqpTmoYgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MQorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIHRhZ3MiCittc2dzdHIgIuaqouafpeaomeexpOeahCBHUEcg57C95ZCNIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTIKK21zZ2lkICJHaXQgd2ViIGludGVyZmFjZSAod2ViIGZyb250ZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMpIgorbXNnc3RyICJHaXQgd2ViIOS7i+mdou+8iEdpdCDniYjmnKzluqvnmoQgd2ViIOWJjeerr++8iSIKKworIzogY29tbWFuZC1saXN0Lmg6MTkzCittc2dpZCAiU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIgorbXNnc3RyICLpoa/npLrmr4/kuIDlgIvmj5DkuqTlvJXlhaXnmoTlt67nlbDml6XoqowiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NAorbXNnaWQgIk1hbmFnZSBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIgorbXNnc3RyICLnrqHnkIblpJrlgIvlt6XkvZzljYAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NQorbXNnaWQgIkNyZWF0ZSBhIHRyZWUgb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgIuW+nuebruWJjee0ouW8leW7uueri+S4gOWAi+aoueeLgOeJqeS7tiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk2Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAi5a6a576p6Lev5b6R55qE5bGs5oCnIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTcKK21zZ2lkICJHaXQgY29tbWFuZC1saW5lIGludGVyZmFjZSBhbmQgY29udmVudGlvbnMiCittc2dzdHIgIkdpdCDmjIfku6TliJfku4vpnaLlkozntITlrpoiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OAorbXNnaWQgIkEgR2l0IGNvcmUgdHV0b3JpYWwgZm9yIGRldmVsb3BlcnMiCittc2dzdHIgIumdouWQkemWi+eZvOS6uuWToeeahCBHaXQg5qC45b+D5pWZ5a24IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTkKK21zZ2lkICJHaXQgZm9yIENWUyB1c2VycyIKK21zZ3N0ciAi6YGp5ZCIIENWUyDkvb/nlKjogIXnmoQgR2l0IOWNlOWKqSIKKworIzogY29tbWFuZC1saXN0Lmg6MjAwCittc2dpZCAiVHdlYWtpbmcgZGlmZiBvdXRwdXQiCittc2dzdHIgIuiqv+aVtOW3rueVsOi8uOWHuiIKKworIzogY29tbWFuZC1saXN0Lmg6MjAxCittc2dpZCAiQSB1c2VmdWwgbWluaW11bSBzZXQgb2YgY29tbWFuZHMgZm9yIEV2ZXJ5ZGF5IEdpdCIKK21zZ3N0ciAi5q+P5LiA5aSpIEdpdCDnmoTkuIDntYTmnInnlKjnmoTmnIDlsI/mjIfku6Tpm4blkIgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMgorbXNnaWQgIkEgR2l0IEdsb3NzYXJ5IgorbXNnc3RyICJHaXQg6Kme5b2Z6KGoIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDMKK21zZ2lkICJIb29rcyB1c2VkIGJ5IEdpdCIKK21zZ3N0ciAiR2l0IOS9v+eUqOeahOaOm+mJpCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA0Cittc2dpZCAiU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZSIKK21zZ3N0ciAi5b+955Wl5oyH5a6a55qE5pyq6L+96Lmk5qqU5qGIIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDUKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAi5a6a576p5a2Q5qih57WE5bGs5oCnIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDYKK21zZ2lkICJHaXQgbmFtZXNwYWNlcyIKK21zZ3N0ciAiR2l0IOWQjeWtl+epuumWkyIKKworIzogY29tbWFuZC1saXN0Lmg6MjA3Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICJHaXQg54mI5pys5bqr6YWN572uIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDgKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgIuaMh+WumiBHaXQg55qE54mI5pys5ZKM54mI5pys56+E5ZyNIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDkKK21zZ2lkICJNb3VudGluZyBvbmUgcmVwb3NpdG9yeSBpbnNpZGUgYW5vdGhlciIKK21zZ3N0ciAi5Zyo5p+Q5YCL54mI5pys5bqr5o6b6LyJ5p+Q5YCL54mI5pys5bqrIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTAKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQ6IHBhcnQgdHdvIgorbXNnc3RyICLkuIDlgIsgR2l0IOaVmeWtuO+8muesrOS6jOmDqOWIhiIKKworIzogY29tbWFuZC1saXN0Lmg6MjExCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0IgorbXNnc3RyICLkuIDlgIsgR2l0IOaVmeWtuCIKKworIzogY29tbWFuZC1saXN0Lmg6MjEyCittc2dpZCAiQW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQgd29ya2Zsb3dzIHdpdGggR2l0IgorbXNnc3RyICJHaXQg5o6o6Jam55qE5bel5L2c5rWB5qaC6Ka9IgorCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgIuaCqOmcgOimgeWft+ihjCBcImdpdCBiaXNlY3Qgc3RhcnRcIiDkvobplovlp4siCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWPpeWwvuepuuagvAorIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjYwCittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICLmgqjmg7PorpPmiJHngrrmgqjpgJnmqKPlgZrll45bWS9uXe+8nyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICLlo57nmoTovLjlhaXniYjmnKzvvJokYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGJpc2VjdGVkX2hlYWQiCittc2dzdHIgIuWjnueahOi8uOWFpeeJiOacrO+8miRiaXNlY3RlZF9oZWFkIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAi5aOe55qE6Ly45YWl54mI5pys77yaJHJldiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIOWPquiDveW4tuS4gOWAi+WPg+aVuOOAgiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMDkKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICLmnKrmj5Dkvpvml6XoqozmqpTmoYgiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICLkuI3og73oroDlj5YgJGZpbGUg5L6G6YeN5pS+IgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMgorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiPz8g5oKo5Zyo6Kqq5LuA6bq8PyIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDEKK21zZ2lkICJiaXNlY3QgcnVuIGZhaWxlZDogbm8gY29tbWFuZCBwcm92aWRlZC4iCittc2dzdHIgIuS6jOWIhuWwi+aJvuWft+ihjOWkseaVl++8muaykuacieaPkOS+m+aMh+S7pOOAgiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgIuWft+ihjCAkY29tbWFuZCIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyJleGl0IGNvZGUgJHJlcyBmcm9tICckY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIKK21zZ3N0ciAiIgorIuS6jOWIhuWwi+aJvuWft+ihjOWkseaVl++8mlxuIgorIuaMh+S7pCAnJGNvbW1hbmQnIOeahOmboumWi+eivCAkcmVzIOWwj+aWvCAwIOaIluWkp+aWvOetieaWvCAxMjgiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjc5Cittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgIuS6jOWIhuWwi+aJvuS4jeiDvee5vOe6jOWft+ihjCIKKworIzogZ2l0LWJpc2VjdC5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICIiCisi5LqM5YiG5bCL5om+5Z+36KGM5aSx5pWX77yaXG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIOmboumWi+eivOeCuiAkcmVzIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAi5LqM5YiG5bCL5om+5Z+36KGM5oiQ5YqfIgorCisjOiBnaXQtYmlzZWN0LnNoOjMwMAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAi5oiR5YCR5rKS5pyJ5Zyo5LqM5YiG5bCL5om+44CCIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICLpjK/oqqTvvJrmgqjlsI3kuIvliJfmqpTmoYjnmoTmnKzmqZ/kv67mlLnlsIfooqvlkIjkvbXli5XkvZzopobok4siCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIuiHquWLleWQiOS9teacqueUn+aViOOAgiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjIKK21zZ2lkICJTaG91bGQgbm90IGJlIGRvaW5nIGFuIG9jdG9wdXMuIgorbXNnc3RyICLkuI3mh4noqbLln7fooYznq6DprZrlvI/lkIjkvbXjgIIiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjb21tb24gY29tbWl0IHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICLnhKHms5Xmib7liLDlkowgJHByZXR0eV9uYW1lIOeahOWfuuekjuaPkOS6pCIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAi5bey57aT5ZKMICRwcmV0dHlfbmFtZSDkv53mjIHkuIDoh7QiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgdG86ICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAi5b+r6L2J6Iez77yaJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo5NworIywgc2gtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAi5ZiX6Kmm5ZKMICRwcmV0dHlfbmFtZSDnmoTnsKHllq7lkIjkvbUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjEwMgorbXNnaWQgIlNpbXBsZSBtZXJnZSBkaWQgbm90IHdvcmssIHRyeWluZyBhdXRvbWF0aWMgbWVyZ2UuIgorbXNnc3RyICLnsKHllq7lkIjkvbXmnKrnlJ/mlYjvvIzlmJfoqaboh6rli5XlkIjkvbXjgIIiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjIxCittc2dpZCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiCittc2dzdHIgIueEoeazleWIqumZpOaaq+aZgue0ouW8le+8iOS4jeaHieeZvOeUn++8iSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyNzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJHJlZl9zdGFzaCB3aXRoICR3X2NvbW1pdCIKK21zZ3N0ciAi54Sh5rOV55SoICR3X2NvbW1pdCDmm7TmlrAgJHJlZl9zdGFzaCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHB1c2gnOiAkb3B0aW9uIgorbXNnc3RyICLpjK/oqqTvvJonc3Rhc2ggcHVzaCcg55qE5pyq55+l6YG46aCF77yaJG9wdGlvbiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAkc3Rhc2hfbXNnIgorbXNnc3RyICLlhLLlrZjlt6XkvZznm67pjITlkozntKLlvJXni4DmhYsgJHN0YXNoX21zZyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICLmnKrnn6XpgbjpoIU6ICRvcHQiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICLmjIflrprkuoblpKrlpJrnmoTniYjmnKzvvJokUkVWIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiRyZWZlcmVuY2Ug5LiN5piv5LiA5YCL5pyJ5pWI55qE5byV55SoIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyRhcmdzJyDkuI3mmK/lhLLol4/lvI/mj5DkuqQiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiJyRhcmdzJyDkuI3mmK/kuIDlgIvlhLLol4/lvJXnlKgiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjE4Cittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgIueEoeazlemHjeaWsOaVtOeQhue0ouW8lSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MjIKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIueEoeazleWcqOWQiOS9temBjueoi+Wll+eUqOWEsuiXjyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzAKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICLntKLlvJXkuK3mnInooZ3nqoHjgILlmJfoqabkuI3kvb/nlKggLS1pbmRleOOAgiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzIKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICLkuI3og73lhLLlrZjntKLlvJXmqLkiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjQxCittc2dpZCAiQ291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2ggZW50cnkiCittc2dzdHIgIueEoeazleW+nuWEsuiXj+aineebruS4reW+qeWOn+acqui/vei5pOaqlOahiCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NjYKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAi54Sh5rOV5bCH5L+u5pS555qE5qqU5qGI5Y+W5raI5pqr5a2YIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAi5o2o5qOE5LqGICR7UkVWfSAoJHMpIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ977ya54Sh5rOV5o2o5qOE5YSy6JeP5qKd55uuIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjc5MgorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAi77yI54K65b6p5Y6f6LOH5paZ6Ly45YWlIFwiZ2l0IHN0YXNoIGFwcGx5XCLvvIkiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjAzCittc2dpZCAiUmVsYXRpdmUgcGF0aCBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuWPquiDveWcqOW3peS9nOWNgOeahOmggue0muebrumMhOS4reS9v+eUqOebuOWwjei3r+W+kSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgIueJiOacrOW6qyBVUkzvvJonJHJlcG8nIOW/hemgiOaYr+e1leWwjei3r+W+keaIluS7pSAuL3wuLi8g6LW35aeLIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzMgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIickc21fcGF0aCcg5bey57aT5a2Y5Zyo5pa857Si5byV5LitIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiJyRzbV9wYXRoJyDlt7LntpPlrZjlnKjmlrzntKLlvJXkuK3kuJTkuI3mmK/kuIDlgIvlrZDmqKHntYQiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIickc21fcGF0aCcg5rKS5pyJ57C95Ye655qE5o+Q5LqkIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MworIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIuaWsOWinuS9jeaWvCAnJHNtX3BhdGgnIOeahOePvuWtmOeJiOacrOW6q+WIsOe0ouW8lSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICInJHNtX3BhdGgnIOW3suWtmOWcqOS4lOS4jeaYr+S4gOWAi+acieaViOeahCBnaXQg54mI5pys5bqrIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4MworIywgc2gtZm9ybWF0Cittc2dpZCAiQSBnaXQgZGlyZWN0b3J5IGZvciAnJHNtX25hbWUnIGlzIGZvdW5kIGxvY2FsbHkgd2l0aCByZW1vdGUocyk6IgorbXNnc3RyICLmnKzmqZ/nmbznj74gJyRzbV9uYW1lJyDnmoTkuIDlgIsgZ2l0IOebrumMhO+8jOiIh+WFtuWwjeaHieeahOmBoOerr+eJiOacrOW6q++8miIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb21cbiIKKyIgICRyZWFscmVwb1xuIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0ICIKKyJyZXBvXG4iCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorIm9wdGlvbi4iCittc2dzdHIgIiIKKyLlpoLmnpzmgqjmg7PopoHph43nlKjpgJnlgIvmnKzmqZ8gZ2l0IOebrumMhOiAjOmdnumHjeaWsOikh+ijveiHqlxuIgorIiAgJHJlYWxyZXBvXG4iCisi5L2/55SoICctLWZvcmNlJyDpgbjpoIXjgILlpoLmnpzmnKzmqZ8gZ2l0IOebrumMhOS4jeaYr+ato+eiuueahOeJiOacrOW6q1xuIgorIuaIluiAheaCqOS4jeeiuuWumumAmeijoeeahOWQq+e+qe+8jOS9v+eUqCAnLS1uYW1lJyDpgbjpoIXpgbjmk4flj6blpJbnmoTlkI3nqLHjgIIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWFjdGl2YXRpbmcgbG9jYWwgZ2l0IGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlICckc21fbmFtZScuIgorbXNnc3RyICLllZ/li5XmnKzmqZ8gZ2l0IOebrumMhOWIsOWtkOaooee1hCAnJHNtX25hbWUn44CCIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwMworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICLkuI3og73nsL3lh7rlrZDmqKHntYQgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIueEoeazleaWsOWinuWtkOaooee1hCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMxNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICLnhKHms5XoqLvlhorlrZDmqKHntYQgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIueEoeazleWcqOWtkOaooee1hOi3r+W+kSAnJGRpc3BsYXlwYXRoJyDkuK3mib7liLDnm67liY3niYjmnKwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAi54Sh5rOV5Zyo5a2Q5qih57WE6Lev5b6RICckc21fcGF0aCcg5Lit5Y+W5b6XIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICIKKyInJHNtX3BhdGgnIgorbXNnc3RyICLnhKHms5XlnKjlrZDmqKHntYTot6/lvpEgJyRzbV9wYXRoJyDkuK3mib7liLDnm67liY3niYjmnKwgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyMworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzsgdHJ5aW5nIHRvIGRpcmVjdGx5IGZldGNoICIKKyIkc2hhMToiCittc2dzdHIgIueEoeazleWcqOWtkOaooee1hOi3r+W+kSAnJGRpc3BsYXlwYXRoJyDkuK3lj5blvpfvvIzlmJfoqabnm7TmjqXlj5blvpcgJHNoYTHvvJoiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjI5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRmV0Y2hlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJywgYnV0IGl0IGRpZCBub3QgY29udGFpbiAkc2hhMS4gIgorIkRpcmVjdCBmZXRjaGluZyBvZiB0aGF0IGNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICIiCisi5Y+W5b6X5LqG5a2Q5qih57WE6Lev5b6RICckZGlzcGxheXBhdGgn77yM5L2G5piv5a6D5rKS5pyJ5YyF5ZCrICRzaGEx44CC55u05o6l5Y+W5b6X6Kmy5o+Q5Lqk5aSx5pWX44CCIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIueEoeazleWcqOWtkOaooee1hOi3r+W+kSAnJGRpc3BsYXlwYXRoJyDkuK3nsL3lh7ogJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICLlrZDmqKHntYTot6/lvpEgJyRkaXNwbGF5cGF0aCfvvJrnsL3lh7ogJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi54Sh5rOV5Zyo5a2Q5qih57WE6Lev5b6RICckZGlzcGxheXBhdGgnIOS4remHjeWumuWfuuW6lSAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICLlrZDmqKHntYTot6/lvpEgJyRkaXNwbGF5cGF0aCfvvJrph43lrprln7rlupXoh7MgJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLnhKHms5XlkIjkvbUgJyRzaGExJyDliLDlrZDmqKHntYTot6/lvpEgJyRkaXNwbGF5cGF0aCcg5LitIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0OAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICLlrZDmqKHntYTot6/lvpEgJyRkaXNwbGF5cGF0aCfvvJrlt7LlkIjkvbXlhaUgJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBvZiAnJGNvbW1hbmQgJHNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi5Zyo5a2Q5qih57WEICckZGlzcGxheXBhdGgnIOS4reWft+ihjCAnJGNvbW1hbmQgJHNoYTEnIOWkseaVlyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICLlrZDmqKHntYQgJyRkaXNwbGF5cGF0aCfvvJonJGNvbW1hbmQgJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi54Sh5rOV6YGe6L+06YCy5a2Q5qih57WE6Lev5b6RICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIumBuOmghSAtLWNhY2hlZCDkuI3og73lkozpgbjpoIUgLS1maWxlcyDlkIzmmYLkvb/nlKgiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTQ4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG1vZGUgJG1vZF9kc3QiCittc2dzdHIgIuaEj+WklueahOaooeW8jyAkbW9kX2RzdCIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiBnaXQtc3VibW9kdWxlLnNoOjk2OAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgIOitpuWRiu+8miRkaXNwbGF5X25hbWUg5pyq5YyF5ZCr5o+Q5LqkICRzaGExX3NyYyIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiBnaXQtc3VibW9kdWxlLnNoOjk3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgIOitpuWRiu+8miRkaXNwbGF5X25hbWUg5pyq5YyF5ZCr5o+Q5LqkICRzaGExX2RzdCIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiBnaXQtc3VibW9kdWxlLnNoOjk3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIgIOitpuWRiu+8miRkaXNwbGF5X25hbWUg5pyq5YyF5ZCr5o+Q5LqkICRzaGExX3NyYyDlkowgJHNoYTFfZHN0IgorCisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTZWUgZ2l0LSR7Y21kfSgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIuips+imiyBnaXQtJHtjbWR9KDEp44CCIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTA5Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guIgorbXNnc3RyICLlt7Lmh4nnlKggYXV0b3N0YXNo44CCIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgIuS4jeiDveWEsuWtmCAkc3Rhc2hfc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNpbmcgKCRuZXdfY291bnQvJHRvdGFsKSIKK21zZ3N0ciAi6YeN5a6a5Z+65bqV5Lit77yIJG5ld19jb3VudC8kdG90YWzvvIkiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMDcKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1pdD4gPSBydW4gY29tbWFuZCAodGhlIHJlc3Qgb2YgdGhlIGxpbmUpIHVzaW5nIHNoZWxsXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLlxuIgorbXNnc3RyICIiCisiXG4iCisi5oyH5LukOlxuIgorInAsIHBpY2sgPOaPkOS6pD4gPSDkvb/nlKjmj5DkuqRcbiIKKyJyLCByZXdvcmQgPOaPkOS6pD4gPSDkvb/nlKjmj5DkuqTvvIzkvYbkv67mlLnmj5DkuqToqqrmmI5cbiIKKyJlLCBlZGl0IDzmj5DkuqQ+ID0g5L2/55So5o+Q5Lqk77yM5L2G5YGc5LiL5L6G5L+u6KOcXG4iCisicywgc3F1YXNoIDzmj5DkuqQ+ID0g5L2/55So5o+Q5Lqk77yM5L2G6J6N5ZCI5Yiw5YmN5LiA5YCL5o+Q5LqkXG4iCisiZiwgZml4dXAgPOaPkOS6pD4gPSDpoZ7kvLzmlrwgXCJzcXVhc2hcIu+8jOS9huaNqOajhOaPkOS6pOiqquaYjuaXpeiqjFxuIgorIngsIGV4ZWMgPOaMh+S7pD4gPSDkvb/nlKggc2hlbGwg5Z+36KGM5oyH5Luk77yI5q2k6KGM5Ymp6aSY6YOo5YiG77yJXG4iCisiZCwgZHJvcCA85o+Q5LqkPiA9IOWIqumZpOaPkOS6pFxuIgorImwsIGxhYmVsIDzmqJnnsaQ+ID0g54K655uu5YmNIEhFQUQg5omT5LiK5qiZ57GkXG4iCisidCwgcmVzZXQgPOaomeexpD4gPSDph43oqK0gSEVBRCDliLDoqbLmqJnnsaRcbiIKKyJtLCBtZXJnZSBbLUMgPOaPkOS6pD4gfCAtYyA85o+Q5LqkPl0gPOaomeexpD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAg5bu656uL5LiA5YCL5ZCI5L215o+Q5Lqk77yM5Lim5L2/55So5Y6f5aeL55qE5ZCI5L215o+Q5Lqk6Kqq5piO77yI5aaC5p6c5rKS5pyJ5oyH5a6aXG4iCisiLiAgICAgICDljp/lp4vmj5DkuqTvvIzkvb/nlKjlgpnoqLvpg6jliIbnmoQgb25lbGluZSDkvZzngrrmj5DkuqToqqrmmI7vvInjgILkvb/nlKhcbiIKKyIuICAgICAgIC1jIDzmj5DkuqQ+IOWPr+S7pee3qOi8r+aPkOS6pOiqquaYjuOAglxuIgorIlxuIgorIuWPr+S7peWwjemAmeS6m+ihjOmHjeaWsOaOkuW6j++8jOWwh+W+nuS4iuiHs+S4i+Wft+ihjOOAglxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyLmgqjnj77lnKjlj6/ku6Xkv67oo5zpgJnlgIvmj5DkuqTvvIzkvb/nlKhcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIueVtuaCqOWwjeiuiuabtOaEn+WIsOa7v+aEj++8jOWft+ihjFxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Mjk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkc2hhMTogbm90IGEgY29tbWl0IHRoYXQgY2FuIGJlIHBpY2tlZCIKK21zZ3N0ciAiJHNoYTHvvJrkuI3mmK/kuIDlgIvlj6/ku6Xooqvmj4DpgbjnmoTmj5DkuqQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozMzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWl0IG5hbWU6ICRzaGExIgorbXNnc3RyICLnhKHmlYjnmoTmj5DkuqTlkI3vvJokc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjM2NAorbXNnaWQgIkNhbm5vdCB3cml0ZSBjdXJyZW50IGNvbW1pdCdzIHJlcGxhY2VtZW50IHNoYTEiCittc2dzdHIgIuS4jeiDveWvq+WFpeebruWJjeaPkOS6pOeahOabv+S7oyBzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIuW/q+i9ieWIsCAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAi5LiN6IO95b+r6L2J5YiwICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgbW92ZSBIRUFEIHRvICRmaXJzdF9wYXJlbnQiCittc2dzdHIgIuS4jeiDveenu+WLlSBIRUFEIOWIsCAkZmlyc3RfcGFyZW50IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBzcXVhc2ggYSBtZXJnZTogJHNoYTEiCittc2dzdHIgIuaLkue1leWjk+e4ruS4gOWAi+WQiOS9te+8miRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWRvaW5nIG1lcmdlICRzaGExIgorbXNnc3RyICLnhKHms5Xph43lgZrlkIjkvbUgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwaWNrICRzaGExIgorbXNnc3RyICLkuI3og73mj4DpgbggJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMke259OiIKK21zZ3N0ciAi6YCZ5piv5o+Q5Lqk6Kqq5piOICMke25977yaIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyR7bn0gd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAi5o+Q5Lqk6Kqq5piOICMke259IOWwh+iiq+i3s+mBju+8miIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ4MworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXQuIgorbXNnaWRfcGx1cmFsICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdHMuIgorbXNnc3RyWzBdICLpgJnmmK/kuIDlgIsgJGNvdW50IOWAi+aPkOS6pOeahOe1hOWQiOOAgiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHdyaXRlICRmaXh1cF9tc2ciCittc2dzdHIgIuS4jeiDveWvq+WFpSAkZml4dXBfbXNnIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk1Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cy4iCittc2dzdHIgIumAmeaYr+S4gOWAiyAyIOWAi+aPkOS6pOeahOe1hOWQiOOAgiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjUzNiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTc5CisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTgyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJHNoYTEuLi4gJHJlc3QiCittc2dzdHIgIuS4jeiDveaHieeUqCAkc2hhMS4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhbWVuZCBjb21taXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBpY2tpbmcgJHNoYTEuLi4gJHJlc3RcbiIKKyJUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9va1xuIgorImZhaWxlZC4gSWYgdGhlIHByZS1jb21taXQgaG9vayBmYWlsZWQsIHlvdSBtYXkgbmVlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSAiCisiYmVmb3JlXG4iCisieW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIKK21zZ3N0ciAiIgorIuS4jeiDveWcqOaIkOWKn+aPgOmBuCAkc2hhMS4uLiAkcmVzdCDkuYvlvozkv67oo5zmj5DkuqRcbiIKKyLpgJnpgJrluLjmmK/lm6DngrrnqbrnmoTmj5DkuqToqqrmmI7vvIzmiJbogIUgcHJlLWNvbW1pdCDmjpvpiaTln7fooYzlpLHmlZfjgILlpoLmnpzmmK8gcHJlLWNvbW1pdFxuIgorIuaOm+mJpOWft+ihjOWkseaVl++8jOS9oOWPr+iDvemcgOimgeWcqOmHjeWvq+aPkOS6pOiqquaYjuWJjeino+axuumAmeWAi+WVj+mhjOOAgiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCittc2dzdHIgIuWBnOatouWcqCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAnJHNxdWFzaF9zdHlsZScgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi5rKS5pyJ54i25o+Q5Lqk55qE5oOF5rOB5LiL5LiN6IO9ICckc3F1YXNoX3N0eWxlJyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY4MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nOiAkcmVzdCIKK21zZ3N0ciAi5Z+36KGM77yaJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBmYWlsZWQ6ICRyZXN0IgorbXNnc3RyICLln7fooYzlpLHmlZfvvJokcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5MworbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLkuKbkuJTkv67mlLnntKLlvJXlkowv5oiW5bel5L2c5Y2AIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTUKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisi5oKo5Y+v5Lul6Kej5rG66YCZ5YCL5ZWP6aGM77yM54S25b6M5Z+36KGMXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyMuIFRSQU5TTEFUT1JTOiBhZnRlciB0aGVzZSBsaW5lcyBpcyBhIGNvbW1hbmQgdG8gYmUgaXNzdWVkIGJ5IHRoZSB1c2VyCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRXhlY3V0aW9uIHN1Y2NlZWRlZDogJHJlc3RcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisi5Z+36KGM5oiQ5Yqf77yaJHJlc3RcbiIKKyLkvYbmmK/lnKjntKLlvJXlkowv5oiW5bel5L2c5Y2A5Lit5a2Y5Zyo6K6K5pu044CC5o+Q5Lqk5oiW5YSy6JeP5L+u5pS577yM54S25b6M5Z+36KGMXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWFuZDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCittc2dzdHIgIuacquefpeaMh+S7pO+8miRjb21tYW5kICRzaGExICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzIwCittc2dpZCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgIuimgeS/ruaUueiri+S9v+eUqOaMh+S7pCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyfjgIIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkICRoZWFkX25hbWUuIgorbXNnc3RyICLmiJDlip/ph43lrprln7rlupXkuKbmm7TmlrAgJGhlYWRfbmFtZeOAgiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxMgorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAi5LiN6IO95Yiq6ZmkIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZVxuIgorInNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLmgqjlt7LmmqvlrZjkuoblt6XkvZzljYDnmoTkv67mlLnjgILlpoLmnpzpgJnkupvkv67mlLnopoHlo5PnuK7liLDliY3kuIDlgIvmj5DkuqTvvIzln7fooYzvvJpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIuWmguaenOmAmeS6m+iuiuabtOimgeW9ouaIkOS4gOWAi+aWsOaPkOS6pO+8jOWft+ihjO+8mlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIueEoeirluWTqueoruaDheazge+8jOeVtuaCqOWujOaIkOaPkOS6pO+8jOe5vOe6jOWft+ihjO+8mlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzQKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAi5Zyo5L+u6KOc5o+Q5Lqk5Lit5bCL5om+5L2c6ICF6KiK5oGv5pmC6YGH5Yiw6Yyv6KqkIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM5Cittc2dpZCAiIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyLmgqjnmoTlt6XkvZzljYDkuK3mnInmnKrmj5DkuqTnmoTorormm7TjgILoq4vlhYjmj5DkuqTnhLblvozlho3mrKHln7fooYwgJ2dpdCByZWJhc2UgLS1jb250aW51ZSfjgIIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0OAorbXNnaWQgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLkuI3og73mj5DkuqTmmqvlrZjnmoTkv67mlLnjgIIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk2NQorbXNnaWQgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKK21zZ3N0ciAi54Sh5rOV5Z+36KGM57eo6Lyv5ZmoIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKK21zZ3N0ciAi5LiN6IO957C95Ye6ICRzd2l0Y2hfdG8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDcKK21zZ2lkICJObyBIRUFEPyIKK21zZ3N0ciAi5rKS5pyJIEhFQUTvvJ8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICRzdGF0ZV9kaXIiCittc2dzdHIgIuS4jeiDveW7uueri+aaq+aZgiAkc3RhdGVfZGlyIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTExCittc2dpZCAiQ291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIuS4jeiDveaomeiomOeCuuS6kuWLleW8jyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0MworIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmRzKSIKK21zZ3N0clswXSAi6YeN5a6a5Z+65bqVICRzaG9ydHJldmlzaW9ucyDliLAgJHNob3J0b250b++8iCR0b2RvY291bnQg5YCL5o+Q5Lqk77yJIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTU1Cittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgIuazqOaEj+epuuaPkOS6pOW3suiiq+WCmeiou+aOiSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk5NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTAwMgorbXNnaWQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorbXNnc3RyICLkuI3og73lsI3ph43lr6vmj5DkuqTpgLLooYzliJ3lp4vljJYiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDo4OSBnaXQtc2gtc2V0dXAuc2g6OTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVzYWdlOiAkZGFzaGxlc3MgJFVTQUdFIgorbXNnc3RyICLnlKjms5XvvJokZGFzaGxlc3MgJFVTQUdFIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgY2hkaXIgdG8gJGNkdXAsIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLkuI3og73liIfmj5vnm67pjITliLAgJGNkdXDvvIzlt6XkvZzljYDnmoTpoILntJrnm67pjIQiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMDAgZ2l0LXNoLXNldHVwLnNoOjIwNworIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6ICRwcm9ncmFtX25hbWUgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIuiHtOWRvemMr+iqpO+8miRwcm9ncmFtX25hbWUg5LiN6IO95Zyo5rKS5pyJ5bel5L2c5Y2A55qE5oOF5rOB5LiL5L2/55SoIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjIxCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIuS4jeiDvemHjeWumuWfuuW6le+8muaCqOacieacquaaq+WtmOeahOiuiuabtOOAgiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNAorbXNnaWQgIkNhbm5vdCByZXdyaXRlIGJyYW5jaGVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5LiN6IO96YeN5a+r5YiG5pSv77ya5oKo5pyJ5pyq5pqr5a2Y55qE6K6K5pu044CCIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI3Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLnhKHms5XpgI/pgY7ph43lrprln7rlupXmlrnlvI/mi4nlj5bvvJrmgqjmnInmnKrmmqvlrZjnmoTorormm7TjgIIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5LiN6IO9ICRhY3Rpb27vvJrmgqjmnInmnKrmmqvlrZjnmoTorormm7TjgIIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDMKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLkuI3og73ph43lrprln7rlupXvvJrmgqjnmoTntKLlvJXkuK3ljIXlkKvmnKrmj5DkuqTnmoTorormm7TjgIIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDYKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi54Sh5rOV6YCP6YGO6YeN5a6a5Z+65bqV5pa55byP5ouJ5Y+W77ya5oKo55qE57Si5byV5Lit5YyF5ZCr5pyq5o+Q5Lqk55qE6K6K5pu044CCIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5LiN6IO9ICRhY3Rpb27vvJrmgqjnmoTntKLlvJXkuK3ljIXlkKvmnKrmj5DkuqTnmoTorormm7TjgIIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTMKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIuiAjOS4lOaCqOeahOe0ouW8leS4reWMheWQq+acquaPkOS6pOeahOiuiuabtOOAgiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3MworbXNnaWQgIllvdSBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIuaCqOmcgOimgeWcqOW3peS9nOWNgOeahOmggue0muebrumMhOS4reWft+ihjOmAmeWAi+aMh+S7pOOAgiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3OAorbXNnaWQgIlVuYWJsZSB0byBkZXRlcm1pbmUgYWJzb2x1dGUgcGF0aCBvZiBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICLkuI3og73norrlrpogZ2l0IOebrumMhOeahOe1leWwjei3r+W+kSIKKworIy4gVFJBTlNMQVRPUlM6IHlvdSBjYW4gYWRqdXN0IHRoaXMgdG8gYWxpZ24gImdpdCBhZGQgLWkiIHN0YXR1cyBtZW51CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIlMTJzICUxMnMgJXMiCittc2dzdHIgIiUxMnMgJTEycyAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidG91Y2hlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInRvdWNoZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi5bu656uL5LqGICVkIOWAi+i3r+W+kVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTMKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YWdpbmcuIgorbXNnc3RyICLlpoLmnpzkv67oo5zmqpTog73kub7mt6jlnLDlpZfnlKjvvIznt6jovK/loYrlsIfnq4vljbPmqJnoqJjngrrmmqvlrZjjgIIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1NgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3Rhc2hpbmcuIgorbXNnc3RyICLlpoLmnpzkv67oo5zmqpTog73kub7mt6jlnLDlpZfnlKjvvIznt6jovK/loYrlsIfnq4vljbPmqJnoqJjngrrlhLLol4/jgIIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1OQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgdW5zdGFnaW5nLiIKK21zZ3N0ciAi5aaC5p6c5L+u6KOc5qqU6IO95Lm+5reo5Zyw5aWX55So77yM57eo6Lyv5aGK5bCH56uL5Y2z5qiZ6KiY54K65pyq5pqr5a2Y44CCIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDcxCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzcKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGFwcGx5aW5nLiIKK21zZ3N0ciAi5aaC5p6c5L+u6KOc5qqU6IO95Lm+5reo5Zyw5aWX55So77yM57eo6Lyv5aGK5bCH56uL5Y2z5qiZ6KiY54K65oeJ55So44CCIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzQKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGRpc2NhcmRpbmcuIgorbXNnc3RyICLlpoLmnpzkv67oo5zmqpTog73kub7mt6jlnLDlpZfnlKjvvIznt6jovK/loYrlsIfnq4vljbPmqJnoqJjngrrmjajmo4TjgIIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgIueCuuWvq+WFpemWi+WVn+WNgOWhiue3qOi8r+aqlOahiOWkseaVl++8miVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlcyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKyItLS1cbiIKKyLopoHliKrpmaQgJyVzJyDplovlp4vnmoTooYzvvIzkvb/lhbbmiJDngrogJyAnIOmWi+Wni+eahOihjO+8iOS4iuS4i+aWh++8ieOAglxuIgorIuimgeWIqumZpCAnJXMnIOmWi+Wni+eahOihjO+8jOWIqumZpOWug+WAkeOAglxuIgorIuS7pSAlcyDplovlp4vnmoTooYzlsIfooqvliKrpmaTjgIJcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTQwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciByZWFkaW5nOiAlcyIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+W5Y2A5aGK57eo6Lyv5qqU5qGI77yaJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI0OAorbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDmmqvlrZjmraTljYDloYpcbiIKKyJuIC0g5LiN6KaB5pqr5a2Y5q2k5Y2A5aGKXG4iCisicSAtIOmboumWi+OAguS4jeaaq+WtmOatpOWNgOWhiuWPiuW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorImEgLSDmmqvlrZjmraTljYDloYrlkozmnKzmqpTmoYjkuK3lvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJkIC0g5LiN5pqr5a2Y5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNTQKK21zZ2lkICIiCisieSAtIHN0YXNoIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFzaCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g5YSy6JeP5q2k5Y2A5aGKXG4iCisibiAtIOS4jeimgeWEsuiXj+atpOWNgOWhilxuIgorInEgLSDpm6LplovjgILkuI3lhLLol4/mraTljYDloYrlj4rlvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJhIC0g5YSy6JeP5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiZCAtIOS4jeWEsuiXj+atpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhiiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjYwCittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDkuI3mmqvlrZjmraTljYDloYpcbiIKKyJuIC0g5LiN6KaB5LiN5pqr5a2Y5q2k5Y2A5aGKXG4iCisicSAtIOmboumWi+OAguS4jeimgeS4jeaaq+WtmOatpOWNgOWhiuWPiuW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorImEgLSDkuI3mmqvlrZjmraTljYDloYrlkozmnKzmqpTmoYjkuK3lvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJkIC0g5LiN6KaB5LiN5pqr5a2Y5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNjYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g5Zyo57Si5byV5Lit5aWX55So5q2k5Y2A5aGKXG4iCisibiAtIOS4jeimgeWcqOe0ouW8leS4reWll+eUqOatpOWNgOWhilxuIgorInEgLSDpm6LplovjgILkuI3opoHlpZfnlKjmraTljYDloYrlj4rlvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJhIC0g5aWX55So5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiZCAtIOS4jeimgeWll+eUqOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhiiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5MAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIOWcqOW3peS9nOWNgOS4reaNqOajhOatpOWNgOWhilxuIgorIm4gLSDkuI3opoHlnKjlt6XkvZzljYDkuK3mjajmo4TmraTljYDloYpcbiIKKyJxIC0g6Zui6ZaL44CC5LiN6KaB5o2o5qOE5q2k5Y2A5aGK5Y+K5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiYSAtIOaNqOajhOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorImQgLSDkuI3opoHmjajmo4TmraTljYDloYrlkozmnKzmqpTmoYjkuK3lvozpnaLnmoTlhajpg6jljYDloYoiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3OAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g5Zyo57Si5byV5ZKM5bel5L2c5Y2A5Lit5o2o5qOE5q2k5Y2A5aGKXG4iCisibiAtIOS4jeimgeWcqOe0ouW8leWSjOW3peS9nOWNgOS4reaNqOajhOatpOWNgOWhilxuIgorInEgLSDpm6LplovjgILkuI3opoHmjajmo4TmraTljYDloYrlj4rlvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJhIC0g5o2o5qOE5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiZCAtIOS4jeimgeaNqOajhOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhiiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjg0Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g5Zyo57Si5byV5ZKM5bel5L2c5Y2A5Lit5aWX55So5q2k5Y2A5aGKXG4iCisibiAtIOS4jeimgeWcqOe0ouW8leWSjOW3peS9nOWNgOS4reWll+eUqOatpOWNgOWhilxuIgorInEgLSDpm6LplovjgILkuI3opoHlpZfnlKjmraTljYDloYrlj4rlvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJhIC0g5aWX55So5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiZCAtIOS4jeimgeWll+eUqOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhiiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjk2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIOWcqOW3peS9nOWNgOS4reWll+eUqOatpOWNgOWhilxuIgorIm4gLSDkuI3opoHlnKjlt6XkvZzljYDkuK3lpZfnlKjmraTljYDloYpcbiIKKyJxIC0g6Zui6ZaL44CC5LiN6KaB5aWX55So5q2k5Y2A5aGK5Y+K5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiYSAtIOWll+eUqOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorImQgLSDkuI3opoHlpZfnlKjmraTljYDloYrlkozmnKzmqpTmoYjkuK3lvozpnaLnmoTlhajpg6jljYDloYoiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMxMQorbXNnaWQgIiIKKyJnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0b1xuIgorIi8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXhcbiIKKyJqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmtcbiIKKyJKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVua1xuIgorImsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmtcbiIKKyJLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmtcbiIKKyJzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3NcbiIKKyJlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rXG4iCisiPyAtIHByaW50IGhlbHBcbiIKK21zZ3N0ciAiIgorImcgLSDpgbjmk4fot7PovYnliLDkuIDlgIvljYDloYpcbiIKKyIvIC0g5bCL5om+5ZKM5o+Q5L6b5q2j6KaP6KGo56S65byP56ym5ZCI55qE5Y2A5aGKXG4iCisiaiAtIOe2reaMgeatpOWNgOWhiuacquaxuueLgOaFi++8jOaqouimluS4i+S4gOWAi+acquaxuuWumuWNgOWhilxuIgorIkogLSDntq3mjIHmraTljYDloYrmnKrmsbrni4DmhYvvvIzmqqLoppbkuIvkuIDlgIvljYDloYpcbiIKKyJrIC0g57at5oyB5q2k5Y2A5aGK5pyq5rG654uA5oWL77yM5qqi6KaW5LiK5LiA5YCL5pyq5rG65a6a5Y2A5aGKXG4iCisiSyAtIOe2reaMgeatpOWNgOWhiuacquaxuueLgOaFi++8jOaqouimluS4iuS4gOWAi+WNgOWhilxuIgorInMgLSDliIblibLnm67liY3ljYDloYrngrrmm7TlsI/nmoTljYDloYpcbiIKKyJlIC0g5omL5YuV57eo6Lyv55uu5YmN5Y2A5aGKXG4iCisiPyAtIOmhr+ekuuiqquaYjlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDIKK21zZ2lkICJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCFcbiIKK21zZ3N0ciAi6YG45Lit55qE5Y2A5aGK5LiN6IO95aWX55So5Yiw57Si5byV77yBXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXNcbiIKK21zZ3N0ciAi5b+955Wl5pyq5aWX55So55qE77yaJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlsIfmqKHlvI/orormm7TlpZfnlKjliLDlt6XkvZzljYAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5bCH5Yiq6Zmk5YuV5L2c5aWX55So5Yiw5bel5L2c5Y2AIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlsIfmraTljYDloYrlpZfnlKjliLDlt6XkvZzljYAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3MAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG9cbiIKK21zZ3N0ciAi5rKS5pyJ5YW25a6D5Y+v5L6b6Lez6L2J55qE5Y2A5aGKXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU4OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJ1xuIgorbXNnc3RyICLnhKHmlYjmlbjlrZfvvJonJXMnXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU5MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS5cbiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLlxuIgorbXNnc3RyWzBdICLlsI3kuI3otbfvvIzlj6rmnIkgJWQg5YCL5Y+v55So5Y2A5aGK44CCXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYxOQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaFxuIgorbXNnc3RyICLmspLmnInlhbblroPlj6/kvpvlsIvmib7nmoTljYDloYpcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjM2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlc1xuIgorbXNnc3RyICLpjK/oqqTnmoTmraPopo/ooajnpLrlvI8gJXPvvJolc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NDYKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm5cbiIKK21zZ3N0ciAi5rKS5pyJ5ZKM5o+Q5L6b5qih5byP55u456ym5ZCI55qE5Y2A5aGKXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY1OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODAKK21zZ2lkICJObyBwcmV2aW91cyBodW5rXG4iCittc2dzdHIgIuaykuacieWJjeS4gOWAi+WNgOWhilxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjg2Cittc2dpZCAiTm8gbmV4dCBodW5rXG4iCittc2dzdHIgIuaykuacieS4i+S4gOWAi+WNgOWhilxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2OTIKK21zZ2lkICJTb3JyeSwgY2Fubm90IHNwbGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICLlsI3kuI3otbfvvIzkuI3og73liIblibLpgJnlgIvljYDloYpcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjk4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVuay5cbiIKK21zZ2lkX3BsdXJhbCAiU3BsaXQgaW50byAlZCBodW5rcy5cbiIKK21zZ3N0clswXSAi5YiG5Ymy54K6ICVkIOWhiuOAglxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3MDgKK21zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIuWwjeS4jei1t++8jOS4jeiDvee3qOi8r+mAmeWAi+WNgOWhilxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGRvIG5vdCB0cmFuc2xhdGUgdGhlIGNvbW1hbmQgbmFtZXMKKyMuICdzdGF0dXMnLCAndXBkYXRlJywgJ3JldmVydCcsIGV0Yy4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc3MworbXNnaWQgIiIKKyJzdGF0dXMgICAgICAgIC0gc2hvdyBwYXRocyB3aXRoIGNoYW5nZXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzXG4iCisicmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uXG4iCisicGF0Y2ggICAgICAgICAtIHBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseVxuIgorImRpZmYgICAgICAgICAgLSB2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleFxuIgorImFkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mICIKKyJjaGFuZ2VzXG4iCittc2dzdHIgIiIKKyJzdGF0dXMgICAgICAgIC0g6aGv56S65ZCr6K6K5pu055qE6Lev5b6RXG4iCisidXBkYXRlICAgICAgICAtIOaWsOWinuW3peS9nOWNgOeLgOaFi+iHs+aaq+WtmOWIl+ihqFxuIgorInJldmVydCAgICAgICAgLSDpgoTljp/kv67mlLnnmoTmmqvlrZjpm4boh7MgSEVBRCDniYjmnKxcbiIKKyJwYXRjaCAgICAgICAgIC0g5oyR6YG45Y2A5aGK5Lim5LiU5pyJ6YG45pOH5Zyw5pu05pawXG4iCisiZGlmZiAgICAgICAgICAtIOmhr+ekuiBIRUFEIOWSjOe0ouW8lemWk+W3rueVsFxuIgorImFkZCB1bnRyYWNrZWQgLSDmlrDlop7mnKrov73ouaTmqpTmoYjnmoTlhaflrrnoh7PmmqvlrZjliJfooahcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzkwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5NQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgwNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgxNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNQorbXNnaWQgIm1pc3NpbmcgLS0iCittc2dzdHIgIue8uuWwkSAtLSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODIxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVua25vd24gLS1wYXRjaCBtb2RlOiAlcyIKK21zZ3N0ciAi5pyq55+l55qEIC0tcGF0Y2gg5qih5byP77yaJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcywgZXhwZWN0aW5nIC0tIgorbXNnc3RyICLnhKHmlYjnmoTlj4PmlbggJXPvvIzmnJ/mnJvmmK8gLS0iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM4Cittc2dpZCAibG9jYWwgem9uZSBkaWZmZXJzIGZyb20gR01UIGJ5IGEgbm9uLW1pbnV0ZSBpbnRlcnZhbFxuIgorbXNnc3RyICLmnKzmqZ/mmYLplpPlkowgR01UIOacieS4jeWIsOS4gOWIhumQmOmWk+malFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MQorbXNnaWQgImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIgorbXNnc3RyICLmnKzmqZ/mmYLplpPkvY3np7vph4/lpKfmlrznrYnmlrwgMjQg5bCP5pmCXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjIzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MjI5Cittc2dpZCAidGhlIGVkaXRvciBleGl0ZWQgdW5jbGVhbmx5LCBhYm9ydGluZyBldmVyeXRoaW5nIgorbXNnc3RyICLnt6jovK/lmajpnZ7mraPluLjpm6LplovvvIzntYLmraLmiYDmnInli5XkvZwiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzEwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvbnRhaW5zIGFuIGludGVybWVkaWF0ZSB2ZXJzaW9uIG9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iCittc2dzdHIgIiclcycg5YyF5ZCr5oKo5q2j5Zyo57eo5a+r55qE5LiA5YCL5Lit6ZaT54mI5pys55qE5L+h5Lu244CCXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzE1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiclcy5maW5hbCcgY29udGFpbnMgdGhlIGNvbXBvc2VkIGVtYWlsLlxuIgorbXNnc3RyICInJXMuZmluYWwnIOWMheWQq+e3qOi8r+eahOS/oeS7tuOAglxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQwOAorbXNnaWQgIi0tZHVtcC1hbGlhc2VzIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIG9wdGlvbnNcbiIKK21zZ3N0ciAiLS1kdW1wLWFsaWFzZXMg5ZKM5YW25a6D6YG46aCF5LiN55u45a65XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDgxIGdpdC1zZW5kLWVtYWlsLnBlcmw6NjgzCittc2dpZCAiQ2Fubm90IHJ1biBnaXQgZm9ybWF0LXBhdGNoIGZyb20gb3V0c2lkZSBhIHJlcG9zaXRvcnlcbiIKK21zZ3N0ciAi5LiN6IO95Zyo54mI5pys5bqr5LmL5aSW5Z+36KGMIGdpdCBmb3JtYXQtcGF0Y2hcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0ODQKK21zZ2lkICIiCisiYGJhdGNoLXNpemVgIGFuZCBgcmVsb2dpbmAgbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgKHZpYSBjb21tYW5kLWxpbmUgb3IgIgorImNvbmZpZ3VyYXRpb24gb3B0aW9uKVxuIgorbXNnc3RyICJgYmF0Y2gtc2l6ZWAg5ZKMIGByZWxvZ2luYCDlv4XpoIjlkIzmmYLlrprnvqnvvIjpgI/pgY7mjIfku6TliJfmiJbogIXoqK3lrprpgbjpoIXvvIlcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0OTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLXN1cHByZXNzLWNjIGZpZWxkOiAnJXMnXG4iCittc2dzdHIgIuacquefpeeahCAtLXN1cHByZXNzLWNjIOashOS9je+8miclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLWNvbmZpcm0gc2V0dGluZzogJyVzJ1xuIgorbXNnc3RyICLmnKrnn6XnmoQgLS1jb25maXJtIOioreWumu+8miclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgYWxpYXMgd2l0aCBxdW90ZXMgaXMgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAi6K2m5ZGK77ya5LiN5pSv5o+05bi25byV6Jmf55qEIHNlbmRtYWlsIOWIpeWQje+8miVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGA6aW5jbHVkZTpgIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIuitpuWRiu+8muS4jeaUr+aPtCBgOmluY2x1ZGU6YO+8miVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTYwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGAvZmlsZWAgb3IgYHxwaXBlYCByZWRpcmVjdGlvbiBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICLorablkYrvvJrkuI3mlK/mj7QgYC9maWxlYCDmiJYgYHxwaXBlYCDph43lrprlkJHvvJolc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBsaW5lIGlzIG5vdCByZWNvZ25pemVkOiAlc1xuIgorbXNnc3RyICLorablkYrvvJrkuI3og73orZjliKXnmoQgc2VuZG1haWwg6KGM77yaJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NDkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgJyVzJyBleGlzdHMgYnV0IGl0IGNvdWxkIGFsc28gYmUgdGhlIHJhbmdlIG9mIGNvbW1pdHNcbiIKKyJ0byBwcm9kdWNlIHBhdGNoZXMgZm9yLiAgUGxlYXNlIGRpc2FtYmlndWF0ZSBieS4uLlxuIgorIlxuIgorIiAgICAqIFNheWluZyBcIi4vJXNcIiBpZiB5b3UgbWVhbiBhIGZpbGU7IG9yXG4iCisiICAgICogR2l2aW5nIC0tZm9ybWF0LXBhdGNoIG9wdGlvbiBpZiB5b3UgbWVhbiBhIHJhbmdlLlxuIgorbXNnc3RyICIiCisi5a2Y5Zyo5qqU5qGIICclcycg5L2G5piv5a6D5Lmf5Y+v6IO95piv5LiA5YCL55So5pa855Si55Sf5L+u6KOc5qqU5YiX6KGo55qE5o+Q5Lqk56+E5ZyN44CC6KuL55So5aaC5LiL5pa55rOV5raIIgorIumZpOatp+e+qe+8mlxuIgorIlxuIgorIiAgICAqIOWmguaenOWQq+e+qeeCuuS4gOWAi+aqlOahiO+8jOS9v+eUqCBcIi4vJXNcIu+8jOaIluiAhVxuIgorIiAgICAqIOWmguaenOWQq+e+qeeCuuS4gOWAi+evhOWcje+8jOS9v+eUqCAtLWZvcm1hdC1wYXRjaCDpgbjpoIXjgIJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW5kaXIgJXM6ICVzIgorbXNnc3RyICLnhKHms5XplovllZ/nm67pjIQgJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY5NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiZmF0YWw6ICVzOiAlc1xuIgorIndhcm5pbmc6IG5vIHBhdGNoZXMgd2VyZSBzZW50XG4iCittc2dzdHIgIiIKKyLoh7Tlkb3pjK/oqqTvvJolc++8miVzXG4iCisi6K2m5ZGK77ya5L+u6KOc5qqU5pyq6IO95YKz6YCBXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzA1Cittc2dpZCAiIgorIlxuIgorIk5vIHBhdGNoIGZpbGVzIHNwZWNpZmllZCFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIuacquaMh+WumuS/ruijnOaqlOahiO+8gVxuIgorIlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJObyBzdWJqZWN0IGxpbmUgaW4gJXM/IgorbXNnc3RyICLlnKggJXMg5Lit5rKS5pyJ5qiZ6aGM6KGM77yfIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAlczogJXMiCittc2dzdHIgIueCuuWvq+WFpemWi+WVnyAlcyDlpLHmlZc6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjczOQorbXNnaWQgIiIKKyJMaW5lcyBiZWdpbm5pbmcgaW4gXCJHSVQ6XCIgd2lsbCBiZSByZW1vdmVkLlxuIgorIkNvbnNpZGVyIGluY2x1ZGluZyBhbiBvdmVyYWxsIGRpZmZzdGF0IG9yIHRhYmxlIG9mIGNvbnRlbnRzXG4iCisiZm9yIHRoZSBwYXRjaCB5b3UgYXJlIHdyaXRpbmcuXG4iCisiXG4iCisiQ2xlYXIgdGhlIGJvZHkgY29udGVudCBpZiB5b3UgZG9uJ3Qgd2lzaCB0byBzZW5kIGEgc3VtbWFyeS5cbiIKK21zZ3N0ciAiIgorIuS7pSBcIkdJVDpcIiDplovpoK3nmoTooYzlsIfooqvliKrpmaTjgIJcbiIKKyLogIPmha7ljIXlkKvkuIDlgIvmlbTpq5TnmoTlt67nlbDntbHoqIjmiJbogIXmgqjmraPlnKjlr6vnmoTkv67oo5zmqpTnmoTnm67pjITjgIJcbiIKKyJcbiIKKyLlpoLmnpzmgqjkuI3mg7PlgrPpgIHmkZjopoHvvIzmuIXpmaTlhaflrrnjgIJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXM6ICVzIgorbXNnc3RyICLnhKHms5XplovllZ8gJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc4MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlcy5maW5hbDogJXMiCittc2dzdHIgIueEoeazlemWi+WVnyAlcy5maW5hbDogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODIzCittc2dpZCAiU3VtbWFyeSBlbWFpbCBpcyBlbXB0eSwgc2tpcHBpbmcgaXRcbiIKK21zZ3N0ciAi5pGY6KaB5L+h5Lu254K656m677yM6Lez6YGOXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCBbeS9OXSBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1c2UgPCVzPiBbeS9OXT8gIgorbXNnc3RyICLmgqjnorroqo3opoHkvb/nlKggPCVzPiBbeS9OXe+8nyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTMKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgOGJpdCwgYnV0IGRvIG5vdCBkZWNsYXJlIGEgQ29udGVudC1UcmFuc2Zlci0iCisiRW5jb2RpbmcuXG4iCittc2dzdHIgIuWmguS4i+aqlOahiOWQqyA4Yml0IOWFp+Wuue+8jOS9huaykuacieiBsuaYjuS4gOWAiyBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n44CCXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTE4Cittc2dpZCAiV2hpY2ggOGJpdCBlbmNvZGluZyBzaG91bGQgSSBkZWNsYXJlIFtVVEYtOF0/ICIKK21zZ3N0ciAi6KaB6IGy5piOIDhiaXQg54K65LuA6bq85qij55qE57eo56K85qC85byPIFtVVEYtOF3vvJ8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTI2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJSZWZ1c2luZyB0byBzZW5kIGJlY2F1c2UgdGhlIHBhdGNoXG4iCisiXHQlc1xuIgorImhhcyB0aGUgdGVtcGxhdGUgc3ViamVjdCAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiBQYXNzIC0tZm9yY2UgaWYgeW91IHJlYWxseSAiCisid2FudCB0byBzZW5kLlxuIgorbXNnc3RyICIiCisi5ouS57WV5YKz6YCB77yM5Zug54K65L+u6KOc5qqUXG4iCisiXHQlc1xuIgorIuWMheWQq+evhOacrOaomemhjCAnKioqIFNVQkpFQ1QgSEVSRSAqKion44CC5aaC5p6c56K65a+m5oOz6KaB5YKz6YCB77yM5L2/55So5Y+D5pW4IC0tZm9yY2XjgIJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NDUKK21zZ2lkICJUbyB3aG9tIHNob3VsZCB0aGUgZW1haWxzIGJlIHNlbnQgKGlmIGFueW9uZSk/IgorbXNnc3RyICLkv6Hku7blsIfopoHlgrPpgIHntaboqrDvvJ8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBhbGlhcyAnJXMnIGV4cGFuZHMgdG8gaXRzZWxmXG4iCittc2dzdHIgIuiHtOWRvemMr+iqpO+8muWIpeWQjSAnJXMnIOaTtOWxleeCuuWug+iHquW3sVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk3NQorbXNnaWQgIk1lc3NhZ2UtSUQgdG8gYmUgdXNlZCBhcyBJbi1SZXBseS1UbyBmb3IgdGhlIGZpcnN0IGVtYWlsIChpZiBhbnkpPyAiCittc2dzdHIgIk1lc3NhZ2UtSUQg6KKr55So5L2c56ys5LiA5bCB5L+h5Lu255qEIEluLVJlcGx5LVRvIO+8nyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDMzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJlcnJvcjogdW5hYmxlIHRvIGV4dHJhY3QgYSB2YWxpZCBhZGRyZXNzIGZyb206ICVzXG4iCittc2dzdHIgIumMr+iqpO+8muS4jeiDveW+niAlcyDkuK3mk7flj5bkuIDlgIvmnInmlYjnmoTkv6Hku7bkvY3lnYBcbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtxXSBbZF0gW2VdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwNDUKK21zZ2lkICJXaGF0IHRvIGRvIHdpdGggdGhpcyBhZGRyZXNzPyAoW3FddWl0fFtkXXJvcHxbZV1kaXQpOiAiCittc2dzdHIgIuWmguS9leiZleeQhumAmeWAi+S9jeWdgO+8nyhbcV11aXR8W2Rdcm9wfFtlXWRpdCnvvJoiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM2MgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJDQSBwYXRoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiQ0Eg6Lev5b6RIFwiJXNcIiDkuI3lrZjlnKgiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ0NQorbXNnaWQgIiIKKyIgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbFxuIgorIiAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0XG4iCisiICAgIHNlbmQtZW1haWwgcHJvbXB0cyBiZWZvcmUgc2VuZGluZyB3aGVuZXZlciB0aGlzIG9jY3Vycy5cbiIKKyIgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybVxuIgorIiAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4iCisiXG4iCisiICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLFxuIgorIiAgICBydW4gJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCittc2dzdHIgIiIKKyIgICAg5Lul5LiK55qE5oqE6YCB5YiX6KGo77yIQ2PvvInlt7LntpPnlKjkv67oo5zmqpTmj5DkuqToqIrmga/kuK3nmbznj77nmoTkvY3lnYDpgLLooYxcbiIKKyIgICAg5LqG5pO05bGV44CC6aCQ6KitIHNlbmQtZW1haWwg5pyD57Wm5Ye65o+Q56S644CC6YCZ5YCL6KGM54K65Y+v5Lul6YCP6YGOXG4iCisiICAgIHNlbmRlbWFpbC5jb25maXJtIOioreWumuioreWumuOAglxuIgorIlxuIgorIiAgICDmm7TlpJroqIrmga/vvIzln7fooYwgJ2dpdCBzZW5kLWVtYWlsIC0taGVscCfjgIJcbiIKKyIgICAg6KaB5L+d5oyB55uu5YmN6KGM54K677yM5L2G5LiN6aGv56S65q2k6KiK5oGv77yM5Z+36KGMICdnaXQgY29uZmlnIC0tZ2xvYmFsXG4iCisiICAgIHNlbmRlbWFpbC5jb25maXJtIGF1dG8n44CCXG4iCisiXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0gW25dIFtlXSBbcV0gW2FdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjAKK21zZ2lkICJTZW5kIHRoaXMgZW1haWw/IChbeV1lc3xbbl1vfFtlXWRpdHxbcV11aXR8W2FdbGwpOiAiCittc2dzdHIgIuWCs+mAgemAmeWwgeS/oeS7tu+8nyhbeV1lc3xbbl1vfFtlXWRpdHxbcV11aXR8W2FdbGwpOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ2MworbXNnaWQgIlNlbmQgdGhpcyBlbWFpbCByZXBseSByZXF1aXJlZCIKK21zZ3N0ciAi5YKz6YCB6KaB5rGC55qE5L+h5Lu25Zue5b6pIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0OTEKK21zZ2lkICJUaGUgcmVxdWlyZWQgU01UUCBzZXJ2ZXIgaXMgbm90IHByb3Blcmx5IGRlZmluZWQuIgorbXNnc3RyICLopoHmsYLnmoQgU01UUCDkvLrmnI3lmajmnKrooqvmraPnorrlrprnvqnjgIIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUzOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBTVEFSVFRMUyEgJXMiCittc2dzdHIgIuS8uuacjeWZqOS4jeaUr+aPtCBTVEFSVFRMU++8gSVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDMgZ2l0LXNlbmQtZW1haWwucGVybDoxNTQ3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNUQVJUVExTIGZhaWxlZCEgJXMiCittc2dzdHIgIlNUQVJUVExTIOWkseaVl++8gSVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NTYKK21zZ2lkICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTTVRQIHByb3Blcmx5LiBDaGVjayBjb25maWcgYW5kIHVzZSAtLXNtdHAtZGVidWcuIgorbXNnc3RyICLnhKHms5XmraPnorrlnLDliJ3lp4vljJYgU01UUOOAguaqouafpeioreWumuS4puS9v+eUqCAtLXNtdHAtZGVidWfjgIIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gc2VuZCAlc1xuIgorbXNnc3RyICLnhKHms5XlgrPpgIEgJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRyeS1TZW50ICVzXG4iCittc2dzdHIgIua4rOippuWft+ihjOWCs+mAgSAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VudCAlc1xuIgorbXNnc3RyICLmraPlgrPpgIEgJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc5Cittc2dpZCAiRHJ5LU9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAi5ris6Kmm5Z+36KGM5oiQ5Yqf44CC5pel6KqM6Kqq77yaXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIk9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiT0vjgILml6XoqozoqqrvvJpcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTkxCittc2dpZCAiUmVzdWx0OiAiCittc2dzdHIgIue1kOaenO+8miIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTk0Cittc2dpZCAiUmVzdWx0OiBPS1xuIgorbXNnc3RyICLntZDmnpzvvJpPS1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2MTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICLnhKHms5XplovllZ/mqpTmoYggJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY1OSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NzkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIOaWsOWiniBjY++8miVzIOiHquihjCAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkg5paw5aKeIHRv77yaJXMg6Ieq6KGMICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobm9uLW1ib3gpIOaWsOWiniBjY++8miVzIOiHquihjCAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTc1MworIywgcGVybC1mb3JtYXQKK21zZ2lkICIoYm9keSkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIoYm9keSkg5paw5aKeIGNjOiAlcyDoh6rooYwgJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NjQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBDb3VsZCBub3QgZXhlY3V0ZSAnJXMnIgorbXNnc3RyICIoJXMpIOS4jeiDveWft+ihjCAnJXMnIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIKK21zZ3N0ciAiKCVzKSDmlrDlop4gJXM6ICVzIOiHqu+8miclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODc1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJyVzJyIKK21zZ3N0ciAiKCVzKSDnhKHms5Xpl5zplonnrqHpgZPoh7MgJyVzJyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTA1Cittc2dpZCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IgorbXNnc3RyICLkuI3og73ku6UgN2JpdCDlvaLlvI/lgrPpgIHoqIrmga8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkxMworbXNnaWQgImludmFsaWQgdHJhbnNmZXIgZW5jb2RpbmciCittc2dzdHIgIueEoeaViOeahOWCs+mAgee3qOeivCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTU0IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjAwNiBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwMTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIuS4jeiDvemWi+WVnyAlc++8miVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlc++8muS/ruijnOaqlOWMheWQq+S4gOWAi+i2hemBjiA5OTgg5a2X5YWD55qE6KGMIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgJXMgd2l0aCBiYWNrdXAgc3VmZml4ICclcycuXG4iCittc2dzdHIgIueVpemBjiAlcyDlkKvlgpnku73lvozntrQgJyVzJ+OAglxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk3OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAlcz8gW3l8Tl06ICIKK21zZ3N0ciAi5oKo55yf55qE6KaB5YKz6YCBICVz77yfW3l8Tl3vvJoiCmRpZmYgLS1naXQgYS9wcGMvc2hhMS5jIGIvcHBjL3NoYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjcwNWNlCi0tLSAvZGV2L251bGwKKysrIGIvcHBjL3NoYTEuYwpAQCAtMCwwICsxLDcyIEBACisvKgorICogU0hBLTEgaW1wbGVtZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgorICoKKyAqIFRoaXMgdmVyc2lvbiBhc3N1bWVzIHdlIGFyZSBydW5uaW5nIG9uIGEgYmlnLWVuZGlhbiBtYWNoaW5lLgorICogSXQgY2FsbHMgYW4gZXh0ZXJuYWwgc2hhMV9jb3JlKCkgdG8gcHJvY2VzcyBibG9ja3Mgb2YgNjQgYnl0ZXMuCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInNoYTEuaCIKKwordm9pZCBwcGNfc2hhMV9jb3JlKHVpbnQzMl90ICpoYXNoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwLAorCQkgICB1bnNpZ25lZCBpbnQgbmJsb2Nrcyk7CisKK2ludCBwcGNfU0hBMV9Jbml0KHBwY19TSEFfQ1RYICpjKQoreworCWMtPmhhc2hbMF0gPSAweDY3NDUyMzAxOworCWMtPmhhc2hbMV0gPSAweEVGQ0RBQjg5OworCWMtPmhhc2hbMl0gPSAweDk4QkFEQ0ZFOworCWMtPmhhc2hbM10gPSAweDEwMzI1NDc2OworCWMtPmhhc2hbNF0gPSAweEMzRDJFMUYwOworCWMtPmxlbiA9IDA7CisJYy0+Y250ID0gMDsKKwlyZXR1cm4gMDsKK30KKworaW50IHBwY19TSEExX1VwZGF0ZShwcGNfU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG4pCit7CisJdW5zaWduZWQgbG9uZyBuYjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gcHRyOworCisJYy0+bGVuICs9ICh1aW50NjRfdCkgbiA8PCAzOworCXdoaWxlIChuICE9IDApIHsKKwkJaWYgKGMtPmNudCB8fCBuIDwgNjQpIHsKKwkJCW5iID0gNjQgLSBjLT5jbnQ7CisJCQlpZiAobmIgPiBuKQorCQkJCW5iID0gbjsKKwkJCW1lbWNweSgmYy0+YnVmLmJbYy0+Y250XSwgcCwgbmIpOworCQkJaWYgKChjLT5jbnQgKz0gbmIpID09IDY0KSB7CisJCQkJcHBjX3NoYTFfY29yZShjLT5oYXNoLCBjLT5idWYuYiwgMSk7CisJCQkJYy0+Y250ID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW5iID0gbiA+PiA2OworCQkJcHBjX3NoYTFfY29yZShjLT5oYXNoLCBwLCBuYik7CisJCQluYiA8PD0gNjsKKwkJfQorCQluIC09IG5iOworCQlwICs9IG5iOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHBwY19TSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmhhc2gsIHBwY19TSEFfQ1RYICpjKQoreworCXVuc2lnbmVkIGludCBjbnQgPSBjLT5jbnQ7CisKKwljLT5idWYuYltjbnQrK10gPSAweDgwOworCWlmIChjbnQgPiA1NikgeworCQlpZiAoY250IDwgNjQpCisJCQltZW1zZXQoJmMtPmJ1Zi5iW2NudF0sIDAsIDY0IC0gY250KTsKKwkJcHBjX3NoYTFfY29yZShjLT5oYXNoLCBjLT5idWYuYiwgMSk7CisJCWNudCA9IDA7CisJfQorCWlmIChjbnQgPCA1NikKKwkJbWVtc2V0KCZjLT5idWYuYltjbnRdLCAwLCA1NiAtIGNudCk7CisJYy0+YnVmLmxbN10gPSBjLT5sZW47CisJcHBjX3NoYTFfY29yZShjLT5oYXNoLCBjLT5idWYuYiwgMSk7CisJbWVtY3B5KGhhc2gsIGMtPmhhc2gsIDIwKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3BwYy9zaGExLmggYi9wcGMvc2hhMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMjRiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9wcGMvc2hhMS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBTSEEtMSBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+CisgKi8KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IGhhc2hbNV07CisJdWludDMyX3QgY250OworCXVpbnQ2NF90IGxlbjsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGNoYXIgYls2NF07CisJCXVpbnQ2NF90IGxbOF07CisJfSBidWY7Cit9IHBwY19TSEFfQ1RYOworCitpbnQgcHBjX1NIQTFfSW5pdChwcGNfU0hBX0NUWCAqYyk7CitpbnQgcHBjX1NIQTFfVXBkYXRlKHBwY19TSEFfQ1RYICpjLCBjb25zdCB2b2lkICpwLCB1bnNpZ25lZCBsb25nIG4pOworaW50IHBwY19TSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmhhc2gsIHBwY19TSEFfQ1RYICpjKTsKKworI2RlZmluZSBwbGF0Zm9ybV9TSEFfQ1RYCXBwY19TSEFfQ1RYCisjZGVmaW5lIHBsYXRmb3JtX1NIQTFfSW5pdAlwcGNfU0hBMV9Jbml0CisjZGVmaW5lIHBsYXRmb3JtX1NIQTFfVXBkYXRlCXBwY19TSEExX1VwZGF0ZQorI2RlZmluZSBwbGF0Zm9ybV9TSEExX0ZpbmFsCXBwY19TSEExX0ZpbmFsCmRpZmYgLS1naXQgYS9wcGMvc2hhMXBwYy5TIGIvcHBjL3NoYTFwcGMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzExZWVmCi0tLSAvZGV2L251bGwKKysrIGIvcHBjL3NoYTFwcGMuUwpAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIFNIQS0xIGltcGxlbWVudGF0aW9uIGZvciBQb3dlclBDLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9yZz4KKyAqLworCisvKgorICogUG93ZXJQQyBjYWxsaW5nIGNvbnZlbnRpb246CisgKiAlcjAgLSB2b2xhdGlsZSB0ZW1wCisgKiAlcjEgLSBzdGFjayBwb2ludGVyLgorICogJXIyIC0gcmVzZXJ2ZWQKKyAqICVyMy0lcjEyIC0gSW5jb21pbmcgYXJndW1lbnRzICYgcmV0dXJuIHZhbHVlczsgdm9sYXRpbGUuCisgKiAlcjEzLSVyMzEgLSBDYWxsZWUtc2F2ZSByZWdpc3RlcnMKKyAqICVsciAtIFJldHVybiBhZGRyZXNzLCB2b2xhdGlsZQorICogJWN0ciAtIHZvbGF0aWxlCisgKgorICogUmVnaXN0ZXIgdXNhZ2UgaW4gdGhpcyByb3V0aW5lOgorICogJXIwIC0gdGVtcAorICogJXIzIC0gYXJndW1lbnQgKHBvaW50ZXIgdG8gNSB3b3JkcyBvZiBTSEEgc3RhdGUpCisgKiAlcjQgLSBhcmd1bWVudCAocG9pbnRlciB0byBkYXRhIHRvIGhhc2gpCisgKiAlcjUgLSBDb25zdGFudCBLIGluIFNIQSByb3VuZCAoaW5pdGlhbGx5IG51bWJlciBvZiBibG9ja3MgdG8gaGFzaCkKKyAqICVyNi0lcjEwIC0gV29ya2luZyBjb3BpZXMgb2YgU0hBIHZhcmlhYmxlcyBBLi5FIChhY3R1YWxseSBFLi5BIG9yZGVyKQorICogJXIxMS0lcjI2IC0gRGF0YSBiZWluZyBoYXNoZWQgV1tdLgorICogJXIyNy0lcjMxIC0gUHJldmlvdXMgY29waWVzIG9mIEEuLkUsIGZvciBmaW5hbCBhZGQgYmFjay4KKyAqICVjdHIgLSBsb29wIGNvdW50CisgKi8KKworCisvKgorICogV2Ugcm9sbCB0aGUgcmVnaXN0ZXJzIGZvciBBLCBCLCBDLCBELCBFIGFyb3VuZCBvbiBlYWNoCisgKiBpdGVyYXRpb247IEUgb24gaXRlcmF0aW9uIHQgaXMgRCBvbiBpdGVyYXRpb24gdCsxLCBhbmQgc28gb24uCisgKiBXZSB1c2UgcmVnaXN0ZXJzIDYgLSAxMCBmb3IgdGhpcy4gIChSZWdpc3RlcnMgMjcgLSAzMSBob2xkCisgKiB0aGUgcHJldmlvdXMgdmFsdWVzLikKKyAqLworI2RlZmluZSBSQSh0KQkoKCh0KSs0KSU1KzYpCisjZGVmaW5lIFJCKHQpCSgoKHQpKzMpJTUrNikKKyNkZWZpbmUgUkModCkJKCgodCkrMiklNSs2KQorI2RlZmluZSBSRCh0KQkoKCh0KSsxKSU1KzYpCisjZGVmaW5lIFJFKHQpCSgoKHQpKzApJTUrNikKKworLyogV2UgdXNlIHJlZ2lzdGVycyAxMSAtIDI2IGZvciB0aGUgVyB2YWx1ZXMgKi8KKyNkZWZpbmUgVyh0KQkoKHQpJTE2KzExKQorCisvKiBSZWdpc3RlciA1IGlzIHVzZWQgZm9yIHRoZSBjb25zdGFudCBrICovCisKKy8qCisgKiBUaGUgYmFzaWMgU0hBLTEgcm91bmQgZnVuY3Rpb24gaXM6CisgKiBFICs9IFJPVEwoQSw1KSArIEYoQixDLEQpICsgV1tpXSArIEs7ICBCID0gUk9UTChCLDMwKQorICogVGhlbiB0aGUgdmFyaWFibGVzIGFyZSByZW5hbWVkOiAoQSxCLEMsRCxFKSA9IChFLEEsQixDLEQpLgorICoKKyAqIEV2ZXJ5IDIwIHJvdW5kcywgdGhlIGZ1bmN0aW9uIEYoKSBhbmQgdGhlIGNvbnN0YW50IEsgY2hhbmdlczoKKyAqIC0gMjAgcm91bmRzIG9mIGYwKGIsYyxkKSA9ICJiaXQgd2lzZSBiID8gYyA6IGQiID0gICheYiAmIGQpICsgKGIgJiBjKQorICogLSAyMCByb3VuZHMgb2YgZjEoYixjLGQpID0gYl5jXmQgPSAoYl5kKV5jCisgKiAtIDIwIHJvdW5kcyBvZiBmMihiLGMsZCkgPSBtYWpvcml0eShiLGMsZCkgPSAoYiZkKSArICgoYl5kKSZjKQorICogLSAyMCBtb3JlIHJvdW5kcyBvZiBmMShiLGMsZCkKKyAqCisgKiBUaGVzZSBhcmUgYWxsIHNjaGVkdWxlZCBmb3IgbmVhci1vcHRpbWFsIHBlcmZvcm1hbmNlIG9uIGEgRzQuCisgKiBUaGUgRzQgaXMgYSAzLWlzc3VlIG91dC1vZi1vcmRlciBtYWNoaW5lIHdpdGggMyBBTFVzLCBidXQgaXQgY2FuIG9ubHkKKyAqICpjb25zaWRlciogc3RhcnRpbmcgdGhlIG9sZGVzdCAzIGluc3RydWN0aW9ucyBwZXIgY3ljbGUuICBTbyB0byBnZXQKKyAqIG1heGltdW0gcGVyZm9ybWFuY2Ugb3V0IG9mIGl0LCB5b3UgaGF2ZSB0byB0cmVhdCBpdCBhcyBhbiBpbi1vcmRlcgorICogbWFjaGluZS4gIFdoaWNoIG1lYW5zIGludGVybGVhdmluZyB0aGUgY29tcHV0YXRpb24gcm91bmQgdCB3aXRoIHRoZQorICogY29tcHV0YXRpb24gb2YgV1t0KzRdLgorICoKKyAqIFRoZSBmaXJzdCAxNiByb3VuZHMgdXNlIFcgdmFsdWVzIGxvYWRlZCBkaXJlY3RseSBmcm9tIG1lbW9yeSwgd2hpbGUgdGhlCisgKiByZW1haW5pbmcgNjQgdXNlIHZhbHVlcyBjb21wdXRlZCBmcm9tIHRob3NlIGZpcnN0IDE2LiAgV2UgcHJlbG9hZAorICogNCB2YWx1ZXMgYmVmb3JlIHN0YXJ0aW5nLCBzbyB0aGVyZSBhcmUgdGhyZWUga2luZHMgb2Ygcm91bmRzOgorICogLSBUaGUgZmlyc3QgMTIgKGFsbCBmMCkgYWxzbyBsb2FkIHRoZSBXIHZhbHVlcyBmcm9tIG1lbW9yeS4KKyAqIC0gVGhlIG5leHQgNjQgY29tcHV0ZSBXKGkrNCkgaW4gcGFyYWxsZWwuIDgqZjAsIDIwKmYxLCAyMCpmMiwgMTYqZjEuCisgKiAtIFRoZSBsYXN0IDQgKGFsbCBmMSkgZG8gbm90IGRvIGFueXRoaW5nIHdpdGggVy4KKyAqCisgKiBUaGVyZWZvcmUsIHdlIGhhdmUgNiBkaWZmZXJlbnQgcm91bmQgZnVuY3Rpb25zOgorICogU1RFUEQwX0xPQUQodCxzKSAtIFBlcmZvcm0gcm91bmQgdCBhbmQgbG9hZCBXKHMpLiAgcyA8IDE2CisgKiBTVEVQRDBfVVBEQVRFKHQscykgLSBQZXJmb3JtIHJvdW5kIHQgYW5kIGNvbXB1dGUgVyhzKS4gIHMgPj0gMTYuCisgKiBTVEVQRDFfVVBEQVRFKHQscykKKyAqIFNURVBEMl9VUERBVEUodCxzKQorICogU1RFUEQxKHQpIC0gUGVyZm9ybSByb3VuZCB0IHdpdGggbm8gbG9hZCBvciB1cGRhdGUuCisgKgorICogVGhlIEc1IGlzIG1vcmUgZnVsbHkgb3V0LW9mLW9yZGVyLCBhbmQgY2FuIGZpbmQgdGhlIHBhcmFsbGVsaXNtCisgKiBieSBpdHNlbGYuICBUaGUgYmlnIGxpbWl0IGlzIHRoYXQgaXQgaGFzIGEgMi1jeWNsZSBBTFUgbGF0ZW5jeSwgc28KKyAqIGV2ZW4gdGhvdWdoIGl0J3MgMi13YXksIHRoZSBjb2RlIGhhcyB0byBiZSBzY2hlZHVsZWQgYXMgaWYgaXQncworICogNC13YXksIHdoaWNoIGNhbiBiZSBhIGxpbWl0LiAgVG8gaGVscCBpdCwgd2UgdHJ5IHRvIHNjaGVkdWxlIHRoZQorICogcmVhZCBvZiBSQSh0KSBhcyBsYXRlIGFzIHBvc3NpYmxlIHNvIGl0IGRvZXNuJ3Qgc3RhbGwgd2FpdGluZyBmb3IKKyAqIHRoZSBwcmV2aW91cyByb3VuZCdzIFJFKHQtMSksIGFuZCB3ZSB0cnkgdG8gcm90YXRlIFJCKHQpIGFzIGVhcmx5CisgKiBhcyBwb3NzaWJsZSB3aGlsZSByZWFkaW5nIFJDKHQpICg9IFJCKHQtMSkpIGFzIGxhdGUgYXMgcG9zc2libGUuCisgKi8KKworLyogdGhlIGluaXRpYWwgbG9hZHMuICovCisjZGVmaW5lIExPQURXKHMpIFwKKwlsd3oJVyhzKSwocykqNCglcjQpCisKKy8qCisgKiBQZXJmb3JtIGEgc3RlcCB3aXRoIEYwLCBhbmQgbG9hZCBXKHMpLiAgVXNlcyBXKHMpIGFzIGEgdGVtcG9yYXJ5CisgKiBiZWZvcmUgbG9hZGluZyBpdC4KKyAqIFRoaXMgaXMgYWN0dWFsbHkgMTAgaW5zdHJ1Y3Rpb25zLCB3aGljaCBpcyBhbiBhd2t3YXJkIGZpdC4KKyAqIEl0IGNhbiBleGVjdXRlIGdyb3VwZWQgYXMgbGlzdGVkLCBvciBkZWxheWVkIG9uZSBpbnN0cnVjdGlvbi4KKyAqIChJZiBkZWxheWVkIHR3byBpbnN0cnVjdGlvbnMsIHRoZXJlIGlzIGEgc3RhbGwgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUKKyAqIHNlY29uZCBsaW5lLikgIFRodXMsIHR3byBpdGVyYXRpb25zIHRha2UgNyBjeWNsZXMsIDMuNSBjeWNsZXMgcGVyIHJvdW5kLgorICovCisjZGVmaW5lIFNURVBEMF9MT0FEKHQscykgXAorYWRkIFJFKHQpLFJFKHQpLFcodCk7IGFuZGMgICAlcjAsUkQodCksUkIodCk7ICBhbmQgICAgVyhzKSxSQyh0KSxSQih0KTsgXAorYWRkIFJFKHQpLFJFKHQpLCVyMDsgIHJvdGx3aSAlcjAsUkEodCksNTsgICAgICByb3Rsd2kgUkIodCksUkIodCksMzA7ICAgXAorYWRkIFJFKHQpLFJFKHQpLFcocyk7IGFkZCAgICAlcjAsJXIwLCVyNTsgICAgICBsd3ogICAgVyhzKSwocykqNCglcjQpOyAgXAorYWRkIFJFKHQpLFJFKHQpLCVyMAorCisvKgorICogVGhpcyBpcyBsaWtld2lzZSBhd2t3YXJkLCAxMyBpbnN0cnVjdGlvbnMuICBIb3dldmVyLCBpdCBjYW4gYWxzbworICogZXhlY3V0ZSBzdGFydGluZyB3aXRoIDIgb3V0IG9mIDMgcG9zc2libGUgbW9kdWxpLCBzbyBpdCBkb2VzIDIgcm91bmRzCisgKiBpbiA5IGN5Y2xlcywgNC41IGN5Y2xlcy9yb3VuZC4KKyAqLworI2RlZmluZSBTVEVQRDBfVVBEQVRFKHQscyxsb2Fkay4uLikgXAorYWRkIFJFKHQpLFJFKHQpLFcodCk7IGFuZGMgICAlcjAsUkQodCksUkIodCk7IHhvciAgICBXKHMpLFcoKHMpLTE2KSxXKChzKS0zKTsgXAorYWRkIFJFKHQpLFJFKHQpLCVyMDsgIGFuZCAgICAlcjAsUkModCksUkIodCk7IHhvciAgICBXKHMpLFcocyksVygocyktOCk7ICAgICAgXAorYWRkIFJFKHQpLFJFKHQpLCVyMDsgIHJvdGx3aSAlcjAsUkEodCksNTsgICAgIHhvciAgICBXKHMpLFcocyksVygocyktMTQpOyAgICAgXAorYWRkIFJFKHQpLFJFKHQpLCVyNTsgIGxvYWRrOyByb3Rsd2kgUkIodCksUkIodCksMzA7ICByb3Rsd2kgVyhzKSxXKHMpLDE7ICAgICBcCithZGQgUkUodCksUkUodCksJXIwCisKKy8qIE5pY2VseSBvcHRpbWFsLiAgQ29udmVuaWVudGx5LCBhbHNvIHRoZSBtb3N0IGNvbW1vbi4gKi8KKyNkZWZpbmUgU1RFUEQxX1VQREFURSh0LHMsbG9hZGsuLi4pIFwKK2FkZCBSRSh0KSxSRSh0KSxXKHQpOyB4b3IgICAgJXIwLFJEKHQpLFJCKHQpOyB4b3IgICAgVyhzKSxXKChzKS0xNiksVygocyktMyk7IFwKK2FkZCBSRSh0KSxSRSh0KSwlcjU7ICBsb2FkazsgeG9yICVyMCwlcjAsUkModCk7ICB4b3IgVyhzKSxXKHMpLFcoKHMpLTgpOyAgICAgIFwKK2FkZCBSRSh0KSxSRSh0KSwlcjA7ICByb3Rsd2kgJXIwLFJBKHQpLDU7ICAgICB4b3IgICAgVyhzKSxXKHMpLFcoKHMpLTE0KTsgICAgIFwKK2FkZCBSRSh0KSxSRSh0KSwlcjA7ICByb3Rsd2kgUkIodCksUkIodCksMzA7ICByb3Rsd2kgVyhzKSxXKHMpLDEKKworLyoKKyAqIFRoZSBuYWtlZCB2ZXJzaW9uLCBubyBVUERBVEUsIGZvciB0aGUgbGFzdCA0IHJvdW5kcy4gIDMgY3ljbGVzIHBlci4KKyAqIFdlIGNvdWxkIHVzZSBXKHMpIGFzIGEgdGVtcCByZWdpc3RlciwgYnV0IHdlIGRvbid0IG5lZWQgaXQuCisgKi8KKyNkZWZpbmUgU1RFUEQxKHQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZCAgIFJFKHQpLFJFKHQpLFcodCk7IHhvciAgICAlcjAsUkQodCksUkIodCk7IFwKK3JvdGx3aSBSQih0KSxSQih0KSwzMDsgIGFkZCAgIFJFKHQpLFJFKHQpLCVyNTsgIHhvciAgICAlcjAsJXIwLFJDKHQpOyAgIFwKK2FkZCAgICBSRSh0KSxSRSh0KSwlcjA7IHJvdGx3aSAlcjAsUkEodCksNTsgICAgIC8qIHNwYXJlIHNsb3QgKi8gICAgICAgIFwKK2FkZCAgICBSRSh0KSxSRSh0KSwlcjAKKworLyoKKyAqIDE0IGluc3RydWN0aW9ucywgNSBjeWNsZXMgcGVyLiAgVGhlIG1ham9yaXR5IGZ1bmN0aW9uIGlzIGEgYml0CisgKiBhd2t3YXJkIHRvIGNvbXB1dGUuICBUaGlzIGNhbiBleGVjdXRlIHdpdGggYSAxLWluc3RydWN0aW9uIGRlbGF5LAorICogYnV0IGl0IGNhdXNlcyBhIDItaW5zdHJ1Y3Rpb24gZGVsYXksIHdoaWNoIHRyaWdnZXJzIGEgc3RhbGwuCisgKi8KKyNkZWZpbmUgU1RFUEQyX1VQREFURSh0LHMsbG9hZGsuLi4pIFwKK2FkZCBSRSh0KSxSRSh0KSxXKHQpOyBhbmQgICAgJXIwLFJEKHQpLFJCKHQpOyB4b3IgICAgVyhzKSxXKChzKS0xNiksVygocyktMyk7IFwKK2FkZCBSRSh0KSxSRSh0KSwlcjA7ICB4b3IgICAgJXIwLFJEKHQpLFJCKHQpOyB4b3IgICAgVyhzKSxXKHMpLFcoKHMpLTgpOyAgICAgIFwKK2FkZCBSRSh0KSxSRSh0KSwlcjU7ICBsb2FkazsgYW5kICVyMCwlcjAsUkModCk7ICB4b3IgVyhzKSxXKHMpLFcoKHMpLTE0KTsgICAgIFwKK2FkZCBSRSh0KSxSRSh0KSwlcjA7ICByb3Rsd2kgJXIwLFJBKHQpLDU7ICAgICByb3Rsd2kgVyhzKSxXKHMpLDE7ICAgICAgICAgICAgIFwKK2FkZCBSRSh0KSxSRSh0KSwlcjA7ICByb3Rsd2kgUkIodCksUkIodCksMzAKKworI2RlZmluZSBTVEVQMF9MT0FENCh0LHMpCQlcCisJU1RFUEQwX0xPQUQodCxzKTsJCVwKKwlTVEVQRDBfTE9BRCgodCsxKSwocykrMSk7CVwKKwlTVEVQRDBfTE9BRCgodCkrMiwocykrMik7CVwKKwlTVEVQRDBfTE9BRCgodCkrMywocykrMykKKworI2RlZmluZSBTVEVQVVA0KGZuLCB0LCBzLCBsb2Fkay4uLikJCVwKKwlTVEVQIyNmbiMjX1VQREFURSh0LHMsKTsJCVwKKwlTVEVQIyNmbiMjX1VQREFURSgodCkrMSwocykrMSwpOwlcCisJU1RFUCMjZm4jI19VUERBVEUoKHQpKzIsKHMpKzIsKTsJXAorCVNURVAjI2ZuIyNfVVBEQVRFKCh0KSszLChzKSszLGxvYWRrKQorCisjZGVmaW5lIFNURVBVUDIwKGZuLCB0LCBzLCBsb2Fkay4uLikJXAorCVNURVBVUDQoZm4sIHQsIHMsKTsJCVwKKwlTVEVQVVA0KGZuLCAodCkrNCwgKHMpKzQsKTsJXAorCVNURVBVUDQoZm4sICh0KSs4LCAocykrOCwpOwlcCisJU1RFUFVQNChmbiwgKHQpKzEyLCAocykrMTIsKTsJXAorCVNURVBVUDQoZm4sICh0KSsxNiwgKHMpKzE2LCBsb2FkaykKKworCS5nbG9ibAlwcGNfc2hhMV9jb3JlCitwcGNfc2hhMV9jb3JlOgorCXN0d3UJJXIxLC04MCglcjEpCisJc3RtdwklcjEzLDQoJXIxKQorCisJLyogTG9hZCB1cCBBIC0gRSAqLworCWxtdwklcjI3LDAoJXIzKQorCisJbXRjdHIJJXI1CisKKzE6CisJTE9BRFcoMCkKKwlsaXMJJXI1LDB4NWE4MgorCW1yCVJFKDApLCVyMzEKKwlMT0FEVygxKQorCW1yCVJEKDApLCVyMzAKKwltcglSQygwKSwlcjI5CisJTE9BRFcoMikKKwlvcmkJJXI1LCVyNSwweDc5OTkJLyogSzAtMTkgKi8KKwltcglSQigwKSwlcjI4CisJTE9BRFcoMykKKwltcglSQSgwKSwlcjI3CisKKwlTVEVQMF9MT0FENCgwLCA0KQorCVNURVAwX0xPQUQ0KDQsIDgpCisJU1RFUDBfTE9BRDQoOCwgMTIpCisJU1RFUFVQNChEMCwgMTIsIDE2LCkKKwlTVEVQVVA0KEQwLCAxNiwgMjAsIGxpcyAlcjUsMHg2ZWQ5KQorCisJb3JpCSVyNSwlcjUsMHhlYmExCS8qIEsyMC0zOSAqLworCVNURVBVUDIwKEQxLCAyMCwgMjQsIGxpcyAlcjUsMHg4ZjFiKQorCisJb3JpCSVyNSwlcjUsMHhiY2RjCS8qIEs0MC01OSAqLworCVNURVBVUDIwKEQyLCA0MCwgNDQsIGxpcyAlcjUsMHhjYTYyKQorCisJb3JpCSVyNSwlcjUsMHhjMWQ2CS8qIEs2MC03OSAqLworCVNURVBVUDQoRDEsIDYwLCA2NCwpCisJU1RFUFVQNChEMSwgNjQsIDY4LCkKKwlTVEVQVVA0KEQxLCA2OCwgNzIsKQorCVNURVBVUDQoRDEsIDcyLCA3NiwpCisJYWRkaQklcjQsJXI0LDY0CisJU1RFUEQxKDc2KQorCVNURVBEMSg3NykKKwlTVEVQRDEoNzgpCisJU1RFUEQxKDc5KQorCisJLyogQWRkIHJlc3VsdHMgdG8gb3JpZ2luYWwgdmFsdWVzICovCisJYWRkCSVyMzEsJXIzMSxSRSgwKQorCWFkZAklcjMwLCVyMzAsUkQoMCkKKwlhZGQJJXIyOSwlcjI5LFJDKDApCisJYWRkCSVyMjgsJXIyOCxSQigwKQorCWFkZAklcjI3LCVyMjcsUkEoMCkKKworCWJkbnoJMWIKKworCS8qIFNhdmUgZmluYWwgaGFzaCwgcmVzdG9yZSByZWdpc3RlcnMsIGFuZCByZXR1cm4gKi8KKwlzdG13CSVyMjcsMCglcjMpCisJbG13CSVyMTMsNCglcjEpCisJYWRkaQklcjEsJXIxLDgwCisJYmxyCmRpZmYgLS1naXQgYS9wcmVsb2FkLWluZGV4LmMgYi9wcmVsb2FkLWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ2ZWFhNAotLS0gL2Rldi9udWxsCisrKyBiL3ByZWxvYWQtaW5kZXguYwpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBMaW51cyBUb3J2YWxkcworICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImZzbW9uaXRvci5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorCisvKgorICogTW9zdGx5IHJhbmRvbWx5IGNob3NlbiBtYXhpbXVtIHRocmVhZCBjb3VudHM6IHdlCisgKiBjYXAgdGhlIHBhcmFsbGVsaXNtIHRvIDIwIHRocmVhZHMsIGFuZCB3ZSB3YW50CisgKiB0byBoYXZlIGF0IGxlYXN0IDUwMCBsc3RhdCdzIHBlciB0aHJlYWQgZm9yIGl0IHRvCisgKiBiZSB3b3J0aCBzdGFydGluZyBhIHRocmVhZC4KKyAqLworI2RlZmluZSBNQVhfUEFSQUxMRUwgKDIwKQorI2RlZmluZSBUSFJFQURfQ09TVCAoNTAwKQorCitzdHJ1Y3QgcHJvZ3Jlc3NfZGF0YSB7CisJdW5zaWduZWQgbG9uZyBuOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CisJcHRocmVhZF9tdXRleF90IG11dGV4OworfTsKKworc3RydWN0IHRocmVhZF9kYXRhIHsKKwlwdGhyZWFkX3QgcHRocmVhZDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4OworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlzdHJ1Y3QgcHJvZ3Jlc3NfZGF0YSAqcHJvZ3Jlc3M7CisJaW50IG9mZnNldCwgbnI7Cit9OworCitzdGF0aWMgdm9pZCAqcHJlbG9hZF90aHJlYWQodm9pZCAqX2RhdGEpCit7CisJaW50IG5yLCBsYXN0X25yOworCXN0cnVjdCB0aHJlYWRfZGF0YSAqcCA9IF9kYXRhOworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXggPSBwLT5pbmRleDsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKipjZXAgPSBpbmRleC0+Y2FjaGUgKyBwLT5vZmZzZXQ7CisJc3RydWN0IGNhY2hlX2RlZiBjYWNoZSA9IENBQ0hFX0RFRl9JTklUOworCisJbnIgPSBwLT5ucjsKKwlpZiAobnIgKyBwLT5vZmZzZXQgPiBpbmRleC0+Y2FjaGVfbnIpCisJCW5yID0gaW5kZXgtPmNhY2hlX25yIC0gcC0+b2Zmc2V0OworCWxhc3RfbnIgPSBucjsKKworCWRvIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9ICpjZXArKzsKKwkJc3RydWN0IHN0YXQgc3Q7CisKKwkJaWYgKGNlX3N0YWdlKGNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJY29udGludWU7CisJCWlmIChjZV91cHRvZGF0ZShjZSkpCisJCQljb250aW51ZTsKKwkJaWYgKGNlX3NraXBfd29ya3RyZWUoY2UpKQorCQkJY29udGludWU7CisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9GU01PTklUT1JfVkFMSUQpCisJCQljb250aW51ZTsKKwkJaWYgKHAtPnByb2dyZXNzICYmICEobnIgJiAzMSkpIHsKKwkJCXN0cnVjdCBwcm9ncmVzc19kYXRhICpwZCA9IHAtPnByb2dyZXNzOworCisJCQlwdGhyZWFkX211dGV4X2xvY2soJnBkLT5tdXRleCk7CisJCQlwZC0+biArPSBsYXN0X25yIC0gbnI7CisJCQlkaXNwbGF5X3Byb2dyZXNzKHBkLT5wcm9ncmVzcywgcGQtPm4pOworCQkJcHRocmVhZF9tdXRleF91bmxvY2soJnBkLT5tdXRleCk7CisJCQlsYXN0X25yID0gbnI7CisJCX0KKwkJaWYgKCFjZV9wYXRoX21hdGNoKGluZGV4LCBjZSwgJnAtPnBhdGhzcGVjLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCQlpZiAodGhyZWFkZWRfaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKCZjYWNoZSwgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAobHN0YXQoY2UtPm5hbWUsICZzdCkpCisJCQljb250aW51ZTsKKwkJaWYgKGllX21hdGNoX3N0YXQoaW5kZXgsIGNlLCAmc3QsIENFX01BVENIX1JBQ1lfSVNfRElSVFl8Q0VfTUFUQ0hfSUdOT1JFX0ZTTU9OSVRPUikpCisJCQljb250aW51ZTsKKwkJY2VfbWFya191cHRvZGF0ZShjZSk7CisJCW1hcmtfZnNtb25pdG9yX3ZhbGlkKGluZGV4LCBjZSk7CisJfSB3aGlsZSAoLS1uciA+IDApOworCWlmIChwLT5wcm9ncmVzcykgeworCQlzdHJ1Y3QgcHJvZ3Jlc3NfZGF0YSAqcGQgPSBwLT5wcm9ncmVzczsKKworCQlwdGhyZWFkX211dGV4X2xvY2soJnBkLT5tdXRleCk7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocGQtPnByb2dyZXNzLCBwZC0+biArIGxhc3RfbnIpOworCQlwdGhyZWFkX211dGV4X3VubG9jaygmcGQtPm11dGV4KTsKKwl9CisJY2FjaGVfZGVmX2NsZWFyKCZjYWNoZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgcHJlbG9hZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4LAorCQkgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkgICB1bnNpZ25lZCBpbnQgcmVmcmVzaF9mbGFncykKK3sKKwlpbnQgdGhyZWFkcywgaSwgd29yaywgb2Zmc2V0OworCXN0cnVjdCB0aHJlYWRfZGF0YSBkYXRhW01BWF9QQVJBTExFTF07CisJc3RydWN0IHByb2dyZXNzX2RhdGEgcGQ7CisKKwlpZiAoIUhBVkVfVEhSRUFEUyB8fCAhY29yZV9wcmVsb2FkX2luZGV4KQorCQlyZXR1cm47CisKKwl0aHJlYWRzID0gaW5kZXgtPmNhY2hlX25yIC8gVEhSRUFEX0NPU1Q7CisJaWYgKChpbmRleC0+Y2FjaGVfbnIgPiAxKSAmJiAodGhyZWFkcyA8IDIpICYmIGdpdF9lbnZfYm9vbCgiR0lUX1RFU1RfUFJFTE9BRF9JTkRFWCIsIDApKQorCQl0aHJlYWRzID0gMjsKKwlpZiAodGhyZWFkcyA8IDIpCisJCXJldHVybjsKKwl0cmFjZV9wZXJmb3JtYW5jZV9lbnRlcigpOworCWlmICh0aHJlYWRzID4gTUFYX1BBUkFMTEVMKQorCQl0aHJlYWRzID0gTUFYX1BBUkFMTEVMOworCW9mZnNldCA9IDA7CisJd29yayA9IERJVl9ST1VORF9VUChpbmRleC0+Y2FjaGVfbnIsIHRocmVhZHMpOworCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKworCW1lbXNldCgmcGQsIDAsIHNpemVvZihwZCkpOworCWlmIChyZWZyZXNoX2ZsYWdzICYgUkVGUkVTSF9QUk9HUkVTUyAmJiBpc2F0dHkoMikpIHsKKwkJcGQucHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKF8oIlJlZnJlc2hpbmcgaW5kZXgiKSwgaW5kZXgtPmNhY2hlX25yKTsKKwkJcHRocmVhZF9tdXRleF9pbml0KCZwZC5tdXRleCwgTlVMTCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHRocmVhZHM7IGkrKykgeworCQlzdHJ1Y3QgdGhyZWFkX2RhdGEgKnAgPSBkYXRhK2k7CisJCWludCBlcnI7CisKKwkJcC0+aW5kZXggPSBpbmRleDsKKwkJaWYgKHBhdGhzcGVjKQorCQkJY29weV9wYXRoc3BlYygmcC0+cGF0aHNwZWMsIHBhdGhzcGVjKTsKKwkJcC0+b2Zmc2V0ID0gb2Zmc2V0OworCQlwLT5uciA9IHdvcms7CisJCWlmIChwZC5wcm9ncmVzcykKKwkJCXAtPnByb2dyZXNzID0gJnBkOworCQlvZmZzZXQgKz0gd29yazsKKwkJZXJyID0gcHRocmVhZF9jcmVhdGUoJnAtPnB0aHJlYWQsIE5VTEwsIHByZWxvYWRfdGhyZWFkLCBwKTsKKworCQlpZiAoZXJyKQorCQkJZGllKF8oInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQ6ICVzIiksIHN0cmVycm9yKGVycikpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgdGhyZWFkczsgaSsrKSB7CisJCXN0cnVjdCB0aHJlYWRfZGF0YSAqcCA9IGRhdGEraTsKKwkJaWYgKHB0aHJlYWRfam9pbihwLT5wdGhyZWFkLCBOVUxMKSkKKwkJCWRpZSgidW5hYmxlIHRvIGpvaW4gdGhyZWFkZWQgbHN0YXQiKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcGQucHJvZ3Jlc3MpOworCisJdHJhY2VfcGVyZm9ybWFuY2VfbGVhdmUoInByZWxvYWQgaW5kZXgiKTsKK30KKworaW50IHJlcG9fcmVhZF9pbmRleF9wcmVsb2FkKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkgICAgdW5zaWduZWQgaW50IHJlZnJlc2hfZmxhZ3MpCit7CisJaW50IHJldHZhbCA9IHJlcG9fcmVhZF9pbmRleChyZXBvKTsKKworCXByZWxvYWRfaW5kZXgocmVwby0+aW5kZXgsIHBhdGhzcGVjLCByZWZyZXNoX2ZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvcHJldHR5LmMgYi9wcmV0dHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTNkNDZiCi0tLSAvZGV2L251bGwKKysrIGIvcHJldHR5LmMKQEAgLTAsMCArMSwyMDE4IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJtYWlsbWFwLmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJub3Rlcy5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAicmVmbG9nLXdhbGsuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAidHJhaWxlci5oIgorCitzdGF0aWMgY2hhciAqdXNlcl9mb3JtYXQ7CitzdGF0aWMgc3RydWN0IGNtdF9mbXRfbWFwIHsKKwljb25zdCBjaGFyICpuYW1lOworCWVudW0gY21pdF9mbXQgZm9ybWF0OworCWludCBpc190Zm9ybWF0OworCWludCBleHBhbmRfdGFic19pbl9sb2c7CisJaW50IGlzX2FsaWFzOworCWVudW0gZGF0ZV9tb2RlX3R5cGUgZGVmYXVsdF9kYXRlX21vZGVfdHlwZTsKKwljb25zdCBjaGFyICp1c2VyX2Zvcm1hdDsKK30gKmNvbW1pdF9mb3JtYXRzOworc3RhdGljIHNpemVfdCBidWlsdGluX2Zvcm1hdHNfbGVuOworc3RhdGljIHNpemVfdCBjb21taXRfZm9ybWF0c19sZW47CitzdGF0aWMgc2l6ZV90IGNvbW1pdF9mb3JtYXRzX2FsbG9jOworc3RhdGljIHN0cnVjdCBjbXRfZm10X21hcCAqZmluZF9jb21taXRfZm9ybWF0KGNvbnN0IGNoYXIgKnNvdWdodCk7CisKK2ludCBjb21taXRfZm9ybWF0X2lzX2VtcHR5KGVudW0gY21pdF9mbXQgZm10KQoreworCXJldHVybiBmbXQgPT0gQ01JVF9GTVRfVVNFUkZPUk1BVCAmJiAhKnVzZXJfZm9ybWF0OworfQorCitzdGF0aWMgdm9pZCBzYXZlX3VzZXJfZm9ybWF0KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBjb25zdCBjaGFyICpjcCwgaW50IGlzX3Rmb3JtYXQpCit7CisJZnJlZSh1c2VyX2Zvcm1hdCk7CisJdXNlcl9mb3JtYXQgPSB4c3RyZHVwKGNwKTsKKwlpZiAoaXNfdGZvcm1hdCkKKwkJcmV2LT51c2VfdGVybWluYXRvciA9IDE7CisJcmV2LT5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfVVNFUkZPUk1BVDsKK30KKworc3RhdGljIGludCBnaXRfcHJldHR5X2Zvcm1hdHNfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXN0cnVjdCBjbXRfZm10X21hcCAqY29tbWl0X2Zvcm1hdCA9IE5VTEw7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpmbXQ7CisJaW50IGk7CisKKwlpZiAoIXNraXBfcHJlZml4KHZhciwgInByZXR0eS4iLCAmbmFtZSkpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGJ1aWx0aW5fZm9ybWF0c19sZW47IGkrKykgeworCQlpZiAoIXN0cmNtcChjb21taXRfZm9ybWF0c1tpXS5uYW1lLCBuYW1lKSkKKwkJCXJldHVybiAwOworCX0KKworCWZvciAoaSA9IGJ1aWx0aW5fZm9ybWF0c19sZW47IGkgPCBjb21taXRfZm9ybWF0c19sZW47IGkrKykgeworCQlpZiAoIXN0cmNtcChjb21taXRfZm9ybWF0c1tpXS5uYW1lLCBuYW1lKSkgeworCQkJY29tbWl0X2Zvcm1hdCA9ICZjb21taXRfZm9ybWF0c1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFjb21taXRfZm9ybWF0KSB7CisJCUFMTE9DX0dST1coY29tbWl0X2Zvcm1hdHMsIGNvbW1pdF9mb3JtYXRzX2xlbisxLAorCQkJICAgY29tbWl0X2Zvcm1hdHNfYWxsb2MpOworCQljb21taXRfZm9ybWF0ID0gJmNvbW1pdF9mb3JtYXRzW2NvbW1pdF9mb3JtYXRzX2xlbl07CisJCW1lbXNldChjb21taXRfZm9ybWF0LCAwLCBzaXplb2YoKmNvbW1pdF9mb3JtYXQpKTsKKwkJY29tbWl0X2Zvcm1hdHNfbGVuKys7CisJfQorCisJY29tbWl0X2Zvcm1hdC0+bmFtZSA9IHhzdHJkdXAobmFtZSk7CisJY29tbWl0X2Zvcm1hdC0+Zm9ybWF0ID0gQ01JVF9GTVRfVVNFUkZPUk1BVDsKKwlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJmZtdCwgdmFyLCB2YWx1ZSkpCisJCXJldHVybiAtMTsKKworCWlmIChza2lwX3ByZWZpeChmbXQsICJmb3JtYXQ6IiwgJmZtdCkpCisJCWNvbW1pdF9mb3JtYXQtPmlzX3Rmb3JtYXQgPSAwOworCWVsc2UgaWYgKHNraXBfcHJlZml4KGZtdCwgInRmb3JtYXQ6IiwgJmZtdCkgfHwgc3RyY2hyKGZtdCwgJyUnKSkKKwkJY29tbWl0X2Zvcm1hdC0+aXNfdGZvcm1hdCA9IDE7CisJZWxzZQorCQljb21taXRfZm9ybWF0LT5pc19hbGlhcyA9IDE7CisJY29tbWl0X2Zvcm1hdC0+dXNlcl9mb3JtYXQgPSBmbXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfY29tbWl0X2Zvcm1hdHModm9pZCkKK3sKKwlzdHJ1Y3QgY210X2ZtdF9tYXAgYnVpbHRpbl9mb3JtYXRzW10gPSB7CisJCXsgInJhdyIsCUNNSVRfRk1UX1JBVywJCTAsCTAgfSwKKwkJeyAibWVkaXVtIiwJQ01JVF9GTVRfTUVESVVNLAkwLAk4IH0sCisJCXsgInNob3J0IiwJQ01JVF9GTVRfU0hPUlQsCQkwLAkwIH0sCisJCXsgImVtYWlsIiwJQ01JVF9GTVRfRU1BSUwsCQkwLAkwIH0sCisJCXsgIm1ib3hyZCIsCUNNSVRfRk1UX01CT1hSRCwJMCwJMCB9LAorCQl7ICJmdWxsZXIiLAlDTUlUX0ZNVF9GVUxMRVIsCTAsCTggfSwKKwkJeyAiZnVsbCIsCUNNSVRfRk1UX0ZVTEwsCQkwLAk4IH0sCisJCXsgIm9uZWxpbmUiLAlDTUlUX0ZNVF9PTkVMSU5FLAkxLAkwIH0sCisJCXsgInJlZmVyZW5jZSIsCUNNSVRfRk1UX1VTRVJGT1JNQVQsCTEsCTAsCisJCQkwLCBEQVRFX1NIT1JULCAiJUMoYXV0byklaCAoJXMsICVhZCkiIH0sCisJCS8qCisJCSAqIFBsZWFzZSB1cGRhdGUgJF9fZ2l0X2xvZ19wcmV0dHlfZm9ybWF0cyBpbgorCQkgKiBnaXQtY29tcGxldGlvbi5iYXNoIHdoZW4geW91IGFkZCBuZXcgZm9ybWF0cy4KKwkJICovCisJfTsKKwljb21taXRfZm9ybWF0c19sZW4gPSBBUlJBWV9TSVpFKGJ1aWx0aW5fZm9ybWF0cyk7CisJYnVpbHRpbl9mb3JtYXRzX2xlbiA9IGNvbW1pdF9mb3JtYXRzX2xlbjsKKwlBTExPQ19HUk9XKGNvbW1pdF9mb3JtYXRzLCBjb21taXRfZm9ybWF0c19sZW4sIGNvbW1pdF9mb3JtYXRzX2FsbG9jKTsKKwlDT1BZX0FSUkFZKGNvbW1pdF9mb3JtYXRzLCBidWlsdGluX2Zvcm1hdHMsCisJCSAgIEFSUkFZX1NJWkUoYnVpbHRpbl9mb3JtYXRzKSk7CisKKwlnaXRfY29uZmlnKGdpdF9wcmV0dHlfZm9ybWF0c19jb25maWcsIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IGNtdF9mbXRfbWFwICpmaW5kX2NvbW1pdF9mb3JtYXRfcmVjdXJzaXZlKGNvbnN0IGNoYXIgKnNvdWdodCwKKwkJCQkJCQljb25zdCBjaGFyICpvcmlnaW5hbCwKKwkJCQkJCQlpbnQgbnVtX3JlZGlyZWN0aW9ucykKK3sKKwlzdHJ1Y3QgY210X2ZtdF9tYXAgKmZvdW5kID0gTlVMTDsKKwlzaXplX3QgZm91bmRfbWF0Y2hfbGVuID0gMDsKKwlpbnQgaTsKKworCWlmIChudW1fcmVkaXJlY3Rpb25zID49IGNvbW1pdF9mb3JtYXRzX2xlbikKKwkJZGllKCJpbnZhbGlkIC0tcHJldHR5IGZvcm1hdDogIgorCQkgICAgIiclcycgcmVmZXJlbmNlcyBhbiBhbGlhcyB3aGljaCBwb2ludHMgdG8gaXRzZWxmIiwKKwkJICAgIG9yaWdpbmFsKTsKKworCWZvciAoaSA9IDA7IGkgPCBjb21taXRfZm9ybWF0c19sZW47IGkrKykgeworCQlzaXplX3QgbWF0Y2hfbGVuOworCisJCWlmICghc3RhcnRzX3dpdGgoY29tbWl0X2Zvcm1hdHNbaV0ubmFtZSwgc291Z2h0KSkKKwkJCWNvbnRpbnVlOworCisJCW1hdGNoX2xlbiA9IHN0cmxlbihjb21taXRfZm9ybWF0c1tpXS5uYW1lKTsKKwkJaWYgKGZvdW5kID09IE5VTEwgfHwgZm91bmRfbWF0Y2hfbGVuID4gbWF0Y2hfbGVuKSB7CisJCQlmb3VuZCA9ICZjb21taXRfZm9ybWF0c1tpXTsKKwkJCWZvdW5kX21hdGNoX2xlbiA9IG1hdGNoX2xlbjsKKwkJfQorCX0KKworCWlmIChmb3VuZCAmJiBmb3VuZC0+aXNfYWxpYXMpIHsKKwkJZm91bmQgPSBmaW5kX2NvbW1pdF9mb3JtYXRfcmVjdXJzaXZlKGZvdW5kLT51c2VyX2Zvcm1hdCwKKwkJCQkJCSAgICAgb3JpZ2luYWwsCisJCQkJCQkgICAgIG51bV9yZWRpcmVjdGlvbnMrMSk7CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCitzdGF0aWMgc3RydWN0IGNtdF9mbXRfbWFwICpmaW5kX2NvbW1pdF9mb3JtYXQoY29uc3QgY2hhciAqc291Z2h0KQoreworCWlmICghY29tbWl0X2Zvcm1hdHMpCisJCXNldHVwX2NvbW1pdF9mb3JtYXRzKCk7CisKKwlyZXR1cm4gZmluZF9jb21taXRfZm9ybWF0X3JlY3Vyc2l2ZShzb3VnaHQsIHNvdWdodCwgMCk7Cit9CisKK3ZvaWQgZ2V0X2NvbW1pdF9mb3JtYXQoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgY210X2ZtdF9tYXAgKmNvbW1pdF9mb3JtYXQ7CisKKwlyZXYtPnVzZV90ZXJtaW5hdG9yID0gMDsKKwlpZiAoIWFyZykgeworCQlyZXYtPmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9ERUZBVUxUOworCQlyZXR1cm47CisJfQorCWlmIChza2lwX3ByZWZpeChhcmcsICJmb3JtYXQ6IiwgJmFyZykpIHsKKwkJc2F2ZV91c2VyX2Zvcm1hdChyZXYsIGFyZywgMCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoISphcmcgfHwgc2tpcF9wcmVmaXgoYXJnLCAidGZvcm1hdDoiLCAmYXJnKSB8fCBzdHJjaHIoYXJnLCAnJScpKSB7CisJCXNhdmVfdXNlcl9mb3JtYXQocmV2LCBhcmcsIDEpOworCQlyZXR1cm47CisJfQorCisJY29tbWl0X2Zvcm1hdCA9IGZpbmRfY29tbWl0X2Zvcm1hdChhcmcpOworCWlmICghY29tbWl0X2Zvcm1hdCkKKwkJZGllKCJpbnZhbGlkIC0tcHJldHR5IGZvcm1hdDogJXMiLCBhcmcpOworCisJcmV2LT5jb21taXRfZm9ybWF0ID0gY29tbWl0X2Zvcm1hdC0+Zm9ybWF0OworCXJldi0+dXNlX3Rlcm1pbmF0b3IgPSBjb21taXRfZm9ybWF0LT5pc190Zm9ybWF0OworCXJldi0+ZXhwYW5kX3RhYnNfaW5fbG9nX2RlZmF1bHQgPSBjb21taXRfZm9ybWF0LT5leHBhbmRfdGFic19pbl9sb2c7CisJaWYgKCFyZXYtPmRhdGVfbW9kZV9leHBsaWNpdCAmJiBjb21taXRfZm9ybWF0LT5kZWZhdWx0X2RhdGVfbW9kZV90eXBlKQorCQlyZXYtPmRhdGVfbW9kZS50eXBlID0gY29tbWl0X2Zvcm1hdC0+ZGVmYXVsdF9kYXRlX21vZGVfdHlwZTsKKwlpZiAoY29tbWl0X2Zvcm1hdC0+Zm9ybWF0ID09IENNSVRfRk1UX1VTRVJGT1JNQVQpIHsKKwkJc2F2ZV91c2VyX2Zvcm1hdChyZXYsIGNvbW1pdF9mb3JtYXQtPnVzZXJfZm9ybWF0LAorCQkJCSBjb21taXRfZm9ybWF0LT5pc190Zm9ybWF0KTsKKwl9Cit9CisKKy8qCisgKiBHZW5lcmljIHN1cHBvcnQgZm9yIHByZXR0eS1wcmludGluZyB0aGUgaGVhZGVyCisgKi8KK3N0YXRpYyBpbnQgZ2V0X29uZV9saW5lKGNvbnN0IGNoYXIgKm1zZykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoOzspIHsKKwkJY2hhciBjID0gKm1zZysrOworCQlpZiAoIWMpCisJCQlicmVhazsKKwkJcmV0Kys7CisJCWlmIChjID09ICdcbicpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogSGlnaCBiaXQgc2V0LCBvciBJU08tMjAyMi1JTlQgKi8KK3N0YXRpYyBpbnQgbm9uX2FzY2lpKGludCBjaCkKK3sKKwlyZXR1cm4gIWlzYXNjaWkoY2gpIHx8IGNoID09ICdcMDMzJzsKK30KKworaW50IGhhc19ub25fYXNjaWkoY29uc3QgY2hhciAqcykKK3sKKwlpbnQgY2g7CisJaWYgKCFzKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoKGNoID0gKnMrKykgIT0gJ1wwJykgeworCQlpZiAobm9uX2FzY2lpKGNoKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19yZmM4MjJfc3BlY2lhbChjaGFyIGNoKQoreworCXN3aXRjaCAoY2gpIHsKKwljYXNlICcoJzoKKwljYXNlICcpJzoKKwljYXNlICc8JzoKKwljYXNlICc+JzoKKwljYXNlICdbJzoKKwljYXNlICddJzoKKwljYXNlICc6JzoKKwljYXNlICc7JzoKKwljYXNlICdAJzoKKwljYXNlICcsJzoKKwljYXNlICcuJzoKKwljYXNlICciJzoKKwljYXNlICdcXCc6CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBuZWVkc19yZmM4MjJfcXVvdGluZyhjb25zdCBjaGFyICpzLCBpbnQgbGVuKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJaWYgKGlzX3JmYzgyMl9zcGVjaWFsKHNbaV0pKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGFzdF9saW5lX2xlbmd0aChzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgaTsKKworCS8qIEhvdyBtYW55IGJ5dGVzIGFyZSBhbHJlYWR5IHVzZWQgb24gdGhlIGxhc3QgbGluZT8gKi8KKwlmb3IgKGkgPSBzYi0+bGVuIC0gMTsgaSA+PSAwOyBpLS0pCisJCWlmIChzYi0+YnVmW2ldID09ICdcbicpCisJCQlicmVhazsKKwlyZXR1cm4gc2ItPmxlbiAtIChpICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9yZmM4MjJfcXVvdGVkKHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqcywgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCS8qIGp1c3QgYSBndWVzcywgd2UgbWF5IGhhdmUgdG8gYWxzbyBiYWNrc2xhc2gtcXVvdGUgKi8KKwlzdHJidWZfZ3JvdyhvdXQsIGxlbiArIDIpOworCisJc3RyYnVmX2FkZGNoKG91dCwgJyInKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJc3dpdGNoIChzW2ldKSB7CisJCWNhc2UgJyInOgorCQljYXNlICdcXCc6CisJCQlzdHJidWZfYWRkY2gob3V0LCAnXFwnKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQlkZWZhdWx0OgorCQkJc3RyYnVmX2FkZGNoKG91dCwgc1tpXSk7CisJCX0KKwl9CisJc3RyYnVmX2FkZGNoKG91dCwgJyInKTsKK30KKworZW51bSByZmMyMDQ3X3R5cGUgeworCVJGQzIwNDdfU1VCSkVDVCwKKwlSRkMyMDQ3X0FERFJFU1MKK307CisKK3N0YXRpYyBpbnQgaXNfcmZjMjA0N19zcGVjaWFsKGNoYXIgY2gsIGVudW0gcmZjMjA0N190eXBlIHR5cGUpCit7CisJLyoKKwkgKiByZmMyMDQ3LCBzZWN0aW9uIDQuMjoKKwkgKgorCSAqICAgIDgtYml0IHZhbHVlcyB3aGljaCBjb3JyZXNwb25kIHRvIHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzIG90aGVyCisJICogICAgdGhhbiAiPSIsICI/IiwgYW5kICJfIiAodW5kZXJzY29yZSksIE1BWSBiZSByZXByZXNlbnRlZCBhcyB0aG9zZQorCSAqICAgIGNoYXJhY3RlcnMuICAoQnV0IHNlZSBzZWN0aW9uIDUgZm9yIHJlc3RyaWN0aW9ucy4pICBJbgorCSAqICAgIHBhcnRpY3VsYXIsIFNQQUNFIGFuZCBUQUIgTVVTVCBOT1QgYmUgcmVwcmVzZW50ZWQgYXMgdGhlbXNlbHZlcworCSAqICAgIHdpdGhpbiBlbmNvZGVkIHdvcmRzLgorCSAqLworCisJLyoKKwkgKiBydWxlIG91dCBub24tQVNDSUkgY2hhcmFjdGVycyBhbmQgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzICh0aGUKKwkgKiBub24tQVNDSUkgY2hlY2sgc2hvdWxkIGJlIHJlZHVuZGFudCBhcyBpc3ByaW50KCkgaXMgbm90IGxvY2FsaXplZAorCSAqIGFuZCBvbmx5IGtub3dzIGFib3V0IEFTQ0lJLCBidXQgYmUgZGVmZW5zaXZlIGFib3V0IHRoYXQpCisJICovCisJaWYgKG5vbl9hc2NpaShjaCkgfHwgIWlzcHJpbnQoY2gpKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogcnVsZSBvdXQgc3BlY2lhbCBwcmludGFibGUgY2hhcmFjdGVycyAoJyAnIHNob3VsZCBiZSB0aGUgb25seQorCSAqIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGNvbnNpZGVyZWQgcHJpbnRhYmxlLCBidXQgYmUgZGVmZW5zaXZlIGFuZCB1c2UKKwkgKiBpc3NwYWNlKCkpCisJICovCisJaWYgKGlzc3BhY2UoY2gpIHx8IGNoID09ICc9JyB8fCBjaCA9PSAnPycgfHwgY2ggPT0gJ18nKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogcmZjMjA0Nywgc2VjdGlvbiA1LjM6CisJICoKKwkgKiAgICBBcyBhIHJlcGxhY2VtZW50IGZvciBhICd3b3JkJyBlbnRpdHkgd2l0aGluIGEgJ3BocmFzZScsIGZvciBleGFtcGxlLAorCSAqICAgIG9uZSB0aGF0IHByZWNlZGVzIGFuIGFkZHJlc3MgaW4gYSBGcm9tLCBUbywgb3IgQ2MgaGVhZGVyLiAgVGhlIEFCTkYKKwkgKiAgICBkZWZpbml0aW9uIGZvciAncGhyYXNlJyBmcm9tIFJGQyA4MjIgdGh1cyBiZWNvbWVzOgorCSAqCisJICogICAgcGhyYXNlID0gMSooIGVuY29kZWQtd29yZCAvIHdvcmQgKQorCSAqCisJICogICAgSW4gdGhpcyBjYXNlIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0aGF0IG1heSBiZSB1c2VkIGluIGEgIlEiLWVuY29kZWQKKwkgKiAgICAnZW5jb2RlZC13b3JkJyBpcyByZXN0cmljdGVkIHRvOiA8dXBwZXIgYW5kIGxvd2VyIGNhc2UgQVNDSUkKKwkgKiAgICBsZXR0ZXJzLCBkZWNpbWFsIGRpZ2l0cywgIiEiLCAiKiIsICIrIiwgIi0iLCAiLyIsICI9IiwgYW5kICJfIgorCSAqICAgICh1bmRlcnNjb3JlLCBBU0NJSSA5NS4pPi4gIEFuICdlbmNvZGVkLXdvcmQnIHRoYXQgYXBwZWFycyB3aXRoaW4gYQorCSAqICAgICdwaHJhc2UnIE1VU1QgYmUgc2VwYXJhdGVkIGZyb20gYW55IGFkamFjZW50ICd3b3JkJywgJ3RleHQnIG9yCisJICogICAgJ3NwZWNpYWwnIGJ5ICdsaW5lYXItd2hpdGUtc3BhY2UnLgorCSAqLworCisJaWYgKHR5cGUgIT0gUkZDMjA0N19BRERSRVNTKQorCQlyZXR1cm4gMDsKKworCS8qICc9JyBhbmQgJ18nIGFyZSBzcGVjaWFsIGNhc2VzIGFuZCBoYXZlIGJlZW4gY2hlY2tlZCBhYm92ZSAqLworCXJldHVybiAhKGlzYWxudW0oY2gpIHx8IGNoID09ICchJyB8fCBjaCA9PSAnKicgfHwgY2ggPT0gJysnIHx8IGNoID09ICctJyB8fCBjaCA9PSAnLycpOworfQorCitzdGF0aWMgaW50IG5lZWRzX3JmYzIwNDdfZW5jb2RpbmcoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpbnQgY2ggPSBsaW5lW2ldOworCQlpZiAobm9uX2FzY2lpKGNoKSB8fCBjaCA9PSAnXG4nKQorCQkJcmV0dXJuIDE7CisJCWlmICgoaSArIDEgPCBsZW4pICYmIChjaCA9PSAnPScgJiYgbGluZVtpKzFdID09ICc/JykpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRkX3JmYzIwNDcoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmxpbmUsIHNpemVfdCBsZW4sCisJCSAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywgZW51bSByZmMyMDQ3X3R5cGUgdHlwZSkKK3sKKwlzdGF0aWMgY29uc3QgaW50IG1heF9lbmNvZGVkX2xlbmd0aCA9IDc2OyAvKiBwZXIgcmZjMjA0NyAqLworCWludCBpOworCWludCBsaW5lX2xlbiA9IGxhc3RfbGluZV9sZW5ndGgoc2IpOworCisJc3RyYnVmX2dyb3coc2IsIGxlbiAqIDMgKyBzdHJsZW4oZW5jb2RpbmcpICsgMTAwKTsKKwlzdHJidWZfYWRkZihzYiwgIj0/JXM/cT8iLCBlbmNvZGluZyk7CisJbGluZV9sZW4gKz0gc3RybGVuKGVuY29kaW5nKSArIDU7IC8qIDUgZm9yID0/P3E/ICovCisKKwl3aGlsZSAobGVuKSB7CisJCS8qCisJCSAqIFJGQyAyMDQ3LCBzZWN0aW9uIDUgKDMpOgorCQkgKgorCQkgKiBFYWNoICdlbmNvZGVkLXdvcmQnIE1VU1QgcmVwcmVzZW50IGFuIGludGVncmFsIG51bWJlciBvZgorCQkgKiBjaGFyYWN0ZXJzLiAgQSBtdWx0aS1vY3RldCBjaGFyYWN0ZXIgbWF5IG5vdCBiZSBzcGxpdCBhY3Jvc3MKKwkJICogYWRqYWNlbnQgJ2VuY29kZWQtIHdvcmQncy4KKwkJICovCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKWxpbmU7CisJCWludCBjaHJsZW4gPSBtYnNfY2hybGVuKCZsaW5lLCAmbGVuLCBlbmNvZGluZyk7CisJCWludCBpc19zcGVjaWFsID0gKGNocmxlbiA+IDEpIHx8IGlzX3JmYzIwNDdfc3BlY2lhbCgqcCwgdHlwZSk7CisKKwkJLyogIj0lMDJYIiAqIGNocmxlbiwgb3IgdGhlIGJ5dGUgaXRzZWxmICovCisJCWNvbnN0IGNoYXIgKmVuY29kZWRfZm10ID0gaXNfc3BlY2lhbCA/ICI9JTAyWCIgICAgOiAiJWMiOworCQlpbnQJICAgIGVuY29kZWRfbGVuID0gaXNfc3BlY2lhbCA/IDMgKiBjaHJsZW4gOiAxOworCisJCS8qCisJCSAqIEFjY29yZGluZyB0byBSRkMgMjA0Nywgd2UgY291bGQgZW5jb2RlIHRoZSBzcGVjaWFsIGNoYXJhY3RlcgorCQkgKiAnICcgKHNwYWNlKSB3aXRoICdfJyAodW5kZXJzY29yZSkgZm9yIHJlYWRhYmlsaXR5LiBCdXQgbWFueQorCQkgKiBwcm9ncmFtcyBkbyBub3QgdW5kZXJzdGFuZCB0aGlzIGFuZCBqdXN0IGxlYXZlIHRoZQorCQkgKiB1bmRlcnNjb3JlIGluIHBsYWNlLiBUaHVzLCB3ZSBkbyBub3RoaW5nIHNwZWNpYWwgaGVyZSwgd2hpY2gKKwkJICogY2F1c2VzICcgJyB0byBiZSBlbmNvZGVkIGFzICc9MjAnLCBhdm9pZGluZyB0aGlzIHByb2JsZW0uCisJCSAqLworCisJCWlmIChsaW5lX2xlbiArIGVuY29kZWRfbGVuICsgMiA+IG1heF9lbmNvZGVkX2xlbmd0aCkgeworCQkJLyogSXQgd29uJ3QgZml0IHdpdGggdHJhaWxpbmcgIj89IiAtLS0gYnJlYWsgdGhlIGxpbmUgKi8KKwkJCXN0cmJ1Zl9hZGRmKHNiLCAiPz1cbiA9PyVzP3E/IiwgZW5jb2RpbmcpOworCQkJbGluZV9sZW4gPSBzdHJsZW4oZW5jb2RpbmcpICsgNSArIDE7IC8qID0/P3E/IHBsdXMgU1AgKi8KKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBjaHJsZW47IGkrKykKKwkJCXN0cmJ1Zl9hZGRmKHNiLCBlbmNvZGVkX2ZtdCwgcFtpXSk7CisJCWxpbmVfbGVuICs9IGVuY29kZWRfbGVuOworCX0KKwlzdHJidWZfYWRkc3RyKHNiLCAiPz0iKTsKK30KKworY29uc3QgY2hhciAqc2hvd19pZGVudF9kYXRlKGNvbnN0IHN0cnVjdCBpZGVudF9zcGxpdCAqaWRlbnQsCisJCQkgICAgY29uc3Qgc3RydWN0IGRhdGVfbW9kZSAqbW9kZSkKK3sKKwl0aW1lc3RhbXBfdCBkYXRlID0gMDsKKwlsb25nIHR6ID0gMDsKKworCWlmIChpZGVudC0+ZGF0ZV9iZWdpbiAmJiBpZGVudC0+ZGF0ZV9lbmQpCisJCWRhdGUgPSBwYXJzZV90aW1lc3RhbXAoaWRlbnQtPmRhdGVfYmVnaW4sIE5VTEwsIDEwKTsKKwlpZiAoZGF0ZV9vdmVyZmxvd3MoZGF0ZSkpCisJCWRhdGUgPSAwOworCWVsc2UgeworCQlpZiAoaWRlbnQtPnR6X2JlZ2luICYmIGlkZW50LT50el9lbmQpCisJCQl0eiA9IHN0cnRvbChpZGVudC0+dHpfYmVnaW4sIE5VTEwsIDEwKTsKKwkJaWYgKHR6ID49IElOVF9NQVggfHwgdHogPD0gSU5UX01JTikKKwkJCXR6ID0gMDsKKwl9CisJcmV0dXJuIHNob3dfZGF0ZShkYXRlLCB0eiwgbW9kZSk7Cit9CisKK3ZvaWQgcHBfdXNlcl9pbmZvKHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCisJCSAgY29uc3QgY2hhciAqd2hhdCwgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCSAgY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hhciAqZW5jb2RpbmcpCit7CisJc3RydWN0IGlkZW50X3NwbGl0IGlkZW50OworCWNoYXIgKmxpbmVfZW5kOworCWNvbnN0IGNoYXIgKm1haWxidWYsICpuYW1lYnVmOworCXNpemVfdCBuYW1lbGVuLCBtYWlsbGVuOworCWludCBtYXhfbGVuZ3RoID0gNzg7IC8qIHBlciByZmMyODIyICovCisKKwlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKQorCQlyZXR1cm47CisKKwlsaW5lX2VuZCA9IHN0cmNocm51bChsaW5lLCAnXG4nKTsKKwlpZiAoc3BsaXRfaWRlbnRfbGluZSgmaWRlbnQsIGxpbmUsIGxpbmVfZW5kIC0gbGluZSkpCisJCXJldHVybjsKKworCW1haWxidWYgPSBpZGVudC5tYWlsX2JlZ2luOworCW1haWxsZW4gPSBpZGVudC5tYWlsX2VuZCAtIGlkZW50Lm1haWxfYmVnaW47CisJbmFtZWJ1ZiA9IGlkZW50Lm5hbWVfYmVnaW47CisJbmFtZWxlbiA9IGlkZW50Lm5hbWVfZW5kIC0gaWRlbnQubmFtZV9iZWdpbjsKKworCWlmIChwcC0+bWFpbG1hcCkKKwkJbWFwX3VzZXIocHAtPm1haWxtYXAsICZtYWlsYnVmLCAmbWFpbGxlbiwgJm5hbWVidWYsICZuYW1lbGVuKTsKKworCWlmIChjbWl0X2ZtdF9pc19tYWlsKHBwLT5mbXQpKSB7CisJCWlmIChwcC0+ZnJvbV9pZGVudCAmJiBpZGVudF9jbXAocHAtPmZyb21faWRlbnQsICZpZGVudCkpIHsKKwkJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIkZyb206ICIpOworCQkJc3RyYnVmX2FkZCgmYnVmLCBuYW1lYnVmLCBuYW1lbGVuKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiA8Iik7CisJCQlzdHJidWZfYWRkKCZidWYsIG1haWxidWYsIG1haWxsZW4pOworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiPlxuIik7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnBwLT5pbl9ib2R5X2hlYWRlcnMsCisJCQkJCSAgIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworCisJCQltYWlsYnVmID0gcHAtPmZyb21faWRlbnQtPm1haWxfYmVnaW47CisJCQltYWlsbGVuID0gcHAtPmZyb21faWRlbnQtPm1haWxfZW5kIC0gbWFpbGJ1ZjsKKwkJCW5hbWVidWYgPSBwcC0+ZnJvbV9pZGVudC0+bmFtZV9iZWdpbjsKKwkJCW5hbWVsZW4gPSBwcC0+ZnJvbV9pZGVudC0+bmFtZV9lbmQgLSBuYW1lYnVmOworCQl9CisKKwkJc3RyYnVmX2FkZHN0cihzYiwgIkZyb206ICIpOworCQlpZiAocHAtPmVuY29kZV9lbWFpbF9oZWFkZXJzICYmCisJCSAgICBuZWVkc19yZmMyMDQ3X2VuY29kaW5nKG5hbWVidWYsIG5hbWVsZW4pKSB7CisJCQlhZGRfcmZjMjA0NyhzYiwgbmFtZWJ1ZiwgbmFtZWxlbiwKKwkJCQkgICAgZW5jb2RpbmcsIFJGQzIwNDdfQUREUkVTUyk7CisJCQltYXhfbGVuZ3RoID0gNzY7IC8qIHBlciByZmMyMDQ3ICovCisJCX0gZWxzZSBpZiAobmVlZHNfcmZjODIyX3F1b3RpbmcobmFtZWJ1ZiwgbmFtZWxlbikpIHsKKwkJCXN0cnVjdCBzdHJidWYgcXVvdGVkID0gU1RSQlVGX0lOSVQ7CisJCQlhZGRfcmZjODIyX3F1b3RlZCgmcXVvdGVkLCBuYW1lYnVmLCBuYW1lbGVuKTsKKwkJCXN0cmJ1Zl9hZGRfd3JhcHBlZF9ieXRlcyhzYiwgcXVvdGVkLmJ1ZiwgcXVvdGVkLmxlbiwKKwkJCQkJCQktNiwgMSwgbWF4X2xlbmd0aCk7CisJCQlzdHJidWZfcmVsZWFzZSgmcXVvdGVkKTsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9hZGRfd3JhcHBlZF9ieXRlcyhzYiwgbmFtZWJ1ZiwgbmFtZWxlbiwKKwkJCQkJCSAtNiwgMSwgbWF4X2xlbmd0aCk7CisJCX0KKworCQlpZiAobWF4X2xlbmd0aCA8CisJCSAgICBsYXN0X2xpbmVfbGVuZ3RoKHNiKSArIHN0cmxlbigiIDwiKSArIG1haWxsZW4gKyBzdHJsZW4oIj4iKSkKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CisJCXN0cmJ1Zl9hZGRmKHNiLCAiIDwlLipzPlxuIiwgKGludCltYWlsbGVuLCBtYWlsYnVmKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZihzYiwgIiVzOiAlLipzJS4qcyA8JS4qcz5cbiIsIHdoYXQsCisJCQkgICAgKHBwLT5mbXQgPT0gQ01JVF9GTVRfRlVMTEVSKSA/IDQgOiAwLCAiICAgICIsCisJCQkgICAgKGludCluYW1lbGVuLCBuYW1lYnVmLCAoaW50KW1haWxsZW4sIG1haWxidWYpOworCX0KKworCXN3aXRjaCAocHAtPmZtdCkgeworCWNhc2UgQ01JVF9GTVRfTUVESVVNOgorCQlzdHJidWZfYWRkZihzYiwgIkRhdGU6ICAgJXNcbiIsCisJCQkgICAgc2hvd19pZGVudF9kYXRlKCZpZGVudCwgJnBwLT5kYXRlX21vZGUpKTsKKwkJYnJlYWs7CisJY2FzZSBDTUlUX0ZNVF9FTUFJTDoKKwljYXNlIENNSVRfRk1UX01CT1hSRDoKKwkJc3RyYnVmX2FkZGYoc2IsICJEYXRlOiAlc1xuIiwKKwkJCSAgICBzaG93X2lkZW50X2RhdGUoJmlkZW50LCBEQVRFX01PREUoUkZDMjgyMikpKTsKKwkJYnJlYWs7CisJY2FzZSBDTUlUX0ZNVF9GVUxMRVI6CisJCXN0cmJ1Zl9hZGRmKHNiLCAiJXNEYXRlOiAlc1xuIiwgd2hhdCwKKwkJCSAgICBzaG93X2lkZW50X2RhdGUoJmlkZW50LCAmcHAtPmRhdGVfbW9kZSkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBub3RpbicgKi8KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGlzX2JsYW5rX2xpbmUoY29uc3QgY2hhciAqbGluZSwgaW50ICpsZW5fcCkKK3sKKwlpbnQgbGVuID0gKmxlbl9wOworCXdoaWxlIChsZW4gJiYgaXNzcGFjZShsaW5lW2xlbiAtIDFdKSkKKwkJbGVuLS07CisJKmxlbl9wID0gbGVuOworCXJldHVybiAhbGVuOworfQorCitjb25zdCBjaGFyICpza2lwX2JsYW5rX2xpbmVzKGNvbnN0IGNoYXIgKm1zZykKK3sKKwlmb3IgKDs7KSB7CisJCWludCBsaW5lbGVuID0gZ2V0X29uZV9saW5lKG1zZyk7CisJCWludCBsbCA9IGxpbmVsZW47CisJCWlmICghbGluZWxlbikKKwkJCWJyZWFrOworCQlpZiAoIWlzX2JsYW5rX2xpbmUobXNnLCAmbGwpKQorCQkJYnJlYWs7CisJCW1zZyArPSBsaW5lbGVuOworCX0KKwlyZXR1cm4gbXNnOworfQorCitzdGF0aWMgdm9pZCBhZGRfbWVyZ2VfaW5mbyhjb25zdCBzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsKKworCWlmICgocHAtPmZtdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKSB8fCAoY21pdF9mbXRfaXNfbWFpbChwcC0+Zm10KSkgfHwKKwkgICAgIXBhcmVudCB8fCAhcGFyZW50LT5uZXh0KQorCQlyZXR1cm47CisKKwlzdHJidWZfYWRkc3RyKHNiLCAiTWVyZ2U6Iik7CisKKwl3aGlsZSAocGFyZW50KSB7CisJCXN0cnVjdCBvYmplY3RfaWQgKm9pZHAgPSAmcGFyZW50LT5pdGVtLT5vYmplY3Qub2lkOworCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCWlmIChwcC0+YWJicmV2KQorCQkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KHNiLCBvaWRwLCBwcC0+YWJicmV2KTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZHN0cihzYiwgb2lkX3RvX2hleChvaWRwKSk7CisJCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKKwl9CisJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKK30KKworc3RhdGljIGNoYXIgKmdldF9oZWFkZXIoY29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFyICprZXkpCit7CisJc2l6ZV90IGxlbjsKKwljb25zdCBjaGFyICp2ID0gZmluZF9jb21taXRfaGVhZGVyKG1zZywga2V5LCAmbGVuKTsKKwlyZXR1cm4gdiA/IHhtZW1kdXB6KHYsIGxlbikgOiBOVUxMOworfQorCitzdGF0aWMgY2hhciAqcmVwbGFjZV9lbmNvZGluZ19oZWFkZXIoY2hhciAqYnVmLCBjb25zdCBjaGFyICplbmNvZGluZykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHRtcCA9IFNUUkJVRl9JTklUOworCXNpemVfdCBzdGFydCwgbGVuOworCWNoYXIgKmNwID0gYnVmOworCisJLyogZ3Vlc3MgaWYgdGhlcmUgaXMgYW4gZW5jb2RpbmcgaGVhZGVyIGJlZm9yZSBhIFxuXG4gKi8KKwl3aGlsZSAoIXN0YXJ0c193aXRoKGNwLCAiZW5jb2RpbmcgIikpIHsKKwkJY3AgPSBzdHJjaHIoY3AsICdcbicpOworCQlpZiAoIWNwIHx8ICorK2NwID09ICdcbicpCisJCQlyZXR1cm4gYnVmOworCX0KKwlzdGFydCA9IGNwIC0gYnVmOworCWNwID0gc3RyY2hyKGNwLCAnXG4nKTsKKwlpZiAoIWNwKQorCQlyZXR1cm4gYnVmOyAvKiBzaG91bGQgbm90IGhhcHBlbiBidXQgYmUgZGVmZW5zaXZlICovCisJbGVuID0gY3AgKyAxIC0gKGJ1ZiArIHN0YXJ0KTsKKworCXN0cmJ1Zl9hdHRhY2goJnRtcCwgYnVmLCBzdHJsZW4oYnVmKSwgc3RybGVuKGJ1ZikgKyAxKTsKKwlpZiAoaXNfZW5jb2RpbmdfdXRmOChlbmNvZGluZykpIHsKKwkJLyogd2UgaGF2ZSByZS1jb2RlZCB0byBVVEYtODsgZHJvcCB0aGUgaGVhZGVyICovCisJCXN0cmJ1Zl9yZW1vdmUoJnRtcCwgc3RhcnQsIGxlbik7CisJfSBlbHNlIHsKKwkJLyoganVzdCByZXBsYWNlcyBYWFhYIGluICdlbmNvZGluZyBYWFhYXG4nICovCisJCXN0cmJ1Zl9zcGxpY2UoJnRtcCwgc3RhcnQgKyBzdHJsZW4oImVuY29kaW5nICIpLAorCQkJCQkgIGxlbiAtIHN0cmxlbigiZW5jb2RpbmcgXG4iKSwKKwkJCQkJICBlbmNvZGluZywgc3RybGVuKGVuY29kaW5nKSk7CisJfQorCXJldHVybiBzdHJidWZfZGV0YWNoKCZ0bXAsIE5VTEwpOworfQorCitjb25zdCBjaGFyICpyZXBvX2xvZ21zZ19yZWVuY29kZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCSBjaGFyICoqY29tbWl0X2VuY29kaW5nLAorCQkJCSBjb25zdCBjaGFyICpvdXRwdXRfZW5jb2RpbmcpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKnV0ZjggPSAiVVRGLTgiOworCWNvbnN0IGNoYXIgKnVzZV9lbmNvZGluZzsKKwljaGFyICplbmNvZGluZzsKKwljb25zdCBjaGFyICptc2cgPSByZXBvX2dldF9jb21taXRfYnVmZmVyKHIsIGNvbW1pdCwgTlVMTCk7CisJY2hhciAqb3V0OworCisJaWYgKCFvdXRwdXRfZW5jb2RpbmcgfHwgISpvdXRwdXRfZW5jb2RpbmcpIHsKKwkJaWYgKGNvbW1pdF9lbmNvZGluZykKKwkJCSpjb21taXRfZW5jb2RpbmcgPSBnZXRfaGVhZGVyKG1zZywgImVuY29kaW5nIik7CisJCXJldHVybiBtc2c7CisJfQorCWVuY29kaW5nID0gZ2V0X2hlYWRlcihtc2csICJlbmNvZGluZyIpOworCWlmIChjb21taXRfZW5jb2RpbmcpCisJCSpjb21taXRfZW5jb2RpbmcgPSBlbmNvZGluZzsKKwl1c2VfZW5jb2RpbmcgPSBlbmNvZGluZyA/IGVuY29kaW5nIDogdXRmODsKKwlpZiAoc2FtZV9lbmNvZGluZyh1c2VfZW5jb2RpbmcsIG91dHB1dF9lbmNvZGluZykpIHsKKwkJLyoKKwkJICogTm8gZW5jb2Rpbmcgd29yayB0byBiZSBkb25lLiBJZiB3ZSBoYXZlIG5vIGVuY29kaW5nIGhlYWRlcgorCQkgKiBhdCBhbGwsIHRoZW4gdGhlcmUncyBub3RoaW5nIHRvIGRvLCBhbmQgd2UgY2FuIHJldHVybiB0aGUKKwkJICogbWVzc2FnZSB2ZXJiYXRpbSAod2hldGhlciBuZXdseSBhbGxvY2F0ZWQgb3Igbm90KS4KKwkJICovCisJCWlmICghZW5jb2RpbmcpCisJCQlyZXR1cm4gbXNnOworCisJCS8qCisJCSAqIE90aGVyd2lzZSwgd2Ugc3RpbGwgd2FudCB0byBtdW5nZSB0aGUgZW5jb2RpbmcgaGVhZGVyIGluIHRoZQorCQkgKiByZXN1bHQsIHdoaWNoIHdpbGwgYmUgZG9uZSBieSBtb2RpZnlpbmcgdGhlIGJ1ZmZlci4gSWYgd2UKKwkJICogYXJlIHVzaW5nIGEgZnJlc2ggY29weSwgd2UgY2FuIHJldXNlIGl0LiBCdXQgaWYgd2UgYXJlIHVzaW5nCisJCSAqIHRoZSBjYWNoZWQgY29weSBmcm9tIGdldF9jb21taXRfYnVmZmVyLCB3ZSBuZWVkIHRvIGR1cGxpY2F0ZSBpdAorCQkgKiB0byBhdm9pZCBtdW5naW5nIHRoZSBjYWNoZWQgY29weS4KKwkJICovCisJCWlmIChtc2cgPT0gZ2V0X2NhY2hlZF9jb21taXRfYnVmZmVyKHIsIGNvbW1pdCwgTlVMTCkpCisJCQlvdXQgPSB4c3RyZHVwKG1zZyk7CisJCWVsc2UKKwkJCW91dCA9IChjaGFyICopbXNnOworCX0KKwllbHNlIHsKKwkJLyoKKwkJICogVGhlcmUncyBhY3R1YWwgZW5jb2Rpbmcgd29yayB0byBkby4gRG8gdGhlIHJlZW5jb2RpbmcsIHdoaWNoCisJCSAqIHN0aWxsIGxlYXZlcyB0aGUgaGVhZGVyIHRvIGJlIHJlcGxhY2VkIGluIHRoZSBuZXh0IHN0ZXAuIEF0CisJCSAqIHRoaXMgcG9pbnQsIHdlIGFyZSBkb25lIHdpdGggbXNnLiBJZiB3ZSBhbGxvY2F0ZWQgYSBmcmVzaAorCQkgKiBjb3B5LCB3ZSBjYW4gZnJlZSBpdC4KKwkJICovCisJCW91dCA9IHJlZW5jb2RlX3N0cmluZyhtc2csIG91dHB1dF9lbmNvZGluZywgdXNlX2VuY29kaW5nKTsKKwkJaWYgKG91dCkKKwkJCXJlcG9fdW51c2VfY29tbWl0X2J1ZmZlcihyLCBjb21taXQsIG1zZyk7CisJfQorCisJLyoKKwkgKiBUaGlzIHJlcGxhY2VtZW50IGFjdHVhbGx5IGNvbnN1bWVzIHRoZSBidWZmZXIgd2UgaGFuZCBpdCwgc28gd2UgZG8KKwkgKiBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBmcmVlaW5nIHRoZSBvbGQgIm91dCIgaGVyZS4KKwkgKi8KKwlpZiAob3V0KQorCQlvdXQgPSByZXBsYWNlX2VuY29kaW5nX2hlYWRlcihvdXQsIG91dHB1dF9lbmNvZGluZyk7CisKKwlpZiAoIWNvbW1pdF9lbmNvZGluZykKKwkJZnJlZShlbmNvZGluZyk7CisJLyoKKwkgKiBJZiB0aGUgcmUtZW5jb2RpbmcgZmFpbGVkLCBvdXQgbWlnaHQgYmUgTlVMTCBoZXJlOyBpbiB0aGF0CisJICogY2FzZSB3ZSBqdXN0IHJldHVybiB0aGUgY29tbWl0IG1lc3NhZ2UgdmVyYmF0aW0uCisJICovCisJcmV0dXJuIG91dCA/IG91dCA6IG1zZzsKK30KKworc3RhdGljIGludCBtYWlsbWFwX25hbWUoY29uc3QgY2hhciAqKmVtYWlsLCBzaXplX3QgKmVtYWlsX2xlbiwKKwkJCWNvbnN0IGNoYXIgKipuYW1lLCBzaXplX3QgKm5hbWVfbGVuKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1haWxfbWFwOworCWlmICghbWFpbF9tYXApIHsKKwkJbWFpbF9tYXAgPSB4Y2FsbG9jKDEsIHNpemVvZigqbWFpbF9tYXApKTsKKwkJcmVhZF9tYWlsbWFwKG1haWxfbWFwLCBOVUxMKTsKKwl9CisJcmV0dXJuIG1haWxfbWFwLT5uciAmJiBtYXBfdXNlcihtYWlsX21hcCwgZW1haWwsIGVtYWlsX2xlbiwgbmFtZSwgbmFtZV9sZW4pOworfQorCitzdGF0aWMgc2l6ZV90IGZvcm1hdF9wZXJzb25fcGFydChzdHJ1Y3Qgc3RyYnVmICpzYiwgY2hhciBwYXJ0LAorCQkJCSBjb25zdCBjaGFyICptc2csIGludCBsZW4sCisJCQkJIGNvbnN0IHN0cnVjdCBkYXRlX21vZGUgKmRtb2RlKQoreworCS8qIGN1cnJlbnRseSBhbGwgcGxhY2Vob2xkZXJzIGhhdmUgc2FtZSBsZW5ndGggKi8KKwljb25zdCBpbnQgcGxhY2Vob2xkZXJfbGVuID0gMjsKKwlzdHJ1Y3QgaWRlbnRfc3BsaXQgczsKKwljb25zdCBjaGFyICpuYW1lLCAqbWFpbDsKKwlzaXplX3QgbWFpbGxlbiwgbmFtZWxlbjsKKworCWlmIChzcGxpdF9pZGVudF9saW5lKCZzLCBtc2csIGxlbikgPCAwKQorCQlnb3RvIHNraXA7CisKKwluYW1lID0gcy5uYW1lX2JlZ2luOworCW5hbWVsZW4gPSBzLm5hbWVfZW5kIC0gcy5uYW1lX2JlZ2luOworCW1haWwgPSBzLm1haWxfYmVnaW47CisJbWFpbGxlbiA9IHMubWFpbF9lbmQgLSBzLm1haWxfYmVnaW47CisKKwlpZiAocGFydCA9PSAnTicgfHwgcGFydCA9PSAnRScgfHwgcGFydCA9PSAnTCcpIC8qIG1haWxtYXAgbG9va3VwICovCisJCW1haWxtYXBfbmFtZSgmbWFpbCwgJm1haWxsZW4sICZuYW1lLCAmbmFtZWxlbik7CisJaWYgKHBhcnQgPT0gJ24nIHx8IHBhcnQgPT0gJ04nKSB7CS8qIG5hbWUgKi8KKwkJc3RyYnVmX2FkZChzYiwgbmFtZSwgbmFtZWxlbik7CisJCXJldHVybiBwbGFjZWhvbGRlcl9sZW47CisJfQorCWlmIChwYXJ0ID09ICdlJyB8fCBwYXJ0ID09ICdFJykgewkvKiBlbWFpbCAqLworCQlzdHJidWZfYWRkKHNiLCBtYWlsLCBtYWlsbGVuKTsKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwl9CisJaWYgKHBhcnQgPT0gJ2wnIHx8IHBhcnQgPT0gJ0wnKSB7CS8qIGxvY2FsLXBhcnQgKi8KKwkJY29uc3QgY2hhciAqYXQgPSBtZW1jaHIobWFpbCwgJ0AnLCBtYWlsbGVuKTsKKwkJaWYgKGF0KQorCQkJbWFpbGxlbiA9IGF0IC0gbWFpbDsKKwkJc3RyYnVmX2FkZChzYiwgbWFpbCwgbWFpbGxlbik7CisJCXJldHVybiBwbGFjZWhvbGRlcl9sZW47CisJfQorCisJaWYgKCFzLmRhdGVfYmVnaW4pCisJCWdvdG8gc2tpcDsKKworCWlmIChwYXJ0ID09ICd0JykgewkvKiBkYXRlLCBVTklYIHRpbWVzdGFtcCAqLworCQlzdHJidWZfYWRkKHNiLCBzLmRhdGVfYmVnaW4sIHMuZGF0ZV9lbmQgLSBzLmRhdGVfYmVnaW4pOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCX0KKworCXN3aXRjaCAocGFydCkgeworCWNhc2UgJ2QnOgkvKiBkYXRlICovCisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHNob3dfaWRlbnRfZGF0ZSgmcywgZG1vZGUpKTsKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwljYXNlICdEJzoJLyogZGF0ZSwgUkZDMjgyMiBzdHlsZSAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBzaG93X2lkZW50X2RhdGUoJnMsIERBVEVfTU9ERShSRkMyODIyKSkpOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCWNhc2UgJ3InOgkvKiBkYXRlLCByZWxhdGl2ZSAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBzaG93X2lkZW50X2RhdGUoJnMsIERBVEVfTU9ERShSRUxBVElWRSkpKTsKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwljYXNlICdpJzoJLyogZGF0ZSwgSVNPIDg2MDEtbGlrZSAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBzaG93X2lkZW50X2RhdGUoJnMsIERBVEVfTU9ERShJU084NjAxKSkpOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCWNhc2UgJ0knOgkvKiBkYXRlLCBJU08gODYwMSBzdHJpY3QgKi8KKwkJc3RyYnVmX2FkZHN0cihzYiwgc2hvd19pZGVudF9kYXRlKCZzLCBEQVRFX01PREUoSVNPODYwMV9TVFJJQ1QpKSk7CisJCXJldHVybiBwbGFjZWhvbGRlcl9sZW47CisJY2FzZSAncyc6CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHNob3dfaWRlbnRfZGF0ZSgmcywgREFURV9NT0RFKFNIT1JUKSkpOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCX0KKworc2tpcDoKKwkvKgorCSAqIHJlYWRpbmcgZnJvbSBlaXRoZXIgYSBib2d1cyBjb21taXQsIG9yIGEgcmVmbG9nIGVudHJ5IHdpdGgKKwkgKiAlZ24sICVnZSwgZXRjLjsgJ3NiJyBjYW5ub3QgYmUgdXBkYXRlZCwgYnV0IHdlIHN0aWxsIG5lZWQKKwkgKiB0byBjb21wdXRlIGEgdmFsaWQgcmV0dXJuIHZhbHVlLgorCSAqLworCWlmIChwYXJ0ID09ICduJyB8fCBwYXJ0ID09ICdlJyB8fCBwYXJ0ID09ICd0JyB8fCBwYXJ0ID09ICdkJworCSAgICB8fCBwYXJ0ID09ICdEJyB8fCBwYXJ0ID09ICdyJyB8fCBwYXJ0ID09ICdpJykKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKworCXJldHVybiAwOyAvKiB1bmtub3duIHBsYWNlaG9sZGVyICovCit9CisKK3N0cnVjdCBjaHVuayB7CisJc2l6ZV90IG9mZjsKKwlzaXplX3QgbGVuOworfTsKKworZW51bSBmbHVzaF90eXBlIHsKKwlub19mbHVzaCwKKwlmbHVzaF9yaWdodCwKKwlmbHVzaF9sZWZ0LAorCWZsdXNoX2xlZnRfYW5kX3N0ZWFsLAorCWZsdXNoX2JvdGgKK307CisKK2VudW0gdHJ1bmNfdHlwZSB7CisJdHJ1bmNfbm9uZSwKKwl0cnVuY19sZWZ0LAorCXRydW5jX21pZGRsZSwKKwl0cnVuY19yaWdodAorfTsKKworc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCB7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWNvbnN0IHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHJldHR5X2N0eDsKKwl1bnNpZ25lZCBjb21taXRfaGVhZGVyX3BhcnNlZDoxOworCXVuc2lnbmVkIGNvbW1pdF9tZXNzYWdlX3BhcnNlZDoxOworCXN0cnVjdCBzaWduYXR1cmVfY2hlY2sgc2lnbmF0dXJlX2NoZWNrOworCWVudW0gZmx1c2hfdHlwZSBmbHVzaF90eXBlOworCWVudW0gdHJ1bmNfdHlwZSB0cnVuY2F0ZTsKKwljb25zdCBjaGFyICptZXNzYWdlOworCWNoYXIgKmNvbW1pdF9lbmNvZGluZzsKKwlzaXplX3Qgd2lkdGgsIGluZGVudDEsIGluZGVudDI7CisJaW50IGF1dG9fY29sb3I7CisJaW50IHBhZGRpbmc7CisKKwkvKiBUaGVzZSBvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLiAqLworCXN0cnVjdCBjaHVuayBhdXRob3I7CisJc3RydWN0IGNodW5rIGNvbW1pdHRlcjsKKwlzaXplX3QgbWVzc2FnZV9vZmY7CisJc2l6ZV90IHN1YmplY3Rfb2ZmOworCXNpemVfdCBib2R5X29mZjsKKworCS8qIFRoZSBmb2xsb3dpbmcgb25lcyBhcmUgcmVsYXRpdmUgdG8gdGhlIHJlc3VsdCBzdHJ1Y3Qgc3RyYnVmLiAqLworCXNpemVfdCB3cmFwX3N0YXJ0OworfTsKKworc3RhdGljIHZvaWQgcGFyc2VfY29tbWl0X2hlYWRlcihzdHJ1Y3QgZm9ybWF0X2NvbW1pdF9jb250ZXh0ICpjb250ZXh0KQoreworCWNvbnN0IGNoYXIgKm1zZyA9IGNvbnRleHQtPm1lc3NhZ2U7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBtc2dbaV07IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lOworCQlpbnQgZW9sOworCQlmb3IgKGVvbCA9IGk7IG1zZ1tlb2xdICYmIG1zZ1tlb2xdICE9ICdcbic7IGVvbCsrKQorCQkJOyAvKiBkbyBub3RoaW5nICovCisKKwkJaWYgKGkgPT0gZW9sKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChtc2cgKyBpLCAiYXV0aG9yICIsICZuYW1lKSkgeworCQkJY29udGV4dC0+YXV0aG9yLm9mZiA9IG5hbWUgLSBtc2c7CisJCQljb250ZXh0LT5hdXRob3IubGVuID0gbXNnICsgZW9sIC0gbmFtZTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChtc2cgKyBpLCAiY29tbWl0dGVyICIsICZuYW1lKSkgeworCQkJY29udGV4dC0+Y29tbWl0dGVyLm9mZiA9IG5hbWUgLSBtc2c7CisJCQljb250ZXh0LT5jb21taXR0ZXIubGVuID0gbXNnICsgZW9sIC0gbmFtZTsKKwkJfQorCQlpID0gZW9sOworCX0KKwljb250ZXh0LT5tZXNzYWdlX29mZiA9IGk7CisJY29udGV4dC0+Y29tbWl0X2hlYWRlcl9wYXJzZWQgPSAxOworfQorCitzdGF0aWMgaW50IGlzdGl0bGVjaGFyKGNoYXIgYykKK3sKKwlyZXR1cm4gKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fCAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8CisJCShjID49ICcwJyAmJiBjIDw9ICc5JykgfHwgYyA9PSAnLicgfHwgYyA9PSAnXyc7Cit9CisKK3N0YXRpYyB2b2lkIGZvcm1hdF9zYW5pdGl6ZWRfc3ViamVjdChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqbXNnKQoreworCXNpemVfdCB0cmltbGVuOworCXNpemVfdCBzdGFydF9sZW4gPSBzYi0+bGVuOworCWludCBzcGFjZSA9IDI7CisKKwlmb3IgKDsgKm1zZyAmJiAqbXNnICE9ICdcbic7IG1zZysrKSB7CisJCWlmIChpc3RpdGxlY2hhcigqbXNnKSkgeworCQkJaWYgKHNwYWNlID09IDEpCisJCQkJc3RyYnVmX2FkZGNoKHNiLCAnLScpOworCQkJc3BhY2UgPSAwOworCQkJc3RyYnVmX2FkZGNoKHNiLCAqbXNnKTsKKwkJCWlmICgqbXNnID09ICcuJykKKwkJCQl3aGlsZSAoKihtc2crMSkgPT0gJy4nKQorCQkJCQltc2crKzsKKwkJfSBlbHNlCisJCQlzcGFjZSB8PSAxOworCX0KKworCS8qIHRyaW0gYW55IHRyYWlsaW5nICcuJyBvciAnLScgY2hhcmFjdGVycyAqLworCXRyaW1sZW4gPSAwOworCXdoaWxlIChzYi0+bGVuIC0gdHJpbWxlbiA+IHN0YXJ0X2xlbiAmJgorCQkoc2ItPmJ1ZltzYi0+bGVuIC0gMSAtIHRyaW1sZW5dID09ICcuJworCQl8fCBzYi0+YnVmW3NiLT5sZW4gLSAxIC0gdHJpbWxlbl0gPT0gJy0nKSkKKwkJdHJpbWxlbisrOworCXN0cmJ1Zl9yZW1vdmUoc2IsIHNiLT5sZW4gLSB0cmltbGVuLCB0cmltbGVuKTsKK30KKworY29uc3QgY2hhciAqZm9ybWF0X3N1YmplY3Qoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm1zZywKKwkJCSAgIGNvbnN0IGNoYXIgKmxpbmVfc2VwYXJhdG9yKQoreworCWludCBmaXJzdCA9IDE7CisKKwlmb3IgKDs7KSB7CisJCWNvbnN0IGNoYXIgKmxpbmUgPSBtc2c7CisJCWludCBsaW5lbGVuID0gZ2V0X29uZV9saW5lKGxpbmUpOworCisJCW1zZyArPSBsaW5lbGVuOworCQlpZiAoIWxpbmVsZW4gfHwgaXNfYmxhbmtfbGluZShsaW5lLCAmbGluZWxlbikpCisJCQlicmVhazsKKworCQlpZiAoIXNiKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9ncm93KHNiLCBsaW5lbGVuICsgMik7CisJCWlmICghZmlyc3QpCisJCQlzdHJidWZfYWRkc3RyKHNiLCBsaW5lX3NlcGFyYXRvcik7CisJCXN0cmJ1Zl9hZGQoc2IsIGxpbmUsIGxpbmVsZW4pOworCQlmaXJzdCA9IDA7CisJfQorCXJldHVybiBtc2c7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NvbW1pdF9tZXNzYWdlKHN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgKmMpCit7CisJY29uc3QgY2hhciAqbXNnID0gYy0+bWVzc2FnZSArIGMtPm1lc3NhZ2Vfb2ZmOworCWNvbnN0IGNoYXIgKnN0YXJ0ID0gYy0+bWVzc2FnZTsKKworCW1zZyA9IHNraXBfYmxhbmtfbGluZXMobXNnKTsKKwljLT5zdWJqZWN0X29mZiA9IG1zZyAtIHN0YXJ0OworCisJbXNnID0gZm9ybWF0X3N1YmplY3QoTlVMTCwgbXNnLCBOVUxMKTsKKwltc2cgPSBza2lwX2JsYW5rX2xpbmVzKG1zZyk7CisJYy0+Ym9keV9vZmYgPSBtc2cgLSBzdGFydDsKKworCWMtPmNvbW1pdF9tZXNzYWdlX3BhcnNlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmJ1Zl93cmFwKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgcG9zLAorCQkJc2l6ZV90IHdpZHRoLCBzaXplX3QgaW5kZW50MSwgc2l6ZV90IGluZGVudDIpCit7CisJc3RydWN0IHN0cmJ1ZiB0bXAgPSBTVFJCVUZfSU5JVDsKKworCWlmIChwb3MpCisJCXN0cmJ1Zl9hZGQoJnRtcCwgc2ItPmJ1ZiwgcG9zKTsKKwlzdHJidWZfYWRkX3dyYXBwZWRfdGV4dCgmdG1wLCBzYi0+YnVmICsgcG9zLAorCQkJCShpbnQpIGluZGVudDEsIChpbnQpIGluZGVudDIsIChpbnQpIHdpZHRoKTsKKwlzdHJidWZfc3dhcCgmdG1wLCBzYik7CisJc3RyYnVmX3JlbGVhc2UoJnRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJld3JhcF9tZXNzYWdlX3RhaWwoc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCAqYywKKwkJCQlzaXplX3QgbmV3X3dpZHRoLCBzaXplX3QgbmV3X2luZGVudDEsCisJCQkJc2l6ZV90IG5ld19pbmRlbnQyKQoreworCWlmIChjLT53aWR0aCA9PSBuZXdfd2lkdGggJiYgYy0+aW5kZW50MSA9PSBuZXdfaW5kZW50MSAmJgorCSAgICBjLT5pbmRlbnQyID09IG5ld19pbmRlbnQyKQorCQlyZXR1cm47CisJaWYgKGMtPndyYXBfc3RhcnQgPCBzYi0+bGVuKQorCQlzdHJidWZfd3JhcChzYiwgYy0+d3JhcF9zdGFydCwgYy0+d2lkdGgsIGMtPmluZGVudDEsIGMtPmluZGVudDIpOworCWMtPndyYXBfc3RhcnQgPSBzYi0+bGVuOworCWMtPndpZHRoID0gbmV3X3dpZHRoOworCWMtPmluZGVudDEgPSBuZXdfaW5kZW50MTsKKwljLT5pbmRlbnQyID0gbmV3X2luZGVudDI7Cit9CisKK3N0YXRpYyBpbnQgZm9ybWF0X3JlZmxvZ19wZXJzb24oc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJY2hhciBwYXJ0LAorCQkJCXN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICpsb2csCisJCQkJY29uc3Qgc3RydWN0IGRhdGVfbW9kZSAqZG1vZGUpCit7CisJY29uc3QgY2hhciAqaWRlbnQ7CisKKwlpZiAoIWxvZykKKwkJcmV0dXJuIDI7CisKKwlpZGVudCA9IGdldF9yZWZsb2dfaWRlbnQobG9nKTsKKwlpZiAoIWlkZW50KQorCQlyZXR1cm4gMjsKKworCXJldHVybiBmb3JtYXRfcGVyc29uX3BhcnQoc2IsIHBhcnQsIGlkZW50LCBzdHJsZW4oaWRlbnQpLCBkbW9kZSk7Cit9CisKK3N0YXRpYyBzaXplX3QgcGFyc2VfY29sb3Ioc3RydWN0IHN0cmJ1ZiAqc2IsIC8qIGluIFVURi04ICovCisJCQkgIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJICBzdHJ1Y3QgZm9ybWF0X2NvbW1pdF9jb250ZXh0ICpjKQoreworCWNvbnN0IGNoYXIgKnJlc3QgPSBwbGFjZWhvbGRlcjsKKwljb25zdCBjaGFyICpiYXNpY19jb2xvciA9IE5VTEw7CisKKwlpZiAocGxhY2Vob2xkZXJbMV0gPT0gJygnKSB7CisJCWNvbnN0IGNoYXIgKmJlZ2luID0gcGxhY2Vob2xkZXIgKyAyOworCQljb25zdCBjaGFyICplbmQgPSBzdHJjaHIoYmVnaW4sICcpJyk7CisJCWNoYXIgY29sb3JbQ09MT1JfTUFYTEVOXTsKKworCQlpZiAoIWVuZCkKKwkJCXJldHVybiAwOworCisJCWlmIChza2lwX3ByZWZpeChiZWdpbiwgImF1dG8sIiwgJmJlZ2luKSkgeworCQkJaWYgKCF3YW50X2NvbG9yKGMtPnByZXR0eV9jdHgtPmNvbG9yKSkKKwkJCQlyZXR1cm4gZW5kIC0gcGxhY2Vob2xkZXIgKyAxOworCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGJlZ2luLCAiYWx3YXlzLCIsICZiZWdpbikpIHsKKwkJCS8qIG5vdGhpbmcgdG8gZG87IHdlIGRvIG5vdCByZXNwZWN0IHdhbnRfY29sb3IgYXQgYWxsICovCisJCX0gZWxzZSB7CisJCQkvKiB0aGUgZGVmYXVsdCBpcyB0aGUgc2FtZSBhcyAiYXV0byIgKi8KKwkJCWlmICghd2FudF9jb2xvcihjLT5wcmV0dHlfY3R4LT5jb2xvcikpCisJCQkJcmV0dXJuIGVuZCAtIHBsYWNlaG9sZGVyICsgMTsKKwkJfQorCisJCWlmIChjb2xvcl9wYXJzZV9tZW0oYmVnaW4sIGVuZCAtIGJlZ2luLCBjb2xvcikgPCAwKQorCQkJZGllKF8oInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiKSk7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIGNvbG9yKTsKKwkJcmV0dXJuIGVuZCAtIHBsYWNlaG9sZGVyICsgMTsKKwl9CisKKwkvKgorCSAqIFdlIGhhbmRsZSB0aGluZ3MgbGlrZSAiJUMocmVkKSIgYWJvdmU7IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHRoZXJlCisJICogYXJlIGEgZmV3IGNvbG9ycyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgd2l0aG91dCBwYXJlbnRoZXNlcyAoYW5kCisJICogdGhleSBjYW5ub3Qgc3VwcG9ydCB0aGluZ3MgbGlrZSAiYXV0byIgb3IgImFsd2F5cyIgYXQgYWxsKS4KKwkgKi8KKwlpZiAoc2tpcF9wcmVmaXgocGxhY2Vob2xkZXIgKyAxLCAicmVkIiwgJnJlc3QpKQorCQliYXNpY19jb2xvciA9IEdJVF9DT0xPUl9SRUQ7CisJZWxzZSBpZiAoc2tpcF9wcmVmaXgocGxhY2Vob2xkZXIgKyAxLCAiZ3JlZW4iLCAmcmVzdCkpCisJCWJhc2ljX2NvbG9yID0gR0lUX0NPTE9SX0dSRUVOOworCWVsc2UgaWYgKHNraXBfcHJlZml4KHBsYWNlaG9sZGVyICsgMSwgImJsdWUiLCAmcmVzdCkpCisJCWJhc2ljX2NvbG9yID0gR0lUX0NPTE9SX0JMVUU7CisJZWxzZSBpZiAoc2tpcF9wcmVmaXgocGxhY2Vob2xkZXIgKyAxLCAicmVzZXQiLCAmcmVzdCkpCisJCWJhc2ljX2NvbG9yID0gR0lUX0NPTE9SX1JFU0VUOworCisJaWYgKGJhc2ljX2NvbG9yICYmIHdhbnRfY29sb3IoYy0+cHJldHR5X2N0eC0+Y29sb3IpKQorCQlzdHJidWZfYWRkc3RyKHNiLCBiYXNpY19jb2xvcik7CisKKwlyZXR1cm4gcmVzdCAtIHBsYWNlaG9sZGVyOworfQorCitzdGF0aWMgc2l6ZV90IHBhcnNlX3BhZGRpbmdfcGxhY2Vob2xkZXIoY29uc3QgY2hhciAqcGxhY2Vob2xkZXIsCisJCQkJCXN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgKmMpCit7CisJY29uc3QgY2hhciAqY2ggPSBwbGFjZWhvbGRlcjsKKwllbnVtIGZsdXNoX3R5cGUgZmx1c2hfdHlwZTsKKwlpbnQgdG9fY29sdW1uID0gMDsKKworCXN3aXRjaCAoKmNoKyspIHsKKwljYXNlICc8JzoKKwkJZmx1c2hfdHlwZSA9IGZsdXNoX3JpZ2h0OworCQlicmVhazsKKwljYXNlICc+JzoKKwkJaWYgKCpjaCA9PSAnPCcpIHsKKwkJCWZsdXNoX3R5cGUgPSBmbHVzaF9ib3RoOworCQkJY2grKzsKKwkJfSBlbHNlIGlmICgqY2ggPT0gJz4nKSB7CisJCQlmbHVzaF90eXBlID0gZmx1c2hfbGVmdF9hbmRfc3RlYWw7CisJCQljaCsrOworCQl9IGVsc2UKKwkJCWZsdXNoX3R5cGUgPSBmbHVzaF9sZWZ0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiB0aGUgbmV4dCB2YWx1ZSBtZWFucyAid2lkZSBlbm91Z2ggdG8gdGhhdCBjb2x1bW4iICovCisJaWYgKCpjaCA9PSAnfCcpIHsKKwkJdG9fY29sdW1uID0gMTsKKwkJY2grKzsKKwl9CisKKwlpZiAoKmNoID09ICcoJykgeworCQljb25zdCBjaGFyICpzdGFydCA9IGNoICsgMTsKKwkJY29uc3QgY2hhciAqZW5kID0gc3RhcnQgKyBzdHJjc3BuKHN0YXJ0LCAiLCkiKTsKKwkJY2hhciAqbmV4dDsKKwkJaW50IHdpZHRoOworCQlpZiAoIWVuZCB8fCBlbmQgPT0gc3RhcnQpCisJCQlyZXR1cm4gMDsKKwkJd2lkdGggPSBzdHJ0b2woc3RhcnQsICZuZXh0LCAxMCk7CisJCWlmIChuZXh0ID09IHN0YXJ0IHx8IHdpZHRoID09IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKHdpZHRoIDwgMCkgeworCQkJaWYgKHRvX2NvbHVtbikKKwkJCQl3aWR0aCArPSB0ZXJtX2NvbHVtbnMoKTsKKwkJCWlmICh3aWR0aCA8IDApCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJYy0+cGFkZGluZyA9IHRvX2NvbHVtbiA/IC13aWR0aCA6IHdpZHRoOworCQljLT5mbHVzaF90eXBlID0gZmx1c2hfdHlwZTsKKworCQlpZiAoKmVuZCA9PSAnLCcpIHsKKwkJCXN0YXJ0ID0gZW5kICsgMTsKKwkJCWVuZCA9IHN0cmNocihzdGFydCwgJyknKTsKKwkJCWlmICghZW5kIHx8IGVuZCA9PSBzdGFydCkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmIChzdGFydHNfd2l0aChzdGFydCwgInRydW5jKSIpKQorCQkJCWMtPnRydW5jYXRlID0gdHJ1bmNfcmlnaHQ7CisJCQllbHNlIGlmIChzdGFydHNfd2l0aChzdGFydCwgImx0cnVuYykiKSkKKwkJCQljLT50cnVuY2F0ZSA9IHRydW5jX2xlZnQ7CisJCQllbHNlIGlmIChzdGFydHNfd2l0aChzdGFydCwgIm10cnVuYykiKSkKKwkJCQljLT50cnVuY2F0ZSA9IHRydW5jX21pZGRsZTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlCisJCQljLT50cnVuY2F0ZSA9IHRydW5jX25vbmU7CisKKwkJcmV0dXJuIGVuZCAtIHBsYWNlaG9sZGVyICsgMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfcGxhY2Vob2xkZXJfYXJnX3ZhbHVlKGNvbnN0IGNoYXIgKnRvX3BhcnNlLCBjb25zdCBjaGFyICpjYW5kaWRhdGUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKiplbmQsIGNvbnN0IGNoYXIgKip2YWx1ZXN0YXJ0LAorCQkJCSAgICAgICBzaXplX3QgKnZhbHVlbGVuKQoreworCWNvbnN0IGNoYXIgKnA7CisKKwlpZiAoIShza2lwX3ByZWZpeCh0b19wYXJzZSwgY2FuZGlkYXRlLCAmcCkpKQorCQlyZXR1cm4gMDsKKwlpZiAodmFsdWVzdGFydCkgeworCQlpZiAoKnAgPT0gJz0nKSB7CisJCQkqdmFsdWVzdGFydCA9IHAgKyAxOworCQkJKnZhbHVlbGVuID0gc3RyY3NwbigqdmFsdWVzdGFydCwgIiwpIik7CisJCQlwID0gKnZhbHVlc3RhcnQgKyAqdmFsdWVsZW47CisJCX0gZWxzZSB7CisJCQlpZiAoKnAgIT0gJywnICYmICpwICE9ICcpJykKKwkJCQlyZXR1cm4gMDsKKwkJCSp2YWx1ZXN0YXJ0ID0gTlVMTDsKKwkJCSp2YWx1ZWxlbiA9IDA7CisJCX0KKwl9CisJaWYgKCpwID09ICcsJykgeworCQkqZW5kID0gcCArIDE7CisJCXJldHVybiAxOworCX0KKwlpZiAoKnAgPT0gJyknKSB7CisJCSplbmQgPSBwOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfcGxhY2Vob2xkZXJfYm9vbF9hcmcoY29uc3QgY2hhciAqdG9fcGFyc2UsIGNvbnN0IGNoYXIgKmNhbmRpZGF0ZSwKKwkJCQkgICAgICBjb25zdCBjaGFyICoqZW5kLCBpbnQgKnZhbCkKK3sKKwljb25zdCBjaGFyICphcmd2YWw7CisJY2hhciAqc3RydmFsOworCXNpemVfdCBhcmdsZW47CisJaW50IHY7CisKKwlpZiAoIW1hdGNoX3BsYWNlaG9sZGVyX2FyZ192YWx1ZSh0b19wYXJzZSwgY2FuZGlkYXRlLCBlbmQsICZhcmd2YWwsICZhcmdsZW4pKQorCQlyZXR1cm4gMDsKKworCWlmICghYXJndmFsKSB7CisJCSp2YWwgPSAxOworCQlyZXR1cm4gMTsKKwl9CisKKwlzdHJ2YWwgPSB4c3RybmR1cChhcmd2YWwsIGFyZ2xlbik7CisJdiA9IGdpdF9wYXJzZV9tYXliZV9ib29sKHN0cnZhbCk7CisJZnJlZShzdHJ2YWwpOworCisJaWYgKHYgPT0gLTEpCisJCXJldHVybiAwOworCisJKnZhbCA9IHY7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmb3JtYXRfdHJhaWxlcl9tYXRjaF9jYihjb25zdCBzdHJ1Y3Qgc3RyYnVmICprZXksIHZvaWQgKnVkKQoreworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCA9IHVkOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbSAoaXRlbSwgbGlzdCkgeworCQlpZiAoa2V5LT5sZW4gPT0gKHVpbnRwdHJfdClpdGVtLT51dGlsICYmCisJCSAgICAhc3RybmNhc2VjbXAoaXRlbS0+c3RyaW5nLCBrZXktPmJ1Ziwga2V5LT5sZW4pKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc2l6ZV90IGZvcm1hdF9jb21taXRfb25lKHN0cnVjdCBzdHJidWYgKnNiLCAvKiBpbiBVVEYtOCAqLworCQkJCWNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJCXZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCAqYyA9IGNvbnRleHQ7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gYy0+Y29tbWl0OworCWNvbnN0IGNoYXIgKm1zZyA9IGMtPm1lc3NhZ2U7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCWNvbnN0IGNoYXIgKmFyZzsKKwlzaXplX3QgcmVzOworCWNoYXIgKipzbG90OworCisJLyogdGhlc2UgYXJlIGluZGVwZW5kZW50IG9mIHRoZSBjb21taXQgKi8KKwlyZXMgPSBzdHJidWZfZXhwYW5kX2xpdGVyYWxfY2Ioc2IsIHBsYWNlaG9sZGVyLCBOVUxMKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJc3dpdGNoIChwbGFjZWhvbGRlclswXSkgeworCWNhc2UgJ0MnOgorCQlpZiAoc3RhcnRzX3dpdGgocGxhY2Vob2xkZXIgKyAxLCAiKGF1dG8pIikpIHsKKwkJCWMtPmF1dG9fY29sb3IgPSB3YW50X2NvbG9yKGMtPnByZXR0eV9jdHgtPmNvbG9yKTsKKwkJCWlmIChjLT5hdXRvX2NvbG9yICYmIHNiLT5sZW4pCisJCQkJc3RyYnVmX2FkZHN0cihzYiwgR0lUX0NPTE9SX1JFU0VUKTsKKwkJCXJldHVybiA3OyAvKiBjb25zdW1lZCA3IGJ5dGVzLCAiQyhhdXRvKSIgKi8KKwkJfSBlbHNlIHsKKwkJCWludCByZXQgPSBwYXJzZV9jb2xvcihzYiwgcGxhY2Vob2xkZXIsIGMpOworCQkJaWYgKHJldCkKKwkJCQljLT5hdXRvX2NvbG9yID0gMDsKKwkJCS8qCisJCQkgKiBPdGhlcndpc2UsIHdlIGRlY2lkZWQgdG8gdHJlYXQgJUM8dW5rbm93bj4KKwkJCSAqIGFzIGEgbGl0ZXJhbCBzdHJpbmcsIGFuZCB0aGUgcHJldmlvdXMKKwkJCSAqICVDKGF1dG8pIGlzIHN0aWxsIHZhbGlkLgorCQkJICovCisJCQlyZXR1cm4gcmV0OworCQl9CisJY2FzZSAndyc6CisJCWlmIChwbGFjZWhvbGRlclsxXSA9PSAnKCcpIHsKKwkJCXVuc2lnbmVkIGxvbmcgd2lkdGggPSAwLCBpbmRlbnQxID0gMCwgaW5kZW50MiA9IDA7CisJCQljaGFyICpuZXh0OworCQkJY29uc3QgY2hhciAqc3RhcnQgPSBwbGFjZWhvbGRlciArIDI7CisJCQljb25zdCBjaGFyICplbmQgPSBzdHJjaHIoc3RhcnQsICcpJyk7CisJCQlpZiAoIWVuZCkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmIChlbmQgPiBzdGFydCkgeworCQkJCXdpZHRoID0gc3RydG91bChzdGFydCwgJm5leHQsIDEwKTsKKwkJCQlpZiAoKm5leHQgPT0gJywnKSB7CisJCQkJCWluZGVudDEgPSBzdHJ0b3VsKG5leHQgKyAxLCAmbmV4dCwgMTApOworCQkJCQlpZiAoKm5leHQgPT0gJywnKSB7CisJCQkJCQlpbmRlbnQyID0gc3RydG91bChuZXh0ICsgMSwKKwkJCQkJCQkJICZuZXh0LCAxMCk7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKCpuZXh0ICE9ICcpJykKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlyZXdyYXBfbWVzc2FnZV90YWlsKHNiLCBjLCB3aWR0aCwgaW5kZW50MSwgaW5kZW50Mik7CisJCQlyZXR1cm4gZW5kIC0gcGxhY2Vob2xkZXIgKyAxOworCQl9IGVsc2UKKwkJCXJldHVybiAwOworCisJY2FzZSAnPCc6CisJY2FzZSAnPic6CisJCXJldHVybiBwYXJzZV9wYWRkaW5nX3BsYWNlaG9sZGVyKHBsYWNlaG9sZGVyLCBjKTsKKwl9CisKKwkvKiB0aGVzZSBkZXBlbmQgb24gdGhlIGNvbW1pdCAqLworCWlmICghY29tbWl0LT5vYmplY3QucGFyc2VkKQorCQlwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZjb21taXQtPm9iamVjdC5vaWQpOworCisJc3dpdGNoIChwbGFjZWhvbGRlclswXSkgeworCWNhc2UgJ0gnOgkJLyogY29tbWl0IGhhc2ggKi8KKwkJc3RyYnVmX2FkZHN0cihzYiwgZGlmZl9nZXRfY29sb3IoYy0+YXV0b19jb2xvciwgRElGRl9DT01NSVQpKTsKKwkJc3RyYnVmX2FkZHN0cihzYiwgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIGRpZmZfZ2V0X2NvbG9yKGMtPmF1dG9fY29sb3IsIERJRkZfUkVTRVQpKTsKKwkJcmV0dXJuIDE7CisJY2FzZSAnaCc6CQkvKiBhYmJyZXZpYXRlZCBjb21taXQgaGFzaCAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBkaWZmX2dldF9jb2xvcihjLT5hdXRvX2NvbG9yLCBESUZGX0NPTU1JVCkpOworCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoc2IsICZjb21taXQtPm9iamVjdC5vaWQsCisJCQkJCSBjLT5wcmV0dHlfY3R4LT5hYmJyZXYpOworCQlzdHJidWZfYWRkc3RyKHNiLCBkaWZmX2dldF9jb2xvcihjLT5hdXRvX2NvbG9yLCBESUZGX1JFU0VUKSk7CisJCXJldHVybiAxOworCWNhc2UgJ1QnOgkJLyogdHJlZSBoYXNoICovCisJCXN0cmJ1Zl9hZGRzdHIoc2IsIG9pZF90b19oZXgoZ2V0X2NvbW1pdF90cmVlX29pZChjb21taXQpKSk7CisJCXJldHVybiAxOworCWNhc2UgJ3QnOgkJLyogYWJicmV2aWF0ZWQgdHJlZSBoYXNoICovCisJCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldihzYiwKKwkJCQkJIGdldF9jb21taXRfdHJlZV9vaWQoY29tbWl0KSwKKwkJCQkJIGMtPnByZXR0eV9jdHgtPmFiYnJldik7CisJCXJldHVybiAxOworCWNhc2UgJ1AnOgkJLyogcGFyZW50IGhhc2hlcyAqLworCQlmb3IgKHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQlpZiAocCAhPSBjb21taXQtPnBhcmVudHMpCisJCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCQkJc3RyYnVmX2FkZHN0cihzYiwgb2lkX3RvX2hleCgmcC0+aXRlbS0+b2JqZWN0Lm9pZCkpOworCQl9CisJCXJldHVybiAxOworCWNhc2UgJ3AnOgkJLyogYWJicmV2aWF0ZWQgcGFyZW50IGhhc2hlcyAqLworCQlmb3IgKHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQlpZiAocCAhPSBjb21taXQtPnBhcmVudHMpCisJCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCQkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KHNiLCAmcC0+aXRlbS0+b2JqZWN0Lm9pZCwKKwkJCQkJCSBjLT5wcmV0dHlfY3R4LT5hYmJyZXYpOworCQl9CisJCXJldHVybiAxOworCWNhc2UgJ20nOgkJLyogbGVmdC9yaWdodC9ib3R0b20gKi8KKwkJc3RyYnVmX2FkZHN0cihzYiwgZ2V0X3JldmlzaW9uX21hcmsoTlVMTCwgY29tbWl0KSk7CisJCXJldHVybiAxOworCWNhc2UgJ2QnOgorCQlmb3JtYXRfZGVjb3JhdGlvbnMoc2IsIGNvbW1pdCwgYy0+YXV0b19jb2xvcik7CisJCXJldHVybiAxOworCWNhc2UgJ0QnOgorCQlmb3JtYXRfZGVjb3JhdGlvbnNfZXh0ZW5kZWQoc2IsIGNvbW1pdCwgYy0+YXV0b19jb2xvciwgIiIsICIsICIsICIiKTsKKwkJcmV0dXJuIDE7CisJY2FzZSAnUyc6CQkvKiB0YWcvYnJhbmNoIGxpa2UgLS1zb3VyY2UgKi8KKwkJaWYgKCEoYy0+cHJldHR5X2N0eC0+cmV2ICYmIGMtPnByZXR0eV9jdHgtPnJldi0+c291cmNlcykpCisJCQlyZXR1cm4gMDsKKwkJc2xvdCA9IHJldmlzaW9uX3NvdXJjZXNfYXQoYy0+cHJldHR5X2N0eC0+cmV2LT5zb3VyY2VzLCBjb21taXQpOworCQlpZiAoIShzbG90ICYmICpzbG90KSkKKwkJCXJldHVybiAwOworCQlzdHJidWZfYWRkc3RyKHNiLCAqc2xvdCk7CisJCXJldHVybiAxOworCWNhc2UgJ2cnOgkJLyogcmVmbG9nIGluZm8gKi8KKwkJc3dpdGNoKHBsYWNlaG9sZGVyWzFdKSB7CisJCWNhc2UgJ2QnOgkvKiByZWZsb2cgc2VsZWN0b3IgKi8KKwkJY2FzZSAnRCc6CisJCQlpZiAoYy0+cHJldHR5X2N0eC0+cmVmbG9nX2luZm8pCisJCQkJZ2V0X3JlZmxvZ19zZWxlY3RvcihzYiwKKwkJCQkJCSAgICBjLT5wcmV0dHlfY3R4LT5yZWZsb2dfaW5mbywKKwkJCQkJCSAgICAmYy0+cHJldHR5X2N0eC0+ZGF0ZV9tb2RlLAorCQkJCQkJICAgIGMtPnByZXR0eV9jdHgtPmRhdGVfbW9kZV9leHBsaWNpdCwKKwkJCQkJCSAgICAocGxhY2Vob2xkZXJbMV0gPT0gJ2QnKSk7CisJCQlyZXR1cm4gMjsKKwkJY2FzZSAncyc6CS8qIHJlZmxvZyBtZXNzYWdlICovCisJCQlpZiAoYy0+cHJldHR5X2N0eC0+cmVmbG9nX2luZm8pCisJCQkJZ2V0X3JlZmxvZ19tZXNzYWdlKHNiLCBjLT5wcmV0dHlfY3R4LT5yZWZsb2dfaW5mbyk7CisJCQlyZXR1cm4gMjsKKwkJY2FzZSAnbic6CisJCWNhc2UgJ04nOgorCQljYXNlICdlJzoKKwkJY2FzZSAnRSc6CisJCQlyZXR1cm4gZm9ybWF0X3JlZmxvZ19wZXJzb24oc2IsCisJCQkJCQkgICAgcGxhY2Vob2xkZXJbMV0sCisJCQkJCQkgICAgYy0+cHJldHR5X2N0eC0+cmVmbG9nX2luZm8sCisJCQkJCQkgICAgJmMtPnByZXR0eV9jdHgtPmRhdGVfbW9kZSk7CisJCX0KKwkJcmV0dXJuIDA7CS8qIHVua25vd24gJWcgcGxhY2Vob2xkZXIgKi8KKwljYXNlICdOJzoKKwkJaWYgKGMtPnByZXR0eV9jdHgtPm5vdGVzX21lc3NhZ2UpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGMtPnByZXR0eV9jdHgtPm5vdGVzX21lc3NhZ2UpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHBsYWNlaG9sZGVyWzBdID09ICdHJykgeworCQlpZiAoIWMtPnNpZ25hdHVyZV9jaGVjay5yZXN1bHQpCisJCQljaGVja19jb21taXRfc2lnbmF0dXJlKGMtPmNvbW1pdCwgJihjLT5zaWduYXR1cmVfY2hlY2spKTsKKwkJc3dpdGNoIChwbGFjZWhvbGRlclsxXSkgeworCQljYXNlICdHJzoKKwkJCWlmIChjLT5zaWduYXR1cmVfY2hlY2suZ3BnX291dHB1dCkKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCBjLT5zaWduYXR1cmVfY2hlY2suZ3BnX291dHB1dCk7CisJCQlicmVhazsKKwkJY2FzZSAnPyc6CisJCQlzd2l0Y2ggKGMtPnNpZ25hdHVyZV9jaGVjay5yZXN1bHQpIHsKKwkJCWNhc2UgJ0cnOgorCQkJCXN3aXRjaCAoYy0+c2lnbmF0dXJlX2NoZWNrLnRydXN0X2xldmVsKSB7CisJCQkJY2FzZSBUUlVTVF9VTkRFRklORUQ6CisJCQkJY2FzZSBUUlVTVF9ORVZFUjoKKwkJCQkJc3RyYnVmX2FkZGNoKHNiLCAnVScpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlzdHJidWZfYWRkY2goc2IsICdHJyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgJ0InOgorCQkJY2FzZSAnRSc6CisJCQljYXNlICdOJzoKKwkJCWNhc2UgJ1gnOgorCQkJY2FzZSAnWSc6CisJCQljYXNlICdSJzoKKwkJCQlzdHJidWZfYWRkY2goc2IsIGMtPnNpZ25hdHVyZV9jaGVjay5yZXN1bHQpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1MnOgorCQkJaWYgKGMtPnNpZ25hdHVyZV9jaGVjay5zaWduZXIpCisJCQkJc3RyYnVmX2FkZHN0cihzYiwgYy0+c2lnbmF0dXJlX2NoZWNrLnNpZ25lcik7CisJCQlicmVhazsKKwkJY2FzZSAnSyc6CisJCQlpZiAoYy0+c2lnbmF0dXJlX2NoZWNrLmtleSkKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCBjLT5zaWduYXR1cmVfY2hlY2sua2V5KTsKKwkJCWJyZWFrOworCQljYXNlICdGJzoKKwkJCWlmIChjLT5zaWduYXR1cmVfY2hlY2suZmluZ2VycHJpbnQpCisJCQkJc3RyYnVmX2FkZHN0cihzYiwgYy0+c2lnbmF0dXJlX2NoZWNrLmZpbmdlcnByaW50KTsKKwkJCWJyZWFrOworCQljYXNlICdQJzoKKwkJCWlmIChjLT5zaWduYXR1cmVfY2hlY2sucHJpbWFyeV9rZXlfZmluZ2VycHJpbnQpCisJCQkJc3RyYnVmX2FkZHN0cihzYiwgYy0+c2lnbmF0dXJlX2NoZWNrLnByaW1hcnlfa2V5X2ZpbmdlcnByaW50KTsKKwkJCWJyZWFrOworCQljYXNlICdUJzoKKwkJCXN3aXRjaCAoYy0+c2lnbmF0dXJlX2NoZWNrLnRydXN0X2xldmVsKSB7CisJCQljYXNlIFRSVVNUX1VOREVGSU5FRDoKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCAidW5kZWZpbmVkIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRSVVNUX05FVkVSOgorCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJuZXZlciIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUUlVTVF9NQVJHSU5BTDoKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCAibWFyZ2luYWwiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVFJVU1RfRlVMTFk6CisJCQkJc3RyYnVmX2FkZHN0cihzYiwgImZ1bGx5Iik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRSVVNUX1VMVElNQVRFOgorCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJ1bHRpbWF0ZSIpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gMjsKKwl9CisKKworCS8qIEZvciB0aGUgcmVzdCB3ZSBoYXZlIHRvIHBhcnNlIHRoZSBjb21taXQgaGVhZGVyLiAqLworCWlmICghYy0+Y29tbWl0X2hlYWRlcl9wYXJzZWQpCisJCXBhcnNlX2NvbW1pdF9oZWFkZXIoYyk7CisKKwlzd2l0Y2ggKHBsYWNlaG9sZGVyWzBdKSB7CisJY2FzZSAnYSc6CS8qIGF1dGhvciAuLi4gKi8KKwkJcmV0dXJuIGZvcm1hdF9wZXJzb25fcGFydChzYiwgcGxhY2Vob2xkZXJbMV0sCisJCQkJICAgbXNnICsgYy0+YXV0aG9yLm9mZiwgYy0+YXV0aG9yLmxlbiwKKwkJCQkgICAmYy0+cHJldHR5X2N0eC0+ZGF0ZV9tb2RlKTsKKwljYXNlICdjJzoJLyogY29tbWl0dGVyIC4uLiAqLworCQlyZXR1cm4gZm9ybWF0X3BlcnNvbl9wYXJ0KHNiLCBwbGFjZWhvbGRlclsxXSwKKwkJCQkgICBtc2cgKyBjLT5jb21taXR0ZXIub2ZmLCBjLT5jb21taXR0ZXIubGVuLAorCQkJCSAgICZjLT5wcmV0dHlfY3R4LT5kYXRlX21vZGUpOworCWNhc2UgJ2UnOgkvKiBlbmNvZGluZyAqLworCQlpZiAoYy0+Y29tbWl0X2VuY29kaW5nKQorCQkJc3RyYnVmX2FkZHN0cihzYiwgYy0+Y29tbWl0X2VuY29kaW5nKTsKKwkJcmV0dXJuIDE7CisJY2FzZSAnQic6CS8qIHJhdyBib2R5ICovCisJCS8qIG1lc3NhZ2Vfb2ZmIGlzIGFsd2F5cyBsZWZ0IGF0IHRoZSBpbml0aWFsIG5ld2xpbmUgKi8KKwkJc3RyYnVmX2FkZHN0cihzYiwgbXNnICsgYy0+bWVzc2FnZV9vZmYgKyAxKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogTm93IHdlIG5lZWQgdG8gcGFyc2UgdGhlIGNvbW1pdCBtZXNzYWdlLiAqLworCWlmICghYy0+Y29tbWl0X21lc3NhZ2VfcGFyc2VkKQorCQlwYXJzZV9jb21taXRfbWVzc2FnZShjKTsKKworCXN3aXRjaCAocGxhY2Vob2xkZXJbMF0pIHsKKwljYXNlICdzJzoJLyogc3ViamVjdCAqLworCQlmb3JtYXRfc3ViamVjdChzYiwgbXNnICsgYy0+c3ViamVjdF9vZmYsICIgIik7CisJCXJldHVybiAxOworCWNhc2UgJ2YnOgkvKiBzYW5pdGl6ZWQgc3ViamVjdCAqLworCQlmb3JtYXRfc2FuaXRpemVkX3N1YmplY3Qoc2IsIG1zZyArIGMtPnN1YmplY3Rfb2ZmKTsKKwkJcmV0dXJuIDE7CisJY2FzZSAnYic6CS8qIGJvZHkgKi8KKwkJc3RyYnVmX2FkZHN0cihzYiwgbXNnICsgYy0+Ym9keV9vZmYpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoc2tpcF9wcmVmaXgocGxhY2Vob2xkZXIsICIodHJhaWxlcnMiLCAmYXJnKSkgeworCQlzdHJ1Y3QgcHJvY2Vzc190cmFpbGVyX29wdGlvbnMgb3B0cyA9IFBST0NFU1NfVFJBSUxFUl9PUFRJT05TX0lOSVQ7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBmaWx0ZXJfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJCXN0cnVjdCBzdHJidWYgc2VwYnVmID0gU1RSQlVGX0lOSVQ7CisJCXNpemVfdCByZXQgPSAwOworCisJCW9wdHMubm9fZGl2aWRlciA9IDE7CisKKwkJaWYgKCphcmcgPT0gJzonKSB7CisJCQlhcmcrKzsKKwkJCWZvciAoOzspIHsKKwkJCQljb25zdCBjaGFyICphcmd2YWw7CisJCQkJc2l6ZV90IGFyZ2xlbjsKKworCQkJCWlmIChtYXRjaF9wbGFjZWhvbGRlcl9hcmdfdmFsdWUoYXJnLCAia2V5IiwgJmFyZywgJmFyZ3ZhbCwgJmFyZ2xlbikpIHsKKwkJCQkJdWludHB0cl90IGxlbiA9IGFyZ2xlbjsKKworCQkJCQlpZiAoIWFyZ3ZhbCkKKwkJCQkJCWdvdG8gdHJhaWxlcl9vdXQ7CisKKwkJCQkJaWYgKGxlbiAmJiBhcmd2YWxbbGVuIC0gMV0gPT0gJzonKQorCQkJCQkJbGVuLS07CisJCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmZmlsdGVyX2xpc3QsIGFyZ3ZhbCktPnV0aWwgPSAoY2hhciAqKWxlbjsKKworCQkJCQlvcHRzLmZpbHRlciA9IGZvcm1hdF90cmFpbGVyX21hdGNoX2NiOworCQkJCQlvcHRzLmZpbHRlcl9kYXRhID0gJmZpbHRlcl9saXN0OworCQkJCQlvcHRzLm9ubHlfdHJhaWxlcnMgPSAxOworCQkJCX0gZWxzZSBpZiAobWF0Y2hfcGxhY2Vob2xkZXJfYXJnX3ZhbHVlKGFyZywgInNlcGFyYXRvciIsICZhcmcsICZhcmd2YWwsICZhcmdsZW4pKSB7CisJCQkJCWNoYXIgKmZtdDsKKworCQkJCQlzdHJidWZfcmVzZXQoJnNlcGJ1Zik7CisJCQkJCWZtdCA9IHhzdHJuZHVwKGFyZ3ZhbCwgYXJnbGVuKTsKKwkJCQkJc3RyYnVmX2V4cGFuZCgmc2VwYnVmLCBmbXQsIHN0cmJ1Zl9leHBhbmRfbGl0ZXJhbF9jYiwgTlVMTCk7CisJCQkJCWZyZWUoZm10KTsKKwkJCQkJb3B0cy5zZXBhcmF0b3IgPSAmc2VwYnVmOworCQkJCX0gZWxzZSBpZiAoIW1hdGNoX3BsYWNlaG9sZGVyX2Jvb2xfYXJnKGFyZywgIm9ubHkiLCAmYXJnLCAmb3B0cy5vbmx5X3RyYWlsZXJzKSAmJgorCQkJCQkgICAhbWF0Y2hfcGxhY2Vob2xkZXJfYm9vbF9hcmcoYXJnLCAidW5mb2xkIiwgJmFyZywgJm9wdHMudW5mb2xkKSAmJgorCQkJCQkgICAhbWF0Y2hfcGxhY2Vob2xkZXJfYm9vbF9hcmcoYXJnLCAidmFsdWVvbmx5IiwgJmFyZywgJm9wdHMudmFsdWVfb25seSkpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICgqYXJnID09ICcpJykgeworCQkJZm9ybWF0X3RyYWlsZXJzX2Zyb21fY29tbWl0KHNiLCBtc2cgKyBjLT5zdWJqZWN0X29mZiwgJm9wdHMpOworCQkJcmV0ID0gYXJnIC0gcGxhY2Vob2xkZXIgKyAxOworCQl9CisJdHJhaWxlcl9vdXQ6CisJCXN0cmluZ19saXN0X2NsZWFyKCZmaWx0ZXJfbGlzdCwgMCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzZXBidWYpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOwkvKiB1bmtub3duIHBsYWNlaG9sZGVyICovCit9CisKK3N0YXRpYyBzaXplX3QgZm9ybWF0X2FuZF9wYWRfY29tbWl0KHN0cnVjdCBzdHJidWYgKnNiLCAvKiBpbiBVVEYtOCAqLworCQkJCSAgICBjb25zdCBjaGFyICpwbGFjZWhvbGRlciwKKwkJCQkgICAgc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCAqYykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGxvY2FsX3NiID0gU1RSQlVGX0lOSVQ7CisJaW50IHRvdGFsX2NvbnN1bWVkID0gMCwgbGVuLCBwYWRkaW5nID0gYy0+cGFkZGluZzsKKwlpZiAocGFkZGluZyA8IDApIHsKKwkJY29uc3QgY2hhciAqc3RhcnQgPSBzdHJyY2hyKHNiLT5idWYsICdcbicpOworCQlpbnQgb2NjdXBpZWQ7CisJCWlmICghc3RhcnQpCisJCQlzdGFydCA9IHNiLT5idWY7CisJCW9jY3VwaWVkID0gdXRmOF9zdHJud2lkdGgoc3RhcnQsIC0xLCAxKTsKKwkJb2NjdXBpZWQgKz0gYy0+cHJldHR5X2N0eC0+Z3JhcGhfd2lkdGg7CisJCXBhZGRpbmcgPSAoLXBhZGRpbmcpIC0gb2NjdXBpZWQ7CisJfQorCXdoaWxlICgxKSB7CisJCWludCBtb2RpZmllciA9ICpwbGFjZWhvbGRlciA9PSAnQyc7CisJCWludCBjb25zdW1lZCA9IGZvcm1hdF9jb21taXRfb25lKCZsb2NhbF9zYiwgcGxhY2Vob2xkZXIsIGMpOworCQl0b3RhbF9jb25zdW1lZCArPSBjb25zdW1lZDsKKworCQlpZiAoIW1vZGlmaWVyKQorCQkJYnJlYWs7CisKKwkJcGxhY2Vob2xkZXIgKz0gY29uc3VtZWQ7CisJCWlmICgqcGxhY2Vob2xkZXIgIT0gJyUnKQorCQkJYnJlYWs7CisJCXBsYWNlaG9sZGVyKys7CisJCXRvdGFsX2NvbnN1bWVkKys7CisJfQorCWxlbiA9IHV0Zjhfc3RybndpZHRoKGxvY2FsX3NiLmJ1ZiwgLTEsIDEpOworCisJaWYgKGMtPmZsdXNoX3R5cGUgPT0gZmx1c2hfbGVmdF9hbmRfc3RlYWwpIHsKKwkJY29uc3QgY2hhciAqY2ggPSBzYi0+YnVmICsgc2ItPmxlbiAtIDE7CisJCXdoaWxlIChsZW4gPiBwYWRkaW5nICYmIGNoID4gc2ItPmJ1ZikgeworCQkJY29uc3QgY2hhciAqcDsKKwkJCWlmICgqY2ggPT0gJyAnKSB7CisJCQkJY2gtLTsKKwkJCQlwYWRkaW5nKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiBjaGVjayBmb3IgdHJhaWxpbmcgYW5zaSBzZXF1ZW5jZXMgKi8KKwkJCWlmICgqY2ggIT0gJ20nKQorCQkJCWJyZWFrOworCQkJcCA9IGNoIC0gMTsKKwkJCXdoaWxlIChjaCAtIHAgPCAxMCAmJiAqcCAhPSAnXDAzMycpCisJCQkJcC0tOworCQkJaWYgKCpwICE9ICdcMDMzJyB8fAorCQkJICAgIGNoICsgMSAtIHAgIT0gZGlzcGxheV9tb2RlX2VzY19zZXF1ZW5jZV9sZW4ocCkpCisJCQkJYnJlYWs7CisJCQkvKgorCQkJICogZ290IGEgZ29vZCBhbnNpIHNlcXVlbmNlLCBwdXQgaXQgYmFjayB0bworCQkJICogbG9jYWxfc2IgYXMgd2UncmUgY3V0dGluZyBzYgorCQkJICovCisJCQlzdHJidWZfaW5zZXJ0KCZsb2NhbF9zYiwgMCwgcCwgY2ggKyAxIC0gcCk7CisJCQljaCA9IHAgLSAxOworCQl9CisJCXN0cmJ1Zl9zZXRsZW4oc2IsIGNoICsgMSAtIHNiLT5idWYpOworCQljLT5mbHVzaF90eXBlID0gZmx1c2hfbGVmdDsKKwl9CisKKwlpZiAobGVuID4gcGFkZGluZykgeworCQlzd2l0Y2ggKGMtPnRydW5jYXRlKSB7CisJCWNhc2UgdHJ1bmNfbGVmdDoKKwkJCXN0cmJ1Zl91dGY4X3JlcGxhY2UoJmxvY2FsX3NiLAorCQkJCQkgICAgMCwgbGVuIC0gKHBhZGRpbmcgLSAyKSwKKwkJCQkJICAgICIuLiIpOworCQkJYnJlYWs7CisJCWNhc2UgdHJ1bmNfbWlkZGxlOgorCQkJc3RyYnVmX3V0ZjhfcmVwbGFjZSgmbG9jYWxfc2IsCisJCQkJCSAgICBwYWRkaW5nIC8gMiAtIDEsCisJCQkJCSAgICBsZW4gLSAocGFkZGluZyAtIDIpLAorCQkJCQkgICAgIi4uIik7CisJCQlicmVhazsKKwkJY2FzZSB0cnVuY19yaWdodDoKKwkJCXN0cmJ1Zl91dGY4X3JlcGxhY2UoJmxvY2FsX3NiLAorCQkJCQkgICAgcGFkZGluZyAtIDIsIGxlbiAtIChwYWRkaW5nIC0gMiksCisJCQkJCSAgICAiLi4iKTsKKwkJCWJyZWFrOworCQljYXNlIHRydW5jX25vbmU6CisJCQlicmVhazsKKwkJfQorCQlzdHJidWZfYWRkYnVmKHNiLCAmbG9jYWxfc2IpOworCX0gZWxzZSB7CisJCWludCBzYl9sZW4gPSBzYi0+bGVuLCBvZmZzZXQgPSAwOworCQlpZiAoYy0+Zmx1c2hfdHlwZSA9PSBmbHVzaF9sZWZ0KQorCQkJb2Zmc2V0ID0gcGFkZGluZyAtIGxlbjsKKwkJZWxzZSBpZiAoYy0+Zmx1c2hfdHlwZSA9PSBmbHVzaF9ib3RoKQorCQkJb2Zmc2V0ID0gKHBhZGRpbmcgLSBsZW4pIC8gMjsKKwkJLyoKKwkJICogd2UgY2FsY3VsYXRlIHBhZGRpbmcgaW4gY29sdW1ucywgbm93CisJCSAqIGNvbnZlcnQgaXQgYmFjayB0byBjaGFycworCQkgKi8KKwkJcGFkZGluZyA9IHBhZGRpbmcgLSBsZW4gKyBsb2NhbF9zYi5sZW47CisJCXN0cmJ1Zl9hZGRjaGFycyhzYiwgJyAnLCBwYWRkaW5nKTsKKwkJbWVtY3B5KHNiLT5idWYgKyBzYl9sZW4gKyBvZmZzZXQsIGxvY2FsX3NiLmJ1ZiwKKwkJICAgICAgIGxvY2FsX3NiLmxlbik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZsb2NhbF9zYik7CisJYy0+Zmx1c2hfdHlwZSA9IG5vX2ZsdXNoOworCXJldHVybiB0b3RhbF9jb25zdW1lZDsKK30KKworc3RhdGljIHNpemVfdCBmb3JtYXRfY29tbWl0X2l0ZW0oc3RydWN0IHN0cmJ1ZiAqc2IsIC8qIGluIFVURi04ICovCisJCQkJIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJCSB2b2lkICpjb250ZXh0KQoreworCWludCBjb25zdW1lZDsKKwlzaXplX3Qgb3JpZ19sZW47CisJZW51bSB7CisJCU5PX01BR0lDLAorCQlBRERfTEZfQkVGT1JFX05PTl9FTVBUWSwKKwkJREVMX0xGX0JFRk9SRV9FTVBUWSwKKwkJQUREX1NQX0JFRk9SRV9OT05fRU1QVFkKKwl9IG1hZ2ljID0gTk9fTUFHSUM7CisKKwlzd2l0Y2ggKHBsYWNlaG9sZGVyWzBdKSB7CisJY2FzZSAnLSc6CisJCW1hZ2ljID0gREVMX0xGX0JFRk9SRV9FTVBUWTsKKwkJYnJlYWs7CisJY2FzZSAnKyc6CisJCW1hZ2ljID0gQUREX0xGX0JFRk9SRV9OT05fRU1QVFk7CisJCWJyZWFrOworCWNhc2UgJyAnOgorCQltYWdpYyA9IEFERF9TUF9CRUZPUkVfTk9OX0VNUFRZOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJaWYgKG1hZ2ljICE9IE5PX01BR0lDKQorCQlwbGFjZWhvbGRlcisrOworCisJb3JpZ19sZW4gPSBzYi0+bGVuOworCWlmICgoKHN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgKiljb250ZXh0KS0+Zmx1c2hfdHlwZSAhPSBub19mbHVzaCkKKwkJY29uc3VtZWQgPSBmb3JtYXRfYW5kX3BhZF9jb21taXQoc2IsIHBsYWNlaG9sZGVyLCBjb250ZXh0KTsKKwllbHNlCisJCWNvbnN1bWVkID0gZm9ybWF0X2NvbW1pdF9vbmUoc2IsIHBsYWNlaG9sZGVyLCBjb250ZXh0KTsKKwlpZiAobWFnaWMgPT0gTk9fTUFHSUMpCisJCXJldHVybiBjb25zdW1lZDsKKworCWlmICgob3JpZ19sZW4gPT0gc2ItPmxlbikgJiYgbWFnaWMgPT0gREVMX0xGX0JFRk9SRV9FTVBUWSkgeworCQl3aGlsZSAoc2ItPmxlbiAmJiBzYi0+YnVmW3NiLT5sZW4gLSAxXSA9PSAnXG4nKQorCQkJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiAtIDEpOworCX0gZWxzZSBpZiAob3JpZ19sZW4gIT0gc2ItPmxlbikgeworCQlpZiAobWFnaWMgPT0gQUREX0xGX0JFRk9SRV9OT05fRU1QVFkpCisJCQlzdHJidWZfaW5zZXJ0c3RyKHNiLCBvcmlnX2xlbiwgIlxuIik7CisJCWVsc2UgaWYgKG1hZ2ljID09IEFERF9TUF9CRUZPUkVfTk9OX0VNUFRZKQorCQkJc3RyYnVmX2luc2VydHN0cihzYiwgb3JpZ19sZW4sICIgIik7CisJfQorCXJldHVybiBjb25zdW1lZCArIDE7Cit9CisKK3N0YXRpYyBzaXplX3QgdXNlcmZvcm1hdF93YW50X2l0ZW0oc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJCSAgIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHVzZXJmb3JtYXRfd2FudCAqdyA9IGNvbnRleHQ7CisKKwlpZiAoKnBsYWNlaG9sZGVyID09ICcrJyB8fCAqcGxhY2Vob2xkZXIgPT0gJy0nIHx8ICpwbGFjZWhvbGRlciA9PSAnICcpCisJCXBsYWNlaG9sZGVyKys7CisKKwlzd2l0Y2ggKCpwbGFjZWhvbGRlcikgeworCWNhc2UgJ04nOgorCQl3LT5ub3RlcyA9IDE7CisJCWJyZWFrOworCWNhc2UgJ1MnOgorCQl3LT5zb3VyY2UgPSAxOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdXNlcmZvcm1hdF9maW5kX3JlcXVpcmVtZW50cyhjb25zdCBjaGFyICpmbXQsIHN0cnVjdCB1c2VyZm9ybWF0X3dhbnQgKncpCit7CisJc3RydWN0IHN0cmJ1ZiBkdW1teSA9IFNUUkJVRl9JTklUOworCisJaWYgKCFmbXQpIHsKKwkJaWYgKCF1c2VyX2Zvcm1hdCkKKwkJCXJldHVybjsKKwkJZm10ID0gdXNlcl9mb3JtYXQ7CisJfQorCXN0cmJ1Zl9leHBhbmQoJmR1bW15LCBmbXQsIHVzZXJmb3JtYXRfd2FudF9pdGVtLCB3KTsKKwlzdHJidWZfcmVsZWFzZSgmZHVtbXkpOworfQorCit2b2lkIHJlcG9fZm9ybWF0X2NvbW1pdF9tZXNzYWdlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCWNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQljb25zdCBjaGFyICpmb3JtYXQsIHN0cnVjdCBzdHJidWYgKnNiLAorCQkJCWNvbnN0IHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHJldHR5X2N0eCkKK3sKKwlzdHJ1Y3QgZm9ybWF0X2NvbW1pdF9jb250ZXh0IGNvbnRleHQgPSB7CisJCS5jb21taXQgPSBjb21taXQsCisJCS5wcmV0dHlfY3R4ID0gcHJldHR5X2N0eCwKKwkJLndyYXBfc3RhcnQgPSBzYi0+bGVuCisJfTsKKwljb25zdCBjaGFyICpvdXRwdXRfZW5jID0gcHJldHR5X2N0eC0+b3V0cHV0X2VuY29kaW5nOworCWNvbnN0IGNoYXIgKnV0ZjggPSAiVVRGLTgiOworCisJLyoKKwkgKiBjb252ZXJ0IGEgY29tbWl0IG1lc3NhZ2UgdG8gVVRGLTggZmlyc3QKKwkgKiBhcyBmYXIgYXMgJ2Zvcm1hdF9jb21taXRfaXRlbScgYXNzdW1lcyBpdCBpbiBVVEYtOAorCSAqLworCWNvbnRleHQubWVzc2FnZSA9IHJlcG9fbG9nbXNnX3JlZW5jb2RlKHIsIGNvbW1pdCwKKwkJCQkJICAgICAgICZjb250ZXh0LmNvbW1pdF9lbmNvZGluZywKKwkJCQkJICAgICAgIHV0ZjgpOworCisJc3RyYnVmX2V4cGFuZChzYiwgZm9ybWF0LCBmb3JtYXRfY29tbWl0X2l0ZW0sICZjb250ZXh0KTsKKwlyZXdyYXBfbWVzc2FnZV90YWlsKHNiLCAmY29udGV4dCwgMCwgMCwgMCk7CisKKwkvKiB0aGVuIGNvbnZlcnQgYSBjb21taXQgbWVzc2FnZSB0byBhbiBhY3R1YWwgb3V0cHV0IGVuY29kaW5nICovCisJaWYgKG91dHB1dF9lbmMpIHsKKwkJaWYgKHNhbWVfZW5jb2RpbmcodXRmOCwgb3V0cHV0X2VuYykpCisJCQlvdXRwdXRfZW5jID0gTlVMTDsKKwl9IGVsc2UgeworCQlpZiAoY29udGV4dC5jb21taXRfZW5jb2RpbmcgJiYKKwkJICAgICFzYW1lX2VuY29kaW5nKGNvbnRleHQuY29tbWl0X2VuY29kaW5nLCB1dGY4KSkKKwkJCW91dHB1dF9lbmMgPSBjb250ZXh0LmNvbW1pdF9lbmNvZGluZzsKKwl9CisKKwlpZiAob3V0cHV0X2VuYykgeworCQlzaXplX3Qgb3V0c3o7CisJCWNoYXIgKm91dCA9IHJlZW5jb2RlX3N0cmluZ19sZW4oc2ItPmJ1Ziwgc2ItPmxlbiwKKwkJCQkJCW91dHB1dF9lbmMsIHV0ZjgsICZvdXRzeik7CisJCWlmIChvdXQpCisJCQlzdHJidWZfYXR0YWNoKHNiLCBvdXQsIG91dHN6LCBvdXRzeiArIDEpOworCX0KKworCWZyZWUoY29udGV4dC5jb21taXRfZW5jb2RpbmcpOworCXJlcG9fdW51c2VfY29tbWl0X2J1ZmZlcihyLCBjb21taXQsIGNvbnRleHQubWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBwX2hlYWRlcihzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKwkJICAgICAgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkgICAgICBjb25zdCBjaGFyICoqbXNnX3AsCisJCSAgICAgIHN0cnVjdCBzdHJidWYgKnNiKQoreworCWludCBwYXJlbnRzX3Nob3duID0gMDsKKworCWZvciAoOzspIHsKKwkJY29uc3QgY2hhciAqbmFtZSwgKmxpbmUgPSAqbXNnX3A7CisJCWludCBsaW5lbGVuID0gZ2V0X29uZV9saW5lKCptc2dfcCk7CisKKwkJaWYgKCFsaW5lbGVuKQorCQkJcmV0dXJuOworCQkqbXNnX3AgKz0gbGluZWxlbjsKKworCQlpZiAobGluZWxlbiA9PSAxKQorCQkJLyogRW5kIG9mIGhlYWRlciAqLworCQkJcmV0dXJuOworCisJCWlmIChwcC0+Zm10ID09IENNSVRfRk1UX1JBVykgeworCQkJc3RyYnVmX2FkZChzYiwgbGluZSwgbGluZWxlbik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChzdGFydHNfd2l0aChsaW5lLCAicGFyZW50ICIpKSB7CisJCQlpZiAobGluZWxlbiAhPSB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDgpCisJCQkJZGllKCJiYWQgcGFyZW50IGxpbmUgaW4gY29tbWl0Iik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghcGFyZW50c19zaG93bikgeworCQkJdW5zaWduZWQgbnVtID0gY29tbWl0X2xpc3RfY291bnQoY29tbWl0LT5wYXJlbnRzKTsKKwkJCS8qIHdpdGggZW5vdWdoIHNsb3AgKi8KKwkJCXN0cmJ1Zl9ncm93KHNiLCBudW0gKiAoR0lUX01BWF9IRVhTWiArIDEwKSArIDIwKTsKKwkJCWFkZF9tZXJnZV9pbmZvKHBwLCBzYiwgY29tbWl0KTsKKwkJCXBhcmVudHNfc2hvd24gPSAxOworCQl9CisKKwkJLyoKKwkJICogTUVESVVNID09IERFRkFVTFQgc2hvd3Mgb25seSBhdXRob3Igd2l0aCBkYXRlcy4KKwkJICogRlVMTCBzaG93cyBib3RoIGF1dGhvcnMgYnV0IG5vdCBkYXRlcy4KKwkJICogRlVMTEVSIHNob3dzIGJvdGggYXV0aG9ycyBhbmQgZGF0ZXMuCisJCSAqLworCQlpZiAoc2tpcF9wcmVmaXgobGluZSwgImF1dGhvciAiLCAmbmFtZSkpIHsKKwkJCXN0cmJ1Zl9ncm93KHNiLCBsaW5lbGVuICsgODApOworCQkJcHBfdXNlcl9pbmZvKHBwLCAiQXV0aG9yIiwgc2IsIG5hbWUsIGVuY29kaW5nKTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgobGluZSwgImNvbW1pdHRlciAiLCAmbmFtZSkgJiYKKwkJICAgIChwcC0+Zm10ID09IENNSVRfRk1UX0ZVTEwgfHwgcHAtPmZtdCA9PSBDTUlUX0ZNVF9GVUxMRVIpKSB7CisJCQlzdHJidWZfZ3JvdyhzYiwgbGluZWxlbiArIDgwKTsKKwkJCXBwX3VzZXJfaW5mbyhwcCwgIkNvbW1pdCIsIHNiLCBuYW1lLCBlbmNvZGluZyk7CisJCX0KKwl9Cit9CisKK3ZvaWQgcHBfdGl0bGVfbGluZShzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkgICBjb25zdCBjaGFyICoqbXNnX3AsCisJCSAgIHN0cnVjdCBzdHJidWYgKnNiLAorCQkgICBjb25zdCBjaGFyICplbmNvZGluZywKKwkJICAgaW50IG5lZWRfOGJpdF9jdGUpCit7CisJc3RhdGljIGNvbnN0IGludCBtYXhfbGVuZ3RoID0gNzg7IC8qIHBlciByZmMyMDQ3ICovCisJc3RydWN0IHN0cmJ1ZiB0aXRsZTsKKworCXN0cmJ1Zl9pbml0KCZ0aXRsZSwgODApOworCSptc2dfcCA9IGZvcm1hdF9zdWJqZWN0KCZ0aXRsZSwgKm1zZ19wLAorCQkJCXBwLT5wcmVzZXJ2ZV9zdWJqZWN0ID8gIlxuIiA6ICIgIik7CisKKwlzdHJidWZfZ3JvdyhzYiwgdGl0bGUubGVuICsgMTAyNCk7CisJaWYgKHBwLT5wcmludF9lbWFpbF9zdWJqZWN0KSB7CisJCWlmIChwcC0+cmV2KQorCQkJZm10X291dHB1dF9lbWFpbF9zdWJqZWN0KHNiLCBwcC0+cmV2KTsKKwkJaWYgKHBwLT5lbmNvZGVfZW1haWxfaGVhZGVycyAmJgorCQkgICAgbmVlZHNfcmZjMjA0N19lbmNvZGluZyh0aXRsZS5idWYsIHRpdGxlLmxlbikpCisJCQlhZGRfcmZjMjA0NyhzYiwgdGl0bGUuYnVmLCB0aXRsZS5sZW4sCisJCQkJCQllbmNvZGluZywgUkZDMjA0N19TVUJKRUNUKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZF93cmFwcGVkX2J5dGVzKHNiLCB0aXRsZS5idWYsIHRpdGxlLmxlbiwKKwkJCQkJIC1sYXN0X2xpbmVfbGVuZ3RoKHNiKSwgMSwgbWF4X2xlbmd0aCk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZGJ1ZihzYiwgJnRpdGxlKTsKKwl9CisJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKworCWlmIChuZWVkXzhiaXRfY3RlID09IDApIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBwcC0+aW5fYm9keV9oZWFkZXJzLm5yOyBpKyspIHsKKwkJCWlmIChoYXNfbm9uX2FzY2lpKHBwLT5pbl9ib2R5X2hlYWRlcnMuaXRlbXNbaV0uc3RyaW5nKSkgeworCQkJCW5lZWRfOGJpdF9jdGUgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKG5lZWRfOGJpdF9jdGUgPiAwKSB7CisJCWNvbnN0IGNoYXIgKmhlYWRlcl9mbXQgPQorCQkJIk1JTUUtVmVyc2lvbjogMS4wXG4iCisJCQkiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSVzXG4iCisJCQkiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIjsKKwkJc3RyYnVmX2FkZGYoc2IsIGhlYWRlcl9mbXQsIGVuY29kaW5nKTsKKwl9CisJaWYgKHBwLT5hZnRlcl9zdWJqZWN0KSB7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHBwLT5hZnRlcl9zdWJqZWN0KTsKKwl9CisJaWYgKGNtaXRfZm10X2lzX21haWwocHAtPmZtdCkpIHsKKwkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKwl9CisKKwlpZiAocHAtPmluX2JvZHlfaGVhZGVycy5ucikgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IHBwLT5pbl9ib2R5X2hlYWRlcnMubnI7IGkrKykgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgcHAtPmluX2JvZHlfaGVhZGVycy5pdGVtc1tpXS5zdHJpbmcpOworCQkJZnJlZShwcC0+aW5fYm9keV9oZWFkZXJzLml0ZW1zW2ldLnN0cmluZyk7CisJCX0KKwkJc3RyaW5nX2xpc3RfY2xlYXIoJnBwLT5pbl9ib2R5X2hlYWRlcnMsIDApOworCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZ0aXRsZSk7Cit9CisKK3N0YXRpYyBpbnQgcHBfdXRmOF93aWR0aChjb25zdCBjaGFyICpzdGFydCwgY29uc3QgY2hhciAqZW5kKQoreworCWludCB3aWR0aCA9IDA7CisJc2l6ZV90IHJlbWFpbiA9IGVuZCAtIHN0YXJ0OworCisJd2hpbGUgKHJlbWFpbikgeworCQlpbnQgbiA9IHV0Zjhfd2lkdGgoJnN0YXJ0LCAmcmVtYWluKTsKKwkJaWYgKG4gPCAwIHx8ICFzdGFydCkKKwkJCXJldHVybiAtMTsKKwkJd2lkdGggKz0gbjsKKwl9CisJcmV0dXJuIHdpZHRoOworfQorCitzdGF0aWMgdm9pZCBzdHJidWZfYWRkX3RhYmV4cGFuZChzdHJ1Y3Qgc3RyYnVmICpzYiwgaW50IHRhYndpZHRoLAorCQkJCSBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGluZWxlbikKK3sKKwljb25zdCBjaGFyICp0YWI7CisKKwl3aGlsZSAoKHRhYiA9IG1lbWNocihsaW5lLCAnXHQnLCBsaW5lbGVuKSkgIT0gTlVMTCkgeworCQlpbnQgd2lkdGggPSBwcF91dGY4X3dpZHRoKGxpbmUsIHRhYik7CisKKwkJLyoKKwkJICogSWYgaXQgd2Fzbid0IHdlbGwtZm9ybWVkIHV0ZjgsIG9yIGl0CisJCSAqIGhhZCBjaGFyYWN0ZXJzIHdpdGggYmFkbHkgZGVmaW5lZAorCQkgKiB3aWR0aCAoY29udHJvbCBjaGFyYWN0ZXJzIGV0YyksIGp1c3QKKwkJICogZ2l2ZSB1cCBvbiB0cnlpbmcgdG8gYWxpZ24gdGhpbmdzLgorCQkgKi8KKwkJaWYgKHdpZHRoIDwgMCkKKwkJCWJyZWFrOworCisJCS8qIE91dHB1dCB0aGUgZGF0YSAuLiAqLworCQlzdHJidWZfYWRkKHNiLCBsaW5lLCB0YWIgLSBsaW5lKTsKKworCQkvKiAuLiBhbmQgdGhlIGRlLXRhYmlmaWVkIHRhYiAqLworCQlzdHJidWZfYWRkY2hhcnMoc2IsICcgJywgdGFid2lkdGggLSAod2lkdGggJSB0YWJ3aWR0aCkpOworCisJCS8qIFNraXAgb3ZlciB0aGUgcHJpbnRlZCBwYXJ0IC4uICovCisJCWxpbmVsZW4gLT0gdGFiICsgMSAtIGxpbmU7CisJCWxpbmUgPSB0YWIgKyAxOworCX0KKworCS8qCisJICogUHJpbnQgb3V0IGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3QgdGFiIHdpdGhvdXQKKwkgKiB3b3JyeWluZyBhYm91dCB3aWR0aCAtIHRoZXJlJ3Mgbm90aGluZyBtb3JlIHRvCisJICogYWxpZ24uCisJICovCisJc3RyYnVmX2FkZChzYiwgbGluZSwgbGluZWxlbik7Cit9CisKKy8qCisgKiBwcF9oYW5kbGVfaW5kZW50KCkgcHJpbnRzIG91dCB0aGUgaW50ZW5kYXRpb24sIGFuZAorICogdGhlIHdob2xlIGxpbmUgKHdpdGhvdXQgdGhlIGZpbmFsIG5ld2xpbmUpLCBhZnRlcgorICogZGUtdGFiaWZ5aW5nLgorICovCitzdGF0aWMgdm9pZCBwcF9oYW5kbGVfaW5kZW50KHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgaW5kZW50LAorCQkJICAgICBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGluZWxlbikKK3sKKwlzdHJidWZfYWRkY2hhcnMoc2IsICcgJywgaW5kZW50KTsKKwlpZiAocHAtPmV4cGFuZF90YWJzX2luX2xvZykKKwkJc3RyYnVmX2FkZF90YWJleHBhbmQoc2IsIHBwLT5leHBhbmRfdGFic19pbl9sb2csIGxpbmUsIGxpbmVsZW4pOworCWVsc2UKKwkJc3RyYnVmX2FkZChzYiwgbGluZSwgbGluZWxlbik7Cit9CisKK3N0YXRpYyBpbnQgaXNfbWJveHJkX2Zyb20oY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwkvKgorCSAqIGEgbGluZSBtYXRjaGluZyAvXkZyb20gJC8gaGVyZSB3b3VsZCBvbmx5IGhhdmUgbGVuID09IDQKKwkgKiBhdCB0aGlzIHBvaW50IGJlY2F1c2UgaXNfZW1wdHlfbGluZSB3b3VsZCd2ZSB0cmltbWVkIGFsbAorCSAqIHRyYWlsaW5nIHNwYWNlCisJICovCisJcmV0dXJuIGxlbiA+IDQgJiYgc3RhcnRzX3dpdGgobGluZSArIHN0cnNwbihsaW5lLCAiPiIpLCAiRnJvbSAiKTsKK30KKwordm9pZCBwcF9yZW1haW5kZXIoc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJICBjb25zdCBjaGFyICoqbXNnX3AsCisJCSAgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCSAgaW50IGluZGVudCkKK3sKKwlpbnQgZmlyc3QgPSAxOworCWZvciAoOzspIHsKKwkJY29uc3QgY2hhciAqbGluZSA9ICptc2dfcDsKKwkJaW50IGxpbmVsZW4gPSBnZXRfb25lX2xpbmUobGluZSk7CisJCSptc2dfcCArPSBsaW5lbGVuOworCisJCWlmICghbGluZWxlbikKKwkJCWJyZWFrOworCisJCWlmIChpc19ibGFua19saW5lKGxpbmUsICZsaW5lbGVuKSkgeworCQkJaWYgKGZpcnN0KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfU0hPUlQpCisJCQkJYnJlYWs7CisJCX0KKwkJZmlyc3QgPSAwOworCisJCXN0cmJ1Zl9ncm93KHNiLCBsaW5lbGVuICsgaW5kZW50ICsgMjApOworCQlpZiAoaW5kZW50KQorCQkJcHBfaGFuZGxlX2luZGVudChwcCwgc2IsIGluZGVudCwgbGluZSwgbGluZWxlbik7CisJCWVsc2UgaWYgKHBwLT5leHBhbmRfdGFic19pbl9sb2cpCisJCQlzdHJidWZfYWRkX3RhYmV4cGFuZChzYiwgcHAtPmV4cGFuZF90YWJzX2luX2xvZywKKwkJCQkJICAgICBsaW5lLCBsaW5lbGVuKTsKKwkJZWxzZSB7CisJCQlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9NQk9YUkQgJiYKKwkJCQkJaXNfbWJveHJkX2Zyb20obGluZSwgbGluZWxlbikpCisJCQkJc3RyYnVmX2FkZGNoKHNiLCAnPicpOworCisJCQlzdHJidWZfYWRkKHNiLCBsaW5lLCBsaW5lbGVuKTsKKwkJfQorCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCX0KK30KKwordm9pZCBwcmV0dHlfcHJpbnRfY29tbWl0KHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCisJCQkgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJIHN0cnVjdCBzdHJidWYgKnNiKQoreworCXVuc2lnbmVkIGxvbmcgYmVnaW5uaW5nX29mX2JvZHk7CisJaW50IGluZGVudCA9IDQ7CisJY29uc3QgY2hhciAqbXNnOworCWNvbnN0IGNoYXIgKnJlZW5jb2RlZDsKKwljb25zdCBjaGFyICplbmNvZGluZzsKKwlpbnQgbmVlZF84Yml0X2N0ZSA9IHBwLT5uZWVkXzhiaXRfY3RlOworCisJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfVVNFUkZPUk1BVCkgeworCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCB1c2VyX2Zvcm1hdCwgc2IsIHBwKTsKKwkJcmV0dXJuOworCX0KKworCWVuY29kaW5nID0gZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKTsKKwltc2cgPSByZWVuY29kZWQgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZyk7CisKKwlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9PTkVMSU5FIHx8IGNtaXRfZm10X2lzX21haWwocHAtPmZtdCkpCisJCWluZGVudCA9IDA7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gY2hlY2sgYW5kIGVtaXQgQ29udGVudC10eXBlOiB0byBtYXJrIGl0CisJICogYXMgOC1iaXQgaWYgd2UgaGF2ZW4ndCBkb25lIHNvLgorCSAqLworCWlmIChjbWl0X2ZtdF9pc19tYWlsKHBwLT5mbXQpICYmIG5lZWRfOGJpdF9jdGUgPT0gMCkgeworCQlpbnQgaSwgY2gsIGluX2JvZHk7CisKKwkJZm9yIChpbl9ib2R5ID0gaSA9IDA7IChjaCA9IG1zZ1tpXSk7IGkrKykgeworCQkJaWYgKCFpbl9ib2R5KSB7CisJCQkJLyogYXV0aG9yIGNvdWxkIGJlIG5vbiA3LWJpdCBBU0NJSSBidXQKKwkJCQkgKiB0aGUgbG9nIG1heSBiZSBzbzsgc2tpcCBvdmVyIHRoZQorCQkJCSAqIGhlYWRlciBwYXJ0IGZpcnN0LgorCQkJCSAqLworCQkJCWlmIChjaCA9PSAnXG4nICYmIG1zZ1tpKzFdID09ICdcbicpCisJCQkJCWluX2JvZHkgPSAxOworCQkJfQorCQkJZWxzZSBpZiAobm9uX2FzY2lpKGNoKSkgeworCQkJCW5lZWRfOGJpdF9jdGUgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcHBfaGVhZGVyKHBwLCBlbmNvZGluZywgY29tbWl0LCAmbXNnLCBzYik7CisJaWYgKHBwLT5mbXQgIT0gQ01JVF9GTVRfT05FTElORSAmJiAhcHAtPnByaW50X2VtYWlsX3N1YmplY3QpIHsKKwkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKwl9CisKKwkvKiBTa2lwIGV4Y2VzcyBibGFuayBsaW5lcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGJvZHksIGlmIGFueS4uLiAqLworCW1zZyA9IHNraXBfYmxhbmtfbGluZXMobXNnKTsKKworCS8qIFRoZXNlIGZvcm1hdHMgdHJlYXQgdGhlIHRpdGxlIGxpbmUgc3BlY2lhbGx5LiAqLworCWlmIChwcC0+Zm10ID09IENNSVRfRk1UX09ORUxJTkUgfHwgY21pdF9mbXRfaXNfbWFpbChwcC0+Zm10KSkKKwkJcHBfdGl0bGVfbGluZShwcCwgJm1zZywgc2IsIGVuY29kaW5nLCBuZWVkXzhiaXRfY3RlKTsKKworCWJlZ2lubmluZ19vZl9ib2R5ID0gc2ItPmxlbjsKKwlpZiAocHAtPmZtdCAhPSBDTUlUX0ZNVF9PTkVMSU5FKQorCQlwcF9yZW1haW5kZXIocHAsICZtc2csIHNiLCBpbmRlbnQpOworCXN0cmJ1Zl9ydHJpbShzYik7CisKKwkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgYW4gRU9MTiBmb3IgdGhlIG5vbi1vbmVsaW5lIGNhc2UgKi8KKwlpZiAocHAtPmZtdCAhPSBDTUlUX0ZNVF9PTkVMSU5FKQorCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCisJLyoKKwkgKiBUaGUgY2FsbGVyIG1heSBhcHBlbmQgYWRkaXRpb25hbCBib2R5IHRleHQgaW4gZS1tYWlsCisJICogZm9ybWF0LiAgTWFrZSBzdXJlIHdlIGRpZCBub3Qgc3RyaXAgdGhlIGJsYW5rIGxpbmUKKwkgKiBiZXR3ZWVuIHRoZSBoZWFkZXIgYW5kIHRoZSBib2R5LgorCSAqLworCWlmIChjbWl0X2ZtdF9pc19tYWlsKHBwLT5mbXQpICYmIHNiLT5sZW4gPD0gYmVnaW5uaW5nX29mX2JvZHkpCisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CisKKwl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgcmVlbmNvZGVkKTsKK30KKwordm9pZCBwcF9jb21taXRfZWFzeShlbnVtIGNtaXRfZm10IGZtdCwgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkgICAgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHBwID0gezB9OworCXBwLmZtdCA9IGZtdDsKKwlwcmV0dHlfcHJpbnRfY29tbWl0KCZwcCwgY29tbWl0LCBzYik7Cit9CmRpZmYgLS1naXQgYS9wcmV0dHkuaCBiL3ByZXR0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MWYyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9wcmV0dHkuaApAQCAtMCwwICsxLDE0MiBAQAorI2lmbmRlZiBQUkVUVFlfSAorI2RlZmluZSBQUkVUVFlfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCitzdHJ1Y3QgY29tbWl0Oworc3RydWN0IHN0cmJ1ZjsKKworLyogQ29tbWl0IGZvcm1hdHMgKi8KK2VudW0gY21pdF9mbXQgeworCUNNSVRfRk1UX1JBVywKKwlDTUlUX0ZNVF9NRURJVU0sCisJQ01JVF9GTVRfREVGQVVMVCA9IENNSVRfRk1UX01FRElVTSwKKwlDTUlUX0ZNVF9TSE9SVCwKKwlDTUlUX0ZNVF9GVUxMLAorCUNNSVRfRk1UX0ZVTExFUiwKKwlDTUlUX0ZNVF9PTkVMSU5FLAorCUNNSVRfRk1UX0VNQUlMLAorCUNNSVRfRk1UX01CT1hSRCwKKwlDTUlUX0ZNVF9VU0VSRk9STUFULAorCisJQ01JVF9GTVRfVU5TUEVDSUZJRUQKK307CisKK3N0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCB7CisJLyoKKwkgKiBDYWxsZXJzIHNob3VsZCB0d2VhayB0aGVzZSB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHBwXyogZnVuY3Rpb25zLgorCSAqLworCWVudW0gY21pdF9mbXQgZm10OworCWludCBhYmJyZXY7CisJY29uc3QgY2hhciAqYWZ0ZXJfc3ViamVjdDsKKwlpbnQgcHJlc2VydmVfc3ViamVjdDsKKwlzdHJ1Y3QgZGF0ZV9tb2RlIGRhdGVfbW9kZTsKKwl1bnNpZ25lZCBkYXRlX21vZGVfZXhwbGljaXQ6MTsKKwlpbnQgcHJpbnRfZW1haWxfc3ViamVjdDsKKwlpbnQgZXhwYW5kX3RhYnNfaW5fbG9nOworCWludCBuZWVkXzhiaXRfY3RlOworCWNoYXIgKm5vdGVzX21lc3NhZ2U7CisJc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvOworCXN0cnVjdCByZXZfaW5mbyAqcmV2OworCWNvbnN0IGNoYXIgKm91dHB1dF9lbmNvZGluZzsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1haWxtYXA7CisJaW50IGNvbG9yOworCXN0cnVjdCBpZGVudF9zcGxpdCAqZnJvbV9pZGVudDsKKwl1bnNpZ25lZCBlbmNvZGVfZW1haWxfaGVhZGVyczoxOworCisJLyoKKwkgKiBGaWVsZHMgYmVsb3cgaGVyZSBhcmUgbWFuaXB1bGF0ZWQgaW50ZXJuYWxseSBieSBwcF8qIGZ1bmN0aW9ucyBhbmQKKwkgKiBzaG91bGQgbm90IGJlIGNvdW50ZWQgb24gYnkgY2FsbGVycy4KKwkgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgaW5fYm9keV9oZWFkZXJzOworCWludCBncmFwaF93aWR0aDsKK307CisKKy8qIENoZWNrIHdoZXRoZXIgY29tbWl0IGZvcm1hdCBpcyBtYWlsLiAqLworc3RhdGljIGlubGluZSBpbnQgY21pdF9mbXRfaXNfbWFpbChlbnVtIGNtaXRfZm10IGZtdCkKK3sKKwlyZXR1cm4gKGZtdCA9PSBDTUlUX0ZNVF9FTUFJTCB8fCBmbXQgPT0gQ01JVF9GTVRfTUJPWFJEKTsKK30KKworc3RydWN0IHVzZXJmb3JtYXRfd2FudCB7CisJdW5zaWduZWQgbm90ZXM6MTsKKwl1bnNpZ25lZCBzb3VyY2U6MTsKK307CisKKy8qIFNldCB0aGUgZmxhZyAidy0+bm90ZXMiIGlmIHRoZXJlIGlzIHBsYWNlaG9sZGVyICVOIGluICJmbXQiLiAqLwordm9pZCB1c2VyZm9ybWF0X2ZpbmRfcmVxdWlyZW1lbnRzKGNvbnN0IGNoYXIgKmZtdCwgc3RydWN0IHVzZXJmb3JtYXRfd2FudCAqdyk7CisKKy8qCisgKiBTaG9ydGN1dCBmb3IgaW52b2tpbmcgcHJldHR5X3ByaW50X2NvbW1pdCBpZiB3ZSBkbyBub3QgaGF2ZSBhbnkgY29udGV4dC4KKyAqIENvbnRleHQgd291bGQgYmUgc2V0IGVtcHR5IGV4Y2VwdCAiZm10Ii4KKyAqLwordm9pZCBwcF9jb21taXRfZWFzeShlbnVtIGNtaXRfZm10IGZtdCwgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJc3RydWN0IHN0cmJ1ZiAqc2IpOworCisvKgorICogR2V0IGluZm9ybWF0aW9uIGFib3V0IHVzZXIgYW5kIGRhdGUgZnJvbSAibGluZSIsIGZvcm1hdCBpdCBhbmQKKyAqIHB1dCBpdCBpbnRvICJzYiIuCisgKiBGb3JtYXQgb2YgImxpbmUiIG11c3QgYmUgcmVhZGFibGUgZm9yIHNwbGl0X2lkZW50X2xpbmUgZnVuY3Rpb24uCisgKiBUaGUgcmVzdWx0aW5nIGZvcm1hdCBpcyAid2hhdDogbmFtZSA8ZW1haWw+IGRhdGUiLgorICovCit2b2lkIHBwX3VzZXJfaW5mbyhzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLCBjb25zdCBjaGFyICp3aGF0LAorCQkJc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmxpbmUsCisJCQljb25zdCBjaGFyICplbmNvZGluZyk7CisKKy8qCisgKiBGb3JtYXQgdGl0bGUgbGluZSBvZiBjb21taXQgbWVzc2FnZSB0YWtlbiBmcm9tICJtc2dfcCIgYW5kCisgKiBwdXQgaXQgaW50byAic2IiLgorICogRmlyc3QgbGluZSBvZiAibXNnX3AiIGlzIGFsc28gYWZmZWN0ZWQuCisgKi8KK3ZvaWQgcHBfdGl0bGVfbGluZShzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLCBjb25zdCBjaGFyICoqbXNnX3AsCisJCQlzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZW5jb2RpbmcsCisJCQlpbnQgbmVlZF84Yml0X2N0ZSk7CisKKy8qCisgKiBHZXQgY3VycmVudCBzdGF0ZSBvZiBjb21taXQgbWVzc2FnZSBmcm9tICJtc2dfcCIgYW5kIGNvbnRpbnVlIGZvcm1hdHRpbmcKKyAqIGJ5IGFkZGluZyBpbmRlbnRhdGlvbiBhbmQgJz4nIHNpZ25zLiBQdXQgcmVzdWx0IGludG8gInNiIi4KKyAqLwordm9pZCBwcF9yZW1haW5kZXIoc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwgY29uc3QgY2hhciAqKm1zZ19wLAorCQkJc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBpbmRlbnQpOworCisvKgorICogQ3JlYXRlIGEgdGV4dCBtZXNzYWdlIGFib3V0IGNvbW1pdCB1c2luZyBnaXZlbiAiZm9ybWF0IiBhbmQgImNvbnRleHQiLgorICogUHV0IHRoZSByZXN1bHQgdG8gInNiIi4KKyAqIFBsZWFzZSB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgY3VzdG9tIGZvcm1hdHMuCisgKi8KK3ZvaWQgcmVwb19mb3JtYXRfY29tbWl0X21lc3NhZ2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQljb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQljb25zdCBjaGFyICpmb3JtYXQsIHN0cnVjdCBzdHJidWYgKnNiLAorCQkJY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpjb250ZXh0KTsKKyNpZm5kZWYgTk9fVEhFX1JFUE9TSVRPUllfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNkZWZpbmUgZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGMsIGYsIHMsIGNvbikgXAorCXJlcG9fZm9ybWF0X2NvbW1pdF9tZXNzYWdlKHRoZV9yZXBvc2l0b3J5LCBjLCBmLCBzLCBjb24pCisjZW5kaWYKKworLyoKKyAqIFBhcnNlIGdpdmVuIGFyZ3VtZW50cyBmcm9tICJhcmciLCBjaGVjayBpdCBmb3IgY29ycmVjdG5lc3MgYW5kCisgKiBmaWxsIHN0cnVjdCByZXZfaW5mby4KKyAqLwordm9pZCBnZXRfY29tbWl0X2Zvcm1hdChjb25zdCBjaGFyICphcmcsIHN0cnVjdCByZXZfaW5mbyAqKTsKKworLyoKKyAqIE1ha2UgYSBjb21taXQgbWVzc2FnZSB3aXRoIGFsbCBydWxlcyBmcm9tIGdpdmVuICJwcCIKKyAqIGFuZCBwdXQgaXQgaW50byAic2IiLgorICogUGxlYXNlIHVzZSB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBoYXZlIGEgY29udGV4dCAoY2FuZGlkYXRlIGZvciAicHAiKS4KKyAqLwordm9pZCBwcmV0dHlfcHJpbnRfY29tbWl0KHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCisJCQljb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQlzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qCisgKiBDaGFuZ2UgbGluZSBicmVha3MgaW4gIm1zZyIgdG8gImxpbmVfc2VwYXJhdG9yIiBhbmQgcHV0IGl0IGludG8gInNiIi4KKyAqIFJldHVybiAibXNnIiBpdHNlbGYuCisgKi8KK2NvbnN0IGNoYXIgKmZvcm1hdF9zdWJqZWN0KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICptc2csCisJCQljb25zdCBjaGFyICpsaW5lX3NlcGFyYXRvcik7CisKKy8qIENoZWNrIGlmICJjbWl0X2ZtdCIgd2lsbCBwcm9kdWNlIGFuIGVtcHR5IG91dHB1dC4gKi8KK2ludCBjb21taXRfZm9ybWF0X2lzX2VtcHR5KGVudW0gY21pdF9mbXQpOworCisjZW5kaWYgLyogUFJFVFRZX0ggKi8KZGlmZiAtLWdpdCBhL3ByaW8tcXVldWUuYyBiL3ByaW8tcXVldWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Y0ODhjCi0tLSAvZGV2L251bGwKKysrIGIvcHJpby1xdWV1ZS5jCkBAIC0wLDAgKzEsOTYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKKworc3RhdGljIGlubGluZSBpbnQgY29tcGFyZShzdHJ1Y3QgcHJpb19xdWV1ZSAqcXVldWUsIGludCBpLCBpbnQgaikKK3sKKwlpbnQgY21wID0gcXVldWUtPmNvbXBhcmUocXVldWUtPmFycmF5W2ldLmRhdGEsIHF1ZXVlLT5hcnJheVtqXS5kYXRhLAorCQkJCSBxdWV1ZS0+Y2JfZGF0YSk7CisJaWYgKCFjbXApCisJCWNtcCA9IHF1ZXVlLT5hcnJheVtpXS5jdHIgLSBxdWV1ZS0+YXJyYXlbal0uY3RyOworCXJldHVybiBjbXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwKHN0cnVjdCBwcmlvX3F1ZXVlICpxdWV1ZSwgaW50IGksIGludCBqKQoreworCVNXQVAocXVldWUtPmFycmF5W2ldLCBxdWV1ZS0+YXJyYXlbal0pOworfQorCit2b2lkIHByaW9fcXVldWVfcmV2ZXJzZShzdHJ1Y3QgcHJpb19xdWV1ZSAqcXVldWUpCit7CisJaW50IGksIGo7CisKKwlpZiAocXVldWUtPmNvbXBhcmUgIT0gTlVMTCkKKwkJQlVHKCJwcmlvX3F1ZXVlX3JldmVyc2UoKSBvbiBub24tTElGTyBxdWV1ZSIpOworCWZvciAoaSA9IDA7IGkgPCAoaiA9IChxdWV1ZS0+bnIgLSAxKSAtIGkpOyBpKyspCisJCXN3YXAocXVldWUsIGksIGopOworfQorCit2b2lkIGNsZWFyX3ByaW9fcXVldWUoc3RydWN0IHByaW9fcXVldWUgKnF1ZXVlKQoreworCUZSRUVfQU5EX05VTEwocXVldWUtPmFycmF5KTsKKwlxdWV1ZS0+bnIgPSAwOworCXF1ZXVlLT5hbGxvYyA9IDA7CisJcXVldWUtPmluc2VydGlvbl9jdHIgPSAwOworfQorCit2b2lkIHByaW9fcXVldWVfcHV0KHN0cnVjdCBwcmlvX3F1ZXVlICpxdWV1ZSwgdm9pZCAqdGhpbmcpCit7CisJaW50IGl4LCBwYXJlbnQ7CisKKwkvKiBBcHBlbmQgYXQgdGhlIGVuZCAqLworCUFMTE9DX0dST1cocXVldWUtPmFycmF5LCBxdWV1ZS0+bnIgKyAxLCBxdWV1ZS0+YWxsb2MpOworCXF1ZXVlLT5hcnJheVtxdWV1ZS0+bnJdLmN0ciA9IHF1ZXVlLT5pbnNlcnRpb25fY3RyKys7CisJcXVldWUtPmFycmF5W3F1ZXVlLT5ucl0uZGF0YSA9IHRoaW5nOworCXF1ZXVlLT5ucisrOworCWlmICghcXVldWUtPmNvbXBhcmUpCisJCXJldHVybjsgLyogTElGTyAqLworCisJLyogQnViYmxlIHVwIHRoZSBuZXcgb25lICovCisJZm9yIChpeCA9IHF1ZXVlLT5uciAtIDE7IGl4OyBpeCA9IHBhcmVudCkgeworCQlwYXJlbnQgPSAoaXggLSAxKSAvIDI7CisJCWlmIChjb21wYXJlKHF1ZXVlLCBwYXJlbnQsIGl4KSA8PSAwKQorCQkJYnJlYWs7CisKKwkJc3dhcChxdWV1ZSwgcGFyZW50LCBpeCk7CisJfQorfQorCit2b2lkICpwcmlvX3F1ZXVlX2dldChzdHJ1Y3QgcHJpb19xdWV1ZSAqcXVldWUpCit7CisJdm9pZCAqcmVzdWx0OworCWludCBpeCwgY2hpbGQ7CisKKwlpZiAoIXF1ZXVlLT5ucikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFxdWV1ZS0+Y29tcGFyZSkKKwkJcmV0dXJuIHF1ZXVlLT5hcnJheVstLXF1ZXVlLT5ucl0uZGF0YTsgLyogTElGTyAqLworCisJcmVzdWx0ID0gcXVldWUtPmFycmF5WzBdLmRhdGE7CisJaWYgKCEtLXF1ZXVlLT5ucikKKwkJcmV0dXJuIHJlc3VsdDsKKworCXF1ZXVlLT5hcnJheVswXSA9IHF1ZXVlLT5hcnJheVtxdWV1ZS0+bnJdOworCisJLyogUHVzaCBkb3duIHRoZSBvbmUgYXQgdGhlIHJvb3QgKi8KKwlmb3IgKGl4ID0gMDsgaXggKiAyICsgMSA8IHF1ZXVlLT5ucjsgaXggPSBjaGlsZCkgeworCQljaGlsZCA9IGl4ICogMiArIDE7IC8qIGxlZnQgKi8KKwkJaWYgKGNoaWxkICsgMSA8IHF1ZXVlLT5uciAmJgorCQkgICAgY29tcGFyZShxdWV1ZSwgY2hpbGQsIGNoaWxkICsgMSkgPj0gMCkKKwkJCWNoaWxkKys7IC8qIHVzZSByaWdodCBjaGlsZCAqLworCisJCWlmIChjb21wYXJlKHF1ZXVlLCBpeCwgY2hpbGQpIDw9IDApCisJCQlicmVhazsKKworCQlzd2FwKHF1ZXVlLCBjaGlsZCwgaXgpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkICpwcmlvX3F1ZXVlX3BlZWsoc3RydWN0IHByaW9fcXVldWUgKnF1ZXVlKQoreworCWlmICghcXVldWUtPm5yKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIXF1ZXVlLT5jb21wYXJlKQorCQlyZXR1cm4gcXVldWUtPmFycmF5W3F1ZXVlLT5uciAtIDFdLmRhdGE7CisJcmV0dXJuIHF1ZXVlLT5hcnJheVswXS5kYXRhOworfQpkaWZmIC0tZ2l0IGEvcHJpby1xdWV1ZS5oIGIvcHJpby1xdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOWEzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9wcmlvLXF1ZXVlLmgKQEAgLTAsMCArMSw2MCBAQAorI2lmbmRlZiBQUklPX1FVRVVFX0gKKyNkZWZpbmUgUFJJT19RVUVVRV9ICisKKy8qCisgKiBBIHByaW9yaXR5IHF1ZXVlIGltcGxlbWVudGF0aW9uLCBwcmltYXJpbHkgZm9yIGtlZXBpbmcgdHJhY2sgb2YKKyAqIGNvbW1pdHMgaW4gdGhlICdkYXRlLW9yZGVyJyBzbyB0aGF0IHdlIHByb2Nlc3MgdGhlbSBmcm9tIG5ldyB0byBvbGQKKyAqIGFzIHRoZXkgYXJlIGRpc2NvdmVyZWQsIGJ1dCBjYW4gYmUgdXNlZCB0byBob2xkIGFueSBwb2ludGVyIHRvCisgKiBzdHJ1Y3QuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBzdXBwbHlpbmcgYSBmdW5jdGlvbiB0bworICogY29tcGFyZSB0d28gInRoaW5ncyIuCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBkYXRhIHN0cnVjdHVyZSBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgTElGTyBzdGFjaworICogYnkgc3BlY2lmeWluZyBOVUxMIGFzIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uLgorICovCisKKy8qCisgKiBDb21wYXJlIHR3byAidGhpbmdzIiwgb25lIGFuZCB0d287IHRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMgY2JfZGF0YQorICogaW4gdGhlIHByaW9fcXVldWUgc3RydWN0dXJlLiAgVGhlIHJlc3VsdCBpcyByZXR1cm5lZCBhcyBhIHNpZ24gb2YKKyAqIHRoZSByZXR1cm4gdmFsdWUsIGJlaW5nIHRoZSBzYW1lIGFzIHRoZSBzaWduIG9mIHRoZSByZXN1bHQgb2YKKyAqIHN1YnRyYWN0aW5nICJ0d28iIGZyb20gIm9uZSIgKGkuZS4gbmVnYXRpdmUgaWYgIm9uZSIgc29ydHMgZWFybGllcgorICogdGhhbiAidHdvIikuCisgKi8KK3R5cGVkZWYgaW50ICgqcHJpb19xdWV1ZV9jb21wYXJlX2ZuKShjb25zdCB2b2lkICpvbmUsIGNvbnN0IHZvaWQgKnR3bywgdm9pZCAqY2JfZGF0YSk7CisKK3N0cnVjdCBwcmlvX3F1ZXVlX2VudHJ5IHsKKwl1bnNpZ25lZCBjdHI7CisJdm9pZCAqZGF0YTsKK307CisKK3N0cnVjdCBwcmlvX3F1ZXVlIHsKKwlwcmlvX3F1ZXVlX2NvbXBhcmVfZm4gY29tcGFyZTsKKwl1bnNpZ25lZCBpbnNlcnRpb25fY3RyOworCXZvaWQgKmNiX2RhdGE7CisJaW50IGFsbG9jLCBucjsKKwlzdHJ1Y3QgcHJpb19xdWV1ZV9lbnRyeSAqYXJyYXk7Cit9OworCisvKgorICogQWRkIHRoZSAidGhpbmciIHRvIHRoZSBxdWV1ZS4KKyAqLwordm9pZCBwcmlvX3F1ZXVlX3B1dChzdHJ1Y3QgcHJpb19xdWV1ZSAqLCB2b2lkICp0aGluZyk7CisKKy8qCisgKiBFeHRyYWN0IHRoZSAidGhpbmciIHRoYXQgY29tcGFyZXMgdGhlIHNtYWxsZXN0IG91dCBvZiB0aGUgcXVldWUsCisgKiBvciBOVUxMLiAgSWYgY29tcGFyZSBmdW5jdGlvbiBpcyBOVUxMLCB0aGUgcXVldWUgYWN0cyBhcyBhIExJRk8KKyAqIHN0YWNrLgorICovCit2b2lkICpwcmlvX3F1ZXVlX2dldChzdHJ1Y3QgcHJpb19xdWV1ZSAqKTsKKworLyoKKyAqIEdhaW4gYWNjZXNzIHRvIHRoZSAidGhpbmciIHRoYXQgd291bGQgYmUgcmV0dXJuZWQgYnkKKyAqIHByaW9fcXVldWVfZ2V0LCBidXQgZG8gbm90IHJlbW92ZSBpdCBmcm9tIHRoZSBxdWV1ZS4KKyAqLwordm9pZCAqcHJpb19xdWV1ZV9wZWVrKHN0cnVjdCBwcmlvX3F1ZXVlICopOworCit2b2lkIGNsZWFyX3ByaW9fcXVldWUoc3RydWN0IHByaW9fcXVldWUgKik7CisKKy8qIFJldmVyc2UgdGhlIExJRk8gZWxlbWVudHMgKi8KK3ZvaWQgcHJpb19xdWV1ZV9yZXZlcnNlKHN0cnVjdCBwcmlvX3F1ZXVlICopOworCisjZW5kaWYgLyogUFJJT19RVUVVRV9IICovCmRpZmYgLS1naXQgYS9wcm9ncmVzcy5jIGIvcHJvZ3Jlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWRhOTE0Ci0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3Jlc3MuYwpAQCAtMCwwICsxLDM2OCBAQAorLyoKKyAqIFNpbXBsZSB0ZXh0LWJhc2VkIHByb2dyZXNzIGRpc3BsYXkgbW9kdWxlIGZvciBHSVQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgYnkgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNkZWZpbmUgR0lUX1RFU1RfUFJPR1JFU1NfT05MWQorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZ2V0dGV4dC5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAidHJhY2UuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNkZWZpbmUgVFBfSURYX01BWCAgICAgIDgKKworc3RydWN0IHRocm91Z2hwdXQgeworCW9mZl90IGN1cnJfdG90YWw7CisJb2ZmX3QgcHJldl90b3RhbDsKKwl1aW50NjRfdCBwcmV2X25zOworCXVuc2lnbmVkIGludCBhdmdfYnl0ZXM7CisJdW5zaWduZWQgaW50IGF2Z19taXNlY3M7CisJdW5zaWduZWQgaW50IGxhc3RfYnl0ZXNbVFBfSURYX01BWF07CisJdW5zaWduZWQgaW50IGxhc3RfbWlzZWNzW1RQX0lEWF9NQVhdOworCXVuc2lnbmVkIGludCBpZHg7CisJc3RydWN0IHN0cmJ1ZiBkaXNwbGF5OworfTsKKworc3RydWN0IHByb2dyZXNzIHsKKwljb25zdCBjaGFyICp0aXRsZTsKKwl1aW50NjRfdCBsYXN0X3ZhbHVlOworCXVpbnQ2NF90IHRvdGFsOworCXVuc2lnbmVkIGxhc3RfcGVyY2VudDsKKwl1bnNpZ25lZCBkZWxheTsKKwl1bnNpZ25lZCBzcGFyc2U7CisJc3RydWN0IHRocm91Z2hwdXQgKnRocm91Z2hwdXQ7CisJdWludDY0X3Qgc3RhcnRfbnM7CisJc3RydWN0IHN0cmJ1ZiBjb3VudGVyc19zYjsKKwlpbnQgdGl0bGVfbGVuOworCWludCBzcGxpdDsKK307CisKK3N0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgcHJvZ3Jlc3NfdXBkYXRlOworCisvKgorICogVGhlc2UgYXJlIG9ubHkgaW50ZW5kZWQgZm9yIHRlc3RpbmcgdGhlIHByb2dyZXNzIG91dHB1dCwgaS5lLiBleGNsdXNpdmVseQorICogZm9yICd0ZXN0LXRvb2wgcHJvZ3Jlc3MnLgorICovCitpbnQgcHJvZ3Jlc3NfdGVzdGluZzsKK3VpbnQ2NF90IHByb2dyZXNzX3Rlc3RfbnMgPSAwOwordm9pZCBwcm9ncmVzc190ZXN0X2ZvcmNlX3VwZGF0ZSh2b2lkKQoreworCXByb2dyZXNzX3VwZGF0ZSA9IDE7Cit9CisKKworc3RhdGljIHZvaWQgcHJvZ3Jlc3NfaW50ZXJ2YWwoaW50IHNpZ251bSkKK3sKKwlwcm9ncmVzc191cGRhdGUgPSAxOworfQorCitzdGF0aWMgdm9pZCBzZXRfcHJvZ3Jlc3Nfc2lnbmFsKHZvaWQpCit7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKKwlzdHJ1Y3QgaXRpbWVydmFsIHY7CisKKwlpZiAocHJvZ3Jlc3NfdGVzdGluZykKKwkJcmV0dXJuOworCisJcHJvZ3Jlc3NfdXBkYXRlID0gMDsKKworCW1lbXNldCgmc2EsIDAsIHNpemVvZihzYSkpOworCXNhLnNhX2hhbmRsZXIgPSBwcm9ncmVzc19pbnRlcnZhbDsKKwlzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7CisJc2Euc2FfZmxhZ3MgPSBTQV9SRVNUQVJUOworCXNpZ2FjdGlvbihTSUdBTFJNLCAmc2EsIE5VTEwpOworCisJdi5pdF9pbnRlcnZhbC50dl9zZWMgPSAxOworCXYuaXRfaW50ZXJ2YWwudHZfdXNlYyA9IDA7CisJdi5pdF92YWx1ZSA9IHYuaXRfaW50ZXJ2YWw7CisJc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmdiwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX3Byb2dyZXNzX3NpZ25hbCh2b2lkKQoreworCXN0cnVjdCBpdGltZXJ2YWwgdiA9IHt7MCx9LH07CisKKwlpZiAocHJvZ3Jlc3NfdGVzdGluZykKKwkJcmV0dXJuOworCisJc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmdiwgTlVMTCk7CisJc2lnbmFsKFNJR0FMUk0sIFNJR19JR04pOworCXByb2dyZXNzX3VwZGF0ZSA9IDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfZm9yZWdyb3VuZF9mZChpbnQgZmQpCit7CisJaW50IHRwZ3JwID0gdGNnZXRwZ3JwKGZkKTsKKwlyZXR1cm4gdHBncnAgPCAwIHx8IHRwZ3JwID09IGdldHBnaWQoMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BsYXkoc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcywgdWludDY0X3QgbiwgY29uc3QgY2hhciAqZG9uZSkKK3sKKwljb25zdCBjaGFyICp0cDsKKwlzdHJ1Y3Qgc3RyYnVmICpjb3VudGVyc19zYiA9ICZwcm9ncmVzcy0+Y291bnRlcnNfc2I7CisJaW50IHNob3dfdXBkYXRlID0gMDsKKwlpbnQgbGFzdF9jb3VudF9sZW4gPSBjb3VudGVyc19zYi0+bGVuOworCisJaWYgKHByb2dyZXNzLT5kZWxheSAmJiAoIXByb2dyZXNzX3VwZGF0ZSB8fCAtLXByb2dyZXNzLT5kZWxheSkpCisJCXJldHVybjsKKworCXByb2dyZXNzLT5sYXN0X3ZhbHVlID0gbjsKKwl0cCA9IChwcm9ncmVzcy0+dGhyb3VnaHB1dCkgPyBwcm9ncmVzcy0+dGhyb3VnaHB1dC0+ZGlzcGxheS5idWYgOiAiIjsKKwlpZiAocHJvZ3Jlc3MtPnRvdGFsKSB7CisJCXVuc2lnbmVkIHBlcmNlbnQgPSBuICogMTAwIC8gcHJvZ3Jlc3MtPnRvdGFsOworCQlpZiAocGVyY2VudCAhPSBwcm9ncmVzcy0+bGFzdF9wZXJjZW50IHx8IHByb2dyZXNzX3VwZGF0ZSkgeworCQkJcHJvZ3Jlc3MtPmxhc3RfcGVyY2VudCA9IHBlcmNlbnQ7CisKKwkJCXN0cmJ1Zl9yZXNldChjb3VudGVyc19zYik7CisJCQlzdHJidWZfYWRkZihjb3VudGVyc19zYiwKKwkJCQkgICAgIiUzdSUlICglIlBSSXVNQVgiLyUiUFJJdU1BWCIpJXMiLCBwZXJjZW50LAorCQkJCSAgICAodWludG1heF90KW4sICh1aW50bWF4X3QpcHJvZ3Jlc3MtPnRvdGFsLAorCQkJCSAgICB0cCk7CisJCQlzaG93X3VwZGF0ZSA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKHByb2dyZXNzX3VwZGF0ZSkgeworCQlzdHJidWZfcmVzZXQoY291bnRlcnNfc2IpOworCQlzdHJidWZfYWRkZihjb3VudGVyc19zYiwgIiUiUFJJdU1BWCIlcyIsICh1aW50bWF4X3QpbiwgdHApOworCQlzaG93X3VwZGF0ZSA9IDE7CisJfQorCisJaWYgKHNob3dfdXBkYXRlKSB7CisJCWlmIChpc19mb3JlZ3JvdW5kX2ZkKGZpbGVubyhzdGRlcnIpKSB8fCBkb25lKSB7CisJCQljb25zdCBjaGFyICplb2wgPSBkb25lID8gZG9uZSA6ICJcciI7CisJCQlzaXplX3QgY2xlYXJfbGVuID0gY291bnRlcnNfc2ItPmxlbiA8IGxhc3RfY291bnRfbGVuID8KKwkJCQkJbGFzdF9jb3VudF9sZW4gLSBjb3VudGVyc19zYi0+bGVuICsgMSA6CisJCQkJCTA7CisJCQkvKiBUaGUgIisgMiIgYWNjb3VudHMgZm9yIHRoZSAiOiAiLiAqLworCQkJc2l6ZV90IHByb2dyZXNzX2xpbmVfbGVuID0gcHJvZ3Jlc3MtPnRpdGxlX2xlbiArCisJCQkJCQljb3VudGVyc19zYi0+bGVuICsgMjsKKwkJCWludCBjb2xzID0gdGVybV9jb2x1bW5zKCk7CisKKwkJCWlmIChwcm9ncmVzcy0+c3BsaXQpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgJXMlKnMiLCBjb3VudGVyc19zYi0+YnVmLAorCQkJCQkoaW50KSBjbGVhcl9sZW4sIGVvbCk7CisJCQl9IGVsc2UgaWYgKCFkb25lICYmIGNvbHMgPCBwcm9ncmVzc19saW5lX2xlbikgeworCQkJCWNsZWFyX2xlbiA9IHByb2dyZXNzLT50aXRsZV9sZW4gKyAxIDwgY29scyA/CisJCQkJCSAgICBjb2xzIC0gcHJvZ3Jlc3MtPnRpdGxlX2xlbiAtIDEgOiAwOworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6JSpzXG4gICVzJXMiLAorCQkJCQlwcm9ncmVzcy0+dGl0bGUsIChpbnQpIGNsZWFyX2xlbiwgIiIsCisJCQkJCWNvdW50ZXJzX3NiLT5idWYsIGVvbCk7CisJCQkJcHJvZ3Jlc3MtPnNwbGl0ID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsICIlczogJXMlKnMiLCBwcm9ncmVzcy0+dGl0bGUsCisJCQkJCWNvdW50ZXJzX3NiLT5idWYsIChpbnQpIGNsZWFyX2xlbiwgZW9sKTsKKwkJCX0KKwkJCWZmbHVzaChzdGRlcnIpOworCQl9CisJCXByb2dyZXNzX3VwZGF0ZSA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCB0aHJvdWdocHV0X3N0cmluZyhzdHJ1Y3Qgc3RyYnVmICpidWYsIHVpbnQ2NF90IHRvdGFsLAorCQkJICAgICAgdW5zaWduZWQgaW50IHJhdGUpCit7CisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJc3RyYnVmX2FkZHN0cihidWYsICIsICIpOworCXN0cmJ1Zl9odW1hbmlzZV9ieXRlcyhidWYsIHRvdGFsKTsKKwlzdHJidWZfYWRkc3RyKGJ1ZiwgIiB8ICIpOworCXN0cmJ1Zl9odW1hbmlzZV9yYXRlKGJ1ZiwgcmF0ZSAqIDEwMjQpOworfQorCitzdGF0aWMgdWludDY0X3QgcHJvZ3Jlc3NfZ2V0bmFub3RpbWUoc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcykKK3sKKwlpZiAocHJvZ3Jlc3NfdGVzdGluZykKKwkJcmV0dXJuIHByb2dyZXNzLT5zdGFydF9ucyArIHByb2dyZXNzX3Rlc3RfbnM7CisJZWxzZQorCQlyZXR1cm4gZ2V0bmFub3RpbWUoKTsKK30KKwordm9pZCBkaXNwbGF5X3Rocm91Z2hwdXQoc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcywgdWludDY0X3QgdG90YWwpCit7CisJc3RydWN0IHRocm91Z2hwdXQgKnRwOworCXVpbnQ2NF90IG5vd19uczsKKwl1bnNpZ25lZCBpbnQgbWlzZWNzLCBjb3VudCwgcmF0ZTsKKworCWlmICghcHJvZ3Jlc3MpCisJCXJldHVybjsKKwl0cCA9IHByb2dyZXNzLT50aHJvdWdocHV0OworCisJbm93X25zID0gcHJvZ3Jlc3NfZ2V0bmFub3RpbWUocHJvZ3Jlc3MpOworCisJaWYgKCF0cCkgeworCQlwcm9ncmVzcy0+dGhyb3VnaHB1dCA9IHRwID0geGNhbGxvYygxLCBzaXplb2YoKnRwKSk7CisJCXRwLT5wcmV2X3RvdGFsID0gdHAtPmN1cnJfdG90YWwgPSB0b3RhbDsKKwkJdHAtPnByZXZfbnMgPSBub3dfbnM7CisJCXN0cmJ1Zl9pbml0KCZ0cC0+ZGlzcGxheSwgMCk7CisJCXJldHVybjsKKwl9CisJdHAtPmN1cnJfdG90YWwgPSB0b3RhbDsKKworCS8qIG9ubHkgdXBkYXRlIHRocm91Z2hwdXQgZXZlcnkgMC41IHMgKi8KKwlpZiAobm93X25zIC0gdHAtPnByZXZfbnMgPD0gNTAwMDAwMDAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFdlIGhhdmUgeCA9IGJ5dGVzIGFuZCB5ID0gbmFub3NlY3MuICBXZSB3YW50IHogPSBLaUIvczoKKwkgKgorCSAqCXogPSAoeCAvIDEwMjQpIC8gKHkgLyAxMDAwMDAwMDAwKQorCSAqCXogPSB4IC8geSAqIDEwMDAwMDAwMDAgLyAxMDI0CisJICoJeiA9IHggLyAoeSAqIDEwMjQgLyAxMDAwMDAwMDAwKQorCSAqCXogPSB4IC8geScKKwkgKgorCSAqIFRvIHNpbXBsaWZ5IHRoaW5ncyB3ZSdsbCBrZWVwIHRyYWNrIG9mIG1pc2Vjcywgb3IgMTAyNHRoIG9mIGEgc2VjCisJICogb2J0YWluZWQgd2l0aDoKKwkgKgorCSAqCXknID0geSAqIDEwMjQgLyAxMDAwMDAwMDAwCisJICoJeScgPSB5ICogKDJeMTAgLyAyXjQyKSAqICgyXjQyIC8gMTAwMDAwMDAwMCkKKwkgKgl5JyA9IHkgLyAyXjMyICogNDM5OAorCSAqCXknID0gKHkgKiA0Mzk4KSA+PiAzMgorCSAqLworCW1pc2VjcyA9ICgobm93X25zIC0gdHAtPnByZXZfbnMpICogNDM5OCkgPj4gMzI7CisKKwljb3VudCA9IHRvdGFsIC0gdHAtPnByZXZfdG90YWw7CisJdHAtPnByZXZfdG90YWwgPSB0b3RhbDsKKwl0cC0+cHJldl9ucyA9IG5vd19uczsKKwl0cC0+YXZnX2J5dGVzICs9IGNvdW50OworCXRwLT5hdmdfbWlzZWNzICs9IG1pc2VjczsKKwlyYXRlID0gdHAtPmF2Z19ieXRlcyAvIHRwLT5hdmdfbWlzZWNzOworCXRwLT5hdmdfYnl0ZXMgLT0gdHAtPmxhc3RfYnl0ZXNbdHAtPmlkeF07CisJdHAtPmF2Z19taXNlY3MgLT0gdHAtPmxhc3RfbWlzZWNzW3RwLT5pZHhdOworCXRwLT5sYXN0X2J5dGVzW3RwLT5pZHhdID0gY291bnQ7CisJdHAtPmxhc3RfbWlzZWNzW3RwLT5pZHhdID0gbWlzZWNzOworCXRwLT5pZHggPSAodHAtPmlkeCArIDEpICUgVFBfSURYX01BWDsKKworCXRocm91Z2hwdXRfc3RyaW5nKCZ0cC0+ZGlzcGxheSwgdG90YWwsIHJhdGUpOworCWlmIChwcm9ncmVzcy0+bGFzdF92YWx1ZSAhPSAtMSAmJiBwcm9ncmVzc191cGRhdGUpCisJCWRpc3BsYXkocHJvZ3Jlc3MsIHByb2dyZXNzLT5sYXN0X3ZhbHVlLCBOVUxMKTsKK30KKwordm9pZCBkaXNwbGF5X3Byb2dyZXNzKHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MsIHVpbnQ2NF90IG4pCit7CisJaWYgKHByb2dyZXNzKQorCQlkaXNwbGF5KHByb2dyZXNzLCBuLCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBwcm9ncmVzcyAqc3RhcnRfcHJvZ3Jlc3NfZGVsYXkoY29uc3QgY2hhciAqdGl0bGUsIHVpbnQ2NF90IHRvdGFsLAorCQkJCQkgICAgIHVuc2lnbmVkIGRlbGF5LCB1bnNpZ25lZCBzcGFyc2UpCit7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IHhtYWxsb2Moc2l6ZW9mKCpwcm9ncmVzcykpOworCXByb2dyZXNzLT50aXRsZSA9IHRpdGxlOworCXByb2dyZXNzLT50b3RhbCA9IHRvdGFsOworCXByb2dyZXNzLT5sYXN0X3ZhbHVlID0gLTE7CisJcHJvZ3Jlc3MtPmxhc3RfcGVyY2VudCA9IC0xOworCXByb2dyZXNzLT5kZWxheSA9IGRlbGF5OworCXByb2dyZXNzLT5zcGFyc2UgPSBzcGFyc2U7CisJcHJvZ3Jlc3MtPnRocm91Z2hwdXQgPSBOVUxMOworCXByb2dyZXNzLT5zdGFydF9ucyA9IGdldG5hbm90aW1lKCk7CisJc3RyYnVmX2luaXQoJnByb2dyZXNzLT5jb3VudGVyc19zYiwgMCk7CisJcHJvZ3Jlc3MtPnRpdGxlX2xlbiA9IHV0Zjhfc3Ryd2lkdGgodGl0bGUpOworCXByb2dyZXNzLT5zcGxpdCA9IDA7CisJc2V0X3Byb2dyZXNzX3NpZ25hbCgpOworCXRyYWNlMl9yZWdpb25fZW50ZXIoInByb2dyZXNzIiwgdGl0bGUsIHRoZV9yZXBvc2l0b3J5KTsKKwlyZXR1cm4gcHJvZ3Jlc3M7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2RlZmF1bHRfZGVsYXkodm9pZCkKK3sKKwlzdGF0aWMgaW50IGRlbGF5X2luX3NlY3MgPSAtMTsKKworCWlmIChkZWxheV9pbl9zZWNzIDwgMCkKKwkJZGVsYXlfaW5fc2VjcyA9IGdpdF9lbnZfdWxvbmcoIkdJVF9QUk9HUkVTU19ERUxBWSIsIDIpOworCisJcmV0dXJuIGRlbGF5X2luX3NlY3M7Cit9CisKK3N0cnVjdCBwcm9ncmVzcyAqc3RhcnRfZGVsYXllZF9wcm9ncmVzcyhjb25zdCBjaGFyICp0aXRsZSwgdWludDY0X3QgdG90YWwpCit7CisJcmV0dXJuIHN0YXJ0X3Byb2dyZXNzX2RlbGF5KHRpdGxlLCB0b3RhbCwgZ2V0X2RlZmF1bHRfZGVsYXkoKSwgMCk7Cit9CisKK3N0cnVjdCBwcm9ncmVzcyAqc3RhcnRfcHJvZ3Jlc3MoY29uc3QgY2hhciAqdGl0bGUsIHVpbnQ2NF90IHRvdGFsKQoreworCXJldHVybiBzdGFydF9wcm9ncmVzc19kZWxheSh0aXRsZSwgdG90YWwsIDAsIDApOworfQorCisvKgorICogSGVyZSAic3BhcnNlIiBtZWFucyB0aGF0IHRoZSBjYWxsZXIgbWlnaHQgdXNlIHNvbWUgc2FtcGxpbmcgY3JpdGVyaWEgdG8KKyAqIGRlY2lkZSB3aGVuIHRvIGNhbGwgZGlzcGxheV9wcm9ncmVzcygpIHJhdGhlciB0aGFuIGNhbGxpbmcgaXQgZm9yIGV2ZXJ5CisgKiBpbnRlZ2VyIHZhbHVlIGluWzAgLi4gdG90YWwpLiAgSW4gcGFydGljdWxhciwgdGhlIGNhbGxlciBtaWdodCBub3QgY2FsbAorICogZGlzcGxheV9wcm9ncmVzcygpIGZvciB0aGUgbGFzdCB2YWx1ZSBpbiB0aGUgcmFuZ2UuCisgKgorICogV2hlbiAic3BhcnNlIiBpcyBzZXQsIHN0b3BfcHJvZ3Jlc3MoKSB3aWxsIGF1dG9tYXRpY2FsbHkgZm9yY2UgdGhlIGRvbmUKKyAqIG1lc3NhZ2UgdG8gc2hvdyAxMDAlLgorICovCitzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X3NwYXJzZV9wcm9ncmVzcyhjb25zdCBjaGFyICp0aXRsZSwgdWludDY0X3QgdG90YWwpCit7CisJcmV0dXJuIHN0YXJ0X3Byb2dyZXNzX2RlbGF5KHRpdGxlLCB0b3RhbCwgMCwgMSk7Cit9CisKK3N0cnVjdCBwcm9ncmVzcyAqc3RhcnRfZGVsYXllZF9zcGFyc2VfcHJvZ3Jlc3MoY29uc3QgY2hhciAqdGl0bGUsCisJCQkJCSAgICAgICB1aW50NjRfdCB0b3RhbCkKK3sKKwlyZXR1cm4gc3RhcnRfcHJvZ3Jlc3NfZGVsYXkodGl0bGUsIHRvdGFsLCBnZXRfZGVmYXVsdF9kZWxheSgpLCAxKTsKK30KKworc3RhdGljIHZvaWQgZmluaXNoX2lmX3NwYXJzZShzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzKQoreworCWlmIChwcm9ncmVzcyAmJgorCSAgICBwcm9ncmVzcy0+c3BhcnNlICYmCisJICAgIHByb2dyZXNzLT5sYXN0X3ZhbHVlICE9IHByb2dyZXNzLT50b3RhbCkKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgcHJvZ3Jlc3MtPnRvdGFsKTsKK30KKwordm9pZCBzdG9wX3Byb2dyZXNzKHN0cnVjdCBwcm9ncmVzcyAqKnBfcHJvZ3Jlc3MpCit7CisJZmluaXNoX2lmX3NwYXJzZSgqcF9wcm9ncmVzcyk7CisKKwlpZiAocF9wcm9ncmVzcyAmJiAqcF9wcm9ncmVzcykgeworCQl0cmFjZTJfZGF0YV9pbnRtYXgoInByb2dyZXNzIiwgdGhlX3JlcG9zaXRvcnksICJ0b3RhbF9vYmplY3RzIiwKKwkJCQkgICAoKnBfcHJvZ3Jlc3MpLT50b3RhbCk7CisKKwkJaWYgKCgqcF9wcm9ncmVzcyktPnRocm91Z2hwdXQpCisJCQl0cmFjZTJfZGF0YV9pbnRtYXgoInByb2dyZXNzIiwgdGhlX3JlcG9zaXRvcnksCisJCQkJCSAgICJ0b3RhbF9ieXRlcyIsCisJCQkJCSAgICgqcF9wcm9ncmVzcyktPnRocm91Z2hwdXQtPmN1cnJfdG90YWwpOworCisJCXRyYWNlMl9yZWdpb25fbGVhdmUoInByb2dyZXNzIiwgKCpwX3Byb2dyZXNzKS0+dGl0bGUsIHRoZV9yZXBvc2l0b3J5KTsKKwl9CisKKwlzdG9wX3Byb2dyZXNzX21zZyhwX3Byb2dyZXNzLCBfKCJkb25lIikpOworfQorCit2b2lkIHN0b3BfcHJvZ3Jlc3NfbXNnKHN0cnVjdCBwcm9ncmVzcyAqKnBfcHJvZ3Jlc3MsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gKnBfcHJvZ3Jlc3M7CisJaWYgKCFwcm9ncmVzcykKKwkJcmV0dXJuOworCSpwX3Byb2dyZXNzID0gTlVMTDsKKwlpZiAocHJvZ3Jlc3MtPmxhc3RfdmFsdWUgIT0gLTEpIHsKKwkJLyogRm9yY2UgdGhlIGxhc3QgdXBkYXRlICovCisJCWNoYXIgKmJ1ZjsKKwkJc3RydWN0IHRocm91Z2hwdXQgKnRwID0gcHJvZ3Jlc3MtPnRocm91Z2hwdXQ7CisKKwkJaWYgKHRwKSB7CisJCQl1aW50NjRfdCBub3dfbnMgPSBwcm9ncmVzc19nZXRuYW5vdGltZShwcm9ncmVzcyk7CisJCQl1bnNpZ25lZCBpbnQgbWlzZWNzLCByYXRlOworCQkJbWlzZWNzID0gKChub3dfbnMgLSBwcm9ncmVzcy0+c3RhcnRfbnMpICogNDM5OCkgPj4gMzI7CisJCQlyYXRlID0gdHAtPmN1cnJfdG90YWwgLyAobWlzZWNzID8gbWlzZWNzIDogMSk7CisJCQl0aHJvdWdocHV0X3N0cmluZygmdHAtPmRpc3BsYXksIHRwLT5jdXJyX3RvdGFsLCByYXRlKTsKKwkJfQorCQlwcm9ncmVzc191cGRhdGUgPSAxOworCQlidWYgPSB4c3RyZm10KCIsICVzLlxuIiwgbXNnKTsKKwkJZGlzcGxheShwcm9ncmVzcywgcHJvZ3Jlc3MtPmxhc3RfdmFsdWUsIGJ1Zik7CisJCWZyZWUoYnVmKTsKKwl9CisJY2xlYXJfcHJvZ3Jlc3Nfc2lnbmFsKCk7CisJc3RyYnVmX3JlbGVhc2UoJnByb2dyZXNzLT5jb3VudGVyc19zYik7CisJaWYgKHByb2dyZXNzLT50aHJvdWdocHV0KQorCQlzdHJidWZfcmVsZWFzZSgmcHJvZ3Jlc3MtPnRocm91Z2hwdXQtPmRpc3BsYXkpOworCWZyZWUocHJvZ3Jlc3MtPnRocm91Z2hwdXQpOworCWZyZWUocHJvZ3Jlc3MpOworfQpkaWZmIC0tZ2l0IGEvcHJvZ3Jlc3MuaCBiL3Byb2dyZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE5MTNhYwotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyZXNzLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBQUk9HUkVTU19ICisjZGVmaW5lIFBST0dSRVNTX0gKKworc3RydWN0IHByb2dyZXNzOworCisjaWZkZWYgR0lUX1RFU1RfUFJPR1JFU1NfT05MWQorCitleHRlcm4gaW50IHByb2dyZXNzX3Rlc3Rpbmc7CitleHRlcm4gdWludDY0X3QgcHJvZ3Jlc3NfdGVzdF9uczsKK3ZvaWQgcHJvZ3Jlc3NfdGVzdF9mb3JjZV91cGRhdGUodm9pZCk7CisKKyNlbmRpZgorCit2b2lkIGRpc3BsYXlfdGhyb3VnaHB1dChzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzLCB1aW50NjRfdCB0b3RhbCk7Cit2b2lkIGRpc3BsYXlfcHJvZ3Jlc3Moc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcywgdWludDY0X3Qgbik7CitzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X3Byb2dyZXNzKGNvbnN0IGNoYXIgKnRpdGxlLCB1aW50NjRfdCB0b3RhbCk7CitzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X3NwYXJzZV9wcm9ncmVzcyhjb25zdCBjaGFyICp0aXRsZSwgdWludDY0X3QgdG90YWwpOworc3RydWN0IHByb2dyZXNzICpzdGFydF9kZWxheWVkX3Byb2dyZXNzKGNvbnN0IGNoYXIgKnRpdGxlLCB1aW50NjRfdCB0b3RhbCk7CitzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X2RlbGF5ZWRfc3BhcnNlX3Byb2dyZXNzKGNvbnN0IGNoYXIgKnRpdGxlLAorCQkJCQkgICAgICAgdWludDY0X3QgdG90YWwpOwordm9pZCBzdG9wX3Byb2dyZXNzKHN0cnVjdCBwcm9ncmVzcyAqKnByb2dyZXNzKTsKK3ZvaWQgc3RvcF9wcm9ncmVzc19tc2coc3RydWN0IHByb2dyZXNzICoqcHJvZ3Jlc3MsIGNvbnN0IGNoYXIgKm1zZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcHJvbWlzb3ItcmVtb3RlLmMgYi9wcm9taXNvci1yZW1vdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWFlYTEyCi0tLSAvZGV2L251bGwKKysrIGIvcHJvbWlzb3ItcmVtb3RlLmMKQEAgLTAsMCArMSwyNjggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInByb21pc29yLXJlbW90ZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorCitzdGF0aWMgY2hhciAqcmVwb3NpdG9yeV9mb3JtYXRfcGFydGlhbF9jbG9uZTsKK3N0YXRpYyBjb25zdCBjaGFyICpjb3JlX3BhcnRpYWxfY2xvbmVfZmlsdGVyX2RlZmF1bHQ7CisKK3ZvaWQgc2V0X3JlcG9zaXRvcnlfZm9ybWF0X3BhcnRpYWxfY2xvbmUoY2hhciAqcGFydGlhbF9jbG9uZSkKK3sKKwlyZXBvc2l0b3J5X2Zvcm1hdF9wYXJ0aWFsX2Nsb25lID0geHN0cmR1cF9vcl9udWxsKHBhcnRpYWxfY2xvbmUpOworfQorCitzdGF0aWMgaW50IGZldGNoX3JlZnMoY29uc3QgY2hhciAqcmVtb3RlX25hbWUsIHN0cnVjdCByZWYgKnJlZikKK3sKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0OworCWludCByZXM7CisKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KHJlbW90ZV9uYW1lKTsKKwlpZiAoIXJlbW90ZS0+dXJsWzBdKQorCQlkaWUoXygiUmVtb3RlIHdpdGggbm8gVVJMIikpOworCXRyYW5zcG9ydCA9IHRyYW5zcG9ydF9nZXQocmVtb3RlLCByZW1vdGUtPnVybFswXSk7CisKKwl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9GUk9NX1BST01JU09SLCAiMSIpOworCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX05PX0RFUEVOREVOVFMsICIxIik7CisJcmVzID0gdHJhbnNwb3J0X2ZldGNoX3JlZnModHJhbnNwb3J0LCByZWYpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBmZXRjaF9vYmplY3RzKGNvbnN0IGNoYXIgKnJlbW90ZV9uYW1lLAorCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZHMsCisJCQkgaW50IG9pZF9ucikKK3sKKwlzdHJ1Y3QgcmVmICpyZWYgPSBOVUxMOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG9pZF9ucjsgaSsrKSB7CisJCXN0cnVjdCByZWYgKm5ld19yZWYgPSBhbGxvY19yZWYob2lkX3RvX2hleCgmb2lkc1tpXSkpOworCQlvaWRjcHkoJm5ld19yZWYtPm9sZF9vaWQsICZvaWRzW2ldKTsKKwkJbmV3X3JlZi0+ZXhhY3Rfb2lkID0gMTsKKwkJbmV3X3JlZi0+bmV4dCA9IHJlZjsKKwkJcmVmID0gbmV3X3JlZjsKKwl9CisJcmV0dXJuIGZldGNoX3JlZnMocmVtb3RlX25hbWUsIHJlZik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvbWlzb3JfcmVtb3RlICpwcm9taXNvcnM7CitzdGF0aWMgc3RydWN0IHByb21pc29yX3JlbW90ZSAqKnByb21pc29yc190YWlsID0gJnByb21pc29yczsKKworc3RhdGljIHN0cnVjdCBwcm9taXNvcl9yZW1vdGUgKnByb21pc29yX3JlbW90ZV9uZXcoY29uc3QgY2hhciAqcmVtb3RlX25hbWUpCit7CisJc3RydWN0IHByb21pc29yX3JlbW90ZSAqcjsKKworCWlmICgqcmVtb3RlX25hbWUgPT0gJy8nKSB7CisJCXdhcm5pbmcoXygicHJvbWlzb3IgcmVtb3RlIG5hbWUgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIpLAorCQkJcmVtb3RlX25hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlGTEVYX0FMTE9DX1NUUihyLCBuYW1lLCByZW1vdGVfbmFtZSk7CisKKwkqcHJvbWlzb3JzX3RhaWwgPSByOworCXByb21pc29yc190YWlsID0gJnItPm5leHQ7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHN0cnVjdCBwcm9taXNvcl9yZW1vdGUgKnByb21pc29yX3JlbW90ZV9sb29rdXAoY29uc3QgY2hhciAqcmVtb3RlX25hbWUsCisJCQkJCQkgICAgICBzdHJ1Y3QgcHJvbWlzb3JfcmVtb3RlICoqcHJldmlvdXMpCit7CisJc3RydWN0IHByb21pc29yX3JlbW90ZSAqciwgKnA7CisKKwlmb3IgKHAgPSBOVUxMLCByID0gcHJvbWlzb3JzOyByOyBwID0gciwgciA9IHItPm5leHQpCisJCWlmICghc3RyY21wKHItPm5hbWUsIHJlbW90ZV9uYW1lKSkgeworCQkJaWYgKHByZXZpb3VzKQorCQkJCSpwcmV2aW91cyA9IHA7CisJCQlyZXR1cm4gcjsKKwkJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHByb21pc29yX3JlbW90ZV9tb3ZlX3RvX3RhaWwoc3RydWN0IHByb21pc29yX3JlbW90ZSAqciwKKwkJCQkJIHN0cnVjdCBwcm9taXNvcl9yZW1vdGUgKnByZXZpb3VzKQoreworCWlmIChyLT5uZXh0ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmIChwcmV2aW91cykKKwkJcHJldmlvdXMtPm5leHQgPSByLT5uZXh0OworCWVsc2UKKwkJcHJvbWlzb3JzID0gci0+bmV4dCA/IHItPm5leHQgOiByOworCXItPm5leHQgPSBOVUxMOworCSpwcm9taXNvcnNfdGFpbCA9IHI7CisJcHJvbWlzb3JzX3RhaWwgPSAmci0+bmV4dDsKK30KKworc3RhdGljIGludCBwcm9taXNvcl9yZW1vdGVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzaXplX3QgbmFtZWxlbjsKKwljb25zdCBjaGFyICpzdWJrZXk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnBhcnRpYWxjbG9uZWZpbHRlciIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmNvcmVfcGFydGlhbF9jbG9uZV9maWx0ZXJfZGVmYXVsdCwKKwkJCQkJIHZhciwgdmFsdWUpOworCisJaWYgKHBhcnNlX2NvbmZpZ19rZXkodmFyLCAicmVtb3RlIiwgJm5hbWUsICZuYW1lbGVuLCAmc3Via2V5KSA8IDApCisJCXJldHVybiAwOworCisJaWYgKCFzdHJjbXAoc3Via2V5LCAicHJvbWlzb3IiKSkgeworCQljaGFyICpyZW1vdGVfbmFtZTsKKworCQlpZiAoIWdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSkKKwkJCXJldHVybiAwOworCisJCXJlbW90ZV9uYW1lID0geG1lbWR1cHoobmFtZSwgbmFtZWxlbik7CisKKwkJaWYgKCFwcm9taXNvcl9yZW1vdGVfbG9va3VwKHJlbW90ZV9uYW1lLCBOVUxMKSkKKwkJCXByb21pc29yX3JlbW90ZV9uZXcocmVtb3RlX25hbWUpOworCisJCWZyZWUocmVtb3RlX25hbWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoc3Via2V5LCAicGFydGlhbGNsb25lZmlsdGVyIikpIHsKKwkJc3RydWN0IHByb21pc29yX3JlbW90ZSAqcjsKKwkJY2hhciAqcmVtb3RlX25hbWUgPSB4bWVtZHVweihuYW1lLCBuYW1lbGVuKTsKKworCQlyID0gcHJvbWlzb3JfcmVtb3RlX2xvb2t1cChyZW1vdGVfbmFtZSwgTlVMTCk7CisJCWlmICghcikKKwkJCXIgPSBwcm9taXNvcl9yZW1vdGVfbmV3KHJlbW90ZV9uYW1lKTsKKworCQlmcmVlKHJlbW90ZV9uYW1lKTsKKworCQlpZiAoIXIpCisJCQlyZXR1cm4gMDsKKworCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnItPnBhcnRpYWxfY2xvbmVfZmlsdGVyLCB2YXIsIHZhbHVlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0aWFsaXplZDsKKworc3RhdGljIHZvaWQgcHJvbWlzb3JfcmVtb3RlX2luaXQodm9pZCkKK3sKKwlpZiAoaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwlpbml0aWFsaXplZCA9IDE7CisKKwlnaXRfY29uZmlnKHByb21pc29yX3JlbW90ZV9jb25maWcsIE5VTEwpOworCisJaWYgKHJlcG9zaXRvcnlfZm9ybWF0X3BhcnRpYWxfY2xvbmUpIHsKKwkJc3RydWN0IHByb21pc29yX3JlbW90ZSAqbywgKnByZXZpb3VzOworCisJCW8gPSBwcm9taXNvcl9yZW1vdGVfbG9va3VwKHJlcG9zaXRvcnlfZm9ybWF0X3BhcnRpYWxfY2xvbmUsCisJCQkJCSAgICZwcmV2aW91cyk7CisJCWlmIChvKQorCQkJcHJvbWlzb3JfcmVtb3RlX21vdmVfdG9fdGFpbChvLCBwcmV2aW91cyk7CisJCWVsc2UKKwkJCXByb21pc29yX3JlbW90ZV9uZXcocmVwb3NpdG9yeV9mb3JtYXRfcGFydGlhbF9jbG9uZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcm9taXNvcl9yZW1vdGVfY2xlYXIodm9pZCkKK3sKKwl3aGlsZSAocHJvbWlzb3JzKSB7CisJCXN0cnVjdCBwcm9taXNvcl9yZW1vdGUgKnIgPSBwcm9taXNvcnM7CisJCXByb21pc29ycyA9IHByb21pc29ycy0+bmV4dDsKKwkJZnJlZShyKTsKKwl9CisKKwlwcm9taXNvcnNfdGFpbCA9ICZwcm9taXNvcnM7Cit9CisKK3ZvaWQgcHJvbWlzb3JfcmVtb3RlX3JlaW5pdCh2b2lkKQoreworCWluaXRpYWxpemVkID0gMDsKKwlwcm9taXNvcl9yZW1vdGVfY2xlYXIoKTsKKwlwcm9taXNvcl9yZW1vdGVfaW5pdCgpOworfQorCitzdHJ1Y3QgcHJvbWlzb3JfcmVtb3RlICpwcm9taXNvcl9yZW1vdGVfZmluZChjb25zdCBjaGFyICpyZW1vdGVfbmFtZSkKK3sKKwlwcm9taXNvcl9yZW1vdGVfaW5pdCgpOworCisJaWYgKCFyZW1vdGVfbmFtZSkKKwkJcmV0dXJuIHByb21pc29yczsKKworCXJldHVybiBwcm9taXNvcl9yZW1vdGVfbG9va3VwKHJlbW90ZV9uYW1lLCBOVUxMKTsKK30KKworaW50IGhhc19wcm9taXNvcl9yZW1vdGUodm9pZCkKK3sKKwlyZXR1cm4gISFwcm9taXNvcl9yZW1vdGVfZmluZChOVUxMKTsKK30KKworc3RhdGljIGludCByZW1vdmVfZmV0Y2hlZF9vaWRzKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgICAgIHN0cnVjdCBvYmplY3RfaWQgKipvaWRzLAorCQkJICAgICAgIGludCBvaWRfbnIsIGludCB0b19mcmVlKQoreworCWludCBpLCByZW1haW5pbmdfbnIgPSAwOworCWludCAqcmVtYWluaW5nID0geGNhbGxvYyhvaWRfbnIsIHNpemVvZigqcmVtYWluaW5nKSk7CisJc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZHMgPSAqb2lkczsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkczsKKworCWZvciAoaSA9IDA7IGkgPCBvaWRfbnI7IGkrKykKKwkJaWYgKG9pZF9vYmplY3RfaW5mb19leHRlbmRlZChyZXBvLCAmb2xkX29pZHNbaV0sIE5VTEwsCisJCQkJCSAgICAgT0JKRUNUX0lORk9fU0tJUF9GRVRDSF9PQkpFQ1QpKSB7CisJCQlyZW1haW5pbmdbaV0gPSAxOworCQkJcmVtYWluaW5nX25yKys7CisJCX0KKworCWlmIChyZW1haW5pbmdfbnIpIHsKKwkJaW50IGogPSAwOworCQluZXdfb2lkcyA9IHhjYWxsb2MocmVtYWluaW5nX25yLCBzaXplb2YoKm5ld19vaWRzKSk7CisJCWZvciAoaSA9IDA7IGkgPCBvaWRfbnI7IGkrKykKKwkJCWlmIChyZW1haW5pbmdbaV0pCisJCQkJb2lkY3B5KCZuZXdfb2lkc1tqKytdLCAmb2xkX29pZHNbaV0pOworCQkqb2lkcyA9IG5ld19vaWRzOworCQlpZiAodG9fZnJlZSkKKwkJCWZyZWUob2xkX29pZHMpOworCX0KKworCWZyZWUocmVtYWluaW5nKTsKKworCXJldHVybiByZW1haW5pbmdfbnI7Cit9CisKK2ludCBwcm9taXNvcl9yZW1vdGVfZ2V0X2RpcmVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWRzLAorCQkJICAgICAgIGludCBvaWRfbnIpCit7CisJc3RydWN0IHByb21pc29yX3JlbW90ZSAqcjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpyZW1haW5pbmdfb2lkcyA9IChzdHJ1Y3Qgb2JqZWN0X2lkICopb2lkczsKKwlpbnQgcmVtYWluaW5nX25yID0gb2lkX25yOworCWludCB0b19mcmVlID0gMDsKKwlpbnQgcmVzID0gLTE7CisKKwlpZiAob2lkX25yID09IDApCisJCXJldHVybiAwOworCisJcHJvbWlzb3JfcmVtb3RlX2luaXQoKTsKKworCWZvciAociA9IHByb21pc29yczsgcjsgciA9IHItPm5leHQpIHsKKwkJaWYgKGZldGNoX29iamVjdHMoci0+bmFtZSwgcmVtYWluaW5nX29pZHMsIHJlbWFpbmluZ19ucikgPCAwKSB7CisJCQlpZiAocmVtYWluaW5nX25yID09IDEpCisJCQkJY29udGludWU7CisJCQlyZW1haW5pbmdfbnIgPSByZW1vdmVfZmV0Y2hlZF9vaWRzKHJlcG8sICZyZW1haW5pbmdfb2lkcywKKwkJCQkJCQkgcmVtYWluaW5nX25yLCB0b19mcmVlKTsKKwkJCWlmIChyZW1haW5pbmdfbnIpIHsKKwkJCQl0b19mcmVlID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlyZXMgPSAwOworCQlicmVhazsKKwl9CisKKwlpZiAodG9fZnJlZSkKKwkJZnJlZShyZW1haW5pbmdfb2lkcyk7CisKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvcHJvbWlzb3ItcmVtb3RlLmggYi9wcm9taXNvci1yZW1vdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzQzYzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcHJvbWlzb3ItcmVtb3RlLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBQUk9NSVNPUl9SRU1PVEVfSAorI2RlZmluZSBQUk9NSVNPUl9SRU1PVEVfSAorCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorCitzdHJ1Y3Qgb2JqZWN0X2lkOworCisvKgorICogUHJvbWlzb3IgcmVtb3RlIGxpbmtlZCBsaXN0CisgKgorICogSW5mb3JtYXRpb24gaW4gaXRzIGZpZWxkcyBjb21lIGZyb20gcmVtb3RlLlhYWCBjb25maWcgZW50cmllcyBvcgorICogZnJvbSBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSBvciBjb3JlLnBhcnRpYWxjbG9uZWZpbHRlci4KKyAqLworc3RydWN0IHByb21pc29yX3JlbW90ZSB7CisJc3RydWN0IHByb21pc29yX3JlbW90ZSAqbmV4dDsKKwljb25zdCBjaGFyICpwYXJ0aWFsX2Nsb25lX2ZpbHRlcjsKKwljb25zdCBjaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9OworCit2b2lkIHByb21pc29yX3JlbW90ZV9yZWluaXQodm9pZCk7CitzdHJ1Y3QgcHJvbWlzb3JfcmVtb3RlICpwcm9taXNvcl9yZW1vdGVfZmluZChjb25zdCBjaGFyICpyZW1vdGVfbmFtZSk7CitpbnQgaGFzX3Byb21pc29yX3JlbW90ZSh2b2lkKTsKKworLyoKKyAqIEZldGNoZXMgYWxsIHJlcXVlc3RlZCBvYmplY3RzIGZyb20gYWxsIHByb21pc29yIHJlbW90ZXMsIHRyeWluZyB0aGVtIG9uZSBhdAorICogYSB0aW1lIHVudGlsIGFsbCBvYmplY3RzIGFyZSBmZXRjaGVkLiBSZXR1cm5zIDAgdXBvbiBzdWNjZXNzLCBhbmQgbm9uLXplcm8KKyAqIG90aGVyd2lzZS4KKyAqCisgKiBJZiBvaWRfbnIgaXMgMCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgKHN1Y2Nlc3MpIGltbWVkaWF0ZWx5LgorICovCitpbnQgcHJvbWlzb3JfcmVtb3RlX2dldF9kaXJlY3Qoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkcywKKwkJCSAgICAgICBpbnQgb2lkX25yKTsKKworLyoKKyAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgb25seSBvbmNlIGZyb20gc2V0dXAuYyB0byBzZXQgdGhlIHZhbHVlIHdlIGdvdAorICogZnJvbSB0aGUgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgY29uZmlnIG9wdGlvbi4KKyAqLwordm9pZCBzZXRfcmVwb3NpdG9yeV9mb3JtYXRfcGFydGlhbF9jbG9uZShjaGFyICpwYXJ0aWFsX2Nsb25lKTsKKworI2VuZGlmIC8qIFBST01JU09SX1JFTU9URV9IICovCmRpZmYgLS1naXQgYS9wcm9tcHQuYyBiL3Byb21wdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZWQyMWEKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9tcHQuYwpAQCAtMCwwICsxLDg4IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInByb21wdC5oIgorI2luY2x1ZGUgImNvbXBhdC90ZXJtaW5hbC5oIgorCitzdGF0aWMgY2hhciAqZG9fYXNrcGFzcyhjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnByb21wdCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwYXNzID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKmFyZ3NbM107CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisJaW50IGVyciA9IDA7CisKKwlhcmdzWzBdID0gY21kOworCWFyZ3NbMV0JPSBwcm9tcHQ7CisJYXJnc1syXSA9IE5VTEw7CisKKwlwYXNzLmFyZ3YgPSBhcmdzOworCXBhc3Mub3V0ID0gLTE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmcGFzcykpCisJCXJldHVybiBOVUxMOworCisJc3RyYnVmX3Jlc2V0KCZidWZmZXIpOworCWlmIChzdHJidWZfcmVhZCgmYnVmZmVyLCBwYXNzLm91dCwgMjApIDwgMCkKKwkJZXJyID0gMTsKKworCWNsb3NlKHBhc3Mub3V0KTsKKworCWlmIChmaW5pc2hfY29tbWFuZCgmcGFzcykpCisJCWVyciA9IDE7CisKKwlpZiAoZXJyKSB7CisJCWVycm9yKCJ1bmFibGUgdG8gcmVhZCBhc2twYXNzIHJlc3BvbnNlIGZyb20gJyVzJyIsIGNtZCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlzdHJidWZfc2V0bGVuKCZidWZmZXIsIHN0cmNzcG4oYnVmZmVyLmJ1ZiwgIlxyXG4iKSk7CisKKwlyZXR1cm4gYnVmZmVyLmJ1ZjsKK30KKworY2hhciAqZ2l0X3Byb21wdChjb25zdCBjaGFyICpwcm9tcHQsIGludCBmbGFncykKK3sKKwljaGFyICpyID0gTlVMTDsKKworCWlmIChmbGFncyAmIFBST01QVF9BU0tQQVNTKSB7CisJCWNvbnN0IGNoYXIgKmFza3Bhc3M7CisKKwkJYXNrcGFzcyA9IGdldGVudigiR0lUX0FTS1BBU1MiKTsKKwkJaWYgKCFhc2twYXNzKQorCQkJYXNrcGFzcyA9IGFza3Bhc3NfcHJvZ3JhbTsKKwkJaWYgKCFhc2twYXNzKQorCQkJYXNrcGFzcyA9IGdldGVudigiU1NIX0FTS1BBU1MiKTsKKwkJaWYgKGFza3Bhc3MgJiYgKmFza3Bhc3MpCisJCQlyID0gZG9fYXNrcGFzcyhhc2twYXNzLCBwcm9tcHQpOworCX0KKworCWlmICghcikgeworCQljb25zdCBjaGFyICplcnI7CisKKwkJaWYgKGdpdF9lbnZfYm9vbCgiR0lUX1RFUk1JTkFMX1BST01QVCIsIDEpKSB7CisJCQlyID0gZ2l0X3Rlcm1pbmFsX3Byb21wdChwcm9tcHQsIGZsYWdzICYgUFJPTVBUX0VDSE8pOworCQkJZXJyID0gc3RyZXJyb3IoZXJybm8pOworCQl9IGVsc2UgeworCQkJZXJyID0gInRlcm1pbmFsIHByb21wdHMgZGlzYWJsZWQiOworCQl9CisJCWlmICghcikgeworCQkJLyogcHJvbXB0cyBhbHJlYWR5IGNvbnRhaW4gIjogIiBhdCB0aGUgZW5kICovCisJCQlkaWUoImNvdWxkIG5vdCByZWFkICVzJXMiLCBwcm9tcHQsIGVycik7CisJCX0KKwl9CisJcmV0dXJuIHI7Cit9CisKK2ludCBnaXRfcmVhZF9saW5lX2ludGVyYWN0aXZlbHkoc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlpbnQgcmV0OworCisJZmZsdXNoKHN0ZG91dCk7CisJcmV0ID0gc3RyYnVmX2dldGxpbmVfbGYobGluZSwgc3RkaW4pOworCWlmIChyZXQgIT0gRU9GKQorCQlzdHJidWZfdHJpbV90cmFpbGluZ19uZXdsaW5lKGxpbmUpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3Byb21wdC5oIGIvcHJvbXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI5NGU5MwotLS0gL2Rldi9udWxsCisrKyBiL3Byb21wdC5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgUFJPTVBUX0gKKyNkZWZpbmUgUFJPTVBUX0gKKworI2RlZmluZSBQUk9NUFRfQVNLUEFTUyAoMTw8MCkKKyNkZWZpbmUgUFJPTVBUX0VDSE8gICAgKDE8PDEpCisKK2NoYXIgKmdpdF9wcm9tcHQoY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgZmxhZ3MpOworCitpbnQgZ2l0X3JlYWRfbGluZV9pbnRlcmFjdGl2ZWx5KHN0cnVjdCBzdHJidWYgKmxpbmUpOworCisjZW5kaWYgLyogUFJPTVBUX0ggKi8KZGlmZiAtLWdpdCBhL3Byb3RvY29sLmMgYi9wcm90b2NvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOTAzOTEKLS0tIC9kZXYvbnVsbAorKysgYi9wcm90b2NvbC5jCkBAIC0wLDAgKzEsOTMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisKK3N0YXRpYyBlbnVtIHByb3RvY29sX3ZlcnNpb24gcGFyc2VfcHJvdG9jb2xfdmVyc2lvbihjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcCh2YWx1ZSwgIjAiKSkKKwkJcmV0dXJuIHByb3RvY29sX3YwOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICIxIikpCisJCXJldHVybiBwcm90b2NvbF92MTsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiMiIpKQorCQlyZXR1cm4gcHJvdG9jb2xfdjI7CisJZWxzZQorCQlyZXR1cm4gcHJvdG9jb2xfdW5rbm93bl92ZXJzaW9uOworfQorCitlbnVtIHByb3RvY29sX3ZlcnNpb24gZ2V0X3Byb3RvY29sX3ZlcnNpb25fY29uZmlnKHZvaWQpCit7CisJY29uc3QgY2hhciAqdmFsdWU7CisJY29uc3QgY2hhciAqZ2l0X3Rlc3RfayA9ICJHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OIjsKKwljb25zdCBjaGFyICpnaXRfdGVzdF92OworCisJaWYgKCFnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3QoInByb3RvY29sLnZlcnNpb24iLCAmdmFsdWUpKSB7CisJCWVudW0gcHJvdG9jb2xfdmVyc2lvbiB2ZXJzaW9uID0gcGFyc2VfcHJvdG9jb2xfdmVyc2lvbih2YWx1ZSk7CisKKwkJaWYgKHZlcnNpb24gPT0gcHJvdG9jb2xfdW5rbm93bl92ZXJzaW9uKQorCQkJZGllKCJ1bmtub3duIHZhbHVlIGZvciBjb25maWcgJ3Byb3RvY29sLnZlcnNpb24nOiAlcyIsCisJCQkgICAgdmFsdWUpOworCisJCXJldHVybiB2ZXJzaW9uOworCX0KKworCWdpdF90ZXN0X3YgPSBnZXRlbnYoZ2l0X3Rlc3Rfayk7CisJaWYgKGdpdF90ZXN0X3YgJiYgKmdpdF90ZXN0X3YpIHsKKwkJZW51bSBwcm90b2NvbF92ZXJzaW9uIGVudiA9IHBhcnNlX3Byb3RvY29sX3ZlcnNpb24oZ2l0X3Rlc3Rfdik7CisKKwkJaWYgKGVudiA9PSBwcm90b2NvbF91bmtub3duX3ZlcnNpb24pCisJCQlkaWUoInVua25vd24gdmFsdWUgZm9yICVzOiAlcyIsIGdpdF90ZXN0X2ssIGdpdF90ZXN0X3YpOworCQlyZXR1cm4gZW52OworCX0KKworCXJldHVybiBwcm90b2NvbF92MDsKK30KKworZW51bSBwcm90b2NvbF92ZXJzaW9uIGRldGVybWluZV9wcm90b2NvbF92ZXJzaW9uX3NlcnZlcih2b2lkKQoreworCWNvbnN0IGNoYXIgKmdpdF9wcm90b2NvbCA9IGdldGVudihHSVRfUFJPVE9DT0xfRU5WSVJPTk1FTlQpOworCWVudW0gcHJvdG9jb2xfdmVyc2lvbiB2ZXJzaW9uID0gcHJvdG9jb2xfdjA7CisKKwkvKgorCSAqIERldGVybWluZSB3aGljaCBwcm90b2NvbCB2ZXJzaW9uIHRoZSBjbGllbnQgaGFzIHJlcXVlc3RlZC4gIFNpbmNlCisJICogbXVsdGlwbGUgJ3ZlcnNpb24nIGtleXMgY2FuIGJlIHNlbnQgYnkgdGhlIGNsaWVudCwgaW5kaWNhdGluZyB0aGF0CisJICogdGhlIGNsaWVudCBpcyBva2F5IHRvIHNwZWFrIGFueSBvZiB0aGVtLCBzZWxlY3QgdGhlIGdyZWF0ZXN0IHZlcnNpb24KKwkgKiB0aGF0IHRoZSBjbGllbnQgaGFzIHJlcXVlc3RlZC4gIFRoaXMgaXMgZHVlIHRvIHRoZSBhc3N1bXB0aW9uIHRoYXQKKwkgKiB0aGUgbW9zdCByZWNlbnQgcHJvdG9jb2wgdmVyc2lvbiB3aWxsIGJlIHRoZSBtb3N0IHN0YXRlLW9mLXRoZS1hcnQuCisJICovCisJaWYgKGdpdF9wcm90b2NvbCkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCQljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJc3RyaW5nX2xpc3Rfc3BsaXQoJmxpc3QsIGdpdF9wcm90b2NvbCwgJzonLCAtMSk7CisKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmbGlzdCkgeworCQkJY29uc3QgY2hhciAqdmFsdWU7CisJCQllbnVtIHByb3RvY29sX3ZlcnNpb24gdjsKKworCQkJaWYgKHNraXBfcHJlZml4KGl0ZW0tPnN0cmluZywgInZlcnNpb249IiwgJnZhbHVlKSkgeworCQkJCXYgPSBwYXJzZV9wcm90b2NvbF92ZXJzaW9uKHZhbHVlKTsKKwkJCQlpZiAodiA+IHZlcnNpb24pCisJCQkJCXZlcnNpb24gPSB2OworCQkJfQorCQl9CisKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDApOworCX0KKworCXJldHVybiB2ZXJzaW9uOworfQorCitlbnVtIHByb3RvY29sX3ZlcnNpb24gZGV0ZXJtaW5lX3Byb3RvY29sX3ZlcnNpb25fY2xpZW50KGNvbnN0IGNoYXIgKnNlcnZlcl9yZXNwb25zZSkKK3sKKwllbnVtIHByb3RvY29sX3ZlcnNpb24gdmVyc2lvbiA9IHByb3RvY29sX3YwOworCisJaWYgKHNraXBfcHJlZml4KHNlcnZlcl9yZXNwb25zZSwgInZlcnNpb24gIiwgJnNlcnZlcl9yZXNwb25zZSkpIHsKKwkJdmVyc2lvbiA9IHBhcnNlX3Byb3RvY29sX3ZlcnNpb24oc2VydmVyX3Jlc3BvbnNlKTsKKworCQlpZiAodmVyc2lvbiA9PSBwcm90b2NvbF91bmtub3duX3ZlcnNpb24pCisJCQlkaWUoInNlcnZlciBpcyBzcGVha2luZyBhbiB1bmtub3duIHByb3RvY29sIik7CisJCWlmICh2ZXJzaW9uID09IHByb3RvY29sX3YwKQorCQkJZGllKCJwcm90b2NvbCBlcnJvcjogc2VydmVyIGV4cGxpY2l0bHkgc2FpZCB2ZXJzaW9uIDAiKTsKKwl9CisKKwlyZXR1cm4gdmVyc2lvbjsKK30KZGlmZiAtLWdpdCBhL3Byb3RvY29sLmggYi9wcm90b2NvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZjFhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9wcm90b2NvbC5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYgUFJPVE9DT0xfSAorI2RlZmluZSBQUk9UT0NPTF9ICisKK2VudW0gcHJvdG9jb2xfdmVyc2lvbiB7CisJcHJvdG9jb2xfdW5rbm93bl92ZXJzaW9uID0gLTEsCisJcHJvdG9jb2xfdjAgPSAwLAorCXByb3RvY29sX3YxID0gMSwKKwlwcm90b2NvbF92MiA9IDIsCit9OworCisvKgorICogVXNlZCBieSBhIGNsaWVudCB0byBkZXRlcm1pbmUgd2hpY2ggcHJvdG9jb2wgdmVyc2lvbiB0byByZXF1ZXN0IGJlIHVzZWQgd2hlbgorICogY29tbXVuaWNhdGluZyB3aXRoIGEgc2VydmVyLCByZWZsZWN0aW5nIHRoZSBjb25maWd1cmVkIHZhbHVlIG9mIHRoZQorICogJ3Byb3RvY29sLnZlcnNpb24nIGNvbmZpZy4gIElmIHVuY29uZmlndXJlZCwgYSB2YWx1ZSBvZiAncHJvdG9jb2xfdjAnIGlzCisgKiByZXR1cm5lZC4KKyAqLworZW51bSBwcm90b2NvbF92ZXJzaW9uIGdldF9wcm90b2NvbF92ZXJzaW9uX2NvbmZpZyh2b2lkKTsKKworLyoKKyAqIFVzZWQgYnkgYSBzZXJ2ZXIgdG8gZGV0ZXJtaW5lIHdoaWNoIHByb3RvY29sIHZlcnNpb24gc2hvdWxkIGJlIHVzZWQgYmFzZWQgb24KKyAqIGEgY2xpZW50J3MgcmVxdWVzdCwgY29tbXVuaWNhdGVkIHZpYSB0aGUgJ0dJVF9QUk9UT0NPTCcgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAqIGJ5IHNldHRpbmcgYXBwcm9wcmlhdGUgdmFsdWVzIGZvciB0aGUga2V5ICd2ZXJzaW9uJy4gIElmIGEgY2xpZW50IGRvZXNuJ3QKKyAqIHJlcXVlc3QgYSBwYXJ0aWN1bGFyIHByb3RvY29sIHZlcnNpb24sIGEgZGVmYXVsdCBvZiAncHJvdG9jb2xfdjAnIHdpbGwgYmUKKyAqIHVzZWQuCisgKi8KK2VudW0gcHJvdG9jb2xfdmVyc2lvbiBkZXRlcm1pbmVfcHJvdG9jb2xfdmVyc2lvbl9zZXJ2ZXIodm9pZCk7CisKKy8qCisgKiBVc2VkIGJ5IGEgY2xpZW50IHRvIGRldGVybWluZSB3aGljaCBwcm90b2NvbCB2ZXJzaW9uIHRoZSBzZXJ2ZXIgaXMgc3BlYWtpbmcKKyAqIGJhc2VkIG9uIHRoZSBzZXJ2ZXIncyBpbml0aWFsIHJlc3BvbnNlLgorICovCitlbnVtIHByb3RvY29sX3ZlcnNpb24gZGV0ZXJtaW5lX3Byb3RvY29sX3ZlcnNpb25fY2xpZW50KGNvbnN0IGNoYXIgKnNlcnZlcl9yZXNwb25zZSk7CisKKyNlbmRpZiAvKiBQUk9UT0NPTF9IICovCmRpZmYgLS1naXQgYS9wcnVuZS1wYWNrZWQuYyBiL3BydW5lLXBhY2tlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MTUyMGIKLS0tIC9kZXYvbnVsbAorKysgYi9wcnVuZS1wYWNrZWQuYwpAQCAtMCwwICsxLDQzIEBACisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInBydW5lLXBhY2tlZC5oIgorCitzdGF0aWMgc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKKworc3RhdGljIGludCBwcnVuZV9zdWJkaXIodW5zaWduZWQgaW50IG5yLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpkYXRhKQoreworCWludCAqb3B0cyA9IGRhdGE7CisJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgbnIgKyAxKTsKKwlpZiAoISgqb3B0cyAmIFBSVU5FX1BBQ0tFRF9EUllfUlVOKSkKKwkJcm1kaXIocGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJ1bmVfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSB2b2lkICpkYXRhKQoreworCWludCAqb3B0cyA9IGRhdGE7CisKKwlpZiAoIWhhc19vYmplY3RfcGFjayhvaWQpKQorCQlyZXR1cm4gMDsKKworCWlmICgqb3B0cyAmIFBSVU5FX1BBQ0tFRF9EUllfUlVOKQorCQlwcmludGYoInJtIC1mICVzXG4iLCBwYXRoKTsKKwllbHNlCisJCXVubGlua19vcl93YXJuKHBhdGgpOworCXJldHVybiAwOworfQorCit2b2lkIHBydW5lX3BhY2tlZF9vYmplY3RzKGludCBvcHRzKQoreworCWlmIChvcHRzICYgUFJVTkVfUEFDS0VEX1ZFUkJPU0UpCisJCXByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcyhfKCJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIpLCAyNTYpOworCisJZm9yX2VhY2hfbG9vc2VfZmlsZV9pbl9vYmpkaXIoZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwKKwkJCQkgICAgICBwcnVuZV9vYmplY3QsIE5VTEwsIHBydW5lX3N1YmRpciwgJm9wdHMpOworCisJLyogRW5zdXJlIHdlIHNob3cgMTAwJSBiZWZvcmUgZmluaXNoaW5nIHByb2dyZXNzICovCisJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgMjU2KTsKKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7Cit9CmRpZmYgLS1naXQgYS9wcnVuZS1wYWNrZWQuaCBiL3BydW5lLXBhY2tlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNmZhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9wcnVuZS1wYWNrZWQuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgUFJVTkVfUEFDS0VEX0gKKyNkZWZpbmUgUFJVTkVfUEFDS0VEX0gKKworI2RlZmluZSBQUlVORV9QQUNLRURfRFJZX1JVTiAwMQorI2RlZmluZSBQUlVORV9QQUNLRURfVkVSQk9TRSAwMgorCit2b2lkIHBydW5lX3BhY2tlZF9vYmplY3RzKGludCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcXVvdGUuYyBiL3F1b3RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjMGRiYwotLS0gL2Rldi9udWxsCisrKyBiL3F1b3RlLmMKQEAgLTAsMCArMSw1NDUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorCitpbnQgcXVvdGVfcGF0aF9mdWxseSA9IDE7CisKK3N0YXRpYyBpbmxpbmUgaW50IG5lZWRfYnNfcXVvdGUoY2hhciBjKQoreworCXJldHVybiAoYyA9PSAnXCcnIHx8IGMgPT0gJyEnKTsKK30KKworLyogSGVscCB0byBjb3B5IHRoZSB0aGluZyBwcm9wZXJseSBxdW90ZWQgZm9yIHRoZSBzaGVsbCBzYWZldHkuCisgKiBhbnkgc2luZ2xlIHF1b3RlIGlzIHJlcGxhY2VkIHdpdGggJ1wnJywgYW55IGV4Y2xhbWF0aW9uIHBvaW50CisgKiBpcyByZXBsYWNlZCB3aXRoICdcIScsIGFuZCB0aGUgd2hvbGUgdGhpbmcgaXMgZW5jbG9zZWQgaW4gYQorICogc2luZ2xlIHF1b3RlIHBhaXIuCisgKgorICogRS5nLgorICogIG9yaWdpbmFsICAgICBzcV9xdW90ZSAgICAgcmVzdWx0CisgKiAgbmFtZSAgICAgPT0+IG5hbWUgICAgICA9PT4gJ25hbWUnCisgKiAgYSBiICAgICAgPT0+IGEgYiAgICAgICA9PT4gJ2EgYicKKyAqICBhJ2IgICAgICA9PT4gYSdcJydiICAgID09PiAnYSdcJydiJworICogIGEhYiAgICAgID09PiBhJ1whJ2IgICAgPT0+ICdhJ1whJ2InCisgKi8KK3ZvaWQgc3FfcXVvdGVfYnVmKHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3QgY2hhciAqc3JjKQoreworCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOworCisJaWYgKGRzdC0+YnVmID09IHNyYykKKwkJdG9fZnJlZSA9IHN0cmJ1Zl9kZXRhY2goZHN0LCBOVUxMKTsKKworCXN0cmJ1Zl9hZGRjaChkc3QsICdcJycpOworCXdoaWxlICgqc3JjKSB7CisJCXNpemVfdCBsZW4gPSBzdHJjc3BuKHNyYywgIichIik7CisJCXN0cmJ1Zl9hZGQoZHN0LCBzcmMsIGxlbik7CisJCXNyYyArPSBsZW47CisJCXdoaWxlIChuZWVkX2JzX3F1b3RlKCpzcmMpKSB7CisJCQlzdHJidWZfYWRkc3RyKGRzdCwgIidcXCIpOworCQkJc3RyYnVmX2FkZGNoKGRzdCwgKnNyYysrKTsKKwkJCXN0cmJ1Zl9hZGRjaChkc3QsICdcJycpOworCQl9CisJfQorCXN0cmJ1Zl9hZGRjaChkc3QsICdcJycpOworCWZyZWUodG9fZnJlZSk7Cit9CisKK3ZvaWQgc3FfcXVvdGVfYnVmX3ByZXR0eShzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBva19wdW5jdFtdID0gIissLS4vOj1AX14iOworCWNvbnN0IGNoYXIgKnA7CisKKwkvKiBBdm9pZCBsb3NpbmcgYSB6ZXJvLWxlbmd0aCBzdHJpbmcgYnkgYWRkaW5nICcnICovCisJaWYgKCEqc3JjKSB7CisJCXN0cmJ1Zl9hZGRzdHIoZHN0LCAiJyciKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAocCA9IHNyYzsgKnA7IHArKykgeworCQlpZiAoIWlzYWxudW0oKnApICYmICFzdHJjaHIob2tfcHVuY3QsICpwKSkgeworCQkJc3FfcXVvdGVfYnVmKGRzdCwgc3JjKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIGlmIHdlIGdldCBoZXJlLCB3ZSBkaWQgbm90IG5lZWQgcXVvdGluZyAqLworCXN0cmJ1Zl9hZGRzdHIoZHN0LCBzcmMpOworfQorCit2b2lkIHNxX3F1b3RlZihzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0cnVjdCBzdHJidWYgc3JjID0gU1RSQlVGX0lOSVQ7CisKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0cmJ1Zl92YWRkZigmc3JjLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJc3FfcXVvdGVfYnVmKGRzdCwgc3JjLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnNyYyk7Cit9CisKK3ZvaWQgc3FfcXVvdGVfYXJndihzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpOworCisJLyogQ29weSBpbnRvIGRlc3RpbmF0aW9uIGJ1ZmZlci4gKi8KKwlzdHJidWZfZ3Jvdyhkc3QsIDI1NSk7CisJZm9yIChpID0gMDsgYXJndltpXTsgKytpKSB7CisJCXN0cmJ1Zl9hZGRjaChkc3QsICcgJyk7CisJCXNxX3F1b3RlX2J1Zihkc3QsIGFyZ3ZbaV0pOworCX0KK30KKworLyoKKyAqIExlZ2FjeSBmdW5jdGlvbiB0byBhcHBlbmQgZWFjaCBhcmd2IHZhbHVlLCBxdW90ZWQgYXMgbmVjZXNzYXNyeSwKKyAqIHdpdGggd2hpdGVzcGFjZSBiZWZvcmUgZWFjaCB2YWx1ZS4gIFRoaXMgcmVzdWx0cyBpbiBhIGxlYWRpbmcKKyAqIHNwYWNlIGluIHRoZSByZXN1bHQuCisgKi8KK3ZvaWQgc3FfcXVvdGVfYXJndl9wcmV0dHkoc3RydWN0IHN0cmJ1ZiAqZHN0LCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpZiAoYXJndlswXSkKKwkJc3RyYnVmX2FkZGNoKGRzdCwgJyAnKTsKKwlzcV9hcHBlbmRfcXVvdGVfYXJndl9wcmV0dHkoZHN0LCBhcmd2KTsKK30KKworLyoKKyAqIEFwcGVuZCBlYWNoIGFyZ3YgdmFsdWUsIHF1b3RlZCBhcyBuZWNlc3NhcnksIHdpdGggd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZW0uCisgKi8KK3ZvaWQgc3FfYXBwZW5kX3F1b3RlX2FyZ3ZfcHJldHR5KHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBhcmd2W2ldOyBpKyspIHsKKwkJaWYgKGkgPiAwKQorCQkJc3RyYnVmX2FkZGNoKGRzdCwgJyAnKTsKKwkJc3FfcXVvdGVfYnVmX3ByZXR0eShkc3QsIGFyZ3ZbaV0pOworCX0KK30KKworc3RhdGljIGNoYXIgKnNxX2RlcXVvdGVfc3RlcChjaGFyICphcmcsIGNoYXIgKipuZXh0KQoreworCWNoYXIgKmRzdCA9IGFyZzsKKwljaGFyICpzcmMgPSBhcmc7CisJY2hhciBjOworCisJaWYgKCpzcmMgIT0gJ1wnJykKKwkJcmV0dXJuIE5VTEw7CisJZm9yICg7OykgeworCQljID0gKisrc3JjOworCQlpZiAoIWMpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGMgIT0gJ1wnJykgeworCQkJKmRzdCsrID0gYzsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIFdlIHN0ZXBwZWQgb3V0IG9mIHNxICovCisJCXN3aXRjaCAoKisrc3JjKSB7CisJCWNhc2UgJ1wwJzoKKwkJCSpkc3QgPSAwOworCQkJaWYgKG5leHQpCisJCQkJKm5leHQgPSBOVUxMOworCQkJcmV0dXJuIGFyZzsKKwkJY2FzZSAnXFwnOgorCQkJLyoKKwkJCSAqIEFsbG93IGJhY2tzbGFzaGVkIGNoYXJhY3RlcnMgb3V0c2lkZSBvZgorCQkJICogc2luZ2xlLXF1b3RlcyBvbmx5IGlmIHRoZXkgbmVlZCBlc2NhcGluZywKKwkJCSAqIGFuZCBvbmx5IGlmIHdlIHJlc3VtZSB0aGUgc2luZ2xlLXF1b3RlZCBwYXJ0CisJCQkgKiBhZnRlcndhcmQuCisJCQkgKi8KKwkJCWlmIChuZWVkX2JzX3F1b3RlKHNyY1sxXSkgJiYgc3JjWzJdID09ICdcJycpIHsKKwkJCQkqZHN0KysgPSBzcmNbMV07CisJCQkJc3JjICs9IDI7CisJCQkJY29udGludWU7CisJCQl9CisJCS8qIEZhbGx0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQlpZiAoIW5leHQgfHwgIWlzc3BhY2UoKnNyYykpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlkbyB7CisJCQkJYyA9ICorK3NyYzsKKwkJCX0gd2hpbGUgKGlzc3BhY2UoYykpOworCQkJKmRzdCA9IDA7CisJCQkqbmV4dCA9IHNyYzsKKwkJCXJldHVybiBhcmc7CisJCX0KKwl9Cit9CisKK2NoYXIgKnNxX2RlcXVvdGUoY2hhciAqYXJnKQoreworCXJldHVybiBzcV9kZXF1b3RlX3N0ZXAoYXJnLCBOVUxMKTsKK30KKworc3RhdGljIGludCBzcV9kZXF1b3RlX3RvX2FyZ3ZfaW50ZXJuYWwoY2hhciAqYXJnLAorCQkJCSAgICAgICBjb25zdCBjaGFyICoqKmFyZ3YsIGludCAqbnIsIGludCAqYWxsb2MsCisJCQkJICAgICAgIHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSkKK3sKKwljaGFyICpuZXh0ID0gYXJnOworCisJaWYgKCEqYXJnKQorCQlyZXR1cm4gMDsKKwlkbyB7CisJCWNoYXIgKmRlcXVvdGVkID0gc3FfZGVxdW90ZV9zdGVwKG5leHQsICZuZXh0KTsKKwkJaWYgKCFkZXF1b3RlZCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKGFyZ3YpIHsKKwkJCUFMTE9DX0dST1coKmFyZ3YsICpuciArIDEsICphbGxvYyk7CisJCQkoKmFyZ3YpWygqbnIpKytdID0gZGVxdW90ZWQ7CisJCX0KKwkJaWYgKGFycmF5KQorCQkJYXJndl9hcnJheV9wdXNoKGFycmF5LCBkZXF1b3RlZCk7CisJfSB3aGlsZSAobmV4dCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNxX2RlcXVvdGVfdG9fYXJndihjaGFyICphcmcsIGNvbnN0IGNoYXIgKioqYXJndiwgaW50ICpuciwgaW50ICphbGxvYykKK3sKKwlyZXR1cm4gc3FfZGVxdW90ZV90b19hcmd2X2ludGVybmFsKGFyZywgYXJndiwgbnIsIGFsbG9jLCBOVUxMKTsKK30KKworaW50IHNxX2RlcXVvdGVfdG9fYXJndl9hcnJheShjaGFyICphcmcsIHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSkKK3sKKwlyZXR1cm4gc3FfZGVxdW90ZV90b19hcmd2X2ludGVybmFsKGFyZywgTlVMTCwgTlVMTCwgTlVMTCwgYXJyYXkpOworfQorCisvKiAxIG1lYW5zOiBxdW90ZSBhcyBvY3RhbAorICogMCBtZWFuczogcXVvdGUgYXMgb2N0YWwgaWYgKHF1b3RlX3BhdGhfZnVsbHkpCisgKiAtMSBtZWFuczogbmV2ZXIgcXVvdGUKKyAqIGM6IHF1b3RlIGFzICJcXGMiCisgKi8KKyNkZWZpbmUgWDgoeCkgICB4LCB4LCB4LCB4LCB4LCB4LCB4LCB4CisjZGVmaW5lIFgxNih4KSAgWDgoeCksIFg4KHgpCitzdGF0aWMgc2lnbmVkIGNoYXIgY29uc3Qgc3FfbG9va3VwWzI1Nl0gPSB7CisJLyogICAgICAgICAgIDAgICAgMSAgICAyICAgIDMgICAgNCAgICA1ICAgIDYgICAgNyAqLworCS8qIDB4MDAgKi8gICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAnYScsCisJLyogMHgwOCAqLyAnYicsICd0JywgJ24nLCAndicsICdmJywgJ3InLCAgIDEsICAgMSwKKwkvKiAweDEwICovIFgxNigxKSwKKwkvKiAweDIwICovICAtMSwgIC0xLCAnIicsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLAorCS8qIDB4MjggKi8gWDE2KC0xKSwgWDE2KC0xKSwgWDE2KC0xKSwKKwkvKiAweDU4ICovICAtMSwgIC0xLCAgLTEsICAtMSwnXFwnLCAgLTEsICAtMSwgIC0xLAorCS8qIDB4NjAgKi8gWDE2KC0xKSwgWDgoLTEpLAorCS8qIDB4NzggKi8gIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgIDEsCisJLyogMHg4MCAqLyAvKiBzZXQgdG8gMCAqLworfTsKKworc3RhdGljIGlubGluZSBpbnQgc3FfbXVzdF9xdW90ZShjaGFyIGMpCit7CisJcmV0dXJuIHNxX2xvb2t1cFsodW5zaWduZWQgY2hhciljXSArIHF1b3RlX3BhdGhfZnVsbHkgPiAwOworfQorCisvKiByZXR1cm5zIHRoZSBsb25nZXN0IHByZWZpeCBub3QgbmVlZGluZyBhIHF1b3RlIHVwIHRvIG1heGxlbiBpZiBwb3NpdGl2ZS4KKyAgIFRoaXMgc3RvcHMgYXQgdGhlIGZpcnN0IFwwIGJlY2F1c2UgaXQncyBtYXJrZWQgYXMgYSBjaGFyYWN0ZXIgbmVlZGluZyBhbgorICAgZXNjYXBlICovCitzdGF0aWMgc2l6ZV90IG5leHRfcXVvdGVfcG9zKGNvbnN0IGNoYXIgKnMsIHNzaXplX3QgbWF4bGVuKQoreworCXNpemVfdCBsZW47CisJaWYgKG1heGxlbiA8IDApIHsKKwkJZm9yIChsZW4gPSAwOyAhc3FfbXVzdF9xdW90ZShzW2xlbl0pOyBsZW4rKyk7CisJfSBlbHNlIHsKKwkJZm9yIChsZW4gPSAwOyBsZW4gPCBtYXhsZW4gJiYgIXNxX211c3RfcXVvdGUoc1tsZW5dKTsgbGVuKyspOworCX0KKwlyZXR1cm4gbGVuOworfQorCisvKgorICogQy1zdHlsZSBuYW1lIHF1b3RpbmcuCisgKgorICogKDEpIGlmIHNiIGFuZCBmcCBhcmUgYm90aCBOVUxMLCBpbnNwZWN0IHRoZSBpbnB1dCBuYW1lIGFuZCBjb3VudHMgdGhlCisgKiAgICAgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgYXJlIG5lZWRlZCB0byBob2xkIGNfc3R5bGUgcXVvdGVkIHZlcnNpb24gb2YgbmFtZSwKKyAqICAgICBjb3VudGluZyB0aGUgZG91YmxlIHF1b3RlcyBhcm91bmQgaXQgYnV0IG5vdCB0ZXJtaW5hdGluZyBOVUwsIGFuZAorICogICAgIHJldHVybnMgaXQuCisgKiAgICAgSG93ZXZlciwgaWYgbmFtZSBkb2VzIG5vdCBuZWVkIGNfc3R5bGUgcXVvdGluZywgaXQgcmV0dXJucyAwLgorICoKKyAqICgyKSBpZiBzYiBvciBmcCBhcmUgbm90IE5VTEwsIGl0IGVtaXRzIHRoZSBjX3N0eWxlIHF1b3RlZCB2ZXJzaW9uCisgKiAgICAgb2YgbmFtZSwgZW5jbG9zZWQgd2l0aCBkb3VibGUgcXVvdGVzIGlmIGFza2VkIGFuZCBuZWVkZWQgb25seS4KKyAqICAgICBSZXR1cm4gdmFsdWUgaXMgdGhlIHNhbWUgYXMgaW4gKDEpLgorICovCitzdGF0aWMgc2l6ZV90IHF1b3RlX2Nfc3R5bGVfY291bnRlZChjb25zdCBjaGFyICpuYW1lLCBzc2l6ZV90IG1heGxlbiwKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZwLCBpbnQgbm9fZHEpCit7CisjdW5kZWYgRU1JVAorI2RlZmluZSBFTUlUKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoc2IpIHN0cmJ1Zl9hZGRjaChzYiwgKGMpKTsgICAgICAgICAgXAorCQlpZiAoZnApIGZwdXRjKChjKSwgZnApOyAgICAgICAgICAgICAgICAgXAorCQljb3VudCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIEVNSVRCVUYocywgbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChzYikgc3RyYnVmX2FkZChzYiwgKHMpLCAobCkpOyAgICAgICBcCisJCWlmIChmcCkgZndyaXRlKChzKSwgKGwpLCAxLCBmcCk7ICAgICAgICBcCisJCWNvdW50ICs9IChsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSB3aGlsZSAoMCkKKworCXNpemVfdCBsZW4sIGNvdW50ID0gMDsKKwljb25zdCBjaGFyICpwID0gbmFtZTsKKworCWZvciAoOzspIHsKKwkJaW50IGNoOworCisJCWxlbiA9IG5leHRfcXVvdGVfcG9zKHAsIG1heGxlbik7CisJCWlmIChsZW4gPT0gbWF4bGVuIHx8IChtYXhsZW4gPCAwICYmICFwW2xlbl0pKQorCQkJYnJlYWs7CisKKwkJaWYgKCFub19kcSAmJiBwID09IG5hbWUpCisJCQlFTUlUKCciJyk7CisKKwkJRU1JVEJVRihwLCBsZW4pOworCQlFTUlUKCdcXCcpOworCQlwICs9IGxlbjsKKwkJY2ggPSAodW5zaWduZWQgY2hhcikqcCsrOworCQlpZiAobWF4bGVuID49IDApCisJCQltYXhsZW4gLT0gbGVuICsgMTsKKwkJaWYgKHNxX2xvb2t1cFtjaF0gPj0gJyAnKSB7CisJCQlFTUlUKHNxX2xvb2t1cFtjaF0pOworCQl9IGVsc2UgeworCQkJRU1JVCgoKGNoID4+IDYpICYgMDMpICsgJzAnKTsKKwkJCUVNSVQoKChjaCA+PiAzKSAmIDA3KSArICcwJyk7CisJCQlFTUlUKCgoY2ggPj4gMCkgJiAwNykgKyAnMCcpOworCQl9CisJfQorCisJRU1JVEJVRihwLCBsZW4pOworCWlmIChwID09IG5hbWUpICAgLyogbm8gZW5kaW5nIHF1b3RlIG5lZWRlZCAqLworCQlyZXR1cm4gMDsKKworCWlmICghbm9fZHEpCisJCUVNSVQoJyInKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3NpemVfdCBxdW90ZV9jX3N0eWxlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpmcCwgaW50IG5vZHEpCit7CisJcmV0dXJuIHF1b3RlX2Nfc3R5bGVfY291bnRlZChuYW1lLCAtMSwgc2IsIGZwLCBub2RxKTsKK30KKwordm9pZCBxdW90ZV90d29fY19zdHlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbm9kcSkKK3sKKwlpZiAocXVvdGVfY19zdHlsZShwcmVmaXgsIE5VTEwsIE5VTEwsIDApIHx8CisJICAgIHF1b3RlX2Nfc3R5bGUocGF0aCwgTlVMTCwgTlVMTCwgMCkpIHsKKwkJaWYgKCFub2RxKQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnIicpOworCQlxdW90ZV9jX3N0eWxlKHByZWZpeCwgc2IsIE5VTEwsIDEpOworCQlxdW90ZV9jX3N0eWxlKHBhdGgsIHNiLCBOVUxMLCAxKTsKKwkJaWYgKCFub2RxKQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnIicpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHByZWZpeCk7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHBhdGgpOworCX0KK30KKwordm9pZCB3cml0ZV9uYW1lX3F1b3RlZChjb25zdCBjaGFyICpuYW1lLCBGSUxFICpmcCwgaW50IHRlcm1pbmF0b3IpCit7CisJaWYgKHRlcm1pbmF0b3IpIHsKKwkJcXVvdGVfY19zdHlsZShuYW1lLCBOVUxMLCBmcCwgMCk7CisJfSBlbHNlIHsKKwkJZnB1dHMobmFtZSwgZnApOworCX0KKwlmcHV0Yyh0ZXJtaW5hdG9yLCBmcCk7Cit9CisKK3ZvaWQgd3JpdGVfbmFtZV9xdW90ZWRfcmVsYXRpdmUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCUZJTEUgKmZwLCBpbnQgdGVybWluYXRvcikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwluYW1lID0gcmVsYXRpdmVfcGF0aChuYW1lLCBwcmVmaXgsICZzYik7CisJd3JpdGVfbmFtZV9xdW90ZWQobmFtZSwgZnAsIHRlcm1pbmF0b3IpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworLyogcXVvdGUgcGF0aCBhcyByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gcHJlZml4ICovCitjaGFyICpxdW90ZV9wYXRoX3JlbGF0aXZlKGNvbnN0IGNoYXIgKmluLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcmVsID0gcmVsYXRpdmVfcGF0aChpbiwgcHJlZml4LCAmc2IpOworCXN0cmJ1Zl9yZXNldChvdXQpOworCXF1b3RlX2Nfc3R5bGVfY291bnRlZChyZWwsIHN0cmxlbihyZWwpLCBvdXQsIE5VTEwsIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwlyZXR1cm4gb3V0LT5idWY7Cit9CisKKy8qCisgKiBDLXN0eWxlIG5hbWUgdW5xdW90aW5nLgorICoKKyAqIFF1b3RlZCBzaG91bGQgcG9pbnQgYXQgdGhlIG9wZW5pbmcgZG91YmxlIHF1b3RlLgorICogKyBSZXR1cm5zIDAgaWYgaXQgd2FzIGFibGUgdG8gdW5xdW90ZSB0aGUgc3RyaW5nIHByb3Blcmx5LCBhbmQgYXBwZW5kcyB0aGUKKyAqICAgcmVzdWx0IGluIHRoZSBzdHJidWYgYHNiJy4KKyAqICsgUmV0dXJucyAtMSBpbiBjYXNlIG9mIGVycm9yLCBhbmQgZG9lc24ndCB0b3VjaCB0aGUgc3RyYnVmLiBUaG91Z2ggbm90ZQorICogICB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSBtZW1vcnkgaW4gdGhlIHN0cmJ1Ziwgc28gY2FsbGluZworICogICBzdHJidWZfcmVsZWFzZSBpcyBtYW5kYXRvcnkgd2hpY2hldmVyIHJlc3VsdCB1bnF1b3RlX2Nfc3R5bGUgcmV0dXJucy4KKyAqCisgKiBVcGRhdGVzIGVuZHAgcG9pbnRlciB0byBwb2ludCBhdCBvbmUgcGFzdCB0aGUgZW5kaW5nIGRvdWJsZSBxdW90ZSBpZiBnaXZlbi4KKyAqLworaW50IHVucXVvdGVfY19zdHlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcXVvdGVkLCBjb25zdCBjaGFyICoqZW5kcCkKK3sKKwlzaXplX3Qgb2xkbGVuID0gc2ItPmxlbiwgbGVuOworCWludCBjaCwgYWM7CisKKwlpZiAoKnF1b3RlZCsrICE9ICciJykKKwkJcmV0dXJuIC0xOworCisJZm9yICg7OykgeworCQlsZW4gPSBzdHJjc3BuKHF1b3RlZCwgIlwiXFwiKTsKKwkJc3RyYnVmX2FkZChzYiwgcXVvdGVkLCBsZW4pOworCQlxdW90ZWQgKz0gbGVuOworCisJCXN3aXRjaCAoKnF1b3RlZCsrKSB7CisJCSAgY2FzZSAnIic6CisJCQlpZiAoZW5kcCkKKwkJCQkqZW5kcCA9IHF1b3RlZDsKKwkJCXJldHVybiAwOworCQkgIGNhc2UgJ1xcJzoKKwkJCWJyZWFrOworCQkgIGRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJc3dpdGNoICgoY2ggPSAqcXVvdGVkKyspKSB7CisJCWNhc2UgJ2EnOiBjaCA9ICdcYSc7IGJyZWFrOworCQljYXNlICdiJzogY2ggPSAnXGInOyBicmVhazsKKwkJY2FzZSAnZic6IGNoID0gJ1xmJzsgYnJlYWs7CisJCWNhc2UgJ24nOiBjaCA9ICdcbic7IGJyZWFrOworCQljYXNlICdyJzogY2ggPSAnXHInOyBicmVhazsKKwkJY2FzZSAndCc6IGNoID0gJ1x0JzsgYnJlYWs7CisJCWNhc2UgJ3YnOiBjaCA9ICdcdic7IGJyZWFrOworCisJCWNhc2UgJ1xcJzogY2FzZSAnIic6CisJCQlicmVhazsgLyogdmVyYmF0aW0gKi8KKworCQkvKiBvY3RhbCB2YWx1ZXMgd2l0aCBmaXJzdCBkaWdpdCBvdmVyIDQgb3ZlcmZsb3cgKi8KKwkJY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6CisJCQkJCWFjID0gKChjaCAtICcwJykgPDwgNik7CisJCQlpZiAoKGNoID0gKnF1b3RlZCsrKSA8ICcwJyB8fCAnNycgPCBjaCkKKwkJCQlnb3RvIGVycm9yOworCQkJCQlhYyB8PSAoKGNoIC0gJzAnKSA8PCAzKTsKKwkJCWlmICgoY2ggPSAqcXVvdGVkKyspIDwgJzAnIHx8ICc3JyA8IGNoKQorCQkJCWdvdG8gZXJyb3I7CisJCQkJCWFjIHw9IChjaCAtICcwJyk7CisJCQkJCWNoID0gYWM7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQkJfQorCQlzdHJidWZfYWRkY2goc2IsIGNoKTsKKwkJfQorCisgIGVycm9yOgorCXN0cmJ1Zl9zZXRsZW4oc2IsIG9sZGxlbik7CisJcmV0dXJuIC0xOworfQorCisvKiBxdW90aW5nIGFzIGEgc3RyaW5nIGxpdGVyYWwgZm9yIG90aGVyIGxhbmd1YWdlcyAqLworCit2b2lkIHBlcmxfcXVvdGVfYnVmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzcmMpCit7CisJY29uc3QgY2hhciBzcSA9ICdcJyc7CisJY29uc3QgY2hhciBicSA9ICdcXCc7CisJY2hhciBjOworCisJc3RyYnVmX2FkZGNoKHNiLCBzcSk7CisJd2hpbGUgKChjID0gKnNyYysrKSkgeworCQlpZiAoYyA9PSBzcSB8fCBjID09IGJxKQorCQkJc3RyYnVmX2FkZGNoKHNiLCBicSk7CisJCXN0cmJ1Zl9hZGRjaChzYiwgYyk7CisJfQorCXN0cmJ1Zl9hZGRjaChzYiwgc3EpOworfQorCit2b2lkIHB5dGhvbl9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwljb25zdCBjaGFyIHNxID0gJ1wnJzsKKwljb25zdCBjaGFyIGJxID0gJ1xcJzsKKwljb25zdCBjaGFyIG5sID0gJ1xuJzsKKwljaGFyIGM7CisKKwlzdHJidWZfYWRkY2goc2IsIHNxKTsKKwl3aGlsZSAoKGMgPSAqc3JjKyspKSB7CisJCWlmIChjID09IG5sKSB7CisJCQlzdHJidWZfYWRkY2goc2IsIGJxKTsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJ24nKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID09IHNxIHx8IGMgPT0gYnEpCisJCQlzdHJidWZfYWRkY2goc2IsIGJxKTsKKwkJc3RyYnVmX2FkZGNoKHNiLCBjKTsKKwl9CisJc3RyYnVmX2FkZGNoKHNiLCBzcSk7Cit9CisKK3ZvaWQgdGNsX3F1b3RlX2J1ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqc3JjKQoreworCWNoYXIgYzsKKworCXN0cmJ1Zl9hZGRjaChzYiwgJyInKTsKKwl3aGlsZSAoKGMgPSAqc3JjKyspKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdbJzogY2FzZSAnXSc6CisJCWNhc2UgJ3snOiBjYXNlICd9JzoKKwkJY2FzZSAnJCc6IGNhc2UgJ1xcJzogY2FzZSAnIic6CisJCQlzdHJidWZfYWRkY2goc2IsICdcXCcpOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJZGVmYXVsdDoKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgYyk7CisJCQlicmVhazsKKwkJY2FzZSAnXGYnOgorCQkJc3RyYnVmX2FkZHN0cihzYiwgIlxcZiIpOworCQkJYnJlYWs7CisJCWNhc2UgJ1xyJzoKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcXHIiKTsKKwkJCWJyZWFrOworCQljYXNlICdcbic6CisJCQlzdHJidWZfYWRkc3RyKHNiLCAiXFxuIik7CisJCQlicmVhazsKKwkJY2FzZSAnXHQnOgorCQkJc3RyYnVmX2FkZHN0cihzYiwgIlxcdCIpOworCQkJYnJlYWs7CisJCWNhc2UgJ1x2JzoKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcXHYiKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXN0cmJ1Zl9hZGRjaChzYiwgJyInKTsKK30KKwordm9pZCBiYXNpY19yZWdleF9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwljaGFyIGM7CisKKwlpZiAoKnNyYyA9PSAnXicpIHsKKwkJLyogb25seSBiZWdpbm5pbmcgJ14nIGlzIHNwZWNpYWwgYW5kIG5lZWRzIHF1b3RpbmcgKi8KKwkJc3RyYnVmX2FkZGNoKHNiLCAnXFwnKTsKKwkJc3RyYnVmX2FkZGNoKHNiLCAqc3JjKyspOworCX0KKwlpZiAoKnNyYyA9PSAnKicpCisJCS8qIGJlZ2lubmluZyAnKicgaXMgbm90IHNwZWNpYWwsIG5vIHF1b3RpbmcgKi8KKwkJc3RyYnVmX2FkZGNoKHNiLCAqc3JjKyspOworCisJd2hpbGUgKChjID0gKnNyYysrKSkgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnWyc6CisJCWNhc2UgJy4nOgorCQljYXNlICdcXCc6CisJCWNhc2UgJyonOgorCQkJc3RyYnVmX2FkZGNoKHNiLCAnXFwnKTsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgYyk7CisJCQlicmVhazsKKworCQljYXNlICckJzoKKwkJCS8qIG9ubHkgdGhlIGVuZCAnJCcgaXMgc3BlY2lhbCBhbmQgbmVlZHMgcXVvdGluZyAqLworCQkJaWYgKCpzcmMgPT0gJ1wwJykKKwkJCQlzdHJidWZfYWRkY2goc2IsICdcXCcpOworCQkJc3RyYnVmX2FkZGNoKHNiLCBjKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlzdHJidWZfYWRkY2goc2IsIGMpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9xdW90ZS5oIGIvcXVvdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYThlZTMxCi0tLSAvZGV2L251bGwKKysrIGIvcXVvdGUuaApAQCAtMCwwICsxLDg0IEBACisjaWZuZGVmIFFVT1RFX0gKKyNkZWZpbmUgUVVPVEVfSAorCitzdHJ1Y3Qgc3RyYnVmOworCisvKiBIZWxwIHRvIGNvcHkgdGhlIHRoaW5nIHByb3Blcmx5IHF1b3RlZCBmb3IgdGhlIHNoZWxsIHNhZmV0eS4KKyAqIGFueSBzaW5nbGUgcXVvdGUgaXMgcmVwbGFjZWQgd2l0aCAnXCcnLCBhbnkgZXhjbGFtYXRpb24gcG9pbnQKKyAqIGlzIHJlcGxhY2VkIHdpdGggJ1whJywgYW5kIHRoZSB3aG9sZSB0aGluZyBpcyBlbmNsb3NlZCBpbiBhCisgKiBzaW5nbGUgcXVvdGUgcGFpci4KKyAqCisgKiBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBwYXNzaW5nIHRoZSByZXN1bHQgdG8gc3lzdGVtKCkgYXMgYW4KKyAqIGFyZ3VtZW50OgorICoKKyAqIHNwcmludGYoY21kLCAiZm9vYmFyICVzICVzIiwgc3FfcXVvdGUoYXJnMCksIHNxX3F1b3RlKGFyZzEpKQorICoKKyAqIHdvdWxkIGJlIGFwcHJvcHJpYXRlLiAgSWYgdGhlIHN5c3RlbSgpIGlzIGdvaW5nIHRvIGNhbGwgc3NoIHRvCisgKiBydW4gdGhlIGNvbW1hbmQgb24gdGhlIG90aGVyIHNpZGU6CisgKgorICogc3ByaW50ZihjbWQsICJnaXQtZGlmZi10cmVlICVzICVzIiwgc3FfcXVvdGUoYXJnMCksIHNxX3F1b3RlKGFyZzEpKTsKKyAqIHNwcmludGYocmNtZCwgInNzaCAlcyAlcyIsIHNxX3F1b3RlKGhvc3QpLCBzcV9xdW90ZShjbWQpKTsKKyAqCisgKiBOb3RlIHRoYXQgdGhlIGFib3ZlIGV4YW1wbGVzIGxlYWsgbWVtb3J5ISAgUmVtZW1iZXIgdG8gZnJlZSByZXN1bHQgZnJvbQorICogc3FfcXVvdGUoKSBpbiBhIHJlYWwgYXBwbGljYXRpb24uCisgKgorICogc3FfcXVvdGVfYnVmKCkgd3JpdGVzIHRvIGFuIGV4aXN0aW5nIGJ1ZmZlciBvZiBzcGVjaWZpZWQgc2l6ZTsgaXQKKyAqIHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGhhdmUgYmVlbiB3cml0dGVuCisgKiBleGNsdWRpbmcgdGhlIGZpbmFsIG51bGwgcmVnYXJkbGVzcyBvZiB0aGUgYnVmZmVyIHNpemUuCisgKgorICogc3FfcXVvdGVmKCkgcXVvdGVzIHRoZSBlbnRpcmUgZm9ybWF0dGVkIHN0cmluZyBhcyBhIHNpbmdsZSByZXN1bHQuCisgKi8KKwordm9pZCBzcV9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBjaGFyICpzcmMpOwordm9pZCBzcV9xdW90ZV9hcmd2KHN0cnVjdCBzdHJidWYgKiwgY29uc3QgY2hhciAqKmFyZ3YpOwordm9pZCBzcV9xdW90ZWYoc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKy8qCisgKiBUaGVzZSBtYXRjaCB0aGVpciBub24tcHJldHR5IHZhcmlhbnRzLCBleGNlcHQgdGhhdCB0aGV5IGF2b2lkCisgKiBxdW90aW5nIHdoZW4gdGhlcmUgYXJlIG5vIGV4b3RpYyBjaGFyYWN0ZXJzLiBUaGVzZSBzaG91bGQgb25seSBiZSB1c2VkIGZvcgorICogaHVtYW4tcmVhZGFibGUgb3V0cHV0LCBhcyBzcV9kZXF1b3RlKCkgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBkZXF1b3RlIGl0LgorICovCit2b2lkIHNxX3F1b3RlX2J1Zl9wcmV0dHkoc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBjaGFyICpzcmMpOwordm9pZCBzcV9xdW90ZV9hcmd2X3ByZXR0eShzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IGNoYXIgKiphcmd2KTsKK3ZvaWQgc3FfYXBwZW5kX3F1b3RlX2FyZ3ZfcHJldHR5KHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3QgY2hhciAqKmFyZ3YpOworCisvKiBUaGlzIHVud3JhcHMgd2hhdCBzcV9xdW90ZSgpIHByb2R1Y2VzIGluIHBsYWNlLCBidXQgcmV0dXJucworICogTlVMTCBpZiB0aGUgaW5wdXQgZG9lcyBub3QgbG9vayBsaWtlIHdoYXQgc3FfcXVvdGUgd291bGQgaGF2ZQorICogcHJvZHVjZWQuCisgKi8KK2NoYXIgKnNxX2RlcXVvdGUoY2hhciAqKTsKKworLyoKKyAqIFNhbWUgYXMgdGhlIGFib3ZlLCBidXQgY2FuIGJlIHVzZWQgdG8gdW53cmFwIG1hbnkgYXJndW1lbnRzIGluIHRoZQorICogc2FtZSBzdHJpbmcgc2VwYXJhdGVkIGJ5IHNwYWNlLiBMaWtlIHNxX3F1b3RlLCBpdCB3b3JrcyBpbiBwbGFjZSwKKyAqIG1vZGlmeWluZyBhcmcgYW5kIGFwcGVuZGluZyBwb2ludGVycyBpbnRvIGl0IHRvIGFyZ3YuCisgKi8KK2ludCBzcV9kZXF1b3RlX3RvX2FyZ3YoY2hhciAqYXJnLCBjb25zdCBjaGFyICoqKmFyZ3YsIGludCAqbnIsIGludCAqYWxsb2MpOworCisvKgorICogU2FtZSBhcyBhYm92ZSwgYnV0IHN0b3JlIHRoZSB1bnF1b3RlZCBzdHJpbmdzIGluIGFuIGFyZ3ZfYXJyYXkuIFdlIHdpbGwKKyAqIHN0aWxsIG1vZGlmeSBhcmcgaW4gcGxhY2UsIGJ1dCB1bmxpa2Ugc3FfZGVxdW90ZV90b19hcmd2LCB0aGUgYXJndl9hcnJheQorICogd2lsbCBkdXBsaWNhdGUgYW5kIHRha2Ugb3duZXJzaGlwIG9mIHRoZSBzdHJpbmdzLgorICovCitzdHJ1Y3QgYXJndl9hcnJheTsKK2ludCBzcV9kZXF1b3RlX3RvX2FyZ3ZfYXJyYXkoY2hhciAqYXJnLCBzdHJ1Y3QgYXJndl9hcnJheSAqKTsKKworaW50IHVucXVvdGVfY19zdHlsZShzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IGNoYXIgKnF1b3RlZCwgY29uc3QgY2hhciAqKmVuZHApOworc2l6ZV90IHF1b3RlX2Nfc3R5bGUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqLCBGSUxFICosIGludCBub19kcSk7Cit2b2lkIHF1b3RlX3R3b19jX3N0eWxlKHN0cnVjdCBzdHJidWYgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisKK3ZvaWQgd3JpdGVfbmFtZV9xdW90ZWQoY29uc3QgY2hhciAqbmFtZSwgRklMRSAqLCBpbnQgdGVybWluYXRvcik7Cit2b2lkIHdyaXRlX25hbWVfcXVvdGVkX3JlbGF0aXZlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQlGSUxFICpmcCwgaW50IHRlcm1pbmF0b3IpOworCisvKiBxdW90ZSBwYXRoIGFzIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBwcmVmaXggKi8KK2NoYXIgKnF1b3RlX3BhdGhfcmVsYXRpdmUoY29uc3QgY2hhciAqaW4sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgc3RydWN0IHN0cmJ1ZiAqb3V0KTsKKworLyogcXVvdGluZyBhcyBhIHN0cmluZyBsaXRlcmFsIGZvciBvdGhlciBsYW5ndWFnZXMgKi8KK3ZvaWQgcGVybF9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYyk7Cit2b2lkIHB5dGhvbl9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYyk7Cit2b2lkIHRjbF9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYyk7Cit2b2lkIGJhc2ljX3JlZ2V4X3F1b3RlX2J1ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqc3JjKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yYW5nZS1kaWZmLmMgYi9yYW5nZS1kaWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhZjA4NgotLS0gL2Rldi9udWxsCisrKyBiL3JhbmdlLWRpZmYuYwpAQCAtMCwwICsxLDU2OCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmFuZ2UtZGlmZi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImxpbmVhci1hc3NpZ25tZW50LmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJwcmV0dHkuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorI2luY2x1ZGUgImFwcGx5LmgiCisKK3N0cnVjdCBwYXRjaF91dGlsIHsKKwkvKiBGb3IgdGhlIHNlYXJjaCBmb3IgYW4gZXhhY3QgbWF0Y2ggKi8KKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlOworCWNvbnN0IGNoYXIgKmRpZmYsICpwYXRjaDsKKworCWludCBpLCBzaG93bjsKKwlpbnQgZGlmZnNpemU7CisJc2l6ZV90IGRpZmZfb2Zmc2V0OworCS8qIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hpbmcgaXRlbSBpbiB0aGUgb3RoZXIgYnJhbmNoLCBvciAtMSAqLworCWludCBtYXRjaGluZzsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKK307CisKK3N0YXRpYyBzaXplX3QgZmluZF9lbmRfb2ZfbGluZShjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwljaGFyICplb2wgPSBtZW1jaHIoYnVmZmVyLCAnXG4nLCBzaXplKTsKKworCWlmICghZW9sKQorCQlyZXR1cm4gc2l6ZTsKKworCSplb2wgPSAnXDAnOworCXJldHVybiBlb2wgKyAxIC0gYnVmZmVyOworfQorCisvKgorICogUmVhZHMgdGhlIHBhdGNoZXMgaW50byBhIHN0cmluZyBsaXN0LCB3aXRoIHRoZSBgdXRpbGAgZmllbGQgYmVpbmcgcG9wdWxhdGVkCisgKiBhcyBzdHJ1Y3Qgb2JqZWN0X2lkICh3aWxsIG5lZWQgdG8gYmUgZnJlZSgpZCkuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9wYXRjaGVzKGNvbnN0IGNoYXIgKnJhbmdlLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsCisJCQljb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqb3RoZXJfYXJnKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQsIGNvbnRlbnRzID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHBhdGNoX3V0aWwgKnV0aWwgPSBOVUxMOworCWludCBpbl9oZWFkZXIgPSAxOworCWNoYXIgKmxpbmUsICpjdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKKwlpbnQgb2Zmc2V0LCBsZW47CisJc2l6ZV90IHNpemU7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAibG9nIiwgIi0tbm8tY29sb3IiLCAiLXAiLCAiLS1uby1tZXJnZXMiLAorCQkJIi0tcmV2ZXJzZSIsICItLWRhdGUtb3JkZXIiLCAiLS1kZWNvcmF0ZT1ubyIsCisJCQkiLS1uby1wcmVmaXgiLAorCQkJLyoKKwkJCSAqIENob29zZSBpbmRpY2F0b3JzIHRoYXQgYXJlIG5vdCB1c2VkIGFueXdoZXJlCisJCQkgKiBlbHNlIGluIGRpZmZzLCBidXQgc3RpbGwgbG9vayByZWFzb25hYmxlCisJCQkgKiAoZS5nLiB3aWxsIG5vdCBiZSBjb25mdXNpbmcgd2hlbiBkZWJ1Z2dpbmcpCisJCQkgKi8KKwkJCSItLW91dHB1dC1pbmRpY2F0b3ItbmV3PT4iLAorCQkJIi0tb3V0cHV0LWluZGljYXRvci1vbGQ9PCIsCisJCQkiLS1vdXRwdXQtaW5kaWNhdG9yLWNvbnRleHQ9IyIsCisJCQkiLS1uby1hYmJyZXYtY29tbWl0IiwKKwkJCSItLXByZXR0eT1tZWRpdW0iLAorCQkJIi0tbm90ZXMiLAorCQkJTlVMTCk7CisJaWYgKG90aGVyX2FyZykKKwkJYXJndl9hcnJheV9wdXNodigmY3AuYXJncywgb3RoZXJfYXJnLT5hcmd2KTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIHJhbmdlKTsKKwljcC5vdXQgPSAtMTsKKwljcC5ub19zdGRpbiA9IDE7CisJY3AuZ2l0X2NtZCA9IDE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmY3ApKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IHN0YXJ0IGBsb2dgIikpOworCWlmIChzdHJidWZfcmVhZCgmY29udGVudHMsIGNwLm91dCwgMCkgPCAwKSB7CisJCWVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkIGBsb2dgIG91dHB1dCIpKTsKKwkJZmluaXNoX2NvbW1hbmQoJmNwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWxpbmUgPSBjb250ZW50cy5idWY7CisJc2l6ZSA9IGNvbnRlbnRzLmxlbjsKKwlmb3IgKG9mZnNldCA9IDA7IHNpemUgPiAwOyBvZmZzZXQgKz0gbGVuLCBzaXplIC09IGxlbiwgbGluZSArPSBsZW4pIHsKKwkJY29uc3QgY2hhciAqcDsKKworCQlsZW4gPSBmaW5kX2VuZF9vZl9saW5lKGxpbmUsIHNpemUpOworCQlsaW5lW2xlbiAtIDFdID0gJ1wwJzsKKwkJaWYgKHNraXBfcHJlZml4KGxpbmUsICJjb21taXQgIiwgJnApKSB7CisJCQlpZiAodXRpbCkgeworCQkJCXN0cmluZ19saXN0X2FwcGVuZChsaXN0LCBidWYuYnVmKS0+dXRpbCA9IHV0aWw7CisJCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJfQorCQkJdXRpbCA9IHhjYWxsb2Moc2l6ZW9mKCp1dGlsKSwgMSk7CisJCQlpZiAoZ2V0X29pZChwLCAmdXRpbC0+b2lkKSkgeworCQkJCWVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJyVzJyIpLCBwKTsKKwkJCQlmcmVlKHV0aWwpOworCQkJCXN0cmluZ19saXN0X2NsZWFyKGxpc3QsIDEpOworCQkJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQkJCXN0cmJ1Zl9yZWxlYXNlKCZjb250ZW50cyk7CisJCQkJZmluaXNoX2NvbW1hbmQoJmNwKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQl1dGlsLT5tYXRjaGluZyA9IC0xOworCQkJaW5faGVhZGVyID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCF1dGlsKSB7CisJCQllcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgZmlyc3QgbGluZSBvZiBgbG9nYCBvdXRwdXQ6ICIKKwkJCQkiZGlkIG5vdCBzdGFydCB3aXRoICdjb21taXQgJzogJyVzJyIpLAorCQkJICAgICAgbGluZSk7CisJCQlzdHJpbmdfbGlzdF9jbGVhcihsaXN0LCAxKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJmNvbnRlbnRzKTsKKwkJCWZpbmlzaF9jb21tYW5kKCZjcCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoc3RhcnRzX3dpdGgobGluZSwgImRpZmYgLS1naXQiKSkgeworCQkJc3RydWN0IHBhdGNoIHBhdGNoID0geyAwIH07CisJCQlzdHJ1Y3Qgc3RyYnVmIHJvb3QgPSBTVFJCVUZfSU5JVDsKKwkJCWludCBsaW5lbnIgPSAwOworCQkJaW50IG9yaWdfbGVuOworCisJCQlpbl9oZWFkZXIgPSAwOworCQkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCQkJaWYgKCF1dGlsLT5kaWZmX29mZnNldCkKKwkJCQl1dGlsLT5kaWZmX29mZnNldCA9IGJ1Zi5sZW47CisJCQlsaW5lW2xlbiAtIDFdID0gJ1xuJzsKKwkJCW9yaWdfbGVuID0gbGVuOworCQkJbGVuID0gcGFyc2VfZ2l0X2RpZmZfaGVhZGVyKCZyb290LCAmbGluZW5yLCAwLCBsaW5lLAorCQkJCQkJICAgIGxlbiwgc2l6ZSwgJnBhdGNoKTsKKwkJCWlmIChsZW4gPCAwKQorCQkJCWRpZShfKCJjb3VsZCBub3QgcGFyc2UgZ2l0IGhlYWRlciAnJS4qcyciKSwKKwkJCQkgICAgb3JpZ19sZW4sIGxpbmUpOworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiICMjICIpOworCQkJaWYgKHBhdGNoLmlzX25ldyA+IDApCisJCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzIChuZXcpIiwgcGF0Y2gubmV3X25hbWUpOworCQkJZWxzZSBpZiAocGF0Y2guaXNfZGVsZXRlID4gMCkKKwkJCQlzdHJidWZfYWRkZigmYnVmLCAiJXMgKGRlbGV0ZWQpIiwgcGF0Y2gub2xkX25hbWUpOworCQkJZWxzZSBpZiAocGF0Y2guaXNfcmVuYW1lKQorCQkJCXN0cmJ1Zl9hZGRmKCZidWYsICIlcyA9PiAlcyIsIHBhdGNoLm9sZF9uYW1lLCBwYXRjaC5uZXdfbmFtZSk7CisJCQllbHNlCisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBwYXRjaC5uZXdfbmFtZSk7CisKKwkJCWZyZWUoY3VycmVudF9maWxlbmFtZSk7CisJCQlpZiAocGF0Y2guaXNfZGVsZXRlID4gMCkKKwkJCQljdXJyZW50X2ZpbGVuYW1lID0geHN0cmR1cChwYXRjaC5vbGRfbmFtZSk7CisJCQllbHNlCisJCQkJY3VycmVudF9maWxlbmFtZSA9IHhzdHJkdXAocGF0Y2gubmV3X25hbWUpOworCisJCQlpZiAocGF0Y2gubmV3X21vZGUgJiYgcGF0Y2gub2xkX21vZGUgJiYKKwkJCSAgICBwYXRjaC5vbGRfbW9kZSAhPSBwYXRjaC5uZXdfbW9kZSkKKwkJCQlzdHJidWZfYWRkZigmYnVmLCAiIChtb2RlIGNoYW5nZSAlMDZvID0+ICUwNm8pIiwKKwkJCQkJICAgIHBhdGNoLm9sZF9tb2RlLCBwYXRjaC5uZXdfbW9kZSk7CisKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiAjIyIpOworCQl9IGVsc2UgaWYgKGluX2hlYWRlcikgeworCQkJaWYgKHN0YXJ0c193aXRoKGxpbmUsICJBdXRob3I6ICIpKSB7CisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiICMjIE1ldGFkYXRhICMjXG4iKTsKKwkJCQlzdHJidWZfYWRkc3RyKCZidWYsIGxpbmUpOworCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIlxuXG4iKTsKKwkJCQlzdHJidWZfYWRkc3RyKCZidWYsICIgIyMgQ29tbWl0IG1lc3NhZ2UgIyNcbiIpOworCQkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChsaW5lLCAiTm90ZXMiKSAmJgorCQkJCSAgIGxpbmVbc3RybGVuKGxpbmUpIC0gMV0gPT0gJzonKSB7CisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiXG5cbiIpOworCQkJCS8qIHN0cmlwIHRoZSB0cmFpbGluZyBjb2xvbiAqLworCQkJCXN0cmJ1Zl9hZGRmKCZidWYsICIgIyMgJS4qcyAjI1xuIiwKKwkJCQkJICAgIChpbnQpKHN0cmxlbihsaW5lKSAtIDEpLCBsaW5lKTsKKwkJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgobGluZSwgIiAgICAiKSkgeworCQkJCXAgPSBsaW5lICsgbGVuIC0gMjsKKwkJCQl3aGlsZSAoaXNzcGFjZSgqcCkgJiYgcCA+PSBsaW5lKQorCQkJCQlwLS07CisJCQkJc3RyYnVmX2FkZCgmYnVmLCBsaW5lLCBwIC0gbGluZSArIDEpOworCQkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGxpbmUsICJAQCAiLCAmcCkpIHsKKwkJCXAgPSBzdHJzdHIocCwgIkBAIik7CisJCQlzdHJidWZfYWRkc3RyKCZidWYsICJAQCIpOworCQkJaWYgKGN1cnJlbnRfZmlsZW5hbWUgJiYgcFsyXSkKKwkJCQlzdHJidWZfYWRkZigmYnVmLCAiICVzOiIsIGN1cnJlbnRfZmlsZW5hbWUpOworCQkJaWYgKHApCisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBwICsgMik7CisJCX0gZWxzZSBpZiAoIWxpbmVbMF0pCisJCQkvKgorCQkJICogQSBjb21wbGV0ZWx5IGJsYW5rIChub3QgJyBcbicsIHdoaWNoIGlzIGNvbnRleHQpCisJCQkgKiBsaW5lIGlzIG5vdCB2YWxpZCBpbiBhIGRpZmYuICBXZSBza2lwIGl0CisJCQkgKiBzaWxlbnRseSwgYmVjYXVzZSB0aGlzIG5lYXRseSBoYW5kbGVzIHRoZSBibGFuaworCQkJICogc2VwYXJhdG9yIGxpbmUgYmV0d2VlbiBjb21taXRzIGluIGdpdC1sb2cKKwkJCSAqIG91dHB1dC4KKwkJCSAqLworCQkJY29udGludWU7CisJCWVsc2UgaWYgKGxpbmVbMF0gPT0gJz4nKSB7CisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJysnKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgbGluZSArIDEpOworCQl9IGVsc2UgaWYgKGxpbmVbMF0gPT0gJzwnKSB7CisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJy0nKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgbGluZSArIDEpOworCQl9IGVsc2UgaWYgKGxpbmVbMF0gPT0gJyMnKSB7CisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJyAnKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgbGluZSArIDEpOworCQl9IGVsc2UgeworCQkJc3RyYnVmX2FkZGNoKCZidWYsICcgJyk7CisJCQlzdHJidWZfYWRkc3RyKCZidWYsIGxpbmUpOworCQl9CisKKwkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCQl1dGlsLT5kaWZmc2l6ZSsrOworCX0KKwlzdHJidWZfcmVsZWFzZSgmY29udGVudHMpOworCisJaWYgKHV0aWwpCisJCXN0cmluZ19saXN0X2FwcGVuZChsaXN0LCBidWYuYnVmKS0+dXRpbCA9IHV0aWw7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJZnJlZShjdXJyZW50X2ZpbGVuYW1lKTsKKworCWlmIChmaW5pc2hfY29tbWFuZCgmY3ApKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXRjaF91dGlsX2NtcChjb25zdCB2b2lkICpkdW1teSwgY29uc3Qgc3RydWN0IHBhdGNoX3V0aWwgKmEsCisJCQkgIGNvbnN0IHN0cnVjdCBwYXRjaF91dGlsICpiLCBjb25zdCBjaGFyICprZXlkYXRhKQoreworCXJldHVybiBzdHJjbXAoYS0+ZGlmZiwga2V5ZGF0YSA/IGtleWRhdGEgOiBiLT5kaWZmKTsKK30KKworc3RhdGljIHZvaWQgZmluZF9leGFjdF9tYXRjaGVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqYSwgc3RydWN0IHN0cmluZ19saXN0ICpiKQoreworCXN0cnVjdCBoYXNobWFwIG1hcDsKKwlpbnQgaTsKKworCWhhc2htYXBfaW5pdCgmbWFwLCAoaGFzaG1hcF9jbXBfZm4pcGF0Y2hfdXRpbF9jbXAsIE5VTEwsIDApOworCisJLyogRmlyc3QsIGFkZCB0aGUgcGF0Y2hlcyBvZiBhIHRvIGEgaGFzaCBtYXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcGF0Y2hfdXRpbCAqdXRpbCA9IGEtPml0ZW1zW2ldLnV0aWw7CisKKwkJdXRpbC0+aSA9IGk7CisJCXV0aWwtPnBhdGNoID0gYS0+aXRlbXNbaV0uc3RyaW5nOworCQl1dGlsLT5kaWZmID0gdXRpbC0+cGF0Y2ggKyB1dGlsLT5kaWZmX29mZnNldDsKKwkJaGFzaG1hcF9lbnRyeV9pbml0KCZ1dGlsLT5lLCBzdHJoYXNoKHV0aWwtPmRpZmYpKTsKKwkJaGFzaG1hcF9hZGQoJm1hcCwgJnV0aWwtPmUpOworCX0KKworCS8qIE5vdyB0cnkgdG8gZmluZCBleGFjdCBtYXRjaGVzIGluIGIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYi0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcGF0Y2hfdXRpbCAqdXRpbCA9IGItPml0ZW1zW2ldLnV0aWwsICpvdGhlcjsKKworCQl1dGlsLT5pID0gaTsKKwkJdXRpbC0+cGF0Y2ggPSBiLT5pdGVtc1tpXS5zdHJpbmc7CisJCXV0aWwtPmRpZmYgPSB1dGlsLT5wYXRjaCArIHV0aWwtPmRpZmZfb2Zmc2V0OworCQloYXNobWFwX2VudHJ5X2luaXQoJnV0aWwtPmUsIHN0cmhhc2godXRpbC0+ZGlmZikpOworCQlvdGhlciA9IGhhc2htYXBfcmVtb3ZlX2VudHJ5KCZtYXAsIHV0aWwsIGUsIE5VTEwpOworCQlpZiAob3RoZXIpIHsKKwkJCWlmIChvdGhlci0+bWF0Y2hpbmcgPj0gMCkKKwkJCQlCVUcoImFscmVhZHkgYXNzaWduZWQhIik7CisKKwkJCW90aGVyLT5tYXRjaGluZyA9IGk7CisJCQl1dGlsLT5tYXRjaGluZyA9IG90aGVyLT5pOworCQl9CisJfQorCisJaGFzaG1hcF9mcmVlKCZtYXApOworfQorCitzdGF0aWMgdm9pZCBkaWZmc2l6ZV9jb25zdW1lKHZvaWQgKmRhdGEsIGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCSgqKGludCAqKWRhdGEpKys7Cit9CisKK3N0YXRpYyB2b2lkIGRpZmZzaXplX2h1bmsodm9pZCAqZGF0YSwgbG9uZyBvYiwgbG9uZyBvbiwgbG9uZyBuYiwgbG9uZyBubiwKKwkJCSAgY29uc3QgY2hhciAqZnVuY2xpbmUsIGxvbmcgZnVuY2xlbikKK3sKKwlkaWZmc2l6ZV9jb25zdW1lKGRhdGEsIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50IGRpZmZzaXplKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJeHBwYXJhbV90IHBwID0geyAwIH07CisJeGRlbWl0Y29uZl90IGNmZyA9IHsgMCB9OworCW1tZmlsZV90IG1mMSwgbWYyOworCWludCBjb3VudCA9IDA7CisKKwltZjEucHRyID0gKGNoYXIgKilhOworCW1mMS5zaXplID0gc3RybGVuKGEpOworCW1mMi5wdHIgPSAoY2hhciAqKWI7CisJbWYyLnNpemUgPSBzdHJsZW4oYik7CisKKwljZmcuY3R4bGVuID0gMzsKKwlpZiAoIXhkaV9kaWZmX291dGYoJm1mMSwgJm1mMiwKKwkJCSAgIGRpZmZzaXplX2h1bmssIGRpZmZzaXplX2NvbnN1bWUsICZjb3VudCwKKwkJCSAgICZwcCwgJmNmZykpCisJCXJldHVybiBjb3VudDsKKworCWVycm9yKF8oImZhaWxlZCB0byBnZW5lcmF0ZSBkaWZmIikpOworCXJldHVybiBDT1NUX01BWDsKK30KKworc3RhdGljIHZvaWQgZ2V0X2NvcnJlc3BvbmRlbmNlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmEsIHN0cnVjdCBzdHJpbmdfbGlzdCAqYiwKKwkJCQlpbnQgY3JlYXRpb25fZmFjdG9yKQoreworCWludCBuID0gYS0+bnIgKyBiLT5ucjsKKwlpbnQgKmNvc3QsIGMsICphMmIsICpiMmE7CisJaW50IGksIGo7CisKKwlBTExPQ19BUlJBWShjb3N0LCBzdF9tdWx0KG4sIG4pKTsKKwlBTExPQ19BUlJBWShhMmIsIG4pOworCUFMTE9DX0FSUkFZKGIyYSwgbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgYS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcGF0Y2hfdXRpbCAqYV91dGlsID0gYS0+aXRlbXNbaV0udXRpbDsKKworCQlmb3IgKGogPSAwOyBqIDwgYi0+bnI7IGorKykgeworCQkJc3RydWN0IHBhdGNoX3V0aWwgKmJfdXRpbCA9IGItPml0ZW1zW2pdLnV0aWw7CisKKwkJCWlmIChhX3V0aWwtPm1hdGNoaW5nID09IGopCisJCQkJYyA9IDA7CisJCQllbHNlIGlmIChhX3V0aWwtPm1hdGNoaW5nIDwgMCAmJiBiX3V0aWwtPm1hdGNoaW5nIDwgMCkKKwkJCQljID0gZGlmZnNpemUoYV91dGlsLT5kaWZmLCBiX3V0aWwtPmRpZmYpOworCQkJZWxzZQorCQkJCWMgPSBDT1NUX01BWDsKKwkJCWNvc3RbaSArIG4gKiBqXSA9IGM7CisJCX0KKworCQljID0gYV91dGlsLT5tYXRjaGluZyA8IDAgPworCQkJYV91dGlsLT5kaWZmc2l6ZSAqIGNyZWF0aW9uX2ZhY3RvciAvIDEwMCA6IENPU1RfTUFYOworCQlmb3IgKGogPSBiLT5ucjsgaiA8IG47IGorKykKKwkJCWNvc3RbaSArIG4gKiBqXSA9IGM7CisJfQorCisJZm9yIChqID0gMDsgaiA8IGItPm5yOyBqKyspIHsKKwkJc3RydWN0IHBhdGNoX3V0aWwgKnV0aWwgPSBiLT5pdGVtc1tqXS51dGlsOworCisJCWMgPSB1dGlsLT5tYXRjaGluZyA8IDAgPworCQkJdXRpbC0+ZGlmZnNpemUgKiBjcmVhdGlvbl9mYWN0b3IgLyAxMDAgOiBDT1NUX01BWDsKKwkJZm9yIChpID0gYS0+bnI7IGkgPCBuOyBpKyspCisJCQljb3N0W2kgKyBuICogal0gPSBjOworCX0KKworCWZvciAoaSA9IGEtPm5yOyBpIDwgbjsgaSsrKQorCQlmb3IgKGogPSBiLT5ucjsgaiA8IG47IGorKykKKwkJCWNvc3RbaSArIG4gKiBqXSA9IDA7CisKKwljb21wdXRlX2Fzc2lnbm1lbnQobiwgbiwgY29zdCwgYTJiLCBiMmEpOworCisJZm9yIChpID0gMDsgaSA8IGEtPm5yOyBpKyspCisJCWlmIChhMmJbaV0gPj0gMCAmJiBhMmJbaV0gPCBiLT5ucikgeworCQkJc3RydWN0IHBhdGNoX3V0aWwgKmFfdXRpbCA9IGEtPml0ZW1zW2ldLnV0aWw7CisJCQlzdHJ1Y3QgcGF0Y2hfdXRpbCAqYl91dGlsID0gYi0+aXRlbXNbYTJiW2ldXS51dGlsOworCisJCQlhX3V0aWwtPm1hdGNoaW5nID0gYTJiW2ldOworCQkJYl91dGlsLT5tYXRjaGluZyA9IGk7CisJCX0KKworCWZyZWUoY29zdCk7CisJZnJlZShhMmIpOworCWZyZWUoYjJhKTsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0X3BhaXJfaGVhZGVyKHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQsCisJCQkgICAgICAgaW50IHBhdGNoX25vX3dpZHRoLAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICpkYXNoZXMsCisJCQkgICAgICAgc3RydWN0IHBhdGNoX3V0aWwgKmFfdXRpbCwKKwkJCSAgICAgICBzdHJ1Y3QgcGF0Y2hfdXRpbCAqYl91dGlsKQoreworCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9IGFfdXRpbCA/ICZhX3V0aWwtPm9pZCA6ICZiX3V0aWwtPm9pZDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJY2hhciBzdGF0dXM7CisJY29uc3QgY2hhciAqY29sb3JfcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQoZGlmZm9wdCwgRElGRl9SRVNFVCk7CisJY29uc3QgY2hhciAqY29sb3Jfb2xkID0gZGlmZl9nZXRfY29sb3Jfb3B0KGRpZmZvcHQsIERJRkZfRklMRV9PTEQpOworCWNvbnN0IGNoYXIgKmNvbG9yX25ldyA9IGRpZmZfZ2V0X2NvbG9yX29wdChkaWZmb3B0LCBESUZGX0ZJTEVfTkVXKTsKKwljb25zdCBjaGFyICpjb2xvcl9jb21taXQgPSBkaWZmX2dldF9jb2xvcl9vcHQoZGlmZm9wdCwgRElGRl9DT01NSVQpOworCWNvbnN0IGNoYXIgKmNvbG9yOworCisJaWYgKCFkYXNoZXMtPmxlbikKKwkJc3RyYnVmX2FkZGNoYXJzKGRhc2hlcywgJy0nLAorCQkJCXN0cmxlbihmaW5kX3VuaXF1ZV9hYmJyZXYob2lkLAorCQkJCQkJCSAgREVGQVVMVF9BQkJSRVYpKSk7CisKKwlpZiAoIWJfdXRpbCkgeworCQljb2xvciA9IGNvbG9yX29sZDsKKwkJc3RhdHVzID0gJzwnOworCX0gZWxzZSBpZiAoIWFfdXRpbCkgeworCQljb2xvciA9IGNvbG9yX25ldzsKKwkJc3RhdHVzID0gJz4nOworCX0gZWxzZSBpZiAoc3RyY21wKGFfdXRpbC0+cGF0Y2gsIGJfdXRpbC0+cGF0Y2gpKSB7CisJCWNvbG9yID0gY29sb3JfY29tbWl0OworCQlzdGF0dXMgPSAnISc7CisJfSBlbHNlIHsKKwkJY29sb3IgPSBjb2xvcl9jb21taXQ7CisJCXN0YXR1cyA9ICc9JzsKKwl9CisKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwlzdHJidWZfYWRkc3RyKGJ1Ziwgc3RhdHVzID09ICchJyA/IGNvbG9yX29sZCA6IGNvbG9yKTsKKwlpZiAoIWFfdXRpbCkKKwkJc3RyYnVmX2FkZGYoYnVmLCAiJSpzOiAgJXMgIiwgcGF0Y2hfbm9fd2lkdGgsICItIiwgZGFzaGVzLT5idWYpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoYnVmLCAiJSpkOiAgJXMgIiwgcGF0Y2hfbm9fd2lkdGgsIGFfdXRpbC0+aSArIDEsCisJCQkgICAgZmluZF91bmlxdWVfYWJicmV2KCZhX3V0aWwtPm9pZCwgREVGQVVMVF9BQkJSRVYpKTsKKworCWlmIChzdGF0dXMgPT0gJyEnKQorCQlzdHJidWZfYWRkZihidWYsICIlcyVzIiwgY29sb3JfcmVzZXQsIGNvbG9yKTsKKwlzdHJidWZfYWRkY2goYnVmLCBzdGF0dXMpOworCWlmIChzdGF0dXMgPT0gJyEnKQorCQlzdHJidWZfYWRkZihidWYsICIlcyVzIiwgY29sb3JfcmVzZXQsIGNvbG9yX25ldyk7CisKKwlpZiAoIWJfdXRpbCkKKwkJc3RyYnVmX2FkZGYoYnVmLCAiICUqczogICVzIiwgcGF0Y2hfbm9fd2lkdGgsICItIiwgZGFzaGVzLT5idWYpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoYnVmLCAiICUqZDogICVzIiwgcGF0Y2hfbm9fd2lkdGgsIGJfdXRpbC0+aSArIDEsCisJCQkgICAgZmluZF91bmlxdWVfYWJicmV2KCZiX3V0aWwtPm9pZCwgREVGQVVMVF9BQkJSRVYpKTsKKworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCWlmIChjb21taXQpIHsKKwkJaWYgKHN0YXR1cyA9PSAnIScpCisJCQlzdHJidWZfYWRkZihidWYsICIlcyVzIiwgY29sb3JfcmVzZXQsIGNvbG9yKTsKKworCQlzdHJidWZfYWRkY2goYnVmLCAnICcpOworCQlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9PTkVMSU5FLCBjb21taXQsIGJ1Zik7CisJfQorCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzXG4iLCBjb2xvcl9yZXNldCk7CisKKwlmd3JpdGUoYnVmLT5idWYsIGJ1Zi0+bGVuLCAxLCBkaWZmb3B0LT5maWxlKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgc2VjdGlvbl9oZWFkZXJzID0geworCS5mdW5jbmFtZSA9IHsgIl4gIyMgKC4qKSAjIyRcbiIKKwkJICAgICAgIl4uP0BAICguKikkIiwgUkVHX0VYVEVOREVEIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZ2V0X2ZpbGVzcGVjKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnApCit7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNwZWMgPSBhbGxvY19maWxlc3BlYyhuYW1lKTsKKworCWZpbGxfZmlsZXNwZWMoc3BlYywgJm51bGxfb2lkLCAwLCAwMTAwNjQ0KTsKKwlzcGVjLT5kYXRhID0gKGNoYXIgKilwOworCXNwZWMtPnNpemUgPSBzdHJsZW4ocCk7CisJc3BlYy0+c2hvdWxkX211bm1hcCA9IDA7CisJc3BlYy0+aXNfc3RkaW4gPSAxOworCXNwZWMtPmRyaXZlciA9ICZzZWN0aW9uX2hlYWRlcnM7CisKKwlyZXR1cm4gc3BlYzsKK30KKworc3RhdGljIHZvaWQgcGF0Y2hfZGlmZihjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLAorCQkgICAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCkKK3sKKwlkaWZmX3F1ZXVlKCZkaWZmX3F1ZXVlZF9kaWZmLAorCQkgICBnZXRfZmlsZXNwZWMoImEiLCBhKSwgZ2V0X2ZpbGVzcGVjKCJiIiwgYikpOworCisJZGlmZmNvcmVfc3RkKGRpZmZvcHQpOworCWRpZmZfZmx1c2goZGlmZm9wdCk7Cit9CisKK3N0YXRpYyB2b2lkIG91dHB1dChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmEsIHN0cnVjdCBzdHJpbmdfbGlzdCAqYiwKKwkJICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklULCBkYXNoZXMgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcGF0Y2hfbm9fd2lkdGggPSBkZWNpbWFsX3dpZHRoKDEgKyAoYS0+bnIgPiBiLT5uciA/IGEtPm5yIDogYi0+bnIpKTsKKwlpbnQgaSA9IDAsIGogPSAwOworCisJLyoKKwkgKiBXZSBhc3N1bWUgdGhlIHVzZXIgaXMgcmVhbGx5IG1vcmUgaW50ZXJlc3RlZCBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50CisJICogKCJuZXdlciIgdmVyc2lvbikuIFRvIHRoYXQgZW5kLCB3ZSBwcmludCB0aGUgb3V0cHV0IGluIHRoZSBvcmRlciBvZgorCSAqIHRoZSBSSFMgKHRoZSBgYmAgcGFyYW1ldGVyKS4gVG8gcHV0IHRoZSBMSFMgKHRoZSBgYWAgcGFyYW1ldGVyKQorCSAqIGNvbW1pdHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBSSFMgaW50byBhIGdvb2QgcGxhY2UsIHdlIHBsYWNlCisJICogdGhlbSBvbmNlIHdlIGhhdmUgc2hvd24gYWxsIG9mIHRoZWlyIHByZWRlY2Vzc29ycyBpbiB0aGUgTEhTLgorCSAqLworCisJd2hpbGUgKGkgPCBhLT5uciB8fCBqIDwgYi0+bnIpIHsKKwkJc3RydWN0IHBhdGNoX3V0aWwgKmFfdXRpbCwgKmJfdXRpbDsKKwkJYV91dGlsID0gaSA8IGEtPm5yID8gYS0+aXRlbXNbaV0udXRpbCA6IE5VTEw7CisJCWJfdXRpbCA9IGogPCBiLT5uciA/IGItPml0ZW1zW2pdLnV0aWwgOiBOVUxMOworCisJCS8qIFNraXAgYWxsIHRoZSBhbHJlYWR5LXNob3duIGNvbW1pdHMgZnJvbSB0aGUgTEhTLiAqLworCQl3aGlsZSAoaSA8IGEtPm5yICYmIGFfdXRpbC0+c2hvd24pCisJCQlhX3V0aWwgPSArK2kgPCBhLT5uciA/IGEtPml0ZW1zW2ldLnV0aWwgOiBOVUxMOworCisJCS8qIFNob3cgdW5tYXRjaGVkIExIUyBjb21taXQgd2hvc2UgcHJlZGVjZXNzb3JzIHdlcmUgc2hvd24uICovCisJCWlmIChpIDwgYS0+bnIgJiYgYV91dGlsLT5tYXRjaGluZyA8IDApIHsKKwkJCW91dHB1dF9wYWlyX2hlYWRlcihkaWZmb3B0LCBwYXRjaF9ub193aWR0aCwKKwkJCQkJICAgJmJ1ZiwgJmRhc2hlcywgYV91dGlsLCBOVUxMKTsKKwkJCWkrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2hvdyB1bm1hdGNoZWQgUkhTIGNvbW1pdHMuICovCisJCXdoaWxlIChqIDwgYi0+bnIgJiYgYl91dGlsLT5tYXRjaGluZyA8IDApIHsKKwkJCW91dHB1dF9wYWlyX2hlYWRlcihkaWZmb3B0LCBwYXRjaF9ub193aWR0aCwKKwkJCQkJICAgJmJ1ZiwgJmRhc2hlcywgTlVMTCwgYl91dGlsKTsKKwkJCWJfdXRpbCA9ICsraiA8IGItPm5yID8gYi0+aXRlbXNbal0udXRpbCA6IE5VTEw7CisJCX0KKworCQkvKiBTaG93IG1hdGNoaW5nIExIUy9SSFMgcGFpci4gKi8KKwkJaWYgKGogPCBiLT5ucikgeworCQkJYV91dGlsID0gYS0+aXRlbXNbYl91dGlsLT5tYXRjaGluZ10udXRpbDsKKwkJCW91dHB1dF9wYWlyX2hlYWRlcihkaWZmb3B0LCBwYXRjaF9ub193aWR0aCwKKwkJCQkJICAgJmJ1ZiwgJmRhc2hlcywgYV91dGlsLCBiX3V0aWwpOworCQkJaWYgKCEoZGlmZm9wdC0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX05PX09VVFBVVCkpCisJCQkJcGF0Y2hfZGlmZihhLT5pdGVtc1tiX3V0aWwtPm1hdGNoaW5nXS5zdHJpbmcsCisJCQkJCSAgIGItPml0ZW1zW2pdLnN0cmluZywgZGlmZm9wdCk7CisJCQlhX3V0aWwtPnNob3duID0gMTsKKwkJCWorKzsKKwkJfQorCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmZGFzaGVzKTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJidWYgKm91dHB1dF9wcmVmaXhfY2Ioc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LCB2b2lkICpkYXRhKQoreworCXJldHVybiBkYXRhOworfQorCitpbnQgc2hvd19yYW5nZV9kaWZmKGNvbnN0IGNoYXIgKnJhbmdlMSwgY29uc3QgY2hhciAqcmFuZ2UyLAorCQkgICAgaW50IGNyZWF0aW9uX2ZhY3RvciwgaW50IGR1YWxfY29sb3IsCisJCSAgICBjb25zdCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0LAorCQkgICAgY29uc3Qgc3RydWN0IGFyZ3ZfYXJyYXkgKm90aGVyX2FyZykKK3sKKwlpbnQgcmVzID0gMDsKKworCXN0cnVjdCBzdHJpbmdfbGlzdCBicmFuY2gxID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IGJyYW5jaDIgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCWlmIChyZWFkX3BhdGNoZXMocmFuZ2UxLCAmYnJhbmNoMSwgb3RoZXJfYXJnKSkKKwkJcmVzID0gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIGxvZyBmb3IgJyVzJyIpLCByYW5nZTEpOworCWlmICghcmVzICYmIHJlYWRfcGF0Y2hlcyhyYW5nZTIsICZicmFuY2gyLCBvdGhlcl9hcmcpKQorCQlyZXMgPSBlcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgbG9nIGZvciAnJXMnIiksIHJhbmdlMik7CisKKwlpZiAoIXJlcykgeworCQlzdHJ1Y3QgZGlmZl9vcHRpb25zIG9wdHM7CisJCXN0cnVjdCBzdHJidWYgaW5kZW50ID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKGRpZmZvcHQpCisJCQltZW1jcHkoJm9wdHMsIGRpZmZvcHQsIHNpemVvZihvcHRzKSk7CisJCWVsc2UKKwkJCWRpZmZfc2V0dXAoJm9wdHMpOworCisJCWlmICghb3B0cy5vdXRwdXRfZm9ybWF0KQorCQkJb3B0cy5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisJCW9wdHMuZmxhZ3Muc3VwcHJlc3NfZGlmZl9oZWFkZXJzID0gMTsKKwkJb3B0cy5mbGFncy5kdWFsX2NvbG9yX2RpZmZlZF9kaWZmcyA9IGR1YWxfY29sb3I7CisJCW9wdHMuZmxhZ3Muc3VwcHJlc3NfaHVua19oZWFkZXJfbGluZV9jb3VudCA9IDE7CisJCW9wdHMub3V0cHV0X3ByZWZpeCA9IG91dHB1dF9wcmVmaXhfY2I7CisJCXN0cmJ1Zl9hZGRzdHIoJmluZGVudCwgIiAgICAiKTsKKwkJb3B0cy5vdXRwdXRfcHJlZml4X2RhdGEgPSAmaW5kZW50OworCQlkaWZmX3NldHVwX2RvbmUoJm9wdHMpOworCisJCWZpbmRfZXhhY3RfbWF0Y2hlcygmYnJhbmNoMSwgJmJyYW5jaDIpOworCQlnZXRfY29ycmVzcG9uZGVuY2VzKCZicmFuY2gxLCAmYnJhbmNoMiwgY3JlYXRpb25fZmFjdG9yKTsKKwkJb3V0cHV0KCZicmFuY2gxLCAmYnJhbmNoMiwgJm9wdHMpOworCisJCXN0cmJ1Zl9yZWxlYXNlKCZpbmRlbnQpOworCX0KKworCXN0cmluZ19saXN0X2NsZWFyKCZicmFuY2gxLCAxKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmYnJhbmNoMiwgMSk7CisKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvcmFuZ2UtZGlmZi5oIGIvcmFuZ2UtZGlmZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMTk3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9yYW5nZS1kaWZmLmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBSQU5HRV9ESUZGX0gKKyNkZWZpbmUgUkFOR0VfRElGRl9ICisKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorCisjZGVmaW5lIFJBTkdFX0RJRkZfQ1JFQVRJT05fRkFDVE9SX0RFRkFVTFQgNjAKKworLyoKKyAqIENvbXBhcmUgc2VyaWVzIG9mIGNvbW1pdHMgaW4gUkFOR0UxIGFuZCBSQU5HRTIsIGFuZCBlbWl0IHRvIHRoZQorICogc3RhbmRhcmQgb3V0cHV0LiAgTlVMTCBjYW4gYmUgcGFzc2VkIHRvIERJRkZPUFQgdG8gdXNlIHRoZSBidWlsdC1pbgorICogZGVmYXVsdC4KKyAqLworaW50IHNob3dfcmFuZ2VfZGlmZihjb25zdCBjaGFyICpyYW5nZTEsIGNvbnN0IGNoYXIgKnJhbmdlMiwKKwkJICAgIGludCBjcmVhdGlvbl9mYWN0b3IsIGludCBkdWFsX2NvbG9yLAorCQkgICAgY29uc3Qgc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCwKKwkJICAgIGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICpvdGhlcl9hcmcpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3JlYWNoYWJsZS5jIGIvcmVhY2hhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdhNjBjNwotLS0gL2Rldi9udWxsCisrKyBiL3JlYWNoYWJsZS5jCkBAIC0wLDAgKzEsMjUxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInJlYWNoYWJsZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJwYWNrLWJpdG1hcC5oIgorCitzdHJ1Y3QgY29ubmVjdGl2aXR5X3Byb2dyZXNzIHsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOworCXVuc2lnbmVkIGxvbmcgY291bnQ7Cit9OworCitzdGF0aWMgdm9pZCB1cGRhdGVfcHJvZ3Jlc3Moc3RydWN0IGNvbm5lY3Rpdml0eV9wcm9ncmVzcyAqY3ApCit7CisJY3AtPmNvdW50Kys7CisJaWYgKChjcC0+Y291bnQgJiAxMDIzKSA9PSAwKQorCQlkaXNwbGF5X3Byb2dyZXNzKGNwLT5wcm9ncmVzcywgY3AtPmNvdW50KTsKK30KKworc3RhdGljIGludCBhZGRfb25lX3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnMgPSAoc3RydWN0IHJldl9pbmZvICopY2JfZGF0YTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisKKwlpZiAoKGZsYWcgJiBSRUZfSVNTWU1SRUYpICYmIChmbGFnICYgUkVGX0lTQlJPS0VOKSkgeworCQl3YXJuaW5nKCJzeW1ib2xpYyByZWYgaXMgZGFuZ2xpbmc6ICVzIiwgcGF0aCk7CisJCXJldHVybiAwOworCX0KKworCW9iamVjdCA9IHBhcnNlX29iamVjdF9vcl9kaWUob2lkLCBwYXRoKTsKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCAiIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSB0cmF2ZXJzYWwgd2lsbCBoYXZlIGFscmVhZHkgbWFya2VkIHVzIGFzIFNFRU4sIHNvIHdlCisgKiBvbmx5IG5lZWQgdG8gaGFuZGxlIGFueSBwcm9ncmVzcyByZXBvcnRpbmcgaGVyZS4KKyAqLworc3RhdGljIHZvaWQgbWFya19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKQoreworCXVwZGF0ZV9wcm9ncmVzcyhkYXRhKTsKK30KKworc3RhdGljIHZvaWQgbWFya19jb21taXQoc3RydWN0IGNvbW1pdCAqYywgdm9pZCAqZGF0YSkKK3sKKwltYXJrX29iamVjdCgmYy0+b2JqZWN0LCBOVUxMLCBkYXRhKTsKK30KKworc3RydWN0IHJlY2VudF9kYXRhIHsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7CisJdGltZXN0YW1wX3QgdGltZXN0YW1wOworfTsKKworc3RhdGljIHZvaWQgYWRkX3JlY2VudF9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgdGltZXN0YW1wX3QgbXRpbWUsCisJCQkgICAgICBzdHJ1Y3QgcmVjZW50X2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCWlmIChtdGltZSA8PSBkYXRhLT50aW1lc3RhbXApCisJCXJldHVybjsKKworCS8qCisJICogV2UgZG8gbm90IHdhbnQgdG8gY2FsbCBwYXJzZV9vYmplY3QgaGVyZSwgYmVjYXVzZQorCSAqIGluZmxhdGluZyBibG9icyBhbmQgdHJlZXMgY291bGQgYmUgdmVyeSBleHBlbnNpdmUuCisJICogSG93ZXZlciwgd2UgZG8gbmVlZCB0byBrbm93IHRoZSBjb3JyZWN0IHR5cGUgZm9yCisJICogbGF0ZXIgcHJvY2Vzc2luZywgYW5kIHRoZSByZXZpc2lvbiBtYWNoaW5lcnkgZXhwZWN0cworCSAqIGNvbW1pdHMgYW5kIHRhZ3MgdG8gaGF2ZSBiZWVuIHBhcnNlZC4KKwkgKi8KKwl0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBvaWQsIE5VTEwpOworCWlmICh0eXBlIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gZ2V0IG9iamVjdCBpbmZvIGZvciAlcyIsIG9pZF90b19oZXgob2lkKSk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE9CSl9UQUc6CisJY2FzZSBPQkpfQ09NTUlUOgorCQlvYmogPSBwYXJzZV9vYmplY3Rfb3JfZGllKG9pZCwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgT0JKX1RSRUU6CisJCW9iaiA9IChzdHJ1Y3Qgb2JqZWN0ICopbG9va3VwX3RyZWUodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJCWJyZWFrOworCWNhc2UgT0JKX0JMT0I6CisJCW9iaiA9IChzdHJ1Y3Qgb2JqZWN0ICopbG9va3VwX2Jsb2IodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRpZSgidW5rbm93biBvYmplY3QgdHlwZSBmb3IgJXM6ICVzIiwKKwkJICAgIG9pZF90b19oZXgob2lkKSwgdHlwZV9uYW1lKHR5cGUpKTsKKwl9CisKKwlpZiAoIW9iaikKKwkJZGllKCJ1bmFibGUgdG8gbG9va3VwICVzIiwgb2lkX3RvX2hleChvaWQpKTsKKworCWFkZF9wZW5kaW5nX29iamVjdChkYXRhLT5yZXZzLCBvYmosICIiKTsKK30KKworc3RhdGljIGludCBhZGRfcmVjZW50X2xvb3NlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CisKKwlpZiAob2JqICYmIG9iai0+ZmxhZ3MgJiBTRUVOKQorCQlyZXR1cm4gMDsKKworCWlmIChzdGF0KHBhdGgsICZzdCkgPCAwKSB7CisJCS8qCisJCSAqIEl0J3MgT0sgaWYgYW4gb2JqZWN0IHdlbnQgYXdheSBkdXJpbmcgb3VyIGl0ZXJhdGlvbjsgdGhpcworCQkgKiBjb3VsZCBiZSBkdWUgdG8gYSBzaW11bHRhbmVvdXMgcmVwYWNrLiBCdXQgYW55dGhpbmcgZWxzZQorCQkgKiB3ZSBzaG91bGQgYWJvcnQsIHNpbmNlIHdlIG1pZ2h0IHRoZW4gZmFpbCB0byBtYXJrIG9iamVjdHMKKwkJICogd2hpY2ggc2hvdWxkIG5vdCBiZSBwcnVuZWQuCisJCSAqLworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiBlcnJvcl9lcnJubygidW5hYmxlIHRvIHN0YXQgJXMiLCBvaWRfdG9faGV4KG9pZCkpOworCX0KKworCWFkZF9yZWNlbnRfb2JqZWN0KG9pZCwgc3Quc3RfbXRpbWUsIGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9yZWNlbnRfcGFja2VkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgc3RydWN0IHBhY2tlZF9naXQgKnAsIHVpbnQzMl90IHBvcywKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCisJaWYgKG9iaiAmJiBvYmotPmZsYWdzICYgU0VFTikKKwkJcmV0dXJuIDA7CisJYWRkX3JlY2VudF9vYmplY3Qob2lkLCBwLT5tdGltZSwgZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhZGRfdW5zZWVuX3JlY2VudF9vYmplY3RzX3RvX3RyYXZlcnNhbChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCSAgIHRpbWVzdGFtcF90IHRpbWVzdGFtcCkKK3sKKwlzdHJ1Y3QgcmVjZW50X2RhdGEgZGF0YTsKKwlpbnQgcjsKKworCWRhdGEucmV2cyA9IHJldnM7CisJZGF0YS50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisKKwlyID0gZm9yX2VhY2hfbG9vc2Vfb2JqZWN0KGFkZF9yZWNlbnRfbG9vc2UsICZkYXRhLAorCQkJCSAgRk9SX0VBQ0hfT0JKRUNUX0xPQ0FMX09OTFkpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gZm9yX2VhY2hfcGFja2VkX29iamVjdChhZGRfcmVjZW50X3BhY2tlZCwgJmRhdGEsCisJCQkJICAgICAgRk9SX0VBQ0hfT0JKRUNUX0xPQ0FMX09OTFkpOworfQorCitzdGF0aWMgdm9pZCAqbG9va3VwX29iamVjdF9ieV90eXBlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICBlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBPQkpfQ09NTUlUOgorCQlyZXR1cm4gbG9va3VwX2NvbW1pdChyLCBvaWQpOworCWNhc2UgT0JKX1RSRUU6CisJCXJldHVybiBsb29rdXBfdHJlZShyLCBvaWQpOworCWNhc2UgT0JKX1RBRzoKKwkJcmV0dXJuIGxvb2t1cF90YWcociwgb2lkKTsKKwljYXNlIE9CSl9CTE9COgorCQlyZXR1cm4gbG9va3VwX2Jsb2Iociwgb2lkKTsKKwlkZWZhdWx0OgorCQlkaWUoIkJVRzogdW5rbm93biBvYmplY3QgdHlwZSAlZCIsIHR5cGUpOworCX0KK30KKworc3RhdGljIGludCBtYXJrX29iamVjdF9zZWVuKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJICAgICBpbnQgZXhjbHVkZSwKKwkJCSAgICAgdWludDMyX3QgbmFtZV9oYXNoLAorCQkJICAgICBzdHJ1Y3QgcGFja2VkX2dpdCAqZm91bmRfcGFjaywKKwkJCSAgICAgb2ZmX3QgZm91bmRfb2Zmc2V0KQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF9vYmplY3RfYnlfdHlwZSh0aGVfcmVwb3NpdG9yeSwgb2lkLCB0eXBlKTsKKwlpZiAoIW9iaikKKwkJZGllKCJ1bmFibGUgdG8gY3JlYXRlIG9iamVjdCAnJXMnIiwgb2lkX3RvX2hleChvaWQpKTsKKworCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtYXJrX3JlYWNoYWJsZV9vYmplY3RzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IG1hcmtfcmVmbG9nLAorCQkJICAgIHRpbWVzdGFtcF90IG1hcmtfcmVjZW50LCBzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzKQoreworCXN0cnVjdCBjb25uZWN0aXZpdHlfcHJvZ3Jlc3MgY3A7CisJc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdDsKKworCS8qCisJICogU2V0IHVwIHJldmlzaW9uIHBhcnNpbmcsIGFuZCBtYXJrIHVzIGFzIGJlaW5nIGludGVyZXN0ZWQKKwkgKiBpbiBhbGwgb2JqZWN0IHR5cGVzLCBub3QganVzdCBjb21taXRzLgorCSAqLworCXJldnMtPnRhZ19vYmplY3RzID0gMTsKKwlyZXZzLT5ibG9iX29iamVjdHMgPSAxOworCXJldnMtPnRyZWVfb2JqZWN0cyA9IDE7CisKKwkvKiBBZGQgYWxsIHJlZnMgZnJvbSB0aGUgaW5kZXggZmlsZSAqLworCWFkZF9pbmRleF9vYmplY3RzX3RvX3BlbmRpbmcocmV2cywgMCk7CisKKwkvKiBBZGQgYWxsIGV4dGVybmFsIHJlZnMgKi8KKwlmb3JfZWFjaF9yZWYoYWRkX29uZV9yZWYsIHJldnMpOworCisJLyogZGV0YWNoZWQgSEVBRCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGxpc3QgYWJvdmUgKi8KKwloZWFkX3JlZihhZGRfb25lX3JlZiwgcmV2cyk7CisJb3RoZXJfaGVhZF9yZWZzKGFkZF9vbmVfcmVmLCByZXZzKTsKKworCS8qIEFkZCBhbGwgcmVmbG9nIGluZm8gKi8KKwlpZiAobWFya19yZWZsb2cpCisJCWFkZF9yZWZsb2dzX3RvX3BlbmRpbmcocmV2cywgMCk7CisKKwljcC5wcm9ncmVzcyA9IHByb2dyZXNzOworCWNwLmNvdW50ID0gMDsKKworCWJpdG1hcF9naXQgPSBwcmVwYXJlX2JpdG1hcF93YWxrKHJldnMsIE5VTEwpOworCWlmIChiaXRtYXBfZ2l0KSB7CisJCXRyYXZlcnNlX2JpdG1hcF9jb21taXRfbGlzdChiaXRtYXBfZ2l0LCByZXZzLCBtYXJrX29iamVjdF9zZWVuKTsKKwkJZnJlZV9iaXRtYXBfaW5kZXgoYml0bWFwX2dpdCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFNldCB1cCB0aGUgcmV2aXNpb24gd2FsayAtIHRoaXMgd2lsbCBtb3ZlIGFsbCBjb21taXRzCisJICogZnJvbSB0aGUgcGVuZGluZyBsaXN0IHRvIHRoZSBjb21taXQgd2Fsa2luZyBsaXN0LgorCSAqLworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsocmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwl0cmF2ZXJzZV9jb21taXRfbGlzdChyZXZzLCBtYXJrX2NvbW1pdCwgbWFya19vYmplY3QsICZjcCk7CisKKwlpZiAobWFya19yZWNlbnQpIHsKKwkJcmV2cy0+aWdub3JlX21pc3NpbmdfbGlua3MgPSAxOworCQlpZiAoYWRkX3Vuc2Vlbl9yZWNlbnRfb2JqZWN0c190b190cmF2ZXJzYWwocmV2cywgbWFya19yZWNlbnQpKQorCQkJZGllKCJ1bmFibGUgdG8gbWFyayByZWNlbnQgb2JqZWN0cyIpOworCQlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldnMpKQorCQkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCQl0cmF2ZXJzZV9jb21taXRfbGlzdChyZXZzLCBtYXJrX2NvbW1pdCwgbWFya19vYmplY3QsICZjcCk7CisJfQorCisJZGlzcGxheV9wcm9ncmVzcyhjcC5wcm9ncmVzcywgY3AuY291bnQpOworfQpkaWZmIC0tZ2l0IGEvcmVhY2hhYmxlLmggYi9yZWFjaGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGY5MzJhCi0tLSAvZGV2L251bGwKKysrIGIvcmVhY2hhYmxlLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBSRUFDSEVBQkxFX0gKKyNkZWZpbmUgUkVBQ0hFQUJMRV9ICisKK3N0cnVjdCBwcm9ncmVzczsKK3N0cnVjdCByZXZfaW5mbzsKKworaW50IGFkZF91bnNlZW5fcmVjZW50X29iamVjdHNfdG9fdHJhdmVyc2FsKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkJICAgdGltZXN0YW1wX3QgdGltZXN0YW1wKTsKK3ZvaWQgbWFya19yZWFjaGFibGVfb2JqZWN0cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBtYXJrX3JlZmxvZywKKwkJCSAgICB0aW1lc3RhbXBfdCBtYXJrX3JlY2VudCwgc3RydWN0IHByb2dyZXNzICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3JlYWQtY2FjaGUuYyBiL3JlYWQtY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTQyN2M1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVhZC1jYWNoZS5jCkBAIC0wLDAgKzEsMzY0NiBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInZhcmludC5oIgorI2luY2x1ZGUgInNwbGl0LWluZGV4LmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgImZzbW9uaXRvci5oIgorI2luY2x1ZGUgInRocmVhZC11dGlscy5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisKKy8qIE1hc2sgZm9yIHRoZSBuYW1lIGxlbmd0aCBpbiBjZV9mbGFncyBpbiB0aGUgb24tZGlzayBpbmRleCAqLworCisjZGVmaW5lIENFX05BTUVNQVNLICAoMHgwZmZmKQorCisvKiBJbmRleCBleHRlbnNpb25zLgorICoKKyAqIFRoZSBmaXJzdCBsZXR0ZXIgc2hvdWxkIGJlICdBJy4uJ1onIGZvciBleHRlbnNpb25zIHRoYXQgYXJlIG5vdAorICogbmVjZXNzYXJ5IGZvciBhIGNvcnJlY3Qgb3BlcmF0aW9uIChpLmUuIG9wdGltaXphdGlvbiBkYXRhKS4KKyAqIFdoZW4gbmV3IGV4dGVuc2lvbnMgYXJlIGFkZGVkIHRoYXQgX25lZWRzXyB0byBiZSB1bmRlcnN0b29kIGluCisgKiBvcmRlciB0byBjb3JyZWN0bHkgaW50ZXJwcmV0IHRoZSBpbmRleCBmaWxlLCBwaWNrIGNoYXJhY3RlciB0aGF0CisgKiBpcyBvdXRzaWRlIHRoZSByYW5nZSwgdG8gY2F1c2UgdGhlIHJlYWRlciB0byBhYm9ydC4KKyAqLworCisjZGVmaW5lIENBQ0hFX0VYVChzKSAoIChzWzBdPDwyNCl8KHNbMV08PDE2KXwoc1syXTw8OCl8KHNbM10pICkKKyNkZWZpbmUgQ0FDSEVfRVhUX1RSRUUgMHg1NDUyNDU0NQkvKiAiVFJFRSIgKi8KKyNkZWZpbmUgQ0FDSEVfRVhUX1JFU09MVkVfVU5ETyAweDUyNDU1NTQzIC8qICJSRVVDIiAqLworI2RlZmluZSBDQUNIRV9FWFRfTElOSyAweDZjNjk2ZTZiCSAgLyogImxpbmsiICovCisjZGVmaW5lIENBQ0hFX0VYVF9VTlRSQUNLRUQgMHg1NTRFNTQ1MgkgIC8qICJVTlRSIiAqLworI2RlZmluZSBDQUNIRV9FWFRfRlNNT05JVE9SIDB4NDY1MzRENEUJICAvKiAiRlNNTiIgKi8KKyNkZWZpbmUgQ0FDSEVfRVhUX0VORE9GSU5ERVhFTlRSSUVTIDB4NDU0RjQ5NDUJLyogIkVPSUUiICovCisjZGVmaW5lIENBQ0hFX0VYVF9JTkRFWEVOVFJZT0ZGU0VUVEFCTEUgMHg0OTQ1NEY1NCAvKiAiSUVPVCIgKi8KKworLyogY2hhbmdlcyB0aGF0IGNhbiBiZSBrZXB0IGluICRHSVRfRElSL2luZGV4IChiYXNpY2FsbHkgYWxsIGV4dGVuc2lvbnMpICovCisjZGVmaW5lIEVYVE1BU0sgKFJFU09MVkVfVU5ET19DSEFOR0VEIHwgQ0FDSEVfVFJFRV9DSEFOR0VEIHwgXAorCQkgQ0VfRU5UUllfQURERUQgfCBDRV9FTlRSWV9SRU1PVkVEIHwgQ0VfRU5UUllfQ0hBTkdFRCB8IFwKKwkJIFNQTElUX0lOREVYX09SREVSRUQgfCBVTlRSQUNLRURfQ0hBTkdFRCB8IEZTTU9OSVRPUl9DSEFOR0VEKQorCisKKy8qCisgKiBUaGlzIGlzIGFuIGVzdGltYXRlIG9mIHRoZSBwYXRobmFtZSBsZW5ndGggaW4gdGhlIGluZGV4LiAgV2UgdXNlCisgKiB0aGlzIGZvciBWNCBpbmRleCBmaWxlcyB0byBndWVzcyB0aGUgdW4tZGVsdGFmaWVkIHNpemUgb2YgdGhlIGluZGV4CisgKiBpbiBtZW1vcnkgYmVjYXVzZSBvZiBwYXRobmFtZSBkZWx0YWZpY2F0aW9uLiAgVGhpcyBpcyBub3QgcmVxdWlyZWQKKyAqIGZvciBWMi9WMyBpbmRleCBmb3JtYXRzIGJlY2F1c2UgdGhlaXIgcGF0aG5hbWVzIGFyZSBub3QgY29tcHJlc3NlZC4KKyAqIElmIHRoZSBpbml0aWFsIGFtb3VudCBvZiBtZW1vcnkgc2V0IGFzaWRlIGlzIG5vdCBzdWZmaWNpZW50LCB0aGUKKyAqIG1lbSBwb29sIHdpbGwgYWxsb2NhdGUgZXh0cmEgbWVtb3J5LgorICovCisjZGVmaW5lIENBQ0hFX0VOVFJZX1BBVEhfTEVOR1RIIDgwCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNhY2hlX2VudHJ5ICptZW1fcG9vbF9fY2VfYWxsb2Moc3RydWN0IG1lbV9wb29sICptZW1fcG9vbCwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCWNlID0gbWVtX3Bvb2xfYWxsb2MobWVtX3Bvb2wsIGNhY2hlX2VudHJ5X3NpemUobGVuKSk7CisJY2UtPm1lbV9wb29sX2FsbG9jYXRlZCA9IDE7CisJcmV0dXJuIGNlOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjYWNoZV9lbnRyeSAqbWVtX3Bvb2xfX2NlX2NhbGxvYyhzdHJ1Y3QgbWVtX3Bvb2wgKm1lbV9wb29sLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqIGNlOworCWNlID0gbWVtX3Bvb2xfY2FsbG9jKG1lbV9wb29sLCAxLCBjYWNoZV9lbnRyeV9zaXplKGxlbikpOworCWNlLT5tZW1fcG9vbF9hbGxvY2F0ZWQgPSAxOworCXJldHVybiBjZTsKK30KKworc3RhdGljIHN0cnVjdCBtZW1fcG9vbCAqZmluZF9tZW1fcG9vbChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlzdHJ1Y3QgbWVtX3Bvb2wgKipwb29sX3B0cjsKKworCWlmIChpc3RhdGUtPnNwbGl0X2luZGV4ICYmIGlzdGF0ZS0+c3BsaXRfaW5kZXgtPmJhc2UpCisJCXBvb2xfcHRyID0gJmlzdGF0ZS0+c3BsaXRfaW5kZXgtPmJhc2UtPmNlX21lbV9wb29sOworCWVsc2UKKwkJcG9vbF9wdHIgPSAmaXN0YXRlLT5jZV9tZW1fcG9vbDsKKworCWlmICghKnBvb2xfcHRyKQorCQltZW1fcG9vbF9pbml0KHBvb2xfcHRyLCAwKTsKKworCXJldHVybiAqcG9vbF9wdHI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICphbHRlcm5hdGVfaW5kZXhfb3V0cHV0OworCitzdGF0aWMgdm9pZCBzZXRfaW5kZXhfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCBuciwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpc3RhdGUtPmNhY2hlW25yXSA9IGNlOworCWFkZF9uYW1lX2hhc2goaXN0YXRlLCBjZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcGxhY2VfaW5kZXhfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCBuciwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCA9IGlzdGF0ZS0+Y2FjaGVbbnJdOworCisJcmVwbGFjZV9pbmRleF9lbnRyeV9pbl9iYXNlKGlzdGF0ZSwgb2xkLCBjZSk7CisJcmVtb3ZlX25hbWVfaGFzaChpc3RhdGUsIG9sZCk7CisJZGlzY2FyZF9jYWNoZV9lbnRyeShvbGQpOworCWNlLT5jZV9mbGFncyAmPSB+Q0VfSEFTSEVEOworCXNldF9pbmRleF9lbnRyeShpc3RhdGUsIG5yLCBjZSk7CisJY2UtPmNlX2ZsYWdzIHw9IENFX1VQREFURV9JTl9CQVNFOworCW1hcmtfZnNtb25pdG9yX2ludmFsaWQoaXN0YXRlLCBjZSk7CisJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IENFX0VOVFJZX0NIQU5HRUQ7Cit9CisKK3ZvaWQgcmVuYW1lX2luZGV4X2VudHJ5X2F0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgbnIsIGNvbnN0IGNoYXIgKm5ld19uYW1lKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkX2VudHJ5ID0gaXN0YXRlLT5jYWNoZVtucl0sICpuZXdfZW50cnk7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4obmV3X25hbWUpOworCisJbmV3X2VudHJ5ID0gbWFrZV9lbXB0eV9jYWNoZV9lbnRyeShpc3RhdGUsIG5hbWVsZW4pOworCWNvcHlfY2FjaGVfZW50cnkobmV3X2VudHJ5LCBvbGRfZW50cnkpOworCW5ld19lbnRyeS0+Y2VfZmxhZ3MgJj0gfkNFX0hBU0hFRDsKKwluZXdfZW50cnktPmNlX25hbWVsZW4gPSBuYW1lbGVuOworCW5ld19lbnRyeS0+aW5kZXggPSAwOworCW1lbWNweShuZXdfZW50cnktPm5hbWUsIG5ld19uYW1lLCBuYW1lbGVuICsgMSk7CisKKwljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChpc3RhdGUsIG9sZF9lbnRyeS0+bmFtZSk7CisJdW50cmFja2VkX2NhY2hlX3JlbW92ZV9mcm9tX2luZGV4KGlzdGF0ZSwgb2xkX2VudHJ5LT5uYW1lKTsKKwlyZW1vdmVfaW5kZXhfZW50cnlfYXQoaXN0YXRlLCBucik7CisJYWRkX2luZGV4X2VudHJ5KGlzdGF0ZSwgbmV3X2VudHJ5LCBBRERfQ0FDSEVfT0tfVE9fQUREfEFERF9DQUNIRV9PS19UT19SRVBMQUNFKTsKK30KKwordm9pZCBmaWxsX3N0YXRfZGF0YShzdHJ1Y3Qgc3RhdF9kYXRhICpzZCwgc3RydWN0IHN0YXQgKnN0KQoreworCXNkLT5zZF9jdGltZS5zZWMgPSAodW5zaWduZWQgaW50KXN0LT5zdF9jdGltZTsKKwlzZC0+c2RfbXRpbWUuc2VjID0gKHVuc2lnbmVkIGludClzdC0+c3RfbXRpbWU7CisJc2QtPnNkX2N0aW1lLm5zZWMgPSBTVF9DVElNRV9OU0VDKCpzdCk7CisJc2QtPnNkX210aW1lLm5zZWMgPSBTVF9NVElNRV9OU0VDKCpzdCk7CisJc2QtPnNkX2RldiA9IHN0LT5zdF9kZXY7CisJc2QtPnNkX2lubyA9IHN0LT5zdF9pbm87CisJc2QtPnNkX3VpZCA9IHN0LT5zdF91aWQ7CisJc2QtPnNkX2dpZCA9IHN0LT5zdF9naWQ7CisJc2QtPnNkX3NpemUgPSBzdC0+c3Rfc2l6ZTsKK30KKworaW50IG1hdGNoX3N0YXRfZGF0YShjb25zdCBzdHJ1Y3Qgc3RhdF9kYXRhICpzZCwgc3RydWN0IHN0YXQgKnN0KQoreworCWludCBjaGFuZ2VkID0gMDsKKworCWlmIChzZC0+c2RfbXRpbWUuc2VjICE9ICh1bnNpZ25lZCBpbnQpc3QtPnN0X210aW1lKQorCQljaGFuZ2VkIHw9IE1USU1FX0NIQU5HRUQ7CisJaWYgKHRydXN0X2N0aW1lICYmIGNoZWNrX3N0YXQgJiYKKwkgICAgc2QtPnNkX2N0aW1lLnNlYyAhPSAodW5zaWduZWQgaW50KXN0LT5zdF9jdGltZSkKKwkJY2hhbmdlZCB8PSBDVElNRV9DSEFOR0VEOworCisjaWZkZWYgVVNFX05TRUMKKwlpZiAoY2hlY2tfc3RhdCAmJiBzZC0+c2RfbXRpbWUubnNlYyAhPSBTVF9NVElNRV9OU0VDKCpzdCkpCisJCWNoYW5nZWQgfD0gTVRJTUVfQ0hBTkdFRDsKKwlpZiAodHJ1c3RfY3RpbWUgJiYgY2hlY2tfc3RhdCAmJgorCSAgICBzZC0+c2RfY3RpbWUubnNlYyAhPSBTVF9DVElNRV9OU0VDKCpzdCkpCisJCWNoYW5nZWQgfD0gQ1RJTUVfQ0hBTkdFRDsKKyNlbmRpZgorCisJaWYgKGNoZWNrX3N0YXQpIHsKKwkJaWYgKHNkLT5zZF91aWQgIT0gKHVuc2lnbmVkIGludCkgc3QtPnN0X3VpZCB8fAorCQkJc2QtPnNkX2dpZCAhPSAodW5zaWduZWQgaW50KSBzdC0+c3RfZ2lkKQorCQkJY2hhbmdlZCB8PSBPV05FUl9DSEFOR0VEOworCQlpZiAoc2QtPnNkX2lubyAhPSAodW5zaWduZWQgaW50KSBzdC0+c3RfaW5vKQorCQkJY2hhbmdlZCB8PSBJTk9ERV9DSEFOR0VEOworCX0KKworI2lmZGVmIFVTRV9TVERFVgorCS8qCisJICogc3RfZGV2IGJyZWFrcyBvbiBuZXR3b3JrIGZpbGVzeXN0ZW1zIHdoZXJlIGRpZmZlcmVudAorCSAqIGNsaWVudHMgd2lsbCBoYXZlIGRpZmZlcmVudCB2aWV3cyBvZiB3aGF0ICJkZXZpY2UiCisJICogdGhlIGZpbGVzeXN0ZW0gaXMgb24KKwkgKi8KKwlpZiAoY2hlY2tfc3RhdCAmJiBzZC0+c2RfZGV2ICE9ICh1bnNpZ25lZCBpbnQpIHN0LT5zdF9kZXYpCisJCQljaGFuZ2VkIHw9IElOT0RFX0NIQU5HRUQ7CisjZW5kaWYKKworCWlmIChzZC0+c2Rfc2l6ZSAhPSAodW5zaWduZWQgaW50KSBzdC0+c3Rfc2l6ZSkKKwkJY2hhbmdlZCB8PSBEQVRBX0NIQU5HRUQ7CisKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworLyoKKyAqIFRoaXMgb25seSB1cGRhdGVzIHRoZSAibm9uLWNyaXRpY2FsIiBwYXJ0cyBvZiB0aGUgZGlyZWN0b3J5CisgKiBjYWNoZSwgaWUgdGhlIHBhcnRzIHRoYXQgYXJlbid0IHRyYWNrZWQgYnkgR0lULCBhbmQgb25seSB1c2VkCisgKiB0byB2YWxpZGF0ZSB0aGUgY2FjaGUuCisgKi8KK3ZvaWQgZmlsbF9zdGF0X2NhY2hlX2luZm8oc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwlmaWxsX3N0YXRfZGF0YSgmY2UtPmNlX3N0YXRfZGF0YSwgc3QpOworCisJaWYgKGFzc3VtZV91bmNoYW5nZWQpCisJCWNlLT5jZV9mbGFncyB8PSBDRV9WQUxJRDsKKworCWlmIChTX0lTUkVHKHN0LT5zdF9tb2RlKSkgeworCQljZV9tYXJrX3VwdG9kYXRlKGNlKTsKKwkJbWFya19mc21vbml0b3JfdmFsaWQoaXN0YXRlLCBjZSk7CisJfQorfQorCitzdGF0aWMgaW50IGNlX2NvbXBhcmVfZGF0YShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJaW50IG1hdGNoID0gLTE7CisJaW50IGZkID0gZ2l0X29wZW5fY2xvZXhlYyhjZS0+bmFtZSwgT19SRE9OTFkpOworCisJaWYgKGZkID49IDApIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWlmICghaW5kZXhfZmQoaXN0YXRlLCAmb2lkLCBmZCwgc3QsIE9CSl9CTE9CLCBjZS0+bmFtZSwgMCkpCisJCQltYXRjaCA9ICFvaWRlcSgmb2lkLCAmY2UtPm9pZCk7CisJCS8qIGluZGV4X2ZkKCkgY2xvc2VkIHRoZSBmaWxlIGRlc2NyaXB0b3IgYWxyZWFkeSAqLworCX0KKwlyZXR1cm4gbWF0Y2g7Cit9CisKK3N0YXRpYyBpbnQgY2VfY29tcGFyZV9saW5rKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHNpemVfdCBleHBlY3RlZF9zaXplKQoreworCWludCBtYXRjaCA9IC0xOworCXZvaWQgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmIChzdHJidWZfcmVhZGxpbmsoJnNiLCBjZS0+bmFtZSwgZXhwZWN0ZWRfc2l6ZSkpCisJCXJldHVybiAtMTsKKworCWJ1ZmZlciA9IHJlYWRfb2JqZWN0X2ZpbGUoJmNlLT5vaWQsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKGJ1ZmZlcikgeworCQlpZiAoc2l6ZSA9PSBzYi5sZW4pCisJCQltYXRjaCA9IG1lbWNtcChidWZmZXIsIHNiLmJ1Ziwgc2l6ZSk7CisJCWZyZWUoYnVmZmVyKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gbWF0Y2g7Cit9CisKK3N0YXRpYyBpbnQgY2VfY29tcGFyZV9naXRsaW5rKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkvKgorCSAqIFdlIGRvbid0IGFjdHVhbGx5IHJlcXVpcmUgdGhhdCB0aGUgLmdpdCBkaXJlY3RvcnkKKwkgKiB1bmRlciBHSVRMSU5LIGRpcmVjdG9yeSBiZSBhIHZhbGlkIGdpdCBkaXJlY3RvcnkuIEl0CisJICogbWlnaHQgZXZlbiBiZSBtaXNzaW5nIChpbiBjYXNlIG5vYm9keSBwb3B1bGF0ZWQgdGhhdAorCSAqIHN1Yi1wcm9qZWN0KS4KKwkgKgorCSAqIElmIHNvLCB3ZSBjb25zaWRlciBpdCBhbHdheXMgdG8gbWF0Y2guCisJICovCisJaWYgKHJlc29sdmVfZ2l0bGlua19yZWYoY2UtPm5hbWUsICJIRUFEIiwgJm9pZCkgPCAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gIW9pZGVxKCZvaWQsICZjZS0+b2lkKTsKK30KKworc3RhdGljIGludCBjZV9tb2RpZmllZF9jaGVja19mcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCXN0cnVjdCBzdGF0ICpzdCkKK3sKKwlzd2l0Y2ggKHN0LT5zdF9tb2RlICYgU19JRk1UKSB7CisJY2FzZSBTX0lGUkVHOgorCQlpZiAoY2VfY29tcGFyZV9kYXRhKGlzdGF0ZSwgY2UsIHN0KSkKKwkJCXJldHVybiBEQVRBX0NIQU5HRUQ7CisJCWJyZWFrOworCWNhc2UgU19JRkxOSzoKKwkJaWYgKGNlX2NvbXBhcmVfbGluayhjZSwgeHNpemVfdChzdC0+c3Rfc2l6ZSkpKQorCQkJcmV0dXJuIERBVEFfQ0hBTkdFRDsKKwkJYnJlYWs7CisJY2FzZSBTX0lGRElSOgorCQlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJcmV0dXJuIGNlX2NvbXBhcmVfZ2l0bGluayhjZSkgPyBEQVRBX0NIQU5HRUQgOiAwOworCQkvKiBlbHNlIGZhbGx0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIFRZUEVfQ0hBTkdFRDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2VfbWF0Y2hfc3RhdF9iYXNpYyhjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJdW5zaWduZWQgaW50IGNoYW5nZWQgPSAwOworCisJaWYgKGNlLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJcmV0dXJuIE1PREVfQ0hBTkdFRCB8IERBVEFfQ0hBTkdFRCB8IFRZUEVfQ0hBTkdFRDsKKworCXN3aXRjaCAoY2UtPmNlX21vZGUgJiBTX0lGTVQpIHsKKwljYXNlIFNfSUZSRUc6CisJCWNoYW5nZWQgfD0gIVNfSVNSRUcoc3QtPnN0X21vZGUpID8gVFlQRV9DSEFOR0VEIDogMDsKKwkJLyogV2UgY29uc2lkZXIgb25seSB0aGUgb3duZXIgeCBiaXQgdG8gYmUgcmVsZXZhbnQgZm9yCisJCSAqICJtb2RlIGNoYW5nZXMiCisJCSAqLworCQlpZiAodHJ1c3RfZXhlY3V0YWJsZV9iaXQgJiYKKwkJICAgICgwMTAwICYgKGNlLT5jZV9tb2RlIF4gc3QtPnN0X21vZGUpKSkKKwkJCWNoYW5nZWQgfD0gTU9ERV9DSEFOR0VEOworCQlicmVhazsKKwljYXNlIFNfSUZMTks6CisJCWlmICghU19JU0xOSyhzdC0+c3RfbW9kZSkgJiYKKwkJICAgIChoYXNfc3ltbGlua3MgfHwgIVNfSVNSRUcoc3QtPnN0X21vZGUpKSkKKwkJCWNoYW5nZWQgfD0gVFlQRV9DSEFOR0VEOworCQlicmVhazsKKwljYXNlIFNfSUZHSVRMSU5LOgorCQkvKiBXZSBpZ25vcmUgbW9zdCBvZiB0aGUgc3RfeHh4IGZpZWxkcyBmb3IgZ2l0bGlua3MgKi8KKwkJaWYgKCFTX0lTRElSKHN0LT5zdF9tb2RlKSkKKwkJCWNoYW5nZWQgfD0gVFlQRV9DSEFOR0VEOworCQllbHNlIGlmIChjZV9jb21wYXJlX2dpdGxpbmsoY2UpKQorCQkJY2hhbmdlZCB8PSBEQVRBX0NIQU5HRUQ7CisJCXJldHVybiBjaGFuZ2VkOworCWRlZmF1bHQ6CisJCUJVRygidW5zdXBwb3J0ZWQgY2VfbW9kZTogJW8iLCBjZS0+Y2VfbW9kZSk7CisJfQorCisJY2hhbmdlZCB8PSBtYXRjaF9zdGF0X2RhdGEoJmNlLT5jZV9zdGF0X2RhdGEsIHN0KTsKKworCS8qIFJhY2lseSBzbXVkZ2VkIGVudHJ5PyAqLworCWlmICghY2UtPmNlX3N0YXRfZGF0YS5zZF9zaXplKSB7CisJCWlmICghaXNfZW1wdHlfYmxvYl9zaGExKGNlLT5vaWQuaGFzaCkpCisJCQljaGFuZ2VkIHw9IERBVEFfQ0hBTkdFRDsKKwl9CisKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludCBpc19yYWN5X3N0YXQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQljb25zdCBzdHJ1Y3Qgc3RhdF9kYXRhICpzZCkKK3sKKwlyZXR1cm4gKGlzdGF0ZS0+dGltZXN0YW1wLnNlYyAmJgorI2lmZGVmIFVTRV9OU0VDCisJCSAvKiBuYW5vc2Vjb25kIHRpbWVzdGFtcGVkIGZpbGVzIGNhbiBhbHNvIGJlIHJhY3khICovCisJCShpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPCBzZC0+c2RfbXRpbWUuc2VjIHx8CisJCSAoaXN0YXRlLT50aW1lc3RhbXAuc2VjID09IHNkLT5zZF9tdGltZS5zZWMgJiYKKwkJICBpc3RhdGUtPnRpbWVzdGFtcC5uc2VjIDw9IHNkLT5zZF9tdGltZS5uc2VjKSkKKyNlbHNlCisJCWlzdGF0ZS0+dGltZXN0YW1wLnNlYyA8PSBzZC0+c2RfbXRpbWUuc2VjCisjZW5kaWYKKwkJKTsKK30KKworaW50IGlzX3JhY3lfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCXJldHVybiAoIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSAmJgorCQlpc19yYWN5X3N0YXQoaXN0YXRlLCAmY2UtPmNlX3N0YXRfZGF0YSkpOworfQorCitpbnQgbWF0Y2hfc3RhdF9kYXRhX3JhY3koY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgY29uc3Qgc3RydWN0IHN0YXRfZGF0YSAqc2QsIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwlpZiAoaXNfcmFjeV9zdGF0KGlzdGF0ZSwgc2QpKQorCQlyZXR1cm4gTVRJTUVfQ0hBTkdFRDsKKwlyZXR1cm4gbWF0Y2hfc3RhdF9kYXRhKHNkLCBzdCk7Cit9CisKK2ludCBpZV9tYXRjaF9zdGF0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCwKKwkJICB1bnNpZ25lZCBpbnQgb3B0aW9ucykKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbmdlZDsKKwlpbnQgaWdub3JlX3ZhbGlkID0gb3B0aW9ucyAmIENFX01BVENIX0lHTk9SRV9WQUxJRDsKKwlpbnQgaWdub3JlX3NraXBfd29ya3RyZWUgPSBvcHRpb25zICYgQ0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUU7CisJaW50IGFzc3VtZV9yYWN5X2lzX21vZGlmaWVkID0gb3B0aW9ucyAmIENFX01BVENIX1JBQ1lfSVNfRElSVFk7CisJaW50IGlnbm9yZV9mc21vbml0b3IgPSBvcHRpb25zICYgQ0VfTUFUQ0hfSUdOT1JFX0ZTTU9OSVRPUjsKKworCWlmICghaWdub3JlX2ZzbW9uaXRvcikKKwkJcmVmcmVzaF9mc21vbml0b3IoaXN0YXRlKTsKKwkvKgorCSAqIElmIGl0J3MgbWFya2VkIGFzIGFsd2F5cyB2YWxpZCBpbiB0aGUgaW5kZXgsIGl0J3MKKwkgKiB2YWxpZCB3aGF0ZXZlciB0aGUgY2hlY2tlZC1vdXQgY29weSBzYXlzLgorCSAqCisJICogc2tpcC13b3JrdHJlZSBoYXMgdGhlIHNhbWUgZWZmZWN0IHdpdGggaGlnaGVyIHByZWNlZGVuY2UKKwkgKi8KKwlpZiAoIWlnbm9yZV9za2lwX3dvcmt0cmVlICYmIGNlX3NraXBfd29ya3RyZWUoY2UpKQorCQlyZXR1cm4gMDsKKwlpZiAoIWlnbm9yZV92YWxpZCAmJiAoY2UtPmNlX2ZsYWdzICYgQ0VfVkFMSUQpKQorCQlyZXR1cm4gMDsKKwlpZiAoIWlnbm9yZV9mc21vbml0b3IgJiYgKGNlLT5jZV9mbGFncyAmIENFX0ZTTU9OSVRPUl9WQUxJRCkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJbnRlbnQtdG8tYWRkIGVudHJpZXMgaGF2ZSBub3QgYmVlbiBhZGRlZCwgc28gdGhlIGluZGV4IGVudHJ5CisJICogYnkgZGVmaW5pdGlvbiBuZXZlciBtYXRjaGVzIHdoYXQgaXMgaW4gdGhlIHdvcmsgdHJlZSB1bnRpbCBpdAorCSAqIGFjdHVhbGx5IGdldHMgYWRkZWQuCisJICovCisJaWYgKGNlX2ludGVudF90b19hZGQoY2UpKQorCQlyZXR1cm4gREFUQV9DSEFOR0VEIHwgVFlQRV9DSEFOR0VEIHwgTU9ERV9DSEFOR0VEOworCisJY2hhbmdlZCA9IGNlX21hdGNoX3N0YXRfYmFzaWMoY2UsIHN0KTsKKworCS8qCisJICogV2l0aGluIDEgc2Vjb25kIG9mIHRoaXMgc2VxdWVuY2U6CisJICogCWVjaG8geHl6enkgPmZpbGUgJiYgZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlCisJICogcnVubmluZyB0aGlzIGNvbW1hbmQ6CisJICogCWVjaG8gZnJvdHogPmZpbGUKKwkgKiB3b3VsZCBnaXZlIGEgZmFsc2VseSBjbGVhbiBjYWNoZSBlbnRyeS4gIFRoZSBtdGltZSBhbmQKKwkgKiBsZW5ndGggbWF0Y2ggdGhlIGNhY2hlLCBhbmQgb3RoZXIgc3RhdCBmaWVsZHMgZG8gbm90IGNoYW5nZS4KKwkgKgorCSAqIFdlIGNvdWxkIGRldGVjdCB0aGlzIGF0IHVwZGF0ZS1pbmRleCB0aW1lICh0aGUgY2FjaGUgZW50cnkKKwkgKiBiZWluZyByZWdpc3RlcmVkL3VwZGF0ZWQgcmVjb3JkcyB0aGUgc2FtZSB0aW1lIGFzICJub3ciKQorCSAqIGFuZCBkZWxheSB0aGUgcmV0dXJuIGZyb20gZ2l0LXVwZGF0ZS1pbmRleCwgYnV0IHRoYXQgd291bGQKKwkgKiBlZmZlY3RpdmVseSBtZWFuIHdlIGNhbiBtYWtlIGF0IG1vc3Qgb25lIGNvbW1pdCBwZXIgc2Vjb25kLAorCSAqIHdoaWNoIGlzIG5vdCBhY2NlcHRhYmxlLiAgSW5zdGVhZCwgd2UgY2hlY2sgY2FjaGUgZW50cmllcworCSAqIHdob3NlIG10aW1lIGFyZSB0aGUgc2FtZSBhcyB0aGUgaW5kZXggZmlsZSB0aW1lc3RhbXAgbW9yZQorCSAqIGNhcmVmdWxseSB0aGFuIG90aGVycy4KKwkgKi8KKwlpZiAoIWNoYW5nZWQgJiYgaXNfcmFjeV90aW1lc3RhbXAoaXN0YXRlLCBjZSkpIHsKKwkJaWYgKGFzc3VtZV9yYWN5X2lzX21vZGlmaWVkKQorCQkJY2hhbmdlZCB8PSBEQVRBX0NIQU5HRUQ7CisJCWVsc2UKKwkJCWNoYW5nZWQgfD0gY2VfbW9kaWZpZWRfY2hlY2tfZnMoaXN0YXRlLCBjZSwgc3QpOworCX0KKworCXJldHVybiBjaGFuZ2VkOworfQorCitpbnQgaWVfbW9kaWZpZWQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCXN0cnVjdCBzdGF0ICpzdCwgdW5zaWduZWQgaW50IG9wdGlvbnMpCit7CisJaW50IGNoYW5nZWQsIGNoYW5nZWRfZnM7CisKKwljaGFuZ2VkID0gaWVfbWF0Y2hfc3RhdChpc3RhdGUsIGNlLCBzdCwgb3B0aW9ucyk7CisJaWYgKCFjaGFuZ2VkKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIElmIHRoZSBtb2RlIG9yIHR5cGUgaGFzIGNoYW5nZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gdHJ5aW5nCisJICogdG8gcmVmcmVzaCB0aGUgZW50cnkgLSBpdCdzIG5vdCBnb2luZyB0byBtYXRjaAorCSAqLworCWlmIChjaGFuZ2VkICYgKE1PREVfQ0hBTkdFRCB8IFRZUEVfQ0hBTkdFRCkpCisJCXJldHVybiBjaGFuZ2VkOworCisJLyoKKwkgKiBJbW1lZGlhdGVseSBhZnRlciByZWFkLXRyZWUgb3IgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvLAorCSAqIHRoZSBsZW5ndGggZmllbGQgaXMgemVybywgYXMgd2UgaGF2ZSBuZXZlciBldmVuIHJlYWQgdGhlCisJICogbHN0YXQoMikgaW5mb3JtYXRpb24gb25jZSwgYW5kIHdlIGNhbm5vdCB0cnVzdCBEQVRBX0NIQU5HRUQKKwkgKiByZXR1cm5lZCBieSBpZV9tYXRjaF9zdGF0KCkgd2hpY2ggaW4gdHVybiB3YXMgcmV0dXJuZWQgYnkKKwkgKiBjZV9tYXRjaF9zdGF0X2Jhc2ljKCkgdG8gc2lnbmFsIHRoYXQgdGhlIGZpbGVzaXplIG9mIHRoZQorCSAqIGJsb2IgY2hhbmdlZC4gIFdlIGhhdmUgdG8gYWN0dWFsbHkgZ28gdG8gdGhlIGZpbGVzeXN0ZW0gdG8KKwkgKiBzZWUgaWYgdGhlIGNvbnRlbnRzIG1hdGNoLCBhbmQgaWYgc28sIHNob3VsZCBhbnN3ZXIgInVuY2hhbmdlZCIuCisJICoKKwkgKiBUaGUgbG9naWMgZG9lcyBub3QgYXBwbHkgdG8gZ2l0bGlua3MsIGFzIGNlX21hdGNoX3N0YXRfYmFzaWMoKQorCSAqIGFscmVhZHkgaGFzIGNoZWNrZWQgdGhlIGFjdHVhbCBIRUFEIGZyb20gdGhlIGZpbGVzeXN0ZW0gaW4gdGhlCisJICogc3VicHJvamVjdC4gIElmIGllX21hdGNoX3N0YXQoKSBhbHJlYWR5IHNhaWQgaXQgaXMgZGlmZmVyZW50LAorCSAqIHRoZW4gd2Uga25vdyBpdCBpcy4KKwkgKi8KKwlpZiAoKGNoYW5nZWQgJiBEQVRBX0NIQU5HRUQpICYmCisJICAgIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkgfHwgY2UtPmNlX3N0YXRfZGF0YS5zZF9zaXplICE9IDApKQorCQlyZXR1cm4gY2hhbmdlZDsKKworCWNoYW5nZWRfZnMgPSBjZV9tb2RpZmllZF9jaGVja19mcyhpc3RhdGUsIGNlLCBzdCk7CisJaWYgKGNoYW5nZWRfZnMpCisJCXJldHVybiBjaGFuZ2VkIHwgY2hhbmdlZF9mczsKKwlyZXR1cm4gMDsKK30KKworaW50IGJhc2VfbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMSwgaW50IG1vZGUxLAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lMiwgaW50IGxlbjIsIGludCBtb2RlMikKK3sKKwl1bnNpZ25lZCBjaGFyIGMxLCBjMjsKKwlpbnQgbGVuID0gbGVuMSA8IGxlbjIgPyBsZW4xIDogbGVuMjsKKwlpbnQgY21wOworCisJY21wID0gbWVtY21wKG5hbWUxLCBuYW1lMiwgbGVuKTsKKwlpZiAoY21wKQorCQlyZXR1cm4gY21wOworCWMxID0gbmFtZTFbbGVuXTsKKwljMiA9IG5hbWUyW2xlbl07CisJaWYgKCFjMSAmJiBTX0lTRElSKG1vZGUxKSkKKwkJYzEgPSAnLyc7CisJaWYgKCFjMiAmJiBTX0lTRElSKG1vZGUyKSkKKwkJYzIgPSAnLyc7CisJcmV0dXJuIChjMSA8IGMyKSA/IC0xIDogKGMxID4gYzIpID8gMSA6IDA7Cit9CisKKy8qCisgKiBkZl9uYW1lX2NvbXBhcmUoKSBpcyBpZGVudGljYWwgdG8gYmFzZV9uYW1lX2NvbXBhcmUoKSwgZXhjZXB0IGl0CisgKiBjb21wYXJlcyBjb25mbGljdGluZyBkaXJlY3RvcnkvZmlsZSBlbnRyaWVzIGFzIGVxdWFsLiBOb3RlIHRoYXQKKyAqIHdoaWxlIGEgZGlyZWN0b3J5IG5hbWUgY29tcGFyZXMgYXMgZXF1YWwgdG8gYSByZWd1bGFyIGZpbGUsIHRoZXkKKyAqIHRoZW4gaW5kaXZpZHVhbGx5IGNvbXBhcmUgX2RpZmZlcmVudGx5XyB0byBhIGZpbGVuYW1lIHRoYXQgaGFzCisgKiBhIGRvdCBhZnRlciB0aGUgYmFzZW5hbWUgKGJlY2F1c2UgJ1wwJyA8ICcuJyA8ICcvJykuCisgKgorICogVGhpcyBpcyB1c2VkIGJ5IHJvdXRpbmVzIHRoYXQgd2FudCB0byB0cmF2ZXJzZSB0aGUgZ2l0IG5hbWVzcGFjZQorICogYnV0IHRoZW4gaGFuZGxlIGNvbmZsaWN0aW5nIGVudHJpZXMgdG9nZXRoZXIgd2hlbiBwb3NzaWJsZS4KKyAqLworaW50IGRmX25hbWVfY29tcGFyZShjb25zdCBjaGFyICpuYW1lMSwgaW50IGxlbjEsIGludCBtb2RlMSwKKwkJICAgIGNvbnN0IGNoYXIgKm5hbWUyLCBpbnQgbGVuMiwgaW50IG1vZGUyKQoreworCWludCBsZW4gPSBsZW4xIDwgbGVuMiA/IGxlbjEgOiBsZW4yLCBjbXA7CisJdW5zaWduZWQgY2hhciBjMSwgYzI7CisKKwljbXAgPSBtZW1jbXAobmFtZTEsIG5hbWUyLCBsZW4pOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisJLyogRGlyZWN0b3JpZXMgYW5kIGZpbGVzIGNvbXBhcmUgZXF1YWwgKHNhbWUgbGVuZ3RoLCBzYW1lIG5hbWUpICovCisJaWYgKGxlbjEgPT0gbGVuMikKKwkJcmV0dXJuIDA7CisJYzEgPSBuYW1lMVtsZW5dOworCWlmICghYzEgJiYgU19JU0RJUihtb2RlMSkpCisJCWMxID0gJy8nOworCWMyID0gbmFtZTJbbGVuXTsKKwlpZiAoIWMyICYmIFNfSVNESVIobW9kZTIpKQorCQljMiA9ICcvJzsKKwlpZiAoYzEgPT0gJy8nICYmICFjMikKKwkJcmV0dXJuIDA7CisJaWYgKGMyID09ICcvJyAmJiAhYzEpCisJCXJldHVybiAwOworCXJldHVybiBjMSAtIGMyOworfQorCitpbnQgbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKm5hbWUxLCBzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqbmFtZTIsIHNpemVfdCBsZW4yKQoreworCXNpemVfdCBtaW5fbGVuID0gKGxlbjEgPCBsZW4yKSA/IGxlbjEgOiBsZW4yOworCWludCBjbXAgPSBtZW1jbXAobmFtZTEsIG5hbWUyLCBtaW5fbGVuKTsKKwlpZiAoY21wKQorCQlyZXR1cm4gY21wOworCWlmIChsZW4xIDwgbGVuMikKKwkJcmV0dXJuIC0xOworCWlmIChsZW4xID4gbGVuMikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjYWNoZV9uYW1lX3N0YWdlX2NvbXBhcmUoY29uc3QgY2hhciAqbmFtZTEsIGludCBsZW4xLCBpbnQgc3RhZ2UxLCBjb25zdCBjaGFyICpuYW1lMiwgaW50IGxlbjIsIGludCBzdGFnZTIpCit7CisJaW50IGNtcDsKKworCWNtcCA9IG5hbWVfY29tcGFyZShuYW1lMSwgbGVuMSwgbmFtZTIsIGxlbjIpOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisKKwlpZiAoc3RhZ2UxIDwgc3RhZ2UyKQorCQlyZXR1cm4gLTE7CisJaWYgKHN0YWdlMSA+IHN0YWdlMikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5kZXhfbmFtZV9zdGFnZV9wb3MoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBpbnQgc3RhZ2UpCit7CisJaW50IGZpcnN0LCBsYXN0OworCisJZmlyc3QgPSAwOworCWxhc3QgPSBpc3RhdGUtPmNhY2hlX25yOworCXdoaWxlIChsYXN0ID4gZmlyc3QpIHsKKwkJaW50IG5leHQgPSBmaXJzdCArICgobGFzdCAtIGZpcnN0KSA+PiAxKTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbbmV4dF07CisJCWludCBjbXAgPSBjYWNoZV9uYW1lX3N0YWdlX2NvbXBhcmUobmFtZSwgbmFtZWxlbiwgc3RhZ2UsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwgY2Vfc3RhZ2UoY2UpKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbmV4dDsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCWxhc3QgPSBuZXh0OworCQkJY29udGludWU7CisJCX0KKwkJZmlyc3QgPSBuZXh0KzE7CisJfQorCXJldHVybiAtZmlyc3QtMTsKK30KKworaW50IGluZGV4X25hbWVfcG9zKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbikKK3sKKwlyZXR1cm4gaW5kZXhfbmFtZV9zdGFnZV9wb3MoaXN0YXRlLCBuYW1lLCBuYW1lbGVuLCAwKTsKK30KKworaW50IHJlbW92ZV9pbmRleF9lbnRyeV9hdChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgaW50IHBvcykKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtwb3NdOworCisJcmVjb3JkX3Jlc29sdmVfdW5kbyhpc3RhdGUsIGNlKTsKKwlyZW1vdmVfbmFtZV9oYXNoKGlzdGF0ZSwgY2UpOworCXNhdmVfb3JfZnJlZV9pbmRleF9lbnRyeShpc3RhdGUsIGNlKTsKKwlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gQ0VfRU5UUllfUkVNT1ZFRDsKKwlpc3RhdGUtPmNhY2hlX25yLS07CisJaWYgKHBvcyA+PSBpc3RhdGUtPmNhY2hlX25yKQorCQlyZXR1cm4gMDsKKwlNT1ZFX0FSUkFZKGlzdGF0ZS0+Y2FjaGUgKyBwb3MsIGlzdGF0ZS0+Y2FjaGUgKyBwb3MgKyAxLAorCQkgICBpc3RhdGUtPmNhY2hlX25yIC0gcG9zKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFJlbW92ZSBhbGwgY2FjaGUgZW50cmllcyBtYXJrZWQgZm9yIHJlbW92YWwsIHRoYXQgaXMgd2hlcmUKKyAqIENFX1JFTU9WRSBpcyBzZXQgaW4gY2VfZmxhZ3MuICBUaGlzIGlzIG11Y2ggbW9yZSBlZmZlY3RpdmUgdGhhbgorICogY2FsbGluZyByZW1vdmVfaW5kZXhfZW50cnlfYXQoKSBmb3IgZWFjaCBlbnRyeSB0byBiZSByZW1vdmVkLgorICovCit2b2lkIHJlbW92ZV9tYXJrZWRfY2FjaGVfZW50cmllcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgaW50IGludmFsaWRhdGUpCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICoqY2VfYXJyYXkgPSBpc3RhdGUtPmNhY2hlOworCXVuc2lnbmVkIGludCBpLCBqOworCisJZm9yIChpID0gaiA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJaWYgKGNlX2FycmF5W2ldLT5jZV9mbGFncyAmIENFX1JFTU9WRSkgeworCQkJaWYgKGludmFsaWRhdGUpIHsKKwkJCQljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChpc3RhdGUsCisJCQkJCQkJICAgY2VfYXJyYXlbaV0tPm5hbWUpOworCQkJCXVudHJhY2tlZF9jYWNoZV9yZW1vdmVfZnJvbV9pbmRleChpc3RhdGUsCisJCQkJCQkJCSAgY2VfYXJyYXlbaV0tPm5hbWUpOworCQkJfQorCQkJcmVtb3ZlX25hbWVfaGFzaChpc3RhdGUsIGNlX2FycmF5W2ldKTsKKwkJCXNhdmVfb3JfZnJlZV9pbmRleF9lbnRyeShpc3RhdGUsIGNlX2FycmF5W2ldKTsKKwkJfQorCQllbHNlCisJCQljZV9hcnJheVtqKytdID0gY2VfYXJyYXlbaV07CisJfQorCWlmIChqID09IGlzdGF0ZS0+Y2FjaGVfbnIpCisJCXJldHVybjsKKwlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gQ0VfRU5UUllfUkVNT1ZFRDsKKwlpc3RhdGUtPmNhY2hlX25yID0gajsKK30KKworaW50IHJlbW92ZV9maWxlX2Zyb21faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgcGF0aCwgc3RybGVuKHBhdGgpKTsKKwlpZiAocG9zIDwgMCkKKwkJcG9zID0gLXBvcy0xOworCWNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKGlzdGF0ZSwgcGF0aCk7CisJdW50cmFja2VkX2NhY2hlX3JlbW92ZV9mcm9tX2luZGV4KGlzdGF0ZSwgcGF0aCk7CisJd2hpbGUgKHBvcyA8IGlzdGF0ZS0+Y2FjaGVfbnIgJiYgIXN0cmNtcChpc3RhdGUtPmNhY2hlW3Bvc10tPm5hbWUsIHBhdGgpKQorCQlyZW1vdmVfaW5kZXhfZW50cnlfYXQoaXN0YXRlLCBwb3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfbmFtZShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbmFtZWxlbikKK3sKKwlyZXR1cm4gbmFtZWxlbiAhPSBjZV9uYW1lbGVuKGNlKSB8fCBtZW1jbXAocGF0aCwgY2UtPm5hbWUsIG5hbWVsZW4pOworfQorCitzdGF0aWMgaW50IGluZGV4X25hbWVfcG9zX2Fsc29fdW5tZXJnZWQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJY29uc3QgY2hhciAqcGF0aCwgaW50IG5hbWVsZW4pCit7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgcGF0aCwgbmFtZWxlbik7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWlmIChwb3MgPj0gMCkKKwkJcmV0dXJuIHBvczsKKworCS8qIG1heWJlIHVubWVyZ2VkPyAqLworCXBvcyA9IC0xIC0gcG9zOworCWlmIChwb3MgPj0gaXN0YXRlLT5jYWNoZV9uciB8fAorCQkJY29tcGFyZV9uYW1lKChjZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zXSksIHBhdGgsIG5hbWVsZW4pKQorCQlyZXR1cm4gLTE7CisKKwkvKiBvcmRlciBvZiBwcmVmZXJlbmNlOiBzdGFnZSAyLCAxLCAzICovCisJaWYgKGNlX3N0YWdlKGNlKSA9PSAxICYmIHBvcyArIDEgPCBpc3RhdGUtPmNhY2hlX25yICYmCisJCQljZV9zdGFnZSgoY2UgPSBpc3RhdGUtPmNhY2hlW3BvcyArIDFdKSkgPT0gMiAmJgorCQkJIWNvbXBhcmVfbmFtZShjZSwgcGF0aCwgbmFtZWxlbikpCisJCXBvcysrOworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBpbnQgZGlmZmVyZW50X25hbWUoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IGNhY2hlX2VudHJ5ICphbGlhcykKK3sKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7CisJcmV0dXJuIGNlX25hbWVsZW4oYWxpYXMpICE9IGxlbiB8fCBtZW1jbXAoY2UtPm5hbWUsIGFsaWFzLT5uYW1lLCBsZW4pOworfQorCisvKgorICogSWYgd2UgYWRkIGEgZmlsZW5hbWUgdGhhdCBhbGlhc2VzIGluIHRoZSBjYWNoZSwgd2Ugd2lsbCB1c2UgdGhlCisgKiBuYW1lIHRoYXQgd2UgYWxyZWFkeSBoYXZlIC0gYnV0IHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHRoZSBzYW1lCisgKiBhbGlhcyB0d2ljZSwgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhhdCB0aGVyZSB3ZXJlIGFjdHVhbGx5IHR3bworICogZGlmZmVyZW50IGZpbGVzIHdpdGggYWxpYXNpbmcgbmFtZXMhCisgKgorICogU28gd2UgdXNlIHRoZSBDRV9BRERFRCBmbGFnIHRvIHZlcmlmeSB0aGF0IHRoZSBhbGlhcyB3YXMgYW4gb2xkCisgKiBvbmUgYmVmb3JlIHdlIGFjY2VwdCBpdCBhcworICovCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpjcmVhdGVfYWxpYXNfY2Uoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCSAgIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJCSAgIHN0cnVjdCBjYWNoZV9lbnRyeSAqYWxpYXMpCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKm5ld19lbnRyeTsKKworCWlmIChhbGlhcy0+Y2VfZmxhZ3MgJiBDRV9BRERFRCkKKwkJZGllKF8oIndpbGwgbm90IGFkZCBmaWxlIGFsaWFzICclcycgKCclcycgYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgpIiksCisJCSAgICBjZS0+bmFtZSwgYWxpYXMtPm5hbWUpOworCisJLyogT2ssIGNyZWF0ZSB0aGUgbmV3IGVudHJ5IHVzaW5nIHRoZSBuYW1lIG9mIHRoZSBleGlzdGluZyBhbGlhcyAqLworCWxlbiA9IGNlX25hbWVsZW4oYWxpYXMpOworCW5ld19lbnRyeSA9IG1ha2VfZW1wdHlfY2FjaGVfZW50cnkoaXN0YXRlLCBsZW4pOworCW1lbWNweShuZXdfZW50cnktPm5hbWUsIGFsaWFzLT5uYW1lLCBsZW4pOworCWNvcHlfY2FjaGVfZW50cnkobmV3X2VudHJ5LCBjZSk7CisJc2F2ZV9vcl9mcmVlX2luZGV4X2VudHJ5KGlzdGF0ZSwgY2UpOworCXJldHVybiBuZXdfZW50cnk7Cit9CisKK3ZvaWQgc2V0X29iamVjdF9uYW1lX2Zvcl9pbnRlbnRfdG9fYWRkX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaWYgKHdyaXRlX29iamVjdF9maWxlKCIiLCAwLCBibG9iX3R5cGUsICZvaWQpKQorCQlkaWUoXygiY2Fubm90IGNyZWF0ZSBhbiBlbXB0eSBibG9iIGluIHRoZSBvYmplY3QgZGF0YWJhc2UiKSk7CisJb2lkY3B5KCZjZS0+b2lkLCAmb2lkKTsKK30KKworaW50IGFkZF90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKnN0LCBpbnQgZmxhZ3MpCit7CisJaW50IG5hbWVsZW4sIHdhc19zYW1lOworCW1vZGVfdCBzdF9tb2RlID0gc3QtPnN0X21vZGU7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgKmFsaWFzID0gTlVMTDsKKwl1bnNpZ25lZCBjZV9vcHRpb24gPSBDRV9NQVRDSF9JR05PUkVfVkFMSUR8Q0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUV8Q0VfTUFUQ0hfUkFDWV9JU19ESVJUWTsKKwlpbnQgdmVyYm9zZSA9IGZsYWdzICYgKEFERF9DQUNIRV9WRVJCT1NFIHwgQUREX0NBQ0hFX1BSRVRFTkQpOworCWludCBwcmV0ZW5kID0gZmxhZ3MgJiBBRERfQ0FDSEVfUFJFVEVORDsKKwlpbnQgaW50ZW50X29ubHkgPSBmbGFncyAmIEFERF9DQUNIRV9JTlRFTlQ7CisJaW50IGFkZF9vcHRpb24gPSAoQUREX0NBQ0hFX09LX1RPX0FERHxBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRXwKKwkJCSAgKGludGVudF9vbmx5ID8gQUREX0NBQ0hFX05FV19PTkxZIDogMCkpOworCWludCBoYXNoX2ZsYWdzID0gSEFTSF9XUklURV9PQkpFQ1Q7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlpZiAoZmxhZ3MgJiBBRERfQ0FDSEVfUkVOT1JNQUxJWkUpCisJCWhhc2hfZmxhZ3MgfD0gSEFTSF9SRU5PUk1BTElaRTsKKworCWlmICghU19JU1JFRyhzdF9tb2RlKSAmJiAhU19JU0xOSyhzdF9tb2RlKSAmJiAhU19JU0RJUihzdF9tb2RlKSkKKwkJcmV0dXJuIGVycm9yKF8oIiVzOiBjYW4gb25seSBhZGQgcmVndWxhciBmaWxlcywgc3ltYm9saWMgbGlua3Mgb3IgZ2l0LWRpcmVjdG9yaWVzIiksIHBhdGgpOworCisJbmFtZWxlbiA9IHN0cmxlbihwYXRoKTsKKwlpZiAoU19JU0RJUihzdF9tb2RlKSkgeworCQlpZiAocmVzb2x2ZV9naXRsaW5rX3JlZihwYXRoLCAiSEVBRCIsICZvaWQpIDwgMCkKKwkJCXJldHVybiBlcnJvcihfKCInJXMnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiKSwgcGF0aCk7CisJCXdoaWxlIChuYW1lbGVuICYmIHBhdGhbbmFtZWxlbi0xXSA9PSAnLycpCisJCQluYW1lbGVuLS07CisJfQorCWNlID0gbWFrZV9lbXB0eV9jYWNoZV9lbnRyeShpc3RhdGUsIG5hbWVsZW4pOworCW1lbWNweShjZS0+bmFtZSwgcGF0aCwgbmFtZWxlbik7CisJY2UtPmNlX25hbWVsZW4gPSBuYW1lbGVuOworCWlmICghaW50ZW50X29ubHkpCisJCWZpbGxfc3RhdF9jYWNoZV9pbmZvKGlzdGF0ZSwgY2UsIHN0KTsKKwllbHNlCisJCWNlLT5jZV9mbGFncyB8PSBDRV9JTlRFTlRfVE9fQUREOworCisKKwlpZiAodHJ1c3RfZXhlY3V0YWJsZV9iaXQgJiYgaGFzX3N5bWxpbmtzKSB7CisJCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUoc3RfbW9kZSk7CisJfSBlbHNlIHsKKwkJLyogSWYgdGhlcmUgaXMgYW4gZXhpc3RpbmcgZW50cnksIHBpY2sgdGhlIG1vZGUgYml0cyBhbmQgdHlwZQorCQkgKiBmcm9tIGl0LCBvdGhlcndpc2UgYXNzdW1lIHVuZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCisJCSAqLworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmVudDsKKwkJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zX2Fsc29fdW5tZXJnZWQoaXN0YXRlLCBwYXRoLCBuYW1lbGVuKTsKKworCQllbnQgPSAoMCA8PSBwb3MpID8gaXN0YXRlLT5jYWNoZVtwb3NdIDogTlVMTDsKKwkJY2UtPmNlX21vZGUgPSBjZV9tb2RlX2Zyb21fc3RhdChlbnQsIHN0X21vZGUpOworCX0KKworCS8qIFdoZW4gY29yZS5pZ25vcmVjYXNlPXRydWUsIGRldGVybWluZSBpZiBhIGRpcmVjdG9yeSBvZiB0aGUgc2FtZSBuYW1lIGJ1dCBkaWZmZXJpbmcKKwkgKiBjYXNlIGFscmVhZHkgZXhpc3RzIHdpdGhpbiB0aGUgR2l0IHJlcG9zaXRvcnkuICBJZiBpdCBkb2VzLCBlbnN1cmUgdGhlIGRpcmVjdG9yeQorCSAqIGNhc2Ugb2YgdGhlIGZpbGUgYmVpbmcgYWRkZWQgdG8gdGhlIHJlcG9zaXRvcnkgbWF0Y2hlcyAoaXMgZm9sZGVkIGludG8pIHRoZSBleGlzdGluZworCSAqIGVudHJ5J3MgZGlyZWN0b3J5IGNhc2UuCisJICovCisJaWYgKGlnbm9yZV9jYXNlKSB7CisJCWFkanVzdF9kaXJuYW1lX2Nhc2UoaXN0YXRlLCBjZS0+bmFtZSk7CisJfQorCWlmICghKGZsYWdzICYgQUREX0NBQ0hFX1JFTk9STUFMSVpFKSkgeworCQlhbGlhcyA9IGluZGV4X2ZpbGVfZXhpc3RzKGlzdGF0ZSwgY2UtPm5hbWUsCisJCQkJCSAgY2VfbmFtZWxlbihjZSksIGlnbm9yZV9jYXNlKTsKKwkJaWYgKGFsaWFzICYmCisJCSAgICAhY2Vfc3RhZ2UoYWxpYXMpICYmCisJCSAgICAhaWVfbWF0Y2hfc3RhdChpc3RhdGUsIGFsaWFzLCBzdCwgY2Vfb3B0aW9uKSkgeworCQkJLyogTm90aGluZyBjaGFuZ2VkLCByZWFsbHkgKi8KKwkJCWlmICghU19JU0dJVExJTksoYWxpYXMtPmNlX21vZGUpKQorCQkJCWNlX21hcmtfdXB0b2RhdGUoYWxpYXMpOworCQkJYWxpYXMtPmNlX2ZsYWdzIHw9IENFX0FEREVEOworCisJCQlkaXNjYXJkX2NhY2hlX2VudHJ5KGNlKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCWlmICghaW50ZW50X29ubHkpIHsKKwkJaWYgKGluZGV4X3BhdGgoaXN0YXRlLCAmY2UtPm9pZCwgcGF0aCwgc3QsIGhhc2hfZmxhZ3MpKSB7CisJCQlkaXNjYXJkX2NhY2hlX2VudHJ5KGNlKTsKKwkJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gaW5kZXggZmlsZSAnJXMnIiksIHBhdGgpOworCQl9CisJfSBlbHNlCisJCXNldF9vYmplY3RfbmFtZV9mb3JfaW50ZW50X3RvX2FkZF9lbnRyeShjZSk7CisKKwlpZiAoaWdub3JlX2Nhc2UgJiYgYWxpYXMgJiYgZGlmZmVyZW50X25hbWUoY2UsIGFsaWFzKSkKKwkJY2UgPSBjcmVhdGVfYWxpYXNfY2UoaXN0YXRlLCBjZSwgYWxpYXMpOworCWNlLT5jZV9mbGFncyB8PSBDRV9BRERFRDsKKworCS8qIEl0IHdhcyBzdXNwZWN0ZWQgdG8gYmUgcmFjaWx5IGNsZWFuLCBidXQgaXQgdHVybnMgb3V0IHRvIGJlIE9rICovCisJd2FzX3NhbWUgPSAoYWxpYXMgJiYKKwkJICAgICFjZV9zdGFnZShhbGlhcykgJiYKKwkJICAgIG9pZGVxKCZhbGlhcy0+b2lkLCAmY2UtPm9pZCkgJiYKKwkJICAgIGNlLT5jZV9tb2RlID09IGFsaWFzLT5jZV9tb2RlKTsKKworCWlmIChwcmV0ZW5kKQorCQlkaXNjYXJkX2NhY2hlX2VudHJ5KGNlKTsKKwllbHNlIGlmIChhZGRfaW5kZXhfZW50cnkoaXN0YXRlLCBjZSwgYWRkX29wdGlvbikpIHsKKwkJZGlzY2FyZF9jYWNoZV9lbnRyeShjZSk7CisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gYWRkICclcycgdG8gaW5kZXgiKSwgcGF0aCk7CisJfQorCWlmICh2ZXJib3NlICYmICF3YXNfc2FtZSkKKwkJcHJpbnRmKCJhZGQgJyVzJ1xuIiwgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhZGRfZmlsZV90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdGF0IHN0OworCWlmIChsc3RhdChwYXRoLCAmc3QpKQorCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIHN0YXQgJyVzJyIpLCBwYXRoKTsKKwlyZXR1cm4gYWRkX3RvX2luZGV4KGlzdGF0ZSwgcGF0aCwgJnN0LCBmbGFncyk7Cit9CisKK3N0cnVjdCBjYWNoZV9lbnRyeSAqbWFrZV9lbXB0eV9jYWNoZV9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gbWVtX3Bvb2xfX2NlX2NhbGxvYyhmaW5kX21lbV9wb29sKGlzdGF0ZSksIGxlbik7Cit9CisKK3N0cnVjdCBjYWNoZV9lbnRyeSAqbWFrZV9lbXB0eV90cmFuc2llbnRfY2FjaGVfZW50cnkoc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4geGNhbGxvYygxLCBjYWNoZV9lbnRyeV9zaXplKGxlbikpOworfQorCitzdHJ1Y3QgY2FjaGVfZW50cnkgKm1ha2VfY2FjaGVfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgbW9kZSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICAgICBpbnQgc3RhZ2UsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgcmVmcmVzaF9vcHRpb25zKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsICpyZXQ7CisJaW50IGxlbjsKKworCWlmICghdmVyaWZ5X3BhdGgocGF0aCwgbW9kZSkpIHsKKwkJZXJyb3IoXygiaW52YWxpZCBwYXRoICclcyciKSwgcGF0aCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwljZSA9IG1ha2VfZW1wdHlfY2FjaGVfZW50cnkoaXN0YXRlLCBsZW4pOworCisJb2lkY3B5KCZjZS0+b2lkLCBvaWQpOworCW1lbWNweShjZS0+bmFtZSwgcGF0aCwgbGVuKTsKKwljZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3Moc3RhZ2UpOworCWNlLT5jZV9uYW1lbGVuID0gbGVuOworCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobW9kZSk7CisKKwlyZXQgPSByZWZyZXNoX2NhY2hlX2VudHJ5KGlzdGF0ZSwgY2UsIHJlZnJlc2hfb3B0aW9ucyk7CisJaWYgKHJldCAhPSBjZSkKKwkJZGlzY2FyZF9jYWNoZV9lbnRyeShjZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGNhY2hlX2VudHJ5ICptYWtlX3RyYW5zaWVudF9jYWNoZV9lbnRyeSh1bnNpZ25lZCBpbnQgbW9kZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCwgaW50IHN0YWdlKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJaW50IGxlbjsKKworCWlmICghdmVyaWZ5X3BhdGgocGF0aCwgbW9kZSkpIHsKKwkJZXJyb3IoXygiaW52YWxpZCBwYXRoICclcyciKSwgcGF0aCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwljZSA9IG1ha2VfZW1wdHlfdHJhbnNpZW50X2NhY2hlX2VudHJ5KGxlbik7CisKKwlvaWRjcHkoJmNlLT5vaWQsIG9pZCk7CisJbWVtY3B5KGNlLT5uYW1lLCBwYXRoLCBsZW4pOworCWNlLT5jZV9mbGFncyA9IGNyZWF0ZV9jZV9mbGFncyhzdGFnZSk7CisJY2UtPmNlX25hbWVsZW4gPSBsZW47CisJY2UtPmNlX21vZGUgPSBjcmVhdGVfY2VfbW9kZShtb2RlKTsKKworCXJldHVybiBjZTsKK30KKworLyoKKyAqIENobW9kIGFuIGluZGV4IGVudHJ5IHdpdGggZWl0aGVyICt4IG9yIC14LgorICoKKyAqIFJldHVybnMgLTEgaWYgdGhlIGNobW9kIGZvciB0aGUgcGFydGljdWxhciBjYWNoZSBlbnRyeSBmYWlsZWQgKGlmIGl0J3MKKyAqIG5vdCBhIHJlZ3VsYXIgZmlsZSksIC0yIGlmIGFuIGludmFsaWQgZmxpcCBhcmd1bWVudCBpcyBwYXNzZWQgaW4sIDAKKyAqIG90aGVyd2lzZS4KKyAqLworaW50IGNobW9kX2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkgICAgICBjaGFyIGZsaXApCit7CisJaWYgKCFTX0lTUkVHKGNlLT5jZV9tb2RlKSkKKwkJcmV0dXJuIC0xOworCXN3aXRjaCAoZmxpcCkgeworCWNhc2UgJysnOgorCQljZS0+Y2VfbW9kZSB8PSAwMTExOworCQlicmVhazsKKwljYXNlICctJzoKKwkJY2UtPmNlX21vZGUgJj0gfjAxMTE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMjsKKwl9CisJY2FjaGVfdHJlZV9pbnZhbGlkYXRlX3BhdGgoaXN0YXRlLCBjZS0+bmFtZSk7CisJY2UtPmNlX2ZsYWdzIHw9IENFX1VQREFURV9JTl9CQVNFOworCW1hcmtfZnNtb25pdG9yX2ludmFsaWQoaXN0YXRlLCBjZSk7CisJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IENFX0VOVFJZX0NIQU5HRUQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNlX3NhbWVfbmFtZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmEsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqYikKK3sKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihhKTsKKwlyZXR1cm4gY2VfbmFtZWxlbihiKSA9PSBsZW4gJiYgIW1lbWNtcChhLT5uYW1lLCBiLT5uYW1lLCBsZW4pOworfQorCisvKgorICogV2UgZnVuZGFtZW50YWxseSBkb24ndCBsaWtlIHNvbWUgcGF0aHM6IHdlIGRvbid0IHdhbnQKKyAqIGRvdCBvciBkb3QtZG90IGFueXdoZXJlLCBhbmQgZm9yIG9idmlvdXMgcmVhc29ucyBkb24ndAorICogd2FudCB0byByZWN1cnNlIGludG8gIi5naXQiIGVpdGhlci4KKyAqCisgKiBBbHNvLCB3ZSBkb24ndCB3YW50IGRvdWJsZSBzbGFzaGVzIG9yIHNsYXNoZXMgYXQgdGhlCisgKiBlbmQgdGhhdCBjYW4gbWFrZSBwYXRobmFtZXMgYW1iaWd1b3VzLgorICovCitzdGF0aWMgaW50IHZlcmlmeV9kb3RmaWxlKGNvbnN0IGNoYXIgKnJlc3QsIHVuc2lnbmVkIG1vZGUpCit7CisJLyoKKwkgKiBUaGUgZmlyc3QgY2hhcmFjdGVyIHdhcyAnLicsIGJ1dCB0aGF0CisJICogaGFzIGFscmVhZHkgYmVlbiBkaXNjYXJkZWQsIHdlIG5vdyB0ZXN0CisJICogdGhlIHJlc3QuCisJICovCisKKwkvKiAiLiIgaXMgbm90IGFsbG93ZWQgKi8KKwlpZiAoKnJlc3QgPT0gJ1wwJyB8fCBpc19kaXJfc2VwKCpyZXN0KSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKCpyZXN0KSB7CisJLyoKKwkgKiAiLmdpdCIgZm9sbG93ZWQgYnkgTlVMIG9yIHNsYXNoIGlzIGJhZC4gTm90ZSB0aGF0IHdlIG1hdGNoCisJICogY2FzZS1pbnNlbnNpdGl2ZWx5IGhlcmUsIGV2ZW4gaWYgaWdub3JlX2Nhc2UgaXMgbm90IHNldC4KKwkgKiBUaGlzIG91dGxhd3MgIi5HSVQiIGV2ZXJ5d2hlcmUgb3V0IG9mIGFuIGFidW5kYW5jZSBvZiBjYXV0aW9uLAorCSAqIHNpbmNlIHRoZXJlJ3MgcmVhbGx5IG5vIGdvb2QgcmVhc29uIHRvIGFsbG93IGl0LgorCSAqCisJICogT25jZSB3ZSd2ZSBzZWVuICIuZ2l0Iiwgd2UgY2FuIGFsc28gZmluZCAiLmdpdG1vZHVsZXMiLCBldGMgKGFsc28KKwkgKiBjYXNlLWluc2Vuc2l0aXZlbHkpLgorCSAqLworCWNhc2UgJ2cnOgorCWNhc2UgJ0cnOgorCQlpZiAocmVzdFsxXSAhPSAnaScgJiYgcmVzdFsxXSAhPSAnSScpCisJCQlicmVhazsKKwkJaWYgKHJlc3RbMl0gIT0gJ3QnICYmIHJlc3RbMl0gIT0gJ1QnKQorCQkJYnJlYWs7CisJCWlmIChyZXN0WzNdID09ICdcMCcgfHwgaXNfZGlyX3NlcChyZXN0WzNdKSkKKwkJCXJldHVybiAwOworCQlpZiAoU19JU0xOSyhtb2RlKSkgeworCQkJcmVzdCArPSAzOworCQkJaWYgKHNraXBfaXByZWZpeChyZXN0LCAibW9kdWxlcyIsICZyZXN0KSAmJgorCQkJICAgICgqcmVzdCA9PSAnXDAnIHx8IGlzX2Rpcl9zZXAoKnJlc3QpKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKwljYXNlICcuJzoKKwkJaWYgKHJlc3RbMV0gPT0gJ1wwJyB8fCBpc19kaXJfc2VwKHJlc3RbMV0pKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitpbnQgdmVyaWZ5X3BhdGgoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbW9kZSkKK3sKKwljaGFyIGMgPSAwOworCisJaWYgKGhhc19kb3NfZHJpdmVfcHJlZml4KHBhdGgpKQorCQlyZXR1cm4gMDsKKworCWlmICghaXNfdmFsaWRfcGF0aChwYXRoKSkKKwkJcmV0dXJuIDA7CisKKwlnb3RvIGluc2lkZTsKKwlmb3IgKDs7KSB7CisJCWlmICghYykKKwkJCXJldHVybiAxOworCQlpZiAoaXNfZGlyX3NlcChjKSkgeworaW5zaWRlOgorCQkJaWYgKHByb3RlY3RfaGZzKSB7CisKKwkJCQlpZiAoaXNfaGZzX2RvdGdpdChwYXRoKSkKKwkJCQkJcmV0dXJuIDA7CisJCQkJaWYgKFNfSVNMTksobW9kZSkpIHsKKwkJCQkJaWYgKGlzX2hmc19kb3RnaXRtb2R1bGVzKHBhdGgpKQorCQkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCQkJaWYgKHByb3RlY3RfbnRmcykgeworI2lmZGVmIEdJVF9XSU5ET1dTX05BVElWRQorCQkJCWlmIChjID09ICdcXCcpCisJCQkJCXJldHVybiAwOworI2VuZGlmCisJCQkJaWYgKGlzX250ZnNfZG90Z2l0KHBhdGgpKQorCQkJCQlyZXR1cm4gMDsKKwkJCQlpZiAoU19JU0xOSyhtb2RlKSkgeworCQkJCQlpZiAoaXNfbnRmc19kb3RnaXRtb2R1bGVzKHBhdGgpKQorCQkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCisJCQljID0gKnBhdGgrKzsKKwkJCWlmICgoYyA9PSAnLicgJiYgIXZlcmlmeV9kb3RmaWxlKHBhdGgsIG1vZGUpKSB8fAorCQkJICAgIGlzX2Rpcl9zZXAoYykgfHwgYyA9PSAnXDAnKQorCQkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKGMgPT0gJ1xcJyAmJiBwcm90ZWN0X250ZnMpIHsKKwkJCWlmIChpc19udGZzX2RvdGdpdChwYXRoKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmIChTX0lTTE5LKG1vZGUpKSB7CisJCQkJaWYgKGlzX250ZnNfZG90Z2l0bW9kdWxlcyhwYXRoKSkKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKworCQljID0gKnBhdGgrKzsKKwl9Cit9CisKKy8qCisgKiBEbyB3ZSBoYXZlIGFub3RoZXIgZmlsZSB0aGF0IGhhcyB0aGUgYmVnaW5uaW5nIGNvbXBvbmVudHMgYmVpbmcgYQorICogcHJvcGVyIHN1cGVyc2V0IG9mIHRoZSBuYW1lIHdlJ3JlIHRyeWluZyB0byBhZGQ/CisgKi8KK3N0YXRpYyBpbnQgaGFzX2ZpbGVfbmFtZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgcG9zLCBpbnQgb2tfdG9fcmVwbGFjZSkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7CisJaW50IHN0YWdlID0gY2Vfc3RhZ2UoY2UpOworCWNvbnN0IGNoYXIgKm5hbWUgPSBjZS0+bmFtZTsKKworCXdoaWxlIChwb3MgPCBpc3RhdGUtPmNhY2hlX25yKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqcCA9IGlzdGF0ZS0+Y2FjaGVbcG9zKytdOworCisJCWlmIChsZW4gPj0gY2VfbmFtZWxlbihwKSkKKwkJCWJyZWFrOworCQlpZiAobWVtY21wKG5hbWUsIHAtPm5hbWUsIGxlbikpCisJCQlicmVhazsKKwkJaWYgKGNlX3N0YWdlKHApICE9IHN0YWdlKQorCQkJY29udGludWU7CisJCWlmIChwLT5uYW1lW2xlbl0gIT0gJy8nKQorCQkJY29udGludWU7CisJCWlmIChwLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJCWNvbnRpbnVlOworCQlyZXR2YWwgPSAtMTsKKwkJaWYgKCFva190b19yZXBsYWNlKQorCQkJYnJlYWs7CisJCXJlbW92ZV9pbmRleF9lbnRyeV9hdChpc3RhdGUsIC0tcG9zKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKgorICogTGlrZSBzdHJjbXAoKSwgYnV0IGFsc28gcmV0dXJuIHRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGNoYW5nZS4KKyAqIElmIHN0cmluZ3MgYXJlIGVxdWFsLCByZXR1cm4gdGhlIGxlbmd0aC4KKyAqLworaW50IHN0cmNtcF9vZmZzZXQoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgKmZpcnN0X2NoYW5nZSkKK3sKKwlzaXplX3QgazsKKworCWlmICghZmlyc3RfY2hhbmdlKQorCQlyZXR1cm4gc3RyY21wKHMxLCBzMik7CisKKwlmb3IgKGsgPSAwOyBzMVtrXSA9PSBzMltrXTsgaysrKQorCQlpZiAoczFba10gPT0gJ1wwJykKKwkJCWJyZWFrOworCisJKmZpcnN0X2NoYW5nZSA9IGs7CisJcmV0dXJuICh1bnNpZ25lZCBjaGFyKXMxW2tdIC0gKHVuc2lnbmVkIGNoYXIpczJba107Cit9CisKKy8qCisgKiBEbyB3ZSBoYXZlIGFub3RoZXIgZmlsZSB3aXRoIGEgcGF0aG5hbWUgdGhhdCBpcyBhIHByb3BlcgorICogc3Vic2V0IG9mIHRoZSBuYW1lIHdlJ3JlIHRyeWluZyB0byBhZGQ/CisgKgorICogVGhhdCBpcywgaXMgdGhlcmUgYW5vdGhlciBmaWxlIGluIHRoZSBpbmRleCB3aXRoIGEgcGF0aAorICogdGhhdCBtYXRjaGVzIGEgc3ViLWRpcmVjdG9yeSBpbiB0aGUgZ2l2ZW4gZW50cnk/CisgKi8KK3N0YXRpYyBpbnQgaGFzX2Rpcl9uYW1lKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHBvcywgaW50IG9rX3RvX3JlcGxhY2UpCit7CisJaW50IHJldHZhbCA9IDA7CisJaW50IHN0YWdlID0gY2Vfc3RhZ2UoY2UpOworCWNvbnN0IGNoYXIgKm5hbWUgPSBjZS0+bmFtZTsKKwljb25zdCBjaGFyICpzbGFzaCA9IG5hbWUgKyBjZV9uYW1lbGVuKGNlKTsKKwlzaXplX3QgbGVuX2VxX2xhc3Q7CisJaW50IGNtcF9sYXN0ID0gMDsKKworCS8qCisJICogV2UgYXJlIGZyZXF1ZW50bHkgY2FsbGVkIGR1cmluZyBhbiBpdGVyYXRpb24gb24gYSBzb3J0ZWQKKwkgKiBsaXN0IG9mIHBhdGhuYW1lcyBhbmQgd2hpbGUgYnVpbGRpbmcgYSBuZXcgaW5kZXguICBUaGVyZWZvcmUsCisJICogdGhlcmUgaXMgYSBoaWdoIHByb2JhYmlsaXR5IHRoYXQgdGhpcyBlbnRyeSB3aWxsIGV2ZW50dWFsbHkKKwkgKiBiZSBhcHBlbmRlZCB0byB0aGUgaW5kZXgsIHJhdGhlciB0aGFuIGluc2VydGVkIGluIHRoZSBtaWRkbGUuCisJICogSWYgd2UgY2FuIGNvbmZpcm0gdGhhdCwgd2UgY2FuIGF2b2lkIGJpbmFyeSBzZWFyY2hlcyBvbiB0aGUKKwkgKiBjb21wb25lbnRzIG9mIHRoZSBwYXRobmFtZS4KKwkgKgorCSAqIENvbXBhcmUgdGhlIGVudHJ5J3MgZnVsbCBwYXRoIHdpdGggdGhlIGxhc3QgcGF0aCBpbiB0aGUgaW5kZXguCisJICovCisJaWYgKGlzdGF0ZS0+Y2FjaGVfbnIgPiAwKSB7CisJCWNtcF9sYXN0ID0gc3RyY21wX29mZnNldChuYW1lLAorCQkJaXN0YXRlLT5jYWNoZVtpc3RhdGUtPmNhY2hlX25yIC0gMV0tPm5hbWUsCisJCQkmbGVuX2VxX2xhc3QpOworCQlpZiAoY21wX2xhc3QgPiAwKSB7CisJCQlpZiAobGVuX2VxX2xhc3QgPT0gMCkgeworCQkJCS8qCisJCQkJICogVGhlIGVudHJ5IHNvcnRzIEFGVEVSIHRoZSBsYXN0IG9uZSBpbiB0aGUKKwkJCQkgKiBpbmRleCBhbmQgdGhlaXIgcGF0aHMgaGF2ZSBubyBjb21tb24gcHJlZml4LAorCQkJCSAqIHNvIHRoZXJlIGNhbm5vdCBiZSBhIEYvRCBjb25mbGljdC4KKwkJCQkgKi8KKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBlbnRyeSBzb3J0cyBBRlRFUiB0aGUgbGFzdCBvbmUgaW4gdGhlCisJCQkJICogaW5kZXgsIGJ1dCBoYXMgYSBjb21tb24gcHJlZml4LiAgRmFsbCB0aHJvdWdoCisJCQkJICogdG8gdGhlIGxvb3AgYmVsb3cgdG8gZGlzZWN0IHRoZSBlbnRyeSdzIHBhdGgKKwkJCQkgKiBhbmQgc2VlIHdoZXJlIHRoZSBkaWZmZXJlbmNlIGlzLgorCQkJCSAqLworCQkJfQorCQl9IGVsc2UgaWYgKGNtcF9sYXN0ID09IDApIHsKKwkJCS8qCisJCQkgKiBUaGUgZW50cnkgZXhhY3RseSBtYXRjaGVzIHRoZSBsYXN0IG9uZSBpbiB0aGUKKwkJCSAqIGluZGV4LCBidXQgYmVjYXVzZSBvZiBtdWx0aXBsZSBzdGFnZSBhbmQgQ0VfUkVNT1ZFCisJCQkgKiBpdGVtcywgd2UgZmFsbCB0aHJvdWdoIGFuZCBsZXQgdGhlIHJlZ3VsYXIgc2VhcmNoCisJCQkgKiBjb2RlIGhhbmRsZSBpdC4KKwkJCSAqLworCQl9CisJfQorCisJZm9yICg7OykgeworCQlzaXplX3QgbGVuOworCisJCWZvciAoOzspIHsKKwkJCWlmICgqLS1zbGFzaCA9PSAnLycpCisJCQkJYnJlYWs7CisJCQlpZiAoc2xhc2ggPD0gY2UtPm5hbWUpCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlsZW4gPSBzbGFzaCAtIG5hbWU7CisKKwkJaWYgKGNtcF9sYXN0ID4gMCkgeworCQkJLyoKKwkJCSAqIChsZW4gKyAxKSBpcyBhIGRpcmVjdG9yeSBib3VuZGFyeSAoaW5jbHVkaW5nCisJCQkgKiB0aGUgdHJhaWxpbmcgc2xhc2gpLiAgQW5kIHNpbmNlIHRoZSBsb29wIGlzCisJCQkgKiBkZWNyZW1lbnRpbmcgInNsYXNoIiwgdGhlIGZpcnN0IGl0ZXJhdGlvbiBpcworCQkJICogdGhlIGxvbmdlc3QgZGlyZWN0b3J5IHByZWZpeDsgc3Vic2VxdWVudAorCQkJICogaXRlcmF0aW9ucyBjb25zaWRlciBwYXJlbnQgZGlyZWN0b3JpZXMuCisJCQkgKi8KKworCQkJaWYgKGxlbiArIDEgPD0gbGVuX2VxX2xhc3QpIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBkaXJlY3RvcnkgcHJlZml4IChpbmNsdWRpbmcgdGhlIHRyYWlsaW5nCisJCQkJICogc2xhc2gpIGFsc28gYXBwZWFycyBhcyBhIHByZWZpeCBpbiB0aGUgbGFzdAorCQkJCSAqIGVudHJ5LCBzbyB0aGUgcmVtYWluZGVyIGNhbm5vdCBjb2xsaWRlIChiZWNhdXNlCisJCQkJICogc3RyY21wIHNhaWQgdGhlIHdob2xlIHBhdGggd2FzIGdyZWF0ZXIpLgorCQkJCSAqCisJCQkJICogRVE6IGxhc3Q6IHh4eC9BCisJCQkJICogICAgIHRoaXM6IHh4eC9CCisJCQkJICoKKwkJCQkgKiBMVDogbGFzdDogeHh4L2ZpbGVfQQorCQkJCSAqICAgICB0aGlzOiB4eHgvZmlsZV9CCisJCQkJICovCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCX0KKworCQkJaWYgKGxlbiA+IGxlbl9lcV9sYXN0KSB7CisJCQkJLyoKKwkJCQkgKiBUaGlzIHBhcnQgb2YgdGhlIGRpcmVjdG9yeSBwcmVmaXggKGV4Y2x1ZGluZworCQkJCSAqIHRoZSB0cmFpbGluZyBzbGFzaCkgaXMgbG9uZ2VyIHRoYW4gdGhlIGtub3duCisJCQkJICogZXF1YWwgcG9ydGlvbnMsIHNvIHRoaXMgc3ViLWRpcmVjdG9yeSBjYW5ub3QKKwkJCQkgKiBjb2xsaWRlIHdpdGggYSBmaWxlLgorCQkJCSAqCisJCQkJICogR1Q6IGxhc3Q6IHh4eEEKKwkJCQkgKiAgICAgdGhpczogeHh4Qi9maWxlCisJCQkJICovCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCX0KKworCQkJaWYgKGlzdGF0ZS0+Y2FjaGVfbnIgPiAwICYmCisJCQkJY2VfbmFtZWxlbihpc3RhdGUtPmNhY2hlW2lzdGF0ZS0+Y2FjaGVfbnIgLSAxXSkgPiBsZW4pIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBkaXJlY3RvcnkgcHJlZml4IGxpbmVzIHVwIHdpdGggcGFydCBvZgorCQkJCSAqIGEgbG9uZ2VyIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUsIGJ1dCBzb3J0cworCQkJCSAqIGFmdGVyIGl0LCBzbyB0aGlzIHN1Yi1kaXJlY3RvcnkgY2Fubm90CisJCQkJICogY29sbGlkZSB3aXRoIGEgZmlsZS4KKwkJCQkgKgorCQkJCSAqIGxhc3Q6IHh4eC95eS1maWxlIChiZWNhdXNlICctJyBzb3J0cyBiZWZvcmUgJy8nKQorCQkJCSAqIHRoaXM6IHh4eC95eS9hYmMKKwkJCQkgKi8KKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJfQorCisJCQkvKgorCQkJICogVGhpcyBpcyBhIHBvc3NpYmxlIGNvbGxpc2lvbi4gRmFsbCB0aHJvdWdoIGFuZAorCQkJICogbGV0IHRoZSByZWd1bGFyIHNlYXJjaCBjb2RlIGhhbmRsZSBpdC4KKwkJCSAqCisJCQkgKiBsYXN0OiB4eHgKKwkJCSAqIHRoaXM6IHh4eC9maWxlCisJCQkgKi8KKwkJfQorCisJCXBvcyA9IGluZGV4X25hbWVfc3RhZ2VfcG9zKGlzdGF0ZSwgbmFtZSwgbGVuLCBzdGFnZSk7CisJCWlmIChwb3MgPj0gMCkgeworCQkJLyoKKwkJCSAqIEZvdW5kIG9uZSwgYnV0IG5vdCBzbyBmYXN0LiAgVGhpcyBjb3VsZAorCQkJICogYmUgYSBtYXJrZXIgdGhhdCBzYXlzICJJIHdhcyBoZXJlLCBidXQKKwkJCSAqIEkgYW0gYmVpbmcgcmVtb3ZlZCIuICBTdWNoIGFuIGVudHJ5IGlzCisJCQkgKiBub3QgYSBwYXJ0IG9mIHRoZSByZXN1bHRpbmcgdHJlZSwgYW5kCisJCQkgKiBpdCBpcyBPayB0byBoYXZlIGEgZGlyZWN0b3J5IGF0IHRoZSBzYW1lCisJCQkgKiBwYXRoLgorCQkJICovCisJCQlpZiAoIShpc3RhdGUtPmNhY2hlW3Bvc10tPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKSkgeworCQkJCXJldHZhbCA9IC0xOworCQkJCWlmICghb2tfdG9fcmVwbGFjZSkKKwkJCQkJYnJlYWs7CisJCQkJcmVtb3ZlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgcG9zKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQllbHNlCisJCQlwb3MgPSAtcG9zLTE7CisKKwkJLyoKKwkJICogVHJpdmlhbCBvcHRpbWl6YXRpb246IGlmIHdlIGZpbmQgYW4gZW50cnkgdGhhdAorCQkgKiBhbHJlYWR5IG1hdGNoZXMgdGhlIHN1Yi1kaXJlY3RvcnksIHRoZW4gd2Uga25vdworCQkgKiB3ZSdyZSBvaywgYW5kIHdlIGNhbiBleGl0LgorCQkgKi8KKwkJd2hpbGUgKHBvcyA8IGlzdGF0ZS0+Y2FjaGVfbnIpIHsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqcCA9IGlzdGF0ZS0+Y2FjaGVbcG9zXTsKKwkJCWlmICgoY2VfbmFtZWxlbihwKSA8PSBsZW4pIHx8CisJCQkgICAgKHAtPm5hbWVbbGVuXSAhPSAnLycpIHx8CisJCQkgICAgbWVtY21wKHAtPm5hbWUsIG5hbWUsIGxlbikpCisJCQkJYnJlYWs7IC8qIG5vdCBvdXIgc3ViZGlyZWN0b3J5ICovCisJCQlpZiAoY2Vfc3RhZ2UocCkgPT0gc3RhZ2UgJiYgIShwLT5jZV9mbGFncyAmIENFX1JFTU9WRSkpCisJCQkJLyoKKwkJCQkgKiBwIGlzIGF0IHRoZSBzYW1lIHN0YWdlIGFzIG91ciBlbnRyeSwgYW5kCisJCQkJICogaXMgYSBzdWJkaXJlY3Rvcnkgb2Ygd2hhdCB3ZSBhcmUgbG9va2luZworCQkJCSAqIGF0LCBzbyB3ZSBjYW5ub3QgaGF2ZSBjb25mbGljdHMgYXQgb3VyCisJCQkJICogbGV2ZWwgb3IgYW55dGhpbmcgc2hvcnRlci4KKwkJCQkgKi8KKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJcG9zKys7CisJCX0KKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogV2UgbWF5IGJlIGluIGEgc2l0dWF0aW9uIHdoZXJlIHdlIGFscmVhZHkgaGF2ZSBwYXRoL2ZpbGUgYW5kIHBhdGgKKyAqIGlzIGJlaW5nIGFkZGVkLCBvciB3ZSBhbHJlYWR5IGhhdmUgcGF0aCBhbmQgcGF0aC9maWxlIGlzIGJlaW5nCisgKiBhZGRlZC4gIEVpdGhlciBvbmUgd291bGQgcmVzdWx0IGluIGEgbm9uc2Vuc2UgdHJlZSB0aGF0IGhhcyBwYXRoCisgKiB0d2ljZSB3aGVuIGdpdC13cml0ZS10cmVlIHRyaWVzIHRvIHdyaXRlIGl0IG91dC4gIFByZXZlbnQgaXQuCisgKgorICogSWYgb2stdG8tcmVwbGFjZSBpcyBzcGVjaWZpZWQsIHdlIHJlbW92ZSB0aGUgY29uZmxpY3RpbmcgZW50cmllcworICogZnJvbSB0aGUgY2FjaGUgc28gdGhlIGNhbGxlciBzaG91bGQgcmVjb21wdXRlIHRoZSBpbnNlcnQgcG9zaXRpb24uCisgKiBXaGVuIHRoaXMgaGFwcGVucywgd2UgcmV0dXJuIG5vbi16ZXJvLgorICovCitzdGF0aWMgaW50IGNoZWNrX2ZpbGVfZGlyZWN0b3J5X2NvbmZsaWN0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQkgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkJIGludCBwb3MsIGludCBva190b19yZXBsYWNlKQoreworCWludCByZXR2YWw7CisKKwkvKgorCSAqIFdoZW4gY2UgaXMgYW4gIkkgYW0gZ29pbmcgYXdheSIgZW50cnksIHdlIGFsbG93IGl0IHRvIGJlIGFkZGVkCisJICovCisJaWYgKGNlLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFdlIGNoZWNrIGlmIHRoZSBwYXRoIGlzIGEgc3ViLXBhdGggb2YgYSBzdWJzZXF1ZW50IHBhdGhuYW1lCisJICogZmlyc3QsIHNpbmNlIHJlbW92aW5nIHRob3NlIHdpbGwgbm90IGNoYW5nZSB0aGUgcG9zaXRpb24KKwkgKiBpbiB0aGUgYXJyYXkuCisJICovCisJcmV0dmFsID0gaGFzX2ZpbGVfbmFtZShpc3RhdGUsIGNlLCBwb3MsIG9rX3RvX3JlcGxhY2UpOworCisJLyoKKwkgKiBUaGVuIGNoZWNrIGlmIHRoZSBwYXRoIG1pZ2h0IGhhdmUgYSBjbGFzaGluZyBzdWItZGlyZWN0b3J5CisJICogYmVmb3JlIGl0LgorCSAqLworCXJldHVybiByZXR2YWwgKyBoYXNfZGlyX25hbWUoaXN0YXRlLCBjZSwgcG9zLCBva190b19yZXBsYWNlKTsKK30KKworc3RhdGljIGludCBhZGRfaW5kZXhfZW50cnlfd2l0aF9jaGVjayhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IG9wdGlvbikKK3sKKwlpbnQgcG9zOworCWludCBva190b19hZGQgPSBvcHRpb24gJiBBRERfQ0FDSEVfT0tfVE9fQUREOworCWludCBva190b19yZXBsYWNlID0gb3B0aW9uICYgQUREX0NBQ0hFX09LX1RPX1JFUExBQ0U7CisJaW50IHNraXBfZGZfY2hlY2sgPSBvcHRpb24gJiBBRERfQ0FDSEVfU0tJUF9ERkNIRUNLOworCWludCBuZXdfb25seSA9IG9wdGlvbiAmIEFERF9DQUNIRV9ORVdfT05MWTsKKworCWlmICghKG9wdGlvbiAmIEFERF9DQUNIRV9LRUVQX0NBQ0hFX1RSRUUpKQorCQljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChpc3RhdGUsIGNlLT5uYW1lKTsKKworCS8qCisJICogSWYgdGhpcyBlbnRyeSdzIHBhdGggc29ydHMgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGluZGV4LAorCSAqIHdlIGNhbiBhdm9pZCBzZWFyY2hpbmcgZm9yIGl0LgorCSAqLworCWlmIChpc3RhdGUtPmNhY2hlX25yID4gMCAmJgorCQlzdHJjbXAoY2UtPm5hbWUsIGlzdGF0ZS0+Y2FjaGVbaXN0YXRlLT5jYWNoZV9uciAtIDFdLT5uYW1lKSA+IDApCisJCXBvcyA9IGluZGV4X3Bvc190b19pbnNlcnRfcG9zKGlzdGF0ZS0+Y2FjaGVfbnIpOworCWVsc2UKKwkJcG9zID0gaW5kZXhfbmFtZV9zdGFnZV9wb3MoaXN0YXRlLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIGNlX3N0YWdlKGNlKSk7CisKKwkvKiBleGlzdGluZyBtYXRjaD8gSnVzdCByZXBsYWNlIGl0LiAqLworCWlmIChwb3MgPj0gMCkgeworCQlpZiAoIW5ld19vbmx5KQorCQkJcmVwbGFjZV9pbmRleF9lbnRyeShpc3RhdGUsIHBvcywgY2UpOworCQlyZXR1cm4gMDsKKwl9CisJcG9zID0gLXBvcy0xOworCisJaWYgKCEob3B0aW9uICYgQUREX0NBQ0hFX0tFRVBfQ0FDSEVfVFJFRSkpCisJCXVudHJhY2tlZF9jYWNoZV9hZGRfdG9faW5kZXgoaXN0YXRlLCBjZS0+bmFtZSk7CisKKwkvKgorCSAqIEluc2VydGluZyBhIG1lcmdlZCBlbnRyeSAoInN0YWdlIDAiKSBpbnRvIHRoZSBpbmRleAorCSAqIHdpbGwgYWx3YXlzIHJlcGxhY2UgYWxsIG5vbi1tZXJnZWQgZW50cmllcy4uCisJICovCisJaWYgKHBvcyA8IGlzdGF0ZS0+Y2FjaGVfbnIgJiYgY2Vfc3RhZ2UoY2UpID09IDApIHsKKwkJd2hpbGUgKGNlX3NhbWVfbmFtZShpc3RhdGUtPmNhY2hlW3Bvc10sIGNlKSkgeworCQkJb2tfdG9fYWRkID0gMTsKKwkJCWlmICghcmVtb3ZlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgcG9zKSkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghb2tfdG9fYWRkKQorCQlyZXR1cm4gLTE7CisJaWYgKCF2ZXJpZnlfcGF0aChjZS0+bmFtZSwgY2UtPmNlX21vZGUpKQorCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCBwYXRoICclcyciKSwgY2UtPm5hbWUpOworCisJaWYgKCFza2lwX2RmX2NoZWNrICYmCisJICAgIGNoZWNrX2ZpbGVfZGlyZWN0b3J5X2NvbmZsaWN0KGlzdGF0ZSwgY2UsIHBvcywgb2tfdG9fcmVwbGFjZSkpIHsKKwkJaWYgKCFva190b19yZXBsYWNlKQorCQkJcmV0dXJuIGVycm9yKF8oIiclcycgYXBwZWFycyBhcyBib3RoIGEgZmlsZSBhbmQgYXMgYSBkaXJlY3RvcnkiKSwKKwkJCQkgICAgIGNlLT5uYW1lKTsKKwkJcG9zID0gaW5kZXhfbmFtZV9zdGFnZV9wb3MoaXN0YXRlLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIGNlX3N0YWdlKGNlKSk7CisJCXBvcyA9IC1wb3MtMTsKKwl9CisJcmV0dXJuIHBvcyArIDE7Cit9CisKK2ludCBhZGRfaW5kZXhfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBvcHRpb24pCit7CisJaW50IHBvczsKKworCWlmIChvcHRpb24gJiBBRERfQ0FDSEVfSlVTVF9BUFBFTkQpCisJCXBvcyA9IGlzdGF0ZS0+Y2FjaGVfbnI7CisJZWxzZSB7CisJCWludCByZXQ7CisJCXJldCA9IGFkZF9pbmRleF9lbnRyeV93aXRoX2NoZWNrKGlzdGF0ZSwgY2UsIG9wdGlvbik7CisJCWlmIChyZXQgPD0gMCkKKwkJCXJldHVybiByZXQ7CisJCXBvcyA9IHJldCAtIDE7CisJfQorCisJLyogTWFrZSBzdXJlIHRoZSBhcnJheSBpcyBiaWcgZW5vdWdoIC4uICovCisJQUxMT0NfR1JPVyhpc3RhdGUtPmNhY2hlLCBpc3RhdGUtPmNhY2hlX25yICsgMSwgaXN0YXRlLT5jYWNoZV9hbGxvYyk7CisKKwkvKiBBZGQgaXQgaW4uLiAqLworCWlzdGF0ZS0+Y2FjaGVfbnIrKzsKKwlpZiAoaXN0YXRlLT5jYWNoZV9uciA+IHBvcyArIDEpCisJCU1PVkVfQVJSQVkoaXN0YXRlLT5jYWNoZSArIHBvcyArIDEsIGlzdGF0ZS0+Y2FjaGUgKyBwb3MsCisJCQkgICBpc3RhdGUtPmNhY2hlX25yIC0gcG9zIC0gMSk7CisJc2V0X2luZGV4X2VudHJ5KGlzdGF0ZSwgcG9zLCBjZSk7CisJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IENFX0VOVFJZX0FEREVEOworCXJldHVybiAwOworfQorCisvKgorICogInJlZnJlc2giIGRvZXMgbm90IGNhbGN1bGF0ZSBhIG5ldyBzaGExIGZpbGUgb3IgYnJpbmcgdGhlCisgKiBjYWNoZSB1cC10by1kYXRlIGZvciBtb2RlL2NvbnRlbnQgY2hhbmdlcy4gQnV0IHdoYXQgaXQKKyAqIF9kb2VzXyBkbyBpcyB0byAicmUtbWF0Y2giIHRoZSBzdGF0IGluZm9ybWF0aW9uIG9mIGEgZmlsZQorICogd2l0aCB0aGUgY2FjaGUsIHNvIHRoYXQgeW91IGNhbiByZWZyZXNoIHRoZSBjYWNoZSBmb3IgYQorICogZmlsZSB0aGF0IGhhc24ndCBiZWVuIGNoYW5nZWQgYnV0IHdoZXJlIHRoZSBzdGF0IGVudHJ5IGlzCisgKiBvdXQgb2YgZGF0ZS4KKyAqCisgKiBGb3IgZXhhbXBsZSwgeW91J2Qgd2FudCB0byBkbyB0aGlzIGFmdGVyIGRvaW5nIGEgImdpdC1yZWFkLXRyZWUiLAorICogdG8gbGluayB1cCB0aGUgc3RhdCBjYWNoZSBkZXRhaWxzIHdpdGggdGhlIHByb3BlciBmaWxlcy4KKyAqLworc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqcmVmcmVzaF9jYWNoZV9lbnQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCSAgICAgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgb3B0aW9ucywgaW50ICplcnIsCisJCQkJCSAgICAgaW50ICpjaGFuZ2VkX3JldCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKnVwZGF0ZWQ7CisJaW50IGNoYW5nZWQ7CisJaW50IHJlZnJlc2ggPSBvcHRpb25zICYgQ0VfTUFUQ0hfUkVGUkVTSDsKKwlpbnQgaWdub3JlX3ZhbGlkID0gb3B0aW9ucyAmIENFX01BVENIX0lHTk9SRV9WQUxJRDsKKwlpbnQgaWdub3JlX3NraXBfd29ya3RyZWUgPSBvcHRpb25zICYgQ0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUU7CisJaW50IGlnbm9yZV9taXNzaW5nID0gb3B0aW9ucyAmIENFX01BVENIX0lHTk9SRV9NSVNTSU5HOworCWludCBpZ25vcmVfZnNtb25pdG9yID0gb3B0aW9ucyAmIENFX01BVENIX0lHTk9SRV9GU01PTklUT1I7CisKKwlpZiAoIXJlZnJlc2ggfHwgY2VfdXB0b2RhdGUoY2UpKQorCQlyZXR1cm4gY2U7CisKKwlpZiAoIWlnbm9yZV9mc21vbml0b3IpCisJCXJlZnJlc2hfZnNtb25pdG9yKGlzdGF0ZSk7CisJLyoKKwkgKiBDRV9WQUxJRCBvciBDRV9TS0lQX1dPUktUUkVFIG1lYW5zIHRoZSB1c2VyIHByb21pc2VkIHVzCisJICogdGhhdCB0aGUgY2hhbmdlIHRvIHRoZSB3b3JrIHRyZWUgZG9lcyBub3QgbWF0dGVyIGFuZCB0b2xkCisJICogdXMgbm90IHRvIHdvcnJ5LgorCSAqLworCWlmICghaWdub3JlX3NraXBfd29ya3RyZWUgJiYgY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJY2VfbWFya191cHRvZGF0ZShjZSk7CisJCXJldHVybiBjZTsKKwl9CisJaWYgKCFpZ25vcmVfdmFsaWQgJiYgKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSkgeworCQljZV9tYXJrX3VwdG9kYXRlKGNlKTsKKwkJcmV0dXJuIGNlOworCX0KKwlpZiAoIWlnbm9yZV9mc21vbml0b3IgJiYgKGNlLT5jZV9mbGFncyAmIENFX0ZTTU9OSVRPUl9WQUxJRCkpIHsKKwkJY2VfbWFya191cHRvZGF0ZShjZSk7CisJCXJldHVybiBjZTsKKwl9CisKKwlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSkpIHsKKwkJaWYgKGlnbm9yZV9taXNzaW5nKQorCQkJcmV0dXJuIGNlOworCQlpZiAoZXJyKQorCQkJKmVyciA9IEVOT0VOVDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGxzdGF0KGNlLT5uYW1lLCAmc3QpIDwgMCkgeworCQlpZiAoaWdub3JlX21pc3NpbmcgJiYgZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuIGNlOworCQlpZiAoZXJyKQorCQkJKmVyciA9IGVycm5vOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwljaGFuZ2VkID0gaWVfbWF0Y2hfc3RhdChpc3RhdGUsIGNlLCAmc3QsIG9wdGlvbnMpOworCWlmIChjaGFuZ2VkX3JldCkKKwkJKmNoYW5nZWRfcmV0ID0gY2hhbmdlZDsKKwlpZiAoIWNoYW5nZWQpIHsKKwkJLyoKKwkJICogVGhlIHBhdGggaXMgdW5jaGFuZ2VkLiAgSWYgd2Ugd2VyZSB0b2xkIHRvIGlnbm9yZQorCQkgKiB2YWxpZCBiaXQsIHRoZW4gd2UgZGlkIHRoZSBhY3R1YWwgc3RhdCBjaGVjayBhbmQKKwkJICogZm91bmQgdGhhdCB0aGUgZW50cnkgaXMgdW5tb2RpZmllZC4gIElmIHRoZSBlbnRyeQorCQkgKiBpcyBub3QgbWFya2VkIFZBTElELCB0aGlzIGlzIHRoZSBwbGFjZSB0byBtYXJrIGl0CisJCSAqIHZhbGlkIGFnYWluLCB1bmRlciAiYXNzdW1lIHVuY2hhbmdlZCIgbW9kZS4KKwkJICovCisJCWlmIChpZ25vcmVfdmFsaWQgJiYgYXNzdW1lX3VuY2hhbmdlZCAmJgorCQkgICAgIShjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkpCisJCQk7IC8qIG1hcmsgdGhpcyBvbmUgVkFMSUQgYWdhaW4gKi8KKwkJZWxzZSB7CisJCQkvKgorCQkJICogV2UgZG8gbm90IG1hcmsgdGhlIGluZGV4IGl0c2VsZiAibW9kaWZpZWQiCisJCQkgKiBiZWNhdXNlIENFX1VQVE9EQVRFIGZsYWcgaXMgaW4tY29yZSBvbmx5OworCQkJICogd2UgYXJlIG5vdCBnb2luZyB0byB3cml0ZSB0aGlzIGNoYW5nZSBvdXQuCisJCQkgKi8KKwkJCWlmICghU19JU0dJVExJTksoY2UtPmNlX21vZGUpKSB7CisJCQkJY2VfbWFya191cHRvZGF0ZShjZSk7CisJCQkJbWFya19mc21vbml0b3JfdmFsaWQoaXN0YXRlLCBjZSk7CisJCQl9CisJCQlyZXR1cm4gY2U7CisJCX0KKwl9CisKKwlpZiAoaWVfbW9kaWZpZWQoaXN0YXRlLCBjZSwgJnN0LCBvcHRpb25zKSkgeworCQlpZiAoZXJyKQorCQkJKmVyciA9IEVJTlZBTDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdXBkYXRlZCA9IG1ha2VfZW1wdHlfY2FjaGVfZW50cnkoaXN0YXRlLCBjZV9uYW1lbGVuKGNlKSk7CisJY29weV9jYWNoZV9lbnRyeSh1cGRhdGVkLCBjZSk7CisJbWVtY3B5KHVwZGF0ZWQtPm5hbWUsIGNlLT5uYW1lLCBjZS0+Y2VfbmFtZWxlbiArIDEpOworCWZpbGxfc3RhdF9jYWNoZV9pbmZvKGlzdGF0ZSwgdXBkYXRlZCwgJnN0KTsKKwkvKgorCSAqIElmIGlnbm9yZV92YWxpZCBpcyBub3Qgc2V0LCB3ZSBzaG91bGQgbGVhdmUgQ0VfVkFMSUQgYml0CisJICogYWxvbmUuICBPdGhlcndpc2UsIHBhdGhzIG1hcmtlZCB3aXRoIC0tbm8tYXNzdW1lLXVuY2hhbmdlZAorCSAqIChpLmUuIHRoaW5ncyB0byBiZSBlZGl0ZWQpIHdpbGwgcmVhY3F1aXJlIENFX1ZBTElEIGJpdAorCSAqIGF1dG9tYXRpY2FsbHksIHdoaWNoIGlzIG5vdCByZWFsbHkgd2hhdCB3ZSB3YW50LgorCSAqLworCWlmICghaWdub3JlX3ZhbGlkICYmIGFzc3VtZV91bmNoYW5nZWQgJiYKKwkgICAgIShjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkpCisJCXVwZGF0ZWQtPmNlX2ZsYWdzICY9IH5DRV9WQUxJRDsKKworCS8qIGlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCBpcyB1cGRhdGVkIGluIHRoZSBjYWxsZXIgKi8KKwlyZXR1cm4gdXBkYXRlZDsKK30KKworc3RhdGljIHZvaWQgc2hvd19maWxlKGNvbnN0IGNoYXIgKiBmbXQsIGNvbnN0IGNoYXIgKiBuYW1lLCBpbnQgaW5fcG9yY2VsYWluLAorCQkgICAgICBpbnQgKiBmaXJzdCwgY29uc3QgY2hhciAqaGVhZGVyX21zZykKK3sKKwlpZiAoaW5fcG9yY2VsYWluICYmICpmaXJzdCAmJiBoZWFkZXJfbXNnKSB7CisJCXByaW50ZigiJXNcbiIsIGhlYWRlcl9tc2cpOworCQkqZmlyc3QgPSAwOworCX0KKwlwcmludGYoZm10LCBuYW1lKTsKK30KKworaW50IHJlcG9fcmVmcmVzaF9hbmRfd3JpdGVfaW5kZXgoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkJIHVuc2lnbmVkIGludCByZWZyZXNoX2ZsYWdzLAorCQkJCSB1bnNpZ25lZCBpbnQgd3JpdGVfZmxhZ3MsCisJCQkJIGludCBnZW50bGUsCisJCQkJIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkJIGNoYXIgKnNlZW4sIGNvbnN0IGNoYXIgKmhlYWRlcl9tc2cpCit7CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGUgPSBMT0NLX0lOSVQ7CisJaW50IGZkLCByZXQgPSAwOworCisJZmQgPSByZXBvX2hvbGRfbG9ja2VkX2luZGV4KHJlcG8sICZsb2NrX2ZpbGUsIDApOworCWlmICghZ2VudGxlICYmIGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChyZWZyZXNoX2luZGV4KHJlcG8tPmluZGV4LCByZWZyZXNoX2ZsYWdzLCBwYXRoc3BlYywgc2VlbiwgaGVhZGVyX21zZykpCisJCXJldCA9IDE7CisJaWYgKDAgPD0gZmQgJiYgd3JpdGVfbG9ja2VkX2luZGV4KHJlcG8tPmluZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSyB8IHdyaXRlX2ZsYWdzKSkKKwkJcmV0ID0gLTE7CisJcmV0dXJuIHJldDsKK30KKworCitpbnQgcmVmcmVzaF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgdW5zaWduZWQgaW50IGZsYWdzLAorCQkgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCSAgY2hhciAqc2VlbiwgY29uc3QgY2hhciAqaGVhZGVyX21zZykKK3sKKwlpbnQgaTsKKwlpbnQgaGFzX2Vycm9ycyA9IDA7CisJaW50IHJlYWxseSA9IChmbGFncyAmIFJFRlJFU0hfUkVBTExZKSAhPSAwOworCWludCBhbGxvd191bm1lcmdlZCA9IChmbGFncyAmIFJFRlJFU0hfVU5NRVJHRUQpICE9IDA7CisJaW50IHF1aWV0ID0gKGZsYWdzICYgUkVGUkVTSF9RVUlFVCkgIT0gMDsKKwlpbnQgbm90X25ldyA9IChmbGFncyAmIFJFRlJFU0hfSUdOT1JFX01JU1NJTkcpICE9IDA7CisJaW50IGlnbm9yZV9zdWJtb2R1bGVzID0gKGZsYWdzICYgUkVGUkVTSF9JR05PUkVfU1VCTU9EVUxFUykgIT0gMDsKKwlpbnQgZmlyc3QgPSAxOworCWludCBpbl9wb3JjZWxhaW4gPSAoZmxhZ3MgJiBSRUZSRVNIX0lOX1BPUkNFTEFJTik7CisJdW5zaWduZWQgaW50IG9wdGlvbnMgPSAoQ0VfTUFUQ0hfUkVGUkVTSCB8CisJCQkJKHJlYWxseSA/IENFX01BVENIX0lHTk9SRV9WQUxJRCA6IDApIHwKKwkJCQkobm90X25ldyA/IENFX01BVENIX0lHTk9SRV9NSVNTSU5HIDogMCkpOworCWNvbnN0IGNoYXIgKm1vZGlmaWVkX2ZtdDsKKwljb25zdCBjaGFyICpkZWxldGVkX2ZtdDsKKwljb25zdCBjaGFyICp0eXBlY2hhbmdlX2ZtdDsKKwljb25zdCBjaGFyICphZGRlZF9mbXQ7CisJY29uc3QgY2hhciAqdW5tZXJnZWRfZm10OworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCisJaWYgKGZsYWdzICYgUkVGUkVTSF9QUk9HUkVTUyAmJiBpc2F0dHkoMikpCisJCXByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcyhfKCJSZWZyZXNoIGluZGV4IiksCisJCQkJCQkgIGlzdGF0ZS0+Y2FjaGVfbnIpOworCisJdHJhY2VfcGVyZm9ybWFuY2VfZW50ZXIoKTsKKwltb2RpZmllZF9mbXQgICA9IGluX3BvcmNlbGFpbiA/ICJNXHQlc1xuIiA6ICIlczogbmVlZHMgdXBkYXRlXG4iOworCWRlbGV0ZWRfZm10ICAgID0gaW5fcG9yY2VsYWluID8gIkRcdCVzXG4iIDogIiVzOiBuZWVkcyB1cGRhdGVcbiI7CisJdHlwZWNoYW5nZV9mbXQgPSBpbl9wb3JjZWxhaW4gPyAiVFx0JXNcbiIgOiAiJXM6IG5lZWRzIHVwZGF0ZVxuIjsKKwlhZGRlZF9mbXQgICAgICA9IGluX3BvcmNlbGFpbiA/ICJBXHQlc1xuIiA6ICIlczogbmVlZHMgdXBkYXRlXG4iOworCXVubWVyZ2VkX2ZtdCAgID0gaW5fcG9yY2VsYWluID8gIlVcdCVzXG4iIDogIiVzOiBuZWVkcyBtZXJnZVxuIjsKKwkvKgorCSAqIFVzZSB0aGUgbXVsdGktdGhyZWFkZWQgcHJlbG9hZF9pbmRleCgpIHRvIHJlZnJlc2ggbW9zdCBvZiB0aGUKKwkgKiBjYWNoZSBlbnRyaWVzIHF1aWNrbHkgdGhlbiBpbiB0aGUgc2luZ2xlIHRocmVhZGVkIGxvb3AgYmVsb3csCisJICogd2Ugb25seSBoYXZlIHRvIGRvIHRoZSBzcGVjaWFsIGNhc2VzIHRoYXQgYXJlIGxlZnQuCisJICovCisJcHJlbG9hZF9pbmRleChpc3RhdGUsIHBhdGhzcGVjLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsICpuZXdfZW50cnk7CisJCWludCBjYWNoZV9lcnJubyA9IDA7CisJCWludCBjaGFuZ2VkID0gMDsKKwkJaW50IGZpbHRlcmVkID0gMDsKKworCQljZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWlmIChpZ25vcmVfc3VibW9kdWxlcyAmJiBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQljb250aW51ZTsKKworCQlpZiAocGF0aHNwZWMgJiYgIWNlX3BhdGhfbWF0Y2goaXN0YXRlLCBjZSwgcGF0aHNwZWMsIHNlZW4pKQorCQkJZmlsdGVyZWQgPSAxOworCisJCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJCXdoaWxlICgoaSA8IGlzdGF0ZS0+Y2FjaGVfbnIpICYmCisJCQkgICAgICAgISBzdHJjbXAoaXN0YXRlLT5jYWNoZVtpXS0+bmFtZSwgY2UtPm5hbWUpKQorCQkJCWkrKzsKKwkJCWktLTsKKwkJCWlmIChhbGxvd191bm1lcmdlZCkKKwkJCQljb250aW51ZTsKKwkJCWlmICghZmlsdGVyZWQpCisJCQkJc2hvd19maWxlKHVubWVyZ2VkX2ZtdCwgY2UtPm5hbWUsIGluX3BvcmNlbGFpbiwKKwkJCQkJICAmZmlyc3QsIGhlYWRlcl9tc2cpOworCQkJaGFzX2Vycm9ycyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChmaWx0ZXJlZCkKKwkJCWNvbnRpbnVlOworCisJCW5ld19lbnRyeSA9IHJlZnJlc2hfY2FjaGVfZW50KGlzdGF0ZSwgY2UsIG9wdGlvbnMsICZjYWNoZV9lcnJubywgJmNoYW5nZWQpOworCQlpZiAobmV3X2VudHJ5ID09IGNlKQorCQkJY29udGludWU7CisJCWlmIChwcm9ncmVzcykKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkpOworCQlpZiAoIW5ld19lbnRyeSkgeworCQkJY29uc3QgY2hhciAqZm10OworCisJCQlpZiAocmVhbGx5ICYmIGNhY2hlX2Vycm5vID09IEVJTlZBTCkgeworCQkJCS8qIElmIHdlIGFyZSBkb2luZyAtLXJlYWxseS1yZWZyZXNoIHRoYXQKKwkJCQkgKiBtZWFucyB0aGUgaW5kZXggaXMgbm90IHZhbGlkIGFueW1vcmUuCisJCQkJICovCisJCQkJY2UtPmNlX2ZsYWdzICY9IH5DRV9WQUxJRDsKKwkJCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfVVBEQVRFX0lOX0JBU0U7CisJCQkJbWFya19mc21vbml0b3JfaW52YWxpZChpc3RhdGUsIGNlKTsKKwkJCQlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gQ0VfRU5UUllfQ0hBTkdFRDsKKwkJCX0KKwkJCWlmIChxdWlldCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKGNhY2hlX2Vycm5vID09IEVOT0VOVCkKKwkJCQlmbXQgPSBkZWxldGVkX2ZtdDsKKwkJCWVsc2UgaWYgKGNlX2ludGVudF90b19hZGQoY2UpKQorCQkJCWZtdCA9IGFkZGVkX2ZtdDsgLyogbXVzdCBiZSBiZWZvcmUgb3RoZXIgY2hlY2tzICovCisJCQllbHNlIGlmIChjaGFuZ2VkICYgVFlQRV9DSEFOR0VEKQorCQkJCWZtdCA9IHR5cGVjaGFuZ2VfZm10OworCQkJZWxzZQorCQkJCWZtdCA9IG1vZGlmaWVkX2ZtdDsKKwkJCXNob3dfZmlsZShmbXQsCisJCQkJICBjZS0+bmFtZSwgaW5fcG9yY2VsYWluLCAmZmlyc3QsIGhlYWRlcl9tc2cpOworCQkJaGFzX2Vycm9ycyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJlcGxhY2VfaW5kZXhfZW50cnkoaXN0YXRlLCBpLCBuZXdfZW50cnkpOworCX0KKwlpZiAocHJvZ3Jlc3MpIHsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgaXN0YXRlLT5jYWNoZV9ucik7CisJCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwl9CisJdHJhY2VfcGVyZm9ybWFuY2VfbGVhdmUoInJlZnJlc2ggaW5kZXgiKTsKKwlyZXR1cm4gaGFzX2Vycm9yczsKK30KKworc3RydWN0IGNhY2hlX2VudHJ5ICpyZWZyZXNoX2NhY2hlX2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCQl1bnNpZ25lZCBpbnQgb3B0aW9ucykKK3sKKwlyZXR1cm4gcmVmcmVzaF9jYWNoZV9lbnQoaXN0YXRlLCBjZSwgb3B0aW9ucywgTlVMTCwgTlVMTCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJbmRleCBGaWxlIEkvTworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIElOREVYX0ZPUk1BVF9ERUZBVUxUIDMKKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfaW5kZXhfZm9ybWF0X2RlZmF1bHQoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJY2hhciAqZW52dmVyc2lvbiA9IGdldGVudigiR0lUX0lOREVYX1ZFUlNJT04iKTsKKwljaGFyICplbmRwOworCXVuc2lnbmVkIGludCB2ZXJzaW9uID0gSU5ERVhfRk9STUFUX0RFRkFVTFQ7CisKKwlpZiAoIWVudnZlcnNpb24pIHsKKwkJcHJlcGFyZV9yZXBvX3NldHRpbmdzKHIpOworCisJCWlmIChyLT5zZXR0aW5ncy5pbmRleF92ZXJzaW9uID49IDApCisJCQl2ZXJzaW9uID0gci0+c2V0dGluZ3MuaW5kZXhfdmVyc2lvbjsKKwkJaWYgKHZlcnNpb24gPCBJTkRFWF9GT1JNQVRfTEIgfHwgSU5ERVhfRk9STUFUX1VCIDwgdmVyc2lvbikgeworCQkJd2FybmluZyhfKCJpbmRleC52ZXJzaW9uIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorCQkJCSAgIlVzaW5nIHZlcnNpb24gJWkiKSwgSU5ERVhfRk9STUFUX0RFRkFVTFQpOworCQkJcmV0dXJuIElOREVYX0ZPUk1BVF9ERUZBVUxUOworCQl9CisJCXJldHVybiB2ZXJzaW9uOworCX0KKworCXZlcnNpb24gPSBzdHJ0b3VsKGVudnZlcnNpb24sICZlbmRwLCAxMCk7CisJaWYgKCplbmRwIHx8CisJICAgIHZlcnNpb24gPCBJTkRFWF9GT1JNQVRfTEIgfHwgSU5ERVhfRk9STUFUX1VCIDwgdmVyc2lvbikgeworCQl3YXJuaW5nKF8oIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorCQkJICAiVXNpbmcgdmVyc2lvbiAlaSIpLCBJTkRFWF9GT1JNQVRfREVGQVVMVCk7CisJCXZlcnNpb24gPSBJTkRFWF9GT1JNQVRfREVGQVVMVDsKKwl9CisJcmV0dXJuIHZlcnNpb247Cit9CisKKy8qCisgKiBkZXYvaW5vL3VpZC9naWQvc2l6ZSBhcmUgYWxzbyBqdXN0IHRyYWNrZWQgdG8gdGhlIGxvdyAzMiBiaXRzCisgKiBBZ2FpbiAtIHRoaXMgaXMganVzdCBhICh2ZXJ5IHN0cm9uZyBpbiBwcmFjdGljZSkgaGV1cmlzdGljIHRoYXQKKyAqIHRoZSBpbm9kZSBoYXNuJ3QgY2hhbmdlZC4KKyAqCisgKiBXZSBzYXZlIHRoZSBmaWVsZHMgaW4gYmlnLWVuZGlhbiBvcmRlciB0byBhbGxvdyB1c2luZyB0aGUKKyAqIGluZGV4IGZpbGUgb3ZlciBORlMgdHJhbnNwYXJlbnRseS4KKyAqLworc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeSB7CisJc3RydWN0IGNhY2hlX3RpbWUgY3RpbWU7CisJc3RydWN0IGNhY2hlX3RpbWUgbXRpbWU7CisJdWludDMyX3QgZGV2OworCXVpbnQzMl90IGlubzsKKwl1aW50MzJfdCBtb2RlOworCXVpbnQzMl90IHVpZDsKKwl1aW50MzJfdCBnaWQ7CisJdWludDMyX3Qgc2l6ZTsKKwkvKgorCSAqIHVuc2lnbmVkIGNoYXIgaGFzaFtoYXNoc3pdOworCSAqIHVpbnQxNl90IGZsYWdzOworCSAqIGlmIChmbGFncyAmIENFX0VYVEVOREVEKQorCSAqCXVpbnQxNl90IGZsYWdzMjsKKwkgKi8KKwl1bnNpZ25lZCBjaGFyIGRhdGFbR0lUX01BWF9SQVdTWiArIDIgKiBzaXplb2YodWludDE2X3QpXTsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9OworCisvKiBUaGVzZSBhcmUgb25seSB1c2VkIGZvciB2MyBvciBsb3dlciAqLworI2RlZmluZSBhbGlnbl9wYWRkaW5nX3NpemUoc2l6ZSwgbGVuKSAoKHNpemUgKyAobGVuKSArIDgpICYgfjcpIC0gKHNpemUgKyBsZW4pCisjZGVmaW5lIGFsaWduX2ZsZXhfbmFtZShTVFJVQ1QsbGVuKSAoKG9mZnNldG9mKHN0cnVjdCBTVFJVQ1QsZGF0YSkgKyAobGVuKSArIDgpICYgfjcpCisjZGVmaW5lIG9uZGlza19jYWNoZV9lbnRyeV9zaXplKGxlbikgYWxpZ25fZmxleF9uYW1lKG9uZGlza19jYWNoZV9lbnRyeSxsZW4pCisjZGVmaW5lIG9uZGlza19kYXRhX3NpemUoZmxhZ3MsIGxlbikgKHRoZV9oYXNoX2FsZ28tPnJhd3N6ICsgXAorCQkJCSAgICAgKChmbGFncyAmIENFX0VYVEVOREVEKSA/IDIgOiAxKSAqIHNpemVvZih1aW50MTZfdCkgKyBsZW4pCisjZGVmaW5lIG9uZGlza19kYXRhX3NpemVfbWF4KGxlbikgKG9uZGlza19kYXRhX3NpemUoQ0VfRVhURU5ERUQsIGxlbikpCisjZGVmaW5lIG9uZGlza19jZV9zaXplKGNlKSAob25kaXNrX2NhY2hlX2VudHJ5X3NpemUob25kaXNrX2RhdGFfc2l6ZSgoY2UpLT5jZV9mbGFncywgY2VfbmFtZWxlbihjZSkpKSkKKworLyogQWxsb3cgZnNjayB0byBmb3JjZSB2ZXJpZmljYXRpb24gb2YgdGhlIGluZGV4IGNoZWNrc3VtLiAqLworaW50IHZlcmlmeV9pbmRleF9jaGVja3N1bTsKKworLyogQWxsb3cgZnNjayB0byBmb3JjZSB2ZXJpZmljYXRpb24gb2YgdGhlIGNhY2hlIGVudHJ5IG9yZGVyLiAqLworaW50IHZlcmlmeV9jZV9vcmRlcjsKKworc3RhdGljIGludCB2ZXJpZnlfaGRyKGNvbnN0IHN0cnVjdCBjYWNoZV9oZWFkZXIgKmhkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWdpdF9oYXNoX2N0eCBjOworCXVuc2lnbmVkIGNoYXIgaGFzaFtHSVRfTUFYX1JBV1NaXTsKKwlpbnQgaGRyX3ZlcnNpb247CisKKwlpZiAoaGRyLT5oZHJfc2lnbmF0dXJlICE9IGh0b25sKENBQ0hFX1NJR05BVFVSRSkpCisJCXJldHVybiBlcnJvcihfKCJiYWQgc2lnbmF0dXJlIDB4JTA4eCIpLCBoZHItPmhkcl9zaWduYXR1cmUpOworCWhkcl92ZXJzaW9uID0gbnRvaGwoaGRyLT5oZHJfdmVyc2lvbik7CisJaWYgKGhkcl92ZXJzaW9uIDwgSU5ERVhfRk9STUFUX0xCIHx8IElOREVYX0ZPUk1BVF9VQiA8IGhkcl92ZXJzaW9uKQorCQlyZXR1cm4gZXJyb3IoXygiYmFkIGluZGV4IHZlcnNpb24gJWQiKSwgaGRyX3ZlcnNpb24pOworCisJaWYgKCF2ZXJpZnlfaW5kZXhfY2hlY2tzdW0pCisJCXJldHVybiAwOworCisJdGhlX2hhc2hfYWxnby0+aW5pdF9mbigmYyk7CisJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjLCBoZHIsIHNpemUgLSB0aGVfaGFzaF9hbGdvLT5yYXdzeik7CisJdGhlX2hhc2hfYWxnby0+ZmluYWxfZm4oaGFzaCwgJmMpOworCWlmICghaGFzaGVxKGhhc2gsICh1bnNpZ25lZCBjaGFyICopaGRyICsgc2l6ZSAtIHRoZV9oYXNoX2FsZ28tPnJhd3N6KSkKKwkJcmV0dXJuIGVycm9yKF8oImJhZCBpbmRleCBmaWxlIHNoYTEgc2lnbmF0dXJlIikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfaW5kZXhfZXh0ZW5zaW9uKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCWNvbnN0IGNoYXIgKmV4dCwgY29uc3QgY2hhciAqZGF0YSwgdW5zaWduZWQgbG9uZyBzeikKK3sKKwlzd2l0Y2ggKENBQ0hFX0VYVChleHQpKSB7CisJY2FzZSBDQUNIRV9FWFRfVFJFRToKKwkJaXN0YXRlLT5jYWNoZV90cmVlID0gY2FjaGVfdHJlZV9yZWFkKGRhdGEsIHN6KTsKKwkJYnJlYWs7CisJY2FzZSBDQUNIRV9FWFRfUkVTT0xWRV9VTkRPOgorCQlpc3RhdGUtPnJlc29sdmVfdW5kbyA9IHJlc29sdmVfdW5kb19yZWFkKGRhdGEsIHN6KTsKKwkJYnJlYWs7CisJY2FzZSBDQUNIRV9FWFRfTElOSzoKKwkJaWYgKHJlYWRfbGlua19leHRlbnNpb24oaXN0YXRlLCBkYXRhLCBzeikpCisJCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCWNhc2UgQ0FDSEVfRVhUX1VOVFJBQ0tFRDoKKwkJaXN0YXRlLT51bnRyYWNrZWQgPSByZWFkX3VudHJhY2tlZF9leHRlbnNpb24oZGF0YSwgc3opOworCQlicmVhazsKKwljYXNlIENBQ0hFX0VYVF9GU01PTklUT1I6CisJCXJlYWRfZnNtb25pdG9yX2V4dGVuc2lvbihpc3RhdGUsIGRhdGEsIHN6KTsKKwkJYnJlYWs7CisJY2FzZSBDQUNIRV9FWFRfRU5ET0ZJTkRFWEVOVFJJRVM6CisJY2FzZSBDQUNIRV9FWFRfSU5ERVhFTlRSWU9GRlNFVFRBQkxFOgorCQkvKiBhbHJlYWR5IGhhbmRsZWQgaW4gZG9fcmVhZF9pbmRleCgpICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmICgqZXh0IDwgJ0EnIHx8ICdaJyA8ICpleHQpCisJCQlyZXR1cm4gZXJyb3IoXygiaW5kZXggdXNlcyAlLjRzIGV4dGVuc2lvbiwgd2hpY2ggd2UgZG8gbm90IHVuZGVyc3RhbmQiKSwKKwkJCQkgICAgIGV4dCk7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJpZ25vcmluZyAlLjRzIGV4dGVuc2lvbiIpLCBleHQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNyZWF0ZV9mcm9tX2Rpc2soc3RydWN0IG1lbV9wb29sICpjZV9tZW1fcG9vbCwKKwkJCQkJICAgIHVuc2lnbmVkIGludCB2ZXJzaW9uLAorCQkJCQkgICAgc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeSAqb25kaXNrLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqZW50X3NpemUsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKnByZXZpb3VzX2NlKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJc2l6ZV90IGxlbjsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IHVuc2lnbmVkIGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCWNvbnN0IHVpbnQxNl90ICpmbGFnc3AgPSAoY29uc3QgdWludDE2X3QgKikob25kaXNrLT5kYXRhICsgaGFzaHN6KTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJc2l6ZV90IGNvcHlfbGVuID0gMDsKKwkvKgorCSAqIEFkamFjZW50IGNhY2hlIGVudHJpZXMgdGVuZCB0byBzaGFyZSB0aGUgbGVhZGluZyBwYXRocywgc28gaXQgbWFrZXMKKwkgKiBzZW5zZSB0byBvbmx5IHN0b3JlIHRoZSBkaWZmZXJlbmNlcyBpbiBsYXRlciBlbnRyaWVzLiAgSW4gdGhlIHY0CisJICogb24tZGlzayBmb3JtYXQgb2YgdGhlIGluZGV4LCBlYWNoIG9uLWRpc2sgY2FjaGUgZW50cnkgc3RvcmVzIHRoZQorCSAqIG51bWJlciBvZiBieXRlcyB0byBiZSBzdHJpcHBlZCBmcm9tIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIG5hbWUsCisJICogYW5kIHRoZSBieXRlcyB0byBhcHBlbmQgdG8gdGhlIHJlc3VsdCwgdG8gY29tZSB1cCB3aXRoIGl0cyBuYW1lLgorCSAqLworCWludCBleHBhbmRfbmFtZV9maWVsZCA9IHZlcnNpb24gPT0gNDsKKworCS8qIE9uLWRpc2sgZmxhZ3MgYXJlIGp1c3QgMTYgYml0cyAqLworCWZsYWdzID0gZ2V0X2JlMTYoZmxhZ3NwKTsKKwlsZW4gPSBmbGFncyAmIENFX05BTUVNQVNLOworCisJaWYgKGZsYWdzICYgQ0VfRVhURU5ERUQpIHsKKwkJaW50IGV4dGVuZGVkX2ZsYWdzOworCQlleHRlbmRlZF9mbGFncyA9IGdldF9iZTE2KGZsYWdzcCArIDEpIDw8IDE2OworCQkvKiBXZSBkbyBub3QgeWV0IHVuZGVyc3RhbmQgYW55IGJpdCBvdXQgb2YgQ0VfRVhURU5ERURfRkxBR1MgKi8KKwkJaWYgKGV4dGVuZGVkX2ZsYWdzICYgfkNFX0VYVEVOREVEX0ZMQUdTKQorCQkJZGllKF8oInVua25vd24gaW5kZXggZW50cnkgZm9ybWF0IDB4JTA4eCIpLCBleHRlbmRlZF9mbGFncyk7CisJCWZsYWdzIHw9IGV4dGVuZGVkX2ZsYWdzOworCQluYW1lID0gKGNvbnN0IGNoYXIgKikoZmxhZ3NwICsgMik7CisJfQorCWVsc2UKKwkJbmFtZSA9IChjb25zdCBjaGFyICopKGZsYWdzcCArIDEpOworCisJaWYgKGV4cGFuZF9uYW1lX2ZpZWxkKSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiluYW1lOworCQlzaXplX3Qgc3RyaXBfbGVuLCBwcmV2aW91c19sZW47CisKKwkJLyogSWYgd2UncmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGJsb2NrLCBpZ25vcmUgdGhlIHByZXZpb3VzIG5hbWUgKi8KKwkJc3RyaXBfbGVuID0gZGVjb2RlX3ZhcmludCgmY3ApOworCQlpZiAocHJldmlvdXNfY2UpIHsKKwkJCXByZXZpb3VzX2xlbiA9IHByZXZpb3VzX2NlLT5jZV9uYW1lbGVuOworCQkJaWYgKHByZXZpb3VzX2xlbiA8IHN0cmlwX2xlbikKKwkJCQlkaWUoXygibWFsZm9ybWVkIG5hbWUgZmllbGQgaW4gdGhlIGluZGV4LCBuZWFyIHBhdGggJyVzJyIpLAorCQkJCQlwcmV2aW91c19jZS0+bmFtZSk7CisJCQljb3B5X2xlbiA9IHByZXZpb3VzX2xlbiAtIHN0cmlwX2xlbjsKKwkJfQorCQluYW1lID0gKGNvbnN0IGNoYXIgKiljcDsKKwl9CisKKwlpZiAobGVuID09IENFX05BTUVNQVNLKSB7CisJCWxlbiA9IHN0cmxlbihuYW1lKTsKKwkJaWYgKGV4cGFuZF9uYW1lX2ZpZWxkKQorCQkJbGVuICs9IGNvcHlfbGVuOworCX0KKworCWNlID0gbWVtX3Bvb2xfX2NlX2FsbG9jKGNlX21lbV9wb29sLCBsZW4pOworCisJY2UtPmNlX3N0YXRfZGF0YS5zZF9jdGltZS5zZWMgPSBnZXRfYmUzMigmb25kaXNrLT5jdGltZS5zZWMpOworCWNlLT5jZV9zdGF0X2RhdGEuc2RfbXRpbWUuc2VjID0gZ2V0X2JlMzIoJm9uZGlzay0+bXRpbWUuc2VjKTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX2N0aW1lLm5zZWMgPSBnZXRfYmUzMigmb25kaXNrLT5jdGltZS5uc2VjKTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX210aW1lLm5zZWMgPSBnZXRfYmUzMigmb25kaXNrLT5tdGltZS5uc2VjKTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX2RldiAgID0gZ2V0X2JlMzIoJm9uZGlzay0+ZGV2KTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX2lubyAgID0gZ2V0X2JlMzIoJm9uZGlzay0+aW5vKTsKKwljZS0+Y2VfbW9kZSAgPSBnZXRfYmUzMigmb25kaXNrLT5tb2RlKTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX3VpZCAgID0gZ2V0X2JlMzIoJm9uZGlzay0+dWlkKTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX2dpZCAgID0gZ2V0X2JlMzIoJm9uZGlzay0+Z2lkKTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX3NpemUgID0gZ2V0X2JlMzIoJm9uZGlzay0+c2l6ZSk7CisJY2UtPmNlX2ZsYWdzID0gZmxhZ3MgJiB+Q0VfTkFNRU1BU0s7CisJY2UtPmNlX25hbWVsZW4gPSBsZW47CisJY2UtPmluZGV4ID0gMDsKKwloYXNoY3B5KGNlLT5vaWQuaGFzaCwgb25kaXNrLT5kYXRhKTsKKwltZW1jcHkoY2UtPm5hbWUsIG5hbWUsIGxlbik7CisJY2UtPm5hbWVbbGVuXSA9ICdcMCc7CisKKwlpZiAoZXhwYW5kX25hbWVfZmllbGQpIHsKKwkJaWYgKGNvcHlfbGVuKQorCQkJbWVtY3B5KGNlLT5uYW1lLCBwcmV2aW91c19jZS0+bmFtZSwgY29weV9sZW4pOworCQltZW1jcHkoY2UtPm5hbWUgKyBjb3B5X2xlbiwgbmFtZSwgbGVuICsgMSAtIGNvcHlfbGVuKTsKKwkJKmVudF9zaXplID0gKG5hbWUgLSAoKGNoYXIgKilvbmRpc2spKSArIGxlbiArIDEgLSBjb3B5X2xlbjsKKwl9IGVsc2UgeworCQltZW1jcHkoY2UtPm5hbWUsIG5hbWUsIGxlbiArIDEpOworCQkqZW50X3NpemUgPSBvbmRpc2tfY2Vfc2l6ZShjZSk7CisJfQorCXJldHVybiBjZTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfY2Vfb3JkZXIoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoIXZlcmlmeV9jZV9vcmRlcikKKwkJcmV0dXJuOworCisJZm9yIChpID0gMTsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpIC0gMV07CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqbmV4dF9jZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWludCBuYW1lX2NvbXBhcmUgPSBzdHJjbXAoY2UtPm5hbWUsIG5leHRfY2UtPm5hbWUpOworCisJCWlmICgwIDwgbmFtZV9jb21wYXJlKQorCQkJZGllKF8oInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGluIGluZGV4IikpOworCQlpZiAoIW5hbWVfY29tcGFyZSkgeworCQkJaWYgKCFjZV9zdGFnZShjZSkpCisJCQkJZGllKF8oIm11bHRpcGxlIHN0YWdlIGVudHJpZXMgZm9yIG1lcmdlZCBmaWxlICclcyciKSwKKwkJCQkgICAgY2UtPm5hbWUpOworCQkJaWYgKGNlX3N0YWdlKGNlKSA+IGNlX3N0YWdlKG5leHRfY2UpKQorCQkJCWRpZShfKCJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBmb3IgJyVzJyIpLAorCQkJCSAgICBjZS0+bmFtZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHR3ZWFrX3VudHJhY2tlZF9jYWNoZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqciA9IHRoZV9yZXBvc2l0b3J5OworCisJcHJlcGFyZV9yZXBvX3NldHRpbmdzKHIpOworCisJaWYgKHItPnNldHRpbmdzLmNvcmVfdW50cmFja2VkX2NhY2hlICA9PSBVTlRSQUNLRURfQ0FDSEVfUkVNT1ZFKSB7CisJCXJlbW92ZV91bnRyYWNrZWRfY2FjaGUoaXN0YXRlKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChyLT5zZXR0aW5ncy5jb3JlX3VudHJhY2tlZF9jYWNoZSA9PSBVTlRSQUNLRURfQ0FDSEVfV1JJVEUpCisJCWFkZF91bnRyYWNrZWRfY2FjaGUoaXN0YXRlKTsKK30KKworc3RhdGljIHZvaWQgdHdlYWtfc3BsaXRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3dpdGNoIChnaXRfY29uZmlnX2dldF9zcGxpdF9pbmRleCgpKSB7CisJY2FzZSAtMTogLyogdW5zZXQ6IGRvIG5vdGhpbmcgKi8KKwkJYnJlYWs7CisJY2FzZSAwOiAvKiBmYWxzZSAqLworCQlyZW1vdmVfc3BsaXRfaW5kZXgoaXN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSAxOiAvKiB0cnVlICovCisJCWFkZF9zcGxpdF9pbmRleChpc3RhdGUpOworCQlicmVhazsKKwlkZWZhdWx0OiAvKiB1bmtub3duIHZhbHVlOiBkbyBub3RoaW5nICovCisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcG9zdF9yZWFkX2luZGV4X2Zyb20oc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJY2hlY2tfY2Vfb3JkZXIoaXN0YXRlKTsKKwl0d2Vha191bnRyYWNrZWRfY2FjaGUoaXN0YXRlKTsKKwl0d2Vha19zcGxpdF9pbmRleChpc3RhdGUpOworCXR3ZWFrX2ZzbW9uaXRvcihpc3RhdGUpOworfQorCitzdGF0aWMgc2l6ZV90IGVzdGltYXRlX2NhY2hlX3NpemVfZnJvbV9jb21wcmVzc2VkKHVuc2lnbmVkIGludCBlbnRyaWVzKQoreworCXJldHVybiBlbnRyaWVzICogKHNpemVvZihzdHJ1Y3QgY2FjaGVfZW50cnkpICsgQ0FDSEVfRU5UUllfUEFUSF9MRU5HVEgpOworfQorCitzdGF0aWMgc2l6ZV90IGVzdGltYXRlX2NhY2hlX3NpemUoc2l6ZV90IG9uZGlza19zaXplLCB1bnNpZ25lZCBpbnQgZW50cmllcykKK3sKKwlsb25nIHBlcl9lbnRyeSA9IHNpemVvZihzdHJ1Y3QgY2FjaGVfZW50cnkpIC0gc2l6ZW9mKHN0cnVjdCBvbmRpc2tfY2FjaGVfZW50cnkpOworCisJLyoKKwkgKiBBY2NvdW50IGZvciBwb3RlbnRpYWwgYWxpZ25tZW50IGRpZmZlcmVuY2VzLgorCSAqLworCXBlcl9lbnRyeSArPSBhbGlnbl9wYWRkaW5nX3NpemUocGVyX2VudHJ5LCAwKTsKKwlyZXR1cm4gb25kaXNrX3NpemUgKyBlbnRyaWVzICogcGVyX2VudHJ5OworfQorCitzdHJ1Y3QgaW5kZXhfZW50cnlfb2Zmc2V0Cit7CisJLyogc3RhcnRpbmcgYnl0ZSBvZmZzZXQgaW50byBpbmRleCBmaWxlLCBjb3VudCBvZiBpbmRleCBlbnRyaWVzIGluIHRoaXMgYmxvY2sgKi8KKwlpbnQgb2Zmc2V0LCBucjsKK307CisKK3N0cnVjdCBpbmRleF9lbnRyeV9vZmZzZXRfdGFibGUKK3sKKwlpbnQgbnI7CisJc3RydWN0IGluZGV4X2VudHJ5X29mZnNldCBlbnRyaWVzW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIHN0cnVjdCBpbmRleF9lbnRyeV9vZmZzZXRfdGFibGUgKnJlYWRfaWVvdF9leHRlbnNpb24oY29uc3QgY2hhciAqbW1hcCwgc2l6ZV90IG1tYXBfc2l6ZSwgc2l6ZV90IG9mZnNldCk7CitzdGF0aWMgdm9pZCB3cml0ZV9pZW90X2V4dGVuc2lvbihzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IGluZGV4X2VudHJ5X29mZnNldF90YWJsZSAqaWVvdCk7CisKK3N0YXRpYyBzaXplX3QgcmVhZF9lb2llX2V4dGVuc2lvbihjb25zdCBjaGFyICptbWFwLCBzaXplX3QgbW1hcF9zaXplKTsKK3N0YXRpYyB2b2lkIHdyaXRlX2VvaWVfZXh0ZW5zaW9uKHN0cnVjdCBzdHJidWYgKnNiLCBnaXRfaGFzaF9jdHggKmVvaWVfY29udGV4dCwgc2l6ZV90IG9mZnNldCk7CisKK3N0cnVjdCBsb2FkX2luZGV4X2V4dGVuc2lvbnMKK3sKKwlwdGhyZWFkX3QgcHRocmVhZDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZTsKKwljb25zdCBjaGFyICptbWFwOworCXNpemVfdCBtbWFwX3NpemU7CisJdW5zaWduZWQgbG9uZyBzcmNfb2Zmc2V0OworfTsKKworc3RhdGljIHZvaWQgKmxvYWRfaW5kZXhfZXh0ZW5zaW9ucyh2b2lkICpfZGF0YSkKK3sKKwlzdHJ1Y3QgbG9hZF9pbmRleF9leHRlbnNpb25zICpwID0gX2RhdGE7CisJdW5zaWduZWQgbG9uZyBzcmNfb2Zmc2V0ID0gcC0+c3JjX29mZnNldDsKKworCXdoaWxlIChzcmNfb2Zmc2V0IDw9IHAtPm1tYXBfc2l6ZSAtIHRoZV9oYXNoX2FsZ28tPnJhd3N6IC0gOCkgeworCQkvKiBBZnRlciBhbiBhcnJheSBvZiBhY3RpdmVfbnIgaW5kZXggZW50cmllcywKKwkJICogdGhlcmUgY2FuIGJlIGFyYml0cmFyeSBudW1iZXIgb2YgZXh0ZW5kZWQKKwkJICogc2VjdGlvbnMsIGVhY2ggb2Ygd2hpY2ggaXMgcHJlZml4ZWQgd2l0aAorCQkgKiBleHRlbnNpb24gbmFtZSAoNC1ieXRlKSBhbmQgc2VjdGlvbiBsZW5ndGgKKwkJICogaW4gNC1ieXRlIG5ldHdvcmsgYnl0ZSBvcmRlci4KKwkJICovCisJCXVpbnQzMl90IGV4dHNpemUgPSBnZXRfYmUzMihwLT5tbWFwICsgc3JjX29mZnNldCArIDQpOworCQlpZiAocmVhZF9pbmRleF9leHRlbnNpb24ocC0+aXN0YXRlLAorCQkJCQkgcC0+bW1hcCArIHNyY19vZmZzZXQsCisJCQkJCSBwLT5tbWFwICsgc3JjX29mZnNldCArIDgsCisJCQkJCSBleHRzaXplKSA8IDApIHsKKwkJCW11bm1hcCgodm9pZCAqKXAtPm1tYXAsIHAtPm1tYXBfc2l6ZSk7CisJCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCQl9CisJCXNyY19vZmZzZXQgKz0gODsKKwkJc3JjX29mZnNldCArPSBleHRzaXplOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGxvYWQgdGhlIHNwZWNpZmllZCByYW5nZSBvZiBjYWNoZSBlbnRyaWVzCisgKiBmcm9tIHRoZSBtZW1vcnkgbWFwcGVkIGZpbGUgYW5kIGFkZCB0aGVtIHRvIHRoZSBnaXZlbiBpbmRleC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9hZF9jYWNoZV9lbnRyeV9ibG9jayhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCXN0cnVjdCBtZW1fcG9vbCAqY2VfbWVtX3Bvb2wsIGludCBvZmZzZXQsIGludCBuciwgY29uc3QgY2hhciAqbW1hcCwKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnRfb2Zmc2V0LCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKnByZXZpb3VzX2NlKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgc3JjX29mZnNldCA9IHN0YXJ0X29mZnNldDsKKworCWZvciAoaSA9IG9mZnNldDsgaSA8IG9mZnNldCArIG5yOyBpKyspIHsKKwkJc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeSAqZGlza19jZTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwkJdW5zaWduZWQgbG9uZyBjb25zdW1lZDsKKworCQlkaXNrX2NlID0gKHN0cnVjdCBvbmRpc2tfY2FjaGVfZW50cnkgKikobW1hcCArIHNyY19vZmZzZXQpOworCQljZSA9IGNyZWF0ZV9mcm9tX2Rpc2soY2VfbWVtX3Bvb2wsIGlzdGF0ZS0+dmVyc2lvbiwgZGlza19jZSwgJmNvbnN1bWVkLCBwcmV2aW91c19jZSk7CisJCXNldF9pbmRleF9lbnRyeShpc3RhdGUsIGksIGNlKTsKKworCQlzcmNfb2Zmc2V0ICs9IGNvbnN1bWVkOworCQlwcmV2aW91c19jZSA9IGNlOworCX0KKwlyZXR1cm4gc3JjX29mZnNldCAtIHN0YXJ0X29mZnNldDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9hZF9hbGxfY2FjaGVfZW50cmllcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCWNvbnN0IGNoYXIgKm1tYXAsIHNpemVfdCBtbWFwX3NpemUsIHVuc2lnbmVkIGxvbmcgc3JjX29mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIGNvbnN1bWVkOworCisJaWYgKGlzdGF0ZS0+dmVyc2lvbiA9PSA0KSB7CisJCW1lbV9wb29sX2luaXQoJmlzdGF0ZS0+Y2VfbWVtX3Bvb2wsCisJCQkJZXN0aW1hdGVfY2FjaGVfc2l6ZV9mcm9tX2NvbXByZXNzZWQoaXN0YXRlLT5jYWNoZV9ucikpOworCX0gZWxzZSB7CisJCW1lbV9wb29sX2luaXQoJmlzdGF0ZS0+Y2VfbWVtX3Bvb2wsCisJCQkJZXN0aW1hdGVfY2FjaGVfc2l6ZShtbWFwX3NpemUsIGlzdGF0ZS0+Y2FjaGVfbnIpKTsKKwl9CisKKwljb25zdW1lZCA9IGxvYWRfY2FjaGVfZW50cnlfYmxvY2soaXN0YXRlLCBpc3RhdGUtPmNlX21lbV9wb29sLAorCQkJCQkwLCBpc3RhdGUtPmNhY2hlX25yLCBtbWFwLCBzcmNfb2Zmc2V0LCBOVUxMKTsKKwlyZXR1cm4gY29uc3VtZWQ7Cit9CisKKy8qCisgKiBNb3N0bHkgcmFuZG9tbHkgY2hvc2VuIG1heGltdW0gdGhyZWFkIGNvdW50czogd2UKKyAqIGNhcCB0aGUgcGFyYWxsZWxpc20gdG8gb25saW5lX2NwdXMoKSB0aHJlYWRzLCBhbmQgd2Ugd2FudAorICogdG8gaGF2ZSBhdCBsZWFzdCAxMDAwMCBjYWNoZSBlbnRyaWVzIHBlciB0aHJlYWQgZm9yIGl0IHRvCisgKiBiZSB3b3J0aCBzdGFydGluZyBhIHRocmVhZC4KKyAqLworCisjZGVmaW5lIFRIUkVBRF9DT1NUCQkoMTAwMDApCisKK3N0cnVjdCBsb2FkX2NhY2hlX2VudHJpZXNfdGhyZWFkX2RhdGEKK3sKKwlwdGhyZWFkX3QgcHRocmVhZDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZTsKKwlzdHJ1Y3QgbWVtX3Bvb2wgKmNlX21lbV9wb29sOworCWludCBvZmZzZXQ7CisJY29uc3QgY2hhciAqbW1hcDsKKwlzdHJ1Y3QgaW5kZXhfZW50cnlfb2Zmc2V0X3RhYmxlICppZW90OworCWludCBpZW90X3N0YXJ0OwkJLyogc3RhcnRpbmcgaW5kZXggaW50byB0aGUgaWVvdCBhcnJheSAqLworCWludCBpZW90X2Jsb2NrczsJLyogY291bnQgb2YgaWVvdCBlbnRyaWVzIHRvIHByb2Nlc3MgKi8KKwl1bnNpZ25lZCBsb25nIGNvbnN1bWVkOwkvKiByZXR1cm4gIyBvZiBieXRlcyBpbiBpbmRleCBmaWxlIHByb2Nlc3NlZCAqLworfTsKKworLyoKKyAqIEEgdGhyZWFkIHByb2MgdG8gcnVuIHRoZSBsb2FkX2NhY2hlX2VudHJpZXMoKSBjb21wdXRhdGlvbgorICogYWNyb3NzIG11bHRpcGxlIGJhY2tncm91bmQgdGhyZWFkcy4KKyAqLworc3RhdGljIHZvaWQgKmxvYWRfY2FjaGVfZW50cmllc190aHJlYWQodm9pZCAqX2RhdGEpCit7CisJc3RydWN0IGxvYWRfY2FjaGVfZW50cmllc190aHJlYWRfZGF0YSAqcCA9IF9kYXRhOworCWludCBpOworCisJLyogaXRlcmF0ZSBhY3Jvc3MgYWxsIGllb3QgYmxvY2tzIGFzc2lnbmVkIHRvIHRoaXMgdGhyZWFkICovCisJZm9yIChpID0gcC0+aWVvdF9zdGFydDsgaSA8IHAtPmllb3Rfc3RhcnQgKyBwLT5pZW90X2Jsb2NrczsgaSsrKSB7CisJCXAtPmNvbnN1bWVkICs9IGxvYWRfY2FjaGVfZW50cnlfYmxvY2socC0+aXN0YXRlLCBwLT5jZV9tZW1fcG9vbCwKKwkJCXAtPm9mZnNldCwgcC0+aWVvdC0+ZW50cmllc1tpXS5uciwgcC0+bW1hcCwgcC0+aWVvdC0+ZW50cmllc1tpXS5vZmZzZXQsIE5VTEwpOworCQlwLT5vZmZzZXQgKz0gcC0+aWVvdC0+ZW50cmllc1tpXS5ucjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvYWRfY2FjaGVfZW50cmllc190aHJlYWRlZChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqbW1hcCwgc2l6ZV90IG1tYXBfc2l6ZSwKKwkJCQkJCSBpbnQgbnJfdGhyZWFkcywgc3RydWN0IGluZGV4X2VudHJ5X29mZnNldF90YWJsZSAqaWVvdCkKK3sKKwlpbnQgaSwgb2Zmc2V0LCBpZW90X2Jsb2NrcywgaWVvdF9zdGFydCwgZXJyOworCXN0cnVjdCBsb2FkX2NhY2hlX2VudHJpZXNfdGhyZWFkX2RhdGEgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBjb25zdW1lZCA9IDA7CisKKwkvKiBhIGxpdHRsZSBzYW5pdHkgY2hlY2tpbmcgKi8KKwlpZiAoaXN0YXRlLT5uYW1lX2hhc2hfaW5pdGlhbGl6ZWQpCisJCUJVRygidGhlIG5hbWUgaGFzaCBpc24ndCB0aHJlYWQgc2FmZSIpOworCisJbWVtX3Bvb2xfaW5pdCgmaXN0YXRlLT5jZV9tZW1fcG9vbCwgMCk7CisKKwkvKiBlbnN1cmUgd2UgaGF2ZSBubyBtb3JlIHRocmVhZHMgdGhhbiB3ZSBoYXZlIGJsb2NrcyB0byBwcm9jZXNzICovCisJaWYgKG5yX3RocmVhZHMgPiBpZW90LT5ucikKKwkJbnJfdGhyZWFkcyA9IGllb3QtPm5yOworCWRhdGEgPSB4Y2FsbG9jKG5yX3RocmVhZHMsIHNpemVvZigqZGF0YSkpOworCisJb2Zmc2V0ID0gaWVvdF9zdGFydCA9IDA7CisJaWVvdF9ibG9ja3MgPSBESVZfUk9VTkRfVVAoaWVvdC0+bnIsIG5yX3RocmVhZHMpOworCWZvciAoaSA9IDA7IGkgPCBucl90aHJlYWRzOyBpKyspIHsKKwkJc3RydWN0IGxvYWRfY2FjaGVfZW50cmllc190aHJlYWRfZGF0YSAqcCA9ICZkYXRhW2ldOworCQlpbnQgbnIsIGo7CisKKwkJaWYgKGllb3Rfc3RhcnQgKyBpZW90X2Jsb2NrcyA+IGllb3QtPm5yKQorCQkJaWVvdF9ibG9ja3MgPSBpZW90LT5uciAtIGllb3Rfc3RhcnQ7CisKKwkJcC0+aXN0YXRlID0gaXN0YXRlOworCQlwLT5vZmZzZXQgPSBvZmZzZXQ7CisJCXAtPm1tYXAgPSBtbWFwOworCQlwLT5pZW90ID0gaWVvdDsKKwkJcC0+aWVvdF9zdGFydCA9IGllb3Rfc3RhcnQ7CisJCXAtPmllb3RfYmxvY2tzID0gaWVvdF9ibG9ja3M7CisKKwkJLyogY3JlYXRlIGEgbWVtX3Bvb2wgZm9yIGVhY2ggdGhyZWFkICovCisJCW5yID0gMDsKKwkJZm9yIChqID0gcC0+aWVvdF9zdGFydDsgaiA8IHAtPmllb3Rfc3RhcnQgKyBwLT5pZW90X2Jsb2NrczsgaisrKQorCQkJbnIgKz0gcC0+aWVvdC0+ZW50cmllc1tqXS5ucjsKKwkJaWYgKGlzdGF0ZS0+dmVyc2lvbiA9PSA0KSB7CisJCQltZW1fcG9vbF9pbml0KCZwLT5jZV9tZW1fcG9vbCwKKwkJCQllc3RpbWF0ZV9jYWNoZV9zaXplX2Zyb21fY29tcHJlc3NlZChucikpOworCQl9IGVsc2UgeworCQkJbWVtX3Bvb2xfaW5pdCgmcC0+Y2VfbWVtX3Bvb2wsCisJCQkJZXN0aW1hdGVfY2FjaGVfc2l6ZShtbWFwX3NpemUsIG5yKSk7CisJCX0KKworCQllcnIgPSBwdGhyZWFkX2NyZWF0ZSgmcC0+cHRocmVhZCwgTlVMTCwgbG9hZF9jYWNoZV9lbnRyaWVzX3RocmVhZCwgcCk7CisJCWlmIChlcnIpCisJCQlkaWUoXygidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2NhY2hlX2VudHJpZXMgdGhyZWFkOiAlcyIpLCBzdHJlcnJvcihlcnIpKTsKKworCQkvKiBpbmNyZW1lbnQgYnkgdGhlIG51bWJlciBvZiBjYWNoZSBlbnRyaWVzIGluIHRoZSBpZW90IGJsb2NrIGJlaW5nIHByb2Nlc3NlZCAqLworCQlmb3IgKGogPSAwOyBqIDwgaWVvdF9ibG9ja3M7IGorKykKKwkJCW9mZnNldCArPSBpZW90LT5lbnRyaWVzW2llb3Rfc3RhcnQgKyBqXS5ucjsKKwkJaWVvdF9zdGFydCArPSBpZW90X2Jsb2NrczsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdGhyZWFkczsgaSsrKSB7CisJCXN0cnVjdCBsb2FkX2NhY2hlX2VudHJpZXNfdGhyZWFkX2RhdGEgKnAgPSAmZGF0YVtpXTsKKworCQllcnIgPSBwdGhyZWFkX2pvaW4ocC0+cHRocmVhZCwgTlVMTCk7CisJCWlmIChlcnIpCisJCQlkaWUoXygidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiKSwgc3RyZXJyb3IoZXJyKSk7CisJCW1lbV9wb29sX2NvbWJpbmUoaXN0YXRlLT5jZV9tZW1fcG9vbCwgcC0+Y2VfbWVtX3Bvb2wpOworCQljb25zdW1lZCArPSBwLT5jb25zdW1lZDsKKwl9CisKKwlmcmVlKGRhdGEpOworCisJcmV0dXJuIGNvbnN1bWVkOworfQorCisvKiByZW1lbWJlciB0byBkaXNjYXJkX2NhY2hlKCkgYmVmb3JlIHJlYWRpbmcgYSBkaWZmZXJlbnQgY2FjaGUhICovCitpbnQgZG9fcmVhZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwgaW50IG11c3RfZXhpc3QpCit7CisJaW50IGZkOworCXN0cnVjdCBzdGF0IHN0OworCXVuc2lnbmVkIGxvbmcgc3JjX29mZnNldDsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfaGVhZGVyICpoZHI7CisJY29uc3QgY2hhciAqbW1hcDsKKwlzaXplX3QgbW1hcF9zaXplOworCXN0cnVjdCBsb2FkX2luZGV4X2V4dGVuc2lvbnMgcDsKKwlzaXplX3QgZXh0ZW5zaW9uX29mZnNldCA9IDA7CisJaW50IG5yX3RocmVhZHMsIGNwdXM7CisJc3RydWN0IGluZGV4X2VudHJ5X29mZnNldF90YWJsZSAqaWVvdCA9IE5VTEw7CisKKwlpZiAoaXN0YXRlLT5pbml0aWFsaXplZCkKKwkJcmV0dXJuIGlzdGF0ZS0+Y2FjaGVfbnI7CisKKwlpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPSAwOworCWlzdGF0ZS0+dGltZXN0YW1wLm5zZWMgPSAwOworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQlpZiAoIW11c3RfZXhpc3QgJiYgZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuIDA7CisJCWRpZV9lcnJubyhfKCIlczogaW5kZXggZmlsZSBvcGVuIGZhaWxlZCIpLCBwYXRoKTsKKwl9CisKKwlpZiAoZnN0YXQoZmQsICZzdCkpCisJCWRpZV9lcnJubyhfKCIlczogY2Fubm90IHN0YXQgdGhlIG9wZW4gaW5kZXgiKSwgcGF0aCk7CisKKwltbWFwX3NpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCWlmIChtbWFwX3NpemUgPCBzaXplb2Yoc3RydWN0IGNhY2hlX2hlYWRlcikgKyB0aGVfaGFzaF9hbGdvLT5yYXdzeikKKwkJZGllKF8oIiVzOiBpbmRleCBmaWxlIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIpLCBwYXRoKTsKKworCW1tYXAgPSB4bW1hcF9nZW50bHkoTlVMTCwgbW1hcF9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJaWYgKG1tYXAgPT0gTUFQX0ZBSUxFRCkKKwkJZGllX2Vycm5vKF8oIiVzOiB1bmFibGUgdG8gbWFwIGluZGV4IGZpbGUiKSwgcGF0aCk7CisJY2xvc2UoZmQpOworCisJaGRyID0gKGNvbnN0IHN0cnVjdCBjYWNoZV9oZWFkZXIgKiltbWFwOworCWlmICh2ZXJpZnlfaGRyKGhkciwgbW1hcF9zaXplKSA8IDApCisJCWdvdG8gdW5tYXA7CisKKwloYXNoY3B5KGlzdGF0ZS0+b2lkLmhhc2gsIChjb25zdCB1bnNpZ25lZCBjaGFyICopaGRyICsgbW1hcF9zaXplIC0gdGhlX2hhc2hfYWxnby0+cmF3c3opOworCWlzdGF0ZS0+dmVyc2lvbiA9IG50b2hsKGhkci0+aGRyX3ZlcnNpb24pOworCWlzdGF0ZS0+Y2FjaGVfbnIgPSBudG9obChoZHItPmhkcl9lbnRyaWVzKTsKKwlpc3RhdGUtPmNhY2hlX2FsbG9jID0gYWxsb2NfbnIoaXN0YXRlLT5jYWNoZV9ucik7CisJaXN0YXRlLT5jYWNoZSA9IHhjYWxsb2MoaXN0YXRlLT5jYWNoZV9hbGxvYywgc2l6ZW9mKCppc3RhdGUtPmNhY2hlKSk7CisJaXN0YXRlLT5pbml0aWFsaXplZCA9IDE7CisKKwlwLmlzdGF0ZSA9IGlzdGF0ZTsKKwlwLm1tYXAgPSBtbWFwOworCXAubW1hcF9zaXplID0gbW1hcF9zaXplOworCisJc3JjX29mZnNldCA9IHNpemVvZigqaGRyKTsKKworCWlmIChnaXRfY29uZmlnX2dldF9pbmRleF90aHJlYWRzKCZucl90aHJlYWRzKSkKKwkJbnJfdGhyZWFkcyA9IDE7CisKKwkvKiBUT0RPOiBkb2VzIGNyZWF0aW5nIG1vcmUgdGhyZWFkcyB0aGFuIGNvcmVzIGhlbHA/ICovCisJaWYgKCFucl90aHJlYWRzKSB7CisJCW5yX3RocmVhZHMgPSBpc3RhdGUtPmNhY2hlX25yIC8gVEhSRUFEX0NPU1Q7CisJCWNwdXMgPSBvbmxpbmVfY3B1cygpOworCQlpZiAobnJfdGhyZWFkcyA+IGNwdXMpCisJCQlucl90aHJlYWRzID0gY3B1czsKKwl9CisKKwlpZiAoIUhBVkVfVEhSRUFEUykKKwkJbnJfdGhyZWFkcyA9IDE7CisKKwlpZiAobnJfdGhyZWFkcyA+IDEpIHsKKwkJZXh0ZW5zaW9uX29mZnNldCA9IHJlYWRfZW9pZV9leHRlbnNpb24obW1hcCwgbW1hcF9zaXplKTsKKwkJaWYgKGV4dGVuc2lvbl9vZmZzZXQpIHsKKwkJCWludCBlcnI7CisKKwkJCXAuc3JjX29mZnNldCA9IGV4dGVuc2lvbl9vZmZzZXQ7CisJCQllcnIgPSBwdGhyZWFkX2NyZWF0ZSgmcC5wdGhyZWFkLCBOVUxMLCBsb2FkX2luZGV4X2V4dGVuc2lvbnMsICZwKTsKKwkJCWlmIChlcnIpCisJCQkJZGllKF8oInVuYWJsZSB0byBjcmVhdGUgbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiKSwgc3RyZXJyb3IoZXJyKSk7CisKKwkJCW5yX3RocmVhZHMtLTsKKwkJfQorCX0KKworCS8qCisJICogTG9jYXRlIGFuZCByZWFkIHRoZSBpbmRleCBlbnRyeSBvZmZzZXQgdGFibGUgc28gdGhhdCB3ZSBjYW4gdXNlIGl0CisJICogdG8gbXVsdGktdGhyZWFkIHRoZSByZWFkaW5nIG9mIHRoZSBjYWNoZSBlbnRyaWVzLgorCSAqLworCWlmIChleHRlbnNpb25fb2Zmc2V0ICYmIG5yX3RocmVhZHMgPiAxKQorCQlpZW90ID0gcmVhZF9pZW90X2V4dGVuc2lvbihtbWFwLCBtbWFwX3NpemUsIGV4dGVuc2lvbl9vZmZzZXQpOworCisJaWYgKGllb3QpIHsKKwkJc3JjX29mZnNldCArPSBsb2FkX2NhY2hlX2VudHJpZXNfdGhyZWFkZWQoaXN0YXRlLCBtbWFwLCBtbWFwX3NpemUsIG5yX3RocmVhZHMsIGllb3QpOworCQlmcmVlKGllb3QpOworCX0gZWxzZSB7CisJCXNyY19vZmZzZXQgKz0gbG9hZF9hbGxfY2FjaGVfZW50cmllcyhpc3RhdGUsIG1tYXAsIG1tYXBfc2l6ZSwgc3JjX29mZnNldCk7CisJfQorCisJaXN0YXRlLT50aW1lc3RhbXAuc2VjID0gc3Quc3RfbXRpbWU7CisJaXN0YXRlLT50aW1lc3RhbXAubnNlYyA9IFNUX01USU1FX05TRUMoc3QpOworCisJLyogaWYgd2UgY3JlYXRlZCBhIHRocmVhZCwgam9pbiBpdCBvdGhlcndpc2UgbG9hZCB0aGUgZXh0ZW5zaW9ucyBvbiB0aGUgcHJpbWFyeSB0aHJlYWQgKi8KKwlpZiAoZXh0ZW5zaW9uX29mZnNldCkgeworCQlpbnQgcmV0ID0gcHRocmVhZF9qb2luKHAucHRocmVhZCwgTlVMTCk7CisJCWlmIChyZXQpCisJCQlkaWUoXygidW5hYmxlIHRvIGpvaW4gbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiKSwgc3RyZXJyb3IocmV0KSk7CisJfSBlbHNlIHsKKwkJcC5zcmNfb2Zmc2V0ID0gc3JjX29mZnNldDsKKwkJbG9hZF9pbmRleF9leHRlbnNpb25zKCZwKTsKKwl9CisJbXVubWFwKCh2b2lkICopbW1hcCwgbW1hcF9zaXplKTsKKworCS8qCisJICogVE9ETyB0cmFjZTI6IHJlcGxhY2UgInRoZV9yZXBvc2l0b3J5IiB3aXRoIHRoZSBhY3R1YWwgcmVwbyBpbnN0YW5jZQorCSAqIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiAiaXN0YXRlIi4KKwkgKi8KKwl0cmFjZTJfZGF0YV9pbnRtYXgoImluZGV4IiwgdGhlX3JlcG9zaXRvcnksICJyZWFkL3ZlcnNpb24iLAorCQkJICAgaXN0YXRlLT52ZXJzaW9uKTsKKwl0cmFjZTJfZGF0YV9pbnRtYXgoImluZGV4IiwgdGhlX3JlcG9zaXRvcnksICJyZWFkL2NhY2hlX25yIiwKKwkJCSAgIGlzdGF0ZS0+Y2FjaGVfbnIpOworCisJcmV0dXJuIGlzdGF0ZS0+Y2FjaGVfbnI7CisKK3VubWFwOgorCW11bm1hcCgodm9pZCAqKW1tYXAsIG1tYXBfc2l6ZSk7CisJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKK30KKworLyoKKyAqIFNpZ25hbCB0aGF0IHRoZSBzaGFyZWQgaW5kZXggaXMgdXNlZCBieSB1cGRhdGluZyBpdHMgbXRpbWUuCisgKgorICogVGhpcyB3YXksIHNoYXJlZCBpbmRleCBjYW4gYmUgcmVtb3ZlZCBpZiB0aGV5IGhhdmUgbm90IGJlZW4gdXNlZAorICogZm9yIHNvbWUgdGltZS4KKyAqLworc3RhdGljIHZvaWQgZnJlc2hlbl9zaGFyZWRfaW5kZXgoY29uc3QgY2hhciAqc2hhcmVkX2luZGV4LCBpbnQgd2FybikKK3sKKwlpZiAoIWNoZWNrX2FuZF9mcmVzaGVuX2ZpbGUoc2hhcmVkX2luZGV4LCAxKSAmJiB3YXJuKQorCQl3YXJuaW5nKF8oImNvdWxkIG5vdCBmcmVzaGVuIHNoYXJlZCBpbmRleCAnJXMnIiksIHNoYXJlZF9pbmRleCk7Cit9CisKK2ludCByZWFkX2luZGV4X2Zyb20oc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgICBjb25zdCBjaGFyICpnaXRkaXIpCit7CisJc3RydWN0IHNwbGl0X2luZGV4ICpzcGxpdF9pbmRleDsKKwlpbnQgcmV0OworCWNoYXIgKmJhc2Vfb2lkX2hleDsKKwljaGFyICpiYXNlX3BhdGg7CisKKwkvKiBpc3RhdGUtPmluaXRpYWxpemVkIGNvdmVycyBib3RoIC5naXQvaW5kZXggYW5kIC5naXQvc2hhcmVkaW5kZXgueHh4ICovCisJaWYgKGlzdGF0ZS0+aW5pdGlhbGl6ZWQpCisJCXJldHVybiBpc3RhdGUtPmNhY2hlX25yOworCisJLyoKKwkgKiBUT0RPIHRyYWNlMjogcmVwbGFjZSAidGhlX3JlcG9zaXRvcnkiIHdpdGggdGhlIGFjdHVhbCByZXBvIGluc3RhbmNlCisJICogdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuICJpc3RhdGUiLgorCSAqLworCXRyYWNlMl9yZWdpb25fZW50ZXJfcHJpbnRmKCJpbmRleCIsICJkb19yZWFkX2luZGV4IiwgdGhlX3JlcG9zaXRvcnksCisJCQkJICAgIiVzIiwgcGF0aCk7CisJdHJhY2VfcGVyZm9ybWFuY2VfZW50ZXIoKTsKKwlyZXQgPSBkb19yZWFkX2luZGV4KGlzdGF0ZSwgcGF0aCwgMCk7CisJdHJhY2VfcGVyZm9ybWFuY2VfbGVhdmUoInJlYWQgY2FjaGUgJXMiLCBwYXRoKTsKKwl0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50ZigiaW5kZXgiLCAiZG9fcmVhZF9pbmRleCIsIHRoZV9yZXBvc2l0b3J5LAorCQkJCSAgICIlcyIsIHBhdGgpOworCisJc3BsaXRfaW5kZXggPSBpc3RhdGUtPnNwbGl0X2luZGV4OworCWlmICghc3BsaXRfaW5kZXggfHwgaXNfbnVsbF9vaWQoJnNwbGl0X2luZGV4LT5iYXNlX29pZCkpIHsKKwkJcG9zdF9yZWFkX2luZGV4X2Zyb20oaXN0YXRlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl0cmFjZV9wZXJmb3JtYW5jZV9lbnRlcigpOworCWlmIChzcGxpdF9pbmRleC0+YmFzZSkKKwkJZGlzY2FyZF9pbmRleChzcGxpdF9pbmRleC0+YmFzZSk7CisJZWxzZQorCQlzcGxpdF9pbmRleC0+YmFzZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpzcGxpdF9pbmRleC0+YmFzZSkpOworCisJYmFzZV9vaWRfaGV4ID0gb2lkX3RvX2hleCgmc3BsaXRfaW5kZXgtPmJhc2Vfb2lkKTsKKwliYXNlX3BhdGggPSB4c3RyZm10KCIlcy9zaGFyZWRpbmRleC4lcyIsIGdpdGRpciwgYmFzZV9vaWRfaGV4KTsKKwl0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50ZigiaW5kZXgiLCAic2hhcmVkL2RvX3JlYWRfaW5kZXgiLAorCQkJCSAgIHRoZV9yZXBvc2l0b3J5LCAiJXMiLCBiYXNlX3BhdGgpOworCXJldCA9IGRvX3JlYWRfaW5kZXgoc3BsaXRfaW5kZXgtPmJhc2UsIGJhc2VfcGF0aCwgMSk7CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZV9wcmludGYoImluZGV4IiwgInNoYXJlZC9kb19yZWFkX2luZGV4IiwKKwkJCQkgICB0aGVfcmVwb3NpdG9yeSwgIiVzIiwgYmFzZV9wYXRoKTsKKwlpZiAoIW9pZGVxKCZzcGxpdF9pbmRleC0+YmFzZV9vaWQsICZzcGxpdF9pbmRleC0+YmFzZS0+b2lkKSkKKwkJZGllKF8oImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiKSwKKwkJICAgIGJhc2Vfb2lkX2hleCwgYmFzZV9wYXRoLAorCQkgICAgb2lkX3RvX2hleCgmc3BsaXRfaW5kZXgtPmJhc2UtPm9pZCkpOworCisJZnJlc2hlbl9zaGFyZWRfaW5kZXgoYmFzZV9wYXRoLCAwKTsKKwltZXJnZV9iYXNlX2luZGV4KGlzdGF0ZSk7CisJcG9zdF9yZWFkX2luZGV4X2Zyb20oaXN0YXRlKTsKKwl0cmFjZV9wZXJmb3JtYW5jZV9sZWF2ZSgicmVhZCBjYWNoZSAlcyIsIGJhc2VfcGF0aCk7CisJZnJlZShiYXNlX3BhdGgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBpc19pbmRleF91bmJvcm4oc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJcmV0dXJuICghaXN0YXRlLT5jYWNoZV9uciAmJiAhaXN0YXRlLT50aW1lc3RhbXAuc2VjKTsKK30KKworaW50IGRpc2NhcmRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJLyoKKwkgKiBDYWNoZSBlbnRyaWVzIGluIGlzdGF0ZS0+Y2FjaGVbXSBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZAorCSAqIGZyb20gdGhlIG1lbW9yeSBwb29sIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluZGV4LCBvciBmcm9tIGFuCisJICogYXNzb2NpYXRlZCBzcGxpdF9pbmRleC4gVGhlcmUgaXMgbm8gbmVlZCB0byBmcmVlIGluZGl2aWR1YWwKKwkgKiBjYWNoZSBlbnRyaWVzLiB2YWxpZGF0ZV9jYWNoZV9lbnRyaWVzIGNhbiBkZXRlY3Qgd2hlbiB0aGlzCisJICogYXNzZXJ0aW9uIGRvZXMgbm90IGhvbGQuCisJICovCisJdmFsaWRhdGVfY2FjaGVfZW50cmllcyhpc3RhdGUpOworCisJcmVzb2x2ZV91bmRvX2NsZWFyX2luZGV4KGlzdGF0ZSk7CisJaXN0YXRlLT5jYWNoZV9uciA9IDA7CisJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkID0gMDsKKwlpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPSAwOworCWlzdGF0ZS0+dGltZXN0YW1wLm5zZWMgPSAwOworCWZyZWVfbmFtZV9oYXNoKGlzdGF0ZSk7CisJY2FjaGVfdHJlZV9mcmVlKCYoaXN0YXRlLT5jYWNoZV90cmVlKSk7CisJaXN0YXRlLT5pbml0aWFsaXplZCA9IDA7CisJaXN0YXRlLT5mc21vbml0b3JfaGFzX3J1bl9vbmNlID0gMDsKKwlGUkVFX0FORF9OVUxMKGlzdGF0ZS0+Y2FjaGUpOworCWlzdGF0ZS0+Y2FjaGVfYWxsb2MgPSAwOworCWRpc2NhcmRfc3BsaXRfaW5kZXgoaXN0YXRlKTsKKwlmcmVlX3VudHJhY2tlZF9jYWNoZShpc3RhdGUtPnVudHJhY2tlZCk7CisJaXN0YXRlLT51bnRyYWNrZWQgPSBOVUxMOworCisJaWYgKGlzdGF0ZS0+Y2VfbWVtX3Bvb2wpIHsKKwkJbWVtX3Bvb2xfZGlzY2FyZChpc3RhdGUtPmNlX21lbV9wb29sLCBzaG91bGRfdmFsaWRhdGVfY2FjaGVfZW50cmllcygpKTsKKwkJaXN0YXRlLT5jZV9tZW1fcG9vbCA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBWYWxpZGF0ZSB0aGUgY2FjaGUgZW50cmllcyBvZiB0aGlzIGluZGV4LgorICogQWxsIGNhY2hlIGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5kZXgKKyAqIHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIGJ5IHRoZSBtZW1vcnkgcG9vbAorICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5kZXgsIG9yIGJ5IGEgcmVmZXJlbmNlZAorICogc3BsaXQgaW5kZXguCisgKi8KK3ZvaWQgdmFsaWRhdGVfY2FjaGVfZW50cmllcyhjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpbnQgaTsKKworCWlmICghc2hvdWxkX3ZhbGlkYXRlX2NhY2hlX2VudHJpZXMoKSB8fCFpc3RhdGUgfHwgIWlzdGF0ZS0+aW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJaWYgKCFpc3RhdGUpIHsKKwkJCUJVRygiY2FjaGUgZW50cnkgaXMgbm90IGFsbG9jYXRlZCBmcm9tIGV4cGVjdGVkIG1lbW9yeSBwb29sIik7CisJCX0gZWxzZSBpZiAoIWlzdGF0ZS0+Y2VfbWVtX3Bvb2wgfHwKKwkJCSFtZW1fcG9vbF9jb250YWlucyhpc3RhdGUtPmNlX21lbV9wb29sLCBpc3RhdGUtPmNhY2hlW2ldKSkgeworCQkJaWYgKCFpc3RhdGUtPnNwbGl0X2luZGV4IHx8CisJCQkJIWlzdGF0ZS0+c3BsaXRfaW5kZXgtPmJhc2UgfHwKKwkJCQkhaXN0YXRlLT5zcGxpdF9pbmRleC0+YmFzZS0+Y2VfbWVtX3Bvb2wgfHwKKwkJCQkhbWVtX3Bvb2xfY29udGFpbnMoaXN0YXRlLT5zcGxpdF9pbmRleC0+YmFzZS0+Y2VfbWVtX3Bvb2wsIGlzdGF0ZS0+Y2FjaGVbaV0pKSB7CisJCQkJQlVHKCJjYWNoZSBlbnRyeSBpcyBub3QgYWxsb2NhdGVkIGZyb20gZXhwZWN0ZWQgbWVtb3J5IHBvb2wiKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChpc3RhdGUtPnNwbGl0X2luZGV4KQorCQl2YWxpZGF0ZV9jYWNoZV9lbnRyaWVzKGlzdGF0ZS0+c3BsaXRfaW5kZXgtPmJhc2UpOworfQorCitpbnQgdW5tZXJnZWRfaW5kZXgoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlpZiAoY2Vfc3RhZ2UoaXN0YXRlLT5jYWNoZVtpXSkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByZXBvX2luZGV4X2hhc19jaGFuZ2VzKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgc3RydWN0IHRyZWUgKnRyZWUsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSA9IHJlcG8tPmluZGV4OworCXN0cnVjdCBvYmplY3RfaWQgY21wOworCWludCBpOworCisJaWYgKHRyZWUpCisJCWNtcCA9IHRyZWUtPm9iamVjdC5vaWQ7CisJaWYgKHRyZWUgfHwgIWdldF9vaWRfdHJlZSgiSEVBRCIsICZjbXApKSB7CisJCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0OworCisJCXJlcG9fZGlmZl9zZXR1cChyZXBvLCAmb3B0KTsKKwkJb3B0LmZsYWdzLmV4aXRfd2l0aF9zdGF0dXMgPSAxOworCQlpZiAoIXNiKQorCQkJb3B0LmZsYWdzLnF1aWNrID0gMTsKKwkJZG9fZGlmZl9jYWNoZSgmY21wLCAmb3B0KTsKKwkJZGlmZmNvcmVfc3RkKCZvcHQpOworCQlmb3IgKGkgPSAwOyBzYiAmJiBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKSB7CisJCQlpZiAoaSkKKwkJCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlW2ldLT50d28tPnBhdGgpOworCQl9CisJCWRpZmZfZmx1c2goJm9wdCk7CisJCXJldHVybiBvcHQuZmxhZ3MuaGFzX2NoYW5nZXMgIT0gMDsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBzYiAmJiBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCQlpZiAoaSkKKwkJCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBpc3RhdGUtPmNhY2hlW2ldLT5uYW1lKTsKKwkJfQorCQlyZXR1cm4gISFpc3RhdGUtPmNhY2hlX25yOworCX0KK30KKworI2RlZmluZSBXUklURV9CVUZGRVJfU0laRSA4MTkyCitzdGF0aWMgdW5zaWduZWQgY2hhciB3cml0ZV9idWZmZXJbV1JJVEVfQlVGRkVSX1NJWkVdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgd3JpdGVfYnVmZmVyX2xlbjsKKworc3RhdGljIGludCBjZV93cml0ZV9mbHVzaChnaXRfaGFzaF9jdHggKmNvbnRleHQsIGludCBmZCkKK3sKKwl1bnNpZ25lZCBpbnQgYnVmZmVyZWQgPSB3cml0ZV9idWZmZXJfbGVuOworCWlmIChidWZmZXJlZCkgeworCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oY29udGV4dCwgd3JpdGVfYnVmZmVyLCBidWZmZXJlZCk7CisJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCB3cml0ZV9idWZmZXIsIGJ1ZmZlcmVkKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCXdyaXRlX2J1ZmZlcl9sZW4gPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZV93cml0ZShnaXRfaGFzaF9jdHggKmNvbnRleHQsIGludCBmZCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwl3aGlsZSAobGVuKSB7CisJCXVuc2lnbmVkIGludCBidWZmZXJlZCA9IHdyaXRlX2J1ZmZlcl9sZW47CisJCXVuc2lnbmVkIGludCBwYXJ0aWFsID0gV1JJVEVfQlVGRkVSX1NJWkUgLSBidWZmZXJlZDsKKwkJaWYgKHBhcnRpYWwgPiBsZW4pCisJCQlwYXJ0aWFsID0gbGVuOworCQltZW1jcHkod3JpdGVfYnVmZmVyICsgYnVmZmVyZWQsIGRhdGEsIHBhcnRpYWwpOworCQlidWZmZXJlZCArPSBwYXJ0aWFsOworCQlpZiAoYnVmZmVyZWQgPT0gV1JJVEVfQlVGRkVSX1NJWkUpIHsKKwkJCXdyaXRlX2J1ZmZlcl9sZW4gPSBidWZmZXJlZDsKKwkJCWlmIChjZV93cml0ZV9mbHVzaChjb250ZXh0LCBmZCkpCisJCQkJcmV0dXJuIC0xOworCQkJYnVmZmVyZWQgPSAwOworCQl9CisJCXdyaXRlX2J1ZmZlcl9sZW4gPSBidWZmZXJlZDsKKwkJbGVuIC09IHBhcnRpYWw7CisJCWRhdGEgPSAoY2hhciAqKSBkYXRhICsgcGFydGlhbDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfaW5kZXhfZXh0X2hlYWRlcihnaXRfaGFzaF9jdHggKmNvbnRleHQsIGdpdF9oYXNoX2N0eCAqZW9pZV9jb250ZXh0LAorCQkJCSAgaW50IGZkLCB1bnNpZ25lZCBpbnQgZXh0LCB1bnNpZ25lZCBpbnQgc3opCit7CisJZXh0ID0gaHRvbmwoZXh0KTsKKwlzeiA9IGh0b25sKHN6KTsKKwlpZiAoZW9pZV9jb250ZXh0KSB7CisJCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbihlb2llX2NvbnRleHQsICZleHQsIDQpOworCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oZW9pZV9jb250ZXh0LCAmc3osIDQpOworCX0KKwlyZXR1cm4gKChjZV93cml0ZShjb250ZXh0LCBmZCwgJmV4dCwgNCkgPCAwKSB8fAorCQkoY2Vfd3JpdGUoY29udGV4dCwgZmQsICZzeiwgNCkgPCAwKSkgPyAtMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgY2VfZmx1c2goZ2l0X2hhc2hfY3R4ICpjb250ZXh0LCBpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKmhhc2gpCit7CisJdW5zaWduZWQgaW50IGxlZnQgPSB3cml0ZV9idWZmZXJfbGVuOworCisJaWYgKGxlZnQpIHsKKwkJd3JpdGVfYnVmZmVyX2xlbiA9IDA7CisJCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbihjb250ZXh0LCB3cml0ZV9idWZmZXIsIGxlZnQpOworCX0KKworCS8qIEZsdXNoIGZpcnN0IGlmIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGhhc2ggc2lnbmF0dXJlICovCisJaWYgKGxlZnQgKyB0aGVfaGFzaF9hbGdvLT5yYXdzeiA+IFdSSVRFX0JVRkZFUl9TSVpFKSB7CisJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCB3cml0ZV9idWZmZXIsIGxlZnQpIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJbGVmdCA9IDA7CisJfQorCisJLyogQXBwZW5kIHRoZSBoYXNoIHNpZ25hdHVyZSBhdCB0aGUgZW5kICovCisJdGhlX2hhc2hfYWxnby0+ZmluYWxfZm4od3JpdGVfYnVmZmVyICsgbGVmdCwgY29udGV4dCk7CisJaGFzaGNweShoYXNoLCB3cml0ZV9idWZmZXIgKyBsZWZ0KTsKKwlsZWZ0ICs9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCXJldHVybiAod3JpdGVfaW5fZnVsbChmZCwgd3JpdGVfYnVmZmVyLCBsZWZ0KSA8IDApID8gLTEgOiAwOworfQorCitzdGF0aWMgdm9pZCBjZV9zbXVkZ2VfcmFjaWx5X2NsZWFuX2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQkgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwkvKgorCSAqIFRoZSBvbmx5IHRoaW5nIHdlIGNhcmUgYWJvdXQgaW4gdGhpcyBmdW5jdGlvbiBpcyB0byBzbXVkZ2UgdGhlCisJICogZmFsc2VseSBjbGVhbiBlbnRyeSBkdWUgdG8gdG91Y2gtdXBkYXRlLXRvdWNoIHJhY2UsIHNvIHdlIGxlYXZlCisJICogZXZlcnl0aGluZyBlbHNlIGFzIHRoZXkgYXJlLiAgV2UgYXJlIGNhbGxlZCBmb3IgZW50cmllcyB3aG9zZQorCSAqIGNlX3N0YXRfZGF0YS5zZF9tdGltZSBtYXRjaCB0aGUgaW5kZXggZmlsZSBtdGltZS4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGlzIGFjdHVhbGx5IGRvZXMgbm90IGRvIG11Y2ggZm9yIGdpdGxpbmtzLCBmb3IKKwkgKiB3aGljaCBjZV9tYXRjaF9zdGF0X2Jhc2ljKCkgYWx3YXlzIGdvZXMgdG8gdGhlIGFjdHVhbAorCSAqIGNvbnRlbnRzLiAgVGhlIGNhbGxlciBjaGVja3Mgd2l0aCBpc19yYWN5X3RpbWVzdGFtcCgpIHdoaWNoCisJICogYWx3YXlzIHNheXMgIm5vIiBmb3IgZ2l0bGlua3MsIHNvIHdlIGFyZSBub3QgY2FsbGVkIGZvciB0aGVtIDstKQorCSAqLworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGxzdGF0KGNlLT5uYW1lLCAmc3QpIDwgMCkKKwkJcmV0dXJuOworCWlmIChjZV9tYXRjaF9zdGF0X2Jhc2ljKGNlLCAmc3QpKQorCQlyZXR1cm47CisJaWYgKGNlX21vZGlmaWVkX2NoZWNrX2ZzKGlzdGF0ZSwgY2UsICZzdCkpIHsKKwkJLyogVGhpcyBpcyAicmFjaWx5IGNsZWFuIjsgc211ZGdlIGl0LiAgTm90ZSB0aGF0IHRoaXMKKwkJICogaXMgYSB0cmlja3kgY29kZS4gIEF0IGZpcnN0IGdsYW5jZSwgaXQgbWF5IGFwcGVhcgorCQkgKiB0aGF0IGl0IGNhbiBicmVhayB3aXRoIHRoaXMgc2VxdWVuY2U6CisJCSAqCisJCSAqICQgZWNobyB4eXp6eSA+ZnJvdHoKKwkJICogJCBnaXQtdXBkYXRlLWluZGV4IC0tYWRkIGZyb3R6CisJCSAqICQgOiA+ZnJvdHoKKwkJICogJCBzbGVlcCAzCisJCSAqICQgZWNobyBmaWxmcmUgPm5pdGZvbAorCQkgKiAkIGdpdC11cGRhdGUtaW5kZXggLS1hZGQgbml0Zm9sCisJCSAqCisJCSAqIGJ1dCBpdCBkb2VzIG5vdC4gIFdoZW4gdGhlIHNlY29uZCB1cGRhdGUtaW5kZXggcnVucywKKwkJICogaXQgbm90aWNlcyB0aGF0IHRoZSBlbnRyeSAiZnJvdHoiIGhhcyB0aGUgc2FtZSB0aW1lc3RhbXAKKwkJICogYXMgaW5kZXgsIGFuZCBpZiB3ZSB3ZXJlIHRvIHNtdWRnZSBpdCBieSByZXNldHRpbmcgaXRzCisJCSAqIHNpemUgdG8gemVybyBoZXJlLCB0aGVuIHRoZSBvYmplY3QgbmFtZSByZWNvcmRlZAorCQkgKiBpbiBpbmRleCBpcyB0aGUgNi1ieXRlIGZpbGUgYnV0IHRoZSBjYWNoZWQgc3RhdCBpbmZvcm1hdGlvbgorCQkgKiBiZWNvbWVzIHplcm8gLS0tIHdoaWNoIHdvdWxkIHRoZW4gbWF0Y2ggd2hhdCB3ZSB3b3VsZAorCQkgKiBvYnRhaW4gZnJvbSB0aGUgZmlsZXN5c3RlbSBuZXh0IHRpbWUgd2Ugc3RhdCgiZnJvdHoiKS4KKwkJICoKKwkJICogSG93ZXZlciwgdGhlIHNlY29uZCB1cGRhdGUtaW5kZXgsIGJlZm9yZSBjYWxsaW5nCisJCSAqIHRoaXMgZnVuY3Rpb24sIG5vdGljZXMgdGhhdCB0aGUgY2FjaGVkIHNpemUgaXMgNgorCQkgKiBieXRlcyBhbmQgd2hhdCBpcyBvbiB0aGUgZmlsZXN5c3RlbSBpcyBhbiBlbXB0eQorCQkgKiBmaWxlLCBhbmQgbmV2ZXIgY2FsbHMgdXMsIHNvIHRoZSBjYWNoZWQgc2l6ZSBpbmZvcm1hdGlvbgorCQkgKiBmb3IgImZyb3R6IiBzdGF5cyA2IHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBmaWxlc3lzdGVtLgorCQkgKi8KKwkJY2UtPmNlX3N0YXRfZGF0YS5zZF9zaXplID0gMDsKKwl9Cit9CisKKy8qIENvcHkgbWlzY2VsbGFuZW91cyBmaWVsZHMgYnV0IG5vdCB0aGUgbmFtZSAqLworc3RhdGljIHZvaWQgY29weV9jYWNoZV9lbnRyeV90b19vbmRpc2soc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeSAqb25kaXNrLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCXNob3J0IGZsYWdzOworCWNvbnN0IHVuc2lnbmVkIGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCXVpbnQxNl90ICpmbGFnc3AgPSAodWludDE2X3QgKikob25kaXNrLT5kYXRhICsgaGFzaHN6KTsKKworCW9uZGlzay0+Y3RpbWUuc2VjID0gaHRvbmwoY2UtPmNlX3N0YXRfZGF0YS5zZF9jdGltZS5zZWMpOworCW9uZGlzay0+bXRpbWUuc2VjID0gaHRvbmwoY2UtPmNlX3N0YXRfZGF0YS5zZF9tdGltZS5zZWMpOworCW9uZGlzay0+Y3RpbWUubnNlYyA9IGh0b25sKGNlLT5jZV9zdGF0X2RhdGEuc2RfY3RpbWUubnNlYyk7CisJb25kaXNrLT5tdGltZS5uc2VjID0gaHRvbmwoY2UtPmNlX3N0YXRfZGF0YS5zZF9tdGltZS5uc2VjKTsKKwlvbmRpc2stPmRldiAgPSBodG9ubChjZS0+Y2Vfc3RhdF9kYXRhLnNkX2Rldik7CisJb25kaXNrLT5pbm8gID0gaHRvbmwoY2UtPmNlX3N0YXRfZGF0YS5zZF9pbm8pOworCW9uZGlzay0+bW9kZSA9IGh0b25sKGNlLT5jZV9tb2RlKTsKKwlvbmRpc2stPnVpZCAgPSBodG9ubChjZS0+Y2Vfc3RhdF9kYXRhLnNkX3VpZCk7CisJb25kaXNrLT5naWQgID0gaHRvbmwoY2UtPmNlX3N0YXRfZGF0YS5zZF9naWQpOworCW9uZGlzay0+c2l6ZSA9IGh0b25sKGNlLT5jZV9zdGF0X2RhdGEuc2Rfc2l6ZSk7CisJaGFzaGNweShvbmRpc2stPmRhdGEsIGNlLT5vaWQuaGFzaCk7CisKKwlmbGFncyA9IGNlLT5jZV9mbGFncyAmIH5DRV9OQU1FTUFTSzsKKwlmbGFncyB8PSAoY2VfbmFtZWxlbihjZSkgPj0gQ0VfTkFNRU1BU0sgPyBDRV9OQU1FTUFTSyA6IGNlX25hbWVsZW4oY2UpKTsKKwlmbGFnc3BbMF0gPSBodG9ucyhmbGFncyk7CisJaWYgKGNlLT5jZV9mbGFncyAmIENFX0VYVEVOREVEKSB7CisJCWZsYWdzcFsxXSA9IGh0b25zKChjZS0+Y2VfZmxhZ3MgJiBDRV9FWFRFTkRFRF9GTEFHUykgPj4gMTYpOworCX0KK30KKworc3RhdGljIGludCBjZV93cml0ZV9lbnRyeShnaXRfaGFzaF9jdHggKmMsIGludCBmZCwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCSAgc3RydWN0IHN0cmJ1ZiAqcHJldmlvdXNfbmFtZSwgc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeSAqb25kaXNrKQoreworCWludCBzaXplOworCWludCByZXN1bHQ7CisJdW5zaWduZWQgaW50IHNhdmVkX25hbWVsZW47CisJaW50IHN0cmlwcGVkX25hbWUgPSAwOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHBhZGRpbmdbOF0gPSB7IDB4MDAgfTsKKworCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9TVFJJUF9OQU1FKSB7CisJCXNhdmVkX25hbWVsZW4gPSBjZV9uYW1lbGVuKGNlKTsKKwkJY2UtPmNlX25hbWVsZW4gPSAwOworCQlzdHJpcHBlZF9uYW1lID0gMTsKKwl9CisKKwlzaXplID0gb2Zmc2V0b2Yoc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeSxkYXRhKSArIG9uZGlza19kYXRhX3NpemUoY2UtPmNlX2ZsYWdzLCAwKTsKKworCWlmICghcHJldmlvdXNfbmFtZSkgeworCQlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7CisJCWNvcHlfY2FjaGVfZW50cnlfdG9fb25kaXNrKG9uZGlzaywgY2UpOworCQlyZXN1bHQgPSBjZV93cml0ZShjLCBmZCwgb25kaXNrLCBzaXplKTsKKwkJaWYgKCFyZXN1bHQpCisJCQlyZXN1bHQgPSBjZV93cml0ZShjLCBmZCwgY2UtPm5hbWUsIGxlbik7CisJCWlmICghcmVzdWx0KQorCQkJcmVzdWx0ID0gY2Vfd3JpdGUoYywgZmQsIHBhZGRpbmcsIGFsaWduX3BhZGRpbmdfc2l6ZShzaXplLCBsZW4pKTsKKwl9IGVsc2UgeworCQlpbnQgY29tbW9uLCB0b19yZW1vdmUsIHByZWZpeF9zaXplOworCQl1bnNpZ25lZCBjaGFyIHRvX3JlbW92ZV92aVsxNl07CisJCWZvciAoY29tbW9uID0gMDsKKwkJICAgICAoY2UtPm5hbWVbY29tbW9uXSAmJgorCQkgICAgICBjb21tb24gPCBwcmV2aW91c19uYW1lLT5sZW4gJiYKKwkJICAgICAgY2UtPm5hbWVbY29tbW9uXSA9PSBwcmV2aW91c19uYW1lLT5idWZbY29tbW9uXSk7CisJCSAgICAgY29tbW9uKyspCisJCQk7IC8qIHN0aWxsIG1hdGNoaW5nICovCisJCXRvX3JlbW92ZSA9IHByZXZpb3VzX25hbWUtPmxlbiAtIGNvbW1vbjsKKwkJcHJlZml4X3NpemUgPSBlbmNvZGVfdmFyaW50KHRvX3JlbW92ZSwgdG9fcmVtb3ZlX3ZpKTsKKworCQljb3B5X2NhY2hlX2VudHJ5X3RvX29uZGlzayhvbmRpc2ssIGNlKTsKKwkJcmVzdWx0ID0gY2Vfd3JpdGUoYywgZmQsIG9uZGlzaywgc2l6ZSk7CisJCWlmICghcmVzdWx0KQorCQkJcmVzdWx0ID0gY2Vfd3JpdGUoYywgZmQsIHRvX3JlbW92ZV92aSwgcHJlZml4X3NpemUpOworCQlpZiAoIXJlc3VsdCkKKwkJCXJlc3VsdCA9IGNlX3dyaXRlKGMsIGZkLCBjZS0+bmFtZSArIGNvbW1vbiwgY2VfbmFtZWxlbihjZSkgLSBjb21tb24pOworCQlpZiAoIXJlc3VsdCkKKwkJCXJlc3VsdCA9IGNlX3dyaXRlKGMsIGZkLCBwYWRkaW5nLCAxKTsKKworCQlzdHJidWZfc3BsaWNlKHByZXZpb3VzX25hbWUsIGNvbW1vbiwgdG9fcmVtb3ZlLAorCQkJICAgICAgY2UtPm5hbWUgKyBjb21tb24sIGNlX25hbWVsZW4oY2UpIC0gY29tbW9uKTsKKwl9CisJaWYgKHN0cmlwcGVkX25hbWUpIHsKKwkJY2UtPmNlX25hbWVsZW4gPSBzYXZlZF9uYW1lbGVuOworCQljZS0+Y2VfZmxhZ3MgJj0gfkNFX1NUUklQX05BTUU7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgaWYgaW5kZXhfc3RhdGUgaGFzIHRoZSBjb3JyZWN0IHNoYTEgb2YgdGhlCisgKiBpbmRleCBmaWxlLiAgRG9uJ3QgZGllIGlmIHdlIGhhdmUgYW55IG90aGVyIGZhaWx1cmUsIGp1c3QgcmV0dXJuIDAuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X2luZGV4X2Zyb20oY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGZkOworCXNzaXplX3QgbjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9SQVdTWl07CisKKwlpZiAoIWlzdGF0ZS0+aW5pdGlhbGl6ZWQpCisJCXJldHVybiAwOworCisJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gMDsKKworCWlmIChmc3RhdChmZCwgJnN0KSkKKwkJZ290byBvdXQ7CisKKwlpZiAoc3Quc3Rfc2l6ZSA8IHNpemVvZihzdHJ1Y3QgY2FjaGVfaGVhZGVyKSArIHRoZV9oYXNoX2FsZ28tPnJhd3N6KQorCQlnb3RvIG91dDsKKworCW4gPSBwcmVhZF9pbl9mdWxsKGZkLCBoYXNoLCB0aGVfaGFzaF9hbGdvLT5yYXdzeiwgc3Quc3Rfc2l6ZSAtIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKKwlpZiAobiAhPSB0aGVfaGFzaF9hbGdvLT5yYXdzeikKKwkJZ290byBvdXQ7CisKKwlpZiAoIWhhc2hlcShpc3RhdGUtPm9pZC5oYXNoLCBoYXNoKSkKKwkJZ290byBvdXQ7CisKKwljbG9zZShmZCk7CisJcmV0dXJuIDE7CisKK291dDoKKwljbG9zZShmZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVwb192ZXJpZnlfaW5kZXgoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pCit7CisJcmV0dXJuIHZlcmlmeV9pbmRleF9mcm9tKHJlcG8tPmluZGV4LCByZXBvLT5pbmRleF9maWxlKTsKK30KKworc3RhdGljIGludCBoYXNfcmFjeV90aW1lc3RhbXAoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaW50IGVudHJpZXMgPSBpc3RhdGUtPmNhY2hlX25yOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJaWYgKGlzX3JhY3lfdGltZXN0YW1wKGlzdGF0ZSwgY2UpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHJlcG9fdXBkYXRlX2luZGV4X2lmX2FibGUoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICAgICAgc3RydWN0IGxvY2tfZmlsZSAqbG9ja2ZpbGUpCit7CisJaWYgKChyZXBvLT5pbmRleC0+Y2FjaGVfY2hhbmdlZCB8fAorCSAgICAgaGFzX3JhY3lfdGltZXN0YW1wKHJlcG8tPmluZGV4KSkgJiYKKwkgICAgcmVwb192ZXJpZnlfaW5kZXgocmVwbykpCisJCXdyaXRlX2xvY2tlZF9pbmRleChyZXBvLT5pbmRleCwgbG9ja2ZpbGUsIENPTU1JVF9MT0NLKTsKKwllbHNlCisJCXJvbGxiYWNrX2xvY2tfZmlsZShsb2NrZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgcmVjb3JkX2VvaWUodm9pZCkKK3sKKwlpbnQgdmFsOworCisJaWYgKCFnaXRfY29uZmlnX2dldF9ib29sKCJpbmRleC5yZWNvcmRlbmRvZmluZGV4ZW50cmllcyIsICZ2YWwpKQorCQlyZXR1cm4gdmFsOworCisJLyoKKwkgKiBBcyBhIGNvbnZlbmllbmNlLCB0aGUgZW5kIG9mIGluZGV4IGVudHJpZXMgZXh0ZW5zaW9uCisJICogdXNlZCBmb3IgdGhyZWFkaW5nIGlzIHdyaXR0ZW4gYnkgZGVmYXVsdCBpZiB0aGUgdXNlcgorCSAqIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHRocmVhZGVkIGluZGV4IHJlYWRzLgorCSAqLworCXJldHVybiAhZ2l0X2NvbmZpZ19nZXRfaW5kZXhfdGhyZWFkcygmdmFsKSAmJiB2YWwgIT0gMTsKK30KKworc3RhdGljIGludCByZWNvcmRfaWVvdCh2b2lkKQoreworCWludCB2YWw7CisKKwlpZiAoIWdpdF9jb25maWdfZ2V0X2Jvb2woImluZGV4LnJlY29yZG9mZnNldHRhYmxlIiwgJnZhbCkpCisJCXJldHVybiB2YWw7CisKKwkvKgorCSAqIEFzIGEgY29udmVuaWVuY2UsIHRoZSBvZmZzZXQgdGFibGUgdXNlZCBmb3IgdGhyZWFkaW5nIGlzCisJICogd3JpdHRlbiBieSBkZWZhdWx0IGlmIHRoZSB1c2VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisJICogdGhyZWFkZWQgaW5kZXggcmVhZHMuCisJICovCisJcmV0dXJuICFnaXRfY29uZmlnX2dldF9pbmRleF90aHJlYWRzKCZ2YWwpICYmIHZhbCAhPSAxOworfQorCisvKgorICogT24gc3VjY2VzcywgYHRlbXBmaWxlYCBpcyBjbG9zZWQuIElmIGl0IGlzIHRoZSB0ZW1wb3JhcnkgZmlsZQorICogb2YgYSBgc3RydWN0IGxvY2tfZmlsZWAsIHdlIHdpbGwgdGhlcmVmb3JlIGVmZmVjdGl2ZWx5IHBlcmZvcm0KKyAqIGEgJ2Nsb3NlX2xvY2tfZmlsZV9nZW50bHkoKWAuIFNpbmNlIHRoYXQgaXMgYW4gaW1wbGVtZW50YXRpb24KKyAqIGRldGFpbCBvZiBsb2NrZmlsZXMsIGNhbGxlcnMgb2YgYGRvX3dyaXRlX2luZGV4KClgIHNob3VsZCBub3QKKyAqIHJlbHkgb24gaXQuCisgKi8KK3N0YXRpYyBpbnQgZG9fd3JpdGVfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUsCisJCQkgIGludCBzdHJpcF9leHRlbnNpb25zKQoreworCXVpbnQ2NF90IHN0YXJ0ID0gZ2V0bmFub3RpbWUoKTsKKwlpbnQgbmV3ZmQgPSB0ZW1wZmlsZS0+ZmQ7CisJZ2l0X2hhc2hfY3R4IGMsIGVvaWVfYzsKKwlzdHJ1Y3QgY2FjaGVfaGVhZGVyIGhkcjsKKwlpbnQgaSwgZXJyID0gMCwgcmVtb3ZlZCwgZXh0ZW5kZWQsIGhkcl92ZXJzaW9uOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqKmNhY2hlID0gaXN0YXRlLT5jYWNoZTsKKwlpbnQgZW50cmllcyA9IGlzdGF0ZS0+Y2FjaGVfbnI7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeSBvbmRpc2s7CisJc3RydWN0IHN0cmJ1ZiBwcmV2aW91c19uYW1lX2J1ZiA9IFNUUkJVRl9JTklULCAqcHJldmlvdXNfbmFtZTsKKwlpbnQgZHJvcF9jYWNoZV90cmVlID0gaXN0YXRlLT5kcm9wX2NhY2hlX3RyZWU7CisJb2ZmX3Qgb2Zmc2V0OworCWludCBpZW90X2VudHJpZXMgPSAxOworCXN0cnVjdCBpbmRleF9lbnRyeV9vZmZzZXRfdGFibGUgKmllb3QgPSBOVUxMOworCWludCBuciwgbnJfdGhyZWFkczsKKworCWZvciAoaSA9IHJlbW92ZWQgPSBleHRlbmRlZCA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKKwkJaWYgKGNhY2hlW2ldLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJCXJlbW92ZWQrKzsKKworCQkvKiByZWR1Y2UgZXh0ZW5kZWQgZW50cmllcyBpZiBwb3NzaWJsZSAqLworCQljYWNoZVtpXS0+Y2VfZmxhZ3MgJj0gfkNFX0VYVEVOREVEOworCQlpZiAoY2FjaGVbaV0tPmNlX2ZsYWdzICYgQ0VfRVhURU5ERURfRkxBR1MpIHsKKwkJCWV4dGVuZGVkKys7CisJCQljYWNoZVtpXS0+Y2VfZmxhZ3MgfD0gQ0VfRVhURU5ERUQ7CisJCX0KKwl9CisKKwlpZiAoIWlzdGF0ZS0+dmVyc2lvbikgeworCQlpc3RhdGUtPnZlcnNpb24gPSBnZXRfaW5kZXhfZm9ybWF0X2RlZmF1bHQodGhlX3JlcG9zaXRvcnkpOworCQlpZiAoZ2l0X2Vudl9ib29sKCJHSVRfVEVTVF9TUExJVF9JTkRFWCIsIDApKQorCQkJaW5pdF9zcGxpdF9pbmRleChpc3RhdGUpOworCX0KKworCS8qIGRlbW90ZSB2ZXJzaW9uIDMgdG8gdmVyc2lvbiAyIHdoZW4gdGhlIGxhdHRlciBzdWZmaWNlcyAqLworCWlmIChpc3RhdGUtPnZlcnNpb24gPT0gMyB8fCBpc3RhdGUtPnZlcnNpb24gPT0gMikKKwkJaXN0YXRlLT52ZXJzaW9uID0gZXh0ZW5kZWQgPyAzIDogMjsKKworCWhkcl92ZXJzaW9uID0gaXN0YXRlLT52ZXJzaW9uOworCisJaGRyLmhkcl9zaWduYXR1cmUgPSBodG9ubChDQUNIRV9TSUdOQVRVUkUpOworCWhkci5oZHJfdmVyc2lvbiA9IGh0b25sKGhkcl92ZXJzaW9uKTsKKwloZHIuaGRyX2VudHJpZXMgPSBodG9ubChlbnRyaWVzIC0gcmVtb3ZlZCk7CisKKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZjKTsKKwlpZiAoY2Vfd3JpdGUoJmMsIG5ld2ZkLCAmaGRyLCBzaXplb2YoaGRyKSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIUhBVkVfVEhSRUFEUyB8fCBnaXRfY29uZmlnX2dldF9pbmRleF90aHJlYWRzKCZucl90aHJlYWRzKSkKKwkJbnJfdGhyZWFkcyA9IDE7CisKKwlpZiAobnJfdGhyZWFkcyAhPSAxICYmIHJlY29yZF9pZW90KCkpIHsKKwkJaW50IGllb3RfYmxvY2tzLCBjcHVzOworCisJCS8qCisJCSAqIGVuc3VyZSBkZWZhdWx0IG51bWJlciBvZiBpZW90IGJsb2NrcyBtYXBzIGV2ZW5seSB0byB0aGUKKwkJICogZGVmYXVsdCBudW1iZXIgb2YgdGhyZWFkcyB0aGF0IHdpbGwgcHJvY2VzcyB0aGVtIGxlYXZpbmcKKwkJICogcm9vbSBmb3IgdGhlIHRocmVhZCB0byBsb2FkIHRoZSBpbmRleCBleHRlbnNpb25zLgorCQkgKi8KKwkJaWYgKCFucl90aHJlYWRzKSB7CisJCQlpZW90X2Jsb2NrcyA9IGlzdGF0ZS0+Y2FjaGVfbnIgLyBUSFJFQURfQ09TVDsKKwkJCWNwdXMgPSBvbmxpbmVfY3B1cygpOworCQkJaWYgKGllb3RfYmxvY2tzID4gY3B1cyAtIDEpCisJCQkJaWVvdF9ibG9ja3MgPSBjcHVzIC0gMTsKKwkJfSBlbHNlIHsKKwkJCWllb3RfYmxvY2tzID0gbnJfdGhyZWFkczsKKwkJCWlmIChpZW90X2Jsb2NrcyA+IGlzdGF0ZS0+Y2FjaGVfbnIpCisJCQkJaWVvdF9ibG9ja3MgPSBpc3RhdGUtPmNhY2hlX25yOworCQl9CisKKwkJLyoKKwkJICogbm8gcmVhc29uIHRvIHdyaXRlIG91dCB0aGUgSUVPVCBleHRlbnNpb24gaWYgd2UgZG9uJ3QKKwkJICogaGF2ZSBlbm91Z2ggYmxvY2tzIHRvIHV0aWxpemUgbXVsdGktdGhyZWFkaW5nCisJCSAqLworCQlpZiAoaWVvdF9ibG9ja3MgPiAxKSB7CisJCQlpZW90ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGluZGV4X2VudHJ5X29mZnNldF90YWJsZSkKKwkJCQkrIChpZW90X2Jsb2NrcyAqIHNpemVvZihzdHJ1Y3QgaW5kZXhfZW50cnlfb2Zmc2V0KSkpOworCQkJaWVvdF9lbnRyaWVzID0gRElWX1JPVU5EX1VQKGVudHJpZXMsIGllb3RfYmxvY2tzKTsKKwkJfQorCX0KKworCW9mZnNldCA9IGxzZWVrKG5ld2ZkLCAwLCBTRUVLX0NVUik7CisJaWYgKG9mZnNldCA8IDApIHsKKwkJZnJlZShpZW90KTsKKwkJcmV0dXJuIC0xOworCX0KKwlvZmZzZXQgKz0gd3JpdGVfYnVmZmVyX2xlbjsKKwluciA9IDA7CisJcHJldmlvdXNfbmFtZSA9IChoZHJfdmVyc2lvbiA9PSA0KSA/ICZwcmV2aW91c19uYW1lX2J1ZiA6IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBjYWNoZVtpXTsKKwkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNlX3VwdG9kYXRlKGNlKSAmJiBpc19yYWN5X3RpbWVzdGFtcChpc3RhdGUsIGNlKSkKKwkJCWNlX3NtdWRnZV9yYWNpbHlfY2xlYW5fZW50cnkoaXN0YXRlLCBjZSk7CisJCWlmIChpc19udWxsX29pZCgmY2UtPm9pZCkpIHsKKwkJCXN0YXRpYyBjb25zdCBjaGFyIG1zZ1tdID0gImNhY2hlIGVudHJ5IGhhcyBudWxsIHNoYTE6ICVzIjsKKwkJCXN0YXRpYyBpbnQgYWxsb3cgPSAtMTsKKworCQkJaWYgKGFsbG93IDwgMCkKKwkJCQlhbGxvdyA9IGdpdF9lbnZfYm9vbCgiR0lUX0FMTE9XX05VTExfU0hBMSIsIDApOworCQkJaWYgKGFsbG93KQorCQkJCXdhcm5pbmcobXNnLCBjZS0+bmFtZSk7CisJCQllbHNlCisJCQkJZXJyID0gZXJyb3IobXNnLCBjZS0+bmFtZSk7CisKKwkJCWRyb3BfY2FjaGVfdHJlZSA9IDE7CisJCX0KKwkJaWYgKGllb3QgJiYgaSAmJiAoaSAlIGllb3RfZW50cmllcyA9PSAwKSkgeworCQkJaWVvdC0+ZW50cmllc1tpZW90LT5ucl0ubnIgPSBucjsKKwkJCWllb3QtPmVudHJpZXNbaWVvdC0+bnJdLm9mZnNldCA9IG9mZnNldDsKKwkJCWllb3QtPm5yKys7CisJCQkvKgorCQkJICogSWYgd2UgaGF2ZSBhIFY0IGluZGV4LCBzZXQgdGhlIGZpcnN0IGJ5dGUgdG8gYW4gaW52YWxpZAorCQkJICogY2hhcmFjdGVyIHRvIGVuc3VyZSB0aGVyZSBpcyBub3RoaW5nIGNvbW1vbiB3aXRoIHRoZSBwcmV2aW91cworCQkJICogZW50cnkKKwkJCSAqLworCQkJaWYgKHByZXZpb3VzX25hbWUpCisJCQkJcHJldmlvdXNfbmFtZS0+YnVmWzBdID0gMDsKKwkJCW5yID0gMDsKKwkJCW9mZnNldCA9IGxzZWVrKG5ld2ZkLCAwLCBTRUVLX0NVUik7CisJCQlpZiAob2Zmc2V0IDwgMCkgeworCQkJCWZyZWUoaWVvdCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJb2Zmc2V0ICs9IHdyaXRlX2J1ZmZlcl9sZW47CisJCX0KKwkJaWYgKGNlX3dyaXRlX2VudHJ5KCZjLCBuZXdmZCwgY2UsIHByZXZpb3VzX25hbWUsIChzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5ICopJm9uZGlzaykgPCAwKQorCQkJZXJyID0gLTE7CisKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCQlucisrOworCX0KKwlpZiAoaWVvdCAmJiBucikgeworCQlpZW90LT5lbnRyaWVzW2llb3QtPm5yXS5uciA9IG5yOworCQlpZW90LT5lbnRyaWVzW2llb3QtPm5yXS5vZmZzZXQgPSBvZmZzZXQ7CisJCWllb3QtPm5yKys7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZwcmV2aW91c19uYW1lX2J1Zik7CisKKwlpZiAoZXJyKSB7CisJCWZyZWUoaWVvdCk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogV3JpdGUgZXh0ZW5zaW9uIGRhdGEgaGVyZSAqLworCW9mZnNldCA9IGxzZWVrKG5ld2ZkLCAwLCBTRUVLX0NVUik7CisJaWYgKG9mZnNldCA8IDApIHsKKwkJZnJlZShpZW90KTsKKwkJcmV0dXJuIC0xOworCX0KKwlvZmZzZXQgKz0gd3JpdGVfYnVmZmVyX2xlbjsKKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZlb2llX2MpOworCisJLyoKKwkgKiBMZXRzIHdyaXRlIG91dCBDQUNIRV9FWFRfSU5ERVhFTlRSWU9GRlNFVFRBQkxFIGZpcnN0IHNvIHRoYXQgd2UKKwkgKiBjYW4gbWluaW1pemUgdGhlIG51bWJlciBvZiBleHRlbnNpb25zIHdlIGhhdmUgdG8gc2NhbiB0aHJvdWdoIHRvCisJICogZmluZCBpdCBkdXJpbmcgbG9hZC4gIFdyaXRlIGl0IG91dCByZWdhcmRsZXNzIG9mIHRoZQorCSAqIHN0cmlwX2V4dGVuc2lvbnMgcGFyYW1ldGVyIGFzIHdlIG5lZWQgaXQgd2hlbiBsb2FkaW5nIHRoZSBzaGFyZWQKKwkgKiBpbmRleC4KKwkgKi8KKwlpZiAoaWVvdCkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJd3JpdGVfaWVvdF9leHRlbnNpb24oJnNiLCBpZW90KTsKKwkJZXJyID0gd3JpdGVfaW5kZXhfZXh0X2hlYWRlcigmYywgJmVvaWVfYywgbmV3ZmQsIENBQ0hFX0VYVF9JTkRFWEVOVFJZT0ZGU0VUVEFCTEUsIHNiLmxlbikgPCAwCisJCQl8fCBjZV93cml0ZSgmYywgbmV3ZmQsIHNiLmJ1Ziwgc2IubGVuKSA8IDA7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCWZyZWUoaWVvdCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCFzdHJpcF9leHRlbnNpb25zICYmIGlzdGF0ZS0+c3BsaXRfaW5kZXggJiYKKwkgICAgIWlzX251bGxfb2lkKCZpc3RhdGUtPnNwbGl0X2luZGV4LT5iYXNlX29pZCkpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCWVyciA9IHdyaXRlX2xpbmtfZXh0ZW5zaW9uKCZzYiwgaXN0YXRlKSA8IDAgfHwKKwkJCXdyaXRlX2luZGV4X2V4dF9oZWFkZXIoJmMsICZlb2llX2MsIG5ld2ZkLCBDQUNIRV9FWFRfTElOSywKKwkJCQkJICAgICAgIHNiLmxlbikgPCAwIHx8CisJCQljZV93cml0ZSgmYywgbmV3ZmQsIHNiLmJ1Ziwgc2IubGVuKSA8IDA7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gLTE7CisJfQorCWlmICghc3RyaXBfZXh0ZW5zaW9ucyAmJiAhZHJvcF9jYWNoZV90cmVlICYmIGlzdGF0ZS0+Y2FjaGVfdHJlZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJY2FjaGVfdHJlZV93cml0ZSgmc2IsIGlzdGF0ZS0+Y2FjaGVfdHJlZSk7CisJCWVyciA9IHdyaXRlX2luZGV4X2V4dF9oZWFkZXIoJmMsICZlb2llX2MsIG5ld2ZkLCBDQUNIRV9FWFRfVFJFRSwgc2IubGVuKSA8IDAKKwkJCXx8IGNlX3dyaXRlKCZjLCBuZXdmZCwgc2IuYnVmLCBzYi5sZW4pIDwgMDsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiAtMTsKKwl9CisJaWYgKCFzdHJpcF9leHRlbnNpb25zICYmIGlzdGF0ZS0+cmVzb2x2ZV91bmRvKSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCQlyZXNvbHZlX3VuZG9fd3JpdGUoJnNiLCBpc3RhdGUtPnJlc29sdmVfdW5kbyk7CisJCWVyciA9IHdyaXRlX2luZGV4X2V4dF9oZWFkZXIoJmMsICZlb2llX2MsIG5ld2ZkLCBDQUNIRV9FWFRfUkVTT0xWRV9VTkRPLAorCQkJCQkgICAgIHNiLmxlbikgPCAwCisJCQl8fCBjZV93cml0ZSgmYywgbmV3ZmQsIHNiLmJ1Ziwgc2IubGVuKSA8IDA7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gLTE7CisJfQorCWlmICghc3RyaXBfZXh0ZW5zaW9ucyAmJiBpc3RhdGUtPnVudHJhY2tlZCkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJd3JpdGVfdW50cmFja2VkX2V4dGVuc2lvbigmc2IsIGlzdGF0ZS0+dW50cmFja2VkKTsKKwkJZXJyID0gd3JpdGVfaW5kZXhfZXh0X2hlYWRlcigmYywgJmVvaWVfYywgbmV3ZmQsIENBQ0hFX0VYVF9VTlRSQUNLRUQsCisJCQkJCSAgICAgc2IubGVuKSA8IDAgfHwKKwkJCWNlX3dyaXRlKCZjLCBuZXdmZCwgc2IuYnVmLCBzYi5sZW4pIDwgMDsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiAtMTsKKwl9CisJaWYgKCFzdHJpcF9leHRlbnNpb25zICYmIGlzdGF0ZS0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlKSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCQl3cml0ZV9mc21vbml0b3JfZXh0ZW5zaW9uKCZzYiwgaXN0YXRlKTsKKwkJZXJyID0gd3JpdGVfaW5kZXhfZXh0X2hlYWRlcigmYywgJmVvaWVfYywgbmV3ZmQsIENBQ0hFX0VYVF9GU01PTklUT1IsIHNiLmxlbikgPCAwCisJCQl8fCBjZV93cml0ZSgmYywgbmV3ZmQsIHNiLmJ1Ziwgc2IubGVuKSA8IDA7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBDQUNIRV9FWFRfRU5ET0ZJTkRFWEVOVFJJRVMgbXVzdCBiZSB3cml0dGVuIGFzIHRoZSBsYXN0IGVudHJ5IGJlZm9yZSB0aGUgU0hBMQorCSAqIHNvIHRoYXQgaXQgY2FuIGJlIGZvdW5kIGFuZCBwcm9jZXNzZWQgYmVmb3JlIGFsbCB0aGUgaW5kZXggZW50cmllcyBhcmUKKwkgKiByZWFkLiAgV3JpdGUgaXQgb3V0IHJlZ2FyZGxlc3Mgb2YgdGhlIHN0cmlwX2V4dGVuc2lvbnMgcGFyYW1ldGVyIGFzIHdlIG5lZWQgaXQKKwkgKiB3aGVuIGxvYWRpbmcgdGhlIHNoYXJlZCBpbmRleC4KKwkgKi8KKwlpZiAob2Zmc2V0ICYmIHJlY29yZF9lb2llKCkpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCXdyaXRlX2VvaWVfZXh0ZW5zaW9uKCZzYiwgJmVvaWVfYywgb2Zmc2V0KTsKKwkJZXJyID0gd3JpdGVfaW5kZXhfZXh0X2hlYWRlcigmYywgTlVMTCwgbmV3ZmQsIENBQ0hFX0VYVF9FTkRPRklOREVYRU5UUklFUywgc2IubGVuKSA8IDAKKwkJCXx8IGNlX3dyaXRlKCZjLCBuZXdmZCwgc2IuYnVmLCBzYi5sZW4pIDwgMDsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoY2VfZmx1c2goJmMsIG5ld2ZkLCBpc3RhdGUtPm9pZC5oYXNoKSkKKwkJcmV0dXJuIC0xOworCWlmIChjbG9zZV90ZW1wZmlsZV9nZW50bHkodGVtcGZpbGUpKSB7CisJCWVycm9yKF8oImNvdWxkIG5vdCBjbG9zZSAnJXMnIiksIHRlbXBmaWxlLT5maWxlbmFtZS5idWYpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChzdGF0KHRlbXBmaWxlLT5maWxlbmFtZS5idWYsICZzdCkpCisJCXJldHVybiAtMTsKKwlpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPSAodW5zaWduZWQgaW50KXN0LnN0X210aW1lOworCWlzdGF0ZS0+dGltZXN0YW1wLm5zZWMgPSBTVF9NVElNRV9OU0VDKHN0KTsKKwl0cmFjZV9wZXJmb3JtYW5jZV9zaW5jZShzdGFydCwgIndyaXRlIGluZGV4LCBjaGFuZ2VkIG1hc2sgPSAleCIsIGlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCk7CisKKwkvKgorCSAqIFRPRE8gdHJhY2UyOiByZXBsYWNlICJ0aGVfcmVwb3NpdG9yeSIgd2l0aCB0aGUgYWN0dWFsIHJlcG8gaW5zdGFuY2UKKwkgKiB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gImlzdGF0ZSIuCisJICovCisJdHJhY2UyX2RhdGFfaW50bWF4KCJpbmRleCIsIHRoZV9yZXBvc2l0b3J5LCAid3JpdGUvdmVyc2lvbiIsCisJCQkgICBpc3RhdGUtPnZlcnNpb24pOworCXRyYWNlMl9kYXRhX2ludG1heCgiaW5kZXgiLCB0aGVfcmVwb3NpdG9yeSwgIndyaXRlL2NhY2hlX25yIiwKKwkJCSAgIGlzdGF0ZS0+Y2FjaGVfbnIpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2V0X2FsdGVybmF0ZV9pbmRleF9vdXRwdXQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlhbHRlcm5hdGVfaW5kZXhfb3V0cHV0ID0gbmFtZTsKK30KKworc3RhdGljIGludCBjb21taXRfbG9ja2VkX2luZGV4KHN0cnVjdCBsb2NrX2ZpbGUgKmxrKQoreworCWlmIChhbHRlcm5hdGVfaW5kZXhfb3V0cHV0KQorCQlyZXR1cm4gY29tbWl0X2xvY2tfZmlsZV90byhsaywgYWx0ZXJuYXRlX2luZGV4X291dHB1dCk7CisJZWxzZQorCQlyZXR1cm4gY29tbWl0X2xvY2tfZmlsZShsayk7Cit9CisKK3N0YXRpYyBpbnQgZG9fd3JpdGVfbG9ja2VkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgbG9ja19maWxlICpsb2NrLAorCQkJCSB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgcmV0OworCisJLyoKKwkgKiBUT0RPIHRyYWNlMjogcmVwbGFjZSAidGhlX3JlcG9zaXRvcnkiIHdpdGggdGhlIGFjdHVhbCByZXBvIGluc3RhbmNlCisJICogdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuICJpc3RhdGUiLgorCSAqLworCXRyYWNlMl9yZWdpb25fZW50ZXJfcHJpbnRmKCJpbmRleCIsICJkb193cml0ZV9pbmRleCIsIHRoZV9yZXBvc2l0b3J5LAorCQkJCSAgICIlcyIsIGxvY2stPnRlbXBmaWxlLT5maWxlbmFtZS5idWYpOworCXJldCA9IGRvX3dyaXRlX2luZGV4KGlzdGF0ZSwgbG9jay0+dGVtcGZpbGUsIDApOworCXRyYWNlMl9yZWdpb25fbGVhdmVfcHJpbnRmKCJpbmRleCIsICJkb193cml0ZV9pbmRleCIsIHRoZV9yZXBvc2l0b3J5LAorCQkJCSAgICIlcyIsIGxvY2stPnRlbXBmaWxlLT5maWxlbmFtZS5idWYpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoZmxhZ3MgJiBDT01NSVRfTE9DSykKKwkJcmV0ID0gY29tbWl0X2xvY2tlZF9pbmRleChsb2NrKTsKKwllbHNlCisJCXJldCA9IGNsb3NlX2xvY2tfZmlsZV9nZW50bHkobG9jayk7CisKKwlydW5faG9va19sZShOVUxMLCAicG9zdC1pbmRleC1jaGFuZ2UiLAorCQkJaXN0YXRlLT51cGRhdGVkX3dvcmtkaXIgPyAiMSIgOiAiMCIsCisJCQlpc3RhdGUtPnVwZGF0ZWRfc2tpcHdvcmt0cmVlID8gIjEiIDogIjAiLCBOVUxMKTsKKwlpc3RhdGUtPnVwZGF0ZWRfd29ya2RpciA9IDA7CisJaXN0YXRlLT51cGRhdGVkX3NraXB3b3JrdHJlZSA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdyaXRlX3NwbGl0X2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgICBzdHJ1Y3QgbG9ja19maWxlICpsb2NrLAorCQkJICAgICB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgcmV0OworCXByZXBhcmVfdG9fd3JpdGVfc3BsaXRfaW5kZXgoaXN0YXRlKTsKKwlyZXQgPSBkb193cml0ZV9sb2NrZWRfaW5kZXgoaXN0YXRlLCBsb2NrLCBmbGFncyk7CisJZmluaXNoX3dyaXRpbmdfc3BsaXRfaW5kZXgoaXN0YXRlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2hhcmVkX2luZGV4X2V4cGlyZSA9ICIyLndlZWtzLmFnbyI7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zaGFyZWRfaW5kZXhfZXhwaXJlX2RhdGUodm9pZCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBzaGFyZWRfaW5kZXhfZXhwaXJlX2RhdGU7CisJc3RhdGljIGludCBzaGFyZWRfaW5kZXhfZXhwaXJlX2RhdGVfcHJlcGFyZWQ7CisKKwlpZiAoIXNoYXJlZF9pbmRleF9leHBpcmVfZGF0ZV9wcmVwYXJlZCkgeworCQlnaXRfY29uZmlnX2dldF9leHBpcnkoInNwbGl0aW5kZXguc2hhcmVkaW5kZXhleHBpcmUiLAorCQkJCSAgICAgICZzaGFyZWRfaW5kZXhfZXhwaXJlKTsKKwkJc2hhcmVkX2luZGV4X2V4cGlyZV9kYXRlID0gYXBwcm94aWRhdGUoc2hhcmVkX2luZGV4X2V4cGlyZSk7CisJCXNoYXJlZF9pbmRleF9leHBpcmVfZGF0ZV9wcmVwYXJlZCA9IDE7CisJfQorCisJcmV0dXJuIHNoYXJlZF9pbmRleF9leHBpcmVfZGF0ZTsKK30KKworc3RhdGljIGludCBzaG91bGRfZGVsZXRlX3NoYXJlZF9pbmRleChjb25zdCBjaGFyICpzaGFyZWRfaW5kZXhfcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwl1bnNpZ25lZCBsb25nIGV4cGlyYXRpb247CisKKwkvKiBDaGVjayB0aW1lc3RhbXAgKi8KKwlleHBpcmF0aW9uID0gZ2V0X3NoYXJlZF9pbmRleF9leHBpcmVfZGF0ZSgpOworCWlmICghZXhwaXJhdGlvbikKKwkJcmV0dXJuIDA7CisJaWYgKHN0YXQoc2hhcmVkX2luZGV4X3BhdGgsICZzdCkpCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgc3RhdCAnJXMnIiksIHNoYXJlZF9pbmRleF9wYXRoKTsKKwlpZiAoc3Quc3RfbXRpbWUgPiBleHBpcmF0aW9uKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNsZWFuX3NoYXJlZF9pbmRleF9maWxlcyhjb25zdCBjaGFyICpjdXJyZW50X2hleCkKK3sKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlESVIgKmRpciA9IG9wZW5kaXIoZ2V0X2dpdF9kaXIoKSk7CisKKwlpZiAoIWRpcikKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oInVuYWJsZSB0byBvcGVuIGdpdCBkaXI6ICVzIiksIGdldF9naXRfZGlyKCkpOworCisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQljb25zdCBjaGFyICpzaGExX2hleDsKKwkJY29uc3QgY2hhciAqc2hhcmVkX2luZGV4X3BhdGg7CisJCWlmICghc2tpcF9wcmVmaXgoZGUtPmRfbmFtZSwgInNoYXJlZGluZGV4LiIsICZzaGExX2hleCkpCisJCQljb250aW51ZTsKKwkJaWYgKCFzdHJjbXAoc2hhMV9oZXgsIGN1cnJlbnRfaGV4KSkKKwkJCWNvbnRpbnVlOworCQlzaGFyZWRfaW5kZXhfcGF0aCA9IGdpdF9wYXRoKCIlcyIsIGRlLT5kX25hbWUpOworCQlpZiAoc2hvdWxkX2RlbGV0ZV9zaGFyZWRfaW5kZXgoc2hhcmVkX2luZGV4X3BhdGgpID4gMCAmJgorCQkgICAgdW5saW5rKHNoYXJlZF9pbmRleF9wYXRoKSkKKwkJCXdhcm5pbmdfZXJybm8oXygidW5hYmxlIHRvIHVubGluazogJXMiKSwgc2hhcmVkX2luZGV4X3BhdGgpOworCX0KKwljbG9zZWRpcihkaXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfc2hhcmVkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgICAgc3RydWN0IHRlbXBmaWxlICoqdGVtcCkKK3sKKwlzdHJ1Y3Qgc3BsaXRfaW5kZXggKnNpID0gaXN0YXRlLT5zcGxpdF9pbmRleDsKKwlpbnQgcmV0OworCisJbW92ZV9jYWNoZV90b19iYXNlX2luZGV4KGlzdGF0ZSk7CisKKwl0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50ZigiaW5kZXgiLCAic2hhcmVkL2RvX3dyaXRlX2luZGV4IiwKKwkJCQkgICB0aGVfcmVwb3NpdG9yeSwgIiVzIiwgKCp0ZW1wKS0+ZmlsZW5hbWUuYnVmKTsKKwlyZXQgPSBkb193cml0ZV9pbmRleChzaS0+YmFzZSwgKnRlbXAsIDEpOworCXRyYWNlMl9yZWdpb25fbGVhdmVfcHJpbnRmKCJpbmRleCIsICJzaGFyZWQvZG9fd3JpdGVfaW5kZXgiLAorCQkJCSAgIHRoZV9yZXBvc2l0b3J5LCAiJXMiLCAoKnRlbXApLT5maWxlbmFtZS5idWYpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBhZGp1c3Rfc2hhcmVkX3Blcm0oZ2V0X3RlbXBmaWxlX3BhdGgoKnRlbXApKTsKKwlpZiAocmV0KSB7CisJCWVycm9yKF8oImNhbm5vdCBmaXggcGVybWlzc2lvbiBiaXRzIG9uICclcyciKSwgZ2V0X3RlbXBmaWxlX3BhdGgoKnRlbXApKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gcmVuYW1lX3RlbXBmaWxlKHRlbXAsCisJCQkgICAgICBnaXRfcGF0aCgic2hhcmVkaW5kZXguJXMiLCBvaWRfdG9faGV4KCZzaS0+YmFzZS0+b2lkKSkpOworCWlmICghcmV0KSB7CisJCW9pZGNweSgmc2ktPmJhc2Vfb2lkLCAmc2ktPmJhc2UtPm9pZCk7CisJCWNsZWFuX3NoYXJlZF9pbmRleF9maWxlcyhvaWRfdG9faGV4KCZzaS0+YmFzZS0+b2lkKSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGludCBkZWZhdWx0X21heF9wZXJjZW50X3NwbGl0X2NoYW5nZSA9IDIwOworCitzdGF0aWMgaW50IHRvb19tYW55X25vdF9zaGFyZWRfZW50cmllcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpbnQgaSwgbm90X3NoYXJlZCA9IDA7CisJaW50IG1heF9zcGxpdCA9IGdpdF9jb25maWdfZ2V0X21heF9wZXJjZW50X3NwbGl0X2NoYW5nZSgpOworCisJc3dpdGNoIChtYXhfc3BsaXQpIHsKKwljYXNlIC0xOgorCQkvKiBub3Qgb3IgYmFkbHkgY29uZmlndXJlZDogdXNlIHRoZSBkZWZhdWx0IHZhbHVlICovCisJCW1heF9zcGxpdCA9IGRlZmF1bHRfbWF4X3BlcmNlbnRfc3BsaXRfY2hhbmdlOworCQlicmVhazsKKwljYXNlIDA6CisJCXJldHVybiAxOyAvKiAwJSBtZWFucyBhbHdheXMgd3JpdGUgYSBuZXcgc2hhcmVkIGluZGV4ICovCisJY2FzZSAxMDA6CisJCXJldHVybiAwOyAvKiAxMDAlIG1lYW5zIG5ldmVyIHdyaXRlIGEgbmV3IHNoYXJlZCBpbmRleCAqLworCWRlZmF1bHQ6CisJCWJyZWFrOyAvKiBqdXN0IHVzZSB0aGUgY29uZmlndXJlZCB2YWx1ZSAqLworCX0KKworCS8qIENvdW50IG5vdCBzaGFyZWQgZW50cmllcyAqLworCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWlmICghY2UtPmluZGV4KQorCQkJbm90X3NoYXJlZCsrOworCX0KKworCXJldHVybiAoaW50NjRfdClpc3RhdGUtPmNhY2hlX25yICogbWF4X3NwbGl0IDwgKGludDY0X3Qpbm90X3NoYXJlZCAqIDEwMDsKK30KKworaW50IHdyaXRlX2xvY2tlZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGxvY2tfZmlsZSAqbG9jaywKKwkJICAgICAgIHVuc2lnbmVkIGZsYWdzKQoreworCWludCBuZXdfc2hhcmVkX2luZGV4LCByZXQ7CisJc3RydWN0IHNwbGl0X2luZGV4ICpzaSA9IGlzdGF0ZS0+c3BsaXRfaW5kZXg7CisKKwlpZiAoZ2l0X2Vudl9ib29sKCJHSVRfVEVTVF9DSEVDS19DQUNIRV9UUkVFIiwgMCkpCisJCWNhY2hlX3RyZWVfdmVyaWZ5KHRoZV9yZXBvc2l0b3J5LCBpc3RhdGUpOworCisJaWYgKChmbGFncyAmIFNLSVBfSUZfVU5DSEFOR0VEKSAmJiAhaXN0YXRlLT5jYWNoZV9jaGFuZ2VkKSB7CisJCWlmIChmbGFncyAmIENPTU1JVF9MT0NLKQorCQkJcm9sbGJhY2tfbG9ja19maWxlKGxvY2spOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoaXN0YXRlLT5mc21vbml0b3JfbGFzdF91cGRhdGUpCisJCWZpbGxfZnNtb25pdG9yX2JpdG1hcChpc3RhdGUpOworCisJaWYgKCFzaSB8fCBhbHRlcm5hdGVfaW5kZXhfb3V0cHV0IHx8CisJICAgIChpc3RhdGUtPmNhY2hlX2NoYW5nZWQgJiB+RVhUTUFTSykpIHsKKwkJaWYgKHNpKQorCQkJb2lkY2xyKCZzaS0+YmFzZV9vaWQpOworCQlyZXQgPSBkb193cml0ZV9sb2NrZWRfaW5kZXgoaXN0YXRlLCBsb2NrLCBmbGFncyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChnaXRfZW52X2Jvb2woIkdJVF9URVNUX1NQTElUX0lOREVYIiwgMCkpIHsKKwkJaW50IHYgPSBzaS0+YmFzZV9vaWQuaGFzaFswXTsKKwkJaWYgKCh2ICYgMTUpIDwgNikKKwkJCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCB8PSBTUExJVF9JTkRFWF9PUkRFUkVEOworCX0KKwlpZiAodG9vX21hbnlfbm90X3NoYXJlZF9lbnRyaWVzKGlzdGF0ZSkpCisJCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCB8PSBTUExJVF9JTkRFWF9PUkRFUkVEOworCisJbmV3X3NoYXJlZF9pbmRleCA9IGlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCAmIFNQTElUX0lOREVYX09SREVSRUQ7CisKKwlpZiAobmV3X3NoYXJlZF9pbmRleCkgeworCQlzdHJ1Y3QgdGVtcGZpbGUgKnRlbXA7CisJCWludCBzYXZlZF9lcnJubzsKKworCQkvKiBTYW1lIGluaXRpYWwgcGVybWlzc2lvbnMgYXMgdGhlIG1haW4gLmdpdC9pbmRleCBmaWxlICovCisJCXRlbXAgPSBta3NfdGVtcGZpbGVfc20oZ2l0X3BhdGgoInNoYXJlZGluZGV4X1hYWFhYWCIpLCAwLCAwNjY2KTsKKwkJaWYgKCF0ZW1wKSB7CisJCQlvaWRjbHIoJnNpLT5iYXNlX29pZCk7CisJCQlyZXQgPSBkb193cml0ZV9sb2NrZWRfaW5kZXgoaXN0YXRlLCBsb2NrLCBmbGFncyk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZXQgPSB3cml0ZV9zaGFyZWRfaW5kZXgoaXN0YXRlLCAmdGVtcCk7CisKKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJaWYgKGlzX3RlbXBmaWxlX2FjdGl2ZSh0ZW1wKSkKKwkJCWRlbGV0ZV90ZW1wZmlsZSgmdGVtcCk7CisJCWVycm5vID0gc2F2ZWRfZXJybm87CisKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHdyaXRlX3NwbGl0X2luZGV4KGlzdGF0ZSwgbG9jaywgZmxhZ3MpOworCisJLyogRnJlc2hlbiB0aGUgc2hhcmVkIGluZGV4IG9ubHkgaWYgdGhlIHNwbGl0LWluZGV4IHdhcyB3cml0dGVuICovCisJaWYgKCFyZXQgJiYgIW5ld19zaGFyZWRfaW5kZXggJiYgIWlzX251bGxfb2lkKCZzaS0+YmFzZV9vaWQpKSB7CisJCWNvbnN0IGNoYXIgKnNoYXJlZF9pbmRleCA9IGdpdF9wYXRoKCJzaGFyZWRpbmRleC4lcyIsCisJCQkJCQkgICAgb2lkX3RvX2hleCgmc2ktPmJhc2Vfb2lkKSk7CisJCWZyZXNoZW5fc2hhcmVkX2luZGV4KHNoYXJlZF9pbmRleCwgMSk7CisJfQorCitvdXQ6CisJaWYgKGZsYWdzICYgQ09NTUlUX0xPQ0spCisJCXJvbGxiYWNrX2xvY2tfZmlsZShsb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmVhZCB0aGUgaW5kZXggZmlsZSB0aGF0IGlzIHBvdGVudGlhbGx5IHVubWVyZ2VkIGludG8gZ2l2ZW4KKyAqIGluZGV4X3N0YXRlLCBkcm9wcGluZyBhbnkgdW5tZXJnZWQgZW50cmllcyB0byBzdGFnZSAjMCAocG90ZW50aWFsbHkKKyAqIHJlc3VsdGluZyBpbiBhIHBhdGggYXBwZWFyaW5nIGFzIGJvdGggYSBmaWxlIGFuZCBhIGRpcmVjdG9yeSBpbiB0aGUKKyAqIGluZGV4OyB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGNsZWFyIG91dCB0aGUgZXh0cmEgZW50cmllcworICogYmVmb3JlIHdyaXRpbmcgdGhlIGluZGV4IHRvIGEgdHJlZSkuICBSZXR1cm5zIHRydWUgaWYgdGhlIGluZGV4IGlzCisgKiB1bm1lcmdlZC4gIENhbGxlcnMgd2hvIHdhbnQgdG8gcmVmdXNlIHRvIHdvcmsgZnJvbSBhbiB1bm1lcmdlZAorICogc3RhdGUgY2FuIGNhbGwgdGhpcyBhbmQgY2hlY2sgaXRzIHJldHVybiB2YWx1ZSwgaW5zdGVhZCBvZiBjYWxsaW5nCisgKiByZWFkX2NhY2hlKCkuCisgKi8KK2ludCByZXBvX3JlYWRfaW5kZXhfdW5tZXJnZWQoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGU7CisJaW50IGk7CisJaW50IHVubWVyZ2VkID0gMDsKKworCXJlcG9fcmVhZF9pbmRleChyZXBvKTsKKwlpc3RhdGUgPSByZXBvLT5pbmRleDsKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKm5ld19jZTsKKwkJaW50IGxlbjsKKworCQlpZiAoIWNlX3N0YWdlKGNlKSkKKwkJCWNvbnRpbnVlOworCQl1bm1lcmdlZCA9IDE7CisJCWxlbiA9IGNlX25hbWVsZW4oY2UpOworCQluZXdfY2UgPSBtYWtlX2VtcHR5X2NhY2hlX2VudHJ5KGlzdGF0ZSwgbGVuKTsKKwkJbWVtY3B5KG5ld19jZS0+bmFtZSwgY2UtPm5hbWUsIGxlbik7CisJCW5ld19jZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3MoMCkgfCBDRV9DT05GTElDVEVEOworCQluZXdfY2UtPmNlX25hbWVsZW4gPSBsZW47CisJCW5ld19jZS0+Y2VfbW9kZSA9IGNlLT5jZV9tb2RlOworCQlpZiAoYWRkX2luZGV4X2VudHJ5KGlzdGF0ZSwgbmV3X2NlLCBBRERfQ0FDSEVfU0tJUF9ERkNIRUNLKSkKKwkJCXJldHVybiBlcnJvcihfKCIlczogY2Fubm90IGRyb3AgdG8gc3RhZ2UgIzAiKSwKKwkJCQkgICAgIG5ld19jZS0+bmFtZSk7CisJfQorCXJldHVybiB1bm1lcmdlZDsKK30KKworLyoKKyAqIFJldHVybnMgMSBpZiB0aGUgcGF0aCBpcyBhbiAib3RoZXIiIHBhdGggd2l0aCByZXNwZWN0IHRvCisgKiB0aGUgaW5kZXg7IHRoYXQgaXMsIHRoZSBwYXRoIGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlIGluZGV4IGF0IGFsbCwKKyAqIGVpdGhlciBhcyBhIGZpbGUsIGEgZGlyZWN0b3J5IHdpdGggc29tZSBmaWxlcyBpbiB0aGUgaW5kZXgsCisgKiBvciBhcyBhbiB1bm1lcmdlZCBlbnRyeS4KKyAqCisgKiBXZSBoZWxwZnVsbHkgcmVtb3ZlIGEgdHJhaWxpbmcgIi8iIGZyb20gZGlyZWN0b3JpZXMgc28gdGhhdAorICogdGhlIG91dHB1dCBvZiByZWFkX2RpcmVjdG9yeSBjYW4gYmUgdXNlZCBhcy1pcy4KKyAqLworaW50IGluZGV4X25hbWVfaXNfb3RoZXIoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCWludCBuYW1lbGVuKQoreworCWludCBwb3M7CisJaWYgKG5hbWVsZW4gJiYgbmFtZVtuYW1lbGVuIC0gMV0gPT0gJy8nKQorCQluYW1lbGVuLS07CisJcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBuYW1lLCBuYW1lbGVuKTsKKwlpZiAoMCA8PSBwb3MpCisJCXJldHVybiAwOwkvKiBleGFjdCBtYXRjaCAqLworCXBvcyA9IC1wb3MgLSAxOworCWlmIChwb3MgPCBpc3RhdGUtPmNhY2hlX25yKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW3Bvc107CisJCWlmIChjZV9uYW1lbGVuKGNlKSA9PSBuYW1lbGVuICYmCisJCSAgICAhbWVtY21wKGNlLT5uYW1lLCBuYW1lLCBuYW1lbGVuKSkKKwkJCXJldHVybiAwOyAvKiBZdXAsIHRoaXMgb25lIGV4aXN0cyB1bm1lcmdlZCAqLworCX0KKwlyZXR1cm4gMTsKK30KKwordm9pZCAqcmVhZF9ibG9iX2RhdGFfZnJvbV9pbmRleChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQljb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCWludCBwb3MsIGxlbjsKKwl1bnNpZ25lZCBsb25nIHN6OworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpkYXRhOworCisJbGVuID0gc3RybGVuKHBhdGgpOworCXBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgcGF0aCwgbGVuKTsKKwlpZiAocG9zIDwgMCkgeworCQkvKgorCQkgKiBXZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UsIGluIHdoaWNoCisJCSAqIGNhc2Ugd2Ugd291bGQgcmVhZCBzdGFnZSAjMiAob3VycykuCisJCSAqLworCQlpbnQgaTsKKwkJZm9yIChpID0gLXBvcyAtIDE7CisJCSAgICAgKHBvcyA8IDAgJiYgaSA8IGlzdGF0ZS0+Y2FjaGVfbnIgJiYKKwkJICAgICAgIXN0cmNtcChpc3RhdGUtPmNhY2hlW2ldLT5uYW1lLCBwYXRoKSk7CisJCSAgICAgaSsrKQorCQkJaWYgKGNlX3N0YWdlKGlzdGF0ZS0+Y2FjaGVbaV0pID09IDIpCisJCQkJcG9zID0gaTsKKwl9CisJaWYgKHBvcyA8IDApCisJCXJldHVybiBOVUxMOworCWRhdGEgPSByZWFkX29iamVjdF9maWxlKCZpc3RhdGUtPmNhY2hlW3Bvc10tPm9pZCwgJnR5cGUsICZzeik7CisJaWYgKCFkYXRhIHx8IHR5cGUgIT0gT0JKX0JMT0IpIHsKKwkJZnJlZShkYXRhKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChzaXplKQorCQkqc2l6ZSA9IHN6OworCXJldHVybiBkYXRhOworfQorCit2b2lkIHN0YXRfdmFsaWRpdHlfY2xlYXIoc3RydWN0IHN0YXRfdmFsaWRpdHkgKnN2KQoreworCUZSRUVfQU5EX05VTEwoc3YtPnNkKTsKK30KKworaW50IHN0YXRfdmFsaWRpdHlfY2hlY2soc3RydWN0IHN0YXRfdmFsaWRpdHkgKnN2LCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKHN0YXQocGF0aCwgJnN0KSA8IDApCisJCXJldHVybiBzdi0+c2QgPT0gTlVMTDsKKwlpZiAoIXN2LT5zZCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIFNfSVNSRUcoc3Quc3RfbW9kZSkgJiYgIW1hdGNoX3N0YXRfZGF0YShzdi0+c2QsICZzdCk7Cit9CisKK3ZvaWQgc3RhdF92YWxpZGl0eV91cGRhdGUoc3RydWN0IHN0YXRfdmFsaWRpdHkgKnN2LCBpbnQgZmQpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoZnN0YXQoZmQsICZzdCkgPCAwIHx8ICFTX0lTUkVHKHN0LnN0X21vZGUpKQorCQlzdGF0X3ZhbGlkaXR5X2NsZWFyKHN2KTsKKwllbHNlIHsKKwkJaWYgKCFzdi0+c2QpCisJCQlzdi0+c2QgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3RhdF9kYXRhKSk7CisJCWZpbGxfc3RhdF9kYXRhKHN2LT5zZCwgJnN0KTsKKwl9Cit9CisKK3ZvaWQgbW92ZV9pbmRleF9leHRlbnNpb25zKHN0cnVjdCBpbmRleF9zdGF0ZSAqZHN0LCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKnNyYykKK3sKKwlkc3QtPnVudHJhY2tlZCA9IHNyYy0+dW50cmFja2VkOworCXNyYy0+dW50cmFja2VkID0gTlVMTDsKKwlkc3QtPmNhY2hlX3RyZWUgPSBzcmMtPmNhY2hlX3RyZWU7CisJc3JjLT5jYWNoZV90cmVlID0gTlVMTDsKK30KKworc3RydWN0IGNhY2hlX2VudHJ5ICpkdXBfY2FjaGVfZW50cnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkgICAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJdW5zaWduZWQgaW50IHNpemUgPSBjZV9zaXplKGNlKTsKKwlpbnQgbWVtX3Bvb2xfYWxsb2NhdGVkOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqbmV3X2VudHJ5ID0gbWFrZV9lbXB0eV9jYWNoZV9lbnRyeShpc3RhdGUsIGNlX25hbWVsZW4oY2UpKTsKKwltZW1fcG9vbF9hbGxvY2F0ZWQgPSBuZXdfZW50cnktPm1lbV9wb29sX2FsbG9jYXRlZDsKKworCW1lbWNweShuZXdfZW50cnksIGNlLCBzaXplKTsKKwluZXdfZW50cnktPm1lbV9wb29sX2FsbG9jYXRlZCA9IG1lbV9wb29sX2FsbG9jYXRlZDsKKwlyZXR1cm4gbmV3X2VudHJ5OworfQorCit2b2lkIGRpc2NhcmRfY2FjaGVfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpZiAoY2UgJiYgc2hvdWxkX3ZhbGlkYXRlX2NhY2hlX2VudHJpZXMoKSkKKwkJbWVtc2V0KGNlLCAweENELCBjYWNoZV9lbnRyeV9zaXplKGNlLT5jZV9uYW1lbGVuKSk7CisKKwlpZiAoY2UgJiYgY2UtPm1lbV9wb29sX2FsbG9jYXRlZCkKKwkJcmV0dXJuOworCisJZnJlZShjZSk7Cit9CisKK2ludCBzaG91bGRfdmFsaWRhdGVfY2FjaGVfZW50cmllcyh2b2lkKQoreworCXN0YXRpYyBpbnQgdmFsaWRhdGVfaW5kZXhfY2FjaGVfZW50cmllcyA9IC0xOworCisJaWYgKHZhbGlkYXRlX2luZGV4X2NhY2hlX2VudHJpZXMgPCAwKSB7CisJCWlmIChnZXRlbnYoIkdJVF9URVNUX1ZBTElEQVRFX0lOREVYX0NBQ0hFX0VOVFJJRVMiKSkKKwkJCXZhbGlkYXRlX2luZGV4X2NhY2hlX2VudHJpZXMgPSAxOworCQllbHNlCisJCQl2YWxpZGF0ZV9pbmRleF9jYWNoZV9lbnRyaWVzID0gMDsKKwl9CisKKwlyZXR1cm4gdmFsaWRhdGVfaW5kZXhfY2FjaGVfZW50cmllczsKK30KKworI2RlZmluZSBFT0lFX1NJWkUgKDQgKyBHSVRfU0hBMV9SQVdTWikgLyogPDQtYnl0ZSBvZmZzZXQ+ICsgPDIwLWJ5dGUgaGFzaD4gKi8KKyNkZWZpbmUgRU9JRV9TSVpFX1dJVEhfSEVBREVSICg0ICsgNCArIEVPSUVfU0laRSkgLyogPDQtYnl0ZSBzaWduYXR1cmU+ICsgPDQtYnl0ZSBsZW5ndGg+ICsgRU9JRV9TSVpFICovCisKK3N0YXRpYyBzaXplX3QgcmVhZF9lb2llX2V4dGVuc2lvbihjb25zdCBjaGFyICptbWFwLCBzaXplX3QgbW1hcF9zaXplKQoreworCS8qCisJICogVGhlIGVuZCBvZiBpbmRleCBlbnRyaWVzIChFT0lFKSBleHRlbnNpb24gaXMgZ3VhcmFudGVlZCB0byBiZSBsYXN0CisJICogc28gdGhhdCBpdCBjYW4gYmUgZm91bmQgYnkgc2Nhbm5pbmcgYmFja3dhcmRzIGZyb20gdGhlIEVPRi4KKwkgKgorCSAqICJFT0lFIgorCSAqIDw0LWJ5dGUgbGVuZ3RoPgorCSAqIDw0LWJ5dGUgb2Zmc2V0PgorCSAqIDwyMC1ieXRlIGhhc2g+CisJICovCisJY29uc3QgY2hhciAqaW5kZXgsICplb2llOworCXVpbnQzMl90IGV4dHNpemU7CisJc2l6ZV90IG9mZnNldCwgc3JjX29mZnNldDsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9SQVdTWl07CisJZ2l0X2hhc2hfY3R4IGM7CisKKwkvKiBlbnN1cmUgd2UgaGF2ZSBhbiBpbmRleCBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gYW4gRU9JRSBleHRlbnNpb24gKi8KKwlpZiAobW1hcF9zaXplIDwgc2l6ZW9mKHN0cnVjdCBjYWNoZV9oZWFkZXIpICsgRU9JRV9TSVpFX1dJVEhfSEVBREVSICsgdGhlX2hhc2hfYWxnby0+cmF3c3opCisJCXJldHVybiAwOworCisJLyogdmFsaWRhdGUgdGhlIGV4dGVuc2lvbiBzaWduYXR1cmUgKi8KKwlpbmRleCA9IGVvaWUgPSBtbWFwICsgbW1hcF9zaXplIC0gRU9JRV9TSVpFX1dJVEhfSEVBREVSIC0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJaWYgKENBQ0hFX0VYVChpbmRleCkgIT0gQ0FDSEVfRVhUX0VORE9GSU5ERVhFTlRSSUVTKQorCQlyZXR1cm4gMDsKKwlpbmRleCArPSBzaXplb2YodWludDMyX3QpOworCisJLyogdmFsaWRhdGUgdGhlIGV4dGVuc2lvbiBzaXplICovCisJZXh0c2l6ZSA9IGdldF9iZTMyKGluZGV4KTsKKwlpZiAoZXh0c2l6ZSAhPSBFT0lFX1NJWkUpCisJCXJldHVybiAwOworCWluZGV4ICs9IHNpemVvZih1aW50MzJfdCk7CisKKwkvKgorCSAqIFZhbGlkYXRlIHRoZSBvZmZzZXQgd2UncmUgZ29pbmcgdG8gbG9vayBmb3IgdGhlIGZpcnN0IGV4dGVuc2lvbgorCSAqIHNpZ25hdHVyZSBpcyBhZnRlciB0aGUgaW5kZXggaGVhZGVyIGFuZCBiZWZvcmUgdGhlIGVvaWUgZXh0ZW5zaW9uLgorCSAqLworCW9mZnNldCA9IGdldF9iZTMyKGluZGV4KTsKKwlpZiAobW1hcCArIG9mZnNldCA8IG1tYXAgKyBzaXplb2Yoc3RydWN0IGNhY2hlX2hlYWRlcikpCisJCXJldHVybiAwOworCWlmIChtbWFwICsgb2Zmc2V0ID49IGVvaWUpCisJCXJldHVybiAwOworCWluZGV4ICs9IHNpemVvZih1aW50MzJfdCk7CisKKwkvKgorCSAqIFRoZSBoYXNoIGlzIGNvbXB1dGVkIG92ZXIgZXh0ZW5zaW9uIHR5cGVzIGFuZCB0aGVpciBzaXplcyAoYnV0IG5vdAorCSAqIHRoZWlyIGNvbnRlbnRzKS4gIEUuZy4gaWYgd2UgaGF2ZSAiVFJFRSIgZXh0ZW5zaW9uIHRoYXQgaXMgTi1ieXRlcworCSAqIGxvbmcsICJSRVVDIiBleHRlbnNpb24gdGhhdCBpcyBNLWJ5dGVzIGxvbmcsIGZvbGxvd2VkIGJ5ICJFT0lFIiwKKwkgKiB0aGVuIHRoZSBoYXNoIHdvdWxkIGJlOgorCSAqCisJICogU0hBLTEoIlRSRUUiICsgPGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBOPiArCisJICoJICJSRVVDIiArIDxiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgTT4pCisJICovCisJc3JjX29mZnNldCA9IG9mZnNldDsKKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZjKTsKKwl3aGlsZSAoc3JjX29mZnNldCA8IG1tYXBfc2l6ZSAtIHRoZV9oYXNoX2FsZ28tPnJhd3N6IC0gRU9JRV9TSVpFX1dJVEhfSEVBREVSKSB7CisJCS8qIEFmdGVyIGFuIGFycmF5IG9mIGFjdGl2ZV9uciBpbmRleCBlbnRyaWVzLAorCQkgKiB0aGVyZSBjYW4gYmUgYXJiaXRyYXJ5IG51bWJlciBvZiBleHRlbmRlZAorCQkgKiBzZWN0aW9ucywgZWFjaCBvZiB3aGljaCBpcyBwcmVmaXhlZCB3aXRoCisJCSAqIGV4dGVuc2lvbiBuYW1lICg0LWJ5dGUpIGFuZCBzZWN0aW9uIGxlbmd0aAorCQkgKiBpbiA0LWJ5dGUgbmV0d29yayBieXRlIG9yZGVyLgorCQkgKi8KKwkJdWludDMyX3QgZXh0c2l6ZTsKKwkJbWVtY3B5KCZleHRzaXplLCBtbWFwICsgc3JjX29mZnNldCArIDQsIDQpOworCQlleHRzaXplID0gbnRvaGwoZXh0c2l6ZSk7CisKKwkJLyogdmVyaWZ5IHRoZSBleHRlbnNpb24gc2l6ZSBpc24ndCBzbyBsYXJnZSBpdCB3aWxsIHdyYXAgYXJvdW5kICovCisJCWlmIChzcmNfb2Zmc2V0ICsgOCArIGV4dHNpemUgPCBzcmNfb2Zmc2V0KQorCQkJcmV0dXJuIDA7CisKKwkJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjLCBtbWFwICsgc3JjX29mZnNldCwgOCk7CisKKwkJc3JjX29mZnNldCArPSA4OworCQlzcmNfb2Zmc2V0ICs9IGV4dHNpemU7CisJfQorCXRoZV9oYXNoX2FsZ28tPmZpbmFsX2ZuKGhhc2gsICZjKTsKKwlpZiAoIWhhc2hlcShoYXNoLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKWluZGV4KSkKKwkJcmV0dXJuIDA7CisKKwkvKiBWYWxpZGF0ZSB0aGF0IHRoZSBleHRlbnNpb24gb2Zmc2V0cyByZXR1cm5lZCB1cyBiYWNrIHRvIHRoZSBlb2llIGV4dGVuc2lvbi4gKi8KKwlpZiAoc3JjX29mZnNldCAhPSBtbWFwX3NpemUgLSB0aGVfaGFzaF9hbGdvLT5yYXdzeiAtIEVPSUVfU0laRV9XSVRIX0hFQURFUikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9lb2llX2V4dGVuc2lvbihzdHJ1Y3Qgc3RyYnVmICpzYiwgZ2l0X2hhc2hfY3R4ICplb2llX2NvbnRleHQsIHNpemVfdCBvZmZzZXQpCit7CisJdWludDMyX3QgYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgaGFzaFtHSVRfTUFYX1JBV1NaXTsKKworCS8qIG9mZnNldCAqLworCXB1dF9iZTMyKCZidWZmZXIsIG9mZnNldCk7CisJc3RyYnVmX2FkZChzYiwgJmJ1ZmZlciwgc2l6ZW9mKHVpbnQzMl90KSk7CisKKwkvKiBoYXNoICovCisJdGhlX2hhc2hfYWxnby0+ZmluYWxfZm4oaGFzaCwgZW9pZV9jb250ZXh0KTsKKwlzdHJidWZfYWRkKHNiLCBoYXNoLCB0aGVfaGFzaF9hbGdvLT5yYXdzeik7Cit9CisKKyNkZWZpbmUgSUVPVF9WRVJTSU9OCSgxKQorCitzdGF0aWMgc3RydWN0IGluZGV4X2VudHJ5X29mZnNldF90YWJsZSAqcmVhZF9pZW90X2V4dGVuc2lvbihjb25zdCBjaGFyICptbWFwLCBzaXplX3QgbW1hcF9zaXplLCBzaXplX3Qgb2Zmc2V0KQoreworCWNvbnN0IGNoYXIgKmluZGV4ID0gTlVMTDsKKwl1aW50MzJfdCBleHRzaXplLCBleHRfdmVyc2lvbjsKKwlzdHJ1Y3QgaW5kZXhfZW50cnlfb2Zmc2V0X3RhYmxlICppZW90OworCWludCBpLCBucjsKKworCS8qIGZpbmQgdGhlIElFT1QgZXh0ZW5zaW9uICovCisJaWYgKCFvZmZzZXQpCisJCXJldHVybiBOVUxMOworCXdoaWxlIChvZmZzZXQgPD0gbW1hcF9zaXplIC0gdGhlX2hhc2hfYWxnby0+cmF3c3ogLSA4KSB7CisJCWV4dHNpemUgPSBnZXRfYmUzMihtbWFwICsgb2Zmc2V0ICsgNCk7CisJCWlmIChDQUNIRV9FWFQoKG1tYXAgKyBvZmZzZXQpKSA9PSBDQUNIRV9FWFRfSU5ERVhFTlRSWU9GRlNFVFRBQkxFKSB7CisJCQlpbmRleCA9IG1tYXAgKyBvZmZzZXQgKyA0ICsgNDsKKwkJCWJyZWFrOworCQl9CisJCW9mZnNldCArPSA4OworCQlvZmZzZXQgKz0gZXh0c2l6ZTsKKwl9CisJaWYgKCFpbmRleCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiB2YWxpZGF0ZSB0aGUgdmVyc2lvbiBpcyBJRU9UX1ZFUlNJT04gKi8KKwlleHRfdmVyc2lvbiA9IGdldF9iZTMyKGluZGV4KTsKKwlpZiAoZXh0X3ZlcnNpb24gIT0gSUVPVF9WRVJTSU9OKSB7CisJCWVycm9yKCJpbnZhbGlkIElFT1QgdmVyc2lvbiAlZCIsIGV4dF92ZXJzaW9uKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWluZGV4ICs9IHNpemVvZih1aW50MzJfdCk7CisKKwkvKiBleHRlbnNpb24gc2l6ZSAtIHZlcnNpb24gYnl0ZXMgLyBieXRlcyBwZXIgZW50cnkgKi8KKwluciA9IChleHRzaXplIC0gc2l6ZW9mKHVpbnQzMl90KSkgLyAoc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZih1aW50MzJfdCkpOworCWlmICghbnIpIHsKKwkJZXJyb3IoImludmFsaWQgbnVtYmVyIG9mIElFT1QgZW50cmllcyAlZCIsIG5yKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWllb3QgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5kZXhfZW50cnlfb2Zmc2V0X3RhYmxlKQorCQkgICAgICAgKyAobnIgKiBzaXplb2Yoc3RydWN0IGluZGV4X2VudHJ5X29mZnNldCkpKTsKKwlpZW90LT5uciA9IG5yOworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCWllb3QtPmVudHJpZXNbaV0ub2Zmc2V0ID0gZ2V0X2JlMzIoaW5kZXgpOworCQlpbmRleCArPSBzaXplb2YodWludDMyX3QpOworCQlpZW90LT5lbnRyaWVzW2ldLm5yID0gZ2V0X2JlMzIoaW5kZXgpOworCQlpbmRleCArPSBzaXplb2YodWludDMyX3QpOworCX0KKworCXJldHVybiBpZW90OworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9pZW90X2V4dGVuc2lvbihzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IGluZGV4X2VudHJ5X29mZnNldF90YWJsZSAqaWVvdCkKK3sKKwl1aW50MzJfdCBidWZmZXI7CisJaW50IGk7CisKKwkvKiB2ZXJzaW9uICovCisJcHV0X2JlMzIoJmJ1ZmZlciwgSUVPVF9WRVJTSU9OKTsKKwlzdHJidWZfYWRkKHNiLCAmYnVmZmVyLCBzaXplb2YodWludDMyX3QpKTsKKworCS8qIGllb3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaWVvdC0+bnI7IGkrKykgeworCisJCS8qIG9mZnNldCAqLworCQlwdXRfYmUzMigmYnVmZmVyLCBpZW90LT5lbnRyaWVzW2ldLm9mZnNldCk7CisJCXN0cmJ1Zl9hZGQoc2IsICZidWZmZXIsIHNpemVvZih1aW50MzJfdCkpOworCisJCS8qIGNvdW50ICovCisJCXB1dF9iZTMyKCZidWZmZXIsIGllb3QtPmVudHJpZXNbaV0ubnIpOworCQlzdHJidWZfYWRkKHNiLCAmYnVmZmVyLCBzaXplb2YodWludDMyX3QpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9yZWJhc2UtaW50ZXJhY3RpdmUuYyBiL3JlYmFzZS1pbnRlcmFjdGl2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2Mjg1M2IKLS0tIC9kZXYvbnVsbAorKysgYi9yZWJhc2UtaW50ZXJhY3RpdmUuYwpAQCAtMCwwICsxLDI1NCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAicmViYXNlLWludGVyYWN0aXZlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgZWRpdF90b2RvX2xpc3RfYWR2aWNlW10gPQorTl8oIllvdSBjYW4gZml4IHRoaXMgd2l0aCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgIgorImFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJy5cbiIKKyJPciB5b3UgY2FuIGFib3J0IHRoZSByZWJhc2Ugd2l0aCAnZ2l0IHJlYmFzZSIKKyIgLS1hYm9ydCcuXG4iKTsKKworZW51bSBtaXNzaW5nX2NvbW1pdF9jaGVja19sZXZlbCB7CisJTUlTU0lOR19DT01NSVRfQ0hFQ0tfSUdOT1JFID0gMCwKKwlNSVNTSU5HX0NPTU1JVF9DSEVDS19XQVJOLAorCU1JU1NJTkdfQ09NTUlUX0NIRUNLX0VSUk9SCit9OworCitzdGF0aWMgZW51bSBtaXNzaW5nX2NvbW1pdF9jaGVja19sZXZlbCBnZXRfbWlzc2luZ19jb21taXRfY2hlY2tfbGV2ZWwodm9pZCkKK3sKKwljb25zdCBjaGFyICp2YWx1ZTsKKworCWlmIChnaXRfY29uZmlnX2dldF92YWx1ZSgicmViYXNlLm1pc3Npbmdjb21taXRzY2hlY2siLCAmdmFsdWUpIHx8CisJCQkhc3RyY2FzZWNtcCgiaWdub3JlIiwgdmFsdWUpKQorCQlyZXR1cm4gTUlTU0lOR19DT01NSVRfQ0hFQ0tfSUdOT1JFOworCWlmICghc3RyY2FzZWNtcCgid2FybiIsIHZhbHVlKSkKKwkJcmV0dXJuIE1JU1NJTkdfQ09NTUlUX0NIRUNLX1dBUk47CisJaWYgKCFzdHJjYXNlY21wKCJlcnJvciIsIHZhbHVlKSkKKwkJcmV0dXJuIE1JU1NJTkdfQ09NTUlUX0NIRUNLX0VSUk9SOworCXdhcm5pbmcoXygidW5yZWNvZ25pemVkIHNldHRpbmcgJXMgZm9yIG9wdGlvbiAiCisJCSAgInJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiBJZ25vcmluZy4iKSwgdmFsdWUpOworCXJldHVybiBNSVNTSU5HX0NPTU1JVF9DSEVDS19JR05PUkU7Cit9CisKK3ZvaWQgYXBwZW5kX3RvZG9faGVscChpbnQgY29tbWFuZF9jb3VudCwKKwkJICAgICAgY29uc3QgY2hhciAqc2hvcnRyZXZpc2lvbnMsIGNvbnN0IGNoYXIgKnNob3J0b250bywKKwkJICAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWNvbnN0IGNoYXIgKm1zZyA9IF8oIlxuQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1hbmQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImIsIGJyZWFrID0gc3RvcCBoZXJlIChjb250aW51ZSByZWJhc2UgbGF0ZXIgd2l0aCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJylcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iKTsKKwl1bnNpZ25lZCBlZGl0X3RvZG8gPSAhKHNob3J0cmV2aXNpb25zICYmIHNob3J0b250byk7CisKKwlpZiAoIWVkaXRfdG9kbykgeworCQlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKwkJc3RyYnVmX2NvbW1lbnRlZF9hZGRmKGJ1ZiwgUV8oIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kKSIsCisJCQkJCSAgICAgICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZHMpIiwKKwkJCQkJICAgICAgY29tbWFuZF9jb3VudCksCisJCQkJICAgICAgc2hvcnRyZXZpc2lvbnMsIHNob3J0b250bywgY29tbWFuZF9jb3VudCk7CisJfQorCisJc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXMoYnVmLCBtc2csIHN0cmxlbihtc2cpKTsKKworCWlmIChnZXRfbWlzc2luZ19jb21taXRfY2hlY2tfbGV2ZWwoKSA9PSBNSVNTSU5HX0NPTU1JVF9DSEVDS19FUlJPUikKKwkJbXNnID0gXygiXG5EbyBub3QgcmVtb3ZlIGFueSBsaW5lLiBVc2UgJ2Ryb3AnICIKKwkJCSAiZXhwbGljaXRseSB0byByZW1vdmUgYSBjb21taXQuXG4iKTsKKwllbHNlCisJCW1zZyA9IF8oIlxuSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSAiCisJCQkgIlRIQVQgQ09NTUlUIFdJTEwgQkUgTE9TVC5cbiIpOworCisJc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXMoYnVmLCBtc2csIHN0cmxlbihtc2cpKTsKKworCWlmIChlZGl0X3RvZG8pCisJCW1zZyA9IF8oIlxuWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgIgorCQkJIm9mIGFuIG9uZ29pbmcgaW50ZXJhY3RpdmUgcmViYXNlLlxuIgorCQkJIlRvIGNvbnRpbnVlIHJlYmFzZSBhZnRlciBlZGl0aW5nLCBydW46XG4iCisJCQkiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuXG4iKTsKKwllbHNlCisJCW1zZyA9IF8oIlxuSG93ZXZlciwgaWYgeW91IHJlbW92ZSBldmVyeXRoaW5nLCAiCisJCQkidGhlIHJlYmFzZSB3aWxsIGJlIGFib3J0ZWQuXG5cbiIpOworCisJc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXMoYnVmLCBtc2csIHN0cmxlbihtc2cpKTsKK30KKworaW50IGVkaXRfdG9kb19saXN0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsCisJCSAgIHN0cnVjdCB0b2RvX2xpc3QgKm5ld190b2RvLCBjb25zdCBjaGFyICpzaG9ydHJldmlzaW9ucywKKwkJICAgY29uc3QgY2hhciAqc2hvcnRvbnRvLCB1bnNpZ25lZCBmbGFncykKK3sKKwljb25zdCBjaGFyICp0b2RvX2ZpbGUgPSByZWJhc2VfcGF0aF90b2RvKCksCisJCSp0b2RvX2JhY2t1cCA9IHJlYmFzZV9wYXRoX3RvZG9fYmFja3VwKCk7CisJdW5zaWduZWQgaW5pdGlhbCA9IHNob3J0cmV2aXNpb25zICYmIHNob3J0b250bzsKKwlpbnQgaW5jb3JyZWN0ID0gMDsKKworCS8qIElmIHRoZSB1c2VyIGlzIGVkaXRpbmcgdGhlIHRvZG8gbGlzdCwgd2UgZmlyc3QgdHJ5IHRvIHBhcnNlCisJICogaXQuICBJZiB0aGVyZSBpcyBhbiBlcnJvciwgd2UgZG8gbm90IHJldHVybiwgYmVjYXVzZSB0aGUgdXNlcgorCSAqIG1pZ2h0IHdhbnQgdG8gZml4IGl0IGluIHRoZSBmaXJzdCBwbGFjZS4gKi8KKwlpZiAoIWluaXRpYWwpCisJCWluY29ycmVjdCA9IHRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcihyLCB0b2RvX2xpc3QtPmJ1Zi5idWYsIHRvZG9fbGlzdCkgfAorCQkJZmlsZV9leGlzdHMocmViYXNlX3BhdGhfZHJvcHBlZCgpKTsKKworCWlmICh0b2RvX2xpc3Rfd3JpdGVfdG9fZmlsZShyLCB0b2RvX2xpc3QsIHRvZG9fZmlsZSwgc2hvcnRyZXZpc2lvbnMsIHNob3J0b250bywKKwkJCQkgICAgLTEsIGZsYWdzIHwgVE9ET19MSVNUX1NIT1JURU5fSURTIHwgVE9ET19MSVNUX0FQUEVORF9UT0RPX0hFTFApKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IHdyaXRlICclcyciKSwgdG9kb19maWxlKTsKKworCWlmICghaW5jb3JyZWN0ICYmCisJICAgIHRvZG9fbGlzdF93cml0ZV90b19maWxlKHIsIHRvZG9fbGlzdCwgdG9kb19iYWNrdXAsCisJCQkJICAgIHNob3J0cmV2aXNpb25zLCBzaG9ydG9udG8sIC0xLAorCQkJCSAgICAoZmxhZ3MgfCBUT0RPX0xJU1RfQVBQRU5EX1RPRE9fSEVMUCkgJiB+VE9ET19MSVNUX1NIT1JURU5fSURTKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iKSwgcmViYXNlX3BhdGhfdG9kb19iYWNrdXAoKSk7CisKKwlpZiAobGF1bmNoX3NlcXVlbmNlX2VkaXRvcih0b2RvX2ZpbGUsICZuZXdfdG9kby0+YnVmLCBOVUxMKSkKKwkJcmV0dXJuIC0yOworCisJc3RyYnVmX3N0cmlwc3BhY2UoJm5ld190b2RvLT5idWYsIDEpOworCWlmIChpbml0aWFsICYmIG5ld190b2RvLT5idWYubGVuID09IDApCisJCXJldHVybiAtMzsKKworCWlmICh0b2RvX2xpc3RfcGFyc2VfaW5zbl9idWZmZXIociwgbmV3X3RvZG8tPmJ1Zi5idWYsIG5ld190b2RvKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgXyhlZGl0X3RvZG9fbGlzdF9hZHZpY2UpKTsKKwkJcmV0dXJuIC00OworCX0KKworCWlmIChpbmNvcnJlY3QpIHsKKwkJaWYgKHRvZG9fbGlzdF9jaGVja19hZ2FpbnN0X2JhY2t1cChyLCBuZXdfdG9kbykpIHsKKwkJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfZHJvcHBlZCgpLCAiJXMiLCAiIik7CisJCQlyZXR1cm4gLTQ7CisJCX0KKworCQlpZiAoaW5jb3JyZWN0ID4gMCkKKwkJCXVubGluayhyZWJhc2VfcGF0aF9kcm9wcGVkKCkpOworCX0gZWxzZSBpZiAodG9kb19saXN0X2NoZWNrKHRvZG9fbGlzdCwgbmV3X3RvZG8pKSB7CisJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfZHJvcHBlZCgpLCAiJXMiLCAiIik7CisJCXJldHVybiAtNDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworZGVmaW5lX2NvbW1pdF9zbGFiKGNvbW1pdF9zZWVuLCB1bnNpZ25lZCBjaGFyKTsKKy8qCisgKiBDaGVjayBpZiB0aGUgdXNlciBkcm9wcGVkIHNvbWUgY29tbWl0cyBieSBtaXN0YWtlCisgKiBCZWhhdmlvdXIgZGV0ZXJtaW5lZCBieSByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4KKyAqIENoZWNrIGlmIHRoZXJlIGlzIGFuIHVucmVjb2duaXplZCBjb21tYW5kIG9yIGEKKyAqIGJhZCBTSEEtMSBpbiBhIGNvbW1hbmQuCisgKi8KK2ludCB0b2RvX2xpc3RfY2hlY2soc3RydWN0IHRvZG9fbGlzdCAqb2xkX3RvZG8sIHN0cnVjdCB0b2RvX2xpc3QgKm5ld190b2RvKQoreworCWVudW0gbWlzc2luZ19jb21taXRfY2hlY2tfbGV2ZWwgY2hlY2tfbGV2ZWwgPSBnZXRfbWlzc2luZ19jb21taXRfY2hlY2tfbGV2ZWwoKTsKKwlzdHJ1Y3Qgc3RyYnVmIG1pc3NpbmcgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmVzID0gMCwgaTsKKwlzdHJ1Y3QgY29tbWl0X3NlZW4gY29tbWl0X3NlZW47CisKKwlpbml0X2NvbW1pdF9zZWVuKCZjb21taXRfc2Vlbik7CisKKwlpZiAoY2hlY2tfbGV2ZWwgPT0gTUlTU0lOR19DT01NSVRfQ0hFQ0tfSUdOT1JFKQorCQlnb3RvIGxlYXZlX2NoZWNrOworCisJLyogTWFyayB0aGUgY29tbWl0cyBpbiBnaXQtcmViYXNlLXRvZG8gYXMgc2VlbiAqLworCWZvciAoaSA9IDA7IGkgPCBuZXdfdG9kby0+bnI7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBuZXdfdG9kby0+aXRlbXNbaV0uY29tbWl0OworCQlpZiAoY29tbWl0KQorCQkJKmNvbW1pdF9zZWVuX2F0KCZjb21taXRfc2VlbiwgY29tbWl0KSA9IDE7CisJfQorCisJLyogRmluZCBjb21taXRzIGluIGdpdC1yZWJhc2UtdG9kby5iYWNrdXAgeWV0IHVuc2VlbiAqLworCWZvciAoaSA9IG9sZF90b2RvLT5uciAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCXN0cnVjdCB0b2RvX2l0ZW0gKml0ZW0gPSBvbGRfdG9kby0+aXRlbXMgKyBpOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBpdGVtLT5jb21taXQ7CisJCWlmIChjb21taXQgJiYgISpjb21taXRfc2Vlbl9hdCgmY29tbWl0X3NlZW4sIGNvbW1pdCkpIHsKKwkJCXN0cmJ1Zl9hZGRmKCZtaXNzaW5nLCAiIC0gJXMgJS4qc1xuIiwKKwkJCQkgICAgZmluZF91bmlxdWVfYWJicmV2KCZjb21taXQtPm9iamVjdC5vaWQsIERFRkFVTFRfQUJCUkVWKSwKKwkJCQkgICAgaXRlbS0+YXJnX2xlbiwKKwkJCQkgICAgdG9kb19pdGVtX2dldF9hcmcob2xkX3RvZG8sIGl0ZW0pKTsKKwkJCSpjb21taXRfc2Vlbl9hdCgmY29tbWl0X3NlZW4sIGNvbW1pdCkgPSAxOworCQl9CisJfQorCisJLyogV2FybiBhYm91dCBtaXNzaW5nIGNvbW1pdHMgKi8KKwlpZiAoIW1pc3NpbmcubGVuKQorCQlnb3RvIGxlYXZlX2NoZWNrOworCisJaWYgKGNoZWNrX2xldmVsID09IE1JU1NJTkdfQ09NTUlUX0NIRUNLX0VSUk9SKQorCQlyZXMgPSAxOworCisJZnByaW50ZihzdGRlcnIsCisJCV8oIldhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LlxuIgorCQkiRHJvcHBlZCBjb21taXRzIChuZXdlciB0byBvbGRlcik6XG4iKSk7CisKKwkvKiBNYWtlIHRoZSBsaXN0IHVzZXItZnJpZW5kbHkgYW5kIGRpc3BsYXkgKi8KKwlmcHV0cyhtaXNzaW5nLmJ1Ziwgc3RkZXJyKTsKKwlzdHJidWZfcmVsZWFzZSgmbWlzc2luZyk7CisKKwlmcHJpbnRmKHN0ZGVyciwgXygiVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgXCJkcm9wXCIgdG8gIgorCQkiZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuXG5cbiIKKwkJIlVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlICIKKwkJInRoZSBsZXZlbCBvZiB3YXJuaW5ncy5cbiIKKwkJIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci5cblxuIikpOworCisJZnByaW50ZihzdGRlcnIsIF8oZWRpdF90b2RvX2xpc3RfYWR2aWNlKSk7CisKK2xlYXZlX2NoZWNrOgorCWNsZWFyX2NvbW1pdF9zZWVuKCZjb21taXRfc2Vlbik7CisJcmV0dXJuIHJlczsKK30KKworaW50IHRvZG9fbGlzdF9jaGVja19hZ2FpbnN0X2JhY2t1cChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0KQoreworCXN0cnVjdCB0b2RvX2xpc3QgYmFja3VwID0gVE9ET19MSVNUX0lOSVQ7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYmFja3VwLmJ1ZiwgcmViYXNlX3BhdGhfdG9kb19iYWNrdXAoKSwgMCkgPiAwKSB7CisJCXRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcihyLCBiYWNrdXAuYnVmLmJ1ZiwgJmJhY2t1cCk7CisJCXJlcyA9IHRvZG9fbGlzdF9jaGVjaygmYmFja3VwLCB0b2RvX2xpc3QpOworCX0KKworCXRvZG9fbGlzdF9yZWxlYXNlKCZiYWNrdXApOworCXJldHVybiByZXM7Cit9CisKK2ludCBjaGVja190b2RvX2xpc3RfZnJvbV9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXN0cnVjdCB0b2RvX2xpc3Qgb2xkX3RvZG8gPSBUT0RPX0xJU1RfSU5JVCwgbmV3X3RvZG8gPSBUT0RPX0xJU1RfSU5JVDsKKwlpbnQgcmVzID0gMDsKKworCWlmIChzdHJidWZfcmVhZF9maWxlKCZuZXdfdG9kby5idWYsIHJlYmFzZV9wYXRoX3RvZG8oKSwgMCkgPCAwKSB7CisJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCByZWFkICclcycuIiksIHJlYmFzZV9wYXRoX3RvZG8oKSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChzdHJidWZfcmVhZF9maWxlKCZvbGRfdG9kby5idWYsIHJlYmFzZV9wYXRoX3RvZG9fYmFja3VwKCksIDApIDwgMCkgeworCQlyZXMgPSBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCAnJXMnLiIpLCByZWJhc2VfcGF0aF90b2RvX2JhY2t1cCgpKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmVzID0gdG9kb19saXN0X3BhcnNlX2luc25fYnVmZmVyKHIsIG9sZF90b2RvLmJ1Zi5idWYsICZvbGRfdG9kbyk7CisJaWYgKCFyZXMpCisJCXJlcyA9IHRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcihyLCBuZXdfdG9kby5idWYuYnVmLCAmbmV3X3RvZG8pOworCWlmIChyZXMpCisJCWZwcmludGYoc3RkZXJyLCBfKGVkaXRfdG9kb19saXN0X2FkdmljZSkpOworCWlmICghcmVzKQorCQlyZXMgPSB0b2RvX2xpc3RfY2hlY2soJm9sZF90b2RvLCAmbmV3X3RvZG8pOworb3V0OgorCXRvZG9fbGlzdF9yZWxlYXNlKCZvbGRfdG9kbyk7CisJdG9kb19saXN0X3JlbGVhc2UoJm5ld190b2RvKTsKKworCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9yZWJhc2UtaW50ZXJhY3RpdmUuaCBiL3JlYmFzZS1pbnRlcmFjdGl2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMmNmMGUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWJhc2UtaW50ZXJhY3RpdmUuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIFJFQkFTRV9JTlRFUkFDVElWRV9ICisjZGVmaW5lIFJFQkFTRV9JTlRFUkFDVElWRV9ICisKK3N0cnVjdCBzdHJidWY7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKK3N0cnVjdCB0b2RvX2xpc3Q7CisKK3ZvaWQgYXBwZW5kX3RvZG9faGVscChpbnQgY29tbWFuZF9jb3VudCwKKwkJICAgICAgY29uc3QgY2hhciAqc2hvcnRyZXZpc2lvbnMsIGNvbnN0IGNoYXIgKnNob3J0b250bywKKwkJICAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmKTsKK2ludCBlZGl0X3RvZG9fbGlzdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0LAorCQkgICBzdHJ1Y3QgdG9kb19saXN0ICpuZXdfdG9kbywgY29uc3QgY2hhciAqc2hvcnRyZXZpc2lvbnMsCisJCSAgIGNvbnN0IGNoYXIgKnNob3J0b250bywgdW5zaWduZWQgZmxhZ3MpOworCitpbnQgdG9kb19saXN0X2NoZWNrKHN0cnVjdCB0b2RvX2xpc3QgKm9sZF90b2RvLCBzdHJ1Y3QgdG9kb19saXN0ICpuZXdfdG9kbyk7CitpbnQgdG9kb19saXN0X2NoZWNrX2FnYWluc3RfYmFja3VwKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgIHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCk7CisKK2ludCBjaGVja190b2RvX2xpc3RfZnJvbV9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZWJhc2UuYyBiL3JlYmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MTM3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWJhc2UuYwpAQCAtMCwwICsxLDM1IEBACisjaW5jbHVkZSAicmViYXNlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKy8qCisgKiBQYXJzZXMgdGV4dHVhbCB2YWx1ZSBmb3IgcHVsbC5yZWJhc2UsIGJyYW5jaC48bmFtZT4ucmViYXNlLCBldGMuCisgKiBVbnJlY29nbmlzZWQgdmFsdWUgeWllbGRzIFJFQkFTRV9JTlZBTElELCB3aGljaCB0cmFkaXRpb25hbGx5IGlzCisgKiB0cmVhdGVkIHRoZSBzYW1lIHdheSBhcyBSRUJBU0VfRkFMU0UuCisgKgorICogVGhlIGNhbGxlcnMgdGhhdCBjYXJlIGlmIChhbnkpIHJlYmFzZSBpcyByZXF1ZXN0ZWQgc2hvdWxkIHNheQorICogICBpZiAoUkVCQVNFX1RSVUUgPD0gcmViYXNlX3BhcnNlX3ZhbHVlKHN0cmluZykpCisgKgorICogVGhlIGNhbGxlcnMgdGhhdCB3YW50IHRvIGRpZmZlcmVuY2lhdGUgYW4gdW5yZWNvZ25pc2VkIHZhbHVlIGFuZAorICogZmFsc2UgY2FuIGRvIHNvIGJ5IHRyZWF0aW5nIF9JTlZBTElEIGFuZCBfRkFMU0UgZGlmZmVyZW50bHkuCisgKi8KK2VudW0gcmViYXNlX3R5cGUgcmViYXNlX3BhcnNlX3ZhbHVlKGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCB2ID0gZ2l0X3BhcnNlX21heWJlX2Jvb2wodmFsdWUpOworCisJaWYgKCF2KQorCQlyZXR1cm4gUkVCQVNFX0ZBTFNFOworCWVsc2UgaWYgKHYgPiAwKQorCQlyZXR1cm4gUkVCQVNFX1RSVUU7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInByZXNlcnZlIikgfHwgIXN0cmNtcCh2YWx1ZSwgInAiKSkKKwkJcmV0dXJuIFJFQkFTRV9QUkVTRVJWRTsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibWVyZ2VzIikgfHwgIXN0cmNtcCh2YWx1ZSwgIm0iKSkKKwkJcmV0dXJuIFJFQkFTRV9NRVJHRVM7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImludGVyYWN0aXZlIikgfHwgIXN0cmNtcCh2YWx1ZSwgImkiKSkKKwkJcmV0dXJuIFJFQkFTRV9JTlRFUkFDVElWRTsKKwkvKgorCSAqIFBsZWFzZSB1cGRhdGUgX2dpdF9jb25maWcoKSBpbiBnaXQtY29tcGxldGlvbi5iYXNoIHdoZW4geW91CisJICogYWRkIG5ldyByZWJhc2UgbW9kZXMuCisJICovCisKKwlyZXR1cm4gUkVCQVNFX0lOVkFMSUQ7Cit9CmRpZmYgLS1naXQgYS9yZWJhc2UuaCBiL3JlYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNzIzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWJhc2UuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIFJFQkFTRV9ICisjZGVmaW5lIFJFQkFTRV9ICisKK2VudW0gcmViYXNlX3R5cGUgeworCVJFQkFTRV9JTlZBTElEID0gLTEsCisJUkVCQVNFX0ZBTFNFID0gMCwKKwlSRUJBU0VfVFJVRSwKKwlSRUJBU0VfUFJFU0VSVkUsCisJUkVCQVNFX01FUkdFUywKKwlSRUJBU0VfSU5URVJBQ1RJVkUKK307CisKK2VudW0gcmViYXNlX3R5cGUgcmViYXNlX3BhcnNlX3ZhbHVlKGNvbnN0IGNoYXIgKnZhbHVlKTsKKworI2VuZGlmIC8qIFJFQkFTRSAqLwpkaWZmIC0tZ2l0IGEvcmVmLWZpbHRlci5jIGIvcmVmLWZpbHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmN2I3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWYtZmlsdGVyLmMKQEAgLTAsMCArMSwyNTE2IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJ3aWxkbWF0Y2guaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInJlZi1maWx0ZXIuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAidHJhaWxlci5oIgorI2luY2x1ZGUgInd0LXN0YXR1cy5oIgorI2luY2x1ZGUgImNvbW1pdC1zbGFiLmgiCisjaW5jbHVkZSAiY29tbWl0LWdyYXBoLmgiCisjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorCitzdGF0aWMgc3RydWN0IHJlZl9tc2cgeworCWNvbnN0IGNoYXIgKmdvbmU7CisJY29uc3QgY2hhciAqYWhlYWQ7CisJY29uc3QgY2hhciAqYmVoaW5kOworCWNvbnN0IGNoYXIgKmFoZWFkX2JlaGluZDsKK30gbXNncyA9IHsKKwkgLyogVW50cmFuc2xhdGVkIHBsdW1iaW5nIG1lc3NhZ2VzOiAqLworCSJnb25lIiwKKwkiYWhlYWQgJWQiLAorCSJiZWhpbmQgJWQiLAorCSJhaGVhZCAlZCwgYmVoaW5kICVkIgorfTsKKwordm9pZCBzZXR1cF9yZWZfZmlsdGVyX3BvcmNlbGFpbl9tc2codm9pZCkKK3sKKwltc2dzLmdvbmUgPSBfKCJnb25lIik7CisJbXNncy5haGVhZCA9IF8oImFoZWFkICVkIik7CisJbXNncy5iZWhpbmQgPSBfKCJiZWhpbmQgJWQiKTsKKwltc2dzLmFoZWFkX2JlaGluZCA9IF8oImFoZWFkICVkLCBiZWhpbmQgJWQiKTsKK30KKwordHlwZWRlZiBlbnVtIHsgRklFTERfU1RSLCBGSUVMRF9VTE9ORywgRklFTERfVElNRSB9IGNtcF90eXBlOwordHlwZWRlZiBlbnVtIHsgQ09NUEFSRV9FUVVBTCwgQ09NUEFSRV9VTkVRVUFMLCBDT01QQVJFX05PTkUgfSBjbXBfc3RhdHVzOwordHlwZWRlZiBlbnVtIHsgU09VUkNFX05PTkUgPSAwLCBTT1VSQ0VfT0JKLCBTT1VSQ0VfT1RIRVIgfSBpbmZvX3NvdXJjZTsKKworc3RydWN0IGFsaWduIHsKKwlhbGlnbl90eXBlIHBvc2l0aW9uOworCXVuc2lnbmVkIGludCB3aWR0aDsKK307CisKK3N0cnVjdCBpZl90aGVuX2Vsc2UgeworCWNtcF9zdGF0dXMgY21wX3N0YXR1czsKKwljb25zdCBjaGFyICpzdHI7CisJdW5zaWduZWQgaW50IHRoZW5fYXRvbV9zZWVuIDogMSwKKwkJZWxzZV9hdG9tX3NlZW4gOiAxLAorCQljb25kaXRpb25fc2F0aXNmaWVkIDogMTsKK307CisKK3N0cnVjdCByZWZuYW1lX2F0b20geworCWVudW0geyBSX05PUk1BTCwgUl9TSE9SVCwgUl9MU1RSSVAsIFJfUlNUUklQIH0gb3B0aW9uOworCWludCBsc3RyaXAsIHJzdHJpcDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXhwYW5kX2RhdGEgeworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJb2ZmX3QgZGlza19zaXplOworCXN0cnVjdCBvYmplY3RfaWQgZGVsdGFfYmFzZV9vaWQ7CisJdm9pZCAqY29udGVudDsKKworCXN0cnVjdCBvYmplY3RfaW5mbyBpbmZvOworfSBvaSwgb2lfZGVyZWY7CisKK3N0cnVjdCByZWZfdG9fd29ya3RyZWVfZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwlzdHJ1Y3Qgd29ya3RyZWUgKnd0OyAvKiBrZXkgaXMgd3QtPmhlYWRfcmVmICovCit9OworCitzdGF0aWMgaW50IHJlZl90b193b3JrdHJlZV9tYXBfY21wZm5jKGNvbnN0IHZvaWQgKnVudXNlZF9sb29rdXBkYXRhLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICprcHRyLAorCQkJCSAgICAgIGNvbnN0IHZvaWQgKmtleWRhdGFfYWthX3JlZm5hbWUpCit7CisJY29uc3Qgc3RydWN0IHJlZl90b193b3JrdHJlZV9lbnRyeSAqZSwgKms7CisKKwllID0gY29udGFpbmVyX29mKGVwdHIsIGNvbnN0IHN0cnVjdCByZWZfdG9fd29ya3RyZWVfZW50cnksIGVudCk7CisJayA9IGNvbnRhaW5lcl9vZihrcHRyLCBjb25zdCBzdHJ1Y3QgcmVmX3RvX3dvcmt0cmVlX2VudHJ5LCBlbnQpOworCisJcmV0dXJuIHN0cmNtcChlLT53dC0+aGVhZF9yZWYsCisJCWtleWRhdGFfYWthX3JlZm5hbWUgPyBrZXlkYXRhX2FrYV9yZWZuYW1lIDogay0+d3QtPmhlYWRfcmVmKTsKK30KKworc3RhdGljIHN0cnVjdCByZWZfdG9fd29ya3RyZWVfbWFwIHsKKwlzdHJ1Y3QgaGFzaG1hcCBtYXA7CisJc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzOworfSByZWZfdG9fd29ya3RyZWVfbWFwOworCisvKgorICogQW4gYXRvbSBpcyBhIHZhbGlkIGZpZWxkIGF0b20gbGlzdGVkIGJlbG93LCBwb3NzaWJseSBwcmVmaXhlZCB3aXRoCisgKiBhICIqIiB0byBkZW5vdGUgZGVyZWZfdGFnKCkuCisgKgorICogV2UgcGFyc2UgZ2l2ZW4gZm9ybWF0IHN0cmluZyBhbmQgc29ydCBzcGVjaWZpZXJzLCBhbmQgbWFrZSBhIGxpc3QKKyAqIG9mIHByb3BlcnRpZXMgdGhhdCB3ZSBuZWVkIHRvIGV4dHJhY3Qgb3V0IG9mIG9iamVjdHMuICByZWZfYXJyYXlfaXRlbQorICogc3RydWN0dXJlIHdpbGwgaG9sZCBhbiBhcnJheSBvZiB2YWx1ZXMgZXh0cmFjdGVkIHRoYXQgY2FuIGJlCisgKiBpbmRleGVkIHdpdGggdGhlICJhdG9tIG51bWJlciIsIHdoaWNoIGlzIGFuIGluZGV4IGludG8gdGhpcworICogYXJyYXkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNlZF9hdG9tIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNtcF90eXBlIHR5cGU7CisJaW5mb19zb3VyY2Ugc291cmNlOworCXVuaW9uIHsKKwkJY2hhciBjb2xvcltDT0xPUl9NQVhMRU5dOworCQlzdHJ1Y3QgYWxpZ24gYWxpZ247CisJCXN0cnVjdCB7CisJCQllbnVtIHsKKwkJCQlSUl9SRUYsIFJSX1RSQUNLLCBSUl9UUkFDS1NIT1JULCBSUl9SRU1PVEVfTkFNRSwgUlJfUkVNT1RFX1JFRgorCQkJfSBvcHRpb247CisJCQlzdHJ1Y3QgcmVmbmFtZV9hdG9tIHJlZm5hbWU7CisJCQl1bnNpZ25lZCBpbnQgbm9icmFja2V0IDogMSwgcHVzaCA6IDEsIHB1c2hfcmVtb3RlIDogMTsKKwkJfSByZW1vdGVfcmVmOworCQlzdHJ1Y3QgeworCQkJZW51bSB7IENfQkFSRSwgQ19CT0RZLCBDX0JPRFlfREVQLCBDX0xJTkVTLCBDX1NJRywgQ19TVUIsIENfVFJBSUxFUlMgfSBvcHRpb247CisJCQlzdHJ1Y3QgcHJvY2Vzc190cmFpbGVyX29wdGlvbnMgdHJhaWxlcl9vcHRzOworCQkJdW5zaWduZWQgaW50IG5saW5lczsKKwkJfSBjb250ZW50czsKKwkJc3RydWN0IHsKKwkJCWNtcF9zdGF0dXMgY21wX3N0YXR1czsKKwkJCWNvbnN0IGNoYXIgKnN0cjsKKwkJfSBpZl90aGVuX2Vsc2U7CisJCXN0cnVjdCB7CisJCQllbnVtIHsgT19GVUxMLCBPX0xFTkdUSCwgT19TSE9SVCB9IG9wdGlvbjsKKwkJCXVuc2lnbmVkIGludCBsZW5ndGg7CisJCX0gb2JqZWN0bmFtZTsKKwkJc3RydWN0IHJlZm5hbWVfYXRvbSByZWZuYW1lOworCQljaGFyICpoZWFkOworCX0gdTsKK30gKnVzZWRfYXRvbTsKK3N0YXRpYyBpbnQgdXNlZF9hdG9tX2NudCwgbmVlZF90YWdnZWQsIG5lZWRfc3ltcmVmOworCisvKgorICogRXhwYW5kIHN0cmluZywgYXBwZW5kIGl0IHRvIHN0cmJ1ZiAqc2IsIHRoZW4gcmV0dXJuIGVycm9yIGNvZGUgcmV0LgorICogQWxsb3cgdG8gc2F2ZSBmZXcgbGluZXMgb2YgY29kZS4KKyAqLworc3RhdGljIGludCBzdHJidWZfYWRkZl9yZXQoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCByZXQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKHNiLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY29sb3JfYXRvbV9wYXJzZXIoY29uc3Qgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCwgc3RydWN0IHVzZWRfYXRvbSAqYXRvbSwKKwkJCSAgICAgY29uc3QgY2hhciAqY29sb3JfdmFsdWUsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlpZiAoIWNvbG9yX3ZhbHVlKQorCQlyZXR1cm4gc3RyYnVmX2FkZGZfcmV0KGVyciwgLTEsIF8oImV4cGVjdGVkIGZvcm1hdDogJSUoY29sb3I6PGNvbG9yPikiKSk7CisJaWYgKGNvbG9yX3BhcnNlKGNvbG9yX3ZhbHVlLCBhdG9tLT51LmNvbG9yKSA8IDApCisJCXJldHVybiBzdHJidWZfYWRkZl9yZXQoZXJyLCAtMSwgXygidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiKSwKKwkJCQkgICAgICAgY29sb3JfdmFsdWUpOworCS8qCisJICogV2UgY2hlY2sgdGhpcyBhZnRlciB3ZSd2ZSBwYXJzZWQgdGhlIGNvbG9yLCB3aGljaCBsZXRzIHVzIGNvbXBsYWluCisJICogYWJvdXQgc3ludGFjdGljYWxseSBib2d1cyBjb2xvciBuYW1lcyBldmVuIGlmIHRoZXkgd29uJ3QgYmUgdXNlZC4KKwkgKi8KKwlpZiAoIXdhbnRfY29sb3IoZm9ybWF0LT51c2VfY29sb3IpKQorCQljb2xvcl9wYXJzZSgiIiwgYXRvbS0+dS5jb2xvcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVmbmFtZV9hdG9tX3BhcnNlcl9pbnRlcm5hbChzdHJ1Y3QgcmVmbmFtZV9hdG9tICphdG9tLCBjb25zdCBjaGFyICphcmcsCisJCQkJCSBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJaWYgKCFhcmcpCisJCWF0b20tPm9wdGlvbiA9IFJfTk9STUFMOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAic2hvcnQiKSkKKwkJYXRvbS0+b3B0aW9uID0gUl9TSE9SVDsKKwllbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICJsc3RyaXA9IiwgJmFyZykgfHwKKwkJIHNraXBfcHJlZml4KGFyZywgInN0cmlwPSIsICZhcmcpKSB7CisJCWF0b20tPm9wdGlvbiA9IFJfTFNUUklQOworCQlpZiAoc3RydG9sX2koYXJnLCAxMCwgJmF0b20tPmxzdHJpcCkpCisJCQlyZXR1cm4gc3RyYnVmX2FkZGZfcmV0KGVyciwgLTEsIF8oIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpsc3RyaXA9JXMiKSwgYXJnKTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgInJzdHJpcD0iLCAmYXJnKSkgeworCQlhdG9tLT5vcHRpb24gPSBSX1JTVFJJUDsKKwkJaWYgKHN0cnRvbF9pKGFyZywgMTAsICZhdG9tLT5yc3RyaXApKQorCQkJcmV0dXJuIHN0cmJ1Zl9hZGRmX3JldChlcnIsIC0xLCBfKCJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6cnN0cmlwPSVzIiksIGFyZyk7CisJfSBlbHNlCisJCXJldHVybiBzdHJidWZfYWRkZl9yZXQoZXJyLCAtMSwgXygidW5yZWNvZ25pemVkICUlKCVzKSBhcmd1bWVudDogJXMiKSwgbmFtZSwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZW1vdGVfcmVmX2F0b21fcGFyc2VyKGNvbnN0IHN0cnVjdCByZWZfZm9ybWF0ICpmb3JtYXQsIHN0cnVjdCB1c2VkX2F0b20gKmF0b20sCisJCQkJICBjb25zdCBjaGFyICphcmcsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcGFyYW1zID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJaW50IGk7CisKKwlpZiAoIXN0cmNtcChhdG9tLT5uYW1lLCAicHVzaCIpIHx8IHN0YXJ0c193aXRoKGF0b20tPm5hbWUsICJwdXNoOiIpKQorCQlhdG9tLT51LnJlbW90ZV9yZWYucHVzaCA9IDE7CisKKwlpZiAoIWFyZykgeworCQlhdG9tLT51LnJlbW90ZV9yZWYub3B0aW9uID0gUlJfUkVGOworCQlyZXR1cm4gcmVmbmFtZV9hdG9tX3BhcnNlcl9pbnRlcm5hbCgmYXRvbS0+dS5yZW1vdGVfcmVmLnJlZm5hbWUsCisJCQkJCQkgICAgYXJnLCBhdG9tLT5uYW1lLCBlcnIpOworCX0KKworCWF0b20tPnUucmVtb3RlX3JlZi5ub2JyYWNrZXQgPSAwOworCXN0cmluZ19saXN0X3NwbGl0KCZwYXJhbXMsIGFyZywgJywnLCAtMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcyA9IHBhcmFtcy5pdGVtc1tpXS5zdHJpbmc7CisKKwkJaWYgKCFzdHJjbXAocywgInRyYWNrIikpCisJCQlhdG9tLT51LnJlbW90ZV9yZWYub3B0aW9uID0gUlJfVFJBQ0s7CisJCWVsc2UgaWYgKCFzdHJjbXAocywgInRyYWNrc2hvcnQiKSkKKwkJCWF0b20tPnUucmVtb3RlX3JlZi5vcHRpb24gPSBSUl9UUkFDS1NIT1JUOworCQllbHNlIGlmICghc3RyY21wKHMsICJub2JyYWNrZXQiKSkKKwkJCWF0b20tPnUucmVtb3RlX3JlZi5ub2JyYWNrZXQgPSAxOworCQllbHNlIGlmICghc3RyY21wKHMsICJyZW1vdGVuYW1lIikpIHsKKwkJCWF0b20tPnUucmVtb3RlX3JlZi5vcHRpb24gPSBSUl9SRU1PVEVfTkFNRTsKKwkJCWF0b20tPnUucmVtb3RlX3JlZi5wdXNoX3JlbW90ZSA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChzLCAicmVtb3RlcmVmIikpIHsKKwkJCWF0b20tPnUucmVtb3RlX3JlZi5vcHRpb24gPSBSUl9SRU1PVEVfUkVGOworCQkJYXRvbS0+dS5yZW1vdGVfcmVmLnB1c2hfcmVtb3RlID0gMTsKKwkJfSBlbHNlIHsKKwkJCWF0b20tPnUucmVtb3RlX3JlZi5vcHRpb24gPSBSUl9SRUY7CisJCQlpZiAocmVmbmFtZV9hdG9tX3BhcnNlcl9pbnRlcm5hbCgmYXRvbS0+dS5yZW1vdGVfcmVmLnJlZm5hbWUsCisJCQkJCQkJIGFyZywgYXRvbS0+bmFtZSwgZXJyKSkgeworCQkJCXN0cmluZ19saXN0X2NsZWFyKCZwYXJhbXMsIDApOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCX0KKworCXN0cmluZ19saXN0X2NsZWFyKCZwYXJhbXMsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9iamVjdHR5cGVfYXRvbV9wYXJzZXIoY29uc3Qgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCwgc3RydWN0IHVzZWRfYXRvbSAqYXRvbSwKKwkJCQkgIGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWlmIChhcmcpCisJCXJldHVybiBzdHJidWZfYWRkZl9yZXQoZXJyLCAtMSwgXygiJSUob2JqZWN0dHlwZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiKSk7CisJaWYgKCphdG9tLT5uYW1lID09ICcqJykKKwkJb2lfZGVyZWYuaW5mby50eXBlcCA9ICZvaV9kZXJlZi50eXBlOworCWVsc2UKKwkJb2kuaW5mby50eXBlcCA9ICZvaS50eXBlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9iamVjdHNpemVfYXRvbV9wYXJzZXIoY29uc3Qgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCwgc3RydWN0IHVzZWRfYXRvbSAqYXRvbSwKKwkJCQkgIGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWlmICghYXJnKSB7CisJCWlmICgqYXRvbS0+bmFtZSA9PSAnKicpCisJCQlvaV9kZXJlZi5pbmZvLnNpemVwID0gJm9pX2RlcmVmLnNpemU7CisJCWVsc2UKKwkJCW9pLmluZm8uc2l6ZXAgPSAmb2kuc2l6ZTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZGlzayIpKSB7CisJCWlmICgqYXRvbS0+bmFtZSA9PSAnKicpCisJCQlvaV9kZXJlZi5pbmZvLmRpc2tfc2l6ZXAgPSAmb2lfZGVyZWYuZGlza19zaXplOworCQllbHNlCisJCQlvaS5pbmZvLmRpc2tfc2l6ZXAgPSAmb2kuZGlza19zaXplOworCX0gZWxzZQorCQlyZXR1cm4gc3RyYnVmX2FkZGZfcmV0KGVyciwgLTEsIF8oInVucmVjb2duaXplZCAlJShvYmplY3RzaXplKSBhcmd1bWVudDogJXMiKSwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWx0YWJhc2VfYXRvbV9wYXJzZXIoY29uc3Qgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCwgc3RydWN0IHVzZWRfYXRvbSAqYXRvbSwKKwkJCQkgY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJaWYgKGFyZykKKwkJcmV0dXJuIHN0cmJ1Zl9hZGRmX3JldChlcnIsIC0xLCBfKCIlJShkZWx0YWJhc2UpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIikpOworCWlmICgqYXRvbS0+bmFtZSA9PSAnKicpCisJCW9pX2RlcmVmLmluZm8uZGVsdGFfYmFzZV9vaWQgPSAmb2lfZGVyZWYuZGVsdGFfYmFzZV9vaWQ7CisJZWxzZQorCQlvaS5pbmZvLmRlbHRhX2Jhc2Vfb2lkID0gJm9pLmRlbHRhX2Jhc2Vfb2lkOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJvZHlfYXRvbV9wYXJzZXIoY29uc3Qgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCwgc3RydWN0IHVzZWRfYXRvbSAqYXRvbSwKKwkJCSAgICBjb25zdCBjaGFyICphcmcsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlpZiAoYXJnKQorCQlyZXR1cm4gc3RyYnVmX2FkZGZfcmV0KGVyciwgLTEsIF8oIiUlKGJvZHkpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIikpOworCWF0b20tPnUuY29udGVudHMub3B0aW9uID0gQ19CT0RZX0RFUDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJqZWN0X2F0b21fcGFyc2VyKGNvbnN0IHN0cnVjdCByZWZfZm9ybWF0ICpmb3JtYXQsIHN0cnVjdCB1c2VkX2F0b20gKmF0b20sCisJCQkgICAgICAgY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJaWYgKGFyZykKKwkJcmV0dXJuIHN0cmJ1Zl9hZGRmX3JldChlcnIsIC0xLCBfKCIlJShzdWJqZWN0KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIpKTsKKwlhdG9tLT51LmNvbnRlbnRzLm9wdGlvbiA9IENfU1VCOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRyYWlsZXJzX2F0b21fcGFyc2VyKGNvbnN0IHN0cnVjdCByZWZfZm9ybWF0ICpmb3JtYXQsIHN0cnVjdCB1c2VkX2F0b20gKmF0b20sCisJCQkJY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHN0cmluZ19saXN0IHBhcmFtcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWludCBpOworCisJYXRvbS0+dS5jb250ZW50cy50cmFpbGVyX29wdHMubm9fZGl2aWRlciA9IDE7CisKKwlpZiAoYXJnKSB7CisJCXN0cmluZ19saXN0X3NwbGl0KCZwYXJhbXMsIGFyZywgJywnLCAtMSk7CisJCWZvciAoaSA9IDA7IGkgPCBwYXJhbXMubnI7IGkrKykgeworCQkJY29uc3QgY2hhciAqcyA9IHBhcmFtcy5pdGVtc1tpXS5zdHJpbmc7CisJCQlpZiAoIXN0cmNtcChzLCAidW5mb2xkIikpCisJCQkJYXRvbS0+dS5jb250ZW50cy50cmFpbGVyX29wdHMudW5mb2xkID0gMTsKKwkJCWVsc2UgaWYgKCFzdHJjbXAocywgIm9ubHkiKSkKKwkJCQlhdG9tLT51LmNvbnRlbnRzLnRyYWlsZXJfb3B0cy5vbmx5X3RyYWlsZXJzID0gMTsKKwkJCWVsc2UgeworCQkJCXN0cmJ1Zl9hZGRmKGVyciwgXygidW5rbm93biAlJSh0cmFpbGVycykgYXJndW1lbnQ6ICVzIiksIHMpOworCQkJCXN0cmluZ19saXN0X2NsZWFyKCZwYXJhbXMsIDApOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCX0KKwlhdG9tLT51LmNvbnRlbnRzLm9wdGlvbiA9IENfVFJBSUxFUlM7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnBhcmFtcywgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29udGVudHNfYXRvbV9wYXJzZXIoY29uc3Qgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCwgc3RydWN0IHVzZWRfYXRvbSAqYXRvbSwKKwkJCQljb25zdCBjaGFyICphcmcsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlpZiAoIWFyZykKKwkJYXRvbS0+dS5jb250ZW50cy5vcHRpb24gPSBDX0JBUkU7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJib2R5IikpCisJCWF0b20tPnUuY29udGVudHMub3B0aW9uID0gQ19CT0RZOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAic2lnbmF0dXJlIikpCisJCWF0b20tPnUuY29udGVudHMub3B0aW9uID0gQ19TSUc7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJzdWJqZWN0IikpCisJCWF0b20tPnUuY29udGVudHMub3B0aW9uID0gQ19TVUI7CisJZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAidHJhaWxlcnMiLCAmYXJnKSkgeworCQlza2lwX3ByZWZpeChhcmcsICI6IiwgJmFyZyk7CisJCWlmICh0cmFpbGVyc19hdG9tX3BhcnNlcihmb3JtYXQsIGF0b20sICphcmcgPyBhcmcgOiBOVUxMLCBlcnIpKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAibGluZXM9IiwgJmFyZykpIHsKKwkJYXRvbS0+dS5jb250ZW50cy5vcHRpb24gPSBDX0xJTkVTOworCQlpZiAoc3RydG91bF91aShhcmcsIDEwLCAmYXRvbS0+dS5jb250ZW50cy5ubGluZXMpKQorCQkJcmV0dXJuIHN0cmJ1Zl9hZGRmX3JldChlcnIsIC0xLCBfKCJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIpLCBhcmcpOworCX0gZWxzZQorCQlyZXR1cm4gc3RyYnVmX2FkZGZfcmV0KGVyciwgLTEsIF8oInVucmVjb2duaXplZCAlJShjb250ZW50cykgYXJndW1lbnQ6ICVzIiksIGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2JqZWN0bmFtZV9hdG9tX3BhcnNlcihjb25zdCBzdHJ1Y3QgcmVmX2Zvcm1hdCAqZm9ybWF0LCBzdHJ1Y3QgdXNlZF9hdG9tICphdG9tLAorCQkJCSAgY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJaWYgKCFhcmcpCisJCWF0b20tPnUub2JqZWN0bmFtZS5vcHRpb24gPSBPX0ZVTEw7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJzaG9ydCIpKQorCQlhdG9tLT51Lm9iamVjdG5hbWUub3B0aW9uID0gT19TSE9SVDsKKwllbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICJzaG9ydD0iLCAmYXJnKSkgeworCQlhdG9tLT51Lm9iamVjdG5hbWUub3B0aW9uID0gT19MRU5HVEg7CisJCWlmIChzdHJ0b3VsX3VpKGFyZywgMTAsICZhdG9tLT51Lm9iamVjdG5hbWUubGVuZ3RoKSB8fAorCQkgICAgYXRvbS0+dS5vYmplY3RuYW1lLmxlbmd0aCA9PSAwKQorCQkJcmV0dXJuIHN0cmJ1Zl9hZGRmX3JldChlcnIsIC0xLCBfKCJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBvYmplY3RuYW1lOnNob3J0PSVzIiksIGFyZyk7CisJCWlmIChhdG9tLT51Lm9iamVjdG5hbWUubGVuZ3RoIDwgTUlOSU1VTV9BQkJSRVYpCisJCQlhdG9tLT51Lm9iamVjdG5hbWUubGVuZ3RoID0gTUlOSU1VTV9BQkJSRVY7CisJfSBlbHNlCisJCXJldHVybiBzdHJidWZfYWRkZl9yZXQoZXJyLCAtMSwgXygidW5yZWNvZ25pemVkICUlKG9iamVjdG5hbWUpIGFyZ3VtZW50OiAlcyIpLCBhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlZm5hbWVfYXRvbV9wYXJzZXIoY29uc3Qgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCwgc3RydWN0IHVzZWRfYXRvbSAqYXRvbSwKKwkJCSAgICAgICBjb25zdCBjaGFyICphcmcsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlyZXR1cm4gcmVmbmFtZV9hdG9tX3BhcnNlcl9pbnRlcm5hbCgmYXRvbS0+dS5yZWZuYW1lLCBhcmcsIGF0b20tPm5hbWUsIGVycik7Cit9CisKK3N0YXRpYyBhbGlnbl90eXBlIHBhcnNlX2FsaWduX3Bvc2l0aW9uKGNvbnN0IGNoYXIgKnMpCit7CisJaWYgKCFzdHJjbXAocywgInJpZ2h0IikpCisJCXJldHVybiBBTElHTl9SSUdIVDsKKwllbHNlIGlmICghc3RyY21wKHMsICJtaWRkbGUiKSkKKwkJcmV0dXJuIEFMSUdOX01JRERMRTsKKwllbHNlIGlmICghc3RyY21wKHMsICJsZWZ0IikpCisJCXJldHVybiBBTElHTl9MRUZUOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBhbGlnbl9hdG9tX3BhcnNlcihjb25zdCBzdHJ1Y3QgcmVmX2Zvcm1hdCAqZm9ybWF0LCBzdHJ1Y3QgdXNlZF9hdG9tICphdG9tLAorCQkJICAgICBjb25zdCBjaGFyICphcmcsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3QgYWxpZ24gKmFsaWduID0gJmF0b20tPnUuYWxpZ247CisJc3RydWN0IHN0cmluZ19saXN0IHBhcmFtcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWludCBpOworCXVuc2lnbmVkIGludCB3aWR0aCA9IH4wVTsKKworCWlmICghYXJnKQorCQlyZXR1cm4gc3RyYnVmX2FkZGZfcmV0KGVyciwgLTEsIF8oImV4cGVjdGVkIGZvcm1hdDogJSUoYWxpZ246PHdpZHRoPiw8cG9zaXRpb24+KSIpKTsKKworCWFsaWduLT5wb3NpdGlvbiA9IEFMSUdOX0xFRlQ7CisKKwlzdHJpbmdfbGlzdF9zcGxpdCgmcGFyYW1zLCBhcmcsICcsJywgLTEpOworCWZvciAoaSA9IDA7IGkgPCBwYXJhbXMubnI7IGkrKykgeworCQljb25zdCBjaGFyICpzID0gcGFyYW1zLml0ZW1zW2ldLnN0cmluZzsKKwkJaW50IHBvc2l0aW9uOworCisJCWlmIChza2lwX3ByZWZpeChzLCAicG9zaXRpb249IiwgJnMpKSB7CisJCQlwb3NpdGlvbiA9IHBhcnNlX2FsaWduX3Bvc2l0aW9uKHMpOworCQkJaWYgKHBvc2l0aW9uIDwgMCkgeworCQkJCXN0cmJ1Zl9hZGRmKGVyciwgXygidW5yZWNvZ25pemVkIHBvc2l0aW9uOiVzIiksIHMpOworCQkJCXN0cmluZ19saXN0X2NsZWFyKCZwYXJhbXMsIDApOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCWFsaWduLT5wb3NpdGlvbiA9IHBvc2l0aW9uOworCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KHMsICJ3aWR0aD0iLCAmcykpIHsKKwkJCWlmIChzdHJ0b3VsX3VpKHMsIDEwLCAmd2lkdGgpKSB7CisJCQkJc3RyYnVmX2FkZGYoZXJyLCBfKCJ1bnJlY29nbml6ZWQgd2lkdGg6JXMiKSwgcyk7CisJCQkJc3RyaW5nX2xpc3RfY2xlYXIoJnBhcmFtcywgMCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJ0b3VsX3VpKHMsIDEwLCAmd2lkdGgpKQorCQkJOworCQllbHNlIGlmICgocG9zaXRpb24gPSBwYXJzZV9hbGlnbl9wb3NpdGlvbihzKSkgPj0gMCkKKwkJCWFsaWduLT5wb3NpdGlvbiA9IHBvc2l0aW9uOworCQllbHNlIHsKKwkJCXN0cmJ1Zl9hZGRmKGVyciwgXygidW5yZWNvZ25pemVkICUlKGFsaWduKSBhcmd1bWVudDogJXMiKSwgcyk7CisJCQlzdHJpbmdfbGlzdF9jbGVhcigmcGFyYW1zLCAwKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCWlmICh3aWR0aCA9PSB+MFUpIHsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJnBhcmFtcywgMCk7CisJCXJldHVybiBzdHJidWZfYWRkZl9yZXQoZXJyLCAtMSwgXygicG9zaXRpdmUgd2lkdGggZXhwZWN0ZWQgd2l0aCB0aGUgJSUoYWxpZ24pIGF0b20iKSk7CisJfQorCWFsaWduLT53aWR0aCA9IHdpZHRoOworCXN0cmluZ19saXN0X2NsZWFyKCZwYXJhbXMsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlmX2F0b21fcGFyc2VyKGNvbnN0IHN0cnVjdCByZWZfZm9ybWF0ICpmb3JtYXQsIHN0cnVjdCB1c2VkX2F0b20gKmF0b20sCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWlmICghYXJnKSB7CisJCWF0b20tPnUuaWZfdGhlbl9lbHNlLmNtcF9zdGF0dXMgPSBDT01QQVJFX05PTkU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiZXF1YWxzPSIsICZhdG9tLT51LmlmX3RoZW5fZWxzZS5zdHIpKSB7CisJCWF0b20tPnUuaWZfdGhlbl9lbHNlLmNtcF9zdGF0dXMgPSBDT01QQVJFX0VRVUFMOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAibm90ZXF1YWxzPSIsICZhdG9tLT51LmlmX3RoZW5fZWxzZS5zdHIpKSB7CisJCWF0b20tPnUuaWZfdGhlbl9lbHNlLmNtcF9zdGF0dXMgPSBDT01QQVJFX1VORVFVQUw7CisJfSBlbHNlCisJCXJldHVybiBzdHJidWZfYWRkZl9yZXQoZXJyLCAtMSwgXygidW5yZWNvZ25pemVkICUlKGlmKSBhcmd1bWVudDogJXMiKSwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZWFkX2F0b21fcGFyc2VyKGNvbnN0IHN0cnVjdCByZWZfZm9ybWF0ICpmb3JtYXQsIHN0cnVjdCB1c2VkX2F0b20gKmF0b20sCisJCQkgICAgY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3Qgc3RyYnVmICp1bnVzZWRfZXJyKQoreworCWF0b20tPnUuaGVhZCA9IHJlc29sdmVfcmVmZHVwKCJIRUFEIiwgUkVTT0xWRV9SRUZfUkVBRElORywgTlVMTCwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW5mb19zb3VyY2Ugc291cmNlOworCWNtcF90eXBlIGNtcF90eXBlOworCWludCAoKnBhcnNlcikoY29uc3Qgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCwgc3RydWN0IHVzZWRfYXRvbSAqYXRvbSwKKwkJICAgICAgY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3Qgc3RyYnVmICplcnIpOworfSB2YWxpZF9hdG9tW10gPSB7CisJeyAicmVmbmFtZSIsIFNPVVJDRV9OT05FLCBGSUVMRF9TVFIsIHJlZm5hbWVfYXRvbV9wYXJzZXIgfSwKKwl7ICJvYmplY3R0eXBlIiwgU09VUkNFX09USEVSLCBGSUVMRF9TVFIsIG9iamVjdHR5cGVfYXRvbV9wYXJzZXIgfSwKKwl7ICJvYmplY3RzaXplIiwgU09VUkNFX09USEVSLCBGSUVMRF9VTE9ORywgb2JqZWN0c2l6ZV9hdG9tX3BhcnNlciB9LAorCXsgIm9iamVjdG5hbWUiLCBTT1VSQ0VfT1RIRVIsIEZJRUxEX1NUUiwgb2JqZWN0bmFtZV9hdG9tX3BhcnNlciB9LAorCXsgImRlbHRhYmFzZSIsIFNPVVJDRV9PVEhFUiwgRklFTERfU1RSLCBkZWx0YWJhc2VfYXRvbV9wYXJzZXIgfSwKKwl7ICJ0cmVlIiwgU09VUkNFX09CSiB9LAorCXsgInBhcmVudCIsIFNPVVJDRV9PQkogfSwKKwl7ICJudW1wYXJlbnQiLCBTT1VSQ0VfT0JKLCBGSUVMRF9VTE9ORyB9LAorCXsgIm9iamVjdCIsIFNPVVJDRV9PQkogfSwKKwl7ICJ0eXBlIiwgU09VUkNFX09CSiB9LAorCXsgInRhZyIsIFNPVVJDRV9PQkogfSwKKwl7ICJhdXRob3IiLCBTT1VSQ0VfT0JKIH0sCisJeyAiYXV0aG9ybmFtZSIsIFNPVVJDRV9PQkogfSwKKwl7ICJhdXRob3JlbWFpbCIsIFNPVVJDRV9PQkogfSwKKwl7ICJhdXRob3JkYXRlIiwgU09VUkNFX09CSiwgRklFTERfVElNRSB9LAorCXsgImNvbW1pdHRlciIsIFNPVVJDRV9PQkogfSwKKwl7ICJjb21taXR0ZXJuYW1lIiwgU09VUkNFX09CSiB9LAorCXsgImNvbW1pdHRlcmVtYWlsIiwgU09VUkNFX09CSiB9LAorCXsgImNvbW1pdHRlcmRhdGUiLCBTT1VSQ0VfT0JKLCBGSUVMRF9USU1FIH0sCisJeyAidGFnZ2VyIiwgU09VUkNFX09CSiB9LAorCXsgInRhZ2dlcm5hbWUiLCBTT1VSQ0VfT0JKIH0sCisJeyAidGFnZ2VyZW1haWwiLCBTT1VSQ0VfT0JKIH0sCisJeyAidGFnZ2VyZGF0ZSIsIFNPVVJDRV9PQkosIEZJRUxEX1RJTUUgfSwKKwl7ICJjcmVhdG9yIiwgU09VUkNFX09CSiB9LAorCXsgImNyZWF0b3JkYXRlIiwgU09VUkNFX09CSiwgRklFTERfVElNRSB9LAorCXsgInN1YmplY3QiLCBTT1VSQ0VfT0JKLCBGSUVMRF9TVFIsIHN1YmplY3RfYXRvbV9wYXJzZXIgfSwKKwl7ICJib2R5IiwgU09VUkNFX09CSiwgRklFTERfU1RSLCBib2R5X2F0b21fcGFyc2VyIH0sCisJeyAidHJhaWxlcnMiLCBTT1VSQ0VfT0JKLCBGSUVMRF9TVFIsIHRyYWlsZXJzX2F0b21fcGFyc2VyIH0sCisJeyAiY29udGVudHMiLCBTT1VSQ0VfT0JKLCBGSUVMRF9TVFIsIGNvbnRlbnRzX2F0b21fcGFyc2VyIH0sCisJeyAidXBzdHJlYW0iLCBTT1VSQ0VfTk9ORSwgRklFTERfU1RSLCByZW1vdGVfcmVmX2F0b21fcGFyc2VyIH0sCisJeyAicHVzaCIsIFNPVVJDRV9OT05FLCBGSUVMRF9TVFIsIHJlbW90ZV9yZWZfYXRvbV9wYXJzZXIgfSwKKwl7ICJzeW1yZWYiLCBTT1VSQ0VfTk9ORSwgRklFTERfU1RSLCByZWZuYW1lX2F0b21fcGFyc2VyIH0sCisJeyAiZmxhZyIsIFNPVVJDRV9OT05FIH0sCisJeyAiSEVBRCIsIFNPVVJDRV9OT05FLCBGSUVMRF9TVFIsIGhlYWRfYXRvbV9wYXJzZXIgfSwKKwl7ICJjb2xvciIsIFNPVVJDRV9OT05FLCBGSUVMRF9TVFIsIGNvbG9yX2F0b21fcGFyc2VyIH0sCisJeyAid29ya3RyZWVwYXRoIiwgU09VUkNFX05PTkUgfSwKKwl7ICJhbGlnbiIsIFNPVVJDRV9OT05FLCBGSUVMRF9TVFIsIGFsaWduX2F0b21fcGFyc2VyIH0sCisJeyAiZW5kIiwgU09VUkNFX05PTkUgfSwKKwl7ICJpZiIsIFNPVVJDRV9OT05FLCBGSUVMRF9TVFIsIGlmX2F0b21fcGFyc2VyIH0sCisJeyAidGhlbiIsIFNPVVJDRV9OT05FIH0sCisJeyAiZWxzZSIsIFNPVVJDRV9OT05FIH0sCisJLyoKKwkgKiBQbGVhc2UgdXBkYXRlICRfX2dpdF9yZWZfZmllbGRsaXN0IGluIGdpdC1jb21wbGV0aW9uLmJhc2gKKwkgKiB3aGVuIHlvdSBhZGQgbmV3IGF0b21zCisJICovCit9OworCisjZGVmaW5lIFJFRl9GT1JNQVRUSU5HX1NUQVRFX0lOSVQgIHsgMCwgTlVMTCB9CisKK3N0cnVjdCByZWZfZm9ybWF0dGluZ19zdGFjayB7CisJc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YWNrICpwcmV2OworCXN0cnVjdCBzdHJidWYgb3V0cHV0OworCXZvaWQgKCphdF9lbmQpKHN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGFjayAqKnN0YWNrKTsKKwl2b2lkICphdF9lbmRfZGF0YTsKK307CisKK3N0cnVjdCByZWZfZm9ybWF0dGluZ19zdGF0ZSB7CisJaW50IHF1b3RlX3N0eWxlOworCXN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGFjayAqc3RhY2s7Cit9OworCitzdHJ1Y3QgYXRvbV92YWx1ZSB7CisJY29uc3QgY2hhciAqczsKKwlpbnQgKCpoYW5kbGVyKShzdHJ1Y3QgYXRvbV92YWx1ZSAqYXRvbXYsIHN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGF0ZSAqc3RhdGUsCisJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCXVpbnRtYXhfdCB2YWx1ZTsgLyogdXNlZCBmb3Igc29ydGluZyB3aGVuIG5vdCBGSUVMRF9TVFIgKi8KKwlzdHJ1Y3QgdXNlZF9hdG9tICphdG9tOworfTsKKworLyoKKyAqIFVzZWQgdG8gcGFyc2UgZm9ybWF0IHN0cmluZyBhbmQgc29ydCBzcGVjaWZpZXJzCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfcmVmX2ZpbHRlcl9hdG9tKGNvbnN0IHN0cnVjdCByZWZfZm9ybWF0ICpmb3JtYXQsCisJCQkJIGNvbnN0IGNoYXIgKmF0b20sIGNvbnN0IGNoYXIgKmVwLAorCQkJCSBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJY29uc3QgY2hhciAqc3A7CisJY29uc3QgY2hhciAqYXJnOworCWludCBpLCBhdCwgYXRvbV9sZW47CisKKwlzcCA9IGF0b207CisJaWYgKCpzcCA9PSAnKicgJiYgc3AgPCBlcCkKKwkJc3ArKzsgLyogZGVyZWYgKi8KKwlpZiAoZXAgPD0gc3ApCisJCXJldHVybiBzdHJidWZfYWRkZl9yZXQoZXJyLCAtMSwgXygibWFsZm9ybWVkIGZpZWxkIG5hbWU6ICUuKnMiKSwKKwkJCQkgICAgICAgKGludCkoZXAtYXRvbSksIGF0b20pOworCisJLyogRG8gd2UgaGF2ZSB0aGUgYXRvbSBhbHJlYWR5IHVzZWQgZWxzZXdoZXJlPyAqLworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspIHsKKwkJaW50IGxlbiA9IHN0cmxlbih1c2VkX2F0b21baV0ubmFtZSk7CisJCWlmIChsZW4gPT0gZXAgLSBhdG9tICYmICFtZW1jbXAodXNlZF9hdG9tW2ldLm5hbWUsIGF0b20sIGxlbikpCisJCQlyZXR1cm4gaTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBhdG9tIG5hbWUgaGFzIGEgY29sb24sIHN0cmlwIGl0IGFuZCBldmVyeXRoaW5nIGFmdGVyCisJICogaXQgb2ZmIC0gaXQgc3BlY2lmaWVzIHRoZSBmb3JtYXQgZm9yIHRoaXMgZW50cnksIGFuZAorCSAqIHNob3VsZG4ndCBiZSB1c2VkIGZvciBjaGVja2luZyBhZ2FpbnN0IHRoZSB2YWxpZF9hdG9tCisJICogdGFibGUuCisJICovCisJYXJnID0gbWVtY2hyKHNwLCAnOicsIGVwIC0gc3ApOworCWF0b21fbGVuID0gKGFyZyA/IGFyZyA6IGVwKSAtIHNwOworCisJLyogSXMgdGhlIGF0b20gYSB2YWxpZCBvbmU/ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmFsaWRfYXRvbSk7IGkrKykgeworCQlpbnQgbGVuID0gc3RybGVuKHZhbGlkX2F0b21baV0ubmFtZSk7CisJCWlmIChsZW4gPT0gYXRvbV9sZW4gJiYgIW1lbWNtcCh2YWxpZF9hdG9tW2ldLm5hbWUsIHNwLCBsZW4pKQorCQkJYnJlYWs7CisJfQorCisJaWYgKEFSUkFZX1NJWkUodmFsaWRfYXRvbSkgPD0gaSkKKwkJcmV0dXJuIHN0cmJ1Zl9hZGRmX3JldChlcnIsIC0xLCBfKCJ1bmtub3duIGZpZWxkIG5hbWU6ICUuKnMiKSwKKwkJCQkgICAgICAgKGludCkoZXAtYXRvbSksIGF0b20pOworCWlmICh2YWxpZF9hdG9tW2ldLnNvdXJjZSAhPSBTT1VSQ0VfTk9ORSAmJiAhaGF2ZV9naXRfZGlyKCkpCisJCXJldHVybiBzdHJidWZfYWRkZl9yZXQoZXJyLCAtMSwKKwkJCQkgICAgICAgXygibm90IGEgZ2l0IHJlcG9zaXRvcnksIGJ1dCB0aGUgZmllbGQgJyUuKnMnIHJlcXVpcmVzIGFjY2VzcyB0byBvYmplY3QgZGF0YSIpLAorCQkJCSAgICAgICAoaW50KShlcC1hdG9tKSwgYXRvbSk7CisKKwkvKiBBZGQgaXQgaW4sIGluY2x1ZGluZyB0aGUgZGVyZWYgcHJlZml4ICovCisJYXQgPSB1c2VkX2F0b21fY250OworCXVzZWRfYXRvbV9jbnQrKzsKKwlSRUFMTE9DX0FSUkFZKHVzZWRfYXRvbSwgdXNlZF9hdG9tX2NudCk7CisJdXNlZF9hdG9tW2F0XS5uYW1lID0geG1lbWR1cHooYXRvbSwgZXAgLSBhdG9tKTsKKwl1c2VkX2F0b21bYXRdLnR5cGUgPSB2YWxpZF9hdG9tW2ldLmNtcF90eXBlOworCXVzZWRfYXRvbVthdF0uc291cmNlID0gdmFsaWRfYXRvbVtpXS5zb3VyY2U7CisJaWYgKHVzZWRfYXRvbVthdF0uc291cmNlID09IFNPVVJDRV9PQkopIHsKKwkJaWYgKCphdG9tID09ICcqJykKKwkJCW9pX2RlcmVmLmluZm8uY29udGVudHAgPSAmb2lfZGVyZWYuY29udGVudDsKKwkJZWxzZQorCQkJb2kuaW5mby5jb250ZW50cCA9ICZvaS5jb250ZW50OworCX0KKwlpZiAoYXJnKSB7CisJCWFyZyA9IHVzZWRfYXRvbVthdF0ubmFtZSArIChhcmcgLSBhdG9tKSArIDE7CisJCWlmICghKmFyZykgeworCQkJLyoKKwkJCSAqIFRyZWF0IGVtcHR5IHN1Yi1hcmd1bWVudHMgbGlzdCBhcyBOVUxMIChpLmUuLAorCQkJICogIiUoYXRvbTopIiBpcyBlcXVpdmFsZW50IHRvICIlKGF0b20pIikuCisJCQkgKi8KKwkJCWFyZyA9IE5VTEw7CisJCX0KKwl9CisJbWVtc2V0KCZ1c2VkX2F0b21bYXRdLnUsIDAsIHNpemVvZih1c2VkX2F0b21bYXRdLnUpKTsKKwlpZiAodmFsaWRfYXRvbVtpXS5wYXJzZXIgJiYgdmFsaWRfYXRvbVtpXS5wYXJzZXIoZm9ybWF0LCAmdXNlZF9hdG9tW2F0XSwgYXJnLCBlcnIpKQorCQlyZXR1cm4gLTE7CisJaWYgKCphdG9tID09ICcqJykKKwkJbmVlZF90YWdnZWQgPSAxOworCWlmICghc3RyY21wKHZhbGlkX2F0b21baV0ubmFtZSwgInN5bXJlZiIpKQorCQluZWVkX3N5bXJlZiA9IDE7CisJcmV0dXJuIGF0OworfQorCitzdGF0aWMgdm9pZCBxdW90ZV9mb3JtYXR0aW5nKHN0cnVjdCBzdHJidWYgKnMsIGNvbnN0IGNoYXIgKnN0ciwgaW50IHF1b3RlX3N0eWxlKQoreworCXN3aXRjaCAocXVvdGVfc3R5bGUpIHsKKwljYXNlIFFVT1RFX05PTkU6CisJCXN0cmJ1Zl9hZGRzdHIocywgc3RyKTsKKwkJYnJlYWs7CisJY2FzZSBRVU9URV9TSEVMTDoKKwkJc3FfcXVvdGVfYnVmKHMsIHN0cik7CisJCWJyZWFrOworCWNhc2UgUVVPVEVfUEVSTDoKKwkJcGVybF9xdW90ZV9idWYocywgc3RyKTsKKwkJYnJlYWs7CisJY2FzZSBRVU9URV9QWVRIT046CisJCXB5dGhvbl9xdW90ZV9idWYocywgc3RyKTsKKwkJYnJlYWs7CisJY2FzZSBRVU9URV9UQ0w6CisJCXRjbF9xdW90ZV9idWYocywgc3RyKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGFwcGVuZF9hdG9tKHN0cnVjdCBhdG9tX3ZhbHVlICp2LCBzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhdGUgKnN0YXRlLAorCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqdW51c2VkX2VycikKK3sKKwkvKgorCSAqIFF1b3RlIGZvcm1hdHRpbmcgaXMgb25seSBkb25lIHdoZW4gdGhlIHN0YWNrIGhhcyBhIHNpbmdsZQorCSAqIGVsZW1lbnQuIE90aGVyd2lzZSBxdW90ZSBmb3JtYXR0aW5nIGlzIGRvbmUgb24gdGhlCisJICogZWxlbWVudCdzIGVudGlyZSBvdXRwdXQgc3RyYnVmIHdoZW4gdGhlICUoZW5kKSBhdG9tIGlzCisJICogZW5jb3VudGVyZWQuCisJICovCisJaWYgKCFzdGF0ZS0+c3RhY2stPnByZXYpCisJCXF1b3RlX2Zvcm1hdHRpbmcoJnN0YXRlLT5zdGFjay0+b3V0cHV0LCB2LT5zLCBzdGF0ZS0+cXVvdGVfc3R5bGUpOworCWVsc2UKKwkJc3RyYnVmX2FkZHN0cigmc3RhdGUtPnN0YWNrLT5vdXRwdXQsIHYtPnMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwdXNoX3N0YWNrX2VsZW1lbnQoc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YWNrICoqc3RhY2spCit7CisJc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YWNrICpzID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YWNrKSk7CisKKwlzdHJidWZfaW5pdCgmcy0+b3V0cHV0LCAwKTsKKwlzLT5wcmV2ID0gKnN0YWNrOworCSpzdGFjayA9IHM7Cit9CisKK3N0YXRpYyB2b2lkIHBvcF9zdGFja19lbGVtZW50KHN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGFjayAqKnN0YWNrKQoreworCXN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGFjayAqY3VycmVudCA9ICpzdGFjazsKKwlzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhY2sgKnByZXYgPSBjdXJyZW50LT5wcmV2OworCisJaWYgKHByZXYpCisJCXN0cmJ1Zl9hZGRidWYoJnByZXYtPm91dHB1dCwgJmN1cnJlbnQtPm91dHB1dCk7CisJc3RyYnVmX3JlbGVhc2UoJmN1cnJlbnQtPm91dHB1dCk7CisJZnJlZShjdXJyZW50KTsKKwkqc3RhY2sgPSBwcmV2OworfQorCitzdGF0aWMgdm9pZCBlbmRfYWxpZ25faGFuZGxlcihzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhY2sgKipzdGFjaykKK3sKKwlzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhY2sgKmN1ciA9ICpzdGFjazsKKwlzdHJ1Y3QgYWxpZ24gKmFsaWduID0gKHN0cnVjdCBhbGlnbiAqKWN1ci0+YXRfZW5kX2RhdGE7CisJc3RydWN0IHN0cmJ1ZiBzID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfdXRmOF9hbGlnbigmcywgYWxpZ24tPnBvc2l0aW9uLCBhbGlnbi0+d2lkdGgsIGN1ci0+b3V0cHV0LmJ1Zik7CisJc3RyYnVmX3N3YXAoJmN1ci0+b3V0cHV0LCAmcyk7CisJc3RyYnVmX3JlbGVhc2UoJnMpOworfQorCitzdGF0aWMgaW50IGFsaWduX2F0b21faGFuZGxlcihzdHJ1Y3QgYXRvbV92YWx1ZSAqYXRvbXYsIHN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGF0ZSAqc3RhdGUsCisJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICp1bnVzZWRfZXJyKQoreworCXN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGFjayAqbmV3X3N0YWNrOworCisJcHVzaF9zdGFja19lbGVtZW50KCZzdGF0ZS0+c3RhY2spOworCW5ld19zdGFjayA9IHN0YXRlLT5zdGFjazsKKwluZXdfc3RhY2stPmF0X2VuZCA9IGVuZF9hbGlnbl9oYW5kbGVyOworCW5ld19zdGFjay0+YXRfZW5kX2RhdGEgPSAmYXRvbXYtPmF0b20tPnUuYWxpZ247CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlmX3RoZW5fZWxzZV9oYW5kbGVyKHN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGFjayAqKnN0YWNrKQoreworCXN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGFjayAqY3VyID0gKnN0YWNrOworCXN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGFjayAqcHJldiA9IGN1ci0+cHJldjsKKwlzdHJ1Y3QgaWZfdGhlbl9lbHNlICppZl90aGVuX2Vsc2UgPSAoc3RydWN0IGlmX3RoZW5fZWxzZSAqKWN1ci0+YXRfZW5kX2RhdGE7CisKKwlpZiAoIWlmX3RoZW5fZWxzZS0+dGhlbl9hdG9tX3NlZW4pCisJCWRpZShfKCJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iKSk7CisKKwlpZiAoaWZfdGhlbl9lbHNlLT5lbHNlX2F0b21fc2VlbikgeworCQkvKgorCQkgKiBUaGVyZSBpcyBhbiAlKGVsc2UpIGF0b206IHdlIG5lZWQgdG8gZHJvcCBvbmUgc3RhdGUgZnJvbSB0aGUKKwkJICogc3RhY2ssIGVpdGhlciB0aGUgJShlbHNlKSBicmFuY2ggaWYgdGhlIGNvbmRpdGlvbiBpcyBzYXRpc2ZpZWQsIG9yCisJCSAqIHRoZSAlKHRoZW4pIGJyYW5jaCBpZiBpdCBpc24ndC4KKwkJICovCisJCWlmIChpZl90aGVuX2Vsc2UtPmNvbmRpdGlvbl9zYXRpc2ZpZWQpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmY3VyLT5vdXRwdXQpOworCQkJcG9wX3N0YWNrX2VsZW1lbnQoJmN1cik7CisJCX0gZWxzZSB7CisJCQlzdHJidWZfc3dhcCgmY3VyLT5vdXRwdXQsICZwcmV2LT5vdXRwdXQpOworCQkJc3RyYnVmX3Jlc2V0KCZjdXItPm91dHB1dCk7CisJCQlwb3Bfc3RhY2tfZWxlbWVudCgmY3VyKTsKKwkJfQorCX0gZWxzZSBpZiAoIWlmX3RoZW5fZWxzZS0+Y29uZGl0aW9uX3NhdGlzZmllZCkgeworCQkvKgorCQkgKiBObyAlKGVsc2UpIGF0b206IGp1c3QgZHJvcCB0aGUgJSh0aGVuKSBicmFuY2ggaWYgdGhlCisJCSAqIGNvbmRpdGlvbiBpcyBub3Qgc2F0aXNmaWVkLgorCQkgKi8KKwkJc3RyYnVmX3Jlc2V0KCZjdXItPm91dHB1dCk7CisJfQorCisJKnN0YWNrID0gY3VyOworCWZyZWUoaWZfdGhlbl9lbHNlKTsKK30KKworc3RhdGljIGludCBpZl9hdG9tX2hhbmRsZXIoc3RydWN0IGF0b21fdmFsdWUgKmF0b212LCBzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhdGUgKnN0YXRlLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqdW51c2VkX2VycikKK3sKKwlzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhY2sgKm5ld19zdGFjazsKKwlzdHJ1Y3QgaWZfdGhlbl9lbHNlICppZl90aGVuX2Vsc2UgPSB4Y2FsbG9jKHNpemVvZihzdHJ1Y3QgaWZfdGhlbl9lbHNlKSwgMSk7CisKKwlpZl90aGVuX2Vsc2UtPnN0ciA9IGF0b212LT5hdG9tLT51LmlmX3RoZW5fZWxzZS5zdHI7CisJaWZfdGhlbl9lbHNlLT5jbXBfc3RhdHVzID0gYXRvbXYtPmF0b20tPnUuaWZfdGhlbl9lbHNlLmNtcF9zdGF0dXM7CisKKwlwdXNoX3N0YWNrX2VsZW1lbnQoJnN0YXRlLT5zdGFjayk7CisJbmV3X3N0YWNrID0gc3RhdGUtPnN0YWNrOworCW5ld19zdGFjay0+YXRfZW5kID0gaWZfdGhlbl9lbHNlX2hhbmRsZXI7CisJbmV3X3N0YWNrLT5hdF9lbmRfZGF0YSA9IGlmX3RoZW5fZWxzZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19lbXB0eShjb25zdCBjaGFyICpzKQoreworCXdoaWxlICgqcyAhPSAnXDAnKSB7CisJCWlmICghaXNzcGFjZSgqcykpCisJCQlyZXR1cm4gMDsKKwkJcysrOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB0aGVuX2F0b21faGFuZGxlcihzdHJ1Y3QgYXRvbV92YWx1ZSAqYXRvbXYsIHN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGF0ZSAqc3RhdGUsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhY2sgKmN1ciA9IHN0YXRlLT5zdGFjazsKKwlzdHJ1Y3QgaWZfdGhlbl9lbHNlICppZl90aGVuX2Vsc2UgPSBOVUxMOworCisJaWYgKGN1ci0+YXRfZW5kID09IGlmX3RoZW5fZWxzZV9oYW5kbGVyKQorCQlpZl90aGVuX2Vsc2UgPSAoc3RydWN0IGlmX3RoZW5fZWxzZSAqKWN1ci0+YXRfZW5kX2RhdGE7CisJaWYgKCFpZl90aGVuX2Vsc2UpCisJCXJldHVybiBzdHJidWZfYWRkZl9yZXQoZXJyLCAtMSwgXygiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIpKTsKKwlpZiAoaWZfdGhlbl9lbHNlLT50aGVuX2F0b21fc2VlbikKKwkJcmV0dXJuIHN0cmJ1Zl9hZGRmX3JldChlcnIsIC0xLCBfKCJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIpKTsKKwlpZiAoaWZfdGhlbl9lbHNlLT5lbHNlX2F0b21fc2VlbikKKwkJcmV0dXJuIHN0cmJ1Zl9hZGRmX3JldChlcnIsIC0xLCBfKCJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBhZnRlciAlJShlbHNlKSIpKTsKKwlpZl90aGVuX2Vsc2UtPnRoZW5fYXRvbV9zZWVuID0gMTsKKwkvKgorCSAqIElmIHRoZSAnZXF1YWxzJyBvciAnbm90ZXF1YWxzJyBhdHRyaWJ1dGUgaXMgdXNlZCB0aGVuCisJICogcGVyZm9ybSB0aGUgcmVxdWlyZWQgY29tcGFyaXNvbi4gSWYgbm90LCBvbmx5IG5vbi1lbXB0eQorCSAqIHN0cmluZ3Mgc2F0aXNmeSB0aGUgJ2lmJyBjb25kaXRpb24uCisJICovCisJaWYgKGlmX3RoZW5fZWxzZS0+Y21wX3N0YXR1cyA9PSBDT01QQVJFX0VRVUFMKSB7CisJCWlmICghc3RyY21wKGlmX3RoZW5fZWxzZS0+c3RyLCBjdXItPm91dHB1dC5idWYpKQorCQkJaWZfdGhlbl9lbHNlLT5jb25kaXRpb25fc2F0aXNmaWVkID0gMTsKKwl9IGVsc2UgaWYgKGlmX3RoZW5fZWxzZS0+Y21wX3N0YXR1cyA9PSBDT01QQVJFX1VORVFVQUwpIHsKKwkJaWYgKHN0cmNtcChpZl90aGVuX2Vsc2UtPnN0ciwgY3VyLT5vdXRwdXQuYnVmKSkKKwkJCWlmX3RoZW5fZWxzZS0+Y29uZGl0aW9uX3NhdGlzZmllZCA9IDE7CisJfSBlbHNlIGlmIChjdXItPm91dHB1dC5sZW4gJiYgIWlzX2VtcHR5KGN1ci0+b3V0cHV0LmJ1ZikpCisJCWlmX3RoZW5fZWxzZS0+Y29uZGl0aW9uX3NhdGlzZmllZCA9IDE7CisJc3RyYnVmX3Jlc2V0KCZjdXItPm91dHB1dCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWxzZV9hdG9tX2hhbmRsZXIoc3RydWN0IGF0b21fdmFsdWUgKmF0b212LCBzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhdGUgKnN0YXRlLAorCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YWNrICpwcmV2ID0gc3RhdGUtPnN0YWNrOworCXN0cnVjdCBpZl90aGVuX2Vsc2UgKmlmX3RoZW5fZWxzZSA9IE5VTEw7CisKKwlpZiAocHJldi0+YXRfZW5kID09IGlmX3RoZW5fZWxzZV9oYW5kbGVyKQorCQlpZl90aGVuX2Vsc2UgPSAoc3RydWN0IGlmX3RoZW5fZWxzZSAqKXByZXYtPmF0X2VuZF9kYXRhOworCWlmICghaWZfdGhlbl9lbHNlKQorCQlyZXR1cm4gc3RyYnVmX2FkZGZfcmV0KGVyciwgLTEsIF8oImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iKSk7CisJaWYgKCFpZl90aGVuX2Vsc2UtPnRoZW5fYXRvbV9zZWVuKQorCQlyZXR1cm4gc3RyYnVmX2FkZGZfcmV0KGVyciwgLTEsIF8oImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIikpOworCWlmIChpZl90aGVuX2Vsc2UtPmVsc2VfYXRvbV9zZWVuKQorCQlyZXR1cm4gc3RyYnVmX2FkZGZfcmV0KGVyciwgLTEsIF8oImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIikpOworCWlmX3RoZW5fZWxzZS0+ZWxzZV9hdG9tX3NlZW4gPSAxOworCXB1c2hfc3RhY2tfZWxlbWVudCgmc3RhdGUtPnN0YWNrKTsKKwlzdGF0ZS0+c3RhY2stPmF0X2VuZF9kYXRhID0gcHJldi0+YXRfZW5kX2RhdGE7CisJc3RhdGUtPnN0YWNrLT5hdF9lbmQgPSBwcmV2LT5hdF9lbmQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW5kX2F0b21faGFuZGxlcihzdHJ1Y3QgYXRvbV92YWx1ZSAqYXRvbXYsIHN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGF0ZSAqc3RhdGUsCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGFjayAqY3VycmVudCA9IHN0YXRlLT5zdGFjazsKKwlzdHJ1Y3Qgc3RyYnVmIHMgPSBTVFJCVUZfSU5JVDsKKworCWlmICghY3VycmVudC0+YXRfZW5kKQorCQlyZXR1cm4gc3RyYnVmX2FkZGZfcmV0KGVyciwgLTEsIF8oImZvcm1hdDogJSUoZW5kKSBhdG9tIHVzZWQgd2l0aG91dCBjb3JyZXNwb25kaW5nIGF0b20iKSk7CisJY3VycmVudC0+YXRfZW5kKCZzdGF0ZS0+c3RhY2spOworCisJLyogIFN0YWNrIG1heSBoYXZlIGJlZW4gcG9wcGVkIHdpdGhpbiBhdF9lbmQoKSwgaGVuY2UgcmVzZXQgdGhlIGN1cnJlbnQgcG9pbnRlciAqLworCWN1cnJlbnQgPSBzdGF0ZS0+c3RhY2s7CisKKwkvKgorCSAqIFBlcmZvcm0gcXVvdGUgZm9ybWF0dGluZyB3aGVuIHRoZSBzdGFjayBlbGVtZW50IGlzIHRoYXQgb2YKKwkgKiBhIHN1cHBvcnRpbmcgYXRvbS4gSWYgbmVzdGVkIHRoZW4gcGVyZm9ybSBxdW90ZSBmb3JtYXR0aW5nCisJICogb25seSBvbiB0aGUgdG9wbW9zdCBzdXBwb3J0aW5nIGF0b20uCisJICovCisJaWYgKCFjdXJyZW50LT5wcmV2LT5wcmV2KSB7CisJCXF1b3RlX2Zvcm1hdHRpbmcoJnMsIGN1cnJlbnQtPm91dHB1dC5idWYsIHN0YXRlLT5xdW90ZV9zdHlsZSk7CisJCXN0cmJ1Zl9zd2FwKCZjdXJyZW50LT5vdXRwdXQsICZzKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnMpOworCXBvcF9zdGFja19lbGVtZW50KCZzdGF0ZS0+c3RhY2spOworCXJldHVybiAwOworfQorCisvKgorICogSW4gYSBmb3JtYXQgc3RyaW5nLCBmaW5kIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgJShhdG9tKS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfbmV4dChjb25zdCBjaGFyICpjcCkKK3sKKwl3aGlsZSAoKmNwKSB7CisJCWlmICgqY3AgPT0gJyUnKSB7CisJCQkvKgorCQkJICogJSggaXMgdGhlIHN0YXJ0IG9mIGFuIGF0b207CisJCQkgKiAlJSBpcyBhIHF1b3RlZCBwZXItY2VudC4KKwkJCSAqLworCQkJaWYgKGNwWzFdID09ICcoJykKKwkJCQlyZXR1cm4gY3A7CisJCQllbHNlIGlmIChjcFsxXSA9PSAnJScpCisJCQkJY3ArKzsgLyogc2tpcCBvdmVyIHR3byAlICovCisJCQkvKiBvdGhlcndpc2UgdGhpcyBpcyBhIHNpbmdsZXRvbiwgbGl0ZXJhbCAlICovCisJCX0KKwkJY3ArKzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBNYWtlIHN1cmUgdGhlIGZvcm1hdCBzdHJpbmcgaXMgd2VsbCBmb3JtZWQsIGFuZCBwYXJzZSBvdXQKKyAqIHRoZSB1c2VkIGF0b21zLgorICovCitpbnQgdmVyaWZ5X3JlZl9mb3JtYXQoc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCkKK3sKKwljb25zdCBjaGFyICpjcCwgKnNwOworCisJZm9ybWF0LT5uZWVkX2NvbG9yX3Jlc2V0X2F0X2VvbCA9IDA7CisJZm9yIChjcCA9IGZvcm1hdC0+Zm9ybWF0OyAqY3AgJiYgKHNwID0gZmluZF9uZXh0KGNwKSk7ICkgeworCQlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICpjb2xvciwgKmVwID0gc3RyY2hyKHNwLCAnKScpOworCQlpbnQgYXQ7CisKKwkJaWYgKCFlcCkKKwkJCXJldHVybiBlcnJvcihfKCJtYWxmb3JtZWQgZm9ybWF0IHN0cmluZyAlcyIpLCBzcCk7CisJCS8qIHNwIHBvaW50cyBhdCAiJSgiIGFuZCBlcCBwb2ludHMgYXQgdGhlIGNsb3NpbmcgIikiICovCisJCWF0ID0gcGFyc2VfcmVmX2ZpbHRlcl9hdG9tKGZvcm1hdCwgc3AgKyAyLCBlcCwgJmVycik7CisJCWlmIChhdCA8IDApCisJCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJCWNwID0gZXAgKyAxOworCisJCWlmIChza2lwX3ByZWZpeCh1c2VkX2F0b21bYXRdLm5hbWUsICJjb2xvcjoiLCAmY29sb3IpKQorCQkJZm9ybWF0LT5uZWVkX2NvbG9yX3Jlc2V0X2F0X2VvbCA9ICEhc3RyY21wKGNvbG9yLCAicmVzZXQiKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJfQorCWlmIChmb3JtYXQtPm5lZWRfY29sb3JfcmVzZXRfYXRfZW9sICYmICF3YW50X2NvbG9yKGZvcm1hdC0+dXNlX2NvbG9yKSkKKwkJZm9ybWF0LT5uZWVkX2NvbG9yX3Jlc2V0X2F0X2VvbCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3JhYl9vYmplY3RuYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgIHN0cnVjdCBhdG9tX3ZhbHVlICp2LCBzdHJ1Y3QgdXNlZF9hdG9tICphdG9tKQoreworCWlmIChzdGFydHNfd2l0aChuYW1lLCAib2JqZWN0bmFtZSIpKSB7CisJCWlmIChhdG9tLT51Lm9iamVjdG5hbWUub3B0aW9uID09IE9fU0hPUlQpIHsKKwkJCXYtPnMgPSB4c3RyZHVwKGZpbmRfdW5pcXVlX2FiYnJldihvaWQsIERFRkFVTFRfQUJCUkVWKSk7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIGlmIChhdG9tLT51Lm9iamVjdG5hbWUub3B0aW9uID09IE9fRlVMTCkgeworCQkJdi0+cyA9IHhzdHJkdXAob2lkX3RvX2hleChvaWQpKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgaWYgKGF0b20tPnUub2JqZWN0bmFtZS5vcHRpb24gPT0gT19MRU5HVEgpIHsKKwkJCXYtPnMgPSB4c3RyZHVwKGZpbmRfdW5pcXVlX2FiYnJldihvaWQsIGF0b20tPnUub2JqZWN0bmFtZS5sZW5ndGgpKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UKKwkJCUJVRygidW5rbm93biAlJShvYmplY3RuYW1lKSBvcHRpb24iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFNlZSBncmFiX3ZhbHVlcyAqLworc3RhdGljIHZvaWQgZ3JhYl9jb21tb25fdmFsdWVzKHN0cnVjdCBhdG9tX3ZhbHVlICp2YWwsIGludCBkZXJlZiwgc3RydWN0IGV4cGFuZF9kYXRhICpvaSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHVzZWRfYXRvbVtpXS5uYW1lOworCQlzdHJ1Y3QgYXRvbV92YWx1ZSAqdiA9ICZ2YWxbaV07CisJCWlmICghIWRlcmVmICE9ICgqbmFtZSA9PSAnKicpKQorCQkJY29udGludWU7CisJCWlmIChkZXJlZikKKwkJCW5hbWUrKzsKKwkJaWYgKCFzdHJjbXAobmFtZSwgIm9iamVjdHR5cGUiKSkKKwkJCXYtPnMgPSB4c3RyZHVwKHR5cGVfbmFtZShvaS0+dHlwZSkpOworCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJvYmplY3RzaXplOmRpc2siKSkgeworCQkJdi0+dmFsdWUgPSBvaS0+ZGlza19zaXplOworCQkJdi0+cyA9IHhzdHJmbXQoIiUiUFJJdU1BWCwgKHVpbnRtYXhfdClvaS0+ZGlza19zaXplKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJvYmplY3RzaXplIikpIHsKKwkJCXYtPnZhbHVlID0gb2ktPnNpemU7CisJCQl2LT5zID0geHN0cmZtdCgiJSJQUkl1TUFYICwgKHVpbnRtYXhfdClvaS0+c2l6ZSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZGVsdGFiYXNlIikpCisJCQl2LT5zID0geHN0cmR1cChvaWRfdG9faGV4KCZvaS0+ZGVsdGFfYmFzZV9vaWQpKTsKKwkJZWxzZSBpZiAoZGVyZWYpCisJCQlncmFiX29iamVjdG5hbWUobmFtZSwgJm9pLT5vaWQsIHYsICZ1c2VkX2F0b21baV0pOworCX0KK30KKworLyogU2VlIGdyYWJfdmFsdWVzICovCitzdGF0aWMgdm9pZCBncmFiX3RhZ192YWx1ZXMoc3RydWN0IGF0b21fdmFsdWUgKnZhbCwgaW50IGRlcmVmLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJaW50IGk7CisJc3RydWN0IHRhZyAqdGFnID0gKHN0cnVjdCB0YWcgKikgb2JqOworCisJZm9yIChpID0gMDsgaSA8IHVzZWRfYXRvbV9jbnQ7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gdXNlZF9hdG9tW2ldLm5hbWU7CisJCXN0cnVjdCBhdG9tX3ZhbHVlICp2ID0gJnZhbFtpXTsKKwkJaWYgKCEhZGVyZWYgIT0gKCpuYW1lID09ICcqJykpCisJCQljb250aW51ZTsKKwkJaWYgKGRlcmVmKQorCQkJbmFtZSsrOworCQlpZiAoIXN0cmNtcChuYW1lLCAidGFnIikpCisJCQl2LT5zID0geHN0cmR1cCh0YWctPnRhZyk7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgInR5cGUiKSAmJiB0YWctPnRhZ2dlZCkKKwkJCXYtPnMgPSB4c3RyZHVwKHR5cGVfbmFtZSh0YWctPnRhZ2dlZC0+dHlwZSkpOworCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJvYmplY3QiKSAmJiB0YWctPnRhZ2dlZCkKKwkJCXYtPnMgPSB4c3RyZHVwKG9pZF90b19oZXgoJnRhZy0+dGFnZ2VkLT5vaWQpKTsKKwl9Cit9CisKKy8qIFNlZSBncmFiX3ZhbHVlcyAqLworc3RhdGljIHZvaWQgZ3JhYl9jb21taXRfdmFsdWVzKHN0cnVjdCBhdG9tX3ZhbHVlICp2YWwsIGludCBkZXJlZiwgc3RydWN0IG9iamVjdCAqb2JqKQoreworCWludCBpOworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopIG9iajsKKworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHVzZWRfYXRvbVtpXS5uYW1lOworCQlzdHJ1Y3QgYXRvbV92YWx1ZSAqdiA9ICZ2YWxbaV07CisJCWlmICghIWRlcmVmICE9ICgqbmFtZSA9PSAnKicpKQorCQkJY29udGludWU7CisJCWlmIChkZXJlZikKKwkJCW5hbWUrKzsKKwkJaWYgKCFzdHJjbXAobmFtZSwgInRyZWUiKSkgeworCQkJdi0+cyA9IHhzdHJkdXAob2lkX3RvX2hleChnZXRfY29tbWl0X3RyZWVfb2lkKGNvbW1pdCkpKTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJudW1wYXJlbnQiKSkgeworCQkJdi0+dmFsdWUgPSBjb21taXRfbGlzdF9jb3VudChjb21taXQtPnBhcmVudHMpOworCQkJdi0+cyA9IHhzdHJmbXQoIiVsdSIsICh1bnNpZ25lZCBsb25nKXYtPnZhbHVlKTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJwYXJlbnQiKSkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQkJc3RydWN0IHN0cmJ1ZiBzID0gU1RSQlVGX0lOSVQ7CisJCQlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudHM7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7CisJCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwkJCQlpZiAocGFyZW50cyAhPSBjb21taXQtPnBhcmVudHMpCisJCQkJCXN0cmJ1Zl9hZGRjaCgmcywgJyAnKTsKKwkJCQlzdHJidWZfYWRkc3RyKCZzLCBvaWRfdG9faGV4KCZwYXJlbnQtPm9iamVjdC5vaWQpKTsKKwkJCX0KKwkJCXYtPnMgPSBzdHJidWZfZGV0YWNoKCZzLCBOVUxMKTsKKwkJfQorCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfd2hvbGluZShjb25zdCBjaGFyICp3aG8sIGludCB3aG9sZW4sIGNvbnN0IGNoYXIgKmJ1ZikKK3sKKwljb25zdCBjaGFyICplb2w7CisJd2hpbGUgKCpidWYpIHsKKwkJaWYgKCFzdHJuY21wKGJ1Ziwgd2hvLCB3aG9sZW4pICYmCisJCSAgICBidWZbd2hvbGVuXSA9PSAnICcpCisJCQlyZXR1cm4gYnVmICsgd2hvbGVuICsgMTsKKwkJZW9sID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7CisJCWlmICghZW9sKQorCQkJcmV0dXJuICIiOworCQllb2wrKzsKKwkJaWYgKCplb2wgPT0gJ1xuJykKKwkJCXJldHVybiAiIjsgLyogZW5kIG9mIGhlYWRlciAqLworCQlidWYgPSBlb2w7CisJfQorCXJldHVybiAiIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvcHlfbGluZShjb25zdCBjaGFyICpidWYpCit7CisJY29uc3QgY2hhciAqZW9sID0gc3RyY2hybnVsKGJ1ZiwgJ1xuJyk7CisJcmV0dXJuIHhtZW1kdXB6KGJ1ZiwgZW9sIC0gYnVmKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvcHlfbmFtZShjb25zdCBjaGFyICpidWYpCit7CisJY29uc3QgY2hhciAqY3A7CisJZm9yIChjcCA9IGJ1ZjsgKmNwICYmICpjcCAhPSAnXG4nOyBjcCsrKSB7CisJCWlmICghc3RybmNtcChjcCwgIiA8IiwgMikpCisJCQlyZXR1cm4geG1lbWR1cHooYnVmLCBjcCAtIGJ1Zik7CisJfQorCXJldHVybiB4c3RyZHVwKCIiKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvcHlfZW1haWwoY29uc3QgY2hhciAqYnVmKQoreworCWNvbnN0IGNoYXIgKmVtYWlsID0gc3RyY2hyKGJ1ZiwgJzwnKTsKKwljb25zdCBjaGFyICplb2VtYWlsOworCWlmICghZW1haWwpCisJCXJldHVybiB4c3RyZHVwKCIiKTsKKwllb2VtYWlsID0gc3RyY2hyKGVtYWlsLCAnPicpOworCWlmICghZW9lbWFpbCkKKwkJcmV0dXJuIHhzdHJkdXAoIiIpOworCXJldHVybiB4bWVtZHVweihlbWFpbCwgZW9lbWFpbCArIDEgLSBlbWFpbCk7Cit9CisKK3N0YXRpYyBjaGFyICpjb3B5X3N1YmplY3QoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwljaGFyICpyID0geG1lbWR1cHooYnVmLCBsZW4pOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAocltpXSA9PSAnXG4nKQorCQkJcltpXSA9ICcgJzsKKworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBncmFiX2RhdGUoY29uc3QgY2hhciAqYnVmLCBzdHJ1Y3QgYXRvbV92YWx1ZSAqdiwgY29uc3QgY2hhciAqYXRvbW5hbWUpCit7CisJY29uc3QgY2hhciAqZW9lbWFpbCA9IHN0cnN0cihidWYsICI+ICIpOworCWNoYXIgKnpvbmU7CisJdGltZXN0YW1wX3QgdGltZXN0YW1wOworCWxvbmcgdHo7CisJc3RydWN0IGRhdGVfbW9kZSBkYXRlX21vZGUgPSB7IERBVEVfTk9STUFMIH07CisJY29uc3QgY2hhciAqZm9ybWF0cDsKKworCS8qCisJICogV2UgZ290IGhlcmUgYmVjYXVzZSBhdG9tbmFtZSBlbmRzIGluICJkYXRlIiBvciAiZGF0ZTxzb21ldGhpbmc+IjsKKwkgKiBpdCdzIG5vdCBwb3NzaWJsZSB0aGF0IDxzb21ldGhpbmc+IGlzIG5vdCAiOjxmb3JtYXQ+IiBiZWNhdXNlCisJICogcGFyc2VfcmVmX2ZpbHRlcl9hdG9tKCkgd291bGRuJ3QgaGF2ZSBhbGxvd2VkIGl0LCBzbyB3ZSBjYW4gYXNzdW1lIHRoYXQgbm8KKwkgKiAiOiIgbWVhbnMgbm8gZm9ybWF0IGlzIHNwZWNpZmllZCwgYW5kIHVzZSB0aGUgZGVmYXVsdC4KKwkgKi8KKwlmb3JtYXRwID0gc3RyY2hyKGF0b21uYW1lLCAnOicpOworCWlmIChmb3JtYXRwICE9IE5VTEwpIHsKKwkJZm9ybWF0cCsrOworCQlwYXJzZV9kYXRlX2Zvcm1hdChmb3JtYXRwLCAmZGF0ZV9tb2RlKTsKKwl9CisKKwlpZiAoIWVvZW1haWwpCisJCWdvdG8gYmFkOworCXRpbWVzdGFtcCA9IHBhcnNlX3RpbWVzdGFtcChlb2VtYWlsICsgMiwgJnpvbmUsIDEwKTsKKwlpZiAodGltZXN0YW1wID09IFRJTUVfTUFYKQorCQlnb3RvIGJhZDsKKwl0eiA9IHN0cnRvbCh6b25lLCBOVUxMLCAxMCk7CisJaWYgKCh0eiA9PSBMT05HX01JTiB8fCB0eiA9PSBMT05HX01BWCkgJiYgZXJybm8gPT0gRVJBTkdFKQorCQlnb3RvIGJhZDsKKwl2LT5zID0geHN0cmR1cChzaG93X2RhdGUodGltZXN0YW1wLCB0eiwgJmRhdGVfbW9kZSkpOworCXYtPnZhbHVlID0gdGltZXN0YW1wOworCXJldHVybjsKKyBiYWQ6CisJdi0+cyA9IHhzdHJkdXAoIiIpOworCXYtPnZhbHVlID0gMDsKK30KKworLyogU2VlIGdyYWJfdmFsdWVzICovCitzdGF0aWMgdm9pZCBncmFiX3BlcnNvbihjb25zdCBjaGFyICp3aG8sIHN0cnVjdCBhdG9tX3ZhbHVlICp2YWwsIGludCBkZXJlZiwgdm9pZCAqYnVmKQoreworCWludCBpOworCWludCB3aG9sZW4gPSBzdHJsZW4od2hvKTsKKwljb25zdCBjaGFyICp3aG9saW5lID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHVzZWRfYXRvbVtpXS5uYW1lOworCQlzdHJ1Y3QgYXRvbV92YWx1ZSAqdiA9ICZ2YWxbaV07CisJCWlmICghIWRlcmVmICE9ICgqbmFtZSA9PSAnKicpKQorCQkJY29udGludWU7CisJCWlmIChkZXJlZikKKwkJCW5hbWUrKzsKKwkJaWYgKHN0cm5jbXAod2hvLCBuYW1lLCB3aG9sZW4pKQorCQkJY29udGludWU7CisJCWlmIChuYW1lW3dob2xlbl0gIT0gMCAmJgorCQkgICAgc3RyY21wKG5hbWUgKyB3aG9sZW4sICJuYW1lIikgJiYKKwkJICAgIHN0cmNtcChuYW1lICsgd2hvbGVuLCAiZW1haWwiKSAmJgorCQkgICAgIXN0YXJ0c193aXRoKG5hbWUgKyB3aG9sZW4sICJkYXRlIikpCisJCQljb250aW51ZTsKKwkJaWYgKCF3aG9saW5lKQorCQkJd2hvbGluZSA9IGZpbmRfd2hvbGluZSh3aG8sIHdob2xlbiwgYnVmKTsKKwkJaWYgKCF3aG9saW5lKQorCQkJcmV0dXJuOyAvKiBubyBwb2ludCBsb29raW5nIGZvciBpdCAqLworCQlpZiAobmFtZVt3aG9sZW5dID09IDApCisJCQl2LT5zID0gY29weV9saW5lKHdob2xpbmUpOworCQllbHNlIGlmICghc3RyY21wKG5hbWUgKyB3aG9sZW4sICJuYW1lIikpCisJCQl2LT5zID0gY29weV9uYW1lKHdob2xpbmUpOworCQllbHNlIGlmICghc3RyY21wKG5hbWUgKyB3aG9sZW4sICJlbWFpbCIpKQorCQkJdi0+cyA9IGNvcHlfZW1haWwod2hvbGluZSk7CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKG5hbWUgKyB3aG9sZW4sICJkYXRlIikpCisJCQlncmFiX2RhdGUod2hvbGluZSwgdiwgbmFtZSk7CisJfQorCisJLyoKKwkgKiBGb3IgYSB0YWcgb3IgYSBjb21taXQgb2JqZWN0LCBpZiAiY3JlYXRvciIgb3IgImNyZWF0b3JkYXRlIiBpcworCSAqIHJlcXVlc3RlZCwgZG8gc29tZXRoaW5nIHNwZWNpYWwuCisJICovCisJaWYgKHN0cmNtcCh3aG8sICJ0YWdnZXIiKSAmJiBzdHJjbXAod2hvLCAiY29tbWl0dGVyIikpCisJCXJldHVybjsgLyogImF1dGhvciIgZm9yIGNvbW1pdCBvYmplY3QgaXMgbm90IHdhbnRlZCAqLworCWlmICghd2hvbGluZSkKKwkJd2hvbGluZSA9IGZpbmRfd2hvbGluZSh3aG8sIHdob2xlbiwgYnVmKTsKKwlpZiAoIXdob2xpbmUpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgdXNlZF9hdG9tX2NudDsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSB1c2VkX2F0b21baV0ubmFtZTsKKwkJc3RydWN0IGF0b21fdmFsdWUgKnYgPSAmdmFsW2ldOworCQlpZiAoISFkZXJlZiAhPSAoKm5hbWUgPT0gJyonKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVyZWYpCisJCQluYW1lKys7CisKKwkJaWYgKHN0YXJ0c193aXRoKG5hbWUsICJjcmVhdG9yZGF0ZSIpKQorCQkJZ3JhYl9kYXRlKHdob2xpbmUsIHYsIG5hbWUpOworCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJjcmVhdG9yIikpCisJCQl2LT5zID0gY29weV9saW5lKHdob2xpbmUpOworCX0KK30KKworc3RhdGljIHZvaWQgZmluZF9zdWJwb3MoY29uc3QgY2hhciAqYnVmLAorCQkJY29uc3QgY2hhciAqKnN1YiwgdW5zaWduZWQgbG9uZyAqc3VibGVuLAorCQkJY29uc3QgY2hhciAqKmJvZHksIHVuc2lnbmVkIGxvbmcgKmJvZHlsZW4sCisJCQl1bnNpZ25lZCBsb25nICpub25zaWdsZW4sCisJCQljb25zdCBjaGFyICoqc2lnLCB1bnNpZ25lZCBsb25nICpzaWdsZW4pCit7CisJY29uc3QgY2hhciAqZW9sOworCS8qIHNraXAgcGFzdCBoZWFkZXIgdW50aWwgd2UgaGl0IGVtcHR5IGxpbmUgKi8KKwl3aGlsZSAoKmJ1ZiAmJiAqYnVmICE9ICdcbicpIHsKKwkJZW9sID0gc3RyY2hybnVsKGJ1ZiwgJ1xuJyk7CisJCWlmICgqZW9sKQorCQkJZW9sKys7CisJCWJ1ZiA9IGVvbDsKKwl9CisJLyogc2tpcCBhbnkgZW1wdHkgbGluZXMgKi8KKwl3aGlsZSAoKmJ1ZiA9PSAnXG4nKQorCQlidWYrKzsKKworCS8qIHBhcnNlIHNpZ25hdHVyZSBmaXJzdDsgd2UgbWlnaHQgbm90IGV2ZW4gaGF2ZSBhIHN1YmplY3QgbGluZSAqLworCSpzaWcgPSBidWYgKyBwYXJzZV9zaWduYXR1cmUoYnVmLCBzdHJsZW4oYnVmKSk7CisJKnNpZ2xlbiA9IHN0cmxlbigqc2lnKTsKKworCS8qIHN1YmplY3QgaXMgZmlyc3Qgbm9uLWVtcHR5IGxpbmUgKi8KKwkqc3ViID0gYnVmOworCS8qIHN1YmplY3QgZ29lcyB0byBmaXJzdCBlbXB0eSBsaW5lICovCisJd2hpbGUgKGJ1ZiA8ICpzaWcgJiYgKmJ1ZiAmJiAqYnVmICE9ICdcbicpIHsKKwkJZW9sID0gc3RyY2hybnVsKGJ1ZiwgJ1xuJyk7CisJCWlmICgqZW9sKQorCQkJZW9sKys7CisJCWJ1ZiA9IGVvbDsKKwl9CisJKnN1YmxlbiA9IGJ1ZiAtICpzdWI7CisJLyogZHJvcCB0cmFpbGluZyBuZXdsaW5lLCBpZiBwcmVzZW50ICovCisJaWYgKCpzdWJsZW4gJiYgKCpzdWIpWypzdWJsZW4gLSAxXSA9PSAnXG4nKQorCQkqc3VibGVuIC09IDE7CisKKwkvKiBza2lwIGFueSBlbXB0eSBsaW5lcyAqLworCXdoaWxlICgqYnVmID09ICdcbicpCisJCWJ1ZisrOworCSpib2R5ID0gYnVmOworCSpib2R5bGVuID0gc3RybGVuKGJ1Zik7CisJKm5vbnNpZ2xlbiA9ICpzaWcgLSBidWY7Cit9CisKKy8qCisgKiBJZiAnbGluZXMnIGlzIGdyZWF0ZXIgdGhhbiAwLCBhcHBlbmQgdGhhdCBtYW55IGxpbmVzIGZyb20gdGhlIGdpdmVuCisgKiAnYnVmJyBvZiBsZW5ndGggJ3NpemUnIHRvIHRoZSBnaXZlbiBzdHJidWYuCisgKi8KK3N0YXRpYyB2b2lkIGFwcGVuZF9saW5lcyhzdHJ1Y3Qgc3RyYnVmICpvdXQsIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbGluZXMpCit7CisJaW50IGk7CisJY29uc3QgY2hhciAqc3AsICplb2w7CisJc2l6ZV90IGxlbjsKKworCXNwID0gYnVmOworCisJZm9yIChpID0gMDsgaSA8IGxpbmVzICYmIHNwIDwgYnVmICsgc2l6ZTsgaSsrKSB7CisJCWlmIChpKQorCQkJc3RyYnVmX2FkZHN0cihvdXQsICJcbiAgICAiKTsKKwkJZW9sID0gbWVtY2hyKHNwLCAnXG4nLCBzaXplIC0gKHNwIC0gYnVmKSk7CisJCWxlbiA9IGVvbCA/IGVvbCAtIHNwIDogc2l6ZSAtIChzcCAtIGJ1Zik7CisJCXN0cmJ1Zl9hZGQob3V0LCBzcCwgbGVuKTsKKwkJaWYgKCFlb2wpCisJCQlicmVhazsKKwkJc3AgPSBlb2wgKyAxOworCX0KK30KKworLyogU2VlIGdyYWJfdmFsdWVzICovCitzdGF0aWMgdm9pZCBncmFiX3N1Yl9ib2R5X2NvbnRlbnRzKHN0cnVjdCBhdG9tX3ZhbHVlICp2YWwsIGludCBkZXJlZiwgdm9pZCAqYnVmKQoreworCWludCBpOworCWNvbnN0IGNoYXIgKnN1YnBvcyA9IE5VTEwsICpib2R5cG9zID0gTlVMTCwgKnNpZ3BvcyA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBzdWJsZW4gPSAwLCBib2R5bGVuID0gMCwgbm9uc2lnbGVuID0gMCwgc2lnbGVuID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspIHsKKwkJc3RydWN0IHVzZWRfYXRvbSAqYXRvbSA9ICZ1c2VkX2F0b21baV07CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBhdG9tLT5uYW1lOworCQlzdHJ1Y3QgYXRvbV92YWx1ZSAqdiA9ICZ2YWxbaV07CisJCWlmICghIWRlcmVmICE9ICgqbmFtZSA9PSAnKicpKQorCQkJY29udGludWU7CisJCWlmIChkZXJlZikKKwkJCW5hbWUrKzsKKwkJaWYgKHN0cmNtcChuYW1lLCAic3ViamVjdCIpICYmCisJCSAgICBzdHJjbXAobmFtZSwgImJvZHkiKSAmJgorCQkgICAgIXN0YXJ0c193aXRoKG5hbWUsICJ0cmFpbGVycyIpICYmCisJCSAgICAhc3RhcnRzX3dpdGgobmFtZSwgImNvbnRlbnRzIikpCisJCQljb250aW51ZTsKKwkJaWYgKCFzdWJwb3MpCisJCQlmaW5kX3N1YnBvcyhidWYsCisJCQkJICAgICZzdWJwb3MsICZzdWJsZW4sCisJCQkJICAgICZib2R5cG9zLCAmYm9keWxlbiwgJm5vbnNpZ2xlbiwKKwkJCQkgICAgJnNpZ3BvcywgJnNpZ2xlbik7CisKKwkJaWYgKGF0b20tPnUuY29udGVudHMub3B0aW9uID09IENfU1VCKQorCQkJdi0+cyA9IGNvcHlfc3ViamVjdChzdWJwb3MsIHN1Ymxlbik7CisJCWVsc2UgaWYgKGF0b20tPnUuY29udGVudHMub3B0aW9uID09IENfQk9EWV9ERVApCisJCQl2LT5zID0geG1lbWR1cHooYm9keXBvcywgYm9keWxlbik7CisJCWVsc2UgaWYgKGF0b20tPnUuY29udGVudHMub3B0aW9uID09IENfQk9EWSkKKwkJCXYtPnMgPSB4bWVtZHVweihib2R5cG9zLCBub25zaWdsZW4pOworCQllbHNlIGlmIChhdG9tLT51LmNvbnRlbnRzLm9wdGlvbiA9PSBDX1NJRykKKwkJCXYtPnMgPSB4bWVtZHVweihzaWdwb3MsIHNpZ2xlbik7CisJCWVsc2UgaWYgKGF0b20tPnUuY29udGVudHMub3B0aW9uID09IENfTElORVMpIHsKKwkJCXN0cnVjdCBzdHJidWYgcyA9IFNUUkJVRl9JTklUOworCQkJY29uc3QgY2hhciAqY29udGVudHNfZW5kID0gYm9keWxlbiArIGJvZHlwb3MgLSBzaWdsZW47CisKKwkJCS8qICBTaXplIGlzIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgYWZ0ZXIgcmVtb3ZpbmcgdGhlIHNpZ25hdHVyZSAqLworCQkJYXBwZW5kX2xpbmVzKCZzLCBzdWJwb3MsIGNvbnRlbnRzX2VuZCAtIHN1YnBvcywgYXRvbS0+dS5jb250ZW50cy5ubGluZXMpOworCQkJdi0+cyA9IHN0cmJ1Zl9kZXRhY2goJnMsIE5VTEwpOworCQl9IGVsc2UgaWYgKGF0b20tPnUuY29udGVudHMub3B0aW9uID09IENfVFJBSUxFUlMpIHsKKwkJCXN0cnVjdCBzdHJidWYgcyA9IFNUUkJVRl9JTklUOworCisJCQkvKiBGb3JtYXQgdGhlIHRyYWlsZXIgaW5mbyBhY2NvcmRpbmcgdG8gdGhlIHRyYWlsZXJfb3B0cyBnaXZlbiAqLworCQkJZm9ybWF0X3RyYWlsZXJzX2Zyb21fY29tbWl0KCZzLCBzdWJwb3MsICZhdG9tLT51LmNvbnRlbnRzLnRyYWlsZXJfb3B0cyk7CisKKwkJCXYtPnMgPSBzdHJidWZfZGV0YWNoKCZzLCBOVUxMKTsKKwkJfSBlbHNlIGlmIChhdG9tLT51LmNvbnRlbnRzLm9wdGlvbiA9PSBDX0JBUkUpCisJCQl2LT5zID0geHN0cmR1cChzdWJwb3MpOworCX0KK30KKworLyoKKyAqIFdlIHdhbnQgdG8gaGF2ZSBlbXB0eSBwcmludC1zdHJpbmcgZm9yIGZpZWxkIHJlcXVlc3RzCisgKiB0aGF0IGRvIG5vdCBhcHBseSAoZS5nLiAiYXV0aG9yZGF0ZSIgZm9yIGEgdGFnIG9iamVjdCkKKyAqLworc3RhdGljIHZvaWQgZmlsbF9taXNzaW5nX3ZhbHVlcyhzdHJ1Y3QgYXRvbV92YWx1ZSAqdmFsKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspIHsKKwkJc3RydWN0IGF0b21fdmFsdWUgKnYgPSAmdmFsW2ldOworCQlpZiAodi0+cyA9PSBOVUxMKQorCQkJdi0+cyA9IHhzdHJkdXAoIiIpOworCX0KK30KKworLyoKKyAqIHZhbCBpcyBhIGxpc3Qgb2YgYXRvbV92YWx1ZSB0byBob2xkIHJldHVybmVkIHZhbHVlcy4gIEV4dHJhY3QKKyAqIHRoZSB2YWx1ZXMgZm9yIGF0b21zIGluIHVzZWRfYXRvbSBhcnJheSBvdXQgb2YgKG9iaiwgYnVmLCBzeikuCisgKiB3aGVuIGRlcmVmIGlzIGZhbHNlLCAob2JqLCBidWYsIHN6KSBpcyB0aGUgb2JqZWN0IHRoYXQgaXMKKyAqIHBvaW50ZWQgYXQgYnkgdGhlIHJlZiBpdHNlbGY7IG90aGVyd2lzZSBpdCBpcyB0aGUgb2JqZWN0IHRoZQorICogcmVmICh3aGljaCBpcyBhIHRhZykgcmVmZXJzIHRvLgorICovCitzdGF0aWMgdm9pZCBncmFiX3ZhbHVlcyhzdHJ1Y3QgYXRvbV92YWx1ZSAqdmFsLCBpbnQgZGVyZWYsIHN0cnVjdCBvYmplY3QgKm9iaiwgdm9pZCAqYnVmKQoreworCXN3aXRjaCAob2JqLT50eXBlKSB7CisJY2FzZSBPQkpfVEFHOgorCQlncmFiX3RhZ192YWx1ZXModmFsLCBkZXJlZiwgb2JqKTsKKwkJZ3JhYl9zdWJfYm9keV9jb250ZW50cyh2YWwsIGRlcmVmLCBidWYpOworCQlncmFiX3BlcnNvbigidGFnZ2VyIiwgdmFsLCBkZXJlZiwgYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBPQkpfQ09NTUlUOgorCQlncmFiX2NvbW1pdF92YWx1ZXModmFsLCBkZXJlZiwgb2JqKTsKKwkJZ3JhYl9zdWJfYm9keV9jb250ZW50cyh2YWwsIGRlcmVmLCBidWYpOworCQlncmFiX3BlcnNvbigiYXV0aG9yIiwgdmFsLCBkZXJlZiwgYnVmKTsKKwkJZ3JhYl9wZXJzb24oImNvbW1pdHRlciIsIHZhbCwgZGVyZWYsIGJ1Zik7CisJCWJyZWFrOworCWNhc2UgT0JKX1RSRUU6CisJCS8qIGdyYWJfdHJlZV92YWx1ZXModmFsLCBkZXJlZiwgb2JqLCBidWYsIHN6KTsgKi8KKwkJYnJlYWs7CisJY2FzZSBPQkpfQkxPQjoKKwkJLyogZ3JhYl9ibG9iX3ZhbHVlcyh2YWwsIGRlcmVmLCBvYmosIGJ1Ziwgc3opOyAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoIkVoPyAgT2JqZWN0IG9mIHR5cGUgJWQ/Iiwgb2JqLT50eXBlKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqY29weV9hZHZhbmNlKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKQoreworCXdoaWxlICgqc3JjKQorCQkqZHN0KysgPSAqc3JjKys7CisJcmV0dXJuIGRzdDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmxzdHJpcF9yZWZfY29tcG9uZW50cyhjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgbGVuKQoreworCWxvbmcgcmVtYWluaW5nID0gbGVuOworCWNvbnN0IGNoYXIgKnN0YXJ0ID0geHN0cmR1cChyZWZuYW1lKTsKKwljb25zdCBjaGFyICp0b19mcmVlID0gc3RhcnQ7CisKKwlpZiAobGVuIDwgMCkgeworCQlpbnQgaTsKKwkJY29uc3QgY2hhciAqcCA9IHJlZm5hbWU7CisKKwkJLyogRmluZCB0b3RhbCBubyBvZiAnLycgc2VwYXJhdGVkIHBhdGgtY29tcG9uZW50cyAqLworCQlmb3IgKGkgPSAwOyBwW2ldOyBwW2ldID09ICcvJyA/IGkrKyA6ICpwKyspCisJCQk7CisJCS8qCisJCSAqIFRoZSBudW1iZXIgb2YgY29tcG9uZW50cyB3ZSBuZWVkIHRvIHN0cmlwIGlzIG5vdworCQkgKiB0aGUgdG90YWwgbWludXMgdGhlIGNvbXBvbmVudHMgdG8gYmUgbGVmdCAoUGx1cyBvbmUKKwkJICogYmVjYXVzZSB3ZSBjb3VudCB0aGUgbnVtYmVyIG9mICcvJywgYnV0IHRoZSBudW1iZXIKKwkJICogb2YgY29tcG9uZW50cyBpcyBvbmUgbW9yZSB0aGFuIHRoZSBubyBvZiAnLycpLgorCQkgKi8KKwkJcmVtYWluaW5nID0gaSArIGxlbiArIDE7CisJfQorCisJd2hpbGUgKHJlbWFpbmluZyA+IDApIHsKKwkJc3dpdGNoICgqc3RhcnQrKykgeworCQljYXNlICdcMCc6CisJCQlmcmVlKChjaGFyICopdG9fZnJlZSk7CisJCQlyZXR1cm4geHN0cmR1cCgiIik7CisJCWNhc2UgJy8nOgorCQkJcmVtYWluaW5nLS07CisJCQlicmVhazsKKwkJfQorCX0KKworCXN0YXJ0ID0geHN0cmR1cChzdGFydCk7CisJZnJlZSgoY2hhciAqKXRvX2ZyZWUpOworCXJldHVybiBzdGFydDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJzdHJpcF9yZWZfY29tcG9uZW50cyhjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgbGVuKQoreworCWxvbmcgcmVtYWluaW5nID0gbGVuOworCWNvbnN0IGNoYXIgKnN0YXJ0ID0geHN0cmR1cChyZWZuYW1lKTsKKwljb25zdCBjaGFyICp0b19mcmVlID0gc3RhcnQ7CisKKwlpZiAobGVuIDwgMCkgeworCQlpbnQgaTsKKwkJY29uc3QgY2hhciAqcCA9IHJlZm5hbWU7CisKKwkJLyogRmluZCB0b3RhbCBubyBvZiAnLycgc2VwYXJhdGVkIHBhdGgtY29tcG9uZW50cyAqLworCQlmb3IgKGkgPSAwOyBwW2ldOyBwW2ldID09ICcvJyA/IGkrKyA6ICpwKyspCisJCQk7CisJCS8qCisJCSAqIFRoZSBudW1iZXIgb2YgY29tcG9uZW50cyB3ZSBuZWVkIHRvIHN0cmlwIGlzIG5vdworCQkgKiB0aGUgdG90YWwgbWludXMgdGhlIGNvbXBvbmVudHMgdG8gYmUgbGVmdCAoUGx1cyBvbmUKKwkJICogYmVjYXVzZSB3ZSBjb3VudCB0aGUgbnVtYmVyIG9mICcvJywgYnV0IHRoZSBudW1iZXIKKwkJICogb2YgY29tcG9uZW50cyBpcyBvbmUgbW9yZSB0aGFuIHRoZSBubyBvZiAnLycpLgorCQkgKi8KKwkJcmVtYWluaW5nID0gaSArIGxlbiArIDE7CisJfQorCisJd2hpbGUgKHJlbWFpbmluZy0tID4gMCkgeworCQljaGFyICpwID0gc3RycmNocihzdGFydCwgJy8nKTsKKwkJaWYgKHAgPT0gTlVMTCkgeworCQkJZnJlZSgoY2hhciAqKXRvX2ZyZWUpOworCQkJcmV0dXJuIHhzdHJkdXAoIiIpOworCQl9IGVsc2UKKwkJCXBbMF0gPSAnXDAnOworCX0KKwlyZXR1cm4gc3RhcnQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzaG93X3JlZihzdHJ1Y3QgcmVmbmFtZV9hdG9tICphdG9tLCBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWlmIChhdG9tLT5vcHRpb24gPT0gUl9TSE9SVCkKKwkJcmV0dXJuIHNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKHJlZm5hbWUsIHdhcm5fYW1iaWd1b3VzX3JlZnMpOworCWVsc2UgaWYgKGF0b20tPm9wdGlvbiA9PSBSX0xTVFJJUCkKKwkJcmV0dXJuIGxzdHJpcF9yZWZfY29tcG9uZW50cyhyZWZuYW1lLCBhdG9tLT5sc3RyaXApOworCWVsc2UgaWYgKGF0b20tPm9wdGlvbiA9PSBSX1JTVFJJUCkKKwkJcmV0dXJuIHJzdHJpcF9yZWZfY29tcG9uZW50cyhyZWZuYW1lLCBhdG9tLT5yc3RyaXApOworCWVsc2UKKwkJcmV0dXJuIHhzdHJkdXAocmVmbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfcmVtb3RlX3JlZl9kZXRhaWxzKHN0cnVjdCB1c2VkX2F0b20gKmF0b20sIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJICAgIHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgY29uc3QgY2hhciAqKnMpCit7CisJaW50IG51bV9vdXJzLCBudW1fdGhlaXJzOworCWlmIChhdG9tLT51LnJlbW90ZV9yZWYub3B0aW9uID09IFJSX1JFRikKKwkJKnMgPSBzaG93X3JlZigmYXRvbS0+dS5yZW1vdGVfcmVmLnJlZm5hbWUsIHJlZm5hbWUpOworCWVsc2UgaWYgKGF0b20tPnUucmVtb3RlX3JlZi5vcHRpb24gPT0gUlJfVFJBQ0spIHsKKwkJaWYgKHN0YXRfdHJhY2tpbmdfaW5mbyhicmFuY2gsICZudW1fb3VycywgJm51bV90aGVpcnMsCisJCQkJICAgICAgIE5VTEwsIGF0b20tPnUucmVtb3RlX3JlZi5wdXNoLAorCQkJCSAgICAgICBBSEVBRF9CRUhJTkRfRlVMTCkgPCAwKSB7CisJCQkqcyA9IHhzdHJkdXAobXNncy5nb25lKTsKKwkJfSBlbHNlIGlmICghbnVtX291cnMgJiYgIW51bV90aGVpcnMpCisJCQkqcyA9IHhzdHJkdXAoIiIpOworCQllbHNlIGlmICghbnVtX291cnMpCisJCQkqcyA9IHhzdHJmbXQobXNncy5iZWhpbmQsIG51bV90aGVpcnMpOworCQllbHNlIGlmICghbnVtX3RoZWlycykKKwkJCSpzID0geHN0cmZtdChtc2dzLmFoZWFkLCBudW1fb3Vycyk7CisJCWVsc2UKKwkJCSpzID0geHN0cmZtdChtc2dzLmFoZWFkX2JlaGluZCwKKwkJCQkgICAgIG51bV9vdXJzLCBudW1fdGhlaXJzKTsKKwkJaWYgKCFhdG9tLT51LnJlbW90ZV9yZWYubm9icmFja2V0ICYmICpzWzBdKSB7CisJCQljb25zdCBjaGFyICp0b19mcmVlID0gKnM7CisJCQkqcyA9IHhzdHJmbXQoIlslc10iLCAqcyk7CisJCQlmcmVlKCh2b2lkICopdG9fZnJlZSk7CisJCX0KKwl9IGVsc2UgaWYgKGF0b20tPnUucmVtb3RlX3JlZi5vcHRpb24gPT0gUlJfVFJBQ0tTSE9SVCkgeworCQlpZiAoc3RhdF90cmFja2luZ19pbmZvKGJyYW5jaCwgJm51bV9vdXJzLCAmbnVtX3RoZWlycywKKwkJCQkgICAgICAgTlVMTCwgYXRvbS0+dS5yZW1vdGVfcmVmLnB1c2gsCisJCQkJICAgICAgIEFIRUFEX0JFSElORF9GVUxMKSA8IDApIHsKKwkJCSpzID0geHN0cmR1cCgiIik7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKCFudW1fb3VycyAmJiAhbnVtX3RoZWlycykKKwkJCSpzID0geHN0cmR1cCgiPSIpOworCQllbHNlIGlmICghbnVtX291cnMpCisJCQkqcyA9IHhzdHJkdXAoIjwiKTsKKwkJZWxzZSBpZiAoIW51bV90aGVpcnMpCisJCQkqcyA9IHhzdHJkdXAoIj4iKTsKKwkJZWxzZQorCQkJKnMgPSB4c3RyZHVwKCI8PiIpOworCX0gZWxzZSBpZiAoYXRvbS0+dS5yZW1vdGVfcmVmLm9wdGlvbiA9PSBSUl9SRU1PVEVfTkFNRSkgeworCQlpbnQgZXhwbGljaXQ7CisJCWNvbnN0IGNoYXIgKnJlbW90ZSA9IGF0b20tPnUucmVtb3RlX3JlZi5wdXNoID8KKwkJCXB1c2hyZW1vdGVfZm9yX2JyYW5jaChicmFuY2gsICZleHBsaWNpdCkgOgorCQkJcmVtb3RlX2Zvcl9icmFuY2goYnJhbmNoLCAmZXhwbGljaXQpOworCQkqcyA9IHhzdHJkdXAoZXhwbGljaXQgPyByZW1vdGUgOiAiIik7CisJfSBlbHNlIGlmIChhdG9tLT51LnJlbW90ZV9yZWYub3B0aW9uID09IFJSX1JFTU9URV9SRUYpIHsKKwkJY29uc3QgY2hhciAqbWVyZ2U7CisKKwkJbWVyZ2UgPSByZW1vdGVfcmVmX2Zvcl9icmFuY2goYnJhbmNoLCBhdG9tLT51LnJlbW90ZV9yZWYucHVzaCk7CisJCSpzID0geHN0cmR1cChtZXJnZSA/IG1lcmdlIDogIiIpOworCX0gZWxzZQorCQlCVUcoInVuaGFuZGxlZCBSUl8qIGVudW0iKTsKK30KKworY2hhciAqZ2V0X2hlYWRfZGVzY3JpcHRpb24odm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGRlc2MgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlIHN0YXRlOworCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOworCXd0X3N0YXR1c19nZXRfc3RhdGUodGhlX3JlcG9zaXRvcnksICZzdGF0ZSwgMSk7CisKKwkvKgorCSAqIFRoZSAoIGNoYXJhY3RlciBtdXN0IGJlIGhhcmQtY29kZWQgYW5kIG5vdCBwYXJ0IG9mIGEgbG9jYWxpemFibGUKKwkgKiBzdHJpbmcsIHNpbmNlIHRoZSBkZXNjcmlwdGlvbiBpcyB1c2VkIGFzIGEgc29ydCBrZXkgYW5kIGNvbXBhcmVkCisJICogd2l0aCByZWYgbmFtZXMuCisJICovCisJc3RyYnVmX2FkZGNoKCZkZXNjLCAnKCcpOworCWlmIChzdGF0ZS5yZWJhc2VfaW5fcHJvZ3Jlc3MgfHwKKwkgICAgc3RhdGUucmViYXNlX2ludGVyYWN0aXZlX2luX3Byb2dyZXNzKSB7CisJCWlmIChzdGF0ZS5icmFuY2gpCisJCQlzdHJidWZfYWRkZigmZGVzYywgXygibm8gYnJhbmNoLCByZWJhc2luZyAlcyIpLAorCQkJCSAgICBzdGF0ZS5icmFuY2gpOworCQllbHNlCisJCQlzdHJidWZfYWRkZigmZGVzYywgXygibm8gYnJhbmNoLCByZWJhc2luZyBkZXRhY2hlZCBIRUFEICVzIiksCisJCQkJICAgIHN0YXRlLmRldGFjaGVkX2Zyb20pOworCX0gZWxzZSBpZiAoc3RhdGUuYmlzZWN0X2luX3Byb2dyZXNzKQorCQlzdHJidWZfYWRkZigmZGVzYywgXygibm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcyIpLAorCQkJICAgIHN0YXRlLmJyYW5jaCk7CisJZWxzZSBpZiAoc3RhdGUuZGV0YWNoZWRfZnJvbSkgeworCQlpZiAoc3RhdGUuZGV0YWNoZWRfYXQpCisJCQlzdHJidWZfYWRkc3RyKCZkZXNjLCBIRUFEX0RFVEFDSEVEX0FUKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZHN0cigmZGVzYywgSEVBRF9ERVRBQ0hFRF9GUk9NKTsKKwkJc3RyYnVmX2FkZHN0cigmZGVzYywgc3RhdGUuZGV0YWNoZWRfZnJvbSk7CisJfQorCWVsc2UKKwkJc3RyYnVmX2FkZHN0cigmZGVzYywgXygibm8gYnJhbmNoIikpOworCXN0cmJ1Zl9hZGRjaCgmZGVzYywgJyknKTsKKworCWZyZWUoc3RhdGUuYnJhbmNoKTsKKwlmcmVlKHN0YXRlLm9udG8pOworCWZyZWUoc3RhdGUuZGV0YWNoZWRfZnJvbSk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmRlc2MsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3N5bXJlZihzdHJ1Y3QgdXNlZF9hdG9tICphdG9tLCBzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKnJlZikKK3sKKwlpZiAoIXJlZi0+c3ltcmVmKQorCQlyZXR1cm4geHN0cmR1cCgiIik7CisJZWxzZQorCQlyZXR1cm4gc2hvd19yZWYoJmF0b20tPnUucmVmbmFtZSwgcmVmLT5zeW1yZWYpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3JlZm5hbWUoc3RydWN0IHVzZWRfYXRvbSAqYXRvbSwgc3RydWN0IHJlZl9hcnJheV9pdGVtICpyZWYpCit7CisJaWYgKHJlZi0+a2luZCAmIEZJTFRFUl9SRUZTX0RFVEFDSEVEX0hFQUQpCisJCXJldHVybiBnZXRfaGVhZF9kZXNjcmlwdGlvbigpOworCXJldHVybiBzaG93X3JlZigmYXRvbS0+dS5yZWZuYW1lLCByZWYtPnJlZm5hbWUpOworfQorCitzdGF0aWMgaW50IGdldF9vYmplY3Qoc3RydWN0IHJlZl9hcnJheV9pdGVtICpyZWYsIGludCBkZXJlZiwgc3RydWN0IG9iamVjdCAqKm9iaiwKKwkJICAgICAgc3RydWN0IGV4cGFuZF9kYXRhICpvaSwgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCS8qIHBhcnNlX29iamVjdF9idWZmZXIoKSB3aWxsIHNldCBlYXRlbiB0byAwIGlmIGZyZWUoKSB3aWxsIGJlIG5lZWRlZCAqLworCWludCBlYXRlbiA9IDE7CisJaWYgKG9pLT5pbmZvLmNvbnRlbnRwKSB7CisJCS8qIFdlIG5lZWQgdG8ga25vdyB0aGF0IHRvIHVzZSBwYXJzZV9vYmplY3RfYnVmZmVyIHByb3Blcmx5ICovCisJCW9pLT5pbmZvLnNpemVwID0gJm9pLT5zaXplOworCQlvaS0+aW5mby50eXBlcCA9ICZvaS0+dHlwZTsKKwl9CisJaWYgKG9pZF9vYmplY3RfaW5mb19leHRlbmRlZCh0aGVfcmVwb3NpdG9yeSwgJm9pLT5vaWQsICZvaS0+aW5mbywKKwkJCQkgICAgIE9CSkVDVF9JTkZPX0xPT0tVUF9SRVBMQUNFKSkKKwkJcmV0dXJuIHN0cmJ1Zl9hZGRmX3JldChlcnIsIC0xLCBfKCJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiKSwKKwkJCQkgICAgICAgb2lkX3RvX2hleCgmb2ktPm9pZCksIHJlZi0+cmVmbmFtZSk7CisJaWYgKG9pLT5pbmZvLmRpc2tfc2l6ZXAgJiYgb2ktPmRpc2tfc2l6ZSA8IDApCisJCUJVRygiT2JqZWN0IHNpemUgaXMgbGVzcyB0aGFuIHplcm8uIik7CisKKwlpZiAob2ktPmluZm8uY29udGVudHApIHsKKwkJKm9iaiA9IHBhcnNlX29iamVjdF9idWZmZXIodGhlX3JlcG9zaXRvcnksICZvaS0+b2lkLCBvaS0+dHlwZSwgb2ktPnNpemUsIG9pLT5jb250ZW50LCAmZWF0ZW4pOworCQlpZiAoIW9iaikgeworCQkJaWYgKCFlYXRlbikKKwkJCQlmcmVlKG9pLT5jb250ZW50KTsKKwkJCXJldHVybiBzdHJidWZfYWRkZl9yZXQoZXJyLCAtMSwgXygicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWlsZWQgb24gJXMgZm9yICVzIiksCisJCQkJCSAgICAgICBvaWRfdG9faGV4KCZvaS0+b2lkKSwgcmVmLT5yZWZuYW1lKTsKKwkJfQorCQlncmFiX3ZhbHVlcyhyZWYtPnZhbHVlLCBkZXJlZiwgKm9iaiwgb2ktPmNvbnRlbnQpOworCX0KKworCWdyYWJfY29tbW9uX3ZhbHVlcyhyZWYtPnZhbHVlLCBkZXJlZiwgb2kpOworCWlmICghZWF0ZW4pCisJCWZyZWUob2ktPmNvbnRlbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwb3B1bGF0ZV93b3JrdHJlZV9tYXAoc3RydWN0IGhhc2htYXAgKm1hcCwgc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgd29ya3RyZWVzW2ldOyBpKyspIHsKKwkJaWYgKHdvcmt0cmVlc1tpXS0+aGVhZF9yZWYpIHsKKwkJCXN0cnVjdCByZWZfdG9fd29ya3RyZWVfZW50cnkgKmVudHJ5OworCQkJZW50cnkgPSB4bWFsbG9jKHNpemVvZigqZW50cnkpKTsKKwkJCWVudHJ5LT53dCA9IHdvcmt0cmVlc1tpXTsKKwkJCWhhc2htYXBfZW50cnlfaW5pdCgmZW50cnktPmVudCwKKwkJCQkJc3RyaGFzaCh3b3JrdHJlZXNbaV0tPmhlYWRfcmVmKSk7CisKKwkJCWhhc2htYXBfYWRkKG1hcCwgJmVudHJ5LT5lbnQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBsYXp5X2luaXRfd29ya3RyZWVfbWFwKHZvaWQpCit7CisJaWYgKHJlZl90b193b3JrdHJlZV9tYXAud29ya3RyZWVzKQorCQlyZXR1cm47CisKKwlyZWZfdG9fd29ya3RyZWVfbWFwLndvcmt0cmVlcyA9IGdldF93b3JrdHJlZXMoMCk7CisJaGFzaG1hcF9pbml0KCYocmVmX3RvX3dvcmt0cmVlX21hcC5tYXApLCByZWZfdG9fd29ya3RyZWVfbWFwX2NtcGZuYywgTlVMTCwgMCk7CisJcG9wdWxhdGVfd29ya3RyZWVfbWFwKCYocmVmX3RvX3dvcmt0cmVlX21hcC5tYXApLCByZWZfdG9fd29ya3RyZWVfbWFwLndvcmt0cmVlcyk7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfd29ya3RyZWVfcGF0aChjb25zdCBzdHJ1Y3QgdXNlZF9hdG9tICphdG9tLCBjb25zdCBzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKnJlZikKK3sKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnRyeSwgKmU7CisJc3RydWN0IHJlZl90b193b3JrdHJlZV9lbnRyeSAqbG9va3VwX3Jlc3VsdDsKKworCWxhenlfaW5pdF93b3JrdHJlZV9tYXAoKTsKKworCWhhc2htYXBfZW50cnlfaW5pdCgmZW50cnksIHN0cmhhc2gocmVmLT5yZWZuYW1lKSk7CisJZSA9IGhhc2htYXBfZ2V0KCYocmVmX3RvX3dvcmt0cmVlX21hcC5tYXApLCAmZW50cnksIHJlZi0+cmVmbmFtZSk7CisKKwlpZiAoIWUpCisJCXJldHVybiB4c3RyZHVwKCIiKTsKKworCWxvb2t1cF9yZXN1bHQgPSBjb250YWluZXJfb2YoZSwgc3RydWN0IHJlZl90b193b3JrdHJlZV9lbnRyeSwgZW50KTsKKworCXJldHVybiB4c3RyZHVwKGxvb2t1cF9yZXN1bHQtPnd0LT5wYXRoKTsKK30KKworLyoKKyAqIFBhcnNlIHRoZSBvYmplY3QgcmVmZXJyZWQgYnkgcmVmLCBhbmQgZ3JhYiBuZWVkZWQgdmFsdWUuCisgKi8KK3N0YXRpYyBpbnQgcG9wdWxhdGVfdmFsdWUoc3RydWN0IHJlZl9hcnJheV9pdGVtICpyZWYsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJaW50IGk7CisJc3RydWN0IG9iamVjdF9pbmZvIGVtcHR5ID0gT0JKRUNUX0lORk9fSU5JVDsKKworCXJlZi0+dmFsdWUgPSB4Y2FsbG9jKHVzZWRfYXRvbV9jbnQsIHNpemVvZihzdHJ1Y3QgYXRvbV92YWx1ZSkpOworCisJaWYgKG5lZWRfc3ltcmVmICYmIChyZWYtPmZsYWcgJiBSRUZfSVNTWU1SRUYpICYmICFyZWYtPnN5bXJlZikgeworCQlyZWYtPnN5bXJlZiA9IHJlc29sdmVfcmVmZHVwKHJlZi0+cmVmbmFtZSwgUkVTT0xWRV9SRUZfUkVBRElORywKKwkJCQkJICAgICBOVUxMLCBOVUxMKTsKKwkJaWYgKCFyZWYtPnN5bXJlZikKKwkJCXJlZi0+c3ltcmVmID0geHN0cmR1cCgiIik7CisJfQorCisJLyogRmlsbCBpbiBzcGVjaWFscyBmaXJzdCAqLworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspIHsKKwkJc3RydWN0IHVzZWRfYXRvbSAqYXRvbSA9ICZ1c2VkX2F0b21baV07CisJCWNvbnN0IGNoYXIgKm5hbWUgPSB1c2VkX2F0b21baV0ubmFtZTsKKwkJc3RydWN0IGF0b21fdmFsdWUgKnYgPSAmcmVmLT52YWx1ZVtpXTsKKwkJaW50IGRlcmVmID0gMDsKKwkJY29uc3QgY2hhciAqcmVmbmFtZTsKKwkJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gTlVMTDsKKworCQl2LT5oYW5kbGVyID0gYXBwZW5kX2F0b207CisJCXYtPmF0b20gPSBhdG9tOworCisJCWlmICgqbmFtZSA9PSAnKicpIHsKKwkJCWRlcmVmID0gMTsKKwkJCW5hbWUrKzsKKwkJfQorCisJCWlmIChzdGFydHNfd2l0aChuYW1lLCAicmVmbmFtZSIpKQorCQkJcmVmbmFtZSA9IGdldF9yZWZuYW1lKGF0b20sIHJlZik7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgIndvcmt0cmVlcGF0aCIpKSB7CisJCQlpZiAocmVmLT5raW5kID09IEZJTFRFUl9SRUZTX0JSQU5DSEVTKQorCQkJCXYtPnMgPSBnZXRfd29ya3RyZWVfcGF0aChhdG9tLCByZWYpOworCQkJZWxzZQorCQkJCXYtPnMgPSB4c3RyZHVwKCIiKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKG5hbWUsICJzeW1yZWYiKSkKKwkJCXJlZm5hbWUgPSBnZXRfc3ltcmVmKGF0b20sIHJlZik7CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKG5hbWUsICJ1cHN0cmVhbSIpKSB7CisJCQljb25zdCBjaGFyICpicmFuY2hfbmFtZTsKKwkJCS8qIG9ubHkgbG9jYWwgYnJhbmNoZXMgbWF5IGhhdmUgYW4gdXBzdHJlYW0gKi8KKwkJCWlmICghc2tpcF9wcmVmaXgocmVmLT5yZWZuYW1lLCAicmVmcy9oZWFkcy8iLAorCQkJCQkgJmJyYW5jaF9uYW1lKSkgeworCQkJCXYtPnMgPSB4c3RyZHVwKCIiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWJyYW5jaCA9IGJyYW5jaF9nZXQoYnJhbmNoX25hbWUpOworCisJCQlyZWZuYW1lID0gYnJhbmNoX2dldF91cHN0cmVhbShicmFuY2gsIE5VTEwpOworCQkJaWYgKHJlZm5hbWUpCisJCQkJZmlsbF9yZW1vdGVfcmVmX2RldGFpbHMoYXRvbSwgcmVmbmFtZSwgYnJhbmNoLCAmdi0+cyk7CisJCQllbHNlCisJCQkJdi0+cyA9IHhzdHJkdXAoIiIpOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoYXRvbS0+dS5yZW1vdGVfcmVmLnB1c2gpIHsKKwkJCWNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lOworCQkJdi0+cyA9IHhzdHJkdXAoIiIpOworCQkJaWYgKCFza2lwX3ByZWZpeChyZWYtPnJlZm5hbWUsICJyZWZzL2hlYWRzLyIsCisJCQkJCSAmYnJhbmNoX25hbWUpKQorCQkJCWNvbnRpbnVlOworCQkJYnJhbmNoID0gYnJhbmNoX2dldChicmFuY2hfbmFtZSk7CisKKwkJCWlmIChhdG9tLT51LnJlbW90ZV9yZWYucHVzaF9yZW1vdGUpCisJCQkJcmVmbmFtZSA9IE5VTEw7CisJCQllbHNlIHsKKwkJCQlyZWZuYW1lID0gYnJhbmNoX2dldF9wdXNoKGJyYW5jaCwgTlVMTCk7CisJCQkJaWYgKCFyZWZuYW1lKQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIFdlIHdpbGwgZGVmaW5pdGVseSByZS1pbml0IHYtPnMgb24gdGhlIG5leHQgbGluZS4gKi8KKwkJCWZyZWUoKGNoYXIgKil2LT5zKTsKKwkJCWZpbGxfcmVtb3RlX3JlZl9kZXRhaWxzKGF0b20sIHJlZm5hbWUsIGJyYW5jaCwgJnYtPnMpOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgobmFtZSwgImNvbG9yOiIpKSB7CisJCQl2LT5zID0geHN0cmR1cChhdG9tLT51LmNvbG9yKTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImZsYWciKSkgeworCQkJY2hhciBidWZbMjU2XSwgKmNwID0gYnVmOworCQkJaWYgKHJlZi0+ZmxhZyAmIFJFRl9JU1NZTVJFRikKKwkJCQljcCA9IGNvcHlfYWR2YW5jZShjcCwgIixzeW1yZWYiKTsKKwkJCWlmIChyZWYtPmZsYWcgJiBSRUZfSVNQQUNLRUQpCisJCQkJY3AgPSBjb3B5X2FkdmFuY2UoY3AsICIscGFja2VkIik7CisJCQlpZiAoY3AgPT0gYnVmKQorCQkJCXYtPnMgPSB4c3RyZHVwKCIiKTsKKwkJCWVsc2UgeworCQkJCSpjcCA9ICdcMCc7CisJCQkJdi0+cyA9IHhzdHJkdXAoYnVmICsgMSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICghZGVyZWYgJiYgZ3JhYl9vYmplY3RuYW1lKG5hbWUsICZyZWYtPm9iamVjdG5hbWUsIHYsIGF0b20pKSB7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJIRUFEIikpIHsKKwkJCWlmIChhdG9tLT51LmhlYWQgJiYgIXN0cmNtcChyZWYtPnJlZm5hbWUsIGF0b20tPnUuaGVhZCkpCisJCQkJdi0+cyA9IHhzdHJkdXAoIioiKTsKKwkJCWVsc2UKKwkJCQl2LT5zID0geHN0cmR1cCgiICIpOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgobmFtZSwgImFsaWduIikpIHsKKwkJCXYtPmhhbmRsZXIgPSBhbGlnbl9hdG9tX2hhbmRsZXI7CisJCQl2LT5zID0geHN0cmR1cCgiIik7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJlbmQiKSkgeworCQkJdi0+aGFuZGxlciA9IGVuZF9hdG9tX2hhbmRsZXI7CisJCQl2LT5zID0geHN0cmR1cCgiIik7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChuYW1lLCAiaWYiKSkgeworCQkJY29uc3QgY2hhciAqczsKKwkJCWlmIChza2lwX3ByZWZpeChuYW1lLCAiaWY6IiwgJnMpKQorCQkJCXYtPnMgPSB4c3RyZHVwKHMpOworCQkJZWxzZQorCQkJCXYtPnMgPSB4c3RyZHVwKCIiKTsKKwkJCXYtPmhhbmRsZXIgPSBpZl9hdG9tX2hhbmRsZXI7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJ0aGVuIikpIHsKKwkJCXYtPmhhbmRsZXIgPSB0aGVuX2F0b21faGFuZGxlcjsKKwkJCXYtPnMgPSB4c3RyZHVwKCIiKTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImVsc2UiKSkgeworCQkJdi0+aGFuZGxlciA9IGVsc2VfYXRvbV9oYW5kbGVyOworCQkJdi0+cyA9IHhzdHJkdXAoIiIpOworCQkJY29udGludWU7CisJCX0gZWxzZQorCQkJY29udGludWU7CisKKwkJaWYgKCFkZXJlZikKKwkJCXYtPnMgPSB4c3RyZHVwKHJlZm5hbWUpOworCQllbHNlCisJCQl2LT5zID0geHN0cmZtdCgiJXNee30iLCByZWZuYW1lKTsKKwkJZnJlZSgoY2hhciAqKXJlZm5hbWUpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspIHsKKwkJc3RydWN0IGF0b21fdmFsdWUgKnYgPSAmcmVmLT52YWx1ZVtpXTsKKwkJaWYgKHYtPnMgPT0gTlVMTCAmJiB1c2VkX2F0b21baV0uc291cmNlID09IFNPVVJDRV9OT05FKQorCQkJcmV0dXJuIHN0cmJ1Zl9hZGRmX3JldChlcnIsIC0xLCBfKCJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiKSwKKwkJCQkJICAgICAgIG9pZF90b19oZXgoJnJlZi0+b2JqZWN0bmFtZSksIHJlZi0+cmVmbmFtZSk7CisJfQorCisJaWYgKG5lZWRfdGFnZ2VkKQorCQlvaS5pbmZvLmNvbnRlbnRwID0gJm9pLmNvbnRlbnQ7CisJaWYgKCFtZW1jbXAoJm9pLmluZm8sICZlbXB0eSwgc2l6ZW9mKGVtcHR5KSkgJiYKKwkgICAgIW1lbWNtcCgmb2lfZGVyZWYuaW5mbywgJmVtcHR5LCBzaXplb2YoZW1wdHkpKSkKKwkJcmV0dXJuIDA7CisKKworCW9pLm9pZCA9IHJlZi0+b2JqZWN0bmFtZTsKKwlpZiAoZ2V0X29iamVjdChyZWYsIDAsICZvYmosICZvaSwgZXJyKSkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBubyBhdG9tIHRoYXQgd2FudHMgdG8ga25vdyBhYm91dCB0YWdnZWQKKwkgKiBvYmplY3QsIHdlIGFyZSBkb25lLgorCSAqLworCWlmICghbmVlZF90YWdnZWQgfHwgKG9iai0+dHlwZSAhPSBPQkpfVEFHKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIGl0IGlzIGEgdGFnIG9iamVjdCwgc2VlIGlmIHdlIHVzZSBhIHZhbHVlIHRoYXQgZGVyZWZzCisJICogdGhlIG9iamVjdCwgYW5kIGlmIHdlIGRvIGdyYWIgdGhlIG9iamVjdCBpdCByZWZlcnMgdG8uCisJICovCisJb2lfZGVyZWYub2lkID0gKmdldF90YWdnZWRfb2lkKChzdHJ1Y3QgdGFnICopb2JqKTsKKworCS8qCisJICogTkVFRFNXT1JLOiBUaGlzIGRlcmVmcyB0YWcgb25seSBvbmNlLCB3aGljaAorCSAqIGlzIGdvb2QgdG8gZGVhbCB3aXRoIGNoYWlucyBvZiB0cnVzdCwgYnV0CisJICogaXMgbm90IGNvbnNpc3RlbnQgd2l0aCB3aGF0IGRlcmVmX3RhZygpIGRvZXMKKwkgKiB3aGljaCBwZWVscyB0aGUgb25pb24gdG8gdGhlIGNvcmUuCisJICovCisJcmV0dXJuIGdldF9vYmplY3QocmVmLCAxLCAmb2JqLCAmb2lfZGVyZWYsIGVycik7Cit9CisKKy8qCisgKiBHaXZlbiBhIHJlZiwgcmV0dXJuIHRoZSB2YWx1ZSBmb3IgdGhlIGF0b20uICBUaGlzIGxhemlseSBnZXRzIHZhbHVlCisgKiBvdXQgb2YgdGhlIG9iamVjdCBieSBjYWxsaW5nIHBvcHVsYXRlIHZhbHVlLgorICovCitzdGF0aWMgaW50IGdldF9yZWZfYXRvbV92YWx1ZShzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKnJlZiwgaW50IGF0b20sCisJCQkgICAgICBzdHJ1Y3QgYXRvbV92YWx1ZSAqKnYsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlpZiAoIXJlZi0+dmFsdWUpIHsKKwkJaWYgKHBvcHVsYXRlX3ZhbHVlKHJlZiwgZXJyKSkKKwkJCXJldHVybiAtMTsKKwkJZmlsbF9taXNzaW5nX3ZhbHVlcyhyZWYtPnZhbHVlKTsKKwl9CisJKnYgPSAmcmVmLT52YWx1ZVthdG9tXTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiAxIGlmIHRoZSByZWZuYW1lIG1hdGNoZXMgb25lIG9mIHRoZSBwYXR0ZXJucywgb3RoZXJ3aXNlIDAuCisgKiBBIHBhdHRlcm4gY2FuIGJlIGEgbGl0ZXJhbCBwcmVmaXggKGUuZy4gYSByZWZuYW1lICJyZWZzL2hlYWRzL21hc3RlciIKKyAqIG1hdGNoZXMgYSBwYXR0ZXJuICJyZWZzL2hlYWRzL21hcyIpIG9yIGEgd2lsZGNhcmQgKGUuZy4gdGhlIHNhbWUgcmVmCisgKiBtYXRjaGVzICJyZWZzL2hlYWRzL21hcyoiLCB0b28pLgorICovCitzdGF0aWMgaW50IG1hdGNoX3BhdHRlcm4oY29uc3Qgc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciwgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwljb25zdCBjaGFyICoqcGF0dGVybnMgPSBmaWx0ZXItPm5hbWVfcGF0dGVybnM7CisJdW5zaWduZWQgZmxhZ3MgPSAwOworCisJaWYgKGZpbHRlci0+aWdub3JlX2Nhc2UpCisJCWZsYWdzIHw9IFdNX0NBU0VGT0xEOworCisJLyoKKwkgKiBXaGVuIG5vICctLWZvcm1hdCcgb3B0aW9uIGlzIGdpdmVuIHdlIG5lZWQgdG8gc2tpcCB0aGUgcHJlZml4CisJICogZm9yIG1hdGNoaW5nIHJlZnMgb2YgdGFncyBhbmQgYnJhbmNoZXMuCisJICovCisJKHZvaWQpKHNraXBfcHJlZml4KHJlZm5hbWUsICJyZWZzL3RhZ3MvIiwgJnJlZm5hbWUpIHx8CisJICAgICAgIHNraXBfcHJlZml4KHJlZm5hbWUsICJyZWZzL2hlYWRzLyIsICZyZWZuYW1lKSB8fAorCSAgICAgICBza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIsICZyZWZuYW1lKSB8fAorCSAgICAgICBza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy8iLCAmcmVmbmFtZSkpOworCisJZm9yICg7ICpwYXR0ZXJuczsgcGF0dGVybnMrKykgeworCQlpZiAoIXdpbGRtYXRjaCgqcGF0dGVybnMsIHJlZm5hbWUsIGZsYWdzKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiAxIGlmIHRoZSByZWZuYW1lIG1hdGNoZXMgb25lIG9mIHRoZSBwYXR0ZXJucywgb3RoZXJ3aXNlIDAuCisgKiBBIHBhdHRlcm4gY2FuIGJlIHBhdGggcHJlZml4IChlLmcuIGEgcmVmbmFtZSAicmVmcy9oZWFkcy9tYXN0ZXIiCisgKiBtYXRjaGVzIGEgcGF0dGVybiAicmVmcy9oZWFkcy8iIGJ1dCBub3QgInJlZnMvaGVhZHMvbSIpIG9yIGEKKyAqIHdpbGRjYXJkIChlLmcuIHRoZSBzYW1lIHJlZiBtYXRjaGVzICJyZWZzL2hlYWRzL20qIiwgdG9vKS4KKyAqLworc3RhdGljIGludCBtYXRjaF9uYW1lX2FzX3BhdGgoY29uc3Qgc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciwgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwljb25zdCBjaGFyICoqcGF0dGVybiA9IGZpbHRlci0+bmFtZV9wYXR0ZXJuczsKKwlpbnQgbmFtZWxlbiA9IHN0cmxlbihyZWZuYW1lKTsKKwl1bnNpZ25lZCBmbGFncyA9IFdNX1BBVEhOQU1FOworCisJaWYgKGZpbHRlci0+aWdub3JlX2Nhc2UpCisJCWZsYWdzIHw9IFdNX0NBU0VGT0xEOworCisJZm9yICg7ICpwYXR0ZXJuOyBwYXR0ZXJuKyspIHsKKwkJY29uc3QgY2hhciAqcCA9ICpwYXR0ZXJuOworCQlpbnQgcGxlbiA9IHN0cmxlbihwKTsKKworCQlpZiAoKHBsZW4gPD0gbmFtZWxlbikgJiYKKwkJICAgICFzdHJuY21wKHJlZm5hbWUsIHAsIHBsZW4pICYmCisJCSAgICAocmVmbmFtZVtwbGVuXSA9PSAnXDAnIHx8CisJCSAgICAgcmVmbmFtZVtwbGVuXSA9PSAnLycgfHwKKwkJICAgICBwW3BsZW4tMV0gPT0gJy8nKSkKKwkJCXJldHVybiAxOworCQlpZiAoIXdpbGRtYXRjaChwLCByZWZuYW1lLCBmbGFncykpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybiAxIGlmIHRoZSByZWZuYW1lIG1hdGNoZXMgb25lIG9mIHRoZSBwYXR0ZXJucywgb3RoZXJ3aXNlIDAuICovCitzdGF0aWMgaW50IGZpbHRlcl9wYXR0ZXJuX21hdGNoKHN0cnVjdCByZWZfZmlsdGVyICpmaWx0ZXIsIGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJaWYgKCEqZmlsdGVyLT5uYW1lX3BhdHRlcm5zKQorCQlyZXR1cm4gMTsgLyogTm8gcGF0dGVybiBhbHdheXMgbWF0Y2hlcyAqLworCWlmIChmaWx0ZXItPm1hdGNoX2FzX3BhdGgpCisJCXJldHVybiBtYXRjaF9uYW1lX2FzX3BhdGgoZmlsdGVyLCByZWZuYW1lKTsKKwlyZXR1cm4gbWF0Y2hfcGF0dGVybihmaWx0ZXIsIHJlZm5hbWUpOworfQorCitzdGF0aWMgaW50IHFzb3J0X3N0cmNtcChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpCit7CisJY29uc3QgY2hhciAqYSA9ICooY29uc3QgY2hhciAqKil2YTsKKwljb25zdCBjaGFyICpiID0gKihjb25zdCBjaGFyICoqKXZiOworCisJcmV0dXJuIHN0cmNtcChhLCBiKTsKK30KKworc3RhdGljIHZvaWQgZmluZF9sb25nZXN0X3ByZWZpeGVzXzEoc3RydWN0IHN0cmluZ19saXN0ICpvdXQsCisJCQkJICBzdHJ1Y3Qgc3RyYnVmICpwcmVmaXgsCisJCQkJICBjb25zdCBjaGFyICoqcGF0dGVybnMsIHNpemVfdCBucikKK3sKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCWNoYXIgYyA9IHBhdHRlcm5zW2ldW3ByZWZpeC0+bGVuXTsKKwkJaWYgKCFjIHx8IGlzX2dsb2Jfc3BlY2lhbChjKSkgeworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKG91dCwgcHJlZml4LT5idWYpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaSA9IDA7CisJd2hpbGUgKGkgPCBucikgeworCQlzaXplX3QgZW5kOworCisJCS8qCisJCSogU2V0ICJlbmQiIHRvIHRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCBfYWZ0ZXJfIHRoZSBsYXN0IG9uZQorCQkqIGluIG91ciBncm91cC4KKwkJKi8KKwkJZm9yIChlbmQgPSBpICsgMTsgZW5kIDwgbnI7IGVuZCsrKSB7CisJCQlpZiAocGF0dGVybnNbaV1bcHJlZml4LT5sZW5dICE9IHBhdHRlcm5zW2VuZF1bcHJlZml4LT5sZW5dKQorCQkJCWJyZWFrOworCQl9CisKKwkJc3RyYnVmX2FkZGNoKHByZWZpeCwgcGF0dGVybnNbaV1bcHJlZml4LT5sZW5dKTsKKwkJZmluZF9sb25nZXN0X3ByZWZpeGVzXzEob3V0LCBwcmVmaXgsIHBhdHRlcm5zICsgaSwgZW5kIC0gaSk7CisJCXN0cmJ1Zl9zZXRsZW4ocHJlZml4LCBwcmVmaXgtPmxlbiAtIDEpOworCisJCWkgPSBlbmQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5kX2xvbmdlc3RfcHJlZml4ZXMoc3RydWN0IHN0cmluZ19saXN0ICpvdXQsCisJCQkJICBjb25zdCBjaGFyICoqcGF0dGVybnMpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgc29ydGVkID0gQVJHVl9BUlJBWV9JTklUOworCXN0cnVjdCBzdHJidWYgcHJlZml4ID0gU1RSQlVGX0lOSVQ7CisKKwlhcmd2X2FycmF5X3B1c2h2KCZzb3J0ZWQsIHBhdHRlcm5zKTsKKwlRU09SVChzb3J0ZWQuYXJndiwgc29ydGVkLmFyZ2MsIHFzb3J0X3N0cmNtcCk7CisKKwlmaW5kX2xvbmdlc3RfcHJlZml4ZXNfMShvdXQsICZwcmVmaXgsIHNvcnRlZC5hcmd2LCBzb3J0ZWQuYXJnYyk7CisKKwlhcmd2X2FycmF5X2NsZWFyKCZzb3J0ZWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmVmaXgpOworfQorCisvKgorICogVGhpcyBpcyB0aGUgc2FtZSBhcyBmb3JfZWFjaF9mdWxscmVmX2luKCksIGJ1dCBpdCB0cmllcyB0byBpdGVyYXRlCisgKiBvbmx5IG92ZXIgdGhlIHBhdHRlcm5zIHdlJ2xsIGNhcmUgYWJvdXQuIE5vdGUgdGhhdCBpdCBfZG9lc24ndF8gZG8gYSBmdWxsCisgKiBwYXR0ZXJuIG1hdGNoLCBzbyB0aGUgY2FsbGJhY2sgc3RpbGwgaGFzIHRvIG1hdGNoIGVhY2ggcmVmIGluZGl2aWR1YWxseS4KKyAqLworc3RhdGljIGludCBmb3JfZWFjaF9mdWxscmVmX2luX3BhdHRlcm4oc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciwKKwkJCQkgICAgICAgZWFjaF9yZWZfZm4gY2IsCisJCQkJICAgICAgIHZvaWQgKmNiX2RhdGEsCisJCQkJICAgICAgIGludCBicm9rZW4pCit7CisJc3RydWN0IHN0cmluZ19saXN0IHByZWZpeGVzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnByZWZpeDsKKwlpbnQgcmV0OworCisJaWYgKCFmaWx0ZXItPm1hdGNoX2FzX3BhdGgpIHsKKwkJLyoKKwkJICogaW4gdGhpcyBjYXNlLCB0aGUgcGF0dGVybnMgYXJlIGFwcGxpZWQgYWZ0ZXIKKwkJICogcHJlZml4ZXMgbGlrZSAicmVmcy9oZWFkcy8iIGV0Yy4gYXJlIHN0cmlwcGVkIG9mZiwKKwkJICogc28gd2UgaGF2ZSB0byBsb29rIGF0IGV2ZXJ5dGhpbmc6CisJCSAqLworCQlyZXR1cm4gZm9yX2VhY2hfZnVsbHJlZl9pbigiIiwgY2IsIGNiX2RhdGEsIGJyb2tlbik7CisJfQorCisJaWYgKGZpbHRlci0+aWdub3JlX2Nhc2UpIHsKKwkJLyoKKwkJICogd2UgY2FuJ3QgaGFuZGxlIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbnMsCisJCSAqIHNvIGp1c3QgcmV0dXJuIGV2ZXJ5dGhpbmcgYW5kIGxldCB0aGUgY2FsbGVyCisJCSAqIHNvcnQgaXQgb3V0LgorCQkgKi8KKwkJcmV0dXJuIGZvcl9lYWNoX2Z1bGxyZWZfaW4oIiIsIGNiLCBjYl9kYXRhLCBicm9rZW4pOworCX0KKworCWlmICghZmlsdGVyLT5uYW1lX3BhdHRlcm5zWzBdKSB7CisJCS8qIG5vIHBhdHRlcm5zOyB3ZSBoYXZlIHRvIGxvb2sgYXQgZXZlcnl0aGluZyAqLworCQlyZXR1cm4gZm9yX2VhY2hfZnVsbHJlZl9pbigiIiwgY2IsIGNiX2RhdGEsIGJyb2tlbik7CisJfQorCisJZmluZF9sb25nZXN0X3ByZWZpeGVzKCZwcmVmaXhlcywgZmlsdGVyLT5uYW1lX3BhdHRlcm5zKTsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0ocHJlZml4LCAmcHJlZml4ZXMpIHsKKwkJcmV0ID0gZm9yX2VhY2hfZnVsbHJlZl9pbihwcmVmaXgtPnN0cmluZywgY2IsIGNiX2RhdGEsIGJyb2tlbik7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmcHJlZml4ZXMsIDApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIHJlZiAob2lkLCByZWZuYW1lKSwgY2hlY2sgaWYgdGhlIHJlZiBiZWxvbmdzIHRvIHRoZSBhcnJheQorICogb2Ygb2lkcy4gSWYgdGhlIGdpdmVuIHJlZiBpcyBhIHRhZywgY2hlY2sgaWYgdGhlIGdpdmVuIHRhZyBwb2ludHMKKyAqIGF0IG9uZSBvZiB0aGUgb2lkcyBpbiB0aGUgZ2l2ZW4gb2lkIGFycmF5LgorICogTkVFRFNXT1JLOgorICogMS4gT25seSBhIHNpbmdsZSBsZXZlbCBvZiBpbmRlcmVjdGlvbiBpcyBvYnRhaW5lZCwgd2UgbWlnaHQgd2FudCB0bworICogY2hhbmdlIHRoaXMgdG8gYWNjb3VudCBmb3IgbXVsdGlwbGUgbGV2ZWxzIChlLmcuIGFubm90YXRlZCB0YWdzCisgKiBwb2ludGluZyB0byBhbm5vdGF0ZWQgdGFncyBwb2ludGluZyB0byBhIGNvbW1pdC4pCisgKiAyLiBBcyB0aGUgcmVmcyBhcmUgY2FjaGVkIHdlIG1pZ2h0IGtub3cgd2hhdCByZWZuYW1lIHBlZWxzIHRvIHdpdGhvdXQKKyAqIHRoZSBuZWVkIHRvIHBhcnNlIHRoZSBvYmplY3QgdmlhIHBhcnNlX29iamVjdCgpLiBwZWVsX3JlZigpIG1pZ2h0IGJlIGEKKyAqIG1vcmUgZWZmaWNpZW50IGFsdGVybmF0aXZlIHRvIG9idGFpbiB0aGUgcG9pbnRlZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm1hdGNoX3BvaW50c19hdChzdHJ1Y3Qgb2lkX2FycmF5ICpwb2ludHNfYXQsCisJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJCSAgICAgICBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnRhZ2dlZF9vaWQgPSBOVUxMOworCXN0cnVjdCBvYmplY3QgKm9iajsKKworCWlmIChvaWRfYXJyYXlfbG9va3VwKHBvaW50c19hdCwgb2lkKSA+PSAwKQorCQlyZXR1cm4gb2lkOworCW9iaiA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKwlpZiAoIW9iaikKKwkJZGllKF8oIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIpLCByZWZuYW1lKTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9UQUcpCisJCXRhZ2dlZF9vaWQgPSBnZXRfdGFnZ2VkX29pZCgoc3RydWN0IHRhZyAqKW9iaik7CisJaWYgKHRhZ2dlZF9vaWQgJiYgb2lkX2FycmF5X2xvb2t1cChwb2ludHNfYXQsIHRhZ2dlZF9vaWQpID49IDApCisJCXJldHVybiB0YWdnZWRfb2lkOworCXJldHVybiBOVUxMOworfQorCisvKgorICogQWxsb2NhdGUgc3BhY2UgZm9yIGEgbmV3IHJlZl9hcnJheV9pdGVtIGFuZCBjb3B5IHRoZSBuYW1lIGFuZCBvaWQgdG8gaXQuCisgKgorICogQ2FsbGVycyBjYW4gdGhlbiBmaWxsIGluIG90aGVyIHN0cnVjdCBtZW1iZXJzIGF0IHRoZWlyIGxlaXN1cmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKm5ld19yZWZfYXJyYXlfaXRlbShjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKnJlZjsKKworCUZMRVhfQUxMT0NfU1RSKHJlZiwgcmVmbmFtZSwgcmVmbmFtZSk7CisJb2lkY3B5KCZyZWYtPm9iamVjdG5hbWUsIG9pZCk7CisKKwlyZXR1cm4gcmVmOworfQorCitzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKnJlZl9hcnJheV9wdXNoKHN0cnVjdCByZWZfYXJyYXkgKmFycmF5LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCByZWZfYXJyYXlfaXRlbSAqcmVmID0gbmV3X3JlZl9hcnJheV9pdGVtKHJlZm5hbWUsIG9pZCk7CisKKwlBTExPQ19HUk9XKGFycmF5LT5pdGVtcywgYXJyYXktPm5yICsgMSwgYXJyYXktPmFsbG9jKTsKKwlhcnJheS0+aXRlbXNbYXJyYXktPm5yKytdID0gcmVmOworCisJcmV0dXJuIHJlZjsKK30KKworc3RhdGljIGludCByZWZfa2luZF9mcm9tX3JlZm5hbWUoY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCXN0YXRpYyBzdHJ1Y3QgeworCQljb25zdCBjaGFyICpwcmVmaXg7CisJCXVuc2lnbmVkIGludCBraW5kOworCX0gcmVmX2tpbmRbXSA9IHsKKwkJeyAicmVmcy9oZWFkcy8iICwgRklMVEVSX1JFRlNfQlJBTkNIRVMgfSwKKwkJeyAicmVmcy9yZW1vdGVzLyIgLCBGSUxURVJfUkVGU19SRU1PVEVTIH0sCisJCXsgInJlZnMvdGFncy8iLCBGSUxURVJfUkVGU19UQUdTfQorCX07CisKKwlpZiAoIXN0cmNtcChyZWZuYW1lLCAiSEVBRCIpKQorCQlyZXR1cm4gRklMVEVSX1JFRlNfREVUQUNIRURfSEVBRDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZl9raW5kKTsgaSsrKSB7CisJCWlmIChzdGFydHNfd2l0aChyZWZuYW1lLCByZWZfa2luZFtpXS5wcmVmaXgpKQorCQkJcmV0dXJuIHJlZl9raW5kW2ldLmtpbmQ7CisJfQorCisJcmV0dXJuIEZJTFRFUl9SRUZTX09USEVSUzsKK30KKworc3RhdGljIGludCBmaWx0ZXJfcmVmX2tpbmQoc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciwgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlpZiAoZmlsdGVyLT5raW5kID09IEZJTFRFUl9SRUZTX0JSQU5DSEVTIHx8CisJICAgIGZpbHRlci0+a2luZCA9PSBGSUxURVJfUkVGU19SRU1PVEVTIHx8CisJICAgIGZpbHRlci0+a2luZCA9PSBGSUxURVJfUkVGU19UQUdTKQorCQlyZXR1cm4gZmlsdGVyLT5raW5kOworCXJldHVybiByZWZfa2luZF9mcm9tX3JlZm5hbWUocmVmbmFtZSk7Cit9CisKK3N0cnVjdCByZWZfZmlsdGVyX2NiZGF0YSB7CisJc3RydWN0IHJlZl9hcnJheSAqYXJyYXk7CisJc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlcjsKKwlzdHJ1Y3QgY29udGFpbnNfY2FjaGUgY29udGFpbnNfY2FjaGU7CisJc3RydWN0IGNvbnRhaW5zX2NhY2hlIG5vX2NvbnRhaW5zX2NhY2hlOworfTsKKworLyoKKyAqIEEgY2FsbC1iYWNrIGdpdmVuIHRvIGZvcl9lYWNoX3JlZigpLiAgRmlsdGVyIHJlZnMgYW5kIGtlZXAgdGhlbSBmb3IKKyAqIGxhdGVyIG9iamVjdCBwcm9jZXNzaW5nLgorICovCitzdGF0aWMgaW50IHJlZl9maWx0ZXJfaGFuZGxlcihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCByZWZfZmlsdGVyX2NiZGF0YSAqcmVmX2NiZGF0YSA9IGNiX2RhdGE7CisJc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciA9IHJlZl9jYmRhdGEtPmZpbHRlcjsKKwlzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKnJlZjsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBOVUxMOworCXVuc2lnbmVkIGludCBraW5kOworCisJaWYgKGZsYWcgJiBSRUZfQkFEX05BTUUpIHsKKwkJd2FybmluZyhfKCJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSAlcyIpLCByZWZuYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGZsYWcgJiBSRUZfSVNCUk9LRU4pIHsKKwkJd2FybmluZyhfKCJpZ25vcmluZyBicm9rZW4gcmVmICVzIiksIHJlZm5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBPYnRhaW4gdGhlIGN1cnJlbnQgcmVmIGtpbmQgZnJvbSBmaWx0ZXJfcmVmX2tpbmQoKSBhbmQgaWdub3JlIHVud2FudGVkIHJlZnMuICovCisJa2luZCA9IGZpbHRlcl9yZWZfa2luZChmaWx0ZXIsIHJlZm5hbWUpOworCWlmICghKGtpbmQgJiBmaWx0ZXItPmtpbmQpKQorCQlyZXR1cm4gMDsKKworCWlmICghZmlsdGVyX3BhdHRlcm5fbWF0Y2goZmlsdGVyLCByZWZuYW1lKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZmlsdGVyLT5wb2ludHNfYXQubnIgJiYgIW1hdGNoX3BvaW50c19hdCgmZmlsdGVyLT5wb2ludHNfYXQsIG9pZCwgcmVmbmFtZSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBBIG1lcmdlIGZpbHRlciBpcyBhcHBsaWVkIG9uIHJlZnMgcG9pbnRpbmcgdG8gY29tbWl0cy4gSGVuY2UKKwkgKiBvYnRhaW4gdGhlIGNvbW1pdCB1c2luZyB0aGUgJ29pZCcgYXZhaWxhYmxlIGFuZCBkaXNjYXJkIGFsbAorCSAqIG5vbi1jb21taXRzIGVhcmx5LiBUaGUgYWN0dWFsIGZpbHRlcmluZyBpcyBkb25lIGxhdGVyLgorCSAqLworCWlmIChmaWx0ZXItPm1lcmdlX2NvbW1pdCB8fCBmaWx0ZXItPndpdGhfY29tbWl0IHx8IGZpbHRlci0+bm9fY29tbWl0IHx8IGZpbHRlci0+dmVyYm9zZSkgeworCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksIG9pZCwKKwkJCQkJCQkxKTsKKwkJaWYgKCFjb21taXQpCisJCQlyZXR1cm4gMDsKKwkJLyogV2UgcGVyZm9ybSB0aGUgZmlsdGVyaW5nIGZvciB0aGUgJy0tY29udGFpbnMnIG9wdGlvbi4uLiAqLworCQlpZiAoZmlsdGVyLT53aXRoX2NvbW1pdCAmJgorCQkgICAgIWNvbW1pdF9jb250YWlucyhmaWx0ZXIsIGNvbW1pdCwgZmlsdGVyLT53aXRoX2NvbW1pdCwgJnJlZl9jYmRhdGEtPmNvbnRhaW5zX2NhY2hlKSkKKwkJCXJldHVybiAwOworCQkvKiAuLi5vciBmb3IgdGhlIGAtLW5vLWNvbnRhaW5zJyBvcHRpb24gKi8KKwkJaWYgKGZpbHRlci0+bm9fY29tbWl0ICYmCisJCSAgICBjb21taXRfY29udGFpbnMoZmlsdGVyLCBjb21taXQsIGZpbHRlci0+bm9fY29tbWl0LCAmcmVmX2NiZGF0YS0+bm9fY29udGFpbnNfY2FjaGUpKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBXZSBkbyBub3Qgb3BlbiB0aGUgb2JqZWN0IHlldDsgc29ydCBtYXkgb25seSBuZWVkIHJlZm5hbWUKKwkgKiB0byBkbyBpdHMgam9iIGFuZCB0aGUgcmVzdWx0aW5nIGxpc3QgbWF5IHlldCB0byBiZSBwcnVuZWQKKwkgKiBieSBtYXhjb3VudCBsb2dpYy4KKwkgKi8KKwlyZWYgPSByZWZfYXJyYXlfcHVzaChyZWZfY2JkYXRhLT5hcnJheSwgcmVmbmFtZSwgb2lkKTsKKwlyZWYtPmNvbW1pdCA9IGNvbW1pdDsKKwlyZWYtPmZsYWcgPSBmbGFnOworCXJlZi0+a2luZCA9IGtpbmQ7CisKKwlyZXR1cm4gMDsKK30KKworLyogIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYSByZWZfYXJyYXlfaXRlbSAqLworc3RhdGljIHZvaWQgZnJlZV9hcnJheV9pdGVtKHN0cnVjdCByZWZfYXJyYXlfaXRlbSAqaXRlbSkKK3sKKwlmcmVlKChjaGFyICopaXRlbS0+c3ltcmVmKTsKKwlpZiAoaXRlbS0+dmFsdWUpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspCisJCQlmcmVlKChjaGFyICopaXRlbS0+dmFsdWVbaV0ucyk7CisJCWZyZWUoaXRlbS0+dmFsdWUpOworCX0KKwlmcmVlKGl0ZW0pOworfQorCisvKiBGcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGZvciByZWZfYXJyYXkgKi8KK3ZvaWQgcmVmX2FycmF5X2NsZWFyKHN0cnVjdCByZWZfYXJyYXkgKmFycmF5KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFycmF5LT5ucjsgaSsrKQorCQlmcmVlX2FycmF5X2l0ZW0oYXJyYXktPml0ZW1zW2ldKTsKKwlGUkVFX0FORF9OVUxMKGFycmF5LT5pdGVtcyk7CisJYXJyYXktPm5yID0gYXJyYXktPmFsbG9jID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspCisJCWZyZWUoKGNoYXIgKil1c2VkX2F0b21baV0ubmFtZSk7CisJRlJFRV9BTkRfTlVMTCh1c2VkX2F0b20pOworCXVzZWRfYXRvbV9jbnQgPSAwOworCisJaWYgKHJlZl90b193b3JrdHJlZV9tYXAud29ya3RyZWVzKSB7CisJCWhhc2htYXBfZnJlZV9lbnRyaWVzKCYocmVmX3RvX3dvcmt0cmVlX21hcC5tYXApLAorCQkJCQlzdHJ1Y3QgcmVmX3RvX3dvcmt0cmVlX2VudHJ5LCBlbnQpOworCQlmcmVlX3dvcmt0cmVlcyhyZWZfdG9fd29ya3RyZWVfbWFwLndvcmt0cmVlcyk7CisJCXJlZl90b193b3JrdHJlZV9tYXAud29ya3RyZWVzID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRvX21lcmdlX2ZpbHRlcihzdHJ1Y3QgcmVmX2ZpbHRlcl9jYmRhdGEgKnJlZl9jYmRhdGEpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJaW50IGksIG9sZF9ucjsKKwlzdHJ1Y3QgcmVmX2ZpbHRlciAqZmlsdGVyID0gcmVmX2NiZGF0YS0+ZmlsdGVyOworCXN0cnVjdCByZWZfYXJyYXkgKmFycmF5ID0gcmVmX2NiZGF0YS0+YXJyYXk7CisJc3RydWN0IGNvbW1pdCAqKnRvX2NsZWFyID0geGNhbGxvYyhzaXplb2Yoc3RydWN0IGNvbW1pdCAqKSwgYXJyYXktPm5yKTsKKworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXZzLCBOVUxMKTsKKworCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKml0ZW0gPSBhcnJheS0+aXRlbXNbaV07CisJCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2cywgJml0ZW0tPmNvbW1pdC0+b2JqZWN0LCBpdGVtLT5yZWZuYW1lKTsKKwkJdG9fY2xlYXJbaV0gPSBpdGVtLT5jb21taXQ7CisJfQorCisJZmlsdGVyLT5tZXJnZV9jb21taXQtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2cywgJmZpbHRlci0+bWVyZ2VfY29tbWl0LT5vYmplY3QsICIiKTsKKworCXJldnMubGltaXRlZCA9IDE7CisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKworCW9sZF9uciA9IGFycmF5LT5ucjsKKwlhcnJheS0+bnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG9sZF9ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfYXJyYXlfaXRlbSAqaXRlbSA9IGFycmF5LT5pdGVtc1tpXTsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gaXRlbS0+Y29tbWl0OworCisJCWludCBpc19tZXJnZWQgPSAhIShjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpOworCisJCWlmIChpc19tZXJnZWQgPT0gKGZpbHRlci0+bWVyZ2UgPT0gUkVGX0ZJTFRFUl9NRVJHRURfSU5DTFVERSkpCisJCQlhcnJheS0+aXRlbXNbYXJyYXktPm5yKytdID0gYXJyYXktPml0ZW1zW2ldOworCQllbHNlCisJCQlmcmVlX2FycmF5X2l0ZW0oaXRlbSk7CisJfQorCisJY2xlYXJfY29tbWl0X21hcmtzX21hbnkob2xkX25yLCB0b19jbGVhciwgQUxMX1JFVl9GTEFHUyk7CisJY2xlYXJfY29tbWl0X21hcmtzKGZpbHRlci0+bWVyZ2VfY29tbWl0LCBBTExfUkVWX0ZMQUdTKTsKKwlmcmVlKHRvX2NsZWFyKTsKK30KKworLyoKKyAqIEFQSSBmb3IgZmlsdGVyaW5nIGEgc2V0IG9mIHJlZnMuIEJhc2VkIG9uIHRoZSB0eXBlIG9mIHJlZnMgdGhlIHVzZXIKKyAqIGhhcyByZXF1ZXN0ZWQsIHdlIGl0ZXJhdGUgdGhyb3VnaCB0aG9zZSByZWZzIGFuZCBhcHBseSBmaWx0ZXJzCisgKiBhcyBwZXIgdGhlIGdpdmVuIHJlZl9maWx0ZXIgc3RydWN0dXJlIGFuZCBmaW5hbGx5IHN0b3JlIHRoZQorICogZmlsdGVyZWQgcmVmcyBpbiB0aGUgcmVmX2FycmF5IHN0cnVjdHVyZS4KKyAqLworaW50IGZpbHRlcl9yZWZzKHN0cnVjdCByZWZfYXJyYXkgKmFycmF5LCBzdHJ1Y3QgcmVmX2ZpbHRlciAqZmlsdGVyLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgcmVmX2ZpbHRlcl9jYmRhdGEgcmVmX2NiZGF0YTsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgYnJva2VuID0gMDsKKworCXJlZl9jYmRhdGEuYXJyYXkgPSBhcnJheTsKKwlyZWZfY2JkYXRhLmZpbHRlciA9IGZpbHRlcjsKKworCWlmICh0eXBlICYgRklMVEVSX1JFRlNfSU5DTFVERV9CUk9LRU4pCisJCWJyb2tlbiA9IDE7CisJZmlsdGVyLT5raW5kID0gdHlwZSAmIEZJTFRFUl9SRUZTX0tJTkRfTUFTSzsKKworCWluaXRfY29udGFpbnNfY2FjaGUoJnJlZl9jYmRhdGEuY29udGFpbnNfY2FjaGUpOworCWluaXRfY29udGFpbnNfY2FjaGUoJnJlZl9jYmRhdGEubm9fY29udGFpbnNfY2FjaGUpOworCisJLyogIFNpbXBsZSBwZXItcmVmIGZpbHRlcmluZyAqLworCWlmICghZmlsdGVyLT5raW5kKQorCQlkaWUoImZpbHRlcl9yZWZzOiBpbnZhbGlkIHR5cGUiKTsKKwllbHNlIHsKKwkJLyoKKwkJICogRm9yIGNvbW1vbiBjYXNlcyB3aGVyZSB3ZSBuZWVkIG9ubHkgYnJhbmNoZXMgb3IgcmVtb3RlcyBvciB0YWdzLAorCQkgKiB3ZSBvbmx5IGl0ZXJhdGUgdGhyb3VnaCB0aG9zZSByZWZzLiBJZiBhIG1peCBvZiByZWZzIGlzIG5lZWRlZCwKKwkJICogd2UgaXRlcmF0ZSBvdmVyIGFsbCByZWZzIGFuZCBmaWx0ZXIgb3V0IHJlcXVpcmVkIHJlZnMgd2l0aCB0aGUgaGVscAorCQkgKiBvZiBmaWx0ZXJfcmVmX2tpbmQoKS4KKwkJICovCisJCWlmIChmaWx0ZXItPmtpbmQgPT0gRklMVEVSX1JFRlNfQlJBTkNIRVMpCisJCQlyZXQgPSBmb3JfZWFjaF9mdWxscmVmX2luKCJyZWZzL2hlYWRzLyIsIHJlZl9maWx0ZXJfaGFuZGxlciwgJnJlZl9jYmRhdGEsIGJyb2tlbik7CisJCWVsc2UgaWYgKGZpbHRlci0+a2luZCA9PSBGSUxURVJfUkVGU19SRU1PVEVTKQorCQkJcmV0ID0gZm9yX2VhY2hfZnVsbHJlZl9pbigicmVmcy9yZW1vdGVzLyIsIHJlZl9maWx0ZXJfaGFuZGxlciwgJnJlZl9jYmRhdGEsIGJyb2tlbik7CisJCWVsc2UgaWYgKGZpbHRlci0+a2luZCA9PSBGSUxURVJfUkVGU19UQUdTKQorCQkJcmV0ID0gZm9yX2VhY2hfZnVsbHJlZl9pbigicmVmcy90YWdzLyIsIHJlZl9maWx0ZXJfaGFuZGxlciwgJnJlZl9jYmRhdGEsIGJyb2tlbik7CisJCWVsc2UgaWYgKGZpbHRlci0+a2luZCAmIEZJTFRFUl9SRUZTX0FMTCkKKwkJCXJldCA9IGZvcl9lYWNoX2Z1bGxyZWZfaW5fcGF0dGVybihmaWx0ZXIsIHJlZl9maWx0ZXJfaGFuZGxlciwgJnJlZl9jYmRhdGEsIGJyb2tlbik7CisJCWlmICghcmV0ICYmIChmaWx0ZXItPmtpbmQgJiBGSUxURVJfUkVGU19ERVRBQ0hFRF9IRUFEKSkKKwkJCWhlYWRfcmVmKHJlZl9maWx0ZXJfaGFuZGxlciwgJnJlZl9jYmRhdGEpOworCX0KKworCWNsZWFyX2NvbnRhaW5zX2NhY2hlKCZyZWZfY2JkYXRhLmNvbnRhaW5zX2NhY2hlKTsKKwljbGVhcl9jb250YWluc19jYWNoZSgmcmVmX2NiZGF0YS5ub19jb250YWluc19jYWNoZSk7CisKKwkvKiAgRmlsdGVycyB0aGF0IG5lZWQgcmV2aXNpb24gd2Fsa2luZyAqLworCWlmIChmaWx0ZXItPm1lcmdlX2NvbW1pdCkKKwkJZG9fbWVyZ2VfZmlsdGVyKCZyZWZfY2JkYXRhKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY21wX3JlZl9zb3J0aW5nKHN0cnVjdCByZWZfc29ydGluZyAqcywgc3RydWN0IHJlZl9hcnJheV9pdGVtICphLCBzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKmIpCit7CisJc3RydWN0IGF0b21fdmFsdWUgKnZhLCAqdmI7CisJaW50IGNtcDsKKwljbXBfdHlwZSBjbXBfdHlwZSA9IHVzZWRfYXRvbVtzLT5hdG9tXS50eXBlOworCWludCAoKmNtcF9mbikoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoZ2V0X3JlZl9hdG9tX3ZhbHVlKGEsIHMtPmF0b20sICZ2YSwgJmVycikpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKwlpZiAoZ2V0X3JlZl9hdG9tX3ZhbHVlKGIsIHMtPmF0b20sICZ2YiwgJmVycikpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwljbXBfZm4gPSBzLT5pZ25vcmVfY2FzZSA/IHN0cmNhc2VjbXAgOiBzdHJjbXA7CisJaWYgKHMtPnZlcnNpb24pCisJCWNtcCA9IHZlcnNpb25jbXAodmEtPnMsIHZiLT5zKTsKKwllbHNlIGlmIChjbXBfdHlwZSA9PSBGSUVMRF9TVFIpCisJCWNtcCA9IGNtcF9mbih2YS0+cywgdmItPnMpOworCWVsc2UgeworCQlpZiAodmEtPnZhbHVlIDwgdmItPnZhbHVlKQorCQkJY21wID0gLTE7CisJCWVsc2UgaWYgKHZhLT52YWx1ZSA9PSB2Yi0+dmFsdWUpCisJCQljbXAgPSAwOworCQllbHNlCisJCQljbXAgPSAxOworCX0KKworCXJldHVybiAocy0+cmV2ZXJzZSkgPyAtY21wIDogY21wOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfcmVmcyhjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8sIHZvaWQgKnJlZl9zb3J0aW5nKQoreworCXN0cnVjdCByZWZfYXJyYXlfaXRlbSAqYSA9ICooKHN0cnVjdCByZWZfYXJyYXlfaXRlbSAqKilhXyk7CisJc3RydWN0IHJlZl9hcnJheV9pdGVtICpiID0gKigoc3RydWN0IHJlZl9hcnJheV9pdGVtICoqKWJfKTsKKwlzdHJ1Y3QgcmVmX3NvcnRpbmcgKnM7CisKKwlmb3IgKHMgPSByZWZfc29ydGluZzsgczsgcyA9IHMtPm5leHQpIHsKKwkJaW50IGNtcCA9IGNtcF9yZWZfc29ydGluZyhzLCBhLCBiKTsKKwkJaWYgKGNtcCkKKwkJCXJldHVybiBjbXA7CisJfQorCXMgPSByZWZfc29ydGluZzsKKwlyZXR1cm4gcyAmJiBzLT5pZ25vcmVfY2FzZSA/CisJCXN0cmNhc2VjbXAoYS0+cmVmbmFtZSwgYi0+cmVmbmFtZSkgOgorCQlzdHJjbXAoYS0+cmVmbmFtZSwgYi0+cmVmbmFtZSk7Cit9CisKK3ZvaWQgcmVmX3NvcnRpbmdfaWNhc2VfYWxsKHN0cnVjdCByZWZfc29ydGluZyAqc29ydGluZywgaW50IGZsYWcpCit7CisJZm9yICg7IHNvcnRpbmc7IHNvcnRpbmcgPSBzb3J0aW5nLT5uZXh0KQorCQlzb3J0aW5nLT5pZ25vcmVfY2FzZSA9ICEhZmxhZzsKK30KKwordm9pZCByZWZfYXJyYXlfc29ydChzdHJ1Y3QgcmVmX3NvcnRpbmcgKnNvcnRpbmcsIHN0cnVjdCByZWZfYXJyYXkgKmFycmF5KQoreworCVFTT1JUX1MoYXJyYXktPml0ZW1zLCBhcnJheS0+bnIsIGNvbXBhcmVfcmVmcywgc29ydGluZyk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9saXRlcmFsKGNvbnN0IGNoYXIgKmNwLCBjb25zdCBjaGFyICplcCwgc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpzID0gJnN0YXRlLT5zdGFjay0+b3V0cHV0OworCisJd2hpbGUgKCpjcCAmJiAoIWVwIHx8IGNwIDwgZXApKSB7CisJCWlmICgqY3AgPT0gJyUnKSB7CisJCQlpZiAoY3BbMV0gPT0gJyUnKQorCQkJCWNwKys7CisJCQllbHNlIHsKKwkJCQlpbnQgY2ggPSBoZXgyY2hyKGNwICsgMSk7CisJCQkJaWYgKDAgPD0gY2gpIHsKKwkJCQkJc3RyYnVmX2FkZGNoKHMsIGNoKTsKKwkJCQkJY3AgKz0gMzsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQl9CisJCXN0cmJ1Zl9hZGRjaChzLCAqY3ApOworCQljcCsrOworCX0KK30KKworaW50IGZvcm1hdF9yZWZfYXJyYXlfaXRlbShzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKmluZm8sCisJCQkgICBjb25zdCBzdHJ1Y3QgcmVmX2Zvcm1hdCAqZm9ybWF0LAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZmluYWxfYnVmLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyb3JfYnVmKQoreworCWNvbnN0IGNoYXIgKmNwLCAqc3AsICplcDsKKwlzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhdGUgc3RhdGUgPSBSRUZfRk9STUFUVElOR19TVEFURV9JTklUOworCisJc3RhdGUucXVvdGVfc3R5bGUgPSBmb3JtYXQtPnF1b3RlX3N0eWxlOworCXB1c2hfc3RhY2tfZWxlbWVudCgmc3RhdGUuc3RhY2spOworCisJZm9yIChjcCA9IGZvcm1hdC0+Zm9ybWF0OyAqY3AgJiYgKHNwID0gZmluZF9uZXh0KGNwKSk7IGNwID0gZXAgKyAxKSB7CisJCXN0cnVjdCBhdG9tX3ZhbHVlICphdG9tdjsKKwkJaW50IHBvczsKKworCQllcCA9IHN0cmNocihzcCwgJyknKTsKKwkJaWYgKGNwIDwgc3ApCisJCQlhcHBlbmRfbGl0ZXJhbChjcCwgc3AsICZzdGF0ZSk7CisJCXBvcyA9IHBhcnNlX3JlZl9maWx0ZXJfYXRvbShmb3JtYXQsIHNwICsgMiwgZXAsIGVycm9yX2J1Zik7CisJCWlmIChwb3MgPCAwIHx8IGdldF9yZWZfYXRvbV92YWx1ZShpbmZvLCBwb3MsICZhdG9tdiwgZXJyb3JfYnVmKSB8fAorCQkgICAgYXRvbXYtPmhhbmRsZXIoYXRvbXYsICZzdGF0ZSwgZXJyb3JfYnVmKSkgeworCQkJcG9wX3N0YWNrX2VsZW1lbnQoJnN0YXRlLnN0YWNrKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlpZiAoKmNwKSB7CisJCXNwID0gY3AgKyBzdHJsZW4oY3ApOworCQlhcHBlbmRfbGl0ZXJhbChjcCwgc3AsICZzdGF0ZSk7CisJfQorCWlmIChmb3JtYXQtPm5lZWRfY29sb3JfcmVzZXRfYXRfZW9sKSB7CisJCXN0cnVjdCBhdG9tX3ZhbHVlIHJlc2V0djsKKwkJcmVzZXR2LnMgPSBHSVRfQ09MT1JfUkVTRVQ7CisJCWlmIChhcHBlbmRfYXRvbSgmcmVzZXR2LCAmc3RhdGUsIGVycm9yX2J1ZikpIHsKKwkJCXBvcF9zdGFja19lbGVtZW50KCZzdGF0ZS5zdGFjayk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJaWYgKHN0YXRlLnN0YWNrLT5wcmV2KSB7CisJCXBvcF9zdGFja19lbGVtZW50KCZzdGF0ZS5zdGFjayk7CisJCXJldHVybiBzdHJidWZfYWRkZl9yZXQoZXJyb3JfYnVmLCAtMSwgXygiZm9ybWF0OiAlJShlbmQpIGF0b20gbWlzc2luZyIpKTsKKwl9CisJc3RyYnVmX2FkZGJ1ZihmaW5hbF9idWYsICZzdGF0ZS5zdGFjay0+b3V0cHV0KTsKKwlwb3Bfc3RhY2tfZWxlbWVudCgmc3RhdGUuc3RhY2spOworCXJldHVybiAwOworfQorCit2b2lkIHNob3dfcmVmX2FycmF5X2l0ZW0oc3RydWN0IHJlZl9hcnJheV9pdGVtICppbmZvLAorCQkJIGNvbnN0IHN0cnVjdCByZWZfZm9ybWF0ICpmb3JtYXQpCit7CisJc3RydWN0IHN0cmJ1ZiBmaW5hbF9idWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGVycm9yX2J1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKGZvcm1hdF9yZWZfYXJyYXlfaXRlbShpbmZvLCBmb3JtYXQsICZmaW5hbF9idWYsICZlcnJvcl9idWYpKQorCQlkaWUoIiVzIiwgZXJyb3JfYnVmLmJ1Zik7CisJZndyaXRlKGZpbmFsX2J1Zi5idWYsIDEsIGZpbmFsX2J1Zi5sZW4sIHN0ZG91dCk7CisJc3RyYnVmX3JlbGVhc2UoJmVycm9yX2J1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmZpbmFsX2J1Zik7CisJcHV0Y2hhcignXG4nKTsKK30KKwordm9pZCBwcmV0dHlfcHJpbnRfcmVmKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgY29uc3Qgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCkKK3sKKwlzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKnJlZl9pdGVtOworCXJlZl9pdGVtID0gbmV3X3JlZl9hcnJheV9pdGVtKG5hbWUsIG9pZCk7CisJcmVmX2l0ZW0tPmtpbmQgPSByZWZfa2luZF9mcm9tX3JlZm5hbWUobmFtZSk7CisJc2hvd19yZWZfYXJyYXlfaXRlbShyZWZfaXRlbSwgZm9ybWF0KTsKKwlmcmVlX2FycmF5X2l0ZW0ocmVmX2l0ZW0pOworfQorCitzdGF0aWMgaW50IHBhcnNlX3NvcnRpbmdfYXRvbShjb25zdCBjaGFyICphdG9tKQoreworCS8qCisJICogVGhpcyBwYXJzZXMgYW4gYXRvbSB1c2luZyBhIGR1bW15IHJlZl9mb3JtYXQsIHNpbmNlIHdlIGRvbid0CisJICogYWN0dWFsbHkgY2FyZSBhYm91dCB0aGUgZm9ybWF0dGluZyBkZXRhaWxzLgorCSAqLworCXN0cnVjdCByZWZfZm9ybWF0IGR1bW15ID0gUkVGX0ZPUk1BVF9JTklUOworCWNvbnN0IGNoYXIgKmVuZCA9IGF0b20gKyBzdHJsZW4oYXRvbSk7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmVzID0gcGFyc2VfcmVmX2ZpbHRlcl9hdG9tKCZkdW1teSwgYXRvbSwgZW5kLCAmZXJyKTsKKwlpZiAocmVzIDwgMCkKKwkJZGllKCIlcyIsIGVyci5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCXJldHVybiByZXM7Cit9CisKKy8qICBJZiBubyBzb3J0aW5nIG9wdGlvbiBpcyBnaXZlbiwgdXNlIHJlZm5hbWUgdG8gc29ydCBhcyBkZWZhdWx0ICovCitzdHJ1Y3QgcmVmX3NvcnRpbmcgKnJlZl9kZWZhdWx0X3NvcnRpbmcodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBjc3RyX25hbWVbXSA9ICJyZWZuYW1lIjsKKworCXN0cnVjdCByZWZfc29ydGluZyAqc29ydGluZyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpzb3J0aW5nKSk7CisKKwlzb3J0aW5nLT5uZXh0ID0gTlVMTDsKKwlzb3J0aW5nLT5hdG9tID0gcGFyc2Vfc29ydGluZ19hdG9tKGNzdHJfbmFtZSk7CisJcmV0dXJuIHNvcnRpbmc7Cit9CisKK3ZvaWQgcGFyc2VfcmVmX3NvcnRpbmcoc3RydWN0IHJlZl9zb3J0aW5nICoqc29ydGluZ190YWlsLCBjb25zdCBjaGFyICphcmcpCit7CisJc3RydWN0IHJlZl9zb3J0aW5nICpzOworCisJcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpzKSk7CisJcy0+bmV4dCA9ICpzb3J0aW5nX3RhaWw7CisJKnNvcnRpbmdfdGFpbCA9IHM7CisKKwlpZiAoKmFyZyA9PSAnLScpIHsKKwkJcy0+cmV2ZXJzZSA9IDE7CisJCWFyZysrOworCX0KKwlpZiAoc2tpcF9wcmVmaXgoYXJnLCAidmVyc2lvbjoiLCAmYXJnKSB8fAorCSAgICBza2lwX3ByZWZpeChhcmcsICJ2OiIsICZhcmcpKQorCQlzLT52ZXJzaW9uID0gMTsKKwlzLT5hdG9tID0gcGFyc2Vfc29ydGluZ19hdG9tKGFyZyk7Cit9CisKK2ludCBwYXJzZV9vcHRfcmVmX3NvcnRpbmcoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwkvKgorCSAqIE5FRURTV09SSzogV2Ugc2hvdWxkIHByb2JhYmx5IGNsZWFyIHRoZSBsaXN0IGluIHRoaXMgY2FzZSwgYnV0IHdlJ3ZlCisJICogYWxyZWFkeSBtdW5nZWQgdGhlIGdsb2JhbCB1c2VkX2F0b21zIGxpc3QsIHdoaWNoIHdvdWxkIG5lZWQgdG8gYmUKKwkgKiB1bmRvbmUuCisJICovCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJcGFyc2VfcmVmX3NvcnRpbmcob3B0LT52YWx1ZSwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX29wdF9tZXJnZV9maWx0ZXIoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgcmVmX2ZpbHRlciAqcmYgPSBvcHQtPnZhbHVlOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBub19tZXJnZWQgPSBzdGFydHNfd2l0aChvcHQtPmxvbmdfbmFtZSwgIm5vIik7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlpZiAocmYtPm1lcmdlKSB7CisJCWlmIChub19tZXJnZWQpIHsKKwkJCXJldHVybiBlcnJvcihfKCJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW1lcmdlZCIpLAorCQkJCSAgICAgb3B0LT5sb25nX25hbWUpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIGVycm9yKF8oIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8tbWVyZ2VkIiksCisJCQkJICAgICBvcHQtPmxvbmdfbmFtZSk7CisJCX0KKwl9CisKKwlyZi0+bWVyZ2UgPSBub19tZXJnZWQKKwkJPyBSRUZfRklMVEVSX01FUkdFRF9PTUlUCisJCTogUkVGX0ZJTFRFUl9NRVJHRURfSU5DTFVERTsKKworCWlmIChnZXRfb2lkKGFyZywgJm9pZCkpCisJCWRpZShfKCJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiKSwgYXJnKTsKKworCXJmLT5tZXJnZV9jb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJICAmb2lkLCAwKTsKKwlpZiAoIXJmLT5tZXJnZV9jb21taXQpCisJCXJldHVybiBlcnJvcihfKCJvcHRpb24gYCVzJyBtdXN0IHBvaW50IHRvIGEgY29tbWl0IiksIG9wdC0+bG9uZ19uYW1lKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvcmVmLWZpbHRlci5oIGIvcmVmLWZpbHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlY2MzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9yZWYtZmlsdGVyLmgKQEAgLTAsMCArMSwxNTQgQEAKKyNpZm5kZWYgUkVGX0ZJTFRFUl9ICisjZGVmaW5lIFJFRl9GSUxURVJfSAorCisjaW5jbHVkZSAib2lkLWFycmF5LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworLyogUXVvdGluZyBzdHlsZXMgKi8KKyNkZWZpbmUgUVVPVEVfTk9ORSAwCisjZGVmaW5lIFFVT1RFX1NIRUxMIDEKKyNkZWZpbmUgUVVPVEVfUEVSTCAyCisjZGVmaW5lIFFVT1RFX1BZVEhPTiA0CisjZGVmaW5lIFFVT1RFX1RDTCA4CisKKyNkZWZpbmUgRklMVEVSX1JFRlNfSU5DTFVERV9CUk9LRU4gMHgwMDAxCisjZGVmaW5lIEZJTFRFUl9SRUZTX1RBR1MgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBGSUxURVJfUkVGU19CUkFOQ0hFUyAgICAgICAweDAwMDQKKyNkZWZpbmUgRklMVEVSX1JFRlNfUkVNT1RFUyAgICAgICAgMHgwMDA4CisjZGVmaW5lIEZJTFRFUl9SRUZTX09USEVSUyAgICAgICAgIDB4MDAxMAorI2RlZmluZSBGSUxURVJfUkVGU19BTEwgICAgICAgICAgICAoRklMVEVSX1JFRlNfVEFHUyB8IEZJTFRFUl9SRUZTX0JSQU5DSEVTIHwgXAorCQkJCSAgICBGSUxURVJfUkVGU19SRU1PVEVTIHwgRklMVEVSX1JFRlNfT1RIRVJTKQorI2RlZmluZSBGSUxURVJfUkVGU19ERVRBQ0hFRF9IRUFEICAweDAwMjAKKyNkZWZpbmUgRklMVEVSX1JFRlNfS0lORF9NQVNLICAgICAgKEZJTFRFUl9SRUZTX0FMTCB8IEZJTFRFUl9SRUZTX0RFVEFDSEVEX0hFQUQpCisKK3N0cnVjdCBhdG9tX3ZhbHVlOworCitzdHJ1Y3QgcmVmX3NvcnRpbmcgeworCXN0cnVjdCByZWZfc29ydGluZyAqbmV4dDsKKwlpbnQgYXRvbTsgLyogaW5kZXggaW50byB1c2VkX2F0b20gYXJyYXkgKGludGVybmFsKSAqLworCXVuc2lnbmVkIHJldmVyc2UgOiAxLAorCQlpZ25vcmVfY2FzZSA6IDEsCisJCXZlcnNpb24gOiAxOworfTsKKworc3RydWN0IHJlZl9hcnJheV9pdGVtIHsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9iamVjdG5hbWU7CisJaW50IGZsYWc7CisJdW5zaWduZWQgaW50IGtpbmQ7CisJY29uc3QgY2hhciAqc3ltcmVmOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgYXRvbV92YWx1ZSAqdmFsdWU7CisJY2hhciByZWZuYW1lW0ZMRVhfQVJSQVldOworfTsKKworc3RydWN0IHJlZl9hcnJheSB7CisJaW50IG5yLCBhbGxvYzsKKwlzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKippdGVtczsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7Cit9OworCitzdHJ1Y3QgcmVmX2ZpbHRlciB7CisJY29uc3QgY2hhciAqKm5hbWVfcGF0dGVybnM7CisJc3RydWN0IG9pZF9hcnJheSBwb2ludHNfYXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICp3aXRoX2NvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm5vX2NvbW1pdDsKKworCWVudW0geworCQlSRUZfRklMVEVSX01FUkdFRF9OT05FID0gMCwKKwkJUkVGX0ZJTFRFUl9NRVJHRURfSU5DTFVERSwKKwkJUkVGX0ZJTFRFUl9NRVJHRURfT01JVAorCX0gbWVyZ2U7CisJc3RydWN0IGNvbW1pdCAqbWVyZ2VfY29tbWl0OworCisJdW5zaWduZWQgaW50IHdpdGhfY29tbWl0X3RhZ19hbGdvIDogMSwKKwkJbWF0Y2hfYXNfcGF0aCA6IDEsCisJCWlnbm9yZV9jYXNlIDogMSwKKwkJZGV0YWNoZWQgOiAxOworCXVuc2lnbmVkIGludCBraW5kLAorCQlsaW5lczsKKwlpbnQgYWJicmV2LAorCQl2ZXJib3NlOworfTsKKworc3RydWN0IHJlZl9mb3JtYXQgeworCS8qCisJICogU2V0IHRoZXNlIHRvIGRlZmluZSB0aGUgZm9ybWF0OyBtYWtlIHN1cmUgeW91IGNhbGwKKwkgKiB2ZXJpZnlfcmVmX2Zvcm1hdCgpIGFmdGVyd2FyZHMgdG8gZmluYWxpemUuCisJICovCisJY29uc3QgY2hhciAqZm9ybWF0OworCWludCBxdW90ZV9zdHlsZTsKKwlpbnQgdXNlX2NvbG9yOworCisJLyogSW50ZXJuYWwgc3RhdGUgdG8gcmVmLWZpbHRlciAqLworCWludCBuZWVkX2NvbG9yX3Jlc2V0X2F0X2VvbDsKK307CisKKyNkZWZpbmUgUkVGX0ZPUk1BVF9JTklUIHsgTlVMTCwgMCwgLTEgfQorCisvKiAgTWFjcm9zIGZvciBjaGVja2luZyAtLW1lcmdlZCBhbmQgLS1uby1tZXJnZWQgb3B0aW9ucyAqLworI2RlZmluZSBfT1BUX01FUkdFRF9OT19NRVJHRUQob3B0aW9uLCBmaWx0ZXIsIGgpIFwKKwl7IE9QVElPTl9DQUxMQkFDSywgMCwgb3B0aW9uLCAoZmlsdGVyKSwgTl8oImNvbW1pdCIpLCAoaCksIFwKKwkgIFBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQgfCBQQVJTRV9PUFRfTk9ORUcsIFwKKwkgIHBhcnNlX29wdF9tZXJnZV9maWx0ZXIsIChpbnRwdHJfdCkgIkhFQUQiIFwKKwl9CisjZGVmaW5lIE9QVF9NRVJHRUQoZiwgaCkgX09QVF9NRVJHRURfTk9fTUVSR0VEKCJtZXJnZWQiLCBmLCBoKQorI2RlZmluZSBPUFRfTk9fTUVSR0VEKGYsIGgpIF9PUFRfTUVSR0VEX05PX01FUkdFRCgibm8tbWVyZ2VkIiwgZiwgaCkKKworI2RlZmluZSBPUFRfUkVGX1NPUlQodmFyKSBcCisJT1BUX0NBTExCQUNLX0YoMCwgInNvcnQiLCAodmFyKSwgXAorCQkgICAgICAgTl8oImtleSIpLCBOXygiZmllbGQgbmFtZSB0byBzb3J0IG9uIiksIFwKKwkJICAgICAgIFBBUlNFX09QVF9OT05FRywgcGFyc2Vfb3B0X3JlZl9zb3J0aW5nKQorCisvKgorICogQVBJIGZvciBmaWx0ZXJpbmcgYSBzZXQgb2YgcmVmcy4gQmFzZWQgb24gdGhlIHR5cGUgb2YgcmVmcyB0aGUgdXNlcgorICogaGFzIHJlcXVlc3RlZCwgd2UgaXRlcmF0ZSB0aHJvdWdoIHRob3NlIHJlZnMgYW5kIGFwcGx5IGZpbHRlcnMKKyAqIGFzIHBlciB0aGUgZ2l2ZW4gcmVmX2ZpbHRlciBzdHJ1Y3R1cmUgYW5kIGZpbmFsbHkgc3RvcmUgdGhlCisgKiBmaWx0ZXJlZCByZWZzIGluIHRoZSByZWZfYXJyYXkgc3RydWN0dXJlLgorICovCitpbnQgZmlsdGVyX3JlZnMoc3RydWN0IHJlZl9hcnJheSAqYXJyYXksIHN0cnVjdCByZWZfZmlsdGVyICpmaWx0ZXIsIHVuc2lnbmVkIGludCB0eXBlKTsKKy8qICBDbGVhciBhbGwgbWVtb3J5IGFsbG9jYXRlZCB0byByZWZfYXJyYXkgKi8KK3ZvaWQgcmVmX2FycmF5X2NsZWFyKHN0cnVjdCByZWZfYXJyYXkgKmFycmF5KTsKKy8qICBVc2VkIHRvIHZlcmlmeSBpZiB0aGUgZ2l2ZW4gZm9ybWF0IGlzIGNvcnJlY3QgYW5kIHRvIHBhcnNlIG91dCB0aGUgdXNlZCBhdG9tcyAqLworaW50IHZlcmlmeV9yZWZfZm9ybWF0KHN0cnVjdCByZWZfZm9ybWF0ICpmb3JtYXQpOworLyogIFNvcnQgdGhlIGdpdmVuIHJlZl9hcnJheSBhcyBwZXIgdGhlIHJlZl9zb3J0aW5nIHByb3ZpZGVkICovCit2b2lkIHJlZl9hcnJheV9zb3J0KHN0cnVjdCByZWZfc29ydGluZyAqc29ydCwgc3RydWN0IHJlZl9hcnJheSAqYXJyYXkpOworLyogIFNldCB0aGUgaWdub3JlX2Nhc2UgZmxhZyBmb3IgYWxsIGVsZW1lbnRzIG9mIGEgc29ydGluZyBsaXN0ICovCit2b2lkIHJlZl9zb3J0aW5nX2ljYXNlX2FsbChzdHJ1Y3QgcmVmX3NvcnRpbmcgKnNvcnRpbmcsIGludCBmbGFnKTsKKy8qICBCYXNlZCBvbiB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCBxdW90ZV9zdHlsZSwgZmlsbCB0aGUgc3RyYnVmICovCitpbnQgZm9ybWF0X3JlZl9hcnJheV9pdGVtKHN0cnVjdCByZWZfYXJyYXlfaXRlbSAqaW5mbywKKwkJCSAgY29uc3Qgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCwKKwkJCSAgc3RydWN0IHN0cmJ1ZiAqZmluYWxfYnVmLAorCQkJICBzdHJ1Y3Qgc3RyYnVmICplcnJvcl9idWYpOworLyogIFByaW50IHRoZSByZWYgdXNpbmcgdGhlIGdpdmVuIGZvcm1hdCBhbmQgcXVvdGVfc3R5bGUgKi8KK3ZvaWQgc2hvd19yZWZfYXJyYXlfaXRlbShzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKmluZm8sIGNvbnN0IHN0cnVjdCByZWZfZm9ybWF0ICpmb3JtYXQpOworLyogIFBhcnNlIGEgc2luZ2xlIHNvcnQgc3BlY2lmaWVyIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3QgKi8KK3ZvaWQgcGFyc2VfcmVmX3NvcnRpbmcoc3RydWN0IHJlZl9zb3J0aW5nICoqc29ydGluZ190YWlsLCBjb25zdCBjaGFyICphdG9tKTsKKy8qICBDYWxsYmFjayBmdW5jdGlvbiBmb3IgcGFyc2luZyB0aGUgc29ydCBvcHRpb24gKi8KK2ludCBwYXJzZV9vcHRfcmVmX3NvcnRpbmcoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCk7CisvKiAgRGVmYXVsdCBzb3J0IG9wdGlvbiBiYXNlZCBvbiByZWZuYW1lICovCitzdHJ1Y3QgcmVmX3NvcnRpbmcgKnJlZl9kZWZhdWx0X3NvcnRpbmcodm9pZCk7CisvKiAgRnVuY3Rpb24gdG8gcGFyc2UgLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbnMgKi8KK2ludCBwYXJzZV9vcHRfbWVyZ2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpOworLyogIEdldCB0aGUgY3VycmVudCBIRUFEJ3MgZGVzY3JpcHRpb24gKi8KK2NoYXIgKmdldF9oZWFkX2Rlc2NyaXB0aW9uKHZvaWQpOworLyogIFNldCB1cCB0cmFuc2xhdGVkIHN0cmluZ3MgaW4gdGhlIG91dHB1dC4gKi8KK3ZvaWQgc2V0dXBfcmVmX2ZpbHRlcl9wb3JjZWxhaW5fbXNnKHZvaWQpOworCisvKgorICogUHJpbnQgYSBzaW5nbGUgcmVmLCBvdXRzaWRlIG9mIGFueSByZWYtZmlsdGVyLiBOb3RlIHRoYXQgdGhlCisgKiBuYW1lIG11c3QgYmUgYSBmdWxseSBxdWFsaWZpZWQgcmVmbmFtZS4KKyAqLwordm9pZCBwcmV0dHlfcHJpbnRfcmVmKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgY29uc3Qgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCk7CisKKy8qCisgKiBQdXNoIGEgc2luZ2xlIHJlZiBvbnRvIHRoZSBhcnJheTsgdGhpcyBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgeW91ciBvd24KKyAqIHJlZl9hcnJheSB3aXRob3V0IHVzaW5nIGZpbHRlcl9yZWZzKCkuCisgKi8KK3N0cnVjdCByZWZfYXJyYXlfaXRlbSAqcmVmX2FycmF5X3B1c2goc3RydWN0IHJlZl9hcnJheSAqYXJyYXksCisJCQkJICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCisjZW5kaWYgLyogIFJFRl9GSUxURVJfSCAgKi8KZGlmZiAtLWdpdCBhL3JlZmxvZy13YWxrLmMgYi9yZWZsb2ctd2Fsay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMjViMjcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZsb2ctd2Fsay5jCkBAIC0wLDAgKzEsMzQ4IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJyZWZsb2ctd2Fsay5oIgorCitzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyB7CisJY2hhciAqcmVmOworCWNvbnN0IGNoYXIgKnNob3J0X3JlZjsKKwlzdHJ1Y3QgcmVmbG9nX2luZm8geworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9vaWQsIG5vaWQ7CisJCWNoYXIgKmVtYWlsOworCQl0aW1lc3RhbXBfdCB0aW1lc3RhbXA7CisJCWludCB0ejsKKwkJY2hhciAqbWVzc2FnZTsKKwl9ICppdGVtczsKKwlpbnQgbnIsIGFsbG9jOworfTsKKworc3RhdGljIGludCByZWFkX29uZV9yZWZsb2coc3RydWN0IG9iamVjdF9pZCAqb29pZCwgc3RydWN0IG9iamVjdF9pZCAqbm9pZCwKKwkJY29uc3QgY2hhciAqZW1haWwsIHRpbWVzdGFtcF90IHRpbWVzdGFtcCwgaW50IHR6LAorCQljb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBjb21wbGV0ZV9yZWZsb2dzICphcnJheSA9IGNiX2RhdGE7CisJc3RydWN0IHJlZmxvZ19pbmZvICppdGVtOworCisJQUxMT0NfR1JPVyhhcnJheS0+aXRlbXMsIGFycmF5LT5uciArIDEsIGFycmF5LT5hbGxvYyk7CisJaXRlbSA9IGFycmF5LT5pdGVtcyArIGFycmF5LT5ucjsKKwlvaWRjcHkoJml0ZW0tPm9vaWQsIG9vaWQpOworCW9pZGNweSgmaXRlbS0+bm9pZCwgbm9pZCk7CisJaXRlbS0+ZW1haWwgPSB4c3RyZHVwKGVtYWlsKTsKKwlpdGVtLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisJaXRlbS0+dHogPSB0ejsKKwlpdGVtLT5tZXNzYWdlID0geHN0cmR1cChtZXNzYWdlKTsKKwlhcnJheS0+bnIrKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9jb21wbGV0ZV9yZWZsb2coc3RydWN0IGNvbXBsZXRlX3JlZmxvZ3MgKmFycmF5KQoreworCWludCBpOworCisJaWYgKCFhcnJheSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGFycmF5LT5ucjsgaSsrKSB7CisJCWZyZWUoYXJyYXktPml0ZW1zW2ldLmVtYWlsKTsKKwkJZnJlZShhcnJheS0+aXRlbXNbaV0ubWVzc2FnZSk7CisJfQorCWZyZWUoYXJyYXktPml0ZW1zKTsKKwlmcmVlKGFycmF5LT5yZWYpOworCWZyZWUoYXJyYXkpOworfQorCitzdGF0aWMgc3RydWN0IGNvbXBsZXRlX3JlZmxvZ3MgKnJlYWRfY29tcGxldGVfcmVmbG9nKGNvbnN0IGNoYXIgKnJlZikKK3sKKwlzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyAqcmVmbG9ncyA9CisJCXhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb21wbGV0ZV9yZWZsb2dzKSk7CisJcmVmbG9ncy0+cmVmID0geHN0cmR1cChyZWYpOworCWZvcl9lYWNoX3JlZmxvZ19lbnQocmVmLCByZWFkX29uZV9yZWZsb2csIHJlZmxvZ3MpOworCWlmIChyZWZsb2dzLT5uciA9PSAwKSB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCXZvaWQgKm5hbWVfdG9fZnJlZTsKKwkJbmFtZSA9IG5hbWVfdG9fZnJlZSA9IHJlc29sdmVfcmVmZHVwKHJlZiwgUkVTT0xWRV9SRUZfUkVBRElORywKKwkJCQkJCSAgICAgTlVMTCwgTlVMTCk7CisJCWlmIChuYW1lKSB7CisJCQlmb3JfZWFjaF9yZWZsb2dfZW50KG5hbWUsIHJlYWRfb25lX3JlZmxvZywgcmVmbG9ncyk7CisJCQlmcmVlKG5hbWVfdG9fZnJlZSk7CisJCX0KKwl9CisJaWYgKHJlZmxvZ3MtPm5yID09IDApIHsKKwkJY2hhciAqcmVmbmFtZSA9IHhzdHJmbXQoInJlZnMvJXMiLCByZWYpOworCQlmb3JfZWFjaF9yZWZsb2dfZW50KHJlZm5hbWUsIHJlYWRfb25lX3JlZmxvZywgcmVmbG9ncyk7CisJCWlmIChyZWZsb2dzLT5uciA9PSAwKSB7CisJCQlmcmVlKHJlZm5hbWUpOworCQkJcmVmbmFtZSA9IHhzdHJmbXQoInJlZnMvaGVhZHMvJXMiLCByZWYpOworCQkJZm9yX2VhY2hfcmVmbG9nX2VudChyZWZuYW1lLCByZWFkX29uZV9yZWZsb2csIHJlZmxvZ3MpOworCQl9CisJCWZyZWUocmVmbmFtZSk7CisJfQorCXJldHVybiByZWZsb2dzOworfQorCitzdGF0aWMgaW50IGdldF9yZWZsb2dfcmVjbm9fYnlfdGltZShzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyAqYXJyYXksCisJdGltZXN0YW1wX3QgdGltZXN0YW1wKQoreworCWludCBpOworCWZvciAoaSA9IGFycmF5LT5uciAtIDE7IGkgPj0gMDsgaS0tKQorCQlpZiAodGltZXN0YW1wID49IGFycmF5LT5pdGVtc1tpXS50aW1lc3RhbXApCisJCQlyZXR1cm4gaTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0cnVjdCBjb21taXRfcmVmbG9nIHsKKwlpbnQgcmVjbm87CisJZW51bSBzZWxlY3Rvcl90eXBlIHsKKwkJU0VMRUNUT1JfTk9ORSwKKwkJU0VMRUNUT1JfSU5ERVgsCisJCVNFTEVDVE9SX0RBVEUKKwl9IHNlbGVjdG9yOworCXN0cnVjdCBjb21wbGV0ZV9yZWZsb2dzICpyZWZsb2dzOworfTsKKworc3RydWN0IHJlZmxvZ193YWxrX2luZm8geworCXN0cnVjdCBjb21taXRfcmVmbG9nICoqbG9nczsKKwlzaXplX3QgbnIsIGFsbG9jOworCXN0cnVjdCBzdHJpbmdfbGlzdCBjb21wbGV0ZV9yZWZsb2dzOworCXN0cnVjdCBjb21taXRfcmVmbG9nICpsYXN0X2NvbW1pdF9yZWZsb2c7Cit9OworCit2b2lkIGluaXRfcmVmbG9nX3dhbGsoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKippbmZvKQoreworCSppbmZvID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlZmxvZ193YWxrX2luZm8pKTsKKwkoKmluZm8pLT5jb21wbGV0ZV9yZWZsb2dzLnN0cmR1cF9zdHJpbmdzID0gMTsKK30KKworaW50IGFkZF9yZWZsb2dfZm9yX3dhbGsoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKmluZm8sCisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwl0aW1lc3RhbXBfdCB0aW1lc3RhbXAgPSAwOworCWludCByZWNubyA9IC0xOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCBjb21wbGV0ZV9yZWZsb2dzICpyZWZsb2dzOworCWNoYXIgKmJyYW5jaCwgKmF0ID0gc3RyY2hyKG5hbWUsICdAJyk7CisJc3RydWN0IGNvbW1pdF9yZWZsb2cgKmNvbW1pdF9yZWZsb2c7CisJZW51bSBzZWxlY3Rvcl90eXBlIHNlbGVjdG9yID0gU0VMRUNUT1JfTk9ORTsKKworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCWRpZSgiY2Fubm90IHdhbGsgcmVmbG9ncyBmb3IgJXMiLCBuYW1lKTsKKworCWJyYW5jaCA9IHhzdHJkdXAobmFtZSk7CisJaWYgKGF0ICYmIGF0WzFdID09ICd7JykgeworCQljaGFyICplcDsKKwkJYnJhbmNoW2F0IC0gbmFtZV0gPSAnXDAnOworCQlyZWNubyA9IHN0cnRvdWwoYXQgKyAyLCAmZXAsIDEwKTsKKwkJaWYgKCplcCAhPSAnfScpIHsKKwkJCXJlY25vID0gLTE7CisJCQl0aW1lc3RhbXAgPSBhcHByb3hpZGF0ZShhdCArIDIpOworCQkJc2VsZWN0b3IgPSBTRUxFQ1RPUl9EQVRFOworCQl9CisJCWVsc2UKKwkJCXNlbGVjdG9yID0gU0VMRUNUT1JfSU5ERVg7CisJfSBlbHNlCisJCXJlY25vID0gMDsKKworCWl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoJmluZm8tPmNvbXBsZXRlX3JlZmxvZ3MsIGJyYW5jaCk7CisJaWYgKGl0ZW0pCisJCXJlZmxvZ3MgPSBpdGVtLT51dGlsOworCWVsc2UgeworCQlpZiAoKmJyYW5jaCA9PSAnXDAnKSB7CisJCQlmcmVlKGJyYW5jaCk7CisJCQlicmFuY2ggPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIDAsIE5VTEwsIE5VTEwpOworCQkJaWYgKCFicmFuY2gpCisJCQkJZGllKCJubyBjdXJyZW50IGJyYW5jaCIpOworCisJCX0KKwkJcmVmbG9ncyA9IHJlYWRfY29tcGxldGVfcmVmbG9nKGJyYW5jaCk7CisJCWlmICghcmVmbG9ncyB8fCByZWZsb2dzLT5uciA9PSAwKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJCWNoYXIgKmI7CisJCQlpbnQgcmV0ID0gZHdpbV9sb2coYnJhbmNoLCBzdHJsZW4oYnJhbmNoKSwKKwkJCQkJICAgJm9pZCwgJmIpOworCQkJaWYgKHJldCA+IDEpCisJCQkJZnJlZShiKTsKKwkJCWVsc2UgaWYgKHJldCA9PSAxKSB7CisJCQkJZnJlZV9jb21wbGV0ZV9yZWZsb2cocmVmbG9ncyk7CisJCQkJZnJlZShicmFuY2gpOworCQkJCWJyYW5jaCA9IGI7CisJCQkJcmVmbG9ncyA9IHJlYWRfY29tcGxldGVfcmVmbG9nKGJyYW5jaCk7CisJCQl9CisJCX0KKwkJaWYgKCFyZWZsb2dzIHx8IHJlZmxvZ3MtPm5yID09IDApIHsKKwkJCWZyZWVfY29tcGxldGVfcmVmbG9nKHJlZmxvZ3MpOworCQkJZnJlZShicmFuY2gpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXN0cmluZ19saXN0X2luc2VydCgmaW5mby0+Y29tcGxldGVfcmVmbG9ncywgYnJhbmNoKS0+dXRpbAorCQkJPSByZWZsb2dzOworCX0KKwlmcmVlKGJyYW5jaCk7CisKKwljb21taXRfcmVmbG9nID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNvbW1pdF9yZWZsb2cpKTsKKwlpZiAocmVjbm8gPCAwKSB7CisJCWNvbW1pdF9yZWZsb2ctPnJlY25vID0gZ2V0X3JlZmxvZ19yZWNub19ieV90aW1lKHJlZmxvZ3MsIHRpbWVzdGFtcCk7CisJCWlmIChjb21taXRfcmVmbG9nLT5yZWNubyA8IDApIHsKKwkJCWZyZWUoY29tbWl0X3JlZmxvZyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9IGVsc2UKKwkJY29tbWl0X3JlZmxvZy0+cmVjbm8gPSByZWZsb2dzLT5uciAtIHJlY25vIC0gMTsKKwljb21taXRfcmVmbG9nLT5zZWxlY3RvciA9IHNlbGVjdG9yOworCWNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MgPSByZWZsb2dzOworCisJQUxMT0NfR1JPVyhpbmZvLT5sb2dzLCBpbmZvLT5uciArIDEsIGluZm8tPmFsbG9jKTsKKwlpbmZvLT5sb2dzW2luZm8tPm5yKytdID0gY29tbWl0X3JlZmxvZzsKKworCXJldHVybiAwOworfQorCit2b2lkIGdldF9yZWZsb2dfc2VsZWN0b3Ioc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvLAorCQkJIGNvbnN0IHN0cnVjdCBkYXRlX21vZGUgKmRtb2RlLCBpbnQgZm9yY2VfZGF0ZSwKKwkJCSBpbnQgc2hvcnRlbikKK3sKKwlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqY29tbWl0X3JlZmxvZyA9IHJlZmxvZ19pbmZvLT5sYXN0X2NvbW1pdF9yZWZsb2c7CisJc3RydWN0IHJlZmxvZ19pbmZvICppbmZvOworCWNvbnN0IGNoYXIgKnByaW50ZWRfcmVmOworCisJaWYgKCFjb21taXRfcmVmbG9nKQorCQlyZXR1cm47CisKKwlpZiAoc2hvcnRlbikgeworCQlpZiAoIWNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPnNob3J0X3JlZikKKwkJCWNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPnNob3J0X3JlZgorCQkJCT0gc2hvcnRlbl91bmFtYmlndW91c19yZWYoY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+cmVmLCAwKTsKKwkJcHJpbnRlZF9yZWYgPSBjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5zaG9ydF9yZWY7CisJfSBlbHNlIHsKKwkJcHJpbnRlZF9yZWYgPSBjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5yZWY7CisJfQorCisJc3RyYnVmX2FkZGYoc2IsICIlc0B7IiwgcHJpbnRlZF9yZWYpOworCWlmIChjb21taXRfcmVmbG9nLT5zZWxlY3RvciA9PSBTRUxFQ1RPUl9EQVRFIHx8CisJICAgIChjb21taXRfcmVmbG9nLT5zZWxlY3RvciA9PSBTRUxFQ1RPUl9OT05FICYmIGZvcmNlX2RhdGUpKSB7CisJCWluZm8gPSAmY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+aXRlbXNbY29tbWl0X3JlZmxvZy0+cmVjbm8rMV07CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHNob3dfZGF0ZShpbmZvLT50aW1lc3RhbXAsIGluZm8tPnR6LCBkbW9kZSkpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRmKHNiLCAiJWQiLCBjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5ucgorCQkJICAgIC0gMiAtIGNvbW1pdF9yZWZsb2ctPnJlY25vKTsKKwl9CisKKwlzdHJidWZfYWRkY2goc2IsICd9Jyk7Cit9CisKK3ZvaWQgZ2V0X3JlZmxvZ19tZXNzYWdlKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvKQoreworCXN0cnVjdCBjb21taXRfcmVmbG9nICpjb21taXRfcmVmbG9nID0gcmVmbG9nX2luZm8tPmxhc3RfY29tbWl0X3JlZmxvZzsKKwlzdHJ1Y3QgcmVmbG9nX2luZm8gKmluZm87CisJc2l6ZV90IGxlbjsKKworCWlmICghY29tbWl0X3JlZmxvZykKKwkJcmV0dXJuOworCisJaW5mbyA9ICZjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5pdGVtc1tjb21taXRfcmVmbG9nLT5yZWNubysxXTsKKwlsZW4gPSBzdHJsZW4oaW5mby0+bWVzc2FnZSk7CisJaWYgKGxlbiA+IDApCisJCWxlbi0tOyAvKiBzdHJpcCBhd2F5IHRyYWlsaW5nIG5ld2xpbmUgKi8KKwlzdHJidWZfYWRkKHNiLCBpbmZvLT5tZXNzYWdlLCBsZW4pOworfQorCitjb25zdCBjaGFyICpnZXRfcmVmbG9nX2lkZW50KHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICpyZWZsb2dfaW5mbykKK3sKKwlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqY29tbWl0X3JlZmxvZyA9IHJlZmxvZ19pbmZvLT5sYXN0X2NvbW1pdF9yZWZsb2c7CisJc3RydWN0IHJlZmxvZ19pbmZvICppbmZvOworCisJaWYgKCFjb21taXRfcmVmbG9nKQorCQlyZXR1cm4gTlVMTDsKKworCWluZm8gPSAmY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+aXRlbXNbY29tbWl0X3JlZmxvZy0+cmVjbm8rMV07CisJcmV0dXJuIGluZm8tPmVtYWlsOworfQorCit0aW1lc3RhbXBfdCBnZXRfcmVmbG9nX3RpbWVzdGFtcChzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8pCit7CisJc3RydWN0IGNvbW1pdF9yZWZsb2cgKmNvbW1pdF9yZWZsb2cgPSByZWZsb2dfaW5mby0+bGFzdF9jb21taXRfcmVmbG9nOworCXN0cnVjdCByZWZsb2dfaW5mbyAqaW5mbzsKKworCWlmICghY29tbWl0X3JlZmxvZykKKwkJcmV0dXJuIDA7CisKKwlpbmZvID0gJmNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPml0ZW1zW2NvbW1pdF9yZWZsb2ctPnJlY25vKzFdOworCXJldHVybiBpbmZvLT50aW1lc3RhbXA7Cit9CisKK3ZvaWQgc2hvd19yZWZsb2dfbWVzc2FnZShzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8sIGludCBvbmVsaW5lLAorCQkJIGNvbnN0IHN0cnVjdCBkYXRlX21vZGUgKmRtb2RlLCBpbnQgZm9yY2VfZGF0ZSkKK3sKKwlpZiAocmVmbG9nX2luZm8gJiYgcmVmbG9nX2luZm8tPmxhc3RfY29tbWl0X3JlZmxvZykgeworCQlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqY29tbWl0X3JlZmxvZyA9IHJlZmxvZ19pbmZvLT5sYXN0X2NvbW1pdF9yZWZsb2c7CisJCXN0cnVjdCByZWZsb2dfaW5mbyAqaW5mbzsKKwkJc3RydWN0IHN0cmJ1ZiBzZWxlY3RvciA9IFNUUkJVRl9JTklUOworCisJCWluZm8gPSAmY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+aXRlbXNbY29tbWl0X3JlZmxvZy0+cmVjbm8rMV07CisJCWdldF9yZWZsb2dfc2VsZWN0b3IoJnNlbGVjdG9yLCByZWZsb2dfaW5mbywgZG1vZGUsIGZvcmNlX2RhdGUsIDApOworCQlpZiAob25lbGluZSkgeworCQkJcHJpbnRmKCIlczogJXMiLCBzZWxlY3Rvci5idWYsIGluZm8tPm1lc3NhZ2UpOworCQl9CisJCWVsc2UgeworCQkJcHJpbnRmKCJSZWZsb2c6ICVzICglcylcblJlZmxvZyBtZXNzYWdlOiAlcyIsCisJCQkgICAgICAgc2VsZWN0b3IuYnVmLCBpbmZvLT5lbWFpbCwgaW5mby0+bWVzc2FnZSk7CisJCX0KKworCQlzdHJidWZfcmVsZWFzZSgmc2VsZWN0b3IpOworCX0KK30KKworaW50IHJlZmxvZ193YWxrX2VtcHR5KHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvKQoreworCXJldHVybiAhaW5mbyB8fCAhaW5mby0+bnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpuZXh0X3JlZmxvZ19jb21taXQoc3RydWN0IGNvbW1pdF9yZWZsb2cgKmxvZykKK3sKKwlmb3IgKDsgbG9nLT5yZWNubyA+PSAwOyBsb2ctPnJlY25vLS0pIHsKKwkJc3RydWN0IHJlZmxvZ19pbmZvICplbnRyeSA9ICZsb2ctPnJlZmxvZ3MtPml0ZW1zW2xvZy0+cmVjbm9dOworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksCisJCQkJCQkgICZlbnRyeS0+bm9pZCk7CisKKwkJaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJCXJldHVybiAoc3RydWN0IGNvbW1pdCAqKW9iajsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB0aW1lc3RhbXBfdCBsb2dfdGltZXN0YW1wKHN0cnVjdCBjb21taXRfcmVmbG9nICpsb2cpCit7CisJcmV0dXJuIGxvZy0+cmVmbG9ncy0+aXRlbXNbbG9nLT5yZWNub10udGltZXN0YW1wOworfQorCitzdHJ1Y3QgY29tbWl0ICpuZXh0X3JlZmxvZ19lbnRyeShzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqd2FsaykKK3sKKwlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqYmVzdCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdCAqYmVzdF9jb21taXQgPSBOVUxMOworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IHdhbGstPm5yOyBpKyspIHsKKwkJc3RydWN0IGNvbW1pdF9yZWZsb2cgKmxvZyA9IHdhbGstPmxvZ3NbaV07CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IG5leHRfcmVmbG9nX2NvbW1pdChsb2cpOworCisJCWlmICghY29tbWl0KQorCQkJY29udGludWU7CisKKwkJaWYgKCFiZXN0IHx8IGxvZ190aW1lc3RhbXAobG9nKSA+IGxvZ190aW1lc3RhbXAoYmVzdCkpIHsKKwkJCWJlc3QgPSBsb2c7CisJCQliZXN0X2NvbW1pdCA9IGNvbW1pdDsKKwkJfQorCX0KKworCWlmIChiZXN0KSB7CisJCWJlc3QtPnJlY25vLS07CisJCXdhbGstPmxhc3RfY29tbWl0X3JlZmxvZyA9IGJlc3Q7CisJCXJldHVybiBiZXN0X2NvbW1pdDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3JlZmxvZy13YWxrLmggYi9yZWZsb2ctd2Fsay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNjQwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZsb2ctd2Fsay5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgUkVGTE9HX1dBTEtfSAorI2RlZmluZSBSRUZMT0dfV0FMS19ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdHJ1Y3QgY29tbWl0Oworc3RydWN0IHJlZmxvZ193YWxrX2luZm87CisKK3ZvaWQgaW5pdF9yZWZsb2dfd2FsayhzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqKmluZm8pOworaW50IGFkZF9yZWZsb2dfZm9yX3dhbGsoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKmluZm8sCisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCBzaG93X3JlZmxvZ19tZXNzYWdlKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvLCBpbnQsCisJCQkgY29uc3Qgc3RydWN0IGRhdGVfbW9kZSAqLCBpbnQgZm9yY2VfZGF0ZSk7Cit2b2lkIGdldF9yZWZsb2dfbWVzc2FnZShzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCXN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICpyZWZsb2dfaW5mbyk7Citjb25zdCBjaGFyICpnZXRfcmVmbG9nX2lkZW50KHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICpyZWZsb2dfaW5mbyk7Cit0aW1lc3RhbXBfdCBnZXRfcmVmbG9nX3RpbWVzdGFtcChzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8pOwordm9pZCBnZXRfcmVmbG9nX3NlbGVjdG9yKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJIHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICpyZWZsb2dfaW5mbywKKwkJCSBjb25zdCBzdHJ1Y3QgZGF0ZV9tb2RlICpkbW9kZSwgaW50IGZvcmNlX2RhdGUsCisJCQkgaW50IHNob3J0ZW4pOworCitpbnQgcmVmbG9nX3dhbGtfZW1wdHkoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKndhbGspOworCitzdHJ1Y3QgY29tbWl0ICpuZXh0X3JlZmxvZ19lbnRyeShzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3JlZnMuYyBiL3JlZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjRmZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVmcy5jCkBAIC0wLDAgKzEsMjMwMyBAQAorLyoKKyAqIFRoZSBiYWNrZW5kLWluZGVwZW5kZW50IHBhcnQgb2YgdGhlIHJlZmVyZW5jZSBtb2R1bGUuCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiaXRlcmF0b3IuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVmcy9yZWZzLWludGVybmFsLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorCisvKgorICogTGlzdCBvZiBhbGwgYXZhaWxhYmxlIGJhY2tlbmRzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVmX3N0b3JhZ2VfYmUgKnJlZnNfYmFja2VuZHMgPSAmcmVmc19iZV9maWxlczsKKworc3RhdGljIHN0cnVjdCByZWZfc3RvcmFnZV9iZSAqZmluZF9yZWZfc3RvcmFnZV9iYWNrZW5kKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHJlZl9zdG9yYWdlX2JlICpiZTsKKwlmb3IgKGJlID0gcmVmc19iYWNrZW5kczsgYmU7IGJlID0gYmUtPm5leHQpCisJCWlmICghc3RyY21wKGJlLT5uYW1lLCBuYW1lKSkKKwkJCXJldHVybiBiZTsKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHJlZl9zdG9yYWdlX2JhY2tlbmRfZXhpc3RzKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIGZpbmRfcmVmX3N0b3JhZ2VfYmFja2VuZChuYW1lKSAhPSBOVUxMOworfQorCisvKgorICogSG93IHRvIGhhbmRsZSB2YXJpb3VzIGNoYXJhY3RlcnMgaW4gcmVmbmFtZXM6CisgKiAwOiBBbiBhY2NlcHRhYmxlIGNoYXJhY3RlciBmb3IgcmVmcworICogMTogRW5kLW9mLWNvbXBvbmVudAorICogMjogLiwgbG9vayBmb3IgYSBwcmVjZWRpbmcgLiB0byByZWplY3QgLi4gaW4gcmVmcworICogMzogeywgbG9vayBmb3IgYSBwcmVjZWRpbmcgQCB0byByZWplY3QgQHsgaW4gcmVmcworICogNDogQSBiYWQgY2hhcmFjdGVyOiBBU0NJSSBjb250cm9sIGNoYXJhY3RlcnMsIGFuZAorICogICAgIjoiLCAiPyIsICJbIiwgIlwiLCAiXiIsICJ+IiwgU1AsIG9yIFRBQgorICogNTogKiwgcmVqZWN0IHVubGVzcyBSRUZOQU1FX1JFRlNQRUNfUEFUVEVSTiBpcyBzZXQKKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgcmVmbmFtZV9kaXNwb3NpdGlvblsyNTZdID0geworCTEsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsCisJNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwKKwk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCAwLCAwLCAwLCAyLCAxLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQsIDAsIDAsIDAsIDAsIDQsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0LCA0LCAwLCA0LCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMywgMCwgMCwgNCwgNAorfTsKKworLyoKKyAqIFRyeSB0byByZWFkIG9uZSByZWZuYW1lIGNvbXBvbmVudCBmcm9tIHRoZSBmcm9udCBvZiByZWZuYW1lLgorICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGNvbXBvbmVudCBmb3VuZCwgb3IgLTEgaWYgdGhlIGNvbXBvbmVudCBpcworICogbm90IGxlZ2FsLiAgSXQgaXMgbGVnYWwgaWYgaXQgaXMgc29tZXRoaW5nIHJlYXNvbmFibGUgdG8gaGF2ZSB1bmRlcgorICogIi5naXQvcmVmcy8iOyBXZSBkbyBub3QgbGlrZSBpdCBpZjoKKyAqCisgKiAtIGl0IGJlZ2lucyB3aXRoICIuIiwgb3IKKyAqIC0gaXQgaGFzIGRvdWJsZSBkb3RzICIuLiIsIG9yCisgKiAtIGl0IGhhcyBBU0NJSSBjb250cm9sIGNoYXJhY3RlcnMsIG9yCisgKiAtIGl0IGhhcyAiOiIsICI/IiwgIlsiLCAiXCIsICJeIiwgIn4iLCBTUCwgb3IgVEFCIGFueXdoZXJlLCBvcgorICogLSBpdCBoYXMgIioiIGFueXdoZXJlIHVubGVzcyBSRUZOQU1FX1JFRlNQRUNfUEFUVEVSTiBpcyBzZXQsIG9yCisgKiAtIGl0IGVuZHMgd2l0aCBhICIvIiwgb3IKKyAqIC0gaXQgZW5kcyB3aXRoICIubG9jayIsIG9yCisgKiAtIGl0IGNvbnRhaW5zIGEgIkB7IiBwb3J0aW9uCisgKgorICogV2hlbiBzYW5pdGl6ZWQgaXMgbm90IE5VTEwsIGluc3RlYWQgb2YgcmVqZWN0aW5nIHRoZSBpbnB1dCByZWZuYW1lCisgKiBhcyBhbiBlcnJvciwgdHJ5IHRvIGNvbWUgdXAgd2l0aCBhIHVzYWJsZSByZXBsYWNlbWVudCBmb3IgdGhlIGlucHV0CisgKiByZWZuYW1lIGluIGl0LgorICovCitzdGF0aWMgaW50IGNoZWNrX3JlZm5hbWVfY29tcG9uZW50KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCAqZmxhZ3MsCisJCQkJICAgc3RydWN0IHN0cmJ1ZiAqc2FuaXRpemVkKQoreworCWNvbnN0IGNoYXIgKmNwOworCWNoYXIgbGFzdCA9ICdcMCc7CisJc2l6ZV90IGNvbXBvbmVudF9zdGFydCA9IDA7IC8qIGdhcmJhZ2UgLSBub3QgYSByZWFzb25hYmxlIGluaXRpYWwgdmFsdWUgKi8KKworCWlmIChzYW5pdGl6ZWQpCisJCWNvbXBvbmVudF9zdGFydCA9IHNhbml0aXplZC0+bGVuOworCisJZm9yIChjcCA9IHJlZm5hbWU7IDsgY3ArKykgeworCQlpbnQgY2ggPSAqY3AgJiAyNTU7CisJCXVuc2lnbmVkIGNoYXIgZGlzcCA9IHJlZm5hbWVfZGlzcG9zaXRpb25bY2hdOworCisJCWlmIChzYW5pdGl6ZWQgJiYgZGlzcCAhPSAxKQorCQkJc3RyYnVmX2FkZGNoKHNhbml0aXplZCwgY2gpOworCisJCXN3aXRjaCAoZGlzcCkgeworCQljYXNlIDE6CisJCQlnb3RvIG91dDsKKwkJY2FzZSAyOgorCQkJaWYgKGxhc3QgPT0gJy4nKSB7IC8qIFJlZm5hbWUgY29udGFpbnMgIi4uIi4gKi8KKwkJCQlpZiAoc2FuaXRpemVkKQorCQkJCQkvKiBjb2xsYXBzZSAiLi4iIHRvIHNpbmdsZSAiLiIgKi8KKwkJCQkJc3RyYnVmX3NldGxlbihzYW5pdGl6ZWQsIHNhbml0aXplZC0+bGVuIC0gMSk7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJaWYgKGxhc3QgPT0gJ0AnKSB7IC8qIFJlZm5hbWUgY29udGFpbnMgIkB7Ii4gKi8KKwkJCQlpZiAoc2FuaXRpemVkKQorCQkJCQlzYW5pdGl6ZWQtPmJ1ZltzYW5pdGl6ZWQtPmxlbi0xXSA9ICctJzsKKwkJCQllbHNlCisJCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQkvKiBmb3JiaWRkZW4gY2hhciAqLworCQkJaWYgKHNhbml0aXplZCkKKwkJCQlzYW5pdGl6ZWQtPmJ1ZltzYW5pdGl6ZWQtPmxlbi0xXSA9ICctJzsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gLTE7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJaWYgKCEoKmZsYWdzICYgUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4pKSB7CisJCQkJLyogcmVmc3BlYyBjYW4ndCBiZSBhIHBhdHRlcm4gKi8KKwkJCQlpZiAoc2FuaXRpemVkKQorCQkJCQlzYW5pdGl6ZWQtPmJ1ZltzYW5pdGl6ZWQtPmxlbi0xXSA9ICctJzsKKwkJCQllbHNlCisJCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFVuc2V0IHRoZSBwYXR0ZXJuIGZsYWcgc28gdGhhdCB3ZSBvbmx5IGFjY2VwdAorCQkJICogYSBzaW5nbGUgYXN0ZXJpc2sgZm9yIG9uZSBzaWRlIG9mIHJlZnNwZWMuCisJCQkgKi8KKwkJCSpmbGFncyAmPSB+IFJFRk5BTUVfUkVGU1BFQ19QQVRURVJOOworCQkJYnJlYWs7CisJCX0KKwkJbGFzdCA9IGNoOworCX0KK291dDoKKwlpZiAoY3AgPT0gcmVmbmFtZSkKKwkJcmV0dXJuIDA7IC8qIENvbXBvbmVudCBoYXMgemVybyBsZW5ndGguICovCisKKwlpZiAocmVmbmFtZVswXSA9PSAnLicpIHsgLyogQ29tcG9uZW50IHN0YXJ0cyB3aXRoICcuJy4gKi8KKwkJaWYgKHNhbml0aXplZCkKKwkJCXNhbml0aXplZC0+YnVmW2NvbXBvbmVudF9zdGFydF0gPSAnLSc7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwl9CisJaWYgKGNwIC0gcmVmbmFtZSA+PSBMT0NLX1NVRkZJWF9MRU4gJiYKKwkgICAgIW1lbWNtcChjcCAtIExPQ0tfU1VGRklYX0xFTiwgTE9DS19TVUZGSVgsIExPQ0tfU1VGRklYX0xFTikpIHsKKwkJaWYgKCFzYW5pdGl6ZWQpCisJCQlyZXR1cm4gLTE7CisJCS8qIFJlZm5hbWUgZW5kcyB3aXRoICIubG9jayIuICovCisJCXdoaWxlIChzdHJidWZfc3RyaXBfc3VmZml4KHNhbml0aXplZCwgTE9DS19TVUZGSVgpKSB7CisJCQkvKiB0cnkgYWdhaW4gaW4gY2FzZSB3ZSBoYXZlIC5sb2NrLmxvY2sgKi8KKwkJfQorCX0KKwlyZXR1cm4gY3AgLSByZWZuYW1lOworfQorCitzdGF0aWMgaW50IGNoZWNrX29yX3Nhbml0aXplX3JlZm5hbWUoY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IGZsYWdzLAorCQkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqc2FuaXRpemVkKQoreworCWludCBjb21wb25lbnRfbGVuLCBjb21wb25lbnRfY291bnQgPSAwOworCisJaWYgKCFzdHJjbXAocmVmbmFtZSwgIkAiKSkgeworCQkvKiBSZWZuYW1lIGlzIGEgc2luZ2xlIGNoYXJhY3RlciAnQCcuICovCisJCWlmIChzYW5pdGl6ZWQpCisJCQlzdHJidWZfYWRkY2goc2FuaXRpemVkLCAnLScpOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJaWYgKHNhbml0aXplZCAmJiBzYW5pdGl6ZWQtPmxlbikKKwkJCXN0cmJ1Zl9jb21wbGV0ZShzYW5pdGl6ZWQsICcvJyk7CisKKwkJLyogV2UgYXJlIGF0IHRoZSBzdGFydCBvZiBhIHBhdGggY29tcG9uZW50LiAqLworCQljb21wb25lbnRfbGVuID0gY2hlY2tfcmVmbmFtZV9jb21wb25lbnQocmVmbmFtZSwgJmZsYWdzLAorCQkJCQkJCXNhbml0aXplZCk7CisJCWlmIChzYW5pdGl6ZWQgJiYgY29tcG9uZW50X2xlbiA9PSAwKQorCQkJOyAvKiBPSywgb21pdCBlbXB0eSBjb21wb25lbnQgKi8KKwkJZWxzZSBpZiAoY29tcG9uZW50X2xlbiA8PSAwKQorCQkJcmV0dXJuIC0xOworCisJCWNvbXBvbmVudF9jb3VudCsrOworCQlpZiAocmVmbmFtZVtjb21wb25lbnRfbGVuXSA9PSAnXDAnKQorCQkJYnJlYWs7CisJCS8qIFNraXAgdG8gbmV4dCBjb21wb25lbnQuICovCisJCXJlZm5hbWUgKz0gY29tcG9uZW50X2xlbiArIDE7CisJfQorCisJaWYgKHJlZm5hbWVbY29tcG9uZW50X2xlbiAtIDFdID09ICcuJykgeworCQkvKiBSZWZuYW1lIGVuZHMgd2l0aCAnLicuICovCisJCWlmIChzYW5pdGl6ZWQpCisJCQk7IC8qIG9taXQgZW5kaW5nIGRvdCAqLworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQorCWlmICghKGZsYWdzICYgUkVGTkFNRV9BTExPV19PTkVMRVZFTCkgJiYgY29tcG9uZW50X2NvdW50IDwgMikKKwkJcmV0dXJuIC0xOyAvKiBSZWZuYW1lIGhhcyBvbmx5IG9uZSBjb21wb25lbnQuICovCisJcmV0dXJuIDA7Cit9CisKK2ludCBjaGVja19yZWZuYW1lX2Zvcm1hdChjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGNoZWNrX29yX3Nhbml0aXplX3JlZm5hbWUocmVmbmFtZSwgZmxhZ3MsIE5VTEwpOworfQorCit2b2lkIHNhbml0aXplX3JlZm5hbWVfY29tcG9uZW50KGNvbnN0IGNoYXIgKnJlZm5hbWUsIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlpZiAoY2hlY2tfb3Jfc2FuaXRpemVfcmVmbmFtZShyZWZuYW1lLCBSRUZOQU1FX0FMTE9XX09ORUxFVkVMLCBvdXQpKQorCQlCVUcoInNhbml0aXppbmcgcmVmbmFtZSAnJXMnIGNoZWNrIHJldHVybmVkIGVycm9yIiwgcmVmbmFtZSk7Cit9CisKK2ludCByZWZuYW1lX2lzX3NhZmUoY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwljb25zdCBjaGFyICpyZXN0OworCisJaWYgKHNraXBfcHJlZml4KHJlZm5hbWUsICJyZWZzLyIsICZyZXN0KSkgeworCQljaGFyICpidWY7CisJCWludCByZXN1bHQ7CisJCXNpemVfdCByZXN0bGVuID0gc3RybGVuKHJlc3QpOworCisJCS8qIHJlc3QgbXVzdCBub3QgYmUgZW1wdHksIG9yIHN0YXJ0IG9yIGVuZCB3aXRoICIvIiAqLworCQlpZiAoIXJlc3RsZW4gfHwgKnJlc3QgPT0gJy8nIHx8IHJlc3RbcmVzdGxlbiAtIDFdID09ICcvJykKKwkJCXJldHVybiAwOworCisJCS8qCisJCSAqIERvZXMgdGhlIHJlZm5hbWUgdHJ5IHRvIGVzY2FwZSByZWZzLz8KKwkJICogRm9yIGV4YW1wbGU6IHJlZnMvZm9vLy4uL2JhciBpcyBzYWZlIGJ1dCByZWZzL2Zvby8uLi8uLi9iYXIKKwkJICogaXMgbm90LgorCQkgKi8KKwkJYnVmID0geG1hbGxvY3oocmVzdGxlbik7CisJCXJlc3VsdCA9ICFub3JtYWxpemVfcGF0aF9jb3B5KGJ1ZiwgcmVzdCkgJiYgIXN0cmNtcChidWYsIHJlc3QpOworCQlmcmVlKGJ1Zik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJZG8geworCQlpZiAoIWlzdXBwZXIoKnJlZm5hbWUpICYmICpyZWZuYW1lICE9ICdfJykKKwkJCXJldHVybiAwOworCQlyZWZuYW1lKys7CisJfSB3aGlsZSAoKnJlZm5hbWUpOworCXJldHVybiAxOworfQorCisvKgorICogUmV0dXJuIHRydWUgaWYgcmVmbmFtZSwgd2hpY2ggaGFzIHRoZSBzcGVjaWZpZWQgb2lkIGFuZCBmbGFncywgY2FuCisgKiBiZSByZXNvbHZlZCB0byBhbiBvYmplY3QgaW4gdGhlIGRhdGFiYXNlLiBJZiB0aGUgcmVmZXJyZWQtdG8gb2JqZWN0CisgKiBkb2VzIG5vdCBleGlzdCwgZW1pdCBhIHdhcm5pbmcgYW5kIHJldHVybiBmYWxzZS4KKyAqLworaW50IHJlZl9yZXNvbHZlc190b19vYmplY3QoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBSRUZfSVNCUk9LRU4pCisJCXJldHVybiAwOworCWlmICghaGFzX29iamVjdF9maWxlKG9pZCkpIHsKKwkJZXJyb3IoXygiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QhIiksIHJlZm5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK2NoYXIgKnJlZnNfcmVzb2x2ZV9yZWZkdXAoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCSAgY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IHJlc29sdmVfZmxhZ3MsCisJCQkgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50ICpmbGFncykKK3sKKwljb25zdCBjaGFyICpyZXN1bHQ7CisKKwlyZXN1bHQgPSByZWZzX3Jlc29sdmVfcmVmX3Vuc2FmZShyZWZzLCByZWZuYW1lLCByZXNvbHZlX2ZsYWdzLAorCQkJCQkgb2lkLCBmbGFncyk7CisJcmV0dXJuIHhzdHJkdXBfb3JfbnVsbChyZXN1bHQpOworfQorCitjaGFyICpyZXNvbHZlX3JlZmR1cChjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgcmVzb2x2ZV9mbGFncywKKwkJICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCAqZmxhZ3MpCit7CisJcmV0dXJuIHJlZnNfcmVzb2x2ZV9yZWZkdXAoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwKKwkJCQkgICByZWZuYW1lLCByZXNvbHZlX2ZsYWdzLAorCQkJCSAgIG9pZCwgZmxhZ3MpOworfQorCisvKiBUaGUgYXJndW1lbnQgdG8gZmlsdGVyX3JlZnMgKi8KK3N0cnVjdCByZWZfZmlsdGVyIHsKKwljb25zdCBjaGFyICpwYXR0ZXJuOworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwllYWNoX3JlZl9mbiAqZm47CisJdm9pZCAqY2JfZGF0YTsKK307CisKK2ludCByZWZzX3JlYWRfcmVmX2Z1bGwoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJICAgICAgIGludCByZXNvbHZlX2ZsYWdzLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCAqZmxhZ3MpCit7CisJaWYgKHJlZnNfcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZnMsIHJlZm5hbWUsIHJlc29sdmVfZmxhZ3MsIG9pZCwgZmxhZ3MpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCByZWFkX3JlZl9mdWxsKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCByZXNvbHZlX2ZsYWdzLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCAqZmxhZ3MpCit7CisJcmV0dXJuIHJlZnNfcmVhZF9yZWZfZnVsbChnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLCByZWZuYW1lLAorCQkJCSAgcmVzb2x2ZV9mbGFncywgb2lkLCBmbGFncyk7Cit9CisKK2ludCByZWFkX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJcmV0dXJuIHJlYWRfcmVmX2Z1bGwocmVmbmFtZSwgUkVTT0xWRV9SRUZfUkVBRElORywgb2lkLCBOVUxMKTsKK30KKworc3RhdGljIGludCByZWZzX3JlZl9leGlzdHMoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlyZXR1cm4gISFyZWZzX3Jlc29sdmVfcmVmX3Vuc2FmZShyZWZzLCByZWZuYW1lLCBSRVNPTFZFX1JFRl9SRUFESU5HLCBOVUxMLCBOVUxMKTsKK30KKworaW50IHJlZl9leGlzdHMoY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlyZXR1cm4gcmVmc19yZWZfZXhpc3RzKGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksIHJlZm5hbWUpOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9yZWZzKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgIGludCBmbGFncywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmVmX2ZpbHRlciAqZmlsdGVyID0gKHN0cnVjdCByZWZfZmlsdGVyICopZGF0YTsKKworCWlmICh3aWxkbWF0Y2goZmlsdGVyLT5wYXR0ZXJuLCByZWZuYW1lLCAwKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZpbHRlci0+cHJlZml4KQorCQlza2lwX3ByZWZpeChyZWZuYW1lLCBmaWx0ZXItPnByZWZpeCwgJnJlZm5hbWUpOworCXJldHVybiBmaWx0ZXItPmZuKHJlZm5hbWUsIG9pZCwgZmxhZ3MsIGZpbHRlci0+Y2JfZGF0YSk7Cit9CisKK2VudW0gcGVlbF9zdGF0dXMgcGVlbF9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3QgKm8gPSBsb29rdXBfdW5rbm93bl9vYmplY3QobmFtZSk7CisKKwlpZiAoby0+dHlwZSA9PSBPQkpfTk9ORSkgeworCQlpbnQgdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgbmFtZSwgTlVMTCk7CisJCWlmICh0eXBlIDwgMCB8fCAhb2JqZWN0X2FzX3R5cGUodGhlX3JlcG9zaXRvcnksIG8sIHR5cGUsIDApKQorCQkJcmV0dXJuIFBFRUxfSU5WQUxJRDsKKwl9CisKKwlpZiAoby0+dHlwZSAhPSBPQkpfVEFHKQorCQlyZXR1cm4gUEVFTF9OT05fVEFHOworCisJbyA9IGRlcmVmX3RhZ19ub3ZlcmlmeShvKTsKKwlpZiAoIW8pCisJCXJldHVybiBQRUVMX0lOVkFMSUQ7CisKKwlvaWRjcHkob2lkLCAmby0+b2lkKTsKKwlyZXR1cm4gUEVFTF9QRUVMRUQ7Cit9CisKK3N0cnVjdCB3YXJuX2lmX2RhbmdsaW5nX2RhdGEgeworCUZJTEUgKmZwOworCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpyZWZuYW1lczsKKwljb25zdCBjaGFyICptc2dfZm10OworfTsKKworc3RhdGljIGludCB3YXJuX2lmX2RhbmdsaW5nX3N5bXJlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCB3YXJuX2lmX2RhbmdsaW5nX2RhdGEgKmQgPSBjYl9kYXRhOworCWNvbnN0IGNoYXIgKnJlc29sdmVzX3RvOworCisJaWYgKCEoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpKQorCQlyZXR1cm4gMDsKKworCXJlc29sdmVzX3RvID0gcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZm5hbWUsIDAsIE5VTEwsIE5VTEwpOworCWlmICghcmVzb2x2ZXNfdG8KKwkgICAgfHwgKGQtPnJlZm5hbWUKKwkJPyBzdHJjbXAocmVzb2x2ZXNfdG8sIGQtPnJlZm5hbWUpCisJCTogIXN0cmluZ19saXN0X2hhc19zdHJpbmcoZC0+cmVmbmFtZXMsIHJlc29sdmVzX3RvKSkpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJZnByaW50ZihkLT5mcCwgZC0+bXNnX2ZtdCwgcmVmbmFtZSk7CisJZnB1dGMoJ1xuJywgZC0+ZnApOworCXJldHVybiAwOworfQorCit2b2lkIHdhcm5fZGFuZ2xpbmdfc3ltcmVmKEZJTEUgKmZwLCBjb25zdCBjaGFyICptc2dfZm10LCBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXN0cnVjdCB3YXJuX2lmX2RhbmdsaW5nX2RhdGEgZGF0YTsKKworCWRhdGEuZnAgPSBmcDsKKwlkYXRhLnJlZm5hbWUgPSByZWZuYW1lOworCWRhdGEucmVmbmFtZXMgPSBOVUxMOworCWRhdGEubXNnX2ZtdCA9IG1zZ19mbXQ7CisJZm9yX2VhY2hfcmF3cmVmKHdhcm5faWZfZGFuZ2xpbmdfc3ltcmVmLCAmZGF0YSk7Cit9CisKK3ZvaWQgd2Fybl9kYW5nbGluZ19zeW1yZWZzKEZJTEUgKmZwLCBjb25zdCBjaGFyICptc2dfZm10LCBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZm5hbWVzKQoreworCXN0cnVjdCB3YXJuX2lmX2RhbmdsaW5nX2RhdGEgZGF0YTsKKworCWRhdGEuZnAgPSBmcDsKKwlkYXRhLnJlZm5hbWUgPSBOVUxMOworCWRhdGEucmVmbmFtZXMgPSByZWZuYW1lczsKKwlkYXRhLm1zZ19mbXQgPSBtc2dfZm10OworCWZvcl9lYWNoX3Jhd3JlZih3YXJuX2lmX2RhbmdsaW5nX3N5bXJlZiwgJmRhdGEpOworfQorCitpbnQgcmVmc19mb3JfZWFjaF90YWdfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiByZWZzX2Zvcl9lYWNoX3JlZl9pbihyZWZzLCAicmVmcy90YWdzLyIsIGZuLCBjYl9kYXRhKTsKK30KKworaW50IGZvcl9lYWNoX3RhZ19yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIHJlZnNfZm9yX2VhY2hfdGFnX3JlZihnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLCBmbiwgY2JfZGF0YSk7Cit9CisKK2ludCByZWZzX2Zvcl9lYWNoX2JyYW5jaF9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIHJlZnNfZm9yX2VhY2hfcmVmX2luKHJlZnMsICJyZWZzL2hlYWRzLyIsIGZuLCBjYl9kYXRhKTsKK30KKworaW50IGZvcl9lYWNoX2JyYW5jaF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIHJlZnNfZm9yX2VhY2hfYnJhbmNoX3JlZihnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLCBmbiwgY2JfZGF0YSk7Cit9CisKK2ludCByZWZzX2Zvcl9lYWNoX3JlbW90ZV9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIHJlZnNfZm9yX2VhY2hfcmVmX2luKHJlZnMsICJyZWZzL3JlbW90ZXMvIiwgZm4sIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfcmVtb3RlX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gcmVmc19mb3JfZWFjaF9yZW1vdGVfcmVmKGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksIGZuLCBjYl9kYXRhKTsKK30KKworaW50IGhlYWRfcmVmX25hbWVzcGFjZWQoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgZmxhZzsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlc0hFQUQiLCBnZXRfZ2l0X25hbWVzcGFjZSgpKTsKKwlpZiAoIXJlYWRfcmVmX2Z1bGwoYnVmLmJ1ZiwgUkVTT0xWRV9SRUZfUkVBRElORywgJm9pZCwgJmZsYWcpKQorCQlyZXQgPSBmbihidWYuYnVmLCAmb2lkLCBmbGFnLCBjYl9kYXRhKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbm9ybWFsaXplX2dsb2JfcmVmKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQljb25zdCBjaGFyICpwYXR0ZXJuKQoreworCXN0cnVjdCBzdHJidWYgbm9ybWFsaXplZF9wYXR0ZXJuID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoKnBhdHRlcm4gPT0gJy8nKQorCQlCVUcoInBhdHRlcm4gbXVzdCBub3Qgc3RhcnQgd2l0aCAnLyciKTsKKworCWlmIChwcmVmaXgpIHsKKwkJc3RyYnVmX2FkZHN0cigmbm9ybWFsaXplZF9wYXR0ZXJuLCBwcmVmaXgpOworCX0KKwllbHNlIGlmICghc3RhcnRzX3dpdGgocGF0dGVybiwgInJlZnMvIikpCisJCXN0cmJ1Zl9hZGRzdHIoJm5vcm1hbGl6ZWRfcGF0dGVybiwgInJlZnMvIik7CisJc3RyYnVmX2FkZHN0cigmbm9ybWFsaXplZF9wYXR0ZXJuLCBwYXR0ZXJuKTsKKwlzdHJidWZfc3RyaXBfc3VmZml4KCZub3JtYWxpemVkX3BhdHRlcm4sICIvIik7CisKKwlpdGVtLT5zdHJpbmcgPSBzdHJidWZfZGV0YWNoKCZub3JtYWxpemVkX3BhdHRlcm4sIE5VTEwpOworCWl0ZW0tPnV0aWwgPSBoYXNfZ2xvYl9zcGVjaWFscyhwYXR0ZXJuKSA/IE5VTEwgOiBpdGVtLT5zdHJpbmc7CisJc3RyYnVmX3JlbGVhc2UoJm5vcm1hbGl6ZWRfcGF0dGVybik7Cit9CisKK2ludCBmb3JfZWFjaF9nbG9iX3JlZl9pbihlYWNoX3JlZl9mbiBmbiwgY29uc3QgY2hhciAqcGF0dGVybiwKKwljb25zdCBjaGFyICpwcmVmaXgsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiByZWFsX3BhdHRlcm4gPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmX2ZpbHRlciBmaWx0ZXI7CisJaW50IHJldDsKKworCWlmICghcHJlZml4ICYmICFzdGFydHNfd2l0aChwYXR0ZXJuLCAicmVmcy8iKSkKKwkJc3RyYnVmX2FkZHN0cigmcmVhbF9wYXR0ZXJuLCAicmVmcy8iKTsKKwllbHNlIGlmIChwcmVmaXgpCisJCXN0cmJ1Zl9hZGRzdHIoJnJlYWxfcGF0dGVybiwgcHJlZml4KTsKKwlzdHJidWZfYWRkc3RyKCZyZWFsX3BhdHRlcm4sIHBhdHRlcm4pOworCisJaWYgKCFoYXNfZ2xvYl9zcGVjaWFscyhwYXR0ZXJuKSkgeworCQkvKiBBcHBlbmQgaW1wbGllZCAnLycgJyonIGlmIG5vdCBwcmVzZW50LiAqLworCQlzdHJidWZfY29tcGxldGUoJnJlYWxfcGF0dGVybiwgJy8nKTsKKwkJLyogTm8gbmVlZCB0byBjaGVjayBmb3IgJyonLCB0aGVyZSBpcyBub25lLiAqLworCQlzdHJidWZfYWRkY2goJnJlYWxfcGF0dGVybiwgJyonKTsKKwl9CisKKwlmaWx0ZXIucGF0dGVybiA9IHJlYWxfcGF0dGVybi5idWY7CisJZmlsdGVyLnByZWZpeCA9IHByZWZpeDsKKwlmaWx0ZXIuZm4gPSBmbjsKKwlmaWx0ZXIuY2JfZGF0YSA9IGNiX2RhdGE7CisJcmV0ID0gZm9yX2VhY2hfcmVmKGZpbHRlcl9yZWZzLCAmZmlsdGVyKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWFsX3BhdHRlcm4pOworCXJldHVybiByZXQ7Cit9CisKK2ludCBmb3JfZWFjaF9nbG9iX3JlZihlYWNoX3JlZl9mbiBmbiwgY29uc3QgY2hhciAqcGF0dGVybiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZm9yX2VhY2hfZ2xvYl9yZWZfaW4oZm4sIHBhdHRlcm4sIE5VTEwsIGNiX2RhdGEpOworfQorCitjb25zdCBjaGFyICpwcmV0dGlmeV9yZWZuYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKHNraXBfcHJlZml4KG5hbWUsICJyZWZzL2hlYWRzLyIsICZuYW1lKSB8fAorCSAgICBza2lwX3ByZWZpeChuYW1lLCAicmVmcy90YWdzLyIsICZuYW1lKSB8fAorCSAgICBza2lwX3ByZWZpeChuYW1lLCAicmVmcy9yZW1vdGVzLyIsICZuYW1lKSkKKwkJOyAvKiBub3RoaW5nICovCisJcmV0dXJuIG5hbWU7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZWZfcmV2X3BhcnNlX3J1bGVzW10gPSB7CisJIiUuKnMiLAorCSJyZWZzLyUuKnMiLAorCSJyZWZzL3RhZ3MvJS4qcyIsCisJInJlZnMvaGVhZHMvJS4qcyIsCisJInJlZnMvcmVtb3Rlcy8lLipzIiwKKwkicmVmcy9yZW1vdGVzLyUuKnMvSEVBRCIsCisJTlVMTAorfTsKKworI2RlZmluZSBOVU1fUkVWX1BBUlNFX1JVTEVTIChBUlJBWV9TSVpFKHJlZl9yZXZfcGFyc2VfcnVsZXMpIC0gMSkKKworLyoKKyAqIElzIGl0IHBvc3NpYmxlIHRoYXQgdGhlIGNhbGxlciBtZWFudCBmdWxsX25hbWUgd2l0aCBhYmJyZXZfbmFtZT8KKyAqIElmIHNvIHJldHVybiBhIG5vbi16ZXJvIHZhbHVlIHRvIHNpZ25hbCAieWVzIjsgdGhlIG1hZ25pdHVkZSBvZgorICogdGhlIHJldHVybmVkIHZhbHVlIGdpdmVzIHRoZSBwcmVjZWRlbmNlIHVzZWQgZm9yIGRpc2FtYmlndWF0aW9uLgorICoKKyAqIElmIGFiYnJldl9uYW1lIGNhbm5vdCBtZWFuIGZ1bGxfbmFtZSwgcmV0dXJuIDAuCisgKi8KK2ludCByZWZuYW1lX21hdGNoKGNvbnN0IGNoYXIgKmFiYnJldl9uYW1lLCBjb25zdCBjaGFyICpmdWxsX25hbWUpCit7CisJY29uc3QgY2hhciAqKnA7CisJY29uc3QgaW50IGFiYnJldl9uYW1lX2xlbiA9IHN0cmxlbihhYmJyZXZfbmFtZSk7CisJY29uc3QgaW50IG51bV9ydWxlcyA9IE5VTV9SRVZfUEFSU0VfUlVMRVM7CisKKwlmb3IgKHAgPSByZWZfcmV2X3BhcnNlX3J1bGVzOyAqcDsgcCsrKQorCQlpZiAoIXN0cmNtcChmdWxsX25hbWUsIG1rcGF0aCgqcCwgYWJicmV2X25hbWVfbGVuLCBhYmJyZXZfbmFtZSkpKQorCQkJcmV0dXJuICZyZWZfcmV2X3BhcnNlX3J1bGVzW251bV9ydWxlc10gLSBwOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHaXZlbiBhICdwcmVmaXgnIGV4cGFuZCBpdCBieSB0aGUgcnVsZXMgaW4gJ3JlZl9yZXZfcGFyc2VfcnVsZXMnIGFuZCBhZGQKKyAqIHRoZSByZXN1bHRzIHRvICdwcmVmaXhlcycKKyAqLwordm9pZCBleHBhbmRfcmVmX3ByZWZpeChzdHJ1Y3QgYXJndl9hcnJheSAqcHJlZml4ZXMsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICoqcDsKKwlpbnQgbGVuID0gc3RybGVuKHByZWZpeCk7CisKKwlmb3IgKHAgPSByZWZfcmV2X3BhcnNlX3J1bGVzOyAqcDsgcCsrKQorCQlhcmd2X2FycmF5X3B1c2hmKHByZWZpeGVzLCAqcCwgbGVuLCBwcmVmaXgpOworfQorCisvKgorICogKnN0cmluZyBhbmQgKmxlbiB3aWxsIG9ubHkgYmUgc3Vic3RpdHV0ZWQsIGFuZCAqc3RyaW5nIHJldHVybmVkIChmb3IKKyAqIGxhdGVyIGZyZWUoKWluZykgaWYgdGhlIHN0cmluZyBwYXNzZWQgaW4gaXMgYSBtYWdpYyBzaG9ydC1oYW5kIGZvcm0KKyAqIHRvIG5hbWUgYSBicmFuY2guCisgKi8KK3N0YXRpYyBjaGFyICpzdWJzdGl0dXRlX2JyYW5jaF9uYW1lKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICBjb25zdCBjaGFyICoqc3RyaW5nLCBpbnQgKmxlbikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSByZXBvX2ludGVycHJldF9icmFuY2hfbmFtZShyLCAqc3RyaW5nLCAqbGVuLCAmYnVmLCAwKTsKKworCWlmIChyZXQgPT0gKmxlbikgeworCQlzaXplX3Qgc2l6ZTsKKwkJKnN0cmluZyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJnNpemUpOworCQkqbGVuID0gc2l6ZTsKKwkJcmV0dXJuIChjaGFyICopKnN0cmluZzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHJlcG9fZHdpbV9yZWYoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwKKwkJICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNoYXIgKipyZWYpCit7CisJY2hhciAqbGFzdF9icmFuY2ggPSBzdWJzdGl0dXRlX2JyYW5jaF9uYW1lKHIsICZzdHIsICZsZW4pOworCWludCAgIHJlZnNfZm91bmQgID0gZXhwYW5kX3JlZihyLCBzdHIsIGxlbiwgb2lkLCByZWYpOworCWZyZWUobGFzdF9icmFuY2gpOworCXJldHVybiByZWZzX2ZvdW5kOworfQorCitpbnQgZHdpbV9yZWYoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNoYXIgKipyZWYpCit7CisJcmV0dXJuIHJlcG9fZHdpbV9yZWYodGhlX3JlcG9zaXRvcnksIHN0ciwgbGVuLCBvaWQsIHJlZik7Cit9CisKK2ludCBleHBhbmRfcmVmKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sCisJICAgICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY2hhciAqKnJlZikKK3sKKwljb25zdCBjaGFyICoqcCwgKnI7CisJaW50IHJlZnNfZm91bmQgPSAwOworCXN0cnVjdCBzdHJidWYgZnVsbHJlZiA9IFNUUkJVRl9JTklUOworCisJKnJlZiA9IE5VTEw7CisJZm9yIChwID0gcmVmX3Jldl9wYXJzZV9ydWxlczsgKnA7IHArKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZF9mcm9tX3JlZjsKKwkJc3RydWN0IG9iamVjdF9pZCAqdGhpc19yZXN1bHQ7CisJCWludCBmbGFnOworCisJCXRoaXNfcmVzdWx0ID0gcmVmc19mb3VuZCA/ICZvaWRfZnJvbV9yZWYgOiBvaWQ7CisJCXN0cmJ1Zl9yZXNldCgmZnVsbHJlZik7CisJCXN0cmJ1Zl9hZGRmKCZmdWxscmVmLCAqcCwgbGVuLCBzdHIpOworCQlyID0gcmVmc19yZXNvbHZlX3JlZl91bnNhZmUoZ2V0X21haW5fcmVmX3N0b3JlKHJlcG8pLAorCQkJCQkgICAgZnVsbHJlZi5idWYsIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCSAgICB0aGlzX3Jlc3VsdCwgJmZsYWcpOworCQlpZiAocikgeworCQkJaWYgKCFyZWZzX2ZvdW5kKyspCisJCQkJKnJlZiA9IHhzdHJkdXAocik7CisJCQlpZiAoIXdhcm5fYW1iaWd1b3VzX3JlZnMpCisJCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoKGZsYWcgJiBSRUZfSVNTWU1SRUYpICYmIHN0cmNtcChmdWxscmVmLmJ1ZiwgIkhFQUQiKSkgeworCQkJd2FybmluZyhfKCJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMiKSwgZnVsbHJlZi5idWYpOworCQl9IGVsc2UgaWYgKChmbGFnICYgUkVGX0lTQlJPS0VOKSAmJiBzdHJjaHIoZnVsbHJlZi5idWYsICcvJykpIHsKKwkJCXdhcm5pbmcoXygiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIpLCBmdWxscmVmLmJ1Zik7CisJCX0KKwl9CisJc3RyYnVmX3JlbGVhc2UoJmZ1bGxyZWYpOworCXJldHVybiByZWZzX2ZvdW5kOworfQorCitpbnQgcmVwb19kd2ltX2xvZyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLAorCQkgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY2hhciAqKmxvZykKK3sKKwlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzID0gZ2V0X21haW5fcmVmX3N0b3JlKHIpOworCWNoYXIgKmxhc3RfYnJhbmNoID0gc3Vic3RpdHV0ZV9icmFuY2hfbmFtZShyLCAmc3RyLCAmbGVuKTsKKwljb25zdCBjaGFyICoqcDsKKwlpbnQgbG9nc19mb3VuZCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisKKwkqbG9nID0gTlVMTDsKKwlmb3IgKHAgPSByZWZfcmV2X3BhcnNlX3J1bGVzOyAqcDsgcCsrKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgaGFzaDsKKwkJY29uc3QgY2hhciAqcmVmLCAqaXQ7CisKKwkJc3RyYnVmX3Jlc2V0KCZwYXRoKTsKKwkJc3RyYnVmX2FkZGYoJnBhdGgsICpwLCBsZW4sIHN0cik7CisJCXJlZiA9IHJlZnNfcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZnMsIHBhdGguYnVmLAorCQkJCQkgICAgICBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCQkgICAgICAmaGFzaCwgTlVMTCk7CisJCWlmICghcmVmKQorCQkJY29udGludWU7CisJCWlmIChyZWZzX3JlZmxvZ19leGlzdHMocmVmcywgcGF0aC5idWYpKQorCQkJaXQgPSBwYXRoLmJ1ZjsKKwkJZWxzZSBpZiAoc3RyY21wKHJlZiwgcGF0aC5idWYpICYmCisJCQkgcmVmc19yZWZsb2dfZXhpc3RzKHJlZnMsIHJlZikpCisJCQlpdCA9IHJlZjsKKwkJZWxzZQorCQkJY29udGludWU7CisJCWlmICghbG9nc19mb3VuZCsrKSB7CisJCQkqbG9nID0geHN0cmR1cChpdCk7CisJCQlvaWRjcHkob2lkLCAmaGFzaCk7CisJCX0KKwkJaWYgKCF3YXJuX2FtYmlndW91c19yZWZzKQorCQkJYnJlYWs7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwlmcmVlKGxhc3RfYnJhbmNoKTsKKwlyZXR1cm4gbG9nc19mb3VuZDsKK30KKworaW50IGR3aW1fbG9nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjaGFyICoqbG9nKQoreworCXJldHVybiByZXBvX2R3aW1fbG9nKHRoZV9yZXBvc2l0b3J5LCBzdHIsIGxlbiwgb2lkLCBsb2cpOworfQorCitzdGF0aWMgaW50IGlzX3Blcl93b3JrdHJlZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlyZXR1cm4gIXN0cmNtcChyZWZuYW1lLCAiSEVBRCIpIHx8CisJCXN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL3dvcmt0cmVlLyIpIHx8CisJCXN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL2Jpc2VjdC8iKSB8fAorCQlzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9yZXdyaXR0ZW4vIik7Cit9CisKK3N0YXRpYyBpbnQgaXNfcHNldWRvcmVmX3N5bnRheChjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWNvbnN0IGNoYXIgKmM7CisKKwlmb3IgKGMgPSByZWZuYW1lOyAqYzsgYysrKSB7CisJCWlmICghaXN1cHBlcigqYykgJiYgKmMgIT0gJy0nICYmICpjICE9ICdfJykKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGlzX21haW5fcHNldWRvcmVmX3N5bnRheChjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXJldHVybiBza2lwX3ByZWZpeChyZWZuYW1lLCAibWFpbi13b3JrdHJlZS8iLCAmcmVmbmFtZSkgJiYKKwkJKnJlZm5hbWUgJiYKKwkJaXNfcHNldWRvcmVmX3N5bnRheChyZWZuYW1lKTsKK30KKworc3RhdGljIGludCBpc19vdGhlcl9wc2V1ZG9yZWZfc3ludGF4KGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJaWYgKCFza2lwX3ByZWZpeChyZWZuYW1lLCAid29ya3RyZWVzLyIsICZyZWZuYW1lKSkKKwkJcmV0dXJuIDA7CisJcmVmbmFtZSA9IHN0cmNocihyZWZuYW1lLCAnLycpOworCWlmICghcmVmbmFtZSB8fCAhcmVmbmFtZVsxXSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGlzX3BzZXVkb3JlZl9zeW50YXgocmVmbmFtZSArIDEpOworfQorCitlbnVtIHJlZl90eXBlIHJlZl90eXBlKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJaWYgKGlzX3Blcl93b3JrdHJlZV9yZWYocmVmbmFtZSkpCisJCXJldHVybiBSRUZfVFlQRV9QRVJfV09SS1RSRUU7CisJaWYgKGlzX3BzZXVkb3JlZl9zeW50YXgocmVmbmFtZSkpCisJCXJldHVybiBSRUZfVFlQRV9QU0VVRE9SRUY7CisJaWYgKGlzX21haW5fcHNldWRvcmVmX3N5bnRheChyZWZuYW1lKSkKKwkJcmV0dXJuIFJFRl9UWVBFX01BSU5fUFNFVURPUkVGOworCWlmIChpc19vdGhlcl9wc2V1ZG9yZWZfc3ludGF4KHJlZm5hbWUpKQorCQlyZXR1cm4gUkVGX1RZUEVfT1RIRVJfUFNFVURPUkVGOworCXJldHVybiBSRUZfVFlQRV9OT1JNQUw7Cit9CisKK2xvbmcgZ2V0X2ZpbGVzX3JlZl9sb2NrX3RpbWVvdXRfbXModm9pZCkKK3sKKwlzdGF0aWMgaW50IGNvbmZpZ3VyZWQgPSAwOworCisJLyogVGhlIGRlZmF1bHQgdGltZW91dCBpcyAxMDAgbXM6ICovCisJc3RhdGljIGludCB0aW1lb3V0X21zID0gMTAwOworCisJaWYgKCFjb25maWd1cmVkKSB7CisJCWdpdF9jb25maWdfZ2V0X2ludCgiY29yZS5maWxlc3JlZmxvY2t0aW1lb3V0IiwgJnRpbWVvdXRfbXMpOworCQljb25maWd1cmVkID0gMTsKKwl9CisKKwlyZXR1cm4gdGltZW91dF9tczsKK30KKworc3RhdGljIGludCB3cml0ZV9wc2V1ZG9yZWYoY29uc3QgY2hhciAqcHNldWRvcmVmLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJaW50IGZkOworCXN0cnVjdCBsb2NrX2ZpbGUgbG9jayA9IExPQ0tfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAtMTsKKworCWlmICghb2lkKQorCQlyZXR1cm4gMDsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlc1xuIiwgb2lkX3RvX2hleChvaWQpKTsKKworCWZpbGVuYW1lID0gZ2l0X3BhdGgoIiVzIiwgcHNldWRvcmVmKTsKKwlmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGVfdGltZW91dCgmbG9jaywgZmlsZW5hbWUsIDAsCisJCQkJCSAgICAgICBnZXRfZmlsZXNfcmVmX2xvY2tfdGltZW91dF9tcygpKTsKKwlpZiAoZmQgPCAwKSB7CisJCXN0cmJ1Zl9hZGRmKGVyciwgXygiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZzogJXMiKSwKKwkJCSAgICBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZ290byBkb25lOworCX0KKworCWlmIChvbGRfb2lkKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgYWN0dWFsX29sZF9vaWQ7CisKKwkJaWYgKHJlYWRfcmVmKHBzZXVkb3JlZiwgJmFjdHVhbF9vbGRfb2lkKSkgeworCQkJaWYgKCFpc19udWxsX29pZChvbGRfb2lkKSkgeworCQkJCXN0cmJ1Zl9hZGRmKGVyciwgXygiY291bGQgbm90IHJlYWQgcmVmICclcyciKSwKKwkJCQkJICAgIHBzZXVkb3JlZik7CisJCQkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCX0gZWxzZSBpZiAoaXNfbnVsbF9vaWQob2xkX29pZCkpIHsKKwkJCXN0cmJ1Zl9hZGRmKGVyciwgXygicmVmICclcycgYWxyZWFkeSBleGlzdHMiKSwKKwkJCQkgICAgcHNldWRvcmVmKTsKKwkJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisJCQlnb3RvIGRvbmU7CisJCX0gZWxzZSBpZiAoIW9pZGVxKCZhY3R1YWxfb2xkX29pZCwgb2xkX29pZCkpIHsKKwkJCXN0cmJ1Zl9hZGRmKGVyciwgXygidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciKSwKKwkJCQkgICAgcHNldWRvcmVmKTsKKwkJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLmJ1ZiwgYnVmLmxlbikgPCAwKSB7CisJCXN0cmJ1Zl9hZGRmKGVyciwgXygiY291bGQgbm90IHdyaXRlIHRvICclcyciKSwgZmlsZW5hbWUpOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCQlnb3RvIGRvbmU7CisJfQorCisJY29tbWl0X2xvY2tfZmlsZSgmbG9jayk7CisJcmV0ID0gMDsKK2RvbmU6CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkZWxldGVfcHNldWRvcmVmKGNvbnN0IGNoYXIgKnBzZXVkb3JlZiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCkKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKworCWZpbGVuYW1lID0gZ2l0X3BhdGgoIiVzIiwgcHNldWRvcmVmKTsKKworCWlmIChvbGRfb2lkICYmICFpc19udWxsX29pZChvbGRfb2lkKSkgeworCQlzdHJ1Y3QgbG9ja19maWxlIGxvY2sgPSBMT0NLX0lOSVQ7CisJCWludCBmZDsKKwkJc3RydWN0IG9iamVjdF9pZCBhY3R1YWxfb2xkX29pZDsKKworCQlmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGVfdGltZW91dCgKKwkJCQkmbG9jaywgZmlsZW5hbWUsIDAsCisJCQkJZ2V0X2ZpbGVzX3JlZl9sb2NrX3RpbWVvdXRfbXMoKSk7CisJCWlmIChmZCA8IDApIHsKKwkJCWVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciKSwKKwkJCQkgICAgZmlsZW5hbWUpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmIChyZWFkX3JlZihwc2V1ZG9yZWYsICZhY3R1YWxfb2xkX29pZCkpCisJCQlkaWUoXygiY291bGQgbm90IHJlYWQgcmVmICclcyciKSwgcHNldWRvcmVmKTsKKwkJaWYgKCFvaWRlcSgmYWN0dWFsX29sZF9vaWQsIG9sZF9vaWQpKSB7CisJCQllcnJvcihfKCJ1bmV4cGVjdGVkIG9iamVjdCBJRCB3aGVuIGRlbGV0aW5nICclcyciKSwKKwkJCSAgICAgIHBzZXVkb3JlZik7CisJCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJdW5saW5rKGZpbGVuYW1lKTsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwl9IGVsc2UgeworCQl1bmxpbmsoZmlsZW5hbWUpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgcmVmc19kZWxldGVfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKm1zZywKKwkJICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLAorCQkgICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAocmVmX3R5cGUocmVmbmFtZSkgPT0gUkVGX1RZUEVfUFNFVURPUkVGKSB7CisJCWFzc2VydChyZWZzID09IGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSkpOworCQlyZXR1cm4gZGVsZXRlX3BzZXVkb3JlZihyZWZuYW1lLCBvbGRfb2lkKTsKKwl9CisKKwl0cmFuc2FjdGlvbiA9IHJlZl9zdG9yZV90cmFuc2FjdGlvbl9iZWdpbihyZWZzLCAmZXJyKTsKKwlpZiAoIXRyYW5zYWN0aW9uIHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl9kZWxldGUodHJhbnNhY3Rpb24sIHJlZm5hbWUsIG9sZF9vaWQsCisJCQkJICAgZmxhZ3MsIG1zZywgJmVycikgfHwKKwkgICAgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpIHsKKwkJZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCXJldHVybiAxOworCX0KKwlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBkZWxldGVfcmVmKGNvbnN0IGNoYXIgKm1zZywgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXJldHVybiByZWZzX2RlbGV0ZV9yZWYoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwgbXNnLCByZWZuYW1lLAorCQkJICAgICAgIG9sZF9vaWQsIGZsYWdzKTsKK30KKwordm9pZCBjb3B5X3JlZmxvZ19tc2coc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwljaGFyIGM7CisJaW50IHdhc3NwYWNlID0gMTsKKworCXN0cmJ1Zl9hZGRjaChzYiwgJ1x0Jyk7CisJd2hpbGUgKChjID0gKm1zZysrKSkgeworCQlpZiAod2Fzc3BhY2UgJiYgaXNzcGFjZShjKSkKKwkJCWNvbnRpbnVlOworCQl3YXNzcGFjZSA9IGlzc3BhY2UoYyk7CisJCWlmICh3YXNzcGFjZSkKKwkJCWMgPSAnICc7CisJCXN0cmJ1Zl9hZGRjaChzYiwgYyk7CisJfQorCXN0cmJ1Zl9ydHJpbShzYik7Cit9CisKK2ludCBzaG91bGRfYXV0b2NyZWF0ZV9yZWZsb2coY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlzd2l0Y2ggKGxvZ19hbGxfcmVmX3VwZGF0ZXMpIHsKKwljYXNlIExPR19SRUZTX0FMV0FZUzoKKwkJcmV0dXJuIDE7CisJY2FzZSBMT0dfUkVGU19OT1JNQUw6CisJCXJldHVybiBzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9oZWFkcy8iKSB8fAorCQkJc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSB8fAorCQkJc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvbm90ZXMvIikgfHwKKwkJCSFzdHJjbXAocmVmbmFtZSwgIkhFQUQiKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK2ludCBpc19icmFuY2goY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlyZXR1cm4gIXN0cmNtcChyZWZuYW1lLCAiSEVBRCIpIHx8IHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL2hlYWRzLyIpOworfQorCitzdHJ1Y3QgcmVhZF9yZWZfYXRfY2IgeworCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisJdGltZXN0YW1wX3QgYXRfdGltZTsKKwlpbnQgY250OworCWludCByZWNjbnQ7CisJc3RydWN0IG9iamVjdF9pZCAqb2lkOworCWludCBmb3VuZF9pdDsKKworCXN0cnVjdCBvYmplY3RfaWQgb29pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG5vaWQ7CisJaW50IHR6OworCXRpbWVzdGFtcF90IGRhdGU7CisJY2hhciAqKm1zZzsKKwl0aW1lc3RhbXBfdCAqY3V0b2ZmX3RpbWU7CisJaW50ICpjdXRvZmZfdHo7CisJaW50ICpjdXRvZmZfY250OworfTsKKworc3RhdGljIGludCByZWFkX3JlZl9hdF9lbnQoc3RydWN0IG9iamVjdF9pZCAqb29pZCwgc3RydWN0IG9iamVjdF9pZCAqbm9pZCwKKwkJY29uc3QgY2hhciAqZW1haWwsIHRpbWVzdGFtcF90IHRpbWVzdGFtcCwgaW50IHR6LAorCQljb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCByZWFkX3JlZl9hdF9jYiAqY2IgPSBjYl9kYXRhOworCisJY2ItPnJlY2NudCsrOworCWNiLT50eiA9IHR6OworCWNiLT5kYXRlID0gdGltZXN0YW1wOworCisJaWYgKHRpbWVzdGFtcCA8PSBjYi0+YXRfdGltZSB8fCBjYi0+Y250ID09IDApIHsKKwkJaWYgKGNiLT5tc2cpCisJCQkqY2ItPm1zZyA9IHhzdHJkdXAobWVzc2FnZSk7CisJCWlmIChjYi0+Y3V0b2ZmX3RpbWUpCisJCQkqY2ItPmN1dG9mZl90aW1lID0gdGltZXN0YW1wOworCQlpZiAoY2ItPmN1dG9mZl90eikKKwkJCSpjYi0+Y3V0b2ZmX3R6ID0gdHo7CisJCWlmIChjYi0+Y3V0b2ZmX2NudCkKKwkJCSpjYi0+Y3V0b2ZmX2NudCA9IGNiLT5yZWNjbnQgLSAxOworCQkvKgorCQkgKiB3ZSBoYXZlIG5vdCB5ZXQgdXBkYXRlZCBjYi0+W258b11vaWQgc28gdGhleSBzdGlsbAorCQkgKiBob2xkIHRoZSB2YWx1ZXMgZm9yIHRoZSBwcmV2aW91cyByZWNvcmQuCisJCSAqLworCQlpZiAoIWlzX251bGxfb2lkKCZjYi0+b29pZCkpIHsKKwkJCW9pZGNweShjYi0+b2lkLCBub2lkKTsKKwkJCWlmICghb2lkZXEoJmNiLT5vb2lkLCBub2lkKSkKKwkJCQl3YXJuaW5nKF8oImxvZyBmb3IgcmVmICVzIGhhcyBnYXAgYWZ0ZXIgJXMiKSwKKwkJCQkJY2ItPnJlZm5hbWUsIHNob3dfZGF0ZShjYi0+ZGF0ZSwgY2ItPnR6LCBEQVRFX01PREUoUkZDMjgyMikpKTsKKwkJfQorCQllbHNlIGlmIChjYi0+ZGF0ZSA9PSBjYi0+YXRfdGltZSkKKwkJCW9pZGNweShjYi0+b2lkLCBub2lkKTsKKwkJZWxzZSBpZiAoIW9pZGVxKG5vaWQsIGNiLT5vaWQpKQorCQkJd2FybmluZyhfKCJsb2cgZm9yIHJlZiAlcyB1bmV4cGVjdGVkbHkgZW5kZWQgb24gJXMiKSwKKwkJCQljYi0+cmVmbmFtZSwgc2hvd19kYXRlKGNiLT5kYXRlLCBjYi0+dHosCisJCQkJCQkgICAgICAgREFURV9NT0RFKFJGQzI4MjIpKSk7CisJCW9pZGNweSgmY2ItPm9vaWQsIG9vaWQpOworCQlvaWRjcHkoJmNiLT5ub2lkLCBub2lkKTsKKwkJY2ItPmZvdW5kX2l0ID0gMTsKKwkJcmV0dXJuIDE7CisJfQorCW9pZGNweSgmY2ItPm9vaWQsIG9vaWQpOworCW9pZGNweSgmY2ItPm5vaWQsIG5vaWQpOworCWlmIChjYi0+Y250ID4gMCkKKwkJY2ItPmNudC0tOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfcmVmX2F0X2VudF9vbGRlc3Qoc3RydWN0IG9iamVjdF9pZCAqb29pZCwgc3RydWN0IG9iamVjdF9pZCAqbm9pZCwKKwkJCQkgIGNvbnN0IGNoYXIgKmVtYWlsLCB0aW1lc3RhbXBfdCB0aW1lc3RhbXAsCisJCQkJICBpbnQgdHosIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJlYWRfcmVmX2F0X2NiICpjYiA9IGNiX2RhdGE7CisKKwlpZiAoY2ItPm1zZykKKwkJKmNiLT5tc2cgPSB4c3RyZHVwKG1lc3NhZ2UpOworCWlmIChjYi0+Y3V0b2ZmX3RpbWUpCisJCSpjYi0+Y3V0b2ZmX3RpbWUgPSB0aW1lc3RhbXA7CisJaWYgKGNiLT5jdXRvZmZfdHopCisJCSpjYi0+Y3V0b2ZmX3R6ID0gdHo7CisJaWYgKGNiLT5jdXRvZmZfY250KQorCQkqY2ItPmN1dG9mZl9jbnQgPSBjYi0+cmVjY250OworCW9pZGNweShjYi0+b2lkLCBvb2lkKTsKKwlpZiAoaXNfbnVsbF9vaWQoY2ItPm9pZCkpCisJCW9pZGNweShjYi0+b2lkLCBub2lkKTsKKwkvKiBXZSBqdXN0IHdhbnQgdGhlIGZpcnN0IGVudHJ5ICovCisJcmV0dXJuIDE7Cit9CisKK2ludCByZWFkX3JlZl9hdChzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQl1bnNpZ25lZCBpbnQgZmxhZ3MsIHRpbWVzdGFtcF90IGF0X3RpbWUsIGludCBjbnQsCisJCXN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY2hhciAqKm1zZywKKwkJdGltZXN0YW1wX3QgKmN1dG9mZl90aW1lLCBpbnQgKmN1dG9mZl90eiwgaW50ICpjdXRvZmZfY250KQoreworCXN0cnVjdCByZWFkX3JlZl9hdF9jYiBjYjsKKworCW1lbXNldCgmY2IsIDAsIHNpemVvZihjYikpOworCWNiLnJlZm5hbWUgPSByZWZuYW1lOworCWNiLmF0X3RpbWUgPSBhdF90aW1lOworCWNiLmNudCA9IGNudDsKKwljYi5tc2cgPSBtc2c7CisJY2IuY3V0b2ZmX3RpbWUgPSBjdXRvZmZfdGltZTsKKwljYi5jdXRvZmZfdHogPSBjdXRvZmZfdHo7CisJY2IuY3V0b2ZmX2NudCA9IGN1dG9mZl9jbnQ7CisJY2Iub2lkID0gb2lkOworCisJcmVmc19mb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2UocmVmcywgcmVmbmFtZSwgcmVhZF9yZWZfYXRfZW50LCAmY2IpOworCisJaWYgKCFjYi5yZWNjbnQpIHsKKwkJaWYgKGZsYWdzICYgR0VUX09JRF9RVUlFVExZKQorCQkJZXhpdCgxMjgpOworCQllbHNlCisJCQlkaWUoXygibG9nIGZvciAlcyBpcyBlbXB0eSIpLCByZWZuYW1lKTsKKwl9CisJaWYgKGNiLmZvdW5kX2l0KQorCQlyZXR1cm4gMDsKKworCXJlZnNfZm9yX2VhY2hfcmVmbG9nX2VudChyZWZzLCByZWZuYW1lLCByZWFkX3JlZl9hdF9lbnRfb2xkZXN0LCAmY2IpOworCisJcmV0dXJuIDE7Cit9CisKK3N0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnJlZl9zdG9yZV90cmFuc2FjdGlvbl9iZWdpbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJCQkJICAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cjsKKwlhc3NlcnQoZXJyKTsKKworCXRyID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlZl90cmFuc2FjdGlvbikpOworCXRyLT5yZWZfc3RvcmUgPSByZWZzOworCXJldHVybiB0cjsKK30KKworc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqcmVmX3RyYW5zYWN0aW9uX2JlZ2luKHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlyZXR1cm4gcmVmX3N0b3JlX3RyYW5zYWN0aW9uX2JlZ2luKGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksIGVycik7Cit9CisKK3ZvaWQgcmVmX3RyYW5zYWN0aW9uX2ZyZWUoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24pCit7CisJc2l6ZV90IGk7CisKKwlpZiAoIXRyYW5zYWN0aW9uKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHRyYW5zYWN0aW9uLT5zdGF0ZSkgeworCWNhc2UgUkVGX1RSQU5TQUNUSU9OX09QRU46CisJY2FzZSBSRUZfVFJBTlNBQ1RJT05fQ0xPU0VEOgorCQkvKiBPSyAqLworCQlicmVhazsKKwljYXNlIFJFRl9UUkFOU0FDVElPTl9QUkVQQVJFRDoKKwkJQlVHKCJmcmVlIGNhbGxlZCBvbiBhIHByZXBhcmVkIHJlZmVyZW5jZSB0cmFuc2FjdGlvbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoInVuZXhwZWN0ZWQgcmVmZXJlbmNlIHRyYW5zYWN0aW9uIHN0YXRlIik7CisJCWJyZWFrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB0cmFuc2FjdGlvbi0+bnI7IGkrKykgeworCQlmcmVlKHRyYW5zYWN0aW9uLT51cGRhdGVzW2ldLT5tc2cpOworCQlmcmVlKHRyYW5zYWN0aW9uLT51cGRhdGVzW2ldKTsKKwl9CisJZnJlZSh0cmFuc2FjdGlvbi0+dXBkYXRlcyk7CisJZnJlZSh0cmFuc2FjdGlvbik7Cit9CisKK3N0cnVjdCByZWZfdXBkYXRlICpyZWZfdHJhbnNhY3Rpb25fYWRkX3VwZGF0ZSgKKwkJc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCWNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGludCBmbGFncywKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCwKKwkJY29uc3QgY2hhciAqbXNnKQoreworCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGU7CisKKwlpZiAodHJhbnNhY3Rpb24tPnN0YXRlICE9IFJFRl9UUkFOU0FDVElPTl9PUEVOKQorCQlCVUcoInVwZGF0ZSBjYWxsZWQgZm9yIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90IG9wZW4iKTsKKworCUZMRVhfQUxMT0NfU1RSKHVwZGF0ZSwgcmVmbmFtZSwgcmVmbmFtZSk7CisJQUxMT0NfR1JPVyh0cmFuc2FjdGlvbi0+dXBkYXRlcywgdHJhbnNhY3Rpb24tPm5yICsgMSwgdHJhbnNhY3Rpb24tPmFsbG9jKTsKKwl0cmFuc2FjdGlvbi0+dXBkYXRlc1t0cmFuc2FjdGlvbi0+bnIrK10gPSB1cGRhdGU7CisKKwl1cGRhdGUtPmZsYWdzID0gZmxhZ3M7CisKKwlpZiAoZmxhZ3MgJiBSRUZfSEFWRV9ORVcpCisJCW9pZGNweSgmdXBkYXRlLT5uZXdfb2lkLCBuZXdfb2lkKTsKKwlpZiAoZmxhZ3MgJiBSRUZfSEFWRV9PTEQpCisJCW9pZGNweSgmdXBkYXRlLT5vbGRfb2lkLCBvbGRfb2lkKTsKKwl1cGRhdGUtPm1zZyA9IHhzdHJkdXBfb3JfbnVsbChtc2cpOworCXJldHVybiB1cGRhdGU7Cit9CisKK2ludCByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICptc2csCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJYXNzZXJ0KGVycik7CisKKwlpZiAoKG5ld19vaWQgJiYgIWlzX251bGxfb2lkKG5ld19vaWQpKSA/CisJICAgIGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJlZm5hbWUsIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwpIDoKKwkgICAgIXJlZm5hbWVfaXNfc2FmZShyZWZuYW1lKSkgeworCQlzdHJidWZfYWRkZihlcnIsIF8oInJlZnVzaW5nIHRvIHVwZGF0ZSByZWYgd2l0aCBiYWQgbmFtZSAnJXMnIiksCisJCQkgICAgcmVmbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoZmxhZ3MgJiB+UkVGX1RSQU5TQUNUSU9OX1VQREFURV9BTExPV0VEX0ZMQUdTKQorCQlCVUcoImlsbGVnYWwgZmxhZ3MgMHgleCBwYXNzZWQgdG8gcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSgpIiwgZmxhZ3MpOworCisJZmxhZ3MgfD0gKG5ld19vaWQgPyBSRUZfSEFWRV9ORVcgOiAwKSB8IChvbGRfb2lkID8gUkVGX0hBVkVfT0xEIDogMCk7CisKKwlyZWZfdHJhbnNhY3Rpb25fYWRkX3VwZGF0ZSh0cmFuc2FjdGlvbiwgcmVmbmFtZSwgZmxhZ3MsCisJCQkJICAgbmV3X29pZCwgb2xkX29pZCwgbXNnKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHJlZl90cmFuc2FjdGlvbl9jcmVhdGUoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwKKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgY29uc3QgY2hhciAqbXNnLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWlmICghbmV3X29pZCB8fCBpc19udWxsX29pZChuZXdfb2lkKSkKKwkJQlVHKCJjcmVhdGUgY2FsbGVkIHdpdGhvdXQgdmFsaWQgbmV3X29pZCIpOworCXJldHVybiByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCByZWZuYW1lLCBuZXdfb2lkLAorCQkJCSAgICAgICZudWxsX29pZCwgZmxhZ3MsIG1zZywgZXJyKTsKK30KKworaW50IHJlZl90cmFuc2FjdGlvbl9kZWxldGUoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCwKKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgY29uc3QgY2hhciAqbXNnLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWlmIChvbGRfb2lkICYmIGlzX251bGxfb2lkKG9sZF9vaWQpKQorCQlCVUcoImRlbGV0ZSBjYWxsZWQgd2l0aCBvbGRfb2lkIHNldCB0byB6ZXJvcyIpOworCXJldHVybiByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCByZWZuYW1lLAorCQkJCSAgICAgICZudWxsX29pZCwgb2xkX29pZCwKKwkJCQkgICAgICBmbGFncywgbXNnLCBlcnIpOworfQorCitpbnQgcmVmX3RyYW5zYWN0aW9uX3ZlcmlmeShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWlmICghb2xkX29pZCkKKwkJQlVHKCJ2ZXJpZnkgY2FsbGVkIHdpdGggb2xkX29pZCBzZXQgdG8gTlVMTCIpOworCXJldHVybiByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCByZWZuYW1lLAorCQkJCSAgICAgIE5VTEwsIG9sZF9vaWQsCisJCQkJICAgICAgZmxhZ3MsIE5VTEwsIGVycik7Cit9CisKK2ludCByZWZzX3VwZGF0ZV9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqbXNnLAorCQkgICAgY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwKKwkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsIHVuc2lnbmVkIGludCBmbGFncywKKwkJICAgIGVudW0gYWN0aW9uX29uX2VyciBvbmVycikKK3sKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0ID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAwOworCisJaWYgKHJlZl90eXBlKHJlZm5hbWUpID09IFJFRl9UWVBFX1BTRVVET1JFRikgeworCQlhc3NlcnQocmVmcyA9PSBnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpKTsKKwkJcmV0ID0gd3JpdGVfcHNldWRvcmVmKHJlZm5hbWUsIG5ld19vaWQsIG9sZF9vaWQsICZlcnIpOworCX0gZWxzZSB7CisJCXQgPSByZWZfc3RvcmVfdHJhbnNhY3Rpb25fYmVnaW4ocmVmcywgJmVycik7CisJCWlmICghdCB8fAorCQkgICAgcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSh0LCByZWZuYW1lLCBuZXdfb2lkLCBvbGRfb2lkLAorCQkJCQkgICBmbGFncywgbXNnLCAmZXJyKSB8fAorCQkgICAgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0LCAmZXJyKSkgeworCQkJcmV0ID0gMTsKKwkJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHQpOworCQl9CisJfQorCWlmIChyZXQpIHsKKwkJY29uc3QgY2hhciAqc3RyID0gXygidXBkYXRlX3JlZiBmYWlsZWQgZm9yIHJlZiAnJXMnOiAlcyIpOworCisJCXN3aXRjaCAob25lcnIpIHsKKwkJY2FzZSBVUERBVEVfUkVGU19NU0dfT05fRVJSOgorCQkJZXJyb3Ioc3RyLCByZWZuYW1lLCBlcnIuYnVmKTsKKwkJCWJyZWFrOworCQljYXNlIFVQREFURV9SRUZTX0RJRV9PTl9FUlI6CisJCQlkaWUoc3RyLCByZWZuYW1lLCBlcnIuYnVmKTsKKwkJCWJyZWFrOworCQljYXNlIFVQREFURV9SRUZTX1FVSUVUX09OX0VSUjoKKwkJCWJyZWFrOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQlyZXR1cm4gMTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJaWYgKHQpCisJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHQpOworCXJldHVybiAwOworfQorCitpbnQgdXBkYXRlX3JlZihjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsCisJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgZW51bSBhY3Rpb25fb25fZXJyIG9uZXJyKQoreworCXJldHVybiByZWZzX3VwZGF0ZV9yZWYoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwgbXNnLCByZWZuYW1lLCBuZXdfb2lkLAorCQkJICAgICAgIG9sZF9vaWQsIGZsYWdzLCBvbmVycik7Cit9CisKK2NoYXIgKnJlZnNfc2hvcnRlbl91bmFtYmlndW91c19yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCQkgICBjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgc3RyaWN0KQoreworCWludCBpOworCXN0YXRpYyBjaGFyICoqc2NhbmZfZm10czsKKwlzdGF0aWMgaW50IG5yX3J1bGVzOworCWNoYXIgKnNob3J0X25hbWU7CisJc3RydWN0IHN0cmJ1ZiByZXNvbHZlZF9idWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghbnJfcnVsZXMpIHsKKwkJLyoKKwkJICogUHJlLWdlbmVyYXRlIHNjYW5mIGZvcm1hdHMgZnJvbSByZWZfcmV2X3BhcnNlX3J1bGVzW10uCisJCSAqIEdlbmVyYXRlIGEgZm9ybWF0IHN1aXRhYmxlIGZvciBzY2FuZiBmcm9tIGEKKwkJICogcmVmX3Jldl9wYXJzZV9ydWxlcyBydWxlIGJ5IGludGVycG9sYXRpbmcgIiVzIiBhdCB0aGUKKwkJICogbG9jYXRpb24gb2YgdGhlICIlLipzIi4KKwkJICovCisJCXNpemVfdCB0b3RhbF9sZW4gPSAwOworCQlzaXplX3Qgb2Zmc2V0ID0gMDsKKworCQkvKiB0aGUgcnVsZSBsaXN0IGlzIE5VTEwgdGVybWluYXRlZCwgY291bnQgdGhlbSBmaXJzdCAqLworCQlmb3IgKG5yX3J1bGVzID0gMDsgcmVmX3Jldl9wYXJzZV9ydWxlc1tucl9ydWxlc107IG5yX3J1bGVzKyspCisJCQkvKiAtMiBmb3Igc3RybGVuKCIlLipzIikgLSBzdHJsZW4oIiVzIik7ICsxIGZvciBOVUwgKi8KKwkJCXRvdGFsX2xlbiArPSBzdHJsZW4ocmVmX3Jldl9wYXJzZV9ydWxlc1tucl9ydWxlc10pIC0gMiArIDE7CisKKwkJc2NhbmZfZm10cyA9IHhtYWxsb2Moc3RfYWRkKHN0X211bHQoc2l6ZW9mKGNoYXIgKiksIG5yX3J1bGVzKSwgdG90YWxfbGVuKSk7CisKKwkJb2Zmc2V0ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG5yX3J1bGVzOyBpKyspIHsKKwkJCWFzc2VydChvZmZzZXQgPCB0b3RhbF9sZW4pOworCQkJc2NhbmZfZm10c1tpXSA9IChjaGFyICopJnNjYW5mX2ZtdHNbbnJfcnVsZXNdICsgb2Zmc2V0OworCQkJb2Zmc2V0ICs9IHhzbnByaW50ZihzY2FuZl9mbXRzW2ldLCB0b3RhbF9sZW4gLSBvZmZzZXQsCisJCQkJCSAgICByZWZfcmV2X3BhcnNlX3J1bGVzW2ldLCAyLCAiJXMiKSArIDE7CisJCX0KKwl9CisKKwkvKiBiYWlsIG91dCBpZiB0aGVyZSBhcmUgbm8gcnVsZXMgKi8KKwlpZiAoIW5yX3J1bGVzKQorCQlyZXR1cm4geHN0cmR1cChyZWZuYW1lKTsKKworCS8qIGJ1ZmZlciBmb3Igc2NhbmYgcmVzdWx0LCBhdCBtb3N0IHJlZm5hbWUgbXVzdCBmaXQgKi8KKwlzaG9ydF9uYW1lID0geHN0cmR1cChyZWZuYW1lKTsKKworCS8qIHNraXAgZmlyc3QgcnVsZSwgaXQgd2lsbCBhbHdheXMgbWF0Y2ggKi8KKwlmb3IgKGkgPSBucl9ydWxlcyAtIDE7IGkgPiAwIDsgLS1pKSB7CisJCWludCBqOworCQlpbnQgcnVsZXNfdG9fZmFpbCA9IGk7CisJCWludCBzaG9ydF9uYW1lX2xlbjsKKworCQlpZiAoMSAhPSBzc2NhbmYocmVmbmFtZSwgc2NhbmZfZm10c1tpXSwgc2hvcnRfbmFtZSkpCisJCQljb250aW51ZTsKKworCQlzaG9ydF9uYW1lX2xlbiA9IHN0cmxlbihzaG9ydF9uYW1lKTsKKworCQkvKgorCQkgKiBpbiBzdHJpY3QgbW9kZSwgYWxsIChleGNlcHQgdGhlIG1hdGNoZWQgb25lKSBydWxlcworCQkgKiBtdXN0IGZhaWwgdG8gcmVzb2x2ZSB0byBhIHZhbGlkIG5vbi1hbWJpZ3VvdXMgcmVmCisJCSAqLworCQlpZiAoc3RyaWN0KQorCQkJcnVsZXNfdG9fZmFpbCA9IG5yX3J1bGVzOworCisJCS8qCisJCSAqIGNoZWNrIGlmIHRoZSBzaG9ydCBuYW1lIHJlc29sdmVzIHRvIGEgdmFsaWQgcmVmLAorCQkgKiBidXQgdXNlIG9ubHkgcnVsZXMgcHJpb3IgdG8gdGhlIG1hdGNoZWQgb25lCisJCSAqLworCQlmb3IgKGogPSAwOyBqIDwgcnVsZXNfdG9fZmFpbDsgaisrKSB7CisJCQljb25zdCBjaGFyICpydWxlID0gcmVmX3Jldl9wYXJzZV9ydWxlc1tqXTsKKworCQkJLyogc2tpcCBtYXRjaGVkIHJ1bGUgKi8KKwkJCWlmIChpID09IGopCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiB0aGUgc2hvcnQgbmFtZSBpcyBhbWJpZ3VvdXMsIGlmIGl0IHJlc29sdmVzCisJCQkgKiAod2l0aCB0aGlzIHByZXZpb3VzIHJ1bGUpIHRvIGEgdmFsaWQgcmVmCisJCQkgKiByZWFkX3JlZigpIHJldHVybnMgMCBvbiBzdWNjZXNzCisJCQkgKi8KKwkJCXN0cmJ1Zl9yZXNldCgmcmVzb2x2ZWRfYnVmKTsKKwkJCXN0cmJ1Zl9hZGRmKCZyZXNvbHZlZF9idWYsIHJ1bGUsCisJCQkJICAgIHNob3J0X25hbWVfbGVuLCBzaG9ydF9uYW1lKTsKKwkJCWlmIChyZWZzX3JlZl9leGlzdHMocmVmcywgcmVzb2x2ZWRfYnVmLmJ1ZikpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBzaG9ydCBuYW1lIGlzIG5vbi1hbWJpZ3VvdXMgaWYgYWxsIHByZXZpb3VzIHJ1bGVzCisJCSAqIGhhdmVuJ3QgcmVzb2x2ZWQgdG8gYSB2YWxpZCByZWYKKwkJICovCisJCWlmIChqID09IHJ1bGVzX3RvX2ZhaWwpIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZyZXNvbHZlZF9idWYpOworCQkJcmV0dXJuIHNob3J0X25hbWU7CisJCX0KKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmcmVzb2x2ZWRfYnVmKTsKKwlmcmVlKHNob3J0X25hbWUpOworCXJldHVybiB4c3RyZHVwKHJlZm5hbWUpOworfQorCitjaGFyICpzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgc3RyaWN0KQoreworCXJldHVybiByZWZzX3Nob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksCisJCQkJCSAgICByZWZuYW1lLCBzdHJpY3QpOworfQorCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0ICpoaWRlX3JlZnM7CisKK2ludCBwYXJzZV9oaWRlX3JlZnNfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IGNoYXIgKnNlY3Rpb24pCit7CisJY29uc3QgY2hhciAqa2V5OworCWlmICghc3RyY21wKCJ0cmFuc2Zlci5oaWRlcmVmcyIsIHZhcikgfHwKKwkgICAgKCFwYXJzZV9jb25maWdfa2V5KHZhciwgc2VjdGlvbiwgTlVMTCwgTlVMTCwgJmtleSkgJiYKKwkgICAgICFzdHJjbXAoa2V5LCAiaGlkZXJlZnMiKSkpIHsKKwkJY2hhciAqcmVmOworCQlpbnQgbGVuOworCisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcmVmID0geHN0cmR1cCh2YWx1ZSk7CisJCWxlbiA9IHN0cmxlbihyZWYpOworCQl3aGlsZSAobGVuICYmIHJlZltsZW4gLSAxXSA9PSAnLycpCisJCQlyZWZbLS1sZW5dID0gJ1wwJzsKKwkJaWYgKCFoaWRlX3JlZnMpIHsKKwkJCWhpZGVfcmVmcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpoaWRlX3JlZnMpKTsKKwkJCWhpZGVfcmVmcy0+c3RyZHVwX3N0cmluZ3MgPSAxOworCQl9CisJCXN0cmluZ19saXN0X2FwcGVuZChoaWRlX3JlZnMsIHJlZik7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcmVmX2lzX2hpZGRlbihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBjaGFyICpyZWZuYW1lX2Z1bGwpCit7CisJaW50IGk7CisKKwlpZiAoIWhpZGVfcmVmcykKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gaGlkZV9yZWZzLT5uciAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWNvbnN0IGNoYXIgKm1hdGNoID0gaGlkZV9yZWZzLT5pdGVtc1tpXS5zdHJpbmc7CisJCWNvbnN0IGNoYXIgKnN1YmplY3Q7CisJCWludCBuZWcgPSAwOworCQljb25zdCBjaGFyICpwOworCisJCWlmICgqbWF0Y2ggPT0gJyEnKSB7CisJCQluZWcgPSAxOworCQkJbWF0Y2grKzsKKwkJfQorCisJCWlmICgqbWF0Y2ggPT0gJ14nKSB7CisJCQlzdWJqZWN0ID0gcmVmbmFtZV9mdWxsOworCQkJbWF0Y2grKzsKKwkJfSBlbHNlIHsKKwkJCXN1YmplY3QgPSByZWZuYW1lOworCQl9CisKKwkJLyogcmVmbmFtZSBjYW4gYmUgTlVMTCB3aGVuIG5hbWVzcGFjZXMgYXJlIHVzZWQuICovCisJCWlmIChzdWJqZWN0ICYmCisJCSAgICBza2lwX3ByZWZpeChzdWJqZWN0LCBtYXRjaCwgJnApICYmCisJCSAgICAoISpwIHx8ICpwID09ICcvJykpCisJCQlyZXR1cm4gIW5lZzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKmZpbmRfZGVzY2VuZGFudF9yZWYoY29uc3QgY2hhciAqZGlybmFtZSwKKwkJCQljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmV4dHJhcywKKwkJCQljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnNraXApCit7CisJaW50IHBvczsKKworCWlmICghZXh0cmFzKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogTG9vayBhdCB0aGUgcGxhY2Ugd2hlcmUgZGlybmFtZSB3b3VsZCBiZSBpbnNlcnRlZCBpbnRvCisJICogZXh0cmFzLiBJZiB0aGVyZSBpcyBhbiBlbnRyeSBhdCB0aGF0IHBvc2l0aW9uIHRoYXQgc3RhcnRzCisJICogd2l0aCBkaXJuYW1lIChyZW1lbWJlciwgZGlybmFtZSBpbmNsdWRlcyB0aGUgdHJhaWxpbmcKKwkgKiBzbGFzaCkgYW5kIGlzIG5vdCBpbiBza2lwLCB0aGVuIHdlIGhhdmUgYSBjb25mbGljdC4KKwkgKi8KKwlmb3IgKHBvcyA9IHN0cmluZ19saXN0X2ZpbmRfaW5zZXJ0X2luZGV4KGV4dHJhcywgZGlybmFtZSwgMCk7CisJICAgICBwb3MgPCBleHRyYXMtPm5yOyBwb3MrKykgeworCQljb25zdCBjaGFyICpleHRyYV9yZWZuYW1lID0gZXh0cmFzLT5pdGVtc1twb3NdLnN0cmluZzsKKworCQlpZiAoIXN0YXJ0c193aXRoKGV4dHJhX3JlZm5hbWUsIGRpcm5hbWUpKQorCQkJYnJlYWs7CisKKwkJaWYgKCFza2lwIHx8ICFzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKHNraXAsIGV4dHJhX3JlZm5hbWUpKQorCQkJcmV0dXJuIGV4dHJhX3JlZm5hbWU7CisJfQorCXJldHVybiBOVUxMOworfQorCitpbnQgcmVmc19yZW5hbWVfcmVmX2F2YWlsYWJsZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJICAgICAgY29uc3QgY2hhciAqb2xkX3JlZm5hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpuZXdfcmVmbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc2tpcCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgb2s7CisKKwlzdHJpbmdfbGlzdF9pbnNlcnQoJnNraXAsIG9sZF9yZWZuYW1lKTsKKwlvayA9ICFyZWZzX3ZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZShyZWZzLCBuZXdfcmVmbmFtZSwKKwkJCQkJICAgIE5VTEwsICZza2lwLCAmZXJyKTsKKwlpZiAoIW9rKQorCQllcnJvcigiJXMiLCBlcnIuYnVmKTsKKworCXN0cmluZ19saXN0X2NsZWFyKCZza2lwLCAwKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlyZXR1cm4gb2s7Cit9CisKK2ludCByZWZzX2hlYWRfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBmbGFnOworCisJaWYgKCFyZWZzX3JlYWRfcmVmX2Z1bGwocmVmcywgIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCSZvaWQsICZmbGFnKSkKKwkJcmV0dXJuIGZuKCJIRUFEIiwgJm9pZCwgZmxhZywgY2JfZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGhlYWRfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiByZWZzX2hlYWRfcmVmKGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksIGZuLCBjYl9kYXRhKTsKK30KKworc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmc19yZWZfaXRlcmF0b3JfYmVnaW4oCisJCXN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCWNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHRyaW0sIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyOworCisJaWYgKHJlZl9wYXJhbm9pYSA8IDApCisJCXJlZl9wYXJhbm9pYSA9IGdpdF9lbnZfYm9vbCgiR0lUX1JFRl9QQVJBTk9JQSIsIDApOworCWlmIChyZWZfcGFyYW5vaWEpCisJCWZsYWdzIHw9IERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOOworCisJaXRlciA9IHJlZnMtPmJlLT5pdGVyYXRvcl9iZWdpbihyZWZzLCBwcmVmaXgsIGZsYWdzKTsKKworCS8qCisJICogYGl0ZXJhdG9yX2JlZ2luKClgIGFscmVhZHkgdGFrZXMgY2FyZSBvZiBwcmVmaXgsIGJ1dCB3ZQorCSAqIG1pZ2h0IG5lZWQgdG8gZG8gc29tZSB0cmltbWluZzoKKwkgKi8KKwlpZiAodHJpbSkKKwkJaXRlciA9IHByZWZpeF9yZWZfaXRlcmF0b3JfYmVnaW4oaXRlciwgIiIsIHRyaW0pOworCisJLyogU2FuaXR5IGNoZWNrIGZvciBzdWJjbGFzc2VzOiAqLworCWlmICghaXRlci0+b3JkZXJlZCkKKwkJQlVHKCJyZWZlcmVuY2UgaXRlcmF0b3IgaXMgbm90IG9yZGVyZWQiKTsKKworCXJldHVybiBpdGVyOworfQorCisvKgorICogQ2FsbCBmbiBmb3IgZWFjaCByZWZlcmVuY2UgaW4gdGhlIHNwZWNpZmllZCBzdWJtb2R1bGUgZm9yIHdoaWNoIHRoZQorICogcmVmbmFtZSBiZWdpbnMgd2l0aCBwcmVmaXguIElmIHRyaW0gaXMgbm9uLXplcm8sIHRoZW4gdHJpbSB0aGF0CisgKiBtYW55IGNoYXJhY3RlcnMgb2ZmIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCByZWZuYW1lIGJlZm9yZSBwYXNzaW5nCisgKiB0aGUgcmVmbmFtZSB0byBmbi4gZmxhZ3MgY2FuIGJlIERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOIHRvCisgKiBpbmNsdWRlIGJyb2tlbiByZWZlcmVuY2VzIGluIHRoZSBpdGVyYXRpb24uIElmIGZuIGV2ZXIgcmV0dXJucyBhCisgKiBub24temVybyB2YWx1ZSwgc3RvcCB0aGUgaXRlcmF0aW9uIGFuZCByZXR1cm4gdGhhdCB2YWx1ZTsKKyAqIG90aGVyd2lzZSwgcmV0dXJuIDAuCisgKi8KK3N0YXRpYyBpbnQgZG9fZm9yX2VhY2hfcmVwb19yZWYoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQllYWNoX3JlcG9fcmVmX2ZuIGZuLCBpbnQgdHJpbSwgaW50IGZsYWdzLAorCQkJCXZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcjsKKwlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzID0gZ2V0X21haW5fcmVmX3N0b3JlKHIpOworCisJaWYgKCFyZWZzKQorCQlyZXR1cm4gMDsKKworCWl0ZXIgPSByZWZzX3JlZl9pdGVyYXRvcl9iZWdpbihyZWZzLCBwcmVmaXgsIHRyaW0sIGZsYWdzKTsKKworCXJldHVybiBkb19mb3JfZWFjaF9yZXBvX3JlZl9pdGVyYXRvcihyLCBpdGVyLCBmbiwgY2JfZGF0YSk7Cit9CisKK3N0cnVjdCBkb19mb3JfZWFjaF9yZWZfaGVscCB7CisJZWFjaF9yZWZfZm4gKmZuOworCXZvaWQgKmNiX2RhdGE7Cit9OworCitzdGF0aWMgaW50IGRvX2Zvcl9lYWNoX3JlZl9oZWxwZXIoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgaW50IGZsYWdzLAorCQkJCSAgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgZG9fZm9yX2VhY2hfcmVmX2hlbHAgKmhwID0gY2JfZGF0YTsKKworCXJldHVybiBocC0+Zm4ocmVmbmFtZSwgb2lkLCBmbGFncywgaHAtPmNiX2RhdGEpOworfQorCitzdGF0aWMgaW50IGRvX2Zvcl9lYWNoX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICBlYWNoX3JlZl9mbiBmbiwgaW50IHRyaW0sIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyOworCXN0cnVjdCBkb19mb3JfZWFjaF9yZWZfaGVscCBocCA9IHsgZm4sIGNiX2RhdGEgfTsKKworCWlmICghcmVmcykKKwkJcmV0dXJuIDA7CisKKwlpdGVyID0gcmVmc19yZWZfaXRlcmF0b3JfYmVnaW4ocmVmcywgcHJlZml4LCB0cmltLCBmbGFncyk7CisKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVwb19yZWZfaXRlcmF0b3IodGhlX3JlcG9zaXRvcnksIGl0ZXIsCisJCQkJCWRvX2Zvcl9lYWNoX3JlZl9oZWxwZXIsICZocCk7Cit9CisKK2ludCByZWZzX2Zvcl9lYWNoX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKHJlZnMsICIiLCBmbiwgMCwgMCwgY2JfZGF0YSk7Cit9CisKK2ludCBmb3JfZWFjaF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIHJlZnNfZm9yX2VhY2hfcmVmKGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksIGZuLCBjYl9kYXRhKTsKK30KKworaW50IHJlZnNfZm9yX2VhY2hfcmVmX2luKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKHJlZnMsIHByZWZpeCwgZm4sIHN0cmxlbihwcmVmaXgpLCAwLCBjYl9kYXRhKTsKK30KKworaW50IGZvcl9lYWNoX3JlZl9pbihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiByZWZzX2Zvcl9lYWNoX3JlZl9pbihnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLCBwcmVmaXgsIGZuLCBjYl9kYXRhKTsKK30KKworaW50IGZvcl9lYWNoX2Z1bGxyZWZfaW4oY29uc3QgY2hhciAqcHJlZml4LCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSwgdW5zaWduZWQgaW50IGJyb2tlbikKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZyA9IDA7CisKKwlpZiAoYnJva2VuKQorCQlmbGFnID0gRE9fRk9SX0VBQ0hfSU5DTFVERV9CUk9LRU47CisJcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZihnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLAorCQkJICAgICAgIHByZWZpeCwgZm4sIDAsIGZsYWcsIGNiX2RhdGEpOworfQorCitpbnQgcmVmc19mb3JfZWFjaF9mdWxscmVmX2luKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEsCisJCQkgICAgIHVuc2lnbmVkIGludCBicm9rZW4pCit7CisJdW5zaWduZWQgaW50IGZsYWcgPSAwOworCisJaWYgKGJyb2tlbikKKwkJZmxhZyA9IERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOOworCXJldHVybiBkb19mb3JfZWFjaF9yZWYocmVmcywgcHJlZml4LCBmbiwgMCwgZmxhZywgY2JfZGF0YSk7Cit9CisKK2ludCBmb3JfZWFjaF9yZXBsYWNlX3JlZihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgZWFjaF9yZXBvX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVwb19yZWYociwgZ2l0X3JlcGxhY2VfcmVmX2Jhc2UsIGZuLAorCQkJCSAgICBzdHJsZW4oZ2l0X3JlcGxhY2VfcmVmX2Jhc2UpLAorCQkJCSAgICBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTiwgY2JfZGF0YSk7Cit9CisKK2ludCBmb3JfZWFjaF9uYW1lc3BhY2VkX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXQ7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzcmVmcy8iLCBnZXRfZ2l0X25hbWVzcGFjZSgpKTsKKwlyZXQgPSBkb19mb3JfZWFjaF9yZWYoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwKKwkJCSAgICAgIGJ1Zi5idWYsIGZuLCAwLCAwLCBjYl9kYXRhKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmVmc19mb3JfZWFjaF9yYXdyZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZihyZWZzLCAiIiwgZm4sIDAsCisJCQkgICAgICAgRE9fRk9SX0VBQ0hfSU5DTFVERV9CUk9LRU4sIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfcmF3cmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiByZWZzX2Zvcl9lYWNoX3Jhd3JlZihnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLCBmbiwgY2JfZGF0YSk7Cit9CisKK2ludCByZWZzX3JlYWRfcmF3X3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCSAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgc3RydWN0IHN0cmJ1ZiAqcmVmZXJlbnQsIHVuc2lnbmVkIGludCAqdHlwZSkKK3sKKwlyZXR1cm4gcmVmX3N0b3JlLT5iZS0+cmVhZF9yYXdfcmVmKHJlZl9zdG9yZSwgcmVmbmFtZSwgb2lkLCByZWZlcmVudCwgdHlwZSk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGEgbWVhbmluZ2Z1bCBlcnJubyBvbiBmYWlsdXJlICovCitjb25zdCBjaGFyICpyZWZzX3Jlc29sdmVfcmVmX3Vuc2FmZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJCSAgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCSAgICBpbnQgcmVzb2x2ZV9mbGFncywKKwkJCQkgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgKmZsYWdzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHNiX3JlZm5hbWUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHVudXNlZF9vaWQ7CisJaW50IHVudXNlZF9mbGFnczsKKwlpbnQgc3ltcmVmX2NvdW50OworCisJaWYgKCFvaWQpCisJCW9pZCA9ICZ1bnVzZWRfb2lkOworCWlmICghZmxhZ3MpCisJCWZsYWdzID0gJnVudXNlZF9mbGFnczsKKworCSpmbGFncyA9IDA7CisKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVmbmFtZSwgUkVGTkFNRV9BTExPV19PTkVMRVZFTCkpIHsKKwkJaWYgKCEocmVzb2x2ZV9mbGFncyAmIFJFU09MVkVfUkVGX0FMTE9XX0JBRF9OQU1FKSB8fAorCQkgICAgIXJlZm5hbWVfaXNfc2FmZShyZWZuYW1lKSkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCS8qCisJCSAqIGR3aW1fcmVmKCkgdXNlcyBSRUZfSVNCUk9LRU4gdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbgorCQkgKiBtaXNzaW5nIHJlZnMgYW5kIHJlZnMgdGhhdCB3ZXJlIHByZXNlbnQgYnV0IGludmFsaWQsCisJCSAqIHRvIGNvbXBsYWluIGFib3V0IHRoZSBsYXR0ZXIgdG8gc3RkZXJyLgorCQkgKgorCQkgKiBXZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIHJlZiBleGlzdHMsIHNvIGRvbid0IHNldAorCQkgKiBSRUZfSVNCUk9LRU4geWV0LgorCQkgKi8KKwkJKmZsYWdzIHw9IFJFRl9CQURfTkFNRTsKKwl9CisKKwlmb3IgKHN5bXJlZl9jb3VudCA9IDA7IHN5bXJlZl9jb3VudCA8IFNZTVJFRl9NQVhERVBUSDsgc3ltcmVmX2NvdW50KyspIHsKKwkJdW5zaWduZWQgaW50IHJlYWRfZmxhZ3MgPSAwOworCisJCWlmIChyZWZzX3JlYWRfcmF3X3JlZihyZWZzLCByZWZuYW1lLAorCQkJCSAgICAgIG9pZCwgJnNiX3JlZm5hbWUsICZyZWFkX2ZsYWdzKSkgeworCQkJKmZsYWdzIHw9IHJlYWRfZmxhZ3M7CisKKwkJCS8qIEluIHJlYWRpbmcgbW9kZSwgcmVmcyBtdXN0IGV2ZW50dWFsbHkgcmVzb2x2ZSAqLworCQkJaWYgKHJlc29sdmVfZmxhZ3MgJiBSRVNPTFZFX1JFRl9SRUFESU5HKQorCQkJCXJldHVybiBOVUxMOworCisJCQkvKgorCQkJICogT3RoZXJ3aXNlIGEgbWlzc2luZyByZWYgaXMgT0suIEJ1dCB0aGUgZmlsZXMgYmFja2VuZAorCQkJICogbWF5IHNob3cgZXJyb3JzIGJlc2lkZXMgRU5PRU5UIGlmIHRoZXJlIGFyZQorCQkJICogc2ltaWxhcmx5LW5hbWVkIHJlZnMuCisJCQkgKi8KKwkJCWlmIChlcnJubyAhPSBFTk9FTlQgJiYKKwkJCSAgICBlcnJubyAhPSBFSVNESVIgJiYKKwkJCSAgICBlcnJubyAhPSBFTk9URElSKQorCQkJCXJldHVybiBOVUxMOworCisJCQlvaWRjbHIob2lkKTsKKwkJCWlmICgqZmxhZ3MgJiBSRUZfQkFEX05BTUUpCisJCQkJKmZsYWdzIHw9IFJFRl9JU0JST0tFTjsKKwkJCXJldHVybiByZWZuYW1lOworCQl9CisKKwkJKmZsYWdzIHw9IHJlYWRfZmxhZ3M7CisKKwkJaWYgKCEocmVhZF9mbGFncyAmIFJFRl9JU1NZTVJFRikpIHsKKwkJCWlmICgqZmxhZ3MgJiBSRUZfQkFEX05BTUUpIHsKKwkJCQlvaWRjbHIob2lkKTsKKwkJCQkqZmxhZ3MgfD0gUkVGX0lTQlJPS0VOOworCQkJfQorCQkJcmV0dXJuIHJlZm5hbWU7CisJCX0KKworCQlyZWZuYW1lID0gc2JfcmVmbmFtZS5idWY7CisJCWlmIChyZXNvbHZlX2ZsYWdzICYgUkVTT0xWRV9SRUZfTk9fUkVDVVJTRSkgeworCQkJb2lkY2xyKG9pZCk7CisJCQlyZXR1cm4gcmVmbmFtZTsKKwkJfQorCQlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVmbmFtZSwgUkVGTkFNRV9BTExPV19PTkVMRVZFTCkpIHsKKwkJCWlmICghKHJlc29sdmVfZmxhZ3MgJiBSRVNPTFZFX1JFRl9BTExPV19CQURfTkFNRSkgfHwKKwkJCSAgICAhcmVmbmFtZV9pc19zYWZlKHJlZm5hbWUpKSB7CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisKKwkJCSpmbGFncyB8PSBSRUZfSVNCUk9LRU4gfCBSRUZfQkFEX05BTUU7CisJCX0KKwl9CisKKwllcnJubyA9IEVMT09QOworCXJldHVybiBOVUxMOworfQorCisvKiBiYWNrZW5kIGZ1bmN0aW9ucyAqLworaW50IHJlZnNfaW5pdF9kYihzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHJlZl9zdG9yZSAqcmVmcyA9IGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSk7CisKKwlyZXR1cm4gcmVmcy0+YmUtPmluaXRfZGIocmVmcywgZXJyKTsKK30KKworY29uc3QgY2hhciAqcmVzb2x2ZV9yZWZfdW5zYWZlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCByZXNvbHZlX2ZsYWdzLAorCQkJICAgICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50ICpmbGFncykKK3sKKwlyZXR1cm4gcmVmc19yZXNvbHZlX3JlZl91bnNhZmUoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwgcmVmbmFtZSwKKwkJCQkgICAgICAgcmVzb2x2ZV9mbGFncywgb2lkLCBmbGFncyk7Cit9CisKK2ludCByZXNvbHZlX2dpdGxpbmtfcmVmKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCXN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzOworCWludCBmbGFnczsKKworCXJlZnMgPSBnZXRfc3VibW9kdWxlX3JlZl9zdG9yZShzdWJtb2R1bGUpOworCisJaWYgKCFyZWZzKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIXJlZnNfcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZnMsIHJlZm5hbWUsIDAsIG9pZCwgJmZsYWdzKSB8fAorCSAgICBpc19udWxsX29pZChvaWQpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByZWZfc3RvcmVfaGFzaF9lbnRyeQoreworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKworCXN0cnVjdCByZWZfc3RvcmUgKnJlZnM7CisKKwkvKiBOVUwtdGVybWluYXRlZCBpZGVudGlmaWVyIG9mIHRoZSByZWYgc3RvcmU6ICovCisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIGludCByZWZfc3RvcmVfaGFzaF9jbXAoY29uc3Qgdm9pZCAqdW51c2VkX2NtcF9kYXRhLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVwdHIsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnlfb3Jfa2V5LAorCQkJICAgICAgY29uc3Qgdm9pZCAqa2V5ZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgcmVmX3N0b3JlX2hhc2hfZW50cnkgKmUxLCAqZTI7CisJY29uc3QgY2hhciAqbmFtZTsKKworCWUxID0gY29udGFpbmVyX29mKGVwdHIsIGNvbnN0IHN0cnVjdCByZWZfc3RvcmVfaGFzaF9lbnRyeSwgZW50KTsKKwllMiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIGNvbnN0IHN0cnVjdCByZWZfc3RvcmVfaGFzaF9lbnRyeSwgZW50KTsKKwluYW1lID0ga2V5ZGF0YSA/IGtleWRhdGEgOiBlMi0+bmFtZTsKKworCXJldHVybiBzdHJjbXAoZTEtPm5hbWUsIG5hbWUpOworfQorCitzdGF0aWMgc3RydWN0IHJlZl9zdG9yZV9oYXNoX2VudHJ5ICphbGxvY19yZWZfc3RvcmVfaGFzaF9lbnRyeSgKKwkJY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHJlZl9zdG9yZSAqcmVmcykKK3sKKwlzdHJ1Y3QgcmVmX3N0b3JlX2hhc2hfZW50cnkgKmVudHJ5OworCisJRkxFWF9BTExPQ19TVFIoZW50cnksIG5hbWUsIG5hbWUpOworCWhhc2htYXBfZW50cnlfaW5pdCgmZW50cnktPmVudCwgc3RyaGFzaChuYW1lKSk7CisJZW50cnktPnJlZnMgPSByZWZzOworCXJldHVybiBlbnRyeTsKK30KKworLyogQSBoYXNobWFwIG9mIHJlZl9zdG9yZXMsIHN0b3JlZCBieSBzdWJtb2R1bGUgbmFtZTogKi8KK3N0YXRpYyBzdHJ1Y3QgaGFzaG1hcCBzdWJtb2R1bGVfcmVmX3N0b3JlczsKKworLyogQSBoYXNobWFwIG9mIHJlZl9zdG9yZXMsIHN0b3JlZCBieSB3b3JrdHJlZSBpZDogKi8KK3N0YXRpYyBzdHJ1Y3QgaGFzaG1hcCB3b3JrdHJlZV9yZWZfc3RvcmVzOworCisvKgorICogTG9vayB1cCBhIHJlZiBzdG9yZSBieSBuYW1lLiBJZiB0aGF0IHJlZl9zdG9yZSBoYXNuJ3QgYmVlbgorICogcmVnaXN0ZXJlZCB5ZXQsIHJldHVybiBOVUxMLgorICovCitzdGF0aWMgc3RydWN0IHJlZl9zdG9yZSAqbG9va3VwX3JlZl9zdG9yZV9tYXAoc3RydWN0IGhhc2htYXAgKm1hcCwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcmVmX3N0b3JlX2hhc2hfZW50cnkgKmVudHJ5OworCXVuc2lnbmVkIGludCBoYXNoOworCisJaWYgKCFtYXAtPnRhYmxlc2l6ZSkKKwkJLyogSXQncyBpbml0aWFsaXplZCBvbiBkZW1hbmQgaW4gcmVnaXN0ZXJfcmVmX3N0b3JlKCkuICovCisJCXJldHVybiBOVUxMOworCisJaGFzaCA9IHN0cmhhc2gobmFtZSk7CisJZW50cnkgPSBoYXNobWFwX2dldF9lbnRyeV9mcm9tX2hhc2gobWFwLCBoYXNoLCBuYW1lLAorCQkJCQlzdHJ1Y3QgcmVmX3N0b3JlX2hhc2hfZW50cnksIGVudCk7CisJcmV0dXJuIGVudHJ5ID8gZW50cnktPnJlZnMgOiBOVUxMOworfQorCisvKgorICogQ3JlYXRlLCByZWNvcmQsIGFuZCByZXR1cm4gYSByZWZfc3RvcmUgaW5zdGFuY2UgZm9yIHRoZSBzcGVjaWZpZWQKKyAqIGdpdGRpci4KKyAqLworc3RhdGljIHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZV9pbml0KGNvbnN0IGNoYXIgKmdpdGRpciwKKwkJCQkJdW5zaWduZWQgaW50IGZsYWdzKQoreworCWNvbnN0IGNoYXIgKmJlX25hbWUgPSAiZmlsZXMiOworCXN0cnVjdCByZWZfc3RvcmFnZV9iZSAqYmUgPSBmaW5kX3JlZl9zdG9yYWdlX2JhY2tlbmQoYmVfbmFtZSk7CisJc3RydWN0IHJlZl9zdG9yZSAqcmVmczsKKworCWlmICghYmUpCisJCUJVRygicmVmZXJlbmNlIGJhY2tlbmQgJXMgaXMgdW5rbm93biIsIGJlX25hbWUpOworCisJcmVmcyA9IGJlLT5pbml0KGdpdGRpciwgZmxhZ3MpOworCXJldHVybiByZWZzOworfQorCitzdHJ1Y3QgcmVmX3N0b3JlICpnZXRfbWFpbl9yZWZfc3RvcmUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJaWYgKHItPnJlZnNfcHJpdmF0ZSkKKwkJcmV0dXJuIHItPnJlZnNfcHJpdmF0ZTsKKworCWlmICghci0+Z2l0ZGlyKQorCQlCVUcoImF0dGVtcHRpbmcgdG8gZ2V0IG1haW5fcmVmX3N0b3JlIG91dHNpZGUgb2YgcmVwb3NpdG9yeSIpOworCisJci0+cmVmc19wcml2YXRlID0gcmVmX3N0b3JlX2luaXQoci0+Z2l0ZGlyLCBSRUZfU1RPUkVfQUxMX0NBUFMpOworCXJldHVybiByLT5yZWZzX3ByaXZhdGU7Cit9CisKKy8qCisgKiBBc3NvY2lhdGUgYSByZWYgc3RvcmUgd2l0aCBhIG5hbWUuIEl0IGlzIGEgZmF0YWwgZXJyb3IgdG8gY2FsbCB0aGlzCisgKiBmdW5jdGlvbiB0d2ljZSBmb3IgdGhlIHNhbWUgbmFtZS4KKyAqLworc3RhdGljIHZvaWQgcmVnaXN0ZXJfcmVmX3N0b3JlX21hcChzdHJ1Y3QgaGFzaG1hcCAqbWFwLAorCQkJCSAgIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkJICAgc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCByZWZfc3RvcmVfaGFzaF9lbnRyeSAqZW50cnk7CisKKwlpZiAoIW1hcC0+dGFibGVzaXplKQorCQloYXNobWFwX2luaXQobWFwLCByZWZfc3RvcmVfaGFzaF9jbXAsIE5VTEwsIDApOworCisJZW50cnkgPSBhbGxvY19yZWZfc3RvcmVfaGFzaF9lbnRyeShuYW1lLCByZWZzKTsKKwlpZiAoaGFzaG1hcF9wdXQobWFwLCAmZW50cnktPmVudCkpCisJCUJVRygiJXMgcmVmX3N0b3JlICclcycgaW5pdGlhbGl6ZWQgdHdpY2UiLCB0eXBlLCBuYW1lKTsKK30KKworc3RydWN0IHJlZl9zdG9yZSAqZ2V0X3N1Ym1vZHVsZV9yZWZfc3RvcmUoY29uc3QgY2hhciAqc3VibW9kdWxlKQoreworCXN0cnVjdCBzdHJidWYgc3VibW9kdWxlX3NiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJlZl9zdG9yZSAqcmVmczsKKwljaGFyICp0b19mcmVlID0gTlVMTDsKKwlzaXplX3QgbGVuOworCisJaWYgKCFzdWJtb2R1bGUpCisJCXJldHVybiBOVUxMOworCisJbGVuID0gc3RybGVuKHN1Ym1vZHVsZSk7CisJd2hpbGUgKGxlbiAmJiBpc19kaXJfc2VwKHN1Ym1vZHVsZVtsZW4gLSAxXSkpCisJCWxlbi0tOworCWlmICghbGVuKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChzdWJtb2R1bGVbbGVuXSkKKwkJLyogV2UgbmVlZCB0byBzdHJpcCBvZmYgb25lIG9yIG1vcmUgdHJhaWxpbmcgc2xhc2hlcyAqLworCQlzdWJtb2R1bGUgPSB0b19mcmVlID0geG1lbWR1cHooc3VibW9kdWxlLCBsZW4pOworCisJcmVmcyA9IGxvb2t1cF9yZWZfc3RvcmVfbWFwKCZzdWJtb2R1bGVfcmVmX3N0b3Jlcywgc3VibW9kdWxlKTsKKwlpZiAocmVmcykKKwkJZ290byBkb25lOworCisJc3RyYnVmX2FkZHN0cigmc3VibW9kdWxlX3NiLCBzdWJtb2R1bGUpOworCWlmICghaXNfbm9uYmFyZV9yZXBvc2l0b3J5X2Rpcigmc3VibW9kdWxlX3NiKSkKKwkJZ290byBkb25lOworCisJaWYgKHN1Ym1vZHVsZV90b19naXRkaXIoJnN1Ym1vZHVsZV9zYiwgc3VibW9kdWxlKSkKKwkJZ290byBkb25lOworCisJLyogYXNzdW1lIHRoYXQgYWRkX3N1Ym1vZHVsZV9vZGIoKSBoYXMgYmVlbiBjYWxsZWQgKi8KKwlyZWZzID0gcmVmX3N0b3JlX2luaXQoc3VibW9kdWxlX3NiLmJ1ZiwKKwkJCSAgICAgIFJFRl9TVE9SRV9SRUFEIHwgUkVGX1NUT1JFX09EQik7CisJcmVnaXN0ZXJfcmVmX3N0b3JlX21hcCgmc3VibW9kdWxlX3JlZl9zdG9yZXMsICJzdWJtb2R1bGUiLAorCQkJICAgICAgIHJlZnMsIHN1Ym1vZHVsZSk7CisKK2RvbmU6CisJc3RyYnVmX3JlbGVhc2UoJnN1Ym1vZHVsZV9zYik7CisJZnJlZSh0b19mcmVlKTsKKworCXJldHVybiByZWZzOworfQorCitzdHJ1Y3QgcmVmX3N0b3JlICpnZXRfd29ya3RyZWVfcmVmX3N0b3JlKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QpCit7CisJc3RydWN0IHJlZl9zdG9yZSAqcmVmczsKKwljb25zdCBjaGFyICppZDsKKworCWlmICh3dC0+aXNfY3VycmVudCkKKwkJcmV0dXJuIGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSk7CisKKwlpZCA9IHd0LT5pZCA/IHd0LT5pZCA6ICIvIjsKKwlyZWZzID0gbG9va3VwX3JlZl9zdG9yZV9tYXAoJndvcmt0cmVlX3JlZl9zdG9yZXMsIGlkKTsKKwlpZiAocmVmcykKKwkJcmV0dXJuIHJlZnM7CisKKwlpZiAod3QtPmlkKQorCQlyZWZzID0gcmVmX3N0b3JlX2luaXQoZ2l0X2NvbW1vbl9wYXRoKCJ3b3JrdHJlZXMvJXMiLCB3dC0+aWQpLAorCQkJCSAgICAgIFJFRl9TVE9SRV9BTExfQ0FQUyk7CisJZWxzZQorCQlyZWZzID0gcmVmX3N0b3JlX2luaXQoZ2V0X2dpdF9jb21tb25fZGlyKCksCisJCQkJICAgICAgUkVGX1NUT1JFX0FMTF9DQVBTKTsKKworCWlmIChyZWZzKQorCQlyZWdpc3Rlcl9yZWZfc3RvcmVfbWFwKCZ3b3JrdHJlZV9yZWZfc3RvcmVzLCAid29ya3RyZWUiLAorCQkJCSAgICAgICByZWZzLCBpZCk7CisJcmV0dXJuIHJlZnM7Cit9CisKK3ZvaWQgYmFzZV9yZWZfc3RvcmVfaW5pdChzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJIGNvbnN0IHN0cnVjdCByZWZfc3RvcmFnZV9iZSAqYmUpCit7CisJcmVmcy0+YmUgPSBiZTsKK30KKworLyogYmFja2VuZCBmdW5jdGlvbnMgKi8KK2ludCByZWZzX3BhY2tfcmVmcyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHJlZnMtPmJlLT5wYWNrX3JlZnMocmVmcywgZmxhZ3MpOworfQorCitpbnQgcmVmc19wZWVsX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpbnQgZmxhZzsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGJhc2U7CisKKwlpZiAoY3VycmVudF9yZWZfaXRlciAmJiBjdXJyZW50X3JlZl9pdGVyLT5yZWZuYW1lID09IHJlZm5hbWUpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBwZWVsZWQ7CisKKwkJaWYgKHJlZl9pdGVyYXRvcl9wZWVsKGN1cnJlbnRfcmVmX2l0ZXIsICZwZWVsZWQpKQorCQkJcmV0dXJuIC0xOworCQlvaWRjcHkob2lkLCAmcGVlbGVkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHJlZnNfcmVhZF9yZWZfZnVsbChyZWZzLCByZWZuYW1lLAorCQkJICAgICAgIFJFU09MVkVfUkVGX1JFQURJTkcsICZiYXNlLCAmZmxhZykpCisJCXJldHVybiAtMTsKKworCXJldHVybiBwZWVsX29iamVjdCgmYmFzZSwgb2lkKTsKK30KKworaW50IHBlZWxfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gcmVmc19wZWVsX3JlZihnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLCByZWZuYW1lLCBvaWQpOworfQorCitpbnQgcmVmc19jcmVhdGVfc3ltcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCSAgICAgICBjb25zdCBjaGFyICpyZWZfdGFyZ2V0LAorCQkgICAgICAgY29uc3QgY2hhciAqcmVmc19oZWFkc19tYXN0ZXIsCisJCSAgICAgICBjb25zdCBjaGFyICpsb2dtc2cpCit7CisJcmV0dXJuIHJlZnMtPmJlLT5jcmVhdGVfc3ltcmVmKHJlZnMsIHJlZl90YXJnZXQsCisJCQkJICAgICAgIHJlZnNfaGVhZHNfbWFzdGVyLAorCQkJCSAgICAgICBsb2dtc2cpOworfQorCitpbnQgY3JlYXRlX3N5bXJlZihjb25zdCBjaGFyICpyZWZfdGFyZ2V0LCBjb25zdCBjaGFyICpyZWZzX2hlYWRzX21hc3RlciwKKwkJICBjb25zdCBjaGFyICpsb2dtc2cpCit7CisJcmV0dXJuIHJlZnNfY3JlYXRlX3N5bXJlZihnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLCByZWZfdGFyZ2V0LAorCQkJCSAgcmVmc19oZWFkc19tYXN0ZXIsIGxvZ21zZyk7Cit9CisKK2ludCByZWZfdXBkYXRlX3JlamVjdF9kdXBsaWNhdGVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmbmFtZXMsCisJCQkJIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzaXplX3QgaSwgbiA9IHJlZm5hbWVzLT5ucjsKKworCWFzc2VydChlcnIpOworCisJZm9yIChpID0gMTsgaSA8IG47IGkrKykgeworCQlpbnQgY21wID0gc3RyY21wKHJlZm5hbWVzLT5pdGVtc1tpIC0gMV0uc3RyaW5nLAorCQkJCSByZWZuYW1lcy0+aXRlbXNbaV0uc3RyaW5nKTsKKworCQlpZiAoIWNtcCkgeworCQkJc3RyYnVmX2FkZGYoZXJyLAorCQkJCSAgICBfKCJtdWx0aXBsZSB1cGRhdGVzIGZvciByZWYgJyVzJyBub3QgYWxsb3dlZCIpLAorCQkJCSAgICByZWZuYW1lcy0+aXRlbXNbaV0uc3RyaW5nKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgaWYgKGNtcCA+IDApIHsKKwkJCUJVRygicmVmX3VwZGF0ZV9yZWplY3RfZHVwbGljYXRlcygpIHJlY2VpdmVkIHVuc29ydGVkIGxpc3QiKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJlZl90cmFuc2FjdGlvbl9wcmVwYXJlKHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzID0gdHJhbnNhY3Rpb24tPnJlZl9zdG9yZTsKKworCXN3aXRjaCAodHJhbnNhY3Rpb24tPnN0YXRlKSB7CisJY2FzZSBSRUZfVFJBTlNBQ1RJT05fT1BFTjoKKwkJLyogR29vZC4gKi8KKwkJYnJlYWs7CisJY2FzZSBSRUZfVFJBTlNBQ1RJT05fUFJFUEFSRUQ6CisJCUJVRygicHJlcGFyZSBjYWxsZWQgdHdpY2Ugb24gcmVmZXJlbmNlIHRyYW5zYWN0aW9uIik7CisJCWJyZWFrOworCWNhc2UgUkVGX1RSQU5TQUNUSU9OX0NMT1NFRDoKKwkJQlVHKCJwcmVwYXJlIGNhbGxlZCBvbiBhIGNsb3NlZCByZWZlcmVuY2UgdHJhbnNhY3Rpb24iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCJ1bmV4cGVjdGVkIHJlZmVyZW5jZSB0cmFuc2FjdGlvbiBzdGF0ZSIpOworCQlicmVhazsKKwl9CisKKwlpZiAoZ2V0ZW52KEdJVF9RVUFSQU5USU5FX0VOVklST05NRU5UKSkgeworCQlzdHJidWZfYWRkc3RyKGVyciwKKwkJCSAgICAgIF8oInJlZiB1cGRhdGVzIGZvcmJpZGRlbiBpbnNpZGUgcXVhcmFudGluZSBlbnZpcm9ubWVudCIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiByZWZzLT5iZS0+dHJhbnNhY3Rpb25fcHJlcGFyZShyZWZzLCB0cmFuc2FjdGlvbiwgZXJyKTsKK30KKworaW50IHJlZl90cmFuc2FjdGlvbl9hYm9ydChzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCByZWZfc3RvcmUgKnJlZnMgPSB0cmFuc2FjdGlvbi0+cmVmX3N0b3JlOworCWludCByZXQgPSAwOworCisJc3dpdGNoICh0cmFuc2FjdGlvbi0+c3RhdGUpIHsKKwljYXNlIFJFRl9UUkFOU0FDVElPTl9PUEVOOgorCQkvKiBObyBuZWVkIHRvIGFib3J0IGV4cGxpY2l0bHkuICovCisJCWJyZWFrOworCWNhc2UgUkVGX1RSQU5TQUNUSU9OX1BSRVBBUkVEOgorCQlyZXQgPSByZWZzLT5iZS0+dHJhbnNhY3Rpb25fYWJvcnQocmVmcywgdHJhbnNhY3Rpb24sIGVycik7CisJCWJyZWFrOworCWNhc2UgUkVGX1RSQU5TQUNUSU9OX0NMT1NFRDoKKwkJQlVHKCJhYm9ydCBjYWxsZWQgb24gYSBjbG9zZWQgcmVmZXJlbmNlIHRyYW5zYWN0aW9uIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygidW5leHBlY3RlZCByZWZlcmVuY2UgdHJhbnNhY3Rpb24gc3RhdGUiKTsKKwkJYnJlYWs7CisJfQorCisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXJldHVybiByZXQ7Cit9CisKK2ludCByZWZfdHJhbnNhY3Rpb25fY29tbWl0KHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCByZWZfc3RvcmUgKnJlZnMgPSB0cmFuc2FjdGlvbi0+cmVmX3N0b3JlOworCWludCByZXQ7CisKKwlzd2l0Y2ggKHRyYW5zYWN0aW9uLT5zdGF0ZSkgeworCWNhc2UgUkVGX1RSQU5TQUNUSU9OX09QRU46CisJCS8qIE5lZWQgdG8gcHJlcGFyZSBmaXJzdC4gKi8KKwkJcmV0ID0gcmVmX3RyYW5zYWN0aW9uX3ByZXBhcmUodHJhbnNhY3Rpb24sIGVycik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlicmVhazsKKwljYXNlIFJFRl9UUkFOU0FDVElPTl9QUkVQQVJFRDoKKwkJLyogRmFsbCB0aHJvdWdoIHRvIGZpbmlzaC4gKi8KKwkJYnJlYWs7CisJY2FzZSBSRUZfVFJBTlNBQ1RJT05fQ0xPU0VEOgorCQlCVUcoImNvbW1pdCBjYWxsZWQgb24gYSBjbG9zZWQgcmVmZXJlbmNlIHRyYW5zYWN0aW9uIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygidW5leHBlY3RlZCByZWZlcmVuY2UgdHJhbnNhY3Rpb24gc3RhdGUiKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJlZnMtPmJlLT50cmFuc2FjdGlvbl9maW5pc2gocmVmcywgdHJhbnNhY3Rpb24sIGVycik7Cit9CisKK2ludCByZWZzX3ZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJCSAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZXh0cmFzLAorCQkJCSAgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpza2lwLAorCQkJCSAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWNvbnN0IGNoYXIgKnNsYXNoOworCWNvbnN0IGNoYXIgKmV4dHJhX3JlZm5hbWU7CisJc3RydWN0IHN0cmJ1ZiBkaXJuYW1lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiByZWZlcmVudCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXVuc2lnbmVkIGludCB0eXBlOworCXN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXI7CisJaW50IG9rOworCWludCByZXQgPSAtMTsKKworCS8qCisJICogRm9yIHRoZSBzYWtlIG9mIGNvbW1lbnRzIGluIHRoaXMgZnVuY3Rpb24sIHN1cHBvc2UgdGhhdAorCSAqIHJlZm5hbWUgaXMgInJlZnMvZm9vL2JhciIuCisJICovCisKKwlhc3NlcnQoZXJyKTsKKworCXN0cmJ1Zl9ncm93KCZkaXJuYW1lLCBzdHJsZW4ocmVmbmFtZSkgKyAxKTsKKwlmb3IgKHNsYXNoID0gc3RyY2hyKHJlZm5hbWUsICcvJyk7IHNsYXNoOyBzbGFzaCA9IHN0cmNocihzbGFzaCArIDEsICcvJykpIHsKKwkJLyogRXhwYW5kIGRpcm5hbWUgdG8gdGhlIG5ldyBwcmVmaXgsIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIHNsYXNoOiAqLworCQlzdHJidWZfYWRkKCZkaXJuYW1lLCByZWZuYW1lICsgZGlybmFtZS5sZW4sIHNsYXNoIC0gcmVmbmFtZSAtIGRpcm5hbWUubGVuKTsKKworCQkvKgorCQkgKiBXZSBhcmUgc3RpbGwgYXQgYSBsZWFkaW5nIGRpciBvZiB0aGUgcmVmbmFtZSAoZS5nLiwKKwkJICogInJlZnMvZm9vIjsgaWYgdGhlcmUgaXMgYSByZWZlcmVuY2Ugd2l0aCB0aGF0IG5hbWUsCisJCSAqIGl0IGlzIGEgY29uZmxpY3QsICp1bmxlc3MqIGl0IGlzIGluIHNraXAuCisJCSAqLworCQlpZiAoc2tpcCAmJiBzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKHNraXAsIGRpcm5hbWUuYnVmKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghcmVmc19yZWFkX3Jhd19yZWYocmVmcywgZGlybmFtZS5idWYsICZvaWQsICZyZWZlcmVudCwgJnR5cGUpKSB7CisJCQlzdHJidWZfYWRkZihlcnIsIF8oIiclcycgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICclcyciKSwKKwkJCQkgICAgZGlybmFtZS5idWYsIHJlZm5hbWUpOworCQkJZ290byBjbGVhbnVwOworCQl9CisKKwkJaWYgKGV4dHJhcyAmJiBzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKGV4dHJhcywgZGlybmFtZS5idWYpKSB7CisJCQlzdHJidWZfYWRkZihlcnIsIF8oImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIpLAorCQkJCSAgICByZWZuYW1lLCBkaXJuYW1lLmJ1Zik7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGFyZSBhdCB0aGUgbGVhZiBvZiBvdXIgcmVmbmFtZSAoZS5nLiwgInJlZnMvZm9vL2JhciIpLgorCSAqIFRoZXJlIGlzIG5vIHBvaW50IGluIHNlYXJjaGluZyBmb3IgYSByZWZlcmVuY2Ugd2l0aCB0aGF0CisJICogbmFtZSwgYmVjYXVzZSBhIHJlZm5hbWUgaXNuJ3QgY29uc2lkZXJlZCB0byBjb25mbGljdCB3aXRoCisJICogaXRzZWxmLiBCdXQgd2Ugc3RpbGwgbmVlZCB0byBjaGVjayBmb3IgcmVmZXJlbmNlcyB3aG9zZQorCSAqIG5hbWVzIGFyZSBpbiB0aGUgInJlZnMvZm9vL2Jhci8iIG5hbWVzcGFjZSwgYmVjYXVzZSB0aGV5CisJICogKmRvKiBjb25mbGljdC4KKwkgKi8KKwlzdHJidWZfYWRkc3RyKCZkaXJuYW1lLCByZWZuYW1lICsgZGlybmFtZS5sZW4pOworCXN0cmJ1Zl9hZGRjaCgmZGlybmFtZSwgJy8nKTsKKworCWl0ZXIgPSByZWZzX3JlZl9pdGVyYXRvcl9iZWdpbihyZWZzLCBkaXJuYW1lLmJ1ZiwgMCwKKwkJCQkgICAgICAgRE9fRk9SX0VBQ0hfSU5DTFVERV9CUk9LRU4pOworCXdoaWxlICgob2sgPSByZWZfaXRlcmF0b3JfYWR2YW5jZShpdGVyKSkgPT0gSVRFUl9PSykgeworCQlpZiAoc2tpcCAmJgorCQkgICAgc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhza2lwLCBpdGVyLT5yZWZuYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmJ1Zl9hZGRmKGVyciwgXygiJyVzJyBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJyVzJyIpLAorCQkJICAgIGl0ZXItPnJlZm5hbWUsIHJlZm5hbWUpOworCQlyZWZfaXRlcmF0b3JfYWJvcnQoaXRlcik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAob2sgIT0gSVRFUl9ET05FKQorCQlCVUcoImVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIHJlZmVyZW5jZXMiKTsKKworCWV4dHJhX3JlZm5hbWUgPSBmaW5kX2Rlc2NlbmRhbnRfcmVmKGRpcm5hbWUuYnVmLCBleHRyYXMsIHNraXApOworCWlmIChleHRyYV9yZWZuYW1lKQorCQlzdHJidWZfYWRkZihlcnIsIF8oImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIpLAorCQkJICAgIHJlZm5hbWUsIGV4dHJhX3JlZm5hbWUpOworCWVsc2UKKwkJcmV0ID0gMDsKKworY2xlYW51cDoKKwlzdHJidWZfcmVsZWFzZSgmcmVmZXJlbnQpOworCXN0cmJ1Zl9yZWxlYXNlKCZkaXJuYW1lKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmVmc19mb3JfZWFjaF9yZWZsb2coc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcjsKKwlzdHJ1Y3QgZG9fZm9yX2VhY2hfcmVmX2hlbHAgaHAgPSB7IGZuLCBjYl9kYXRhIH07CisKKwlpdGVyID0gcmVmcy0+YmUtPnJlZmxvZ19pdGVyYXRvcl9iZWdpbihyZWZzKTsKKworCXJldHVybiBkb19mb3JfZWFjaF9yZXBvX3JlZl9pdGVyYXRvcih0aGVfcmVwb3NpdG9yeSwgaXRlciwKKwkJCQkJICAgICBkb19mb3JfZWFjaF9yZWZfaGVscGVyLCAmaHApOworfQorCitpbnQgZm9yX2VhY2hfcmVmbG9nKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiByZWZzX2Zvcl9lYWNoX3JlZmxvZyhnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLCBmbiwgY2JfZGF0YSk7Cit9CisKK2ludCByZWZzX2Zvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJCSAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgICAgIGVhY2hfcmVmbG9nX2VudF9mbiBmbiwKKwkJCQkgICAgIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIHJlZnMtPmJlLT5mb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2UocmVmcywgcmVmbmFtZSwKKwkJCQkJCSAgICAgZm4sIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfcmVmbG9nX2VudF9yZXZlcnNlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGVhY2hfcmVmbG9nX2VudF9mbiBmbiwKKwkJCQl2b2lkICpjYl9kYXRhKQoreworCXJldHVybiByZWZzX2Zvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZShnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLAorCQkJCQkJcmVmbmFtZSwgZm4sIGNiX2RhdGEpOworfQorCitpbnQgcmVmc19mb3JfZWFjaF9yZWZsb2dfZW50KHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICAgIGVhY2hfcmVmbG9nX2VudF9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gcmVmcy0+YmUtPmZvcl9lYWNoX3JlZmxvZ19lbnQocmVmcywgcmVmbmFtZSwgZm4sIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfcmVmbG9nX2VudChjb25zdCBjaGFyICpyZWZuYW1lLCBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sCisJCQl2b2lkICpjYl9kYXRhKQoreworCXJldHVybiByZWZzX2Zvcl9lYWNoX3JlZmxvZ19lbnQoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwgcmVmbmFtZSwKKwkJCQkJZm4sIGNiX2RhdGEpOworfQorCitpbnQgcmVmc19yZWZsb2dfZXhpc3RzKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJcmV0dXJuIHJlZnMtPmJlLT5yZWZsb2dfZXhpc3RzKHJlZnMsIHJlZm5hbWUpOworfQorCitpbnQgcmVmbG9nX2V4aXN0cyhjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXJldHVybiByZWZzX3JlZmxvZ19leGlzdHMoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwgcmVmbmFtZSk7Cit9CisKK2ludCByZWZzX2NyZWF0ZV9yZWZsb2coc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJICAgICAgIGludCBmb3JjZV9jcmVhdGUsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlyZXR1cm4gcmVmcy0+YmUtPmNyZWF0ZV9yZWZsb2cocmVmcywgcmVmbmFtZSwgZm9yY2VfY3JlYXRlLCBlcnIpOworfQorCitpbnQgc2FmZV9jcmVhdGVfcmVmbG9nKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBmb3JjZV9jcmVhdGUsCisJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJcmV0dXJuIHJlZnNfY3JlYXRlX3JlZmxvZyhnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLCByZWZuYW1lLAorCQkJCSAgZm9yY2VfY3JlYXRlLCBlcnIpOworfQorCitpbnQgcmVmc19kZWxldGVfcmVmbG9nKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJcmV0dXJuIHJlZnMtPmJlLT5kZWxldGVfcmVmbG9nKHJlZnMsIHJlZm5hbWUpOworfQorCitpbnQgZGVsZXRlX3JlZmxvZyhjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXJldHVybiByZWZzX2RlbGV0ZV9yZWZsb2coZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwgcmVmbmFtZSk7Cit9CisKK2ludCByZWZzX3JlZmxvZ19leHBpcmUoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJICAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywKKwkJICAgICAgIHJlZmxvZ19leHBpcnlfcHJlcGFyZV9mbiBwcmVwYXJlX2ZuLAorCQkgICAgICAgcmVmbG9nX2V4cGlyeV9zaG91bGRfcHJ1bmVfZm4gc2hvdWxkX3BydW5lX2ZuLAorCQkgICAgICAgcmVmbG9nX2V4cGlyeV9jbGVhbnVwX2ZuIGNsZWFudXBfZm4sCisJCSAgICAgICB2b2lkICpwb2xpY3lfY2JfZGF0YSkKK3sKKwlyZXR1cm4gcmVmcy0+YmUtPnJlZmxvZ19leHBpcmUocmVmcywgcmVmbmFtZSwgb2lkLCBmbGFncywKKwkJCQkgICAgICAgcHJlcGFyZV9mbiwgc2hvdWxkX3BydW5lX2ZuLAorCQkJCSAgICAgICBjbGVhbnVwX2ZuLCBwb2xpY3lfY2JfZGF0YSk7Cit9CisKK2ludCByZWZsb2dfZXhwaXJlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCSAgcmVmbG9nX2V4cGlyeV9wcmVwYXJlX2ZuIHByZXBhcmVfZm4sCisJCSAgcmVmbG9nX2V4cGlyeV9zaG91bGRfcHJ1bmVfZm4gc2hvdWxkX3BydW5lX2ZuLAorCQkgIHJlZmxvZ19leHBpcnlfY2xlYW51cF9mbiBjbGVhbnVwX2ZuLAorCQkgIHZvaWQgKnBvbGljeV9jYl9kYXRhKQoreworCXJldHVybiByZWZzX3JlZmxvZ19leHBpcmUoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwKKwkJCQkgIHJlZm5hbWUsIG9pZCwgZmxhZ3MsCisJCQkJICBwcmVwYXJlX2ZuLCBzaG91bGRfcHJ1bmVfZm4sCisJCQkJICBjbGVhbnVwX2ZuLCBwb2xpY3lfY2JfZGF0YSk7Cit9CisKK2ludCBpbml0aWFsX3JlZl90cmFuc2FjdGlvbl9jb21taXQoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCByZWZfc3RvcmUgKnJlZnMgPSB0cmFuc2FjdGlvbi0+cmVmX3N0b3JlOworCisJcmV0dXJuIHJlZnMtPmJlLT5pbml0aWFsX3RyYW5zYWN0aW9uX2NvbW1pdChyZWZzLCB0cmFuc2FjdGlvbiwgZXJyKTsKK30KKworaW50IHJlZnNfZGVsZXRlX3JlZnMoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqbXNnLAorCQkgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmbmFtZXMsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlyZXR1cm4gcmVmcy0+YmUtPmRlbGV0ZV9yZWZzKHJlZnMsIG1zZywgcmVmbmFtZXMsIGZsYWdzKTsKK30KKworaW50IGRlbGV0ZV9yZWZzKGNvbnN0IGNoYXIgKm1zZywgc3RydWN0IHN0cmluZ19saXN0ICpyZWZuYW1lcywKKwkJdW5zaWduZWQgaW50IGZsYWdzKQoreworCXJldHVybiByZWZzX2RlbGV0ZV9yZWZzKGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksIG1zZywgcmVmbmFtZXMsIGZsYWdzKTsKK30KKworaW50IHJlZnNfcmVuYW1lX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICpvbGRyZWYsCisJCSAgICBjb25zdCBjaGFyICpuZXdyZWYsIGNvbnN0IGNoYXIgKmxvZ21zZykKK3sKKwlyZXR1cm4gcmVmcy0+YmUtPnJlbmFtZV9yZWYocmVmcywgb2xkcmVmLCBuZXdyZWYsIGxvZ21zZyk7Cit9CisKK2ludCByZW5hbWVfcmVmKGNvbnN0IGNoYXIgKm9sZHJlZiwgY29uc3QgY2hhciAqbmV3cmVmLCBjb25zdCBjaGFyICpsb2dtc2cpCit7CisJcmV0dXJuIHJlZnNfcmVuYW1lX3JlZihnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLCBvbGRyZWYsIG5ld3JlZiwgbG9nbXNnKTsKK30KKworaW50IHJlZnNfY29weV9leGlzdGluZ19yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqb2xkcmVmLAorCQkgICAgY29uc3QgY2hhciAqbmV3cmVmLCBjb25zdCBjaGFyICpsb2dtc2cpCit7CisJcmV0dXJuIHJlZnMtPmJlLT5jb3B5X3JlZihyZWZzLCBvbGRyZWYsIG5ld3JlZiwgbG9nbXNnKTsKK30KKworaW50IGNvcHlfZXhpc3RpbmdfcmVmKGNvbnN0IGNoYXIgKm9sZHJlZiwgY29uc3QgY2hhciAqbmV3cmVmLCBjb25zdCBjaGFyICpsb2dtc2cpCit7CisJcmV0dXJuIHJlZnNfY29weV9leGlzdGluZ19yZWYoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwgb2xkcmVmLCBuZXdyZWYsIGxvZ21zZyk7Cit9CmRpZmYgLS1naXQgYS9yZWZzLmggYi9yZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyZDJjNwotLS0gL2Rldi9udWxsCisrKyBiL3JlZnMuaApAQCAtMCwwICsxLDg0NiBAQAorI2lmbmRlZiBSRUZTX0gKKyNkZWZpbmUgUkVGU19ICisKK3N0cnVjdCBvYmplY3RfaWQ7CitzdHJ1Y3QgcmVmX3N0b3JlOworc3RydWN0IHJlcG9zaXRvcnk7CitzdHJ1Y3Qgc3RyYnVmOworc3RydWN0IHN0cmluZ19saXN0Oworc3RydWN0IHN0cmluZ19saXN0X2l0ZW07CitzdHJ1Y3Qgd29ya3RyZWU7CisKKy8qCisgKiBSZXNvbHZlIGEgcmVmZXJlbmNlLCByZWN1cnNpdmVseSBmb2xsb3dpbmcgc3ltYm9saWMgcmVmZXJlcmVuY2VzLgorICoKKyAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgbm9uLXN5bWJvbGljIHJlZmVyZW5jZSB0aGF0IHVsdGltYXRlbHkgcG9pbnRlZAorICogYXQgdGhlIHJlc29sdmVkIG9iamVjdCBuYW1lLiAgVGhlIHJldHVybiB2YWx1ZSwgaWYgbm90IE5VTEwsIGlzIGEKKyAqIHBvaW50ZXIgaW50byBlaXRoZXIgYSBzdGF0aWMgYnVmZmVyIG9yIHRoZSBpbnB1dCByZWYuCisgKgorICogSWYgb2lkIGlzIG5vbi1OVUxMLCBzdG9yZSB0aGUgcmVmZXJyZWQtdG8gb2JqZWN0J3MgbmFtZSBpbiBpdC4KKyAqCisgKiBJZiB0aGUgcmVmZXJlbmNlIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhbiBvYmplY3QsIHRoZSBiZWhhdmlvcgorICogZGVwZW5kcyBvbiB0aGUgUkVTT0xWRV9SRUZfUkVBRElORyBmbGFnOgorICoKKyAqIC0gSWYgUkVTT0xWRV9SRUZfUkVBRElORyBpcyBzZXQsIHJldHVybiBOVUxMLgorICoKKyAqIC0gSWYgUkVTT0xWRV9SRUZfUkVBRElORyBpcyBub3Qgc2V0LCBjbGVhciBvaWQgYW5kIHJldHVybiB0aGUgbmFtZSBvZgorICogICB0aGUgbGFzdCByZWZlcmVuY2UgbmFtZSBpbiB0aGUgY2hhaW4sIHdoaWNoIHdpbGwgZWl0aGVyIGJlIGEgbm9uLXN5bWJvbGljCisgKiAgIHJlZmVyZW5jZSBvciBhbiB1bmRlZmluZWQgcmVmZXJlbmNlLiAgSWYgdGhpcyBpcyBhIHByZWx1ZGUgdG8KKyAqICAgIndyaXRpbmciIHRvIHRoZSByZWYsIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG5hbWUgb2YgdGhlIHJlZgorICogICB0aGF0IHdpbGwgYWN0dWFsbHkgYmUgY3JlYXRlZCBvciBjaGFuZ2VkLgorICoKKyAqIElmIHRoZSBSRVNPTFZFX1JFRl9OT19SRUNVUlNFIGZsYWcgaXMgcGFzc2VkLCBvbmx5IHJlc29sdmVzIG9uZQorICogbGV2ZWwgb2Ygc3ltYm9saWMgcmVmZXJlbmNlLiAgVGhlIHZhbHVlIHN0b3JlZCBpbiBvaWQgZm9yIGEgc3ltYm9saWMKKyAqIHJlZmVyZW5jZSB3aWxsIGFsd2F5cyBiZSBudWxsX29pZCBpbiB0aGlzIGNhc2UsIGFuZCB0aGUgcmV0dXJuCisgKiB2YWx1ZSBpcyB0aGUgcmVmZXJlbmNlIHRoYXQgdGhlIHN5bXJlZiByZWZlcnMgdG8gZGlyZWN0bHkuCisgKgorICogSWYgZmxhZ3MgaXMgbm9uLU5VTEwsIHNldCB0aGUgdmFsdWUgdGhhdCBpdCBwb2ludHMgdG8gdGhlCisgKiBjb21iaW5hdGlvbiBvZiBSRUZfSVNQQUNLRUQgKGlmIHRoZSByZWZlcmVuY2Ugd2FzIGZvdW5kIGFtb25nIHRoZQorICogcGFja2VkIHJlZmVyZW5jZXMpLCBSRUZfSVNTWU1SRUYgKGlmIHRoZSBpbml0aWFsIHJlZmVyZW5jZSB3YXMgYQorICogc3ltYm9saWMgcmVmZXJlbmNlKSwgUkVGX0JBRF9OQU1FIChpZiB0aGUgcmVmZXJlbmNlIG5hbWUgaXMgaWxsCisgKiBmb3JtZWQgLS0tIHNlZSBSRVNPTFZFX1JFRl9BTExPV19CQURfTkFNRSBiZWxvdyksIGFuZCBSRUZfSVNCUk9LRU4KKyAqIChpZiB0aGUgcmVmIGlzIG1hbGZvcm1lZCBvciBoYXMgYSBiYWQgbmFtZSkuIFNlZSByZWZzLmggZm9yIG1vcmUgZGV0YWlsCisgKiBvbiBlYWNoIGZsYWcuCisgKgorICogSWYgcmVmIGlzIG5vdCBhIHByb3Blcmx5LWZvcm1hdHRlZCwgbm9ybWFsaXplZCByZWZlcmVuY2UsIHJldHVybgorICogTlVMTC4gIElmIG1vcmUgdGhhbiBNQVhERVBUSCByZWN1cnNpdmUgc3ltYm9saWMgbG9va3VwcyBhcmUgbmVlZGVkLAorICogZ2l2ZSB1cCBhbmQgcmV0dXJuIE5VTEwuCisgKgorICogUkVTT0xWRV9SRUZfQUxMT1dfQkFEX05BTUUgYWxsb3dzIHJlc29sdmluZyByZWZzIGV2ZW4gd2hlbiB0aGVpcgorICogbmFtZSBpcyBpbnZhbGlkIGFjY29yZGluZyB0byBnaXQtY2hlY2stcmVmLWZvcm1hdCgxKS4gIElmIHRoZSBuYW1lCisgKiBpcyBiYWQgdGhlbiB0aGUgdmFsdWUgc3RvcmVkIGluIG9pZCB3aWxsIGJlIG51bGxfb2lkIGFuZCB0aGUgdHdvCisgKiBmbGFncyBSRUZfSVNCUk9LRU4gYW5kIFJFRl9CQURfTkFNRSB3aWxsIGJlIHNldC4KKyAqCisgKiBFdmVuIHdpdGggUkVTT0xWRV9SRUZfQUxMT1dfQkFEX05BTUUsIG5hbWVzIHRoYXQgZXNjYXBlIHRoZSByZWZzLworICogZGlyZWN0b3J5IGFuZCBkbyBub3QgY29uc2lzdCBvZiBhbGwgY2FwcyBhbmQgdW5kZXJzY29yZXMgY2Fubm90IGJlCisgKiByZXNvbHZlZC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgTlVMTCBmb3Igc3VjaCByZWYgbmFtZXMuCisgKiBDYXBzIGFuZCB1bmRlcnNjb3JlcyByZWZlcnMgdG8gdGhlIHNwZWNpYWwgcmVmcywgc3VjaCBhcyBIRUFELAorICogRkVUQ0hfSEVBRCBhbmQgZnJpZW5kcywgdGhhdCBhbGwgbGl2ZSBvdXRzaWRlIG9mIHRoZSByZWZzLyBkaXJlY3RvcnkuCisgKi8KKyNkZWZpbmUgUkVTT0xWRV9SRUZfUkVBRElORyAweDAxCisjZGVmaW5lIFJFU09MVkVfUkVGX05PX1JFQ1VSU0UgMHgwMgorI2RlZmluZSBSRVNPTFZFX1JFRl9BTExPV19CQURfTkFNRSAweDA0CisKK2NvbnN0IGNoYXIgKnJlZnNfcmVzb2x2ZV9yZWZfdW5zYWZlKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCQkJICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJICAgIGludCByZXNvbHZlX2ZsYWdzLAorCQkJCSAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICAgIGludCAqZmxhZ3MpOworY29uc3QgY2hhciAqcmVzb2x2ZV9yZWZfdW5zYWZlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCByZXNvbHZlX2ZsYWdzLAorCQkJICAgICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50ICpmbGFncyk7CisKK2NoYXIgKnJlZnNfcmVzb2x2ZV9yZWZkdXAoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCSAgY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IHJlc29sdmVfZmxhZ3MsCisJCQkgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50ICpmbGFncyk7CitjaGFyICpyZXNvbHZlX3JlZmR1cChjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgcmVzb2x2ZV9mbGFncywKKwkJICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCAqZmxhZ3MpOworCitpbnQgcmVmc19yZWFkX3JlZl9mdWxsKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCSAgICAgICBpbnQgcmVzb2x2ZV9mbGFncywgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgKmZsYWdzKTsKK2ludCByZWFkX3JlZl9mdWxsKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCByZXNvbHZlX2ZsYWdzLAorCQkgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50ICpmbGFncyk7CitpbnQgcmVhZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoKKyAqIFJldHVybiAwIGlmIGEgcmVmZXJlbmNlIG5hbWVkIHJlZm5hbWUgY291bGQgYmUgY3JlYXRlZCB3aXRob3V0CisgKiBjb25mbGljdGluZyB3aXRoIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIHJlZmVyZW5jZS4gT3RoZXJ3aXNlLAorICogcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUgYW5kIHdyaXRlIGFuIGV4cGxhbmF0aW9uIHRvIGVyci4gSWYgZXh0cmFzCisgKiBpcyBub24tTlVMTCwgaXQgaXMgYSBsaXN0IG9mIGFkZGl0aW9uYWwgcmVmbmFtZXMgd2l0aCB3aGljaCByZWZuYW1lCisgKiBpcyBub3QgYWxsb3dlZCB0byBjb25mbGljdC4gSWYgc2tpcCBpcyBub24tTlVMTCwgaWdub3JlIHBvdGVudGlhbAorICogY29uZmxpY3RzIHdpdGggcmVmcyBpbiBza2lwIChlLmcuLCBiZWNhdXNlIHRoZXkgYXJlIHNjaGVkdWxlZCBmb3IKKyAqIGRlbGV0aW9uIGluIHRoZSBzYW1lIG9wZXJhdGlvbikuIEJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiB0aGUgc2FtZQorICogbmFtZSBpcyBsaXN0ZWQgaW4gYm90aCBleHRyYXMgYW5kIHNraXAuCisgKgorICogVHdvIHJlZmVyZW5jZSBuYW1lcyBjb25mbGljdCBpZiBvbmUgb2YgdGhlbSBleGFjdGx5IG1hdGNoZXMgdGhlCisgKiBsZWFkaW5nIGNvbXBvbmVudHMgb2YgdGhlIG90aGVyOyBlLmcuLCAiZm9vL2JhciIgY29uZmxpY3RzIHdpdGgKKyAqIGJvdGggImZvbyIgYW5kIHdpdGggImZvby9iYXIvYmF6IiBidXQgbm90IHdpdGggImZvby9iYXIiIG9yCisgKiAiZm9vL2JhcmJhZG9zIi4KKyAqCisgKiBleHRyYXMgYW5kIHNraXAgbXVzdCBiZSBzb3J0ZWQuCisgKi8KKworaW50IHJlZnNfdmVyaWZ5X3JlZm5hbWVfYXZhaWxhYmxlKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCQkJICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCSAgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpleHRyYXMsCisJCQkJICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnNraXAsCisJCQkJICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCitpbnQgcmVmX2V4aXN0cyhjb25zdCBjaGFyICpyZWZuYW1lKTsKKworaW50IHNob3VsZF9hdXRvY3JlYXRlX3JlZmxvZyhjb25zdCBjaGFyICpyZWZuYW1lKTsKKworaW50IGlzX2JyYW5jaChjb25zdCBjaGFyICpyZWZuYW1lKTsKKworaW50IHJlZnNfaW5pdF9kYihzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKgorICogSWYgcmVmbmFtZSBpcyBhIG5vbi1zeW1ib2xpYyByZWZlcmVuY2UgdGhhdCByZWZlcnMgdG8gYSB0YWcgb2JqZWN0LAorICogYW5kIHRoZSB0YWcgY2FuIGJlIChyZWN1cnNpdmVseSkgZGVyZWZlcmVuY2VkIHRvIGEgbm9uLXRhZyBvYmplY3QsCisgKiBzdG9yZSB0aGUgb2JqZWN0IElEIG9mIHRoZSByZWZlcnJlZC10byBvYmplY3QgdG8gb2lkIGFuZCByZXR1cm4gMC4KKyAqIElmIGFueSBvZiB0aGVzZSBjb25kaXRpb25zIGFyZSBub3QgbWV0LCByZXR1cm4gYSBub24temVybyB2YWx1ZS4KKyAqIFN5bWJvbGljIHJlZmVyZW5jZXMgYXJlIGNvbnNpZGVyZWQgdW5wZWVsYWJsZSwgZXZlbiBpZiB0aGV5CisgKiB1bHRpbWF0ZWx5IHJlc29sdmUgdG8gYSBwZWVsYWJsZSB0YWcuCisgKi8KK2ludCByZWZzX3BlZWxfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCSAgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKK2ludCBwZWVsX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCisvKioKKyAqIFJlc29sdmUgcmVmbmFtZSBpbiB0aGUgbmVzdGVkICJnaXRsaW5rIiByZXBvc2l0b3J5IGluIHRoZSBzcGVjaWZpZWQKKyAqIHN1Ym1vZHVsZSAod2hpY2ggbXVzdCBiZSBub24tTlVMTCkuIElmIHRoZSByZXNvbHV0aW9uIGlzCisgKiBzdWNjZXNzZnVsLCByZXR1cm4gMCBhbmQgc2V0IG9pZCB0byB0aGUgbmFtZSBvZiB0aGUgb2JqZWN0OworICogb3RoZXJ3aXNlLCByZXR1cm4gYSBub24temVybyB2YWx1ZS4KKyAqLworaW50IHJlc29sdmVfZ2l0bGlua19yZWYoY29uc3QgY2hhciAqc3VibW9kdWxlLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoKKyAqIFJldHVybiB0cnVlIGlmZiBhYmJyZXZfbmFtZSBpcyBhIHBvc3NpYmxlIGFiYnJldmlhdGlvbiBmb3IKKyAqIGZ1bGxfbmFtZSBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGRlZmluZWQgYnkgcmVmX3Jldl9wYXJzZV9ydWxlcyBpbgorICogcmVmcy5jLgorICovCitpbnQgcmVmbmFtZV9tYXRjaChjb25zdCBjaGFyICphYmJyZXZfbmFtZSwgY29uc3QgY2hhciAqZnVsbF9uYW1lKTsKKworLyoKKyAqIEdpdmVuIGEgJ3ByZWZpeCcgZXhwYW5kIGl0IGJ5IHRoZSBydWxlcyBpbiAncmVmX3Jldl9wYXJzZV9ydWxlcycgYW5kIGFkZAorICogdGhlIHJlc3VsdHMgdG8gJ3ByZWZpeGVzJworICovCitzdHJ1Y3QgYXJndl9hcnJheTsKK3ZvaWQgZXhwYW5kX3JlZl9wcmVmaXgoc3RydWN0IGFyZ3ZfYXJyYXkgKnByZWZpeGVzLCBjb25zdCBjaGFyICpwcmVmaXgpOworCitpbnQgZXhwYW5kX3JlZihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNoYXIgKipyZWYpOworaW50IHJlcG9fZHdpbV9yZWYoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjaGFyICoqcmVmKTsKK2ludCByZXBvX2R3aW1fbG9nKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY2hhciAqKnJlZik7CitpbnQgZHdpbV9yZWYoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNoYXIgKipyZWYpOworaW50IGR3aW1fbG9nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjaGFyICoqcmVmKTsKKworLyoKKyAqIEEgcmVmX3RyYW5zYWN0aW9uIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHJlZmVyZW5jZSB1cGRhdGVzIHRoYXQKKyAqIHNob3VsZCBzdWNjZWVkIG9yIGZhaWwgdG9nZXRoZXIuCisgKgorICogQ2FsbGluZyBzZXF1ZW5jZQorICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIC0gQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBgc3RydWN0IHJlZl90cmFuc2FjdGlvbmAgYnkgY2FsbGluZworICogICBgcmVmX3RyYW5zYWN0aW9uX2JlZ2luKClgLgorICoKKyAqIC0gU3BlY2lmeSB0aGUgaW50ZW5kZWQgcmVmIHVwZGF0ZXMgYnkgY2FsbGluZyBvbmUgb3IgbW9yZSBvZiB0aGUKKyAqICAgZm9sbG93aW5nIGZ1bmN0aW9uczoKKyAqICAgLSBgcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSgpYAorICogICAtIGByZWZfdHJhbnNhY3Rpb25fY3JlYXRlKClgCisgKiAgIC0gYHJlZl90cmFuc2FjdGlvbl9kZWxldGUoKWAKKyAqICAgLSBgcmVmX3RyYW5zYWN0aW9uX3ZlcmlmeSgpYAorICoKKyAqIC0gVGhlbiBlaXRoZXI6CisgKgorICogICAtIE9wdGlvbmFsbHkgY2FsbCBgcmVmX3RyYW5zYWN0aW9uX3ByZXBhcmUoKWAgdG8gcHJlcGFyZSB0aGUKKyAqICAgICB0cmFuc2FjdGlvbi4gVGhpcyBsb2NrcyBhbGwgcmVmZXJlbmNlcywgY2hlY2tzIHByZWNvbmRpdGlvbnMsCisgKiAgICAgZXRjLiBidXQgZG9lc24ndCBmaW5hbGl6ZSBhbnl0aGluZy4gSWYgdGhpcyBzdGVwIGZhaWxzLCB0aGUKKyAqICAgICB0cmFuc2FjdGlvbiBoYXMgYmVlbiBjbG9zZWQgYW5kIGNhbiBvbmx5IGJlIGZyZWVkLiBJZiB0aGlzIHN0ZXAKKyAqICAgICBzdWNjZWVkcywgdGhlbiBgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCgpYCBpcyBhbG1vc3QgY2VydGFpbiB0bworICogICAgIHN1Y2NlZWQuIEhvd2V2ZXIsIHlvdSBjYW4gc3RpbGwgY2FsbCBgcmVmX3RyYW5zYWN0aW9uX2Fib3J0KClgCisgKiAgICAgaWYgeW91IGRlY2lkZSBub3QgdG8gY29tbWl0IHRoZSB0cmFuc2FjdGlvbiBhZnRlciBhbGwuCisgKgorICogICAtIENhbGwgYHJlZl90cmFuc2FjdGlvbl9jb21taXQoKWAgdG8gZXhlY3V0ZSB0aGUgdHJhbnNhY3Rpb24sCisgKiAgICAgbWFrZSB0aGUgY2hhbmdlcyBwZXJtYW5lbnQsIGFuZCByZWxlYXNlIGFsbCBsb2Nrcy4gSWYgeW91CisgKiAgICAgaGF2ZW4ndCBhbHJlYWR5IGNhbGxlZCBgcmVmX3RyYW5zYWN0aW9uX3ByZXBhcmUoKWAsIHRoZW4KKyAqICAgICBgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCgpYCBjYWxscyBpdCBmb3IgeW91LgorICoKKyAqICAgT3IKKyAqCisgKiAgIC0gQ2FsbCBgaW5pdGlhbF9yZWZfdHJhbnNhY3Rpb25fY29tbWl0KClgIGlmIHRoZSByZWYgZGF0YWJhc2UgaXMKKyAqICAgICBrbm93biB0byBiZSBlbXB0eSBhbmQgaGF2ZSBubyBvdGhlciB3cml0ZXJzIChlLmcuIGR1cmluZworICogICAgIGNsb25lKS4gVGhpcyBpcyBsaWtlbHkgdG8gYmUgbXVjaCBmYXN0ZXIgdGhhbgorICogICAgIGByZWZfdHJhbnNhY3Rpb25fY29tbWl0KClgLiBgcmVmX3RyYW5zYWN0aW9uX3ByZXBhcmUoKWAgc2hvdWxkCisgKiAgICAgKm5vdCogYmUgY2FsbGVkIGJlZm9yZSBgaW5pdGlhbF9yZWZfdHJhbnNhY3Rpb25fY29tbWl0KClgLgorICoKKyAqIC0gVGhlbiBmaW5hbGx5LCBjYWxsIGByZWZfdHJhbnNhY3Rpb25fZnJlZSgpYCB0byBmcmVlIHRoZQorICogICBgcmVmX3RyYW5zYWN0aW9uYCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBBdCBhbnkgdGltZSBiZWZvcmUgY2FsbGluZyBgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCgpYCwgeW91IGNhbiBjYWxsCisgKiBgcmVmX3RyYW5zYWN0aW9uX2Fib3J0KClgIHRvIGFib3J0IHRoZSB0cmFuc2FjdGlvbiwgcm9sbGJhY2sgYW55CisgKiBsb2NrcywgYW5kIGZyZWUgYW55IGFzc29jaWF0ZWQgcmVzb3VyY2VzIChpbmNsdWRpbmcgdGhlCisgKiBgcmVmX3RyYW5zYWN0aW9uYCBkYXRhIHN0cnVjdHVyZSkuCisgKgorICogUHV0dGluZyBpdCBhbGwgdG9nZXRoZXIsIGEgY29tcGxldGUgcmVmZXJlbmNlIHVwZGF0ZSBsb29rcyBsaWtlCisgKgorICogICAgICAgICBzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKyAqICAgICAgICAgc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKyAqICAgICAgICAgaW50IHJldCA9IDA7CisgKgorICogICAgICAgICB0cmFuc2FjdGlvbiA9IHJlZl9zdG9yZV90cmFuc2FjdGlvbl9iZWdpbihyZWZzLCAmZXJyKTsKKyAqICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbiB8fAorICogICAgICAgICAgICAgcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSguLi4pIHx8CisgKiAgICAgICAgICAgICByZWZfdHJhbnNhY3Rpb25fY3JlYXRlKC4uLikgfHwKKyAqICAgICAgICAgICAgIC4uLmV0Yy4uLiB8fAorICogICAgICAgICAgICAgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpIHsKKyAqICAgICAgICAgICAgICAgICBlcnJvcigiJXMiLCBlcnIuYnVmKTsKKyAqICAgICAgICAgICAgICAgICByZXQgPSAtMTsKKyAqICAgICAgICAgfQorICogICAgICAgICByZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisgKiAgICAgICAgIHN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworICogICAgICAgICByZXR1cm4gcmV0OworICoKKyAqIEVycm9yIGhhbmRsaW5nCisgKiAtLS0tLS0tLS0tLS0tLQorICoKKyAqIE9uIGVycm9yLCB0cmFuc2FjdGlvbiBmdW5jdGlvbnMgYXBwZW5kIGEgbWVzc2FnZSBhYm91dCB3aGF0CisgKiB3ZW50IHdyb25nIHRvIHRoZSAnZXJyJyBhcmd1bWVudC4gIFRoZSBtZXNzYWdlIG1lbnRpb25zIHdoYXQKKyAqIHJlZiB3YXMgYmVpbmcgdXBkYXRlZCAoaWYgYW55KSB3aGVuIHRoZSBlcnJvciBvY2N1cnJlZCBzbyBpdAorICogY2FuIGJlIHBhc3NlZCB0byAnZGllJyBvciAnZXJyb3InIGFzLWlzLgorICoKKyAqIFRoZSBtZXNzYWdlIGlzIGFwcGVuZGVkIHRvIGVyciB3aXRob3V0IGZpcnN0IGNsZWFyaW5nIGVyci4KKyAqIGVyciB3aWxsIG5vdCBiZSAnXG4nIHRlcm1pbmF0ZWQuCisgKgorICogQ2F2ZWF0cworICogLS0tLS0tLQorICoKKyAqIE5vdGUgdGhhdCBubyBsb2NrcyBhcmUgdGFrZW4sIGFuZCBubyByZWZzIGFyZSByZWFkLCB1bnRpbAorICogYHJlZl90cmFuc2FjdGlvbl9wcmVwYXJlKClgIG9yIGByZWZfdHJhbnNhY3Rpb25fY29tbWl0KClgIGlzCisgKiBjYWxsZWQuIFNvLCBmb3IgZXhhbXBsZSwgYHJlZl90cmFuc2FjdGlvbl92ZXJpZnkoKWAgd29uJ3QgcmVwb3J0IGEKKyAqIHZlcmlmaWNhdGlvbiBmYWlsdXJlIHVudGlsIHRoZSBjb21taXQgaXMgYXR0ZW1wdGVkLgorICovCitzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uOworCisvKgorICogQml0IHZhbHVlcyBzZXQgaW4gdGhlIGZsYWdzIGFyZ3VtZW50IHBhc3NlZCB0byBlYWNoX3JlZl9mbigpIGFuZAorICogc3RvcmVkIGluIHJlZl9pdGVyYXRvcjo6ZmxhZ3MuIE90aGVyIGJpdHMgYXJlIGZvciBpbnRlcm5hbCB1c2UKKyAqIG9ubHk6CisgKi8KKworLyogUmVmZXJlbmNlIGlzIGEgc3ltYm9saWMgcmVmZXJlbmNlLiAqLworI2RlZmluZSBSRUZfSVNTWU1SRUYgMHgwMQorCisvKiBSZWZlcmVuY2UgaXMgYSBwYWNrZWQgcmVmZXJlbmNlLiAqLworI2RlZmluZSBSRUZfSVNQQUNLRUQgMHgwMgorCisvKgorICogUmVmZXJlbmNlIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhbiBvYmplY3QgbmFtZTogZGFuZ2xpbmcgc3ltYm9saWMKKyAqIHJlZmVyZW5jZSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSksIGNvcnJ1cHQgcmVmZXJlbmNlIGZpbGUsCisgKiByZWZlcmVuY2UgZXhpc3RzIGJ1dCBuYW1lIGlzIGJhZCwgb3Igc3ltYm9saWMgcmVmZXJlbmNlIHJlZmVycyB0bworICogaWxsLWZvcm1hdHRlZCByZWZlcmVuY2UgbmFtZS4KKyAqLworI2RlZmluZSBSRUZfSVNCUk9LRU4gMHgwNAorCisvKgorICogUmVmZXJlbmNlIG5hbWUgaXMgbm90IHdlbGwgZm9ybWVkLgorICoKKyAqIFNlZSBnaXQtY2hlY2stcmVmLWZvcm1hdCgxKSBmb3IgdGhlIGRlZmluaXRpb24gb2Ygd2VsbCBmb3JtZWQgcmVmIG5hbWVzLgorICovCisjZGVmaW5lIFJFRl9CQURfTkFNRSAweDA4CisKKy8qCisgKiBUaGUgc2lnbmF0dXJlIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBmb3JfZWFjaF8qKCkKKyAqIGZ1bmN0aW9ucyBiZWxvdy4gIFRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSB0aGUgcmVmbmFtZSBhbmQgb2lkCisgKiBhcmd1bWVudHMgaXMgb25seSBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIGZvciB0aGUgZHVyYXRpb24gb2YgYQorICogc2luZ2xlIGNhbGxiYWNrIGludm9jYXRpb24uCisgKi8KK3R5cGVkZWYgaW50IGVhY2hfcmVmX2ZuKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSk7CisKKy8qCisgKiBUaGUgc2FtZSBhcyBlYWNoX3JlZl9mbiwgYnV0IGFsc28gd2l0aCBhIHJlcG9zaXRvcnkgYXJndW1lbnQgdGhhdAorICogY29udGFpbnMgdGhlIHJlcG9zaXRvcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBjYWxsYmFjay4KKyAqLwordHlwZWRlZiBpbnQgZWFjaF9yZXBvX3JlZl9mbihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICBpbnQgZmxhZ3MsCisJCQkgICAgIHZvaWQgKmNiX2RhdGEpOworCisvKgorICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaW52b2tlIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yCisgKiBlYWNoIHJlZmVyZW5jZSBpbmRpY2F0ZWQuICBJZiB0aGUgZnVuY3Rpb24gZXZlciByZXR1cm5zIGEgbm9uemVybworICogdmFsdWUsIHN0b3AgdGhlIGl0ZXJhdGlvbiBhbmQgcmV0dXJuIHRoYXQgdmFsdWUuICBQbGVhc2Ugbm90ZSB0aGF0CisgKiBpdCBpcyBub3Qgc2FmZSB0byBtb2RpZnkgcmVmZXJlbmNlcyB3aGlsZSBhbiBpdGVyYXRpb24gaXMgaW4KKyAqIHByb2dyZXNzLCB1bmxlc3MgdGhlIHNhbWUgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2NhdGlvbiB0aGF0CisgKiBtb2RpZmllcyB0aGUgcmVmZXJlbmNlIGFsc28gcmV0dXJucyBhIG5vbnplcm8gdmFsdWUgdG8gaW1tZWRpYXRlbHkKKyAqIHN0b3AgdGhlIGl0ZXJhdGlvbi4gUmV0dXJuZWQgcmVmZXJlbmNlcyBhcmUgc29ydGVkLgorICovCitpbnQgcmVmc19oZWFkX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkgIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCByZWZzX2Zvcl9lYWNoX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkgICAgICBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgcmVmc19mb3JfZWFjaF9yZWZfaW4oc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcHJlZml4LAorCQkJIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCByZWZzX2Zvcl9lYWNoX3RhZ19yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCSAgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworaW50IHJlZnNfZm9yX2VhY2hfYnJhbmNoX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJICAgICBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgcmVmc19mb3JfZWFjaF9yZW1vdGVfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCQkgICAgIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKworLyoganVzdCBpdGVyYXRlcyB0aGUgaGVhZCByZWYuICovCitpbnQgaGVhZF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworCisvKiBpdGVyYXRlcyBhbGwgcmVmcy4gKi8KK2ludCBmb3JfZWFjaF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworCisvKioKKyAqIGl0ZXJhdGVzIGFsbCByZWZzIHdoaWNoIGhhdmUgYSBkZWZpbmVkIHByZWZpeCBhbmQgc3RyaXBzIHRoYXQgcHJlZml4IGZyb20KKyAqIHRoZSBwYXNzZWQgdmFyaWFibGUgcmVmbmFtZS4KKyAqLworaW50IGZvcl9lYWNoX3JlZl9pbihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKworaW50IHJlZnNfZm9yX2VhY2hfZnVsbHJlZl9pbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhLAorCQkJICAgICB1bnNpZ25lZCBpbnQgYnJva2VuKTsKK2ludCBmb3JfZWFjaF9mdWxscmVmX2luKGNvbnN0IGNoYXIgKnByZWZpeCwgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEsCisJCQl1bnNpZ25lZCBpbnQgYnJva2VuKTsKKworLyoqCisgKiBpdGVyYXRlIHJlZnMgZnJvbSB0aGUgcmVzcGVjdGl2ZSBhcmVhLgorICovCitpbnQgZm9yX2VhY2hfdGFnX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgZm9yX2VhY2hfYnJhbmNoX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgZm9yX2VhY2hfcmVtb3RlX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgZm9yX2VhY2hfcmVwbGFjZV9yZWYoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGVhY2hfcmVwb19yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworCisvKiBpdGVyYXRlcyBhbGwgcmVmcyB0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgZ2xvYiBwYXR0ZXJuLiAqLworaW50IGZvcl9lYWNoX2dsb2JfcmVmKGVhY2hfcmVmX2ZuIGZuLCBjb25zdCBjaGFyICpwYXR0ZXJuLCB2b2lkICpjYl9kYXRhKTsKKworaW50IGZvcl9lYWNoX2dsb2JfcmVmX2luKGVhY2hfcmVmX2ZuIGZuLCBjb25zdCBjaGFyICpwYXR0ZXJuLAorCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgdm9pZCAqY2JfZGF0YSk7CisKK2ludCBoZWFkX3JlZl9uYW1lc3BhY2VkKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9uYW1lc3BhY2VkX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CisKKy8qIGNhbiBiZSB1c2VkIHRvIGxlYXJuIGFib3V0IGJyb2tlbiByZWYgYW5kIHN5bXJlZiAqLworaW50IHJlZnNfZm9yX2VhY2hfcmF3cmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9yYXdyZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworCisvKgorICogTm9ybWFsaXplcyBwYXJ0aWFsIHJlZnMgdG8gdGhlaXIgZnVsbHkgcXVhbGlmaWVkIGZvcm0uCisgKiBXaWxsIHByZXBlbmQgPHByZWZpeD4gdG8gdGhlIDxwYXR0ZXJuPiBpZiBpdCBkb2Vzbid0IHN0YXJ0IHdpdGggJ3JlZnMvJy4KKyAqIDxwcmVmaXg+IHdpbGwgZGVmYXVsdCB0byAncmVmcy8nIGlmIE5VTEwuCisgKgorICogaXRlbS5zdHJpbmcgd2lsbCBiZSBzZXQgdG8gdGhlIHJlc3VsdC4KKyAqIGl0ZW0udXRpbCB3aWxsIGJlIHNldCB0byBOVUxMIGlmIDxwYXR0ZXJuPiBjb250YWlucyBnbG9iIGNoYXJhY3RlcnMsIG9yCisgKiBub24tTlVMTCBpZiBpdCBkb2Vzbid0LgorICovCit2b2lkIG5vcm1hbGl6ZV9nbG9iX3JlZihzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJY29uc3QgY2hhciAqcGF0dGVybik7CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqaGFzX2dsb2Jfc3BlY2lhbHMoY29uc3QgY2hhciAqcGF0dGVybikKK3sKKwlyZXR1cm4gc3RycGJyayhwYXR0ZXJuLCAiPypbIik7Cit9CisKK3ZvaWQgd2Fybl9kYW5nbGluZ19zeW1yZWYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKm1zZ19mbXQsIGNvbnN0IGNoYXIgKnJlZm5hbWUpOwordm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZnMoRklMRSAqZnAsIGNvbnN0IGNoYXIgKm1zZ19mbXQsCisJCQkgICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZm5hbWVzKTsKKworLyoKKyAqIEZsYWdzIGZvciBjb250cm9sbGluZyBiZWhhdmlvdXIgb2YgcGFja19yZWZzKCkKKyAqIFBBQ0tfUkVGU19QUlVORTogUHJ1bmUgbG9vc2UgcmVmcyBhZnRlciBwYWNraW5nCisgKiBQQUNLX1JFRlNfQUxMOiAgIFBhY2sgX2FsbF8gcmVmcywgbm90IGp1c3QgdGFncyBhbmQgYWxyZWFkeSBwYWNrZWQgcmVmcworICovCisjZGVmaW5lIFBBQ0tfUkVGU19QUlVORSAweDAwMDEKKyNkZWZpbmUgUEFDS19SRUZTX0FMTCAgIDB4MDAwMgorCisvKgorICogV3JpdGUgYSBwYWNrZWQtcmVmcyBmaWxlIGZvciB0aGUgY3VycmVudCByZXBvc2l0b3J5LgorICogZmxhZ3M6IENvbWJpbmF0aW9uIG9mIHRoZSBhYm92ZSBQQUNLX1JFRlNfKiBmbGFncy4KKyAqLworaW50IHJlZnNfcGFja19yZWZzKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIHVuc2lnbmVkIGludCBmbGFncyk7CisKKy8qCisgKiBTZXR1cCByZWZsb2cgYmVmb3JlIHVzaW5nLiBGaWxsIGluIGVyciBhbmQgcmV0dXJuIC0xIG9uIGZhaWx1cmUuCisgKi8KK2ludCByZWZzX2NyZWF0ZV9yZWZsb2coc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJICAgICAgIGludCBmb3JjZV9jcmVhdGUsIHN0cnVjdCBzdHJidWYgKmVycik7CitpbnQgc2FmZV9jcmVhdGVfcmVmbG9nKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBmb3JjZV9jcmVhdGUsIHN0cnVjdCBzdHJidWYgKmVycik7CisKKy8qKiBSZWFkcyBsb2cgZm9yIHRoZSB2YWx1ZSBvZiByZWYgZHVyaW5nIGF0X3RpbWUuICoqLworaW50IHJlYWRfcmVmX2F0KHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCWNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGludCBmbGFncywKKwkJdGltZXN0YW1wX3QgYXRfdGltZSwgaW50IGNudCwKKwkJc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjaGFyICoqbXNnLAorCQl0aW1lc3RhbXBfdCAqY3V0b2ZmX3RpbWUsIGludCAqY3V0b2ZmX3R6LCBpbnQgKmN1dG9mZl9jbnQpOworCisvKiogQ2hlY2sgaWYgYSBwYXJ0aWN1bGFyIHJlZmxvZyBleGlzdHMgKi8KK2ludCByZWZzX3JlZmxvZ19leGlzdHMoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcmVmbmFtZSk7CitpbnQgcmVmbG9nX2V4aXN0cyhjb25zdCBjaGFyICpyZWZuYW1lKTsKKworLyoKKyAqIERlbGV0ZSB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZS4gSWYgb2xkX29pZCBpcyBub24tTlVMTCwgdGhlbgorICogdmVyaWZ5IHRoYXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlZmVyZW5jZSBpcyBvbGRfb2lkIGJlZm9yZQorICogZGVsZXRpbmcgaXQuIElmIG9sZF9vaWQgaXMgTlVMTCwgZGVsZXRlIHRoZSByZWZlcmVuY2UgaWYgaXQKKyAqIGV4aXN0cywgcmVnYXJkbGVzcyBvZiBpdHMgb2xkIHZhbHVlLiBJdCBpcyBhbiBlcnJvciBmb3Igb2xkX29pZCB0bworICogYmUgbnVsbF9vaWQuIG1zZyBhbmQgZmxhZ3MgYXJlIHBhc3NlZCB0aHJvdWdoIHRvCisgKiByZWZfdHJhbnNhY3Rpb25fZGVsZXRlKCkuCisgKi8KK2ludCByZWZzX2RlbGV0ZV9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqbXNnLAorCQkgICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOworaW50IGRlbGV0ZV9yZWYoY29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisvKgorICogRGVsZXRlIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlcy4gSWYgdGhlcmUgYXJlIGFueSBwcm9ibGVtcywgZW1pdAorICogZXJyb3JzIGJ1dCBhdHRlbXB0IHRvIGtlZXAgZ29pbmcgKGkuZS4sIHRoZSBkZWxldGVzIGFyZSBub3QgZG9uZSBpbgorICogYW4gYWxsLW9yLW5vdGhpbmcgdHJhbnNhY3Rpb24pLiBtc2cgYW5kIGZsYWdzIGFyZSBwYXNzZWQgdGhyb3VnaCB0bworICogcmVmX3RyYW5zYWN0aW9uX2RlbGV0ZSgpLgorICovCitpbnQgcmVmc19kZWxldGVfcmVmcyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICptc2csCisJCSAgICAgc3RydWN0IHN0cmluZ19saXN0ICpyZWZuYW1lcywgdW5zaWduZWQgaW50IGZsYWdzKTsKK2ludCBkZWxldGVfcmVmcyhjb25zdCBjaGFyICptc2csIHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmbmFtZXMsCisJCXVuc2lnbmVkIGludCBmbGFncyk7CisKKy8qKiBEZWxldGUgYSByZWZsb2cgKi8KK2ludCByZWZzX2RlbGV0ZV9yZWZsb2coc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcmVmbmFtZSk7CitpbnQgZGVsZXRlX3JlZmxvZyhjb25zdCBjaGFyICpyZWZuYW1lKTsKKworLyogaXRlcmF0ZSBvdmVyIHJlZmxvZyBlbnRyaWVzICovCit0eXBlZGVmIGludCBlYWNoX3JlZmxvZ19lbnRfZm4oCisJCXN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsIHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsCisJCWNvbnN0IGNoYXIgKmNvbW1pdHRlciwgdGltZXN0YW1wX3QgdGltZXN0YW1wLAorCQlpbnQgdHosIGNvbnN0IGNoYXIgKm1zZywgdm9pZCAqY2JfZGF0YSk7CisKK2ludCByZWZzX2Zvcl9lYWNoX3JlZmxvZ19lbnQoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgICAgZWFjaF9yZWZsb2dfZW50X2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCByZWZzX2Zvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJCSAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgICAgIGVhY2hfcmVmbG9nX2VudF9mbiBmbiwKKwkJCQkgICAgIHZvaWQgKmNiX2RhdGEpOworaW50IGZvcl9lYWNoX3JlZmxvZ19lbnQoY29uc3QgY2hhciAqcmVmbmFtZSwgZWFjaF9yZWZsb2dfZW50X2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2UoY29uc3QgY2hhciAqcmVmbmFtZSwgZWFjaF9yZWZsb2dfZW50X2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKworLyoKKyAqIENhbGxzIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gZm9yIGVhY2ggcmVmbG9nIGZpbGUgdW50aWwgaXQgcmV0dXJucyBub256ZXJvLAorICogYW5kIHJldHVybnMgdGhlIHZhbHVlLiBSZWZsb2cgZmlsZSBvcmRlciBpcyB1bnNwZWNpZmllZC4KKyAqLworaW50IHJlZnNfZm9yX2VhY2hfcmVmbG9nKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9yZWZsb2coZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworCisjZGVmaW5lIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwgMQorI2RlZmluZSBSRUZOQU1FX1JFRlNQRUNfUEFUVEVSTiAyCisKKy8qCisgKiBSZXR1cm4gMCBpZmYgcmVmbmFtZSBoYXMgdGhlIGNvcnJlY3QgZm9ybWF0IGZvciBhIHJlZm5hbWUgYWNjb3JkaW5nCisgKiB0byB0aGUgcnVsZXMgZGVzY3JpYmVkIGluIERvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0LgorICogSWYgUkVGTkFNRV9BTExPV19PTkVMRVZFTCBpcyBzZXQgaW4gZmxhZ3MsIHRoZW4gYWNjZXB0IG9uZS1sZXZlbAorICogcmVmZXJlbmNlIG5hbWVzLiAgSWYgUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4gaXMgc2V0IGluIGZsYWdzLCB0aGVuCisgKiBhbGxvdyBhIHNpbmdsZSAiKiIgd2lsZGNhcmQgY2hhcmFjdGVyIGluIHRoZSByZWZzcGVjLiBObyBsZWFkaW5nIG9yCisgKiByZXBlYXRlZCBzbGFzaGVzIGFyZSBhY2NlcHRlZC4KKyAqLworaW50IGNoZWNrX3JlZm5hbWVfZm9ybWF0KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBmbGFncyk7CisKKy8qCisgKiBBcHBseSB0aGUgcnVsZXMgZnJvbSBjaGVja19yZWZuYW1lX2Zvcm1hdCwgYnV0IG11dGF0ZSB0aGUgcmVzdWx0IHVudGlsIGl0CisgKiBpcyBhY2NlcHRhYmxlLCBhbmQgcGxhY2UgdGhlIHJlc3VsdCBpbiAib3V0Ii4KKyAqLwordm9pZCBzYW5pdGl6ZV9yZWZuYW1lX2NvbXBvbmVudChjb25zdCBjaGFyICpyZWZuYW1lLCBzdHJ1Y3Qgc3RyYnVmICpvdXQpOworCitjb25zdCBjaGFyICpwcmV0dGlmeV9yZWZuYW1lKGNvbnN0IGNoYXIgKnJlZm5hbWUpOworCitjaGFyICpyZWZzX3Nob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IHN0cmljdCk7CitjaGFyICpzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgc3RyaWN0KTsKKworLyoqIHJlbmFtZSByZWYsIHJldHVybiAwIG9uIHN1Y2Nlc3MgKiovCitpbnQgcmVmc19yZW5hbWVfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKm9sZHJlZiwKKwkJICAgIGNvbnN0IGNoYXIgKm5ld3JlZiwgY29uc3QgY2hhciAqbG9nbXNnKTsKK2ludCByZW5hbWVfcmVmKGNvbnN0IGNoYXIgKm9sZHJlZiwgY29uc3QgY2hhciAqbmV3cmVmLAorCQkJY29uc3QgY2hhciAqbG9nbXNnKTsKKworLyoqIGNvcHkgcmVmLCByZXR1cm4gMCBvbiBzdWNjZXNzICoqLworaW50IHJlZnNfY29weV9leGlzdGluZ19yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqb2xkcmVmLAorCQkgICAgY29uc3QgY2hhciAqbmV3cmVmLCBjb25zdCBjaGFyICpsb2dtc2cpOworaW50IGNvcHlfZXhpc3RpbmdfcmVmKGNvbnN0IGNoYXIgKm9sZHJlZiwgY29uc3QgY2hhciAqbmV3cmVmLAorCQkJY29uc3QgY2hhciAqbG9nbXNnKTsKKworaW50IHJlZnNfY3JlYXRlX3N5bXJlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkgICAgICAgY29uc3QgY2hhciAqdGFyZ2V0LCBjb25zdCBjaGFyICpsb2dtc2cpOworaW50IGNyZWF0ZV9zeW1yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgY2hhciAqdGFyZ2V0LCBjb25zdCBjaGFyICpsb2dtc2cpOworCitlbnVtIGFjdGlvbl9vbl9lcnIgeworCVVQREFURV9SRUZTX01TR19PTl9FUlIsCisJVVBEQVRFX1JFRlNfRElFX09OX0VSUiwKKwlVUERBVEVfUkVGU19RVUlFVF9PTl9FUlIKK307CisKKy8qCisgKiBCZWdpbiBhIHJlZmVyZW5jZSB0cmFuc2FjdGlvbi4gIFRoZSByZWZlcmVuY2UgdHJhbnNhY3Rpb24gbXVzdAorICogYmUgZnJlZWQgYnkgY2FsbGluZyByZWZfdHJhbnNhY3Rpb25fZnJlZSgpLgorICovCitzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICpyZWZfc3RvcmVfdHJhbnNhY3Rpb25fYmVnaW4oc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqcmVmX3RyYW5zYWN0aW9uX2JlZ2luKHN0cnVjdCBzdHJidWYgKmVycik7CisKKy8qCisgKiBSZWZlcmVuY2UgdHJhbnNhY3Rpb24gdXBkYXRlcworICoKKyAqIFRoZSBmb2xsb3dpbmcgZm91ciBmdW5jdGlvbnMgYWRkIGEgcmVmZXJlbmNlIGNoZWNrIG9yIHVwZGF0ZSB0byBhCisgKiByZWZfdHJhbnNhY3Rpb24uICBUaGV5IGhhdmUgc29tZSBjb21tb24gc2ltaWxhciBwYXJhbWV0ZXJzOgorICoKKyAqICAgICB0cmFuc2FjdGlvbiAtLSBhIHBvaW50ZXIgdG8gYW4gb3BlbiByZWZfdHJhbnNhY3Rpb24sIG9idGFpbmVkCisgKiAgICAgICAgIGZyb20gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCkuCisgKgorICogICAgIHJlZm5hbWUgLS0gdGhlIG5hbWUgb2YgdGhlIHJlZmVyZW5jZSB0byBiZSBhZmZlY3RlZC4KKyAqCisgKiAgICAgbmV3X29pZCAtLSB0aGUgb2JqZWN0IElEIHRoYXQgc2hvdWxkIGJlIHNldCB0byBiZSB0aGUgbmV3IHZhbHVlCisgKiAgICAgICAgIG9mIHRoZSByZWZlcmVuY2UuIFNvbWUgZnVuY3Rpb25zIGFsbG93IHRoaXMgcGFyYW1ldGVyIHRvIGJlCisgKiAgICAgICAgIE5VTEwsIG1lYW5pbmcgdGhhdCB0aGUgcmVmZXJlbmNlIGlzIG5vdCBjaGFuZ2VkLCBvcgorICogICAgICAgICBudWxsX29pZCwgbWVhbmluZyB0aGF0IHRoZSByZWZlcmVuY2Ugc2hvdWxkIGJlIGRlbGV0ZWQuIEEKKyAqICAgICAgICAgY29weSBvZiB0aGlzIHZhbHVlIGlzIG1hZGUgaW4gdGhlIHRyYW5zYWN0aW9uLgorICoKKyAqICAgICBvbGRfb2lkIC0tIHRoZSBvYmplY3QgSUQgdGhhdCB0aGUgcmVmZXJlbmNlIG11c3QgaGF2ZSBiZWZvcmUKKyAqICAgICAgICAgdGhlIHVwZGF0ZS4gU29tZSBmdW5jdGlvbnMgYWxsb3cgdGhpcyBwYXJhbWV0ZXIgdG8gYmUgTlVMTCwKKyAqICAgICAgICAgbWVhbmluZyB0aGF0IHRoZSBvbGQgdmFsdWUgb2YgdGhlIHJlZmVyZW5jZSBpcyBub3QgY2hlY2tlZCwKKyAqICAgICAgICAgb3IgbnVsbF9vaWQsIG1lYW5pbmcgdGhhdCB0aGUgcmVmZXJlbmNlIG11c3Qgbm90IGV4aXN0CisgKiAgICAgICAgIGJlZm9yZSB0aGUgdXBkYXRlLiBBIGNvcHkgb2YgdGhpcyB2YWx1ZSBpcyBtYWRlIGluIHRoZQorICogICAgICAgICB0cmFuc2FjdGlvbi4KKyAqCisgKiAgICAgZmxhZ3MgLS0gZmxhZ3MgYWZmZWN0aW5nIHRoZSB1cGRhdGUsIHBhc3NlZCB0bworICogICAgICAgICB1cGRhdGVfcmVmX2xvY2soKS4gUG9zc2libGUgZmxhZ3M6IFJFRl9OT19ERVJFRiwKKyAqICAgICAgICAgUkVGX0ZPUkNFX0NSRUFURV9SRUZMT0cuIFNlZSB0aG9zZSBjb25zdGFudHMgZm9yIG1vcmUKKyAqICAgICAgICAgaW5mb3JtYXRpb24uCisgKgorICogICAgIG1zZyAtLSBhIG1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgY2hhbmdlIChmb3IgdGhlIHJlZmxvZykuCisgKgorICogICAgIGVyciAtLSBhIHN0cmJ1ZiBmb3IgcmVjZWl2aW5nIGEgZGVzY3JpcHRpb24gb2YgYW55IGVycm9yIHRoYXQKKyAqICAgICAgICAgbWlnaHQgaGF2ZSBvY2N1cnJlZC4KKyAqCisgKiBUaGUgZnVuY3Rpb25zIG1ha2UgaW50ZXJuYWwgY29waWVzIG9mIHJlZm5hbWUgYW5kIG1zZywgc28gdGhlCisgKiBjYWxsZXIgcmV0YWlucyBvd25lcnNoaXAgb2YgdGhlc2UgcGFyYW1ldGVycy4KKyAqCisgKiBUaGUgZnVuY3Rpb25zIHJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIG5vbi16ZXJvIG9uIGZhaWx1cmUuIEEKKyAqIGZhaWx1cmUgbWVhbnMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gYXMgYSB3aG9sZSBoYXMgZmFpbGVkIGFuZCBuZWVkcworICogdG8gYmUgcm9sbGVkIGJhY2suCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZmxhZ3MgY2FuIGJlIHBhc3NlZCB0byByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKCkgZXRjLgorICogSW50ZXJuYWxseSwgdGhleSBhcmUgc3RvcmVkIGluIGByZWZfdXBkYXRlOjpmbGFnc2AsIGFsb25nIHdpdGggc29tZQorICogaW50ZXJuYWwgZmxhZ3MuCisgKi8KKworLyoKKyAqIEFjdCBvbiB0aGUgcmVmIGRpcmVjdGx5OyBpLmUuLCB3aXRob3V0IGRlcmVmZXJlbmNpbmcgc3ltYm9saWMgcmVmcy4KKyAqIElmIHRoaXMgZmxhZyBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHN5bWJvbGljIHJlZmVyZW5jZXMgYXJlCisgKiBkZXJlZmVyZW5jZWQgYW5kIHRoZSB1cGRhdGUgaXMgYXBwbGllZCB0byB0aGUgcmVmZXJlbnQuCisgKi8KKyNkZWZpbmUgUkVGX05PX0RFUkVGICgxIDw8IDApCisKKy8qCisgKiBGb3JjZSB0aGUgY3JlYXRpb24gb2YgYSByZWZsb2cgZm9yIHRoaXMgcmVmZXJlbmNlLCBldmVuIGlmIGl0CisgKiBkaWRuJ3QgcHJldmlvdXNseSBoYXZlIGEgcmVmbG9nLgorICovCisjZGVmaW5lIFJFRl9GT1JDRV9DUkVBVEVfUkVGTE9HICgxIDw8IDEpCisKKy8qCisgKiBCaXRtYXNrIG9mIGFsbCBvZiB0aGUgZmxhZ3MgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBwYXNzZWQgaW4gdG8KKyAqIHJlZl90cmFuc2FjdGlvbl91cGRhdGUoKSBhbmQgZnJpZW5kczoKKyAqLworI2RlZmluZSBSRUZfVFJBTlNBQ1RJT05fVVBEQVRFX0FMTE9XRURfRkxBR1MgXAorCShSRUZfTk9fREVSRUYgfCBSRUZfRk9SQ0VfQ1JFQVRFX1JFRkxPRykKKworLyoKKyAqIEFkZCBhIHJlZmVyZW5jZSB1cGRhdGUgdG8gdHJhbnNhY3Rpb24uIGBuZXdfb2lkYCBpcyB0aGUgdmFsdWUgdGhhdAorICogdGhlIHJlZmVyZW5jZSBzaG91bGQgaGF2ZSBhZnRlciB0aGUgdXBkYXRlLCBvciBgbnVsbF9vaWRgIGlmIGl0CisgKiBzaG91bGQgYmUgZGVsZXRlZC4gSWYgYG5ld19vaWRgIGlzIE5VTEwsIHRoZW4gdGhlIHJlZmVyZW5jZSBpcyBub3QKKyAqIGNoYW5nZWQgYXQgYWxsLiBgb2xkX29pZGAgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIHJlZmVyZW5jZSBtdXN0IGhhdmUKKyAqIGJlZm9yZSB0aGUgdXBkYXRlLCBvciBgbnVsbF9vaWRgIGlmIGl0IG11c3Qgbm90IGhhdmUgZXhpc3RlZAorICogYmVmb3JlaGFuZC4gVGhlIG9sZCB2YWx1ZSBpcyBjaGVja2VkIGFmdGVyIHRoZSBsb2NrIGlzIHRha2VuIHRvCisgKiBwcmV2ZW50IHJhY2VzLiBJZiB0aGUgb2xkIHZhbHVlIGRvZXNuJ3QgYWdyZWUgd2l0aCBvbGRfb2lkLCB0aGUKKyAqIHdob2xlIHRyYW5zYWN0aW9uIGZhaWxzLiBJZiBvbGRfb2lkIGlzIE5VTEwsIHRoZW4gdGhlIHByZXZpb3VzCisgKiB2YWx1ZSBpcyBub3QgY2hlY2tlZC4KKyAqCisgKiBTZWUgdGhlIGFib3ZlIGNvbW1lbnQgIlJlZmVyZW5jZSB0cmFuc2FjdGlvbiB1cGRhdGVzIiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24uCisgKi8KK2ludCByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICptc2csCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKgorICogQWRkIGEgcmVmZXJlbmNlIGNyZWF0aW9uIHRvIHRyYW5zYWN0aW9uLiBuZXdfb2lkIGlzIHRoZSB2YWx1ZSB0aGF0CisgKiB0aGUgcmVmZXJlbmNlIHNob3VsZCBoYXZlIGFmdGVyIHRoZSB1cGRhdGU7IGl0IG11c3Qgbm90IGJlCisgKiBudWxsX29pZC4gSXQgaXMgdmVyaWZpZWQgdGhhdCB0aGUgcmVmZXJlbmNlIGRvZXMgbm90IGV4aXN0CisgKiBhbHJlYWR5LgorICoKKyAqIFNlZSB0aGUgYWJvdmUgY29tbWVudCAiUmVmZXJlbmNlIHRyYW5zYWN0aW9uIHVwZGF0ZXMiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbi4KKyAqLworaW50IHJlZl90cmFuc2FjdGlvbl9jcmVhdGUoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwKKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgY29uc3QgY2hhciAqbXNnLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKworLyoKKyAqIEFkZCBhIHJlZmVyZW5jZSBkZWxldGlvbiB0byB0cmFuc2FjdGlvbi4gSWYgb2xkX29pZCBpcyBub24tTlVMTCwKKyAqIHRoZW4gaXQgaG9sZHMgdGhlIHZhbHVlIHRoYXQgdGhlIHJlZmVyZW5jZSBzaG91bGQgaGF2ZSBoYWQgYmVmb3JlCisgKiB0aGUgdXBkYXRlICh3aGljaCBtdXN0IG5vdCBiZSBudWxsX29pZCkuCisgKgorICogU2VlIHRoZSBhYm92ZSBjb21tZW50ICJSZWZlcmVuY2UgdHJhbnNhY3Rpb24gdXBkYXRlcyIgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uLgorICovCitpbnQgcmVmX3RyYW5zYWN0aW9uX2RlbGV0ZShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICptc2csCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKgorICogVmVyaWZ5LCB3aXRoaW4gYSB0cmFuc2FjdGlvbiwgdGhhdCByZWZuYW1lIGhhcyB0aGUgdmFsdWUgb2xkX29pZCwKKyAqIG9yLCBpZiBvbGRfb2lkIGlzIG51bGxfb2lkLCB0aGVuIHZlcmlmeSB0aGF0IHRoZSByZWZlcmVuY2UKKyAqIGRvZXNuJ3QgZXhpc3QuIG9sZF9vaWQgbXVzdCBiZSBub24tTlVMTC4KKyAqCisgKiBTZWUgdGhlIGFib3ZlIGNvbW1lbnQgIlJlZmVyZW5jZSB0cmFuc2FjdGlvbiB1cGRhdGVzIiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24uCisgKi8KK2ludCByZWZfdHJhbnNhY3Rpb25fdmVyaWZ5KHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKiBOYW1pbmcgY29uZmxpY3QgKGZvciBleGFtcGxlLCB0aGUgcmVmIG5hbWVzIEEgYW5kIEEvQiBjb25mbGljdCkuICovCisjZGVmaW5lIFRSQU5TQUNUSU9OX05BTUVfQ09ORkxJQ1QgLTEKKy8qIEFsbCBvdGhlciBlcnJvcnMuICovCisjZGVmaW5lIFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1IgLTIKKworLyoKKyAqIFBlcmZvcm0gdGhlIHByZXBhcmF0b3J5IHN0YWdlcyBvZiBjb21taXR0aW5nIGB0cmFuc2FjdGlvbmAuIEFjcXVpcmUKKyAqIGFueSBuZWVkZWQgbG9ja3MsIGNoZWNrIHByZWNvbmRpdGlvbnMsIGV0Yy47IGJhc2ljYWxseSwgZG8gYXMgbXVjaAorICogYXMgcG9zc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHRyYW5zYWN0aW9uIHdpbGwgYmUgYWJsZSB0byBnbworICogdGhyb3VnaCwgc3RvcHBpbmcganVzdCBzaG9ydCBvZiBtYWtpbmcgYW55IGlycmV2b2NhYmxlIG9yCisgKiB1c2VyLXZpc2libGUgY2hhbmdlcy4gVGhlIHVwZGF0ZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNhbgorICogYmUgZmluaXNoZWQgdXAgYnkgY2FsbGluZyBgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCgpYCBvciByb2xsZWQgYmFjaworICogYnkgY2FsbGluZyBgcmVmX3RyYW5zYWN0aW9uX2Fib3J0KClgLgorICoKKyAqIE9uIHN1Y2Nlc3MsIHJldHVybiAwIGFuZCBsZWF2ZSB0aGUgdHJhbnNhY3Rpb24gaW4gInByZXBhcmVkIiBzdGF0ZS4KKyAqIE9uIGZhaWx1cmUsIGFib3J0IHRoZSB0cmFuc2FjdGlvbiwgd3JpdGUgYW4gZXJyb3IgbWVzc2FnZSB0byBgZXJyYCwKKyAqIGFuZCByZXR1cm4gb25lIG9mIHRoZSBgVFJBTlNBQ1RJT05fKmAgY29uc3RhbnRzLgorICoKKyAqIENhbGxlcnMgd2hvIGRvbid0IG5lZWQgc3VjaCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIGNvbW1pdHRpbmcKKyAqIHJlZmVyZW5jZSB0cmFuc2FjdGlvbnMgc2hvdWxkIGp1c3QgY2FsbCBgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCgpYC4KKyAqLworaW50IHJlZl90cmFuc2FjdGlvbl9wcmVwYXJlKHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKmVycik7CisKKy8qCisgKiBDb21taXQgYWxsIG9mIHRoZSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIHF1ZXVlZCBpbiB0cmFuc2FjdGlvbiwgYXMKKyAqIGF0b21pY2FsbHkgYXMgcG9zc2libGUuIE9uIHN1Y2Nlc3MsIHJldHVybiAwIGFuZCBsZWF2ZSB0aGUKKyAqIHRyYW5zYWN0aW9uIGluICJjbG9zZWQiIHN0YXRlLiBPbiBmYWlsdXJlLCByb2xsIGJhY2sgdGhlCisgKiB0cmFuc2FjdGlvbiwgd3JpdGUgYW4gZXJyb3IgbWVzc2FnZSB0byBgZXJyYCwgYW5kIHJldHVybiBvbmUgb2YgdGhlCisgKiBgVFJBTlNBQ1RJT05fKmAgY29uc3RhbnRzCisgKi8KK2ludCByZWZfdHJhbnNhY3Rpb25fY29tbWl0KHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKworLyoKKyAqIEFib3J0IGB0cmFuc2FjdGlvbmAsIHdoaWNoIGhhcyBiZWVuIGJlZ3VuIGFuZCBwb3NzaWJseSBwcmVwYXJlZCwKKyAqIGJ1dCBub3QgeWV0IGNvbW1pdHRlZC4KKyAqLworaW50IHJlZl90cmFuc2FjdGlvbl9hYm9ydChzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKworLyoKKyAqIExpa2UgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCgpLCBidXQgb3B0aW1pemVkIGZvciBjcmVhdGluZworICogcmVmZXJlbmNlcyB3aGVuIG9yaWdpbmFsbHkgaW5pdGlhbGl6aW5nIGEgcmVwb3NpdG9yeSAoZS5nLiwgYnkgImdpdAorICogY2xvbmUiKS4gSXQgd3JpdGVzIHRoZSBuZXcgcmVmZXJlbmNlcyBkaXJlY3RseSB0byBwYWNrZWQtcmVmcworICogd2l0aG91dCBsb2NraW5nIHRoZSBpbmRpdmlkdWFsIHJlZmVyZW5jZXMuCisgKgorICogSXQgaXMgYSBidWcgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlcmUgbWlnaHQgYmUgb3RoZXIKKyAqIHByb2Nlc3NlcyBhY2Nlc3NpbmcgdGhlIHJlcG9zaXRvcnkgb3IgaWYgdGhlcmUgYXJlIGV4aXN0aW5nCisgKiByZWZlcmVuY2VzIHRoYXQgbWlnaHQgY29uZmxpY3Qgd2l0aCB0aGUgb25lcyBiZWluZyBjcmVhdGVkLiBBbGwKKyAqIG9sZF9vaWQgdmFsdWVzIG11c3QgZWl0aGVyIGJlIGFic2VudCBvciBudWxsX29pZC4KKyAqLworaW50IGluaXRpYWxfcmVmX3RyYW5zYWN0aW9uX2NvbW1pdChzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKgorICogRnJlZSBgKnRyYW5zYWN0aW9uYCBhbmQgYWxsIGFzc29jaWF0ZWQgZGF0YS4KKyAqLwordm9pZCByZWZfdHJhbnNhY3Rpb25fZnJlZShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbik7CisKKy8qKgorICogTG9jaywgdXBkYXRlLCBhbmQgdW5sb2NrIGEgc2luZ2xlIHJlZmVyZW5jZS4gVGhpcyBmdW5jdGlvbgorICogYmFzaWNhbGx5IGRvZXMgYSB0cmFuc2FjdGlvbiBjb250YWluaW5nIGEgc2luZ2xlIGNhbGwgdG8KKyAqIHJlZl90cmFuc2FjdGlvbl91cGRhdGUoKS4gVGhlIHBhcmFtZXRlcnMgdG8gdGhpcyBmdW5jdGlvbiBoYXZlIHRoZQorICogc2FtZSBtZWFuaW5nIGFzIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlcnMgdG8KKyAqIHJlZl90cmFuc2FjdGlvbl91cGRhdGUoKS4gSGFuZGxlIGVycm9ycyBhcyByZXF1ZXN0ZWQgYnkgdGhlIGBvbmVycmAKKyAqIGFyZ3VtZW50LgorICovCitpbnQgcmVmc191cGRhdGVfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKm1zZywgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gYWN0aW9uX29uX2VyciBvbmVycik7CitpbnQgdXBkYXRlX3JlZihjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgZW51bSBhY3Rpb25fb25fZXJyIG9uZXJyKTsKKworaW50IHBhcnNlX2hpZGVfcmVmc19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgY29uc3QgY2hhciAqKTsKKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYSByZWYgaXMgaGlkZGVuLiBJZiBubyBuYW1lc3BhY2UgaXMgc2V0LCBib3RoIHRoZSBmaXJzdCBhbmQKKyAqIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHBvaW50IHRvIHRoZSBmdWxsIHJlZiBuYW1lLiBJZiBhIG5hbWVzcGFjZSBpcyBzZXQgYW5kCisgKiB0aGUgcmVmIGlzIGluc2lkZSB0aGF0IG5hbWVzcGFjZSwgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhIHBvaW50ZXIgdG8gdGhlCisgKiBuYW1lIG9mIHRoZSByZWYgd2l0aCB0aGUgbmFtZXNwYWNlIHByZWZpeCByZW1vdmVkLiBJZiBhIG5hbWVzcGFjZSBpcyBzZXQgYW5kCisgKiB0aGUgcmVmIGlzIG91dHNpZGUgdGhhdCBuYW1lc3BhY2UsIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgTlVMTC4gVGhlIHNlY29uZAorICogcGFyYW1ldGVyIGFsd2F5cyBwb2ludHMgdG8gdGhlIGZ1bGwgcmVmIG5hbWUuCisgKi8KK2ludCByZWZfaXNfaGlkZGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworZW51bSByZWZfdHlwZSB7CisJUkVGX1RZUEVfUEVSX1dPUktUUkVFLAkgIC8qIHJlZnMgaW5zaWRlIHJlZnMvIGJ1dCBub3Qgc2hhcmVkICAgICAgICovCisJUkVGX1RZUEVfUFNFVURPUkVGLAkgIC8qIHJlZnMgb3V0c2lkZSByZWZzLyBpbiBjdXJyZW50IHdvcmt0cmVlICovCisJUkVGX1RZUEVfTUFJTl9QU0VVRE9SRUYsICAvKiBwc2V1ZG8gcmVmcyBmcm9tIHRoZSBtYWluIHdvcmt0cmVlICAgICAqLworCVJFRl9UWVBFX09USEVSX1BTRVVET1JFRiwgLyogcHNldWRvIHJlZnMgZnJvbSBvdGhlciB3b3JrdHJlZXMgICAgICAgKi8KKwlSRUZfVFlQRV9OT1JNQUwsCSAgLyogbm9ybWFsL3NoYXJlZCByZWZzIGluc2lkZSByZWZzLyAgICAgICAgKi8KK307CisKK2VudW0gcmVmX3R5cGUgcmVmX3R5cGUoY29uc3QgY2hhciAqcmVmbmFtZSk7CisKK2VudW0gZXhwaXJlX3JlZmxvZ19mbGFncyB7CisJRVhQSVJFX1JFRkxPR1NfRFJZX1JVTiA9IDEgPDwgMCwKKwlFWFBJUkVfUkVGTE9HU19VUERBVEVfUkVGID0gMSA8PCAxLAorCUVYUElSRV9SRUZMT0dTX1ZFUkJPU0UgPSAxIDw8IDIsCisJRVhQSVJFX1JFRkxPR1NfUkVXUklURSA9IDEgPDwgMworfTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlIGlzIHVzZWQgZm9yIHJlZmxvZyBleHBpcmF0aW9uLiBUaGUgY2FsbGVyCisgKiBjYWxscyByZWZsb2dfZXhwaXJlKCksIHN1cHBseWluZyBpdCB3aXRoIHRocmVlIGNhbGxiYWNrIGZ1bmN0aW9ucywKKyAqIG9mIHRoZSBmb2xsb3dpbmcgdHlwZXMuIFRoZSBjYWxsYmFjayBmdW5jdGlvbnMgZGVmaW5lIHRoZQorICogZXhwaXJhdGlvbiBwb2xpY3kgdGhhdCBpcyBkZXNpcmVkLgorICoKKyAqIHJlZmxvZ19leHBpcnlfcHJlcGFyZV9mbiAtLSBDYWxsZWQgb25jZSBhZnRlciB0aGUgcmVmZXJlbmNlIGlzCisgKiAgICAgbG9ja2VkLgorICoKKyAqIHJlZmxvZ19leHBpcnlfc2hvdWxkX3BydW5lX2ZuIC0tIENhbGxlZCBvbmNlIGZvciBlYWNoIGVudHJ5IGluIHRoZQorICogICAgIGV4aXN0aW5nIHJlZmxvZy4gSXQgc2hvdWxkIHJldHVybiB0cnVlIGlmZiB0aGF0IGVudHJ5IHNob3VsZCBiZQorICogICAgIHBydW5lZC4KKyAqCisgKiByZWZsb2dfZXhwaXJ5X2NsZWFudXBfZm4gLS0gQ2FsbGVkIG9uY2UgYmVmb3JlIHRoZSByZWZlcmVuY2UgaXMKKyAqICAgICB1bmxvY2tlZCBhZ2Fpbi4KKyAqLwordHlwZWRlZiB2b2lkIHJlZmxvZ19leHBpcnlfcHJlcGFyZV9mbihjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICAgICB2b2lkICpjYl9kYXRhKTsKK3R5cGVkZWYgaW50IHJlZmxvZ19leHBpcnlfc2hvdWxkX3BydW5lX2ZuKHN0cnVjdCBvYmplY3RfaWQgKm9vaWQsCisJCQkJCSAgc3RydWN0IG9iamVjdF9pZCAqbm9pZCwKKwkJCQkJICBjb25zdCBjaGFyICplbWFpbCwKKwkJCQkJICB0aW1lc3RhbXBfdCB0aW1lc3RhbXAsIGludCB0eiwKKwkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKTsKK3R5cGVkZWYgdm9pZCByZWZsb2dfZXhwaXJ5X2NsZWFudXBfZm4odm9pZCAqY2JfZGF0YSk7CisKKy8qCisgKiBFeHBpcmUgcmVmbG9nIGVudHJpZXMgZm9yIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlLiBvaWQgaXMgdGhlIG9sZAorICogdmFsdWUgb2YgdGhlIHJlZmVyZW5jZS4gZmxhZ3MgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgY29uc3RhbnRzIGluCisgKiBlbnVtIGV4cGlyZV9yZWZsb2dfZmxhZ3MuIFRoZSB0aHJlZSBmdW5jdGlvbiBwb2ludGVycyBhcmUgZGVzY3JpYmVkCisgKiBhYm92ZS4gT24gc3VjY2VzcywgcmV0dXJuIHplcm8uCisgKi8KK2ludCByZWZzX3JlZmxvZ19leHBpcmUoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJICAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCSAgICAgICByZWZsb2dfZXhwaXJ5X3ByZXBhcmVfZm4gcHJlcGFyZV9mbiwKKwkJICAgICAgIHJlZmxvZ19leHBpcnlfc2hvdWxkX3BydW5lX2ZuIHNob3VsZF9wcnVuZV9mbiwKKwkJICAgICAgIHJlZmxvZ19leHBpcnlfY2xlYW51cF9mbiBjbGVhbnVwX2ZuLAorCQkgICAgICAgdm9pZCAqcG9saWN5X2NiX2RhdGEpOworaW50IHJlZmxvZ19leHBpcmUoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgIHVuc2lnbmVkIGludCBmbGFncywKKwkJICByZWZsb2dfZXhwaXJ5X3ByZXBhcmVfZm4gcHJlcGFyZV9mbiwKKwkJICByZWZsb2dfZXhwaXJ5X3Nob3VsZF9wcnVuZV9mbiBzaG91bGRfcHJ1bmVfZm4sCisJCSAgcmVmbG9nX2V4cGlyeV9jbGVhbnVwX2ZuIGNsZWFudXBfZm4sCisJCSAgdm9pZCAqcG9saWN5X2NiX2RhdGEpOworCitpbnQgcmVmX3N0b3JhZ2VfYmFja2VuZF9leGlzdHMoY29uc3QgY2hhciAqbmFtZSk7CisKK3N0cnVjdCByZWZfc3RvcmUgKmdldF9tYWluX3JlZl9zdG9yZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisKKy8qKgorICogU3VibW9kdWxlcworICogLS0tLS0tLS0tLQorICoKKyAqIElmIHlvdSB3YW50IHRvIGl0ZXJhdGUgdGhlIHJlZnMgb2YgYSBzdWJtb2R1bGUgeW91IGZpcnN0IG5lZWQgdG8gYWRkIHRoZQorICogc3VibW9kdWxlcyBvYmplY3QgZGF0YWJhc2UuIFlvdSBjYW4gZG8gdGhpcyBieSBhIGNvZGUtc25pcHBldCBsaWtlCisgKiB0aGlzOgorICoKKyAqIAljb25zdCBjaGFyICpwYXRoID0gInBhdGgvdG8vc3VibW9kdWxlIgorICogCWlmIChhZGRfc3VibW9kdWxlX29kYihwYXRoKSkKKyAqIAkJZGllKCJFcnJvciBzdWJtb2R1bGUgJyVzJyBub3QgcG9wdWxhdGVkLiIsIHBhdGgpOworICoKKyAqIGBhZGRfc3VibW9kdWxlX29kYigpYCB3aWxsIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MuIElmIHlvdQorICogZG8gbm90IGRvIHRoaXMgeW91IHdpbGwgZ2V0IGFuIGVycm9yIGZvciBlYWNoIHJlZiB0aGF0IGl0IGRvZXMgbm90IHBvaW50CisgKiB0byBhIHZhbGlkIG9iamVjdC4KKyAqCisgKiBOb3RlOiBBcyBhIHNpZGUtZWZmZWN0IG9mIHRoaXMgeW91IGNhbm5vdCBzYWZlbHkgYXNzdW1lIHRoYXQgYWxsCisgKiBvYmplY3RzIHlvdSBsb29rdXAgYXJlIGF2YWlsYWJsZSBpbiBzdXBlcnByb2plY3QuIEFsbCBzdWJtb2R1bGUgb2JqZWN0cworICogd2lsbCBiZSBhdmFpbGFibGUgdGhlIHNhbWUgd2F5IGFzIHRoZSBzdXBlcnByb2plY3RzIG9iamVjdHMuCisgKgorICogRXhhbXBsZToKKyAqIC0tLS0tLS0tCisgKgorICogLS0tLQorICogc3RhdGljIGludCBoYW5kbGVfcmVtb3RlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLAorICogCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCisgKiB7CisgKiAJc3RydWN0IHN0cmJ1ZiAqb3V0cHV0ID0gY2JfZGF0YTsKKyAqIAlzdHJidWZfYWRkZihvdXRwdXQsICIlc1xuIiwgcmVmbmFtZSk7CisgKiAJcmV0dXJuIDA7CisgKiB9CisgKgorICovCisKKy8qCisgKiBSZXR1cm4gdGhlIHJlZl9zdG9yZSBpbnN0YW5jZSBmb3IgdGhlIHNwZWNpZmllZCBzdWJtb2R1bGUuIEZvciB0aGUKKyAqIG1haW4gcmVwb3NpdG9yeSwgdXNlIHN1Ym1vZHVsZT09TlVMTDsgc3VjaCBhIGNhbGwgY2Fubm90IGZhaWwuIEZvcgorICogYSBzdWJtb2R1bGUsIHRoZSBzdWJtb2R1bGUgbXVzdCBleGlzdCBhbmQgYmUgYSBub25iYXJlIHJlcG9zaXRvcnksCisgKiBvdGhlcndpc2UgcmV0dXJuIE5VTEwuIElmIHRoZSByZXF1ZXN0ZWQgcmVmZXJlbmNlIHN0b3JlIGhhcyBub3QgeWV0CisgKiBiZWVuIGluaXRpYWxpemVkLCBpbml0aWFsaXplIGl0IGZpcnN0LgorICoKKyAqIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgc3VibW9kdWxlPT0iIiBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzCisgKiBzdWJtb2R1bGU9PU5VTEwuCisgKi8KK3N0cnVjdCByZWZfc3RvcmUgKmdldF9zdWJtb2R1bGVfcmVmX3N0b3JlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSk7CitzdHJ1Y3QgcmVmX3N0b3JlICpnZXRfd29ya3RyZWVfcmVmX3N0b3JlKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QpOworCisjZW5kaWYgLyogUkVGU19IICovCmRpZmYgLS1naXQgYS9yZWZzL2ZpbGVzLWJhY2tlbmQuYyBiL3JlZnMvZmlsZXMtYmFja2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MTZjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZzL2ZpbGVzLWJhY2tlbmQuYwpAQCAtMCwwICsxLDMyMDIgQEAKKyNpbmNsdWRlICIuLi9jYWNoZS5oIgorI2luY2x1ZGUgIi4uL2NvbmZpZy5oIgorI2luY2x1ZGUgIi4uL3JlZnMuaCIKKyNpbmNsdWRlICJyZWZzLWludGVybmFsLmgiCisjaW5jbHVkZSAicmVmLWNhY2hlLmgiCisjaW5jbHVkZSAicGFja2VkLWJhY2tlbmQuaCIKKyNpbmNsdWRlICIuLi9pdGVyYXRvci5oIgorI2luY2x1ZGUgIi4uL2Rpci1pdGVyYXRvci5oIgorI2luY2x1ZGUgIi4uL2xvY2tmaWxlLmgiCisjaW5jbHVkZSAiLi4vb2JqZWN0LmgiCisjaW5jbHVkZSAiLi4vZGlyLmgiCisjaW5jbHVkZSAiLi4vY2hkaXItbm90aWZ5LmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKworLyoKKyAqIFRoaXMgYmFja2VuZCB1c2VzIHRoZSBmb2xsb3dpbmcgZmxhZ3MgaW4gYHJlZl91cGRhdGU6OmZsYWdzYCBmb3IKKyAqIGludGVybmFsIGJvb2trZWVwaW5nIHB1cnBvc2VzLiBUaGVpciBudW1lcmljYWwgdmFsdWVzIG11c3Qgbm90CisgKiBjb25mbGljdCB3aXRoIFJFRl9OT19ERVJFRiwgUkVGX0ZPUkNFX0NSRUFURV9SRUZMT0csIFJFRl9IQVZFX05FVywKKyAqIFJFRl9IQVZFX09MRCwgb3IgUkVGX0lTX1BSVU5JTkcsIHdoaWNoIGFyZSBhbHNvIHN0b3JlZCBpbgorICogYHJlZl91cGRhdGU6OmZsYWdzYC4KKyAqLworCisvKgorICogVXNlZCBhcyBhIGZsYWcgaW4gcmVmX3VwZGF0ZTo6ZmxhZ3Mgd2hlbiBhIGxvb3NlIHJlZiBpcyBiZWluZworICogcHJ1bmVkLiBUaGlzIGZsYWcgbXVzdCBvbmx5IGJlIHVzZWQgd2hlbiBSRUZfTk9fREVSRUYgaXMgc2V0LgorICovCisjZGVmaW5lIFJFRl9JU19QUlVOSU5HICgxIDw8IDQpCisKKy8qCisgKiBGbGFnIHBhc3NlZCB0byBsb2NrX3JlZl9zaGExX2Jhc2ljKCkgdGVsbGluZyBpdCB0byB0b2xlcmF0ZSBicm9rZW4KKyAqIHJlZnMgKGkuZS4sIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBpcyBhYm91dCB0byBiZSBkZWxldGVkIGFueXdheSkuCisgKi8KKyNkZWZpbmUgUkVGX0RFTEVUSU5HICgxIDw8IDUpCisKKy8qCisgKiBVc2VkIGFzIGEgZmxhZyBpbiByZWZfdXBkYXRlOjpmbGFncyB3aGVuIHRoZSBsb2NrZmlsZSBuZWVkcyB0byBiZQorICogY29tbWl0dGVkLgorICovCisjZGVmaW5lIFJFRl9ORUVEU19DT01NSVQgKDEgPDwgNikKKworLyoKKyAqIFVzZWQgYXMgYSBmbGFnIGluIHJlZl91cGRhdGU6OmZsYWdzIHdoZW4gd2Ugd2FudCB0byBsb2cgYSByZWYKKyAqIHVwZGF0ZSBidXQgbm90IGFjdHVhbGx5IHBlcmZvcm0gaXQuICBUaGlzIGlzIHVzZWQgd2hlbiBhIHN5bWJvbGljCisgKiByZWYgdXBkYXRlIGlzIHNwbGl0IHVwLgorICovCisjZGVmaW5lIFJFRl9MT0dfT05MWSAoMSA8PCA3KQorCisvKgorICogVXNlZCBhcyBhIGZsYWcgaW4gcmVmX3VwZGF0ZTo6ZmxhZ3Mgd2hlbiB0aGUgcmVmX3VwZGF0ZSB3YXMgdmlhIGFuCisgKiB1cGRhdGUgdG8gSEVBRC4KKyAqLworI2RlZmluZSBSRUZfVVBEQVRFX1ZJQV9IRUFEICgxIDw8IDgpCisKKy8qCisgKiBVc2VkIGFzIGEgZmxhZyBpbiByZWZfdXBkYXRlOjpmbGFncyB3aGVuIHRoZSBsb29zZSByZWZlcmVuY2UgaGFzCisgKiBiZWVuIGRlbGV0ZWQuCisgKi8KKyNkZWZpbmUgUkVGX0RFTEVURURfTE9PU0UgKDEgPDwgOSkKKworc3RydWN0IHJlZl9sb2NrIHsKKwljaGFyICpyZWZfbmFtZTsKKwlzdHJ1Y3QgbG9ja19maWxlIGxrOworCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZDsKK307CisKK3N0cnVjdCBmaWxlc19yZWZfc3RvcmUgeworCXN0cnVjdCByZWZfc3RvcmUgYmFzZTsKKwl1bnNpZ25lZCBpbnQgc3RvcmVfZmxhZ3M7CisKKwljaGFyICpnaXRkaXI7CisJY2hhciAqZ2l0Y29tbW9uZGlyOworCisJc3RydWN0IHJlZl9jYWNoZSAqbG9vc2U7CisKKwlzdHJ1Y3QgcmVmX3N0b3JlICpwYWNrZWRfcmVmX3N0b3JlOworfTsKKworc3RhdGljIHZvaWQgY2xlYXJfbG9vc2VfcmVmX2NhY2hlKHN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnMpCit7CisJaWYgKHJlZnMtPmxvb3NlKSB7CisJCWZyZWVfcmVmX2NhY2hlKHJlZnMtPmxvb3NlKTsKKwkJcmVmcy0+bG9vc2UgPSBOVUxMOworCX0KK30KKworLyoKKyAqIENyZWF0ZSBhIG5ldyBzdWJtb2R1bGUgcmVmIGNhY2hlIGFuZCBhZGQgaXQgdG8gdGhlIGludGVybmFsCisgKiBzZXQgb2YgY2FjaGVzLgorICovCitzdGF0aWMgc3RydWN0IHJlZl9zdG9yZSAqZmlsZXNfcmVmX3N0b3JlX2NyZWF0ZShjb25zdCBjaGFyICpnaXRkaXIsCisJCQkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZWZzKSk7CisJc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlID0gKHN0cnVjdCByZWZfc3RvcmUgKilyZWZzOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWJhc2VfcmVmX3N0b3JlX2luaXQocmVmX3N0b3JlLCAmcmVmc19iZV9maWxlcyk7CisJcmVmcy0+c3RvcmVfZmxhZ3MgPSBmbGFnczsKKworCXJlZnMtPmdpdGRpciA9IHhzdHJkdXAoZ2l0ZGlyKTsKKwlnZXRfY29tbW9uX2Rpcl9ub2Vudigmc2IsIGdpdGRpcik7CisJcmVmcy0+Z2l0Y29tbW9uZGlyID0gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzL3BhY2tlZC1yZWZzIiwgcmVmcy0+Z2l0Y29tbW9uZGlyKTsKKwlyZWZzLT5wYWNrZWRfcmVmX3N0b3JlID0gcGFja2VkX3JlZl9zdG9yZV9jcmVhdGUoc2IuYnVmLCBmbGFncyk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCWNoZGlyX25vdGlmeV9yZXBhcmVudCgiZmlsZXMtYmFja2VuZCAkR0lUX0RJUiIsCisJCQkgICAgICAmcmVmcy0+Z2l0ZGlyKTsKKwljaGRpcl9ub3RpZnlfcmVwYXJlbnQoImZpbGVzLWJhY2tlbmQgJEdJVF9DT01NT05ESVIiLAorCQkJICAgICAgJnJlZnMtPmdpdGNvbW1vbmRpcik7CisKKwlyZXR1cm4gcmVmX3N0b3JlOworfQorCisvKgorICogRGllIGlmIHJlZnMgaXMgbm90IHRoZSBtYWluIHJlZiBzdG9yZS4gY2FsbGVyIGlzIHVzZWQgaW4gYW55CisgKiBuZWNlc3NhcnkgZXJyb3IgbWVzc2FnZXMuCisgKi8KK3N0YXRpYyB2b2lkIGZpbGVzX2Fzc2VydF9tYWluX3JlcG9zaXRvcnkoc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcywKKwkJCQkJIGNvbnN0IGNoYXIgKmNhbGxlcikKK3sKKwlpZiAocmVmcy0+c3RvcmVfZmxhZ3MgJiBSRUZfU1RPUkVfTUFJTikKKwkJcmV0dXJuOworCisJQlVHKCJvcGVyYXRpb24gJXMgb25seSBhbGxvd2VkIGZvciBtYWluIHJlZiBzdG9yZSIsIGNhbGxlcik7Cit9CisKKy8qCisgKiBEb3duY2FzdCByZWZfc3RvcmUgdG8gZmlsZXNfcmVmX3N0b3JlLiBEaWUgaWYgcmVmX3N0b3JlIGlzIG5vdCBhCisgKiBmaWxlc19yZWZfc3RvcmUuIHJlcXVpcmVkX2ZsYWdzIGlzIGNvbXBhcmVkIHdpdGggcmVmX3N0b3JlJ3MKKyAqIHN0b3JlX2ZsYWdzIHRvIGVuc3VyZSB0aGUgcmVmX3N0b3JlIGhhcyBhbGwgcmVxdWlyZWQgY2FwYWJpbGl0aWVzLgorICogImNhbGxlciIgaXMgdXNlZCBpbiBhbnkgbmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2VzLgorICovCitzdGF0aWMgc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqZmlsZXNfZG93bmNhc3Qoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmxhZ3MsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKmNhbGxlcikKK3sKKwlzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzOworCisJaWYgKHJlZl9zdG9yZS0+YmUgIT0gJnJlZnNfYmVfZmlsZXMpCisJCUJVRygicmVmX3N0b3JlIGlzIHR5cGUgXCIlc1wiIG5vdCBcImZpbGVzXCIgaW4gJXMiLAorCQkgICAgcmVmX3N0b3JlLT5iZS0+bmFtZSwgY2FsbGVyKTsKKworCXJlZnMgPSAoc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqKXJlZl9zdG9yZTsKKworCWlmICgocmVmcy0+c3RvcmVfZmxhZ3MgJiByZXF1aXJlZF9mbGFncykgIT0gcmVxdWlyZWRfZmxhZ3MpCisJCUJVRygib3BlcmF0aW9uICVzIHJlcXVpcmVzIGFiaWxpdGllcyAweCV4LCBidXQgb25seSBoYXZlIDB4JXgiLAorCQkgICAgY2FsbGVyLCByZXF1aXJlZF9mbGFncywgcmVmcy0+c3RvcmVfZmxhZ3MpOworCisJcmV0dXJuIHJlZnM7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGVzX3JlZmxvZ19wYXRoX290aGVyX3dvcmt0cmVlcyhzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzLAorCQkJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwljb25zdCBjaGFyICpyZWFsX3JlZjsKKwljb25zdCBjaGFyICp3b3JrdHJlZV9uYW1lOworCWludCBsZW5ndGg7CisKKwlpZiAocGFyc2Vfd29ya3RyZWVfcmVmKHJlZm5hbWUsICZ3b3JrdHJlZV9uYW1lLCAmbGVuZ3RoLCAmcmVhbF9yZWYpKQorCQlCVUcoInJlZm5hbWUgJXMgaXMgbm90IGEgb3RoZXItd29ya3RyZWUgcmVmIiwgcmVmbmFtZSk7CisKKwlpZiAod29ya3RyZWVfbmFtZSkKKwkJc3RyYnVmX2FkZGYoc2IsICIlcy93b3JrdHJlZXMvJS4qcy9sb2dzLyVzIiwgcmVmcy0+Z2l0Y29tbW9uZGlyLAorCQkJICAgIGxlbmd0aCwgd29ya3RyZWVfbmFtZSwgcmVhbF9yZWYpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoc2IsICIlcy9sb2dzLyVzIiwgcmVmcy0+Z2l0Y29tbW9uZGlyLAorCQkJICAgIHJlYWxfcmVmKTsKK30KKworc3RhdGljIHZvaWQgZmlsZXNfcmVmbG9nX3BhdGgoc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcywKKwkJCSAgICAgIHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlzd2l0Y2ggKHJlZl90eXBlKHJlZm5hbWUpKSB7CisJY2FzZSBSRUZfVFlQRV9QRVJfV09SS1RSRUU6CisJY2FzZSBSRUZfVFlQRV9QU0VVRE9SRUY6CisJCXN0cmJ1Zl9hZGRmKHNiLCAiJXMvbG9ncy8lcyIsIHJlZnMtPmdpdGRpciwgcmVmbmFtZSk7CisJCWJyZWFrOworCWNhc2UgUkVGX1RZUEVfT1RIRVJfUFNFVURPUkVGOgorCWNhc2UgUkVGX1RZUEVfTUFJTl9QU0VVRE9SRUY6CisJCWZpbGVzX3JlZmxvZ19wYXRoX290aGVyX3dvcmt0cmVlcyhyZWZzLCBzYiwgcmVmbmFtZSk7CisJCWJyZWFrOworCWNhc2UgUkVGX1RZUEVfTk9STUFMOgorCQlzdHJidWZfYWRkZihzYiwgIiVzL2xvZ3MvJXMiLCByZWZzLT5naXRjb21tb25kaXIsIHJlZm5hbWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoInVua25vd24gcmVmIHR5cGUgJWQgb2YgcmVmICVzIiwKKwkJICAgIHJlZl90eXBlKHJlZm5hbWUpLCByZWZuYW1lKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpbGVzX3JlZl9wYXRoKHN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnMsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSAgIGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJc3dpdGNoIChyZWZfdHlwZShyZWZuYW1lKSkgeworCWNhc2UgUkVGX1RZUEVfUEVSX1dPUktUUkVFOgorCWNhc2UgUkVGX1RZUEVfUFNFVURPUkVGOgorCQlzdHJidWZfYWRkZihzYiwgIiVzLyVzIiwgcmVmcy0+Z2l0ZGlyLCByZWZuYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBSRUZfVFlQRV9NQUlOX1BTRVVET1JFRjoKKwkJaWYgKCFza2lwX3ByZWZpeChyZWZuYW1lLCAibWFpbi13b3JrdHJlZS8iLCAmcmVmbmFtZSkpCisJCQlCVUcoInJlZiAlcyBpcyBub3QgYSBtYWluIHBzZXVkb3JlZiIsIHJlZm5hbWUpOworCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgUkVGX1RZUEVfT1RIRVJfUFNFVURPUkVGOgorCWNhc2UgUkVGX1RZUEVfTk9STUFMOgorCQlzdHJidWZfYWRkZihzYiwgIiVzLyVzIiwgcmVmcy0+Z2l0Y29tbW9uZGlyLCByZWZuYW1lKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCJ1bmtub3duIHJlZiB0eXBlICVkIG9mIHJlZiAlcyIsCisJCSAgICByZWZfdHlwZShyZWZuYW1lKSwgcmVmbmFtZSk7CisJfQorfQorCisvKgorICogTWFudWFsbHkgYWRkIHJlZnMvYmlzZWN0LCByZWZzL3Jld3JpdHRlbiBhbmQgcmVmcy93b3JrdHJlZSwgd2hpY2gsIGJlaW5nCisgKiBwZXItd29ya3RyZWUsIG1pZ2h0IG5vdCBhcHBlYXIgaW4gdGhlIGRpcmVjdG9yeSBsaXN0aW5nIGZvcgorICogcmVmcy8gaW4gdGhlIG1haW4gcmVwby4KKyAqLworc3RhdGljIHZvaWQgYWRkX3Blcl93b3JrdHJlZV9lbnRyaWVzX3RvX2RpcihzdHJ1Y3QgcmVmX2RpciAqZGlyLCBjb25zdCBjaGFyICpkaXJuYW1lKQoreworCWNvbnN0IGNoYXIgKnByZWZpeGVzW10gPSB7ICJyZWZzL2Jpc2VjdC8iLCAicmVmcy93b3JrdHJlZS8iLCAicmVmcy9yZXdyaXR0ZW4vIiB9OworCWludCBpcDsKKworCWlmIChzdHJjbXAoZGlybmFtZSwgInJlZnMvIikpCisJCXJldHVybjsKKworCWZvciAoaXAgPSAwOyBpcCA8IEFSUkFZX1NJWkUocHJlZml4ZXMpOyBpcCsrKSB7CisJCWNvbnN0IGNoYXIgKnByZWZpeCA9IHByZWZpeGVzW2lwXTsKKwkJaW50IHByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KTsKKwkJc3RydWN0IHJlZl9lbnRyeSAqY2hpbGRfZW50cnk7CisJCWludCBwb3M7CisKKwkJcG9zID0gc2VhcmNoX3JlZl9kaXIoZGlyLCBwcmVmaXgsIHByZWZpeF9sZW4pOworCQlpZiAocG9zID49IDApCisJCQljb250aW51ZTsKKwkJY2hpbGRfZW50cnkgPSBjcmVhdGVfZGlyX2VudHJ5KGRpci0+Y2FjaGUsIHByZWZpeCwgcHJlZml4X2xlbiwgMSk7CisJCWFkZF9lbnRyeV90b19kaXIoZGlyLCBjaGlsZF9lbnRyeSk7CisJfQorfQorCisvKgorICogUmVhZCB0aGUgbG9vc2UgcmVmZXJlbmNlcyBmcm9tIHRoZSBuYW1lc3BhY2UgZGlybmFtZSBpbnRvIGRpcgorICogKHdpdGhvdXQgcmVjdXJzaW5nKS4gIGRpcm5hbWUgbXVzdCBlbmQgd2l0aCAnLycuICBkaXIgbXVzdCBiZSB0aGUKKyAqIGRpcmVjdG9yeSBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIGRpcm5hbWUuCisgKi8KK3N0YXRpYyB2b2lkIGxvb3NlX2ZpbGxfcmVmX2RpcihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkgICAgICAgc3RydWN0IHJlZl9kaXIgKmRpciwgY29uc3QgY2hhciAqZGlybmFtZSkKK3sKKwlzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzID0KKwkJZmlsZXNfZG93bmNhc3QocmVmX3N0b3JlLCBSRUZfU1RPUkVfUkVBRCwgImZpbGxfcmVmX2RpciIpOworCURJUiAqZDsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlpbnQgZGlybmFtZWxlbiA9IHN0cmxlbihkaXJuYW1lKTsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZm5hbWU7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IHBhdGhfYmFzZWxlbjsKKworCWZpbGVzX3JlZl9wYXRoKHJlZnMsICZwYXRoLCBkaXJuYW1lKTsKKwlwYXRoX2Jhc2VsZW4gPSBwYXRoLmxlbjsKKworCWQgPSBvcGVuZGlyKHBhdGguYnVmKTsKKwlpZiAoIWQpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCQlyZXR1cm47CisJfQorCisJc3RyYnVmX2luaXQoJnJlZm5hbWUsIGRpcm5hbWVsZW4gKyAyNTcpOworCXN0cmJ1Zl9hZGQoJnJlZm5hbWUsIGRpcm5hbWUsIGRpcm5hbWVsZW4pOworCisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBzdGF0IHN0OworCQlpbnQgZmxhZzsKKworCQlpZiAoZGUtPmRfbmFtZVswXSA9PSAnLicpCisJCQljb250aW51ZTsKKwkJaWYgKGVuZHNfd2l0aChkZS0+ZF9uYW1lLCAiLmxvY2siKSkKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfYWRkc3RyKCZyZWZuYW1lLCBkZS0+ZF9uYW1lKTsKKwkJc3RyYnVmX2FkZHN0cigmcGF0aCwgZGUtPmRfbmFtZSk7CisJCWlmIChzdGF0KHBhdGguYnVmLCAmc3QpIDwgMCkgeworCQkJOyAvKiBzaWxlbnRseSBpZ25vcmUgKi8KKwkJfSBlbHNlIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCQlzdHJidWZfYWRkY2goJnJlZm5hbWUsICcvJyk7CisJCQlhZGRfZW50cnlfdG9fZGlyKGRpciwKKwkJCQkJIGNyZWF0ZV9kaXJfZW50cnkoZGlyLT5jYWNoZSwgcmVmbmFtZS5idWYsCisJCQkJCQkJICByZWZuYW1lLmxlbiwgMSkpOworCQl9IGVsc2UgeworCQkJaWYgKCFyZWZzX3Jlc29sdmVfcmVmX3Vuc2FmZSgmcmVmcy0+YmFzZSwKKwkJCQkJCSAgICAgcmVmbmFtZS5idWYsCisJCQkJCQkgICAgIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCQkgICAgICZvaWQsICZmbGFnKSkgeworCQkJCW9pZGNscigmb2lkKTsKKwkJCQlmbGFnIHw9IFJFRl9JU0JST0tFTjsKKwkJCX0gZWxzZSBpZiAoaXNfbnVsbF9vaWQoJm9pZCkpIHsKKwkJCQkvKgorCQkJCSAqIEl0IGlzIHNvIGFzdHJvbm9taWNhbGx5IHVubGlrZWx5CisJCQkJICogdGhhdCBudWxsX29pZCBpcyB0aGUgT0lEIG9mIGFuCisJCQkJICogYWN0dWFsIG9iamVjdCB0aGF0IHdlIGNvbnNpZGVyIGl0cworCQkJCSAqIGFwcGVhcmFuY2UgaW4gYSBsb29zZSByZWZlcmVuY2UKKwkJCQkgKiBmaWxlIHRvIGJlIHJlcG8gY29ycnVwdGlvbgorCQkJCSAqIChwcm9iYWJseSBkdWUgdG8gYSBzb2Z0d2FyZSBidWcpLgorCQkJCSAqLworCQkJCWZsYWcgfD0gUkVGX0lTQlJPS0VOOworCQkJfQorCisJCQlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVmbmFtZS5idWYsCisJCQkJCQkgUkVGTkFNRV9BTExPV19PTkVMRVZFTCkpIHsKKwkJCQlpZiAoIXJlZm5hbWVfaXNfc2FmZShyZWZuYW1lLmJ1ZikpCisJCQkJCWRpZSgibG9vc2UgcmVmbmFtZSBpcyBkYW5nZXJvdXM6ICVzIiwgcmVmbmFtZS5idWYpOworCQkJCW9pZGNscigmb2lkKTsKKwkJCQlmbGFnIHw9IFJFRl9CQURfTkFNRSB8IFJFRl9JU0JST0tFTjsKKwkJCX0KKwkJCWFkZF9lbnRyeV90b19kaXIoZGlyLAorCQkJCQkgY3JlYXRlX3JlZl9lbnRyeShyZWZuYW1lLmJ1ZiwgJm9pZCwgZmxhZykpOworCQl9CisJCXN0cmJ1Zl9zZXRsZW4oJnJlZm5hbWUsIGRpcm5hbWVsZW4pOworCQlzdHJidWZfc2V0bGVuKCZwYXRoLCBwYXRoX2Jhc2VsZW4pOworCX0KKwlzdHJidWZfcmVsZWFzZSgmcmVmbmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCWNsb3NlZGlyKGQpOworCisJYWRkX3Blcl93b3JrdHJlZV9lbnRyaWVzX3RvX2RpcihkaXIsIGRpcm5hbWUpOworfQorCitzdGF0aWMgc3RydWN0IHJlZl9jYWNoZSAqZ2V0X2xvb3NlX3JlZl9jYWNoZShzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzKQoreworCWlmICghcmVmcy0+bG9vc2UpIHsKKwkJLyoKKwkJICogTWFyayB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBjb21wbGV0ZSBiZWNhdXNlIHdlCisJCSAqIGFyZSBhYm91dCB0byByZWFkIHRoZSBvbmx5IHN1YmRpcmVjdG9yeSB0aGF0IGNhbgorCQkgKiBob2xkIHJlZmVyZW5jZXM6CisJCSAqLworCQlyZWZzLT5sb29zZSA9IGNyZWF0ZV9yZWZfY2FjaGUoJnJlZnMtPmJhc2UsIGxvb3NlX2ZpbGxfcmVmX2Rpcik7CisKKwkJLyogV2UncmUgZ29pbmcgdG8gZmlsbCB0aGUgdG9wIGxldmVsIG91cnNlbHZlczogKi8KKwkJcmVmcy0+bG9vc2UtPnJvb3QtPmZsYWcgJj0gflJFRl9JTkNPTVBMRVRFOworCisJCS8qCisJCSAqIEFkZCBhbiBpbmNvbXBsZXRlIGVudHJ5IGZvciAicmVmcy8iICh0byBiZSBmaWxsZWQKKwkJICogbGF6aWx5KToKKwkJICovCisJCWFkZF9lbnRyeV90b19kaXIoZ2V0X3JlZl9kaXIocmVmcy0+bG9vc2UtPnJvb3QpLAorCQkJCSBjcmVhdGVfZGlyX2VudHJ5KHJlZnMtPmxvb3NlLCAicmVmcy8iLCA1LCAxKSk7CisJfQorCXJldHVybiByZWZzLT5sb29zZTsKK30KKworc3RhdGljIGludCBmaWxlc19yZWFkX3Jhd19yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqcmVmZXJlbnQsIHVuc2lnbmVkIGludCAqdHlwZSkKK3sKKwlzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzID0KKwkJZmlsZXNfZG93bmNhc3QocmVmX3N0b3JlLCBSRUZfU1RPUkVfUkVBRCwgInJlYWRfcmF3X3JlZiIpOworCXN0cnVjdCBzdHJidWYgc2JfY29udGVudHMgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiX3BhdGggPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpwYXRoOworCWNvbnN0IGNoYXIgKmJ1ZjsKKwljb25zdCBjaGFyICpwOworCXN0cnVjdCBzdGF0IHN0OworCWludCBmZDsKKwlpbnQgcmV0ID0gLTE7CisJaW50IHNhdmVfZXJybm87CisJaW50IHJlbWFpbmluZ19yZXRyaWVzID0gMzsKKworCSp0eXBlID0gMDsKKwlzdHJidWZfcmVzZXQoJnNiX3BhdGgpOworCisJZmlsZXNfcmVmX3BhdGgocmVmcywgJnNiX3BhdGgsIHJlZm5hbWUpOworCisJcGF0aCA9IHNiX3BhdGguYnVmOworCitzdGF0X3JlZjoKKwkvKgorCSAqIFdlIG1pZ2h0IGhhdmUgdG8gbG9vcCBiYWNrIGhlcmUgdG8gYXZvaWQgYSByYWNlCisJICogY29uZGl0aW9uOiBmaXJzdCB3ZSBsc3RhdCgpIHRoZSBmaWxlLCB0aGVuIHdlIHRyeQorCSAqIHRvIHJlYWQgaXQgYXMgYSBsaW5rIG9yIGFzIGEgZmlsZS4gIEJ1dCBpZiBzb21lYm9keQorCSAqIGNoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIGZpbGUgKGZpbGUgPC0+IGRpcmVjdG9yeQorCSAqIDwtPiBzeW1saW5rKSBiZXR3ZWVuIHRoZSBsc3RhdCgpIGFuZCByZWFkaW5nLCB0aGVuCisJICogd2UgZG9uJ3Qgd2FudCB0byByZXBvcnQgdGhhdCBhcyBhbiBlcnJvciBidXQgcmF0aGVyCisJICogdHJ5IGFnYWluIHN0YXJ0aW5nIHdpdGggdGhlIGxzdGF0KCkuCisJICoKKwkgKiBXZSdsbCBrZWVwIGEgY291bnQgb2YgdGhlIHJldHJpZXMsIHRob3VnaCwganVzdCB0byBhdm9pZAorCSAqIGFueSBjb25mdXNpbmcgc2l0dWF0aW9uIHNlbmRpbmcgdXMgaW50byBhbiBpbmZpbml0ZSBsb29wLgorCSAqLworCisJaWYgKHJlbWFpbmluZ19yZXRyaWVzLS0gPD0gMCkKKwkJZ290byBvdXQ7CisKKwlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCWdvdG8gb3V0OworCQlpZiAocmVmc19yZWFkX3Jhd19yZWYocmVmcy0+cGFja2VkX3JlZl9zdG9yZSwgcmVmbmFtZSwKKwkJCQkgICAgICBvaWQsIHJlZmVyZW50LCB0eXBlKSkgeworCQkJZXJybm8gPSBFTk9FTlQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBGb2xsb3cgIm5vcm1hbGl6ZWQiIC0gaWUgInJlZnMvLi4iIHN5bWxpbmtzIGJ5IGhhbmQgKi8KKwlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQlzdHJidWZfcmVzZXQoJnNiX2NvbnRlbnRzKTsKKwkJaWYgKHN0cmJ1Zl9yZWFkbGluaygmc2JfY29udGVudHMsIHBhdGgsIHN0LnN0X3NpemUpIDwgMCkgeworCQkJaWYgKGVycm5vID09IEVOT0VOVCB8fCBlcnJubyA9PSBFSU5WQUwpCisJCQkJLyogaW5jb25zaXN0ZW50IHdpdGggbHN0YXQ7IHJldHJ5ICovCisJCQkJZ290byBzdGF0X3JlZjsKKwkJCWVsc2UKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoc3RhcnRzX3dpdGgoc2JfY29udGVudHMuYnVmLCAicmVmcy8iKSAmJgorCQkgICAgIWNoZWNrX3JlZm5hbWVfZm9ybWF0KHNiX2NvbnRlbnRzLmJ1ZiwgMCkpIHsKKwkJCXN0cmJ1Zl9zd2FwKCZzYl9jb250ZW50cywgcmVmZXJlbnQpOworCQkJKnR5cGUgfD0gUkVGX0lTU1lNUkVGOworCQkJcmV0ID0gMDsKKwkJCWdvdG8gb3V0OworCQl9CisJCS8qCisJCSAqIEl0IGRvZXNuJ3QgbG9vayBsaWtlIGEgcmVmbmFtZTsgZmFsbCB0aHJvdWdoIHRvIGp1c3QKKwkJICogdHJlYXRpbmcgaXQgbGlrZSBhIG5vbi1zeW1saW5rLCBhbmQgcmVhZGluZyB3aGF0ZXZlciBpdAorCQkgKiBwb2ludHMgdG8uCisJCSAqLworCX0KKworCS8qIElzIGl0IGEgZGlyZWN0b3J5PyAqLworCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCS8qCisJCSAqIEV2ZW4gdGhvdWdoIHRoZXJlIGlzIGEgZGlyZWN0b3J5IHdoZXJlIHRoZSBsb29zZQorCQkgKiByZWYgaXMgc3VwcG9zZWQgdG8gYmUsIHRoZXJlIGNvdWxkIHN0aWxsIGJlIGEKKwkJICogcGFja2VkIHJlZjoKKwkJICovCisJCWlmIChyZWZzX3JlYWRfcmF3X3JlZihyZWZzLT5wYWNrZWRfcmVmX3N0b3JlLCByZWZuYW1lLAorCQkJCSAgICAgIG9pZCwgcmVmZXJlbnQsIHR5cGUpKSB7CisJCQllcnJubyA9IEVJU0RJUjsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogQW55dGhpbmcgZWxzZSwganVzdCBvcGVuIGl0IGFuZCB0cnkgdG8gdXNlIGl0IGFzCisJICogYSByZWYKKwkgKi8KKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApIHsKKwkJaWYgKGVycm5vID09IEVOT0VOVCAmJiAhU19JU0xOSyhzdC5zdF9tb2RlKSkKKwkJCS8qIGluY29uc2lzdGVudCB3aXRoIGxzdGF0OyByZXRyeSAqLworCQkJZ290byBzdGF0X3JlZjsKKwkJZWxzZQorCQkJZ290byBvdXQ7CisJfQorCXN0cmJ1Zl9yZXNldCgmc2JfY29udGVudHMpOworCWlmIChzdHJidWZfcmVhZCgmc2JfY29udGVudHMsIGZkLCAyNTYpIDwgMCkgeworCQlpbnQgc2F2ZV9lcnJubyA9IGVycm5vOworCQljbG9zZShmZCk7CisJCWVycm5vID0gc2F2ZV9lcnJubzsKKwkJZ290byBvdXQ7CisJfQorCWNsb3NlKGZkKTsKKwlzdHJidWZfcnRyaW0oJnNiX2NvbnRlbnRzKTsKKwlidWYgPSBzYl9jb250ZW50cy5idWY7CisJaWYgKHNraXBfcHJlZml4KGJ1ZiwgInJlZjoiLCAmYnVmKSkgeworCQl3aGlsZSAoaXNzcGFjZSgqYnVmKSkKKwkJCWJ1ZisrOworCisJCXN0cmJ1Zl9yZXNldChyZWZlcmVudCk7CisJCXN0cmJ1Zl9hZGRzdHIocmVmZXJlbnQsIGJ1Zik7CisJCSp0eXBlIHw9IFJFRl9JU1NZTVJFRjsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBQbGVhc2Ugbm90ZSB0aGF0IEZFVENIX0hFQUQgaGFzIGFkZGl0aW9uYWwKKwkgKiBkYXRhIGFmdGVyIHRoZSBzaGEuCisJICovCisJaWYgKHBhcnNlX29pZF9oZXgoYnVmLCBvaWQsICZwKSB8fAorCSAgICAoKnAgIT0gJ1wwJyAmJiAhaXNzcGFjZSgqcCkpKSB7CisJCSp0eXBlIHw9IFJFRl9JU0JST0tFTjsKKwkJZXJybm8gPSBFSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IDA7CisKK291dDoKKwlzYXZlX2Vycm5vID0gZXJybm87CisJc3RyYnVmX3JlbGVhc2UoJnNiX3BhdGgpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYl9jb250ZW50cyk7CisJZXJybm8gPSBzYXZlX2Vycm5vOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHVubG9ja19yZWYoc3RydWN0IHJlZl9sb2NrICpsb2NrKQoreworCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jay0+bGspOworCWZyZWUobG9jay0+cmVmX25hbWUpOworCWZyZWUobG9jayk7Cit9CisKKy8qCisgKiBMb2NrIHJlZm5hbWUsIHdpdGhvdXQgZm9sbG93aW5nIHN5bXJlZnMsIGFuZCBzZXQgKmxvY2tfcCB0byBwb2ludAorICogYXQgYSBuZXdseS1hbGxvY2F0ZWQgbG9jayBvYmplY3QuIEZpbGwgaW4gbG9jay0+b2xkX29pZCwgcmVmZXJlbnQsCisgKiBhbmQgdHlwZSBzaW1pbGFybHkgdG8gcmVhZF9yYXdfcmVmKCkuCisgKgorICogVGhlIGNhbGxlciBtdXN0IHZlcmlmeSB0aGF0IHJlZm5hbWUgaXMgYSAic2FmZSIgcmVmZXJlbmNlIG5hbWUgKGluCisgKiB0aGUgc2Vuc2Ugb2YgcmVmbmFtZV9pc19zYWZlKCkpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogSWYgdGhlIHJlZmVyZW5jZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QsIHZlcmlmeSB0aGF0IHJlZm5hbWUgZG9lc24ndAorICogaGF2ZSBhIEQvRiBjb25mbGljdCB3aXRoIGFueSBleGlzdGluZyByZWZlcmVuY2VzLiBleHRyYXMgYW5kIHNraXAKKyAqIGFyZSBwYXNzZWQgdG8gcmVmc192ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGUoKSBmb3IgdGhpcyBjaGVjay4KKyAqCisgKiBJZiBtdXN0ZXhpc3QgaXMgbm90IHNldCBhbmQgdGhlIHJlZmVyZW5jZSBpcyBub3QgZm91bmQgb3IgaXMKKyAqIGJyb2tlbiwgbG9jayB0aGUgcmVmZXJlbmNlIGFueXdheSBidXQgY2xlYXIgb2xkX29pZC4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLiBPbiBmYWlsdXJlLCB3cml0ZSBhbiBlcnJvciBtZXNzYWdlIHRvIGVyciBhbmQKKyAqIHJldHVybiBUUkFOU0FDVElPTl9OQU1FX0NPTkZMSUNUIG9yIFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1IuCisgKgorICogSW1wbGVtZW50YXRpb24gbm90ZTogVGhpcyBmdW5jdGlvbiBpcyBiYXNpY2FsbHkKKyAqCisgKiAgICAgbG9jayByZWZlcmVuY2UKKyAqICAgICByZWFkX3Jhd19yZWYoKQorICoKKyAqIGJ1dCBpdCBpbmNsdWRlcyBhIGxvdCBtb3JlIGNvZGUgdG8KKyAqIC0gRGVhbCB3aXRoIHBvc3NpYmxlIHJhY2VzIHdpdGggb3RoZXIgcHJvY2Vzc2VzCisgKiAtIEF2b2lkIGNhbGxpbmcgcmVmc192ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGUoKSB3aGVuIGl0IGNhbiBiZQorICogICBhdm9pZGVkLCBuYW1lbHkgaWYgd2Ugd2VyZSBzdWNjZXNzZnVsbHkgYWJsZSB0byByZWFkIHRoZSByZWYKKyAqIC0gR2VuZXJhdGUgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZXMgaW4gdGhlIGNhc2Ugb2YgZmFpbHVyZQorICovCitzdGF0aWMgaW50IGxvY2tfcmF3X3JlZihzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzLAorCQkJY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IG11c3RleGlzdCwKKwkJCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZXh0cmFzLAorCQkJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpza2lwLAorCQkJc3RydWN0IHJlZl9sb2NrICoqbG9ja19wLAorCQkJc3RydWN0IHN0cmJ1ZiAqcmVmZXJlbnQsCisJCQl1bnNpZ25lZCBpbnQgKnR5cGUsCisJCQlzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHJlZl9sb2NrICpsb2NrOworCXN0cnVjdCBzdHJidWYgcmVmX2ZpbGUgPSBTVFJCVUZfSU5JVDsKKwlpbnQgYXR0ZW1wdHNfcmVtYWluaW5nID0gMzsKKwlpbnQgcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKworCWFzc2VydChlcnIpOworCWZpbGVzX2Fzc2VydF9tYWluX3JlcG9zaXRvcnkocmVmcywgImxvY2tfcmF3X3JlZiIpOworCisJKnR5cGUgPSAwOworCisJLyogRmlyc3QgbG9jayB0aGUgZmlsZSBzbyBpdCBjYW4ndCBjaGFuZ2Ugb3V0IGZyb20gdW5kZXIgdXMuICovCisKKwkqbG9ja19wID0gbG9jayA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpsb2NrKSk7CisKKwlsb2NrLT5yZWZfbmFtZSA9IHhzdHJkdXAocmVmbmFtZSk7CisJZmlsZXNfcmVmX3BhdGgocmVmcywgJnJlZl9maWxlLCByZWZuYW1lKTsKKworcmV0cnk6CisJc3dpdGNoIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKHJlZl9maWxlLmJ1ZikpIHsKKwljYXNlIFNDTERfT0s6CisJCWJyZWFrOyAvKiBzdWNjZXNzICovCisJY2FzZSBTQ0xEX0VYSVNUUzoKKwkJLyoKKwkJICogU3VwcG9zZSByZWZuYW1lIGlzICJyZWZzL2Zvby9iYXIiLiBXZSBqdXN0IGZhaWxlZAorCQkgKiB0byBjcmVhdGUgdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LCAicmVmcy9mb28iLAorCQkgKiBiZWNhdXNlIHRoZXJlIHdhcyBhIG5vbi1kaXJlY3RvcnkgaW4gdGhlIHdheS4gVGhpcworCQkgKiBpbmRpY2F0ZXMgYSBEL0YgY29uZmxpY3QsIHByb2JhYmx5IGJlY2F1c2Ugb2YKKwkJICogYW5vdGhlciByZWZlcmVuY2Ugc3VjaCBhcyAicmVmcy9mb28iLiBUaGVyZSBpcyBubworCQkgKiByZWFzb24gdG8gZXhwZWN0IHRoaXMgZXJyb3IgdG8gYmUgdHJhbnNpdG9yeS4KKwkJICovCisJCWlmIChyZWZzX3ZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZSgmcmVmcy0+YmFzZSwgcmVmbmFtZSwKKwkJCQkJCSAgZXh0cmFzLCBza2lwLCBlcnIpKSB7CisJCQlpZiAobXVzdGV4aXN0KSB7CisJCQkJLyoKKwkJCQkgKiBUbyB0aGUgdXNlciB0aGUgcmVsZXZhbnQgZXJyb3IgaXMKKwkJCQkgKiB0aGF0IHRoZSAibXVzdGV4aXN0IiByZWZlcmVuY2UgaXMKKwkJCQkgKiBtaXNzaW5nOgorCQkJCSAqLworCQkJCXN0cmJ1Zl9yZXNldChlcnIpOworCQkJCXN0cmJ1Zl9hZGRmKGVyciwgInVuYWJsZSB0byByZXNvbHZlIHJlZmVyZW5jZSAnJXMnIiwKKwkJCQkJICAgIHJlZm5hbWUpOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBlcnJvciBtZXNzYWdlIHNldCBieQorCQkJCSAqIHJlZnNfdmVyaWZ5X3JlZm5hbWVfYXZhaWxhYmxlKCkgaXMKKwkJCQkgKiBPSy4KKwkJCQkgKi8KKwkJCQlyZXQgPSBUUkFOU0FDVElPTl9OQU1FX0NPTkZMSUNUOworCQkJfQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFRoZSBmaWxlIHRoYXQgaXMgaW4gdGhlIHdheSBpc24ndCBhIGxvb3NlCisJCQkgKiByZWZlcmVuY2UuIFJlcG9ydCBpdCBhcyBhIGxvdy1sZXZlbAorCQkJICogZmFpbHVyZS4KKwkJCSAqLworCQkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIGNyZWF0ZSBsb2NrIGZpbGUgJXMubG9jazsgIgorCQkJCSAgICAibm9uLWRpcmVjdG9yeSBpbiB0aGUgd2F5IiwKKwkJCQkgICAgcmVmX2ZpbGUuYnVmKTsKKwkJfQorCQlnb3RvIGVycm9yX3JldHVybjsKKwljYXNlIFNDTERfVkFOSVNIRUQ6CisJCS8qIE1heWJlIGFub3RoZXIgcHJvY2VzcyB3YXMgdGlkeWluZyB1cC4gVHJ5IGFnYWluLiAqLworCQlpZiAoLS1hdHRlbXB0c19yZW1haW5pbmcgPiAwKQorCQkJZ290byByZXRyeTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yICVzIiwKKwkJCSAgICByZWZfZmlsZS5idWYpOworCQlnb3RvIGVycm9yX3JldHVybjsKKwl9CisKKwlpZiAoaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZV90aW1lb3V0KAorCQkJICAgICZsb2NrLT5saywgcmVmX2ZpbGUuYnVmLCBMT0NLX05PX0RFUkVGLAorCQkJICAgIGdldF9maWxlc19yZWZfbG9ja190aW1lb3V0X21zKCkpIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UICYmIC0tYXR0ZW1wdHNfcmVtYWluaW5nID4gMCkgeworCQkJLyoKKwkJCSAqIE1heWJlIHNvbWVib2R5IGp1c3QgZGVsZXRlZCBvbmUgb2YgdGhlCisJCQkgKiBkaXJlY3RvcmllcyBsZWFkaW5nIHRvIHJlZl9maWxlLiAgVHJ5CisJCQkgKiBhZ2FpbjoKKwkJCSAqLworCQkJZ290byByZXRyeTsKKwkJfSBlbHNlIHsKKwkJCXVuYWJsZV90b19sb2NrX21lc3NhZ2UocmVmX2ZpbGUuYnVmLCBlcnJubywgZXJyKTsKKwkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQl9CisJfQorCisJLyoKKwkgKiBOb3cgd2UgaG9sZCB0aGUgbG9jayBhbmQgY2FuIHJlYWQgdGhlIHJlZmVyZW5jZSB3aXRob3V0CisJICogZmVhciB0aGF0IGl0cyB2YWx1ZSB3aWxsIGNoYW5nZS4KKwkgKi8KKworCWlmIChmaWxlc19yZWFkX3Jhd19yZWYoJnJlZnMtPmJhc2UsIHJlZm5hbWUsCisJCQkgICAgICAgJmxvY2stPm9sZF9vaWQsIHJlZmVyZW50LCB0eXBlKSkgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisJCQlpZiAobXVzdGV4aXN0KSB7CisJCQkJLyogR2FyZGVuIHZhcmlldHkgbWlzc2luZyByZWZlcmVuY2UuICovCisJCQkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIHJlc29sdmUgcmVmZXJlbmNlICclcyciLAorCQkJCQkgICAgcmVmbmFtZSk7CisJCQkJZ290byBlcnJvcl9yZXR1cm47CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogUmVmZXJlbmNlIGlzIG1pc3NpbmcsIGJ1dCB0aGF0J3MgT0suIFdlCisJCQkJICoga25vdyB0aGF0IHRoZXJlIGlzIG5vdCBhIGNvbmZsaWN0IHdpdGgKKwkJCQkgKiBhbm90aGVyIGxvb3NlIHJlZmVyZW5jZSBiZWNhdXNlCisJCQkJICogKHN1cHBvc2luZyB0aGF0IHdlIGFyZSB0cnlpbmcgdG8gbG9jaworCQkJCSAqIHJlZmVyZW5jZSAicmVmcy9mb28vYmFyIik6CisJCQkJICoKKwkJCQkgKiAtIFdlIHdlcmUgc3VjY2Vzc2Z1bGx5IGFibGUgdG8gY3JlYXRlCisJCQkJICogICB0aGUgbG9ja2ZpbGUgcmVmcy9mb28vYmFyLmxvY2ssIHNvIHdlCisJCQkJICogICBrbm93IHRoZXJlIGNhbm5vdCBiZSBhIGxvb3NlIHJlZmVyZW5jZQorCQkJCSAqICAgbmFtZWQgInJlZnMvZm9vIi4KKwkJCQkgKgorCQkJCSAqIC0gV2UgZ290IEVOT0VOVCBhbmQgbm90IEVJU0RJUiwgc28gd2UKKwkJCQkgKiAgIGtub3cgdGhhdCB0aGVyZSBjYW5ub3QgYmUgYSBsb29zZQorCQkJCSAqICAgcmVmZXJlbmNlIG5hbWVkICJyZWZzL2Zvby9iYXIvYmF6Ii4KKwkJCQkgKi8KKwkJCX0KKwkJfSBlbHNlIGlmIChlcnJubyA9PSBFSVNESVIpIHsKKwkJCS8qCisJCQkgKiBUaGVyZSBpcyBhIGRpcmVjdG9yeSBpbiB0aGUgd2F5LiBJdCBtaWdodCBoYXZlCisJCQkgKiBjb250YWluZWQgcmVmZXJlbmNlcyB0aGF0IGhhdmUgYmVlbiBkZWxldGVkLiBJZgorCQkJICogd2UgZG9uJ3QgcmVxdWlyZSB0aGF0IHRoZSByZWZlcmVuY2UgYWxyZWFkeQorCQkJICogZXhpc3RzLCB0cnkgdG8gcmVtb3ZlIHRoZSBkaXJlY3Rvcnkgc28gdGhhdCBpdAorCQkJICogZG9lc24ndCBjYXVzZSB0cm91YmxlIHdoZW4gd2Ugd2FudCB0byByZW5hbWUgdGhlCisJCQkgKiBsb2NrZmlsZSBpbnRvIHBsYWNlIGxhdGVyLgorCQkJICovCisJCQlpZiAobXVzdGV4aXN0KSB7CisJCQkJLyogR2FyZGVuIHZhcmlldHkgbWlzc2luZyByZWZlcmVuY2UuICovCisJCQkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIHJlc29sdmUgcmVmZXJlbmNlICclcyciLAorCQkJCQkgICAgcmVmbmFtZSk7CisJCQkJZ290byBlcnJvcl9yZXR1cm47CisJCQl9IGVsc2UgaWYgKHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJnJlZl9maWxlLAorCQkJCQkJCSAgUkVNT1ZFX0RJUl9FTVBUWV9PTkxZKSkgeworCQkJCWlmIChyZWZzX3ZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZSgKKwkJCQkJCSAgICAmcmVmcy0+YmFzZSwgcmVmbmFtZSwKKwkJCQkJCSAgICBleHRyYXMsIHNraXAsIGVycikpIHsKKwkJCQkJLyoKKwkJCQkJICogVGhlIGVycm9yIG1lc3NhZ2Ugc2V0IGJ5CisJCQkJCSAqIHZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZSgpIGlzIE9LLgorCQkJCQkgKi8KKwkJCQkJcmV0ID0gVFJBTlNBQ1RJT05fTkFNRV9DT05GTElDVDsKKwkJCQkJZ290byBlcnJvcl9yZXR1cm47CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogV2UgY2FuJ3QgZGVsZXRlIHRoZSBkaXJlY3RvcnksCisJCQkJCSAqIGJ1dCB3ZSBhbHNvIGRvbid0IGtub3cgb2YgYW55CisJCQkJCSAqIHJlZmVyZW5jZXMgdGhhdCBpdCBzaG91bGQKKwkJCQkJICogY29udGFpbi4KKwkJCQkJICovCisJCQkJCXN0cmJ1Zl9hZGRmKGVyciwgInRoZXJlIGlzIGEgbm9uLWVtcHR5IGRpcmVjdG9yeSAnJXMnICIKKwkJCQkJCSAgICAiYmxvY2tpbmcgcmVmZXJlbmNlICclcyciLAorCQkJCQkJICAgIHJlZl9maWxlLmJ1ZiwgcmVmbmFtZSk7CisJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChlcnJubyA9PSBFSU5WQUwgJiYgKCp0eXBlICYgUkVGX0lTQlJPS0VOKSkgeworCQkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIHJlc29sdmUgcmVmZXJlbmNlICclcyc6ICIKKwkJCQkgICAgInJlZmVyZW5jZSBicm9rZW4iLCByZWZuYW1lKTsKKwkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQl9IGVsc2UgeworCQkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIHJlc29sdmUgcmVmZXJlbmNlICclcyc6ICVzIiwKKwkJCQkgICAgcmVmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogSWYgdGhlIHJlZiBkaWQgbm90IGV4aXN0IGFuZCB3ZSBhcmUgY3JlYXRpbmcgaXQsCisJCSAqIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyBleGlzdGluZyBwYWNrZWQgcmVmIHRoYXQKKwkJICogY29uZmxpY3RzIHdpdGggcmVmbmFtZToKKwkJICovCisJCWlmIChyZWZzX3ZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZSgKKwkJCQkgICAgcmVmcy0+cGFja2VkX3JlZl9zdG9yZSwgcmVmbmFtZSwKKwkJCQkgICAgZXh0cmFzLCBza2lwLCBlcnIpKQorCQkJZ290byBlcnJvcl9yZXR1cm47CisJfQorCisJcmV0ID0gMDsKKwlnb3RvIG91dDsKKworZXJyb3JfcmV0dXJuOgorCXVubG9ja19yZWYobG9jayk7CisJKmxvY2tfcCA9IE5VTEw7CisKK291dDoKKwlzdHJidWZfcmVsZWFzZSgmcmVmX2ZpbGUpOworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBmaWxlc19yZWZfaXRlcmF0b3IgeworCXN0cnVjdCByZWZfaXRlcmF0b3IgYmFzZTsKKworCXN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIwOworCXVuc2lnbmVkIGludCBmbGFnczsKK307CisKK3N0YXRpYyBpbnQgZmlsZXNfcmVmX2l0ZXJhdG9yX2FkdmFuY2Uoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKQoreworCXN0cnVjdCBmaWxlc19yZWZfaXRlcmF0b3IgKml0ZXIgPQorCQkoc3RydWN0IGZpbGVzX3JlZl9pdGVyYXRvciAqKXJlZl9pdGVyYXRvcjsKKwlpbnQgb2s7CisKKwl3aGlsZSAoKG9rID0gcmVmX2l0ZXJhdG9yX2FkdmFuY2UoaXRlci0+aXRlcjApKSA9PSBJVEVSX09LKSB7CisJCWlmIChpdGVyLT5mbGFncyAmIERPX0ZPUl9FQUNIX1BFUl9XT1JLVFJFRV9PTkxZICYmCisJCSAgICByZWZfdHlwZShpdGVyLT5pdGVyMC0+cmVmbmFtZSkgIT0gUkVGX1RZUEVfUEVSX1dPUktUUkVFKQorCQkJY29udGludWU7CisKKwkJaWYgKCEoaXRlci0+ZmxhZ3MgJiBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTikgJiYKKwkJICAgICFyZWZfcmVzb2x2ZXNfdG9fb2JqZWN0KGl0ZXItPml0ZXIwLT5yZWZuYW1lLAorCQkJCQkgICAgaXRlci0+aXRlcjAtPm9pZCwKKwkJCQkJICAgIGl0ZXItPml0ZXIwLT5mbGFncykpCisJCQljb250aW51ZTsKKworCQlpdGVyLT5iYXNlLnJlZm5hbWUgPSBpdGVyLT5pdGVyMC0+cmVmbmFtZTsKKwkJaXRlci0+YmFzZS5vaWQgPSBpdGVyLT5pdGVyMC0+b2lkOworCQlpdGVyLT5iYXNlLmZsYWdzID0gaXRlci0+aXRlcjAtPmZsYWdzOworCQlyZXR1cm4gSVRFUl9PSzsKKwl9CisKKwlpdGVyLT5pdGVyMCA9IE5VTEw7CisJaWYgKHJlZl9pdGVyYXRvcl9hYm9ydChyZWZfaXRlcmF0b3IpICE9IElURVJfRE9ORSkKKwkJb2sgPSBJVEVSX0VSUk9SOworCisJcmV0dXJuIG9rOworfQorCitzdGF0aWMgaW50IGZpbGVzX3JlZl9pdGVyYXRvcl9wZWVsKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvciwKKwkJCQkgICBzdHJ1Y3Qgb2JqZWN0X2lkICpwZWVsZWQpCit7CisJc3RydWN0IGZpbGVzX3JlZl9pdGVyYXRvciAqaXRlciA9CisJCShzdHJ1Y3QgZmlsZXNfcmVmX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOworCisJcmV0dXJuIHJlZl9pdGVyYXRvcl9wZWVsKGl0ZXItPml0ZXIwLCBwZWVsZWQpOworfQorCitzdGF0aWMgaW50IGZpbGVzX3JlZl9pdGVyYXRvcl9hYm9ydChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJc3RydWN0IGZpbGVzX3JlZl9pdGVyYXRvciAqaXRlciA9CisJCShzdHJ1Y3QgZmlsZXNfcmVmX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOworCWludCBvayA9IElURVJfRE9ORTsKKworCWlmIChpdGVyLT5pdGVyMCkKKwkJb2sgPSByZWZfaXRlcmF0b3JfYWJvcnQoaXRlci0+aXRlcjApOworCisJYmFzZV9yZWZfaXRlcmF0b3JfZnJlZShyZWZfaXRlcmF0b3IpOworCXJldHVybiBvazsKK30KKworc3RhdGljIHN0cnVjdCByZWZfaXRlcmF0b3JfdnRhYmxlIGZpbGVzX3JlZl9pdGVyYXRvcl92dGFibGUgPSB7CisJZmlsZXNfcmVmX2l0ZXJhdG9yX2FkdmFuY2UsCisJZmlsZXNfcmVmX2l0ZXJhdG9yX3BlZWwsCisJZmlsZXNfcmVmX2l0ZXJhdG9yX2Fib3J0Cit9OworCitzdGF0aWMgc3RydWN0IHJlZl9pdGVyYXRvciAqZmlsZXNfcmVmX2l0ZXJhdG9yX2JlZ2luKAorCQlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCWNvbnN0IGNoYXIgKnByZWZpeCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnM7CisJc3RydWN0IHJlZl9pdGVyYXRvciAqbG9vc2VfaXRlciwgKnBhY2tlZF9pdGVyLCAqb3ZlcmxheV9pdGVyOworCXN0cnVjdCBmaWxlc19yZWZfaXRlcmF0b3IgKml0ZXI7CisJc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yOworCXVuc2lnbmVkIGludCByZXF1aXJlZF9mbGFncyA9IFJFRl9TVE9SRV9SRUFEOworCisJaWYgKCEoZmxhZ3MgJiBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTikpCisJCXJlcXVpcmVkX2ZsYWdzIHw9IFJFRl9TVE9SRV9PREI7CisKKwlyZWZzID0gZmlsZXNfZG93bmNhc3QocmVmX3N0b3JlLCByZXF1aXJlZF9mbGFncywgInJlZl9pdGVyYXRvcl9iZWdpbiIpOworCisJLyoKKwkgKiBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IGFsbCBsb29zZSByZWZzIGFyZSByZWFkIGJlZm9yZQorCSAqIGFjY2Vzc2luZyB0aGUgcGFja2VkLXJlZnMgZmlsZTsgdGhpcyBhdm9pZHMgYSByYWNlCisJICogY29uZGl0aW9uIGlmIGxvb3NlIHJlZnMgYXJlIG1pZ3JhdGVkIHRvIHRoZSBwYWNrZWQtcmVmcworCSAqIGZpbGUgYnkgYSBzaW11bHRhbmVvdXMgcHJvY2VzcywgYnV0IG91ciBpbi1tZW1vcnkgdmlldyBpcworCSAqIGZyb20gYmVmb3JlIHRoZSBtaWdyYXRpb24uIFdlIGVuc3VyZSB0aGlzIGFzIGZvbGxvd3M6CisJICogRmlyc3QsIHdlIGNhbGwgc3RhcnQgdGhlIGxvb3NlIHJlZnMgaXRlcmF0aW9uIHdpdGggaXRzCisJICogYHByaW1lX3JlZmAgYXJndW1lbnQgc2V0IHRvIHRydWUuIFRoaXMgY2F1c2VzIHRoZSBsb29zZQorCSAqIHJlZmVyZW5jZXMgaW4gdGhlIHN1YnRyZWUgdG8gYmUgcHJlLXJlYWQgaW50byB0aGUgY2FjaGUuCisJICogKElmIHRoZXkndmUgYWxyZWFkeSBiZWVuIHJlYWQsIHRoYXQncyBPSzsgd2Ugb25seSBuZWVkIHRvCisJICogZ3VhcmFudGVlIHRoYXQgdGhleSdyZSByZWFkIGJlZm9yZSB0aGUgcGFja2VkIHJlZnMsIG5vdAorCSAqICpob3cgbXVjaCogYmVmb3JlLikgQWZ0ZXIgdGhhdCwgd2UgY2FsbAorCSAqIHBhY2tlZF9yZWZfaXRlcmF0b3JfYmVnaW4oKSwgd2hpY2ggaW50ZXJuYWxseSBjaGVja3MKKwkgKiB3aGV0aGVyIHRoZSBwYWNrZWQtcmVmIGNhY2hlIGlzIHVwIHRvIGRhdGUgd2l0aCB3aGF0IGlzIG9uCisJICogZGlzaywgYW5kIHJlLXJlYWRzIGl0IGlmIG5vdC4KKwkgKi8KKworCWxvb3NlX2l0ZXIgPSBjYWNoZV9yZWZfaXRlcmF0b3JfYmVnaW4oZ2V0X2xvb3NlX3JlZl9jYWNoZShyZWZzKSwKKwkJCQkJICAgICAgcHJlZml4LCAxKTsKKworCS8qCisJICogVGhlIHBhY2tlZC1yZWZzIGZpbGUgbWlnaHQgY29udGFpbiBicm9rZW4gcmVmZXJlbmNlcywgZm9yCisJICogZXhhbXBsZSBhbiBvbGQgdmVyc2lvbiBvZiBhIHJlZmVyZW5jZSB0aGF0IHBvaW50cyBhdCBhbgorCSAqIG9iamVjdCB0aGF0IGhhcyBzaW5jZSBiZWVuIGdhcmJhZ2UtY29sbGVjdGVkLiBUaGlzIGlzIE9LIGFzCisJICogbG9uZyBhcyB0aGVyZSBpcyBhIGNvcnJlc3BvbmRpbmcgbG9vc2UgcmVmZXJlbmNlIHRoYXQKKwkgKiBvdmVycmlkZXMgaXQsIGFuZCB3ZSBkb24ndCB3YW50IHRvIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSBpbgorCSAqIHRoaXMgY2FzZS4gU28gYXNrIHRoZSBwYWNrZWRfcmVmX3N0b3JlIGZvciBhbGwgb2YgaXRzCisJICogcmVmZXJlbmNlcywgYW5kIChpZiBuZWVkZWQpIGRvIG91ciBvd24gY2hlY2sgZm9yIGJyb2tlbgorCSAqIG9uZXMgaW4gZmlsZXNfcmVmX2l0ZXJhdG9yX2FkdmFuY2UoKSwgYWZ0ZXIgd2UgaGF2ZSBtZXJnZWQKKwkgKiB0aGUgcGFja2VkIGFuZCBsb29zZSByZWZlcmVuY2VzLgorCSAqLworCXBhY2tlZF9pdGVyID0gcmVmc19yZWZfaXRlcmF0b3JfYmVnaW4oCisJCQlyZWZzLT5wYWNrZWRfcmVmX3N0b3JlLCBwcmVmaXgsIDAsCisJCQlET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTik7CisKKwlvdmVybGF5X2l0ZXIgPSBvdmVybGF5X3JlZl9pdGVyYXRvcl9iZWdpbihsb29zZV9pdGVyLCBwYWNrZWRfaXRlcik7CisKKwlpdGVyID0geGNhbGxvYygxLCBzaXplb2YoKml0ZXIpKTsKKwlyZWZfaXRlcmF0b3IgPSAmaXRlci0+YmFzZTsKKwliYXNlX3JlZl9pdGVyYXRvcl9pbml0KHJlZl9pdGVyYXRvciwgJmZpbGVzX3JlZl9pdGVyYXRvcl92dGFibGUsCisJCQkgICAgICAgb3ZlcmxheV9pdGVyLT5vcmRlcmVkKTsKKwlpdGVyLT5pdGVyMCA9IG92ZXJsYXlfaXRlcjsKKwlpdGVyLT5mbGFncyA9IGZsYWdzOworCisJcmV0dXJuIHJlZl9pdGVyYXRvcjsKK30KKworLyoKKyAqIFZlcmlmeSB0aGF0IHRoZSByZWZlcmVuY2UgbG9ja2VkIGJ5IGxvY2sgaGFzIHRoZSB2YWx1ZSBvbGRfb2lkCisgKiAodW5sZXNzIGl0IGlzIE5VTEwpLiAgRmFpbCBpZiB0aGUgcmVmZXJlbmNlIGRvZXNuJ3QgZXhpc3QgYW5kCisgKiBtdXN0ZXhpc3QgaXMgc2V0LiBSZXR1cm4gMCBvbiBzdWNjZXNzLiBPbiBlcnJvciwgd3JpdGUgYW4gZXJyb3IKKyAqIG1lc3NhZ2UgdG8gZXJyLCBzZXQgZXJybm8sIGFuZCByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZS4KKyAqLworc3RhdGljIGludCB2ZXJpZnlfbG9jayhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsIHN0cnVjdCByZWZfbG9jayAqbG9jaywKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsIGludCBtdXN0ZXhpc3QsCisJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJYXNzZXJ0KGVycik7CisKKwlpZiAocmVmc19yZWFkX3JlZl9mdWxsKHJlZl9zdG9yZSwgbG9jay0+cmVmX25hbWUsCisJCQkgICAgICAgbXVzdGV4aXN0ID8gUkVTT0xWRV9SRUZfUkVBRElORyA6IDAsCisJCQkgICAgICAgJmxvY2stPm9sZF9vaWQsIE5VTEwpKSB7CisJCWlmIChvbGRfb2lkKSB7CisJCQlpbnQgc2F2ZV9lcnJubyA9IGVycm5vOworCQkJc3RyYnVmX2FkZGYoZXJyLCAiY2FuJ3QgdmVyaWZ5IHJlZiAnJXMnIiwgbG9jay0+cmVmX25hbWUpOworCQkJZXJybm8gPSBzYXZlX2Vycm5vOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgeworCQkJb2lkY2xyKCZsb2NrLT5vbGRfb2lkKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCWlmIChvbGRfb2lkICYmICFvaWRlcSgmbG9jay0+b2xkX29pZCwgb2xkX29pZCkpIHsKKwkJc3RyYnVmX2FkZGYoZXJyLCAicmVmICclcycgaXMgYXQgJXMgYnV0IGV4cGVjdGVkICVzIiwKKwkJCSAgICBsb2NrLT5yZWZfbmFtZSwKKwkJCSAgICBvaWRfdG9faGV4KCZsb2NrLT5vbGRfb2lkKSwKKwkJCSAgICBvaWRfdG9faGV4KG9sZF9vaWQpKTsKKwkJZXJybm8gPSBFQlVTWTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZW1vdmVfZW1wdHlfZGlyZWN0b3JpZXMoc3RydWN0IHN0cmJ1ZiAqcGF0aCkKK3sKKwkvKgorCSAqIHdlIHdhbnQgdG8gY3JlYXRlIGEgZmlsZSBidXQgdGhlcmUgaXMgYSBkaXJlY3RvcnkgdGhlcmU7CisJICogaWYgdGhhdCBpcyBhbiBlbXB0eSBkaXJlY3RvcnkgKG9yIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMKKwkgKiBvbmx5IGVtcHR5IGRpcmVjdG9yaWVzKSwgcmVtb3ZlIHRoZW0uCisJICovCisJcmV0dXJuIHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkocGF0aCwgUkVNT1ZFX0RJUl9FTVBUWV9PTkxZKTsKK30KKworc3RhdGljIGludCBjcmVhdGVfcmVmbG9jayhjb25zdCBjaGFyICpwYXRoLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgbG9ja19maWxlICpsayA9IGNiOworCisJcmV0dXJuIGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGVfdGltZW91dCgKKwkJCWxrLCBwYXRoLCBMT0NLX05PX0RFUkVGLAorCQkJZ2V0X2ZpbGVzX3JlZl9sb2NrX3RpbWVvdXRfbXMoKSkgPCAwID8gLTEgOiAwOworfQorCisvKgorICogTG9ja3MgYSByZWYgcmV0dXJuaW5nIHRoZSBsb2NrIG9uIHN1Y2Nlc3MgYW5kIE5VTEwgb24gZmFpbHVyZS4KKyAqIE9uIGZhaWx1cmUgZXJybm8gaXMgc2V0IHRvIHNvbWV0aGluZyBtZWFuaW5nZnVsLgorICovCitzdGF0aWMgc3RydWN0IHJlZl9sb2NrICpsb2NrX3JlZl9vaWRfYmFzaWMoc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcywKKwkJCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCwKKwkJCQkJICAgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpleHRyYXMsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqc2tpcCwKKwkJCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgKnR5cGUsCisJCQkJCSAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlZl9maWxlID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJlZl9sb2NrICpsb2NrOworCWludCBsYXN0X2Vycm5vID0gMDsKKwlpbnQgbXVzdGV4aXN0ID0gKG9sZF9vaWQgJiYgIWlzX251bGxfb2lkKG9sZF9vaWQpKTsKKwlpbnQgcmVzb2x2ZV9mbGFncyA9IFJFU09MVkVfUkVGX05PX1JFQ1VSU0U7CisJaW50IHJlc29sdmVkOworCisJZmlsZXNfYXNzZXJ0X21haW5fcmVwb3NpdG9yeShyZWZzLCAibG9ja19yZWZfb2lkX2Jhc2ljIik7CisJYXNzZXJ0KGVycik7CisKKwlsb2NrID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlZl9sb2NrKSk7CisKKwlpZiAobXVzdGV4aXN0KQorCQlyZXNvbHZlX2ZsYWdzIHw9IFJFU09MVkVfUkVGX1JFQURJTkc7CisJaWYgKGZsYWdzICYgUkVGX0RFTEVUSU5HKQorCQlyZXNvbHZlX2ZsYWdzIHw9IFJFU09MVkVfUkVGX0FMTE9XX0JBRF9OQU1FOworCisJZmlsZXNfcmVmX3BhdGgocmVmcywgJnJlZl9maWxlLCByZWZuYW1lKTsKKwlyZXNvbHZlZCA9ICEhcmVmc19yZXNvbHZlX3JlZl91bnNhZmUoJnJlZnMtPmJhc2UsCisJCQkJCSAgICAgcmVmbmFtZSwgcmVzb2x2ZV9mbGFncywKKwkJCQkJICAgICAmbG9jay0+b2xkX29pZCwgdHlwZSk7CisJaWYgKCFyZXNvbHZlZCAmJiBlcnJubyA9PSBFSVNESVIpIHsKKwkJLyoKKwkJICogd2UgYXJlIHRyeWluZyB0byBsb2NrIGZvbyBidXQgd2UgdXNlZCB0bworCQkgKiBoYXZlIGZvby9iYXIgd2hpY2ggbm93IGRvZXMgbm90IGV4aXN0OworCQkgKiBpdCBpcyBub3JtYWwgZm9yIHRoZSBlbXB0eSBkaXJlY3RvcnkgJ2ZvbycKKwkJICogdG8gcmVtYWluLgorCQkgKi8KKwkJaWYgKHJlbW92ZV9lbXB0eV9kaXJlY3RvcmllcygmcmVmX2ZpbGUpKSB7CisJCQlsYXN0X2Vycm5vID0gZXJybm87CisJCQlpZiAoIXJlZnNfdmVyaWZ5X3JlZm5hbWVfYXZhaWxhYmxlKAorCQkJCQkgICAgJnJlZnMtPmJhc2UsCisJCQkJCSAgICByZWZuYW1lLCBleHRyYXMsIHNraXAsIGVycikpCisJCQkJc3RyYnVmX2FkZGYoZXJyLCAidGhlcmUgYXJlIHN0aWxsIHJlZnMgdW5kZXIgJyVzJyIsCisJCQkJCSAgICByZWZuYW1lKTsKKwkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQl9CisJCXJlc29sdmVkID0gISFyZWZzX3Jlc29sdmVfcmVmX3Vuc2FmZSgmcmVmcy0+YmFzZSwKKwkJCQkJCSAgICAgcmVmbmFtZSwgcmVzb2x2ZV9mbGFncywKKwkJCQkJCSAgICAgJmxvY2stPm9sZF9vaWQsIHR5cGUpOworCX0KKwlpZiAoIXJlc29sdmVkKSB7CisJCWxhc3RfZXJybm8gPSBlcnJubzsKKwkJaWYgKGxhc3RfZXJybm8gIT0gRU5PVERJUiB8fAorCQkgICAgIXJlZnNfdmVyaWZ5X3JlZm5hbWVfYXZhaWxhYmxlKCZyZWZzLT5iYXNlLCByZWZuYW1lLAorCQkJCQkJICAgZXh0cmFzLCBza2lwLCBlcnIpKQorCQkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIHJlc29sdmUgcmVmZXJlbmNlICclcyc6ICVzIiwKKwkJCQkgICAgcmVmbmFtZSwgc3RyZXJyb3IobGFzdF9lcnJubykpOworCisJCWdvdG8gZXJyb3JfcmV0dXJuOworCX0KKworCS8qCisJICogSWYgdGhlIHJlZiBkaWQgbm90IGV4aXN0IGFuZCB3ZSBhcmUgY3JlYXRpbmcgaXQsIG1ha2Ugc3VyZQorCSAqIHRoZXJlIGlzIG5vIGV4aXN0aW5nIHBhY2tlZCByZWYgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBvdXIKKwkgKiByZWZuYW1lLCBub3IgYSBwYWNrZWQgcmVmIHdob3NlIG5hbWUgaXMgYSBwcm9wZXIgcHJlZml4IG9mCisJICogb3VyIHJlZm5hbWUuCisJICovCisJaWYgKGlzX251bGxfb2lkKCZsb2NrLT5vbGRfb2lkKSAmJgorCSAgICByZWZzX3ZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZShyZWZzLT5wYWNrZWRfcmVmX3N0b3JlLCByZWZuYW1lLAorCQkJCQkgIGV4dHJhcywgc2tpcCwgZXJyKSkgeworCQlsYXN0X2Vycm5vID0gRU5PVERJUjsKKwkJZ290byBlcnJvcl9yZXR1cm47CisJfQorCisJbG9jay0+cmVmX25hbWUgPSB4c3RyZHVwKHJlZm5hbWUpOworCisJaWYgKHJhY2Vwcm9vZl9jcmVhdGVfZmlsZShyZWZfZmlsZS5idWYsIGNyZWF0ZV9yZWZsb2NrLCAmbG9jay0+bGspKSB7CisJCWxhc3RfZXJybm8gPSBlcnJubzsKKwkJdW5hYmxlX3RvX2xvY2tfbWVzc2FnZShyZWZfZmlsZS5idWYsIGVycm5vLCBlcnIpOworCQlnb3RvIGVycm9yX3JldHVybjsKKwl9CisKKwlpZiAodmVyaWZ5X2xvY2soJnJlZnMtPmJhc2UsIGxvY2ssIG9sZF9vaWQsIG11c3RleGlzdCwgZXJyKSkgeworCQlsYXN0X2Vycm5vID0gZXJybm87CisJCWdvdG8gZXJyb3JfcmV0dXJuOworCX0KKwlnb3RvIG91dDsKKworIGVycm9yX3JldHVybjoKKwl1bmxvY2tfcmVmKGxvY2spOworCWxvY2sgPSBOVUxMOworCisgb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZyZWZfZmlsZSk7CisJZXJybm8gPSBsYXN0X2Vycm5vOworCXJldHVybiBsb2NrOworfQorCitzdHJ1Y3QgcmVmX3RvX3BydW5lIHsKKwlzdHJ1Y3QgcmVmX3RvX3BydW5lICpuZXh0OworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsKK307CisKK2VudW0geworCVJFTU9WRV9FTVBUWV9QQVJFTlRTX1JFRiA9IDB4MDEsCisJUkVNT1ZFX0VNUFRZX1BBUkVOVFNfUkVGTE9HID0gMHgwMgorfTsKKworLyoKKyAqIFJlbW92ZSBlbXB0eSBwYXJlbnQgZGlyZWN0b3JpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKyAqIHJlZmVyZW5jZSBhbmQvb3IgaXRzIHJlZmxvZywgYnV0IHNwYXJlIFtsb2dzL11yZWZzLyBhbmQgaW1tZWRpYXRlCisgKiBzdWJkaXJzLiBmbGFncyBpcyBhIGNvbWJpbmF0aW9uIG9mIFJFTU9WRV9FTVBUWV9QQVJFTlRTX1JFRiBhbmQvb3IKKyAqIFJFTU9WRV9FTVBUWV9QQVJFTlRTX1JFRkxPRy4KKyAqLworc3RhdGljIHZvaWQgdHJ5X3JlbW92ZV9lbXB0eV9wYXJlbnRzKHN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnMsCisJCQkJICAgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNoYXIgKnAsICpxOworCWludCBpOworCisJc3RyYnVmX2FkZHN0cigmYnVmLCByZWZuYW1lKTsKKwlwID0gYnVmLmJ1ZjsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7IC8qIHJlZnMve2hlYWRzLHRhZ3MsLi4ufS8gKi8KKwkJd2hpbGUgKCpwICYmICpwICE9ICcvJykKKwkJCXArKzsKKwkJLyogdG9sZXJhdGUgZHVwbGljYXRlIHNsYXNoZXM7IHNlZSBjaGVja19yZWZuYW1lX2Zvcm1hdCgpICovCisJCXdoaWxlICgqcCA9PSAnLycpCisJCQlwKys7CisJfQorCXEgPSBidWYuYnVmICsgYnVmLmxlbjsKKwl3aGlsZSAoZmxhZ3MgJiAoUkVNT1ZFX0VNUFRZX1BBUkVOVFNfUkVGIHwgUkVNT1ZFX0VNUFRZX1BBUkVOVFNfUkVGTE9HKSkgeworCQl3aGlsZSAocSA+IHAgJiYgKnEgIT0gJy8nKQorCQkJcS0tOworCQl3aGlsZSAocSA+IHAgJiYgKihxLTEpID09ICcvJykKKwkJCXEtLTsKKwkJaWYgKHEgPT0gcCkKKwkJCWJyZWFrOworCQlzdHJidWZfc2V0bGVuKCZidWYsIHEgLSBidWYuYnVmKTsKKworCQlzdHJidWZfcmVzZXQoJnNiKTsKKwkJZmlsZXNfcmVmX3BhdGgocmVmcywgJnNiLCBidWYuYnVmKTsKKwkJaWYgKChmbGFncyAmIFJFTU9WRV9FTVBUWV9QQVJFTlRTX1JFRikgJiYgcm1kaXIoc2IuYnVmKSkKKwkJCWZsYWdzICY9IH5SRU1PVkVfRU1QVFlfUEFSRU5UU19SRUY7CisKKwkJc3RyYnVmX3Jlc2V0KCZzYik7CisJCWZpbGVzX3JlZmxvZ19wYXRoKHJlZnMsICZzYiwgYnVmLmJ1Zik7CisJCWlmICgoZmxhZ3MgJiBSRU1PVkVfRU1QVFlfUEFSRU5UU19SRUZMT0cpICYmIHJtZGlyKHNiLmJ1ZikpCisJCQlmbGFncyAmPSB+UkVNT1ZFX0VNUFRZX1BBUkVOVFNfUkVGTE9HOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCisvKiBtYWtlIHN1cmUgbm9ib2R5IHRvdWNoZWQgdGhlIHJlZiwgYW5kIHVubGluayAqLworc3RhdGljIHZvaWQgcHJ1bmVfcmVmKHN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnMsIHN0cnVjdCByZWZfdG9fcHJ1bmUgKnIpCit7CisJc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gLTE7CisKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQoci0+bmFtZSwgMCkpCisJCXJldHVybjsKKworCXRyYW5zYWN0aW9uID0gcmVmX3N0b3JlX3RyYW5zYWN0aW9uX2JlZ2luKCZyZWZzLT5iYXNlLCAmZXJyKTsKKwlpZiAoIXRyYW5zYWN0aW9uKQorCQlnb3RvIGNsZWFudXA7CisJcmVmX3RyYW5zYWN0aW9uX2FkZF91cGRhdGUoCisJCQl0cmFuc2FjdGlvbiwgci0+bmFtZSwKKwkJCVJFRl9OT19ERVJFRiB8IFJFRl9IQVZFX05FVyB8IFJFRl9IQVZFX09MRCB8IFJFRl9JU19QUlVOSU5HLAorCQkJJm51bGxfb2lkLCAmci0+b2lkLCBOVUxMKTsKKwlpZiAocmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpCisJCWdvdG8gY2xlYW51cDsKKworCXJldCA9IDA7CisKK2NsZWFudXA6CisJaWYgKHJldCkKKwkJZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXJldHVybjsKK30KKworLyoKKyAqIFBydW5lIHRoZSBsb29zZSB2ZXJzaW9ucyBvZiB0aGUgcmVmZXJlbmNlcyBpbiB0aGUgbGlua2VkIGxpc3QKKyAqIGAqcmVmc190b19wcnVuZWAsIGZyZWVpbmcgdGhlIGVudHJpZXMgaW4gdGhlIGxpc3QgYXMgd2UgZ28uCisgKi8KK3N0YXRpYyB2b2lkIHBydW5lX3JlZnMoc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcywgc3RydWN0IHJlZl90b19wcnVuZSAqKnJlZnNfdG9fcHJ1bmUpCit7CisJd2hpbGUgKCpyZWZzX3RvX3BydW5lKSB7CisJCXN0cnVjdCByZWZfdG9fcHJ1bmUgKnIgPSAqcmVmc190b19wcnVuZTsKKwkJKnJlZnNfdG9fcHJ1bmUgPSByLT5uZXh0OworCQlwcnVuZV9yZWYocmVmcywgcik7CisJCWZyZWUocik7CisJfQorfQorCisvKgorICogUmV0dXJuIHRydWUgaWYgdGhlIHNwZWNpZmllZCByZWZlcmVuY2Ugc2hvdWxkIGJlIHBhY2tlZC4KKyAqLworc3RhdGljIGludCBzaG91bGRfcGFja19yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdW5zaWduZWQgaW50IHJlZl9mbGFncywKKwkJCSAgIHVuc2lnbmVkIGludCBwYWNrX2ZsYWdzKQoreworCS8qIERvIG5vdCBwYWNrIHBlci13b3JrdHJlZSByZWZzOiAqLworCWlmIChyZWZfdHlwZShyZWZuYW1lKSAhPSBSRUZfVFlQRV9OT1JNQUwpCisJCXJldHVybiAwOworCisJLyogRG8gbm90IHBhY2sgbm9uLXRhZ3MgdW5sZXNzIFBBQ0tfUkVGU19BTEwgaXMgc2V0OiAqLworCWlmICghKHBhY2tfZmxhZ3MgJiBQQUNLX1JFRlNfQUxMKSAmJiAhc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvdGFncy8iKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBEbyBub3QgcGFjayBzeW1ib2xpYyByZWZzOiAqLworCWlmIChyZWZfZmxhZ3MgJiBSRUZfSVNTWU1SRUYpCisJCXJldHVybiAwOworCisJLyogRG8gbm90IHBhY2sgYnJva2VuIHJlZnM6ICovCisJaWYgKCFyZWZfcmVzb2x2ZXNfdG9fb2JqZWN0KHJlZm5hbWUsIG9pZCwgcmVmX2ZsYWdzKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmaWxlc19wYWNrX3JlZnMoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcyA9CisJCWZpbGVzX2Rvd25jYXN0KHJlZl9zdG9yZSwgUkVGX1NUT1JFX1dSSVRFIHwgUkVGX1NUT1JFX09EQiwKKwkJCSAgICAgICAicGFja19yZWZzIik7CisJc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcjsKKwlpbnQgb2s7CisJc3RydWN0IHJlZl90b19wcnVuZSAqcmVmc190b19wcnVuZSA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKworCXRyYW5zYWN0aW9uID0gcmVmX3N0b3JlX3RyYW5zYWN0aW9uX2JlZ2luKHJlZnMtPnBhY2tlZF9yZWZfc3RvcmUsICZlcnIpOworCWlmICghdHJhbnNhY3Rpb24pCisJCXJldHVybiAtMTsKKworCXBhY2tlZF9yZWZzX2xvY2socmVmcy0+cGFja2VkX3JlZl9zdG9yZSwgTE9DS19ESUVfT05fRVJST1IsICZlcnIpOworCisJaXRlciA9IGNhY2hlX3JlZl9pdGVyYXRvcl9iZWdpbihnZXRfbG9vc2VfcmVmX2NhY2hlKHJlZnMpLCBOVUxMLCAwKTsKKwl3aGlsZSAoKG9rID0gcmVmX2l0ZXJhdG9yX2FkdmFuY2UoaXRlcikpID09IElURVJfT0spIHsKKwkJLyoKKwkJICogSWYgdGhlIGxvb3NlIHJlZmVyZW5jZSBjYW4gYmUgcGFja2VkLCBhZGQgYW4gZW50cnkKKwkJICogaW4gdGhlIHBhY2tlZCByZWYgY2FjaGUuIElmIHRoZSByZWZlcmVuY2Ugc2hvdWxkIGJlCisJCSAqIHBydW5lZCwgYWxzbyBhZGQgaXQgdG8gcmVmc190b19wcnVuZS4KKwkJICovCisJCWlmICghc2hvdWxkX3BhY2tfcmVmKGl0ZXItPnJlZm5hbWUsIGl0ZXItPm9pZCwgaXRlci0+ZmxhZ3MsCisJCQkJICAgICBmbGFncykpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBBZGQgYSByZWZlcmVuY2UgY3JlYXRpb24gZm9yIHRoaXMgcmVmZXJlbmNlIHRvIHRoZQorCQkgKiBwYWNrZWQtcmVmcyB0cmFuc2FjdGlvbjoKKwkJICovCisJCWlmIChyZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCBpdGVyLT5yZWZuYW1lLAorCQkJCQkgICBpdGVyLT5vaWQsIE5VTEwsCisJCQkJCSAgIFJFRl9OT19ERVJFRiwgTlVMTCwgJmVycikpCisJCQlkaWUoImZhaWx1cmUgcHJlcGFyaW5nIHRvIGNyZWF0ZSBwYWNrZWQgcmVmZXJlbmNlICVzOiAlcyIsCisJCQkgICAgaXRlci0+cmVmbmFtZSwgZXJyLmJ1Zik7CisKKwkJLyogU2NoZWR1bGUgdGhlIGxvb3NlIHJlZmVyZW5jZSBmb3IgcHJ1bmluZyBpZiByZXF1ZXN0ZWQuICovCisJCWlmICgoZmxhZ3MgJiBQQUNLX1JFRlNfUFJVTkUpKSB7CisJCQlzdHJ1Y3QgcmVmX3RvX3BydW5lICpuOworCQkJRkxFWF9BTExPQ19TVFIobiwgbmFtZSwgaXRlci0+cmVmbmFtZSk7CisJCQlvaWRjcHkoJm4tPm9pZCwgaXRlci0+b2lkKTsKKwkJCW4tPm5leHQgPSByZWZzX3RvX3BydW5lOworCQkJcmVmc190b19wcnVuZSA9IG47CisJCX0KKwl9CisJaWYgKG9rICE9IElURVJfRE9ORSkKKwkJZGllKCJlcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciByZWZlcmVuY2VzIik7CisKKwlpZiAocmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpCisJCWRpZSgidW5hYmxlIHRvIHdyaXRlIG5ldyBwYWNrZWQtcmVmczogJXMiLCBlcnIuYnVmKTsKKworCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKworCXBhY2tlZF9yZWZzX3VubG9jayhyZWZzLT5wYWNrZWRfcmVmX3N0b3JlKTsKKworCXBydW5lX3JlZnMocmVmcywgJnJlZnNfdG9fcHJ1bmUpOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbGVzX2RlbGV0ZV9yZWZzKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwgY29uc3QgY2hhciAqbXNnLAorCQkJICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZm5hbWVzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcyA9CisJCWZpbGVzX2Rvd25jYXN0KHJlZl9zdG9yZSwgUkVGX1NUT1JFX1dSSVRFLCAiZGVsZXRlX3JlZnMiKTsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWludCBpLCByZXN1bHQgPSAwOworCisJaWYgKCFyZWZuYW1lcy0+bnIpCisJCXJldHVybiAwOworCisJaWYgKHBhY2tlZF9yZWZzX2xvY2socmVmcy0+cGFja2VkX3JlZl9zdG9yZSwgMCwgJmVycikpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAocmVmc19kZWxldGVfcmVmcyhyZWZzLT5wYWNrZWRfcmVmX3N0b3JlLCBtc2csIHJlZm5hbWVzLCBmbGFncykpIHsKKwkJcGFja2VkX3JlZnNfdW5sb2NrKHJlZnMtPnBhY2tlZF9yZWZfc3RvcmUpOworCQlnb3RvIGVycm9yOworCX0KKworCXBhY2tlZF9yZWZzX3VubG9jayhyZWZzLT5wYWNrZWRfcmVmX3N0b3JlKTsKKworCWZvciAoaSA9IDA7IGkgPCByZWZuYW1lcy0+bnI7IGkrKykgeworCQljb25zdCBjaGFyICpyZWZuYW1lID0gcmVmbmFtZXMtPml0ZW1zW2ldLnN0cmluZzsKKworCQlpZiAocmVmc19kZWxldGVfcmVmKCZyZWZzLT5iYXNlLCBtc2csIHJlZm5hbWUsIE5VTEwsIGZsYWdzKSkKKwkJCXJlc3VsdCB8PSBlcnJvcihfKCJjb3VsZCBub3QgcmVtb3ZlIHJlZmVyZW5jZSAlcyIpLCByZWZuYW1lKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlyZXR1cm4gcmVzdWx0OworCitlcnJvcjoKKwkvKgorCSAqIElmIHdlIGZhaWxlZCB0byByZXdyaXRlIHRoZSBwYWNrZWQtcmVmcyBmaWxlLCB0aGVuIGl0IGlzCisJICogdW5zYWZlIHRvIHRyeSB0byByZW1vdmUgbG9vc2UgcmVmcywgYmVjYXVzZSBkb2luZyBzbyBtaWdodAorCSAqIGV4cG9zZSBhbiBvYnNvbGV0ZSBwYWNrZWQgdmFsdWUgZm9yIGEgcmVmZXJlbmNlIHRoYXQgbWlnaHQKKwkgKiBldmVuIHBvaW50IGF0IGFuIG9iamVjdCB0aGF0IGhhcyBiZWVuIGdhcmJhZ2UgY29sbGVjdGVkLgorCSAqLworCWlmIChyZWZuYW1lcy0+bnIgPT0gMSkKKwkJZXJyb3IoXygiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIiksCisJCSAgICAgIHJlZm5hbWVzLT5pdGVtc1swXS5zdHJpbmcsIGVyci5idWYpOworCWVsc2UKKwkJZXJyb3IoXygiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIpLCBlcnIuYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFBlb3BsZSB1c2luZyBjb250cmliJ3MgZ2l0LW5ldy13b3JrZGlyIGhhdmUgLmdpdC9sb2dzL3JlZnMgLT4KKyAqIC9zb21lL290aGVyL3BhdGgvLmdpdC9sb2dzL3JlZnMsIGFuZCB0aGF0IG1heSBsaXZlIG9uIGFub3RoZXIgZGV2aWNlLgorICoKKyAqIElPVywgdG8gYXZvaWQgY3Jvc3MgZGV2aWNlIHJlbmFtZSBlcnJvcnMsIHRoZSB0ZW1wb3JhcnkgcmVuYW1lZCBsb2cgbXVzdAorICogbGl2ZSBpbnRvIGxvZ3MvcmVmcy4KKyAqLworI2RlZmluZSBUTVBfUkVOQU1FRF9MT0cgICJyZWZzLy50bXAtcmVuYW1lZC1sb2ciCisKK3N0cnVjdCByZW5hbWVfY2IgeworCWNvbnN0IGNoYXIgKnRtcF9yZW5hbWVkX2xvZzsKKwlpbnQgdHJ1ZV9lcnJubzsKK307CisKK3N0YXRpYyBpbnQgcmVuYW1lX3RtcF9sb2dfY2FsbGJhY2soY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcmVuYW1lX2NiICpjYiA9IGNiX2RhdGE7CisKKwlpZiAocmVuYW1lKGNiLT50bXBfcmVuYW1lZF9sb2csIHBhdGgpKSB7CisJCS8qCisJCSAqIHJlbmFtZShhLCBiKSB3aGVuIGIgaXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5IG91Z2h0CisJCSAqIHRvIHJlc3VsdCBpbiBJU0RJUiwgYnV0IFNvbGFyaXMgNS44IGdpdmVzIEVOT1RESVIuCisJCSAqIFNoZWVzaC4gUmVjb3JkIHRoZSB0cnVlIGVycm5vIGZvciBlcnJvciByZXBvcnRpbmcsCisJCSAqIGJ1dCByZXBvcnQgRUlTRElSIHRvIHJhY2Vwcm9vZl9jcmVhdGVfZmlsZSgpIHNvCisJCSAqIHRoYXQgaXQga25vd3MgdG8gcmV0cnkuCisJCSAqLworCQljYi0+dHJ1ZV9lcnJubyA9IGVycm5vOworCQlpZiAoZXJybm8gPT0gRU5PVERJUikKKwkJCWVycm5vID0gRUlTRElSOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHJlbmFtZV90bXBfbG9nKHN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKm5ld3JlZm5hbWUpCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB0bXAgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVuYW1lX2NiIGNiOworCWludCByZXQ7CisKKwlmaWxlc19yZWZsb2dfcGF0aChyZWZzLCAmcGF0aCwgbmV3cmVmbmFtZSk7CisJZmlsZXNfcmVmbG9nX3BhdGgocmVmcywgJnRtcCwgVE1QX1JFTkFNRURfTE9HKTsKKwljYi50bXBfcmVuYW1lZF9sb2cgPSB0bXAuYnVmOworCXJldCA9IHJhY2Vwcm9vZl9jcmVhdGVfZmlsZShwYXRoLmJ1ZiwgcmVuYW1lX3RtcF9sb2dfY2FsbGJhY2ssICZjYik7CisJaWYgKHJldCkgeworCQlpZiAoZXJybm8gPT0gRUlTRElSKQorCQkJZXJyb3IoImRpcmVjdG9yeSBub3QgZW1wdHk6ICVzIiwgcGF0aC5idWYpOworCQllbHNlCisJCQllcnJvcigidW5hYmxlIHRvIG1vdmUgbG9nZmlsZSAlcyB0byAlczogJXMiLAorCQkJICAgICAgdG1wLmJ1ZiwgcGF0aC5idWYsCisJCQkgICAgICBzdHJlcnJvcihjYi50cnVlX2Vycm5vKSk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCXN0cmJ1Zl9yZWxlYXNlKCZ0bXApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVmX3RvX2xvY2tmaWxlKHN0cnVjdCByZWZfbG9jayAqbG9jaywKKwkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3Qgc3RyYnVmICplcnIpOworc3RhdGljIGludCBjb21taXRfcmVmX3VwZGF0ZShzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzLAorCQkJICAgICBzdHJ1Y3QgcmVmX2xvY2sgKmxvY2ssCisJCQkgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqbG9nbXNnLAorCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCitzdGF0aWMgaW50IGZpbGVzX2NvcHlfb3JfcmVuYW1lX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkgICAgY29uc3QgY2hhciAqb2xkcmVmbmFtZSwgY29uc3QgY2hhciAqbmV3cmVmbmFtZSwKKwkJCSAgICBjb25zdCBjaGFyICpsb2dtc2csIGludCBjb3B5KQoreworCXN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnMgPQorCQlmaWxlc19kb3duY2FzdChyZWZfc3RvcmUsIFJFRl9TVE9SRV9XUklURSwgInJlbmFtZV9yZWYiKTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9yaWdfb2lkOworCWludCBmbGFnID0gMCwgbG9nbW92ZWQgPSAwOworCXN0cnVjdCByZWZfbG9jayAqbG9jazsKKwlzdHJ1Y3Qgc3RhdCBsb2dpbmZvOworCXN0cnVjdCBzdHJidWYgc2Jfb2xkcmVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzYl9uZXdyZWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHRtcF9yZW5hbWVkX2xvZyA9IFNUUkJVRl9JTklUOworCWludCBsb2csIHJldDsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCisJZmlsZXNfcmVmbG9nX3BhdGgocmVmcywgJnNiX29sZHJlZiwgb2xkcmVmbmFtZSk7CisJZmlsZXNfcmVmbG9nX3BhdGgocmVmcywgJnNiX25ld3JlZiwgbmV3cmVmbmFtZSk7CisJZmlsZXNfcmVmbG9nX3BhdGgocmVmcywgJnRtcF9yZW5hbWVkX2xvZywgVE1QX1JFTkFNRURfTE9HKTsKKworCWxvZyA9ICFsc3RhdChzYl9vbGRyZWYuYnVmLCAmbG9naW5mbyk7CisJaWYgKGxvZyAmJiBTX0lTTE5LKGxvZ2luZm8uc3RfbW9kZSkpIHsKKwkJcmV0ID0gZXJyb3IoInJlZmxvZyBmb3IgJXMgaXMgYSBzeW1saW5rIiwgb2xkcmVmbmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghcmVmc19yZXNvbHZlX3JlZl91bnNhZmUoJnJlZnMtPmJhc2UsIG9sZHJlZm5hbWUsCisJCQkJICAgICBSRVNPTFZFX1JFRl9SRUFESU5HIHwgUkVTT0xWRV9SRUZfTk9fUkVDVVJTRSwKKwkJCQkmb3JpZ19vaWQsICZmbGFnKSkgeworCQlyZXQgPSBlcnJvcigicmVmbmFtZSAlcyBub3QgZm91bmQiLCBvbGRyZWZuYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGZsYWcgJiBSRUZfSVNTWU1SRUYpIHsKKwkJaWYgKGNvcHkpCisJCQlyZXQgPSBlcnJvcigicmVmbmFtZSAlcyBpcyBhIHN5bWJvbGljIHJlZiwgY29weWluZyBpdCBpcyBub3Qgc3VwcG9ydGVkIiwKKwkJCQkgICAgb2xkcmVmbmFtZSk7CisJCWVsc2UKKwkJCXJldCA9IGVycm9yKCJyZWZuYW1lICVzIGlzIGEgc3ltYm9saWMgcmVmLCByZW5hbWluZyBpdCBpcyBub3Qgc3VwcG9ydGVkIiwKKwkJCQkgICAgb2xkcmVmbmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoIXJlZnNfcmVuYW1lX3JlZl9hdmFpbGFibGUoJnJlZnMtPmJhc2UsIG9sZHJlZm5hbWUsIG5ld3JlZm5hbWUpKSB7CisJCXJldCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghY29weSAmJiBsb2cgJiYgcmVuYW1lKHNiX29sZHJlZi5idWYsIHRtcF9yZW5hbWVkX2xvZy5idWYpKSB7CisJCXJldCA9IGVycm9yKCJ1bmFibGUgdG8gbW92ZSBsb2dmaWxlIGxvZ3MvJXMgdG8gbG9ncy8iVE1QX1JFTkFNRURfTE9HIjogJXMiLAorCQkJICAgIG9sZHJlZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjb3B5ICYmIGxvZyAmJiBjb3B5X2ZpbGUodG1wX3JlbmFtZWRfbG9nLmJ1Ziwgc2Jfb2xkcmVmLmJ1ZiwgMDY0NCkpIHsKKwkJcmV0ID0gZXJyb3IoInVuYWJsZSB0byBjb3B5IGxvZ2ZpbGUgbG9ncy8lcyB0byBsb2dzLyJUTVBfUkVOQU1FRF9MT0ciOiAlcyIsCisJCQkgICAgb2xkcmVmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFjb3B5ICYmIHJlZnNfZGVsZXRlX3JlZigmcmVmcy0+YmFzZSwgbG9nbXNnLCBvbGRyZWZuYW1lLAorCQkJICAgICZvcmlnX29pZCwgUkVGX05PX0RFUkVGKSkgeworCQllcnJvcigidW5hYmxlIHRvIGRlbGV0ZSBvbGQgJXMiLCBvbGRyZWZuYW1lKTsKKwkJZ290byByb2xsYmFjazsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHdlIGFyZSBkb2luZyBhIHNoYWxsb3cgbG9va3VwLCBvaWQgaXMgbm90IHRoZQorCSAqIGNvcnJlY3QgdmFsdWUgdG8gcGFzcyB0byBkZWxldGVfcmVmIGFzIG9sZF9vaWQuIEJ1dCB0aGF0CisJICogZG9lc24ndCBtYXR0ZXIsIGJlY2F1c2UgYW4gb2xkX29pZCBjaGVjayB3b3VsZG4ndCBhZGQgdG8KKwkgKiB0aGUgc2FmZXR5IGFueXdheTsgd2Ugd2FudCB0byBkZWxldGUgdGhlIHJlZmVyZW5jZSB3aGF0ZXZlcgorCSAqIGl0cyBjdXJyZW50IHZhbHVlLgorCSAqLworCWlmICghY29weSAmJiAhcmVmc19yZWFkX3JlZl9mdWxsKCZyZWZzLT5iYXNlLCBuZXdyZWZuYW1lLAorCQkJCVJFU09MVkVfUkVGX1JFQURJTkcgfCBSRVNPTFZFX1JFRl9OT19SRUNVUlNFLAorCQkJCU5VTEwsIE5VTEwpICYmCisJICAgIHJlZnNfZGVsZXRlX3JlZigmcmVmcy0+YmFzZSwgTlVMTCwgbmV3cmVmbmFtZSwKKwkJCSAgICBOVUxMLCBSRUZfTk9fREVSRUYpKSB7CisJCWlmIChlcnJubyA9PSBFSVNESVIpIHsKKwkJCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCQkJaW50IHJlc3VsdDsKKworCQkJZmlsZXNfcmVmX3BhdGgocmVmcywgJnBhdGgsIG5ld3JlZm5hbWUpOworCQkJcmVzdWx0ID0gcmVtb3ZlX2VtcHR5X2RpcmVjdG9yaWVzKCZwYXRoKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKworCQkJaWYgKHJlc3VsdCkgeworCQkJCWVycm9yKCJEaXJlY3Rvcnkgbm90IGVtcHR5OiAlcyIsIG5ld3JlZm5hbWUpOworCQkJCWdvdG8gcm9sbGJhY2s7CisJCQl9CisJCX0gZWxzZSB7CisJCQllcnJvcigidW5hYmxlIHRvIGRlbGV0ZSBleGlzdGluZyAlcyIsIG5ld3JlZm5hbWUpOworCQkJZ290byByb2xsYmFjazsKKwkJfQorCX0KKworCWlmIChsb2cgJiYgcmVuYW1lX3RtcF9sb2cocmVmcywgbmV3cmVmbmFtZSkpCisJCWdvdG8gcm9sbGJhY2s7CisKKwlsb2dtb3ZlZCA9IGxvZzsKKworCWxvY2sgPSBsb2NrX3JlZl9vaWRfYmFzaWMocmVmcywgbmV3cmVmbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgIFJFRl9OT19ERVJFRiwgTlVMTCwgJmVycik7CisJaWYgKCFsb2NrKSB7CisJCWlmIChjb3B5KQorCQkJZXJyb3IoInVuYWJsZSB0byBjb3B5ICclcycgdG8gJyVzJzogJXMiLCBvbGRyZWZuYW1lLCBuZXdyZWZuYW1lLCBlcnIuYnVmKTsKKwkJZWxzZQorCQkJZXJyb3IoInVuYWJsZSB0byByZW5hbWUgJyVzJyB0byAnJXMnOiAlcyIsIG9sZHJlZm5hbWUsIG5ld3JlZm5hbWUsIGVyci5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwkJZ290byByb2xsYmFjazsKKwl9CisJb2lkY3B5KCZsb2NrLT5vbGRfb2lkLCAmb3JpZ19vaWQpOworCisJaWYgKHdyaXRlX3JlZl90b19sb2NrZmlsZShsb2NrLCAmb3JpZ19vaWQsICZlcnIpIHx8CisJICAgIGNvbW1pdF9yZWZfdXBkYXRlKHJlZnMsIGxvY2ssICZvcmlnX29pZCwgbG9nbXNnLCAmZXJyKSkgeworCQllcnJvcigidW5hYmxlIHRvIHdyaXRlIGN1cnJlbnQgc2hhMSBpbnRvICVzOiAlcyIsIG5ld3JlZm5hbWUsIGVyci5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwkJZ290byByb2xsYmFjazsKKwl9CisKKwlyZXQgPSAwOworCWdvdG8gb3V0OworCisgcm9sbGJhY2s6CisJbG9jayA9IGxvY2tfcmVmX29pZF9iYXNpYyhyZWZzLCBvbGRyZWZuYW1lLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSAgUkVGX05PX0RFUkVGLCBOVUxMLCAmZXJyKTsKKwlpZiAoIWxvY2spIHsKKwkJZXJyb3IoInVuYWJsZSB0byBsb2NrICVzIGZvciByb2xsYmFjazogJXMiLCBvbGRyZWZuYW1lLCBlcnIuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCWdvdG8gcm9sbGJhY2tsb2c7CisJfQorCisJZmxhZyA9IGxvZ19hbGxfcmVmX3VwZGF0ZXM7CisJbG9nX2FsbF9yZWZfdXBkYXRlcyA9IExPR19SRUZTX05PTkU7CisJaWYgKHdyaXRlX3JlZl90b19sb2NrZmlsZShsb2NrLCAmb3JpZ19vaWQsICZlcnIpIHx8CisJICAgIGNvbW1pdF9yZWZfdXBkYXRlKHJlZnMsIGxvY2ssICZvcmlnX29pZCwgTlVMTCwgJmVycikpIHsKKwkJZXJyb3IoInVuYWJsZSB0byB3cml0ZSBjdXJyZW50IHNoYTEgaW50byAlczogJXMiLCBvbGRyZWZuYW1lLCBlcnIuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJfQorCWxvZ19hbGxfcmVmX3VwZGF0ZXMgPSBmbGFnOworCisgcm9sbGJhY2tsb2c6CisJaWYgKGxvZ21vdmVkICYmIHJlbmFtZShzYl9uZXdyZWYuYnVmLCBzYl9vbGRyZWYuYnVmKSkKKwkJZXJyb3IoInVuYWJsZSB0byByZXN0b3JlIGxvZ2ZpbGUgJXMgZnJvbSAlczogJXMiLAorCQkJb2xkcmVmbmFtZSwgbmV3cmVmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlpZiAoIWxvZ21vdmVkICYmIGxvZyAmJgorCSAgICByZW5hbWUodG1wX3JlbmFtZWRfbG9nLmJ1Ziwgc2Jfb2xkcmVmLmJ1ZikpCisJCWVycm9yKCJ1bmFibGUgdG8gcmVzdG9yZSBsb2dmaWxlICVzIGZyb20gbG9ncy8iVE1QX1JFTkFNRURfTE9HIjogJXMiLAorCQkJb2xkcmVmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXQgPSAxOworIG91dDoKKwlzdHJidWZfcmVsZWFzZSgmc2JfbmV3cmVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2Jfb2xkcmVmKTsKKwlzdHJidWZfcmVsZWFzZSgmdG1wX3JlbmFtZWRfbG9nKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmlsZXNfcmVuYW1lX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkgICAgY29uc3QgY2hhciAqb2xkcmVmbmFtZSwgY29uc3QgY2hhciAqbmV3cmVmbmFtZSwKKwkJCSAgICBjb25zdCBjaGFyICpsb2dtc2cpCit7CisJcmV0dXJuIGZpbGVzX2NvcHlfb3JfcmVuYW1lX3JlZihyZWZfc3RvcmUsIG9sZHJlZm5hbWUsCisJCQkJIG5ld3JlZm5hbWUsIGxvZ21zZywgMCk7Cit9CisKK3N0YXRpYyBpbnQgZmlsZXNfY29weV9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJICAgIGNvbnN0IGNoYXIgKm9sZHJlZm5hbWUsIGNvbnN0IGNoYXIgKm5ld3JlZm5hbWUsCisJCQkgICAgY29uc3QgY2hhciAqbG9nbXNnKQoreworCXJldHVybiBmaWxlc19jb3B5X29yX3JlbmFtZV9yZWYocmVmX3N0b3JlLCBvbGRyZWZuYW1lLAorCQkJCSBuZXdyZWZuYW1lLCBsb2dtc2csIDEpOworfQorCitzdGF0aWMgaW50IGNsb3NlX3JlZl9nZW50bHkoc3RydWN0IHJlZl9sb2NrICpsb2NrKQoreworCWlmIChjbG9zZV9sb2NrX2ZpbGVfZ2VudGx5KCZsb2NrLT5saykpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21taXRfcmVmKHN0cnVjdCByZWZfbG9jayAqbG9jaykKK3sKKwljaGFyICpwYXRoID0gZ2V0X2xvY2tlZF9maWxlX3BhdGgoJmxvY2stPmxrKTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICghbHN0YXQocGF0aCwgJnN0KSAmJiBTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCS8qCisJCSAqIFRoZXJlIGlzIGEgZGlyZWN0b3J5IGF0IHRoZSBwYXRoIHdlIHdhbnQgdG8gcmVuYW1lCisJCSAqIHRoZSBsb2NrZmlsZSB0by4gSG9wZWZ1bGx5IGl0IGlzIGVtcHR5OyB0cnkgdG8KKwkJICogZGVsZXRlIGl0LgorCQkgKi8KKwkJc2l6ZV90IGxlbiA9IHN0cmxlbihwYXRoKTsKKwkJc3RydWN0IHN0cmJ1ZiBzYl9wYXRoID0gU1RSQlVGX0lOSVQ7CisKKwkJc3RyYnVmX2F0dGFjaCgmc2JfcGF0aCwgcGF0aCwgbGVuLCBsZW4pOworCisJCS8qCisJCSAqIElmIHRoaXMgZmFpbHMsIGNvbW1pdF9sb2NrX2ZpbGUoKSB3aWxsIGFsc28gZmFpbAorCQkgKiBhbmQgd2lsbCByZXBvcnQgdGhlIHByb2JsZW0uCisJCSAqLworCQlyZW1vdmVfZW1wdHlfZGlyZWN0b3JpZXMoJnNiX3BhdGgpOworCQlzdHJidWZfcmVsZWFzZSgmc2JfcGF0aCk7CisJfSBlbHNlIHsKKwkJZnJlZShwYXRoKTsKKwl9CisKKwlpZiAoY29tbWl0X2xvY2tfZmlsZSgmbG9jay0+bGspKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9vcl9jcmVhdGVfbG9nZmlsZShjb25zdCBjaGFyICpwYXRoLCB2b2lkICpjYikKK3sKKwlpbnQgKmZkID0gY2I7CisKKwkqZmQgPSBvcGVuKHBhdGgsIE9fQVBQRU5EIHwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjY2KTsKKwlyZXR1cm4gKCpmZCA8IDApID8gLTEgOiAwOworfQorCisvKgorICogQ3JlYXRlIGEgcmVmbG9nIGZvciBhIHJlZi4gSWYgZm9yY2VfY3JlYXRlID0gMCwgb25seSBjcmVhdGUgdGhlCisgKiByZWZsb2cgZm9yIGNlcnRhaW4gcmVmcyAodGhvc2UgZm9yIHdoaWNoIHNob3VsZF9hdXRvY3JlYXRlX3JlZmxvZworICogcmV0dXJucyBub24temVybykuIE90aGVyd2lzZSwgY3JlYXRlIGl0IHJlZ2FyZGxlc3Mgb2YgdGhlIHJlZmVyZW5jZQorICogbmFtZS4gSWYgdGhlIGxvZ2ZpbGUgYWxyZWFkeSBleGlzdGVkIG9yIHdhcyBjcmVhdGVkLCByZXR1cm4gMCBhbmQKKyAqIHNldCAqbG9nZmQgdG8gdGhlIGZpbGUgZGVzY3JpcHRvciBvcGVuZWQgZm9yIGFwcGVuZGluZyB0byB0aGUgZmlsZS4KKyAqIElmIG5vIGxvZ2ZpbGUgZXhpc3RzIGFuZCB3ZSBkZWNpZGVkIG5vdCB0byBjcmVhdGUgb25lLCByZXR1cm4gMCBhbmQKKyAqIHNldCAqbG9nZmQgdG8gLTEuIE9uIGZhaWx1cmUsIGZpbGwgaW4gKmVyciwgc2V0ICpsb2dmZCB0byAtMSwgYW5kCisgKiByZXR1cm4gLTEuCisgKi8KK3N0YXRpYyBpbnQgbG9nX3JlZl9zZXR1cChzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzLAorCQkJIGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBmb3JjZV9jcmVhdGUsCisJCQkgaW50ICpsb2dmZCwgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCBzdHJidWYgbG9nZmlsZV9zYiA9IFNUUkJVRl9JTklUOworCWNoYXIgKmxvZ2ZpbGU7CisKKwlmaWxlc19yZWZsb2dfcGF0aChyZWZzLCAmbG9nZmlsZV9zYiwgcmVmbmFtZSk7CisJbG9nZmlsZSA9IHN0cmJ1Zl9kZXRhY2goJmxvZ2ZpbGVfc2IsIE5VTEwpOworCisJaWYgKGZvcmNlX2NyZWF0ZSB8fCBzaG91bGRfYXV0b2NyZWF0ZV9yZWZsb2cocmVmbmFtZSkpIHsKKwkJaWYgKHJhY2Vwcm9vZl9jcmVhdGVfZmlsZShsb2dmaWxlLCBvcGVuX29yX2NyZWF0ZV9sb2dmaWxlLCBsb2dmZCkpIHsKKwkJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yICclcyc6ICIKKwkJCQkJICAgICIlcyIsIGxvZ2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCQllbHNlIGlmIChlcnJubyA9PSBFSVNESVIpCisJCQkJc3RyYnVmX2FkZGYoZXJyLCAidGhlcmUgYXJlIHN0aWxsIGxvZ3MgdW5kZXIgJyVzJyIsCisJCQkJCSAgICBsb2dmaWxlKTsKKwkJCWVsc2UKKwkJCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gYXBwZW5kIHRvICclcyc6ICVzIiwKKwkJCQkJICAgIGxvZ2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9IGVsc2UgeworCQkqbG9nZmQgPSBvcGVuKGxvZ2ZpbGUsIE9fQVBQRU5EIHwgT19XUk9OTFksIDA2NjYpOworCQlpZiAoKmxvZ2ZkIDwgMCkgeworCQkJaWYgKGVycm5vID09IEVOT0VOVCB8fCBlcnJubyA9PSBFSVNESVIpIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBsb2dmaWxlIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCwKKwkJCQkgKiBidXQgdGhhdCBpcyBub3QgYW4gZXJyb3I7IGl0IG9ubHkKKwkJCQkgKiBtZWFucyB0aGF0IHdlIHdvbid0IHdyaXRlIGxvZworCQkJCSAqIGVudHJpZXMgdG8gaXQuCisJCQkJICovCisJCQkJOworCQkJfSBlbHNlIHsKKwkJCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gYXBwZW5kIHRvICclcyc6ICVzIiwKKwkJCQkJICAgIGxvZ2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfQorCX0KKworCWlmICgqbG9nZmQgPj0gMCkKKwkJYWRqdXN0X3NoYXJlZF9wZXJtKGxvZ2ZpbGUpOworCisJZnJlZShsb2dmaWxlKTsKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJZnJlZShsb2dmaWxlKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZmlsZXNfY3JlYXRlX3JlZmxvZyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkgICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IGZvcmNlX2NyZWF0ZSwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcyA9CisJCWZpbGVzX2Rvd25jYXN0KHJlZl9zdG9yZSwgUkVGX1NUT1JFX1dSSVRFLCAiY3JlYXRlX3JlZmxvZyIpOworCWludCBmZDsKKworCWlmIChsb2dfcmVmX3NldHVwKHJlZnMsIHJlZm5hbWUsIGZvcmNlX2NyZWF0ZSwgJmZkLCBlcnIpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZmQgPj0gMCkKKwkJY2xvc2UoZmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9nX3JlZl93cml0ZV9mZChpbnQgZmQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwKKwkJCSAgICBjb25zdCBjaGFyICpjb21taXR0ZXIsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisKKwlzdHJidWZfYWRkZigmc2IsICIlcyAlcyAlcyIsIG9pZF90b19oZXgob2xkX29pZCksIG9pZF90b19oZXgobmV3X29pZCksIGNvbW1pdHRlcik7CisJaWYgKG1zZyAmJiAqbXNnKQorCQljb3B5X3JlZmxvZ19tc2coJnNiLCBtc2cpOworCXN0cmJ1Zl9hZGRjaCgmc2IsICdcbicpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBzYi5idWYsIHNiLmxlbikgPCAwKQorCQlyZXQgPSAtMTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmlsZXNfbG9nX3JlZl93cml0ZShzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwgY29uc3QgY2hhciAqbXNnLAorCQkJICAgICAgIGludCBmbGFncywgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWludCBsb2dmZCwgcmVzdWx0OworCisJaWYgKGxvZ19hbGxfcmVmX3VwZGF0ZXMgPT0gTE9HX1JFRlNfVU5TRVQpCisJCWxvZ19hbGxfcmVmX3VwZGF0ZXMgPSBpc19iYXJlX3JlcG9zaXRvcnkoKSA/IExPR19SRUZTX05PTkUgOiBMT0dfUkVGU19OT1JNQUw7CisKKwlyZXN1bHQgPSBsb2dfcmVmX3NldHVwKHJlZnMsIHJlZm5hbWUsCisJCQkgICAgICAgZmxhZ3MgJiBSRUZfRk9SQ0VfQ1JFQVRFX1JFRkxPRywKKwkJCSAgICAgICAmbG9nZmQsIGVycik7CisKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJaWYgKGxvZ2ZkIDwgMCkKKwkJcmV0dXJuIDA7CisJcmVzdWx0ID0gbG9nX3JlZl93cml0ZV9mZChsb2dmZCwgb2xkX29pZCwgbmV3X29pZCwKKwkJCQkgIGdpdF9jb21taXR0ZXJfaW5mbygwKSwgbXNnKTsKKwlpZiAocmVzdWx0KSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJaW50IHNhdmVfZXJybm8gPSBlcnJubzsKKworCQlmaWxlc19yZWZsb2dfcGF0aChyZWZzLCAmc2IsIHJlZm5hbWUpOworCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gYXBwZW5kIHRvICclcyc6ICVzIiwKKwkJCSAgICBzYi5idWYsIHN0cmVycm9yKHNhdmVfZXJybm8pKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJY2xvc2UobG9nZmQpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChjbG9zZShsb2dmZCkpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQlpbnQgc2F2ZV9lcnJubyA9IGVycm5vOworCisJCWZpbGVzX3JlZmxvZ19wYXRoKHJlZnMsICZzYiwgcmVmbmFtZSk7CisJCXN0cmJ1Zl9hZGRmKGVyciwgInVuYWJsZSB0byBhcHBlbmQgdG8gJyVzJzogJXMiLAorCQkJICAgIHNiLmJ1Ziwgc3RyZXJyb3Ioc2F2ZV9lcnJubykpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogV3JpdGUgb2lkIGludG8gdGhlIG9wZW4gbG9ja2ZpbGUsIHRoZW4gY2xvc2UgdGhlIGxvY2tmaWxlLiBPbgorICogZXJyb3JzLCByb2xsYmFjayB0aGUgbG9ja2ZpbGUsIGZpbGwgaW4gKmVyciBhbmQgcmV0dXJuIC0xLgorICovCitzdGF0aWMgaW50IHdyaXRlX3JlZl90b19sb2NrZmlsZShzdHJ1Y3QgcmVmX2xvY2sgKmxvY2ssCisJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0YXRpYyBjaGFyIHRlcm0gPSAnXG4nOworCXN0cnVjdCBvYmplY3QgKm87CisJaW50IGZkOworCisJbyA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKwlpZiAoIW8pIHsKKwkJc3RyYnVmX2FkZGYoZXJyLAorCQkJICAgICJ0cnlpbmcgdG8gd3JpdGUgcmVmICclcycgd2l0aCBub25leGlzdGVudCBvYmplY3QgJXMiLAorCQkJICAgIGxvY2stPnJlZl9uYW1lLCBvaWRfdG9faGV4KG9pZCkpOworCQl1bmxvY2tfcmVmKGxvY2spOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChvLT50eXBlICE9IE9CSl9DT01NSVQgJiYgaXNfYnJhbmNoKGxvY2stPnJlZl9uYW1lKSkgeworCQlzdHJidWZfYWRkZihlcnIsCisJCQkgICAgInRyeWluZyB0byB3cml0ZSBub24tY29tbWl0IG9iamVjdCAlcyB0byBicmFuY2ggJyVzJyIsCisJCQkgICAgb2lkX3RvX2hleChvaWQpLCBsb2NrLT5yZWZfbmFtZSk7CisJCXVubG9ja19yZWYobG9jayk7CisJCXJldHVybiAtMTsKKwl9CisJZmQgPSBnZXRfbG9ja19maWxlX2ZkKCZsb2NrLT5sayk7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIG9pZF90b19oZXgob2lkKSwgdGhlX2hhc2hfYWxnby0+aGV4c3opIDwgMCB8fAorCSAgICB3cml0ZV9pbl9mdWxsKGZkLCAmdGVybSwgMSkgPCAwIHx8CisJICAgIGNsb3NlX3JlZl9nZW50bHkobG9jaykgPCAwKSB7CisJCXN0cmJ1Zl9hZGRmKGVyciwKKwkJCSAgICAiY291bGRuJ3Qgd3JpdGUgJyVzJyIsIGdldF9sb2NrX2ZpbGVfcGF0aCgmbG9jay0+bGspKTsKKwkJdW5sb2NrX3JlZihsb2NrKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbW1pdCBhIGNoYW5nZSB0byBhIGxvb3NlIHJlZmVyZW5jZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gd3JpdHRlbgorICogdG8gdGhlIGxvb3NlIHJlZmVyZW5jZSBsb2NrZmlsZS4gQWxzbyB1cGRhdGUgdGhlIHJlZmxvZ3MgaWYKKyAqIG5lY2Vzc2FyeSwgdXNpbmcgdGhlIHNwZWNpZmllZCBsb2NrbXNnICh3aGljaCBjYW4gYmUgTlVMTCkuCisgKi8KK3N0YXRpYyBpbnQgY29tbWl0X3JlZl91cGRhdGUoc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcywKKwkJCSAgICAgc3RydWN0IHJlZl9sb2NrICpsb2NrLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKmxvZ21zZywKKwkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWZpbGVzX2Fzc2VydF9tYWluX3JlcG9zaXRvcnkocmVmcywgImNvbW1pdF9yZWZfdXBkYXRlIik7CisKKwljbGVhcl9sb29zZV9yZWZfY2FjaGUocmVmcyk7CisJaWYgKGZpbGVzX2xvZ19yZWZfd3JpdGUocmVmcywgbG9jay0+cmVmX25hbWUsCisJCQkJJmxvY2stPm9sZF9vaWQsIG9pZCwKKwkJCQlsb2dtc2csIDAsIGVycikpIHsKKwkJY2hhciAqb2xkX21zZyA9IHN0cmJ1Zl9kZXRhY2goZXJyLCBOVUxMKTsKKwkJc3RyYnVmX2FkZGYoZXJyLCAiY2Fubm90IHVwZGF0ZSB0aGUgcmVmICclcyc6ICVzIiwKKwkJCSAgICBsb2NrLT5yZWZfbmFtZSwgb2xkX21zZyk7CisJCWZyZWUob2xkX21zZyk7CisJCXVubG9ja19yZWYobG9jayk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc3RyY21wKGxvY2stPnJlZl9uYW1lLCAiSEVBRCIpICE9IDApIHsKKwkJLyoKKwkJICogU3BlY2lhbCBoYWNrOiBJZiBhIGJyYW5jaCBpcyB1cGRhdGVkIGRpcmVjdGx5IGFuZCBIRUFECisJCSAqIHBvaW50cyB0byBpdCAobWF5IGhhcHBlbiBvbiB0aGUgcmVtb3RlIHNpZGUgb2YgYSBwdXNoCisJCSAqIGZvciBleGFtcGxlKSB0aGVuIGxvZ2ljYWxseSB0aGUgSEVBRCByZWZsb2cgc2hvdWxkIGJlCisJCSAqIHVwZGF0ZWQgdG9vLgorCQkgKiBBIGdlbmVyaWMgc29sdXRpb24gaW1wbGllcyByZXZlcnNlIHN5bXJlZiBpbmZvcm1hdGlvbiwKKwkJICogYnV0IGZpbmRpbmcgYWxsIHN5bXJlZnMgcG9pbnRpbmcgdG8gdGhlIGdpdmVuIGJyYW5jaAorCQkgKiB3b3VsZCBiZSByYXRoZXIgY29zdGx5IGZvciB0aGlzIHJhcmUgZXZlbnQgKHRoZSBkaXJlY3QKKwkJICogdXBkYXRlIG9mIGEgYnJhbmNoKSB0byBiZSB3b3J0aCBpdC4gIFNvIGxldCdzIGNoZWF0IGFuZAorCQkgKiBjaGVjayB3aXRoIEhFQUQgb25seSB3aGljaCBzaG91bGQgY292ZXIgOTklIG9mIGFsbCB1c2FnZQorCQkgKiBzY2VuYXJpb3MgKGV2ZW4gMTAwJSBvZiB0aGUgZGVmYXVsdCBvbmVzKS4KKwkJICovCisJCWludCBoZWFkX2ZsYWc7CisJCWNvbnN0IGNoYXIgKmhlYWRfcmVmOworCisJCWhlYWRfcmVmID0gcmVmc19yZXNvbHZlX3JlZl91bnNhZmUoJnJlZnMtPmJhc2UsICJIRUFEIiwKKwkJCQkJCSAgIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCQkgICBOVUxMLCAmaGVhZF9mbGFnKTsKKwkJaWYgKGhlYWRfcmVmICYmIChoZWFkX2ZsYWcgJiBSRUZfSVNTWU1SRUYpICYmCisJCSAgICAhc3RyY21wKGhlYWRfcmVmLCBsb2NrLT5yZWZfbmFtZSkpIHsKKwkJCXN0cnVjdCBzdHJidWYgbG9nX2VyciA9IFNUUkJVRl9JTklUOworCQkJaWYgKGZpbGVzX2xvZ19yZWZfd3JpdGUocmVmcywgIkhFQUQiLAorCQkJCQkJJmxvY2stPm9sZF9vaWQsIG9pZCwKKwkJCQkJCWxvZ21zZywgMCwgJmxvZ19lcnIpKSB7CisJCQkJZXJyb3IoIiVzIiwgbG9nX2Vyci5idWYpOworCQkJCXN0cmJ1Zl9yZWxlYXNlKCZsb2dfZXJyKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChjb21taXRfcmVmKGxvY2spKSB7CisJCXN0cmJ1Zl9hZGRmKGVyciwgImNvdWxkbid0IHNldCAnJXMnIiwgbG9jay0+cmVmX25hbWUpOworCQl1bmxvY2tfcmVmKGxvY2spOworCQlyZXR1cm4gLTE7CisJfQorCisJdW5sb2NrX3JlZihsb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcmVhdGVfcmVmX3N5bWxpbmsoc3RydWN0IHJlZl9sb2NrICpsb2NrLCBjb25zdCBjaGFyICp0YXJnZXQpCit7CisJaW50IHJldCA9IC0xOworI2lmbmRlZiBOT19TWU1MSU5LX0hFQUQKKwljaGFyICpyZWZfcGF0aCA9IGdldF9sb2NrZWRfZmlsZV9wYXRoKCZsb2NrLT5sayk7CisJdW5saW5rKHJlZl9wYXRoKTsKKwlyZXQgPSBzeW1saW5rKHRhcmdldCwgcmVmX3BhdGgpOworCWZyZWUocmVmX3BhdGgpOworCisJaWYgKHJldCkKKwkJZnByaW50ZihzdGRlcnIsICJubyBzeW1saW5rIC0gZmFsbGluZyBiYWNrIHRvIHN5bWJvbGljIHJlZlxuIik7CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfc3ltcmVmX3JlZmxvZyhzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzLAorCQkJCSBzdHJ1Y3QgcmVmX2xvY2sgKmxvY2ssIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJIGNvbnN0IGNoYXIgKnRhcmdldCwgY29uc3QgY2hhciAqbG9nbXNnKQoreworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG9iamVjdF9pZCBuZXdfb2lkOworCWlmIChsb2dtc2cgJiYKKwkgICAgIXJlZnNfcmVhZF9yZWZfZnVsbCgmcmVmcy0+YmFzZSwgdGFyZ2V0LAorCQkJCVJFU09MVkVfUkVGX1JFQURJTkcsICZuZXdfb2lkLCBOVUxMKSAmJgorCSAgICBmaWxlc19sb2dfcmVmX3dyaXRlKHJlZnMsIHJlZm5hbWUsICZsb2NrLT5vbGRfb2lkLAorCQkJCSZuZXdfb2lkLCBsb2dtc2csIDAsICZlcnIpKSB7CisJCWVycm9yKCIlcyIsIGVyci5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX3N5bXJlZl9sb2NrZWQoc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcywKKwkJCQlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2ssIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJY29uc3QgY2hhciAqdGFyZ2V0LCBjb25zdCBjaGFyICpsb2dtc2cpCit7CisJaWYgKHByZWZlcl9zeW1saW5rX3JlZnMgJiYgIWNyZWF0ZV9yZWZfc3ltbGluayhsb2NrLCB0YXJnZXQpKSB7CisJCXVwZGF0ZV9zeW1yZWZfcmVmbG9nKHJlZnMsIGxvY2ssIHJlZm5hbWUsIHRhcmdldCwgbG9nbXNnKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFmZG9wZW5fbG9ja19maWxlKCZsb2NrLT5saywgInciKSkKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gZmRvcGVuICVzOiAlcyIsCisJCQkgICAgIGxvY2stPmxrLnRlbXBmaWxlLT5maWxlbmFtZS5idWYsIHN0cmVycm9yKGVycm5vKSk7CisKKwl1cGRhdGVfc3ltcmVmX3JlZmxvZyhyZWZzLCBsb2NrLCByZWZuYW1lLCB0YXJnZXQsIGxvZ21zZyk7CisKKwkvKiBubyBlcnJvciBjaGVjazsgY29tbWl0X3JlZiB3aWxsIGNoZWNrIGZlcnJvciAqLworCWZwcmludGYobG9jay0+bGsudGVtcGZpbGUtPmZwLCAicmVmOiAlc1xuIiwgdGFyZ2V0KTsKKwlpZiAoY29tbWl0X3JlZihsb2NrKSA8IDApCisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIHdyaXRlIHN5bXJlZiBmb3IgJXM6ICVzIiwgcmVmbmFtZSwKKwkJCSAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaWxlc19jcmVhdGVfc3ltcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBjaGFyICp0YXJnZXQsCisJCQkgICAgICAgY29uc3QgY2hhciAqbG9nbXNnKQoreworCXN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnMgPQorCQlmaWxlc19kb3duY2FzdChyZWZfc3RvcmUsIFJFRl9TVE9SRV9XUklURSwgImNyZWF0ZV9zeW1yZWYiKTsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCByZWZfbG9jayAqbG9jazsKKwlpbnQgcmV0OworCisJbG9jayA9IGxvY2tfcmVmX29pZF9iYXNpYyhyZWZzLCByZWZuYW1lLCBOVUxMLAorCQkJCSAgTlVMTCwgTlVMTCwgUkVGX05PX0RFUkVGLCBOVUxMLAorCQkJCSAgJmVycik7CisJaWYgKCFsb2NrKSB7CisJCWVycm9yKCIlcyIsIGVyci5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IGNyZWF0ZV9zeW1yZWZfbG9ja2VkKHJlZnMsIGxvY2ssIHJlZm5hbWUsIHRhcmdldCwgbG9nbXNnKTsKKwl1bmxvY2tfcmVmKGxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmlsZXNfcmVmbG9nX2V4aXN0cyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkgICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzID0KKwkJZmlsZXNfZG93bmNhc3QocmVmX3N0b3JlLCBSRUZfU1RPUkVfUkVBRCwgInJlZmxvZ19leGlzdHMiKTsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IHJldDsKKworCWZpbGVzX3JlZmxvZ19wYXRoKHJlZnMsICZzYiwgcmVmbmFtZSk7CisJcmV0ID0gIWxzdGF0KHNiLmJ1ZiwgJnN0KSAmJiBTX0lTUkVHKHN0LnN0X21vZGUpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBmaWxlc19kZWxldGVfcmVmbG9nKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnMgPQorCQlmaWxlc19kb3duY2FzdChyZWZfc3RvcmUsIFJFRl9TVE9SRV9XUklURSwgImRlbGV0ZV9yZWZsb2ciKTsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldDsKKworCWZpbGVzX3JlZmxvZ19wYXRoKHJlZnMsICZzYiwgcmVmbmFtZSk7CisJcmV0ID0gcmVtb3ZlX3BhdGgoc2IuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19vbmVfcmVmbG9nX2VudChzdHJ1Y3Qgc3RyYnVmICpzYiwgZWFjaF9yZWZsb2dfZW50X2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3RfaWQgb29pZCwgbm9pZDsKKwljaGFyICplbWFpbF9lbmQsICptZXNzYWdlOworCXRpbWVzdGFtcF90IHRpbWVzdGFtcDsKKwlpbnQgdHo7CisJY29uc3QgY2hhciAqcCA9IHNiLT5idWY7CisKKwkvKiBvbGQgU1AgbmV3IFNQIG5hbWUgPGVtYWlsPiBTUCB0aW1lIFRBQiBtc2cgTEYgKi8KKwlpZiAoIXNiLT5sZW4gfHwgc2ItPmJ1ZltzYi0+bGVuIC0gMV0gIT0gJ1xuJyB8fAorCSAgICBwYXJzZV9vaWRfaGV4KHAsICZvb2lkLCAmcCkgfHwgKnArKyAhPSAnICcgfHwKKwkgICAgcGFyc2Vfb2lkX2hleChwLCAmbm9pZCwgJnApIHx8ICpwKysgIT0gJyAnIHx8CisJICAgICEoZW1haWxfZW5kID0gc3RyY2hyKHAsICc+JykpIHx8CisJICAgIGVtYWlsX2VuZFsxXSAhPSAnICcgfHwKKwkgICAgISh0aW1lc3RhbXAgPSBwYXJzZV90aW1lc3RhbXAoZW1haWxfZW5kICsgMiwgJm1lc3NhZ2UsIDEwKSkgfHwKKwkgICAgIW1lc3NhZ2UgfHwgbWVzc2FnZVswXSAhPSAnICcgfHwKKwkgICAgKG1lc3NhZ2VbMV0gIT0gJysnICYmIG1lc3NhZ2VbMV0gIT0gJy0nKSB8fAorCSAgICAhaXNkaWdpdChtZXNzYWdlWzJdKSB8fCAhaXNkaWdpdChtZXNzYWdlWzNdKSB8fAorCSAgICAhaXNkaWdpdChtZXNzYWdlWzRdKSB8fCAhaXNkaWdpdChtZXNzYWdlWzVdKSkKKwkJcmV0dXJuIDA7IC8qIGNvcnJ1cHQ/ICovCisJZW1haWxfZW5kWzFdID0gJ1wwJzsKKwl0eiA9IHN0cnRvbChtZXNzYWdlICsgMSwgTlVMTCwgMTApOworCWlmIChtZXNzYWdlWzZdICE9ICdcdCcpCisJCW1lc3NhZ2UgKz0gNjsKKwllbHNlCisJCW1lc3NhZ2UgKz0gNzsKKwlyZXR1cm4gZm4oJm9vaWQsICZub2lkLCBwLCB0aW1lc3RhbXAsIHR6LCBtZXNzYWdlLCBjYl9kYXRhKTsKK30KKworc3RhdGljIGNoYXIgKmZpbmRfYmVnaW5uaW5nX29mX2xpbmUoY2hhciAqYm9iLCBjaGFyICpzY2FuKQoreworCXdoaWxlIChib2IgPCBzY2FuICYmICooLS1zY2FuKSAhPSAnXG4nKQorCQk7IC8qIGtlZXAgc2Nhbm5pbmcgYmFja3dhcmRzICovCisJLyoKKwkgKiBSZXR1cm4gZWl0aGVyIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLCBvciBMRiBhdCB0aGUgZW5kIG9mCisJICogdGhlIHByZXZpb3VzIGxpbmUuCisJICovCisJcmV0dXJuIHNjYW47Cit9CisKK3N0YXRpYyBpbnQgZmlsZXNfZm9yX2VhY2hfcmVmbG9nX2VudF9yZXZlcnNlKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCQkJICAgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCQkgICAgIGVhY2hfcmVmbG9nX2VudF9mbiBmbiwKKwkJCQkJICAgICB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnMgPQorCQlmaWxlc19kb3duY2FzdChyZWZfc3RvcmUsIFJFRl9TVE9SRV9SRUFELAorCQkJICAgICAgICJmb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2UiKTsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqbG9nZnA7CisJbG9uZyBwb3M7CisJaW50IHJldCA9IDAsIGF0X3RhaWwgPSAxOworCisJZmlsZXNfcmVmbG9nX3BhdGgocmVmcywgJnNiLCByZWZuYW1lKTsKKwlsb2dmcCA9IGZvcGVuKHNiLmJ1ZiwgInIiKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWlmICghbG9nZnApCisJCXJldHVybiAtMTsKKworCS8qIEp1bXAgdG8gdGhlIGVuZCAqLworCWlmIChmc2Vlayhsb2dmcCwgMCwgU0VFS19FTkQpIDwgMCkKKwkJcmV0ID0gZXJyb3IoImNhbm5vdCBzZWVrIGJhY2sgcmVmbG9nIGZvciAlczogJXMiLAorCQkJICAgIHJlZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJcG9zID0gZnRlbGwobG9nZnApOworCXdoaWxlICghcmV0ICYmIDAgPCBwb3MpIHsKKwkJaW50IGNudDsKKwkJc2l6ZV90IG5yZWFkOworCQljaGFyIGJ1ZltCVUZTSVpdOworCQljaGFyICplbmRwLCAqc2NhbnA7CisKKwkJLyogRmlsbCBuZXh0IGJsb2NrIGZyb20gdGhlIGVuZCAqLworCQljbnQgPSAoc2l6ZW9mKGJ1ZikgPCBwb3MpID8gc2l6ZW9mKGJ1ZikgOiBwb3M7CisJCWlmIChmc2Vlayhsb2dmcCwgcG9zIC0gY250LCBTRUVLX1NFVCkpIHsKKwkJCXJldCA9IGVycm9yKCJjYW5ub3Qgc2VlayBiYWNrIHJlZmxvZyBmb3IgJXM6ICVzIiwKKwkJCQkgICAgcmVmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWJyZWFrOworCQl9CisJCW5yZWFkID0gZnJlYWQoYnVmLCBjbnQsIDEsIGxvZ2ZwKTsKKwkJaWYgKG5yZWFkICE9IDEpIHsKKwkJCXJldCA9IGVycm9yKCJjYW5ub3QgcmVhZCAlZCBieXRlcyBmcm9tIHJlZmxvZyBmb3IgJXM6ICVzIiwKKwkJCQkgICAgY250LCByZWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQkJYnJlYWs7CisJCX0KKwkJcG9zIC09IGNudDsKKworCQlzY2FucCA9IGVuZHAgPSBidWYgKyBjbnQ7CisJCWlmIChhdF90YWlsICYmIHNjYW5wWy0xXSA9PSAnXG4nKQorCQkJLyogTG9va2luZyBhdCB0aGUgZmluYWwgTEYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSAqLworCQkJc2NhbnAtLTsKKwkJYXRfdGFpbCA9IDA7CisKKwkJd2hpbGUgKGJ1ZiA8IHNjYW5wKSB7CisJCQkvKgorCQkJICogdGVybWluYXRpbmcgTEYgb2YgdGhlIHByZXZpb3VzIGxpbmUsIG9yIHRoZSBiZWdpbm5pbmcKKwkJCSAqIG9mIHRoZSBidWZmZXIuCisJCQkgKi8KKwkJCWNoYXIgKmJwOworCisJCQlicCA9IGZpbmRfYmVnaW5uaW5nX29mX2xpbmUoYnVmLCBzY2FucCk7CisKKwkJCWlmICgqYnAgPT0gJ1xuJykgeworCQkJCS8qCisJCQkJICogVGhlIG5ld2xpbmUgaXMgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgbGluZSwKKwkJCQkgKiBzbyB3ZSBrbm93IHdlIGhhdmUgY29tcGxldGUgbGluZSBzdGFydGluZworCQkJCSAqIGF0IChicCArIDEpLiBQcmVmaXggaXQgb250byBhbnkgcHJpb3IgZGF0YQorCQkJCSAqIHdlIGNvbGxlY3RlZCBmb3IgdGhlIGxpbmUgYW5kIHByb2Nlc3MgaXQuCisJCQkJICovCisJCQkJc3RyYnVmX3NwbGljZSgmc2IsIDAsIDAsIGJwICsgMSwgZW5kcCAtIChicCArIDEpKTsKKwkJCQlzY2FucCA9IGJwOworCQkJCWVuZHAgPSBicCArIDE7CisJCQkJcmV0ID0gc2hvd19vbmVfcmVmbG9nX2VudCgmc2IsIGZuLCBjYl9kYXRhKTsKKwkJCQlzdHJidWZfcmVzZXQoJnNiKTsKKwkJCQlpZiAocmV0KQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoIXBvcykgeworCQkJCS8qCisJCQkJICogV2UgYXJlIGF0IHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLCBhbmQgdGhlCisJCQkJICogc3RhcnQgb2YgdGhlIGZpbGU7IHRoZXJlIGlzIG5vIHByZXZpb3VzCisJCQkJICogbGluZSwgYW5kIHdlIGhhdmUgZXZlcnl0aGluZyBmb3IgdGhpcyBvbmUuCisJCQkJICogUHJvY2VzcyBpdCwgYW5kIHdlIGNhbiBlbmQgdGhlIGxvb3AuCisJCQkJICovCisJCQkJc3RyYnVmX3NwbGljZSgmc2IsIDAsIDAsIGJ1ZiwgZW5kcCAtIGJ1Zik7CisJCQkJcmV0ID0gc2hvd19vbmVfcmVmbG9nX2VudCgmc2IsIGZuLCBjYl9kYXRhKTsKKwkJCQlzdHJidWZfcmVzZXQoJnNiKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKGJwID09IGJ1ZikgeworCQkJCS8qCisJCQkJICogV2UgYXJlIGF0IHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLCBhbmQgdGhlcmUKKwkJCQkgKiBpcyBtb3JlIGZpbGUgdG8gcmVhZCBiYWNrd2FyZHMuIFdoaWNoIG1lYW5zCisJCQkJICogd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBsaW5lLiBOb3RlIHRoYXQgd2UKKwkJCQkgKiBtYXkgZ2V0IGhlcmUgZXZlbiBpZiAqYnAgd2FzIGEgbmV3bGluZTsgdGhhdAorCQkJCSAqIGp1c3QgbWVhbnMgd2UgYXJlIGF0IHRoZSBleGFjdCBlbmQgb2YgdGhlCisJCQkJICogcHJldmlvdXMgbGluZSwgcmF0aGVyIHRoYW4gc29tZSBzcG90IGluIHRoZQorCQkJCSAqIG1pZGRsZS4KKwkJCQkgKgorCQkJCSAqIFNhdmUgYXdheSB3aGF0IHdlIGhhdmUgdG8gYmUgY29tYmluZWQgd2l0aAorCQkJCSAqIHRoZSBkYXRhIGZyb20gdGhlIG5leHQgcmVhZC4KKwkJCQkgKi8KKwkJCQlzdHJidWZfc3BsaWNlKCZzYiwgMCwgMCwgYnVmLCBlbmRwIC0gYnVmKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJfQorCWlmICghcmV0ICYmIHNiLmxlbikKKwkJQlVHKCJyZXZlcnNlIHJlZmxvZyBwYXJzZXIgaGFkIGxlZnRvdmVyIGRhdGEiKTsKKworCWZjbG9zZShsb2dmcCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZpbGVzX2Zvcl9lYWNoX3JlZmxvZ19lbnQoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJCSAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgICAgIGVhY2hfcmVmbG9nX2VudF9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzID0KKwkJZmlsZXNfZG93bmNhc3QocmVmX3N0b3JlLCBSRUZfU1RPUkVfUkVBRCwKKwkJCSAgICAgICAiZm9yX2VhY2hfcmVmbG9nX2VudCIpOworCUZJTEUgKmxvZ2ZwOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gMDsKKworCWZpbGVzX3JlZmxvZ19wYXRoKHJlZnMsICZzYiwgcmVmbmFtZSk7CisJbG9nZnAgPSBmb3BlbihzYi5idWYsICJyIik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlpZiAoIWxvZ2ZwKQorCQlyZXR1cm4gLTE7CisKKwl3aGlsZSAoIXJldCAmJiAhc3RyYnVmX2dldHdob2xlbGluZSgmc2IsIGxvZ2ZwLCAnXG4nKSkKKwkJcmV0ID0gc2hvd19vbmVfcmVmbG9nX2VudCgmc2IsIGZuLCBjYl9kYXRhKTsKKwlmY2xvc2UobG9nZnApOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGZpbGVzX3JlZmxvZ19pdGVyYXRvciB7CisJc3RydWN0IHJlZl9pdGVyYXRvciBiYXNlOworCisJc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlOworCXN0cnVjdCBkaXJfaXRlcmF0b3IgKmRpcl9pdGVyYXRvcjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKK307CisKK3N0YXRpYyBpbnQgZmlsZXNfcmVmbG9nX2l0ZXJhdG9yX2FkdmFuY2Uoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKQoreworCXN0cnVjdCBmaWxlc19yZWZsb2dfaXRlcmF0b3IgKml0ZXIgPQorCQkoc3RydWN0IGZpbGVzX3JlZmxvZ19pdGVyYXRvciAqKXJlZl9pdGVyYXRvcjsKKwlzdHJ1Y3QgZGlyX2l0ZXJhdG9yICpkaXRlciA9IGl0ZXItPmRpcl9pdGVyYXRvcjsKKwlpbnQgb2s7CisKKwl3aGlsZSAoKG9rID0gZGlyX2l0ZXJhdG9yX2FkdmFuY2UoZGl0ZXIpKSA9PSBJVEVSX09LKSB7CisJCWludCBmbGFnczsKKworCQlpZiAoIVNfSVNSRUcoZGl0ZXItPnN0LnN0X21vZGUpKQorCQkJY29udGludWU7CisJCWlmIChkaXRlci0+YmFzZW5hbWVbMF0gPT0gJy4nKQorCQkJY29udGludWU7CisJCWlmIChlbmRzX3dpdGgoZGl0ZXItPmJhc2VuYW1lLCAiLmxvY2siKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChyZWZzX3JlYWRfcmVmX2Z1bGwoaXRlci0+cmVmX3N0b3JlLAorCQkJCSAgICAgICBkaXRlci0+cmVsYXRpdmVfcGF0aCwgMCwKKwkJCQkgICAgICAgJml0ZXItPm9pZCwgJmZsYWdzKSkgeworCQkJZXJyb3IoImJhZCByZWYgZm9yICVzIiwgZGl0ZXItPnBhdGguYnVmKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaXRlci0+YmFzZS5yZWZuYW1lID0gZGl0ZXItPnJlbGF0aXZlX3BhdGg7CisJCWl0ZXItPmJhc2Uub2lkID0gJml0ZXItPm9pZDsKKwkJaXRlci0+YmFzZS5mbGFncyA9IGZsYWdzOworCQlyZXR1cm4gSVRFUl9PSzsKKwl9CisKKwlpdGVyLT5kaXJfaXRlcmF0b3IgPSBOVUxMOworCWlmIChyZWZfaXRlcmF0b3JfYWJvcnQocmVmX2l0ZXJhdG9yKSA9PSBJVEVSX0VSUk9SKQorCQlvayA9IElURVJfRVJST1I7CisJcmV0dXJuIG9rOworfQorCitzdGF0aWMgaW50IGZpbGVzX3JlZmxvZ19pdGVyYXRvcl9wZWVsKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvciwKKwkJCQkgICBzdHJ1Y3Qgb2JqZWN0X2lkICpwZWVsZWQpCit7CisJQlVHKCJyZWZfaXRlcmF0b3JfcGVlbCgpIGNhbGxlZCBmb3IgcmVmbG9nX2l0ZXJhdG9yIik7Cit9CisKK3N0YXRpYyBpbnQgZmlsZXNfcmVmbG9nX2l0ZXJhdG9yX2Fib3J0KHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlzdHJ1Y3QgZmlsZXNfcmVmbG9nX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBmaWxlc19yZWZsb2dfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisJaW50IG9rID0gSVRFUl9ET05FOworCisJaWYgKGl0ZXItPmRpcl9pdGVyYXRvcikKKwkJb2sgPSBkaXJfaXRlcmF0b3JfYWJvcnQoaXRlci0+ZGlyX2l0ZXJhdG9yKTsKKworCWJhc2VfcmVmX2l0ZXJhdG9yX2ZyZWUocmVmX2l0ZXJhdG9yKTsKKwlyZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2l0ZXJhdG9yX3Z0YWJsZSBmaWxlc19yZWZsb2dfaXRlcmF0b3JfdnRhYmxlID0geworCWZpbGVzX3JlZmxvZ19pdGVyYXRvcl9hZHZhbmNlLAorCWZpbGVzX3JlZmxvZ19pdGVyYXRvcl9wZWVsLAorCWZpbGVzX3JlZmxvZ19pdGVyYXRvcl9hYm9ydAorfTsKKworc3RhdGljIHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZmxvZ19pdGVyYXRvcl9iZWdpbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkJCQkgIGNvbnN0IGNoYXIgKmdpdGRpcikKK3sKKwlzdHJ1Y3QgZGlyX2l0ZXJhdG9yICpkaXRlcjsKKwlzdHJ1Y3QgZmlsZXNfcmVmbG9nX2l0ZXJhdG9yICppdGVyOworCXN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcjsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkZigmc2IsICIlcy9sb2dzIiwgZ2l0ZGlyKTsKKworCWRpdGVyID0gZGlyX2l0ZXJhdG9yX2JlZ2luKHNiLmJ1ZiwgMCk7CisJaWYgKCFkaXRlcikgeworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm4gZW1wdHlfcmVmX2l0ZXJhdG9yX2JlZ2luKCk7CisJfQorCisJaXRlciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCppdGVyKSk7CisJcmVmX2l0ZXJhdG9yID0gJml0ZXItPmJhc2U7CisKKwliYXNlX3JlZl9pdGVyYXRvcl9pbml0KHJlZl9pdGVyYXRvciwgJmZpbGVzX3JlZmxvZ19pdGVyYXRvcl92dGFibGUsIDApOworCWl0ZXItPmRpcl9pdGVyYXRvciA9IGRpdGVyOworCWl0ZXItPnJlZl9zdG9yZSA9IHJlZl9zdG9yZTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJcmV0dXJuIHJlZl9pdGVyYXRvcjsKK30KKworc3RhdGljIGVudW0gaXRlcmF0b3Jfc2VsZWN0aW9uIHJlZmxvZ19pdGVyYXRvcl9zZWxlY3QoCisJc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcl93b3JrdHJlZSwKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyX2NvbW1vbiwKKwl2b2lkICpjYl9kYXRhKQoreworCWlmIChpdGVyX3dvcmt0cmVlKSB7CisJCS8qCisJCSAqIFdlJ3JlIGEgYml0IGxvb3NlIGhlcmUuIFdlIHByb2JhYmx5IHNob3VsZCBpZ25vcmUKKwkJICogY29tbW9uIHJlZnMgaWYgdGhleSBhcmUgYWNjaWRlbnRhbGx5IGFkZGVkIGFzCisJCSAqIHBlci13b3JrdHJlZSByZWZzLgorCQkgKi8KKwkJcmV0dXJuIElURVJfU0VMRUNUXzA7CisJfSBlbHNlIGlmIChpdGVyX2NvbW1vbikgeworCQlpZiAocmVmX3R5cGUoaXRlcl9jb21tb24tPnJlZm5hbWUpID09IFJFRl9UWVBFX05PUk1BTCkKKwkJCXJldHVybiBJVEVSX1NFTEVDVF8xOworCisJCS8qCisJCSAqIFRoZSBtYWluIHJlZiBzdG9yZSBtYXkgY29udGFpbiBtYWluIHdvcmt0cmVlJ3MKKwkJICogcGVyLXdvcmt0cmVlIHJlZnMsIHdoaWNoIHNob3VsZCBiZSBpZ25vcmVkCisJCSAqLworCQlyZXR1cm4gSVRFUl9TS0lQXzE7CisJfSBlbHNlCisJCXJldHVybiBJVEVSX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpmaWxlc19yZWZsb2dfaXRlcmF0b3JfYmVnaW4oc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlKQoreworCXN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnMgPQorCQlmaWxlc19kb3duY2FzdChyZWZfc3RvcmUsIFJFRl9TVE9SRV9SRUFELAorCQkJICAgICAgICJyZWZsb2dfaXRlcmF0b3JfYmVnaW4iKTsKKworCWlmICghc3RyY21wKHJlZnMtPmdpdGRpciwgcmVmcy0+Z2l0Y29tbW9uZGlyKSkgeworCQlyZXR1cm4gcmVmbG9nX2l0ZXJhdG9yX2JlZ2luKHJlZl9zdG9yZSwgcmVmcy0+Z2l0Y29tbW9uZGlyKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gbWVyZ2VfcmVmX2l0ZXJhdG9yX2JlZ2luKAorCQkJMCwKKwkJCXJlZmxvZ19pdGVyYXRvcl9iZWdpbihyZWZfc3RvcmUsIHJlZnMtPmdpdGRpciksCisJCQlyZWZsb2dfaXRlcmF0b3JfYmVnaW4ocmVmX3N0b3JlLCByZWZzLT5naXRjb21tb25kaXIpLAorCQkJcmVmbG9nX2l0ZXJhdG9yX3NlbGVjdCwgcmVmcyk7CisJfQorfQorCisvKgorICogSWYgdXBkYXRlIGlzIGEgZGlyZWN0IHVwZGF0ZSBvZiBoZWFkX3JlZiAodGhlIHJlZmVyZW5jZSBwb2ludGVkIHRvCisgKiBieSBIRUFEKSwgdGhlbiBhZGQgYW4gZXh0cmEgUkVGX0xPR19PTkxZIHVwZGF0ZSBmb3IgSEVBRC4KKyAqLworc3RhdGljIGludCBzcGxpdF9oZWFkX3VwZGF0ZShzdHJ1Y3QgcmVmX3VwZGF0ZSAqdXBkYXRlLAorCQkJICAgICBzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgICAgY29uc3QgY2hhciAqaGVhZF9yZWYsCisJCQkgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqYWZmZWN0ZWRfcmVmbmFtZXMsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgcmVmX3VwZGF0ZSAqbmV3X3VwZGF0ZTsKKworCWlmICgodXBkYXRlLT5mbGFncyAmIFJFRl9MT0dfT05MWSkgfHwKKwkgICAgKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfSVNfUFJVTklORykgfHwKKwkgICAgKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfVVBEQVRFX1ZJQV9IRUFEKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKHVwZGF0ZS0+cmVmbmFtZSwgaGVhZF9yZWYpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRmlyc3QgbWFrZSBzdXJlIHRoYXQgSEVBRCBpcyBub3QgYWxyZWFkeSBpbiB0aGUKKwkgKiB0cmFuc2FjdGlvbi4gVGhpcyBjaGVjayBpcyBPKGxnIE4pIGluIHRoZSB0cmFuc2FjdGlvbgorCSAqIHNpemUsIGJ1dCBpdCBoYXBwZW5zIGF0IG1vc3Qgb25jZSBwZXIgdHJhbnNhY3Rpb24uCisJICovCisJaWYgKHN0cmluZ19saXN0X2hhc19zdHJpbmcoYWZmZWN0ZWRfcmVmbmFtZXMsICJIRUFEIikpIHsKKwkJLyogQW4gZW50cnkgYWxyZWFkeSBleGlzdGVkICovCisJCXN0cmJ1Zl9hZGRmKGVyciwKKwkJCSAgICAibXVsdGlwbGUgdXBkYXRlcyBmb3IgJ0hFQUQnIChpbmNsdWRpbmcgb25lICIKKwkJCSAgICAidmlhIGl0cyByZWZlcmVudCAnJXMnKSBhcmUgbm90IGFsbG93ZWQiLAorCQkJICAgIHVwZGF0ZS0+cmVmbmFtZSk7CisJCXJldHVybiBUUkFOU0FDVElPTl9OQU1FX0NPTkZMSUNUOworCX0KKworCW5ld191cGRhdGUgPSByZWZfdHJhbnNhY3Rpb25fYWRkX3VwZGF0ZSgKKwkJCXRyYW5zYWN0aW9uLCAiSEVBRCIsCisJCQl1cGRhdGUtPmZsYWdzIHwgUkVGX0xPR19PTkxZIHwgUkVGX05PX0RFUkVGLAorCQkJJnVwZGF0ZS0+bmV3X29pZCwgJnVwZGF0ZS0+b2xkX29pZCwKKwkJCXVwZGF0ZS0+bXNnKTsKKworCS8qCisJICogQWRkICJIRUFEIi4gVGhpcyBpbnNlcnRpb24gaXMgTyhOKSBpbiB0aGUgdHJhbnNhY3Rpb24KKwkgKiBzaXplLCBidXQgaXQgaGFwcGVucyBhdCBtb3N0IG9uY2UgcGVyIHRyYW5zYWN0aW9uLgorCSAqIEFkZCBuZXdfdXBkYXRlLT5yZWZuYW1lIGluc3RlYWQgb2YgYSBsaXRlcmFsICJIRUFEIi4KKwkgKi8KKwlpZiAoc3RyY21wKG5ld191cGRhdGUtPnJlZm5hbWUsICJIRUFEIikpCisJCUJVRygiJXMgdW5leHBlY3RlZGx5IG5vdCAnSEVBRCciLCBuZXdfdXBkYXRlLT5yZWZuYW1lKTsKKwlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KGFmZmVjdGVkX3JlZm5hbWVzLCBuZXdfdXBkYXRlLT5yZWZuYW1lKTsKKwlpdGVtLT51dGlsID0gbmV3X3VwZGF0ZTsKKworCXJldHVybiAwOworfQorCisvKgorICogdXBkYXRlIGlzIGZvciBhIHN5bXJlZiB0aGF0IHBvaW50cyBhdCByZWZlcmVudCBhbmQgZG9lc24ndCBoYXZlCisgKiBSRUZfTk9fREVSRUYgc2V0LiBTcGxpdCBpdCBpbnRvIHR3byB1cGRhdGVzOgorICogLSBUaGUgb3JpZ2luYWwgdXBkYXRlLCBidXQgd2l0aCBSRUZfTE9HX09OTFkgYW5kIFJFRl9OT19ERVJFRiBzZXQKKyAqIC0gQSBuZXcsIHNlcGFyYXRlIHVwZGF0ZSBmb3IgdGhlIHJlZmVyZW50IHJlZmVyZW5jZQorICogTm90ZSB0aGF0IHRoZSBuZXcgdXBkYXRlIHdpbGwgaXRzZWxmIGJlIHN1YmplY3QgdG8gc3BsaXR0aW5nIHdoZW4KKyAqIHRoZSBpdGVyYXRpb24gZ2V0cyB0byBpdC4KKyAqLworc3RhdGljIGludCBzcGxpdF9zeW1yZWZfdXBkYXRlKHN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUsCisJCQkgICAgICAgY29uc3QgY2hhciAqcmVmZXJlbnQsCisJCQkgICAgICAgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICAgICAgc3RydWN0IHN0cmluZ19saXN0ICphZmZlY3RlZF9yZWZuYW1lcywKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IHJlZl91cGRhdGUgKm5ld191cGRhdGU7CisJdW5zaWduZWQgaW50IG5ld19mbGFnczsKKworCS8qCisJICogRmlyc3QgbWFrZSBzdXJlIHRoYXQgcmVmZXJlbnQgaXMgbm90IGFscmVhZHkgaW4gdGhlCisJICogdHJhbnNhY3Rpb24uIFRoaXMgY2hlY2sgaXMgTyhsZyBOKSBpbiB0aGUgdHJhbnNhY3Rpb24KKwkgKiBzaXplLCBidXQgaXQgaGFwcGVucyBhdCBtb3N0IG9uY2UgcGVyIHN5bXJlZiBpbiBhCisJICogdHJhbnNhY3Rpb24uCisJICovCisJaWYgKHN0cmluZ19saXN0X2hhc19zdHJpbmcoYWZmZWN0ZWRfcmVmbmFtZXMsIHJlZmVyZW50KSkgeworCQkvKiBBbiBlbnRyeSBhbHJlYWR5IGV4aXN0cyAqLworCQlzdHJidWZfYWRkZihlcnIsCisJCQkgICAgIm11bHRpcGxlIHVwZGF0ZXMgZm9yICclcycgKGluY2x1ZGluZyBvbmUgIgorCQkJICAgICJ2aWEgc3ltcmVmICclcycpIGFyZSBub3QgYWxsb3dlZCIsCisJCQkgICAgcmVmZXJlbnQsIHVwZGF0ZS0+cmVmbmFtZSk7CisJCXJldHVybiBUUkFOU0FDVElPTl9OQU1FX0NPTkZMSUNUOworCX0KKworCW5ld19mbGFncyA9IHVwZGF0ZS0+ZmxhZ3M7CisJaWYgKCFzdHJjbXAodXBkYXRlLT5yZWZuYW1lLCAiSEVBRCIpKSB7CisJCS8qCisJCSAqIFJlY29yZCB0aGF0IHRoZSBuZXcgdXBkYXRlIGNhbWUgdmlhIEhFQUQsIHNvIHRoYXQKKwkJICogd2hlbiB3ZSBwcm9jZXNzIGl0LCBzcGxpdF9oZWFkX3VwZGF0ZSgpIGRvZXNuJ3QgdHJ5CisJCSAqIHRvIGFkZCBhbm90aGVyIHJlZmxvZyB1cGRhdGUgZm9yIEhFQUQuIE5vdGUgdGhhdAorCQkgKiB0aGlzIGJpdCB3aWxsIGJlIHByb3BhZ2F0ZWQgaWYgdGhlIG5ld191cGRhdGUKKwkJICogaXRzZWxmIG5lZWRzIHRvIGJlIHNwbGl0LgorCQkgKi8KKwkJbmV3X2ZsYWdzIHw9IFJFRl9VUERBVEVfVklBX0hFQUQ7CisJfQorCisJbmV3X3VwZGF0ZSA9IHJlZl90cmFuc2FjdGlvbl9hZGRfdXBkYXRlKAorCQkJdHJhbnNhY3Rpb24sIHJlZmVyZW50LCBuZXdfZmxhZ3MsCisJCQkmdXBkYXRlLT5uZXdfb2lkLCAmdXBkYXRlLT5vbGRfb2lkLAorCQkJdXBkYXRlLT5tc2cpOworCisJbmV3X3VwZGF0ZS0+cGFyZW50X3VwZGF0ZSA9IHVwZGF0ZTsKKworCS8qCisJICogQ2hhbmdlIHRoZSBzeW1ib2xpYyByZWYgdXBkYXRlIHRvIGxvZyBvbmx5LiBBbHNvLCBpdAorCSAqIGRvZXNuJ3QgbmVlZCB0byBjaGVjayBpdHMgb2xkIE9JRCB2YWx1ZSwgYXMgdGhhdCB3aWxsIGJlCisJICogZG9uZSB3aGVuIG5ld191cGRhdGUgaXMgcHJvY2Vzc2VkLgorCSAqLworCXVwZGF0ZS0+ZmxhZ3MgfD0gUkVGX0xPR19PTkxZIHwgUkVGX05PX0RFUkVGOworCXVwZGF0ZS0+ZmxhZ3MgJj0gflJFRl9IQVZFX09MRDsKKworCS8qCisJICogQWRkIHRoZSByZWZlcmVudC4gVGhpcyBpbnNlcnRpb24gaXMgTyhOKSBpbiB0aGUgdHJhbnNhY3Rpb24KKwkgKiBzaXplLCBidXQgaXQgaGFwcGVucyBhdCBtb3N0IG9uY2UgcGVyIHN5bXJlZiBpbiBhCisJICogdHJhbnNhY3Rpb24uIE1ha2Ugc3VyZSB0byBhZGQgbmV3X3VwZGF0ZS0+cmVmbmFtZSwgd2hpY2ggd2lsbAorCSAqIGJlIHZhbGlkIGFzIGxvbmcgYXMgYWZmZWN0ZWRfcmVmbmFtZXMgaXMgaW4gdXNlLCBhbmQgTk9UCisJICogcmVmZXJlbnQsIHdoaWNoIG1pZ2h0IHNvb24gYmUgZnJlZWQgYnkgb3VyIGNhbGxlci4KKwkgKi8KKwlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KGFmZmVjdGVkX3JlZm5hbWVzLCBuZXdfdXBkYXRlLT5yZWZuYW1lKTsKKwlpZiAoaXRlbS0+dXRpbCkKKwkJQlVHKCIlcyB1bmV4cGVjdGVkbHkgZm91bmQgaW4gYWZmZWN0ZWRfcmVmbmFtZXMiLAorCQkgICAgbmV3X3VwZGF0ZS0+cmVmbmFtZSk7CisJaXRlbS0+dXRpbCA9IG5ld191cGRhdGU7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgcmVmbmFtZSB1bmRlciB3aGljaCB1cGRhdGUgd2FzIG9yaWdpbmFsbHkgcmVxdWVzdGVkLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqb3JpZ2luYWxfdXBkYXRlX3JlZm5hbWUoc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSkKK3sKKwl3aGlsZSAodXBkYXRlLT5wYXJlbnRfdXBkYXRlKQorCQl1cGRhdGUgPSB1cGRhdGUtPnBhcmVudF91cGRhdGU7CisKKwlyZXR1cm4gdXBkYXRlLT5yZWZuYW1lOworfQorCisvKgorICogQ2hlY2sgd2hldGhlciB0aGUgUkVGX0hBVkVfT0xEIGFuZCBvbGRfb2lkIHZhbHVlcyBzdG9yZWQgaW4gdXBkYXRlCisgKiBhcmUgY29uc2lzdGVudCB3aXRoIG9pZCwgd2hpY2ggaXMgdGhlIHJlZmVyZW5jZSdzIGN1cnJlbnQgdmFsdWUuIElmCisgKiBldmVyeXRoaW5nIGlzIE9LLCByZXR1cm4gMDsgb3RoZXJ3aXNlLCB3cml0ZSBhbiBlcnJvciBtZXNzYWdlIHRvCisgKiBlcnIgYW5kIHJldHVybiAtMS4KKyAqLworc3RhdGljIGludCBjaGVja19vbGRfb2lkKHN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJaWYgKCEodXBkYXRlLT5mbGFncyAmIFJFRl9IQVZFX09MRCkgfHwKKwkJICAgb2lkZXEob2lkLCAmdXBkYXRlLT5vbGRfb2lkKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXNfbnVsbF9vaWQoJnVwZGF0ZS0+b2xkX29pZCkpCisJCXN0cmJ1Zl9hZGRmKGVyciwgImNhbm5vdCBsb2NrIHJlZiAnJXMnOiAiCisJCQkgICAgInJlZmVyZW5jZSBhbHJlYWR5IGV4aXN0cyIsCisJCQkgICAgb3JpZ2luYWxfdXBkYXRlX3JlZm5hbWUodXBkYXRlKSk7CisJZWxzZSBpZiAoaXNfbnVsbF9vaWQob2lkKSkKKwkJc3RyYnVmX2FkZGYoZXJyLCAiY2Fubm90IGxvY2sgcmVmICclcyc6ICIKKwkJCSAgICAicmVmZXJlbmNlIGlzIG1pc3NpbmcgYnV0IGV4cGVjdGVkICVzIiwKKwkJCSAgICBvcmlnaW5hbF91cGRhdGVfcmVmbmFtZSh1cGRhdGUpLAorCQkJICAgIG9pZF90b19oZXgoJnVwZGF0ZS0+b2xkX29pZCkpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoZXJyLCAiY2Fubm90IGxvY2sgcmVmICclcyc6ICIKKwkJCSAgICAiaXMgYXQgJXMgYnV0IGV4cGVjdGVkICVzIiwKKwkJCSAgICBvcmlnaW5hbF91cGRhdGVfcmVmbmFtZSh1cGRhdGUpLAorCQkJICAgIG9pZF90b19oZXgob2lkKSwKKwkJCSAgICBvaWRfdG9faGV4KCZ1cGRhdGUtPm9sZF9vaWQpKTsKKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFByZXBhcmUgZm9yIGNhcnJ5aW5nIG91dCB1cGRhdGU6CisgKiAtIExvY2sgdGhlIHJlZmVyZW5jZSByZWZlcnJlZCB0byBieSB1cGRhdGUuCisgKiAtIFJlYWQgdGhlIHJlZmVyZW5jZSB1bmRlciBsb2NrLgorICogLSBDaGVjayB0aGF0IGl0cyBvbGQgT0lEIHZhbHVlIChpZiBzcGVjaWZpZWQpIGlzIGNvcnJlY3QsIGFuZCBpbgorICogICBhbnkgY2FzZSByZWNvcmQgaXQgaW4gdXBkYXRlLT5sb2NrLT5vbGRfb2lkIGZvciBsYXRlciB1c2Ugd2hlbgorICogICB3cml0aW5nIHRoZSByZWZsb2cuCisgKiAtIElmIGl0IGlzIGEgc3ltcmVmIHVwZGF0ZSB3aXRob3V0IFJFRl9OT19ERVJFRiwgc3BsaXQgaXQgdXAgaW50byBhCisgKiAgIFJFRl9MT0dfT05MWSB1cGRhdGUgb2YgdGhlIHN5bXJlZiBhbmQgYWRkIGEgc2VwYXJhdGUgdXBkYXRlIGZvcgorICogICB0aGUgcmVmZXJlbnQgdG8gdHJhbnNhY3Rpb24uCisgKiAtIElmIGl0IGlzIGFuIHVwZGF0ZSBvZiBoZWFkX3JlZiwgYWRkIGEgY29ycmVzcG9uZGluZyBSRUZfTE9HX09OTFkKKyAqICAgdXBkYXRlIG9mIEhFQUQuCisgKi8KK3N0YXRpYyBpbnQgbG9ja19yZWZfZm9yX3VwZGF0ZShzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzLAorCQkJICAgICAgIHN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUsCisJCQkgICAgICAgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICAgICAgY29uc3QgY2hhciAqaGVhZF9yZWYsCisJCQkgICAgICAgc3RydWN0IHN0cmluZ19saXN0ICphZmZlY3RlZF9yZWZuYW1lcywKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHN0cmJ1ZiByZWZlcmVudCA9IFNUUkJVRl9JTklUOworCWludCBtdXN0ZXhpc3QgPSAodXBkYXRlLT5mbGFncyAmIFJFRl9IQVZFX09MRCkgJiYKKwkJIWlzX251bGxfb2lkKCZ1cGRhdGUtPm9sZF9vaWQpOworCWludCByZXQgPSAwOworCXN0cnVjdCByZWZfbG9jayAqbG9jazsKKworCWZpbGVzX2Fzc2VydF9tYWluX3JlcG9zaXRvcnkocmVmcywgImxvY2tfcmVmX2Zvcl91cGRhdGUiKTsKKworCWlmICgodXBkYXRlLT5mbGFncyAmIFJFRl9IQVZFX05FVykgJiYgaXNfbnVsbF9vaWQoJnVwZGF0ZS0+bmV3X29pZCkpCisJCXVwZGF0ZS0+ZmxhZ3MgfD0gUkVGX0RFTEVUSU5HOworCisJaWYgKGhlYWRfcmVmKSB7CisJCXJldCA9IHNwbGl0X2hlYWRfdXBkYXRlKHVwZGF0ZSwgdHJhbnNhY3Rpb24sIGhlYWRfcmVmLAorCQkJCQlhZmZlY3RlZF9yZWZuYW1lcywgZXJyKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGxvY2tfcmF3X3JlZihyZWZzLCB1cGRhdGUtPnJlZm5hbWUsIG11c3RleGlzdCwKKwkJCSAgIGFmZmVjdGVkX3JlZm5hbWVzLCBOVUxMLAorCQkJICAgJmxvY2ssICZyZWZlcmVudCwKKwkJCSAgICZ1cGRhdGUtPnR5cGUsIGVycik7CisJaWYgKHJldCkgeworCQljaGFyICpyZWFzb247CisKKwkJcmVhc29uID0gc3RyYnVmX2RldGFjaChlcnIsIE5VTEwpOworCQlzdHJidWZfYWRkZihlcnIsICJjYW5ub3QgbG9jayByZWYgJyVzJzogJXMiLAorCQkJICAgIG9yaWdpbmFsX3VwZGF0ZV9yZWZuYW1lKHVwZGF0ZSksIHJlYXNvbik7CisJCWZyZWUocmVhc29uKTsKKwkJZ290byBvdXQ7CisJfQorCisJdXBkYXRlLT5iYWNrZW5kX2RhdGEgPSBsb2NrOworCisJaWYgKHVwZGF0ZS0+dHlwZSAmIFJFRl9JU1NZTVJFRikgeworCQlpZiAodXBkYXRlLT5mbGFncyAmIFJFRl9OT19ERVJFRikgeworCQkJLyoKKwkJCSAqIFdlIHdvbid0IGJlIHJlYWRpbmcgdGhlIHJlZmVyZW50IGFzIHBhcnQgb2YKKwkJCSAqIHRoZSB0cmFuc2FjdGlvbiwgc28gd2UgaGF2ZSB0byByZWFkIGl0IGhlcmUKKwkJCSAqIHRvIHJlY29yZCBhbmQgcG9zc2libHkgY2hlY2sgb2xkX29pZDoKKwkJCSAqLworCQkJaWYgKHJlZnNfcmVhZF9yZWZfZnVsbCgmcmVmcy0+YmFzZSwKKwkJCQkJICAgICAgIHJlZmVyZW50LmJ1ZiwgMCwKKwkJCQkJICAgICAgICZsb2NrLT5vbGRfb2lkLCBOVUxMKSkgeworCQkJCWlmICh1cGRhdGUtPmZsYWdzICYgUkVGX0hBVkVfT0xEKSB7CisJCQkJCXN0cmJ1Zl9hZGRmKGVyciwgImNhbm5vdCBsb2NrIHJlZiAnJXMnOiAiCisJCQkJCQkgICAgImVycm9yIHJlYWRpbmcgcmVmZXJlbmNlIiwKKwkJCQkJCSAgICBvcmlnaW5hbF91cGRhdGVfcmVmbmFtZSh1cGRhdGUpKTsKKwkJCQkJcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJfSBlbHNlIGlmIChjaGVja19vbGRfb2lkKHVwZGF0ZSwgJmxvY2stPm9sZF9vaWQsIGVycikpIHsKKwkJCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIENyZWF0ZSBhIG5ldyB1cGRhdGUgZm9yIHRoZSByZWZlcmVuY2UgdGhpcworCQkJICogc3ltcmVmIGlzIHBvaW50aW5nIGF0LiBBbHNvLCB3ZSB3aWxsIHJlY29yZAorCQkJICogYW5kIHZlcmlmeSBvbGRfb2lkIGZvciB0aGlzIHVwZGF0ZSBhcyBwYXJ0CisJCQkgKiBvZiBwcm9jZXNzaW5nIHRoZSBzcGxpdC1vZmYgdXBkYXRlLCBzbyB3ZQorCQkJICogZG9uJ3QgaGF2ZSB0byBkbyBpdCBoZXJlLgorCQkJICovCisJCQlyZXQgPSBzcGxpdF9zeW1yZWZfdXBkYXRlKHVwZGF0ZSwKKwkJCQkJCSAgcmVmZXJlbnQuYnVmLCB0cmFuc2FjdGlvbiwKKwkJCQkJCSAgYWZmZWN0ZWRfcmVmbmFtZXMsIGVycik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHJlZl91cGRhdGUgKnBhcmVudF91cGRhdGU7CisKKwkJaWYgKGNoZWNrX29sZF9vaWQodXBkYXRlLCAmbG9jay0+b2xkX29pZCwgZXJyKSkgeworCQkJcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyoKKwkJICogSWYgdGhpcyB1cGRhdGUgaXMgaGFwcGVuaW5nIGluZGlyZWN0bHkgYmVjYXVzZSBvZiBhCisJCSAqIHN5bXJlZiB1cGRhdGUsIHJlY29yZCB0aGUgb2xkIE9JRCBpbiB0aGUgcGFyZW50CisJCSAqIHVwZGF0ZToKKwkJICovCisJCWZvciAocGFyZW50X3VwZGF0ZSA9IHVwZGF0ZS0+cGFyZW50X3VwZGF0ZTsKKwkJICAgICBwYXJlbnRfdXBkYXRlOworCQkgICAgIHBhcmVudF91cGRhdGUgPSBwYXJlbnRfdXBkYXRlLT5wYXJlbnRfdXBkYXRlKSB7CisJCQlzdHJ1Y3QgcmVmX2xvY2sgKnBhcmVudF9sb2NrID0gcGFyZW50X3VwZGF0ZS0+YmFja2VuZF9kYXRhOworCQkJb2lkY3B5KCZwYXJlbnRfbG9jay0+b2xkX29pZCwgJmxvY2stPm9sZF9vaWQpOworCQl9CisJfQorCisJaWYgKCh1cGRhdGUtPmZsYWdzICYgUkVGX0hBVkVfTkVXKSAmJgorCSAgICAhKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfREVMRVRJTkcpICYmCisJICAgICEodXBkYXRlLT5mbGFncyAmIFJFRl9MT0dfT05MWSkpIHsKKwkJaWYgKCEodXBkYXRlLT50eXBlICYgUkVGX0lTU1lNUkVGKSAmJgorCQkgICAgb2lkZXEoJmxvY2stPm9sZF9vaWQsICZ1cGRhdGUtPm5ld19vaWQpKSB7CisJCQkvKgorCQkJICogVGhlIHJlZmVyZW5jZSBhbHJlYWR5IGhhcyB0aGUgZGVzaXJlZAorCQkJICogdmFsdWUsIHNvIHdlIGRvbid0IG5lZWQgdG8gd3JpdGUgaXQuCisJCQkgKi8KKwkJfSBlbHNlIGlmICh3cml0ZV9yZWZfdG9fbG9ja2ZpbGUobG9jaywgJnVwZGF0ZS0+bmV3X29pZCwKKwkJCQkJCSBlcnIpKSB7CisJCQljaGFyICp3cml0ZV9lcnIgPSBzdHJidWZfZGV0YWNoKGVyciwgTlVMTCk7CisKKwkJCS8qCisJCQkgKiBUaGUgbG9jayB3YXMgZnJlZWQgdXBvbiBmYWlsdXJlIG9mCisJCQkgKiB3cml0ZV9yZWZfdG9fbG9ja2ZpbGUoKToKKwkJCSAqLworCQkJdXBkYXRlLT5iYWNrZW5kX2RhdGEgPSBOVUxMOworCQkJc3RyYnVmX2FkZGYoZXJyLAorCQkJCSAgICAiY2Fubm90IHVwZGF0ZSByZWYgJyVzJzogJXMiLAorCQkJCSAgICB1cGRhdGUtPnJlZm5hbWUsIHdyaXRlX2Vycik7CisJCQlmcmVlKHdyaXRlX2Vycik7CisJCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSB7CisJCQl1cGRhdGUtPmZsYWdzIHw9IFJFRl9ORUVEU19DT01NSVQ7CisJCX0KKwl9CisJaWYgKCEodXBkYXRlLT5mbGFncyAmIFJFRl9ORUVEU19DT01NSVQpKSB7CisJCS8qCisJCSAqIFdlIGRpZG4ndCBjYWxsIHdyaXRlX3JlZl90b19sb2NrZmlsZSgpLCBzbworCQkgKiB0aGUgbG9ja2ZpbGUgaXMgc3RpbGwgb3Blbi4gQ2xvc2UgaXQgdG8KKwkJICogZnJlZSB1cCB0aGUgZmlsZSBkZXNjcmlwdG9yOgorCQkgKi8KKwkJaWYgKGNsb3NlX3JlZl9nZW50bHkobG9jaykpIHsKKwkJCXN0cmJ1Zl9hZGRmKGVyciwgImNvdWxkbid0IGNsb3NlICclcy5sb2NrJyIsCisJCQkJICAgIHVwZGF0ZS0+cmVmbmFtZSk7CisJCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKK291dDoKKwlzdHJidWZfcmVsZWFzZSgmcmVmZXJlbnQpOworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBmaWxlc190cmFuc2FjdGlvbl9iYWNrZW5kX2RhdGEgeworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnBhY2tlZF90cmFuc2FjdGlvbjsKKwlpbnQgcGFja2VkX3JlZnNfbG9ja2VkOworfTsKKworLyoKKyAqIFVubG9jayBhbnkgcmVmZXJlbmNlcyBpbiBgdHJhbnNhY3Rpb25gIHRoYXQgYXJlIHN0aWxsIGxvY2tlZCwgYW5kCisgKiBtYXJrIHRoZSB0cmFuc2FjdGlvbiBjbG9zZWQuCisgKi8KK3N0YXRpYyB2b2lkIGZpbGVzX3RyYW5zYWN0aW9uX2NsZWFudXAoc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcywKKwkJCQkgICAgICBzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbikKK3sKKwlzaXplX3QgaTsKKwlzdHJ1Y3QgZmlsZXNfdHJhbnNhY3Rpb25fYmFja2VuZF9kYXRhICpiYWNrZW5kX2RhdGEgPQorCQl0cmFuc2FjdGlvbi0+YmFja2VuZF9kYXRhOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHJhbnNhY3Rpb24tPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHRyYW5zYWN0aW9uLT51cGRhdGVzW2ldOworCQlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2sgPSB1cGRhdGUtPmJhY2tlbmRfZGF0YTsKKworCQlpZiAobG9jaykgeworCQkJdW5sb2NrX3JlZihsb2NrKTsKKwkJCXVwZGF0ZS0+YmFja2VuZF9kYXRhID0gTlVMTDsKKwkJfQorCX0KKworCWlmIChiYWNrZW5kX2RhdGEpIHsKKwkJaWYgKGJhY2tlbmRfZGF0YS0+cGFja2VkX3RyYW5zYWN0aW9uICYmCisJCSAgICByZWZfdHJhbnNhY3Rpb25fYWJvcnQoYmFja2VuZF9kYXRhLT5wYWNrZWRfdHJhbnNhY3Rpb24sICZlcnIpKSB7CisJCQllcnJvcigiZXJyb3IgYWJvcnRpbmcgdHJhbnNhY3Rpb246ICVzIiwgZXJyLmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwkJfQorCisJCWlmIChiYWNrZW5kX2RhdGEtPnBhY2tlZF9yZWZzX2xvY2tlZCkKKwkJCXBhY2tlZF9yZWZzX3VubG9jayhyZWZzLT5wYWNrZWRfcmVmX3N0b3JlKTsKKworCQlmcmVlKGJhY2tlbmRfZGF0YSk7CisJfQorCisJdHJhbnNhY3Rpb24tPnN0YXRlID0gUkVGX1RSQU5TQUNUSU9OX0NMT1NFRDsKK30KKworc3RhdGljIGludCBmaWxlc190cmFuc2FjdGlvbl9wcmVwYXJlKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCQkgICAgIHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnMgPQorCQlmaWxlc19kb3duY2FzdChyZWZfc3RvcmUsIFJFRl9TVE9SRV9XUklURSwKKwkJCSAgICAgICAicmVmX3RyYW5zYWN0aW9uX3ByZXBhcmUiKTsKKwlzaXplX3QgaTsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYWZmZWN0ZWRfcmVmbmFtZXMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWNoYXIgKmhlYWRfcmVmID0gTlVMTDsKKwlpbnQgaGVhZF90eXBlOworCXN0cnVjdCBmaWxlc190cmFuc2FjdGlvbl9iYWNrZW5kX2RhdGEgKmJhY2tlbmRfZGF0YTsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICpwYWNrZWRfdHJhbnNhY3Rpb24gPSBOVUxMOworCisJYXNzZXJ0KGVycik7CisKKwlpZiAoIXRyYW5zYWN0aW9uLT5ucikKKwkJZ290byBjbGVhbnVwOworCisJYmFja2VuZF9kYXRhID0geGNhbGxvYygxLCBzaXplb2YoKmJhY2tlbmRfZGF0YSkpOworCXRyYW5zYWN0aW9uLT5iYWNrZW5kX2RhdGEgPSBiYWNrZW5kX2RhdGE7CisKKwkvKgorCSAqIEZhaWwgaWYgYSByZWZuYW1lIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gdGhlCisJICogdHJhbnNhY3Rpb24uIChJZiB3ZSBlbmQgdXAgc3BsaXR0aW5nIHVwIGFueSB1cGRhdGVzIHVzaW5nCisJICogc3BsaXRfc3ltcmVmX3VwZGF0ZSgpIG9yIHNwbGl0X2hlYWRfdXBkYXRlKCksIHRob3NlCisJICogZnVuY3Rpb25zIHdpbGwgY2hlY2sgdGhhdCB0aGUgbmV3IHVwZGF0ZXMgZG9uJ3QgaGF2ZSB0aGUKKwkgKiBzYW1lIHJlZm5hbWUgYXMgYW55IGV4aXN0aW5nIG9uZXMuKSBBbHNvIGZhaWwgaWYgYW55IG9mIHRoZQorCSAqIHVwZGF0ZXMgdXNlIFJFRl9JU19QUlVOSU5HIHdpdGhvdXQgUkVGX05PX0RFUkVGLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCB0cmFuc2FjdGlvbi0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX3VwZGF0ZSAqdXBkYXRlID0gdHJhbnNhY3Rpb24tPnVwZGF0ZXNbaV07CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0KKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmYWZmZWN0ZWRfcmVmbmFtZXMsIHVwZGF0ZS0+cmVmbmFtZSk7CisKKwkJaWYgKCh1cGRhdGUtPmZsYWdzICYgUkVGX0lTX1BSVU5JTkcpICYmCisJCSAgICAhKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfTk9fREVSRUYpKQorCQkJQlVHKCJSRUZfSVNfUFJVTklORyBzZXQgd2l0aG91dCBSRUZfTk9fREVSRUYiKTsKKworCQkvKgorCQkgKiBXZSBzdG9yZSBhIHBvaW50ZXIgdG8gdXBkYXRlIGluIGl0ZW0tPnV0aWwsIGJ1dCBhdAorCQkgKiB0aGUgbW9tZW50IHdlIG5ldmVyIHVzZSB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZAorCQkgKiBleGNlcHQgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBub24tTlVMTC4KKwkJICovCisJCWl0ZW0tPnV0aWwgPSB1cGRhdGU7CisJfQorCXN0cmluZ19saXN0X3NvcnQoJmFmZmVjdGVkX3JlZm5hbWVzKTsKKwlpZiAocmVmX3VwZGF0ZV9yZWplY3RfZHVwbGljYXRlcygmYWZmZWN0ZWRfcmVmbmFtZXMsIGVycikpIHsKKwkJcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogU3BlY2lhbCBoYWNrOiBJZiBhIGJyYW5jaCBpcyB1cGRhdGVkIGRpcmVjdGx5IGFuZCBIRUFECisJICogcG9pbnRzIHRvIGl0IChtYXkgaGFwcGVuIG9uIHRoZSByZW1vdGUgc2lkZSBvZiBhIHB1c2gKKwkgKiBmb3IgZXhhbXBsZSkgdGhlbiBsb2dpY2FsbHkgdGhlIEhFQUQgcmVmbG9nIHNob3VsZCBiZQorCSAqIHVwZGF0ZWQgdG9vLgorCSAqCisJICogQSBnZW5lcmljIHNvbHV0aW9uIHdvdWxkIHJlcXVpcmUgcmV2ZXJzZSBzeW1yZWYgbG9va3VwcywKKwkgKiBidXQgZmluZGluZyBhbGwgc3ltcmVmcyBwb2ludGluZyB0byBhIGdpdmVuIGJyYW5jaCB3b3VsZCBiZQorCSAqIHJhdGhlciBjb3N0bHkgZm9yIHRoaXMgcmFyZSBldmVudCAodGhlIGRpcmVjdCB1cGRhdGUgb2YgYQorCSAqIGJyYW5jaCkgdG8gYmUgd29ydGggaXQuIFNvIGxldCdzIGNoZWF0IGFuZCBjaGVjayB3aXRoIEhFQUQKKwkgKiBvbmx5LCB3aGljaCBzaG91bGQgY292ZXIgOTklIG9mIGFsbCB1c2FnZSBzY2VuYXJpb3MgKGV2ZW4KKwkgKiAxMDAlIG9mIHRoZSBkZWZhdWx0IG9uZXMpLgorCSAqCisJICogU28gaWYgSEVBRCBpcyBhIHN5bWJvbGljIHJlZmVyZW5jZSwgdGhlbiByZWNvcmQgdGhlIG5hbWUgb2YKKwkgKiB0aGUgcmVmZXJlbmNlIHRoYXQgaXQgcG9pbnRzIHRvLiBJZiB3ZSBzZWUgYW4gdXBkYXRlIG9mCisJICogaGVhZF9yZWYgd2l0aGluIHRoZSB0cmFuc2FjdGlvbiwgdGhlbiBzcGxpdF9oZWFkX3VwZGF0ZSgpCisJICogYXJyYW5nZXMgZm9yIHRoZSByZWZsb2cgb2YgSEVBRCB0byBiZSB1cGRhdGVkLCB0b28uCisJICovCisJaGVhZF9yZWYgPSByZWZzX3Jlc29sdmVfcmVmZHVwKHJlZl9zdG9yZSwgIkhFQUQiLAorCQkJCSAgICAgICBSRVNPTFZFX1JFRl9OT19SRUNVUlNFLAorCQkJCSAgICAgICBOVUxMLCAmaGVhZF90eXBlKTsKKworCWlmIChoZWFkX3JlZiAmJiAhKGhlYWRfdHlwZSAmIFJFRl9JU1NZTVJFRikpIHsKKwkJRlJFRV9BTkRfTlVMTChoZWFkX3JlZik7CisJfQorCisJLyoKKwkgKiBBY3F1aXJlIGFsbCBsb2NrcywgdmVyaWZ5IG9sZCB2YWx1ZXMgaWYgcHJvdmlkZWQsIGNoZWNrCisJICogdGhhdCBuZXcgdmFsdWVzIGFyZSB2YWxpZCwgYW5kIHdyaXRlIG5ldyB2YWx1ZXMgdG8gdGhlCisJICogbG9ja2ZpbGVzLCByZWFkeSB0byBiZSBhY3RpdmF0ZWQuIE9ubHkga2VlcCBvbmUgbG9ja2ZpbGUKKwkgKiBvcGVuIGF0IGEgdGltZSB0byBhdm9pZCBydW5uaW5nIG91dCBvZiBmaWxlIGRlc2NyaXB0b3JzLgorCSAqIE5vdGUgdGhhdCBsb2NrX3JlZl9mb3JfdXBkYXRlKCkgbWlnaHQgYXBwZW5kIG1vcmUgdXBkYXRlcworCSAqIHRvIHRoZSB0cmFuc2FjdGlvbi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdHJhbnNhY3Rpb24tPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHRyYW5zYWN0aW9uLT51cGRhdGVzW2ldOworCisJCXJldCA9IGxvY2tfcmVmX2Zvcl91cGRhdGUocmVmcywgdXBkYXRlLCB0cmFuc2FjdGlvbiwKKwkJCQkJICBoZWFkX3JlZiwgJmFmZmVjdGVkX3JlZm5hbWVzLCBlcnIpOworCQlpZiAocmV0KQorCQkJZ290byBjbGVhbnVwOworCisJCWlmICh1cGRhdGUtPmZsYWdzICYgUkVGX0RFTEVUSU5HICYmCisJCSAgICAhKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfTE9HX09OTFkpICYmCisJCSAgICAhKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfSVNfUFJVTklORykpIHsKKwkJCS8qCisJCQkgKiBUaGlzIHJlZmVyZW5jZSBoYXMgdG8gYmUgZGVsZXRlZCBmcm9tCisJCQkgKiBwYWNrZWQtcmVmcyBpZiBpdCBleGlzdHMgdGhlcmUuCisJCQkgKi8KKwkJCWlmICghcGFja2VkX3RyYW5zYWN0aW9uKSB7CisJCQkJcGFja2VkX3RyYW5zYWN0aW9uID0gcmVmX3N0b3JlX3RyYW5zYWN0aW9uX2JlZ2luKAorCQkJCQkJcmVmcy0+cGFja2VkX3JlZl9zdG9yZSwgZXJyKTsKKwkJCQlpZiAoIXBhY2tlZF90cmFuc2FjdGlvbikgeworCQkJCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQkJCQlnb3RvIGNsZWFudXA7CisJCQkJfQorCisJCQkJYmFja2VuZF9kYXRhLT5wYWNrZWRfdHJhbnNhY3Rpb24gPQorCQkJCQlwYWNrZWRfdHJhbnNhY3Rpb247CisJCQl9CisKKwkJCXJlZl90cmFuc2FjdGlvbl9hZGRfdXBkYXRlKAorCQkJCQlwYWNrZWRfdHJhbnNhY3Rpb24sIHVwZGF0ZS0+cmVmbmFtZSwKKwkJCQkJUkVGX0hBVkVfTkVXIHwgUkVGX05PX0RFUkVGLAorCQkJCQkmdXBkYXRlLT5uZXdfb2lkLCBOVUxMLAorCQkJCQlOVUxMKTsKKwkJfQorCX0KKworCWlmIChwYWNrZWRfdHJhbnNhY3Rpb24pIHsKKwkJaWYgKHBhY2tlZF9yZWZzX2xvY2socmVmcy0+cGFja2VkX3JlZl9zdG9yZSwgMCwgZXJyKSkgeworCQkJcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQliYWNrZW5kX2RhdGEtPnBhY2tlZF9yZWZzX2xvY2tlZCA9IDE7CisKKwkJaWYgKGlzX3BhY2tlZF90cmFuc2FjdGlvbl9uZWVkZWQocmVmcy0+cGFja2VkX3JlZl9zdG9yZSwKKwkJCQkJCSBwYWNrZWRfdHJhbnNhY3Rpb24pKSB7CisJCQlyZXQgPSByZWZfdHJhbnNhY3Rpb25fcHJlcGFyZShwYWNrZWRfdHJhbnNhY3Rpb24sIGVycik7CisJCQkvKgorCQkJICogQSBmYWlsdXJlIGR1cmluZyB0aGUgcHJlcGFyZSBzdGVwIHdpbGwgYWJvcnQKKwkJCSAqIGl0c2VsZiwgYnV0IG5vdCBmcmVlLiBEbyB0aGF0IG5vdywgYW5kIGRpc2Nvbm5lY3QKKwkJCSAqIGZyb20gdGhlIGZpbGVzX3RyYW5zYWN0aW9uIHNvIGl0IGRvZXMgbm90IHRyeSB0bworCQkJICogYWJvcnQgdXMgd2hlbiB3ZSBoaXQgdGhlIGNsZWFudXAgY29kZSBiZWxvdy4KKwkJCSAqLworCQkJaWYgKHJldCkgeworCQkJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHBhY2tlZF90cmFuc2FjdGlvbik7CisJCQkJYmFja2VuZF9kYXRhLT5wYWNrZWRfdHJhbnNhY3Rpb24gPSBOVUxMOworCQkJfQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFdlIGNhbiBza2lwIHJld3JpdGluZyB0aGUgYHBhY2tlZC1yZWZzYAorCQkJICogZmlsZS4gQnV0IHdlIGRvIG5lZWQgdG8gbGVhdmUgaXQgbG9ja2VkLCBzbworCQkJICogdGhhdCBzb21lYm9keSBlbHNlIGRvZXNuJ3QgcGFjayBhIHJlZmVyZW5jZQorCQkJICogdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIGRlbGV0ZS4KKwkJCSAqCisJCQkgKiBXZSBuZWVkIHRvIGRpc2Nvbm5lY3Qgb3VyIHRyYW5zYWN0aW9uIGZyb20KKwkJCSAqIGJhY2tlbmRfZGF0YSwgc2luY2UgdGhlIGFib3J0ICh3aGV0aGVyIHN1Y2Nlc3NmdWwgb3IKKwkJCSAqIG5vdCkgd2lsbCBmcmVlIGl0LgorCQkJICovCisJCQliYWNrZW5kX2RhdGEtPnBhY2tlZF90cmFuc2FjdGlvbiA9IE5VTEw7CisJCQlpZiAocmVmX3RyYW5zYWN0aW9uX2Fib3J0KHBhY2tlZF90cmFuc2FjdGlvbiwgZXJyKSkgeworCQkJCXJldCA9IFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCQl9CisJfQorCitjbGVhbnVwOgorCWZyZWUoaGVhZF9yZWYpOworCXN0cmluZ19saXN0X2NsZWFyKCZhZmZlY3RlZF9yZWZuYW1lcywgMCk7CisKKwlpZiAocmV0KQorCQlmaWxlc190cmFuc2FjdGlvbl9jbGVhbnVwKHJlZnMsIHRyYW5zYWN0aW9uKTsKKwllbHNlCisJCXRyYW5zYWN0aW9uLT5zdGF0ZSA9IFJFRl9UUkFOU0FDVElPTl9QUkVQQVJFRDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmlsZXNfdHJhbnNhY3Rpb25fZmluaXNoKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCQkgICAgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkJICAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzID0KKwkJZmlsZXNfZG93bmNhc3QocmVmX3N0b3JlLCAwLCAicmVmX3RyYW5zYWN0aW9uX2ZpbmlzaCIpOworCXNpemVfdCBpOworCWludCByZXQgPSAwOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgZmlsZXNfdHJhbnNhY3Rpb25fYmFja2VuZF9kYXRhICpiYWNrZW5kX2RhdGE7CisJc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqcGFja2VkX3RyYW5zYWN0aW9uOworCisKKwlhc3NlcnQoZXJyKTsKKworCWlmICghdHJhbnNhY3Rpb24tPm5yKSB7CisJCXRyYW5zYWN0aW9uLT5zdGF0ZSA9IFJFRl9UUkFOU0FDVElPTl9DTE9TRUQ7CisJCXJldHVybiAwOworCX0KKworCWJhY2tlbmRfZGF0YSA9IHRyYW5zYWN0aW9uLT5iYWNrZW5kX2RhdGE7CisJcGFja2VkX3RyYW5zYWN0aW9uID0gYmFja2VuZF9kYXRhLT5wYWNrZWRfdHJhbnNhY3Rpb247CisKKwkvKiBQZXJmb3JtIHVwZGF0ZXMgZmlyc3Qgc28gbGl2ZSBjb21taXRzIHJlbWFpbiByZWZlcmVuY2VkICovCisJZm9yIChpID0gMDsgaSA8IHRyYW5zYWN0aW9uLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSB0cmFuc2FjdGlvbi0+dXBkYXRlc1tpXTsKKwkJc3RydWN0IHJlZl9sb2NrICpsb2NrID0gdXBkYXRlLT5iYWNrZW5kX2RhdGE7CisKKwkJaWYgKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfTkVFRFNfQ09NTUlUIHx8CisJCSAgICB1cGRhdGUtPmZsYWdzICYgUkVGX0xPR19PTkxZKSB7CisJCQlpZiAoZmlsZXNfbG9nX3JlZl93cml0ZShyZWZzLAorCQkJCQkJbG9jay0+cmVmX25hbWUsCisJCQkJCQkmbG9jay0+b2xkX29pZCwKKwkJCQkJCSZ1cGRhdGUtPm5ld19vaWQsCisJCQkJCQl1cGRhdGUtPm1zZywgdXBkYXRlLT5mbGFncywKKwkJCQkJCWVycikpIHsKKwkJCQljaGFyICpvbGRfbXNnID0gc3RyYnVmX2RldGFjaChlcnIsIE5VTEwpOworCisJCQkJc3RyYnVmX2FkZGYoZXJyLCAiY2Fubm90IHVwZGF0ZSB0aGUgcmVmICclcyc6ICVzIiwKKwkJCQkJICAgIGxvY2stPnJlZl9uYW1lLCBvbGRfbXNnKTsKKwkJCQlmcmVlKG9sZF9tc2cpOworCQkJCXVubG9ja19yZWYobG9jayk7CisJCQkJdXBkYXRlLT5iYWNrZW5kX2RhdGEgPSBOVUxMOworCQkJCXJldCA9IFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCQl9CisJCWlmICh1cGRhdGUtPmZsYWdzICYgUkVGX05FRURTX0NPTU1JVCkgeworCQkJY2xlYXJfbG9vc2VfcmVmX2NhY2hlKHJlZnMpOworCQkJaWYgKGNvbW1pdF9yZWYobG9jaykpIHsKKwkJCQlzdHJidWZfYWRkZihlcnIsICJjb3VsZG4ndCBzZXQgJyVzJyIsIGxvY2stPnJlZl9uYW1lKTsKKwkJCQl1bmxvY2tfcmVmKGxvY2spOworCQkJCXVwZGF0ZS0+YmFja2VuZF9kYXRhID0gTlVMTDsKKwkJCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogTm93IHRoYXQgdXBkYXRlcyBhcmUgc2FmZWx5IGNvbXBsZXRlZCwgd2UgY2FuIHBlcmZvcm0KKwkgKiBkZWxldGVzLiBGaXJzdCBkZWxldGUgdGhlIHJlZmxvZ3Mgb2YgYW55IHJlZmVyZW5jZXMgdGhhdAorCSAqIHdpbGwgYmUgZGVsZXRlZCwgc2luY2UgKGluIHRoZSB1bmV4cGVjdGVkIGV2ZW50IG9mIGFuCisJICogZXJyb3IpIGxlYXZpbmcgYSByZWZlcmVuY2Ugd2l0aG91dCBhIHJlZmxvZyBpcyBsZXNzIGJhZAorCSAqIHRoYW4gbGVhdmluZyBhIHJlZmxvZyB3aXRob3V0IGEgcmVmZXJlbmNlICh0aGUgbGF0dGVyIGlzIGEKKwkgKiBtaWxkbHkgaW52YWxpZCByZXBvc2l0b3J5IHN0YXRlKToKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdHJhbnNhY3Rpb24tPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHRyYW5zYWN0aW9uLT51cGRhdGVzW2ldOworCQlpZiAodXBkYXRlLT5mbGFncyAmIFJFRl9ERUxFVElORyAmJgorCQkgICAgISh1cGRhdGUtPmZsYWdzICYgUkVGX0xPR19PTkxZKSAmJgorCQkgICAgISh1cGRhdGUtPmZsYWdzICYgUkVGX0lTX1BSVU5JTkcpKSB7CisJCQlzdHJidWZfcmVzZXQoJnNiKTsKKwkJCWZpbGVzX3JlZmxvZ19wYXRoKHJlZnMsICZzYiwgdXBkYXRlLT5yZWZuYW1lKTsKKwkJCWlmICghdW5saW5rX29yX3dhcm4oc2IuYnVmKSkKKwkJCQl0cnlfcmVtb3ZlX2VtcHR5X3BhcmVudHMocmVmcywgdXBkYXRlLT5yZWZuYW1lLAorCQkJCQkJCSBSRU1PVkVfRU1QVFlfUEFSRU5UU19SRUZMT0cpOworCQl9CisJfQorCisJLyoKKwkgKiBQZXJmb3JtIGRlbGV0ZXMgbm93IHRoYXQgdXBkYXRlcyBhcmUgc2FmZWx5IGNvbXBsZXRlZC4KKwkgKgorCSAqIEZpcnN0IGRlbGV0ZSBhbnkgcGFja2VkIHZlcnNpb25zIG9mIHRoZSByZWZlcmVuY2VzLCB3aGlsZQorCSAqIHJldGFpbmluZyB0aGUgcGFja2VkLXJlZnMgbG9jazoKKwkgKi8KKwlpZiAocGFja2VkX3RyYW5zYWN0aW9uKSB7CisJCXJldCA9IHJlZl90cmFuc2FjdGlvbl9jb21taXQocGFja2VkX3RyYW5zYWN0aW9uLCBlcnIpOworCQlyZWZfdHJhbnNhY3Rpb25fZnJlZShwYWNrZWRfdHJhbnNhY3Rpb24pOworCQlwYWNrZWRfdHJhbnNhY3Rpb24gPSBOVUxMOworCQliYWNrZW5kX2RhdGEtPnBhY2tlZF90cmFuc2FjdGlvbiA9IE5VTEw7CisJCWlmIChyZXQpCisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogTm93IGRlbGV0ZSB0aGUgbG9vc2UgdmVyc2lvbnMgb2YgdGhlIHJlZmVyZW5jZXM6ICovCisJZm9yIChpID0gMDsgaSA8IHRyYW5zYWN0aW9uLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSB0cmFuc2FjdGlvbi0+dXBkYXRlc1tpXTsKKwkJc3RydWN0IHJlZl9sb2NrICpsb2NrID0gdXBkYXRlLT5iYWNrZW5kX2RhdGE7CisKKwkJaWYgKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfREVMRVRJTkcgJiYKKwkJICAgICEodXBkYXRlLT5mbGFncyAmIFJFRl9MT0dfT05MWSkpIHsKKwkJCWlmICghKHVwZGF0ZS0+dHlwZSAmIFJFRl9JU1BBQ0tFRCkgfHwKKwkJCSAgICB1cGRhdGUtPnR5cGUgJiBSRUZfSVNTWU1SRUYpIHsKKwkJCQkvKiBJdCBpcyBhIGxvb3NlIHJlZmVyZW5jZS4gKi8KKwkJCQlzdHJidWZfcmVzZXQoJnNiKTsKKwkJCQlmaWxlc19yZWZfcGF0aChyZWZzLCAmc2IsIGxvY2stPnJlZl9uYW1lKTsKKwkJCQlpZiAodW5saW5rX29yX21zZyhzYi5idWYsIGVycikpIHsKKwkJCQkJcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKwkJCQkJZ290byBjbGVhbnVwOworCQkJCX0KKwkJCQl1cGRhdGUtPmZsYWdzIHw9IFJFRl9ERUxFVEVEX0xPT1NFOworCQkJfQorCQl9CisJfQorCisJY2xlYXJfbG9vc2VfcmVmX2NhY2hlKHJlZnMpOworCitjbGVhbnVwOgorCWZpbGVzX3RyYW5zYWN0aW9uX2NsZWFudXAocmVmcywgdHJhbnNhY3Rpb24pOworCisJZm9yIChpID0gMDsgaSA8IHRyYW5zYWN0aW9uLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSB0cmFuc2FjdGlvbi0+dXBkYXRlc1tpXTsKKworCQlpZiAodXBkYXRlLT5mbGFncyAmIFJFRl9ERUxFVEVEX0xPT1NFKSB7CisJCQkvKgorCQkJICogVGhlIGxvb3NlIHJlZmVyZW5jZSB3YXMgZGVsZXRlZC4gRGVsZXRlIGFueQorCQkJICogZW1wdHkgcGFyZW50IGRpcmVjdG9yaWVzLiAoTm90ZSB0aGF0IHRoaXMKKwkJCSAqIGNhbiBvbmx5IHdvcmsgYmVjYXVzZSB3ZSBoYXZlIGFscmVhZHkKKwkJCSAqIHJlbW92ZWQgdGhlIGxvY2tmaWxlLikKKwkJCSAqLworCQkJdHJ5X3JlbW92ZV9lbXB0eV9wYXJlbnRzKHJlZnMsIHVwZGF0ZS0+cmVmbmFtZSwKKwkJCQkJCSBSRU1PVkVfRU1QVFlfUEFSRU5UU19SRUYpOworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZpbGVzX3RyYW5zYWN0aW9uX2Fib3J0KHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCQkgICBzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcyA9CisJCWZpbGVzX2Rvd25jYXN0KHJlZl9zdG9yZSwgMCwgInJlZl90cmFuc2FjdGlvbl9hYm9ydCIpOworCisJZmlsZXNfdHJhbnNhY3Rpb25fY2xlYW51cChyZWZzLCB0cmFuc2FjdGlvbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVmX3ByZXNlbnQoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqYWZmZWN0ZWRfcmVmbmFtZXMgPSBjYl9kYXRhOworCisJcmV0dXJuIHN0cmluZ19saXN0X2hhc19zdHJpbmcoYWZmZWN0ZWRfcmVmbmFtZXMsIHJlZm5hbWUpOworfQorCitzdGF0aWMgaW50IGZpbGVzX2luaXRpYWxfdHJhbnNhY3Rpb25fY29tbWl0KHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCQkJICAgIHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnMgPQorCQlmaWxlc19kb3duY2FzdChyZWZfc3RvcmUsIFJFRl9TVE9SRV9XUklURSwKKwkJCSAgICAgICAiaW5pdGlhbF9yZWZfdHJhbnNhY3Rpb25fY29tbWl0Iik7CisJc2l6ZV90IGk7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHN0cmluZ19saXN0IGFmZmVjdGVkX3JlZm5hbWVzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICpwYWNrZWRfdHJhbnNhY3Rpb24gPSBOVUxMOworCisJYXNzZXJ0KGVycik7CisKKwlpZiAodHJhbnNhY3Rpb24tPnN0YXRlICE9IFJFRl9UUkFOU0FDVElPTl9PUEVOKQorCQlCVUcoImNvbW1pdCBjYWxsZWQgZm9yIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90IG9wZW4iKTsKKworCS8qIEZhaWwgaWYgYSByZWZuYW1lIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHRyYW5zYWN0aW9uOiAqLworCWZvciAoaSA9IDA7IGkgPCB0cmFuc2FjdGlvbi0+bnI7IGkrKykKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZhZmZlY3RlZF9yZWZuYW1lcywKKwkJCQkgICB0cmFuc2FjdGlvbi0+dXBkYXRlc1tpXS0+cmVmbmFtZSk7CisJc3RyaW5nX2xpc3Rfc29ydCgmYWZmZWN0ZWRfcmVmbmFtZXMpOworCWlmIChyZWZfdXBkYXRlX3JlamVjdF9kdXBsaWNhdGVzKCZhZmZlY3RlZF9yZWZuYW1lcywgZXJyKSkgeworCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBJdCdzIHJlYWxseSB1bmRlZmluZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGFuIGFjdGl2ZQorCSAqIHJlcG9zaXRvcnkgb3Igd2hlbiB0aGVyZSBhcmUgZXhpc3RpbmcgcmVmZXJlbmNlczogd2UgYXJlCisJICogb25seSBsb2NraW5nIGFuZCBjaGFuZ2luZyBwYWNrZWQtcmVmcywgc28gKDEpIGFueQorCSAqIHNpbXVsdGFuZW91cyBwcm9jZXNzZXMgbWlnaHQgdHJ5IHRvIGNoYW5nZSBhIHJlZmVyZW5jZSBhdAorCSAqIHRoZSBzYW1lIHRpbWUgd2UgZG8sIGFuZCAoMikgYW55IGV4aXN0aW5nIGxvb3NlIHZlcnNpb25zIG9mCisJICogdGhlIHJlZmVyZW5jZXMgdGhhdCB3ZSBhcmUgc2V0dGluZyB3b3VsZCBoYXZlIHByZWNlZGVuY2UKKwkgKiBvdmVyIG91ciB2YWx1ZXMuIEJ1dCBzb21lIHJlbW90ZSBoZWxwZXJzIGNyZWF0ZSB0aGUgcmVtb3RlCisJICogIkhFQUQiIGFuZCAibWFzdGVyIiBicmFuY2hlcyBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLAorCSAqIHNvIGhlcmUgd2UgcmVhbGx5IG9ubHkgY2hlY2sgdGhhdCBub25lIG9mIHRoZSByZWZlcmVuY2VzCisJICogdGhhdCB3ZSBhcmUgY3JlYXRpbmcgYWxyZWFkeSBleGlzdHMuCisJICovCisJaWYgKHJlZnNfZm9yX2VhY2hfcmF3cmVmKCZyZWZzLT5iYXNlLCByZWZfcHJlc2VudCwKKwkJCQkgJmFmZmVjdGVkX3JlZm5hbWVzKSkKKwkJQlVHKCJpbml0aWFsIHJlZiB0cmFuc2FjdGlvbiBjYWxsZWQgd2l0aCBleGlzdGluZyByZWZzIik7CisKKwlwYWNrZWRfdHJhbnNhY3Rpb24gPSByZWZfc3RvcmVfdHJhbnNhY3Rpb25fYmVnaW4ocmVmcy0+cGFja2VkX3JlZl9zdG9yZSwgZXJyKTsKKwlpZiAoIXBhY2tlZF90cmFuc2FjdGlvbikgeworCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHRyYW5zYWN0aW9uLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSB0cmFuc2FjdGlvbi0+dXBkYXRlc1tpXTsKKworCQlpZiAoKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfSEFWRV9PTEQpICYmCisJCSAgICAhaXNfbnVsbF9vaWQoJnVwZGF0ZS0+b2xkX29pZCkpCisJCQlCVUcoImluaXRpYWwgcmVmIHRyYW5zYWN0aW9uIHdpdGggb2xkX3NoYTEgc2V0Iik7CisJCWlmIChyZWZzX3ZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZSgmcmVmcy0+YmFzZSwgdXBkYXRlLT5yZWZuYW1lLAorCQkJCQkJICAmYWZmZWN0ZWRfcmVmbmFtZXMsIE5VTEwsCisJCQkJCQkgIGVycikpIHsKKwkJCXJldCA9IFRSQU5TQUNUSU9OX05BTUVfQ09ORkxJQ1Q7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKworCQkvKgorCQkgKiBBZGQgYSByZWZlcmVuY2UgY3JlYXRpb24gZm9yIHRoaXMgcmVmZXJlbmNlIHRvIHRoZQorCQkgKiBwYWNrZWQtcmVmcyB0cmFuc2FjdGlvbjoKKwkJICovCisJCXJlZl90cmFuc2FjdGlvbl9hZGRfdXBkYXRlKHBhY2tlZF90cmFuc2FjdGlvbiwgdXBkYXRlLT5yZWZuYW1lLAorCQkJCQkgICB1cGRhdGUtPmZsYWdzICYgflJFRl9IQVZFX09MRCwKKwkJCQkJICAgJnVwZGF0ZS0+bmV3X29pZCwgJnVwZGF0ZS0+b2xkX29pZCwKKwkJCQkJICAgTlVMTCk7CisJfQorCisJaWYgKHBhY2tlZF9yZWZzX2xvY2socmVmcy0+cGFja2VkX3JlZl9zdG9yZSwgMCwgZXJyKSkgeworCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKGluaXRpYWxfcmVmX3RyYW5zYWN0aW9uX2NvbW1pdChwYWNrZWRfdHJhbnNhY3Rpb24sIGVycikpIHsKKwkJcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKwl9CisKKwlwYWNrZWRfcmVmc191bmxvY2socmVmcy0+cGFja2VkX3JlZl9zdG9yZSk7CitjbGVhbnVwOgorCWlmIChwYWNrZWRfdHJhbnNhY3Rpb24pCisJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHBhY2tlZF90cmFuc2FjdGlvbik7CisJdHJhbnNhY3Rpb24tPnN0YXRlID0gUkVGX1RSQU5TQUNUSU9OX0NMT1NFRDsKKwlzdHJpbmdfbGlzdF9jbGVhcigmYWZmZWN0ZWRfcmVmbmFtZXMsIDApOworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBleHBpcmVfcmVmbG9nX2NiIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJcmVmbG9nX2V4cGlyeV9zaG91bGRfcHJ1bmVfZm4gKnNob3VsZF9wcnVuZV9mbjsKKwl2b2lkICpwb2xpY3lfY2I7CisJRklMRSAqbmV3bG9nOworCXN0cnVjdCBvYmplY3RfaWQgbGFzdF9rZXB0X29pZDsKK307CisKK3N0YXRpYyBpbnQgZXhwaXJlX3JlZmxvZ19lbnQoc3RydWN0IG9iamVjdF9pZCAqb29pZCwgc3RydWN0IG9iamVjdF9pZCAqbm9pZCwKKwkJCSAgICAgY29uc3QgY2hhciAqZW1haWwsIHRpbWVzdGFtcF90IHRpbWVzdGFtcCwgaW50IHR6LAorCQkJICAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBleHBpcmVfcmVmbG9nX2NiICpjYiA9IGNiX2RhdGE7CisJc3RydWN0IGV4cGlyZV9yZWZsb2dfcG9saWN5X2NiICpwb2xpY3lfY2IgPSBjYi0+cG9saWN5X2NiOworCisJaWYgKGNiLT5mbGFncyAmIEVYUElSRV9SRUZMT0dTX1JFV1JJVEUpCisJCW9vaWQgPSAmY2ItPmxhc3Rfa2VwdF9vaWQ7CisKKwlpZiAoKCpjYi0+c2hvdWxkX3BydW5lX2ZuKShvb2lkLCBub2lkLCBlbWFpbCwgdGltZXN0YW1wLCB0eiwKKwkJCQkgICBtZXNzYWdlLCBwb2xpY3lfY2IpKSB7CisJCWlmICghY2ItPm5ld2xvZykKKwkJCXByaW50Zigid291bGQgcHJ1bmUgJXMiLCBtZXNzYWdlKTsKKwkJZWxzZSBpZiAoY2ItPmZsYWdzICYgRVhQSVJFX1JFRkxPR1NfVkVSQk9TRSkKKwkJCXByaW50ZigicHJ1bmUgJXMiLCBtZXNzYWdlKTsKKwl9IGVsc2UgeworCQlpZiAoY2ItPm5ld2xvZykgeworCQkJZnByaW50ZihjYi0+bmV3bG9nLCAiJXMgJXMgJXMgJSJQUkl0aW1lIiAlKzA1ZFx0JXMiLAorCQkJCW9pZF90b19oZXgob29pZCksIG9pZF90b19oZXgobm9pZCksCisJCQkJZW1haWwsIHRpbWVzdGFtcCwgdHosIG1lc3NhZ2UpOworCQkJb2lkY3B5KCZjYi0+bGFzdF9rZXB0X29pZCwgbm9pZCk7CisJCX0KKwkJaWYgKGNiLT5mbGFncyAmIEVYUElSRV9SRUZMT0dTX1ZFUkJPU0UpCisJCQlwcmludGYoImtlZXAgJXMiLCBtZXNzYWdlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmlsZXNfcmVmbG9nX2V4cGlyZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkgICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywKKwkJCSAgICAgICByZWZsb2dfZXhwaXJ5X3ByZXBhcmVfZm4gcHJlcGFyZV9mbiwKKwkJCSAgICAgICByZWZsb2dfZXhwaXJ5X3Nob3VsZF9wcnVuZV9mbiBzaG91bGRfcHJ1bmVfZm4sCisJCQkgICAgICAgcmVmbG9nX2V4cGlyeV9jbGVhbnVwX2ZuIGNsZWFudXBfZm4sCisJCQkgICAgICAgdm9pZCAqcG9saWN5X2NiX2RhdGEpCit7CisJc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcyA9CisJCWZpbGVzX2Rvd25jYXN0KHJlZl9zdG9yZSwgUkVGX1NUT1JFX1dSSVRFLCAicmVmbG9nX2V4cGlyZSIpOworCXN0cnVjdCBsb2NrX2ZpbGUgcmVmbG9nX2xvY2sgPSBMT0NLX0lOSVQ7CisJc3RydWN0IGV4cGlyZV9yZWZsb2dfY2IgY2I7CisJc3RydWN0IHJlZl9sb2NrICpsb2NrOworCXN0cnVjdCBzdHJidWYgbG9nX2ZpbGVfc2IgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpsb2dfZmlsZTsKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgdHlwZTsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCisJbWVtc2V0KCZjYiwgMCwgc2l6ZW9mKGNiKSk7CisJY2IuZmxhZ3MgPSBmbGFnczsKKwljYi5wb2xpY3lfY2IgPSBwb2xpY3lfY2JfZGF0YTsKKwljYi5zaG91bGRfcHJ1bmVfZm4gPSBzaG91bGRfcHJ1bmVfZm47CisKKwkvKgorCSAqIFRoZSByZWZsb2cgZmlsZSBpcyBsb2NrZWQgYnkgaG9sZGluZyB0aGUgbG9jayBvbiB0aGUKKwkgKiByZWZlcmVuY2UgaXRzZWxmLCBwbHVzIHdlIG1pZ2h0IG5lZWQgdG8gdXBkYXRlIHRoZQorCSAqIHJlZmVyZW5jZSBpZiAtLXVwZGF0ZXJlZiB3YXMgc3BlY2lmaWVkOgorCSAqLworCWxvY2sgPSBsb2NrX3JlZl9vaWRfYmFzaWMocmVmcywgcmVmbmFtZSwgb2lkLAorCQkJCSAgTlVMTCwgTlVMTCwgUkVGX05PX0RFUkVGLAorCQkJCSAgJnR5cGUsICZlcnIpOworCWlmICghbG9jaykgeworCQllcnJvcigiY2Fubm90IGxvY2sgcmVmICclcyc6ICVzIiwgcmVmbmFtZSwgZXJyLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghcmVmc19yZWZsb2dfZXhpc3RzKHJlZl9zdG9yZSwgcmVmbmFtZSkpIHsKKwkJdW5sb2NrX3JlZihsb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZmlsZXNfcmVmbG9nX3BhdGgocmVmcywgJmxvZ19maWxlX3NiLCByZWZuYW1lKTsKKwlsb2dfZmlsZSA9IHN0cmJ1Zl9kZXRhY2goJmxvZ19maWxlX3NiLCBOVUxMKTsKKwlpZiAoIShmbGFncyAmIEVYUElSRV9SRUZMT0dTX0RSWV9SVU4pKSB7CisJCS8qCisJCSAqIEV2ZW4gdGhvdWdoIGhvbGRpbmcgJEdJVF9ESVIvbG9ncy8kcmVmbG9nLmxvY2sgaGFzCisJCSAqIG5vIGxvY2tpbmcgaW1wbGljYXRpb25zLCB3ZSB1c2UgdGhlIGxvY2tfZmlsZQorCQkgKiBtYWNoaW5lcnkgaGVyZSBhbnl3YXkgYmVjYXVzZSBpdCBkb2VzIGEgbG90IG9mIHRoZQorCQkgKiB3b3JrIHdlIG5lZWQsIGluY2x1ZGluZyBjbGVhbmluZyB1cCBpZiB0aGUgcHJvZ3JhbQorCQkgKiBleGl0cyB1bmV4cGVjdGVkbHkuCisJCSAqLworCQlpZiAoaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmcmVmbG9nX2xvY2ssIGxvZ19maWxlLCAwKSA8IDApIHsKKwkJCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJCQl1bmFibGVfdG9fbG9ja19tZXNzYWdlKGxvZ19maWxlLCBlcnJubywgJmVycik7CisJCQllcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQkJZ290byBmYWlsdXJlOworCQl9CisJCWNiLm5ld2xvZyA9IGZkb3Blbl9sb2NrX2ZpbGUoJnJlZmxvZ19sb2NrLCAidyIpOworCQlpZiAoIWNiLm5ld2xvZykgeworCQkJZXJyb3IoImNhbm5vdCBmZG9wZW4gJXMgKCVzKSIsCisJCQkgICAgICBnZXRfbG9ja19maWxlX3BhdGgoJnJlZmxvZ19sb2NrKSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWdvdG8gZmFpbHVyZTsKKwkJfQorCX0KKworCSgqcHJlcGFyZV9mbikocmVmbmFtZSwgb2lkLCBjYi5wb2xpY3lfY2IpOworCXJlZnNfZm9yX2VhY2hfcmVmbG9nX2VudChyZWZfc3RvcmUsIHJlZm5hbWUsIGV4cGlyZV9yZWZsb2dfZW50LCAmY2IpOworCSgqY2xlYW51cF9mbikoY2IucG9saWN5X2NiKTsKKworCWlmICghKGZsYWdzICYgRVhQSVJFX1JFRkxPR1NfRFJZX1JVTikpIHsKKwkJLyoKKwkJICogSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGFkanVzdCBhIHJlZmVyZW5jZSBwb2ludGVkCisJCSAqIHRvIGJ5IGEgc3ltYm9saWMgcmVmIGJhc2VkIG9uIGV4cGlyaW5nIGVudHJpZXMgaW4KKwkJICogdGhlIHN5bWJvbGljIHJlZmVyZW5jZSdzIHJlZmxvZy4gTm9yIGNhbiB3ZSB1cGRhdGUKKwkJICogYSByZWZlcmVuY2UgaWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyByZWZsb2cKKwkJICogZW50cmllcy4KKwkJICovCisJCWludCB1cGRhdGUgPSAoZmxhZ3MgJiBFWFBJUkVfUkVGTE9HU19VUERBVEVfUkVGKSAmJgorCQkJISh0eXBlICYgUkVGX0lTU1lNUkVGKSAmJgorCQkJIWlzX251bGxfb2lkKCZjYi5sYXN0X2tlcHRfb2lkKTsKKworCQlpZiAoY2xvc2VfbG9ja19maWxlX2dlbnRseSgmcmVmbG9nX2xvY2spKSB7CisJCQlzdGF0dXMgfD0gZXJyb3IoImNvdWxkbid0IHdyaXRlICVzOiAlcyIsIGxvZ19maWxlLAorCQkJCQlzdHJlcnJvcihlcnJubykpOworCQkJcm9sbGJhY2tfbG9ja19maWxlKCZyZWZsb2dfbG9jayk7CisJCX0gZWxzZSBpZiAodXBkYXRlICYmCisJCQkgICAod3JpdGVfaW5fZnVsbChnZXRfbG9ja19maWxlX2ZkKCZsb2NrLT5sayksCisJCQkJb2lkX3RvX2hleCgmY2IubGFzdF9rZXB0X29pZCksIHRoZV9oYXNoX2FsZ28tPmhleHN6KSA8IDAgfHwKKwkJCSAgICB3cml0ZV9zdHJfaW5fZnVsbChnZXRfbG9ja19maWxlX2ZkKCZsb2NrLT5sayksICJcbiIpIDwgMCB8fAorCQkJICAgIGNsb3NlX3JlZl9nZW50bHkobG9jaykgPCAwKSkgeworCQkJc3RhdHVzIHw9IGVycm9yKCJjb3VsZG4ndCB3cml0ZSAlcyIsCisJCQkJCWdldF9sb2NrX2ZpbGVfcGF0aCgmbG9jay0+bGspKTsKKwkJCXJvbGxiYWNrX2xvY2tfZmlsZSgmcmVmbG9nX2xvY2spOworCQl9IGVsc2UgaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJnJlZmxvZ19sb2NrKSkgeworCQkJc3RhdHVzIHw9IGVycm9yKCJ1bmFibGUgdG8gd3JpdGUgcmVmbG9nICclcycgKCVzKSIsCisJCQkJCWxvZ19maWxlLCBzdHJlcnJvcihlcnJubykpOworCQl9IGVsc2UgaWYgKHVwZGF0ZSAmJiBjb21taXRfcmVmKGxvY2spKSB7CisJCQlzdGF0dXMgfD0gZXJyb3IoImNvdWxkbid0IHNldCAlcyIsIGxvY2stPnJlZl9uYW1lKTsKKwkJfQorCX0KKwlmcmVlKGxvZ19maWxlKTsKKwl1bmxvY2tfcmVmKGxvY2spOworCXJldHVybiBzdGF0dXM7CisKKyBmYWlsdXJlOgorCXJvbGxiYWNrX2xvY2tfZmlsZSgmcmVmbG9nX2xvY2spOworCWZyZWUobG9nX2ZpbGUpOworCXVubG9ja19yZWYobG9jayk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGZpbGVzX2luaXRfZGIoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcyA9CisJCWZpbGVzX2Rvd25jYXN0KHJlZl9zdG9yZSwgUkVGX1NUT1JFX1dSSVRFLCAiaW5pdF9kYiIpOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCS8qCisJICogQ3JlYXRlIC5naXQvcmVmcy97aGVhZHMsdGFnc30KKwkgKi8KKwlmaWxlc19yZWZfcGF0aChyZWZzLCAmc2IsICJyZWZzL2hlYWRzIik7CisJc2FmZV9jcmVhdGVfZGlyKHNiLmJ1ZiwgMSk7CisKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwlmaWxlc19yZWZfcGF0aChyZWZzLCAmc2IsICJyZWZzL3RhZ3MiKTsKKwlzYWZlX2NyZWF0ZV9kaXIoc2IuYnVmLCAxKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByZWZfc3RvcmFnZV9iZSByZWZzX2JlX2ZpbGVzID0geworCU5VTEwsCisJImZpbGVzIiwKKwlmaWxlc19yZWZfc3RvcmVfY3JlYXRlLAorCWZpbGVzX2luaXRfZGIsCisJZmlsZXNfdHJhbnNhY3Rpb25fcHJlcGFyZSwKKwlmaWxlc190cmFuc2FjdGlvbl9maW5pc2gsCisJZmlsZXNfdHJhbnNhY3Rpb25fYWJvcnQsCisJZmlsZXNfaW5pdGlhbF90cmFuc2FjdGlvbl9jb21taXQsCisKKwlmaWxlc19wYWNrX3JlZnMsCisJZmlsZXNfY3JlYXRlX3N5bXJlZiwKKwlmaWxlc19kZWxldGVfcmVmcywKKwlmaWxlc19yZW5hbWVfcmVmLAorCWZpbGVzX2NvcHlfcmVmLAorCisJZmlsZXNfcmVmX2l0ZXJhdG9yX2JlZ2luLAorCWZpbGVzX3JlYWRfcmF3X3JlZiwKKworCWZpbGVzX3JlZmxvZ19pdGVyYXRvcl9iZWdpbiwKKwlmaWxlc19mb3JfZWFjaF9yZWZsb2dfZW50LAorCWZpbGVzX2Zvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZSwKKwlmaWxlc19yZWZsb2dfZXhpc3RzLAorCWZpbGVzX2NyZWF0ZV9yZWZsb2csCisJZmlsZXNfZGVsZXRlX3JlZmxvZywKKwlmaWxlc19yZWZsb2dfZXhwaXJlCit9OwpkaWZmIC0tZ2l0IGEvcmVmcy9pdGVyYXRvci5jIGIvcmVmcy9pdGVyYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWUwMGEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZzL2l0ZXJhdG9yLmMKQEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiBHZW5lcmljIHJlZmVyZW5jZSBpdGVyYXRvciBpbmZyYXN0cnVjdHVyZS4gU2VlIHJlZnMtaW50ZXJuYWwuaCBmb3IKKyAqIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIGRlc2lnbiBhbmQgdXNlIG9mIHJlZmVyZW5jZSBpdGVyYXRvcnMuCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlZnMvcmVmcy1pbnRlcm5hbC5oIgorI2luY2x1ZGUgIml0ZXJhdG9yLmgiCisKK2ludCByZWZfaXRlcmF0b3JfYWR2YW5jZShzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJcmV0dXJuIHJlZl9pdGVyYXRvci0+dnRhYmxlLT5hZHZhbmNlKHJlZl9pdGVyYXRvcik7Cit9CisKK2ludCByZWZfaXRlcmF0b3JfcGVlbChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IsCisJCSAgICAgIHN0cnVjdCBvYmplY3RfaWQgKnBlZWxlZCkKK3sKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yLT52dGFibGUtPnBlZWwocmVmX2l0ZXJhdG9yLCBwZWVsZWQpOworfQorCitpbnQgcmVmX2l0ZXJhdG9yX2Fib3J0KHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yLT52dGFibGUtPmFib3J0KHJlZl9pdGVyYXRvcik7Cit9CisKK3ZvaWQgYmFzZV9yZWZfaXRlcmF0b3JfaW5pdChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyLAorCQkJICAgIHN0cnVjdCByZWZfaXRlcmF0b3JfdnRhYmxlICp2dGFibGUsCisJCQkgICAgaW50IG9yZGVyZWQpCit7CisJaXRlci0+dnRhYmxlID0gdnRhYmxlOworCWl0ZXItPm9yZGVyZWQgPSAhIW9yZGVyZWQ7CisJaXRlci0+cmVmbmFtZSA9IE5VTEw7CisJaXRlci0+b2lkID0gTlVMTDsKKwlpdGVyLT5mbGFncyA9IDA7Cit9CisKK3ZvaWQgYmFzZV9yZWZfaXRlcmF0b3JfZnJlZShzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyKQoreworCS8qIEhlbHAgbWFrZSB1c2UtYWZ0ZXItZnJlZSBidWdzIGZhaWwgcXVpY2tseTogKi8KKwlpdGVyLT52dGFibGUgPSBOVUxMOworCWZyZWUoaXRlcik7Cit9CisKK3N0cnVjdCBlbXB0eV9yZWZfaXRlcmF0b3IgeworCXN0cnVjdCByZWZfaXRlcmF0b3IgYmFzZTsKK307CisKK3N0YXRpYyBpbnQgZW1wdHlfcmVmX2l0ZXJhdG9yX2FkdmFuY2Uoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKQoreworCXJldHVybiByZWZfaXRlcmF0b3JfYWJvcnQocmVmX2l0ZXJhdG9yKTsKK30KKworc3RhdGljIGludCBlbXB0eV9yZWZfaXRlcmF0b3JfcGVlbChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IsCisJCQkJICAgc3RydWN0IG9iamVjdF9pZCAqcGVlbGVkKQoreworCUJVRygicGVlbCBjYWxsZWQgZm9yIGVtcHR5IGl0ZXJhdG9yIik7Cit9CisKK3N0YXRpYyBpbnQgZW1wdHlfcmVmX2l0ZXJhdG9yX2Fib3J0KHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwliYXNlX3JlZl9pdGVyYXRvcl9mcmVlKHJlZl9pdGVyYXRvcik7CisJcmV0dXJuIElURVJfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCByZWZfaXRlcmF0b3JfdnRhYmxlIGVtcHR5X3JlZl9pdGVyYXRvcl92dGFibGUgPSB7CisJZW1wdHlfcmVmX2l0ZXJhdG9yX2FkdmFuY2UsCisJZW1wdHlfcmVmX2l0ZXJhdG9yX3BlZWwsCisJZW1wdHlfcmVmX2l0ZXJhdG9yX2Fib3J0Cit9OworCitzdHJ1Y3QgcmVmX2l0ZXJhdG9yICplbXB0eV9yZWZfaXRlcmF0b3JfYmVnaW4odm9pZCkKK3sKKwlzdHJ1Y3QgZW1wdHlfcmVmX2l0ZXJhdG9yICppdGVyID0geGNhbGxvYygxLCBzaXplb2YoKml0ZXIpKTsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IgPSAmaXRlci0+YmFzZTsKKworCWJhc2VfcmVmX2l0ZXJhdG9yX2luaXQocmVmX2l0ZXJhdG9yLCAmZW1wdHlfcmVmX2l0ZXJhdG9yX3Z0YWJsZSwgMSk7CisJcmV0dXJuIHJlZl9pdGVyYXRvcjsKK30KKworaW50IGlzX2VtcHR5X3JlZl9pdGVyYXRvcihzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJcmV0dXJuIHJlZl9pdGVyYXRvci0+dnRhYmxlID09ICZlbXB0eV9yZWZfaXRlcmF0b3JfdnRhYmxlOworfQorCitzdHJ1Y3QgbWVyZ2VfcmVmX2l0ZXJhdG9yIHsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yIGJhc2U7CisKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyMCwgKml0ZXIxOworCisJcmVmX2l0ZXJhdG9yX3NlbGVjdF9mbiAqc2VsZWN0OworCXZvaWQgKmNiX2RhdGE7CisKKwkvKgorCSAqIEEgcG9pbnRlciB0byBpdGVyMCBvciBpdGVyMSAod2hpY2hldmVyIGlzIHN1cHBseWluZyB0aGUKKwkgKiBjdXJyZW50IHZhbHVlKSwgb3IgTlVMTCBpZiBhZHZhbmNlIGhhcyBub3QgeWV0IGJlZW4gY2FsbGVkLgorCSAqLworCXN0cnVjdCByZWZfaXRlcmF0b3IgKipjdXJyZW50OworfTsKKworc3RhdGljIGludCBtZXJnZV9yZWZfaXRlcmF0b3JfYWR2YW5jZShzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJc3RydWN0IG1lcmdlX3JlZl9pdGVyYXRvciAqaXRlciA9CisJCShzdHJ1Y3QgbWVyZ2VfcmVmX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOworCWludCBvazsKKworCWlmICghaXRlci0+Y3VycmVudCkgeworCQkvKiBJbml0aWFsaXplOiBhZHZhbmNlIGJvdGggaXRlcmF0b3JzIHRvIHRoZWlyIGZpcnN0IGVudHJpZXMgKi8KKwkJaWYgKChvayA9IHJlZl9pdGVyYXRvcl9hZHZhbmNlKGl0ZXItPml0ZXIwKSkgIT0gSVRFUl9PSykgeworCQkJaXRlci0+aXRlcjAgPSBOVUxMOworCQkJaWYgKG9rID09IElURVJfRVJST1IpCisJCQkJZ290byBlcnJvcjsKKwkJfQorCQlpZiAoKG9rID0gcmVmX2l0ZXJhdG9yX2FkdmFuY2UoaXRlci0+aXRlcjEpKSAhPSBJVEVSX09LKSB7CisJCQlpdGVyLT5pdGVyMSA9IE5VTEw7CisJCQlpZiAob2sgPT0gSVRFUl9FUlJPUikKKwkJCQlnb3RvIGVycm9yOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQWR2YW5jZSB0aGUgY3VycmVudCBpdGVyYXRvciBwYXN0IHRoZSBqdXN0LXVzZWQKKwkJICogZW50cnk6CisJCSAqLworCQlpZiAoKG9rID0gcmVmX2l0ZXJhdG9yX2FkdmFuY2UoKml0ZXItPmN1cnJlbnQpKSAhPSBJVEVSX09LKSB7CisJCQkqaXRlci0+Y3VycmVudCA9IE5VTEw7CisJCQlpZiAob2sgPT0gSVRFUl9FUlJPUikKKwkJCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJLyogTG9vcCB1bnRpbCB3ZSBmaW5kIGFuIGVudHJ5IHRoYXQgd2UgY2FuIHlpZWxkLiAqLworCXdoaWxlICgxKSB7CisJCXN0cnVjdCByZWZfaXRlcmF0b3IgKipzZWNvbmRhcnk7CisJCWVudW0gaXRlcmF0b3Jfc2VsZWN0aW9uIHNlbGVjdGlvbiA9CisJCQlpdGVyLT5zZWxlY3QoaXRlci0+aXRlcjAsIGl0ZXItPml0ZXIxLCBpdGVyLT5jYl9kYXRhKTsKKworCQlpZiAoc2VsZWN0aW9uID09IElURVJfU0VMRUNUX0RPTkUpIHsKKwkJCXJldHVybiByZWZfaXRlcmF0b3JfYWJvcnQocmVmX2l0ZXJhdG9yKTsKKwkJfSBlbHNlIGlmIChzZWxlY3Rpb24gPT0gSVRFUl9TRUxFQ1RfRVJST1IpIHsKKwkJCXJlZl9pdGVyYXRvcl9hYm9ydChyZWZfaXRlcmF0b3IpOworCQkJcmV0dXJuIElURVJfRVJST1I7CisJCX0KKworCQlpZiAoKHNlbGVjdGlvbiAmIElURVJfQ1VSUkVOVF9TRUxFQ1RJT05fTUFTSykgPT0gMCkgeworCQkJaXRlci0+Y3VycmVudCA9ICZpdGVyLT5pdGVyMDsKKwkJCXNlY29uZGFyeSA9ICZpdGVyLT5pdGVyMTsKKwkJfSBlbHNlIHsKKwkJCWl0ZXItPmN1cnJlbnQgPSAmaXRlci0+aXRlcjE7CisJCQlzZWNvbmRhcnkgPSAmaXRlci0+aXRlcjA7CisJCX0KKworCQlpZiAoc2VsZWN0aW9uICYgSVRFUl9TS0lQX1NFQ09OREFSWSkgeworCQkJaWYgKChvayA9IHJlZl9pdGVyYXRvcl9hZHZhbmNlKCpzZWNvbmRhcnkpKSAhPSBJVEVSX09LKSB7CisJCQkJKnNlY29uZGFyeSA9IE5VTEw7CisJCQkJaWYgKG9rID09IElURVJfRVJST1IpCisJCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0KKworCQlpZiAoc2VsZWN0aW9uICYgSVRFUl9ZSUVMRF9DVVJSRU5UKSB7CisJCQlpdGVyLT5iYXNlLnJlZm5hbWUgPSAoKml0ZXItPmN1cnJlbnQpLT5yZWZuYW1lOworCQkJaXRlci0+YmFzZS5vaWQgPSAoKml0ZXItPmN1cnJlbnQpLT5vaWQ7CisJCQlpdGVyLT5iYXNlLmZsYWdzID0gKCppdGVyLT5jdXJyZW50KS0+ZmxhZ3M7CisJCQlyZXR1cm4gSVRFUl9PSzsKKwkJfQorCX0KKworZXJyb3I6CisJcmVmX2l0ZXJhdG9yX2Fib3J0KHJlZl9pdGVyYXRvcik7CisJcmV0dXJuIElURVJfRVJST1I7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2VfcmVmX2l0ZXJhdG9yX3BlZWwoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yLAorCQkJCSAgIHN0cnVjdCBvYmplY3RfaWQgKnBlZWxlZCkKK3sKKwlzdHJ1Y3QgbWVyZ2VfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBtZXJnZV9yZWZfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisKKwlpZiAoIWl0ZXItPmN1cnJlbnQpIHsKKwkJQlVHKCJwZWVsIGNhbGxlZCBiZWZvcmUgYWR2YW5jZSBmb3IgbWVyZ2UgaXRlcmF0b3IiKTsKKwl9CisJcmV0dXJuIHJlZl9pdGVyYXRvcl9wZWVsKCppdGVyLT5jdXJyZW50LCBwZWVsZWQpOworfQorCitzdGF0aWMgaW50IG1lcmdlX3JlZl9pdGVyYXRvcl9hYm9ydChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJc3RydWN0IG1lcmdlX3JlZl9pdGVyYXRvciAqaXRlciA9CisJCShzdHJ1Y3QgbWVyZ2VfcmVmX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOworCWludCBvayA9IElURVJfRE9ORTsKKworCWlmIChpdGVyLT5pdGVyMCkgeworCQlpZiAocmVmX2l0ZXJhdG9yX2Fib3J0KGl0ZXItPml0ZXIwKSAhPSBJVEVSX0RPTkUpCisJCQlvayA9IElURVJfRVJST1I7CisJfQorCWlmIChpdGVyLT5pdGVyMSkgeworCQlpZiAocmVmX2l0ZXJhdG9yX2Fib3J0KGl0ZXItPml0ZXIxKSAhPSBJVEVSX0RPTkUpCisJCQlvayA9IElURVJfRVJST1I7CisJfQorCWJhc2VfcmVmX2l0ZXJhdG9yX2ZyZWUocmVmX2l0ZXJhdG9yKTsKKwlyZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2l0ZXJhdG9yX3Z0YWJsZSBtZXJnZV9yZWZfaXRlcmF0b3JfdnRhYmxlID0geworCW1lcmdlX3JlZl9pdGVyYXRvcl9hZHZhbmNlLAorCW1lcmdlX3JlZl9pdGVyYXRvcl9wZWVsLAorCW1lcmdlX3JlZl9pdGVyYXRvcl9hYm9ydAorfTsKKworc3RydWN0IHJlZl9pdGVyYXRvciAqbWVyZ2VfcmVmX2l0ZXJhdG9yX2JlZ2luKAorCQlpbnQgb3JkZXJlZCwKKwkJc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcjAsIHN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIxLAorCQlyZWZfaXRlcmF0b3Jfc2VsZWN0X2ZuICpzZWxlY3QsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG1lcmdlX3JlZl9pdGVyYXRvciAqaXRlciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCppdGVyKSk7CisJc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yID0gJml0ZXItPmJhc2U7CisKKwkvKgorCSAqIFdlIGNhbid0IGRvIHRoZSBzYW1lIGtpbmQgb2YgaXNfZW1wdHlfcmVmX2l0ZXJhdG9yKCktc3R5bGUKKwkgKiBvcHRpbWl6YXRpb24gaGVyZSBhcyBvdmVybGF5X3JlZl9pdGVyYXRvcl9iZWdpbigpIGRvZXMsCisJICogYmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBzZW1hbnRpY3Mgb2YgdGhlIHNlbGVjdCBmdW5jdGlvbi4KKwkgKiBJdCBtaWdodCwgZm9yIGV4YW1wbGUsIGltcGxlbWVudCAiaW50ZXJzZWN0IiBieSBwYXNzaW5nCisJICogcmVmZXJlbmNlcyB0aHJvdWdoIG9ubHkgaWYgdGhleSBleGlzdCBpbiBib3RoIGl0ZXJhdG9ycy4KKwkgKi8KKworCWJhc2VfcmVmX2l0ZXJhdG9yX2luaXQocmVmX2l0ZXJhdG9yLCAmbWVyZ2VfcmVmX2l0ZXJhdG9yX3Z0YWJsZSwgb3JkZXJlZCk7CisJaXRlci0+aXRlcjAgPSBpdGVyMDsKKwlpdGVyLT5pdGVyMSA9IGl0ZXIxOworCWl0ZXItPnNlbGVjdCA9IHNlbGVjdDsKKwlpdGVyLT5jYl9kYXRhID0gY2JfZGF0YTsKKwlpdGVyLT5jdXJyZW50ID0gTlVMTDsKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yOworfQorCisvKgorICogQSByZWZfaXRlcmF0b3Jfc2VsZWN0X2ZuIHRoYXQgb3ZlcmxheXMgdGhlIGl0ZW1zIGZyb20gZnJvbnQgb24gdG9wCisgKiBvZiB0aG9zZSBmcm9tIGJhY2sgKGxpa2UgbG9vc2UgcmVmcyBvdmVyIHBhY2tlZCByZWZzKS4gU2VlCisgKiBvdmVybGF5X3JlZl9pdGVyYXRvcl9iZWdpbigpLgorICovCitzdGF0aWMgZW51bSBpdGVyYXRvcl9zZWxlY3Rpb24gb3ZlcmxheV9pdGVyYXRvcl9zZWxlY3QoCisJCXN0cnVjdCByZWZfaXRlcmF0b3IgKmZyb250LCBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpiYWNrLAorCQl2b2lkICpjYl9kYXRhKQoreworCWludCBjbXA7CisKKwlpZiAoIWJhY2spCisJCXJldHVybiBmcm9udCA/IElURVJfU0VMRUNUXzAgOiBJVEVSX1NFTEVDVF9ET05FOworCWVsc2UgaWYgKCFmcm9udCkKKwkJcmV0dXJuIElURVJfU0VMRUNUXzE7CisKKwljbXAgPSBzdHJjbXAoZnJvbnQtPnJlZm5hbWUsIGJhY2stPnJlZm5hbWUpOworCisJaWYgKGNtcCA8IDApCisJCXJldHVybiBJVEVSX1NFTEVDVF8wOworCWVsc2UgaWYgKGNtcCA+IDApCisJCXJldHVybiBJVEVSX1NFTEVDVF8xOworCWVsc2UKKwkJcmV0dXJuIElURVJfU0VMRUNUXzBfU0tJUF8xOworfQorCitzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpvdmVybGF5X3JlZl9pdGVyYXRvcl9iZWdpbigKKwkJc3RydWN0IHJlZl9pdGVyYXRvciAqZnJvbnQsIHN0cnVjdCByZWZfaXRlcmF0b3IgKmJhY2spCit7CisJLyoKKwkgKiBPcHRpbWl6YXRpb246IGlmIG9uZSBvZiB0aGUgaXRlcmF0b3JzIGlzIGVtcHR5LCByZXR1cm4gdGhlCisJICogb3RoZXIgb25lIHJhdGhlciB0aGFuIGluY3VycmluZyB0aGUgb3ZlcmhlYWQgb2Ygd3JhcHBpbmcKKwkgKiB0aGVtLgorCSAqLworCWlmIChpc19lbXB0eV9yZWZfaXRlcmF0b3IoZnJvbnQpKSB7CisJCXJlZl9pdGVyYXRvcl9hYm9ydChmcm9udCk7CisJCXJldHVybiBiYWNrOworCX0gZWxzZSBpZiAoaXNfZW1wdHlfcmVmX2l0ZXJhdG9yKGJhY2spKSB7CisJCXJlZl9pdGVyYXRvcl9hYm9ydChiYWNrKTsKKwkJcmV0dXJuIGZyb250OworCX0gZWxzZSBpZiAoIWZyb250LT5vcmRlcmVkIHx8ICFiYWNrLT5vcmRlcmVkKSB7CisJCUJVRygib3ZlcmxheV9yZWZfaXRlcmF0b3IgcmVxdWlyZXMgb3JkZXJlZCBpbnB1dHMiKTsKKwl9CisKKwlyZXR1cm4gbWVyZ2VfcmVmX2l0ZXJhdG9yX2JlZ2luKDEsIGZyb250LCBiYWNrLAorCQkJCQlvdmVybGF5X2l0ZXJhdG9yX3NlbGVjdCwgTlVMTCk7Cit9CisKK3N0cnVjdCBwcmVmaXhfcmVmX2l0ZXJhdG9yIHsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yIGJhc2U7CisKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyMDsKKwljaGFyICpwcmVmaXg7CisJaW50IHRyaW07Cit9OworCisvKiBSZXR1cm4gLTEsIDAsIDEgaWYgcmVmbmFtZSBpcyBiZWZvcmUsIGluc2lkZSwgb3IgYWZ0ZXIgdGhlIHByZWZpeC4gKi8KK3N0YXRpYyBpbnQgY29tcGFyZV9wcmVmaXgoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXdoaWxlICgqcHJlZml4KSB7CisJCWlmICgqcmVmbmFtZSAhPSAqcHJlZml4KQorCQkJcmV0dXJuICgodW5zaWduZWQgY2hhcikqcmVmbmFtZSA8ICh1bnNpZ25lZCBjaGFyKSpwcmVmaXgpID8gLTEgOiArMTsKKworCQlyZWZuYW1lKys7CisJCXByZWZpeCsrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByZWZpeF9yZWZfaXRlcmF0b3JfYWR2YW5jZShzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJc3RydWN0IHByZWZpeF9yZWZfaXRlcmF0b3IgKml0ZXIgPQorCQkoc3RydWN0IHByZWZpeF9yZWZfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisJaW50IG9rOworCisJd2hpbGUgKChvayA9IHJlZl9pdGVyYXRvcl9hZHZhbmNlKGl0ZXItPml0ZXIwKSkgPT0gSVRFUl9PSykgeworCQlpbnQgY21wID0gY29tcGFyZV9wcmVmaXgoaXRlci0+aXRlcjAtPnJlZm5hbWUsIGl0ZXItPnByZWZpeCk7CisKKwkJaWYgKGNtcCA8IDApCisJCQljb250aW51ZTsKKworCQlpZiAoY21wID4gMCkgeworCQkJLyoKKwkJCSAqIElmIHRoZSBzb3VyY2UgaXRlcmF0b3IgaXMgb3JkZXJlZCwgdGhlbiB3ZQorCQkJICogY2FuIHN0b3AgdGhlIGl0ZXJhdGlvbiBhcyBzb29uIGFzIHdlIHNlZSBhCisJCQkgKiByZWZuYW1lIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIHByZWZpeDoKKwkJCSAqLworCQkJaWYgKGl0ZXItPml0ZXIwLT5vcmRlcmVkKSB7CisJCQkJb2sgPSByZWZfaXRlcmF0b3JfYWJvcnQoaXRlci0+aXRlcjApOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCWlmIChpdGVyLT50cmltKSB7CisJCQkvKgorCQkJICogSXQgaXMgbm9uc2Vuc2UgdG8gdHJpbSBvZmYgY2hhcmFjdGVycyB0aGF0CisJCQkgKiB5b3UgaGF2ZW4ndCBhbHJlYWR5IGNoZWNrZWQgZm9yIHZpYSBhCisJCQkgKiBwcmVmaXggY2hlY2ssIHdoZXRoZXIgdmlhIHRoaXMKKwkJCSAqIGBwcmVmaXhfcmVmX2l0ZXJhdG9yYCBvciB1cHN0cmVhbSBpbgorCQkJICogYGl0ZXIwYCkuIFNvIGlmIHRoZXJlIHdvdWxkbid0IGJlIGF0IGxlYXN0CisJCQkgKiBvbmUgY2hhcmFjdGVyIGxlZnQgaW4gdGhlIHJlZm5hbWUgYWZ0ZXIKKwkJCSAqIHRyaW1taW5nLCByZXBvcnQgaXQgYXMgYSBidWc6CisJCQkgKi8KKwkJCWlmIChzdHJsZW4oaXRlci0+aXRlcjAtPnJlZm5hbWUpIDw9IGl0ZXItPnRyaW0pCisJCQkJQlVHKCJhdHRlbXB0IHRvIHRyaW0gdG9vIG1hbnkgY2hhcmFjdGVycyIpOworCQkJaXRlci0+YmFzZS5yZWZuYW1lID0gaXRlci0+aXRlcjAtPnJlZm5hbWUgKyBpdGVyLT50cmltOworCQl9IGVsc2UgeworCQkJaXRlci0+YmFzZS5yZWZuYW1lID0gaXRlci0+aXRlcjAtPnJlZm5hbWU7CisJCX0KKworCQlpdGVyLT5iYXNlLm9pZCA9IGl0ZXItPml0ZXIwLT5vaWQ7CisJCWl0ZXItPmJhc2UuZmxhZ3MgPSBpdGVyLT5pdGVyMC0+ZmxhZ3M7CisJCXJldHVybiBJVEVSX09LOworCX0KKworCWl0ZXItPml0ZXIwID0gTlVMTDsKKwlpZiAocmVmX2l0ZXJhdG9yX2Fib3J0KHJlZl9pdGVyYXRvcikgIT0gSVRFUl9ET05FKQorCQlyZXR1cm4gSVRFUl9FUlJPUjsKKwlyZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbnQgcHJlZml4X3JlZl9pdGVyYXRvcl9wZWVsKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvciwKKwkJCQkgICAgc3RydWN0IG9iamVjdF9pZCAqcGVlbGVkKQoreworCXN0cnVjdCBwcmVmaXhfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBwcmVmaXhfcmVmX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOworCisJcmV0dXJuIHJlZl9pdGVyYXRvcl9wZWVsKGl0ZXItPml0ZXIwLCBwZWVsZWQpOworfQorCitzdGF0aWMgaW50IHByZWZpeF9yZWZfaXRlcmF0b3JfYWJvcnQoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKQoreworCXN0cnVjdCBwcmVmaXhfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBwcmVmaXhfcmVmX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOworCWludCBvayA9IElURVJfRE9ORTsKKworCWlmIChpdGVyLT5pdGVyMCkKKwkJb2sgPSByZWZfaXRlcmF0b3JfYWJvcnQoaXRlci0+aXRlcjApOworCWZyZWUoaXRlci0+cHJlZml4KTsKKwliYXNlX3JlZl9pdGVyYXRvcl9mcmVlKHJlZl9pdGVyYXRvcik7CisJcmV0dXJuIG9rOworfQorCitzdGF0aWMgc3RydWN0IHJlZl9pdGVyYXRvcl92dGFibGUgcHJlZml4X3JlZl9pdGVyYXRvcl92dGFibGUgPSB7CisJcHJlZml4X3JlZl9pdGVyYXRvcl9hZHZhbmNlLAorCXByZWZpeF9yZWZfaXRlcmF0b3JfcGVlbCwKKwlwcmVmaXhfcmVmX2l0ZXJhdG9yX2Fib3J0Cit9OworCitzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpwcmVmaXhfcmVmX2l0ZXJhdG9yX2JlZ2luKHN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIwLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkgICAgICAgaW50IHRyaW0pCit7CisJc3RydWN0IHByZWZpeF9yZWZfaXRlcmF0b3IgKml0ZXI7CisJc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yOworCisJaWYgKCEqcHJlZml4ICYmICF0cmltKQorCQlyZXR1cm4gaXRlcjA7IC8qIG9wdGltaXphdGlvbjogbm8gbmVlZCB0byB3cmFwIGl0ZXJhdG9yICovCisKKwlpdGVyID0geGNhbGxvYygxLCBzaXplb2YoKml0ZXIpKTsKKwlyZWZfaXRlcmF0b3IgPSAmaXRlci0+YmFzZTsKKworCWJhc2VfcmVmX2l0ZXJhdG9yX2luaXQocmVmX2l0ZXJhdG9yLCAmcHJlZml4X3JlZl9pdGVyYXRvcl92dGFibGUsIGl0ZXIwLT5vcmRlcmVkKTsKKworCWl0ZXItPml0ZXIwID0gaXRlcjA7CisJaXRlci0+cHJlZml4ID0geHN0cmR1cChwcmVmaXgpOworCWl0ZXItPnRyaW0gPSB0cmltOworCisJcmV0dXJuIHJlZl9pdGVyYXRvcjsKK30KKworc3RydWN0IHJlZl9pdGVyYXRvciAqY3VycmVudF9yZWZfaXRlciA9IE5VTEw7CisKK2ludCBkb19mb3JfZWFjaF9yZXBvX3JlZl9pdGVyYXRvcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlciwKKwkJCQkgIGVhY2hfcmVwb19yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJaW50IHJldHZhbCA9IDAsIG9rOworCXN0cnVjdCByZWZfaXRlcmF0b3IgKm9sZF9yZWZfaXRlciA9IGN1cnJlbnRfcmVmX2l0ZXI7CisKKwljdXJyZW50X3JlZl9pdGVyID0gaXRlcjsKKwl3aGlsZSAoKG9rID0gcmVmX2l0ZXJhdG9yX2FkdmFuY2UoaXRlcikpID09IElURVJfT0spIHsKKwkJcmV0dmFsID0gZm4ociwgaXRlci0+cmVmbmFtZSwgaXRlci0+b2lkLCBpdGVyLT5mbGFncywgY2JfZGF0YSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCS8qCisJCQkgKiBJZiByZWZfaXRlcmF0b3JfYWJvcnQoKSByZXR1cm5zIElURVJfRVJST1IsCisJCQkgKiB3ZSBpZ25vcmUgdGhhdCBlcnJvciBpbiBkZWZlcmVuY2UgdG8gdGhlCisJCQkgKiBjYWxsYmFjayBmdW5jdGlvbidzIHJldHVybiB2YWx1ZS4KKwkJCSAqLworCQkJcmVmX2l0ZXJhdG9yX2Fib3J0KGl0ZXIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKK291dDoKKwljdXJyZW50X3JlZl9pdGVyID0gb2xkX3JlZl9pdGVyOworCWlmIChvayA9PSBJVEVSX0VSUk9SKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL3JlZnMvcGFja2VkLWJhY2tlbmQuYyBiL3JlZnMvcGFja2VkLWJhY2tlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDU4YTBmCi0tLSAvZGV2L251bGwKKysrIGIvcmVmcy9wYWNrZWQtYmFja2VuZC5jCkBAIC0wLDAgKzEsMTY2OSBAQAorI2luY2x1ZGUgIi4uL2NhY2hlLmgiCisjaW5jbHVkZSAiLi4vY29uZmlnLmgiCisjaW5jbHVkZSAiLi4vcmVmcy5oIgorI2luY2x1ZGUgInJlZnMtaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJwYWNrZWQtYmFja2VuZC5oIgorI2luY2x1ZGUgIi4uL2l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiLi4vbG9ja2ZpbGUuaCIKKyNpbmNsdWRlICIuLi9jaGRpci1ub3RpZnkuaCIKKworZW51bSBtbWFwX3N0cmF0ZWd5IHsKKwkvKgorCSAqIERvbid0IHVzZSBtbWFwKCkgYXQgYWxsIGZvciByZWFkaW5nIGBwYWNrZWQtcmVmc2AuCisJICovCisJTU1BUF9OT05FLAorCisJLyoKKwkgKiBDYW4gdXNlIG1tYXAoKSBmb3IgcmVhZGluZyBgcGFja2VkLXJlZnNgLCBidXQgdGhlIGZpbGUgbXVzdAorCSAqIG5vdCByZW1haW4gbW1hcHBlZC4gVGhpcyBpcyB0aGUgdXN1YWwgb3B0aW9uIG9uIFdpbmRvd3MsCisJICogd2hlcmUgeW91IGNhbm5vdCByZW5hbWUgYSBuZXcgdmVyc2lvbiBvZiBhIGZpbGUgb250byBhIGZpbGUKKwkgKiB0aGF0IGlzIGN1cnJlbnRseSBtbWFwcGVkLgorCSAqLworCU1NQVBfVEVNUE9SQVJZLAorCisJLyoKKwkgKiBJdCBpcyBPSyB0byBsZWF2ZSB0aGUgYHBhY2tlZC1yZWZzYCBmaWxlIG1tYXBwZWQgd2hpbGUKKwkgKiBhcmJpdHJhcnkgb3RoZXIgY29kZSBpcyBydW5uaW5nLgorCSAqLworCU1NQVBfT0sKK307CisKKyNpZiBkZWZpbmVkKE5PX01NQVApCitzdGF0aWMgZW51bSBtbWFwX3N0cmF0ZWd5IG1tYXBfc3RyYXRlZ3kgPSBNTUFQX05PTkU7CisjZWxpZiBkZWZpbmVkKE1NQVBfUFJFVkVOVFNfREVMRVRFKQorc3RhdGljIGVudW0gbW1hcF9zdHJhdGVneSBtbWFwX3N0cmF0ZWd5ID0gTU1BUF9URU1QT1JBUlk7CisjZWxzZQorc3RhdGljIGVudW0gbW1hcF9zdHJhdGVneSBtbWFwX3N0cmF0ZWd5ID0gTU1BUF9PSzsKKyNlbmRpZgorCitzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZTsKKworLyoKKyAqIEEgYHNuYXBzaG90YCByZXByZXNlbnRzIG9uZSBzbmFwc2hvdCBvZiBhIGBwYWNrZWQtcmVmc2AgZmlsZS4KKyAqCisgKiBOb3JtYWxseSwgdGhpcyB3aWxsIGJlIGEgbW1hcHBlZCB2aWV3IG9mIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqIGBwYWNrZWQtcmVmc2AgZmlsZSBhdCB0aGUgdGltZSB0aGUgc25hcHNob3Qgd2FzIGNyZWF0ZWQuIEhvd2V2ZXIsCisgKiBpZiB0aGUgYHBhY2tlZC1yZWZzYCBmaWxlIHdhcyBub3Qgc29ydGVkLCB0aGlzIG1pZ2h0IHBvaW50IGF0IGhlYXAKKyAqIG1lbW9yeSBob2xkaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgYHBhY2tlZC1yZWZzYCBmaWxlIHdpdGggaXRzCisgKiByZWNvcmRzIHNvcnRlZCBieSByZWZuYW1lLgorICoKKyAqIGBzbmFwc2hvdGAgaW5zdGFuY2VzIGFyZSByZWZlcmVuY2UgY291bnRlZCAodmlhCisgKiBgYWNxdWlyZV9zbmFwc2hvdCgpYCBhbmQgYHJlbGVhc2Vfc25hcHNob3QoKWApLiBUaGlzIGlzIHRvIHByZXZlbnQKKyAqIGFuIGluc3RhbmNlIGZyb20gZGlzYXBwZWFyaW5nIHdoaWxlIGFuIGl0ZXJhdG9yIGlzIHN0aWxsIGl0ZXJhdGluZworICogb3ZlciBpdC4gSW5zdGFuY2VzIGFyZSBnYXJiYWdlIGNvbGxlY3RlZCB3aGVuIHRoZWlyIGByZWZlcnJlcnNgCisgKiBjb3VudCBnb2VzIHRvIHplcm8uCisgKgorICogVGhlIG1vc3QgcmVjZW50IGBzbmFwc2hvdGAsIGlmIGF2YWlsYWJsZSwgaXMgcmVmZXJlbmNlZCBieSB0aGUKKyAqIGBwYWNrZWRfcmVmX3N0b3JlYC4gSXRzIGZyZXNobmVzcyBpcyBjaGVja2VkIHdoZW5ldmVyCisgKiBgZ2V0X3NuYXBzaG90KClgIGlzIGNhbGxlZDsgaWYgdGhlIGV4aXN0aW5nIHNuYXBzaG90IGlzIG9ic29sZXRlLCBhCisgKiBuZXcgc25hcHNob3QgaXMgdGFrZW4uCisgKi8KK3N0cnVjdCBzbmFwc2hvdCB7CisJLyoKKwkgKiBBIGJhY2stcG9pbnRlciB0byB0aGUgcGFja2VkX3JlZl9zdG9yZSB3aXRoIHdoaWNoIHRoaXMKKwkgKiBzbmFwc2hvdCBpcyBhc3NvY2lhdGVkOgorCSAqLworCXN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzOworCisJLyogSXMgdGhlIGBwYWNrZWQtcmVmc2AgZmlsZSBjdXJyZW50bHkgbW1hcHBlZD8gKi8KKwlpbnQgbW1hcHBlZDsKKworCS8qCisJICogVGhlIGNvbnRlbnRzIG9mIHRoZSBgcGFja2VkLXJlZnNgIGZpbGU6CisJICoKKwkgKiAtIGJ1ZiAtLSBhIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtZW1vcnkKKwkgKiAtIHN0YXJ0IC0tIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZSBvZiBhY3R1YWwgcmVmZXJlbmNlcworCSAqICAgKGkuZS4sIGFmdGVyIHRoZSBoZWFkZXIgbGluZSwgaWYgb25lIGlzIHByZXNlbnQpCisJICogLSBlb2YgLS0gYSBwb2ludGVyIGp1c3QgcGFzdCB0aGUgZW5kIG9mIHRoZSByZWZlcmVuY2UKKwkgKiAgIGNvbnRlbnRzCisJICoKKwkgKiBJZiB0aGUgYHBhY2tlZC1yZWZzYCBmaWxlIHdhcyBhbHJlYWR5IHNvcnRlZCwgYGJ1ZmAgcG9pbnRzCisJICogYXQgdGhlIG1tYXBwZWQgY29udGVudHMgb2YgdGhlIGZpbGUuIElmIG5vdCwgaXQgcG9pbnRzIGF0CisJICogaGVhcC1hbGxvY2F0ZWQgbWVtb3J5IGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzLCBzb3J0ZWQuIElmCisJICogdGhlcmUgd2VyZSBubyBjb250ZW50cyAoZS5nLiwgYmVjYXVzZSB0aGUgZmlsZSBkaWRuJ3QKKwkgKiBleGlzdCksIGBidWZgLCBgc3RhcnRgLCBhbmQgYGVvZmAgYXJlIGFsbCBOVUxMLgorCSAqLworCWNoYXIgKmJ1ZiwgKnN0YXJ0LCAqZW9mOworCisJLyoKKwkgKiBXaGF0IGlzIHRoZSBwZWVsZWQgc3RhdGUgb2YgdGhlIGBwYWNrZWQtcmVmc2AgZmlsZSB0aGF0CisJICogdGhpcyBzbmFwc2hvdCByZXByZXNlbnRzPyAoVGhpcyBpcyB1c3VhbGx5IGRldGVybWluZWQgZnJvbQorCSAqIHRoZSBmaWxlJ3MgaGVhZGVyLikKKwkgKi8KKwllbnVtIHsgUEVFTEVEX05PTkUsIFBFRUxFRF9UQUdTLCBQRUVMRURfRlVMTFkgfSBwZWVsZWQ7CisKKwkvKgorCSAqIENvdW50IG9mIHJlZmVyZW5jZXMgdG8gdGhpcyBpbnN0YW5jZSwgaW5jbHVkaW5nIHRoZSBwb2ludGVyCisJICogZnJvbSBgcGFja2VkX3JlZl9zdG9yZTo6c25hcHNob3RgLCBpZiBhbnkuIFRoZSBpbnN0YW5jZQorCSAqIHdpbGwgbm90IGJlIGZyZWVkIGFzIGxvbmcgYXMgdGhlIHJlZmVyZW5jZSBjb3VudCBpcworCSAqIG5vbnplcm8uCisJICovCisJdW5zaWduZWQgaW50IHJlZmVycmVyczsKKworCS8qCisJICogVGhlIG1ldGFkYXRhIG9mIHRoZSBgcGFja2VkLXJlZnNgIGZpbGUgZnJvbSB3aGljaCB0aGlzCisJICogc25hcHNob3Qgd2FzIGNyZWF0ZWQsIHVzZWQgdG8gdGVsbCBpZiB0aGUgZmlsZSBoYXMgYmVlbgorCSAqIHJlcGxhY2VkIHNpbmNlIHdlIHJlYWQgaXQuCisJICovCisJc3RydWN0IHN0YXRfdmFsaWRpdHkgdmFsaWRpdHk7Cit9OworCisvKgorICogQSBgcmVmX3N0b3JlYCByZXByZXNlbnRpbmcgcmVmZXJlbmNlcyBzdG9yZWQgaW4gYSBgcGFja2VkLXJlZnNgCisgKiBmaWxlLiBJdCBpbXBsZW1lbnRzIHRoZSBgcmVmX3N0b3JlYCBpbnRlcmZhY2UsIHRob3VnaCBpdCBoYXMgc29tZQorICogbGltaXRhdGlvbnM6CisgKgorICogLSBJdCBjYW5ub3Qgc3RvcmUgc3ltYm9saWMgcmVmZXJlbmNlcy4KKyAqCisgKiAtIEl0IGNhbm5vdCBzdG9yZSByZWZsb2dzLgorICoKKyAqIC0gSXQgZG9lcyBub3Qgc3VwcG9ydCByZWZlcmVuY2UgcmVuYW1pbmcgKHRob3VnaCBpdCBjb3VsZCkuCisgKgorICogT24gdGhlIG90aGVyIGhhbmQsIGl0IGNhbiBiZSBsb2NrZWQgb3V0c2lkZSBvZiBhIHJlZmVyZW5jZQorICogdHJhbnNhY3Rpb24uIEluIHRoYXQgY2FzZSwgaXQgcmVtYWlucyBsb2NrZWQgZXZlbiBhZnRlciB0aGUKKyAqIHRyYW5zYWN0aW9uIGlzIGRvbmUgYW5kIHRoZSBuZXcgYHBhY2tlZC1yZWZzYCBmaWxlIGlzIGFjdGl2YXRlZC4KKyAqLworc3RydWN0IHBhY2tlZF9yZWZfc3RvcmUgeworCXN0cnVjdCByZWZfc3RvcmUgYmFzZTsKKworCXVuc2lnbmVkIGludCBzdG9yZV9mbGFnczsKKworCS8qIFRoZSBwYXRoIG9mIHRoZSAicGFja2VkLXJlZnMiIGZpbGU6ICovCisJY2hhciAqcGF0aDsKKworCS8qCisJICogQSBzbmFwc2hvdCBvZiB0aGUgdmFsdWVzIHJlYWQgZnJvbSB0aGUgYHBhY2tlZC1yZWZzYCBmaWxlLAorCSAqIGlmIGl0IG1pZ2h0IHN0aWxsIGJlIGN1cnJlbnQ7IG90aGVyd2lzZSwgTlVMTC4KKwkgKi8KKwlzdHJ1Y3Qgc25hcHNob3QgKnNuYXBzaG90OworCisJLyoKKwkgKiBMb2NrIHVzZWQgZm9yIHRoZSAicGFja2VkLXJlZnMiIGZpbGUuIE5vdGUgdGhhdCB0aGlzIChhbmQKKwkgKiB0aHVzIHRoZSBlbmNsb3NpbmcgYHBhY2tlZF9yZWZfc3RvcmVgKSBtdXN0IG5vdCBiZSBmcmVlZC4KKwkgKi8KKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2s7CisKKwkvKgorCSAqIFRlbXBvcmFyeSBmaWxlIHVzZWQgd2hlbiByZXdyaXRpbmcgbmV3IGNvbnRlbnRzIHRvIHRoZQorCSAqICJwYWNrZWQtcmVmcyIgZmlsZS4gTm90ZSB0aGF0IHRoaXMgKGFuZCB0aHVzIHRoZSBlbmNsb3NpbmcKKwkgKiBgcGFja2VkX3JlZl9zdG9yZWApIG11c3Qgbm90IGJlIGZyZWVkLgorCSAqLworCXN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGU7Cit9OworCisvKgorICogSW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYCpzbmFwc2hvdGAuCisgKi8KK3N0YXRpYyB2b2lkIGFjcXVpcmVfc25hcHNob3Qoc3RydWN0IHNuYXBzaG90ICpzbmFwc2hvdCkKK3sKKwlzbmFwc2hvdC0+cmVmZXJyZXJzKys7Cit9CisKKy8qCisgKiBJZiB0aGUgYnVmZmVyIGluIGBzbmFwc2hvdGAgaXMgYWN0aXZlLCB0aGVuIGVpdGhlciBtdW5tYXAgdGhlCisgKiBtZW1vcnkgYW5kIGNsb3NlIHRoZSBmaWxlLCBvciBmcmVlIHRoZSBtZW1vcnkuIFRoZW4gc2V0IHRoZSBidWZmZXIKKyAqIHBvaW50ZXJzIHRvIE5VTEwuCisgKi8KK3N0YXRpYyB2b2lkIGNsZWFyX3NuYXBzaG90X2J1ZmZlcihzdHJ1Y3Qgc25hcHNob3QgKnNuYXBzaG90KQoreworCWlmIChzbmFwc2hvdC0+bW1hcHBlZCkgeworCQlpZiAobXVubWFwKHNuYXBzaG90LT5idWYsIHNuYXBzaG90LT5lb2YgLSBzbmFwc2hvdC0+YnVmKSkKKwkJCWRpZV9lcnJubygiZXJyb3IgdW1tYXBwaW5nIHBhY2tlZC1yZWZzIGZpbGUgJXMiLAorCQkJCSAgc25hcHNob3QtPnJlZnMtPnBhdGgpOworCQlzbmFwc2hvdC0+bW1hcHBlZCA9IDA7CisJfSBlbHNlIHsKKwkJZnJlZShzbmFwc2hvdC0+YnVmKTsKKwl9CisJc25hcHNob3QtPmJ1ZiA9IHNuYXBzaG90LT5zdGFydCA9IHNuYXBzaG90LT5lb2YgPSBOVUxMOworfQorCisvKgorICogRGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBgKnNuYXBzaG90YC4gSWYgaXQgZ29lcyB0byB6ZXJvLAorICogZnJlZSBgKnNuYXBzaG90YCBhbmQgcmV0dXJuIHRydWU7IG90aGVyd2lzZSByZXR1cm4gZmFsc2UuCisgKi8KK3N0YXRpYyBpbnQgcmVsZWFzZV9zbmFwc2hvdChzdHJ1Y3Qgc25hcHNob3QgKnNuYXBzaG90KQoreworCWlmICghLS1zbmFwc2hvdC0+cmVmZXJyZXJzKSB7CisJCXN0YXRfdmFsaWRpdHlfY2xlYXIoJnNuYXBzaG90LT52YWxpZGl0eSk7CisJCWNsZWFyX3NuYXBzaG90X2J1ZmZlcihzbmFwc2hvdCk7CisJCWZyZWUoc25hcHNob3QpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0cnVjdCByZWZfc3RvcmUgKnBhY2tlZF9yZWZfc3RvcmVfY3JlYXRlKGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCSAgdW5zaWduZWQgaW50IHN0b3JlX2ZsYWdzKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzID0geGNhbGxvYygxLCBzaXplb2YoKnJlZnMpKTsKKwlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUgPSAoc3RydWN0IHJlZl9zdG9yZSAqKXJlZnM7CisKKwliYXNlX3JlZl9zdG9yZV9pbml0KHJlZl9zdG9yZSwgJnJlZnNfYmVfcGFja2VkKTsKKwlyZWZzLT5zdG9yZV9mbGFncyA9IHN0b3JlX2ZsYWdzOworCisJcmVmcy0+cGF0aCA9IHhzdHJkdXAocGF0aCk7CisJY2hkaXJfbm90aWZ5X3JlcGFyZW50KCJwYWNrZWQtcmVmcyIsICZyZWZzLT5wYXRoKTsKKworCXJldHVybiByZWZfc3RvcmU7Cit9CisKKy8qCisgKiBEb3duY2FzdCBgcmVmX3N0b3JlYCB0byBgcGFja2VkX3JlZl9zdG9yZWAuIERpZSBpZiBgcmVmX3N0b3JlYCBpcworICogbm90IGEgYHBhY2tlZF9yZWZfc3RvcmVgLiBBbHNvIGRpZSBpZiBgcGFja2VkX3JlZl9zdG9yZWAgZG9lc24ndAorICogc3VwcG9ydCBhdCBsZWFzdCB0aGUgZmxhZ3Mgc3BlY2lmaWVkIGluIGByZXF1aXJlZF9mbGFnc2AuIGBjYWxsZXJgCisgKiBpcyB1c2VkIGluIGFueSBuZWNlc3NhcnkgZXJyb3IgbWVzc2FnZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSAqcGFja2VkX2Rvd25jYXN0KHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCQkJCXVuc2lnbmVkIGludCByZXF1aXJlZF9mbGFncywKKwkJCQkJCWNvbnN0IGNoYXIgKmNhbGxlcikKK3sKKwlzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSAqcmVmczsKKworCWlmIChyZWZfc3RvcmUtPmJlICE9ICZyZWZzX2JlX3BhY2tlZCkKKwkJQlVHKCJyZWZfc3RvcmUgaXMgdHlwZSBcIiVzXCIgbm90IFwicGFja2VkXCIgaW4gJXMiLAorCQkgICAgcmVmX3N0b3JlLT5iZS0+bmFtZSwgY2FsbGVyKTsKKworCXJlZnMgPSAoc3RydWN0IHBhY2tlZF9yZWZfc3RvcmUgKilyZWZfc3RvcmU7CisKKwlpZiAoKHJlZnMtPnN0b3JlX2ZsYWdzICYgcmVxdWlyZWRfZmxhZ3MpICE9IHJlcXVpcmVkX2ZsYWdzKQorCQlCVUcoInVuYWxsb3dlZCBvcGVyYXRpb24gKCVzKSwgcmVxdWlyZXMgJXgsIGhhcyAleFxuIiwKKwkJICAgIGNhbGxlciwgcmVxdWlyZWRfZmxhZ3MsIHJlZnMtPnN0b3JlX2ZsYWdzKTsKKworCXJldHVybiByZWZzOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9zbmFwc2hvdChzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSAqcmVmcykKK3sKKwlpZiAocmVmcy0+c25hcHNob3QpIHsKKwkJc3RydWN0IHNuYXBzaG90ICpzbmFwc2hvdCA9IHJlZnMtPnNuYXBzaG90OworCisJCXJlZnMtPnNuYXBzaG90ID0gTlVMTDsKKwkJcmVsZWFzZV9zbmFwc2hvdChzbmFwc2hvdCk7CisJfQorfQorCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBkaWVfdW50ZXJtaW5hdGVkX2xpbmUoY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJICAgY29uc3QgY2hhciAqcCwgc2l6ZV90IGxlbikKK3sKKwlpZiAobGVuIDwgODApCisJCWRpZSgidW50ZXJtaW5hdGVkIGxpbmUgaW4gJXM6ICUuKnMiLCBwYXRoLCAoaW50KWxlbiwgcCk7CisJZWxzZQorCQlkaWUoInVudGVybWluYXRlZCBsaW5lIGluICVzOiAlLjc1cy4uLiIsIHBhdGgsIHApOworfQorCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBkaWVfaW52YWxpZF9saW5lKGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICAgICAgY29uc3QgY2hhciAqcCwgc2l6ZV90IGxlbikKK3sKKwljb25zdCBjaGFyICplb2wgPSBtZW1jaHIocCwgJ1xuJywgbGVuKTsKKworCWlmICghZW9sKQorCQlkaWVfdW50ZXJtaW5hdGVkX2xpbmUocGF0aCwgcCwgbGVuKTsKKwllbHNlIGlmIChlb2wgLSBwIDwgODApCisJCWRpZSgidW5leHBlY3RlZCBsaW5lIGluICVzOiAlLipzIiwgcGF0aCwgKGludCkoZW9sIC0gcCksIHApOworCWVsc2UKKwkJZGllKCJ1bmV4cGVjdGVkIGxpbmUgaW4gJXM6ICUuNzVzLi4uIiwgcGF0aCwgcCk7CisKK30KKworc3RydWN0IHNuYXBzaG90X3JlY29yZCB7CisJY29uc3QgY2hhciAqc3RhcnQ7CisJc2l6ZV90IGxlbjsKK307CisKK3N0YXRpYyBpbnQgY21wX3BhY2tlZF9yZWZfcmVjb3Jkcyhjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAqdjIpCit7CisJY29uc3Qgc3RydWN0IHNuYXBzaG90X3JlY29yZCAqZTEgPSB2MSwgKmUyID0gdjI7CisJY29uc3QgY2hhciAqcjEgPSBlMS0+c3RhcnQgKyB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDE7CisJY29uc3QgY2hhciAqcjIgPSBlMi0+c3RhcnQgKyB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDE7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoKnIxID09ICdcbicpCisJCQlyZXR1cm4gKnIyID09ICdcbicgPyAwIDogLTE7CisJCWlmICgqcjEgIT0gKnIyKSB7CisJCQlpZiAoKnIyID09ICdcbicpCisJCQkJcmV0dXJuIDE7CisJCQllbHNlCisJCQkJcmV0dXJuICh1bnNpZ25lZCBjaGFyKSpyMSA8ICh1bnNpZ25lZCBjaGFyKSpyMiA/IC0xIDogKzE7CisJCX0KKwkJcjErKzsKKwkJcjIrKzsKKwl9Cit9CisKKy8qCisgKiBDb21wYXJlIGEgc25hcHNob3QgcmVjb3JkIGF0IGByZWNgIHRvIHRoZSBzcGVjaWZpZWQgTlVMLXRlcm1pbmF0ZWQKKyAqIHJlZm5hbWUuCisgKi8KK3N0YXRpYyBpbnQgY21wX3JlY29yZF90b19yZWZuYW1lKGNvbnN0IGNoYXIgKnJlYywgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwljb25zdCBjaGFyICpyMSA9IHJlYyArIHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgMTsKKwljb25zdCBjaGFyICpyMiA9IHJlZm5hbWU7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoKnIxID09ICdcbicpCisJCQlyZXR1cm4gKnIyID8gLTEgOiAwOworCQlpZiAoISpyMikKKwkJCXJldHVybiAxOworCQlpZiAoKnIxICE9ICpyMikKKwkJCXJldHVybiAodW5zaWduZWQgY2hhcikqcjEgPCAodW5zaWduZWQgY2hhcikqcjIgPyAtMSA6ICsxOworCQlyMSsrOworCQlyMisrOworCX0KK30KKworLyoKKyAqIGBzbmFwc2hvdC0+YnVmYCBpcyBub3Qga25vd24gdG8gYmUgc29ydGVkLiBDaGVjayB3aGV0aGVyIGl0IGlzLCBhbmQKKyAqIGlmIG5vdCwgc29ydCBpdCBpbnRvIG5ldyBtZW1vcnkgYW5kIG11bm1hcC9mcmVlIHRoZSBvbGQgc3RvcmFnZS4KKyAqLworc3RhdGljIHZvaWQgc29ydF9zbmFwc2hvdChzdHJ1Y3Qgc25hcHNob3QgKnNuYXBzaG90KQoreworCXN0cnVjdCBzbmFwc2hvdF9yZWNvcmQgKnJlY29yZHMgPSBOVUxMOworCXNpemVfdCBhbGxvYyA9IDAsIG5yID0gMDsKKwlpbnQgc29ydGVkID0gMTsKKwljb25zdCBjaGFyICpwb3MsICplb2YsICplb2w7CisJc2l6ZV90IGxlbiwgaTsKKwljaGFyICpuZXdfYnVmZmVyLCAqZHN0OworCisJcG9zID0gc25hcHNob3QtPnN0YXJ0OworCWVvZiA9IHNuYXBzaG90LT5lb2Y7CisKKwlpZiAocG9zID09IGVvZikKKwkJcmV0dXJuOworCisJbGVuID0gZW9mIC0gcG9zOworCisJLyoKKwkgKiBJbml0aWFsaXplIHJlY29yZHMgYmFzZWQgb24gYSBjcnVkZSBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyCisJICogb2YgcmVmZXJlbmNlcyBpbiB0aGUgZmlsZSAod2UnbGwgZ3JvdyBpdCBiZWxvdyBpZiBuZWVkZWQpOgorCSAqLworCUFMTE9DX0dST1cocmVjb3JkcywgbGVuIC8gODAgKyAyMCwgYWxsb2MpOworCisJd2hpbGUgKHBvcyA8IGVvZikgeworCQllb2wgPSBtZW1jaHIocG9zLCAnXG4nLCBlb2YgLSBwb3MpOworCQlpZiAoIWVvbCkKKwkJCS8qIFRoZSBzYWZldHkgY2hlY2sgc2hvdWxkIHByZXZlbnQgdGhpcy4gKi8KKwkJCUJVRygidW50ZXJtaW5hdGVkIGxpbmUgZm91bmQgaW4gcGFja2VkLXJlZnMiKTsKKwkJaWYgKGVvbCAtIHBvcyA8IHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgMikKKwkJCWRpZV9pbnZhbGlkX2xpbmUoc25hcHNob3QtPnJlZnMtPnBhdGgsCisJCQkJCSBwb3MsIGVvZiAtIHBvcyk7CisJCWVvbCsrOworCQlpZiAoZW9sIDwgZW9mICYmICplb2wgPT0gJ14nKSB7CisJCQkvKgorCQkJICogS2VlcCBhbnkgcGVlbGVkIGxpbmUgdG9nZXRoZXIgd2l0aCBpdHMKKwkJCSAqIHJlZmVyZW5jZToKKwkJCSAqLworCQkJY29uc3QgY2hhciAqcGVlbGVkX3N0YXJ0ID0gZW9sOworCisJCQllb2wgPSBtZW1jaHIocGVlbGVkX3N0YXJ0LCAnXG4nLCBlb2YgLSBwZWVsZWRfc3RhcnQpOworCQkJaWYgKCFlb2wpCisJCQkJLyogVGhlIHNhZmV0eSBjaGVjayBzaG91bGQgcHJldmVudCB0aGlzLiAqLworCQkJCUJVRygidW50ZXJtaW5hdGVkIHBlZWxlZCBsaW5lIGZvdW5kIGluIHBhY2tlZC1yZWZzIik7CisJCQllb2wrKzsKKwkJfQorCisJCUFMTE9DX0dST1cocmVjb3JkcywgbnIgKyAxLCBhbGxvYyk7CisJCXJlY29yZHNbbnJdLnN0YXJ0ID0gcG9zOworCQlyZWNvcmRzW25yXS5sZW4gPSBlb2wgLSBwb3M7CisJCW5yKys7CisKKwkJaWYgKHNvcnRlZCAmJgorCQkgICAgbnIgPiAxICYmCisJCSAgICBjbXBfcGFja2VkX3JlZl9yZWNvcmRzKCZyZWNvcmRzW25yIC0gMl0sCisJCQkJCSAgICZyZWNvcmRzW25yIC0gMV0pID49IDApCisJCQlzb3J0ZWQgPSAwOworCisJCXBvcyA9IGVvbDsKKwl9CisKKwlpZiAoc29ydGVkKQorCQlnb3RvIGNsZWFudXA7CisKKwkvKiBXZSBuZWVkIHRvIHNvcnQgdGhlIG1lbW9yeS4gRmlyc3Qgd2Ugc29ydCB0aGUgcmVjb3JkcyBhcnJheTogKi8KKwlRU09SVChyZWNvcmRzLCBuciwgY21wX3BhY2tlZF9yZWZfcmVjb3Jkcyk7CisKKwkvKgorCSAqIEFsbG9jYXRlIGEgbmV3IGNodW5rIG9mIG1lbW9yeSwgYW5kIGNvcHkgdGhlIG9sZCBtZW1vcnkgdG8KKwkgKiB0aGUgbmV3IGluIHRoZSBvcmRlciBpbmRpY2F0ZWQgYnkgYHJlY29yZHNgIChub3QgYm90aGVyaW5nCisJICogd2l0aCB0aGUgaGVhZGVyIGxpbmUpOgorCSAqLworCW5ld19idWZmZXIgPSB4bWFsbG9jKGxlbik7CisJZm9yIChkc3QgPSBuZXdfYnVmZmVyLCBpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJbWVtY3B5KGRzdCwgcmVjb3Jkc1tpXS5zdGFydCwgcmVjb3Jkc1tpXS5sZW4pOworCQlkc3QgKz0gcmVjb3Jkc1tpXS5sZW47CisJfQorCisJLyoKKwkgKiBOb3cgbXVubWFwIHRoZSBvbGQgYnVmZmVyIGFuZCB1c2UgdGhlIHNvcnRlZCBidWZmZXIgaW4gaXRzCisJICogcGxhY2U6CisJICovCisJY2xlYXJfc25hcHNob3RfYnVmZmVyKHNuYXBzaG90KTsKKwlzbmFwc2hvdC0+YnVmID0gc25hcHNob3QtPnN0YXJ0ID0gbmV3X2J1ZmZlcjsKKwlzbmFwc2hvdC0+ZW9mID0gbmV3X2J1ZmZlciArIGxlbjsKKworY2xlYW51cDoKKwlmcmVlKHJlY29yZHMpOworfQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIHJlY29yZCB0aGF0IGNvbnRhaW5zIHRoZQorICogY2hhcmFjdGVyIGAqcGAgKHdoaWNoIG11c3QgYmUgd2l0aGluIHRoZSBidWZmZXIpLiBJZiBubyBvdGhlcgorICogcmVjb3JkIHN0YXJ0IGlzIGZvdW5kLCByZXR1cm4gYGJ1ZmAuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpmaW5kX3N0YXJ0X29mX3JlY29yZChjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKnApCit7CisJd2hpbGUgKHAgPiBidWYgJiYgKHBbLTFdICE9ICdcbicgfHwgcFswXSA9PSAnXicpKQorCQlwLS07CisJcmV0dXJuIHA7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgcmVjb3JkIGZvbGxvd2luZyB0aGUgcmVjb3JkCisgKiB0aGF0IGNvbnRhaW5zIGAqcGAuIElmIG5vbmUgaXMgZm91bmQgYmVmb3JlIGBlbmRgLCByZXR1cm4gYGVuZGAuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpmaW5kX2VuZF9vZl9yZWNvcmQoY29uc3QgY2hhciAqcCwgY29uc3QgY2hhciAqZW5kKQoreworCXdoaWxlICgrK3AgPCBlbmQgJiYgKHBbLTFdICE9ICdcbicgfHwgcFswXSA9PSAnXicpKQorCQk7CisJcmV0dXJuIHA7Cit9CisKKy8qCisgKiBXZSB3YW50IHRvIGJlIGFibGUgdG8gY29tcGFyZSBtbWFwcGVkIHJlZmVyZW5jZSByZWNvcmRzIHF1aWNrbHksCisgKiB3aXRob3V0IHRvdGFsbHkgcGFyc2luZyB0aGVtLiBXZSBjYW4gZG8gc28gYmVjYXVzZSB0aGUgcmVjb3JkcyBhcmUKKyAqIExGLXRlcm1pbmF0ZWQsIGFuZCB0aGUgcmVmbmFtZSBzaG91bGQgc3RhcnQgZXhhY3RseSAoR0lUX1NIQTFfSEVYU1oKKyAqICsgMSkgYnl0ZXMgcGFzdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZWNvcmQuCisgKgorICogQnV0IHdoYXQgaWYgdGhlIGBwYWNrZWQtcmVmc2AgZmlsZSBjb250YWlucyBnYXJiYWdlPyBXZSdyZSB3aWxsaW5nCisgKiB0byB0b2xlcmF0ZSBub3QgZGV0ZWN0aW5nIHRoZSBwcm9ibGVtLCBhcyBsb25nIGFzIHdlIGRvbid0IHByb2R1Y2UKKyAqIHRvdGFsbHkgZ2FyYmxlZCBvdXRwdXQgKHdlIGNhbid0IGFmZm9yZCB0byBjaGVjayB0aGUgaW50ZWdyaXR5IG9mCisgKiB0aGUgd2hvbGUgZmlsZSBkdXJpbmcgZXZlcnkgR2l0IGludm9jYXRpb24pLiBCdXQgd2UgZG8gd2FudCB0byBiZQorICogc3VyZSB0aGF0IHdlIG5ldmVyIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgaW4gbWVtb3J5IGFuZAorICogcGVyZm9ybSBhbiBpbGxlZ2FsIG1lbW9yeSBhY2Nlc3MuCisgKgorICogR3VhcmFudGVlIHRoYXQgbWluaW11bSBsZXZlbCBvZiBzYWZldHkgYnkgdmVyaWZ5aW5nIHRoYXQgdGhlIGxhc3QKKyAqIHJlY29yZCBpbiB0aGUgZmlsZSBpcyBMRi10ZXJtaW5hdGVkLCBhbmQgdGhhdCBpdCBoYXMgYXQgbGVhc3QKKyAqIChHSVRfU0hBMV9IRVhTWiArIDEpIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBMRi4gRGllIGlmIGVpdGhlciBvZgorICogdGhlc2UgY2hlY2tzIGZhaWxzLgorICovCitzdGF0aWMgdm9pZCB2ZXJpZnlfYnVmZmVyX3NhZmUoc3RydWN0IHNuYXBzaG90ICpzbmFwc2hvdCkKK3sKKwljb25zdCBjaGFyICpzdGFydCA9IHNuYXBzaG90LT5zdGFydDsKKwljb25zdCBjaGFyICplb2YgPSBzbmFwc2hvdC0+ZW9mOworCWNvbnN0IGNoYXIgKmxhc3RfbGluZTsKKworCWlmIChzdGFydCA9PSBlb2YpCisJCXJldHVybjsKKworCWxhc3RfbGluZSA9IGZpbmRfc3RhcnRfb2ZfcmVjb3JkKHN0YXJ0LCBlb2YgLSAxKTsKKwlpZiAoKihlb2YgLSAxKSAhPSAnXG4nIHx8IGVvZiAtIGxhc3RfbGluZSA8IHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgMikKKwkJZGllX2ludmFsaWRfbGluZShzbmFwc2hvdC0+cmVmcy0+cGF0aCwKKwkJCQkgbGFzdF9saW5lLCBlb2YgLSBsYXN0X2xpbmUpOworfQorCisjZGVmaW5lIFNNQUxMX0ZJTEVfU0laRSAoMzIqMTAyNCkKKworLyoKKyAqIERlcGVuZGluZyBvbiBgbW1hcF9zdHJhdGVneWAsIGVpdGhlciBtbWFwIG9yIHJlYWQgdGhlIGNvbnRlbnRzIG9mCisgKiB0aGUgYHBhY2tlZC1yZWZzYCBmaWxlIGludG8gdGhlIHNuYXBzaG90LiBSZXR1cm4gMSBpZiB0aGUgZmlsZQorICogZXhpc3RlZCBhbmQgd2FzIHJlYWQsIG9yIDAgaWYgdGhlIGZpbGUgd2FzIGFic2VudCBvciBlbXB0eS4gRGllIG9uCisgKiBlcnJvcnMuCisgKi8KK3N0YXRpYyBpbnQgbG9hZF9jb250ZW50cyhzdHJ1Y3Qgc25hcHNob3QgKnNuYXBzaG90KQoreworCWludCBmZDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzaXplX3Qgc2l6ZTsKKwlzc2l6ZV90IGJ5dGVzX3JlYWQ7CisKKwlmZCA9IG9wZW4oc25hcHNob3QtPnJlZnMtPnBhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIE9LOyBpdCBqdXN0IG1lYW5zIHRoYXQgbm8KKwkJCSAqICJwYWNrZWQtcmVmcyIgZmlsZSBoYXMgYmVlbiB3cml0dGVuIHlldCwKKwkJCSAqIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gaXQgYmVpbmcgZW1wdHksCisJCQkgKiB3aGljaCBpcyBpdHMgc3RhdGUgd2hlbiBpbml0aWFsaXplZCB3aXRoCisJCQkgKiB6ZXJvcy4KKwkJCSAqLworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlkaWVfZXJybm8oImNvdWxkbid0IHJlYWQgJXMiLCBzbmFwc2hvdC0+cmVmcy0+cGF0aCk7CisJCX0KKwl9CisKKwlzdGF0X3ZhbGlkaXR5X3VwZGF0ZSgmc25hcHNob3QtPnZhbGlkaXR5LCBmZCk7CisKKwlpZiAoZnN0YXQoZmQsICZzdCkgPCAwKQorCQlkaWVfZXJybm8oImNvdWxkbid0IHN0YXQgJXMiLCBzbmFwc2hvdC0+cmVmcy0+cGF0aCk7CisJc2l6ZSA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisKKwlpZiAoIXNpemUpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKG1tYXBfc3RyYXRlZ3kgPT0gTU1BUF9OT05FIHx8IHNpemUgPD0gU01BTExfRklMRV9TSVpFKSB7CisJCXNuYXBzaG90LT5idWYgPSB4bWFsbG9jKHNpemUpOworCQlieXRlc19yZWFkID0gcmVhZF9pbl9mdWxsKGZkLCBzbmFwc2hvdC0+YnVmLCBzaXplKTsKKwkJaWYgKGJ5dGVzX3JlYWQgPCAwIHx8IGJ5dGVzX3JlYWQgIT0gc2l6ZSkKKwkJCWRpZV9lcnJubygiY291bGRuJ3QgcmVhZCAlcyIsIHNuYXBzaG90LT5yZWZzLT5wYXRoKTsKKwkJc25hcHNob3QtPm1tYXBwZWQgPSAwOworCX0gZWxzZSB7CisJCXNuYXBzaG90LT5idWYgPSB4bW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJCXNuYXBzaG90LT5tbWFwcGVkID0gMTsKKwl9CisJY2xvc2UoZmQpOworCisJc25hcHNob3QtPnN0YXJ0ID0gc25hcHNob3QtPmJ1ZjsKKwlzbmFwc2hvdC0+ZW9mID0gc25hcHNob3QtPmJ1ZiArIHNpemU7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEZpbmQgdGhlIHBsYWNlIGluIGBzbmFwc2hvdC0+YnVmYCB3aGVyZSB0aGUgc3RhcnQgb2YgdGhlIHJlY29yZCBmb3IKKyAqIGByZWZuYW1lYCBzdGFydHMuIElmIGBtdXN0ZXhpc3RgIGlzIHRydWUgYW5kIHRoZSByZWZlcmVuY2UgZG9lc24ndAorICogZXhpc3QsIHRoZW4gcmV0dXJuIE5VTEwuIElmIGBtdXN0ZXhpc3RgIGlzIGZhbHNlIGFuZCB0aGUgcmVmZXJlbmNlCisgKiBkb2Vzbid0IGV4aXN0LCB0aGVuIHJldHVybiB0aGUgcG9pbnQgd2hlcmUgdGhhdCByZWZlcmVuY2Ugd291bGQgYmUKKyAqIGluc2VydGVkLCBvciBgc25hcHNob3QtPmVvZmAgKHdoaWNoIG1pZ2h0IGJlIE5VTEwpIGlmIGl0IHdvdWxkIGJlCisgKiBpbnNlcnRlZCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBJbiB0aGUgbGF0dGVyIG1vZGUsIGByZWZuYW1lYAorICogZG9lc24ndCBoYXZlIHRvIGJlIGEgcHJvcGVyIHJlZmVyZW5jZSBuYW1lOyBmb3IgZXhhbXBsZSwgb25lIGNvdWxkCisgKiBzZWFyY2ggZm9yICJyZWZzL3JlcGxhY2UvIiB0byBmaW5kIHRoZSBzdGFydCBvZiBhbnkgcmVwbGFjZQorICogcmVmZXJlbmNlcy4KKyAqCisgKiBUaGUgcmVjb3JkIGlzIHNvdWdodCB1c2luZyBhIGJpbmFyeSBzZWFyY2gsIHNvIGBzbmFwc2hvdC0+YnVmYCBtdXN0CisgKiBiZSBzb3J0ZWQuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpmaW5kX3JlZmVyZW5jZV9sb2NhdGlvbihzdHJ1Y3Qgc25hcHNob3QgKnNuYXBzaG90LAorCQkJCQkgICBjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgbXVzdGV4aXN0KQoreworCS8qCisJICogVGhpcyBpcyBub3QgKnF1aXRlKiBhIGdhcmRlbi12YXJpZXR5IGJpbmFyeSBzZWFyY2gsIGJlY2F1c2UKKwkgKiB0aGUgZGF0YSB3ZSdyZSBzZWFyY2hpbmcgaXMgbWFkZSB1cCBvZiByZWNvcmRzLCBhbmQgd2UKKwkgKiBhbHdheXMgbmVlZCB0byBmaW5kIHRoZSBiZWdpbm5pbmcgb2YgYSByZWNvcmQgdG8gZG8gYQorCSAqIGNvbXBhcmlzb24uIEEgInJlY29yZCIgaGVyZSBpcyBvbmUgbGluZSBmb3IgdGhlIHJlZmVyZW5jZQorCSAqIGl0c2VsZiBhbmQgemVybyBvciBvbmUgcGVlbCBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggJ14nLiBPdXIKKwkgKiBsb29wIGludmFyaWFudCBpcyBkZXNjcmliZWQgaW4gdGhlIG5leHQgdHdvIGNvbW1lbnRzLgorCSAqLworCisJLyoKKwkgKiBBIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBhdCB0aGUgc3RhcnQgb2YgYSByZWNvcmQgd2hvc2UKKwkgKiBwcmVjZWRpbmcgcmVjb3JkcyBhbGwgaGF2ZSByZWZlcmVuY2UgbmFtZXMgdGhhdCBjb21lCisJICogKmJlZm9yZSogYHJlZm5hbWVgLgorCSAqLworCWNvbnN0IGNoYXIgKmxvID0gc25hcHNob3QtPnN0YXJ0OworCisJLyoKKwkgKiBBIHBvaW50ZXIgdG8gYSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgcmVjb3JkIHdob3NlCisJICogcmVmZXJlbmNlIG5hbWUgY29tZXMgKmFmdGVyKiBgcmVmbmFtZWAuCisJICovCisJY29uc3QgY2hhciAqaGkgPSBzbmFwc2hvdC0+ZW9mOworCisJd2hpbGUgKGxvICE9IGhpKSB7CisJCWNvbnN0IGNoYXIgKm1pZCwgKnJlYzsKKwkJaW50IGNtcDsKKworCQltaWQgPSBsbyArIChoaSAtIGxvKSAvIDI7CisJCXJlYyA9IGZpbmRfc3RhcnRfb2ZfcmVjb3JkKGxvLCBtaWQpOworCQljbXAgPSBjbXBfcmVjb3JkX3RvX3JlZm5hbWUocmVjLCByZWZuYW1lKTsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCWxvID0gZmluZF9lbmRfb2ZfcmVjb3JkKG1pZCwgaGkpOworCQl9IGVsc2UgaWYgKGNtcCA+IDApIHsKKwkJCWhpID0gcmVjOworCQl9IGVsc2UgeworCQkJcmV0dXJuIHJlYzsKKwkJfQorCX0KKworCWlmIChtdXN0ZXhpc3QpCisJCXJldHVybiBOVUxMOworCWVsc2UKKwkJcmV0dXJuIGxvOworfQorCisvKgorICogQ3JlYXRlIGEgbmV3bHktYWxsb2NhdGVkIGBzbmFwc2hvdGAgb2YgdGhlIGBwYWNrZWQtcmVmc2AgZmlsZSBpbgorICogaXRzIGN1cnJlbnQgc3RhdGUgYW5kIHJldHVybiBpdC4gVGhlIHJldHVybiB2YWx1ZSB3aWxsIGFscmVhZHkgaGF2ZQorICogaXRzIHJlZmVyZW5jZSBjb3VudCBpbmNyZW1lbnRlZC4KKyAqCisgKiBBIGNvbW1lbnQgbGluZSBvZiB0aGUgZm9ybSAiIyBwYWNrLXJlZnMgd2l0aDogIiBtYXkgY29udGFpbiB6ZXJvIG9yCisgKiBtb3JlIHRyYWl0cy4gV2UgaW50ZXJwcmV0IHRoZSB0cmFpdHMgYXMgZm9sbG93czoKKyAqCisgKiAgIE5laXRoZXIgYHBlZWxlZGAgbm9yIGBmdWxseS1wZWVsZWRgOgorICoKKyAqICAgICAgUHJvYmFibHkgbm8gcmVmZXJlbmNlcyBhcmUgcGVlbGVkLiBCdXQgaWYgdGhlIGZpbGUgY29udGFpbnMgYQorICogICAgICBwZWVsZWQgdmFsdWUgZm9yIGEgcmVmZXJlbmNlLCB3ZSB3aWxsIHVzZSBpdC4KKyAqCisgKiAgIGBwZWVsZWRgOgorICoKKyAqICAgICAgUmVmZXJlbmNlcyB1bmRlciAicmVmcy90YWdzLyIsIGlmIHRoZXkgKmNhbiogYmUgcGVlbGVkLCAqYXJlKgorICogICAgICBwZWVsZWQgaW4gdGhpcyBmaWxlLiBSZWZlcmVuY2VzIG91dHNpZGUgb2YgInJlZnMvdGFncy8iIGFyZQorICogICAgICBwcm9iYWJseSBub3QgcGVlbGVkIGV2ZW4gaWYgdGhleSBjb3VsZCBoYXZlIGJlZW4sIGJ1dCBpZiB3ZSBmaW5kCisgKiAgICAgIGEgcGVlbGVkIHZhbHVlIGZvciBzdWNoIGEgcmVmZXJlbmNlIHdlIHdpbGwgdXNlIGl0LgorICoKKyAqICAgYGZ1bGx5LXBlZWxlZGA6CisgKgorICogICAgICBBbGwgcmVmZXJlbmNlcyBpbiB0aGUgZmlsZSB0aGF0IGNhbiBiZSBwZWVsZWQgYXJlIHBlZWxlZC4KKyAqICAgICAgSW52ZXJzZWx5IChhbmQgdGhpcyBpcyBtb3JlIGltcG9ydGFudCksIGFueSByZWZlcmVuY2VzIGluIHRoZQorICogICAgICBmaWxlIGZvciB3aGljaCBubyBwZWVsZWQgdmFsdWUgaXMgcmVjb3JkZWQgaXMgbm90IHBlZWxhYmxlLiBUaGlzCisgKiAgICAgIHRyYWl0IHNob3VsZCB0eXBpY2FsbHkgYmUgd3JpdHRlbiBhbG9uZ3NpZGUgInBlZWxlZCIgZm9yCisgKiAgICAgIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBjbGllbnRzLCBidXQgd2UgZG8gbm90IHJlcXVpcmUgaXQKKyAqICAgICAgKGkuZS4sICJwZWVsZWQiIGlzIGEgbm8tb3AgaWYgImZ1bGx5LXBlZWxlZCIgaXMgc2V0KS4KKyAqCisgKiAgIGBzb3J0ZWRgOgorICoKKyAqICAgICAgVGhlIHJlZmVyZW5jZXMgaW4gdGhpcyBmaWxlIGFyZSBrbm93biB0byBiZSBzb3J0ZWQgYnkgcmVmbmFtZS4KKyAqLworc3RhdGljIHN0cnVjdCBzbmFwc2hvdCAqY3JlYXRlX3NuYXBzaG90KHN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzKQoreworCXN0cnVjdCBzbmFwc2hvdCAqc25hcHNob3QgPSB4Y2FsbG9jKDEsIHNpemVvZigqc25hcHNob3QpKTsKKwlpbnQgc29ydGVkID0gMDsKKworCXNuYXBzaG90LT5yZWZzID0gcmVmczsKKwlhY3F1aXJlX3NuYXBzaG90KHNuYXBzaG90KTsKKwlzbmFwc2hvdC0+cGVlbGVkID0gUEVFTEVEX05PTkU7CisKKwlpZiAoIWxvYWRfY29udGVudHMoc25hcHNob3QpKQorCQlyZXR1cm4gc25hcHNob3Q7CisKKwkvKiBJZiB0aGUgZmlsZSBoYXMgYSBoZWFkZXIgbGluZSwgcHJvY2VzcyBpdDogKi8KKwlpZiAoc25hcHNob3QtPmJ1ZiA8IHNuYXBzaG90LT5lb2YgJiYgKnNuYXBzaG90LT5idWYgPT0gJyMnKSB7CisJCWNoYXIgKnRtcCwgKnAsICplb2w7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCB0cmFpdHMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJCWVvbCA9IG1lbWNocihzbmFwc2hvdC0+YnVmLCAnXG4nLAorCQkJICAgICBzbmFwc2hvdC0+ZW9mIC0gc25hcHNob3QtPmJ1Zik7CisJCWlmICghZW9sKQorCQkJZGllX3VudGVybWluYXRlZF9saW5lKHJlZnMtPnBhdGgsCisJCQkJCSAgICAgIHNuYXBzaG90LT5idWYsCisJCQkJCSAgICAgIHNuYXBzaG90LT5lb2YgLSBzbmFwc2hvdC0+YnVmKTsKKworCQl0bXAgPSB4bWVtZHVweihzbmFwc2hvdC0+YnVmLCBlb2wgLSBzbmFwc2hvdC0+YnVmKTsKKworCQlpZiAoIXNraXBfcHJlZml4KHRtcCwgIiMgcGFjay1yZWZzIHdpdGg6IiwgKGNvbnN0IGNoYXIgKiopJnApKQorCQkJZGllX2ludmFsaWRfbGluZShyZWZzLT5wYXRoLAorCQkJCQkgc25hcHNob3QtPmJ1ZiwKKwkJCQkJIHNuYXBzaG90LT5lb2YgLSBzbmFwc2hvdC0+YnVmKTsKKworCQlzdHJpbmdfbGlzdF9zcGxpdF9pbl9wbGFjZSgmdHJhaXRzLCBwLCAnICcsIC0xKTsKKworCQlpZiAodW5zb3J0ZWRfc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmdHJhaXRzLCAiZnVsbHktcGVlbGVkIikpCisJCQlzbmFwc2hvdC0+cGVlbGVkID0gUEVFTEVEX0ZVTExZOworCQllbHNlIGlmICh1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZ0cmFpdHMsICJwZWVsZWQiKSkKKwkJCXNuYXBzaG90LT5wZWVsZWQgPSBQRUVMRURfVEFHUzsKKworCQlzb3J0ZWQgPSB1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZ0cmFpdHMsICJzb3J0ZWQiKTsKKworCQkvKiBwZXJoYXBzIG90aGVyIHRyYWl0cyBsYXRlciBhcyB3ZWxsICovCisKKwkJLyogVGhlICIrIDEiIGlzIGZvciB0aGUgTEYgY2hhcmFjdGVyLiAqLworCQlzbmFwc2hvdC0+c3RhcnQgPSBlb2wgKyAxOworCisJCXN0cmluZ19saXN0X2NsZWFyKCZ0cmFpdHMsIDApOworCQlmcmVlKHRtcCk7CisJfQorCisJdmVyaWZ5X2J1ZmZlcl9zYWZlKHNuYXBzaG90KTsKKworCWlmICghc29ydGVkKSB7CisJCXNvcnRfc25hcHNob3Qoc25hcHNob3QpOworCisJCS8qCisJCSAqIFJlb3JkZXJpbmcgdGhlIHJlY29yZHMgbWlnaHQgaGF2ZSBtb3ZlZCBhIHNob3J0IG9uZQorCQkgKiB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHNvIHZlcmlmeSB0aGUgYnVmZmVyJ3MKKwkJICogc2FmZXR5IGFnYWluOgorCQkgKi8KKwkJdmVyaWZ5X2J1ZmZlcl9zYWZlKHNuYXBzaG90KTsKKwl9CisKKwlpZiAobW1hcF9zdHJhdGVneSAhPSBNTUFQX09LICYmIHNuYXBzaG90LT5tbWFwcGVkKSB7CisJCS8qCisJCSAqIFdlIGRvbid0IHdhbnQgdG8gbGVhdmUgdGhlIGZpbGUgbW1hcHBlZCwgc28gd2UgYXJlCisJCSAqIGZvcmNlZCB0byBtYWtlIGEgY29weSBub3c6CisJCSAqLworCQlzaXplX3Qgc2l6ZSA9IHNuYXBzaG90LT5lb2YgLSBzbmFwc2hvdC0+c3RhcnQ7CisJCWNoYXIgKmJ1Zl9jb3B5ID0geG1hbGxvYyhzaXplKTsKKworCQltZW1jcHkoYnVmX2NvcHksIHNuYXBzaG90LT5zdGFydCwgc2l6ZSk7CisJCWNsZWFyX3NuYXBzaG90X2J1ZmZlcihzbmFwc2hvdCk7CisJCXNuYXBzaG90LT5idWYgPSBzbmFwc2hvdC0+c3RhcnQgPSBidWZfY29weTsKKwkJc25hcHNob3QtPmVvZiA9IGJ1Zl9jb3B5ICsgc2l6ZTsKKwl9CisKKwlyZXR1cm4gc25hcHNob3Q7Cit9CisKKy8qCisgKiBDaGVjayB0aGF0IGByZWZzLT5zbmFwc2hvdGAgKGlmIHByZXNlbnQpIHN0aWxsIHJlZmxlY3RzIHRoZQorICogY29udGVudHMgb2YgdGhlIGBwYWNrZWQtcmVmc2AgZmlsZS4gSWYgbm90LCBjbGVhciB0aGUgc25hcHNob3QuCisgKi8KK3N0YXRpYyB2b2lkIHZhbGlkYXRlX3NuYXBzaG90KHN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzKQoreworCWlmIChyZWZzLT5zbmFwc2hvdCAmJgorCSAgICAhc3RhdF92YWxpZGl0eV9jaGVjaygmcmVmcy0+c25hcHNob3QtPnZhbGlkaXR5LCByZWZzLT5wYXRoKSkKKwkJY2xlYXJfc25hcHNob3QocmVmcyk7Cit9CisKKy8qCisgKiBHZXQgdGhlIGBzbmFwc2hvdGAgZm9yIHRoZSBzcGVjaWZpZWQgcGFja2VkX3JlZl9zdG9yZSwgY3JlYXRpbmcgYW5kCisgKiBwb3B1bGF0aW5nIGl0IGlmIGl0IGhhc24ndCBiZWVuIHJlYWQgYmVmb3JlIG9yIGlmIHRoZSBmaWxlIGhhcyBiZWVuCisgKiBjaGFuZ2VkIChhY2NvcmRpbmcgdG8gaXRzIGB2YWxpZGl0eWAgZmllbGQpIHNpbmNlIGl0IHdhcyBsYXN0IHJlYWQuCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgd2UgaG9sZCB0aGUgbG9jaywgdGhlbiBhc3N1bWUgdGhhdCB0aGUgZmlsZQorICogaGFzbid0IGJlZW4gY2hhbmdlZCBvdXQgZnJvbSB1bmRlciB1cywgc28gc2tpcCB0aGUgZXh0cmEgYHN0YXQoKWAKKyAqIGNhbGwgaW4gYHN0YXRfdmFsaWRpdHlfY2hlY2soKWAuIFRoaXMgZnVuY3Rpb24gZG9lcyAqbm90KiBpbmNyZWFzZQorICogdGhlIHNuYXBzaG90J3MgcmVmZXJlbmNlIGNvdW50IG9uIGJlaGFsZiBvZiB0aGUgY2FsbGVyLgorICovCitzdGF0aWMgc3RydWN0IHNuYXBzaG90ICpnZXRfc25hcHNob3Qoc3RydWN0IHBhY2tlZF9yZWZfc3RvcmUgKnJlZnMpCit7CisJaWYgKCFpc19sb2NrX2ZpbGVfbG9ja2VkKCZyZWZzLT5sb2NrKSkKKwkJdmFsaWRhdGVfc25hcHNob3QocmVmcyk7CisKKwlpZiAoIXJlZnMtPnNuYXBzaG90KQorCQlyZWZzLT5zbmFwc2hvdCA9IGNyZWF0ZV9zbmFwc2hvdChyZWZzKTsKKworCXJldHVybiByZWZzLT5zbmFwc2hvdDsKK30KKworc3RhdGljIGludCBwYWNrZWRfcmVhZF9yYXdfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpyZWZuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqcmVmZXJlbnQsIHVuc2lnbmVkIGludCAqdHlwZSkKK3sKKwlzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSAqcmVmcyA9CisJCXBhY2tlZF9kb3duY2FzdChyZWZfc3RvcmUsIFJFRl9TVE9SRV9SRUFELCAicmVhZF9yYXdfcmVmIik7CisJc3RydWN0IHNuYXBzaG90ICpzbmFwc2hvdCA9IGdldF9zbmFwc2hvdChyZWZzKTsKKwljb25zdCBjaGFyICpyZWM7CisKKwkqdHlwZSA9IDA7CisKKwlyZWMgPSBmaW5kX3JlZmVyZW5jZV9sb2NhdGlvbihzbmFwc2hvdCwgcmVmbmFtZSwgMSk7CisKKwlpZiAoIXJlYykgeworCQkvKiByZWZuYW1lIGlzIG5vdCBhIHBhY2tlZCByZWZlcmVuY2UuICovCisJCWVycm5vID0gRU5PRU5UOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGdldF9vaWRfaGV4KHJlYywgb2lkKSkKKwkJZGllX2ludmFsaWRfbGluZShyZWZzLT5wYXRoLCByZWMsIHNuYXBzaG90LT5lb2YgLSByZWMpOworCisJKnR5cGUgPSBSRUZfSVNQQUNLRUQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIHZhbHVlIGlzIHNldCBpbiBgYmFzZS5mbGFnc2AgaWYgdGhlIHBlZWxlZCB2YWx1ZSBvZiB0aGUKKyAqIGN1cnJlbnQgcmVmZXJlbmNlIGlzIGtub3duLiBJbiB0aGF0IGNhc2UsIGBwZWVsZWRgIGNvbnRhaW5zIHRoZQorICogY29ycmVjdCBwZWVsZWQgdmFsdWUgZm9yIHRoZSByZWZlcmVuY2UsIHdoaWNoIG1pZ2h0IGJlIGBudWxsX29pZGAKKyAqIGlmIHRoZSByZWZlcmVuY2UgaXMgbm90IGEgdGFnIG9yIGlmIGl0IGlzIGJyb2tlbi4KKyAqLworI2RlZmluZSBSRUZfS05PV1NfUEVFTEVEIDB4NDAKKworLyoKKyAqIEFuIGl0ZXJhdG9yIG92ZXIgYSBzbmFwc2hvdCBvZiBhIGBwYWNrZWQtcmVmc2AgZmlsZS4KKyAqLworc3RydWN0IHBhY2tlZF9yZWZfaXRlcmF0b3IgeworCXN0cnVjdCByZWZfaXRlcmF0b3IgYmFzZTsKKworCXN0cnVjdCBzbmFwc2hvdCAqc25hcHNob3Q7CisKKwkvKiBUaGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc25hcHNob3QncyBidWZmZXI6ICovCisJY29uc3QgY2hhciAqcG9zOworCisJLyogVGhlIGVuZCBvZiB0aGUgcGFydCBvZiB0aGUgYnVmZmVyIHRoYXQgd2lsbCBiZSBpdGVyYXRlZCBvdmVyOiAqLworCWNvbnN0IGNoYXIgKmVvZjsKKworCS8qIFNjcmF0Y2ggc3BhY2UgZm9yIGN1cnJlbnQgdmFsdWVzOiAqLworCXN0cnVjdCBvYmplY3RfaWQgb2lkLCBwZWVsZWQ7CisJc3RydWN0IHN0cmJ1ZiByZWZuYW1lX2J1ZjsKKworCXVuc2lnbmVkIGludCBmbGFnczsKK307CisKKy8qCisgKiBNb3ZlIHRoZSBpdGVyYXRvciB0byB0aGUgbmV4dCByZWNvcmQgaW4gdGhlIHNuYXBzaG90LCB3aXRob3V0CisgKiByZXNwZWN0IGZvciB3aGV0aGVyIHRoZSByZWNvcmQgaXMgYWN0dWFsbHkgcmVxdWlyZWQgYnkgdGhlIGN1cnJlbnQKKyAqIGl0ZXJhdGlvbi4gQWRqdXN0IHRoZSBmaWVsZHMgaW4gYGl0ZXJgIGFuZCByZXR1cm4gYElURVJfT0tgIG9yCisgKiBgSVRFUl9ET05FYC4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBmcmVlIHRoZSBpdGVyYXRvciBpbiB0aGUgY2FzZQorICogb2YgYElURVJfRE9ORWAuCisgKi8KK3N0YXRpYyBpbnQgbmV4dF9yZWNvcmQoc3RydWN0IHBhY2tlZF9yZWZfaXRlcmF0b3IgKml0ZXIpCit7CisJY29uc3QgY2hhciAqcCA9IGl0ZXItPnBvcywgKmVvbDsKKworCXN0cmJ1Zl9yZXNldCgmaXRlci0+cmVmbmFtZV9idWYpOworCisJaWYgKGl0ZXItPnBvcyA9PSBpdGVyLT5lb2YpCisJCXJldHVybiBJVEVSX0RPTkU7CisKKwlpdGVyLT5iYXNlLmZsYWdzID0gUkVGX0lTUEFDS0VEOworCisJaWYgKGl0ZXItPmVvZiAtIHAgPCB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDIgfHwKKwkgICAgcGFyc2Vfb2lkX2hleChwLCAmaXRlci0+b2lkLCAmcCkgfHwKKwkgICAgIWlzc3BhY2UoKnArKykpCisJCWRpZV9pbnZhbGlkX2xpbmUoaXRlci0+c25hcHNob3QtPnJlZnMtPnBhdGgsCisJCQkJIGl0ZXItPnBvcywgaXRlci0+ZW9mIC0gaXRlci0+cG9zKTsKKworCWVvbCA9IG1lbWNocihwLCAnXG4nLCBpdGVyLT5lb2YgLSBwKTsKKwlpZiAoIWVvbCkKKwkJZGllX3VudGVybWluYXRlZF9saW5lKGl0ZXItPnNuYXBzaG90LT5yZWZzLT5wYXRoLAorCQkJCSAgICAgIGl0ZXItPnBvcywgaXRlci0+ZW9mIC0gaXRlci0+cG9zKTsKKworCXN0cmJ1Zl9hZGQoJml0ZXItPnJlZm5hbWVfYnVmLCBwLCBlb2wgLSBwKTsKKwlpdGVyLT5iYXNlLnJlZm5hbWUgPSBpdGVyLT5yZWZuYW1lX2J1Zi5idWY7CisKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQoaXRlci0+YmFzZS5yZWZuYW1lLCBSRUZOQU1FX0FMTE9XX09ORUxFVkVMKSkgeworCQlpZiAoIXJlZm5hbWVfaXNfc2FmZShpdGVyLT5iYXNlLnJlZm5hbWUpKQorCQkJZGllKCJwYWNrZWQgcmVmbmFtZSBpcyBkYW5nZXJvdXM6ICVzIiwKKwkJCSAgICBpdGVyLT5iYXNlLnJlZm5hbWUpOworCQlvaWRjbHIoJml0ZXItPm9pZCk7CisJCWl0ZXItPmJhc2UuZmxhZ3MgfD0gUkVGX0JBRF9OQU1FIHwgUkVGX0lTQlJPS0VOOworCX0KKwlpZiAoaXRlci0+c25hcHNob3QtPnBlZWxlZCA9PSBQRUVMRURfRlVMTFkgfHwKKwkgICAgKGl0ZXItPnNuYXBzaG90LT5wZWVsZWQgPT0gUEVFTEVEX1RBR1MgJiYKKwkgICAgIHN0YXJ0c193aXRoKGl0ZXItPmJhc2UucmVmbmFtZSwgInJlZnMvdGFncy8iKSkpCisJCWl0ZXItPmJhc2UuZmxhZ3MgfD0gUkVGX0tOT1dTX1BFRUxFRDsKKworCWl0ZXItPnBvcyA9IGVvbCArIDE7CisKKwlpZiAoaXRlci0+cG9zIDwgaXRlci0+ZW9mICYmICppdGVyLT5wb3MgPT0gJ14nKSB7CisJCXAgPSBpdGVyLT5wb3MgKyAxOworCQlpZiAoaXRlci0+ZW9mIC0gcCA8IHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgMSB8fAorCQkgICAgcGFyc2Vfb2lkX2hleChwLCAmaXRlci0+cGVlbGVkLCAmcCkgfHwKKwkJICAgICpwKysgIT0gJ1xuJykKKwkJCWRpZV9pbnZhbGlkX2xpbmUoaXRlci0+c25hcHNob3QtPnJlZnMtPnBhdGgsCisJCQkJCSBpdGVyLT5wb3MsIGl0ZXItPmVvZiAtIGl0ZXItPnBvcyk7CisJCWl0ZXItPnBvcyA9IHA7CisKKwkJLyoKKwkJICogUmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBmaWxlIGhlYWRlciBzYWlkLCB3ZQorCQkgKiBkZWZpbml0ZWx5IGtub3cgdGhlIHZhbHVlIG9mICp0aGlzKiByZWZlcmVuY2UuIEJ1dAorCQkgKiB3ZSBzdXBwcmVzcyBpdCBpZiB0aGUgcmVmZXJlbmNlIGlzIGJyb2tlbjoKKwkJICovCisJCWlmICgoaXRlci0+YmFzZS5mbGFncyAmIFJFRl9JU0JST0tFTikpIHsKKwkJCW9pZGNscigmaXRlci0+cGVlbGVkKTsKKwkJCWl0ZXItPmJhc2UuZmxhZ3MgJj0gflJFRl9LTk9XU19QRUVMRUQ7CisJCX0gZWxzZSB7CisJCQlpdGVyLT5iYXNlLmZsYWdzIHw9IFJFRl9LTk9XU19QRUVMRUQ7CisJCX0KKwl9IGVsc2UgeworCQlvaWRjbHIoJml0ZXItPnBlZWxlZCk7CisJfQorCisJcmV0dXJuIElURVJfT0s7Cit9CisKK3N0YXRpYyBpbnQgcGFja2VkX3JlZl9pdGVyYXRvcl9hZHZhbmNlKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlzdHJ1Y3QgcGFja2VkX3JlZl9pdGVyYXRvciAqaXRlciA9CisJCShzdHJ1Y3QgcGFja2VkX3JlZl9pdGVyYXRvciAqKXJlZl9pdGVyYXRvcjsKKwlpbnQgb2s7CisKKwl3aGlsZSAoKG9rID0gbmV4dF9yZWNvcmQoaXRlcikpID09IElURVJfT0spIHsKKwkJaWYgKGl0ZXItPmZsYWdzICYgRE9fRk9SX0VBQ0hfUEVSX1dPUktUUkVFX09OTFkgJiYKKwkJICAgIHJlZl90eXBlKGl0ZXItPmJhc2UucmVmbmFtZSkgIT0gUkVGX1RZUEVfUEVSX1dPUktUUkVFKQorCQkJY29udGludWU7CisKKwkJaWYgKCEoaXRlci0+ZmxhZ3MgJiBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTikgJiYKKwkJICAgICFyZWZfcmVzb2x2ZXNfdG9fb2JqZWN0KGl0ZXItPmJhc2UucmVmbmFtZSwgJml0ZXItPm9pZCwKKwkJCQkJICAgIGl0ZXItPmZsYWdzKSkKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiBJVEVSX09LOworCX0KKworCWlmIChyZWZfaXRlcmF0b3JfYWJvcnQocmVmX2l0ZXJhdG9yKSAhPSBJVEVSX0RPTkUpCisJCW9rID0gSVRFUl9FUlJPUjsKKworCXJldHVybiBvazsKK30KKworc3RhdGljIGludCBwYWNrZWRfcmVmX2l0ZXJhdG9yX3BlZWwoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yLAorCQkJCSAgIHN0cnVjdCBvYmplY3RfaWQgKnBlZWxlZCkKK3sKKwlzdHJ1Y3QgcGFja2VkX3JlZl9pdGVyYXRvciAqaXRlciA9CisJCShzdHJ1Y3QgcGFja2VkX3JlZl9pdGVyYXRvciAqKXJlZl9pdGVyYXRvcjsKKworCWlmICgoaXRlci0+YmFzZS5mbGFncyAmIFJFRl9LTk9XU19QRUVMRUQpKSB7CisJCW9pZGNweShwZWVsZWQsICZpdGVyLT5wZWVsZWQpOworCQlyZXR1cm4gaXNfbnVsbF9vaWQoJml0ZXItPnBlZWxlZCkgPyAtMSA6IDA7CisJfSBlbHNlIGlmICgoaXRlci0+YmFzZS5mbGFncyAmIChSRUZfSVNCUk9LRU4gfCBSRUZfSVNTWU1SRUYpKSkgeworCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJcmV0dXJuICEhcGVlbF9vYmplY3QoJml0ZXItPm9pZCwgcGVlbGVkKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGFja2VkX3JlZl9pdGVyYXRvcl9hYm9ydChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJc3RydWN0IHBhY2tlZF9yZWZfaXRlcmF0b3IgKml0ZXIgPQorCQkoc3RydWN0IHBhY2tlZF9yZWZfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisJaW50IG9rID0gSVRFUl9ET05FOworCisJc3RyYnVmX3JlbGVhc2UoJml0ZXItPnJlZm5hbWVfYnVmKTsKKwlyZWxlYXNlX3NuYXBzaG90KGl0ZXItPnNuYXBzaG90KTsKKwliYXNlX3JlZl9pdGVyYXRvcl9mcmVlKHJlZl9pdGVyYXRvcik7CisJcmV0dXJuIG9rOworfQorCitzdGF0aWMgc3RydWN0IHJlZl9pdGVyYXRvcl92dGFibGUgcGFja2VkX3JlZl9pdGVyYXRvcl92dGFibGUgPSB7CisJcGFja2VkX3JlZl9pdGVyYXRvcl9hZHZhbmNlLAorCXBhY2tlZF9yZWZfaXRlcmF0b3JfcGVlbCwKKwlwYWNrZWRfcmVmX2l0ZXJhdG9yX2Fib3J0Cit9OworCitzdGF0aWMgc3RydWN0IHJlZl9pdGVyYXRvciAqcGFja2VkX3JlZl9pdGVyYXRvcl9iZWdpbigKKwkJc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQljb25zdCBjaGFyICpwcmVmaXgsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSAqcmVmczsKKwlzdHJ1Y3Qgc25hcHNob3QgKnNuYXBzaG90OworCWNvbnN0IGNoYXIgKnN0YXJ0OworCXN0cnVjdCBwYWNrZWRfcmVmX2l0ZXJhdG9yICppdGVyOworCXN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcjsKKwl1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmxhZ3MgPSBSRUZfU1RPUkVfUkVBRDsKKworCWlmICghKGZsYWdzICYgRE9fRk9SX0VBQ0hfSU5DTFVERV9CUk9LRU4pKQorCQlyZXF1aXJlZF9mbGFncyB8PSBSRUZfU1RPUkVfT0RCOworCXJlZnMgPSBwYWNrZWRfZG93bmNhc3QocmVmX3N0b3JlLCByZXF1aXJlZF9mbGFncywgInJlZl9pdGVyYXRvcl9iZWdpbiIpOworCisJLyoKKwkgKiBOb3RlIHRoYXQgYGdldF9zbmFwc2hvdCgpYCBpbnRlcm5hbGx5IGNoZWNrcyB3aGV0aGVyIHRoZQorCSAqIHNuYXBzaG90IGlzIHVwIHRvIGRhdGUgd2l0aCB3aGF0IGlzIG9uIGRpc2ssIGFuZCByZS1yZWFkcworCSAqIGl0IGlmIG5vdC4KKwkgKi8KKwlzbmFwc2hvdCA9IGdldF9zbmFwc2hvdChyZWZzKTsKKworCWlmIChwcmVmaXggJiYgKnByZWZpeCkKKwkJc3RhcnQgPSBmaW5kX3JlZmVyZW5jZV9sb2NhdGlvbihzbmFwc2hvdCwgcHJlZml4LCAwKTsKKwllbHNlCisJCXN0YXJ0ID0gc25hcHNob3QtPnN0YXJ0OworCisJaWYgKHN0YXJ0ID09IHNuYXBzaG90LT5lb2YpCisJCXJldHVybiBlbXB0eV9yZWZfaXRlcmF0b3JfYmVnaW4oKTsKKworCWl0ZXIgPSB4Y2FsbG9jKDEsIHNpemVvZigqaXRlcikpOworCXJlZl9pdGVyYXRvciA9ICZpdGVyLT5iYXNlOworCWJhc2VfcmVmX2l0ZXJhdG9yX2luaXQocmVmX2l0ZXJhdG9yLCAmcGFja2VkX3JlZl9pdGVyYXRvcl92dGFibGUsIDEpOworCisJaXRlci0+c25hcHNob3QgPSBzbmFwc2hvdDsKKwlhY3F1aXJlX3NuYXBzaG90KHNuYXBzaG90KTsKKworCWl0ZXItPnBvcyA9IHN0YXJ0OworCWl0ZXItPmVvZiA9IHNuYXBzaG90LT5lb2Y7CisJc3RyYnVmX2luaXQoJml0ZXItPnJlZm5hbWVfYnVmLCAwKTsKKworCWl0ZXItPmJhc2Uub2lkID0gJml0ZXItPm9pZDsKKworCWl0ZXItPmZsYWdzID0gZmxhZ3M7CisKKwlpZiAocHJlZml4ICYmICpwcmVmaXgpCisJCS8qIFN0b3AgaXRlcmF0aW9uIGFmdGVyIHdlJ3ZlIGdvbmUgKnBhc3QqIHByZWZpeDogKi8KKwkJcmVmX2l0ZXJhdG9yID0gcHJlZml4X3JlZl9pdGVyYXRvcl9iZWdpbihyZWZfaXRlcmF0b3IsIHByZWZpeCwgMCk7CisKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yOworfQorCisvKgorICogV3JpdGUgYW4gZW50cnkgdG8gdGhlIHBhY2tlZC1yZWZzIGZpbGUgZm9yIHRoZSBzcGVjaWZpZWQgcmVmbmFtZS4KKyAqIElmIHBlZWxlZCBpcyBub24tTlVMTCwgd3JpdGUgaXQgYXMgdGhlIGVudHJ5J3MgcGVlbGVkIHZhbHVlLiBPbgorICogZXJyb3IsIHJldHVybiBhIG5vbnplcm8gdmFsdWUgYW5kIGxlYXZlIGVycm5vIHNldCBhdCB0aGUgdmFsdWUgbGVmdAorICogYnkgdGhlIGZhaWxpbmcgY2FsbCB0byBgZnByaW50ZigpYC4KKyAqLworc3RhdGljIGludCB3cml0ZV9wYWNrZWRfZW50cnkoRklMRSAqZmgsIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpwZWVsZWQpCit7CisJaWYgKGZwcmludGYoZmgsICIlcyAlc1xuIiwgb2lkX3RvX2hleChvaWQpLCByZWZuYW1lKSA8IDAgfHwKKwkgICAgKHBlZWxlZCAmJiBmcHJpbnRmKGZoLCAiXiVzXG4iLCBvaWRfdG9faGV4KHBlZWxlZCkpIDwgMCkpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitpbnQgcGFja2VkX3JlZnNfbG9jayhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsIGludCBmbGFncywgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzID0KKwkJcGFja2VkX2Rvd25jYXN0KHJlZl9zdG9yZSwgUkVGX1NUT1JFX1dSSVRFIHwgUkVGX1NUT1JFX01BSU4sCisJCQkJInBhY2tlZF9yZWZzX2xvY2siKTsKKwlzdGF0aWMgaW50IHRpbWVvdXRfY29uZmlndXJlZCA9IDA7CisJc3RhdGljIGludCB0aW1lb3V0X3ZhbHVlID0gMTAwMDsKKworCWlmICghdGltZW91dF9jb25maWd1cmVkKSB7CisJCWdpdF9jb25maWdfZ2V0X2ludCgiY29yZS5wYWNrZWRyZWZzdGltZW91dCIsICZ0aW1lb3V0X3ZhbHVlKTsKKwkJdGltZW91dF9jb25maWd1cmVkID0gMTsKKwl9CisKKwkvKgorCSAqIE5vdGUgdGhhdCB3ZSBjbG9zZSB0aGUgbG9ja2ZpbGUgaW1tZWRpYXRlbHkgYmVjYXVzZSB3ZQorCSAqIGRvbid0IHdyaXRlIG5ldyBjb250ZW50IHRvIGl0LCBidXQgcmF0aGVyIHRvIGEgc2VwYXJhdGUKKwkgKiB0ZW1wZmlsZS4KKwkgKi8KKwlpZiAoaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZV90aW1lb3V0KAorCQkJICAgICZyZWZzLT5sb2NrLAorCQkJICAgIHJlZnMtPnBhdGgsCisJCQkgICAgZmxhZ3MsIHRpbWVvdXRfdmFsdWUpIDwgMCkgeworCQl1bmFibGVfdG9fbG9ja19tZXNzYWdlKHJlZnMtPnBhdGgsIGVycm5vLCBlcnIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGNsb3NlX2xvY2tfZmlsZV9nZW50bHkoJnJlZnMtPmxvY2spKSB7CisJCXN0cmJ1Zl9hZGRmKGVyciwgInVuYWJsZSB0byBjbG9zZSAlczogJXMiLCByZWZzLT5wYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJnJlZnMtPmxvY2spOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBUaGVyZSBpcyBhIHN0YXQtdmFsaWRpdHkgcHJvYmxlbSBtaWdodCBjYXVzZSBgdXBkYXRlLXJlZiAtZGAKKwkgKiBsb3N0IHRoZSBuZXdseSBjb21taXQgb2YgYSByZWYsIGJlY2F1c2UgYSBuZXcgYHBhY2tlZC1yZWZzYAorCSAqIGZpbGUgbWlnaHQgaGFzIHRoZSBzYW1lIG9uLWRpc2sgZmlsZSBhdHRyaWJ1dGVzIHN1Y2ggYXMKKwkgKiB0aW1lc3RhbXAsIGZpbGUgc2l6ZSBhbmQgaW5vZGUgdmFsdWUsIGJ1dCBoYXMgYSBjaGFuZ2VkCisJICogcmVmIHZhbHVlLgorCSAqCisJICogVGhpcyBjb3VsZCBoYXBwZW4gd2l0aCBhIHZlcnkgc21hbGwgY2hhbmNlIHdoZW4KKwkgKiBgdXBkYXRlLXJlZiAtZGAgaXMgY2FsbGVkIGFuZCBhdCB0aGUgc2FtZSB0aW1lIGFub3RoZXIKKwkgKiBgcGFjay1yZWZzIC0tYWxsYCBwcm9jZXNzIGlzIHJ1bm5pbmcuCisJICoKKwkgKiBOb3cgdGhhdCB3ZSBob2xkIHRoZSBgcGFja2VkLXJlZnNgIGxvY2ssIGl0IGlzIGltcG9ydGFudAorCSAqIHRvIG1ha2Ugc3VyZSB3ZSBjb3VsZCByZWFkIHRoZSBsYXRlc3QgdmVyc2lvbiBvZgorCSAqIGBwYWNrZWQtcmVmc2AgZmlsZSBubyBtYXR0ZXIgd2UgaGF2ZSBqdXN0IG1tYXAgaXQgb3Igbm90LgorCSAqIFNvIHdoYXQgbmVlZCB0byBkbyBpcyBjbGVhciB0aGUgc25hcHNob3QgaWYgd2UgaG9sZCBpdAorCSAqIGFscmVhZHkuCisJICovCisJY2xlYXJfc25hcHNob3QocmVmcyk7CisKKwkvKgorCSAqIE5vdyBtYWtlIHN1cmUgdGhhdCB0aGUgcGFja2VkLXJlZnMgZmlsZSBhcyBpdCBleGlzdHMgaW4gdGhlCisJICogbG9ja2VkIHN0YXRlIGlzIGxvYWRlZCBpbnRvIHRoZSBzbmFwc2hvdDoKKwkgKi8KKwlnZXRfc25hcHNob3QocmVmcyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcGFja2VkX3JlZnNfdW5sb2NrKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSkKK3sKKwlzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSAqcmVmcyA9IHBhY2tlZF9kb3duY2FzdCgKKwkJCXJlZl9zdG9yZSwKKwkJCVJFRl9TVE9SRV9SRUFEIHwgUkVGX1NUT1JFX1dSSVRFLAorCQkJInBhY2tlZF9yZWZzX3VubG9jayIpOworCisJaWYgKCFpc19sb2NrX2ZpbGVfbG9ja2VkKCZyZWZzLT5sb2NrKSkKKwkJQlVHKCJwYWNrZWRfcmVmc191bmxvY2soKSBjYWxsZWQgd2hlbiBub3QgbG9ja2VkIik7CisJcm9sbGJhY2tfbG9ja19maWxlKCZyZWZzLT5sb2NrKTsKK30KKworaW50IHBhY2tlZF9yZWZzX2lzX2xvY2tlZChzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUpCit7CisJc3RydWN0IHBhY2tlZF9yZWZfc3RvcmUgKnJlZnMgPSBwYWNrZWRfZG93bmNhc3QoCisJCQlyZWZfc3RvcmUsCisJCQlSRUZfU1RPUkVfUkVBRCB8IFJFRl9TVE9SRV9XUklURSwKKwkJCSJwYWNrZWRfcmVmc19pc19sb2NrZWQiKTsKKworCXJldHVybiBpc19sb2NrX2ZpbGVfbG9ja2VkKCZyZWZzLT5sb2NrKTsKK30KKworLyoKKyAqIFRoZSBwYWNrZWQtcmVmcyBoZWFkZXIgbGluZSB0aGF0IHdlIHdyaXRlIG91dC4gUGVyaGFwcyBvdGhlciB0cmFpdHMKKyAqIHdpbGwgYmUgYWRkZWQgbGF0ZXIuCisgKgorICogTm90ZSB0aGF0IGVhcmxpZXIgdmVyc2lvbnMgb2YgR2l0IHVzZWQgdG8gcGFyc2UgdGhlc2UgdHJhaXRzIGJ5CisgKiBsb29raW5nIGZvciAiIHRyYWl0ICIgaW4gdGhlIGxpbmUuIEZvciB0aGlzIHJlYXNvbiwgdGhlIHNwYWNlIGFmdGVyCisgKiB0aGUgY29sb24gYW5kIHRoZSB0cmFpbGluZyBzcGFjZSBhcmUgcmVxdWlyZWQuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyIFBBQ0tFRF9SRUZTX0hFQURFUltdID0KKwkiIyBwYWNrLXJlZnMgd2l0aDogcGVlbGVkIGZ1bGx5LXBlZWxlZCBzb3J0ZWQgXG4iOworCitzdGF0aWMgaW50IHBhY2tlZF9pbml0X2RiKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCS8qIE5vdGhpbmcgdG8gZG8uICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXcml0ZSB0aGUgcGFja2VkIHJlZnMgZnJvbSB0aGUgY3VycmVudCBzbmFwc2hvdCB0byB0aGUgcGFja2VkLXJlZnMKKyAqIHRlbXBmaWxlLCBpbmNvcnBvcmF0aW5nIGFueSBjaGFuZ2VzIGZyb20gYHVwZGF0ZXNgLiBgdXBkYXRlc2AgbXVzdAorICogYmUgYSBzb3J0ZWQgc3RyaW5nIGxpc3Qgd2hvc2Uga2V5cyBhcmUgdGhlIHJlZm5hbWVzIGFuZCB3aG9zZSB1dGlsCisgKiB2YWx1ZXMgYXJlIGBzdHJ1Y3QgcmVmX3VwZGF0ZSAqYC4gT24gZXJyb3IsIHJvbGxiYWNrIHRoZSB0ZW1wZmlsZSwKKyAqIHdyaXRlIGFuIGVycm9yIG1lc3NhZ2UgdG8gYGVycmAsIGFuZCByZXR1cm4gYSBub256ZXJvIHZhbHVlLgorICoKKyAqIFRoZSBwYWNrZmlsZSBtdXN0IGJlIGxvY2tlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFuZCB3aWxsCisgKiByZW1haW4gbG9ja2VkIHdoZW4gaXQgaXMgZG9uZS4KKyAqLworc3RhdGljIGludCB3cml0ZV93aXRoX3VwZGF0ZXMoc3RydWN0IHBhY2tlZF9yZWZfc3RvcmUgKnJlZnMsCisJCQkgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnVwZGF0ZXMsCisJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlciA9IE5VTEw7CisJc2l6ZV90IGk7CisJaW50IG9rOworCUZJTEUgKm91dDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcGFja2VkX3JlZnNfcGF0aDsKKworCWlmICghaXNfbG9ja19maWxlX2xvY2tlZCgmcmVmcy0+bG9jaykpCisJCUJVRygid3JpdGVfd2l0aF91cGRhdGVzKCkgY2FsbGVkIHdoaWxlIHVubG9ja2VkIik7CisKKwkvKgorCSAqIElmIHBhY2tlZC1yZWZzIGlzIGEgc3ltbGluaywgd2Ugd2FudCB0byBvdmVyd3JpdGUgdGhlCisJICogc3ltbGlua2VkLXRvIGZpbGUsIG5vdCB0aGUgc3ltbGluayBpdHNlbGYuIEFsc28sIHB1dCB0aGUKKwkgKiBzdGFnaW5nIGZpbGUgbmV4dCB0byBpdDoKKwkgKi8KKwlwYWNrZWRfcmVmc19wYXRoID0gZ2V0X2xvY2tlZF9maWxlX3BhdGgoJnJlZnMtPmxvY2spOworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzLm5ldyIsIHBhY2tlZF9yZWZzX3BhdGgpOworCWZyZWUocGFja2VkX3JlZnNfcGF0aCk7CisJcmVmcy0+dGVtcGZpbGUgPSBjcmVhdGVfdGVtcGZpbGUoc2IuYnVmKTsKKwlpZiAoIXJlZnMtPnRlbXBmaWxlKSB7CisJCXN0cmJ1Zl9hZGRmKGVyciwgInVuYWJsZSB0byBjcmVhdGUgZmlsZSAlczogJXMiLAorCQkJICAgIHNiLmJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJb3V0ID0gZmRvcGVuX3RlbXBmaWxlKHJlZnMtPnRlbXBmaWxlLCAidyIpOworCWlmICghb3V0KSB7CisJCXN0cmJ1Zl9hZGRmKGVyciwgInVuYWJsZSB0byBmZG9wZW4gcGFja2VkLXJlZnMgdGVtcGZpbGU6ICVzIiwKKwkJCSAgICBzdHJlcnJvcihlcnJubykpOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChmcHJpbnRmKG91dCwgIiVzIiwgUEFDS0VEX1JFRlNfSEVBREVSKSA8IDApCisJCWdvdG8gd3JpdGVfZXJyb3I7CisKKwkvKgorCSAqIFdlIGl0ZXJhdGUgaW4gcGFyYWxsZWwgdGhyb3VnaCB0aGUgY3VycmVudCBsaXN0IG9mIHJlZnMgYW5kCisJICogdGhlIGxpc3Qgb2YgdXBkYXRlcywgcHJvY2Vzc2luZyBhbiBlbnRyeSBmcm9tIGF0IGxlYXN0IG9uZQorCSAqIG9mIHRoZSBsaXN0cyBlYWNoIHRpbWUgdGhyb3VnaCB0aGUgbG9vcC4gV2hlbiB0aGUgY3VycmVudAorCSAqIGxpc3Qgb2YgcmVmcyBpcyBleGhhdXN0ZWQsIHNldCBpdGVyIHRvIE5VTEwuIFdoZW4gdGhlIGxpc3QKKwkgKiBvZiB1cGRhdGVzIGlzIGV4aGF1c3RlZCwgbGVhdmUgaSBzZXQgdG8gdXBkYXRlcy0+bnIuCisJICovCisJaXRlciA9IHBhY2tlZF9yZWZfaXRlcmF0b3JfYmVnaW4oJnJlZnMtPmJhc2UsICIiLAorCQkJCQkgRE9fRk9SX0VBQ0hfSU5DTFVERV9CUk9LRU4pOworCWlmICgob2sgPSByZWZfaXRlcmF0b3JfYWR2YW5jZShpdGVyKSkgIT0gSVRFUl9PSykKKwkJaXRlciA9IE5VTEw7CisKKwlpID0gMDsKKworCXdoaWxlIChpdGVyIHx8IGkgPCB1cGRhdGVzLT5ucikgeworCQlzdHJ1Y3QgcmVmX3VwZGF0ZSAqdXBkYXRlID0gTlVMTDsKKwkJaW50IGNtcDsKKworCQlpZiAoaSA+PSB1cGRhdGVzLT5ucikgeworCQkJY21wID0gLTE7CisJCX0gZWxzZSB7CisJCQl1cGRhdGUgPSB1cGRhdGVzLT5pdGVtc1tpXS51dGlsOworCisJCQlpZiAoIWl0ZXIpCisJCQkJY21wID0gKzE7CisJCQllbHNlCisJCQkJY21wID0gc3RyY21wKGl0ZXItPnJlZm5hbWUsIHVwZGF0ZS0+cmVmbmFtZSk7CisJCX0KKworCQlpZiAoIWNtcCkgeworCQkJLyoKKwkJCSAqIFRoZXJlIGlzIGJvdGggYW4gb2xkIHZhbHVlIGFuZCBhbiB1cGRhdGUKKwkJCSAqIGZvciB0aGlzIHJlZmVyZW5jZS4gQ2hlY2sgdGhlIG9sZCB2YWx1ZSBpZgorCQkJICogbmVjZXNzYXJ5OgorCQkJICovCisJCQlpZiAoKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfSEFWRV9PTEQpKSB7CisJCQkJaWYgKGlzX251bGxfb2lkKCZ1cGRhdGUtPm9sZF9vaWQpKSB7CisJCQkJCXN0cmJ1Zl9hZGRmKGVyciwgImNhbm5vdCB1cGRhdGUgcmVmICclcyc6ICIKKwkJCQkJCSAgICAicmVmZXJlbmNlIGFscmVhZHkgZXhpc3RzIiwKKwkJCQkJCSAgICB1cGRhdGUtPnJlZm5hbWUpOworCQkJCQlnb3RvIGVycm9yOworCQkJCX0gZWxzZSBpZiAoIW9pZGVxKCZ1cGRhdGUtPm9sZF9vaWQsIGl0ZXItPm9pZCkpIHsKKwkJCQkJc3RyYnVmX2FkZGYoZXJyLCAiY2Fubm90IHVwZGF0ZSByZWYgJyVzJzogIgorCQkJCQkJICAgICJpcyBhdCAlcyBidXQgZXhwZWN0ZWQgJXMiLAorCQkJCQkJICAgIHVwZGF0ZS0+cmVmbmFtZSwKKwkJCQkJCSAgICBvaWRfdG9faGV4KGl0ZXItPm9pZCksCisJCQkJCQkgICAgb2lkX3RvX2hleCgmdXBkYXRlLT5vbGRfb2lkKSk7CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfQorCQkJfQorCisJCQkvKiBOb3cgZmlndXJlIG91dCB3aGF0IHRvIHVzZSBmb3IgdGhlIG5ldyB2YWx1ZTogKi8KKwkJCWlmICgodXBkYXRlLT5mbGFncyAmIFJFRl9IQVZFX05FVykpIHsKKwkJCQkvKgorCQkJCSAqIFRoZSB1cGRhdGUgdGFrZXMgcHJlY2VkZW5jZS4gU2tpcAorCQkJCSAqIHRoZSBpdGVyYXRvciBvdmVyIHRoZSB1bm5lZWRlZAorCQkJCSAqIHZhbHVlLgorCQkJCSAqLworCQkJCWlmICgob2sgPSByZWZfaXRlcmF0b3JfYWR2YW5jZShpdGVyKSkgIT0gSVRFUl9PSykKKwkJCQkJaXRlciA9IE5VTEw7CisJCQkJY21wID0gKzE7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogVGhlIHVwZGF0ZSBkb2Vzbid0IGFjdHVhbGx5IHdhbnQgdG8KKwkJCQkgKiBjaGFuZ2UgYW55dGhpbmcuIFdlJ3JlIGRvbmUgd2l0aCBpdC4KKwkJCQkgKi8KKwkJCQlpKys7CisJCQkJY21wID0gLTE7CisJCQl9CisJCX0gZWxzZSBpZiAoY21wID4gMCkgeworCQkJLyoKKwkJCSAqIFRoZXJlIGlzIG5vIG9sZCB2YWx1ZSBidXQgdGhlcmUgaXMgYW4KKwkJCSAqIHVwZGF0ZSBmb3IgdGhpcyByZWZlcmVuY2UuIE1ha2Ugc3VyZSB0aGF0CisJCQkgKiB0aGUgdXBkYXRlIGRpZG4ndCBleHBlY3QgYW4gZXhpc3RpbmcgdmFsdWU6CisJCQkgKi8KKwkJCWlmICgodXBkYXRlLT5mbGFncyAmIFJFRl9IQVZFX09MRCkgJiYKKwkJCSAgICAhaXNfbnVsbF9vaWQoJnVwZGF0ZS0+b2xkX29pZCkpIHsKKwkJCQlzdHJidWZfYWRkZihlcnIsICJjYW5ub3QgdXBkYXRlIHJlZiAnJXMnOiAiCisJCQkJCSAgICAicmVmZXJlbmNlIGlzIG1pc3NpbmcgYnV0IGV4cGVjdGVkICVzIiwKKwkJCQkJICAgIHVwZGF0ZS0+cmVmbmFtZSwKKwkJCQkJICAgIG9pZF90b19oZXgoJnVwZGF0ZS0+b2xkX29pZCkpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0KKworCQlpZiAoY21wIDwgMCkgeworCQkJLyogUGFzcyB0aGUgb2xkIHJlZmVyZW5jZSB0aHJvdWdoLiAqLworCisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIHBlZWxlZDsKKwkJCWludCBwZWVsX2Vycm9yID0gcmVmX2l0ZXJhdG9yX3BlZWwoaXRlciwgJnBlZWxlZCk7CisKKwkJCWlmICh3cml0ZV9wYWNrZWRfZW50cnkob3V0LCBpdGVyLT5yZWZuYW1lLAorCQkJCQkgICAgICAgaXRlci0+b2lkLAorCQkJCQkgICAgICAgcGVlbF9lcnJvciA/IE5VTEwgOiAmcGVlbGVkKSkKKwkJCQlnb3RvIHdyaXRlX2Vycm9yOworCisJCQlpZiAoKG9rID0gcmVmX2l0ZXJhdG9yX2FkdmFuY2UoaXRlcikpICE9IElURVJfT0spCisJCQkJaXRlciA9IE5VTEw7CisJCX0gZWxzZSBpZiAoaXNfbnVsbF9vaWQoJnVwZGF0ZS0+bmV3X29pZCkpIHsKKwkJCS8qCisJCQkgKiBUaGUgdXBkYXRlIHdhbnRzIHRvIGRlbGV0ZSB0aGUgcmVmZXJlbmNlLAorCQkJICogYW5kIHRoZSByZWZlcmVuY2UgZWl0aGVyIGRpZG4ndCBleGlzdCBvciB3ZQorCQkJICogaGF2ZSBhbHJlYWR5IHNraXBwZWQgaXQuIFNvIHdlJ3JlIGRvbmUgd2l0aAorCQkJICogdGhlIHVwZGF0ZSAoYW5kIGRvbid0IGhhdmUgdG8gd3JpdGUKKwkJCSAqIGFueXRoaW5nKS4KKwkJCSAqLworCQkJaSsrOworCQl9IGVsc2UgeworCQkJc3RydWN0IG9iamVjdF9pZCBwZWVsZWQ7CisJCQlpbnQgcGVlbF9lcnJvciA9IHBlZWxfb2JqZWN0KCZ1cGRhdGUtPm5ld19vaWQsCisJCQkJCQkgICAgICZwZWVsZWQpOworCisJCQlpZiAod3JpdGVfcGFja2VkX2VudHJ5KG91dCwgdXBkYXRlLT5yZWZuYW1lLAorCQkJCQkgICAgICAgJnVwZGF0ZS0+bmV3X29pZCwKKwkJCQkJICAgICAgIHBlZWxfZXJyb3IgPyBOVUxMIDogJnBlZWxlZCkpCisJCQkJZ290byB3cml0ZV9lcnJvcjsKKworCQkJaSsrOworCQl9CisJfQorCisJaWYgKG9rICE9IElURVJfRE9ORSkgeworCQlzdHJidWZfYWRkc3RyKGVyciwgInVuYWJsZSB0byB3cml0ZSBwYWNrZWQtcmVmcyBmaWxlOiAiCisJCQkgICAgICAiZXJyb3IgaXRlcmF0aW5nIG92ZXIgb2xkIGNvbnRlbnRzIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGNsb3NlX3RlbXBmaWxlX2dlbnRseShyZWZzLT50ZW1wZmlsZSkpIHsKKwkJc3RyYnVmX2FkZGYoZXJyLCAiZXJyb3IgY2xvc2luZyBmaWxlICVzOiAlcyIsCisJCQkgICAgZ2V0X3RlbXBmaWxlX3BhdGgocmVmcy0+dGVtcGZpbGUpLAorCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCWRlbGV0ZV90ZW1wZmlsZSgmcmVmcy0+dGVtcGZpbGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7CisKK3dyaXRlX2Vycm9yOgorCXN0cmJ1Zl9hZGRmKGVyciwgImVycm9yIHdyaXRpbmcgdG8gJXM6ICVzIiwKKwkJICAgIGdldF90ZW1wZmlsZV9wYXRoKHJlZnMtPnRlbXBmaWxlKSwgc3RyZXJyb3IoZXJybm8pKTsKKworZXJyb3I6CisJaWYgKGl0ZXIpCisJCXJlZl9pdGVyYXRvcl9hYm9ydChpdGVyKTsKKworCWRlbGV0ZV90ZW1wZmlsZSgmcmVmcy0+dGVtcGZpbGUpOworCXJldHVybiAtMTsKK30KKworaW50IGlzX3BhY2tlZF90cmFuc2FjdGlvbl9uZWVkZWQoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJCSBzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbikKK3sKKwlzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSAqcmVmcyA9IHBhY2tlZF9kb3duY2FzdCgKKwkJCXJlZl9zdG9yZSwKKwkJCVJFRl9TVE9SRV9SRUFELAorCQkJImlzX3BhY2tlZF90cmFuc2FjdGlvbl9uZWVkZWQiKTsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZmVyZW50ID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IGk7CisJaW50IHJldDsKKworCWlmICghaXNfbG9ja19maWxlX2xvY2tlZCgmcmVmcy0+bG9jaykpCisJCUJVRygiaXNfcGFja2VkX3RyYW5zYWN0aW9uX25lZWRlZCgpIGNhbGxlZCB3aGlsZSB1bmxvY2tlZCIpOworCisJLyoKKwkgKiBXZSdyZSBvbmx5IGdvaW5nIHRvIGJvdGhlciByZXR1cm5pbmcgZmFsc2UgZm9yIHRoZSBjb21tb24sCisJICogdHJpdmlhbCBjYXNlIHRoYXQgcmVmZXJlbmNlcyBhcmUgb25seSBiZWluZyBkZWxldGVkLCB0aGVpcgorCSAqIG9sZCB2YWx1ZXMgYXJlIG5vdCBiZWluZyBjaGVja2VkLCBhbmQgdGhlIG9sZCBgcGFja2VkLXJlZnNgCisJICogZmlsZSBkb2Vzbid0IGNvbnRhaW4gYW55IG9mIHRob3NlIHJlZmVyZW5jZShzKS4gVGhpcyBnaXZlcworCSAqIGZhbHNlIHBvc2l0aXZlcyBmb3Igc29tZSBvdGhlciBjYXNlcyB0aGF0IGNvdWxkCisJICogdGhlb3JldGljYWxseSBiZSBvcHRpbWl6ZWQgYXdheToKKwkgKgorCSAqIDEuIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9sZCB2YWx1ZSBpcyBiZWluZyB2ZXJpZmllZCB3aXRob3V0CisJICogICAgc2V0dGluZyBhIG5ldyB2YWx1ZS4gSW4gdGhpcyBjYXNlLCB3ZSBjb3VsZCB2ZXJpZnkgdGhlCisJICogICAgb2xkIHZhbHVlIGhlcmUgYW5kIHNraXAgdGhlIHVwZGF0ZSBpZiBpdCBhZ3JlZXMuIElmIGl0CisJICogICAgZGlzYWdyZWVzLCB3ZSBjb3VsZCBlaXRoZXIgbGV0IHRoZSB1cGRhdGUgZ28gdGhyb3VnaAorCSAqICAgICh0aGUgYWN0dWFsIGNvbW1pdCB3b3VsZCByZS1kZXRlY3QgYW5kIHJlcG9ydCB0aGUKKwkgKiAgICBwcm9ibGVtKSwgb3IgY29tZSB1cCB3aXRoIGEgd2F5IG9mIHJlcG9ydGluZyBzdWNoIGFuCisJICogICAgZXJyb3IgdG8gKm91ciogY2FsbGVyLgorCSAqCisJICogMi4gSXQgY291bGQgYmUgdGhhdCBhIG5ldyB2YWx1ZSBpcyBiZWluZyBzZXQsIGJ1dCB0aGF0IGl0CisJICogICAgaXMgaWRlbnRpY2FsIHRvIHRoZSBjdXJyZW50IHBhY2tlZCB2YWx1ZSBvZiB0aGUKKwkgKiAgICByZWZlcmVuY2UuCisJICoKKwkgKiBOZWl0aGVyIG9mIHRoZXNlIGNhc2VzIHdpbGwgY29tZSB1cCBpbiB0aGUgY3VycmVudCBjb2RlLAorCSAqIGJlY2F1c2UgdGhlIG9ubHkgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gcGFzc2VzIHRvIGl0IGEKKwkgKiB0cmFuc2FjdGlvbiB0aGF0IG9ubHkgaW5jbHVkZXMgYGRlbGV0ZWAgdXBkYXRlcyB3aXRoIG5vCisJICogYG9sZF9pZGAuIEV2ZW4gaWYgdGhhdCBldmVyIGNoYW5nZXMsIGZhbHNlIHBvc2l0aXZlcyBvbmx5CisJICogY2F1c2UgYW4gb3B0aW1pemF0aW9uIHRvIGJlIG1pc3NlZDsgdGhleSBkbyBub3QgYWZmZWN0CisJICogY29ycmVjdG5lc3MuCisJICovCisKKwkvKgorCSAqIFN0YXJ0IHdpdGggdGhlIGNoZWFwIGNoZWNrcyB0aGF0IGRvbid0IHJlcXVpcmUgb2xkCisJICogcmVmZXJlbmNlIHZhbHVlcyB0byBiZSByZWFkOgorCSAqLworCWZvciAoaSA9IDA7IGkgPCB0cmFuc2FjdGlvbi0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX3VwZGF0ZSAqdXBkYXRlID0gdHJhbnNhY3Rpb24tPnVwZGF0ZXNbaV07CisKKwkJaWYgKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfSEFWRV9PTEQpCisJCQkvKiBIYXZlIHRvIGNoZWNrIHRoZSBvbGQgdmFsdWUgLT4gbmVlZGVkLiAqLworCQkJcmV0dXJuIDE7CisKKwkJaWYgKCh1cGRhdGUtPmZsYWdzICYgUkVGX0hBVkVfTkVXKSAmJiAhaXNfbnVsbF9vaWQoJnVwZGF0ZS0+bmV3X29pZCkpCisJCQkvKiBIYXZlIHRvIHNldCBhIG5ldyB2YWx1ZSAtPiBuZWVkZWQuICovCisJCQlyZXR1cm4gMTsKKwl9CisKKwkvKgorCSAqIFRoZSB0cmFuc2FjdGlvbiBpc24ndCBjaGVja2luZyBhbnkgb2xkIHZhbHVlcyBub3IgaXMgaXQKKwkgKiBzZXR0aW5nIGFueSBub256ZXJvIG5ldyB2YWx1ZXMsIHNvIGl0IHN0aWxsIG1pZ2h0IGJlIGFibGUKKwkgKiB0byBiZSBza2lwcGVkLiBOb3cgZG8gdGhlIG1vcmUgZXhwZW5zaXZlIGNoZWNrOiB0aGUgdXBkYXRlCisJICogaXMgbmVlZGVkIGlmIGFueSBvZiB0aGUgdXBkYXRlcyBpcyBhIGRlbGV0ZSwgYW5kIHRoZSBvbGQKKwkgKiBgcGFja2VkLXJlZnNgIGZpbGUgY29udGFpbnMgYSB2YWx1ZSBmb3IgdGhhdCByZWZlcmVuY2UuCisJICovCisJcmV0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgdHJhbnNhY3Rpb24tPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHRyYW5zYWN0aW9uLT51cGRhdGVzW2ldOworCQl1bnNpZ25lZCBpbnQgdHlwZTsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJaWYgKCEodXBkYXRlLT5mbGFncyAmIFJFRl9IQVZFX05FVykpCisJCQkvKgorCQkJICogVGhpcyByZWZlcmVuY2UgaXNuJ3QgYmVpbmcgZGVsZXRlZCAtPiBub3QKKwkJCSAqIG5lZWRlZC4KKwkJCSAqLworCQkJY29udGludWU7CisKKwkJaWYgKCFyZWZzX3JlYWRfcmF3X3JlZihyZWZfc3RvcmUsIHVwZGF0ZS0+cmVmbmFtZSwKKwkJCQkgICAgICAgJm9pZCwgJnJlZmVyZW50LCAmdHlwZSkgfHwKKwkJICAgIGVycm5vICE9IEVOT0VOVCkgeworCQkJLyoKKwkJCSAqIFdlIGhhdmUgdG8gYWN0dWFsbHkgZGVsZXRlIHRoYXQgcmVmZXJlbmNlCisJCQkgKiAtPiB0aGlzIHRyYW5zYWN0aW9uIGlzIG5lZWRlZC4KKwkJCSAqLworCQkJcmV0ID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnJlZmVyZW50KTsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgcGFja2VkX3RyYW5zYWN0aW9uX2JhY2tlbmRfZGF0YSB7CisJLyogVHJ1ZSBpZmYgdGhlIHRyYW5zYWN0aW9uIG93bnMgdGhlIHBhY2tlZC1yZWZzIGxvY2suICovCisJaW50IG93bl9sb2NrOworCisJc3RydWN0IHN0cmluZ19saXN0IHVwZGF0ZXM7Cit9OworCitzdGF0aWMgdm9pZCBwYWNrZWRfdHJhbnNhY3Rpb25fY2xlYW51cChzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSAqcmVmcywKKwkJCQkgICAgICAgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24pCit7CisJc3RydWN0IHBhY2tlZF90cmFuc2FjdGlvbl9iYWNrZW5kX2RhdGEgKmRhdGEgPSB0cmFuc2FjdGlvbi0+YmFja2VuZF9kYXRhOworCisJaWYgKGRhdGEpIHsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmRhdGEtPnVwZGF0ZXMsIDApOworCisJCWlmIChpc190ZW1wZmlsZV9hY3RpdmUocmVmcy0+dGVtcGZpbGUpKQorCQkJZGVsZXRlX3RlbXBmaWxlKCZyZWZzLT50ZW1wZmlsZSk7CisKKwkJaWYgKGRhdGEtPm93bl9sb2NrICYmIGlzX2xvY2tfZmlsZV9sb2NrZWQoJnJlZnMtPmxvY2spKSB7CisJCQlwYWNrZWRfcmVmc191bmxvY2soJnJlZnMtPmJhc2UpOworCQkJZGF0YS0+b3duX2xvY2sgPSAwOworCQl9CisKKwkJZnJlZShkYXRhKTsKKwkJdHJhbnNhY3Rpb24tPmJhY2tlbmRfZGF0YSA9IE5VTEw7CisJfQorCisJdHJhbnNhY3Rpb24tPnN0YXRlID0gUkVGX1RSQU5TQUNUSU9OX0NMT1NFRDsKK30KKworc3RhdGljIGludCBwYWNrZWRfdHJhbnNhY3Rpb25fcHJlcGFyZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkJICAgICAgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzID0gcGFja2VkX2Rvd25jYXN0KAorCQkJcmVmX3N0b3JlLAorCQkJUkVGX1NUT1JFX1JFQUQgfCBSRUZfU1RPUkVfV1JJVEUgfCBSRUZfU1RPUkVfT0RCLAorCQkJInJlZl90cmFuc2FjdGlvbl9wcmVwYXJlIik7CisJc3RydWN0IHBhY2tlZF90cmFuc2FjdGlvbl9iYWNrZW5kX2RhdGEgKmRhdGE7CisJc2l6ZV90IGk7CisJaW50IHJldCA9IFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CisKKwkvKgorCSAqIE5vdGUgdGhhdCB3ZSAqZG9uJ3QqIHNraXAgdHJhbnNhY3Rpb25zIHdpdGggemVybyB1cGRhdGVzLAorCSAqIGJlY2F1c2Ugc3VjaCBhIHRyYW5zYWN0aW9uIG1pZ2h0IGJlIGV4ZWN1dGVkIGZvciB0aGUgc2lkZQorCSAqIGVmZmVjdCBvZiBlbnN1cmluZyB0aGF0IGFsbCBvZiB0aGUgcmVmZXJlbmNlcyBhcmUgcGVlbGVkIG9yCisJICogZW5zdXJpbmcgdGhhdCB0aGUgYHBhY2tlZC1yZWZzYCBmaWxlIGlzIHNvcnRlZC4gSWYgdGhlCisJICogY2FsbGVyIHdhbnRzIHRvIG9wdGltaXplIGF3YXkgZW1wdHkgdHJhbnNhY3Rpb25zLCBpdCBzaG91bGQKKwkgKiBkbyBzbyBpdHNlbGYuCisJICovCisKKwlkYXRhID0geGNhbGxvYygxLCBzaXplb2YoKmRhdGEpKTsKKwlzdHJpbmdfbGlzdF9pbml0KCZkYXRhLT51cGRhdGVzLCAwKTsKKworCXRyYW5zYWN0aW9uLT5iYWNrZW5kX2RhdGEgPSBkYXRhOworCisJLyoKKwkgKiBTdGljayB0aGUgdXBkYXRlcyBpbiBhIHN0cmluZyBsaXN0IGJ5IHJlZm5hbWUgc28gdGhhdCB3ZQorCSAqIGNhbiBzb3J0IHRoZW06CisJICovCisJZm9yIChpID0gMDsgaSA8IHRyYW5zYWN0aW9uLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSB0cmFuc2FjdGlvbi0+dXBkYXRlc1tpXTsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZkYXRhLT51cGRhdGVzLCB1cGRhdGUtPnJlZm5hbWUpOworCisJCS8qIFN0b3JlIGEgcG9pbnRlciB0byB1cGRhdGUgaW4gaXRlbS0+dXRpbDogKi8KKwkJaXRlbS0+dXRpbCA9IHVwZGF0ZTsKKwl9CisJc3RyaW5nX2xpc3Rfc29ydCgmZGF0YS0+dXBkYXRlcyk7CisKKwlpZiAocmVmX3VwZGF0ZV9yZWplY3RfZHVwbGljYXRlcygmZGF0YS0+dXBkYXRlcywgZXJyKSkKKwkJZ290byBmYWlsdXJlOworCisJaWYgKCFpc19sb2NrX2ZpbGVfbG9ja2VkKCZyZWZzLT5sb2NrKSkgeworCQlpZiAocGFja2VkX3JlZnNfbG9jayhyZWZfc3RvcmUsIDAsIGVycikpCisJCQlnb3RvIGZhaWx1cmU7CisJCWRhdGEtPm93bl9sb2NrID0gMTsKKwl9CisKKwlpZiAod3JpdGVfd2l0aF91cGRhdGVzKHJlZnMsICZkYXRhLT51cGRhdGVzLCBlcnIpKQorCQlnb3RvIGZhaWx1cmU7CisKKwl0cmFuc2FjdGlvbi0+c3RhdGUgPSBSRUZfVFJBTlNBQ1RJT05fUFJFUEFSRUQ7CisJcmV0dXJuIDA7CisKK2ZhaWx1cmU6CisJcGFja2VkX3RyYW5zYWN0aW9uX2NsZWFudXAocmVmcywgdHJhbnNhY3Rpb24pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFja2VkX3RyYW5zYWN0aW9uX2Fib3J0KHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCQkgICAgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkJICAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSAqcmVmcyA9IHBhY2tlZF9kb3duY2FzdCgKKwkJCXJlZl9zdG9yZSwKKwkJCVJFRl9TVE9SRV9SRUFEIHwgUkVGX1NUT1JFX1dSSVRFIHwgUkVGX1NUT1JFX09EQiwKKwkJCSJyZWZfdHJhbnNhY3Rpb25fYWJvcnQiKTsKKworCXBhY2tlZF90cmFuc2FjdGlvbl9jbGVhbnVwKHJlZnMsIHRyYW5zYWN0aW9uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWNrZWRfdHJhbnNhY3Rpb25fZmluaXNoKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCQkgICAgIHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzID0gcGFja2VkX2Rvd25jYXN0KAorCQkJcmVmX3N0b3JlLAorCQkJUkVGX1NUT1JFX1JFQUQgfCBSRUZfU1RPUkVfV1JJVEUgfCBSRUZfU1RPUkVfT0RCLAorCQkJInJlZl90cmFuc2FjdGlvbl9maW5pc2giKTsKKwlpbnQgcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKwljaGFyICpwYWNrZWRfcmVmc19wYXRoOworCisJY2xlYXJfc25hcHNob3QocmVmcyk7CisKKwlwYWNrZWRfcmVmc19wYXRoID0gZ2V0X2xvY2tlZF9maWxlX3BhdGgoJnJlZnMtPmxvY2spOworCWlmIChyZW5hbWVfdGVtcGZpbGUoJnJlZnMtPnRlbXBmaWxlLCBwYWNrZWRfcmVmc19wYXRoKSkgeworCQlzdHJidWZfYWRkZihlcnIsICJlcnJvciByZXBsYWNpbmcgJXM6ICVzIiwKKwkJCSAgICByZWZzLT5wYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJcmV0ID0gMDsKKworY2xlYW51cDoKKwlmcmVlKHBhY2tlZF9yZWZzX3BhdGgpOworCXBhY2tlZF90cmFuc2FjdGlvbl9jbGVhbnVwKHJlZnMsIHRyYW5zYWN0aW9uKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBhY2tlZF9pbml0aWFsX3RyYW5zYWN0aW9uX2NvbW1pdChzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkJCSAgICBzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkJICAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlyZXR1cm4gcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgZXJyKTsKK30KKworc3RhdGljIGludCBwYWNrZWRfZGVsZXRlX3JlZnMoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLCBjb25zdCBjaGFyICptc2csCisJCQkgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmbmFtZXMsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSAqcmVmcyA9CisJCXBhY2tlZF9kb3duY2FzdChyZWZfc3RvcmUsIFJFRl9TVE9SRV9XUklURSwgImRlbGV0ZV9yZWZzIik7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlpbnQgcmV0OworCisJKHZvaWQpcmVmczsgLyogV2UgbmVlZCB0aGUgY2hlY2sgYWJvdmUsIGJ1dCBkb24ndCB1c2UgdGhlIHZhcmlhYmxlICovCisKKwlpZiAoIXJlZm5hbWVzLT5ucikKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFNpbmNlIHdlIGRvbid0IGNoZWNrIHRoZSByZWZlcmVuY2VzJyBvbGRfb2lkcywgdGhlCisJICogaW5kaXZpZHVhbCB1cGRhdGVzIGNhbid0IGZhaWwsIHNvIHdlIGNhbiBwYWNrIGFsbCBvZiB0aGUKKwkgKiB1cGRhdGVzIGludG8gYSBzaW5nbGUgdHJhbnNhY3Rpb24uCisJICovCisKKwl0cmFuc2FjdGlvbiA9IHJlZl9zdG9yZV90cmFuc2FjdGlvbl9iZWdpbihyZWZfc3RvcmUsICZlcnIpOworCWlmICghdHJhbnNhY3Rpb24pCisJCXJldHVybiAtMTsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgcmVmbmFtZXMpIHsKKwkJaWYgKHJlZl90cmFuc2FjdGlvbl9kZWxldGUodHJhbnNhY3Rpb24sIGl0ZW0tPnN0cmluZywgTlVMTCwKKwkJCQkJICAgZmxhZ3MsIG1zZywgJmVycikpIHsKKwkJCXdhcm5pbmcoXygiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIiksCisJCQkJaXRlbS0+c3RyaW5nLCBlcnIuYnVmKTsKKwkJCXN0cmJ1Zl9yZXNldCgmZXJyKTsKKwkJfQorCX0KKworCXJldCA9IHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sICZlcnIpOworCisJaWYgKHJldCkgeworCQlpZiAocmVmbmFtZXMtPm5yID09IDEpCisJCQllcnJvcihfKCJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZSAlczogJXMiKSwKKwkJCSAgICAgIHJlZm5hbWVzLT5pdGVtc1swXS5zdHJpbmcsIGVyci5idWYpOworCQllbHNlCisJCQllcnJvcihfKCJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZXM6ICVzIiksIGVyci5idWYpOworCX0KKworCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBhY2tlZF9wYWNrX3JlZnMoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJLyoKKwkgKiBQYWNrZWQgcmVmcyBhcmUgYWxyZWFkeSBwYWNrZWQuIEl0IG1pZ2h0IGJlIHRoYXQgbG9vc2UgcmVmcworCSAqIGFyZSBwYWNrZWQgKmludG8qIGEgcGFja2VkIHJlZnMgc3RvcmUsIGJ1dCB0aGF0IGlzIGRvbmUgYnkKKwkgKiB1cGRhdGluZyB0aGUgcGFja2VkIHJlZmVyZW5jZXMgdmlhIGEgdHJhbnNhY3Rpb24uCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFja2VkX2NyZWF0ZV9zeW1yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IGNoYXIgKnRhcmdldCwKKwkJCSAgICAgICBjb25zdCBjaGFyICpsb2dtc2cpCit7CisJQlVHKCJwYWNrZWQgcmVmZXJlbmNlIHN0b3JlIGRvZXMgbm90IHN1cHBvcnQgc3ltcmVmcyIpOworfQorCitzdGF0aWMgaW50IHBhY2tlZF9yZW5hbWVfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCSAgICBjb25zdCBjaGFyICpvbGRyZWZuYW1lLCBjb25zdCBjaGFyICpuZXdyZWZuYW1lLAorCQkJICAgIGNvbnN0IGNoYXIgKmxvZ21zZykKK3sKKwlCVUcoInBhY2tlZCByZWZlcmVuY2Ugc3RvcmUgZG9lcyBub3Qgc3VwcG9ydCByZW5hbWluZyByZWZlcmVuY2VzIik7Cit9CisKK3N0YXRpYyBpbnQgcGFja2VkX2NvcHlfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCSAgIGNvbnN0IGNoYXIgKm9sZHJlZm5hbWUsIGNvbnN0IGNoYXIgKm5ld3JlZm5hbWUsCisJCQkgICBjb25zdCBjaGFyICpsb2dtc2cpCit7CisJQlVHKCJwYWNrZWQgcmVmZXJlbmNlIHN0b3JlIGRvZXMgbm90IHN1cHBvcnQgY29weWluZyByZWZlcmVuY2VzIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpwYWNrZWRfcmVmbG9nX2l0ZXJhdG9yX2JlZ2luKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSkKK3sKKwlyZXR1cm4gZW1wdHlfcmVmX2l0ZXJhdG9yX2JlZ2luKCk7Cit9CisKK3N0YXRpYyBpbnQgcGFja2VkX2Zvcl9lYWNoX3JlZmxvZ19lbnQoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJICAgICAgZWFjaF9yZWZsb2dfZW50X2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhY2tlZF9mb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2Uoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJCQkgICAgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCQkgICAgICBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sCisJCQkJCSAgICAgIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFja2VkX3JlZmxvZ19leGlzdHMoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFja2VkX2NyZWF0ZV9yZWZsb2coc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBmb3JjZV9jcmVhdGUsCisJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCUJVRygicGFja2VkIHJlZmVyZW5jZSBzdG9yZSBkb2VzIG5vdCBzdXBwb3J0IHJlZmxvZ3MiKTsKK30KKworc3RhdGljIGludCBwYWNrZWRfZGVsZXRlX3JlZmxvZyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkgICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWNrZWRfcmVmbG9nX2V4cGlyZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkJY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCXVuc2lnbmVkIGludCBmbGFncywKKwkJCQlyZWZsb2dfZXhwaXJ5X3ByZXBhcmVfZm4gcHJlcGFyZV9mbiwKKwkJCQlyZWZsb2dfZXhwaXJ5X3Nob3VsZF9wcnVuZV9mbiBzaG91bGRfcHJ1bmVfZm4sCisJCQkJcmVmbG9nX2V4cGlyeV9jbGVhbnVwX2ZuIGNsZWFudXBfZm4sCisJCQkJdm9pZCAqcG9saWN5X2NiX2RhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByZWZfc3RvcmFnZV9iZSByZWZzX2JlX3BhY2tlZCA9IHsKKwlOVUxMLAorCSJwYWNrZWQiLAorCXBhY2tlZF9yZWZfc3RvcmVfY3JlYXRlLAorCXBhY2tlZF9pbml0X2RiLAorCXBhY2tlZF90cmFuc2FjdGlvbl9wcmVwYXJlLAorCXBhY2tlZF90cmFuc2FjdGlvbl9maW5pc2gsCisJcGFja2VkX3RyYW5zYWN0aW9uX2Fib3J0LAorCXBhY2tlZF9pbml0aWFsX3RyYW5zYWN0aW9uX2NvbW1pdCwKKworCXBhY2tlZF9wYWNrX3JlZnMsCisJcGFja2VkX2NyZWF0ZV9zeW1yZWYsCisJcGFja2VkX2RlbGV0ZV9yZWZzLAorCXBhY2tlZF9yZW5hbWVfcmVmLAorCXBhY2tlZF9jb3B5X3JlZiwKKworCXBhY2tlZF9yZWZfaXRlcmF0b3JfYmVnaW4sCisJcGFja2VkX3JlYWRfcmF3X3JlZiwKKworCXBhY2tlZF9yZWZsb2dfaXRlcmF0b3JfYmVnaW4sCisJcGFja2VkX2Zvcl9lYWNoX3JlZmxvZ19lbnQsCisJcGFja2VkX2Zvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZSwKKwlwYWNrZWRfcmVmbG9nX2V4aXN0cywKKwlwYWNrZWRfY3JlYXRlX3JlZmxvZywKKwlwYWNrZWRfZGVsZXRlX3JlZmxvZywKKwlwYWNrZWRfcmVmbG9nX2V4cGlyZQorfTsKZGlmZiAtLWdpdCBhL3JlZnMvcGFja2VkLWJhY2tlbmQuaCBiL3JlZnMvcGFja2VkLWJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDFhMGFmCi0tLSAvZGV2L251bGwKKysrIGIvcmVmcy9wYWNrZWQtYmFja2VuZC5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgUkVGU19QQUNLRURfQkFDS0VORF9ICisjZGVmaW5lIFJFRlNfUEFDS0VEX0JBQ0tFTkRfSAorCitzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uOworCisvKgorICogU3VwcG9ydCBmb3Igc3RvcmluZyByZWZlcmVuY2VzIGluIGEgYHBhY2tlZC1yZWZzYCBmaWxlLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGJhY2tlbmQgZG9lc24ndCBjaGVjayBmb3IgRC9GIGNvbmZsaWN0cywgYmVjYXVzZSBpdAorICogZG9lc24ndCBjYXJlIGFib3V0IHRoZW0uIEJ1dCB1c3VhbGx5IGl0IHNob3VsZCBiZSB3cmFwcGVkIGluIGEKKyAqIGBmaWxlc19yZWZfc3RvcmVgIHRoYXQgcHJldmVudHMgRC9GIGNvbmZsaWN0cyBmcm9tIGJlaW5nIGNyZWF0ZWQsCisgKiBldmVuIGFtb25nIHBhY2tlZCByZWZzLgorICovCisKK3N0cnVjdCByZWZfc3RvcmUgKnBhY2tlZF9yZWZfc3RvcmVfY3JlYXRlKGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCSAgdW5zaWduZWQgaW50IHN0b3JlX2ZsYWdzKTsKKworLyoKKyAqIExvY2sgdGhlIHBhY2tlZC1yZWZzIGZpbGUgZm9yIHdyaXRpbmcuIEZsYWdzIGlzIHBhc3NlZCB0bworICogaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgpLiBSZXR1cm4gMCBvbiBzdWNjZXNzLiBPbiBlcnJvcnMsIHdyaXRlCisgKiBhbiBlcnJvciBtZXNzYWdlIHRvIGBlcnJgIGFuZCByZXR1cm4gYSBub256ZXJvIHZhbHVlLgorICovCitpbnQgcGFja2VkX3JlZnNfbG9jayhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsIGludCBmbGFncywgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKwordm9pZCBwYWNrZWRfcmVmc191bmxvY2soc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlKTsKK2ludCBwYWNrZWRfcmVmc19pc19sb2NrZWQoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlKTsKKworLyoKKyAqIFJldHVybiB0cnVlIGlmIGB0cmFuc2FjdGlvbmAgcmVhbGx5IG5lZWRzIHRvIGJlIGNhcnJpZWQgb3V0IGFnYWluc3QKKyAqIHRoZSBzcGVjaWZpZWQgcGFja2VkX3JlZl9zdG9yZSwgb3IgZmFsc2UgaWYgaXQgY2FuIGJlIHNraXBwZWQKKyAqIChpLmUuLCBiZWNhdXNlIGl0IGlzIGFuIG9idmlvdXMgTk9PUCkuIGByZWZfc3RvcmVgIG11c3QgYmUgbG9ja2VkCisgKiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICovCitpbnQgaXNfcGFja2VkX3RyYW5zYWN0aW9uX25lZWRlZChzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkJIHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uKTsKKworI2VuZGlmIC8qIFJFRlNfUEFDS0VEX0JBQ0tFTkRfSCAqLwpkaWZmIC0tZ2l0IGEvcmVmcy9yZWYtY2FjaGUuYyBiL3JlZnMvcmVmLWNhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcwNTJmNwotLS0gL2Rldi9udWxsCisrKyBiL3JlZnMvcmVmLWNhY2hlLmMKQEAgLTAsMCArMSw1NTEgQEAKKyNpbmNsdWRlICIuLi9jYWNoZS5oIgorI2luY2x1ZGUgIi4uL3JlZnMuaCIKKyNpbmNsdWRlICJyZWZzLWludGVybmFsLmgiCisjaW5jbHVkZSAicmVmLWNhY2hlLmgiCisjaW5jbHVkZSAiLi4vaXRlcmF0b3IuaCIKKwordm9pZCBhZGRfZW50cnlfdG9fZGlyKHN0cnVjdCByZWZfZGlyICpkaXIsIHN0cnVjdCByZWZfZW50cnkgKmVudHJ5KQoreworCUFMTE9DX0dST1coZGlyLT5lbnRyaWVzLCBkaXItPm5yICsgMSwgZGlyLT5hbGxvYyk7CisJZGlyLT5lbnRyaWVzW2Rpci0+bnIrK10gPSBlbnRyeTsKKwkvKiBvcHRpbWl6ZSBmb3IgdGhlIGNhc2UgdGhhdCBlbnRyaWVzIGFyZSBhZGRlZCBpbiBvcmRlciAqLworCWlmIChkaXItPm5yID09IDEgfHwKKwkgICAgKGRpci0+bnIgPT0gZGlyLT5zb3J0ZWQgKyAxICYmCisJICAgICBzdHJjbXAoZGlyLT5lbnRyaWVzW2Rpci0+bnIgLSAyXS0+bmFtZSwKKwkJICAgIGRpci0+ZW50cmllc1tkaXItPm5yIC0gMV0tPm5hbWUpIDwgMCkpCisJCWRpci0+c29ydGVkID0gZGlyLT5ucjsKK30KKworc3RydWN0IHJlZl9kaXIgKmdldF9yZWZfZGlyKHN0cnVjdCByZWZfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCByZWZfZGlyICpkaXI7CisJYXNzZXJ0KGVudHJ5LT5mbGFnICYgUkVGX0RJUik7CisJZGlyID0gJmVudHJ5LT51LnN1YmRpcjsKKwlpZiAoZW50cnktPmZsYWcgJiBSRUZfSU5DT01QTEVURSkgeworCQlpZiAoIWRpci0+Y2FjaGUtPmZpbGxfcmVmX2RpcikKKwkJCUJVRygiaW5jb21wbGV0ZSByZWZfc3RvcmUgd2l0aG91dCBmaWxsX3JlZl9kaXIgZnVuY3Rpb24iKTsKKworCQlkaXItPmNhY2hlLT5maWxsX3JlZl9kaXIoZGlyLT5jYWNoZS0+cmVmX3N0b3JlLCBkaXIsIGVudHJ5LT5uYW1lKTsKKwkJZW50cnktPmZsYWcgJj0gflJFRl9JTkNPTVBMRVRFOworCX0KKwlyZXR1cm4gZGlyOworfQorCitzdHJ1Y3QgcmVmX2VudHJ5ICpjcmVhdGVfcmVmX2VudHJ5KGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZykKK3sKKwlzdHJ1Y3QgcmVmX2VudHJ5ICpyZWY7CisKKwlGTEVYX0FMTE9DX1NUUihyZWYsIG5hbWUsIHJlZm5hbWUpOworCW9pZGNweSgmcmVmLT51LnZhbHVlLm9pZCwgb2lkKTsKKwlyZWYtPmZsYWcgPSBmbGFnOworCXJldHVybiByZWY7Cit9CisKK3N0cnVjdCByZWZfY2FjaGUgKmNyZWF0ZV9yZWZfY2FjaGUoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCQkgICBmaWxsX3JlZl9kaXJfZm4gKmZpbGxfcmVmX2RpcikKK3sKKwlzdHJ1Y3QgcmVmX2NhY2hlICpyZXQgPSB4Y2FsbG9jKDEsIHNpemVvZigqcmV0KSk7CisKKwlyZXQtPnJlZl9zdG9yZSA9IHJlZnM7CisJcmV0LT5maWxsX3JlZl9kaXIgPSBmaWxsX3JlZl9kaXI7CisJcmV0LT5yb290ID0gY3JlYXRlX2Rpcl9lbnRyeShyZXQsICIiLCAwLCAxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9yZWZfZGlyKHN0cnVjdCByZWZfZGlyICpkaXIpOworCitzdGF0aWMgdm9pZCBmcmVlX3JlZl9lbnRyeShzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSkKK3sKKwlpZiAoZW50cnktPmZsYWcgJiBSRUZfRElSKSB7CisJCS8qCisJCSAqIERvIG5vdCB1c2UgZ2V0X3JlZl9kaXIoKSBoZXJlLCBhcyB0aGF0IG1pZ2h0CisJCSAqIHRyaWdnZXIgdGhlIHJlYWRpbmcgb2YgbG9vc2UgcmVmcy4KKwkJICovCisJCWNsZWFyX3JlZl9kaXIoJmVudHJ5LT51LnN1YmRpcik7CisJfQorCWZyZWUoZW50cnkpOworfQorCit2b2lkIGZyZWVfcmVmX2NhY2hlKHN0cnVjdCByZWZfY2FjaGUgKmNhY2hlKQoreworCWZyZWVfcmVmX2VudHJ5KGNhY2hlLT5yb290KTsKKwlmcmVlKGNhY2hlKTsKK30KKworLyoKKyAqIENsZWFyIGFuZCBmcmVlIGFsbCBlbnRyaWVzIGluIGRpciwgcmVjdXJzaXZlbHkuCisgKi8KK3N0YXRpYyB2b2lkIGNsZWFyX3JlZl9kaXIoc3RydWN0IHJlZl9kaXIgKmRpcikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLT5ucjsgaSsrKQorCQlmcmVlX3JlZl9lbnRyeShkaXItPmVudHJpZXNbaV0pOworCUZSRUVfQU5EX05VTEwoZGlyLT5lbnRyaWVzKTsKKwlkaXItPnNvcnRlZCA9IGRpci0+bnIgPSBkaXItPmFsbG9jID0gMDsKK30KKworc3RydWN0IHJlZl9lbnRyeSAqY3JlYXRlX2Rpcl9lbnRyeShzdHJ1Y3QgcmVmX2NhY2hlICpjYWNoZSwKKwkJCQkgICBjb25zdCBjaGFyICpkaXJuYW1lLCBzaXplX3QgbGVuLAorCQkJCSAgIGludCBpbmNvbXBsZXRlKQoreworCXN0cnVjdCByZWZfZW50cnkgKmRpcmVudHJ5OworCisJRkxFWF9BTExPQ19NRU0oZGlyZW50cnksIG5hbWUsIGRpcm5hbWUsIGxlbik7CisJZGlyZW50cnktPnUuc3ViZGlyLmNhY2hlID0gY2FjaGU7CisJZGlyZW50cnktPmZsYWcgPSBSRUZfRElSIHwgKGluY29tcGxldGUgPyBSRUZfSU5DT01QTEVURSA6IDApOworCXJldHVybiBkaXJlbnRyeTsKK30KKworc3RhdGljIGludCByZWZfZW50cnlfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJc3RydWN0IHJlZl9lbnRyeSAqb25lID0gKihzdHJ1Y3QgcmVmX2VudHJ5ICoqKWE7CisJc3RydWN0IHJlZl9lbnRyeSAqdHdvID0gKihzdHJ1Y3QgcmVmX2VudHJ5ICoqKWI7CisJcmV0dXJuIHN0cmNtcChvbmUtPm5hbWUsIHR3by0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNvcnRfcmVmX2RpcihzdHJ1Y3QgcmVmX2RpciAqZGlyKTsKKworc3RydWN0IHN0cmluZ19zbGljZSB7CisJc2l6ZV90IGxlbjsKKwljb25zdCBjaGFyICpzdHI7Cit9OworCitzdGF0aWMgaW50IHJlZl9lbnRyeV9jbXBfc3NsaWNlKGNvbnN0IHZvaWQgKmtleV8sIGNvbnN0IHZvaWQgKmVudF8pCit7CisJY29uc3Qgc3RydWN0IHN0cmluZ19zbGljZSAqa2V5ID0ga2V5XzsKKwljb25zdCBzdHJ1Y3QgcmVmX2VudHJ5ICplbnQgPSAqKGNvbnN0IHN0cnVjdCByZWZfZW50cnkgKiBjb25zdCAqKWVudF87CisJaW50IGNtcCA9IHN0cm5jbXAoa2V5LT5zdHIsIGVudC0+bmFtZSwga2V5LT5sZW4pOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisJcmV0dXJuICdcMCcgLSAodW5zaWduZWQgY2hhcillbnQtPm5hbWVba2V5LT5sZW5dOworfQorCitpbnQgc2VhcmNoX3JlZl9kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwgY29uc3QgY2hhciAqcmVmbmFtZSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgcmVmX2VudHJ5ICoqcjsKKwlzdHJ1Y3Qgc3RyaW5nX3NsaWNlIGtleTsKKworCWlmIChyZWZuYW1lID09IE5VTEwgfHwgIWRpci0+bnIpCisJCXJldHVybiAtMTsKKworCXNvcnRfcmVmX2RpcihkaXIpOworCWtleS5sZW4gPSBsZW47CisJa2V5LnN0ciA9IHJlZm5hbWU7CisJciA9IGJzZWFyY2goJmtleSwgZGlyLT5lbnRyaWVzLCBkaXItPm5yLCBzaXplb2YoKmRpci0+ZW50cmllcyksCisJCSAgICByZWZfZW50cnlfY21wX3NzbGljZSk7CisKKwlpZiAociA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gciAtIGRpci0+ZW50cmllczsKK30KKworLyoKKyAqIFNlYXJjaCBmb3IgYSBkaXJlY3RvcnkgZW50cnkgZGlyZWN0bHkgd2l0aGluIGRpciAod2l0aG91dAorICogcmVjdXJzaW5nKS4gIFNvcnQgZGlyIGlmIG5lY2Vzc2FyeS4gIHN1YmRpcm5hbWUgbXVzdCBiZSBhIGRpcmVjdG9yeQorICogbmFtZSAoaS5lLiwgZW5kIGluICcvJykuICBJZiBta2RpciBpcyBzZXQsIHRoZW4gY3JlYXRlIHRoZQorICogZGlyZWN0b3J5IGlmIGl0IGlzIG1pc3Npbmc7IG90aGVyd2lzZSwgcmV0dXJuIE5VTEwgaWYgdGhlIGRlc2lyZWQKKyAqIGRpcmVjdG9yeSBjYW5ub3QgYmUgZm91bmQuICBkaXIgbXVzdCBhbHJlYWR5IGJlIGNvbXBsZXRlLgorICovCitzdGF0aWMgc3RydWN0IHJlZl9kaXIgKnNlYXJjaF9mb3Jfc3ViZGlyKHN0cnVjdCByZWZfZGlyICpkaXIsCisJCQkJCSBjb25zdCBjaGFyICpzdWJkaXJuYW1lLCBzaXplX3QgbGVuLAorCQkJCQkgaW50IG1rZGlyKQoreworCWludCBlbnRyeV9pbmRleCA9IHNlYXJjaF9yZWZfZGlyKGRpciwgc3ViZGlybmFtZSwgbGVuKTsKKwlzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeTsKKwlpZiAoZW50cnlfaW5kZXggPT0gLTEpIHsKKwkJaWYgKCFta2RpcikKKwkJCXJldHVybiBOVUxMOworCQkvKgorCQkgKiBTaW5jZSBkaXIgaXMgY29tcGxldGUsIHRoZSBhYnNlbmNlIG9mIGEgc3ViZGlyCisJCSAqIG1lYW5zIHRoYXQgdGhlIHN1YmRpciByZWFsbHkgZG9lc24ndCBleGlzdDsKKwkJICogdGhlcmVmb3JlLCBjcmVhdGUgYW4gZW1wdHkgcmVjb3JkIGZvciBpdCBidXQgbWFyaworCQkgKiB0aGUgcmVjb3JkIGNvbXBsZXRlLgorCQkgKi8KKwkJZW50cnkgPSBjcmVhdGVfZGlyX2VudHJ5KGRpci0+Y2FjaGUsIHN1YmRpcm5hbWUsIGxlbiwgMCk7CisJCWFkZF9lbnRyeV90b19kaXIoZGlyLCBlbnRyeSk7CisJfSBlbHNlIHsKKwkJZW50cnkgPSBkaXItPmVudHJpZXNbZW50cnlfaW5kZXhdOworCX0KKwlyZXR1cm4gZ2V0X3JlZl9kaXIoZW50cnkpOworfQorCisvKgorICogSWYgcmVmbmFtZSBpcyBhIHJlZmVyZW5jZSBuYW1lLCBmaW5kIHRoZSByZWZfZGlyIHdpdGhpbiB0aGUgZGlyCisgKiB0cmVlIHRoYXQgc2hvdWxkIGhvbGQgcmVmbmFtZS4gSWYgcmVmbmFtZSBpcyBhIGRpcmVjdG9yeSBuYW1lCisgKiAoaS5lLiwgaXQgZW5kcyBpbiAnLycpLCB0aGVuIHJldHVybiB0aGF0IHJlZl9kaXIgaXRzZWxmLiBkaXIgbXVzdAorICogcmVwcmVzZW50IHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IGFuZCBtdXN0IGFscmVhZHkgYmUgY29tcGxldGUuCisgKiBTb3J0IHJlZl9kaXJzIGFuZCByZWN1cnNlIGludG8gc3ViZGlyZWN0b3JpZXMgYXMgbmVjZXNzYXJ5LiBJZgorICogbWtkaXIgaXMgc2V0LCB0aGVuIGNyZWF0ZSBhbnkgbWlzc2luZyBkaXJlY3Rvcmllczsgb3RoZXJ3aXNlLAorICogcmV0dXJuIE5VTEwgaWYgdGhlIGRlc2lyZWQgZGlyZWN0b3J5IGNhbm5vdCBiZSBmb3VuZC4KKyAqLworc3RhdGljIHN0cnVjdCByZWZfZGlyICpmaW5kX2NvbnRhaW5pbmdfZGlyKHN0cnVjdCByZWZfZGlyICpkaXIsCisJCQkJCSAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBta2RpcikKK3sKKwljb25zdCBjaGFyICpzbGFzaDsKKwlmb3IgKHNsYXNoID0gc3RyY2hyKHJlZm5hbWUsICcvJyk7IHNsYXNoOyBzbGFzaCA9IHN0cmNocihzbGFzaCArIDEsICcvJykpIHsKKwkJc2l6ZV90IGRpcm5hbWVsZW4gPSBzbGFzaCAtIHJlZm5hbWUgKyAxOworCQlzdHJ1Y3QgcmVmX2RpciAqc3ViZGlyOworCQlzdWJkaXIgPSBzZWFyY2hfZm9yX3N1YmRpcihkaXIsIHJlZm5hbWUsIGRpcm5hbWVsZW4sIG1rZGlyKTsKKwkJaWYgKCFzdWJkaXIpIHsKKwkJCWRpciA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQlkaXIgPSBzdWJkaXI7CisJfQorCisJcmV0dXJuIGRpcjsKK30KKworc3RydWN0IHJlZl9lbnRyeSAqZmluZF9yZWZfZW50cnkoc3RydWN0IHJlZl9kaXIgKmRpciwgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlpbnQgZW50cnlfaW5kZXg7CisJc3RydWN0IHJlZl9lbnRyeSAqZW50cnk7CisJZGlyID0gZmluZF9jb250YWluaW5nX2RpcihkaXIsIHJlZm5hbWUsIDApOworCWlmICghZGlyKQorCQlyZXR1cm4gTlVMTDsKKwllbnRyeV9pbmRleCA9IHNlYXJjaF9yZWZfZGlyKGRpciwgcmVmbmFtZSwgc3RybGVuKHJlZm5hbWUpKTsKKwlpZiAoZW50cnlfaW5kZXggPT0gLTEpCisJCXJldHVybiBOVUxMOworCWVudHJ5ID0gZGlyLT5lbnRyaWVzW2VudHJ5X2luZGV4XTsKKwlyZXR1cm4gKGVudHJ5LT5mbGFnICYgUkVGX0RJUikgPyBOVUxMIDogZW50cnk7Cit9CisKK2ludCByZW1vdmVfZW50cnlfZnJvbV9kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlpbnQgcmVmbmFtZV9sZW4gPSBzdHJsZW4ocmVmbmFtZSk7CisJaW50IGVudHJ5X2luZGV4OworCXN0cnVjdCByZWZfZW50cnkgKmVudHJ5OworCWludCBpc19kaXIgPSByZWZuYW1lW3JlZm5hbWVfbGVuIC0gMV0gPT0gJy8nOworCWlmIChpc19kaXIpIHsKKwkJLyoKKwkJICogcmVmbmFtZSByZXByZXNlbnRzIGEgcmVmZXJlbmNlIGRpcmVjdG9yeS4gIFJlbW92ZQorCQkgKiB0aGUgdHJhaWxpbmcgc2xhc2g7IG90aGVyd2lzZSB3ZSB3aWxsIGdldCB0aGUKKwkJICogZGlyZWN0b3J5ICpyZXByZXNlbnRpbmcqIHJlZm5hbWUgcmF0aGVyIHRoYW4gdGhlCisJCSAqIG9uZSAqY29udGFpbmluZyogaXQuCisJCSAqLworCQljaGFyICpkaXJuYW1lID0geG1lbWR1cHoocmVmbmFtZSwgcmVmbmFtZV9sZW4gLSAxKTsKKwkJZGlyID0gZmluZF9jb250YWluaW5nX2RpcihkaXIsIGRpcm5hbWUsIDApOworCQlmcmVlKGRpcm5hbWUpOworCX0gZWxzZSB7CisJCWRpciA9IGZpbmRfY29udGFpbmluZ19kaXIoZGlyLCByZWZuYW1lLCAwKTsKKwl9CisJaWYgKCFkaXIpCisJCXJldHVybiAtMTsKKwllbnRyeV9pbmRleCA9IHNlYXJjaF9yZWZfZGlyKGRpciwgcmVmbmFtZSwgcmVmbmFtZV9sZW4pOworCWlmIChlbnRyeV9pbmRleCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCWVudHJ5ID0gZGlyLT5lbnRyaWVzW2VudHJ5X2luZGV4XTsKKworCU1PVkVfQVJSQVkoJmRpci0+ZW50cmllc1tlbnRyeV9pbmRleF0sCisJCSAgICZkaXItPmVudHJpZXNbZW50cnlfaW5kZXggKyAxXSwgZGlyLT5uciAtIGVudHJ5X2luZGV4IC0gMSk7CisJZGlyLT5uci0tOworCWlmIChkaXItPnNvcnRlZCA+IGVudHJ5X2luZGV4KQorCQlkaXItPnNvcnRlZC0tOworCWZyZWVfcmVmX2VudHJ5KGVudHJ5KTsKKwlyZXR1cm4gZGlyLT5ucjsKK30KKworaW50IGFkZF9yZWZfZW50cnkoc3RydWN0IHJlZl9kaXIgKmRpciwgc3RydWN0IHJlZl9lbnRyeSAqcmVmKQoreworCWRpciA9IGZpbmRfY29udGFpbmluZ19kaXIoZGlyLCByZWYtPm5hbWUsIDEpOworCWlmICghZGlyKQorCQlyZXR1cm4gLTE7CisJYWRkX2VudHJ5X3RvX2RpcihkaXIsIHJlZik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBFbWl0IGEgd2FybmluZyBhbmQgcmV0dXJuIHRydWUgaWZmIHJlZjEgYW5kIHJlZjIgaGF2ZSB0aGUgc2FtZSBuYW1lCisgKiBhbmQgdGhlIHNhbWUgb2lkLiBEaWUgaWYgdGhleSBoYXZlIHRoZSBzYW1lIG5hbWUgYnV0IGRpZmZlcmVudAorICogb2lkcy4KKyAqLworc3RhdGljIGludCBpc19kdXBfcmVmKGNvbnN0IHN0cnVjdCByZWZfZW50cnkgKnJlZjEsIGNvbnN0IHN0cnVjdCByZWZfZW50cnkgKnJlZjIpCit7CisJaWYgKHN0cmNtcChyZWYxLT5uYW1lLCByZWYyLT5uYW1lKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBEdXBsaWNhdGUgbmFtZTsgbWFrZSBzdXJlIHRoYXQgdGhleSBkb24ndCBjb25mbGljdDogKi8KKworCWlmICgocmVmMS0+ZmxhZyAmIFJFRl9ESVIpIHx8IChyZWYyLT5mbGFnICYgUkVGX0RJUikpCisJCS8qIFRoaXMgaXMgaW1wb3NzaWJsZSBieSBjb25zdHJ1Y3Rpb24gKi8KKwkJZGllKCJSZWZlcmVuY2UgZGlyZWN0b3J5IGNvbmZsaWN0OiAlcyIsIHJlZjEtPm5hbWUpOworCisJaWYgKCFvaWRlcSgmcmVmMS0+dS52YWx1ZS5vaWQsICZyZWYyLT51LnZhbHVlLm9pZCkpCisJCWRpZSgiRHVwbGljYXRlZCByZWYsIGFuZCBTSEExcyBkb24ndCBtYXRjaDogJXMiLCByZWYxLT5uYW1lKTsKKworCXdhcm5pbmcoIkR1cGxpY2F0ZWQgcmVmOiAlcyIsIHJlZjEtPm5hbWUpOworCXJldHVybiAxOworfQorCisvKgorICogU29ydCB0aGUgZW50cmllcyBpbiBkaXIgbm9uLXJlY3Vyc2l2ZWx5IChpZiB0aGV5IGFyZSBub3QgYWxyZWFkeQorICogc29ydGVkKSBhbmQgcmVtb3ZlIGFueSBkdXBsaWNhdGUgZW50cmllcy4KKyAqLworc3RhdGljIHZvaWQgc29ydF9yZWZfZGlyKHN0cnVjdCByZWZfZGlyICpkaXIpCit7CisJaW50IGksIGo7CisJc3RydWN0IHJlZl9lbnRyeSAqbGFzdCA9IE5VTEw7CisKKwkvKgorCSAqIFRoaXMgY2hlY2sgYWxzbyBwcmV2ZW50cyBwYXNzaW5nIGEgemVyby1sZW5ndGggYXJyYXkgdG8gcXNvcnQoKSwKKwkgKiB3aGljaCBpcyBhIHByb2JsZW0gb24gc29tZSBwbGF0Zm9ybXMuCisJICovCisJaWYgKGRpci0+c29ydGVkID09IGRpci0+bnIpCisJCXJldHVybjsKKworCVFTT1JUKGRpci0+ZW50cmllcywgZGlyLT5uciwgcmVmX2VudHJ5X2NtcCk7CisKKwkvKiBSZW1vdmUgYW55IGR1cGxpY2F0ZXM6ICovCisJZm9yIChpID0gMCwgaiA9IDA7IGogPCBkaXItPm5yOyBqKyspIHsKKwkJc3RydWN0IHJlZl9lbnRyeSAqZW50cnkgPSBkaXItPmVudHJpZXNbal07CisJCWlmIChsYXN0ICYmIGlzX2R1cF9yZWYobGFzdCwgZW50cnkpKQorCQkJZnJlZV9yZWZfZW50cnkoZW50cnkpOworCQllbHNlCisJCQlsYXN0ID0gZGlyLT5lbnRyaWVzW2krK10gPSBlbnRyeTsKKwl9CisJZGlyLT5zb3J0ZWQgPSBkaXItPm5yID0gaTsKK30KKworZW51bSBwcmVmaXhfc3RhdGUgeworCS8qIEFsbCByZWZzIHdpdGhpbiB0aGUgZGlyZWN0b3J5IHdvdWxkIG1hdGNoIHByZWZpeDogKi8KKwlQUkVGSVhfQ09OVEFJTlNfRElSLAorCisJLyogU29tZSwgYnV0IG5vdCBhbGwsIHJlZnMgd2l0aGluIHRoZSBkaXJlY3RvcnkgbWlnaHQgbWF0Y2ggcHJlZml4OiAqLworCVBSRUZJWF9XSVRISU5fRElSLAorCisJLyogTm8gcmVmcyB3aXRoaW4gdGhlIGRpcmVjdG9yeSBjb3VsZCBwb3NzaWJseSBtYXRjaCBwcmVmaXg6ICovCisJUFJFRklYX0VYQ0xVREVTX0RJUgorfTsKKworLyoKKyAqIFJldHVybiBhIGBwcmVmaXhfc3RhdGVgIGNvbnN0YW50IGRlc2NyaWJpbmcgdGhlIHJlbGF0aW9uc2hpcAorICogYmV0d2VlbiB0aGUgZGlyZWN0b3J5IHdpdGggdGhlIHNwZWNpZmllZCBgZGlybmFtZWAgYW5kIGBwcmVmaXhgLgorICovCitzdGF0aWMgZW51bSBwcmVmaXhfc3RhdGUgb3ZlcmxhcHNfcHJlZml4KGNvbnN0IGNoYXIgKmRpcm5hbWUsCisJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJd2hpbGUgKCpwcmVmaXggJiYgKmRpcm5hbWUgPT0gKnByZWZpeCkgeworCQlkaXJuYW1lKys7CisJCXByZWZpeCsrOworCX0KKwlpZiAoISpwcmVmaXgpCisJCXJldHVybiBQUkVGSVhfQ09OVEFJTlNfRElSOworCWVsc2UgaWYgKCEqZGlybmFtZSkKKwkJcmV0dXJuIFBSRUZJWF9XSVRISU5fRElSOworCWVsc2UKKwkJcmV0dXJuIFBSRUZJWF9FWENMVURFU19ESVI7Cit9CisKKy8qCisgKiBMb2FkIGFsbCBvZiB0aGUgcmVmcyBmcm9tIGBkaXJgIChyZWN1cnNpdmVseSkgdGhhdCBjb3VsZCBwb3NzaWJseQorICogY29udGFpbiByZWZlcmVuY2VzIG1hdGNoaW5nIGBwcmVmaXhgIGludG8gb3VyIGluLW1lbW9yeSBjYWNoZS4gSWYKKyAqIGBwcmVmaXhgIGlzIE5VTEwsIHByaW1lIHVuY29uZGl0aW9uYWxseS4KKyAqLworc3RhdGljIHZvaWQgcHJpbWVfcmVmX2RpcihzdHJ1Y3QgcmVmX2RpciAqZGlyLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJLyoKKwkgKiBUaGUgaGFyZCB3b3JrIG9mIGxvYWRpbmcgbG9vc2UgcmVmcyBpcyBkb25lIGJ5IGdldF9yZWZfZGlyKCksIHNvIHdlCisJICoganVzdCBuZWVkIHRvIHJlY3Vyc2UgdGhyb3VnaCBhbGwgb2YgdGhlIHN1Yi1kaXJlY3Rvcmllcy4gV2UgZG8gbm90CisJICogZXZlbiBuZWVkIHRvIGNhcmUgYWJvdXQgc29ydGluZywgYXMgdHJhdmVyc2FsIG9yZGVyIGRvZXMgbm90IG1hdHRlcgorCSAqIHRvIHVzLgorCSAqLworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl9lbnRyeSAqZW50cnkgPSBkaXItPmVudHJpZXNbaV07CisJCWlmICghKGVudHJ5LT5mbGFnICYgUkVGX0RJUikpIHsKKwkJCS8qIE5vdCBhIGRpcmVjdG9yeTsgbm8gbmVlZCB0byByZWN1cnNlLiAqLworCQl9IGVsc2UgaWYgKCFwcmVmaXgpIHsKKwkJCS8qIFJlY3Vyc2UgaW4gYW55IGNhc2U6ICovCisJCQlwcmltZV9yZWZfZGlyKGdldF9yZWZfZGlyKGVudHJ5KSwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKG92ZXJsYXBzX3ByZWZpeChlbnRyeS0+bmFtZSwgcHJlZml4KSkgeworCQkJY2FzZSBQUkVGSVhfQ09OVEFJTlNfRElSOgorCQkJCS8qCisJCQkJICogUmVjdXJzZSwgYW5kIGZyb20gaGVyZSBkb3duIHdlCisJCQkJICogZG9uJ3QgaGF2ZSB0byBjaGVjayB0aGUgcHJlZml4CisJCQkJICogYW55bW9yZToKKwkJCQkgKi8KKwkJCQlwcmltZV9yZWZfZGlyKGdldF9yZWZfZGlyKGVudHJ5KSwgTlVMTCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBSRUZJWF9XSVRISU5fRElSOgorCQkJCXByaW1lX3JlZl9kaXIoZ2V0X3JlZl9kaXIoZW50cnkpLCBwcmVmaXgpOworCQkJCWJyZWFrOworCQkJY2FzZSBQUkVGSVhfRVhDTFVERVNfRElSOgorCQkJCS8qIE5vIG5lZWQgdG8gcHJpbWUgdGhpcyBkaXJlY3RvcnkuICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qCisgKiBBIGxldmVsIGluIHRoZSByZWZlcmVuY2UgaGllcmFyY2h5IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGl0ZXJhdGVkCisgKiB0aHJvdWdoLgorICovCitzdHJ1Y3QgY2FjaGVfcmVmX2l0ZXJhdG9yX2xldmVsIHsKKwkvKgorCSAqIFRoZSByZWZfZGlyIGJlaW5nIGl0ZXJhdGVkIG92ZXIgYXQgdGhpcyBsZXZlbC4gVGhlIHJlZl9kaXIKKwkgKiBpcyBzb3J0ZWQgYmVmb3JlIGJlaW5nIHN0b3JlZCBoZXJlLgorCSAqLworCXN0cnVjdCByZWZfZGlyICpkaXI7CisKKwllbnVtIHByZWZpeF9zdGF0ZSBwcmVmaXhfc3RhdGU7CisKKwkvKgorCSAqIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBlbnRyeSB3aXRoaW4gZGlyICh3aGljaCBtaWdodAorCSAqIGl0c2VsZiBiZSBhIGRpcmVjdG9yeSkuIElmIGluZGV4ID09IC0xLCB0aGVuIHRoZSBpdGVyYXRpb24KKwkgKiBoYXNuJ3QgeWV0IGJlZ3VuLiBJZiBpbmRleCA9PSBkaXItPm5yLCB0aGVuIHRoZSBpdGVyYXRpb24KKwkgKiB0aHJvdWdoIHRoaXMgbGV2ZWwgaXMgb3Zlci4KKwkgKi8KKwlpbnQgaW5kZXg7Cit9OworCisvKgorICogUmVwcmVzZW50IGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgcmVmX2RpciBpbiB0aGUgbWVtb3J5IGNhY2hlLiBUaGUKKyAqIGl0ZXJhdGlvbiByZWN1cnNlcyB0aHJvdWdoIHN1YmRpcmVjdG9yaWVzLgorICovCitzdHJ1Y3QgY2FjaGVfcmVmX2l0ZXJhdG9yIHsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yIGJhc2U7CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgbGV2ZWxzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2suIFRoaXMgaXMgYWx3YXlzCisJICogYXQgbGVhc3QgMSwgYmVjYXVzZSB3aGVuIGl0IGJlY29tZXMgemVybyB0aGUgaXRlcmF0aW9uIGlzCisJICogZW5kZWQgYW5kIHRoaXMgc3RydWN0IGlzIGZyZWVkLgorCSAqLworCXNpemVfdCBsZXZlbHNfbnI7CisKKwkvKiBUaGUgbnVtYmVyIG9mIGxldmVscyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrICovCisJc2l6ZV90IGxldmVsc19hbGxvYzsKKworCS8qCisJICogT25seSBpbmNsdWRlIHJlZmVyZW5jZXMgd2l0aCB0aGlzIHByZWZpeCBpbiB0aGUgaXRlcmF0aW9uLgorCSAqIFRoZSBwcmVmaXggaXMgbWF0Y2hlZCB0ZXh0dWFsbHksIHdpdGhvdXQgcmVnYXJkIGZvciBwYXRoCisJICogY29tcG9uZW50IGJvdW5kYXJpZXMuCisJICovCisJY29uc3QgY2hhciAqcHJlZml4OworCisJLyoKKwkgKiBBIHN0YWNrIG9mIGxldmVscy4gbGV2ZWxzWzBdIGlzIHRoZSB1cHBlcm1vc3QgbGV2ZWwgdGhhdCBpcworCSAqIGJlaW5nIGl0ZXJhdGVkIG92ZXIgaW4gdGhpcyBpdGVyYXRpb24uIChUaGlzIGlzIG5vdAorCSAqIG5lY2Vzc2FyeSB0aGUgdG9wIGxldmVsIGluIHRoZSByZWZlcmVuY2VzIGhpZXJhcmNoeS4gSWYgd2UKKwkgKiBhcmUgaXRlcmF0aW5nIHRocm91Z2ggYSBzdWJ0cmVlLCB0aGVuIGxldmVsc1swXSB3aWxsIGhvbGQKKwkgKiB0aGUgcmVmX2RpciBmb3IgdGhhdCBzdWJ0cmVlLCBhbmQgc3Vic2VxdWVudCBsZXZlbHMgd2lsbCBnbworCSAqIG9uIGZyb20gdGhlcmUuKQorCSAqLworCXN0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3JfbGV2ZWwgKmxldmVsczsKK307CisKK3N0YXRpYyBpbnQgY2FjaGVfcmVmX2l0ZXJhdG9yX2FkdmFuY2Uoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKQoreworCXN0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3IgKml0ZXIgPQorCQkoc3RydWN0IGNhY2hlX3JlZl9pdGVyYXRvciAqKXJlZl9pdGVyYXRvcjsKKworCXdoaWxlICgxKSB7CisJCXN0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3JfbGV2ZWwgKmxldmVsID0KKwkJCSZpdGVyLT5sZXZlbHNbaXRlci0+bGV2ZWxzX25yIC0gMV07CisJCXN0cnVjdCByZWZfZGlyICpkaXIgPSBsZXZlbC0+ZGlyOworCQlzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeTsKKwkJZW51bSBwcmVmaXhfc3RhdGUgZW50cnlfcHJlZml4X3N0YXRlOworCisJCWlmIChsZXZlbC0+aW5kZXggPT0gLTEpCisJCQlzb3J0X3JlZl9kaXIoZGlyKTsKKworCQlpZiAoKytsZXZlbC0+aW5kZXggPT0gbGV2ZWwtPmRpci0+bnIpIHsKKwkJCS8qIFRoaXMgbGV2ZWwgaXMgZXhoYXVzdGVkOyBwb3AgdXAgYSBsZXZlbCAqLworCQkJaWYgKC0taXRlci0+bGV2ZWxzX25yID09IDApCisJCQkJcmV0dXJuIHJlZl9pdGVyYXRvcl9hYm9ydChyZWZfaXRlcmF0b3IpOworCisJCQljb250aW51ZTsKKwkJfQorCisJCWVudHJ5ID0gZGlyLT5lbnRyaWVzW2xldmVsLT5pbmRleF07CisKKwkJaWYgKGxldmVsLT5wcmVmaXhfc3RhdGUgPT0gUFJFRklYX1dJVEhJTl9ESVIpIHsKKwkJCWVudHJ5X3ByZWZpeF9zdGF0ZSA9IG92ZXJsYXBzX3ByZWZpeChlbnRyeS0+bmFtZSwgaXRlci0+cHJlZml4KTsKKwkJCWlmIChlbnRyeV9wcmVmaXhfc3RhdGUgPT0gUFJFRklYX0VYQ0xVREVTX0RJUikKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWVudHJ5X3ByZWZpeF9zdGF0ZSA9IGxldmVsLT5wcmVmaXhfc3RhdGU7CisJCX0KKworCQlpZiAoZW50cnktPmZsYWcgJiBSRUZfRElSKSB7CisJCQkvKiBwdXNoIGRvd24gYSBsZXZlbCAqLworCQkJQUxMT0NfR1JPVyhpdGVyLT5sZXZlbHMsIGl0ZXItPmxldmVsc19uciArIDEsCisJCQkJICAgaXRlci0+bGV2ZWxzX2FsbG9jKTsKKworCQkJbGV2ZWwgPSAmaXRlci0+bGV2ZWxzW2l0ZXItPmxldmVsc19ucisrXTsKKwkJCWxldmVsLT5kaXIgPSBnZXRfcmVmX2RpcihlbnRyeSk7CisJCQlsZXZlbC0+cHJlZml4X3N0YXRlID0gZW50cnlfcHJlZml4X3N0YXRlOworCQkJbGV2ZWwtPmluZGV4ID0gLTE7CisJCX0gZWxzZSB7CisJCQlpdGVyLT5iYXNlLnJlZm5hbWUgPSBlbnRyeS0+bmFtZTsKKwkJCWl0ZXItPmJhc2Uub2lkID0gJmVudHJ5LT51LnZhbHVlLm9pZDsKKwkJCWl0ZXItPmJhc2UuZmxhZ3MgPSBlbnRyeS0+ZmxhZzsKKwkJCXJldHVybiBJVEVSX09LOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGNhY2hlX3JlZl9pdGVyYXRvcl9wZWVsKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvciwKKwkJCQkgICBzdHJ1Y3Qgb2JqZWN0X2lkICpwZWVsZWQpCit7CisJcmV0dXJuIHBlZWxfb2JqZWN0KHJlZl9pdGVyYXRvci0+b2lkLCBwZWVsZWQpOworfQorCitzdGF0aWMgaW50IGNhY2hlX3JlZl9pdGVyYXRvcl9hYm9ydChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJc3RydWN0IGNhY2hlX3JlZl9pdGVyYXRvciAqaXRlciA9CisJCShzdHJ1Y3QgY2FjaGVfcmVmX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOworCisJZnJlZSgoY2hhciAqKWl0ZXItPnByZWZpeCk7CisJZnJlZShpdGVyLT5sZXZlbHMpOworCWJhc2VfcmVmX2l0ZXJhdG9yX2ZyZWUocmVmX2l0ZXJhdG9yKTsKKwlyZXR1cm4gSVRFUl9ET05FOworfQorCitzdGF0aWMgc3RydWN0IHJlZl9pdGVyYXRvcl92dGFibGUgY2FjaGVfcmVmX2l0ZXJhdG9yX3Z0YWJsZSA9IHsKKwljYWNoZV9yZWZfaXRlcmF0b3JfYWR2YW5jZSwKKwljYWNoZV9yZWZfaXRlcmF0b3JfcGVlbCwKKwljYWNoZV9yZWZfaXRlcmF0b3JfYWJvcnQKK307CisKK3N0cnVjdCByZWZfaXRlcmF0b3IgKmNhY2hlX3JlZl9pdGVyYXRvcl9iZWdpbihzdHJ1Y3QgcmVmX2NhY2hlICpjYWNoZSwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkgICAgICBpbnQgcHJpbWVfZGlyKQoreworCXN0cnVjdCByZWZfZGlyICpkaXI7CisJc3RydWN0IGNhY2hlX3JlZl9pdGVyYXRvciAqaXRlcjsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3I7CisJc3RydWN0IGNhY2hlX3JlZl9pdGVyYXRvcl9sZXZlbCAqbGV2ZWw7CisKKwlkaXIgPSBnZXRfcmVmX2RpcihjYWNoZS0+cm9vdCk7CisJaWYgKHByZWZpeCAmJiAqcHJlZml4KQorCQlkaXIgPSBmaW5kX2NvbnRhaW5pbmdfZGlyKGRpciwgcHJlZml4LCAwKTsKKwlpZiAoIWRpcikKKwkJLyogVGhlcmUncyBub3RoaW5nIHRvIGl0ZXJhdGUgb3Zlci4gKi8KKwkJcmV0dXJuIGVtcHR5X3JlZl9pdGVyYXRvcl9iZWdpbigpOworCisJaWYgKHByaW1lX2RpcikKKwkJcHJpbWVfcmVmX2RpcihkaXIsIHByZWZpeCk7CisKKwlpdGVyID0geGNhbGxvYygxLCBzaXplb2YoKml0ZXIpKTsKKwlyZWZfaXRlcmF0b3IgPSAmaXRlci0+YmFzZTsKKwliYXNlX3JlZl9pdGVyYXRvcl9pbml0KHJlZl9pdGVyYXRvciwgJmNhY2hlX3JlZl9pdGVyYXRvcl92dGFibGUsIDEpOworCUFMTE9DX0dST1coaXRlci0+bGV2ZWxzLCAxMCwgaXRlci0+bGV2ZWxzX2FsbG9jKTsKKworCWl0ZXItPmxldmVsc19uciA9IDE7CisJbGV2ZWwgPSAmaXRlci0+bGV2ZWxzWzBdOworCWxldmVsLT5pbmRleCA9IC0xOworCWxldmVsLT5kaXIgPSBkaXI7CisKKwlpZiAocHJlZml4ICYmICpwcmVmaXgpIHsKKwkJaXRlci0+cHJlZml4ID0geHN0cmR1cChwcmVmaXgpOworCQlsZXZlbC0+cHJlZml4X3N0YXRlID0gUFJFRklYX1dJVEhJTl9ESVI7CisJfSBlbHNlIHsKKwkJbGV2ZWwtPnByZWZpeF9zdGF0ZSA9IFBSRUZJWF9DT05UQUlOU19ESVI7CisJfQorCisJcmV0dXJuIHJlZl9pdGVyYXRvcjsKK30KZGlmZiAtLWdpdCBhL3JlZnMvcmVmLWNhY2hlLmggYi9yZWZzL3JlZi1jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZmI4OWQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZzL3JlZi1jYWNoZS5oCkBAIC0wLDAgKzEsMjQzIEBACisjaWZuZGVmIFJFRlNfUkVGX0NBQ0hFX0gKKyNkZWZpbmUgUkVGU19SRUZfQ0FDSEVfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKworc3RydWN0IHJlZl9kaXI7CitzdHJ1Y3QgcmVmX3N0b3JlOworCisvKgorICogSWYgdGhpcyByZWZfY2FjaGUgaXMgZmlsbGVkIGxhemlseSwgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGxvYWQKKyAqIGluZm9ybWF0aW9uIGludG8gdGhlIHNwZWNpZmllZCByZWZfZGlyIChzaGFsbG93IG9yIGRlZXAsIGF0IHRoZQorICogb3B0aW9uIG9mIHRoZSByZWZfc3RvcmUpLiBkaXJuYW1lIGluY2x1ZGVzIGEgdHJhaWxpbmcgc2xhc2guCisgKi8KK3R5cGVkZWYgdm9pZCBmaWxsX3JlZl9kaXJfZm4oc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJICAgICBzdHJ1Y3QgcmVmX2RpciAqZGlyLCBjb25zdCBjaGFyICpkaXJuYW1lKTsKKworc3RydWN0IHJlZl9jYWNoZSB7CisJc3RydWN0IHJlZl9lbnRyeSAqcm9vdDsKKworCS8qIEEgcG9pbnRlciB0byB0aGUgcmVmX3N0b3JlIHdob3NlIGNhY2hlIHRoaXMgaXM6ICovCisJc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlOworCisJLyoKKwkgKiBGdW5jdGlvbiB1c2VkIChpZiBuZWNlc3NhcnkpIHRvIGxhemlseS1maWxsIGNhY2hlLiBNYXkgYmUKKwkgKiBOVUxMLgorCSAqLworCWZpbGxfcmVmX2Rpcl9mbiAqZmlsbF9yZWZfZGlyOworfTsKKworLyoKKyAqIEluZm9ybWF0aW9uIHVzZWQgKGFsb25nIHdpdGggdGhlIGluZm9ybWF0aW9uIGluIHJlZl9lbnRyeSkgdG8KKyAqIGRlc2NyaWJlIGEgc2luZ2xlIGNhY2hlZCByZWZlcmVuY2UuICBUaGlzIGRhdGEgc3RydWN0dXJlIG9ubHkKKyAqIG9jY3VycyBlbWJlZGRlZCBpbiBhIHVuaW9uIGluIHN0cnVjdCByZWZfZW50cnksIGFuZCBvbmx5IHdoZW4KKyAqIChyZWZfZW50cnktPmZsYWcgJiBSRUZfRElSKSBpcyB6ZXJvLgorICovCitzdHJ1Y3QgcmVmX3ZhbHVlIHsKKwkvKgorCSAqIFRoZSBuYW1lIG9mIHRoZSBvYmplY3QgdG8gd2hpY2ggdGhpcyByZWZlcmVuY2UgcmVzb2x2ZXMKKwkgKiAod2hpY2ggbWF5IGJlIGEgdGFnIG9iamVjdCkuICBJZiBSRUZfSVNCUk9LRU4sIHRoaXMgaXMKKwkgKiBudWxsLiAgSWYgUkVGX0lTU1lNUkVGLCB0aGVuIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIG9iamVjdAorCSAqIHJlZmVycmVkIHRvIGJ5IHRoZSBsYXN0IHJlZmVyZW5jZSBpbiB0aGUgc3ltbGluayBjaGFpbi4KKwkgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKK307CisKKy8qCisgKiBJbmZvcm1hdGlvbiB1c2VkIChhbG9uZyB3aXRoIHRoZSBpbmZvcm1hdGlvbiBpbiByZWZfZW50cnkpIHRvCisgKiBkZXNjcmliZSBhIGxldmVsIGluIHRoZSBoaWVyYXJjaHkgb2YgcmVmZXJlbmNlcy4gIFRoaXMgZGF0YQorICogc3RydWN0dXJlIG9ubHkgb2NjdXJzIGVtYmVkZGVkIGluIGEgdW5pb24gaW4gc3RydWN0IHJlZl9lbnRyeSwgYW5kCisgKiBvbmx5IHdoZW4gKHJlZl9lbnRyeS5mbGFnICYgUkVGX0RJUikgaXMgc2V0LiAgSW4gdGhhdCBjYXNlLAorICogKHJlZl9lbnRyeS5mbGFnICYgUkVGX0lOQ09NUExFVEUpIGRldGVybWluZXMgd2hldGhlciB0aGUgcmVmZXJlbmNlcworICogaW4gdGhlIGRpcmVjdG9yeSBoYXZlIGFscmVhZHkgYmVlbiByZWFkOgorICoKKyAqICAgICAocmVmX2VudHJ5LmZsYWcgJiBSRUZfSU5DT01QTEVURSkgdW5zZXQgLS0gYSBkaXJlY3Rvcnkgb2YgbG9vc2UKKyAqICAgICAgICAgb3IgcGFja2VkIHJlZmVyZW5jZXMsIGFscmVhZHkgcmVhZC4KKyAqCisgKiAgICAgKHJlZl9lbnRyeS5mbGFnICYgUkVGX0lOQ09NUExFVEUpIHNldCAtLSBhIGRpcmVjdG9yeSBvZiBsb29zZQorICogICAgICAgICByZWZlcmVuY2VzIHRoYXQgaGFzbid0IGJlZW4gcmVhZCB5ZXQgKG5vciBoYXMgYW55IG9mIGl0cworICogICAgICAgICBzdWJkaXJlY3RvcmllcykuCisgKgorICogRW50cmllcyB3aXRoaW4gYSBkaXJlY3RvcnkgYXJlIHN0b3JlZCB3aXRoaW4gYSBncm93YWJsZSBhcnJheSBvZgorICogcG9pbnRlcnMgdG8gcmVmX2VudHJpZXMgKGVudHJpZXMsIG5yLCBhbGxvYykuICBFbnRyaWVzIDAgPD0gaSA8CisgKiBzb3J0ZWQgYXJlIHNvcnRlZCBieSB0aGVpciBjb21wb25lbnQgbmFtZSBpbiBzdHJjbXAoKSBvcmRlciBhbmQgdGhlCisgKiByZW1haW5pbmcgZW50cmllcyBhcmUgdW5zb3J0ZWQuCisgKgorICogTG9vc2UgcmVmZXJlbmNlcyBhcmUgcmVhZCBsYXppbHksIG9uZSBkaXJlY3RvcnkgYXQgYSB0aW1lLiAgV2hlbiBhCisgKiBkaXJlY3Rvcnkgb2YgbG9vc2UgcmVmZXJlbmNlcyBpcyByZWFkLCB0aGVuIGFsbCBvZiB0aGUgcmVmZXJlbmNlcworICogaW4gdGhhdCBkaXJlY3RvcnkgYXJlIHN0b3JlZCwgYW5kIFJFRl9JTkNPTVBMRVRFIHN0dWJzIGFyZSBjcmVhdGVkCisgKiBmb3IgYW55IHN1YmRpcmVjdG9yaWVzLCBidXQgdGhlIHN1YmRpcmVjdG9yaWVzIHRoZW1zZWx2ZXMgYXJlIG5vdAorICogcmVhZC4gIFRoZSByZWFkaW5nIGlzIHRyaWdnZXJlZCBieSBnZXRfcmVmX2RpcigpLgorICovCitzdHJ1Y3QgcmVmX2RpciB7CisJaW50IG5yLCBhbGxvYzsKKworCS8qCisJICogRW50cmllcyB3aXRoIGluZGV4IDAgPD0gaSA8IHNvcnRlZCBhcmUgc29ydGVkIGJ5IG5hbWUuICBOZXcKKwkgKiBlbnRyaWVzIGFyZSBhcHBlbmRlZCB0byB0aGUgbGlzdCB1bnNvcnRlZCwgYW5kIGFyZSBzb3J0ZWQKKwkgKiBvbmx5IHdoZW4gcmVxdWlyZWQ7IHRodXMgd2UgYXZvaWQgdGhlIG5lZWQgdG8gc29ydCB0aGUgbGlzdAorCSAqIGFmdGVyIHRoZSBhZGRpdGlvbiBvZiBldmVyeSByZWZlcmVuY2UuCisJICovCisJaW50IHNvcnRlZDsKKworCS8qIFRoZSByZWZfY2FjaGUgY29udGFpbmluZyB0aGlzIGVudHJ5OiAqLworCXN0cnVjdCByZWZfY2FjaGUgKmNhY2hlOworCisJc3RydWN0IHJlZl9lbnRyeSAqKmVudHJpZXM7Cit9OworCisvKgorICogQml0IHZhbHVlcyBmb3IgcmVmX2VudHJ5OjpmbGFnLiAgUkVGX0lTU1lNUkVGPTB4MDEsCisgKiBSRUZfSVNQQUNLRUQ9MHgwMiwgUkVGX0lTQlJPS0VOPTB4MDQgYW5kIFJFRl9CQURfTkFNRT0weDA4IGFyZQorICogcHVibGljIHZhbHVlczsgc2VlIHJlZnMuaC4KKyAqLworCisvKiByZWZfZW50cnkgcmVwcmVzZW50cyBhIGRpcmVjdG9yeSBvZiByZWZlcmVuY2VzICovCisjZGVmaW5lIFJFRl9ESVIgMHgxMAorCisvKgorICogRW50cnkgaGFzIG5vdCB5ZXQgYmVlbiByZWFkIGZyb20gZGlzayAodXNlZCBvbmx5IGZvciBSRUZfRElSCisgKiBlbnRyaWVzIHJlcHJlc2VudGluZyBsb29zZSByZWZlcmVuY2VzKQorICovCisjZGVmaW5lIFJFRl9JTkNPTVBMRVRFIDB4MjAKKworLyoKKyAqIEEgcmVmX2VudHJ5IHJlcHJlc2VudHMgZWl0aGVyIGEgcmVmZXJlbmNlIG9yIGEgInN1YmRpcmVjdG9yeSIgb2YKKyAqIHJlZmVyZW5jZXMuCisgKgorICogRWFjaCBkaXJlY3RvcnkgaW4gdGhlIHJlZmVyZW5jZSBuYW1lc3BhY2UgaXMgcmVwcmVzZW50ZWQgYnkgYQorICogcmVmX2VudHJ5IHdpdGggKGZsYWdzICYgUkVGX0RJUikgc2V0IGFuZCBjb250YWluaW5nIGEgc3ViZGlyIG1lbWJlcgorICogdGhhdCBob2xkcyB0aGUgZW50cmllcyBpbiB0aGF0IGRpcmVjdG9yeSB0aGF0IGhhdmUgYmVlbiByZWFkIHNvCisgKiBmYXIuICBJZiAoZmxhZ3MgJiBSRUZfSU5DT01QTEVURSkgaXMgc2V0LCB0aGVuIHRoZSBkaXJlY3RvcnkgYW5kCisgKiBpdHMgc3ViZGlyZWN0b3JpZXMgaGF2ZW4ndCBiZWVuIHJlYWQgeWV0LiAgUkVGX0lOQ09NUExFVEUgaXMgb25seQorICogdXNlZCBmb3IgbG9vc2UgcmVmZXJlbmNlIGRpcmVjdG9yaWVzLgorICoKKyAqIFJlZmVyZW5jZXMgYXJlIHJlcHJlc2VudGVkIGJ5IGEgcmVmX2VudHJ5IHdpdGggKGZsYWdzICYgUkVGX0RJUikKKyAqIHVuc2V0IGFuZCBhIHZhbHVlIG1lbWJlciB0aGF0IGRlc2NyaWJlcyB0aGUgcmVmZXJlbmNlJ3MgdmFsdWUuICBUaGUKKyAqIGZsYWcgbWVtYmVyIGlzIGF0IHRoZSByZWZfZW50cnkgbGV2ZWwsIGJ1dCBpdCBpcyBhbHNvIG5lZWRlZCB0bworICogaW50ZXJwcmV0IHRoZSBjb250ZW50cyBvZiB0aGUgdmFsdWUgZmllbGQgKGluIG90aGVyIHdvcmRzLCBhCisgKiByZWZfdmFsdWUgb2JqZWN0IGlzIG5vdCB2ZXJ5IG11Y2ggdXNlIHdpdGhvdXQgdGhlIGVuY2xvc2luZworICogcmVmX2VudHJ5KS4KKyAqCisgKiBSZWZlcmVuY2UgbmFtZXMgY2Fubm90IGVuZCB3aXRoIHNsYXNoIGFuZCBkaXJlY3RvcmllcycgbmFtZXMgYXJlCisgKiBhbHdheXMgc3RvcmVkIHdpdGggYSB0cmFpbGluZyBzbGFzaCAoZXhjZXB0IGZvciB0aGUgdG9wLWxldmVsCisgKiBkaXJlY3RvcnksIHdoaWNoIGlzIGFsd2F5cyBkZW5vdGVkIGJ5ICIiKS4gIFRoaXMgaGFzIHR3byBuaWNlCisgKiBjb25zZXF1ZW5jZXM6ICgxKSB3aGVuIHRoZSBlbnRyaWVzIGluIGVhY2ggc3ViZGlyIGFyZSBzb3J0ZWQKKyAqIGxleGljb2dyYXBoaWNhbGx5IGJ5IG5hbWUgKGFzIHRoZXkgdXN1YWxseSBhcmUpLCB0aGUgcmVmZXJlbmNlcyBpbgorICogYSB3aG9sZSB0cmVlIGNhbiBiZSBnZW5lcmF0ZWQgaW4gbGV4aWNvZ3JhcGhpYyBvcmRlciBieSB0cmF2ZXJzaW5nCisgKiB0aGUgdHJlZSBpbiBsZWZ0LXRvLXJpZ2h0LCBkZXB0aC1maXJzdCBvcmRlcjsgKDIpIHRoZSBuYW1lcyBvZgorICogcmVmZXJlbmNlcyBhbmQgc3ViZGlyZWN0b3JpZXMgY2Fubm90IGNvbmZsaWN0LCBhbmQgdGhlcmVmb3JlIHRoZQorICogcHJlc2VuY2Ugb2YgYW4gZW1wdHkgc3ViZGlyZWN0b3J5IGRvZXMgbm90IGJsb2NrIHRoZSBjcmVhdGlvbiBvZiBhCisgKiBzaW1pbGFybHktbmFtZWQgcmVmZXJlbmNlLiAgKFRoZSBmYWN0IHRoYXQgcmVmZXJlbmNlIG5hbWVzIHdpdGggdGhlCisgKiBzYW1lIGxlYWRpbmcgY29tcG9uZW50cyBjYW4gY29uZmxpY3QgKndpdGggZWFjaCBvdGhlciogaXMgYQorICogc2VwYXJhdGUgaXNzdWUgdGhhdCBpcyByZWd1bGF0ZWQgYnkgcmVmc192ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGUoKS4pCisgKgorICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgbmFtZSBmaWVsZCBjb250YWlucyB0aGUgZnVsbHktcXVhbGlmaWVkCisgKiByZWZlcmVuY2UgKG9yIHN1YmRpcmVjdG9yeSkgbmFtZS4gIFNwYWNlIGNvdWxkIGJlIHNhdmVkIGJ5IG9ubHkKKyAqIHN0b3JpbmcgdGhlIHJlbGF0aXZlIG5hbWVzLiAgQnV0IHRoYXQgd291bGQgcmVxdWlyZSB0aGUgZnVsbCBuYW1lcworICogdG8gYmUgZ2VuZXJhdGVkIG9uIHRoZSBmbHkgd2hlbiBpdGVyYXRpbmcgaW4gZG9fZm9yX2VhY2hfcmVmKCksIGFuZAorICogd291bGQgYnJlYWsgY2FsbGJhY2sgZnVuY3Rpb25zLCB3aG8gaGF2ZSBhbHdheXMgYmVlbiBhYmxlIHRvIGFzc3VtZQorICogdGhhdCB0aGUgbmFtZSBzdHJpbmdzIHRoYXQgdGhleSBhcmUgcGFzc2VkIHdpbGwgbm90IGJlIGZyZWVkIGR1cmluZworICogdGhlIGl0ZXJhdGlvbi4KKyAqLworc3RydWN0IHJlZl9lbnRyeSB7CisJdW5zaWduZWQgY2hhciBmbGFnOyAvKiBJU1NZTVJFRj8gSVNQQUNLRUQ/ICovCisJdW5pb24geworCQlzdHJ1Y3QgcmVmX3ZhbHVlIHZhbHVlOyAvKiBpZiBub3QgKGZsYWdzJlJFRl9ESVIpICovCisJCXN0cnVjdCByZWZfZGlyIHN1YmRpcjsgLyogaWYgKGZsYWdzJlJFRl9ESVIpICovCisJfSB1OworCS8qCisJICogVGhlIGZ1bGwgbmFtZSBvZiB0aGUgcmVmZXJlbmNlIChlLmcuLCAicmVmcy9oZWFkcy9tYXN0ZXIiKQorCSAqIG9yIHRoZSBmdWxsIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB3aXRoIGEgdHJhaWxpbmcgc2xhc2gKKwkgKiAoZS5nLiwgInJlZnMvaGVhZHMvIik6CisJICovCisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfTsKKworLyoKKyAqIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IHdpdGggdGhlIGdpdmVuIHJlZm5hbWUgZnJvbSB0aGUKKyAqIHJlZl9kaXIgKG5vbi1yZWN1cnNpdmVseSksIHNvcnRpbmcgZGlyIGlmIG5lY2Vzc2FyeS4gIFJldHVybiAtMSBpZgorICogbm8gc3VjaCBlbnRyeSBpcyBmb3VuZC4gIGRpciBtdXN0IGFscmVhZHkgYmUgY29tcGxldGUuCisgKi8KK2ludCBzZWFyY2hfcmVmX2RpcihzdHJ1Y3QgcmVmX2RpciAqZGlyLCBjb25zdCBjaGFyICpyZWZuYW1lLCBzaXplX3QgbGVuKTsKKworc3RydWN0IHJlZl9kaXIgKmdldF9yZWZfZGlyKHN0cnVjdCByZWZfZW50cnkgKmVudHJ5KTsKKworLyoKKyAqIENyZWF0ZSBhIHN0cnVjdCByZWZfZW50cnkgb2JqZWN0IGZvciB0aGUgc3BlY2lmaWVkIGRpcm5hbWUuCisgKiBkaXJuYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3Rvcnkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIChlLmcuLAorICogInJlZnMvaGVhZHMvIikgb3IgIiIgZm9yIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgorICovCitzdHJ1Y3QgcmVmX2VudHJ5ICpjcmVhdGVfZGlyX2VudHJ5KHN0cnVjdCByZWZfY2FjaGUgKmNhY2hlLAorCQkJCSAgIGNvbnN0IGNoYXIgKmRpcm5hbWUsIHNpemVfdCBsZW4sCisJCQkJICAgaW50IGluY29tcGxldGUpOworCitzdHJ1Y3QgcmVmX2VudHJ5ICpjcmVhdGVfcmVmX2VudHJ5KGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZyk7CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3IGByZWZfY2FjaGVgLiBJdHMgdG9wLWxldmVsIHN0YXJ0cyBvdXQKKyAqIG1hcmtlZCBpbmNvbXBsZXRlLiBJZiBgZmlsbF9yZWZfZGlyYCBpcyBub24tTlVMTCwgaXQgaXMgdGhlCisgKiBmdW5jdGlvbiBjYWxsZWQgdG8gZmlsbCBpbiBpbmNvbXBsZXRlIGRpcmVjdG9yaWVzIGluIHRoZQorICogYHJlZl9jYWNoZWAgd2hlbiB0aGV5IGFyZSBhY2Nlc3NlZC4gSWYgaXQgaXMgTlVMTCwgdGhlbiB0aGUgd2hvbGUKKyAqIGByZWZfY2FjaGVgIG11c3QgYmUgZmlsbGVkIChpbmNsdWRpbmcgY2xlYXJpbmcgaXRzIGRpcmVjdG9yaWVzJworICogYFJFRl9JTkNPTVBMRVRFYCBiaXRzKSBiZWZvcmUgaXQgaXMgdXNlZCwgYW5kIGByZWZzYCBjYW4gYmUgTlVMTCwKKyAqIHRvby4KKyAqLworc3RydWN0IHJlZl9jYWNoZSAqY3JlYXRlX3JlZl9jYWNoZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJCSAgIGZpbGxfcmVmX2Rpcl9mbiAqZmlsbF9yZWZfZGlyKTsKKworLyoKKyAqIEZyZWUgdGhlIGByZWZfY2FjaGVgIGFuZCBhbGwgb2YgaXRzIGFzc29jaWF0ZWQgZGF0YS4KKyAqLwordm9pZCBmcmVlX3JlZl9jYWNoZShzdHJ1Y3QgcmVmX2NhY2hlICpjYWNoZSk7CisKKy8qCisgKiBBZGQgYSByZWZfZW50cnkgdG8gdGhlIGVuZCBvZiBkaXIgKHVuc29ydGVkKS4gIEVudHJ5IGlzIGFsd2F5cworICogc3RvcmVkIGRpcmVjdGx5IGluIGRpcjsgbm8gcmVjdXJzaW9uIGludG8gc3ViZGlyZWN0b3JpZXMgaXMKKyAqIGRvbmUuCisgKi8KK3ZvaWQgYWRkX2VudHJ5X3RvX2RpcihzdHJ1Y3QgcmVmX2RpciAqZGlyLCBzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSk7CisKKy8qCisgKiBSZW1vdmUgdGhlIGVudHJ5IHdpdGggdGhlIGdpdmVuIG5hbWUgZnJvbSBkaXIsIHJlY3Vyc2luZyBpbnRvCisgKiBzdWJkaXJlY3RvcmllcyBhcyBuZWNlc3NhcnkuICBJZiByZWZuYW1lIGlzIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5CisgKiAoaS5lLiwgZW5kcyB3aXRoICcvJyksIHRoZW4gcmVtb3ZlIHRoZSBkaXJlY3RvcnkgYW5kIGl0cyBjb250ZW50cy4KKyAqIElmIHRoZSByZW1vdmFsIHdhcyBzdWNjZXNzZnVsLCByZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzCisgKiByZW1haW5pbmcgaW4gdGhlIGRpcmVjdG9yeSBlbnRyeSB0aGF0IGNvbnRhaW5lZCB0aGUgZGVsZXRlZCBlbnRyeS4KKyAqIElmIHRoZSBuYW1lIHdhcyBub3QgZm91bmQsIHJldHVybiAtMS4gIFBsZWFzZSBub3RlIHRoYXQgdGhpcworICogZnVuY3Rpb24gb25seSBkZWxldGVzIHRoZSBlbnRyeSBmcm9tIHRoZSBjYWNoZTsgaXQgZG9lcyBub3QgZGVsZXRlCisgKiBpdCBmcm9tIHRoZSBmaWxlc3lzdGVtIG9yIGVuc3VyZSB0aGF0IG90aGVyIGNhY2hlIGVudHJpZXMgKHdoaWNoCisgKiBtaWdodCBiZSBzeW1ib2xpYyByZWZlcmVuY2VzIHRvIHRoZSByZW1vdmVkIGVudHJ5KSBhcmUgdXBkYXRlZC4KKyAqIE5vciBkb2VzIGl0IHJlbW92ZSBhbnkgY29udGFpbmluZyBkaXIgZW50cmllcyB0aGF0IG1pZ2h0IGJlIG1hZGUKKyAqIGVtcHR5IGJ5IHRoZSByZW1vdmFsLiAgZGlyIG11c3QgcmVwcmVzZW50IHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5CisgKiBhbmQgbXVzdCBhbHJlYWR5IGJlIGNvbXBsZXRlLgorICovCitpbnQgcmVtb3ZlX2VudHJ5X2Zyb21fZGlyKHN0cnVjdCByZWZfZGlyICpkaXIsIGNvbnN0IGNoYXIgKnJlZm5hbWUpOworCisvKgorICogQWRkIGEgcmVmX2VudHJ5IHRvIHRoZSByZWZfZGlyICh1bnNvcnRlZCksIHJlY3Vyc2luZyBpbnRvCisgKiBzdWJkaXJlY3RvcmllcyBhcyBuZWNlc3NhcnkuICBkaXIgbXVzdCByZXByZXNlbnQgdGhlIHRvcC1sZXZlbAorICogZGlyZWN0b3J5LiAgUmV0dXJuIDAgb24gc3VjY2Vzcy4KKyAqLworaW50IGFkZF9yZWZfZW50cnkoc3RydWN0IHJlZl9kaXIgKmRpciwgc3RydWN0IHJlZl9lbnRyeSAqcmVmKTsKKworLyoKKyAqIEZpbmQgdGhlIHZhbHVlIGVudHJ5IHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gZGlyLCBzb3J0aW5nIHJlZl9kaXJzCisgKiBhbmQgcmVjdXJzaW5nIGludG8gc3ViZGlyZWN0b3JpZXMgYXMgbmVjZXNzYXJ5LiAgSWYgdGhlIG5hbWUgaXMgbm90CisgKiBmb3VuZCBvciBpdCBjb3JyZXNwb25kcyB0byBhIGRpcmVjdG9yeSBlbnRyeSwgcmV0dXJuIE5VTEwuCisgKi8KK3N0cnVjdCByZWZfZW50cnkgKmZpbmRfcmVmX2VudHJ5KHN0cnVjdCByZWZfZGlyICpkaXIsIGNvbnN0IGNoYXIgKnJlZm5hbWUpOworCisvKgorICogU3RhcnQgaXRlcmF0aW5nIG92ZXIgcmVmZXJlbmNlcyBpbiBgY2FjaGVgLiBJZiBgcHJlZml4YCBpcworICogc3BlY2lmaWVkLCBvbmx5IGluY2x1ZGUgcmVmZXJlbmNlcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoIHRoYXQKKyAqIHByZWZpeC4gSWYgYHByaW1lX2RpcmAgaXMgdHJ1ZSwgdGhlbiBmaWxsIGFueSBpbmNvbXBsZXRlCisgKiBkaXJlY3RvcmllcyBiZWZvcmUgYmVnaW5uaW5nIHRoZSBpdGVyYXRpb24uIFRoZSBvdXRwdXQgaXMgb3JkZXJlZAorICogYnkgcmVmbmFtZS4KKyAqLworc3RydWN0IHJlZl9pdGVyYXRvciAqY2FjaGVfcmVmX2l0ZXJhdG9yX2JlZ2luKHN0cnVjdCByZWZfY2FjaGUgKmNhY2hlLAorCQkJCQkgICAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCSAgICAgIGludCBwcmltZV9kaXIpOworCisjZW5kaWYgLyogUkVGU19SRUZfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvcmVmcy9yZWZzLWludGVybmFsLmggYi9yZWZzL3JlZnMtaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjI0MzZjCi0tLSAvZGV2L251bGwKKysrIGIvcmVmcy9yZWZzLWludGVybmFsLmgKQEAgLTAsMCArMSw2NzggQEAKKyNpZm5kZWYgUkVGU19SRUZTX0lOVEVSTkFMX0gKKyNkZWZpbmUgUkVGU19SRUZTX0lOVEVSTkFMX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgIml0ZXJhdG9yLmgiCisKK3N0cnVjdCByZWZfdHJhbnNhY3Rpb247CisKKy8qCisgKiBEYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIGludGVybmFsIHVzZSBvZiB0aGUgcmVmcworICogbW9kdWxlLiBDb2RlIG91dHNpZGUgb2YgdGhlIHJlZnMgbW9kdWxlIHNob3VsZCB1c2Ugb25seSB0aGUgcHVibGljCisgKiBmdW5jdGlvbnMgZGVmaW5lZCBpbiAicmVmcy5oIiwgYW5kIHNob3VsZCAqbm90KiBpbmNsdWRlIHRoaXMgZmlsZS4KKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBmbGFncyBjYW4gYXBwZWFyIGluIGByZWZfdXBkYXRlOjpmbGFnc2AuIFRoZWlyCisgKiBudW1lcmljYWwgdmFsdWVzIG11c3Qgbm90IGNvbmZsaWN0IHdpdGggdGhvc2Ugb2YgUkVGX05PX0RFUkVGIGFuZAorICogUkVGX0ZPUkNFX0NSRUFURV9SRUZMT0csIHdoaWNoIGFyZSBhbHNvIHN0b3JlZCBpbgorICogYHJlZl91cGRhdGU6OmZsYWdzYC4KKyAqLworCisvKgorICogVGhlIHJlZmVyZW5jZSBzaG91bGQgYmUgdXBkYXRlZCB0byBuZXdfb2lkLgorICovCisjZGVmaW5lIFJFRl9IQVZFX05FVyAoMSA8PCAyKQorCisvKgorICogVGhlIGN1cnJlbnQgcmVmZXJlbmNlJ3MgdmFsdWUgc2hvdWxkIGJlIGNoZWNrZWQgdG8gbWFrZSBzdXJlIHRoYXQKKyAqIGl0IGFncmVlcyB3aXRoIG9sZF9vaWQuCisgKi8KKyNkZWZpbmUgUkVGX0hBVkVfT0xEICgxIDw8IDMpCisKKy8qCisgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aW1lIHRvIHJldHJ5IGFjcXVpcmluZyBhIGxvb3NlIHJlZmVyZW5jZSBsb2NrCisgKiBiZWZvcmUgZ2l2aW5nIHVwLCBpbiBtaWxsaXNlY29uZHM6CisgKi8KK2xvbmcgZ2V0X2ZpbGVzX3JlZl9sb2NrX3RpbWVvdXRfbXModm9pZCk7CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZmYgcmVmbmFtZSBpcyBtaW5pbWFsbHkgc2FmZS4gIlNhZmUiIGhlcmUgbWVhbnMgdGhhdAorICogZGVsZXRpbmcgYSBsb29zZSByZWZlcmVuY2UgYnkgdGhpcyBuYW1lIHdpbGwgbm90IGRvIGFueSBkYW1hZ2UsIGZvcgorICogZXhhbXBsZSBieSBjYXVzaW5nIGEgZmlsZSB0aGF0IGlzIG5vdCBhIHJlZmVyZW5jZSB0byBiZSBkZWxldGVkLgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB0aGF0IHRoZSByZWZlcmVuY2UgbmFtZSBpcyBsZWdhbDsgZm9yCisgKiB0aGF0LCB1c2UgY2hlY2tfcmVmbmFtZV9mb3JtYXQoKS4KKyAqCisgKiBBIHJlZm5hbWUgdGhhdCBzdGFydHMgd2l0aCAicmVmcy8iIGlzIGNvbnNpZGVyZWQgc2FmZSBpZmYgaXQKKyAqIGRvZXNuJ3QgY29udGFpbiBhbnkgIi4iIG9yICIuLiIgY29tcG9uZW50cyBvciBjb25zZWN1dGl2ZSAnLycKKyAqIGNoYXJhY3RlcnMsIGVuZCB3aXRoICcvJywgb3IgKG9uIFdpbmRvd3MpIGNvbnRhaW4gYW55ICdcJworICogY2hhcmFjdGVycy4gTmFtZXMgdGhhdCBkbyBub3Qgc3RhcnQgd2l0aCAicmVmcy8iIGFyZSBjb25zaWRlcmVkCisgKiBzYWZlIGlmZiB0aGV5IGNvbnNpc3QgZW50aXJlbHkgb2YgdXBwZXIgY2FzZSBjaGFyYWN0ZXJzIGFuZCAnXycKKyAqIChsaWtlICJIRUFEIiBhbmQgIk1FUkdFX0hFQUQiIGJ1dCBub3QgImNvbmZpZyIgb3IgIkZPTy9CQVIiKS4KKyAqLworaW50IHJlZm5hbWVfaXNfc2FmZShjb25zdCBjaGFyICpyZWZuYW1lKTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbjogcmV0dXJuIHRydWUgaWYgcmVmbmFtZSwgd2hpY2ggaGFzIHRoZSBzcGVjaWZpZWQKKyAqIG9pZCBhbmQgZmxhZ3MsIGNhbiBiZSByZXNvbHZlZCB0byBhbiBvYmplY3QgaW4gdGhlIGRhdGFiYXNlLiBJZiB0aGUKKyAqIHJlZmVycmVkLXRvIG9iamVjdCBkb2VzIG5vdCBleGlzdCwgZW1pdCBhIHdhcm5pbmcgYW5kIHJldHVybiBmYWxzZS4KKyAqLworaW50IHJlZl9yZXNvbHZlc190b19vYmplY3QoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncyk7CisKK2VudW0gcGVlbF9zdGF0dXMgeworCS8qIG9iamVjdCB3YXMgcGVlbGVkIHN1Y2Nlc3NmdWxseTogKi8KKwlQRUVMX1BFRUxFRCA9IDAsCisKKwkvKgorCSAqIG9iamVjdCBjYW5ub3QgYmUgcGVlbGVkIGJlY2F1c2UgdGhlIG5hbWVkIG9iamVjdCAob3IgYW4KKwkgKiBvYmplY3QgcmVmZXJyZWQgdG8gYnkgYSB0YWcgaW4gdGhlIHBlZWwgY2hhaW4pLCBkb2VzIG5vdAorCSAqIGV4aXN0LgorCSAqLworCVBFRUxfSU5WQUxJRCA9IC0xLAorCisJLyogb2JqZWN0IGNhbm5vdCBiZSBwZWVsZWQgYmVjYXVzZSBpdCBpcyBub3QgYSB0YWc6ICovCisJUEVFTF9OT05fVEFHID0gLTIsCisKKwkvKiByZWZfZW50cnkgY29udGFpbnMgbm8gcGVlbGVkIHZhbHVlIGJlY2F1c2UgaXQgaXMgYSBzeW1yZWY6ICovCisJUEVFTF9JU19TWU1SRUYgPSAtMywKKworCS8qCisJICogcmVmX2VudHJ5IGNhbm5vdCBiZSBwZWVsZWQgYmVjYXVzZSBpdCBpcyBicm9rZW4gKGkuZS4sIHRoZQorCSAqIHN5bWJvbGljIHJlZmVyZW5jZSBjYW5ub3QgZXZlbiBiZSByZXNvbHZlZCB0byBhbiBvYmplY3QKKwkgKiBuYW1lKToKKwkgKi8KKwlQRUVMX0JST0tFTiA9IC00Cit9OworCisvKgorICogUGVlbCB0aGUgbmFtZWQgb2JqZWN0OyBpLmUuLCBpZiB0aGUgb2JqZWN0IGlzIGEgdGFnLCByZXNvbHZlIHRoZQorICogdGFnIHJlY3Vyc2l2ZWx5IHVudGlsIGEgbm9uLXRhZyBpcyBmb3VuZC4gIElmIHN1Y2Nlc3NmdWwsIHN0b3JlIHRoZQorICogcmVzdWx0IHRvIG9pZCBhbmQgcmV0dXJuIFBFRUxfUEVFTEVELiAgSWYgdGhlIG9iamVjdCBpcyBub3QgYSB0YWcKKyAqIG9yIGlzIG5vdCB2YWxpZCwgcmV0dXJuIFBFRUxfTk9OX1RBRyBvciBQRUVMX0lOVkFMSUQsIHJlc3BlY3RpdmVseSwKKyAqIGFuZCBsZWF2ZSBvaWQgdW5jaGFuZ2VkLgorICovCitlbnVtIHBlZWxfc3RhdHVzIHBlZWxfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5hbWUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKKy8qCisgKiBDb3B5IHRoZSByZWZsb2cgbWVzc2FnZSBtc2cgdG8gc2Igd2hpbGUgY2xlYW5pbmcgdXAgdGhlIHdoaXRlc3BhY2VzLgorICogRXNwZWNpYWxseSwgY29udmVydCBMRiB0byBzcGFjZSwgYmVjYXVzZSByZWZsb2cgZmlsZSBpcyBvbmUgbGluZSBwZXIgZW50cnkuCisgKi8KK3ZvaWQgY29weV9yZWZsb2dfbXNnKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICptc2cpOworCisvKioKKyAqIEluZm9ybWF0aW9uIG5lZWRlZCBmb3IgYSBzaW5nbGUgcmVmIHVwZGF0ZS4gU2V0IG5ld19vaWQgdG8gdGhlIG5ldworICogdmFsdWUgb3IgdG8gbnVsbF9vaWQgdG8gZGVsZXRlIHRoZSByZWYuIFRvIGNoZWNrIHRoZSBvbGQgdmFsdWUKKyAqIHdoaWxlIHRoZSByZWYgaXMgbG9ja2VkLCBzZXQgKGZsYWdzICYgUkVGX0hBVkVfT0xEKSBhbmQgc2V0IG9sZF9vaWQKKyAqIHRvIHRoZSBvbGQgdmFsdWUsIG9yIHRvIG51bGxfb2lkIHRvIGVuc3VyZSB0aGUgcmVmIGRvZXMgbm90IGV4aXN0CisgKiBiZWZvcmUgdXBkYXRlLgorICovCitzdHJ1Y3QgcmVmX3VwZGF0ZSB7CisJLyoKKwkgKiBJZiAoZmxhZ3MgJiBSRUZfSEFWRV9ORVcpLCBzZXQgdGhlIHJlZmVyZW5jZSB0byB0aGlzIHZhbHVlCisJICogKG9yIGRlbGV0ZSBpdCwgaWYgYG5ld19vaWRgIGlzIGBudWxsX29pZGApLgorCSAqLworCXN0cnVjdCBvYmplY3RfaWQgbmV3X29pZDsKKworCS8qCisJICogSWYgKGZsYWdzICYgUkVGX0hBVkVfT0xEKSwgY2hlY2sgdGhhdCB0aGUgcmVmZXJlbmNlCisJICogcHJldmlvdXNseSBoYWQgdGhpcyB2YWx1ZSAob3IgZGlkbid0IHByZXZpb3VzbHkgZXhpc3QsIGlmCisJICogYG9sZF9vaWRgIGlzIGBudWxsX29pZGApLgorCSAqLworCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZDsKKworCS8qCisJICogT25lIG9yIG1vcmUgb2YgUkVGX05PX0RFUkVGLCBSRUZfRk9SQ0VfQ1JFQVRFX1JFRkxPRywKKwkgKiBSRUZfSEFWRV9ORVcsIFJFRl9IQVZFX09MRCwgb3IgYmFja2VuZC1zcGVjaWZpYyBmbGFncy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKwl2b2lkICpiYWNrZW5kX2RhdGE7CisJdW5zaWduZWQgaW50IHR5cGU7CisJY2hhciAqbXNnOworCisJLyoKKwkgKiBJZiB0aGlzIHJlZl91cGRhdGUgd2FzIHNwbGl0IG9mZiBvZiBhIHN5bXJlZiB1cGRhdGUgdmlhCisJICogc3BsaXRfc3ltcmVmX3VwZGF0ZSgpLCB0aGVuIHRoaXMgbWVtYmVyIHBvaW50cyBhdCB0aGF0CisJICogdXBkYXRlLiBUaGlzIGlzIHVzZWQgZm9yIHR3byBwdXJwb3NlczoKKwkgKiAxLiBXaGVuIHJlcG9ydGluZyBlcnJvcnMsIHdlIHJlcG9ydCB0aGUgcmVmbmFtZSB1bmRlciB3aGljaAorCSAqICAgIHRoZSB1cGRhdGUgd2FzIG9yaWdpbmFsbHkgcmVxdWVzdGVkLgorCSAqIDIuIFdoZW4gd2UgcmVhZCB0aGUgb2xkIHZhbHVlIG9mIHRoaXMgcmVmZXJlbmNlLCB3ZQorCSAqICAgIHByb3BhZ2F0ZSBpdCBiYWNrIHRvIGl0cyBwYXJlbnQgdXBkYXRlIGZvciByZWNvcmRpbmcgaW4KKwkgKiAgICB0aGUgbGF0dGVyJ3MgcmVmbG9nLgorCSAqLworCXN0cnVjdCByZWZfdXBkYXRlICpwYXJlbnRfdXBkYXRlOworCisJY29uc3QgY2hhciByZWZuYW1lW0ZMRVhfQVJSQVldOworfTsKKworaW50IHJlZnNfcmVhZF9yYXdfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICpyZWZlcmVudCwgdW5zaWduZWQgaW50ICp0eXBlKTsKKworLyoKKyAqIFdyaXRlIGFuIGVycm9yIHRvIGBlcnJgIGFuZCByZXR1cm4gYSBub256ZXJvIHZhbHVlIGlmZiB0aGUgc2FtZQorICogcmVmbmFtZSBhcHBlYXJzIG11bHRpcGxlIHRpbWVzIGluIGByZWZuYW1lc2AuIGByZWZuYW1lc2AgbXVzdCBiZQorICogc29ydGVkIG9uIGVudHJ5IHRvIHRoaXMgZnVuY3Rpb24uCisgKi8KK2ludCByZWZfdXBkYXRlX3JlamVjdF9kdXBsaWNhdGVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmbmFtZXMsCisJCQkJIHN0cnVjdCBzdHJidWYgKmVycik7CisKKy8qCisgKiBBZGQgYSByZWZfdXBkYXRlIHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzIHRvIHRyYW5zYWN0aW9uLCBhbmQKKyAqIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ldyBvYmplY3QuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdmVyaWZ5CisgKiB0aGF0IHJlZm5hbWUgaXMgd2VsbC1mb3JtZWQuIG5ld19vaWQgYW5kIG9sZF9vaWQgYXJlIG9ubHkKKyAqIGRlcmVmZXJlbmNlZCBpZiB0aGUgUkVGX0hBVkVfTkVXIGFuZCBSRUZfSEFWRV9PTEQgYml0cywKKyAqIHJlc3BlY3RpdmVseSwgYXJlIHNldCBpbiBmbGFncy4KKyAqLworc3RydWN0IHJlZl91cGRhdGUgKnJlZl90cmFuc2FjdGlvbl9hZGRfdXBkYXRlKAorCQlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzLAorCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkLAorCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLAorCQljb25zdCBjaGFyICptc2cpOworCisvKgorICogVHJhbnNhY3Rpb24gc3RhdGVzLgorICoKKyAqIE9QRU46ICAgVGhlIHRyYW5zYWN0aW9uIGlzIGluaXRpYWxpemVkIGFuZCBuZXcgdXBkYXRlcyBjYW4gc3RpbGwgYmUKKyAqICAgICAgICAgYWRkZWQgdG8gaXQuIEFuIE9QRU4gdHJhbnNhY3Rpb24gY2FuIGJlIHByZXBhcmVkLAorICogICAgICAgICBjb21taXR0ZWQsIGZyZWVkLCBvciBhYm9ydGVkIChmcmVlaW5nIGFuZCBhYm9ydGluZyBhbiBvcGVuCisgKiAgICAgICAgIHRyYW5zYWN0aW9uIGFyZSBlcXVpdmFsZW50KS4KKyAqCisgKiBQUkVQQVJFRDogcmVmX3RyYW5zYWN0aW9uX3ByZXBhcmUoKSwgd2hpY2ggbG9ja3MgYWxsIG9mIHRoZQorICogICAgICAgICByZWZlcmVuY2VzIGludm9sdmVkIGluIHRoZSB1cGRhdGUgYW5kIGNoZWNrcyB0aGF0IHRoZQorICogICAgICAgICB1cGRhdGUgaGFzIG5vIGVycm9ycywgaGFzIGJlZW4gY2FsbGVkIHN1Y2Nlc3NmdWxseSBmb3IgdGhlCisgKiAgICAgICAgIHRyYW5zYWN0aW9uLiBBIFBSRVBBUkVEIHRyYW5zYWN0aW9uIGNhbiBiZSBjb21taXR0ZWQgb3IKKyAqICAgICAgICAgYWJvcnRlZC4KKyAqCisgKiBDTE9TRUQ6IFRoZSB0cmFuc2FjdGlvbiBpcyBubyBsb25nZXIgYWN0aXZlLiBBIHRyYW5zYWN0aW9uIGJlY29tZXMKKyAqICAgICAgICAgQ0xPU0VEIGlmIHRoZXJlIGlzIGEgZmFpbHVyZSB3aGlsZSBidWlsZGluZyB0aGUgdHJhbnNhY3Rpb24KKyAqICAgICAgICAgb3IgaWYgYSB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb3IgYWJvcnRlZC4gQSBDTE9TRUQKKyAqICAgICAgICAgdHJhbnNhY3Rpb24gY2FuIG9ubHkgYmUgZnJlZWQuCisgKi8KK2VudW0gcmVmX3RyYW5zYWN0aW9uX3N0YXRlIHsKKwlSRUZfVFJBTlNBQ1RJT05fT1BFTiAgICAgPSAwLAorCVJFRl9UUkFOU0FDVElPTl9QUkVQQVJFRCA9IDEsCisJUkVGX1RSQU5TQUNUSU9OX0NMT1NFRCAgID0gMgorfTsKKworLyoKKyAqIERhdGEgc3RydWN0dXJlIGZvciBob2xkaW5nIGEgcmVmZXJlbmNlIHRyYW5zYWN0aW9uLCB3aGljaCBjYW4KKyAqIGNvbnNpc3Qgb2YgY2hlY2tzIGFuZCB1cGRhdGVzIHRvIG11bHRpcGxlIHJlZmVyZW5jZXMsIGNhcnJpZWQgb3V0CisgKiBhcyBhdG9taWNhbGx5IGFzIHBvc3NpYmxlLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgb3BhcXVlIHRvIGNhbGxlcnMuCisgKi8KK3N0cnVjdCByZWZfdHJhbnNhY3Rpb24geworCXN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZTsKKwlzdHJ1Y3QgcmVmX3VwZGF0ZSAqKnVwZGF0ZXM7CisJc2l6ZV90IGFsbG9jOworCXNpemVfdCBucjsKKwllbnVtIHJlZl90cmFuc2FjdGlvbl9zdGF0ZSBzdGF0ZTsKKwl2b2lkICpiYWNrZW5kX2RhdGE7Cit9OworCisvKgorICogQ2hlY2sgZm9yIGVudHJpZXMgaW4gZXh0cmFzIHRoYXQgYXJlIHdpdGhpbiB0aGUgc3BlY2lmaWVkCisgKiBkaXJlY3RvcnksIHdoZXJlIGRpcm5hbWUgaXMgYSByZWZlcmVuY2UgZGlyZWN0b3J5IG5hbWUgaW5jbHVkaW5nCisgKiB0aGUgdHJhaWxpbmcgc2xhc2ggKGUuZy4sICJyZWZzL2hlYWRzL2Zvby8iKS4gSWdub3JlIGFueQorICogY29uZmxpY3RpbmcgcmVmZXJlbmNlcyB0aGF0IGFyZSBmb3VuZCBpbiBza2lwLiBJZiB0aGVyZSBpcyBhCisgKiBjb25mbGljdGluZyByZWZlcmVuY2UsIHJldHVybiBpdHMgbmFtZS4KKyAqCisgKiBleHRyYXMgYW5kIHNraXAgbXVzdCBiZSBzb3J0ZWQgbGlzdHMgb2YgcmVmZXJlbmNlIG5hbWVzLiBFaXRoZXIgb25lCisgKiBjYW4gYmUgTlVMTCwgc2lnbmlmeWluZyB0aGUgZW1wdHkgbGlzdC4KKyAqLworY29uc3QgY2hhciAqZmluZF9kZXNjZW5kYW50X3JlZihjb25zdCBjaGFyICpkaXJuYW1lLAorCQkJCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZXh0cmFzLAorCQkJCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqc2tpcCk7CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIGFuIGF0dGVtcHQgdG8gcmVuYW1lIG9sZF9yZWZuYW1lIHRvIG5ld19yZWZuYW1lIHdvdWxkCisgKiBjYXVzZSBhIEQvRiBjb25mbGljdCB3aXRoIGFueSBleGlzdGluZyByZWZlcmVuY2UgKG90aGVyIHRoYW4KKyAqIHBvc3NpYmx5IG9sZF9yZWZuYW1lKS4gSWYgdGhlcmUgd291bGQgYmUgYSBjb25mbGljdCwgZW1pdCBhbiBlcnJvcgorICogbWVzc2FnZSBhbmQgcmV0dXJuIGZhbHNlOyBvdGhlcndpc2UsIHJldHVybiB0cnVlLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBzYWZlIGFnYWluc3QgYWxsIHJhY2VzIHdpdGggb3RoZXIKKyAqIHByb2Nlc3NlcyAodGhvdWdoIHJlbmFtZV9yZWYoKSBjYXRjaGVzIHNvbWUgcmFjZXMgdGhhdCBtaWdodCBnZXQgYnkKKyAqIHRoaXMgY2hlY2spLgorICovCitpbnQgcmVmc19yZW5hbWVfcmVmX2F2YWlsYWJsZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJICAgICAgY29uc3QgY2hhciAqb2xkX3JlZm5hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpuZXdfcmVmbmFtZSk7CisKKy8qIFdlIGFsbG93ICJyZWN1cnNpdmUiIHN5bWJvbGljIHJlZnMuIE9ubHkgd2l0aGluIHJlYXNvbiwgdGhvdWdoICovCisjZGVmaW5lIFNZTVJFRl9NQVhERVBUSCA1CisKKy8qIEluY2x1ZGUgYnJva2VuIHJlZmVyZW5jZXMgaW4gYSBkb19mb3JfZWFjaF9yZWYqKCkgaXRlcmF0aW9uOiAqLworI2RlZmluZSBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTiAweDAxCisKKy8qCisgKiBSZWZlcmVuY2UgaXRlcmF0b3JzCisgKgorICogQSByZWZlcmVuY2UgaXRlcmF0b3IgZW5jYXBzdWxhdGVzIHRoZSBzdGF0ZSBvZiBhbiBpbi1wcm9ncmVzcworICogaXRlcmF0aW9uIG92ZXIgcmVmZXJlbmNlcy4gQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGBzdHJ1Y3QKKyAqIHJlZl9pdGVyYXRvcmAgdmlhIG9uZSBvZiB0aGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlLgorICoKKyAqIEEgZnJlc2hseS1jcmVhdGVkIHJlZl9pdGVyYXRvciBkb2Vzbid0IHlldCBwb2ludCBhdCBhIHJlZmVyZW5jZS4gVG8KKyAqIGFkdmFuY2UgdGhlIGl0ZXJhdG9yLCBjYWxsIHJlZl9pdGVyYXRvcl9hZHZhbmNlKCkuIElmIHN1Y2Nlc3NmdWwsCisgKiB0aGlzIHNldHMgdGhlIGl0ZXJhdG9yJ3MgcmVmbmFtZSwgb2lkLCBhbmQgZmxhZ3MgZmllbGRzIHRvIGRlc2NyaWJlCisgKiB0aGUgbmV4dCByZWZlcmVuY2UgYW5kIHJldHVybnMgSVRFUl9PSy4gVGhlIGRhdGEgcG9pbnRlZCBhdCBieQorICogcmVmbmFtZSBhbmQgb2lkIGJlbG9uZyB0byB0aGUgaXRlcmF0b3I7IGlmIHlvdSB3YW50IHRvIHJldGFpbiB0aGVtCisgKiBhZnRlciBjYWxsaW5nIHJlZl9pdGVyYXRvcl9hZHZhbmNlKCkgYWdhaW4gb3IgY2FsbGluZworICogcmVmX2l0ZXJhdG9yX2Fib3J0KCksIHlvdSBtdXN0IG1ha2UgYSBjb3B5LiBXaGVuIHRoZSBpdGVyYXRpb24gaGFzCisgKiBiZWVuIGV4aGF1c3RlZCwgcmVmX2l0ZXJhdG9yX2FkdmFuY2UoKSByZWxlYXNlcyBhbnkgcmVzb3VyY2VzCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGl0ZXJhdGlvbiwgZnJlZXMgdGhlIHJlZl9pdGVyYXRvciBvYmplY3QsIGFuZAorICogcmV0dXJucyBJVEVSX0RPTkUuIElmIHlvdSB3YW50IHRvIGFib3J0IHRoZSBpdGVyYXRpb24gZWFybHksIGNhbGwKKyAqIHJlZl9pdGVyYXRvcl9hYm9ydCgpLCB3aGljaCBhbHNvIGZyZWVzIHRoZSByZWZfaXRlcmF0b3Igb2JqZWN0IGFuZAorICogYW55IGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBJZiB0aGVyZSB3YXMgYW4gaW50ZXJuYWwgZXJyb3IgYWR2YW5jaW5nCisgKiB0byB0aGUgbmV4dCBlbnRyeSwgcmVmX2l0ZXJhdG9yX2FkdmFuY2UoKSBhYm9ydHMgdGhlIGl0ZXJhdGlvbiwKKyAqIGZyZWVzIHRoZSByZWZfaXRlcmF0b3IsIGFuZCByZXR1cm5zIElURVJfRVJST1IuCisgKgorICogVGhlIHJlZmVyZW5jZSBjdXJyZW50bHkgYmVpbmcgbG9va2VkIGF0IGNhbiBiZSBwZWVsZWQgYnkgY2FsbGluZworICogcmVmX2l0ZXJhdG9yX3BlZWwoKS4gVGhpcyBmdW5jdGlvbiBpcyBvZnRlbiBmYXN0ZXIgdGhhbiBwZWVsX3JlZigpLAorICogc28gaXQgc2hvdWxkIGJlIHByZWZlcnJlZCB3aGVuIGl0ZXJhdGluZyBvdmVyIHJlZmVyZW5jZXMuCisgKgorICogUHV0dGluZyBpdCBhbGwgdG9nZXRoZXIsIGEgdHlwaWNhbCBpdGVyYXRpb24gbG9va3MgbGlrZSB0aGlzOgorICoKKyAqICAgICBpbnQgb2s7CisgKiAgICAgc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlciA9IC4uLjsKKyAqCisgKiAgICAgd2hpbGUgKChvayA9IHJlZl9pdGVyYXRvcl9hZHZhbmNlKGl0ZXIpKSA9PSBJVEVSX09LKSB7CisgKiAgICAgICAgICAgICBpZiAod2FudF90b19zdG9wX2l0ZXJhdGlvbigpKSB7CisgKiAgICAgICAgICAgICAgICAgICAgIG9rID0gcmVmX2l0ZXJhdG9yX2Fib3J0KGl0ZXIpOworICogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAqICAgICAgICAgICAgIH0KKyAqCisgKiAgICAgICAgICAgICAvLyBBY2Nlc3MgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcmVmZXJlbmNlOgorICogICAgICAgICAgICAgaWYgKCEoaXRlci0+ZmxhZ3MgJiBSRUZfSVNTWU1SRUYpKQorICogICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVzIGlzICVzXG4iLCBpdGVyLT5yZWZuYW1lLCBvaWRfdG9faGV4KGl0ZXItPm9pZCkpOworICoKKyAqICAgICAgICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIHBlZWwgdGhlIHJlZmVyZW5jZToKKyAqICAgICAgICAgICAgIHJlZl9pdGVyYXRvcl9wZWVsKGl0ZXIsICZvaWQpOworICogICAgIH0KKyAqCisgKiAgICAgaWYgKG9rICE9IElURVJfRE9ORSkKKyAqICAgICAgICAgICAgIGhhbmRsZV9lcnJvcigpOworICovCitzdHJ1Y3QgcmVmX2l0ZXJhdG9yIHsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yX3Z0YWJsZSAqdnRhYmxlOworCisJLyoKKwkgKiBEb2VzIHRoaXMgYHJlZl9pdGVyYXRvcmAgaXRlcmF0ZSBvdmVyIHJlZmVyZW5jZXMgaW4gb3JkZXIKKwkgKiBieSByZWZuYW1lPworCSAqLworCXVuc2lnbmVkIGludCBvcmRlcmVkIDogMTsKKworCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkOworCXVuc2lnbmVkIGludCBmbGFnczsKK307CisKKy8qCisgKiBBZHZhbmNlIHRoZSBpdGVyYXRvciB0byB0aGUgZmlyc3Qgb3IgbmV4dCBpdGVtIGFuZCByZXR1cm4gSVRFUl9PSy4KKyAqIElmIHRoZSBpdGVyYXRpb24gaXMgZXhoYXVzdGVkLCBmcmVlIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoCisgKiB0aGUgcmVmX2l0ZXJhdG9yIGFuZCByZXR1cm4gSVRFUl9ET05FLiBPbiBlcnJvcnMsIGZyZWUgdGhlIGl0ZXJhdG9yCisgKiByZXNvdXJjZXMgYW5kIHJldHVybiBJVEVSX0VSUk9SLiBJdCBpcyBhIGJ1ZyB0byB1c2UgcmVmX2l0ZXJhdG9yIG9yCisgKiBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4gYWZ0ZXIgaXQgaGFzIHJldHVybmVkIElURVJfRE9ORSBvcgorICogSVRFUl9FUlJPUi4KKyAqLworaW50IHJlZl9pdGVyYXRvcl9hZHZhbmNlKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcik7CisKKy8qCisgKiBJZiBwb3NzaWJsZSwgcGVlbCB0aGUgcmVmZXJlbmNlIGN1cnJlbnRseSBiZWluZyB2aWV3ZWQgYnkgdGhlCisgKiBpdGVyYXRvci4gUmV0dXJuIDAgb24gc3VjY2Vzcy4KKyAqLworaW50IHJlZl9pdGVyYXRvcl9wZWVsKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvciwKKwkJICAgICAgc3RydWN0IG9iamVjdF9pZCAqcGVlbGVkKTsKKworLyoKKyAqIEVuZCB0aGUgaXRlcmF0aW9uIGJlZm9yZSBpdCBoYXMgYmVlbiBleGhhdXN0ZWQsIGZyZWVpbmcgdGhlCisgKiByZWZlcmVuY2UgaXRlcmF0b3IgYW5kIGFueSBhc3NvY2lhdGVkIHJlc291cmNlcyBhbmQgcmV0dXJuaW5nCisgKiBJVEVSX0RPTkUuIElmIHRoZSBhYm9ydCBpdHNlbGYgZmFpbGVkLCByZXR1cm4gSVRFUl9FUlJPUi4KKyAqLworaW50IHJlZl9pdGVyYXRvcl9hYm9ydChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpOworCisvKgorICogQW4gaXRlcmF0b3Igb3ZlciBub3RoaW5nIChpdHMgZmlyc3QgcmVmX2l0ZXJhdG9yX2FkdmFuY2UoKSBjYWxsCisgKiByZXR1cm5zIElURVJfRE9ORSkuCisgKi8KK3N0cnVjdCByZWZfaXRlcmF0b3IgKmVtcHR5X3JlZl9pdGVyYXRvcl9iZWdpbih2b2lkKTsKKworLyoKKyAqIFJldHVybiB0cnVlIGlmZiByZWZfaXRlcmF0b3IgaXMgYW4gZW1wdHlfcmVmX2l0ZXJhdG9yLgorICovCitpbnQgaXNfZW1wdHlfcmVmX2l0ZXJhdG9yKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcik7CisKKy8qCisgKiBSZXR1cm4gYW4gaXRlcmF0b3IgdGhhdCBnb2VzIG92ZXIgZWFjaCByZWZlcmVuY2UgaW4gYHJlZnNgIGZvcgorICogd2hpY2ggdGhlIHJlZm5hbWUgYmVnaW5zIHdpdGggcHJlZml4LiBJZiB0cmltIGlzIG5vbi16ZXJvLCB0aGVuCisgKiB0cmltIHRoYXQgbWFueSBjaGFyYWN0ZXJzIG9mZiB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcmVmbmFtZS4gZmxhZ3MKKyAqIGNhbiBiZSBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTiB0byBpbmNsdWRlIGJyb2tlbiByZWZlcmVuY2VzIGluCisgKiB0aGUgaXRlcmF0aW9uLiBUaGUgb3V0cHV0IGlzIG9yZGVyZWQgYnkgcmVmbmFtZS4KKyAqLworc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmc19yZWZfaXRlcmF0b3JfYmVnaW4oCisJCXN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCWNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHRyaW0sIGludCBmbGFncyk7CisKKy8qCisgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgdG8gaW5zdHJ1Y3QgbWVyZ2VfcmVmX2l0ZXJhdG9yIGhvdyB0bworICogaW50ZXJsZWF2ZSB0aGUgZW50cmllcyBmcm9tIGl0ZXIwIGFuZCBpdGVyMS4gVGhlIGZ1bmN0aW9uIHNob3VsZAorICogcmV0dXJuIG9uZSBvZiB0aGUgY29uc3RhbnRzIGRlZmluZWQgaW4gZW51bSBpdGVyYXRvcl9zZWxlY3Rpb24uIEl0CisgKiBtdXN0IG5vdCBhZHZhbmNlIGVpdGhlciBvZiB0aGUgaXRlcmF0b3JzIGl0c2VsZi4KKyAqCisgKiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBwcmVwYXJlZCB0byBoYW5kbGUgdGhlIGNhc2UgdGhhdCBpdGVyMCBhbmQvb3IKKyAqIGl0ZXIxIGlzIE5VTEwsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIHN1Yi1pdGVyYXRvcgorICogaGFzIGJlZW4gZXhoYXVzdGVkLiBJdHMgcmV0dXJuIHZhbHVlIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIHRoZQorICogY3VycmVudCBzdGF0ZXMgb2YgdGhlIGl0ZXJhdG9yczsgZS5nLiwgaXQgbXVzdCBub3QgcmV0dXJuCisgKiBJVEVSX1NLSVBfMSBpZiBpdGVyMSBoYXMgYWxyZWFkeSBiZWVuIGV4aGF1c3RlZC4KKyAqLwordHlwZWRlZiBlbnVtIGl0ZXJhdG9yX3NlbGVjdGlvbiByZWZfaXRlcmF0b3Jfc2VsZWN0X2ZuKAorCQlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyMCwgc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcjEsCisJCXZvaWQgKmNiX2RhdGEpOworCisvKgorICogSXRlcmF0ZSBvdmVyIHRoZSBlbnRyaWVzIGZyb20gaXRlcjAgYW5kIGl0ZXIxLCB3aXRoIHRoZSB2YWx1ZXMKKyAqIGludGVybGVhdmVkIGFzIGRpcmVjdGVkIGJ5IHRoZSBzZWxlY3QgZnVuY3Rpb24uIFRoZSBpdGVyYXRvciB0YWtlcworICogb3duZXJzaGlwIG9mIGl0ZXIwIGFuZCBpdGVyMSBhbmQgZnJlZXMgdGhlbSB3aGVuIHRoZSBpdGVyYXRpb24gaXMKKyAqIG92ZXIuIEEgZGVyaXZlZCBjbGFzcyBzaG91bGQgc2V0IGBvcmRlcmVkYCB0byAxIG9yIDAgYmFzZWQgb24KKyAqIHdoZXRoZXIgaXQgZ2VuZXJhdGVzIGl0cyBvdXRwdXQgaW4gb3JkZXIgYnkgcmVmZXJlbmNlIG5hbWUuCisgKi8KK3N0cnVjdCByZWZfaXRlcmF0b3IgKm1lcmdlX3JlZl9pdGVyYXRvcl9iZWdpbigKKwkJaW50IG9yZGVyZWQsCisJCXN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIwLCBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyMSwKKwkJcmVmX2l0ZXJhdG9yX3NlbGVjdF9mbiAqc2VsZWN0LCB2b2lkICpjYl9kYXRhKTsKKworLyoKKyAqIEFuIGl0ZXJhdG9yIGNvbnNpc3Rpbmcgb2YgdGhlIHVuaW9uIG9mIHRoZSBlbnRyaWVzIGZyb20gZnJvbnQgYW5kCisgKiBiYWNrLiBJZiB0aGVyZSBhcmUgZW50cmllcyBjb21tb24gdG8gdGhlIHR3byBzdWItaXRlcmF0b3JzLCB1c2UgdGhlCisgKiBvbmUgZnJvbSBmcm9udC4gRWFjaCBpdGVyYXRvciBtdXN0IGl0ZXJhdGUgb3ZlciBpdHMgZW50cmllcyBpbgorICogc3RyY21wKCkgb3JkZXIgYnkgcmVmbmFtZSBmb3IgdGhpcyB0byB3b3JrLgorICoKKyAqIFRoZSBuZXcgaXRlcmF0b3IgdGFrZXMgb3duZXJzaGlwIG9mIGl0cyBhcmd1bWVudHMgYW5kIGZyZWVzIHRoZW0KKyAqIHdoZW4gdGhlIGl0ZXJhdGlvbiBpcyBvdmVyLiBBcyBhIGNvbnZlbmllbmNlIHRvIGNhbGxlcnMsIGlmIGZyb250CisgKiBvciBiYWNrIGlzIGFuIGVtcHR5X3JlZl9pdGVyYXRvciwgdGhlbiBhYm9ydCB0aGF0IG9uZSBpbW1lZGlhdGVseQorICogYW5kIHJldHVybiB0aGUgb3RoZXIgaXRlcmF0b3IgZGlyZWN0bHksIHdpdGhvdXQgd3JhcHBpbmcgaXQuCisgKi8KK3N0cnVjdCByZWZfaXRlcmF0b3IgKm92ZXJsYXlfcmVmX2l0ZXJhdG9yX2JlZ2luKAorCQlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpmcm9udCwgc3RydWN0IHJlZl9pdGVyYXRvciAqYmFjayk7CisKKy8qCisgKiBXcmFwIGl0ZXIwLCBvbmx5IGxldHRpbmcgdGhyb3VnaCB0aGUgcmVmZXJlbmNlcyB3aG9zZSBuYW1lcyBzdGFydAorICogd2l0aCBwcmVmaXguIElmIHRyaW0gaXMgc2V0LCBzZXQgaXRlci0+cmVmbmFtZSB0byB0aGUgbmFtZSBvZiB0aGUKKyAqIHJlZmVyZW5jZSB3aXRoIHRoYXQgbWFueSBjaGFyYWN0ZXJzIHRyaW1tZWQgb2ZmIHRoZSBmcm9udDsKKyAqIG90aGVyd2lzZSBzZXQgaXQgdG8gdGhlIGZ1bGwgcmVmbmFtZS4gVGhlIG5ldyBpdGVyYXRvciB0YWtlcyBvdmVyCisgKiBvd25lcnNoaXAgb2YgaXRlcjAgYW5kIGZyZWVzIGl0IHdoZW4gaXRlcmF0aW9uIGlzIG92ZXIuIEl0IG1ha2VzCisgKiBpdHMgb3duIGNvcHkgb2YgcHJlZml4LgorICoKKyAqIEFzIGFuIGNvbnZlbmllbmNlIHRvIGNhbGxlcnMsIGlmIHByZWZpeCBpcyB0aGUgZW1wdHkgc3RyaW5nIGFuZAorICogdHJpbSBpcyB6ZXJvLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgaXRlcjAgZGlyZWN0bHksIHdpdGhvdXQKKyAqIHdyYXBwaW5nIGl0LgorICoKKyAqIFRoZSByZXN1bHRpbmcgcmVmX2l0ZXJhdG9yIGlzIG9yZGVyZWQgaWYgaXRlcjAgaXMuCisgKi8KK3N0cnVjdCByZWZfaXRlcmF0b3IgKnByZWZpeF9yZWZfaXRlcmF0b3JfYmVnaW4oc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcjAsCisJCQkJCSAgICAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCSAgICAgICBpbnQgdHJpbSk7CisKKy8qIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIHJlZmVyZW5jZSBpdGVyYXRpb246ICovCisKKy8qCisgKiBCYXNlIGNsYXNzIGNvbnN0cnVjdG9yIGZvciByZWZfaXRlcmF0b3JzLiBJbml0aWFsaXplIHRoZQorICogcmVmX2l0ZXJhdG9yIHBhcnQgb2YgaXRlciwgc2V0dGluZyBpdHMgdnRhYmxlIHBvaW50ZXIgYXMgc3BlY2lmaWVkLgorICogYG9yZGVyZWRgIHNob3VsZCBiZSBzZXQgdG8gMSBpZiB0aGUgaXRlcmF0b3Igd2lsbCBpdGVyYXRlIG92ZXIKKyAqIHJlZmVyZW5jZXMgaW4gb3JkZXIgYnkgcmVmbmFtZTsgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBzZXQgdG8gMC4KKyAqIFRoaXMgaXMgbWVhbnQgdG8gYmUgY2FsbGVkIG9ubHkgYnkgdGhlIGluaXRpYWxpemVycyBvZiBkZXJpdmVkCisgKiBjbGFzc2VzLgorICovCit2b2lkIGJhc2VfcmVmX2l0ZXJhdG9yX2luaXQoc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlciwKKwkJCSAgICBzdHJ1Y3QgcmVmX2l0ZXJhdG9yX3Z0YWJsZSAqdnRhYmxlLAorCQkJICAgIGludCBvcmRlcmVkKTsKKworLyoKKyAqIEJhc2UgY2xhc3MgZGVzdHJ1Y3RvciBmb3IgcmVmX2l0ZXJhdG9ycy4gRGVzdHJveSB0aGUgcmVmX2l0ZXJhdG9yCisgKiBwYXJ0IG9mIGl0ZXIgYW5kIHNoYWxsb3ctZnJlZSB0aGUgb2JqZWN0LiBUaGlzIGlzIG1lYW50IHRvIGJlCisgKiBjYWxsZWQgb25seSBieSB0aGUgZGVzdHJ1Y3RvcnMgb2YgZGVyaXZlZCBjbGFzc2VzLgorICovCit2b2lkIGJhc2VfcmVmX2l0ZXJhdG9yX2ZyZWUoc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcik7CisKKy8qIFZpcnR1YWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciByZWZfaXRlcmF0b3JzOiAqLworCit0eXBlZGVmIGludCByZWZfaXRlcmF0b3JfYWR2YW5jZV9mbihzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpOworCit0eXBlZGVmIGludCByZWZfaXRlcmF0b3JfcGVlbF9mbihzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IsCisJCQkJIHN0cnVjdCBvYmplY3RfaWQgKnBlZWxlZCk7CisKKy8qCisgKiBJbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgZnJlZSBhbnkgcmVzb3VyY2VzIHNwZWNpZmljCisgKiB0byB0aGUgZGVyaXZlZCBjbGFzcywgdGhlbiBjYWxsIGJhc2VfcmVmX2l0ZXJhdG9yX2ZyZWUoKSB0byBjbGVhbgorICogdXAgYW5kIGZyZWUgdGhlIHJlZl9pdGVyYXRvciBvYmplY3QuCisgKi8KK3R5cGVkZWYgaW50IHJlZl9pdGVyYXRvcl9hYm9ydF9mbihzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpOworCitzdHJ1Y3QgcmVmX2l0ZXJhdG9yX3Z0YWJsZSB7CisJcmVmX2l0ZXJhdG9yX2FkdmFuY2VfZm4gKmFkdmFuY2U7CisJcmVmX2l0ZXJhdG9yX3BlZWxfZm4gKnBlZWw7CisJcmVmX2l0ZXJhdG9yX2Fib3J0X2ZuICphYm9ydDsKK307CisKKy8qCisgKiBjdXJyZW50X3JlZl9pdGVyIGlzIGEgcGVyZm9ybWFuY2UgaGFjazogd2hlbiBpdGVyYXRpbmcgb3ZlcgorICogcmVmZXJlbmNlcyB1c2luZyB0aGUgZm9yX2VhY2hfcmVmKigpIGZ1bmN0aW9ucywgY3VycmVudF9yZWZfaXRlciBpcworICogc2V0IHRvIHRoZSByZWZlcmVuY2UgaXRlcmF0b3IgYmVmb3JlIGNhbGxpbmcgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorICogSWYgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxzIHBlZWxfcmVmKCksIHRoZW4gcGVlbF9yZWYoKSBmaXJzdAorICogY2hlY2tzIHdoZXRoZXIgdGhlIHJlZmVyZW5jZSB0byBiZSBwZWVsZWQgaXMgdGhlIG9uZSByZWZlcnJlZCB0byBieQorICogdGhlIGl0ZXJhdG9yIChpdCB1c3VhbGx5IGlzKSBhbmQgaWYgc28sIGFza3MgdGhlIGl0ZXJhdG9yIGZvciB0aGUKKyAqIHBlZWxlZCB2ZXJzaW9uIG9mIHRoZSByZWZlcmVuY2UgaWYgaXQgaXMgYXZhaWxhYmxlLiBUaGlzIGF2b2lkcyBhCisgKiByZWZuYW1lIGxvb2t1cCBpbiBhIGNvbW1vbiBjYXNlLiBjdXJyZW50X3JlZl9pdGVyIGlzIHNldCB0byBOVUxMCisgKiB3aGVuIHRoZSBpdGVyYXRpb24gaXMgb3Zlci4KKyAqLworZXh0ZXJuIHN0cnVjdCByZWZfaXRlcmF0b3IgKmN1cnJlbnRfcmVmX2l0ZXI7CisKKy8qCisgKiBUaGUgY29tbW9uIGJhY2tlbmQgZm9yIHRoZSBmb3JfZWFjaF8qcmVmKiBmdW5jdGlvbnMuIENhbGwgZm4gZm9yCisgKiBlYWNoIHJlZmVyZW5jZSBpbiBpdGVyLiBJZiB0aGUgaXRlcmF0b3IgaXRzZWxmIGV2ZXIgcmV0dXJucworICogSVRFUl9FUlJPUiwgcmV0dXJuIC0xLiBJZiBmbiBldmVyIHJldHVybnMgYSBub24temVybyB2YWx1ZSwgc3RvcAorICogdGhlIGl0ZXJhdGlvbiBhbmQgcmV0dXJuIHRoYXQgdmFsdWUuIE90aGVyd2lzZSwgcmV0dXJuIDAuIEluIGFueQorICogY2FzZSwgZnJlZSB0aGUgaXRlcmF0b3Igd2hlbiBkb25lLiBUaGlzIGZ1bmN0aW9uIGlzIGJhc2ljYWxseSBhbgorICogYWRhcHRlciBiZXR3ZWVuIHRoZSBjYWxsYmFjayBzdHlsZSBvZiByZWZlcmVuY2UgaXRlcmF0aW9uIGFuZCB0aGUKKyAqIGl0ZXJhdG9yIHN0eWxlLgorICovCitpbnQgZG9fZm9yX2VhY2hfcmVwb19yZWZfaXRlcmF0b3Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgZWFjaF9yZXBvX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CisKKy8qCisgKiBPbmx5IGluY2x1ZGUgcGVyLXdvcmt0cmVlIHJlZnMgaW4gYSBkb19mb3JfZWFjaF9yZWYqKCkgaXRlcmF0aW9uLgorICogTm9ybWFsbHkgdGhpcyB3aWxsIGJlIHVzZWQgd2l0aCBhIGZpbGVzIHJlZl9zdG9yZSwgc2luY2UgdGhhdCdzCisgKiB3aGVyZSBhbGwgcmVmZXJlbmNlIGJhY2tlbmRzIHdpbGwgcHJlc3VtYWJseSBzdG9yZSB0aGVpcgorICogcGVyLXdvcmt0cmVlIHJlZnMuCisgKi8KKyNkZWZpbmUgRE9fRk9SX0VBQ0hfUEVSX1dPUktUUkVFX09OTFkgMHgwMgorCitzdHJ1Y3QgcmVmX3N0b3JlOworCisvKiByZWZzIGJhY2tlbmRzICovCisKKy8qIHJlZl9zdG9yZV9pbml0IGZsYWdzICovCisjZGVmaW5lIFJFRl9TVE9SRV9SRUFECQkoMSA8PCAwKQorI2RlZmluZSBSRUZfU1RPUkVfV1JJVEUJCSgxIDw8IDEpIC8qIGNhbiBwZXJmb3JtIHVwZGF0ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIFJFRl9TVE9SRV9PREIJCSgxIDw8IDIpIC8qIGhhcyBhY2Nlc3MgdG8gb2JqZWN0IGRhdGFiYXNlICovCisjZGVmaW5lIFJFRl9TVE9SRV9NQUlOCQkoMSA8PCAzKQorI2RlZmluZSBSRUZfU1RPUkVfQUxMX0NBUFMJKFJFRl9TVE9SRV9SRUFEIHwgXAorCQkJCSBSRUZfU1RPUkVfV1JJVEUgfCBcCisJCQkJIFJFRl9TVE9SRV9PREIgfCBcCisJCQkJIFJFRl9TVE9SRV9NQUlOKQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgcmVmX3N0b3JlIGZvciB0aGUgc3BlY2lmaWVkIGdpdGRpci4gVGhlc2UgZnVuY3Rpb25zCisgKiBzaG91bGQgY2FsbCBiYXNlX3JlZl9zdG9yZV9pbml0KCkgdG8gaW5pdGlhbGl6ZSB0aGUgc2hhcmVkIHBhcnQgb2YKKyAqIHRoZSByZWZfc3RvcmUgYW5kIHRvIHJlY29yZCB0aGUgcmVmX3N0b3JlIGZvciBsYXRlciBsb29rdXAuCisgKi8KK3R5cGVkZWYgc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlX2luaXRfZm4oY29uc3QgY2hhciAqZ2l0ZGlyLAorCQkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKKwordHlwZWRlZiBpbnQgcmVmX2luaXRfZGJfZm4oc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKwordHlwZWRlZiBpbnQgcmVmX3RyYW5zYWN0aW9uX3ByZXBhcmVfZm4oc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCQkgICAgICAgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKmVycik7CisKK3R5cGVkZWYgaW50IHJlZl90cmFuc2FjdGlvbl9maW5pc2hfZm4oc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCQkgICAgICBzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCit0eXBlZGVmIGludCByZWZfdHJhbnNhY3Rpb25fYWJvcnRfZm4oc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCQkgICAgIHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKwordHlwZWRlZiBpbnQgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdF9mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJCSAgICAgIHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJCSAgICAgIHN0cnVjdCBzdHJidWYgKmVycik7CisKK3R5cGVkZWYgaW50IHBhY2tfcmVmc19mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsIHVuc2lnbmVkIGludCBmbGFncyk7Cit0eXBlZGVmIGludCBjcmVhdGVfc3ltcmVmX2ZuKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCSAgICAgY29uc3QgY2hhciAqcmVmX3RhcmdldCwKKwkJCSAgICAgY29uc3QgY2hhciAqcmVmc19oZWFkc19tYXN0ZXIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmxvZ21zZyk7Cit0eXBlZGVmIGludCBkZWxldGVfcmVmc19mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsIGNvbnN0IGNoYXIgKm1zZywKKwkJCSAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmbmFtZXMsIHVuc2lnbmVkIGludCBmbGFncyk7Cit0eXBlZGVmIGludCByZW5hbWVfcmVmX2ZuKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCSAgY29uc3QgY2hhciAqb2xkcmVmLCBjb25zdCBjaGFyICpuZXdyZWYsCisJCQkgIGNvbnN0IGNoYXIgKmxvZ21zZyk7Cit0eXBlZGVmIGludCBjb3B5X3JlZl9mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkgIGNvbnN0IGNoYXIgKm9sZHJlZiwgY29uc3QgY2hhciAqbmV3cmVmLAorCQkJICBjb25zdCBjaGFyICpsb2dtc2cpOworCisvKgorICogSXRlcmF0ZSBvdmVyIHRoZSByZWZlcmVuY2VzIGluIGByZWZfc3RvcmVgIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGgKKyAqIGBwcmVmaXhgLiBgcHJlZml4YCBpcyBtYXRjaGVkIGFzIGEgbGl0ZXJhbCBzdHJpbmcsIHdpdGhvdXQgcmVnYXJkCisgKiBmb3IgcGF0aCBzZXBhcmF0b3JzLiBJZiBwcmVmaXggaXMgTlVMTCBvciB0aGUgZW1wdHkgc3RyaW5nLCBpdGVyYXRlCisgKiBvdmVyIGFsbCByZWZlcmVuY2VzIGluIGByZWZfc3RvcmVgLiBUaGUgb3V0cHV0IGlzIG9yZGVyZWQgYnkKKyAqIHJlZm5hbWUuCisgKi8KK3R5cGVkZWYgc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yX2JlZ2luX2ZuKAorCQlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCWNvbnN0IGNoYXIgKnByZWZpeCwgdW5zaWduZWQgaW50IGZsYWdzKTsKKworLyogcmVmbG9nIGZ1bmN0aW9ucyAqLworCisvKgorICogSXRlcmF0ZSBvdmVyIHRoZSByZWZlcmVuY2VzIGluIHRoZSBzcGVjaWZpZWQgcmVmX3N0b3JlIHRoYXQgaGF2ZSBhCisgKiByZWZsb2cuIFRoZSByZWZzIGFyZSBpdGVyYXRlZCBvdmVyIGluIGFyYml0cmFyeSBvcmRlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZsb2dfaXRlcmF0b3JfYmVnaW5fZm4oCisJCXN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSk7CisKK3R5cGVkZWYgaW50IGZvcl9lYWNoX3JlZmxvZ19lbnRfZm4oc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJCSAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJICAgZWFjaF9yZWZsb2dfZW50X2ZuIGZuLAorCQkJCSAgIHZvaWQgKmNiX2RhdGEpOwordHlwZWRlZiBpbnQgZm9yX2VhY2hfcmVmbG9nX2VudF9yZXZlcnNlX2ZuKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkJICAgZWFjaF9yZWZsb2dfZW50X2ZuIGZuLAorCQkJCQkgICB2b2lkICpjYl9kYXRhKTsKK3R5cGVkZWYgaW50IHJlZmxvZ19leGlzdHNfZm4oc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLCBjb25zdCBjaGFyICpyZWZuYW1lKTsKK3R5cGVkZWYgaW50IGNyZWF0ZV9yZWZsb2dfZm4oc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgICBpbnQgZm9yY2VfY3JlYXRlLCBzdHJ1Y3Qgc3RyYnVmICplcnIpOwordHlwZWRlZiBpbnQgZGVsZXRlX3JlZmxvZ19mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsIGNvbnN0IGNoYXIgKnJlZm5hbWUpOwordHlwZWRlZiBpbnQgcmVmbG9nX2V4cGlyZV9mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJICAgICByZWZsb2dfZXhwaXJ5X3ByZXBhcmVfZm4gcHJlcGFyZV9mbiwKKwkJCSAgICAgcmVmbG9nX2V4cGlyeV9zaG91bGRfcHJ1bmVfZm4gc2hvdWxkX3BydW5lX2ZuLAorCQkJICAgICByZWZsb2dfZXhwaXJ5X2NsZWFudXBfZm4gY2xlYW51cF9mbiwKKwkJCSAgICAgdm9pZCAqcG9saWN5X2NiX2RhdGEpOworCisvKgorICogUmVhZCBhIHJlZmVyZW5jZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlIHN0b3JlLCBub24tcmVjdXJzaXZlbHkuCisgKiBTZXQgdHlwZSB0byBkZXNjcmliZSB0aGUgcmVmZXJlbmNlLCBhbmQ6CisgKgorICogLSBJZiByZWZuYW1lIGlzIHRoZSBuYW1lIG9mIGEgbm9ybWFsIHJlZmVyZW5jZSwgZmlsbCBpbiBvaWQKKyAqICAgKGxlYXZpbmcgcmVmZXJlbnQgdW5jaGFuZ2VkKS4KKyAqCisgKiAtIElmIHJlZm5hbWUgaXMgdGhlIG5hbWUgb2YgYSBzeW1ib2xpYyByZWZlcmVuY2UsIHdyaXRlIHRoZSBmdWxsCisgKiAgIG5hbWUgb2YgdGhlIHJlZmVyZW5jZSB0byB3aGljaCBpdCByZWZlcnMgKGUuZy4KKyAqICAgInJlZnMvaGVhZHMvbWFzdGVyIikgdG8gcmVmZXJlbnQgYW5kIHNldCB0aGUgUkVGX0lTU1lNUkVGIGJpdCBpbgorICogICB0eXBlIChsZWF2aW5nIG9pZCB1bmNoYW5nZWQpLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorICogICB2YWxpZGF0aW5nIHRoYXQgcmVmZXJlbnQgaXMgYSB2YWxpZCByZWZlcmVuY2UgbmFtZS4KKyAqCisgKiBXQVJOSU5HOiByZWZuYW1lIG1pZ2h0IGJlIHVzZWQgYXMgcGFydCBvZiBhIGZpbGVuYW1lLCBzbyBpdCBpcworICogaW1wb3J0YW50IGZyb20gYSBzZWN1cml0eSBzdGFuZHBvaW50IHRoYXQgaXQgYmUgc2FmZSBpbiB0aGUgc2Vuc2UKKyAqIG9mIHJlZm5hbWVfaXNfc2FmZSgpLiBNb3Jlb3ZlciwgZm9yIHN5bXJlZnMgdGhpcyBmdW5jdGlvbiBzZXRzCisgKiByZWZlcmVudCB0byB3aGF0ZXZlciB0aGUgcmVwb3NpdG9yeSBzYXlzLCB3aGljaCBtaWdodCBub3QgYmUgYQorICogcHJvcGVybHktZm9ybWF0dGVkIG9yIGV2ZW4gc2FmZSByZWZlcmVuY2UgbmFtZS4gTkVJVEhFUiBJTlBVVCBOT1IKKyAqIE9VVFBVVCBSRUZFUkVOQ0UgTkFNRVMgQVJFIFZBTElEQVRFRCBXSVRISU4gVEhJUyBGVU5DVElPTi4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLiBJZiB0aGUgcmVmIGRvZXNuJ3QgZXhpc3QsIHNldCBlcnJubyB0byBFTk9FTlQKKyAqIGFuZCByZXR1cm4gLTEuIElmIHRoZSByZWYgZXhpc3RzIGJ1dCBpcyBuZWl0aGVyIGEgc3ltYm9saWMgcmVmIG5vcgorICogYW4gb2JqZWN0IElELCBpdCBpcyBicm9rZW47IHNldCBSRUZfSVNCUk9LRU4gaW4gdHlwZSwgc2V0IGVycm5vIHRvCisgKiBFSU5WQUwsIGFuZCByZXR1cm4gLTEuIElmIHRoZXJlIGlzIGFub3RoZXIgZXJyb3IgcmVhZGluZyB0aGUgcmVmLAorICogc2V0IGVycm5vIGFwcHJvcHJpYXRlbHkgYW5kIHJldHVybiAtMS4KKyAqCisgKiBCYWNrZW5kLXNwZWNpZmljIGZsYWdzIG1pZ2h0IGJlIHNldCBpbiB0eXBlIGFzIHdlbGwsIHJlZ2FyZGxlc3Mgb2YKKyAqIG91dGNvbWUuCisgKgorICogSXQgaXMgT0sgZm9yIHJlZm5hbWUgdG8gcG9pbnQgaW50byByZWZlcmVudC4gSWYgc286CisgKgorICogLSBpZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMgd2l0aCBSRUZfSVNTWU1SRUYsIHJlZmVyZW50IHdpbGwgYmUKKyAqICAgb3ZlcndyaXR0ZW4gYW5kIHRoZSBtZW1vcnkgZm9ybWVybHkgcG9pbnRlZCB0byBieSBpdCBtaWdodCBiZQorICogICBjaGFuZ2VkIG9yIGV2ZW4gZnJlZWQuCisgKgorICogLSBpbiBhbGwgb3RoZXIgY2FzZXMsIHJlZmVyZW50IHdpbGwgYmUgdW50b3VjaGVkLCBhbmQgdGhlcmVmb3JlCisgKiAgIHJlZm5hbWUgd2lsbCBzdGlsbCBiZSB2YWxpZCBhbmQgdW5jaGFuZ2VkLgorICovCit0eXBlZGVmIGludCByZWFkX3Jhd19yZWZfZm4oc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpyZWZlcmVudCwgdW5zaWduZWQgaW50ICp0eXBlKTsKKworc3RydWN0IHJlZl9zdG9yYWdlX2JlIHsKKwlzdHJ1Y3QgcmVmX3N0b3JhZ2VfYmUgKm5leHQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwlyZWZfc3RvcmVfaW5pdF9mbiAqaW5pdDsKKwlyZWZfaW5pdF9kYl9mbiAqaW5pdF9kYjsKKworCXJlZl90cmFuc2FjdGlvbl9wcmVwYXJlX2ZuICp0cmFuc2FjdGlvbl9wcmVwYXJlOworCXJlZl90cmFuc2FjdGlvbl9maW5pc2hfZm4gKnRyYW5zYWN0aW9uX2ZpbmlzaDsKKwlyZWZfdHJhbnNhY3Rpb25fYWJvcnRfZm4gKnRyYW5zYWN0aW9uX2Fib3J0OworCXJlZl90cmFuc2FjdGlvbl9jb21taXRfZm4gKmluaXRpYWxfdHJhbnNhY3Rpb25fY29tbWl0OworCisJcGFja19yZWZzX2ZuICpwYWNrX3JlZnM7CisJY3JlYXRlX3N5bXJlZl9mbiAqY3JlYXRlX3N5bXJlZjsKKwlkZWxldGVfcmVmc19mbiAqZGVsZXRlX3JlZnM7CisJcmVuYW1lX3JlZl9mbiAqcmVuYW1lX3JlZjsKKwljb3B5X3JlZl9mbiAqY29weV9yZWY7CisKKwlyZWZfaXRlcmF0b3JfYmVnaW5fZm4gKml0ZXJhdG9yX2JlZ2luOworCXJlYWRfcmF3X3JlZl9mbiAqcmVhZF9yYXdfcmVmOworCisJcmVmbG9nX2l0ZXJhdG9yX2JlZ2luX2ZuICpyZWZsb2dfaXRlcmF0b3JfYmVnaW47CisJZm9yX2VhY2hfcmVmbG9nX2VudF9mbiAqZm9yX2VhY2hfcmVmbG9nX2VudDsKKwlmb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2VfZm4gKmZvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZTsKKwlyZWZsb2dfZXhpc3RzX2ZuICpyZWZsb2dfZXhpc3RzOworCWNyZWF0ZV9yZWZsb2dfZm4gKmNyZWF0ZV9yZWZsb2c7CisJZGVsZXRlX3JlZmxvZ19mbiAqZGVsZXRlX3JlZmxvZzsKKwlyZWZsb2dfZXhwaXJlX2ZuICpyZWZsb2dfZXhwaXJlOworfTsKKworZXh0ZXJuIHN0cnVjdCByZWZfc3RvcmFnZV9iZSByZWZzX2JlX2ZpbGVzOworZXh0ZXJuIHN0cnVjdCByZWZfc3RvcmFnZV9iZSByZWZzX2JlX3BhY2tlZDsKKworLyoKKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlZmVyZW5jZSBzdG9yZSBmb3IgdGhlIG1haW4gcmVwb3NpdG9yeSBvcgorICogYSBzdWJtb2R1bGUuIFRoZSByZWZfc3RvcmUgaW5zdGFuY2VzIGZvciBzdWJtb2R1bGVzIGFyZSBrZXB0IGluIGEKKyAqIGxpbmtlZCBsaXN0LgorICovCitzdHJ1Y3QgcmVmX3N0b3JlIHsKKwkvKiBUaGUgYmFja2VuZCBkZXNjcmliaW5nIHRoaXMgcmVmX3N0b3JlJ3Mgc3RvcmFnZSBzY2hlbWU6ICovCisJY29uc3Qgc3RydWN0IHJlZl9zdG9yYWdlX2JlICpiZTsKK307CisKKy8qCisgKiBGaWxsIGluIHRoZSBnZW5lcmljIHBhcnQgb2YgcmVmcyBhbmQgYWRkIGl0IHRvIG91ciBjb2xsZWN0aW9uIG9mCisgKiByZWZlcmVuY2Ugc3RvcmVzLgorICovCit2b2lkIGJhc2VfcmVmX3N0b3JlX2luaXQoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCSBjb25zdCBzdHJ1Y3QgcmVmX3N0b3JhZ2VfYmUgKmJlKTsKKworI2VuZGlmIC8qIFJFRlNfUkVGU19JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9yZWZzcGVjLmMgYi9yZWZzcGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5YmYyMQotLS0gL2Rldi9udWxsCisrKyBiL3JlZnNwZWMuYwpAQCAtMCwwICsxLDIzMiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZWZzcGVjLmgiCisKK3N0YXRpYyBzdHJ1Y3QgcmVmc3BlY19pdGVtIHNfdGFnX3JlZnNwZWMgPSB7CisJMCwKKwkxLAorCTAsCisJMCwKKwkicmVmcy90YWdzLyoiLAorCSJyZWZzL3RhZ3MvKiIKK307CisKKy8qIFNlZSBUQUdfUkVGU1BFQyBmb3IgdGhlIHN0cmluZyB2ZXJzaW9uICovCitjb25zdCBzdHJ1Y3QgcmVmc3BlY19pdGVtICp0YWdfcmVmc3BlYyA9ICZzX3RhZ19yZWZzcGVjOworCisvKgorICogUGFyc2VzIHRoZSBwcm92aWRlZCByZWZzcGVjICdyZWZzcGVjJyBhbmQgcG9wdWxhdGVzIHRoZSByZWZzcGVjX2l0ZW0gJ2l0ZW0nLgorICogUmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgYW5kIDAgaWYgdGhlIHJlZnNwZWMgaXMgaW52YWxpZC4KKyAqLworc3RhdGljIGludCBwYXJzZV9yZWZzcGVjKHN0cnVjdCByZWZzcGVjX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKnJlZnNwZWMsIGludCBmZXRjaCkKK3sKKwlzaXplX3QgbGxlbjsKKwlpbnQgaXNfZ2xvYjsKKwljb25zdCBjaGFyICpsaHMsICpyaHM7CisJaW50IGZsYWdzOworCisJaXNfZ2xvYiA9IDA7CisKKwlsaHMgPSByZWZzcGVjOworCWlmICgqbGhzID09ICcrJykgeworCQlpdGVtLT5mb3JjZSA9IDE7CisJCWxocysrOworCX0KKworCXJocyA9IHN0cnJjaHIobGhzLCAnOicpOworCisJLyoKKwkgKiBCZWZvcmUgZ29pbmcgb24sIHNwZWNpYWwgY2FzZSAiOiIgKG9yICIrOiIpIGFzIGEgcmVmc3BlYworCSAqIGZvciBwdXNoaW5nIG1hdGNoaW5nIHJlZnMuCisJICovCisJaWYgKCFmZXRjaCAmJiByaHMgPT0gbGhzICYmIHJoc1sxXSA9PSAnXDAnKSB7CisJCWl0ZW0tPm1hdGNoaW5nID0gMTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHJocykgeworCQlzaXplX3QgcmxlbiA9IHN0cmxlbigrK3Jocyk7CisJCWlzX2dsb2IgPSAoMSA8PSBybGVuICYmIHN0cmNocihyaHMsICcqJykpOworCQlpdGVtLT5kc3QgPSB4c3RybmR1cChyaHMsIHJsZW4pOworCX0gZWxzZSB7CisJCWl0ZW0tPmRzdCA9IE5VTEw7CisJfQorCisJbGxlbiA9IChyaHMgPyAocmhzIC0gbGhzIC0gMSkgOiBzdHJsZW4obGhzKSk7CisJaWYgKDEgPD0gbGxlbiAmJiBtZW1jaHIobGhzLCAnKicsIGxsZW4pKSB7CisJCWlmICgocmhzICYmICFpc19nbG9iKSB8fCAoIXJocyAmJiBmZXRjaCkpCisJCQlyZXR1cm4gMDsKKwkJaXNfZ2xvYiA9IDE7CisJfSBlbHNlIGlmIChyaHMgJiYgaXNfZ2xvYikgeworCQlyZXR1cm4gMDsKKwl9CisKKwlpdGVtLT5wYXR0ZXJuID0gaXNfZ2xvYjsKKwlpdGVtLT5zcmMgPSB4c3RybmR1cChsaHMsIGxsZW4pOworCWZsYWdzID0gUkVGTkFNRV9BTExPV19PTkVMRVZFTCB8IChpc19nbG9iID8gUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4gOiAwKTsKKworCWlmIChmZXRjaCkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIHVudXNlZDsKKworCQkvKiBMSFMgKi8KKwkJaWYgKCEqaXRlbS0+c3JjKQorCQkJOyAvKiBlbXB0eSBpcyBvazsgaXQgbWVhbnMgIkhFQUQiICovCisJCWVsc2UgaWYgKGxsZW4gPT0gdGhlX2hhc2hfYWxnby0+aGV4c3ogJiYgIWdldF9vaWRfaGV4KGl0ZW0tPnNyYywgJnVudXNlZCkpCisJCQlpdGVtLT5leGFjdF9zaGExID0gMTsgLyogb2sgKi8KKwkJZWxzZSBpZiAoIWNoZWNrX3JlZm5hbWVfZm9ybWF0KGl0ZW0tPnNyYywgZmxhZ3MpKQorCQkJOyAvKiB2YWxpZCBsb29raW5nIHJlZiBpcyBvayAqLworCQllbHNlCisJCQlyZXR1cm4gMDsKKwkJLyogUkhTICovCisJCWlmICghaXRlbS0+ZHN0KQorCQkJOyAvKiBtaXNzaW5nIGlzIG9rOyBpdCBpcyB0aGUgc2FtZSBhcyBlbXB0eSAqLworCQllbHNlIGlmICghKml0ZW0tPmRzdCkKKwkJCTsgLyogZW1wdHkgaXMgb2s7IGl0IG1lYW5zICJkbyBub3Qgc3RvcmUiICovCisJCWVsc2UgaWYgKCFjaGVja19yZWZuYW1lX2Zvcm1hdChpdGVtLT5kc3QsIGZsYWdzKSkKKwkJCTsgLyogdmFsaWQgbG9va2luZyByZWYgaXMgb2sgKi8KKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogTEhTCisJCSAqIC0gZW1wdHkgaXMgYWxsb3dlZDsgaXQgbWVhbnMgZGVsZXRlLgorCQkgKiAtIHdoZW4gd2lsZGNhcmRlZCwgaXQgbXVzdCBiZSBhIHZhbGlkIGxvb2tpbmcgcmVmLgorCQkgKiAtIG90aGVyd2lzZSwgaXQgbXVzdCBiZSBhbiBleHRlbmRlZCBTSEEtMSwgYnV0CisJCSAqICAgdGhlcmUgaXMgbm8gZXhpc3Rpbmcgd2F5IHRvIHZhbGlkYXRlIHRoaXMuCisJCSAqLworCQlpZiAoISppdGVtLT5zcmMpCisJCQk7IC8qIGVtcHR5IGlzIG9rICovCisJCWVsc2UgaWYgKGlzX2dsb2IpIHsKKwkJCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChpdGVtLT5zcmMsIGZsYWdzKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQllbHNlCisJCQk7IC8qIGFueXRoaW5nIGdvZXMsIGZvciBub3cgKi8KKwkJLyoKKwkJICogUkhTCisJCSAqIC0gbWlzc2luZyBpcyBhbGxvd2VkLCBidXQgTEhTIHRoZW4gbXVzdCBiZSBhCisJCSAqICAgdmFsaWQgbG9va2luZyByZWYuCisJCSAqIC0gZW1wdHkgaXMgbm90IGFsbG93ZWQuCisJCSAqIC0gb3RoZXJ3aXNlIGl0IG11c3QgYmUgYSB2YWxpZCBsb29raW5nIHJlZi4KKwkJICovCisJCWlmICghaXRlbS0+ZHN0KSB7CisJCQlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQoaXRlbS0+c3JjLCBmbGFncykpCisJCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAoISppdGVtLT5kc3QpIHsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KGl0ZW0tPmRzdCwgZmxhZ3MpKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKK2ludCByZWZzcGVjX2l0ZW1faW5pdChzdHJ1Y3QgcmVmc3BlY19pdGVtICppdGVtLCBjb25zdCBjaGFyICpyZWZzcGVjLCBpbnQgZmV0Y2gpCit7CisJbWVtc2V0KGl0ZW0sIDAsIHNpemVvZigqaXRlbSkpOworCXJldHVybiBwYXJzZV9yZWZzcGVjKGl0ZW0sIHJlZnNwZWMsIGZldGNoKTsKK30KKwordm9pZCByZWZzcGVjX2l0ZW1faW5pdF9vcl9kaWUoc3RydWN0IHJlZnNwZWNfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqcmVmc3BlYywKKwkJCSAgICAgIGludCBmZXRjaCkKK3sKKwlpZiAoIXJlZnNwZWNfaXRlbV9pbml0KGl0ZW0sIHJlZnNwZWMsIGZldGNoKSkKKwkJZGllKF8oImludmFsaWQgcmVmc3BlYyAnJXMnIiksIHJlZnNwZWMpOworfQorCit2b2lkIHJlZnNwZWNfaXRlbV9jbGVhcihzdHJ1Y3QgcmVmc3BlY19pdGVtICppdGVtKQoreworCUZSRUVfQU5EX05VTEwoaXRlbS0+c3JjKTsKKwlGUkVFX0FORF9OVUxMKGl0ZW0tPmRzdCk7CisJaXRlbS0+Zm9yY2UgPSAwOworCWl0ZW0tPnBhdHRlcm4gPSAwOworCWl0ZW0tPm1hdGNoaW5nID0gMDsKKwlpdGVtLT5leGFjdF9zaGExID0gMDsKK30KKwordm9pZCByZWZzcGVjX2luaXQoc3RydWN0IHJlZnNwZWMgKnJzLCBpbnQgZmV0Y2gpCit7CisJbWVtc2V0KHJzLCAwLCBzaXplb2YoKnJzKSk7CisJcnMtPmZldGNoID0gZmV0Y2g7Cit9CisKK3ZvaWQgcmVmc3BlY19hcHBlbmQoc3RydWN0IHJlZnNwZWMgKnJzLCBjb25zdCBjaGFyICpyZWZzcGVjKQoreworCXN0cnVjdCByZWZzcGVjX2l0ZW0gaXRlbTsKKworCXJlZnNwZWNfaXRlbV9pbml0X29yX2RpZSgmaXRlbSwgcmVmc3BlYywgcnMtPmZldGNoKTsKKworCUFMTE9DX0dST1cocnMtPml0ZW1zLCBycy0+bnIgKyAxLCBycy0+YWxsb2MpOworCXJzLT5pdGVtc1tycy0+bnIrK10gPSBpdGVtOworCisJQUxMT0NfR1JPVyhycy0+cmF3LCBycy0+cmF3X25yICsgMSwgcnMtPnJhd19hbGxvYyk7CisJcnMtPnJhd1tycy0+cmF3X25yKytdID0geHN0cmR1cChyZWZzcGVjKTsKK30KKwordm9pZCByZWZzcGVjX2FwcGVuZG4oc3RydWN0IHJlZnNwZWMgKnJzLCBjb25zdCBjaGFyICoqcmVmc3BlY3MsIGludCBucikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKwkJcmVmc3BlY19hcHBlbmQocnMsIHJlZnNwZWNzW2ldKTsKK30KKwordm9pZCByZWZzcGVjX2NsZWFyKHN0cnVjdCByZWZzcGVjICpycykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBycy0+bnI7IGkrKykKKwkJcmVmc3BlY19pdGVtX2NsZWFyKCZycy0+aXRlbXNbaV0pOworCisJRlJFRV9BTkRfTlVMTChycy0+aXRlbXMpOworCXJzLT5hbGxvYyA9IDA7CisJcnMtPm5yID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBycy0+cmF3X25yOyBpKyspCisJCWZyZWUoKGNoYXIgKilycy0+cmF3W2ldKTsKKwlGUkVFX0FORF9OVUxMKHJzLT5yYXcpOworCXJzLT5yYXdfYWxsb2MgPSAwOworCXJzLT5yYXdfbnIgPSAwOworCisJcnMtPmZldGNoID0gMDsKK30KKworaW50IHZhbGlkX2ZldGNoX3JlZnNwZWMoY29uc3QgY2hhciAqZmV0Y2hfcmVmc3BlY19zdHIpCit7CisJc3RydWN0IHJlZnNwZWNfaXRlbSByZWZzcGVjOworCWludCByZXQgPSByZWZzcGVjX2l0ZW1faW5pdCgmcmVmc3BlYywgZmV0Y2hfcmVmc3BlY19zdHIsIFJFRlNQRUNfRkVUQ0gpOworCXJlZnNwZWNfaXRlbV9jbGVhcigmcmVmc3BlYyk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZWZzcGVjX3JlZl9wcmVmaXhlcyhjb25zdCBzdHJ1Y3QgcmVmc3BlYyAqcnMsCisJCQkgIHN0cnVjdCBhcmd2X2FycmF5ICpyZWZfcHJlZml4ZXMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHJzLT5ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCByZWZzcGVjX2l0ZW0gKml0ZW0gPSAmcnMtPml0ZW1zW2ldOworCQljb25zdCBjaGFyICpwcmVmaXggPSBOVUxMOworCisJCWlmIChpdGVtLT5leGFjdF9zaGExKQorCQkJY29udGludWU7CisJCWlmIChycy0+ZmV0Y2ggPT0gUkVGU1BFQ19GRVRDSCkKKwkJCXByZWZpeCA9IGl0ZW0tPnNyYzsKKwkJZWxzZSBpZiAoaXRlbS0+ZHN0KQorCQkJcHJlZml4ID0gaXRlbS0+ZHN0OworCQllbHNlIGlmIChpdGVtLT5zcmMgJiYgIWl0ZW0tPmV4YWN0X3NoYTEpCisJCQlwcmVmaXggPSBpdGVtLT5zcmM7CisKKwkJaWYgKHByZWZpeCkgeworCQkJaWYgKGl0ZW0tPnBhdHRlcm4pIHsKKwkJCQljb25zdCBjaGFyICpnbG9iID0gc3RyY2hyKHByZWZpeCwgJyonKTsKKwkJCQlhcmd2X2FycmF5X3B1c2hmKHJlZl9wcmVmaXhlcywgIiUuKnMiLAorCQkJCQkJIChpbnQpKGdsb2IgLSBwcmVmaXgpLAorCQkJCQkJIHByZWZpeCk7CisJCQl9IGVsc2UgeworCQkJCWV4cGFuZF9yZWZfcHJlZml4KHJlZl9wcmVmaXhlcywgcHJlZml4KTsKKwkJCX0KKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL3JlZnNwZWMuaCBiL3JlZnNwZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjJiZDRhCi0tLSAvZGV2L251bGwKKysrIGIvcmVmc3BlYy5oCkBAIC0wLDAgKzEsNzEgQEAKKyNpZm5kZWYgUkVGU1BFQ19ICisjZGVmaW5lIFJFRlNQRUNfSAorCisjZGVmaW5lIFRBR19SRUZTUEVDICJyZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKiIKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVmc3BlY19pdGVtICp0YWdfcmVmc3BlYzsKKworc3RydWN0IHJlZnNwZWNfaXRlbSB7CisJdW5zaWduZWQgZm9yY2UgOiAxOworCXVuc2lnbmVkIHBhdHRlcm4gOiAxOworCXVuc2lnbmVkIG1hdGNoaW5nIDogMTsKKwl1bnNpZ25lZCBleGFjdF9zaGExIDogMTsKKworCWNoYXIgKnNyYzsKKwljaGFyICpkc3Q7Cit9OworCisjZGVmaW5lIFJFRlNQRUNfRkVUQ0ggMQorI2RlZmluZSBSRUZTUEVDX1BVU0ggMAorCisjZGVmaW5lIFJFRlNQRUNfSU5JVF9GRVRDSCB7IC5mZXRjaCA9IFJFRlNQRUNfRkVUQ0ggfQorI2RlZmluZSBSRUZTUEVDX0lOSVRfUFVTSCB7IC5mZXRjaCA9IFJFRlNQRUNfUFVTSCB9CisKKy8qKgorICogQSBzdHJ1Y3QgcmVmc3BlYyBob2xkcyB0aGUgcGFyc2VkIGludGVycHJldGF0aW9uIG9mIGEgcmVmc3BlYy4gIElmIGl0IHdpbGwKKyAqIGZvcmNlIHVwZGF0ZXMgKHN0YXJ0cyB3aXRoIGEgJysnKSwgZm9yY2UgaXMgdHJ1ZS4gIElmIGl0IGlzIGEgcGF0dGVybgorICogKHNpZGVzIGVuZCB3aXRoICcqJykgcGF0dGVybiBpcyB0cnVlLiAgc3JjIGFuZCBkZXN0IGFyZSB0aGUgdHdvIHNpZGVzCisgKiAoaW5jbHVkaW5nICcqJyBjaGFyYWN0ZXJzIGlmIHByZXNlbnQpOyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzaWRlLCBpdCBpcyBzcmMsCisgKiBhbmQgZHN0IGlzIE5VTEw7IGlmIHNpZGVzIGV4aXN0IGJ1dCBhcmUgZW1wdHkgKGkuZS4sIHRoZSByZWZzcGVjIGVpdGhlcgorICogc3RhcnRzIG9yIGVuZHMgd2l0aCAnOicpLCB0aGUgY29ycmVzcG9uZGluZyBzaWRlIGlzICIiLgorICoKKyAqIEFuIGFycmF5IG9mIHN0cmluZ3MgY2FuIGJlIHBhcnNlZCBpbnRvIGFuIGFycmF5IG9mIHN0cnVjdCByZWZzcGVjcyB1c2luZworICogcGFyc2VfZmV0Y2hfcmVmc3BlYygpIG9yIHBhcnNlX3B1c2hfcmVmc3BlYygpLgorICoKKyAqIHJlbW90ZV9maW5kX3RyYWNraW5nKCksIGdpdmVuIGEgcmVtb3RlIGFuZCBhIHN0cnVjdCByZWZzcGVjIHdpdGggZWl0aGVyIHNyYworICogb3IgZHN0IGZpbGxlZCBvdXQsIHdpbGwgZmlsbCBvdXQgdGhlIG90aGVyIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGlzIGluIHRoZQorICogImZldGNoIiBzcGVjaWZpY2F0aW9uIGZvciB0aGUgcmVtb3RlIChub3RlIHRoYXQgdGhpcyBldmFsdWF0ZXMgcGF0dGVybnMgYW5kCisgKiByZXR1cm5zIGEgc2luZ2xlIHJlc3VsdCkuCisgKi8KK3N0cnVjdCByZWZzcGVjIHsKKwlzdHJ1Y3QgcmVmc3BlY19pdGVtICppdGVtczsKKwlpbnQgYWxsb2M7CisJaW50IG5yOworCisJY29uc3QgY2hhciAqKnJhdzsKKwlpbnQgcmF3X2FsbG9jOworCWludCByYXdfbnI7CisKKwlpbnQgZmV0Y2g7Cit9OworCitpbnQgcmVmc3BlY19pdGVtX2luaXQoc3RydWN0IHJlZnNwZWNfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqcmVmc3BlYywKKwkJICAgICAgaW50IGZldGNoKTsKK3ZvaWQgcmVmc3BlY19pdGVtX2luaXRfb3JfZGllKHN0cnVjdCByZWZzcGVjX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKnJlZnNwZWMsCisJCQkgICAgICBpbnQgZmV0Y2gpOwordm9pZCByZWZzcGVjX2l0ZW1fY2xlYXIoc3RydWN0IHJlZnNwZWNfaXRlbSAqaXRlbSk7Cit2b2lkIHJlZnNwZWNfaW5pdChzdHJ1Y3QgcmVmc3BlYyAqcnMsIGludCBmZXRjaCk7Cit2b2lkIHJlZnNwZWNfYXBwZW5kKHN0cnVjdCByZWZzcGVjICpycywgY29uc3QgY2hhciAqcmVmc3BlYyk7Cit2b2lkIHJlZnNwZWNfYXBwZW5kbihzdHJ1Y3QgcmVmc3BlYyAqcnMsIGNvbnN0IGNoYXIgKipyZWZzcGVjcywgaW50IG5yKTsKK3ZvaWQgcmVmc3BlY19jbGVhcihzdHJ1Y3QgcmVmc3BlYyAqcnMpOworCitpbnQgdmFsaWRfZmV0Y2hfcmVmc3BlYyhjb25zdCBjaGFyICpyZWZzcGVjKTsKKworc3RydWN0IGFyZ3ZfYXJyYXk7CisvKgorICogRGV0ZXJtaW5lIHdoYXQgPHByZWZpeD4gdmFsdWVzIHRvIHBhc3MgdG8gdGhlIHBlZXIgaW4gcmVmLXByZWZpeCBsaW5lcworICogKHNlZSBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC12Mi50eHQpLgorICovCit2b2lkIHJlZnNwZWNfcmVmX3ByZWZpeGVzKGNvbnN0IHN0cnVjdCByZWZzcGVjICpycywKKwkJCSAgc3RydWN0IGFyZ3ZfYXJyYXkgKnJlZl9wcmVmaXhlcyk7CisKKyNlbmRpZiAvKiBSRUZTUEVDX0ggKi8KZGlmZiAtLWdpdCBhL3JlbW90ZS1jdXJsLmMgYi9yZW1vdGUtY3VybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjOWFhM2QKLS0tIC9kZXYvbnVsbAorKysgYi9yZW1vdGUtY3VybC5jCkBAIC0wLDAgKzEsMTQ1NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgIndhbGtlci5oIgorI2luY2x1ZGUgImh0dHAuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgImNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJvaWQtYXJyYXkuaCIKKyNpbmNsdWRlICJzZW5kLXBhY2suaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisKK3N0YXRpYyBzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisvKiBhbHdheXMgZW5kcyB3aXRoIGEgdHJhaWxpbmcgc2xhc2ggKi8KK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHVybCA9IFNUUkJVRl9JTklUOworCitzdHJ1Y3Qgb3B0aW9ucyB7CisJaW50IHZlcmJvc2l0eTsKKwl1bnNpZ25lZCBsb25nIGRlcHRoOworCWNoYXIgKmRlZXBlbl9zaW5jZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZGVlcGVuX25vdDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcHVzaF9vcHRpb25zOworCWNoYXIgKmZpbHRlcjsKKwl1bnNpZ25lZCBwcm9ncmVzcyA6IDEsCisJCWNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgOiAxLAorCQljbG9uaW5nIDogMSwKKwkJdXBkYXRlX3NoYWxsb3cgOiAxLAorCQlmb2xsb3d0YWdzIDogMSwKKwkJZHJ5X3J1biA6IDEsCisJCXRoaW4gOiAxLAorCQkvKiBPbmUgb2YgdGhlIFNFTkRfUEFDS19QVVNIX0NFUlRfKiBjb25zdGFudHMuICovCisJCXB1c2hfY2VydCA6IDIsCisJCWRlZXBlbl9yZWxhdGl2ZSA6IDEsCisJCWZyb21fcHJvbWlzb3IgOiAxLAorCQlub19kZXBlbmRlbnRzIDogMSwKKwkJYXRvbWljIDogMTsKK307CitzdGF0aWMgc3RydWN0IG9wdGlvbnMgb3B0aW9uczsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgY2FzX29wdGlvbnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworc3RhdGljIGludCBzZXRfb3B0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKG5hbWUsICJ2ZXJib3NpdHkiKSkgeworCQljaGFyICplbmQ7CisJCWludCB2ID0gc3RydG9sKHZhbHVlLCAmZW5kLCAxMCk7CisJCWlmICh2YWx1ZSA9PSBlbmQgfHwgKmVuZCkKKwkJCXJldHVybiAtMTsKKwkJb3B0aW9ucy52ZXJib3NpdHkgPSB2OworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAicHJvZ3Jlc3MiKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgInRydWUiKSkKKwkJCW9wdGlvbnMucHJvZ3Jlc3MgPSAxOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiZmFsc2UiKSkKKwkJCW9wdGlvbnMucHJvZ3Jlc3MgPSAwOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwllbHNlIGlmICghc3RyY21wKG5hbWUsICJkZXB0aCIpKSB7CisJCWNoYXIgKmVuZDsKKwkJdW5zaWduZWQgbG9uZyB2ID0gc3RydG91bCh2YWx1ZSwgJmVuZCwgMTApOworCQlpZiAodmFsdWUgPT0gZW5kIHx8ICplbmQpCisJCQlyZXR1cm4gLTE7CisJCW9wdGlvbnMuZGVwdGggPSB2OworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZGVlcGVuLXNpbmNlIikpIHsKKwkJb3B0aW9ucy5kZWVwZW5fc2luY2UgPSB4c3RyZHVwKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImRlZXBlbi1ub3QiKSkgeworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJm9wdGlvbnMuZGVlcGVuX25vdCwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZGVlcGVuLXJlbGF0aXZlIikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLmRlZXBlbl9yZWxhdGl2ZSA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJmYWxzZSIpKQorCQkJb3B0aW9ucy5kZWVwZW5fcmVsYXRpdmUgPSAwOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwllbHNlIGlmICghc3RyY21wKG5hbWUsICJmb2xsb3d0YWdzIikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLmZvbGxvd3RhZ3MgPSAxOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiZmFsc2UiKSkKKwkJCW9wdGlvbnMuZm9sbG93dGFncyA9IDA7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImRyeS1ydW4iKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgInRydWUiKSkKKwkJCW9wdGlvbnMuZHJ5X3J1biA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJmYWxzZSIpKQorCQkJb3B0aW9ucy5kcnlfcnVuID0gMDsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiY2hlY2stY29ubmVjdGl2aXR5IikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLmNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgPSAxOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiZmFsc2UiKSkKKwkJCW9wdGlvbnMuY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCA9IDA7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImNhcyIpKSB7CisJCXN0cnVjdCBzdHJidWYgdmFsID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRmKCZ2YWwsICItLSIgQ0FTX09QVF9OQU1FICI9JXMiLCB2YWx1ZSk7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmY2FzX29wdGlvbnMsIHZhbC5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmdmFsKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJjbG9uaW5nIikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLmNsb25pbmcgPSAxOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiZmFsc2UiKSkKKwkJCW9wdGlvbnMuY2xvbmluZyA9IDA7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJ1cGRhdGUtc2hhbGxvdyIpKSB7CisJCWlmICghc3RyY21wKHZhbHVlLCAidHJ1ZSIpKQorCQkJb3B0aW9ucy51cGRhdGVfc2hhbGxvdyA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJmYWxzZSIpKQorCQkJb3B0aW9ucy51cGRhdGVfc2hhbGxvdyA9IDA7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJwdXNoY2VydCIpKSB7CisJCWlmICghc3RyY21wKHZhbHVlLCAidHJ1ZSIpKQorCQkJb3B0aW9ucy5wdXNoX2NlcnQgPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0FMV0FZUzsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImZhbHNlIikpCisJCQlvcHRpb25zLnB1c2hfY2VydCA9IFNFTkRfUEFDS19QVVNIX0NFUlRfTkVWRVI7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJpZi1hc2tlZCIpKQorCQkJb3B0aW9ucy5wdXNoX2NlcnQgPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0lGX0FTS0VEOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiYXRvbWljIikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLmF0b21pYyA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJmYWxzZSIpKQorCQkJb3B0aW9ucy5hdG9taWMgPSAwOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAicHVzaC1vcHRpb24iKSkgeworCQlpZiAoKnZhbHVlICE9ICciJykKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmb3B0aW9ucy5wdXNoX29wdGlvbnMsIHZhbHVlKTsKKwkJZWxzZSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHVucXVvdGVkID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZ1bnF1b3RlZCwgdmFsdWUsIE5VTEwpIDwgMCkKKwkJCQlkaWUoXygiaW52YWxpZCBxdW90aW5nIGluIHB1c2gtb3B0aW9uIHZhbHVlOiAnJXMnIiksIHZhbHVlKTsKKwkJCXN0cmluZ19saXN0X2FwcGVuZF9ub2R1cCgmb3B0aW9ucy5wdXNoX29wdGlvbnMsCisJCQkJCQkgc3RyYnVmX2RldGFjaCgmdW5xdW90ZWQsIE5VTEwpKTsKKwkJfQorCQlyZXR1cm4gMDsKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzBhMDgKKwl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImZhbWlseSIpKSB7CisJCWlmICghc3RyY21wKHZhbHVlLCAiaXB2NCIpKQorCQkJZ2l0X2N1cmxfaXByZXNvbHZlID0gQ1VSTF9JUFJFU09MVkVfVjQ7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJpcHY2IikpCisJCQlnaXRfY3VybF9pcHJlc29sdmUgPSBDVVJMX0lQUkVTT0xWRV9WNjsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImFsbCIpKQorCQkJZ2l0X2N1cmxfaXByZXNvbHZlID0gQ1VSTF9JUFJFU09MVkVfV0hBVEVWRVI7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisjZW5kaWYgLyogTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MGEwOCAqLworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZnJvbS1wcm9taXNvciIpKSB7CisJCW9wdGlvbnMuZnJvbV9wcm9taXNvciA9IDE7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAibm8tZGVwZW5kZW50cyIpKSB7CisJCW9wdGlvbnMubm9fZGVwZW5kZW50cyA9IDE7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZmlsdGVyIikpIHsKKwkJb3B0aW9ucy5maWx0ZXIgPSB4c3RyZHVwKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDEgLyogdW5zdXBwb3J0ZWQgKi87CisJfQorfQorCitzdHJ1Y3QgZGlzY292ZXJ5IHsKKwljaGFyICpzZXJ2aWNlOworCWNoYXIgKmJ1Zl9hbGxvYzsKKwljaGFyICpidWY7CisJc2l6ZV90IGxlbjsKKwlzdHJ1Y3QgcmVmICpyZWZzOworCXN0cnVjdCBvaWRfYXJyYXkgc2hhbGxvdzsKKwllbnVtIHByb3RvY29sX3ZlcnNpb24gdmVyc2lvbjsKKwl1bnNpZ25lZCBwcm90b19naXQgOiAxOworfTsKK3N0YXRpYyBzdHJ1Y3QgZGlzY292ZXJ5ICpsYXN0X2Rpc2NvdmVyeTsKKworc3RhdGljIHN0cnVjdCByZWYgKnBhcnNlX2dpdF9yZWZzKHN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzLCBpbnQgZm9yX3B1c2gpCit7CisJc3RydWN0IHJlZiAqbGlzdCA9IE5VTEw7CisJc3RydWN0IHBhY2tldF9yZWFkZXIgcmVhZGVyOworCisJcGFja2V0X3JlYWRlcl9pbml0KCZyZWFkZXIsIC0xLCBoZWFkcy0+YnVmLCBoZWFkcy0+bGVuLAorCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSB8CisJCQkgICBQQUNLRVRfUkVBRF9HRU5UTEVfT05fRU9GIHwKKwkJCSAgIFBBQ0tFVF9SRUFEX0RJRV9PTl9FUlJfUEFDS0VUKTsKKworCWhlYWRzLT52ZXJzaW9uID0gZGlzY292ZXJfdmVyc2lvbigmcmVhZGVyKTsKKwlzd2l0Y2ggKGhlYWRzLT52ZXJzaW9uKSB7CisJY2FzZSBwcm90b2NvbF92MjoKKwkJLyoKKwkJICogRG8gbm90aGluZy4gIFRoaXMgaXNuJ3QgYSBsaXN0IG9mIHJlZnMgYnV0IHJhdGhlciBhCisJCSAqIGNhcGFiaWxpdHkgYWR2ZXJ0aXNlbWVudC4gIENsaWVudCB3b3VsZCBoYXZlIHJ1bgorCQkgKiAnc3RhdGVsZXNzLWNvbm5lY3QnIHNvIHdlJ2xsIGR1bXAgdGhpcyBjYXBhYmlsaXR5IGxpc3RpbmcKKwkJICogYW5kIGxldCB0aGVtIHJlcXVlc3QgdGhlIHJlZnMgdGhlbXNlbHZlcy4KKwkJICovCisJCWJyZWFrOworCWNhc2UgcHJvdG9jb2xfdjE6CisJY2FzZSBwcm90b2NvbF92MDoKKwkJZ2V0X3JlbW90ZV9oZWFkcygmcmVhZGVyLCAmbGlzdCwgZm9yX3B1c2ggPyBSRUZfTk9STUFMIDogMCwKKwkJCQkgTlVMTCwgJmhlYWRzLT5zaGFsbG93KTsKKwkJYnJlYWs7CisJY2FzZSBwcm90b2NvbF91bmtub3duX3ZlcnNpb246CisJCUJVRygidW5rbm93biBwcm90b2NvbCB2ZXJzaW9uIik7CisJfQorCisJcmV0dXJuIGxpc3Q7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpwYXJzZV9pbmZvX3JlZnMoc3RydWN0IGRpc2NvdmVyeSAqaGVhZHMpCit7CisJY2hhciAqZGF0YSwgKnN0YXJ0LCAqbWlkOworCWNoYXIgKnJlZl9uYW1lOworCWludCBpID0gMDsKKworCXN0cnVjdCByZWYgKnJlZnMgPSBOVUxMOworCXN0cnVjdCByZWYgKnJlZiA9IE5VTEw7CisJc3RydWN0IHJlZiAqbGFzdF9yZWYgPSBOVUxMOworCisJZGF0YSA9IGhlYWRzLT5idWY7CisJc3RhcnQgPSBOVUxMOworCW1pZCA9IGRhdGE7CisJd2hpbGUgKGkgPCBoZWFkcy0+bGVuKSB7CisJCWlmICghc3RhcnQpIHsKKwkJCXN0YXJ0ID0gJmRhdGFbaV07CisJCX0KKwkJaWYgKGRhdGFbaV0gPT0gJ1x0JykKKwkJCW1pZCA9ICZkYXRhW2ldOworCQlpZiAoZGF0YVtpXSA9PSAnXG4nKSB7CisJCQlpZiAobWlkIC0gc3RhcnQgIT0gdGhlX2hhc2hfYWxnby0+aGV4c3opCisJCQkJZGllKF8oIiVzaW5mby9yZWZzIG5vdCB2YWxpZDogaXMgdGhpcyBhIGdpdCByZXBvc2l0b3J5PyIpLAorCQkJCSAgICB0cmFuc3BvcnRfYW5vbnltaXplX3VybCh1cmwuYnVmKSk7CisJCQlkYXRhW2ldID0gMDsKKwkJCXJlZl9uYW1lID0gbWlkICsgMTsKKwkJCXJlZiA9IGFsbG9jX3JlZihyZWZfbmFtZSk7CisJCQlnZXRfb2lkX2hleChzdGFydCwgJnJlZi0+b2xkX29pZCk7CisJCQlpZiAoIXJlZnMpCisJCQkJcmVmcyA9IHJlZjsKKwkJCWlmIChsYXN0X3JlZikKKwkJCQlsYXN0X3JlZi0+bmV4dCA9IHJlZjsKKwkJCWxhc3RfcmVmID0gcmVmOworCQkJc3RhcnQgPSBOVUxMOworCQl9CisJCWkrKzsKKwl9CisKKwlyZWYgPSBhbGxvY19yZWYoIkhFQUQiKTsKKwlpZiAoIWh0dHBfZmV0Y2hfcmVmKHVybC5idWYsIHJlZikgJiYKKwkgICAgIXJlc29sdmVfcmVtb3RlX3N5bXJlZihyZWYsIHJlZnMpKSB7CisJCXJlZi0+bmV4dCA9IHJlZnM7CisJCXJlZnMgPSByZWY7CisJfSBlbHNlIHsKKwkJZnJlZShyZWYpOworCX0KKworCXJldHVybiByZWZzOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2Rpc2NvdmVyeShzdHJ1Y3QgZGlzY292ZXJ5ICpkKQoreworCWlmIChkKSB7CisJCWlmIChkID09IGxhc3RfZGlzY292ZXJ5KQorCQkJbGFzdF9kaXNjb3ZlcnkgPSBOVUxMOworCQlmcmVlKGQtPnNoYWxsb3cub2lkKTsKKwkJZnJlZShkLT5idWZfYWxsb2MpOworCQlmcmVlX3JlZnMoZC0+cmVmcyk7CisJCWZyZWUoZC0+c2VydmljZSk7CisJCWZyZWUoZCk7CisJfQorfQorCitzdGF0aWMgaW50IHNob3dfaHR0cF9tZXNzYWdlKHN0cnVjdCBzdHJidWYgKnR5cGUsIHN0cnVjdCBzdHJidWYgKmNoYXJzZXQsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKm1zZykKK3sKKwljb25zdCBjaGFyICpwLCAqZW9sOworCisJLyoKKwkgKiBXZSBvbmx5IHNob3cgdGV4dC9wbGFpbiBwYXJ0cywgYXMgb3RoZXIgdHlwZXMgYXJlIGxpa2VseQorCSAqIHRvIGJlIHVnbHkgdG8gbG9vayBhdCBvbiB0aGUgdXNlcidzIHRlcm1pbmFsLgorCSAqLworCWlmIChzdHJjbXAodHlwZS0+YnVmLCAidGV4dC9wbGFpbiIpKQorCQlyZXR1cm4gLTE7CisJaWYgKGNoYXJzZXQtPmxlbikKKwkJc3RyYnVmX3JlZW5jb2RlKG1zZywgY2hhcnNldC0+YnVmLCBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpKTsKKworCXN0cmJ1Zl90cmltKG1zZyk7CisJaWYgKCFtc2ctPmxlbikKKwkJcmV0dXJuIC0xOworCisJcCA9IG1zZy0+YnVmOworCWRvIHsKKwkJZW9sID0gc3RyY2hybnVsKHAsICdcbicpOworCQlmcHJpbnRmKHN0ZGVyciwgInJlbW90ZTogJS4qc1xuIiwgKGludCkoZW9sIC0gcCksIHApOworCQlwID0gZW9sICsgMTsKKwl9IHdoaWxlKCplb2wpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9wcm90b2NvbF9odHRwX2hlYWRlcihlbnVtIHByb3RvY29sX3ZlcnNpb24gdmVyc2lvbiwKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqaGVhZGVyKQoreworCWlmICh2ZXJzaW9uID4gMCkgeworCQlzdHJidWZfYWRkZihoZWFkZXIsIEdJVF9QUk9UT0NPTF9IRUFERVIgIjogdmVyc2lvbj0lZCIsCisJCQkgICAgdmVyc2lvbik7CisKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3NtYXJ0X2h0dHAoc3RydWN0IGRpc2NvdmVyeSAqZCwgY29uc3QgY2hhciAqc2VydmljZSwKKwkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqdHlwZSkKK3sKKwljb25zdCBjaGFyICpwOworCXN0cnVjdCBwYWNrZXRfcmVhZGVyIHJlYWRlcjsKKworCS8qCisJICogSWYgd2UgZG9uJ3Qgc2VlIHgtJHNlcnZpY2UtYWR2ZXJ0aXNlbWVudCwgdGhlbiBpdCdzIG5vdCBzbWFydC1odHRwLgorCSAqIEJ1dCBvbmNlIHdlIGRvLCB3ZSBjb21taXQgdG8gaXQgYW5kIGFzc3VtZSBhbnkgb3RoZXIgcHJvdG9jb2wKKwkgKiB2aW9sYXRpb25zIGFyZSBoYXJkIGVycm9ycy4KKwkgKi8KKwlpZiAoIXNraXBfcHJlZml4KHR5cGUtPmJ1ZiwgImFwcGxpY2F0aW9uL3gtIiwgJnApIHx8CisJICAgICFza2lwX3ByZWZpeChwLCBzZXJ2aWNlLCAmcCkgfHwKKwkgICAgc3RyY21wKHAsICItYWR2ZXJ0aXNlbWVudCIpKQorCQlyZXR1cm47CisKKwlwYWNrZXRfcmVhZGVyX2luaXQoJnJlYWRlciwgLTEsIGQtPmJ1ZiwgZC0+bGVuLAorCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSB8CisJCQkgICBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCk7CisJaWYgKHBhY2tldF9yZWFkZXJfcmVhZCgmcmVhZGVyKSAhPSBQQUNLRVRfUkVBRF9OT1JNQUwpCisJCWRpZShfKCJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZXhwZWN0ZWQgc2VydmljZSwgZ290IGZsdXNoIHBhY2tldCIpKTsKKworCWlmIChza2lwX3ByZWZpeChyZWFkZXIubGluZSwgIiMgc2VydmljZT0iLCAmcCkgJiYgIXN0cmNtcChwLCBzZXJ2aWNlKSkgeworCQkvKgorCQkgKiBUaGUgaGVhZGVyIGNhbiBpbmNsdWRlIGFkZGl0aW9uYWwgbWV0YWRhdGEgbGluZXMsIHVwCisJCSAqIHVudGlsIGEgcGFja2V0IGZsdXNoIG1hcmtlci4gIElnbm9yZSB0aGVzZSBub3csIGJ1dAorCQkgKiBpbiB0aGUgZnV0dXJlIHdlIG1pZ2h0IHN0YXJ0IHRvIHNjYW4gdGhlbS4KKwkJICovCisJCWZvciAoOzspIHsKKwkJCXBhY2tldF9yZWFkZXJfcmVhZCgmcmVhZGVyKTsKKwkJCWlmIChyZWFkZXIucGt0bGVuIDw9IDApIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIHYwIHNtYXJ0IGh0dHA7IGNhbGxlcnMgZXhwZWN0IHVzIHRvIHNvYWsgdXAgdGhlCisJCSAqIHNlcnZpY2UgYW5kIGhlYWRlciBwYWNrZXRzCisJCSAqLworCQlkLT5idWYgPSByZWFkZXIuc3JjX2J1ZmZlcjsKKwkJZC0+bGVuID0gcmVhZGVyLnNyY19sZW47CisJCWQtPnByb3RvX2dpdCA9IDE7CisKKwl9IGVsc2UgaWYgKCFzdHJjbXAocmVhZGVyLmxpbmUsICJ2ZXJzaW9uIDIiKSkgeworCQkvKgorCQkgKiB2MiBzbWFydCBodHRwOyBkbyBub3QgY29uc3VtZSB2ZXJzaW9uIHBhY2tldCwgd2hpY2ggd2lsbAorCQkgKiBiZSBoYW5kbGVkIGVsc2V3aGVyZS4KKwkJICovCisJCWQtPnByb3RvX2dpdCA9IDE7CisKKwl9IGVsc2UgeworCQlkaWUoXygiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGdvdCAnJXMnIiksIHJlYWRlci5saW5lKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlzY292ZXJ5ICpkaXNjb3Zlcl9yZWZzKGNvbnN0IGNoYXIgKnNlcnZpY2UsIGludCBmb3JfcHVzaCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHR5cGUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGNoYXJzZXQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcmVmc191cmwgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGVmZmVjdGl2ZV91cmwgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHByb3RvY29sX2hlYWRlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJpbmdfbGlzdCBleHRyYV9oZWFkZXJzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IGRpc2NvdmVyeSAqbGFzdCA9IGxhc3RfZGlzY292ZXJ5OworCWludCBodHRwX3JldCwgbWF5YmVfc21hcnQgPSAwOworCXN0cnVjdCBodHRwX2dldF9vcHRpb25zIGh0dHBfb3B0aW9uczsKKwllbnVtIHByb3RvY29sX3ZlcnNpb24gdmVyc2lvbiA9IGdldF9wcm90b2NvbF92ZXJzaW9uX2NvbmZpZygpOworCisJaWYgKGxhc3QgJiYgIXN0cmNtcChzZXJ2aWNlLCBsYXN0LT5zZXJ2aWNlKSkKKwkJcmV0dXJuIGxhc3Q7CisJZnJlZV9kaXNjb3ZlcnkobGFzdCk7CisKKwlzdHJidWZfYWRkZigmcmVmc191cmwsICIlc2luZm8vcmVmcyIsIHVybC5idWYpOworCWlmICgoc3RhcnRzX3dpdGgodXJsLmJ1ZiwgImh0dHA6Ly8iKSB8fCBzdGFydHNfd2l0aCh1cmwuYnVmLCAiaHR0cHM6Ly8iKSkgJiYKKwkgICAgIGdpdF9lbnZfYm9vbCgiR0lUX1NNQVJUX0hUVFAiLCAxKSkgeworCQltYXliZV9zbWFydCA9IDE7CisJCWlmICghc3RyY2hyKHVybC5idWYsICc/JykpCisJCQlzdHJidWZfYWRkY2goJnJlZnNfdXJsLCAnPycpOworCQllbHNlCisJCQlzdHJidWZfYWRkY2goJnJlZnNfdXJsLCAnJicpOworCQlzdHJidWZfYWRkZigmcmVmc191cmwsICJzZXJ2aWNlPSVzIiwgc2VydmljZSk7CisJfQorCisJLyoKKwkgKiBORUVEU1dPUks6IElmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHByb3RvY29sIHYyIGFuZCB3ZSBhcmUgcGxhbm5pbmcKKwkgKiB0byBwZXJmb3JtIGEgcHVzaCwgdGhlbiBmYWxsYmFjayB0byB2MCBzaW5jZSB0aGUgY2xpZW50IGRvZXNuJ3Qga25vdworCSAqIGhvdyB0byBwdXNoIHlldCB1c2luZyB2Mi4KKwkgKi8KKwlpZiAodmVyc2lvbiA9PSBwcm90b2NvbF92MiAmJiAhc3RyY21wKCJnaXQtcmVjZWl2ZS1wYWNrIiwgc2VydmljZSkpCisJCXZlcnNpb24gPSBwcm90b2NvbF92MDsKKworCS8qIEFkZCB0aGUgZXh0cmEgR2l0LVByb3RvY29sIGhlYWRlciAqLworCWlmIChnZXRfcHJvdG9jb2xfaHR0cF9oZWFkZXIodmVyc2lvbiwgJnByb3RvY29sX2hlYWRlcikpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmZXh0cmFfaGVhZGVycywgcHJvdG9jb2xfaGVhZGVyLmJ1Zik7CisKKwltZW1zZXQoJmh0dHBfb3B0aW9ucywgMCwgc2l6ZW9mKGh0dHBfb3B0aW9ucykpOworCWh0dHBfb3B0aW9ucy5jb250ZW50X3R5cGUgPSAmdHlwZTsKKwlodHRwX29wdGlvbnMuY2hhcnNldCA9ICZjaGFyc2V0OworCWh0dHBfb3B0aW9ucy5lZmZlY3RpdmVfdXJsID0gJmVmZmVjdGl2ZV91cmw7CisJaHR0cF9vcHRpb25zLmJhc2VfdXJsID0gJnVybDsKKwlodHRwX29wdGlvbnMuZXh0cmFfaGVhZGVycyA9ICZleHRyYV9oZWFkZXJzOworCWh0dHBfb3B0aW9ucy5pbml0aWFsX3JlcXVlc3QgPSAxOworCWh0dHBfb3B0aW9ucy5ub19jYWNoZSA9IDE7CisKKwlodHRwX3JldCA9IGh0dHBfZ2V0X3N0cmJ1ZihyZWZzX3VybC5idWYsICZidWZmZXIsICZodHRwX29wdGlvbnMpOworCXN3aXRjaCAoaHR0cF9yZXQpIHsKKwljYXNlIEhUVFBfT0s6CisJCWJyZWFrOworCWNhc2UgSFRUUF9NSVNTSU5HX1RBUkdFVDoKKwkJc2hvd19odHRwX21lc3NhZ2UoJnR5cGUsICZjaGFyc2V0LCAmYnVmZmVyKTsKKwkJZGllKF8oInJlcG9zaXRvcnkgJyVzJyBub3QgZm91bmQiKSwKKwkJICAgIHRyYW5zcG9ydF9hbm9ueW1pemVfdXJsKHVybC5idWYpKTsKKwljYXNlIEhUVFBfTk9BVVRIOgorCQlzaG93X2h0dHBfbWVzc2FnZSgmdHlwZSwgJmNoYXJzZXQsICZidWZmZXIpOworCQlkaWUoXygiQXV0aGVudGljYXRpb24gZmFpbGVkIGZvciAnJXMnIiksCisJCSAgICB0cmFuc3BvcnRfYW5vbnltaXplX3VybCh1cmwuYnVmKSk7CisJZGVmYXVsdDoKKwkJc2hvd19odHRwX21lc3NhZ2UoJnR5cGUsICZjaGFyc2V0LCAmYnVmZmVyKTsKKwkJZGllKF8oInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiKSwKKwkJICAgIHRyYW5zcG9ydF9hbm9ueW1pemVfdXJsKHVybC5idWYpLCBjdXJsX2Vycm9yc3RyKTsKKwl9CisKKwlpZiAob3B0aW9ucy52ZXJib3NpdHkgJiYgIXN0YXJ0c193aXRoKHJlZnNfdXJsLmJ1ZiwgdXJsLmJ1ZikpIHsKKwkJY2hhciAqdSA9IHRyYW5zcG9ydF9hbm9ueW1pemVfdXJsKHVybC5idWYpOworCQl3YXJuaW5nKF8oInJlZGlyZWN0aW5nIHRvICVzIiksIHUpOworCQlmcmVlKHUpOworCX0KKworCWxhc3Q9IHhjYWxsb2MoMSwgc2l6ZW9mKCpsYXN0X2Rpc2NvdmVyeSkpOworCWxhc3QtPnNlcnZpY2UgPSB4c3RyZHVwKHNlcnZpY2UpOworCWxhc3QtPmJ1Zl9hbGxvYyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZmZlciwgJmxhc3QtPmxlbik7CisJbGFzdC0+YnVmID0gbGFzdC0+YnVmX2FsbG9jOworCisJaWYgKG1heWJlX3NtYXJ0KQorCQljaGVja19zbWFydF9odHRwKGxhc3QsIHNlcnZpY2UsICZ0eXBlKTsKKworCWlmIChsYXN0LT5wcm90b19naXQpCisJCWxhc3QtPnJlZnMgPSBwYXJzZV9naXRfcmVmcyhsYXN0LCBmb3JfcHVzaCk7CisJZWxzZQorCQlsYXN0LT5yZWZzID0gcGFyc2VfaW5mb19yZWZzKGxhc3QpOworCisJc3RyYnVmX3JlbGVhc2UoJnJlZnNfdXJsKTsKKwlzdHJidWZfcmVsZWFzZSgmdHlwZSk7CisJc3RyYnVmX3JlbGVhc2UoJmNoYXJzZXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZlZmZlY3RpdmVfdXJsKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJvdG9jb2xfaGVhZGVyKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZXh0cmFfaGVhZGVycywgMCk7CisJbGFzdF9kaXNjb3ZlcnkgPSBsYXN0OworCXJldHVybiBsYXN0OworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnMoaW50IGZvcl9wdXNoKQoreworCXN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzOworCisJaWYgKGZvcl9wdXNoKQorCQloZWFkcyA9IGRpc2NvdmVyX3JlZnMoImdpdC1yZWNlaXZlLXBhY2siLCBmb3JfcHVzaCk7CisJZWxzZQorCQloZWFkcyA9IGRpc2NvdmVyX3JlZnMoImdpdC11cGxvYWQtcGFjayIsIGZvcl9wdXNoKTsKKworCXJldHVybiBoZWFkcy0+cmVmczsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0X3JlZnMoc3RydWN0IHJlZiAqcmVmcykKK3sKKwlzdHJ1Y3QgcmVmICpwb3NuOworCWZvciAocG9zbiA9IHJlZnM7IHBvc247IHBvc24gPSBwb3NuLT5uZXh0KSB7CisJCWlmIChwb3NuLT5zeW1yZWYpCisJCQlwcmludGYoIkAlcyAlc1xuIiwgcG9zbi0+c3ltcmVmLCBwb3NuLT5uYW1lKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlcyAlc1xuIiwgb2lkX3RvX2hleCgmcG9zbi0+b2xkX29pZCksIHBvc24tPm5hbWUpOworCX0KKwlwcmludGYoIlxuIik7CisJZmZsdXNoKHN0ZG91dCk7Cit9CisKK3N0cnVjdCBycGNfc3RhdGUgeworCWNvbnN0IGNoYXIgKnNlcnZpY2VfbmFtZTsKKwljaGFyICpzZXJ2aWNlX3VybDsKKwljaGFyICpoZHJfY29udGVudF90eXBlOworCWNoYXIgKmhkcl9hY2NlcHQ7CisJY2hhciAqcHJvdG9jb2xfaGVhZGVyOworCWNoYXIgKmJ1ZjsKKwlzaXplX3QgYWxsb2M7CisJc2l6ZV90IGxlbjsKKwlzaXplX3QgcG9zOworCWludCBpbjsKKwlpbnQgb3V0OworCWludCBhbnlfd3JpdHRlbjsKKwl1bnNpZ25lZCBnemlwX3JlcXVlc3QgOiAxOworCXVuc2lnbmVkIGluaXRpYWxfYnVmZmVyIDogMTsKKworCS8qCisJICogV2hlbmV2ZXIgYSBwa3QtbGluZSBpcyByZWFkIGludG8gYnVmLCBhcHBlbmQgdGhlIDQgY2hhcmFjdGVycworCSAqIGRlbm90aW5nIGl0cyBsZW5ndGggYmVmb3JlIGFwcGVuZGluZyB0aGUgcGF5bG9hZC4KKwkgKi8KKwl1bnNpZ25lZCB3cml0ZV9saW5lX2xlbmd0aHMgOiAxOworCisJLyoKKwkgKiBVc2VkIGJ5IHJwY19vdXQ7IGluaXRpYWxpemUgdG8gMC4gVGhpcyBpcyB0cnVlIGlmIGEgZmx1c2ggaGFzIGJlZW4KKwkgKiByZWFkLCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgbGluZSBsZW5ndGggKGlmIHdyaXRlX2xpbmVfbGVuZ3RocyBpcworCSAqIHRydWUpIGFuZCBFT0YgaGF2ZSBub3QgYmVlbiBzZW50IHRvIGxpYmN1cmwuIFNpbmNlIGVhY2ggZmx1c2ggbWFya3MKKwkgKiB0aGUgZW5kIG9mIGEgcmVxdWVzdCwgZWFjaCBmbHVzaCBtdXN0IGJlIGNvbXBsZXRlbHkgc2VudCBiZWZvcmUgYW55CisJICogZnVydGhlciByZWFkaW5nIG9jY3Vycy4KKwkgKi8KKwl1bnNpZ25lZCBmbHVzaF9yZWFkX2J1dF9ub3Rfc2VudCA6IDE7Cit9OworCisvKgorICogQXBwZW5kcyB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgZnJvbSBycGMtPm91dCB0byB0aGUgc3RyaW5nIHJlcHJlc2VudGVkIGJ5CisgKiBycGMtPmJ1ZiBhbmQgcnBjLT5sZW4gaWYgdGhlcmUgaXMgZW5vdWdoIHNwYWNlLiBSZXR1cm5zIDEgaWYgdGhlcmUgd2FzCisgKiBlbm91Z2ggc3BhY2UsIDAgb3RoZXJ3aXNlLgorICoKKyAqIElmIHJwYy0+d3JpdGVfbGluZV9sZW5ndGhzIGlzIHRydWUsIGFwcGVuZHMgdGhlIGxpbmUgbGVuZ3RoIGFzIGEgNC1ieXRlCisgKiBoZXhhZGVjaW1hbCBzdHJpbmcgYmVmb3JlIGFwcGVuZGluZyB0aGUgcmVzdWx0IGRlc2NyaWJlZCBhYm92ZS4KKyAqCisgKiBXcml0ZXMgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBhcHBlbmRlZCBpbnRvIGFwcGVuZGVkLgorICovCitzdGF0aWMgaW50IHJwY19yZWFkX2Zyb21fb3V0KHN0cnVjdCBycGNfc3RhdGUgKnJwYywgaW50IG9wdGlvbnMsCisJCQkgICAgIHNpemVfdCAqYXBwZW5kZWQsCisJCQkgICAgIGVudW0gcGFja2V0X3JlYWRfc3RhdHVzICpzdGF0dXMpIHsKKwlzaXplX3QgbGVmdDsKKwljaGFyICpidWY7CisJaW50IHBrdGxlbl9yYXc7CisKKwlpZiAocnBjLT53cml0ZV9saW5lX2xlbmd0aHMpIHsKKwkJbGVmdCA9IHJwYy0+YWxsb2MgLSBycGMtPmxlbiAtIDQ7CisJCWJ1ZiA9IHJwYy0+YnVmICsgcnBjLT5sZW4gKyA0OworCX0gZWxzZSB7CisJCWxlZnQgPSBycGMtPmFsbG9jIC0gcnBjLT5sZW47CisJCWJ1ZiA9IHJwYy0+YnVmICsgcnBjLT5sZW47CisJfQorCisJaWYgKGxlZnQgPCBMQVJHRV9QQUNLRVRfTUFYKQorCQlyZXR1cm4gMDsKKworCSpzdGF0dXMgPSBwYWNrZXRfcmVhZF93aXRoX3N0YXR1cyhycGMtPm91dCwgTlVMTCwgTlVMTCwgYnVmLAorCQkJbGVmdCwgJnBrdGxlbl9yYXcsIG9wdGlvbnMpOworCWlmICgqc3RhdHVzICE9IFBBQ0tFVF9SRUFEX0VPRikgeworCQkqYXBwZW5kZWQgPSBwa3RsZW5fcmF3ICsgKHJwYy0+d3JpdGVfbGluZV9sZW5ndGhzID8gNCA6IDApOworCQlycGMtPmxlbiArPSAqYXBwZW5kZWQ7CisJfQorCisJaWYgKHJwYy0+d3JpdGVfbGluZV9sZW5ndGhzKSB7CisJCXN3aXRjaCAoKnN0YXR1cykgeworCQljYXNlIFBBQ0tFVF9SRUFEX0VPRjoKKwkJCWlmICghKG9wdGlvbnMgJiBQQUNLRVRfUkVBRF9HRU5UTEVfT05fRU9GKSkKKwkJCQlkaWUoXygic2hvdWxkbid0IGhhdmUgRU9GIHdoZW4gbm90IGdlbnRsZSBvbiBFT0YiKSk7CisJCQlicmVhazsKKwkJY2FzZSBQQUNLRVRfUkVBRF9OT1JNQUw6CisJCQlzZXRfcGFja2V0X2hlYWRlcihidWYgLSA0LCAqYXBwZW5kZWQpOworCQkJYnJlYWs7CisJCWNhc2UgUEFDS0VUX1JFQURfREVMSU06CisJCQltZW1jcHkoYnVmIC0gNCwgIjAwMDEiLCA0KTsKKwkJCWJyZWFrOworCQljYXNlIFBBQ0tFVF9SRUFEX0ZMVVNIOgorCQkJbWVtY3B5KGJ1ZiAtIDQsICIwMDAwIiwgNCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgc2l6ZV90IHJwY19vdXQodm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwKKwkJc2l6ZV90IG5tZW1iLCB2b2lkICpidWZmZXJfKQoreworCXNpemVfdCBtYXggPSBlbHRzaXplICogbm1lbWI7CisJc3RydWN0IHJwY19zdGF0ZSAqcnBjID0gYnVmZmVyXzsKKwlzaXplX3QgYXZhaWwgPSBycGMtPmxlbiAtIHJwYy0+cG9zOworCWVudW0gcGFja2V0X3JlYWRfc3RhdHVzIHN0YXR1czsKKworCWlmICghYXZhaWwpIHsKKwkJcnBjLT5pbml0aWFsX2J1ZmZlciA9IDA7CisJCXJwYy0+bGVuID0gMDsKKwkJcnBjLT5wb3MgPSAwOworCQlpZiAoIXJwYy0+Zmx1c2hfcmVhZF9idXRfbm90X3NlbnQpIHsKKwkJCWlmICghcnBjX3JlYWRfZnJvbV9vdXQocnBjLCAwLCAmYXZhaWwsICZzdGF0dXMpKQorCQkJCUJVRygiVGhlIGVudGlyZSBycGMtPmJ1ZiBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gTEFSR0VfUEFDS0VUX01BWCIpOworCQkJaWYgKHN0YXR1cyA9PSBQQUNLRVRfUkVBRF9GTFVTSCkKKwkJCQlycGMtPmZsdXNoX3JlYWRfYnV0X25vdF9zZW50ID0gMTsKKwkJfQorCQkvKgorCQkgKiBJZiBmbHVzaF9yZWFkX2J1dF9ub3Rfc2VudCBpcyB0cnVlLCB3ZSBoYXZlIGFscmVhZHkgcmVhZCBvbmUKKwkJICogZnVsbCByZXF1ZXN0IGJ1dCBoYXZlIG5vdCBmdWxseSBzZW50IGl0ICsgRU9GLCB3aGljaCBpcyB3aHkKKwkJICogd2UgbmVlZCB0byByZWZyYWluIGZyb20gcmVhZGluZy4KKwkJICovCisJfQorCWlmIChycGMtPmZsdXNoX3JlYWRfYnV0X25vdF9zZW50KSB7CisJCWlmICghYXZhaWwpIHsKKwkJCS8qCisJCQkgKiBUaGUgbGluZSBsZW5ndGggZWl0aGVyIGRvZXMgbm90IG5lZWQgdG8gYmUgc2VudCBhdAorCQkJICogYWxsIG9yIGhhcyBhbHJlYWR5IGJlZW4gY29tcGxldGVseSBzZW50LiBOb3cgd2UgY2FuCisJCQkgKiByZXR1cm4gMCwgaW5kaWNhdGluZyBFT0YsIG1lYW5pbmcgdGhhdCB0aGUgZmx1c2ggaGFzCisJCQkgKiBiZWVuIGZ1bGx5IHNlbnQuCisJCQkgKi8KKwkJCXJwYy0+Zmx1c2hfcmVhZF9idXRfbm90X3NlbnQgPSAwOworCQkJcmV0dXJuIDA7CisJCX0KKwkJLyoKKwkJICogSWYgYXZhaWwgaXMgbm9uLXplcnAsIHRoZSBsaW5lIGxlbmd0aCBmb3IgdGhlIGZsdXNoIHN0aWxsCisJCSAqIGhhc24ndCBiZWVuIGZ1bGx5IHNlbnQuIFByb2NlZWQgd2l0aCBzZW5kaW5nIHRoZSBsaW5lCisJCSAqIGxlbmd0aC4KKwkJICovCisJfQorCisJaWYgKG1heCA8IGF2YWlsKQorCQlhdmFpbCA9IG1heDsKKwltZW1jcHkocHRyLCBycGMtPmJ1ZiArIHJwYy0+cG9zLCBhdmFpbCk7CisJcnBjLT5wb3MgKz0gYXZhaWw7CisJcmV0dXJuIGF2YWlsOworfQorCisjaWZuZGVmIE5PX0NVUkxfSU9DVEwKK3N0YXRpYyBjdXJsaW9lcnIgcnBjX2lvY3RsKENVUkwgKmhhbmRsZSwgaW50IGNtZCwgdm9pZCAqY2xpZW50cCkKK3sKKwlzdHJ1Y3QgcnBjX3N0YXRlICpycGMgPSBjbGllbnRwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIENVUkxJT0NNRF9OT1A6CisJCXJldHVybiBDVVJMSU9FX09LOworCisJY2FzZSBDVVJMSU9DTURfUkVTVEFSVFJFQUQ6CisJCWlmIChycGMtPmluaXRpYWxfYnVmZmVyKSB7CisJCQlycGMtPnBvcyA9IDA7CisJCQlyZXR1cm4gQ1VSTElPRV9PSzsKKwkJfQorCQllcnJvcihfKCJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiKSk7CisJCXJldHVybiBDVVJMSU9FX0ZBSUxSRVNUQVJUOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIENVUkxJT0VfVU5LTk9XTkNNRDsKKwl9Cit9CisjZW5kaWYKKworc3RydWN0IHJwY19pbl9kYXRhIHsKKwlzdHJ1Y3QgcnBjX3N0YXRlICpycGM7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7Cit9OworCisvKgorICogQSBjYWxsYmFjayBmb3IgQ1VSTE9QVF9XUklURUZVTkNUSU9OLiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBieXRlcyBjb25zdW1lZAorICogZnJvbSBwdHIuCisgKi8KK3N0YXRpYyBzaXplX3QgcnBjX2luKGNoYXIgKnB0ciwgc2l6ZV90IGVsdHNpemUsCisJCXNpemVfdCBubWVtYiwgdm9pZCAqYnVmZmVyXykKK3sKKwlzaXplX3Qgc2l6ZSA9IGVsdHNpemUgKiBubWVtYjsKKwlzdHJ1Y3QgcnBjX2luX2RhdGEgKmRhdGEgPSBidWZmZXJfOworCWxvbmcgcmVzcG9uc2VfY29kZTsKKworCWlmIChjdXJsX2Vhc3lfZ2V0aW5mbyhkYXRhLT5zbG90LT5jdXJsLCBDVVJMSU5GT19SRVNQT05TRV9DT0RFLAorCQkJICAgICAgJnJlc3BvbnNlX2NvZGUpICE9IENVUkxFX09LKQorCQlyZXR1cm4gc2l6ZTsKKwlpZiAocmVzcG9uc2VfY29kZSA+PSAzMDApCisJCXJldHVybiBzaXplOworCWlmIChzaXplKQorCQlkYXRhLT5ycGMtPmFueV93cml0dGVuID0gMTsKKwl3cml0ZV9vcl9kaWUoZGF0YS0+cnBjLT5pbiwgcHRyLCBzaXplKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGludCBydW5fc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCwKKwkJICAgIHN0cnVjdCBzbG90X3Jlc3VsdHMgKnJlc3VsdHMpCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHNfYnVmOworCisJaWYgKCFyZXN1bHRzKQorCQlyZXN1bHRzID0gJnJlc3VsdHNfYnVmOworCisJZXJyID0gcnVuX29uZV9zbG90KHNsb3QsIHJlc3VsdHMpOworCisJaWYgKGVyciAhPSBIVFRQX09LICYmIGVyciAhPSBIVFRQX1JFQVVUSCkgeworCQlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCQlpZiAocmVzdWx0cy0+aHR0cF9jb2RlICYmIHJlc3VsdHMtPmh0dHBfY29kZSAhPSAyMDApCisJCQlzdHJidWZfYWRkZigmbXNnLCAiSFRUUCAlbGQiLCByZXN1bHRzLT5odHRwX2NvZGUpOworCQlpZiAocmVzdWx0cy0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKwkJCWlmIChtc2cubGVuKQorCQkJCXN0cmJ1Zl9hZGRjaCgmbXNnLCAnICcpOworCQkJc3RyYnVmX2FkZGYoJm1zZywgImN1cmwgJWQiLCByZXN1bHRzLT5jdXJsX3Jlc3VsdCk7CisJCQlpZiAoY3VybF9lcnJvcnN0clswXSkgeworCQkJCXN0cmJ1Zl9hZGRjaCgmbXNnLCAnICcpOworCQkJCXN0cmJ1Zl9hZGRzdHIoJm1zZywgY3VybF9lcnJvcnN0cik7CisJCQl9CisJCX0KKwkJZXJyb3IoXygiUlBDIGZhaWxlZDsgJXMiKSwgbXNnLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfcnBjKHN0cnVjdCBycGNfc3RhdGUgKnJwYywgc3RydWN0IHNsb3RfcmVzdWx0cyAqcmVzdWx0cykKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVycyA9IGh0dHBfY29weV9kZWZhdWx0X2hlYWRlcnMoKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBlcnI7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisKKwloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgcnBjLT5oZHJfY29udGVudF90eXBlKTsKKwloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgcnBjLT5oZHJfYWNjZXB0KTsKKworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9OT0JPRFksIDApOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QT1NULCAxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCBycGMtPnNlcnZpY2VfdXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRU5DT0RJTkcsIE5VTEwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCAiMDAwMCIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QT1NURklFTERTSVpFLCA0KTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgaGVhZGVycyk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmKTsKKworCWVyciA9IHJ1bl9zbG90KHNsb3QsIHJlc3VsdHMpOworCisJY3VybF9zbGlzdF9mcmVlX2FsbChoZWFkZXJzKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY3VybF9vZmZfdCB4Y3VybF9vZmZfdChzaXplX3QgbGVuKQoreworCXVpbnRtYXhfdCBzaXplID0gbGVuOworCWlmIChzaXplID4gbWF4aW11bV9zaWduZWRfdmFsdWVfb2ZfdHlwZShjdXJsX29mZl90KSkKKwkJZGllKF8oImNhbm5vdCBoYW5kbGUgcHVzaGVzIHRoaXMgYmlnIikpOworCXJldHVybiAoY3VybF9vZmZfdClzaXplOworfQorCisvKgorICogSWYgZmx1c2hfcmVjZWl2ZWQgaXMgdHJ1ZSwgZG8gbm90IGF0dGVtcHQgdG8gcmVhZCBhbnkgbW9yZTsganVzdCB1c2Ugd2hhdCdzCisgKiBpbiBycGMtPmJ1Zi4KKyAqLworc3RhdGljIGludCBwb3N0X3JwYyhzdHJ1Y3QgcnBjX3N0YXRlICpycGMsIGludCBmbHVzaF9yZWNlaXZlZCkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVycyA9IGh0dHBfY29weV9kZWZhdWx0X2hlYWRlcnMoKTsKKwlpbnQgdXNlX2d6aXAgPSBycGMtPmd6aXBfcmVxdWVzdDsKKwljaGFyICpnemlwX2JvZHkgPSBOVUxMOworCXNpemVfdCBnemlwX3NpemUgPSAwOworCWludCBlcnIsIGxhcmdlX3JlcXVlc3QgPSAwOworCWludCBuZWVkc18xMDBfY29udGludWUgPSAwOworCXN0cnVjdCBycGNfaW5fZGF0YSBycGNfaW5fZGF0YTsKKworCS8qIFRyeSB0byBsb2FkIHRoZSBlbnRpcmUgcmVxdWVzdCwgaWYgd2UgY2FuIGZpdCBpdCBpbnRvIHRoZQorCSAqIGFsbG9jYXRlZCBidWZmZXIgc3BhY2Ugd2UgY2FuIHVzZSBIVFRQLzEuMCBhbmQgYXZvaWQgdGhlCisJICogY2h1bmtlZCBlbmNvZGluZyBtZXNzLgorCSAqLworCWlmICghZmx1c2hfcmVjZWl2ZWQpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCXNpemVfdCBuOworCQkJZW51bSBwYWNrZXRfcmVhZF9zdGF0dXMgc3RhdHVzOworCisJCQlpZiAoIXJwY19yZWFkX2Zyb21fb3V0KHJwYywgMCwgJm4sICZzdGF0dXMpKSB7CisJCQkJbGFyZ2VfcmVxdWVzdCA9IDE7CisJCQkJdXNlX2d6aXAgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHN0YXR1cyA9PSBQQUNLRVRfUkVBRF9GTFVTSCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChsYXJnZV9yZXF1ZXN0KSB7CisJCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKworCQlkbyB7CisJCQllcnIgPSBwcm9iZV9ycGMocnBjLCAmcmVzdWx0cyk7CisJCQlpZiAoZXJyID09IEhUVFBfUkVBVVRIKQorCQkJCWNyZWRlbnRpYWxfZmlsbCgmaHR0cF9hdXRoKTsKKwkJfSB3aGlsZSAoZXJyID09IEhUVFBfUkVBVVRIKTsKKwkJaWYgKGVyciAhPSBIVFRQX09LKQorCQkJcmV0dXJuIC0xOworCisJCWlmIChyZXN1bHRzLmF1dGhfYXZhaWwgJiBDVVJMQVVUSF9HU1NORUdPVElBVEUpCisJCQluZWVkc18xMDBfY29udGludWUgPSAxOworCX0KKworCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBycGMtPmhkcl9jb250ZW50X3R5cGUpOworCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBycGMtPmhkcl9hY2NlcHQpOworCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBuZWVkc18xMDBfY29udGludWUgPworCQkiRXhwZWN0OiAxMDAtY29udGludWUiIDogIkV4cGVjdDoiKTsKKworCS8qIEFkZCB0aGUgZXh0cmEgR2l0LVByb3RvY29sIGhlYWRlciAqLworCWlmIChycGMtPnByb3RvY29sX2hlYWRlcikKKwkJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsIHJwYy0+cHJvdG9jb2xfaGVhZGVyKTsKKworcmV0cnk6CisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1QsIDEpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHJwYy0+c2VydmljZV91cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9FTkNPRElORywgIiIpOworCisJaWYgKGxhcmdlX3JlcXVlc3QpIHsKKwkJLyogVGhlIHJlcXVlc3QgYm9keSBpcyBsYXJnZSBhbmQgdGhlIHNpemUgY2Fubm90IGJlIHByZWRpY3RlZC4KKwkJICogV2UgbXVzdCB1c2UgY2h1bmtlZCBlbmNvZGluZyB0byBzZW5kIGl0LgorCQkgKi8KKwkJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIpOworCQlycGMtPmluaXRpYWxfYnVmZmVyID0gMTsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgcnBjX291dCk7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JTkZJTEUsIHJwYyk7CisjaWZuZGVmIE5PX0NVUkxfSU9DVEwKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0lPQ1RMRlVOQ1RJT04sIHJwY19pb2N0bCk7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JT0NUTERBVEEsIHJwYyk7CisjZW5kaWYKKwkJaWYgKG9wdGlvbnMudmVyYm9zaXR5ID4gMSkgeworCQkJZnByaW50ZihzdGRlcnIsICJQT1NUICVzIChjaHVua2VkKVxuIiwgcnBjLT5zZXJ2aWNlX25hbWUpOworCQkJZmZsdXNoKHN0ZGVycik7CisJCX0KKworCX0gZWxzZSBpZiAoZ3ppcF9ib2R5KSB7CisJCS8qCisJCSAqIElmIHdlIGFyZSBsb29waW5nIHRvIHJldHJ5IGF1dGhlbnRpY2F0aW9uLCB0aGVuIHRoZSBwcmV2aW91cworCQkgKiBydW4gd2lsbCBoYXZlIHNldCB1cCB0aGUgaGVhZGVycyBhbmQgZ3ppcCBidWZmZXIgYWxyZWFkeSwKKwkJICogYW5kIHdlIGp1c3QgbmVlZCB0byBzZW5kIGl0LgorCQkgKi8KKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsIGd6aXBfYm9keSk7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QT1NURklFTERTSVpFX0xBUkdFLCB4Y3VybF9vZmZfdChnemlwX3NpemUpKTsKKworCX0gZWxzZSBpZiAodXNlX2d6aXAgJiYgMTAyNCA8IHJwYy0+bGVuKSB7CisJCS8qIFRoZSBjbGllbnQgYmFja2VuZCBpc24ndCBnaXZpbmcgdXMgY29tcHJlc3NlZCBkYXRhIHNvCisJCSAqIHdlIGNhbiB0cnkgdG8gZGVmbGF0ZSBpdCBvdXJzZWx2ZXMsIHRoaXMgbWF5IHNhdmUgb24KKwkJICogdGhlIHRyYW5zZmVyIHRpbWUuCisJCSAqLworCQlnaXRfenN0cmVhbSBzdHJlYW07CisJCWludCByZXQ7CisKKwkJZ2l0X2RlZmxhdGVfaW5pdF9nemlwKCZzdHJlYW0sIFpfQkVTVF9DT01QUkVTU0lPTik7CisJCWd6aXBfc2l6ZSA9IGdpdF9kZWZsYXRlX2JvdW5kKCZzdHJlYW0sIHJwYy0+bGVuKTsKKwkJZ3ppcF9ib2R5ID0geG1hbGxvYyhnemlwX3NpemUpOworCisJCXN0cmVhbS5uZXh0X2luID0gKHVuc2lnbmVkIGNoYXIgKilycGMtPmJ1ZjsKKwkJc3RyZWFtLmF2YWlsX2luID0gcnBjLT5sZW47CisJCXN0cmVhbS5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopZ3ppcF9ib2R5OworCQlzdHJlYW0uYXZhaWxfb3V0ID0gZ3ppcF9zaXplOworCisJCXJldCA9IGdpdF9kZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKTsKKwkJaWYgKHJldCAhPSBaX1NUUkVBTV9FTkQpCisJCQlkaWUoXygiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBkZWZsYXRlIGVycm9yICVkIiksIHJldCk7CisKKwkJcmV0ID0gZ2l0X2RlZmxhdGVfZW5kX2dlbnRseSgmc3RyZWFtKTsKKwkJaWYgKHJldCAhPSBaX09LKQorCQkJZGllKF8oImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZW5kIGVycm9yICVkIiksIHJldCk7CisKKwkJZ3ppcF9zaXplID0gc3RyZWFtLnRvdGFsX291dDsKKworCQloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgIkNvbnRlbnQtRW5jb2Rpbmc6IGd6aXAiKTsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsIGd6aXBfYm9keSk7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QT1NURklFTERTSVpFX0xBUkdFLCB4Y3VybF9vZmZfdChnemlwX3NpemUpKTsKKworCQlpZiAob3B0aW9ucy52ZXJib3NpdHkgPiAxKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlBPU1QgJXMgKGd6aXAgJWx1IHRvICVsdSBieXRlcylcbiIsCisJCQkJcnBjLT5zZXJ2aWNlX25hbWUsCisJCQkJKHVuc2lnbmVkIGxvbmcpcnBjLT5sZW4sICh1bnNpZ25lZCBsb25nKWd6aXBfc2l6ZSk7CisJCQlmZmx1c2goc3RkZXJyKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFdlIGtub3cgdGhlIGNvbXBsZXRlIHJlcXVlc3Qgc2l6ZSBpbiBhZHZhbmNlLCB1c2UgdGhlCisJCSAqIG1vcmUgbm9ybWFsIENvbnRlbnQtTGVuZ3RoIGFwcHJvYWNoLgorCQkgKi8KKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsIHJwYy0+YnVmKTsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkVfTEFSR0UsIHhjdXJsX29mZl90KHJwYy0+bGVuKSk7CisJCWlmIChvcHRpb25zLnZlcmJvc2l0eSA+IDEpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiUE9TVCAlcyAoJWx1IGJ5dGVzKVxuIiwKKwkJCQlycGMtPnNlcnZpY2VfbmFtZSwgKHVuc2lnbmVkIGxvbmcpcnBjLT5sZW4pOworCQkJZmZsdXNoKHN0ZGVycik7CisJCX0KKwl9CisKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgaGVhZGVycyk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIHJwY19pbik7CisJcnBjX2luX2RhdGEucnBjID0gcnBjOworCXJwY19pbl9kYXRhLnNsb3QgPSBzbG90OworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmcnBjX2luX2RhdGEpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GQUlMT05FUlJPUiwgMCk7CisKKworCXJwYy0+YW55X3dyaXR0ZW4gPSAwOworCWVyciA9IHJ1bl9zbG90KHNsb3QsIE5VTEwpOworCWlmIChlcnIgPT0gSFRUUF9SRUFVVEggJiYgIWxhcmdlX3JlcXVlc3QpIHsKKwkJY3JlZGVudGlhbF9maWxsKCZodHRwX2F1dGgpOworCQlnb3RvIHJldHJ5OworCX0KKwlpZiAoZXJyICE9IEhUVFBfT0spCisJCWVyciA9IC0xOworCisJaWYgKCFycGMtPmFueV93cml0dGVuKQorCQllcnIgPSAtMTsKKworCWN1cmxfc2xpc3RfZnJlZV9hbGwoaGVhZGVycyk7CisJZnJlZShnemlwX2JvZHkpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcnBjX3NlcnZpY2Uoc3RydWN0IHJwY19zdGF0ZSAqcnBjLCBzdHJ1Y3QgZGlzY292ZXJ5ICpoZWFkcywKKwkJICAgICAgIGNvbnN0IGNoYXIgKipjbGllbnRfYXJndiwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqcHJlYW1ibGUsCisJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICpycGNfcmVzdWx0KQoreworCWNvbnN0IGNoYXIgKnN2YyA9IHJwYy0+c2VydmljZV9uYW1lOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2xpZW50ID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCBlcnIgPSAwOworCisJY2xpZW50LmluID0gLTE7CisJY2xpZW50Lm91dCA9IC0xOworCWNsaWVudC5naXRfY21kID0gMTsKKwljbGllbnQuYXJndiA9IGNsaWVudF9hcmd2OworCWlmIChzdGFydF9jb21tYW5kKCZjbGllbnQpKQorCQlleGl0KDEpOworCXdyaXRlX29yX2RpZShjbGllbnQuaW4sIHByZWFtYmxlLT5idWYsIHByZWFtYmxlLT5sZW4pOworCWlmIChoZWFkcykKKwkJd3JpdGVfb3JfZGllKGNsaWVudC5pbiwgaGVhZHMtPmJ1ZiwgaGVhZHMtPmxlbik7CisKKwlycGMtPmFsbG9jID0gaHR0cF9wb3N0X2J1ZmZlcjsKKwlycGMtPmJ1ZiA9IHhtYWxsb2MocnBjLT5hbGxvYyk7CisJcnBjLT5pbiA9IGNsaWVudC5pbjsKKwlycGMtPm91dCA9IGNsaWVudC5vdXQ7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiJXMlcyIsIHVybC5idWYsIHN2Yyk7CisJcnBjLT5zZXJ2aWNlX3VybCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LSVzLXJlcXVlc3QiLCBzdmMpOworCXJwYy0+aGRyX2NvbnRlbnRfdHlwZSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiQWNjZXB0OiBhcHBsaWNhdGlvbi94LSVzLXJlc3VsdCIsIHN2Yyk7CisJcnBjLT5oZHJfYWNjZXB0ID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCWlmIChnZXRfcHJvdG9jb2xfaHR0cF9oZWFkZXIoaGVhZHMtPnZlcnNpb24sICZidWYpKQorCQlycGMtPnByb3RvY29sX2hlYWRlciA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJZWxzZQorCQlycGMtPnByb3RvY29sX2hlYWRlciA9IE5VTEw7CisKKwl3aGlsZSAoIWVycikgeworCQlpbnQgbiA9IHBhY2tldF9yZWFkKHJwYy0+b3V0LCBOVUxMLCBOVUxMLCBycGMtPmJ1ZiwgcnBjLT5hbGxvYywgMCk7CisJCWlmICghbikKKwkJCWJyZWFrOworCQlycGMtPnBvcyA9IDA7CisJCXJwYy0+bGVuID0gbjsKKwkJZXJyIHw9IHBvc3RfcnBjKHJwYywgMCk7CisJfQorCisJY2xvc2UoY2xpZW50LmluKTsKKwljbGllbnQuaW4gPSAtMTsKKwlpZiAoIWVycikgeworCQlzdHJidWZfcmVhZChycGNfcmVzdWx0LCBjbGllbnQub3V0LCAwKTsKKwl9IGVsc2UgeworCQljaGFyIGJ1Zls0MDk2XTsKKwkJZm9yICg7OykKKwkJCWlmICh4cmVhZChjbGllbnQub3V0LCBidWYsIHNpemVvZihidWYpKSA8PSAwKQorCQkJCWJyZWFrOworCX0KKworCWNsb3NlKGNsaWVudC5vdXQpOworCWNsaWVudC5vdXQgPSAtMTsKKworCWVyciB8PSBmaW5pc2hfY29tbWFuZCgmY2xpZW50KTsKKwlmcmVlKHJwYy0+c2VydmljZV91cmwpOworCWZyZWUocnBjLT5oZHJfY29udGVudF90eXBlKTsKKwlmcmVlKHJwYy0+aGRyX2FjY2VwdCk7CisJZnJlZShycGMtPnByb3RvY29sX2hlYWRlcik7CisJZnJlZShycGMtPmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBmZXRjaF9kdW1iKGludCBucl9oZWFkcywgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQoreworCXN0cnVjdCB3YWxrZXIgKndhbGtlcjsKKwljaGFyICoqdGFyZ2V0czsKKwlpbnQgcmV0LCBpOworCisJQUxMT0NfQVJSQVkodGFyZ2V0cywgbnJfaGVhZHMpOworCWlmIChvcHRpb25zLmRlcHRoIHx8IG9wdGlvbnMuZGVlcGVuX3NpbmNlKQorCQlkaWUoXygiZHVtYiBodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2FwYWJpbGl0aWVzIikpOworCWZvciAoaSA9IDA7IGkgPCBucl9oZWFkczsgaSsrKQorCQl0YXJnZXRzW2ldID0geHN0cmR1cChvaWRfdG9faGV4KCZ0b19mZXRjaFtpXS0+b2xkX29pZCkpOworCisJd2Fsa2VyID0gZ2V0X2h0dHBfd2Fsa2VyKHVybC5idWYpOworCXdhbGtlci0+Z2V0X3ZlcmJvc2VseSA9IG9wdGlvbnMudmVyYm9zaXR5ID49IDM7CisJd2Fsa2VyLT5nZXRfcHJvZ3Jlc3MgPSBvcHRpb25zLnByb2dyZXNzOworCXdhbGtlci0+Z2V0X3JlY292ZXIgPSAwOworCXJldCA9IHdhbGtlcl9mZXRjaCh3YWxrZXIsIG5yX2hlYWRzLCB0YXJnZXRzLCBOVUxMLCBOVUxMKTsKKwl3YWxrZXJfZnJlZSh3YWxrZXIpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspCisJCWZyZWUodGFyZ2V0c1tpXSk7CisJZnJlZSh0YXJnZXRzKTsKKworCXJldHVybiByZXQgPyBlcnJvcihfKCJmZXRjaCBmYWlsZWQuIikpIDogMDsKK30KKworc3RhdGljIGludCBmZXRjaF9naXQoc3RydWN0IGRpc2NvdmVyeSAqaGVhZHMsCisJaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJc3RydWN0IHJwY19zdGF0ZSBycGM7CisJc3RydWN0IHN0cmJ1ZiBwcmVhbWJsZSA9IFNUUkJVRl9JTklUOworCWludCBpLCBlcnI7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHJwY19yZXN1bHQgPSBTVFJCVUZfSU5JVDsKKworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3MsICJmZXRjaC1wYWNrIiwgIi0tc3RhdGVsZXNzLXJwYyIsCisJCQkgIi0tc3RkaW4iLCAiLS1sb2NrLXBhY2siLCBOVUxMKTsKKwlpZiAob3B0aW9ucy5mb2xsb3d0YWdzKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLWluY2x1ZGUtdGFnIik7CisJaWYgKG9wdGlvbnMudGhpbikKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS10aGluIik7CisJaWYgKG9wdGlvbnMudmVyYm9zaXR5ID49IDMpCisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3MsICItdiIsICItdiIsIE5VTEwpOworCWlmIChvcHRpb25zLmNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tY2hlY2stc2VsZi1jb250YWluZWQtYW5kLWNvbm5lY3RlZCIpOworCWlmIChvcHRpb25zLmNsb25pbmcpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tY2xvbmluZyIpOworCWlmIChvcHRpb25zLnVwZGF0ZV9zaGFsbG93KQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXVwZGF0ZS1zaGFsbG93Iik7CisJaWYgKCFvcHRpb25zLnByb2dyZXNzKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLW5vLXByb2dyZXNzIik7CisJaWYgKG9wdGlvbnMuZGVwdGgpCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmFyZ3MsICItLWRlcHRoPSVsdSIsIG9wdGlvbnMuZGVwdGgpOworCWlmIChvcHRpb25zLmRlZXBlbl9zaW5jZSkKKwkJYXJndl9hcnJheV9wdXNoZigmYXJncywgIi0tc2hhbGxvdy1zaW5jZT0lcyIsIG9wdGlvbnMuZGVlcGVuX3NpbmNlKTsKKwlmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy5kZWVwZW5fbm90Lm5yOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmFyZ3MsICItLXNoYWxsb3ctZXhjbHVkZT0lcyIsCisJCQkJIG9wdGlvbnMuZGVlcGVuX25vdC5pdGVtc1tpXS5zdHJpbmcpOworCWlmIChvcHRpb25zLmRlZXBlbl9yZWxhdGl2ZSAmJiBvcHRpb25zLmRlcHRoKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLWRlZXBlbi1yZWxhdGl2ZSIpOworCWlmIChvcHRpb25zLmZyb21fcHJvbWlzb3IpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tZnJvbS1wcm9taXNvciIpOworCWlmIChvcHRpb25zLm5vX2RlcGVuZGVudHMpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tbm8tZGVwZW5kZW50cyIpOworCWlmIChvcHRpb25zLmZpbHRlcikKKwkJYXJndl9hcnJheV9wdXNoZigmYXJncywgIi0tZmlsdGVyPSVzIiwgb3B0aW9ucy5maWx0ZXIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgdXJsLmJ1Zik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaGVhZHM7IGkrKykgeworCQlzdHJ1Y3QgcmVmICpyZWYgPSB0b19mZXRjaFtpXTsKKwkJaWYgKCEqcmVmLT5uYW1lKQorCQkJZGllKF8oImNhbm5vdCBmZXRjaCBieSBzaGExIG92ZXIgc21hcnQgaHR0cCIpKTsKKwkJcGFja2V0X2J1Zl93cml0ZSgmcHJlYW1ibGUsICIlcyAlc1xuIiwKKwkJCQkgb2lkX3RvX2hleCgmcmVmLT5vbGRfb2lkKSwgcmVmLT5uYW1lKTsKKwl9CisJcGFja2V0X2J1Zl9mbHVzaCgmcHJlYW1ibGUpOworCisJbWVtc2V0KCZycGMsIDAsIHNpemVvZihycGMpKTsKKwlycGMuc2VydmljZV9uYW1lID0gImdpdC11cGxvYWQtcGFjayIsCisJcnBjLmd6aXBfcmVxdWVzdCA9IDE7CisKKwllcnIgPSBycGNfc2VydmljZSgmcnBjLCBoZWFkcywgYXJncy5hcmd2LCAmcHJlYW1ibGUsICZycGNfcmVzdWx0KTsKKwlpZiAocnBjX3Jlc3VsdC5sZW4pCisJCXdyaXRlX29yX2RpZSgxLCBycGNfcmVzdWx0LmJ1ZiwgcnBjX3Jlc3VsdC5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZycGNfcmVzdWx0KTsKKwlzdHJidWZfcmVsZWFzZSgmcHJlYW1ibGUpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2goaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJc3RydWN0IGRpc2NvdmVyeSAqZCA9IGRpc2NvdmVyX3JlZnMoImdpdC11cGxvYWQtcGFjayIsIDApOworCWlmIChkLT5wcm90b19naXQpCisJCXJldHVybiBmZXRjaF9naXQoZCwgbnJfaGVhZHMsIHRvX2ZldGNoKTsKKwllbHNlCisJCXJldHVybiBmZXRjaF9kdW1iKG5yX2hlYWRzLCB0b19mZXRjaCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2ZldGNoKHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlzdHJ1Y3QgcmVmICoqdG9fZmV0Y2ggPSBOVUxMOworCXN0cnVjdCByZWYgKmxpc3RfaGVhZCA9IE5VTEw7CisJc3RydWN0IHJlZiAqKmxpc3QgPSAmbGlzdF9oZWFkOworCWludCBhbGxvY19oZWFkcyA9IDAsIG5yX2hlYWRzID0gMDsKKworCWRvIHsKKwkJY29uc3QgY2hhciAqcDsKKwkJaWYgKHNraXBfcHJlZml4KGJ1Zi0+YnVmLCAiZmV0Y2ggIiwgJnApKSB7CisJCQljb25zdCBjaGFyICpuYW1lOworCQkJc3RydWN0IHJlZiAqcmVmOworCQkJc3RydWN0IG9iamVjdF9pZCBvbGRfb2lkOworCQkJY29uc3QgY2hhciAqcTsKKworCQkJaWYgKHBhcnNlX29pZF9oZXgocCwgJm9sZF9vaWQsICZxKSkKKwkJCQlkaWUoXygicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAnJXMnIiksIHApOworCQkJaWYgKCpxID09ICcgJykKKwkJCQluYW1lID0gcSArIDE7CisJCQllbHNlIGlmICghKnEpCisJCQkJbmFtZSA9ICIiOworCQkJZWxzZQorCQkJCWRpZShfKCJwcm90b2NvbCBlcnJvcjogZXhwZWN0ZWQgc2hhL3JlZiwgZ290ICclcyciKSwgcCk7CisKKwkJCXJlZiA9IGFsbG9jX3JlZihuYW1lKTsKKwkJCW9pZGNweSgmcmVmLT5vbGRfb2lkLCAmb2xkX29pZCk7CisKKwkJCSpsaXN0ID0gcmVmOworCQkJbGlzdCA9ICZyZWYtPm5leHQ7CisKKwkJCUFMTE9DX0dST1codG9fZmV0Y2gsIG5yX2hlYWRzICsgMSwgYWxsb2NfaGVhZHMpOworCQkJdG9fZmV0Y2hbbnJfaGVhZHMrK10gPSByZWY7CisJCX0KKwkJZWxzZQorCQkJZGllKF8oImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiKSwgYnVmLT5idWYpOworCisJCXN0cmJ1Zl9yZXNldChidWYpOworCQlpZiAoc3RyYnVmX2dldGxpbmVfbGYoYnVmLCBzdGRpbikgPT0gRU9GKQorCQkJcmV0dXJuOworCQlpZiAoISpidWYtPmJ1ZikKKwkJCWJyZWFrOworCX0gd2hpbGUgKDEpOworCisJaWYgKGZldGNoKG5yX2hlYWRzLCB0b19mZXRjaCkpCisJCWV4aXQoMTI4KTsgLyogZXJyb3IgYWxyZWFkeSByZXBvcnRlZCAqLworCWZyZWVfcmVmcyhsaXN0X2hlYWQpOworCWZyZWUodG9fZmV0Y2gpOworCisJcHJpbnRmKCJcbiIpOworCWZmbHVzaChzdGRvdXQpOworCXN0cmJ1Zl9yZXNldChidWYpOworfQorCitzdGF0aWMgaW50IHB1c2hfZGF2KGludCBucl9zcGVjLCBjb25zdCBjaGFyICoqc3BlY3MpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hpbGQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc2l6ZV90IGk7CisKKwljaGlsZC5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2goJmNoaWxkLmFyZ3MsICJodHRwLXB1c2giKTsKKwlhcmd2X2FycmF5X3B1c2goJmNoaWxkLmFyZ3MsICItLWhlbHBlci1zdGF0dXMiKTsKKwlpZiAob3B0aW9ucy5kcnlfcnVuKQorCQlhcmd2X2FycmF5X3B1c2goJmNoaWxkLmFyZ3MsICItLWRyeS1ydW4iKTsKKwlpZiAob3B0aW9ucy52ZXJib3NpdHkgPiAxKQorCQlhcmd2X2FycmF5X3B1c2goJmNoaWxkLmFyZ3MsICItLXZlcmJvc2UiKTsKKwlhcmd2X2FycmF5X3B1c2goJmNoaWxkLmFyZ3MsIHVybC5idWYpOworCWZvciAoaSA9IDA7IGkgPCBucl9zcGVjOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgc3BlY3NbaV0pOworCisJaWYgKHJ1bl9jb21tYW5kKCZjaGlsZCkpCisJCWRpZShfKCJnaXQtaHR0cC1wdXNoIGZhaWxlZCIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXNoX2dpdChzdHJ1Y3QgZGlzY292ZXJ5ICpoZWFkcywgaW50IG5yX3NwZWMsIGNvbnN0IGNoYXIgKipzcGVjcykKK3sKKwlzdHJ1Y3QgcnBjX3N0YXRlIHJwYzsKKwlpbnQgaSwgZXJyOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3M7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmNhc19vcHRpb247CisJc3RydWN0IHN0cmJ1ZiBwcmVhbWJsZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcnBjX3Jlc3VsdCA9IFNUUkJVRl9JTklUOworCisJYXJndl9hcnJheV9pbml0KCZhcmdzKTsKKwlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAic2VuZC1wYWNrIiwgIi0tc3RhdGVsZXNzLXJwYyIsICItLWhlbHBlci1zdGF0dXMiLAorCQkJIE5VTEwpOworCisJaWYgKG9wdGlvbnMudGhpbikKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS10aGluIik7CisJaWYgKG9wdGlvbnMuZHJ5X3J1bikKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1kcnktcnVuIik7CisJaWYgKG9wdGlvbnMucHVzaF9jZXJ0ID09IFNFTkRfUEFDS19QVVNIX0NFUlRfQUxXQVlTKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXNpZ25lZD15ZXMiKTsKKwllbHNlIGlmIChvcHRpb25zLnB1c2hfY2VydCA9PSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0lGX0FTS0VEKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXNpZ25lZD1pZi1hc2tlZCIpOworCWlmIChvcHRpb25zLmF0b21pYykKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1hdG9taWMiKTsKKwlpZiAob3B0aW9ucy52ZXJib3NpdHkgPT0gMCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1xdWlldCIpOworCWVsc2UgaWYgKG9wdGlvbnMudmVyYm9zaXR5ID4gMSkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS12ZXJib3NlIik7CisJZm9yIChpID0gMDsgaSA8IG9wdGlvbnMucHVzaF9vcHRpb25zLm5yOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmFyZ3MsICItLXB1c2gtb3B0aW9uPSVzIiwKKwkJCQkgb3B0aW9ucy5wdXNoX29wdGlvbnMuaXRlbXNbaV0uc3RyaW5nKTsKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdGlvbnMucHJvZ3Jlc3MgPyAiLS1wcm9ncmVzcyIgOiAiLS1uby1wcm9ncmVzcyIpOworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oY2FzX29wdGlvbiwgJmNhc19vcHRpb25zKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIGNhc19vcHRpb24tPnN0cmluZyk7CisJYXJndl9hcnJheV9wdXNoKCZhcmdzLCB1cmwuYnVmKTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tc3RkaW4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfc3BlYzsgaSsrKQorCQlwYWNrZXRfYnVmX3dyaXRlKCZwcmVhbWJsZSwgIiVzXG4iLCBzcGVjc1tpXSk7CisJcGFja2V0X2J1Zl9mbHVzaCgmcHJlYW1ibGUpOworCisJbWVtc2V0KCZycGMsIDAsIHNpemVvZihycGMpKTsKKwlycGMuc2VydmljZV9uYW1lID0gImdpdC1yZWNlaXZlLXBhY2siLAorCisJZXJyID0gcnBjX3NlcnZpY2UoJnJwYywgaGVhZHMsIGFyZ3MuYXJndiwgJnByZWFtYmxlLCAmcnBjX3Jlc3VsdCk7CisJaWYgKHJwY19yZXN1bHQubGVuKQorCQl3cml0ZV9vcl9kaWUoMSwgcnBjX3Jlc3VsdC5idWYsIHJwY19yZXN1bHQubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmcnBjX3Jlc3VsdCk7CisJc3RyYnVmX3JlbGVhc2UoJnByZWFtYmxlKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHB1c2goaW50IG5yX3NwZWMsIGNvbnN0IGNoYXIgKipzcGVjcykKK3sKKwlzdHJ1Y3QgZGlzY292ZXJ5ICpoZWFkcyA9IGRpc2NvdmVyX3JlZnMoImdpdC1yZWNlaXZlLXBhY2siLCAxKTsKKwlpbnQgcmV0OworCisJaWYgKGhlYWRzLT5wcm90b19naXQpCisJCXJldCA9IHB1c2hfZ2l0KGhlYWRzLCBucl9zcGVjLCBzcGVjcyk7CisJZWxzZQorCQlyZXQgPSBwdXNoX2Rhdihucl9zcGVjLCBzcGVjcyk7CisJZnJlZV9kaXNjb3ZlcnkoaGVhZHMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3B1c2goc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCXN0cnVjdCBhcmd2X2FycmF5IHNwZWNzID0gQVJHVl9BUlJBWV9JTklUOworCWludCByZXQ7CisKKwlkbyB7CisJCWNvbnN0IGNoYXIgKmFyZzsKKwkJaWYgKHNraXBfcHJlZml4KGJ1Zi0+YnVmLCAicHVzaCAiLCAmYXJnKSkKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmc3BlY3MsIGFyZyk7CisJCWVsc2UKKwkJCWRpZShfKCJodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0ICVzIiksIGJ1Zi0+YnVmKTsKKworCQlzdHJidWZfcmVzZXQoYnVmKTsKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lX2xmKGJ1Ziwgc3RkaW4pID09IEVPRikKKwkJCWdvdG8gZnJlZV9zcGVjczsKKwkJaWYgKCEqYnVmLT5idWYpCisJCQlicmVhazsKKwl9IHdoaWxlICgxKTsKKworCXJldCA9IHB1c2goc3BlY3MuYXJnYywgc3BlY3MuYXJndik7CisJcHJpbnRmKCJcbiIpOworCWZmbHVzaChzdGRvdXQpOworCisJaWYgKHJldCkKKwkJZXhpdCgxMjgpOyAvKiBlcnJvciBhbHJlYWR5IHJlcG9ydGVkICovCisKKyBmcmVlX3NwZWNzOgorCWFyZ3ZfYXJyYXlfY2xlYXIoJnNwZWNzKTsKK30KKworc3RhdGljIGludCBzdGF0ZWxlc3NfY29ubmVjdChjb25zdCBjaGFyICpzZXJ2aWNlX25hbWUpCit7CisJc3RydWN0IGRpc2NvdmVyeSAqZGlzY292ZXI7CisJc3RydWN0IHJwY19zdGF0ZSBycGM7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCS8qCisJICogUnVuIHRoZSBpbmZvL3JlZnMgcmVxdWVzdCBhbmQgc2VlIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgcHJvdG9jb2wKKwkgKiB2Mi4gIElmIGFuZCBvbmx5IGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgdjIgY2FuIHdlIHN1Y2Nlc3NmdWxseQorCSAqIGVzdGFibGlzaCBhIHN0YXRlbGVzcyBjb25uZWN0aW9uLCBvdGhlcndpc2Ugd2UgbmVlZCB0byB0ZWxsIHRoZQorCSAqIGNsaWVudCB0byBmYWxsYmFjayB0byB1c2luZyBvdGhlciB0cmFuc3BvcnQgaGVscGVyIGZ1bmN0aW9ucyB0bworCSAqIGNvbXBsZXRlIHRoZWlyIHJlcXVlc3QuCisJICovCisJZGlzY292ZXIgPSBkaXNjb3Zlcl9yZWZzKHNlcnZpY2VfbmFtZSwgMCk7CisJaWYgKGRpc2NvdmVyLT52ZXJzaW9uICE9IHByb3RvY29sX3YyKSB7CisJCXByaW50ZigiZmFsbGJhY2tcbiIpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCS8qIFN0YXRlbGVzcyBDb25uZWN0aW9uIGVzdGFibGlzaGVkICovCisJCXByaW50ZigiXG4iKTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJfQorCisJcnBjLnNlcnZpY2VfbmFtZSA9IHNlcnZpY2VfbmFtZTsKKwlycGMuc2VydmljZV91cmwgPSB4c3RyZm10KCIlcyVzIiwgdXJsLmJ1ZiwgcnBjLnNlcnZpY2VfbmFtZSk7CisJcnBjLmhkcl9jb250ZW50X3R5cGUgPSB4c3RyZm10KCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtJXMtcmVxdWVzdCIsIHJwYy5zZXJ2aWNlX25hbWUpOworCXJwYy5oZHJfYWNjZXB0ID0geHN0cmZtdCgiQWNjZXB0OiBhcHBsaWNhdGlvbi94LSVzLXJlc3VsdCIsIHJwYy5zZXJ2aWNlX25hbWUpOworCWlmIChnZXRfcHJvdG9jb2xfaHR0cF9oZWFkZXIoZGlzY292ZXItPnZlcnNpb24sICZidWYpKSB7CisJCXJwYy5wcm90b2NvbF9oZWFkZXIgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCX0gZWxzZSB7CisJCXJwYy5wcm90b2NvbF9oZWFkZXIgPSBOVUxMOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9CisJcnBjLmJ1ZiA9IHhtYWxsb2MoaHR0cF9wb3N0X2J1ZmZlcik7CisJcnBjLmFsbG9jID0gaHR0cF9wb3N0X2J1ZmZlcjsKKwlycGMubGVuID0gMDsKKwlycGMucG9zID0gMDsKKwlycGMuaW4gPSAxOworCXJwYy5vdXQgPSAwOworCXJwYy5hbnlfd3JpdHRlbiA9IDA7CisJcnBjLmd6aXBfcmVxdWVzdCA9IDE7CisJcnBjLmluaXRpYWxfYnVmZmVyID0gMDsKKwlycGMud3JpdGVfbGluZV9sZW5ndGhzID0gMTsKKwlycGMuZmx1c2hfcmVhZF9idXRfbm90X3NlbnQgPSAwOworCisJLyoKKwkgKiBEdW1wIHRoZSBjYXBhYmlsaXR5IGxpc3RpbmcgdGhhdCB3ZSBnb3QgZnJvbSB0aGUgc2VydmVyIGVhcmxpZXIKKwkgKiBkdXJpbmcgdGhlIGluZm8vcmVmcyByZXF1ZXN0LgorCSAqLworCXdyaXRlX29yX2RpZShycGMuaW4sIGRpc2NvdmVyLT5idWYsIGRpc2NvdmVyLT5sZW4pOworCisJLyogVW50aWwgd2Ugc2VlIEVPRiBrZWVwIHNlbmRpbmcgUE9TVHMgKi8KKwl3aGlsZSAoMSkgeworCQlzaXplX3QgYXZhaWw7CisJCWVudW0gcGFja2V0X3JlYWRfc3RhdHVzIHN0YXR1czsKKworCQlpZiAoIXJwY19yZWFkX2Zyb21fb3V0KCZycGMsIFBBQ0tFVF9SRUFEX0dFTlRMRV9PTl9FT0YsICZhdmFpbCwKKwkJCQkgICAgICAgJnN0YXR1cykpCisJCQlCVUcoIlRoZSBlbnRpcmUgcnBjLT5idWYgc2hvdWxkIGJlIGxhcmdlciB0aGFuIExBUkdFX1BBQ0tFVF9NQVgiKTsKKwkJaWYgKHN0YXR1cyA9PSBQQUNLRVRfUkVBRF9FT0YpCisJCQlicmVhazsKKwkJaWYgKHBvc3RfcnBjKCZycGMsIHN0YXR1cyA9PSBQQUNLRVRfUkVBRF9GTFVTSCkpCisJCQkvKiBXZSB3b3VsZCBoYXZlIGFuIGVyciBoZXJlICovCisJCQlicmVhazsKKwkJLyogUmVzZXQgdGhlIGJ1ZmZlciBmb3IgbmV4dCByZXF1ZXN0ICovCisJCXJwYy5sZW4gPSAwOworCX0KKworCWZyZWUocnBjLnNlcnZpY2VfdXJsKTsKKwlmcmVlKHJwYy5oZHJfY29udGVudF90eXBlKTsKKwlmcmVlKHJwYy5oZHJfYWNjZXB0KTsKKwlmcmVlKHJwYy5wcm90b2NvbF9oZWFkZXIpOworCWZyZWUocnBjLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBub25naXQ7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0KTsKKwlpZiAoYXJnYyA8IDIpIHsKKwkJZXJyb3IoXygicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPHJlbW90ZT4gWzx1cmw+XSIpKTsKKwkJcmV0dXJuIDE7CisJfQorCisJb3B0aW9ucy52ZXJib3NpdHkgPSAxOworCW9wdGlvbnMucHJvZ3Jlc3MgPSAhIWlzYXR0eSgyKTsKKwlvcHRpb25zLnRoaW4gPSAxOworCXN0cmluZ19saXN0X2luaXQoJm9wdGlvbnMuZGVlcGVuX25vdCwgMSk7CisJc3RyaW5nX2xpc3RfaW5pdCgmb3B0aW9ucy5wdXNoX29wdGlvbnMsIDEpOworCisJLyoKKwkgKiBKdXN0IHJlcG9ydCAicmVtb3RlLWN1cmwiIGhlcmUgKGZvbGRpbmcgYWxsIHRoZSB2YXJpb3VzIGFsaWFzZXMKKwkgKiAoImdpdC1yZW1vdGUtaHR0cCIsICJnaXQtcmVtb3RlLWh0dHBzIiwgYW5kIGV0Yy4pIGhlcmUgc2luY2UgdGhleQorCSAqIGFyZSBhbGwganVzdCBjb3BpZXMgb2YgdGhlIHNhbWUgYWN0dWFsIGV4ZWN1dGFibGUuCisJICovCisJdHJhY2UyX2NtZF9uYW1lKCJyZW1vdGUtY3VybCIpOworCisJcmVtb3RlID0gcmVtb3RlX2dldChhcmd2WzFdKTsKKworCWlmIChhcmdjID4gMikgeworCQllbmRfdXJsX3dpdGhfc2xhc2goJnVybCwgYXJndlsyXSk7CisJfSBlbHNlIHsKKwkJZW5kX3VybF93aXRoX3NsYXNoKCZ1cmwsIHJlbW90ZS0+dXJsWzBdKTsKKwl9CisKKwlodHRwX2luaXQocmVtb3RlLCB1cmwuYnVmLCAwKTsKKworCWRvIHsKKwkJY29uc3QgY2hhciAqYXJnOworCisJCWlmIChzdHJidWZfZ2V0bGluZV9sZigmYnVmLCBzdGRpbikgPT0gRU9GKSB7CisJCQlpZiAoZmVycm9yKHN0ZGluKSkKKwkJCQllcnJvcihfKCJyZW1vdGUtY3VybDogZXJyb3IgcmVhZGluZyBjb21tYW5kIHN0cmVhbSBmcm9tIGdpdCIpKTsKKwkJCXJldHVybiAxOworCQl9CisJCWlmIChidWYubGVuID09IDApCisJCQlicmVhazsKKwkJaWYgKHN0YXJ0c193aXRoKGJ1Zi5idWYsICJmZXRjaCAiKSkgeworCQkJaWYgKG5vbmdpdCkKKwkJCQlkaWUoXygicmVtb3RlLWN1cmw6IGZldGNoIGF0dGVtcHRlZCB3aXRob3V0IGEgbG9jYWwgcmVwbyIpKTsKKwkJCXBhcnNlX2ZldGNoKCZidWYpOworCisJCX0gZWxzZSBpZiAoIXN0cmNtcChidWYuYnVmLCAibGlzdCIpIHx8IHN0YXJ0c193aXRoKGJ1Zi5idWYsICJsaXN0ICIpKSB7CisJCQlpbnQgZm9yX3B1c2ggPSAhIXN0cnN0cihidWYuYnVmICsgNCwgImZvci1wdXNoIik7CisJCQlvdXRwdXRfcmVmcyhnZXRfcmVmcyhmb3JfcHVzaCkpOworCisJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoYnVmLmJ1ZiwgInB1c2ggIikpIHsKKwkJCXBhcnNlX3B1c2goJmJ1Zik7CisKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChidWYuYnVmLCAib3B0aW9uICIsICZhcmcpKSB7CisJCQljaGFyICp2YWx1ZSA9IHN0cmNocihhcmcsICcgJyk7CisJCQlpbnQgcmVzdWx0OworCisJCQlpZiAodmFsdWUpCisJCQkJKnZhbHVlKysgPSAnXDAnOworCQkJZWxzZQorCQkJCXZhbHVlID0gInRydWUiOworCisJCQlyZXN1bHQgPSBzZXRfb3B0aW9uKGFyZywgdmFsdWUpOworCQkJaWYgKCFyZXN1bHQpCisJCQkJcHJpbnRmKCJva1xuIik7CisJCQllbHNlIGlmIChyZXN1bHQgPCAwKQorCQkJCXByaW50ZigiZXJyb3IgaW52YWxpZCB2YWx1ZVxuIik7CisJCQllbHNlCisJCQkJcHJpbnRmKCJ1bnN1cHBvcnRlZFxuIik7CisJCQlmZmx1c2goc3Rkb3V0KTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLmJ1ZiwgImNhcGFiaWxpdGllcyIpKSB7CisJCQlwcmludGYoInN0YXRlbGVzcy1jb25uZWN0XG4iKTsKKwkJCXByaW50ZigiZmV0Y2hcbiIpOworCQkJcHJpbnRmKCJvcHRpb25cbiIpOworCQkJcHJpbnRmKCJwdXNoXG4iKTsKKwkJCXByaW50ZigiY2hlY2stY29ubmVjdGl2aXR5XG4iKTsKKwkJCXByaW50ZigiXG4iKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGJ1Zi5idWYsICJzdGF0ZWxlc3MtY29ubmVjdCAiLCAmYXJnKSkgeworCQkJaWYgKCFzdGF0ZWxlc3NfY29ubmVjdChhcmcpKQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJZXJyb3IoXygicmVtb3RlLWN1cmw6IHVua25vd24gY29tbWFuZCAnJXMnIGZyb20gZ2l0IiksIGJ1Zi5idWYpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCX0gd2hpbGUgKDEpOworCisJaHR0cF9jbGVhbnVwKCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3JlbW90ZS10ZXN0c3ZuLmMgYi9yZW1vdGUtdGVzdHN2bi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZjcwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9yZW1vdGUtdGVzdHN2bi5jCkBAIC0wLDAgKzEsMzM3IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInZjcy1zdm4vc3ZuZHVtcC5oIgorI2luY2x1ZGUgIm5vdGVzLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqdXJsOworc3RhdGljIGludCBkdW1wX2Zyb21fZmlsZTsKK3N0YXRpYyBjb25zdCBjaGFyICpwcml2YXRlX3JlZjsKK3N0YXRpYyBjb25zdCBjaGFyICpyZW1vdGVfcmVmID0gInJlZnMvaGVhZHMvbWFzdGVyIjsKK3N0YXRpYyBjb25zdCBjaGFyICptYXJrc2ZpbGVuYW1lLCAqbm90ZXNfcmVmOworc3RydWN0IHJldl9ub3RlIHsgdW5zaWduZWQgaW50IHJldl9ucjsgfTsKKworc3RhdGljIGludCBjbWRfY2FwYWJpbGl0aWVzKGNvbnN0IGNoYXIgKmxpbmUpOworc3RhdGljIGludCBjbWRfaW1wb3J0KGNvbnN0IGNoYXIgKmxpbmUpOworc3RhdGljIGludCBjbWRfbGlzdChjb25zdCBjaGFyICpsaW5lKTsKKwordHlwZWRlZiBpbnQgKCppbnB1dF9jb21tYW5kX2hhbmRsZXIpKGNvbnN0IGNoYXIgKik7CitzdHJ1Y3QgaW5wdXRfY29tbWFuZF9lbnRyeSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnB1dF9jb21tYW5kX2hhbmRsZXIgZm47CisJdW5zaWduZWQgY2hhciBiYXRjaGFibGU7CS8qIHdoZXRoZXIgdGhlIGNvbW1hbmQgc3RhcnRzIG9yIGlzIHBhcnQgb2YgYSBiYXRjaCAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnB1dF9jb21tYW5kX2VudHJ5IGlucHV0X2NvbW1hbmRfbGlzdFtdID0geworCXsgImNhcGFiaWxpdGllcyIsIGNtZF9jYXBhYmlsaXRpZXMsIDAgfSwKKwl7ICJpbXBvcnQiLCBjbWRfaW1wb3J0LCAxIH0sCisJeyAibGlzdCIsIGNtZF9saXN0LCAwIH0sCisJeyBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyBpbnQgY21kX2NhcGFiaWxpdGllcyhjb25zdCBjaGFyICpsaW5lKQoreworCXByaW50ZigiaW1wb3J0XG4iKTsKKwlwcmludGYoImJpZGktaW1wb3J0XG4iKTsKKwlwcmludGYoInJlZnNwZWMgJXM6JXNcblxuIiwgcmVtb3RlX3JlZiwgcHJpdmF0ZV9yZWYpOworCWZmbHVzaChzdGRvdXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZXJtaW5hdGVfYmF0Y2godm9pZCkKK3sKKwkvKiB0ZXJtaW5hdGUgYSBjdXJyZW50IGJhdGNoJ3MgZmFzdC1pbXBvcnQgc3RyZWFtICovCisJcHJpbnRmKCJkb25lXG4iKTsKKwlmZmx1c2goc3Rkb3V0KTsKK30KKworLyogTk9URTogJ3JlZicgcmVmZXJzIHRvIGEgZ2l0IHJlZmVyZW5jZSwgd2hpbGUgJ3JldicgcmVmZXJzIHRvIGEgc3ZuIHJldmlzaW9uLiAqLworc3RhdGljIGNoYXIgKnJlYWRfcmVmX25vdGUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5vdGVfb2lkOworCWNoYXIgKm1zZyA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBtc2dsZW47CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJaW5pdF9ub3RlcyhOVUxMLCBub3Rlc19yZWYsIE5VTEwsIDApOworCWlmICghKG5vdGVfb2lkID0gZ2V0X25vdGUoTlVMTCwgb2lkKSkpCisJCXJldHVybiBOVUxMOwkvKiBub3RlIHRyZWUgbm90IGZvdW5kICovCisJaWYgKCEobXNnID0gcmVhZF9vYmplY3RfZmlsZShub3RlX29pZCwgJnR5cGUsICZtc2dsZW4pKSkKKwkJZXJyb3IoIkVtcHR5IG5vdGVzIHRyZWUuICVzIiwgbm90ZXNfcmVmKTsKKwllbHNlIGlmICghbXNnbGVuIHx8IHR5cGUgIT0gT0JKX0JMT0IpIHsKKwkJZXJyb3IoIk5vdGUgY29udGFpbnMgdW51c2FibGUgY29udGVudC4gIgorCQkJIklzIHNvbWV0aGluZyBlbHNlIHVzaW5nIHRoaXMgbm90ZXMgdHJlZT8gJXMiLCBub3Rlc19yZWYpOworCQlGUkVFX0FORF9OVUxMKG1zZyk7CisJfQorCWZyZWVfbm90ZXMoTlVMTCk7CisJcmV0dXJuIG1zZzsKK30KKworc3RhdGljIGludCBwYXJzZV9yZXZfbm90ZShjb25zdCBjaGFyICptc2csIHN0cnVjdCByZXZfbm90ZSAqcmVzKQoreworCWNvbnN0IGNoYXIgKmtleSwgKnZhbHVlLCAqZW5kOworCXNpemVfdCBsZW47CisKKwl3aGlsZSAoKm1zZykgeworCQllbmQgPSBzdHJjaHJudWwobXNnLCAnXG4nKTsKKwkJbGVuID0gZW5kIC0gbXNnOworCisJCWtleSA9ICJSZXZpc2lvbi1udW1iZXI6ICI7CisJCWlmIChzdGFydHNfd2l0aChtc2csIGtleSkpIHsKKwkJCWxvbmcgaTsKKwkJCWNoYXIgKmVuZDsKKwkJCXZhbHVlID0gbXNnICsgc3RybGVuKGtleSk7CisJCQlpID0gc3RydG9sKHZhbHVlLCAmZW5kLCAwKTsKKwkJCWlmIChlbmQgPT0gdmFsdWUgfHwgaSA8IDAgfHwgaSA+IFVJTlQzMl9NQVgpCisJCQkJcmV0dXJuIC0xOworCQkJcmVzLT5yZXZfbnIgPSBpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbXNnICs9IGxlbiArIDE7CisJfQorCS8qIGRpZG4ndCBmaW5kIGl0ICovCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IG5vdGUybWFya19jYihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvYmplY3Rfb2lkLAorCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpub3RlX29pZCwgY2hhciAqbm90ZV9wYXRoLAorCQl2b2lkICpjYl9kYXRhKQoreworCUZJTEUgKmZpbGUgPSAoRklMRSAqKWNiX2RhdGE7CisJY2hhciAqbXNnOworCXVuc2lnbmVkIGxvbmcgbXNnbGVuOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlzdHJ1Y3QgcmV2X25vdGUgbm90ZTsKKworCWlmICghKG1zZyA9IHJlYWRfb2JqZWN0X2ZpbGUobm90ZV9vaWQsICZ0eXBlLCAmbXNnbGVuKSkgfHwKKwkJCSFtc2dsZW4gfHwgdHlwZSAhPSBPQkpfQkxPQikgeworCQlmcmVlKG1zZyk7CisJCXJldHVybiAxOworCX0KKwlpZiAocGFyc2VfcmV2X25vdGUobXNnLCAmbm90ZSkpCisJCXJldHVybiAyOworCWlmIChmcHJpbnRmKGZpbGUsICI6JWQgJXNcbiIsIG5vdGUucmV2X25yLCBvaWRfdG9faGV4KG9iamVjdF9vaWQpKSA8IDEpCisJCXJldHVybiAzOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWdlbmVyYXRlX21hcmtzKHZvaWQpCit7CisJaW50IHJldDsKKwlGSUxFICptYXJrc2ZpbGUgPSB4Zm9wZW4obWFya3NmaWxlbmFtZSwgIncrIik7CisKKwlyZXQgPSBmb3JfZWFjaF9ub3RlKE5VTEwsIDAsIG5vdGUybWFya19jYiwgbWFya3NmaWxlKTsKKwlpZiAocmV0KQorCQlkaWUoIlJlZ2VuZXJhdGlvbiBvZiBtYXJrcyBmYWlsZWQsIHJldHVybmVkICVkLiIsIHJldCk7CisJZmNsb3NlKG1hcmtzZmlsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX29yX3JlZ2VuZXJhdGVfbWFya3MoaW50IGxhdGVzdHJldikKK3sKKwlGSUxFICptYXJrc2ZpbGU7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCWludCBmb3VuZCA9IDA7CisKKwlpZiAobGF0ZXN0cmV2IDwgMSkKKwkJcmV0dXJuOworCisJaW5pdF9ub3RlcyhOVUxMLCBub3Rlc19yZWYsIE5VTEwsIDApOworCW1hcmtzZmlsZSA9IGZvcGVuKG1hcmtzZmlsZW5hbWUsICJyIik7CisJaWYgKCFtYXJrc2ZpbGUpIHsKKwkJcmVnZW5lcmF0ZV9tYXJrcygpOworCQltYXJrc2ZpbGUgPSB4Zm9wZW4obWFya3NmaWxlbmFtZSwgInIiKTsKKwkJZmNsb3NlKG1hcmtzZmlsZSk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZGYoJnNiLCAiOiVkICIsIGxhdGVzdHJldik7CisJCXdoaWxlIChzdHJidWZfZ2V0bGluZV9sZigmbGluZSwgbWFya3NmaWxlKSAhPSBFT0YpIHsKKwkJCWlmIChzdGFydHNfd2l0aChsaW5lLmJ1Ziwgc2IuYnVmKSkgeworCQkJCWZvdW5kKys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZmNsb3NlKG1hcmtzZmlsZSk7CisJCWlmICghZm91bmQpCisJCQlyZWdlbmVyYXRlX21hcmtzKCk7CisJfQorCWZyZWVfbm90ZXMoTlVMTCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7Cit9CisKK3N0YXRpYyBpbnQgY21kX2ltcG9ydChjb25zdCBjaGFyICpsaW5lKQoreworCWludCBjb2RlOworCWludCBkdW1waW5fZmQ7CisJY2hhciAqbm90ZV9tc2c7CisJc3RydWN0IG9iamVjdF9pZCBoZWFkX29pZDsKKwl1bnNpZ25lZCBpbnQgc3RhcnRyZXY7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3Mgc3ZuZHVtcF9wcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKmNvbW1hbmQgPSAic3ZucmR1bXAiOworCisJaWYgKHJlYWRfcmVmKHByaXZhdGVfcmVmLCAmaGVhZF9vaWQpKQorCQlzdGFydHJldiA9IDA7CisJZWxzZSB7CisJCW5vdGVfbXNnID0gcmVhZF9yZWZfbm90ZSgmaGVhZF9vaWQpOworCQlpZihub3RlX21zZyA9PSBOVUxMKSB7CisJCQl3YXJuaW5nKCJObyBub3RlIGZvdW5kIGZvciAlcy4iLCBwcml2YXRlX3JlZik7CisJCQlzdGFydHJldiA9IDA7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgcmV2X25vdGUgbm90ZSA9IHsgMCB9OworCQkJaWYgKHBhcnNlX3Jldl9ub3RlKG5vdGVfbXNnLCAmbm90ZSkpCisJCQkJZGllKCJSZXZpc2lvbiBudW1iZXIgY291bGRuJ3QgYmUgcGFyc2VkIGZyb20gbm90ZS4iKTsKKwkJCXN0YXJ0cmV2ID0gbm90ZS5yZXZfbnIgKyAxOworCQkJZnJlZShub3RlX21zZyk7CisJCX0KKwl9CisJY2hlY2tfb3JfcmVnZW5lcmF0ZV9tYXJrcyhzdGFydHJldiAtIDEpOworCisJaWYgKGR1bXBfZnJvbV9maWxlKSB7CisJCWR1bXBpbl9mZCA9IG9wZW4odXJsLCBPX1JET05MWSk7CisJCWlmKGR1bXBpbl9mZCA8IDApCisJCQlkaWVfZXJybm8oIkNvdWxkbid0IG9wZW4gc3ZuIGR1bXAgZmlsZSAlcy4iLCB1cmwpOworCX0gZWxzZSB7CisJCXN2bmR1bXBfcHJvYy5vdXQgPSAtMTsKKwkJYXJndl9hcnJheV9wdXNoKCZzdm5kdW1wX3Byb2MuYXJncywgY29tbWFuZCk7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmc3ZuZHVtcF9wcm9jLmFyZ3MsICJkdW1wIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmc3ZuZHVtcF9wcm9jLmFyZ3MsIHVybCk7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJnN2bmR1bXBfcHJvYy5hcmdzLCAiLXIldTpIRUFEIiwgc3RhcnRyZXYpOworCisJCWNvZGUgPSBzdGFydF9jb21tYW5kKCZzdm5kdW1wX3Byb2MpOworCQlpZiAoY29kZSkKKwkJCWRpZSgiVW5hYmxlIHRvIHN0YXJ0ICVzLCBjb2RlICVkIiwgY29tbWFuZCwgY29kZSk7CisJCWR1bXBpbl9mZCA9IHN2bmR1bXBfcHJvYy5vdXQ7CisJfQorCS8qIHNldHVwIG1hcmtzIGZpbGUgaW1wb3J0L2V4cG9ydCAqLworCXByaW50ZigiZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzPSVzXG4iCisJCQkiZmVhdHVyZSBleHBvcnQtbWFya3M9JXNcbiIsIG1hcmtzZmlsZW5hbWUsIG1hcmtzZmlsZW5hbWUpOworCisJc3ZuZHVtcF9pbml0X2ZkKGR1bXBpbl9mZCwgU1RESU5fRklMRU5PKTsKKwlzdm5kdW1wX3JlYWQodXJsLCBwcml2YXRlX3JlZiwgbm90ZXNfcmVmKTsKKwlzdm5kdW1wX2RlaW5pdCgpOworCXN2bmR1bXBfcmVzZXQoKTsKKworCWNsb3NlKGR1bXBpbl9mZCk7CisJaWYgKCFkdW1wX2Zyb21fZmlsZSkgeworCQljb2RlID0gZmluaXNoX2NvbW1hbmQoJnN2bmR1bXBfcHJvYyk7CisJCWlmIChjb2RlKQorCQkJd2FybmluZygiJXMsIHJldHVybmVkICVkIiwgY29tbWFuZCwgY29kZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21kX2xpc3QoY29uc3QgY2hhciAqbGluZSkKK3sKKwlwcmludGYoIj8gJXNcblxuIiwgcmVtb3RlX3JlZik7CisJZmZsdXNoKHN0ZG91dCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG9fY29tbWFuZChzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCWNvbnN0IHN0cnVjdCBpbnB1dF9jb21tYW5kX2VudHJ5ICpwID0gaW5wdXRfY29tbWFuZF9saXN0OworCXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgYmF0Y2hsaW5lcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5wdXRfY29tbWFuZF9lbnRyeSAqYmF0Y2hfY21kOworCS8qCisJICogY29tbWFuZHMgY2FuIGJlIGdyb3VwZWQgdG9nZXRoZXIgaW4gYSBiYXRjaC4KKwkgKiBCYXRjaGVzIGFyZSBlbmRlZCBieSBcbi4gSWYgbm8gYmF0Y2ggaXMgYWN0aXZlIHRoZSBwcm9ncmFtIGVuZHMuCisJICogRHVyaW5nIGEgYmF0Y2ggYWxsIGxpbmVzIGFyZSBidWZmZXJlZCBhbmQgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGZ1bmN0aW9uCisJICogd2hlbiB0aGUgYmF0Y2ggaXMgdGVybWluYXRlZC4KKwkgKi8KKwlpZiAobGluZS0+bGVuID09IDApIHsKKwkJaWYgKGJhdGNoX2NtZCkgeworCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZiYXRjaGxpbmVzKQorCQkJCWJhdGNoX2NtZC0+Zm4oaXRlbS0+c3RyaW5nKTsKKwkJCXRlcm1pbmF0ZV9iYXRjaCgpOworCQkJYmF0Y2hfY21kID0gTlVMTDsKKwkJCXN0cmluZ19saXN0X2NsZWFyKCZiYXRjaGxpbmVzLCAwKTsKKwkJCXJldHVybiAwOwkvKiBlbmQgb2YgdGhlIGJhdGNoLCBjb250aW51ZSByZWFkaW5nIG90aGVyIGNvbW1hbmRzLiAqLworCQl9CisJCXJldHVybiAxOwkvKiBlbmQgb2YgY29tbWFuZCBzdHJlYW0sIHF1aXQgKi8KKwl9CisJaWYgKGJhdGNoX2NtZCkgeworCQlpZiAoIXN0YXJ0c193aXRoKGJhdGNoX2NtZC0+bmFtZSwgbGluZS0+YnVmKSkKKwkJCWRpZSgiQWN0aXZlICVzIGJhdGNoIGludGVycnVwdGVkIGJ5ICVzIiwgYmF0Y2hfY21kLT5uYW1lLCBsaW5lLT5idWYpOworCQkvKiBidWZmZXIgYmF0Y2ggbGluZXMgKi8KKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZiYXRjaGxpbmVzLCBsaW5lLT5idWYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKHAgPSBpbnB1dF9jb21tYW5kX2xpc3Q7IHAtPm5hbWU7IHArKykgeworCQlpZiAoc3RhcnRzX3dpdGgobGluZS0+YnVmLCBwLT5uYW1lKSAmJiAoc3RybGVuKHAtPm5hbWUpID09IGxpbmUtPmxlbiB8fAorCQkJCWxpbmUtPmJ1ZltzdHJsZW4ocC0+bmFtZSldID09ICcgJykpIHsKKwkJCWlmIChwLT5iYXRjaGFibGUpIHsKKwkJCQliYXRjaF9jbWQgPSBwOworCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmYmF0Y2hsaW5lcywgbGluZS0+YnVmKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXJldHVybiBwLT5mbihsaW5lLT5idWYpOworCQl9CisJfQorCWRpZSgiVW5rbm93biBjb21tYW5kICclcydcbiIsIGxpbmUtPmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgdXJsX3NiID0gU1RSQlVGX0lOSVQsCisJCQlwcml2YXRlX3JlZl9zYiA9IFNUUkJVRl9JTklULCBtYXJrc2ZpbGVuYW1lX3NiID0gU1RSQlVGX0lOSVQsCisJCQlub3Rlc19yZWZfc2IgPSBTVFJCVUZfSU5JVDsKKwlzdGF0aWMgc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCWNvbnN0IGNoYXIgKnVybF9pbjsKKworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwlpZiAoYXJnYyA8IDIgfHwgYXJnYyA+IDMpIHsKKwkJdXNhZ2UoImdpdC1yZW1vdGUtc3ZuIDxyZW1vdGUtbmFtZT4gWzx1cmw+XSIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KGFyZ3ZbMV0pOworCXVybF9pbiA9IChhcmdjID09IDMpID8gYXJndlsyXSA6IHJlbW90ZS0+dXJsWzBdOworCisJaWYgKHN0YXJ0c193aXRoKHVybF9pbiwgImZpbGU6Ly8iKSkgeworCQlkdW1wX2Zyb21fZmlsZSA9IDE7CisJCXVybCA9IHVybF9kZWNvZGUodXJsX2luICsgc2l6ZW9mKCJmaWxlOi8vIiktMSk7CisJfSBlbHNlIHsKKwkJZHVtcF9mcm9tX2ZpbGUgPSAwOworCQllbmRfdXJsX3dpdGhfc2xhc2goJnVybF9zYiwgdXJsX2luKTsKKwkJdXJsID0gdXJsX3NiLmJ1ZjsKKwl9CisKKwlzdHJidWZfYWRkZigmcHJpdmF0ZV9yZWZfc2IsICJyZWZzL3N2bi8lcy9tYXN0ZXIiLCByZW1vdGUtPm5hbWUpOworCXByaXZhdGVfcmVmID0gcHJpdmF0ZV9yZWZfc2IuYnVmOworCisJc3RyYnVmX2FkZGYoJm5vdGVzX3JlZl9zYiwgInJlZnMvbm90ZXMvJXMvcmV2cyIsIHJlbW90ZS0+bmFtZSk7CisJbm90ZXNfcmVmID0gbm90ZXNfcmVmX3NiLmJ1ZjsKKworCXN0cmJ1Zl9hZGRmKCZtYXJrc2ZpbGVuYW1lX3NiLCAiJXMvaW5mby9mYXN0LWltcG9ydC9yZW1vdGUtc3ZuLyVzLm1hcmtzIiwKKwkJZ2V0X2dpdF9kaXIoKSwgcmVtb3RlLT5uYW1lKTsKKwltYXJrc2ZpbGVuYW1lID0gbWFya3NmaWxlbmFtZV9zYi5idWY7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoc3RyYnVmX2dldGxpbmVfbGYoJmJ1Ziwgc3RkaW4pID09IEVPRikgeworCQkJaWYgKGZlcnJvcihzdGRpbikpCisJCQkJZGllKCJFcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIik7CisJCQllbHNlCisJCQkJZGllKCJVbmV4cGVjdGVkIGVuZCBvZiBjb21tYW5kIHN0cmVhbSIpOworCQl9CisJCWlmIChkb19jb21tYW5kKCZidWYpKQorCQkJYnJlYWs7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmdXJsX3NiKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJpdmF0ZV9yZWZfc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZub3Rlc19yZWZfc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZtYXJrc2ZpbGVuYW1lX3NiKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3JlbW90ZS5jIGIvcmVtb3RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0YzY0MgotLS0gL2Rldi9udWxsCisrKyBiL3JlbW90ZS5jCkBAIC0wLDAgKzEsMjMwMiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlZnNwZWMuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgIm1lcmdlc29ydC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJhZHZpY2UuaCIKKworZW51bSBtYXBfZGlyZWN0aW9uIHsgRlJPTV9TUkMsIEZST01fRFNUIH07CisKK3N0cnVjdCBjb3VudGVkX3N0cmluZyB7CisJc2l6ZV90IGxlbjsKKwljb25zdCBjaGFyICpzOworfTsKK3N0cnVjdCByZXdyaXRlIHsKKwljb25zdCBjaGFyICpiYXNlOworCXNpemVfdCBiYXNlbGVuOworCXN0cnVjdCBjb3VudGVkX3N0cmluZyAqaW5zdGVhZF9vZjsKKwlpbnQgaW5zdGVhZF9vZl9ucjsKKwlpbnQgaW5zdGVhZF9vZl9hbGxvYzsKK307CitzdHJ1Y3QgcmV3cml0ZXMgeworCXN0cnVjdCByZXdyaXRlICoqcmV3cml0ZTsKKwlpbnQgcmV3cml0ZV9hbGxvYzsKKwlpbnQgcmV3cml0ZV9ucjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVtb3RlICoqcmVtb3RlczsKK3N0YXRpYyBpbnQgcmVtb3Rlc19hbGxvYzsKK3N0YXRpYyBpbnQgcmVtb3Rlc19ucjsKK3N0YXRpYyBzdHJ1Y3QgaGFzaG1hcCByZW1vdGVzX2hhc2g7CisKK3N0YXRpYyBzdHJ1Y3QgYnJhbmNoICoqYnJhbmNoZXM7CitzdGF0aWMgaW50IGJyYW5jaGVzX2FsbG9jOworc3RhdGljIGludCBicmFuY2hlc19ucjsKKworc3RhdGljIHN0cnVjdCBicmFuY2ggKmN1cnJlbnRfYnJhbmNoOworc3RhdGljIGNvbnN0IGNoYXIgKnB1c2hyZW1vdGVfbmFtZTsKKworc3RhdGljIHN0cnVjdCByZXdyaXRlcyByZXdyaXRlczsKK3N0YXRpYyBzdHJ1Y3QgcmV3cml0ZXMgcmV3cml0ZXNfcHVzaDsKKworc3RhdGljIGludCB2YWxpZF9yZW1vdGUoY29uc3Qgc3RydWN0IHJlbW90ZSAqcmVtb3RlKQoreworCXJldHVybiAoISFyZW1vdGUtPnVybCkgfHwgKCEhcmVtb3RlLT5mb3JlaWduX3Zjcyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICphbGlhc191cmwoY29uc3QgY2hhciAqdXJsLCBzdHJ1Y3QgcmV3cml0ZXMgKnIpCit7CisJaW50IGksIGo7CisJc3RydWN0IGNvdW50ZWRfc3RyaW5nICpsb25nZXN0OworCWludCBsb25nZXN0X2k7CisKKwlsb25nZXN0ID0gTlVMTDsKKwlsb25nZXN0X2kgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgci0+cmV3cml0ZV9ucjsgaSsrKSB7CisJCWlmICghci0+cmV3cml0ZVtpXSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgci0+cmV3cml0ZVtpXS0+aW5zdGVhZF9vZl9ucjsgaisrKSB7CisJCQlpZiAoc3RhcnRzX3dpdGgodXJsLCByLT5yZXdyaXRlW2ldLT5pbnN0ZWFkX29mW2pdLnMpICYmCisJCQkgICAgKCFsb25nZXN0IHx8CisJCQkgICAgIGxvbmdlc3QtPmxlbiA8IHItPnJld3JpdGVbaV0tPmluc3RlYWRfb2Zbal0ubGVuKSkgeworCQkJCWxvbmdlc3QgPSAmKHItPnJld3JpdGVbaV0tPmluc3RlYWRfb2Zbal0pOworCQkJCWxvbmdlc3RfaSA9IGk7CisJCQl9CisJCX0KKwl9CisJaWYgKCFsb25nZXN0KQorCQlyZXR1cm4gdXJsOworCisJcmV0dXJuIHhzdHJmbXQoIiVzJXMiLCByLT5yZXdyaXRlW2xvbmdlc3RfaV0tPmJhc2UsIHVybCArIGxvbmdlc3QtPmxlbik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF91cmwoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICp1cmwpCit7CisJQUxMT0NfR1JPVyhyZW1vdGUtPnVybCwgcmVtb3RlLT51cmxfbnIgKyAxLCByZW1vdGUtPnVybF9hbGxvYyk7CisJcmVtb3RlLT51cmxbcmVtb3RlLT51cmxfbnIrK10gPSB1cmw7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wdXNodXJsKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqcHVzaHVybCkKK3sKKwlBTExPQ19HUk9XKHJlbW90ZS0+cHVzaHVybCwgcmVtb3RlLT5wdXNodXJsX25yICsgMSwgcmVtb3RlLT5wdXNodXJsX2FsbG9jKTsKKwlyZW1vdGUtPnB1c2h1cmxbcmVtb3RlLT5wdXNodXJsX25yKytdID0gcHVzaHVybDsKK30KKworc3RhdGljIHZvaWQgYWRkX3B1c2h1cmxfYWxpYXMoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICp1cmwpCit7CisJY29uc3QgY2hhciAqcHVzaHVybCA9IGFsaWFzX3VybCh1cmwsICZyZXdyaXRlc19wdXNoKTsKKwlpZiAocHVzaHVybCAhPSB1cmwpCisJCWFkZF9wdXNodXJsKHJlbW90ZSwgcHVzaHVybCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF91cmxfYWxpYXMoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICp1cmwpCit7CisJYWRkX3VybChyZW1vdGUsIGFsaWFzX3VybCh1cmwsICZyZXdyaXRlcykpOworCWFkZF9wdXNodXJsX2FsaWFzKHJlbW90ZSwgdXJsKTsKK30KKworc3RydWN0IHJlbW90ZXNfaGFzaF9rZXkgeworCWNvbnN0IGNoYXIgKnN0cjsKKwlpbnQgbGVuOworfTsKKworc3RhdGljIGludCByZW1vdGVzX2hhc2hfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZXB0ciwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnlfb3Jfa2V5LAorCQkJICAgIGNvbnN0IHZvaWQgKmtleWRhdGEpCit7CisJY29uc3Qgc3RydWN0IHJlbW90ZSAqYSwgKmI7CisJY29uc3Qgc3RydWN0IHJlbW90ZXNfaGFzaF9rZXkgKmtleSA9IGtleWRhdGE7CisKKwlhID0gY29udGFpbmVyX29mKGVwdHIsIGNvbnN0IHN0cnVjdCByZW1vdGUsIGVudCk7CisJYiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIGNvbnN0IHN0cnVjdCByZW1vdGUsIGVudCk7CisKKwlpZiAoa2V5KQorCQlyZXR1cm4gc3RybmNtcChhLT5uYW1lLCBrZXktPnN0ciwga2V5LT5sZW4pIHx8IGEtPm5hbWVba2V5LT5sZW5dOworCWVsc2UKKwkJcmV0dXJuIHN0cmNtcChhLT5uYW1lLCBiLT5uYW1lKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfcmVtb3Rlc19oYXNoKHZvaWQpCit7CisJaWYgKCFyZW1vdGVzX2hhc2guY21wZm4pCisJCWhhc2htYXBfaW5pdCgmcmVtb3Rlc19oYXNoLCByZW1vdGVzX2hhc2hfY21wLCBOVUxMLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCByZW1vdGUgKm1ha2VfcmVtb3RlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJc3RydWN0IHJlbW90ZSAqcmV0LCAqcmVwbGFjZWQ7CisJc3RydWN0IHJlbW90ZXNfaGFzaF9rZXkgbG9va3VwOworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGxvb2t1cF9lbnRyeSwgKmU7CisKKwlpZiAoIWxlbikKKwkJbGVuID0gc3RybGVuKG5hbWUpOworCisJaW5pdF9yZW1vdGVzX2hhc2goKTsKKwlsb29rdXAuc3RyID0gbmFtZTsKKwlsb29rdXAubGVuID0gbGVuOworCWhhc2htYXBfZW50cnlfaW5pdCgmbG9va3VwX2VudHJ5LCBtZW1oYXNoKG5hbWUsIGxlbikpOworCisJZSA9IGhhc2htYXBfZ2V0KCZyZW1vdGVzX2hhc2gsICZsb29rdXBfZW50cnksICZsb29rdXApOworCWlmIChlKQorCQlyZXR1cm4gY29udGFpbmVyX29mKGUsIHN0cnVjdCByZW1vdGUsIGVudCk7CisKKwlyZXQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcmVtb3RlKSk7CisJcmV0LT5wcnVuZSA9IC0xOyAgLyogdW5zcGVjaWZpZWQgKi8KKwlyZXQtPnBydW5lX3RhZ3MgPSAtMTsgIC8qIHVuc3BlY2lmaWVkICovCisJcmV0LT5uYW1lID0geHN0cm5kdXAobmFtZSwgbGVuKTsKKwlyZWZzcGVjX2luaXQoJnJldC0+cHVzaCwgUkVGU1BFQ19QVVNIKTsKKwlyZWZzcGVjX2luaXQoJnJldC0+ZmV0Y2gsIFJFRlNQRUNfRkVUQ0gpOworCisJQUxMT0NfR1JPVyhyZW1vdGVzLCByZW1vdGVzX25yICsgMSwgcmVtb3Rlc19hbGxvYyk7CisJcmVtb3Rlc1tyZW1vdGVzX25yKytdID0gcmV0OworCisJaGFzaG1hcF9lbnRyeV9pbml0KCZyZXQtPmVudCwgbG9va3VwX2VudHJ5Lmhhc2gpOworCXJlcGxhY2VkID0gaGFzaG1hcF9wdXRfZW50cnkoJnJlbW90ZXNfaGFzaCwgcmV0LCBlbnQpOworCWFzc2VydChyZXBsYWNlZCA9PSBOVUxMKTsgIC8qIG5vIHByZXZpb3VzIGVudHJ5IG92ZXJ3cml0dGVuICovCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYWRkX21lcmdlKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlBTExPQ19HUk9XKGJyYW5jaC0+bWVyZ2VfbmFtZSwgYnJhbmNoLT5tZXJnZV9uciArIDEsCisJCSAgIGJyYW5jaC0+bWVyZ2VfYWxsb2MpOworCWJyYW5jaC0+bWVyZ2VfbmFtZVticmFuY2gtPm1lcmdlX25yKytdID0gbmFtZTsKK30KKworc3RhdGljIHN0cnVjdCBicmFuY2ggKm1ha2VfYnJhbmNoKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGJyYW5jaCAqcmV0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGJyYW5jaGVzX25yOyBpKyspIHsKKwkJaWYgKCFzdHJuY21wKG5hbWUsIGJyYW5jaGVzW2ldLT5uYW1lLCBsZW4pICYmCisJCSAgICAhYnJhbmNoZXNbaV0tPm5hbWVbbGVuXSkKKwkJCXJldHVybiBicmFuY2hlc1tpXTsKKwl9CisKKwlBTExPQ19HUk9XKGJyYW5jaGVzLCBicmFuY2hlc19uciArIDEsIGJyYW5jaGVzX2FsbG9jKTsKKwlyZXQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgYnJhbmNoKSk7CisJYnJhbmNoZXNbYnJhbmNoZXNfbnIrK10gPSByZXQ7CisJcmV0LT5uYW1lID0geHN0cm5kdXAobmFtZSwgbGVuKTsKKwlyZXQtPnJlZm5hbWUgPSB4c3RyZm10KCJyZWZzL2hlYWRzLyVzIiwgcmV0LT5uYW1lKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmV3cml0ZSAqbWFrZV9yZXdyaXRlKHN0cnVjdCByZXdyaXRlcyAqciwKKwkJCQkgICAgY29uc3QgY2hhciAqYmFzZSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgcmV3cml0ZSAqcmV0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHItPnJld3JpdGVfbnI7IGkrKykgeworCQlpZiAobGVuID09IHItPnJld3JpdGVbaV0tPmJhc2VsZW4gJiYKKwkJICAgICFzdHJuY21wKGJhc2UsIHItPnJld3JpdGVbaV0tPmJhc2UsIGxlbikpCisJCQlyZXR1cm4gci0+cmV3cml0ZVtpXTsKKwl9CisKKwlBTExPQ19HUk9XKHItPnJld3JpdGUsIHItPnJld3JpdGVfbnIgKyAxLCByLT5yZXdyaXRlX2FsbG9jKTsKKwlyZXQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcmV3cml0ZSkpOworCXItPnJld3JpdGVbci0+cmV3cml0ZV9ucisrXSA9IHJldDsKKwlyZXQtPmJhc2UgPSB4c3RybmR1cChiYXNlLCBsZW4pOworCXJldC0+YmFzZWxlbiA9IGxlbjsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhZGRfaW5zdGVhZF9vZihzdHJ1Y3QgcmV3cml0ZSAqcmV3cml0ZSwgY29uc3QgY2hhciAqaW5zdGVhZF9vZikKK3sKKwlBTExPQ19HUk9XKHJld3JpdGUtPmluc3RlYWRfb2YsIHJld3JpdGUtPmluc3RlYWRfb2ZfbnIgKyAxLCByZXdyaXRlLT5pbnN0ZWFkX29mX2FsbG9jKTsKKwlyZXdyaXRlLT5pbnN0ZWFkX29mW3Jld3JpdGUtPmluc3RlYWRfb2ZfbnJdLnMgPSBpbnN0ZWFkX29mOworCXJld3JpdGUtPmluc3RlYWRfb2ZbcmV3cml0ZS0+aW5zdGVhZF9vZl9ucl0ubGVuID0gc3RybGVuKGluc3RlYWRfb2YpOworCXJld3JpdGUtPmluc3RlYWRfb2ZfbnIrKzsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNraXBfc3BhY2VzKGNvbnN0IGNoYXIgKnMpCit7CisJd2hpbGUgKGlzc3BhY2UoKnMpKQorCQlzKys7CisJcmV0dXJuIHM7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfcmVtb3Rlc19maWxlKHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCUZJTEUgKmYgPSBmb3Blbl9vcl93YXJuKGdpdF9wYXRoKCJyZW1vdGVzLyVzIiwgcmVtb3RlLT5uYW1lKSwgInIiKTsKKworCWlmICghZikKKwkJcmV0dXJuOworCXJlbW90ZS0+Y29uZmlndXJlZF9pbl9yZXBvID0gMTsKKwlyZW1vdGUtPm9yaWdpbiA9IFJFTU9URV9SRU1PVEVTOworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmYnVmLCBmKSAhPSBFT0YpIHsKKwkJY29uc3QgY2hhciAqdjsKKworCQlzdHJidWZfcnRyaW0oJmJ1Zik7CisKKwkJaWYgKHNraXBfcHJlZml4KGJ1Zi5idWYsICJVUkw6IiwgJnYpKQorCQkJYWRkX3VybF9hbGlhcyhyZW1vdGUsIHhzdHJkdXAoc2tpcF9zcGFjZXModikpKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoYnVmLmJ1ZiwgIlB1c2g6IiwgJnYpKQorCQkJcmVmc3BlY19hcHBlbmQoJnJlbW90ZS0+cHVzaCwgc2tpcF9zcGFjZXModikpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChidWYuYnVmLCAiUHVsbDoiLCAmdikpCisJCQlyZWZzcGVjX2FwcGVuZCgmcmVtb3RlLT5mZXRjaCwgc2tpcF9zcGFjZXModikpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlmY2xvc2UoZik7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfYnJhbmNoZXNfZmlsZShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUpCit7CisJY2hhciAqZnJhZzsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCUZJTEUgKmYgPSBmb3Blbl9vcl93YXJuKGdpdF9wYXRoKCJicmFuY2hlcy8lcyIsIHJlbW90ZS0+bmFtZSksICJyIik7CisKKwlpZiAoIWYpCisJCXJldHVybjsKKworCXN0cmJ1Zl9nZXRsaW5lX2xmKCZidWYsIGYpOworCWZjbG9zZShmKTsKKwlzdHJidWZfdHJpbSgmYnVmKTsKKwlpZiAoIWJ1Zi5sZW4pIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlyZW1vdGUtPmNvbmZpZ3VyZWRfaW5fcmVwbyA9IDE7CisJcmVtb3RlLT5vcmlnaW4gPSBSRU1PVEVfQlJBTkNIRVM7CisKKwkvKgorCSAqIFRoZSBicmFuY2hlcyBmaWxlIHdvdWxkIGhhdmUgVVJMIGFuZCBvcHRpb25hbGx5CisJICogI2JyYW5jaCBzcGVjaWZpZWQuICBUaGUgIm1hc3RlciIgKG9yIHNwZWNpZmllZCkgYnJhbmNoIGlzCisJICogZmV0Y2hlZCBhbmQgc3RvcmVkIGluIHRoZSBsb2NhbCBicmFuY2ggbWF0Y2hpbmcgdGhlCisJICogcmVtb3RlIG5hbWUuCisJICovCisJZnJhZyA9IHN0cmNocihidWYuYnVmLCAnIycpOworCWlmIChmcmFnKQorCQkqKGZyYWcrKykgPSAnXDAnOworCWVsc2UKKwkJZnJhZyA9ICJtYXN0ZXIiOworCisJYWRkX3VybF9hbGlhcyhyZW1vdGUsIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZWZzL2hlYWRzLyVzOnJlZnMvaGVhZHMvJXMiLAorCQkgICAgZnJhZywgcmVtb3RlLT5uYW1lKTsKKwlyZWZzcGVjX2FwcGVuZCgmcmVtb3RlLT5mZXRjaCwgYnVmLmJ1Zik7CisKKwkvKgorCSAqIENvZ2l0byBjb21wYXRpYmxlIHB1c2g6IHB1c2ggY3VycmVudCBIRUFEIHRvIHJlbW90ZSAjYnJhbmNoCisJICogKG1hc3RlciBpZiBtaXNzaW5nKQorCSAqLworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlzdHJidWZfYWRkZigmYnVmLCAiSEVBRDpyZWZzL2hlYWRzLyVzIiwgZnJhZyk7CisJcmVmc3BlY19hcHBlbmQoJnJlbW90ZS0+cHVzaCwgYnVmLmJ1Zik7CisJcmVtb3RlLT5mZXRjaF90YWdzID0gMTsgLyogYWx3YXlzIGF1dG8tZm9sbG93ICovCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2NvbmZpZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwljb25zdCBjaGFyICpuYW1lOworCXNpemVfdCBuYW1lbGVuOworCWNvbnN0IGNoYXIgKnN1YmtleTsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoOworCWlmIChwYXJzZV9jb25maWdfa2V5KGtleSwgImJyYW5jaCIsICZuYW1lLCAmbmFtZWxlbiwgJnN1YmtleSkgPj0gMCkgeworCQlpZiAoIW5hbWUpCisJCQlyZXR1cm4gMDsKKwkJYnJhbmNoID0gbWFrZV9icmFuY2gobmFtZSwgbmFtZWxlbik7CisJCWlmICghc3RyY21wKHN1YmtleSwgInJlbW90ZSIpKSB7CisJCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmJyYW5jaC0+cmVtb3RlX25hbWUsIGtleSwgdmFsdWUpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAicHVzaHJlbW90ZSIpKSB7CisJCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmJyYW5jaC0+cHVzaHJlbW90ZV9uYW1lLCBrZXksIHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIm1lcmdlIikpIHsKKwkJCWlmICghdmFsdWUpCisJCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGtleSk7CisJCQlhZGRfbWVyZ2UoYnJhbmNoLCB4c3RyZHVwKHZhbHVlKSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCWlmIChwYXJzZV9jb25maWdfa2V5KGtleSwgInVybCIsICZuYW1lLCAmbmFtZWxlbiwgJnN1YmtleSkgPj0gMCkgeworCQlzdHJ1Y3QgcmV3cml0ZSAqcmV3cml0ZTsKKwkJaWYgKCFuYW1lKQorCQkJcmV0dXJuIDA7CisJCWlmICghc3RyY21wKHN1YmtleSwgImluc3RlYWRvZiIpKSB7CisJCQlpZiAoIXZhbHVlKQorCQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrZXkpOworCQkJcmV3cml0ZSA9IG1ha2VfcmV3cml0ZSgmcmV3cml0ZXMsIG5hbWUsIG5hbWVsZW4pOworCQkJYWRkX2luc3RlYWRfb2YocmV3cml0ZSwgeHN0cmR1cCh2YWx1ZSkpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAicHVzaGluc3RlYWRvZiIpKSB7CisJCQlpZiAoIXZhbHVlKQorCQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrZXkpOworCQkJcmV3cml0ZSA9IG1ha2VfcmV3cml0ZSgmcmV3cml0ZXNfcHVzaCwgbmFtZSwgbmFtZWxlbik7CisJCQlhZGRfaW5zdGVhZF9vZihyZXdyaXRlLCB4c3RyZHVwKHZhbHVlKSk7CisJCX0KKwl9CisKKwlpZiAocGFyc2VfY29uZmlnX2tleShrZXksICJyZW1vdGUiLCAmbmFtZSwgJm5hbWVsZW4sICZzdWJrZXkpIDwgMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBIYW5kbGUgcmVtb3RlLiogdmFyaWFibGVzICovCisJaWYgKCFuYW1lICYmICFzdHJjbXAoc3Via2V5LCAicHVzaGRlZmF1bHQiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZwdXNocmVtb3RlX25hbWUsIGtleSwgdmFsdWUpOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gMDsKKwkvKiBIYW5kbGUgcmVtb3RlLjxuYW1lPi4qIHZhcmlhYmxlcyAqLworCWlmICgqbmFtZSA9PSAnLycpIHsKKwkJd2FybmluZyhfKCJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIiksCisJCQluYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCXJlbW90ZSA9IG1ha2VfcmVtb3RlKG5hbWUsIG5hbWVsZW4pOworCXJlbW90ZS0+b3JpZ2luID0gUkVNT1RFX0NPTkZJRzsKKwlpZiAoY3VycmVudF9jb25maWdfc2NvcGUoKSA9PSBDT05GSUdfU0NPUEVfTE9DQUwgfHwKKwljdXJyZW50X2NvbmZpZ19zY29wZSgpID09IENPTkZJR19TQ09QRV9XT1JLVFJFRSkKKwkJcmVtb3RlLT5jb25maWd1cmVkX2luX3JlcG8gPSAxOworCWlmICghc3RyY21wKHN1YmtleSwgIm1pcnJvciIpKQorCQlyZW1vdGUtPm1pcnJvciA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHN1YmtleSwgInNraXBkZWZhdWx0dXBkYXRlIikpCisJCXJlbW90ZS0+c2tpcF9kZWZhdWx0X3VwZGF0ZSA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHN1YmtleSwgInNraXBmZXRjaGFsbCIpKQorCQlyZW1vdGUtPnNraXBfZGVmYXVsdF91cGRhdGUgPSBnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICJwcnVuZSIpKQorCQlyZW1vdGUtPnBydW5lID0gZ2l0X2NvbmZpZ19ib29sKGtleSwgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAicHJ1bmV0YWdzIikpCisJCXJlbW90ZS0+cHJ1bmVfdGFncyA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHN1YmtleSwgInVybCIpKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmIChnaXRfY29uZmlnX3N0cmluZygmdiwga2V5LCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJCWFkZF91cmwocmVtb3RlLCB2KTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAicHVzaHVybCIpKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmIChnaXRfY29uZmlnX3N0cmluZygmdiwga2V5LCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJCWFkZF9wdXNodXJsKHJlbW90ZSwgdik7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgInB1c2giKSkgeworCQljb25zdCBjaGFyICp2OworCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQorCQkJcmV0dXJuIC0xOworCQlyZWZzcGVjX2FwcGVuZCgmcmVtb3RlLT5wdXNoLCB2KTsKKwkJZnJlZSgoY2hhciAqKXYpOworCX0gZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICJmZXRjaCIpKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmIChnaXRfY29uZmlnX3N0cmluZygmdiwga2V5LCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJCXJlZnNwZWNfYXBwZW5kKCZyZW1vdGUtPmZldGNoLCB2KTsKKwkJZnJlZSgoY2hhciAqKXYpOworCX0gZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICJyZWNlaXZlcGFjayIpKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmIChnaXRfY29uZmlnX3N0cmluZygmdiwga2V5LCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJCWlmICghcmVtb3RlLT5yZWNlaXZlcGFjaykKKwkJCXJlbW90ZS0+cmVjZWl2ZXBhY2sgPSB2OworCQllbHNlCisJCQllcnJvcihfKCJtb3JlIHRoYW4gb25lIHJlY2VpdmVwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiKSk7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgInVwbG9hZHBhY2siKSkgeworCQljb25zdCBjaGFyICp2OworCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQorCQkJcmV0dXJuIC0xOworCQlpZiAoIXJlbW90ZS0+dXBsb2FkcGFjaykKKwkJCXJlbW90ZS0+dXBsb2FkcGFjayA9IHY7CisJCWVsc2UKKwkJCWVycm9yKF8oIm1vcmUgdGhhbiBvbmUgdXBsb2FkcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0IikpOworCX0gZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICJ0YWdvcHQiKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIi0tbm8tdGFncyIpKQorCQkJcmVtb3RlLT5mZXRjaF90YWdzID0gLTE7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICItLXRhZ3MiKSkKKwkJCXJlbW90ZS0+ZmV0Y2hfdGFncyA9IDI7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgInByb3h5IikpIHsKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKChjb25zdCBjaGFyICoqKSZyZW1vdGUtPmh0dHBfcHJveHksCisJCQkJCSBrZXksIHZhbHVlKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAicHJveHlhdXRobWV0aG9kIikpIHsKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKChjb25zdCBjaGFyICoqKSZyZW1vdGUtPmh0dHBfcHJveHlfYXV0aG1ldGhvZCwKKwkJCQkJIGtleSwgdmFsdWUpOworCX0gZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICJ2Y3MiKSkgeworCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnJlbW90ZS0+Zm9yZWlnbl92Y3MsIGtleSwgdmFsdWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWxpYXNfYWxsX3VybHModm9pZCkKK3sKKwlpbnQgaSwgajsKKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3Rlc19ucjsgaSsrKSB7CisJCWludCBhZGRfcHVzaHVybF9hbGlhc2VzOworCQlpZiAoIXJlbW90ZXNbaV0pCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IHJlbW90ZXNbaV0tPnB1c2h1cmxfbnI7IGorKykgeworCQkJcmVtb3Rlc1tpXS0+cHVzaHVybFtqXSA9IGFsaWFzX3VybChyZW1vdGVzW2ldLT5wdXNodXJsW2pdLCAmcmV3cml0ZXMpOworCQl9CisJCWFkZF9wdXNodXJsX2FsaWFzZXMgPSByZW1vdGVzW2ldLT5wdXNodXJsX25yID09IDA7CisJCWZvciAoaiA9IDA7IGogPCByZW1vdGVzW2ldLT51cmxfbnI7IGorKykgeworCQkJaWYgKGFkZF9wdXNodXJsX2FsaWFzZXMpCisJCQkJYWRkX3B1c2h1cmxfYWxpYXMocmVtb3Rlc1tpXSwgcmVtb3Rlc1tpXS0+dXJsW2pdKTsKKwkJCXJlbW90ZXNbaV0tPnVybFtqXSA9IGFsaWFzX3VybChyZW1vdGVzW2ldLT51cmxbal0sICZyZXdyaXRlcyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfY29uZmlnKHZvaWQpCit7CisJc3RhdGljIGludCBsb2FkZWQ7CisJaW50IGZsYWc7CisKKwlpZiAobG9hZGVkKQorCQlyZXR1cm47CisJbG9hZGVkID0gMTsKKworCWN1cnJlbnRfYnJhbmNoID0gTlVMTDsKKwlpZiAoc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpIHsKKwkJY29uc3QgY2hhciAqaGVhZF9yZWYgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCBOVUxMLCAmZmxhZyk7CisJCWlmIChoZWFkX3JlZiAmJiAoZmxhZyAmIFJFRl9JU1NZTVJFRikgJiYKKwkJICAgIHNraXBfcHJlZml4KGhlYWRfcmVmLCAicmVmcy9oZWFkcy8iLCAmaGVhZF9yZWYpKSB7CisJCQljdXJyZW50X2JyYW5jaCA9IG1ha2VfYnJhbmNoKGhlYWRfcmVmLCBzdHJsZW4oaGVhZF9yZWYpKTsKKwkJfQorCX0KKwlnaXRfY29uZmlnKGhhbmRsZV9jb25maWcsIE5VTEwpOworCWFsaWFzX2FsbF91cmxzKCk7Cit9CisKK3N0YXRpYyBpbnQgdmFsaWRfcmVtb3RlX25pY2soY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoIW5hbWVbMF0gfHwgaXNfZG90X29yX2RvdGRvdChuYW1lKSkKKwkJcmV0dXJuIDA7CisKKwkvKiByZW1vdGUgbmlja25hbWVzIGNhbm5vdCBjb250YWluIHNsYXNoZXMgKi8KKwl3aGlsZSAoKm5hbWUpCisJCWlmIChpc19kaXJfc2VwKCpuYW1lKyspKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK2NvbnN0IGNoYXIgKnJlbW90ZV9mb3JfYnJhbmNoKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgaW50ICpleHBsaWNpdCkKK3sKKwlpZiAoYnJhbmNoICYmIGJyYW5jaC0+cmVtb3RlX25hbWUpIHsKKwkJaWYgKGV4cGxpY2l0KQorCQkJKmV4cGxpY2l0ID0gMTsKKwkJcmV0dXJuIGJyYW5jaC0+cmVtb3RlX25hbWU7CisJfQorCWlmIChleHBsaWNpdCkKKwkJKmV4cGxpY2l0ID0gMDsKKwlyZXR1cm4gIm9yaWdpbiI7Cit9CisKK2NvbnN0IGNoYXIgKnB1c2hyZW1vdGVfZm9yX2JyYW5jaChzdHJ1Y3QgYnJhbmNoICpicmFuY2gsIGludCAqZXhwbGljaXQpCit7CisJaWYgKGJyYW5jaCAmJiBicmFuY2gtPnB1c2hyZW1vdGVfbmFtZSkgeworCQlpZiAoZXhwbGljaXQpCisJCQkqZXhwbGljaXQgPSAxOworCQlyZXR1cm4gYnJhbmNoLT5wdXNocmVtb3RlX25hbWU7CisJfQorCWlmIChwdXNocmVtb3RlX25hbWUpIHsKKwkJaWYgKGV4cGxpY2l0KQorCQkJKmV4cGxpY2l0ID0gMTsKKwkJcmV0dXJuIHB1c2hyZW1vdGVfbmFtZTsKKwl9CisJcmV0dXJuIHJlbW90ZV9mb3JfYnJhbmNoKGJyYW5jaCwgZXhwbGljaXQpOworfQorCitjb25zdCBjaGFyICpyZW1vdGVfcmVmX2Zvcl9icmFuY2goc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBpbnQgZm9yX3B1c2gpCit7CisJaWYgKGJyYW5jaCkgeworCQlpZiAoIWZvcl9wdXNoKSB7CisJCQlpZiAoYnJhbmNoLT5tZXJnZV9ucikgeworCQkJCXJldHVybiBicmFuY2gtPm1lcmdlX25hbWVbMF07CisJCQl9CisJCX0gZWxzZSB7CisJCQljb25zdCBjaGFyICpkc3QsICpyZW1vdGVfbmFtZSA9CisJCQkJcHVzaHJlbW90ZV9mb3JfYnJhbmNoKGJyYW5jaCwgTlVMTCk7CisJCQlzdHJ1Y3QgcmVtb3RlICpyZW1vdGUgPSByZW1vdGVfZ2V0KHJlbW90ZV9uYW1lKTsKKworCQkJaWYgKHJlbW90ZSAmJiByZW1vdGUtPnB1c2gubnIgJiYKKwkJCSAgICAoZHN0ID0gYXBwbHlfcmVmc3BlY3MoJnJlbW90ZS0+cHVzaCwKKwkJCQkJCSAgYnJhbmNoLT5yZWZuYW1lKSkpIHsKKwkJCQlyZXR1cm4gZHN0OworCQkJfQorCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHJlbW90ZSAqcmVtb3RlX2dldF8xKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgY29uc3QgY2hhciAqKCpnZXRfZGVmYXVsdCkoc3RydWN0IGJyYW5jaCAqLCBpbnQgKikpCit7CisJc3RydWN0IHJlbW90ZSAqcmV0OworCWludCBuYW1lX2dpdmVuID0gMDsKKworCXJlYWRfY29uZmlnKCk7CisKKwlpZiAobmFtZSkKKwkJbmFtZV9naXZlbiA9IDE7CisJZWxzZQorCQluYW1lID0gZ2V0X2RlZmF1bHQoY3VycmVudF9icmFuY2gsICZuYW1lX2dpdmVuKTsKKworCXJldCA9IG1ha2VfcmVtb3RlKG5hbWUsIDApOworCWlmICh2YWxpZF9yZW1vdGVfbmljayhuYW1lKSAmJiBoYXZlX2dpdF9kaXIoKSkgeworCQlpZiAoIXZhbGlkX3JlbW90ZShyZXQpKQorCQkJcmVhZF9yZW1vdGVzX2ZpbGUocmV0KTsKKwkJaWYgKCF2YWxpZF9yZW1vdGUocmV0KSkKKwkJCXJlYWRfYnJhbmNoZXNfZmlsZShyZXQpOworCX0KKwlpZiAobmFtZV9naXZlbiAmJiAhdmFsaWRfcmVtb3RlKHJldCkpCisJCWFkZF91cmxfYWxpYXMocmV0LCBuYW1lKTsKKwlpZiAoIXZhbGlkX3JlbW90ZShyZXQpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgcmVtb3RlICpyZW1vdGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIHJlbW90ZV9nZXRfMShuYW1lLCByZW1vdGVfZm9yX2JyYW5jaCk7Cit9CisKK3N0cnVjdCByZW1vdGUgKnB1c2hyZW1vdGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIHJlbW90ZV9nZXRfMShuYW1lLCBwdXNocmVtb3RlX2Zvcl9icmFuY2gpOworfQorCitpbnQgcmVtb3RlX2lzX2NvbmZpZ3VyZWQoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBpbnQgaW5fcmVwbykKK3sKKwlpZiAoIXJlbW90ZSkKKwkJcmV0dXJuIDA7CisJaWYgKGluX3JlcG8pCisJCXJldHVybiByZW1vdGUtPmNvbmZpZ3VyZWRfaW5fcmVwbzsKKwlyZXR1cm4gISFyZW1vdGUtPm9yaWdpbjsKK30KKworaW50IGZvcl9lYWNoX3JlbW90ZShlYWNoX3JlbW90ZV9mbiBmbiwgdm9pZCAqcHJpdikKK3sKKwlpbnQgaSwgcmVzdWx0ID0gMDsKKwlyZWFkX2NvbmZpZygpOworCWZvciAoaSA9IDA7IGkgPCByZW1vdGVzX25yICYmICFyZXN1bHQ7IGkrKykgeworCQlzdHJ1Y3QgcmVtb3RlICpyID0gcmVtb3Rlc1tpXTsKKwkJaWYgKCFyKQorCQkJY29udGludWU7CisJCXJlc3VsdCA9IGZuKHIsIHByaXYpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZHVwbGljYXRlKHN0cnVjdCByZWYgKnJlZjEsIHN0cnVjdCByZWYgKnJlZjIpCit7CisJaWYgKHN0cmNtcChyZWYxLT5uYW1lLCByZWYyLT5uYW1lKSkgeworCQlpZiAocmVmMS0+ZmV0Y2hfaGVhZF9zdGF0dXMgIT0gRkVUQ0hfSEVBRF9JR05PUkUgJiYKKwkJICAgIHJlZjItPmZldGNoX2hlYWRfc3RhdHVzICE9IEZFVENIX0hFQURfSUdOT1JFKSB7CisJCQlkaWUoXygiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIiksCisJCQkgICAgcmVmMS0+bmFtZSwgcmVmMi0+bmFtZSwgcmVmMi0+cGVlcl9yZWYtPm5hbWUpOworCQl9IGVsc2UgaWYgKHJlZjEtPmZldGNoX2hlYWRfc3RhdHVzICE9IEZFVENIX0hFQURfSUdOT1JFICYmCisJCQkgICByZWYyLT5mZXRjaF9oZWFkX3N0YXR1cyA9PSBGRVRDSF9IRUFEX0lHTk9SRSkgeworCQkJd2FybmluZyhfKCIlcyB1c3VhbGx5IHRyYWNrcyAlcywgbm90ICVzIiksCisJCQkJcmVmMi0+cGVlcl9yZWYtPm5hbWUsIHJlZjItPm5hbWUsIHJlZjEtPm5hbWUpOworCQl9IGVsc2UgaWYgKHJlZjEtPmZldGNoX2hlYWRfc3RhdHVzID09IEZFVENIX0hFQURfSUdOT1JFICYmCisJCQkgICByZWYyLT5mZXRjaF9oZWFkX3N0YXR1cyA9PSBGRVRDSF9IRUFEX0lHTk9SRSkgeworCQkJZGllKF8oIiVzIHRyYWNrcyBib3RoICVzIGFuZCAlcyIpLAorCQkJICAgIHJlZjItPnBlZXJfcmVmLT5uYW1lLCByZWYxLT5uYW1lLCByZWYyLT5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGlzIGxhc3QgcG9zc2liaWxpdHkgZG9lc24ndCBvY2N1ciBiZWNhdXNlCisJCQkgKiBGRVRDSF9IRUFEX0lHTk9SRSBlbnRyaWVzIGFsd2F5cyBhcHBlYXIgYXQKKwkJCSAqIHRoZSBlbmQgb2YgdGhlIGxpc3QuCisJCQkgKi8KKwkJCUJVRygiSW50ZXJuYWwgZXJyb3IiKTsKKwkJfQorCX0KKwlmcmVlKHJlZjItPnBlZXJfcmVmKTsKKwlmcmVlKHJlZjIpOworfQorCitzdHJ1Y3QgcmVmICpyZWZfcmVtb3ZlX2R1cGxpY2F0ZXMoc3RydWN0IHJlZiAqcmVmX21hcCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVmcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHJlZiAqcmV0dmFsID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICoqcCA9ICZyZXR2YWw7CisKKwl3aGlsZSAocmVmX21hcCkgeworCQlzdHJ1Y3QgcmVmICpyZWYgPSByZWZfbWFwOworCisJCXJlZl9tYXAgPSByZWZfbWFwLT5uZXh0OworCQlyZWYtPm5leHQgPSBOVUxMOworCisJCWlmICghcmVmLT5wZWVyX3JlZikgeworCQkJKnAgPSByZWY7CisJCQlwID0gJnJlZi0+bmV4dDsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0KKwkJCQlzdHJpbmdfbGlzdF9pbnNlcnQoJnJlZnMsIHJlZi0+cGVlcl9yZWYtPm5hbWUpOworCisJCQlpZiAoaXRlbS0+dXRpbCkgeworCQkJCS8qIEVudHJ5IGFscmVhZHkgZXhpc3RlZCAqLworCQkJCWhhbmRsZV9kdXBsaWNhdGUoKHN0cnVjdCByZWYgKilpdGVtLT51dGlsLCByZWYpOworCQkJfSBlbHNlIHsKKwkJCQkqcCA9IHJlZjsKKwkJCQlwID0gJnJlZi0+bmV4dDsKKwkJCQlpdGVtLT51dGlsID0gcmVmOworCQkJfQorCQl9CisJfQorCisJc3RyaW5nX2xpc3RfY2xlYXIoJnJlZnMsIDApOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCByZW1vdGVfaGFzX3VybChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnVybCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3RlLT51cmxfbnI7IGkrKykgeworCQlpZiAoIXN0cmNtcChyZW1vdGUtPnVybFtpXSwgdXJsKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXRjaF9uYW1lX3dpdGhfcGF0dGVybihjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgY29uc3QgY2hhciAqdmFsdWUsIGNoYXIgKipyZXN1bHQpCit7CisJY29uc3QgY2hhciAqa3N0YXIgPSBzdHJjaHIoa2V5LCAnKicpOworCXNpemVfdCBrbGVuOworCXNpemVfdCBrc3VmZml4bGVuOworCXNpemVfdCBuYW1lbGVuOworCWludCByZXQ7CisJaWYgKCFrc3RhcikKKwkJZGllKF8oImtleSAnJXMnIG9mIHBhdHRlcm4gaGFkIG5vICcqJyIpLCBrZXkpOworCWtsZW4gPSBrc3RhciAtIGtleTsKKwlrc3VmZml4bGVuID0gc3RybGVuKGtzdGFyICsgMSk7CisJbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKwlyZXQgPSAhc3RybmNtcChuYW1lLCBrZXksIGtsZW4pICYmIG5hbWVsZW4gPj0ga2xlbiArIGtzdWZmaXhsZW4gJiYKKwkJIW1lbWNtcChuYW1lICsgbmFtZWxlbiAtIGtzdWZmaXhsZW4sIGtzdGFyICsgMSwga3N1ZmZpeGxlbik7CisJaWYgKHJldCAmJiB2YWx1ZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCWNvbnN0IGNoYXIgKnZzdGFyID0gc3RyY2hyKHZhbHVlLCAnKicpOworCQlpZiAoIXZzdGFyKQorCQkJZGllKF8oInZhbHVlICclcycgb2YgcGF0dGVybiBoYXMgbm8gJyonIiksIHZhbHVlKTsKKwkJc3RyYnVmX2FkZCgmc2IsIHZhbHVlLCB2c3RhciAtIHZhbHVlKTsKKwkJc3RyYnVmX2FkZCgmc2IsIG5hbWUgKyBrbGVuLCBuYW1lbGVuIC0ga2xlbiAtIGtzdWZmaXhsZW4pOworCQlzdHJidWZfYWRkc3RyKCZzYiwgdnN0YXIgKyAxKTsKKwkJKnJlc3VsdCA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcXVlcnlfcmVmc3BlY3NfbXVsdGlwbGUoc3RydWN0IHJlZnNwZWMgKnJzLAorCQkJCSAgICBzdHJ1Y3QgcmVmc3BlY19pdGVtICpxdWVyeSwKKwkJCQkgICAgc3RydWN0IHN0cmluZ19saXN0ICpyZXN1bHRzKQoreworCWludCBpOworCWludCBmaW5kX3NyYyA9ICFxdWVyeS0+c3JjOworCisJaWYgKGZpbmRfc3JjICYmICFxdWVyeS0+ZHN0KQorCQlCVUcoInF1ZXJ5X3JlZnNwZWNzX211bHRpcGxlOiBuZWVkIGVpdGhlciBzcmMgb3IgZHN0Iik7CisKKwlmb3IgKGkgPSAwOyBpIDwgcnMtPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZnNwZWNfaXRlbSAqcmVmc3BlYyA9ICZycy0+aXRlbXNbaV07CisJCWNvbnN0IGNoYXIgKmtleSA9IGZpbmRfc3JjID8gcmVmc3BlYy0+ZHN0IDogcmVmc3BlYy0+c3JjOworCQljb25zdCBjaGFyICp2YWx1ZSA9IGZpbmRfc3JjID8gcmVmc3BlYy0+c3JjIDogcmVmc3BlYy0+ZHN0OworCQljb25zdCBjaGFyICpuZWVkbGUgPSBmaW5kX3NyYyA/IHF1ZXJ5LT5kc3QgOiBxdWVyeS0+c3JjOworCQljaGFyICoqcmVzdWx0ID0gZmluZF9zcmMgPyAmcXVlcnktPnNyYyA6ICZxdWVyeS0+ZHN0OworCisJCWlmICghcmVmc3BlYy0+ZHN0KQorCQkJY29udGludWU7CisJCWlmIChyZWZzcGVjLT5wYXR0ZXJuKSB7CisJCQlpZiAobWF0Y2hfbmFtZV93aXRoX3BhdHRlcm4oa2V5LCBuZWVkbGUsIHZhbHVlLCByZXN1bHQpKQorCQkJCXN0cmluZ19saXN0X2FwcGVuZF9ub2R1cChyZXN1bHRzLCAqcmVzdWx0KTsKKwkJfSBlbHNlIGlmICghc3RyY21wKG5lZWRsZSwga2V5KSkgeworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKHJlc3VsdHMsIHZhbHVlKTsKKwkJfQorCX0KK30KKworaW50IHF1ZXJ5X3JlZnNwZWNzKHN0cnVjdCByZWZzcGVjICpycywgc3RydWN0IHJlZnNwZWNfaXRlbSAqcXVlcnkpCit7CisJaW50IGk7CisJaW50IGZpbmRfc3JjID0gIXF1ZXJ5LT5zcmM7CisJY29uc3QgY2hhciAqbmVlZGxlID0gZmluZF9zcmMgPyBxdWVyeS0+ZHN0IDogcXVlcnktPnNyYzsKKwljaGFyICoqcmVzdWx0ID0gZmluZF9zcmMgPyAmcXVlcnktPnNyYyA6ICZxdWVyeS0+ZHN0OworCisJaWYgKGZpbmRfc3JjICYmICFxdWVyeS0+ZHN0KQorCQlCVUcoInF1ZXJ5X3JlZnNwZWNzOiBuZWVkIGVpdGhlciBzcmMgb3IgZHN0Iik7CisKKwlmb3IgKGkgPSAwOyBpIDwgcnMtPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZnNwZWNfaXRlbSAqcmVmc3BlYyA9ICZycy0+aXRlbXNbaV07CisJCWNvbnN0IGNoYXIgKmtleSA9IGZpbmRfc3JjID8gcmVmc3BlYy0+ZHN0IDogcmVmc3BlYy0+c3JjOworCQljb25zdCBjaGFyICp2YWx1ZSA9IGZpbmRfc3JjID8gcmVmc3BlYy0+c3JjIDogcmVmc3BlYy0+ZHN0OworCisJCWlmICghcmVmc3BlYy0+ZHN0KQorCQkJY29udGludWU7CisJCWlmIChyZWZzcGVjLT5wYXR0ZXJuKSB7CisJCQlpZiAobWF0Y2hfbmFtZV93aXRoX3BhdHRlcm4oa2V5LCBuZWVkbGUsIHZhbHVlLCByZXN1bHQpKSB7CisJCQkJcXVlcnktPmZvcmNlID0gcmVmc3BlYy0+Zm9yY2U7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcChuZWVkbGUsIGtleSkpIHsKKwkJCSpyZXN1bHQgPSB4c3RyZHVwKHZhbHVlKTsKKwkJCXF1ZXJ5LT5mb3JjZSA9IHJlZnNwZWMtPmZvcmNlOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCitjaGFyICphcHBseV9yZWZzcGVjcyhzdHJ1Y3QgcmVmc3BlYyAqcnMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHJlZnNwZWNfaXRlbSBxdWVyeTsKKworCW1lbXNldCgmcXVlcnksIDAsIHNpemVvZihzdHJ1Y3QgcmVmc3BlY19pdGVtKSk7CisJcXVlcnkuc3JjID0gKGNoYXIgKiluYW1lOworCisJaWYgKHF1ZXJ5X3JlZnNwZWNzKHJzLCAmcXVlcnkpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBxdWVyeS5kc3Q7Cit9CisKK2ludCByZW1vdGVfZmluZF90cmFja2luZyhzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHN0cnVjdCByZWZzcGVjX2l0ZW0gKnJlZnNwZWMpCit7CisJcmV0dXJuIHF1ZXJ5X3JlZnNwZWNzKCZyZW1vdGUtPmZldGNoLCByZWZzcGVjKTsKK30KKworc3RhdGljIHN0cnVjdCByZWYgKmFsbG9jX3JlZl93aXRoX3ByZWZpeChjb25zdCBjaGFyICpwcmVmaXgsIHNpemVfdCBwcmVmaXhsZW4sCisJCWNvbnN0IGNoYXIgKm5hbWUpCit7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihuYW1lKTsKKwlzdHJ1Y3QgcmVmICpyZWYgPSB4Y2FsbG9jKDEsIHN0X2FkZDQoc2l6ZW9mKCpyZWYpLCBwcmVmaXhsZW4sIGxlbiwgMSkpOworCW1lbWNweShyZWYtPm5hbWUsIHByZWZpeCwgcHJlZml4bGVuKTsKKwltZW1jcHkocmVmLT5uYW1lICsgcHJlZml4bGVuLCBuYW1lLCBsZW4pOworCXJldHVybiByZWY7Cit9CisKK3N0cnVjdCByZWYgKmFsbG9jX3JlZihjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiBhbGxvY19yZWZfd2l0aF9wcmVmaXgoIiIsIDAsIG5hbWUpOworfQorCitzdHJ1Y3QgcmVmICpjb3B5X3JlZihjb25zdCBzdHJ1Y3QgcmVmICpyZWYpCit7CisJc3RydWN0IHJlZiAqY3B5OworCXNpemVfdCBsZW47CisJaWYgKCFyZWYpCisJCXJldHVybiBOVUxMOworCWxlbiA9IHN0X2FkZDMoc2l6ZW9mKHN0cnVjdCByZWYpLCBzdHJsZW4ocmVmLT5uYW1lKSwgMSk7CisJY3B5ID0geG1hbGxvYyhsZW4pOworCW1lbWNweShjcHksIHJlZiwgbGVuKTsKKwljcHktPm5leHQgPSBOVUxMOworCWNweS0+c3ltcmVmID0geHN0cmR1cF9vcl9udWxsKHJlZi0+c3ltcmVmKTsKKwljcHktPnJlbW90ZV9zdGF0dXMgPSB4c3RyZHVwX29yX251bGwocmVmLT5yZW1vdGVfc3RhdHVzKTsKKwljcHktPnBlZXJfcmVmID0gY29weV9yZWYocmVmLT5wZWVyX3JlZik7CisJcmV0dXJuIGNweTsKK30KKworc3RydWN0IHJlZiAqY29weV9yZWZfbGlzdChjb25zdCBzdHJ1Y3QgcmVmICpyZWYpCit7CisJc3RydWN0IHJlZiAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICoqdGFpbCA9ICZyZXQ7CisJd2hpbGUgKHJlZikgeworCQkqdGFpbCA9IGNvcHlfcmVmKHJlZik7CisJCXJlZiA9IHJlZi0+bmV4dDsKKwkJdGFpbCA9ICYoKCp0YWlsKS0+bmV4dCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZnJlZV9vbmVfcmVmKHN0cnVjdCByZWYgKnJlZikKK3sKKwlpZiAoIXJlZikKKwkJcmV0dXJuOworCWZyZWVfb25lX3JlZihyZWYtPnBlZXJfcmVmKTsKKwlmcmVlKHJlZi0+cmVtb3RlX3N0YXR1cyk7CisJZnJlZShyZWYtPnN5bXJlZik7CisJZnJlZShyZWYpOworfQorCit2b2lkIGZyZWVfcmVmcyhzdHJ1Y3QgcmVmICpyZWYpCit7CisJc3RydWN0IHJlZiAqbmV4dDsKKwl3aGlsZSAocmVmKSB7CisJCW5leHQgPSByZWYtPm5leHQ7CisJCWZyZWVfb25lX3JlZihyZWYpOworCQlyZWYgPSBuZXh0OworCX0KK30KKworaW50IHJlZl9jb21wYXJlX25hbWUoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQoreworCWNvbnN0IHN0cnVjdCByZWYgKmEgPSB2YSwgKmIgPSB2YjsKKwlyZXR1cm4gc3RyY21wKGEtPm5hbWUsIGItPm5hbWUpOworfQorCitzdGF0aWMgdm9pZCAqcmVmX2xpc3RfZ2V0X25leHQoY29uc3Qgdm9pZCAqYSkKK3sKKwlyZXR1cm4gKChjb25zdCBzdHJ1Y3QgcmVmICopYSktPm5leHQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlZl9saXN0X3NldF9uZXh0KHZvaWQgKmEsIHZvaWQgKm5leHQpCit7CisJKChzdHJ1Y3QgcmVmICopYSktPm5leHQgPSBuZXh0OworfQorCit2b2lkIHNvcnRfcmVmX2xpc3Qoc3RydWN0IHJlZiAqKmwsIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworCSpsID0gbGxpc3RfbWVyZ2Vzb3J0KCpsLCByZWZfbGlzdF9nZXRfbmV4dCwgcmVmX2xpc3Rfc2V0X25leHQsIGNtcCk7Cit9CisKK2ludCBjb3VudF9yZWZzcGVjX21hdGNoKGNvbnN0IGNoYXIgKnBhdHRlcm4sCisJCQlzdHJ1Y3QgcmVmICpyZWZzLAorCQkJc3RydWN0IHJlZiAqKm1hdGNoZWRfcmVmKQoreworCWludCBwYXRsZW4gPSBzdHJsZW4ocGF0dGVybik7CisJc3RydWN0IHJlZiAqbWF0Y2hlZF93ZWFrID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICptYXRjaGVkID0gTlVMTDsKKwlpbnQgd2Vha19tYXRjaCA9IDA7CisJaW50IG1hdGNoID0gMDsKKworCWZvciAod2Vha19tYXRjaCA9IG1hdGNoID0gMDsgcmVmczsgcmVmcyA9IHJlZnMtPm5leHQpIHsKKwkJY2hhciAqbmFtZSA9IHJlZnMtPm5hbWU7CisJCWludCBuYW1lbGVuID0gc3RybGVuKG5hbWUpOworCisJCWlmICghcmVmbmFtZV9tYXRjaChwYXR0ZXJuLCBuYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIEEgbWF0Y2ggaXMgIndlYWsiIGlmIGl0IGlzIHdpdGggcmVmcyBvdXRzaWRlCisJCSAqIGhlYWRzIG9yIHRhZ3MsIGFuZCBkaWQgbm90IHNwZWNpZnkgdGhlIHBhdHRlcm4KKwkJICogaW4gZnVsbCAoZS5nLiAicmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiKSBvciBhdAorCQkgKiBsZWFzdCBmcm9tIHRoZSB0b3BsZXZlbCAoZS5nLiAicmVtb3Rlcy9vcmlnaW4vbWFzdGVyIik7CisJCSAqIG90aGVyd2lzZSAiZ2l0IHB1c2ggJFVSTCBtYXN0ZXIiIHdvdWxkIHJlc3VsdCBpbgorCQkgKiBhbWJpZ3VpdHkgYmV0d2VlbiByZW1vdGVzL29yaWdpbi9tYXN0ZXIgYW5kIGhlYWRzL21hc3RlcgorCQkgKiBhdCB0aGUgcmVtb3RlIHNpdGUuCisJCSAqLworCQlpZiAobmFtZWxlbiAhPSBwYXRsZW4gJiYKKwkJICAgIHBhdGxlbiAhPSBuYW1lbGVuIC0gNSAmJgorCQkgICAgIXN0YXJ0c193aXRoKG5hbWUsICJyZWZzL2hlYWRzLyIpICYmCisJCSAgICAhc3RhcnRzX3dpdGgobmFtZSwgInJlZnMvdGFncy8iKSkgeworCQkJLyogV2Ugd2FudCB0byBjYXRjaCB0aGUgY2FzZSB3aGVyZSBvbmx5IHdlYWsKKwkJCSAqIG1hdGNoZXMgYXJlIGZvdW5kIGFuZCB0aGVyZSBhcmUgbXVsdGlwbGUKKwkJCSAqIG1hdGNoZXMsIGFuZCB3aGVyZSBtb3JlIHRoYW4gb25lIHN0cm9uZworCQkJICogbWF0Y2hlcyBhcmUgZm91bmQsIGFzIGFtYmlndW91cy4gIE9uZQorCQkJICogc3Ryb25nIG1hdGNoIHdpdGggemVybyBvciBtb3JlIHdlYWsgbWF0Y2hlcworCQkJICogYXJlIGFjY2VwdGFibGUgYXMgYSB1bmlxdWUgbWF0Y2guCisJCQkgKi8KKwkJCW1hdGNoZWRfd2VhayA9IHJlZnM7CisJCQl3ZWFrX21hdGNoKys7CisJCX0KKwkJZWxzZSB7CisJCQltYXRjaGVkID0gcmVmczsKKwkJCW1hdGNoKys7CisJCX0KKwl9CisJaWYgKCFtYXRjaGVkKSB7CisJCWlmIChtYXRjaGVkX3JlZikKKwkJCSptYXRjaGVkX3JlZiA9IG1hdGNoZWRfd2VhazsKKwkJcmV0dXJuIHdlYWtfbWF0Y2g7CisJfQorCWVsc2UgeworCQlpZiAobWF0Y2hlZF9yZWYpCisJCQkqbWF0Y2hlZF9yZWYgPSBtYXRjaGVkOworCQlyZXR1cm4gbWF0Y2g7CisJfQorfQorCitzdGF0aWMgdm9pZCB0YWlsX2xpbmtfcmVmKHN0cnVjdCByZWYgKnJlZiwgc3RydWN0IHJlZiAqKip0YWlsKQoreworCSoqdGFpbCA9IHJlZjsKKwl3aGlsZSAocmVmLT5uZXh0KQorCQlyZWYgPSByZWYtPm5leHQ7CisJKnRhaWwgPSAmcmVmLT5uZXh0OworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqYWxsb2NfZGVsZXRlX3JlZih2b2lkKQoreworCXN0cnVjdCByZWYgKnJlZiA9IGFsbG9jX3JlZigiKGRlbGV0ZSkiKTsKKwlvaWRjbHIoJnJlZi0+bmV3X29pZCk7CisJcmV0dXJuIHJlZjsKK30KKworc3RhdGljIGludCB0cnlfZXhwbGljaXRfb2JqZWN0X25hbWUoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgc3RydWN0IHJlZiAqKm1hdGNoKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJaWYgKCEqbmFtZSkgeworCQlpZiAobWF0Y2gpCisJCQkqbWF0Y2ggPSBhbGxvY19kZWxldGVfcmVmKCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChnZXRfb2lkKG5hbWUsICZvaWQpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobWF0Y2gpIHsKKwkJKm1hdGNoID0gYWxsb2NfcmVmKG5hbWUpOworCQlvaWRjcHkoJigqbWF0Y2gpLT5uZXdfb2lkLCAmb2lkKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICptYWtlX2xpbmtlZF9yZWYoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHJlZiAqKip0YWlsKQoreworCXN0cnVjdCByZWYgKnJldCA9IGFsbG9jX3JlZihuYW1lKTsKKwl0YWlsX2xpbmtfcmVmKHJldCwgdGFpbCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNoYXIgKmd1ZXNzX3JlZihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcmVmICpwZWVyKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwljb25zdCBjaGFyICpyID0gcmVzb2x2ZV9yZWZfdW5zYWZlKHBlZXItPm5hbWUsIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCSAgIE5VTEwsIE5VTEwpOworCWlmICghcikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoc3RhcnRzX3dpdGgociwgInJlZnMvaGVhZHMvIikpIHsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAicmVmcy9oZWFkcy8iKTsKKwl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKHIsICJyZWZzL3RhZ3MvIikpIHsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAicmVmcy90YWdzLyIpOworCX0gZWxzZSB7CisJCXJldHVybiBOVUxMOworCX0KKworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgbmFtZSk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfZXhwbGljaXRfbGhzKHN0cnVjdCByZWYgKnNyYywKKwkJCSAgICAgIHN0cnVjdCByZWZzcGVjX2l0ZW0gKnJzLAorCQkJICAgICAgc3RydWN0IHJlZiAqKm1hdGNoLAorCQkJICAgICAgaW50ICphbGxvY2F0ZWRfbWF0Y2gpCit7CisJc3dpdGNoIChjb3VudF9yZWZzcGVjX21hdGNoKHJzLT5zcmMsIHNyYywgbWF0Y2gpKSB7CisJY2FzZSAxOgorCQlpZiAoYWxsb2NhdGVkX21hdGNoKQorCQkJKmFsbG9jYXRlZF9tYXRjaCA9IDA7CisJCXJldHVybiAwOworCWNhc2UgMDoKKwkJLyogVGhlIHNvdXJjZSBjb3VsZCBiZSBpbiB0aGUgZ2V0X3NoYTEoKSBmb3JtYXQKKwkJICogbm90IGEgcmVmZXJlbmNlIG5hbWUuICA6cmVmcy9vdGhlciBpcyBhCisJCSAqIHdheSB0byBkZWxldGUgJ290aGVyJyByZWYgYXQgdGhlIHJlbW90ZSBlbmQuCisJCSAqLworCQlpZiAodHJ5X2V4cGxpY2l0X29iamVjdF9uYW1lKHJzLT5zcmMsIG1hdGNoKSA8IDApCisJCQlyZXR1cm4gZXJyb3IoXygic3JjIHJlZnNwZWMgJXMgZG9lcyBub3QgbWF0Y2ggYW55IiksIHJzLT5zcmMpOworCQlpZiAoYWxsb2NhdGVkX21hdGNoKQorCQkJKmFsbG9jYXRlZF9tYXRjaCA9IDE7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiBlcnJvcihfKCJzcmMgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiKSwgcnMtPnNyYyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X3B1c2hfdW5xdWFsaWZpZWRfcmVmX25hbWVfZXJyb3IoY29uc3QgY2hhciAqZHN0X3ZhbHVlLAorCQkJCQkJIGNvbnN0IGNoYXIgKm1hdGNoZWRfc3JjX25hbWUpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJLyoKKwkgKiBUUkFOU0xBVE9SUzogIm1hdGNoZXMgJyVzJyUiIGlzIHRoZSA8ZHN0PiBwYXJ0IG9mICJnaXQgcHVzaAorCSAqIDxyZW1vdGU+IDxzcmM+Ojxkc3Q+IiBwdXNoLCBhbmQgImJlaW5nIHB1c2hlZCAoJyVzJykiIGlzCisJICogdGhlIDxzcmM+LgorCSAqLworCWVycm9yKF8oIlRoZSBkZXN0aW5hdGlvbiB5b3UgcHJvdmlkZWQgaXMgbm90IGEgZnVsbCByZWZuYW1lIChpLmUuLFxuIgorCQkic3RhcnRpbmcgd2l0aCBcInJlZnMvXCIpLiBXZSB0cmllZCB0byBndWVzcyB3aGF0IHlvdSBtZWFudCBieTpcbiIKKwkJIlxuIgorCQkiLSBMb29raW5nIGZvciBhIHJlZiB0aGF0IG1hdGNoZXMgJyVzJyBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisJCSItIENoZWNraW5nIGlmIHRoZSA8c3JjPiBiZWluZyBwdXNoZWQgKCclcycpXG4iCisJCSIgIGlzIGEgcmVmIGluIFwicmVmcy97aGVhZHMsdGFnc30vXCIuIElmIHNvIHdlIGFkZCBhIGNvcnJlc3BvbmRpbmdcbiIKKwkJIiAgcmVmcy97aGVhZHMsdGFnc30vIHByZWZpeCBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisJCSJcbiIKKwkJIk5laXRoZXIgd29ya2VkLCBzbyB3ZSBnYXZlIHVwLiBZb3UgbXVzdCBmdWxseSBxdWFsaWZ5IHRoZSByZWYuIiksCisJICAgICAgZHN0X3ZhbHVlLCBtYXRjaGVkX3NyY19uYW1lKTsKKworCWlmICghYWR2aWNlX3B1c2hfdW5xdWFsaWZpZWRfcmVmX25hbWUpCisJCXJldHVybjsKKworCWlmIChnZXRfb2lkKG1hdGNoZWRfc3JjX25hbWUsICZvaWQpKQorCQlCVUcoIiclcycgaXMgbm90IGEgdmFsaWQgb2JqZWN0LCAiCisJCSAgICAibWF0Y2hfZXhwbGljaXRfbGhzKCkgc2hvdWxkIGNhdGNoIHRoaXMhIiwKKwkJICAgIG1hdGNoZWRfc3JjX25hbWUpOworCXR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksICZvaWQsIE5VTEwpOworCWlmICh0eXBlID09IE9CSl9DT01NSVQpIHsKKwkJYWR2aXNlKF8oIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgY29tbWl0IG9iamVjdC5cbiIKKwkJCSAiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkgcHVzaGluZyB0b1xuIgorCQkJICInJXM6cmVmcy9oZWFkcy8lcyc/IiksCisJCSAgICAgICBtYXRjaGVkX3NyY19uYW1lLCBkc3RfdmFsdWUpOworCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfVEFHKSB7CisJCWFkdmlzZShfKCJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRhZyBvYmplY3QuXG4iCisJCQkgIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgdGFnIGJ5IHB1c2hpbmcgdG9cbiIKKwkJCSAiJyVzOnJlZnMvdGFncy8lcyc/IiksCisJCSAgICAgICBtYXRjaGVkX3NyY19uYW1lLCBkc3RfdmFsdWUpOworCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfVFJFRSkgeworCQlhZHZpc2UoXygiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKwkJCSAiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyB0cmVlIGJ5IHB1c2hpbmcgdG9cbiIKKwkJCSAiJyVzOnJlZnMvdGFncy8lcyc/IiksCisJCSAgICAgICBtYXRjaGVkX3NyY19uYW1lLCBkc3RfdmFsdWUpOworCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfQkxPQikgeworCQlhZHZpc2UoXygiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBibG9iIG9iamVjdC5cbiIKKwkJCSAiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyBibG9iIGJ5IHB1c2hpbmcgdG9cbiIKKwkJCSAiJyVzOnJlZnMvdGFncy8lcyc/IiksCisJCSAgICAgICBtYXRjaGVkX3NyY19uYW1lLCBkc3RfdmFsdWUpOworCX0gZWxzZSB7CisJCUJVRygiJyVzJyBzaG91bGQgYmUgY29tbWl0L3RhZy90cmVlL2Jsb2IsIGlzICclZCciLAorCQkgICAgbWF0Y2hlZF9zcmNfbmFtZSwgdHlwZSk7CisJfQorfQorCitzdGF0aWMgaW50IG1hdGNoX2V4cGxpY2l0KHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZiAqZHN0LAorCQkJICBzdHJ1Y3QgcmVmICoqKmRzdF90YWlsLAorCQkJICBzdHJ1Y3QgcmVmc3BlY19pdGVtICpycykKK3sKKwlzdHJ1Y3QgcmVmICptYXRjaGVkX3NyYywgKm1hdGNoZWRfZHN0OworCWludCBhbGxvY2F0ZWRfc3JjOworCisJY29uc3QgY2hhciAqZHN0X3ZhbHVlID0gcnMtPmRzdDsKKwljaGFyICpkc3RfZ3Vlc3M7CisKKwlpZiAocnMtPnBhdHRlcm4gfHwgcnMtPm1hdGNoaW5nKQorCQlyZXR1cm4gMDsKKworCW1hdGNoZWRfc3JjID0gbWF0Y2hlZF9kc3QgPSBOVUxMOworCWlmIChtYXRjaF9leHBsaWNpdF9saHMoc3JjLCBycywgJm1hdGNoZWRfc3JjLCAmYWxsb2NhdGVkX3NyYykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWRzdF92YWx1ZSkgeworCQlpbnQgZmxhZzsKKworCQlkc3RfdmFsdWUgPSByZXNvbHZlX3JlZl91bnNhZmUobWF0Y2hlZF9zcmMtPm5hbWUsCisJCQkJCSAgICAgICBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCQkgICAgICAgTlVMTCwgJmZsYWcpOworCQlpZiAoIWRzdF92YWx1ZSB8fAorCQkgICAgKChmbGFnICYgUkVGX0lTU1lNUkVGKSAmJgorCQkgICAgICFzdGFydHNfd2l0aChkc3RfdmFsdWUsICJyZWZzL2hlYWRzLyIpKSkKKwkJCWRpZShfKCIlcyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYnJhbmNoIiksCisJCQkgICAgbWF0Y2hlZF9zcmMtPm5hbWUpOworCX0KKworCXN3aXRjaCAoY291bnRfcmVmc3BlY19tYXRjaChkc3RfdmFsdWUsIGRzdCwgJm1hdGNoZWRfZHN0KSkgeworCWNhc2UgMToKKwkJYnJlYWs7CisJY2FzZSAwOgorCQlpZiAoc3RhcnRzX3dpdGgoZHN0X3ZhbHVlLCAicmVmcy8iKSkgeworCQkJbWF0Y2hlZF9kc3QgPSBtYWtlX2xpbmtlZF9yZWYoZHN0X3ZhbHVlLCBkc3RfdGFpbCk7CisJCX0gZWxzZSBpZiAoaXNfbnVsbF9vaWQoJm1hdGNoZWRfc3JjLT5uZXdfb2lkKSkgeworCQkJZXJyb3IoXygidW5hYmxlIHRvIGRlbGV0ZSAnJXMnOiByZW1vdGUgcmVmIGRvZXMgbm90IGV4aXN0IiksCisJCQkgICAgICBkc3RfdmFsdWUpOworCQl9IGVsc2UgaWYgKChkc3RfZ3Vlc3MgPSBndWVzc19yZWYoZHN0X3ZhbHVlLCBtYXRjaGVkX3NyYykpKSB7CisJCQltYXRjaGVkX2RzdCA9IG1ha2VfbGlua2VkX3JlZihkc3RfZ3Vlc3MsIGRzdF90YWlsKTsKKwkJCWZyZWUoZHN0X2d1ZXNzKTsKKwkJfSBlbHNlIHsKKwkJCXNob3dfcHVzaF91bnF1YWxpZmllZF9yZWZfbmFtZV9lcnJvcihkc3RfdmFsdWUsCisJCQkJCQkJICAgICBtYXRjaGVkX3NyYy0+bmFtZSk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbWF0Y2hlZF9kc3QgPSBOVUxMOworCQllcnJvcihfKCJkc3QgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiKSwKKwkJICAgICAgZHN0X3ZhbHVlKTsKKwkJYnJlYWs7CisJfQorCWlmICghbWF0Y2hlZF9kc3QpCisJCXJldHVybiAtMTsKKwlpZiAobWF0Y2hlZF9kc3QtPnBlZXJfcmVmKQorCQlyZXR1cm4gZXJyb3IoXygiZHN0IHJlZiAlcyByZWNlaXZlcyBmcm9tIG1vcmUgdGhhbiBvbmUgc3JjIiksCisJCQkgICAgIG1hdGNoZWRfZHN0LT5uYW1lKTsKKwllbHNlIHsKKwkJbWF0Y2hlZF9kc3QtPnBlZXJfcmVmID0gYWxsb2NhdGVkX3NyYyA/CisJCQkJCW1hdGNoZWRfc3JjIDoKKwkJCQkJY29weV9yZWYobWF0Y2hlZF9zcmMpOworCQltYXRjaGVkX2RzdC0+Zm9yY2UgPSBycy0+Zm9yY2U7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hdGNoX2V4cGxpY2l0X3JlZnMoc3RydWN0IHJlZiAqc3JjLCBzdHJ1Y3QgcmVmICpkc3QsCisJCQkgICAgICAgc3RydWN0IHJlZiAqKipkc3RfdGFpbCwgc3RydWN0IHJlZnNwZWMgKnJzKQoreworCWludCBpLCBlcnJzOworCWZvciAoaSA9IGVycnMgPSAwOyBpIDwgcnMtPm5yOyBpKyspCisJCWVycnMgKz0gbWF0Y2hfZXhwbGljaXQoc3JjLCBkc3QsIGRzdF90YWlsLCAmcnMtPml0ZW1zW2ldKTsKKwlyZXR1cm4gZXJyczsKK30KKworc3RhdGljIGNoYXIgKmdldF9yZWZfbWF0Y2goY29uc3Qgc3RydWN0IHJlZnNwZWMgKnJzLCBjb25zdCBzdHJ1Y3QgcmVmICpyZWYsCisJCQkgICBpbnQgc2VuZF9taXJyb3IsIGludCBkaXJlY3Rpb24sCisJCQkgICBjb25zdCBzdHJ1Y3QgcmVmc3BlY19pdGVtICoqcmV0X3BhdCkKK3sKKwljb25zdCBzdHJ1Y3QgcmVmc3BlY19pdGVtICpwYXQ7CisJY2hhciAqbmFtZTsKKwlpbnQgaTsKKwlpbnQgbWF0Y2hpbmdfcmVmcyA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBycy0+bnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgcmVmc3BlY19pdGVtICppdGVtID0gJnJzLT5pdGVtc1tpXTsKKwkJaWYgKGl0ZW0tPm1hdGNoaW5nICYmCisJCSAgICAobWF0Y2hpbmdfcmVmcyA9PSAtMSB8fCBpdGVtLT5mb3JjZSkpIHsKKwkJCW1hdGNoaW5nX3JlZnMgPSBpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoaXRlbS0+cGF0dGVybikgeworCQkJY29uc3QgY2hhciAqZHN0X3NpZGUgPSBpdGVtLT5kc3QgPyBpdGVtLT5kc3QgOiBpdGVtLT5zcmM7CisJCQlpbnQgbWF0Y2g7CisJCQlpZiAoZGlyZWN0aW9uID09IEZST01fU1JDKQorCQkJCW1hdGNoID0gbWF0Y2hfbmFtZV93aXRoX3BhdHRlcm4oaXRlbS0+c3JjLCByZWYtPm5hbWUsIGRzdF9zaWRlLCAmbmFtZSk7CisJCQllbHNlCisJCQkJbWF0Y2ggPSBtYXRjaF9uYW1lX3dpdGhfcGF0dGVybihkc3Rfc2lkZSwgcmVmLT5uYW1lLCBpdGVtLT5zcmMsICZuYW1lKTsKKwkJCWlmIChtYXRjaCkgeworCQkJCW1hdGNoaW5nX3JlZnMgPSBpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWlmIChtYXRjaGluZ19yZWZzID09IC0xKQorCQlyZXR1cm4gTlVMTDsKKworCXBhdCA9ICZycy0+aXRlbXNbbWF0Y2hpbmdfcmVmc107CisJaWYgKHBhdC0+bWF0Y2hpbmcpIHsKKwkJLyoKKwkJICogIm1hdGNoaW5nIHJlZnMiOyB0cmFkaXRpb25hbGx5IHdlIHB1c2hlZCBldmVyeXRoaW5nCisJCSAqIGluY2x1ZGluZyByZWZzIG91dHNpZGUgcmVmcy9oZWFkcy8gaGllcmFyY2h5LCBidXQKKwkJICogdGhhdCBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2UgdGhlc2UgZGF5cy4KKwkJICovCisJCWlmICghc2VuZF9taXJyb3IgJiYgIXN0YXJ0c193aXRoKHJlZi0+bmFtZSwgInJlZnMvaGVhZHMvIikpCisJCQlyZXR1cm4gTlVMTDsKKwkJbmFtZSA9IHhzdHJkdXAocmVmLT5uYW1lKTsKKwl9CisJaWYgKHJldF9wYXQpCisJCSpyZXRfcGF0ID0gcGF0OworCXJldHVybiBuYW1lOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqKnRhaWxfcmVmKHN0cnVjdCByZWYgKipoZWFkKQoreworCXN0cnVjdCByZWYgKip0YWlsID0gaGVhZDsKKwl3aGlsZSAoKnRhaWwpCisJCXRhaWwgPSAmKCgqdGFpbCktPm5leHQpOworCXJldHVybiB0YWlsOworfQorCitzdHJ1Y3QgdGlwcyB7CisJc3RydWN0IGNvbW1pdCAqKnRpcDsKKwlpbnQgbnIsIGFsbG9jOworfTsKKworc3RhdGljIHZvaWQgYWRkX3RvX3RpcHMoc3RydWN0IHRpcHMgKnRpcHMsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwlpZiAoaXNfbnVsbF9vaWQob2lkKSkKKwkJcmV0dXJuOworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseSh0aGVfcmVwb3NpdG9yeSwgb2lkLCAxKTsKKwlpZiAoIWNvbW1pdCB8fCAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBUTVBfTUFSSykpCisJCXJldHVybjsKKwljb21taXQtPm9iamVjdC5mbGFncyB8PSBUTVBfTUFSSzsKKwlBTExPQ19HUk9XKHRpcHMtPnRpcCwgdGlwcy0+bnIgKyAxLCB0aXBzLT5hbGxvYyk7CisJdGlwcy0+dGlwW3RpcHMtPm5yKytdID0gY29tbWl0OworfQorCitzdGF0aWMgdm9pZCBhZGRfbWlzc2luZ190YWdzKHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZiAqKmRzdCwgc3RydWN0IHJlZiAqKipkc3RfdGFpbCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZHN0X3RhZyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IHNyY190YWcgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3QgdGlwcyBzZW50X3RpcHM7CisKKwkvKgorCSAqIENvbGxlY3QgZXZlcnl0aGluZyB3ZSBrbm93IHRoZXkgd291bGQgaGF2ZSBhdCB0aGUgZW5kIG9mCisJICogdGhpcyBwdXNoLCBhbmQgY29sbGVjdCBhbGwgdGFncyB0aGV5IGhhdmUuCisJICovCisJbWVtc2V0KCZzZW50X3RpcHMsIDAsIHNpemVvZihzZW50X3RpcHMpKTsKKwlmb3IgKHJlZiA9ICpkc3Q7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmIChyZWYtPnBlZXJfcmVmICYmCisJCSAgICAhaXNfbnVsbF9vaWQoJnJlZi0+cGVlcl9yZWYtPm5ld19vaWQpKQorCQkJYWRkX3RvX3RpcHMoJnNlbnRfdGlwcywgJnJlZi0+cGVlcl9yZWYtPm5ld19vaWQpOworCQllbHNlCisJCQlhZGRfdG9fdGlwcygmc2VudF90aXBzLCAmcmVmLT5vbGRfb2lkKTsKKwkJaWYgKHN0YXJ0c193aXRoKHJlZi0+bmFtZSwgInJlZnMvdGFncy8iKSkKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmZHN0X3RhZywgcmVmLT5uYW1lKTsKKwl9CisJY2xlYXJfY29tbWl0X21hcmtzX21hbnkoc2VudF90aXBzLm5yLCBzZW50X3RpcHMudGlwLCBUTVBfTUFSSyk7CisKKwlzdHJpbmdfbGlzdF9zb3J0KCZkc3RfdGFnKTsKKworCS8qIENvbGxlY3QgdGFncyB0aGV5IGRvIG5vdCBoYXZlLiAqLworCWZvciAocmVmID0gc3JjOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAoIXN0YXJ0c193aXRoKHJlZi0+bmFtZSwgInJlZnMvdGFncy8iKSkKKwkJCWNvbnRpbnVlOyAvKiBub3QgYSB0YWcgKi8KKwkJaWYgKHN0cmluZ19saXN0X2hhc19zdHJpbmcoJmRzdF90YWcsIHJlZi0+bmFtZSkpCisJCQljb250aW51ZTsgLyogdGhleSBhbHJlYWR5IGhhdmUgaXQgKi8KKwkJaWYgKG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgJnJlZi0+bmV3X29pZCwgTlVMTCkgIT0gT0JKX1RBRykKKwkJCWNvbnRpbnVlOyAvKiBiZSBjb25zZXJ2YXRpdmUgKi8KKwkJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZCgmc3JjX3RhZywgcmVmLT5uYW1lKTsKKwkJaXRlbS0+dXRpbCA9IHJlZjsKKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJmRzdF90YWcsIDApOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCBzcmNfdGFnIGxpc3RzIHRhZ3MgdGhhdCBhcmUgbWlzc2luZyBmcm9tCisJICogZHN0LCBhbmQgc2VudF90aXBzIGxpc3RzIHRoZSB0aXBzIHdlIGFyZSBwdXNoaW5nIG9yIHRob3NlCisJICogdGhhdCB3ZSBrbm93IHRoZXkgYWxyZWFkeSBoYXZlLiBBbiBlbGVtZW50IGluIHRoZSBzcmNfdGFnCisJICogdGhhdCBpcyBhbiBhbmNlc3RvciBvZiBhbnkgb2YgdGhlIHNlbnRfdGlwcyBuZWVkcyB0byBiZQorCSAqIHNlbnQgdG8gdGhlIG90aGVyIHNpZGUuCisJICovCisJaWYgKHNlbnRfdGlwcy5ucikgeworCQljb25zdCBpbnQgcmVhY2hhYmxlX2ZsYWcgPSAxOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmZvdW5kX2NvbW1pdHM7CisJCXN0cnVjdCBjb21taXQgKipzcmNfY29tbWl0czsKKwkJaW50IG5yX3NyY19jb21taXRzID0gMCwgYWxsb2Nfc3JjX2NvbW1pdHMgPSAxNjsKKwkJQUxMT0NfQVJSQVkoc3JjX2NvbW1pdHMsIGFsbG9jX3NyY19jb21taXRzKTsKKworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZzcmNfdGFnKSB7CisJCQlzdHJ1Y3QgcmVmICpyZWYgPSBpdGVtLT51dGlsOworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJCQlpZiAoaXNfbnVsbF9vaWQoJnJlZi0+bmV3X29pZCkpCisJCQkJY29udGludWU7CisJCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJCSZyZWYtPm5ld19vaWQsCisJCQkJCQkJCTEpOworCQkJaWYgKCFjb21taXQpCisJCQkJLyogbm90IHB1c2hpbmcgYSBjb21taXQsIHdoaWNoIGlzIG5vdCBhbiBlcnJvciAqLworCQkJCWNvbnRpbnVlOworCisJCQlBTExPQ19HUk9XKHNyY19jb21taXRzLCBucl9zcmNfY29tbWl0cyArIDEsIGFsbG9jX3NyY19jb21taXRzKTsKKwkJCXNyY19jb21taXRzW25yX3NyY19jb21taXRzKytdID0gY29tbWl0OworCQl9CisKKwkJZm91bmRfY29tbWl0cyA9IGdldF9yZWFjaGFibGVfc3Vic2V0KHNlbnRfdGlwcy50aXAsIHNlbnRfdGlwcy5uciwKKwkJCQkJCSAgICAgc3JjX2NvbW1pdHMsIG5yX3NyY19jb21taXRzLAorCQkJCQkJICAgICByZWFjaGFibGVfZmxhZyk7CisKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmc3JjX3RhZykgeworCQkJc3RydWN0IHJlZiAqZHN0X3JlZjsKKwkJCXN0cnVjdCByZWYgKnJlZiA9IGl0ZW0tPnV0aWw7CisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwkJCWlmIChpc19udWxsX29pZCgmcmVmLT5uZXdfb2lkKSkKKwkJCQljb250aW51ZTsKKwkJCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQkJJnJlZi0+bmV3X29pZCwKKwkJCQkJCQkJMSk7CisJCQlpZiAoIWNvbW1pdCkKKwkJCQkvKiBub3QgcHVzaGluZyBhIGNvbW1pdCwgd2hpY2ggaXMgbm90IGFuIGVycm9yICovCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBJcyB0aGlzIHRhZywgd2hpY2ggdGhleSBkbyBub3QgaGF2ZSwgcmVhY2hhYmxlIGZyb20KKwkJCSAqIGFueSBvZiB0aGUgY29tbWl0cyB3ZSBhcmUgc2VuZGluZz8KKwkJCSAqLworCQkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiByZWFjaGFibGVfZmxhZykpCisJCQkJY29udGludWU7CisKKwkJCS8qIEFkZCBpdCBpbiAqLworCQkJZHN0X3JlZiA9IG1ha2VfbGlua2VkX3JlZihyZWYtPm5hbWUsIGRzdF90YWlsKTsKKwkJCW9pZGNweSgmZHN0X3JlZi0+bmV3X29pZCwgJnJlZi0+bmV3X29pZCk7CisJCQlkc3RfcmVmLT5wZWVyX3JlZiA9IGNvcHlfcmVmKHJlZik7CisJCX0KKworCQljbGVhcl9jb21taXRfbWFya3NfbWFueShucl9zcmNfY29tbWl0cywgc3JjX2NvbW1pdHMsIHJlYWNoYWJsZV9mbGFnKTsKKwkJZnJlZShzcmNfY29tbWl0cyk7CisJCWZyZWVfY29tbWl0X2xpc3QoZm91bmRfY29tbWl0cyk7CisJfQorCisJc3RyaW5nX2xpc3RfY2xlYXIoJnNyY190YWcsIDApOworCWZyZWUoc2VudF90aXBzLnRpcCk7Cit9CisKK3N0cnVjdCByZWYgKmZpbmRfcmVmX2J5X25hbWUoY29uc3Qgc3RydWN0IHJlZiAqbGlzdCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlmb3IgKCA7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorCQlpZiAoIXN0cmNtcChsaXN0LT5uYW1lLCBuYW1lKSkKKwkJCXJldHVybiAoc3RydWN0IHJlZiAqKWxpc3Q7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfcmVmX2luZGV4KHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmX2luZGV4LCBzdHJ1Y3QgcmVmICpyZWYpCit7CisJZm9yICggOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKKwkJc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKHJlZl9pbmRleCwgcmVmLT5uYW1lKS0+dXRpbCA9IHJlZjsKKworCXN0cmluZ19saXN0X3NvcnQocmVmX2luZGV4KTsKK30KKworLyoKKyAqIEdpdmVuIG9ubHkgdGhlIHNldCBvZiBsb2NhbCByZWZzLCBzYW5pdHktY2hlY2sgdGhlIHNldCBvZiBwdXNoCisgKiByZWZzcGVjcy4gV2UgY2FuJ3QgY2F0Y2ggYWxsIGVycm9ycyB0aGF0IG1hdGNoX3B1c2hfcmVmcyB3b3VsZCwKKyAqIGJ1dCB3ZSBjYW4gY2F0Y2ggc29tZSBlcnJvcnMgZWFybHkgYmVmb3JlIGV2ZW4gdGFsa2luZyB0byB0aGUKKyAqIHJlbW90ZSBzaWRlLgorICovCitpbnQgY2hlY2tfcHVzaF9yZWZzKHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZnNwZWMgKnJzKQoreworCWludCByZXQgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHJzLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZzcGVjX2l0ZW0gKml0ZW0gPSAmcnMtPml0ZW1zW2ldOworCisJCWlmIChpdGVtLT5wYXR0ZXJuIHx8IGl0ZW0tPm1hdGNoaW5nKQorCQkJY29udGludWU7CisKKwkJcmV0IHw9IG1hdGNoX2V4cGxpY2l0X2xocyhzcmMsIGl0ZW0sIE5VTEwsIE5VTEwpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBHaXZlbiB0aGUgc2V0IG9mIHJlZnMgdGhlIGxvY2FsIHJlcG9zaXRvcnkgaGFzLCB0aGUgc2V0IG9mIHJlZnMgdGhlCisgKiByZW1vdGUgcmVwb3NpdG9yeSBoYXMsIGFuZCB0aGUgcmVmc3BlYyB1c2VkIGZvciBwdXNoLCBkZXRlcm1pbmUKKyAqIHdoYXQgcmVtb3RlIHJlZnMgd2Ugd2lsbCB1cGRhdGUgYW5kIHdpdGggd2hhdCB2YWx1ZSBieSBzZXR0aW5nCisgKiBwZWVyX3JlZiAod2hpY2ggb2JqZWN0IGlzIGJlaW5nIHB1c2hlZCkgYW5kIGZvcmNlIChpZiB0aGUgcHVzaCBpcworICogZm9yY2VkKSBpbiBlbGVtZW50cyBvZiAiZHN0Ii4gVGhlIGZ1bmN0aW9uIG1heSBhZGQgbmV3IGVsZW1lbnRzIHRvCisgKiBkc3QgKGUuZy4gcHVzaGluZyB0byBhIG5ldyBicmFuY2gsIGRvbmUgaW4gbWF0Y2hfZXhwbGljaXRfcmVmcykuCisgKi8KK2ludCBtYXRjaF9wdXNoX3JlZnMoc3RydWN0IHJlZiAqc3JjLCBzdHJ1Y3QgcmVmICoqZHN0LAorCQkgICAgc3RydWN0IHJlZnNwZWMgKnJzLCBpbnQgZmxhZ3MpCit7CisJaW50IHNlbmRfYWxsID0gZmxhZ3MgJiBNQVRDSF9SRUZTX0FMTDsKKwlpbnQgc2VuZF9taXJyb3IgPSBmbGFncyAmIE1BVENIX1JFRlNfTUlSUk9SOworCWludCBzZW5kX3BydW5lID0gZmxhZ3MgJiBNQVRDSF9SRUZTX1BSVU5FOworCWludCBlcnJzOworCXN0cnVjdCByZWYgKnJlZiwgKipkc3RfdGFpbCA9IHRhaWxfcmVmKGRzdCk7CisJc3RydWN0IHN0cmluZ19saXN0IGRzdF9yZWZfaW5kZXggPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJLyogSWYgbm8gcmVmc3BlYyBpcyBwcm92aWRlZCwgdXNlIHRoZSBkZWZhdWx0ICI6IiAqLworCWlmICghcnMtPm5yKQorCQlyZWZzcGVjX2FwcGVuZChycywgIjoiKTsKKworCWVycnMgPSBtYXRjaF9leHBsaWNpdF9yZWZzKHNyYywgKmRzdCwgJmRzdF90YWlsLCBycyk7CisKKwkvKiBwaWNrIHRoZSByZW1haW5kZXIgKi8KKwlmb3IgKHJlZiA9IHNyYzsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmRzdF9pdGVtOworCQlzdHJ1Y3QgcmVmICpkc3RfcGVlcjsKKwkJY29uc3Qgc3RydWN0IHJlZnNwZWNfaXRlbSAqcGF0ID0gTlVMTDsKKwkJY2hhciAqZHN0X25hbWU7CisKKwkJZHN0X25hbWUgPSBnZXRfcmVmX21hdGNoKHJzLCByZWYsIHNlbmRfbWlycm9yLCBGUk9NX1NSQywgJnBhdCk7CisJCWlmICghZHN0X25hbWUpCisJCQljb250aW51ZTsKKworCQlpZiAoIWRzdF9yZWZfaW5kZXgubnIpCisJCQlwcmVwYXJlX3JlZl9pbmRleCgmZHN0X3JlZl9pbmRleCwgKmRzdCk7CisKKwkJZHN0X2l0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoJmRzdF9yZWZfaW5kZXgsIGRzdF9uYW1lKTsKKwkJZHN0X3BlZXIgPSBkc3RfaXRlbSA/IGRzdF9pdGVtLT51dGlsIDogTlVMTDsKKwkJaWYgKGRzdF9wZWVyKSB7CisJCQlpZiAoZHN0X3BlZXItPnBlZXJfcmVmKQorCQkJCS8qIFdlJ3JlIGFscmVhZHkgc2VuZGluZyBzb21ldGhpbmcgdG8gdGhpcyByZWYuICovCisJCQkJZ290byBmcmVlX25hbWU7CisJCX0gZWxzZSB7CisJCQlpZiAocGF0LT5tYXRjaGluZyAmJiAhKHNlbmRfYWxsIHx8IHNlbmRfbWlycm9yKSkKKwkJCQkvKgorCQkJCSAqIFJlbW90ZSBkb2Vzbid0IGhhdmUgaXQsIGFuZCB3ZSBoYXZlIG5vCisJCQkJICogZXhwbGljaXQgcGF0dGVybiwgYW5kIHdlIGRvbid0IGhhdmUKKwkJCQkgKiAtLWFsbCBvciAtLW1pcnJvci4KKwkJCQkgKi8KKwkJCQlnb3RvIGZyZWVfbmFtZTsKKworCQkJLyogQ3JlYXRlIGEgbmV3IG9uZSBhbmQgbGluayBpdCAqLworCQkJZHN0X3BlZXIgPSBtYWtlX2xpbmtlZF9yZWYoZHN0X25hbWUsICZkc3RfdGFpbCk7CisJCQlvaWRjcHkoJmRzdF9wZWVyLT5uZXdfb2lkLCAmcmVmLT5uZXdfb2lkKTsKKwkJCXN0cmluZ19saXN0X2luc2VydCgmZHN0X3JlZl9pbmRleCwKKwkJCQlkc3RfcGVlci0+bmFtZSktPnV0aWwgPSBkc3RfcGVlcjsKKwkJfQorCQlkc3RfcGVlci0+cGVlcl9yZWYgPSBjb3B5X3JlZihyZWYpOworCQlkc3RfcGVlci0+Zm9yY2UgPSBwYXQtPmZvcmNlOworCWZyZWVfbmFtZToKKwkJZnJlZShkc3RfbmFtZSk7CisJfQorCisJc3RyaW5nX2xpc3RfY2xlYXIoJmRzdF9yZWZfaW5kZXgsIDApOworCisJaWYgKGZsYWdzICYgTUFUQ0hfUkVGU19GT0xMT1dfVEFHUykKKwkJYWRkX21pc3NpbmdfdGFncyhzcmMsIGRzdCwgJmRzdF90YWlsKTsKKworCWlmIChzZW5kX3BydW5lKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBzcmNfcmVmX2luZGV4ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwkJLyogY2hlY2sgZm9yIG1pc3NpbmcgcmVmcyBvbiB0aGUgcmVtb3RlICovCisJCWZvciAocmVmID0gKmRzdDsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJCWNoYXIgKnNyY19uYW1lOworCisJCQlpZiAocmVmLT5wZWVyX3JlZikKKwkJCQkvKiBXZSdyZSBhbHJlYWR5IHNlbmRpbmcgc29tZXRoaW5nIHRvIHRoaXMgcmVmLiAqLworCQkJCWNvbnRpbnVlOworCisJCQlzcmNfbmFtZSA9IGdldF9yZWZfbWF0Y2gocnMsIHJlZiwgc2VuZF9taXJyb3IsIEZST01fRFNULCBOVUxMKTsKKwkJCWlmIChzcmNfbmFtZSkgeworCQkJCWlmICghc3JjX3JlZl9pbmRleC5ucikKKwkJCQkJcHJlcGFyZV9yZWZfaW5kZXgoJnNyY19yZWZfaW5kZXgsIHNyYyk7CisJCQkJaWYgKCFzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZzcmNfcmVmX2luZGV4LAorCQkJCQkgICAgc3JjX25hbWUpKQorCQkJCQlyZWYtPnBlZXJfcmVmID0gYWxsb2NfZGVsZXRlX3JlZigpOworCQkJCWZyZWUoc3JjX25hbWUpOworCQkJfQorCQl9CisJCXN0cmluZ19saXN0X2NsZWFyKCZzcmNfcmVmX2luZGV4LCAwKTsKKwl9CisKKwlpZiAoZXJycykKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCit2b2lkIHNldF9yZWZfc3RhdHVzX2Zvcl9wdXNoKHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBpbnQgc2VuZF9taXJyb3IsCisJCQkgICAgIGludCBmb3JjZV91cGRhdGUpCit7CisJc3RydWN0IHJlZiAqcmVmOworCisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJaW50IGZvcmNlX3JlZl91cGRhdGUgPSByZWYtPmZvcmNlIHx8IGZvcmNlX3VwZGF0ZTsKKwkJaW50IHJlamVjdF9yZWFzb24gPSAwOworCisJCWlmIChyZWYtPnBlZXJfcmVmKQorCQkJb2lkY3B5KCZyZWYtPm5ld19vaWQsICZyZWYtPnBlZXJfcmVmLT5uZXdfb2lkKTsKKwkJZWxzZSBpZiAoIXNlbmRfbWlycm9yKQorCQkJY29udGludWU7CisKKwkJcmVmLT5kZWxldGlvbiA9IGlzX251bGxfb2lkKCZyZWYtPm5ld19vaWQpOworCQlpZiAoIXJlZi0+ZGVsZXRpb24gJiYKKwkJCW9pZGVxKCZyZWYtPm9sZF9vaWQsICZyZWYtPm5ld19vaWQpKSB7CisJCQlyZWYtPnN0YXR1cyA9IFJFRl9TVEFUVVNfVVBUT0RBVEU7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZSByZW1vdGUgcmVmIGhhcyBtb3ZlZCBhbmQgaXMgbm93IGRpZmZlcmVudAorCQkgKiBmcm9tIHdoYXQgd2UgZXhwZWN0LCByZWplY3QgYW55IHB1c2guCisJCSAqCisJCSAqIEl0IGFsc28gaXMgYW4gZXJyb3IgaWYgdGhlIHVzZXIgdG9sZCB1cyB0byBjaGVjaworCQkgKiB3aXRoIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIHRvIGZpbmQgdGhlIHZhbHVlCisJCSAqIHRvIGV4cGVjdCwgYnV0IHdlIGRpZCBub3QgaGF2ZSBzdWNoIGEgdHJhY2tpbmcKKwkJICogYnJhbmNoLgorCQkgKi8KKwkJaWYgKHJlZi0+ZXhwZWN0X29sZF9zaGExKSB7CisJCQlpZiAoIW9pZGVxKCZyZWYtPm9sZF9vaWQsICZyZWYtPm9sZF9vaWRfZXhwZWN0KSkKKwkJCQlyZWplY3RfcmVhc29uID0gUkVGX1NUQVRVU19SRUpFQ1RfU1RBTEU7CisJCQllbHNlCisJCQkJLyogSWYgdGhlIHJlZiBpc24ndCBzdGFsZSB0aGVuIGZvcmNlIHRoZSB1cGRhdGUuICovCisJCQkJZm9yY2VfcmVmX3VwZGF0ZSA9IDE7CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGUgdXBkYXRlIGlzbid0IGFscmVhZHkgcmVqZWN0ZWQgdGhlbiBjaGVjaworCQkgKiB0aGUgdXN1YWwgIm11c3QgZmFzdC1mb3J3YXJkIiBydWxlcy4KKwkJICoKKwkJICogRGVjaWRlIHdoZXRoZXIgYW4gaW5kaXZpZHVhbCByZWZzcGVjIEE6QiBjYW4gYmUKKwkJICogcHVzaGVkLiAgVGhlIHB1c2ggd2lsbCBzdWNjZWVkIGlmIGFueSBvZiB0aGUKKwkJICogZm9sbG93aW5nIGFyZSB0cnVlOgorCQkgKgorCQkgKiAoMSkgdGhlIHJlbW90ZSByZWZlcmVuY2UgQiBkb2VzIG5vdCBleGlzdAorCQkgKgorCQkgKiAoMikgdGhlIHJlbW90ZSByZWZlcmVuY2UgQiBpcyBiZWluZyByZW1vdmVkIChpLmUuLAorCQkgKiAgICAgcHVzaGluZyA6QiB3aGVyZSBubyBzb3VyY2UgaXMgc3BlY2lmaWVkKQorCQkgKgorCQkgKiAoMykgdGhlIGRlc3RpbmF0aW9uIGlzIG5vdCB1bmRlciByZWZzL3RhZ3MvLCBhbmQKKwkJICogICAgIGlmIHRoZSBvbGQgYW5kIG5ldyB2YWx1ZSBpcyBhIGNvbW1pdCwgdGhlIG5ldworCQkgKiAgICAgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBvbGQuCisJCSAqCisJCSAqICg0KSBpdCBpcyBmb3JjZWQgdXNpbmcgdGhlICtBOkIgbm90YXRpb24sIG9yIGJ5CisJCSAqICAgICBwYXNzaW5nIHRoZSAtLWZvcmNlIGFyZ3VtZW50CisJCSAqLworCisJCWlmICghcmVqZWN0X3JlYXNvbiAmJiAhcmVmLT5kZWxldGlvbiAmJiAhaXNfbnVsbF9vaWQoJnJlZi0+b2xkX29pZCkpIHsKKwkJCWlmIChzdGFydHNfd2l0aChyZWYtPm5hbWUsICJyZWZzL3RhZ3MvIikpCisJCQkJcmVqZWN0X3JlYXNvbiA9IFJFRl9TVEFUVVNfUkVKRUNUX0FMUkVBRFlfRVhJU1RTOworCQkJZWxzZSBpZiAoIWhhc19vYmplY3RfZmlsZSgmcmVmLT5vbGRfb2lkKSkKKwkJCQlyZWplY3RfcmVhc29uID0gUkVGX1NUQVRVU19SRUpFQ1RfRkVUQ0hfRklSU1Q7CisJCQllbHNlIGlmICghbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LCAmcmVmLT5vbGRfb2lkLCAxKSB8fAorCQkJCSAhbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LCAmcmVmLT5uZXdfb2lkLCAxKSkKKwkJCQlyZWplY3RfcmVhc29uID0gUkVGX1NUQVRVU19SRUpFQ1RfTkVFRFNfRk9SQ0U7CisJCQllbHNlIGlmICghcmVmX25ld2VyKCZyZWYtPm5ld19vaWQsICZyZWYtPm9sZF9vaWQpKQorCQkJCXJlamVjdF9yZWFzb24gPSBSRUZfU1RBVFVTX1JFSkVDVF9OT05GQVNURk9SV0FSRDsKKwkJfQorCisJCS8qCisJCSAqICItLWZvcmNlIiB3aWxsIGRlZmVhdCBhbnkgcmVqZWN0aW9uIGltcGxlbWVudGVkCisJCSAqIGJ5IHRoZSBydWxlcyBhYm92ZS4KKwkJICovCisJCWlmICghZm9yY2VfcmVmX3VwZGF0ZSkKKwkJCXJlZi0+c3RhdHVzID0gcmVqZWN0X3JlYXNvbjsKKwkJZWxzZSBpZiAocmVqZWN0X3JlYXNvbikKKwkJCXJlZi0+Zm9yY2VkX3VwZGF0ZSA9IDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfbWVyZ2Uoc3RydWN0IGJyYW5jaCAqcmV0KQoreworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwljaGFyICpyZWY7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IGk7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuOyAvKiBubyBicmFuY2ggKi8KKwlpZiAocmV0LT5tZXJnZSkKKwkJcmV0dXJuOyAvKiBhbHJlYWR5IHJ1biAqLworCWlmICghcmV0LT5yZW1vdGVfbmFtZSB8fCAhcmV0LT5tZXJnZV9ucikgeworCQkvKgorCQkgKiBubyBtZXJnZSBjb25maWc7IGxldCdzIG1ha2Ugc3VyZSB3ZSBkb24ndCBjb25mdXNlIGNhbGxlcnMKKwkJICogd2l0aCBhIG5vbi16ZXJvIG1lcmdlX25yIGJ1dCBhIE5VTEwgbWVyZ2UKKwkJICovCisJCXJldC0+bWVyZ2VfbnIgPSAwOworCQlyZXR1cm47CisJfQorCisJcmVtb3RlID0gcmVtb3RlX2dldChyZXQtPnJlbW90ZV9uYW1lKTsKKworCXJldC0+bWVyZ2UgPSB4Y2FsbG9jKHJldC0+bWVyZ2VfbnIsIHNpemVvZigqcmV0LT5tZXJnZSkpOworCWZvciAoaSA9IDA7IGkgPCByZXQtPm1lcmdlX25yOyBpKyspIHsKKwkJcmV0LT5tZXJnZVtpXSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCoqcmV0LT5tZXJnZSkpOworCQlyZXQtPm1lcmdlW2ldLT5zcmMgPSB4c3RyZHVwKHJldC0+bWVyZ2VfbmFtZVtpXSk7CisJCWlmICghcmVtb3RlX2ZpbmRfdHJhY2tpbmcocmVtb3RlLCByZXQtPm1lcmdlW2ldKSB8fAorCQkgICAgc3RyY21wKHJldC0+cmVtb3RlX25hbWUsICIuIikpCisJCQljb250aW51ZTsKKwkJaWYgKGR3aW1fcmVmKHJldC0+bWVyZ2VfbmFtZVtpXSwgc3RybGVuKHJldC0+bWVyZ2VfbmFtZVtpXSksCisJCQkgICAgICZvaWQsICZyZWYpID09IDEpCisJCQlyZXQtPm1lcmdlW2ldLT5kc3QgPSByZWY7CisJCWVsc2UKKwkJCXJldC0+bWVyZ2VbaV0tPmRzdCA9IHhzdHJkdXAocmV0LT5tZXJnZV9uYW1lW2ldKTsKKwl9Cit9CisKK3N0cnVjdCBicmFuY2ggKmJyYW5jaF9nZXQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYnJhbmNoICpyZXQ7CisKKwlyZWFkX2NvbmZpZygpOworCWlmICghbmFtZSB8fCAhKm5hbWUgfHwgIXN0cmNtcChuYW1lLCAiSEVBRCIpKQorCQlyZXQgPSBjdXJyZW50X2JyYW5jaDsKKwllbHNlCisJCXJldCA9IG1ha2VfYnJhbmNoKG5hbWUsIHN0cmxlbihuYW1lKSk7CisJc2V0X21lcmdlKHJldCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGJyYW5jaF9oYXNfbWVyZ2VfY29uZmlnKHN0cnVjdCBicmFuY2ggKmJyYW5jaCkKK3sKKwlyZXR1cm4gYnJhbmNoICYmICEhYnJhbmNoLT5tZXJnZTsKK30KKworaW50IGJyYW5jaF9tZXJnZV9tYXRjaGVzKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwKKwkJICAgICAgICAgICAgICAgICBpbnQgaSwKKwkJICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWlmICghYnJhbmNoIHx8IGkgPCAwIHx8IGkgPj0gYnJhbmNoLT5tZXJnZV9ucikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHJlZm5hbWVfbWF0Y2goYnJhbmNoLT5tZXJnZVtpXS0+c3JjLCByZWZuYW1lKTsKK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsMiwzKSkpCitzdGF0aWMgY29uc3QgY2hhciAqZXJyb3JfYnVmKHN0cnVjdCBzdHJidWYgKmVyciwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaWYgKGVycikgeworCQl2YV9saXN0IGFwOworCQl2YV9zdGFydChhcCwgZm10KTsKKwkJc3RyYnVmX3ZhZGRmKGVyciwgZm10LCBhcCk7CisJCXZhX2VuZChhcCk7CisJfQorCXJldHVybiBOVUxMOworfQorCitjb25zdCBjaGFyICpicmFuY2hfZ2V0X3Vwc3RyZWFtKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWlmICghYnJhbmNoKQorCQlyZXR1cm4gZXJyb3JfYnVmKGVyciwgXygiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIpKTsKKworCWlmICghYnJhbmNoLT5tZXJnZSB8fCAhYnJhbmNoLT5tZXJnZVswXSkgeworCQkvKgorCQkgKiBubyBtZXJnZSBjb25maWc7IGlzIGl0IGJlY2F1c2UgdGhlIHVzZXIgZGlkbid0IGRlZmluZSBhbnksCisJCSAqIG9yIGJlY2F1c2UgaXQgaXMgbm90IGEgcmVhbCBicmFuY2gsIGFuZCBnZXRfYnJhbmNoCisJCSAqIGF1dG8tdml2aWZpZWQgaXQ/CisJCSAqLworCQlpZiAoIXJlZl9leGlzdHMoYnJhbmNoLT5yZWZuYW1lKSkKKwkJCXJldHVybiBlcnJvcl9idWYoZXJyLCBfKCJubyBzdWNoIGJyYW5jaDogJyVzJyIpLAorCQkJCQkgYnJhbmNoLT5uYW1lKTsKKwkJcmV0dXJuIGVycm9yX2J1ZihlcnIsCisJCQkJIF8oIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIiksCisJCQkJIGJyYW5jaC0+bmFtZSk7CisJfQorCisJaWYgKCFicmFuY2gtPm1lcmdlWzBdLT5kc3QpCisJCXJldHVybiBlcnJvcl9idWYoZXJyLAorCQkJCSBfKCJ1cHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIpLAorCQkJCSBicmFuY2gtPm1lcmdlWzBdLT5zcmMpOworCisJcmV0dXJuIGJyYW5jaC0+bWVyZ2VbMF0tPmRzdDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnRyYWNraW5nX2Zvcl9wdXNoX2Rlc3Qoc3RydWN0IHJlbW90ZSAqcmVtb3RlLAorCQkJCQkgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJCSAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWNoYXIgKnJldDsKKworCXJldCA9IGFwcGx5X3JlZnNwZWNzKCZyZW1vdGUtPmZldGNoLCByZWZuYW1lKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIGVycm9yX2J1ZihlcnIsCisJCQkJIF8oInB1c2ggZGVzdGluYXRpb24gJyVzJyBvbiByZW1vdGUgJyVzJyBoYXMgbm8gbG9jYWwgdHJhY2tpbmcgYnJhbmNoIiksCisJCQkJIHJlZm5hbWUsIHJlbW90ZS0+bmFtZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmJyYW5jaF9nZXRfcHVzaF8xKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKworCXJlbW90ZSA9IHJlbW90ZV9nZXQocHVzaHJlbW90ZV9mb3JfYnJhbmNoKGJyYW5jaCwgTlVMTCkpOworCWlmICghcmVtb3RlKQorCQlyZXR1cm4gZXJyb3JfYnVmKGVyciwKKwkJCQkgXygiYnJhbmNoICclcycgaGFzIG5vIHJlbW90ZSBmb3IgcHVzaGluZyIpLAorCQkJCSBicmFuY2gtPm5hbWUpOworCisJaWYgKHJlbW90ZS0+cHVzaC5ucikgeworCQljaGFyICpkc3Q7CisJCWNvbnN0IGNoYXIgKnJldDsKKworCQlkc3QgPSBhcHBseV9yZWZzcGVjcygmcmVtb3RlLT5wdXNoLCBicmFuY2gtPnJlZm5hbWUpOworCQlpZiAoIWRzdCkKKwkJCXJldHVybiBlcnJvcl9idWYoZXJyLAorCQkJCQkgXygicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIiksCisJCQkJCSByZW1vdGUtPm5hbWUsIGJyYW5jaC0+bmFtZSk7CisKKwkJcmV0ID0gdHJhY2tpbmdfZm9yX3B1c2hfZGVzdChyZW1vdGUsIGRzdCwgZXJyKTsKKwkJZnJlZShkc3QpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChyZW1vdGUtPm1pcnJvcikKKwkJcmV0dXJuIHRyYWNraW5nX2Zvcl9wdXNoX2Rlc3QocmVtb3RlLCBicmFuY2gtPnJlZm5hbWUsIGVycik7CisKKwlzd2l0Y2ggKHB1c2hfZGVmYXVsdCkgeworCWNhc2UgUFVTSF9ERUZBVUxUX05PVEhJTkc6CisJCXJldHVybiBlcnJvcl9idWYoZXJyLCBfKCJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiKSk7CisKKwljYXNlIFBVU0hfREVGQVVMVF9NQVRDSElORzoKKwljYXNlIFBVU0hfREVGQVVMVF9DVVJSRU5UOgorCQlyZXR1cm4gdHJhY2tpbmdfZm9yX3B1c2hfZGVzdChyZW1vdGUsIGJyYW5jaC0+cmVmbmFtZSwgZXJyKTsKKworCWNhc2UgUFVTSF9ERUZBVUxUX1VQU1RSRUFNOgorCQlyZXR1cm4gYnJhbmNoX2dldF91cHN0cmVhbShicmFuY2gsIGVycik7CisKKwljYXNlIFBVU0hfREVGQVVMVF9VTlNQRUNJRklFRDoKKwljYXNlIFBVU0hfREVGQVVMVF9TSU1QTEU6CisJCXsKKwkJCWNvbnN0IGNoYXIgKnVwLCAqY3VyOworCisJCQl1cCA9IGJyYW5jaF9nZXRfdXBzdHJlYW0oYnJhbmNoLCBlcnIpOworCQkJaWYgKCF1cCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWN1ciA9IHRyYWNraW5nX2Zvcl9wdXNoX2Rlc3QocmVtb3RlLCBicmFuY2gtPnJlZm5hbWUsIGVycik7CisJCQlpZiAoIWN1cikKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWlmIChzdHJjbXAoY3VyLCB1cCkpCisJCQkJcmV0dXJuIGVycm9yX2J1ZihlcnIsCisJCQkJCQkgXygiY2Fubm90IHJlc29sdmUgJ3NpbXBsZScgcHVzaCB0byBhIHNpbmdsZSBkZXN0aW5hdGlvbiIpKTsKKwkJCXJldHVybiBjdXI7CisJCX0KKwl9CisKKwlCVUcoInVuaGFuZGxlZCBwdXNoIHNpdHVhdGlvbiIpOworfQorCitjb25zdCBjaGFyICpicmFuY2hfZ2V0X3B1c2goc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJaWYgKCFicmFuY2gpCisJCXJldHVybiBlcnJvcl9idWYoZXJyLCBfKCJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIikpOworCisJaWYgKCFicmFuY2gtPnB1c2hfdHJhY2tpbmdfcmVmKQorCQlicmFuY2gtPnB1c2hfdHJhY2tpbmdfcmVmID0gYnJhbmNoX2dldF9wdXNoXzEoYnJhbmNoLCBlcnIpOworCXJldHVybiBicmFuY2gtPnB1c2hfdHJhY2tpbmdfcmVmOworfQorCitzdGF0aWMgaW50IGlnbm9yZV9zeW1yZWZfdXBkYXRlKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJaW50IGZsYWc7CisKKwlpZiAoIXJlc29sdmVfcmVmX3Vuc2FmZShyZWZuYW1lLCAwLCBOVUxMLCAmZmxhZykpCisJCXJldHVybiAwOyAvKiBub24tZXhpc3RpbmcgcmVmcyBhcmUgT0sgKi8KKwlyZXR1cm4gKGZsYWcgJiBSRUZfSVNTWU1SRUYpOworfQorCisvKgorICogQ3JlYXRlIGFuZCByZXR1cm4gYSBsaXN0IG9mIChzdHJ1Y3QgcmVmKSBjb25zaXN0aW5nIG9mIGNvcGllcyBvZgorICogZWFjaCByZW1vdGVfcmVmIHRoYXQgbWF0Y2hlcyByZWZzcGVjLiAgcmVmc3BlYyBtdXN0IGJlIGEgcGF0dGVybi4KKyAqIEZpbGwgaW4gdGhlIGNvcGllcycgcGVlcl9yZWYgdG8gZGVzY3JpYmUgdGhlIGxvY2FsIHRyYWNraW5nIHJlZnMgdG8KKyAqIHdoaWNoIHRoZXkgbWFwLiAgT21pdCBhbnkgcmVmZXJlbmNlcyB0aGF0IHdvdWxkIG1hcCB0byBhbiBleGlzdGluZworICogbG9jYWwgc3ltYm9saWMgcmVmLgorICovCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X2V4cGFuZGVkX21hcChjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywKKwkJCQkgICAgY29uc3Qgc3RydWN0IHJlZnNwZWNfaXRlbSAqcmVmc3BlYykKK3sKKwljb25zdCBzdHJ1Y3QgcmVmICpyZWY7CisJc3RydWN0IHJlZiAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICoqdGFpbCA9ICZyZXQ7CisKKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQljaGFyICpleHBuX25hbWUgPSBOVUxMOworCisJCWlmIChzdHJjaHIocmVmLT5uYW1lLCAnXicpKQorCQkJY29udGludWU7IC8qIGEgZGVyZWZlcmVuY2UgaXRlbSAqLworCQlpZiAobWF0Y2hfbmFtZV93aXRoX3BhdHRlcm4ocmVmc3BlYy0+c3JjLCByZWYtPm5hbWUsCisJCQkJCSAgICByZWZzcGVjLT5kc3QsICZleHBuX25hbWUpICYmCisJCSAgICAhaWdub3JlX3N5bXJlZl91cGRhdGUoZXhwbl9uYW1lKSkgeworCQkJc3RydWN0IHJlZiAqY3B5ID0gY29weV9yZWYocmVmKTsKKworCQkJY3B5LT5wZWVyX3JlZiA9IGFsbG9jX3JlZihleHBuX25hbWUpOworCQkJaWYgKHJlZnNwZWMtPmZvcmNlKQorCQkJCWNweS0+cGVlcl9yZWYtPmZvcmNlID0gMTsKKwkJCSp0YWlsID0gY3B5OworCQkJdGFpbCA9ICZjcHktPm5leHQ7CisJCX0KKwkJZnJlZShleHBuX25hbWUpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVmICpmaW5kX3JlZl9ieV9uYW1lX2FiYnJldihjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLCBjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IHN0cnVjdCByZWYgKnJlZjsKKwljb25zdCBzdHJ1Y3QgcmVmICpiZXN0X21hdGNoID0gTlVMTDsKKwlpbnQgYmVzdF9zY29yZSA9IDA7CisKKwlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWludCBzY29yZSA9IHJlZm5hbWVfbWF0Y2gobmFtZSwgcmVmLT5uYW1lKTsKKworCQlpZiAoYmVzdF9zY29yZSA8IHNjb3JlKSB7CisJCQliZXN0X21hdGNoID0gcmVmOworCQkJYmVzdF9zY29yZSA9IHNjb3JlOworCQl9CisJfQorCXJldHVybiBiZXN0X21hdGNoOworfQorCitzdHJ1Y3QgcmVmICpnZXRfcmVtb3RlX3JlZihjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgcmVmICpyZWYgPSBmaW5kX3JlZl9ieV9uYW1lX2FiYnJldihyZW1vdGVfcmVmcywgbmFtZSk7CisKKwlpZiAoIXJlZikKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gY29weV9yZWYocmVmKTsKK30KKworc3RhdGljIHN0cnVjdCByZWYgKmdldF9sb2NhbF9yZWYoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoIW5hbWUgfHwgbmFtZVswXSA9PSAnXDAnKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChzdGFydHNfd2l0aChuYW1lLCAicmVmcy8iKSkKKwkJcmV0dXJuIGFsbG9jX3JlZihuYW1lKTsKKworCWlmIChzdGFydHNfd2l0aChuYW1lLCAiaGVhZHMvIikgfHwKKwkgICAgc3RhcnRzX3dpdGgobmFtZSwgInRhZ3MvIikgfHwKKwkgICAgc3RhcnRzX3dpdGgobmFtZSwgInJlbW90ZXMvIikpCisJCXJldHVybiBhbGxvY19yZWZfd2l0aF9wcmVmaXgoInJlZnMvIiwgNSwgbmFtZSk7CisKKwlyZXR1cm4gYWxsb2NfcmVmX3dpdGhfcHJlZml4KCJyZWZzL2hlYWRzLyIsIDExLCBuYW1lKTsKK30KKworaW50IGdldF9mZXRjaF9tYXAoY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsCisJCSAgY29uc3Qgc3RydWN0IHJlZnNwZWNfaXRlbSAqcmVmc3BlYywKKwkJICBzdHJ1Y3QgcmVmICoqKnRhaWwsCisJCSAgaW50IG1pc3Npbmdfb2spCit7CisJc3RydWN0IHJlZiAqcmVmX21hcCwgKipybXA7CisKKwlpZiAocmVmc3BlYy0+cGF0dGVybikgeworCQlyZWZfbWFwID0gZ2V0X2V4cGFuZGVkX21hcChyZW1vdGVfcmVmcywgcmVmc3BlYyk7CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHJlZnNwZWMtPnNyY1swXSA/IHJlZnNwZWMtPnNyYyA6ICJIRUFEIjsKKworCQlpZiAocmVmc3BlYy0+ZXhhY3Rfc2hhMSkgeworCQkJcmVmX21hcCA9IGFsbG9jX3JlZihuYW1lKTsKKwkJCWdldF9vaWRfaGV4KG5hbWUsICZyZWZfbWFwLT5vbGRfb2lkKTsKKwkJCXJlZl9tYXAtPmV4YWN0X29pZCA9IDE7CisJCX0gZWxzZSB7CisJCQlyZWZfbWFwID0gZ2V0X3JlbW90ZV9yZWYocmVtb3RlX3JlZnMsIG5hbWUpOworCQl9CisJCWlmICghbWlzc2luZ19vayAmJiAhcmVmX21hcCkKKwkJCWRpZShfKCJjb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgJXMiKSwgbmFtZSk7CisJCWlmIChyZWZfbWFwKSB7CisJCQlyZWZfbWFwLT5wZWVyX3JlZiA9IGdldF9sb2NhbF9yZWYocmVmc3BlYy0+ZHN0KTsKKwkJCWlmIChyZWZfbWFwLT5wZWVyX3JlZiAmJiByZWZzcGVjLT5mb3JjZSkKKwkJCQlyZWZfbWFwLT5wZWVyX3JlZi0+Zm9yY2UgPSAxOworCQl9CisJfQorCisJZm9yIChybXAgPSAmcmVmX21hcDsgKnJtcDsgKSB7CisJCWlmICgoKnJtcCktPnBlZXJfcmVmKSB7CisJCQlpZiAoIXN0YXJ0c193aXRoKCgqcm1wKS0+cGVlcl9yZWYtPm5hbWUsICJyZWZzLyIpIHx8CisJCQkgICAgY2hlY2tfcmVmbmFtZV9mb3JtYXQoKCpybXApLT5wZWVyX3JlZi0+bmFtZSwgMCkpIHsKKwkJCQlzdHJ1Y3QgcmVmICppZ25vcmUgPSAqcm1wOworCQkJCWVycm9yKF8oIiogSWdub3JpbmcgZnVubnkgcmVmICclcycgbG9jYWxseSIpLAorCQkJCSAgICAgICgqcm1wKS0+cGVlcl9yZWYtPm5hbWUpOworCQkJCSpybXAgPSAoKnJtcCktPm5leHQ7CisJCQkJZnJlZShpZ25vcmUtPnBlZXJfcmVmKTsKKwkJCQlmcmVlKGlnbm9yZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJcm1wID0gJigoKnJtcCktPm5leHQpOworCX0KKworCWlmIChyZWZfbWFwKQorCQl0YWlsX2xpbmtfcmVmKHJlZl9tYXAsIHRhaWwpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCByZXNvbHZlX3JlbW90ZV9zeW1yZWYoc3RydWN0IHJlZiAqcmVmLCBzdHJ1Y3QgcmVmICpsaXN0KQoreworCWlmICghcmVmLT5zeW1yZWYpCisJCXJldHVybiAwOworCWZvciAoOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwkJaWYgKCFzdHJjbXAocmVmLT5zeW1yZWYsIGxpc3QtPm5hbWUpKSB7CisJCQlvaWRjcHkoJnJlZi0+b2xkX29pZCwgJmxpc3QtPm9sZF9vaWQpOworCQkJcmV0dXJuIDA7CisJCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIENvbXB1dGUgdGhlIGNvbW1pdCBhaGVhZC9iZWhpbmQgdmFsdWVzIGZvciB0aGUgcGFpciBicmFuY2hfbmFtZSwgYmFzZS4KKyAqCisgKiBJZiBhYmYgaXMgQUhFQURfQkVISU5EX0ZVTEwsIGNvbXB1dGUgdGhlIGZ1bGwgYWhlYWQvYmVoaW5kIGFuZCByZXR1cm4gdGhlCisgKiBjb3VudHMgaW4gKm51bV9vdXJzIGFuZCAqbnVtX3RoZWlycy4gIElmIGFiZiBpcyBBSEVBRF9CRUhJTkRfUVVJQ0ssIHNraXAKKyAqIHRoZSAocG90ZW50aWFsbHkgZXhwZW5zaXZlKSBhL2IgY29tcHV0YXRpb24gKCpudW1fb3VycyBhbmQgKm51bV90aGVpcnMgYXJlCisgKiBzZXQgdG8gemVybykuCisgKgorICogUmV0dXJucyAtMSBpZiBudW1fb3VycyBhbmQgbnVtX3RoZWlycyBjb3VsZCBub3QgYmUgZmlsbGVkIGluIChlLmcuLCByZWYKKyAqIGRvZXMgbm90IGV4aXN0KS4gIFJldHVybnMgMCBpZiB0aGUgY29tbWl0cyBhcmUgaWRlbnRpY2FsLiAgUmV0dXJucyAxIGlmCisgKiBjb21taXRzIGFyZSBkaWZmZXJlbnQuCisgKi8KKworc3RhdGljIGludCBzdGF0X2JyYW5jaF9wYWlyKGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lLCBjb25zdCBjaGFyICpiYXNlLAorCQkJICAgICBpbnQgKm51bV9vdXJzLCBpbnQgKm51bV90aGVpcnMsCisJCQkgICAgIGVudW0gYWhlYWRfYmVoaW5kX2ZsYWdzIGFiZikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgY29tbWl0ICpvdXJzLCAqdGhlaXJzOworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwkvKiBDYW5ub3Qgc3RhdCBpZiB3aGF0IHdlIHVzZWQgdG8gYnVpbGQgb24gbm8gbG9uZ2VyIGV4aXN0cyAqLworCWlmIChyZWFkX3JlZihiYXNlLCAmb2lkKSkKKwkJcmV0dXJuIC0xOworCXRoZWlycyA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwlpZiAoIXRoZWlycykKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlYWRfcmVmKGJyYW5jaF9uYW1lLCAmb2lkKSkKKwkJcmV0dXJuIC0xOworCW91cnMgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJaWYgKCFvdXJzKQorCQlyZXR1cm4gLTE7CisKKwkqbnVtX3RoZWlycyA9ICpudW1fb3VycyA9IDA7CisKKwkvKiBhcmUgd2UgdGhlIHNhbWU/ICovCisJaWYgKHRoZWlycyA9PSBvdXJzKQorCQlyZXR1cm4gMDsKKwlpZiAoYWJmID09IEFIRUFEX0JFSElORF9RVUlDSykKKwkJcmV0dXJuIDE7CisJaWYgKGFiZiAhPSBBSEVBRF9CRUhJTkRfRlVMTCkKKwkJQlVHKCJzdGF0X2JyYW5jaF9wYWlyOiBpbnZhbGlkIGFiZiAnJWQnIiwgYWJmKTsKKworCS8qIFJ1biAicmV2LWxpc3QgLS1sZWZ0LXJpZ2h0IG91cnMuLi50aGVpcnMiIGludGVybmFsbHkuLi4gKi8KKwlhcmd2X2FycmF5X3B1c2goJmFyZ3YsICIiKTsgLyogaWdub3JlZCAqLworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgIi0tbGVmdC1yaWdodCIpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmFyZ3YsICIlcy4uLiVzIiwKKwkJCSBvaWRfdG9faGV4KCZvdXJzLT5vYmplY3Qub2lkKSwKKwkJCSBvaWRfdG9faGV4KCZ0aGVpcnMtPm9iamVjdC5vaWQpKTsKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3YsICItLSIpOworCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldnMsIE5VTEwpOworCXNldHVwX3JldmlzaW9ucyhhcmd2LmFyZ2MsIGFyZ3YuYXJndiwgJnJldnMsIE5VTEwpOworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisKKwkvKiAuLi4gYW5kIGNvdW50IHRoZSBjb21taXRzIG9uIGVhY2ggc2lkZS4gKi8KKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gZ2V0X3JldmlzaW9uKCZyZXZzKTsKKwkJaWYgKCFjKQorCQkJYnJlYWs7CisJCWlmIChjLT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkKKwkJCSgqbnVtX291cnMpKys7CisJCWVsc2UKKwkJCSgqbnVtX3RoZWlycykrKzsKKwl9CisKKwkvKiBjbGVhciBvYmplY3QgZmxhZ3Mgc211ZGdlZCBieSB0aGUgYWJvdmUgdHJhdmVyc2FsICovCisJY2xlYXJfY29tbWl0X21hcmtzKG91cnMsIEFMTF9SRVZfRkxBR1MpOworCWNsZWFyX2NvbW1pdF9tYXJrcyh0aGVpcnMsIEFMTF9SRVZfRkxBR1MpOworCisJYXJndl9hcnJheV9jbGVhcigmYXJndik7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBMb29rdXAgdGhlIHRyYWNraW5nIGJyYW5jaCBmb3IgdGhlIGdpdmVuIGJyYW5jaCBhbmQgaWYgcHJlc2VudCwgb3B0aW9uYWxseQorICogY29tcHV0ZSB0aGUgY29tbWl0IGFoZWFkL2JlaGluZCB2YWx1ZXMgZm9yIHRoZSBwYWlyLgorICoKKyAqIElmIGZvcl9wdXNoIGlzIHRydWUsIHRoZSB0cmFja2luZyBicmFuY2ggcmVmZXJzIHRvIHRoZSBwdXNoIGJyYW5jaCwKKyAqIG90aGVyd2lzZSBpdCByZWZlcnMgdG8gdGhlIHVwc3RyZWFtIGJyYW5jaC4KKyAqCisgKiBUaGUgbmFtZSBvZiB0aGUgdHJhY2tpbmcgYnJhbmNoIChvciBOVUxMIGlmIGl0IGlzIG5vdCBkZWZpbmVkKSBpcworICogcmV0dXJuZWQgdmlhICp0cmFja2luZ19uYW1lLCBpZiBpdCBpcyBub3QgaXRzZWxmIE5VTEwuCisgKgorICogSWYgYWJmIGlzIEFIRUFEX0JFSElORF9GVUxMLCBjb21wdXRlIHRoZSBmdWxsIGFoZWFkL2JlaGluZCBhbmQgcmV0dXJuIHRoZQorICogY291bnRzIGluICpudW1fb3VycyBhbmQgKm51bV90aGVpcnMuICBJZiBhYmYgaXMgQUhFQURfQkVISU5EX1FVSUNLLCBza2lwCisgKiB0aGUgKHBvdGVudGlhbGx5IGV4cGVuc2l2ZSkgYS9iIGNvbXB1dGF0aW9uICgqbnVtX291cnMgYW5kICpudW1fdGhlaXJzIGFyZQorICogc2V0IHRvIHplcm8pLgorICoKKyAqIFJldHVybnMgLTEgaWYgbnVtX291cnMgYW5kIG51bV90aGVpcnMgY291bGQgbm90IGJlIGZpbGxlZCBpbiAoZS5nLiwgbm8KKyAqIHVwc3RyZWFtIGRlZmluZWQsIG9yIHJlZiBkb2VzIG5vdCBleGlzdCkuICBSZXR1cm5zIDAgaWYgdGhlIGNvbW1pdHMgYXJlCisgKiBpZGVudGljYWwuICBSZXR1cm5zIDEgaWYgY29tbWl0cyBhcmUgZGlmZmVyZW50LgorICovCitpbnQgc3RhdF90cmFja2luZ19pbmZvKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgaW50ICpudW1fb3VycywgaW50ICpudW1fdGhlaXJzLAorCQkgICAgICAgY29uc3QgY2hhciAqKnRyYWNraW5nX25hbWUsIGludCBmb3JfcHVzaCwKKwkJICAgICAgIGVudW0gYWhlYWRfYmVoaW5kX2ZsYWdzIGFiZikKK3sKKwljb25zdCBjaGFyICpiYXNlOworCisJLyogQ2Fubm90IHN0YXQgdW5sZXNzIHdlIGFyZSBtYXJrZWQgdG8gYnVpbGQgb24gdG9wIG9mIHNvbWVib2R5IGVsc2UuICovCisJYmFzZSA9IGZvcl9wdXNoID8gYnJhbmNoX2dldF9wdXNoKGJyYW5jaCwgTlVMTCkgOgorCQlicmFuY2hfZ2V0X3Vwc3RyZWFtKGJyYW5jaCwgTlVMTCk7CisJaWYgKHRyYWNraW5nX25hbWUpCisJCSp0cmFja2luZ19uYW1lID0gYmFzZTsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtMTsKKworCXJldHVybiBzdGF0X2JyYW5jaF9wYWlyKGJyYW5jaC0+cmVmbmFtZSwgYmFzZSwgbnVtX291cnMsIG51bV90aGVpcnMsIGFiZik7Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSB3aGVuIHRoZXJlIGlzIGFueXRoaW5nIHRvIHJlcG9ydCwgb3RoZXJ3aXNlIGZhbHNlLgorICovCitpbnQgZm9ybWF0X3RyYWNraW5nX2luZm8oc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSBlbnVtIGFoZWFkX2JlaGluZF9mbGFncyBhYmYpCit7CisJaW50IG91cnMsIHRoZWlycywgc3RpOworCWNvbnN0IGNoYXIgKmZ1bGxfYmFzZTsKKwljaGFyICpiYXNlOworCWludCB1cHN0cmVhbV9pc19nb25lID0gMDsKKworCXN0aSA9IHN0YXRfdHJhY2tpbmdfaW5mbyhicmFuY2gsICZvdXJzLCAmdGhlaXJzLCAmZnVsbF9iYXNlLCAwLCBhYmYpOworCWlmIChzdGkgPCAwKSB7CisJCWlmICghZnVsbF9iYXNlKQorCQkJcmV0dXJuIDA7CisJCXVwc3RyZWFtX2lzX2dvbmUgPSAxOworCX0KKworCWJhc2UgPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihmdWxsX2Jhc2UsIDApOworCWlmICh1cHN0cmVhbV9pc19nb25lKSB7CisJCXN0cmJ1Zl9hZGRmKHNiLAorCQkJXygiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIiksCisJCQliYXNlKTsKKwkJaWYgKGFkdmljZV9zdGF0dXNfaGludHMpCisJCQlzdHJidWZfYWRkc3RyKHNiLAorCQkJCV8oIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIikpOworCX0gZWxzZSBpZiAoIXN0aSkgeworCQlzdHJidWZfYWRkZihzYiwKKwkJCV8oIllvdXIgYnJhbmNoIGlzIHVwIHRvIGRhdGUgd2l0aCAnJXMnLlxuIiksCisJCQliYXNlKTsKKwl9IGVsc2UgaWYgKGFiZiA9PSBBSEVBRF9CRUhJTkRfUVVJQ0spIHsKKwkJc3RyYnVmX2FkZGYoc2IsCisJCQkgICAgXygiWW91ciBicmFuY2ggYW5kICclcycgcmVmZXIgdG8gZGlmZmVyZW50IGNvbW1pdHMuXG4iKSwKKwkJCSAgICBiYXNlKTsKKwkJaWYgKGFkdmljZV9zdGF0dXNfaGludHMpCisJCQlzdHJidWZfYWRkZihzYiwgXygiICAodXNlIFwiJXNcIiBmb3IgZGV0YWlscylcbiIpLAorCQkJCSAgICAiZ2l0IHN0YXR1cyAtLWFoZWFkLWJlaGluZCIpOworCX0gZWxzZSBpZiAoIXRoZWlycykgeworCQlzdHJidWZfYWRkZihzYiwKKwkJCVFfKCJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIsCisJCQkgICAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIiwKKwkJCSAgIG91cnMpLAorCQkJYmFzZSwgb3Vycyk7CisJCWlmIChhZHZpY2Vfc3RhdHVzX2hpbnRzKQorCQkJc3RyYnVmX2FkZHN0cihzYiwKKwkJCQlfKCIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIikpOworCX0gZWxzZSBpZiAoIW91cnMpIHsKKwkJc3RyYnVmX2FkZGYoc2IsCisJCQlRXygiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCAiCisJCQkgICAgICAgImFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iLAorCQkJICAgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsICIKKwkJCSAgICAgICAiYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIsCisJCQkgICB0aGVpcnMpLAorCQkJYmFzZSwgdGhlaXJzKTsKKwkJaWYgKGFkdmljZV9zdGF0dXNfaGludHMpCisJCQlzdHJidWZfYWRkc3RyKHNiLAorCQkJCV8oIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gdXBkYXRlIHlvdXIgbG9jYWwgYnJhbmNoKVxuIikpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRmKHNiLAorCQkJUV8oIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisJCQkgICAgICAgImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsICIKKwkJCSAgICAgICAicmVzcGVjdGl2ZWx5LlxuIiwKKwkJCSAgICJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorCQkJICAgICAgICJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgIgorCQkJICAgICAgICJyZXNwZWN0aXZlbHkuXG4iLAorCQkJICAgb3VycyArIHRoZWlycyksCisJCQliYXNlLCBvdXJzLCB0aGVpcnMpOworCQlpZiAoYWR2aWNlX3N0YXR1c19oaW50cykKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsCisJCQkJXygiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIikpOworCX0KKwlmcmVlKGJhc2UpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG9uZV9sb2NhbF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCByZWYgKioqbG9jYWxfdGFpbCA9IGNiX2RhdGE7CisJc3RydWN0IHJlZiAqcmVmOworCisJLyogd2UgYWxyZWFkeSBrbm93IGl0IHN0YXJ0cyB3aXRoIHJlZnMvIHRvIGdldCBoZXJlICovCisJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJlZm5hbWUgKyA1LCAwKSkKKwkJcmV0dXJuIDA7CisKKwlyZWYgPSBhbGxvY19yZWYocmVmbmFtZSk7CisJb2lkY3B5KCZyZWYtPm5ld19vaWQsIG9pZCk7CisJKipsb2NhbF90YWlsID0gcmVmOworCSpsb2NhbF90YWlsID0gJnJlZi0+bmV4dDsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlZiAqZ2V0X2xvY2FsX2hlYWRzKHZvaWQpCit7CisJc3RydWN0IHJlZiAqbG9jYWxfcmVmcyA9IE5VTEwsICoqbG9jYWxfdGFpbCA9ICZsb2NhbF9yZWZzOworCisJZm9yX2VhY2hfcmVmKG9uZV9sb2NhbF9yZWYsICZsb2NhbF90YWlsKTsKKwlyZXR1cm4gbG9jYWxfcmVmczsKK30KKworc3RydWN0IHJlZiAqZ3Vlc3NfcmVtb3RlX2hlYWQoY29uc3Qgc3RydWN0IHJlZiAqaGVhZCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCByZWYgKnJlZnMsCisJCQkgICAgICBpbnQgYWxsKQoreworCWNvbnN0IHN0cnVjdCByZWYgKnI7CisJc3RydWN0IHJlZiAqbGlzdCA9IE5VTEw7CisJc3RydWN0IHJlZiAqKnRhaWwgPSAmbGlzdDsKKworCWlmICghaGVhZCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIFNvbWUgdHJhbnNwb3J0cyBzdXBwb3J0IGRpcmVjdGx5IHBlZWtpbmcgYXQKKwkgKiB3aGVyZSBIRUFEIHBvaW50czsgaWYgdGhhdCBpcyB0aGUgY2FzZSwgdGhlbgorCSAqIHdlIGRvbid0IGhhdmUgdG8gZ3Vlc3MuCisJICovCisJaWYgKGhlYWQtPnN5bXJlZikKKwkJcmV0dXJuIGNvcHlfcmVmKGZpbmRfcmVmX2J5X25hbWUocmVmcywgaGVhZC0+c3ltcmVmKSk7CisKKwkvKiBJZiByZWZzL2hlYWRzL21hc3RlciBjb3VsZCBiZSByaWdodCwgaXQgaXMuICovCisJaWYgKCFhbGwpIHsKKwkJciA9IGZpbmRfcmVmX2J5X25hbWUocmVmcywgInJlZnMvaGVhZHMvbWFzdGVyIik7CisJCWlmIChyICYmIG9pZGVxKCZyLT5vbGRfb2lkLCAmaGVhZC0+b2xkX29pZCkpCisJCQlyZXR1cm4gY29weV9yZWYocik7CisJfQorCisJLyogTG9vayBmb3IgYW5vdGhlciByZWYgdGhhdCBwb2ludHMgdGhlcmUgKi8KKwlmb3IgKHIgPSByZWZzOyByOyByID0gci0+bmV4dCkgeworCQlpZiAociAhPSBoZWFkICYmCisJCSAgICBzdGFydHNfd2l0aChyLT5uYW1lLCAicmVmcy9oZWFkcy8iKSAmJgorCQkgICAgb2lkZXEoJnItPm9sZF9vaWQsICZoZWFkLT5vbGRfb2lkKSkgeworCQkJKnRhaWwgPSBjb3B5X3JlZihyKTsKKwkJCXRhaWwgPSAmKCgqdGFpbCktPm5leHQpOworCQkJaWYgKCFhbGwpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gbGlzdDsKK30KKworc3RydWN0IHN0YWxlX2hlYWRzX2luZm8geworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmX25hbWVzOworCXN0cnVjdCByZWYgKipzdGFsZV9yZWZzX3RhaWw7CisJc3RydWN0IHJlZnNwZWMgKnJzOworfTsKKworc3RhdGljIGludCBnZXRfc3RhbGVfaGVhZHNfY2IoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzdGFsZV9oZWFkc19pbmZvICppbmZvID0gY2JfZGF0YTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWF0Y2hlcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCByZWZzcGVjX2l0ZW0gcXVlcnk7CisJaW50IGksIHN0YWxlID0gMTsKKwltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2Yoc3RydWN0IHJlZnNwZWNfaXRlbSkpOworCXF1ZXJ5LmRzdCA9IChjaGFyICopcmVmbmFtZTsKKworCXF1ZXJ5X3JlZnNwZWNzX211bHRpcGxlKGluZm8tPnJzLCAmcXVlcnksICZtYXRjaGVzKTsKKwlpZiAobWF0Y2hlcy5uciA9PSAwKQorCQlnb3RvIGNsZWFuX2V4aXQ7IC8qIE5vIG1hdGNoZXMgKi8KKworCS8qCisJICogSWYgd2UgZGlkIGZpbmQgYSBzdWl0YWJsZSByZWZzcGVjIGFuZCBpdCdzIG5vdCBhIHN5bXJlZiBhbmQKKwkgKiBpdCdzIG5vdCBpbiB0aGUgbGlzdCBvZiByZWZzIHRoYXQgY3VycmVudGx5IGV4aXN0IGluIHRoYXQKKwkgKiByZW1vdGUsIHdlIGNvbnNpZGVyIGl0IHRvIGJlIHN0YWxlLiBJbiBvcmRlciB0byBkZWFsIHdpdGgKKwkgKiBvdmVybGFwcGluZyByZWZzcGVjcywgd2UgbmVlZCB0byBnbyBvdmVyIGFsbCBvZiB0aGUKKwkgKiBtYXRjaGluZyByZWZzLgorCSAqLworCWlmIChmbGFncyAmIFJFRl9JU1NZTVJFRikKKwkJZ290byBjbGVhbl9leGl0OworCisJZm9yIChpID0gMDsgc3RhbGUgJiYgaSA8IG1hdGNoZXMubnI7IGkrKykKKwkJaWYgKHN0cmluZ19saXN0X2hhc19zdHJpbmcoaW5mby0+cmVmX25hbWVzLCBtYXRjaGVzLml0ZW1zW2ldLnN0cmluZykpCisJCQlzdGFsZSA9IDA7CisKKwlpZiAoc3RhbGUpIHsKKwkJc3RydWN0IHJlZiAqcmVmID0gbWFrZV9saW5rZWRfcmVmKHJlZm5hbWUsICZpbmZvLT5zdGFsZV9yZWZzX3RhaWwpOworCQlvaWRjcHkoJnJlZi0+bmV3X29pZCwgb2lkKTsKKwl9CisKK2NsZWFuX2V4aXQ6CisJc3RyaW5nX2xpc3RfY2xlYXIoJm1hdGNoZXMsIDApOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmVmICpnZXRfc3RhbGVfaGVhZHMoc3RydWN0IHJlZnNwZWMgKnJzLCBzdHJ1Y3QgcmVmICpmZXRjaF9tYXApCit7CisJc3RydWN0IHJlZiAqcmVmLCAqc3RhbGVfcmVmcyA9IE5VTEw7CisJc3RydWN0IHN0cmluZ19saXN0IHJlZl9uYW1lcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHN0YWxlX2hlYWRzX2luZm8gaW5mbzsKKworCWluZm8ucmVmX25hbWVzID0gJnJlZl9uYW1lczsKKwlpbmZvLnN0YWxlX3JlZnNfdGFpbCA9ICZzdGFsZV9yZWZzOworCWluZm8ucnMgPSByczsKKwlmb3IgKHJlZiA9IGZldGNoX21hcDsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVmX25hbWVzLCByZWYtPm5hbWUpOworCXN0cmluZ19saXN0X3NvcnQoJnJlZl9uYW1lcyk7CisJZm9yX2VhY2hfcmVmKGdldF9zdGFsZV9oZWFkc19jYiwgJmluZm8pOworCXN0cmluZ19saXN0X2NsZWFyKCZyZWZfbmFtZXMsIDApOworCXJldHVybiBzdGFsZV9yZWZzOworfQorCisvKgorICogQ29tcGFyZS1hbmQtc3dhcAorICovCitzdGF0aWMgdm9pZCBjbGVhcl9jYXNfb3B0aW9uKHN0cnVjdCBwdXNoX2Nhc19vcHRpb24gKmNhcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjYXMtPm5yOyBpKyspCisJCWZyZWUoY2FzLT5lbnRyeVtpXS5yZWZuYW1lKTsKKwlmcmVlKGNhcy0+ZW50cnkpOworCW1lbXNldChjYXMsIDAsIHNpemVvZigqY2FzKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHVzaF9jYXMgKmFkZF9jYXNfZW50cnkoc3RydWN0IHB1c2hfY2FzX29wdGlvbiAqY2FzLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJICAgICAgc2l6ZV90IHJlZm5hbWVsZW4pCit7CisJc3RydWN0IHB1c2hfY2FzICplbnRyeTsKKwlBTExPQ19HUk9XKGNhcy0+ZW50cnksIGNhcy0+bnIgKyAxLCBjYXMtPmFsbG9jKTsKKwllbnRyeSA9ICZjYXMtPmVudHJ5W2Nhcy0+bnIrK107CisJbWVtc2V0KGVudHJ5LCAwLCBzaXplb2YoKmVudHJ5KSk7CisJZW50cnktPnJlZm5hbWUgPSB4bWVtZHVweihyZWZuYW1lLCByZWZuYW1lbGVuKTsKKwlyZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfcHVzaF9jYXNfb3B0aW9uKHN0cnVjdCBwdXNoX2Nhc19vcHRpb24gKmNhcywgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJY29uc3QgY2hhciAqY29sb247CisJc3RydWN0IHB1c2hfY2FzICplbnRyeTsKKworCWlmICh1bnNldCkgeworCQkvKiAiLS1uby08b3B0aW9uPiIgKi8KKwkJY2xlYXJfY2FzX29wdGlvbihjYXMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWFyZykgeworCQkvKiBqdXN0ICItLTxvcHRpb24+IiAqLworCQljYXMtPnVzZV90cmFja2luZ19mb3JfcmVzdCA9IDE7CisJCXJldHVybiAwOworCX0KKworCS8qICItLTxvcHRpb24+PXJlZm5hbWUiIG9yICItLTxvcHRpb24+PXJlZm5hbWU6dmFsdWUiICovCisJY29sb24gPSBzdHJjaHJudWwoYXJnLCAnOicpOworCWVudHJ5ID0gYWRkX2Nhc19lbnRyeShjYXMsIGFyZywgY29sb24gLSBhcmcpOworCWlmICghKmNvbG9uKQorCQllbnRyeS0+dXNlX3RyYWNraW5nID0gMTsKKwllbHNlIGlmICghY29sb25bMV0pCisJCW9pZGNscigmZW50cnktPmV4cGVjdCk7CisJZWxzZSBpZiAoZ2V0X29pZChjb2xvbiArIDEsICZlbnRyeS0+ZXhwZWN0KSkKKwkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCBwYXJzZSBleHBlY3RlZCBvYmplY3QgbmFtZSAnJXMnIiksCisJCQkgICAgIGNvbG9uICsgMSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZW9wdF9wdXNoX2Nhc19vcHRpb24oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlyZXR1cm4gcGFyc2VfcHVzaF9jYXNfb3B0aW9uKG9wdC0+dmFsdWUsIGFyZywgdW5zZXQpOworfQorCitpbnQgaXNfZW1wdHlfY2FzKGNvbnN0IHN0cnVjdCBwdXNoX2Nhc19vcHRpb24gKmNhcykKK3sKKwlyZXR1cm4gIWNhcy0+dXNlX3RyYWNraW5nX2Zvcl9yZXN0ICYmICFjYXMtPm5yOworfQorCisvKgorICogTG9vayBhdCByZW1vdGUuZmV0Y2ggcmVmc3BlYyBhbmQgc2VlIGlmIHdlIGhhdmUgYSByZW1vdGUKKyAqIHRyYWNraW5nIGJyYW5jaCBmb3IgdGhlIHJlZm5hbWUgdGhlcmUuICBGaWxsIGl0cyBjdXJyZW50CisgKiB2YWx1ZSBpbiBzaGExW10uCisgKiBJZiB3ZSBjYW5ub3QgZG8gc28sIHJldHVybiBuZWdhdGl2ZSB0byBzaWduYWwgYW4gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgcmVtb3RlX3RyYWNraW5nKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwljaGFyICpkc3Q7CisKKwlkc3QgPSBhcHBseV9yZWZzcGVjcygmcmVtb3RlLT5mZXRjaCwgcmVmbmFtZSk7CisJaWYgKCFkc3QpCisJCXJldHVybiAtMTsgLyogbm8gdHJhY2tpbmcgcmVmIGZvciByZWZuYW1lIGF0IHJlbW90ZSAqLworCWlmIChyZWFkX3JlZihkc3QsIG9pZCkpCisJCXJldHVybiAtMTsgLyogd2Uga25vdyB3aGF0IHRoZSB0cmFja2luZyByZWYgaXMgYnV0IHdlIGNhbm5vdCByZWFkIGl0ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGx5X2NhcyhzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uICpjYXMsCisJCSAgICAgIHN0cnVjdCByZW1vdGUgKnJlbW90ZSwKKwkJICAgICAgc3RydWN0IHJlZiAqcmVmKQoreworCWludCBpOworCisJLyogRmluZCBhbiBleHBsaWNpdCAtLTxvcHRpb24+PTxuYW1lPls6PHZhbHVlPl0gZW50cnkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY2FzLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBwdXNoX2NhcyAqZW50cnkgPSAmY2FzLT5lbnRyeVtpXTsKKwkJaWYgKCFyZWZuYW1lX21hdGNoKGVudHJ5LT5yZWZuYW1lLCByZWYtPm5hbWUpKQorCQkJY29udGludWU7CisJCXJlZi0+ZXhwZWN0X29sZF9zaGExID0gMTsKKwkJaWYgKCFlbnRyeS0+dXNlX3RyYWNraW5nKQorCQkJb2lkY3B5KCZyZWYtPm9sZF9vaWRfZXhwZWN0LCAmZW50cnktPmV4cGVjdCk7CisJCWVsc2UgaWYgKHJlbW90ZV90cmFja2luZyhyZW1vdGUsIHJlZi0+bmFtZSwgJnJlZi0+b2xkX29pZF9leHBlY3QpKQorCQkJb2lkY2xyKCZyZWYtPm9sZF9vaWRfZXhwZWN0KTsKKwkJcmV0dXJuOworCX0KKworCS8qIEFyZSB3ZSB1c2luZyAiLS08b3B0aW9uPiIgdG8gY292ZXIgYWxsPyAqLworCWlmICghY2FzLT51c2VfdHJhY2tpbmdfZm9yX3Jlc3QpCisJCXJldHVybjsKKworCXJlZi0+ZXhwZWN0X29sZF9zaGExID0gMTsKKwlpZiAocmVtb3RlX3RyYWNraW5nKHJlbW90ZSwgcmVmLT5uYW1lLCAmcmVmLT5vbGRfb2lkX2V4cGVjdCkpCisJCW9pZGNscigmcmVmLT5vbGRfb2lkX2V4cGVjdCk7Cit9CisKK3ZvaWQgYXBwbHlfcHVzaF9jYXMoc3RydWN0IHB1c2hfY2FzX29wdGlvbiAqY2FzLAorCQkgICAgc3RydWN0IHJlbW90ZSAqcmVtb3RlLAorCQkgICAgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMpCit7CisJc3RydWN0IHJlZiAqcmVmOworCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQlhcHBseV9jYXMoY2FzLCByZW1vdGUsIHJlZik7Cit9CmRpZmYgLS1naXQgYS9yZW1vdGUuaCBiL3JlbW90ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZDg3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9yZW1vdGUuaApAQCAtMCwwICsxLDM0OCBAQAorI2lmbmRlZiBSRU1PVEVfSAorI2RlZmluZSBSRU1PVEVfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgInJlZnNwZWMuaCIKKworLyoqCisgKiBUaGUgQVBJIGdpdmVzIGFjY2VzcyB0byB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHJlbW90ZXMuIEl0IGhhbmRsZXMKKyAqIGFsbCB0aHJlZSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMgaGlzdG9yaWNhbGx5IGFuZCBjdXJyZW50bHkgdXNlZCBieSBHaXQsCisgKiBhbmQgcHJlc2VudHMgdGhlIGluZm9ybWF0aW9uIGluIGEgdW5pZm9ybSBmYXNoaW9uLiBOb3RlIHRoYXQgdGhlIGNvZGUgYWxzbworICogaGFuZGxlcyBwbGFpbiBVUkxzIHdpdGhvdXQgYW55IGNvbmZpZ3VyYXRpb24sIGdpdmluZyB0aGVtIGp1c3QgdGhlIGRlZmF1bHQKKyAqIGluZm9ybWF0aW9uLgorICovCisKK2VudW0geworCVJFTU9URV9VTkNPTkZJR1VSRUQgPSAwLAorCVJFTU9URV9DT05GSUcsCisJUkVNT1RFX1JFTU9URVMsCisJUkVNT1RFX0JSQU5DSEVTCit9OworCitzdHJ1Y3QgcmVtb3RlIHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisKKwkvKiBUaGUgdXNlcidzIG5pY2tuYW1lIGZvciB0aGUgcmVtb3RlICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCWludCBvcmlnaW4sIGNvbmZpZ3VyZWRfaW5fcmVwbzsKKworCWNvbnN0IGNoYXIgKmZvcmVpZ25fdmNzOworCisJLyogQW4gYXJyYXkgb2YgYWxsIG9mIHRoZSB1cmxfbnIgVVJMcyBjb25maWd1cmVkIGZvciB0aGUgcmVtb3RlICovCisJY29uc3QgY2hhciAqKnVybDsKKworCWludCB1cmxfbnI7CisJaW50IHVybF9hbGxvYzsKKworCS8qIEFuIGFycmF5IG9mIGFsbCBvZiB0aGUgcHVzaHVybF9uciBwdXNoIFVSTHMgY29uZmlndXJlZCBmb3IgdGhlIHJlbW90ZSAqLworCWNvbnN0IGNoYXIgKipwdXNodXJsOworCisJaW50IHB1c2h1cmxfbnI7CisJaW50IHB1c2h1cmxfYWxsb2M7CisKKwlzdHJ1Y3QgcmVmc3BlYyBwdXNoOworCisJc3RydWN0IHJlZnNwZWMgZmV0Y2g7CisKKwkvKgorCSAqIFRoZSBzZXR0aW5nIGZvciB3aGV0aGVyIHRvIGZldGNoIHRhZ3MgKGFzIGEgc2VwYXJhdGUgcnVsZSBmcm9tIHRoZQorCSAqIGNvbmZpZ3VyZWQgcmVmc3BlY3MpOworCSAqIC0xIHRvIG5ldmVyIGZldGNoIHRhZ3MKKwkgKiAwIHRvIGF1dG8tZm9sbG93IHRhZ3Mgb24gaGV1cmlzdGljIChkZWZhdWx0KQorCSAqIDEgdG8gYWx3YXlzIGF1dG8tZm9sbG93IHRhZ3MKKwkgKiAyIHRvIGFsd2F5cyBmZXRjaCB0YWdzCisJICovCisJaW50IGZldGNoX3RhZ3M7CisKKwlpbnQgc2tpcF9kZWZhdWx0X3VwZGF0ZTsKKwlpbnQgbWlycm9yOworCWludCBwcnVuZTsKKwlpbnQgcHJ1bmVfdGFnczsKKworCS8qKgorCSAqIFRoZSBjb25maWd1cmVkIGhlbHBlciBwcm9ncmFtcyB0byBydW4gb24gdGhlIHJlbW90ZSBzaWRlLCBmb3IKKwkgKiBHaXQtbmF0aXZlIHByb3RvY29scy4KKwkgKi8KKwljb25zdCBjaGFyICpyZWNlaXZlcGFjazsKKwljb25zdCBjaGFyICp1cGxvYWRwYWNrOworCisJLyogVGhlIHByb3h5IHRvIHVzZSBmb3IgY3VybCAoaHR0cCwgaHR0cHMsIGZ0cCwgZXRjLikgVVJMcy4gKi8KKwljaGFyICpodHRwX3Byb3h5OworCisJLyogVGhlIG1ldGhvZCB1c2VkIGZvciBhdXRoZW50aWNhdGluZyBhZ2FpbnN0IGBodHRwX3Byb3h5YC4gKi8KKwljaGFyICpodHRwX3Byb3h5X2F1dGhtZXRob2Q7Cit9OworCisvKioKKyAqIHN0cnVjdCByZW1vdGVzIGNhbiBiZSBmb3VuZCBieSBuYW1lIHdpdGggcmVtb3RlX2dldCgpLgorICogcmVtb3RlX2dldChOVUxMKSB3aWxsIHJldHVybiB0aGUgZGVmYXVsdCByZW1vdGUsIGdpdmVuIHRoZSBjdXJyZW50IGJyYW5jaAorICogYW5kIGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0cnVjdCByZW1vdGUgKnJlbW90ZV9nZXQoY29uc3QgY2hhciAqbmFtZSk7CisKK3N0cnVjdCByZW1vdGUgKnB1c2hyZW1vdGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpOworaW50IHJlbW90ZV9pc19jb25maWd1cmVkKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgaW50IGluX3JlcG8pOworCit0eXBlZGVmIGludCBlYWNoX3JlbW90ZV9mbihzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKnByaXYpOworCisvKiBpdGVyYXRlIHRocm91Z2ggc3RydWN0IHJlbW90ZXMgKi8KK2ludCBmb3JfZWFjaF9yZW1vdGUoZWFjaF9yZW1vdGVfZm4gZm4sIHZvaWQgKnByaXYpOworCitpbnQgcmVtb3RlX2hhc191cmwoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICp1cmwpOworCitzdHJ1Y3QgcmVmIHsKKwlzdHJ1Y3QgcmVmICpuZXh0OworCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG5ld19vaWQ7CisJc3RydWN0IG9iamVjdF9pZCBvbGRfb2lkX2V4cGVjdDsgLyogdXNlZCBieSBleHBlY3Qtb2xkICovCisJY2hhciAqc3ltcmVmOworCXVuc2lnbmVkIGludAorCQlmb3JjZToxLAorCQlmb3JjZWRfdXBkYXRlOjEsCisJCWV4cGVjdF9vbGRfc2hhMToxLAorCQlleGFjdF9vaWQ6MSwKKwkJZGVsZXRpb246MTsKKworCWVudW0geworCQlSRUZfTk9UX01BVENIRUQgPSAwLCAvKiBpbml0aWFsIHZhbHVlICovCisJCVJFRl9NQVRDSEVELAorCQlSRUZfVU5BRFZFUlRJU0VEX05PVF9BTExPV0VECisJfSBtYXRjaF9zdGF0dXM7CisKKwkvKgorCSAqIE9yZGVyIGlzIGltcG9ydGFudCBoZXJlLCBhcyB3ZSB3cml0ZSB0byBGRVRDSF9IRUFECisJICogaW4gbnVtZXJpYyBvcmRlci4gQW5kIHRoZSBkZWZhdWx0IE5PVF9GT1JfTUVSR0UKKwkgKiBzaG91bGQgYmUgMCwgc28gdGhhdCB4Y2FsbG9jJ2Qgc3RydWN0dXJlcyBnZXQgaXQKKwkgKiBieSBkZWZhdWx0LgorCSAqLworCWVudW0geworCQlGRVRDSF9IRUFEX01FUkdFID0gLTEsCisJCUZFVENIX0hFQURfTk9UX0ZPUl9NRVJHRSA9IDAsCisJCUZFVENIX0hFQURfSUdOT1JFID0gMQorCX0gZmV0Y2hfaGVhZF9zdGF0dXM7CisKKwllbnVtIHsKKwkJUkVGX1NUQVRVU19OT05FID0gMCwKKwkJUkVGX1NUQVRVU19PSywKKwkJUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQsCisJCVJFRl9TVEFUVVNfUkVKRUNUX0FMUkVBRFlfRVhJU1RTLAorCQlSRUZfU1RBVFVTX1JFSkVDVF9OT0RFTEVURSwKKwkJUkVGX1NUQVRVU19SRUpFQ1RfRkVUQ0hfRklSU1QsCisJCVJFRl9TVEFUVVNfUkVKRUNUX05FRURTX0ZPUkNFLAorCQlSRUZfU1RBVFVTX1JFSkVDVF9TVEFMRSwKKwkJUkVGX1NUQVRVU19SRUpFQ1RfU0hBTExPVywKKwkJUkVGX1NUQVRVU19VUFRPREFURSwKKwkJUkVGX1NUQVRVU19SRU1PVEVfUkVKRUNULAorCQlSRUZfU1RBVFVTX0VYUEVDVElOR19SRVBPUlQsCisJCVJFRl9TVEFUVVNfQVRPTUlDX1BVU0hfRkFJTEVECisJfSBzdGF0dXM7CisJY2hhciAqcmVtb3RlX3N0YXR1czsKKwlzdHJ1Y3QgcmVmICpwZWVyX3JlZjsgLyogd2hlbiByZW5hbWluZyAqLworCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsgLyogbW9yZSAqLworfTsKKworI2RlZmluZSBSRUZfTk9STUFMCSgxdSA8PCAwKQorI2RlZmluZSBSRUZfSEVBRFMJKDF1IDw8IDEpCisjZGVmaW5lIFJFRl9UQUdTCSgxdSA8PCAyKQorCitzdHJ1Y3QgcmVmICpmaW5kX3JlZl9ieV9uYW1lKGNvbnN0IHN0cnVjdCByZWYgKmxpc3QsIGNvbnN0IGNoYXIgKm5hbWUpOworCitzdHJ1Y3QgcmVmICphbGxvY19yZWYoY29uc3QgY2hhciAqbmFtZSk7CitzdHJ1Y3QgcmVmICpjb3B5X3JlZihjb25zdCBzdHJ1Y3QgcmVmICpyZWYpOworc3RydWN0IHJlZiAqY29weV9yZWZfbGlzdChjb25zdCBzdHJ1Y3QgcmVmICpyZWYpOwordm9pZCBzb3J0X3JlZl9saXN0KHN0cnVjdCByZWYgKiosIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKK2ludCBjb3VudF9yZWZzcGVjX21hdGNoKGNvbnN0IGNoYXIgKiwgc3RydWN0IHJlZiAqcmVmcywgc3RydWN0IHJlZiAqKm1hdGNoZWRfcmVmKTsKK2ludCByZWZfY29tcGFyZV9uYW1lKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKKworaW50IGNoZWNrX3JlZl90eXBlKGNvbnN0IHN0cnVjdCByZWYgKnJlZiwgaW50IGZsYWdzKTsKKworLyoKKyAqIEZyZWUgYSBzaW5nbGUgcmVmIGFuZCBpdHMgcGVlciwgb3IgYW4gZW50aXJlIGxpc3Qgb2YgcmVmcyBhbmQgdGhlaXIgcGVlcnMsCisgKiByZXNwZWN0aXZlbHkuCisgKi8KK3ZvaWQgZnJlZV9vbmVfcmVmKHN0cnVjdCByZWYgKnJlZik7Cit2b2lkIGZyZWVfcmVmcyhzdHJ1Y3QgcmVmICpyZWYpOworCitzdHJ1Y3Qgb2lkX2FycmF5Oworc3RydWN0IHBhY2tldF9yZWFkZXI7CitzdHJ1Y3QgYXJndl9hcnJheTsKK3N0cnVjdCBzdHJpbmdfbGlzdDsKK3N0cnVjdCByZWYgKipnZXRfcmVtb3RlX2hlYWRzKHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZWFkZXIsCisJCQkgICAgICBzdHJ1Y3QgcmVmICoqbGlzdCwgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJICAgICAgc3RydWN0IG9pZF9hcnJheSAqZXh0cmFfaGF2ZSwKKwkJCSAgICAgIHN0cnVjdCBvaWRfYXJyYXkgKnNoYWxsb3dfcG9pbnRzKTsKKworLyogVXNlZCBmb3IgcHJvdG9jb2wgdjIgaW4gb3JkZXIgdG8gcmV0cmlldmUgcmVmcyBmcm9tIGEgcmVtb3RlICovCitzdHJ1Y3QgcmVmICoqZ2V0X3JlbW90ZV9yZWZzKGludCBmZF9vdXQsIHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZWFkZXIsCisJCQkgICAgIHN0cnVjdCByZWYgKipsaXN0LCBpbnQgZm9yX3B1c2gsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICpyZWZfcHJlZml4ZXMsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqc2VydmVyX29wdGlvbnMpOworCitpbnQgcmVzb2x2ZV9yZW1vdGVfc3ltcmVmKHN0cnVjdCByZWYgKnJlZiwgc3RydWN0IHJlZiAqbGlzdCk7CisKKy8qCisgKiBSZW1vdmUgYW5kIGZyZWUgYWxsIGJ1dCB0aGUgZmlyc3Qgb2YgYW55IGVudHJpZXMgaW4gdGhlIGlucHV0IGxpc3QKKyAqIHRoYXQgbWFwIHRoZSBzYW1lIHJlbW90ZSByZWZlcmVuY2UgdG8gdGhlIHNhbWUgbG9jYWwgcmVmZXJlbmNlLiAgSWYKKyAqIHRoZXJlIGFyZSB0d28gZW50cmllcyB0aGF0IG1hcCBkaWZmZXJlbnQgcmVtb3RlIHJlZmVyZW5jZXMgdG8gdGhlCisgKiBzYW1lIGxvY2FsIHJlZmVyZW5jZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlIGFuZCBkaWUuICBSZXR1cm4gYQorICogcG9pbnRlciB0byB0aGUgaGVhZCBvZiB0aGUgcmVzdWx0aW5nIGxpc3QuCisgKi8KK3N0cnVjdCByZWYgKnJlZl9yZW1vdmVfZHVwbGljYXRlcyhzdHJ1Y3QgcmVmICpyZWZfbWFwKTsKKworaW50IHF1ZXJ5X3JlZnNwZWNzKHN0cnVjdCByZWZzcGVjICpycywgc3RydWN0IHJlZnNwZWNfaXRlbSAqcXVlcnkpOworY2hhciAqYXBwbHlfcmVmc3BlY3Moc3RydWN0IHJlZnNwZWMgKnJzLCBjb25zdCBjaGFyICpuYW1lKTsKKworaW50IGNoZWNrX3B1c2hfcmVmcyhzdHJ1Y3QgcmVmICpzcmMsIHN0cnVjdCByZWZzcGVjICpycyk7CitpbnQgbWF0Y2hfcHVzaF9yZWZzKHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZiAqKmRzdCwKKwkJICAgIHN0cnVjdCByZWZzcGVjICpycywgaW50IGZsYWdzKTsKK3ZvaWQgc2V0X3JlZl9zdGF0dXNfZm9yX3B1c2goc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsIGludCBzZW5kX21pcnJvciwKKwlpbnQgZm9yY2VfdXBkYXRlKTsKKworLyoKKyAqIEdpdmVuIGEgbGlzdCBvZiB0aGUgcmVtb3RlIHJlZnMgYW5kIHRoZSBzcGVjaWZpY2F0aW9uIG9mIHRoaW5ncyB0bworICogZmV0Y2gsIG1ha2VzIGEgKHNlcGFyYXRlKSBsaXN0IG9mIHRoZSByZWZzIHRvIGZldGNoIGFuZCB0aGUgbG9jYWwKKyAqIHJlZnMgdG8gc3RvcmUgaW50by4KKyAqCisgKiAqdGFpbCBpcyB0aGUgcG9pbnRlciB0byB0aGUgdGFpbCBwb2ludGVyIG9mIHRoZSBsaXN0IG9mIHJlc3VsdHMKKyAqIGJlZm9yZWhhbmQsIGFuZCB3aWxsIGJlIHNldCB0byB0aGUgdGFpbCBwb2ludGVyIG9mIHRoZSBsaXN0IG9mCisgKiByZXN1bHRzIGFmdGVyd2FyZC4KKyAqCisgKiBtaXNzaW5nX29rIGlzIHVzdWFsbHkgZmFsc2UsIGJ1dCB3aGVuIHdlIGFyZSBhZGRpbmcgYnJhbmNoLiRuYW1lLm1lcmdlCisgKiBpdCBpcyBPayBpZiB0aGUgYnJhbmNoIGlzIG5vdCBhdCB0aGUgcmVtb3RlIGFueW1vcmUuCisgKi8KK2ludCBnZXRfZmV0Y2hfbWFwKGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBjb25zdCBzdHJ1Y3QgcmVmc3BlY19pdGVtICpyZWZzcGVjLAorCQkgIHN0cnVjdCByZWYgKioqdGFpbCwgaW50IG1pc3Npbmdfb2spOworCitzdHJ1Y3QgcmVmICpnZXRfcmVtb3RlX3JlZihjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qCisgKiBGb3IgdGhlIGdpdmVuIHJlbW90ZSwgcmVhZHMgdGhlIHJlZnNwZWMncyBzcmMgYW5kIHNldHMgdGhlIG90aGVyIGZpZWxkcy4KKyAqLworaW50IHJlbW90ZV9maW5kX3RyYWNraW5nKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgc3RydWN0IHJlZnNwZWNfaXRlbSAqcmVmc3BlYyk7CisKKy8qKgorICogc3RydWN0IGJyYW5jaCBob2xkcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgYSBicmFuY2guIEl0IGNhbiBiZSBsb29rZWQgdXAgd2l0aAorICogYnJhbmNoX2dldChuYW1lKSBmb3IgInJlZnMvaGVhZHMve25hbWV9Iiwgb3Igd2l0aCBicmFuY2hfZ2V0KE5VTEwpIGZvciBIRUFELgorICovCitzdHJ1Y3QgYnJhbmNoIHsKKworCS8qIFRoZSBzaG9ydCBuYW1lIG9mIHRoZSBicmFuY2guICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qIFRoZSBmdWxsIHBhdGggZm9yIHRoZSBicmFuY2ggcmVmLiAqLworCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisKKwkvKiBUaGUgbmFtZSBvZiB0aGUgcmVtb3RlIGxpc3RlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gKi8KKwljb25zdCBjaGFyICpyZW1vdGVfbmFtZTsKKworCWNvbnN0IGNoYXIgKnB1c2hyZW1vdGVfbmFtZTsKKworCS8qIEFuIGFycmF5IG9mIHRoZSAibWVyZ2UiIGxpbmVzIGluIHRoZSBjb25maWd1cmF0aW9uLiAqLworCWNvbnN0IGNoYXIgKiptZXJnZV9uYW1lOworCisJLyoqCisJICogQW4gYXJyYXkgb2YgdGhlIHN0cnVjdCByZWZzcGVjcyB1c2VkIGZvciB0aGUgbWVyZ2UgbGluZXMuIFRoYXQgaXMsCisJICogbWVyZ2VbaV0tPmRzdCBpcyBhIGxvY2FsIHRyYWNraW5nIHJlZiB3aGljaCBzaG91bGQgYmUgbWVyZ2VkIGludG8gdGhpcworCSAqIGJyYW5jaCBieSBkZWZhdWx0LgorCSAqLworCXN0cnVjdCByZWZzcGVjX2l0ZW0gKiptZXJnZTsKKworCS8qIFRoZSBudW1iZXIgb2YgbWVyZ2UgY29uZmlndXJhdGlvbnMgKi8KKwlpbnQgbWVyZ2VfbnI7CisKKwlpbnQgbWVyZ2VfYWxsb2M7CisKKwljb25zdCBjaGFyICpwdXNoX3RyYWNraW5nX3JlZjsKK307CisKK3N0cnVjdCBicmFuY2ggKmJyYW5jaF9nZXQoY29uc3QgY2hhciAqbmFtZSk7Citjb25zdCBjaGFyICpyZW1vdGVfZm9yX2JyYW5jaChzdHJ1Y3QgYnJhbmNoICpicmFuY2gsIGludCAqZXhwbGljaXQpOworY29uc3QgY2hhciAqcHVzaHJlbW90ZV9mb3JfYnJhbmNoKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgaW50ICpleHBsaWNpdCk7Citjb25zdCBjaGFyICpyZW1vdGVfcmVmX2Zvcl9icmFuY2goc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBpbnQgZm9yX3B1c2gpOworCisvKiByZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGJyYW5jaCBoYXMgbWVyZ2UgY29uZmlndXJhdGlvbiBnaXZlbi4gKi8KK2ludCBicmFuY2hfaGFzX21lcmdlX2NvbmZpZyhzdHJ1Y3QgYnJhbmNoICpicmFuY2gpOworCitpbnQgYnJhbmNoX21lcmdlX21hdGNoZXMoc3RydWN0IGJyYW5jaCAqLCBpbnQgbiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBSZXR1cm4gdGhlIGZ1bGx5LXF1YWxpZmllZCByZWZuYW1lIG9mIHRoZSB0cmFja2luZyBicmFuY2ggZm9yIGBicmFuY2hgLgorICogSS5lLiwgd2hhdCAiYnJhbmNoQHt1cHN0cmVhbX0iIHdvdWxkIGdpdmUgeW91LiBSZXR1cm5zIE5VTEwgaWYgbm8KKyAqIHVwc3RyZWFtIGlzIGRlZmluZWQuCisgKgorICogSWYgYGVycmAgaXMgbm90IE5VTEwgYW5kIG5vIHVwc3RyZWFtIGlzIGRlZmluZWQsIGEgbW9yZSBzcGVjaWZpYyBlcnJvcgorICogbWVzc2FnZSBpcyByZWNvcmRlZCB0aGVyZSAoaWYgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBOVUxMLCB0aGVuCisgKiBgZXJyYCBpcyBub3QgdG91Y2hlZCkuCisgKi8KK2NvbnN0IGNoYXIgKmJyYW5jaF9nZXRfdXBzdHJlYW0oc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKioKKyAqIFJldHVybiB0aGUgdHJhY2tpbmcgYnJhbmNoIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHJlZiB3ZSB3b3VsZCBwdXNoIHRvCisgKiBnaXZlbiBhIGJhcmUgYGdpdCBwdXNoYCB3aGlsZSBgYnJhbmNoYCBpcyBjaGVja2VkIG91dC4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGFuZCBgZXJyYCBjb252ZW50aW9ucyBtYXRjaCB0aG9zZSBvZiBgYnJhbmNoX2dldF91cHN0cmVhbWAuCisgKi8KK2NvbnN0IGNoYXIgKmJyYW5jaF9nZXRfcHVzaChzdHJ1Y3QgYnJhbmNoICpicmFuY2gsIHN0cnVjdCBzdHJidWYgKmVycik7CisKKy8qIEZsYWdzIHRvIG1hdGNoX3JlZnMuICovCitlbnVtIG1hdGNoX3JlZnNfZmxhZ3MgeworCU1BVENIX1JFRlNfTk9ORQkJPSAwLAorCU1BVENIX1JFRlNfQUxMIAkJPSAoMSA8PCAwKSwKKwlNQVRDSF9SRUZTX01JUlJPUgk9ICgxIDw8IDEpLAorCU1BVENIX1JFRlNfUFJVTkUJPSAoMSA8PCAyKSwKKwlNQVRDSF9SRUZTX0ZPTExPV19UQUdTCT0gKDEgPDwgMykKK307CisKKy8qIEZsYWdzIGZvciAtLWFoZWFkLWJlaGluZCBvcHRpb24uICovCitlbnVtIGFoZWFkX2JlaGluZF9mbGFncyB7CisJQUhFQURfQkVISU5EX1VOU1BFQ0lGSUVEID0gLTEsCisJQUhFQURfQkVISU5EX1FVSUNLICAgICAgID0gIDAsICAvKiBqdXN0IGVxL25lcSByZXBvcnRpbmcgKi8KKwlBSEVBRF9CRUhJTkRfRlVMTCAgICAgICAgPSAgMSwgIC8qIHRyYWRpdGlvbmFsIGEvYiByZXBvcnRpbmcgKi8KK307CisKKy8qIFJlcG9ydGluZyBvZiB0cmFja2luZyBpbmZvICovCitpbnQgc3RhdF90cmFja2luZ19pbmZvKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgaW50ICpudW1fb3VycywgaW50ICpudW1fdGhlaXJzLAorCQkgICAgICAgY29uc3QgY2hhciAqKnVwc3RyZWFtX25hbWUsIGludCBmb3JfcHVzaCwKKwkJICAgICAgIGVudW0gYWhlYWRfYmVoaW5kX2ZsYWdzIGFiZik7CitpbnQgZm9ybWF0X3RyYWNraW5nX2luZm8oc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSBlbnVtIGFoZWFkX2JlaGluZF9mbGFncyBhYmYpOworCitzdHJ1Y3QgcmVmICpnZXRfbG9jYWxfaGVhZHModm9pZCk7CisvKgorICogRmluZCByZWZzIGZyb20gYSBsaXN0IHdoaWNoIGFyZSBsaWtlbHkgdG8gYmUgcG9pbnRlZCB0byBieSB0aGUgZ2l2ZW4gSEVBRAorICogcmVmLiBJZiAnYWxsJyBpcyBmYWxzZSwgcmV0dXJucyB0aGUgbW9zdCBsaWtlbHkgcmVmOyBvdGhlcndpc2UsIHJldHVybnMgYQorICogbGlzdCBvZiBhbGwgY2FuZGlkYXRlIHJlZnMuIElmIG5vIG1hdGNoIGlzIGZvdW5kIChvciAnaGVhZCcgaXMgTlVMTCksCisgKiByZXR1cm5zIE5VTEwuIEFsbCByZXR1cm5zIGFyZSBuZXdseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBiZSBmcmVlZC4KKyAqLworc3RydWN0IHJlZiAqZ3Vlc3NfcmVtb3RlX2hlYWQoY29uc3Qgc3RydWN0IHJlZiAqaGVhZCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCByZWYgKnJlZnMsCisJCQkgICAgICBpbnQgYWxsKTsKKworLyogUmV0dXJuIHJlZnMgd2hpY2ggbm8gbG9uZ2VyIGV4aXN0IG9uIHJlbW90ZSAqLworc3RydWN0IHJlZiAqZ2V0X3N0YWxlX2hlYWRzKHN0cnVjdCByZWZzcGVjICpycywgc3RydWN0IHJlZiAqZmV0Y2hfbWFwKTsKKworLyoKKyAqIENvbXBhcmUtYW5kLXN3YXAKKyAqLworI2RlZmluZSBDQVNfT1BUX05BTUUgImZvcmNlLXdpdGgtbGVhc2UiCisKK3N0cnVjdCBwdXNoX2Nhc19vcHRpb24geworCXVuc2lnbmVkIHVzZV90cmFja2luZ19mb3JfcmVzdDoxOworCXN0cnVjdCBwdXNoX2NhcyB7CisJCXN0cnVjdCBvYmplY3RfaWQgZXhwZWN0OworCQl1bnNpZ25lZCB1c2VfdHJhY2tpbmc6MTsKKwkJY2hhciAqcmVmbmFtZTsKKwl9ICplbnRyeTsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworfTsKKworaW50IHBhcnNlb3B0X3B1c2hfY2FzX29wdGlvbihjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KTsKKworaW50IGlzX2VtcHR5X2Nhcyhjb25zdCBzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uICopOwordm9pZCBhcHBseV9wdXNoX2NhcyhzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uICosIHN0cnVjdCByZW1vdGUgKiwgc3RydWN0IHJlZiAqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZXBsYWNlLW9iamVjdC5jIGIvcmVwbGFjZS1vYmplY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmQ5YWJhCi0tLSAvZGV2L251bGwKKysrIGIvcmVwbGFjZS1vYmplY3QuYwpAQCAtMCwwICsxLDgzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvaWRtYXAuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJyZXBsYWNlLW9iamVjdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisKK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcmVwbGFjZV9yZWYoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJLyogR2V0IHNoYTEgZnJvbSByZWZuYW1lICovCisJY29uc3QgY2hhciAqc2xhc2ggPSBzdHJyY2hyKHJlZm5hbWUsICcvJyk7CisJY29uc3QgY2hhciAqaGFzaCA9IHNsYXNoID8gc2xhc2ggKyAxIDogcmVmbmFtZTsKKwlzdHJ1Y3QgcmVwbGFjZV9vYmplY3QgKnJlcGxfb2JqID0geG1hbGxvYyhzaXplb2YoKnJlcGxfb2JqKSk7CisKKwlpZiAoZ2V0X29pZF9oZXgoaGFzaCwgJnJlcGxfb2JqLT5vcmlnaW5hbC5vaWQpKSB7CisJCWZyZWUocmVwbF9vYmopOworCQl3YXJuaW5nKF8oImJhZCByZXBsYWNlIHJlZiBuYW1lOiAlcyIpLCByZWZuYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQ29weSBzaGExIGZyb20gdGhlIHJlYWQgcmVmICovCisJb2lkY3B5KCZyZXBsX29iai0+cmVwbGFjZW1lbnQsIG9pZCk7CisKKwkvKiBSZWdpc3RlciBuZXcgb2JqZWN0ICovCisJaWYgKG9pZG1hcF9wdXQoci0+b2JqZWN0cy0+cmVwbGFjZV9tYXAsIHJlcGxfb2JqKSkKKwkJZGllKF8oImR1cGxpY2F0ZSByZXBsYWNlIHJlZjogJXMiKSwgcmVmbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwcmVwYXJlX3JlcGxhY2Vfb2JqZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCWlmIChyLT5vYmplY3RzLT5yZXBsYWNlX21hcF9pbml0aWFsaXplZCkKKwkJcmV0dXJuOworCisJcHRocmVhZF9tdXRleF9sb2NrKCZyLT5vYmplY3RzLT5yZXBsYWNlX211dGV4KTsKKwlpZiAoci0+b2JqZWN0cy0+cmVwbGFjZV9tYXBfaW5pdGlhbGl6ZWQpIHsKKwkJcHRocmVhZF9tdXRleF91bmxvY2soJnItPm9iamVjdHMtPnJlcGxhY2VfbXV0ZXgpOworCQlyZXR1cm47CisJfQorCisJci0+b2JqZWN0cy0+cmVwbGFjZV9tYXAgPQorCQl4bWFsbG9jKHNpemVvZigqci0+b2JqZWN0cy0+cmVwbGFjZV9tYXApKTsKKwlvaWRtYXBfaW5pdChyLT5vYmplY3RzLT5yZXBsYWNlX21hcCwgMCk7CisKKwlmb3JfZWFjaF9yZXBsYWNlX3JlZihyLCByZWdpc3Rlcl9yZXBsYWNlX3JlZiwgTlVMTCk7CisJci0+b2JqZWN0cy0+cmVwbGFjZV9tYXBfaW5pdGlhbGl6ZWQgPSAxOworCisJcHRocmVhZF9tdXRleF91bmxvY2soJnItPm9iamVjdHMtPnJlcGxhY2VfbXV0ZXgpOworfQorCisvKiBXZSBhbGxvdyAicmVjdXJzaXZlIiByZXBsYWNlbWVudC4gT25seSB3aXRoaW4gcmVhc29uLCB0aG91Z2ggKi8KKyNkZWZpbmUgTUFYUkVQTEFDRURFUFRIIDUKKworLyoKKyAqIElmIGEgcmVwbGFjZW1lbnQgZm9yIG9iamVjdCBvaWQgaGFzIGJlZW4gc2V0IHVwLCByZXR1cm4gdGhlCisgKiByZXBsYWNlbWVudCBvYmplY3QncyBuYW1lIChyZXBsYWNlZCByZWN1cnNpdmVseSwgaWYgbmVjZXNzYXJ5KS4KKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgZWl0aGVyIG9pZCBvciBhIHBvaW50ZXIgdG8gYQorICogcGVybWFuZW50bHktYWxsb2NhdGVkIHZhbHVlLiAgVGhpcyBmdW5jdGlvbiBhbHdheXMgcmVzcGVjdHMgcmVwbGFjZQorICogcmVmZXJlbmNlcywgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgcmVhZF9yZXBsYWNlX3JlZnMuCisgKi8KK2NvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmRvX2xvb2t1cF9yZXBsYWNlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaW50IGRlcHRoID0gTUFYUkVQTEFDRURFUFRIOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmN1ciA9IG9pZDsKKworCXByZXBhcmVfcmVwbGFjZV9vYmplY3Qocik7CisKKwkvKiBUcnkgdG8gcmVjdXJzaXZlbHkgcmVwbGFjZSB0aGUgb2JqZWN0ICovCisJd2hpbGUgKGRlcHRoLS0gPiAwKSB7CisJCXN0cnVjdCByZXBsYWNlX29iamVjdCAqcmVwbF9vYmogPQorCQkJb2lkbWFwX2dldChyLT5vYmplY3RzLT5yZXBsYWNlX21hcCwgY3VyKTsKKwkJaWYgKCFyZXBsX29iaikKKwkJCXJldHVybiBjdXI7CisJCWN1ciA9ICZyZXBsX29iai0+cmVwbGFjZW1lbnQ7CisJfQorCWRpZShfKCJyZXBsYWNlIGRlcHRoIHRvbyBoaWdoIGZvciBvYmplY3QgJXMiKSwgb2lkX3RvX2hleChvaWQpKTsKK30KZGlmZiAtLWdpdCBhL3JlcGxhY2Utb2JqZWN0LmggYi9yZXBsYWNlLW9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYmMzMmUKLS0tIC9kZXYvbnVsbAorKysgYi9yZXBsYWNlLW9iamVjdC5oCkBAIC0wLDAgKzEsNDMgQEAKKyNpZm5kZWYgUkVQTEFDRV9PQkpFQ1RfSAorI2RlZmluZSBSRVBMQUNFX09CSkVDVF9ICisKKyNpbmNsdWRlICJvaWRtYXAuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisKK3N0cnVjdCByZXBsYWNlX29iamVjdCB7CisJc3RydWN0IG9pZG1hcF9lbnRyeSBvcmlnaW5hbDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHJlcGxhY2VtZW50OworfTsKKwordm9pZCBwcmVwYXJlX3JlcGxhY2Vfb2JqZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKKworLyoKKyAqIFRoaXMgaW50ZXJuYWwgZnVuY3Rpb24gaXMgb25seSBkZWNsYXJlZCBoZXJlIGZvciB0aGUgYmVuZWZpdCBvZgorICogbG9va3VwX3JlcGxhY2Vfb2JqZWN0KCkuICBQbGVhc2UgZG8gbm90IGNhbGwgaXQgZGlyZWN0bHkuCisgKi8KK2NvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmRvX2xvb2t1cF9yZXBsYWNlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCisvKgorICogSWYgb2JqZWN0IHNoYTEgc2hvdWxkIGJlIHJlcGxhY2VkLCByZXR1cm4gdGhlIHJlcGxhY2VtZW50IG9iamVjdCdzCisgKiBuYW1lIChyZXBsYWNlZCByZWN1cnNpdmVseSwgaWYgbmVjZXNzYXJ5KS4gIFRoZSByZXR1cm4gdmFsdWUgaXMKKyAqIGVpdGhlciBzaGExIG9yIGEgcG9pbnRlciB0byBhIHBlcm1hbmVudGx5LWFsbG9jYXRlZCB2YWx1ZS4gIFdoZW4KKyAqIG9iamVjdCByZXBsYWNlbWVudCBpcyBzdXBwcmVzc2VkLCBhbHdheXMgcmV0dXJuIHNoYTEuCisgKgorICogTm90ZTogc29tZSB0aHJlYWQgZGVidWdnZXJzIG1pZ2h0IHBvaW50IGEgZGF0YSByYWNlIG9uIHRoZQorICogcmVwbGFjZV9tYXBfaW5pdGlhbGl6ZWQgcmVhZGluZyBpbiB0aGlzIGZ1bmN0aW9uLiBIb3dldmVyLCB3ZSBrbm93IHRoZXJlJ3Mgbm8KKyAqIHByb2JsZW0gaW4gdGhlIHZhbHVlIGJlaW5nIHVwZGF0ZWQgYnkgb25lIHRocmVhZCByaWdodCBhZnRlciBhbm90aGVyIG9uZSByZWFkCisgKiBpdCBoZXJlIChhbmQgaXQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gb25seSBvbmNlLCBhbnl3YXkpLgorICovCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmxvb2t1cF9yZXBsYWNlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWlmICghcmVhZF9yZXBsYWNlX3JlZnMgfHwKKwkgICAgKHItPm9iamVjdHMtPnJlcGxhY2VfbWFwX2luaXRpYWxpemVkICYmCisJICAgICByLT5vYmplY3RzLT5yZXBsYWNlX21hcC0+bWFwLnRhYmxlc2l6ZSA9PSAwKSkKKwkJcmV0dXJuIG9pZDsKKwlyZXR1cm4gZG9fbG9va3VwX3JlcGxhY2Vfb2JqZWN0KHIsIG9pZCk7Cit9CisKKyNlbmRpZiAvKiBSRVBMQUNFX09CSkVDVF9IICovCmRpZmYgLS1naXQgYS9yZXBvLXNldHRpbmdzLmMgYi9yZXBvLXNldHRpbmdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM2ODE3ZAotLS0gL2Rldi9udWxsCisrKyBiL3JlcG8tc2V0dGluZ3MuYwpAQCAtMCwwICsxLDY5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisKKyNkZWZpbmUgVVBEQVRFX0RFRkFVTFRfQk9PTChzLHYpIGRvIHsgaWYgKHMgPT0gLTEpIHsgcyA9IHY7IH0gfSB3aGlsZSgwKQorCit2b2lkIHByZXBhcmVfcmVwb19zZXR0aW5ncyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlpbnQgdmFsdWU7CisJY2hhciAqc3RydmFsOworCisJaWYgKHItPnNldHRpbmdzLmluaXRpYWxpemVkKQorCQlyZXR1cm47CisKKwkvKiBEZWZhdWx0cyAqLworCW1lbXNldCgmci0+c2V0dGluZ3MsIC0xLCBzaXplb2Yoci0+c2V0dGluZ3MpKTsKKworCWlmICghcmVwb19jb25maWdfZ2V0X2Jvb2wociwgImNvcmUuY29tbWl0Z3JhcGgiLCAmdmFsdWUpKQorCQlyLT5zZXR0aW5ncy5jb3JlX2NvbW1pdF9ncmFwaCA9IHZhbHVlOworCWlmICghcmVwb19jb25maWdfZ2V0X2Jvb2wociwgImdjLndyaXRlY29tbWl0Z3JhcGgiLCAmdmFsdWUpKQorCQlyLT5zZXR0aW5ncy5nY193cml0ZV9jb21taXRfZ3JhcGggPSB2YWx1ZTsKKwlVUERBVEVfREVGQVVMVF9CT09MKHItPnNldHRpbmdzLmNvcmVfY29tbWl0X2dyYXBoLCAxKTsKKwlVUERBVEVfREVGQVVMVF9CT09MKHItPnNldHRpbmdzLmdjX3dyaXRlX2NvbW1pdF9ncmFwaCwgMSk7CisKKwlpZiAoIXJlcG9fY29uZmlnX2dldF9pbnQociwgImluZGV4LnZlcnNpb24iLCAmdmFsdWUpKQorCQlyLT5zZXR0aW5ncy5pbmRleF92ZXJzaW9uID0gdmFsdWU7CisJaWYgKCFyZXBvX2NvbmZpZ19nZXRfbWF5YmVfYm9vbChyLCAiY29yZS51bnRyYWNrZWRjYWNoZSIsICZ2YWx1ZSkpIHsKKwkJaWYgKHZhbHVlID09IDApCisJCQlyLT5zZXR0aW5ncy5jb3JlX3VudHJhY2tlZF9jYWNoZSA9IFVOVFJBQ0tFRF9DQUNIRV9SRU1PVkU7CisJCWVsc2UKKwkJCXItPnNldHRpbmdzLmNvcmVfdW50cmFja2VkX2NhY2hlID0gVU5UUkFDS0VEX0NBQ0hFX1dSSVRFOworCX0gZWxzZSBpZiAoIXJlcG9fY29uZmlnX2dldF9zdHJpbmcociwgImNvcmUudW50cmFja2VkY2FjaGUiLCAmc3RydmFsKSkgeworCQlpZiAoIXN0cmNhc2VjbXAoc3RydmFsLCAia2VlcCIpKQorCQkJci0+c2V0dGluZ3MuY29yZV91bnRyYWNrZWRfY2FjaGUgPSBVTlRSQUNLRURfQ0FDSEVfS0VFUDsKKworCQlmcmVlKHN0cnZhbCk7CisJfQorCisJaWYgKCFyZXBvX2NvbmZpZ19nZXRfc3RyaW5nKHIsICJmZXRjaC5uZWdvdGlhdGlvbmFsZ29yaXRobSIsICZzdHJ2YWwpKSB7CisJCWlmICghc3RyY2FzZWNtcChzdHJ2YWwsICJza2lwcGluZyIpKQorCQkJci0+c2V0dGluZ3MuZmV0Y2hfbmVnb3RpYXRpb25fYWxnb3JpdGhtID0gRkVUQ0hfTkVHT1RJQVRJT05fU0tJUFBJTkc7CisJCWVsc2UKKwkJCXItPnNldHRpbmdzLmZldGNoX25lZ290aWF0aW9uX2FsZ29yaXRobSA9IEZFVENIX05FR09USUFUSU9OX0RFRkFVTFQ7CisJfQorCisJaWYgKCFyZXBvX2NvbmZpZ19nZXRfYm9vbChyLCAicGFjay51c2VzcGFyc2UiLCAmdmFsdWUpKQorCQlyLT5zZXR0aW5ncy5wYWNrX3VzZV9zcGFyc2UgPSB2YWx1ZTsKKwlVUERBVEVfREVGQVVMVF9CT09MKHItPnNldHRpbmdzLnBhY2tfdXNlX3NwYXJzZSwgMSk7CisKKwlpZiAoIXJlcG9fY29uZmlnX2dldF9ib29sKHIsICJmZWF0dXJlLm1hbnlmaWxlcyIsICZ2YWx1ZSkgJiYgdmFsdWUpIHsKKwkJVVBEQVRFX0RFRkFVTFRfQk9PTChyLT5zZXR0aW5ncy5pbmRleF92ZXJzaW9uLCA0KTsKKwkJVVBEQVRFX0RFRkFVTFRfQk9PTChyLT5zZXR0aW5ncy5jb3JlX3VudHJhY2tlZF9jYWNoZSwgVU5UUkFDS0VEX0NBQ0hFX1dSSVRFKTsKKwl9CisJaWYgKCFyZXBvX2NvbmZpZ19nZXRfYm9vbChyLCAiZmV0Y2gud3JpdGVjb21taXRncmFwaCIsICZ2YWx1ZSkpCisJCXItPnNldHRpbmdzLmZldGNoX3dyaXRlX2NvbW1pdF9ncmFwaCA9IHZhbHVlOworCWlmICghcmVwb19jb25maWdfZ2V0X2Jvb2wociwgImZlYXR1cmUuZXhwZXJpbWVudGFsIiwgJnZhbHVlKSAmJiB2YWx1ZSkgeworCQlVUERBVEVfREVGQVVMVF9CT09MKHItPnNldHRpbmdzLmZldGNoX25lZ290aWF0aW9uX2FsZ29yaXRobSwgRkVUQ0hfTkVHT1RJQVRJT05fU0tJUFBJTkcpOworCQlVUERBVEVfREVGQVVMVF9CT09MKHItPnNldHRpbmdzLmZldGNoX3dyaXRlX2NvbW1pdF9ncmFwaCwgMSk7CisJfQorCVVQREFURV9ERUZBVUxUX0JPT0woci0+c2V0dGluZ3MuZmV0Y2hfd3JpdGVfY29tbWl0X2dyYXBoLCAwKTsKKworCS8qIEhhY2sgZm9yIHRlc3QgcHJvZ3JhbXMgbGlrZSB0ZXN0LWR1bXAtdW50cmFja2VkLWNhY2hlICovCisJaWYgKGlnbm9yZV91bnRyYWNrZWRfY2FjaGVfY29uZmlnKQorCQlyLT5zZXR0aW5ncy5jb3JlX3VudHJhY2tlZF9jYWNoZSA9IFVOVFJBQ0tFRF9DQUNIRV9LRUVQOworCWVsc2UKKwkJVVBEQVRFX0RFRkFVTFRfQk9PTChyLT5zZXR0aW5ncy5jb3JlX3VudHJhY2tlZF9jYWNoZSwgVU5UUkFDS0VEX0NBQ0hFX0tFRVApOworCisJVVBEQVRFX0RFRkFVTFRfQk9PTChyLT5zZXR0aW5ncy5mZXRjaF9uZWdvdGlhdGlvbl9hbGdvcml0aG0sIEZFVENIX05FR09USUFUSU9OX0RFRkFVTFQpOworfQpkaWZmIC0tZ2l0IGEvcmVwb3NpdG9yeS5jIGIvcmVwb3NpdG9yeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmN2Y2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9yZXBvc2l0b3J5LmMKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBub3QgcmVhbGx5IF91c2luZ18gdGhlIGNvbXBhdCBtYWNyb3MsIGp1c3QgbWFrZSBzdXJlIHRoZV9pbmRleAorICogZGVjbGFyYXRpb24gbWF0Y2hlcyB0aGUgZGVmaW5pdGlvbiBpbiB0aGlzIGZpbGUuCisgKi8KKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorCisvKiBUaGUgbWFpbiByZXBvc2l0b3J5ICovCitzdGF0aWMgc3RydWN0IHJlcG9zaXRvcnkgdGhlX3JlcG87CitzdHJ1Y3QgcmVwb3NpdG9yeSAqdGhlX3JlcG9zaXRvcnk7CitzdHJ1Y3QgaW5kZXhfc3RhdGUgdGhlX2luZGV4OworCit2b2lkIGluaXRpYWxpemVfdGhlX3JlcG9zaXRvcnkodm9pZCkKK3sKKwl0aGVfcmVwb3NpdG9yeSA9ICZ0aGVfcmVwbzsKKworCXRoZV9yZXBvLmluZGV4ID0gJnRoZV9pbmRleDsKKwl0aGVfcmVwby5vYmplY3RzID0gcmF3X29iamVjdF9zdG9yZV9uZXcoKTsKKwl0aGVfcmVwby5wYXJzZWRfb2JqZWN0cyA9IHBhcnNlZF9vYmplY3RfcG9vbF9uZXcoKTsKKworCXJlcG9fc2V0X2hhc2hfYWxnbygmdGhlX3JlcG8sIEdJVF9IQVNIX1NIQTEpOworfQorCitzdGF0aWMgdm9pZCBleHBhbmRfYmFzZV9kaXIoY2hhciAqKm91dCwgY29uc3QgY2hhciAqaW4sCisJCQkgICAgY29uc3QgY2hhciAqYmFzZV9kaXIsIGNvbnN0IGNoYXIgKmRlZl9pbikKK3sKKwlmcmVlKCpvdXQpOworCWlmIChpbikKKwkJKm91dCA9IHhzdHJkdXAoaW4pOworCWVsc2UKKwkJKm91dCA9IHhzdHJmbXQoIiVzLyVzIiwgYmFzZV9kaXIsIGRlZl9pbik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9fc2V0X2NvbW1vbmRpcihzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICAgICBjb25zdCBjaGFyICpjb21tb25kaXIpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJZnJlZShyZXBvLT5jb21tb25kaXIpOworCisJaWYgKGNvbW1vbmRpcikgeworCQlyZXBvLT5kaWZmZXJlbnRfY29tbW9uZGlyID0gMTsKKwkJcmVwby0+Y29tbW9uZGlyID0geHN0cmR1cChjb21tb25kaXIpOworCQlyZXR1cm47CisJfQorCisJcmVwby0+ZGlmZmVyZW50X2NvbW1vbmRpciA9IGdldF9jb21tb25fZGlyX25vZW52KCZzYiwgcmVwby0+Z2l0ZGlyKTsKKwlyZXBvLT5jb21tb25kaXIgPSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7Cit9CisKK3ZvaWQgcmVwb19zZXRfZ2l0ZGlyKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkgICAgIGNvbnN0IGNoYXIgKnJvb3QsCisJCSAgICAgY29uc3Qgc3RydWN0IHNldF9naXRkaXJfYXJncyAqbykKK3sKKwljb25zdCBjaGFyICpnaXRmaWxlID0gcmVhZF9naXRmaWxlKHJvb3QpOworCS8qCisJICogcmVwby0+Z2l0ZGlyIGlzIHNhdmVkIGJlY2F1c2UgdGhlIGNhbGxlciBjb3VsZCBwYXNzICJyb290IgorCSAqIHRoYXQgYWxzbyBwb2ludHMgdG8gcmVwby0+Z2l0ZGlyLiBXZSB3YW50IHRvIGtlZXAgaXQgYWxpdmUKKwkgKiB1bnRpbCBhZnRlciB4c3RyZHVwKHJvb3QpLiBUaGVuIHdlIGNhbiBmcmVlIGl0LgorCSAqLworCWNoYXIgKm9sZF9naXRkaXIgPSByZXBvLT5naXRkaXI7CisKKwlyZXBvLT5naXRkaXIgPSB4c3RyZHVwKGdpdGZpbGUgPyBnaXRmaWxlIDogcm9vdCk7CisJZnJlZShvbGRfZ2l0ZGlyKTsKKworCXJlcG9fc2V0X2NvbW1vbmRpcihyZXBvLCBvLT5jb21tb25kaXIpOworCisJaWYgKCFyZXBvLT5vYmplY3RzLT5vZGIpIHsKKwkJcmVwby0+b2JqZWN0cy0+b2RiID0geGNhbGxvYygxLCBzaXplb2YoKnJlcG8tPm9iamVjdHMtPm9kYikpOworCQlyZXBvLT5vYmplY3RzLT5vZGJfdGFpbCA9ICZyZXBvLT5vYmplY3RzLT5vZGItPm5leHQ7CisJfQorCWV4cGFuZF9iYXNlX2RpcigmcmVwby0+b2JqZWN0cy0+b2RiLT5wYXRoLCBvLT5vYmplY3RfZGlyLAorCQkJcmVwby0+Y29tbW9uZGlyLCAib2JqZWN0cyIpOworCisJZnJlZShyZXBvLT5vYmplY3RzLT5hbHRlcm5hdGVfZGIpOworCXJlcG8tPm9iamVjdHMtPmFsdGVybmF0ZV9kYiA9IHhzdHJkdXBfb3JfbnVsbChvLT5hbHRlcm5hdGVfZGIpOworCWV4cGFuZF9iYXNlX2RpcigmcmVwby0+Z3JhZnRfZmlsZSwgby0+Z3JhZnRfZmlsZSwKKwkJCXJlcG8tPmNvbW1vbmRpciwgImluZm8vZ3JhZnRzIik7CisJZXhwYW5kX2Jhc2VfZGlyKCZyZXBvLT5pbmRleF9maWxlLCBvLT5pbmRleF9maWxlLAorCQkJcmVwby0+Z2l0ZGlyLCAiaW5kZXgiKTsKK30KKwordm9pZCByZXBvX3NldF9oYXNoX2FsZ28oc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGludCBoYXNoX2FsZ28pCit7CisJcmVwby0+aGFzaF9hbGdvID0gJmhhc2hfYWxnb3NbaGFzaF9hbGdvXTsKKyNpZm5kZWYgRU5BQkxFX1NIQTI1NgorCWlmIChoYXNoX2FsZ28gIT0gR0lUX0hBU0hfU0hBMSkKKwkJZGllKF8oIlRoZSBoYXNoIGFsZ29yaXRobSAlcyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVpbGQuIiksIHJlcG8tPmhhc2hfYWxnby0+bmFtZSk7CisjZW5kaWYKK30KKworLyoKKyAqIEF0dGVtcHQgdG8gcmVzb2x2ZSBhbmQgc2V0IHRoZSBwcm92aWRlZCAnZ2l0ZGlyJyBmb3IgcmVwb3NpdG9yeSAncmVwbycuCisgKiBSZXR1cm4gMCB1cG9uIHN1Y2Nlc3MgYW5kIGEgbm9uLXplcm8gdmFsdWUgdXBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHJlcG9faW5pdF9naXRkaXIoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmdpdGRpcikKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgZXJyb3IgPSAwOworCWNoYXIgKmFic3BhdGggPSBOVUxMOworCWNvbnN0IGNoYXIgKnJlc29sdmVkX2dpdGRpcjsKKwlzdHJ1Y3Qgc2V0X2dpdGRpcl9hcmdzIGFyZ3MgPSB7IE5VTEwgfTsKKworCWFic3BhdGggPSByZWFsX3BhdGhkdXAoZ2l0ZGlyLCAwKTsKKwlpZiAoIWFic3BhdGgpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCS8qICdnaXRkaXInIG11c3QgcmVmZXJlbmNlIHRoZSBnaXRkaXIgZGlyZWN0bHkgKi8KKwlyZXNvbHZlZF9naXRkaXIgPSByZXNvbHZlX2dpdGRpcl9nZW50bHkoYWJzcGF0aCwgJmVycm9yKTsKKwlpZiAoIXJlc29sdmVkX2dpdGRpcikgeworCQlyZXQgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJcmVwb19zZXRfZ2l0ZGlyKHJlcG8sIHJlc29sdmVkX2dpdGRpciwgJmFyZ3MpOworCitvdXQ6CisJZnJlZShhYnNwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJlcG9fc2V0X3dvcmt0cmVlKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwYXRoKQoreworCXJlcG8tPndvcmt0cmVlID0gcmVhbF9wYXRoZHVwKHBhdGgsIDEpOworCisJdHJhY2UyX2RlZl9yZXBvKHJlcG8pOworfQorCitzdGF0aWMgaW50IHJlYWRfYW5kX3ZlcmlmeV9yZXBvc2l0b3J5X2Zvcm1hdChzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgKmZvcm1hdCwKKwkJCQkJICAgICBjb25zdCBjaGFyICpjb21tb25kaXIpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJnNiLCAiJXMvY29uZmlnIiwgY29tbW9uZGlyKTsKKwlyZWFkX3JlcG9zaXRvcnlfZm9ybWF0KGZvcm1hdCwgc2IuYnVmKTsKKwlzdHJidWZfcmVzZXQoJnNiKTsKKworCWlmICh2ZXJpZnlfcmVwb3NpdG9yeV9mb3JtYXQoZm9ybWF0LCAmc2IpIDwgMCkgeworCQl3YXJuaW5nKCIlcyIsIHNiLmJ1Zik7CisJCXJldCA9IC0xOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgJ3JlcG8nIGJhc2VkIG9uIHRoZSBwcm92aWRlZCAnZ2l0ZGlyJy4KKyAqIFJldHVybiAwIHVwb24gc3VjY2VzcyBhbmQgYSBub24temVybyB2YWx1ZSB1cG9uIGZhaWx1cmUuCisgKi8KK2ludCByZXBvX2luaXQoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJICAgICAgY29uc3QgY2hhciAqZ2l0ZGlyLAorCSAgICAgIGNvbnN0IGNoYXIgKndvcmt0cmVlKQoreworCXN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCBmb3JtYXQgPSBSRVBPU0lUT1JZX0ZPUk1BVF9JTklUOworCW1lbXNldChyZXBvLCAwLCBzaXplb2YoKnJlcG8pKTsKKworCXJlcG8tPm9iamVjdHMgPSByYXdfb2JqZWN0X3N0b3JlX25ldygpOworCXJlcG8tPnBhcnNlZF9vYmplY3RzID0gcGFyc2VkX29iamVjdF9wb29sX25ldygpOworCisJaWYgKHJlcG9faW5pdF9naXRkaXIocmVwbywgZ2l0ZGlyKSkKKwkJZ290byBlcnJvcjsKKworCWlmIChyZWFkX2FuZF92ZXJpZnlfcmVwb3NpdG9yeV9mb3JtYXQoJmZvcm1hdCwgcmVwby0+Y29tbW9uZGlyKSkKKwkJZ290byBlcnJvcjsKKworCXJlcG9fc2V0X2hhc2hfYWxnbyhyZXBvLCBmb3JtYXQuaGFzaF9hbGdvKTsKKworCWlmICh3b3JrdHJlZSkKKwkJcmVwb19zZXRfd29ya3RyZWUocmVwbywgd29ya3RyZWUpOworCisJY2xlYXJfcmVwb3NpdG9yeV9mb3JtYXQoJmZvcm1hdCk7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXJlcG9fY2xlYXIocmVwbyk7CisJcmV0dXJuIC0xOworfQorCitpbnQgcmVwb19zdWJtb2R1bGVfaW5pdChzdHJ1Y3QgcmVwb3NpdG9yeSAqc3VicmVwbywKKwkJCXN0cnVjdCByZXBvc2l0b3J5ICpzdXBlcnByb2plY3QsCisJCQljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWIpCit7CisJc3RydWN0IHN0cmJ1ZiBnaXRkaXIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHdvcmt0cmVlID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXN1YikgeworCQlyZXQgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJc3RyYnVmX3JlcG9fd29ya3RyZWVfcGF0aCgmZ2l0ZGlyLCBzdXBlcnByb2plY3QsICIlcy8uZ2l0Iiwgc3ViLT5wYXRoKTsKKwlzdHJidWZfcmVwb193b3JrdHJlZV9wYXRoKCZ3b3JrdHJlZSwgc3VwZXJwcm9qZWN0LCAiJXMiLCBzdWItPnBhdGgpOworCisJaWYgKHJlcG9faW5pdChzdWJyZXBvLCBnaXRkaXIuYnVmLCB3b3JrdHJlZS5idWYpKSB7CisJCS8qCisJCSAqIElmIGluaXRpYWxpemF0aW9uIGZhaWxzIHRoZW4gaXQgbWF5IGJlIGR1ZSB0byB0aGUgc3VibW9kdWxlCisJCSAqIG5vdCBiZWluZyBwb3B1bGF0ZWQgaW4gdGhlIHN1cGVycHJvamVjdCdzIHdvcmt0cmVlLiAgSW5zdGVhZAorCQkgKiB3ZSBjYW4gdHJ5IHRvIGluaXRpYWxpemUgdGhlIHN1Ym1vZHVsZSBieSBmaW5kaW5nIGl0J3MgZ2l0ZGlyCisJCSAqIGluIHRoZSBzdXBlcnByb2plY3QncyAnbW9kdWxlcycgZGlyZWN0b3J5LiAgSW4gdGhpcyBjYXNlIHRoZQorCQkgKiBzdWJtb2R1bGUgd291bGQgbm90IGhhdmUgYSB3b3JrdHJlZS4KKwkJICovCisJCXN0cmJ1Zl9yZXNldCgmZ2l0ZGlyKTsKKwkJc3RyYnVmX3JlcG9fZ2l0X3BhdGgoJmdpdGRpciwgc3VwZXJwcm9qZWN0LAorCQkJCSAgICAgIm1vZHVsZXMvJXMiLCBzdWItPm5hbWUpOworCisJCWlmIChyZXBvX2luaXQoc3VicmVwbywgZ2l0ZGlyLmJ1ZiwgTlVMTCkpIHsKKwkJCXJldCA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlzdWJyZXBvLT5zdWJtb2R1bGVfcHJlZml4ID0geHN0cmZtdCgiJXMlcy8iLAorCQkJCQkgICAgc3VwZXJwcm9qZWN0LT5zdWJtb2R1bGVfcHJlZml4ID8KKwkJCQkJICAgIHN1cGVycHJvamVjdC0+c3VibW9kdWxlX3ByZWZpeCA6CisJCQkJCSAgICAiIiwgc3ViLT5wYXRoKTsKKworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZnaXRkaXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZ3b3JrdHJlZSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZXBvX2NsZWFyKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvKQoreworCUZSRUVfQU5EX05VTEwocmVwby0+Z2l0ZGlyKTsKKwlGUkVFX0FORF9OVUxMKHJlcG8tPmNvbW1vbmRpcik7CisJRlJFRV9BTkRfTlVMTChyZXBvLT5ncmFmdF9maWxlKTsKKwlGUkVFX0FORF9OVUxMKHJlcG8tPmluZGV4X2ZpbGUpOworCUZSRUVfQU5EX05VTEwocmVwby0+d29ya3RyZWUpOworCUZSRUVfQU5EX05VTEwocmVwby0+c3VibW9kdWxlX3ByZWZpeCk7CisKKwlyYXdfb2JqZWN0X3N0b3JlX2NsZWFyKHJlcG8tPm9iamVjdHMpOworCUZSRUVfQU5EX05VTEwocmVwby0+b2JqZWN0cyk7CisKKwlwYXJzZWRfb2JqZWN0X3Bvb2xfY2xlYXIocmVwby0+cGFyc2VkX29iamVjdHMpOworCUZSRUVfQU5EX05VTEwocmVwby0+cGFyc2VkX29iamVjdHMpOworCisJaWYgKHJlcG8tPmNvbmZpZykgeworCQlnaXRfY29uZmlnc2V0X2NsZWFyKHJlcG8tPmNvbmZpZyk7CisJCUZSRUVfQU5EX05VTEwocmVwby0+Y29uZmlnKTsKKwl9CisKKwlpZiAocmVwby0+c3VibW9kdWxlX2NhY2hlKSB7CisJCXN1Ym1vZHVsZV9jYWNoZV9mcmVlKHJlcG8tPnN1Ym1vZHVsZV9jYWNoZSk7CisJCXJlcG8tPnN1Ym1vZHVsZV9jYWNoZSA9IE5VTEw7CisJfQorCisJaWYgKHJlcG8tPmluZGV4KSB7CisJCWRpc2NhcmRfaW5kZXgocmVwby0+aW5kZXgpOworCQlpZiAocmVwby0+aW5kZXggIT0gJnRoZV9pbmRleCkKKwkJCUZSRUVfQU5EX05VTEwocmVwby0+aW5kZXgpOworCX0KK30KKworaW50IHJlcG9fcmVhZF9pbmRleChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbykKK3sKKwlpZiAoIXJlcG8tPmluZGV4KQorCQlyZXBvLT5pbmRleCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXBvLT5pbmRleCkpOworCisJcmV0dXJuIHJlYWRfaW5kZXhfZnJvbShyZXBvLT5pbmRleCwgcmVwby0+aW5kZXhfZmlsZSwgcmVwby0+Z2l0ZGlyKTsKK30KKworaW50IHJlcG9faG9sZF9sb2NrZWRfaW5kZXgoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICBzdHJ1Y3QgbG9ja19maWxlICpsZiwKKwkJCSAgIGludCBmbGFncykKK3sKKwlpZiAoIXJlcG8tPmluZGV4X2ZpbGUpCisJCUJVRygidGhlIHJlcG8gaGFzbid0IGJlZW4gc2V0dXAiKTsKKwlyZXR1cm4gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShsZiwgcmVwby0+aW5kZXhfZmlsZSwgZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvcmVwb3NpdG9yeS5oIGIvcmVwb3NpdG9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MzRmYmIKLS0tIC9kZXYvbnVsbAorKysgYi9yZXBvc2l0b3J5LmgKQEAgLTAsMCArMSwxOTkgQEAKKyNpZm5kZWYgUkVQT1NJVE9SWV9ICisjZGVmaW5lIFJFUE9TSVRPUllfSAorCisjaW5jbHVkZSAicGF0aC5oIgorCitzdHJ1Y3QgY29uZmlnX3NldDsKK3N0cnVjdCBnaXRfaGFzaF9hbGdvOworc3RydWN0IGluZGV4X3N0YXRlOworc3RydWN0IGxvY2tfZmlsZTsKK3N0cnVjdCBwYXRoc3BlYzsKK3N0cnVjdCByYXdfb2JqZWN0X3N0b3JlOworc3RydWN0IHN1Ym1vZHVsZV9jYWNoZTsKKworZW51bSB1bnRyYWNrZWRfY2FjaGVfc2V0dGluZyB7CisJVU5UUkFDS0VEX0NBQ0hFX1VOU0VUID0gLTEsCisJVU5UUkFDS0VEX0NBQ0hFX1JFTU9WRSA9IDAsCisJVU5UUkFDS0VEX0NBQ0hFX0tFRVAgPSAxLAorCVVOVFJBQ0tFRF9DQUNIRV9XUklURSA9IDIKK307CisKK2VudW0gZmV0Y2hfbmVnb3RpYXRpb25fc2V0dGluZyB7CisJRkVUQ0hfTkVHT1RJQVRJT05fVU5TRVQgPSAtMSwKKwlGRVRDSF9ORUdPVElBVElPTl9OT05FID0gMCwKKwlGRVRDSF9ORUdPVElBVElPTl9ERUZBVUxUID0gMSwKKwlGRVRDSF9ORUdPVElBVElPTl9TS0lQUElORyA9IDIsCit9OworCitzdHJ1Y3QgcmVwb19zZXR0aW5ncyB7CisJaW50IGluaXRpYWxpemVkOworCisJaW50IGNvcmVfY29tbWl0X2dyYXBoOworCWludCBnY193cml0ZV9jb21taXRfZ3JhcGg7CisJaW50IGZldGNoX3dyaXRlX2NvbW1pdF9ncmFwaDsKKworCWludCBpbmRleF92ZXJzaW9uOworCWVudW0gdW50cmFja2VkX2NhY2hlX3NldHRpbmcgY29yZV91bnRyYWNrZWRfY2FjaGU7CisKKwlpbnQgcGFja191c2Vfc3BhcnNlOworCWVudW0gZmV0Y2hfbmVnb3RpYXRpb25fc2V0dGluZyBmZXRjaF9uZWdvdGlhdGlvbl9hbGdvcml0aG07Cit9OworCitzdHJ1Y3QgcmVwb3NpdG9yeSB7CisJLyogRW52aXJvbm1lbnQgKi8KKwkvKgorCSAqIFBhdGggdG8gdGhlIGdpdCBkaXJlY3RvcnkuCisJICogQ2Fubm90IGJlIE5VTEwgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uCisJICovCisJY2hhciAqZ2l0ZGlyOworCisJLyoKKwkgKiBQYXRoIHRvIHRoZSBjb21tb24gZ2l0IGRpcmVjdG9yeS4KKwkgKiBDYW5ub3QgYmUgTlVMTCBhZnRlciBpbml0aWFsaXphdGlvbi4KKwkgKi8KKwljaGFyICpjb21tb25kaXI7CisKKwkvKgorCSAqIEhvbGRzIGFueSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGFjY2Vzc2luZyB0aGUgcmF3IG9iamVjdCBjb250ZW50LgorCSAqLworCXN0cnVjdCByYXdfb2JqZWN0X3N0b3JlICpvYmplY3RzOworCisJLyoKKwkgKiBBbGwgb2JqZWN0cyBpbiB0aGlzIHJlcG9zaXRvcnkgdGhhdCBoYXZlIGJlZW4gcGFyc2VkLiBUaGlzIHN0cnVjdHVyZQorCSAqIG93bnMgYWxsIG9iamVjdHMgaXQgcmVmZXJlbmNlcywgc28gdXNlcnMgb2YgInN0cnVjdCBvYmplY3QgKiIKKwkgKiBnZW5lcmFsbHkgZG8gbm90IG5lZWQgdG8gZnJlZSB0aGVtOyBpbnN0ZWFkLCB3aGVuIGEgcmVwb3NpdG9yeSBpcyBubworCSAqIGxvbmdlciB1c2VkLCBjYWxsIHBhcnNlZF9vYmplY3RfcG9vbF9jbGVhcigpIG9uIHRoaXMgc3RydWN0dXJlLCB3aGljaAorCSAqIGlzIGNhbGxlZCBieSB0aGUgcmVwb3NpdG9yaWVzIHJlcG9fY2xlYXIgb24gaXRzIGRlc2NvbnN0cnVjdGlvbi4KKwkgKi8KKwlzdHJ1Y3QgcGFyc2VkX29iamVjdF9wb29sICpwYXJzZWRfb2JqZWN0czsKKworCS8qCisJICogVGhlIHN0b3JlIGluIHdoaWNoIHRoZSByZWZzIGFyZSBoZWxkLiBUaGlzIHNob3VsZCBnZW5lcmFsbHkgb25seSBiZQorCSAqIGFjY2Vzc2VkIHZpYSBnZXRfbWFpbl9yZWZfc3RvcmUoKSwgYXMgdGhhdCB3aWxsIGxhemlseSBpbml0aWFsaXplCisJICogdGhlIHJlZiBvYmplY3QuCisJICovCisJc3RydWN0IHJlZl9zdG9yZSAqcmVmc19wcml2YXRlOworCisJLyoKKwkgKiBDb250YWlucyBwYXRoIHRvIG9mdGVuIHVzZWQgZmlsZSBuYW1lcy4KKwkgKi8KKwlzdHJ1Y3QgcGF0aF9jYWNoZSBjYWNoZWRfcGF0aHM7CisKKwkvKgorCSAqIFBhdGggdG8gdGhlIHJlcG9zaXRvcnkncyBncmFmdCBmaWxlLgorCSAqIENhbm5vdCBiZSBOVUxMIGFmdGVyIGluaXRpYWxpemF0aW9uLgorCSAqLworCWNoYXIgKmdyYWZ0X2ZpbGU7CisKKwkvKgorCSAqIFBhdGggdG8gdGhlIGN1cnJlbnQgd29ya3RyZWUncyBpbmRleCBmaWxlLgorCSAqIENhbm5vdCBiZSBOVUxMIGFmdGVyIGluaXRpYWxpemF0aW9uLgorCSAqLworCWNoYXIgKmluZGV4X2ZpbGU7CisKKwkvKgorCSAqIFBhdGggdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorCSAqIEEgTlVMTCB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBubyB3b3JraW5nIGRpcmVjdG9yeS4KKwkgKi8KKwljaGFyICp3b3JrdHJlZTsKKworCS8qCisJICogUGF0aCBmcm9tIHRoZSByb290IG9mIHRoZSB0b3AtbGV2ZWwgc3VwZXJwcm9qZWN0IGRvd24gdG8gdGhpcworCSAqIHJlcG9zaXRvcnkuICBUaGlzIGlzIG9ubHkgbm9uLU5VTEwgaWYgdGhlIHJlcG9zaXRvcnkgaXMgaW5pdGlhbGl6ZWQKKwkgKiBhcyBhIHN1Ym1vZHVsZSBvZiBhbm90aGVyIHJlcG9zaXRvcnkuCisJICovCisJY2hhciAqc3VibW9kdWxlX3ByZWZpeDsKKworCXN0cnVjdCByZXBvX3NldHRpbmdzIHNldHRpbmdzOworCisJLyogU3Vic3lzdGVtcyAqLworCS8qCisJICogUmVwb3NpdG9yeSdzIGNvbmZpZyB3aGljaCBjb250YWlucyBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgdXN1YWwKKwkgKiBzZXQgb2YgY29uZmlnIGZpbGVzIChpLmUuIHJlcG8gc3BlY2lmaWMgLmdpdC9jb25maWcsIHVzZXIgd2lkZQorCSAqIH4vLmdpdGNvbmZpZywgWERHIGNvbmZpZyBmaWxlIGFuZCB0aGUgZ2xvYmFsIC9ldGMvZ2l0Y29uZmlnKQorCSAqLworCXN0cnVjdCBjb25maWdfc2V0ICpjb25maWc7CisKKwkvKiBSZXBvc2l0b3J5J3Mgc3VibW9kdWxlIGNvbmZpZyBhcyBkZWZpbmVkIGJ5ICcuZ2l0bW9kdWxlcycgKi8KKwlzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpzdWJtb2R1bGVfY2FjaGU7CisKKwkvKgorCSAqIFJlcG9zaXRvcnkncyBpbi1tZW1vcnkgaW5kZXguCisJICogJ3JlcG9fcmVhZF9pbmRleCgpJyBjYW4gYmUgdXNlZCB0byBwb3B1bGF0ZSAnaW5kZXgnLgorCSAqLworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXg7CisKKwkvKiBSZXBvc2l0b3J5J3MgY3VycmVudCBoYXNoIGFsZ29yaXRobSwgYXMgc2VyaWFsaXplZCBvbiBkaXNrLiAqLworCWNvbnN0IHN0cnVjdCBnaXRfaGFzaF9hbGdvICpoYXNoX2FsZ287CisKKwkvKiBBIHVuaXF1ZS1pZCBmb3IgdHJhY2luZyBwdXJwb3Nlcy4gKi8KKwlpbnQgdHJhY2UyX3JlcG9faWQ7CisKKwkvKiBUcnVlIGlmIGNvbW1pdC1ncmFwaCBoYXMgYmVlbiBkaXNhYmxlZCB3aXRoaW4gdGhpcyBwcm9jZXNzLiAqLworCWludCBjb21taXRfZ3JhcGhfZGlzYWJsZWQ7CisKKwkvKiBDb25maWd1cmF0aW9ucyAqLworCisJLyogSW5kaWNhdGUgaWYgYSByZXBvc2l0b3J5IGhhcyBhIGRpZmZlcmVudCAnY29tbW9uZGlyJyBmcm9tICdnaXRkaXInICovCisJdW5zaWduZWQgZGlmZmVyZW50X2NvbW1vbmRpcjoxOworfTsKKworZXh0ZXJuIHN0cnVjdCByZXBvc2l0b3J5ICp0aGVfcmVwb3NpdG9yeTsKKworLyoKKyAqIERlZmluZSBhIGN1c3RvbSByZXBvc2l0b3J5IGxheW91dC4gQW55IGZpZWxkIGNhbiBiZSBOVUxMLCB3aGljaAorICogd2lsbCBkZWZhdWx0IGJhY2sgdG8gdGhlIHBhdGggYWNjb3JkaW5nIHRvIHRoZSBkZWZhdWx0IGxheW91dC4KKyAqLworc3RydWN0IHNldF9naXRkaXJfYXJncyB7CisJY29uc3QgY2hhciAqY29tbW9uZGlyOworCWNvbnN0IGNoYXIgKm9iamVjdF9kaXI7CisJY29uc3QgY2hhciAqZ3JhZnRfZmlsZTsKKwljb25zdCBjaGFyICppbmRleF9maWxlOworCWNvbnN0IGNoYXIgKmFsdGVybmF0ZV9kYjsKK307CisKK3ZvaWQgcmVwb19zZXRfZ2l0ZGlyKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpyb290LAorCQkgICAgIGNvbnN0IHN0cnVjdCBzZXRfZ2l0ZGlyX2FyZ3MgKmV4dHJhX2FyZ3MpOwordm9pZCByZXBvX3NldF93b3JrdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqcGF0aCk7Cit2b2lkIHJlcG9fc2V0X2hhc2hfYWxnbyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgaW50IGFsZ28pOwordm9pZCBpbml0aWFsaXplX3RoZV9yZXBvc2l0b3J5KHZvaWQpOworaW50IHJlcG9faW5pdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqZ2l0ZGlyLCBjb25zdCBjaGFyICp3b3JrdHJlZSk7CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSByZXBvc2l0b3J5ICdzdWJyZXBvJyBhcyB0aGUgc3VibW9kdWxlIGdpdmVuIGJ5IHRoZQorICogc3RydWN0IHN1Ym1vZHVsZSAnc3ViJyBpbiBwYXJlbnQgcmVwb3NpdG9yeSAnc3VwZXJwcm9qZWN0Jy4KKyAqIFJldHVybiAwIHVwb24gc3VjY2VzcyBhbmQgYSBub24temVybyB2YWx1ZSB1cG9uIGZhaWx1cmUsIHdoaWNoIG1heSBoYXBwZW4KKyAqIGlmIHRoZSBzdWJtb2R1bGUgaXMgbm90IGZvdW5kLCBvciAnc3ViJyBpcyBOVUxMLgorICovCitzdHJ1Y3Qgc3VibW9kdWxlOworaW50IHJlcG9fc3VibW9kdWxlX2luaXQoc3RydWN0IHJlcG9zaXRvcnkgKnN1YnJlcG8sCisJCQlzdHJ1Y3QgcmVwb3NpdG9yeSAqc3VwZXJwcm9qZWN0LAorCQkJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViKTsKK3ZvaWQgcmVwb19jbGVhcihzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbyk7CisKKy8qCisgKiBQb3B1bGF0ZXMgdGhlIHJlcG9zaXRvcnkncyBpbmRleCBmcm9tIGl0cyBpbmRleF9maWxlLCBhbiBpbmRleCBzdHJ1Y3Qgd2lsbAorICogYmUgYWxsb2NhdGVkIGlmIG5lZWRlZC4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBpbmRleCBlbnRyaWVzIGluIHRoZSBwb3B1bGF0ZWQgaW5kZXggb3IgYSB2YWx1ZSBsZXNzCisgKiB0aGFuIHplcm8gaWYgYW4gZXJyb3Igb2NjdXJyZWQuICBJZiB0aGUgcmVwb3NpdG9yeSdzIGluZGV4IGhhcyBhbHJlYWR5IGJlZW4KKyAqIHBvcHVsYXRlZCB0aGVuIHRoZSBudW1iZXIgb2YgZW50cmllcyB3aWxsIHNpbXBseSBiZSByZXR1cm5lZC4KKyAqLworaW50IHJlcG9fcmVhZF9pbmRleChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbyk7CitpbnQgcmVwb19ob2xkX2xvY2tlZF9pbmRleChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgIHN0cnVjdCBsb2NrX2ZpbGUgKmxmLAorCQkJICAgaW50IGZsYWdzKTsKKworaW50IHJlcG9fcmVhZF9pbmRleF9wcmVsb2FkKHN0cnVjdCByZXBvc2l0b3J5ICosCisJCQkgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCSAgICB1bnNpZ25lZCByZWZyZXNoX2ZsYWdzKTsKK2ludCByZXBvX3JlYWRfaW5kZXhfdW5tZXJnZWQoc3RydWN0IHJlcG9zaXRvcnkgKik7CisvKgorICogT3Bwb3J0dW5pc3RpY2FsbHkgdXBkYXRlIHRoZSBpbmRleCBidXQgZG8gbm90IGNvbXBsYWluIGlmIHdlIGNhbid0LgorICogVGhlIGxvY2tmaWxlIGlzIGFsd2F5cyBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2suCisgKi8KK3ZvaWQgcmVwb191cGRhdGVfaW5kZXhfaWZfYWJsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBzdHJ1Y3QgbG9ja19maWxlICopOworCit2b2lkIHByZXBhcmVfcmVwb19zZXR0aW5ncyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisKKyNlbmRpZiAvKiBSRVBPU0lUT1JZX0ggKi8KZGlmZiAtLWdpdCBhL3JlcmVyZS5jIGIvcmVyZXJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4MTEzMQotLS0gL2Rldi9udWxsCisrKyBiL3JlcmVyZS5jCkBAIC0wLDAgKzEsMTI1NSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJlcmVyZS5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgImxsLW1lcmdlLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKworI2RlZmluZSBSRVNPTFZFRCAwCisjZGVmaW5lIFBVTlRFRCAxCisjZGVmaW5lIFRIUkVFX1NUQUdFRCAyCit2b2lkICpSRVJFUkVfUkVTT0xWRUQgPSAmUkVSRVJFX1JFU09MVkVEOworCisvKiBpZiByZXJlcmVfZW5hYmxlZCA9PSAtMSwgZmFsbCBiYWNrIHRvIGRldGVjdGlvbiBvZiAuZ2l0L3JyLWNhY2hlICovCitzdGF0aWMgaW50IHJlcmVyZV9lbmFibGVkID0gLTE7CisKKy8qIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGNsZWFubHkgcmVzb2x2ZWQgcGF0aHMgdG8gdGhlIGluZGV4ICovCitzdGF0aWMgaW50IHJlcmVyZV9hdXRvdXBkYXRlOworCitzdGF0aWMgaW50IHJlcmVyZV9kaXJfbnI7CitzdGF0aWMgaW50IHJlcmVyZV9kaXJfYWxsb2M7CisKKyNkZWZpbmUgUlJfSEFTX1BPU1RJTUFHRSAxCisjZGVmaW5lIFJSX0hBU19QUkVJTUFHRSAyCitzdGF0aWMgc3RydWN0IHJlcmVyZV9kaXIgeworCXVuc2lnbmVkIGNoYXIgaGFzaFtHSVRfTUFYX0hFWFNaXTsKKwlpbnQgc3RhdHVzX2FsbG9jLCBzdGF0dXNfbnI7CisJdW5zaWduZWQgY2hhciAqc3RhdHVzOworfSAqKnJlcmVyZV9kaXI7CisKK3N0YXRpYyB2b2lkIGZyZWVfcmVyZXJlX2RpcnModm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVyZXJlX2Rpcl9ucjsgaSsrKSB7CisJCWZyZWUocmVyZXJlX2RpcltpXS0+c3RhdHVzKTsKKwkJZnJlZShyZXJlcmVfZGlyW2ldKTsKKwl9CisJRlJFRV9BTkRfTlVMTChyZXJlcmVfZGlyKTsKKwlyZXJlcmVfZGlyX25yID0gcmVyZXJlX2Rpcl9hbGxvYyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcmVyZXJlX2lkKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtKQoreworCWZyZWUoaXRlbS0+dXRpbCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZXJlcmVfaWRfaGV4KGNvbnN0IHN0cnVjdCByZXJlcmVfaWQgKmlkKQoreworCXJldHVybiBoYXNoX3RvX2hleChpZC0+Y29sbGVjdGlvbi0+aGFzaCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpdF92YXJpYW50KHN0cnVjdCByZXJlcmVfZGlyICpycl9kaXIsIGludCB2YXJpYW50KQoreworCXZhcmlhbnQrKzsKKwlBTExPQ19HUk9XKHJyX2Rpci0+c3RhdHVzLCB2YXJpYW50LCBycl9kaXItPnN0YXR1c19hbGxvYyk7CisJaWYgKHJyX2Rpci0+c3RhdHVzX25yIDwgdmFyaWFudCkgeworCQltZW1zZXQocnJfZGlyLT5zdGF0dXMgKyBycl9kaXItPnN0YXR1c19uciwKKwkJICAgICAgICdcMCcsIHZhcmlhbnQgLSBycl9kaXItPnN0YXR1c19ucik7CisJCXJyX2Rpci0+c3RhdHVzX25yID0gdmFyaWFudDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFzc2lnbl92YXJpYW50KHN0cnVjdCByZXJlcmVfaWQgKmlkKQoreworCWludCB2YXJpYW50OworCXN0cnVjdCByZXJlcmVfZGlyICpycl9kaXIgPSBpZC0+Y29sbGVjdGlvbjsKKworCXZhcmlhbnQgPSBpZC0+dmFyaWFudDsKKwlpZiAodmFyaWFudCA8IDApIHsKKwkJZm9yICh2YXJpYW50ID0gMDsgdmFyaWFudCA8IHJyX2Rpci0+c3RhdHVzX25yOyB2YXJpYW50KyspCisJCQlpZiAoIXJyX2Rpci0+c3RhdHVzW3ZhcmlhbnRdKQorCQkJCWJyZWFrOworCX0KKwlmaXRfdmFyaWFudChycl9kaXIsIHZhcmlhbnQpOworCWlkLT52YXJpYW50ID0gdmFyaWFudDsKK30KKworY29uc3QgY2hhciAqcmVyZXJlX3BhdGgoY29uc3Qgc3RydWN0IHJlcmVyZV9pZCAqaWQsIGNvbnN0IGNoYXIgKmZpbGUpCit7CisJaWYgKCFmaWxlKQorCQlyZXR1cm4gZ2l0X3BhdGgoInJyLWNhY2hlLyVzIiwgcmVyZXJlX2lkX2hleChpZCkpOworCisJaWYgKGlkLT52YXJpYW50IDw9IDApCisJCXJldHVybiBnaXRfcGF0aCgicnItY2FjaGUvJXMvJXMiLCByZXJlcmVfaWRfaGV4KGlkKSwgZmlsZSk7CisKKwlyZXR1cm4gZ2l0X3BhdGgoInJyLWNhY2hlLyVzLyVzLiVkIiwKKwkJCXJlcmVyZV9pZF9oZXgoaWQpLCBmaWxlLCBpZC0+dmFyaWFudCk7Cit9CisKK3N0YXRpYyBpbnQgaXNfcnJfZmlsZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50ICp2YXJpYW50KQoreworCWNvbnN0IGNoYXIgKnN1ZmZpeDsKKwljaGFyICplcDsKKworCWlmICghc3RyY21wKG5hbWUsIGZpbGVuYW1lKSkgeworCQkqdmFyaWFudCA9IDA7CisJCXJldHVybiAxOworCX0KKwlpZiAoIXNraXBfcHJlZml4KG5hbWUsIGZpbGVuYW1lLCAmc3VmZml4KSB8fCAqc3VmZml4ICE9ICcuJykKKwkJcmV0dXJuIDA7CisKKwllcnJubyA9IDA7CisJKnZhcmlhbnQgPSBzdHJ0b2woc3VmZml4ICsgMSwgJmVwLCAxMCk7CisJaWYgKGVycm5vIHx8ICplcCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHNjYW5fcmVyZXJlX2RpcihzdHJ1Y3QgcmVyZXJlX2RpciAqcnJfZGlyKQoreworCXN0cnVjdCBkaXJlbnQgKmRlOworCURJUiAqZGlyID0gb3BlbmRpcihnaXRfcGF0aCgicnItY2FjaGUvJXMiLCBoYXNoX3RvX2hleChycl9kaXItPmhhc2gpKSk7CisKKwlpZiAoIWRpcikKKwkJcmV0dXJuOworCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJaW50IHZhcmlhbnQ7CisKKwkJaWYgKGlzX3JyX2ZpbGUoZGUtPmRfbmFtZSwgInBvc3RpbWFnZSIsICZ2YXJpYW50KSkgeworCQkJZml0X3ZhcmlhbnQocnJfZGlyLCB2YXJpYW50KTsKKwkJCXJyX2Rpci0+c3RhdHVzW3ZhcmlhbnRdIHw9IFJSX0hBU19QT1NUSU1BR0U7CisJCX0gZWxzZSBpZiAoaXNfcnJfZmlsZShkZS0+ZF9uYW1lLCAicHJlaW1hZ2UiLCAmdmFyaWFudCkpIHsKKwkJCWZpdF92YXJpYW50KHJyX2RpciwgdmFyaWFudCk7CisJCQlycl9kaXItPnN0YXR1c1t2YXJpYW50XSB8PSBSUl9IQVNfUFJFSU1BR0U7CisJCX0KKwl9CisJY2xvc2VkaXIoZGlyKTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlcmVyZV9kaXJfaGFzaChzaXplX3QgaSwgdm9pZCAqdGFibGUpCit7CisJc3RydWN0IHJlcmVyZV9kaXIgKipycl9kaXIgPSB0YWJsZTsKKwlyZXR1cm4gcnJfZGlyW2ldLT5oYXNoOworfQorCitzdGF0aWMgc3RydWN0IHJlcmVyZV9kaXIgKmZpbmRfcmVyZXJlX2Rpcihjb25zdCBjaGFyICpoZXgpCit7CisJdW5zaWduZWQgY2hhciBoYXNoW0dJVF9NQVhfUkFXU1pdOworCXN0cnVjdCByZXJlcmVfZGlyICpycl9kaXI7CisJaW50IHBvczsKKworCWlmIChnZXRfc2hhMV9oZXgoaGV4LCBoYXNoKSkKKwkJcmV0dXJuIE5VTEw7IC8qIEJVRyAqLworCXBvcyA9IHNoYTFfcG9zKGhhc2gsIHJlcmVyZV9kaXIsIHJlcmVyZV9kaXJfbnIsIHJlcmVyZV9kaXJfaGFzaCk7CisJaWYgKHBvcyA8IDApIHsKKwkJcnJfZGlyID0geG1hbGxvYyhzaXplb2YoKnJyX2RpcikpOworCQloYXNoY3B5KHJyX2Rpci0+aGFzaCwgaGFzaCk7CisJCXJyX2Rpci0+c3RhdHVzID0gTlVMTDsKKwkJcnJfZGlyLT5zdGF0dXNfbnIgPSAwOworCQlycl9kaXItPnN0YXR1c19hbGxvYyA9IDA7CisJCXBvcyA9IC0xIC0gcG9zOworCisJCS8qIE1ha2Ugc3VyZSB0aGUgYXJyYXkgaXMgYmlnIGVub3VnaCAuLi4gKi8KKwkJQUxMT0NfR1JPVyhyZXJlcmVfZGlyLCByZXJlcmVfZGlyX25yICsgMSwgcmVyZXJlX2Rpcl9hbGxvYyk7CisJCS8qIC4uLiBhbmQgYWRkIGl0IGluLiAqLworCQlyZXJlcmVfZGlyX25yKys7CisJCU1PVkVfQVJSQVkocmVyZXJlX2RpciArIHBvcyArIDEsIHJlcmVyZV9kaXIgKyBwb3MsCisJCQkgICByZXJlcmVfZGlyX25yIC0gcG9zIC0gMSk7CisJCXJlcmVyZV9kaXJbcG9zXSA9IHJyX2RpcjsKKwkJc2Nhbl9yZXJlcmVfZGlyKHJyX2Rpcik7CisJfQorCXJldHVybiByZXJlcmVfZGlyW3Bvc107Cit9CisKK3N0YXRpYyBpbnQgaGFzX3JlcmVyZV9yZXNvbHV0aW9uKGNvbnN0IHN0cnVjdCByZXJlcmVfaWQgKmlkKQoreworCWNvbnN0IGludCBib3RoID0gUlJfSEFTX1BPU1RJTUFHRXxSUl9IQVNfUFJFSU1BR0U7CisJaW50IHZhcmlhbnQgPSBpZC0+dmFyaWFudDsKKworCWlmICh2YXJpYW50IDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICgoaWQtPmNvbGxlY3Rpb24tPnN0YXR1c1t2YXJpYW50XSAmIGJvdGgpID09IGJvdGgpOworfQorCitzdGF0aWMgc3RydWN0IHJlcmVyZV9pZCAqbmV3X3JlcmVyZV9pZF9oZXgoY2hhciAqaGV4KQoreworCXN0cnVjdCByZXJlcmVfaWQgKmlkID0geG1hbGxvYyhzaXplb2YoKmlkKSk7CisJaWQtPmNvbGxlY3Rpb24gPSBmaW5kX3JlcmVyZV9kaXIoaGV4KTsKKwlpZC0+dmFyaWFudCA9IC0xOyAvKiBub3Qga25vd24geWV0ICovCisJcmV0dXJuIGlkOworfQorCitzdGF0aWMgc3RydWN0IHJlcmVyZV9pZCAqbmV3X3JlcmVyZV9pZCh1bnNpZ25lZCBjaGFyICpoYXNoKQoreworCXJldHVybiBuZXdfcmVyZXJlX2lkX2hleChoYXNoX3RvX2hleChoYXNoKSk7Cit9CisKKy8qCisgKiAkR0lUX0RJUi9NRVJHRV9SUiBmaWxlIGlzIGEgY29sbGVjdGlvbiBvZiByZWNvcmRzLCBlYWNoIG9mIHdoaWNoIGlzCisgKiAiY29uZmxpY3QgSUQiLCBhIEhUIGFuZCBwYXRobmFtZSwgdGVybWluYXRlZCB3aXRoIGEgTlVMLCBhbmQgaXMKKyAqIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgc2V0IG9mIHBhdGhzIHRoYXQgInJlcmVyZSIgbWF5IG5lZWQgdG8KKyAqIHdvcmsgb24gKGkuZS4gd2hhdCBpcyBsZWZ0IGJ5IHRoZSBwcmV2aW91cyBpbnZvY2F0aW9uIG9mICJnaXQKKyAqIHJlcmVyZSIgZHVyaW5nIHRoZSBjdXJyZW50IGNvbmZsaWN0IHJlc29sdXRpb24gc2Vzc2lvbikuCisgKi8KK3N0YXRpYyB2b2lkIHJlYWRfcnIoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBzdHJpbmdfbGlzdCAqcnIpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlGSUxFICppbiA9IGZvcGVuX29yX3dhcm4oZ2l0X3BhdGhfbWVyZ2VfcnIociksICJyIik7CisKKwlpZiAoIWluKQorCQlyZXR1cm47CisJd2hpbGUgKCFzdHJidWZfZ2V0d2hvbGVsaW5lKCZidWYsIGluLCAnXDAnKSkgeworCQljaGFyICpwYXRoOworCQl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9SQVdTWl07CisJCXN0cnVjdCByZXJlcmVfaWQgKmlkOworCQlpbnQgdmFyaWFudDsKKwkJY29uc3QgdW5zaWduZWQgaGV4c3ogPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKworCQkvKiBUaGVyZSBoYXMgdG8gYmUgdGhlIGhhc2gsIHRhYiwgcGF0aCBhbmQgdGhlbiBOVUwgKi8KKwkJaWYgKGJ1Zi5sZW4gPCBoZXhzeiArIDIgfHwgZ2V0X3NoYTFfaGV4KGJ1Zi5idWYsIGhhc2gpKQorCQkJZGllKF8oImNvcnJ1cHQgTUVSR0VfUlIiKSk7CisKKwkJaWYgKGJ1Zi5idWZbaGV4c3pdICE9ICcuJykgeworCQkJdmFyaWFudCA9IDA7CisJCQlwYXRoID0gYnVmLmJ1ZiArIGhleHN6OworCQl9IGVsc2UgeworCQkJZXJybm8gPSAwOworCQkJdmFyaWFudCA9IHN0cnRvbChidWYuYnVmICsgaGV4c3ogKyAxLCAmcGF0aCwgMTApOworCQkJaWYgKGVycm5vKQorCQkJCWRpZShfKCJjb3JydXB0IE1FUkdFX1JSIikpOworCQl9CisJCWlmICgqKHBhdGgrKykgIT0gJ1x0JykKKwkJCWRpZShfKCJjb3JydXB0IE1FUkdFX1JSIikpOworCQlidWYuYnVmW2hleHN6XSA9ICdcMCc7CisJCWlkID0gbmV3X3JlcmVyZV9pZF9oZXgoYnVmLmJ1Zik7CisJCWlkLT52YXJpYW50ID0gdmFyaWFudDsKKwkJc3RyaW5nX2xpc3RfaW5zZXJ0KHJyLCBwYXRoKS0+dXRpbCA9IGlkOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlmY2xvc2UoaW4pOworfQorCitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSB3cml0ZV9sb2NrOworCitzdGF0aWMgaW50IHdyaXRlX3JyKHN0cnVjdCBzdHJpbmdfbGlzdCAqcnIsIGludCBvdXRfZmQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHJyLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCByZXJlcmVfaWQgKmlkOworCisJCWFzc2VydChyci0+aXRlbXNbaV0udXRpbCAhPSBSRVJFUkVfUkVTT0xWRUQpOworCisJCWlkID0gcnItPml0ZW1zW2ldLnV0aWw7CisJCWlmICghaWQpCisJCQljb250aW51ZTsKKwkJYXNzZXJ0KGlkLT52YXJpYW50ID49IDApOworCQlpZiAoMCA8IGlkLT52YXJpYW50KQorCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzLiVkXHQlcyVjIiwKKwkJCQkgICAgcmVyZXJlX2lkX2hleChpZCksIGlkLT52YXJpYW50LAorCQkJCSAgICByci0+aXRlbXNbaV0uc3RyaW5nLCAwKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzXHQlcyVjIiwKKwkJCQkgICAgcmVyZXJlX2lkX2hleChpZCksCisJCQkJICAgIHJyLT5pdGVtc1tpXS5zdHJpbmcsIDApOworCisJCWlmICh3cml0ZV9pbl9mdWxsKG91dF9mZCwgYnVmLmJ1ZiwgYnVmLmxlbikgPCAwKQorCQkJZGllKF8oInVuYWJsZSB0byB3cml0ZSByZXJlcmUgcmVjb3JkIikpOworCisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0KKwlpZiAoY29tbWl0X2xvY2tfZmlsZSgmd3JpdGVfbG9jaykgIT0gMCkKKwkJZGllKF8oInVuYWJsZSB0byB3cml0ZSByZXJlcmUgcmVjb3JkIikpOworCXJldHVybiAwOworfQorCisvKgorICogInJlcmVyZSIgaW50ZXJhY3RzIHdpdGggY29uZmxpY3RlZCBmaWxlIGNvbnRlbnRzIHVzaW5nIHRoaXMgSS9PCisgKiBhYnN0cmFjdGlvbi4gIEl0IHJlYWRzIGEgY29uZmxpY3RlZCBjb250ZW50cyBmcm9tIG9uZSBwbGFjZSB2aWEKKyAqICJnZXRsaW5lKCkiIG1ldGhvZCwgYW5kIG9wdGlvbmFsbHkgY2FuIHdyaXRlIGl0IG91dCBhZnRlcgorICogbm9ybWFsaXppbmcgdGhlIGNvbmZsaWN0ZWQgaHVua3MgdG8gdGhlICJvdXRwdXQiLiAgU3ViY2xhc3NlcyBvZgorICogcmVyZXJlX2lvIGVtYmVkIHRoaXMgc3RydWN0dXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlaXIgb3duCisgKiByZXJlcmVfaW8gb2JqZWN0LgorICovCitzdHJ1Y3QgcmVyZXJlX2lvIHsKKwlpbnQgKCpnZXRsaW5lKShzdHJ1Y3Qgc3RyYnVmICosIHN0cnVjdCByZXJlcmVfaW8gKik7CisJRklMRSAqb3V0cHV0OworCWludCB3cmVycm9yOworCS8qIHNvbWUgbW9yZSBzdHVmZiAqLworfTsKKworc3RhdGljIHZvaWQgZmVycl93cml0ZShjb25zdCB2b2lkICpwLCBzaXplX3QgY291bnQsIEZJTEUgKmZwLCBpbnQgKmVycikKK3sKKwlpZiAoIWNvdW50IHx8ICplcnIpCisJCXJldHVybjsKKwlpZiAoZndyaXRlKHAsIGNvdW50LCAxLCBmcCkgIT0gMSkKKwkJKmVyciA9IGVycm5vOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmVycl9wdXRzKGNvbnN0IGNoYXIgKnMsIEZJTEUgKmZwLCBpbnQgKmVycikKK3sKKwlmZXJyX3dyaXRlKHMsIHN0cmxlbihzKSwgZnAsIGVycik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcmVyZV9pb19wdXRzdHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcmVyZXJlX2lvICppbykKK3sKKwlpZiAoaW8tPm91dHB1dCkKKwkJZmVycl9wdXRzKHN0ciwgaW8tPm91dHB1dCwgJmlvLT53cmVycm9yKTsKK30KKworc3RhdGljIHZvaWQgcmVyZXJlX2lvX3B1dG1lbShjb25zdCBjaGFyICptZW0sIHNpemVfdCBzeiwgc3RydWN0IHJlcmVyZV9pbyAqaW8pCit7CisJaWYgKGlvLT5vdXRwdXQpCisJCWZlcnJfd3JpdGUobWVtLCBzeiwgaW8tPm91dHB1dCwgJmlvLT53cmVycm9yKTsKK30KKworLyoKKyAqIFN1YmNsYXNzIG9mIHJlcmVyZV9pbyB0aGF0IHJlYWRzIGZyb20gYW4gb24tZGlzayBmaWxlCisgKi8KK3N0cnVjdCByZXJlcmVfaW9fZmlsZSB7CisJc3RydWN0IHJlcmVyZV9pbyBpbzsKKwlGSUxFICppbnB1dDsKK307CisKKy8qCisgKiAuLi4gYW5kIGl0cyBnZXRsaW5lKCkgbWV0aG9kIGltcGxlbWVudGF0aW9uCisgKi8KK3N0YXRpYyBpbnQgcmVyZXJlX2ZpbGVfZ2V0bGluZShzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IHJlcmVyZV9pbyAqaW9fKQoreworCXN0cnVjdCByZXJlcmVfaW9fZmlsZSAqaW8gPSAoc3RydWN0IHJlcmVyZV9pb19maWxlICopaW9fOworCXJldHVybiBzdHJidWZfZ2V0d2hvbGVsaW5lKHNiLCBpby0+aW5wdXQsICdcbicpOworfQorCisvKgorICogUmVxdWlyZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGNvbmZsaWN0IG1hcmtlciBsZXR0ZXJzLCBubyBtb3JlLCBubworICogbGVzcywgZm9sbG93ZWQgYnkgU1Agb3IgYW55IHdoaXRlc3BhY2UKKyAqIChpbmNsdWRpbmcgTEYpLgorICovCitzdGF0aWMgaW50IGlzX2NtYXJrZXIoY2hhciAqYnVmLCBpbnQgbWFya2VyX2NoYXIsIGludCBtYXJrZXJfc2l6ZSkKK3sKKwlpbnQgd2FudF9zcDsKKworCS8qCisJICogVGhlIGJlZ2lubmluZyBvZiBvdXIgdmVyc2lvbiBhbmQgdGhlIGVuZCBvZiB0aGVpciB2ZXJzaW9uCisJICogYWx3YXlzIGFyZSBsYWJlbGVkIGxpa2UgIjw8PDw8IG91cnMiIG9yICI+Pj4+PiB0aGVpcnMiLAorCSAqIGhlbmNlIHdlIHNldCB3YW50X3NwIGZvciB0aGVtLiAgTm90ZSB0aGF0IHRoZSB2ZXJzaW9uIGZyb20KKwkgKiB0aGUgY29tbW9uIGFuY2VzdG9yIGluIGRpZmYzLXN0eWxlIG91dHB1dCBpcyBub3QgYWx3YXlzCisJICogbGFiZWxsZWQgKGUuZy4gInx8fHx8IGNvbW1vbiIgaXMgb2Z0ZW4gc2VlbiBidXQgInx8fHx8IgorCSAqIGFsb25lIGlzIGFsc28gdmFsaWQpLCBzbyB3ZSBkbyBub3Qgc2V0IHdhbnRfc3AuCisJICovCisJd2FudF9zcCA9IChtYXJrZXJfY2hhciA9PSAnPCcpIHx8IChtYXJrZXJfY2hhciA9PSAnPicpOworCisJd2hpbGUgKG1hcmtlcl9zaXplLS0pCisJCWlmICgqYnVmKysgIT0gbWFya2VyX2NoYXIpCisJCQlyZXR1cm4gMDsKKwlpZiAod2FudF9zcCAmJiAqYnVmICE9ICcgJykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGlzc3BhY2UoKmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcmVyZV9zdHJidWZfcHV0Y29uZmxpY3Qoc3RydWN0IHN0cmJ1ZiAqYnVmLCBpbnQgY2gsIHNpemVfdCBzaXplKQoreworCXN0cmJ1Zl9hZGRjaGFycyhidWYsIGNoLCBzaXplKTsKKwlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKK30KKworc3RhdGljIGludCBoYW5kbGVfY29uZmxpY3Qoc3RydWN0IHN0cmJ1ZiAqb3V0LCBzdHJ1Y3QgcmVyZXJlX2lvICppbywKKwkJCSAgIGludCBtYXJrZXJfc2l6ZSwgZ2l0X2hhc2hfY3R4ICpjdHgpCit7CisJZW51bSB7CisJCVJSX1NJREVfMSA9IDAsIFJSX1NJREVfMiwgUlJfT1JJR0lOQUwKKwl9IGh1bmsgPSBSUl9TSURFXzE7CisJc3RydWN0IHN0cmJ1ZiBvbmUgPSBTVFJCVUZfSU5JVCwgdHdvID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgY29uZmxpY3QgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaGFzX2NvbmZsaWN0cyA9IC0xOworCisJd2hpbGUgKCFpby0+Z2V0bGluZSgmYnVmLCBpbykpIHsKKwkJaWYgKGlzX2NtYXJrZXIoYnVmLmJ1ZiwgJzwnLCBtYXJrZXJfc2l6ZSkpIHsKKwkJCWlmIChoYW5kbGVfY29uZmxpY3QoJmNvbmZsaWN0LCBpbywgbWFya2VyX3NpemUsIE5VTEwpIDwgMCkKKwkJCQlicmVhazsKKwkJCWlmIChodW5rID09IFJSX1NJREVfMSkKKwkJCQlzdHJidWZfYWRkYnVmKCZvbmUsICZjb25mbGljdCk7CisJCQllbHNlCisJCQkJc3RyYnVmX2FkZGJ1ZigmdHdvLCAmY29uZmxpY3QpOworCQkJc3RyYnVmX3JlbGVhc2UoJmNvbmZsaWN0KTsKKwkJfSBlbHNlIGlmIChpc19jbWFya2VyKGJ1Zi5idWYsICd8JywgbWFya2VyX3NpemUpKSB7CisJCQlpZiAoaHVuayAhPSBSUl9TSURFXzEpCisJCQkJYnJlYWs7CisJCQlodW5rID0gUlJfT1JJR0lOQUw7CisJCX0gZWxzZSBpZiAoaXNfY21hcmtlcihidWYuYnVmLCAnPScsIG1hcmtlcl9zaXplKSkgeworCQkJaWYgKGh1bmsgIT0gUlJfU0lERV8xICYmIGh1bmsgIT0gUlJfT1JJR0lOQUwpCisJCQkJYnJlYWs7CisJCQlodW5rID0gUlJfU0lERV8yOworCQl9IGVsc2UgaWYgKGlzX2NtYXJrZXIoYnVmLmJ1ZiwgJz4nLCBtYXJrZXJfc2l6ZSkpIHsKKwkJCWlmIChodW5rICE9IFJSX1NJREVfMikKKwkJCQlicmVhazsKKwkJCWlmIChzdHJidWZfY21wKCZvbmUsICZ0d28pID4gMCkKKwkJCQlzdHJidWZfc3dhcCgmb25lLCAmdHdvKTsKKwkJCWhhc19jb25mbGljdHMgPSAxOworCQkJcmVyZXJlX3N0cmJ1Zl9wdXRjb25mbGljdChvdXQsICc8JywgbWFya2VyX3NpemUpOworCQkJc3RyYnVmX2FkZGJ1ZihvdXQsICZvbmUpOworCQkJcmVyZXJlX3N0cmJ1Zl9wdXRjb25mbGljdChvdXQsICc9JywgbWFya2VyX3NpemUpOworCQkJc3RyYnVmX2FkZGJ1ZihvdXQsICZ0d28pOworCQkJcmVyZXJlX3N0cmJ1Zl9wdXRjb25mbGljdChvdXQsICc+JywgbWFya2VyX3NpemUpOworCQkJaWYgKGN0eCkgeworCQkJCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbihjdHgsIG9uZS5idWYgPworCQkJCQkJCSBvbmUuYnVmIDogIiIsCisJCQkJCQkJIG9uZS5sZW4gKyAxKTsKKwkJCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oY3R4LCB0d28uYnVmID8KKwkJCQkJCQkgdHdvLmJ1ZiA6ICIiLAorCQkJCQkJCSB0d28ubGVuICsgMSk7CisJCQl9CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChodW5rID09IFJSX1NJREVfMSkKKwkJCXN0cmJ1Zl9hZGRidWYoJm9uZSwgJmJ1Zik7CisJCWVsc2UgaWYgKGh1bmsgPT0gUlJfT1JJR0lOQUwpCisJCQk7IC8qIGRpc2NhcmQgKi8KKwkJZWxzZSBpZiAoaHVuayA9PSBSUl9TSURFXzIpCisJCQlzdHJidWZfYWRkYnVmKCZ0d28sICZidWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmb25lKTsKKwlzdHJidWZfcmVsZWFzZSgmdHdvKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiBoYXNfY29uZmxpY3RzOworfQorCisvKgorICogUmVhZCBjb250ZW50cyBhIGZpbGUgd2l0aCBjb25mbGljdHMsIG5vcm1hbGl6ZSB0aGUgY29uZmxpY3RzCisgKiBieSAoMSkgZGlzY2FyZGluZyB0aGUgY29tbW9uIGFuY2VzdG9yIHZlcnNpb24gaW4gZGlmZjMtc3R5bGUsCisgKiAoMikgcmVvcmRlcmluZyBvdXIgc2lkZSBhbmQgdGhlaXIgc2lkZSBzbyB0aGF0IHdoaWNoZXZlciBzb3J0cworICogYWxwaGFiZXRpY2FsbHkgZWFybGllciBjb21lcyBiZWZvcmUgdGhlIG90aGVyIG9uZSwgd2hpbGUKKyAqIGNvbXB1dGluZyB0aGUgImNvbmZsaWN0IElEIiwgd2hpY2ggaXMganVzdCBhbiBTSEEtMSBoYXNoIG9mCisgKiBvbmUgc2lkZSBvZiB0aGUgY29uZmxpY3QsIE5VTCwgdGhlIG90aGVyIHNpZGUgb2YgdGhlIGNvbmZsaWN0LAorICogYW5kIE5VTCBjb25jYXRlbmF0ZWQgdG9nZXRoZXIuCisgKgorICogUmV0dXJuIDEgaWYgY29uZmxpY3QgaHVua3MgYXJlIGZvdW5kLCAwIGlmIHRoZXJlIGFyZSBubyBjb25mbGljdAorICogaHVua3MgYW5kIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICovCitzdGF0aWMgaW50IGhhbmRsZV9wYXRoKHVuc2lnbmVkIGNoYXIgKmhhc2gsIHN0cnVjdCByZXJlcmVfaW8gKmlvLCBpbnQgbWFya2VyX3NpemUpCit7CisJZ2l0X2hhc2hfY3R4IGN0eDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklULCBvdXQgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaGFzX2NvbmZsaWN0cyA9IDA7CisJaWYgKGhhc2gpCisJCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJmN0eCk7CisKKwl3aGlsZSAoIWlvLT5nZXRsaW5lKCZidWYsIGlvKSkgeworCQlpZiAoaXNfY21hcmtlcihidWYuYnVmLCAnPCcsIG1hcmtlcl9zaXplKSkgeworCQkJaGFzX2NvbmZsaWN0cyA9IGhhbmRsZV9jb25mbGljdCgmb3V0LCBpbywgbWFya2VyX3NpemUsCisJCQkJCQkJaGFzaCA/ICZjdHggOiBOVUxMKTsKKwkJCWlmIChoYXNfY29uZmxpY3RzIDwgMCkKKwkJCQlicmVhazsKKwkJCXJlcmVyZV9pb19wdXRtZW0ob3V0LmJ1Ziwgb3V0LmxlbiwgaW8pOworCQkJc3RyYnVmX3Jlc2V0KCZvdXQpOworCQl9IGVsc2UKKwkJCXJlcmVyZV9pb19wdXRzdHIoYnVmLmJ1ZiwgaW8pOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmb3V0KTsKKworCWlmIChoYXNoKQorCQl0aGVfaGFzaF9hbGdvLT5maW5hbF9mbihoYXNoLCAmY3R4KTsKKworCXJldHVybiBoYXNfY29uZmxpY3RzOworfQorCisvKgorICogU2NhbiB0aGUgcGF0aCBmb3IgY29uZmxpY3RzLCBkbyB0aGUgImhhbmRsZV9wYXRoKCkiIHRoaW5nIGFib3ZlLCBhbmQKKyAqIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvbmZsaWN0IGh1bmtzIGZvdW5kLgorICovCitzdGF0aWMgaW50IGhhbmRsZV9maWxlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgY2hhciAqaGFzaCwgY29uc3QgY2hhciAqb3V0cHV0KQoreworCWludCBoYXNfY29uZmxpY3RzID0gMDsKKwlzdHJ1Y3QgcmVyZXJlX2lvX2ZpbGUgaW87CisJaW50IG1hcmtlcl9zaXplID0gbGxfbWVyZ2VfbWFya2VyX3NpemUoaXN0YXRlLCBwYXRoKTsKKworCW1lbXNldCgmaW8sIDAsIHNpemVvZihpbykpOworCWlvLmlvLmdldGxpbmUgPSByZXJlcmVfZmlsZV9nZXRsaW5lOworCWlvLmlucHV0ID0gZm9wZW4ocGF0aCwgInIiKTsKKwlpby5pby53cmVycm9yID0gMDsKKwlpZiAoIWlvLmlucHV0KQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyIpLCBwYXRoKTsKKworCWlmIChvdXRwdXQpIHsKKwkJaW8uaW8ub3V0cHV0ID0gZm9wZW4ob3V0cHV0LCAidyIpOworCQlpZiAoIWlvLmlvLm91dHB1dCkgeworCQkJZXJyb3JfZXJybm8oXygiY291bGQgbm90IHdyaXRlICclcyciKSwgb3V0cHV0KTsKKwkJCWZjbG9zZShpby5pbnB1dCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwloYXNfY29uZmxpY3RzID0gaGFuZGxlX3BhdGgoaGFzaCwgKHN0cnVjdCByZXJlcmVfaW8gKikmaW8sIG1hcmtlcl9zaXplKTsKKworCWZjbG9zZShpby5pbnB1dCk7CisJaWYgKGlvLmlvLndyZXJyb3IpCisJCWVycm9yKF8oInRoZXJlIHdlcmUgZXJyb3JzIHdoaWxlIHdyaXRpbmcgJyVzJyAoJXMpIiksCisJCSAgICAgIHBhdGgsIHN0cmVycm9yKGlvLmlvLndyZXJyb3IpKTsKKwlpZiAoaW8uaW8ub3V0cHV0ICYmIGZjbG9zZShpby5pby5vdXRwdXQpKQorCQlpby5pby53cmVycm9yID0gZXJyb3JfZXJybm8oXygiZmFpbGVkIHRvIGZsdXNoICclcyciKSwgcGF0aCk7CisKKwlpZiAoaGFzX2NvbmZsaWN0cyA8IDApIHsKKwkJaWYgKG91dHB1dCkKKwkJCXVubGlua19vcl93YXJuKG91dHB1dCk7CisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgY29uZmxpY3QgaHVua3MgaW4gJyVzJyIpLCBwYXRoKTsKKwl9CisJaWYgKGlvLmlvLndyZXJyb3IpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gaGFzX2NvbmZsaWN0czsKK30KKworLyoKKyAqIExvb2sgYXQgYSBjYWNoZSBlbnRyeSBhdCAiaSIgYW5kIHNlZSBpZiBpdCBpcyBub3QgY29uZmxpY3RpbmcsCisgKiBjb25mbGljdGluZyBhbmQgd2UgYXJlIHdpbGxpbmcgdG8gaGFuZGxlLCBvciBjb25mbGljdGluZyBhbmQKKyAqIHdlIGFyZSB1bmFibGUgdG8gaGFuZGxlLCBhbmQgcmV0dXJuIHRoZSBkZXRlcm1pbmF0aW9uIGluICp0eXBlLgorICogUmV0dXJuIHRoZSBjYWNoZSBpbmRleCB0byBiZSBsb29rZWQgYXQgbmV4dCwgYnkgc2tpcHBpbmcgdGhlCisgKiBzdGFnZXMgd2UgaGF2ZSBhbHJlYWR5IGxvb2tlZCBhdCBpbiB0aGlzIGludm9jYXRpb24gb2YgdGhpcworICogZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfb25lX2NvbmZsaWN0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgaSwgaW50ICp0eXBlKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisKKwlpZiAoIWNlX3N0YWdlKGUpKSB7CisJCSp0eXBlID0gUkVTT0xWRUQ7CisJCXJldHVybiBpICsgMTsKKwl9CisKKwkqdHlwZSA9IFBVTlRFRDsKKwl3aGlsZSAoaSA8IGlzdGF0ZS0+Y2FjaGVfbnIgJiYgY2Vfc3RhZ2UoaXN0YXRlLT5jYWNoZVtpXSkgPT0gMSkKKwkJaSsrOworCisJLyogT25seSBoYW5kbGUgcmVndWxhciBmaWxlcyB3aXRoIGJvdGggc3RhZ2VzICMyIGFuZCAjMyAqLworCWlmIChpICsgMSA8IGlzdGF0ZS0+Y2FjaGVfbnIpIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICplMiA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqZTMgPSBpc3RhdGUtPmNhY2hlW2kgKyAxXTsKKwkJaWYgKGNlX3N0YWdlKGUyKSA9PSAyICYmCisJCSAgICBjZV9zdGFnZShlMykgPT0gMyAmJgorCQkgICAgY2Vfc2FtZV9uYW1lKGUsIGUzKSAmJgorCQkgICAgU19JU1JFRyhlMi0+Y2VfbW9kZSkgJiYKKwkJICAgIFNfSVNSRUcoZTMtPmNlX21vZGUpKQorCQkJKnR5cGUgPSBUSFJFRV9TVEFHRUQ7CisJfQorCisJLyogU2tpcCB0aGUgZW50cmllcyB3aXRoIHRoZSBzYW1lIG5hbWUgKi8KKwl3aGlsZSAoaSA8IGlzdGF0ZS0+Y2FjaGVfbnIgJiYgY2Vfc2FtZV9uYW1lKGUsIGlzdGF0ZS0+Y2FjaGVbaV0pKQorCQlpKys7CisJcmV0dXJuIGk7Cit9CisKKy8qCisgKiBTY2FuIHRoZSBpbmRleCBhbmQgZmluZCBwYXRocyB0aGF0IGhhdmUgY29uZmxpY3RzIHRoYXQgcmVyZXJlIGNhbgorICogaGFuZGxlLCBpLmUuIHRoZSBvbmVzIHRoYXQgaGFzIGJvdGggc3RhZ2VzICMyIGFuZCAjMy4KKyAqCisgKiBORUVEU1dPUks6IHdlIGRvIG5vdCByZWNvcmQgb3IgcmVwbGF5IGEgcHJldmlvdXMgInJlc29sdmUgYnkKKyAqIGRlbGV0aW9uIiBmb3IgYSBkZWxldGUtbW9kaWZ5IGNvbmZsaWN0LCBhcyB0aGF0IGlzIGluaGVyZW50bHkgcmlza3kKKyAqIHdpdGhvdXQga25vd2luZyB3aGF0IG1vZGlmaWNhdGlvbiBpcyBiZWluZyBkaXNjYXJkZWQuICBUaGUgb25seQorICogc2FmZSBjYXNlLCBpLmUuIGJvdGggc2lkZSBkb2luZyB0aGUgZGVsZXRpb24gYW5kIG1vZGlmaWNhdGlvbiB0aGF0CisgKiBhcmUgaWRlbnRpY2FsIHRvIHRoZSBwcmV2aW91cyByb3VuZCwgbWlnaHQgd2FudCB0byBiZSBoYW5kbGVkLAorICogdGhvdWdoLgorICovCitzdGF0aWMgaW50IGZpbmRfY29uZmxpY3Qoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBzdHJpbmdfbGlzdCAqY29uZmxpY3QpCit7CisJaW50IGk7CisKKwlpZiAocmVwb19yZWFkX2luZGV4KHIpIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKworCWZvciAoaSA9IDA7IGkgPCByLT5pbmRleC0+Y2FjaGVfbnI7KSB7CisJCWludCBjb25mbGljdF90eXBlOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmUgPSByLT5pbmRleC0+Y2FjaGVbaV07CisJCWkgPSBjaGVja19vbmVfY29uZmxpY3Qoci0+aW5kZXgsIGksICZjb25mbGljdF90eXBlKTsKKwkJaWYgKGNvbmZsaWN0X3R5cGUgPT0gVEhSRUVfU1RBR0VEKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KGNvbmZsaWN0LCAoY29uc3QgY2hhciAqKWUtPm5hbWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBtZXJnZV9yciBsaXN0IGlzIG1lYW50IHRvIGhvbGQgb3V0c3RhbmRpbmcgY29uZmxpY3RlZCBwYXRocworICogdGhhdCByZXJlcmUgY291bGQgaGFuZGxlLiAgQWJ1c2UgdGhlIGxpc3QgYnkgYWRkaW5nIG90aGVyIHR5cGVzIG9mCisgKiBlbnRyaWVzIHRvIGFsbG93IHRoZSBjYWxsZXIgdG8gc2hvdyAicmVyZXJlIHJlbWFpbmluZyIuCisgKgorICogLSBDb25mbGljdGVkIHBhdGhzIHRoYXQgcmVyZXJlIGRvZXMgbm90IGhhbmRsZSBhcmUgYWRkZWQKKyAqIC0gQ29uZmxpY3RlZCBwYXRocyB0aGF0IGhhdmUgYmVlbiByZXNvbHZlZCBhcmUgbWFya2VkIGFzIHN1Y2gKKyAqICAgYnkgc3RvcmluZyBSRVJFUkVfUkVTT0xWRUQgdG8gLnV0aWwgZmllbGQgKHdoZXJlIGNvbmZsaWN0IElECisgKiAgIGlzIGV4cGVjdGVkIHRvIGJlIHN0b3JlZCkuCisgKgorICogRG8gKm5vdCogd3JpdGUgTUVSR0VfUlIgZmlsZSBvdXQgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIE5FRURTV09SSzogd2UgbWF5IHdhbnQgdG8gZml4IHRoZSBjYWxsZXIgdGhhdCBpbXBsZW1lbnRzICJyZXJlcmUKKyAqIHJlbWFpbmluZyIgdG8gZG8gdGhpcyB3aXRob3V0IGFidXNpbmcgbWVyZ2VfcnIuCisgKi8KK2ludCByZXJlcmVfcmVtYWluaW5nKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1lcmdlX3JyKQoreworCWludCBpOworCisJaWYgKHNldHVwX3JlcmVyZShyLCBtZXJnZV9yciwgUkVSRVJFX1JFQURPTkxZKSkKKwkJcmV0dXJuIDA7CisJaWYgKHJlcG9fcmVhZF9pbmRleChyKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgci0+aW5kZXgtPmNhY2hlX25yOykgeworCQlpbnQgY29uZmxpY3RfdHlwZTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICplID0gci0+aW5kZXgtPmNhY2hlW2ldOworCQlpID0gY2hlY2tfb25lX2NvbmZsaWN0KHItPmluZGV4LCBpLCAmY29uZmxpY3RfdHlwZSk7CisJCWlmIChjb25mbGljdF90eXBlID09IFBVTlRFRCkKKwkJCXN0cmluZ19saXN0X2luc2VydChtZXJnZV9yciwgKGNvbnN0IGNoYXIgKillLT5uYW1lKTsKKwkJZWxzZSBpZiAoY29uZmxpY3RfdHlwZSA9PSBSRVNPTFZFRCkgeworCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCQkJaXQgPSBzdHJpbmdfbGlzdF9sb29rdXAobWVyZ2VfcnIsIChjb25zdCBjaGFyICopZS0+bmFtZSk7CisJCQlpZiAoaXQgIT0gTlVMTCkgeworCQkJCWZyZWVfcmVyZXJlX2lkKGl0KTsKKwkJCQlpdC0+dXRpbCA9IFJFUkVSRV9SRVNPTFZFRDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRyeSB1c2luZyB0aGUgZ2l2ZW4gY29uZmxpY3QgcmVzb2x1dGlvbiAiSUQiIHRvIHNlZQorICogaWYgdGhhdCByZWNvcmRlZCBjb25mbGljdCByZXNvbHZlcyBjbGVhbmx5IHdoYXQgd2UKKyAqIGdvdCBpbiB0aGUgImN1ciIuCisgKi8KK3N0YXRpYyBpbnQgdHJ5X21lcmdlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICAgIGNvbnN0IHN0cnVjdCByZXJlcmVfaWQgKmlkLCBjb25zdCBjaGFyICpwYXRoLAorCQkgICAgIG1tZmlsZV90ICpjdXIsIG1tYnVmZmVyX3QgKnJlc3VsdCkKK3sKKwlpbnQgcmV0OworCW1tZmlsZV90IGJhc2UgPSB7TlVMTCwgMH0sIG90aGVyID0ge05VTEwsIDB9OworCisJaWYgKHJlYWRfbW1maWxlKCZiYXNlLCByZXJlcmVfcGF0aChpZCwgInByZWltYWdlIikpIHx8CisJICAgIHJlYWRfbW1maWxlKCZvdGhlciwgcmVyZXJlX3BhdGgoaWQsICJwb3N0aW1hZ2UiKSkpCisJCXJldCA9IDE7CisJZWxzZQorCQkvKgorCQkgKiBBIHRocmVlLXdheSBtZXJnZS4gTm90ZSB0aGF0IHRoaXMgaG9ub3JzIHVzZXItY3VzdG9taXphYmxlCisJCSAqIGxvdy1sZXZlbCBtZXJnZSBkcml2ZXIgc2V0dGluZ3MuCisJCSAqLworCQlyZXQgPSBsbF9tZXJnZShyZXN1bHQsIHBhdGgsICZiYXNlLCBOVUxMLCBjdXIsICIiLCAmb3RoZXIsICIiLAorCQkJICAgICAgIGlzdGF0ZSwgTlVMTCk7CisKKwlmcmVlKGJhc2UucHRyKTsKKwlmcmVlKG90aGVyLnB0cik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRmluZCB0aGUgY29uZmxpY3QgaWRlbnRpZmllZCBieSAiaWQiOyB0aGUgY2hhbmdlIGJldHdlZW4gaXRzCisgKiAicHJlaW1hZ2UiIChpLmUuIGEgcHJldmlvdXMgY29udGVudHMgd2l0aCBjb25mbGljdCBtYXJrZXJzKSBhbmQgaXRzCisgKiAicG9zdGltYWdlIiAoaS5lLiB0aGUgY29ycmVzcG9uZGluZyBjb250ZW50cyB3aXRoIGNvbmZsaWN0cworICogcmVzb2x2ZWQpIG1heSBhcHBseSBjbGVhbmx5IHRvIHRoZSBjb250ZW50cyBzdG9yZWQgaW4gInBhdGgiLCBpLmUuCisgKiB0aGUgY29uZmxpY3QgdGhpcyB0aW1lIGFyb3VuZC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3NmdWwgcmVwbGF5IG9mIHJlY29yZGVkIHJlc29sdXRpb24sIG9yIG5vbi16ZXJvCisgKiBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBtZXJnZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3Qgc3RydWN0IHJlcmVyZV9pZCAqaWQsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJRklMRSAqZjsKKwlpbnQgcmV0OworCW1tZmlsZV90IGN1ciA9IHtOVUxMLCAwfTsKKwltbWJ1ZmZlcl90IHJlc3VsdCA9IHtOVUxMLCAwfTsKKworCS8qCisJICogTm9ybWFsaXplIHRoZSBjb25mbGljdHMgaW4gcGF0aCBhbmQgd3JpdGUgaXQgb3V0IHRvCisJICogInRoaXNpbWFnZSIgdGVtcG9yYXJ5IGZpbGUuCisJICovCisJaWYgKChoYW5kbGVfZmlsZShpc3RhdGUsIHBhdGgsIE5VTEwsIHJlcmVyZV9wYXRoKGlkLCAidGhpc2ltYWdlIikpIDwgMCkgfHwKKwkgICAgcmVhZF9tbWZpbGUoJmN1ciwgcmVyZXJlX3BhdGgoaWQsICJ0aGlzaW1hZ2UiKSkpIHsKKwkJcmV0ID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gdHJ5X21lcmdlKGlzdGF0ZSwgaWQsIHBhdGgsICZjdXIsICZyZXN1bHQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBBIHN1Y2Nlc3NmdWwgcmVwbGF5IG9mIHJlY29yZGVkIHJlc29sdXRpb24uCisJICogTWFyayB0aGF0ICJwb3N0aW1hZ2UiIHdhcyB1c2VkIHRvIGhlbHAgZ2MuCisJICovCisJaWYgKHV0aW1lKHJlcmVyZV9wYXRoKGlkLCAicG9zdGltYWdlIiksIE5VTEwpIDwgMCkKKwkJd2FybmluZ19lcnJubyhfKCJmYWlsZWQgdXRpbWUoKSBvbiAnJXMnIiksCisJCQkgICAgICByZXJlcmVfcGF0aChpZCwgInBvc3RpbWFnZSIpKTsKKworCS8qIFVwZGF0ZSAicGF0aCIgd2l0aCB0aGUgcmVzb2x1dGlvbiAqLworCWYgPSBmb3BlbihwYXRoLCAidyIpOworCWlmICghZikKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcyciKSwgcGF0aCk7CisJaWYgKGZ3cml0ZShyZXN1bHQucHRyLCByZXN1bHQuc2l6ZSwgMSwgZikgIT0gMSkKKwkJZXJyb3JfZXJybm8oXygiY291bGQgbm90IHdyaXRlICclcyciKSwgcGF0aCk7CisJaWYgKGZjbG9zZShmKSkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oIndyaXRpbmcgJyVzJyBmYWlsZWQiKSwgcGF0aCk7CisKK291dDoKKwlmcmVlKGN1ci5wdHIpOworCWZyZWUocmVzdWx0LnB0cik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfcGF0aHMoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBzdHJpbmdfbGlzdCAqdXBkYXRlKQoreworCXN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jayA9IExPQ0tfSU5JVDsKKwlpbnQgaTsKKworCXJlcG9faG9sZF9sb2NrZWRfaW5kZXgociwgJmluZGV4X2xvY2ssIExPQ0tfRElFX09OX0VSUk9SKTsKKworCWZvciAoaSA9IDA7IGkgPCB1cGRhdGUtPm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSAmdXBkYXRlLT5pdGVtc1tpXTsKKwkJaWYgKGFkZF9maWxlX3RvX2luZGV4KHItPmluZGV4LCBpdGVtLT5zdHJpbmcsIDApKQorCQkJZXhpdCgxMjgpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiU3RhZ2VkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iKSwKKwkJCWl0ZW0tPnN0cmluZyk7CisJfQorCisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleChyLT5pbmRleCwgJmluZGV4X2xvY2ssCisJCQkgICAgICAgQ09NTUlUX0xPQ0sgfCBTS0lQX0lGX1VOQ0hBTkdFRCkpCisJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV92YXJpYW50KHN0cnVjdCByZXJlcmVfaWQgKmlkKQoreworCXVubGlua19vcl93YXJuKHJlcmVyZV9wYXRoKGlkLCAicG9zdGltYWdlIikpOworCXVubGlua19vcl93YXJuKHJlcmVyZV9wYXRoKGlkLCAicHJlaW1hZ2UiKSk7CisJaWQtPmNvbGxlY3Rpb24tPnN0YXR1c1tpZC0+dmFyaWFudF0gPSAwOworfQorCisvKgorICogVGhlIHBhdGggaW5kaWNhdGVkIGJ5IHJyX2l0ZW0gbWF5IHN0aWxsIGhhdmUgY29uZmxpY3QgZm9yIHdoaWNoIHdlCisgKiBoYXZlIGEgcmVjb3JkZWQgcmVzb2x1dGlvbiwgaW4gd2hpY2ggY2FzZSByZXBsYXkgaXQgYW5kIG9wdGlvbmFsbHkKKyAqIHVwZGF0ZSBpdC4gIE9yIGl0IG1heSBoYXZlIGJlZW4gcmVzb2x2ZWQgYnkgdGhlIHVzZXIgYW5kIHdlIG1heQorICogb25seSBoYXZlIHRoZSBwcmVpbWFnZSBmb3IgdGhhdCBjb25mbGljdCwgaW4gd2hpY2ggY2FzZSB0aGUgcmVzdWx0CisgKiBuZWVkcyB0byBiZSByZWNvcmRlZCBhcyBhIHJlc29sdXRpb24gaW4gYSBwb3N0aW1hZ2UgZmlsZS4KKyAqLworc3RhdGljIHZvaWQgZG9fcmVyZXJlX29uZV9wYXRoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpycl9pdGVtLAorCQkJICAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqdXBkYXRlKQoreworCWNvbnN0IGNoYXIgKnBhdGggPSBycl9pdGVtLT5zdHJpbmc7CisJc3RydWN0IHJlcmVyZV9pZCAqaWQgPSBycl9pdGVtLT51dGlsOworCXN0cnVjdCByZXJlcmVfZGlyICpycl9kaXIgPSBpZC0+Y29sbGVjdGlvbjsKKwlpbnQgdmFyaWFudDsKKworCXZhcmlhbnQgPSBpZC0+dmFyaWFudDsKKworCS8qIEhhcyB0aGUgdXNlciByZXNvbHZlZCBpdCBhbHJlYWR5PyAqLworCWlmICh2YXJpYW50ID49IDApIHsKKwkJaWYgKCFoYW5kbGVfZmlsZShpc3RhdGUsIHBhdGgsIE5VTEwsIE5VTEwpKSB7CisJCQljb3B5X2ZpbGUocmVyZXJlX3BhdGgoaWQsICJwb3N0aW1hZ2UiKSwgcGF0aCwgMDY2Nik7CisJCQlpZC0+Y29sbGVjdGlvbi0+c3RhdHVzW3ZhcmlhbnRdIHw9IFJSX0hBU19QT1NUSU1BR0U7CisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiUmVjb3JkZWQgcmVzb2x1dGlvbiBmb3IgJyVzJy4iKSwgcGF0aCk7CisJCQlmcmVlX3JlcmVyZV9pZChycl9pdGVtKTsKKwkJCXJyX2l0ZW0tPnV0aWwgPSBOVUxMOworCQkJcmV0dXJuOworCQl9CisJCS8qCisJCSAqIFRoZXJlIG1heSBiZSBvdGhlciB2YXJpYW50cyB0aGF0IGNhbiBjbGVhbmx5CisJCSAqIHJlcGxheS4gIFRyeSB0aGVtIGFuZCB1cGRhdGUgdGhlIHZhcmlhbnQgbnVtYmVyIGZvcgorCQkgKiB0aGlzIG9uZS4KKwkJICovCisJfQorCisJLyogRG9lcyBhbnkgZXhpc3RpbmcgcmVzb2x1dGlvbiBhcHBseSBjbGVhbmx5PyAqLworCWZvciAodmFyaWFudCA9IDA7IHZhcmlhbnQgPCBycl9kaXItPnN0YXR1c19ucjsgdmFyaWFudCsrKSB7CisJCWNvbnN0IGludCBib3RoID0gUlJfSEFTX1BSRUlNQUdFIHwgUlJfSEFTX1BPU1RJTUFHRTsKKwkJc3RydWN0IHJlcmVyZV9pZCB2aWQgPSAqaWQ7CisKKwkJaWYgKChycl9kaXItPnN0YXR1c1t2YXJpYW50XSAmIGJvdGgpICE9IGJvdGgpCisJCQljb250aW51ZTsKKworCQl2aWQudmFyaWFudCA9IHZhcmlhbnQ7CisJCWlmIChtZXJnZShpc3RhdGUsICZ2aWQsIHBhdGgpKQorCQkJY29udGludWU7IC8qIGZhaWxlZCB0byByZXBsYXkgKi8KKworCQkvKgorCQkgKiBJZiB0aGVyZSBhbHJlYWR5IGlzIGEgZGlmZmVyZW50IHZhcmlhbnQgdGhhdCBhcHBsaWVzCisJCSAqIGNsZWFubHksIHRoZXJlIGlzIG5vIHBvaW50IG1haW50YWluaW5nIG91ciBvd24gdmFyaWFudC4KKwkJICovCisJCWlmICgwIDw9IGlkLT52YXJpYW50ICYmIGlkLT52YXJpYW50ICE9IHZhcmlhbnQpCisJCQlyZW1vdmVfdmFyaWFudChpZCk7CisKKwkJaWYgKHJlcmVyZV9hdXRvdXBkYXRlKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KHVwZGF0ZSwgcGF0aCk7CisJCWVsc2UKKwkJCWZwcmludGZfbG4oc3RkZXJyLAorCQkJCSAgIF8oIlJlc29sdmVkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iKSwKKwkJCQkgICBwYXRoKTsKKwkJZnJlZV9yZXJlcmVfaWQocnJfaXRlbSk7CisJCXJyX2l0ZW0tPnV0aWwgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJLyogTm9uZSBvZiB0aGUgZXhpc3Rpbmcgb25lIGFwcGxpZXM7IHdlIG5lZWQgYSBuZXcgdmFyaWFudCAqLworCWFzc2lnbl92YXJpYW50KGlkKTsKKworCXZhcmlhbnQgPSBpZC0+dmFyaWFudDsKKwloYW5kbGVfZmlsZShpc3RhdGUsIHBhdGgsIE5VTEwsIHJlcmVyZV9wYXRoKGlkLCAicHJlaW1hZ2UiKSk7CisJaWYgKGlkLT5jb2xsZWN0aW9uLT5zdGF0dXNbdmFyaWFudF0gJiBSUl9IQVNfUE9TVElNQUdFKSB7CisJCWNvbnN0IGNoYXIgKnBhdGggPSByZXJlcmVfcGF0aChpZCwgInBvc3RpbWFnZSIpOworCQlpZiAodW5saW5rKHBhdGgpKQorCQkJZGllX2Vycm5vKF8oImNhbm5vdCB1bmxpbmsgc3RyYXkgJyVzJyIpLCBwYXRoKTsKKwkJaWQtPmNvbGxlY3Rpb24tPnN0YXR1c1t2YXJpYW50XSAmPSB+UlJfSEFTX1BPU1RJTUFHRTsKKwl9CisJaWQtPmNvbGxlY3Rpb24tPnN0YXR1c1t2YXJpYW50XSB8PSBSUl9IQVNfUFJFSU1BR0U7CisJZnByaW50Zl9sbihzdGRlcnIsIF8oIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnIiksIHBhdGgpOworfQorCitzdGF0aWMgaW50IGRvX3BsYWluX3JlcmVyZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqcnIsIGludCBmZCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY29uZmxpY3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgdXBkYXRlID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJaW50IGk7CisKKwlmaW5kX2NvbmZsaWN0KHIsICZjb25mbGljdCk7CisKKwkvKgorCSAqIE1FUkdFX1JSIHJlY29yZHMgcGF0aHMgd2l0aCBjb25mbGljdHMgaW1tZWRpYXRlbHkgYWZ0ZXIKKwkgKiBtZXJnZSBmYWlsZWQuICBTb21lIG9mIHRoZSBjb25mbGljdGVkIHBhdGhzIG1pZ2h0IGhhdmUgYmVlbgorCSAqIGhhbmQgcmVzb2x2ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSBzaW5jZSB0aGVuLCBidXQgdGhlCisJICogaW5pdGlhbCBydW4gd291bGQgY2F0Y2ggYWxsIGFuZCByZWdpc3RlciB0aGVpciBwcmVpbWFnZXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IGNvbmZsaWN0Lm5yOyBpKyspIHsKKwkJc3RydWN0IHJlcmVyZV9pZCAqaWQ7CisJCXVuc2lnbmVkIGNoYXIgaGFzaFtHSVRfTUFYX1JBV1NaXTsKKwkJY29uc3QgY2hhciAqcGF0aCA9IGNvbmZsaWN0Lml0ZW1zW2ldLnN0cmluZzsKKwkJaW50IHJldDsKKworCQkvKgorCQkgKiBBc2sgaGFuZGxlX2ZpbGUoKSB0byBzY2FuIGFuZCBhc3NpZ24gYQorCQkgKiBjb25mbGljdCBJRC4gIE5vIG5lZWQgdG8gd3JpdGUgYW55dGhpbmcgb3V0CisJCSAqIHlldC4KKwkJICovCisJCXJldCA9IGhhbmRsZV9maWxlKHItPmluZGV4LCBwYXRoLCBoYXNoLCBOVUxMKTsKKwkJaWYgKHJldCAhPSAwICYmIHN0cmluZ19saXN0X2hhc19zdHJpbmcocnIsIHBhdGgpKSB7CisJCQlyZW1vdmVfdmFyaWFudChzdHJpbmdfbGlzdF9sb29rdXAocnIsIHBhdGgpLT51dGlsKTsKKwkJCXN0cmluZ19saXN0X3JlbW92ZShyciwgcGF0aCwgMSk7CisJCX0KKwkJaWYgKHJldCA8IDEpCisJCQljb250aW51ZTsKKworCQlpZCA9IG5ld19yZXJlcmVfaWQoaGFzaCk7CisJCXN0cmluZ19saXN0X2luc2VydChyciwgcGF0aCktPnV0aWwgPSBpZDsKKworCQkvKiBFbnN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGV4aXN0cy4gKi8KKwkJbWtkaXJfaW5fZ2l0ZGlyKHJlcmVyZV9wYXRoKGlkLCBOVUxMKSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJyLT5ucjsgaSsrKQorCQlkb19yZXJlcmVfb25lX3BhdGgoci0+aW5kZXgsICZyci0+aXRlbXNbaV0sICZ1cGRhdGUpOworCisJaWYgKHVwZGF0ZS5ucikKKwkJdXBkYXRlX3BhdGhzKHIsICZ1cGRhdGUpOworCisJcmV0dXJuIHdyaXRlX3JyKHJyLCBmZCk7Cit9CisKK3N0YXRpYyB2b2lkIGdpdF9yZXJlcmVfY29uZmlnKHZvaWQpCit7CisJZ2l0X2NvbmZpZ19nZXRfYm9vbCgicmVyZXJlLmVuYWJsZWQiLCAmcmVyZXJlX2VuYWJsZWQpOworCWdpdF9jb25maWdfZ2V0X2Jvb2woInJlcmVyZS5hdXRvdXBkYXRlIiwgJnJlcmVyZV9hdXRvdXBkYXRlKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7Cit9CisKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX3JyX2NhY2hlLCAicnItY2FjaGUiKQorCitzdGF0aWMgaW50IGlzX3JlcmVyZV9lbmFibGVkKHZvaWQpCit7CisJaW50IHJyX2NhY2hlX2V4aXN0czsKKworCWlmICghcmVyZXJlX2VuYWJsZWQpCisJCXJldHVybiAwOworCisJcnJfY2FjaGVfZXhpc3RzID0gaXNfZGlyZWN0b3J5KGdpdF9wYXRoX3JyX2NhY2hlKCkpOworCWlmIChyZXJlcmVfZW5hYmxlZCA8IDApCisJCXJldHVybiBycl9jYWNoZV9leGlzdHM7CisKKwlpZiAoIXJyX2NhY2hlX2V4aXN0cyAmJiBta2Rpcl9pbl9naXRkaXIoZ2l0X3BhdGhfcnJfY2FjaGUoKSkpCisJCWRpZShfKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIiksIGdpdF9wYXRoX3JyX2NhY2hlKCkpOworCXJldHVybiAxOworfQorCitpbnQgc2V0dXBfcmVyZXJlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1lcmdlX3JyLCBpbnQgZmxhZ3MpCit7CisJaW50IGZkOworCisJZ2l0X3JlcmVyZV9jb25maWcoKTsKKwlpZiAoIWlzX3JlcmVyZV9lbmFibGVkKCkpCisJCXJldHVybiAtMTsKKworCWlmIChmbGFncyAmIChSRVJFUkVfQVVUT1VQREFURXxSRVJFUkVfTk9BVVRPVVBEQVRFKSkKKwkJcmVyZXJlX2F1dG91cGRhdGUgPSAhIShmbGFncyAmIFJFUkVSRV9BVVRPVVBEQVRFKTsKKwlpZiAoZmxhZ3MgJiBSRVJFUkVfUkVBRE9OTFkpCisJCWZkID0gMDsKKwllbHNlCisJCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmd3JpdGVfbG9jaywKKwkJCQkJICAgICAgIGdpdF9wYXRoX21lcmdlX3JyKHIpLAorCQkJCQkgICAgICAgTE9DS19ESUVfT05fRVJST1IpOworCXJlYWRfcnIociwgbWVyZ2VfcnIpOworCXJldHVybiBmZDsKK30KKworLyoKKyAqIFRoZSBtYWluIGVudHJ5IHBvaW50IHRoYXQgaXMgY2FsbGVkIGludGVybmFsbHkgZnJvbSBjb2RlcGF0aHMgdGhhdAorICogcGVyZm9ybSBtZXJneSBvcGVyYXRpb25zLCBwb3NzaWJseSBsZWF2aW5nIGNvbmZsaWN0ZWQgaW5kZXggZW50cmllcworICogYW5kIHdvcmtpbmcgdHJlZSBmaWxlcy4KKyAqLworaW50IHJlcG9fcmVyZXJlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN0cmluZ19saXN0IG1lcmdlX3JyID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJaW50IGZkLCBzdGF0dXM7CisKKwlmZCA9IHNldHVwX3JlcmVyZShyLCAmbWVyZ2VfcnIsIGZsYWdzKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gMDsKKwlzdGF0dXMgPSBkb19wbGFpbl9yZXJlcmUociwgJm1lcmdlX3JyLCBmZCk7CisJZnJlZV9yZXJlcmVfZGlycygpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBTdWJjbGFzcyBvZiByZXJlcmVfaW8gdGhhdCByZWFkcyBmcm9tIGFuIGluLWNvcmUgYnVmZmVyIHRoYXQgaXMgYQorICogc3RyYnVmCisgKi8KK3N0cnVjdCByZXJlcmVfaW9fbWVtIHsKKwlzdHJ1Y3QgcmVyZXJlX2lvIGlvOworCXN0cnVjdCBzdHJidWYgaW5wdXQ7Cit9OworCisvKgorICogLi4uIGFuZCBpdHMgZ2V0bGluZSgpIG1ldGhvZCBpbXBsZW1lbnRhdGlvbgorICovCitzdGF0aWMgaW50IHJlcmVyZV9tZW1fZ2V0bGluZShzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IHJlcmVyZV9pbyAqaW9fKQoreworCXN0cnVjdCByZXJlcmVfaW9fbWVtICppbyA9IChzdHJ1Y3QgcmVyZXJlX2lvX21lbSAqKWlvXzsKKwljaGFyICplcDsKKwlzaXplX3QgbGVuOworCisJc3RyYnVmX3JlbGVhc2Uoc2IpOworCWlmICghaW8tPmlucHV0LmxlbikKKwkJcmV0dXJuIC0xOworCWVwID0gbWVtY2hyKGlvLT5pbnB1dC5idWYsICdcbicsIGlvLT5pbnB1dC5sZW4pOworCWlmICghZXApCisJCWVwID0gaW8tPmlucHV0LmJ1ZiArIGlvLT5pbnB1dC5sZW47CisJZWxzZSBpZiAoKmVwID09ICdcbicpCisJCWVwKys7CisJbGVuID0gZXAgLSBpby0+aW5wdXQuYnVmOworCXN0cmJ1Zl9hZGQoc2IsIGlvLT5pbnB1dC5idWYsIGxlbik7CisJc3RyYnVmX3JlbW92ZSgmaW8tPmlucHV0LCAwLCBsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9jYWNoZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCWNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGNoYXIgKmhhc2gsIGNvbnN0IGNoYXIgKm91dHB1dCkKK3sKKwltbWZpbGVfdCBtbWZpbGVbM10gPSB7e05VTEx9fTsKKwltbWJ1ZmZlcl90IHJlc3VsdCA9IHtOVUxMLCAwfTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCWludCBwb3MsIGxlbiwgaSwgaGFzX2NvbmZsaWN0czsKKwlzdHJ1Y3QgcmVyZXJlX2lvX21lbSBpbzsKKwlpbnQgbWFya2VyX3NpemUgPSBsbF9tZXJnZV9tYXJrZXJfc2l6ZShpc3RhdGUsIHBhdGgpOworCisJLyoKKwkgKiBSZXByb2R1Y2UgdGhlIGNvbmZsaWN0ZWQgbWVyZ2UgaW4tY29yZQorCSAqLworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIHBhdGgsIGxlbik7CisJaWYgKDAgPD0gcG9zKQorCQlyZXR1cm4gLTE7CisJcG9zID0gLXBvcyAtIDE7CisKKwl3aGlsZSAocG9zIDwgaXN0YXRlLT5jYWNoZV9ucikgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCQljZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zKytdOworCQlpZiAoY2VfbmFtZWxlbihjZSkgIT0gbGVuIHx8IG1lbWNtcChjZS0+bmFtZSwgcGF0aCwgbGVuKSkKKwkJCWJyZWFrOworCQlpID0gY2Vfc3RhZ2UoY2UpIC0gMTsKKwkJaWYgKCFtbWZpbGVbaV0ucHRyKSB7CisJCQltbWZpbGVbaV0ucHRyID0gcmVhZF9vYmplY3RfZmlsZSgmY2UtPm9pZCwgJnR5cGUsCisJCQkJCQkJICZzaXplKTsKKwkJCW1tZmlsZVtpXS5zaXplID0gc2l6ZTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlpZiAoIW1tZmlsZVtpXS5wdHIgJiYgIW1tZmlsZVtpXS5zaXplKQorCQkJbW1maWxlW2ldLnB0ciA9IHhzdHJkdXAoIiIpOworCisJLyoKKwkgKiBORUVEU1dPUks6IGhhbmRsZSBjb25mbGljdHMgZnJvbSBtZXJnZXMgd2l0aAorCSAqIG1lcmdlLnJlbm9ybWFsaXplIHNldCwgdG9vPworCSAqLworCWxsX21lcmdlKCZyZXN1bHQsIHBhdGgsICZtbWZpbGVbMF0sIE5VTEwsCisJCSAmbW1maWxlWzFdLCAib3VycyIsCisJCSAmbW1maWxlWzJdLCAidGhlaXJzIiwKKwkJIGlzdGF0ZSwgTlVMTCk7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJZnJlZShtbWZpbGVbaV0ucHRyKTsKKworCW1lbXNldCgmaW8sIDAsIHNpemVvZihpbykpOworCWlvLmlvLmdldGxpbmUgPSByZXJlcmVfbWVtX2dldGxpbmU7CisJaWYgKG91dHB1dCkKKwkJaW8uaW8ub3V0cHV0ID0gZm9wZW4ob3V0cHV0LCAidyIpOworCWVsc2UKKwkJaW8uaW8ub3V0cHV0ID0gTlVMTDsKKwlzdHJidWZfaW5pdCgmaW8uaW5wdXQsIDApOworCXN0cmJ1Zl9hdHRhY2goJmlvLmlucHV0LCByZXN1bHQucHRyLCByZXN1bHQuc2l6ZSwgcmVzdWx0LnNpemUpOworCisJLyoKKwkgKiBHcmFiIHRoZSBjb25mbGljdCBJRCBhbmQgb3B0aW9uYWxseSB3cml0ZSB0aGUgb3JpZ2luYWwKKwkgKiBjb250ZW50cyB3aXRoIGNvbmZsaWN0IG1hcmtlcnMgb3V0LgorCSAqLworCWhhc19jb25mbGljdHMgPSBoYW5kbGVfcGF0aChoYXNoLCAoc3RydWN0IHJlcmVyZV9pbyAqKSZpbywgbWFya2VyX3NpemUpOworCXN0cmJ1Zl9yZWxlYXNlKCZpby5pbnB1dCk7CisJaWYgKGlvLmlvLm91dHB1dCkKKwkJZmNsb3NlKGlvLmlvLm91dHB1dCk7CisJcmV0dXJuIGhhc19jb25mbGljdHM7Cit9CisKK3N0YXRpYyBpbnQgcmVyZXJlX2ZvcmdldF9vbmVfcGF0aChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJyKQoreworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCXN0cnVjdCByZXJlcmVfaWQgKmlkOworCXVuc2lnbmVkIGNoYXIgaGFzaFtHSVRfTUFYX1JBV1NaXTsKKwlpbnQgcmV0OworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJLyoKKwkgKiBSZWNyZWF0ZSB0aGUgb3JpZ2luYWwgY29uZmxpY3QgZnJvbSB0aGUgc3RhZ2VzIGluIHRoZQorCSAqIGluZGV4IGFuZCBjb21wdXRlIHRoZSBjb25mbGljdCBJRAorCSAqLworCXJldCA9IGhhbmRsZV9jYWNoZShpc3RhdGUsIHBhdGgsIGhhc2gsIE5VTEwpOworCWlmIChyZXQgPCAxKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIGNvbmZsaWN0IGh1bmtzIGluICclcyciKSwgcGF0aCk7CisKKwkvKiBOdWtlIHRoZSByZWNvcmRlZCByZXNvbHV0aW9uIGZvciB0aGUgY29uZmxpY3QgKi8KKwlpZCA9IG5ld19yZXJlcmVfaWQoaGFzaCk7CisKKwlmb3IgKGlkLT52YXJpYW50ID0gMDsKKwkgICAgIGlkLT52YXJpYW50IDwgaWQtPmNvbGxlY3Rpb24tPnN0YXR1c19ucjsKKwkgICAgIGlkLT52YXJpYW50KyspIHsKKwkJbW1maWxlX3QgY3VyID0geyBOVUxMLCAwIH07CisJCW1tYnVmZmVyX3QgcmVzdWx0ID0ge05VTEwsIDB9OworCQlpbnQgY2xlYW5seV9yZXNvbHZlZDsKKworCQlpZiAoIWhhc19yZXJlcmVfcmVzb2x1dGlvbihpZCkpCisJCQljb250aW51ZTsKKworCQloYW5kbGVfY2FjaGUoaXN0YXRlLCBwYXRoLCBoYXNoLCByZXJlcmVfcGF0aChpZCwgInRoaXNpbWFnZSIpKTsKKwkJaWYgKHJlYWRfbW1maWxlKCZjdXIsIHJlcmVyZV9wYXRoKGlkLCAidGhpc2ltYWdlIikpKSB7CisJCQlmcmVlKGN1ci5wdHIpOworCQkJZXJyb3IoXygiZmFpbGVkIHRvIHVwZGF0ZSBjb25mbGljdGVkIHN0YXRlIGluICclcyciKSwgcGF0aCk7CisJCQlnb3RvIGZhaWxfZXhpdDsKKwkJfQorCQljbGVhbmx5X3Jlc29sdmVkID0gIXRyeV9tZXJnZShpc3RhdGUsIGlkLCBwYXRoLCAmY3VyLCAmcmVzdWx0KTsKKwkJZnJlZShyZXN1bHQucHRyKTsKKwkJZnJlZShjdXIucHRyKTsKKwkJaWYgKGNsZWFubHlfcmVzb2x2ZWQpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaWQtPmNvbGxlY3Rpb24tPnN0YXR1c19uciA8PSBpZC0+dmFyaWFudCkgeworCQllcnJvcihfKCJubyByZW1lbWJlcmVkIHJlc29sdXRpb24gZm9yICclcyciKSwgcGF0aCk7CisJCWdvdG8gZmFpbF9leGl0OworCX0KKworCWZpbGVuYW1lID0gcmVyZXJlX3BhdGgoaWQsICJwb3N0aW1hZ2UiKTsKKwlpZiAodW5saW5rKGZpbGVuYW1lKSkgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJZXJyb3IoXygibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIiksIHBhdGgpOworCQllbHNlCisJCQllcnJvcl9lcnJubyhfKCJjYW5ub3QgdW5saW5rICclcyciKSwgZmlsZW5hbWUpOworCQlnb3RvIGZhaWxfZXhpdDsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgcHJlaW1hZ2Ugc28gdGhhdCB0aGUgdXNlciBjYW4gcmVzb2x2ZSB0aGUKKwkgKiBjb25mbGljdCBpbiB0aGUgd29ya2luZyB0cmVlLCBydW4gdXMgYWdhaW4gdG8gcmVjb3JkCisJICogdGhlIHBvc3RpbWFnZS4KKwkgKi8KKwloYW5kbGVfY2FjaGUoaXN0YXRlLCBwYXRoLCBoYXNoLCByZXJlcmVfcGF0aChpZCwgInByZWltYWdlIikpOworCWZwcmludGZfbG4oc3RkZXJyLCBfKCJVcGRhdGVkIHByZWltYWdlIGZvciAnJXMnIiksIHBhdGgpOworCisJLyoKKwkgKiBBbmQgcmVtZW1iZXIgdGhhdCB3ZSBjYW4gcmVjb3JkIHJlc29sdXRpb24gZm9yIHRoaXMKKwkgKiBjb25mbGljdCB3aGVuIHRoZSB1c2VyIGlzIGRvbmUuCisJICovCisJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChyciwgcGF0aCk7CisJZnJlZV9yZXJlcmVfaWQoaXRlbSk7CisJaXRlbS0+dXRpbCA9IGlkOworCWZwcmludGYoc3RkZXJyLCBfKCJGb3Jnb3QgcmVzb2x1dGlvbiBmb3IgJyVzJ1xuIiksIHBhdGgpOworCXJldHVybiAwOworCitmYWlsX2V4aXQ6CisJZnJlZShpZCk7CisJcmV0dXJuIC0xOworfQorCitpbnQgcmVyZXJlX2ZvcmdldChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwlpbnQgaSwgZmQ7CisJc3RydWN0IHN0cmluZ19saXN0IGNvbmZsaWN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IG1lcmdlX3JyID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwlpZiAocmVwb19yZWFkX2luZGV4KHIpIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKworCWZkID0gc2V0dXBfcmVyZXJlKHIsICZtZXJnZV9yciwgUkVSRVJFX05PQVVUT1VQREFURSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFRoZSBwYXRocyBtYXkgaGF2ZSBiZWVuIHJlc29sdmVkIChpbmNvcnJlY3RseSk7CisJICogcmVjb3ZlciB0aGUgb3JpZ2luYWwgY29uZmxpY3RlZCBzdGF0ZSBhbmQgdGhlbgorCSAqIGZpbmQgdGhlIGNvbmZsaWN0ZWQgcGF0aHMuCisJICovCisJdW5tZXJnZV9pbmRleChyLT5pbmRleCwgcGF0aHNwZWMpOworCWZpbmRfY29uZmxpY3QociwgJmNvbmZsaWN0KTsKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmxpY3QubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQgPSAmY29uZmxpY3QuaXRlbXNbaV07CisJCWlmICghbWF0Y2hfcGF0aHNwZWMoci0+aW5kZXgsIHBhdGhzcGVjLCBpdC0+c3RyaW5nLAorCQkJCSAgICBzdHJsZW4oaXQtPnN0cmluZyksIDAsIE5VTEwsIDApKQorCQkJY29udGludWU7CisJCXJlcmVyZV9mb3JnZXRfb25lX3BhdGgoci0+aW5kZXgsIGl0LT5zdHJpbmcsICZtZXJnZV9ycik7CisJfQorCXJldHVybiB3cml0ZV9ycigmbWVyZ2VfcnIsIGZkKTsKK30KKworLyoKKyAqIEdhcmJhZ2UgY29sbGVjdGlvbiBzdXBwb3J0CisgKi8KKworc3RhdGljIHRpbWVzdGFtcF90IHJlcmVyZV9jcmVhdGVkX2F0KHN0cnVjdCByZXJlcmVfaWQgKmlkKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJcmV0dXJuIHN0YXQocmVyZXJlX3BhdGgoaWQsICJwcmVpbWFnZSIpLCAmc3QpID8gKHRpbWVfdCkgMCA6IHN0LnN0X210aW1lOworfQorCitzdGF0aWMgdGltZXN0YW1wX3QgcmVyZXJlX2xhc3RfdXNlZF9hdChzdHJ1Y3QgcmVyZXJlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCXJldHVybiBzdGF0KHJlcmVyZV9wYXRoKGlkLCAicG9zdGltYWdlIiksICZzdCkgPyAodGltZV90KSAwIDogc3Quc3RfbXRpbWU7Cit9CisKKy8qCisgKiBSZW1vdmUgdGhlIHJlY29yZGVkIHJlc29sdXRpb24gZm9yIGEgZ2l2ZW4gY29uZmxpY3QgSUQKKyAqLworc3RhdGljIHZvaWQgdW5saW5rX3JyX2l0ZW0oc3RydWN0IHJlcmVyZV9pZCAqaWQpCit7CisJdW5saW5rX29yX3dhcm4ocmVyZXJlX3BhdGgoaWQsICJ0aGlzaW1hZ2UiKSk7CisJcmVtb3ZlX3ZhcmlhbnQoaWQpOworCWlkLT5jb2xsZWN0aW9uLT5zdGF0dXNbaWQtPnZhcmlhbnRdID0gMDsKK30KKworc3RhdGljIHZvaWQgcHJ1bmVfb25lKHN0cnVjdCByZXJlcmVfaWQgKmlkLAorCQkgICAgICB0aW1lc3RhbXBfdCBjdXRvZmZfcmVzb2x2ZSwgdGltZXN0YW1wX3QgY3V0b2ZmX25vcmVzb2x2ZSkKK3sKKwl0aW1lc3RhbXBfdCB0aGVuOworCXRpbWVzdGFtcF90IGN1dG9mZjsKKworCXRoZW4gPSByZXJlcmVfbGFzdF91c2VkX2F0KGlkKTsKKwlpZiAodGhlbikKKwkJY3V0b2ZmID0gY3V0b2ZmX3Jlc29sdmU7CisJZWxzZSB7CisJCXRoZW4gPSByZXJlcmVfY3JlYXRlZF9hdChpZCk7CisJCWlmICghdGhlbikKKwkJCXJldHVybjsKKwkJY3V0b2ZmID0gY3V0b2ZmX25vcmVzb2x2ZTsKKwl9CisJaWYgKHRoZW4gPCBjdXRvZmYpCisJCXVubGlua19ycl9pdGVtKGlkKTsKK30KKwordm9pZCByZXJlcmVfZ2Moc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBzdHJpbmdfbGlzdCAqcnIpCit7CisJc3RydWN0IHN0cmluZ19saXN0IHRvX3JlbW92ZSA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmU7CisJaW50IGk7CisJdGltZXN0YW1wX3Qgbm93ID0gdGltZShOVUxMKTsKKwl0aW1lc3RhbXBfdCBjdXRvZmZfbm9yZXNvbHZlID0gbm93IC0gMTUgKiA4NjQwMDsKKwl0aW1lc3RhbXBfdCBjdXRvZmZfcmVzb2x2ZSA9IG5vdyAtIDYwICogODY0MDA7CisKKwlpZiAoc2V0dXBfcmVyZXJlKHIsIHJyLCAwKSA8IDApCisJCXJldHVybjsKKworCWdpdF9jb25maWdfZ2V0X2V4cGlyeV9pbl9kYXlzKCJnYy5yZXJlcmVyZXNvbHZlZCIsICZjdXRvZmZfcmVzb2x2ZSwgbm93KTsKKwlnaXRfY29uZmlnX2dldF9leHBpcnlfaW5fZGF5cygiZ2MucmVyZXJldW5yZXNvbHZlZCIsICZjdXRvZmZfbm9yZXNvbHZlLCBub3cpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlkaXIgPSBvcGVuZGlyKGdpdF9wYXRoKCJyci1jYWNoZSIpKTsKKwlpZiAoIWRpcikKKwkJZGllX2Vycm5vKF8oInVuYWJsZSB0byBvcGVuIHJyLWNhY2hlIGRpcmVjdG9yeSIpKTsKKwkvKiBDb2xsZWN0IHN0YWxlIGNvbmZsaWN0IElEcyAuLi4gKi8KKwl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpKSB7CisJCXN0cnVjdCByZXJlcmVfZGlyICpycl9kaXI7CisJCXN0cnVjdCByZXJlcmVfaWQgaWQ7CisJCWludCBub3dfZW1wdHk7CisKKwkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCQlycl9kaXIgPSBmaW5kX3JlcmVyZV9kaXIoZS0+ZF9uYW1lKTsKKwkJaWYgKCFycl9kaXIpCisJCQljb250aW51ZTsgLyogb3Igc2hvdWxkIHdlIHJlbW92ZSBlLT5kX25hbWU/ICovCisKKwkJbm93X2VtcHR5ID0gMTsKKwkJZm9yIChpZC52YXJpYW50ID0gMCwgaWQuY29sbGVjdGlvbiA9IHJyX2RpcjsKKwkJICAgICBpZC52YXJpYW50IDwgaWQuY29sbGVjdGlvbi0+c3RhdHVzX25yOworCQkgICAgIGlkLnZhcmlhbnQrKykgeworCQkJcHJ1bmVfb25lKCZpZCwgY3V0b2ZmX3Jlc29sdmUsIGN1dG9mZl9ub3Jlc29sdmUpOworCQkJaWYgKGlkLmNvbGxlY3Rpb24tPnN0YXR1c1tpZC52YXJpYW50XSkKKwkJCQlub3dfZW1wdHkgPSAwOworCQl9CisJCWlmIChub3dfZW1wdHkpCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnRvX3JlbW92ZSwgZS0+ZF9uYW1lKTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKworCS8qIC4uLiBhbmQgdGhlbiByZW1vdmUgdGhlIGVtcHR5IGRpcmVjdG9yaWVzICovCisJZm9yIChpID0gMDsgaSA8IHRvX3JlbW92ZS5ucjsgaSsrKQorCQlybWRpcihnaXRfcGF0aCgicnItY2FjaGUvJXMiLCB0b19yZW1vdmUuaXRlbXNbaV0uc3RyaW5nKSk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnRvX3JlbW92ZSwgMCk7CisJcm9sbGJhY2tfbG9ja19maWxlKCZ3cml0ZV9sb2NrKTsKK30KKworLyoKKyAqIER1cmluZyBhIGNvbmZsaWN0IHJlc29sdXRpb24sIGFmdGVyICJyZXJlcmUiIHJlY29yZGVkIHRoZQorICogcHJlaW1hZ2VzLCBhYmFuZG9uIHRoZW0gaWYgdGhlIHVzZXIgZGlkIG5vdCByZXNvbHZlIHRoZW0gb3IKKyAqIHJlY29yZCB0aGVpciByZXNvbHV0aW9ucy4gIEFuZCBkcm9wICRHSVRfRElSL01FUkdFX1JSLgorICoKKyAqIE5FRURTV09SSzogc2hvdWxkbid0IHdlIGJlIGNhbGxpbmcgdGhpcyBmcm9tICJyZXNldCAtLWhhcmQiPworICovCit2b2lkIHJlcmVyZV9jbGVhcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHN0cmluZ19saXN0ICptZXJnZV9ycikKK3sKKwlpbnQgaTsKKworCWlmIChzZXR1cF9yZXJlcmUociwgbWVyZ2VfcnIsIDApIDwgMCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IG1lcmdlX3JyLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZXJlcmVfaWQgKmlkID0gbWVyZ2VfcnItPml0ZW1zW2ldLnV0aWw7CisJCWlmICghaGFzX3JlcmVyZV9yZXNvbHV0aW9uKGlkKSkgeworCQkJdW5saW5rX3JyX2l0ZW0oaWQpOworCQkJcm1kaXIocmVyZXJlX3BhdGgoaWQsIE5VTEwpKTsKKwkJfQorCX0KKwl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aF9tZXJnZV9ycihyKSk7CisJcm9sbGJhY2tfbG9ja19maWxlKCZ3cml0ZV9sb2NrKTsKK30KZGlmZiAtLWdpdCBhL3JlcmVyZS5oIGIvcmVyZXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyZDc5YwotLS0gL2Rldi9udWxsCisrKyBiL3JlcmVyZS5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgUkVSRVJFX0gKKyNkZWZpbmUgUkVSRVJFX0gKKworI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0cnVjdCBwYXRoc3BlYzsKK3N0cnVjdCByZXBvc2l0b3J5OworCisjZGVmaW5lIFJFUkVSRV9BVVRPVVBEQVRFICAgMDEKKyNkZWZpbmUgUkVSRVJFX05PQVVUT1VQREFURSAwMgorI2RlZmluZSBSRVJFUkVfUkVBRE9OTFkgICAgIDA0CisKKy8qCisgKiBNYXJrcyBwYXRocyB0aGF0IGhhdmUgYmVlbiBoYW5kLXJlc29sdmVkIGFuZCBhZGRlZCB0byB0aGUKKyAqIGluZGV4LiBTZXQgaW4gdGhlIHV0aWwgZmllbGQgb2Ygc3VjaCBwYXRocyBhZnRlciBjYWxsaW5nCisgKiByZXJlcmVfcmVtYWluaW5nLgorICovCitleHRlcm4gdm9pZCAqUkVSRVJFX1JFU09MVkVEOworCitzdHJ1Y3QgcmVyZXJlX2RpcjsKK3N0cnVjdCByZXJlcmVfaWQgeworCXN0cnVjdCByZXJlcmVfZGlyICpjb2xsZWN0aW9uOworCWludCB2YXJpYW50OworfTsKKworaW50IHNldHVwX3JlcmVyZShzdHJ1Y3QgcmVwb3NpdG9yeSAqLHN0cnVjdCBzdHJpbmdfbGlzdCAqLCBpbnQpOworI2lmbmRlZiBOT19USEVfUkVQT1NJVE9SWV9DT01QQVRJQklMSVRZX01BQ1JPUworI2RlZmluZSByZXJlcmUoZmxhZ3MpIHJlcG9fcmVyZXJlKHRoZV9yZXBvc2l0b3J5LCBmbGFncykKKyNlbmRpZgoraW50IHJlcG9fcmVyZXJlKHN0cnVjdCByZXBvc2l0b3J5ICosIGludCk7CisvKgorICogR2l2ZW4gdGhlIGNvbmZsaWN0IElEIGFuZCB0aGUgbmFtZSBvZiBhICJmaWxlIiB1c2VkIGZvciByZXBsYXlpbmcKKyAqIHRoZSByZWNvcmRlZCByZXNvbHV0aW9uIChlLmcuICJwcmVpbWFnZSIsICJwb3N0aW1hZ2UiKSwgcmV0dXJuIHRoZQorICogcGF0aCB0byB0aGF0IGZpbGVzeXN0ZW0gZW50aXR5LiAgV2l0aCAiZmlsZSIgc3BlY2lmaWVkIHdpdGggTlVMTCwKKyAqIHJldHVybiB0aGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRoYXQgaG91c2VzIHRoZXNlIGZpbGVzLgorICovCitjb25zdCBjaGFyICpyZXJlcmVfcGF0aChjb25zdCBzdHJ1Y3QgcmVyZXJlX2lkICosIGNvbnN0IGNoYXIgKmZpbGUpOworaW50IHJlcmVyZV9mb3JnZXQoc3RydWN0IHJlcG9zaXRvcnkgKiwgc3RydWN0IHBhdGhzcGVjICopOworaW50IHJlcmVyZV9yZW1haW5pbmcoc3RydWN0IHJlcG9zaXRvcnkgKiwgc3RydWN0IHN0cmluZ19saXN0ICopOwordm9pZCByZXJlcmVfY2xlYXIoc3RydWN0IHJlcG9zaXRvcnkgKiwgc3RydWN0IHN0cmluZ19saXN0ICopOwordm9pZCByZXJlcmVfZ2Moc3RydWN0IHJlcG9zaXRvcnkgKiwgc3RydWN0IHN0cmluZ19saXN0ICopOworCisjZGVmaW5lIE9QVF9SRVJFUkVfQVVUT1VQREFURSh2KSBPUFRfVVlOKDAsICJyZXJlcmUtYXV0b3VwZGF0ZSIsICh2KSwgXAorCU5fKCJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZXNldC5jIGIvcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjRmYmQwCi0tLSAvZGV2L251bGwKKysrIGIvcmVzZXQuYwpAQCAtMCwwICsxLDE0MSBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZXNldC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorCitpbnQgcmVzZXRfaGVhZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICphY3Rpb24sCisJICAgICAgIGNvbnN0IGNoYXIgKnN3aXRjaF90b19icmFuY2gsIHVuc2lnbmVkIGZsYWdzLAorCSAgICAgICBjb25zdCBjaGFyICpyZWZsb2dfb3JpZ19oZWFkLCBjb25zdCBjaGFyICpyZWZsb2dfaGVhZCwKKwkgICAgICAgY29uc3QgY2hhciAqZGVmYXVsdF9yZWZsb2dfYWN0aW9uKQoreworCXVuc2lnbmVkIGRldGFjaF9oZWFkID0gZmxhZ3MgJiBSRVNFVF9IRUFEX0RFVEFDSDsKKwl1bnNpZ25lZCByZXNldF9oYXJkID0gZmxhZ3MgJiBSRVNFVF9IRUFEX0hBUkQ7CisJdW5zaWduZWQgcnVuX2hvb2sgPSBmbGFncyAmIFJFU0VUX0hFQURfUlVOX1BPU1RfQ0hFQ0tPVVRfSE9PSzsKKwl1bnNpZ25lZCByZWZzX29ubHkgPSBmbGFncyAmIFJFU0VUX0hFQURfUkVGU19PTkxZOworCXVuc2lnbmVkIHVwZGF0ZV9vcmlnX2hlYWQgPSBmbGFncyAmIFJFU0VUX09SSUdfSEVBRDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWRfb2lkOworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzY1syXSA9IHsgeyBOVUxMIH0sIHsgTlVMTCB9IH07CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrID0gTE9DS19JTklUOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyB1bnBhY2tfdHJlZV9vcHRzOworCXN0cnVjdCB0cmVlICp0cmVlOworCWNvbnN0IGNoYXIgKnJlZmxvZ19hY3Rpb247CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwlzaXplX3QgcHJlZml4X2xlbjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpvcmlnID0gTlVMTCwgb2lkX29yaWcsCisJCSpvbGRfb3JpZyA9IE5VTEwsIG9pZF9vbGRfb3JpZzsKKwlpbnQgcmV0ID0gMCwgbnIgPSAwOworCisJaWYgKHN3aXRjaF90b19icmFuY2ggJiYgIXN0YXJ0c193aXRoKHN3aXRjaF90b19icmFuY2gsICJyZWZzLyIpKQorCQlCVUcoIk5vdCBhIGZ1bGx5IHF1YWxpZmllZCBicmFuY2g6ICclcyciLCBzd2l0Y2hfdG9fYnJhbmNoKTsKKworCWlmICghcmVmc19vbmx5ICYmIHJlcG9faG9sZF9sb2NrZWRfaW5kZXgociwgJmxvY2ssIExPQ0tfUkVQT1JUX09OX0VSUk9SKSA8IDApIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gbGVhdmVfcmVzZXRfaGVhZDsKKwl9CisKKwlpZiAoKCFvaWQgfHwgIXJlc2V0X2hhcmQpICYmIGdldF9vaWQoIkhFQUQiLCAmaGVhZF9vaWQpKSB7CisJCXJldCA9IGVycm9yKF8oImNvdWxkIG5vdCBkZXRlcm1pbmUgSEVBRCByZXZpc2lvbiIpKTsKKwkJZ290byBsZWF2ZV9yZXNldF9oZWFkOworCX0KKworCWlmICghb2lkKQorCQlvaWQgPSAmaGVhZF9vaWQ7CisKKwlpZiAocmVmc19vbmx5KQorCQlnb3RvIHJlc2V0X2hlYWRfcmVmczsKKworCW1lbXNldCgmdW5wYWNrX3RyZWVfb3B0cywgMCwgc2l6ZW9mKHVucGFja190cmVlX29wdHMpKTsKKwlzZXR1cF91bnBhY2tfdHJlZXNfcG9yY2VsYWluKCZ1bnBhY2tfdHJlZV9vcHRzLCBhY3Rpb24pOworCXVucGFja190cmVlX29wdHMuaGVhZF9pZHggPSAxOworCXVucGFja190cmVlX29wdHMuc3JjX2luZGV4ID0gci0+aW5kZXg7CisJdW5wYWNrX3RyZWVfb3B0cy5kc3RfaW5kZXggPSByLT5pbmRleDsKKwl1bnBhY2tfdHJlZV9vcHRzLmZuID0gcmVzZXRfaGFyZCA/IG9uZXdheV9tZXJnZSA6IHR3b3dheV9tZXJnZTsKKwl1bnBhY2tfdHJlZV9vcHRzLnVwZGF0ZSA9IDE7CisJdW5wYWNrX3RyZWVfb3B0cy5tZXJnZSA9IDE7CisJaW5pdF9jaGVja291dF9tZXRhZGF0YSgmdW5wYWNrX3RyZWVfb3B0cy5tZXRhLCBzd2l0Y2hfdG9fYnJhbmNoLCBvaWQsIE5VTEwpOworCWlmICghZGV0YWNoX2hlYWQpCisJCXVucGFja190cmVlX29wdHMucmVzZXQgPSAxOworCisJaWYgKHJlcG9fcmVhZF9pbmRleF91bm1lcmdlZChyKSA8IDApIHsKKwkJcmV0ID0gZXJyb3IoXygiY291bGQgbm90IHJlYWQgaW5kZXgiKSk7CisJCWdvdG8gbGVhdmVfcmVzZXRfaGVhZDsKKwl9CisKKwlpZiAoIXJlc2V0X2hhcmQgJiYgIWZpbGxfdHJlZV9kZXNjcmlwdG9yKHIsICZkZXNjW25yKytdLCAmaGVhZF9vaWQpKSB7CisJCXJldCA9IGVycm9yKF8oImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiKSwKKwkJCSAgICBvaWRfdG9faGV4KCZoZWFkX29pZCkpOworCQlnb3RvIGxlYXZlX3Jlc2V0X2hlYWQ7CisJfQorCisJaWYgKCFmaWxsX3RyZWVfZGVzY3JpcHRvcihyLCAmZGVzY1tucisrXSwgb2lkKSkgeworCQlyZXQgPSBlcnJvcihfKCJmYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzIiksIG9pZF90b19oZXgob2lkKSk7CisJCWdvdG8gbGVhdmVfcmVzZXRfaGVhZDsKKwl9CisKKwlpZiAodW5wYWNrX3RyZWVzKG5yLCBkZXNjLCAmdW5wYWNrX3RyZWVfb3B0cykpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gbGVhdmVfcmVzZXRfaGVhZDsKKwl9CisKKwl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChvaWQpOworCXByaW1lX2NhY2hlX3RyZWUociwgci0+aW5kZXgsIHRyZWUpOworCisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleChyLT5pbmRleCwgJmxvY2ssIENPTU1JVF9MT0NLKSA8IDApIHsKKwkJcmV0ID0gZXJyb3IoXygiY291bGQgbm90IHdyaXRlIGluZGV4IikpOworCQlnb3RvIGxlYXZlX3Jlc2V0X2hlYWQ7CisJfQorCityZXNldF9oZWFkX3JlZnM6CisJcmVmbG9nX2FjdGlvbiA9IGdldGVudihHSVRfUkVGTE9HX0FDVElPTl9FTlZJUk9OTUVOVCk7CisJc3RyYnVmX2FkZGYoJm1zZywgIiVzOiAiLCByZWZsb2dfYWN0aW9uID8gcmVmbG9nX2FjdGlvbiA6IGRlZmF1bHRfcmVmbG9nX2FjdGlvbik7CisJcHJlZml4X2xlbiA9IG1zZy5sZW47CisKKwlpZiAodXBkYXRlX29yaWdfaGVhZCkgeworCQlpZiAoIWdldF9vaWQoIk9SSUdfSEVBRCIsICZvaWRfb2xkX29yaWcpKQorCQkJb2xkX29yaWcgPSAmb2lkX29sZF9vcmlnOworCQlpZiAoIWdldF9vaWQoIkhFQUQiLCAmb2lkX29yaWcpKSB7CisJCQlvcmlnID0gJm9pZF9vcmlnOworCQkJaWYgKCFyZWZsb2dfb3JpZ19oZWFkKSB7CisJCQkJc3RyYnVmX2FkZHN0cigmbXNnLCAidXBkYXRpbmcgT1JJR19IRUFEIik7CisJCQkJcmVmbG9nX29yaWdfaGVhZCA9IG1zZy5idWY7CisJCQl9CisJCQl1cGRhdGVfcmVmKHJlZmxvZ19vcmlnX2hlYWQsICJPUklHX0hFQUQiLCBvcmlnLAorCQkJCSAgIG9sZF9vcmlnLCAwLCBVUERBVEVfUkVGU19NU0dfT05fRVJSKTsKKwkJfSBlbHNlIGlmIChvbGRfb3JpZykKKwkJCWRlbGV0ZV9yZWYoTlVMTCwgIk9SSUdfSEVBRCIsIG9sZF9vcmlnLCAwKTsKKwl9CisKKwlpZiAoIXJlZmxvZ19oZWFkKSB7CisJCXN0cmJ1Zl9zZXRsZW4oJm1zZywgcHJlZml4X2xlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZywgInVwZGF0aW5nIEhFQUQiKTsKKwkJcmVmbG9nX2hlYWQgPSBtc2cuYnVmOworCX0KKwlpZiAoIXN3aXRjaF90b19icmFuY2gpCisJCXJldCA9IHVwZGF0ZV9yZWYocmVmbG9nX2hlYWQsICJIRUFEIiwgb2lkLCBvcmlnLAorCQkJCSBkZXRhY2hfaGVhZCA/IFJFRl9OT19ERVJFRiA6IDAsCisJCQkJIFVQREFURV9SRUZTX01TR19PTl9FUlIpOworCWVsc2UgeworCQlyZXQgPSB1cGRhdGVfcmVmKHJlZmxvZ19oZWFkLCBzd2l0Y2hfdG9fYnJhbmNoLCBvaWQsCisJCQkJIE5VTEwsIDAsIFVQREFURV9SRUZTX01TR19PTl9FUlIpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IGNyZWF0ZV9zeW1yZWYoIkhFQUQiLCBzd2l0Y2hfdG9fYnJhbmNoLAorCQkJCQkgICAgcmVmbG9nX2hlYWQpOworCX0KKwlpZiAocnVuX2hvb2spCisJCXJ1bl9ob29rX2xlKE5VTEwsICJwb3N0LWNoZWNrb3V0IiwKKwkJCSAgICBvaWRfdG9faGV4KG9yaWcgPyBvcmlnIDogJm51bGxfb2lkKSwKKwkJCSAgICBvaWRfdG9faGV4KG9pZCksICIxIiwgTlVMTCk7CisKK2xlYXZlX3Jlc2V0X2hlYWQ6CisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7CisJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwl3aGlsZSAobnIpCisJCWZyZWUoKHZvaWQgKilkZXNjWy0tbnJdLmJ1ZmZlcik7CisJcmV0dXJuIHJldDsKKworfQpkaWZmIC0tZ2l0IGEvcmVzZXQuaCBiL3Jlc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmODNjNwotLS0gL2Rldi9udWxsCisrKyBiL3Jlc2V0LmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBSRVNFVF9ICisjZGVmaW5lIFJFU0VUX0gKKworI2luY2x1ZGUgImhhc2guaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisKKyNkZWZpbmUgR0lUX1JFRkxPR19BQ1RJT05fRU5WSVJPTk1FTlQgIkdJVF9SRUZMT0dfQUNUSU9OIgorCisjZGVmaW5lIFJFU0VUX0hFQURfREVUQUNIICgxPDwwKQorI2RlZmluZSBSRVNFVF9IRUFEX0hBUkQgKDE8PDEpCisjZGVmaW5lIFJFU0VUX0hFQURfUlVOX1BPU1RfQ0hFQ0tPVVRfSE9PSyAoMTw8MikKKyNkZWZpbmUgUkVTRVRfSEVBRF9SRUZTX09OTFkgKDE8PDMpCisjZGVmaW5lIFJFU0VUX09SSUdfSEVBRCAoMTw8NCkKKworaW50IHJlc2V0X2hlYWQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqYWN0aW9uLAorCSAgICAgICBjb25zdCBjaGFyICpzd2l0Y2hfdG9fYnJhbmNoLCB1bnNpZ25lZCBmbGFncywKKwkgICAgICAgY29uc3QgY2hhciAqcmVmbG9nX29yaWdfaGVhZCwgY29uc3QgY2hhciAqcmVmbG9nX2hlYWQsCisJICAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfcmVmbG9nX2FjdGlvbik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVzb2x2ZS11bmRvLmMgYi9yZXNvbHZlLXVuZG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzYzMjBmCi0tLSAvZGV2L251bGwKKysrIGIvcmVzb2x2ZS11bmRvLmMKQEAgLTAsMCArMSwxOTUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKKy8qIFRoZSBvbmx5IGVycm9yIGNhc2UgaXMgdG8gcnVuIG91dCBvZiBtZW1vcnkgaW4gc3RyaW5nLWxpc3QgKi8KK3ZvaWQgcmVjb3JkX3Jlc29sdmVfdW5kbyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqbG9zdDsKKwlzdHJ1Y3QgcmVzb2x2ZV91bmRvX2luZm8gKnVpOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvOworCWludCBzdGFnZSA9IGNlX3N0YWdlKGNlKTsKKworCWlmICghc3RhZ2UpCisJCXJldHVybjsKKworCWlmICghaXN0YXRlLT5yZXNvbHZlX3VuZG8pIHsKKwkJcmVzb2x2ZV91bmRvID0geGNhbGxvYygxLCBzaXplb2YoKnJlc29sdmVfdW5kbykpOworCQlyZXNvbHZlX3VuZG8tPnN0cmR1cF9zdHJpbmdzID0gMTsKKwkJaXN0YXRlLT5yZXNvbHZlX3VuZG8gPSByZXNvbHZlX3VuZG87CisJfQorCXJlc29sdmVfdW5kbyA9IGlzdGF0ZS0+cmVzb2x2ZV91bmRvOworCWxvc3QgPSBzdHJpbmdfbGlzdF9pbnNlcnQocmVzb2x2ZV91bmRvLCBjZS0+bmFtZSk7CisJaWYgKCFsb3N0LT51dGlsKQorCQlsb3N0LT51dGlsID0geGNhbGxvYygxLCBzaXplb2YoKnVpKSk7CisJdWkgPSBsb3N0LT51dGlsOworCW9pZGNweSgmdWktPm9pZFtzdGFnZSAtIDFdLCAmY2UtPm9pZCk7CisJdWktPm1vZGVbc3RhZ2UgLSAxXSA9IGNlLT5jZV9tb2RlOworfQorCit2b2lkIHJlc29sdmVfdW5kb193cml0ZShzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IHN0cmluZ19saXN0ICpyZXNvbHZlX3VuZG8pCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCByZXNvbHZlX3VuZG8pIHsKKwkJc3RydWN0IHJlc29sdmVfdW5kb19pbmZvICp1aSA9IGl0ZW0tPnV0aWw7CisJCWludCBpOworCisJCWlmICghdWkpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX2FkZHN0cihzYiwgaXRlbS0+c3RyaW5nKTsKKwkJc3RyYnVmX2FkZGNoKHNiLCAwKTsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCXN0cmJ1Zl9hZGRmKHNiLCAiJW8lYyIsIHVpLT5tb2RlW2ldLCAwKTsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJaWYgKCF1aS0+bW9kZVtpXSkKKwkJCQljb250aW51ZTsKKwkJCXN0cmJ1Zl9hZGQoc2IsIHVpLT5vaWRbaV0uaGFzaCwgdGhlX2hhc2hfYWxnby0+cmF3c3opOworCQl9CisJfQorfQorCitzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlc29sdmVfdW5kb19yZWFkKGNvbnN0IGNoYXIgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlc29sdmVfdW5kbzsKKwlzaXplX3QgbGVuOworCWNoYXIgKmVuZHB0cjsKKwlpbnQgaTsKKwljb25zdCB1bnNpZ25lZCByYXdzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCisJcmVzb2x2ZV91bmRvID0geGNhbGxvYygxLCBzaXplb2YoKnJlc29sdmVfdW5kbykpOworCXJlc29sdmVfdW5kby0+c3RyZHVwX3N0cmluZ3MgPSAxOworCisJd2hpbGUgKHNpemUpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmxvc3Q7CisJCXN0cnVjdCByZXNvbHZlX3VuZG9faW5mbyAqdWk7CisKKwkJbGVuID0gc3RybGVuKGRhdGEpICsgMTsKKwkJaWYgKHNpemUgPD0gbGVuKQorCQkJZ290byBlcnJvcjsKKwkJbG9zdCA9IHN0cmluZ19saXN0X2luc2VydChyZXNvbHZlX3VuZG8sIGRhdGEpOworCQlpZiAoIWxvc3QtPnV0aWwpCisJCQlsb3N0LT51dGlsID0geGNhbGxvYygxLCBzaXplb2YoKnVpKSk7CisJCXVpID0gbG9zdC0+dXRpbDsKKwkJc2l6ZSAtPSBsZW47CisJCWRhdGEgKz0gbGVuOworCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCXVpLT5tb2RlW2ldID0gc3RydG91bChkYXRhLCAmZW5kcHRyLCA4KTsKKwkJCWlmICghZW5kcHRyIHx8IGVuZHB0ciA9PSBkYXRhIHx8ICplbmRwdHIpCisJCQkJZ290byBlcnJvcjsKKwkJCWxlbiA9IChlbmRwdHIgKyAxKSAtIChjaGFyKilkYXRhOworCQkJaWYgKHNpemUgPD0gbGVuKQorCQkJCWdvdG8gZXJyb3I7CisJCQlzaXplIC09IGxlbjsKKwkJCWRhdGEgKz0gbGVuOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJaWYgKCF1aS0+bW9kZVtpXSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzaXplIDwgcmF3c3opCisJCQkJZ290byBlcnJvcjsKKwkJCW9pZHJlYWQoJnVpLT5vaWRbaV0sIChjb25zdCB1bnNpZ25lZCBjaGFyICopZGF0YSk7CisJCQlzaXplIC09IHJhd3N6OworCQkJZGF0YSArPSByYXdzejsKKwkJfQorCX0KKwlyZXR1cm4gcmVzb2x2ZV91bmRvOworCitlcnJvcjoKKwlzdHJpbmdfbGlzdF9jbGVhcihyZXNvbHZlX3VuZG8sIDEpOworCWVycm9yKCJJbmRleCByZWNvcmRzIGludmFsaWQgcmVzb2x2ZS11bmRvIGluZm9ybWF0aW9uIik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgcmVzb2x2ZV91bmRvX2NsZWFyX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvID0gaXN0YXRlLT5yZXNvbHZlX3VuZG87CisJaWYgKCFyZXNvbHZlX3VuZG8pCisJCXJldHVybjsKKwlzdHJpbmdfbGlzdF9jbGVhcihyZXNvbHZlX3VuZG8sIDEpOworCWZyZWUocmVzb2x2ZV91bmRvKTsKKwlpc3RhdGUtPnJlc29sdmVfdW5kbyA9IE5VTEw7CisJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IFJFU09MVkVfVU5ET19DSEFOR0VEOworfQorCitpbnQgdW5tZXJnZV9pbmRleF9lbnRyeV9hdChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgaW50IHBvcykKK3sKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCByZXNvbHZlX3VuZG9faW5mbyAqcnU7CisJaW50IGksIGVyciA9IDAsIG1hdGNoZWQ7CisJY2hhciAqbmFtZTsKKworCWlmICghaXN0YXRlLT5yZXNvbHZlX3VuZG8pCisJCXJldHVybiBwb3M7CisKKwljZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zXTsKKwlpZiAoY2Vfc3RhZ2UoY2UpKSB7CisJCS8qIGFscmVhZHkgdW5tZXJnZWQgKi8KKwkJd2hpbGUgKChwb3MgPCBpc3RhdGUtPmNhY2hlX25yKSAmJgorCQkgICAgICAgISBzdHJjbXAoaXN0YXRlLT5jYWNoZVtwb3NdLT5uYW1lLCBjZS0+bmFtZSkpCisJCQlwb3MrKzsKKwkJcmV0dXJuIHBvcyAtIDE7IC8qIHJldHVybiB0aGUgbGFzdCBlbnRyeSBwcm9jZXNzZWQgKi8KKwl9CisJaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cChpc3RhdGUtPnJlc29sdmVfdW5kbywgY2UtPm5hbWUpOworCWlmICghaXRlbSkKKwkJcmV0dXJuIHBvczsKKwlydSA9IGl0ZW0tPnV0aWw7CisJaWYgKCFydSkKKwkJcmV0dXJuIHBvczsKKwltYXRjaGVkID0gY2UtPmNlX2ZsYWdzICYgQ0VfTUFUQ0hFRDsKKwluYW1lID0geHN0cmR1cChjZS0+bmFtZSk7CisJcmVtb3ZlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgcG9zKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqbmNlOworCQlpZiAoIXJ1LT5tb2RlW2ldKQorCQkJY29udGludWU7CisJCW5jZSA9IG1ha2VfY2FjaGVfZW50cnkoaXN0YXRlLAorCQkJCSAgICAgICBydS0+bW9kZVtpXSwKKwkJCQkgICAgICAgJnJ1LT5vaWRbaV0sCisJCQkJICAgICAgIG5hbWUsIGkgKyAxLCAwKTsKKwkJaWYgKG1hdGNoZWQpCisJCQluY2UtPmNlX2ZsYWdzIHw9IENFX01BVENIRUQ7CisJCWlmIChhZGRfaW5kZXhfZW50cnkoaXN0YXRlLCBuY2UsIEFERF9DQUNIRV9PS19UT19BREQpKSB7CisJCQllcnIgPSAxOworCQkJZXJyb3IoImNhbm5vdCB1bm1lcmdlICclcyciLCBuYW1lKTsKKwkJfQorCX0KKwlmcmVlKG5hbWUpOworCWlmIChlcnIpCisJCXJldHVybiBwb3M7CisJZnJlZShydSk7CisJaXRlbS0+dXRpbCA9IE5VTEw7CisJcmV0dXJuIHVubWVyZ2VfaW5kZXhfZW50cnlfYXQoaXN0YXRlLCBwb3MpOworfQorCit2b2lkIHVubWVyZ2VfbWFya2VkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWludCBpOworCisJaWYgKCFpc3RhdGUtPnJlc29sdmVfdW5kbykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJaWYgKGNlLT5jZV9mbGFncyAmIENFX01BVENIRUQpCisJCQlpID0gdW5tZXJnZV9pbmRleF9lbnRyeV9hdChpc3RhdGUsIGkpOworCX0KK30KKwordm9pZCB1bm1lcmdlX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCWludCBpOworCisJaWYgKCFpc3RhdGUtPnJlc29sdmVfdW5kbykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJaWYgKCFjZV9wYXRoX21hdGNoKGlzdGF0ZSwgY2UsIHBhdGhzcGVjLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCQlpID0gdW5tZXJnZV9pbmRleF9lbnRyeV9hdChpc3RhdGUsIGkpOworCX0KK30KZGlmZiAtLWdpdCBhL3Jlc29sdmUtdW5kby5oIGIvcmVzb2x2ZS11bmRvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIzZjBmOQotLS0gL2Rldi9udWxsCisrKyBiL3Jlc29sdmUtdW5kby5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgUkVTT0xWRV9VTkRPX0gKKyNkZWZpbmUgUkVTT0xWRV9VTkRPX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0cnVjdCByZXNvbHZlX3VuZG9faW5mbyB7CisJdW5zaWduZWQgaW50IG1vZGVbM107CisJc3RydWN0IG9iamVjdF9pZCBvaWRbM107Cit9OworCit2b2lkIHJlY29yZF9yZXNvbHZlX3VuZG8oc3RydWN0IGluZGV4X3N0YXRlICosIHN0cnVjdCBjYWNoZV9lbnRyeSAqKTsKK3ZvaWQgcmVzb2x2ZV91bmRvX3dyaXRlKHN0cnVjdCBzdHJidWYgKiwgc3RydWN0IHN0cmluZ19saXN0ICopOworc3RydWN0IHN0cmluZ19saXN0ICpyZXNvbHZlX3VuZG9fcmVhZChjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOwordm9pZCByZXNvbHZlX3VuZG9fY2xlYXJfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICopOworaW50IHVubWVyZ2VfaW5kZXhfZW50cnlfYXQoc3RydWN0IGluZGV4X3N0YXRlICosIGludCk7Cit2b2lkIHVubWVyZ2VfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqKTsKK3ZvaWQgdW5tZXJnZV9tYXJrZWRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3JldmlzaW9uLmMgYi9yZXZpc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwY2NhOGMKLS0tIC9kZXYvbnVsbAorKysgYi9yZXZpc2lvbi5jCkBAIC0wLDAgKzEsNDE0NCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImdyYXBoLmgiCisjaW5jbHVkZSAiZ3JlcC5oIgorI2luY2x1ZGUgInJlZmxvZy13YWxrLmgiCisjaW5jbHVkZSAicGF0Y2gtaWRzLmgiCisjaW5jbHVkZSAiZGVjb3JhdGUuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibGluZS1sb2cuaCIKKyNpbmNsdWRlICJtYWlsbWFwLmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAiYmlzZWN0LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJ3b3JrdHJlZS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKyNpbmNsdWRlICJwcmlvLXF1ZXVlLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJibG9vbS5oIgorI2luY2x1ZGUgImpzb24td3JpdGVyLmgiCisKK3ZvbGF0aWxlIHNob3dfZWFybHlfb3V0cHV0X2ZuX3Qgc2hvd19lYXJseV9vdXRwdXQ7CisKK3N0YXRpYyBjb25zdCBjaGFyICp0ZXJtX2JhZDsKK3N0YXRpYyBjb25zdCBjaGFyICp0ZXJtX2dvb2Q7CisKK2ltcGxlbWVudF9zaGFyZWRfY29tbWl0X3NsYWIocmV2aXNpb25fc291cmNlcywgY2hhciAqKTsKKwordm9pZCBzaG93X29iamVjdF93aXRoX25hbWUoRklMRSAqb3V0LCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY29uc3QgY2hhciAqcDsKKworCWZwcmludGYob3V0LCAiJXMgIiwgb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKKwlmb3IgKHAgPSBuYW1lOyAqcCAmJiAqcCAhPSAnXG4nOyBwKyspCisJCWZwdXRjKCpwLCBvdXQpOworCWZwdXRjKCdcbicsIG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfYmxvYl91bmludGVyZXN0aW5nKHN0cnVjdCBibG9iICpibG9iKQoreworCWlmICghYmxvYikKKwkJcmV0dXJuOworCWlmIChibG9iLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQlyZXR1cm47CisJYmxvYi0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfdHJlZV9jb250ZW50c191bmludGVyZXN0aW5nKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgICAgIHN0cnVjdCB0cmVlICp0cmVlKQoreworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKworCWlmIChwYXJzZV90cmVlX2dlbnRseSh0cmVlLCAxKSA8IDApCisJCXJldHVybjsKKworCWluaXRfdHJlZV9kZXNjKCZkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CisJCXN3aXRjaCAob2JqZWN0X3R5cGUoZW50cnkubW9kZSkpIHsKKwkJY2FzZSBPQkpfVFJFRToKKwkJCW1hcmtfdHJlZV91bmludGVyZXN0aW5nKHIsIGxvb2t1cF90cmVlKHIsICZlbnRyeS5vaWQpKTsKKwkJCWJyZWFrOworCQljYXNlIE9CSl9CTE9COgorCQkJbWFya19ibG9iX3VuaW50ZXJlc3RpbmcobG9va3VwX2Jsb2IociwgJmVudHJ5Lm9pZCkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBTdWJwcm9qZWN0IGNvbW1pdCAtIG5vdCBpbiB0aGlzIHJlcG9zaXRvcnkgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSB0cmVlIGFueSBtb3JlCisJICogYWZ0ZXIgaXQgaGFzIGJlZW4gbWFya2VkIHVuaW50ZXJlc3RpbmcuCisJICovCisJZnJlZV90cmVlX2J1ZmZlcih0cmVlKTsKK30KKwordm9pZCBtYXJrX3RyZWVfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHRyZWUgKnRyZWUpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCisJaWYgKCF0cmVlKQorCQlyZXR1cm47CisKKwlvYmogPSAmdHJlZS0+b2JqZWN0OworCWlmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJcmV0dXJuOworCW9iai0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwltYXJrX3RyZWVfY29udGVudHNfdW5pbnRlcmVzdGluZyhyLCB0cmVlKTsKK30KKworc3RydWN0IHBhdGhfYW5kX29pZHNfZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwljaGFyICpwYXRoOworCXN0cnVjdCBvaWRzZXQgdHJlZXM7Cit9OworCitzdGF0aWMgaW50IHBhdGhfYW5kX29pZHNfY21wKGNvbnN0IHZvaWQgKmhhc2htYXBfY21wX2ZuX2RhdGEsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnlfb3Jfa2V5LAorCQkJICAgICBjb25zdCB2b2lkICprZXlkYXRhKQoreworCWNvbnN0IHN0cnVjdCBwYXRoX2FuZF9vaWRzX2VudHJ5ICplMSwgKmUyOworCisJZTEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IHBhdGhfYW5kX29pZHNfZW50cnksIGVudCk7CisJZTIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3QgcGF0aF9hbmRfb2lkc19lbnRyeSwgZW50KTsKKworCXJldHVybiBzdHJjbXAoZTEtPnBhdGgsIGUyLT5wYXRoKTsKK30KKworc3RhdGljIHZvaWQgcGF0aHNfYW5kX29pZHNfaW5pdChzdHJ1Y3QgaGFzaG1hcCAqbWFwKQoreworCWhhc2htYXBfaW5pdChtYXAsIHBhdGhfYW5kX29pZHNfY21wLCBOVUxMLCAwKTsKK30KKworc3RhdGljIHZvaWQgcGF0aHNfYW5kX29pZHNfY2xlYXIoc3RydWN0IGhhc2htYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisJc3RydWN0IHBhdGhfYW5kX29pZHNfZW50cnkgKmVudHJ5OworCisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeShtYXAsICZpdGVyLCBlbnRyeSwgZW50IC8qIG1lbWJlciBuYW1lICovKSB7CisJCW9pZHNldF9jbGVhcigmZW50cnktPnRyZWVzKTsKKwkJZnJlZShlbnRyeS0+cGF0aCk7CisJfQorCisJaGFzaG1hcF9mcmVlX2VudHJpZXMobWFwLCBzdHJ1Y3QgcGF0aF9hbmRfb2lkc19lbnRyeSwgZW50KTsKK30KKworc3RhdGljIHZvaWQgcGF0aHNfYW5kX29pZHNfaW5zZXJ0KHN0cnVjdCBoYXNobWFwICptYXAsCisJCQkJICBjb25zdCBjaGFyICpwYXRoLAorCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWludCBoYXNoID0gc3RyaGFzaChwYXRoKTsKKwlzdHJ1Y3QgcGF0aF9hbmRfb2lkc19lbnRyeSBrZXk7CisJc3RydWN0IHBhdGhfYW5kX29pZHNfZW50cnkgKmVudHJ5OworCisJaGFzaG1hcF9lbnRyeV9pbml0KCZrZXkuZW50LCBoYXNoKTsKKworCS8qIHVzZSBhIHNoYWxsb3cgY29weSBmb3IgdGhlIGxvb2t1cCAqLworCWtleS5wYXRoID0gKGNoYXIgKilwYXRoOworCW9pZHNldF9pbml0KCZrZXkudHJlZXMsIDApOworCisJZW50cnkgPSBoYXNobWFwX2dldF9lbnRyeShtYXAsICZrZXksIGVudCwgTlVMTCk7CisJaWYgKCFlbnRyeSkgeworCQllbnRyeSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwYXRoX2FuZF9vaWRzX2VudHJ5KSk7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmZW50cnktPmVudCwgaGFzaCk7CisJCWVudHJ5LT5wYXRoID0geHN0cmR1cChrZXkucGF0aCk7CisJCW9pZHNldF9pbml0KCZlbnRyeS0+dHJlZXMsIDE2KTsKKwkJaGFzaG1hcF9wdXQobWFwLCAmZW50cnktPmVudCk7CisJfQorCisJb2lkc2V0X2luc2VydCgmZW50cnktPnRyZWVzLCBvaWQpOworfQorCitzdGF0aWMgdm9pZCBhZGRfY2hpbGRyZW5fYnlfcGF0aChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgc3RydWN0IHRyZWUgKnRyZWUsCisJCQkJIHN0cnVjdCBoYXNobWFwICptYXApCit7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCisJaWYgKCF0cmVlKQorCQlyZXR1cm47CisKKwlpZiAocGFyc2VfdHJlZV9nZW50bHkodHJlZSwgMSkgPCAwKQorCQlyZXR1cm47CisKKwlpbml0X3RyZWVfZGVzYygmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwl3aGlsZSAodHJlZV9lbnRyeSgmZGVzYywgJmVudHJ5KSkgeworCQlzd2l0Y2ggKG9iamVjdF90eXBlKGVudHJ5Lm1vZGUpKSB7CisJCWNhc2UgT0JKX1RSRUU6CisJCQlwYXRoc19hbmRfb2lkc19pbnNlcnQobWFwLCBlbnRyeS5wYXRoLCAmZW50cnkub2lkKTsKKworCQkJaWYgKHRyZWUtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKKwkJCQlzdHJ1Y3QgdHJlZSAqY2hpbGQgPSBsb29rdXBfdHJlZShyLCAmZW50cnkub2lkKTsKKwkJCQlpZiAoY2hpbGQpCisJCQkJCWNoaWxkLT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIE9CSl9CTE9COgorCQkJaWYgKHRyZWUtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKKwkJCQlzdHJ1Y3QgYmxvYiAqY2hpbGQgPSBsb29rdXBfYmxvYihyLCAmZW50cnkub2lkKTsKKwkJCQlpZiAoY2hpbGQpCisJCQkJCWNoaWxkLT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogU3VicHJvamVjdCBjb21taXQgLSBub3QgaW4gdGhpcyByZXBvc2l0b3J5ICovCisJCQlicmVhazsKKwkJfQorCX0KKworCWZyZWVfdHJlZV9idWZmZXIodHJlZSk7Cit9CisKK3ZvaWQgbWFya190cmVlc191bmludGVyZXN0aW5nX3NwYXJzZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgIHN0cnVjdCBvaWRzZXQgKnRyZWVzKQoreworCXVuc2lnbmVkIGhhc19pbnRlcmVzdGluZyA9IDAsIGhhc191bmludGVyZXN0aW5nID0gMDsKKwlzdHJ1Y3QgaGFzaG1hcCBtYXA7CisJc3RydWN0IGhhc2htYXBfaXRlciBtYXBfaXRlcjsKKwlzdHJ1Y3QgcGF0aF9hbmRfb2lkc19lbnRyeSAqZW50cnk7CisJc3RydWN0IG9iamVjdF9pZCAqb2lkOworCXN0cnVjdCBvaWRzZXRfaXRlciBpdGVyOworCisJb2lkc2V0X2l0ZXJfaW5pdCh0cmVlcywgJml0ZXIpOworCXdoaWxlICgoIWhhc19pbnRlcmVzdGluZyB8fCAhaGFzX3VuaW50ZXJlc3RpbmcpICYmCisJICAgICAgIChvaWQgPSBvaWRzZXRfaXRlcl9uZXh0KCZpdGVyKSkpIHsKKwkJc3RydWN0IHRyZWUgKnRyZWUgPSBsb29rdXBfdHJlZShyLCBvaWQpOworCisJCWlmICghdHJlZSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0cmVlLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJaGFzX3VuaW50ZXJlc3RpbmcgPSAxOworCQllbHNlCisJCQloYXNfaW50ZXJlc3RpbmcgPSAxOworCX0KKworCS8qIERvIG5vdCB3YWxrIHVubGVzcyB3ZSBoYXZlIGJvdGggdHlwZXMgb2YgdHJlZXMuICovCisJaWYgKCFoYXNfdW5pbnRlcmVzdGluZyB8fCAhaGFzX2ludGVyZXN0aW5nKQorCQlyZXR1cm47CisKKwlwYXRoc19hbmRfb2lkc19pbml0KCZtYXApOworCisJb2lkc2V0X2l0ZXJfaW5pdCh0cmVlcywgJml0ZXIpOworCXdoaWxlICgob2lkID0gb2lkc2V0X2l0ZXJfbmV4dCgmaXRlcikpKSB7CisJCXN0cnVjdCB0cmVlICp0cmVlID0gbG9va3VwX3RyZWUociwgb2lkKTsKKwkJYWRkX2NoaWxkcmVuX2J5X3BhdGgociwgdHJlZSwgJm1hcCk7CisJfQorCisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeSgmbWFwLCAmbWFwX2l0ZXIsIGVudHJ5LCBlbnQgLyogbWVtYmVyIG5hbWUgKi8pCisJCW1hcmtfdHJlZXNfdW5pbnRlcmVzdGluZ19zcGFyc2UociwgJmVudHJ5LT50cmVlcyk7CisKKwlwYXRoc19hbmRfb2lkc19jbGVhcigmbWFwKTsKK30KKworc3RydWN0IGNvbW1pdF9zdGFjayB7CisJc3RydWN0IGNvbW1pdCAqKml0ZW1zOworCXNpemVfdCBuciwgYWxsb2M7Cit9OworI2RlZmluZSBDT01NSVRfU1RBQ0tfSU5JVCB7IE5VTEwsIDAsIDAgfQorCitzdGF0aWMgdm9pZCBjb21taXRfc3RhY2tfcHVzaChzdHJ1Y3QgY29tbWl0X3N0YWNrICpzdGFjaywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCUFMTE9DX0dST1coc3RhY2stPml0ZW1zLCBzdGFjay0+bnIgKyAxLCBzdGFjay0+YWxsb2MpOworCXN0YWNrLT5pdGVtc1tzdGFjay0+bnIrK10gPSBjb21taXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpjb21taXRfc3RhY2tfcG9wKHN0cnVjdCBjb21taXRfc3RhY2sgKnN0YWNrKQoreworCXJldHVybiBzdGFjay0+bnIgPyBzdGFjay0+aXRlbXNbLS1zdGFjay0+bnJdIDogTlVMTDsKK30KKworc3RhdGljIHZvaWQgY29tbWl0X3N0YWNrX2NsZWFyKHN0cnVjdCBjb21taXRfc3RhY2sgKnN0YWNrKQoreworCUZSRUVfQU5EX05VTEwoc3RhY2stPml0ZW1zKTsKKwlzdGFjay0+bnIgPSBzdGFjay0+YWxsb2MgPSAwOworfQorCitzdGF0aWMgdm9pZCBtYXJrX29uZV9wYXJlbnRfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJCSAgc3RydWN0IGNvbW1pdF9zdGFjayAqcGVuZGluZykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmw7CisKKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQlyZXR1cm47CisJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKworCS8qCisJICogTm9ybWFsbHkgd2UgaGF2ZW4ndCBwYXJzZWQgdGhlIHBhcmVudAorCSAqIHlldCwgc28gd2Ugd29uJ3QgaGF2ZSBhIHBhcmVudCBvZiBhIHBhcmVudAorCSAqIGhlcmUuIEhvd2V2ZXIsIGl0IG1heSB0dXJuIG91dCB0aGF0IHdlJ3ZlCisJICogcmVhY2hlZCB0aGlzIGNvbW1pdCBzb21lIG90aGVyIHdheSAod2hlcmUgaXQKKwkgKiB3YXNuJ3QgdW5pbnRlcmVzdGluZyksIGluIHdoaWNoIGNhc2Ugd2UgbmVlZAorCSAqIHRvIG1hcmsgaXRzIHBhcmVudHMgcmVjdXJzaXZlbHkgdG9vLi4KKwkgKi8KKwlmb3IgKGwgPSBjb21taXQtPnBhcmVudHM7IGw7IGwgPSBsLT5uZXh0KQorCQljb21taXRfc3RhY2tfcHVzaChwZW5kaW5nLCBsLT5pdGVtKTsKK30KKwordm9pZCBtYXJrX3BhcmVudHNfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9zdGFjayBwZW5kaW5nID0gQ09NTUlUX1NUQUNLX0lOSVQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsOworCisJZm9yIChsID0gY29tbWl0LT5wYXJlbnRzOyBsOyBsID0gbC0+bmV4dCkKKwkJbWFya19vbmVfcGFyZW50X3VuaW50ZXJlc3RpbmcobC0+aXRlbSwgJnBlbmRpbmcpOworCisJd2hpbGUgKHBlbmRpbmcubnIgPiAwKQorCQltYXJrX29uZV9wYXJlbnRfdW5pbnRlcmVzdGluZyhjb21taXRfc3RhY2tfcG9wKCZwZW5kaW5nKSwKKwkJCQkJICAgICAgJnBlbmRpbmcpOworCisJY29tbWl0X3N0YWNrX2NsZWFyKCZwZW5kaW5nKTsKK30KKworc3RhdGljIHZvaWQgYWRkX3BlbmRpbmdfb2JqZWN0X3dpdGhfcGF0aChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCSBzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJCQkJCSBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBtb2RlLAorCQkJCQkgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoIW9iaikKKwkJcmV0dXJuOworCWlmIChyZXZzLT5ub193YWxrICYmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCXJldnMtPm5vX3dhbGsgPSAwOworCWlmIChyZXZzLT5yZWZsb2dfaW5mbyAmJiBvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlpbnQgbGVuID0gaW50ZXJwcmV0X2JyYW5jaF9uYW1lKG5hbWUsIDAsICZidWYsIDApOworCisJCWlmICgwIDwgbGVuICYmIG5hbWVbbGVuXSAmJiBidWYubGVuKQorCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBuYW1lICsgbGVuKTsKKwkJYWRkX3JlZmxvZ19mb3Jfd2FsayhyZXZzLT5yZWZsb2dfaW5mbywKKwkJCQkgICAgKHN0cnVjdCBjb21taXQgKilvYmosCisJCQkJICAgIGJ1Zi5idWZbMF0gPyBidWYuYnVmOiBuYW1lKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybjsgLyogZG8gbm90IGFkZCB0aGUgY29tbWl0IGl0c2VsZiAqLworCX0KKwlhZGRfb2JqZWN0X2FycmF5X3dpdGhfcGF0aChvYmosIG5hbWUsICZyZXZzLT5wZW5kaW5nLCBtb2RlLCBwYXRoKTsKK30KKworc3RhdGljIHZvaWQgYWRkX3BlbmRpbmdfb2JqZWN0X3dpdGhfbW9kZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCSBzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJCQkJCSBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBtb2RlKQoreworCWFkZF9wZW5kaW5nX29iamVjdF93aXRoX3BhdGgocmV2cywgb2JqLCBuYW1lLCBtb2RlLCBOVUxMKTsKK30KKwordm9pZCBhZGRfcGVuZGluZ19vYmplY3Qoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKQoreworCWFkZF9wZW5kaW5nX29iamVjdF93aXRoX21vZGUocmV2cywgb2JqLCBuYW1lLCBTX0lGSU5WQUxJRCk7Cit9CisKK3ZvaWQgYWRkX2hlYWRfdG9fcGVuZGluZyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IG9iamVjdCAqb2JqOworCWlmIChnZXRfb2lkKCJIRUFEIiwgJm9pZCkpCisJCXJldHVybjsKKwlvYmogPSBwYXJzZV9vYmplY3QocmV2cy0+cmVwbywgJm9pZCk7CisJaWYgKCFvYmopCisJCXJldHVybjsKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqLCAiSEVBRCIpOworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdCAqZ2V0X3JlZmVyZW5jZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKworCS8qCisJICogSWYgdGhlIHJlcG9zaXRvcnkgaGFzIGNvbW1pdCBncmFwaHMsIHJlcG9fcGFyc2VfY29tbWl0KCkgYXZvaWRzCisJICogcmVhZGluZyB0aGUgb2JqZWN0IGJ1ZmZlciwgc28gdXNlIGl0IHdoZW5ldmVyIHBvc3NpYmxlLgorCSAqLworCWlmIChvaWRfb2JqZWN0X2luZm8ocmV2cy0+cmVwbywgb2lkLCBOVUxMKSA9PSBPQkpfQ09NTUlUKSB7CisJCXN0cnVjdCBjb21taXQgKmMgPSBsb29rdXBfY29tbWl0KHJldnMtPnJlcG8sIG9pZCk7CisJCWlmICghcmVwb19wYXJzZV9jb21taXQocmV2cy0+cmVwbywgYykpCisJCQlvYmplY3QgPSAoc3RydWN0IG9iamVjdCAqKSBjOworCQllbHNlCisJCQlvYmplY3QgPSBOVUxMOworCX0gZWxzZSB7CisJCW9iamVjdCA9IHBhcnNlX29iamVjdChyZXZzLT5yZXBvLCBvaWQpOworCX0KKworCWlmICghb2JqZWN0KSB7CisJCWlmIChyZXZzLT5pZ25vcmVfbWlzc2luZykKKwkJCXJldHVybiBvYmplY3Q7CisJCWlmIChyZXZzLT5leGNsdWRlX3Byb21pc29yX29iamVjdHMgJiYgaXNfcHJvbWlzb3Jfb2JqZWN0KG9pZCkpCisJCQlyZXR1cm4gTlVMTDsKKwkJZGllKCJiYWQgb2JqZWN0ICVzIiwgbmFtZSk7CisJfQorCW9iamVjdC0+ZmxhZ3MgfD0gZmxhZ3M7CisJcmV0dXJuIG9iamVjdDsKK30KKwordm9pZCBhZGRfcGVuZGluZ19vaWQoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBnZXRfcmVmZXJlbmNlKHJldnMsIG5hbWUsIG9pZCwgZmxhZ3MpOworCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCBvYmplY3QsIG5hbWUpOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqaGFuZGxlX2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJICAgIHN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IGVudHJ5LT5pdGVtOworCWNvbnN0IGNoYXIgKm5hbWUgPSBlbnRyeS0+bmFtZTsKKwljb25zdCBjaGFyICpwYXRoID0gZW50cnktPnBhdGg7CisJdW5zaWduZWQgaW50IG1vZGUgPSBlbnRyeS0+bW9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gb2JqZWN0LT5mbGFnczsKKworCS8qCisJICogVGFnIG9iamVjdD8gTG9vayB3aGF0IGl0IHBvaW50cyB0by4uCisJICovCisJd2hpbGUgKG9iamVjdC0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCXN0cnVjdCB0YWcgKnRhZyA9IChzdHJ1Y3QgdGFnICopIG9iamVjdDsKKwkJaWYgKHJldnMtPnRhZ19vYmplY3RzICYmICEoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCBvYmplY3QsIHRhZy0+dGFnKTsKKwkJb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KHJldnMtPnJlcG8sIGdldF90YWdnZWRfb2lkKHRhZykpOworCQlpZiAoIW9iamVjdCkgeworCQkJaWYgKHJldnMtPmlnbm9yZV9taXNzaW5nX2xpbmtzIHx8IChmbGFncyAmIFVOSU5URVJFU1RJTkcpKQorCQkJCXJldHVybiBOVUxMOworCQkJaWYgKHJldnMtPmV4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0cyAmJgorCQkJICAgIGlzX3Byb21pc29yX29iamVjdCgmdGFnLT50YWdnZWQtPm9pZCkpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlkaWUoImJhZCBvYmplY3QgJXMiLCBvaWRfdG9faGV4KCZ0YWctPnRhZ2dlZC0+b2lkKSk7CisJCX0KKwkJb2JqZWN0LT5mbGFncyB8PSBmbGFnczsKKwkJLyoKKwkJICogV2UnbGwgaGFuZGxlIHRoZSB0YWdnZWQgb2JqZWN0IGJ5IGxvb3Bpbmcgb3IgZHJvcHBpbmcKKwkJICogdGhyb3VnaCB0byB0aGUgbm9uLXRhZyBoYW5kbGVycyBiZWxvdy4gRG8gbm90CisJCSAqIHByb3BhZ2F0ZSBwYXRoIGRhdGEgZnJvbSB0aGUgdGFnJ3MgcGVuZGluZyBlbnRyeS4KKwkJICovCisJCXBhdGggPSBOVUxMOworCQltb2RlID0gMDsKKwl9CisKKwkvKgorCSAqIENvbW1pdCBvYmplY3Q/IEp1c3QgcmV0dXJuIGl0LCB3ZSdsbCBkbyBhbGwgdGhlIGNvbXBsZXgKKwkgKiByZWFjaGFiaWxpdHkgY3J1ZC4KKwkgKi8KKwlpZiAob2JqZWN0LT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvYmplY3Q7CisKKwkJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpIDwgMCkKKwkJCWRpZSgidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIsIG5hbWUpOworCQlpZiAoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCQltYXJrX3BhcmVudHNfdW5pbnRlcmVzdGluZyhjb21taXQpOworCisJCQlpZiAoIXJldnMtPnRvcG9fb3JkZXIgfHwgIWdlbmVyYXRpb25fbnVtYmVyc19lbmFibGVkKHRoZV9yZXBvc2l0b3J5KSkKKwkJCQlyZXZzLT5saW1pdGVkID0gMTsKKwkJfQorCQlpZiAocmV2cy0+c291cmNlcykgeworCQkJY2hhciAqKnNsb3QgPSByZXZpc2lvbl9zb3VyY2VzX2F0KHJldnMtPnNvdXJjZXMsIGNvbW1pdCk7CisKKwkJCWlmICghKnNsb3QpCisJCQkJKnNsb3QgPSB4c3RyZHVwKG5hbWUpOworCQl9CisJCXJldHVybiBjb21taXQ7CisJfQorCisJLyoKKwkgKiBUcmVlIG9iamVjdD8gRWl0aGVyIG1hcmsgaXQgdW5pbnRlcmVzdGluZywgb3IgYWRkIGl0CisJICogdG8gdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBsb29rIGF0IGxhdGVyLi4KKwkgKi8KKwlpZiAob2JqZWN0LT50eXBlID09IE9CSl9UUkVFKSB7CisJCXN0cnVjdCB0cmVlICp0cmVlID0gKHN0cnVjdCB0cmVlICopb2JqZWN0OworCQlpZiAoIXJldnMtPnRyZWVfb2JqZWN0cykKKwkJCXJldHVybiBOVUxMOworCQlpZiAoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCQltYXJrX3RyZWVfY29udGVudHNfdW5pbnRlcmVzdGluZyhyZXZzLT5yZXBvLCB0cmVlKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWFkZF9wZW5kaW5nX29iamVjdF93aXRoX3BhdGgocmV2cywgb2JqZWN0LCBuYW1lLCBtb2RlLCBwYXRoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBCbG9iIG9iamVjdD8gWW91IGtub3cgdGhlIGRyaWxsIGJ5IG5vdy4uCisJICovCisJaWYgKG9iamVjdC0+dHlwZSA9PSBPQkpfQkxPQikgeworCQlpZiAoIXJldnMtPmJsb2Jfb2JqZWN0cykKKwkJCXJldHVybiBOVUxMOworCQlpZiAoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJcmV0dXJuIE5VTEw7CisJCWFkZF9wZW5kaW5nX29iamVjdF93aXRoX3BhdGgocmV2cywgb2JqZWN0LCBuYW1lLCBtb2RlLCBwYXRoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWRpZSgiJXMgaXMgdW5rbm93biBvYmplY3QiLCBuYW1lKTsKK30KKworc3RhdGljIGludCBldmVyeWJvZHlfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0X2xpc3QgKm9yaWcsCisJCQkJICAgc3RydWN0IGNvbW1pdCAqKmludGVyZXN0aW5nX2NhY2hlKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IG9yaWc7CisKKwlpZiAoKmludGVyZXN0aW5nX2NhY2hlKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9ICppbnRlcmVzdGluZ19jYWNoZTsKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCXJldHVybiAwOworCX0KKworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisKKwkJKmludGVyZXN0aW5nX2NhY2hlID0gY29tbWl0OworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBBIGRlZmluaXRpb24gb2YgInJlbGV2YW50IiBjb21taXQgdGhhdCB3ZSBjYW4gdXNlIHRvIHNpbXBsaWZ5IGxpbWl0ZWQgZ3JhcGhzCisgKiBieSBlbGltaW5hdGluZyBzaWRlIGJyYW5jaGVzLgorICoKKyAqIEEgInJlbGV2YW50IiBjb21taXQgaXMgb25lIHRoYXQgaXMgIVVOSU5URVJFU1RJTkcgKGllIHdlIGFyZSBpbmNsdWRpbmcgaXQKKyAqIGluIG91ciBsaXN0KSwgb3IgdGhhdCBpcyBhIHNwZWNpZmllZCBCT1RUT00gY29tbWl0LiBUaGVuIGFmdGVyIGNvbXB1dGluZworICogYSBsaW1pdGVkIGxpc3QsIGR1cmluZyBwcm9jZXNzaW5nIHdlIGNhbiBnZW5lcmFsbHkgaWdub3JlIGJvdW5kYXJ5IG1lcmdlcworICogY29taW5nIGZyb20gb3V0c2lkZSB0aGUgZ3JhcGgsIChpZSBmcm9tIGlycmVsZXZhbnQgcGFyZW50cyksIGFuZCB0cmVhdAorICogdGhvc2UgbWVyZ2VzIGFzIGlmIHRoZXkgd2VyZSBzaW5nbGUtcGFyZW50LiBUUkVFU0FNRSBpcyBkZWZpbmVkIHRvIGNvbnNpZGVyCisgKiBvbmx5IHJlbGV2YW50IHBhcmVudHMsIGlmIGFueS4gSWYgd2UgYXJlIFRSRUVTQU1FIHRvIG91ciBvbi1ncmFwaCBwYXJlbnRzLAorICogd2UgZG9uJ3QgY2FyZSBpZiB3ZSB3ZXJlICFUUkVFU0FNRSB0byBub24tZ3JhcGggcGFyZW50cy4KKyAqCisgKiBUcmVhdGluZyBib3R0b20gY29tbWl0cyBhcyByZWxldmFudCBlbnN1cmVzIHRoYXQgYSBsaW1pdGVkIGdyYXBoJ3MKKyAqIGNvbm5lY3Rpb24gdG8gdGhlIGFjdHVhbCBib3R0b20gY29tbWl0IGlzIG5vdCB2aWV3ZWQgYXMgYSBzaWRlIGJyYW5jaCwgYnV0CisgKiB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIGdyYXBoLiBGb3IgZXhhbXBsZToKKyAqCisgKiAgIC4uLi5aLi4uQS0tLVgtLS1vLS0tby0tLUIKKyAqICAgICAgICAuICAgICAvCisgKiAgICAgICAgIFctLS1ZCisgKgorICogV2hlbiBjb21wdXRpbmcgIkEuLkIiLCB0aGUgQS1YIGNvbm5lY3Rpb24gaXMgYXQgbGVhc3QgYXMgaW1wb3J0YW50IGFzCisgKiBZLVgsIGRlc3BpdGUgQSBiZWluZyBmbGFnZ2VkIFVOSU5URVJFU1RJTkcuCisgKgorICogQW5kIHdoZW4gY29tcHV0aW5nIC0tYW5jZXN0cnktcGF0aCAiQS4uQiIsIHRoZSBBLVggY29ubmVjdGlvbiBpcyBtb3JlCisgKiBpbXBvcnRhbnQgdGhhbiBZLVgsIGRlc3BpdGUgYm90aCBBIGFuZCBZIGJlaW5nIGZsYWdnZWQgVU5JTlRFUkVTVElORy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmVsZXZhbnRfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlyZXR1cm4gKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBCT1RUT00pKSAhPSBVTklOVEVSRVNUSU5HOworfQorCisvKgorICogUmV0dXJuIGEgc2luZ2xlIHJlbGV2YW50IGNvbW1pdCBmcm9tIGEgcGFyZW50IGxpc3QuIElmIHdlIGFyZSBhIFRSRUVTQU1FCisgKiBjb21taXQsIGFuZCB0aGlzIHNlbGVjdHMgb25lIG9mIG91ciBwYXJlbnRzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2ltcGxpZnkgdG8KKyAqIHRoYXQgcGFyZW50LgorICovCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqb25lX3JlbGV2YW50X3BhcmVudChjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCSAgc3RydWN0IGNvbW1pdF9saXN0ICpvcmlnKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IG9yaWc7CisJc3RydWN0IGNvbW1pdCAqcmVsZXZhbnQgPSBOVUxMOworCisJaWYgKCFvcmlnKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogRm9yIDEtcGFyZW50IGNvbW1pdHMsIG9yIGlmIGZpcnN0LXBhcmVudC1vbmx5LCB0aGVuIHJldHVybiB0aGF0CisJICogZmlyc3QgcGFyZW50IChldmVuIGlmIG5vdCAicmVsZXZhbnQiIGJ5IHRoZSBhYm92ZSBkZWZpbml0aW9uKS4KKwkgKiBUUkVFU0FNRSB3aWxsIGhhdmUgYmVlbiBzZXQgcHVyZWx5IG9uIHRoYXQgcGFyZW50LgorCSAqLworCWlmIChyZXZzLT5maXJzdF9wYXJlbnRfb25seSB8fCAhb3JpZy0+bmV4dCkKKwkJcmV0dXJuIG9yaWctPml0ZW07CisKKwkvKgorCSAqIEZvciBtdWx0aS1wYXJlbnQgY29tbWl0cywgaWRlbnRpZnkgYSBzb2xlIHJlbGV2YW50IHBhcmVudCwgaWYgYW55LgorCSAqIElmIHdlIGhhdmUgb25seSBvbmUgcmVsZXZhbnQgcGFyZW50LCB0aGVuIFRSRUVTQU1FIHdpbGwgYmUgc2V0IHB1cmVseQorCSAqIHdpdGggcmVnYXJkIHRvIHRoYXQgcGFyZW50LCBhbmQgd2UgY2FuIHNpbXBsaWZ5IGFjY29yZGluZ2x5LgorCSAqCisJICogSWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIHJlbGV2YW50IHBhcmVudCwgb3Igbm8gcmVsZXZhbnQgcGFyZW50cworCSAqIChhbmQgbXVsdGlwbGUgaXJyZWxldmFudCBvbmVzKSwgdGhlbiB3ZSBjYW4ndCBzZWxlY3QgYSBwYXJlbnQgaGVyZQorCSAqIGFuZCByZXR1cm4gTlVMTC4KKwkgKi8KKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJaWYgKHJlbGV2YW50X2NvbW1pdChjb21taXQpKSB7CisJCQlpZiAocmVsZXZhbnQpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlyZWxldmFudCA9IGNvbW1pdDsKKwkJfQorCX0KKwlyZXR1cm4gcmVsZXZhbnQ7Cit9CisKKy8qCisgKiBUaGUgZ29hbCBpcyB0byBnZXQgUkVWX1RSRUVfTkVXIGFzIHRoZSByZXN1bHQgb25seSBpZiB0aGUKKyAqIGRpZmYgY29uc2lzdHMgb2YgYWxsICcrJyAoYW5kIG5vIG90aGVyIGNoYW5nZXMpLCBSRVZfVFJFRV9PTEQKKyAqIGlmIHRoZSB3aG9sZSBkaWZmIGlzIHJlbW92YWwgb2Ygb2xkIGRhdGEsIGFuZCBvdGhlcndpc2UKKyAqIFJFVl9UUkVFX0RJRkZFUkVOVCAob2YgY291cnNlIGlmIHRoZSB0cmVlcyBhcmUgdGhlIHNhbWUgd2UKKyAqIHdhbnQgUkVWX1RSRUVfU0FNRSkuCisgKgorICogVGhlIG9ubHkgdGltZSB3ZSBjYXJlIGFib3V0IHRoZSBkaXN0aW5jdGlvbiBpcyB3aGVuCisgKiByZW1vdmVfZW1wdHlfdHJlZXMgaXMgaW4gZWZmZWN0LCBpbiB3aGljaCBjYXNlIHdlIGNhcmUgb25seSBhYm91dAorICogd2hldGhlciB0aGUgd2hvbGUgY2hhbmdlIGlzIFJFVl9UUkVFX05FVywgb3IgaWYgdGhlcmUncyBhbm90aGVyIHR5cGUKKyAqIG9mIGNoYW5nZS4gV2hpY2ggbWVhbnMgd2UgY2FuIHN0b3AgdGhlIGRpZmYgZWFybHkgaW4gZWl0aGVyIG9mIHRoZXNlCisgKiBjYXNlczoKKyAqCisgKiAgIDEuIFdlJ3JlIG5vdCB1c2luZyByZW1vdmVfZW1wdHlfdHJlZXMgYXQgYWxsLgorICoKKyAqICAgMi4gV2Ugc2F3IGFueXRoaW5nIGV4Y2VwdCBSRVZfVFJFRV9ORVcuCisgKi8KK3N0YXRpYyBpbnQgdHJlZV9kaWZmZXJlbmNlID0gUkVWX1RSRUVfU0FNRTsKKworc3RhdGljIHZvaWQgZmlsZV9hZGRfcmVtb3ZlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSAgICBpbnQgYWRkcmVtb3ZlLCB1bnNpZ25lZCBtb2RlLAorCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgaW50IG9pZF92YWxpZCwKKwkJICAgIGNvbnN0IGNoYXIgKmZ1bGxwYXRoLCB1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUpCit7CisJaW50IGRpZmYgPSBhZGRyZW1vdmUgPT0gJysnID8gUkVWX1RSRUVfTkVXIDogUkVWX1RSRUVfT0xEOworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IG9wdGlvbnMtPmNoYW5nZV9mbl9kYXRhOworCisJdHJlZV9kaWZmZXJlbmNlIHw9IGRpZmY7CisJaWYgKCFyZXZzLT5yZW1vdmVfZW1wdHlfdHJlZXMgfHwgdHJlZV9kaWZmZXJlbmNlICE9IFJFVl9UUkVFX05FVykKKwkJb3B0aW9ucy0+ZmxhZ3MuaGFzX2NoYW5nZXMgPSAxOworfQorCitzdGF0aWMgdm9pZCBmaWxlX2NoYW5nZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgdW5zaWduZWQgb2xkX21vZGUsIHVuc2lnbmVkIG5ld19tb2RlLAorCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCwKKwkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsCisJCSBpbnQgb2xkX29pZF92YWxpZCwgaW50IG5ld19vaWRfdmFsaWQsCisJCSBjb25zdCBjaGFyICpmdWxscGF0aCwKKwkJIHVuc2lnbmVkIG9sZF9kaXJ0eV9zdWJtb2R1bGUsIHVuc2lnbmVkIG5ld19kaXJ0eV9zdWJtb2R1bGUpCit7CisJdHJlZV9kaWZmZXJlbmNlID0gUkVWX1RSRUVfRElGRkVSRU5UOworCW9wdGlvbnMtPmZsYWdzLmhhc19jaGFuZ2VzID0gMTsKK30KKworc3RhdGljIGludCBibG9vbV9maWx0ZXJfYXRleGl0X3JlZ2lzdGVyZWQ7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50X2Jsb29tX2ZpbHRlcl9tYXliZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY291bnRfYmxvb21fZmlsdGVyX2RlZmluaXRlbHlfbm90Oworc3RhdGljIHVuc2lnbmVkIGludCBjb3VudF9ibG9vbV9maWx0ZXJfZmFsc2VfcG9zaXRpdmU7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50X2Jsb29tX2ZpbHRlcl9ub3RfcHJlc2VudDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY291bnRfYmxvb21fZmlsdGVyX2xlbmd0aF96ZXJvOworCitzdGF0aWMgdm9pZCB0cmFjZTJfYmxvb21fZmlsdGVyX3N0YXRpc3RpY3NfYXRleGl0KHZvaWQpCit7CisJc3RydWN0IGpzb25fd3JpdGVyIGp3ID0gSlNPTl9XUklURVJfSU5JVDsKKworCWp3X29iamVjdF9iZWdpbigmancsIDApOworCWp3X29iamVjdF9pbnRtYXgoJmp3LCAiZmlsdGVyX25vdF9wcmVzZW50IiwgY291bnRfYmxvb21fZmlsdGVyX25vdF9wcmVzZW50KTsKKwlqd19vYmplY3RfaW50bWF4KCZqdywgInplcm9fbGVuZ3RoX2ZpbHRlciIsIGNvdW50X2Jsb29tX2ZpbHRlcl9sZW5ndGhfemVybyk7CisJandfb2JqZWN0X2ludG1heCgmancsICJtYXliZSIsIGNvdW50X2Jsb29tX2ZpbHRlcl9tYXliZSk7CisJandfb2JqZWN0X2ludG1heCgmancsICJkZWZpbml0ZWx5X25vdCIsIGNvdW50X2Jsb29tX2ZpbHRlcl9kZWZpbml0ZWx5X25vdCk7CisJandfb2JqZWN0X2ludG1heCgmancsICJmYWxzZV9wb3NpdGl2ZSIsIGNvdW50X2Jsb29tX2ZpbHRlcl9mYWxzZV9wb3NpdGl2ZSk7CisJandfZW5kKCZqdyk7CisKKwl0cmFjZTJfZGF0YV9qc29uKCJibG9vbSIsIHRoZV9yZXBvc2l0b3J5LCAic3RhdGlzdGljcyIsICZqdyk7CisKKwlqd19yZWxlYXNlKCZqdyk7Cit9CisKK3N0YXRpYyBpbnQgZm9yYmlkX2Jsb29tX2ZpbHRlcnMoc3RydWN0IHBhdGhzcGVjICpzcGVjKQoreworCWlmIChzcGVjLT5oYXNfd2lsZGNhcmQpCisJCXJldHVybiAxOworCWlmIChzcGVjLT5uciA+IDEpCisJCXJldHVybiAxOworCWlmIChzcGVjLT5tYWdpYyAmIH5QQVRIU1BFQ19MSVRFUkFMKQorCQlyZXR1cm4gMTsKKwlpZiAoc3BlYy0+bnIgJiYgKHNwZWMtPml0ZW1zWzBdLm1hZ2ljICYgflBBVEhTUEVDX0xJVEVSQUwpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3RvX3VzZV9ibG9vbV9maWx0ZXIoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBwYXRoc3BlY19pdGVtICpwaTsKKwljaGFyICpwYXRoX2FsbG9jID0gTlVMTDsKKwljb25zdCBjaGFyICpwYXRoOworCWludCBsYXN0X2luZGV4OworCWludCBsZW47CisKKwlpZiAoIXJldnMtPmNvbW1pdHMpCisJCXJldHVybjsKKworCWlmIChmb3JiaWRfYmxvb21fZmlsdGVycygmcmV2cy0+cHJ1bmVfZGF0YSkpCisJCXJldHVybjsKKworCXJlcG9fcGFyc2VfY29tbWl0KHJldnMtPnJlcG8sIHJldnMtPmNvbW1pdHMtPml0ZW0pOworCisJaWYgKCFyZXZzLT5yZXBvLT5vYmplY3RzLT5jb21taXRfZ3JhcGgpCisJCXJldHVybjsKKworCXJldnMtPmJsb29tX2ZpbHRlcl9zZXR0aW5ncyA9IHJldnMtPnJlcG8tPm9iamVjdHMtPmNvbW1pdF9ncmFwaC0+Ymxvb21fZmlsdGVyX3NldHRpbmdzOworCWlmICghcmV2cy0+Ymxvb21fZmlsdGVyX3NldHRpbmdzKQorCQlyZXR1cm47CisKKwlwaSA9ICZyZXZzLT5wcnVuaW5nLnBhdGhzcGVjLml0ZW1zWzBdOworCWxhc3RfaW5kZXggPSBwaS0+bGVuIC0gMTsKKworCS8qIHJlbW92ZSBzaW5nbGUgdHJhaWxpbmcgc2xhc2ggZnJvbSBwYXRoLCBpZiBuZWVkZWQgKi8KKwlpZiAocGktPm1hdGNoW2xhc3RfaW5kZXhdID09ICcvJykgeworCSAgICBwYXRoX2FsbG9jID0geHN0cmR1cChwaS0+bWF0Y2gpOworCSAgICBwYXRoX2FsbG9jW2xhc3RfaW5kZXhdID0gJ1wwJzsKKwkgICAgcGF0aCA9IHBhdGhfYWxsb2M7CisJfSBlbHNlCisJICAgIHBhdGggPSBwaS0+bWF0Y2g7CisKKwlsZW4gPSBzdHJsZW4ocGF0aCk7CisKKwlyZXZzLT5ibG9vbV9rZXkgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgYmxvb21fa2V5KSk7CisJZmlsbF9ibG9vbV9rZXkocGF0aCwgbGVuLCByZXZzLT5ibG9vbV9rZXksIHJldnMtPmJsb29tX2ZpbHRlcl9zZXR0aW5ncyk7CisKKwlpZiAodHJhY2UyX2lzX2VuYWJsZWQoKSAmJiAhYmxvb21fZmlsdGVyX2F0ZXhpdF9yZWdpc3RlcmVkKSB7CisJCWF0ZXhpdCh0cmFjZTJfYmxvb21fZmlsdGVyX3N0YXRpc3RpY3NfYXRleGl0KTsKKwkJYmxvb21fZmlsdGVyX2F0ZXhpdF9yZWdpc3RlcmVkID0gMTsKKwl9CisKKwlmcmVlKHBhdGhfYWxsb2MpOworfQorCitzdGF0aWMgaW50IGNoZWNrX21heWJlX2RpZmZlcmVudF9pbl9ibG9vbV9maWx0ZXIoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkJIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgYmxvb21fZmlsdGVyICpmaWx0ZXI7CisJaW50IHJlc3VsdDsKKworCWlmICghcmV2cy0+cmVwby0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoY29tbWl0LT5nZW5lcmF0aW9uID09IEdFTkVSQVRJT05fTlVNQkVSX0lORklOSVRZKQorCQlyZXR1cm4gLTE7CisKKwlmaWx0ZXIgPSBnZXRfYmxvb21fZmlsdGVyKHJldnMtPnJlcG8sIGNvbW1pdCwgMCk7CisKKwlpZiAoIWZpbHRlcikgeworCQljb3VudF9ibG9vbV9maWx0ZXJfbm90X3ByZXNlbnQrKzsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICghZmlsdGVyLT5sZW4pIHsKKwkJY291bnRfYmxvb21fZmlsdGVyX2xlbmd0aF96ZXJvKys7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXN1bHQgPSBibG9vbV9maWx0ZXJfY29udGFpbnMoZmlsdGVyLAorCQkJCSAgICAgICByZXZzLT5ibG9vbV9rZXksCisJCQkJICAgICAgIHJldnMtPmJsb29tX2ZpbHRlcl9zZXR0aW5ncyk7CisKKwlpZiAocmVzdWx0KQorCQljb3VudF9ibG9vbV9maWx0ZXJfbWF5YmUrKzsKKwllbHNlCisJCWNvdW50X2Jsb29tX2ZpbHRlcl9kZWZpbml0ZWx5X25vdCsrOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCByZXZfY29tcGFyZV90cmVlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICBzdHJ1Y3QgY29tbWl0ICpwYXJlbnQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IG50aF9wYXJlbnQpCit7CisJc3RydWN0IHRyZWUgKnQxID0gZ2V0X2NvbW1pdF90cmVlKHBhcmVudCk7CisJc3RydWN0IHRyZWUgKnQyID0gZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCk7CisJaW50IGJsb29tX3JldCA9IDE7CisKKwlpZiAoIXQxKQorCQlyZXR1cm4gUkVWX1RSRUVfTkVXOworCWlmICghdDIpCisJCXJldHVybiBSRVZfVFJFRV9PTEQ7CisKKwlpZiAocmV2cy0+c2ltcGxpZnlfYnlfZGVjb3JhdGlvbikgeworCQkvKgorCQkgKiBJZiB3ZSBhcmUgc2ltcGxpZnlpbmcgYnkgZGVjb3JhdGlvbiwgdGhlbiB0aGUgY29tbWl0CisJCSAqIGlzIHdvcnRoIHNob3dpbmcgaWYgaXQgaGFzIGEgdGFnIHBvaW50aW5nIGF0IGl0LgorCQkgKi8KKwkJaWYgKGdldF9uYW1lX2RlY29yYXRpb24oJmNvbW1pdC0+b2JqZWN0KSkKKwkJCXJldHVybiBSRVZfVFJFRV9ESUZGRVJFTlQ7CisJCS8qCisJCSAqIEEgY29tbWl0IHRoYXQgaXMgbm90IHBvaW50ZWQgYnkgYSB0YWcgaXMgdW5pbnRlcmVzdGluZworCQkgKiBpZiB3ZSBhcmUgbm90IGxpbWl0ZWQgYnkgcGF0aC4gIFRoaXMgbWVhbnMgdGhhdCB5b3Ugd2lsbAorCQkgKiBzZWUgdGhlIHVzdWFsICJjb21taXRzIHRoYXQgdG91Y2ggdGhlIHBhdGhzIiBwbHVzIGFueQorCQkgKiB0YWdnZWQgY29tbWl0IGJ5IHNwZWNpZnlpbmcgYm90aCAtLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24KKwkJICogYW5kIHBhdGhzcGVjLgorCQkgKi8KKwkJaWYgKCFyZXZzLT5wcnVuZV9kYXRhLm5yKQorCQkJcmV0dXJuIFJFVl9UUkVFX1NBTUU7CisJfQorCisJaWYgKHJldnMtPmJsb29tX2tleSAmJiAhbnRoX3BhcmVudCkgeworCQlibG9vbV9yZXQgPSBjaGVja19tYXliZV9kaWZmZXJlbnRfaW5fYmxvb21fZmlsdGVyKHJldnMsIGNvbW1pdCk7CisKKwkJaWYgKGJsb29tX3JldCA9PSAwKQorCQkJcmV0dXJuIFJFVl9UUkVFX1NBTUU7CisJfQorCisJdHJlZV9kaWZmZXJlbmNlID0gUkVWX1RSRUVfU0FNRTsKKwlyZXZzLT5wcnVuaW5nLmZsYWdzLmhhc19jaGFuZ2VzID0gMDsKKwlpZiAoZGlmZl90cmVlX29pZCgmdDEtPm9iamVjdC5vaWQsICZ0Mi0+b2JqZWN0Lm9pZCwgIiIsCisJCQkgICAmcmV2cy0+cHJ1bmluZykgPCAwKQorCQlyZXR1cm4gUkVWX1RSRUVfRElGRkVSRU5UOworCisJaWYgKCFudGhfcGFyZW50KQorCQlpZiAoYmxvb21fcmV0ID09IDEgJiYgdHJlZV9kaWZmZXJlbmNlID09IFJFVl9UUkVFX1NBTUUpCisJCQljb3VudF9ibG9vbV9maWx0ZXJfZmFsc2VfcG9zaXRpdmUrKzsKKworCXJldHVybiB0cmVlX2RpZmZlcmVuY2U7Cit9CisKK3N0YXRpYyBpbnQgcmV2X3NhbWVfdHJlZV9hc19lbXB0eShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCB0cmVlICp0MSA9IGdldF9jb21taXRfdHJlZShjb21taXQpOworCisJaWYgKCF0MSkKKwkJcmV0dXJuIDA7CisKKwl0cmVlX2RpZmZlcmVuY2UgPSBSRVZfVFJFRV9TQU1FOworCXJldnMtPnBydW5pbmcuZmxhZ3MuaGFzX2NoYW5nZXMgPSAwOworCXJldHZhbCA9IGRpZmZfdHJlZV9vaWQoTlVMTCwgJnQxLT5vYmplY3Qub2lkLCAiIiwgJnJldnMtPnBydW5pbmcpOworCisJcmV0dXJuIHJldHZhbCA+PSAwICYmICh0cmVlX2RpZmZlcmVuY2UgPT0gUkVWX1RSRUVfU0FNRSk7Cit9CisKK3N0cnVjdCB0cmVlc2FtZV9zdGF0ZSB7CisJdW5zaWduZWQgaW50IG5wYXJlbnRzOworCXVuc2lnbmVkIGNoYXIgdHJlZXNhbWVbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgc3RydWN0IHRyZWVzYW1lX3N0YXRlICppbml0aWFsaXNlX3RyZWVzYW1lKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXVuc2lnbmVkIG4gPSBjb21taXRfbGlzdF9jb3VudChjb21taXQtPnBhcmVudHMpOworCXN0cnVjdCB0cmVlc2FtZV9zdGF0ZSAqc3QgPSB4Y2FsbG9jKDEsIHN0X2FkZChzaXplb2YoKnN0KSwgbikpOworCXN0LT5ucGFyZW50cyA9IG47CisJYWRkX2RlY29yYXRpb24oJnJldnMtPnRyZWVzYW1lLCAmY29tbWl0LT5vYmplY3QsIHN0KTsKKwlyZXR1cm4gc3Q7Cit9CisKKy8qCisgKiBNdXN0IGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciByZW1vdmluZyB0aGUgbnRoX3BhcmVudCBmcm9tIGEgY29tbWl0J3MKKyAqIHBhcmVudCBsaXN0LCBpZiB3ZSBhcmUgbWFpbnRhaW5pbmcgdGhlIHBlci1wYXJlbnQgdHJlZXNhbWVbXSBkZWNvcmF0aW9uLgorICogVGhpcyBkb2VzIG5vdCByZWNhbGN1bGF0ZSB0aGUgbWFzdGVyIFRSRUVTQU1FIGZsYWcgLSB1cGRhdGVfdHJlZXNhbWUoKQorICogc2hvdWxkIGJlIGNhbGxlZCB0byB1cGRhdGUgaXQgYWZ0ZXIgYSBzZXF1ZW5jZSBvZiB0cmVlc2FtZVtdIG1vZGlmaWNhdGlvbnMKKyAqIHRoYXQgbWF5IGhhdmUgYWZmZWN0ZWQgaXQuCisgKi8KK3N0YXRpYyBpbnQgY29tcGFjdF90cmVlc2FtZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdW5zaWduZWQgbnRoX3BhcmVudCkKK3sKKwlzdHJ1Y3QgdHJlZXNhbWVfc3RhdGUgKnN0OworCWludCBvbGRfc2FtZTsKKworCWlmICghY29tbWl0LT5wYXJlbnRzKSB7CisJCS8qCisJCSAqIEhhdmUganVzdCByZW1vdmVkIHRoZSBvbmx5IHBhcmVudCBmcm9tIGEgbm9uLW1lcmdlLgorCQkgKiBEaWZmZXJlbnQgaGFuZGxpbmcsIGFzIHdlIGxhY2sgZGVjb3JhdGlvbi4KKwkJICovCisJCWlmIChudGhfcGFyZW50ICE9IDApCisJCQlkaWUoImNvbXBhY3RfdHJlZXNhbWUgJXUiLCBudGhfcGFyZW50KTsKKwkJb2xkX3NhbWUgPSAhIShjb21taXQtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKTsKKwkJaWYgKHJldl9zYW1lX3RyZWVfYXNfZW1wdHkocmV2cywgY29tbWl0KSkKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRSRUVTQU1FOworCQllbHNlCisJCQljb21taXQtPm9iamVjdC5mbGFncyAmPSB+VFJFRVNBTUU7CisJCXJldHVybiBvbGRfc2FtZTsKKwl9CisKKwlzdCA9IGxvb2t1cF9kZWNvcmF0aW9uKCZyZXZzLT50cmVlc2FtZSwgJmNvbW1pdC0+b2JqZWN0KTsKKwlpZiAoIXN0IHx8IG50aF9wYXJlbnQgPj0gc3QtPm5wYXJlbnRzKQorCQlkaWUoImNvbXBhY3RfdHJlZXNhbWUgJXUiLCBudGhfcGFyZW50KTsKKworCW9sZF9zYW1lID0gc3QtPnRyZWVzYW1lW250aF9wYXJlbnRdOworCW1lbW1vdmUoc3QtPnRyZWVzYW1lICsgbnRoX3BhcmVudCwKKwkJc3QtPnRyZWVzYW1lICsgbnRoX3BhcmVudCArIDEsCisJCXN0LT5ucGFyZW50cyAtIG50aF9wYXJlbnQgLSAxKTsKKworCS8qCisJICogSWYgd2UndmUganVzdCBiZWNvbWUgYSBub24tbWVyZ2UgY29tbWl0LCB1cGRhdGUgVFJFRVNBTUUKKwkgKiBpbW1lZGlhdGVseSwgYW5kIHJlbW92ZSB0aGUgbm8tbG9uZ2VyLW5lZWRlZCBkZWNvcmF0aW9uLgorCSAqIElmIHN0aWxsIGEgbWVyZ2UsIGRlZmVyIHVwZGF0ZSB1bnRpbCB1cGRhdGVfdHJlZXNhbWUoKS4KKwkgKi8KKwlpZiAoLS1zdC0+bnBhcmVudHMgPT0gMSkgeworCQlpZiAoY29tbWl0LT5wYXJlbnRzLT5uZXh0KQorCQkJZGllKCJjb21wYWN0X3RyZWVzYW1lIHBhcmVudHMgbWlzbWF0Y2giKTsKKwkJaWYgKHN0LT50cmVlc2FtZVswXSAmJiByZXZzLT5kZW5zZSkKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRSRUVTQU1FOworCQllbHNlCisJCQljb21taXQtPm9iamVjdC5mbGFncyAmPSB+VFJFRVNBTUU7CisJCWZyZWUoYWRkX2RlY29yYXRpb24oJnJldnMtPnRyZWVzYW1lLCAmY29tbWl0LT5vYmplY3QsIE5VTEwpKTsKKwl9CisKKwlyZXR1cm4gb2xkX3NhbWU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCB1cGRhdGVfdHJlZXNhbWUoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaWYgKGNvbW1pdC0+cGFyZW50cyAmJiBjb21taXQtPnBhcmVudHMtPm5leHQpIHsKKwkJdW5zaWduZWQgbjsKKwkJc3RydWN0IHRyZWVzYW1lX3N0YXRlICpzdDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCQl1bnNpZ25lZCByZWxldmFudF9wYXJlbnRzOworCQl1bnNpZ25lZCByZWxldmFudF9jaGFuZ2UsIGlycmVsZXZhbnRfY2hhbmdlOworCisJCXN0ID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPnRyZWVzYW1lLCAmY29tbWl0LT5vYmplY3QpOworCQlpZiAoIXN0KQorCQkJZGllKCJ1cGRhdGVfdHJlZXNhbWUgJXMiLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwkJcmVsZXZhbnRfcGFyZW50cyA9IDA7CisJCXJlbGV2YW50X2NoYW5nZSA9IGlycmVsZXZhbnRfY2hhbmdlID0gMDsKKwkJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzLCBuID0gMDsgcDsgbisrLCBwID0gcC0+bmV4dCkgeworCQkJaWYgKHJlbGV2YW50X2NvbW1pdChwLT5pdGVtKSkgeworCQkJCXJlbGV2YW50X2NoYW5nZSB8PSAhc3QtPnRyZWVzYW1lW25dOworCQkJCXJlbGV2YW50X3BhcmVudHMrKzsKKwkJCX0gZWxzZQorCQkJCWlycmVsZXZhbnRfY2hhbmdlIHw9ICFzdC0+dHJlZXNhbWVbbl07CisJCX0KKwkJaWYgKHJlbGV2YW50X3BhcmVudHMgPyByZWxldmFudF9jaGFuZ2UgOiBpcnJlbGV2YW50X2NoYW5nZSkKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH5UUkVFU0FNRTsKKwkJZWxzZQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisJfQorCisJcmV0dXJuIGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxpbWl0aW5nX2Nhbl9pbmNyZWFzZV90cmVlc2FtZShjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJLyoKKwkgKiBUUkVFU0FNRSBpcyBpcnJlbGV2YW50IHVubGVzcyBwcnVuZSAmJiBkZW5zZTsKKwkgKiBpZiBzaW1wbGlmeV9oaXN0b3J5IGlzIHNldCwgd2UgY2FuJ3QgaGF2ZSBhIG1peHR1cmUgb2YgVFJFRVNBTUUgYW5kCisJICogICAgIVRSRUVTQU1FIElOVEVSRVNUSU5HIHBhcmVudHMgKGFuZCB3ZSBkb24ndCBoYXZlIHRyZWVzYW1lW10KKwkgKiAgICBkZWNvcmF0aW9uIGFueXdheSk7CisJICogaWYgZmlyc3RfcGFyZW50X29ubHkgaXMgc2V0LCB0aGVuIHRoZSBUUkVFU0FNRSBmbGFnIGlzIGxvY2tlZAorCSAqICAgIGFnYWluc3QgdGhlIGZpcnN0IHBhcmVudCAoYW5kIGFnYWluIHdlIGxhY2sgdHJlZXNhbWVbXSBkZWNvcmF0aW9uKS4KKwkgKi8KKwlyZXR1cm4gcmV2cy0+cHJ1bmUgJiYgcmV2cy0+ZGVuc2UgJiYKKwkgICAgICAgIXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgJiYKKwkgICAgICAgIXJldnMtPmZpcnN0X3BhcmVudF9vbmx5OworfQorCitzdGF0aWMgdm9pZCB0cnlfdG9fc2ltcGxpZnlfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwLCAqcGFyZW50OworCXN0cnVjdCB0cmVlc2FtZV9zdGF0ZSAqdHMgPSBOVUxMOworCWludCByZWxldmFudF9jaGFuZ2UgPSAwLCBpcnJlbGV2YW50X2NoYW5nZSA9IDA7CisJaW50IHJlbGV2YW50X3BhcmVudHMsIG50aF9wYXJlbnQ7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGRvIHBydW5pbmcsIGV2ZXJ5dGhpbmcgaXMgaW50ZXJlc3RpbmcKKwkgKi8KKwlpZiAoIXJldnMtPnBydW5lKQorCQlyZXR1cm47CisKKwlpZiAoIWdldF9jb21taXRfdHJlZShjb21taXQpKQorCQlyZXR1cm47CisKKwlpZiAoIWNvbW1pdC0+cGFyZW50cykgeworCQlpZiAocmV2X3NhbWVfdHJlZV9hc19lbXB0eShyZXZzLCBjb21taXQpKQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE5vcm1hbCBub24tbWVyZ2UgY29tbWl0PyBJZiB3ZSBkb24ndCB3YW50IHRvIG1ha2UgdGhlCisJICogaGlzdG9yeSBkZW5zZSwgd2UgY29uc2lkZXIgaXQgYWx3YXlzIHRvIGJlIGEgY2hhbmdlLi4KKwkgKi8KKwlpZiAoIXJldnMtPmRlbnNlICYmICFjb21taXQtPnBhcmVudHMtPm5leHQpCisJCXJldHVybjsKKworCWZvciAocHAgPSAmY29tbWl0LT5wYXJlbnRzLCBudGhfcGFyZW50ID0gMCwgcmVsZXZhbnRfcGFyZW50cyA9IDA7CisJICAgICAocGFyZW50ID0gKnBwKSAhPSBOVUxMOworCSAgICAgcHAgPSAmcGFyZW50LT5uZXh0LCBudGhfcGFyZW50KyspIHsKKwkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudC0+aXRlbTsKKwkJaWYgKHJlbGV2YW50X2NvbW1pdChwKSkKKwkJCXJlbGV2YW50X3BhcmVudHMrKzsKKworCQlpZiAobnRoX3BhcmVudCA9PSAxKSB7CisJCQkvKgorCQkJICogVGhpcyBvdXIgc2Vjb25kIGxvb3AgaXRlcmF0aW9uIC0gc28gd2Ugbm93IGtub3cKKwkJCSAqIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1lcmdlLgorCQkJICoKKwkJCSAqIERvIG5vdCBjb21wYXJlIHdpdGggbGF0ZXIgcGFyZW50cyB3aGVuIHdlIGNhcmUgb25seSBhYm91dAorCQkJICogdGhlIGZpcnN0IHBhcmVudCBjaGFpbiwgaW4gb3JkZXIgdG8gYXZvaWQgZGVyYWlsaW5nIHRoZQorCQkJICogdHJhdmVyc2FsIHRvIGZvbGxvdyBhIHNpZGUgYnJhbmNoIHRoYXQgYnJvdWdodCBldmVyeXRoaW5nCisJCQkgKiBpbiB0aGUgcGF0aCB3ZSBhcmUgbGltaXRlZCB0byBieSB0aGUgcGF0aHNwZWMuCisJCQkgKi8KKwkJCWlmIChyZXZzLT5maXJzdF9wYXJlbnRfb25seSkKKwkJCQlicmVhazsKKwkJCS8qCisJCQkgKiBJZiB0aGlzIHdpbGwgcmVtYWluIGEgcG90ZW50aWFsbHktc2ltcGxpZmlhYmxlCisJCQkgKiBtZXJnZSwgcmVtZW1iZXIgcGVyLXBhcmVudCB0cmVlc2FtZSBpZiBuZWVkZWQuCisJCQkgKiBJbml0aWFsaXNlIHRoZSBhcnJheSB3aXRoIHRoZSBjb21wYXJpc29uIGZyb20gb3VyCisJCQkgKiBmaXJzdCBpdGVyYXRpb24uCisJCQkgKi8KKwkJCWlmIChyZXZzLT50cmVlc2FtZS5uYW1lICYmCisJCQkgICAgIXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgJiYKKwkJCSAgICAhKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpIHsKKwkJCQl0cyA9IGluaXRpYWxpc2VfdHJlZXNhbWUocmV2cywgY29tbWl0KTsKKwkJCQlpZiAoIShpcnJlbGV2YW50X2NoYW5nZSB8fCByZWxldmFudF9jaGFuZ2UpKQorCQkJCQl0cy0+dHJlZXNhbWVbMF0gPSAxOworCQkJfQorCQl9CisJCWlmIChwYXJzZV9jb21taXQocCkgPCAwKQorCQkJZGllKCJjYW5ub3Qgc2ltcGxpZnkgY29tbWl0ICVzIChiZWNhdXNlIG9mICVzKSIsCisJCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSwKKwkJCSAgICBvaWRfdG9faGV4KCZwLT5vYmplY3Qub2lkKSk7CisJCXN3aXRjaCAocmV2X2NvbXBhcmVfdHJlZShyZXZzLCBwLCBjb21taXQsIG50aF9wYXJlbnQpKSB7CisJCWNhc2UgUkVWX1RSRUVfU0FNRToKKwkJCWlmICghcmV2cy0+c2ltcGxpZnlfaGlzdG9yeSB8fCAhcmVsZXZhbnRfY29tbWl0KHApKSB7CisJCQkJLyogRXZlbiBpZiBhIG1lcmdlIHdpdGggYW4gdW5pbnRlcmVzdGluZworCQkJCSAqIHNpZGUgYnJhbmNoIGJyb3VnaHQgdGhlIGVudGlyZSBjaGFuZ2UKKwkJCQkgKiB3ZSBhcmUgaW50ZXJlc3RlZCBpbiwgd2UgZG8gbm90IHdhbnQKKwkJCQkgKiB0byBsb3NlIHRoZSBvdGhlciBicmFuY2hlcyBvZiB0aGlzCisJCQkJICogbWVyZ2UsIHNvIHdlIGp1c3Qga2VlcCBnb2luZy4KKwkJCQkgKi8KKwkJCQlpZiAodHMpCisJCQkJCXRzLT50cmVlc2FtZVtudGhfcGFyZW50XSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlwYXJlbnQtPm5leHQgPSBOVUxMOworCQkJY29tbWl0LT5wYXJlbnRzID0gcGFyZW50OworCisJCQkvKgorCQkJICogQSBtZXJnZSBjb21taXQgaXMgYSAiZGl2ZXJzaW9uIiBpZiBpdCBpcyBub3QKKwkJCSAqIFRSRUVTQU1FIHRvIGl0cyBmaXJzdCBwYXJlbnQgYnV0IGlzIFRSRUVTQU1FCisJCQkgKiB0byBhIGxhdGVyIHBhcmVudC4gSW4gdGhlIHNpbXBsaWZpZWQgaGlzdG9yeSwKKwkJCSAqIHdlICJkaXZlcnQiIHRoZSBoaXN0b3J5IHdhbGsgdG8gdGhlIGxhdGVyCisJCQkgKiBwYXJlbnQuIFRoZXNlIGNvbW1pdHMgYXJlIHNob3duIHdoZW4gInNob3dfcHVsbHMiCisJCQkgKiBpcyBlbmFibGVkLCBzbyBkbyBub3QgbWFyayB0aGUgb2JqZWN0IGFzCisJCQkgKiBUUkVFU0FNRSBoZXJlLgorCQkJICovCisJCQlpZiAoIXJldnMtPnNob3dfcHVsbHMgfHwgIW50aF9wYXJlbnQpCisJCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisKKwkJCXJldHVybjsKKworCQljYXNlIFJFVl9UUkVFX05FVzoKKwkJCWlmIChyZXZzLT5yZW1vdmVfZW1wdHlfdHJlZXMgJiYKKwkJCSAgICByZXZfc2FtZV90cmVlX2FzX2VtcHR5KHJldnMsIHApKSB7CisJCQkJLyogV2UgYXJlIGFkZGluZyBhbGwgdGhlIHNwZWNpZmllZAorCQkJCSAqIHBhdGhzIGZyb20gdGhpcyBwYXJlbnQsIHNvIHRoZQorCQkJCSAqIGhpc3RvcnkgYmV5b25kIHRoaXMgcGFyZW50IGlzIG5vdAorCQkJCSAqIGludGVyZXN0aW5nLiAgUmVtb3ZlIGl0cyBwYXJlbnRzCisJCQkJICogKHRoZXkgYXJlIGdyYW5kcGFyZW50cyBmb3IgdXMpLgorCQkJCSAqIElPVywgd2UgcHJldGVuZCB0aGlzIHBhcmVudCBpcyBhCisJCQkJICogInJvb3QiIGNvbW1pdC4KKwkJCQkgKi8KKwkJCQlpZiAocGFyc2VfY29tbWl0KHApIDwgMCkKKwkJCQkJZGllKCJjYW5ub3Qgc2ltcGxpZnkgY29tbWl0ICVzIChpbnZhbGlkICVzKSIsCisJCQkJCSAgICBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpLAorCQkJCQkgICAgb2lkX3RvX2hleCgmcC0+b2JqZWN0Lm9pZCkpOworCQkJCXAtPnBhcmVudHMgPSBOVUxMOworCQkJfQorCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIFJFVl9UUkVFX09MRDoKKwkJY2FzZSBSRVZfVFJFRV9ESUZGRVJFTlQ6CisJCQlpZiAocmVsZXZhbnRfY29tbWl0KHApKQorCQkJCXJlbGV2YW50X2NoYW5nZSA9IDE7CisJCQllbHNlCisJCQkJaXJyZWxldmFudF9jaGFuZ2UgPSAxOworCisJCQlpZiAoIW50aF9wYXJlbnQpCisJCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gUFVMTF9NRVJHRTsKKworCQkJY29udGludWU7CisJCX0KKwkJZGllKCJiYWQgdHJlZSBjb21wYXJlIGZvciBjb21taXQgJXMiLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwl9CisKKwkvKgorCSAqIFRSRUVTQU1FIGlzIHN0cmFpZ2h0Zm9yd2FyZCBmb3Igc2luZ2xlLXBhcmVudCBjb21taXRzLiBGb3IgbWVyZ2UKKwkgKiBjb21taXRzLCBpdCBpcyBtb3N0IHVzZWZ1bCB0byBkZWZpbmUgaXQgc28gdGhhdCAiaXJyZWxldmFudCIKKwkgKiBwYXJlbnRzIGNhbm5vdCBtYWtlIHVzICFUUkVFU0FNRSAtIGlmIHdlIGhhdmUgYW55IHJlbGV2YW50CisJICogcGFyZW50cywgdGhlbiB3ZSBvbmx5IGNvbnNpZGVyIFRSRUVTQU1FbmVzcyB3aXRoIHJlc3BlY3QgdG8gdGhlbSwKKwkgKiBhbGxvd2luZyBpcnJlbGV2YW50IG1lcmdlcyBmcm9tIHVuaW50ZXJlc3RpbmcgYnJhbmNoZXMgdG8gYmUKKwkgKiBzaW1wbGlmaWVkIGF3YXkuIE9ubHkgaWYgd2UgaGF2ZSBvbmx5IGlycmVsZXZhbnQgcGFyZW50cyBkbyB3ZQorCSAqIGJhc2UgVFJFRVNBTUUgb24gdGhlbS4gTm90ZSB0aGF0IHRoaXMgbG9naWMgaXMgcmVwbGljYXRlZCBpbgorCSAqIHVwZGF0ZV90cmVlc2FtZSwgd2hpY2ggc2hvdWxkIGJlIGtlcHQgaW4gc3luYy4KKwkgKi8KKwlpZiAocmVsZXZhbnRfcGFyZW50cyA/ICFyZWxldmFudF9jaGFuZ2UgOiAhaXJyZWxldmFudF9jaGFuZ2UpCisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRSRUVTQU1FOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfcGFyZW50cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgIHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QsIHN0cnVjdCBwcmlvX3F1ZXVlICpxdWV1ZSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsKKwl1bnNpZ25lZCBsZWZ0X2ZsYWc7CisKKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBBRERFRCkKKwkJcmV0dXJuIDA7CisJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gQURERUQ7CisKKwlpZiAocmV2cy0+aW5jbHVkZV9jaGVjayAmJgorCSAgICAhcmV2cy0+aW5jbHVkZV9jaGVjayhjb21taXQsIHJldnMtPmluY2x1ZGVfY2hlY2tfZGF0YSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB0aGUgY29tbWl0IGlzIHVuaW50ZXJlc3RpbmcsIGRvbid0IHRyeSB0bworCSAqIHBydW5lIHBhcmVudHMgLSB3ZSB3YW50IHRoZSBtYXhpbWFsIHVuaW50ZXJlc3RpbmcKKwkgKiBzZXQuCisJICoKKwkgKiBOb3JtYWxseSB3ZSBoYXZlbid0IHBhcnNlZCB0aGUgcGFyZW50CisJICogeWV0LCBzbyB3ZSB3b24ndCBoYXZlIGEgcGFyZW50IG9mIGEgcGFyZW50CisJICogaGVyZS4gSG93ZXZlciwgaXQgbWF5IHR1cm4gb3V0IHRoYXQgd2UndmUKKwkgKiByZWFjaGVkIHRoaXMgY29tbWl0IHNvbWUgb3RoZXIgd2F5ICh3aGVyZSBpdAorCSAqIHdhc24ndCB1bmludGVyZXN0aW5nKSwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkCisJICogdG8gbWFyayBpdHMgcGFyZW50cyByZWN1cnNpdmVseSB0b28uLgorCSAqLworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKKwkJd2hpbGUgKHBhcmVudCkgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudC0+aXRlbTsKKwkJCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKKwkJCWlmIChwKQorCQkJCXAtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQkJaWYgKHBhcnNlX2NvbW1pdF9nZW50bHkocCwgMSkgPCAwKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHAtPnBhcmVudHMpCisJCQkJbWFya19wYXJlbnRzX3VuaW50ZXJlc3RpbmcocCk7CisJCQlpZiAocC0+b2JqZWN0LmZsYWdzICYgU0VFTikKKwkJCQljb250aW51ZTsKKwkJCXAtPm9iamVjdC5mbGFncyB8PSBTRUVOOworCQkJaWYgKGxpc3QpCisJCQkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUocCwgbGlzdCk7CisJCQlpZiAocXVldWUpCisJCQkJcHJpb19xdWV1ZV9wdXQocXVldWUsIHApOworCQl9CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogT2ssIHRoZSBjb21taXQgd2Fzbid0IHVuaW50ZXJlc3RpbmcuIFRyeSB0bworCSAqIHNpbXBsaWZ5IHRoZSBjb21taXQgaGlzdG9yeSBhbmQgZmluZCB0aGUgcGFyZW50CisJICogdGhhdCBoYXMgbm8gZGlmZmVyZW5jZXMgaW4gdGhlIHBhdGggc2V0IGlmIG9uZSBleGlzdHMuCisJICovCisJdHJ5X3RvX3NpbXBsaWZ5X2NvbW1pdChyZXZzLCBjb21taXQpOworCisJaWYgKHJldnMtPm5vX3dhbGspCisJCXJldHVybiAwOworCisJbGVmdF9mbGFnID0gKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpOworCisJZm9yIChwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnQtPml0ZW07CisJCWludCBnZW50bHkgPSByZXZzLT5pZ25vcmVfbWlzc2luZ19saW5rcyB8fAorCQkJICAgICByZXZzLT5leGNsdWRlX3Byb21pc29yX29iamVjdHM7CisJCWlmIChwYXJzZV9jb21taXRfZ2VudGx5KHAsIGdlbnRseSkgPCAwKSB7CisJCQlpZiAocmV2cy0+ZXhjbHVkZV9wcm9taXNvcl9vYmplY3RzICYmCisJCQkgICAgaXNfcHJvbWlzb3Jfb2JqZWN0KCZwLT5vYmplY3Qub2lkKSkgeworCQkJCWlmIChyZXZzLT5maXJzdF9wYXJlbnRfb25seSkKKwkJCQkJYnJlYWs7CisJCQkJY29udGludWU7CisJCQl9CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKHJldnMtPnNvdXJjZXMpIHsKKwkJCWNoYXIgKipzbG90ID0gcmV2aXNpb25fc291cmNlc19hdChyZXZzLT5zb3VyY2VzLCBwKTsKKworCQkJaWYgKCEqc2xvdCkKKwkJCQkqc2xvdCA9ICpyZXZpc2lvbl9zb3VyY2VzX2F0KHJldnMtPnNvdXJjZXMsIGNvbW1pdCk7CisJCX0KKwkJcC0+b2JqZWN0LmZsYWdzIHw9IGxlZnRfZmxhZzsKKwkJaWYgKCEocC0+b2JqZWN0LmZsYWdzICYgU0VFTikpIHsKKwkJCXAtPm9iamVjdC5mbGFncyB8PSBTRUVOOworCQkJaWYgKGxpc3QpCisJCQkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUocCwgbGlzdCk7CisJCQlpZiAocXVldWUpCisJCQkJcHJpb19xdWV1ZV9wdXQocXVldWUsIHApOworCQl9CisJCWlmIChyZXZzLT5maXJzdF9wYXJlbnRfb25seSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2hlcnJ5X3BpY2tfbGlzdChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJaW50IGxlZnRfY291bnQgPSAwLCByaWdodF9jb3VudCA9IDA7CisJaW50IGxlZnRfZmlyc3Q7CisJc3RydWN0IHBhdGNoX2lkcyBpZHM7CisJdW5zaWduZWQgY2hlcnJ5X2ZsYWc7CisKKwkvKiBGaXJzdCBjb3VudCB0aGUgY29tbWl0cyBvbiB0aGUgbGVmdCBhbmQgb24gdGhlIHJpZ2h0ICovCisJZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcC0+aXRlbTsKKwkJdW5zaWduZWQgZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFnczsKKwkJaWYgKGZsYWdzICYgQk9VTkRBUlkpCisJCQk7CisJCWVsc2UgaWYgKGZsYWdzICYgU1lNTUVUUklDX0xFRlQpCisJCQlsZWZ0X2NvdW50Kys7CisJCWVsc2UKKwkJCXJpZ2h0X2NvdW50Kys7CisJfQorCisJaWYgKCFsZWZ0X2NvdW50IHx8ICFyaWdodF9jb3VudCkKKwkJcmV0dXJuOworCisJbGVmdF9maXJzdCA9IGxlZnRfY291bnQgPCByaWdodF9jb3VudDsKKwlpbml0X3BhdGNoX2lkcyhyZXZzLT5yZXBvLCAmaWRzKTsKKwlpZHMuZGlmZm9wdHMucGF0aHNwZWMgPSByZXZzLT5kaWZmb3B0LnBhdGhzcGVjOworCisJLyogQ29tcHV0ZSBwYXRjaC1pZHMgZm9yIG9uZSBzaWRlICovCisJZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcC0+aXRlbTsKKwkJdW5zaWduZWQgZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFnczsKKworCQlpZiAoZmxhZ3MgJiBCT1VOREFSWSkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGZld2VyIGxlZnQsIGxlZnRfZmlyc3QgaXMgc2V0IGFuZCB3ZSBvbWl0CisJCSAqIGNvbW1pdHMgb24gdGhlIHJpZ2h0IGJyYW5jaCBpbiB0aGlzIGxvb3AuICBJZiB3ZSBoYXZlCisJCSAqIGZld2VyIHJpZ2h0LCB3ZSBza2lwIHRoZSBsZWZ0IG9uZXMuCisJCSAqLworCQlpZiAobGVmdF9maXJzdCAhPSAhIShmbGFncyAmIFNZTU1FVFJJQ19MRUZUKSkKKwkJCWNvbnRpbnVlOworCQlhZGRfY29tbWl0X3BhdGNoX2lkKGNvbW1pdCwgJmlkcyk7CisJfQorCisJLyogZWl0aGVyIGNoZXJyeV9tYXJrIG9yIGNoZXJyeV9waWNrIGFyZSB0cnVlICovCisJY2hlcnJ5X2ZsYWcgPSByZXZzLT5jaGVycnlfbWFyayA/IFBBVENIU0FNRSA6IFNIT1dOOworCisJLyogQ2hlY2sgdGhlIG90aGVyIHNpZGUgKi8KKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwLT5pdGVtOworCQlzdHJ1Y3QgcGF0Y2hfaWQgKmlkOworCQl1bnNpZ25lZCBmbGFncyA9IGNvbW1pdC0+b2JqZWN0LmZsYWdzOworCisJCWlmIChmbGFncyAmIEJPVU5EQVJZKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIElmIHdlIGhhdmUgZmV3ZXIgbGVmdCwgbGVmdF9maXJzdCBpcyBzZXQgYW5kIHdlIG9taXQKKwkJICogY29tbWl0cyBvbiB0aGUgbGVmdCBicmFuY2ggaW4gdGhpcyBsb29wLgorCQkgKi8KKwkJaWYgKGxlZnRfZmlyc3QgPT0gISEoZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBIYXZlIHdlIHNlZW4gdGhlIHNhbWUgcGF0Y2ggaWQ/CisJCSAqLworCQlpZCA9IGhhc19jb21taXRfcGF0Y2hfaWQoY29tbWl0LCAmaWRzKTsKKwkJaWYgKCFpZCkKKwkJCWNvbnRpbnVlOworCisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IGNoZXJyeV9mbGFnOworCQlpZC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gY2hlcnJ5X2ZsYWc7CisJfQorCisJZnJlZV9wYXRjaF9pZHMoJmlkcyk7Cit9CisKKy8qIEhvdyBtYW55IGV4dHJhIHVuaW50ZXJlc3RpbmcgY29tbWl0cyB3ZSB3YW50IHRvIHNlZS4uICovCisjZGVmaW5lIFNMT1AgNQorCitzdGF0aWMgaW50IHN0aWxsX2ludGVyZXN0aW5nKHN0cnVjdCBjb21taXRfbGlzdCAqc3JjLCB0aW1lc3RhbXBfdCBkYXRlLCBpbnQgc2xvcCwKKwkJCSAgICAgc3RydWN0IGNvbW1pdCAqKmludGVyZXN0aW5nX2NhY2hlKQoreworCS8qCisJICogTm8gc291cmNlIGxpc3QgYXQgYWxsPyBXZSdyZSBkZWZpbml0ZWx5IGRvbmUuLgorCSAqLworCWlmICghc3JjKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRG9lcyB0aGUgZGVzdGluYXRpb24gbGlzdCBjb250YWluIGVudHJpZXMgd2l0aCBhIGRhdGUKKwkgKiBiZWZvcmUgdGhlIHNvdXJjZSBsaXN0PyBEZWZpbml0ZWx5IF9ub3RfIGRvbmUuCisJICovCisJaWYgKGRhdGUgPD0gc3JjLT5pdGVtLT5kYXRlKQorCQlyZXR1cm4gU0xPUDsKKworCS8qCisJICogRG9lcyB0aGUgc291cmNlIGxpc3Qgc3RpbGwgaGF2ZSBpbnRlcmVzdGluZyBjb21taXRzIGluCisJICogaXQ/IERlZmluaXRlbHkgbm90IGRvbmUuLgorCSAqLworCWlmICghZXZlcnlib2R5X3VuaW50ZXJlc3Rpbmcoc3JjLCBpbnRlcmVzdGluZ19jYWNoZSkpCisJCXJldHVybiBTTE9QOworCisJLyogT2ssIHdlJ3JlIGNsb3NpbmcgaW4uLiAqLworCXJldHVybiBzbG9wLTE7Cit9CisKKy8qCisgKiAicmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIEEuLkIiIGNvbXB1dGVzIGNvbW1pdHMgdGhhdCBhcmUgYW5jZXN0b3JzCisgKiBvZiBCIGJ1dCBub3QgYW5jZXN0b3JzIG9mIEEgYnV0IGZ1cnRoZXIgbGltaXRzIHRoZSByZXN1bHQgdG8gdGhvc2UKKyAqIHRoYXQgYXJlIGRlc2NlbmRhbnRzIG9mIEEuICBUaGlzIHRha2VzIHRoZSBsaXN0IG9mIGJvdHRvbSBjb21taXRzIGFuZAorICogdGhlIHJlc3VsdCBvZiAiQS4uQiIgd2l0aG91dCAtLWFuY2VzdHJ5LXBhdGgsIGFuZCBsaW1pdHMgdGhlIGxhdHRlcgorICogZnVydGhlciB0byB0aGUgb25lcyB0aGF0IGNhbiByZWFjaCBvbmUgb2YgdGhlIGNvbW1pdHMgaW4gImJvdHRvbSIuCisgKi8KK3N0YXRpYyB2b2lkIGxpbWl0X3RvX2FuY2VzdHJ5KHN0cnVjdCBjb21taXRfbGlzdCAqYm90dG9tLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCXN0cnVjdCBjb21taXRfbGlzdCAqcmxpc3QgPSBOVUxMOworCWludCBtYWRlX3Byb2dyZXNzOworCisJLyoKKwkgKiBSZXZlcnNlIHRoZSBsaXN0IHNvIHRoYXQgaXQgd2lsbCBiZSBsaWtlbHkgdGhhdCB3ZSB3b3VsZAorCSAqIHByb2Nlc3MgcGFyZW50cyBiZWZvcmUgY2hpbGRyZW4uCisJICovCisJZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpCisJCWNvbW1pdF9saXN0X2luc2VydChwLT5pdGVtLCAmcmxpc3QpOworCisJZm9yIChwID0gYm90dG9tOyBwOyBwID0gcC0+bmV4dCkKKwkJcC0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFRNUF9NQVJLOworCisJLyoKKwkgKiBNYXJrIHRoZSBvbmVzIHRoYXQgY2FuIHJlYWNoIGJvdHRvbSBjb21taXRzIGluICJsaXN0IiwKKwkgKiBpbiBhIGJvdHRvbS11cCBmYXNoaW9uLgorCSAqLworCWRvIHsKKwkJbWFkZV9wcm9ncmVzcyA9IDA7CisJCWZvciAocCA9IHJsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdCAqYyA9IHAtPml0ZW07CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJCQlpZiAoYy0+b2JqZWN0LmZsYWdzICYgKFRNUF9NQVJLIHwgVU5JTlRFUkVTVElORykpCisJCQkJY29udGludWU7CisJCQlmb3IgKHBhcmVudHMgPSBjLT5wYXJlbnRzOworCQkJICAgICBwYXJlbnRzOworCQkJICAgICBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkgeworCQkJCWlmICghKHBhcmVudHMtPml0ZW0tPm9iamVjdC5mbGFncyAmIFRNUF9NQVJLKSkKKwkJCQkJY29udGludWU7CisJCQkJYy0+b2JqZWN0LmZsYWdzIHw9IFRNUF9NQVJLOworCQkJCW1hZGVfcHJvZ3Jlc3MgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSB3aGlsZSAobWFkZV9wcm9ncmVzcyk7CisKKwkvKgorCSAqIE5FRURTV09SSzogZGVjaWRlIGlmIHdlIHdhbnQgdG8gcmVtb3ZlIHBhcmVudHMgdGhhdCBhcmUKKwkgKiBub3QgbWFya2VkIHdpdGggVE1QX01BUksgZnJvbSBjb21taXQtPnBhcmVudHMgZm9yIGNvbW1pdHMKKwkgKiBpbiB0aGUgcmVzdWx0aW5nIGxpc3QuICBXZSBtYXkgbm90IHdhbnQgdG8gZG8gdGhhdCwgdGhvdWdoLgorCSAqLworCisJLyoKKwkgKiBUaGUgb25lcyB0aGF0IGFyZSBub3QgbWFya2VkIHdpdGggVE1QX01BUksgYXJlIHVuaW50ZXJlc3RpbmcKKwkgKi8KKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gcC0+aXRlbTsKKwkJaWYgKGMtPm9iamVjdC5mbGFncyAmIFRNUF9NQVJLKQorCQkJY29udGludWU7CisJCWMtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCX0KKworCS8qIFdlIGFyZSBkb25lIHdpdGggdGhlIFRNUF9NQVJLICovCisJZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpCisJCXAtPml0ZW0tPm9iamVjdC5mbGFncyAmPSB+VE1QX01BUks7CisJZm9yIChwID0gYm90dG9tOyBwOyBwID0gcC0+bmV4dCkKKwkJcC0+aXRlbS0+b2JqZWN0LmZsYWdzICY9IH5UTVBfTUFSSzsKKwlmcmVlX2NvbW1pdF9saXN0KHJsaXN0KTsKK30KKworLyoKKyAqIEJlZm9yZSB3YWxraW5nIHRoZSBoaXN0b3J5LCBrZWVwIHRoZSBzZXQgb2YgIm5lZ2F0aXZlIiByZWZzIHRoZQorICogY2FsbGVyIGhhcyBhc2tlZCB0byBleGNsdWRlLgorICoKKyAqIFRoaXMgaXMgdXNlZCB0byBjb21wdXRlICJyZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggQS4uQiIsIGFzIHdlIG5lZWQKKyAqIHRvIGZpbHRlciB0aGUgcmVzdWx0IG9mICJBLi5CIiBmdXJ0aGVyIHRvIHRoZSBvbmVzIHRoYXQgY2FuIGFjdHVhbGx5CisgKiByZWFjaCBBLgorICovCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpjb2xsZWN0X2JvdHRvbV9jb21taXRzKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmVsZW0sICpib3R0b20gPSBOVUxMOworCWZvciAoZWxlbSA9IGxpc3Q7IGVsZW07IGVsZW0gPSBlbGVtLT5uZXh0KQorCQlpZiAoZWxlbS0+aXRlbS0+b2JqZWN0LmZsYWdzICYgQk9UVE9NKQorCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGVsZW0tPml0ZW0sICZib3R0b20pOworCXJldHVybiBib3R0b207Cit9CisKKy8qIEFzc3VtZXMgZWl0aGVyIGxlZnRfb25seSBvciByaWdodF9vbmx5IGlzIHNldCAqLworc3RhdGljIHZvaWQgbGltaXRfbGVmdF9yaWdodChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisKKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwLT5pdGVtOworCisJCWlmIChyZXZzLT5yaWdodF9vbmx5KSB7CisJCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkKKwkJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBTSE9XTjsKKwkJfSBlbHNlCS8qIHJldnMtPmxlZnRfb25seSBpcyBzZXQgKi8KKwkJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpKQorCQkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFNIT1dOOworCX0KK30KKworc3RhdGljIGludCBsaW1pdF9saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlpbnQgc2xvcCA9IFNMT1A7CisJdGltZXN0YW1wX3QgZGF0ZSA9IFRJTUVfTUFYOworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IHJldnMtPmNvbW1pdHM7CisJc3RydWN0IGNvbW1pdF9saXN0ICpuZXdsaXN0ID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwID0gJm5ld2xpc3Q7CisJc3RydWN0IGNvbW1pdF9saXN0ICpib3R0b20gPSBOVUxMOworCXN0cnVjdCBjb21taXQgKmludGVyZXN0aW5nX2NhY2hlID0gTlVMTDsKKworCWlmIChyZXZzLT5hbmNlc3RyeV9wYXRoKSB7CisJCWJvdHRvbSA9IGNvbGxlY3RfYm90dG9tX2NvbW1pdHMobGlzdCk7CisJCWlmICghYm90dG9tKQorCQkJZGllKCItLWFuY2VzdHJ5LXBhdGggZ2l2ZW4gYnV0IHRoZXJlIGFyZSBubyBib3R0b20gY29tbWl0cyIpOworCX0KKworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHBvcF9jb21taXQoJmxpc3QpOworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmY29tbWl0LT5vYmplY3Q7CisJCXNob3dfZWFybHlfb3V0cHV0X2ZuX3Qgc2hvdzsKKworCQlpZiAoY29tbWl0ID09IGludGVyZXN0aW5nX2NhY2hlKQorCQkJaW50ZXJlc3RpbmdfY2FjaGUgPSBOVUxMOworCisJCWlmIChyZXZzLT5tYXhfYWdlICE9IC0xICYmIChjb21taXQtPmRhdGUgPCByZXZzLT5tYXhfYWdlKSkKKwkJCW9iai0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJaWYgKHByb2Nlc3NfcGFyZW50cyhyZXZzLCBjb21taXQsICZsaXN0LCBOVUxMKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykgeworCQkJbWFya19wYXJlbnRzX3VuaW50ZXJlc3RpbmcoY29tbWl0KTsKKwkJCXNsb3AgPSBzdGlsbF9pbnRlcmVzdGluZyhsaXN0LCBkYXRlLCBzbG9wLCAmaW50ZXJlc3RpbmdfY2FjaGUpOworCQkJaWYgKHNsb3ApCisJCQkJY29udGludWU7CisJCQlicmVhazsKKwkJfQorCQlpZiAocmV2cy0+bWluX2FnZSAhPSAtMSAmJiAoY29tbWl0LT5kYXRlID4gcmV2cy0+bWluX2FnZSkpCisJCQljb250aW51ZTsKKwkJZGF0ZSA9IGNvbW1pdC0+ZGF0ZTsKKwkJcCA9ICZjb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCBwKS0+bmV4dDsKKworCQlzaG93ID0gc2hvd19lYXJseV9vdXRwdXQ7CisJCWlmICghc2hvdykKKwkJCWNvbnRpbnVlOworCisJCXNob3cocmV2cywgbmV3bGlzdCk7CisJCXNob3dfZWFybHlfb3V0cHV0ID0gTlVMTDsKKwl9CisJaWYgKHJldnMtPmNoZXJyeV9waWNrIHx8IHJldnMtPmNoZXJyeV9tYXJrKQorCQljaGVycnlfcGlja19saXN0KG5ld2xpc3QsIHJldnMpOworCisJaWYgKHJldnMtPmxlZnRfb25seSB8fCByZXZzLT5yaWdodF9vbmx5KQorCQlsaW1pdF9sZWZ0X3JpZ2h0KG5ld2xpc3QsIHJldnMpOworCisJaWYgKGJvdHRvbSkgeworCQlsaW1pdF90b19hbmNlc3RyeShib3R0b20sIG5ld2xpc3QpOworCQlmcmVlX2NvbW1pdF9saXN0KGJvdHRvbSk7CisJfQorCisJLyoKKwkgKiBDaGVjayBpZiBhbnkgY29tbWl0cyBoYXZlIGJlY29tZSBUUkVFU0FNRSBieSBzb21lIG9mIHRoZWlyIHBhcmVudHMKKwkgKiBiZWNvbWluZyBVTklOVEVSRVNUSU5HLgorCSAqLworCWlmIChsaW1pdGluZ19jYW5faW5jcmVhc2VfdHJlZXNhbWUocmV2cykpCisJCWZvciAobGlzdCA9IG5ld2xpc3Q7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpjID0gbGlzdC0+aXRlbTsKKwkJCWlmIChjLT5vYmplY3QuZmxhZ3MgJiAoVU5JTlRFUkVTVElORyB8IFRSRUVTQU1FKSkKKwkJCQljb250aW51ZTsKKwkJCXVwZGF0ZV90cmVlc2FtZShyZXZzLCBjKTsKKwkJfQorCisJcmV2cy0+Y29tbWl0cyA9IG5ld2xpc3Q7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBZGQgYW4gZW50cnkgdG8gcmVmcy0+Y21kbGluZSB3aXRoIHRoZSBzcGVjaWZpZWQgaW5mb3JtYXRpb24uCisgKiAqbmFtZSBpcyBjb3BpZWQuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9yZXZfY21kbGluZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgc3RydWN0IG9iamVjdCAqaXRlbSwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgIGludCB3aGVuY2UsCisJCQkgICAgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IHJldl9jbWRsaW5lX2luZm8gKmluZm8gPSAmcmV2cy0+Y21kbGluZTsKKwl1bnNpZ25lZCBpbnQgbnIgPSBpbmZvLT5ucjsKKworCUFMTE9DX0dST1coaW5mby0+cmV2LCBuciArIDEsIGluZm8tPmFsbG9jKTsKKwlpbmZvLT5yZXZbbnJdLml0ZW0gPSBpdGVtOworCWluZm8tPnJldltucl0ubmFtZSA9IHhzdHJkdXAobmFtZSk7CisJaW5mby0+cmV2W25yXS53aGVuY2UgPSB3aGVuY2U7CisJaW5mby0+cmV2W25yXS5mbGFncyA9IGZsYWdzOworCWluZm8tPm5yKys7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9yZXZfY21kbGluZV9saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgc3RydWN0IGNvbW1pdF9saXN0ICpjb21taXRfbGlzdCwKKwkJCQkgaW50IHdoZW5jZSwKKwkJCQkgdW5zaWduZWQgZmxhZ3MpCit7CisJd2hpbGUgKGNvbW1pdF9saXN0KSB7CisJCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9ICZjb21taXRfbGlzdC0+aXRlbS0+b2JqZWN0OworCQlhZGRfcmV2X2NtZGxpbmUocmV2cywgb2JqZWN0LCBvaWRfdG9faGV4KCZvYmplY3QtPm9pZCksCisJCQkJd2hlbmNlLCBmbGFncyk7CisJCWNvbW1pdF9saXN0ID0gY29tbWl0X2xpc3QtPm5leHQ7CisJfQorfQorCitzdHJ1Y3QgYWxsX3JlZnNfY2IgeworCWludCBhbGxfZmxhZ3M7CisJaW50IHdhcm5lZF9iYWRfcmVmbG9nOworCXN0cnVjdCByZXZfaW5mbyAqYWxsX3JldnM7CisJY29uc3QgY2hhciAqbmFtZV9mb3JfZXJyb3Jtc2c7CisJc3RydWN0IHdvcmt0cmVlICp3dDsKK307CisKK2ludCByZWZfZXhjbHVkZWQoc3RydWN0IHN0cmluZ19saXN0ICpyZWZfZXhjbHVkZXMsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwlpZiAoIXJlZl9leGNsdWRlcykKKwkJcmV0dXJuIDA7CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCByZWZfZXhjbHVkZXMpIHsKKwkJaWYgKCF3aWxkbWF0Y2goaXRlbS0+c3RyaW5nLCBwYXRoLCAwKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVfb25lX3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBhbGxfcmVmc19jYiAqY2IgPSBjYl9kYXRhOworCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKworCWlmIChyZWZfZXhjbHVkZWQoY2ItPmFsbF9yZXZzLT5yZWZfZXhjbHVkZXMsIHBhdGgpKQorCSAgICByZXR1cm4gMDsKKworCW9iamVjdCA9IGdldF9yZWZlcmVuY2UoY2ItPmFsbF9yZXZzLCBwYXRoLCBvaWQsIGNiLT5hbGxfZmxhZ3MpOworCWFkZF9yZXZfY21kbGluZShjYi0+YWxsX3JldnMsIG9iamVjdCwgcGF0aCwgUkVWX0NNRF9SRUYsIGNiLT5hbGxfZmxhZ3MpOworCWFkZF9wZW5kaW5nX29pZChjYi0+YWxsX3JldnMsIHBhdGgsIG9pZCwgY2ItPmFsbF9mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfYWxsX3JlZnNfY2Ioc3RydWN0IGFsbF9yZWZzX2NiICpjYiwgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCXVuc2lnbmVkIGZsYWdzKQoreworCWNiLT5hbGxfcmV2cyA9IHJldnM7CisJY2ItPmFsbF9mbGFncyA9IGZsYWdzOworCXJldnMtPnJldl9pbnB1dF9naXZlbiA9IDE7CisJY2ItPnd0ID0gTlVMTDsKK30KKwordm9pZCBjbGVhcl9yZWZfZXhjbHVzaW9uKHN0cnVjdCBzdHJpbmdfbGlzdCAqKnJlZl9leGNsdWRlc19wKQoreworCWlmICgqcmVmX2V4Y2x1ZGVzX3ApIHsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoKnJlZl9leGNsdWRlc19wLCAwKTsKKwkJZnJlZSgqcmVmX2V4Y2x1ZGVzX3ApOworCX0KKwkqcmVmX2V4Y2x1ZGVzX3AgPSBOVUxMOworfQorCit2b2lkIGFkZF9yZWZfZXhjbHVzaW9uKHN0cnVjdCBzdHJpbmdfbGlzdCAqKnJlZl9leGNsdWRlc19wLCBjb25zdCBjaGFyICpleGNsdWRlKQoreworCWlmICghKnJlZl9leGNsdWRlc19wKSB7CisJCSpyZWZfZXhjbHVkZXNfcCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCoqcmVmX2V4Y2x1ZGVzX3ApKTsKKwkJKCpyZWZfZXhjbHVkZXNfcCktPnN0cmR1cF9zdHJpbmdzID0gMTsKKwl9CisJc3RyaW5nX2xpc3RfYXBwZW5kKCpyZWZfZXhjbHVkZXNfcCwgZXhjbHVkZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWZzKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCQlzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHVuc2lnbmVkIGZsYWdzLAorCQkJaW50ICgqZm9yX2VhY2gpKHN0cnVjdCByZWZfc3RvcmUgKiwgZWFjaF9yZWZfZm4sIHZvaWQgKikpCit7CisJc3RydWN0IGFsbF9yZWZzX2NiIGNiOworCisJaWYgKCFyZWZzKSB7CisJCS8qIHRoaXMgY291bGQgaGFwcGVuIHdpdGggdW5pbml0aWFsaXplZCBzdWJtb2R1bGVzICovCisJCXJldHVybjsKKwl9CisKKwlpbml0X2FsbF9yZWZzX2NiKCZjYiwgcmV2cywgZmxhZ3MpOworCWZvcl9lYWNoKHJlZnMsIGhhbmRsZV9vbmVfcmVmLCAmY2IpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfb25lX3JlZmxvZ19jb21taXQoc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBhbGxfcmVmc19jYiAqY2IgPSBjYl9kYXRhOworCWlmICghaXNfbnVsbF9vaWQob2lkKSkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KGNiLT5hbGxfcmV2cy0+cmVwbywgb2lkKTsKKwkJaWYgKG8pIHsKKwkJCW8tPmZsYWdzIHw9IGNiLT5hbGxfZmxhZ3M7CisJCQkvKiA/Pz8gQ01ETElORUZMQUdTID8/PyAqLworCQkJYWRkX3BlbmRpbmdfb2JqZWN0KGNiLT5hbGxfcmV2cywgbywgIiIpOworCQl9CisJCWVsc2UgaWYgKCFjYi0+d2FybmVkX2JhZF9yZWZsb2cpIHsKKwkJCXdhcm5pbmcoInJlZmxvZyBvZiAnJXMnIHJlZmVyZW5jZXMgcHJ1bmVkIGNvbW1pdHMiLAorCQkJCWNiLT5uYW1lX2Zvcl9lcnJvcm1zZyk7CisJCQljYi0+d2FybmVkX2JhZF9yZWZsb2cgPSAxOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGhhbmRsZV9vbmVfcmVmbG9nX2VudChzdHJ1Y3Qgb2JqZWN0X2lkICpvb2lkLCBzdHJ1Y3Qgb2JqZWN0X2lkICpub2lkLAorCQljb25zdCBjaGFyICplbWFpbCwgdGltZXN0YW1wX3QgdGltZXN0YW1wLCBpbnQgdHosCisJCWNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJaGFuZGxlX29uZV9yZWZsb2dfY29tbWl0KG9vaWQsIGNiX2RhdGEpOworCWhhbmRsZV9vbmVfcmVmbG9nX2NvbW1pdChub2lkLCBjYl9kYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVfb25lX3JlZmxvZyhjb25zdCBjaGFyICpyZWZuYW1lX2luX3d0LAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBhbGxfcmVmc19jYiAqY2IgPSBjYl9kYXRhOworCXN0cnVjdCBzdHJidWYgcmVmbmFtZSA9IFNUUkJVRl9JTklUOworCisJY2ItPndhcm5lZF9iYWRfcmVmbG9nID0gMDsKKwlzdHJidWZfd29ya3RyZWVfcmVmKGNiLT53dCwgJnJlZm5hbWUsIHJlZm5hbWVfaW5fd3QpOworCWNiLT5uYW1lX2Zvcl9lcnJvcm1zZyA9IHJlZm5hbWUuYnVmOworCXJlZnNfZm9yX2VhY2hfcmVmbG9nX2VudChnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLAorCQkJCSByZWZuYW1lLmJ1ZiwKKwkJCQkgaGFuZGxlX29uZV9yZWZsb2dfZW50LCBjYl9kYXRhKTsKKwlzdHJidWZfcmVsZWFzZSgmcmVmbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9vdGhlcl9yZWZsb2dzX3RvX3BlbmRpbmcoc3RydWN0IGFsbF9yZWZzX2NiICpjYikKK3sKKwlzdHJ1Y3Qgd29ya3RyZWUgKip3b3JrdHJlZXMsICoqcDsKKworCXdvcmt0cmVlcyA9IGdldF93b3JrdHJlZXMoMCk7CisJZm9yIChwID0gd29ya3RyZWVzOyAqcDsgcCsrKSB7CisJCXN0cnVjdCB3b3JrdHJlZSAqd3QgPSAqcDsKKworCQlpZiAod3QtPmlzX2N1cnJlbnQpCisJCQljb250aW51ZTsKKworCQljYi0+d3QgPSB3dDsKKwkJcmVmc19mb3JfZWFjaF9yZWZsb2coZ2V0X3dvcmt0cmVlX3JlZl9zdG9yZSh3dCksCisJCQkJICAgICBoYW5kbGVfb25lX3JlZmxvZywKKwkJCQkgICAgIGNiKTsKKwl9CisJZnJlZV93b3JrdHJlZXMod29ya3RyZWVzKTsKK30KKwordm9pZCBhZGRfcmVmbG9nc190b19wZW5kaW5nKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IGFsbF9yZWZzX2NiIGNiOworCisJY2IuYWxsX3JldnMgPSByZXZzOworCWNiLmFsbF9mbGFncyA9IGZsYWdzOworCWNiLnd0ID0gTlVMTDsKKwlmb3JfZWFjaF9yZWZsb2coaGFuZGxlX29uZV9yZWZsb2csICZjYik7CisKKwlpZiAoIXJldnMtPnNpbmdsZV93b3JrdHJlZSkKKwkJYWRkX290aGVyX3JlZmxvZ3NfdG9fcGVuZGluZygmY2IpOworfQorCitzdGF0aWMgdm9pZCBhZGRfY2FjaGVfdHJlZShzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgIHN0cnVjdCBzdHJidWYgKnBhdGgsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzaXplX3QgYmFzZWxlbiA9IHBhdGgtPmxlbjsKKwlpbnQgaTsKKworCWlmIChpdC0+ZW50cnlfY291bnQgPj0gMCkgeworCQlzdHJ1Y3QgdHJlZSAqdHJlZSA9IGxvb2t1cF90cmVlKHJldnMtPnJlcG8sICZpdC0+b2lkKTsKKwkJdHJlZS0+b2JqZWN0LmZsYWdzIHw9IGZsYWdzOworCQlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9wYXRoKHJldnMsICZ0cmVlLT5vYmplY3QsICIiLAorCQkJCQkgICAgIDA0MDAwMCwgcGF0aC0+YnVmKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgaXQtPnN1YnRyZWVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKnN1YiA9IGl0LT5kb3duW2ldOworCQlzdHJidWZfYWRkZihwYXRoLCAiJXMlcyIsIGJhc2VsZW4gPyAiLyIgOiAiIiwgc3ViLT5uYW1lKTsKKwkJYWRkX2NhY2hlX3RyZWUoc3ViLT5jYWNoZV90cmVlLCByZXZzLCBwYXRoLCBmbGFncyk7CisJCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgYmFzZWxlbik7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIGRvX2FkZF9pbmRleF9vYmplY3RzX3RvX3BlbmRpbmcoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgICAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQlzdHJ1Y3QgYmxvYiAqYmxvYjsKKworCQlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJY29udGludWU7CisKKwkJYmxvYiA9IGxvb2t1cF9ibG9iKHJldnMtPnJlcG8sICZjZS0+b2lkKTsKKwkJaWYgKCFibG9iKQorCQkJZGllKCJ1bmFibGUgdG8gYWRkIGluZGV4IGJsb2IgdG8gdHJhdmVyc2FsIik7CisJCWJsb2ItPm9iamVjdC5mbGFncyB8PSBmbGFnczsKKwkJYWRkX3BlbmRpbmdfb2JqZWN0X3dpdGhfcGF0aChyZXZzLCAmYmxvYi0+b2JqZWN0LCAiIiwKKwkJCQkJICAgICBjZS0+Y2VfbW9kZSwgY2UtPm5hbWUpOworCX0KKworCWlmIChpc3RhdGUtPmNhY2hlX3RyZWUpIHsKKwkJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJCWFkZF9jYWNoZV90cmVlKGlzdGF0ZS0+Y2FjaGVfdHJlZSwgcmV2cywgJnBhdGgsIGZsYWdzKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCX0KK30KKwordm9pZCBhZGRfaW5kZXhfb2JqZWN0c190b19wZW5kaW5nKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCB3b3JrdHJlZSAqKndvcmt0cmVlcywgKipwOworCisJcmVwb19yZWFkX2luZGV4KHJldnMtPnJlcG8pOworCWRvX2FkZF9pbmRleF9vYmplY3RzX3RvX3BlbmRpbmcocmV2cywgcmV2cy0+cmVwby0+aW5kZXgsIGZsYWdzKTsKKworCWlmIChyZXZzLT5zaW5nbGVfd29ya3RyZWUpCisJCXJldHVybjsKKworCXdvcmt0cmVlcyA9IGdldF93b3JrdHJlZXMoMCk7CisJZm9yIChwID0gd29ya3RyZWVzOyAqcDsgcCsrKSB7CisJCXN0cnVjdCB3b3JrdHJlZSAqd3QgPSAqcDsKKwkJc3RydWN0IGluZGV4X3N0YXRlIGlzdGF0ZSA9IHsgTlVMTCB9OworCisJCWlmICh3dC0+aXNfY3VycmVudCkKKwkJCWNvbnRpbnVlOyAvKiBjdXJyZW50IGluZGV4IGFscmVhZHkgdGFrZW4gY2FyZSBvZiAqLworCisJCWlmIChyZWFkX2luZGV4X2Zyb20oJmlzdGF0ZSwKKwkJCQkgICAgd29ya3RyZWVfZ2l0X3BhdGgod3QsICJpbmRleCIpLAorCQkJCSAgICBnZXRfd29ya3RyZWVfZ2l0X2Rpcih3dCkpID4gMCkKKwkJCWRvX2FkZF9pbmRleF9vYmplY3RzX3RvX3BlbmRpbmcocmV2cywgJmlzdGF0ZSwgZmxhZ3MpOworCQlkaXNjYXJkX2luZGV4KCZpc3RhdGUpOworCX0KKwlmcmVlX3dvcmt0cmVlcyh3b3JrdHJlZXMpOworfQorCitzdHJ1Y3QgYWRkX2FsdGVybmF0ZV9yZWZzX2RhdGEgeworCXN0cnVjdCByZXZfaW5mbyAqcmV2czsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OworCitzdGF0aWMgdm9pZCBhZGRfb25lX2FsdGVybmF0ZV9yZWYoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgdm9pZCAqdmRhdGEpCit7CisJY29uc3QgY2hhciAqbmFtZSA9ICIuYWx0ZXJuYXRlIjsKKwlzdHJ1Y3QgYWRkX2FsdGVybmF0ZV9yZWZzX2RhdGEgKmRhdGEgPSB2ZGF0YTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwlvYmogPSBnZXRfcmVmZXJlbmNlKGRhdGEtPnJldnMsIG5hbWUsIG9pZCwgZGF0YS0+ZmxhZ3MpOworCWFkZF9yZXZfY21kbGluZShkYXRhLT5yZXZzLCBvYmosIG5hbWUsIFJFVl9DTURfUkVWLCBkYXRhLT5mbGFncyk7CisJYWRkX3BlbmRpbmdfb2JqZWN0KGRhdGEtPnJldnMsIG9iaiwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9hbHRlcm5hdGVfcmVmc190b19wZW5kaW5nKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGFkZF9hbHRlcm5hdGVfcmVmc19kYXRhIGRhdGE7CisJZGF0YS5yZXZzID0gcmV2czsKKwlkYXRhLmZsYWdzID0gZmxhZ3M7CisJZm9yX2VhY2hfYWx0ZXJuYXRlX3JlZihhZGRfb25lX2FsdGVybmF0ZV9yZWYsICZkYXRhKTsKK30KKworc3RhdGljIGludCBhZGRfcGFyZW50c19vbmx5KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqYXJnXywgaW50IGZsYWdzLAorCQkJICAgIGludCBleGNsdWRlX3BhcmVudCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3Qgb2JqZWN0ICppdDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCWludCBwYXJlbnRfbnVtYmVyOworCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ187CisKKwlpZiAoKmFyZyA9PSAnXicpIHsKKwkJZmxhZ3MgXj0gVU5JTlRFUkVTVElORyB8IEJPVFRPTTsKKwkJYXJnKys7CisJfQorCWlmIChnZXRfb2lkX2NvbW1pdHRpc2goYXJnLCAmb2lkKSkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKDEpIHsKKwkJaXQgPSBnZXRfcmVmZXJlbmNlKHJldnMsIGFyZywgJm9pZCwgMCk7CisJCWlmICghaXQgJiYgcmV2cy0+aWdub3JlX21pc3NpbmcpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGl0LT50eXBlICE9IE9CSl9UQUcpCisJCQlicmVhazsKKwkJaWYgKCEoKHN0cnVjdCB0YWcqKWl0KS0+dGFnZ2VkKQorCQkJcmV0dXJuIDA7CisJCW9pZGNweSgmb2lkLCAmKChzdHJ1Y3QgdGFnKilpdCktPnRhZ2dlZC0+b2lkKTsKKwl9CisJaWYgKGl0LT50eXBlICE9IE9CSl9DT01NSVQpCisJCXJldHVybiAwOworCWNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopaXQ7CisJaWYgKGV4Y2x1ZGVfcGFyZW50ICYmCisJICAgIGV4Y2x1ZGVfcGFyZW50ID4gY29tbWl0X2xpc3RfY291bnQoY29tbWl0LT5wYXJlbnRzKSkKKwkJcmV0dXJuIDA7CisJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzLCBwYXJlbnRfbnVtYmVyID0gMTsKKwkgICAgIHBhcmVudHM7CisJICAgICBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCwgcGFyZW50X251bWJlcisrKSB7CisJCWlmIChleGNsdWRlX3BhcmVudCAmJiBwYXJlbnRfbnVtYmVyICE9IGV4Y2x1ZGVfcGFyZW50KQorCQkJY29udGludWU7CisKKwkJaXQgPSAmcGFyZW50cy0+aXRlbS0+b2JqZWN0OworCQlpdC0+ZmxhZ3MgfD0gZmxhZ3M7CisJCWFkZF9yZXZfY21kbGluZShyZXZzLCBpdCwgYXJnXywgUkVWX0NNRF9QQVJFTlRTX09OTFksIGZsYWdzKTsKKwkJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsIGl0LCBhcmcpOworCX0KKwlyZXR1cm4gMTsKK30KKwordm9pZCByZXBvX2luaXRfcmV2aXNpb25zKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJbWVtc2V0KHJldnMsIDAsIHNpemVvZigqcmV2cykpOworCisJcmV2cy0+cmVwbyA9IHI7CisJcmV2cy0+YWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CisJcmV2cy0+aWdub3JlX21lcmdlcyA9IDE7CisJcmV2cy0+c2ltcGxpZnlfaGlzdG9yeSA9IDE7CisJcmV2cy0+cHJ1bmluZy5yZXBvID0gcjsKKwlyZXZzLT5wcnVuaW5nLmZsYWdzLnJlY3Vyc2l2ZSA9IDE7CisJcmV2cy0+cHJ1bmluZy5mbGFncy5xdWljayA9IDE7CisJcmV2cy0+cHJ1bmluZy5hZGRfcmVtb3ZlID0gZmlsZV9hZGRfcmVtb3ZlOworCXJldnMtPnBydW5pbmcuY2hhbmdlID0gZmlsZV9jaGFuZ2U7CisJcmV2cy0+cHJ1bmluZy5jaGFuZ2VfZm5fZGF0YSA9IHJldnM7CisJcmV2cy0+c29ydF9vcmRlciA9IFJFVl9TT1JUX0lOX0dSQVBIX09SREVSOworCXJldnMtPmRlbnNlID0gMTsKKwlyZXZzLT5wcmVmaXggPSBwcmVmaXg7CisJcmV2cy0+bWF4X2FnZSA9IC0xOworCXJldnMtPm1pbl9hZ2UgPSAtMTsKKwlyZXZzLT5za2lwX2NvdW50ID0gLTE7CisJcmV2cy0+bWF4X2NvdW50ID0gLTE7CisJcmV2cy0+bWF4X3BhcmVudHMgPSAtMTsKKwlyZXZzLT5leHBhbmRfdGFic19pbl9sb2cgPSAtMTsKKworCXJldnMtPmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9ERUZBVUxUOworCXJldnMtPmV4cGFuZF90YWJzX2luX2xvZ19kZWZhdWx0ID0gODsKKworCWluaXRfZ3JlcF9kZWZhdWx0cyhyZXZzLT5yZXBvKTsKKwlncmVwX2luaXQoJnJldnMtPmdyZXBfZmlsdGVyLCByZXZzLT5yZXBvLCBwcmVmaXgpOworCXJldnMtPmdyZXBfZmlsdGVyLnN0YXR1c19vbmx5ID0gMTsKKworCXJlcG9fZGlmZl9zZXR1cChyZXZzLT5yZXBvLCAmcmV2cy0+ZGlmZm9wdCk7CisJaWYgKHByZWZpeCAmJiAhcmV2cy0+ZGlmZm9wdC5wcmVmaXgpIHsKKwkJcmV2cy0+ZGlmZm9wdC5wcmVmaXggPSBwcmVmaXg7CisJCXJldnMtPmRpZmZvcHQucHJlZml4X2xlbmd0aCA9IHN0cmxlbihwcmVmaXgpOworCX0KKworCWluaXRfZGlzcGxheV9ub3RlcygmcmV2cy0+bm90ZXNfb3B0KTsKK30KKworc3RhdGljIHZvaWQgYWRkX3BlbmRpbmdfY29tbWl0X2xpc3Qoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1pdF9saXN0LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJd2hpbGUgKGNvbW1pdF9saXN0KSB7CisJCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9ICZjb21taXRfbGlzdC0+aXRlbS0+b2JqZWN0OworCQlvYmplY3QtPmZsYWdzIHw9IGZsYWdzOworCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCBvaWRfdG9faGV4KCZvYmplY3QtPm9pZCkpOworCQljb21taXRfbGlzdCA9IGNvbW1pdF9saXN0LT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9zaG93X21lcmdlKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmJhc2VzOworCXN0cnVjdCBjb21taXQgKmhlYWQsICpvdGhlcjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljb25zdCBjaGFyICoqcHJ1bmUgPSBOVUxMOworCWludCBpLCBwcnVuZV9udW0gPSAxOyAvKiBjb3VudGluZyB0ZXJtaW5hdGluZyBOVUxMICovCisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUgPSByZXZzLT5yZXBvLT5pbmRleDsKKworCWlmIChnZXRfb2lkKCJIRUFEIiwgJm9pZCkpCisJCWRpZSgiLS1tZXJnZSB3aXRob3V0IEhFQUQ/Iik7CisJaGVhZCA9IGxvb2t1cF9jb21taXRfb3JfZGllKCZvaWQsICJIRUFEIik7CisJaWYgKGdldF9vaWQoIk1FUkdFX0hFQUQiLCAmb2lkKSkKKwkJZGllKCItLW1lcmdlIHdpdGhvdXQgTUVSR0VfSEVBRD8iKTsKKwlvdGhlciA9IGxvb2t1cF9jb21taXRfb3JfZGllKCZvaWQsICJNRVJHRV9IRUFEIik7CisJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsICZoZWFkLT5vYmplY3QsICJIRUFEIik7CisJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsICZvdGhlci0+b2JqZWN0LCAiTUVSR0VfSEVBRCIpOworCWJhc2VzID0gZ2V0X21lcmdlX2Jhc2VzKGhlYWQsIG90aGVyKTsKKwlhZGRfcmV2X2NtZGxpbmVfbGlzdChyZXZzLCBiYXNlcywgUkVWX0NNRF9NRVJHRV9CQVNFLCBVTklOVEVSRVNUSU5HIHwgQk9UVE9NKTsKKwlhZGRfcGVuZGluZ19jb21taXRfbGlzdChyZXZzLCBiYXNlcywgVU5JTlRFUkVTVElORyB8IEJPVFRPTSk7CisJZnJlZV9jb21taXRfbGlzdChiYXNlcyk7CisJaGVhZC0+b2JqZWN0LmZsYWdzIHw9IFNZTU1FVFJJQ19MRUZUOworCisJaWYgKCFpc3RhdGUtPmNhY2hlX25yKQorCQlyZXBvX3JlYWRfaW5kZXgocmV2cy0+cmVwbyk7CisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJaWYgKCFjZV9zdGFnZShjZSkpCisJCQljb250aW51ZTsKKwkJaWYgKGNlX3BhdGhfbWF0Y2goaXN0YXRlLCBjZSwgJnJldnMtPnBydW5lX2RhdGEsIE5VTEwpKSB7CisJCQlwcnVuZV9udW0rKzsKKwkJCVJFQUxMT0NfQVJSQVkocHJ1bmUsIHBydW5lX251bSk7CisJCQlwcnVuZVtwcnVuZV9udW0tMl0gPSBjZS0+bmFtZTsKKwkJCXBydW5lW3BydW5lX251bS0xXSA9IE5VTEw7CisJCX0KKwkJd2hpbGUgKChpKzEgPCBpc3RhdGUtPmNhY2hlX25yKSAmJgorCQkgICAgICAgY2Vfc2FtZV9uYW1lKGNlLCBpc3RhdGUtPmNhY2hlW2krMV0pKQorCQkJaSsrOworCX0KKwljbGVhcl9wYXRoc3BlYygmcmV2cy0+cHJ1bmVfZGF0YSk7CisJcGFyc2VfcGF0aHNwZWMoJnJldnMtPnBydW5lX2RhdGEsIFBBVEhTUEVDX0FMTF9NQUdJQyAmIH5QQVRIU1BFQ19MSVRFUkFMLAorCQkgICAgICAgUEFUSFNQRUNfUFJFRkVSX0ZVTEwgfCBQQVRIU1BFQ19MSVRFUkFMX1BBVEgsICIiLCBwcnVuZSk7CisJcmV2cy0+bGltaXRlZCA9IDE7Cit9CisKK3N0YXRpYyBpbnQgZG90ZG90X21pc3NpbmcoY29uc3QgY2hhciAqYXJnLCBjaGFyICpkb3Rkb3QsCisJCQkgIHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IHN5bW1ldHJpYykKK3sKKwlpZiAocmV2cy0+aWdub3JlX21pc3NpbmcpCisJCXJldHVybiAwOworCS8qIGRlLW11bmdlIHNvIHdlIHJlcG9ydCB0aGUgZnVsbCBhcmd1bWVudCAqLworCSpkb3Rkb3QgPSAnLic7CisJZGllKHN5bW1ldHJpYworCSAgICA/ICJJbnZhbGlkIHN5bW1ldHJpYyBkaWZmZXJlbmNlIGV4cHJlc3Npb24gJXMiCisJICAgIDogIkludmFsaWQgcmV2aXNpb24gcmFuZ2UgJXMiLCBhcmcpOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9kb3Rkb3RfMShjb25zdCBjaGFyICphcmcsIGNoYXIgKmRvdGRvdCwKKwkJCSAgIHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IGZsYWdzLAorCQkJICAgaW50IGNhbnRfYmVfZmlsZW5hbWUsCisJCQkgICBzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgKmFfb2MsCisJCQkgICBzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgKmJfb2MpCit7CisJY29uc3QgY2hhciAqYV9uYW1lLCAqYl9uYW1lOworCXN0cnVjdCBvYmplY3RfaWQgYV9vaWQsIGJfb2lkOworCXN0cnVjdCBvYmplY3QgKmFfb2JqLCAqYl9vYmo7CisJdW5zaWduZWQgaW50IGFfZmxhZ3MsIGJfZmxhZ3M7CisJaW50IHN5bW1ldHJpYyA9IDA7CisJdW5zaWduZWQgaW50IGZsYWdzX2V4Y2x1ZGUgPSBmbGFncyBeIChVTklOVEVSRVNUSU5HIHwgQk9UVE9NKTsKKwl1bnNpZ25lZCBpbnQgb2NfZmxhZ3MgPSBHRVRfT0lEX0NPTU1JVFRJU0ggfCBHRVRfT0lEX1JFQ09SRF9QQVRIOworCisJYV9uYW1lID0gYXJnOworCWlmICghKmFfbmFtZSkKKwkJYV9uYW1lID0gIkhFQUQiOworCisJYl9uYW1lID0gZG90ZG90ICsgMjsKKwlpZiAoKmJfbmFtZSA9PSAnLicpIHsKKwkJc3ltbWV0cmljID0gMTsKKwkJYl9uYW1lKys7CisJfQorCWlmICghKmJfbmFtZSkKKwkJYl9uYW1lID0gIkhFQUQiOworCisJaWYgKGdldF9vaWRfd2l0aF9jb250ZXh0KHJldnMtPnJlcG8sIGFfbmFtZSwgb2NfZmxhZ3MsICZhX29pZCwgYV9vYykgfHwKKwkgICAgZ2V0X29pZF93aXRoX2NvbnRleHQocmV2cy0+cmVwbywgYl9uYW1lLCBvY19mbGFncywgJmJfb2lkLCBiX29jKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFjYW50X2JlX2ZpbGVuYW1lKSB7CisJCSpkb3Rkb3QgPSAnLic7CisJCXZlcmlmeV9ub25fZmlsZW5hbWUocmV2cy0+cHJlZml4LCBhcmcpOworCQkqZG90ZG90ID0gJ1wwJzsKKwl9CisKKwlhX29iaiA9IHBhcnNlX29iamVjdChyZXZzLT5yZXBvLCAmYV9vaWQpOworCWJfb2JqID0gcGFyc2Vfb2JqZWN0KHJldnMtPnJlcG8sICZiX29pZCk7CisJaWYgKCFhX29iaiB8fCAhYl9vYmopCisJCXJldHVybiBkb3Rkb3RfbWlzc2luZyhhcmcsIGRvdGRvdCwgcmV2cywgc3ltbWV0cmljKTsKKworCWlmICghc3ltbWV0cmljKSB7CisJCS8qIGp1c3QgQS4uQiAqLworCQliX2ZsYWdzID0gZmxhZ3M7CisJCWFfZmxhZ3MgPSBmbGFnc19leGNsdWRlOworCX0gZWxzZSB7CisJCS8qIEEuLi5CIC0tIGZpbmQgbWVyZ2UgYmFzZXMgYmV0d2VlbiB0aGUgdHdvICovCisJCXN0cnVjdCBjb21taXQgKmEsICpiOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmV4Y2x1ZGU7CisKKwkJYSA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHJldnMtPnJlcG8sICZhX29iai0+b2lkKTsKKwkJYiA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHJldnMtPnJlcG8sICZiX29iai0+b2lkKTsKKwkJaWYgKCFhIHx8ICFiKQorCQkJcmV0dXJuIGRvdGRvdF9taXNzaW5nKGFyZywgZG90ZG90LCByZXZzLCBzeW1tZXRyaWMpOworCisJCWV4Y2x1ZGUgPSBnZXRfbWVyZ2VfYmFzZXMoYSwgYik7CisJCWFkZF9yZXZfY21kbGluZV9saXN0KHJldnMsIGV4Y2x1ZGUsIFJFVl9DTURfTUVSR0VfQkFTRSwKKwkJCQkgICAgIGZsYWdzX2V4Y2x1ZGUpOworCQlhZGRfcGVuZGluZ19jb21taXRfbGlzdChyZXZzLCBleGNsdWRlLCBmbGFnc19leGNsdWRlKTsKKwkJZnJlZV9jb21taXRfbGlzdChleGNsdWRlKTsKKworCQliX2ZsYWdzID0gZmxhZ3M7CisJCWFfZmxhZ3MgPSBmbGFncyB8IFNZTU1FVFJJQ19MRUZUOworCX0KKworCWFfb2JqLT5mbGFncyB8PSBhX2ZsYWdzOworCWJfb2JqLT5mbGFncyB8PSBiX2ZsYWdzOworCWFkZF9yZXZfY21kbGluZShyZXZzLCBhX29iaiwgYV9uYW1lLCBSRVZfQ01EX0xFRlQsIGFfZmxhZ3MpOworCWFkZF9yZXZfY21kbGluZShyZXZzLCBiX29iaiwgYl9uYW1lLCBSRVZfQ01EX1JJR0hULCBiX2ZsYWdzKTsKKwlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9wYXRoKHJldnMsIGFfb2JqLCBhX25hbWUsIGFfb2MtPm1vZGUsIGFfb2MtPnBhdGgpOworCWFkZF9wZW5kaW5nX29iamVjdF93aXRoX3BhdGgocmV2cywgYl9vYmosIGJfbmFtZSwgYl9vYy0+bW9kZSwgYl9vYy0+cGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2RvdGRvdChjb25zdCBjaGFyICphcmcsCisJCQkgc3RydWN0IHJldl9pbmZvICpyZXZzLCBpbnQgZmxhZ3MsCisJCQkgaW50IGNhbnRfYmVfZmlsZW5hbWUpCit7CisJc3RydWN0IG9iamVjdF9jb250ZXh0IGFfb2MsIGJfb2M7CisJY2hhciAqZG90ZG90ID0gc3Ryc3RyKGFyZywgIi4uIik7CisJaW50IHJldDsKKworCWlmICghZG90ZG90KQorCQlyZXR1cm4gLTE7CisKKwltZW1zZXQoJmFfb2MsIDAsIHNpemVvZihhX29jKSk7CisJbWVtc2V0KCZiX29jLCAwLCBzaXplb2YoYl9vYykpOworCisJKmRvdGRvdCA9ICdcMCc7CisJcmV0ID0gaGFuZGxlX2RvdGRvdF8xKGFyZywgZG90ZG90LCByZXZzLCBmbGFncywgY2FudF9iZV9maWxlbmFtZSwKKwkJCSAgICAgICZhX29jLCAmYl9vYyk7CisJKmRvdGRvdCA9ICcuJzsKKworCWZyZWUoYV9vYy5wYXRoKTsKKwlmcmVlKGJfb2MucGF0aCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaGFuZGxlX3JldmlzaW9uX2FyZyhjb25zdCBjaGFyICphcmdfLCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBmbGFncywgdW5zaWduZWQgcmV2YXJnX29wdCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgb2M7CisJY2hhciAqbWFyazsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IGxvY2FsX2ZsYWdzOworCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ187CisJaW50IGNhbnRfYmVfZmlsZW5hbWUgPSByZXZhcmdfb3B0ICYgUkVWQVJHX0NBTk5PVF9CRV9GSUxFTkFNRTsKKwl1bnNpZ25lZCBnZXRfc2hhMV9mbGFncyA9IEdFVF9PSURfUkVDT1JEX1BBVEg7CisKKwlmbGFncyA9IGZsYWdzICYgVU5JTlRFUkVTVElORyA/IGZsYWdzIHwgQk9UVE9NIDogZmxhZ3MgJiB+Qk9UVE9NOworCisJaWYgKCFjYW50X2JlX2ZpbGVuYW1lICYmICFzdHJjbXAoYXJnLCAiLi4iKSkgeworCQkvKgorCQkgKiBKdXN0ICIuLiI/ICBUaGF0IGlzIG5vdCBhIHJhbmdlIGJ1dCB0aGUKKwkJICogcGF0aHNwZWMgZm9yIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorCQkgKi8KKwkJcmV0dXJuIC0xOworCX0KKworCWlmICghaGFuZGxlX2RvdGRvdChhcmcsIHJldnMsIGZsYWdzLCByZXZhcmdfb3B0KSkKKwkJcmV0dXJuIDA7CisKKwltYXJrID0gc3Ryc3RyKGFyZywgIl5AIik7CisJaWYgKG1hcmsgJiYgIW1hcmtbMl0pIHsKKwkJKm1hcmsgPSAwOworCQlpZiAoYWRkX3BhcmVudHNfb25seShyZXZzLCBhcmcsIGZsYWdzLCAwKSkKKwkJCXJldHVybiAwOworCQkqbWFyayA9ICdeJzsKKwl9CisJbWFyayA9IHN0cnN0cihhcmcsICJeISIpOworCWlmIChtYXJrICYmICFtYXJrWzJdKSB7CisJCSptYXJrID0gMDsKKwkJaWYgKCFhZGRfcGFyZW50c19vbmx5KHJldnMsIGFyZywgZmxhZ3MgXiAoVU5JTlRFUkVTVElORyB8IEJPVFRPTSksIDApKQorCQkJKm1hcmsgPSAnXic7CisJfQorCW1hcmsgPSBzdHJzdHIoYXJnLCAiXi0iKTsKKwlpZiAobWFyaykgeworCQlpbnQgZXhjbHVkZV9wYXJlbnQgPSAxOworCisJCWlmIChtYXJrWzJdKSB7CisJCQljaGFyICplbmQ7CisJCQlleGNsdWRlX3BhcmVudCA9IHN0cnRvdWwobWFyayArIDIsICZlbmQsIDEwKTsKKwkJCWlmICgqZW5kICE9ICdcMCcgfHwgIWV4Y2x1ZGVfcGFyZW50KQorCQkJCXJldHVybiAtMTsKKwkJfQorCisJCSptYXJrID0gMDsKKwkJaWYgKCFhZGRfcGFyZW50c19vbmx5KHJldnMsIGFyZywgZmxhZ3MgXiAoVU5JTlRFUkVTVElORyB8IEJPVFRPTSksIGV4Y2x1ZGVfcGFyZW50KSkKKwkJCSptYXJrID0gJ14nOworCX0KKworCWxvY2FsX2ZsYWdzID0gMDsKKwlpZiAoKmFyZyA9PSAnXicpIHsKKwkJbG9jYWxfZmxhZ3MgPSBVTklOVEVSRVNUSU5HIHwgQk9UVE9NOworCQlhcmcrKzsKKwl9CisKKwlpZiAocmV2YXJnX29wdCAmIFJFVkFSR19DT01NSVRUSVNIKQorCQlnZXRfc2hhMV9mbGFncyB8PSBHRVRfT0lEX0NPTU1JVFRJU0g7CisKKwlpZiAoZ2V0X29pZF93aXRoX2NvbnRleHQocmV2cy0+cmVwbywgYXJnLCBnZXRfc2hhMV9mbGFncywgJm9pZCwgJm9jKSkKKwkJcmV0dXJuIHJldnMtPmlnbm9yZV9taXNzaW5nID8gMCA6IC0xOworCWlmICghY2FudF9iZV9maWxlbmFtZSkKKwkJdmVyaWZ5X25vbl9maWxlbmFtZShyZXZzLT5wcmVmaXgsIGFyZyk7CisJb2JqZWN0ID0gZ2V0X3JlZmVyZW5jZShyZXZzLCBhcmcsICZvaWQsIGZsYWdzIF4gbG9jYWxfZmxhZ3MpOworCWlmICghb2JqZWN0KQorCQlyZXR1cm4gcmV2cy0+aWdub3JlX21pc3NpbmcgPyAwIDogLTE7CisJYWRkX3Jldl9jbWRsaW5lKHJldnMsIG9iamVjdCwgYXJnXywgUkVWX0NNRF9SRVYsIGZsYWdzIF4gbG9jYWxfZmxhZ3MpOworCWFkZF9wZW5kaW5nX29iamVjdF93aXRoX3BhdGgocmV2cywgb2JqZWN0LCBhcmcsIG9jLm1vZGUsIG9jLnBhdGgpOworCWZyZWUob2MucGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfcGF0aHNwZWNfZnJvbV9zdGRpbihzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCQkgICAgIHN0cnVjdCBhcmd2X2FycmF5ICpwcnVuZSkKK3sKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoc2IsIHN0ZGluKSAhPSBFT0YpCisJCWFyZ3ZfYXJyYXlfcHVzaChwcnVuZSwgc2ItPmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfcmV2aXNpb25zX2Zyb21fc3RkaW4oc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCSAgICAgIHN0cnVjdCBhcmd2X2FycmF5ICpwcnVuZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiOworCWludCBzZWVuX2Rhc2hkYXNoID0gMDsKKwlpbnQgc2F2ZV93YXJuaW5nOworCisJc2F2ZV93YXJuaW5nID0gd2Fybl9vbl9vYmplY3RfcmVmbmFtZV9hbWJpZ3VpdHk7CisJd2Fybl9vbl9vYmplY3RfcmVmbmFtZV9hbWJpZ3VpdHkgPSAwOworCisJc3RyYnVmX2luaXQoJnNiLCAxMDAwKTsKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJnNiLCBzdGRpbikgIT0gRU9GKSB7CisJCWludCBsZW4gPSBzYi5sZW47CisJCWlmICghbGVuKQorCQkJYnJlYWs7CisJCWlmIChzYi5idWZbMF0gPT0gJy0nKSB7CisJCQlpZiAobGVuID09IDIgJiYgc2IuYnVmWzFdID09ICctJykgeworCQkJCXNlZW5fZGFzaGRhc2ggPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJZGllKCJvcHRpb25zIG5vdCBzdXBwb3J0ZWQgaW4gLS1zdGRpbiBtb2RlIik7CisJCX0KKwkJaWYgKGhhbmRsZV9yZXZpc2lvbl9hcmcoc2IuYnVmLCByZXZzLCAwLAorCQkJCQlSRVZBUkdfQ0FOTk9UX0JFX0ZJTEVOQU1FKSkKKwkJCWRpZSgiYmFkIHJldmlzaW9uICclcyciLCBzYi5idWYpOworCX0KKwlpZiAoc2Vlbl9kYXNoZGFzaCkKKwkJcmVhZF9wYXRoc3BlY19mcm9tX3N0ZGluKCZzYiwgcHJ1bmUpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl3YXJuX29uX29iamVjdF9yZWZuYW1lX2FtYmlndWl0eSA9IHNhdmVfd2FybmluZzsKK30KKworc3RhdGljIHZvaWQgYWRkX2dyZXAoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaGFyICpwdG4sIGVudW0gZ3JlcF9wYXRfdG9rZW4gd2hhdCkKK3sKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZyZXZzLT5ncmVwX2ZpbHRlciwgcHRuLCAiY29tbWFuZCBsaW5lIiwgMCwgd2hhdCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9oZWFkZXJfZ3JlcChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGVudW0gZ3JlcF9oZWFkZXJfZmllbGQgZmllbGQsIGNvbnN0IGNoYXIgKnBhdHRlcm4pCit7CisJYXBwZW5kX2hlYWRlcl9ncmVwX3BhdHRlcm4oJnJldnMtPmdyZXBfZmlsdGVyLCBmaWVsZCwgcGF0dGVybik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9tZXNzYWdlX2dyZXAoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaGFyICpwYXR0ZXJuKQoreworCWFkZF9ncmVwKHJldnMsIHBhdHRlcm4sIEdSRVBfUEFUVEVSTl9CT0RZKTsKK30KKworc3RhdGljIGludCBoYW5kbGVfcmV2aXNpb25fb3B0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICAgICAgIGludCAqdW5rYywgY29uc3QgY2hhciAqKnVua3YsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCogb3B0KQoreworCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbMF07CisJY29uc3QgY2hhciAqb3B0YXJnOworCWludCBhcmdjb3VudDsKKwljb25zdCB1bnNpZ25lZCBoZXhzeiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6OworCisJLyogcHNldWRvIHJldmlzaW9uIGFyZ3VtZW50cyAqLworCWlmICghc3RyY21wKGFyZywgIi0tYWxsIikgfHwgIXN0cmNtcChhcmcsICItLWJyYW5jaGVzIikgfHwKKwkgICAgIXN0cmNtcChhcmcsICItLXRhZ3MiKSB8fCAhc3RyY21wKGFyZywgIi0tcmVtb3RlcyIpIHx8CisJICAgICFzdHJjbXAoYXJnLCAiLS1yZWZsb2ciKSB8fCAhc3RyY21wKGFyZywgIi0tbm90IikgfHwKKwkgICAgIXN0cmNtcChhcmcsICItLW5vLXdhbGsiKSB8fCAhc3RyY21wKGFyZywgIi0tZG8td2FsayIpIHx8CisJICAgICFzdHJjbXAoYXJnLCAiLS1iaXNlY3QiKSB8fCBzdGFydHNfd2l0aChhcmcsICItLWdsb2I9IikgfHwKKwkgICAgIXN0cmNtcChhcmcsICItLWluZGV4ZWQtb2JqZWN0cyIpIHx8CisJICAgICFzdHJjbXAoYXJnLCAiLS1hbHRlcm5hdGUtcmVmcyIpIHx8CisJICAgIHN0YXJ0c193aXRoKGFyZywgIi0tZXhjbHVkZT0iKSB8fAorCSAgICBzdGFydHNfd2l0aChhcmcsICItLWJyYW5jaGVzPSIpIHx8IHN0YXJ0c193aXRoKGFyZywgIi0tdGFncz0iKSB8fAorCSAgICBzdGFydHNfd2l0aChhcmcsICItLXJlbW90ZXM9IikgfHwgc3RhcnRzX3dpdGgoYXJnLCAiLS1uby13YWxrPSIpKQorCXsKKwkJdW5rdlsoKnVua2MpKytdID0gYXJnOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoIm1heC1jb3VudCIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlyZXZzLT5tYXhfY291bnQgPSBhdG9pKG9wdGFyZyk7CisJCXJldnMtPm5vX3dhbGsgPSAwOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgic2tpcCIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlyZXZzLT5za2lwX2NvdW50ID0gYXRvaShvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICgoKmFyZyA9PSAnLScpICYmIGlzZGlnaXQoYXJnWzFdKSkgeworCQkvKiBhY2NlcHQgLTxkaWdpdD4sIGxpa2UgdHJhZGl0aW9uYWwgImhlYWQiICovCisJCWlmIChzdHJ0b2xfaShhcmcgKyAxLCAxMCwgJnJldnMtPm1heF9jb3VudCkgPCAwIHx8CisJCSAgICByZXZzLT5tYXhfY291bnQgPCAwKQorCQkJZGllKCInJXMnOiBub3QgYSBub24tbmVnYXRpdmUgaW50ZWdlciIsIGFyZyArIDEpOworCQlyZXZzLT5ub193YWxrID0gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLW4iKSkgeworCQlpZiAoYXJnYyA8PSAxKQorCQkJcmV0dXJuIGVycm9yKCItbiByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworCQlyZXZzLT5tYXhfY291bnQgPSBhdG9pKGFyZ3ZbMV0pOworCQlyZXZzLT5ub193YWxrID0gMDsKKwkJcmV0dXJuIDI7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItbiIsICZvcHRhcmcpKSB7CisJCXJldnMtPm1heF9jb3VudCA9IGF0b2kob3B0YXJnKTsKKwkJcmV2cy0+bm9fd2FsayA9IDA7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgibWF4LWFnZSIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlyZXZzLT5tYXhfYWdlID0gYXRvaShvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgic2luY2UiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJcmV2cy0+bWF4X2FnZSA9IGFwcHJveGlkYXRlKG9wdGFyZyk7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJhZnRlciIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlyZXZzLT5tYXhfYWdlID0gYXBwcm94aWRhdGUob3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoIm1pbi1hZ2UiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJcmV2cy0+bWluX2FnZSA9IGF0b2kob3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoImJlZm9yZSIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlyZXZzLT5taW5fYWdlID0gYXBwcm94aWRhdGUob3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoInVudGlsIiwgYXJndiwgJm9wdGFyZykpKSB7CisJCXJldnMtPm1pbl9hZ2UgPSBhcHByb3hpZGF0ZShvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZmlyc3QtcGFyZW50IikpIHsKKwkJcmV2cy0+Zmlyc3RfcGFyZW50X29ubHkgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWFuY2VzdHJ5LXBhdGgiKSkgeworCQlyZXZzLT5hbmNlc3RyeV9wYXRoID0gMTsKKwkJcmV2cy0+c2ltcGxpZnlfaGlzdG9yeSA9IDA7CisJCXJldnMtPmxpbWl0ZWQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItZyIpIHx8ICFzdHJjbXAoYXJnLCAiLS13YWxrLXJlZmxvZ3MiKSkgeworCQlpbml0X3JlZmxvZ193YWxrKCZyZXZzLT5yZWZsb2dfaW5mbyk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZGVmYXVsdCIpKSB7CisJCWlmIChhcmdjIDw9IDEpCisJCQlyZXR1cm4gZXJyb3IoImJhZCAtLWRlZmF1bHQgYXJndW1lbnQiKTsKKwkJcmV2cy0+ZGVmID0gYXJndlsxXTsKKwkJcmV0dXJuIDI7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbWVyZ2UiKSkgeworCQlyZXZzLT5zaG93X21lcmdlID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS10b3BvLW9yZGVyIikpIHsKKwkJcmV2cy0+c29ydF9vcmRlciA9IFJFVl9TT1JUX0lOX0dSQVBIX09SREVSOworCQlyZXZzLT50b3BvX29yZGVyID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zaW1wbGlmeS1tZXJnZXMiKSkgeworCQlyZXZzLT5zaW1wbGlmeV9tZXJnZXMgPSAxOworCQlyZXZzLT50b3BvX29yZGVyID0gMTsKKwkJcmV2cy0+cmV3cml0ZV9wYXJlbnRzID0gMTsKKwkJcmV2cy0+c2ltcGxpZnlfaGlzdG9yeSA9IDA7CisJCXJldnMtPmxpbWl0ZWQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24iKSkgeworCQlyZXZzLT5zaW1wbGlmeV9tZXJnZXMgPSAxOworCQlyZXZzLT50b3BvX29yZGVyID0gMTsKKwkJcmV2cy0+cmV3cml0ZV9wYXJlbnRzID0gMTsKKwkJcmV2cy0+c2ltcGxpZnlfaGlzdG9yeSA9IDA7CisJCXJldnMtPnNpbXBsaWZ5X2J5X2RlY29yYXRpb24gPSAxOworCQlyZXZzLT5saW1pdGVkID0gMTsKKwkJcmV2cy0+cHJ1bmUgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWRhdGUtb3JkZXIiKSkgeworCQlyZXZzLT5zb3J0X29yZGVyID0gUkVWX1NPUlRfQllfQ09NTUlUX0RBVEU7CisJCXJldnMtPnRvcG9fb3JkZXIgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWF1dGhvci1kYXRlLW9yZGVyIikpIHsKKwkJcmV2cy0+c29ydF9vcmRlciA9IFJFVl9TT1JUX0JZX0FVVEhPUl9EQVRFOworCQlyZXZzLT50b3BvX29yZGVyID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1lYXJseS1vdXRwdXQiKSkgeworCQlyZXZzLT5lYXJseV9vdXRwdXQgPSAxMDA7CisJCXJldnMtPnRvcG9fb3JkZXIgPSAxOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1lYXJseS1vdXRwdXQ9IiwgJm9wdGFyZykpIHsKKwkJaWYgKHN0cnRvdWxfdWkob3B0YXJnLCAxMCwgJnJldnMtPmVhcmx5X291dHB1dCkgPCAwKQorCQkJZGllKCInJXMnOiBub3QgYSBub24tbmVnYXRpdmUgaW50ZWdlciIsIG9wdGFyZyk7CisJCXJldnMtPnRvcG9fb3JkZXIgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXBhcmVudHMiKSkgeworCQlyZXZzLT5yZXdyaXRlX3BhcmVudHMgPSAxOworCQlyZXZzLT5wcmludF9wYXJlbnRzID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1kZW5zZSIpKSB7CisJCXJldnMtPmRlbnNlID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zcGFyc2UiKSkgeworCQlyZXZzLT5kZW5zZSA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0taW4tY29tbWl0LW9yZGVyIikpIHsKKwkJcmV2cy0+dHJlZV9ibG9ic19pbl9jb21taXRfb3JkZXIgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlbW92ZS1lbXB0eSIpKSB7CisJCXJldnMtPnJlbW92ZV9lbXB0eV90cmVlcyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbWVyZ2VzIikpIHsKKwkJcmV2cy0+bWluX3BhcmVudHMgPSAyOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLW1lcmdlcyIpKSB7CisJCXJldnMtPm1heF9wYXJlbnRzID0gMTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIi0tbWluLXBhcmVudHM9IiwgJm9wdGFyZykpIHsKKwkJcmV2cy0+bWluX3BhcmVudHMgPSBhdG9pKG9wdGFyZyk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tbWluLXBhcmVudHMiKSkgeworCQlyZXZzLT5taW5fcGFyZW50cyA9IDA7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLW1heC1wYXJlbnRzPSIsICZvcHRhcmcpKSB7CisJCXJldnMtPm1heF9wYXJlbnRzID0gYXRvaShvcHRhcmcpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLW1heC1wYXJlbnRzIikpIHsKKwkJcmV2cy0+bWF4X3BhcmVudHMgPSAtMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1ib3VuZGFyeSIpKSB7CisJCXJldnMtPmJvdW5kYXJ5ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1sZWZ0LXJpZ2h0IikpIHsKKwkJcmV2cy0+bGVmdF9yaWdodCA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbGVmdC1vbmx5IikpIHsKKwkJaWYgKHJldnMtPnJpZ2h0X29ubHkpCisJCQlkaWUoIi0tbGVmdC1vbmx5IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcmlnaHQtb25seSIKKwkJCSAgICAiIG9yIC0tY2hlcnJ5Iik7CisJCXJldnMtPmxlZnRfb25seSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmlnaHQtb25seSIpKSB7CisJCWlmIChyZXZzLT5sZWZ0X29ubHkpCisJCQlkaWUoIi0tcmlnaHQtb25seSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWxlZnQtb25seSIpOworCQlyZXZzLT5yaWdodF9vbmx5ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jaGVycnkiKSkgeworCQlpZiAocmV2cy0+bGVmdF9vbmx5KQorCQkJZGllKCItLWNoZXJyeSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWxlZnQtb25seSIpOworCQlyZXZzLT5jaGVycnlfbWFyayA9IDE7CisJCXJldnMtPnJpZ2h0X29ubHkgPSAxOworCQlyZXZzLT5tYXhfcGFyZW50cyA9IDE7CisJCXJldnMtPmxpbWl0ZWQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNvdW50IikpIHsKKwkJcmV2cy0+Y291bnQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNoZXJyeS1tYXJrIikpIHsKKwkJaWYgKHJldnMtPmNoZXJyeV9waWNrKQorCQkJZGllKCItLWNoZXJyeS1tYXJrIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tY2hlcnJ5LXBpY2siKTsKKwkJcmV2cy0+Y2hlcnJ5X21hcmsgPSAxOworCQlyZXZzLT5saW1pdGVkID0gMTsgLyogbmVlZHMgbGltaXRfbGlzdCgpICovCisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tY2hlcnJ5LXBpY2siKSkgeworCQlpZiAocmV2cy0+Y2hlcnJ5X21hcmspCisJCQlkaWUoIi0tY2hlcnJ5LXBpY2sgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1jaGVycnktbWFyayIpOworCQlyZXZzLT5jaGVycnlfcGljayA9IDE7CisJCXJldnMtPmxpbWl0ZWQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW9iamVjdHMiKSkgeworCQlyZXZzLT50YWdfb2JqZWN0cyA9IDE7CisJCXJldnMtPnRyZWVfb2JqZWN0cyA9IDE7CisJCXJldnMtPmJsb2Jfb2JqZWN0cyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tb2JqZWN0cy1lZGdlIikpIHsKKwkJcmV2cy0+dGFnX29iamVjdHMgPSAxOworCQlyZXZzLT50cmVlX29iamVjdHMgPSAxOworCQlyZXZzLT5ibG9iX29iamVjdHMgPSAxOworCQlyZXZzLT5lZGdlX2hpbnQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW9iamVjdHMtZWRnZS1hZ2dyZXNzaXZlIikpIHsKKwkJcmV2cy0+dGFnX29iamVjdHMgPSAxOworCQlyZXZzLT50cmVlX29iamVjdHMgPSAxOworCQlyZXZzLT5ibG9iX29iamVjdHMgPSAxOworCQlyZXZzLT5lZGdlX2hpbnQgPSAxOworCQlyZXZzLT5lZGdlX2hpbnRfYWdncmVzc2l2ZSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tdmVyaWZ5LW9iamVjdHMiKSkgeworCQlyZXZzLT50YWdfb2JqZWN0cyA9IDE7CisJCXJldnMtPnRyZWVfb2JqZWN0cyA9IDE7CisJCXJldnMtPmJsb2Jfb2JqZWN0cyA9IDE7CisJCXJldnMtPnZlcmlmeV9vYmplY3RzID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS11bnBhY2tlZCIpKSB7CisJCXJldnMtPnVucGFja2VkID0gMTsKKwl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tdW5wYWNrZWQ9IikpIHsKKwkJZGllKCItLXVucGFja2VkPTxwYWNrZmlsZT4gbm8gbG9uZ2VyIHN1cHBvcnRlZC4iKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXIiKSkgeworCQlyZXZzLT5kaWZmID0gMTsKKwkJcmV2cy0+ZGlmZm9wdC5mbGFncy5yZWN1cnNpdmUgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItdCIpKSB7CisJCXJldnMtPmRpZmYgPSAxOworCQlyZXZzLT5kaWZmb3B0LmZsYWdzLnJlY3Vyc2l2ZSA9IDE7CisJCXJldnMtPmRpZmZvcHQuZmxhZ3MudHJlZV9pbl9yZWN1cnNpdmUgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItbSIpKSB7CisJCXJldnMtPmlnbm9yZV9tZXJnZXMgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItYyIpKSB7CisJCXJldnMtPmRpZmYgPSAxOworCQlyZXZzLT5kZW5zZV9jb21iaW5lZF9tZXJnZXMgPSAwOworCQlyZXZzLT5jb21iaW5lX21lcmdlcyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tY29tYmluZWQtYWxsLXBhdGhzIikpIHsKKwkJcmV2cy0+ZGlmZiA9IDE7CisJCXJldnMtPmNvbWJpbmVkX2FsbF9wYXRocyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tY2MiKSkgeworCQlyZXZzLT5kaWZmID0gMTsKKwkJcmV2cy0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzID0gMTsKKwkJcmV2cy0+Y29tYmluZV9tZXJnZXMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItdiIpKSB7CisJCXJldnMtPnZlcmJvc2VfaGVhZGVyID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1wcmV0dHkiKSkgeworCQlyZXZzLT52ZXJib3NlX2hlYWRlciA9IDE7CisJCXJldnMtPnByZXR0eV9naXZlbiA9IDE7CisJCWdldF9jb21taXRfZm9ybWF0KE5VTEwsIHJldnMpOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1wcmV0dHk9IiwgJm9wdGFyZykgfHwKKwkJICAgc2tpcF9wcmVmaXgoYXJnLCAiLS1mb3JtYXQ9IiwgJm9wdGFyZykpIHsKKwkJLyoKKwkJICogRGV0YWNoZWQgZm9ybSAoIi0tcHJldHR5IFgiIGFzIG9wcG9zZWQgdG8gIi0tcHJldHR5PVgiKQorCQkgKiBub3QgYWxsb3dlZCwgc2luY2UgdGhlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLgorCQkgKi8KKwkJcmV2cy0+dmVyYm9zZV9oZWFkZXIgPSAxOworCQlyZXZzLT5wcmV0dHlfZ2l2ZW4gPSAxOworCQlnZXRfY29tbWl0X2Zvcm1hdChvcHRhcmcsIHJldnMpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWV4cGFuZC10YWJzIikpIHsKKwkJcmV2cy0+ZXhwYW5kX3RhYnNfaW5fbG9nID0gODsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1leHBhbmQtdGFicyIpKSB7CisJCXJldnMtPmV4cGFuZF90YWJzX2luX2xvZyA9IDA7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLWV4cGFuZC10YWJzPSIsICZhcmcpKSB7CisJCWludCB2YWw7CisJCWlmIChzdHJ0b2xfaShhcmcsIDEwLCAmdmFsKSA8IDAgfHwgdmFsIDwgMCkKKwkJCWRpZSgiJyVzJzogbm90IGEgbm9uLW5lZ2F0aXZlIGludGVnZXIiLCBhcmcpOworCQlyZXZzLT5leHBhbmRfdGFic19pbl9sb2cgPSB2YWw7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hvdy1ub3RlcyIpIHx8ICFzdHJjbXAoYXJnLCAiLS1ub3RlcyIpKSB7CisJCWVuYWJsZV9kZWZhdWx0X2Rpc3BsYXlfbm90ZXMoJnJldnMtPm5vdGVzX29wdCwgJnJldnMtPnNob3dfbm90ZXMpOworCQlyZXZzLT5zaG93X25vdGVzX2dpdmVuID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG93LXNpZ25hdHVyZSIpKSB7CisJCXJldnMtPnNob3dfc2lnbmF0dXJlID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1zaG93LXNpZ25hdHVyZSIpKSB7CisJCXJldnMtPnNob3dfc2lnbmF0dXJlID0gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG93LWxpbmVhci1icmVhayIpKSB7CisJCXJldnMtPmJyZWFrX2JhciA9ICIgICAgICAgICAgICAgICAgICAgIC4uLi4uLi4uLi4iOworCQlyZXZzLT50cmFja19saW5lYXIgPSAxOworCQlyZXZzLT50cmFja19maXJzdF90aW1lID0gMTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIi0tc2hvdy1saW5lYXItYnJlYWs9IiwgJm9wdGFyZykpIHsKKwkJcmV2cy0+YnJlYWtfYmFyID0geHN0cmR1cChvcHRhcmcpOworCQlyZXZzLT50cmFja19saW5lYXIgPSAxOworCQlyZXZzLT50cmFja19maXJzdF90aW1lID0gMTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIi0tc2hvdy1ub3Rlcz0iLCAmb3B0YXJnKSB8fAorCQkgICBza2lwX3ByZWZpeChhcmcsICItLW5vdGVzPSIsICZvcHRhcmcpKSB7CisJCWlmIChzdGFydHNfd2l0aChhcmcsICItLXNob3ctbm90ZXM9IikgJiYKKwkJICAgIHJldnMtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA8IDApCisJCQlyZXZzLT5ub3Rlc19vcHQudXNlX2RlZmF1bHRfbm90ZXMgPSAxOworCQllbmFibGVfcmVmX2Rpc3BsYXlfbm90ZXMoJnJldnMtPm5vdGVzX29wdCwgJnJldnMtPnNob3dfbm90ZXMsIG9wdGFyZyk7CisJCXJldnMtPnNob3dfbm90ZXNfZ2l2ZW4gPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLW5vdGVzIikpIHsKKwkJZGlzYWJsZV9kaXNwbGF5X25vdGVzKCZyZXZzLT5ub3Rlc19vcHQsICZyZXZzLT5zaG93X25vdGVzKTsKKwkJcmV2cy0+c2hvd19ub3Rlc19naXZlbiA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc3RhbmRhcmQtbm90ZXMiKSkgeworCQlyZXZzLT5zaG93X25vdGVzX2dpdmVuID0gMTsKKwkJcmV2cy0+bm90ZXNfb3B0LnVzZV9kZWZhdWx0X25vdGVzID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1zdGFuZGFyZC1ub3RlcyIpKSB7CisJCXJldnMtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tb25lbGluZSIpKSB7CisJCXJldnMtPnZlcmJvc2VfaGVhZGVyID0gMTsKKwkJZ2V0X2NvbW1pdF9mb3JtYXQoIm9uZWxpbmUiLCByZXZzKTsKKwkJcmV2cy0+cHJldHR5X2dpdmVuID0gMTsKKwkJcmV2cy0+YWJicmV2X2NvbW1pdCA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZ3JhcGgiKSkgeworCQlyZXZzLT50b3BvX29yZGVyID0gMTsKKwkJcmV2cy0+cmV3cml0ZV9wYXJlbnRzID0gMTsKKwkJcmV2cy0+Z3JhcGggPSBncmFwaF9pbml0KHJldnMpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWVuY29kZS1lbWFpbC1oZWFkZXJzIikpIHsKKwkJcmV2cy0+ZW5jb2RlX2VtYWlsX2hlYWRlcnMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLWVuY29kZS1lbWFpbC1oZWFkZXJzIikpIHsKKwkJcmV2cy0+ZW5jb2RlX2VtYWlsX2hlYWRlcnMgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJvb3QiKSkgeworCQlyZXZzLT5zaG93X3Jvb3RfZGlmZiA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tY29tbWl0LWlkIikpIHsKKwkJcmV2cy0+bm9fY29tbWl0X2lkID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1hbHdheXMiKSkgeworCQlyZXZzLT5hbHdheXNfc2hvd19oZWFkZXIgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLWFiYnJldiIpKSB7CisJCXJldnMtPmFiYnJldiA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYWJicmV2IikpIHsKKwkJcmV2cy0+YWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLWFiYnJldj0iLCAmb3B0YXJnKSkgeworCQlyZXZzLT5hYmJyZXYgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMTApOworCQlpZiAocmV2cy0+YWJicmV2IDwgTUlOSU1VTV9BQkJSRVYpCisJCQlyZXZzLT5hYmJyZXYgPSBNSU5JTVVNX0FCQlJFVjsKKwkJZWxzZSBpZiAocmV2cy0+YWJicmV2ID4gaGV4c3opCisJCQlyZXZzLT5hYmJyZXYgPSBoZXhzejsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1hYmJyZXYtY29tbWl0IikpIHsKKwkJcmV2cy0+YWJicmV2X2NvbW1pdCA9IDE7CisJCXJldnMtPmFiYnJldl9jb21taXRfZ2l2ZW4gPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLWFiYnJldi1jb21taXQiKSkgeworCQlyZXZzLT5hYmJyZXZfY29tbWl0ID0gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1mdWxsLWRpZmYiKSkgeworCQlyZXZzLT5kaWZmID0gMTsKKwkJcmV2cy0+ZnVsbF9kaWZmID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG93LXB1bGxzIikpIHsKKwkJcmV2cy0+c2hvd19wdWxscyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZnVsbC1oaXN0b3J5IikpIHsKKwkJcmV2cy0+c2ltcGxpZnlfaGlzdG9yeSA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmVsYXRpdmUtZGF0ZSIpKSB7CisJCXJldnMtPmRhdGVfbW9kZS50eXBlID0gREFURV9SRUxBVElWRTsKKwkJcmV2cy0+ZGF0ZV9tb2RlX2V4cGxpY2l0ID0gMTsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJkYXRlIiwgYXJndiwgJm9wdGFyZykpKSB7CisJCXBhcnNlX2RhdGVfZm9ybWF0KG9wdGFyZywgJnJldnMtPmRhdGVfbW9kZSk7CisJCXJldnMtPmRhdGVfbW9kZV9leHBsaWNpdCA9IDE7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1sb2ctc2l6ZSIpKSB7CisJCXJldnMtPnNob3dfbG9nX3NpemUgPSAxOworCX0KKwkvKgorCSAqIEdyZXBwaW5nIHRoZSBjb21taXQgbG9nCisJICovCisJZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoImF1dGhvciIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlhZGRfaGVhZGVyX2dyZXAocmV2cywgR1JFUF9IRUFERVJfQVVUSE9SLCBvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgiY29tbWl0dGVyIiwgYXJndiwgJm9wdGFyZykpKSB7CisJCWFkZF9oZWFkZXJfZ3JlcChyZXZzLCBHUkVQX0hFQURFUl9DT01NSVRURVIsIG9wdGFyZyk7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJncmVwLXJlZmxvZyIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlhZGRfaGVhZGVyX2dyZXAocmV2cywgR1JFUF9IRUFERVJfUkVGTE9HLCBvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgiZ3JlcCIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlhZGRfbWVzc2FnZV9ncmVwKHJldnMsIG9wdGFyZyk7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1ncmVwLWRlYnVnIikpIHsKKwkJcmV2cy0+Z3JlcF9maWx0ZXIuZGVidWcgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWJhc2ljLXJlZ2V4cCIpKSB7CisJCXJldnMtPmdyZXBfZmlsdGVyLnBhdHRlcm5fdHlwZV9vcHRpb24gPSBHUkVQX1BBVFRFUk5fVFlQRV9CUkU7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZXh0ZW5kZWQtcmVnZXhwIikgfHwgIXN0cmNtcChhcmcsICItRSIpKSB7CisJCXJldnMtPmdyZXBfZmlsdGVyLnBhdHRlcm5fdHlwZV9vcHRpb24gPSBHUkVQX1BBVFRFUk5fVFlQRV9FUkU7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmVnZXhwLWlnbm9yZS1jYXNlIikgfHwgIXN0cmNtcChhcmcsICItaSIpKSB7CisJCXJldnMtPmdyZXBfZmlsdGVyLmlnbm9yZV9jYXNlID0gMTsKKwkJcmV2cy0+ZGlmZm9wdC5waWNrYXhlX29wdHMgfD0gRElGRl9QSUNLQVhFX0lHTk9SRV9DQVNFOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWZpeGVkLXN0cmluZ3MiKSB8fCAhc3RyY21wKGFyZywgIi1GIikpIHsKKwkJcmV2cy0+Z3JlcF9maWx0ZXIucGF0dGVybl90eXBlX29wdGlvbiA9IEdSRVBfUEFUVEVSTl9UWVBFX0ZJWEVEOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXBlcmwtcmVnZXhwIikgfHwgIXN0cmNtcChhcmcsICItUCIpKSB7CisJCXJldnMtPmdyZXBfZmlsdGVyLnBhdHRlcm5fdHlwZV9vcHRpb24gPSBHUkVQX1BBVFRFUk5fVFlQRV9QQ1JFOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWFsbC1tYXRjaCIpKSB7CisJCXJldnMtPmdyZXBfZmlsdGVyLmFsbF9tYXRjaCA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0taW52ZXJ0LWdyZXAiKSkgeworCQlyZXZzLT5pbnZlcnRfZ3JlcCA9IDE7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgiZW5jb2RpbmciLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJaWYgKHN0cmNtcChvcHRhcmcsICJub25lIikpCisJCQlnaXRfbG9nX291dHB1dF9lbmNvZGluZyA9IHhzdHJkdXAob3B0YXJnKTsKKwkJZWxzZQorCQkJZ2l0X2xvZ19vdXRwdXRfZW5jb2RpbmcgPSAiIjsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJldmVyc2UiKSkgeworCQlyZXZzLT5yZXZlcnNlIF49IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tY2hpbGRyZW4iKSkgeworCQlyZXZzLT5jaGlsZHJlbi5uYW1lID0gImNoaWxkcmVuIjsKKwkJcmV2cy0+bGltaXRlZCA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0taWdub3JlLW1pc3NpbmciKSkgeworCQlyZXZzLT5pZ25vcmVfbWlzc2luZyA9IDE7CisJfSBlbHNlIGlmIChvcHQgJiYgb3B0LT5hbGxvd19leGNsdWRlX3Byb21pc29yX29iamVjdHMgJiYKKwkJICAgIXN0cmNtcChhcmcsICItLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyIpKSB7CisJCWlmIChmZXRjaF9pZl9taXNzaW5nKQorCQkJQlVHKCJleGNsdWRlX3Byb21pc29yX29iamVjdHMgY2FuIG9ubHkgYmUgdXNlZCB3aGVuIGZldGNoX2lmX21pc3NpbmcgaXMgMCIpOworCQlyZXZzLT5leGNsdWRlX3Byb21pc29yX29iamVjdHMgPSAxOworCX0gZWxzZSB7CisJCWludCBvcHRzID0gZGlmZl9vcHRfcGFyc2UoJnJldnMtPmRpZmZvcHQsIGFyZ3YsIGFyZ2MsIHJldnMtPnByZWZpeCk7CisJCWlmICghb3B0cykKKwkJCXVua3ZbKCp1bmtjKSsrXSA9IGFyZzsKKwkJcmV0dXJuIG9wdHM7CisJfQorCWlmIChyZXZzLT5ncmFwaCAmJiByZXZzLT50cmFja19saW5lYXIpCisJCWRpZSgiLS1zaG93LWxpbmVhci1icmVhayBhbmQgLS1ncmFwaCBhcmUgaW5jb21wYXRpYmxlIik7CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBwYXJzZV9yZXZpc2lvbl9vcHQoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQljb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLAorCQkJY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10pCit7CisJaW50IG4gPSBoYW5kbGVfcmV2aXNpb25fb3B0KHJldnMsIGN0eC0+YXJnYywgY3R4LT5hcmd2LAorCQkJCSAgICAmY3R4LT5jcGlkeCwgY3R4LT5vdXQsIE5VTEwpOworCWlmIChuIDw9IDApIHsKKwkJZXJyb3IoInVua25vd24gb3B0aW9uIGAlcyciLCBjdHgtPmFyZ3ZbMF0pOworCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2VzdHIsIG9wdGlvbnMpOworCX0KKwljdHgtPmFyZ3YgKz0gbjsKKwljdHgtPmFyZ2MgLT0gbjsKK30KKworc3RhdGljIGludCBmb3JfZWFjaF9iaXNlY3RfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGVhY2hfcmVmX2ZuIGZuLAorCQkJICAgICAgIHZvaWQgKmNiX2RhdGEsIGNvbnN0IGNoYXIgKnRlcm0pCit7CisJc3RydWN0IHN0cmJ1ZiBiaXNlY3RfcmVmcyA9IFNUUkJVRl9JTklUOworCWludCBzdGF0dXM7CisJc3RyYnVmX2FkZGYoJmJpc2VjdF9yZWZzLCAicmVmcy9iaXNlY3QvJXMiLCB0ZXJtKTsKKwlzdGF0dXMgPSByZWZzX2Zvcl9lYWNoX2Z1bGxyZWZfaW4ocmVmcywgYmlzZWN0X3JlZnMuYnVmLCBmbiwgY2JfZGF0YSwgMCk7CisJc3RyYnVmX3JlbGVhc2UoJmJpc2VjdF9yZWZzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGZvcl9lYWNoX2JhZF9iaXNlY3RfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBmb3JfZWFjaF9iaXNlY3RfcmVmKHJlZnMsIGZuLCBjYl9kYXRhLCB0ZXJtX2JhZCk7Cit9CisKK3N0YXRpYyBpbnQgZm9yX2VhY2hfZ29vZF9iaXNlY3RfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBmb3JfZWFjaF9iaXNlY3RfcmVmKHJlZnMsIGZuLCBjYl9kYXRhLCB0ZXJtX2dvb2QpOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9yZXZpc2lvbl9wc2V1ZG9fb3B0KGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwKKwkJCQlzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBpbnQgKmZsYWdzKQoreworCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbMF07CisJY29uc3QgY2hhciAqb3B0YXJnOworCXN0cnVjdCByZWZfc3RvcmUgKnJlZnM7CisJaW50IGFyZ2NvdW50OworCisJaWYgKHN1Ym1vZHVsZSkgeworCQkvKgorCQkgKiBXZSBuZWVkIHNvbWUgc29tZXRoaW5nIGxpa2UgZ2V0X3N1Ym1vZHVsZV93b3JrdHJlZXMoKQorCQkgKiBiZWZvcmUgd2UgY2FuIGdvIHRocm91Z2ggYWxsIHdvcmt0cmVlcyBvZiBhIHN1Ym1vZHVsZSwKKwkJICogLmUuZyB3aXRoIGFkZGluZyBhbGwgSEVBRHMgZnJvbSAtLWFsbCwgd2hpY2ggaXMgbm90CisJCSAqIHN1cHBvcnRlZCByaWdodCBub3csIHNvIHN0aWNrIHRvIHNpbmdsZSB3b3JrdHJlZS4KKwkJICovCisJCWlmICghcmV2cy0+c2luZ2xlX3dvcmt0cmVlKQorCQkJQlVHKCItLXNpbmdsZS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIHN1Ym1vZHVsZSIpOworCQlyZWZzID0gZ2V0X3N1Ym1vZHVsZV9yZWZfc3RvcmUoc3VibW9kdWxlKTsKKwl9IGVsc2UKKwkJcmVmcyA9IGdldF9tYWluX3JlZl9zdG9yZShyZXZzLT5yZXBvKTsKKworCS8qCisJICogTk9URSEKKwkgKgorCSAqIENvbW1hbmRzIGxpa2UgImdpdCBzaG9ydGxvZyIgd2lsbCBub3QgYWNjZXB0IHRoZSBvcHRpb25zIGJlbG93CisJICogdW5sZXNzIHBhcnNlX3JldmlzaW9uX29wdCBxdWV1ZXMgdGhlbSAoYXMgb3Bwb3NlZCB0byBlcnJvcmluZworCSAqIG91dCkuCisJICoKKwkgKiBXaGVuIGltcGxlbWVudGluZyB5b3VyIG5ldyBwc2V1ZG8tb3B0aW9uLCByZW1lbWJlciB0bworCSAqIHJlZ2lzdGVyIGl0IGluIHRoZSBsaXN0IGF0IHRoZSB0b3Agb2YgaGFuZGxlX3JldmlzaW9uX29wdC4KKwkgKi8KKwlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCWhhbmRsZV9yZWZzKHJlZnMsIHJldnMsICpmbGFncywgcmVmc19mb3JfZWFjaF9yZWYpOworCQloYW5kbGVfcmVmcyhyZWZzLCByZXZzLCAqZmxhZ3MsIHJlZnNfaGVhZF9yZWYpOworCQlpZiAoIXJldnMtPnNpbmdsZV93b3JrdHJlZSkgeworCQkJc3RydWN0IGFsbF9yZWZzX2NiIGNiOworCisJCQlpbml0X2FsbF9yZWZzX2NiKCZjYiwgcmV2cywgKmZsYWdzKTsKKwkJCW90aGVyX2hlYWRfcmVmcyhoYW5kbGVfb25lX3JlZiwgJmNiKTsKKwkJfQorCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZXZzLT5yZWZfZXhjbHVkZXMpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWJyYW5jaGVzIikpIHsKKwkJaGFuZGxlX3JlZnMocmVmcywgcmV2cywgKmZsYWdzLCByZWZzX2Zvcl9lYWNoX2JyYW5jaF9yZWYpOworCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZXZzLT5yZWZfZXhjbHVkZXMpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWJpc2VjdCIpKSB7CisJCXJlYWRfYmlzZWN0X3Rlcm1zKCZ0ZXJtX2JhZCwgJnRlcm1fZ29vZCk7CisJCWhhbmRsZV9yZWZzKHJlZnMsIHJldnMsICpmbGFncywgZm9yX2VhY2hfYmFkX2Jpc2VjdF9yZWYpOworCQloYW5kbGVfcmVmcyhyZWZzLCByZXZzLCAqZmxhZ3MgXiAoVU5JTlRFUkVTVElORyB8IEJPVFRPTSksCisJCQkgICAgZm9yX2VhY2hfZ29vZF9iaXNlY3RfcmVmKTsKKwkJcmV2cy0+YmlzZWN0ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS10YWdzIikpIHsKKwkJaGFuZGxlX3JlZnMocmVmcywgcmV2cywgKmZsYWdzLCByZWZzX2Zvcl9lYWNoX3RhZ19yZWYpOworCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZXZzLT5yZWZfZXhjbHVkZXMpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlbW90ZXMiKSkgeworCQloYW5kbGVfcmVmcyhyZWZzLCByZXZzLCAqZmxhZ3MsIHJlZnNfZm9yX2VhY2hfcmVtb3RlX3JlZik7CisJCWNsZWFyX3JlZl9leGNsdXNpb24oJnJldnMtPnJlZl9leGNsdWRlcyk7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgiZ2xvYiIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlzdHJ1Y3QgYWxsX3JlZnNfY2IgY2I7CisJCWluaXRfYWxsX3JlZnNfY2IoJmNiLCByZXZzLCAqZmxhZ3MpOworCQlmb3JfZWFjaF9nbG9iX3JlZihoYW5kbGVfb25lX3JlZiwgb3B0YXJnLCAmY2IpOworCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZXZzLT5yZWZfZXhjbHVkZXMpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgiZXhjbHVkZSIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlhZGRfcmVmX2V4Y2x1c2lvbigmcmV2cy0+cmVmX2V4Y2x1ZGVzLCBvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLWJyYW5jaGVzPSIsICZvcHRhcmcpKSB7CisJCXN0cnVjdCBhbGxfcmVmc19jYiBjYjsKKwkJaW5pdF9hbGxfcmVmc19jYigmY2IsIHJldnMsICpmbGFncyk7CisJCWZvcl9lYWNoX2dsb2JfcmVmX2luKGhhbmRsZV9vbmVfcmVmLCBvcHRhcmcsICJyZWZzL2hlYWRzLyIsICZjYik7CisJCWNsZWFyX3JlZl9leGNsdXNpb24oJnJldnMtPnJlZl9leGNsdWRlcyk7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLXRhZ3M9IiwgJm9wdGFyZykpIHsKKwkJc3RydWN0IGFsbF9yZWZzX2NiIGNiOworCQlpbml0X2FsbF9yZWZzX2NiKCZjYiwgcmV2cywgKmZsYWdzKTsKKwkJZm9yX2VhY2hfZ2xvYl9yZWZfaW4oaGFuZGxlX29uZV9yZWYsIG9wdGFyZywgInJlZnMvdGFncy8iLCAmY2IpOworCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZXZzLT5yZWZfZXhjbHVkZXMpOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1yZW1vdGVzPSIsICZvcHRhcmcpKSB7CisJCXN0cnVjdCBhbGxfcmVmc19jYiBjYjsKKwkJaW5pdF9hbGxfcmVmc19jYigmY2IsIHJldnMsICpmbGFncyk7CisJCWZvcl9lYWNoX2dsb2JfcmVmX2luKGhhbmRsZV9vbmVfcmVmLCBvcHRhcmcsICJyZWZzL3JlbW90ZXMvIiwgJmNiKTsKKwkJY2xlYXJfcmVmX2V4Y2x1c2lvbigmcmV2cy0+cmVmX2V4Y2x1ZGVzKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yZWZsb2ciKSkgeworCQlhZGRfcmVmbG9nc190b19wZW5kaW5nKHJldnMsICpmbGFncyk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0taW5kZXhlZC1vYmplY3RzIikpIHsKKwkJYWRkX2luZGV4X29iamVjdHNfdG9fcGVuZGluZyhyZXZzLCAqZmxhZ3MpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWFsdGVybmF0ZS1yZWZzIikpIHsKKwkJYWRkX2FsdGVybmF0ZV9yZWZzX3RvX3BlbmRpbmcocmV2cywgKmZsYWdzKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1ub3QiKSkgeworCQkqZmxhZ3MgXj0gVU5JTlRFUkVTVElORyB8IEJPVFRPTTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby13YWxrIikpIHsKKwkJcmV2cy0+bm9fd2FsayA9IFJFVklTSU9OX1dBTEtfTk9fV0FMS19TT1JURUQ7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLW5vLXdhbGs9IiwgJm9wdGFyZykpIHsKKwkJLyoKKwkJICogRGV0YWNoZWQgZm9ybSAoIi0tbm8td2FsayBYIiBhcyBvcHBvc2VkIHRvICItLW5vLXdhbGs9WCIpCisJCSAqIG5vdCBhbGxvd2VkLCBzaW5jZSB0aGUgYXJndW1lbnQgaXMgb3B0aW9uYWwuCisJCSAqLworCQlpZiAoIXN0cmNtcChvcHRhcmcsICJzb3J0ZWQiKSkKKwkJCXJldnMtPm5vX3dhbGsgPSBSRVZJU0lPTl9XQUxLX05PX1dBTEtfU09SVEVEOworCQllbHNlIGlmICghc3RyY21wKG9wdGFyZywgInVuc29ydGVkIikpCisJCQlyZXZzLT5ub193YWxrID0gUkVWSVNJT05fV0FMS19OT19XQUxLX1VOU09SVEVEOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3IoImludmFsaWQgYXJndW1lbnQgdG8gLS1uby13YWxrIik7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZG8td2FsayIpKSB7CisJCXJldnMtPm5vX3dhbGsgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXNpbmdsZS13b3JrdHJlZSIpKSB7CisJCXJldnMtPnNpbmdsZV93b3JrdHJlZSA9IDE7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIE5PUkVUVVJOIGRpYWdub3NlX21pc3NpbmdfZGVmYXVsdChjb25zdCBjaGFyICpkZWYpCit7CisJaW50IGZsYWdzOworCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisKKwlyZWZuYW1lID0gcmVzb2x2ZV9yZWZfdW5zYWZlKGRlZiwgMCwgTlVMTCwgJmZsYWdzKTsKKwlpZiAoIXJlZm5hbWUgfHwgIShmbGFncyAmIFJFRl9JU1NZTVJFRikgfHwgKGZsYWdzICYgUkVGX0lTQlJPS0VOKSkKKwkJZGllKF8oInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iKSk7CisKKwlza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy9oZWFkcy8iLCAmcmVmbmFtZSk7CisJZGllKF8oInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIpLAorCSAgICByZWZuYW1lKTsKK30KKworLyoKKyAqIFBhcnNlIHJldmlzaW9uIGluZm9ybWF0aW9uLCBmaWxsaW5nIGluIHRoZSAicmV2X2luZm8iIHN0cnVjdHVyZSwKKyAqIGFuZCByZW1vdmluZyB0aGUgdXNlZCBhcmd1bWVudHMgZnJvbSB0aGUgYXJndW1lbnQgbGlzdC4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGxlZnQgdGhhdCB3ZXJlbid0IHJlY29nbml6ZWQKKyAqICh3aGljaCBhcmUgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgYXJndW1lbnQgbGlzdCkKKyAqLworaW50IHNldHVwX3JldmlzaW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCAqb3B0KQoreworCWludCBpLCBmbGFncywgbGVmdCwgc2Vlbl9kYXNoZGFzaCwgZ290X3Jldl9hcmcgPSAwLCByZXZhcmdfb3B0OworCXN0cnVjdCBhcmd2X2FycmF5IHBydW5lX2RhdGEgPSBBUkdWX0FSUkFZX0lOSVQ7CisJY29uc3QgY2hhciAqc3VibW9kdWxlID0gTlVMTDsKKwlpbnQgc2Vlbl9lbmRfb2Zfb3B0aW9ucyA9IDA7CisKKwlpZiAob3B0KQorCQlzdWJtb2R1bGUgPSBvcHQtPnN1Ym1vZHVsZTsKKworCS8qIEZpcnN0LCBzZWFyY2ggZm9yICItLSIgKi8KKwlpZiAob3B0ICYmIG9wdC0+YXNzdW1lX2Rhc2hkYXNoKSB7CisJCXNlZW5fZGFzaGRhc2ggPSAxOworCX0gZWxzZSB7CisJCXNlZW5fZGFzaGRhc2ggPSAwOworCQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQkJaWYgKHN0cmNtcChhcmcsICItLSIpKQorCQkJCWNvbnRpbnVlOworCQkJYXJndltpXSA9IE5VTEw7CisJCQlhcmdjID0gaTsKKwkJCWlmIChhcmd2W2kgKyAxXSkKKwkJCQlhcmd2X2FycmF5X3B1c2h2KCZwcnVuZV9kYXRhLCBhcmd2ICsgaSArIDEpOworCQkJc2Vlbl9kYXNoZGFzaCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFNlY29uZCwgZGVhbCB3aXRoIGFyZ3VtZW50cyBhbmQgb3B0aW9ucyAqLworCWZsYWdzID0gMDsKKwlyZXZhcmdfb3B0ID0gb3B0ID8gb3B0LT5yZXZhcmdfb3B0IDogMDsKKwlpZiAoc2Vlbl9kYXNoZGFzaCkKKwkJcmV2YXJnX29wdCB8PSBSRVZBUkdfQ0FOTk9UX0JFX0ZJTEVOQU1FOworCWZvciAobGVmdCA9IGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWlmICghc2Vlbl9lbmRfb2Zfb3B0aW9ucyAmJiAqYXJnID09ICctJykgeworCQkJaW50IG9wdHM7CisKKwkJCW9wdHMgPSBoYW5kbGVfcmV2aXNpb25fcHNldWRvX29wdChzdWJtb2R1bGUsCisJCQkJCQlyZXZzLCBhcmdjIC0gaSwgYXJndiArIGksCisJCQkJCQkmZmxhZ3MpOworCQkJaWYgKG9wdHMgPiAwKSB7CisJCQkJaSArPSBvcHRzIC0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdGRpbiIpKSB7CisJCQkJaWYgKHJldnMtPmRpc2FibGVfc3RkaW4pIHsKKwkJCQkJYXJndltsZWZ0KytdID0gYXJnOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKHJldnMtPnJlYWRfZnJvbV9zdGRpbisrKQorCQkJCQlkaWUoIi0tc3RkaW4gZ2l2ZW4gdHdpY2U/Iik7CisJCQkJcmVhZF9yZXZpc2lvbnNfZnJvbV9zdGRpbihyZXZzLCAmcHJ1bmVfZGF0YSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmICghc3RyY21wKGFyZywgIi0tZW5kLW9mLW9wdGlvbnMiKSkgeworCQkJCXNlZW5fZW5kX29mX29wdGlvbnMgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlvcHRzID0gaGFuZGxlX3JldmlzaW9uX29wdChyZXZzLCBhcmdjIC0gaSwgYXJndiArIGksCisJCQkJCQkgICAmbGVmdCwgYXJndiwgb3B0KTsKKwkJCWlmIChvcHRzID4gMCkgeworCQkJCWkgKz0gb3B0cyAtIDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAob3B0cyA8IDApCisJCQkJZXhpdCgxMjgpOworCQkJY29udGludWU7CisJCX0KKworCisJCWlmIChoYW5kbGVfcmV2aXNpb25fYXJnKGFyZywgcmV2cywgZmxhZ3MsIHJldmFyZ19vcHQpKSB7CisJCQlpbnQgajsKKwkJCWlmIChzZWVuX2Rhc2hkYXNoIHx8ICphcmcgPT0gJ14nKQorCQkJCWRpZSgiYmFkIHJldmlzaW9uICclcyciLCBhcmcpOworCisJCQkvKiBJZiB3ZSBkaWRuJ3QgaGF2ZSBhICItLSI6CisJCQkgKiAoMSkgYWxsIGZpbGVuYW1lcyBtdXN0IGV4aXN0OworCQkJICogKDIpIGFsbCByZXYtYXJncyBtdXN0IG5vdCBiZSBpbnRlcnByZXRhYmxlCisJCQkgKiAgICAgYXMgYSB2YWxpZCBmaWxlbmFtZS4KKwkJCSAqIGJ1dCB0aGUgbGF0dGVyIHdlIGhhdmUgY2hlY2tlZCBpbiB0aGUgbWFpbiBsb29wLgorCQkJICovCisJCQlmb3IgKGogPSBpOyBqIDwgYXJnYzsgaisrKQorCQkJCXZlcmlmeV9maWxlbmFtZShyZXZzLT5wcmVmaXgsIGFyZ3Zbal0sIGogPT0gaSk7CisKKwkJCWFyZ3ZfYXJyYXlfcHVzaHYoJnBydW5lX2RhdGEsIGFyZ3YgKyBpKTsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UKKwkJCWdvdF9yZXZfYXJnID0gMTsKKwl9CisKKwlpZiAocHJ1bmVfZGF0YS5hcmdjKSB7CisJCS8qCisJCSAqIElmIHdlIG5lZWQgdG8gaW50cm9kdWNlIHRoZSBtYWdpYyAiYSBsb25lICc6JyBtZWFucyBubworCQkgKiBwYXRoc3BlYyB3aGF0c29ldmVyIiwgaGVyZSBpcyB0aGUgcGxhY2UgdG8gZG8gc28uCisJCSAqCisJCSAqIGlmIChwcnVuZV9kYXRhLm5yID09IDEgJiYgIXN0cmNtcChwcnVuZV9kYXRhWzBdLCAiOiIpKSB7CisJCSAqCXBydW5lX2RhdGEubnIgPSAwOworCQkgKglwcnVuZV9kYXRhLmFsbG9jID0gMDsKKwkJICoJZnJlZShwcnVuZV9kYXRhLnBhdGgpOworCQkgKglwcnVuZV9kYXRhLnBhdGggPSBOVUxMOworCQkgKiB9IGVsc2UgeworCQkgKgl0ZXJtaW5hdGUgcHJ1bmVfZGF0YS5hbGxvYyB3aXRoIE5VTEwgYW5kCisJCSAqCWNhbGwgaW5pdF9wYXRoc3BlYygpIHRvIHNldCByZXZzLT5wcnVuZV9kYXRhIGhlcmUuCisJCSAqIH0KKwkJICovCisJCXBhcnNlX3BhdGhzcGVjKCZyZXZzLT5wcnVuZV9kYXRhLCAwLCAwLAorCQkJICAgICAgIHJldnMtPnByZWZpeCwgcHJ1bmVfZGF0YS5hcmd2KTsKKwl9CisJYXJndl9hcnJheV9jbGVhcigmcHJ1bmVfZGF0YSk7CisKKwlpZiAocmV2cy0+ZGVmID09IE5VTEwpCisJCXJldnMtPmRlZiA9IG9wdCA/IG9wdC0+ZGVmIDogTlVMTDsKKwlpZiAob3B0ICYmIG9wdC0+dHdlYWspCisJCW9wdC0+dHdlYWsocmV2cywgb3B0KTsKKwlpZiAocmV2cy0+c2hvd19tZXJnZSkKKwkJcHJlcGFyZV9zaG93X21lcmdlKHJldnMpOworCWlmIChyZXZzLT5kZWYgJiYgIXJldnMtPnBlbmRpbmcubnIgJiYgIXJldnMtPnJldl9pbnB1dF9naXZlbiAmJiAhZ290X3Jldl9hcmcpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKwkJc3RydWN0IG9iamVjdF9jb250ZXh0IG9jOworCQlpZiAoZ2V0X29pZF93aXRoX2NvbnRleHQocmV2cy0+cmVwbywgcmV2cy0+ZGVmLCAwLCAmb2lkLCAmb2MpKQorCQkJZGlhZ25vc2VfbWlzc2luZ19kZWZhdWx0KHJldnMtPmRlZik7CisJCW9iamVjdCA9IGdldF9yZWZlcmVuY2UocmV2cywgcmV2cy0+ZGVmLCAmb2lkLCAwKTsKKwkJYWRkX3BlbmRpbmdfb2JqZWN0X3dpdGhfbW9kZShyZXZzLCBvYmplY3QsIHJldnMtPmRlZiwgb2MubW9kZSk7CisJfQorCisJLyogRGlkIHRoZSB1c2VyIGFzayBmb3IgYW55IGRpZmYgb3V0cHV0PyBSdW4gdGhlIGRpZmYhICovCisJaWYgKHJldnMtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIH5ESUZGX0ZPUk1BVF9OT19PVVRQVVQpCisJCXJldnMtPmRpZmYgPSAxOworCisJLyogUGlja2F4ZSwgZGlmZi1maWx0ZXIgYW5kIHJlbmFtZSBmb2xsb3dpbmcgbmVlZCBkaWZmcyAqLworCWlmICgocmV2cy0+ZGlmZm9wdC5waWNrYXhlX29wdHMgJiBESUZGX1BJQ0tBWEVfS0lORFNfTUFTSykgfHwKKwkgICAgcmV2cy0+ZGlmZm9wdC5maWx0ZXIgfHwKKwkgICAgcmV2cy0+ZGlmZm9wdC5mbGFncy5mb2xsb3dfcmVuYW1lcykKKwkJcmV2cy0+ZGlmZiA9IDE7CisKKwlpZiAocmV2cy0+ZGlmZm9wdC5vYmpmaW5kKQorCQlyZXZzLT5zaW1wbGlmeV9oaXN0b3J5ID0gMDsKKworCWlmIChyZXZzLT50b3BvX29yZGVyICYmICFnZW5lcmF0aW9uX251bWJlcnNfZW5hYmxlZCh0aGVfcmVwb3NpdG9yeSkpCisJCXJldnMtPmxpbWl0ZWQgPSAxOworCisJaWYgKHJldnMtPnBydW5lX2RhdGEubnIpIHsKKwkJY29weV9wYXRoc3BlYygmcmV2cy0+cHJ1bmluZy5wYXRoc3BlYywgJnJldnMtPnBydW5lX2RhdGEpOworCQkvKiBDYW4ndCBwcnVuZSBjb21taXRzIHdpdGggcmVuYW1lIGZvbGxvd2luZzogdGhlIHBhdGhzIGNoYW5nZS4uICovCisJCWlmICghcmV2cy0+ZGlmZm9wdC5mbGFncy5mb2xsb3dfcmVuYW1lcykKKwkJCXJldnMtPnBydW5lID0gMTsKKwkJaWYgKCFyZXZzLT5mdWxsX2RpZmYpCisJCQljb3B5X3BhdGhzcGVjKCZyZXZzLT5kaWZmb3B0LnBhdGhzcGVjLAorCQkJCSAgICAgICZyZXZzLT5wcnVuZV9kYXRhKTsKKwl9CisJaWYgKHJldnMtPmNvbWJpbmVfbWVyZ2VzKQorCQlyZXZzLT5pZ25vcmVfbWVyZ2VzID0gMDsKKwlpZiAocmV2cy0+Y29tYmluZWRfYWxsX3BhdGhzICYmICFyZXZzLT5jb21iaW5lX21lcmdlcykKKwkJZGllKCItLWNvbWJpbmVkLWFsbC1wYXRocyBtYWtlcyBubyBzZW5zZSB3aXRob3V0IC1jIG9yIC0tY2MiKTsKKworCXJldnMtPmRpZmZvcHQuYWJicmV2ID0gcmV2cy0+YWJicmV2OworCisJaWYgKHJldnMtPmxpbmVfbGV2ZWxfdHJhdmVyc2UpIHsKKwkJcmV2cy0+bGltaXRlZCA9IDE7CisJCXJldnMtPnRvcG9fb3JkZXIgPSAxOworCX0KKworCWRpZmZfc2V0dXBfZG9uZSgmcmV2cy0+ZGlmZm9wdCk7CisKKwlncmVwX2NvbW1pdF9wYXR0ZXJuX3R5cGUoR1JFUF9QQVRURVJOX1RZUEVfVU5TUEVDSUZJRUQsCisJCQkJICZyZXZzLT5ncmVwX2ZpbHRlcik7CisJaWYgKCFpc19lbmNvZGluZ191dGY4KGdldF9sb2dfb3V0cHV0X2VuY29kaW5nKCkpKQorCQlyZXZzLT5ncmVwX2ZpbHRlci5pZ25vcmVfbG9jYWxlID0gMTsKKwljb21waWxlX2dyZXBfcGF0dGVybnMoJnJldnMtPmdyZXBfZmlsdGVyKTsKKworCWlmIChyZXZzLT5yZXZlcnNlICYmIHJldnMtPnJlZmxvZ19pbmZvKQorCQlkaWUoImNhbm5vdCBjb21iaW5lIC0tcmV2ZXJzZSB3aXRoIC0td2Fsay1yZWZsb2dzIik7CisJaWYgKHJldnMtPnJlZmxvZ19pbmZvICYmIHJldnMtPmxpbWl0ZWQpCisJCWRpZSgiY2Fubm90IGNvbWJpbmUgLS13YWxrLXJlZmxvZ3Mgd2l0aCBoaXN0b3J5LWxpbWl0aW5nIG9wdGlvbnMiKTsKKwlpZiAocmV2cy0+cmV3cml0ZV9wYXJlbnRzICYmIHJldnMtPmNoaWxkcmVuLm5hbWUpCisJCWRpZSgiY2Fubm90IGNvbWJpbmUgLS1wYXJlbnRzIGFuZCAtLWNoaWxkcmVuIik7CisKKwkvKgorCSAqIExpbWl0YXRpb25zIG9uIHRoZSBncmFwaCBmdW5jdGlvbmFsaXR5CisJICovCisJaWYgKHJldnMtPnJldmVyc2UgJiYgcmV2cy0+Z3JhcGgpCisJCWRpZSgiY2Fubm90IGNvbWJpbmUgLS1yZXZlcnNlIHdpdGggLS1ncmFwaCIpOworCisJaWYgKHJldnMtPnJlZmxvZ19pbmZvICYmIHJldnMtPmdyYXBoKQorCQlkaWUoImNhbm5vdCBjb21iaW5lIC0td2Fsay1yZWZsb2dzIHdpdGggLS1ncmFwaCIpOworCWlmIChyZXZzLT5ub193YWxrICYmIHJldnMtPmdyYXBoKQorCQlkaWUoImNhbm5vdCBjb21iaW5lIC0tbm8td2FsayB3aXRoIC0tZ3JhcGgiKTsKKwlpZiAoIXJldnMtPnJlZmxvZ19pbmZvICYmIHJldnMtPmdyZXBfZmlsdGVyLnVzZV9yZWZsb2dfZmlsdGVyKQorCQlkaWUoImNhbm5vdCB1c2UgLS1ncmVwLXJlZmxvZyB3aXRob3V0IC0td2Fsay1yZWZsb2dzIik7CisKKwlpZiAocmV2cy0+Zmlyc3RfcGFyZW50X29ubHkgJiYgcmV2cy0+YmlzZWN0KQorCQlkaWUoXygiLS1maXJzdC1wYXJlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1iaXNlY3QiKSk7CisKKwlpZiAocmV2cy0+bGluZV9sZXZlbF90cmF2ZXJzZSAmJgorCSAgICAocmV2cy0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYgfihESUZGX0ZPUk1BVF9QQVRDSCB8IERJRkZfRk9STUFUX05PX09VVFBVVCkpKQorCQlkaWUoXygiLUwgZG9lcyBub3QgeWV0IHN1cHBvcnQgZGlmZiBmb3JtYXRzIGJlc2lkZXMgLXAgYW5kIC1zIikpOworCisJaWYgKHJldnMtPmV4cGFuZF90YWJzX2luX2xvZyA8IDApCisJCXJldnMtPmV4cGFuZF90YWJzX2luX2xvZyA9IHJldnMtPmV4cGFuZF90YWJzX2luX2xvZ19kZWZhdWx0OworCisJcmV0dXJuIGxlZnQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9jaGlsZChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKnBhcmVudCwgc3RydWN0IGNvbW1pdCAqY2hpbGQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsID0geGNhbGxvYygxLCBzaXplb2YoKmwpKTsKKworCWwtPml0ZW0gPSBjaGlsZDsKKwlsLT5uZXh0ID0gYWRkX2RlY29yYXRpb24oJnJldnMtPmNoaWxkcmVuLCAmcGFyZW50LT5vYmplY3QsIGwpOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9kdXBsaWNhdGVfcGFyZW50cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgdHJlZXNhbWVfc3RhdGUgKnRzID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPnRyZWVzYW1lLCAmY29tbWl0LT5vYmplY3QpOworCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwLCAqcDsKKwlpbnQgc3Vydml2aW5nX3BhcmVudHM7CisKKwkvKiBFeGFtaW5lIGV4aXN0aW5nIHBhcmVudHMgd2hpbGUgbWFya2luZyBvbmVzIHdlIGhhdmUgc2Vlbi4uLiAqLworCXBwID0gJmNvbW1pdC0+cGFyZW50czsKKwlzdXJ2aXZpbmdfcGFyZW50cyA9IDA7CisJd2hpbGUgKChwID0gKnBwKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHAtPml0ZW07CisJCWlmIChwYXJlbnQtPm9iamVjdC5mbGFncyAmIFRNUF9NQVJLKSB7CisJCQkqcHAgPSBwLT5uZXh0OworCQkJaWYgKHRzKQorCQkJCWNvbXBhY3RfdHJlZXNhbWUocmV2cywgY29tbWl0LCBzdXJ2aXZpbmdfcGFyZW50cyk7CisJCQljb250aW51ZTsKKwkJfQorCQlwYXJlbnQtPm9iamVjdC5mbGFncyB8PSBUTVBfTUFSSzsKKwkJc3Vydml2aW5nX3BhcmVudHMrKzsKKwkJcHAgPSAmcC0+bmV4dDsKKwl9CisJLyogY2xlYXIgdGhlIHRlbXBvcmFyeSBtYXJrICovCisJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJj0gflRNUF9NQVJLOworCX0KKwkvKiBubyB1cGRhdGVfdHJlZXNhbWUoKSAtIHJlbW92aW5nIGR1cGxpY2F0ZXMgY2FuJ3QgYWZmZWN0IFRSRUVTQU1FICovCisJcmV0dXJuIHN1cnZpdmluZ19wYXJlbnRzOworfQorCitzdHJ1Y3QgbWVyZ2Vfc2ltcGxpZnlfc3RhdGUgeworCXN0cnVjdCBjb21taXQgKnNpbXBsaWZpZWQ7Cit9OworCitzdGF0aWMgc3RydWN0IG1lcmdlX3NpbXBsaWZ5X3N0YXRlICpsb2NhdGVfc2ltcGxpZnlfc3RhdGUoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IG1lcmdlX3NpbXBsaWZ5X3N0YXRlICpzdDsKKworCXN0ID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPm1lcmdlX3NpbXBsaWZpY2F0aW9uLCAmY29tbWl0LT5vYmplY3QpOworCWlmICghc3QpIHsKKwkJc3QgPSB4Y2FsbG9jKDEsIHNpemVvZigqc3QpKTsKKwkJYWRkX2RlY29yYXRpb24oJnJldnMtPm1lcmdlX3NpbXBsaWZpY2F0aW9uLCAmY29tbWl0LT5vYmplY3QsIHN0KTsKKwl9CisJcmV0dXJuIHN0OworfQorCitzdGF0aWMgaW50IG1hcmtfcmVkdW5kYW50X3BhcmVudHMoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqaCA9IHJlZHVjZV9oZWFkcyhjb21taXQtPnBhcmVudHMpOworCWludCBpID0gMCwgbWFya2VkID0gMDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBvLCAqcG47CisKKwkvKiBXYW50IHRoZXNlIGZvciBzYW5pdHktY2hlY2tpbmcgb25seSAqLworCWludCBvcmlnX2NudCA9IGNvbW1pdF9saXN0X2NvdW50KGNvbW1pdC0+cGFyZW50cyk7CisJaW50IGNudCA9IGNvbW1pdF9saXN0X2NvdW50KGgpOworCisJLyoKKwkgKiBOb3QgcmVhZHkgdG8gcmVtb3ZlIGl0ZW1zIHlldCwganVzdCBtYXJrIHRoZW0gZm9yIG5vdywgYmFzZWQKKwkgKiBvbiB0aGUgb3V0cHV0IG9mIHJlZHVjZV9oZWFkcygpLiByZWR1Y2VfaGVhZHMgb3V0cHV0cyB0aGUgcmVkdWNlZAorCSAqIHNldCBpbiBpdHMgb3JpZ2luYWwgb3JkZXIsIHNvIHRoaXMgaXNuJ3QgdG9vIGhhcmQuCisJICovCisJcG8gPSBjb21taXQtPnBhcmVudHM7CisJcG4gPSBoOworCXdoaWxlIChwbykgeworCQlpZiAocG4gJiYgcG8tPml0ZW0gPT0gcG4tPml0ZW0pIHsKKwkJCXBuID0gcG4tPm5leHQ7CisJCQlpKys7CisJCX0gZWxzZSB7CisJCQlwby0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFRNUF9NQVJLOworCQkJbWFya2VkKys7CisJCX0KKwkJcG89cG8tPm5leHQ7CisJfQorCisJaWYgKGkgIT0gY250IHx8IGNudCttYXJrZWQgIT0gb3JpZ19jbnQpCisJCWRpZSgibWFya19yZWR1bmRhbnRfcGFyZW50cyAlZCAlZCAlZCAlZCIsIG9yaWdfY250LCBjbnQsIGksIG1hcmtlZCk7CisKKwlmcmVlX2NvbW1pdF9saXN0KGgpOworCisJcmV0dXJuIG1hcmtlZDsKK30KKworc3RhdGljIGludCBtYXJrX3RyZWVzYW1lX3Jvb3RfcGFyZW50cyhzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCWludCBtYXJrZWQgPSAwOworCisJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwLT5pdGVtOworCQlpZiAoIXBhcmVudC0+cGFyZW50cyAmJiAocGFyZW50LT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkpIHsKKwkJCXBhcmVudC0+b2JqZWN0LmZsYWdzIHw9IFRNUF9NQVJLOworCQkJbWFya2VkKys7CisJCX0KKwl9CisKKwlyZXR1cm4gbWFya2VkOworfQorCisvKgorICogQXdrd2FyZCBuYW1pbmcgLSB0aGlzIG1lYW5zIG9uZSBwYXJlbnQgd2UgYXJlIFRSRUVTQU1FIHRvLgorICogY2YgbWFya190cmVlc2FtZV9yb290X3BhcmVudHM6IHJvb3QgcGFyZW50cyB0aGF0IGFyZSBUUkVFU0FNRSAodG8gYW4KKyAqIGVtcHR5IHRyZWUpLiBCZXR0ZXIgbmFtZSBzdWdnZXN0aW9ucz8KKyAqLworc3RhdGljIGludCBsZWF2ZV9vbmVfdHJlZXNhbWVfdG9fcGFyZW50KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCB0cmVlc2FtZV9zdGF0ZSAqdHMgPSBsb29rdXBfZGVjb3JhdGlvbigmcmV2cy0+dHJlZXNhbWUsICZjb21taXQtPm9iamVjdCk7CisJc3RydWN0IGNvbW1pdCAqdW5tYXJrZWQgPSBOVUxMLCAqbWFya2VkID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJdW5zaWduZWQgbjsKKworCWZvciAocCA9IGNvbW1pdC0+cGFyZW50cywgbiA9IDA7IHA7IHAgPSBwLT5uZXh0LCBuKyspIHsKKwkJaWYgKHRzLT50cmVlc2FtZVtuXSkgeworCQkJaWYgKHAtPml0ZW0tPm9iamVjdC5mbGFncyAmIFRNUF9NQVJLKSB7CisJCQkJaWYgKCFtYXJrZWQpCisJCQkJCW1hcmtlZCA9IHAtPml0ZW07CisJCQl9IGVsc2UgeworCQkJCWlmICghdW5tYXJrZWQpIHsKKwkJCQkJdW5tYXJrZWQgPSBwLT5pdGVtOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHdlIGFyZSBUUkVFU0FNRSB0byBhIG1hcmtlZC1mb3ItZGVsZXRpb24gcGFyZW50LCBidXQgbm90IHRvIGFueQorCSAqIHVubWFya2VkIHBhcmVudHMsIHVubWFyayB0aGUgZmlyc3QgVFJFRVNBTUUgcGFyZW50LiBUaGlzIGlzIHRoZQorCSAqIHBhcmVudCB0aGF0IHRoZSBkZWZhdWx0IHNpbXBsaWZ5X2hpc3Rvcnk9PTEgc2NhbiB3b3VsZCBoYXZlIGZvbGxvd2VkLAorCSAqIGFuZCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gb21pdCB0aGF0IHBhdGggd2hlbiBhc2tpbmcgZm9yIGEKKwkgKiBzaW1wbGlmaWVkIGZ1bGwgaGlzdG9yeS4gUmV0YWluaW5nIGl0IGltcHJvdmVzIHRoZSBjaGFuY2VzIG9mCisJICogdW5kZXJzdGFuZGluZyBvZGQgbWlzc2VkIG1lcmdlcyB0aGF0IHRvb2sgYW4gb2xkIHZlcnNpb24gb2YgYSBmaWxlLgorCSAqCisJICogRXhhbXBsZToKKwkgKgorCSAqICAgSS0tLS0tLS0tKlggICAgICAgQSBtb2RpZmllZCB0aGUgZmlsZSwgYnV0IG1haW5saW5lIG1lcmdlIFggdXNlZAorCSAqICAgIFwgICAgICAgLyAgICAgICAgIi1zIG91cnMiLCBzbyB0b29rIHRoZSB2ZXJzaW9uIGZyb20gSS4gWCBpcworCSAqICAgICBgLSpBLS0nICAgICAgICAgVFJFRVNBTUUgdG8gSSBhbmQgIVRSRUVTQU1FIHRvIEEuCisJICoKKwkgKiBEZWZhdWx0IGxvZyBmcm9tIFggd291bGQgcHJvZHVjZSAiSSIuIFdpdGhvdXQgdGhpcyBjaGVjaywKKwkgKiAtLWZ1bGwtaGlzdG9yeSAtLXNpbXBsaWZ5LW1lcmdlcyB3b3VsZCBwcm9kdWNlICJJLUEtWCIsIHNob3dpbmcKKwkgKiB0aGUgbWVyZ2UgY29tbWl0IFggYW5kIHRoYXQgaXQgY2hhbmdlZCBBLCBidXQgbm90IG1ha2luZyBjbGVhciB0aGF0CisJICogaXQgaGFkIGp1c3QgdGFrZW4gdGhlIEkgdmVyc2lvbi4gV2l0aCB0aGlzIGNoZWNrLCB0aGUgdG9wb2xvZ3kgYWJvdmUKKwkgKiBpcyByZXRhaW5lZC4KKwkgKgorCSAqIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBzaW1wbGlmaWNhdGlvbiBjaG9vc2VzIGEgZGlmZmVyZW50CisJICogVFJFRVNBTUUgcGFyZW50IGZyb20gdGhlIGRlZmF1bHQsIGluIHdoaWNoIGNhc2UgdGhpcyB0ZXN0IGRvZXNuJ3QKKwkgKiBhY3RpdmF0ZSwgYW5kIHdlIF9kb18gZHJvcCB0aGUgZGVmYXVsdCBwYXJlbnQuIEV4YW1wbGU6CisJICoKKwkgKiAgIEktLS0tLS1YICAgICAgICAgQSBtb2RpZmllZCB0aGUgZmlsZSwgYnV0IGl0IHdhcyByZXZlcnRlZCBpbiBCLAorCSAqICAgIFwgICAgLyAgICAgICAgICBtZWFuaW5nIG1haW5saW5lIG1lcmdlIFggaXMgVFJFRVNBTUUgdG8gYm90aAorCSAqICAgICpBLSpCICAgICAgICAgICBwYXJlbnRzLgorCSAqCisJICogRGVmYXVsdCBsb2cgd291bGQgcHJvZHVjZSAiSSIgYnkgZm9sbG93aW5nIHRoZSBmaXJzdCBwYXJlbnQ7CisJICogLS1mdWxsLWhpc3RvcnkgLS1zaW1wbGlmeS1tZXJnZXMgd2lsbCBwcm9kdWNlICJJLUEtQiIuIEJ1dCB0aGlzIGlzIGEKKwkgKiByZWFzb25hYmxlIHJlc3VsdCAtIGl0IHByZXNlbnRzIGEgbG9naWNhbCBmdWxsIGhpc3RvcnkgbGVhZGluZyBmcm9tCisJICogSSB0byBYLCBhbmQgWCBpcyBub3QgYW4gaW1wb3J0YW50IG1lcmdlLgorCSAqLworCWlmICghdW5tYXJrZWQgJiYgbWFya2VkKSB7CisJCW1hcmtlZC0+b2JqZWN0LmZsYWdzICY9IH5UTVBfTUFSSzsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX21hcmtlZF9wYXJlbnRzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwLCAqcDsKKwlpbnQgbnRoX3BhcmVudCwgcmVtb3ZlZCA9IDA7CisKKwlwcCA9ICZjb21taXQtPnBhcmVudHM7CisJbnRoX3BhcmVudCA9IDA7CisJd2hpbGUgKChwID0gKnBwKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHAtPml0ZW07CisJCWlmIChwYXJlbnQtPm9iamVjdC5mbGFncyAmIFRNUF9NQVJLKSB7CisJCQlwYXJlbnQtPm9iamVjdC5mbGFncyAmPSB+VE1QX01BUks7CisJCQkqcHAgPSBwLT5uZXh0OworCQkJZnJlZShwKTsKKwkJCXJlbW92ZWQrKzsKKwkJCWNvbXBhY3RfdHJlZXNhbWUocmV2cywgY29tbWl0LCBudGhfcGFyZW50KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXBwID0gJnAtPm5leHQ7CisJCW50aF9wYXJlbnQrKzsKKwl9CisKKwkvKiBSZW1vdmluZyBwYXJlbnRzIGNhbiBvbmx5IGluY3JlYXNlIFRSRUVTQU1FbmVzcyAqLworCWlmIChyZW1vdmVkICYmICEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkpCisJCXVwZGF0ZV90cmVlc2FtZShyZXZzLCBjb21taXQpOworCisJcmV0dXJuIG50aF9wYXJlbnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKipzaW1wbGlmeV9vbmUoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRfbGlzdCAqKnRhaWwpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCXN0cnVjdCBjb21taXQgKnBhcmVudDsKKwlzdHJ1Y3QgbWVyZ2Vfc2ltcGxpZnlfc3RhdGUgKnN0LCAqcHN0OworCWludCBjbnQ7CisKKwlzdCA9IGxvY2F0ZV9zaW1wbGlmeV9zdGF0ZShyZXZzLCBjb21taXQpOworCisJLyoKKwkgKiBIYXZlIHdlIGhhbmRsZWQgdGhpcyBvbmU/CisJICovCisJaWYgKHN0LT5zaW1wbGlmaWVkKQorCQlyZXR1cm4gdGFpbDsKKworCS8qCisJICogQW4gVU5JTlRFUkVTVElORyBjb21taXQgc2ltcGxpZmllcyB0byBpdHNlbGYsIHNvIGRvZXMgYQorCSAqIHJvb3QgY29tbWl0LiAgV2UgZG8gbm90IHJld3JpdGUgcGFyZW50cyBvZiBzdWNoIGNvbW1pdAorCSAqIGFueXdheS4KKwkgKi8KKwlpZiAoKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykgfHwgIWNvbW1pdC0+cGFyZW50cykgeworCQlzdC0+c2ltcGxpZmllZCA9IGNvbW1pdDsKKwkJcmV0dXJuIHRhaWw7CisJfQorCisJLyoKKwkgKiBEbyB3ZSBrbm93IHdoYXQgY29tbWl0IGFsbCBvZiBvdXIgcGFyZW50cyB0aGF0IG1hdHRlcgorCSAqIHNob3VsZCBiZSByZXdyaXR0ZW4gdG8/ICBPdGhlcndpc2Ugd2UgYXJlIG5vdCByZWFkeSB0bworCSAqIHJld3JpdGUgdGhpcyBvbmUgeWV0LgorCSAqLworCWZvciAoY250ID0gMCwgcCA9IGNvbW1pdC0+cGFyZW50czsgcDsgcCA9IHAtPm5leHQpIHsKKwkJcHN0ID0gbG9jYXRlX3NpbXBsaWZ5X3N0YXRlKHJldnMsIHAtPml0ZW0pOworCQlpZiAoIXBzdC0+c2ltcGxpZmllZCkgeworCQkJdGFpbCA9ICZjb21taXRfbGlzdF9pbnNlcnQocC0+aXRlbSwgdGFpbCktPm5leHQ7CisJCQljbnQrKzsKKwkJfQorCQlpZiAocmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpCisJCQlicmVhazsKKwl9CisJaWYgKGNudCkgeworCQl0YWlsID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHRhaWwpLT5uZXh0OworCQlyZXR1cm4gdGFpbDsKKwl9CisKKwkvKgorCSAqIFJld3JpdGUgb3VyIGxpc3Qgb2YgcGFyZW50cy4gTm90ZSB0aGF0IHRoaXMgY2Fubm90CisJICogYWZmZWN0IG91ciBUUkVFU0FNRSBmbGFncyBpbiBhbnkgd2F5IC0gYSBjb21taXQgaXMKKwkgKiBhbHdheXMgVFJFRVNBTUUgdG8gaXRzIHNpbXBsaWZpY2F0aW9uLgorCSAqLworCWZvciAocCA9IGNvbW1pdC0+cGFyZW50czsgcDsgcCA9IHAtPm5leHQpIHsKKwkJcHN0ID0gbG9jYXRlX3NpbXBsaWZ5X3N0YXRlKHJldnMsIHAtPml0ZW0pOworCQlwLT5pdGVtID0gcHN0LT5zaW1wbGlmaWVkOworCQlpZiAocmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpCisJCQlicmVhazsKKwl9CisKKwlpZiAocmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpCisJCWNudCA9IDE7CisJZWxzZQorCQljbnQgPSByZW1vdmVfZHVwbGljYXRlX3BhcmVudHMocmV2cywgY29tbWl0KTsKKworCS8qCisJICogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBhcmUgYSBtZXJnZSBhbmQgb25lIHNpZGUgYnJhbmNoCisJICogZG9lcyBub3QgaGF2ZSBhbnkgY29tbWl0IHRoYXQgdG91Y2hlcyB0aGUgZ2l2ZW4gcGF0aHM7CisJICogaW4gc3VjaCBhIGNhc2UsIHRoZSBpbW1lZGlhdGUgcGFyZW50IGZyb20gdGhhdCBicmFuY2gKKwkgKiB3aWxsIGJlIHJld3JpdHRlbiB0byBiZSB0aGUgbWVyZ2UgYmFzZS4KKwkgKgorCSAqICAgICAgby0tLS1YCQlYOiB0aGUgY29tbWl0IHdlIGFyZSBsb29raW5nIGF0OworCSAqICAgICAvICAgIC8JCW86IGEgY29tbWl0IHRoYXQgdG91Y2hlcyB0aGUgcGF0aHM7CisJICogLS0tby0tLS0nCisJICoKKwkgKiBGdXJ0aGVyLCBhIG1lcmdlIG9mIGFuIGluZGVwZW5kZW50IGJyYW5jaCB0aGF0IGRvZXNuJ3QKKwkgKiB0b3VjaCB0aGUgcGF0aCB3aWxsIHJlZHVjZSB0byBhIHRyZWVzYW1lIHJvb3QgcGFyZW50OgorCSAqCisJICogIC0tLS1vLS0tLVgJCVg6IHRoZSBjb21taXQgd2UgYXJlIGxvb2tpbmcgYXQ7CisJICogICAgICAgICAgLwkJbzogYSBjb21taXQgdGhhdCB0b3VjaGVzIHRoZSBwYXRoczsKKwkgKiAgICAgICAgIHIJCXI6IGEgcm9vdCBjb21taXQgbm90IHRvdWNoaW5nIHRoZSBwYXRocworCSAqCisJICogRGV0ZWN0IGFuZCBzaW1wbGlmeSBib3RoIGNhc2VzLgorCSAqLworCWlmICgxIDwgY250KSB7CisJCWludCBtYXJrZWQgPSBtYXJrX3JlZHVuZGFudF9wYXJlbnRzKGNvbW1pdCk7CisJCW1hcmtlZCArPSBtYXJrX3RyZWVzYW1lX3Jvb3RfcGFyZW50cyhjb21taXQpOworCQlpZiAobWFya2VkKQorCQkJbWFya2VkIC09IGxlYXZlX29uZV90cmVlc2FtZV90b19wYXJlbnQocmV2cywgY29tbWl0KTsKKwkJaWYgKG1hcmtlZCkKKwkJCWNudCA9IHJlbW92ZV9tYXJrZWRfcGFyZW50cyhyZXZzLCBjb21taXQpOworCX0KKworCS8qCisJICogQSBjb21taXQgc2ltcGxpZmllcyB0byBpdHNlbGYgaWYgaXQgaXMgYSByb290LCBpZiBpdCBpcworCSAqIFVOSU5URVJFU1RJTkcsIGlmIGl0IHRvdWNoZXMgdGhlIGdpdmVuIHBhdGhzLCBvciBpZiBpdCBpcyBhCisJICogbWVyZ2UgYW5kIGl0cyBwYXJlbnRzIGRvbid0IHNpbXBsaWZ5IHRvIG9uZSByZWxldmFudCBjb21taXQKKwkgKiAodGhlIGZpcnN0IHR3byBjYXNlcyBhcmUgYWxyZWFkeSBoYW5kbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YKKwkgKiB0aGlzIGZ1bmN0aW9uKS4KKwkgKgorCSAqIE90aGVyd2lzZSwgaXQgc2ltcGxpZmllcyB0byB3aGF0IGl0cyBzb2xlIHJlbGV2YW50IHBhcmVudAorCSAqIHNpbXBsaWZpZXMgdG8uCisJICovCisJaWYgKCFjbnQgfHwKKwkgICAgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykgfHwKKwkgICAgIShjb21taXQtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSB8fAorCSAgICAocGFyZW50ID0gb25lX3JlbGV2YW50X3BhcmVudChyZXZzLCBjb21taXQtPnBhcmVudHMpKSA9PSBOVUxMIHx8CisJICAgIChyZXZzLT5zaG93X3B1bGxzICYmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFBVTExfTUVSR0UpKSkKKwkJc3QtPnNpbXBsaWZpZWQgPSBjb21taXQ7CisJZWxzZSB7CisJCXBzdCA9IGxvY2F0ZV9zaW1wbGlmeV9zdGF0ZShyZXZzLCBwYXJlbnQpOworCQlzdC0+c2ltcGxpZmllZCA9IHBzdC0+c2ltcGxpZmllZDsKKwl9CisJcmV0dXJuIHRhaWw7Cit9CisKK3N0YXRpYyB2b2lkIHNpbXBsaWZ5X21lcmdlcyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LCAqbmV4dDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnlldF90b19kbywgKip0YWlsOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCWlmICghcmV2cy0+cHJ1bmUpCisJCXJldHVybjsKKworCS8qIGZlZWQgdGhlIGxpc3QgcmV2ZXJzZWQgKi8KKwl5ZXRfdG9fZG8gPSBOVUxMOworCWZvciAobGlzdCA9IHJldnMtPmNvbW1pdHM7IGxpc3Q7IGxpc3QgPSBuZXh0KSB7CisJCWNvbW1pdCA9IGxpc3QtPml0ZW07CisJCW5leHQgPSBsaXN0LT5uZXh0OworCQkvKgorCQkgKiBEbyBub3QgZnJlZShsaXN0KSBoZXJlIHlldDsgdGhlIG9yaWdpbmFsIGxpc3QKKwkJICogaXMgdXNlZCBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uLgorCQkgKi8KKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgJnlldF90b19kbyk7CisJfQorCXdoaWxlICh5ZXRfdG9fZG8pIHsKKwkJbGlzdCA9IHlldF90b19kbzsKKwkJeWV0X3RvX2RvID0gTlVMTDsKKwkJdGFpbCA9ICZ5ZXRfdG9fZG87CisJCXdoaWxlIChsaXN0KSB7CisJCQljb21taXQgPSBwb3BfY29tbWl0KCZsaXN0KTsKKwkJCXRhaWwgPSBzaW1wbGlmeV9vbmUocmV2cywgY29tbWl0LCB0YWlsKTsKKwkJfQorCX0KKworCS8qIGNsZWFuIHVwIHRoZSByZXN1bHQsIHJlbW92aW5nIHRoZSBzaW1wbGlmaWVkIG9uZXMgKi8KKwlsaXN0ID0gcmV2cy0+Y29tbWl0czsKKwlyZXZzLT5jb21taXRzID0gTlVMTDsKKwl0YWlsID0gJnJldnMtPmNvbW1pdHM7CisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IG1lcmdlX3NpbXBsaWZ5X3N0YXRlICpzdDsKKworCQljb21taXQgPSBwb3BfY29tbWl0KCZsaXN0KTsKKwkJc3QgPSBsb2NhdGVfc2ltcGxpZnlfc3RhdGUocmV2cywgY29tbWl0KTsKKwkJaWYgKHN0LT5zaW1wbGlmaWVkID09IGNvbW1pdCkKKwkJCXRhaWwgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgdGFpbCktPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfY2hpbGRyZW4oc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbDsKKwlmb3IgKGwgPSByZXZzLT5jb21taXRzOyBsOyBsID0gbC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsLT5pdGVtOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisKKwkJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkKKwkJCWFkZF9jaGlsZChyZXZzLCBwLT5pdGVtLCBjb21taXQpOworCX0KK30KKwordm9pZCByZXNldF9yZXZpc2lvbl93YWxrKHZvaWQpCit7CisJY2xlYXJfb2JqZWN0X2ZsYWdzKFNFRU4gfCBBRERFRCB8IFNIT1dOIHwgVE9QT19XQUxLX0VYUExPUkVEIHwgVE9QT19XQUxLX0lOREVHUkVFKTsKK30KKworc3RhdGljIGludCBtYXJrX3VuaW50ZXJlc3RpbmcoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgc3RydWN0IHBhY2tlZF9naXQgKnBhY2ssCisJCQkgICAgICB1aW50MzJfdCBwb3MsCisJCQkgICAgICB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnMgPSBjYjsKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHJldnMtPnJlcG8sIG9pZCk7CisJby0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORyB8IFNFRU47CisJcmV0dXJuIDA7Cit9CisKK2RlZmluZV9jb21taXRfc2xhYihpbmRlZ3JlZV9zbGFiLCBpbnQpOworZGVmaW5lX2NvbW1pdF9zbGFiKGF1dGhvcl9kYXRlX3NsYWIsIHRpbWVzdGFtcF90KTsKKworc3RydWN0IHRvcG9fd2Fsa19pbmZvIHsKKwl1aW50MzJfdCBtaW5fZ2VuZXJhdGlvbjsKKwlzdHJ1Y3QgcHJpb19xdWV1ZSBleHBsb3JlX3F1ZXVlOworCXN0cnVjdCBwcmlvX3F1ZXVlIGluZGVncmVlX3F1ZXVlOworCXN0cnVjdCBwcmlvX3F1ZXVlIHRvcG9fcXVldWU7CisJc3RydWN0IGluZGVncmVlX3NsYWIgaW5kZWdyZWU7CisJc3RydWN0IGF1dGhvcl9kYXRlX3NsYWIgYXV0aG9yX2RhdGU7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgdGVzdF9mbGFnX2FuZF9pbnNlcnQoc3RydWN0IHByaW9fcXVldWUgKnEsIHN0cnVjdCBjb21taXQgKmMsIGludCBmbGFnKQoreworCWlmIChjLT5vYmplY3QuZmxhZ3MgJiBmbGFnKQorCQlyZXR1cm47CisKKwljLT5vYmplY3QuZmxhZ3MgfD0gZmxhZzsKKwlwcmlvX3F1ZXVlX3B1dChxLCBjKTsKK30KKworc3RhdGljIHZvaWQgZXhwbG9yZV93YWxrX3N0ZXAoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCB0b3BvX3dhbGtfaW5mbyAqaW5mbyA9IHJldnMtPnRvcG9fd2Fsa19pbmZvOworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwlzdHJ1Y3QgY29tbWl0ICpjID0gcHJpb19xdWV1ZV9nZXQoJmluZm8tPmV4cGxvcmVfcXVldWUpOworCisJaWYgKCFjKQorCQlyZXR1cm47CisKKwlpZiAocGFyc2VfY29tbWl0X2dlbnRseShjLCAxKSA8IDApCisJCXJldHVybjsKKworCWlmIChyZXZzLT5zb3J0X29yZGVyID09IFJFVl9TT1JUX0JZX0FVVEhPUl9EQVRFKQorCQlyZWNvcmRfYXV0aG9yX2RhdGUoJmluZm8tPmF1dGhvcl9kYXRlLCBjKTsKKworCWlmIChyZXZzLT5tYXhfYWdlICE9IC0xICYmIChjLT5kYXRlIDwgcmV2cy0+bWF4X2FnZSkpCisJCWMtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCisJaWYgKHByb2Nlc3NfcGFyZW50cyhyZXZzLCBjLCBOVUxMLCBOVUxMKSA8IDApCisJCXJldHVybjsKKworCWlmIChjLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQltYXJrX3BhcmVudHNfdW5pbnRlcmVzdGluZyhjKTsKKworCWZvciAocCA9IGMtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KQorCQl0ZXN0X2ZsYWdfYW5kX2luc2VydCgmaW5mby0+ZXhwbG9yZV9xdWV1ZSwgcC0+aXRlbSwgVE9QT19XQUxLX0VYUExPUkVEKTsKK30KKworc3RhdGljIHZvaWQgZXhwbG9yZV90b19kZXB0aChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgIHVpbnQzMl90IGdlbl9jdXRvZmYpCit7CisJc3RydWN0IHRvcG9fd2Fsa19pbmZvICppbmZvID0gcmV2cy0+dG9wb193YWxrX2luZm87CisJc3RydWN0IGNvbW1pdCAqYzsKKwl3aGlsZSAoKGMgPSBwcmlvX3F1ZXVlX3BlZWsoJmluZm8tPmV4cGxvcmVfcXVldWUpKSAmJgorCSAgICAgICBjLT5nZW5lcmF0aW9uID49IGdlbl9jdXRvZmYpCisJCWV4cGxvcmVfd2Fsa19zdGVwKHJldnMpOworfQorCitzdGF0aWMgdm9pZCBpbmRlZ3JlZV93YWxrX3N0ZXAoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwlzdHJ1Y3QgdG9wb193YWxrX2luZm8gKmluZm8gPSByZXZzLT50b3BvX3dhbGtfaW5mbzsKKwlzdHJ1Y3QgY29tbWl0ICpjID0gcHJpb19xdWV1ZV9nZXQoJmluZm8tPmluZGVncmVlX3F1ZXVlKTsKKworCWlmICghYykKKwkJcmV0dXJuOworCisJaWYgKHBhcnNlX2NvbW1pdF9nZW50bHkoYywgMSkgPCAwKQorCQlyZXR1cm47CisKKwlleHBsb3JlX3RvX2RlcHRoKHJldnMsIGMtPmdlbmVyYXRpb24pOworCisJZm9yIChwID0gYy0+cGFyZW50czsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcC0+aXRlbTsKKwkJaW50ICpwaSA9IGluZGVncmVlX3NsYWJfYXQoJmluZm8tPmluZGVncmVlLCBwYXJlbnQpOworCisJCWlmICgqcGkpCisJCQkoKnBpKSsrOworCQllbHNlCisJCQkqcGkgPSAyOworCisJCXRlc3RfZmxhZ19hbmRfaW5zZXJ0KCZpbmZvLT5pbmRlZ3JlZV9xdWV1ZSwgcGFyZW50LCBUT1BPX1dBTEtfSU5ERUdSRUUpOworCisJCWlmIChyZXZzLT5maXJzdF9wYXJlbnRfb25seSkKKwkJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVfaW5kZWdyZWVzX3RvX2RlcHRoKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgICAgICAgdWludDMyX3QgZ2VuX2N1dG9mZikKK3sKKwlzdHJ1Y3QgdG9wb193YWxrX2luZm8gKmluZm8gPSByZXZzLT50b3BvX3dhbGtfaW5mbzsKKwlzdHJ1Y3QgY29tbWl0ICpjOworCXdoaWxlICgoYyA9IHByaW9fcXVldWVfcGVlaygmaW5mby0+aW5kZWdyZWVfcXVldWUpKSAmJgorCSAgICAgICBjLT5nZW5lcmF0aW9uID49IGdlbl9jdXRvZmYpCisJCWluZGVncmVlX3dhbGtfc3RlcChyZXZzKTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfdG9wb193YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgdG9wb193YWxrX2luZm8gKmluZm8gPSByZXZzLT50b3BvX3dhbGtfaW5mbzsKKworCWNsZWFyX3ByaW9fcXVldWUoJmluZm8tPmV4cGxvcmVfcXVldWUpOworCWNsZWFyX3ByaW9fcXVldWUoJmluZm8tPmluZGVncmVlX3F1ZXVlKTsKKwljbGVhcl9wcmlvX3F1ZXVlKCZpbmZvLT50b3BvX3F1ZXVlKTsKKwljbGVhcl9pbmRlZ3JlZV9zbGFiKCZpbmZvLT5pbmRlZ3JlZSk7CisJY2xlYXJfYXV0aG9yX2RhdGVfc2xhYigmaW5mby0+YXV0aG9yX2RhdGUpOworCisJRlJFRV9BTkRfTlVMTChyZXZzLT50b3BvX3dhbGtfaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdG9wb193YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgdG9wb193YWxrX2luZm8gKmluZm87CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0OworCWlmIChyZXZzLT50b3BvX3dhbGtfaW5mbykKKwkJcmVzZXRfdG9wb193YWxrKHJldnMpOworCisJcmV2cy0+dG9wb193YWxrX2luZm8gPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgdG9wb193YWxrX2luZm8pKTsKKwlpbmZvID0gcmV2cy0+dG9wb193YWxrX2luZm87CisJbWVtc2V0KGluZm8sIDAsIHNpemVvZihzdHJ1Y3QgdG9wb193YWxrX2luZm8pKTsKKworCWluaXRfaW5kZWdyZWVfc2xhYigmaW5mby0+aW5kZWdyZWUpOworCW1lbXNldCgmaW5mby0+ZXhwbG9yZV9xdWV1ZSwgMCwgc2l6ZW9mKGluZm8tPmV4cGxvcmVfcXVldWUpKTsKKwltZW1zZXQoJmluZm8tPmluZGVncmVlX3F1ZXVlLCAwLCBzaXplb2YoaW5mby0+aW5kZWdyZWVfcXVldWUpKTsKKwltZW1zZXQoJmluZm8tPnRvcG9fcXVldWUsIDAsIHNpemVvZihpbmZvLT50b3BvX3F1ZXVlKSk7CisKKwlzd2l0Y2ggKHJldnMtPnNvcnRfb3JkZXIpIHsKKwlkZWZhdWx0OiAvKiBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUiAqLworCQlpbmZvLT50b3BvX3F1ZXVlLmNvbXBhcmUgPSBOVUxMOworCQlicmVhazsKKwljYXNlIFJFVl9TT1JUX0JZX0NPTU1JVF9EQVRFOgorCQlpbmZvLT50b3BvX3F1ZXVlLmNvbXBhcmUgPSBjb21wYXJlX2NvbW1pdHNfYnlfY29tbWl0X2RhdGU7CisJCWJyZWFrOworCWNhc2UgUkVWX1NPUlRfQllfQVVUSE9SX0RBVEU6CisJCWluaXRfYXV0aG9yX2RhdGVfc2xhYigmaW5mby0+YXV0aG9yX2RhdGUpOworCQlpbmZvLT50b3BvX3F1ZXVlLmNvbXBhcmUgPSBjb21wYXJlX2NvbW1pdHNfYnlfYXV0aG9yX2RhdGU7CisJCWluZm8tPnRvcG9fcXVldWUuY2JfZGF0YSA9ICZpbmZvLT5hdXRob3JfZGF0ZTsKKwkJYnJlYWs7CisJfQorCisJaW5mby0+ZXhwbG9yZV9xdWV1ZS5jb21wYXJlID0gY29tcGFyZV9jb21taXRzX2J5X2dlbl90aGVuX2NvbW1pdF9kYXRlOworCWluZm8tPmluZGVncmVlX3F1ZXVlLmNvbXBhcmUgPSBjb21wYXJlX2NvbW1pdHNfYnlfZ2VuX3RoZW5fY29tbWl0X2RhdGU7CisKKwlpbmZvLT5taW5fZ2VuZXJhdGlvbiA9IEdFTkVSQVRJT05fTlVNQkVSX0lORklOSVRZOworCWZvciAobGlzdCA9IHJldnMtPmNvbW1pdHM7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmMgPSBsaXN0LT5pdGVtOworCisJCWlmIChwYXJzZV9jb21taXRfZ2VudGx5KGMsIDEpKQorCQkJY29udGludWU7CisKKwkJdGVzdF9mbGFnX2FuZF9pbnNlcnQoJmluZm8tPmV4cGxvcmVfcXVldWUsIGMsIFRPUE9fV0FMS19FWFBMT1JFRCk7CisJCXRlc3RfZmxhZ19hbmRfaW5zZXJ0KCZpbmZvLT5pbmRlZ3JlZV9xdWV1ZSwgYywgVE9QT19XQUxLX0lOREVHUkVFKTsKKworCQlpZiAoYy0+Z2VuZXJhdGlvbiA8IGluZm8tPm1pbl9nZW5lcmF0aW9uKQorCQkJaW5mby0+bWluX2dlbmVyYXRpb24gPSBjLT5nZW5lcmF0aW9uOworCisJCSooaW5kZWdyZWVfc2xhYl9hdCgmaW5mby0+aW5kZWdyZWUsIGMpKSA9IDE7CisKKwkJaWYgKHJldnMtPnNvcnRfb3JkZXIgPT0gUkVWX1NPUlRfQllfQVVUSE9SX0RBVEUpCisJCQlyZWNvcmRfYXV0aG9yX2RhdGUoJmluZm8tPmF1dGhvcl9kYXRlLCBjKTsKKwl9CisJY29tcHV0ZV9pbmRlZ3JlZXNfdG9fZGVwdGgocmV2cywgaW5mby0+bWluX2dlbmVyYXRpb24pOworCisJZm9yIChsaXN0ID0gcmV2cy0+Y29tbWl0czsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqYyA9IGxpc3QtPml0ZW07CisKKwkJaWYgKCooaW5kZWdyZWVfc2xhYl9hdCgmaW5mby0+aW5kZWdyZWUsIGMpKSA9PSAxKQorCQkJcHJpb19xdWV1ZV9wdXQoJmluZm8tPnRvcG9fcXVldWUsIGMpOworCX0KKworCS8qCisJICogVGhpcyBpcyB1bmZvcnR1bmF0ZTsgdGhlIGluaXRpYWwgdGlwcyBuZWVkIHRvIGJlIHNob3duCisJICogaW4gdGhlIG9yZGVyIGdpdmVuIGZyb20gdGhlIHJldmlzaW9uIHRyYXZlcnNhbCBtYWNoaW5lcnkuCisJICovCisJaWYgKHJldnMtPnNvcnRfb3JkZXIgPT0gUkVWX1NPUlRfSU5fR1JBUEhfT1JERVIpCisJCXByaW9fcXVldWVfcmV2ZXJzZSgmaW5mby0+dG9wb19xdWV1ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpuZXh0X3RvcG9fY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjOworCXN0cnVjdCB0b3BvX3dhbGtfaW5mbyAqaW5mbyA9IHJldnMtPnRvcG9fd2Fsa19pbmZvOworCisJLyogcG9wIG5leHQgb2ZmIG9mIHRvcG9fcXVldWUgKi8KKwljID0gcHJpb19xdWV1ZV9nZXQoJmluZm8tPnRvcG9fcXVldWUpOworCisJaWYgKGMpCisJCSooaW5kZWdyZWVfc2xhYl9hdCgmaW5mby0+aW5kZWdyZWUsIGMpKSA9IDA7CisKKwlyZXR1cm4gYzsKK30KKworc3RhdGljIHZvaWQgZXhwYW5kX3RvcG9fd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJc3RydWN0IHRvcG9fd2Fsa19pbmZvICppbmZvID0gcmV2cy0+dG9wb193YWxrX2luZm87CisJaWYgKHByb2Nlc3NfcGFyZW50cyhyZXZzLCBjb21taXQsIE5VTEwsIE5VTEwpIDwgMCkgeworCQlpZiAoIXJldnMtPmlnbm9yZV9taXNzaW5nX2xpbmtzKQorCQkJZGllKCJGYWlsZWQgdG8gdHJhdmVyc2UgcGFyZW50cyBvZiBjb21taXQgJXMiLAorCQkJICAgIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCX0KKworCWZvciAocCA9IGNvbW1pdC0+cGFyZW50czsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcC0+aXRlbTsKKwkJaW50ICpwaTsKKworCQlpZiAocGFyZW50LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisKKwkJaWYgKHBhcnNlX2NvbW1pdF9nZW50bHkocGFyZW50LCAxKSA8IDApCisJCQljb250aW51ZTsKKworCQlpZiAocGFyZW50LT5nZW5lcmF0aW9uIDwgaW5mby0+bWluX2dlbmVyYXRpb24pIHsKKwkJCWluZm8tPm1pbl9nZW5lcmF0aW9uID0gcGFyZW50LT5nZW5lcmF0aW9uOworCQkJY29tcHV0ZV9pbmRlZ3JlZXNfdG9fZGVwdGgocmV2cywgaW5mby0+bWluX2dlbmVyYXRpb24pOworCQl9CisKKwkJcGkgPSBpbmRlZ3JlZV9zbGFiX2F0KCZpbmZvLT5pbmRlZ3JlZSwgcGFyZW50KTsKKworCQkoKnBpKS0tOworCQlpZiAoKnBpID09IDEpCisJCQlwcmlvX3F1ZXVlX3B1dCgmaW5mby0+dG9wb19xdWV1ZSwgcGFyZW50KTsKKworCQlpZiAocmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpCisJCQlyZXR1cm47CisJfQorfQorCitpbnQgcHJlcGFyZV9yZXZpc2lvbl93YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IG9sZF9wZW5kaW5nOworCXN0cnVjdCBjb21taXRfbGlzdCAqKm5leHQgPSAmcmV2cy0+Y29tbWl0czsKKworCW1lbWNweSgmb2xkX3BlbmRpbmcsICZyZXZzLT5wZW5kaW5nLCBzaXplb2Yob2xkX3BlbmRpbmcpKTsKKwlyZXZzLT5wZW5kaW5nLm5yID0gMDsKKwlyZXZzLT5wZW5kaW5nLmFsbG9jID0gMDsKKwlyZXZzLT5wZW5kaW5nLm9iamVjdHMgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBvbGRfcGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmUgPSBvbGRfcGVuZGluZy5vYmplY3RzICsgaTsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gaGFuZGxlX2NvbW1pdChyZXZzLCBlKTsKKwkJaWYgKGNvbW1pdCkgeworCQkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTRUVOKSkgeworCQkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFNFRU47CisJCQkJbmV4dCA9IGNvbW1pdF9saXN0X2FwcGVuZChjb21taXQsIG5leHQpOworCQkJfQorCQl9CisJfQorCW9iamVjdF9hcnJheV9jbGVhcigmb2xkX3BlbmRpbmcpOworCisJLyogU2lnbmFsIHdoZXRoZXIgd2UgbmVlZCBwZXItcGFyZW50IHRyZWVzYW1lIGRlY29yYXRpb24gKi8KKwlpZiAocmV2cy0+c2ltcGxpZnlfbWVyZ2VzIHx8CisJICAgIChyZXZzLT5saW1pdGVkICYmIGxpbWl0aW5nX2Nhbl9pbmNyZWFzZV90cmVlc2FtZShyZXZzKSkpCisJCXJldnMtPnRyZWVzYW1lLm5hbWUgPSAidHJlZXNhbWUiOworCisJaWYgKHJldnMtPmV4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0cykgeworCQlmb3JfZWFjaF9wYWNrZWRfb2JqZWN0KG1hcmtfdW5pbnRlcmVzdGluZywgcmV2cywKKwkJCQkgICAgICAgRk9SX0VBQ0hfT0JKRUNUX1BST01JU09SX09OTFkpOworCX0KKworCWlmIChyZXZzLT5wcnVuaW5nLnBhdGhzcGVjLm5yID09IDEgJiYgIXJldnMtPnJlZmxvZ19pbmZvKQorCQlwcmVwYXJlX3RvX3VzZV9ibG9vbV9maWx0ZXIocmV2cyk7CisJaWYgKHJldnMtPm5vX3dhbGsgIT0gUkVWSVNJT05fV0FMS19OT19XQUxLX1VOU09SVEVEKQorCQljb21taXRfbGlzdF9zb3J0X2J5X2RhdGUoJnJldnMtPmNvbW1pdHMpOworCWlmIChyZXZzLT5ub193YWxrKQorCQlyZXR1cm4gMDsKKwlpZiAocmV2cy0+bGltaXRlZCkgeworCQlpZiAobGltaXRfbGlzdChyZXZzKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmIChyZXZzLT50b3BvX29yZGVyKQorCQkJc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcigmcmV2cy0+Y29tbWl0cywgcmV2cy0+c29ydF9vcmRlcik7CisJfSBlbHNlIGlmIChyZXZzLT50b3BvX29yZGVyKQorCQlpbml0X3RvcG9fd2FsayhyZXZzKTsKKwlpZiAocmV2cy0+bGluZV9sZXZlbF90cmF2ZXJzZSkKKwkJbGluZV9sb2dfZmlsdGVyKHJldnMpOworCWlmIChyZXZzLT5zaW1wbGlmeV9tZXJnZXMpCisJCXNpbXBsaWZ5X21lcmdlcyhyZXZzKTsKKwlpZiAocmV2cy0+Y2hpbGRyZW4ubmFtZSkKKwkJc2V0X2NoaWxkcmVuKHJldnMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIHJld3JpdGVfcmVzdWx0IHJld3JpdGVfb25lXzEoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgc3RydWN0IGNvbW1pdCAqKnBwLAorCQkJCQkgc3RydWN0IHByaW9fcXVldWUgKnF1ZXVlKQoreworCWZvciAoOzspIHsKKwkJc3RydWN0IGNvbW1pdCAqcCA9ICpwcDsKKwkJaWYgKCFyZXZzLT5saW1pdGVkKQorCQkJaWYgKHByb2Nlc3NfcGFyZW50cyhyZXZzLCBwLCBOVUxMLCBxdWV1ZSkgPCAwKQorCQkJCXJldHVybiByZXdyaXRlX29uZV9lcnJvcjsKKwkJaWYgKHAtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQlyZXR1cm4gcmV3cml0ZV9vbmVfb2s7CisJCWlmICghKHAtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSkKKwkJCXJldHVybiByZXdyaXRlX29uZV9vazsKKwkJaWYgKCFwLT5wYXJlbnRzKQorCQkJcmV0dXJuIHJld3JpdGVfb25lX25vcGFyZW50czsKKwkJaWYgKChwID0gb25lX3JlbGV2YW50X3BhcmVudChyZXZzLCBwLT5wYXJlbnRzKSkgPT0gTlVMTCkKKwkJCXJldHVybiByZXdyaXRlX29uZV9vazsKKwkJKnBwID0gcDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1lcmdlX3F1ZXVlX2ludG9fbGlzdChzdHJ1Y3QgcHJpb19xdWV1ZSAqcSwgc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCkKK3sKKwl3aGlsZSAocS0+bnIpIHsKKwkJc3RydWN0IGNvbW1pdCAqaXRlbSA9IHByaW9fcXVldWVfcGVlayhxKTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwID0gKmxpc3Q7CisKKwkJaWYgKHAgJiYgcC0+aXRlbS0+ZGF0ZSA+PSBpdGVtLT5kYXRlKQorCQkJbGlzdCA9ICZwLT5uZXh0OworCQllbHNlIHsKKwkJCXAgPSBjb21taXRfbGlzdF9pbnNlcnQoaXRlbSwgbGlzdCk7CisJCQlsaXN0ID0gJnAtPm5leHQ7IC8qIHNraXAgbmV3bHkgYWRkZWQgaXRlbSAqLworCQkJcHJpb19xdWV1ZV9nZXQocSk7IC8qIHBvcCBpdGVtICovCisJCX0KKwl9Cit9CisKK3N0YXRpYyBlbnVtIHJld3JpdGVfcmVzdWx0IHJld3JpdGVfb25lKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqKnBwKQoreworCXN0cnVjdCBwcmlvX3F1ZXVlIHF1ZXVlID0geyBjb21wYXJlX2NvbW1pdHNfYnlfY29tbWl0X2RhdGUgfTsKKwllbnVtIHJld3JpdGVfcmVzdWx0IHJldCA9IHJld3JpdGVfb25lXzEocmV2cywgcHAsICZxdWV1ZSk7CisJbWVyZ2VfcXVldWVfaW50b19saXN0KCZxdWV1ZSwgJnJldnMtPmNvbW1pdHMpOworCWNsZWFyX3ByaW9fcXVldWUoJnF1ZXVlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmV3cml0ZV9wYXJlbnRzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCXJld3JpdGVfcGFyZW50X2ZuX3QgcmV3cml0ZV9wYXJlbnQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcHAgPSAmY29tbWl0LT5wYXJlbnRzOworCXdoaWxlICgqcHApIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQgPSAqcHA7CisJCXN3aXRjaCAocmV3cml0ZV9wYXJlbnQocmV2cywgJnBhcmVudC0+aXRlbSkpIHsKKwkJY2FzZSByZXdyaXRlX29uZV9vazoKKwkJCWJyZWFrOworCQljYXNlIHJld3JpdGVfb25lX25vcGFyZW50czoKKwkJCSpwcCA9IHBhcmVudC0+bmV4dDsKKwkJCWNvbnRpbnVlOworCQljYXNlIHJld3JpdGVfb25lX2Vycm9yOgorCQkJcmV0dXJuIC0xOworCQl9CisJCXBwID0gJnBhcmVudC0+bmV4dDsKKwl9CisJcmVtb3ZlX2R1cGxpY2F0ZV9wYXJlbnRzKHJldnMsIGNvbW1pdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tbWl0X3Jld3JpdGVfcGVyc29uKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqd2hhdCwgc3RydWN0IHN0cmluZ19saXN0ICptYWlsbWFwKQoreworCWNoYXIgKnBlcnNvbiwgKmVuZHA7CisJc2l6ZV90IGxlbiwgbmFtZWxlbiwgbWFpbGxlbjsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm1haWw7CisJc3RydWN0IGlkZW50X3NwbGl0IGlkZW50OworCisJcGVyc29uID0gc3Ryc3RyKGJ1Zi0+YnVmLCB3aGF0KTsKKwlpZiAoIXBlcnNvbikKKwkJcmV0dXJuIDA7CisKKwlwZXJzb24gKz0gc3RybGVuKHdoYXQpOworCWVuZHAgPSBzdHJjaHIocGVyc29uLCAnXG4nKTsKKwlpZiAoIWVuZHApCisJCXJldHVybiAwOworCisJbGVuID0gZW5kcCAtIHBlcnNvbjsKKworCWlmIChzcGxpdF9pZGVudF9saW5lKCZpZGVudCwgcGVyc29uLCBsZW4pKQorCQlyZXR1cm4gMDsKKworCW1haWwgPSBpZGVudC5tYWlsX2JlZ2luOworCW1haWxsZW4gPSBpZGVudC5tYWlsX2VuZCAtIGlkZW50Lm1haWxfYmVnaW47CisJbmFtZSA9IGlkZW50Lm5hbWVfYmVnaW47CisJbmFtZWxlbiA9IGlkZW50Lm5hbWVfZW5kIC0gaWRlbnQubmFtZV9iZWdpbjsKKworCWlmIChtYXBfdXNlcihtYWlsbWFwLCAmbWFpbCwgJm1haWxsZW4sICZuYW1lLCAmbmFtZWxlbikpIHsKKwkJc3RydWN0IHN0cmJ1ZiBuYW1lbWFpbCA9IFNUUkJVRl9JTklUOworCisJCXN0cmJ1Zl9hZGRmKCZuYW1lbWFpbCwgIiUuKnMgPCUuKnM+IiwKKwkJCSAgICAoaW50KW5hbWVsZW4sIG5hbWUsIChpbnQpbWFpbGxlbiwgbWFpbCk7CisKKwkJc3RyYnVmX3NwbGljZShidWYsIGlkZW50Lm5hbWVfYmVnaW4gLSBidWYtPmJ1ZiwKKwkJCSAgICAgIGlkZW50Lm1haWxfZW5kIC0gaWRlbnQubmFtZV9iZWdpbiArIDEsCisJCQkgICAgICBuYW1lbWFpbC5idWYsIG5hbWVtYWlsLmxlbik7CisKKwkJc3RyYnVmX3JlbGVhc2UoJm5hbWVtYWlsKTsKKworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21taXRfbWF0Y2goc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgcmV2X2luZm8gKm9wdCkKK3sKKwlpbnQgcmV0dmFsOworCWNvbnN0IGNoYXIgKmVuY29kaW5nOworCWNvbnN0IGNoYXIgKm1lc3NhZ2U7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghb3B0LT5ncmVwX2ZpbHRlci5wYXR0ZXJuX2xpc3QgJiYgIW9wdC0+Z3JlcF9maWx0ZXIuaGVhZGVyX2xpc3QpCisJCXJldHVybiAxOworCisJLyogUHJlcGVuZCAiZmFrZSIgaGVhZGVycyBhcyBuZWVkZWQgKi8KKwlpZiAob3B0LT5ncmVwX2ZpbHRlci51c2VfcmVmbG9nX2ZpbHRlcikgeworCQlzdHJidWZfYWRkc3RyKCZidWYsICJyZWZsb2cgIik7CisJCWdldF9yZWZsb2dfbWVzc2FnZSgmYnVmLCBvcHQtPnJlZmxvZ19pbmZvKTsKKwkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCX0KKworCS8qCisJICogV2UgZ3JlcCBpbiB0aGUgdXNlcidzIG91dHB1dCBlbmNvZGluZywgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCBpdAorCSAqIGlzIHRoZSBlbmNvZGluZyB0aGV5IGFyZSBtb3N0IGxpa2VseSB0byB3cml0ZSB0aGVpciBncmVwIHBhdHRlcm4KKwkgKiBmb3IuIEluIGFkZGl0aW9uLCBpdCBtZWFucyB3ZSB3aWxsIG1hdGNoIHRoZSAibm90ZXMiIGVuY29kaW5nIGJlbG93LAorCSAqIHNvIHdlIHdpbGwgbm90IGVuZCB1cCB3aXRoIGEgYnVmZmVyIHRoYXQgaGFzIHR3byBkaWZmZXJlbnQgZW5jb2RpbmdzCisJICogaW4gaXQuCisJICovCisJZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOworCW1lc3NhZ2UgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZyk7CisKKwkvKiBDb3B5IHRoZSBjb21taXQgdG8gdGVtcG9yYXJ5IGlmIHdlIGFyZSB1c2luZyAiZmFrZSIgaGVhZGVycyAqLworCWlmIChidWYubGVuKQorCQlzdHJidWZfYWRkc3RyKCZidWYsIG1lc3NhZ2UpOworCisJaWYgKG9wdC0+Z3JlcF9maWx0ZXIuaGVhZGVyX2xpc3QgJiYgb3B0LT5tYWlsbWFwKSB7CisJCWlmICghYnVmLmxlbikKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgbWVzc2FnZSk7CisKKwkJY29tbWl0X3Jld3JpdGVfcGVyc29uKCZidWYsICJcbmF1dGhvciAiLCBvcHQtPm1haWxtYXApOworCQljb21taXRfcmV3cml0ZV9wZXJzb24oJmJ1ZiwgIlxuY29tbWl0dGVyICIsIG9wdC0+bWFpbG1hcCk7CisJfQorCisJLyogQXBwZW5kICJmYWtlIiBtZXNzYWdlIHBhcnRzIGFzIG5lZWRlZCAqLworCWlmIChvcHQtPnNob3dfbm90ZXMpIHsKKwkJaWYgKCFidWYubGVuKQorCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBtZXNzYWdlKTsKKwkJZm9ybWF0X2Rpc3BsYXlfbm90ZXMoJmNvbW1pdC0+b2JqZWN0Lm9pZCwgJmJ1ZiwgZW5jb2RpbmcsIDEpOworCX0KKworCS8qCisJICogRmluZCBlaXRoZXIgaW4gdGhlIG9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlLCBvciBpbiB0aGUgdGVtcG9yYXJ5LgorCSAqIE5vdGUgdGhhdCB3ZSBjYXN0IGF3YXkgdGhlIGNvbnN0bmVzcyBvZiAibWVzc2FnZSIgaGVyZS4gSXQgaXMKKwkgKiBjb25zdCBiZWNhdXNlIGl0IG1heSBjb21lIGZyb20gdGhlIGNhY2hlZCBjb21taXQgYnVmZmVyLiBUaGF0J3MgT0ssCisJICogYmVjYXVzZSB3ZSBrbm93IHRoYXQgaXQgaXMgbW9kaWZpYWJsZSBoZWFwIG1lbW9yeSwgYW5kIHRoYXQgd2hpbGUKKwkgKiBncmVwX2J1ZmZlciBtYXkgbW9kaWZ5IGl0IGZvciBzcGVlZCwgaXQgd2lsbCByZXN0b3JlIGFueQorCSAqIGNoYW5nZXMgYmVmb3JlIHJldHVybmluZy4KKwkgKi8KKwlpZiAoYnVmLmxlbikKKwkJcmV0dmFsID0gZ3JlcF9idWZmZXIoJm9wdC0+Z3JlcF9maWx0ZXIsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCWVsc2UKKwkJcmV0dmFsID0gZ3JlcF9idWZmZXIoJm9wdC0+Z3JlcF9maWx0ZXIsCisJCQkJICAgICAoY2hhciAqKW1lc3NhZ2UsIHN0cmxlbihtZXNzYWdlKSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIG1lc3NhZ2UpOworCXJldHVybiBvcHQtPmludmVydF9ncmVwID8gIXJldHZhbCA6IHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgd2FudF9hbmNlc3RyeShjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJcmV0dXJuIChyZXZzLT5yZXdyaXRlX3BhcmVudHMgfHwgcmV2cy0+Y2hpbGRyZW4ubmFtZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gYSB0aW1lc3RhbXAgdG8gYmUgdXNlZCBmb3IgLS1zaW5jZS8tLXVudGlsIGNvbXBhcmlzb25zIGZvciB0aGlzCisgKiBjb21taXQsIGJhc2VkIG9uIHRoZSByZXZpc2lvbiBvcHRpb25zLgorICovCitzdGF0aWMgdGltZXN0YW1wX3QgY29tcGFyaXNvbl9kYXRlKGNvbnN0IHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgICBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJcmV0dXJuIHJldnMtPnJlZmxvZ19pbmZvID8KKwkJZ2V0X3JlZmxvZ190aW1lc3RhbXAocmV2cy0+cmVmbG9nX2luZm8pIDoKKwkJY29tbWl0LT5kYXRlOworfQorCitlbnVtIGNvbW1pdF9hY3Rpb24gZ2V0X2NvbW1pdF9hY3Rpb24oc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU0hPV04pCisJCXJldHVybiBjb21taXRfaWdub3JlOworCWlmIChyZXZzLT51bnBhY2tlZCAmJiBoYXNfb2JqZWN0X3BhY2soJmNvbW1pdC0+b2JqZWN0Lm9pZCkpCisJCXJldHVybiBjb21taXRfaWdub3JlOworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCXJldHVybiBjb21taXRfaWdub3JlOworCWlmIChyZXZzLT5taW5fYWdlICE9IC0xICYmCisJICAgIGNvbXBhcmlzb25fZGF0ZShyZXZzLCBjb21taXQpID4gcmV2cy0+bWluX2FnZSkKKwkJCXJldHVybiBjb21taXRfaWdub3JlOworCWlmIChyZXZzLT5taW5fcGFyZW50cyB8fCAocmV2cy0+bWF4X3BhcmVudHMgPj0gMCkpIHsKKwkJaW50IG4gPSBjb21taXRfbGlzdF9jb3VudChjb21taXQtPnBhcmVudHMpOworCQlpZiAoKG4gPCByZXZzLT5taW5fcGFyZW50cykgfHwKKwkJICAgICgocmV2cy0+bWF4X3BhcmVudHMgPj0gMCkgJiYgKG4gPiByZXZzLT5tYXhfcGFyZW50cykpKQorCQkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CisJfQorCWlmICghY29tbWl0X21hdGNoKGNvbW1pdCwgcmV2cykpCisJCXJldHVybiBjb21taXRfaWdub3JlOworCWlmIChyZXZzLT5wcnVuZSAmJiByZXZzLT5kZW5zZSkgeworCQkvKiBDb21taXQgd2l0aG91dCBjaGFuZ2VzPyAqLworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkgeworCQkJaW50IG47CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJCQkvKiBkcm9wIG1lcmdlcyB1bmxlc3Mgd2Ugd2FudCBwYXJlbnRob29kICovCisJCQlpZiAoIXdhbnRfYW5jZXN0cnkocmV2cykpCisJCQkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CisKKwkJCWlmIChyZXZzLT5zaG93X3B1bGxzICYmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFBVTExfTUVSR0UpKQorCQkJCXJldHVybiBjb21taXRfc2hvdzsKKworCQkJLyoKKwkJCSAqIElmIHdlIHdhbnQgYW5jZXN0cnksIHRoZW4gbmVlZCB0byBrZWVwIGFueSBtZXJnZXMKKwkJCSAqIGJldHdlZW4gcmVsZXZhbnQgY29tbWl0cyB0byB0aWUgdG9nZXRoZXIgdG9wb2xvZ3kuCisJCQkgKiBGb3IgY29uc2lzdGVuY3kgd2l0aCBUUkVFU0FNRSBhbmQgc2ltcGxpZmljYXRpb24KKwkJCSAqIHVzZSAicmVsZXZhbnQiIGhlcmUgcmF0aGVyIHRoYW4ganVzdCBJTlRFUkVTVElORywKKwkJCSAqIHRvIHRyZWF0IGJvdHRvbSBjb21taXQocykgYXMgcGFydCBvZiB0aGUgdG9wb2xvZ3kuCisJCQkgKi8KKwkJCWZvciAobiA9IDAsIHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KQorCQkJCWlmIChyZWxldmFudF9jb21taXQocC0+aXRlbSkpCisJCQkJCWlmICgrK24gPj0gMikKKwkJCQkJCXJldHVybiBjb21taXRfc2hvdzsKKwkJCXJldHVybiBjb21taXRfaWdub3JlOworCQl9CisJfQorCXJldHVybiBjb21taXRfc2hvdzsKK30KKworZGVmaW5lX2NvbW1pdF9zbGFiKHNhdmVkX3BhcmVudHMsIHN0cnVjdCBjb21taXRfbGlzdCAqKTsKKworI2RlZmluZSBFTVBUWV9QQVJFTlRfTElTVCAoKHN0cnVjdCBjb21taXRfbGlzdCAqKS0xKQorCisvKgorICogWW91IG1heSBvbmx5IGNhbGwgc2F2ZV9wYXJlbnRzKCkgb25jZSBwZXIgY29tbWl0ICh0aGlzIGlzIGNoZWNrZWQKKyAqIGZvciBub24tcm9vdCBjb21taXRzKS4KKyAqLworc3RhdGljIHZvaWQgc2F2ZV9wYXJlbnRzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwOworCisJaWYgKCFyZXZzLT5zYXZlZF9wYXJlbnRzX3NsYWIpIHsKKwkJcmV2cy0+c2F2ZWRfcGFyZW50c19zbGFiID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHNhdmVkX3BhcmVudHMpKTsKKwkJaW5pdF9zYXZlZF9wYXJlbnRzKHJldnMtPnNhdmVkX3BhcmVudHNfc2xhYik7CisJfQorCisJcHAgPSBzYXZlZF9wYXJlbnRzX2F0KHJldnMtPnNhdmVkX3BhcmVudHNfc2xhYiwgY29tbWl0KTsKKworCS8qCisJICogV2hlbiB3YWxraW5nIHdpdGggcmVmbG9ncywgd2UgbWF5IHZpc2l0IHRoZSBzYW1lIGNvbW1pdAorCSAqIHNldmVyYWwgdGltZXM6IG9uY2UgZm9yIGVhY2ggYXBwZWFyYW5jZSBpbiB0aGUgcmVmbG9nLgorCSAqCisJICogSW4gdGhpcyBjYXNlLCBzYXZlX3BhcmVudHMoKSB3aWxsIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4KKwkgKiBXZSB3YW50IHRvIGtlZXAgb25seSB0aGUgZmlyc3Qgc2V0IG9mIHBhcmVudHMuICBXZSBuZWVkIHRvCisJICogc3RvcmUgYSBzZW50aW5lbCB2YWx1ZSBmb3IgYW4gZW1wdHkgKGkuZS4sIE5VTEwpIHBhcmVudAorCSAqIGxpc3QgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSBhIG5vdC15ZXQtc2F2ZWQgbGlzdCwgaG93ZXZlci4KKwkgKi8KKwlpZiAoKnBwKQorCQlyZXR1cm47CisJaWYgKGNvbW1pdC0+cGFyZW50cykKKwkJKnBwID0gY29weV9jb21taXRfbGlzdChjb21taXQtPnBhcmVudHMpOworCWVsc2UKKwkJKnBwID0gRU1QVFlfUEFSRU5UX0xJU1Q7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc2F2ZWRfcGFyZW50cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJaWYgKHJldnMtPnNhdmVkX3BhcmVudHNfc2xhYikKKwkJY2xlYXJfc2F2ZWRfcGFyZW50cyhyZXZzLT5zYXZlZF9wYXJlbnRzX3NsYWIpOworfQorCitzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9zYXZlZF9wYXJlbnRzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKworCWlmICghcmV2cy0+c2F2ZWRfcGFyZW50c19zbGFiKQorCQlyZXR1cm4gY29tbWl0LT5wYXJlbnRzOworCisJcGFyZW50cyA9ICpzYXZlZF9wYXJlbnRzX2F0KHJldnMtPnNhdmVkX3BhcmVudHNfc2xhYiwgY29tbWl0KTsKKwlpZiAocGFyZW50cyA9PSBFTVBUWV9QQVJFTlRfTElTVCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHBhcmVudHM7Cit9CisKK2VudW0gY29tbWl0X2FjdGlvbiBzaW1wbGlmeV9jb21taXQoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJZW51bSBjb21taXRfYWN0aW9uIGFjdGlvbiA9IGdldF9jb21taXRfYWN0aW9uKHJldnMsIGNvbW1pdCk7CisKKwlpZiAoYWN0aW9uID09IGNvbW1pdF9zaG93ICYmCisJICAgIHJldnMtPnBydW5lICYmIHJldnMtPmRlbnNlICYmIHdhbnRfYW5jZXN0cnkocmV2cykpIHsKKwkJLyoKKwkJICogLS1mdWxsLWRpZmYgb24gc2ltcGxpZmllZCBwYXJlbnRzIGlzIG5vIGdvb2Q6IGl0CisJCSAqIHdpbGwgc2hvdyBzcHVyaW91cyBjaGFuZ2VzIGZyb20gdGhlIGNvbW1pdHMgdGhhdAorCQkgKiB3ZXJlIGVsaWRlZC4gIFNvIHdlIHNhdmUgdGhlIHBhcmVudHMgb24gdGhlIHNpZGUKKwkJICogd2hlbiAtLWZ1bGwtZGlmZiBpcyBpbiBlZmZlY3QuCisJCSAqLworCQlpZiAocmV2cy0+ZnVsbF9kaWZmKQorCQkJc2F2ZV9wYXJlbnRzKHJldnMsIGNvbW1pdCk7CisJCWlmIChyZXdyaXRlX3BhcmVudHMocmV2cywgY29tbWl0LCByZXdyaXRlX29uZSkgPCAwKQorCQkJcmV0dXJuIGNvbW1pdF9lcnJvcjsKKwl9CisJcmV0dXJuIGFjdGlvbjsKK30KKworc3RhdGljIHZvaWQgdHJhY2tfbGluZWFyKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWlmIChyZXZzLT50cmFja19maXJzdF90aW1lKSB7CisJCXJldnMtPmxpbmVhciA9IDE7CisJCXJldnMtPnRyYWNrX2ZpcnN0X3RpbWUgPSAwOworCX0gZWxzZSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwkJZm9yIChwID0gcmV2cy0+cHJldmlvdXNfcGFyZW50czsgcDsgcCA9IHAtPm5leHQpCisJCQlpZiAocC0+aXRlbSA9PSBOVUxMIHx8IC8qIGZpcnN0IGNvbW1pdCAqLworCQkJICAgIG9pZGVxKCZwLT5pdGVtLT5vYmplY3Qub2lkLCAmY29tbWl0LT5vYmplY3Qub2lkKSkKKwkJCQlicmVhazsKKwkJcmV2cy0+bGluZWFyID0gcCAhPSBOVUxMOworCX0KKwlpZiAocmV2cy0+cmV2ZXJzZSkgeworCQlpZiAocmV2cy0+bGluZWFyKQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJBQ0tfTElORUFSOworCX0KKwlmcmVlX2NvbW1pdF9saXN0KHJldnMtPnByZXZpb3VzX3BhcmVudHMpOworCXJldnMtPnByZXZpb3VzX3BhcmVudHMgPSBjb3B5X2NvbW1pdF9saXN0KGNvbW1pdC0+cGFyZW50cyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpnZXRfcmV2aXNpb25fMShzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJd2hpbGUgKDEpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJCWlmIChyZXZzLT5yZWZsb2dfaW5mbykKKwkJCWNvbW1pdCA9IG5leHRfcmVmbG9nX2VudHJ5KHJldnMtPnJlZmxvZ19pbmZvKTsKKwkJZWxzZSBpZiAocmV2cy0+dG9wb193YWxrX2luZm8pCisJCQljb21taXQgPSBuZXh0X3RvcG9fY29tbWl0KHJldnMpOworCQllbHNlCisJCQljb21taXQgPSBwb3BfY29tbWl0KCZyZXZzLT5jb21taXRzKTsKKworCQlpZiAoIWNvbW1pdCkKKwkJCXJldHVybiBOVUxMOworCisJCWlmIChyZXZzLT5yZWZsb2dfaW5mbykKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH4oQURERUQgfCBTRUVOIHwgU0hPV04pOworCisJCS8qCisJCSAqIElmIHdlIGhhdmVuJ3QgZG9uZSB0aGUgbGlzdCBsaW1pdGluZywgd2UgbmVlZCB0byBsb29rIGF0CisJCSAqIHRoZSBwYXJlbnRzIGhlcmUuIFdlIGFsc28gbmVlZCB0byBkbyB0aGUgZGF0ZS1iYXNlZCBsaW1pdGluZworCQkgKiB0aGF0IHdlJ2Qgb3RoZXJ3aXNlIGhhdmUgZG9uZSBpbiBsaW1pdF9saXN0KCkuCisJCSAqLworCQlpZiAoIXJldnMtPmxpbWl0ZWQpIHsKKwkJCWlmIChyZXZzLT5tYXhfYWdlICE9IC0xICYmCisJCQkgICAgY29tcGFyaXNvbl9kYXRlKHJldnMsIGNvbW1pdCkgPCByZXZzLT5tYXhfYWdlKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAocmV2cy0+cmVmbG9nX2luZm8pCisJCQkJdHJ5X3RvX3NpbXBsaWZ5X2NvbW1pdChyZXZzLCBjb21taXQpOworCQkJZWxzZSBpZiAocmV2cy0+dG9wb193YWxrX2luZm8pCisJCQkJZXhwYW5kX3RvcG9fd2FsayhyZXZzLCBjb21taXQpOworCQkJZWxzZSBpZiAocHJvY2Vzc19wYXJlbnRzKHJldnMsIGNvbW1pdCwgJnJldnMtPmNvbW1pdHMsIE5VTEwpIDwgMCkgeworCQkJCWlmICghcmV2cy0+aWdub3JlX21pc3NpbmdfbGlua3MpCisJCQkJCWRpZSgiRmFpbGVkIHRvIHRyYXZlcnNlIHBhcmVudHMgb2YgY29tbWl0ICVzIiwKKwkJCQkJCW9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCQkJfQorCQl9CisKKwkJc3dpdGNoIChzaW1wbGlmeV9jb21taXQocmV2cywgY29tbWl0KSkgeworCQljYXNlIGNvbW1pdF9pZ25vcmU6CisJCQljb250aW51ZTsKKwkJY2FzZSBjb21taXRfZXJyb3I6CisJCQlkaWUoIkZhaWxlZCB0byBzaW1wbGlmeSBwYXJlbnRzIG9mIGNvbW1pdCAlcyIsCisJCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCWRlZmF1bHQ6CisJCQlpZiAocmV2cy0+dHJhY2tfbGluZWFyKQorCQkJCXRyYWNrX2xpbmVhcihyZXZzLCBjb21taXQpOworCQkJcmV0dXJuIGNvbW1pdDsKKwkJfQorCX0KK30KKworLyoKKyAqIFJldHVybiB0cnVlIGZvciBlbnRyaWVzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gc2hvd24uICAoVGhpcyBpcyBhbgorICogb2JqZWN0X2FycmF5X2VhY2hfZnVuY190LikKKyAqLworc3RhdGljIGludCBlbnRyeV91bnNob3duKHN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmVudHJ5LCB2b2lkICpjYl9kYXRhX3VudXNlZCkKK3sKKwlyZXR1cm4gIShlbnRyeS0+aXRlbS0+ZmxhZ3MgJiBTSE9XTik7Cit9CisKKy8qCisgKiBJZiBhcnJheSBpcyBvbiB0aGUgdmVyZ2Ugb2YgYSByZWFsbG9jLCBnYXJiYWdlLWNvbGxlY3QgYW55IGVudHJpZXMKKyAqIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gc2hvd24gdG8gdHJ5IHRvIGZyZWUgdXAgc29tZSBzcGFjZS4KKyAqLworc3RhdGljIHZvaWQgZ2NfYm91bmRhcnkoc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXkpCit7CisJaWYgKGFycmF5LT5uciA9PSBhcnJheS0+YWxsb2MpCisJCW9iamVjdF9hcnJheV9maWx0ZXIoYXJyYXksIGVudHJ5X3Vuc2hvd24sIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBjcmVhdGVfYm91bmRhcnlfY29tbWl0X2xpc3Qoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXVuc2lnbmVkIGk7CisJc3RydWN0IGNvbW1pdCAqYzsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5ICphcnJheSA9ICZyZXZzLT5ib3VuZGFyeV9jb21taXRzOworCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKm9iamVjdHMgPSBhcnJheS0+b2JqZWN0czsKKworCS8qCisJICogSWYgcmV2cy0+Y29tbWl0cyBpcyBub24tTlVMTCBhdCB0aGlzIHBvaW50LCBhbiBlcnJvciBvY2N1cnJlZCBpbgorCSAqIGdldF9yZXZpc2lvbl8xKCkuICBJZ25vcmUgdGhlIGVycm9yIGFuZCBjb250aW51ZSBwcmludGluZyB0aGUKKwkgKiBib3VuZGFyeSBjb21taXRzIGFueXdheS4gIChUaGlzIGlzIHdoYXQgdGhlIGNvZGUgaGFzIGFsd2F5cworCSAqIGRvbmUuKQorCSAqLworCWlmIChyZXZzLT5jb21taXRzKSB7CisJCWZyZWVfY29tbWl0X2xpc3QocmV2cy0+Y29tbWl0cyk7CisJCXJldnMtPmNvbW1pdHMgPSBOVUxMOworCX0KKworCS8qCisJICogUHV0IGFsbCBvZiB0aGUgYWN0dWFsIGJvdW5kYXJ5IGNvbW1pdHMgZnJvbSByZXZzLT5ib3VuZGFyeV9jb21taXRzCisJICogaW50byByZXZzLT5jb21taXRzCisJICovCisJZm9yIChpID0gMDsgaSA8IGFycmF5LT5ucjsgaSsrKSB7CisJCWMgPSAoc3RydWN0IGNvbW1pdCAqKShvYmplY3RzW2ldLml0ZW0pOworCQlpZiAoIWMpCisJCQljb250aW51ZTsKKwkJaWYgKCEoYy0+b2JqZWN0LmZsYWdzICYgQ0hJTERfU0hPV04pKQorCQkJY29udGludWU7CisJCWlmIChjLT5vYmplY3QuZmxhZ3MgJiAoU0hPV04gfCBCT1VOREFSWSkpCisJCQljb250aW51ZTsKKwkJYy0+b2JqZWN0LmZsYWdzIHw9IEJPVU5EQVJZOworCQljb21taXRfbGlzdF9pbnNlcnQoYywgJnJldnMtPmNvbW1pdHMpOworCX0KKworCS8qCisJICogSWYgcmV2cy0+dG9wb19vcmRlciBpcyBzZXQsIHNvcnQgdGhlIGJvdW5kYXJ5IGNvbW1pdHMKKwkgKiBpbiB0b3BvbG9naWNhbCBvcmRlcgorCSAqLworCXNvcnRfaW5fdG9wb2xvZ2ljYWxfb3JkZXIoJnJldnMtPmNvbW1pdHMsIHJldnMtPnNvcnRfb3JkZXIpOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqZ2V0X3JldmlzaW9uX2ludGVybmFsKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmw7CisKKwlpZiAocmV2cy0+Ym91bmRhcnkgPT0gMikgeworCQkvKgorCQkgKiBBbGwgb2YgdGhlIG5vcm1hbCBjb21taXRzIGhhdmUgYWxyZWFkeSBiZWVuIHJldHVybmVkLAorCQkgKiBhbmQgd2UgYXJlIG5vdyByZXR1cm5pbmcgYm91bmRhcnkgY29tbWl0cy4KKwkJICogY3JlYXRlX2JvdW5kYXJ5X2NvbW1pdF9saXN0KCkgaGFzIHBvcHVsYXRlZAorCQkgKiByZXZzLT5jb21taXRzIHdpdGggdGhlIHJlbWFpbmluZyBjb21taXRzIHRvIHJldHVybi4KKwkJICovCisJCWMgPSBwb3BfY29tbWl0KCZyZXZzLT5jb21taXRzKTsKKwkJaWYgKGMpCisJCQljLT5vYmplY3QuZmxhZ3MgfD0gU0hPV047CisJCXJldHVybiBjOworCX0KKworCS8qCisJICogSWYgb3VyIG1heF9jb3VudCBjb3VudGVyIGhhcyByZWFjaGVkIHplcm8sIHRoZW4gd2UgYXJlIGRvbmUuIFdlCisJICogZG9uJ3Qgc2ltcGx5IHJldHVybiBOVUxMIGJlY2F1c2Ugd2Ugc3RpbGwgbWlnaHQgbmVlZCB0byBzaG93CisJICogYm91bmRhcnkgY29tbWl0cy4gQnV0IHdlIHdhbnQgdG8gYXZvaWQgY2FsbGluZyBnZXRfcmV2aXNpb25fMSwgd2hpY2gKKwkgKiBtaWdodCBkbyBhIGNvbnNpZGVyYWJsZSBhbW91bnQgb2Ygd29yayBmaW5kaW5nIHRoZSBuZXh0IGNvbW1pdCBvbmx5CisJICogZm9yIHVzIHRvIHRocm93IGl0IGF3YXkuCisJICoKKwkgKiBJZiBpdCBpcyBub24temVybywgdGhlbiBlaXRoZXIgd2UgZG9uJ3QgaGF2ZSBhIG1heF9jb3VudCBhdCBhbGwKKwkgKiAoLTEpLCBvciBpdCBpcyBzdGlsbCBjb3VudGluZywgaW4gd2hpY2ggY2FzZSB3ZSBkZWNyZW1lbnQuCisJICovCisJaWYgKHJldnMtPm1heF9jb3VudCkgeworCQljID0gZ2V0X3JldmlzaW9uXzEocmV2cyk7CisJCWlmIChjKSB7CisJCQl3aGlsZSAocmV2cy0+c2tpcF9jb3VudCA+IDApIHsKKwkJCQlyZXZzLT5za2lwX2NvdW50LS07CisJCQkJYyA9IGdldF9yZXZpc2lvbl8xKHJldnMpOworCQkJCWlmICghYykKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAocmV2cy0+bWF4X2NvdW50ID4gMCkKKwkJCXJldnMtPm1heF9jb3VudC0tOworCX0KKworCWlmIChjKQorCQljLT5vYmplY3QuZmxhZ3MgfD0gU0hPV047CisKKwlpZiAoIXJldnMtPmJvdW5kYXJ5KQorCQlyZXR1cm4gYzsKKworCWlmICghYykgeworCQkvKgorCQkgKiBnZXRfcmV2aXNpb25fMSgpIHJ1bnMgb3V0IHRoZSBjb21taXRzLCBhbmQKKwkJICogd2UgYXJlIGRvbmUgY29tcHV0aW5nIHRoZSBib3VuZGFyaWVzLgorCQkgKiBzd2l0Y2ggdG8gYm91bmRhcnkgY29tbWl0cyBvdXRwdXQgbW9kZS4KKwkJICovCisJCXJldnMtPmJvdW5kYXJ5ID0gMjsKKworCQkvKgorCQkgKiBVcGRhdGUgcmV2cy0+Y29tbWl0cyB0byBjb250YWluIHRoZSBsaXN0IG9mCisJCSAqIGJvdW5kYXJ5IGNvbW1pdHMuCisJCSAqLworCQljcmVhdGVfYm91bmRhcnlfY29tbWl0X2xpc3QocmV2cyk7CisKKwkJcmV0dXJuIGdldF9yZXZpc2lvbl9pbnRlcm5hbChyZXZzKTsKKwl9CisKKwkvKgorCSAqIGJvdW5kYXJ5IGNvbW1pdHMgYXJlIHRoZSBjb21taXRzIHRoYXQgYXJlIHBhcmVudHMgb2YgdGhlCisJICogb25lcyB3ZSBnb3QgZnJvbSBnZXRfcmV2aXNpb25fMSgpIGJ1dCB0aGV5IHRoZW1zZWx2ZXMgYXJlCisJICogbm90IHJldHVybmVkIGZyb20gZ2V0X3JldmlzaW9uXzEoKS4gIEJlZm9yZSByZXR1cm5pbmcKKwkgKiAnYycsIHdlIG5lZWQgdG8gbWFyayBpdHMgcGFyZW50cyB0aGF0IHRoZXkgY291bGQgYmUgYm91bmRhcmllcy4KKwkgKi8KKworCWZvciAobCA9IGMtPnBhcmVudHM7IGw7IGwgPSBsLT5uZXh0KSB7CisJCXN0cnVjdCBvYmplY3QgKnA7CisJCXAgPSAmKGwtPml0ZW0tPm9iamVjdCk7CisJCWlmIChwLT5mbGFncyAmIChDSElMRF9TSE9XTiB8IFNIT1dOKSkKKwkJCWNvbnRpbnVlOworCQlwLT5mbGFncyB8PSBDSElMRF9TSE9XTjsKKwkJZ2NfYm91bmRhcnkoJnJldnMtPmJvdW5kYXJ5X2NvbW1pdHMpOworCQlhZGRfb2JqZWN0X2FycmF5KHAsIE5VTEwsICZyZXZzLT5ib3VuZGFyeV9jb21taXRzKTsKKwl9CisKKwlyZXR1cm4gYzsKK30KKworc3RydWN0IGNvbW1pdCAqZ2V0X3JldmlzaW9uKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjOworCXN0cnVjdCBjb21taXRfbGlzdCAqcmV2ZXJzZWQ7CisKKwlpZiAocmV2cy0+cmV2ZXJzZSkgeworCQlyZXZlcnNlZCA9IE5VTEw7CisJCXdoaWxlICgoYyA9IGdldF9yZXZpc2lvbl9pbnRlcm5hbChyZXZzKSkpCisJCQljb21taXRfbGlzdF9pbnNlcnQoYywgJnJldmVyc2VkKTsKKwkJcmV2cy0+Y29tbWl0cyA9IHJldmVyc2VkOworCQlyZXZzLT5yZXZlcnNlID0gMDsKKwkJcmV2cy0+cmV2ZXJzZV9vdXRwdXRfc3RhZ2UgPSAxOworCX0KKworCWlmIChyZXZzLT5yZXZlcnNlX291dHB1dF9zdGFnZSkgeworCQljID0gcG9wX2NvbW1pdCgmcmV2cy0+Y29tbWl0cyk7CisJCWlmIChyZXZzLT50cmFja19saW5lYXIpCisJCQlyZXZzLT5saW5lYXIgPSAhIShjICYmIGMtPm9iamVjdC5mbGFncyAmIFRSQUNLX0xJTkVBUik7CisJCXJldHVybiBjOworCX0KKworCWMgPSBnZXRfcmV2aXNpb25faW50ZXJuYWwocmV2cyk7CisJaWYgKGMgJiYgcmV2cy0+Z3JhcGgpCisJCWdyYXBoX3VwZGF0ZShyZXZzLT5ncmFwaCwgYyk7CisJaWYgKCFjKSB7CisJCWZyZWVfc2F2ZWRfcGFyZW50cyhyZXZzKTsKKwkJaWYgKHJldnMtPnByZXZpb3VzX3BhcmVudHMpIHsKKwkJCWZyZWVfY29tbWl0X2xpc3QocmV2cy0+cHJldmlvdXNfcGFyZW50cyk7CisJCQlyZXZzLT5wcmV2aW91c19wYXJlbnRzID0gTlVMTDsKKwkJfQorCX0KKwlyZXR1cm4gYzsKK30KKworY29uc3QgY2hhciAqZ2V0X3JldmlzaW9uX21hcmsoY29uc3Qgc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQk9VTkRBUlkpCisJCXJldHVybiAiLSI7CisJZWxzZSBpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQlyZXR1cm4gIl4iOworCWVsc2UgaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgUEFUQ0hTQU1FKQorCQlyZXR1cm4gIj0iOworCWVsc2UgaWYgKCFyZXZzIHx8IHJldnMtPmxlZnRfcmlnaHQpIHsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpCisJCQlyZXR1cm4gIjwiOworCQllbHNlCisJCQlyZXR1cm4gIj4iOworCX0gZWxzZSBpZiAocmV2cy0+Z3JhcGgpCisJCXJldHVybiAiKiI7CisJZWxzZSBpZiAocmV2cy0+Y2hlcnJ5X21hcmspCisJCXJldHVybiAiKyI7CisJcmV0dXJuICIiOworfQorCit2b2lkIHB1dF9yZXZpc2lvbl9tYXJrKGNvbnN0IHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWNvbnN0IGNoYXIgKm1hcmsgPSBnZXRfcmV2aXNpb25fbWFyayhyZXZzLCBjb21taXQpOworCWlmICghc3RybGVuKG1hcmspKQorCQlyZXR1cm47CisJZnB1dHMobWFyaywgc3Rkb3V0KTsKKwlwdXRjaGFyKCcgJyk7Cit9CmRpZmYgLS1naXQgYS9yZXZpc2lvbi5oIGIvcmV2aXNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzQ5MWI3Ci0tLSAvZGV2L251bGwKKysrIGIvcmV2aXNpb24uaApAQCAtMCwwICsxLDQ1NSBAQAorI2lmbmRlZiBSRVZJU0lPTl9ICisjZGVmaW5lIFJFVklTSU9OX0gKKworI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJncmVwLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKyNpbmNsdWRlICJwcmV0dHkuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWItZGVjbC5oIgorCisvKioKKyAqIFRoZSByZXZpc2lvbiB3YWxraW5nIEFQSSBvZmZlcnMgZnVuY3Rpb25zIHRvIGJ1aWxkIGEgbGlzdCBvZiByZXZpc2lvbnMKKyAqIGFuZCB0aGVuIGl0ZXJhdGUgb3ZlciB0aGF0IGxpc3QuCisgKgorICogQ2FsbGluZyBzZXF1ZW5jZQorICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSB3YWxraW5nIEFQSSBoYXMgYSBnaXZlbiBjYWxsaW5nIHNlcXVlbmNlOiBmaXJzdCB5b3UgbmVlZCB0byBpbml0aWFsaXplCisgKiBhIHJldl9pbmZvIHN0cnVjdHVyZSwgdGhlbiBhZGQgcmV2aXNpb25zIHRvIGNvbnRyb2wgd2hhdCBraW5kIG9mIHJldmlzaW9uCisgKiBsaXN0IGRvIHlvdSB3YW50IHRvIGdldCwgZmluYWxseSB5b3UgY2FuIGl0ZXJhdGUgb3ZlciB0aGUgcmV2aXNpb24gbGlzdC4KKyAqCisgKi8KKworLyogUmVtZW1iZXIgdG8gdXBkYXRlIG9iamVjdCBmbGFnIGFsbG9jYXRpb24gaW4gb2JqZWN0LmggKi8KKyNkZWZpbmUgU0VFTgkJKDF1PDwwKQorI2RlZmluZSBVTklOVEVSRVNUSU5HICAgKDF1PDwxKQorI2RlZmluZSBUUkVFU0FNRQkoMXU8PDIpCisjZGVmaW5lIFNIT1dOCQkoMXU8PDMpCisjZGVmaW5lIFRNUF9NQVJLCSgxdTw8NCkgLyogZm9yIGlzb2xhdGVkIGNhc2VzOyBjbGVhbiBhZnRlciB1c2UgKi8KKyNkZWZpbmUgQk9VTkRBUlkJKDF1PDw1KQorI2RlZmluZSBDSElMRF9TSE9XTgkoMXU8PDYpCisjZGVmaW5lIEFEREVECQkoMXU8PDcpCS8qIFBhcmVudHMgYWxyZWFkeSBwYXJzZWQgYW5kIGFkZGVkPyAqLworI2RlZmluZSBTWU1NRVRSSUNfTEVGVAkoMXU8PDgpCisjZGVmaW5lIFBBVENIU0FNRQkoMXU8PDkpCisjZGVmaW5lIEJPVFRPTQkJKDF1PDwxMCkKKworLyogV0FSTklORzogVGhpcyBpcyBhbHNvIHVzZWQgYXMgUkVBQ0hBQkxFIGluIGNvbW1pdC1ncmFwaC5jLiAqLworI2RlZmluZSBQVUxMX01FUkdFCSgxdTw8MTUpCisvKgorICogSW5kaWNhdGVzIG9iamVjdCB3YXMgcmVhY2hlZCBieSB0cmF2ZXJzYWwuIGkuZS4gbm90IGdpdmVuIGJ5IHVzZXIgb24KKyAqIGNvbW1hbmQtbGluZSBvciBzdGRpbi4KKyAqIE5FRURTV09SSzogTk9UX1VTRVJfR0lWRU4gZG9lc24ndCBhcHBseSB0byBjb21taXRzIGJlY2F1c2Ugd2Ugb25seSBzdXBwb3J0CisgKiBmaWx0ZXJpbmcgdHJlZXMgYW5kIGJsb2JzLCBidXQgaXQgbWF5IGJlIHVzZWZ1bCB0byBzdXBwb3J0IGZpbHRlcmluZyBjb21taXRzCisgKiBpbiB0aGUgZnV0dXJlLgorICovCisjZGVmaW5lIE5PVF9VU0VSX0dJVkVOCSgxdTw8MjUpCisjZGVmaW5lIFRSQUNLX0xJTkVBUgkoMXU8PDI2KQorI2RlZmluZSBBTExfUkVWX0ZMQUdTCSgoKDF1PDwxMSktMSkgfCBOT1RfVVNFUl9HSVZFTiB8IFRSQUNLX0xJTkVBUiB8IFBVTExfTUVSR0UpCisKKyNkZWZpbmUgVE9QT19XQUxLX0VYUExPUkVECSgxdTw8MjcpCisjZGVmaW5lIFRPUE9fV0FMS19JTkRFR1JFRQkoMXU8PDI4KQorCisjZGVmaW5lIERFQ09SQVRFX1NIT1JUX1JFRlMJMQorI2RlZmluZSBERUNPUkFURV9GVUxMX1JFRlMJMgorCitzdHJ1Y3QgbG9nX2luZm87CitzdHJ1Y3QgcmVwb3NpdG9yeTsKK3N0cnVjdCByZXZfaW5mbzsKK3N0cnVjdCBzdHJpbmdfbGlzdDsKK3N0cnVjdCBzYXZlZF9wYXJlbnRzOworc3RydWN0IGJsb29tX2tleTsKK3N0cnVjdCBibG9vbV9maWx0ZXJfc2V0dGluZ3M7CitkZWZpbmVfc2hhcmVkX2NvbW1pdF9zbGFiKHJldmlzaW9uX3NvdXJjZXMsIGNoYXIgKik7CisKK3N0cnVjdCByZXZfY21kbGluZV9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgbnI7CisJdW5zaWduZWQgaW50IGFsbG9jOworCXN0cnVjdCByZXZfY21kbGluZV9lbnRyeSB7CisJCXN0cnVjdCBvYmplY3QgKml0ZW07CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCWVudW0geworCQkJUkVWX0NNRF9SRUYsCisJCQlSRVZfQ01EX1BBUkVOVFNfT05MWSwKKwkJCVJFVl9DTURfTEVGVCwKKwkJCVJFVl9DTURfUklHSFQsCisJCQlSRVZfQ01EX01FUkdFX0JBU0UsCisJCQlSRVZfQ01EX1JFVgorCQl9IHdoZW5jZTsKKwkJdW5zaWduZWQgZmxhZ3M7CisJfSAqcmV2OworfTsKKworI2RlZmluZSBSRVZJU0lPTl9XQUxLX1dBTEsgMAorI2RlZmluZSBSRVZJU0lPTl9XQUxLX05PX1dBTEtfU09SVEVEIDEKKyNkZWZpbmUgUkVWSVNJT05fV0FMS19OT19XQUxLX1VOU09SVEVEIDIKKworc3RydWN0IG9pZHNldDsKK3N0cnVjdCB0b3BvX3dhbGtfaW5mbzsKKworc3RydWN0IHJldl9pbmZvIHsKKwkvKiBTdGFydGluZyBsaXN0ICovCisJc3RydWN0IGNvbW1pdF9saXN0ICpjb21taXRzOworCXN0cnVjdCBvYmplY3RfYXJyYXkgcGVuZGluZzsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKworCS8qIFBhcmVudHMgb2Ygc2hvd24gY29tbWl0cyAqLworCXN0cnVjdCBvYmplY3RfYXJyYXkgYm91bmRhcnlfY29tbWl0czsKKworCS8qIFRoZSBlbmQtcG9pbnRzIHNwZWNpZmllZCBieSB0aGUgZW5kIHVzZXIgKi8KKwlzdHJ1Y3QgcmV2X2NtZGxpbmVfaW5mbyBjbWRsaW5lOworCisJLyogZXhjbHVkaW5nIGZyb20gLS1icmFuY2hlcywgLS1yZWZzLCBldGMuIGV4cGFuc2lvbiAqLworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmX2V4Y2x1ZGVzOworCisJLyogQmFzaWMgaW5mb3JtYXRpb24gKi8KKwljb25zdCBjaGFyICpwcmVmaXg7CisJY29uc3QgY2hhciAqZGVmOworCXN0cnVjdCBwYXRoc3BlYyBwcnVuZV9kYXRhOworCisJLyoKKwkgKiBXaGV0aGVyIHRoZSBhcmd1bWVudHMgcGFyc2VkIGJ5IHNldHVwX3JldmlzaW9ucygpIGluY2x1ZGVkIGFueQorCSAqICJpbnB1dCIgcmV2aXNpb25zIHRoYXQgbWlnaHQgc3RpbGwgaGF2ZSB5aWVsZGVkIGFuIGVtcHR5IHBlbmRpbmcKKwkgKiBsaXN0IChlLmcuLCBwYXR0ZXJucyBsaWtlICItLWFsbCIgb3IgIi0tZ2xvYiIpLgorCSAqLworCWludCByZXZfaW5wdXRfZ2l2ZW47CisKKwkvKgorCSAqIFdoZXRoZXIgd2UgcmVhZCBmcm9tIHN0ZGluIGR1ZSB0byB0aGUgLS1zdGRpbiBvcHRpb24uCisJICovCisJaW50IHJlYWRfZnJvbV9zdGRpbjsKKworCS8qIHRvcG8tc29ydCAqLworCWVudW0gcmV2X3NvcnRfb3JkZXIgc29ydF9vcmRlcjsKKworCXVuc2lnbmVkIGludCBlYXJseV9vdXRwdXQ7CisKKwl1bnNpZ25lZCBpbnQJaWdub3JlX21pc3Npbmc6MSwKKwkJCWlnbm9yZV9taXNzaW5nX2xpbmtzOjE7CisKKwkvKiBUcmF2ZXJzYWwgZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQJZGVuc2U6MSwKKwkJCXBydW5lOjEsCisJCQlub193YWxrOjIsCisJCQlyZW1vdmVfZW1wdHlfdHJlZXM6MSwKKwkJCXNpbXBsaWZ5X2hpc3Rvcnk6MSwKKwkJCXNob3dfcHVsbHM6MSwKKwkJCXRvcG9fb3JkZXI6MSwKKwkJCXNpbXBsaWZ5X21lcmdlczoxLAorCQkJc2ltcGxpZnlfYnlfZGVjb3JhdGlvbjoxLAorCQkJc2luZ2xlX3dvcmt0cmVlOjEsCisJCQl0YWdfb2JqZWN0czoxLAorCQkJdHJlZV9vYmplY3RzOjEsCisJCQlibG9iX29iamVjdHM6MSwKKwkJCXZlcmlmeV9vYmplY3RzOjEsCisJCQllZGdlX2hpbnQ6MSwKKwkJCWVkZ2VfaGludF9hZ2dyZXNzaXZlOjEsCisJCQlsaW1pdGVkOjEsCisJCQl1bnBhY2tlZDoxLAorCQkJYm91bmRhcnk6MiwKKwkJCWNvdW50OjEsCisJCQlsZWZ0X3JpZ2h0OjEsCisJCQlsZWZ0X29ubHk6MSwKKwkJCXJpZ2h0X29ubHk6MSwKKwkJCXJld3JpdGVfcGFyZW50czoxLAorCQkJcHJpbnRfcGFyZW50czoxLAorCQkJc2hvd19kZWNvcmF0aW9uczoxLAorCQkJcmV2ZXJzZToxLAorCQkJcmV2ZXJzZV9vdXRwdXRfc3RhZ2U6MSwKKwkJCWNoZXJyeV9waWNrOjEsCisJCQljaGVycnlfbWFyazoxLAorCQkJYmlzZWN0OjEsCisJCQlhbmNlc3RyeV9wYXRoOjEsCisJCQlmaXJzdF9wYXJlbnRfb25seToxLAorCQkJbGluZV9sZXZlbF90cmF2ZXJzZToxLAorCQkJdHJlZV9ibG9ic19pbl9jb21taXRfb3JkZXI6MSwKKworCQkJLyoKKwkJCSAqIEJsb2JzIGFyZSBzaG93biB3aXRob3V0IHJlZ2FyZCBmb3IgdGhlaXIgZXhpc3RlbmNlLgorCQkJICogQnV0IG5vdCBzbyBmb3IgdHJlZXM6IHVubGVzcyBleGNsdWRlX3Byb21pc29yX29iamVjdHMKKwkJCSAqIGlzIHNldCBhbmQgdGhlIHRyZWUgaW4gcXVlc3Rpb24gaXMgYSBwcm9taXNvciBvYmplY3Q7CisJCQkgKiBPUiBpZ25vcmVfbWlzc2luZ19saW5rcyBpcyBzZXQsIHRoZSByZXZpc2lvbiB3YWxrZXIKKwkJCSAqIGRpZXMgd2l0aCBhICJiYWQgdHJlZSBvYmplY3QgSEFTSCIgbWVzc2FnZSB3aGVuCisJCQkgKiBlbmNvdW50ZXJpbmcgYSBtaXNzaW5nIHRyZWUuIEZvciBjYWxsZXJzIHRoYXQgY2FuCisJCQkgKiBoYW5kbGUgbWlzc2luZyB0cmVlcyBhbmQgd2FudCB0aGVtIHRvIGJlIGZpbHRlcmFibGUKKwkJCSAqIGFuZCBzaG93YWJsZSwgc2V0IHRoaXMgdG8gdHJ1ZS4gVGhlIHJldmlzaW9uIHdhbGtlcgorCQkJICogd2lsbCBmaWx0ZXIgYW5kIHNob3cgc3VjaCBhIG1pc3NpbmcgdHJlZSBhcyB1c3VhbCwKKwkJCSAqIGJ1dCB3aWxsIG5vdCBhdHRlbXB0IHRvIHJlY3Vyc2UgaW50byB0aGlzIHRyZWUKKwkJCSAqIG9iamVjdC4KKwkJCSAqLworCQkJZG9fbm90X2RpZV9vbl9taXNzaW5nX3RyZWU6MSwKKworCQkJLyogZm9yIGludGVybmFsIHVzZSBvbmx5ICovCisJCQlleGNsdWRlX3Byb21pc29yX29iamVjdHM6MTsKKworCS8qIERpZmYgZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQJZGlmZjoxLAorCQkJZnVsbF9kaWZmOjEsCisJCQlzaG93X3Jvb3RfZGlmZjoxLAorCQkJbm9fY29tbWl0X2lkOjEsCisJCQl2ZXJib3NlX2hlYWRlcjoxLAorCQkJaWdub3JlX21lcmdlczoxLAorCQkJY29tYmluZV9tZXJnZXM6MSwKKwkJCWNvbWJpbmVkX2FsbF9wYXRoczoxLAorCQkJZGVuc2VfY29tYmluZWRfbWVyZ2VzOjEsCisJCQlhbHdheXNfc2hvd19oZWFkZXI6MTsKKworCS8qIEZvcm1hdCBpbmZvICovCisJaW50CQlzaG93X25vdGVzOworCXVuc2lnbmVkIGludAlzaG93bl9vbmU6MSwKKwkJCXNob3duX2Rhc2hlczoxLAorCQkJc2hvd19tZXJnZToxLAorCQkJc2hvd19ub3Rlc19naXZlbjoxLAorCQkJc2hvd19zaWduYXR1cmU6MSwKKwkJCXByZXR0eV9naXZlbjoxLAorCQkJYWJicmV2X2NvbW1pdDoxLAorCQkJYWJicmV2X2NvbW1pdF9naXZlbjoxLAorCQkJemVyb19jb21taXQ6MSwKKwkJCXVzZV90ZXJtaW5hdG9yOjEsCisJCQltaXNzaW5nX25ld2xpbmU6MSwKKwkJCWRhdGVfbW9kZV9leHBsaWNpdDoxLAorCQkJcHJlc2VydmVfc3ViamVjdDoxLAorCQkJZW5jb2RlX2VtYWlsX2hlYWRlcnM6MTsKKwl1bnNpZ25lZCBpbnQJZGlzYWJsZV9zdGRpbjoxOworCS8qIC0tc2hvdy1saW5lYXItYnJlYWsgKi8KKwl1bnNpZ25lZCBpbnQJdHJhY2tfbGluZWFyOjEsCisJCQl0cmFja19maXJzdF90aW1lOjEsCisJCQlsaW5lYXI6MTsKKworCXN0cnVjdCBkYXRlX21vZGUgZGF0ZV9tb2RlOworCWludAkJZXhwYW5kX3RhYnNfaW5fbG9nOyAvKiB1bnNldCBpZiBuZWdhdGl2ZSAqLworCWludAkJZXhwYW5kX3RhYnNfaW5fbG9nX2RlZmF1bHQ7CisKKwl1bnNpZ25lZCBpbnQJYWJicmV2OworCWVudW0gY21pdF9mbXQJY29tbWl0X2Zvcm1hdDsKKwlzdHJ1Y3QgbG9nX2luZm8gKmxvZ2luZm87CisJaW50CQluciwgdG90YWw7CisJY29uc3QgY2hhcgkqbWltZV9ib3VuZGFyeTsKKwljb25zdCBjaGFyCSpwYXRjaF9zdWZmaXg7CisJaW50CQludW1iZXJlZF9maWxlczsKKwlpbnQJCXJlcm9sbF9jb3VudDsKKwljaGFyCQkqbWVzc2FnZV9pZDsKKwlzdHJ1Y3QgaWRlbnRfc3BsaXQgZnJvbV9pZGVudDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZl9tZXNzYWdlX2lkczsKKwlpbnQJCWFkZF9zaWdub2ZmOworCWNvbnN0IGNoYXIJKmV4dHJhX2hlYWRlcnM7CisJY29uc3QgY2hhcgkqbG9nX3JlZW5jb2RlOworCWNvbnN0IGNoYXIJKnN1YmplY3RfcHJlZml4OworCWludAkJbm9faW5saW5lOworCWludAkJc2hvd19sb2dfc2l6ZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1haWxtYXA7CisKKwkvKiBGaWx0ZXIgYnkgY29tbWl0IGxvZyBtZXNzYWdlICovCisJc3RydWN0IGdyZXBfb3B0CWdyZXBfZmlsdGVyOworCS8qIE5lZ2F0ZSB0aGUgbWF0Y2ggb2YgZ3JlcF9maWx0ZXIgKi8KKwlpbnQgaW52ZXJ0X2dyZXA7CisKKwkvKiBEaXNwbGF5IGhpc3RvcnkgZ3JhcGggKi8KKwlzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaDsKKworCS8qIHNwZWNpYWwgbGltaXRzICovCisJaW50IHNraXBfY291bnQ7CisJaW50IG1heF9jb3VudDsKKwl0aW1lc3RhbXBfdCBtYXhfYWdlOworCXRpbWVzdGFtcF90IG1pbl9hZ2U7CisJaW50IG1pbl9wYXJlbnRzOworCWludCBtYXhfcGFyZW50czsKKwlpbnQgKCppbmNsdWRlX2NoZWNrKShzdHJ1Y3QgY29tbWl0ICosIHZvaWQgKik7CisJdm9pZCAqaW5jbHVkZV9jaGVja19kYXRhOworCisJLyogZGlmZiBpbmZvIGZvciBwYXRjaGVzIGFuZCBmb3IgcGF0aHMgbGltaXRpbmcgKi8KKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZvcHQ7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBwcnVuaW5nOworCisJc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvOworCXN0cnVjdCBkZWNvcmF0aW9uIGNoaWxkcmVuOworCXN0cnVjdCBkZWNvcmF0aW9uIG1lcmdlX3NpbXBsaWZpY2F0aW9uOworCXN0cnVjdCBkZWNvcmF0aW9uIHRyZWVzYW1lOworCisJLyogbm90ZXMtc3BlY2lmaWMgb3B0aW9uczogd2hpY2ggcmVmcyB0byBzaG93ICovCisJc3RydWN0IGRpc3BsYXlfbm90ZXNfb3B0IG5vdGVzX29wdDsKKworCS8qIGludGVyZGlmZiAqLworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmlkaWZmX29pZDE7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqaWRpZmZfb2lkMjsKKwljb25zdCBjaGFyICppZGlmZl90aXRsZTsKKworCS8qIHJhbmdlLWRpZmYgKi8KKwljb25zdCBjaGFyICpyZGlmZjE7CisJY29uc3QgY2hhciAqcmRpZmYyOworCWludCBjcmVhdGlvbl9mYWN0b3I7CisJY29uc3QgY2hhciAqcmRpZmZfdGl0bGU7CisKKwkvKiBjb21taXQgY291bnRzICovCisJaW50IGNvdW50X2xlZnQ7CisJaW50IGNvdW50X3JpZ2h0OworCWludCBjb3VudF9zYW1lOworCisJLyogbGluZSBsZXZlbCByYW5nZSB0aGF0IHdlIGFyZSBjaGFzaW5nICovCisJc3RydWN0IGRlY29yYXRpb24gbGluZV9sb2dfZGF0YTsKKworCS8qIGNvcGllcyBvZiB0aGUgcGFyZW50IGxpc3RzLCBmb3IgLS1mdWxsLWRpZmYgZGlzcGxheSAqLworCXN0cnVjdCBzYXZlZF9wYXJlbnRzICpzYXZlZF9wYXJlbnRzX3NsYWI7CisKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnByZXZpb3VzX3BhcmVudHM7CisJY29uc3QgY2hhciAqYnJlYWtfYmFyOworCisJc3RydWN0IHJldmlzaW9uX3NvdXJjZXMgKnNvdXJjZXM7CisKKwlzdHJ1Y3QgdG9wb193YWxrX2luZm8gKnRvcG9fd2Fsa19pbmZvOworCisJLyogQ29tbWl0IGdyYXBoIGJsb29tIGZpbHRlciBmaWVsZHMgKi8KKwkvKiBUaGUgYmxvb20gZmlsdGVyIGtleSBmb3IgdGhlIHBhdGhzcGVjICovCisJc3RydWN0IGJsb29tX2tleSAqYmxvb21fa2V5OworCS8qCisJICogVGhlIGJsb29tIGZpbHRlciBzZXR0aW5ncyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBrZXkuCisJICogVGhpcyBpcyBsb2FkZWQgZnJvbSB0aGUgY29tbWl0LWdyYXBoIGJlaW5nIHVzZWQuCisJICovCisJc3RydWN0IGJsb29tX2ZpbHRlcl9zZXR0aW5ncyAqYmxvb21fZmlsdGVyX3NldHRpbmdzOworfTsKKworaW50IHJlZl9leGNsdWRlZChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKiwgY29uc3QgY2hhciAqcGF0aCk7Cit2b2lkIGNsZWFyX3JlZl9leGNsdXNpb24oc3RydWN0IHN0cmluZ19saXN0ICoqKTsKK3ZvaWQgYWRkX3JlZl9leGNsdXNpb24oc3RydWN0IHN0cmluZ19saXN0ICoqLCBjb25zdCBjaGFyICpleGNsdWRlKTsKKworCisjZGVmaW5lIFJFVl9UUkVFX1NBTUUJCTAKKyNkZWZpbmUgUkVWX1RSRUVfTkVXCQkxCS8qIE9ubHkgbmV3IGZpbGVzICovCisjZGVmaW5lIFJFVl9UUkVFX09MRAkJMgkvKiBPbmx5IGZpbGVzIHJlbW92ZWQgKi8KKyNkZWZpbmUgUkVWX1RSRUVfRElGRkVSRU5UCTMJLyogTWl4ZWQgY2hhbmdlcyAqLworCisvKiByZXZpc2lvbi5jICovCit0eXBlZGVmIHZvaWQgKCpzaG93X2Vhcmx5X291dHB1dF9mbl90KShzdHJ1Y3QgcmV2X2luZm8gKiwgc3RydWN0IGNvbW1pdF9saXN0ICopOworZXh0ZXJuIHZvbGF0aWxlIHNob3dfZWFybHlfb3V0cHV0X2ZuX3Qgc2hvd19lYXJseV9vdXRwdXQ7CisKK3N0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgeworCWNvbnN0IGNoYXIgKmRlZjsKKwl2b2lkICgqdHdlYWspKHN0cnVjdCByZXZfaW5mbyAqLCBzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0ICopOworCWNvbnN0IGNoYXIgKnN1Ym1vZHVsZTsJLyogVE9ETzogZHJvcCB0aGlzIGFuZCB1c2UgcmV2X2luZm8tPnJlcG8gKi8KKwl1bnNpZ25lZCBpbnQJYXNzdW1lX2Rhc2hkYXNoOjEsCisJCQlhbGxvd19leGNsdWRlX3Byb21pc29yX29iamVjdHM6MTsKKwl1bnNpZ25lZCByZXZhcmdfb3B0OworfTsKKworI2lmbmRlZiBOT19USEVfUkVQT1NJVE9SWV9DT01QQVRJQklMSVRZX01BQ1JPUworI2RlZmluZSBpbml0X3JldmlzaW9ucyhyZXZzLCBwcmVmaXgpIHJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksIHJldnMsIHByZWZpeCkKKyNlbmRpZgorCisvKioKKyAqIEluaXRpYWxpemUgYSByZXZfaW5mbyBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcy4gVGhlIHRoaXJkIHBhcmFtZXRlciBtYXkKKyAqIGJlIE5VTEwgb3IgY2FuIGJlIHByZWZpeCBwYXRoLCBhbmQgdGhlbiB0aGUgYC5wcmVmaXhgIHZhcmlhYmxlIHdpbGwgYmUgc2V0CisgKiB0byBpdC4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGZpcnN0IGZ1bmN0aW9uIHlvdSB3YW50IHRvIGNhbGwgd2hlbiB5b3Ugd2FudAorICogdG8gZGVhbCB3aXRoIGEgcmV2aXNpb24gbGlzdC4gQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB5b3UgYXJlIGZyZWUgdG8KKyAqIGN1c3RvbWl6ZSBvcHRpb25zLCBsaWtlIHNldCBgLmlnbm9yZV9tZXJnZXNgIHRvIDAgaWYgeW91IGRvbid0IHdhbnQgdG8KKyAqIGlnbm9yZSBtZXJnZXMsIGFuZCBzbyBvbi4KKyAqLwordm9pZCByZXBvX2luaXRfcmV2aXNpb25zKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSBjb25zdCBjaGFyICpwcmVmaXgpOworCisvKioKKyAqIFBhcnNlIHJldmlzaW9uIGluZm9ybWF0aW9uLCBmaWxsaW5nIGluIHRoZSBgcmV2X2luZm9gIHN0cnVjdHVyZSwgYW5kCisgKiByZW1vdmluZyB0aGUgdXNlZCBhcmd1bWVudHMgZnJvbSB0aGUgYXJndW1lbnQgbGlzdC4gUmV0dXJucyB0aGUgbnVtYmVyCisgKiBvZiBhcmd1bWVudHMgbGVmdCB0aGF0IHdlcmVuJ3QgcmVjb2duaXplZCwgd2hpY2ggYXJlIGFsc28gbW92ZWQgdG8gdGhlCisgKiBoZWFkIG9mIHRoZSBhcmd1bWVudCBsaXN0LiBUaGUgbGFzdCBwYXJhbWV0ZXIgaXMgdXNlZCBpbiBjYXNlIG5vCisgKiBwYXJhbWV0ZXIgZ2l2ZW4gYnkgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMuCisgKi8KK2ludCBzZXR1cF9yZXZpc2lvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCSAgICBzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0ICopOworCit2b2lkIHBhcnNlX3JldmlzaW9uX29wdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCisJCQljb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSk7CisjZGVmaW5lIFJFVkFSR19DQU5OT1RfQkVfRklMRU5BTUUgMDEKKyNkZWZpbmUgUkVWQVJHX0NPTU1JVFRJU0ggMDIKK2ludCBoYW5kbGVfcmV2aXNpb25fYXJnKGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJaW50IGZsYWdzLCB1bnNpZ25lZCByZXZhcmdfb3B0KTsKKworLyoqCisgKiBSZXNldCB0aGUgZmxhZ3MgdXNlZCBieSB0aGUgcmV2aXNpb24gd2Fsa2luZyBhcGkuIFlvdSBjYW4gdXNlIHRoaXMgdG8gZG8KKyAqIG11bHRpcGxlIHNlcXVlbnRpYWwgcmV2aXNpb24gd2Fsa3MuCisgKi8KK3ZvaWQgcmVzZXRfcmV2aXNpb25fd2Fsayh2b2lkKTsKKworLyoqCisgKiBQcmVwYXJlcyB0aGUgcmV2X2luZm8gc3RydWN0dXJlIGZvciBhIHdhbGsuIFlvdSBzaG91bGQgY2hlY2sgaWYgaXQgcmV0dXJucworICogYW55IGVycm9yIChub24temVybyByZXR1cm4gY29kZSkgYW5kIGlmIGl0IGRvZXMgbm90LCB5b3UgY2FuIHN0YXJ0IHVzaW5nCisgKiBnZXRfcmV2aXNpb24oKSB0byBkbyB0aGUgaXRlcmF0aW9uLgorICovCitpbnQgcHJlcGFyZV9yZXZpc2lvbl93YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2cyk7CisKKy8qKgorICogVGFrZXMgYSBwb2ludGVyIHRvIGEgYHJldl9pbmZvYCBzdHJ1Y3R1cmUgYW5kIGl0ZXJhdGVzIG92ZXIgaXQsIHJldHVybmluZyBhCisgKiBgc3RydWN0IGNvbW1pdCAqYCBlYWNoIHRpbWUgeW91IGNhbGwgaXQuIFRoZSBlbmQgb2YgdGhlIHJldmlzaW9uIGxpc3QgaXMKKyAqIGluZGljYXRlZCBieSByZXR1cm5pbmcgYSBOVUxMIHBvaW50ZXIuCisgKi8KK3N0cnVjdCBjb21taXQgKmdldF9yZXZpc2lvbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMpOworCitjb25zdCBjaGFyICpnZXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwordm9pZCBwdXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworCit2b2lkIG1hcmtfcGFyZW50c191bmludGVyZXN0aW5nKHN0cnVjdCBjb21taXQgKmNvbW1pdCk7Cit2b2lkIG1hcmtfdHJlZV91bmludGVyZXN0aW5nKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgdHJlZSAqdHJlZSk7Cit2b2lkIG1hcmtfdHJlZXNfdW5pbnRlcmVzdGluZ19zcGFyc2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBvaWRzZXQgKnRyZWVzKTsKKwordm9pZCBzaG93X29iamVjdF93aXRoX25hbWUoRklMRSAqLCBzdHJ1Y3Qgb2JqZWN0ICosIGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBpZiB5b3Ugd2FudCB0byBhZGQgY29tbWl0IG9iamVjdHMgYXMgcmV2aXNpb24KKyAqIGluZm9ybWF0aW9uLiBZb3UgY2FuIHVzZSB0aGUgYFVOSU5URVJFU1RJTkdgIG9iamVjdCBmbGFnIHRvIGluZGljYXRlIGlmCisgKiB5b3Ugd2FudCB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhlIGdpdmVuIGNvbW1pdCAoYW5kIGNvbW1pdHMgcmVhY2hhYmxlCisgKiBmcm9tIHRoZSBnaXZlbiBjb21taXQpIGZyb20gdGhlIHJldmlzaW9uIGxpc3QuCisgKgorICogTk9URTogSWYgeW91IGhhdmUgdGhlIGNvbW1pdHMgYXMgYSBzdHJpbmcgbGlzdCB0aGVuIHlvdSBwcm9iYWJseSB3YW50IHRvCisgKiB1c2Ugc2V0dXBfcmV2aXNpb25zKCksIGluc3RlYWQgb2YgcGFyc2luZyBlYWNoIHN0cmluZyBhbmQgdXNpbmcgdGhpcworICogZnVuY3Rpb24uCisgKi8KK3ZvaWQgYWRkX3BlbmRpbmdfb2JqZWN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCXN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSk7CisKK3ZvaWQgYWRkX3BlbmRpbmdfb2lkKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKKwordm9pZCBhZGRfaGVhZF90b19wZW5kaW5nKHN0cnVjdCByZXZfaW5mbyAqKTsKK3ZvaWQgYWRkX3JlZmxvZ3NfdG9fcGVuZGluZyhzdHJ1Y3QgcmV2X2luZm8gKiwgdW5zaWduZWQgaW50IGZsYWdzKTsKK3ZvaWQgYWRkX2luZGV4X29iamVjdHNfdG9fcGVuZGluZyhzdHJ1Y3QgcmV2X2luZm8gKiwgdW5zaWduZWQgaW50IGZsYWdzKTsKKworZW51bSBjb21taXRfYWN0aW9uIHsKKwljb21taXRfaWdub3JlLAorCWNvbW1pdF9zaG93LAorCWNvbW1pdF9lcnJvcgorfTsKKworZW51bSBjb21taXRfYWN0aW9uIGdldF9jb21taXRfYWN0aW9uKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgICAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CitlbnVtIGNvbW1pdF9hY3Rpb24gc2ltcGxpZnlfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgICBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworCitlbnVtIHJld3JpdGVfcmVzdWx0IHsKKwlyZXdyaXRlX29uZV9vaywKKwlyZXdyaXRlX29uZV9ub3BhcmVudHMsCisJcmV3cml0ZV9vbmVfZXJyb3IKK307CisKK3R5cGVkZWYgZW51bSByZXdyaXRlX3Jlc3VsdCAoKnJld3JpdGVfcGFyZW50X2ZuX3QpKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqKnBwKTsKKworaW50IHJld3JpdGVfcGFyZW50cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCSAgICBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCSAgICByZXdyaXRlX3BhcmVudF9mbl90IHJld3JpdGVfcGFyZW50KTsKKworLyoKKyAqIFRoZSBsb2cgbWFjaGluZXJ5IHNhdmVzIHRoZSBvcmlnaW5hbCBwYXJlbnQgbGlzdCBzbyB0aGF0CisgKiBnZXRfc2F2ZWRfcGFyZW50cygpIGNhbiBsYXRlciB0ZWxsIHdoYXQgdGhlIHJlYWwgcGFyZW50cyBvZiB0aGUKKyAqIGNvbW1pdHMgYXJlLCB3aGVuIGNvbW1pdC0+cGFyZW50cyBoYXMgYmVlbiBtb2RpZmllZCBieSBoaXN0b3J5CisgKiBzaW1waWZpY2F0aW9uLgorICoKKyAqIGdldF9zYXZlZF9wYXJlbnRzKCkgd2lsbCB0cmFuc3BhcmVudGx5IHJldHVybiBjb21taXQtPnBhcmVudHMgaWYKKyAqIGhpc3Rvcnkgc2ltcGxpZmljYXRpb24gaXMgb2ZmLgorICovCitzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9zYXZlZF9wYXJlbnRzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9ydW4tY29tbWFuZC5jIGIvcnVuLWNvbW1hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjNhNTdkCi0tLSAvZGV2L251bGwKKysrIGIvcnVuLWNvbW1hbmQuYwpAQCAtMCwwICsxLDE4NzkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJ0aHJlYWQtdXRpbHMuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisKK3ZvaWQgY2hpbGRfcHJvY2Vzc19pbml0KHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjaGlsZCkKK3sKKwltZW1zZXQoY2hpbGQsIDAsIHNpemVvZigqY2hpbGQpKTsKKwlhcmd2X2FycmF5X2luaXQoJmNoaWxkLT5hcmdzKTsKKwlhcmd2X2FycmF5X2luaXQoJmNoaWxkLT5lbnZfYXJyYXkpOworfQorCit2b2lkIGNoaWxkX3Byb2Nlc3NfY2xlYXIoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNoaWxkKQoreworCWFyZ3ZfYXJyYXlfY2xlYXIoJmNoaWxkLT5hcmdzKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZjaGlsZC0+ZW52X2FycmF5KTsKK30KKworc3RydWN0IGNoaWxkX3RvX2NsZWFuIHsKKwlwaWRfdCBwaWQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKnByb2Nlc3M7CisJc3RydWN0IGNoaWxkX3RvX2NsZWFuICpuZXh0OworfTsKK3N0YXRpYyBzdHJ1Y3QgY2hpbGRfdG9fY2xlYW4gKmNoaWxkcmVuX3RvX2NsZWFuOworc3RhdGljIGludCBpbnN0YWxsZWRfY2hpbGRfY2xlYW51cF9oYW5kbGVyOworCitzdGF0aWMgdm9pZCBjbGVhbnVwX2NoaWxkcmVuKGludCBzaWcsIGludCBpbl9zaWduYWwpCit7CisJc3RydWN0IGNoaWxkX3RvX2NsZWFuICpjaGlsZHJlbl90b193YWl0X2ZvciA9IE5VTEw7CisKKwl3aGlsZSAoY2hpbGRyZW5fdG9fY2xlYW4pIHsKKwkJc3RydWN0IGNoaWxkX3RvX2NsZWFuICpwID0gY2hpbGRyZW5fdG9fY2xlYW47CisJCWNoaWxkcmVuX3RvX2NsZWFuID0gcC0+bmV4dDsKKworCQlpZiAocC0+cHJvY2VzcyAmJiAhaW5fc2lnbmFsKSB7CisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqcHJvY2VzcyA9IHAtPnByb2Nlc3M7CisJCQlpZiAocHJvY2Vzcy0+Y2xlYW5fb25fZXhpdF9oYW5kbGVyKSB7CisJCQkJdHJhY2VfcHJpbnRmKAorCQkJCQkidHJhY2U6IHJ1bl9jb21tYW5kOiBydW5uaW5nIGV4aXQgaGFuZGxlciBmb3IgcGlkICUiCisJCQkJCVBSSXVNQVgsICh1aW50bWF4X3QpcC0+cGlkCisJCQkJKTsKKwkJCQlwcm9jZXNzLT5jbGVhbl9vbl9leGl0X2hhbmRsZXIocHJvY2Vzcyk7CisJCQl9CisJCX0KKworCQlraWxsKHAtPnBpZCwgc2lnKTsKKworCQlpZiAocC0+cHJvY2VzcyAmJiBwLT5wcm9jZXNzLT53YWl0X2FmdGVyX2NsZWFuKSB7CisJCQlwLT5uZXh0ID0gY2hpbGRyZW5fdG9fd2FpdF9mb3I7CisJCQljaGlsZHJlbl90b193YWl0X2ZvciA9IHA7CisJCX0gZWxzZSB7CisJCQlpZiAoIWluX3NpZ25hbCkKKwkJCQlmcmVlKHApOworCQl9CisJfQorCisJd2hpbGUgKGNoaWxkcmVuX3RvX3dhaXRfZm9yKSB7CisJCXN0cnVjdCBjaGlsZF90b19jbGVhbiAqcCA9IGNoaWxkcmVuX3RvX3dhaXRfZm9yOworCQljaGlsZHJlbl90b193YWl0X2ZvciA9IHAtPm5leHQ7CisKKwkJd2hpbGUgKHdhaXRwaWQocC0+cGlkLCBOVUxMLCAwKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpCisJCQk7IC8qIHNwaW4gd2FpdGluZyBmb3IgcHJvY2VzcyBleGl0IG9yIGVycm9yICovCisKKwkJaWYgKCFpbl9zaWduYWwpCisJCQlmcmVlKHApOworCX0KK30KKworc3RhdGljIHZvaWQgY2xlYW51cF9jaGlsZHJlbl9vbl9zaWduYWwoaW50IHNpZykKK3sKKwljbGVhbnVwX2NoaWxkcmVuKHNpZywgMSk7CisJc2lnY2hhaW5fcG9wKHNpZyk7CisJcmFpc2Uoc2lnKTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF9jaGlsZHJlbl9vbl9leGl0KHZvaWQpCit7CisJY2xlYW51cF9jaGlsZHJlbihTSUdURVJNLCAwKTsKK30KKworc3RhdGljIHZvaWQgbWFya19jaGlsZF9mb3JfY2xlYW51cChwaWRfdCBwaWQsIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpwcm9jZXNzKQoreworCXN0cnVjdCBjaGlsZF90b19jbGVhbiAqcCA9IHhtYWxsb2Moc2l6ZW9mKCpwKSk7CisJcC0+cGlkID0gcGlkOworCXAtPnByb2Nlc3MgPSBwcm9jZXNzOworCXAtPm5leHQgPSBjaGlsZHJlbl90b19jbGVhbjsKKwljaGlsZHJlbl90b19jbGVhbiA9IHA7CisKKwlpZiAoIWluc3RhbGxlZF9jaGlsZF9jbGVhbnVwX2hhbmRsZXIpIHsKKwkJYXRleGl0KGNsZWFudXBfY2hpbGRyZW5fb25fZXhpdCk7CisJCXNpZ2NoYWluX3B1c2hfY29tbW9uKGNsZWFudXBfY2hpbGRyZW5fb25fc2lnbmFsKTsKKwkJaW5zdGFsbGVkX2NoaWxkX2NsZWFudXBfaGFuZGxlciA9IDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBjbGVhcl9jaGlsZF9mb3JfY2xlYW51cChwaWRfdCBwaWQpCit7CisJc3RydWN0IGNoaWxkX3RvX2NsZWFuICoqcHA7CisKKwlmb3IgKHBwID0gJmNoaWxkcmVuX3RvX2NsZWFuOyAqcHA7IHBwID0gJigqcHApLT5uZXh0KSB7CisJCXN0cnVjdCBjaGlsZF90b19jbGVhbiAqY2xlYW5fbWUgPSAqcHA7CisKKwkJaWYgKGNsZWFuX21lLT5waWQgPT0gcGlkKSB7CisJCQkqcHAgPSBjbGVhbl9tZS0+bmV4dDsKKwkJCWZyZWUoY2xlYW5fbWUpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xvc2VfcGFpcihpbnQgZmRbMl0pCit7CisJY2xvc2UoZmRbMF0pOworCWNsb3NlKGZkWzFdKTsKK30KKworaW50IGlzX2V4ZWN1dGFibGUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChzdGF0KG5hbWUsICZzdCkgfHwgLyogc3RhdCwgbm90IGxzdGF0ICovCisJICAgICFTX0lTUkVHKHN0LnN0X21vZGUpKQorCQlyZXR1cm4gMDsKKworI2lmIGRlZmluZWQoR0lUX1dJTkRPV1NfTkFUSVZFKQorCS8qCisJICogT24gV2luZG93cyB0aGVyZSBpcyBubyBleGVjdXRhYmxlIGJpdC4gVGhlIGZpbGUgZXh0ZW5zaW9uCisJICogaW5kaWNhdGVzIHdoZXRoZXIgaXQgY2FuIGJlIHJ1biBhcyBhbiBleGVjdXRhYmxlLCBhbmQgR2l0CisJICogaGFzIHNwZWNpYWwtaGFuZGxpbmcgdG8gZGV0ZWN0IHNjcmlwdHMgYW5kIGxhdW5jaCB0aGVtCisJICogdGhyb3VnaCB0aGUgaW5kaWNhdGVkIHNjcmlwdCBpbnRlcnByZXRlci4gV2UgdGVzdCBmb3IgdGhlCisJICogZmlsZSBleHRlbnNpb24gZmlyc3QgYmVjYXVzZSB2aXJ1cyBzY2FubmVycyBtYXkgbWFrZQorCSAqIGl0IHF1aXRlIGV4cGVuc2l2ZSB0byBvcGVuIG1hbnkgZmlsZXMuCisJICovCisJaWYgKGVuZHNfd2l0aChuYW1lLCAiLmV4ZSIpKQorCQlyZXR1cm4gU19JWFVTUjsKKworeworCS8qCisJICogTm93IHRoYXQgd2Uga25vdyBpdCBkb2VzIG5vdCBoYXZlIGFuIGV4ZWN1dGFibGUgZXh0ZW5zaW9uLAorCSAqIHBlZWsgaW50byB0aGUgZmlsZSBpbnN0ZWFkLgorCSAqLworCWNoYXIgYnVmWzNdID0geyAwIH07CisJaW50IG47CisJaW50IGZkID0gb3BlbihuYW1lLCBPX1JET05MWSk7CisJc3Quc3RfbW9kZSAmPSB+U19JWFVTUjsKKwlpZiAoZmQgPj0gMCkgeworCQluID0gcmVhZChmZCwgYnVmLCAyKTsKKwkJaWYgKG4gPT0gMikKKwkJCS8qIGxvb2sgZm9yIGEgc2hlLWJhbmcgKi8KKwkJCWlmICghc3RyY21wKGJ1ZiwgIiMhIikpCisJCQkJc3Quc3RfbW9kZSB8PSBTX0lYVVNSOworCQljbG9zZShmZCk7CisJfQorfQorI2VuZGlmCisJcmV0dXJuIHN0LnN0X21vZGUgJiBTX0lYVVNSOworfQorCisvKgorICogU2VhcmNoICRQQVRIIGZvciBhIGNvbW1hbmQuICBUaGlzIGVtdWxhdGVzIHRoZSBwYXRoIHNlYXJjaCB0aGF0CisgKiBleGVjdnAgd291bGQgcGVyZm9ybSwgd2l0aG91dCBhY3R1YWxseSBleGVjdXRpbmcgdGhlIGNvbW1hbmQgc28gaXQKKyAqIGNhbiBiZSB1c2VkIGJlZm9yZSBmb3JrKCkgdG8gcHJlcGFyZSB0byBydW4gYSBjb21tYW5kIHVzaW5nCisgKiBleGVjdmUoKSBvciBhZnRlciBleGVjdnAoKSB0byBkaWFnbm9zZSB3aHkgaXQgZmFpbGVkLgorICoKKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSB0aGF0IGZpbGUgY29udGFpbnMgbm8gZGlyZWN0b3J5CisgKiBzZXBhcmF0b3JzLgorICoKKyAqIFJldHVybnMgdGhlIHBhdGggdG8gdGhlIGNvbW1hbmQsIGFzIGZvdW5kIGluICRQQVRIIG9yIE5VTEwgaWYgdGhlCisgKiBjb21tYW5kIGNvdWxkIG5vdCBiZSBmb3VuZC4gIFRoZSBjYWxsZXIgaW5oZXJpdHMgb3duZXJzaGlwIG9mIHRoZSBtZW1vcnkKKyAqIHVzZWQgdG8gc3RvcmUgdGhlIHJlc3VsdGFudCBwYXRoLgorICoKKyAqIFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIFdpbmRvd3MsIHdoZXJlIHRoZSAkUEFUSCBzZWFyY2ggcnVsZXMKKyAqIGFyZSBtb3JlIGNvbXBsaWNhdGVkIChlLmcuLCBhIHNlYXJjaCBmb3IgImZvbyIgc2hvdWxkIGZpbmQKKyAqICJmb28uZXhlIikuCisgKi8KK3N0YXRpYyBjaGFyICpsb2NhdGVfaW5fUEFUSChjb25zdCBjaGFyICpmaWxlKQoreworCWNvbnN0IGNoYXIgKnAgPSBnZXRlbnYoIlBBVEgiKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKCFwIHx8ICEqcCkKKwkJcmV0dXJuIE5VTEw7CisKKwl3aGlsZSAoMSkgeworCQljb25zdCBjaGFyICplbmQgPSBzdHJjaHJudWwocCwgJzonKTsKKworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisKKwkJLyogUE9TSVggc3BlY2lmaWVzIGFuIGVtcHR5IGVudHJ5IGFzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gKi8KKwkJaWYgKGVuZCAhPSBwKSB7CisJCQlzdHJidWZfYWRkKCZidWYsIHAsIGVuZCAtIHApOworCQkJc3RyYnVmX2FkZGNoKCZidWYsICcvJyk7CisJCX0KKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBmaWxlKTsKKworCQlpZiAoaXNfZXhlY3V0YWJsZShidWYuYnVmKSkKKwkJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJCWlmICghKmVuZCkKKwkJCWJyZWFrOworCQlwID0gZW5kICsgMTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBleGlzdHNfaW5fUEFUSChjb25zdCBjaGFyICpmaWxlKQoreworCWNoYXIgKnIgPSBsb2NhdGVfaW5fUEFUSChmaWxlKTsKKwlpbnQgZm91bmQgPSByICE9IE5VTEw7CisJZnJlZShyKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKK2ludCBzYW5lX2V4ZWN2cChjb25zdCBjaGFyICpmaWxlLCBjaGFyICogY29uc3QgYXJndltdKQoreworI2lmbmRlZiBHSVRfV0lORE9XU19OQVRJVkUKKwkvKgorCSAqIGV4ZWN2cCgpIGRvZXNuJ3QgcmV0dXJuLCBzbyB3ZSBhbGwgd2UgY2FuIGRvIGlzIHRlbGwgdHJhY2UyCisJICogd2hhdCB3ZSBhcmUgYWJvdXQgdG8gZG8gYW5kIGxldCBpdCBsZWF2ZSBhIGhpbnQgaW4gdGhlIGxvZworCSAqICh1bmxlc3Mgb2YgY291cnNlIHRoZSBleGVjdnAoKSBmYWlscykuCisJICoKKwkgKiB3ZSBza2lwIHRoaXMgZm9yIFdpbmRvd3MgYmVjYXVzZSB0aGUgY29tcGF0IGxheWVyIGFscmVhZHkKKwkgKiBoYXMgdG8gZW11bGF0ZSB0aGUgZXhlY3ZwKCkgY2FsbCBhbnl3YXkuCisJICovCisJaW50IGV4ZWNfaWQgPSB0cmFjZTJfZXhlYyhmaWxlLCAoY29uc3QgY2hhciAqKilhcmd2KTsKKyNlbmRpZgorCisJaWYgKCFleGVjdnAoZmlsZSwgYXJndikpCisJCXJldHVybiAwOyAvKiBjYW5ub3QgaGFwcGVuIDstKSAqLworCisjaWZuZGVmIEdJVF9XSU5ET1dTX05BVElWRQorCXsKKwkJaW50IGVjID0gZXJybm87CisJCXRyYWNlMl9leGVjX3Jlc3VsdChleGVjX2lkLCBlYyk7CisJCWVycm5vID0gZWM7CisJfQorI2VuZGlmCisKKwkvKgorCSAqIFdoZW4gYSBjb21tYW5kIGNhbid0IGJlIGZvdW5kIGJlY2F1c2Ugb25lIG9mIHRoZSBkaXJlY3RvcmllcworCSAqIGxpc3RlZCBpbiAkUEFUSCBpcyB1bnNlYXJjaGFibGUsIGV4ZWN2cCByZXBvcnRzIEVBQ0NFUywgYnV0CisJICogY2FyZWZ1bCB1c2FiaWxpdHkgdGVzdGluZyAocmVhZDogYW5hbHlzaXMgb2Ygb2NjYXNpb25hbCBidWcKKwkgKiByZXBvcnRzKSByZXZlYWxzIHRoYXQgIk5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiIGlzIG1vcmUKKwkgKiBpbnR1aXRpdmUuCisJICoKKwkgKiBXZSBhdm9pZCBjb21tYW5kcyB3aXRoICIvIiwgYmVjYXVzZSBleGVjdnAgd2lsbCBub3QgZG8gJFBBVEgKKwkgKiBsb29rdXBzIGluIHRoYXQgY2FzZS4KKwkgKgorCSAqIFRoZSByZWFzc2lnbm1lbnQgb2YgRUFDQ0VTIHRvIGVycm5vIGxvb2tzIGxpa2UgYSBuby1vcCBiZWxvdywKKwkgKiBidXQgd2UgbmVlZCB0byBwcm90ZWN0IGFnYWluc3QgZXhpc3RzX2luX1BBVEggb3ZlcndyaXRpbmcgZXJybm8uCisJICovCisJaWYgKGVycm5vID09IEVBQ0NFUyAmJiAhc3RyY2hyKGZpbGUsICcvJykpCisJCWVycm5vID0gZXhpc3RzX2luX1BBVEgoZmlsZSkgPyBFQUNDRVMgOiBFTk9FTlQ7CisJZWxzZSBpZiAoZXJybm8gPT0gRU5PVERJUiAmJiAhc3RyY2hyKGZpbGUsICcvJykpCisJCWVycm5vID0gRU5PRU5UOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKipwcmVwYXJlX3NoZWxsX2NtZChzdHJ1Y3QgYXJndl9hcnJheSAqb3V0LCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpZiAoIWFyZ3ZbMF0pCisJCUJVRygic2hlbGwgY29tbWFuZCBpcyBlbXB0eSIpOworCisJaWYgKHN0cmNzcG4oYXJndlswXSwgInwmOzw+KCkkYFxcXCInIFx0XG4qP1sjfj0lIikgIT0gc3RybGVuKGFyZ3ZbMF0pKSB7CisjaWZuZGVmIEdJVF9XSU5ET1dTX05BVElWRQorCQlhcmd2X2FycmF5X3B1c2gob3V0LCBTSEVMTF9QQVRIKTsKKyNlbHNlCisJCWFyZ3ZfYXJyYXlfcHVzaChvdXQsICJzaCIpOworI2VuZGlmCisJCWFyZ3ZfYXJyYXlfcHVzaChvdXQsICItYyIpOworCisJCS8qCisJCSAqIElmIHdlIGhhdmUgbm8gZXh0cmEgYXJndW1lbnRzLCB3ZSBkbyBub3QgZXZlbiBuZWVkIHRvCisJCSAqIGJvdGhlciB3aXRoIHRoZSAiJEAiIG1hZ2ljLgorCQkgKi8KKwkJaWYgKCFhcmd2WzFdKQorCQkJYXJndl9hcnJheV9wdXNoKG91dCwgYXJndlswXSk7CisJCWVsc2UKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYob3V0LCAiJXMgXCIkQFwiIiwgYXJndlswXSk7CisJfQorCisJYXJndl9hcnJheV9wdXNodihvdXQsIGFyZ3YpOworCXJldHVybiBvdXQtPmFyZ3Y7Cit9CisKKyNpZm5kZWYgR0lUX1dJTkRPV1NfTkFUSVZFCitzdGF0aWMgaW50IGNoaWxkX25vdGlmaWVyID0gLTE7CisKK2VudW0gY2hpbGRfZXJyY29kZSB7CisJQ0hJTERfRVJSX0NIRElSLAorCUNISUxEX0VSUl9EVVAyLAorCUNISUxEX0VSUl9DTE9TRSwKKwlDSElMRF9FUlJfU0lHUFJPQ01BU0ssCisJQ0hJTERfRVJSX0VOT0VOVCwKKwlDSElMRF9FUlJfU0lMRU5ULAorCUNISUxEX0VSUl9FUlJOTworfTsKKworc3RydWN0IGNoaWxkX2VyciB7CisJZW51bSBjaGlsZF9lcnJjb2RlIGVycjsKKwlpbnQgc3lzZXJyOyAvKiBlcnJubyAqLworfTsKKworc3RhdGljIHZvaWQgY2hpbGRfZGllKGVudW0gY2hpbGRfZXJyY29kZSBlcnIpCit7CisJc3RydWN0IGNoaWxkX2VyciBidWY7CisKKwlidWYuZXJyID0gZXJyOworCWJ1Zi5zeXNlcnIgPSBlcnJubzsKKworCS8qIHdyaXRlKDIpIG9uIGJ1ZiBzbWFsbGVyIHRoYW4gUElQRV9CVUYgKG1pbiA1MTIpIGlzIGF0b21pYzogKi8KKwl4d3JpdGUoY2hpbGRfbm90aWZpZXIsICZidWYsIHNpemVvZihidWYpKTsKKwlfZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgY2hpbGRfZHVwMihpbnQgZmQsIGludCB0bykKK3sKKwlpZiAoZHVwMihmZCwgdG8pIDwgMCkKKwkJY2hpbGRfZGllKENISUxEX0VSUl9EVVAyKTsKK30KKworc3RhdGljIHZvaWQgY2hpbGRfY2xvc2UoaW50IGZkKQoreworCWlmIChjbG9zZShmZCkpCisJCWNoaWxkX2RpZShDSElMRF9FUlJfQ0xPU0UpOworfQorCitzdGF0aWMgdm9pZCBjaGlsZF9jbG9zZV9wYWlyKGludCBmZFsyXSkKK3sKKwljaGlsZF9jbG9zZShmZFswXSk7CisJY2hpbGRfY2xvc2UoZmRbMV0pOworfQorCisvKgorICogcGFyZW50IHdpbGwgbWFrZSBpdCBsb29rIGxpa2UgdGhlIGNoaWxkIHNwZXdlZCBhIGZhdGFsIGVycm9yIGFuZCBkaWVkCisgKiB0aGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IGNoYW5nZXMgdG8gdDAwNjEuCisgKi8KK3N0YXRpYyB2b2lkIGZha2VfZmF0YWwoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwl2cmVwb3J0ZigiZmF0YWw6ICIsIGVyciwgcGFyYW1zKTsKK30KKworc3RhdGljIHZvaWQgY2hpbGRfZXJyb3JfZm4oY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwljb25zdCBjaGFyIG1zZ1tdID0gImVycm9yKCkgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gY2hpbGRcbiI7CisJeHdyaXRlKDIsIG1zZywgc2l6ZW9mKG1zZykgLSAxKTsKK30KKworc3RhdGljIHZvaWQgY2hpbGRfd2Fybl9mbihjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCWNvbnN0IGNoYXIgbXNnW10gPSAid2FybigpIHNob3VsZCBub3QgYmUgY2FsbGVkIGluIGNoaWxkXG4iOworCXh3cml0ZSgyLCBtc2csIHNpemVvZihtc2cpIC0gMSk7Cit9CisKK3N0YXRpYyB2b2lkIE5PUkVUVVJOIGNoaWxkX2RpZV9mbihjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCWNvbnN0IGNoYXIgbXNnW10gPSAiZGllKCkgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gY2hpbGRcbiI7CisJeHdyaXRlKDIsIG1zZywgc2l6ZW9mKG1zZykgLSAxKTsKKwlfZXhpdCgyKTsKK30KKworLyogdGhpcyBydW5zIGluIHRoZSBwYXJlbnQgcHJvY2VzcyAqLworc3RhdGljIHZvaWQgY2hpbGRfZXJyX3NwZXcoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCwgc3RydWN0IGNoaWxkX2VyciAqY2VycikKK3sKKwlzdGF0aWMgdm9pZCAoKm9sZF9lcnJmbikoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcyk7CisKKwlvbGRfZXJyZm4gPSBnZXRfZXJyb3Jfcm91dGluZSgpOworCXNldF9lcnJvcl9yb3V0aW5lKGZha2VfZmF0YWwpOworCWVycm5vID0gY2Vyci0+c3lzZXJyOworCisJc3dpdGNoIChjZXJyLT5lcnIpIHsKKwljYXNlIENISUxEX0VSUl9DSERJUjoKKwkJZXJyb3JfZXJybm8oImV4ZWMgJyVzJzogY2QgdG8gJyVzJyBmYWlsZWQiLAorCQkJICAgIGNtZC0+YXJndlswXSwgY21kLT5kaXIpOworCQlicmVhazsKKwljYXNlIENISUxEX0VSUl9EVVAyOgorCQllcnJvcl9lcnJubygiZHVwMigpIGluIGNoaWxkIGZhaWxlZCIpOworCQlicmVhazsKKwljYXNlIENISUxEX0VSUl9DTE9TRToKKwkJZXJyb3JfZXJybm8oImNsb3NlKCkgaW4gY2hpbGQgZmFpbGVkIik7CisJCWJyZWFrOworCWNhc2UgQ0hJTERfRVJSX1NJR1BST0NNQVNLOgorCQllcnJvcl9lcnJubygic2lncHJvY21hc2sgZmFpbGVkIHJlc3RvcmluZyBzaWduYWxzIik7CisJCWJyZWFrOworCWNhc2UgQ0hJTERfRVJSX0VOT0VOVDoKKwkJZXJyb3JfZXJybm8oImNhbm5vdCBydW4gJXMiLCBjbWQtPmFyZ3ZbMF0pOworCQlicmVhazsKKwljYXNlIENISUxEX0VSUl9TSUxFTlQ6CisJCWJyZWFrOworCWNhc2UgQ0hJTERfRVJSX0VSUk5POgorCQllcnJvcl9lcnJubygiY2Fubm90IGV4ZWMgJyVzJyIsIGNtZC0+YXJndlswXSk7CisJCWJyZWFrOworCX0KKwlzZXRfZXJyb3Jfcm91dGluZShvbGRfZXJyZm4pOworfQorCitzdGF0aWMgaW50IHByZXBhcmVfY21kKHN0cnVjdCBhcmd2X2FycmF5ICpvdXQsIGNvbnN0IHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQpCit7CisJaWYgKCFjbWQtPmFyZ3ZbMF0pCisJCUJVRygiY29tbWFuZCBpcyBlbXB0eSIpOworCisJLyoKKwkgKiBBZGQgU0hFTExfUEFUSCBzbyBpbiB0aGUgZXZlbnQgZXhlYyBmYWlscyB3aXRoIEVOT0VYRUMgd2UgY2FuCisJICogYXR0ZW1wdCB0byBpbnRlcnByZXQgdGhlIGNvbW1hbmQgd2l0aCAnc2gnLgorCSAqLworCWFyZ3ZfYXJyYXlfcHVzaChvdXQsIFNIRUxMX1BBVEgpOworCisJaWYgKGNtZC0+Z2l0X2NtZCkgeworCQlwcmVwYXJlX2dpdF9jbWQob3V0LCBjbWQtPmFyZ3YpOworCX0gZWxzZSBpZiAoY21kLT51c2Vfc2hlbGwpIHsKKwkJcHJlcGFyZV9zaGVsbF9jbWQob3V0LCBjbWQtPmFyZ3YpOworCX0gZWxzZSB7CisJCWFyZ3ZfYXJyYXlfcHVzaHYob3V0LCBjbWQtPmFyZ3YpOworCX0KKworCS8qCisJICogSWYgdGhlcmUgYXJlIG5vIGRpciBzZXBhcmF0b3IgY2hhcmFjdGVycyBpbiB0aGUgY29tbWFuZCB0aGVuIHBlcmZvcm0KKwkgKiBhIHBhdGggbG9va3VwIGFuZCB1c2UgdGhlIHJlc29sdmVkIHBhdGggYXMgdGhlIGNvbW1hbmQgdG8gZXhlYy4gSWYKKwkgKiB0aGVyZSBhcmUgZGlyIHNlcGFyYXRvciBjaGFyYWN0ZXJzLCB3ZSBoYXZlIGV4ZWMgYXR0ZW1wdCB0byBpbnZva2UKKwkgKiB0aGUgY29tbWFuZCBkaXJlY3RseS4KKwkgKi8KKwlpZiAoIWhhc19kaXJfc2VwKG91dC0+YXJndlsxXSkpIHsKKwkJY2hhciAqcHJvZ3JhbSA9IGxvY2F0ZV9pbl9QQVRIKG91dC0+YXJndlsxXSk7CisJCWlmIChwcm9ncmFtKSB7CisJCQlmcmVlKChjaGFyICopb3V0LT5hcmd2WzFdKTsKKwkJCW91dC0+YXJndlsxXSA9IHByb2dyYW07CisJCX0gZWxzZSB7CisJCQlhcmd2X2FycmF5X2NsZWFyKG91dCk7CisJCQllcnJubyA9IEVOT0VOVDsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqKnByZXBfY2hpbGRlbnYoY29uc3QgY2hhciAqY29uc3QgKmRlbHRhZW52KQoreworCWV4dGVybiBjaGFyICoqZW52aXJvbjsKKwljaGFyICoqY2hpbGRlbnY7CisJc3RydWN0IHN0cmluZ19saXN0IGVudiA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJidWYga2V5ID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqY29uc3QgKnA7CisJaW50IGk7CisKKwkvKiBDb25zdHJ1Y3QgYSBzb3J0ZWQgc3RyaW5nIGxpc3QgY29uc2lzdGluZyBvZiB0aGUgY3VycmVudCBlbnZpcm9uICovCisJZm9yIChwID0gKGNvbnN0IGNoYXIgKmNvbnN0ICopIGVudmlyb247IHAgJiYgKnA7IHArKykgeworCQljb25zdCBjaGFyICplcXVhbHMgPSBzdHJjaHIoKnAsICc9Jyk7CisKKwkJaWYgKGVxdWFscykgeworCQkJc3RyYnVmX3Jlc2V0KCZrZXkpOworCQkJc3RyYnVmX2FkZCgma2V5LCAqcCwgZXF1YWxzIC0gKnApOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZlbnYsIGtleS5idWYpLT51dGlsID0gKHZvaWQgKikgKnA7CisJCX0gZWxzZSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmVudiwgKnApLT51dGlsID0gKHZvaWQgKikgKnA7CisJCX0KKwl9CisJc3RyaW5nX2xpc3Rfc29ydCgmZW52KTsKKworCS8qIE1lcmdlIGluICdkZWx0YWVudicgd2l0aCB0aGUgY3VycmVudCBlbnZpcm9uICovCisJZm9yIChwID0gZGVsdGFlbnY7IHAgJiYgKnA7IHArKykgeworCQljb25zdCBjaGFyICplcXVhbHMgPSBzdHJjaHIoKnAsICc9Jyk7CisKKwkJaWYgKGVxdWFscykgeworCQkJLyogKCdrZXk9dmFsdWUnKSwgaW5zZXJ0IG9yIHJlcGxhY2UgZW50cnkgKi8KKwkJCXN0cmJ1Zl9yZXNldCgma2V5KTsKKwkJCXN0cmJ1Zl9hZGQoJmtleSwgKnAsIGVxdWFscyAtICpwKTsKKwkJCXN0cmluZ19saXN0X2luc2VydCgmZW52LCBrZXkuYnVmKS0+dXRpbCA9ICh2b2lkICopICpwOworCQl9IGVsc2UgeworCQkJLyogb3RoZXJ3aXNlICgna2V5JykgcmVtb3ZlIGV4aXN0aW5nIGVudHJ5ICovCisJCQlzdHJpbmdfbGlzdF9yZW1vdmUoJmVudiwgKnAsIDApOworCQl9CisJfQorCisJLyogQ3JlYXRlIGFuIGFycmF5IG9mICdjaGFyIConIHRvIGJlIHVzZWQgYXMgdGhlIGNoaWxkZW52ICovCisJQUxMT0NfQVJSQVkoY2hpbGRlbnYsIGVudi5uciArIDEpOworCWZvciAoaSA9IDA7IGkgPCBlbnYubnI7IGkrKykKKwkJY2hpbGRlbnZbaV0gPSBlbnYuaXRlbXNbaV0udXRpbDsKKwljaGlsZGVudltlbnYubnJdID0gTlVMTDsKKworCXN0cmluZ19saXN0X2NsZWFyKCZlbnYsIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOworCXJldHVybiBjaGlsZGVudjsKK30KKworc3RydWN0IGF0Zm9ya19zdGF0ZSB7CisjaWZuZGVmIE5PX1BUSFJFQURTCisJaW50IGNzOworI2VuZGlmCisJc2lnc2V0X3Qgb2xkOworfTsKKworI2RlZmluZSBDSEVDS19CVUcoZXJyLCBtc2cpIFwKKwlkbyB7IFwKKwkJaW50IGUgPSAoZXJyKTsgXAorCQlpZiAoZSkgXAorCQkJQlVHKCIlczogJXMiLCBtc2csIHN0cmVycm9yKGUpKTsgXAorCX0gd2hpbGUoMCkKKworc3RhdGljIHZvaWQgYXRmb3JrX3ByZXBhcmUoc3RydWN0IGF0Zm9ya19zdGF0ZSAqYXMpCit7CisJc2lnc2V0X3QgYWxsOworCisJaWYgKHNpZ2ZpbGxzZXQoJmFsbCkpCisJCWRpZV9lcnJubygic2lnZmlsbHNldCIpOworI2lmZGVmIE5PX1BUSFJFQURTCisJaWYgKHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmYWxsLCAmYXMtPm9sZCkpCisJCWRpZV9lcnJubygic2lncHJvY21hc2siKTsKKyNlbHNlCisJQ0hFQ0tfQlVHKHB0aHJlYWRfc2lnbWFzayhTSUdfU0VUTUFTSywgJmFsbCwgJmFzLT5vbGQpLAorCQkiYmxvY2tpbmcgYWxsIHNpZ25hbHMiKTsKKwlDSEVDS19CVUcocHRocmVhZF9zZXRjYW5jZWxzdGF0ZShQVEhSRUFEX0NBTkNFTF9ESVNBQkxFLCAmYXMtPmNzKSwKKwkJImRpc2FibGluZyBjYW5jZWxsYXRpb24iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBhdGZvcmtfcGFyZW50KHN0cnVjdCBhdGZvcmtfc3RhdGUgKmFzKQoreworI2lmZGVmIE5PX1BUSFJFQURTCisJaWYgKHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmYXMtPm9sZCwgTlVMTCkpCisJCWRpZV9lcnJubygic2lncHJvY21hc2siKTsKKyNlbHNlCisJQ0hFQ0tfQlVHKHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUoYXMtPmNzLCBOVUxMKSwKKwkJInJlLWVuYWJsaW5nIGNhbmNlbGxhdGlvbiIpOworCUNIRUNLX0JVRyhwdGhyZWFkX3NpZ21hc2soU0lHX1NFVE1BU0ssICZhcy0+b2xkLCBOVUxMKSwKKwkJInJlc3RvcmluZyBzaWduYWwgbWFzayIpOworI2VuZGlmCit9CisjZW5kaWYgLyogR0lUX1dJTkRPV1NfTkFUSVZFICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY2xvZXhlYyhpbnQgZmQpCit7CisJaW50IGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkQpOworCWlmIChmbGFncyA+PSAwKQorCQlmY250bChmZCwgRl9TRVRGRCwgZmxhZ3MgfCBGRF9DTE9FWEVDKTsKK30KKworc3RhdGljIGludCB3YWl0X29yX3doaW5lKHBpZF90IHBpZCwgY29uc3QgY2hhciAqYXJndjAsIGludCBpbl9zaWduYWwpCit7CisJaW50IHN0YXR1cywgY29kZSA9IC0xOworCXBpZF90IHdhaXRpbmc7CisJaW50IGZhaWxlZF9lcnJubyA9IDA7CisKKwl3aGlsZSAoKHdhaXRpbmcgPSB3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCkpIDwgMCAmJiBlcnJubyA9PSBFSU5UUikKKwkJOwkvKiBub3RoaW5nICovCisJaWYgKGluX3NpZ25hbCkKKwkJcmV0dXJuIDA7CisKKwlpZiAod2FpdGluZyA8IDApIHsKKwkJZmFpbGVkX2Vycm5vID0gZXJybm87CisJCWVycm9yX2Vycm5vKCJ3YWl0cGlkIGZvciAlcyBmYWlsZWQiLCBhcmd2MCk7CisJfSBlbHNlIGlmICh3YWl0aW5nICE9IHBpZCkgeworCQllcnJvcigid2FpdHBpZCBpcyBjb25mdXNlZCAoJXMpIiwgYXJndjApOworCX0gZWxzZSBpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkgeworCQljb2RlID0gV1RFUk1TSUcoc3RhdHVzKTsKKwkJaWYgKGNvZGUgIT0gU0lHSU5UICYmIGNvZGUgIT0gU0lHUVVJVCAmJiBjb2RlICE9IFNJR1BJUEUpCisJCQllcnJvcigiJXMgZGllZCBvZiBzaWduYWwgJWQiLCBhcmd2MCwgY29kZSk7CisJCS8qCisJCSAqIFRoaXMgcmV0dXJuIHZhbHVlIGlzIGNob3NlbiBzbyB0aGF0IGNvZGUgJiAweGZmCisJCSAqIG1pbWljcyB0aGUgZXhpdCBjb2RlIHRoYXQgYSBQT1NJWCBzaGVsbCB3b3VsZCByZXBvcnQgZm9yCisJCSAqIGEgcHJvZ3JhbSB0aGF0IGRpZWQgZnJvbSB0aGlzIHNpZ25hbC4KKwkJICovCisJCWNvZGUgKz0gMTI4OworCX0gZWxzZSBpZiAoV0lGRVhJVEVEKHN0YXR1cykpIHsKKwkJY29kZSA9IFdFWElUU1RBVFVTKHN0YXR1cyk7CisJfSBlbHNlIHsKKwkJZXJyb3IoIndhaXRwaWQgaXMgY29uZnVzZWQgKCVzKSIsIGFyZ3YwKTsKKwl9CisKKwljbGVhcl9jaGlsZF9mb3JfY2xlYW51cChwaWQpOworCisJZXJybm8gPSBmYWlsZWRfZXJybm87CisJcmV0dXJuIGNvZGU7Cit9CisKK3N0YXRpYyB2b2lkIHRyYWNlX2FkZF9lbnYoc3RydWN0IHN0cmJ1ZiAqZHN0LCBjb25zdCBjaGFyICpjb25zdCAqZGVsdGFlbnYpCit7CisJc3RydWN0IHN0cmluZ19saXN0IGVudnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwljb25zdCBjaGFyICpjb25zdCAqZTsKKwlpbnQgaTsKKwlpbnQgcHJpbnRlZF91bnNldCA9IDA7CisKKwkvKiBMYXN0IG9uZSB3aW5zLCBzZWUgcnVuLWNvbW1hbmQuYzpwcmVwX2NoaWxkZW52KCkgZm9yIGNvbnRleHQgKi8KKwlmb3IgKGUgPSBkZWx0YWVudjsgZSAmJiAqZTsgZSsrKSB7CisJCXN0cnVjdCBzdHJidWYga2V5ID0gU1RSQlVGX0lOSVQ7CisJCWNoYXIgKmVxdWFscyA9IHN0cmNocigqZSwgJz0nKTsKKworCQlpZiAoZXF1YWxzKSB7CisJCQlzdHJidWZfYWRkKCZrZXksICplLCBlcXVhbHMgLSAqZSk7CisJCQlzdHJpbmdfbGlzdF9pbnNlcnQoJmVudnMsIGtleS5idWYpLT51dGlsID0gZXF1YWxzICsgMTsKKwkJfSBlbHNlIHsKKwkJCXN0cmluZ19saXN0X2luc2VydCgmZW52cywgKmUpLT51dGlsID0gTlVMTDsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgma2V5KTsKKwl9CisKKwkvKiAidW5zZXQgWCBZLi4uOyIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZW52cy5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnZhciA9IGVudnMuaXRlbXNbaV0uc3RyaW5nOworCQljb25zdCBjaGFyICp2YWwgPSBlbnZzLml0ZW1zW2ldLnV0aWw7CisKKwkJaWYgKHZhbCB8fCAhZ2V0ZW52KHZhcikpCisJCQljb250aW51ZTsKKworCQlpZiAoIXByaW50ZWRfdW5zZXQpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoZHN0LCAiIHVuc2V0Iik7CisJCQlwcmludGVkX3Vuc2V0ID0gMTsKKwkJfQorCQlzdHJidWZfYWRkZihkc3QsICIgJXMiLCB2YXIpOworCX0KKwlpZiAocHJpbnRlZF91bnNldCkKKwkJc3RyYnVmX2FkZGNoKGRzdCwgJzsnKTsKKworCS8qIC4uLiBmb2xsb3dlZCBieSAiQT1CIEM9RCAuLi4iICovCisJZm9yIChpID0gMDsgaSA8IGVudnMubnI7IGkrKykgeworCQljb25zdCBjaGFyICp2YXIgPSBlbnZzLml0ZW1zW2ldLnN0cmluZzsKKwkJY29uc3QgY2hhciAqdmFsID0gZW52cy5pdGVtc1tpXS51dGlsOworCQljb25zdCBjaGFyICpvbGR2YWw7CisKKwkJaWYgKCF2YWwpCisJCQljb250aW51ZTsKKworCQlvbGR2YWwgPSBnZXRlbnYodmFyKTsKKwkJaWYgKG9sZHZhbCAmJiAhc3RyY21wKHZhbCwgb2xkdmFsKSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmJ1Zl9hZGRmKGRzdCwgIiAlcz0iLCB2YXIpOworCQlzcV9xdW90ZV9idWZfcHJldHR5KGRzdCwgdmFsKTsKKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJmVudnMsIDApOworfQorCitzdGF0aWMgdm9pZCB0cmFjZV9ydW5fY29tbWFuZChjb25zdCBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY3ApCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghdHJhY2Vfd2FudCgmdHJhY2VfZGVmYXVsdF9rZXkpKQorCQlyZXR1cm47CisKKwlzdHJidWZfYWRkc3RyKCZidWYsICJ0cmFjZTogcnVuX2NvbW1hbmQ6Iik7CisJaWYgKGNwLT5kaXIpIHsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAiIGNkICIpOworCQlzcV9xdW90ZV9idWZfcHJldHR5KCZidWYsIGNwLT5kaXIpOworCQlzdHJidWZfYWRkY2goJmJ1ZiwgJzsnKTsKKwl9CisJLyoKKwkgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgY3AtPmVudiBmcm9tCisJICogY3AtPmVudl9hcnJheSBpZiBuZWVkZWQuIFdlIG9ubHkgY2hlY2sgb25lIHBsYWNlLgorCSAqLworCWlmIChjcC0+ZW52KQorCQl0cmFjZV9hZGRfZW52KCZidWYsIGNwLT5lbnYpOworCWlmIChjcC0+Z2l0X2NtZCkKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAiIGdpdCIpOworCXNxX3F1b3RlX2FyZ3ZfcHJldHR5KCZidWYsIGNwLT5hcmd2KTsKKworCXRyYWNlX3ByaW50ZigiJXMiLCBidWYuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworaW50IHN0YXJ0X2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCkKK3sKKwlpbnQgbmVlZF9pbiwgbmVlZF9vdXQsIG5lZWRfZXJyOworCWludCBmZGluWzJdLCBmZG91dFsyXSwgZmRlcnJbMl07CisJaW50IGZhaWxlZF9lcnJubzsKKwljaGFyICpzdHI7CisKKwlpZiAoIWNtZC0+YXJndikKKwkJY21kLT5hcmd2ID0gY21kLT5hcmdzLmFyZ3Y7CisJaWYgKCFjbWQtPmVudikKKwkJY21kLT5lbnYgPSBjbWQtPmVudl9hcnJheS5hcmd2OworCisJLyoKKwkgKiBJbiBjYXNlIG9mIGVycm9ycyB3ZSBtdXN0IGtlZXAgdGhlIHByb21pc2UgdG8gY2xvc2UgRkRzCisJICogdGhhdCBoYXZlIGJlZW4gcGFzc2VkIGluIHZpYSAtPmluIGFuZCAtPm91dC4KKwkgKi8KKworCW5lZWRfaW4gPSAhY21kLT5ub19zdGRpbiAmJiBjbWQtPmluIDwgMDsKKwlpZiAobmVlZF9pbikgeworCQlpZiAocGlwZShmZGluKSA8IDApIHsKKwkJCWZhaWxlZF9lcnJubyA9IGVycm5vOworCQkJaWYgKGNtZC0+b3V0ID4gMCkKKwkJCQljbG9zZShjbWQtPm91dCk7CisJCQlzdHIgPSAic3RhbmRhcmQgaW5wdXQiOworCQkJZ290byBmYWlsX3BpcGU7CisJCX0KKwkJY21kLT5pbiA9IGZkaW5bMV07CisJfQorCisJbmVlZF9vdXQgPSAhY21kLT5ub19zdGRvdXQKKwkJJiYgIWNtZC0+c3Rkb3V0X3RvX3N0ZGVycgorCQkmJiBjbWQtPm91dCA8IDA7CisJaWYgKG5lZWRfb3V0KSB7CisJCWlmIChwaXBlKGZkb3V0KSA8IDApIHsKKwkJCWZhaWxlZF9lcnJubyA9IGVycm5vOworCQkJaWYgKG5lZWRfaW4pCisJCQkJY2xvc2VfcGFpcihmZGluKTsKKwkJCWVsc2UgaWYgKGNtZC0+aW4pCisJCQkJY2xvc2UoY21kLT5pbik7CisJCQlzdHIgPSAic3RhbmRhcmQgb3V0cHV0IjsKKwkJCWdvdG8gZmFpbF9waXBlOworCQl9CisJCWNtZC0+b3V0ID0gZmRvdXRbMF07CisJfQorCisJbmVlZF9lcnIgPSAhY21kLT5ub19zdGRlcnIgJiYgY21kLT5lcnIgPCAwOworCWlmIChuZWVkX2VycikgeworCQlpZiAocGlwZShmZGVycikgPCAwKSB7CisJCQlmYWlsZWRfZXJybm8gPSBlcnJubzsKKwkJCWlmIChuZWVkX2luKQorCQkJCWNsb3NlX3BhaXIoZmRpbik7CisJCQllbHNlIGlmIChjbWQtPmluKQorCQkJCWNsb3NlKGNtZC0+aW4pOworCQkJaWYgKG5lZWRfb3V0KQorCQkJCWNsb3NlX3BhaXIoZmRvdXQpOworCQkJZWxzZSBpZiAoY21kLT5vdXQpCisJCQkJY2xvc2UoY21kLT5vdXQpOworCQkJc3RyID0gInN0YW5kYXJkIGVycm9yIjsKK2ZhaWxfcGlwZToKKwkJCWVycm9yKCJjYW5ub3QgY3JlYXRlICVzIHBpcGUgZm9yICVzOiAlcyIsCisJCQkJc3RyLCBjbWQtPmFyZ3ZbMF0sIHN0cmVycm9yKGZhaWxlZF9lcnJubykpOworCQkJY2hpbGRfcHJvY2Vzc19jbGVhcihjbWQpOworCQkJZXJybm8gPSBmYWlsZWRfZXJybm87CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJY21kLT5lcnIgPSBmZGVyclswXTsKKwl9CisKKwl0cmFjZTJfY2hpbGRfc3RhcnQoY21kKTsKKwl0cmFjZV9ydW5fY29tbWFuZChjbWQpOworCisJZmZsdXNoKE5VTEwpOworCisjaWZuZGVmIEdJVF9XSU5ET1dTX05BVElWRQoreworCWludCBub3RpZnlfcGlwZVsyXTsKKwlpbnQgbnVsbF9mZCA9IC0xOworCWNoYXIgKipjaGlsZGVudjsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCXN0cnVjdCBjaGlsZF9lcnIgY2VycjsKKwlzdHJ1Y3QgYXRmb3JrX3N0YXRlIGFzOworCisJaWYgKHByZXBhcmVfY21kKCZhcmd2LCBjbWQpIDwgMCkgeworCQlmYWlsZWRfZXJybm8gPSBlcnJubzsKKwkJY21kLT5waWQgPSAtMTsKKwkJaWYgKCFjbWQtPnNpbGVudF9leGVjX2ZhaWx1cmUpCisJCQllcnJvcl9lcnJubygiY2Fubm90IHJ1biAlcyIsIGNtZC0+YXJndlswXSk7CisJCWdvdG8gZW5kX29mX3NwYXduOworCX0KKworCWlmIChwaXBlKG5vdGlmeV9waXBlKSkKKwkJbm90aWZ5X3BpcGVbMF0gPSBub3RpZnlfcGlwZVsxXSA9IC0xOworCisJaWYgKGNtZC0+bm9fc3RkaW4gfHwgY21kLT5ub19zdGRvdXQgfHwgY21kLT5ub19zdGRlcnIpIHsKKwkJbnVsbF9mZCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUiB8IE9fQ0xPRVhFQyk7CisJCWlmIChudWxsX2ZkIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiKSk7CisJCXNldF9jbG9leGVjKG51bGxfZmQpOworCX0KKworCWNoaWxkZW52ID0gcHJlcF9jaGlsZGVudihjbWQtPmVudik7CisJYXRmb3JrX3ByZXBhcmUoJmFzKTsKKworCS8qCisJICogTk9URTogSW4gb3JkZXIgdG8gcHJldmVudCBkZWFkbG9ja2luZyB3aGVuIHVzaW5nIHRocmVhZHMgc3BlY2lhbAorCSAqIGNhcmUgc2hvdWxkIGJlIHRha2VuIHdpdGggdGhlIGZ1bmN0aW9uIGNhbGxzIG1hZGUgaW4gYmV0d2VlbiB0aGUKKwkgKiBmb3JrKCkgYW5kIGV4ZWMoKSBjYWxscy4gIE5vIGNhbGxzIHNob3VsZCBiZSBtYWRlIHRvIGZ1bmN0aW9ucyB3aGljaAorCSAqIHJlcXVpcmUgYWNxdWlyaW5nIGEgbG9jayAoZS5nLiBtYWxsb2MpIGFzIHRoZSBsb2NrIGNvdWxkIGhhdmUgYmVlbgorCSAqIGhlbGQgYnkgYW5vdGhlciB0aHJlYWQgYXQgdGhlIHRpbWUgb2YgZm9ya2luZywgY2F1c2luZyB0aGUgbG9jayB0bworCSAqIG5ldmVyIGJlIHJlbGVhc2VkIGluIHRoZSBjaGlsZCBwcm9jZXNzLiAgVGhpcyBtZWFucyBvbmx5CisJICogQXN5bmMtU2lnbmFsLVNhZmUgZnVuY3Rpb25zIGFyZSBwZXJtaXR0ZWQgaW4gdGhlIGNoaWxkLgorCSAqLworCWNtZC0+cGlkID0gZm9yaygpOworCWZhaWxlZF9lcnJubyA9IGVycm5vOworCWlmICghY21kLT5waWQpIHsKKwkJaW50IHNpZzsKKwkJLyoKKwkJICogRW5zdXJlIHRoZSBkZWZhdWx0IGRpZS9lcnJvci93YXJuIHJvdXRpbmVzIGRvIG5vdCBnZXQKKwkJICogY2FsbGVkLCB0aGV5IGNhbiB0YWtlIHN0ZGlvIGxvY2tzIGFuZCBtYWxsb2MuCisJCSAqLworCQlzZXRfZGllX3JvdXRpbmUoY2hpbGRfZGllX2ZuKTsKKwkJc2V0X2Vycm9yX3JvdXRpbmUoY2hpbGRfZXJyb3JfZm4pOworCQlzZXRfd2Fybl9yb3V0aW5lKGNoaWxkX3dhcm5fZm4pOworCisJCWNsb3NlKG5vdGlmeV9waXBlWzBdKTsKKwkJc2V0X2Nsb2V4ZWMobm90aWZ5X3BpcGVbMV0pOworCQljaGlsZF9ub3RpZmllciA9IG5vdGlmeV9waXBlWzFdOworCisJCWlmIChjbWQtPm5vX3N0ZGluKQorCQkJY2hpbGRfZHVwMihudWxsX2ZkLCAwKTsKKwkJZWxzZSBpZiAobmVlZF9pbikgeworCQkJY2hpbGRfZHVwMihmZGluWzBdLCAwKTsKKwkJCWNoaWxkX2Nsb3NlX3BhaXIoZmRpbik7CisJCX0gZWxzZSBpZiAoY21kLT5pbikgeworCQkJY2hpbGRfZHVwMihjbWQtPmluLCAwKTsKKwkJCWNoaWxkX2Nsb3NlKGNtZC0+aW4pOworCQl9CisKKwkJaWYgKGNtZC0+bm9fc3RkZXJyKQorCQkJY2hpbGRfZHVwMihudWxsX2ZkLCAyKTsKKwkJZWxzZSBpZiAobmVlZF9lcnIpIHsKKwkJCWNoaWxkX2R1cDIoZmRlcnJbMV0sIDIpOworCQkJY2hpbGRfY2xvc2VfcGFpcihmZGVycik7CisJCX0gZWxzZSBpZiAoY21kLT5lcnIgPiAxKSB7CisJCQljaGlsZF9kdXAyKGNtZC0+ZXJyLCAyKTsKKwkJCWNoaWxkX2Nsb3NlKGNtZC0+ZXJyKTsKKwkJfQorCisJCWlmIChjbWQtPm5vX3N0ZG91dCkKKwkJCWNoaWxkX2R1cDIobnVsbF9mZCwgMSk7CisJCWVsc2UgaWYgKGNtZC0+c3Rkb3V0X3RvX3N0ZGVycikKKwkJCWNoaWxkX2R1cDIoMiwgMSk7CisJCWVsc2UgaWYgKG5lZWRfb3V0KSB7CisJCQljaGlsZF9kdXAyKGZkb3V0WzFdLCAxKTsKKwkJCWNoaWxkX2Nsb3NlX3BhaXIoZmRvdXQpOworCQl9IGVsc2UgaWYgKGNtZC0+b3V0ID4gMSkgeworCQkJY2hpbGRfZHVwMihjbWQtPm91dCwgMSk7CisJCQljaGlsZF9jbG9zZShjbWQtPm91dCk7CisJCX0KKworCQlpZiAoY21kLT5kaXIgJiYgY2hkaXIoY21kLT5kaXIpKQorCQkJY2hpbGRfZGllKENISUxEX0VSUl9DSERJUik7CisKKwkJLyoKKwkJICogcmVzdG9yZSBkZWZhdWx0IHNpZ25hbCBoYW5kbGVycyBoZXJlLCBpbiBjYXNlCisJCSAqIHdlIGNhdGNoIGEgc2lnbmFsIHJpZ2h0IGJlZm9yZSBleGVjdmUgYmVsb3cKKwkJICovCisJCWZvciAoc2lnID0gMTsgc2lnIDwgTlNJRzsgc2lnKyspIHsKKwkJCS8qIGlnbm9yZWQgc2lnbmFscyBnZXQgcmVzZXQgdG8gU0lHX0RGTCBvbiBleGVjdmUgKi8KKwkJCWlmIChzaWduYWwoc2lnLCBTSUdfREZMKSA9PSBTSUdfSUdOKQorCQkJCXNpZ25hbChzaWcsIFNJR19JR04pOworCQl9CisKKwkJaWYgKHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmYXMub2xkLCBOVUxMKSAhPSAwKQorCQkJY2hpbGRfZGllKENISUxEX0VSUl9TSUdQUk9DTUFTSyk7CisKKwkJLyoKKwkJICogQXR0ZW1wdCB0byBleGVjIHVzaW5nIHRoZSBjb21tYW5kIGFuZCBhcmd1bWVudHMgc3RhcnRpbmcgYXQKKwkJICogYXJndi5hcmd2WzFdLiAgYXJndi5hcmd2WzBdIGNvbnRhaW5zIFNIRUxMX1BBVEggd2hpY2ggd2lsbAorCQkgKiBiZSB1c2VkIGluIHRoZSBldmVudCBleGVjIGZhaWxlZCB3aXRoIEVOT0VYRUMgYXQgd2hpY2ggcG9pbnQKKwkJICogd2Ugd2lsbCB0cnkgdG8gaW50ZXJwcmV0IHRoZSBjb21tYW5kIHVzaW5nICdzaCcuCisJCSAqLworCQlleGVjdmUoYXJndi5hcmd2WzFdLCAoY2hhciAqY29uc3QgKikgYXJndi5hcmd2ICsgMSwKKwkJICAgICAgIChjaGFyICpjb25zdCAqKSBjaGlsZGVudik7CisJCWlmIChlcnJubyA9PSBFTk9FWEVDKQorCQkJZXhlY3ZlKGFyZ3YuYXJndlswXSwgKGNoYXIgKmNvbnN0ICopIGFyZ3YuYXJndiwKKwkJCSAgICAgICAoY2hhciAqY29uc3QgKikgY2hpbGRlbnYpOworCisJCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKKwkJCWlmIChjbWQtPnNpbGVudF9leGVjX2ZhaWx1cmUpCisJCQkJY2hpbGRfZGllKENISUxEX0VSUl9TSUxFTlQpOworCQkJY2hpbGRfZGllKENISUxEX0VSUl9FTk9FTlQpOworCQl9IGVsc2UgeworCQkJY2hpbGRfZGllKENISUxEX0VSUl9FUlJOTyk7CisJCX0KKwl9CisJYXRmb3JrX3BhcmVudCgmYXMpOworCWlmIChjbWQtPnBpZCA8IDApCisJCWVycm9yX2Vycm5vKCJjYW5ub3QgZm9yaygpIGZvciAlcyIsIGNtZC0+YXJndlswXSk7CisJZWxzZSBpZiAoY21kLT5jbGVhbl9vbl9leGl0KQorCQltYXJrX2NoaWxkX2Zvcl9jbGVhbnVwKGNtZC0+cGlkLCBjbWQpOworCisJLyoKKwkgKiBXYWl0IGZvciBjaGlsZCdzIGV4ZWMuIElmIHRoZSBleGVjIHN1Y2NlZWRzIChvciBpZiBmb3JrKCkKKwkgKiBmYWlsZWQpLCBFT0YgaXMgc2VlbiBpbW1lZGlhdGVseSBieSB0aGUgcGFyZW50LiBPdGhlcndpc2UsIHRoZQorCSAqIGNoaWxkIHByb2Nlc3Mgc2VuZHMgYSBjaGlsZF9lcnIgc3RydWN0LgorCSAqIE5vdGUgdGhhdCB1c2Ugb2YgdGhpcyBpbmZyYXN0cnVjdHVyZSBpcyBjb21wbGV0ZWx5IGFkdmlzb3J5LAorCSAqIHRoZXJlZm9yZSwgd2Uga2VlcCBlcnJvciBjaGVja3MgbWluaW1hbC4KKwkgKi8KKwljbG9zZShub3RpZnlfcGlwZVsxXSk7CisJaWYgKHhyZWFkKG5vdGlmeV9waXBlWzBdLCAmY2Vyciwgc2l6ZW9mKGNlcnIpKSA9PSBzaXplb2YoY2VycikpIHsKKwkJLyoKKwkJICogQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgZm9yaygpIHN1Y2NlZWRlZCwgYnV0IGV4ZWMoKQorCQkgKiBmYWlsZWQuIEVycm9ycyBoYXZlIGJlZW4gcmVwb3J0ZWQgdG8gb3VyIHN0ZGVyci4KKwkJICovCisJCXdhaXRfb3Jfd2hpbmUoY21kLT5waWQsIGNtZC0+YXJndlswXSwgMCk7CisJCWNoaWxkX2Vycl9zcGV3KGNtZCwgJmNlcnIpOworCQlmYWlsZWRfZXJybm8gPSBlcnJubzsKKwkJY21kLT5waWQgPSAtMTsKKwl9CisJY2xvc2Uobm90aWZ5X3BpcGVbMF0pOworCisJaWYgKG51bGxfZmQgPj0gMCkKKwkJY2xvc2UobnVsbF9mZCk7CisJYXJndl9hcnJheV9jbGVhcigmYXJndik7CisJZnJlZShjaGlsZGVudik7Cit9CitlbmRfb2Zfc3Bhd246CisKKyNlbHNlCit7CisJaW50IGZoaW4gPSAwLCBmaG91dCA9IDEsIGZoZXJyID0gMjsKKwljb25zdCBjaGFyICoqc2FyZ3YgPSBjbWQtPmFyZ3Y7CisJc3RydWN0IGFyZ3ZfYXJyYXkgbmFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwlpZiAoY21kLT5ub19zdGRpbikKKwkJZmhpbiA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7CisJZWxzZSBpZiAobmVlZF9pbikKKwkJZmhpbiA9IGR1cChmZGluWzBdKTsKKwllbHNlIGlmIChjbWQtPmluKQorCQlmaGluID0gZHVwKGNtZC0+aW4pOworCisJaWYgKGNtZC0+bm9fc3RkZXJyKQorCQlmaGVyciA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7CisJZWxzZSBpZiAobmVlZF9lcnIpCisJCWZoZXJyID0gZHVwKGZkZXJyWzFdKTsKKwllbHNlIGlmIChjbWQtPmVyciA+IDIpCisJCWZoZXJyID0gZHVwKGNtZC0+ZXJyKTsKKworCWlmIChjbWQtPm5vX3N0ZG91dCkKKwkJZmhvdXQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOworCWVsc2UgaWYgKGNtZC0+c3Rkb3V0X3RvX3N0ZGVycikKKwkJZmhvdXQgPSBkdXAoZmhlcnIpOworCWVsc2UgaWYgKG5lZWRfb3V0KQorCQlmaG91dCA9IGR1cChmZG91dFsxXSk7CisJZWxzZSBpZiAoY21kLT5vdXQgPiAxKQorCQlmaG91dCA9IGR1cChjbWQtPm91dCk7CisKKwlpZiAoY21kLT5naXRfY21kKQorCQljbWQtPmFyZ3YgPSBwcmVwYXJlX2dpdF9jbWQoJm5hcmd2LCBjbWQtPmFyZ3YpOworCWVsc2UgaWYgKGNtZC0+dXNlX3NoZWxsKQorCQljbWQtPmFyZ3YgPSBwcmVwYXJlX3NoZWxsX2NtZCgmbmFyZ3YsIGNtZC0+YXJndik7CisKKwljbWQtPnBpZCA9IG1pbmd3X3NwYXdudnBlKGNtZC0+YXJndlswXSwgY21kLT5hcmd2LCAoY2hhcioqKSBjbWQtPmVudiwKKwkJCWNtZC0+ZGlyLCBmaGluLCBmaG91dCwgZmhlcnIpOworCWZhaWxlZF9lcnJubyA9IGVycm5vOworCWlmIChjbWQtPnBpZCA8IDAgJiYgKCFjbWQtPnNpbGVudF9leGVjX2ZhaWx1cmUgfHwgZXJybm8gIT0gRU5PRU5UKSkKKwkJZXJyb3JfZXJybm8oImNhbm5vdCBzcGF3biAlcyIsIGNtZC0+YXJndlswXSk7CisJaWYgKGNtZC0+Y2xlYW5fb25fZXhpdCAmJiBjbWQtPnBpZCA+PSAwKQorCQltYXJrX2NoaWxkX2Zvcl9jbGVhbnVwKGNtZC0+cGlkLCBjbWQpOworCisJYXJndl9hcnJheV9jbGVhcigmbmFyZ3YpOworCWNtZC0+YXJndiA9IHNhcmd2OworCWlmIChmaGluICE9IDApCisJCWNsb3NlKGZoaW4pOworCWlmIChmaG91dCAhPSAxKQorCQljbG9zZShmaG91dCk7CisJaWYgKGZoZXJyICE9IDIpCisJCWNsb3NlKGZoZXJyKTsKK30KKyNlbmRpZgorCisJaWYgKGNtZC0+cGlkIDwgMCkgeworCQl0cmFjZTJfY2hpbGRfZXhpdChjbWQsIC0xKTsKKworCQlpZiAobmVlZF9pbikKKwkJCWNsb3NlX3BhaXIoZmRpbik7CisJCWVsc2UgaWYgKGNtZC0+aW4pCisJCQljbG9zZShjbWQtPmluKTsKKwkJaWYgKG5lZWRfb3V0KQorCQkJY2xvc2VfcGFpcihmZG91dCk7CisJCWVsc2UgaWYgKGNtZC0+b3V0KQorCQkJY2xvc2UoY21kLT5vdXQpOworCQlpZiAobmVlZF9lcnIpCisJCQljbG9zZV9wYWlyKGZkZXJyKTsKKwkJZWxzZSBpZiAoY21kLT5lcnIpCisJCQljbG9zZShjbWQtPmVycik7CisJCWNoaWxkX3Byb2Nlc3NfY2xlYXIoY21kKTsKKwkJZXJybm8gPSBmYWlsZWRfZXJybm87CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAobmVlZF9pbikKKwkJY2xvc2UoZmRpblswXSk7CisJZWxzZSBpZiAoY21kLT5pbikKKwkJY2xvc2UoY21kLT5pbik7CisKKwlpZiAobmVlZF9vdXQpCisJCWNsb3NlKGZkb3V0WzFdKTsKKwllbHNlIGlmIChjbWQtPm91dCkKKwkJY2xvc2UoY21kLT5vdXQpOworCisJaWYgKG5lZWRfZXJyKQorCQljbG9zZShmZGVyclsxXSk7CisJZWxzZSBpZiAoY21kLT5lcnIpCisJCWNsb3NlKGNtZC0+ZXJyKTsKKworCXJldHVybiAwOworfQorCitpbnQgZmluaXNoX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCkKK3sKKwlpbnQgcmV0ID0gd2FpdF9vcl93aGluZShjbWQtPnBpZCwgY21kLT5hcmd2WzBdLCAwKTsKKwl0cmFjZTJfY2hpbGRfZXhpdChjbWQsIHJldCk7CisJY2hpbGRfcHJvY2Vzc19jbGVhcihjbWQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBmaW5pc2hfY29tbWFuZF9pbl9zaWduYWwoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCkKK3sKKwlpbnQgcmV0ID0gd2FpdF9vcl93aGluZShjbWQtPnBpZCwgY21kLT5hcmd2WzBdLCAxKTsKKwl0cmFjZTJfY2hpbGRfZXhpdChjbWQsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworCitpbnQgcnVuX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCkKK3sKKwlpbnQgY29kZTsKKworCWlmIChjbWQtPm91dCA8IDAgfHwgY21kLT5lcnIgPCAwKQorCQlCVUcoInJ1bl9jb21tYW5kIHdpdGggYSBwaXBlIGNhbiBjYXVzZSBkZWFkbG9jayIpOworCisJY29kZSA9IHN0YXJ0X2NvbW1hbmQoY21kKTsKKwlpZiAoY29kZSkKKwkJcmV0dXJuIGNvZGU7CisJcmV0dXJuIGZpbmlzaF9jb21tYW5kKGNtZCk7Cit9CisKK2ludCBydW5fY29tbWFuZF92X29wdChjb25zdCBjaGFyICoqYXJndiwgaW50IG9wdCkKK3sKKwlyZXR1cm4gcnVuX2NvbW1hbmRfdl9vcHRfY2RfZW52KGFyZ3YsIG9wdCwgTlVMTCwgTlVMTCk7Cit9CisKK2ludCBydW5fY29tbWFuZF92X29wdF90cjIoY29uc3QgY2hhciAqKmFyZ3YsIGludCBvcHQsIGNvbnN0IGNoYXIgKnRyMl9jbGFzcykKK3sKKwlyZXR1cm4gcnVuX2NvbW1hbmRfdl9vcHRfY2RfZW52X3RyMihhcmd2LCBvcHQsIE5VTEwsIE5VTEwsIHRyMl9jbGFzcyk7Cit9CisKK2ludCBydW5fY29tbWFuZF92X29wdF9jZF9lbnYoY29uc3QgY2hhciAqKmFyZ3YsIGludCBvcHQsIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqY29uc3QgKmVudikKK3sKKwlyZXR1cm4gcnVuX2NvbW1hbmRfdl9vcHRfY2RfZW52X3RyMihhcmd2LCBvcHQsIGRpciwgZW52LCBOVUxMKTsKK30KKworaW50IHJ1bl9jb21tYW5kX3Zfb3B0X2NkX2Vudl90cjIoY29uc3QgY2hhciAqKmFyZ3YsIGludCBvcHQsIGNvbnN0IGNoYXIgKmRpciwKKwkJCQkgY29uc3QgY2hhciAqY29uc3QgKmVudiwgY29uc3QgY2hhciAqdHIyX2NsYXNzKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNtZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljbWQuYXJndiA9IGFyZ3Y7CisJY21kLm5vX3N0ZGluID0gb3B0ICYgUlVOX0NPTU1BTkRfTk9fU1RESU4gPyAxIDogMDsKKwljbWQuZ2l0X2NtZCA9IG9wdCAmIFJVTl9HSVRfQ01EID8gMSA6IDA7CisJY21kLnN0ZG91dF90b19zdGRlcnIgPSBvcHQgJiBSVU5fQ09NTUFORF9TVERPVVRfVE9fU1RERVJSID8gMSA6IDA7CisJY21kLnNpbGVudF9leGVjX2ZhaWx1cmUgPSBvcHQgJiBSVU5fU0lMRU5UX0VYRUNfRkFJTFVSRSA/IDEgOiAwOworCWNtZC51c2Vfc2hlbGwgPSBvcHQgJiBSVU5fVVNJTkdfU0hFTEwgPyAxIDogMDsKKwljbWQuY2xlYW5fb25fZXhpdCA9IG9wdCAmIFJVTl9DTEVBTl9PTl9FWElUID8gMSA6IDA7CisJY21kLmRpciA9IGRpcjsKKwljbWQuZW52ID0gZW52OworCWNtZC50cmFjZTJfY2hpbGRfY2xhc3MgPSB0cjJfY2xhc3M7CisJcmV0dXJuIHJ1bl9jb21tYW5kKCZjbWQpOworfQorCisjaWZuZGVmIE5PX1BUSFJFQURTCitzdGF0aWMgcHRocmVhZF90IG1haW5fdGhyZWFkOworc3RhdGljIGludCBtYWluX3RocmVhZF9zZXQ7CitzdGF0aWMgcHRocmVhZF9rZXlfdCBhc3luY19rZXk7CitzdGF0aWMgcHRocmVhZF9rZXlfdCBhc3luY19kaWVfY291bnRlcjsKKworc3RhdGljIHZvaWQgKnJ1bl90aHJlYWQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYXN5bmMgKmFzeW5jID0gZGF0YTsKKwlpbnRwdHJfdCByZXQ7CisKKwlpZiAoYXN5bmMtPmlzb2xhdGVfc2lncGlwZSkgeworCQlzaWdzZXRfdCBtYXNrOworCQlzaWdlbXB0eXNldCgmbWFzayk7CisJCXNpZ2FkZHNldCgmbWFzaywgU0lHUElQRSk7CisJCWlmIChwdGhyZWFkX3NpZ21hc2soU0lHX0JMT0NLLCAmbWFzaywgTlVMTCkgPCAwKSB7CisJCQlyZXQgPSBlcnJvcigidW5hYmxlIHRvIGJsb2NrIFNJR1BJUEUgaW4gYXN5bmMgdGhyZWFkIik7CisJCQlyZXR1cm4gKHZvaWQgKilyZXQ7CisJCX0KKwl9CisKKwlwdGhyZWFkX3NldHNwZWNpZmljKGFzeW5jX2tleSwgYXN5bmMpOworCXJldCA9IGFzeW5jLT5wcm9jKGFzeW5jLT5wcm9jX2luLCBhc3luYy0+cHJvY19vdXQsIGFzeW5jLT5kYXRhKTsKKwlyZXR1cm4gKHZvaWQgKilyZXQ7Cit9CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGRpZV9hc3luYyhjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCXZyZXBvcnRmKCJmYXRhbDogIiwgZXJyLCBwYXJhbXMpOworCisJaWYgKGluX2FzeW5jKCkpIHsKKwkJc3RydWN0IGFzeW5jICphc3luYyA9IHB0aHJlYWRfZ2V0c3BlY2lmaWMoYXN5bmNfa2V5KTsKKwkJaWYgKGFzeW5jLT5wcm9jX2luID49IDApCisJCQljbG9zZShhc3luYy0+cHJvY19pbik7CisJCWlmIChhc3luYy0+cHJvY19vdXQgPj0gMCkKKwkJCWNsb3NlKGFzeW5jLT5wcm9jX291dCk7CisJCXB0aHJlYWRfZXhpdCgodm9pZCAqKTEyOCk7CisJfQorCisJZXhpdCgxMjgpOworfQorCitzdGF0aWMgaW50IGFzeW5jX2RpZV9pc19yZWN1cnNpbmcodm9pZCkKK3sKKwl2b2lkICpyZXQgPSBwdGhyZWFkX2dldHNwZWNpZmljKGFzeW5jX2RpZV9jb3VudGVyKTsKKwlwdGhyZWFkX3NldHNwZWNpZmljKGFzeW5jX2RpZV9jb3VudGVyLCAodm9pZCAqKTEpOworCXJldHVybiByZXQgIT0gTlVMTDsKK30KKworaW50IGluX2FzeW5jKHZvaWQpCit7CisJaWYgKCFtYWluX3RocmVhZF9zZXQpCisJCXJldHVybiAwOyAvKiBubyBhc3luY3Mgc3RhcnRlZCB5ZXQgKi8KKwlyZXR1cm4gIXB0aHJlYWRfZXF1YWwobWFpbl90aHJlYWQsIHB0aHJlYWRfc2VsZigpKTsKK30KKworc3RhdGljIHZvaWQgTk9SRVRVUk4gYXN5bmNfZXhpdChpbnQgY29kZSkKK3sKKwlwdGhyZWFkX2V4aXQoKHZvaWQgKikoaW50cHRyX3QpY29kZSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBzdHJ1Y3QgeworCXZvaWQgKCoqaGFuZGxlcnMpKHZvaWQpOworCXNpemVfdCBucjsKKwlzaXplX3QgYWxsb2M7Cit9IGdpdF9hdGV4aXRfaGRscnM7CisKK3N0YXRpYyBpbnQgZ2l0X2F0ZXhpdF9pbnN0YWxsZWQ7CisKK3N0YXRpYyB2b2lkIGdpdF9hdGV4aXRfZGlzcGF0Y2godm9pZCkKK3sKKwlzaXplX3QgaTsKKworCWZvciAoaT1naXRfYXRleGl0X2hkbHJzLm5yIDsgaSA7IGktLSkKKwkJZ2l0X2F0ZXhpdF9oZGxycy5oYW5kbGVyc1tpLTFdKCk7Cit9CisKK3N0YXRpYyB2b2lkIGdpdF9hdGV4aXRfY2xlYXIodm9pZCkKK3sKKwlmcmVlKGdpdF9hdGV4aXRfaGRscnMuaGFuZGxlcnMpOworCW1lbXNldCgmZ2l0X2F0ZXhpdF9oZGxycywgMCwgc2l6ZW9mKGdpdF9hdGV4aXRfaGRscnMpKTsKKwlnaXRfYXRleGl0X2luc3RhbGxlZCA9IDA7Cit9CisKKyN1bmRlZiBhdGV4aXQKK2ludCBnaXRfYXRleGl0KHZvaWQgKCpoYW5kbGVyKSh2b2lkKSkKK3sKKwlBTExPQ19HUk9XKGdpdF9hdGV4aXRfaGRscnMuaGFuZGxlcnMsIGdpdF9hdGV4aXRfaGRscnMubnIgKyAxLCBnaXRfYXRleGl0X2hkbHJzLmFsbG9jKTsKKwlnaXRfYXRleGl0X2hkbHJzLmhhbmRsZXJzW2dpdF9hdGV4aXRfaGRscnMubnIrK10gPSBoYW5kbGVyOworCWlmICghZ2l0X2F0ZXhpdF9pbnN0YWxsZWQpIHsKKwkJaWYgKGF0ZXhpdCgmZ2l0X2F0ZXhpdF9kaXNwYXRjaCkpCisJCQlyZXR1cm4gLTE7CisJCWdpdF9hdGV4aXRfaW5zdGFsbGVkID0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZGVmaW5lIGF0ZXhpdCBnaXRfYXRleGl0CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19pc19hc3luYzsKK2ludCBpbl9hc3luYyh2b2lkKQoreworCXJldHVybiBwcm9jZXNzX2lzX2FzeW5jOworfQorCitzdGF0aWMgdm9pZCBOT1JFVFVSTiBhc3luY19leGl0KGludCBjb2RlKQoreworCWV4aXQoY29kZSk7Cit9CisKKyNlbmRpZgorCit2b2lkIGNoZWNrX3BpcGUoaW50IGVycikKK3sKKwlpZiAoZXJyID09IEVQSVBFKSB7CisJCWlmIChpbl9hc3luYygpKQorCQkJYXN5bmNfZXhpdCgxNDEpOworCisJCXNpZ25hbChTSUdQSVBFLCBTSUdfREZMKTsKKwkJcmFpc2UoU0lHUElQRSk7CisJCS8qIFNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBqdXN0IGluIGNhc2UuLi4gKi8KKwkJZXhpdCgxNDEpOworCX0KK30KKworaW50IHN0YXJ0X2FzeW5jKHN0cnVjdCBhc3luYyAqYXN5bmMpCit7CisJaW50IG5lZWRfaW4sIG5lZWRfb3V0OworCWludCBmZGluWzJdLCBmZG91dFsyXTsKKwlpbnQgcHJvY19pbiwgcHJvY19vdXQ7CisKKwluZWVkX2luID0gYXN5bmMtPmluIDwgMDsKKwlpZiAobmVlZF9pbikgeworCQlpZiAocGlwZShmZGluKSA8IDApIHsKKwkJCWlmIChhc3luYy0+b3V0ID4gMCkKKwkJCQljbG9zZShhc3luYy0+b3V0KTsKKwkJCXJldHVybiBlcnJvcl9lcnJubygiY2Fubm90IGNyZWF0ZSBwaXBlIik7CisJCX0KKwkJYXN5bmMtPmluID0gZmRpblsxXTsKKwl9CisKKwluZWVkX291dCA9IGFzeW5jLT5vdXQgPCAwOworCWlmIChuZWVkX291dCkgeworCQlpZiAocGlwZShmZG91dCkgPCAwKSB7CisJCQlpZiAobmVlZF9pbikKKwkJCQljbG9zZV9wYWlyKGZkaW4pOworCQkJZWxzZSBpZiAoYXN5bmMtPmluKQorCQkJCWNsb3NlKGFzeW5jLT5pbik7CisJCQlyZXR1cm4gZXJyb3JfZXJybm8oImNhbm5vdCBjcmVhdGUgcGlwZSIpOworCQl9CisJCWFzeW5jLT5vdXQgPSBmZG91dFswXTsKKwl9CisKKwlpZiAobmVlZF9pbikKKwkJcHJvY19pbiA9IGZkaW5bMF07CisJZWxzZSBpZiAoYXN5bmMtPmluKQorCQlwcm9jX2luID0gYXN5bmMtPmluOworCWVsc2UKKwkJcHJvY19pbiA9IC0xOworCisJaWYgKG5lZWRfb3V0KQorCQlwcm9jX291dCA9IGZkb3V0WzFdOworCWVsc2UgaWYgKGFzeW5jLT5vdXQpCisJCXByb2Nfb3V0ID0gYXN5bmMtPm91dDsKKwllbHNlCisJCXByb2Nfb3V0ID0gLTE7CisKKyNpZmRlZiBOT19QVEhSRUFEUworCS8qIEZsdXNoIHN0ZGlvIGJlZm9yZSBmb3JrKCkgdG8gYXZvaWQgY2xvbmluZyBidWZmZXJzICovCisJZmZsdXNoKE5VTEwpOworCisJYXN5bmMtPnBpZCA9IGZvcmsoKTsKKwlpZiAoYXN5bmMtPnBpZCA8IDApIHsKKwkJZXJyb3JfZXJybm8oImZvcmsgKGFzeW5jKSBmYWlsZWQiKTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKCFhc3luYy0+cGlkKSB7CisJCWlmIChuZWVkX2luKQorCQkJY2xvc2UoZmRpblsxXSk7CisJCWlmIChuZWVkX291dCkKKwkJCWNsb3NlKGZkb3V0WzBdKTsKKwkJZ2l0X2F0ZXhpdF9jbGVhcigpOworCQlwcm9jZXNzX2lzX2FzeW5jID0gMTsKKwkJZXhpdCghIWFzeW5jLT5wcm9jKHByb2NfaW4sIHByb2Nfb3V0LCBhc3luYy0+ZGF0YSkpOworCX0KKworCW1hcmtfY2hpbGRfZm9yX2NsZWFudXAoYXN5bmMtPnBpZCwgTlVMTCk7CisKKwlpZiAobmVlZF9pbikKKwkJY2xvc2UoZmRpblswXSk7CisJZWxzZSBpZiAoYXN5bmMtPmluKQorCQljbG9zZShhc3luYy0+aW4pOworCisJaWYgKG5lZWRfb3V0KQorCQljbG9zZShmZG91dFsxXSk7CisJZWxzZSBpZiAoYXN5bmMtPm91dCkKKwkJY2xvc2UoYXN5bmMtPm91dCk7CisjZWxzZQorCWlmICghbWFpbl90aHJlYWRfc2V0KSB7CisJCS8qCisJCSAqIFdlIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCB0aW1lIHRoYXQgc3RhcnRfYXN5bmMgaXMgY2FsbGVkCisJCSAqIGl0IGlzIGZyb20gdGhlIG1haW4gdGhyZWFkLgorCQkgKi8KKwkJbWFpbl90aHJlYWRfc2V0ID0gMTsKKwkJbWFpbl90aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKKwkJcHRocmVhZF9rZXlfY3JlYXRlKCZhc3luY19rZXksIE5VTEwpOworCQlwdGhyZWFkX2tleV9jcmVhdGUoJmFzeW5jX2RpZV9jb3VudGVyLCBOVUxMKTsKKwkJc2V0X2RpZV9yb3V0aW5lKGRpZV9hc3luYyk7CisJCXNldF9kaWVfaXNfcmVjdXJzaW5nX3JvdXRpbmUoYXN5bmNfZGllX2lzX3JlY3Vyc2luZyk7CisJfQorCisJaWYgKHByb2NfaW4gPj0gMCkKKwkJc2V0X2Nsb2V4ZWMocHJvY19pbik7CisJaWYgKHByb2Nfb3V0ID49IDApCisJCXNldF9jbG9leGVjKHByb2Nfb3V0KTsKKwlhc3luYy0+cHJvY19pbiA9IHByb2NfaW47CisJYXN5bmMtPnByb2Nfb3V0ID0gcHJvY19vdXQ7CisJeworCQlpbnQgZXJyID0gcHRocmVhZF9jcmVhdGUoJmFzeW5jLT50aWQsIE5VTEwsIHJ1bl90aHJlYWQsIGFzeW5jKTsKKwkJaWYgKGVycikgeworCQkJZXJyb3IoXygiY2Fubm90IGNyZWF0ZSBhc3luYyB0aHJlYWQ6ICVzIiksIHN0cmVycm9yKGVycikpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKyNlbmRpZgorCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAobmVlZF9pbikKKwkJY2xvc2VfcGFpcihmZGluKTsKKwllbHNlIGlmIChhc3luYy0+aW4pCisJCWNsb3NlKGFzeW5jLT5pbik7CisKKwlpZiAobmVlZF9vdXQpCisJCWNsb3NlX3BhaXIoZmRvdXQpOworCWVsc2UgaWYgKGFzeW5jLT5vdXQpCisJCWNsb3NlKGFzeW5jLT5vdXQpOworCXJldHVybiAtMTsKK30KKworaW50IGZpbmlzaF9hc3luYyhzdHJ1Y3QgYXN5bmMgKmFzeW5jKQoreworI2lmZGVmIE5PX1BUSFJFQURTCisJcmV0dXJuIHdhaXRfb3Jfd2hpbmUoYXN5bmMtPnBpZCwgImNoaWxkIHByb2Nlc3MiLCAwKTsKKyNlbHNlCisJdm9pZCAqcmV0ID0gKHZvaWQgKikoaW50cHRyX3QpKC0xKTsKKworCWlmIChwdGhyZWFkX2pvaW4oYXN5bmMtPnRpZCwgJnJldCkpCisJCWVycm9yKCJwdGhyZWFkX2pvaW4gZmFpbGVkIik7CisJcmV0dXJuIChpbnQpKGludHB0cl90KXJldDsKKyNlbmRpZgorfQorCitpbnQgYXN5bmNfd2l0aF9mb3JrKHZvaWQpCit7CisjaWZkZWYgTk9fUFRIUkVBRFMKKwlyZXR1cm4gMTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworY29uc3QgY2hhciAqZmluZF9ob29rKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZwYXRoKTsKKwlzdHJidWZfZ2l0X3BhdGgoJnBhdGgsICJob29rcy8lcyIsIG5hbWUpOworCWlmIChhY2Nlc3MocGF0aC5idWYsIFhfT0spIDwgMCkgeworCQlpbnQgZXJyID0gZXJybm87CisKKyNpZmRlZiBTVFJJUF9FWFRFTlNJT04KKwkJc3RyYnVmX2FkZHN0cigmcGF0aCwgU1RSSVBfRVhURU5TSU9OKTsKKwkJaWYgKGFjY2VzcyhwYXRoLmJ1ZiwgWF9PSykgPj0gMCkKKwkJCXJldHVybiBwYXRoLmJ1ZjsKKwkJaWYgKGVycm5vID09IEVBQ0NFUykKKwkJCWVyciA9IGVycm5vOworI2VuZGlmCisKKwkJaWYgKGVyciA9PSBFQUNDRVMgJiYgYWR2aWNlX2lnbm9yZWRfaG9vaykgeworCQkJc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBhZHZpc2VfZ2l2ZW4gPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCQkJaWYgKCFzdHJpbmdfbGlzdF9sb29rdXAoJmFkdmlzZV9naXZlbiwgbmFtZSkpIHsKKwkJCQlzdHJpbmdfbGlzdF9pbnNlcnQoJmFkdmlzZV9naXZlbiwgbmFtZSk7CisJCQkJYWR2aXNlKF8oIlRoZSAnJXMnIGhvb2sgd2FzIGlnbm9yZWQgYmVjYXVzZSAiCisJCQkJCSAiaXQncyBub3Qgc2V0IGFzIGV4ZWN1dGFibGUuXG4iCisJCQkJCSAiWW91IGNhbiBkaXNhYmxlIHRoaXMgd2FybmluZyB3aXRoICIKKwkJCQkJICJgZ2l0IGNvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgZmFsc2VgLiIpLAorCQkJCSAgICAgICBwYXRoLmJ1Zik7CisJCQl9CisJCX0KKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBwYXRoLmJ1ZjsKK30KKworaW50IHJ1bl9ob29rX3ZlKGNvbnN0IGNoYXIgKmNvbnN0ICplbnYsIGNvbnN0IGNoYXIgKm5hbWUsIHZhX2xpc3QgYXJncykKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBob29rID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKnA7CisKKwlwID0gZmluZF9ob29rKG5hbWUpOworCWlmICghcCkKKwkJcmV0dXJuIDA7CisKKwlhcmd2X2FycmF5X3B1c2goJmhvb2suYXJncywgcCk7CisJd2hpbGUgKChwID0gdmFfYXJnKGFyZ3MsIGNvbnN0IGNoYXIgKikpKQorCQlhcmd2X2FycmF5X3B1c2goJmhvb2suYXJncywgcCk7CisJaG9vay5lbnYgPSBlbnY7CisJaG9vay5ub19zdGRpbiA9IDE7CisJaG9vay5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlob29rLnRyYWNlMl9ob29rX25hbWUgPSBuYW1lOworCisJcmV0dXJuIHJ1bl9jb21tYW5kKCZob29rKTsKK30KKworaW50IHJ1bl9ob29rX2xlKGNvbnN0IGNoYXIgKmNvbnN0ICplbnYsIGNvbnN0IGNoYXIgKm5hbWUsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJaW50IHJldDsKKworCXZhX3N0YXJ0KGFyZ3MsIG5hbWUpOworCXJldCA9IHJ1bl9ob29rX3ZlKGVudiwgbmFtZSwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGlvX3B1bXAgeworCS8qIGluaXRpYWxpemVkIGJ5IGNhbGxlciAqLworCWludCBmZDsKKwlpbnQgdHlwZTsgLyogUE9MTE9VVCBvciBQT0xMSU4gKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQljb25zdCBjaGFyICpidWY7CisJCQlzaXplX3QgbGVuOworCQl9IG91dDsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBzdHJidWYgKmJ1ZjsKKwkJCXNpemVfdCBoaW50OworCQl9IGluOworCX0gdTsKKworCS8qIHJldHVybmVkIGJ5IHB1bXBfaW8gKi8KKwlpbnQgZXJyb3I7IC8qIDAgZm9yIHN1Y2Nlc3MsIG90aGVyd2lzZSBlcnJubyAqLworCisJLyogaW50ZXJuYWwgdXNlICovCisJc3RydWN0IHBvbGxmZCAqcGZkOworfTsKKworc3RhdGljIGludCBwdW1wX2lvX3JvdW5kKHN0cnVjdCBpb19wdW1wICpzbG90cywgaW50IG5yLCBzdHJ1Y3QgcG9sbGZkICpwZmQpCit7CisJaW50IHBvbGxzaXplID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCXN0cnVjdCBpb19wdW1wICppbyA9ICZzbG90c1tpXTsKKwkJaWYgKGlvLT5mZCA8IDApCisJCQljb250aW51ZTsKKwkJcGZkW3BvbGxzaXplXS5mZCA9IGlvLT5mZDsKKwkJcGZkW3BvbGxzaXplXS5ldmVudHMgPSBpby0+dHlwZTsKKwkJaW8tPnBmZCA9ICZwZmRbcG9sbHNpemUrK107CisJfQorCisJaWYgKCFwb2xsc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocG9sbChwZmQsIHBvbGxzaXplLCAtMSkgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFSU5UUikKKwkJCXJldHVybiAxOworCQlkaWVfZXJybm8oInBvbGwgZmFpbGVkIik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJc3RydWN0IGlvX3B1bXAgKmlvID0gJnNsb3RzW2ldOworCisJCWlmIChpby0+ZmQgPCAwKQorCQkJY29udGludWU7CisKKwkJaWYgKCEoaW8tPnBmZC0+cmV2ZW50cyAmIChQT0xMT1VUfFBPTExJTnxQT0xMSFVQfFBPTExFUlJ8UE9MTE5WQUwpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpby0+dHlwZSA9PSBQT0xMT1VUKSB7CisJCQlzc2l6ZV90IGxlbiA9IHh3cml0ZShpby0+ZmQsCisJCQkJCSAgICAgaW8tPnUub3V0LmJ1ZiwgaW8tPnUub3V0Lmxlbik7CisJCQlpZiAobGVuIDwgMCkgeworCQkJCWlvLT5lcnJvciA9IGVycm5vOworCQkJCWNsb3NlKGlvLT5mZCk7CisJCQkJaW8tPmZkID0gLTE7CisJCQl9IGVsc2UgeworCQkJCWlvLT51Lm91dC5idWYgKz0gbGVuOworCQkJCWlvLT51Lm91dC5sZW4gLT0gbGVuOworCQkJCWlmICghaW8tPnUub3V0LmxlbikgeworCQkJCQljbG9zZShpby0+ZmQpOworCQkJCQlpby0+ZmQgPSAtMTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoaW8tPnR5cGUgPT0gUE9MTElOKSB7CisJCQlzc2l6ZV90IGxlbiA9IHN0cmJ1Zl9yZWFkX29uY2UoaW8tPnUuaW4uYnVmLAorCQkJCQkJICAgICAgIGlvLT5mZCwgaW8tPnUuaW4uaGludCk7CisJCQlpZiAobGVuIDwgMCkKKwkJCQlpby0+ZXJyb3IgPSBlcnJubzsKKwkJCWlmIChsZW4gPD0gMCkgeworCQkJCWNsb3NlKGlvLT5mZCk7CisJCQkJaW8tPmZkID0gLTE7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwdW1wX2lvKHN0cnVjdCBpb19wdW1wICpzbG90cywgaW50IG5yKQoreworCXN0cnVjdCBwb2xsZmQgKnBmZDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCQlzbG90c1tpXS5lcnJvciA9IDA7CisKKwlBTExPQ19BUlJBWShwZmQsIG5yKTsKKwl3aGlsZSAocHVtcF9pb19yb3VuZChzbG90cywgbnIsIHBmZCkpCisJCTsgLyogbm90aGluZyAqLworCWZyZWUocGZkKTsKKworCS8qIFRoZXJlIG1heSBiZSBtdWx0aXBsZSBlcnJubyB2YWx1ZXMsIHNvIGp1c3QgcGljayB0aGUgZmlyc3QuICovCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJaWYgKHNsb3RzW2ldLmVycm9yKSB7CisJCQllcnJubyA9IHNsb3RzW2ldLmVycm9yOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVybiAwOworfQorCisKK2ludCBwaXBlX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCwKKwkJIGNvbnN0IGNoYXIgKmluLCBzaXplX3QgaW5fbGVuLAorCQkgc3RydWN0IHN0cmJ1ZiAqb3V0LCBzaXplX3Qgb3V0X2hpbnQsCisJCSBzdHJ1Y3Qgc3RyYnVmICplcnIsIHNpemVfdCBlcnJfaGludCkKK3sKKwlzdHJ1Y3QgaW9fcHVtcCBpb1szXTsKKwlpbnQgbnIgPSAwOworCisJaWYgKGluKQorCQljbWQtPmluID0gLTE7CisJaWYgKG91dCkKKwkJY21kLT5vdXQgPSAtMTsKKwlpZiAoZXJyKQorCQljbWQtPmVyciA9IC0xOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoY21kKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChpbikgeworCQlpb1tucl0uZmQgPSBjbWQtPmluOworCQlpb1tucl0udHlwZSA9IFBPTExPVVQ7CisJCWlvW25yXS51Lm91dC5idWYgPSBpbjsKKwkJaW9bbnJdLnUub3V0LmxlbiA9IGluX2xlbjsKKwkJbnIrKzsKKwl9CisJaWYgKG91dCkgeworCQlpb1tucl0uZmQgPSBjbWQtPm91dDsKKwkJaW9bbnJdLnR5cGUgPSBQT0xMSU47CisJCWlvW25yXS51LmluLmJ1ZiA9IG91dDsKKwkJaW9bbnJdLnUuaW4uaGludCA9IG91dF9oaW50OworCQlucisrOworCX0KKwlpZiAoZXJyKSB7CisJCWlvW25yXS5mZCA9IGNtZC0+ZXJyOworCQlpb1tucl0udHlwZSA9IFBPTExJTjsKKwkJaW9bbnJdLnUuaW4uYnVmID0gZXJyOworCQlpb1tucl0udS5pbi5oaW50ID0gZXJyX2hpbnQ7CisJCW5yKys7CisJfQorCisJaWYgKHB1bXBfaW8oaW8sIG5yKSA8IDApIHsKKwkJZmluaXNoX2NvbW1hbmQoY21kKTsgLyogdGhyb3cgYXdheSBleGl0IGNvZGUgKi8KKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiBmaW5pc2hfY29tbWFuZChjbWQpOworfQorCitlbnVtIGNoaWxkX3N0YXRlIHsKKwlHSVRfQ1BfRlJFRSwKKwlHSVRfQ1BfV09SS0lORywKKwlHSVRfQ1BfV0FJVF9DTEVBTlVQLAorfTsKKworc3RydWN0IHBhcmFsbGVsX3Byb2Nlc3NlcyB7CisJdm9pZCAqZGF0YTsKKworCWludCBtYXhfcHJvY2Vzc2VzOworCWludCBucl9wcm9jZXNzZXM7CisKKwlnZXRfbmV4dF90YXNrX2ZuIGdldF9uZXh0X3Rhc2s7CisJc3RhcnRfZmFpbHVyZV9mbiBzdGFydF9mYWlsdXJlOworCXRhc2tfZmluaXNoZWRfZm4gdGFza19maW5pc2hlZDsKKworCXN0cnVjdCB7CisJCWVudW0gY2hpbGRfc3RhdGUgc3RhdGU7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHByb2Nlc3M7CisJCXN0cnVjdCBzdHJidWYgZXJyOworCQl2b2lkICpkYXRhOworCX0gKmNoaWxkcmVuOworCS8qCisJICogVGhlIHN0cnVjdCBwb2xsZmQgaXMgbG9naWNhbGx5IHBhcnQgb2YgKmNoaWxkcmVuLAorCSAqIGJ1dCB0aGUgc3lzdGVtIGNhbGwgZXhwZWN0cyBpdCBhcyBpdHMgb3duIGFycmF5LgorCSAqLworCXN0cnVjdCBwb2xsZmQgKnBmZDsKKworCXVuc2lnbmVkIHNodXRkb3duIDogMTsKKworCWludCBvdXRwdXRfb3duZXI7CisJc3RydWN0IHN0cmJ1ZiBidWZmZXJlZF9vdXRwdXQ7IC8qIG9mIGZpbmlzaGVkIGNoaWxkcmVuICovCit9OworCitzdGF0aWMgaW50IGRlZmF1bHRfc3RhcnRfZmFpbHVyZShzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCQkJIHZvaWQgKnBwX2NiLAorCQkJCSB2b2lkICpwcF90YXNrX2NiKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlZmF1bHRfdGFza19maW5pc2hlZChpbnQgcmVzdWx0LAorCQkJCSBzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCQkJIHZvaWQgKnBwX2NiLAorCQkJCSB2b2lkICpwcF90YXNrX2NiKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBraWxsX2NoaWxkcmVuKHN0cnVjdCBwYXJhbGxlbF9wcm9jZXNzZXMgKnBwLCBpbnQgc2lnbm8pCit7CisJaW50IGksIG4gPSBwcC0+bWF4X3Byb2Nlc3NlczsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWlmIChwcC0+Y2hpbGRyZW5baV0uc3RhdGUgPT0gR0lUX0NQX1dPUktJTkcpCisJCQlraWxsKHBwLT5jaGlsZHJlbltpXS5wcm9jZXNzLnBpZCwgc2lnbm8pOworfQorCitzdGF0aWMgc3RydWN0IHBhcmFsbGVsX3Byb2Nlc3NlcyAqcHBfZm9yX3NpZ25hbDsKKworc3RhdGljIHZvaWQgaGFuZGxlX2NoaWxkcmVuX29uX3NpZ25hbChpbnQgc2lnbm8pCit7CisJa2lsbF9jaGlsZHJlbihwcF9mb3Jfc2lnbmFsLCBzaWdubyk7CisJc2lnY2hhaW5fcG9wKHNpZ25vKTsKKwlyYWlzZShzaWdubyk7Cit9CisKK3N0YXRpYyB2b2lkIHBwX2luaXQoc3RydWN0IHBhcmFsbGVsX3Byb2Nlc3NlcyAqcHAsCisJCSAgICBpbnQgbiwKKwkJICAgIGdldF9uZXh0X3Rhc2tfZm4gZ2V0X25leHRfdGFzaywKKwkJICAgIHN0YXJ0X2ZhaWx1cmVfZm4gc3RhcnRfZmFpbHVyZSwKKwkJICAgIHRhc2tfZmluaXNoZWRfZm4gdGFza19maW5pc2hlZCwKKwkJICAgIHZvaWQgKmRhdGEpCit7CisJaW50IGk7CisKKwlpZiAobiA8IDEpCisJCW4gPSBvbmxpbmVfY3B1cygpOworCisJcHAtPm1heF9wcm9jZXNzZXMgPSBuOworCisJdHJhY2VfcHJpbnRmKCJydW5fcHJvY2Vzc2VzX3BhcmFsbGVsOiBwcmVwYXJpbmcgdG8gcnVuIHVwIHRvICVkIHRhc2tzIiwgbik7CisKKwlwcC0+ZGF0YSA9IGRhdGE7CisJaWYgKCFnZXRfbmV4dF90YXNrKQorCQlCVUcoInlvdSBuZWVkIHRvIHNwZWNpZnkgYSBnZXRfbmV4dF90YXNrIGZ1bmN0aW9uIik7CisJcHAtPmdldF9uZXh0X3Rhc2sgPSBnZXRfbmV4dF90YXNrOworCisJcHAtPnN0YXJ0X2ZhaWx1cmUgPSBzdGFydF9mYWlsdXJlID8gc3RhcnRfZmFpbHVyZSA6IGRlZmF1bHRfc3RhcnRfZmFpbHVyZTsKKwlwcC0+dGFza19maW5pc2hlZCA9IHRhc2tfZmluaXNoZWQgPyB0YXNrX2ZpbmlzaGVkIDogZGVmYXVsdF90YXNrX2ZpbmlzaGVkOworCisJcHAtPm5yX3Byb2Nlc3NlcyA9IDA7CisJcHAtPm91dHB1dF9vd25lciA9IDA7CisJcHAtPnNodXRkb3duID0gMDsKKwlwcC0+Y2hpbGRyZW4gPSB4Y2FsbG9jKG4sIHNpemVvZigqcHAtPmNoaWxkcmVuKSk7CisJcHAtPnBmZCA9IHhjYWxsb2Mobiwgc2l6ZW9mKCpwcC0+cGZkKSk7CisJc3RyYnVmX2luaXQoJnBwLT5idWZmZXJlZF9vdXRwdXQsIDApOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlzdHJidWZfaW5pdCgmcHAtPmNoaWxkcmVuW2ldLmVyciwgMCk7CisJCWNoaWxkX3Byb2Nlc3NfaW5pdCgmcHAtPmNoaWxkcmVuW2ldLnByb2Nlc3MpOworCQlwcC0+cGZkW2ldLmV2ZW50cyA9IFBPTExJTiB8IFBPTExIVVA7CisJCXBwLT5wZmRbaV0uZmQgPSAtMTsKKwl9CisKKwlwcF9mb3Jfc2lnbmFsID0gcHA7CisJc2lnY2hhaW5fcHVzaF9jb21tb24oaGFuZGxlX2NoaWxkcmVuX29uX3NpZ25hbCk7Cit9CisKK3N0YXRpYyB2b2lkIHBwX2NsZWFudXAoc3RydWN0IHBhcmFsbGVsX3Byb2Nlc3NlcyAqcHApCit7CisJaW50IGk7CisKKwl0cmFjZV9wcmludGYoInJ1bl9wcm9jZXNzZXNfcGFyYWxsZWw6IGRvbmUiKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHAtPm1heF9wcm9jZXNzZXM7IGkrKykgeworCQlzdHJidWZfcmVsZWFzZSgmcHAtPmNoaWxkcmVuW2ldLmVycik7CisJCWNoaWxkX3Byb2Nlc3NfY2xlYXIoJnBwLT5jaGlsZHJlbltpXS5wcm9jZXNzKTsKKwl9CisKKwlmcmVlKHBwLT5jaGlsZHJlbik7CisJZnJlZShwcC0+cGZkKTsKKworCS8qCisJICogV2hlbiBnZXRfbmV4dF90YXNrIGFkZGVkIG1lc3NhZ2VzIHRvIHRoZSBidWZmZXIgaW4gaXRzIGxhc3QKKwkgKiBpdGVyYXRpb24sIHRoZSBidWZmZXJlZCBvdXRwdXQgaXMgbm9uIGVtcHR5LgorCSAqLworCXN0cmJ1Zl93cml0ZSgmcHAtPmJ1ZmZlcmVkX291dHB1dCwgc3RkZXJyKTsKKwlzdHJidWZfcmVsZWFzZSgmcHAtPmJ1ZmZlcmVkX291dHB1dCk7CisKKwlzaWdjaGFpbl9wb3BfY29tbW9uKCk7Cit9CisKKy8qIHJldHVybnMKKyAqICAwIGlmIGEgbmV3IHRhc2sgd2FzIHN0YXJ0ZWQuCisgKiAgMSBpZiBubyBuZXcgam9icyB3YXMgc3RhcnRlZCAoZ2V0X25leHRfdGFzayByYW4gb3V0IG9mIHdvcmssIG5vbiBjcml0aWNhbAorICogICAgcHJvYmxlbSB3aXRoIHN0YXJ0aW5nIGEgbmV3IGNvbW1hbmQpCisgKiA8MCBubyBuZXcgam9iIHdhcyBzdGFydGVkLCB1c2VyIHdpc2hlcyB0byBzaHV0ZG93biBlYXJseS4gVXNlIG5lZ2F0aXZlIGNvZGUKKyAqICAgIHRvIHNpZ25hbCB0aGUgY2hpbGRyZW4uCisgKi8KK3N0YXRpYyBpbnQgcHBfc3RhcnRfb25lKHN0cnVjdCBwYXJhbGxlbF9wcm9jZXNzZXMgKnBwKQoreworCWludCBpLCBjb2RlOworCisJZm9yIChpID0gMDsgaSA8IHBwLT5tYXhfcHJvY2Vzc2VzOyBpKyspCisJCWlmIChwcC0+Y2hpbGRyZW5baV0uc3RhdGUgPT0gR0lUX0NQX0ZSRUUpCisJCQlicmVhazsKKwlpZiAoaSA9PSBwcC0+bWF4X3Byb2Nlc3NlcykKKwkJQlVHKCJib29ra2VlcGluZyBpcyBoYXJkIik7CisKKwljb2RlID0gcHAtPmdldF9uZXh0X3Rhc2soJnBwLT5jaGlsZHJlbltpXS5wcm9jZXNzLAorCQkJCSAmcHAtPmNoaWxkcmVuW2ldLmVyciwKKwkJCQkgcHAtPmRhdGEsCisJCQkJICZwcC0+Y2hpbGRyZW5baV0uZGF0YSk7CisJaWYgKCFjb2RlKSB7CisJCXN0cmJ1Zl9hZGRidWYoJnBwLT5idWZmZXJlZF9vdXRwdXQsICZwcC0+Y2hpbGRyZW5baV0uZXJyKTsKKwkJc3RyYnVmX3Jlc2V0KCZwcC0+Y2hpbGRyZW5baV0uZXJyKTsKKwkJcmV0dXJuIDE7CisJfQorCXBwLT5jaGlsZHJlbltpXS5wcm9jZXNzLmVyciA9IC0xOworCXBwLT5jaGlsZHJlbltpXS5wcm9jZXNzLnN0ZG91dF90b19zdGRlcnIgPSAxOworCXBwLT5jaGlsZHJlbltpXS5wcm9jZXNzLm5vX3N0ZGluID0gMTsKKworCWlmIChzdGFydF9jb21tYW5kKCZwcC0+Y2hpbGRyZW5baV0ucHJvY2VzcykpIHsKKwkJY29kZSA9IHBwLT5zdGFydF9mYWlsdXJlKCZwcC0+Y2hpbGRyZW5baV0uZXJyLAorCQkJCQkgcHAtPmRhdGEsCisJCQkJCSBwcC0+Y2hpbGRyZW5baV0uZGF0YSk7CisJCXN0cmJ1Zl9hZGRidWYoJnBwLT5idWZmZXJlZF9vdXRwdXQsICZwcC0+Y2hpbGRyZW5baV0uZXJyKTsKKwkJc3RyYnVmX3Jlc2V0KCZwcC0+Y2hpbGRyZW5baV0uZXJyKTsKKwkJaWYgKGNvZGUpCisJCQlwcC0+c2h1dGRvd24gPSAxOworCQlyZXR1cm4gY29kZTsKKwl9CisKKwlwcC0+bnJfcHJvY2Vzc2VzKys7CisJcHAtPmNoaWxkcmVuW2ldLnN0YXRlID0gR0lUX0NQX1dPUktJTkc7CisJcHAtPnBmZFtpXS5mZCA9IHBwLT5jaGlsZHJlbltpXS5wcm9jZXNzLmVycjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHBfYnVmZmVyX3N0ZGVycihzdHJ1Y3QgcGFyYWxsZWxfcHJvY2Vzc2VzICpwcCwgaW50IG91dHB1dF90aW1lb3V0KQoreworCWludCBpOworCisJd2hpbGUgKChpID0gcG9sbChwcC0+cGZkLCBwcC0+bWF4X3Byb2Nlc3Nlcywgb3V0cHV0X3RpbWVvdXQpKSA8IDApIHsKKwkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJY29udGludWU7CisJCXBwX2NsZWFudXAocHApOworCQlkaWVfZXJybm8oInBvbGwiKTsKKwl9CisKKwkvKiBCdWZmZXIgb3V0cHV0IGZyb20gYWxsIHBpcGVzLiAqLworCWZvciAoaSA9IDA7IGkgPCBwcC0+bWF4X3Byb2Nlc3NlczsgaSsrKSB7CisJCWlmIChwcC0+Y2hpbGRyZW5baV0uc3RhdGUgPT0gR0lUX0NQX1dPUktJTkcgJiYKKwkJICAgIHBwLT5wZmRbaV0ucmV2ZW50cyAmIChQT0xMSU4gfCBQT0xMSFVQKSkgeworCQkJaW50IG4gPSBzdHJidWZfcmVhZF9vbmNlKCZwcC0+Y2hpbGRyZW5baV0uZXJyLAorCQkJCQkJIHBwLT5jaGlsZHJlbltpXS5wcm9jZXNzLmVyciwgMCk7CisJCQlpZiAobiA9PSAwKSB7CisJCQkJY2xvc2UocHAtPmNoaWxkcmVuW2ldLnByb2Nlc3MuZXJyKTsKKwkJCQlwcC0+Y2hpbGRyZW5baV0uc3RhdGUgPSBHSVRfQ1BfV0FJVF9DTEVBTlVQOworCQkJfSBlbHNlIGlmIChuIDwgMCkKKwkJCQlpZiAoZXJybm8gIT0gRUFHQUlOKQorCQkJCQlkaWVfZXJybm8oInJlYWQiKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcHBfb3V0cHV0KHN0cnVjdCBwYXJhbGxlbF9wcm9jZXNzZXMgKnBwKQoreworCWludCBpID0gcHAtPm91dHB1dF9vd25lcjsKKwlpZiAocHAtPmNoaWxkcmVuW2ldLnN0YXRlID09IEdJVF9DUF9XT1JLSU5HICYmCisJICAgIHBwLT5jaGlsZHJlbltpXS5lcnIubGVuKSB7CisJCXN0cmJ1Zl93cml0ZSgmcHAtPmNoaWxkcmVuW2ldLmVyciwgc3RkZXJyKTsKKwkJc3RyYnVmX3Jlc2V0KCZwcC0+Y2hpbGRyZW5baV0uZXJyKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHBfY29sbGVjdF9maW5pc2hlZChzdHJ1Y3QgcGFyYWxsZWxfcHJvY2Vzc2VzICpwcCkKK3sKKwlpbnQgaSwgY29kZTsKKwlpbnQgbiA9IHBwLT5tYXhfcHJvY2Vzc2VzOworCWludCByZXN1bHQgPSAwOworCisJd2hpbGUgKHBwLT5ucl9wcm9jZXNzZXMgPiAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwcC0+bWF4X3Byb2Nlc3NlczsgaSsrKQorCQkJaWYgKHBwLT5jaGlsZHJlbltpXS5zdGF0ZSA9PSBHSVRfQ1BfV0FJVF9DTEVBTlVQKQorCQkJCWJyZWFrOworCQlpZiAoaSA9PSBwcC0+bWF4X3Byb2Nlc3NlcykKKwkJCWJyZWFrOworCisJCWNvZGUgPSBmaW5pc2hfY29tbWFuZCgmcHAtPmNoaWxkcmVuW2ldLnByb2Nlc3MpOworCisJCWNvZGUgPSBwcC0+dGFza19maW5pc2hlZChjb2RlLAorCQkJCQkgJnBwLT5jaGlsZHJlbltpXS5lcnIsIHBwLT5kYXRhLAorCQkJCQkgcHAtPmNoaWxkcmVuW2ldLmRhdGEpOworCisJCWlmIChjb2RlKQorCQkJcmVzdWx0ID0gY29kZTsKKwkJaWYgKGNvZGUgPCAwKQorCQkJYnJlYWs7CisKKwkJcHAtPm5yX3Byb2Nlc3Nlcy0tOworCQlwcC0+Y2hpbGRyZW5baV0uc3RhdGUgPSBHSVRfQ1BfRlJFRTsKKwkJcHAtPnBmZFtpXS5mZCA9IC0xOworCQljaGlsZF9wcm9jZXNzX2luaXQoJnBwLT5jaGlsZHJlbltpXS5wcm9jZXNzKTsKKworCQlpZiAoaSAhPSBwcC0+b3V0cHV0X293bmVyKSB7CisJCQlzdHJidWZfYWRkYnVmKCZwcC0+YnVmZmVyZWRfb3V0cHV0LCAmcHAtPmNoaWxkcmVuW2ldLmVycik7CisJCQlzdHJidWZfcmVzZXQoJnBwLT5jaGlsZHJlbltpXS5lcnIpOworCQl9IGVsc2UgeworCQkJc3RyYnVmX3dyaXRlKCZwcC0+Y2hpbGRyZW5baV0uZXJyLCBzdGRlcnIpOworCQkJc3RyYnVmX3Jlc2V0KCZwcC0+Y2hpbGRyZW5baV0uZXJyKTsKKworCQkJLyogT3V0cHV0IGFsbCBvdGhlciBmaW5pc2hlZCBjaGlsZCBwcm9jZXNzZXMgKi8KKwkJCXN0cmJ1Zl93cml0ZSgmcHAtPmJ1ZmZlcmVkX291dHB1dCwgc3RkZXJyKTsKKwkJCXN0cmJ1Zl9yZXNldCgmcHAtPmJ1ZmZlcmVkX291dHB1dCk7CisKKwkJCS8qCisJCQkgKiBQaWNrIG5leHQgcHJvY2VzcyB0byBvdXRwdXQgbGl2ZS4KKwkJCSAqIE5FRURTV09SSzoKKwkJCSAqIEZvciBub3cgd2UgcGljayBpdCByYW5kb21seSBieSBkb2luZyBhIHJvdW5kCisJCQkgKiByb2Jpbi4gTGF0ZXIgd2UgbWF5IHdhbnQgdG8gcGljayB0aGUgb25lIHdpdGgKKwkJCSAqIHRoZSBtb3N0IG91dHB1dCBvciB0aGUgbG9uZ2VzdCBvciBzaG9ydGVzdAorCQkJICogcnVubmluZyBwcm9jZXNzIHRpbWUuCisJCQkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQkJaWYgKHBwLT5jaGlsZHJlblsocHAtPm91dHB1dF9vd25lciArIGkpICUgbl0uc3RhdGUgPT0gR0lUX0NQX1dPUktJTkcpCisJCQkJCWJyZWFrOworCQkJcHAtPm91dHB1dF9vd25lciA9IChwcC0+b3V0cHV0X293bmVyICsgaSkgJSBuOworCQl9CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBydW5fcHJvY2Vzc2VzX3BhcmFsbGVsKGludCBuLAorCQkJICAgZ2V0X25leHRfdGFza19mbiBnZXRfbmV4dF90YXNrLAorCQkJICAgc3RhcnRfZmFpbHVyZV9mbiBzdGFydF9mYWlsdXJlLAorCQkJICAgdGFza19maW5pc2hlZF9mbiB0YXNrX2ZpbmlzaGVkLAorCQkJICAgdm9pZCAqcHBfY2IpCit7CisJaW50IGksIGNvZGU7CisJaW50IG91dHB1dF90aW1lb3V0ID0gMTAwOworCWludCBzcGF3bl9jYXAgPSA0OworCXN0cnVjdCBwYXJhbGxlbF9wcm9jZXNzZXMgcHA7CisKKwlwcF9pbml0KCZwcCwgbiwgZ2V0X25leHRfdGFzaywgc3RhcnRfZmFpbHVyZSwgdGFza19maW5pc2hlZCwgcHBfY2IpOworCXdoaWxlICgxKSB7CisJCWZvciAoaSA9IDA7CisJCSAgICBpIDwgc3Bhd25fY2FwICYmICFwcC5zaHV0ZG93biAmJgorCQkgICAgcHAubnJfcHJvY2Vzc2VzIDwgcHAubWF4X3Byb2Nlc3NlczsKKwkJICAgIGkrKykgeworCQkJY29kZSA9IHBwX3N0YXJ0X29uZSgmcHApOworCQkJaWYgKCFjb2RlKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNvZGUgPCAwKSB7CisJCQkJcHAuc2h1dGRvd24gPSAxOworCQkJCWtpbGxfY2hpbGRyZW4oJnBwLCAtY29kZSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlpZiAoIXBwLm5yX3Byb2Nlc3NlcykKKwkJCWJyZWFrOworCQlwcF9idWZmZXJfc3RkZXJyKCZwcCwgb3V0cHV0X3RpbWVvdXQpOworCQlwcF9vdXRwdXQoJnBwKTsKKwkJY29kZSA9IHBwX2NvbGxlY3RfZmluaXNoZWQoJnBwKTsKKwkJaWYgKGNvZGUpIHsKKwkJCXBwLnNodXRkb3duID0gMTsKKwkJCWlmIChjb2RlIDwgMCkKKwkJCQlraWxsX2NoaWxkcmVuKCZwcCwgLWNvZGUpOworCQl9CisJfQorCisJcHBfY2xlYW51cCgmcHApOworCXJldHVybiAwOworfQorCitpbnQgcnVuX3Byb2Nlc3Nlc19wYXJhbGxlbF90cjIoaW50IG4sIGdldF9uZXh0X3Rhc2tfZm4gZ2V0X25leHRfdGFzaywKKwkJCSAgICAgICBzdGFydF9mYWlsdXJlX2ZuIHN0YXJ0X2ZhaWx1cmUsCisJCQkgICAgICAgdGFza19maW5pc2hlZF9mbiB0YXNrX2ZpbmlzaGVkLCB2b2lkICpwcF9jYiwKKwkJCSAgICAgICBjb25zdCBjaGFyICp0cjJfY2F0ZWdvcnksIGNvbnN0IGNoYXIgKnRyMl9sYWJlbCkKK3sKKwlpbnQgcmVzdWx0OworCisJdHJhY2UyX3JlZ2lvbl9lbnRlcl9wcmludGYodHIyX2NhdGVnb3J5LCB0cjJfbGFiZWwsIE5VTEwsICJtYXg6JWQiLAorCQkJCSAgICgobiA8IDEpID8gb25saW5lX2NwdXMoKSA6IG4pKTsKKworCXJlc3VsdCA9IHJ1bl9wcm9jZXNzZXNfcGFyYWxsZWwobiwgZ2V0X25leHRfdGFzaywgc3RhcnRfZmFpbHVyZSwKKwkJCQkJdGFza19maW5pc2hlZCwgcHBfY2IpOworCisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSh0cjJfY2F0ZWdvcnksIHRyMl9sYWJlbCwgTlVMTCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgcnVuX2F1dG9fZ2MoaW50IHF1aWV0KQoreworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3ZfZ2NfYXV0byA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlpbnQgc3RhdHVzOworCisJYXJndl9hcnJheV9wdXNobCgmYXJndl9nY19hdXRvLCAiZ2MiLCAiLS1hdXRvIiwgTlVMTCk7CisJaWYgKHF1aWV0KQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3ZfZ2NfYXV0bywgIi0tcXVpZXQiKTsKKwlzdGF0dXMgPSBydW5fY29tbWFuZF92X29wdChhcmd2X2djX2F1dG8uYXJndiwgUlVOX0dJVF9DTUQpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3ZfZ2NfYXV0byk7CisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL3J1bi1jb21tYW5kLmggYi9ydW4tY29tbWFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MWRmY2QKLS0tIC9kZXYvbnVsbAorKysgYi9ydW4tY29tbWFuZC5oCkBAIC0wLDAgKzEsNDc4IEBACisjaWZuZGVmIFJVTl9DT01NQU5EX0gKKyNkZWZpbmUgUlVOX0NPTU1BTkRfSAorCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisKKy8qKgorICogVGhlIHJ1bi1jb21tYW5kIEFQSSBvZmZlcnMgYSB2ZXJzYXRpbGUgdG9vbCB0byBydW4gc3ViLXByb2Nlc3NlcyB3aXRoCisgKiByZWRpcmVjdGVkIGlucHV0IGFuZCBvdXRwdXQgYXMgd2VsbCBhcyB3aXRoIGEgbW9kaWZpZWQgZW52aXJvbm1lbnQKKyAqIGFuZCBhbiBhbHRlcm5hdGUgY3VycmVudCBkaXJlY3RvcnkuCisgKgorICogQSBzaW1pbGFyIEFQSSBvZmZlcnMgdGhlIGNhcGFiaWxpdHkgdG8gcnVuIGEgZnVuY3Rpb24gYXN5bmNocm9ub3VzbHksCisgKiB3aGljaCBpcyBwcmltYXJpbHkgdXNlZCB0byBjYXB0dXJlIHRoZSBvdXRwdXQgdGhhdCB0aGUgZnVuY3Rpb24KKyAqIHByb2R1Y2VzIGluIHRoZSBjYWxsZXIgaW4gb3JkZXIgdG8gcHJvY2VzcyBpdC4KKyAqLworCisKKy8qKgorICogVGhpcyBkZXNjcmliZXMgdGhlIGFyZ3VtZW50cywgcmVkaXJlY3Rpb25zLCBhbmQgZW52aXJvbm1lbnQgb2YgYQorICogY29tbWFuZCB0byBydW4gaW4gYSBzdWItcHJvY2Vzcy4KKyAqCisgKiBUaGUgY2FsbGVyOgorICoKKyAqIDEuIGFsbG9jYXRlcyBhbmQgY2xlYXJzICh1c2luZyBjaGlsZF9wcm9jZXNzX2luaXQoKSBvcgorICogICAgQ0hJTERfUFJPQ0VTU19JTklUKSBhIHN0cnVjdCBjaGlsZF9wcm9jZXNzIHZhcmlhYmxlOworICogMi4gaW5pdGlhbGl6ZXMgdGhlIG1lbWJlcnM7CisgKiAzLiBjYWxscyBzdGFydF9jb21tYW5kKCk7CisgKiA0LiBwcm9jZXNzZXMgdGhlIGRhdGE7CisgKiA1LiBjbG9zZXMgZmlsZSBkZXNjcmlwdG9ycyAoaWYgbmVjZXNzYXJ5OyBzZWUgYmVsb3cpOworICogNi4gY2FsbHMgZmluaXNoX2NvbW1hbmQoKS4KKyAqCisgKiBTcGVjaWFsIGZvcm1zIG9mIHJlZGlyZWN0aW9uIGFyZSBhdmFpbGFibGUgYnkgc2V0dGluZyB0aGVzZSBtZW1iZXJzCisgKiB0byAxOgorICoKKyAqICAubm9fc3RkaW4sIC5ub19zdGRvdXQsIC5ub19zdGRlcnI6IFRoZSByZXNwZWN0aXZlIGNoYW5uZWwgaXMKKyAqCQlyZWRpcmVjdGVkIHRvIC9kZXYvbnVsbC4KKyAqCisgKgkuc3Rkb3V0X3RvX3N0ZGVycjogc3Rkb3V0IG9mIHRoZSBjaGlsZCBpcyByZWRpcmVjdGVkIHRvIGl0cworICoJCXN0ZGVyci4gVGhpcyBoYXBwZW5zIGFmdGVyIHN0ZGVyciBpcyBpdHNlbGYgcmVkaXJlY3RlZC4KKyAqCQlTbyBzdGRvdXQgd2lsbCBmb2xsb3cgc3RkZXJyIHRvIHdoZXJldmVyIGl0IGlzCisgKgkJcmVkaXJlY3RlZC4KKyAqLworc3RydWN0IGNoaWxkX3Byb2Nlc3MgeworCisJLyoqCisJICogVGhlIC5hcmd2IG1lbWJlciBpcyBzZXQgdXAgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHBvaW50ZXJzIChOVUxMCisJICogdGVybWluYXRlZCksIG9mIHdoaWNoIC5hcmd2WzBdIGlzIHRoZSBwcm9ncmFtIG5hbWUgdG8gcnVuICh1c3VhbGx5CisJICogd2l0aG91dCBhIHBhdGgpLiBJZiB0aGUgY29tbWFuZCB0byBydW4gaXMgYSBnaXQgY29tbWFuZCwgc2V0IGFyZ3ZbMF0gdG8KKwkgKiB0aGUgY29tbWFuZCBuYW1lIHdpdGhvdXQgdGhlICdnaXQtJyBwcmVmaXggYW5kIHNldCAuZ2l0X2NtZCA9IDEuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlIG93bmVyc2hpcCBvZiB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgLmFyZ3Ygc3RheXMgd2l0aCB0aGUKKwkgKiBjYWxsZXIsIGJ1dCBpdCBzaG91bGQgc3Vydml2ZSB1bnRpbCBgZmluaXNoX2NvbW1hbmRgIGNvbXBsZXRlcy4gSWYgdGhlCisJICogLmFyZ3YgbWVtYmVyIGlzIE5VTEwsIGBzdGFydF9jb21tYW5kYCB3aWxsIHBvaW50IGl0IGF0IHRoZSAuYXJncworCSAqIGBhcmd2X2FycmF5YCAoc28geW91IG1heSB1c2Ugb25lIG9yIHRoZSBvdGhlciwgYnV0IHlvdSBtdXN0IHVzZSBleGFjdGx5CisJICogb25lKS4gVGhlIG1lbW9yeSBpbiAuYXJncyB3aWxsIGJlIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseSBkdXJpbmcKKwkgKiBgZmluaXNoX2NvbW1hbmRgIChvciBkdXJpbmcgYHN0YXJ0X2NvbW1hbmRgIHdoZW4gaXQgaXMgdW5zdWNjZXNzZnVsKS4KKwkgKgorCSAqLworCWNvbnN0IGNoYXIgKiphcmd2OworCisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJnczsKKwlzdHJ1Y3QgYXJndl9hcnJheSBlbnZfYXJyYXk7CisJcGlkX3QgcGlkOworCisJaW50IHRyYWNlMl9jaGlsZF9pZDsKKwl1aW50NjRfdCB0cmFjZTJfY2hpbGRfdXNfc3RhcnQ7CisJY29uc3QgY2hhciAqdHJhY2UyX2NoaWxkX2NsYXNzOworCWNvbnN0IGNoYXIgKnRyYWNlMl9ob29rX25hbWU7CisKKwkvKgorCSAqIFVzaW5nIC5pbiwgLm91dCwgLmVycjoKKwkgKiAtIFNwZWNpZnkgMCBmb3Igbm8gcmVkaXJlY3Rpb25zLiBObyBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIGFsbG9jYXRlZC4KKwkgKiAoY2hpbGQgaW5oZXJpdHMgc3RkaW4sIHN0ZG91dCwgc3RkZXJyIGZyb20gcGFyZW50KS4KKwkgKiAtIFNwZWNpZnkgLTEgdG8gaGF2ZSBhIHBpcGUgYWxsb2NhdGVkIGFzIGZvbGxvd3M6CisJICogICAgIC5pbjogcmV0dXJucyB0aGUgd3JpdGFibGUgcGlwZSBlbmQ7IHBhcmVudCB3cml0ZXMgdG8gaXQsCisJICogICAgICAgICAgdGhlIHJlYWRhYmxlIHBpcGUgZW5kIGJlY29tZXMgY2hpbGQncyBzdGRpbgorCSAqICAgICAub3V0LCAuZXJyOiByZXR1cm5zIHRoZSByZWFkYWJsZSBwaXBlIGVuZDsgcGFyZW50IHJlYWRzIGZyb20KKwkgKiAgICAgICAgICBpdCwgdGhlIHdyaXRhYmxlIHBpcGUgZW5kIGJlY29tZXMgY2hpbGQncyBzdGRvdXQvc3RkZXJyCisJICogICBUaGUgY2FsbGVyIG9mIHN0YXJ0X2NvbW1hbmQoKSBtdXN0IGNsb3NlIHRoZSByZXR1cm5lZCBGRHMKKwkgKiAgIGFmdGVyIGl0IGhhcyBjb21wbGV0ZWQgcmVhZGluZyBmcm9tL3dyaXRpbmcgdG8gaXQhCisJICogLSBTcGVjaWZ5ID4gMCB0byBzZXQgYSBjaGFubmVsIHRvIGEgcGFydGljdWxhciBGRCBhcyBmb2xsb3dzOgorCSAqICAgICAuaW46IGEgcmVhZGFibGUgRkQsIGJlY29tZXMgY2hpbGQncyBzdGRpbgorCSAqICAgICAub3V0OiBhIHdyaXRhYmxlIEZELCBiZWNvbWVzIGNoaWxkJ3Mgc3Rkb3V0L3N0ZGVycgorCSAqICAgICAuZXJyOiBhIHdyaXRhYmxlIEZELCBiZWNvbWVzIGNoaWxkJ3Mgc3RkZXJyCisJICogICBUaGUgc3BlY2lmaWVkIEZEIGlzIGNsb3NlZCBieSBzdGFydF9jb21tYW5kKCksIGV2ZW4gaW4gY2FzZQorCSAqICAgb2YgZXJyb3JzIQorCSAqLworCWludCBpbjsKKwlpbnQgb3V0OworCWludCBlcnI7CisKKwkvKioKKwkgKiBUbyBzcGVjaWZ5IGEgbmV3IGluaXRpYWwgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoZSBzdWItcHJvY2VzcywKKwkgKiBzcGVjaWZ5IGl0IGluIHRoZSAuZGlyIG1lbWJlci4KKwkgKi8KKwljb25zdCBjaGFyICpkaXI7CisKKwkvKioKKwkgKiBUbyBtb2RpZnkgdGhlIGVudmlyb25tZW50IG9mIHRoZSBzdWItcHJvY2Vzcywgc3BlY2lmeSBhbiBhcnJheSBvZgorCSAqIHN0cmluZyBwb2ludGVycyAoTlVMTCB0ZXJtaW5hdGVkKSBpbiAuZW52OgorCSAqCisJICogLSBJZiB0aGUgc3RyaW5nIGlzIG9mIHRoZSBmb3JtICJWQVI9dmFsdWUiLCBpLmUuIGl0IGNvbnRhaW5zICc9JworCSAqICAgdGhlIHZhcmlhYmxlIGlzIGFkZGVkIHRvIHRoZSBjaGlsZCBwcm9jZXNzJ3MgZW52aXJvbm1lbnQuCisJICoKKwkgKiAtIElmIHRoZSBzdHJpbmcgZG9lcyBub3QgY29udGFpbiAnPScsIGl0IG5hbWVzIGFuIGVudmlyb25tZW50CisJICogICB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzJ3MgZW52aXJvbm1lbnQuCisJICoKKwkgKiBJZiB0aGUgLmVudiBtZW1iZXIgaXMgTlVMTCwgYHN0YXJ0X2NvbW1hbmRgIHdpbGwgcG9pbnQgaXQgYXQgdGhlCisJICogLmVudl9hcnJheSBgYXJndl9hcnJheWAgKHNvIHlvdSBtYXkgdXNlIG9uZSBvciB0aGUgb3RoZXIsIGJ1dCBub3QgYm90aCkuCisJICogVGhlIG1lbW9yeSBpbiAuZW52X2FycmF5IHdpbGwgYmUgY2xlYW5lZCB1cCBhdXRvbWF0aWNhbGx5IGR1cmluZworCSAqIGBmaW5pc2hfY29tbWFuZGAgKG9yIGR1cmluZyBgc3RhcnRfY29tbWFuZGAgd2hlbiBpdCBpcyB1bnN1Y2Nlc3NmdWwpLgorCSAqLworCWNvbnN0IGNoYXIgKmNvbnN0ICplbnY7CisKKwl1bnNpZ25lZCBub19zdGRpbjoxOworCXVuc2lnbmVkIG5vX3N0ZG91dDoxOworCXVuc2lnbmVkIG5vX3N0ZGVycjoxOworCXVuc2lnbmVkIGdpdF9jbWQ6MTsgLyogaWYgdGhpcyBpcyB0byBiZSBnaXQgc3ViLWNvbW1hbmQgKi8KKworCS8qKgorCSAqIElmIHRoZSBwcm9ncmFtIGNhbm5vdCBiZSBmb3VuZCwgdGhlIGZ1bmN0aW9ucyByZXR1cm4gLTEgYW5kIHNldAorCSAqIGVycm5vIHRvIEVOT0VOVC4gTm9ybWFsbHksIGFuIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCwgYnV0IGlmCisJICogLnNpbGVudF9leGVjX2ZhaWx1cmUgaXMgc2V0IHRvIDEsIG5vIG1lc3NhZ2UgaXMgcHJpbnRlZCBmb3IgdGhpcworCSAqIHNwZWNpYWwgZXJyb3IgY29uZGl0aW9uLgorCSAqLworCXVuc2lnbmVkIHNpbGVudF9leGVjX2ZhaWx1cmU6MTsKKworCXVuc2lnbmVkIHN0ZG91dF90b19zdGRlcnI6MTsKKwl1bnNpZ25lZCB1c2Vfc2hlbGw6MTsKKwl1bnNpZ25lZCBjbGVhbl9vbl9leGl0OjE7CisJdW5zaWduZWQgd2FpdF9hZnRlcl9jbGVhbjoxOworCXZvaWQgKCpjbGVhbl9vbl9leGl0X2hhbmRsZXIpKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpwcm9jZXNzKTsKKwl2b2lkICpjbGVhbl9vbl9leGl0X2hhbmRsZXJfY2JkYXRhOworfTsKKworI2RlZmluZSBDSElMRF9QUk9DRVNTX0lOSVQgeyBOVUxMLCBBUkdWX0FSUkFZX0lOSVQsIEFSR1ZfQVJSQVlfSU5JVCB9CisKKy8qKgorICogVGhlIGZ1bmN0aW9uczogY2hpbGRfcHJvY2Vzc19pbml0LCBzdGFydF9jb21tYW5kLCBmaW5pc2hfY29tbWFuZCwKKyAqIHJ1bl9jb21tYW5kLCBydW5fY29tbWFuZF92X29wdCwgcnVuX2NvbW1hbmRfdl9vcHRfY2RfZW52LCBjaGlsZF9wcm9jZXNzX2NsZWFyCisgKiBkbyB0aGUgZm9sbG93aW5nOgorICoKKyAqIC0gSWYgYSBzeXN0ZW0gY2FsbCBmYWlsZWQsIGVycm5vIGlzIHNldCBhbmQgLTEgaXMgcmV0dXJuZWQuIEEgZGlhZ25vc3RpYworICogICBpcyBwcmludGVkLgorICoKKyAqIC0gSWYgdGhlIHByb2dyYW0gd2FzIG5vdCBmb3VuZCwgdGhlbiAtMSBpcyByZXR1cm5lZCBhbmQgZXJybm8gaXMgc2V0IHRvCisgKiAgIEVOT0VOVDsgYSBkaWFnbm9zdGljIGlzIHByaW50ZWQgb25seSBpZiAuc2lsZW50X2V4ZWNfZmFpbHVyZSBpcyAwLgorICoKKyAqIC0gT3RoZXJ3aXNlLCB0aGUgcHJvZ3JhbSBpcyBydW4uIElmIGl0IHRlcm1pbmF0ZXMgcmVndWxhcmx5LCBpdHMgZXhpdAorICogICBjb2RlIGlzIHJldHVybmVkLiBObyBkaWFnbm9zdGljIGlzIHByaW50ZWQsIGV2ZW4gaWYgdGhlIGV4aXQgY29kZSBpcworICogICBub24temVyby4KKyAqCisgKiAtIElmIHRoZSBwcm9ncmFtIHRlcm1pbmF0ZWQgZHVlIHRvIGEgc2lnbmFsLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlCisgKiAgIHNpZ25hbCBudW1iZXIgKyAxMjgsIGllLiB0aGUgc2FtZSB2YWx1ZSB0aGF0IGEgUE9TSVggc2hlbGwncyAkPyB3b3VsZAorICogICByZXBvcnQuICBBIGRpYWdub3N0aWMgaXMgcHJpbnRlZC4KKyAqCisgKi8KKworLyoqCisgKiBJbml0aWFsaXplIGEgc3RydWN0IGNoaWxkX3Byb2Nlc3MgdmFyaWFibGUuCisgKi8KK3ZvaWQgY2hpbGRfcHJvY2Vzc19pbml0KHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOworCisvKioKKyAqIFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIHN0cnVjdCBjaGlsZF9wcm9jZXNzLgorICogTW9zdCB1c2VycyBvZiB0aGUgcnVuLWNvbW1hbmQgQVBJIGRvbid0IG5lZWQgdG8gY2FsbCB0aGlzCisgKiBmdW5jdGlvbiBleHBsaWNpdGx5IGJlY2F1c2UgYHN0YXJ0X2NvbW1hbmRgIGludm9rZXMgaXQgb24KKyAqIGZhaWx1cmUgYW5kIGBmaW5pc2hfY29tbWFuZGAgY2FsbHMgaXQgYXV0b21hdGljYWxseSBhbHJlYWR5LgorICovCit2b2lkIGNoaWxkX3Byb2Nlc3NfY2xlYXIoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKik7CisKK2ludCBpc19leGVjdXRhYmxlKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKioKKyAqIFN0YXJ0IGEgc3ViLXByb2Nlc3MuIFRha2VzIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3QgY2hpbGRfcHJvY2Vzc2AKKyAqIHRoYXQgc3BlY2lmaWVzIHRoZSBkZXRhaWxzIGFuZCByZXR1cm5zIHBpcGUgRkRzIChpZiByZXF1ZXN0ZWQpLgorICogU2VlIGJlbG93IGZvciBkZXRhaWxzLgorICovCitpbnQgc3RhcnRfY29tbWFuZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqKTsKKworLyoqCisgKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiBhIHN1Yi1wcm9jZXNzIHRoYXQgd2FzIHN0YXJ0ZWQgd2l0aAorICogc3RhcnRfY29tbWFuZCgpLgorICovCitpbnQgZmluaXNoX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKik7CisKK2ludCBmaW5pc2hfY29tbWFuZF9pbl9zaWduYWwoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKik7CisKKy8qKgorICogQSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IGVuY2Fwc3VsYXRlcyBhIHNlcXVlbmNlIG9mCisgKiBzdGFydF9jb21tYW5kKCkgZm9sbG93ZWQgYnkgZmluaXNoX2NvbW1hbmQoKS4gVGFrZXMgYSBwb2ludGVyCisgKiB0byBhIGBzdHJ1Y3QgY2hpbGRfcHJvY2Vzc2AgdGhhdCBzcGVjaWZpZXMgdGhlIGRldGFpbHMuCisgKi8KK2ludCBydW5fY29tbWFuZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqKTsKKworLyoKKyAqIFJldHVybnMgdGhlIHBhdGggdG8gdGhlIGhvb2sgZmlsZSwgb3IgTlVMTCBpZiB0aGUgaG9vayBpcyBtaXNzaW5nCisgKiBvciBkaXNhYmxlZC4gTm90ZSB0aGF0IHRoaXMgcG9pbnRzIHRvIHN0YXRpYyBzdG9yYWdlIHRoYXQgd2lsbCBiZQorICogb3ZlcndyaXR0ZW4gYnkgZnVydGhlciBjYWxscyB0byBmaW5kX2hvb2sgYW5kIHJ1bl9ob29rXyouCisgKi8KK2NvbnN0IGNoYXIgKmZpbmRfaG9vayhjb25zdCBjaGFyICpuYW1lKTsKKworLyoqCisgKiBSdW4gYSBob29rLgorICogVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgcGF0aG5hbWUgdG8gYW4gaW5kZXggZmlsZSwgb3IgTlVMTAorICogaWYgdGhlIGhvb2sgdXNlcyB0aGUgZGVmYXVsdCBpbmRleCBmaWxlIG9yIG5vIGluZGV4IGlzIG5lZWRlZC4KKyAqIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIGhvb2suCisgKiBUaGUgZnVydGhlciBhcmd1bWVudHMgY29ycmVzcG9uZCB0byB0aGUgaG9vayBhcmd1bWVudHMuCisgKiBUaGUgbGFzdCBhcmd1bWVudCBoYXMgdG8gYmUgTlVMTCB0byB0ZXJtaW5hdGUgdGhlIGFyZ3VtZW50cyBsaXN0LgorICogSWYgdGhlIGhvb2sgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGV4ZWN1dGFibGUsIHRoZSByZXR1cm4KKyAqIHZhbHVlIHdpbGwgYmUgemVyby4KKyAqIElmIGl0IGlzIGV4ZWN1dGFibGUsIHRoZSBob29rIHdpbGwgYmUgZXhlY3V0ZWQgYW5kIHRoZSBleGl0CisgKiBzdGF0dXMgb2YgdGhlIGhvb2sgaXMgcmV0dXJuZWQuCisgKiBPbiBleGVjdXRpb24sIC5zdGRvdXRfdG9fc3RkZXJyIGFuZCAubm9fc3RkaW4gd2lsbCBiZSBzZXQuCisgKi8KK0xBU1RfQVJHX01VU1RfQkVfTlVMTAoraW50IHJ1bl9ob29rX2xlKGNvbnN0IGNoYXIgKmNvbnN0ICplbnYsIGNvbnN0IGNoYXIgKm5hbWUsIC4uLik7CitpbnQgcnVuX2hvb2tfdmUoY29uc3QgY2hhciAqY29uc3QgKmVudiwgY29uc3QgY2hhciAqbmFtZSwgdmFfbGlzdCBhcmdzKTsKKworLyoKKyAqIFRyaWdnZXIgYW4gYXV0by1nYworICovCitpbnQgcnVuX2F1dG9fZ2MoaW50IHF1aWV0KTsKKworI2RlZmluZSBSVU5fQ09NTUFORF9OT19TVERJTiAxCisjZGVmaW5lIFJVTl9HSVRfQ01ECSAgICAgMgkvKklmIHRoaXMgaXMgdG8gYmUgZ2l0IHN1Yi1jb21tYW5kICovCisjZGVmaW5lIFJVTl9DT01NQU5EX1NURE9VVF9UT19TVERFUlIgNAorI2RlZmluZSBSVU5fU0lMRU5UX0VYRUNfRkFJTFVSRSA4CisjZGVmaW5lIFJVTl9VU0lOR19TSEVMTCAxNgorI2RlZmluZSBSVU5fQ0xFQU5fT05fRVhJVCAzMgorCisvKioKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0IGVuY2Fwc3VsYXRlIGEgc2VxdWVuY2Ugb2YKKyAqIHN0YXJ0X2NvbW1hbmQoKSBmb2xsb3dlZCBieSBmaW5pc2hfY29tbWFuZCgpLiBUaGUgYXJndW1lbnQgYXJndgorICogc3BlY2lmaWVzIHRoZSBwcm9ncmFtIGFuZCBpdHMgYXJndW1lbnRzLiBUaGUgYXJndW1lbnQgb3B0IGlzIHplcm8KKyAqIG9yIG1vcmUgb2YgdGhlIGZsYWdzIGBSVU5fQ09NTUFORF9OT19TVERJTmAsIGBSVU5fR0lUX0NNRGAsCisgKiBgUlVOX0NPTU1BTkRfU1RET1VUX1RPX1NUREVSUmAsIG9yIGBSVU5fU0lMRU5UX0VYRUNfRkFJTFVSRWAKKyAqIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgbWVtYmVycyAubm9fc3RkaW4sIC5naXRfY21kLAorICogLnN0ZG91dF90b19zdGRlcnIsIC5zaWxlbnRfZXhlY19mYWlsdXJlIG9mIGBzdHJ1Y3QgY2hpbGRfcHJvY2Vzc2AuCisgKiBUaGUgYXJndW1lbnQgZGlyIGNvcnJlc3BvbmRzIHRoZSBtZW1iZXIgLmRpci4gVGhlIGFyZ3VtZW50IGVudgorICogY29ycmVzcG9uZHMgdG8gdGhlIG1lbWJlciAuZW52LgorICovCitpbnQgcnVuX2NvbW1hbmRfdl9vcHQoY29uc3QgY2hhciAqKmFyZ3YsIGludCBvcHQpOworaW50IHJ1bl9jb21tYW5kX3Zfb3B0X3RyMihjb25zdCBjaGFyICoqYXJndiwgaW50IG9wdCwgY29uc3QgY2hhciAqdHIyX2NsYXNzKTsKKy8qCisgKiBlbnYgKHRoZSBlbnZpcm9ubWVudCkgaXMgdG8gYmUgZm9ybWF0dGVkIGxpa2UgZW52aXJvbjogIlZBUj1WQUxVRSIuCisgKiBUbyB1bnNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB1c2UganVzdCAiVkFSIi4KKyAqLworaW50IHJ1bl9jb21tYW5kX3Zfb3B0X2NkX2Vudihjb25zdCBjaGFyICoqYXJndiwgaW50IG9wdCwgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpjb25zdCAqZW52KTsKK2ludCBydW5fY29tbWFuZF92X29wdF9jZF9lbnZfdHIyKGNvbnN0IGNoYXIgKiphcmd2LCBpbnQgb3B0LCBjb25zdCBjaGFyICpkaXIsCisJCQkJIGNvbnN0IGNoYXIgKmNvbnN0ICplbnYsIGNvbnN0IGNoYXIgKnRyMl9jbGFzcyk7CisKKy8qKgorICogRXhlY3V0ZSB0aGUgZ2l2ZW4gY29tbWFuZCwgc2VuZGluZyAiaW4iIHRvIGl0cyBzdGRpbiwgYW5kIGNhcHR1cmluZyBpdHMKKyAqIHN0ZG91dCBhbmQgc3RkZXJyIGluIHRoZSAib3V0IiBhbmQgImVyciIgc3RyYnVmcy4gQW55IG9mIHRoZSB0aHJlZSBtYXkKKyAqIGJlIE5VTEwgdG8gc2tpcCBwcm9jZXNzaW5nLgorICoKKyAqIFJldHVybnMgLTEgaWYgc3RhcnRpbmcgdGhlIGNvbW1hbmQgZmFpbHMgb3IgcmVhZGluZyBmYWlscywgYW5kIG90aGVyd2lzZQorICogcmV0dXJucyB0aGUgZXhpdCBjb2RlIG9mIHRoZSBjb21tYW5kLiBBbnkgb3V0cHV0IGNvbGxlY3RlZCBpbiB0aGUKKyAqIGJ1ZmZlcnMgaXMga2VwdCBldmVuIGlmIHRoZSBjb21tYW5kIHJldHVybnMgYSBub24temVybyBleGl0LiBUaGUgaGludCBmaWVsZHMKKyAqIGdpdmVzIHN0YXJ0aW5nIHNpemVzIGZvciB0aGUgc3RyYnVmIGFsbG9jYXRpb25zLgorICoKKyAqIFRoZSBmaWVsZHMgb2YgImNtZCIgc2hvdWxkIGJlIHNldCB1cCBhcyB0aGV5IHdvdWxkIGZvciBhIG5vcm1hbCBydW5fY29tbWFuZAorICogaW52b2NhdGlvbi4gQnV0IG5vdGUgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIHNldCB0aGUgaW4sIG91dCwgb3IgZXJyCisgKiBmaWVsZHM7IHBpcGVfY29tbWFuZCBoYW5kbGVzIHRoYXQgYXV0b21hdGljYWxseS4KKyAqLworaW50IHBpcGVfY29tbWFuZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kLAorCQkgY29uc3QgY2hhciAqaW4sIHNpemVfdCBpbl9sZW4sCisJCSBzdHJ1Y3Qgc3RyYnVmICpvdXQsIHNpemVfdCBvdXRfaGludCwKKwkJIHN0cnVjdCBzdHJidWYgKmVyciwgc2l6ZV90IGVycl9oaW50KTsKKworLyoqCisgKiBDb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCBwaXBlX2NvbW1hbmQgZm9yIHRoZSBjb21tb24gY2FzZQorICogb2YgY2FwdHVyaW5nIG9ubHkgc3Rkb3V0LgorICovCitzdGF0aWMgaW5saW5lIGludCBjYXB0dXJlX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCwKKwkJCQkgIHN0cnVjdCBzdHJidWYgKm91dCwKKwkJCQkgIHNpemVfdCBoaW50KQoreworCXJldHVybiBwaXBlX2NvbW1hbmQoY21kLCBOVUxMLCAwLCBvdXQsIGhpbnQsIE5VTEwsIDApOworfQorCisvKgorICogVGhlIHB1cnBvc2Ugb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaXMgdG8gZmVlZCBhIHBpcGUgYnkgcnVubmluZworICogYSBmdW5jdGlvbiBhc3luY2hyb25vdXNseSBhbmQgcHJvdmlkaW5nIG91dHB1dCB0aGF0IHRoZSBjYWxsZXIgcmVhZHMuCisgKgorICogSXQgaXMgZXhwZWN0ZWQgdGhhdCBubyBzeW5jaHJvbml6YXRpb24gYW5kIG11dHVhbCBleGNsdXNpb24gYmV0d2VlbgorICogdGhlIGNhbGxlciBhbmQgdGhlIGZlZWQgZnVuY3Rpb24gaXMgbmVjZXNzYXJ5IHNvIHRoYXQgdGhlIGZ1bmN0aW9uCisgKiBjYW4gcnVuIGluIGEgdGhyZWFkIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgY2FsbGVyLgorICoKKyAqIFRoZSBjYWxsZXI6CisgKgorICogMS4gYWxsb2NhdGVzIGFuZCBjbGVhcnMgKG1lbXNldCgmYXN5LCAwLCBzaXplb2YoYXN5KSk7KSBhCisgKiAgICBzdHJ1Y3QgYXN5bmMgdmFyaWFibGU7CisgKiAyLiBpbml0aWFsaXplcyAucHJvYyBhbmQgLmRhdGE7CisgKiAzLiBjYWxscyBzdGFydF9hc3luYygpOworICogNC4gcHJvY2Vzc2VzIGNvbW11bmljYXRlcyB3aXRoIHByb2MgdGhyb3VnaCAuaW4gYW5kIC5vdXQ7CisgKiA1LiBjbG9zZXMgLmluIGFuZCAub3V0OworICogNi4gY2FsbHMgZmluaXNoX2FzeW5jKCkuCisgKgorICogVGhlcmUgYXJlIHNlcmlvdXMgcmVzdHJpY3Rpb25zIG9uIHdoYXQgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjYW4gZG8KKyAqIGJlY2F1c2UgdGhpcyBmYWNpbGl0eSBpcyBpbXBsZW1lbnRlZCBieSBhIHRocmVhZCBpbiB0aGUgc2FtZSBhZGRyZXNzCisgKiBzcGFjZSBvbiBtb3N0IHBsYXRmb3JtcyAod2hlbiBwdGhyZWFkcyBpcyBhdmFpbGFibGUpLCBidXQgYnkgYSBwaXBlIHRvCisgKiBhIGZvcmtlZCBwcm9jZXNzIG90aGVyd2lzZToKKyAqCisgKiAtIEl0IGNhbm5vdCBjaGFuZ2UgdGhlIHByb2dyYW0ncyBzdGF0ZSAoZ2xvYmFsIHZhcmlhYmxlcywgZW52aXJvbm1lbnQsCisgKiAgIGV0Yy4pIGluIGEgd2F5IHRoYXQgdGhlIGNhbGxlciBub3RpY2VzOyBpbiBvdGhlciB3b3JkcywgLmluIGFuZCAub3V0CisgKiAgIGFyZSB0aGUgb25seSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHRvIHRoZSBjYWxsZXIuCisgKgorICogLSBJdCBtdXN0IG5vdCBjaGFuZ2UgdGhlIHByb2dyYW0ncyBzdGF0ZSB0aGF0IHRoZSBjYWxsZXIgb2YgdGhlCisgKiAgIGZhY2lsaXR5IGFsc28gdXNlcy4KKyAqCisgKi8KK3N0cnVjdCBhc3luYyB7CisKKwkvKioKKwkgKiBUaGUgZnVuY3Rpb24gcG9pbnRlciBpbiAucHJvYyBoYXMgdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6CisJICoKKwkgKglpbnQgcHJvYyhpbnQgaW4sIGludCBvdXQsIHZvaWQgKmRhdGEpOworCSAqCisJICogLSBpbiwgb3V0IHNwZWNpZmllcyBhIHNldCBvZiBmaWxlIGRlc2NyaXB0b3JzIHRvIHdoaWNoIHRoZSBmdW5jdGlvbgorCSAqICBtdXN0IHJlYWQvd3JpdGUgdGhlIGRhdGEgdGhhdCBpdCBuZWVkcy9wcm9kdWNlcy4gIFRoZSBmdW5jdGlvbgorCSAqICAqbXVzdCogY2xvc2UgdGhlc2UgZGVzY3JpcHRvcnMgYmVmb3JlIGl0IHJldHVybnMuICBBIGRlc2NyaXB0b3IKKwkgKiAgbWF5IGJlIC0xIGlmIHRoZSBjYWxsZXIgZGlkIG5vdCBjb25maWd1cmUgYSBkZXNjcmlwdG9yIGZvciB0aGF0CisJICogIGRpcmVjdGlvbi4KKwkgKgorCSAqIC0gZGF0YSBpcyB0aGUgdmFsdWUgdGhhdCB0aGUgY2FsbGVyIGhhcyBzcGVjaWZpZWQgaW4gdGhlIC5kYXRhIG1lbWJlcgorCSAqICBvZiBzdHJ1Y3QgYXN5bmMuCisJICoKKwkgKiAtIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGlzIDAgb24gc3VjY2VzcyBhbmQgbm9uLXplcm8KKwkgKiAgb24gZmFpbHVyZS4gSWYgdGhlIGZ1bmN0aW9uIGluZGljYXRlcyBmYWlsdXJlLCBmaW5pc2hfYXN5bmMoKSB3aWxsCisJICogIHJlcG9ydCBmYWlsdXJlIGFzIHdlbGwuCisJICoKKwkgKi8KKwlpbnQgKCpwcm9jKShpbnQgaW4sIGludCBvdXQsIHZvaWQgKmRhdGEpOworCisJdm9pZCAqZGF0YTsKKworCS8qKgorCSAqIFRoZSBtZW1iZXJzIC5pbiwgLm91dCBhcmUgdXNlZCB0byBwcm92aWRlIGEgc2V0IG9mIGZkJ3MgZm9yCisJICogY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBjYWxsZXIgYW5kIHRoZSBjYWxsZWUgYXMgZm9sbG93czoKKwkgKgorCSAqIC0gU3BlY2lmeSAwIHRvIGhhdmUgbm8gZmlsZSBkZXNjcmlwdG9yIHBhc3NlZC4gIFRoZSBjYWxsZWUgd2lsbAorCSAqICAgcmVjZWl2ZSAtMSBpbiB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudC4KKwkgKgorCSAqIC0gU3BlY2lmeSA8IDAgdG8gaGF2ZSBhIHBpcGUgYWxsb2NhdGVkOyBzdGFydF9hc3luYygpIHJlcGxhY2VzCisJICogICB3aXRoIHRoZSBwaXBlIEZEIGluIHRoZSBmb2xsb3dpbmcgd2F5OgorCSAqCisJICogCS5pbjogUmV0dXJucyB0aGUgd3JpdGFibGUgcGlwZSBlbmQgaW50byB3aGljaCB0aGUgY2FsbGVyCisJICogCXdyaXRlczsgdGhlIHJlYWRhYmxlIGVuZCBvZiB0aGUgcGlwZSBiZWNvbWVzIHRoZSBmdW5jdGlvbidzCisJICogCWluIGFyZ3VtZW50LgorCSAqCisJICogCS5vdXQ6IFJldHVybnMgdGhlIHJlYWRhYmxlIHBpcGUgZW5kIGZyb20gd2hpY2ggdGhlIGNhbGxlcgorCSAqIAlyZWFkczsgdGhlIHdyaXRhYmxlIGVuZCBvZiB0aGUgcGlwZSBiZWNvbWVzIHRoZSBmdW5jdGlvbidzCisJICogCW91dCBhcmd1bWVudC4KKwkgKgorCSAqICAgVGhlIGNhbGxlciBvZiBzdGFydF9hc3luYygpIG11c3QgY2xvc2UgdGhlIHJldHVybmVkIEZEcyBhZnRlciBpdAorCSAqICAgaGFzIGNvbXBsZXRlZCByZWFkaW5nIGZyb20vd3JpdGluZyBmcm9tIHRoZW0uCisJICoKKwkgKiAtIFNwZWNpZnkgYSBmaWxlIGRlc2NyaXB0b3IgPiAwIHRvIGJlIHVzZWQgYnkgdGhlIGZ1bmN0aW9uOgorCSAqCisJICogCS5pbjogVGhlIEZEIG11c3QgYmUgcmVhZGFibGU7IGl0IGJlY29tZXMgdGhlIGZ1bmN0aW9uJ3MgaW4uCisJICogCS5vdXQ6IFRoZSBGRCBtdXN0IGJlIHdyaXRhYmxlOyBpdCBiZWNvbWVzIHRoZSBmdW5jdGlvbidzIG91dC4KKwkgKgorCSAqICAgVGhlIHNwZWNpZmllZCBGRCBpcyBjbG9zZWQgYnkgc3RhcnRfYXN5bmMoKSwgZXZlbiBpZiBpdCBmYWlscyB0bworCSAqICAgcnVuIHRoZSBmdW5jdGlvbi4KKwkgKi8KKwlpbnQgaW47CQkvKiBjYWxsZXIgd3JpdGVzIGhlcmUgYW5kIGNsb3NlcyBpdCAqLworCWludCBvdXQ7CS8qIGNhbGxlciByZWFkcyBmcm9tIGhlcmUgYW5kIGNsb3NlcyBpdCAqLworI2lmZGVmIE5PX1BUSFJFQURTCisJcGlkX3QgcGlkOworI2Vsc2UKKwlwdGhyZWFkX3QgdGlkOworCWludCBwcm9jX2luOworCWludCBwcm9jX291dDsKKyNlbmRpZgorCWludCBpc29sYXRlX3NpZ3BpcGU7Cit9OworCisvKioKKyAqIFJ1biBhIGZ1bmN0aW9uIGFzeW5jaHJvbm91c2x5LiBUYWtlcyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0CisgKiBhc3luY2AgdGhhdCBzcGVjaWZpZXMgdGhlIGRldGFpbHMgYW5kIHJldHVybnMgYSBzZXQgb2YgcGlwZSBGRHMKKyAqIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZ1bmN0aW9uLiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisgKi8KK2ludCBzdGFydF9hc3luYyhzdHJ1Y3QgYXN5bmMgKmFzeW5jKTsKKworLyoqCisgKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCB3YXMKKyAqIHN0YXJ0ZWQgd2l0aCBzdGFydF9hc3luYygpLgorICovCitpbnQgZmluaXNoX2FzeW5jKHN0cnVjdCBhc3luYyAqYXN5bmMpOworCitpbnQgaW5fYXN5bmModm9pZCk7CitpbnQgYXN5bmNfd2l0aF9mb3JrKHZvaWQpOwordm9pZCBjaGVja19waXBlKGludCBlcnIpOworCisvKioKKyAqIFRoaXMgY2FsbGJhY2sgc2hvdWxkIGluaXRpYWxpemUgdGhlIGNoaWxkIHByb2Nlc3MgYW5kIHByZWxvYWQgdGhlCisgKiBlcnJvciBjaGFubmVsIGlmIGRlc2lyZWQuIFRoZSBwcmVsb2FkaW5nIG9mIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0bworICogaGF2ZSBhIG1lc3NhZ2UgcHJpbnRlZCBkaXJlY3RseSBiZWZvcmUgdGhlIG91dHB1dCBvZiB0aGUgY2hpbGQgcHJvY2Vzcy4KKyAqIHBwX2NiIGlzIHRoZSBjYWxsYmFjayBjb29raWUgYXMgcGFzc2VkIHRvIHJ1bl9wcm9jZXNzZXNfcGFyYWxsZWwuCisgKiBZb3UgY2FuIHN0b3JlIGEgY2hpbGQgcHJvY2VzcyBzcGVjaWZpYyBjYWxsYmFjayBjb29raWUgaW4gcHBfdGFza19jYi4KKyAqCisgKiBFdmVuIGFmdGVyIHJldHVybmluZyAwIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUgcHJvY2Vzc2VzLAorICogdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZ2FpbiB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSBydW5uaW5nCisgKiBjaGlsZCBwcm9jZXNzZXMuCisgKgorICogUmV0dXJuIDEgaWYgdGhlIG5leHQgY2hpbGQgaXMgcmVhZHkgdG8gcnVuLgorICogUmV0dXJuIDAgaWYgdGhlcmUgYXJlIGN1cnJlbnRseSBubyBtb3JlIHRhc2tzIHRvIGJlIHByb2Nlc3NlZC4KKyAqIFRvIHNlbmQgYSBzaWduYWwgdG8gb3RoZXIgY2hpbGQgcHJvY2Vzc2VzIGZvciBhYm9ydGlvbiwKKyAqIHJldHVybiB0aGUgbmVnYXRpdmUgc2lnbmFsIG51bWJlci4KKyAqLwordHlwZWRlZiBpbnQgKCpnZXRfbmV4dF90YXNrX2ZuKShzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY3AsCisJCQkJc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJCXZvaWQgKnBwX2NiLAorCQkJCXZvaWQgKipwcF90YXNrX2NiKTsKKworLyoqCisgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuZXZlciB0aGVyZSBhcmUgcHJvYmxlbXMgc3RhcnRpbmcKKyAqIGEgbmV3IHByb2Nlc3MuCisgKgorICogWW91IG11c3Qgbm90IHdyaXRlIHRvIHN0ZG91dCBvciBzdGRlcnIgaW4gdGhpcyBmdW5jdGlvbi4gQWRkIHlvdXIKKyAqIG1lc3NhZ2UgdG8gdGhlIHN0cmJ1ZiBvdXQgaW5zdGVhZCwgd2hpY2ggd2lsbCBiZSBwcmludGVkIHdpdGhvdXQKKyAqIG1lc3NpbmcgdXAgdGhlIG91dHB1dCBvZiB0aGUgb3RoZXIgcGFyYWxsZWwgcHJvY2Vzc2VzLgorICoKKyAqIHBwX2NiIGlzIHRoZSBjYWxsYmFjayBjb29raWUgYXMgcGFzc2VkIGludG8gcnVuX3Byb2Nlc3Nlc19wYXJhbGxlbCwKKyAqIHBwX3Rhc2tfY2IgaXMgdGhlIGNhbGxiYWNrIGNvb2tpZSBhcyBwYXNzZWQgaW50byBnZXRfbmV4dF90YXNrX2ZuLgorICoKKyAqIFJldHVybiAwIHRvIGNvbnRpbnVlIHRoZSBwYXJhbGxlbCBwcm9jZXNzaW5nLiBUbyBhYm9ydCByZXR1cm4gbm9uIHplcm8uCisgKiBUbyBzZW5kIGEgc2lnbmFsIHRvIG90aGVyIGNoaWxkIHByb2Nlc3NlcyBmb3IgYWJvcnRpb24sIHJldHVybgorICogdGhlIG5lZ2F0aXZlIHNpZ25hbCBudW1iZXIuCisgKi8KK3R5cGVkZWYgaW50ICgqc3RhcnRfZmFpbHVyZV9mbikoc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJCXZvaWQgKnBwX2NiLAorCQkJCXZvaWQgKnBwX3Rhc2tfY2IpOworCisvKioKKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIG9uIGV2ZXJ5IGNoaWxkIHByb2Nlc3MgdGhhdCBmaW5pc2hlZCBwcm9jZXNzaW5nLgorICoKKyAqIFlvdSBtdXN0IG5vdCB3cml0ZSB0byBzdGRvdXQgb3Igc3RkZXJyIGluIHRoaXMgZnVuY3Rpb24uIEFkZCB5b3VyCisgKiBtZXNzYWdlIHRvIHRoZSBzdHJidWYgb3V0IGluc3RlYWQsIHdoaWNoIHdpbGwgYmUgcHJpbnRlZCB3aXRob3V0CisgKiBtZXNzaW5nIHVwIHRoZSBvdXRwdXQgb2YgdGhlIG90aGVyIHBhcmFsbGVsIHByb2Nlc3Nlcy4KKyAqCisgKiBwcF9jYiBpcyB0aGUgY2FsbGJhY2sgY29va2llIGFzIHBhc3NlZCBpbnRvIHJ1bl9wcm9jZXNzZXNfcGFyYWxsZWwsCisgKiBwcF90YXNrX2NiIGlzIHRoZSBjYWxsYmFjayBjb29raWUgYXMgcGFzc2VkIGludG8gZ2V0X25leHRfdGFza19mbi4KKyAqCisgKiBSZXR1cm4gMCB0byBjb250aW51ZSB0aGUgcGFyYWxsZWwgcHJvY2Vzc2luZy4gIFRvIGFib3J0IHJldHVybiBub24gemVyby4KKyAqIFRvIHNlbmQgYSBzaWduYWwgdG8gb3RoZXIgY2hpbGQgcHJvY2Vzc2VzIGZvciBhYm9ydGlvbiwgcmV0dXJuCisgKiB0aGUgbmVnYXRpdmUgc2lnbmFsIG51bWJlci4KKyAqLwordHlwZWRlZiBpbnQgKCp0YXNrX2ZpbmlzaGVkX2ZuKShpbnQgcmVzdWx0LAorCQkJCXN0cnVjdCBzdHJidWYgKm91dCwKKwkJCQl2b2lkICpwcF9jYiwKKwkJCQl2b2lkICpwcF90YXNrX2NiKTsKKworLyoqCisgKiBSdW5zIHVwIHRvIG4gcHJvY2Vzc2VzIGF0IHRoZSBzYW1lIHRpbWUuIFdoZW5ldmVyIGEgcHJvY2VzcyBjYW4gYmUKKyAqIHN0YXJ0ZWQsIHRoZSBjYWxsYmFjayBnZXRfbmV4dF90YXNrX2ZuIGlzIGNhbGxlZCB0byBvYnRhaW4gdGhlIGRhdGEKKyAqIHJlcXVpcmVkIHRvIHN0YXJ0IGFub3RoZXIgY2hpbGQgcHJvY2Vzcy4KKyAqCisgKiBUaGUgY2hpbGRyZW4gc3RhcnRlZCB2aWEgdGhpcyBmdW5jdGlvbiBydW4gaW4gcGFyYWxsZWwuIFRoZWlyIG91dHB1dAorICogKGJvdGggc3Rkb3V0IGFuZCBzdGRlcnIpIGlzIHJvdXRlZCB0byBzdGRlcnIgaW4gYSBtYW5uZXIgdGhhdCBvdXRwdXQKKyAqIGZyb20gZGlmZmVyZW50IHRhc2tzIGRvZXMgbm90IGludGVybGVhdmUuCisgKgorICogc3RhcnRfZmFpbHVyZV9mbiBhbmQgdGFza19maW5pc2hlZF9mbiBjYW4gYmUgTlVMTCB0byBvbWl0IGFueQorICogc3BlY2lhbCBoYW5kbGluZy4KKyAqLworaW50IHJ1bl9wcm9jZXNzZXNfcGFyYWxsZWwoaW50IG4sCisJCQkgICBnZXRfbmV4dF90YXNrX2ZuLAorCQkJICAgc3RhcnRfZmFpbHVyZV9mbiwKKwkJCSAgIHRhc2tfZmluaXNoZWRfZm4sCisJCQkgICB2b2lkICpwcF9jYik7CitpbnQgcnVuX3Byb2Nlc3Nlc19wYXJhbGxlbF90cjIoaW50IG4sIGdldF9uZXh0X3Rhc2tfZm4sIHN0YXJ0X2ZhaWx1cmVfZm4sCisJCQkgICAgICAgdGFza19maW5pc2hlZF9mbiwgdm9pZCAqcHBfY2IsCisJCQkgICAgICAgY29uc3QgY2hhciAqdHIyX2NhdGVnb3J5LCBjb25zdCBjaGFyICp0cjJfbGFiZWwpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NlbmQtcGFjay5jIGIvc2VuZC1wYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFiZWUyMgotLS0gL2Rldi9udWxsCisrKyBiL3NlbmQtcGFjay5jCkBAIC0wLDAgKzEsNjA5IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic2VuZC1wYWNrLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAib2lkLWFycmF5LmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic2hhbGxvdy5oIgorCitpbnQgb3B0aW9uX3BhcnNlX3B1c2hfc2lnbmVkKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KSB7CisJCSooaW50ICopKG9wdC0+dmFsdWUpID0gU0VORF9QQUNLX1BVU0hfQ0VSVF9ORVZFUjsKKwkJcmV0dXJuIDA7CisJfQorCXN3aXRjaCAoZ2l0X3BhcnNlX21heWJlX2Jvb2woYXJnKSkgeworCWNhc2UgMToKKwkJKihpbnQgKikob3B0LT52YWx1ZSkgPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0FMV0FZUzsKKwkJcmV0dXJuIDA7CisJY2FzZSAwOgorCQkqKGludCAqKShvcHQtPnZhbHVlKSA9IFNFTkRfUEFDS19QVVNIX0NFUlRfTkVWRVI7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNhc2VjbXAoImlmLWFza2VkIiwgYXJnKSkgeworCQkqKGludCAqKShvcHQtPnZhbHVlKSA9IFNFTkRfUEFDS19QVVNIX0NFUlRfSUZfQVNLRUQ7CisJCXJldHVybiAwOworCX0KKwlkaWUoImJhZCAlcyBhcmd1bWVudDogJXMiLCBvcHQtPmxvbmdfbmFtZSwgYXJnKTsKK30KKworc3RhdGljIHZvaWQgZmVlZF9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBGSUxFICpmaCwgaW50IG5lZ2F0aXZlKQoreworCWlmIChuZWdhdGl2ZSAmJgorCSAgICAhaGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3Mob2lkLAorCQkJCQlPQkpFQ1RfSU5GT19TS0lQX0ZFVENIX09CSkVDVCB8CisJCQkJCU9CSkVDVF9JTkZPX1FVSUNLKSkKKwkJcmV0dXJuOworCisJaWYgKG5lZ2F0aXZlKQorCQlwdXRjKCdeJywgZmgpOworCWZwdXRzKG9pZF90b19oZXgob2lkKSwgZmgpOworCXB1dGMoJ1xuJywgZmgpOworfQorCisvKgorICogTWFrZSBhIHBhY2sgc3RyZWFtIGFuZCBzcGl0IGl0IG91dCBpbnRvIGZpbGUgZGVzY3JpcHRvciBmZAorICovCitzdGF0aWMgaW50IHBhY2tfb2JqZWN0cyhpbnQgZmQsIHN0cnVjdCByZWYgKnJlZnMsIHN0cnVjdCBvaWRfYXJyYXkgKmV4dHJhLCBzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgKmFyZ3MpCit7CisJLyoKKwkgKiBUaGUgY2hpbGQgYmVjb21lcyBwYWNrLW9iamVjdHMgLS1yZXZzOyB3ZSBmZWVkCisJICogdGhlIHJldmlzaW9uIHBhcmFtZXRlcnMgdG8gaXQgdmlhIGl0cyBzdGRpbiBhbmQKKwkgKiBsZXQgaXRzIHN0ZG91dCBnbyBiYWNrIHRvIHRoZSBvdGhlciBlbmQuCisJICovCisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcG8gPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJRklMRSAqcG9faW47CisJaW50IGk7CisJaW50IHJjOworCisJYXJndl9hcnJheV9wdXNoKCZwby5hcmdzLCAicGFjay1vYmplY3RzIik7CisJYXJndl9hcnJheV9wdXNoKCZwby5hcmdzLCAiLS1hbGwtcHJvZ3Jlc3MtaW1wbGllZCIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmcG8uYXJncywgIi0tcmV2cyIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmcG8uYXJncywgIi0tc3Rkb3V0Iik7CisJaWYgKGFyZ3MtPnVzZV90aGluX3BhY2spCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcG8uYXJncywgIi0tdGhpbiIpOworCWlmIChhcmdzLT51c2Vfb2ZzX2RlbHRhKQorCQlhcmd2X2FycmF5X3B1c2goJnBvLmFyZ3MsICItLWRlbHRhLWJhc2Utb2Zmc2V0Iik7CisJaWYgKGFyZ3MtPnF1aWV0IHx8ICFhcmdzLT5wcm9ncmVzcykKKwkJYXJndl9hcnJheV9wdXNoKCZwby5hcmdzLCAiLXEiKTsKKwlpZiAoYXJncy0+cHJvZ3Jlc3MpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcG8uYXJncywgIi0tcHJvZ3Jlc3MiKTsKKwlpZiAoaXNfcmVwb3NpdG9yeV9zaGFsbG93KHRoZV9yZXBvc2l0b3J5KSkKKwkJYXJndl9hcnJheV9wdXNoKCZwby5hcmdzLCAiLS1zaGFsbG93Iik7CisJcG8uaW4gPSAtMTsKKwlwby5vdXQgPSBhcmdzLT5zdGF0ZWxlc3NfcnBjID8gLTEgOiBmZDsKKwlwby5naXRfY21kID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmcG8pKQorCQlkaWVfZXJybm8oImdpdCBwYWNrLW9iamVjdHMgZmFpbGVkIik7CisKKwkvKgorCSAqIFdlIGZlZWQgdGhlIHBhY2stb2JqZWN0cyB3ZSBqdXN0IHNwYXduZWQgd2l0aCByZXZpc2lvbgorCSAqIHBhcmFtZXRlcnMgYnkgd3JpdGluZyB0byB0aGUgcGlwZS4KKwkgKi8KKwlwb19pbiA9IHhmZG9wZW4ocG8uaW4sICJ3Iik7CisJZm9yIChpID0gMDsgaSA8IGV4dHJhLT5ucjsgaSsrKQorCQlmZWVkX29iamVjdCgmZXh0cmEtPm9pZFtpXSwgcG9faW4sIDEpOworCisJd2hpbGUgKHJlZnMpIHsKKwkJaWYgKCFpc19udWxsX29pZCgmcmVmcy0+b2xkX29pZCkpCisJCQlmZWVkX29iamVjdCgmcmVmcy0+b2xkX29pZCwgcG9faW4sIDEpOworCQlpZiAoIWlzX251bGxfb2lkKCZyZWZzLT5uZXdfb2lkKSkKKwkJCWZlZWRfb2JqZWN0KCZyZWZzLT5uZXdfb2lkLCBwb19pbiwgMCk7CisJCXJlZnMgPSByZWZzLT5uZXh0OworCX0KKworCWZmbHVzaChwb19pbik7CisJaWYgKGZlcnJvcihwb19pbikpCisJCWRpZV9lcnJubygiZXJyb3Igd3JpdGluZyB0byBwYWNrLW9iamVjdHMiKTsKKwlmY2xvc2UocG9faW4pOworCisJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpIHsKKwkJY2hhciAqYnVmID0geG1hbGxvYyhMQVJHRV9QQUNLRVRfTUFYKTsKKwkJd2hpbGUgKDEpIHsKKwkJCXNzaXplX3QgbiA9IHhyZWFkKHBvLm91dCwgYnVmLCBMQVJHRV9QQUNLRVRfTUFYKTsKKwkJCWlmIChuIDw9IDApCisJCQkJYnJlYWs7CisJCQlzZW5kX3NpZGViYW5kKGZkLCAtMSwgYnVmLCBuLCBMQVJHRV9QQUNLRVRfTUFYKTsKKwkJfQorCQlmcmVlKGJ1Zik7CisJCWNsb3NlKHBvLm91dCk7CisJCXBvLm91dCA9IC0xOworCX0KKworCXJjID0gZmluaXNoX2NvbW1hbmQoJnBvKTsKKwlpZiAocmMpIHsKKwkJLyoKKwkJICogRm9yIGEgbm9ybWFsIG5vbi16ZXJvIGV4aXQsIHdlIGFzc3VtZSBwYWNrLW9iamVjdHMgd3JvdGUKKwkJICogc29tZXRoaW5nIHVzZWZ1bCB0byBzdGRlcnIuIEZvciBkZWF0aCBieSBzaWduYWwsIHRob3VnaCwKKwkJICogd2Ugc2hvdWxkIG1lbnRpb24gaXQgdG8gdGhlIHVzZXIuIFRoZSBleGNlcHRpb24gaXMgU0lHUElQRQorCQkgKiAoMTQxKSwgYmVjYXVzZSB0aGF0J3MgYSBub3JtYWwgb2NjdXJyZW5jZSBpZiB0aGUgcmVtb3RlIGVuZAorCQkgKiBoYW5ncyB1cCAoYW5kIHdlJ2xsIHJlcG9ydCB0aGF0IGJ5IHRyeWluZyB0byByZWFkIHRoZSB1bnBhY2sKKwkJICogc3RhdHVzKS4KKwkJICovCisJCWlmIChyYyA+IDEyOCAmJiByYyAhPSAxNDEpCisJCQllcnJvcigicGFjay1vYmplY3RzIGRpZWQgb2Ygc2lnbmFsICVkIiwgcmMgLSAxMjgpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlY2VpdmVfdW5wYWNrX3N0YXR1cyhzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVhZGVyKQoreworCWlmIChwYWNrZXRfcmVhZGVyX3JlYWQocmVhZGVyKSAhPSBQQUNLRVRfUkVBRF9OT1JNQUwpCisJCXJldHVybiBlcnJvcihfKCJ1bmV4cGVjdGVkIGZsdXNoIHBhY2tldCB3aGlsZSByZWFkaW5nIHJlbW90ZSB1bnBhY2sgc3RhdHVzIikpOworCWlmICghc2tpcF9wcmVmaXgocmVhZGVyLT5saW5lLCAidW5wYWNrICIsICZyZWFkZXItPmxpbmUpKQorCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIHBhcnNlIHJlbW90ZSB1bnBhY2sgc3RhdHVzOiAlcyIpLCByZWFkZXItPmxpbmUpOworCWlmIChzdHJjbXAocmVhZGVyLT5saW5lLCAib2siKSkKKwkJcmV0dXJuIGVycm9yKF8oInJlbW90ZSB1bnBhY2sgZmFpbGVkOiAlcyIpLCByZWFkZXItPmxpbmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlY2VpdmVfc3RhdHVzKHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZWFkZXIsIHN0cnVjdCByZWYgKnJlZnMpCit7CisJc3RydWN0IHJlZiAqaGludDsKKwlpbnQgcmV0OworCisJaGludCA9IE5VTEw7CisJcmV0ID0gcmVjZWl2ZV91bnBhY2tfc3RhdHVzKHJlYWRlcik7CisJd2hpbGUgKDEpIHsKKwkJY29uc3QgY2hhciAqcmVmbmFtZTsKKwkJY2hhciAqbXNnOworCQlpZiAocGFja2V0X3JlYWRlcl9yZWFkKHJlYWRlcikgIT0gUEFDS0VUX1JFQURfTk9STUFMKQorCQkJYnJlYWs7CisJCWlmICghc3RhcnRzX3dpdGgocmVhZGVyLT5saW5lLCAib2sgIikgJiYgIXN0YXJ0c193aXRoKHJlYWRlci0+bGluZSwgIm5nICIpKSB7CisJCQllcnJvcigiaW52YWxpZCByZWYgc3RhdHVzIGZyb20gcmVtb3RlOiAlcyIsIHJlYWRlci0+bGluZSk7CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisKKwkJcmVmbmFtZSA9IHJlYWRlci0+bGluZSArIDM7CisJCW1zZyA9IHN0cmNocihyZWZuYW1lLCAnICcpOworCQlpZiAobXNnKQorCQkJKm1zZysrID0gJ1wwJzsKKworCQkvKiBmaXJzdCB0cnkgc2VhcmNoaW5nIGF0IG91ciBoaW50LCBmYWxsaW5nIGJhY2sgdG8gYWxsIHJlZnMgKi8KKwkJaWYgKGhpbnQpCisJCQloaW50ID0gZmluZF9yZWZfYnlfbmFtZShoaW50LCByZWZuYW1lKTsKKwkJaWYgKCFoaW50KQorCQkJaGludCA9IGZpbmRfcmVmX2J5X25hbWUocmVmcywgcmVmbmFtZSk7CisJCWlmICghaGludCkgeworCQkJd2FybmluZygicmVtb3RlIHJlcG9ydGVkIHN0YXR1cyBvbiB1bmtub3duIHJlZjogJXMiLAorCQkJCQlyZWZuYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChoaW50LT5zdGF0dXMgIT0gUkVGX1NUQVRVU19FWFBFQ1RJTkdfUkVQT1JUKSB7CisJCQl3YXJuaW5nKCJyZW1vdGUgcmVwb3J0ZWQgc3RhdHVzIG9uIHVuZXhwZWN0ZWQgcmVmOiAlcyIsCisJCQkJCXJlZm5hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocmVhZGVyLT5saW5lWzBdID09ICdvJyAmJiByZWFkZXItPmxpbmVbMV0gPT0gJ2snKQorCQkJaGludC0+c3RhdHVzID0gUkVGX1NUQVRVU19PSzsKKwkJZWxzZQorCQkJaGludC0+c3RhdHVzID0gUkVGX1NUQVRVU19SRU1PVEVfUkVKRUNUOworCQloaW50LT5yZW1vdGVfc3RhdHVzID0geHN0cmR1cF9vcl9udWxsKG1zZyk7CisJCS8qIHN0YXJ0IG91ciBuZXh0IHNlYXJjaCBmcm9tIHRoZSBuZXh0IHJlZiAqLworCQloaW50ID0gaGludC0+bmV4dDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaWRlYmFuZF9kZW11eChpbnQgaW4sIGludCBvdXQsIHZvaWQgKmRhdGEpCit7CisJaW50ICpmZCA9IGRhdGEsIHJldDsKKwlpZiAoYXN5bmNfd2l0aF9mb3JrKCkpCisJCWNsb3NlKGZkWzFdKTsKKwlyZXQgPSByZWN2X3NpZGViYW5kKCJzZW5kLXBhY2siLCBmZFswXSwgb3V0KTsKKwljbG9zZShvdXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWR2ZXJ0aXNlX3NoYWxsb3dfZ3JhZnRzX2NiKGNvbnN0IHN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0LCB2b2lkICpjYikKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpzYiA9IGNiOworCWlmIChncmFmdC0+bnJfcGFyZW50ID09IC0xKQorCQlwYWNrZXRfYnVmX3dyaXRlKHNiLCAic2hhbGxvdyAlc1xuIiwgb2lkX3RvX2hleCgmZ3JhZnQtPm9pZCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZHZlcnRpc2Vfc2hhbGxvd19ncmFmdHNfYnVmKHN0cnVjdCBzdHJidWYgKnNiKQoreworCWlmICghaXNfcmVwb3NpdG9yeV9zaGFsbG93KHRoZV9yZXBvc2l0b3J5KSkKKwkJcmV0dXJuOworCWZvcl9lYWNoX2NvbW1pdF9ncmFmdChhZHZlcnRpc2Vfc2hhbGxvd19ncmFmdHNfY2IsIHNiKTsKK30KKworI2RlZmluZSBDSEVDS19SRUZfTk9fUFVTSCAtMQorI2RlZmluZSBDSEVDS19SRUZfU1RBVFVTX1JFSkVDVEVEIC0yCisjZGVmaW5lIENIRUNLX1JFRl9VUFRPREFURSAtMworc3RhdGljIGludCBjaGVja190b19zZW5kX3VwZGF0ZShjb25zdCBzdHJ1Y3QgcmVmICpyZWYsIGNvbnN0IHN0cnVjdCBzZW5kX3BhY2tfYXJncyAqYXJncykKK3sKKwlpZiAoIXJlZi0+cGVlcl9yZWYgJiYgIWFyZ3MtPnNlbmRfbWlycm9yKQorCQlyZXR1cm4gQ0hFQ0tfUkVGX05PX1BVU0g7CisKKwkvKiBDaGVjayBmb3Igc3RhdHVzZXMgc2V0IGJ5IHNldF9yZWZfc3RhdHVzX2Zvcl9wdXNoKCkgKi8KKwlzd2l0Y2ggKHJlZi0+c3RhdHVzKSB7CisJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9OT05GQVNURk9SV0FSRDoKKwljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX0FMUkVBRFlfRVhJU1RTOgorCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfRkVUQ0hfRklSU1Q6CisJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9ORUVEU19GT1JDRToKKwljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX1NUQUxFOgorCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTk9ERUxFVEU6CisJCXJldHVybiBDSEVDS19SRUZfU1RBVFVTX1JFSkVDVEVEOworCWNhc2UgUkVGX1NUQVRVU19VUFRPREFURToKKwkJcmV0dXJuIENIRUNLX1JFRl9VUFRPREFURTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisgKiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUsIG9yIHRoZSBlbmQgb2YgYnVmZmVyLgorICoKKyAqIE5FRURTV09SSzogcGVyaGFwcyBtb3ZlIHRoaXMgdG8gZ2l0LWNvbXBhdC11dGlsLmggb3Igc29tZXdoZXJlIGFuZAorICogY29udmVydCBtYW55IHNpbWlsYXIgdXNlcyBmb3VuZCBieSAiZ2l0IGdyZXAgLUE0IG1lbWNociIuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpuZXh0X2xpbmUoY29uc3QgY2hhciAqbGluZSwgc2l6ZV90IGxlbikKK3sKKwljb25zdCBjaGFyICpubCA9IG1lbWNocihsaW5lLCAnXG4nLCBsZW4pOworCWlmICghbmwpCisJCXJldHVybiBsaW5lICsgbGVuOyAvKiBpbmNvbXBsZXRlIGxpbmUgKi8KKwlyZXR1cm4gbmwgKyAxOworfQorCitzdGF0aWMgaW50IGdlbmVyYXRlX3B1c2hfY2VydChzdHJ1Y3Qgc3RyYnVmICpyZXFfYnVmLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsCisJCQkgICAgICBzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgKmFyZ3MsCisJCQkgICAgICBjb25zdCBjaGFyICpjYXBfc3RyaW5nLAorCQkJICAgICAgY29uc3QgY2hhciAqcHVzaF9jZXJ0X25vbmNlKQoreworCWNvbnN0IHN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwljaGFyICpzaWduaW5nX2tleSA9IHhzdHJkdXAoZ2V0X3NpZ25pbmdfa2V5KCkpOworCWNvbnN0IGNoYXIgKmNwLCAqbnA7CisJc3RydWN0IHN0cmJ1ZiBjZXJ0ID0gU1RSQlVGX0lOSVQ7CisJaW50IHVwZGF0ZV9zZWVuID0gMDsKKworCXN0cmJ1Zl9hZGRzdHIoJmNlcnQsICJjZXJ0aWZpY2F0ZSB2ZXJzaW9uIDAuMVxuIik7CisJc3RyYnVmX2FkZGYoJmNlcnQsICJwdXNoZXIgJXMgIiwgc2lnbmluZ19rZXkpOworCWRhdGVzdGFtcCgmY2VydCk7CisJc3RyYnVmX2FkZGNoKCZjZXJ0LCAnXG4nKTsKKwlpZiAoYXJncy0+dXJsICYmICphcmdzLT51cmwpIHsKKwkJY2hhciAqYW5vbl91cmwgPSB0cmFuc3BvcnRfYW5vbnltaXplX3VybChhcmdzLT51cmwpOworCQlzdHJidWZfYWRkZigmY2VydCwgInB1c2hlZSAlc1xuIiwgYW5vbl91cmwpOworCQlmcmVlKGFub25fdXJsKTsKKwl9CisJaWYgKHB1c2hfY2VydF9ub25jZVswXSkKKwkJc3RyYnVmX2FkZGYoJmNlcnQsICJub25jZSAlc1xuIiwgcHVzaF9jZXJ0X25vbmNlKTsKKwlpZiAoYXJncy0+cHVzaF9vcHRpb25zKQorCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIGFyZ3MtPnB1c2hfb3B0aW9ucykKKwkJCXN0cmJ1Zl9hZGRmKCZjZXJ0LCAicHVzaC1vcHRpb24gJXNcbiIsIGl0ZW0tPnN0cmluZyk7CisJc3RyYnVmX2FkZHN0cigmY2VydCwgIlxuIik7CisKKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAoY2hlY2tfdG9fc2VuZF91cGRhdGUocmVmLCBhcmdzKSA8IDApCisJCQljb250aW51ZTsKKwkJdXBkYXRlX3NlZW4gPSAxOworCQlzdHJidWZfYWRkZigmY2VydCwgIiVzICVzICVzXG4iLAorCQkJICAgIG9pZF90b19oZXgoJnJlZi0+b2xkX29pZCksCisJCQkgICAgb2lkX3RvX2hleCgmcmVmLT5uZXdfb2lkKSwKKwkJCSAgICByZWYtPm5hbWUpOworCX0KKwlpZiAoIXVwZGF0ZV9zZWVuKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCisJaWYgKHNpZ25fYnVmZmVyKCZjZXJ0LCAmY2VydCwgc2lnbmluZ19rZXkpKQorCQlkaWUoXygiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiKSk7CisKKwlwYWNrZXRfYnVmX3dyaXRlKHJlcV9idWYsICJwdXNoLWNlcnQlYyVzIiwgMCwgY2FwX3N0cmluZyk7CisJZm9yIChjcCA9IGNlcnQuYnVmOyBjcCA8IGNlcnQuYnVmICsgY2VydC5sZW47IGNwID0gbnApIHsKKwkJbnAgPSBuZXh0X2xpbmUoY3AsIGNlcnQuYnVmICsgY2VydC5sZW4gLSBjcCk7CisJCXBhY2tldF9idWZfd3JpdGUocmVxX2J1ZiwKKwkJCQkgIiUuKnMiLCAoaW50KShucCAtIGNwKSwgY3ApOworCX0KKwlwYWNrZXRfYnVmX3dyaXRlKHJlcV9idWYsICJwdXNoLWNlcnQtZW5kXG4iKTsKKworZnJlZV9yZXR1cm46CisJZnJlZShzaWduaW5nX2tleSk7CisJc3RyYnVmX3JlbGVhc2UoJmNlcnQpOworCXJldHVybiB1cGRhdGVfc2VlbjsKK30KKworI2RlZmluZSBOT05DRV9MRU5fTElNSVQgMjU2CisKK3N0YXRpYyB2b2lkIHJlamVjdF9pbnZhbGlkX25vbmNlKGNvbnN0IGNoYXIgKm5vbmNlLCBpbnQgbGVuKQoreworCWludCBpID0gMDsKKworCWlmIChOT05DRV9MRU5fTElNSVQgPD0gbGVuKQorCQlkaWUoInRoZSByZWNlaXZpbmcgZW5kIGFza2VkIHRvIHNpZ24gYW4gaW52YWxpZCBub25jZSA8JS4qcz4iLAorCQkgICAgbGVuLCBub25jZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaW50IGNoID0gbm9uY2VbaV0gJiAweEZGOworCQlpZiAoaXNhbG51bShjaCkgfHwKKwkJICAgIGNoID09ICctJyB8fCBjaCA9PSAnLicgfHwKKwkJICAgIGNoID09ICcvJyB8fCBjaCA9PSAnKycgfHwKKwkJICAgIGNoID09ICc9JyB8fCBjaCA9PSAnXycpCisJCQljb250aW51ZTsKKwkJZGllKCJ0aGUgcmVjZWl2aW5nIGVuZCBhc2tlZCB0byBzaWduIGFuIGludmFsaWQgbm9uY2UgPCUuKnM+IiwKKwkJICAgIGxlbiwgbm9uY2UpOworCX0KK30KKworaW50IHNlbmRfcGFjayhzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgKmFyZ3MsCisJICAgICAgaW50IGZkW10sIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uLAorCSAgICAgIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLAorCSAgICAgIHN0cnVjdCBvaWRfYXJyYXkgKmV4dHJhX2hhdmUpCit7CisJaW50IGluID0gZmRbMF07CisJaW50IG91dCA9IGZkWzFdOworCXN0cnVjdCBzdHJidWYgcmVxX2J1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgY2FwX2J1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCByZWYgKnJlZjsKKwlpbnQgbmVlZF9wYWNrX2RhdGEgPSAwOworCWludCBhbGxvd19kZWxldGluZ19yZWZzID0gMDsKKwlpbnQgc3RhdHVzX3JlcG9ydCA9IDA7CisJaW50IHVzZV9zaWRlYmFuZCA9IDA7CisJaW50IHF1aWV0X3N1cHBvcnRlZCA9IDA7CisJaW50IGFnZW50X3N1cHBvcnRlZCA9IDA7CisJaW50IHVzZV9hdG9taWMgPSAwOworCWludCBhdG9taWNfc3VwcG9ydGVkID0gMDsKKwlpbnQgdXNlX3B1c2hfb3B0aW9ucyA9IDA7CisJaW50IHB1c2hfb3B0aW9uc19zdXBwb3J0ZWQgPSAwOworCXVuc2lnbmVkIGNtZHNfc2VudCA9IDA7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXN5bmMgZGVtdXg7CisJY29uc3QgY2hhciAqcHVzaF9jZXJ0X25vbmNlID0gTlVMTDsKKwlzdHJ1Y3QgcGFja2V0X3JlYWRlciByZWFkZXI7CisKKwkvKiBEb2VzIHRoZSBvdGhlciBlbmQgc3VwcG9ydCB0aGUgcmVwb3J0aW5nPyAqLworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoInJlcG9ydC1zdGF0dXMiKSkKKwkJc3RhdHVzX3JlcG9ydCA9IDE7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygiZGVsZXRlLXJlZnMiKSkKKwkJYWxsb3dfZGVsZXRpbmdfcmVmcyA9IDE7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygib2ZzLWRlbHRhIikpCisJCWFyZ3MtPnVzZV9vZnNfZGVsdGEgPSAxOworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoInNpZGUtYmFuZC02NGsiKSkKKwkJdXNlX3NpZGViYW5kID0gMTsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJxdWlldCIpKQorCQlxdWlldF9zdXBwb3J0ZWQgPSAxOworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImFnZW50IikpCisJCWFnZW50X3N1cHBvcnRlZCA9IDE7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygibm8tdGhpbiIpKQorCQlhcmdzLT51c2VfdGhpbl9wYWNrID0gMDsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJhdG9taWMiKSkKKwkJYXRvbWljX3N1cHBvcnRlZCA9IDE7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygicHVzaC1vcHRpb25zIikpCisJCXB1c2hfb3B0aW9uc19zdXBwb3J0ZWQgPSAxOworCisJaWYgKGFyZ3MtPnB1c2hfY2VydCAhPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX05FVkVSKSB7CisJCWludCBsZW47CisJCXB1c2hfY2VydF9ub25jZSA9IHNlcnZlcl9mZWF0dXJlX3ZhbHVlKCJwdXNoLWNlcnQiLCAmbGVuKTsKKwkJaWYgKHB1c2hfY2VydF9ub25jZSkgeworCQkJcmVqZWN0X2ludmFsaWRfbm9uY2UocHVzaF9jZXJ0X25vbmNlLCBsZW4pOworCQkJcHVzaF9jZXJ0X25vbmNlID0geG1lbWR1cHoocHVzaF9jZXJ0X25vbmNlLCBsZW4pOworCQl9IGVsc2UgaWYgKGFyZ3MtPnB1c2hfY2VydCA9PSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0FMV0FZUykgeworCQkJZGllKF8oInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIpKTsKKwkJfSBlbHNlIGlmIChhcmdzLT5wdXNoX2NlcnQgPT0gU0VORF9QQUNLX1BVU0hfQ0VSVF9JRl9BU0tFRCkgeworCQkJd2FybmluZyhfKCJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIgorCQkJCSAgIiByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiCisJCQkJICAiIHB1c2giKSk7CisJCX0KKwl9CisKKwlpZiAoIXJlbW90ZV9yZWZzKSB7CisJCWZwcmludGYoc3RkZXJyLCAiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgorCQkJIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChhcmdzLT5hdG9taWMgJiYgIWF0b21pY19zdXBwb3J0ZWQpCisJCWRpZShfKCJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giKSk7CisKKwl1c2VfYXRvbWljID0gYXRvbWljX3N1cHBvcnRlZCAmJiBhcmdzLT5hdG9taWM7CisKKwlpZiAoYXJncy0+cHVzaF9vcHRpb25zICYmICFwdXNoX29wdGlvbnNfc3VwcG9ydGVkKQorCQlkaWUoXygidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBwdXNoIG9wdGlvbnMiKSk7CisKKwl1c2VfcHVzaF9vcHRpb25zID0gcHVzaF9vcHRpb25zX3N1cHBvcnRlZCAmJiBhcmdzLT5wdXNoX29wdGlvbnM7CisKKwlpZiAoc3RhdHVzX3JlcG9ydCkKKwkJc3RyYnVmX2FkZHN0cigmY2FwX2J1ZiwgIiByZXBvcnQtc3RhdHVzIik7CisJaWYgKHVzZV9zaWRlYmFuZCkKKwkJc3RyYnVmX2FkZHN0cigmY2FwX2J1ZiwgIiBzaWRlLWJhbmQtNjRrIik7CisJaWYgKHF1aWV0X3N1cHBvcnRlZCAmJiAoYXJncy0+cXVpZXQgfHwgIWFyZ3MtPnByb2dyZXNzKSkKKwkJc3RyYnVmX2FkZHN0cigmY2FwX2J1ZiwgIiBxdWlldCIpOworCWlmICh1c2VfYXRvbWljKQorCQlzdHJidWZfYWRkc3RyKCZjYXBfYnVmLCAiIGF0b21pYyIpOworCWlmICh1c2VfcHVzaF9vcHRpb25zKQorCQlzdHJidWZfYWRkc3RyKCZjYXBfYnVmLCAiIHB1c2gtb3B0aW9ucyIpOworCWlmIChhZ2VudF9zdXBwb3J0ZWQpCisJCXN0cmJ1Zl9hZGRmKCZjYXBfYnVmLCAiIGFnZW50PSVzIiwgZ2l0X3VzZXJfYWdlbnRfc2FuaXRpemVkKCkpOworCisJLyoKKwkgKiBORUVEU1dPUks6IHdoeSBkb2VzIGRlbGV0ZS1yZWZzIGhhdmUgdG8gYmUgc28gc3BlY2lmaWMgdG8KKwkgKiBzZW5kLXBhY2sgbWFjaGluZXJ5IHRoYXQgc2V0X3JlZl9zdGF0dXNfZm9yX3B1c2goKSBjYW5ub3QKKwkgKiBzZXQgdGhpcyBiaXQgZm9yIHVzPz8/CisJICovCisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCWlmIChyZWYtPmRlbGV0aW9uICYmICFhbGxvd19kZWxldGluZ19yZWZzKQorCQkJcmVmLT5zdGF0dXMgPSBSRUZfU1RBVFVTX1JFSkVDVF9OT0RFTEVURTsKKworCWlmICghYXJncy0+ZHJ5X3J1bikKKwkJYWR2ZXJ0aXNlX3NoYWxsb3dfZ3JhZnRzX2J1ZigmcmVxX2J1Zik7CisKKwlpZiAoIWFyZ3MtPmRyeV9ydW4gJiYgcHVzaF9jZXJ0X25vbmNlKQorCQljbWRzX3NlbnQgPSBnZW5lcmF0ZV9wdXNoX2NlcnQoJnJlcV9idWYsIHJlbW90ZV9yZWZzLCBhcmdzLAorCQkJCQkgICAgICAgY2FwX2J1Zi5idWYsIHB1c2hfY2VydF9ub25jZSk7CisKKwkvKgorCSAqIENsZWFyIHRoZSBzdGF0dXMgZm9yIGVhY2ggcmVmIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBzZW5kCisJICogdGhlIHBhY2sgZGF0YS4KKwkgKi8KKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlzd2l0Y2ggKGNoZWNrX3RvX3NlbmRfdXBkYXRlKHJlZiwgYXJncykpIHsKKwkJY2FzZSAwOiAvKiBubyBlcnJvciAqLworCQkJYnJlYWs7CisJCWNhc2UgQ0hFQ0tfUkVGX1NUQVRVU19SRUpFQ1RFRDoKKwkJCS8qCisJCQkgKiBXaGVuIHdlIGtub3cgdGhlIHNlcnZlciB3b3VsZCByZWplY3QgYSByZWYgdXBkYXRlIGlmCisJCQkgKiB3ZSB3ZXJlIHRvIHNlbmQgaXQgYW5kIHdlJ3JlIHRyeWluZyB0byBzZW5kIHRoZSByZWZzCisJCQkgKiBhdG9taWNhbGx5LCBhYm9ydCB0aGUgd2hvbGUgb3BlcmF0aW9uLgorCQkJICovCisJCQlpZiAodXNlX2F0b21pYykgeworCQkJCXN0cmJ1Zl9yZWxlYXNlKCZyZXFfYnVmKTsKKwkJCQlzdHJidWZfcmVsZWFzZSgmY2FwX2J1Zik7CisJCQkJcmVqZWN0X2F0b21pY19wdXNoKHJlbW90ZV9yZWZzLCBhcmdzLT5zZW5kX21pcnJvcik7CisJCQkJZXJyb3IoImF0b21pYyBwdXNoIGZhaWxlZCBmb3IgcmVmICVzLiBzdGF0dXM6ICVkXG4iLAorCQkJCSAgICAgIHJlZi0+bmFtZSwgcmVmLT5zdGF0dXMpOworCQkJCXJldHVybiBhcmdzLT5wb3JjZWxhaW4gPyAwIDogLTE7CisJCQl9CisJCQkvKiBlbHNlIGZhbGx0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXJlZi0+ZGVsZXRpb24pCisJCQluZWVkX3BhY2tfZGF0YSA9IDE7CisKKwkJaWYgKGFyZ3MtPmRyeV9ydW4gfHwgIXN0YXR1c19yZXBvcnQpCisJCQlyZWYtPnN0YXR1cyA9IFJFRl9TVEFUVVNfT0s7CisJCWVsc2UKKwkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19FWFBFQ1RJTkdfUkVQT1JUOworCX0KKworCS8qCisJICogRmluYWxseSwgdGVsbCB0aGUgb3RoZXIgZW5kIQorCSAqLworCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWNoYXIgKm9sZF9oZXgsICpuZXdfaGV4OworCisJCWlmIChhcmdzLT5kcnlfcnVuIHx8IHB1c2hfY2VydF9ub25jZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjaGVja190b19zZW5kX3VwZGF0ZShyZWYsIGFyZ3MpIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCW9sZF9oZXggPSBvaWRfdG9faGV4KCZyZWYtPm9sZF9vaWQpOworCQluZXdfaGV4ID0gb2lkX3RvX2hleCgmcmVmLT5uZXdfb2lkKTsKKwkJaWYgKCFjbWRzX3NlbnQpIHsKKwkJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsCisJCQkJCSAiJXMgJXMgJXMlYyVzIiwKKwkJCQkJIG9sZF9oZXgsIG5ld19oZXgsIHJlZi0+bmFtZSwgMCwKKwkJCQkJIGNhcF9idWYuYnVmKTsKKwkJCWNtZHNfc2VudCA9IDE7CisJCX0gZWxzZSB7CisJCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAiJXMgJXMgJXMiLAorCQkJCQkgb2xkX2hleCwgbmV3X2hleCwgcmVmLT5uYW1lKTsKKwkJfQorCX0KKworCWlmICh1c2VfcHVzaF9vcHRpb25zKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJCXBhY2tldF9idWZfZmx1c2goJnJlcV9idWYpOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIGFyZ3MtPnB1c2hfb3B0aW9ucykKKwkJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICIlcyIsIGl0ZW0tPnN0cmluZyk7CisJfQorCisJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpIHsKKwkJaWYgKCFhcmdzLT5kcnlfcnVuICYmIChjbWRzX3NlbnQgfHwgaXNfcmVwb3NpdG9yeV9zaGFsbG93KHRoZV9yZXBvc2l0b3J5KSkpIHsKKwkJCXBhY2tldF9idWZfZmx1c2goJnJlcV9idWYpOworCQkJc2VuZF9zaWRlYmFuZChvdXQsIC0xLCByZXFfYnVmLmJ1ZiwgcmVxX2J1Zi5sZW4sIExBUkdFX1BBQ0tFVF9NQVgpOworCQl9CisJfSBlbHNlIHsKKwkJd3JpdGVfb3JfZGllKG91dCwgcmVxX2J1Zi5idWYsIHJlcV9idWYubGVuKTsKKwkJcGFja2V0X2ZsdXNoKG91dCk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZyZXFfYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmY2FwX2J1Zik7CisKKwlpZiAodXNlX3NpZGViYW5kICYmIGNtZHNfc2VudCkgeworCQltZW1zZXQoJmRlbXV4LCAwLCBzaXplb2YoZGVtdXgpKTsKKwkJZGVtdXgucHJvYyA9IHNpZGViYW5kX2RlbXV4OworCQlkZW11eC5kYXRhID0gZmQ7CisJCWRlbXV4Lm91dCA9IC0xOworCQlkZW11eC5pc29sYXRlX3NpZ3BpcGUgPSAxOworCQlpZiAoc3RhcnRfYXN5bmMoJmRlbXV4KSkKKwkJCWRpZSgic2VuZC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIpOworCQlpbiA9IGRlbXV4Lm91dDsKKwl9CisKKwlwYWNrZXRfcmVhZGVyX2luaXQoJnJlYWRlciwgaW4sIE5VTEwsIDAsCisJCQkgICBQQUNLRVRfUkVBRF9DSE9NUF9ORVdMSU5FIHwKKwkJCSAgIFBBQ0tFVF9SRUFEX0RJRV9PTl9FUlJfUEFDS0VUKTsKKworCWlmIChuZWVkX3BhY2tfZGF0YSAmJiBjbWRzX3NlbnQpIHsKKwkJaWYgKHBhY2tfb2JqZWN0cyhvdXQsIHJlbW90ZV9yZWZzLCBleHRyYV9oYXZlLCBhcmdzKSA8IDApIHsKKwkJCWlmIChhcmdzLT5zdGF0ZWxlc3NfcnBjKQorCQkJCWNsb3NlKG91dCk7CisJCQlpZiAoZ2l0X2Nvbm5lY3Rpb25faXNfc29ja2V0KGNvbm4pKQorCQkJCXNodXRkb3duKGZkWzBdLCBTSFVUX1dSKTsKKworCQkJLyoKKwkJCSAqIERvIG5vdCBldmVuIGJvdGhlciB3aXRoIHRoZSByZXR1cm4gdmFsdWU7IHdlIGtub3cgd2UKKwkJCSAqIGFyZSBmYWlsaW5nLCBhbmQganVzdCB3YW50IHRoZSBlcnJvcigpIHNpZGUgZWZmZWN0cywKKwkJCSAqIGFzIHdlbGwgYXMgbWFya2luZyByZWZzIHdpdGggdGhlaXIgcmVtb3RlIHN0YXR1cyAoaWYKKwkJCSAqIHdlIGdldCBvbmUpLgorCQkJICovCisJCQlpZiAoc3RhdHVzX3JlcG9ydCkKKwkJCQlyZWNlaXZlX3N0YXR1cygmcmVhZGVyLCByZW1vdGVfcmVmcyk7CisKKwkJCWlmICh1c2Vfc2lkZWJhbmQpIHsKKwkJCQljbG9zZShkZW11eC5vdXQpOworCQkJCWZpbmlzaF9hc3luYygmZGVtdXgpOworCQkJfQorCQkJZmRbMV0gPSAtMTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoIWFyZ3MtPnN0YXRlbGVzc19ycGMpCisJCQkvKiBDbG9zZWQgYnkgcGFja19vYmplY3RzKCkgdmlhIHN0YXJ0X2NvbW1hbmQoKSAqLworCQkJZmRbMV0gPSAtMTsKKwl9CisJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMgJiYgY21kc19zZW50KQorCQlwYWNrZXRfZmx1c2gob3V0KTsKKworCWlmIChzdGF0dXNfcmVwb3J0ICYmIGNtZHNfc2VudCkKKwkJcmV0ID0gcmVjZWl2ZV9zdGF0dXMoJnJlYWRlciwgcmVtb3RlX3JlZnMpOworCWVsc2UKKwkJcmV0ID0gMDsKKwlpZiAoYXJncy0+c3RhdGVsZXNzX3JwYykKKwkJcGFja2V0X2ZsdXNoKG91dCk7CisKKwlpZiAodXNlX3NpZGViYW5kICYmIGNtZHNfc2VudCkgeworCQljbG9zZShkZW11eC5vdXQpOworCQlpZiAoZmluaXNoX2FzeW5jKCZkZW11eCkpIHsKKwkJCWVycm9yKCJlcnJvciBpbiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIik7CisJCQlyZXQgPSAtMTsKKwkJfQorCX0KKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGFyZ3MtPnBvcmNlbGFpbikKKwkJcmV0dXJuIDA7CisKKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlzd2l0Y2ggKHJlZi0+c3RhdHVzKSB7CisJCWNhc2UgUkVGX1NUQVRVU19OT05FOgorCQljYXNlIFJFRl9TVEFUVVNfVVBUT0RBVEU6CisJCWNhc2UgUkVGX1NUQVRVU19PSzoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc2VuZC1wYWNrLmggYi9zZW5kLXBhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTQ4ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvc2VuZC1wYWNrLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBTRU5EX1BBQ0tfSAorI2RlZmluZSBTRU5EX1BBQ0tfSAorCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworc3RydWN0IGNoaWxkX3Byb2Nlc3M7CitzdHJ1Y3Qgb2lkX2FycmF5Oworc3RydWN0IHJlZjsKKworLyogUG9zc2libGUgdmFsdWVzIGZvciBwdXNoX2NlcnQgZmllbGQgaW4gc2VuZF9wYWNrX2FyZ3MuICovCisjZGVmaW5lIFNFTkRfUEFDS19QVVNIX0NFUlRfTkVWRVIgMAorI2RlZmluZSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0lGX0FTS0VEIDEKKyNkZWZpbmUgU0VORF9QQUNLX1BVU0hfQ0VSVF9BTFdBWVMgMgorCitzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgeworCWNvbnN0IGNoYXIgKnVybDsKKwl1bnNpZ25lZCB2ZXJib3NlOjEsCisJCXF1aWV0OjEsCisJCXBvcmNlbGFpbjoxLAorCQlwcm9ncmVzczoxLAorCQlzZW5kX21pcnJvcjoxLAorCQlmb3JjZV91cGRhdGU6MSwKKwkJdXNlX3RoaW5fcGFjazoxLAorCQl1c2Vfb2ZzX2RlbHRhOjEsCisJCWRyeV9ydW46MSwKKwkJLyogT25lIG9mIHRoZSBTRU5EX1BBQ0tfUFVTSF9DRVJUXyogY29uc3RhbnRzLiAqLworCQlwdXNoX2NlcnQ6MiwKKwkJc3RhdGVsZXNzX3JwYzoxLAorCQlhdG9taWM6MTsKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnB1c2hfb3B0aW9uczsKK307CisKK3N0cnVjdCBvcHRpb247CitpbnQgb3B0aW9uX3BhcnNlX3B1c2hfc2lnbmVkKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpOworCitpbnQgc2VuZF9wYWNrKHN0cnVjdCBzZW5kX3BhY2tfYXJncyAqYXJncywKKwkgICAgICBpbnQgZmRbXSwgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4sCisJICAgICAgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsIHN0cnVjdCBvaWRfYXJyYXkgKmV4dHJhX2hhdmUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NlcXVlbmNlci5jIGIvc2VxdWVuY2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ3NzAxYwotLS0gL2Rldi9udWxsCisrKyBiL3NlcXVlbmNlci5jCkBAIC0wLDAgKzEsNTQ2MiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJzZXF1ZW5jZXIuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJyZXJlcmUuaCIKKyNpbmNsdWRlICJtZXJnZS1yZWN1cnNpdmUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAidHJhaWxlci5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAid3Qtc3RhdHVzLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgIm5vdGVzLXV0aWxzLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJ3b3JrdHJlZS5oIgorI2luY2x1ZGUgIm9pZG1hcC5oIgorI2luY2x1ZGUgIm9pZHNldC5oIgorI2luY2x1ZGUgImNvbW1pdC1zbGFiLmgiCisjaW5jbHVkZSAiYWxpYXMuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJyZWJhc2UtaW50ZXJhY3RpdmUuaCIKKyNpbmNsdWRlICJyZXNldC5oIgorCisjZGVmaW5lIEdJVF9SRUZMT0dfQUNUSU9OICJHSVRfUkVGTE9HX0FDVElPTiIKKworc3RhdGljIGNvbnN0IGNoYXIgc2lnbl9vZmZfaGVhZGVyW10gPSAiU2lnbmVkLW9mZi1ieTogIjsKK3N0YXRpYyBjb25zdCBjaGFyIGNoZXJyeV9waWNrZWRfcHJlZml4W10gPSAiKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgIjsKKworR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF9jb21taXRfZWRpdG1zZywgIkNPTU1JVF9FRElUTVNHIikKKworc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfc2VxX2RpciwgInNlcXVlbmNlciIpCisKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX3RvZG9fZmlsZSwgInNlcXVlbmNlci90b2RvIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX29wdHNfZmlsZSwgInNlcXVlbmNlci9vcHRzIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2hlYWRfZmlsZSwgInNlcXVlbmNlci9oZWFkIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2Fib3J0X3NhZmV0eV9maWxlLCAic2VxdWVuY2VyL2Fib3J0LXNhZmV0eSIpCisKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoLCAicmViYXNlLW1lcmdlIikKKy8qCisgKiBUaGUgZmlsZSBjb250YWluaW5nIHJlYmFzZSBjb21tYW5kcywgY29tbWVudHMsIGFuZCBlbXB0eSBsaW5lcy4KKyAqIFRoaXMgZmlsZSBpcyBjcmVhdGVkIGJ5ICJnaXQgcmViYXNlIC1pIiB0aGVuIGVkaXRlZCBieSB0aGUgdXNlci4gQXMKKyAqIHRoZSBsaW5lcyBhcmUgcHJvY2Vzc2VkLCB0aGV5IGFyZSByZW1vdmVkIGZyb20gdGhlIGZyb250IG9mIHRoaXMKKyAqIGZpbGUgYW5kIHdyaXR0ZW4gdG8gdGhlIHRhaWwgb2YgJ2RvbmUnLgorICovCitHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX3RvZG8sICJyZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvIikKK0dJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfdG9kb19iYWNrdXAsICJyZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvLmJhY2t1cCIpCisKK0dJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfZHJvcHBlZCwgInJlYmFzZS1tZXJnZS9kcm9wcGVkIikKKworLyoKKyAqIFRoZSByZWJhc2UgY29tbWFuZCBsaW5lcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZC4gQSBsaW5lCisgKiBpcyBtb3ZlZCBoZXJlIHdoZW4gaXQgaXMgZmlyc3QgaGFuZGxlZCwgYmVmb3JlIGFueSBhc3NvY2lhdGVkIHVzZXIKKyAqIGFjdGlvbnMuCisgKi8KK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX2RvbmUsICJyZWJhc2UtbWVyZ2UvZG9uZSIpCisvKgorICogVGhlIGZpbGUgdG8ga2VlcCB0cmFjayBvZiBob3cgbWFueSBjb21tYW5kcyB3ZXJlIGFscmVhZHkgcHJvY2Vzc2VkIChlLmcuCisgKiBmb3IgdGhlIHByb21wdCkuCisgKi8KK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX21zZ251bSwgInJlYmFzZS1tZXJnZS9tc2dudW0iKQorLyoKKyAqIFRoZSBmaWxlIHRvIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgY29tbWFuZHMgYXJlIHRvIGJlIHByb2Nlc3NlZCBpbiB0b3RhbAorICogKGUuZy4gZm9yIHRoZSBwcm9tcHQpLgorICovCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9tc2d0b3RhbCwgInJlYmFzZS1tZXJnZS9lbmQiKQorLyoKKyAqIFRoZSBjb21taXQgbWVzc2FnZSB0aGF0IGlzIHBsYW5uZWQgdG8gYmUgdXNlZCBmb3IgYW55IGNoYW5nZXMgdGhhdAorICogbmVlZCB0byBiZSBjb21taXR0ZWQgZm9sbG93aW5nIGEgdXNlciBpbnRlcmFjdGlvbi4KKyAqLworc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfbWVzc2FnZSwgInJlYmFzZS1tZXJnZS9tZXNzYWdlIikKKy8qCisgKiBUaGUgZmlsZSBpbnRvIHdoaWNoIGlzIGFjY3VtdWxhdGVkIHRoZSBzdWdnZXN0ZWQgY29tbWl0IG1lc3NhZ2UgZm9yCisgKiBzcXVhc2gvZml4dXAgY29tbWFuZHMuIFdoZW4gdGhlIGZpcnN0IG9mIGEgc2VyaWVzIG9mIHNxdWFzaC9maXh1cHMKKyAqIGlzIHNlZW4sIHRoZSBmaWxlIGlzIGNyZWF0ZWQgYW5kIHRoZSBjb21taXQgbWVzc2FnZSBmcm9tIHRoZQorICogcHJldmlvdXMgY29tbWl0IGFuZCBmcm9tIHRoZSBmaXJzdCBzcXVhc2gvZml4dXAgY29tbWl0IGFyZSB3cml0dGVuCisgKiB0byBpdC4gVGhlIGNvbW1pdCBtZXNzYWdlIGZvciBlYWNoIHN1YnNlcXVlbnQgc3F1YXNoL2ZpeHVwIGNvbW1pdAorICogaXMgYXBwZW5kZWQgdG8gdGhlIGZpbGUgYXMgaXQgaXMgcHJvY2Vzc2VkLgorICovCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9zcXVhc2hfbXNnLCAicmViYXNlLW1lcmdlL21lc3NhZ2Utc3F1YXNoIikKKy8qCisgKiBJZiB0aGUgY3VycmVudCBzZXJpZXMgb2Ygc3F1YXNoL2ZpeHVwcyBoYXMgbm90IHlldCBpbmNsdWRlZCBhIHNxdWFzaAorICogY29tbWFuZCwgdGhlbiB0aGlzIGZpbGUgZXhpc3RzIGFuZCBob2xkcyB0aGUgY29tbWl0IG1lc3NhZ2Ugb2YgdGhlCisgKiBvcmlnaW5hbCAicGljayIgY29tbWl0LiAgKElmIHRoZSBzZXJpZXMgZW5kcyB3aXRob3V0IGEgInNxdWFzaCIKKyAqIGNvbW1hbmQsIHRoZW4gdGhpcyBjYW4gYmUgdXNlZCBhcyB0aGUgY29tbWl0IG1lc3NhZ2Ugb2YgdGhlIGNvbWJpbmVkCisgKiBjb21taXQgd2l0aG91dCBvcGVuaW5nIHRoZSBlZGl0b3IuKQorICovCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9maXh1cF9tc2csICJyZWJhc2UtbWVyZ2UvbWVzc2FnZS1maXh1cCIpCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IGZpeHVwL3NxdWFzaCBjb21tYW5kcyB0aGF0IGhhdmUgYmVlbgorICogYWNjdW11bGF0ZWQgaW50byBtZXNzYWdlLWZpeHVwIG9yIG1lc3NhZ2Utc3F1YXNoIHNvIGZhci4KKyAqLworc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfY3VycmVudF9maXh1cHMsICJyZWJhc2UtbWVyZ2UvY3VycmVudC1maXh1cHMiKQorLyoKKyAqIEEgc2NyaXB0IHRvIHNldCB0aGUgR0lUX0FVVEhPUl9OQU1FLCBHSVRfQVVUSE9SX0VNQUlMLCBhbmQKKyAqIEdJVF9BVVRIT1JfREFURSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGNvbW1pdCB0aGF0IGlzIGN1cnJlbnRseQorICogYmVpbmcgcmViYXNlZC4KKyAqLworc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfYXV0aG9yX3NjcmlwdCwgInJlYmFzZS1tZXJnZS9hdXRob3Itc2NyaXB0IikKKy8qCisgKiBXaGVuIGFuICJlZGl0IiByZWJhc2UgY29tbWFuZCBpcyBiZWluZyBwcm9jZXNzZWQsIHRoZSBTSEExIG9mIHRoZQorICogY29tbWl0IHRvIGJlIGVkaXRlZCBpcyByZWNvcmRlZCBpbiB0aGlzIGZpbGUuICBXaGVuICJnaXQgcmViYXNlCisgKiAtLWNvbnRpbnVlIiBpcyBleGVjdXRlZCwgaWYgdGhlcmUgYXJlIGFueSBzdGFnZWQgY2hhbmdlcyB0aGVuIHRoZXkKKyAqIHdpbGwgYmUgYW1lbmRlZCB0byB0aGUgSEVBRCBjb21taXQsIGJ1dCBvbmx5IHByb3ZpZGVkIHRoZSBIRUFECisgKiBjb21taXQgaXMgc3RpbGwgdGhlIGNvbW1pdCB0byBiZSBlZGl0ZWQuICBXaGVuIGFueSBvdGhlciByZWJhc2UKKyAqIGNvbW1hbmQgaXMgcHJvY2Vzc2VkLCB0aGlzIGZpbGUgaXMgZGVsZXRlZC4KKyAqLworc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfYW1lbmQsICJyZWJhc2UtbWVyZ2UvYW1lbmQiKQorLyoKKyAqIFdoZW4gd2Ugc3RvcCBhdCBhIGdpdmVuIHBhdGNoIHZpYSB0aGUgImVkaXQiIGNvbW1hbmQsIHRoaXMgZmlsZSBjb250YWlucworICogdGhlIGFiYnJldmlhdGVkIGNvbW1pdCBuYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nIHBhdGNoLgorICovCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9zdG9wcGVkX3NoYSwgInJlYmFzZS1tZXJnZS9zdG9wcGVkLXNoYSIpCisvKgorICogRm9yIHRoZSBwb3N0LXJld3JpdGUgaG9vaywgd2UgbWFrZSBhIGxpc3Qgb2YgcmV3cml0dGVuIGNvbW1pdHMgYW5kCisgKiB0aGVpciBuZXcgc2hhMXMuICBUaGUgcmV3cml0dGVuLXBlbmRpbmcgbGlzdCBrZWVwcyB0aGUgc2hhMXMgb2YKKyAqIGNvbW1pdHMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLCBidXQgbm90IGNvbW1pdHRlZCB5ZXQsCisgKiBlLmcuIGJlY2F1c2UgdGhleSBhcmUgd2FpdGluZyBmb3IgYSAnc3F1YXNoJyBjb21tYW5kLgorICovCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9yZXdyaXR0ZW5fbGlzdCwgInJlYmFzZS1tZXJnZS9yZXdyaXR0ZW4tbGlzdCIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9yZXdyaXR0ZW5fcGVuZGluZywKKwkicmViYXNlLW1lcmdlL3Jld3JpdHRlbi1wZW5kaW5nIikKKworLyoKKyAqIFRoZSBwYXRoIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIE9JRCBvZiB0aGUgInNxdWFzaCBvbnRvIiBjb21taXQsIGkuZS4KKyAqIHRoZSBkdW1teSBjb21taXQgdXNlZCBmb3IgYHJlc2V0IFtuZXcgcm9vdF1gLgorICovCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9zcXVhc2hfb250bywgInJlYmFzZS1tZXJnZS9zcXVhc2gtb250byIpCisKKy8qCisgKiBUaGUgcGF0aCBvZiB0aGUgZmlsZSBsaXN0aW5nIHJlZnMgdGhhdCBuZWVkIHRvIGJlIGRlbGV0ZWQgYWZ0ZXIgdGhlIHJlYmFzZQorICogZmluaXNoZXMuIFRoaXMgaXMgdXNlZCBieSB0aGUgYGxhYmVsYCBjb21tYW5kIHRvIHJlY29yZCB0aGUgbmVlZCBmb3IgY2xlYW51cC4KKyAqLworc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfcmVmc190b19kZWxldGUsICJyZWJhc2UtbWVyZ2UvcmVmcy10by1kZWxldGUiKQorCisvKgorICogVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgd3JpdHRlbiBieSBnaXQtcmViYXNlIGp1c3QgYWZ0ZXIgcGFyc2luZyB0aGUKKyAqIGNvbW1hbmQtbGluZS4KKyAqLworc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfZ3BnX3NpZ25fb3B0LCAicmViYXNlLW1lcmdlL2dwZ19zaWduX29wdCIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9vcmlnX2hlYWQsICJyZWJhc2UtbWVyZ2Uvb3JpZy1oZWFkIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX3ZlcmJvc2UsICJyZWJhc2UtbWVyZ2UvdmVyYm9zZSIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9xdWlldCwgInJlYmFzZS1tZXJnZS9xdWlldCIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9zaWdub2ZmLCAicmViYXNlLW1lcmdlL3NpZ25vZmYiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfaGVhZF9uYW1lLCAicmViYXNlLW1lcmdlL2hlYWQtbmFtZSIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9vbnRvLCAicmViYXNlLW1lcmdlL29udG8iKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfYXV0b3N0YXNoLCAicmViYXNlLW1lcmdlL2F1dG9zdGFzaCIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9zdHJhdGVneSwgInJlYmFzZS1tZXJnZS9zdHJhdGVneSIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9zdHJhdGVneV9vcHRzLCAicmViYXNlLW1lcmdlL3N0cmF0ZWd5X29wdHMiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUsICJyZWJhc2UtbWVyZ2UvYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfcmVzY2hlZHVsZV9mYWlsZWRfZXhlYywgInJlYmFzZS1tZXJnZS9yZXNjaGVkdWxlLWZhaWxlZC1leGVjIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX2Ryb3BfcmVkdW5kYW50X2NvbW1pdHMsICJyZWJhc2UtbWVyZ2UvZHJvcF9yZWR1bmRhbnRfY29tbWl0cyIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9rZWVwX3JlZHVuZGFudF9jb21taXRzLCAicmViYXNlLW1lcmdlL2tlZXBfcmVkdW5kYW50X2NvbW1pdHMiKQorCitzdGF0aWMgaW50IGdpdF9zZXF1ZW5jZXJfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQoreworCXN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cyA9IGNiOworCWludCBzdGF0dXM7CisKKwlpZiAoIXN0cmNtcChrLCAiY29tbWl0LmNsZWFudXAiKSkgeworCQljb25zdCBjaGFyICpzOworCisJCXN0YXR1cyA9IGdpdF9jb25maWdfc3RyaW5nKCZzLCBrLCB2KTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiBzdGF0dXM7CisKKwkJaWYgKCFzdHJjbXAocywgInZlcmJhdGltIikpIHsKKwkJCW9wdHMtPmRlZmF1bHRfbXNnX2NsZWFudXAgPSBDT01NSVRfTVNHX0NMRUFOVVBfTk9ORTsKKwkJCW9wdHMtPmV4cGxpY2l0X2NsZWFudXAgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAocywgIndoaXRlc3BhY2UiKSkgeworCQkJb3B0cy0+ZGVmYXVsdF9tc2dfY2xlYW51cCA9IENPTU1JVF9NU0dfQ0xFQU5VUF9TUEFDRTsKKwkJCW9wdHMtPmV4cGxpY2l0X2NsZWFudXAgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAocywgInN0cmlwIikpIHsKKwkJCW9wdHMtPmRlZmF1bHRfbXNnX2NsZWFudXAgPSBDT01NSVRfTVNHX0NMRUFOVVBfQUxMOworCQkJb3B0cy0+ZXhwbGljaXRfY2xlYW51cCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChzLCAic2Npc3NvcnMiKSkgeworCQkJb3B0cy0+ZGVmYXVsdF9tc2dfY2xlYW51cCA9IENPTU1JVF9NU0dfQ0xFQU5VUF9TQ0lTU09SUzsKKwkJCW9wdHMtPmV4cGxpY2l0X2NsZWFudXAgPSAxOworCQl9IGVsc2UgeworCQkJd2FybmluZyhfKCJpbnZhbGlkIGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSAnJXMnIiksCisJCQkJICBzKTsKKwkJfQorCisJCWZyZWUoKGNoYXIgKilzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlpZiAoIXN0cmNtcChrLCAiY29tbWl0LmdwZ3NpZ24iKSkgeworCQlvcHRzLT5ncGdfc2lnbiA9IGdpdF9jb25maWdfYm9vbChrLCB2KSA/IHhzdHJkdXAoIiIpIDogTlVMTDsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RhdHVzID0gZ2l0X2dwZ19jb25maWcoaywgdiwgTlVMTCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCXJldHVybiBnaXRfZGlmZl9iYXNpY19jb25maWcoaywgdiwgTlVMTCk7Cit9CisKK3ZvaWQgc2VxdWVuY2VyX2luaXRfY29uZmlnKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlvcHRzLT5kZWZhdWx0X21zZ19jbGVhbnVwID0gQ09NTUlUX01TR19DTEVBTlVQX05PTkU7CisJZ2l0X2NvbmZpZyhnaXRfc2VxdWVuY2VyX2NvbmZpZywgb3B0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3JlYmFzZV9pKGNvbnN0IHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlyZXR1cm4gb3B0cy0+YWN0aW9uID09IFJFUExBWV9JTlRFUkFDVElWRV9SRUJBU0U7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfZGlyKGNvbnN0IHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlpZiAoaXNfcmViYXNlX2kob3B0cykpCisJCXJldHVybiByZWJhc2VfcGF0aCgpOworCXJldHVybiBnaXRfcGF0aF9zZXFfZGlyKCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfdG9kb19wYXRoKGNvbnN0IHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlpZiAoaXNfcmViYXNlX2kob3B0cykpCisJCXJldHVybiByZWJhc2VfcGF0aF90b2RvKCk7CisJcmV0dXJuIGdpdF9wYXRoX3RvZG9fZmlsZSgpOworfQorCisvKgorICogUmV0dXJucyAwIGZvciBub24tY29uZm9ybWluZyBmb290ZXIKKyAqIFJldHVybnMgMSBmb3IgY29uZm9ybWluZyBmb290ZXIKKyAqIFJldHVybnMgMiB3aGVuIHNvYiBleGlzdHMgd2l0aGluIGNvbmZvcm1pbmcgZm9vdGVyCisgKiBSZXR1cm5zIDMgd2hlbiBzb2IgZXhpc3RzIHdpdGhpbiBjb25mb3JtaW5nIGZvb3RlciBhcyBsYXN0IGVudHJ5CisgKi8KK3N0YXRpYyBpbnQgaGFzX2NvbmZvcm1pbmdfZm9vdGVyKHN0cnVjdCBzdHJidWYgKnNiLCBzdHJ1Y3Qgc3RyYnVmICpzb2IsCisJc2l6ZV90IGlnbm9yZV9mb290ZXIpCit7CisJc3RydWN0IHByb2Nlc3NfdHJhaWxlcl9vcHRpb25zIG9wdHMgPSBQUk9DRVNTX1RSQUlMRVJfT1BUSU9OU19JTklUOworCXN0cnVjdCB0cmFpbGVyX2luZm8gaW5mbzsKKwlzaXplX3QgaTsKKwlpbnQgZm91bmRfc29iID0gMCwgZm91bmRfc29iX2xhc3QgPSAwOworCisJb3B0cy5ub19kaXZpZGVyID0gMTsKKworCXRyYWlsZXJfaW5mb19nZXQoJmluZm8sIHNiLT5idWYsICZvcHRzKTsKKworCWlmIChpbmZvLnRyYWlsZXJfc3RhcnQgPT0gaW5mby50cmFpbGVyX2VuZCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby50cmFpbGVyX25yOyBpKyspCisJCWlmIChzb2IgJiYgIXN0cm5jbXAoaW5mby50cmFpbGVyc1tpXSwgc29iLT5idWYsIHNvYi0+bGVuKSkgeworCQkJZm91bmRfc29iID0gMTsKKwkJCWlmIChpID09IGluZm8udHJhaWxlcl9uciAtIDEpCisJCQkJZm91bmRfc29iX2xhc3QgPSAxOworCQl9CisKKwl0cmFpbGVyX2luZm9fcmVsZWFzZSgmaW5mbyk7CisKKwlpZiAoZm91bmRfc29iX2xhc3QpCisJCXJldHVybiAzOworCWlmIChmb3VuZF9zb2IpCisJCXJldHVybiAyOworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ3BnX3NpZ25fb3B0X3F1b3RlZChzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJaWYgKG9wdHMtPmdwZ19zaWduKQorCQlzcV9xdW90ZWYoJmJ1ZiwgIi1TJXMiLCBvcHRzLT5ncGdfc2lnbik7CisJcmV0dXJuIGJ1Zi5idWY7Cit9CisKK2ludCBzZXF1ZW5jZXJfcmVtb3ZlX3N0YXRlKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBpLCByZXQgPSAwOworCisJaWYgKGlzX3JlYmFzZV9pKG9wdHMpICYmCisJICAgIHN0cmJ1Zl9yZWFkX2ZpbGUoJmJ1ZiwgcmViYXNlX3BhdGhfcmVmc190b19kZWxldGUoKSwgMCkgPiAwKSB7CisJCWNoYXIgKnAgPSBidWYuYnVmOworCQl3aGlsZSAoKnApIHsKKwkJCWNoYXIgKmVvbCA9IHN0cmNocihwLCAnXG4nKTsKKwkJCWlmIChlb2wpCisJCQkJKmVvbCA9ICdcMCc7CisJCQlpZiAoZGVsZXRlX3JlZigiKHJlYmFzZSkgY2xlYW51cCIsIHAsIE5VTEwsIDApIDwgMCkgeworCQkJCXdhcm5pbmcoXygiY291bGQgbm90IGRlbGV0ZSAnJXMnIiksIHApOworCQkJCXJldCA9IC0xOworCQkJfQorCQkJaWYgKCFlb2wpCisJCQkJYnJlYWs7CisJCQlwID0gZW9sICsgMTsKKwkJfQorCX0KKworCWZyZWUob3B0cy0+Z3BnX3NpZ24pOworCWZyZWUob3B0cy0+c3RyYXRlZ3kpOworCWZvciAoaSA9IDA7IGkgPCBvcHRzLT54b3B0c19ucjsgaSsrKQorCQlmcmVlKG9wdHMtPnhvcHRzW2ldKTsKKwlmcmVlKG9wdHMtPnhvcHRzKTsKKwlzdHJidWZfcmVsZWFzZSgmb3B0cy0+Y3VycmVudF9maXh1cHMpOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZ2V0X2RpcihvcHRzKSk7CisJaWYgKHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJmJ1ZiwgMCkpCisJCXJldCA9IGVycm9yKF8oImNvdWxkIG5vdCByZW1vdmUgJyVzJyIpLCBidWYuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICphY3Rpb25fbmFtZShjb25zdCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3dpdGNoIChvcHRzLT5hY3Rpb24pIHsKKwljYXNlIFJFUExBWV9SRVZFUlQ6CisJCXJldHVybiBOXygicmV2ZXJ0Iik7CisJY2FzZSBSRVBMQVlfUElDSzoKKwkJcmV0dXJuIE5fKCJjaGVycnktcGljayIpOworCWNhc2UgUkVQTEFZX0lOVEVSQUNUSVZFX1JFQkFTRToKKwkJcmV0dXJuIE5fKCJyZWJhc2UiKTsKKwl9CisJZGllKF8oInVua25vd24gYWN0aW9uOiAlZCIpLCBvcHRzLT5hY3Rpb24pOworfQorCitzdHJ1Y3QgY29tbWl0X21lc3NhZ2UgeworCWNoYXIgKnBhcmVudF9sYWJlbDsKKwljaGFyICpsYWJlbDsKKwljaGFyICpzdWJqZWN0OworCWNvbnN0IGNoYXIgKm1lc3NhZ2U7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc2hvcnRfY29tbWl0X25hbWUoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXJldHVybiBmaW5kX3VuaXF1ZV9hYmJyZXYoJmNvbW1pdC0+b2JqZWN0Lm9pZCwgREVGQVVMVF9BQkJSRVYpOworfQorCitzdGF0aWMgaW50IGdldF9tZXNzYWdlKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdF9tZXNzYWdlICpvdXQpCit7CisJY29uc3QgY2hhciAqYWJicmV2LCAqc3ViamVjdDsKKwlpbnQgc3ViamVjdF9sZW47CisKKwlvdXQtPm1lc3NhZ2UgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpKTsKKwlhYmJyZXYgPSBzaG9ydF9jb21taXRfbmFtZShjb21taXQpOworCisJc3ViamVjdF9sZW4gPSBmaW5kX2NvbW1pdF9zdWJqZWN0KG91dC0+bWVzc2FnZSwgJnN1YmplY3QpOworCisJb3V0LT5zdWJqZWN0ID0geG1lbWR1cHooc3ViamVjdCwgc3ViamVjdF9sZW4pOworCW91dC0+bGFiZWwgPSB4c3RyZm10KCIlcy4uLiAlcyIsIGFiYnJldiwgb3V0LT5zdWJqZWN0KTsKKwlvdXQtPnBhcmVudF9sYWJlbCA9IHhzdHJmbXQoInBhcmVudCBvZiAlcyIsIG91dC0+bGFiZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfbWVzc2FnZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRfbWVzc2FnZSAqbXNnKQoreworCWZyZWUobXNnLT5wYXJlbnRfbGFiZWwpOworCWZyZWUobXNnLT5sYWJlbCk7CisJZnJlZShtc2ctPnN1YmplY3QpOworCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBtc2ctPm1lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9hZHZpY2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGludCBzaG93X2hpbnQsCisJCQkgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCWNoYXIgKm1zZyA9IGdldGVudigiR0lUX0NIRVJSWV9QSUNLX0hFTFAiKTsKKworCWlmIChtc2cpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnKTsKKwkJLyoKKwkJICogQSBjb25mbGljdCBoYXMgb2NjdXJyZWQgYnV0IHRoZSBwb3JjZWxhaW4KKwkJICogKHR5cGljYWxseSByZWJhc2UgLS1pbnRlcmFjdGl2ZSkgd2FudHMgdG8gdGFrZSBjYXJlCisJCSAqIG9mIHRoZSBjb21taXQgaXRzZWxmIHNvIHJlbW92ZSBDSEVSUllfUElDS19IRUFECisJCSAqLworCQl1bmxpbmsoZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZChyKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc2hvd19oaW50KSB7CisJCWlmIChvcHRzLT5ub19jb21taXQpCisJCQlhZHZpc2UoXygiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorCQkJCSAid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIikpOworCQllbHNlCisJCQlhZHZpc2UoXygiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorCQkJCSAid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisJCQkJICJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciKSk7CisJfQorfQorCitzdGF0aWMgaW50IHdyaXRlX21lc3NhZ2UoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCSBpbnQgYXBwZW5kX2VvbCkKK3sKKwlzdHJ1Y3QgbG9ja19maWxlIG1zZ19maWxlID0gTE9DS19JTklUOworCisJaW50IG1zZ19mZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJm1zZ19maWxlLCBmaWxlbmFtZSwgMCk7CisJaWYgKG1zZ19mZCA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgbG9jayAnJXMnIiksIGZpbGVuYW1lKTsKKwlpZiAod3JpdGVfaW5fZnVsbChtc2dfZmQsIGJ1ZiwgbGVuKSA8IDApIHsKKwkJZXJyb3JfZXJybm8oXygiY291bGQgbm90IHdyaXRlIHRvICclcyciKSwgZmlsZW5hbWUpOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJm1zZ19maWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoYXBwZW5kX2VvbCAmJiB3cml0ZShtc2dfZmQsICJcbiIsIDEpIDwgMCkgeworCQllcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgZW9sIHRvICclcyciKSwgZmlsZW5hbWUpOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJm1zZ19maWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoY29tbWl0X2xvY2tfZmlsZSgmbXNnX2ZpbGUpIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImZhaWxlZCB0byBmaW5hbGl6ZSAnJXMnIiksIGZpbGVuYW1lKTsKKworCXJldHVybiAwOworfQorCitpbnQgcmVhZF9vbmVsaW5lcihzdHJ1Y3Qgc3RyYnVmICpidWYsCisJY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgZmxhZ3MpCit7CisJaW50IG9yaWdfbGVuID0gYnVmLT5sZW47CisKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZShidWYsIHBhdGgsIDApIDwgMCkgeworCQlpZiAoKGZsYWdzICYgUkVBRF9PTkVMSU5FUl9XQVJOX01JU1NJTkcpIHx8CisJCSAgICAoZXJybm8gIT0gRU5PRU5UICYmIGVycm5vICE9IEVOT1RESVIpKQorCQkJd2FybmluZ19lcnJubyhfKCJjb3VsZCBub3QgcmVhZCAnJXMnIiksIHBhdGgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYnVmLT5sZW4gPiBvcmlnX2xlbiAmJiBidWYtPmJ1ZltidWYtPmxlbiAtIDFdID09ICdcbicpIHsKKwkJaWYgKC0tYnVmLT5sZW4gPiBvcmlnX2xlbiAmJiBidWYtPmJ1ZltidWYtPmxlbiAtIDFdID09ICdccicpCisJCQktLWJ1Zi0+bGVuOworCQlidWYtPmJ1ZltidWYtPmxlbl0gPSAnXDAnOworCX0KKworCWlmICgoZmxhZ3MgJiBSRUFEX09ORUxJTkVSX1NLSVBfSUZfRU1QVFkpICYmIGJ1Zi0+bGVuID09IG9yaWdfbGVuKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHRyZWUgKmVtcHR5X3RyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJcmV0dXJuIGxvb2t1cF90cmVlKHIsIHRoZV9oYXNoX2FsZ28tPmVtcHR5X3RyZWUpOworfQorCitzdGF0aWMgaW50IGVycm9yX2RpcnR5X2luZGV4KHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJaWYgKHJlcG9fcmVhZF9pbmRleF91bm1lcmdlZChyZXBvKSkKKwkJcmV0dXJuIGVycm9yX3Jlc29sdmVfY29uZmxpY3QoXyhhY3Rpb25fbmFtZShvcHRzKSkpOworCisJZXJyb3IoXygieW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzLiIpLAorCQlfKGFjdGlvbl9uYW1lKG9wdHMpKSk7CisKKwlpZiAoYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UpCisJCWFkdmlzZShfKCJjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iKSk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfYWJvcnRfc2FmZXR5X2ZpbGUodm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWQ7CisKKwkvKiBEbyBub3RoaW5nIG9uIGEgc2luZ2xlLXBpY2sgKi8KKwlpZiAoIWZpbGVfZXhpc3RzKGdpdF9wYXRoX3NlcV9kaXIoKSkpCisJCXJldHVybjsKKworCWlmICghZ2V0X29pZCgiSEVBRCIsICZoZWFkKSkKKwkJd3JpdGVfZmlsZShnaXRfcGF0aF9hYm9ydF9zYWZldHlfZmlsZSgpLCAiJXMiLCBvaWRfdG9faGV4KCZoZWFkKSk7CisJZWxzZQorCQl3cml0ZV9maWxlKGdpdF9wYXRoX2Fib3J0X3NhZmV0eV9maWxlKCksICIlcyIsICIiKTsKK30KKworc3RhdGljIGludCBmYXN0X2ZvcndhcmRfdG8oc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0bywKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmZyb20sCisJCQkgICBpbnQgdW5ib3JuLAorCQkJICAgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCisJcmVwb19yZWFkX2luZGV4KHIpOworCWlmIChjaGVja291dF9mYXN0X2ZvcndhcmQociwgZnJvbSwgdG8sIDEpKQorCQlyZXR1cm4gLTE7IC8qIHRoZSBjYWxsZWUgc2hvdWxkIGhhdmUgY29tcGxhaW5lZCBhbHJlYWR5ICovCisKKwlzdHJidWZfYWRkZigmc2IsIF8oIiVzOiBmYXN0LWZvcndhcmQiKSwgXyhhY3Rpb25fbmFtZShvcHRzKSkpOworCisJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJaWYgKCF0cmFuc2FjdGlvbiB8fAorCSAgICByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCAiSEVBRCIsCisJCQkJICAgdG8sIHVuYm9ybiAmJiAhaXNfcmViYXNlX2kob3B0cykgPworCQkJCSAgICZudWxsX29pZCA6IGZyb20sCisJCQkJICAgMCwgc2IuYnVmLCAmZXJyKSB8fAorCSAgICByZWZfdHJhbnNhY3Rpb25fY29tbWl0KHRyYW5zYWN0aW9uLCAmZXJyKSkgeworCQlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJCWVycm9yKCIlcyIsIGVyci5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXVwZGF0ZV9hYm9ydF9zYWZldHlfZmlsZSgpOworCXJldHVybiAwOworfQorCitlbnVtIGNvbW1pdF9tc2dfY2xlYW51cF9tb2RlIGdldF9jbGVhbnVwX21vZGUoY29uc3QgY2hhciAqY2xlYW51cF9hcmcsCisJaW50IHVzZV9lZGl0b3IpCit7CisJaWYgKCFjbGVhbnVwX2FyZyB8fCAhc3RyY21wKGNsZWFudXBfYXJnLCAiZGVmYXVsdCIpKQorCQlyZXR1cm4gdXNlX2VkaXRvciA/IENPTU1JVF9NU0dfQ0xFQU5VUF9BTEwgOgorCQkJCSAgICBDT01NSVRfTVNHX0NMRUFOVVBfU1BBQ0U7CisJZWxzZSBpZiAoIXN0cmNtcChjbGVhbnVwX2FyZywgInZlcmJhdGltIikpCisJCXJldHVybiBDT01NSVRfTVNHX0NMRUFOVVBfTk9ORTsKKwllbHNlIGlmICghc3RyY21wKGNsZWFudXBfYXJnLCAid2hpdGVzcGFjZSIpKQorCQlyZXR1cm4gQ09NTUlUX01TR19DTEVBTlVQX1NQQUNFOworCWVsc2UgaWYgKCFzdHJjbXAoY2xlYW51cF9hcmcsICJzdHJpcCIpKQorCQlyZXR1cm4gQ09NTUlUX01TR19DTEVBTlVQX0FMTDsKKwllbHNlIGlmICghc3RyY21wKGNsZWFudXBfYXJnLCAic2Npc3NvcnMiKSkKKwkJcmV0dXJuIHVzZV9lZGl0b3IgPyBDT01NSVRfTVNHX0NMRUFOVVBfU0NJU1NPUlMgOgorCQkJCSAgICBDT01NSVRfTVNHX0NMRUFOVVBfU1BBQ0U7CisJZWxzZQorCQlkaWUoXygiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiKSwgY2xlYW51cF9hcmcpOworfQorCisvKgorICogTkIgdXNpbmcgaW50IHJhdGhlciB0aGFuIGVudW0gY2xlYW51cF9tb2RlIHRvIHN0b3AgY2xhbmcncworICogLVd0YXV0b2xvZ2ljYWwtY29uc3RhbnQtb3V0LW9mLXJhbmdlLWNvbXBhcmUgY29tcGxhaW5pbmcgdGhhdCB0aGUgY29tcGFyaXNvbgorICogaXMgYWx3YXlzIHRydWUuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkZXNjcmliZV9jbGVhbnVwX21vZGUoaW50IGNsZWFudXBfbW9kZSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqbW9kZXNbXSA9IHsgIndoaXRlc3BhY2UiLAorCQkJCSAgICAgICAidmVyYmF0aW0iLAorCQkJCSAgICAgICAic2Npc3NvcnMiLAorCQkJCSAgICAgICAic3RyaXAiIH07CisKKwlpZiAoY2xlYW51cF9tb2RlIDwgQVJSQVlfU0laRShtb2RlcykpCisJCXJldHVybiBtb2Rlc1tjbGVhbnVwX21vZGVdOworCisJQlVHKCJpbnZhbGlkIGNsZWFudXBfbW9kZSBwcm92aWRlZCAoJWQpIiwgY2xlYW51cF9tb2RlKTsKK30KKwordm9pZCBhcHBlbmRfY29uZmxpY3RzX2hpbnQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJc3RydWN0IHN0cmJ1ZiAqbXNnYnVmLCBlbnVtIGNvbW1pdF9tc2dfY2xlYW51cF9tb2RlIGNsZWFudXBfbW9kZSkKK3sKKwlpbnQgaTsKKworCWlmIChjbGVhbnVwX21vZGUgPT0gQ09NTUlUX01TR19DTEVBTlVQX1NDSVNTT1JTKSB7CisJCXN0cmJ1Zl9hZGRjaChtc2didWYsICdcbicpOworCQl3dF9zdGF0dXNfYXBwZW5kX2N1dF9saW5lKG1zZ2J1Zik7CisJCXN0cmJ1Zl9hZGRjaChtc2didWYsIGNvbW1lbnRfbGluZV9jaGFyKTsKKwl9CisKKwlzdHJidWZfYWRkY2gobXNnYnVmLCAnXG4nKTsKKwlzdHJidWZfY29tbWVudGVkX2FkZGYobXNnYnVmLCAiQ29uZmxpY3RzOlxuIik7CisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7KSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2krK107CisJCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZihtc2didWYsICJcdCVzXG4iLCBjZS0+bmFtZSk7CisJCQl3aGlsZSAoaSA8IGlzdGF0ZS0+Y2FjaGVfbnIgJiYKKwkJCSAgICAgICAhc3RyY21wKGNlLT5uYW1lLCBpc3RhdGUtPmNhY2hlW2ldLT5uYW1lKSkKKwkJCQlpKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZG9fcmVjdXJzaXZlX21lcmdlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICAgc3RydWN0IGNvbW1pdCAqYmFzZSwgc3RydWN0IGNvbW1pdCAqbmV4dCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJhc2VfbGFiZWwsIGNvbnN0IGNoYXIgKm5leHRfbGFiZWwsCisJCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpoZWFkLCBzdHJ1Y3Qgc3RyYnVmICptc2didWYsCisJCQkgICAgICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IG1lcmdlX29wdGlvbnMgbzsKKwlzdHJ1Y3QgdHJlZSAqbmV4dF90cmVlLCAqYmFzZV90cmVlLCAqaGVhZF90cmVlOworCWludCBjbGVhbjsKKwlpbnQgaTsKKwlzdHJ1Y3QgbG9ja19maWxlIGluZGV4X2xvY2sgPSBMT0NLX0lOSVQ7CisKKwlpZiAocmVwb19ob2xkX2xvY2tlZF9pbmRleChyLCAmaW5kZXhfbG9jaywgTE9DS19SRVBPUlRfT05fRVJST1IpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmVwb19yZWFkX2luZGV4KHIpOworCisJaW5pdF9tZXJnZV9vcHRpb25zKCZvLCByKTsKKwlvLmFuY2VzdG9yID0gYmFzZSA/IGJhc2VfbGFiZWwgOiAiKGVtcHR5IHRyZWUpIjsKKwlvLmJyYW5jaDEgPSAiSEVBRCI7CisJby5icmFuY2gyID0gbmV4dCA/IG5leHRfbGFiZWwgOiAiKGVtcHR5IHRyZWUpIjsKKwlpZiAoaXNfcmViYXNlX2kob3B0cykpCisJCW8uYnVmZmVyX291dHB1dCA9IDI7CisJby5zaG93X3JlbmFtZV9wcm9ncmVzcyA9IDE7CisKKwloZWFkX3RyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KGhlYWQpOworCW5leHRfdHJlZSA9IG5leHQgPyBnZXRfY29tbWl0X3RyZWUobmV4dCkgOiBlbXB0eV90cmVlKHIpOworCWJhc2VfdHJlZSA9IGJhc2UgPyBnZXRfY29tbWl0X3RyZWUoYmFzZSkgOiBlbXB0eV90cmVlKHIpOworCisJZm9yIChpID0gMDsgaSA8IG9wdHMtPnhvcHRzX25yOyBpKyspCisJCXBhcnNlX21lcmdlX29wdCgmbywgb3B0cy0+eG9wdHNbaV0pOworCisJY2xlYW4gPSBtZXJnZV90cmVlcygmbywKKwkJCSAgICBoZWFkX3RyZWUsCisJCQkgICAgbmV4dF90cmVlLCBiYXNlX3RyZWUpOworCWlmIChpc19yZWJhc2VfaShvcHRzKSAmJiBjbGVhbiA8PSAwKQorCQlmcHV0cyhvLm9idWYuYnVmLCBzdGRvdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZvLm9idWYpOworCWlmIChjbGVhbiA8IDApIHsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZpbmRleF9sb2NrKTsKKwkJcmV0dXJuIGNsZWFuOworCX0KKworCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoci0+aW5kZXgsICZpbmRleF9sb2NrLAorCQkJICAgICAgIENPTU1JVF9MT0NLIHwgU0tJUF9JRl9VTkNIQU5HRUQpKQorCQkvKgorCQkgKiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiwgImNoZXJyeS1waWNrIiBvcgorCQkgKiAicmViYXNlIi4KKwkJICovCisJCXJldHVybiBlcnJvcihfKCIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIiksCisJCQlfKGFjdGlvbl9uYW1lKG9wdHMpKSk7CisKKwlpZiAoIWNsZWFuKQorCQlhcHBlbmRfY29uZmxpY3RzX2hpbnQoci0+aW5kZXgsIG1zZ2J1ZiwKKwkJCQkgICAgICBvcHRzLT5kZWZhdWx0X21zZ19jbGVhbnVwKTsKKworCXJldHVybiAhY2xlYW47Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2lkICpnZXRfY2FjaGVfdHJlZV9vaWQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaWYgKCFpc3RhdGUtPmNhY2hlX3RyZWUpCisJCWlzdGF0ZS0+Y2FjaGVfdHJlZSA9IGNhY2hlX3RyZWUoKTsKKworCWlmICghY2FjaGVfdHJlZV9mdWxseV92YWxpZChpc3RhdGUtPmNhY2hlX3RyZWUpKQorCQlpZiAoY2FjaGVfdHJlZV91cGRhdGUoaXN0YXRlLCAwKSkgeworCQkJZXJyb3IoXygidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlIikpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCXJldHVybiAmaXN0YXRlLT5jYWNoZV90cmVlLT5vaWQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfaW5kZXhfdW5jaGFuZ2VkKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQsICpjYWNoZV90cmVlX29pZDsKKwlzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSA9IHItPmluZGV4OworCisJaWYgKCFyZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLCAmaGVhZF9vaWQsIE5VTEwpKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXQiKSk7CisKKwloZWFkX2NvbW1pdCA9IGxvb2t1cF9jb21taXQociwgJmhlYWRfb2lkKTsKKworCS8qCisJICogSWYgaGVhZF9jb21taXQgaXMgTlVMTCwgY2hlY2tfY29tbWl0LCBjYWxsZWQgZnJvbQorCSAqIGxvb2t1cF9jb21taXQsIHdvdWxkIGhhdmUgaW5kaWNhdGVkIHRoYXQgaGVhZF9jb21taXQgaXMgbm90CisJICogYSBjb21taXQgb2JqZWN0IGFscmVhZHkuICBwYXJzZV9jb21taXQoKSB3aWxsIHJldHVybiBmYWlsdXJlCisJICogd2l0aG91dCBmdXJ0aGVyIGNvbXBsYWludHMgaW4gc3VjaCBhIGNhc2UuICBPdGhlcndpc2UsIGlmCisJICogdGhlIGNvbW1pdCBpcyBpbnZhbGlkLCBwYXJzZV9jb21taXQoKSB3aWxsIGNvbXBsYWluLiAgU28KKwkgKiB0aGVyZSBpcyBub3RoaW5nIGZvciB1cyB0byBzYXkgaGVyZS4gIEp1c3QgcmV0dXJuIGZhaWx1cmUuCisJICovCisJaWYgKHBhcnNlX2NvbW1pdChoZWFkX2NvbW1pdCkpCisJCXJldHVybiAtMTsKKworCWlmICghKGNhY2hlX3RyZWVfb2lkID0gZ2V0X2NhY2hlX3RyZWVfb2lkKGlzdGF0ZSkpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gb2lkZXEoY2FjaGVfdHJlZV9vaWQsIGdldF9jb21taXRfdHJlZV9vaWQoaGVhZF9jb21taXQpKTsKK30KKworc3RhdGljIGludCB3cml0ZV9hdXRob3Jfc2NyaXB0KGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICplb2w7CisJaW50IHJlczsKKworCWZvciAoOzspCisJCWlmICghKm1lc3NhZ2UgfHwgc3RhcnRzX3dpdGgobWVzc2FnZSwgIlxuIikpIHsKK21pc3NpbmdfYXV0aG9yOgorCQkJLyogTWlzc2luZyAnYXV0aG9yJyBsaW5lPyAqLworCQkJdW5saW5rKHJlYmFzZV9wYXRoX2F1dGhvcl9zY3JpcHQoKSk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChtZXNzYWdlLCAiYXV0aG9yICIsICZtZXNzYWdlKSkKKwkJCWJyZWFrOworCQllbHNlIGlmICgoZW9sID0gc3RyY2hyKG1lc3NhZ2UsICdcbicpKSkKKwkJCW1lc3NhZ2UgPSBlb2wgKyAxOworCQllbHNlCisJCQlnb3RvIG1pc3NpbmdfYXV0aG9yOworCisJc3RyYnVmX2FkZHN0cigmYnVmLCAiR0lUX0FVVEhPUl9OQU1FPSciKTsKKwl3aGlsZSAoKm1lc3NhZ2UgJiYgKm1lc3NhZ2UgIT0gJ1xuJyAmJiAqbWVzc2FnZSAhPSAnXHInKQorCQlpZiAoc2tpcF9wcmVmaXgobWVzc2FnZSwgIiA8IiwgJm1lc3NhZ2UpKQorCQkJYnJlYWs7CisJCWVsc2UgaWYgKCptZXNzYWdlICE9ICdcJycpCisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgKihtZXNzYWdlKyspKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIidcXCVjJyIsICoobWVzc2FnZSsrKSk7CisJc3RyYnVmX2FkZHN0cigmYnVmLCAiJ1xuR0lUX0FVVEhPUl9FTUFJTD0nIik7CisJd2hpbGUgKCptZXNzYWdlICYmICptZXNzYWdlICE9ICdcbicgJiYgKm1lc3NhZ2UgIT0gJ1xyJykKKwkJaWYgKHNraXBfcHJlZml4KG1lc3NhZ2UsICI+ICIsICZtZXNzYWdlKSkKKwkJCWJyZWFrOworCQllbHNlIGlmICgqbWVzc2FnZSAhPSAnXCcnKQorCQkJc3RyYnVmX2FkZGNoKCZidWYsICoobWVzc2FnZSsrKSk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICInXFwlYyciLCAqKG1lc3NhZ2UrKykpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIidcbkdJVF9BVVRIT1JfREFURT0nQCIpOworCXdoaWxlICgqbWVzc2FnZSAmJiAqbWVzc2FnZSAhPSAnXG4nICYmICptZXNzYWdlICE9ICdccicpCisJCWlmICgqbWVzc2FnZSAhPSAnXCcnKQorCQkJc3RyYnVmX2FkZGNoKCZidWYsICoobWVzc2FnZSsrKSk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICInXFwlYyciLCAqKG1lc3NhZ2UrKykpOworCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXCcnKTsKKwlyZXMgPSB3cml0ZV9tZXNzYWdlKGJ1Zi5idWYsIGJ1Zi5sZW4sIHJlYmFzZV9wYXRoX2F1dGhvcl9zY3JpcHQoKSwgMSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBUYWtlIGEgc2VyaWVzIG9mIEtFWT0nVkFMVUUnIGxpbmVzIHdoZXJlIFZBTFVFIHBhcnQgaXMKKyAqIHNxLXF1b3RlZCwgYW5kIGFwcGVuZCA8S0VZLCBWQUxVRT4gYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIGxpc3QKKyAqLworc3RhdGljIGludCBwYXJzZV9rZXlfdmFsdWVfc3F1b3RlZChjaGFyICpidWYsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwl3aGlsZSAoKmJ1ZikgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJY2hhciAqbnA7CisJCWNoYXIgKmNwID0gc3RyY2hyKGJ1ZiwgJz0nKTsKKwkJaWYgKCFjcCkgeworCQkJbnAgPSBzdHJjaHJudWwoYnVmLCAnXG4nKTsKKwkJCXJldHVybiBlcnJvcihfKCJubyBrZXkgcHJlc2VudCBpbiAnJS4qcyciKSwKKwkJCQkgICAgIChpbnQpIChucCAtIGJ1ZiksIGJ1Zik7CisJCX0KKwkJbnAgPSBzdHJjaHJudWwoY3AsICdcbicpOworCQkqY3ArKyA9ICdcMCc7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgYnVmKTsKKworCQlidWYgPSBucCArICgqbnAgPT0gJ1xuJyk7CisJCSpucCA9ICdcMCc7CisJCWNwID0gc3FfZGVxdW90ZShjcCk7CisJCWlmICghY3ApCisJCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIGRlcXVvdGUgdmFsdWUgb2YgJyVzJyIpLAorCQkJCSAgICAgaXRlbS0+c3RyaW5nKTsKKwkJaXRlbS0+dXRpbCA9IHhzdHJkdXAoY3ApOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBSZWFkcyBhbmQgcGFyc2VzIHRoZSBzdGF0ZSBkaXJlY3RvcnkncyAiYXV0aG9yLXNjcmlwdCIgZmlsZSwgYW5kIHNldHMgbmFtZSwKKyAqIGVtYWlsIGFuZCBkYXRlIGFjY29yZGluZ2x5LgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIGlmIHRoZSBmaWxlIGNvdWxkIG5vdCBiZSBwYXJzZWQuCisgKgorICogVGhlIGF1dGhvciBzY3JpcHQgaXMgb2YgdGhlIGZvcm1hdDoKKyAqCisgKglHSVRfQVVUSE9SX05BTUU9JyRhdXRob3JfbmFtZScKKyAqCUdJVF9BVVRIT1JfRU1BSUw9JyRhdXRob3JfZW1haWwnCisgKglHSVRfQVVUSE9SX0RBVEU9JyRhdXRob3JfZGF0ZScKKyAqCisgKiB3aGVyZSAkYXV0aG9yX25hbWUsICRhdXRob3JfZW1haWwgYW5kICRhdXRob3JfZGF0ZSBhcmUgcXVvdGVkLiBXZSBhcmUgc3RyaWN0CisgKiB3aXRoIG91ciBwYXJzaW5nLCBhcyB0aGUgZmlsZSB3YXMgbWVhbnQgdG8gYmUgZXZhbCdkIGluIHRoZSBub3ctcmVtb3ZlZAorICogZ2l0LWFtLnNoL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoIHNjcmlwdHMsIGFuZCB0aHVzIGlmIHRoZSBmaWxlIGRpZmZlcnMKKyAqIGZyb20gd2hhdCB0aGlzIGZ1bmN0aW9uIGV4cGVjdHMsIGl0IGlzIGJldHRlciB0byBiYWlsIG91dCB0aGFuIHRvIGRvCisgKiBzb21ldGhpbmcgdGhhdCB0aGUgdXNlciBkb2VzIG5vdCBleHBlY3QuCisgKi8KK2ludCByZWFkX2F1dGhvcl9zY3JpcHQoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqKm5hbWUsIGNoYXIgKiplbWFpbCwgY2hhciAqKmRhdGUsCisJCSAgICAgICBpbnQgYWxsb3dfbWlzc2luZykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJpbmdfbGlzdCBrdiA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWludCByZXR2YWwgPSAtMTsgLyogYXNzdW1lIGZhaWx1cmUgKi8KKwlpbnQgaSwgbmFtZV9pID0gLTIsIGVtYWlsX2kgPSAtMiwgZGF0ZV9pID0gLTIsIGVyciA9IDA7CisKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCBwYXRoLCAyNTYpIDw9IDApIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCWlmIChlcnJubyA9PSBFTk9FTlQgJiYgYWxsb3dfbWlzc2luZykKKwkJCXJldHVybiAwOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIpLAorCQkJCQkgICBwYXRoKTsKKwl9CisKKwlpZiAocGFyc2Vfa2V5X3ZhbHVlX3NxdW90ZWQoYnVmLmJ1ZiwgJmt2KSkKKwkJZ290byBmaW5pc2g7CisKKwlmb3IgKGkgPSAwOyBpIDwga3YubnI7IGkrKykgeworCQlpZiAoIXN0cmNtcChrdi5pdGVtc1tpXS5zdHJpbmcsICJHSVRfQVVUSE9SX05BTUUiKSkgeworCQkJaWYgKG5hbWVfaSAhPSAtMikKKwkJCQluYW1lX2kgPSBlcnJvcihfKCInR0lUX0FVVEhPUl9OQU1FJyBhbHJlYWR5IGdpdmVuIikpOworCQkJZWxzZQorCQkJCW5hbWVfaSA9IGk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChrdi5pdGVtc1tpXS5zdHJpbmcsICJHSVRfQVVUSE9SX0VNQUlMIikpIHsKKwkJCWlmIChlbWFpbF9pICE9IC0yKQorCQkJCWVtYWlsX2kgPSBlcnJvcihfKCInR0lUX0FVVEhPUl9FTUFJTCcgYWxyZWFkeSBnaXZlbiIpKTsKKwkJCWVsc2UKKwkJCQllbWFpbF9pID0gaTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGt2Lml0ZW1zW2ldLnN0cmluZywgIkdJVF9BVVRIT1JfREFURSIpKSB7CisJCQlpZiAoZGF0ZV9pICE9IC0yKQorCQkJCWRhdGVfaSA9IGVycm9yKF8oIidHSVRfQVVUSE9SX0RBVEUnIGFscmVhZHkgZ2l2ZW4iKSk7CisJCQllbHNlCisJCQkJZGF0ZV9pID0gaTsKKwkJfSBlbHNlIHsKKwkJCWVyciA9IGVycm9yKF8oInVua25vd24gdmFyaWFibGUgJyVzJyIpLAorCQkJCSAgICBrdi5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisJfQorCWlmIChuYW1lX2kgPT0gLTIpCisJCWVycm9yKF8oIm1pc3NpbmcgJ0dJVF9BVVRIT1JfTkFNRSciKSk7CisJaWYgKGVtYWlsX2kgPT0gLTIpCisJCWVycm9yKF8oIm1pc3NpbmcgJ0dJVF9BVVRIT1JfRU1BSUwnIikpOworCWlmIChkYXRlX2kgPT0gLTIpCisJCWVycm9yKF8oIm1pc3NpbmcgJ0dJVF9BVVRIT1JfREFURSciKSk7CisJaWYgKGRhdGVfaSA8IDAgfHwgZW1haWxfaSA8IDAgfHwgZGF0ZV9pIDwgMCB8fCBlcnIpCisJCWdvdG8gZmluaXNoOworCSpuYW1lID0ga3YuaXRlbXNbbmFtZV9pXS51dGlsOworCSplbWFpbCA9IGt2Lml0ZW1zW2VtYWlsX2ldLnV0aWw7CisJKmRhdGUgPSBrdi5pdGVtc1tkYXRlX2ldLnV0aWw7CisJcmV0dmFsID0gMDsKK2ZpbmlzaDoKKwlzdHJpbmdfbGlzdF9jbGVhcigma3YsICEhcmV0dmFsKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogUmVhZCBhIEdJVF9BVVRIT1JfTkFNRSwgR0lUX0FVVEhPUl9FTUFJTCBBTkQgR0lUX0FVVEhPUl9EQVRFIGZyb20gYQorICogZmlsZSB3aXRoIHNoZWxsIHF1b3RpbmcgaW50byBzdHJ1Y3QgYXJndl9hcnJheS4gUmV0dXJucyAtMSBvbgorICogZXJyb3IsIDAgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHJlYWRfZW52X3NjcmlwdChzdHJ1Y3QgYXJndl9hcnJheSAqZW52KQoreworCWNoYXIgKm5hbWUsICplbWFpbCwgKmRhdGU7CisKKwlpZiAocmVhZF9hdXRob3Jfc2NyaXB0KHJlYmFzZV9wYXRoX2F1dGhvcl9zY3JpcHQoKSwKKwkJCSAgICAgICAmbmFtZSwgJmVtYWlsLCAmZGF0ZSwgMCkpCisJCXJldHVybiAtMTsKKworCWFyZ3ZfYXJyYXlfcHVzaGYoZW52LCAiR0lUX0FVVEhPUl9OQU1FPSVzIiwgbmFtZSk7CisJYXJndl9hcnJheV9wdXNoZihlbnYsICJHSVRfQVVUSE9SX0VNQUlMPSVzIiwgZW1haWwpOworCWFyZ3ZfYXJyYXlfcHVzaGYoZW52LCAiR0lUX0FVVEhPUl9EQVRFPSVzIiwgZGF0ZSk7CisJZnJlZShuYW1lKTsKKwlmcmVlKGVtYWlsKTsKKwlmcmVlKGRhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfYXV0aG9yKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJc2l6ZV90IGxlbjsKKwljb25zdCBjaGFyICphOworCisJYSA9IGZpbmRfY29tbWl0X2hlYWRlcihtZXNzYWdlLCAiYXV0aG9yIiwgJmxlbik7CisJaWYgKGEpCisJCXJldHVybiB4bWVtZHVweihhLCBsZW4pOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHN0YWdlZF9jaGFuZ2VzX2FkdmljZVtdID0KK05fKCJ5b3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZVxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlIHNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iKTsKKworI2RlZmluZSBBTExPV19FTVBUWSAoMTw8MCkKKyNkZWZpbmUgRURJVF9NU0cgICAgKDE8PDEpCisjZGVmaW5lIEFNRU5EX01TRyAgICgxPDwyKQorI2RlZmluZSBDTEVBTlVQX01TRyAoMTw8MykKKyNkZWZpbmUgVkVSSUZZX01TRyAgKDE8PDQpCisjZGVmaW5lIENSRUFURV9ST09UX0NPTU1JVCAoMTw8NSkKKworc3RhdGljIGludCBydW5fY29tbWFuZF9zaWxlbnRfb25fc3VjY2VzcyhzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHJjOworCisJY21kLT5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlyYyA9IHBpcGVfY29tbWFuZChjbWQsCisJCQkgIE5VTEwsIDAsCisJCQkgIE5VTEwsIDAsCisJCQkgICZidWYsIDApOworCisJaWYgKHJjKQorCQlmcHV0cyhidWYuYnVmLCBzdGRlcnIpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiByYzsKK30KKworLyoKKyAqIElmIHdlIGFyZSBjaGVycnktcGljaywgYW5kIGlmIHRoZSBtZXJnZSBkaWQgbm90IHJlc3VsdCBpbgorICogaGFuZC1lZGl0aW5nLCB3ZSB3aWxsIGhpdCB0aGlzIGNvbW1pdCBhbmQgaW5oZXJpdCB0aGUgb3JpZ2luYWwKKyAqIGF1dGhvciBkYXRlIGFuZCBuYW1lLgorICoKKyAqIElmIHdlIGFyZSByZXZlcnQsIG9yIGlmIG91ciBjaGVycnktcGljayByZXN1bHRzIGluIGEgaGFuZCBtZXJnZSwKKyAqIHdlIGhhZCBiZXR0ZXIgc2F5IHRoYXQgdGhlIGN1cnJlbnQgdXNlciBpcyByZXNwb25zaWJsZSBmb3IgdGhhdC4KKyAqCisgKiBBbiBleGNlcHRpb24gaXMgd2hlbiBydW5fZ2l0X2NvbW1pdCgpIGlzIGNhbGxlZCBkdXJpbmcgYW4KKyAqIGludGVyYWN0aXZlIHJlYmFzZTogaW4gdGhhdCBjYXNlLCB3ZSB3aWxsIHdhbnQgdG8gcmV0YWluIHRoZQorICogYXV0aG9yIG1ldGFkYXRhLgorICovCitzdGF0aWMgaW50IHJ1bl9naXRfY29tbWl0KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICBjb25zdCBjaGFyICpkZWZtc2csCisJCQkgIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywKKwkJCSAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNtZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCWNtZC5naXRfY21kID0gMTsKKworCWlmIChpc19yZWJhc2VfaShvcHRzKSAmJiByZWFkX2Vudl9zY3JpcHQoJmNtZC5lbnZfYXJyYXkpKSB7CisJCWNvbnN0IGNoYXIgKmdwZ19vcHQgPSBncGdfc2lnbl9vcHRfcXVvdGVkKG9wdHMpOworCisJCXJldHVybiBlcnJvcihfKHN0YWdlZF9jaGFuZ2VzX2FkdmljZSksCisJCQkgICAgIGdwZ19vcHQsIGdwZ19vcHQpOworCX0KKworCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICJjb21taXQiKTsKKworCWlmICghKGZsYWdzICYgVkVSSUZZX01TRykpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItbiIpOworCWlmICgoZmxhZ3MgJiBBTUVORF9NU0cpKQorCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1hbWVuZCIpOworCWlmIChvcHRzLT5ncGdfc2lnbikKKwkJYXJndl9hcnJheV9wdXNoZigmY21kLmFyZ3MsICItUyVzIiwgb3B0cy0+Z3BnX3NpZ24pOworCWVsc2UKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tbm8tZ3BnLXNpZ24iKTsKKwlpZiAoZGVmbXNnKQorCQlhcmd2X2FycmF5X3B1c2hsKCZjbWQuYXJncywgIi1GIiwgZGVmbXNnLCBOVUxMKTsKKwllbHNlIGlmICghKGZsYWdzICYgRURJVF9NU0cpKQorCQlhcmd2X2FycmF5X3B1c2hsKCZjbWQuYXJncywgIi1DIiwgIkhFQUQiLCBOVUxMKTsKKwlpZiAoKGZsYWdzICYgQ0xFQU5VUF9NU0cpKQorCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1jbGVhbnVwPXN0cmlwIik7CisJaWYgKChmbGFncyAmIEVESVRfTVNHKSkKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi1lIik7CisJZWxzZSBpZiAoIShmbGFncyAmIENMRUFOVVBfTVNHKSAmJgorCQkgIW9wdHMtPnNpZ25vZmYgJiYgIW9wdHMtPnJlY29yZF9vcmlnaW4gJiYKKwkJICFvcHRzLT5leHBsaWNpdF9jbGVhbnVwKQorCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1jbGVhbnVwPXZlcmJhdGltIik7CisKKwlpZiAoKGZsYWdzICYgQUxMT1dfRU1QVFkpKQorCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1hbGxvdy1lbXB0eSIpOworCisJaWYgKCEoZmxhZ3MgJiBFRElUX01TRykpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLWFsbG93LWVtcHR5LW1lc3NhZ2UiKTsKKworCWlmIChpc19yZWJhc2VfaShvcHRzKSAmJiAhKGZsYWdzICYgRURJVF9NU0cpKQorCQlyZXR1cm4gcnVuX2NvbW1hbmRfc2lsZW50X29uX3N1Y2Nlc3MoJmNtZCk7CisJZWxzZQorCQlyZXR1cm4gcnVuX2NvbW1hbmQoJmNtZCk7Cit9CisKK3N0YXRpYyBpbnQgcmVzdF9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzYiwgaW50IHN0YXJ0KQoreworCWludCBpLCBlb2w7CisJY29uc3QgY2hhciAqbmw7CisKKwkvKiBDaGVjayBpZiB0aGUgcmVzdCBpcyBqdXN0IHdoaXRlc3BhY2UgYW5kIFNpZ25lZC1vZmYtYnkncy4gKi8KKwlmb3IgKGkgPSBzdGFydDsgaSA8IHNiLT5sZW47IGkrKykgeworCQlubCA9IG1lbWNocihzYi0+YnVmICsgaSwgJ1xuJywgc2ItPmxlbiAtIGkpOworCQlpZiAobmwpCisJCQllb2wgPSBubCAtIHNiLT5idWY7CisJCWVsc2UKKwkJCWVvbCA9IHNiLT5sZW47CisKKwkJaWYgKHN0cmxlbihzaWduX29mZl9oZWFkZXIpIDw9IGVvbCAtIGkgJiYKKwkJICAgIHN0YXJ0c193aXRoKHNiLT5idWYgKyBpLCBzaWduX29mZl9oZWFkZXIpKSB7CisJCQlpID0gZW9sOworCQkJY29udGludWU7CisJCX0KKwkJd2hpbGUgKGkgPCBlb2wpCisJCQlpZiAoIWlzc3BhY2Uoc2ItPmJ1ZltpKytdKSkKKwkJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBjbGVhbnVwX21lc3NhZ2Uoc3RydWN0IHN0cmJ1ZiAqbXNnYnVmLAorCWVudW0gY29tbWl0X21zZ19jbGVhbnVwX21vZGUgY2xlYW51cF9tb2RlLCBpbnQgdmVyYm9zZSkKK3sKKwlpZiAodmVyYm9zZSB8fCAvKiBUcnVuY2F0ZSB0aGUgbWVzc2FnZSBqdXN0IGJlZm9yZSB0aGUgZGlmZiwgaWYgYW55LiAqLworCSAgICBjbGVhbnVwX21vZGUgPT0gQ09NTUlUX01TR19DTEVBTlVQX1NDSVNTT1JTKQorCQlzdHJidWZfc2V0bGVuKG1zZ2J1Ziwgd3Rfc3RhdHVzX2xvY2F0ZV9lbmQobXNnYnVmLT5idWYsIG1zZ2J1Zi0+bGVuKSk7CisJaWYgKGNsZWFudXBfbW9kZSAhPSBDT01NSVRfTVNHX0NMRUFOVVBfTk9ORSkKKwkJc3RyYnVmX3N0cmlwc3BhY2UobXNnYnVmLCBjbGVhbnVwX21vZGUgPT0gQ09NTUlUX01TR19DTEVBTlVQX0FMTCk7Cit9CisKKy8qCisgKiBGaW5kIG91dCBpZiB0aGUgbWVzc2FnZSBpbiB0aGUgc3RyYnVmIGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZSBhbmQKKyAqIFNpZ25lZC1vZmYtYnkgbGluZXMuCisgKi8KK2ludCBtZXNzYWdlX2lzX2VtcHR5KGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiLAorCQkgICAgIGVudW0gY29tbWl0X21zZ19jbGVhbnVwX21vZGUgY2xlYW51cF9tb2RlKQoreworCWlmIChjbGVhbnVwX21vZGUgPT0gQ09NTUlUX01TR19DTEVBTlVQX05PTkUgJiYgc2ItPmxlbikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHJlc3RfaXNfZW1wdHkoc2IsIDApOworfQorCisvKgorICogU2VlIGlmIHRoZSB1c2VyIGVkaXRlZCB0aGUgbWVzc2FnZSBpbiB0aGUgZWRpdG9yIG9yIGxlZnQgd2hhdAorICogd2FzIGluIHRoZSB0ZW1wbGF0ZSBpbnRhY3QKKyAqLworaW50IHRlbXBsYXRlX3VudG91Y2hlZChjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqdGVtcGxhdGVfZmlsZSwKKwkJICAgICAgIGVudW0gY29tbWl0X21zZ19jbGVhbnVwX21vZGUgY2xlYW51cF9tb2RlKQoreworCXN0cnVjdCBzdHJidWYgdG1wbCA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnN0YXJ0OworCisJaWYgKGNsZWFudXBfbW9kZSA9PSBDT01NSVRfTVNHX0NMRUFOVVBfTk9ORSAmJiBzYi0+bGVuKQorCQlyZXR1cm4gMDsKKworCWlmICghdGVtcGxhdGVfZmlsZSB8fCBzdHJidWZfcmVhZF9maWxlKCZ0bXBsLCB0ZW1wbGF0ZV9maWxlLCAwKSA8PSAwKQorCQlyZXR1cm4gMDsKKworCXN0cmJ1Zl9zdHJpcHNwYWNlKCZ0bXBsLCBjbGVhbnVwX21vZGUgPT0gQ09NTUlUX01TR19DTEVBTlVQX0FMTCk7CisJaWYgKCFza2lwX3ByZWZpeChzYi0+YnVmLCB0bXBsLmJ1ZiwgJnN0YXJ0KSkKKwkJc3RhcnQgPSBzYi0+YnVmOworCXN0cmJ1Zl9yZWxlYXNlKCZ0bXBsKTsKKwlyZXR1cm4gcmVzdF9pc19lbXB0eShzYiwgc3RhcnQgLSBzYi0+YnVmKTsKK30KKworaW50IHVwZGF0ZV9oZWFkX3dpdGhfcmVmbG9nKGNvbnN0IHN0cnVjdCBjb21taXQgKm9sZF9oZWFkLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19oZWFkLAorCQkJICAgIGNvbnN0IGNoYXIgKmFjdGlvbiwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbXNnLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqbmw7CisJaW50IHJldCA9IDA7CisKKwlpZiAoYWN0aW9uKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBhY3Rpb24pOworCQlzdHJidWZfYWRkc3RyKCZzYiwgIjogIik7CisJfQorCisJbmwgPSBzdHJjaHIobXNnLT5idWYsICdcbicpOworCWlmIChubCkgeworCQlzdHJidWZfYWRkKCZzYiwgbXNnLT5idWYsIG5sICsgMSAtIG1zZy0+YnVmKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkYnVmKCZzYiwgbXNnKTsKKwkJc3RyYnVmX2FkZGNoKCZzYiwgJ1xuJyk7CisJfQorCisJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oZXJyKTsKKwlpZiAoIXRyYW5zYWN0aW9uIHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl91cGRhdGUodHJhbnNhY3Rpb24sICJIRUFEIiwgbmV3X2hlYWQsCisJCQkJICAgb2xkX2hlYWQgPyAmb2xkX2hlYWQtPm9iamVjdC5vaWQgOiAmbnVsbF9vaWQsCisJCQkJICAgMCwgc2IuYnVmLCBlcnIpIHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sIGVycikpIHsKKwkJcmV0ID0gLTE7CisJfQorCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBydW5fcmV3cml0ZV9ob29rKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZG9pZCwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdvaWQpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcHJvYyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICphcmd2WzNdOworCWludCBjb2RlOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWFyZ3ZbMF0gPSBmaW5kX2hvb2soInBvc3QtcmV3cml0ZSIpOworCWlmICghYXJndlswXSkKKwkJcmV0dXJuIDA7CisKKwlhcmd2WzFdID0gImFtZW5kIjsKKwlhcmd2WzJdID0gTlVMTDsKKworCXByb2MuYXJndiA9IGFyZ3Y7CisJcHJvYy5pbiA9IC0xOworCXByb2Muc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisJcHJvYy50cmFjZTJfaG9va19uYW1lID0gInBvc3QtcmV3cml0ZSI7CisKKwljb2RlID0gc3RhcnRfY29tbWFuZCgmcHJvYyk7CisJaWYgKGNvZGUpCisJCXJldHVybiBjb2RlOworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzICVzXG4iLCBvaWRfdG9faGV4KG9sZG9pZCksIG9pZF90b19oZXgobmV3b2lkKSk7CisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKwl3cml0ZV9pbl9mdWxsKHByb2MuaW4sIHNiLmJ1Ziwgc2IubGVuKTsKKwljbG9zZShwcm9jLmluKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKwlyZXR1cm4gZmluaXNoX2NvbW1hbmQoJnByb2MpOworfQorCit2b2lkIGNvbW1pdF9wb3N0X3Jld3JpdGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgY29uc3Qgc3RydWN0IGNvbW1pdCAqb2xkX2hlYWQsCisJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X2hlYWQpCit7CisJc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjZmc7CisKKwljZmcgPSBpbml0X2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoImFtZW5kIik7CisJaWYgKGNmZykgeworCQkvKiB3ZSBhcmUgYW1lbmRpbmcsIHNvIG9sZF9oZWFkIGlzIG5vdCBOVUxMICovCisJCWNvcHlfbm90ZV9mb3JfcmV3cml0ZShjZmcsICZvbGRfaGVhZC0+b2JqZWN0Lm9pZCwgbmV3X2hlYWQpOworCQlmaW5pc2hfY29weV9ub3Rlc19mb3JfcmV3cml0ZShyLCBjZmcsICJOb3RlcyBhZGRlZCBieSAnZ2l0IGNvbW1pdCAtLWFtZW5kJyIpOworCX0KKwlydW5fcmV3cml0ZV9ob29rKCZvbGRfaGVhZC0+b2JqZWN0Lm9pZCwgbmV3X2hlYWQpOworfQorCitzdGF0aWMgaW50IHJ1bl9wcmVwYXJlX2NvbW1pdF9tc2dfaG9vayhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqbXNnLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpjb21taXQpCit7CisJaW50IHJldCA9IDA7CisJY29uc3QgY2hhciAqbmFtZSwgKmFyZzEgPSBOVUxMLCAqYXJnMiA9IE5VTEw7CisKKwluYW1lID0gZ2l0X3BhdGhfY29tbWl0X2VkaXRtc2coKTsKKwlpZiAod3JpdGVfbWVzc2FnZShtc2ctPmJ1ZiwgbXNnLT5sZW4sIG5hbWUsIDApKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoY29tbWl0KSB7CisJCWFyZzEgPSAiY29tbWl0IjsKKwkJYXJnMiA9IGNvbW1pdDsKKwl9IGVsc2UgeworCQlhcmcxID0gIm1lc3NhZ2UiOworCX0KKwlpZiAocnVuX2NvbW1pdF9ob29rKDAsIHItPmluZGV4X2ZpbGUsICJwcmVwYXJlLWNvbW1pdC1tc2ciLCBuYW1lLAorCQkJICAgIGFyZzEsIGFyZzIsIE5VTEwpKQorCQlyZXQgPSBlcnJvcihfKCIncHJlcGFyZS1jb21taXQtbXNnJyBob29rIGZhaWxlZCIpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGltcGxpY2l0X2lkZW50X2FkdmljZV9ub2NvbmZpZ1tdID0KK05fKCJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIpOworCitzdGF0aWMgY29uc3QgY2hhciBpbXBsaWNpdF9pZGVudF9hZHZpY2VfY29uZmlnW10gPQorTl8oIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyICppbXBsaWNpdF9pZGVudF9hZHZpY2Uodm9pZCkKK3sKKwljaGFyICp1c2VyX2NvbmZpZyA9IGV4cGFuZF91c2VyX3BhdGgoIn4vLmdpdGNvbmZpZyIsIDApOworCWNoYXIgKnhkZ19jb25maWcgPSB4ZGdfY29uZmlnX2hvbWUoImNvbmZpZyIpOworCWludCBjb25maWdfZXhpc3RzID0gZmlsZV9leGlzdHModXNlcl9jb25maWcpIHx8IGZpbGVfZXhpc3RzKHhkZ19jb25maWcpOworCisJZnJlZSh1c2VyX2NvbmZpZyk7CisJZnJlZSh4ZGdfY29uZmlnKTsKKworCWlmIChjb25maWdfZXhpc3RzKQorCQlyZXR1cm4gXyhpbXBsaWNpdF9pZGVudF9hZHZpY2VfY29uZmlnKTsKKwllbHNlCisJCXJldHVybiBfKGltcGxpY2l0X2lkZW50X2FkdmljZV9ub2NvbmZpZyk7CisKK30KKwordm9pZCBwcmludF9jb21taXRfc3VtbWFyeShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3Qgc3RyYnVmIGZvcm1hdCA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmhlYWQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHBjdHggPSB7MH07CisJc3RydWN0IHN0cmJ1ZiBhdXRob3JfaWRlbnQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdHRlcl9pZGVudCA9IFNUUkJVRl9JTklUOworCisJY29tbWl0ID0gbG9va3VwX2NvbW1pdChyLCBvaWQpOworCWlmICghY29tbWl0KQorCQlkaWUoXygiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIpKTsKKwlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCWRpZShfKCJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiKSk7CisKKwlzdHJidWZfYWRkc3RyKCZmb3JtYXQsICJmb3JtYXQ6JWhdICVzIik7CisKKwlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJWFuIDwlYWU+IiwgJmF1dGhvcl9pZGVudCwgJnBjdHgpOworCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICIlY24gPCVjZT4iLCAmY29tbWl0dGVyX2lkZW50LCAmcGN0eCk7CisJaWYgKHN0cmJ1Zl9jbXAoJmF1dGhvcl9pZGVudCwgJmNvbW1pdHRlcl9pZGVudCkpIHsKKwkJc3RyYnVmX2FkZHN0cigmZm9ybWF0LCAiXG4gQXV0aG9yOiAiKTsKKwkJc3RyYnVmX2FkZGJ1Zl9wZXJjZW50cXVvdGUoJmZvcm1hdCwgJmF1dGhvcl9pZGVudCk7CisJfQorCWlmIChmbGFncyAmIFNVTU1BUllfU0hPV19BVVRIT1JfREFURSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGRhdGUgPSBTVFJCVUZfSU5JVDsKKworCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJWFkIiwgJmRhdGUsICZwY3R4KTsKKwkJc3RyYnVmX2FkZHN0cigmZm9ybWF0LCAiXG4gRGF0ZTogIik7CisJCXN0cmJ1Zl9hZGRidWZfcGVyY2VudHF1b3RlKCZmb3JtYXQsICZkYXRlKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmRhdGUpOworCX0KKwlpZiAoIWNvbW1pdHRlcl9pZGVudF9zdWZmaWNpZW50bHlfZ2l2ZW4oKSkgeworCQlzdHJidWZfYWRkc3RyKCZmb3JtYXQsICJcbiBDb21taXR0ZXI6ICIpOworCQlzdHJidWZfYWRkYnVmX3BlcmNlbnRxdW90ZSgmZm9ybWF0LCAmY29tbWl0dGVyX2lkZW50KTsKKwkJaWYgKGFkdmljZV9pbXBsaWNpdF9pZGVudGl0eSkgeworCQkJc3RyYnVmX2FkZGNoKCZmb3JtYXQsICdcbicpOworCQkJc3RyYnVmX2FkZHN0cigmZm9ybWF0LCBpbXBsaWNpdF9pZGVudF9hZHZpY2UoKSk7CisJCX0KKwl9CisJc3RyYnVmX3JlbGVhc2UoJmF1dGhvcl9pZGVudCk7CisJc3RyYnVmX3JlbGVhc2UoJmNvbW1pdHRlcl9pZGVudCk7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHIsICZyZXYsIHByZWZpeCk7CisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXYsIE5VTEwpOworCisJcmV2LmRpZmYgPSAxOworCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPQorCQlESUZGX0ZPUk1BVF9TSE9SVFNUQVQgfCBESUZGX0ZPUk1BVF9TVU1NQVJZOworCisJcmV2LnZlcmJvc2VfaGVhZGVyID0gMTsKKwlyZXYuc2hvd19yb290X2RpZmYgPSAxOworCWdldF9jb21taXRfZm9ybWF0KGZvcm1hdC5idWYsICZyZXYpOworCXJldi5hbHdheXNfc2hvd19oZWFkZXIgPSAwOworCXJldi5kaWZmb3B0LmRldGVjdF9yZW5hbWUgPSBESUZGX0RFVEVDVF9SRU5BTUU7CisJcmV2LmRpZmZvcHQuYnJlYWtfb3B0ID0gMDsKKwlkaWZmX3NldHVwX2RvbmUoJnJldi5kaWZmb3B0KTsKKworCWhlYWQgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCBOVUxMLCBOVUxMKTsKKwlpZiAoIWhlYWQpCisJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gcmVzb2x2ZSBIRUFEIGFmdGVyIGNyZWF0aW5nIGNvbW1pdCIpKTsKKwlpZiAoIXN0cmNtcChoZWFkLCAiSEVBRCIpKQorCQloZWFkID0gXygiZGV0YWNoZWQgSEVBRCIpOworCWVsc2UKKwkJc2tpcF9wcmVmaXgoaGVhZCwgInJlZnMvaGVhZHMvIiwgJmhlYWQpOworCXByaW50ZigiWyVzJXMgIiwgaGVhZCwgKGZsYWdzICYgU1VNTUFSWV9JTklUSUFMX0NPTU1JVCkgPworCQkJCQkJXygiIChyb290LWNvbW1pdCkiKSA6ICIiKTsKKworCWlmICghbG9nX3RyZWVfY29tbWl0KCZyZXYsIGNvbW1pdCkpIHsKKwkJcmV2LmFsd2F5c19zaG93X2hlYWRlciA9IDE7CisJCXJldi51c2VfdGVybWluYXRvciA9IDE7CisJCWxvZ190cmVlX2NvbW1pdCgmcmV2LCBjb21taXQpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZmb3JtYXQpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2hlYWQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXQgKipoZWFkKQoreworCXN0cnVjdCBjb21taXQgKmN1cnJlbnRfaGVhZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCWlmIChnZXRfb2lkKCJIRUFEIiwgJm9pZCkpIHsKKwkJY3VycmVudF9oZWFkID0gTlVMTDsKKwl9IGVsc2UgeworCQljdXJyZW50X2hlYWQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShyLCAmb2lkKTsKKwkJaWYgKCFjdXJyZW50X2hlYWQpCisJCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIEhFQUQiKSk7CisJCWlmICghb2lkZXEoJm9pZCwgJmN1cnJlbnRfaGVhZC0+b2JqZWN0Lm9pZCkpIHsKKwkJCXdhcm5pbmcoXygiSEVBRCAlcyBpcyBub3QgYSBjb21taXQhIiksCisJCQkJb2lkX3RvX2hleCgmb2lkKSk7CisJCX0KKwkJaWYgKHBhcnNlX2NvbW1pdChjdXJyZW50X2hlYWQpKQorCQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIpKTsKKwl9CisJKmhlYWQgPSBjdXJyZW50X2hlYWQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRyeSB0byBjb21taXQgd2l0aG91dCBmb3JraW5nICdnaXQgY29tbWl0Jy4gSW4gc29tZSBjYXNlcyB3ZSBuZWVkCisgKiB0byBydW4gJ2dpdCBjb21taXQnIHRvIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZQorICoKKyAqIFJldHVybnM6CisgKiAgLTEgLSBlcnJvciB1bmFibGUgdG8gY29tbWl0CisgKiAgIDAgLSBzdWNjZXNzCisgKiAgIDEgLSBydW4gJ2dpdCBjb21taXQnCisgKi8KK3N0YXRpYyBpbnQgdHJ5X3RvX2NvbW1pdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSBzdHJ1Y3Qgc3RyYnVmICptc2csIGNvbnN0IGNoYXIgKmF1dGhvciwKKwkJCSBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIHVuc2lnbmVkIGludCBmbGFncywKKwkJCSBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IG9iamVjdF9pZCB0cmVlOworCXN0cnVjdCBjb21taXQgKmN1cnJlbnRfaGVhZCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBjb21taXRfbXNnID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqYW1lbmRfYXV0aG9yID0gTlVMTDsKKwljb25zdCBjaGFyICpob29rX2NvbW1pdCA9IE5VTEw7CisJZW51bSBjb21taXRfbXNnX2NsZWFudXBfbW9kZSBjbGVhbnVwOworCWludCByZXMgPSAwOworCisJaWYgKHBhcnNlX2hlYWQociwgJmN1cnJlbnRfaGVhZCkpCisJCXJldHVybiAtMTsKKworCWlmIChmbGFncyAmIEFNRU5EX01TRykgeworCQljb25zdCBjaGFyICpleGNsdWRlX2dwZ3NpZ1tdID0geyAiZ3Bnc2lnIiwgImdwZ3NpZy1zaGEyNTYiLCBOVUxMIH07CisJCWNvbnN0IGNoYXIgKm91dF9lbmMgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOworCQljb25zdCBjaGFyICptZXNzYWdlID0gbG9nbXNnX3JlZW5jb2RlKGN1cnJlbnRfaGVhZCwgTlVMTCwKKwkJCQkJCSAgICAgIG91dF9lbmMpOworCisJCWlmICghbXNnKSB7CisJCQljb25zdCBjaGFyICpvcmlnX21lc3NhZ2UgPSBOVUxMOworCisJCQlmaW5kX2NvbW1pdF9zdWJqZWN0KG1lc3NhZ2UsICZvcmlnX21lc3NhZ2UpOworCQkJbXNnID0gJmNvbW1pdF9tc2c7CisJCQlzdHJidWZfYWRkc3RyKG1zZywgb3JpZ19tZXNzYWdlKTsKKwkJCWhvb2tfY29tbWl0ID0gIkhFQUQiOworCQl9CisJCWF1dGhvciA9IGFtZW5kX2F1dGhvciA9IGdldF9hdXRob3IobWVzc2FnZSk7CisJCXVudXNlX2NvbW1pdF9idWZmZXIoY3VycmVudF9oZWFkLCBtZXNzYWdlKTsKKwkJaWYgKCFhdXRob3IpIHsKKwkJCXJlcyA9IGVycm9yKF8oInVuYWJsZSB0byBwYXJzZSBjb21taXQgYXV0aG9yIikpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcGFyZW50cyA9IGNvcHlfY29tbWl0X2xpc3QoY3VycmVudF9oZWFkLT5wYXJlbnRzKTsKKwkJZXh0cmEgPSByZWFkX2NvbW1pdF9leHRyYV9oZWFkZXJzKGN1cnJlbnRfaGVhZCwgZXhjbHVkZV9ncGdzaWcpOworCX0gZWxzZSBpZiAoY3VycmVudF9oZWFkICYmCisJCSAgICghKGZsYWdzICYgQ1JFQVRFX1JPT1RfQ09NTUlUKSB8fCAoZmxhZ3MgJiBBTUVORF9NU0cpKSkgeworCQljb21taXRfbGlzdF9pbnNlcnQoY3VycmVudF9oZWFkLCAmcGFyZW50cyk7CisJfQorCisJaWYgKHdyaXRlX2luZGV4X2FzX3RyZWUoJnRyZWUsIHItPmluZGV4LCByLT5pbmRleF9maWxlLCAwLCBOVUxMKSkgeworCQlyZXMgPSBlcnJvcihfKCJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIikpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIShmbGFncyAmIEFMTE9XX0VNUFRZKSkgeworCQlzdHJ1Y3QgY29tbWl0ICpmaXJzdF9wYXJlbnQgPSBjdXJyZW50X2hlYWQ7CisKKwkJaWYgKGZsYWdzICYgQU1FTkRfTVNHKSB7CisJCQlpZiAoY3VycmVudF9oZWFkLT5wYXJlbnRzKSB7CisJCQkJZmlyc3RfcGFyZW50ID0gY3VycmVudF9oZWFkLT5wYXJlbnRzLT5pdGVtOworCQkJCWlmIChyZXBvX3BhcnNlX2NvbW1pdChyLCBmaXJzdF9wYXJlbnQpKSB7CisJCQkJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIpKTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlmaXJzdF9wYXJlbnQgPSBOVUxMOworCQkJfQorCQl9CisJCWlmIChvaWRlcShmaXJzdF9wYXJlbnQKKwkJCSAgPyBnZXRfY29tbWl0X3RyZWVfb2lkKGZpcnN0X3BhcmVudCkKKwkJCSAgOiB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlLAorCQkJICAmdHJlZSkpIHsKKwkJCXJlcyA9IDE7IC8qIHJ1biAnZ2l0IGNvbW1pdCcgdG8gZGlzcGxheSBlcnJvciBtZXNzYWdlICovCisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChmaW5kX2hvb2soInByZXBhcmUtY29tbWl0LW1zZyIpKSB7CisJCXJlcyA9IHJ1bl9wcmVwYXJlX2NvbW1pdF9tc2dfaG9vayhyLCBtc2csIGhvb2tfY29tbWl0KTsKKwkJaWYgKHJlcykKKwkJCWdvdG8gb3V0OworCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmY29tbWl0X21zZywgZ2l0X3BhdGhfY29tbWl0X2VkaXRtc2coKSwKKwkJCQkgICAgIDIwNDgpIDwgMCkgeworCQkJcmVzID0gZXJyb3JfZXJybm8oXygidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgIgorCQkJCQkgICAgICAiZnJvbSAnJXMnIiksCisJCQkJCSAgICBnaXRfcGF0aF9jb21taXRfZWRpdG1zZygpKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCW1zZyA9ICZjb21taXRfbXNnOworCX0KKworCWlmIChmbGFncyAmIENMRUFOVVBfTVNHKQorCQljbGVhbnVwID0gQ09NTUlUX01TR19DTEVBTlVQX0FMTDsKKwllbHNlIGlmICgob3B0cy0+c2lnbm9mZiB8fCBvcHRzLT5yZWNvcmRfb3JpZ2luKSAmJgorCQkgIW9wdHMtPmV4cGxpY2l0X2NsZWFudXApCisJCWNsZWFudXAgPSBDT01NSVRfTVNHX0NMRUFOVVBfU1BBQ0U7CisJZWxzZQorCQljbGVhbnVwID0gb3B0cy0+ZGVmYXVsdF9tc2dfY2xlYW51cDsKKworCWlmIChjbGVhbnVwICE9IENPTU1JVF9NU0dfQ0xFQU5VUF9OT05FKQorCQlzdHJidWZfc3RyaXBzcGFjZShtc2csIGNsZWFudXAgPT0gQ09NTUlUX01TR19DTEVBTlVQX0FMTCk7CisJaWYgKChmbGFncyAmIEVESVRfTVNHKSAmJiBtZXNzYWdlX2lzX2VtcHR5KG1zZywgY2xlYW51cCkpIHsKKwkJcmVzID0gMTsgLyogcnVuICdnaXQgY29tbWl0JyB0byBkaXNwbGF5IGVycm9yIG1lc3NhZ2UgKi8KKwkJZ290byBvdXQ7CisJfQorCisJcmVzZXRfaWRlbnRfZGF0ZSgpOworCisJaWYgKGNvbW1pdF90cmVlX2V4dGVuZGVkKG1zZy0+YnVmLCBtc2ctPmxlbiwgJnRyZWUsIHBhcmVudHMsCisJCQkJIG9pZCwgYXV0aG9yLCBvcHRzLT5ncGdfc2lnbiwgZXh0cmEpKSB7CisJCXJlcyA9IGVycm9yKF8oImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IikpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodXBkYXRlX2hlYWRfd2l0aF9yZWZsb2coY3VycmVudF9oZWFkLCBvaWQsCisJCQkJICAgIGdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKSwgbXNnLCAmZXJyKSkgeworCQlyZXMgPSBlcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJZ290byBvdXQ7CisJfQorCisJcnVuX2NvbW1pdF9ob29rKDAsIHItPmluZGV4X2ZpbGUsICJwb3N0LWNvbW1pdCIsIE5VTEwpOworCWlmIChmbGFncyAmIEFNRU5EX01TRykKKwkJY29tbWl0X3Bvc3RfcmV3cml0ZShyLCBjdXJyZW50X2hlYWQsIG9pZCk7CisKK291dDoKKwlmcmVlX2NvbW1pdF9leHRyYV9oZWFkZXJzKGV4dHJhKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlzdHJidWZfcmVsZWFzZSgmY29tbWl0X21zZyk7CisJZnJlZShhbWVuZF9hdXRob3IpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB3cml0ZV9yZWJhc2VfaGVhZChzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaWYgKHVwZGF0ZV9yZWYoInJlYmFzZSIsICJSRUJBU0VfSEVBRCIsIG9pZCwKKwkJICAgICAgIE5VTEwsIFJFRl9OT19ERVJFRiwgVVBEQVRFX1JFRlNfTVNHX09OX0VSUikpCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgdXBkYXRlICVzIiksICJSRUJBU0VfSEVBRCIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG9fY29tbWl0KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICAgIGNvbnN0IGNoYXIgKm1zZ19maWxlLCBjb25zdCBjaGFyICphdXRob3IsCisJCSAgICAgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCSAgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWludCByZXMgPSAxOworCisJaWYgKCEoZmxhZ3MgJiBFRElUX01TRykgJiYgIShmbGFncyAmIFZFUklGWV9NU0cpKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKG1zZ19maWxlICYmIHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBtc2dfZmlsZSwgMjA0OCkgPCAwKQorCQkJcmV0dXJuIGVycm9yX2Vycm5vKF8oInVuYWJsZSB0byByZWFkIGNvbW1pdCBtZXNzYWdlICIKKwkJCQkJICAgICAiZnJvbSAnJXMnIiksCisJCQkJCSAgIG1zZ19maWxlKTsKKworCQlyZXMgPSB0cnlfdG9fY29tbWl0KHIsIG1zZ19maWxlID8gJnNiIDogTlVMTCwKKwkJCQkgICAgYXV0aG9yLCBvcHRzLCBmbGFncywgJm9pZCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCWlmICghcmVzKSB7CisJCQl1bmxpbmsoZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZChyKSk7CisJCQl1bmxpbmsoZ2l0X3BhdGhfbWVyZ2VfbXNnKHIpKTsKKwkJCWlmICghaXNfcmViYXNlX2kob3B0cykpCisJCQkJcHJpbnRfY29tbWl0X3N1bW1hcnkociwgTlVMTCwgJm9pZCwKKwkJCQkJCVNVTU1BUllfU0hPV19BVVRIT1JfREFURSk7CisJCQlyZXR1cm4gcmVzOworCQl9CisJfQorCWlmIChyZXMgPT0gMSkgeworCQlpZiAoaXNfcmViYXNlX2kob3B0cykgJiYgb2lkKQorCQkJaWYgKHdyaXRlX3JlYmFzZV9oZWFkKG9pZCkpCisJCQkgICAgcmV0dXJuIC0xOworCQlyZXR1cm4gcnVuX2dpdF9jb21taXQociwgbXNnX2ZpbGUsIG9wdHMsIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGlzX29yaWdpbmFsX2NvbW1pdF9lbXB0eShzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqcHRyZWVfb2lkOworCisJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIGNvbW1pdCAlcyIpLAorCQkJICAgICBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwlpZiAoY29tbWl0LT5wYXJlbnRzKSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IGNvbW1pdC0+cGFyZW50cy0+aXRlbTsKKwkJaWYgKHBhcnNlX2NvbW1pdChwYXJlbnQpKQorCQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIiksCisJCQkJb2lkX3RvX2hleCgmcGFyZW50LT5vYmplY3Qub2lkKSk7CisJCXB0cmVlX29pZCA9IGdldF9jb21taXRfdHJlZV9vaWQocGFyZW50KTsKKwl9IGVsc2UgeworCQlwdHJlZV9vaWQgPSB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlOyAvKiBjb21taXQgaXMgcm9vdCAqLworCX0KKworCXJldHVybiBvaWRlcShwdHJlZV9vaWQsIGdldF9jb21taXRfdHJlZV9vaWQoY29tbWl0KSk7Cit9CisKKy8qCisgKiBTaG91bGQgZW1wdHkgY29tbWl0cyBiZSBhbGxvd2VkPyAgUmV0dXJuIHN0YXR1czoKKyAqICAgIDwwOiBFcnJvciBpbiBpc19pbmRleF91bmNoYW5nZWQocikgb3IgaXNfb3JpZ2luYWxfY29tbWl0X2VtcHR5KGNvbW1pdCkKKyAqICAgICAwOiBIYWx0IG9uIGVtcHR5IGNvbW1pdAorICogICAgIDE6IEFsbG93IGVtcHR5IGNvbW1pdAorICogICAgIDI6IERyb3AgZW1wdHkgY29tbWl0CisgKi8KK3N0YXRpYyBpbnQgYWxsb3dfZW1wdHkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICAgICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsCisJCSAgICAgICBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaW50IGluZGV4X3VuY2hhbmdlZCwgb3JpZ2luYWxseV9lbXB0eTsKKworCS8qCisJICogRm91ciBjYXNlczoKKwkgKgorCSAqICgxKSB3ZSBkbyBub3QgYWxsb3cgZW1wdHkgYXQgYWxsIGFuZCBlcnJvciBvdXQuCisJICoKKwkgKiAoMikgd2UgYWxsb3cgb25lcyB0aGF0IHdlcmUgaW5pdGlhbGx5IGVtcHR5LCBhbmQKKwkgKiAgICAganVzdCBkcm9wIHRoZSBvbmVzIHRoYXQgYmVjb21lIGVtcHR5CisJICoKKwkgKiAoMykgd2UgYWxsb3cgb25lcyB0aGF0IHdlcmUgaW5pdGlhbGx5IGVtcHR5LCBidXQKKwkgKiAgICAgaGFsdCBmb3IgdGhlIG9uZXMgdGhhdCBiZWNvbWUgZW1wdHk7CisJICoKKwkgKiAoNCkgd2UgYWxsb3cgYm90aC4KKwkgKi8KKwlpZiAoIW9wdHMtPmFsbG93X2VtcHR5KQorCQlyZXR1cm4gMDsgLyogbGV0ICJnaXQgY29tbWl0IiBiYXJmIGFzIG5lY2Vzc2FyeSAqLworCisJaW5kZXhfdW5jaGFuZ2VkID0gaXNfaW5kZXhfdW5jaGFuZ2VkKHIpOworCWlmIChpbmRleF91bmNoYW5nZWQgPCAwKQorCQlyZXR1cm4gaW5kZXhfdW5jaGFuZ2VkOworCWlmICghaW5kZXhfdW5jaGFuZ2VkKQorCQlyZXR1cm4gMDsgLyogd2UgZG8gbm90IGhhdmUgdG8gc2F5IC0tYWxsb3ctZW1wdHkgKi8KKworCWlmIChvcHRzLT5rZWVwX3JlZHVuZGFudF9jb21taXRzKQorCQlyZXR1cm4gMTsKKworCW9yaWdpbmFsbHlfZW1wdHkgPSBpc19vcmlnaW5hbF9jb21taXRfZW1wdHkoY29tbWl0KTsKKwlpZiAob3JpZ2luYWxseV9lbXB0eSA8IDApCisJCXJldHVybiBvcmlnaW5hbGx5X2VtcHR5OworCWlmIChvcmlnaW5hbGx5X2VtcHR5KQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChvcHRzLT5kcm9wX3JlZHVuZGFudF9jb21taXRzKQorCQlyZXR1cm4gMjsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHsKKwljaGFyIGM7CisJY29uc3QgY2hhciAqc3RyOworfSB0b2RvX2NvbW1hbmRfaW5mb1tdID0geworCXsgJ3AnLCAicGljayIgfSwKKwl7IDAsICAgInJldmVydCIgfSwKKwl7ICdlJywgImVkaXQiIH0sCisJeyAncicsICJyZXdvcmQiIH0sCisJeyAnZicsICJmaXh1cCIgfSwKKwl7ICdzJywgInNxdWFzaCIgfSwKKwl7ICd4JywgImV4ZWMiIH0sCisJeyAnYicsICJicmVhayIgfSwKKwl7ICdsJywgImxhYmVsIiB9LAorCXsgJ3QnLCAicmVzZXQiIH0sCisJeyAnbScsICJtZXJnZSIgfSwKKwl7IDAsICAgIm5vb3AiIH0sCisJeyAnZCcsICJkcm9wIiB9LAorCXsgMCwgICBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb21tYW5kX3RvX3N0cmluZyhjb25zdCBlbnVtIHRvZG9fY29tbWFuZCBjb21tYW5kKQoreworCWlmIChjb21tYW5kIDwgVE9ET19DT01NRU5UKQorCQlyZXR1cm4gdG9kb19jb21tYW5kX2luZm9bY29tbWFuZF0uc3RyOworCWRpZShfKCJ1bmtub3duIGNvbW1hbmQ6ICVkIiksIGNvbW1hbmQpOworfQorCitzdGF0aWMgY2hhciBjb21tYW5kX3RvX2NoYXIoY29uc3QgZW51bSB0b2RvX2NvbW1hbmQgY29tbWFuZCkKK3sKKwlpZiAoY29tbWFuZCA8IFRPRE9fQ09NTUVOVCkKKwkJcmV0dXJuIHRvZG9fY29tbWFuZF9pbmZvW2NvbW1hbmRdLmM7CisJcmV0dXJuIGNvbW1lbnRfbGluZV9jaGFyOworfQorCitzdGF0aWMgaW50IGlzX25vb3AoY29uc3QgZW51bSB0b2RvX2NvbW1hbmQgY29tbWFuZCkKK3sKKwlyZXR1cm4gVE9ET19OT09QIDw9IGNvbW1hbmQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfZml4dXAoZW51bSB0b2RvX2NvbW1hbmQgY29tbWFuZCkKK3sKKwlyZXR1cm4gY29tbWFuZCA9PSBUT0RPX0ZJWFVQIHx8IGNvbW1hbmQgPT0gVE9ET19TUVVBU0g7Cit9CisKKy8qIERvZXMgdGhpcyBjb21tYW5kIGNyZWF0ZSBhIChub24tbWVyZ2UpIGNvbW1pdD8gKi8KK3N0YXRpYyBpbnQgaXNfcGlja19vcl9zaW1pbGFyKGVudW0gdG9kb19jb21tYW5kIGNvbW1hbmQpCit7CisJc3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBUT0RPX1BJQ0s6CisJY2FzZSBUT0RPX1JFVkVSVDoKKwljYXNlIFRPRE9fRURJVDoKKwljYXNlIFRPRE9fUkVXT1JEOgorCWNhc2UgVE9ET19GSVhVUDoKKwljYXNlIFRPRE9fU1FVQVNIOgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX3NxdWFzaF9tZXNzYWdlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgIGVudW0gdG9kb19jb21tYW5kIGNvbW1hbmQsCisJCQkJICBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmVzOworCWNvbnN0IGNoYXIgKm1lc3NhZ2UsICpib2R5OworCWNvbnN0IGNoYXIgKmVuY29kaW5nID0gZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKKworCWlmIChvcHRzLT5jdXJyZW50X2ZpeHVwX2NvdW50ID4gMCkgeworCQlzdHJ1Y3Qgc3RyYnVmIGhlYWRlciA9IFNUUkJVRl9JTklUOworCQljaGFyICplb2w7CisKKwkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmJ1ZiwgcmViYXNlX3BhdGhfc3F1YXNoX21zZygpLCA5KSA8PSAwKQorCQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCByZWFkICclcyciKSwKKwkJCQlyZWJhc2VfcGF0aF9zcXVhc2hfbXNnKCkpOworCisJCWVvbCA9IGJ1Zi5idWZbMF0gIT0gY29tbWVudF9saW5lX2NoYXIgPworCQkJYnVmLmJ1ZiA6IHN0cmNocm51bChidWYuYnVmLCAnXG4nKTsKKworCQlzdHJidWZfYWRkZigmaGVhZGVyLCAiJWMgIiwgY29tbWVudF9saW5lX2NoYXIpOworCQlzdHJidWZfYWRkZigmaGVhZGVyLCBfKCJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJWQgY29tbWl0cy4iKSwKKwkJCSAgICBvcHRzLT5jdXJyZW50X2ZpeHVwX2NvdW50ICsgMik7CisJCXN0cmJ1Zl9zcGxpY2UoJmJ1ZiwgMCwgZW9sIC0gYnVmLmJ1ZiwgaGVhZGVyLmJ1ZiwgaGVhZGVyLmxlbik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkZXIpOworCX0gZWxzZSB7CisJCXN0cnVjdCBvYmplY3RfaWQgaGVhZDsKKwkJc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQ7CisJCWNvbnN0IGNoYXIgKmhlYWRfbWVzc2FnZSwgKmJvZHk7CisKKwkJaWYgKGdldF9vaWQoIkhFQUQiLCAmaGVhZCkpCisJCQlyZXR1cm4gZXJyb3IoXygibmVlZCBhIEhFQUQgdG8gZml4dXAiKSk7CisJCWlmICghKGhlYWRfY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UociwgJmhlYWQpKSkKKwkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCBIRUFEIikpOworCQlpZiAoIShoZWFkX21lc3NhZ2UgPSBsb2dtc2dfcmVlbmNvZGUoaGVhZF9jb21taXQsIE5VTEwsIGVuY29kaW5nKSkpCisJCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJlYWQgSEVBRCdzIGNvbW1pdCBtZXNzYWdlIikpOworCisJCWZpbmRfY29tbWl0X3N1YmplY3QoaGVhZF9tZXNzYWdlLCAmYm9keSk7CisJCWlmICh3cml0ZV9tZXNzYWdlKGJvZHksIHN0cmxlbihib2R5KSwKKwkJCQkgIHJlYmFzZV9wYXRoX2ZpeHVwX21zZygpLCAwKSkgeworCQkJdW51c2VfY29tbWl0X2J1ZmZlcihoZWFkX2NvbW1pdCwgaGVhZF9tZXNzYWdlKTsKKwkJCXJldHVybiBlcnJvcihfKCJjYW5ub3Qgd3JpdGUgJyVzJyIpLAorCQkJCSAgICAgcmViYXNlX3BhdGhfZml4dXBfbXNnKCkpOworCQl9CisKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVjICIsIGNvbW1lbnRfbGluZV9jaGFyKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgXygiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICVkIGNvbW1pdHMuIiksIDIpOworCQlzdHJidWZfYWRkZigmYnVmLCAiXG4lYyAiLCBjb21tZW50X2xpbmVfY2hhcik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgXygiVGhpcyBpcyB0aGUgMXN0IGNvbW1pdCBtZXNzYWdlOiIpKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAiXG5cbiIpOworCQlzdHJidWZfYWRkc3RyKCZidWYsIGJvZHkpOworCisJCXVudXNlX2NvbW1pdF9idWZmZXIoaGVhZF9jb21taXQsIGhlYWRfbWVzc2FnZSk7CisJfQorCisJaWYgKCEobWVzc2FnZSA9IGxvZ21zZ19yZWVuY29kZShjb21taXQsIE5VTEwsIGVuY29kaW5nKSkpCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZSBvZiAlcyIpLAorCQkJICAgICBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwlmaW5kX2NvbW1pdF9zdWJqZWN0KG1lc3NhZ2UsICZib2R5KTsKKworCWlmIChjb21tYW5kID09IFRPRE9fU1FVQVNIKSB7CisJCXVubGluayhyZWJhc2VfcGF0aF9maXh1cF9tc2coKSk7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJcbiVjICIsIGNvbW1lbnRfbGluZV9jaGFyKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgXygiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyVkOiIpLAorCQkJICAgICsrb3B0cy0+Y3VycmVudF9maXh1cF9jb3VudCArIDEpOworCQlzdHJidWZfYWRkc3RyKCZidWYsICJcblxuIik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgYm9keSk7CisJfSBlbHNlIGlmIChjb21tYW5kID09IFRPRE9fRklYVVApIHsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIlxuJWMgIiwgY29tbWVudF9saW5lX2NoYXIpOworCQlzdHJidWZfYWRkZigmYnVmLCBfKCJUaGUgY29tbWl0IG1lc3NhZ2UgIyVkIHdpbGwgYmUgc2tpcHBlZDoiKSwKKwkJCSAgICArK29wdHMtPmN1cnJlbnRfZml4dXBfY291bnQgKyAxKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAiXG5cbiIpOworCQlzdHJidWZfYWRkX2NvbW1lbnRlZF9saW5lcygmYnVmLCBib2R5LCBzdHJsZW4oYm9keSkpOworCX0gZWxzZQorCQlyZXR1cm4gZXJyb3IoXygidW5rbm93biBjb21tYW5kOiAlZCIpLCBjb21tYW5kKTsKKwl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgbWVzc2FnZSk7CisKKwlyZXMgPSB3cml0ZV9tZXNzYWdlKGJ1Zi5idWYsIGJ1Zi5sZW4sIHJlYmFzZV9wYXRoX3NxdWFzaF9tc2coKSwgMCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlpZiAoIXJlcykgeworCQlzdHJidWZfYWRkZigmb3B0cy0+Y3VycmVudF9maXh1cHMsICIlcyVzICVzIiwKKwkJCSAgICBvcHRzLT5jdXJyZW50X2ZpeHVwcy5sZW4gPyAiXG4iIDogIiIsCisJCQkgICAgY29tbWFuZF90b19zdHJpbmcoY29tbWFuZCksCisJCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCXJlcyA9IHdyaXRlX21lc3NhZ2Uob3B0cy0+Y3VycmVudF9maXh1cHMuYnVmLAorCQkJCSAgICBvcHRzLT5jdXJyZW50X2ZpeHVwcy5sZW4sCisJCQkJICAgIHJlYmFzZV9wYXRoX2N1cnJlbnRfZml4dXBzKCksIDApOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoX3Jld3JpdHRlbl9wZW5kaW5nKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG5ld29pZDsKKwlGSUxFICpvdXQ7CisKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCByZWJhc2VfcGF0aF9yZXdyaXR0ZW5fcGVuZGluZygpLCAoR0lUX01BWF9IRVhTWiArIDEpICogMikgPiAwICYmCisJICAgICFnZXRfb2lkKCJIRUFEIiwgJm5ld29pZCkgJiYKKwkgICAgKG91dCA9IGZvcGVuX29yX3dhcm4ocmViYXNlX3BhdGhfcmV3cml0dGVuX2xpc3QoKSwgImEiKSkpIHsKKwkJY2hhciAqYm9sID0gYnVmLmJ1ZiwgKmVvbDsKKworCQl3aGlsZSAoKmJvbCkgeworCQkJZW9sID0gc3RyY2hybnVsKGJvbCwgJ1xuJyk7CisJCQlmcHJpbnRmKG91dCwgIiUuKnMgJXNcbiIsIChpbnQpKGVvbCAtIGJvbCksCisJCQkJCWJvbCwgb2lkX3RvX2hleCgmbmV3b2lkKSk7CisJCQlpZiAoISplb2wpCisJCQkJYnJlYWs7CisJCQlib2wgPSBlb2wgKyAxOworCQl9CisJCWZjbG9zZShvdXQpOworCQl1bmxpbmsocmViYXNlX3BhdGhfcmV3cml0dGVuX3BlbmRpbmcoKSk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdm9pZCByZWNvcmRfaW5fcmV3cml0dGVuKHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJZW51bSB0b2RvX2NvbW1hbmQgbmV4dF9jb21tYW5kKQoreworCUZJTEUgKm91dCA9IGZvcGVuX29yX3dhcm4ocmViYXNlX3BhdGhfcmV3cml0dGVuX3BlbmRpbmcoKSwgImEiKTsKKworCWlmICghb3V0KQorCQlyZXR1cm47CisKKwlmcHJpbnRmKG91dCwgIiVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOworCWZjbG9zZShvdXQpOworCisJaWYgKCFpc19maXh1cChuZXh0X2NvbW1hbmQpKQorCQlmbHVzaF9yZXdyaXR0ZW5fcGVuZGluZygpOworfQorCitzdGF0aWMgaW50IGRvX3BpY2tfY29tbWl0KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICBlbnVtIHRvZG9fY29tbWFuZCBjb21tYW5kLAorCQkJICBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywKKwkJCSAgaW50IGZpbmFsX2ZpeHVwLCBpbnQgKmNoZWNrX3RvZG8pCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gb3B0cy0+ZWRpdCA/IEVESVRfTVNHIDogMDsKKwljb25zdCBjaGFyICptc2dfZmlsZSA9IG9wdHMtPmVkaXQgPyBOVUxMIDogZ2l0X3BhdGhfbWVyZ2VfbXNnKHIpOworCXN0cnVjdCBvYmplY3RfaWQgaGVhZDsKKwlzdHJ1Y3QgY29tbWl0ICpiYXNlLCAqbmV4dCwgKnBhcmVudDsKKwljb25zdCBjaGFyICpiYXNlX2xhYmVsLCAqbmV4dF9sYWJlbDsKKwljaGFyICphdXRob3IgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbWVzc2FnZSBtc2cgPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZ2J1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXMsIHVuYm9ybiA9IDAsIHJld29yZCA9IDAsIGFsbG93LCBkcm9wX2NvbW1pdDsKKworCWlmIChvcHRzLT5ub19jb21taXQpIHsKKwkJLyoKKwkJICogV2UgZG8gbm90IGludGVuZCB0byBjb21taXQgaW1tZWRpYXRlbHkuICBXZSBqdXN0IHdhbnQgdG8KKwkJICogbWVyZ2UgdGhlIGRpZmZlcmVuY2VzIGluLCBzbyBsZXQncyBjb21wdXRlIHRoZSB0cmVlCisJCSAqIHRoYXQgcmVwcmVzZW50cyB0aGUgImN1cnJlbnQiIHN0YXRlIGZvciBtZXJnZS1yZWN1cnNpdmUKKwkJICogdG8gd29yayBvbi4KKwkJICovCisJCWlmICh3cml0ZV9pbmRleF9hc190cmVlKCZoZWFkLCByLT5pbmRleCwgci0+aW5kZXhfZmlsZSwgMCwgTlVMTCkpCisJCQlyZXR1cm4gZXJyb3IoXygieW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIpKTsKKwl9IGVsc2UgeworCQl1bmJvcm4gPSBnZXRfb2lkKCJIRUFEIiwgJmhlYWQpOworCQkvKiBEbyB3ZSB3YW50IHRvIGdlbmVyYXRlIGEgcm9vdCBjb21taXQ/ICovCisJCWlmIChpc19waWNrX29yX3NpbWlsYXIoY29tbWFuZCkgJiYgb3B0cy0+aGF2ZV9zcXVhc2hfb250byAmJgorCQkgICAgb2lkZXEoJmhlYWQsICZvcHRzLT5zcXVhc2hfb250bykpIHsKKwkJCWlmIChpc19maXh1cChjb21tYW5kKSkKKwkJCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IGZpeHVwIHJvb3QgY29tbWl0IikpOworCQkJZmxhZ3MgfD0gQ1JFQVRFX1JPT1RfQ09NTUlUOworCQkJdW5ib3JuID0gMTsKKwkJfSBlbHNlIGlmICh1bmJvcm4pCisJCQlvaWRjcHkoJmhlYWQsIHRoZV9oYXNoX2FsZ28tPmVtcHR5X3RyZWUpOworCQlpZiAoaW5kZXhfZGlmZmVyc19mcm9tKHIsIHVuYm9ybiA/IGVtcHR5X3RyZWVfb2lkX2hleCgpIDogIkhFQUQiLAorCQkJCSAgICAgICBOVUxMLCAwKSkKKwkJCXJldHVybiBlcnJvcl9kaXJ0eV9pbmRleChyLCBvcHRzKTsKKwl9CisJZGlzY2FyZF9pbmRleChyLT5pbmRleCk7CisKKwlpZiAoIWNvbW1pdC0+cGFyZW50cykKKwkJcGFyZW50ID0gTlVMTDsKKwllbHNlIGlmIChjb21taXQtPnBhcmVudHMtPm5leHQpIHsKKwkJLyogUmV2ZXJ0aW5nIG9yIGNoZXJyeS1waWNraW5nIGEgbWVyZ2UgY29tbWl0ICovCisJCWludCBjbnQ7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKworCQlpZiAoIW9wdHMtPm1haW5saW5lKQorCQkJcmV0dXJuIGVycm9yKF8oImNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIpLAorCQkJCW9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCisJCWZvciAoY250ID0gMSwgcCA9IGNvbW1pdC0+cGFyZW50czsKKwkJICAgICBjbnQgIT0gb3B0cy0+bWFpbmxpbmUgJiYgcDsKKwkJICAgICBjbnQrKykKKwkJCXAgPSBwLT5uZXh0OworCQlpZiAoY250ICE9IG9wdHMtPm1haW5saW5lIHx8ICFwKQorCQkJcmV0dXJuIGVycm9yKF8oImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIpLAorCQkJCW9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCksIG9wdHMtPm1haW5saW5lKTsKKwkJcGFyZW50ID0gcC0+aXRlbTsKKwl9IGVsc2UgaWYgKDEgPCBvcHRzLT5tYWlubGluZSkKKwkJLyoKKwkJICogIE5vbi1maXJzdCBwYXJlbnQgZXhwbGljaXRseSBzcGVjaWZpZWQgYXMgbWFpbmxpbmUgZm9yCisJCSAqICBub24tbWVyZ2UgY29tbWl0CisJCSAqLworCQlyZXR1cm4gZXJyb3IoXygiY29tbWl0ICVzIGRvZXMgbm90IGhhdmUgcGFyZW50ICVkIiksCisJCQkgICAgIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCksIG9wdHMtPm1haW5saW5lKTsKKwllbHNlCisJCXBhcmVudCA9IGNvbW1pdC0+cGFyZW50cy0+aXRlbTsKKworCWlmIChnZXRfbWVzc2FnZShjb21taXQsICZtc2cpICE9IDApCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIpLAorCQkJb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisKKwlpZiAob3B0cy0+YWxsb3dfZmYgJiYgIWlzX2ZpeHVwKGNvbW1hbmQpICYmCisJICAgICgocGFyZW50ICYmIG9pZGVxKCZwYXJlbnQtPm9iamVjdC5vaWQsICZoZWFkKSkgfHwKKwkgICAgICghcGFyZW50ICYmIHVuYm9ybikpKSB7CisJCWlmIChpc19yZWJhc2VfaShvcHRzKSkKKwkJCXdyaXRlX2F1dGhvcl9zY3JpcHQobXNnLm1lc3NhZ2UpOworCQlyZXMgPSBmYXN0X2ZvcndhcmRfdG8ociwgJmNvbW1pdC0+b2JqZWN0Lm9pZCwgJmhlYWQsIHVuYm9ybiwKKwkJCW9wdHMpOworCQlpZiAocmVzIHx8IGNvbW1hbmQgIT0gVE9ET19SRVdPUkQpCisJCQlnb3RvIGxlYXZlOworCQlyZXdvcmQgPSAxOworCQltc2dfZmlsZSA9IE5VTEw7CisJCWdvdG8gZmFzdF9mb3J3YXJkX2VkaXQ7CisJfQorCWlmIChwYXJlbnQgJiYgcGFyc2VfY29tbWl0KHBhcmVudCkgPCAwKQorCQkvKiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgYSAidG9kbyIgY29tbWFuZCBsaWtlCisJCSAgICJyZXZlcnQiIG9yICJwaWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEuICovCisJCXJldHVybiBlcnJvcihfKCIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiKSwKKwkJCWNvbW1hbmRfdG9fc3RyaW5nKGNvbW1hbmQpLAorCQkJb2lkX3RvX2hleCgmcGFyZW50LT5vYmplY3Qub2lkKSk7CisKKwkvKgorCSAqICJjb21taXQiIGlzIGFuIGV4aXN0aW5nIGNvbW1pdC4gIFdlIHdvdWxkIHdhbnQgdG8gYXBwbHkKKwkgKiB0aGUgZGlmZmVyZW5jZSBpdCBpbnRyb2R1Y2VzIHNpbmNlIGl0cyBmaXJzdCBwYXJlbnQgInByZXYiCisJICogb24gdG9wIG9mIHRoZSBjdXJyZW50IEhFQUQgaWYgd2UgYXJlIGNoZXJyeS1waWNrLiAgT3IgdGhlCisJICogcmV2ZXJzZSBvZiBpdCBpZiB3ZSBhcmUgcmV2ZXJ0LgorCSAqLworCisJaWYgKGNvbW1hbmQgPT0gVE9ET19SRVZFUlQpIHsKKwkJYmFzZSA9IGNvbW1pdDsKKwkJYmFzZV9sYWJlbCA9IG1zZy5sYWJlbDsKKwkJbmV4dCA9IHBhcmVudDsKKwkJbmV4dF9sYWJlbCA9IG1zZy5wYXJlbnRfbGFiZWw7CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgIlJldmVydCBcIiIpOworCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIG1zZy5zdWJqZWN0KTsKKwkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCAiXCJcblxuVGhpcyByZXZlcnRzIGNvbW1pdCAiKTsKKwkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKworCQlpZiAoY29tbWl0LT5wYXJlbnRzICYmIGNvbW1pdC0+cGFyZW50cy0+bmV4dCkgeworCQkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCAiLCByZXZlcnNpbmdcbmNoYW5nZXMgbWFkZSB0byAiKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1Ziwgb2lkX3RvX2hleCgmcGFyZW50LT5vYmplY3Qub2lkKSk7CisJCX0KKwkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCAiLlxuIik7CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqcDsKKworCQliYXNlID0gcGFyZW50OworCQliYXNlX2xhYmVsID0gbXNnLnBhcmVudF9sYWJlbDsKKwkJbmV4dCA9IGNvbW1pdDsKKwkJbmV4dF9sYWJlbCA9IG1zZy5sYWJlbDsKKworCQkvKiBBcHBlbmQgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSB0byBtc2didWYuICovCisJCWlmIChmaW5kX2NvbW1pdF9zdWJqZWN0KG1zZy5tZXNzYWdlLCAmcCkpCisJCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIHApOworCisJCWlmIChvcHRzLT5yZWNvcmRfb3JpZ2luKSB7CisJCQlzdHJidWZfY29tcGxldGVfbGluZSgmbXNnYnVmKTsKKwkJCWlmICghaGFzX2NvbmZvcm1pbmdfZm9vdGVyKCZtc2didWYsIE5VTEwsIDApKQorCQkJCXN0cmJ1Zl9hZGRjaCgmbXNnYnVmLCAnXG4nKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgY2hlcnJ5X3BpY2tlZF9wcmVmaXgpOworCQkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgIilcbiIpOworCQl9CisJCWlmICghaXNfZml4dXAoY29tbWFuZCkpCisJCQlhdXRob3IgPSBnZXRfYXV0aG9yKG1zZy5tZXNzYWdlKTsKKwl9CisKKwlpZiAoY29tbWFuZCA9PSBUT0RPX1JFV09SRCkKKwkJcmV3b3JkID0gMTsKKwllbHNlIGlmIChpc19maXh1cChjb21tYW5kKSkgeworCQlpZiAodXBkYXRlX3NxdWFzaF9tZXNzYWdlcyhyLCBjb21tYW5kLCBjb21taXQsIG9wdHMpKQorCQkJcmV0dXJuIC0xOworCQlmbGFncyB8PSBBTUVORF9NU0c7CisJCWlmICghZmluYWxfZml4dXApCisJCQltc2dfZmlsZSA9IHJlYmFzZV9wYXRoX3NxdWFzaF9tc2coKTsKKwkJZWxzZSBpZiAoZmlsZV9leGlzdHMocmViYXNlX3BhdGhfZml4dXBfbXNnKCkpKSB7CisJCQlmbGFncyB8PSBDTEVBTlVQX01TRzsKKwkJCW1zZ19maWxlID0gcmViYXNlX3BhdGhfZml4dXBfbXNnKCk7CisJCX0gZWxzZSB7CisJCQljb25zdCBjaGFyICpkZXN0ID0gZ2l0X3BhdGhfc3F1YXNoX21zZyhyKTsKKwkJCXVubGluayhkZXN0KTsKKwkJCWlmIChjb3B5X2ZpbGUoZGVzdCwgcmViYXNlX3BhdGhfc3F1YXNoX21zZygpLCAwNjY2KSkKKwkJCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJlbmFtZSAnJXMnIHRvICclcyciKSwKKwkJCQkJICAgICByZWJhc2VfcGF0aF9zcXVhc2hfbXNnKCksIGRlc3QpOworCQkJdW5saW5rKGdpdF9wYXRoX21lcmdlX21zZyhyKSk7CisJCQltc2dfZmlsZSA9IGRlc3Q7CisJCQlmbGFncyB8PSBFRElUX01TRzsKKwkJfQorCX0KKworCWlmIChvcHRzLT5zaWdub2ZmICYmICFpc19maXh1cChjb21tYW5kKSkKKwkJYXBwZW5kX3NpZ25vZmYoJm1zZ2J1ZiwgMCwgMCk7CisKKwlpZiAoaXNfcmViYXNlX2kob3B0cykgJiYgd3JpdGVfYXV0aG9yX3NjcmlwdChtc2cubWVzc2FnZSkgPCAwKQorCQlyZXMgPSAtMTsKKwllbHNlIGlmICghb3B0cy0+c3RyYXRlZ3kgfHwgIXN0cmNtcChvcHRzLT5zdHJhdGVneSwgInJlY3Vyc2l2ZSIpIHx8IGNvbW1hbmQgPT0gVE9ET19SRVZFUlQpIHsKKwkJcmVzID0gZG9fcmVjdXJzaXZlX21lcmdlKHIsIGJhc2UsIG5leHQsIGJhc2VfbGFiZWwsIG5leHRfbGFiZWwsCisJCQkJCSAmaGVhZCwgJm1zZ2J1Ziwgb3B0cyk7CisJCWlmIChyZXMgPCAwKQorCQkJZ290byBsZWF2ZTsKKworCQlyZXMgfD0gd3JpdGVfbWVzc2FnZShtc2didWYuYnVmLCBtc2didWYubGVuLAorCQkJCSAgICAgZ2l0X3BhdGhfbWVyZ2VfbXNnKHIpLCAwKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1vbiA9IE5VTEw7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlcyA9IE5VTEw7CisKKwkJcmVzID0gd3JpdGVfbWVzc2FnZShtc2didWYuYnVmLCBtc2didWYubGVuLAorCQkJCSAgICBnaXRfcGF0aF9tZXJnZV9tc2cociksIDApOworCisJCWNvbW1pdF9saXN0X2luc2VydChiYXNlLCAmY29tbW9uKTsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KG5leHQsICZyZW1vdGVzKTsKKwkJcmVzIHw9IHRyeV9tZXJnZV9jb21tYW5kKHIsIG9wdHMtPnN0cmF0ZWd5LAorCQkJCQkgb3B0cy0+eG9wdHNfbnIsIChjb25zdCBjaGFyICoqKW9wdHMtPnhvcHRzLAorCQkJCQljb21tb24sIG9pZF90b19oZXgoJmhlYWQpLCByZW1vdGVzKTsKKwkJZnJlZV9jb21taXRfbGlzdChjb21tb24pOworCQlmcmVlX2NvbW1pdF9saXN0KHJlbW90ZXMpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmbXNnYnVmKTsKKworCS8qCisJICogSWYgdGhlIG1lcmdlIHdhcyBjbGVhbiBvciBpZiBpdCBmYWlsZWQgZHVlIHRvIGNvbmZsaWN0LCB3ZSB3cml0ZQorCSAqIENIRVJSWV9QSUNLX0hFQUQgZm9yIHRoZSBzdWJzZXF1ZW50IGludm9jYXRpb24gb2YgY29tbWl0IHRvIHVzZS4KKwkgKiBIb3dldmVyLCBpZiB0aGUgbWVyZ2UgZGlkIG5vdCBldmVuIHN0YXJ0LCB0aGVuIHdlIGRvbid0IHdhbnQgdG8KKwkgKiB3cml0ZSBpdCBhdCBhbGwuCisJICovCisJaWYgKChjb21tYW5kID09IFRPRE9fUElDSyB8fCBjb21tYW5kID09IFRPRE9fUkVXT1JEIHx8CisJICAgICBjb21tYW5kID09IFRPRE9fRURJVCkgJiYgIW9wdHMtPm5vX2NvbW1pdCAmJgorCSAgICAocmVzID09IDAgfHwgcmVzID09IDEpICYmCisJICAgIHVwZGF0ZV9yZWYoTlVMTCwgIkNIRVJSWV9QSUNLX0hFQUQiLCAmY29tbWl0LT5vYmplY3Qub2lkLCBOVUxMLAorCQkgICAgICAgUkVGX05PX0RFUkVGLCBVUERBVEVfUkVGU19NU0dfT05fRVJSKSkKKwkJcmVzID0gLTE7CisJaWYgKGNvbW1hbmQgPT0gVE9ET19SRVZFUlQgJiYgKChvcHRzLT5ub19jb21taXQgJiYgcmVzID09IDApIHx8IHJlcyA9PSAxKSAmJgorCSAgICB1cGRhdGVfcmVmKE5VTEwsICJSRVZFUlRfSEVBRCIsICZjb21taXQtPm9iamVjdC5vaWQsIE5VTEwsCisJCSAgICAgICBSRUZfTk9fREVSRUYsIFVQREFURV9SRUZTX01TR19PTl9FUlIpKQorCQlyZXMgPSAtMTsKKworCWlmIChyZXMpIHsKKwkJZXJyb3IoY29tbWFuZCA9PSBUT0RPX1JFVkVSVAorCQkgICAgICA/IF8oImNvdWxkIG5vdCByZXZlcnQgJXMuLi4gJXMiKQorCQkgICAgICA6IF8oImNvdWxkIG5vdCBhcHBseSAlcy4uLiAlcyIpLAorCQkgICAgICBzaG9ydF9jb21taXRfbmFtZShjb21taXQpLCBtc2cuc3ViamVjdCk7CisJCXByaW50X2FkdmljZShyLCByZXMgPT0gMSwgb3B0cyk7CisJCXJlcG9fcmVyZXJlKHIsIG9wdHMtPmFsbG93X3JlcmVyZV9hdXRvKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlkcm9wX2NvbW1pdCA9IDA7CisJYWxsb3cgPSBhbGxvd19lbXB0eShyLCBvcHRzLCBjb21taXQpOworCWlmIChhbGxvdyA8IDApIHsKKwkJcmVzID0gYWxsb3c7CisJCWdvdG8gbGVhdmU7CisJfSBlbHNlIGlmIChhbGxvdyA9PSAxKSB7CisJCWZsYWdzIHw9IEFMTE9XX0VNUFRZOworCX0gZWxzZSBpZiAoYWxsb3cgPT0gMikgeworCQlkcm9wX2NvbW1pdCA9IDE7CisJCXVubGluayhnaXRfcGF0aF9jaGVycnlfcGlja19oZWFkKHIpKTsKKwkJdW5saW5rKGdpdF9wYXRoX21lcmdlX21zZyhyKSk7CisJCWZwcmludGYoc3RkZXJyLAorCQkJXygiZHJvcHBpbmcgJXMgJXMgLS0gcGF0Y2ggY29udGVudHMgYWxyZWFkeSB1cHN0cmVhbVxuIiksCisJCQlvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpLCBtc2cuc3ViamVjdCk7CisJfSAvKiBlbHNlIGFsbG93ID09IDAgYW5kIHRoZXJlJ3Mgbm90aGluZyBzcGVjaWFsIHRvIGRvICovCisJaWYgKCFvcHRzLT5ub19jb21taXQgJiYgIWRyb3BfY29tbWl0KSB7CisJCWlmIChhdXRob3IgfHwgY29tbWFuZCA9PSBUT0RPX1JFVkVSVCB8fCAoZmxhZ3MgJiBBTUVORF9NU0cpKQorCQkJcmVzID0gZG9fY29tbWl0KHIsIG1zZ19maWxlLCBhdXRob3IsIG9wdHMsIGZsYWdzLAorCQkJCQljb21taXQ/ICZjb21taXQtPm9iamVjdC5vaWQgOiBOVUxMKTsKKwkJZWxzZQorCQkJcmVzID0gZXJyb3IoXygidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCBhdXRob3IiKSk7CisJCSpjaGVja190b2RvID0gISEoZmxhZ3MgJiBFRElUX01TRyk7CisJCWlmICghcmVzICYmIHJld29yZCkgeworZmFzdF9mb3J3YXJkX2VkaXQ6CisJCQlyZXMgPSBydW5fZ2l0X2NvbW1pdChyLCBOVUxMLCBvcHRzLCBFRElUX01TRyB8CisJCQkJCSAgICAgVkVSSUZZX01TRyB8IEFNRU5EX01TRyB8CisJCQkJCSAgICAgKGZsYWdzICYgQUxMT1dfRU1QVFkpKTsKKwkJCSpjaGVja190b2RvID0gMTsKKwkJfQorCX0KKworCisJaWYgKCFyZXMgJiYgZmluYWxfZml4dXApIHsKKwkJdW5saW5rKHJlYmFzZV9wYXRoX2ZpeHVwX21zZygpKTsKKwkJdW5saW5rKHJlYmFzZV9wYXRoX3NxdWFzaF9tc2coKSk7CisJCXVubGluayhyZWJhc2VfcGF0aF9jdXJyZW50X2ZpeHVwcygpKTsKKwkJc3RyYnVmX3Jlc2V0KCZvcHRzLT5jdXJyZW50X2ZpeHVwcyk7CisJCW9wdHMtPmN1cnJlbnRfZml4dXBfY291bnQgPSAwOworCX0KKworbGVhdmU6CisJZnJlZV9tZXNzYWdlKGNvbW1pdCwgJm1zZyk7CisJZnJlZShhdXRob3IpOworCXVwZGF0ZV9hYm9ydF9zYWZldHlfZmlsZSgpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBwcmVwYXJlX3JldnMoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCS8qCisJICogcGlja2luZyAoYnV0IG5vdCByZXZlcnRpbmcpIHJhbmdlcyAoYnV0IG5vdCBpbmRpdmlkdWFsIHJldmlzaW9ucykKKwkgKiBzaG91bGQgYmUgZG9uZSBpbiByZXZlcnNlCisJICovCisJaWYgKG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUElDSyAmJiAhb3B0cy0+cmV2cy0+bm9fd2FsaykKKwkJb3B0cy0+cmV2cy0+cmV2ZXJzZSBePSAxOworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsayhvcHRzLT5yZXZzKSkKKwkJcmV0dXJuIGVycm9yKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9hbmRfcmVmcmVzaF9jYWNoZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlzdHJ1Y3QgbG9ja19maWxlIGluZGV4X2xvY2sgPSBMT0NLX0lOSVQ7CisJaW50IGluZGV4X2ZkID0gcmVwb19ob2xkX2xvY2tlZF9pbmRleChyLCAmaW5kZXhfbG9jaywgMCk7CisJaWYgKHJlcG9fcmVhZF9pbmRleChyKSA8IDApIHsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZpbmRleF9sb2NrKTsKKwkJcmV0dXJuIGVycm9yKF8oImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IiksCisJCQlfKGFjdGlvbl9uYW1lKG9wdHMpKSk7CisJfQorCXJlZnJlc2hfaW5kZXgoci0+aW5kZXgsIFJFRlJFU0hfUVVJRVR8UkVGUkVTSF9VTk1FUkdFRCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJaWYgKGluZGV4X2ZkID49IDApIHsKKwkJaWYgKHdyaXRlX2xvY2tlZF9pbmRleChyLT5pbmRleCwgJmluZGV4X2xvY2ssCisJCQkJICAgICAgIENPTU1JVF9MT0NLIHwgU0tJUF9JRl9VTkNIQU5HRUQpKSB7CisJCQlyZXR1cm4gZXJyb3IoXygiZ2l0ICVzOiBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXgiKSwKKwkJCQlfKGFjdGlvbl9uYW1lKG9wdHMpKSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK2VudW0gdG9kb19pdGVtX2ZsYWdzIHsKKwlUT0RPX0VESVRfTUVSR0VfTVNHID0gMQorfTsKKwordm9pZCB0b2RvX2xpc3RfcmVsZWFzZShzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QpCit7CisJc3RyYnVmX3JlbGVhc2UoJnRvZG9fbGlzdC0+YnVmKTsKKwlGUkVFX0FORF9OVUxMKHRvZG9fbGlzdC0+aXRlbXMpOworCXRvZG9fbGlzdC0+bnIgPSB0b2RvX2xpc3QtPmFsbG9jID0gMDsKK30KKworc3RhdGljIHN0cnVjdCB0b2RvX2l0ZW0gKmFwcGVuZF9uZXdfdG9kbyhzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QpCit7CisJQUxMT0NfR1JPVyh0b2RvX2xpc3QtPml0ZW1zLCB0b2RvX2xpc3QtPm5yICsgMSwgdG9kb19saXN0LT5hbGxvYyk7CisJdG9kb19saXN0LT50b3RhbF9ucisrOworCXJldHVybiB0b2RvX2xpc3QtPml0ZW1zICsgdG9kb19saXN0LT5ucisrOworfQorCitjb25zdCBjaGFyICp0b2RvX2l0ZW1fZ2V0X2FyZyhzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsCisJCQkgICAgICBzdHJ1Y3QgdG9kb19pdGVtICppdGVtKQoreworCXJldHVybiB0b2RvX2xpc3QtPmJ1Zi5idWYgKyBpdGVtLT5hcmdfb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGlzX2NvbW1hbmQoZW51bSB0b2RvX2NvbW1hbmQgY29tbWFuZCwgY29uc3QgY2hhciAqKmJvbCkKK3sKKwljb25zdCBjaGFyICpzdHIgPSB0b2RvX2NvbW1hbmRfaW5mb1tjb21tYW5kXS5zdHI7CisJY29uc3QgY2hhciBuaWNrID0gdG9kb19jb21tYW5kX2luZm9bY29tbWFuZF0uYzsKKwljb25zdCBjaGFyICpwID0gKmJvbCArIDE7CisKKwlyZXR1cm4gc2tpcF9wcmVmaXgoKmJvbCwgc3RyLCBib2wpIHx8CisJCSgobmljayAmJiAqKmJvbCA9PSBuaWNrKSAmJgorCQkgKCpwID09ICcgJyB8fCAqcCA9PSAnXHQnIHx8ICpwID09ICdcbicgfHwgKnAgPT0gJ1xyJyB8fCAhKnApICYmCisJCSAoKmJvbCA9IHApKTsKK30KKworc3RhdGljIGludCBwYXJzZV9pbnNuX2xpbmUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCB0b2RvX2l0ZW0gKml0ZW0sCisJCQkgICBjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKmJvbCwgY2hhciAqZW9sKQoreworCXN0cnVjdCBvYmplY3RfaWQgY29tbWl0X29pZDsKKwljaGFyICplbmRfb2Zfb2JqZWN0X25hbWU7CisJaW50IGksIHNhdmVkLCBzdGF0dXMsIHBhZGRpbmc7CisKKwlpdGVtLT5mbGFncyA9IDA7CisKKwkvKiBsZWZ0LXRyaW0gKi8KKwlib2wgKz0gc3Ryc3BuKGJvbCwgIiBcdCIpOworCisJaWYgKGJvbCA9PSBlb2wgfHwgKmJvbCA9PSAnXHInIHx8ICpib2wgPT0gY29tbWVudF9saW5lX2NoYXIpIHsKKwkJaXRlbS0+Y29tbWFuZCA9IFRPRE9fQ09NTUVOVDsKKwkJaXRlbS0+Y29tbWl0ID0gTlVMTDsKKwkJaXRlbS0+YXJnX29mZnNldCA9IGJvbCAtIGJ1ZjsKKwkJaXRlbS0+YXJnX2xlbiA9IGVvbCAtIGJvbDsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFRPRE9fQ09NTUVOVDsgaSsrKQorCQlpZiAoaXNfY29tbWFuZChpLCAmYm9sKSkgeworCQkJaXRlbS0+Y29tbWFuZCA9IGk7CisJCQlicmVhazsKKwkJfQorCWlmIChpID49IFRPRE9fQ09NTUVOVCkKKwkJcmV0dXJuIC0xOworCisJLyogRWF0IHVwIGV4dHJhIHNwYWNlcy8gdGFicyBiZWZvcmUgb2JqZWN0IG5hbWUgKi8KKwlwYWRkaW5nID0gc3Ryc3BuKGJvbCwgIiBcdCIpOworCWJvbCArPSBwYWRkaW5nOworCisJaWYgKGl0ZW0tPmNvbW1hbmQgPT0gVE9ET19OT09QIHx8IGl0ZW0tPmNvbW1hbmQgPT0gVE9ET19CUkVBSykgeworCQlpZiAoYm9sICE9IGVvbCkKKwkJCXJldHVybiBlcnJvcihfKCIlcyBkb2VzIG5vdCBhY2NlcHQgYXJndW1lbnRzOiAnJXMnIiksCisJCQkJICAgICBjb21tYW5kX3RvX3N0cmluZyhpdGVtLT5jb21tYW5kKSwgYm9sKTsKKwkJaXRlbS0+Y29tbWl0ID0gTlVMTDsKKwkJaXRlbS0+YXJnX29mZnNldCA9IGJvbCAtIGJ1ZjsKKwkJaXRlbS0+YXJnX2xlbiA9IGVvbCAtIGJvbDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFwYWRkaW5nKQorCQlyZXR1cm4gZXJyb3IoXygibWlzc2luZyBhcmd1bWVudHMgZm9yICVzIiksCisJCQkgICAgIGNvbW1hbmRfdG9fc3RyaW5nKGl0ZW0tPmNvbW1hbmQpKTsKKworCWlmIChpdGVtLT5jb21tYW5kID09IFRPRE9fRVhFQyB8fCBpdGVtLT5jb21tYW5kID09IFRPRE9fTEFCRUwgfHwKKwkgICAgaXRlbS0+Y29tbWFuZCA9PSBUT0RPX1JFU0VUKSB7CisJCWl0ZW0tPmNvbW1pdCA9IE5VTEw7CisJCWl0ZW0tPmFyZ19vZmZzZXQgPSBib2wgLSBidWY7CisJCWl0ZW0tPmFyZ19sZW4gPSAoaW50KShlb2wgLSBib2wpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoaXRlbS0+Y29tbWFuZCA9PSBUT0RPX01FUkdFKSB7CisJCWlmIChza2lwX3ByZWZpeChib2wsICItQyIsICZib2wpKQorCQkJYm9sICs9IHN0cnNwbihib2wsICIgXHQiKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoYm9sLCAiLWMiLCAmYm9sKSkgeworCQkJYm9sICs9IHN0cnNwbihib2wsICIgXHQiKTsKKwkJCWl0ZW0tPmZsYWdzIHw9IFRPRE9fRURJVF9NRVJHRV9NU0c7CisJCX0gZWxzZSB7CisJCQlpdGVtLT5mbGFncyB8PSBUT0RPX0VESVRfTUVSR0VfTVNHOworCQkJaXRlbS0+Y29tbWl0ID0gTlVMTDsKKwkJCWl0ZW0tPmFyZ19vZmZzZXQgPSBib2wgLSBidWY7CisJCQlpdGVtLT5hcmdfbGVuID0gKGludCkoZW9sIC0gYm9sKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJZW5kX29mX29iamVjdF9uYW1lID0gKGNoYXIgKikgYm9sICsgc3RyY3Nwbihib2wsICIgXHRcbiIpOworCXNhdmVkID0gKmVuZF9vZl9vYmplY3RfbmFtZTsKKwkqZW5kX29mX29iamVjdF9uYW1lID0gJ1wwJzsKKwlzdGF0dXMgPSBnZXRfb2lkKGJvbCwgJmNvbW1pdF9vaWQpOworCWlmIChzdGF0dXMgPCAwKQorCQllcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgJyVzJyIpLCBib2wpOyAvKiByZXR1cm4gbGF0ZXIgKi8KKwkqZW5kX29mX29iamVjdF9uYW1lID0gc2F2ZWQ7CisKKwlib2wgPSBlbmRfb2Zfb2JqZWN0X25hbWUgKyBzdHJzcG4oZW5kX29mX29iamVjdF9uYW1lLCAiIFx0Iik7CisJaXRlbS0+YXJnX29mZnNldCA9IGJvbCAtIGJ1ZjsKKwlpdGVtLT5hcmdfbGVuID0gKGludCkoZW9sIC0gYm9sKTsKKworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJaXRlbS0+Y29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UociwgJmNvbW1pdF9vaWQpOworCXJldHVybiBpdGVtLT5jb21taXQgPyAwIDogLTE7Cit9CisKK2ludCBzZXF1ZW5jZXJfZ2V0X2xhc3RfY29tbWFuZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgZW51bSByZXBsYXlfYWN0aW9uICphY3Rpb24pCit7CisJY29uc3QgY2hhciAqdG9kb19maWxlLCAqYm9sOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisKKwl0b2RvX2ZpbGUgPSBnaXRfcGF0aF90b2RvX2ZpbGUoKTsKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCB0b2RvX2ZpbGUsIDApIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOT1RESVIpCisJCQlyZXR1cm4gLTE7CisJCWVsc2UKKwkJCXJldHVybiBlcnJvcl9lcnJubygidW5hYmxlIHRvIG9wZW4gJyVzJyIsIHRvZG9fZmlsZSk7CisJfQorCWJvbCA9IGJ1Zi5idWYgKyBzdHJzcG4oYnVmLmJ1ZiwgIiBcdFxyXG4iKTsKKwlpZiAoaXNfY29tbWFuZChUT0RPX1BJQ0ssICZib2wpICYmICgqYm9sID09ICcgJyB8fCAqYm9sID09ICdcdCcpKQorCQkqYWN0aW9uID0gUkVQTEFZX1BJQ0s7CisJZWxzZSBpZiAoaXNfY29tbWFuZChUT0RPX1JFVkVSVCwgJmJvbCkgJiYKKwkJICgqYm9sID09ICcgJyB8fCAqYm9sID09ICdcdCcpKQorCQkqYWN0aW9uID0gUkVQTEFZX1JFVkVSVDsKKwllbHNlCisJCXJldCA9IC0xOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdG9kb19saXN0X3BhcnNlX2luc25fYnVmZmVyKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjaGFyICpidWYsCisJCQkJc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0KQoreworCXN0cnVjdCB0b2RvX2l0ZW0gKml0ZW07CisJY2hhciAqcCA9IGJ1ZiwgKm5leHRfcDsKKwlpbnQgaSwgcmVzID0gMCwgZml4dXBfb2theSA9IGZpbGVfZXhpc3RzKHJlYmFzZV9wYXRoX2RvbmUoKSk7CisKKwl0b2RvX2xpc3QtPmN1cnJlbnQgPSB0b2RvX2xpc3QtPm5yID0gMDsKKworCWZvciAoaSA9IDE7ICpwOyBpKyssIHAgPSBuZXh0X3ApIHsKKwkJY2hhciAqZW9sID0gc3RyY2hybnVsKHAsICdcbicpOworCisJCW5leHRfcCA9ICplb2wgPyBlb2wgKyAxIC8qIHNraXAgTEYgKi8gOiBlb2w7CisKKwkJaWYgKHAgIT0gZW9sICYmIGVvbFstMV0gPT0gJ1xyJykKKwkJCWVvbC0tOyAvKiBzdHJpcCBDYXJyaWFnZSBSZXR1cm4gKi8KKworCQlpdGVtID0gYXBwZW5kX25ld190b2RvKHRvZG9fbGlzdCk7CisJCWl0ZW0tPm9mZnNldF9pbl9idWYgPSBwIC0gdG9kb19saXN0LT5idWYuYnVmOworCQlpZiAocGFyc2VfaW5zbl9saW5lKHIsIGl0ZW0sIGJ1ZiwgcCwgZW9sKSkgeworCQkJcmVzID0gZXJyb3IoXygiaW52YWxpZCBsaW5lICVkOiAlLipzIiksCisJCQkJaSwgKGludCkoZW9sIC0gcCksIHApOworCQkJaXRlbS0+Y29tbWFuZCA9IFRPRE9fQ09NTUVOVCArIDE7CisJCQlpdGVtLT5hcmdfb2Zmc2V0ID0gcCAtIGJ1ZjsKKwkJCWl0ZW0tPmFyZ19sZW4gPSAoaW50KShlb2wgLSBwKTsKKwkJCWl0ZW0tPmNvbW1pdCA9IE5VTEw7CisJCX0KKworCQlpZiAoZml4dXBfb2theSkKKwkJCTsgLyogZG8gbm90aGluZyAqLworCQllbHNlIGlmIChpc19maXh1cChpdGVtLT5jb21tYW5kKSkKKwkJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgJyVzJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IiksCisJCQkJY29tbWFuZF90b19zdHJpbmcoaXRlbS0+Y29tbWFuZCkpOworCQllbHNlIGlmICghaXNfbm9vcChpdGVtLT5jb21tYW5kKSkKKwkJCWZpeHVwX29rYXkgPSAxOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfY29tbWFuZHMoc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0KQoreworCWludCBjb3VudCA9IDAsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdG9kb19saXN0LT5ucjsgaSsrKQorCQlpZiAodG9kb19saXN0LT5pdGVtc1tpXS5jb21tYW5kICE9IFRPRE9fQ09NTUVOVCkKKwkJCWNvdW50Kys7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2l0ZW1fbGluZV9vZmZzZXQoc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0LCBpbnQgaW5kZXgpCit7CisJcmV0dXJuIGluZGV4IDwgdG9kb19saXN0LT5uciA/CisJCXRvZG9fbGlzdC0+aXRlbXNbaW5kZXhdLm9mZnNldF9pbl9idWYgOiB0b2RvX2xpc3QtPmJ1Zi5sZW47Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfaXRlbV9saW5lKHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCwgaW50IGluZGV4KQoreworCXJldHVybiB0b2RvX2xpc3QtPmJ1Zi5idWYgKyBnZXRfaXRlbV9saW5lX29mZnNldCh0b2RvX2xpc3QsIGluZGV4KTsKK30KKworc3RhdGljIGludCBnZXRfaXRlbV9saW5lX2xlbmd0aChzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsIGludCBpbmRleCkKK3sKKwlyZXR1cm4gZ2V0X2l0ZW1fbGluZV9vZmZzZXQodG9kb19saXN0LCBpbmRleCArIDEpCisJCS0gIGdldF9pdGVtX2xpbmVfb2Zmc2V0KHRvZG9fbGlzdCwgaW5kZXgpOworfQorCitzdGF0aWMgc3NpemVfdCBzdHJidWZfcmVhZF9maWxlX29yX3doaW5lKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwYXRoKQoreworCWludCBmZDsKKwlzc2l6ZV90IGxlbjsKKworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcyciKSwgcGF0aCk7CisJbGVuID0gc3RyYnVmX3JlYWQoc2IsIGZkLCAwKTsKKwljbG9zZShmZCk7CisJaWYgKGxlbiA8IDApCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCAnJXMnLiIpLCBwYXRoKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IGhhdmVfZmluaXNoZWRfdGhlX2xhc3RfcGljayh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZW9sOworCWNvbnN0IGNoYXIgKnRvZG9fcGF0aCA9IGdpdF9wYXRoX3RvZG9fZmlsZSgpOworCWludCByZXQgPSAwOworCisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmJ1ZiwgdG9kb19wYXRoLCAwKSA8IDApIHsKKwkJaWYgKGVycm5vID09IEVOT0VOVCkgeworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQllcnJvcl9lcnJubygidW5hYmxlIHRvIG9wZW4gJyVzJyIsIHRvZG9fcGF0aCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwkvKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSBsaW5lIHRoZW4gd2UgYXJlIGRvbmUgKi8KKwllb2wgPSBzdHJjaHIoYnVmLmJ1ZiwgJ1xuJyk7CisJaWYgKCFlb2wgfHwgIWVvbFsxXSkKKwkJcmV0ID0gMTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBzZXF1ZW5jZXJfcG9zdF9jb21taXRfY2xlYW51cChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgaW50IHZlcmJvc2UpCit7CisJc3RydWN0IHJlcGxheV9vcHRzIG9wdHMgPSBSRVBMQVlfT1BUU19JTklUOworCWludCBuZWVkX2NsZWFudXAgPSAwOworCisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQocikpKSB7CisJCWlmICghdW5saW5rKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQocikpICYmIHZlcmJvc2UpCisJCQl3YXJuaW5nKF8oImNhbmNlbGxpbmcgYSBjaGVycnkgcGlja2luZyBpbiBwcm9ncmVzcyIpKTsKKwkJb3B0cy5hY3Rpb24gPSBSRVBMQVlfUElDSzsKKwkJbmVlZF9jbGVhbnVwID0gMTsKKwl9CisKKwlpZiAoZmlsZV9leGlzdHMoZ2l0X3BhdGhfcmV2ZXJ0X2hlYWQocikpKSB7CisJCWlmICghdW5saW5rKGdpdF9wYXRoX3JldmVydF9oZWFkKHIpKSAmJiB2ZXJib3NlKQorCQkJd2FybmluZyhfKCJjYW5jZWxsaW5nIGEgcmV2ZXJ0IGluIHByb2dyZXNzIikpOworCQlvcHRzLmFjdGlvbiA9IFJFUExBWV9SRVZFUlQ7CisJCW5lZWRfY2xlYW51cCA9IDE7CisJfQorCisJaWYgKCFuZWVkX2NsZWFudXApCisJCXJldHVybjsKKworCWlmICghaGF2ZV9maW5pc2hlZF90aGVfbGFzdF9waWNrKCkpCisJCXJldHVybjsKKworCXNlcXVlbmNlcl9yZW1vdmVfc3RhdGUoJm9wdHMpOworfQorCitzdGF0aWMgdm9pZCB0b2RvX2xpc3Rfd3JpdGVfdG90YWxfbnIoc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0KQoreworCUZJTEUgKmYgPSBmb3Blbl9vcl93YXJuKHJlYmFzZV9wYXRoX21zZ3RvdGFsKCksICJ3Iik7CisKKwlpZiAoZikgeworCQlmcHJpbnRmKGYsICIlZFxuIiwgdG9kb19saXN0LT50b3RhbF9ucik7CisJCWZjbG9zZShmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9wb3B1bGF0ZV90b2RvKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICAgc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0LAorCQkJICAgICAgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBzdGF0IHN0OworCWNvbnN0IGNoYXIgKnRvZG9fZmlsZSA9IGdldF90b2RvX3BhdGgob3B0cyk7CisJaW50IHJlczsKKworCXN0cmJ1Zl9yZXNldCgmdG9kb19saXN0LT5idWYpOworCWlmIChzdHJidWZfcmVhZF9maWxlX29yX3doaW5lKCZ0b2RvX2xpc3QtPmJ1ZiwgdG9kb19maWxlKSA8IDApCisJCXJldHVybiAtMTsKKworCXJlcyA9IHN0YXQodG9kb19maWxlLCAmc3QpOworCWlmIChyZXMpCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3Qgc3RhdCAnJXMnIiksIHRvZG9fZmlsZSk7CisJZmlsbF9zdGF0X2RhdGEoJnRvZG9fbGlzdC0+c3RhdCwgJnN0KTsKKworCXJlcyA9IHRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcihyLCB0b2RvX2xpc3QtPmJ1Zi5idWYsIHRvZG9fbGlzdCk7CisJaWYgKHJlcykgeworCQlpZiAoaXNfcmViYXNlX2kob3B0cykpCisJCQlyZXR1cm4gZXJyb3IoXygicGxlYXNlIGZpeCB0aGlzIHVzaW5nICIKKwkJCQkgICAgICAgIidnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iKSk7CisJCXJldHVybiBlcnJvcihfKCJ1bnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJyVzJyIpLCB0b2RvX2ZpbGUpOworCX0KKworCWlmICghdG9kb19saXN0LT5uciAmJgorCSAgICAoIWlzX3JlYmFzZV9pKG9wdHMpIHx8ICFmaWxlX2V4aXN0cyhyZWJhc2VfcGF0aF9kb25lKCkpKSkKKwkJcmV0dXJuIGVycm9yKF8oIm5vIGNvbW1pdHMgcGFyc2VkLiIpKTsKKworCWlmICghaXNfcmViYXNlX2kob3B0cykpIHsKKwkJZW51bSB0b2RvX2NvbW1hbmQgdmFsaWQgPQorCQkJb3B0cy0+YWN0aW9uID09IFJFUExBWV9QSUNLID8gVE9ET19QSUNLIDogVE9ET19SRVZFUlQ7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCB0b2RvX2xpc3QtPm5yOyBpKyspCisJCQlpZiAodmFsaWQgPT0gdG9kb19saXN0LT5pdGVtc1tpXS5jb21tYW5kKQorCQkJCWNvbnRpbnVlOworCQkJZWxzZSBpZiAodmFsaWQgPT0gVE9ET19QSUNLKQorCQkJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgY2hlcnJ5LXBpY2sgZHVyaW5nIGEgcmV2ZXJ0LiIpKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IHJldmVydCBkdXJpbmcgYSBjaGVycnktcGljay4iKSk7CisJfQorCisJaWYgKGlzX3JlYmFzZV9pKG9wdHMpKSB7CisJCXN0cnVjdCB0b2RvX2xpc3QgZG9uZSA9IFRPRE9fTElTVF9JTklUOworCisJCWlmIChzdHJidWZfcmVhZF9maWxlKCZkb25lLmJ1ZiwgcmViYXNlX3BhdGhfZG9uZSgpLCAwKSA+IDAgJiYKKwkJICAgICF0b2RvX2xpc3RfcGFyc2VfaW5zbl9idWZmZXIociwgZG9uZS5idWYuYnVmLCAmZG9uZSkpCisJCQl0b2RvX2xpc3QtPmRvbmVfbnIgPSBjb3VudF9jb21tYW5kcygmZG9uZSk7CisJCWVsc2UKKwkJCXRvZG9fbGlzdC0+ZG9uZV9uciA9IDA7CisKKwkJdG9kb19saXN0LT50b3RhbF9uciA9IHRvZG9fbGlzdC0+ZG9uZV9ucgorCQkJKyBjb3VudF9jb21tYW5kcyh0b2RvX2xpc3QpOworCQl0b2RvX2xpc3RfcmVsZWFzZSgmZG9uZSk7CisKKwkJdG9kb19saXN0X3dyaXRlX3RvdGFsX25yKHRvZG9fbGlzdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2NvbmZpZ19zdHJpbmdfZHVwKGNoYXIgKipkZXN0LAorCQkJCSBjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCWZyZWUoKmRlc3QpOworCSpkZXN0ID0geHN0cmR1cCh2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9wdWxhdGVfb3B0c19jYihjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cyA9IGRhdGE7CisJaW50IGVycm9yX2ZsYWcgPSAxOworCisJaWYgKCF2YWx1ZSkKKwkJZXJyb3JfZmxhZyA9IDA7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLm5vLWNvbW1pdCIpKQorCQlvcHRzLT5ub19jb21taXQgPSBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGtleSwgdmFsdWUsICZlcnJvcl9mbGFnKTsKKwllbHNlIGlmICghc3RyY21wKGtleSwgIm9wdGlvbnMuZWRpdCIpKQorCQlvcHRzLT5lZGl0ID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXksIHZhbHVlLCAmZXJyb3JfZmxhZyk7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLmFsbG93LWVtcHR5IikpCisJCW9wdHMtPmFsbG93X2VtcHR5ID0KKwkJCWdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmVycm9yX2ZsYWcpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5hbGxvdy1lbXB0eS1tZXNzYWdlIikpCisJCW9wdHMtPmFsbG93X2VtcHR5X21lc3NhZ2UgPQorCQkJZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXksIHZhbHVlLCAmZXJyb3JfZmxhZyk7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLmtlZXAtcmVkdW5kYW50LWNvbW1pdHMiKSkKKwkJb3B0cy0+a2VlcF9yZWR1bmRhbnRfY29tbWl0cyA9CisJCQlnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGtleSwgdmFsdWUsICZlcnJvcl9mbGFnKTsKKwllbHNlIGlmICghc3RyY21wKGtleSwgIm9wdGlvbnMuc2lnbm9mZiIpKQorCQlvcHRzLT5zaWdub2ZmID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXksIHZhbHVlLCAmZXJyb3JfZmxhZyk7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLnJlY29yZC1vcmlnaW4iKSkKKwkJb3B0cy0+cmVjb3JkX29yaWdpbiA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmVycm9yX2ZsYWcpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5hbGxvdy1mZiIpKQorCQlvcHRzLT5hbGxvd19mZiA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmVycm9yX2ZsYWcpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5tYWlubGluZSIpKQorCQlvcHRzLT5tYWlubGluZSA9IGdpdF9jb25maWdfaW50KGtleSwgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5zdHJhdGVneSIpKQorCQlnaXRfY29uZmlnX3N0cmluZ19kdXAoJm9wdHMtPnN0cmF0ZWd5LCBrZXksIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKGtleSwgIm9wdGlvbnMuZ3BnLXNpZ24iKSkKKwkJZ2l0X2NvbmZpZ19zdHJpbmdfZHVwKCZvcHRzLT5ncGdfc2lnbiwga2V5LCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLnN0cmF0ZWd5LW9wdGlvbiIpKSB7CisJCUFMTE9DX0dST1cob3B0cy0+eG9wdHMsIG9wdHMtPnhvcHRzX25yICsgMSwgb3B0cy0+eG9wdHNfYWxsb2MpOworCQlvcHRzLT54b3B0c1tvcHRzLT54b3B0c19ucisrXSA9IHhzdHJkdXAodmFsdWUpOworCX0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLmFsbG93LXJlcmVyZS1hdXRvIikpCisJCW9wdHMtPmFsbG93X3JlcmVyZV9hdXRvID0KKwkJCWdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmVycm9yX2ZsYWcpID8KKwkJCQlSRVJFUkVfQVVUT1VQREFURSA6IFJFUkVSRV9OT0FVVE9VUERBVEU7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLmRlZmF1bHQtbXNnLWNsZWFudXAiKSkgeworCQlvcHRzLT5leHBsaWNpdF9jbGVhbnVwID0gMTsKKwkJb3B0cy0+ZGVmYXVsdF9tc2dfY2xlYW51cCA9IGdldF9jbGVhbnVwX21vZGUodmFsdWUsIDEpOworCX0gZWxzZQorCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCBrZXk6ICVzIiksIGtleSk7CisKKwlpZiAoIWVycm9yX2ZsYWcpCisJCXJldHVybiBlcnJvcihfKCJpbnZhbGlkIHZhbHVlIGZvciAlczogJXMiKSwga2V5LCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwYXJzZV9zdHJhdGVneV9vcHRzKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywgY2hhciAqcmF3X29wdHMpCit7CisJaW50IGk7CisJY2hhciAqc3RyYXRlZ3lfb3B0c19zdHJpbmcgPSByYXdfb3B0czsKKworCWlmICgqc3RyYXRlZ3lfb3B0c19zdHJpbmcgPT0gJyAnKQorCQlzdHJhdGVneV9vcHRzX3N0cmluZysrOworCisJb3B0cy0+eG9wdHNfbnIgPSBzcGxpdF9jbWRsaW5lKHN0cmF0ZWd5X29wdHNfc3RyaW5nLAorCQkJCSAgICAgICAoY29uc3QgY2hhciAqKiopJm9wdHMtPnhvcHRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgb3B0cy0+eG9wdHNfbnI7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBvcHRzLT54b3B0c1tpXTsKKworCQlza2lwX3ByZWZpeChhcmcsICItLSIsICZhcmcpOworCQlvcHRzLT54b3B0c1tpXSA9IHhzdHJkdXAoYXJnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfc3RyYXRlZ3lfb3B0cyhzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwlpZiAoIXJlYWRfb25lbGluZXIoYnVmLCByZWJhc2VfcGF0aF9zdHJhdGVneSgpLCAwKSkKKwkJcmV0dXJuOworCW9wdHMtPnN0cmF0ZWd5ID0gc3RyYnVmX2RldGFjaChidWYsIE5VTEwpOworCWlmICghcmVhZF9vbmVsaW5lcihidWYsIHJlYmFzZV9wYXRoX3N0cmF0ZWd5X29wdHMoKSwgMCkpCisJCXJldHVybjsKKworCXBhcnNlX3N0cmF0ZWd5X29wdHMob3B0cywgYnVmLT5idWYpOworfQorCitzdGF0aWMgaW50IHJlYWRfcG9wdWxhdGVfb3B0cyhzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJaWYgKGlzX3JlYmFzZV9pKG9wdHMpKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCWludCByZXQgPSAwOworCisJCWlmIChyZWFkX29uZWxpbmVyKCZidWYsIHJlYmFzZV9wYXRoX2dwZ19zaWduX29wdCgpLAorCQkJCSAgUkVBRF9PTkVMSU5FUl9TS0lQX0lGX0VNUFRZKSkgeworCQkJaWYgKCFzdGFydHNfd2l0aChidWYuYnVmLCAiLVMiKSkKKwkJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQllbHNlIHsKKwkJCQlmcmVlKG9wdHMtPmdwZ19zaWduKTsKKwkJCQlvcHRzLT5ncGdfc2lnbiA9IHhzdHJkdXAoYnVmLmJ1ZiArIDIpOworCQkJfQorCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQl9CisKKwkJaWYgKHJlYWRfb25lbGluZXIoJmJ1ZiwgcmViYXNlX3BhdGhfYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUoKSwKKwkJCQkgIFJFQURfT05FTElORVJfU0tJUF9JRl9FTVBUWSkpIHsKKwkJCWlmICghc3RyY21wKGJ1Zi5idWYsICItLXJlcmVyZS1hdXRvdXBkYXRlIikpCisJCQkJb3B0cy0+YWxsb3dfcmVyZXJlX2F1dG8gPSBSRVJFUkVfQVVUT1VQREFURTsKKwkJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLmJ1ZiwgIi0tbm8tcmVyZXJlLWF1dG91cGRhdGUiKSkKKwkJCQlvcHRzLT5hbGxvd19yZXJlcmVfYXV0byA9IFJFUkVSRV9OT0FVVE9VUERBVEU7CisJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCX0KKworCQlpZiAoZmlsZV9leGlzdHMocmViYXNlX3BhdGhfdmVyYm9zZSgpKSkKKwkJCW9wdHMtPnZlcmJvc2UgPSAxOworCisJCWlmIChmaWxlX2V4aXN0cyhyZWJhc2VfcGF0aF9xdWlldCgpKSkKKwkJCW9wdHMtPnF1aWV0ID0gMTsKKworCQlpZiAoZmlsZV9leGlzdHMocmViYXNlX3BhdGhfc2lnbm9mZigpKSkgeworCQkJb3B0cy0+YWxsb3dfZmYgPSAwOworCQkJb3B0cy0+c2lnbm9mZiA9IDE7CisJCX0KKworCQlpZiAoZmlsZV9leGlzdHMocmViYXNlX3BhdGhfcmVzY2hlZHVsZV9mYWlsZWRfZXhlYygpKSkKKwkJCW9wdHMtPnJlc2NoZWR1bGVfZmFpbGVkX2V4ZWMgPSAxOworCisJCWlmIChmaWxlX2V4aXN0cyhyZWJhc2VfcGF0aF9kcm9wX3JlZHVuZGFudF9jb21taXRzKCkpKQorCQkJb3B0cy0+ZHJvcF9yZWR1bmRhbnRfY29tbWl0cyA9IDE7CisKKwkJaWYgKGZpbGVfZXhpc3RzKHJlYmFzZV9wYXRoX2tlZXBfcmVkdW5kYW50X2NvbW1pdHMoKSkpCisJCQlvcHRzLT5rZWVwX3JlZHVuZGFudF9jb21taXRzID0gMTsKKworCQlyZWFkX3N0cmF0ZWd5X29wdHMob3B0cywgJmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKworCQlpZiAocmVhZF9vbmVsaW5lcigmb3B0cy0+Y3VycmVudF9maXh1cHMsCisJCQkJICByZWJhc2VfcGF0aF9jdXJyZW50X2ZpeHVwcygpLAorCQkJCSAgUkVBRF9PTkVMSU5FUl9TS0lQX0lGX0VNUFRZKSkgeworCQkJY29uc3QgY2hhciAqcCA9IG9wdHMtPmN1cnJlbnRfZml4dXBzLmJ1ZjsKKwkJCW9wdHMtPmN1cnJlbnRfZml4dXBfY291bnQgPSAxOworCQkJd2hpbGUgKChwID0gc3RyY2hyKHAsICdcbicpKSkgeworCQkJCW9wdHMtPmN1cnJlbnRfZml4dXBfY291bnQrKzsKKwkJCQlwKys7CisJCQl9CisJCX0KKworCQlpZiAocmVhZF9vbmVsaW5lcigmYnVmLCByZWJhc2VfcGF0aF9zcXVhc2hfb250bygpLCAwKSkgeworCQkJaWYgKGdldF9vaWRfaGV4KGJ1Zi5idWYsICZvcHRzLT5zcXVhc2hfb250bykgPCAwKSB7CisJCQkJcmV0ID0gZXJyb3IoXygidW51c2FibGUgc3F1YXNoLW9udG8iKSk7CisJCQkJZ290byBkb25lX3JlYmFzZV9pOworCQkJfQorCQkJb3B0cy0+aGF2ZV9zcXVhc2hfb250byA9IDE7CisJCX0KKworZG9uZV9yZWJhc2VfaToKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCFmaWxlX2V4aXN0cyhnaXRfcGF0aF9vcHRzX2ZpbGUoKSkpCisJCXJldHVybiAwOworCS8qCisJICogVGhlIGZ1bmN0aW9uIGdpdF9wYXJzZV9zb3VyY2UoKSwgY2FsbGVkIGZyb20gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoKSwKKwkgKiBtYXkgZGllKCkgaW4gY2FzZSBvZiBhIHN5bnRhY3RpY2FsbHkgaW5jb3JyZWN0IGZpbGUuIFdlIGRvIG5vdCBjYXJlCisJICogYWJvdXQgdGhpcyBjYXNlLCB0aG91Z2gsIGJlY2F1c2Ugd2Ugd3JvdGUgdGhhdCBmaWxlIG91cnNlbHZlcywgc28gd2UKKwkgKiBhcmUgcHJldHR5IGNlcnRhaW4gdGhhdCBpdCBpcyBzeW50YWN0aWNhbGx5IGNvcnJlY3QuCisJICovCisJaWYgKGdpdF9jb25maWdfZnJvbV9maWxlKHBvcHVsYXRlX29wdHNfY2IsIGdpdF9wYXRoX29wdHNfZmlsZSgpLCBvcHRzKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJtYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJyVzJyIpLAorCQkJZ2l0X3BhdGhfb3B0c19maWxlKCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9zdHJhdGVneV9vcHRzKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJZm9yIChpID0gMDsgaSA8IG9wdHMtPnhvcHRzX25yOyArK2kpCisJCXN0cmJ1Zl9hZGRmKCZidWYsICIgLS0lcyIsIG9wdHMtPnhvcHRzW2ldKTsKKworCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfc3RyYXRlZ3lfb3B0cygpLCAiJXNcbiIsIGJ1Zi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitpbnQgd3JpdGVfYmFzaWNfc3RhdGUoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzLCBjb25zdCBjaGFyICpoZWFkX25hbWUsCisJCSAgICAgIHN0cnVjdCBjb21taXQgKm9udG8sIGNvbnN0IGNoYXIgKm9yaWdfaGVhZCkKK3sKKwlpZiAoaGVhZF9uYW1lKQorCQl3cml0ZV9maWxlKHJlYmFzZV9wYXRoX2hlYWRfbmFtZSgpLCAiJXNcbiIsIGhlYWRfbmFtZSk7CisJaWYgKG9udG8pCisJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfb250bygpLCAiJXNcbiIsCisJCQkgICBvaWRfdG9faGV4KCZvbnRvLT5vYmplY3Qub2lkKSk7CisJaWYgKG9yaWdfaGVhZCkKKwkJd3JpdGVfZmlsZShyZWJhc2VfcGF0aF9vcmlnX2hlYWQoKSwgIiVzXG4iLCBvcmlnX2hlYWQpOworCisJaWYgKG9wdHMtPnF1aWV0KQorCQl3cml0ZV9maWxlKHJlYmFzZV9wYXRoX3F1aWV0KCksICIlcyIsICIiKTsKKwlpZiAob3B0cy0+dmVyYm9zZSkKKwkJd3JpdGVfZmlsZShyZWJhc2VfcGF0aF92ZXJib3NlKCksICIlcyIsICIiKTsKKwlpZiAob3B0cy0+c3RyYXRlZ3kpCisJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfc3RyYXRlZ3koKSwgIiVzXG4iLCBvcHRzLT5zdHJhdGVneSk7CisJaWYgKG9wdHMtPnhvcHRzX25yID4gMCkKKwkJd3JpdGVfc3RyYXRlZ3lfb3B0cyhvcHRzKTsKKworCWlmIChvcHRzLT5hbGxvd19yZXJlcmVfYXV0byA9PSBSRVJFUkVfQVVUT1VQREFURSkKKwkJd3JpdGVfZmlsZShyZWJhc2VfcGF0aF9hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSgpLCAiLS1yZXJlcmUtYXV0b3VwZGF0ZVxuIik7CisJZWxzZSBpZiAob3B0cy0+YWxsb3dfcmVyZXJlX2F1dG8gPT0gUkVSRVJFX05PQVVUT1VQREFURSkKKwkJd3JpdGVfZmlsZShyZWJhc2VfcGF0aF9hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSgpLCAiLS1uby1yZXJlcmUtYXV0b3VwZGF0ZVxuIik7CisKKwlpZiAob3B0cy0+Z3BnX3NpZ24pCisJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfZ3BnX3NpZ25fb3B0KCksICItUyVzXG4iLCBvcHRzLT5ncGdfc2lnbik7CisJaWYgKG9wdHMtPnNpZ25vZmYpCisJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfc2lnbm9mZigpLCAiLS1zaWdub2ZmXG4iKTsKKwlpZiAob3B0cy0+ZHJvcF9yZWR1bmRhbnRfY29tbWl0cykKKwkJd3JpdGVfZmlsZShyZWJhc2VfcGF0aF9kcm9wX3JlZHVuZGFudF9jb21taXRzKCksICIlcyIsICIiKTsKKwlpZiAob3B0cy0+a2VlcF9yZWR1bmRhbnRfY29tbWl0cykKKwkJd3JpdGVfZmlsZShyZWJhc2VfcGF0aF9rZWVwX3JlZHVuZGFudF9jb21taXRzKCksICIlcyIsICIiKTsKKwlpZiAob3B0cy0+cmVzY2hlZHVsZV9mYWlsZWRfZXhlYykKKwkJd3JpdGVfZmlsZShyZWJhc2VfcGF0aF9yZXNjaGVkdWxlX2ZhaWxlZF9leGVjKCksICIlcyIsICIiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdhbGtfcmV2c19wb3B1bGF0ZV90b2RvKHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCwKKwkJCQlzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJZW51bSB0b2RvX2NvbW1hbmQgY29tbWFuZCA9IG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUElDSyA/CisJCVRPRE9fUElDSyA6IFRPRE9fUkVWRVJUOworCWNvbnN0IGNoYXIgKmNvbW1hbmRfc3RyaW5nID0gdG9kb19jb21tYW5kX2luZm9bY29tbWFuZF0uc3RyOworCWNvbnN0IGNoYXIgKmVuY29kaW5nOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCWlmIChwcmVwYXJlX3JldnMob3B0cykpCisJCXJldHVybiAtMTsKKworCWVuY29kaW5nID0gZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKTsKKworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKG9wdHMtPnJldnMpKSkgeworCQlzdHJ1Y3QgdG9kb19pdGVtICppdGVtID0gYXBwZW5kX25ld190b2RvKHRvZG9fbGlzdCk7CisJCWNvbnN0IGNoYXIgKmNvbW1pdF9idWZmZXIgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZyk7CisJCWNvbnN0IGNoYXIgKnN1YmplY3Q7CisJCWludCBzdWJqZWN0X2xlbjsKKworCQlpdGVtLT5jb21tYW5kID0gY29tbWFuZDsKKwkJaXRlbS0+Y29tbWl0ID0gY29tbWl0OworCQlpdGVtLT5hcmdfb2Zmc2V0ID0gMDsKKwkJaXRlbS0+YXJnX2xlbiA9IDA7CisJCWl0ZW0tPm9mZnNldF9pbl9idWYgPSB0b2RvX2xpc3QtPmJ1Zi5sZW47CisJCXN1YmplY3RfbGVuID0gZmluZF9jb21taXRfc3ViamVjdChjb21taXRfYnVmZmVyLCAmc3ViamVjdCk7CisJCXN0cmJ1Zl9hZGRmKCZ0b2RvX2xpc3QtPmJ1ZiwgIiVzICVzICUuKnNcbiIsIGNvbW1hbmRfc3RyaW5nLAorCQkJc2hvcnRfY29tbWl0X25hbWUoY29tbWl0KSwgc3ViamVjdF9sZW4sIHN1YmplY3QpOworCQl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgY29tbWl0X2J1ZmZlcik7CisJfQorCisJaWYgKCF0b2RvX2xpc3QtPm5yKQorCQlyZXR1cm4gZXJyb3IoXygiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcmVhdGVfc2VxX2RpcihzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwllbnVtIHJlcGxheV9hY3Rpb24gYWN0aW9uOworCWNvbnN0IGNoYXIgKmluX3Byb2dyZXNzX2Vycm9yID0gTlVMTDsKKwljb25zdCBjaGFyICppbl9wcm9ncmVzc19hZHZpY2UgPSBOVUxMOworCXVuc2lnbmVkIGludCBhZHZpc2Vfc2tpcCA9IGZpbGVfZXhpc3RzKGdpdF9wYXRoX3JldmVydF9oZWFkKHIpKSB8fAorCQkJCWZpbGVfZXhpc3RzKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQocikpOworCisJaWYgKCFzZXF1ZW5jZXJfZ2V0X2xhc3RfY29tbWFuZChyLCAmYWN0aW9uKSkgeworCQlzd2l0Y2ggKGFjdGlvbikgeworCQljYXNlIFJFUExBWV9SRVZFUlQ6CisJCQlpbl9wcm9ncmVzc19lcnJvciA9IF8oInJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIik7CisJCQlpbl9wcm9ncmVzc19hZHZpY2UgPQorCQkJXygidHJ5IFwiZ2l0IHJldmVydCAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIpOworCQkJYnJlYWs7CisJCWNhc2UgUkVQTEFZX1BJQ0s6CisJCQlpbl9wcm9ncmVzc19lcnJvciA9IF8oImNoZXJyeS1waWNrIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiKTsKKwkJCWluX3Byb2dyZXNzX2FkdmljZSA9CisJCQlfKCJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCJ1bmV4cGVjdGVkIGFjdGlvbiBpbiBjcmVhdGVfc2VxX2RpciIpOworCQl9CisJfQorCWlmIChpbl9wcm9ncmVzc19lcnJvcikgeworCQllcnJvcigiJXMiLCBpbl9wcm9ncmVzc19lcnJvcik7CisJCWlmIChhZHZpY2Vfc2VxdWVuY2VyX2luX3VzZSkKKwkJCWFkdmlzZShpbl9wcm9ncmVzc19hZHZpY2UsCisJCQkJYWR2aXNlX3NraXAgPyAiLS1za2lwIHwgIiA6ICIiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAobWtkaXIoZ2l0X3BhdGhfc2VxX2RpcigpLCAwNzc3KSA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIpLAorCQkJCSAgIGdpdF9wYXRoX3NlcV9kaXIoKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYXZlX2hlYWQoY29uc3QgY2hhciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbG9ja19maWxlIGhlYWRfbG9jayA9IExPQ0tfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBmZDsKKwlzc2l6ZV90IHdyaXR0ZW47CisKKwlmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmhlYWRfbG9jaywgZ2l0X3BhdGhfaGVhZF9maWxlKCksIDApOworCWlmIChmZCA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgbG9jayBIRUFEIikpOworCXN0cmJ1Zl9hZGRmKCZidWYsICIlc1xuIiwgaGVhZCk7CisJd3JpdHRlbiA9IHdyaXRlX2luX2Z1bGwoZmQsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWlmICh3cml0dGVuIDwgMCkgeworCQllcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIpLCBnaXRfcGF0aF9oZWFkX2ZpbGUoKSk7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmaGVhZF9sb2NrKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoY29tbWl0X2xvY2tfZmlsZSgmaGVhZF9sb2NrKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJmYWlsZWQgdG8gZmluYWxpemUgJyVzJyIpLCBnaXRfcGF0aF9oZWFkX2ZpbGUoKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm9sbGJhY2tfaXNfc2FmZSh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGV4cGVjdGVkX2hlYWQsIGFjdHVhbF9oZWFkOworCisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBnaXRfcGF0aF9hYm9ydF9zYWZldHlfZmlsZSgpLCAwKSA+PSAwKSB7CisJCXN0cmJ1Zl90cmltKCZzYik7CisJCWlmIChnZXRfb2lkX2hleChzYi5idWYsICZleHBlY3RlZF9oZWFkKSkgeworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJCWRpZShfKCJjb3VsZCBub3QgcGFyc2UgJXMiKSwgZ2l0X3BhdGhfYWJvcnRfc2FmZXR5X2ZpbGUoKSk7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9CisJZWxzZSBpZiAoZXJybm8gPT0gRU5PRU5UKQorCQlvaWRjbHIoJmV4cGVjdGVkX2hlYWQpOworCWVsc2UKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkICclcyciKSwgZ2l0X3BhdGhfYWJvcnRfc2FmZXR5X2ZpbGUoKSk7CisKKwlpZiAoZ2V0X29pZCgiSEVBRCIsICZhY3R1YWxfaGVhZCkpCisJCW9pZGNscigmYWN0dWFsX2hlYWQpOworCisJcmV0dXJuIG9pZGVxKCZhY3R1YWxfaGVhZCwgJmV4cGVjdGVkX2hlYWQpOworfQorCitzdGF0aWMgaW50IHJlc2V0X21lcmdlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZhcmd2LCAicmVzZXQiLCAiLS1tZXJnZSIsIE5VTEwpOworCisJaWYgKCFpc19udWxsX29pZChvaWQpKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3YsIG9pZF90b19oZXgob2lkKSk7CisKKwlyZXQgPSBydW5fY29tbWFuZF92X29wdChhcmd2LmFyZ3YsIFJVTl9HSVRfQ01EKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmd2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcm9sbGJhY2tfc2luZ2xlX3BpY2soc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJc3RydWN0IG9iamVjdF9pZCBoZWFkX29pZDsKKworCWlmICghZmlsZV9leGlzdHMoZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZChyKSkgJiYKKwkgICAgIWZpbGVfZXhpc3RzKGdpdF9wYXRoX3JldmVydF9oZWFkKHIpKSkKKwkJcmV0dXJuIGVycm9yKF8oIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIpKTsKKwlpZiAocmVhZF9yZWZfZnVsbCgiSEVBRCIsIDAsICZoZWFkX29pZCwgTlVMTCkpCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcmVzb2x2ZSBIRUFEIikpOworCWlmIChpc19udWxsX29pZCgmaGVhZF9vaWQpKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iKSk7CisJcmV0dXJuIHJlc2V0X21lcmdlKCZoZWFkX29pZCk7Cit9CisKK3N0YXRpYyBpbnQgc2tpcF9zaW5nbGVfcGljayh2b2lkKQoreworCXN0cnVjdCBvYmplY3RfaWQgaGVhZDsKKworCWlmIChyZWFkX3JlZl9mdWxsKCJIRUFEIiwgMCwgJmhlYWQsIE5VTEwpKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IHJlc29sdmUgSEVBRCIpKTsKKwlyZXR1cm4gcmVzZXRfbWVyZ2UoJmhlYWQpOworfQorCitpbnQgc2VxdWVuY2VyX3JvbGxiYWNrKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJRklMRSAqZjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnA7CisKKwlmID0gZm9wZW4oZ2l0X3BhdGhfaGVhZF9maWxlKCksICJyIik7CisJaWYgKCFmICYmIGVycm5vID09IEVOT0VOVCkgeworCQkvKgorCQkgKiBUaGVyZSBpcyBubyBtdWx0aXBsZS1jaGVycnktcGljayBpbiBwcm9ncmVzcy4KKwkJICogSWYgQ0hFUlJZX1BJQ0tfSEVBRCBvciBSRVZFUlRfSEVBRCBpbmRpY2F0ZXMKKwkJICogYSBzaW5nbGUtY2hlcnJ5LXBpY2sgaW4gcHJvZ3Jlc3MsIGFib3J0IHRoYXQuCisJCSAqLworCQlyZXR1cm4gcm9sbGJhY2tfc2luZ2xlX3BpY2socik7CisJfQorCWlmICghZikKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNhbm5vdCBvcGVuICclcyciKSwgZ2l0X3BhdGhfaGVhZF9maWxlKCkpOworCWlmIChzdHJidWZfZ2V0bGluZV9sZigmYnVmLCBmKSkgeworCQllcnJvcihfKCJjYW5ub3QgcmVhZCAnJXMnOiAlcyIpLCBnaXRfcGF0aF9oZWFkX2ZpbGUoKSwKKwkJICAgICAgZmVycm9yKGYpID8gIHN0cmVycm9yKGVycm5vKSA6IF8oInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKSk7CisJCWZjbG9zZShmKTsKKwkJZ290byBmYWlsOworCX0KKwlmY2xvc2UoZik7CisJaWYgKHBhcnNlX29pZF9oZXgoYnVmLmJ1ZiwgJm9pZCwgJnApIHx8ICpwICE9ICdcMCcpIHsKKwkJZXJyb3IoXygic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IiksCisJCQlnaXRfcGF0aF9oZWFkX2ZpbGUoKSk7CisJCWdvdG8gZmFpbDsKKwl9CisJaWYgKGlzX251bGxfb2lkKCZvaWQpKSB7CisJCWVycm9yKF8oImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIikpOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKCFyb2xsYmFja19pc19zYWZlKCkpIHsKKwkJLyogRG8gbm90IGVycm9yLCBqdXN0IGRvIG5vdCByb2xsYmFjayAqLworCQl3YXJuaW5nKF8oIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRC4gIgorCQkJICAiTm90IHJld2luZGluZywgY2hlY2sgeW91ciBIRUFEISIpKTsKKwl9IGVsc2UKKwlpZiAocmVzZXRfbWVyZ2UoJm9pZCkpCisJCWdvdG8gZmFpbDsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gc2VxdWVuY2VyX3JlbW92ZV9zdGF0ZShvcHRzKTsKK2ZhaWw6CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIC0xOworfQorCitpbnQgc2VxdWVuY2VyX3NraXAoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwllbnVtIHJlcGxheV9hY3Rpb24gYWN0aW9uID0gLTE7CisJc2VxdWVuY2VyX2dldF9sYXN0X2NvbW1hbmQociwgJmFjdGlvbik7CisKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgdGhlIHN1YmNvbW1hbmQgcmVxdWVzdGVkIHRvIHNraXAgdGhlIGNvbW1pdCBpcyBhY3R1YWxseQorCSAqIGluIHByb2dyZXNzIGFuZCB0aGF0IGl0J3Mgc2FmZSB0byBza2lwIHRoZSBjb21taXQuCisJICoKKwkgKiBvcHRzLT5hY3Rpb24gdGVsbHMgdXMgd2hpY2ggc3ViY29tbWFuZCByZXF1ZXN0ZWQgdG8gc2tpcCB0aGUgY29tbWl0LgorCSAqIElmIHRoZSBjb3JyZXNwb25kaW5nIC5naXQvPEFDVElPTj5fSEVBRCBleGlzdHMsIHdlIGtub3cgdGhhdCB0aGUKKwkgKiBhY3Rpb24gaXMgaW4gcHJvZ3Jlc3MgYW5kIHdlIGNhbiBza2lwIHRoZSBjb21taXQuCisJICoKKwkgKiBPdGhlcndpc2Ugd2UgY2hlY2sgdGhhdCB0aGUgbGFzdCBpbnN0cnVjdGlvbiB3YXMgcmVsYXRlZCB0byB0aGUKKwkgKiBwYXJ0aWN1bGFyIHN1YmNvbW1hbmQgd2UncmUgdHJ5aW5nIHRvIGV4ZWN1dGUgYW5kIGJhcmYgaWYgdGhhdCdzIG5vdAorCSAqIHRoZSBjYXNlLgorCSAqCisJICogRmluYWxseSB3ZSBjaGVjayB0aGF0IHRoZSByb2xsYmFjayBpcyAic2FmZSIsIGkuZS4sIGhhcyB0aGUgSEVBRAorCSAqIG1vdmVkPyBJbiB0aGlzIGNhc2UsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byAicmVzZXQgdGhlIG1lcmdlIiBhbmQKKwkgKiAic2tpcCB0aGUgY29tbWl0IiBhcyB0aGUgdXNlciBhbHJlYWR5IGhhbmRsZWQgdGhpcyBieSBjb21taXR0aW5nLiBCdXQKKwkgKiB3ZSdkIG5vdCB3YW50IHRvIGJhcmYgaGVyZSwgaW5zdGVhZCBnaXZlIGFkdmljZSBvbiBob3cgdG8gcHJvY2VlZC4gV2UKKwkgKiBvbmx5IG5lZWQgdG8gY2hlY2sgdGhhdCB3aGVuIC5naXQvPEFDVElPTj5fSEVBRCBkb2Vzbid0IGV4aXN0IGJlY2F1c2UKKwkgKiBpdCBnZXRzIHJlbW92ZWQgd2hlbiB0aGUgdXNlciBjb21taXRzLCBzbyBpZiBpdCBzdGlsbCBleGlzdHMgd2UncmUKKwkgKiBzdXJlIHRoZSB1c2VyIGNhbid0IGhhdmUgY29tbWl0dGVkIGJlZm9yZS4KKwkgKi8KKwlzd2l0Y2ggKG9wdHMtPmFjdGlvbikgeworCWNhc2UgUkVQTEFZX1JFVkVSVDoKKwkJaWYgKCFmaWxlX2V4aXN0cyhnaXRfcGF0aF9yZXZlcnRfaGVhZChyKSkpIHsKKwkJCWlmIChhY3Rpb24gIT0gUkVQTEFZX1JFVkVSVCkKKwkJCQlyZXR1cm4gZXJyb3IoXygibm8gcmV2ZXJ0IGluIHByb2dyZXNzIikpOworCQkJaWYgKCFyb2xsYmFja19pc19zYWZlKCkpCisJCQkJZ290byBnaXZlX2FkdmljZTsKKwkJfQorCQlicmVhazsKKwljYXNlIFJFUExBWV9QSUNLOgorCQlpZiAoIWZpbGVfZXhpc3RzKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQocikpKSB7CisJCQlpZiAoYWN0aW9uICE9IFJFUExBWV9QSUNLKQorCQkJCXJldHVybiBlcnJvcihfKCJubyBjaGVycnktcGljayBpbiBwcm9ncmVzcyIpKTsKKwkJCWlmICghcm9sbGJhY2tfaXNfc2FmZSgpKQorCQkJCWdvdG8gZ2l2ZV9hZHZpY2U7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCJ1bmV4cGVjdGVkIGFjdGlvbiBpbiBzZXF1ZW5jZXJfc2tpcCIpOworCX0KKworCWlmIChza2lwX3NpbmdsZV9waWNrKCkpCisJCXJldHVybiBlcnJvcihfKCJmYWlsZWQgdG8gc2tpcCB0aGUgY29tbWl0IikpOworCWlmICghaXNfZGlyZWN0b3J5KGdpdF9wYXRoX3NlcV9kaXIoKSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIHNlcXVlbmNlcl9jb250aW51ZShyLCBvcHRzKTsKKworZ2l2ZV9hZHZpY2U6CisJZXJyb3IoXygidGhlcmUgaXMgbm90aGluZyB0byBza2lwIikpOworCisJaWYgKGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0KSB7CisJCWFkdmlzZShfKCJoYXZlIHlvdSBjb21taXR0ZWQgYWxyZWFkeT9cbiIKKwkJCSAidHJ5IFwiZ2l0ICVzIC0tY29udGludWVcIiIpLAorCQkJIGFjdGlvbiA9PSBSRVBMQVlfUkVWRVJUID8gInJldmVydCIgOiAiY2hlcnJ5LXBpY2siKTsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHNhdmVfdG9kbyhzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlzdHJ1Y3QgbG9ja19maWxlIHRvZG9fbG9jayA9IExPQ0tfSU5JVDsKKwljb25zdCBjaGFyICp0b2RvX3BhdGggPSBnZXRfdG9kb19wYXRoKG9wdHMpOworCWludCBuZXh0ID0gdG9kb19saXN0LT5jdXJyZW50LCBvZmZzZXQsIGZkOworCisJLyoKKwkgKiByZWJhc2UgLWkgd3JpdGVzICJnaXQtcmViYXNlLXRvZG8iIHdpdGhvdXQgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcKKwkgKiBjb21tYW5kLCBhcHBlbmRpbmcgaXQgdG8gImRvbmUiIGluc3RlYWQuCisJICovCisJaWYgKGlzX3JlYmFzZV9pKG9wdHMpKQorCQluZXh0Kys7CisKKwlmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJnRvZG9fbG9jaywgdG9kb19wYXRoLCAwKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IGxvY2sgJyVzJyIpLCB0b2RvX3BhdGgpOworCW9mZnNldCA9IGdldF9pdGVtX2xpbmVfb2Zmc2V0KHRvZG9fbGlzdCwgbmV4dCk7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIHRvZG9fbGlzdC0+YnVmLmJ1ZiArIG9mZnNldCwKKwkJCXRvZG9fbGlzdC0+YnVmLmxlbiAtIG9mZnNldCkgPCAwKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IHdyaXRlIHRvICclcyciKSwgdG9kb19wYXRoKTsKKwlpZiAoY29tbWl0X2xvY2tfZmlsZSgmdG9kb19sb2NrKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJmYWlsZWQgdG8gZmluYWxpemUgJyVzJyIpLCB0b2RvX3BhdGgpOworCisJaWYgKGlzX3JlYmFzZV9pKG9wdHMpICYmIG5leHQgPiAwKSB7CisJCWNvbnN0IGNoYXIgKmRvbmUgPSByZWJhc2VfcGF0aF9kb25lKCk7CisJCWludCBmZCA9IG9wZW4oZG9uZSwgT19DUkVBVCB8IE9fV1JPTkxZIHwgT19BUFBFTkQsIDA2NjYpOworCQlpbnQgcmV0ID0gMDsKKworCQlpZiAoZmQgPCAwKQorCQkJcmV0dXJuIDA7CisJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBnZXRfaXRlbV9saW5lKHRvZG9fbGlzdCwgbmV4dCAtIDEpLAorCQkJCSAgZ2V0X2l0ZW1fbGluZV9sZW5ndGgodG9kb19saXN0LCBuZXh0IC0gMSkpCisJCSAgICA8IDApCisJCQlyZXQgPSBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIpLCBkb25lKTsKKwkJaWYgKGNsb3NlKGZkKSA8IDApCisJCQlyZXQgPSBlcnJvcl9lcnJubyhfKCJmYWlsZWQgdG8gZmluYWxpemUgJyVzJyIpLCBkb25lKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2F2ZV9vcHRzKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwljb25zdCBjaGFyICpvcHRzX2ZpbGUgPSBnaXRfcGF0aF9vcHRzX2ZpbGUoKTsKKwlpbnQgcmVzID0gMDsKKworCWlmIChvcHRzLT5ub19jb21taXQpCisJCXJlcyB8PSBnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShvcHRzX2ZpbGUsCisJCQkJCSJvcHRpb25zLm5vLWNvbW1pdCIsICJ0cnVlIik7CisJaWYgKG9wdHMtPmVkaXQpCisJCXJlcyB8PSBnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShvcHRzX2ZpbGUsCisJCQkJCSJvcHRpb25zLmVkaXQiLCAidHJ1ZSIpOworCWlmIChvcHRzLT5hbGxvd19lbXB0eSkKKwkJcmVzIHw9IGdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KG9wdHNfZmlsZSwKKwkJCQkJIm9wdGlvbnMuYWxsb3ctZW1wdHkiLCAidHJ1ZSIpOworCWlmIChvcHRzLT5hbGxvd19lbXB0eV9tZXNzYWdlKQorCQlyZXMgfD0gZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkob3B0c19maWxlLAorCQkJCSJvcHRpb25zLmFsbG93LWVtcHR5LW1lc3NhZ2UiLCAidHJ1ZSIpOworCWlmIChvcHRzLT5rZWVwX3JlZHVuZGFudF9jb21taXRzKQorCQlyZXMgfD0gZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkob3B0c19maWxlLAorCQkJCSJvcHRpb25zLmtlZXAtcmVkdW5kYW50LWNvbW1pdHMiLCAidHJ1ZSIpOworCWlmIChvcHRzLT5zaWdub2ZmKQorCQlyZXMgfD0gZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkob3B0c19maWxlLAorCQkJCQkib3B0aW9ucy5zaWdub2ZmIiwgInRydWUiKTsKKwlpZiAob3B0cy0+cmVjb3JkX29yaWdpbikKKwkJcmVzIHw9IGdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KG9wdHNfZmlsZSwKKwkJCQkJIm9wdGlvbnMucmVjb3JkLW9yaWdpbiIsICJ0cnVlIik7CisJaWYgKG9wdHMtPmFsbG93X2ZmKQorCQlyZXMgfD0gZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkob3B0c19maWxlLAorCQkJCQkib3B0aW9ucy5hbGxvdy1mZiIsICJ0cnVlIik7CisJaWYgKG9wdHMtPm1haW5saW5lKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICIlZCIsIG9wdHMtPm1haW5saW5lKTsKKwkJcmVzIHw9IGdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KG9wdHNfZmlsZSwKKwkJCQkJIm9wdGlvbnMubWFpbmxpbmUiLCBidWYuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorCWlmIChvcHRzLT5zdHJhdGVneSkKKwkJcmVzIHw9IGdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KG9wdHNfZmlsZSwKKwkJCQkJIm9wdGlvbnMuc3RyYXRlZ3kiLCBvcHRzLT5zdHJhdGVneSk7CisJaWYgKG9wdHMtPmdwZ19zaWduKQorCQlyZXMgfD0gZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkob3B0c19maWxlLAorCQkJCQkib3B0aW9ucy5ncGctc2lnbiIsIG9wdHMtPmdwZ19zaWduKTsKKwlpZiAob3B0cy0+eG9wdHMpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBvcHRzLT54b3B0c19ucjsgaSsrKQorCQkJcmVzIHw9IGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGVfZ2VudGx5KG9wdHNfZmlsZSwKKwkJCQkJIm9wdGlvbnMuc3RyYXRlZ3ktb3B0aW9uIiwKKwkJCQkJb3B0cy0+eG9wdHNbaV0sICJeJCIsIDApOworCX0KKwlpZiAob3B0cy0+YWxsb3dfcmVyZXJlX2F1dG8pCisJCXJlcyB8PSBnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShvcHRzX2ZpbGUsCisJCQkJIm9wdGlvbnMuYWxsb3ctcmVyZXJlLWF1dG8iLAorCQkJCW9wdHMtPmFsbG93X3JlcmVyZV9hdXRvID09IFJFUkVSRV9BVVRPVVBEQVRFID8KKwkJCQkidHJ1ZSIgOiAiZmFsc2UiKTsKKworCWlmIChvcHRzLT5leHBsaWNpdF9jbGVhbnVwKQorCQlyZXMgfD0gZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkob3B0c19maWxlLAorCQkJCSJvcHRpb25zLmRlZmF1bHQtbXNnLWNsZWFudXAiLAorCQkJCWRlc2NyaWJlX2NsZWFudXBfbW9kZShvcHRzLT5kZWZhdWx0X21zZ19jbGVhbnVwKSk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBtYWtlX3BhdGNoKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICAgICBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCSAgICAgIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCByZXZfaW5mbyBsb2dfdHJlZV9vcHQ7CisJY29uc3QgY2hhciAqc3ViamVjdCwgKnA7CisJaW50IHJlcyA9IDA7CisKKwlwID0gc2hvcnRfY29tbWl0X25hbWUoY29tbWl0KTsKKwlpZiAod3JpdGVfbWVzc2FnZShwLCBzdHJsZW4ocCksIHJlYmFzZV9wYXRoX3N0b3BwZWRfc2hhKCksIDEpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJlcyB8PSB3cml0ZV9yZWJhc2VfaGVhZCgmY29tbWl0LT5vYmplY3Qub2lkKTsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy9wYXRjaCIsIGdldF9kaXIob3B0cykpOworCW1lbXNldCgmbG9nX3RyZWVfb3B0LCAwLCBzaXplb2YobG9nX3RyZWVfb3B0KSk7CisJcmVwb19pbml0X3JldmlzaW9ucyhyLCAmbG9nX3RyZWVfb3B0LCBOVUxMKTsKKwlsb2dfdHJlZV9vcHQuYWJicmV2ID0gMDsKKwlsb2dfdHJlZV9vcHQuZGlmZiA9IDE7CisJbG9nX3RyZWVfb3B0LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOworCWxvZ190cmVlX29wdC5kaXNhYmxlX3N0ZGluID0gMTsKKwlsb2dfdHJlZV9vcHQubm9fY29tbWl0X2lkID0gMTsKKwlsb2dfdHJlZV9vcHQuZGlmZm9wdC5maWxlID0gZm9wZW4oYnVmLmJ1ZiwgInciKTsKKwlsb2dfdHJlZV9vcHQuZGlmZm9wdC51c2VfY29sb3IgPSBHSVRfQ09MT1JfTkVWRVI7CisJaWYgKCFsb2dfdHJlZV9vcHQuZGlmZm9wdC5maWxlKQorCQlyZXMgfD0gZXJyb3JfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyIpLCBidWYuYnVmKTsKKwllbHNlIHsKKwkJcmVzIHw9IGxvZ190cmVlX2NvbW1pdCgmbG9nX3RyZWVfb3B0LCBjb21taXQpOworCQlmY2xvc2UobG9nX3RyZWVfb3B0LmRpZmZvcHQuZmlsZSk7CisJfQorCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy9tZXNzYWdlIiwgZ2V0X2RpcihvcHRzKSk7CisJaWYgKCFmaWxlX2V4aXN0cyhidWYuYnVmKSkgeworCQljb25zdCBjaGFyICplbmNvZGluZyA9IGdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKCk7CisJCWNvbnN0IGNoYXIgKmNvbW1pdF9idWZmZXIgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZyk7CisJCWZpbmRfY29tbWl0X3N1YmplY3QoY29tbWl0X2J1ZmZlciwgJnN1YmplY3QpOworCQlyZXMgfD0gd3JpdGVfbWVzc2FnZShzdWJqZWN0LCBzdHJsZW4oc3ViamVjdCksIGJ1Zi5idWYsIDEpOworCQl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgY29tbWl0X2J1ZmZlcik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBpbnRlbmRfdG9fYW1lbmQodm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWQ7CisJY2hhciAqcDsKKworCWlmIChnZXRfb2lkKCJIRUFEIiwgJmhlYWQpKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IHJlYWQgSEVBRCIpKTsKKworCXAgPSBvaWRfdG9faGV4KCZoZWFkKTsKKwlyZXR1cm4gd3JpdGVfbWVzc2FnZShwLCBzdHJsZW4ocCksIHJlYmFzZV9wYXRoX2FtZW5kKCksIDEpOworfQorCitzdGF0aWMgaW50IGVycm9yX3dpdGhfcGF0Y2goc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgIGNvbnN0IGNoYXIgKnN1YmplY3QsIGludCBzdWJqZWN0X2xlbiwKKwkJCSAgICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsCisJCQkgICAgaW50IGV4aXRfY29kZSwgaW50IHRvX2FtZW5kKQoreworCWlmIChjb21taXQpIHsKKwkJaWYgKG1ha2VfcGF0Y2gociwgY29tbWl0LCBvcHRzKSkKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKGNvcHlfZmlsZShyZWJhc2VfcGF0aF9tZXNzYWdlKCksCisJCQkgICAgIGdpdF9wYXRoX21lcmdlX21zZyhyKSwgMDY2NikpCisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gY29weSAnJXMnIHRvICclcyciKSwKKwkJCSAgICAgZ2l0X3BhdGhfbWVyZ2VfbXNnKHIpLCByZWJhc2VfcGF0aF9tZXNzYWdlKCkpOworCisJaWYgKHRvX2FtZW5kKSB7CisJCWlmIChpbnRlbmRfdG9fYW1lbmQoKSkKKwkJCXJldHVybiAtMTsKKworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCV8oIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKwkJCSAgIlxuIgorCQkJICAiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKwkJCSAgIlxuIgorCQkJICAiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisJCQkgICJcbiIKKwkJCSAgIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iKSwKKwkJCWdwZ19zaWduX29wdF9xdW90ZWQob3B0cykpOworCX0gZWxzZSBpZiAoZXhpdF9jb2RlKSB7CisJCWlmIChjb21taXQpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ291bGQgbm90IGFwcGx5ICVzLi4uICUuKnMiKSwKKwkJCQkgICBzaG9ydF9jb21taXRfbmFtZShjb21taXQpLCBzdWJqZWN0X2xlbiwgc3ViamVjdCk7CisJCWVsc2UKKwkJCS8qCisJCQkgKiBXZSBkb24ndCBoYXZlIHRoZSBoYXNoIG9mIHRoZSBwYXJlbnQgc28KKwkJCSAqIGp1c3QgcHJpbnQgdGhlIGxpbmUgZnJvbSB0aGUgdG9kbyBmaWxlLgorCQkJICovCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ291bGQgbm90IG1lcmdlICUuKnMiKSwKKwkJCQkgICBzdWJqZWN0X2xlbiwgc3ViamVjdCk7CisJfQorCisJcmV0dXJuIGV4aXRfY29kZTsKK30KKworc3RhdGljIGludCBlcnJvcl9mYWlsZWRfc3F1YXNoKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICAgICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsCisJCQkgICAgICAgaW50IHN1YmplY3RfbGVuLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnN1YmplY3QpCit7CisJaWYgKGNvcHlfZmlsZShyZWJhc2VfcGF0aF9tZXNzYWdlKCksIHJlYmFzZV9wYXRoX3NxdWFzaF9tc2coKSwgMDY2NikpCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyciKSwKKwkJCXJlYmFzZV9wYXRoX3NxdWFzaF9tc2coKSwgcmViYXNlX3BhdGhfbWVzc2FnZSgpKTsKKwl1bmxpbmsoZ2l0X3BhdGhfbWVyZ2VfbXNnKHIpKTsKKwlpZiAoY29weV9maWxlKGdpdF9wYXRoX21lcmdlX21zZyhyKSwgcmViYXNlX3BhdGhfbWVzc2FnZSgpLCAwNjY2KSkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIpLAorCQkJICAgICByZWJhc2VfcGF0aF9tZXNzYWdlKCksCisJCQkgICAgIGdpdF9wYXRoX21lcmdlX21zZyhyKSk7CisJcmV0dXJuIGVycm9yX3dpdGhfcGF0Y2gociwgY29tbWl0LCBzdWJqZWN0LCBzdWJqZWN0X2xlbiwgb3B0cywgMSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZG9fZXhlYyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqY29tbWFuZF9saW5lKQoreworCXN0cnVjdCBhcmd2X2FycmF5IGNoaWxkX2VudiA9IEFSR1ZfQVJSQVlfSU5JVDsKKwljb25zdCBjaGFyICpjaGlsZF9hcmd2W10gPSB7IE5VTEwsIE5VTEwgfTsKKwlpbnQgZGlydHksIHN0YXR1czsKKworCWZwcmludGYoc3RkZXJyLCBfKCJFeGVjdXRpbmc6ICVzXG4iKSwgY29tbWFuZF9saW5lKTsKKwljaGlsZF9hcmd2WzBdID0gY29tbWFuZF9saW5lOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNoaWxkX2VudiwgIkdJVF9ESVI9JXMiLCBhYnNvbHV0ZV9wYXRoKGdldF9naXRfZGlyKCkpKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZjaGlsZF9lbnYsICJHSVRfV09SS19UUkVFPSVzIiwKKwkJCSBhYnNvbHV0ZV9wYXRoKGdldF9naXRfd29ya190cmVlKCkpKTsKKwlzdGF0dXMgPSBydW5fY29tbWFuZF92X29wdF9jZF9lbnYoY2hpbGRfYXJndiwgUlVOX1VTSU5HX1NIRUxMLCBOVUxMLAorCQkJCQkgIGNoaWxkX2Vudi5hcmd2KTsKKworCS8qIGZvcmNlIHJlLXJlYWRpbmcgb2YgdGhlIGNhY2hlICovCisJaWYgKGRpc2NhcmRfaW5kZXgoci0+aW5kZXgpIDwgMCB8fCByZXBvX3JlYWRfaW5kZXgocikgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJlYWQgaW5kZXgiKSk7CisKKwlkaXJ0eSA9IHJlcXVpcmVfY2xlYW5fd29ya190cmVlKHIsICJyZWJhc2UiLCBOVUxMLCAxLCAxKTsKKworCWlmIChzdGF0dXMpIHsKKwkJd2FybmluZyhfKCJleGVjdXRpb24gZmFpbGVkOiAlc1xuJXMiCisJCQkgICJZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisJCQkgICJcbiIKKwkJCSAgIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisJCQkgICJcbiIpLAorCQkJY29tbWFuZF9saW5lLAorCQkJZGlydHkgPyBOXygiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSAiCisJCQkJIndvcmtpbmcgdHJlZVxuIikgOiAiIik7CisJCWlmIChzdGF0dXMgPT0gMTI3KQorCQkJLyogY29tbWFuZCBub3QgZm91bmQgKi8KKwkJCXN0YXR1cyA9IDE7CisJfSBlbHNlIGlmIChkaXJ0eSkgeworCQl3YXJuaW5nKF8oImV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICVzXG5idXQgIgorCQkJICAibGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorCQkJICAiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisJCQkgICJcbiIKKwkJCSAgIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisJCQkgICJcbiIpLCBjb21tYW5kX2xpbmUpOworCQlzdGF0dXMgPSAxOworCX0KKworCWFyZ3ZfYXJyYXlfY2xlYXIoJmNoaWxkX2Vudik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHNhZmVfYXBwZW5kKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXN0cnVjdCBsb2NrX2ZpbGUgbG9jayA9IExPQ0tfSU5JVDsKKwlpbnQgZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2NrLCBmaWxlbmFtZSwKKwkJCQkJICAgTE9DS19SRVBPUlRfT05fRVJST1IpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCBmaWxlbmFtZSwgMCkgPCAwICYmIGVycm5vICE9IEVOT0VOVCkgeworCQllcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCAnJXMnIiksIGZpbGVuYW1lKTsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfY29tcGxldGUoJmJ1ZiwgJ1xuJyk7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKCZidWYsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLmJ1ZiwgYnVmLmxlbikgPCAwKSB7CisJCWVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiksIGZpbGVuYW1lKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJmxvY2spIDwgMCkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwkJcmV0dXJuIGVycm9yKF8oImZhaWxlZCB0byBmaW5hbGl6ZSAnJXMnIiksIGZpbGVuYW1lKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkb19sYWJlbChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzID0gZ2V0X21haW5fcmVmX3N0b3JlKHIpOworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCXN0cnVjdCBzdHJidWYgcmVmX25hbWUgPSBTVFJCVUZfSU5JVCwgZXJyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWRfb2lkOworCisJaWYgKGxlbiA9PSAxICYmICpuYW1lID09ICcjJykKKwkJcmV0dXJuIGVycm9yKF8oImlsbGVnYWwgbGFiZWwgbmFtZTogJyUuKnMnIiksIGxlbiwgbmFtZSk7CisKKwlzdHJidWZfYWRkZigmcmVmX25hbWUsICJyZWZzL3Jld3JpdHRlbi8lLipzIiwgbGVuLCBuYW1lKTsKKwlzdHJidWZfYWRkZigmbXNnLCAicmViYXNlIChsYWJlbCkgJyUuKnMnIiwgbGVuLCBuYW1lKTsKKworCXRyYW5zYWN0aW9uID0gcmVmX3N0b3JlX3RyYW5zYWN0aW9uX2JlZ2luKHJlZnMsICZlcnIpOworCWlmICghdHJhbnNhY3Rpb24pIHsKKwkJZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCXJldCA9IC0xOworCX0gZWxzZSBpZiAoZ2V0X29pZCgiSEVBRCIsICZoZWFkX29pZCkpIHsKKwkJZXJyb3IoXygiY291bGQgbm90IHJlYWQgSEVBRCIpKTsKKwkJcmV0ID0gLTE7CisJfSBlbHNlIGlmIChyZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCByZWZfbmFtZS5idWYsICZoZWFkX29pZCwKKwkJCQkJICBOVUxMLCAwLCBtc2cuYnVmLCAmZXJyKSA8IDAgfHwKKwkJICAgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpIHsKKwkJZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCXJldCA9IC0xOworCX0KKwlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gc2FmZV9hcHBlbmQocmViYXNlX3BhdGhfcmVmc190b19kZWxldGUoKSwKKwkJCQkgICIlc1xuIiwgcmVmX25hbWUuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmcmVmX25hbWUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJlZmxvZ19tZXNzYWdlKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywKKwljb25zdCBjaGFyICpzdWJfYWN0aW9uLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKK3N0YXRpYyBpbnQgZG9fcmVzZXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAorCQkgICAgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBzdHJidWYgcmVmX25hbWUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2sgPSBMT0NLX0lOSVQ7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCB0cmVlICp0cmVlOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyB1bnBhY2tfdHJlZV9vcHRzOworCWludCByZXQgPSAwOworCisJaWYgKHJlcG9faG9sZF9sb2NrZWRfaW5kZXgociwgJmxvY2ssIExPQ0tfUkVQT1JUX09OX0VSUk9SKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChsZW4gPT0gMTAgJiYgIXN0cm5jbXAoIltuZXcgcm9vdF0iLCBuYW1lLCBsZW4pKSB7CisJCWlmICghb3B0cy0+aGF2ZV9zcXVhc2hfb250bykgeworCQkJY29uc3QgY2hhciAqaGV4OworCQkJaWYgKGNvbW1pdF90cmVlKCIiLCAwLCB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlLAorCQkJCQlOVUxMLCAmb3B0cy0+c3F1YXNoX29udG8sCisJCQkJCU5VTEwsIE5VTEwpKQorCQkJCXJldHVybiBlcnJvcihfKCJ3cml0aW5nIGZha2Ugcm9vdCBjb21taXQiKSk7CisJCQlvcHRzLT5oYXZlX3NxdWFzaF9vbnRvID0gMTsKKwkJCWhleCA9IG9pZF90b19oZXgoJm9wdHMtPnNxdWFzaF9vbnRvKTsKKwkJCWlmICh3cml0ZV9tZXNzYWdlKGhleCwgc3RybGVuKGhleCksCisJCQkJCSAgcmViYXNlX3BhdGhfc3F1YXNoX29udG8oKSwgMCkpCisJCQkJcmV0dXJuIGVycm9yKF8oIndyaXRpbmcgc3F1YXNoLW9udG8iKSk7CisJCX0KKwkJb2lkY3B5KCZvaWQsICZvcHRzLT5zcXVhc2hfb250byk7CisJfSBlbHNlIHsKKwkJaW50IGk7CisKKwkJLyogRGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgdGhlIGxhYmVsICovCisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJCWlmIChpc3NwYWNlKG5hbWVbaV0pKQorCQkJCWJyZWFrOworCQlsZW4gPSBpOworCisJCXN0cmJ1Zl9hZGRmKCZyZWZfbmFtZSwgInJlZnMvcmV3cml0dGVuLyUuKnMiLCBsZW4sIG5hbWUpOworCQlpZiAoZ2V0X29pZChyZWZfbmFtZS5idWYsICZvaWQpICYmCisJCSAgICBnZXRfb2lkKHJlZl9uYW1lLmJ1ZiArIHN0cmxlbigicmVmcy9yZXdyaXR0ZW4vIiksICZvaWQpKSB7CisJCQllcnJvcihfKCJjb3VsZCBub3QgcmVhZCAnJXMnIiksIHJlZl9uYW1lLmJ1Zik7CisJCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCQkJc3RyYnVmX3JlbGVhc2UoJnJlZl9uYW1lKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCW1lbXNldCgmdW5wYWNrX3RyZWVfb3B0cywgMCwgc2l6ZW9mKHVucGFja190cmVlX29wdHMpKTsKKwlzZXR1cF91bnBhY2tfdHJlZXNfcG9yY2VsYWluKCZ1bnBhY2tfdHJlZV9vcHRzLCAicmVzZXQiKTsKKwl1bnBhY2tfdHJlZV9vcHRzLmhlYWRfaWR4ID0gMTsKKwl1bnBhY2tfdHJlZV9vcHRzLnNyY19pbmRleCA9IHItPmluZGV4OworCXVucGFja190cmVlX29wdHMuZHN0X2luZGV4ID0gci0+aW5kZXg7CisJdW5wYWNrX3RyZWVfb3B0cy5mbiA9IG9uZXdheV9tZXJnZTsKKwl1bnBhY2tfdHJlZV9vcHRzLm1lcmdlID0gMTsKKwl1bnBhY2tfdHJlZV9vcHRzLnVwZGF0ZSA9IDE7CisJaW5pdF9jaGVja291dF9tZXRhZGF0YSgmdW5wYWNrX3RyZWVfb3B0cy5tZXRhLCBuYW1lLCAmb2lkLCBOVUxMKTsKKworCWlmIChyZXBvX3JlYWRfaW5kZXhfdW5tZXJnZWQocikpIHsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnJlZl9uYW1lKTsKKwkJcmV0dXJuIGVycm9yX3Jlc29sdmVfY29uZmxpY3QoXyhhY3Rpb25fbmFtZShvcHRzKSkpOworCX0KKworCWlmICghZmlsbF90cmVlX2Rlc2NyaXB0b3IociwgJmRlc2MsICZvaWQpKSB7CisJCWVycm9yKF8oImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiKSwgb2lkX3RvX2hleCgmb2lkKSk7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisJCWZyZWUoKHZvaWQgKilkZXNjLmJ1ZmZlcik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZyZWZfbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAodW5wYWNrX3RyZWVzKDEsICZkZXNjLCAmdW5wYWNrX3RyZWVfb3B0cykpIHsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwkJZnJlZSgodm9pZCAqKWRlc2MuYnVmZmVyKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnJlZl9uYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KCZvaWQpOworCXByaW1lX2NhY2hlX3RyZWUociwgci0+aW5kZXgsIHRyZWUpOworCisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleChyLT5pbmRleCwgJmxvY2ssIENPTU1JVF9MT0NLKSA8IDApCisJCXJldCA9IGVycm9yKF8oImNvdWxkIG5vdCB3cml0ZSBpbmRleCIpKTsKKwlmcmVlKCh2b2lkICopZGVzYy5idWZmZXIpOworCisJaWYgKCFyZXQpCisJCXJldCA9IHVwZGF0ZV9yZWYocmVmbG9nX21lc3NhZ2Uob3B0cywgInJlc2V0IiwgIiclLipzJyIsCisJCQkJCQlsZW4sIG5hbWUpLCAiSEVBRCIsICZvaWQsCisJCQkJIE5VTEwsIDAsIFVQREFURV9SRUZTX01TR19PTl9FUlIpOworCisJc3RyYnVmX3JlbGVhc2UoJnJlZl9uYW1lKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqbG9va3VwX2xhYmVsKGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgbGVuLAorCQkJCSAgIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwlzdHJidWZfYWRkZihidWYsICJyZWZzL3Jld3JpdHRlbi8lLipzIiwgbGVuLCBsYWJlbCk7CisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShidWYtPmJ1Zik7CisJaWYgKCFjb21taXQpIHsKKwkJLyogZmFsbCBiYWNrIHRvIG5vbi1yZXdyaXR0ZW4gcmVmIG9yIGNvbW1pdCAqLworCQlzdHJidWZfc3BsaWNlKGJ1ZiwgMCwgc3RybGVuKCJyZWZzL3Jld3JpdHRlbi8iKSwgIiIsIDApOworCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9ieV9uYW1lKGJ1Zi0+YnVmKTsKKwl9CisKKwlpZiAoIWNvbW1pdCkKKwkJZXJyb3IoXygiY291bGQgbm90IHJlc29sdmUgJyVzJyIpLCBidWYtPmJ1Zik7CisKKwlyZXR1cm4gY29tbWl0OworfQorCitzdGF0aWMgaW50IGRvX21lcmdlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICAgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgYXJnX2xlbiwKKwkJICAgIGludCBmbGFncywgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCWludCBydW5fY29tbWl0X2ZsYWdzID0gKGZsYWdzICYgVE9ET19FRElUX01FUkdFX01TRykgPworCQlFRElUX01TRyB8IFZFUklGWV9NU0cgOiAwOworCXN0cnVjdCBzdHJidWYgcmVmX25hbWUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdCwgKm1lcmdlX2NvbW1pdCwgKmk7CisJc3RydWN0IGNvbW1pdF9saXN0ICpiYXNlcywgKmosICpyZXZlcnNlZCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICp0b19tZXJnZSA9IE5VTEwsICoqdGFpbCA9ICZ0b19tZXJnZTsKKwljb25zdCBjaGFyICpzdHJhdGVneSA9ICFvcHRzLT54b3B0c19uciAmJgorCQkoIW9wdHMtPnN0cmF0ZWd5IHx8ICFzdHJjbXAob3B0cy0+c3RyYXRlZ3ksICJyZWN1cnNpdmUiKSkgPworCQlOVUxMIDogb3B0cy0+c3RyYXRlZ3k7CisJc3RydWN0IG1lcmdlX29wdGlvbnMgbzsKKwlpbnQgbWVyZ2VfYXJnX2xlbiwgb25lbGluZV9vZmZzZXQsIGNhbl9mYXN0X2ZvcndhcmQsIHJldCwgazsKKwlzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBsb2NrOworCWNvbnN0IGNoYXIgKnA7CisKKwlpZiAocmVwb19ob2xkX2xvY2tlZF9pbmRleChyLCAmbG9jaywgTE9DS19SRVBPUlRfT05fRVJST1IpIDwgMCkgeworCQlyZXQgPSAtMTsKKwkJZ290byBsZWF2ZV9tZXJnZTsKKwl9CisKKwloZWFkX2NvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUoIkhFQUQiKTsKKwlpZiAoIWhlYWRfY29tbWl0KSB7CisJCXJldCA9IGVycm9yKF8oImNhbm5vdCBtZXJnZSB3aXRob3V0IGEgY3VycmVudCByZXZpc2lvbiIpKTsKKwkJZ290byBsZWF2ZV9tZXJnZTsKKwl9CisKKwkvKgorCSAqIEZvciBvY3RvcHVzIG1lcmdlcywgdGhlIGFyZyBzdGFydHMgd2l0aCB0aGUgbGlzdCBvZiByZXZpc2lvbnMgdG8gYmUKKwkgKiBtZXJnZWQuIFRoZSBsaXN0IGlzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgJyMnIGFuZCB0aGUgb25lbGluZS4KKwkgKi8KKwltZXJnZV9hcmdfbGVuID0gb25lbGluZV9vZmZzZXQgPSBhcmdfbGVuOworCWZvciAocCA9IGFyZzsgcCAtIGFyZyA8IGFyZ19sZW47IHAgKz0gc3Ryc3BuKHAsICIgXHRcbiIpKSB7CisJCWlmICghKnApCisJCQlicmVhazsKKwkJaWYgKCpwID09ICcjJyAmJiAoIXBbMV0gfHwgaXNzcGFjZShwWzFdKSkpIHsKKwkJCXAgKz0gMSArIHN0cnNwbihwICsgMSwgIiBcdFxuIik7CisJCQlvbmVsaW5lX29mZnNldCA9IHAgLSBhcmc7CisJCQlicmVhazsKKwkJfQorCQlrID0gc3RyY3NwbihwLCAiIFx0XG4iKTsKKwkJaWYgKCFrKQorCQkJY29udGludWU7CisJCW1lcmdlX2NvbW1pdCA9IGxvb2t1cF9sYWJlbChwLCBrLCAmcmVmX25hbWUpOworCQlpZiAoIW1lcmdlX2NvbW1pdCkgeworCQkJcmV0ID0gZXJyb3IoXygidW5hYmxlIHRvIHBhcnNlICclLipzJyIpLCBrLCBwKTsKKwkJCWdvdG8gbGVhdmVfbWVyZ2U7CisJCX0KKwkJdGFpbCA9ICZjb21taXRfbGlzdF9pbnNlcnQobWVyZ2VfY29tbWl0LCB0YWlsKS0+bmV4dDsKKwkJcCArPSBrOworCQltZXJnZV9hcmdfbGVuID0gcCAtIGFyZzsKKwl9CisKKwlpZiAoIXRvX21lcmdlKSB7CisJCXJldCA9IGVycm9yKF8oIm5vdGhpbmcgdG8gbWVyZ2U6ICclLipzJyIpLCBhcmdfbGVuLCBhcmcpOworCQlnb3RvIGxlYXZlX21lcmdlOworCX0KKworCWlmIChvcHRzLT5oYXZlX3NxdWFzaF9vbnRvICYmCisJICAgIG9pZGVxKCZoZWFkX2NvbW1pdC0+b2JqZWN0Lm9pZCwgJm9wdHMtPnNxdWFzaF9vbnRvKSkgeworCQkvKgorCQkgKiBXaGVuIHRoZSB1c2VyIHRlbGxzIHVzIHRvICJtZXJnZSIgc29tZXRoaW5nIGludG8gYQorCQkgKiAiW25ldyByb290XSIsIGxldCdzIHNpbXBseSBmYXN0LWZvcndhcmQgdG8gdGhlIG1lcmdlIGhlYWQuCisJCSAqLworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCQlpZiAodG9fbWVyZ2UtPm5leHQpCisJCQlyZXQgPSBlcnJvcihfKCJvY3RvcHVzIG1lcmdlIGNhbm5vdCBiZSBleGVjdXRlZCBvbiAiCisJCQkJICAgICAgInRvcCBvZiBhIFtuZXcgcm9vdF0iKSk7CisJCWVsc2UKKwkJCXJldCA9IGZhc3RfZm9yd2FyZF90byhyLCAmdG9fbWVyZ2UtPml0ZW0tPm9iamVjdC5vaWQsCisJCQkJCSAgICAgICZoZWFkX2NvbW1pdC0+b2JqZWN0Lm9pZCwgMCwKKwkJCQkJICAgICAgb3B0cyk7CisJCWdvdG8gbGVhdmVfbWVyZ2U7CisJfQorCisJaWYgKGNvbW1pdCkgeworCQljb25zdCBjaGFyICplbmNvZGluZyA9IGdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKCk7CisJCWNvbnN0IGNoYXIgKm1lc3NhZ2UgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZyk7CisJCWNvbnN0IGNoYXIgKmJvZHk7CisJCWludCBsZW47CisKKwkJaWYgKCFtZXNzYWdlKSB7CisJCQlyZXQgPSBlcnJvcihfKCJjb3VsZCBub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIG9mICclcyciKSwKKwkJCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCQlnb3RvIGxlYXZlX21lcmdlOworCQl9CisJCXdyaXRlX2F1dGhvcl9zY3JpcHQobWVzc2FnZSk7CisJCWZpbmRfY29tbWl0X3N1YmplY3QobWVzc2FnZSwgJmJvZHkpOworCQlsZW4gPSBzdHJsZW4oYm9keSk7CisJCXJldCA9IHdyaXRlX21lc3NhZ2UoYm9keSwgbGVuLCBnaXRfcGF0aF9tZXJnZV9tc2cociksIDApOworCQl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgbWVzc2FnZSk7CisJCWlmIChyZXQpIHsKKwkJCWVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSAnJXMnIiksCisJCQkJICAgIGdpdF9wYXRoX21lcmdlX21zZyhyKSk7CisJCQlnb3RvIGxlYXZlX21lcmdlOworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJaW50IGxlbjsKKworCQlzdHJidWZfYWRkZigmYnVmLCAiYXV0aG9yICVzIiwgZ2l0X2F1dGhvcl9pbmZvKDApKTsKKwkJd3JpdGVfYXV0aG9yX3NjcmlwdChidWYuYnVmKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCisJCWlmIChvbmVsaW5lX29mZnNldCA8IGFyZ19sZW4pIHsKKwkJCXAgPSBhcmcgKyBvbmVsaW5lX29mZnNldDsKKwkJCWxlbiA9IGFyZ19sZW4gLSBvbmVsaW5lX29mZnNldDsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICJNZXJnZSAlcyAnJS4qcyciLAorCQkJCSAgICB0b19tZXJnZS0+bmV4dCA/ICJicmFuY2hlcyIgOiAiYnJhbmNoIiwKKwkJCQkgICAgbWVyZ2VfYXJnX2xlbiwgYXJnKTsKKwkJCXAgPSBidWYuYnVmOworCQkJbGVuID0gYnVmLmxlbjsKKwkJfQorCisJCXJldCA9IHdyaXRlX21lc3NhZ2UocCwgbGVuLCBnaXRfcGF0aF9tZXJnZV9tc2cociksIDApOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJaWYgKHJldCkgeworCQkJZXJyb3JfZXJybm8oXygiY291bGQgbm90IHdyaXRlICclcyciKSwKKwkJCQkgICAgZ2l0X3BhdGhfbWVyZ2VfbXNnKHIpKTsKKwkJCWdvdG8gbGVhdmVfbWVyZ2U7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIEhFQUQgaXMgbm90IGlkZW50aWNhbCB0byB0aGUgZmlyc3QgcGFyZW50IG9mIHRoZSBvcmlnaW5hbCBtZXJnZQorCSAqIGNvbW1pdCwgd2UgY2Fubm90IGZhc3QtZm9yd2FyZC4KKwkgKi8KKwljYW5fZmFzdF9mb3J3YXJkID0gb3B0cy0+YWxsb3dfZmYgJiYgY29tbWl0ICYmIGNvbW1pdC0+cGFyZW50cyAmJgorCQlvaWRlcSgmY29tbWl0LT5wYXJlbnRzLT5pdGVtLT5vYmplY3Qub2lkLAorCQkgICAgICAmaGVhZF9jb21taXQtPm9iamVjdC5vaWQpOworCisJLyoKKwkgKiBJZiBhbnkgbWVyZ2UgaGVhZCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCB3ZSBjYW5ub3QKKwkgKiBmYXN0LWZvcndhcmQuCisJICovCisJaWYgKGNhbl9mYXN0X2ZvcndhcmQpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwID0gY29tbWl0LT5wYXJlbnRzLT5uZXh0OworCisJCWZvciAoaiA9IHRvX21lcmdlOyBqICYmIHA7IGogPSBqLT5uZXh0LCBwID0gcC0+bmV4dCkKKwkJCWlmICghb2lkZXEoJmotPml0ZW0tPm9iamVjdC5vaWQsCisJCQkJICAgJnAtPml0ZW0tPm9iamVjdC5vaWQpKSB7CisJCQkJY2FuX2Zhc3RfZm9yd2FyZCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCS8qCisJCSAqIElmIHRoZSBudW1iZXIgb2YgbWVyZ2UgaGVhZHMgZGlmZmVycyBmcm9tIHRoZSBvcmlnaW5hbCBtZXJnZQorCQkgKiBjb21taXQsIHdlIGNhbm5vdCBmYXN0LWZvcndhcmQuCisJCSAqLworCQlpZiAoaiB8fCBwKQorCQkJY2FuX2Zhc3RfZm9yd2FyZCA9IDA7CisJfQorCisJaWYgKGNhbl9mYXN0X2ZvcndhcmQpIHsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwkJcmV0ID0gZmFzdF9mb3J3YXJkX3RvKHIsICZjb21taXQtPm9iamVjdC5vaWQsCisJCQkJICAgICAgJmhlYWRfY29tbWl0LT5vYmplY3Qub2lkLCAwLCBvcHRzKTsKKwkJaWYgKGZsYWdzICYgVE9ET19FRElUX01FUkdFX01TRykgeworCQkJcnVuX2NvbW1pdF9mbGFncyB8PSBBTUVORF9NU0c7CisJCQlnb3RvIGZhc3RfZm9yd2FyZF9lZGl0OworCQl9CisJCWdvdG8gbGVhdmVfbWVyZ2U7CisJfQorCisJaWYgKHN0cmF0ZWd5IHx8IHRvX21lcmdlLT5uZXh0KSB7CisJCS8qIE9jdG9wdXMgbWVyZ2UgKi8KKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJCWlmIChyZWFkX2Vudl9zY3JpcHQoJmNtZC5lbnZfYXJyYXkpKSB7CisJCQljb25zdCBjaGFyICpncGdfb3B0ID0gZ3BnX3NpZ25fb3B0X3F1b3RlZChvcHRzKTsKKworCQkJcmV0ID0gZXJyb3IoXyhzdGFnZWRfY2hhbmdlc19hZHZpY2UpLCBncGdfb3B0LCBncGdfb3B0KTsKKwkJCWdvdG8gbGVhdmVfbWVyZ2U7CisJCX0KKworCQljbWQuZ2l0X2NtZCA9IDE7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICJtZXJnZSIpOworCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLXMiKTsKKwkJaWYgKCFzdHJhdGVneSkKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICJvY3RvcHVzIik7CisJCWVsc2UgeworCQkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgc3RyYXRlZ3kpOworCQkJZm9yIChrID0gMDsgayA8IG9wdHMtPnhvcHRzX25yOyBrKyspCisJCQkJYXJndl9hcnJheV9wdXNoZigmY21kLmFyZ3MsCisJCQkJCQkgIi1YJXMiLCBvcHRzLT54b3B0c1trXSk7CisJCX0KKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tbm8tZWRpdCIpOworCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1uby1mZiIpOworCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1uby1sb2ciKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tbm8tc3RhdCIpOworCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLUYiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgZ2l0X3BhdGhfbWVyZ2VfbXNnKHIpKTsKKwkJaWYgKG9wdHMtPmdwZ19zaWduKQorCQkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgb3B0cy0+Z3BnX3NpZ24pOworCisJCS8qIEFkZCB0aGUgdGlwcyB0byBiZSBtZXJnZWQgKi8KKwkJZm9yIChqID0gdG9fbWVyZ2U7IGo7IGogPSBqLT5uZXh0KQorCQkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywKKwkJCQkJb2lkX3RvX2hleCgmai0+aXRlbS0+b2JqZWN0Lm9pZCkpOworCisJCXN0cmJ1Zl9yZWxlYXNlKCZyZWZfbmFtZSk7CisJCXVubGluayhnaXRfcGF0aF9jaGVycnlfcGlja19oZWFkKHIpKTsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCQlyZXQgPSBydW5fY29tbWFuZCgmY21kKTsKKworCQkvKiBmb3JjZSByZS1yZWFkaW5nIG9mIHRoZSBjYWNoZSAqLworCQlpZiAoIXJldCAmJiAoZGlzY2FyZF9pbmRleChyLT5pbmRleCkgPCAwIHx8CisJCQkgICAgIHJlcG9fcmVhZF9pbmRleChyKSA8IDApKQorCQkJcmV0ID0gZXJyb3IoXygiY291bGQgbm90IHJlYWQgaW5kZXgiKSk7CisJCWdvdG8gbGVhdmVfbWVyZ2U7CisJfQorCisJbWVyZ2VfY29tbWl0ID0gdG9fbWVyZ2UtPml0ZW07CisJYmFzZXMgPSBnZXRfbWVyZ2VfYmFzZXMoaGVhZF9jb21taXQsIG1lcmdlX2NvbW1pdCk7CisJaWYgKGJhc2VzICYmIG9pZGVxKCZtZXJnZV9jb21taXQtPm9iamVjdC5vaWQsCisJCQkgICAmYmFzZXMtPml0ZW0tPm9iamVjdC5vaWQpKSB7CisJCXJldCA9IDA7CisJCS8qIHNraXAgbWVyZ2luZyBhbiBhbmNlc3RvciBvZiBIRUFEICovCisJCWdvdG8gbGVhdmVfbWVyZ2U7CisJfQorCisJd3JpdGVfbWVzc2FnZShvaWRfdG9faGV4KCZtZXJnZV9jb21taXQtPm9iamVjdC5vaWQpLCB0aGVfaGFzaF9hbGdvLT5oZXhzeiwKKwkJICAgICAgZ2l0X3BhdGhfbWVyZ2VfaGVhZChyKSwgMCk7CisJd3JpdGVfbWVzc2FnZSgibm8tZmYiLCA1LCBnaXRfcGF0aF9tZXJnZV9tb2RlKHIpLCAwKTsKKworCWZvciAoaiA9IGJhc2VzOyBqOyBqID0gai0+bmV4dCkKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGotPml0ZW0sICZyZXZlcnNlZCk7CisJZnJlZV9jb21taXRfbGlzdChiYXNlcyk7CisKKwlyZXBvX3JlYWRfaW5kZXgocik7CisJaW5pdF9tZXJnZV9vcHRpb25zKCZvLCByKTsKKwlvLmJyYW5jaDEgPSAiSEVBRCI7CisJby5icmFuY2gyID0gcmVmX25hbWUuYnVmOworCW8uYnVmZmVyX291dHB1dCA9IDI7CisKKwlyZXQgPSBtZXJnZV9yZWN1cnNpdmUoJm8sIGhlYWRfY29tbWl0LCBtZXJnZV9jb21taXQsIHJldmVyc2VkLCAmaSk7CisJaWYgKHJldCA8PSAwKQorCQlmcHV0cyhvLm9idWYuYnVmLCBzdGRvdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZvLm9idWYpOworCWlmIChyZXQgPCAwKSB7CisJCWVycm9yKF8oImNvdWxkIG5vdCBldmVuIGF0dGVtcHQgdG8gbWVyZ2UgJyUuKnMnIiksCisJCSAgICAgIG1lcmdlX2FyZ19sZW4sIGFyZyk7CisJCWdvdG8gbGVhdmVfbWVyZ2U7CisJfQorCS8qCisJICogVGhlIHJldHVybiB2YWx1ZSBvZiBtZXJnZV9yZWN1cnNpdmUoKSBpcyAxIG9uIGNsZWFuLCBhbmQgMCBvbgorCSAqIHVuY2xlYW4gbWVyZ2UuCisJICoKKwkgKiBMZXQncyByZXZlcnNlIHRoYXQsIHNvIHRoYXQgZG9fbWVyZ2UoKSByZXR1cm5zIDAgdXBvbiBzdWNjZXNzIGFuZAorCSAqIDEgdXBvbiBmYWlsZWQgbWVyZ2UgKGtlZXBpbmcgdGhlIHJldHVybiB2YWx1ZSAtMSBmb3IgdGhlIGNhc2VzIHdoZXJlCisJICogd2Ugd2lsbCB3YW50IHRvIHJlc2NoZWR1bGUgdGhlIGBtZXJnZWAgY29tbWFuZCkuCisJICovCisJcmV0ID0gIXJldDsKKworCWlmIChyLT5pbmRleC0+Y2FjaGVfY2hhbmdlZCAmJgorCSAgICB3cml0ZV9sb2NrZWRfaW5kZXgoci0+aW5kZXgsICZsb2NrLCBDT01NSVRfTE9DSykpIHsKKwkJcmV0ID0gZXJyb3IoXygibWVyZ2U6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpKTsKKwkJZ290byBsZWF2ZV9tZXJnZTsKKwl9CisKKwlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCWlmIChyZXQpCisJCXJlcG9fcmVyZXJlKHIsIG9wdHMtPmFsbG93X3JlcmVyZV9hdXRvKTsKKwllbHNlCisJCS8qCisJCSAqIEluIGNhc2Ugb2YgcHJvYmxlbXMsIHdlIG5vdyB3YW50IHRvIHJldHVybiBhIHBvc2l0aXZlCisJCSAqIHZhbHVlIChhIG5lZ2F0aXZlIG9uZSB3b3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSBgbWVyZ2VgCisJCSAqIGNvbW1hbmQgbmVlZHMgdG8gYmUgcmVzY2hlZHVsZWQpLgorCQkgKi8KKwlmYXN0X2ZvcndhcmRfZWRpdDoKKwkJcmV0ID0gISFydW5fZ2l0X2NvbW1pdChyLCBnaXRfcGF0aF9tZXJnZV9tc2cociksIG9wdHMsCisJCQkJICAgICAgIHJ1bl9jb21taXRfZmxhZ3MpOworCitsZWF2ZV9tZXJnZToKKwlzdHJidWZfcmVsZWFzZSgmcmVmX25hbWUpOworCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisJZnJlZV9jb21taXRfbGlzdCh0b19tZXJnZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpc19maW5hbF9maXh1cChzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QpCit7CisJaW50IGkgPSB0b2RvX2xpc3QtPmN1cnJlbnQ7CisKKwlpZiAoIWlzX2ZpeHVwKHRvZG9fbGlzdC0+aXRlbXNbaV0uY29tbWFuZCkpCisJCXJldHVybiAwOworCisJd2hpbGUgKCsraSA8IHRvZG9fbGlzdC0+bnIpCisJCWlmIChpc19maXh1cCh0b2RvX2xpc3QtPml0ZW1zW2ldLmNvbW1hbmQpKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYgKCFpc19ub29wKHRvZG9fbGlzdC0+aXRlbXNbaV0uY29tbWFuZCkpCisJCQlicmVhazsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGVudW0gdG9kb19jb21tYW5kIHBlZWtfY29tbWFuZChzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsIGludCBvZmZzZXQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSB0b2RvX2xpc3QtPmN1cnJlbnQgKyBvZmZzZXQ7IGkgPCB0b2RvX2xpc3QtPm5yOyBpKyspCisJCWlmICghaXNfbm9vcCh0b2RvX2xpc3QtPml0ZW1zW2ldLmNvbW1hbmQpKQorCQkJcmV0dXJuIHRvZG9fbGlzdC0+aXRlbXNbaV0uY29tbWFuZDsKKworCXJldHVybiAtMTsKK30KKwordm9pZCBjcmVhdGVfYXV0b3N0YXNoKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpwYXRoLAorCQkgICAgICBjb25zdCBjaGFyICpkZWZhdWx0X3JlZmxvZ19hY3Rpb24pCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKwlpbnQgZmQ7CisKKwlmZCA9IHJlcG9faG9sZF9sb2NrZWRfaW5kZXgociwgJmxvY2tfZmlsZSwgMCk7CisJcmVmcmVzaF9pbmRleChyLT5pbmRleCwgUkVGUkVTSF9RVUlFVCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJaWYgKDAgPD0gZmQpCisJCXJlcG9fdXBkYXRlX2luZGV4X2lmX2FibGUociwgJmxvY2tfZmlsZSk7CisJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrX2ZpbGUpOworCisJaWYgKGhhc191bnN0YWdlZF9jaGFuZ2VzKHIsIDEpIHx8CisJICAgIGhhc191bmNvbW1pdHRlZF9jaGFuZ2VzKHIsIDEpKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHN0YXNoID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCQlhcmd2X2FycmF5X3B1c2hsKCZzdGFzaC5hcmdzLAorCQkJCSAic3Rhc2giLCAiY3JlYXRlIiwgImF1dG9zdGFzaCIsIE5VTEwpOworCQlzdGFzaC5naXRfY21kID0gMTsKKwkJc3Rhc2gubm9fc3RkaW4gPSAxOworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCWlmIChjYXB0dXJlX2NvbW1hbmQoJnN0YXNoLCAmYnVmLCBHSVRfTUFYX0hFWFNaKSkKKwkJCWRpZShfKCJDYW5ub3QgYXV0b3N0YXNoIikpOworCQlzdHJidWZfdHJpbV90cmFpbGluZ19uZXdsaW5lKCZidWYpOworCQlpZiAoZ2V0X29pZChidWYuYnVmLCAmb2lkKSkKKwkJCWRpZShfKCJVbmV4cGVjdGVkIHN0YXNoIHJlc3BvbnNlOiAnJXMnIiksCisJCQkgICAgYnVmLmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KCZidWYsICZvaWQsIERFRkFVTFRfQUJCUkVWKTsKKworCQlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChwYXRoKSkKKwkJCWRpZShfKCJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIpLAorCQkJICAgIHBhdGgpOworCQl3cml0ZV9maWxlKHBhdGgsICIlcyIsIG9pZF90b19oZXgoJm9pZCkpOworCQlwcmludGYoXygiQ3JlYXRlZCBhdXRvc3Rhc2g6ICVzXG4iKSwgYnVmLmJ1Zik7CisJCWlmIChyZXNldF9oZWFkKHIsIE5VTEwsICJyZXNldCAtLWhhcmQiLAorCQkJICAgICAgIE5VTEwsIFJFU0VUX0hFQURfSEFSRCwgTlVMTCwgTlVMTCwKKwkJCSAgICAgICBkZWZhdWx0X3JlZmxvZ19hY3Rpb24pIDwgMCkKKwkJCWRpZShfKCJjb3VsZCBub3QgcmVzZXQgLS1oYXJkIikpOworCisJCWlmIChkaXNjYXJkX2luZGV4KHItPmluZGV4KSA8IDAgfHwKKwkJCXJlcG9fcmVhZF9pbmRleChyKSA8IDApCisJCQlkaWUoXygiY291bGQgbm90IHJlYWQgaW5kZXgiKSk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgaW50IGFwcGx5X3NhdmVfYXV0b3N0YXNoX29pZChjb25zdCBjaGFyICpzdGFzaF9vaWQsIGludCBhdHRlbXB0X2FwcGx5KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCByZXQgPSAwOworCisJaWYgKGF0dGVtcHRfYXBwbHkpIHsKKwkJY2hpbGQuZ2l0X2NtZCA9IDE7CisJCWNoaWxkLm5vX3N0ZG91dCA9IDE7CisJCWNoaWxkLm5vX3N0ZGVyciA9IDE7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgInN0YXNoIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgImFwcGx5Iik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgc3Rhc2hfb2lkKTsKKwkJcmV0ID0gcnVuX2NvbW1hbmQoJmNoaWxkKTsKKwl9CisKKwlpZiAoYXR0ZW1wdF9hcHBseSAmJiAhcmV0KQorCQlmcHJpbnRmKHN0ZGVyciwgXygiQXBwbGllZCBhdXRvc3Rhc2guXG4iKSk7CisJZWxzZSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHN0b3JlID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJCXN0b3JlLmdpdF9jbWQgPSAxOworCQlhcmd2X2FycmF5X3B1c2goJnN0b3JlLmFyZ3MsICJzdGFzaCIpOworCQlhcmd2X2FycmF5X3B1c2goJnN0b3JlLmFyZ3MsICJzdG9yZSIpOworCQlhcmd2X2FycmF5X3B1c2goJnN0b3JlLmFyZ3MsICItbSIpOworCQlhcmd2X2FycmF5X3B1c2goJnN0b3JlLmFyZ3MsICJhdXRvc3Rhc2giKTsKKwkJYXJndl9hcnJheV9wdXNoKCZzdG9yZS5hcmdzLCAiLXEiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZzdG9yZS5hcmdzLCBzdGFzaF9vaWQpOworCQlpZiAocnVuX2NvbW1hbmQoJnN0b3JlKSkKKwkJCXJldCA9IGVycm9yKF8oImNhbm5vdCBzdG9yZSAlcyIpLCBzdGFzaF9vaWQpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCIlc1xuIgorCQkJCSAgIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisJCQkJICAiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IiCisJCQkJICAiIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdCBhbnkgdGltZS5cbiIpLAorCQkJCWF0dGVtcHRfYXBwbHkgPworCQkJCV8oIkFwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuIikgOgorCQkJCV8oIkF1dG9zdGFzaCBleGlzdHM7IGNyZWF0aW5nIGEgbmV3IHN0YXNoIGVudHJ5LiIpKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFwcGx5X3NhdmVfYXV0b3N0YXNoKGNvbnN0IGNoYXIgKnBhdGgsIGludCBhdHRlbXB0X2FwcGx5KQoreworCXN0cnVjdCBzdHJidWYgc3Rhc2hfb2lkID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXJlYWRfb25lbGluZXIoJnN0YXNoX29pZCwgcGF0aCwKKwkJCSAgIFJFQURfT05FTElORVJfU0tJUF9JRl9FTVBUWSkpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnN0YXNoX29pZCk7CisJCXJldHVybiAwOworCX0KKwlzdHJidWZfdHJpbSgmc3Rhc2hfb2lkKTsKKworCXJldCA9IGFwcGx5X3NhdmVfYXV0b3N0YXNoX29pZChzdGFzaF9vaWQuYnVmLCBhdHRlbXB0X2FwcGx5KTsKKworCXVubGluayhwYXRoKTsKKwlzdHJidWZfcmVsZWFzZSgmc3Rhc2hfb2lkKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc2F2ZV9hdXRvc3Rhc2goY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gYXBwbHlfc2F2ZV9hdXRvc3Rhc2gocGF0aCwgMCk7Cit9CisKK2ludCBhcHBseV9hdXRvc3Rhc2goY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gYXBwbHlfc2F2ZV9hdXRvc3Rhc2gocGF0aCwgMSk7Cit9CisKK2ludCBhcHBseV9hdXRvc3Rhc2hfb2lkKGNvbnN0IGNoYXIgKnN0YXNoX29pZCkKK3sKKwlyZXR1cm4gYXBwbHlfc2F2ZV9hdXRvc3Rhc2hfb2lkKHN0YXNoX29pZCwgMSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZWZsb2dfbWVzc2FnZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsCisJY29uc3QgY2hhciAqc3ViX2FjdGlvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpyZWZsb2dfYWN0aW9uID0gZ2V0ZW52KEdJVF9SRUZMT0dfQUNUSU9OKTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIHJlZmxvZ19hY3Rpb24gPyByZWZsb2dfYWN0aW9uIDogYWN0aW9uX25hbWUob3B0cykpOworCWlmIChzdWJfYWN0aW9uKQorCQlzdHJidWZfYWRkZigmYnVmLCAiICglcykiLCBzdWJfYWN0aW9uKTsKKwlpZiAoZm10KSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIjogIik7CisJCXN0cmJ1Zl92YWRkZigmYnVmLCBmbXQsIGFwKTsKKwl9CisJdmFfZW5kKGFwKTsKKworCXJldHVybiBidWYuYnVmOworfQorCitzdGF0aWMgaW50IHJ1bl9naXRfY2hlY2tvdXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywKKwkJCSAgICBjb25zdCBjaGFyICpjb21taXQsIGNvbnN0IGNoYXIgKmFjdGlvbikKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbWQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJaW50IHJldDsKKworCWNtZC5naXRfY21kID0gMTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICJjaGVja291dCIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIGNvbW1pdCk7CisJYXJndl9hcnJheV9wdXNoZigmY21kLmVudl9hcnJheSwgR0lUX1JFRkxPR19BQ1RJT04gIj0lcyIsIGFjdGlvbik7CisKKwlpZiAob3B0cy0+dmVyYm9zZSkKKwkJcmV0ID0gcnVuX2NvbW1hbmQoJmNtZCk7CisJZWxzZQorCQlyZXQgPSBydW5fY29tbWFuZF9zaWxlbnRfb25fc3VjY2VzcygmY21kKTsKKworCWlmICghcmV0KQorCQlkaXNjYXJkX2luZGV4KHItPmluZGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfb250byhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzLAorCQkJIGNvbnN0IGNoYXIgKm9udG9fbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb250bywKKwkJCSBjb25zdCBjaGFyICpvcmlnX2hlYWQpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY29uc3QgY2hhciAqYWN0aW9uID0gcmVmbG9nX21lc3NhZ2Uob3B0cywgInN0YXJ0IiwgImNoZWNrb3V0ICVzIiwgb250b19uYW1lKTsKKworCWlmIChnZXRfb2lkKG9yaWdfaGVhZCwgJm9pZCkpCisJCXJldHVybiBlcnJvcihfKCIlczogbm90IGEgdmFsaWQgT0lEIiksIG9yaWdfaGVhZCk7CisKKwlpZiAocnVuX2dpdF9jaGVja291dChyLCBvcHRzLCBvaWRfdG9faGV4KG9udG8pLCBhY3Rpb24pKSB7CisJCWFwcGx5X2F1dG9zdGFzaChyZWJhc2VfcGF0aF9hdXRvc3Rhc2goKSk7CisJCXNlcXVlbmNlcl9yZW1vdmVfc3RhdGUob3B0cyk7CisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgZGV0YWNoIEhFQUQiKSk7CisJfQorCisJcmV0dXJuIHVwZGF0ZV9yZWYoTlVMTCwgIk9SSUdfSEVBRCIsICZvaWQsIE5VTEwsIDAsIFVQREFURV9SRUZTX01TR19PTl9FUlIpOworfQorCitzdGF0aWMgaW50IHN0b3BwZWRfYXRfaGVhZChzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXRfbWVzc2FnZSBtZXNzYWdlOworCisJaWYgKGdldF9vaWQoIkhFQUQiLCAmaGVhZCkgfHwKKwkgICAgIShjb21taXQgPSBsb29rdXBfY29tbWl0KHIsICZoZWFkKSkgfHwKKwkgICAgcGFyc2VfY29tbWl0KGNvbW1pdCkgfHwgZ2V0X21lc3NhZ2UoY29tbWl0LCAmbWVzc2FnZSkpCisJCWZwcmludGYoc3RkZXJyLCBfKCJTdG9wcGVkIGF0IEhFQURcbiIpKTsKKwllbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIlN0b3BwZWQgYXQgJXNcbiIpLCBtZXNzYWdlLmxhYmVsKTsKKwkJZnJlZV9tZXNzYWdlKGNvbW1pdCwgJm1lc3NhZ2UpOworCX0KKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgY29uc3QgY2hhciByZXNjaGVkdWxlZF9hZHZpY2VbXSA9CitOXygiQ291bGQgbm90IGV4ZWN1dGUgdGhlIHRvZG8gY29tbWFuZFxuIgorIlxuIgorIiAgICAlLipzIgorIlxuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iKTsKKworc3RhdGljIGludCBwaWNrX2NvbW1pdHMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQlzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsCisJCQlzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJaW50IHJlcyA9IDAsIHJlc2NoZWR1bGUgPSAwOworCWNoYXIgKnByZXZfcmVmbG9nX2FjdGlvbjsKKworCS8qIE5vdGUgdGhhdCAwIGZvciAzcmQgcGFyYW1ldGVyIG9mIHNldGVudiBtZWFucyBzZXQgb25seSBpZiBub3Qgc2V0ICovCisJc2V0ZW52KEdJVF9SRUZMT0dfQUNUSU9OLCBhY3Rpb25fbmFtZShvcHRzKSwgMCk7CisJcHJldl9yZWZsb2dfYWN0aW9uID0geHN0cmR1cChnZXRlbnYoR0lUX1JFRkxPR19BQ1RJT04pKTsKKwlpZiAob3B0cy0+YWxsb3dfZmYpCisJCWFzc2VydCghKG9wdHMtPnNpZ25vZmYgfHwgb3B0cy0+bm9fY29tbWl0IHx8CisJCQkJb3B0cy0+cmVjb3JkX29yaWdpbiB8fCBvcHRzLT5lZGl0KSk7CisJaWYgKHJlYWRfYW5kX3JlZnJlc2hfY2FjaGUociwgb3B0cykpCisJCXJldHVybiAtMTsKKworCXdoaWxlICh0b2RvX2xpc3QtPmN1cnJlbnQgPCB0b2RvX2xpc3QtPm5yKSB7CisJCXN0cnVjdCB0b2RvX2l0ZW0gKml0ZW0gPSB0b2RvX2xpc3QtPml0ZW1zICsgdG9kb19saXN0LT5jdXJyZW50OworCQljb25zdCBjaGFyICphcmcgPSB0b2RvX2l0ZW1fZ2V0X2FyZyh0b2RvX2xpc3QsIGl0ZW0pOworCQlpbnQgY2hlY2tfdG9kbyA9IDA7CisKKwkJaWYgKHNhdmVfdG9kbyh0b2RvX2xpc3QsIG9wdHMpKQorCQkJcmV0dXJuIC0xOworCQlpZiAoaXNfcmViYXNlX2kob3B0cykpIHsKKwkJCWlmIChpdGVtLT5jb21tYW5kICE9IFRPRE9fQ09NTUVOVCkgeworCQkJCUZJTEUgKmYgPSBmb3BlbihyZWJhc2VfcGF0aF9tc2dudW0oKSwgInciKTsKKworCQkJCXRvZG9fbGlzdC0+ZG9uZV9ucisrOworCisJCQkJaWYgKGYpIHsKKwkJCQkJZnByaW50ZihmLCAiJWRcbiIsIHRvZG9fbGlzdC0+ZG9uZV9ucik7CisJCQkJCWZjbG9zZShmKTsKKwkJCQl9CisJCQkJaWYgKCFvcHRzLT5xdWlldCkKKwkJCQkJZnByaW50ZihzdGRlcnIsIF8oIlJlYmFzaW5nICglZC8lZCklcyIpLAorCQkJCQkJdG9kb19saXN0LT5kb25lX25yLAorCQkJCQkJdG9kb19saXN0LT50b3RhbF9uciwKKwkJCQkJCW9wdHMtPnZlcmJvc2UgPyAiXG4iIDogIlxyIik7CisJCQl9CisJCQl1bmxpbmsocmViYXNlX3BhdGhfbWVzc2FnZSgpKTsKKwkJCXVubGluayhyZWJhc2VfcGF0aF9hdXRob3Jfc2NyaXB0KCkpOworCQkJdW5saW5rKHJlYmFzZV9wYXRoX3N0b3BwZWRfc2hhKCkpOworCQkJdW5saW5rKHJlYmFzZV9wYXRoX2FtZW5kKCkpOworCQkJdW5saW5rKGdpdF9wYXRoX21lcmdlX2hlYWQocikpOworCQkJZGVsZXRlX3JlZihOVUxMLCAiUkVCQVNFX0hFQUQiLCBOVUxMLCBSRUZfTk9fREVSRUYpOworCisJCQlpZiAoaXRlbS0+Y29tbWFuZCA9PSBUT0RPX0JSRUFLKSB7CisJCQkJaWYgKCFvcHRzLT52ZXJib3NlKQorCQkJCQl0ZXJtX2NsZWFyX2xpbmUoKTsKKwkJCQlyZXR1cm4gc3RvcHBlZF9hdF9oZWFkKHIpOworCQkJfQorCQl9CisJCWlmIChpdGVtLT5jb21tYW5kIDw9IFRPRE9fU1FVQVNIKSB7CisJCQlpZiAoaXNfcmViYXNlX2kob3B0cykpCisJCQkJc2V0ZW52KEdJVF9SRUZMT0dfQUNUSU9OLCByZWZsb2dfbWVzc2FnZShvcHRzLAorCQkJCQljb21tYW5kX3RvX3N0cmluZyhpdGVtLT5jb21tYW5kKSwgTlVMTCksCisJCQkJCTEpOworCQkJcmVzID0gZG9fcGlja19jb21taXQociwgaXRlbS0+Y29tbWFuZCwgaXRlbS0+Y29tbWl0LAorCQkJCQkgICAgIG9wdHMsIGlzX2ZpbmFsX2ZpeHVwKHRvZG9fbGlzdCksCisJCQkJCSAgICAgJmNoZWNrX3RvZG8pOworCQkJaWYgKGlzX3JlYmFzZV9pKG9wdHMpKQorCQkJCXNldGVudihHSVRfUkVGTE9HX0FDVElPTiwgcHJldl9yZWZsb2dfYWN0aW9uLCAxKTsKKwkJCWlmIChpc19yZWJhc2VfaShvcHRzKSAmJiByZXMgPCAwKSB7CisJCQkJLyogUmVzY2hlZHVsZSAqLworCQkJCWFkdmlzZShfKHJlc2NoZWR1bGVkX2FkdmljZSksCisJCQkJICAgICAgIGdldF9pdGVtX2xpbmVfbGVuZ3RoKHRvZG9fbGlzdCwKKwkJCQkJCQkgICAgdG9kb19saXN0LT5jdXJyZW50KSwKKwkJCQkgICAgICAgZ2V0X2l0ZW1fbGluZSh0b2RvX2xpc3QsCisJCQkJCQkgICAgIHRvZG9fbGlzdC0+Y3VycmVudCkpOworCQkJCXRvZG9fbGlzdC0+Y3VycmVudC0tOworCQkJCWlmIChzYXZlX3RvZG8odG9kb19saXN0LCBvcHRzKSkKKwkJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJaWYgKGl0ZW0tPmNvbW1hbmQgPT0gVE9ET19FRElUKSB7CisJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gaXRlbS0+Y29tbWl0OworCQkJCWlmICghcmVzKSB7CisJCQkJCWlmICghb3B0cy0+dmVyYm9zZSkKKwkJCQkJCXRlcm1fY2xlYXJfbGluZSgpOworCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCV8oIlN0b3BwZWQgYXQgJXMuLi4gICUuKnNcbiIpLAorCQkJCQkJc2hvcnRfY29tbWl0X25hbWUoY29tbWl0KSwKKwkJCQkJCWl0ZW0tPmFyZ19sZW4sIGFyZyk7CisJCQkJfQorCQkJCXJldHVybiBlcnJvcl93aXRoX3BhdGNoKHIsIGNvbW1pdCwKKwkJCQkJYXJnLCBpdGVtLT5hcmdfbGVuLCBvcHRzLCByZXMsICFyZXMpOworCQkJfQorCQkJaWYgKGlzX3JlYmFzZV9pKG9wdHMpICYmICFyZXMpCisJCQkJcmVjb3JkX2luX3Jld3JpdHRlbigmaXRlbS0+Y29tbWl0LT5vYmplY3Qub2lkLAorCQkJCQlwZWVrX2NvbW1hbmQodG9kb19saXN0LCAxKSk7CisJCQlpZiAocmVzICYmIGlzX2ZpeHVwKGl0ZW0tPmNvbW1hbmQpKSB7CisJCQkJaWYgKHJlcyA9PSAxKQorCQkJCQlpbnRlbmRfdG9fYW1lbmQoKTsKKwkJCQlyZXR1cm4gZXJyb3JfZmFpbGVkX3NxdWFzaChyLCBpdGVtLT5jb21taXQsIG9wdHMsCisJCQkJCWl0ZW0tPmFyZ19sZW4sIGFyZyk7CisJCQl9IGVsc2UgaWYgKHJlcyAmJiBpc19yZWJhc2VfaShvcHRzKSAmJiBpdGVtLT5jb21taXQpIHsKKwkJCQlpbnQgdG9fYW1lbmQgPSAwOworCQkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBhcmUgcmV3b3JkaW5nIGFuZCBoYXZlIGVpdGhlcgorCQkJCSAqIGZhc3QtZm9yd2FyZGVkIGFscmVhZHksIG9yIGFyZSBhYm91dCB0bworCQkJCSAqIGNyZWF0ZSBhIG5ldyByb290IGNvbW1pdCwgd2Ugd2FudCB0byBhbWVuZCwKKwkJCQkgKiBvdGhlcndpc2Ugd2UgZG8gbm90LgorCQkJCSAqLworCQkJCWlmIChpdGVtLT5jb21tYW5kID09IFRPRE9fUkVXT1JEICYmCisJCQkJICAgICFnZXRfb2lkKCJIRUFEIiwgJm9pZCkgJiYKKwkJCQkgICAgKG9pZGVxKCZpdGVtLT5jb21taXQtPm9iamVjdC5vaWQsICZvaWQpIHx8CisJCQkJICAgICAob3B0cy0+aGF2ZV9zcXVhc2hfb250byAmJgorCQkJCSAgICAgIG9pZGVxKCZvcHRzLT5zcXVhc2hfb250bywgJm9pZCkpKSkKKwkJCQkJdG9fYW1lbmQgPSAxOworCisJCQkJcmV0dXJuIHJlcyB8IGVycm9yX3dpdGhfcGF0Y2gociwgaXRlbS0+Y29tbWl0LAorCQkJCQkJYXJnLCBpdGVtLT5hcmdfbGVuLCBvcHRzLAorCQkJCQkJcmVzLCB0b19hbWVuZCk7CisJCQl9CisJCX0gZWxzZSBpZiAoaXRlbS0+Y29tbWFuZCA9PSBUT0RPX0VYRUMpIHsKKwkJCWNoYXIgKmVuZF9vZl9hcmcgPSAoY2hhciAqKShhcmcgKyBpdGVtLT5hcmdfbGVuKTsKKwkJCWludCBzYXZlZCA9ICplbmRfb2ZfYXJnOworCisJCQlpZiAoIW9wdHMtPnZlcmJvc2UpCisJCQkJdGVybV9jbGVhcl9saW5lKCk7CisJCQkqZW5kX29mX2FyZyA9ICdcMCc7CisJCQlyZXMgPSBkb19leGVjKHIsIGFyZyk7CisJCQkqZW5kX29mX2FyZyA9IHNhdmVkOworCisJCQlpZiAocmVzKSB7CisJCQkJaWYgKG9wdHMtPnJlc2NoZWR1bGVfZmFpbGVkX2V4ZWMpCisJCQkJCXJlc2NoZWR1bGUgPSAxOworCQkJfQorCQkJY2hlY2tfdG9kbyA9IDE7CisJCX0gZWxzZSBpZiAoaXRlbS0+Y29tbWFuZCA9PSBUT0RPX0xBQkVMKSB7CisJCQlpZiAoKHJlcyA9IGRvX2xhYmVsKHIsIGFyZywgaXRlbS0+YXJnX2xlbikpKQorCQkJCXJlc2NoZWR1bGUgPSAxOworCQl9IGVsc2UgaWYgKGl0ZW0tPmNvbW1hbmQgPT0gVE9ET19SRVNFVCkgeworCQkJaWYgKChyZXMgPSBkb19yZXNldChyLCBhcmcsIGl0ZW0tPmFyZ19sZW4sIG9wdHMpKSkKKwkJCQlyZXNjaGVkdWxlID0gMTsKKwkJfSBlbHNlIGlmIChpdGVtLT5jb21tYW5kID09IFRPRE9fTUVSR0UpIHsKKwkJCWlmICgocmVzID0gZG9fbWVyZ2UociwgaXRlbS0+Y29tbWl0LAorCQkJCQkgICAgYXJnLCBpdGVtLT5hcmdfbGVuLAorCQkJCQkgICAgaXRlbS0+ZmxhZ3MsIG9wdHMpKSA8IDApCisJCQkJcmVzY2hlZHVsZSA9IDE7CisJCQllbHNlIGlmIChpdGVtLT5jb21taXQpCisJCQkJcmVjb3JkX2luX3Jld3JpdHRlbigmaXRlbS0+Y29tbWl0LT5vYmplY3Qub2lkLAorCQkJCQkJICAgIHBlZWtfY29tbWFuZCh0b2RvX2xpc3QsIDEpKTsKKwkJCWlmIChyZXMgPiAwKQorCQkJCS8qIGZhaWxlZCB3aXRoIG1lcmdlIGNvbmZsaWN0cyAqLworCQkJCXJldHVybiBlcnJvcl93aXRoX3BhdGNoKHIsIGl0ZW0tPmNvbW1pdCwKKwkJCQkJCQlhcmcsIGl0ZW0tPmFyZ19sZW4sCisJCQkJCQkJb3B0cywgcmVzLCAwKTsKKwkJfSBlbHNlIGlmICghaXNfbm9vcChpdGVtLT5jb21tYW5kKSkKKwkJCXJldHVybiBlcnJvcihfKCJ1bmtub3duIGNvbW1hbmQgJWQiKSwgaXRlbS0+Y29tbWFuZCk7CisKKwkJaWYgKHJlc2NoZWR1bGUpIHsKKwkJCWFkdmlzZShfKHJlc2NoZWR1bGVkX2FkdmljZSksCisJCQkgICAgICAgZ2V0X2l0ZW1fbGluZV9sZW5ndGgodG9kb19saXN0LAorCQkJCQkJICAgIHRvZG9fbGlzdC0+Y3VycmVudCksCisJCQkgICAgICAgZ2V0X2l0ZW1fbGluZSh0b2RvX2xpc3QsIHRvZG9fbGlzdC0+Y3VycmVudCkpOworCQkJdG9kb19saXN0LT5jdXJyZW50LS07CisJCQlpZiAoc2F2ZV90b2RvKHRvZG9fbGlzdCwgb3B0cykpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKGl0ZW0tPmNvbW1pdCkKKwkJCQlyZXR1cm4gZXJyb3Jfd2l0aF9wYXRjaChyLAorCQkJCQkJCWl0ZW0tPmNvbW1pdCwKKwkJCQkJCQlhcmcsIGl0ZW0tPmFyZ19sZW4sCisJCQkJCQkJb3B0cywgcmVzLCAwKTsKKwkJfSBlbHNlIGlmIChpc19yZWJhc2VfaShvcHRzKSAmJiBjaGVja190b2RvICYmICFyZXMpIHsKKwkJCXN0cnVjdCBzdGF0IHN0OworCisJCQlpZiAoc3RhdChnZXRfdG9kb19wYXRoKG9wdHMpLCAmc3QpKSB7CisJCQkJcmVzID0gZXJyb3JfZXJybm8oXygiY291bGQgbm90IHN0YXQgJyVzJyIpLAorCQkJCQkJICBnZXRfdG9kb19wYXRoKG9wdHMpKTsKKwkJCX0gZWxzZSBpZiAobWF0Y2hfc3RhdF9kYXRhKCZ0b2RvX2xpc3QtPnN0YXQsICZzdCkpIHsKKwkJCQkvKiBSZXJlYWQgdGhlIHRvZG8gZmlsZSBpZiBpdCBoYXMgY2hhbmdlZC4gKi8KKwkJCQl0b2RvX2xpc3RfcmVsZWFzZSh0b2RvX2xpc3QpOworCQkJCWlmIChyZWFkX3BvcHVsYXRlX3RvZG8ociwgdG9kb19saXN0LCBvcHRzKSkKKwkJCQkJcmVzID0gLTE7IC8qIG1lc3NhZ2Ugd2FzIHByaW50ZWQgKi8KKwkJCQkvKiBgY3VycmVudGAgd2lsbCBiZSBpbmNyZW1lbnRlZCBiZWxvdyAqLworCQkJCXRvZG9fbGlzdC0+Y3VycmVudCA9IC0xOworCQkJfQorCQl9CisKKwkJdG9kb19saXN0LT5jdXJyZW50Kys7CisJCWlmIChyZXMpCisJCQlyZXR1cm4gcmVzOworCX0KKworCWlmIChpc19yZWJhc2VfaShvcHRzKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGhlYWRfcmVmID0gU1RSQlVGX0lOSVQsIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQkvKiBTdG9wcGVkIGluIHRoZSBtaWRkbGUsIGFzIHBsYW5uZWQ/ICovCisJCWlmICh0b2RvX2xpc3QtPmN1cnJlbnQgPCB0b2RvX2xpc3QtPm5yKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKHJlYWRfb25lbGluZXIoJmhlYWRfcmVmLCByZWJhc2VfcGF0aF9oZWFkX25hbWUoKSwgMCkgJiYKKwkJCQlzdGFydHNfd2l0aChoZWFkX3JlZi5idWYsICJyZWZzLyIpKSB7CisJCQljb25zdCBjaGFyICptc2c7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWQsIG9yaWc7CisJCQlpbnQgcmVzOworCisJCQlpZiAoZ2V0X29pZCgiSEVBRCIsICZoZWFkKSkgeworCQkJCXJlcyA9IGVycm9yKF8oImNhbm5vdCByZWFkIEhFQUQiKSk7CitjbGVhbnVwX2hlYWRfcmVmOgorCQkJCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkX3JlZik7CisJCQkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCQkJcmV0dXJuIHJlczsKKwkJCX0KKwkJCWlmICghcmVhZF9vbmVsaW5lcigmYnVmLCByZWJhc2VfcGF0aF9vcmlnX2hlYWQoKSwgMCkgfHwKKwkJCQkJZ2V0X29pZF9oZXgoYnVmLmJ1ZiwgJm9yaWcpKSB7CisJCQkJcmVzID0gZXJyb3IoXygiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIikpOworCQkJCWdvdG8gY2xlYW51cF9oZWFkX3JlZjsKKwkJCX0KKwkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCWlmICghcmVhZF9vbmVsaW5lcigmYnVmLCByZWJhc2VfcGF0aF9vbnRvKCksIDApKSB7CisJCQkJcmVzID0gZXJyb3IoXygiY291bGQgbm90IHJlYWQgJ29udG8nIikpOworCQkJCWdvdG8gY2xlYW51cF9oZWFkX3JlZjsKKwkJCX0KKwkJCW1zZyA9IHJlZmxvZ19tZXNzYWdlKG9wdHMsICJmaW5pc2giLCAiJXMgb250byAlcyIsCisJCQkJaGVhZF9yZWYuYnVmLCBidWYuYnVmKTsKKwkJCWlmICh1cGRhdGVfcmVmKG1zZywgaGVhZF9yZWYuYnVmLCAmaGVhZCwgJm9yaWcsCisJCQkJICAgICAgIFJFRl9OT19ERVJFRiwgVVBEQVRFX1JFRlNfTVNHX09OX0VSUikpIHsKKwkJCQlyZXMgPSBlcnJvcihfKCJjb3VsZCBub3QgdXBkYXRlICVzIiksCisJCQkJCWhlYWRfcmVmLmJ1Zik7CisJCQkJZ290byBjbGVhbnVwX2hlYWRfcmVmOworCQkJfQorCQkJbXNnID0gcmVmbG9nX21lc3NhZ2Uob3B0cywgImZpbmlzaCIsICJyZXR1cm5pbmcgdG8gJXMiLAorCQkJCWhlYWRfcmVmLmJ1Zik7CisJCQlpZiAoY3JlYXRlX3N5bXJlZigiSEVBRCIsIGhlYWRfcmVmLmJ1ZiwgbXNnKSkgeworCQkJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCB1cGRhdGUgSEVBRCB0byAlcyIpLAorCQkJCQloZWFkX3JlZi5idWYpOworCQkJCWdvdG8gY2xlYW51cF9oZWFkX3JlZjsKKwkJCX0KKwkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJfQorCisJCWlmIChvcHRzLT52ZXJib3NlKSB7CisJCQlzdHJ1Y3QgcmV2X2luZm8gbG9nX3RyZWVfb3B0OworCQkJc3RydWN0IG9iamVjdF9pZCBvcmlnLCBoZWFkOworCisJCQltZW1zZXQoJmxvZ190cmVlX29wdCwgMCwgc2l6ZW9mKGxvZ190cmVlX29wdCkpOworCQkJcmVwb19pbml0X3JldmlzaW9ucyhyLCAmbG9nX3RyZWVfb3B0LCBOVUxMKTsKKwkJCWxvZ190cmVlX29wdC5kaWZmID0gMTsKKwkJCWxvZ190cmVlX29wdC5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPQorCQkJCURJRkZfRk9STUFUX0RJRkZTVEFUOworCQkJbG9nX3RyZWVfb3B0LmRpc2FibGVfc3RkaW4gPSAxOworCisJCQlpZiAocmVhZF9vbmVsaW5lcigmYnVmLCByZWJhc2VfcGF0aF9vcmlnX2hlYWQoKSwgMCkgJiYKKwkJCSAgICAhZ2V0X29pZChidWYuYnVmLCAmb3JpZykgJiYKKwkJCSAgICAhZ2V0X29pZCgiSEVBRCIsICZoZWFkKSkgeworCQkJCWRpZmZfdHJlZV9vaWQoJm9yaWcsICZoZWFkLCAiIiwKKwkJCQkJICAgICAgJmxvZ190cmVlX29wdC5kaWZmb3B0KTsKKwkJCQlsb2dfdHJlZV9kaWZmX2ZsdXNoKCZsb2dfdHJlZV9vcHQpOworCQkJfQorCQl9CisJCWZsdXNoX3Jld3JpdHRlbl9wZW5kaW5nKCk7CisJCWlmICghc3RhdChyZWJhc2VfcGF0aF9yZXdyaXR0ZW5fbGlzdCgpLCAmc3QpICYmCisJCQkJc3Quc3Rfc2l6ZSA+IDApIHsKKwkJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQkJY29uc3QgY2hhciAqcG9zdF9yZXdyaXRlX2hvb2sgPQorCQkJCWZpbmRfaG9vaygicG9zdC1yZXdyaXRlIik7CisKKwkJCWNoaWxkLmluID0gb3BlbihyZWJhc2VfcGF0aF9yZXdyaXR0ZW5fbGlzdCgpLCBPX1JET05MWSk7CisJCQljaGlsZC5naXRfY21kID0gMTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgIm5vdGVzIik7CisJCQlhcmd2X2FycmF5X3B1c2goJmNoaWxkLmFyZ3MsICJjb3B5Iik7CisJCQlhcmd2X2FycmF5X3B1c2goJmNoaWxkLmFyZ3MsICItLWZvci1yZXdyaXRlPXJlYmFzZSIpOworCQkJLyogd2UgZG9uJ3QgY2FyZSBpZiB0aGlzIGNvcHlpbmcgZmFpbGVkICovCisJCQlydW5fY29tbWFuZCgmY2hpbGQpOworCisJCQlpZiAocG9zdF9yZXdyaXRlX2hvb2spIHsKKwkJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBob29rID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJCQkJaG9vay5pbiA9IG9wZW4ocmViYXNlX3BhdGhfcmV3cml0dGVuX2xpc3QoKSwKKwkJCQkJT19SRE9OTFkpOworCQkJCWhvb2suc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisJCQkJaG9vay50cmFjZTJfaG9va19uYW1lID0gInBvc3QtcmV3cml0ZSI7CisJCQkJYXJndl9hcnJheV9wdXNoKCZob29rLmFyZ3MsIHBvc3RfcmV3cml0ZV9ob29rKTsKKwkJCQlhcmd2X2FycmF5X3B1c2goJmhvb2suYXJncywgInJlYmFzZSIpOworCQkJCS8qIHdlIGRvbid0IGNhcmUgaWYgdGhpcyBob29rIGZhaWxlZCAqLworCQkJCXJ1bl9jb21tYW5kKCZob29rKTsKKwkJCX0KKwkJfQorCQlhcHBseV9hdXRvc3Rhc2gocmViYXNlX3BhdGhfYXV0b3N0YXNoKCkpOworCisJCWlmICghb3B0cy0+cXVpZXQpIHsKKwkJCWlmICghb3B0cy0+dmVyYm9zZSkKKwkJCQl0ZXJtX2NsZWFyX2xpbmUoKTsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCV8oIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkICVzLlxuIiksCisJCQkJaGVhZF9yZWYuYnVmKTsKKwkJfQorCisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlzdHJidWZfcmVsZWFzZSgmaGVhZF9yZWYpOworCX0KKworCS8qCisJICogU2VxdWVuY2Ugb2YgcGlja3MgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5OyBjbGVhbnVwIGJ5CisJICogcmVtb3ZpbmcgdGhlIC5naXQvc2VxdWVuY2VyIGRpcmVjdG9yeQorCSAqLworCXJldHVybiBzZXF1ZW5jZXJfcmVtb3ZlX3N0YXRlKG9wdHMpOworfQorCitzdGF0aWMgaW50IGNvbnRpbnVlX3NpbmdsZV9waWNrKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgImNvbW1pdCIsIE5VTEwgfTsKKworCWlmICghZmlsZV9leGlzdHMoZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZChyKSkgJiYKKwkgICAgIWZpbGVfZXhpc3RzKGdpdF9wYXRoX3JldmVydF9oZWFkKHIpKSkKKwkJcmV0dXJuIGVycm9yKF8oIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIpKTsKKwlyZXR1cm4gcnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgUlVOX0dJVF9DTUQpOworfQorCitzdGF0aWMgaW50IGNvbW1pdF9zdGFnZWRfY2hhbmdlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzLAorCQkJCSBzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QpCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gQUxMT1dfRU1QVFkgfCBFRElUX01TRzsKKwl1bnNpZ25lZCBpbnQgZmluYWxfZml4dXAgPSAwLCBpc19jbGVhbjsKKworCWlmIChoYXNfdW5zdGFnZWRfY2hhbmdlcyhyLCAxKSkKKwkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIikpOworCisJaXNfY2xlYW4gPSAhaGFzX3VuY29tbWl0dGVkX2NoYW5nZXMociwgMCk7CisKKwlpZiAoZmlsZV9leGlzdHMocmViYXNlX3BhdGhfYW1lbmQoKSkpIHsKKwkJc3RydWN0IHN0cmJ1ZiByZXYgPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IG9iamVjdF9pZCBoZWFkLCB0b19hbWVuZDsKKworCQlpZiAoZ2V0X29pZCgiSEVBRCIsICZoZWFkKSkKKwkJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgYW1lbmQgbm9uLWV4aXN0aW5nIGNvbW1pdCIpKTsKKwkJaWYgKCFyZWFkX29uZWxpbmVyKCZyZXYsIHJlYmFzZV9wYXRoX2FtZW5kKCksIDApKQorCQkJcmV0dXJuIGVycm9yKF8oImludmFsaWQgZmlsZTogJyVzJyIpLCByZWJhc2VfcGF0aF9hbWVuZCgpKTsKKwkJaWYgKGdldF9vaWRfaGV4KHJldi5idWYsICZ0b19hbWVuZCkpCisJCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCBjb250ZW50czogJyVzJyIpLAorCQkJCXJlYmFzZV9wYXRoX2FtZW5kKCkpOworCQlpZiAoIWlzX2NsZWFuICYmICFvaWRlcSgmaGVhZCwgJnRvX2FtZW5kKSkKKwkJCXJldHVybiBlcnJvcihfKCJcbllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciAiCisJCQkJICAgICAgICJ3b3JraW5nIHRyZWUuIFBsZWFzZSwgY29tbWl0IHRoZW1cbiIKKwkJCQkgICAgICAgImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAiCisJCQkJICAgICAgICItLWNvbnRpbnVlJyBhZ2Fpbi4iKSk7CisJCS8qCisJCSAqIFdoZW4gc2tpcHBpbmcgYSBmYWlsZWQgZml4dXAvc3F1YXNoLCB3ZSBuZWVkIHRvIGVkaXQgdGhlCisJCSAqIGNvbW1pdCBtZXNzYWdlLCB0aGUgY3VycmVudCBmaXh1cCBsaXN0IGFuZCBjb3VudCwgYW5kIGlmIGl0CisJCSAqIHdhcyB0aGUgbGFzdCBmaXh1cC9zcXVhc2ggaW4gdGhlIGNoYWluLCB3ZSBuZWVkIHRvIGNsZWFuIHVwCisJCSAqIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgaWYgdGhlcmUgd2FzIGEgc3F1YXNoLCBsZXQgdGhlIHVzZXIKKwkJICogZWRpdCBpdC4KKwkJICovCisJCWlmICghaXNfY2xlYW4gfHwgIW9wdHMtPmN1cnJlbnRfZml4dXBfY291bnQpCisJCQk7IC8qIHRoaXMgaXMgbm90IHRoZSBmaW5hbCBmaXh1cCAqLworCQllbHNlIGlmICghb2lkZXEoJmhlYWQsICZ0b19hbWVuZCkgfHwKKwkJCSAhZmlsZV9leGlzdHMocmViYXNlX3BhdGhfc3RvcHBlZF9zaGEoKSkpIHsKKwkJCS8qIHdhcyBhIGZpbmFsIGZpeHVwIG9yIHNxdWFzaCBkb25lIG1hbnVhbGx5PyAqLworCQkJaWYgKCFpc19maXh1cChwZWVrX2NvbW1hbmQodG9kb19saXN0LCAwKSkpIHsKKwkJCQl1bmxpbmsocmViYXNlX3BhdGhfZml4dXBfbXNnKCkpOworCQkJCXVubGluayhyZWJhc2VfcGF0aF9zcXVhc2hfbXNnKCkpOworCQkJCXVubGluayhyZWJhc2VfcGF0aF9jdXJyZW50X2ZpeHVwcygpKTsKKwkJCQlzdHJidWZfcmVzZXQoJm9wdHMtPmN1cnJlbnRfZml4dXBzKTsKKwkJCQlvcHRzLT5jdXJyZW50X2ZpeHVwX2NvdW50ID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIHdlIGFyZSBpbiBhIGZpeHVwL3NxdWFzaCBjaGFpbiAqLworCQkJY29uc3QgY2hhciAqcCA9IG9wdHMtPmN1cnJlbnRfZml4dXBzLmJ1ZjsKKwkJCWludCBsZW4gPSBvcHRzLT5jdXJyZW50X2ZpeHVwcy5sZW47CisKKwkJCW9wdHMtPmN1cnJlbnRfZml4dXBfY291bnQtLTsKKwkJCWlmICghbGVuKQorCQkJCUJVRygiSW5jb3JyZWN0IGN1cnJlbnRfZml4dXBzOlxuJXMiLCBwKTsKKwkJCXdoaWxlIChsZW4gJiYgcFtsZW4gLSAxXSAhPSAnXG4nKQorCQkJCWxlbi0tOworCQkJc3RyYnVmX3NldGxlbigmb3B0cy0+Y3VycmVudF9maXh1cHMsIGxlbik7CisJCQlpZiAod3JpdGVfbWVzc2FnZShwLCBsZW4sIHJlYmFzZV9wYXRoX2N1cnJlbnRfZml4dXBzKCksCisJCQkJCSAgMCkgPCAwKQorCQkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3Qgd3JpdGUgZmlsZTogJyVzJyIpLAorCQkJCQkgICAgIHJlYmFzZV9wYXRoX2N1cnJlbnRfZml4dXBzKCkpOworCisJCQkvKgorCQkJICogSWYgYSBmaXh1cC9zcXVhc2ggaW4gYSBmaXh1cC9zcXVhc2ggY2hhaW4gZmFpbGVkLCB0aGUKKwkJCSAqIGNvbW1pdCBtZXNzYWdlIGlzIGFscmVhZHkgY29ycmVjdCwgbm8gbmVlZCB0byBjb21taXQKKwkJCSAqIGl0IGFnYWluLgorCQkJICoKKwkJCSAqIE9ubHkgaWYgaXQgaXMgdGhlIGZpbmFsIGNvbW1hbmQgaW4gdGhlIGZpeHVwL3NxdWFzaAorCQkJICogY2hhaW4sIGFuZCBvbmx5IGlmIHRoZSBjaGFpbiBpcyBsb25nZXIgdGhhbiBhIHNpbmdsZQorCQkJICogZml4dXAvc3F1YXNoIGNvbW1hbmQgKHdoaWNoIHdhcyBqdXN0IHNraXBwZWQpLCBkbyB3ZQorCQkJICogYWN0dWFsbHkgbmVlZCB0byByZS1jb21taXQgd2l0aCBhIGNsZWFuZWQgdXAgY29tbWl0CisJCQkgKiBtZXNzYWdlLgorCQkJICovCisJCQlpZiAob3B0cy0+Y3VycmVudF9maXh1cF9jb3VudCA+IDAgJiYKKwkJCSAgICAhaXNfZml4dXAocGVla19jb21tYW5kKHRvZG9fbGlzdCwgMCkpKSB7CisJCQkJZmluYWxfZml4dXAgPSAxOworCQkJCS8qCisJCQkJICogSWYgdGhlcmUgd2FzIG5vdCBhIHNpbmdsZSAic3F1YXNoIiBpbiB0aGUKKwkJCQkgKiBjaGFpbiwgd2Ugb25seSBuZWVkIHRvIGNsZWFuIHVwIHRoZSBjb21taXQKKwkJCQkgKiBtZXNzYWdlLCBubyBuZWVkIHRvIGJvdGhlciB0aGUgdXNlciB3aXRoCisJCQkJICogb3BlbmluZyB0aGUgY29tbWl0IG1lc3NhZ2UgaW4gdGhlIGVkaXRvci4KKwkJCQkgKi8KKwkJCQlpZiAoIXN0YXJ0c193aXRoKHAsICJzcXVhc2ggIikgJiYKKwkJCQkgICAgIXN0cnN0cihwLCAiXG5zcXVhc2ggIikpCisJCQkJCWZsYWdzID0gKGZsYWdzICYgfkVESVRfTVNHKSB8IENMRUFOVVBfTVNHOworCQkJfSBlbHNlIGlmIChpc19maXh1cChwZWVrX2NvbW1hbmQodG9kb19saXN0LCAwKSkpIHsKKwkJCQkvKgorCQkJCSAqIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzcXVhc2ggbWVzc2FnZSB0byBza2lwCisJCQkJICogdGhlIGxhdGVzdCBjb21taXQgbWVzc2FnZS4KKwkJCQkgKi8KKwkJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJCQkJY29uc3QgY2hhciAqcGF0aCA9IHJlYmFzZV9wYXRoX3NxdWFzaF9tc2coKTsKKwkJCQljb25zdCBjaGFyICplbmNvZGluZyA9IGdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKCk7CisKKwkJCQlpZiAocGFyc2VfaGVhZChyLCAmY29tbWl0KSB8fAorCQkJCSAgICAhKHAgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZykpIHx8CisJCQkJICAgIHdyaXRlX21lc3NhZ2UocCwgc3RybGVuKHApLCBwYXRoLCAwKSkgeworCQkJCQl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgcCk7CisJCQkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3Qgd3JpdGUgZmlsZTogIgorCQkJCQkJICAgICAgICInJXMnIiksIHBhdGgpOworCQkJCX0KKwkJCQl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgcCk7CisJCQl9CisJCX0KKworCQlzdHJidWZfcmVsZWFzZSgmcmV2KTsKKwkJZmxhZ3MgfD0gQU1FTkRfTVNHOworCX0KKworCWlmIChpc19jbGVhbikgeworCQljb25zdCBjaGFyICpjaGVycnlfcGlja19oZWFkID0gZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZChyKTsKKworCQlpZiAoZmlsZV9leGlzdHMoY2hlcnJ5X3BpY2tfaGVhZCkgJiYgdW5saW5rKGNoZXJyeV9waWNrX2hlYWQpKQorCQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIpKTsKKwkJaWYgKCFmaW5hbF9maXh1cCkKKwkJCXJldHVybiAwOworCX0KKworCWlmIChydW5fZ2l0X2NvbW1pdChyLCBmaW5hbF9maXh1cCA/IE5VTEwgOiByZWJhc2VfcGF0aF9tZXNzYWdlKCksCisJCQkgICBvcHRzLCBmbGFncykpCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIpKTsKKwl1bmxpbmsocmViYXNlX3BhdGhfYW1lbmQoKSk7CisJdW5saW5rKGdpdF9wYXRoX21lcmdlX2hlYWQocikpOworCWlmIChmaW5hbF9maXh1cCkgeworCQl1bmxpbmsocmViYXNlX3BhdGhfZml4dXBfbXNnKCkpOworCQl1bmxpbmsocmViYXNlX3BhdGhfc3F1YXNoX21zZygpKTsKKwl9CisJaWYgKG9wdHMtPmN1cnJlbnRfZml4dXBfY291bnQgPiAwKSB7CisJCS8qCisJCSAqIFdoZXRoZXIgZmluYWwgZml4dXAgb3Igbm90LCB3ZSBqdXN0IGNsZWFuZWQgdXAgdGhlIGNvbW1pdAorCQkgKiBtZXNzYWdlLi4uCisJCSAqLworCQl1bmxpbmsocmViYXNlX3BhdGhfY3VycmVudF9maXh1cHMoKSk7CisJCXN0cmJ1Zl9yZXNldCgmb3B0cy0+Y3VycmVudF9maXh1cHMpOworCQlvcHRzLT5jdXJyZW50X2ZpeHVwX2NvdW50ID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBzZXF1ZW5jZXJfY29udGludWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlzdHJ1Y3QgdG9kb19saXN0IHRvZG9fbGlzdCA9IFRPRE9fTElTVF9JTklUOworCWludCByZXM7CisKKwlpZiAocmVhZF9hbmRfcmVmcmVzaF9jYWNoZShyLCBvcHRzKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlYWRfcG9wdWxhdGVfb3B0cyhvcHRzKSkKKwkJcmV0dXJuIC0xOworCWlmIChpc19yZWJhc2VfaShvcHRzKSkgeworCQlpZiAoKHJlcyA9IHJlYWRfcG9wdWxhdGVfdG9kbyhyLCAmdG9kb19saXN0LCBvcHRzKSkpCisJCQlnb3RvIHJlbGVhc2VfdG9kb19saXN0OworCisJCWlmIChmaWxlX2V4aXN0cyhyZWJhc2VfcGF0aF9kcm9wcGVkKCkpKSB7CisJCQlpZiAoKHJlcyA9IHRvZG9fbGlzdF9jaGVja19hZ2FpbnN0X2JhY2t1cChyLCAmdG9kb19saXN0KSkpCisJCQkJZ290byByZWxlYXNlX3RvZG9fbGlzdDsKKworCQkJdW5saW5rKHJlYmFzZV9wYXRoX2Ryb3BwZWQoKSk7CisJCX0KKworCQlpZiAoY29tbWl0X3N0YWdlZF9jaGFuZ2VzKHIsIG9wdHMsICZ0b2RvX2xpc3QpKSB7CisJCQlyZXMgPSAtMTsKKwkJCWdvdG8gcmVsZWFzZV90b2RvX2xpc3Q7CisJCX0KKwl9IGVsc2UgaWYgKCFmaWxlX2V4aXN0cyhnZXRfdG9kb19wYXRoKG9wdHMpKSkKKwkJcmV0dXJuIGNvbnRpbnVlX3NpbmdsZV9waWNrKHIpOworCWVsc2UgaWYgKChyZXMgPSByZWFkX3BvcHVsYXRlX3RvZG8ociwgJnRvZG9fbGlzdCwgb3B0cykpKQorCQlnb3RvIHJlbGVhc2VfdG9kb19saXN0OworCisJaWYgKCFpc19yZWJhc2VfaShvcHRzKSkgeworCQkvKiBWZXJpZnkgdGhhdCB0aGUgY29uZmxpY3QgaGFzIGJlZW4gcmVzb2x2ZWQgKi8KKwkJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQocikpIHx8CisJCSAgICBmaWxlX2V4aXN0cyhnaXRfcGF0aF9yZXZlcnRfaGVhZChyKSkpIHsKKwkJCXJlcyA9IGNvbnRpbnVlX3NpbmdsZV9waWNrKHIpOworCQkJaWYgKHJlcykKKwkJCQlnb3RvIHJlbGVhc2VfdG9kb19saXN0OworCQl9CisJCWlmIChpbmRleF9kaWZmZXJzX2Zyb20ociwgIkhFQUQiLCBOVUxMLCAwKSkgeworCQkJcmVzID0gZXJyb3JfZGlydHlfaW5kZXgociwgb3B0cyk7CisJCQlnb3RvIHJlbGVhc2VfdG9kb19saXN0OworCQl9CisJCXRvZG9fbGlzdC5jdXJyZW50Kys7CisJfSBlbHNlIGlmIChmaWxlX2V4aXN0cyhyZWJhc2VfcGF0aF9zdG9wcGVkX3NoYSgpKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCQlpZiAocmVhZF9vbmVsaW5lcigmYnVmLCByZWJhc2VfcGF0aF9zdG9wcGVkX3NoYSgpLAorCQkJCSAgUkVBRF9PTkVMSU5FUl9TS0lQX0lGX0VNUFRZKSAmJgorCQkgICAgIWdldF9vaWRfY29tbWl0dGlzaChidWYuYnVmLCAmb2lkKSkKKwkJCXJlY29yZF9pbl9yZXdyaXR0ZW4oJm9pZCwgcGVla19jb21tYW5kKCZ0b2RvX2xpc3QsIDApKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorCisJcmVzID0gcGlja19jb21taXRzKHIsICZ0b2RvX2xpc3QsIG9wdHMpOworcmVsZWFzZV90b2RvX2xpc3Q6CisJdG9kb19saXN0X3JlbGVhc2UoJnRvZG9fbGlzdCk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBzaW5nbGVfcGljayhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgICAgIHN0cnVjdCBjb21taXQgKmNtaXQsCisJCSAgICAgICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJaW50IGNoZWNrX3RvZG87CisKKwlzZXRlbnYoR0lUX1JFRkxPR19BQ1RJT04sIGFjdGlvbl9uYW1lKG9wdHMpLCAwKTsKKwlyZXR1cm4gZG9fcGlja19jb21taXQociwgb3B0cy0+YWN0aW9uID09IFJFUExBWV9QSUNLID8KKwkJCSAgICAgIFRPRE9fUElDSyA6IFRPRE9fUkVWRVJULCBjbWl0LCBvcHRzLCAwLAorCQkJICAgICAgJmNoZWNrX3RvZG8pOworfQorCitpbnQgc2VxdWVuY2VyX3BpY2tfcmV2aXNpb25zKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IHRvZG9fbGlzdCB0b2RvX2xpc3QgPSBUT0RPX0xJU1RfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgaSwgcmVzOworCisJYXNzZXJ0KG9wdHMtPnJldnMpOworCWlmIChyZWFkX2FuZF9yZWZyZXNoX2NhY2hlKHIsIG9wdHMpKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgb3B0cy0+cmV2cy0+cGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljb25zdCBjaGFyICpuYW1lID0gb3B0cy0+cmV2cy0+cGVuZGluZy5vYmplY3RzW2ldLm5hbWU7CisKKwkJLyogVGhpcyBoYXBwZW5zIHdoZW4gdXNpbmcgLS1zdGRpbi4gKi8KKwkJaWYgKCFzdHJsZW4obmFtZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoIWdldF9vaWQobmFtZSwgJm9pZCkpIHsKKwkJCWlmICghbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHIsICZvaWQsIDEpKSB7CisJCQkJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gb2lkX29iamVjdF9pbmZvKHIsCisJCQkJCQkJCQkmb2lkLAorCQkJCQkJCQkJTlVMTCk7CisJCQkJcmV0dXJuIGVycm9yKF8oIiVzOiBjYW4ndCBjaGVycnktcGljayBhICVzIiksCisJCQkJCW5hbWUsIHR5cGVfbmFtZSh0eXBlKSk7CisJCQl9CisJCX0gZWxzZQorCQkJcmV0dXJuIGVycm9yKF8oIiVzOiBiYWQgcmV2aXNpb24iKSwgbmFtZSk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGNhbGxlZCBhcyAiZ2l0IGNoZXJyeS1waWNrIDxjb21taXQ+IiwganVzdAorCSAqIGNoZXJyeS1waWNrL3JldmVydCBpdCwgc2V0IENIRVJSWV9QSUNLX0hFQUQgLworCSAqIFJFVkVSVF9IRUFELCBhbmQgZG9uJ3QgdG91Y2ggdGhlIHNlcXVlbmNlciBzdGF0ZS4KKwkgKiBUaGlzIG1lYW5zIGl0IGlzIHBvc3NpYmxlIHRvIGNoZXJyeS1waWNrIGluIHRoZSBtaWRkbGUKKwkgKiBvZiBhIGNoZXJyeS1waWNrIHNlcXVlbmNlLgorCSAqLworCWlmIChvcHRzLT5yZXZzLT5jbWRsaW5lLm5yID09IDEgJiYKKwkgICAgb3B0cy0+cmV2cy0+Y21kbGluZS5yZXYtPndoZW5jZSA9PSBSRVZfQ01EX1JFViAmJgorCSAgICBvcHRzLT5yZXZzLT5ub193YWxrICYmCisJICAgICFvcHRzLT5yZXZzLT5jbWRsaW5lLnJldi0+ZmxhZ3MpIHsKKwkJc3RydWN0IGNvbW1pdCAqY21pdDsKKwkJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsayhvcHRzLT5yZXZzKSkKKwkJCXJldHVybiBlcnJvcihfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKwkJY21pdCA9IGdldF9yZXZpc2lvbihvcHRzLT5yZXZzKTsKKwkJaWYgKCFjbWl0KQorCQkJcmV0dXJuIGVycm9yKF8oImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIikpOworCQlpZiAoZ2V0X3JldmlzaW9uKG9wdHMtPnJldnMpKQorCQkJQlVHKCJ1bmV4cGVjdGVkIGV4dHJhIGNvbW1pdCBmcm9tIHdhbGsiKTsKKwkJcmV0dXJuIHNpbmdsZV9waWNrKHIsIGNtaXQsIG9wdHMpOworCX0KKworCS8qCisJICogU3RhcnQgYSBuZXcgY2hlcnJ5LXBpY2svIHJldmVydCBzZXF1ZW5jZTsgYnV0CisJICogZmlyc3QsIG1ha2Ugc3VyZSB0aGF0IGFuIGV4aXN0aW5nIG9uZSBpc24ndCBpbgorCSAqIHByb2dyZXNzCisJICovCisKKwlpZiAod2Fsa19yZXZzX3BvcHVsYXRlX3RvZG8oJnRvZG9fbGlzdCwgb3B0cykgfHwKKwkJCWNyZWF0ZV9zZXFfZGlyKHIpIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChnZXRfb2lkKCJIRUFEIiwgJm9pZCkgJiYgKG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUkVWRVJUKSkKKwkJcmV0dXJuIGVycm9yKF8oImNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIpKTsKKwlpZiAoc2F2ZV9oZWFkKG9pZF90b19oZXgoJm9pZCkpKQorCQlyZXR1cm4gLTE7CisJaWYgKHNhdmVfb3B0cyhvcHRzKSkKKwkJcmV0dXJuIC0xOworCXVwZGF0ZV9hYm9ydF9zYWZldHlfZmlsZSgpOworCXJlcyA9IHBpY2tfY29tbWl0cyhyLCAmdG9kb19saXN0LCBvcHRzKTsKKwl0b2RvX2xpc3RfcmVsZWFzZSgmdG9kb19saXN0KTsKKwlyZXR1cm4gcmVzOworfQorCit2b2lkIGFwcGVuZF9zaWdub2ZmKHN0cnVjdCBzdHJidWYgKm1zZ2J1Ziwgc2l6ZV90IGlnbm9yZV9mb290ZXIsIHVuc2lnbmVkIGZsYWcpCit7CisJdW5zaWduZWQgbm9fZHVwX3NvYiA9IGZsYWcgJiBBUFBFTkRfU0lHTk9GRl9ERURVUDsKKwlzdHJ1Y3Qgc3RyYnVmIHNvYiA9IFNUUkJVRl9JTklUOworCWludCBoYXNfZm9vdGVyOworCisJc3RyYnVmX2FkZHN0cigmc29iLCBzaWduX29mZl9oZWFkZXIpOworCXN0cmJ1Zl9hZGRzdHIoJnNvYiwgZm10X25hbWUoV0FOVF9DT01NSVRURVJfSURFTlQpKTsKKwlzdHJidWZfYWRkY2goJnNvYiwgJ1xuJyk7CisKKwlpZiAoIWlnbm9yZV9mb290ZXIpCisJCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKG1zZ2J1Zik7CisKKwkvKgorCSAqIElmIHRoZSB3aG9sZSBtZXNzYWdlIGJ1ZmZlciBpcyBlcXVhbCB0byB0aGUgc29iLCBwcmV0ZW5kIHRoYXQgd2UKKwkgKiBmb3VuZCBhIGNvbmZvcm1pbmcgZm9vdGVyIHdpdGggYSBtYXRjaGluZyBzb2IKKwkgKi8KKwlpZiAobXNnYnVmLT5sZW4gLSBpZ25vcmVfZm9vdGVyID09IHNvYi5sZW4gJiYKKwkgICAgIXN0cm5jbXAobXNnYnVmLT5idWYsIHNvYi5idWYsIHNvYi5sZW4pKQorCQloYXNfZm9vdGVyID0gMzsKKwllbHNlCisJCWhhc19mb290ZXIgPSBoYXNfY29uZm9ybWluZ19mb290ZXIobXNnYnVmLCAmc29iLCBpZ25vcmVfZm9vdGVyKTsKKworCWlmICghaGFzX2Zvb3RlcikgeworCQljb25zdCBjaGFyICphcHBlbmRfbmV3bGluZXMgPSBOVUxMOworCQlzaXplX3QgbGVuID0gbXNnYnVmLT5sZW4gLSBpZ25vcmVfZm9vdGVyOworCisJCWlmICghbGVuKSB7CisJCQkvKgorCQkJICogVGhlIGJ1ZmZlciBpcyBjb21wbGV0ZWx5IGVtcHR5LiAgTGVhdmUgZm9vbSBmb3IKKwkJCSAqIHRoZSB0aXRsZSBhbmQgYm9keSB0byBiZSBmaWxsZWQgaW4gYnkgdGhlIHVzZXIuCisJCQkgKi8KKwkJCWFwcGVuZF9uZXdsaW5lcyA9ICJcblxuIjsKKwkJfSBlbHNlIGlmIChsZW4gPT0gMSkgeworCQkJLyoKKwkJCSAqIEJ1ZmZlciBjb250YWlucyBhIHNpbmdsZSBuZXdsaW5lLiAgQWRkIGFub3RoZXIKKwkJCSAqIHNvIHRoYXQgd2UgbGVhdmUgcm9vbSBmb3IgdGhlIHRpdGxlIGFuZCBib2R5LgorCQkJICovCisJCQlhcHBlbmRfbmV3bGluZXMgPSAiXG4iOworCQl9IGVsc2UgaWYgKG1zZ2J1Zi0+YnVmW2xlbiAtIDJdICE9ICdcbicpIHsKKwkJCS8qCisJCQkgKiBCdWZmZXIgZW5kcyB3aXRoIGEgc2luZ2xlIG5ld2xpbmUuICBBZGQgYW5vdGhlcgorCQkJICogc28gdGhhdCB0aGVyZSBpcyBhbiBlbXB0eSBsaW5lIGJldHdlZW4gdGhlIG1lc3NhZ2UKKwkJCSAqIGJvZHkgYW5kIHRoZSBzb2IuCisJCQkgKi8KKwkJCWFwcGVuZF9uZXdsaW5lcyA9ICJcbiI7CisJCX0gLyogZWxzZSwgdGhlIGJ1ZmZlciBhbHJlYWR5IGVuZHMgd2l0aCB0d28gbmV3bGluZXMuICovCisKKwkJaWYgKGFwcGVuZF9uZXdsaW5lcykKKwkJCXN0cmJ1Zl9zcGxpY2UobXNnYnVmLCBtc2didWYtPmxlbiAtIGlnbm9yZV9mb290ZXIsIDAsCisJCQkJYXBwZW5kX25ld2xpbmVzLCBzdHJsZW4oYXBwZW5kX25ld2xpbmVzKSk7CisJfQorCisJaWYgKGhhc19mb290ZXIgIT0gMyAmJiAoIW5vX2R1cF9zb2IgfHwgaGFzX2Zvb3RlciAhPSAyKSkKKwkJc3RyYnVmX3NwbGljZShtc2didWYsIG1zZ2J1Zi0+bGVuIC0gaWdub3JlX2Zvb3RlciwgMCwKKwkJCQlzb2IuYnVmLCBzb2IubGVuKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzb2IpOworfQorCitzdHJ1Y3QgbGFiZWxzX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnRyeTsKKwljaGFyIGxhYmVsW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIGludCBsYWJlbHNfY21wKGNvbnN0IHZvaWQgKmZuZGF0YSwgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVwdHIsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksIGNvbnN0IHZvaWQgKmtleSkKK3sKKwljb25zdCBzdHJ1Y3QgbGFiZWxzX2VudHJ5ICphLCAqYjsKKworCWEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IGxhYmVsc19lbnRyeSwgZW50cnkpOworCWIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3QgbGFiZWxzX2VudHJ5LCBlbnRyeSk7CisKKwlyZXR1cm4ga2V5ID8gc3RyY21wKGEtPmxhYmVsLCBrZXkpIDogc3RyY21wKGEtPmxhYmVsLCBiLT5sYWJlbCk7Cit9CisKK3N0cnVjdCBzdHJpbmdfZW50cnkgeworCXN0cnVjdCBvaWRtYXBfZW50cnkgZW50cnk7CisJY2hhciBzdHJpbmdbRkxFWF9BUlJBWV07Cit9OworCitzdHJ1Y3QgbGFiZWxfc3RhdGUgeworCXN0cnVjdCBvaWRtYXAgY29tbWl0MmxhYmVsOworCXN0cnVjdCBoYXNobWFwIGxhYmVsczsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpsYWJlbF9vaWQoc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpsYWJlbCwKKwkJCSAgICAgc3RydWN0IGxhYmVsX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgbGFiZWxzX2VudHJ5ICpsYWJlbHNfZW50cnk7CisJc3RydWN0IHN0cmluZ19lbnRyeSAqc3RyaW5nX2VudHJ5OworCXN0cnVjdCBvYmplY3RfaWQgZHVtbXk7CisJaW50IGk7CisKKwlzdHJpbmdfZW50cnkgPSBvaWRtYXBfZ2V0KCZzdGF0ZS0+Y29tbWl0MmxhYmVsLCBvaWQpOworCWlmIChzdHJpbmdfZW50cnkpCisJCXJldHVybiBzdHJpbmdfZW50cnktPnN0cmluZzsKKworCS8qCisJICogRm9yICJ1bmludGVyZXN0aW5nIiBjb21taXRzLCBpLmUuIGNvbW1pdHMgdGhhdCBhcmUgbm90IHRvIGJlCisJICogcmViYXNlZCwgYW5kIHdoaWNoIGNhbiB0aGVyZWZvcmUgbm90IGJlIGxhYmVsZWQsIHdlIHVzZSBhIHVuaXF1ZQorCSAqIGFiYnJldmlhdGlvbiBvZiB0aGUgY29tbWl0IG5hbWUuIFRoaXMgaXMgc2xpZ2h0bHkgbW9yZSBjb21wbGljYXRlZAorCSAqIHRoYW4gY2FsbGluZyBmaW5kX3VuaXF1ZV9hYmJyZXYoKSBiZWNhdXNlIHdlIGFsc28gbmVlZCB0byBtYWtlCisJICogc3VyZSB0aGF0IHRoZSBhYmJyZXZpYXRpb24gZG9lcyBub3QgY29uZmxpY3Qgd2l0aCBhbnkgb3RoZXIKKwkgKiBsYWJlbC4KKwkgKgorCSAqIFdlIGRpc2FsbG93ICJpbnRlcmVzdGluZyIgY29tbWl0cyB0byBiZSBsYWJlbGVkIGJ5IGEgc3RyaW5nIHRoYXQKKwkgKiBpcyBhIHZhbGlkIGZ1bGwtbGVuZ3RoIGhhc2gsIHRvIGVuc3VyZSB0aGF0IHdlIGFsd2F5cyBjYW4gZmluZCBhbgorCSAqIGFiYnJldmlhdGlvbiBmb3IgYW55IHVuaW50ZXJlc3RpbmcgY29tbWl0J3MgbmFtZXMgdGhhdCBkb2VzIG5vdAorCSAqIGNsYXNoIHdpdGggYW55IG90aGVyIGxhYmVsLgorCSAqLworCXN0cmJ1Zl9yZXNldCgmc3RhdGUtPmJ1Zik7CisJaWYgKCFsYWJlbCkgeworCQljaGFyICpwOworCisJCXN0cmJ1Zl9ncm93KCZzdGF0ZS0+YnVmLCBHSVRfTUFYX0hFWFNaKTsKKwkJbGFiZWwgPSBwID0gc3RhdGUtPmJ1Zi5idWY7CisKKwkJZmluZF91bmlxdWVfYWJicmV2X3IocCwgb2lkLCBkZWZhdWx0X2FiYnJldik7CisKKwkJLyoKKwkJICogV2UgbWF5IG5lZWQgdG8gZXh0ZW5kIHRoZSBhYmJyZXZpYXRlZCBoYXNoIHNvIHRoYXQgdGhlcmUgaXMKKwkJICogbm8gY29uZmxpY3RpbmcgbGFiZWwuCisJCSAqLworCQlpZiAoaGFzaG1hcF9nZXRfZnJvbV9oYXNoKCZzdGF0ZS0+bGFiZWxzLCBzdHJpaGFzaChwKSwgcCkpIHsKKwkJCXNpemVfdCBpID0gc3RybGVuKHApICsgMTsKKworCQkJb2lkX3RvX2hleF9yKHAsIG9pZCk7CisJCQlmb3IgKDsgaSA8IHRoZV9oYXNoX2FsZ28tPmhleHN6OyBpKyspIHsKKwkJCQljaGFyIHNhdmUgPSBwW2ldOworCQkJCXBbaV0gPSAnXDAnOworCQkJCWlmICghaGFzaG1hcF9nZXRfZnJvbV9oYXNoKCZzdGF0ZS0+bGFiZWxzLAorCQkJCQkJCSAgIHN0cmloYXNoKHApLCBwKSkKKwkJCQkJYnJlYWs7CisJCQkJcFtpXSA9IHNhdmU7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmICpidWYgPSAmc3RhdGUtPmJ1ZjsKKworCQkvKgorCQkgKiBTYW5pdGl6ZSBsYWJlbHMgYnkgcmVwbGFjaW5nIG5vbi1hbHBoYS1udW1lcmljIGNoYXJhY3RlcnMKKwkJICogKGluY2x1ZGluZyB3aGl0ZS1zcGFjZSBvbmVzKSBieSBkYXNoZXMsIGFzIHRoZXkgbWlnaHQgYmUKKwkJICogaWxsZWdhbCBpbiBmaWxlIG5hbWVzIChhbmQgaGVuY2UgaW4gcmVmIG5hbWVzKS4KKwkJICoKKwkJICogTm90ZSB0aGF0IHdlIHJldGFpbiBub24tQVNDSUkgVVRGLTggY2hhcmFjdGVycyAoaWRlbnRpZmllZAorCQkgKiB2aWEgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0KS4gVGhleSBzaG91bGQgYmUgYWxsIGFjY2VwdGFibGUKKwkJICogaW4gZmlsZSBuYW1lcy4gV2UgZG8gbm90IHZhbGlkYXRlIHRoZSBVVEYtOCBoZXJlLCB0aGF0J3Mgbm90CisJCSAqIHRoZSBqb2Igb2YgdGhpcyBmdW5jdGlvbi4KKwkJICovCisJCWZvciAoOyAqbGFiZWw7IGxhYmVsKyspCisJCQlpZiAoKCpsYWJlbCAmIDB4ODApIHx8IGlzYWxudW0oKmxhYmVsKSkKKwkJCQlzdHJidWZfYWRkY2goYnVmLCAqbGFiZWwpOworCQkJLyogYXZvaWQgbGVhZGluZyBkYXNoIGFuZCBkb3VibGUtZGFzaGVzICovCisJCQllbHNlIGlmIChidWYtPmxlbiAmJiBidWYtPmJ1ZltidWYtPmxlbiAtIDFdICE9ICctJykKKwkJCQlzdHJidWZfYWRkY2goYnVmLCAnLScpOworCQlpZiAoIWJ1Zi0+bGVuKSB7CisJCQlzdHJidWZfYWRkc3RyKGJ1ZiwgInJldi0iKTsKKwkJCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldihidWYsIG9pZCwgZGVmYXVsdF9hYmJyZXYpOworCQl9CisJCWxhYmVsID0gYnVmLT5idWY7CisKKwkJaWYgKChidWYtPmxlbiA9PSB0aGVfaGFzaF9hbGdvLT5oZXhzeiAmJgorCQkgICAgICFnZXRfb2lkX2hleChsYWJlbCwgJmR1bW15KSkgfHwKKwkJICAgIChidWYtPmxlbiA9PSAxICYmICpsYWJlbCA9PSAnIycpIHx8CisJCSAgICBoYXNobWFwX2dldF9mcm9tX2hhc2goJnN0YXRlLT5sYWJlbHMsCisJCQkJCSAgc3RyaWhhc2gobGFiZWwpLCBsYWJlbCkpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgbGFiZWwgYWxyZWFkeSBleGlzdHMsIG9yIGlmIHRoZSBsYWJlbCBpcyBhCisJCQkgKiB2YWxpZCBmdWxsIE9JRCwgb3IgdGhlIGxhYmVsIGlzIGEgJyMnICh3aGljaCB3ZSB1c2UKKwkJCSAqIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gbWVyZ2UgaGVhZHMgYW5kIG9uZWxpbmUpLCB3ZQorCQkJICogYXBwZW5kIGEgZGFzaCBhbmQgYSBudW1iZXIgdG8gbWFrZSBpdCB1bmlxdWUuCisJCQkgKi8KKwkJCXNpemVfdCBsZW4gPSBidWYtPmxlbjsKKworCQkJZm9yIChpID0gMjsgOyBpKyspIHsKKwkJCQlzdHJidWZfc2V0bGVuKGJ1ZiwgbGVuKTsKKwkJCQlzdHJidWZfYWRkZihidWYsICItJWQiLCBpKTsKKwkJCQlpZiAoIWhhc2htYXBfZ2V0X2Zyb21faGFzaCgmc3RhdGUtPmxhYmVscywKKwkJCQkJCQkgICBzdHJpaGFzaChidWYtPmJ1ZiksCisJCQkJCQkJICAgYnVmLT5idWYpKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJbGFiZWwgPSBidWYtPmJ1ZjsKKwkJfQorCX0KKworCUZMRVhfQUxMT0NfU1RSKGxhYmVsc19lbnRyeSwgbGFiZWwsIGxhYmVsKTsKKwloYXNobWFwX2VudHJ5X2luaXQoJmxhYmVsc19lbnRyeS0+ZW50cnksIHN0cmloYXNoKGxhYmVsKSk7CisJaGFzaG1hcF9hZGQoJnN0YXRlLT5sYWJlbHMsICZsYWJlbHNfZW50cnktPmVudHJ5KTsKKworCUZMRVhfQUxMT0NfU1RSKHN0cmluZ19lbnRyeSwgc3RyaW5nLCBsYWJlbCk7CisJb2lkY3B5KCZzdHJpbmdfZW50cnktPmVudHJ5Lm9pZCwgb2lkKTsKKwlvaWRtYXBfcHV0KCZzdGF0ZS0+Y29tbWl0MmxhYmVsLCBzdHJpbmdfZW50cnkpOworCisJcmV0dXJuIHN0cmluZ19lbnRyeS0+c3RyaW5nOworfQorCitzdGF0aWMgaW50IG1ha2Vfc2NyaXB0X3dpdGhfbWVyZ2VzKHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCisJCQkJICAgc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCQkJICAgdW5zaWduZWQgZmxhZ3MpCit7CisJaW50IGtlZXBfZW1wdHkgPSBmbGFncyAmIFRPRE9fTElTVF9LRUVQX0VNUFRZOworCWludCByZWJhc2VfY291c2lucyA9IGZsYWdzICYgVE9ET19MSVNUX1JFQkFTRV9DT1VTSU5TOworCWludCByb290X3dpdGhfb250byA9IGZsYWdzICYgVE9ET19MSVNUX1JPT1RfV0lUSF9PTlRPOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQsIG9uZWxpbmUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGxhYmVsID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpjb21taXRzID0gTlVMTCwgKip0YWlsID0gJmNvbW1pdHMsICppdGVyOworCXN0cnVjdCBjb21taXRfbGlzdCAqdGlwcyA9IE5VTEwsICoqdGlwc190YWlsID0gJnRpcHM7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBvaWRtYXAgY29tbWl0MnRvZG8gPSBPSURNQVBfSU5JVDsKKwlzdHJ1Y3Qgc3RyaW5nX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3Qgb2lkc2V0IGludGVyZXN0aW5nID0gT0lEU0VUX0lOSVQsIGNoaWxkX3NlZW4gPSBPSURTRVRfSU5JVCwKKwkJc2hvd24gPSBPSURTRVRfSU5JVDsKKwlzdHJ1Y3QgbGFiZWxfc3RhdGUgc3RhdGUgPSB7IE9JRE1BUF9JTklULCB7IE5VTEwgfSwgU1RSQlVGX0lOSVQgfTsKKworCWludCBhYmJyID0gZmxhZ3MgJiBUT0RPX0xJU1RfQUJCUkVWSUFURV9DTURTOworCWNvbnN0IGNoYXIgKmNtZF9waWNrID0gYWJiciA/ICJwIiA6ICJwaWNrIiwKKwkJKmNtZF9sYWJlbCA9IGFiYnIgPyAibCIgOiAibGFiZWwiLAorCQkqY21kX3Jlc2V0ID0gYWJiciA/ICJ0IiA6ICJyZXNldCIsCisJCSpjbWRfbWVyZ2UgPSBhYmJyID8gIm0iIDogIm1lcmdlIjsKKworCW9pZG1hcF9pbml0KCZjb21taXQydG9kbywgMCk7CisJb2lkbWFwX2luaXQoJnN0YXRlLmNvbW1pdDJsYWJlbCwgMCk7CisJaGFzaG1hcF9pbml0KCZzdGF0ZS5sYWJlbHMsIGxhYmVsc19jbXAsIE5VTEwsIDApOworCXN0cmJ1Zl9pbml0KCZzdGF0ZS5idWYsIDMyKTsKKworCWlmIChyZXZzLT5jbWRsaW5lLm5yICYmIChyZXZzLT5jbWRsaW5lLnJldlswXS5mbGFncyAmIEJPVFRPTSkpIHsKKwkJc3RydWN0IGxhYmVsc19lbnRyeSAqb250b19sYWJlbF9lbnRyeTsKKwkJc3RydWN0IG9iamVjdF9pZCAqb2lkID0gJnJldnMtPmNtZGxpbmUucmV2WzBdLml0ZW0tPm9pZDsKKwkJRkxFWF9BTExPQ19TVFIoZW50cnksIHN0cmluZywgIm9udG8iKTsKKwkJb2lkY3B5KCZlbnRyeS0+ZW50cnkub2lkLCBvaWQpOworCQlvaWRtYXBfcHV0KCZzdGF0ZS5jb21taXQybGFiZWwsIGVudHJ5KTsKKworCQlGTEVYX0FMTE9DX1NUUihvbnRvX2xhYmVsX2VudHJ5LCBsYWJlbCwgIm9udG8iKTsKKwkJaGFzaG1hcF9lbnRyeV9pbml0KCZvbnRvX2xhYmVsX2VudHJ5LT5lbnRyeSwgc3RyaWhhc2goIm9udG8iKSk7CisJCWhhc2htYXBfYWRkKCZzdGF0ZS5sYWJlbHMsICZvbnRvX2xhYmVsX2VudHJ5LT5lbnRyeSk7CisJfQorCisJLyoKKwkgKiBGaXJzdCBwaGFzZToKKwkgKiAtIGdldCBvbmVsaW5lcyBmb3IgYWxsIGNvbW1pdHMKKwkgKiAtIGdhdGhlciBhbGwgYnJhbmNoIHRpcHMgKGkuZS4gMm5kIG9yIGxhdGVyIHBhcmVudHMgb2YgbWVyZ2VzKQorCSAqIC0gbGFiZWwgYWxsIGJyYW5jaCB0aXBzCisJICovCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ocmV2cykpKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqdG9fbWVyZ2U7CisJCWNvbnN0IGNoYXIgKnAxLCAqcDI7CisJCXN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwkJaW50IGlzX2VtcHR5OworCisJCXRhaWwgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgdGFpbCktPm5leHQ7CisJCW9pZHNldF9pbnNlcnQoJmludGVyZXN0aW5nLCAmY29tbWl0LT5vYmplY3Qub2lkKTsKKworCQlpc19lbXB0eSA9IGlzX29yaWdpbmFsX2NvbW1pdF9lbXB0eShjb21taXQpOworCQlpZiAoIWlzX2VtcHR5ICYmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFBBVENIU0FNRSkpCisJCQljb250aW51ZTsKKwkJaWYgKGlzX2VtcHR5ICYmICFrZWVwX2VtcHR5KQorCQkJY29udGludWU7CisKKwkJc3RyYnVmX3Jlc2V0KCZvbmVsaW5lKTsKKwkJcHJldHR5X3ByaW50X2NvbW1pdChwcCwgY29tbWl0LCAmb25lbGluZSk7CisKKwkJdG9fbWVyZ2UgPSBjb21taXQtPnBhcmVudHMgPyBjb21taXQtPnBhcmVudHMtPm5leHQgOiBOVUxMOworCQlpZiAoIXRvX21lcmdlKSB7CisJCQkvKiBub24tbWVyZ2UgY29tbWl0OiBlYXN5IGNhc2UgKi8KKwkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICIlcyAlcyAlcyIsIGNtZF9waWNrLAorCQkJCSAgICBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpLAorCQkJCSAgICBvbmVsaW5lLmJ1Zik7CisJCQlpZiAoaXNfZW1wdHkpCisJCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiAlYyBlbXB0eSIsCisJCQkJCSAgICBjb21tZW50X2xpbmVfY2hhcik7CisKKwkJCUZMRVhfQUxMT0NfU1RSKGVudHJ5LCBzdHJpbmcsIGJ1Zi5idWYpOworCQkJb2lkY3B5KCZlbnRyeS0+ZW50cnkub2lkLCAmY29tbWl0LT5vYmplY3Qub2lkKTsKKwkJCW9pZG1hcF9wdXQoJmNvbW1pdDJ0b2RvLCBlbnRyeSk7CisKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogQ3JlYXRlIGEgbGFiZWwgKi8KKwkJc3RyYnVmX3Jlc2V0KCZsYWJlbCk7CisJCWlmIChza2lwX3ByZWZpeChvbmVsaW5lLmJ1ZiwgIk1lcmdlICIsICZwMSkgJiYKKwkJICAgIChwMSA9IHN0cmNocihwMSwgJ1wnJykpICYmCisJCSAgICAocDIgPSBzdHJjaHIoKytwMSwgJ1wnJykpKQorCQkJc3RyYnVmX2FkZCgmbGFiZWwsIHAxLCBwMiAtIHAxKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgob25lbGluZS5idWYsICJNZXJnZSBwdWxsIHJlcXVlc3QgIiwKKwkJCQkgICAgICZwMSkgJiYKKwkJCSAocDEgPSBzdHJzdHIocDEsICIgZnJvbSAiKSkpCisJCQlzdHJidWZfYWRkc3RyKCZsYWJlbCwgcDEgKyBzdHJsZW4oIiBmcm9tICIpKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGJ1ZigmbGFiZWwsICZvbmVsaW5lKTsKKworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICIlcyAtQyAlcyIsCisJCQkgICAgY21kX21lcmdlLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKworCQkvKiBsYWJlbCB0aGUgdGlwcyBvZiBtZXJnZWQgYnJhbmNoZXMgKi8KKwkJZm9yICg7IHRvX21lcmdlOyB0b19tZXJnZSA9IHRvX21lcmdlLT5uZXh0KSB7CisJCQlvaWQgPSAmdG9fbWVyZ2UtPml0ZW0tPm9iamVjdC5vaWQ7CisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJyAnKTsKKworCQkJaWYgKCFvaWRzZXRfY29udGFpbnMoJmludGVyZXN0aW5nLCBvaWQpKSB7CisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBsYWJlbF9vaWQob2lkLCBOVUxMLAorCQkJCQkJCSAgICAgICZzdGF0ZSkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQl0aXBzX3RhaWwgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KHRvX21lcmdlLT5pdGVtLAorCQkJCQkJCXRpcHNfdGFpbCktPm5leHQ7CisKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgbGFiZWxfb2lkKG9pZCwgbGFiZWwuYnVmLCAmc3RhdGUpKTsKKwkJfQorCQlzdHJidWZfYWRkZigmYnVmLCAiICMgJXMiLCBvbmVsaW5lLmJ1Zik7CisKKwkJRkxFWF9BTExPQ19TVFIoZW50cnksIHN0cmluZywgYnVmLmJ1Zik7CisJCW9pZGNweSgmZW50cnktPmVudHJ5Lm9pZCwgJmNvbW1pdC0+b2JqZWN0Lm9pZCk7CisJCW9pZG1hcF9wdXQoJmNvbW1pdDJ0b2RvLCBlbnRyeSk7CisJfQorCisJLyoKKwkgKiBTZWNvbmQgcGhhc2U6CisJICogLSBsYWJlbCBicmFuY2ggcG9pbnRzCisJICogLSBhZGQgSEVBRCB0byB0aGUgYnJhbmNoIHRpcHMKKwkgKi8KKwlmb3IgKGl0ZXIgPSBjb21taXRzOyBpdGVyOyBpdGVyID0gaXRlci0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudCA9IGl0ZXItPml0ZW0tPnBhcmVudHM7CisJCWZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+bmV4dCkgeworCQkJc3RydWN0IG9iamVjdF9pZCAqb2lkID0gJnBhcmVudC0+aXRlbS0+b2JqZWN0Lm9pZDsKKwkJCWlmICghb2lkc2V0X2NvbnRhaW5zKCZpbnRlcmVzdGluZywgb2lkKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChvaWRzZXRfaW5zZXJ0KCZjaGlsZF9zZWVuLCBvaWQpKQorCQkJCWxhYmVsX29pZChvaWQsICJicmFuY2gtcG9pbnQiLCAmc3RhdGUpOworCQl9CisKKwkJLyogQWRkIEhFQUQgYXMgaW1wbGljaXQgInRpcCBvZiBicmFuY2giICovCisJCWlmICghaXRlci0+bmV4dCkKKwkJCXRpcHNfdGFpbCA9ICZjb21taXRfbGlzdF9pbnNlcnQoaXRlci0+aXRlbSwKKwkJCQkJCQl0aXBzX3RhaWwpLT5uZXh0OworCX0KKworCS8qCisJICogVGhpcmQgcGhhc2U6IG91dHB1dCB0aGUgdG9kbyBsaXN0LiBUaGlzIGlzIGEgYml0IHRyaWNreSwgYXMgd2UKKwkgKiB3YW50IHRvIGF2b2lkIGp1bXBpbmcgYmFjayBhbmQgZm9ydGggYmV0d2VlbiByZXZpc2lvbnMuIFRvCisJICogYWNjb21wbGlzaCB0aGF0IGdvYWwsIHdlIHdhbGsgYmFja3dhcmRzIGZyb20gdGhlIGJyYW5jaCB0aXBzLAorCSAqIGdhdGhlcmluZyBjb21taXRzIG5vdCB5ZXQgc2hvd24sIHJldmVyc2luZyB0aGUgbGlzdCBvbiB0aGUgZmx5LAorCSAqIHRoZW4gb3V0cHV0dGluZyB0aGF0IGxpc3QgKGxhYmVsaW5nIHJldmlzaW9ucyBhcyBuZWVkZWQpLgorCSAqLworCXN0cmJ1Zl9hZGRmKG91dCwgIiVzIG9udG9cbiIsIGNtZF9sYWJlbCk7CisJZm9yIChpdGVyID0gdGlwczsgaXRlcjsgaXRlciA9IGl0ZXItPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gTlVMTCwgKml0ZXIyOworCisJCWNvbW1pdCA9IGl0ZXItPml0ZW07CisJCWlmIChvaWRzZXRfY29udGFpbnMoJnNob3duLCAmY29tbWl0LT5vYmplY3Qub2lkKSkKKwkJCWNvbnRpbnVlOworCQllbnRyeSA9IG9pZG1hcF9nZXQoJnN0YXRlLmNvbW1pdDJsYWJlbCwgJmNvbW1pdC0+b2JqZWN0Lm9pZCk7CisKKwkJaWYgKGVudHJ5KQorCQkJc3RyYnVmX2FkZGYob3V0LCAiXG4lYyBCcmFuY2ggJXNcbiIsIGNvbW1lbnRfbGluZV9jaGFyLCBlbnRyeS0+c3RyaW5nKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKG91dCwgJ1xuJyk7CisKKwkJd2hpbGUgKG9pZHNldF9jb250YWlucygmaW50ZXJlc3RpbmcsICZjb21taXQtPm9iamVjdC5vaWQpICYmCisJCSAgICAgICAhb2lkc2V0X2NvbnRhaW5zKCZzaG93biwgJmNvbW1pdC0+b2JqZWN0Lm9pZCkpIHsKKwkJCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsICZsaXN0KTsKKwkJCWlmICghY29tbWl0LT5wYXJlbnRzKSB7CisJCQkJY29tbWl0ID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbW1pdCA9IGNvbW1pdC0+cGFyZW50cy0+aXRlbTsKKwkJfQorCisJCWlmICghY29tbWl0KQorCQkJc3RyYnVmX2FkZGYob3V0LCAiJXMgJXNcbiIsIGNtZF9yZXNldCwKKwkJCQkgICAgcmViYXNlX2NvdXNpbnMgfHwgcm9vdF93aXRoX29udG8gPworCQkJCSAgICAib250byIgOiAiW25ldyByb290XSIpOworCQllbHNlIHsKKwkJCWNvbnN0IGNoYXIgKnRvID0gTlVMTDsKKworCQkJZW50cnkgPSBvaWRtYXBfZ2V0KCZzdGF0ZS5jb21taXQybGFiZWwsCisJCQkJCSAgICZjb21taXQtPm9iamVjdC5vaWQpOworCQkJaWYgKGVudHJ5KQorCQkJCXRvID0gZW50cnktPnN0cmluZzsKKwkJCWVsc2UgaWYgKCFyZWJhc2VfY291c2lucykKKwkJCQl0byA9IGxhYmVsX29pZCgmY29tbWl0LT5vYmplY3Qub2lkLCBOVUxMLAorCQkJCQkgICAgICAgJnN0YXRlKTsKKworCQkJaWYgKCF0byB8fCAhc3RyY21wKHRvLCAib250byIpKQorCQkJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzIG9udG9cbiIsIGNtZF9yZXNldCk7CisJCQllbHNlIHsKKwkJCQlzdHJidWZfcmVzZXQoJm9uZWxpbmUpOworCQkJCXByZXR0eV9wcmludF9jb21taXQocHAsIGNvbW1pdCwgJm9uZWxpbmUpOworCQkJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzICVzICMgJXNcbiIsCisJCQkJCSAgICBjbWRfcmVzZXQsIHRvLCBvbmVsaW5lLmJ1Zik7CisJCQl9CisJCX0KKworCQlmb3IgKGl0ZXIyID0gbGlzdDsgaXRlcjI7IGl0ZXIyID0gaXRlcjItPm5leHQpIHsKKwkJCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9ICZpdGVyMi0+aXRlbS0+b2JqZWN0Lm9pZDsKKwkJCWVudHJ5ID0gb2lkbWFwX2dldCgmY29tbWl0MnRvZG8sIG9pZCk7CisJCQkvKiBvbmx5IHNob3cgaWYgbm90IGFscmVhZHkgdXBzdHJlYW0gKi8KKwkJCWlmIChlbnRyeSkKKwkJCQlzdHJidWZfYWRkZihvdXQsICIlc1xuIiwgZW50cnktPnN0cmluZyk7CisJCQllbnRyeSA9IG9pZG1hcF9nZXQoJnN0YXRlLmNvbW1pdDJsYWJlbCwgb2lkKTsKKwkJCWlmIChlbnRyeSkKKwkJCQlzdHJidWZfYWRkZihvdXQsICIlcyAlc1xuIiwKKwkJCQkJICAgIGNtZF9sYWJlbCwgZW50cnktPnN0cmluZyk7CisJCQlvaWRzZXRfaW5zZXJ0KCZzaG93biwgb2lkKTsKKwkJfQorCisJCWZyZWVfY29tbWl0X2xpc3QobGlzdCk7CisJfQorCisJZnJlZV9jb21taXRfbGlzdChjb21taXRzKTsKKwlmcmVlX2NvbW1pdF9saXN0KHRpcHMpOworCisJc3RyYnVmX3JlbGVhc2UoJmxhYmVsKTsKKwlzdHJidWZfcmVsZWFzZSgmb25lbGluZSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlvaWRtYXBfZnJlZSgmY29tbWl0MnRvZG8sIDEpOworCW9pZG1hcF9mcmVlKCZzdGF0ZS5jb21taXQybGFiZWwsIDEpOworCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZzdGF0ZS5sYWJlbHMsIHN0cnVjdCBsYWJlbHNfZW50cnksIGVudHJ5KTsKKwlzdHJidWZfcmVsZWFzZSgmc3RhdGUuYnVmKTsKKworCXJldHVybiAwOworfQorCitpbnQgc2VxdWVuY2VyX21ha2Vfc2NyaXB0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgc3RyYnVmICpvdXQsIGludCBhcmdjLAorCQkJICBjb25zdCBjaGFyICoqYXJndiwgdW5zaWduZWQgZmxhZ3MpCit7CisJY2hhciAqZm9ybWF0ID0gTlVMTDsKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgcHAgPSB7MH07CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWludCBrZWVwX2VtcHR5ID0gZmxhZ3MgJiBUT0RPX0xJU1RfS0VFUF9FTVBUWTsKKwljb25zdCBjaGFyICppbnNuID0gZmxhZ3MgJiBUT0RPX0xJU1RfQUJCUkVWSUFURV9DTURTID8gInAiIDogInBpY2siOworCWludCByZWJhc2VfbWVyZ2VzID0gZmxhZ3MgJiBUT0RPX0xJU1RfUkVCQVNFX01FUkdFUzsKKwlpbnQgcmVhcHBseV9jaGVycnlfcGlja3MgPSBmbGFncyAmIFRPRE9fTElTVF9SRUFQUExZX0NIRVJSWV9QSUNLUzsKKworCXJlcG9faW5pdF9yZXZpc2lvbnMociwgJnJldnMsIE5VTEwpOworCXJldnMudmVyYm9zZV9oZWFkZXIgPSAxOworCWlmICghcmViYXNlX21lcmdlcykKKwkJcmV2cy5tYXhfcGFyZW50cyA9IDE7CisJcmV2cy5jaGVycnlfbWFyayA9ICFyZWFwcGx5X2NoZXJyeV9waWNrczsKKwlyZXZzLmxpbWl0ZWQgPSAxOworCXJldnMucmV2ZXJzZSA9IDE7CisJcmV2cy5yaWdodF9vbmx5ID0gMTsKKwlyZXZzLnNvcnRfb3JkZXIgPSBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUjsKKwlyZXZzLnRvcG9fb3JkZXIgPSAxOworCisJcmV2cy5wcmV0dHlfZ2l2ZW4gPSAxOworCWdpdF9jb25maWdfZ2V0X3N0cmluZygicmViYXNlLmluc3RydWN0aW9uRm9ybWF0IiwgJmZvcm1hdCk7CisJaWYgKCFmb3JtYXQgfHwgISpmb3JtYXQpIHsKKwkJZnJlZShmb3JtYXQpOworCQlmb3JtYXQgPSB4c3RyZHVwKCIlcyIpOworCX0KKwlnZXRfY29tbWl0X2Zvcm1hdChmb3JtYXQsICZyZXZzKTsKKwlmcmVlKGZvcm1hdCk7CisJcHAuZm10ID0gcmV2cy5jb21taXRfZm9ybWF0OworCXBwLm91dHB1dF9lbmNvZGluZyA9IGdldF9sb2dfb3V0cHV0X2VuY29kaW5nKCk7CisKKwlpZiAoc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXZzLCBOVUxMKSA+IDEpCisJCXJldHVybiBlcnJvcihfKCJtYWtlX3NjcmlwdDogdW5oYW5kbGVkIG9wdGlvbnMiKSk7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJtYWtlX3NjcmlwdDogZXJyb3IgcHJlcGFyaW5nIHJldmlzaW9ucyIpKTsKKworCWlmIChyZWJhc2VfbWVyZ2VzKQorCQlyZXR1cm4gbWFrZV9zY3JpcHRfd2l0aF9tZXJnZXMoJnBwLCAmcmV2cywgb3V0LCBmbGFncyk7CisKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2cykpKSB7CisJCWludCBpc19lbXB0eSA9IGlzX29yaWdpbmFsX2NvbW1pdF9lbXB0eShjb21taXQpOworCisJCWlmICghaXNfZW1wdHkgJiYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgUEFUQ0hTQU1FKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNfZW1wdHkgJiYgIWtlZXBfZW1wdHkpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX2FkZGYob3V0LCAiJXMgJXMgIiwgaW5zbiwKKwkJCSAgICBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwkJcHJldHR5X3ByaW50X2NvbW1pdCgmcHAsIGNvbW1pdCwgb3V0KTsKKwkJaWYgKGlzX2VtcHR5KQorCQkJc3RyYnVmX2FkZGYob3V0LCAiICVjIGVtcHR5IiwgY29tbWVudF9saW5lX2NoYXIpOworCQlzdHJidWZfYWRkY2gob3V0LCAnXG4nKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBZGQgY29tbWFuZHMgYWZ0ZXIgcGljayBhbmQgKHNlcmllcyBvZikgc3F1YXNoL2ZpeHVwIGNvbW1hbmRzCisgKiBpbiB0aGUgdG9kbyBsaXN0LgorICovCit2b2lkIHRvZG9fbGlzdF9hZGRfZXhlY19jb21tYW5kcyhzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsCisJCQkJIHN0cnVjdCBzdHJpbmdfbGlzdCAqY29tbWFuZHMpCit7CisJc3RydWN0IHN0cmJ1ZiAqYnVmID0gJnRvZG9fbGlzdC0+YnVmOworCXNpemVfdCBiYXNlX29mZnNldCA9IGJ1Zi0+bGVuOworCWludCBpLCBpbnNlcnQsIG5yID0gMCwgYWxsb2MgPSAwOworCXN0cnVjdCB0b2RvX2l0ZW0gKml0ZW1zID0gTlVMTCwgKmJhc2VfaXRlbXMgPSBOVUxMOworCisJYmFzZV9pdGVtcyA9IHhjYWxsb2MoY29tbWFuZHMtPm5yLCBzaXplb2Yoc3RydWN0IHRvZG9faXRlbSkpOworCWZvciAoaSA9IDA7IGkgPCBjb21tYW5kcy0+bnI7IGkrKykgeworCQlzaXplX3QgY29tbWFuZF9sZW4gPSBzdHJsZW4oY29tbWFuZHMtPml0ZW1zW2ldLnN0cmluZyk7CisKKwkJc3RyYnVmX2FkZHN0cihidWYsIGNvbW1hbmRzLT5pdGVtc1tpXS5zdHJpbmcpOworCQlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKworCQliYXNlX2l0ZW1zW2ldLmNvbW1hbmQgPSBUT0RPX0VYRUM7CisJCWJhc2VfaXRlbXNbaV0ub2Zmc2V0X2luX2J1ZiA9IGJhc2Vfb2Zmc2V0OworCQliYXNlX2l0ZW1zW2ldLmFyZ19vZmZzZXQgPSBiYXNlX29mZnNldCArIHN0cmxlbigiZXhlYyAiKTsKKwkJYmFzZV9pdGVtc1tpXS5hcmdfbGVuID0gY29tbWFuZF9sZW4gLSBzdHJsZW4oImV4ZWMgIik7CisKKwkJYmFzZV9vZmZzZXQgKz0gY29tbWFuZF9sZW4gKyAxOworCX0KKworCS8qCisJICogSW5zZXJ0IDxjb21tYW5kcz4gYWZ0ZXIgZXZlcnkgcGljay4gSGVyZSwgZml4dXAvc3F1YXNoIGNoYWlucworCSAqIGFyZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHBpY2ssIHNvIHdlIGluc2VydCB0aGUgY29tbWFuZHMgKmFmdGVyKgorCSAqIHRob3NlIGNoYWlucyBpZiB0aGVyZSBhcmUgYW55LgorCSAqCisJICogQXMgd2UgaW5zZXJ0IHRoZSBleGVjIGNvbW1hbmRzIGltbWVkaWF0ZWx5IGFmdGVyIHJlYXJyYW5naW5nCisJICogYW55IGZpeHVwcyBhbmQgYmVmb3JlIHRoZSB1c2VyIGVkaXRzIHRoZSBsaXN0LCBhIGZpeHVwIGNoYWluCisJICogY2FuIG5ldmVyIGNvbnRhaW4gY29tbWVudHMgKGFueSBjb21tZW50cyBhcmUgZW1wdHkgcGlja3MgdGhhdAorCSAqIGhhdmUgYmVlbiBjb21tZW50ZWQgb3V0IGJlY2F1c2UgdGhlIHVzZXIgZGlkIG5vdCBzcGVjaWZ5CisJICogLS1rZWVwLWVtcHR5KS4gIFNvLCBpdCBpcyBzYWZlIHRvIGluc2VydCBhbiBleGVjIGNvbW1hbmQKKwkgKiB3aXRob3V0IGxvb2tpbmcgYXQgdGhlIGNvbW1hbmQgZm9sbG93aW5nIGEgY29tbWVudC4KKwkgKi8KKwlpbnNlcnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCB0b2RvX2xpc3QtPm5yOyBpKyspIHsKKwkJZW51bSB0b2RvX2NvbW1hbmQgY29tbWFuZCA9IHRvZG9fbGlzdC0+aXRlbXNbaV0uY29tbWFuZDsKKwkJaWYgKGluc2VydCAmJiAhaXNfZml4dXAoY29tbWFuZCkpIHsKKwkJCUFMTE9DX0dST1coaXRlbXMsIG5yICsgY29tbWFuZHMtPm5yLCBhbGxvYyk7CisJCQlDT1BZX0FSUkFZKGl0ZW1zICsgbnIsIGJhc2VfaXRlbXMsIGNvbW1hbmRzLT5ucik7CisJCQluciArPSBjb21tYW5kcy0+bnI7CisKKwkJCWluc2VydCA9IDA7CisJCX0KKworCQlBTExPQ19HUk9XKGl0ZW1zLCBuciArIDEsIGFsbG9jKTsKKwkJaXRlbXNbbnIrK10gPSB0b2RvX2xpc3QtPml0ZW1zW2ldOworCisJCWlmIChjb21tYW5kID09IFRPRE9fUElDSyB8fCBjb21tYW5kID09IFRPRE9fTUVSR0UpCisJCQlpbnNlcnQgPSAxOworCX0KKworCS8qIGluc2VydCBvciBhcHBlbmQgZmluYWwgPGNvbW1hbmRzPiAqLworCWlmIChpbnNlcnQgfHwgbnIgPT0gdG9kb19saXN0LT5ucikgeworCQlBTExPQ19HUk9XKGl0ZW1zLCBuciArIGNvbW1hbmRzLT5uciwgYWxsb2MpOworCQlDT1BZX0FSUkFZKGl0ZW1zICsgbnIsIGJhc2VfaXRlbXMsIGNvbW1hbmRzLT5ucik7CisJCW5yICs9IGNvbW1hbmRzLT5ucjsKKwl9CisKKwlmcmVlKGJhc2VfaXRlbXMpOworCUZSRUVfQU5EX05VTEwodG9kb19saXN0LT5pdGVtcyk7CisJdG9kb19saXN0LT5pdGVtcyA9IGl0ZW1zOworCXRvZG9fbGlzdC0+bnIgPSBucjsKKwl0b2RvX2xpc3QtPmFsbG9jID0gYWxsb2M7Cit9CisKK3N0YXRpYyB2b2lkIHRvZG9fbGlzdF90b19zdHJidWYoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCwKKwkJCQlzdHJ1Y3Qgc3RyYnVmICpidWYsIGludCBudW0sIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCB0b2RvX2l0ZW0gKml0ZW07CisJaW50IGksIG1heCA9IHRvZG9fbGlzdC0+bnI7CisKKwlpZiAobnVtID4gMCAmJiBudW0gPCBtYXgpCisJCW1heCA9IG51bTsKKworCWZvciAoaXRlbSA9IHRvZG9fbGlzdC0+aXRlbXMsIGkgPSAwOyBpIDwgbWF4OyBpKyssIGl0ZW0rKykgeworCQljaGFyIGNtZDsKKworCQkvKiBpZiB0aGUgaXRlbSBpcyBub3QgYSBjb21tYW5kIHdyaXRlIGl0IGFuZCBjb250aW51ZSAqLworCQlpZiAoaXRlbS0+Y29tbWFuZCA+PSBUT0RPX0NPTU1FTlQpIHsKKwkJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUuKnNcbiIsIGl0ZW0tPmFyZ19sZW4sCisJCQkJICAgIHRvZG9faXRlbV9nZXRfYXJnKHRvZG9fbGlzdCwgaXRlbSkpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBhZGQgY29tbWFuZCB0byB0aGUgYnVmZmVyICovCisJCWNtZCA9IGNvbW1hbmRfdG9fY2hhcihpdGVtLT5jb21tYW5kKTsKKwkJaWYgKChmbGFncyAmIFRPRE9fTElTVF9BQkJSRVZJQVRFX0NNRFMpICYmIGNtZCkKKwkJCXN0cmJ1Zl9hZGRjaChidWYsIGNtZCk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBjb21tYW5kX3RvX3N0cmluZyhpdGVtLT5jb21tYW5kKSk7CisKKwkJLyogYWRkIGNvbW1pdCBpZCAqLworCQlpZiAoaXRlbS0+Y29tbWl0KSB7CisJCQljb25zdCBjaGFyICpvaWQgPSBmbGFncyAmIFRPRE9fTElTVF9TSE9SVEVOX0lEUyA/CisJCQkJCSAgc2hvcnRfY29tbWl0X25hbWUoaXRlbS0+Y29tbWl0KSA6CisJCQkJCSAgb2lkX3RvX2hleCgmaXRlbS0+Y29tbWl0LT5vYmplY3Qub2lkKTsKKworCQkJaWYgKGl0ZW0tPmNvbW1hbmQgPT0gVE9ET19NRVJHRSkgeworCQkJCWlmIChpdGVtLT5mbGFncyAmIFRPRE9fRURJVF9NRVJHRV9NU0cpCisJCQkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiIC1jIik7CisJCQkJZWxzZQorCQkJCQlzdHJidWZfYWRkc3RyKGJ1ZiwgIiAtQyIpOworCQkJfQorCisJCQlzdHJidWZfYWRkZihidWYsICIgJXMiLCBvaWQpOworCQl9CisKKwkJLyogYWRkIGFsbCB0aGUgcmVzdCAqLworCQlpZiAoIWl0ZW0tPmFyZ19sZW4pCisJCQlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGYoYnVmLCAiICUuKnNcbiIsIGl0ZW0tPmFyZ19sZW4sCisJCQkJICAgIHRvZG9faXRlbV9nZXRfYXJnKHRvZG9fbGlzdCwgaXRlbSkpOworCX0KK30KKworaW50IHRvZG9fbGlzdF93cml0ZV90b19maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsCisJCQkgICAgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqc2hvcnRyZXZpc2lvbnMsCisJCQkgICAgY29uc3QgY2hhciAqc2hvcnRvbnRvLCBpbnQgbnVtLCB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgcmVzOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwl0b2RvX2xpc3RfdG9fc3RyYnVmKHIsIHRvZG9fbGlzdCwgJmJ1ZiwgbnVtLCBmbGFncyk7CisJaWYgKGZsYWdzICYgVE9ET19MSVNUX0FQUEVORF9UT0RPX0hFTFApCisJCWFwcGVuZF90b2RvX2hlbHAoY291bnRfY29tbWFuZHModG9kb19saXN0KSwKKwkJCQkgc2hvcnRyZXZpc2lvbnMsIHNob3J0b250bywgJmJ1Zik7CisKKwlyZXMgPSB3cml0ZV9tZXNzYWdlKGJ1Zi5idWYsIGJ1Zi5sZW4sIGZpbGUsIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJlczsKK30KKworLyogc2tpcCBwaWNraW5nIGNvbW1pdHMgd2hvc2UgcGFyZW50cyBhcmUgdW5jaGFuZ2VkICovCitzdGF0aWMgaW50IHNraXBfdW5uZWNlc3NhcnlfcGlja3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICBzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsCisJCQkJICBzdHJ1Y3Qgb2JqZWN0X2lkICpiYXNlX29pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpwYXJlbnRfb2lkOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHRvZG9fbGlzdC0+bnI7IGkrKykgeworCQlzdHJ1Y3QgdG9kb19pdGVtICppdGVtID0gdG9kb19saXN0LT5pdGVtcyArIGk7CisKKwkJaWYgKGl0ZW0tPmNvbW1hbmQgPj0gVE9ET19OT09QKQorCQkJY29udGludWU7CisJCWlmIChpdGVtLT5jb21tYW5kICE9IFRPRE9fUElDSykKKwkJCWJyZWFrOworCQlpZiAocGFyc2VfY29tbWl0KGl0ZW0tPmNvbW1pdCkpIHsKKwkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICclcyciKSwKKwkJCQlvaWRfdG9faGV4KCZpdGVtLT5jb21taXQtPm9iamVjdC5vaWQpKTsKKwkJfQorCQlpZiAoIWl0ZW0tPmNvbW1pdC0+cGFyZW50cykKKwkJCWJyZWFrOyAvKiByb290IGNvbW1pdCAqLworCQlpZiAoaXRlbS0+Y29tbWl0LT5wYXJlbnRzLT5uZXh0KQorCQkJYnJlYWs7IC8qIG1lcmdlIGNvbW1pdCAqLworCQlwYXJlbnRfb2lkID0gJml0ZW0tPmNvbW1pdC0+cGFyZW50cy0+aXRlbS0+b2JqZWN0Lm9pZDsKKwkJaWYgKCFvaWRlcShwYXJlbnRfb2lkLCBiYXNlX29pZCkpCisJCQlicmVhazsKKwkJb2lkY3B5KGJhc2Vfb2lkLCAmaXRlbS0+Y29tbWl0LT5vYmplY3Qub2lkKTsKKwl9CisJaWYgKGkgPiAwKSB7CisJCWNvbnN0IGNoYXIgKmRvbmVfcGF0aCA9IHJlYmFzZV9wYXRoX2RvbmUoKTsKKworCQlpZiAodG9kb19saXN0X3dyaXRlX3RvX2ZpbGUociwgdG9kb19saXN0LCBkb25lX3BhdGgsIE5VTEwsIE5VTEwsIGksIDApKSB7CisJCQllcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIpLCBkb25lX3BhdGgpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJTU9WRV9BUlJBWSh0b2RvX2xpc3QtPml0ZW1zLCB0b2RvX2xpc3QtPml0ZW1zICsgaSwgdG9kb19saXN0LT5uciAtIGkpOworCQl0b2RvX2xpc3QtPm5yIC09IGk7CisJCXRvZG9fbGlzdC0+Y3VycmVudCA9IDA7CisJCXRvZG9fbGlzdC0+ZG9uZV9uciArPSBpOworCisJCWlmIChpc19maXh1cChwZWVrX2NvbW1hbmQodG9kb19saXN0LCAwKSkpCisJCQlyZWNvcmRfaW5fcmV3cml0dGVuKGJhc2Vfb2lkLCBwZWVrX2NvbW1hbmQodG9kb19saXN0LCAwKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBjb21wbGV0ZV9hY3Rpb24oc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywgdW5zaWduZWQgZmxhZ3MsCisJCSAgICBjb25zdCBjaGFyICpzaG9ydHJldmlzaW9ucywgY29uc3QgY2hhciAqb250b19uYW1lLAorCQkgICAgc3RydWN0IGNvbW1pdCAqb250bywgY29uc3QgY2hhciAqb3JpZ19oZWFkLAorCQkgICAgc3RydWN0IHN0cmluZ19saXN0ICpjb21tYW5kcywgdW5zaWduZWQgYXV0b3NxdWFzaCwKKwkJICAgIHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCkKK3sKKwljb25zdCBjaGFyICpzaG9ydG9udG8sICp0b2RvX2ZpbGUgPSByZWJhc2VfcGF0aF90b2RvKCk7CisJc3RydWN0IHRvZG9fbGlzdCBuZXdfdG9kbyA9IFRPRE9fTElTVF9JTklUOworCXN0cnVjdCBzdHJidWYgKmJ1ZiA9ICZ0b2RvX2xpc3QtPmJ1ZiwgYnVmMiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgb2lkID0gb250by0+b2JqZWN0Lm9pZDsKKwlpbnQgcmVzOworCisJc2hvcnRvbnRvID0gZmluZF91bmlxdWVfYWJicmV2KCZvaWQsIERFRkFVTFRfQUJCUkVWKTsKKworCWlmIChidWYtPmxlbiA9PSAwKSB7CisJCXN0cnVjdCB0b2RvX2l0ZW0gKml0ZW0gPSBhcHBlbmRfbmV3X3RvZG8odG9kb19saXN0KTsKKwkJaXRlbS0+Y29tbWFuZCA9IFRPRE9fTk9PUDsKKwkJaXRlbS0+Y29tbWl0ID0gTlVMTDsKKwkJaXRlbS0+YXJnX2xlbiA9IGl0ZW0tPmFyZ19vZmZzZXQgPSBpdGVtLT5mbGFncyA9IGl0ZW0tPm9mZnNldF9pbl9idWYgPSAwOworCX0KKworCWlmIChhdXRvc3F1YXNoICYmIHRvZG9fbGlzdF9yZWFycmFuZ2Vfc3F1YXNoKHRvZG9fbGlzdCkpCisJCXJldHVybiAtMTsKKworCWlmIChjb21tYW5kcy0+bnIpCisJCXRvZG9fbGlzdF9hZGRfZXhlY19jb21tYW5kcyh0b2RvX2xpc3QsIGNvbW1hbmRzKTsKKworCWlmIChjb3VudF9jb21tYW5kcyh0b2RvX2xpc3QpID09IDApIHsKKwkJYXBwbHlfYXV0b3N0YXNoKHJlYmFzZV9wYXRoX2F1dG9zdGFzaCgpKTsKKwkJc2VxdWVuY2VyX3JlbW92ZV9zdGF0ZShvcHRzKTsKKworCQlyZXR1cm4gZXJyb3IoXygibm90aGluZyB0byBkbyIpKTsKKwl9CisKKwlyZXMgPSBlZGl0X3RvZG9fbGlzdChyLCB0b2RvX2xpc3QsICZuZXdfdG9kbywgc2hvcnRyZXZpc2lvbnMsCisJCQkgICAgIHNob3J0b250bywgZmxhZ3MpOworCWlmIChyZXMgPT0gLTEpCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChyZXMgPT0gLTIpIHsKKwkJYXBwbHlfYXV0b3N0YXNoKHJlYmFzZV9wYXRoX2F1dG9zdGFzaCgpKTsKKwkJc2VxdWVuY2VyX3JlbW92ZV9zdGF0ZShvcHRzKTsKKworCQlyZXR1cm4gLTE7CisJfSBlbHNlIGlmIChyZXMgPT0gLTMpIHsKKwkJYXBwbHlfYXV0b3N0YXNoKHJlYmFzZV9wYXRoX2F1dG9zdGFzaCgpKTsKKwkJc2VxdWVuY2VyX3JlbW92ZV9zdGF0ZShvcHRzKTsKKwkJdG9kb19saXN0X3JlbGVhc2UoJm5ld190b2RvKTsKKworCQlyZXR1cm4gZXJyb3IoXygibm90aGluZyB0byBkbyIpKTsKKwl9IGVsc2UgaWYgKHJlcyA9PSAtNCkgeworCQljaGVja291dF9vbnRvKHIsIG9wdHMsIG9udG9fbmFtZSwgJm9udG8tPm9iamVjdC5vaWQsIG9yaWdfaGVhZCk7CisJCXRvZG9fbGlzdF9yZWxlYXNlKCZuZXdfdG9kbyk7CisKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIEV4cGFuZCB0aGUgY29tbWl0IElEcyAqLworCXRvZG9fbGlzdF90b19zdHJidWYociwgJm5ld190b2RvLCAmYnVmMiwgLTEsIDApOworCXN0cmJ1Zl9zd2FwKCZuZXdfdG9kby5idWYsICZidWYyKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmMik7CisJbmV3X3RvZG8udG90YWxfbnIgLT0gbmV3X3RvZG8ubnI7CisJaWYgKHRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcihyLCBuZXdfdG9kby5idWYuYnVmLCAmbmV3X3RvZG8pIDwgMCkKKwkJQlVHKCJpbnZhbGlkIHRvZG8gbGlzdCBhZnRlciBleHBhbmRpbmcgSURzOlxuJXMiLAorCQkgICAgbmV3X3RvZG8uYnVmLmJ1Zik7CisKKwlpZiAob3B0cy0+YWxsb3dfZmYgJiYgc2tpcF91bm5lY2Vzc2FyeV9waWNrcyhyLCAmbmV3X3RvZG8sICZvaWQpKSB7CisJCXRvZG9fbGlzdF9yZWxlYXNlKCZuZXdfdG9kbyk7CisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3Qgc2tpcCB1bm5lY2Vzc2FyeSBwaWNrIGNvbW1hbmRzIikpOworCX0KKworCWlmICh0b2RvX2xpc3Rfd3JpdGVfdG9fZmlsZShyLCAmbmV3X3RvZG8sIHRvZG9fZmlsZSwgTlVMTCwgTlVMTCwgLTEsCisJCQkJICAgIGZsYWdzICYgfihUT0RPX0xJU1RfU0hPUlRFTl9JRFMpKSkgeworCQl0b2RvX2xpc3RfcmVsZWFzZSgmbmV3X3RvZG8pOworCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IHdyaXRlICclcyciKSwgdG9kb19maWxlKTsKKwl9CisKKwlyZXMgPSAtMTsKKworCWlmIChjaGVja291dF9vbnRvKHIsIG9wdHMsIG9udG9fbmFtZSwgJm9pZCwgb3JpZ19oZWFkKSkKKwkJZ290byBjbGVhbnVwOworCisJaWYgKHJlcXVpcmVfY2xlYW5fd29ya190cmVlKHIsICJyZWJhc2UiLCAiIiwgMSwgMSkpCisJCWdvdG8gY2xlYW51cDsKKworCXRvZG9fbGlzdF93cml0ZV90b3RhbF9ucigmbmV3X3RvZG8pOworCXJlcyA9IHBpY2tfY29tbWl0cyhyLCAmbmV3X3RvZG8sIG9wdHMpOworCitjbGVhbnVwOgorCXRvZG9fbGlzdF9yZWxlYXNlKCZuZXdfdG9kbyk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdHJ1Y3Qgc3ViamVjdDJpdGVtX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnRyeTsKKwlpbnQgaTsKKwljaGFyIHN1YmplY3RbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgaW50IHN1YmplY3QyaXRlbV9jbXAoY29uc3Qgdm9pZCAqZm5kYXRhLAorCQkJICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCQkgICAgY29uc3Qgdm9pZCAqa2V5KQoreworCWNvbnN0IHN0cnVjdCBzdWJqZWN0Mml0ZW1fZW50cnkgKmEsICpiOworCisJYSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3Qgc3ViamVjdDJpdGVtX2VudHJ5LCBlbnRyeSk7CisJYiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIGNvbnN0IHN0cnVjdCBzdWJqZWN0Mml0ZW1fZW50cnksIGVudHJ5KTsKKworCXJldHVybiBrZXkgPyBzdHJjbXAoYS0+c3ViamVjdCwga2V5KSA6IHN0cmNtcChhLT5zdWJqZWN0LCBiLT5zdWJqZWN0KTsKK30KKworZGVmaW5lX2NvbW1pdF9zbGFiKGNvbW1pdF90b2RvX2l0ZW0sIHN0cnVjdCB0b2RvX2l0ZW0gKik7CisKKy8qCisgKiBSZWFycmFuZ2UgdGhlIHRvZG8gbGlzdCB0aGF0IGhhcyBib3RoICJwaWNrIGNvbW1pdC1pZCBtc2ciIGFuZCAicGljaworICogY29tbWl0LWlkIGZpeHVwIS9zcXVhc2ghIG1zZyIgaW4gaXQgc28gdGhhdCB0aGUgbGF0dGVyIGlzIHB1dCBpbW1lZGlhdGVseQorICogYWZ0ZXIgdGhlIGZvcm1lciwgYW5kIGNoYW5nZSAicGljayIgdG8gImZpeHVwIi8ic3F1YXNoIi4KKyAqCisgKiBOb3RlIHRoYXQgaWYgdGhlIGNvbmZpZyBoYXMgc3BlY2lmaWVkIGEgY3VzdG9tIGluc3RydWN0aW9uIGZvcm1hdCwgZWFjaCBsb2cKKyAqIG1lc3NhZ2Ugd2lsbCBoYXZlIHRvIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBjb21taXQgKGFzIHRoZSBvbmVsaW5lIGluIHRoZQorICogc2NyaXB0IGNhbm5vdCBiZSB0cnVzdGVkKSBpbiBvcmRlciB0byBub3JtYWxpemUgdGhlIGF1dG9zcXVhc2ggYXJyYW5nZW1lbnQuCisgKi8KK2ludCB0b2RvX2xpc3RfcmVhcnJhbmdlX3NxdWFzaChzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QpCit7CisJc3RydWN0IGhhc2htYXAgc3ViamVjdDJpdGVtOworCWludCByZWFycmFuZ2VkID0gMCwgKm5leHQsICp0YWlsLCBpLCBuciA9IDAsIGFsbG9jID0gMDsKKwljaGFyICoqc3ViamVjdHM7CisJc3RydWN0IGNvbW1pdF90b2RvX2l0ZW0gY29tbWl0X3RvZG87CisJc3RydWN0IHRvZG9faXRlbSAqaXRlbXMgPSBOVUxMOworCisJaW5pdF9jb21taXRfdG9kb19pdGVtKCZjb21taXRfdG9kbyk7CisJLyoKKwkgKiBUaGUgaGFzaG1hcCBtYXBzIG9uZWxpbmVzIHRvIHRoZSByZXNwZWN0aXZlIHRvZG8gbGlzdCBpbmRleC4KKwkgKgorCSAqIElmIGFueSBpdGVtcyBuZWVkIHRvIGJlIHJlYXJyYW5nZWQsIHRoZSBuZXh0W2ldIHZhbHVlIHdpbGwgaW5kaWNhdGUKKwkgKiB3aGljaCBpdGVtIHdhcyBtb3ZlZCBkaXJlY3RseSBhZnRlciB0aGUgaSd0aC4KKwkgKgorCSAqIEluIHRoYXQgY2FzZSwgbGFzdFtpXSB3aWxsIGluZGljYXRlIHRoZSBpbmRleCBvZiB0aGUgbGF0ZXN0IGl0ZW0gdG8KKwkgKiBiZSBtb3ZlZCB0byBhcHBlYXIgYWZ0ZXIgdGhlIGkndGguCisJICovCisJaGFzaG1hcF9pbml0KCZzdWJqZWN0Mml0ZW0sIHN1YmplY3QyaXRlbV9jbXAsIE5VTEwsIHRvZG9fbGlzdC0+bnIpOworCUFMTE9DX0FSUkFZKG5leHQsIHRvZG9fbGlzdC0+bnIpOworCUFMTE9DX0FSUkFZKHRhaWwsIHRvZG9fbGlzdC0+bnIpOworCUFMTE9DX0FSUkFZKHN1YmplY3RzLCB0b2RvX2xpc3QtPm5yKTsKKwlmb3IgKGkgPSAwOyBpIDwgdG9kb19saXN0LT5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCB0b2RvX2l0ZW0gKml0ZW0gPSB0b2RvX2xpc3QtPml0ZW1zICsgaTsKKwkJY29uc3QgY2hhciAqY29tbWl0X2J1ZmZlciwgKnN1YmplY3QsICpwOworCQlzaXplX3Qgc3ViamVjdF9sZW47CisJCWludCBpMiA9IC0xOworCQlzdHJ1Y3Qgc3ViamVjdDJpdGVtX2VudHJ5ICplbnRyeTsKKworCQluZXh0W2ldID0gdGFpbFtpXSA9IC0xOworCQlpZiAoIWl0ZW0tPmNvbW1pdCB8fCBpdGVtLT5jb21tYW5kID09IFRPRE9fRFJPUCkgeworCQkJc3ViamVjdHNbaV0gPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoaXNfZml4dXAoaXRlbS0+Y29tbWFuZCkpIHsKKwkJCWNsZWFyX2NvbW1pdF90b2RvX2l0ZW0oJmNvbW1pdF90b2RvKTsKKwkJCXJldHVybiBlcnJvcihfKCJ0aGUgc2NyaXB0IHdhcyBhbHJlYWR5IHJlYXJyYW5nZWQuIikpOworCQl9CisKKwkJKmNvbW1pdF90b2RvX2l0ZW1fYXQoJmNvbW1pdF90b2RvLCBpdGVtLT5jb21taXQpID0gaXRlbTsKKworCQlwYXJzZV9jb21taXQoaXRlbS0+Y29tbWl0KTsKKwkJY29tbWl0X2J1ZmZlciA9IGxvZ21zZ19yZWVuY29kZShpdGVtLT5jb21taXQsIE5VTEwsICJVVEYtOCIpOworCQlmaW5kX2NvbW1pdF9zdWJqZWN0KGNvbW1pdF9idWZmZXIsICZzdWJqZWN0KTsKKwkJZm9ybWF0X3N1YmplY3QoJmJ1Ziwgc3ViamVjdCwgIiAiKTsKKwkJc3ViamVjdCA9IHN1YmplY3RzW2ldID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmc3ViamVjdF9sZW4pOworCQl1bnVzZV9jb21taXRfYnVmZmVyKGl0ZW0tPmNvbW1pdCwgY29tbWl0X2J1ZmZlcik7CisJCWlmICgoc2tpcF9wcmVmaXgoc3ViamVjdCwgImZpeHVwISAiLCAmcCkgfHwKKwkJICAgICBza2lwX3ByZWZpeChzdWJqZWN0LCAic3F1YXNoISAiLCAmcCkpKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQyOworCisJCQlmb3IgKDs7KSB7CisJCQkJd2hpbGUgKGlzc3BhY2UoKnApKQorCQkJCQlwKys7CisJCQkJaWYgKCFza2lwX3ByZWZpeChwLCAiZml4dXAhICIsICZwKSAmJgorCQkJCSAgICAhc2tpcF9wcmVmaXgocCwgInNxdWFzaCEgIiwgJnApKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJZW50cnkgPSBoYXNobWFwX2dldF9lbnRyeV9mcm9tX2hhc2goJnN1YmplY3QyaXRlbSwKKwkJCQkJCXN0cmhhc2gocCksIHAsCisJCQkJCQlzdHJ1Y3Qgc3ViamVjdDJpdGVtX2VudHJ5LAorCQkJCQkJZW50cnkpOworCQkJaWYgKGVudHJ5KQorCQkJCS8qIGZvdW5kIGJ5IHRpdGxlICovCisJCQkJaTIgPSBlbnRyeS0+aTsKKwkJCWVsc2UgaWYgKCFzdHJjaHIocCwgJyAnKSAmJgorCQkJCSAoY29tbWl0MiA9CisJCQkJICBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9ieV9uYW1lKHApKSAmJgorCQkJCSAqY29tbWl0X3RvZG9faXRlbV9hdCgmY29tbWl0X3RvZG8sIGNvbW1pdDIpKQorCQkJCS8qIGZvdW5kIGJ5IGNvbW1pdCBuYW1lICovCisJCQkJaTIgPSAqY29tbWl0X3RvZG9faXRlbV9hdCgmY29tbWl0X3RvZG8sIGNvbW1pdDIpCisJCQkJCS0gdG9kb19saXN0LT5pdGVtczsKKwkJCWVsc2UgeworCQkJCS8qIGNvcHkgY2FuIGJlIGEgcHJlZml4IG9mIHRoZSBjb21taXQgc3ViamVjdCAqLworCQkJCWZvciAoaTIgPSAwOyBpMiA8IGk7IGkyKyspCisJCQkJCWlmIChzdWJqZWN0c1tpMl0gJiYKKwkJCQkJICAgIHN0YXJ0c193aXRoKHN1YmplY3RzW2kyXSwgcCkpCisJCQkJCQlicmVhazsKKwkJCQlpZiAoaTIgPT0gaSkKKwkJCQkJaTIgPSAtMTsKKwkJCX0KKwkJfQorCQlpZiAoaTIgPj0gMCkgeworCQkJcmVhcnJhbmdlZCA9IDE7CisJCQl0b2RvX2xpc3QtPml0ZW1zW2ldLmNvbW1hbmQgPQorCQkJCXN0YXJ0c193aXRoKHN1YmplY3QsICJmaXh1cCEiKSA/CisJCQkJVE9ET19GSVhVUCA6IFRPRE9fU1FVQVNIOworCQkJaWYgKHRhaWxbaTJdIDwgMCkgeworCQkJCW5leHRbaV0gPSBuZXh0W2kyXTsKKwkJCQluZXh0W2kyXSA9IGk7CisJCQl9IGVsc2UgeworCQkJCW5leHRbaV0gPSBuZXh0W3RhaWxbaTJdXTsKKwkJCQluZXh0W3RhaWxbaTJdXSA9IGk7CisJCQl9CisJCQl0YWlsW2kyXSA9IGk7CisJCX0gZWxzZSBpZiAoIWhhc2htYXBfZ2V0X2Zyb21faGFzaCgmc3ViamVjdDJpdGVtLAorCQkJCQkJc3RyaGFzaChzdWJqZWN0KSwgc3ViamVjdCkpIHsKKwkJCUZMRVhfQUxMT0NfTUVNKGVudHJ5LCBzdWJqZWN0LCBzdWJqZWN0LCBzdWJqZWN0X2xlbik7CisJCQllbnRyeS0+aSA9IGk7CisJCQloYXNobWFwX2VudHJ5X2luaXQoJmVudHJ5LT5lbnRyeSwKKwkJCQkJc3RyaGFzaChlbnRyeS0+c3ViamVjdCkpOworCQkJaGFzaG1hcF9wdXQoJnN1YmplY3QyaXRlbSwgJmVudHJ5LT5lbnRyeSk7CisJCX0KKwl9CisKKwlpZiAocmVhcnJhbmdlZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdG9kb19saXN0LT5ucjsgaSsrKSB7CisJCQllbnVtIHRvZG9fY29tbWFuZCBjb21tYW5kID0gdG9kb19saXN0LT5pdGVtc1tpXS5jb21tYW5kOworCQkJaW50IGN1ciA9IGk7CisKKwkJCS8qCisJCQkgKiBJbml0aWFsbHksIGFsbCBjb21tYW5kcyBhcmUgJ3BpY2sncy4gSWYgaXQgaXMgYQorCQkJICogZml4dXAgb3IgYSBzcXVhc2ggbm93LCB3ZSBoYXZlIHJlYXJyYW5nZWQgaXQuCisJCQkgKi8KKwkJCWlmIChpc19maXh1cChjb21tYW5kKSkKKwkJCQljb250aW51ZTsKKworCQkJd2hpbGUgKGN1ciA+PSAwKSB7CisJCQkJQUxMT0NfR1JPVyhpdGVtcywgbnIgKyAxLCBhbGxvYyk7CisJCQkJaXRlbXNbbnIrK10gPSB0b2RvX2xpc3QtPml0ZW1zW2N1cl07CisJCQkJY3VyID0gbmV4dFtjdXJdOworCQkJfQorCQl9CisKKwkJRlJFRV9BTkRfTlVMTCh0b2RvX2xpc3QtPml0ZW1zKTsKKwkJdG9kb19saXN0LT5pdGVtcyA9IGl0ZW1zOworCQl0b2RvX2xpc3QtPm5yID0gbnI7CisJCXRvZG9fbGlzdC0+YWxsb2MgPSBhbGxvYzsKKwl9CisKKwlmcmVlKG5leHQpOworCWZyZWUodGFpbCk7CisJZm9yIChpID0gMDsgaSA8IHRvZG9fbGlzdC0+bnI7IGkrKykKKwkJZnJlZShzdWJqZWN0c1tpXSk7CisJZnJlZShzdWJqZWN0cyk7CisJaGFzaG1hcF9mcmVlX2VudHJpZXMoJnN1YmplY3QyaXRlbSwgc3RydWN0IHN1YmplY3QyaXRlbV9lbnRyeSwgZW50cnkpOworCisJY2xlYXJfY29tbWl0X3RvZG9faXRlbSgmY29tbWl0X3RvZG8pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzZXF1ZW5jZXJfZGV0ZXJtaW5lX3doZW5jZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgZW51bSBjb21taXRfd2hlbmNlICp3aGVuY2UpCit7CisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQocikpKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgY2hlcnJ5X3BpY2tfaGVhZCwgcmViYXNlX2hlYWQ7CisKKwkJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX3NlcV9kaXIoKSkpCisJCQkqd2hlbmNlID0gRlJPTV9DSEVSUllfUElDS19NVUxUSTsKKwkJaWYgKGZpbGVfZXhpc3RzKHJlYmFzZV9wYXRoKCkpICYmCisJCSAgICAhZ2V0X29pZCgiUkVCQVNFX0hFQUQiLCAmcmViYXNlX2hlYWQpICYmCisJCSAgICAhZ2V0X29pZCgiQ0hFUlJZX1BJQ0tfSEVBRCIsICZjaGVycnlfcGlja19oZWFkKSAmJgorCQkgICAgb2lkZXEoJnJlYmFzZV9oZWFkLCAmY2hlcnJ5X3BpY2tfaGVhZCkpCisJCQkqd2hlbmNlID0gRlJPTV9SRUJBU0VfUElDSzsKKwkJZWxzZQorCQkJKndoZW5jZSA9IEZST01fQ0hFUlJZX1BJQ0tfU0lOR0xFOworCisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc2VxdWVuY2VyLmggYi9zZXF1ZW5jZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzFjNDFmCi0tLSAvZGV2L251bGwKKysrIGIvc2VxdWVuY2VyLmgKQEAgLTAsMCArMSwyMzAgQEAKKyNpZm5kZWYgU0VRVUVOQ0VSX0gKKyNkZWZpbmUgU0VRVUVOQ0VSX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAid3Qtc3RhdHVzLmgiCisKK3N0cnVjdCBjb21taXQ7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKKworY29uc3QgY2hhciAqZ2l0X3BhdGhfY29tbWl0X2VkaXRtc2codm9pZCk7Citjb25zdCBjaGFyICpyZWJhc2VfcGF0aF90b2RvKHZvaWQpOworY29uc3QgY2hhciAqcmViYXNlX3BhdGhfdG9kb19iYWNrdXAodm9pZCk7Citjb25zdCBjaGFyICpyZWJhc2VfcGF0aF9kcm9wcGVkKHZvaWQpOworCisjZGVmaW5lIEFQUEVORF9TSUdOT0ZGX0RFRFVQICgxdSA8PCAwKQorCitlbnVtIHJlcGxheV9hY3Rpb24geworCVJFUExBWV9SRVZFUlQsCisJUkVQTEFZX1BJQ0ssCisJUkVQTEFZX0lOVEVSQUNUSVZFX1JFQkFTRQorfTsKKworZW51bSBjb21taXRfbXNnX2NsZWFudXBfbW9kZSB7CisJQ09NTUlUX01TR19DTEVBTlVQX1NQQUNFLAorCUNPTU1JVF9NU0dfQ0xFQU5VUF9OT05FLAorCUNPTU1JVF9NU0dfQ0xFQU5VUF9TQ0lTU09SUywKKwlDT01NSVRfTVNHX0NMRUFOVVBfQUxMCit9OworCitzdHJ1Y3QgcmVwbGF5X29wdHMgeworCWVudW0gcmVwbGF5X2FjdGlvbiBhY3Rpb247CisKKwkvKiBCb29sZWFuIG9wdGlvbnMgKi8KKwlpbnQgZWRpdDsKKwlpbnQgcmVjb3JkX29yaWdpbjsKKwlpbnQgbm9fY29tbWl0OworCWludCBzaWdub2ZmOworCWludCBhbGxvd19mZjsKKwlpbnQgYWxsb3dfcmVyZXJlX2F1dG87CisJaW50IGFsbG93X2VtcHR5OworCWludCBhbGxvd19lbXB0eV9tZXNzYWdlOworCWludCBkcm9wX3JlZHVuZGFudF9jb21taXRzOworCWludCBrZWVwX3JlZHVuZGFudF9jb21taXRzOworCWludCB2ZXJib3NlOworCWludCBxdWlldDsKKwlpbnQgcmVzY2hlZHVsZV9mYWlsZWRfZXhlYzsKKworCWludCBtYWlubGluZTsKKworCWNoYXIgKmdwZ19zaWduOworCWVudW0gY29tbWl0X21zZ19jbGVhbnVwX21vZGUgZGVmYXVsdF9tc2dfY2xlYW51cDsKKwlpbnQgZXhwbGljaXRfY2xlYW51cDsKKworCS8qIE1lcmdlIHN0cmF0ZWd5ICovCisJY2hhciAqc3RyYXRlZ3k7CisJY2hhciAqKnhvcHRzOworCXNpemVfdCB4b3B0c19uciwgeG9wdHNfYWxsb2M7CisKKwkvKiBVc2VkIGJ5IGZpeHVwL3NxdWFzaCAqLworCXN0cnVjdCBzdHJidWYgY3VycmVudF9maXh1cHM7CisJaW50IGN1cnJlbnRfZml4dXBfY291bnQ7CisKKwkvKiBwbGFjZWhvbGRlciBjb21taXQgZm9yIC1pIC0tcm9vdCAqLworCXN0cnVjdCBvYmplY3RfaWQgc3F1YXNoX29udG87CisJaW50IGhhdmVfc3F1YXNoX29udG87CisKKwkvKiBPbmx5IHVzZWQgYnkgUkVQTEFZX05PTkUgKi8KKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7Cit9OworI2RlZmluZSBSRVBMQVlfT1BUU19JTklUIHsgLmFjdGlvbiA9IC0xLCAuY3VycmVudF9maXh1cHMgPSBTVFJCVUZfSU5JVCB9CisKKy8qCisgKiBOb3RlIHRoYXQgb3JkZXJpbmcgbWF0dGVycyBpbiB0aGlzIGVudW0uIE5vdCBvbmx5IG11c3QgaXQgbWF0Y2ggdGhlIG1hcHBpbmcKKyAqIG9mIHRvZG9fY29tbWFuZF9pbmZvIChpbiBzZXF1ZW5jZXIuYyksIGl0IGlzIGFsc28gZGl2aWRlZCBpbnRvIHNldmVyYWwKKyAqIHNlY3Rpb25zIHRoYXQgbWF0dGVyLiAgV2hlbiBhZGRpbmcgbmV3IGNvbW1hbmRzLCBtYWtlIHN1cmUgeW91IGFkZCBpdCBpbiB0aGUKKyAqIHJpZ2h0IHNlY3Rpb24uCisgKi8KK2VudW0gdG9kb19jb21tYW5kIHsKKwkvKiBjb21tYW5kcyB0aGF0IGhhbmRsZSBjb21taXRzICovCisJVE9ET19QSUNLID0gMCwKKwlUT0RPX1JFVkVSVCwKKwlUT0RPX0VESVQsCisJVE9ET19SRVdPUkQsCisJVE9ET19GSVhVUCwKKwlUT0RPX1NRVUFTSCwKKwkvKiBjb21tYW5kcyB0aGF0IGRvIHNvbWV0aGluZyBlbHNlIHRoYW4gaGFuZGxpbmcgYSBzaW5nbGUgY29tbWl0ICovCisJVE9ET19FWEVDLAorCVRPRE9fQlJFQUssCisJVE9ET19MQUJFTCwKKwlUT0RPX1JFU0VULAorCVRPRE9fTUVSR0UsCisJLyogY29tbWFuZHMgdGhhdCBkbyBub3RoaW5nIGJ1dCBhcmUgY291bnRlZCBmb3IgcmVwb3J0aW5nIHByb2dyZXNzICovCisJVE9ET19OT09QLAorCVRPRE9fRFJPUCwKKwkvKiBjb21tZW50cyAobm90IGNvdW50ZWQgZm9yIHJlcG9ydGluZyBwcm9ncmVzcykgKi8KKwlUT0RPX0NPTU1FTlQKK307CisKK3N0cnVjdCB0b2RvX2l0ZW0geworCWVudW0gdG9kb19jb21tYW5kIGNvbW1hbmQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXVuc2lnbmVkIGludCBmbGFnczsKKwlpbnQgYXJnX2xlbjsKKwkvKiBUaGUgb2Zmc2V0IG9mIHRoZSBjb21tYW5kIGFuZCBpdHMgYXJndW1lbnQgaW4gdGhlIHN0cmJ1ZiAqLworCXNpemVfdCBvZmZzZXRfaW5fYnVmLCBhcmdfb2Zmc2V0OworfTsKKworc3RydWN0IHRvZG9fbGlzdCB7CisJc3RydWN0IHN0cmJ1ZiBidWY7CisJc3RydWN0IHRvZG9faXRlbSAqaXRlbXM7CisJaW50IG5yLCBhbGxvYywgY3VycmVudDsKKwlpbnQgZG9uZV9uciwgdG90YWxfbnI7CisJc3RydWN0IHN0YXRfZGF0YSBzdGF0OworfTsKKworI2RlZmluZSBUT0RPX0xJU1RfSU5JVCB7IFNUUkJVRl9JTklUIH0KKworaW50IHRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY2hhciAqYnVmLAorCQkJCXN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCk7CitpbnQgdG9kb19saXN0X3dyaXRlX3RvX2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCwKKwkJCSAgICBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpzaG9ydHJldmlzaW9ucywKKwkJCSAgICBjb25zdCBjaGFyICpzaG9ydG9udG8sIGludCBudW0sIHVuc2lnbmVkIGZsYWdzKTsKK3ZvaWQgdG9kb19saXN0X3JlbGVhc2Uoc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0KTsKK2NvbnN0IGNoYXIgKnRvZG9faXRlbV9nZXRfYXJnKHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCwKKwkJCSAgICAgIHN0cnVjdCB0b2RvX2l0ZW0gKml0ZW0pOworCisvKiBDYWxsIHRoaXMgdG8gc2V0dXAgZGVmYXVsdHMgYmVmb3JlIHBhcnNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMgKi8KK3ZvaWQgc2VxdWVuY2VyX2luaXRfY29uZmlnKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cyk7CitpbnQgc2VxdWVuY2VyX3BpY2tfcmV2aXNpb25zKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpOworaW50IHNlcXVlbmNlcl9jb250aW51ZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKTsKK2ludCBzZXF1ZW5jZXJfcm9sbGJhY2soc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cyk7CitpbnQgc2VxdWVuY2VyX3NraXAoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cyk7CitpbnQgc2VxdWVuY2VyX3JlbW92ZV9zdGF0ZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpOworCisjZGVmaW5lIFRPRE9fTElTVF9LRUVQX0VNUFRZICgxVSA8PCAwKQorI2RlZmluZSBUT0RPX0xJU1RfU0hPUlRFTl9JRFMgKDFVIDw8IDEpCisjZGVmaW5lIFRPRE9fTElTVF9BQkJSRVZJQVRFX0NNRFMgKDFVIDw8IDIpCisjZGVmaW5lIFRPRE9fTElTVF9SRUJBU0VfTUVSR0VTICgxVSA8PCAzKQorLyoKKyAqIFdoZW4gcmViYXNpbmcgbWVyZ2VzLCBjb21taXRzIHRoYXQgZG8gaGF2ZSB0aGUgYmFzZSBjb21taXQgYXMgYW5jZXN0b3IKKyAqICgiY291c2lucyIpIGFyZSAqbm90KiByZWJhc2VkIG9udG8gdGhlIG5ldyBiYXNlIGJ5IGRlZmF1bHQuIElmIHRob3NlCisgKiBjb21taXRzIHNob3VsZCBiZSByZWJhc2VkIG9udG8gdGhlIG5ldyBiYXNlLCB0aGlzIGZsYWcgbmVlZHMgdG8gYmUgcGFzc2VkLgorICovCisjZGVmaW5lIFRPRE9fTElTVF9SRUJBU0VfQ09VU0lOUyAoMVUgPDwgNCkKKyNkZWZpbmUgVE9ET19MSVNUX0FQUEVORF9UT0RPX0hFTFAgKDFVIDw8IDUpCisvKgorICogV2hlbiBnZW5lcmF0aW5nIGEgc2NyaXB0IHRoYXQgcmViYXNlcyBtZXJnZXMgd2l0aCBgLS1yb290YCAqYW5kKiB3aXRoCisgKiBgLS1vbnRvYCwgd2UgZG8gbm90IHdhbnQgdG8gcmUtZ2VuZXJhdGUgdGhlIHJvb3QgY29tbWl0cy4KKyAqLworI2RlZmluZSBUT0RPX0xJU1RfUk9PVF9XSVRIX09OVE8gKDFVIDw8IDYpCisjZGVmaW5lIFRPRE9fTElTVF9SRUFQUExZX0NIRVJSWV9QSUNLUyAoMVUgPDwgNykKKworaW50IHNlcXVlbmNlcl9tYWtlX3NjcmlwdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHN0cmJ1ZiAqb3V0LCBpbnQgYXJnYywKKwkJCSAgY29uc3QgY2hhciAqKmFyZ3YsIHVuc2lnbmVkIGZsYWdzKTsKKwordm9pZCB0b2RvX2xpc3RfYWRkX2V4ZWNfY29tbWFuZHMoc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0LAorCQkJCSBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNvbW1hbmRzKTsKK2ludCBjb21wbGV0ZV9hY3Rpb24oc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywgdW5zaWduZWQgZmxhZ3MsCisJCSAgICBjb25zdCBjaGFyICpzaG9ydHJldmlzaW9ucywgY29uc3QgY2hhciAqb250b19uYW1lLAorCQkgICAgc3RydWN0IGNvbW1pdCAqb250bywgY29uc3QgY2hhciAqb3JpZ19oZWFkLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNvbW1hbmRzLAorCQkgICAgdW5zaWduZWQgYXV0b3NxdWFzaCwgc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0KTsKK2ludCB0b2RvX2xpc3RfcmVhcnJhbmdlX3NxdWFzaChzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QpOworCisvKgorICogQXBwZW5kIGEgc2lnbm9mZiB0byB0aGUgY29tbWl0IG1lc3NhZ2UgaW4gIm1zZ2J1ZiIuIFRoZSBpZ25vcmVfZm9vdGVyCisgKiBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXQgdGhlIGVuZCBvZiBtc2didWYgdGhhdCBzaG91bGQKKyAqIG5vdCBiZSBjb25zaWRlcmVkIGF0IGFsbC4gSS5lLiwgdGhleSBhcmUgbm90IGNoZWNrZWQgZm9yIGV4aXN0aW5nIHRyYWlsZXJzLAorICogYW5kIHRoZSBuZXcgc2lnbm9mZiB3aWxsIGJlIHNwbGljZWQgaW50byB0aGUgYnVmZmVyIGJlZm9yZSB0aG9zZSBieXRlcy4KKyAqLwordm9pZCBhcHBlbmRfc2lnbm9mZihzdHJ1Y3Qgc3RyYnVmICptc2didWYsIHNpemVfdCBpZ25vcmVfZm9vdGVyLCB1bnNpZ25lZCBmbGFnKTsKKwordm9pZCBhcHBlbmRfY29uZmxpY3RzX2hpbnQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCXN0cnVjdCBzdHJidWYgKm1zZ2J1ZiwgZW51bSBjb21taXRfbXNnX2NsZWFudXBfbW9kZSBjbGVhbnVwX21vZGUpOworZW51bSBjb21taXRfbXNnX2NsZWFudXBfbW9kZSBnZXRfY2xlYW51cF9tb2RlKGNvbnN0IGNoYXIgKmNsZWFudXBfYXJnLAorCWludCB1c2VfZWRpdG9yKTsKKwordm9pZCBjbGVhbnVwX21lc3NhZ2Uoc3RydWN0IHN0cmJ1ZiAqbXNnYnVmLAorCWVudW0gY29tbWl0X21zZ19jbGVhbnVwX21vZGUgY2xlYW51cF9tb2RlLCBpbnQgdmVyYm9zZSk7CisKK2ludCBtZXNzYWdlX2lzX2VtcHR5KGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiLAorCQkgICAgIGVudW0gY29tbWl0X21zZ19jbGVhbnVwX21vZGUgY2xlYW51cF9tb2RlKTsKK2ludCB0ZW1wbGF0ZV91bnRvdWNoZWQoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnRlbXBsYXRlX2ZpbGUsCisJCSAgICAgICBlbnVtIGNvbW1pdF9tc2dfY2xlYW51cF9tb2RlIGNsZWFudXBfbW9kZSk7CitpbnQgdXBkYXRlX2hlYWRfd2l0aF9yZWZsb2coY29uc3Qgc3RydWN0IGNvbW1pdCAqb2xkX2hlYWQsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X2hlYWQsCisJCQkgICAgY29uc3QgY2hhciAqYWN0aW9uLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICptc2csCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKK3ZvaWQgY29tbWl0X3Bvc3RfcmV3cml0ZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjdXJyZW50X2hlYWQsCisJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X2hlYWQpOworCit2b2lkIGNyZWF0ZV9hdXRvc3Rhc2goc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfcmVmbG9nX2FjdGlvbik7CitpbnQgc2F2ZV9hdXRvc3Rhc2goY29uc3QgY2hhciAqcGF0aCk7CitpbnQgYXBwbHlfYXV0b3N0YXNoKGNvbnN0IGNoYXIgKnBhdGgpOworaW50IGFwcGx5X2F1dG9zdGFzaF9vaWQoY29uc3QgY2hhciAqc3Rhc2hfb2lkKTsKKworI2RlZmluZSBTVU1NQVJZX0lOSVRJQUxfQ09NTUlUICAgKDEgPDwgMCkKKyNkZWZpbmUgU1VNTUFSWV9TSE9XX0FVVEhPUl9EQVRFICgxIDw8IDEpCit2b2lkIHByaW50X2NvbW1pdF9zdW1tYXJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgdW5zaWduZWQgaW50IGZsYWdzKTsKKworI2RlZmluZSBSRUFEX09ORUxJTkVSX1NLSVBfSUZfRU1QVFkgKDEgPDwgMCkKKyNkZWZpbmUgUkVBRF9PTkVMSU5FUl9XQVJOX01JU1NJTkcgKDEgPDwgMSkKKworLyoKKyAqIFJlYWRzIGEgZmlsZSB0aGF0IHdhcyBwcmVzdW1hYmx5IHdyaXR0ZW4gYnkgYSBzaGVsbCBzY3JpcHQsIGkuZS4gd2l0aCBhbgorICogZW5kLW9mLWxpbmUgbWFya2VyIHRoYXQgbmVlZHMgdG8gYmUgc3RyaXBwZWQuCisgKgorICogTm90ZSB0aGF0IG9ubHkgdGhlIGxhc3QgZW5kLW9mLWxpbmUgbWFya2VyIGlzIHN0cmlwcGVkLCBjb25zaXN0ZW50IHdpdGggdGhlCisgKiBiZWhhdmlvciBvZiAiJChjYXQgcGF0aCkiIGluIGEgc2hlbGwgc2NyaXB0LgorICoKKyAqIFJldHVybnMgMSBpZiB0aGUgZmlsZSB3YXMgcmVhZCwgMCBpZiBpdCBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBleGlzdC4KKyAqLworaW50IHJlYWRfb25lbGluZXIoc3RydWN0IHN0cmJ1ZiAqYnVmLAorCWNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzKTsKK2ludCByZWFkX2F1dGhvcl9zY3JpcHQoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqKm5hbWUsIGNoYXIgKiplbWFpbCwgY2hhciAqKmRhdGUsCisJCSAgICAgICBpbnQgYWxsb3dfbWlzc2luZyk7Cit2b2lkIHBhcnNlX3N0cmF0ZWd5X29wdHMoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzLCBjaGFyICpyYXdfb3B0cyk7CitpbnQgd3JpdGVfYmFzaWNfc3RhdGUoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzLCBjb25zdCBjaGFyICpoZWFkX25hbWUsCisJCSAgICAgIHN0cnVjdCBjb21taXQgKm9udG8sIGNvbnN0IGNoYXIgKm9yaWdfaGVhZCk7Cit2b2lkIHNlcXVlbmNlcl9wb3N0X2NvbW1pdF9jbGVhbnVwKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBpbnQgdmVyYm9zZSk7CitpbnQgc2VxdWVuY2VyX2dldF9sYXN0X2NvbW1hbmQoc3RydWN0IHJlcG9zaXRvcnkqIHIsCisJCQkgICAgICAgZW51bSByZXBsYXlfYWN0aW9uICphY3Rpb24pOworaW50IHNlcXVlbmNlcl9kZXRlcm1pbmVfd2hlbmNlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBlbnVtIGNvbW1pdF93aGVuY2UgKndoZW5jZSk7CisjZW5kaWYgLyogU0VRVUVOQ0VSX0ggKi8KZGlmZiAtLWdpdCBhL3NlcnZlLmMgYi9zZXJ2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNzI1NmMKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2ZS5jCkBAIC0wLDAgKzEsMjU5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgImxzLXJlZnMuaCIKKyNpbmNsdWRlICJzZXJ2ZS5oIgorI2luY2x1ZGUgInVwbG9hZC1wYWNrLmgiCisKK3N0YXRpYyBpbnQgYWx3YXlzX2FkdmVydGlzZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICp2YWx1ZSkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhZ2VudF9hZHZlcnRpc2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICp2YWx1ZSkKK3sKKwlpZiAodmFsdWUpCisJCXN0cmJ1Zl9hZGRzdHIodmFsdWUsIGdpdF91c2VyX2FnZW50X3Nhbml0aXplZCgpKTsKKwlyZXR1cm4gMTsKK30KKworc3RydWN0IHByb3RvY29sX2NhcGFiaWxpdHkgeworCS8qCisJICogVGhlIG5hbWUgb2YgdGhlIGNhcGFiaWxpdHkuICBUaGUgc2VydmVyIHVzZXMgdGhpcyBuYW1lIHdoZW4KKwkgKiBhZHZlcnRpc2luZyB0aGlzIGNhcGFiaWxpdHksIGFuZCB0aGUgY2xpZW50IHVzZXMgdGhpcyBuYW1lIHRvCisJICogc3BlY2lmeSB0aGlzIGNhcGFiaWxpdHkuCisJICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qCisJICogRnVuY3Rpb24gcXVlcmllZCB0byBzZWUgaWYgYSBjYXBhYmlsaXR5IHNob3VsZCBiZSBhZHZlcnRpc2VkLgorCSAqIE9wdGlvbmFsbHkgYSB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIGJ5IGFkZGluZyBpdCB0byAndmFsdWUnLgorCSAqIElmIGEgdmFsdWUgaXMgYWRkZWQgdG8gJ3ZhbHVlJywgdGhlIHNlcnZlciB3aWxsIGFkdmVydGlzZSB0aGlzCisJICogY2FwYWJpbGl0eSBhcyAiPG5hbWU+PTx2YWx1ZT4iIGluc3RlYWQgb2YgIjxuYW1lPiIuCisJICovCisJaW50ICgqYWR2ZXJ0aXNlKShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHN0cmJ1ZiAqdmFsdWUpOworCisJLyoKKwkgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiBhIGNsaWVudCByZXF1ZXN0cyB0aGUgY2FwYWJpbGl0eSBhcyBhIGNvbW1hbmQuCisJICogVGhlIGZ1bmN0aW9uIHdpbGwgYmUgcHJvdmlkZWQgdGhlIGNhcGFiaWxpdGllcyByZXF1ZXN0ZWQgdmlhICdrZXlzJworCSAqIGFzIHdlbGwgYXMgYSBzdHJ1Y3QgcGFja2V0X3JlYWRlciAncmVxdWVzdCcgd2hpY2ggdGhlIGNvbW1hbmQgc2hvdWxkCisJICogdXNlIHRvIHJlYWQgdGhlIGNvbW1hbmQgc3BlY2lmaWMgcGFydCBvZiB0aGUgcmVxdWVzdC4gIEV2ZXJ5IGNvbW1hbmQKKwkgKiBNVVNUIHJlYWQgdW50aWwgYSBmbHVzaCBwYWNrZXQgaXMgc2VlbiBiZWZvcmUgc2VuZGluZyBhIHJlc3BvbnNlLgorCSAqCisJICogVGhpcyBmaWVsZCBzaG91bGQgYmUgTlVMTCBmb3IgY2FwYWJpbGl0aWVzIHdoaWNoIGFyZSBub3QgY29tbWFuZHMuCisJICovCisJaW50ICgqY29tbWFuZCkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICAgICBzdHJ1Y3QgYXJndl9hcnJheSAqa2V5cywKKwkJICAgICAgIHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZXF1ZXN0KTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHJvdG9jb2xfY2FwYWJpbGl0eSBjYXBhYmlsaXRpZXNbXSA9IHsKKwl7ICJhZ2VudCIsIGFnZW50X2FkdmVydGlzZSwgTlVMTCB9LAorCXsgImxzLXJlZnMiLCBhbHdheXNfYWR2ZXJ0aXNlLCBsc19yZWZzIH0sCisJeyAiZmV0Y2giLCB1cGxvYWRfcGFja19hZHZlcnRpc2UsIHVwbG9hZF9wYWNrX3YyIH0sCisJeyAic2VydmVyLW9wdGlvbiIsIGFsd2F5c19hZHZlcnRpc2UsIE5VTEwgfSwKK307CisKK3N0YXRpYyB2b2lkIGFkdmVydGlzZV9jYXBhYmlsaXRpZXModm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGNhcGFiaWxpdHkgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHZhbHVlID0gU1RSQlVGX0lOSVQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjYXBhYmlsaXRpZXMpOyBpKyspIHsKKwkJc3RydWN0IHByb3RvY29sX2NhcGFiaWxpdHkgKmMgPSAmY2FwYWJpbGl0aWVzW2ldOworCisJCWlmIChjLT5hZHZlcnRpc2UodGhlX3JlcG9zaXRvcnksICZ2YWx1ZSkpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmNhcGFiaWxpdHksIGMtPm5hbWUpOworCisJCQlpZiAodmFsdWUubGVuKSB7CisJCQkJc3RyYnVmX2FkZGNoKCZjYXBhYmlsaXR5LCAnPScpOworCQkJCXN0cmJ1Zl9hZGRidWYoJmNhcGFiaWxpdHksICZ2YWx1ZSk7CisJCQl9CisKKwkJCXN0cmJ1Zl9hZGRjaCgmY2FwYWJpbGl0eSwgJ1xuJyk7CisJCQlwYWNrZXRfd3JpdGUoMSwgY2FwYWJpbGl0eS5idWYsIGNhcGFiaWxpdHkubGVuKTsKKwkJfQorCisJCXN0cmJ1Zl9yZXNldCgmY2FwYWJpbGl0eSk7CisJCXN0cmJ1Zl9yZXNldCgmdmFsdWUpOworCX0KKworCXBhY2tldF9mbHVzaCgxKTsKKwlzdHJidWZfcmVsZWFzZSgmY2FwYWJpbGl0eSk7CisJc3RyYnVmX3JlbGVhc2UoJnZhbHVlKTsKK30KKworc3RhdGljIHN0cnVjdCBwcm90b2NvbF9jYXBhYmlsaXR5ICpnZXRfY2FwYWJpbGl0eShjb25zdCBjaGFyICprZXkpCit7CisJaW50IGk7CisKKwlpZiAoIWtleSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjYXBhYmlsaXRpZXMpOyBpKyspIHsKKwkJc3RydWN0IHByb3RvY29sX2NhcGFiaWxpdHkgKmMgPSAmY2FwYWJpbGl0aWVzW2ldOworCQljb25zdCBjaGFyICpvdXQ7CisJCWlmIChza2lwX3ByZWZpeChrZXksIGMtPm5hbWUsICZvdXQpICYmICghKm91dCB8fCAqb3V0ID09ICc9JykpCisJCQlyZXR1cm4gYzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBpc192YWxpZF9jYXBhYmlsaXR5KGNvbnN0IGNoYXIgKmtleSkKK3sKKwljb25zdCBzdHJ1Y3QgcHJvdG9jb2xfY2FwYWJpbGl0eSAqYyA9IGdldF9jYXBhYmlsaXR5KGtleSk7CisKKwlyZXR1cm4gYyAmJiBjLT5hZHZlcnRpc2UodGhlX3JlcG9zaXRvcnksIE5VTEwpOworfQorCitzdGF0aWMgaW50IGlzX2NvbW1hbmQoY29uc3QgY2hhciAqa2V5LCBzdHJ1Y3QgcHJvdG9jb2xfY2FwYWJpbGl0eSAqKmNvbW1hbmQpCit7CisJY29uc3QgY2hhciAqb3V0OworCisJaWYgKHNraXBfcHJlZml4KGtleSwgImNvbW1hbmQ9IiwgJm91dCkpIHsKKwkJc3RydWN0IHByb3RvY29sX2NhcGFiaWxpdHkgKmNtZCA9IGdldF9jYXBhYmlsaXR5KG91dCk7CisKKwkJaWYgKCpjb21tYW5kKQorCQkJZGllKCJjb21tYW5kICclcycgcmVxdWVzdGVkIGFmdGVyIGFscmVhZHkgcmVxdWVzdGluZyBjb21tYW5kICclcyciLAorCQkJICAgIG91dCwgKCpjb21tYW5kKS0+bmFtZSk7CisJCWlmICghY21kIHx8ICFjbWQtPmFkdmVydGlzZSh0aGVfcmVwb3NpdG9yeSwgTlVMTCkgfHwgIWNtZC0+Y29tbWFuZCkKKwkJCWRpZSgiaW52YWxpZCBjb21tYW5kICclcyciLCBvdXQpOworCisJCSpjb21tYW5kID0gY21kOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGhhc19jYXBhYmlsaXR5KGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICprZXlzLCBjb25zdCBjaGFyICpjYXBhYmlsaXR5LAorCQkgICBjb25zdCBjaGFyICoqdmFsdWUpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGtleXMtPmFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICpvdXQ7CisJCWlmIChza2lwX3ByZWZpeChrZXlzLT5hcmd2W2ldLCBjYXBhYmlsaXR5LCAmb3V0KSAmJgorCQkgICAgKCEqb3V0IHx8ICpvdXQgPT0gJz0nKSkgeworCQkJaWYgKHZhbHVlKSB7CisJCQkJaWYgKCpvdXQgPT0gJz0nKQorCQkJCQlvdXQrKzsKKwkJCQkqdmFsdWUgPSBvdXQ7CisJCQl9CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitlbnVtIHJlcXVlc3Rfc3RhdGUgeworCVBST0NFU1NfUkVRVUVTVF9LRVlTLAorCVBST0NFU1NfUkVRVUVTVF9ET05FLAorfTsKKworc3RhdGljIGludCBwcm9jZXNzX3JlcXVlc3Qodm9pZCkKK3sKKwllbnVtIHJlcXVlc3Rfc3RhdGUgc3RhdGUgPSBQUk9DRVNTX1JFUVVFU1RfS0VZUzsKKwlzdHJ1Y3QgcGFja2V0X3JlYWRlciByZWFkZXI7CisJc3RydWN0IGFyZ3ZfYXJyYXkga2V5cyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgcHJvdG9jb2xfY2FwYWJpbGl0eSAqY29tbWFuZCA9IE5VTEw7CisKKwlwYWNrZXRfcmVhZGVyX2luaXQoJnJlYWRlciwgMCwgTlVMTCwgMCwKKwkJCSAgIFBBQ0tFVF9SRUFEX0NIT01QX05FV0xJTkUgfAorCQkJICAgUEFDS0VUX1JFQURfR0VOVExFX09OX0VPRiB8CisJCQkgICBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCk7CisKKwkvKgorCSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgY2xpZW50IGNsb3NlZCB0aGVpciBlbmQgYmVmb3JlIHNlbmRpbmcgYW5vdGhlcgorCSAqIHJlcXVlc3QuICBJZiBzbyB3ZSBjYW4gdGVybWluYXRlIHRoZSBjb25uZWN0aW9uLgorCSAqLworCWlmIChwYWNrZXRfcmVhZGVyX3BlZWsoJnJlYWRlcikgPT0gUEFDS0VUX1JFQURfRU9GKQorCQlyZXR1cm4gMTsKKwlyZWFkZXIub3B0aW9ucyAmPSB+UEFDS0VUX1JFQURfR0VOVExFX09OX0VPRjsKKworCXdoaWxlIChzdGF0ZSAhPSBQUk9DRVNTX1JFUVVFU1RfRE9ORSkgeworCQlzd2l0Y2ggKHBhY2tldF9yZWFkZXJfcGVlaygmcmVhZGVyKSkgeworCQljYXNlIFBBQ0tFVF9SRUFEX0VPRjoKKwkJCUJVRygiU2hvdWxkIGhhdmUgYWxyZWFkeSBkaWVkIHdoZW4gc2VlaW5nIEVPRiIpOworCQljYXNlIFBBQ0tFVF9SRUFEX05PUk1BTDoKKwkJCS8qIGNvbGxlY3QgcmVxdWVzdDsgYSBzZXF1ZW5jZSBvZiBrZXlzIGFuZCB2YWx1ZXMgKi8KKwkJCWlmIChpc19jb21tYW5kKHJlYWRlci5saW5lLCAmY29tbWFuZCkgfHwKKwkJCSAgICBpc192YWxpZF9jYXBhYmlsaXR5KHJlYWRlci5saW5lKSkKKwkJCQlhcmd2X2FycmF5X3B1c2goJmtleXMsIHJlYWRlci5saW5lKTsKKwkJCWVsc2UKKwkJCQlkaWUoInVua25vd24gY2FwYWJpbGl0eSAnJXMnIiwgcmVhZGVyLmxpbmUpOworCisJCQkvKiBDb25zdW1lIHRoZSBwZWVrZWQgbGluZSAqLworCQkJcGFja2V0X3JlYWRlcl9yZWFkKCZyZWFkZXIpOworCQkJYnJlYWs7CisJCWNhc2UgUEFDS0VUX1JFQURfRkxVU0g6CisJCQkvKgorCQkJICogSWYgbm8gY29tbWFuZCBhbmQgbm8ga2V5cyB3ZXJlIGdpdmVuIHRoZW4gdGhlIGNsaWVudAorCQkJICogd2FudGVkIHRvIHRlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbi4KKwkJCSAqLworCQkJaWYgKCFrZXlzLmFyZ2MpCisJCQkJcmV0dXJuIDE7CisKKwkJCS8qCisJCQkgKiBUaGUgZmx1c2ggcGFja2V0IGlzbid0IGNvbnN1bWUgaGVyZSBsaWtlIGl0IGlzIGluCisJCQkgKiB0aGUgb3RoZXIgcGFydHMgb2YgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LiAgVGhpcyBpcworCQkJICogc28gdGhhdCB0aGUgY29tbWFuZCBjYW4gcmVhZCB0aGUgZmx1c2ggcGFja2V0IGFuZAorCQkJICogc2VlIHRoZSBlbmQgb2YgdGhlIHJlcXVlc3QgaW4gdGhlIHNhbWUgd2F5IGl0IHdvdWxkCisJCQkgKiBpZiBjb21tYW5kIHNwZWNpZmljIGFyZ3VtZW50cyB3ZXJlIHByb3ZpZGVkIGFmdGVyIGEKKwkJCSAqIGRlbGltIHBhY2tldC4KKwkJCSAqLworCQkJc3RhdGUgPSBQUk9DRVNTX1JFUVVFU1RfRE9ORTsKKwkJCWJyZWFrOworCQljYXNlIFBBQ0tFVF9SRUFEX0RFTElNOgorCQkJLyogQ29uc3VtZSB0aGUgcGVla2VkIGxpbmUgKi8KKwkJCXBhY2tldF9yZWFkZXJfcmVhZCgmcmVhZGVyKTsKKworCQkJc3RhdGUgPSBQUk9DRVNTX1JFUVVFU1RfRE9ORTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFjb21tYW5kKQorCQlkaWUoIm5vIGNvbW1hbmQgcmVxdWVzdGVkIik7CisKKwljb21tYW5kLT5jb21tYW5kKHRoZV9yZXBvc2l0b3J5LCAma2V5cywgJnJlYWRlcik7CisKKwlhcmd2X2FycmF5X2NsZWFyKCZrZXlzKTsKKwlyZXR1cm4gMDsKK30KKworLyogTWFpbiBzZXJ2ZSBsb29wIGZvciBwcm90b2NvbCB2ZXJzaW9uIDIgKi8KK3ZvaWQgc2VydmUoc3RydWN0IHNlcnZlX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaWYgKG9wdGlvbnMtPmFkdmVydGlzZV9jYXBhYmlsaXRpZXMgfHwgIW9wdGlvbnMtPnN0YXRlbGVzc19ycGMpIHsKKwkJLyogc2VydmUgYnkgZGVmYXVsdCBzdXBwb3J0cyB2MiAqLworCQlwYWNrZXRfd3JpdGVfZm10KDEsICJ2ZXJzaW9uIDJcbiIpOworCisJCWFkdmVydGlzZV9jYXBhYmlsaXRpZXMoKTsKKwkJLyoKKwkJICogSWYgb25seSB0aGUgbGlzdCBvZiBjYXBhYmlsaXRpZXMgd2FzIHJlcXVlc3RlZCBleGl0CisJCSAqIGltbWVkaWF0ZWx5IGFmdGVyIGFkdmVydGlzaW5nIGNhcGFiaWxpdGllcworCQkgKi8KKwkJaWYgKG9wdGlvbnMtPmFkdmVydGlzZV9jYXBhYmlsaXRpZXMpCisJCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiBzdGF0ZWxlc3MtcnBjIHdhcyByZXF1ZXN0ZWQgdGhlbiBleGl0IGFmdGVyCisJICogYSBzaW5nbGUgcmVxdWVzdC9yZXNwb25zZSBleGNoYW5nZQorCSAqLworCWlmIChvcHRpb25zLT5zdGF0ZWxlc3NfcnBjKSB7CisJCXByb2Nlc3NfcmVxdWVzdCgpOworCX0gZWxzZSB7CisJCWZvciAoOzspCisJCQlpZiAocHJvY2Vzc19yZXF1ZXN0KCkpCisJCQkJYnJlYWs7CisJfQorfQpkaWZmIC0tZ2l0IGEvc2VydmUuaCBiL3NlcnZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkZGNhNwotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZlLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBTRVJWRV9ICisjZGVmaW5lIFNFUlZFX0gKKworc3RydWN0IGFyZ3ZfYXJyYXk7CitpbnQgaGFzX2NhcGFiaWxpdHkoY29uc3Qgc3RydWN0IGFyZ3ZfYXJyYXkgKmtleXMsIGNvbnN0IGNoYXIgKmNhcGFiaWxpdHksCisJCSAgIGNvbnN0IGNoYXIgKip2YWx1ZSk7CisKK3N0cnVjdCBzZXJ2ZV9vcHRpb25zIHsKKwl1bnNpZ25lZCBhZHZlcnRpc2VfY2FwYWJpbGl0aWVzOworCXVuc2lnbmVkIHN0YXRlbGVzc19ycGM7Cit9OworI2RlZmluZSBTRVJWRV9PUFRJT05TX0lOSVQgeyAwIH0KK3ZvaWQgc2VydmUoc3RydWN0IHNlcnZlX29wdGlvbnMgKm9wdGlvbnMpOworCisjZW5kaWYgLyogU0VSVkVfSCAqLwpkaWZmIC0tZ2l0IGEvc2VydmVyLWluZm8uYyBiL3NlcnZlci1pbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlMmNkZgotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZlci1pbmZvLmMKQEAgLTAsMCArMSwzNjcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RydWN0IHVwZGF0ZV9pbmZvX2N0eCB7CisJRklMRSAqY3VyX2ZwOworCUZJTEUgKm9sZF9mcDsgLyogYmVjb21lcyBOVUxMIGlmIGl0IGRpZmZlcnMgZnJvbSBjdXJfZnAgKi8KKwlzdHJ1Y3Qgc3RyYnVmIGN1cl9zYjsKKwlzdHJ1Y3Qgc3RyYnVmIG9sZF9zYjsKK307CisKK3N0YXRpYyB2b2lkIHVpY19tYXJrX3N0YWxlKHN0cnVjdCB1cGRhdGVfaW5mb19jdHggKnVpYykKK3sKKwlmY2xvc2UodWljLT5vbGRfZnApOworCXVpYy0+b2xkX2ZwID0gTlVMTDsKK30KKworc3RhdGljIGludCB1aWNfaXNfc3RhbGUoY29uc3Qgc3RydWN0IHVwZGF0ZV9pbmZvX2N0eCAqdWljKQoreworCXJldHVybiB1aWMtPm9sZF9mcCA9PSBOVUxMOworfQorCitzdGF0aWMgaW50IHVpY19wcmludGYoc3RydWN0IHVwZGF0ZV9pbmZvX2N0eCAqdWljLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCByZXQgPSAtMTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCisJaWYgKHVpY19pc19zdGFsZSh1aWMpKSB7CisJCXJldCA9IHZmcHJpbnRmKHVpYy0+Y3VyX2ZwLCBmbXQsIGFwKTsKKwl9IGVsc2UgeworCQlzc2l6ZV90IHI7CisJCXN0cnVjdCBzdHJidWYgKmN1ciA9ICZ1aWMtPmN1cl9zYjsKKwkJc3RydWN0IHN0cmJ1ZiAqb2xkID0gJnVpYy0+b2xkX3NiOworCisJCXN0cmJ1Zl9yZXNldChjdXIpOworCQlzdHJidWZfdmluc2VydGYoY3VyLCAwLCBmbXQsIGFwKTsKKworCQlzdHJidWZfcmVzZXQob2xkKTsKKwkJc3RyYnVmX2dyb3cob2xkLCBjdXItPmxlbik7CisJCXIgPSBmcmVhZChvbGQtPmJ1ZiwgMSwgY3VyLT5sZW4sIHVpYy0+b2xkX2ZwKTsKKwkJaWYgKHIgIT0gY3VyLT5sZW4gfHwgbWVtY21wKG9sZC0+YnVmLCBjdXItPmJ1ZiwgcikpCisJCQl1aWNfbWFya19zdGFsZSh1aWMpOworCisJCWlmIChmd3JpdGUoY3VyLT5idWYsIDEsIGN1ci0+bGVuLCB1aWMtPmN1cl9mcCkgPT0gY3VyLT5sZW4pCisJCQlyZXQgPSAwOworCX0KKworCXZhX2VuZChhcCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ3JlYXRlIHRoZSBmaWxlICJwYXRoIiBieSB3cml0aW5nIHRvIGEgdGVtcG9yYXJ5IGZpbGUgYW5kIHJlbmFtaW5nCisgKiBpdCBpbnRvIHBsYWNlLiBUaGUgY29udGVudHMgb2YgdGhlIGZpbGUgY29tZSBmcm9tICJnZW5lcmF0ZSIsIHdoaWNoCisgKiBzaG91bGQgcmV0dXJuIG5vbi16ZXJvIGlmIGl0IGVuY291bnRlcnMgYW4gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgdXBkYXRlX2luZm9fZmlsZShjaGFyICpwYXRoLAorCQkJaW50ICgqZ2VuZXJhdGUpKHN0cnVjdCB1cGRhdGVfaW5mb19jdHggKiksCisJCQlpbnQgZm9yY2UpCit7CisJY2hhciAqdG1wID0gbWtwYXRoZHVwKCIlc19YWFhYWFgiLCBwYXRoKTsKKwlpbnQgcmV0ID0gLTE7CisJaW50IGZkID0gLTE7CisJRklMRSAqdG9fY2xvc2U7CisJc3RydWN0IHVwZGF0ZV9pbmZvX2N0eCB1aWMgPSB7CisJCS5jdXJfZnAgPSBOVUxMLAorCQkub2xkX2ZwID0gTlVMTCwKKwkJLmN1cl9zYiA9IFNUUkJVRl9JTklULAorCQkub2xkX3NiID0gU1RSQlVGX0lOSVQKKwl9OworCisJc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhwYXRoKTsKKwlmZCA9IGdpdF9ta3N0ZW1wX21vZGUodG1wLCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlnb3RvIG91dDsKKwl0b19jbG9zZSA9IHVpYy5jdXJfZnAgPSBmZG9wZW4oZmQsICJ3Iik7CisJaWYgKCF1aWMuY3VyX2ZwKQorCQlnb3RvIG91dDsKKwlmZCA9IC0xOworCisJLyogbm8gcHJvYmxlbSBvbiBFTk9FTlQgYW5kIG9sZF9mcCA9PSBOVUxMLCBpdCdzIHN0YWxlLCBub3cgKi8KKwlpZiAoIWZvcmNlKQorCQl1aWMub2xkX2ZwID0gZm9wZW5fb3Jfd2FybihwYXRoLCAiciIpOworCisJLyoKKwkgKiB1aWNfcHJpbnRmIHdpbGwgY29tcGFyZSBpbmNyZW1lbnRhbCBjb21wYXJpc29uIGFnYWluc3Qgb2xkX2ZwCisJICogYW5kIG1hcmsgdWljIGFzIHN0YWxlIGlmIG5lZWRlZAorCSAqLworCXJldCA9IGdlbmVyYXRlKCZ1aWMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogbmV3IGZpbGUgbWF5IGJlIHNob3J0ZXIgdGhhbiB0aGUgb2xkIG9uZSwgY2hlY2sgaGVyZSAqLworCWlmICghdWljX2lzX3N0YWxlKCZ1aWMpKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQlsb25nIG5ld19sZW4gPSBmdGVsbCh1aWMuY3VyX2ZwKTsKKwkJaW50IG9sZF9mZCA9IGZpbGVubyh1aWMub2xkX2ZwKTsKKworCQlpZiAobmV3X2xlbiA8IDApIHsKKwkJCXJldCA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGZzdGF0KG9sZF9mZCwgJnN0KSB8fCAoc3Quc3Rfc2l6ZSAhPSAoc2l6ZV90KW5ld19sZW4pKQorCQkJdWljX21hcmtfc3RhbGUoJnVpYyk7CisJfQorCisJdWljLmN1cl9mcCA9IE5VTEw7CisJaWYgKGZjbG9zZSh0b19jbG9zZSkpCisJCWdvdG8gb3V0OworCisJaWYgKHVpY19pc19zdGFsZSgmdWljKSkgeworCQlpZiAoYWRqdXN0X3NoYXJlZF9wZXJtKHRtcCkgPCAwKQorCQkJZ290byBvdXQ7CisJCWlmIChyZW5hbWUodG1wLCBwYXRoKSA8IDApCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQl1bmxpbmsodG1wKTsKKwl9CisJcmV0ID0gMDsKKworb3V0OgorCWlmIChyZXQpIHsKKwkJZXJyb3JfZXJybm8oInVuYWJsZSB0byB1cGRhdGUgJXMiLCBwYXRoKTsKKwkJaWYgKHVpYy5jdXJfZnApCisJCQlmY2xvc2UodWljLmN1cl9mcCk7CisJCWVsc2UgaWYgKGZkID49IDApCisJCQljbG9zZShmZCk7CisJCXVubGluayh0bXApOworCX0KKwlmcmVlKHRtcCk7CisJaWYgKHVpYy5vbGRfZnApCisJCWZjbG9zZSh1aWMub2xkX2ZwKTsKKwlzdHJidWZfcmVsZWFzZSgmdWljLm9sZF9zYik7CisJc3RyYnVmX3JlbGVhc2UoJnVpYy5jdXJfc2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2luZm9fcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCWludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCB1cGRhdGVfaW5mb19jdHggKnVpYyA9IGNiX2RhdGE7CisJc3RydWN0IG9iamVjdCAqbyA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKwlpZiAoIW8pCisJCXJldHVybiAtMTsKKworCWlmICh1aWNfcHJpbnRmKHVpYywgIiVzCSVzXG4iLCBvaWRfdG9faGV4KG9pZCksIHBhdGgpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKG8tPnR5cGUgPT0gT0JKX1RBRykgeworCQlvID0gZGVyZWZfdGFnKHRoZV9yZXBvc2l0b3J5LCBvLCBwYXRoLCAwKTsKKwkJaWYgKG8pCisJCQlpZiAodWljX3ByaW50Zih1aWMsICIlcwklc157fVxuIiwKKwkJCQlvaWRfdG9faGV4KCZvLT5vaWQpLCBwYXRoKSA8IDApCisJCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZW5lcmF0ZV9pbmZvX3JlZnMoc3RydWN0IHVwZGF0ZV9pbmZvX2N0eCAqdWljKQoreworCXJldHVybiBmb3JfZWFjaF9yZWYoYWRkX2luZm9fcmVmLCB1aWMpOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9pbmZvX3JlZnMoaW50IGZvcmNlKQoreworCWNoYXIgKnBhdGggPSBnaXRfcGF0aGR1cCgiaW5mby9yZWZzIik7CisJaW50IHJldCA9IHVwZGF0ZV9pbmZvX2ZpbGUocGF0aCwgZ2VuZXJhdGVfaW5mb19yZWZzLCBmb3JjZSk7CisJZnJlZShwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBwYWNrcyAqLworc3RhdGljIHN0cnVjdCBwYWNrX2luZm8geworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCWludCBvbGRfbnVtOworCWludCBuZXdfbnVtOworfSAqKmluZm87CitzdGF0aWMgaW50IG51bV9wYWNrOworCitzdGF0aWMgc3RydWN0IHBhY2tfaW5mbyAqZmluZF9wYWNrX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhY2s7IGkrKykgeworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGluZm9baV0tPnA7CisJCWlmICghc3RyY21wKHBhY2tfYmFzZW5hbWUocCksIG5hbWUpKQorCQkJcmV0dXJuIGluZm9baV07CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBSZXR1cm5zIG5vbi16ZXJvIHdoZW4gd2UgZGV0ZWN0IHRoYXQgdGhlIGluZm8gaW4gdGhlCisgKiBvbGQgZmlsZSBpcyB1c2VsZXNzLgorICovCitzdGF0aWMgaW50IHBhcnNlX3BhY2tfZGVmKGNvbnN0IGNoYXIgKnBhY2tuYW1lLCBpbnQgb2xkX2NudCkKK3sKKwlzdHJ1Y3QgcGFja19pbmZvICppID0gZmluZF9wYWNrX2J5X25hbWUocGFja25hbWUpOworCWlmIChpKSB7CisJCWktPm9sZF9udW0gPSBvbGRfY250OworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSB7CisJCS8qIFRoZSBmaWxlIGRlc2NyaWJlcyBhIHBhY2sgdGhhdCBpcyBubyBsb25nZXIgaGVyZSAqLworCQlyZXR1cm4gMTsKKwl9Cit9CisKKy8qIFJldHVybnMgbm9uLXplcm8gd2hlbiB3ZSBkZXRlY3QgdGhhdCB0aGUgaW5mbyBpbiB0aGUKKyAqIG9sZCBmaWxlIGlzIHVzZWxlc3MuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9wYWNrX2luZm9fZmlsZShjb25zdCBjaGFyICppbmZvZmlsZSkKK3sKKwlGSUxFICpmcDsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwlpbnQgb2xkX2NudCA9IDA7CisJaW50IHN0YWxlID0gMTsKKworCWZwID0gZm9wZW5fb3Jfd2FybihpbmZvZmlsZSwgInIiKTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gMTsgLyogbm9uZXhpc3RlbnQgaXMgbm90IGFuIGVycm9yLiAqLworCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBmcCkgIT0gRU9GKSB7CisJCWNvbnN0IGNoYXIgKmFyZzsKKworCQlpZiAoIWxpbmUubGVuKQorCQkJY29udGludWU7CisKKwkJaWYgKHNraXBfcHJlZml4KGxpbmUuYnVmLCAiUCAiLCAmYXJnKSkgeworCQkJLyogUCBuYW1lICovCisJCQlpZiAocGFyc2VfcGFja19kZWYoYXJnLCBvbGRfY250KyspKQorCQkJCWdvdG8gb3V0X3N0YWxlOworCQl9IGVsc2UgaWYgKGxpbmUuYnVmWzBdID09ICdEJykgeworCQkJLyogd2UgdXNlZCB0byBlbWl0IEQgYnV0IHRoYXQgd2FzIG1pc2d1aWRlZC4gKi8KKwkJCWdvdG8gb3V0X3N0YWxlOworCQl9IGVsc2UgaWYgKGxpbmUuYnVmWzBdID09ICdUJykgeworCQkJLyogd2UgdXNlZCB0byBlbWl0IFQgYnV0IG5vYm9keSB1c2VzIGl0LiAqLworCQkJZ290byBvdXRfc3RhbGU7CisJCX0gZWxzZSB7CisJCQllcnJvcigidW5yZWNvZ25pemVkOiAlcyIsIGxpbmUuYnVmKTsKKwkJfQorCX0KKwlzdGFsZSA9IDA7CisKKyBvdXRfc3RhbGU6CisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCWZjbG9zZShmcCk7CisJcmV0dXJuIHN0YWxlOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfaW5mbyhjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJc3RydWN0IHBhY2tfaW5mbyAqY29uc3QgKmEgPSBhXzsKKwlzdHJ1Y3QgcGFja19pbmZvICpjb25zdCAqYiA9IGJfOworCisJaWYgKDAgPD0gKCphKS0+b2xkX251bSAmJiAwIDw9ICgqYiktPm9sZF9udW0pCisJCS8qIEtlZXAgdGhlIG9yZGVyIGluIHRoZSBvcmlnaW5hbCAqLworCQlyZXR1cm4gKCphKS0+b2xkX251bSAtICgqYiktPm9sZF9udW07CisJZWxzZSBpZiAoMCA8PSAoKmEpLT5vbGRfbnVtKQorCQkvKiBPbmx5IEEgZXhpc3RlZCBpbiB0aGUgb3JpZ2luYWwgc28gQiBpcyBvYnZpb3VzbHkgbmV3ZXIgKi8KKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKDAgPD0gKCpiKS0+b2xkX251bSkKKwkJLyogVGhlIG90aGVyIHdheSBhcm91bmQuICovCisJCXJldHVybiAxOworCisJLyogdGhlbiBpdCBkb2VzIG5vdCBtYXR0ZXIgYnV0IGF0IGxlYXN0IGtlZXAgdGhlIGNvbXBhcmlzb24gc3RhYmxlICovCisJaWYgKCgqYSktPnAgPT0gKCpiKS0+cCkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoKCphKS0+cCA8ICgqYiktPnApCisJCXJldHVybiAtMTsKKwllbHNlCisJCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBpbml0X3BhY2tfaW5mbyhjb25zdCBjaGFyICppbmZvZmlsZSwgaW50IGZvcmNlKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCWludCBzdGFsZTsKKwlpbnQgaTsKKwlzaXplX3QgYWxsb2MgPSAwOworCisJZm9yIChwID0gZ2V0X2FsbF9wYWNrcyh0aGVfcmVwb3NpdG9yeSk7IHA7IHAgPSBwLT5uZXh0KSB7CisJCS8qIHdlIGlnbm9yZSB0aGluZ3Mgb24gYWx0ZXJuYXRlIHBhdGggc2luY2UgdGhleSBhcmUKKwkJICogbm90IGF2YWlsYWJsZSB0byB0aGUgcHVsbGVycyBpbiBnZW5lcmFsLgorCQkgKi8KKwkJaWYgKCFwLT5wYWNrX2xvY2FsIHx8ICFmaWxlX2V4aXN0cyhwLT5wYWNrX25hbWUpKQorCQkJY29udGludWU7CisKKwkJaSA9IG51bV9wYWNrKys7CisJCUFMTE9DX0dST1coaW5mbywgbnVtX3BhY2ssIGFsbG9jKTsKKwkJaW5mb1tpXSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwYWNrX2luZm8pKTsKKwkJaW5mb1tpXS0+cCA9IHA7CisJCWluZm9baV0tPm9sZF9udW0gPSAtMTsKKwl9CisKKwlpZiAoaW5mb2ZpbGUgJiYgIWZvcmNlKQorCQlzdGFsZSA9IHJlYWRfcGFja19pbmZvX2ZpbGUoaW5mb2ZpbGUpOworCWVsc2UKKwkJc3RhbGUgPSAxOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wYWNrOyBpKyspCisJCWlmIChzdGFsZSkKKwkJCWluZm9baV0tPm9sZF9udW0gPSAtMTsKKworCS8qIHJlbnVtYmVyIHRoZW0gKi8KKwlRU09SVChpbmZvLCBudW1fcGFjaywgY29tcGFyZV9pbmZvKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhY2s7IGkrKykKKwkJaW5mb1tpXS0+bmV3X251bSA9IGk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcGFja19pbmZvKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG51bV9wYWNrOyBpKyspCisJCWZyZWUoaW5mb1tpXSk7CisJZnJlZShpbmZvKTsKK30KKworc3RhdGljIGludCB3cml0ZV9wYWNrX2luZm9fZmlsZShzdHJ1Y3QgdXBkYXRlX2luZm9fY3R4ICp1aWMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG51bV9wYWNrOyBpKyspIHsKKwkJaWYgKHVpY19wcmludGYodWljLCAiUCAlc1xuIiwgcGFja19iYXNlbmFtZShpbmZvW2ldLT5wKSkgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKwlpZiAodWljX3ByaW50Zih1aWMsICJcbiIpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9pbmZvX3BhY2tzKGludCBmb3JjZSkKK3sKKwljaGFyICppbmZvZmlsZSA9IG1rcGF0aGR1cCgiJXMvaW5mby9wYWNrcyIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCWludCByZXQ7CisKKwlpbml0X3BhY2tfaW5mbyhpbmZvZmlsZSwgZm9yY2UpOworCXJldCA9IHVwZGF0ZV9pbmZvX2ZpbGUoaW5mb2ZpbGUsIHdyaXRlX3BhY2tfaW5mb19maWxlLCBmb3JjZSk7CisJZnJlZV9wYWNrX2luZm8oKTsKKwlmcmVlKGluZm9maWxlKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBwdWJsaWMgKi8KK2ludCB1cGRhdGVfc2VydmVyX2luZm8oaW50IGZvcmNlKQoreworCS8qIFdlIHdvdWxkIGFkZCBtb3JlIGR1bWItc2VydmVyIHN1cHBvcnQgZmlsZXMgbGF0ZXIsCisJICogaW5jbHVkaW5nIGluZGV4IG9mIGF2YWlsYWJsZSBwYWNrIGZpbGVzIGFuZCB0aGVpcgorCSAqIGludGVuZGVkIGF1ZGllbmNlcy4KKwkgKi8KKwlpbnQgZXJycyA9IDA7CisKKwllcnJzID0gZXJycyB8IHVwZGF0ZV9pbmZvX3JlZnMoZm9yY2UpOworCWVycnMgPSBlcnJzIHwgdXBkYXRlX2luZm9fcGFja3MoZm9yY2UpOworCisJLyogcmVtb3ZlIGxlZnRvdmVyIHJldi1jYWNoZSBmaWxlIGlmIHRoZXJlIGlzIGFueSAqLworCXVubGlua19vcl93YXJuKGdpdF9wYXRoKCJpbmZvL3Jldi1jYWNoZSIpKTsKKworCXJldHVybiBlcnJzOworfQpkaWZmIC0tZ2l0IGEvc2V0dXAuYyBiL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVmZTVlYwotLS0gL2Rldi9udWxsCisrKyBiL3NldHVwLmMKQEAgLTAsMCArMSwxMzMxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJjaGRpci1ub3RpZnkuaCIKKyNpbmNsdWRlICJwcm9taXNvci1yZW1vdGUuaCIKKworc3RhdGljIGludCBpbnNpZGVfZ2l0X2RpciA9IC0xOworc3RhdGljIGludCBpbnNpZGVfd29ya190cmVlID0gLTE7CitzdGF0aWMgaW50IHdvcmtfdHJlZV9jb25maWdfaXNfYm9ndXM7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RhcnR1cF9pbmZvIHRoZV9zdGFydHVwX2luZm87CitzdHJ1Y3Qgc3RhcnR1cF9pbmZvICpzdGFydHVwX2luZm8gPSAmdGhlX3N0YXJ0dXBfaW5mbzsKKworLyoKKyAqIFRoZSBpbnB1dCBwYXJhbWV0ZXIgbXVzdCBjb250YWluIGFuIGFic29sdXRlIHBhdGgsIGFuZCBpdCBtdXN0IGFscmVhZHkgYmUKKyAqIG5vcm1hbGl6ZWQuCisgKgorICogRmluZCB0aGUgcGFydCBvZiBhbiBhYnNvbHV0ZSBwYXRoIHRoYXQgbGllcyBpbnNpZGUgdGhlIHdvcmsgdHJlZSBieQorICogZGVyZWZlcmVuY2luZyBzeW1saW5rcyBvdXRzaWRlIHRoZSB3b3JrIHRyZWUsIGZvciBleGFtcGxlOgorICogL2RpcjEvcmVwby9kaXIyL2ZpbGUgICAod29yayB0cmVlIGlzIC9kaXIxL3JlcG8pICAgICAgLT4gZGlyMi9maWxlCisgKiAvZGlyL2ZpbGUgICAgICAgICAgICAgICh3b3JrIHRyZWUgaXMgLykgICAgICAgICAgICAgICAtPiBkaXIvZmlsZQorICogL2Rpci9zeW1saW5rMS9zeW1saW5rMiAoc3ltbGluazEgcG9pbnRzIHRvIHdvcmsgdHJlZSkgLT4gc3ltbGluazIKKyAqIC9kaXIvcmVwb2xpbmsvZmlsZSAgICAgKHJlcG9saW5rIHBvaW50cyB0byAvZGlyL3JlcG8pIC0+IGZpbGUKKyAqIC9kaXIvcmVwbyAgICAgICAgICAgICAgKGV4YWN0bHkgZXF1YWwgdG8gd29yayB0cmVlKSAgIC0+IChlbXB0eSBzdHJpbmcpCisgKi8KK3N0YXRpYyBpbnQgYWJzcGF0aF9wYXJ0X2luc2lkZV9yZXBvKGNoYXIgKnBhdGgpCit7CisJc2l6ZV90IGxlbjsKKwlzaXplX3Qgd3RsZW47CisJY2hhciAqcGF0aDA7CisJaW50IG9mZjsKKwljb25zdCBjaGFyICp3b3JrX3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpOworCXN0cnVjdCBzdHJidWYgcmVhbHBhdGggPSBTVFJCVUZfSU5JVDsKKworCWlmICghd29ya190cmVlKQorCQlyZXR1cm4gLTE7CisJd3RsZW4gPSBzdHJsZW4od29ya190cmVlKTsKKwlsZW4gPSBzdHJsZW4ocGF0aCk7CisJb2ZmID0gb2Zmc2V0XzFzdF9jb21wb25lbnQocGF0aCk7CisKKwkvKiBjaGVjayBpZiB3b3JrIHRyZWUgaXMgYWxyZWFkeSB0aGUgcHJlZml4ICovCisJaWYgKHd0bGVuIDw9IGxlbiAmJiAhZnNwYXRobmNtcChwYXRoLCB3b3JrX3RyZWUsIHd0bGVuKSkgeworCQlpZiAocGF0aFt3dGxlbl0gPT0gJy8nKSB7CisJCQltZW1tb3ZlKHBhdGgsIHBhdGggKyB3dGxlbiArIDEsIGxlbiAtIHd0bGVuKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKHBhdGhbd3RsZW4gLSAxXSA9PSAnLycgfHwgcGF0aFt3dGxlbl0gPT0gJ1wwJykgeworCQkJLyogd29yayB0cmVlIGlzIHRoZSByb290LCBvciB0aGUgd2hvbGUgcGF0aCAqLworCQkJbWVtbW92ZShwYXRoLCBwYXRoICsgd3RsZW4sIGxlbiAtIHd0bGVuICsgMSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQkvKiB3b3JrIHRyZWUgbWlnaHQgbWF0Y2ggYmVnaW5uaW5nIG9mIGEgc3ltbGluayB0byB3b3JrIHRyZWUgKi8KKwkJb2ZmID0gd3RsZW47CisJfQorCXBhdGgwID0gcGF0aDsKKwlwYXRoICs9IG9mZjsKKworCS8qIGNoZWNrIGVhY2ggJy8nLXRlcm1pbmF0ZWQgbGV2ZWwgKi8KKwl3aGlsZSAoKnBhdGgpIHsKKwkJcGF0aCsrOworCQlpZiAoKnBhdGggPT0gJy8nKSB7CisJCQkqcGF0aCA9ICdcMCc7CisJCQlzdHJidWZfcmVhbHBhdGgoJnJlYWxwYXRoLCBwYXRoMCwgMSk7CisJCQlpZiAoZnNwYXRoY21wKHJlYWxwYXRoLmJ1Ziwgd29ya190cmVlKSA9PSAwKSB7CisJCQkJbWVtbW92ZShwYXRoMCwgcGF0aCArIDEsIGxlbiAtIChwYXRoIC0gcGF0aDApKTsKKwkJCQlzdHJidWZfcmVsZWFzZSgmcmVhbHBhdGgpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJKnBhdGggPSAnLyc7CisJCX0KKwl9CisKKwkvKiBjaGVjayB3aG9sZSBwYXRoICovCisJc3RyYnVmX3JlYWxwYXRoKCZyZWFscGF0aCwgcGF0aDAsIDEpOworCWlmIChmc3BhdGhjbXAocmVhbHBhdGguYnVmLCB3b3JrX3RyZWUpID09IDApIHsKKwkJKnBhdGgwID0gJ1wwJzsKKwkJc3RyYnVmX3JlbGVhc2UoJnJlYWxwYXRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnJlYWxwYXRoKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBOb3JtYWxpemUgInBhdGgiLCBwcmVwZW5kaW5nIHRoZSAicHJlZml4IiBmb3IgcmVsYXRpdmUgcGF0aHMuIElmCisgKiByZW1haW5pbmdfcHJlZml4IGlzIG5vdCBOVUxMLCByZXR1cm4gdGhlIGFjdHVhbCBwcmVmaXggc3RpbGwKKyAqIHJlbWFpbnMgaW4gdGhlIHBhdGguIEZvciBleGFtcGxlLCBwcmVmaXggPSBzdWIxL3N1YjIvIGFuZCBwYXRoIGlzCisgKgorICogIGZvbyAgICAgICAgICAtPiBzdWIxL3N1YjIvZm9vICAoZnVsbCBwcmVmaXgpCisgKiAgLi4vZm9vICAgICAgIC0+IHN1YjEvZm9vICAgICAgIChyZW1haW5pbmcgcHJlZml4IGlzIHN1YjEvKQorICogIC4uLy4uL2JhciAgICAtPiBiYXIgICAgICAgICAgICAobm8gcmVtYWluaW5nIHByZWZpeCkKKyAqICAuLi8uLi9zdWIxL3N1YjIvZm9vIC0+IHN1YjEvc3ViMi9mb28gKGJ1dCBubyByZW1haW5pbmcgcHJlZml4KQorICogIGBwd2RgLy4uL2JhciAtPiBzdWIxL2JhciAgICAgICAobm8gcmVtYWluaW5nIHByZWZpeCkKKyAqLworY2hhciAqcHJlZml4X3BhdGhfZ2VudGx5KGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGxlbiwKKwkJCSBpbnQgKnJlbWFpbmluZ19wcmVmaXgsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqb3JpZyA9IHBhdGg7CisJY2hhciAqc2FuaXRpemVkOworCWlmIChpc19hYnNvbHV0ZV9wYXRoKG9yaWcpKSB7CisJCXNhbml0aXplZCA9IHhtYWxsb2N6KHN0cmxlbihwYXRoKSk7CisJCWlmIChyZW1haW5pbmdfcHJlZml4KQorCQkJKnJlbWFpbmluZ19wcmVmaXggPSAwOworCQlpZiAobm9ybWFsaXplX3BhdGhfY29weV9sZW4oc2FuaXRpemVkLCBwYXRoLCByZW1haW5pbmdfcHJlZml4KSkgeworCQkJZnJlZShzYW5pdGl6ZWQpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaWYgKGFic3BhdGhfcGFydF9pbnNpZGVfcmVwbyhzYW5pdGl6ZWQpKSB7CisJCQlmcmVlKHNhbml0aXplZCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCXNhbml0aXplZCA9IHhzdHJmbXQoIiUuKnMlcyIsIGxlbiwgbGVuID8gcHJlZml4IDogIiIsIHBhdGgpOworCQlpZiAocmVtYWluaW5nX3ByZWZpeCkKKwkJCSpyZW1haW5pbmdfcHJlZml4ID0gbGVuOworCQlpZiAobm9ybWFsaXplX3BhdGhfY29weV9sZW4oc2FuaXRpemVkLCBzYW5pdGl6ZWQsIHJlbWFpbmluZ19wcmVmaXgpKSB7CisJCQlmcmVlKHNhbml0aXplZCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKwlyZXR1cm4gc2FuaXRpemVkOworfQorCitjaGFyICpwcmVmaXhfcGF0aChjb25zdCBjaGFyICpwcmVmaXgsIGludCBsZW4sIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hhciAqciA9IHByZWZpeF9wYXRoX2dlbnRseShwcmVmaXgsIGxlbiwgTlVMTCwgcGF0aCk7CisJaWYgKCFyKSB7CisJCWNvbnN0IGNoYXIgKmhpbnRfcGF0aCA9IGdldF9naXRfd29ya190cmVlKCk7CisJCWlmICghaGludF9wYXRoKQorCQkJaGludF9wYXRoID0gZ2V0X2dpdF9kaXIoKTsKKwkJZGllKF8oIiclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IGF0ICclcyciKSwgcGF0aCwKKwkJICAgIGFic29sdXRlX3BhdGgoaGludF9wYXRoKSk7CisJfQorCXJldHVybiByOworfQorCitpbnQgcGF0aF9pbnNpZGVfcmVwbyhjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGxlbiA9IHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMDsKKwljaGFyICpyID0gcHJlZml4X3BhdGhfZ2VudGx5KHByZWZpeCwgbGVuLCBOVUxMLCBwYXRoKTsKKwlpZiAocikgeworCQlmcmVlKHIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBjaGVja19maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKmFyZykKK3sKKwljaGFyICp0b19mcmVlID0gTlVMTDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChza2lwX3ByZWZpeChhcmcsICI6LyIsICZhcmcpKSB7CisJCWlmICghKmFyZykgLyogIjovIiBpcyByb290IGRpciwgYWx3YXlzIGV4aXN0cyAqLworCQkJcmV0dXJuIDE7CisJCXByZWZpeCA9IE5VTEw7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICI6ISIsICZhcmcpIHx8CisJCSAgIHNraXBfcHJlZml4KGFyZywgIjpeIiwgJmFyZykpIHsKKwkJaWYgKCEqYXJnKSAvKiBleGNsdWRpbmcgZXZlcnl0aGluZyBpcyBzaWxseSwgYnV0IGFsbG93ZWQgKi8KKwkJCXJldHVybiAxOworCX0KKworCWlmIChwcmVmaXgpCisJCWFyZyA9IHRvX2ZyZWUgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBhcmcpOworCisJaWYgKCFsc3RhdChhcmcsICZzdCkpIHsKKwkJZnJlZSh0b19mcmVlKTsKKwkJcmV0dXJuIDE7IC8qIGZpbGUgZXhpc3RzICovCisJfQorCWlmIChpc19taXNzaW5nX2ZpbGVfZXJyb3IoZXJybm8pKSB7CisJCWZyZWUodG9fZnJlZSk7CisJCXJldHVybiAwOyAvKiBmaWxlIGRvZXMgbm90IGV4aXN0ICovCisJfQorCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gc3RhdCAnJXMnIiksIGFyZyk7Cit9CisKK3N0YXRpYyB2b2lkIE5PUkVUVVJOIGRpZV92ZXJpZnlfZmlsZW5hbWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCSBjb25zdCBjaGFyICphcmcsCisJCQkJCSBpbnQgZGlhZ25vc2VfbWlzc3BlbHRfcmV2KQoreworCWlmICghZGlhZ25vc2VfbWlzc3BlbHRfcmV2KQorCQlkaWUoXygiJXM6IG5vIHN1Y2ggcGF0aCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorCQkgICAgICAiVXNlICdnaXQgPGNvbW1hbmQ+IC0tIDxwYXRoPi4uLicgdG8gc3BlY2lmeSBwYXRocyB0aGF0IGRvIG5vdCBleGlzdCBsb2NhbGx5LiIpLAorCQkgICAgYXJnKTsKKwkvKgorCSAqIFNheWluZyAiJyhpY2FzZSlmb28nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBpbmRleCIgd2hlbiB0aGUKKwkgKiB1c2VyIGdhdmUgdXMgIjooaWNhc2UpZm9vIiBpcyBqdXN0IHN0dXBpZC4gIEEgbWFnaWMgcGF0aHNwZWMKKwkgKiBiZWdpbnMgd2l0aCBhIGNvbG9uIGFuZCBpcyBmb2xsb3dlZCBieSBhIG5vbi1hbG51bTsgZG8gbm90CisJICogbGV0IG1heWJlX2RpZV9vbl9taXNzcGVsdF9vYmplY3RfbmFtZSgpIGV2ZW4gdHJpZ2dlci4KKwkgKi8KKwlpZiAoIShhcmdbMF0gPT0gJzonICYmICFpc2FsbnVtKGFyZ1sxXSkpKQorCQltYXliZV9kaWVfb25fbWlzc3BlbHRfb2JqZWN0X25hbWUociwgYXJnLCBwcmVmaXgpOworCisJLyogLi4uIG9yIGZhbGwgYmFjayB0aGUgbW9zdCBnZW5lcmFsIG1lc3NhZ2UuICovCisJZGllKF8oImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiB1bmtub3duIHJldmlzaW9uIG9yIHBhdGggbm90IGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisJICAgICAgIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisJICAgICAgIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciKSwgYXJnKTsKKworfQorCisvKgorICogQ2hlY2sgZm9yIGFyZ3VtZW50cyB0aGF0IGRvbid0IHJlc29sdmUgYXMgYWN0dWFsIGZpbGVzLAorICogYnV0IHdoaWNoIGxvb2sgc3VmZmljaWVudGx5IGxpa2UgcGF0aHNwZWNzIHRoYXQgd2UnbGwgY29uc2lkZXIKKyAqIHRoZW0gc3VjaCBmb3IgdGhlIHB1cnBvc2VzIG9mIHJldi9wYXRoc3BlYyBEV0lNIHBhcnNpbmcuCisgKi8KK3N0YXRpYyBpbnQgbG9va3NfbGlrZV9wYXRoc3BlYyhjb25zdCBjaGFyICphcmcpCit7CisJY29uc3QgY2hhciAqcDsKKwlpbnQgZXNjYXBlZCA9IDA7CisKKwkvKgorCSAqIFdpbGRjYXJkIGNoYXJhY3RlcnMgaW1wbHkgdGhlIHVzZXIgaXMgbG9va2luZyB0byBtYXRjaCBwYXRoc3BlY3MKKwkgKiB0aGF0IGFyZW4ndCBpbiB0aGUgZmlsZXN5c3RlbS4gTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBpbmNsdWRlCisJICogYmFja3NsYXNoIGV2ZW4gdGhvdWdoIGl0J3MgYSBnbG9iIHNwZWNpYWw7IGJ5IGl0c2VsZiBpdCBkb2Vzbid0CisJICogY2F1c2UgYW55IGluY3JlYXNlIGluIHRoZSBtYXRjaC4gTGlrZXdpc2UgaWdub3JlIGJhY2tzbGFzaC1lc2NhcGVkCisJICogd2lsZGNhcmQgY2hhcmFjdGVycy4KKwkgKi8KKwlmb3IgKHAgPSBhcmc7ICpwOyBwKyspIHsKKwkJaWYgKGVzY2FwZWQpIHsKKwkJCWVzY2FwZWQgPSAwOworCQl9IGVsc2UgaWYgKGlzX2dsb2Jfc3BlY2lhbCgqcCkpIHsKKwkJCWlmICgqcCA9PSAnXFwnKQorCQkJCWVzY2FwZWQgPSAxOworCQkJZWxzZQorCQkJCXJldHVybiAxOworCQl9CisJfQorCisJLyogbG9uZy1mb3JtIHBhdGhzcGVjIG1hZ2ljICovCisJaWYgKHN0YXJ0c193aXRoKGFyZywgIjooIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBWZXJpZnkgYSBmaWxlbmFtZSB0aGF0IHdlIGdvdCBhcyBhbiBhcmd1bWVudCBmb3IgYSBwYXRoc3BlYworICogZW50cnkuIE5vdGUgdGhhdCBhIGZpbGVuYW1lIHRoYXQgYmVnaW5zIHdpdGggIi0iIG5ldmVyIHZlcmlmaWVzCisgKiBhcyB0cnVlLCBiZWNhdXNlIGV2ZW4gaWYgc3VjaCBhIGZpbGVuYW1lIHdlcmUgdG8gZXhpc3QsIHdlIHdhbnQKKyAqIGl0IHRvIGJlIHByZWNlZGVkIGJ5IHRoZSAiLS0iIG1hcmtlciAob3Igd2Ugd2FudCB0aGUgdXNlciB0bworICogdXNlIGEgZm9ybWF0IGxpa2UgIi4vLWZpbGVuYW1lIikKKyAqCisgKiBUaGUgImRpYWdub3NlX21pc3NwZWx0X3JldiIgaXMgdXNlZCB0byBwcm92aWRlIGEgdXNlci1mcmllbmRseQorICogZGlhZ25vc2lzIHdoZW4gZHlpbmcgdXBvbiBmaW5kaW5nIHRoYXQgIm5hbWUiIGlzIG5vdCBhIHBhdGhuYW1lLgorICogSWYgc2V0IHRvIDEsIHRoZSBkaWFnbm9zaXMgd2lsbCB0cnkgdG8gZGlhZ25vc2UgIm5hbWUiIGFzIGFuCisgKiBpbnZhbGlkIG9iamVjdCBuYW1lIChlLmcuIEhFQUQ6Zm9vKS4gSWYgc2V0IHRvIDAsIHRoZSBkaWFnbm9zaXMKKyAqIHdpbGwgb25seSBjb21wbGFpbiBhYm91dCBhbiBpbmV4aXN0aW5nIGZpbGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIHRvIGNoZWNrIHRoYXQgYSAiZmlsZSBvciByZXYiCisgKiBhcmd1bWVudCBpcyB1bmFtYmlndW91cy4gSW4gdGhpcyBjYXNlLCB0aGUgY2FsbGVyIHdpbGwgd2FudAorICogZGlhZ25vc2VfbWlzc3BlbHRfcmV2ID09IDEgd2hlbiB2ZXJpZnlpbmcgdGhlIGZpcnN0IG5vbi1yZXYKKyAqIGFyZ3VtZW50ICh3aGljaCBjb3VsZCBoYXZlIGJlZW4gYSByZXZpc2lvbiksIGFuZAorICogZGlhZ25vc2VfbWlzc3BlbHRfcmV2ID09IDAgZm9yIHRoZSBuZXh0IG9uZXMgKGJlY2F1c2Ugd2UgYWxyZWFkeQorICogc2F3IGEgZmlsZW5hbWUsIHRoZXJlJ3Mgbm90IGFtYmlndWl0eSBhbnltb3JlKS4KKyAqLwordm9pZCB2ZXJpZnlfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LAorCQkgICAgIGNvbnN0IGNoYXIgKmFyZywKKwkJICAgICBpbnQgZGlhZ25vc2VfbWlzc3BlbHRfcmV2KQoreworCWlmICgqYXJnID09ICctJykKKwkJZGllKF8oIm9wdGlvbiAnJXMnIG11c3QgY29tZSBiZWZvcmUgbm9uLW9wdGlvbiBhcmd1bWVudHMiKSwgYXJnKTsKKwlpZiAobG9va3NfbGlrZV9wYXRoc3BlYyhhcmcpIHx8IGNoZWNrX2ZpbGVuYW1lKHByZWZpeCwgYXJnKSkKKwkJcmV0dXJuOworCWRpZV92ZXJpZnlfZmlsZW5hbWUodGhlX3JlcG9zaXRvcnksIHByZWZpeCwgYXJnLCBkaWFnbm9zZV9taXNzcGVsdF9yZXYpOworfQorCisvKgorICogT3Bwb3NpdGUgb2YgdGhlIGFib3ZlOiB0aGUgY29tbWFuZCBsaW5lIGRpZCBub3QgaGF2ZSAtLSBtYXJrZXIKKyAqIGFuZCB3ZSBwYXJzZWQgdGhlIGFyZyBhcyBhIHJlZm5hbWUuICBJdCBzaG91bGQgbm90IGJlIGludGVycHJldGFibGUKKyAqIGFzIGEgZmlsZW5hbWUuCisgKi8KK3ZvaWQgdmVyaWZ5X25vbl9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAoIWlzX2luc2lkZV93b3JrX3RyZWUoKSB8fCBpc19pbnNpZGVfZ2l0X2RpcigpKQorCQlyZXR1cm47CisJaWYgKCphcmcgPT0gJy0nKQorCQlyZXR1cm47IC8qIGZsYWcgKi8KKwlpZiAoIWNoZWNrX2ZpbGVuYW1lKHByZWZpeCwgYXJnKSkKKwkJcmV0dXJuOworCWRpZShfKCJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWVcbiIKKwkgICAgICAiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKwkgICAgICAiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIpLCBhcmcpOworfQorCitpbnQgZ2V0X2NvbW1vbl9kaXIoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmdpdGRpcikKK3sKKwljb25zdCBjaGFyICpnaXRfZW52X2NvbW1vbl9kaXIgPSBnZXRlbnYoR0lUX0NPTU1PTl9ESVJfRU5WSVJPTk1FTlQpOworCWlmIChnaXRfZW52X2NvbW1vbl9kaXIpIHsKKwkJc3RyYnVmX2FkZHN0cihzYiwgZ2l0X2Vudl9jb21tb25fZGlyKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGdldF9jb21tb25fZGlyX25vZW52KHNiLCBnaXRkaXIpOworCX0KK30KKworaW50IGdldF9jb21tb25fZGlyX25vZW52KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpnaXRkaXIpCit7CisJc3RydWN0IHN0cmJ1ZiBkYXRhID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisKKwlzdHJidWZfYWRkZigmcGF0aCwgIiVzL2NvbW1vbmRpciIsIGdpdGRpcik7CisJaWYgKGZpbGVfZXhpc3RzKHBhdGguYnVmKSkgeworCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmZGF0YSwgcGF0aC5idWYsIDApIDw9IDApCisJCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHJlYWQgJXMiKSwgcGF0aC5idWYpOworCQl3aGlsZSAoZGF0YS5sZW4gJiYgKGRhdGEuYnVmW2RhdGEubGVuIC0gMV0gPT0gJ1xuJyB8fAorCQkJCSAgICBkYXRhLmJ1ZltkYXRhLmxlbiAtIDFdID09ICdccicpKQorCQkJZGF0YS5sZW4tLTsKKwkJZGF0YS5idWZbZGF0YS5sZW5dID0gJ1wwJzsKKwkJc3RyYnVmX3Jlc2V0KCZwYXRoKTsKKwkJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKGRhdGEuYnVmKSkKKwkJCXN0cmJ1Zl9hZGRmKCZwYXRoLCAiJXMvIiwgZ2l0ZGlyKTsKKwkJc3RyYnVmX2FkZGJ1ZigmcGF0aCwgJmRhdGEpOworCQlzdHJidWZfYWRkX3JlYWxfcGF0aChzYiwgcGF0aC5idWYpOworCQlyZXQgPSAxOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIGdpdGRpcik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmRhdGEpOworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGVzdCBpZiBpdCBsb29rcyBsaWtlIHdlJ3JlIGF0IGEgZ2l0IGRpcmVjdG9yeS4KKyAqIFdlIHdhbnQgdG8gc2VlOgorICoKKyAqICAtIGVpdGhlciBhbiBvYmplY3RzLyBkaXJlY3RvcnkgX29yXyB0aGUgcHJvcGVyCisgKiAgICBHSVRfT0JKRUNUX0RJUkVDVE9SWSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICogIC0gYSByZWZzLyBkaXJlY3RvcnkKKyAqICAtIGVpdGhlciBhIEhFQUQgc3ltbGluayBvciBhIEhFQUQgZmlsZSB0aGF0IGlzIGZvcm1hdHRlZCBhcworICogICAgYSBwcm9wZXIgInJlZjoiLCBvciBhIHJlZ3VsYXIgZmlsZSBIRUFEIHRoYXQgaGFzIGEgcHJvcGVybHkKKyAqICAgIGZvcm1hdHRlZCBzaGExIG9iamVjdCBuYW1lLgorICovCitpbnQgaXNfZ2l0X2RpcmVjdG9yeShjb25zdCBjaGFyICpzdXNwZWN0KQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAwOworCXNpemVfdCBsZW47CisKKwkvKiBDaGVjayB3b3JrdHJlZS1yZWxhdGVkIHNpZ25hdHVyZXMgKi8KKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBzdXNwZWN0KTsKKwlzdHJidWZfY29tcGxldGUoJnBhdGgsICcvJyk7CisJc3RyYnVmX2FkZHN0cigmcGF0aCwgIkhFQUQiKTsKKwlpZiAodmFsaWRhdGVfaGVhZHJlZihwYXRoLmJ1ZikpCisJCWdvdG8gZG9uZTsKKworCXN0cmJ1Zl9yZXNldCgmcGF0aCk7CisJZ2V0X2NvbW1vbl9kaXIoJnBhdGgsIHN1c3BlY3QpOworCWxlbiA9IHBhdGgubGVuOworCisJLyogQ2hlY2sgbm9uLXdvcmt0cmVlLXJlbGF0ZWQgc2lnbmF0dXJlcyAqLworCWlmIChnZXRlbnYoREJfRU5WSVJPTk1FTlQpKSB7CisJCWlmIChhY2Nlc3MoZ2V0ZW52KERCX0VOVklST05NRU5UKSwgWF9PSykpCisJCQlnb3RvIGRvbmU7CisJfQorCWVsc2UgeworCQlzdHJidWZfc2V0bGVuKCZwYXRoLCBsZW4pOworCQlzdHJidWZfYWRkc3RyKCZwYXRoLCAiL29iamVjdHMiKTsKKwkJaWYgKGFjY2VzcyhwYXRoLmJ1ZiwgWF9PSykpCisJCQlnb3RvIGRvbmU7CisJfQorCisJc3RyYnVmX3NldGxlbigmcGF0aCwgbGVuKTsKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCAiL3JlZnMiKTsKKwlpZiAoYWNjZXNzKHBhdGguYnVmLCBYX09LKSkKKwkJZ290byBkb25lOworCisJcmV0ID0gMTsKK2RvbmU6CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBpc19ub25iYXJlX3JlcG9zaXRvcnlfZGlyKHN0cnVjdCBzdHJidWYgKnBhdGgpCit7CisJaW50IHJldCA9IDA7CisJaW50IGdpdGZpbGVfZXJyb3I7CisJc2l6ZV90IG9yaWdfcGF0aF9sZW4gPSBwYXRoLT5sZW47CisJYXNzZXJ0KG9yaWdfcGF0aF9sZW4gIT0gMCk7CisJc3RyYnVmX2NvbXBsZXRlKHBhdGgsICcvJyk7CisJc3RyYnVmX2FkZHN0cihwYXRoLCAiLmdpdCIpOworCWlmIChyZWFkX2dpdGZpbGVfZ2VudGx5KHBhdGgtPmJ1ZiwgJmdpdGZpbGVfZXJyb3IpIHx8IGlzX2dpdF9kaXJlY3RvcnkocGF0aC0+YnVmKSkKKwkJcmV0ID0gMTsKKwlpZiAoZ2l0ZmlsZV9lcnJvciA9PSBSRUFEX0dJVEZJTEVfRVJSX09QRU5fRkFJTEVEIHx8CisJICAgIGdpdGZpbGVfZXJyb3IgPT0gUkVBRF9HSVRGSUxFX0VSUl9SRUFEX0ZBSUxFRCkKKwkJcmV0ID0gMTsKKwlzdHJidWZfc2V0bGVuKHBhdGgsIG9yaWdfcGF0aF9sZW4pOworCXJldHVybiByZXQ7Cit9CisKK2ludCBpc19pbnNpZGVfZ2l0X2Rpcih2b2lkKQoreworCWlmIChpbnNpZGVfZ2l0X2RpciA8IDApCisJCWluc2lkZV9naXRfZGlyID0gaXNfaW5zaWRlX2RpcihnZXRfZ2l0X2RpcigpKTsKKwlyZXR1cm4gaW5zaWRlX2dpdF9kaXI7Cit9CisKK2ludCBpc19pbnNpZGVfd29ya190cmVlKHZvaWQpCit7CisJaWYgKGluc2lkZV93b3JrX3RyZWUgPCAwKQorCQlpbnNpZGVfd29ya190cmVlID0gaXNfaW5zaWRlX2RpcihnZXRfZ2l0X3dvcmtfdHJlZSgpKTsKKwlyZXR1cm4gaW5zaWRlX3dvcmtfdHJlZTsKK30KKwordm9pZCBzZXR1cF93b3JrX3RyZWUodm9pZCkKK3sKKwljb25zdCBjaGFyICp3b3JrX3RyZWU7CisJc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7CisKKwlpZiAoaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKworCWlmICh3b3JrX3RyZWVfY29uZmlnX2lzX2JvZ3VzKQorCQlkaWUoXygidW5hYmxlIHRvIHNldCB1cCB3b3JrIHRyZWUgdXNpbmcgaW52YWxpZCBjb25maWciKSk7CisKKwl3b3JrX3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpOworCWlmICghd29ya190cmVlIHx8IGNoZGlyX25vdGlmeSh3b3JrX3RyZWUpKQorCQlkaWUoXygidGhpcyBvcGVyYXRpb24gbXVzdCBiZSBydW4gaW4gYSB3b3JrIHRyZWUiKSk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBzdWJzZXF1ZW50IGdpdCBwcm9jZXNzZXMgZmluZCBjb3JyZWN0IHdvcmt0cmVlCisJICogaWYgJEdJVF9XT1JLX1RSRUUgaXMgc2V0IHJlbGF0aXZlCisJICovCisJaWYgKGdldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5UKSkKKwkJc2V0ZW52KEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsICIuIiwgMSk7CisKKwlpbml0aWFsaXplZCA9IDE7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF93b3JrdHJlZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqdmRhdGEpCit7CisJc3RydWN0IHJlcG9zaXRvcnlfZm9ybWF0ICpkYXRhID0gdmRhdGE7CisKKwlpZiAoc3RyY21wKHZhciwgImNvcmUuYmFyZSIpID09IDApIHsKKwkJZGF0YS0+aXNfYmFyZSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwl9IGVsc2UgaWYgKHN0cmNtcCh2YXIsICJjb3JlLndvcmt0cmVlIikgPT0gMCkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWZyZWUoZGF0YS0+d29ya190cmVlKTsKKwkJZGF0YS0+d29ya190cmVlID0geHN0cmR1cCh2YWx1ZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX3JlcG9fZm9ybWF0KGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKnZkYXRhKQoreworCXN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCAqZGF0YSA9IHZkYXRhOworCWNvbnN0IGNoYXIgKmV4dDsKKworCWlmIChzdHJjbXAodmFyLCAiY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiIpID09IDApCisJCWRhdGEtPnZlcnNpb24gPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwllbHNlIGlmIChza2lwX3ByZWZpeCh2YXIsICJleHRlbnNpb25zLiIsICZleHQpKSB7CisJCS8qCisJCSAqIHJlY29yZCBhbnkga25vd24gZXh0ZW5zaW9ucyBoZXJlOyBvdGhlcndpc2UsCisJCSAqIHdlIGZhbGwgdGhyb3VnaCB0byByZWNvcmRpbmcgaXQgYXMgdW5rbm93biwgYW5kCisJCSAqIGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0IHdpbGwgY29tcGxhaW4KKwkJICovCisJCWlmICghc3RyY21wKGV4dCwgIm5vb3AiKSkKKwkJCTsKKwkJZWxzZSBpZiAoIXN0cmNtcChleHQsICJwcmVjaW91c29iamVjdHMiKSkKKwkJCWRhdGEtPnByZWNpb3VzX29iamVjdHMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCWVsc2UgaWYgKCFzdHJjbXAoZXh0LCAicGFydGlhbGNsb25lIikpIHsKKwkJCWlmICghdmFsdWUpCisJCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCQlkYXRhLT5wYXJ0aWFsX2Nsb25lID0geHN0cmR1cCh2YWx1ZSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChleHQsICJ3b3JrdHJlZWNvbmZpZyIpKQorCQkJZGF0YS0+d29ya3RyZWVfY29uZmlnID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQllbHNlCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmRhdGEtPnVua25vd25fZXh0ZW5zaW9ucywgZXh0KTsKKwl9CisKKwlyZXR1cm4gcmVhZF93b3JrdHJlZV9jb25maWcodmFyLCB2YWx1ZSwgdmRhdGEpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0X2dlbnRseShjb25zdCBjaGFyICpnaXRkaXIsIHN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCAqY2FuZGlkYXRlLCBpbnQgKm5vbmdpdF9vaykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaGFzX2NvbW1vbjsKKworCWhhc19jb21tb24gPSBnZXRfY29tbW9uX2Rpcigmc2IsIGdpdGRpcik7CisJc3RyYnVmX2FkZHN0cigmc2IsICIvY29uZmlnIik7CisJcmVhZF9yZXBvc2l0b3J5X2Zvcm1hdChjYW5kaWRhdGUsIHNiLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCS8qCisJICogRm9yIGhpc3RvcmljYWwgdXNlIG9mIGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0KCkgaW4gZ2l0LWluaXQsCisJICogd2UgdHJlYXQgYSBtaXNzaW5nIGNvbmZpZyBhcyBhIHNpbGVudCAib2siLCBldmVuIHdoZW4gbm9uZ2l0X29rCisJICogaXMgdW5zZXQuCisJICovCisJaWYgKGNhbmRpZGF0ZS0+dmVyc2lvbiA8IDApCisJCXJldHVybiAwOworCisJaWYgKHZlcmlmeV9yZXBvc2l0b3J5X2Zvcm1hdChjYW5kaWRhdGUsICZlcnIpIDwgMCkgeworCQlpZiAobm9uZ2l0X29rKSB7CisJCQl3YXJuaW5nKCIlcyIsIGVyci5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCQkqbm9uZ2l0X29rID0gLTE7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZGllKCIlcyIsIGVyci5idWYpOworCX0KKworCXJlcG9zaXRvcnlfZm9ybWF0X3ByZWNpb3VzX29iamVjdHMgPSBjYW5kaWRhdGUtPnByZWNpb3VzX29iamVjdHM7CisJc2V0X3JlcG9zaXRvcnlfZm9ybWF0X3BhcnRpYWxfY2xvbmUoY2FuZGlkYXRlLT5wYXJ0aWFsX2Nsb25lKTsKKwlyZXBvc2l0b3J5X2Zvcm1hdF93b3JrdHJlZV9jb25maWcgPSBjYW5kaWRhdGUtPndvcmt0cmVlX2NvbmZpZzsKKwlzdHJpbmdfbGlzdF9jbGVhcigmY2FuZGlkYXRlLT51bmtub3duX2V4dGVuc2lvbnMsIDApOworCisJaWYgKHJlcG9zaXRvcnlfZm9ybWF0X3dvcmt0cmVlX2NvbmZpZykgeworCQkvKgorCQkgKiBwaWNrIHVwIGNvcmUuYmFyZSBhbmQgY29yZS53b3JrdHJlZSBmcm9tIHBlci13b3JrdHJlZQorCQkgKiBjb25maWcgaWYgcHJlc2VudAorCQkgKi8KKwkJc3RyYnVmX2FkZGYoJnNiLCAiJXMvY29uZmlnLndvcmt0cmVlIiwgZ2l0ZGlyKTsKKwkJZ2l0X2NvbmZpZ19mcm9tX2ZpbGUocmVhZF93b3JrdHJlZV9jb25maWcsIHNiLmJ1ZiwgY2FuZGlkYXRlKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJaGFzX2NvbW1vbiA9IDA7CisJfQorCisJaWYgKCFoYXNfY29tbW9uKSB7CisJCWlmIChjYW5kaWRhdGUtPmlzX2JhcmUgIT0gLTEpIHsKKwkJCWlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSBjYW5kaWRhdGUtPmlzX2JhcmU7CisJCQlpZiAoaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9PSAxKQorCQkJCWluc2lkZV93b3JrX3RyZWUgPSAtMTsKKwkJfQorCQlpZiAoY2FuZGlkYXRlLT53b3JrX3RyZWUpIHsKKwkJCWZyZWUoZ2l0X3dvcmtfdHJlZV9jZmcpOworCQkJZ2l0X3dvcmtfdHJlZV9jZmcgPSB4c3RyZHVwKGNhbmRpZGF0ZS0+d29ya190cmVlKTsKKwkJCWluc2lkZV93b3JrX3RyZWUgPSAtMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbml0X3JlcG9zaXRvcnlfZm9ybWF0KHN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCAqZm9ybWF0KQoreworCWNvbnN0IHN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCBmcmVzaCA9IFJFUE9TSVRPUllfRk9STUFUX0lOSVQ7CisKKwltZW1jcHkoZm9ybWF0LCAmZnJlc2gsIHNpemVvZihmcmVzaCkpOworfQorCitpbnQgcmVhZF9yZXBvc2l0b3J5X2Zvcm1hdChzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgKmZvcm1hdCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwljbGVhcl9yZXBvc2l0b3J5X2Zvcm1hdChmb3JtYXQpOworCWdpdF9jb25maWdfZnJvbV9maWxlKGNoZWNrX3JlcG9fZm9ybWF0LCBwYXRoLCBmb3JtYXQpOworCWlmIChmb3JtYXQtPnZlcnNpb24gPT0gLTEpCisJCWNsZWFyX3JlcG9zaXRvcnlfZm9ybWF0KGZvcm1hdCk7CisJcmV0dXJuIGZvcm1hdC0+dmVyc2lvbjsKK30KKwordm9pZCBjbGVhcl9yZXBvc2l0b3J5X2Zvcm1hdChzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgKmZvcm1hdCkKK3sKKwlzdHJpbmdfbGlzdF9jbGVhcigmZm9ybWF0LT51bmtub3duX2V4dGVuc2lvbnMsIDApOworCWZyZWUoZm9ybWF0LT53b3JrX3RyZWUpOworCWZyZWUoZm9ybWF0LT5wYXJ0aWFsX2Nsb25lKTsKKwlpbml0X3JlcG9zaXRvcnlfZm9ybWF0KGZvcm1hdCk7Cit9CisKK2ludCB2ZXJpZnlfcmVwb3NpdG9yeV9mb3JtYXQoY29uc3Qgc3RydWN0IHJlcG9zaXRvcnlfZm9ybWF0ICpmb3JtYXQsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlpZiAoR0lUX1JFUE9fVkVSU0lPTl9SRUFEIDwgZm9ybWF0LT52ZXJzaW9uKSB7CisJCXN0cmJ1Zl9hZGRmKGVyciwgXygiRXhwZWN0ZWQgZ2l0IHJlcG8gdmVyc2lvbiA8PSAlZCwgZm91bmQgJWQiKSwKKwkJCSAgICBHSVRfUkVQT19WRVJTSU9OX1JFQUQsIGZvcm1hdC0+dmVyc2lvbik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoZm9ybWF0LT52ZXJzaW9uID49IDEgJiYgZm9ybWF0LT51bmtub3duX2V4dGVuc2lvbnMubnIpIHsKKwkJaW50IGk7CisKKwkJc3RyYnVmX2FkZHN0cihlcnIsIF8oInVua25vd24gcmVwb3NpdG9yeSBleHRlbnNpb25zIGZvdW5kOiIpKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZm9ybWF0LT51bmtub3duX2V4dGVuc2lvbnMubnI7IGkrKykKKwkJCXN0cmJ1Zl9hZGRmKGVyciwgIlxuXHQlcyIsCisJCQkJICAgIGZvcm1hdC0+dW5rbm93bl9leHRlbnNpb25zLml0ZW1zW2ldLnN0cmluZyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZWFkX2dpdGZpbGVfZXJyb3JfZGllKGludCBlcnJvcl9jb2RlLCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpkaXIpCit7CisJc3dpdGNoIChlcnJvcl9jb2RlKSB7CisJY2FzZSBSRUFEX0dJVEZJTEVfRVJSX1NUQVRfRkFJTEVEOgorCWNhc2UgUkVBRF9HSVRGSUxFX0VSUl9OT1RfQV9GSUxFOgorCQkvKiBub24tZmF0YWw7IGZvbGxvdyByZXR1cm4gcGF0aCAqLworCQlicmVhazsKKwljYXNlIFJFQURfR0lURklMRV9FUlJfT1BFTl9GQUlMRUQ6CisJCWRpZV9lcnJubyhfKCJlcnJvciBvcGVuaW5nICclcyciKSwgcGF0aCk7CisJY2FzZSBSRUFEX0dJVEZJTEVfRVJSX1RPT19MQVJHRToKKwkJZGllKF8oInRvbyBsYXJnZSB0byBiZSBhIC5naXQgZmlsZTogJyVzJyIpLCBwYXRoKTsKKwljYXNlIFJFQURfR0lURklMRV9FUlJfUkVBRF9GQUlMRUQ6CisJCWRpZShfKCJlcnJvciByZWFkaW5nICVzIiksIHBhdGgpOworCWNhc2UgUkVBRF9HSVRGSUxFX0VSUl9JTlZBTElEX0ZPUk1BVDoKKwkJZGllKF8oImludmFsaWQgZ2l0ZmlsZSBmb3JtYXQ6ICVzIiksIHBhdGgpOworCWNhc2UgUkVBRF9HSVRGSUxFX0VSUl9OT19QQVRIOgorCQlkaWUoXygibm8gcGF0aCBpbiBnaXRmaWxlOiAlcyIpLCBwYXRoKTsKKwljYXNlIFJFQURfR0lURklMRV9FUlJfTk9UX0FfUkVQTzoKKwkJZGllKF8oIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAlcyIpLCBkaXIpOworCWRlZmF1bHQ6CisJCUJVRygidW5rbm93biBlcnJvciBjb2RlIik7CisJfQorfQorCisvKgorICogVHJ5IHRvIHJlYWQgdGhlIGxvY2F0aW9uIG9mIHRoZSBnaXQgZGlyZWN0b3J5IGZyb20gdGhlIC5naXQgZmlsZSwKKyAqIHJldHVybiBwYXRoIHRvIGdpdCBkaXJlY3RvcnkgaWYgZm91bmQuIFRoZSByZXR1cm4gdmFsdWUgY29tZXMgZnJvbQorICogYSBzaGFyZWQgYnVmZmVyLgorICoKKyAqIE9uIGZhaWx1cmUsIGlmIHJldHVybl9lcnJvcl9jb2RlIGlzIG5vdCBOVUxMLCByZXR1cm5fZXJyb3JfY29kZQorICogd2lsbCBiZSBzZXQgdG8gYW4gZXJyb3IgY29kZSBhbmQgTlVMTCB3aWxsIGJlIHJldHVybmVkLiBJZgorICogcmV0dXJuX2Vycm9yX2NvZGUgaXMgTlVMTCB0aGUgZnVuY3Rpb24gd2lsbCBkaWUgaW5zdGVhZCAoZm9yIG1vc3QKKyAqIGNhc2VzKS4KKyAqLworY29uc3QgY2hhciAqcmVhZF9naXRmaWxlX2dlbnRseShjb25zdCBjaGFyICpwYXRoLCBpbnQgKnJldHVybl9lcnJvcl9jb2RlKQoreworCWNvbnN0IGludCBtYXhfZmlsZV9zaXplID0gMSA8PCAyMDsgIC8qIDFNQiAqLworCWludCBlcnJvcl9jb2RlID0gMDsKKwljaGFyICpidWYgPSBOVUxMOworCWNoYXIgKmRpciA9IE5VTEw7CisJY29uc3QgY2hhciAqc2xhc2g7CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IGZkOworCXNzaXplX3QgbGVuOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHJlYWxwYXRoID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoc3RhdChwYXRoLCAmc3QpKSB7CisJCS8qIE5FRURTV09SSzogZGlzY2VybiBiZXR3ZWVuIEVOT0VOVCB2cyBvdGhlciBlcnJvcnMgKi8KKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfU1RBVF9GQUlMRUQ7CisJCWdvdG8gY2xlYW51cF9yZXR1cm47CisJfQorCWlmICghU19JU1JFRyhzdC5zdF9tb2RlKSkgeworCQllcnJvcl9jb2RlID0gUkVBRF9HSVRGSUxFX0VSUl9OT1RfQV9GSUxFOworCQlnb3RvIGNsZWFudXBfcmV0dXJuOworCX0KKwlpZiAoc3Quc3Rfc2l6ZSA+IG1heF9maWxlX3NpemUpIHsKKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfVE9PX0xBUkdFOworCQlnb3RvIGNsZWFudXBfcmV0dXJuOworCX0KKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApIHsKKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfT1BFTl9GQUlMRUQ7CisJCWdvdG8gY2xlYW51cF9yZXR1cm47CisJfQorCWJ1ZiA9IHhtYWxsb2N6KHN0LnN0X3NpemUpOworCWxlbiA9IHJlYWRfaW5fZnVsbChmZCwgYnVmLCBzdC5zdF9zaXplKTsKKwljbG9zZShmZCk7CisJaWYgKGxlbiAhPSBzdC5zdF9zaXplKSB7CisJCWVycm9yX2NvZGUgPSBSRUFEX0dJVEZJTEVfRVJSX1JFQURfRkFJTEVEOworCQlnb3RvIGNsZWFudXBfcmV0dXJuOworCX0KKwlpZiAoIXN0YXJ0c193aXRoKGJ1ZiwgImdpdGRpcjogIikpIHsKKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfSU5WQUxJRF9GT1JNQVQ7CisJCWdvdG8gY2xlYW51cF9yZXR1cm47CisJfQorCXdoaWxlIChidWZbbGVuIC0gMV0gPT0gJ1xuJyB8fCBidWZbbGVuIC0gMV0gPT0gJ1xyJykKKwkJbGVuLS07CisJaWYgKGxlbiA8IDkpIHsKKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfTk9fUEFUSDsKKwkJZ290byBjbGVhbnVwX3JldHVybjsKKwl9CisJYnVmW2xlbl0gPSAnXDAnOworCWRpciA9IGJ1ZiArIDg7CisKKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgoZGlyKSAmJiAoc2xhc2ggPSBzdHJyY2hyKHBhdGgsICcvJykpKSB7CisJCXNpemVfdCBwYXRobGVuID0gc2xhc2grMSAtIHBhdGg7CisJCWRpciA9IHhzdHJmbXQoIiUuKnMlLipzIiwgKGludClwYXRobGVuLCBwYXRoLAorCQkJICAgICAgKGludCkobGVuIC0gOCksIGJ1ZiArIDgpOworCQlmcmVlKGJ1Zik7CisJCWJ1ZiA9IGRpcjsKKwl9CisJaWYgKCFpc19naXRfZGlyZWN0b3J5KGRpcikpIHsKKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfTk9UX0FfUkVQTzsKKwkJZ290byBjbGVhbnVwX3JldHVybjsKKwl9CisKKwlzdHJidWZfcmVhbHBhdGgoJnJlYWxwYXRoLCBkaXIsIDEpOworCXBhdGggPSByZWFscGF0aC5idWY7CisKK2NsZWFudXBfcmV0dXJuOgorCWlmIChyZXR1cm5fZXJyb3JfY29kZSkKKwkJKnJldHVybl9lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKKwllbHNlIGlmIChlcnJvcl9jb2RlKQorCQlyZWFkX2dpdGZpbGVfZXJyb3JfZGllKGVycm9yX2NvZGUsIHBhdGgsIGRpcik7CisKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIGVycm9yX2NvZGUgPyBOVUxMIDogcGF0aDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNldHVwX2V4cGxpY2l0X2dpdF9kaXIoY29uc3QgY2hhciAqZ2l0ZGlyZW52LAorCQkJCQkgIHN0cnVjdCBzdHJidWYgKmN3ZCwKKwkJCQkJICBzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgKnJlcG9fZm10LAorCQkJCQkgIGludCAqbm9uZ2l0X29rKQoreworCWNvbnN0IGNoYXIgKndvcmtfdHJlZV9lbnYgPSBnZXRlbnYoR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCk7CisJY29uc3QgY2hhciAqd29ya3RyZWU7CisJY2hhciAqZ2l0ZmlsZTsKKwlpbnQgb2Zmc2V0OworCisJaWYgKFBBVEhfTUFYIC0gNDAgPCBzdHJsZW4oZ2l0ZGlyZW52KSkKKwkJZGllKF8oIickJXMnIHRvbyBiaWciKSwgR0lUX0RJUl9FTlZJUk9OTUVOVCk7CisKKwlnaXRmaWxlID0gKGNoYXIqKXJlYWRfZ2l0ZmlsZShnaXRkaXJlbnYpOworCWlmIChnaXRmaWxlKSB7CisJCWdpdGZpbGUgPSB4c3RyZHVwKGdpdGZpbGUpOworCQlnaXRkaXJlbnYgPSBnaXRmaWxlOworCX0KKworCWlmICghaXNfZ2l0X2RpcmVjdG9yeShnaXRkaXJlbnYpKSB7CisJCWlmIChub25naXRfb2spIHsKKwkJCSpub25naXRfb2sgPSAxOworCQkJZnJlZShnaXRmaWxlKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWRpZShfKCJub3QgYSBnaXQgcmVwb3NpdG9yeTogJyVzJyIpLCBnaXRkaXJlbnYpOworCX0KKworCWlmIChjaGVja19yZXBvc2l0b3J5X2Zvcm1hdF9nZW50bHkoZ2l0ZGlyZW52LCByZXBvX2ZtdCwgbm9uZ2l0X29rKSkgeworCQlmcmVlKGdpdGZpbGUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiAjMywgIzcsICMxMSwgIzE1LCAjMTksICMyMywgIzI3LCAjMzEgKHNlZSB0MTUxMCkgKi8KKwlpZiAod29ya190cmVlX2VudikKKwkJc2V0X2dpdF93b3JrX3RyZWUod29ya190cmVlX2Vudik7CisJZWxzZSBpZiAoaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA+IDApIHsKKwkJaWYgKGdpdF93b3JrX3RyZWVfY2ZnKSB7CisJCQkvKiAjMjIuMiwgIzMwICovCisJCQl3YXJuaW5nKCJjb3JlLmJhcmUgYW5kIGNvcmUud29ya3RyZWUgZG8gbm90IG1ha2Ugc2Vuc2UiKTsKKwkJCXdvcmtfdHJlZV9jb25maWdfaXNfYm9ndXMgPSAxOworCQl9CisKKwkJLyogIzE4LCAjMjYgKi8KKwkJc2V0X2dpdF9kaXIoZ2l0ZGlyZW52LCAwKTsKKwkJZnJlZShnaXRmaWxlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWVsc2UgaWYgKGdpdF93b3JrX3RyZWVfY2ZnKSB7IC8qICM2LCAjMTQgKi8KKwkJaWYgKGlzX2Fic29sdXRlX3BhdGgoZ2l0X3dvcmtfdHJlZV9jZmcpKQorCQkJc2V0X2dpdF93b3JrX3RyZWUoZ2l0X3dvcmtfdHJlZV9jZmcpOworCQllbHNlIHsKKwkJCWNoYXIgKmNvcmVfd29ya3RyZWU7CisJCQlpZiAoY2hkaXIoZ2l0ZGlyZW52KSkKKwkJCQlkaWVfZXJybm8oXygiY2Fubm90IGNoZGlyIHRvICclcyciKSwgZ2l0ZGlyZW52KTsKKwkJCWlmIChjaGRpcihnaXRfd29ya190cmVlX2NmZykpCisJCQkJZGllX2Vycm5vKF8oImNhbm5vdCBjaGRpciB0byAnJXMnIiksIGdpdF93b3JrX3RyZWVfY2ZnKTsKKwkJCWNvcmVfd29ya3RyZWUgPSB4Z2V0Y3dkKCk7CisJCQlpZiAoY2hkaXIoY3dkLT5idWYpKQorCQkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIpKTsKKwkJCXNldF9naXRfd29ya190cmVlKGNvcmVfd29ya3RyZWUpOworCQkJZnJlZShjb3JlX3dvcmt0cmVlKTsKKwkJfQorCX0KKwllbHNlIGlmICghZ2l0X2Vudl9ib29sKEdJVF9JTVBMSUNJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsIDEpKSB7CisJCS8qICMxNmQgKi8KKwkJc2V0X2dpdF9kaXIoZ2l0ZGlyZW52LCAwKTsKKwkJZnJlZShnaXRmaWxlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWVsc2UgLyogIzIsICMxMCAqLworCQlzZXRfZ2l0X3dvcmtfdHJlZSgiLiIpOworCisJLyogc2V0X2dpdF93b3JrX3RyZWUoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYnkgbm93ICovCisJd29ya3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpOworCisJLyogYm90aCBnZXRfZ2l0X3dvcmtfdHJlZSgpIGFuZCBjd2QgYXJlIGFscmVhZHkgbm9ybWFsaXplZCAqLworCWlmICghc3RyY21wKGN3ZC0+YnVmLCB3b3JrdHJlZSkpIHsgLyogY3dkID09IHdvcmt0cmVlICovCisJCXNldF9naXRfZGlyKGdpdGRpcmVudiwgMCk7CisJCWZyZWUoZ2l0ZmlsZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCW9mZnNldCA9IGRpcl9pbnNpZGVfb2YoY3dkLT5idWYsIHdvcmt0cmVlKTsKKwlpZiAob2Zmc2V0ID49IDApIHsJLyogY3dkIGluc2lkZSB3b3JrdHJlZT8gKi8KKwkJc2V0X2dpdF9kaXIoZ2l0ZGlyZW52LCAxKTsKKwkJaWYgKGNoZGlyKHdvcmt0cmVlKSkKKwkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY2hkaXIgdG8gJyVzJyIpLCB3b3JrdHJlZSk7CisJCXN0cmJ1Zl9hZGRjaChjd2QsICcvJyk7CisJCWZyZWUoZ2l0ZmlsZSk7CisJCXJldHVybiBjd2QtPmJ1ZiArIG9mZnNldDsKKwl9CisKKwkvKiBjd2Qgb3V0c2lkZSB3b3JrdHJlZSAqLworCXNldF9naXRfZGlyKGdpdGRpcmVudiwgMCk7CisJZnJlZShnaXRmaWxlKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNldHVwX2Rpc2NvdmVyZWRfZ2l0X2Rpcihjb25zdCBjaGFyICpnaXRkaXIsCisJCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpjd2QsIGludCBvZmZzZXQsCisJCQkJCSAgICBzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgKnJlcG9fZm10LAorCQkJCQkgICAgaW50ICpub25naXRfb2spCit7CisJaWYgKGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0X2dlbnRseShnaXRkaXIsIHJlcG9fZm10LCBub25naXRfb2spKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIC0td29yay10cmVlIGlzIHNldCB3aXRob3V0IC0tZ2l0LWRpcjsgdXNlIGRpc2NvdmVyZWQgb25lICovCisJaWYgKGdldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5UKSB8fCBnaXRfd29ya190cmVlX2NmZykgeworCQljaGFyICp0b19mcmVlID0gTlVMTDsKKwkJY29uc3QgY2hhciAqcmV0OworCisJCWlmIChvZmZzZXQgIT0gY3dkLT5sZW4gJiYgIWlzX2Fic29sdXRlX3BhdGgoZ2l0ZGlyKSkKKwkJCWdpdGRpciA9IHRvX2ZyZWUgPSByZWFsX3BhdGhkdXAoZ2l0ZGlyLCAxKTsKKwkJaWYgKGNoZGlyKGN3ZC0+YnVmKSkKKwkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIpKTsKKwkJcmV0ID0gc2V0dXBfZXhwbGljaXRfZ2l0X2RpcihnaXRkaXIsIGN3ZCwgcmVwb19mbXQsIG5vbmdpdF9vayk7CisJCWZyZWUodG9fZnJlZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogIzE2LjIsICMxNy4yLCAjMjAuMiwgIzIxLjIsICMyNCwgIzI1LCAjMjgsICMyOSAoc2VlIHQxNTEwKSAqLworCWlmIChpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID4gMCkgeworCQlzZXRfZ2l0X2RpcihnaXRkaXIsIChvZmZzZXQgIT0gY3dkLT5sZW4pKTsKKwkJaWYgKGNoZGlyKGN3ZC0+YnVmKSkKKwkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogIzAsICMxLCAjNSwgIzgsICM5LCAjMTIsICMxMyAqLworCXNldF9naXRfd29ya190cmVlKCIuIik7CisJaWYgKHN0cmNtcChnaXRkaXIsIERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVCkpCisJCXNldF9naXRfZGlyKGdpdGRpciwgMCk7CisJaW5zaWRlX2dpdF9kaXIgPSAwOworCWluc2lkZV93b3JrX3RyZWUgPSAxOworCWlmIChvZmZzZXQgPj0gY3dkLT5sZW4pCisJCXJldHVybiBOVUxMOworCisJLyogTWFrZSAib2Zmc2V0IiBwb2ludCBwYXN0IHRoZSAnLycgKGFscmVhZHkgdGhlIGNhc2UgZm9yIHJvb3QgZGlycykgKi8KKwlpZiAob2Zmc2V0ICE9IG9mZnNldF8xc3RfY29tcG9uZW50KGN3ZC0+YnVmKSkKKwkJb2Zmc2V0Kys7CisJLyogQWRkIGEgJy8nIGF0IHRoZSBlbmQgKi8KKwlzdHJidWZfYWRkY2goY3dkLCAnLycpOworCXJldHVybiBjd2QtPmJ1ZiArIG9mZnNldDsKK30KKworLyogIzE2LjEsICMxNy4xLCAjMjAuMSwgIzIxLjEsICMyMi4xIChzZWUgdDE1MTApICovCitzdGF0aWMgY29uc3QgY2hhciAqc2V0dXBfYmFyZV9naXRfZGlyKHN0cnVjdCBzdHJidWYgKmN3ZCwgaW50IG9mZnNldCwKKwkJCQkgICAgICBzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgKnJlcG9fZm10LAorCQkJCSAgICAgIGludCAqbm9uZ2l0X29rKQoreworCWludCByb290X2xlbjsKKworCWlmIChjaGVja19yZXBvc2l0b3J5X2Zvcm1hdF9nZW50bHkoIi4iLCByZXBvX2ZtdCwgbm9uZ2l0X29rKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXRlbnYoR0lUX0lNUExJQ0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCwgIjAiLCAxKTsKKworCS8qIC0td29yay10cmVlIGlzIHNldCB3aXRob3V0IC0tZ2l0LWRpcjsgdXNlIGRpc2NvdmVyZWQgb25lICovCisJaWYgKGdldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5UKSB8fCBnaXRfd29ya190cmVlX2NmZykgeworCQlzdGF0aWMgY29uc3QgY2hhciAqZ2l0ZGlyOworCisJCWdpdGRpciA9IG9mZnNldCA9PSBjd2QtPmxlbiA/ICIuIiA6IHhtZW1kdXB6KGN3ZC0+YnVmLCBvZmZzZXQpOworCQlpZiAoY2hkaXIoY3dkLT5idWYpKQorCQkJZGllX2Vycm5vKF8oImNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIikpOworCQlyZXR1cm4gc2V0dXBfZXhwbGljaXRfZ2l0X2RpcihnaXRkaXIsIGN3ZCwgcmVwb19mbXQsIG5vbmdpdF9vayk7CisJfQorCisJaW5zaWRlX2dpdF9kaXIgPSAxOworCWluc2lkZV93b3JrX3RyZWUgPSAwOworCWlmIChvZmZzZXQgIT0gY3dkLT5sZW4pIHsKKwkJaWYgKGNoZGlyKGN3ZC0+YnVmKSkKKwkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIpKTsKKwkJcm9vdF9sZW4gPSBvZmZzZXRfMXN0X2NvbXBvbmVudChjd2QtPmJ1Zik7CisJCXN0cmJ1Zl9zZXRsZW4oY3dkLCBvZmZzZXQgPiByb290X2xlbiA/IG9mZnNldCA6IHJvb3RfbGVuKTsKKwkJc2V0X2dpdF9kaXIoY3dkLT5idWYsIDApOworCX0KKwllbHNlCisJCXNldF9naXRfZGlyKCIuIiwgMCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBkZXZfdCBnZXRfZGV2aWNlX29yX2RpZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwcmVmaXgsIGludCBwcmVmaXhfbGVuKQoreworCXN0cnVjdCBzdGF0IGJ1ZjsKKwlpZiAoc3RhdChwYXRoLCAmYnVmKSkgeworCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHN0YXQgJyUqcyVzJXMnIiksCisJCQkJcHJlZml4X2xlbiwKKwkJCQlwcmVmaXggPyBwcmVmaXggOiAiIiwKKwkJCQlwcmVmaXggPyAiLyIgOiAiIiwgcGF0aCk7CisJfQorCXJldHVybiBidWYuc3RfZGV2OworfQorCisvKgorICogQSAic3RyaW5nX2xpc3RfZWFjaF9mdW5jX3QiIGZ1bmN0aW9uIHRoYXQgY2Fub25pY2FsaXplcyBhbiBlbnRyeQorICogZnJvbSBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyB1c2luZyByZWFsX3BhdGhkdXAoKSwgb3IKKyAqIGRpc2NhcmRzIGl0IGlmIHVudXNhYmxlLiAgVGhlIHByZXNlbmNlIG9mIGFuIGVtcHR5IGVudHJ5IGluCisgKiBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyB0dXJucyBvZmYgY2Fub25pY2FsaXphdGlvbiBmb3IgYWxsCisgKiBzdWJzZXF1ZW50IGVudHJpZXMuCisgKi8KK3N0YXRpYyBpbnQgY2Fub25pY2FsaXplX2NlaWxpbmdfZW50cnkoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sCisJCQkJICAgICAgdm9pZCAqY2JfZGF0YSkKK3sKKwlpbnQgKmVtcHR5X2VudHJ5X2ZvdW5kID0gY2JfZGF0YTsKKwljaGFyICpjZWlsID0gaXRlbS0+c3RyaW5nOworCisJaWYgKCEqY2VpbCkgeworCQkqZW1wdHlfZW50cnlfZm91bmQgPSAxOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFpc19hYnNvbHV0ZV9wYXRoKGNlaWwpKSB7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoKmVtcHR5X2VudHJ5X2ZvdW5kKSB7CisJCS8qIEtlZXAgZW50cnkgYnV0IGRvIG5vdCBjYW5vbmljYWxpemUgaXQgKi8KKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJY2hhciAqcmVhbF9wYXRoID0gcmVhbF9wYXRoZHVwKGNlaWwsIDApOworCQlpZiAoIXJlYWxfcGF0aCkgeworCQkJcmV0dXJuIDA7CisJCX0KKwkJZnJlZShpdGVtLT5zdHJpbmcpOworCQlpdGVtLT5zdHJpbmcgPSByZWFsX3BhdGg7CisJCXJldHVybiAxOworCX0KK30KKworZW51bSBkaXNjb3ZlcnlfcmVzdWx0IHsKKwlHSVRfRElSX05PTkUgPSAwLAorCUdJVF9ESVJfRVhQTElDSVQsCisJR0lUX0RJUl9ESVNDT1ZFUkVELAorCUdJVF9ESVJfQkFSRSwKKwkvKiB0aGVzZSBhcmUgZXJyb3JzICovCisJR0lUX0RJUl9ISVRfQ0VJTElORyA9IC0xLAorCUdJVF9ESVJfSElUX01PVU5UX1BPSU5UID0gLTIsCisJR0lUX0RJUl9JTlZBTElEX0dJVEZJTEUgPSAtMworfTsKKworLyoKKyAqIFdlIGNhbm5vdCBkZWNpZGUgaW4gdGhpcyBmdW5jdGlvbiB3aGV0aGVyIHdlIGFyZSBpbiB0aGUgd29yayB0cmVlIG9yCisgKiBub3QsIHNpbmNlIHRoZSBjb25maWcgY2FuIG9ubHkgYmUgcmVhZCBfYWZ0ZXJfIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZC4KKyAqCisgKiBBbHNvLCB3ZSBhdm9pZCBjaGFuZ2luZyBhbnkgZ2xvYmFsIHN0YXRlIChzdWNoIGFzIHRoZSBjdXJyZW50IHdvcmtpbmcKKyAqIGRpcmVjdG9yeSkgdG8gYWxsb3cgZWFybHkgY2FsbGVycy4KKyAqCisgKiBUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBzZWFyY2ggc2hvdWxkIHN0YXJ0IG5lZWRzIHRvIGJlIHBhc3NlZCBpbiB2aWEgdGhlCisgKiBgZGlyYCBwYXJhbWV0ZXI7IHVwb24gcmV0dXJuLCB0aGUgYGRpcmAgYnVmZmVyIHdpbGwgY29udGFpbiB0aGUgcGF0aCBvZgorICogdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgc2VhcmNoIGVuZGVkLCBhbmQgYGdpdGRpcmAgd2lsbCBjb250YWluIHRoZSBwYXRoIG9mCisgKiB0aGUgZGlzY292ZXJlZCAuZ2l0LyBkaXJlY3RvcnksIGlmIGFueS4gSWYgYGdpdGRpcmAgaXMgbm90IGFic29sdXRlLCBpdAorICogaXMgcmVsYXRpdmUgdG8gYGRpcmAgKGkuZS4gKm5vdCogbmVjZXNzYXJpbHkgdGhlIGN3ZCkuCisgKi8KK3N0YXRpYyBlbnVtIGRpc2NvdmVyeV9yZXN1bHQgc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHlfMShzdHJ1Y3Qgc3RyYnVmICpkaXIsCisJCQkJCQkJICBzdHJ1Y3Qgc3RyYnVmICpnaXRkaXIsCisJCQkJCQkJICBpbnQgZGllX29uX2Vycm9yKQoreworCWNvbnN0IGNoYXIgKmVudl9jZWlsaW5nX2RpcnMgPSBnZXRlbnYoQ0VJTElOR19ESVJFQ1RPUklFU19FTlZJUk9OTUVOVCk7CisJc3RydWN0IHN0cmluZ19saXN0IGNlaWxpbmdfZGlycyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWNvbnN0IGNoYXIgKmdpdGRpcmVudjsKKwlpbnQgY2VpbF9vZmZzZXQgPSAtMSwgbWluX29mZnNldCA9IG9mZnNldF8xc3RfY29tcG9uZW50KGRpci0+YnVmKTsKKwlkZXZfdCBjdXJyZW50X2RldmljZSA9IDA7CisJaW50IG9uZV9maWxlc3lzdGVtID0gMTsKKworCS8qCisJICogSWYgR0lUX0RJUiBpcyBzZXQgZXhwbGljaXRseSwgd2UncmUgbm90IGdvaW5nCisJICogdG8gZG8gYW55IGRpc2NvdmVyeSwgYnV0IHdlIHN0aWxsIGRvIHJlcG9zaXRvcnkKKwkgKiB2YWxpZGF0aW9uLgorCSAqLworCWdpdGRpcmVudiA9IGdldGVudihHSVRfRElSX0VOVklST05NRU5UKTsKKwlpZiAoZ2l0ZGlyZW52KSB7CisJCXN0cmJ1Zl9hZGRzdHIoZ2l0ZGlyLCBnaXRkaXJlbnYpOworCQlyZXR1cm4gR0lUX0RJUl9FWFBMSUNJVDsKKwl9CisKKwlpZiAoZW52X2NlaWxpbmdfZGlycykgeworCQlpbnQgZW1wdHlfZW50cnlfZm91bmQgPSAwOworCisJCXN0cmluZ19saXN0X3NwbGl0KCZjZWlsaW5nX2RpcnMsIGVudl9jZWlsaW5nX2RpcnMsIFBBVEhfU0VQLCAtMSk7CisJCWZpbHRlcl9zdHJpbmdfbGlzdCgmY2VpbGluZ19kaXJzLCAwLAorCQkJCSAgIGNhbm9uaWNhbGl6ZV9jZWlsaW5nX2VudHJ5LCAmZW1wdHlfZW50cnlfZm91bmQpOworCQljZWlsX29mZnNldCA9IGxvbmdlc3RfYW5jZXN0b3JfbGVuZ3RoKGRpci0+YnVmLCAmY2VpbGluZ19kaXJzKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmNlaWxpbmdfZGlycywgMCk7CisJfQorCisJaWYgKGNlaWxfb2Zmc2V0IDwgMCkKKwkJY2VpbF9vZmZzZXQgPSBtaW5fb2Zmc2V0IC0gMjsKKworCWlmIChtaW5fb2Zmc2V0ICYmIG1pbl9vZmZzZXQgPT0gZGlyLT5sZW4gJiYKKwkgICAgIWlzX2Rpcl9zZXAoZGlyLT5idWZbbWluX29mZnNldCAtIDFdKSkgeworCQlzdHJidWZfYWRkY2goZGlyLCAnLycpOworCQltaW5fb2Zmc2V0Kys7CisJfQorCisJLyoKKwkgKiBUZXN0IGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgKHJlbGF0aXZlIHRvIHRoZSBkaXIpOgorCSAqIC0gLmdpdCAoZmlsZSBjb250YWluaW5nICJnaXRkaXI6IDxwYXRoPiIpCisJICogLSAuZ2l0LworCSAqIC0gLi8gKGJhcmUpCisJICogLSAuLi8uZ2l0CisJICogLSAuLi8uZ2l0LworCSAqIC0gLi4vIChiYXJlKQorCSAqIC0gLi4vLi4vLmdpdAorCSAqICAgZXRjLgorCSAqLworCW9uZV9maWxlc3lzdGVtID0gIWdpdF9lbnZfYm9vbCgiR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSIsIDApOworCWlmIChvbmVfZmlsZXN5c3RlbSkKKwkJY3VycmVudF9kZXZpY2UgPSBnZXRfZGV2aWNlX29yX2RpZShkaXItPmJ1ZiwgTlVMTCwgMCk7CisJZm9yICg7OykgeworCQlpbnQgb2Zmc2V0ID0gZGlyLT5sZW4sIGVycm9yX2NvZGUgPSAwOworCisJCWlmIChvZmZzZXQgPiBtaW5fb2Zmc2V0KQorCQkJc3RyYnVmX2FkZGNoKGRpciwgJy8nKTsKKwkJc3RyYnVmX2FkZHN0cihkaXIsIERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVCk7CisJCWdpdGRpcmVudiA9IHJlYWRfZ2l0ZmlsZV9nZW50bHkoZGlyLT5idWYsIGRpZV9vbl9lcnJvciA/CisJCQkJCQlOVUxMIDogJmVycm9yX2NvZGUpOworCQlpZiAoIWdpdGRpcmVudikgeworCQkJaWYgKGRpZV9vbl9lcnJvciB8fAorCQkJICAgIGVycm9yX2NvZGUgPT0gUkVBRF9HSVRGSUxFX0VSUl9OT1RfQV9GSUxFKSB7CisJCQkJLyogTkVFRFNXT1JLOiBmYWlsIGlmIC5naXQgaXMgbm90IGZpbGUgbm9yIGRpciAqLworCQkJCWlmIChpc19naXRfZGlyZWN0b3J5KGRpci0+YnVmKSkKKwkJCQkJZ2l0ZGlyZW52ID0gREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UOworCQkJfSBlbHNlIGlmIChlcnJvcl9jb2RlICE9IFJFQURfR0lURklMRV9FUlJfU1RBVF9GQUlMRUQpCisJCQkJcmV0dXJuIEdJVF9ESVJfSU5WQUxJRF9HSVRGSUxFOworCQl9CisJCXN0cmJ1Zl9zZXRsZW4oZGlyLCBvZmZzZXQpOworCQlpZiAoZ2l0ZGlyZW52KSB7CisJCQlzdHJidWZfYWRkc3RyKGdpdGRpciwgZ2l0ZGlyZW52KTsKKwkJCXJldHVybiBHSVRfRElSX0RJU0NPVkVSRUQ7CisJCX0KKworCQlpZiAoaXNfZ2l0X2RpcmVjdG9yeShkaXItPmJ1ZikpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoZ2l0ZGlyLCAiLiIpOworCQkJcmV0dXJuIEdJVF9ESVJfQkFSRTsKKwkJfQorCisJCWlmIChvZmZzZXQgPD0gbWluX29mZnNldCkKKwkJCXJldHVybiBHSVRfRElSX0hJVF9DRUlMSU5HOworCisJCXdoaWxlICgtLW9mZnNldCA+IGNlaWxfb2Zmc2V0ICYmICFpc19kaXJfc2VwKGRpci0+YnVmW29mZnNldF0pKQorCQkJOyAvKiBjb250aW51ZSAqLworCQlpZiAob2Zmc2V0IDw9IGNlaWxfb2Zmc2V0KQorCQkJcmV0dXJuIEdJVF9ESVJfSElUX0NFSUxJTkc7CisKKwkJc3RyYnVmX3NldGxlbihkaXIsIG9mZnNldCA+IG1pbl9vZmZzZXQgPyAgb2Zmc2V0IDogbWluX29mZnNldCk7CisJCWlmIChvbmVfZmlsZXN5c3RlbSAmJgorCQkgICAgY3VycmVudF9kZXZpY2UgIT0gZ2V0X2RldmljZV9vcl9kaWUoZGlyLT5idWYsIE5VTEwsIG9mZnNldCkpCisJCQlyZXR1cm4gR0lUX0RJUl9ISVRfTU9VTlRfUE9JTlQ7CisJfQorfQorCitpbnQgZGlzY292ZXJfZ2l0X2RpcmVjdG9yeShzdHJ1Y3Qgc3RyYnVmICpjb21tb25kaXIsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICpnaXRkaXIpCit7CisJc3RydWN0IHN0cmJ1ZiBkaXIgPSBTVFJCVUZfSU5JVCwgZXJyID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IGdpdGRpcl9vZmZzZXQgPSBnaXRkaXItPmxlbiwgY3dkX2xlbjsKKwlzaXplX3QgY29tbW9uZGlyX29mZnNldCA9IGNvbW1vbmRpci0+bGVuOworCXN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCBjYW5kaWRhdGUgPSBSRVBPU0lUT1JZX0ZPUk1BVF9JTklUOworCisJaWYgKHN0cmJ1Zl9nZXRjd2QoJmRpcikpCisJCXJldHVybiAtMTsKKworCWN3ZF9sZW4gPSBkaXIubGVuOworCWlmIChzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseV8xKCZkaXIsIGdpdGRpciwgMCkgPD0gMCkgeworCQlzdHJidWZfcmVsZWFzZSgmZGlyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogVGhlIHJldHVybmVkIGdpdGRpciBpcyByZWxhdGl2ZSB0byBkaXIsIGFuZCBpZiBkaXIgZG9lcyBub3QgcmVmbGVjdAorCSAqIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCB3ZSBzaW1wbHkgbWFrZSB0aGUgZ2l0ZGlyIGFic29sdXRlLgorCSAqLworCWlmIChkaXIubGVuIDwgY3dkX2xlbiAmJiAhaXNfYWJzb2x1dGVfcGF0aChnaXRkaXItPmJ1ZiArIGdpdGRpcl9vZmZzZXQpKSB7CisJCS8qIEF2b2lkIGEgdHJhaWxpbmcgIi8uIiAqLworCQlpZiAoIXN0cmNtcCgiLiIsIGdpdGRpci0+YnVmICsgZ2l0ZGlyX29mZnNldCkpCisJCQlzdHJidWZfc2V0bGVuKGdpdGRpciwgZ2l0ZGlyX29mZnNldCk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRjaCgmZGlyLCAnLycpOworCQlzdHJidWZfaW5zZXJ0KGdpdGRpciwgZ2l0ZGlyX29mZnNldCwgZGlyLmJ1ZiwgZGlyLmxlbik7CisJfQorCisJZ2V0X2NvbW1vbl9kaXIoY29tbW9uZGlyLCBnaXRkaXItPmJ1ZiArIGdpdGRpcl9vZmZzZXQpOworCisJc3RyYnVmX3Jlc2V0KCZkaXIpOworCXN0cmJ1Zl9hZGRmKCZkaXIsICIlcy9jb25maWciLCBjb21tb25kaXItPmJ1ZiArIGNvbW1vbmRpcl9vZmZzZXQpOworCXJlYWRfcmVwb3NpdG9yeV9mb3JtYXQoJmNhbmRpZGF0ZSwgZGlyLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmRpcik7CisKKwlpZiAodmVyaWZ5X3JlcG9zaXRvcnlfZm9ybWF0KCZjYW5kaWRhdGUsICZlcnIpIDwgMCkgeworCQl3YXJuaW5nKCJpZ25vcmluZyBnaXQgZGlyICclcyc6ICVzIiwKKwkJCWdpdGRpci0+YnVmICsgZ2l0ZGlyX29mZnNldCwgZXJyLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQlzdHJidWZfc2V0bGVuKGNvbW1vbmRpciwgY29tbW9uZGlyX29mZnNldCk7CisJCXN0cmJ1Zl9zZXRsZW4oZ2l0ZGlyLCBnaXRkaXJfb2Zmc2V0KTsKKwkJY2xlYXJfcmVwb3NpdG9yeV9mb3JtYXQoJmNhbmRpZGF0ZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwljbGVhcl9yZXBvc2l0b3J5X2Zvcm1hdCgmY2FuZGlkYXRlKTsKKwlyZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoaW50ICpub25naXRfb2spCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgY3dkID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBkaXIgPSBTVFJCVUZfSU5JVCwgZ2l0ZGlyID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcHJlZml4ID0gTlVMTDsKKwlzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgcmVwb19mbXQgPSBSRVBPU0lUT1JZX0ZPUk1BVF9JTklUOworCisJLyoKKwkgKiBXZSBtYXkgaGF2ZSByZWFkIGFuIGluY29tcGxldGUgY29uZmlndXJhdGlvbiBiZWZvcmUKKwkgKiBzZXR0aW5nLXVwIHRoZSBnaXQgZGlyZWN0b3J5LiBJZiBzbywgY2xlYXIgdGhlIGNhY2hlIHNvCisJICogdGhhdCB0aGUgbmV4dCBxdWVyaWVzIHRvIHRoZSBjb25maWd1cmF0aW9uIHJlbG9hZCBjb21wbGV0ZQorCSAqIGNvbmZpZ3VyYXRpb24gKGluY2x1ZGluZyB0aGUgcGVyLXJlcG8gY29uZmlnIGZpbGUgdGhhdCB3ZQorCSAqIGlnbm9yZWQgcHJldmlvdXNseSkuCisJICovCisJZ2l0X2NvbmZpZ19jbGVhcigpOworCisJLyoKKwkgKiBMZXQncyBhc3N1bWUgdGhhdCB3ZSBhcmUgaW4gYSBnaXQgcmVwb3NpdG9yeS4KKwkgKiBJZiBpdCB0dXJucyBvdXQgbGF0ZXIgdGhhdCB3ZSBhcmUgc29tZXdoZXJlIGVsc2UsIHRoZSB2YWx1ZSB3aWxsIGJlCisJICogdXBkYXRlZCBhY2NvcmRpbmdseS4KKwkgKi8KKwlpZiAobm9uZ2l0X29rKQorCQkqbm9uZ2l0X29rID0gMDsKKworCWlmIChzdHJidWZfZ2V0Y3dkKCZjd2QpKQorCQlkaWVfZXJybm8oXygiVW5hYmxlIHRvIHJlYWQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpKTsKKwlzdHJidWZfYWRkYnVmKCZkaXIsICZjd2QpOworCisJc3dpdGNoIChzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseV8xKCZkaXIsICZnaXRkaXIsIDEpKSB7CisJY2FzZSBHSVRfRElSX0VYUExJQ0lUOgorCQlwcmVmaXggPSBzZXR1cF9leHBsaWNpdF9naXRfZGlyKGdpdGRpci5idWYsICZjd2QsICZyZXBvX2ZtdCwgbm9uZ2l0X29rKTsKKwkJYnJlYWs7CisJY2FzZSBHSVRfRElSX0RJU0NPVkVSRUQ6CisJCWlmIChkaXIubGVuIDwgY3dkLmxlbiAmJiBjaGRpcihkaXIuYnVmKSkKKwkJCWRpZShfKCJjYW5ub3QgY2hhbmdlIHRvICclcyciKSwgZGlyLmJ1Zik7CisJCXByZWZpeCA9IHNldHVwX2Rpc2NvdmVyZWRfZ2l0X2RpcihnaXRkaXIuYnVmLCAmY3dkLCBkaXIubGVuLAorCQkJCQkJICAmcmVwb19mbXQsIG5vbmdpdF9vayk7CisJCWJyZWFrOworCWNhc2UgR0lUX0RJUl9CQVJFOgorCQlpZiAoZGlyLmxlbiA8IGN3ZC5sZW4gJiYgY2hkaXIoZGlyLmJ1ZikpCisJCQlkaWUoXygiY2Fubm90IGNoYW5nZSB0byAnJXMnIiksIGRpci5idWYpOworCQlwcmVmaXggPSBzZXR1cF9iYXJlX2dpdF9kaXIoJmN3ZCwgZGlyLmxlbiwgJnJlcG9fZm10LCBub25naXRfb2spOworCQlicmVhazsKKwljYXNlIEdJVF9ESVJfSElUX0NFSUxJTkc6CisJCWlmICghbm9uZ2l0X29rKQorCQkJZGllKF8oIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIiksCisJCQkgICAgREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UKTsKKwkJKm5vbmdpdF9vayA9IDE7CisJCWJyZWFrOworCWNhc2UgR0lUX0RJUl9ISVRfTU9VTlRfUE9JTlQ6CisJCWlmICghbm9uZ2l0X29rKQorCQkJZGllKF8oIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgcGFyZW50IHVwIHRvIG1vdW50IHBvaW50ICVzKVxuIgorCQkJICAgICAgIlN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0gYm91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuIiksCisJCQkgICAgZGlyLmJ1Zik7CisJCSpub25naXRfb2sgPSAxOworCQlicmVhazsKKwljYXNlIEdJVF9ESVJfTk9ORToKKwkJLyoKKwkJICogQXMgYSBzYWZlZ3VhcmQgYWdhaW5zdCBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseV8xIHJldHVybmluZworCQkgKiB0aGlzIHZhbHVlLCBmYWxsdGhyb3VnaCB0byBCVUcuIE90aGVyd2lzZSBpdCBpcyBwb3NzaWJsZSB0bworCQkgKiBzZXQgc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkgdG8gMSB3aGVuIHdlIGRpZCBub3RoaW5nIHRvCisJCSAqIGZpbmQgYSByZXBvc2l0b3J5LgorCQkgKi8KKwlkZWZhdWx0OgorCQlCVUcoInVuaGFuZGxlZCBzZXR1cF9naXRfZGlyZWN0b3J5XzEoKSByZXN1bHQiKTsKKwl9CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIG5vbmdpdF9vayBpcyBzdGFibGUuIElmIGl0IGlzIG5vbi1OVUxMIGFuZCBwb2ludHMKKwkgKiB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGVuIHRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlbid0IGZvdW5kIGEKKwkgKiByZXBvc2l0b3J5IGFuZCB0aGF0IHRoZSBjYWxsZXIgZXhwZWN0cyBzdGFydHVwX2luZm8gdG8gcmVmbGVjdAorCSAqIHRoaXMuCisJICoKKwkgKiBSZWdhcmRsZXNzIG9mIHRoZSBzdGF0ZSBvZiBub25naXRfb2ssIHN0YXJ0dXBfaW5mby0+cHJlZml4IGFuZAorCSAqIHRoZSBHSVRfUFJFRklYIGVudmlyb25tZW50IHZhcmlhYmxlIG11c3QgYWx3YXlzIG1hdGNoLiBGb3IgZGV0YWlscworCSAqIHNlZSBEb2N1bWVudGF0aW9uL2NvbmZpZy9hbGlhcy50eHQuCisJICovCisJaWYgKG5vbmdpdF9vayAmJiAqbm9uZ2l0X29rKSB7CisJCXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5ID0gMDsKKwkJc3RhcnR1cF9pbmZvLT5wcmVmaXggPSBOVUxMOworCQlzZXRlbnYoR0lUX1BSRUZJWF9FTlZJUk9OTUVOVCwgIiIsIDEpOworCX0gZWxzZSB7CisJCXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5ID0gMTsKKwkJc3RhcnR1cF9pbmZvLT5wcmVmaXggPSBwcmVmaXg7CisJCWlmIChwcmVmaXgpCisJCQlzZXRlbnYoR0lUX1BSRUZJWF9FTlZJUk9OTUVOVCwgcHJlZml4LCAxKTsKKwkJZWxzZQorCQkJc2V0ZW52KEdJVF9QUkVGSVhfRU5WSVJPTk1FTlQsICIiLCAxKTsKKwl9CisKKwkvKgorCSAqIE5vdCBhbGwgcGF0aHMgdGhyb3VnaCB0aGUgc2V0dXAgY29kZSB3aWxsIGNhbGwgJ3NldF9naXRfZGlyKCknICh3aGljaAorCSAqIGRpcmVjdGx5IHNldHMgdXAgdGhlIGVudmlyb25tZW50KSBzbyBpbiBvcmRlciB0byBndWFyYW50ZWUgdGhhdCB0aGUKKwkgKiBlbnZpcm9ubWVudCBpcyBpbiBhIGNvbnNpc3RlbnQgc3RhdGUgYWZ0ZXIgc2V0dXAsIGV4cGxpY2l0bHkgc2V0dXAKKwkgKiB0aGUgZW52aXJvbm1lbnQgaWYgd2UgaGF2ZSBhIHJlcG9zaXRvcnkuCisJICoKKwkgKiBORUVEU1dPUks6IGN1cnJlbnRseSB3ZSBhbGxvdyBib2d1cyBHSVRfRElSIHZhbHVlcyB0byBiZSBzZXQgaW4gc29tZQorCSAqIGNvZGUgcGF0aHMgc28gd2UgYWxzbyBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0dXAgdGhlIGVudmlyb25tZW50IGlmCisJICogdGhlIHVzZXIgaGFzIHNldCBHSVRfRElSLiAgSXQgbWF5IGJlIGJlbmVmaWNpYWwgdG8gZGlzYWxsb3cgYm9ndXMKKwkgKiBHSVRfRElSIHZhbHVlcyBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCisJICovCisJaWYgKC8qIEdJVF9ESVJfRVhQTElDSVQsIEdJVF9ESVJfRElTQ09WRVJFRCwgR0lUX0RJUl9CQVJFICovCisJICAgIHN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5IHx8CisJICAgIC8qIEdJVF9ESVJfRVhQTElDSVQgKi8KKwkgICAgZ2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQpKSB7CisJCWlmICghdGhlX3JlcG9zaXRvcnktPmdpdGRpcikgeworCQkJY29uc3QgY2hhciAqZ2l0ZGlyID0gZ2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQpOworCQkJaWYgKCFnaXRkaXIpCisJCQkJZ2l0ZGlyID0gREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UOworCQkJc2V0dXBfZ2l0X2VudihnaXRkaXIpOworCQl9CisJCWlmIChzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkKKwkJCXJlcG9fc2V0X2hhc2hfYWxnbyh0aGVfcmVwb3NpdG9yeSwgcmVwb19mbXQuaGFzaF9hbGdvKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmZGlyKTsKKwlzdHJidWZfcmVsZWFzZSgmZ2l0ZGlyKTsKKwljbGVhcl9yZXBvc2l0b3J5X2Zvcm1hdCgmcmVwb19mbXQpOworCisJcmV0dXJuIHByZWZpeDsKK30KKworaW50IGdpdF9jb25maWdfcGVybShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCBpOworCWNoYXIgKmVuZHB0cjsKKworCWlmICh2YWx1ZSA9PSBOVUxMKQorCQlyZXR1cm4gUEVSTV9HUk9VUDsKKworCWlmICghc3RyY21wKHZhbHVlLCAidW1hc2siKSkKKwkJcmV0dXJuIFBFUk1fVU1BU0s7CisJaWYgKCFzdHJjbXAodmFsdWUsICJncm91cCIpKQorCQlyZXR1cm4gUEVSTV9HUk9VUDsKKwlpZiAoIXN0cmNtcCh2YWx1ZSwgImFsbCIpIHx8CisJICAgICFzdHJjbXAodmFsdWUsICJ3b3JsZCIpIHx8CisJICAgICFzdHJjbXAodmFsdWUsICJldmVyeWJvZHkiKSkKKwkJcmV0dXJuIFBFUk1fRVZFUllCT0RZOworCisJLyogUGFyc2Ugb2N0YWwgbnVtYmVycyAqLworCWkgPSBzdHJ0b2wodmFsdWUsICZlbmRwdHIsIDgpOworCisJLyogSWYgbm90IGFuIG9jdGFsIG51bWJlciwgbWF5YmUgdHJ1ZS9mYWxzZT8gKi8KKwlpZiAoKmVuZHB0ciAhPSAwKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpID8gUEVSTV9HUk9VUCA6IFBFUk1fVU1BU0s7CisKKwkvKgorCSAqIFRyZWF0IHZhbHVlcyAwLCAxIGFuZCAyIGFzIGNvbXBhdGliaWxpdHkgY2FzZXMsIG90aGVyd2lzZSBpdCBpcworCSAqIGEgY2htb2QgdmFsdWUgdG8gcmVzdHJpY3QgdG8uCisJICovCisJc3dpdGNoIChpKSB7CisJY2FzZSBQRVJNX1VNQVNLOiAgICAgICAgICAgICAgIC8qIDAgKi8KKwkJcmV0dXJuIFBFUk1fVU1BU0s7CisJY2FzZSBPTERfUEVSTV9HUk9VUDogICAgICAgICAgIC8qIDEgKi8KKwkJcmV0dXJuIFBFUk1fR1JPVVA7CisJY2FzZSBPTERfUEVSTV9FVkVSWUJPRFk6ICAgICAgIC8qIDIgKi8KKwkJcmV0dXJuIFBFUk1fRVZFUllCT0RZOworCX0KKworCS8qIEEgZmlsZW1vZGUgdmFsdWUgd2FzIGdpdmVuOiAweHh4ICovCisKKwlpZiAoKGkgJiAwNjAwKSAhPSAwNjAwKQorCQlkaWUoXygicHJvYmxlbSB3aXRoIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBmaWxlbW9kZSB2YWx1ZSAiCisJCSAgICAiKDAlLjNvKS5cblRoZSBvd25lciBvZiBmaWxlcyBtdXN0IGFsd2F5cyBoYXZlICIKKwkJICAgICJyZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucy4iKSwgaSk7CisKKwkvKgorCSAqIE1hc2sgZmlsZW1vZGUgdmFsdWUuIE90aGVycyBjYW4gbm90IGdldCB3cml0ZSBwZXJtaXNzaW9uLgorCSAqIHggZmxhZ3MgZm9yIGRpcmVjdG9yaWVzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkuCisJICovCisJcmV0dXJuIC0oaSAmIDA2NjYpOworfQorCit2b2lkIGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0KHN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCByZXBvX2ZtdCA9IFJFUE9TSVRPUllfRk9STUFUX0lOSVQ7CisJaWYgKCFmbXQpCisJCWZtdCA9ICZyZXBvX2ZtdDsKKwljaGVja19yZXBvc2l0b3J5X2Zvcm1hdF9nZW50bHkoZ2V0X2dpdF9kaXIoKSwgZm10LCBOVUxMKTsKKwlzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSA9IDE7CisJY2xlYXJfcmVwb3NpdG9yeV9mb3JtYXQoJnJlcG9fZm10KTsKK30KKworLyoKKyAqIFJldHVybnMgdGhlICJwcmVmaXgiLCBhIHBhdGggdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyAqIHJlbGF0aXZlIHRvIHRoZSB3b3JrIHRyZWUgcm9vdCwgb3IgTlVMTCwgaWYgdGhlIGN1cnJlbnQgd29ya2luZworICogZGlyZWN0b3J5IGlzIG5vdCBhIHN0cmljdCBzdWJkaXJlY3Rvcnkgb2YgdGhlIHdvcmsgdHJlZSByb290LiBUaGUKKyAqIHByZWZpeCBhbHdheXMgZW5kcyB3aXRoIGEgJy8nIGNoYXJhY3Rlci4KKyAqLworY29uc3QgY2hhciAqc2V0dXBfZ2l0X2RpcmVjdG9yeSh2b2lkKQoreworCXJldHVybiBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseShOVUxMKTsKK30KKworY29uc3QgY2hhciAqcmVzb2x2ZV9naXRkaXJfZ2VudGx5KGNvbnN0IGNoYXIgKnN1c3BlY3QsIGludCAqcmV0dXJuX2Vycm9yX2NvZGUpCit7CisJaWYgKGlzX2dpdF9kaXJlY3Rvcnkoc3VzcGVjdCkpCisJCXJldHVybiBzdXNwZWN0OworCXJldHVybiByZWFkX2dpdGZpbGVfZ2VudGx5KHN1c3BlY3QsIHJldHVybl9lcnJvcl9jb2RlKTsKK30KKworLyogaWYgYW55IHN0YW5kYXJkIGZpbGUgZGVzY3JpcHRvciBpcyBtaXNzaW5nIG9wZW4gaXQgdG8gL2Rldi9udWxsICovCit2b2lkIHNhbml0aXplX3N0ZGZkcyh2b2lkKQoreworCWludCBmZCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUiwgMCk7CisJd2hpbGUgKGZkICE9IC0xICYmIGZkIDwgMikKKwkJZmQgPSBkdXAoZmQpOworCWlmIChmZCA9PSAtMSkKKwkJZGllX2Vycm5vKF8oIm9wZW4gL2Rldi9udWxsIG9yIGR1cCBmYWlsZWQiKSk7CisJaWYgKGZkID4gMikKKwkJY2xvc2UoZmQpOworfQorCitpbnQgZGFlbW9uaXplKHZvaWQpCit7CisjaWZkZWYgTk9fUE9TSVhfR09PRElFUworCWVycm5vID0gRU5PU1lTOworCXJldHVybiAtMTsKKyNlbHNlCisJc3dpdGNoIChmb3JrKCkpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgLTE6CisJCQlkaWVfZXJybm8oXygiZm9yayBmYWlsZWQiKSk7CisJCWRlZmF1bHQ6CisJCQlleGl0KDApOworCX0KKwlpZiAoc2V0c2lkKCkgPT0gLTEpCisJCWRpZV9lcnJubyhfKCJzZXRzaWQgZmFpbGVkIikpOworCWNsb3NlKDApOworCWNsb3NlKDEpOworCWNsb3NlKDIpOworCXNhbml0aXplX3N0ZGZkcygpOworCXJldHVybiAwOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9zaC1pMThuLS1lbnZzdWJzdC5jIGIvc2gtaTE4bi0tZW52c3Vic3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzQzMGI5Ci0tLSAvZGV2L251bGwKKysrIGIvc2gtaTE4bi0tZW52c3Vic3QuYwpAQCAtMCwwICsxLDQyNyBAQAorLyoKKyAqIHNoLWkxOG4tLWVudnN1YnN0LmMgLSBhIHN0cmlwcGVkLWRvd24gdmVyc2lvbiBvZiBnZXR0ZXh0J3MgZW52c3Vic3QoMSkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24KKyAqCisgKiBUaGlzIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZgorICogNjdkMDg3MWE4YzpnZXR0ZXh0LXJ1bnRpbWUvc3JjL2VudnN1YnN0LmMgZnJvbSB0aGUgZ2V0dGV4dC5naXQKKyAqIHJlcG9zaXRvcnkuIEl0IGhhcyBiZWVuIHN0cmlwcGVkIGRvd24gdG8gb25seSBpbXBsZW1lbnQgdGhlCisgKiBlbnZzdWJzdCgxKSBmZWF0dXJlcyB0aGF0IHdlIG5lZWQgaW4gdGhlIGdpdC1zaC1pMThuIGZhbGxiYWNrcy4KKyAqCisgKiBUaGUgIkNsb3NlIHN0YW5kYXJkIGVycm9yIiBwYXJ0IGluIG1haW4oKSBpcyBmcm9tCisgKiA4ZGFjMDMzZGYwOmdudWxpYi1sb2NhbC9saWIvY2xvc2VvdXQuYy4gVGhlIGNvcHlyaWdodCBub3RpY2VzIGZvcgorICogYm90aCBmaWxlcyBhcmUgcmVwcm9kdWNlZCBpbW1lZGlhdGVseSBiZWxvdy4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAidHJhY2UyLmgiCisKKy8qIFN1YnN0aXR1dGlvbiBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gc2hlbGwgZm9ybWF0IHN0cmluZ3MuCisgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDAzLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIGNsb3Nlb3V0LmMgLSBjbG9zZSBzdGFuZGFyZCBvdXRwdXQgYW5kIHN0YW5kYXJkIGVycm9yCisgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBJZiB0cnVlLCBzdWJzdGl0dXRpb24gc2hhbGwgYmUgcGVyZm9ybWVkIG9uIGFsbCB2YXJpYWJsZXMuICAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IGludCBhbGxfdmFyaWFibGVzOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIGxvY2FsIGZ1bmN0aW9ucy4gICovCitzdGF0aWMgdm9pZCBwcmludF92YXJpYWJsZXMgKGNvbnN0IGNoYXIgKnN0cmluZyk7CitzdGF0aWMgdm9pZCBub3RlX3ZhcmlhYmxlcyAoY29uc3QgY2hhciAqc3RyaW5nKTsKK3N0YXRpYyB2b2lkIHN1YnN0X2Zyb21fc3RkaW4gKHZvaWQpOworCitpbnQKK2NtZF9tYWluIChpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQoreworICAvKiBEZWZhdWx0IHZhbHVlcyBmb3IgY29tbWFuZCBsaW5lIG9wdGlvbnMuICAqLworICAvKiB1bnNpZ25lZCBzaG9ydCBpbnQgc2hvd192YXJpYWJsZXMgPSAwOyAqLworCisgIHRyYWNlMl9jbWRfbmFtZSgic2gtaTE4bi0tZW52c3Vic3QiKTsKKworICBzd2l0Y2ggKGFyZ2MpCisJeworCWNhc2UgMToKKwkgIGVycm9yICgid2Ugd29uJ3Qgc3Vic3RpdHV0ZSBhbGwgdmFyaWFibGVzIG9uIHN0ZGluIGZvciB5b3UiKTsKKwkgIGJyZWFrOworCSAgLyoKKwkgIGFsbF92YXJpYWJsZXMgPSAxOworICAgICAgc3Vic3RfZnJvbV9zdGRpbiAoKTsKKwkgICovCisJY2FzZSAyOgorCSAgLyogZWNobyAnJGZvbyBhbmQgJGJhcicgfCBnaXQgc2gtaTE4bi0tZW52c3Vic3QgLS12YXJpYWJsZXMgJyRmb28gYW5kICRiYXInICovCisJICBhbGxfdmFyaWFibGVzID0gMDsKKwkgIG5vdGVfdmFyaWFibGVzIChhcmd2WzFdKTsKKyAgICAgIHN1YnN0X2Zyb21fc3RkaW4gKCk7CisJICBicmVhazsKKwljYXNlIDM6CisJICAvKiBnaXQgc2gtaTE4bi0tZW52c3Vic3QgLS12YXJpYWJsZXMgJyRmb28gYW5kICRiYXInICovCisJICBpZiAoc3RyY21wKGFyZ3ZbMV0sICItLXZhcmlhYmxlcyIpKQorCQllcnJvciAoImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgLS12YXJpYWJsZXMgd2hlbiB0d28gYXJlIGdpdmVuIik7CisJICAvKiBzaG93X3ZhcmlhYmxlcyA9IDE7ICovCisgICAgICBwcmludF92YXJpYWJsZXMgKGFyZ3ZbMl0pOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGVycm9yICgidG9vIG1hbnkgYXJndW1lbnRzIik7CisJICBicmVhazsKKwl9CisKKyAgLyogQ2xvc2Ugc3RhbmRhcmQgZXJyb3IuICBUaGlzIGlzIHNpbXBsZXIgdGhhbiBmd3JpdGVlcnJvcl9ub19lYmFkZiwgYmVjYXVzZQorICAgICB1cG9uIGZhaWx1cmUgd2UgZG9uJ3QgbmVlZCBhbiBlcnJubyAtIGFsbCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCBpcyB0bworICAgICBzZXQgYW4gZXhpdCBzdGF0dXMuICAqLworICBlcnJubyA9IDA7CisgIGlmIChmZXJyb3IgKHN0ZGVycikgfHwgZmZsdXNoIChzdGRlcnIpKQorICAgIHsKKyAgICAgIGZjbG9zZSAoc3RkZXJyKTsKKyAgICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7CisgICAgfQorICBpZiAoZmNsb3NlIChzdGRlcnIpICYmIGVycm5vICE9IEVCQURGKQorICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7CisKKyAgZXhpdCAoRVhJVF9TVUNDRVNTKTsKK30KKworLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgaW52b2tlIHRoZSBjYWxsYmFjayBlYWNoIHRpbWUgYSAkVkFSSUFCTEUgb3IKKyAgICR7VkFSSUFCTEV9IGNvbnN0cnVjdCBpcyBzZWVuLCB3aGVyZSBWQVJJQUJMRSBpcyBhIG5vbmVtcHR5IHNlcXVlbmNlCisgICBvZiBBU0NJSSBhbHBoYW51bWVyaWMvdW5kZXJzY29yZSBjaGFyYWN0ZXJzLCBzdGFydGluZyB3aXRoIGFuIEFTQ0lJCisgICBhbHBoYWJldGljL3VuZGVyc2NvcmUgY2hhcmFjdGVyLgorICAgV2UgYWxsb3cgb25seSBBU0NJSSBjaGFyYWN0ZXJzLCB0byBhdm9pZCBkZXBlbmRlbmNpZXMgdy5yLnQuIHRoZSBjdXJyZW50CisgICBlbmNvZGluZzogV2hpbGUgIiR7XHhlMH0iIGxvb2tzIGxpa2UgYSB2YXJpYWJsZSBhY2Nlc3MgaW4gSVNPLTg4NTktMQorICAgZW5jb2RpbmcsIGl0IGRvZXNuJ3QgbG9vayBsaWtlIG9uZSBpbiB0aGUgQklHNSwgQklHNS1IS1NDUywgR0JLLCBHQjE4MDMwLAorICAgU0hJRlRfSklTLCBKT0hBQiBlbmNvZGluZ3MsIGJlY2F1c2UgXHhlMFx4N2QgaXMgYSBzaW5nbGUgY2hhcmFjdGVyIGluIHRoZXNlCisgICBlbmNvZGluZ3MuICAqLworc3RhdGljIHZvaWQKK2ZpbmRfdmFyaWFibGVzIChjb25zdCBjaGFyICpzdHJpbmcsCisJCXZvaWQgKCpjYWxsYmFjaykgKGNvbnN0IGNoYXIgKnZhcl9wdHIsIHNpemVfdCB2YXJfbGVuKSkKK3sKKyAgZm9yICg7ICpzdHJpbmcgIT0gJ1wwJzspCisgICAgaWYgKCpzdHJpbmcrKyA9PSAnJCcpCisgICAgICB7CisJY29uc3QgY2hhciAqdmFyaWFibGVfc3RhcnQ7CisJY29uc3QgY2hhciAqdmFyaWFibGVfZW5kOworCXVuc2lnbmVkIHNob3J0IGludCB2YWxpZDsKKwljaGFyIGM7CisKKwlpZiAoKnN0cmluZyA9PSAneycpCisJICBzdHJpbmcrKzsKKworCXZhcmlhYmxlX3N0YXJ0ID0gc3RyaW5nOworCWMgPSAqc3RyaW5nOworCWlmICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6JykgfHwgYyA9PSAnXycpCisJICB7CisJICAgIGRvCisJICAgICAgYyA9ICorK3N0cmluZzsKKwkgICAgd2hpbGUgKChjID49ICdBJyAmJiBjIDw9ICdaJykgfHwgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKQorCQkgICB8fCAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8IGMgPT0gJ18nKTsKKwkgICAgdmFyaWFibGVfZW5kID0gc3RyaW5nOworCisJICAgIGlmICh2YXJpYWJsZV9zdGFydFstMV0gPT0gJ3snKQorCSAgICAgIHsKKwkJaWYgKCpzdHJpbmcgPT0gJ30nKQorCQkgIHsKKwkJICAgIHN0cmluZysrOworCQkgICAgdmFsaWQgPSAxOworCQkgIH0KKwkJZWxzZQorCQkgIHZhbGlkID0gMDsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB2YWxpZCA9IDE7CisKKwkgICAgaWYgKHZhbGlkKQorCSAgICAgIGNhbGxiYWNrICh2YXJpYWJsZV9zdGFydCwgdmFyaWFibGVfZW5kIC0gdmFyaWFibGVfc3RhcnQpOworCSAgfQorICAgICAgfQorfQorCisKKy8qIFByaW50IGEgdmFyaWFibGUgdG8gc3Rkb3V0LCBmb2xsb3dlZCBieSBhIG5ld2xpbmUuICAqLworc3RhdGljIHZvaWQKK3ByaW50X3ZhcmlhYmxlIChjb25zdCBjaGFyICp2YXJfcHRyLCBzaXplX3QgdmFyX2xlbikKK3sKKyAgZndyaXRlICh2YXJfcHRyLCB2YXJfbGVuLCAxLCBzdGRvdXQpOworICBwdXRjaGFyICgnXG4nKTsKK30KKworLyogUHJpbnQgdGhlIHZhcmlhYmxlcyBjb250YWluZWQgaW4gU1RSSU5HIHRvIHN0ZG91dCwgZWFjaCBvbmUgZm9sbG93ZWQgYnkgYQorICAgbmV3bGluZS4gICovCitzdGF0aWMgdm9pZAorcHJpbnRfdmFyaWFibGVzIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIGZpbmRfdmFyaWFibGVzIChzdHJpbmcsICZwcmludF92YXJpYWJsZSk7Cit9CisKKworLyogVHlwZSBkZXNjcmliaW5nIGxpc3Qgb2YgaW1tdXRhYmxlIHN0cmluZ3MsCisgICBpbXBsZW1lbnRlZCB1c2luZyBhIGR5bmFtaWMgYXJyYXkuICAqLwordHlwZWRlZiBzdHJ1Y3Qgc3RyaW5nX2xpc3RfdHkgc3RyaW5nX2xpc3RfdHk7CitzdHJ1Y3Qgc3RyaW5nX2xpc3RfdHkKK3sKKyAgY29uc3QgY2hhciAqKml0ZW07CisgIHNpemVfdCBuaXRlbXM7CisgIHNpemVfdCBuaXRlbXNfbWF4OworfTsKKworLyogSW5pdGlhbGl6ZSBhbiBlbXB0eSBsaXN0IG9mIHN0cmluZ3MuICAqLworc3RhdGljIGlubGluZSB2b2lkCitzdHJpbmdfbGlzdF9pbml0IChzdHJpbmdfbGlzdF90eSAqc2xwKQoreworICBzbHAtPml0ZW0gPSBOVUxMOworICBzbHAtPm5pdGVtcyA9IDA7CisgIHNscC0+bml0ZW1zX21heCA9IDA7Cit9CisKKy8qIEFwcGVuZCBhIHNpbmdsZSBzdHJpbmcgdG8gdGhlIGVuZCBvZiBhIGxpc3Qgb2Ygc3RyaW5ncy4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3N0cmluZ19saXN0X2FwcGVuZCAoc3RyaW5nX2xpc3RfdHkgKnNscCwgY29uc3QgY2hhciAqcykKK3sKKyAgLyogR3JvdyB0aGUgbGlzdC4gICovCisgIGlmIChzbHAtPm5pdGVtcyA+PSBzbHAtPm5pdGVtc19tYXgpCisgICAgeworICAgICAgc2xwLT5uaXRlbXNfbWF4ID0gc2xwLT5uaXRlbXNfbWF4ICogMiArIDQ7CisgICAgICBSRUFMTE9DX0FSUkFZKHNscC0+aXRlbSwgc2xwLT5uaXRlbXNfbWF4KTsKKyAgICB9CisKKyAgLyogQWRkIHRoZSBzdHJpbmcgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4gICovCisgIHNscC0+aXRlbVtzbHAtPm5pdGVtcysrXSA9IHM7Cit9CisKKy8qIENvbXBhcmUgdHdvIHN0cmluZ3MgZ2l2ZW4gYnkgcmVmZXJlbmNlLiAgKi8KK3N0YXRpYyBpbnQKK2NtcF9zdHJpbmcgKGNvbnN0IHZvaWQgKnBzdHIxLCBjb25zdCB2b2lkICpwc3RyMikKK3sKKyAgY29uc3QgY2hhciAqc3RyMSA9ICooY29uc3QgY2hhciAqKilwc3RyMTsKKyAgY29uc3QgY2hhciAqc3RyMiA9ICooY29uc3QgY2hhciAqKilwc3RyMjsKKworICByZXR1cm4gc3RyY21wIChzdHIxLCBzdHIyKTsKK30KKworLyogU29ydCBhIGxpc3Qgb2Ygc3RyaW5ncy4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3N0cmluZ19saXN0X3NvcnQgKHN0cmluZ19saXN0X3R5ICpzbHApCit7CisgIFFTT1JUKHNscC0+aXRlbSwgc2xwLT5uaXRlbXMsIGNtcF9zdHJpbmcpOworfQorCisvKiBUZXN0IHdoZXRoZXIgYSBzb3J0ZWQgc3RyaW5nIGxpc3QgY29udGFpbnMgYSBnaXZlbiBzdHJpbmcuICAqLworc3RhdGljIGludAorc29ydGVkX3N0cmluZ19saXN0X21lbWJlciAoY29uc3Qgc3RyaW5nX2xpc3RfdHkgKnNscCwgY29uc3QgY2hhciAqcykKK3sKKyAgc2l6ZV90IGoxLCBqMjsKKworICBqMSA9IDA7CisgIGoyID0gc2xwLT5uaXRlbXM7CisgIGlmIChqMiA+IDApCisgICAgeworICAgICAgLyogQmluYXJ5IHNlYXJjaC4gICovCisgICAgICB3aGlsZSAoajIgLSBqMSA+IDEpCisJeworCSAgLyogSGVyZSB3ZSBrbm93IHRoYXQgaWYgcyBpcyBpbiB0aGUgbGlzdCwgaXQgaXMgYXQgYW4gaW5kZXggagorCSAgICAgd2l0aCBqMSA8PSBqIDwgajIuICAqLworCSAgc2l6ZV90IGogPSBqMSArICgoajIgLSBqMSkgPj4gMSk7CisJICBpbnQgcmVzdWx0ID0gc3RyY21wIChzbHAtPml0ZW1bal0sIHMpOworCisJICBpZiAocmVzdWx0ID4gMCkKKwkgICAgajIgPSBqOworCSAgZWxzZSBpZiAocmVzdWx0ID09IDApCisJICAgIHJldHVybiAxOworCSAgZWxzZQorCSAgICBqMSA9IGogKyAxOworCX0KKyAgICAgIGlmIChqMiA+IGoxKQorCWlmIChzdHJjbXAgKHNscC0+aXRlbVtqMV0sIHMpID09IDApCisJICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworfQorCisKKy8qIFNldCBvZiB2YXJpYWJsZXMgb24gd2hpY2ggdG8gcGVyZm9ybSBzdWJzdGl0dXRpb24uCisgICBVc2VkIG9ubHkgaWYgIWFsbF92YXJpYWJsZXMuICAqLworc3RhdGljIHN0cmluZ19saXN0X3R5IHZhcmlhYmxlc19zZXQ7CisKKy8qIEFkZHMgYSB2YXJpYWJsZSB0byB2YXJpYWJsZXNfc2V0LiAgKi8KK3N0YXRpYyB2b2lkCitub3RlX3ZhcmlhYmxlIChjb25zdCBjaGFyICp2YXJfcHRyLCBzaXplX3QgdmFyX2xlbikKK3sKKyAgY2hhciAqc3RyaW5nID0geG1lbWR1cHogKHZhcl9wdHIsIHZhcl9sZW4pOworCisgIHN0cmluZ19saXN0X2FwcGVuZCAoJnZhcmlhYmxlc19zZXQsIHN0cmluZyk7Cit9CisKKy8qIFN0b3JlcyB0aGUgdmFyaWFibGVzIG9jY3VycmluZyBpbiB0aGUgc3RyaW5nIGluIHZhcmlhYmxlc19zZXQuICAqLworc3RhdGljIHZvaWQKK25vdGVfdmFyaWFibGVzIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIHN0cmluZ19saXN0X2luaXQgKCZ2YXJpYWJsZXNfc2V0KTsKKyAgZmluZF92YXJpYWJsZXMgKHN0cmluZywgJm5vdGVfdmFyaWFibGUpOworICBzdHJpbmdfbGlzdF9zb3J0ICgmdmFyaWFibGVzX3NldCk7Cit9CisKKworc3RhdGljIGludAorZG9fZ2V0YyAodm9pZCkKK3sKKyAgaW50IGMgPSBnZXRjIChzdGRpbik7CisKKyAgaWYgKGMgPT0gRU9GKQorICAgIHsKKyAgICAgIGlmIChmZXJyb3IgKHN0ZGluKSkKKwllcnJvciAoImVycm9yIHdoaWxlIHJlYWRpbmcgc3RhbmRhcmQgaW5wdXQiKTsKKyAgICB9CisKKyAgcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG9fdW5nZXRjIChpbnQgYykKK3sKKyAgaWYgKGMgIT0gRU9GKQorICAgIHVuZ2V0YyAoYywgc3RkaW4pOworfQorCisvKiBDb3BpZXMgc3RkaW4gdG8gc3Rkb3V0LCBwZXJmb3JtaW5nIHN1YnN0aXR1dGlvbnMuICAqLworc3RhdGljIHZvaWQKK3N1YnN0X2Zyb21fc3RkaW4gKHZvaWQpCit7CisgIHN0YXRpYyBjaGFyICpidWZmZXI7CisgIHN0YXRpYyBzaXplX3QgYnVmbWF4OworICBzdGF0aWMgc2l6ZV90IGJ1ZmxlbjsKKyAgaW50IGM7CisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICBjID0gZG9fZ2V0YyAoKTsKKyAgICAgIGlmIChjID09IEVPRikKKwlicmVhazsKKyAgICAgIC8qIExvb2sgZm9yICRWQVJJQUJMRSBvciAke1ZBUklBQkxFfS4gICovCisgICAgICBpZiAoYyA9PSAnJCcpCisJeworCSAgdW5zaWduZWQgc2hvcnQgaW50IG9wZW5pbmdfYnJhY2UgPSAwOworCSAgdW5zaWduZWQgc2hvcnQgaW50IGNsb3NpbmdfYnJhY2UgPSAwOworCisJICBjID0gZG9fZ2V0YyAoKTsKKwkgIGlmIChjID09ICd7JykKKwkgICAgeworCSAgICAgIG9wZW5pbmdfYnJhY2UgPSAxOworCSAgICAgIGMgPSBkb19nZXRjICgpOworCSAgICB9CisJICBpZiAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8IGMgPT0gJ18nKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgc2hvcnQgaW50IHZhbGlkOworCisJICAgICAgLyogQWNjdW11bGF0ZSB0aGUgVkFSSUFCTEUgaW4gYnVmZmVyLiAgKi8KKwkgICAgICBidWZsZW4gPSAwOworCSAgICAgIGRvCisJCXsKKwkJICBpZiAoYnVmbGVuID49IGJ1Zm1heCkKKwkJICAgIHsKKwkJICAgICAgYnVmbWF4ID0gMiAqIGJ1Zm1heCArIDEwOworCQkgICAgICBidWZmZXIgPSB4cmVhbGxvYyAoYnVmZmVyLCBidWZtYXgpOworCQkgICAgfQorCQkgIGJ1ZmZlcltidWZsZW4rK10gPSBjOworCisJCSAgYyA9IGRvX2dldGMgKCk7CisJCX0KKwkgICAgICB3aGlsZSAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpCisJCSAgICAgfHwgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB8fCBjID09ICdfJyk7CisKKwkgICAgICBpZiAob3BlbmluZ19icmFjZSkKKwkJeworCQkgIGlmIChjID09ICd9JykKKwkJICAgIHsKKwkJICAgICAgY2xvc2luZ19icmFjZSA9IDE7CisJCSAgICAgIHZhbGlkID0gMTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIHZhbGlkID0gMDsKKwkJICAgICAgZG9fdW5nZXRjIChjKTsKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHZhbGlkID0gMTsKKwkJICBkb191bmdldGMgKGMpOworCQl9CisKKwkgICAgICBpZiAodmFsaWQpCisJCXsKKwkJICAvKiBUZXJtaW5hdGUgdGhlIHZhcmlhYmxlIGluIHRoZSBidWZmZXIuICAqLworCQkgIGlmIChidWZsZW4gPj0gYnVmbWF4KQorCQkgICAgeworCQkgICAgICBidWZtYXggPSAyICogYnVmbWF4ICsgMTA7CisJCSAgICAgIGJ1ZmZlciA9IHhyZWFsbG9jIChidWZmZXIsIGJ1Zm1heCk7CisJCSAgICB9CisJCSAgYnVmZmVyW2J1Zmxlbl0gPSAnXDAnOworCisJCSAgLyogVGVzdCB3aGV0aGVyIHRoZSB2YXJpYWJsZSBzaGFsbCBiZSBzdWJzdGl0dXRlZC4gICovCisJCSAgaWYgKCFhbGxfdmFyaWFibGVzCisJCSAgICAgICYmICFzb3J0ZWRfc3RyaW5nX2xpc3RfbWVtYmVyICgmdmFyaWFibGVzX3NldCwgYnVmZmVyKSkKKwkJICAgIHZhbGlkID0gMDsKKwkJfQorCisJICAgICAgaWYgKHZhbGlkKQorCQl7CisJCSAgLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUncyB2YWx1ZSBmcm9tIHRoZSBlbnZpcm9ubWVudC4gICovCisJCSAgY29uc3QgY2hhciAqZW52X3ZhbHVlID0gZ2V0ZW52IChidWZmZXIpOworCisJCSAgaWYgKGVudl92YWx1ZSAhPSBOVUxMKQorCQkgICAgZnB1dHMgKGVudl92YWx1ZSwgc3Rkb3V0KTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIC8qIFBlcmZvcm0gbm8gc3Vic3RpdHV0aW9uIGF0IGFsbC4gIFNpbmNlIHRoZSBidWZmZXJlZCBpbnB1dAorCQkgICAgIGNvbnRhaW5zIG5vIG90aGVyICckJyB0aGFuIGF0IHRoZSBzdGFydCwgd2UgY2FuIGp1c3QKKwkJICAgICBvdXRwdXQgYWxsIHRoZSBidWZmZXJlZCBjb250ZW50cy4gICovCisJCSAgcHV0Y2hhciAoJyQnKTsKKwkJICBpZiAob3BlbmluZ19icmFjZSkKKwkJICAgIHB1dGNoYXIgKCd7Jyk7CisJCSAgZndyaXRlIChidWZmZXIsIGJ1ZmxlbiwgMSwgc3Rkb3V0KTsKKwkJICBpZiAoY2xvc2luZ19icmFjZSkKKwkJICAgIHB1dGNoYXIgKCd9Jyk7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgZG9fdW5nZXRjIChjKTsKKwkgICAgICBwdXRjaGFyICgnJCcpOworCSAgICAgIGlmIChvcGVuaW5nX2JyYWNlKQorCQlwdXRjaGFyICgneycpOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXB1dGNoYXIgKGMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NoYTEtZmlsZS5jIGIvc2hhMS1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkMzRkZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYTEtZmlsZS5jCkBAIC0wLDAgKzEsMjUzMSBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqCisgKiBUaGlzIGhhbmRsZXMgYmFzaWMgZ2l0IHNoYTEgb2JqZWN0IGZpbGVzIC0gcGFja2luZywgdW5wYWNraW5nLAorICogY3JlYXRpb24gZXRjLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwYWNrLXJldmluZGV4LmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKyNpbmNsdWRlICJidWxrLWNoZWNraW4uaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAicmVwbGFjZS1vYmplY3QuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJsaXN0LmgiCisjaW5jbHVkZSAibWVyZ2Vzb3J0LmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInByb21pc29yLXJlbW90ZS5oIgorCisvKiBUaGUgbWF4aW11bSBzaXplIGZvciBhbiBvYmplY3QgaGVhZGVyLiAqLworI2RlZmluZSBNQVhfSEVBREVSX0xFTiAzMgorCisKKyNkZWZpbmUgRU1QVFlfVFJFRV9TSEExX0JJTl9MSVRFUkFMIFwKKwkgIlx4NGJceDgyXHg1ZFx4YzZceDQyXHhjYlx4NmVceGI5XHhhMFx4NjAiIFwKKwkgIlx4ZTVceDRiXHhmOFx4ZDZceDkyXHg4OFx4ZmJceGVlXHg0OVx4MDQiCisjZGVmaW5lIEVNUFRZX1RSRUVfU0hBMjU2X0JJTl9MSVRFUkFMIFwKKwkiXHg2ZVx4ZjFceDliXHg0MVx4MjJceDVjXHg1M1x4NjlceGYxXHhjMSIgXAorCSJceDA0XHhkNFx4NWRceDhkXHg4NVx4ZWZceGE5XHhiMFx4NTdceGI1IiBcCisJIlx4M2JceDE0XHhiNFx4YjlceGI5XHgzOVx4ZGRceDc0XHhkZVx4Y2MiIFwKKwkiXHg1M1x4MjEiCisKKyNkZWZpbmUgRU1QVFlfQkxPQl9TSEExX0JJTl9MSVRFUkFMIFwKKwkiXHhlNlx4OWRceGUyXHg5Ylx4YjJceGQxXHhkNlx4NDNceDRiXHg4YiIgXAorCSJceDI5XHhhZVx4NzdceDVhXHhkOFx4YzJceGU0XHg4Y1x4NTNceDkxIgorI2RlZmluZSBFTVBUWV9CTE9CX1NIQTI1Nl9CSU5fTElURVJBTCBcCisJIlx4NDdceDNhXHgwZlx4NGNceDNiXHhlOFx4YTlceDM2XHg4MVx4YTIiIFwKKwkiXHg2N1x4ZTNceGIxXHhlOVx4YTdceGRjXHhkYVx4MTFceDg1XHg0MyIgXAorCSJceDZmXHhlMVx4NDFceGY3XHg3NFx4OTFceDIwXHhhM1x4MDNceDcyIiBcCisJIlx4MThceDEzIgorCitjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkIG51bGxfb2lkOworc3RhdGljIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgZW1wdHlfdHJlZV9vaWQgPSB7CisJRU1QVFlfVFJFRV9TSEExX0JJTl9MSVRFUkFMCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgZW1wdHlfYmxvYl9vaWQgPSB7CisJRU1QVFlfQkxPQl9TSEExX0JJTl9MSVRFUkFMCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgZW1wdHlfdHJlZV9vaWRfc2hhMjU2ID0geworCUVNUFRZX1RSRUVfU0hBMjU2X0JJTl9MSVRFUkFMCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgZW1wdHlfYmxvYl9vaWRfc2hhMjU2ID0geworCUVNUFRZX0JMT0JfU0hBMjU2X0JJTl9MSVRFUkFMCit9OworCitzdGF0aWMgdm9pZCBnaXRfaGFzaF9zaGExX2luaXQoZ2l0X2hhc2hfY3R4ICpjdHgpCit7CisJZ2l0X1NIQTFfSW5pdCgmY3R4LT5zaGExKTsKK30KKworc3RhdGljIHZvaWQgZ2l0X2hhc2hfc2hhMV9jbG9uZShnaXRfaGFzaF9jdHggKmRzdCwgY29uc3QgZ2l0X2hhc2hfY3R4ICpzcmMpCit7CisJZ2l0X1NIQTFfQ2xvbmUoJmRzdC0+c2hhMSwgJnNyYy0+c2hhMSk7Cit9CisKK3N0YXRpYyB2b2lkIGdpdF9oYXNoX3NoYTFfdXBkYXRlKGdpdF9oYXNoX2N0eCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCWdpdF9TSEExX1VwZGF0ZSgmY3R4LT5zaGExLCBkYXRhLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBnaXRfaGFzaF9zaGExX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmhhc2gsIGdpdF9oYXNoX2N0eCAqY3R4KQoreworCWdpdF9TSEExX0ZpbmFsKGhhc2gsICZjdHgtPnNoYTEpOworfQorCisKK3N0YXRpYyB2b2lkIGdpdF9oYXNoX3NoYTI1Nl9pbml0KGdpdF9oYXNoX2N0eCAqY3R4KQoreworCWdpdF9TSEEyNTZfSW5pdCgmY3R4LT5zaGEyNTYpOworfQorCitzdGF0aWMgdm9pZCBnaXRfaGFzaF9zaGEyNTZfY2xvbmUoZ2l0X2hhc2hfY3R4ICpkc3QsIGNvbnN0IGdpdF9oYXNoX2N0eCAqc3JjKQoreworCWdpdF9TSEEyNTZfQ2xvbmUoJmRzdC0+c2hhMjU2LCAmc3JjLT5zaGEyNTYpOworfQorCitzdGF0aWMgdm9pZCBnaXRfaGFzaF9zaGEyNTZfdXBkYXRlKGdpdF9oYXNoX2N0eCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCWdpdF9TSEEyNTZfVXBkYXRlKCZjdHgtPnNoYTI1NiwgZGF0YSwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgZ2l0X2hhc2hfc2hhMjU2X2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmhhc2gsIGdpdF9oYXNoX2N0eCAqY3R4KQoreworCWdpdF9TSEEyNTZfRmluYWwoaGFzaCwgJmN0eC0+c2hhMjU2KTsKK30KKworc3RhdGljIHZvaWQgZ2l0X2hhc2hfdW5rbm93bl9pbml0KGdpdF9oYXNoX2N0eCAqY3R4KQoreworCUJVRygidHJ5aW5nIHRvIGluaXQgdW5rbm93biBoYXNoIik7Cit9CisKK3N0YXRpYyB2b2lkIGdpdF9oYXNoX3Vua25vd25fY2xvbmUoZ2l0X2hhc2hfY3R4ICpkc3QsIGNvbnN0IGdpdF9oYXNoX2N0eCAqc3JjKQoreworCUJVRygidHJ5aW5nIHRvIGNsb25lIHVua25vd24gaGFzaCIpOworfQorCitzdGF0aWMgdm9pZCBnaXRfaGFzaF91bmtub3duX3VwZGF0ZShnaXRfaGFzaF9jdHggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlCVUcoInRyeWluZyB0byB1cGRhdGUgdW5rbm93biBoYXNoIik7Cit9CisKK3N0YXRpYyB2b2lkIGdpdF9oYXNoX3Vua25vd25fZmluYWwodW5zaWduZWQgY2hhciAqaGFzaCwgZ2l0X2hhc2hfY3R4ICpjdHgpCit7CisJQlVHKCJ0cnlpbmcgdG8gZmluYWxpemUgdW5rbm93biBoYXNoIik7Cit9CisKK2NvbnN0IHN0cnVjdCBnaXRfaGFzaF9hbGdvIGhhc2hfYWxnb3NbR0lUX0hBU0hfTkFMR09TXSA9IHsKKwl7CisJCU5VTEwsCisJCTB4MDAwMDAwMDAsCisJCTAsCisJCTAsCisJCTAsCisJCWdpdF9oYXNoX3Vua25vd25faW5pdCwKKwkJZ2l0X2hhc2hfdW5rbm93bl9jbG9uZSwKKwkJZ2l0X2hhc2hfdW5rbm93bl91cGRhdGUsCisJCWdpdF9oYXNoX3Vua25vd25fZmluYWwsCisJCU5VTEwsCisJCU5VTEwsCisJfSwKKwl7CisJCSJzaGExIiwKKwkJLyogInNoYTEiLCBiaWctZW5kaWFuICovCisJCTB4NzM2ODYxMzEsCisJCUdJVF9TSEExX1JBV1NaLAorCQlHSVRfU0hBMV9IRVhTWiwKKwkJR0lUX1NIQTFfQkxLU1osCisJCWdpdF9oYXNoX3NoYTFfaW5pdCwKKwkJZ2l0X2hhc2hfc2hhMV9jbG9uZSwKKwkJZ2l0X2hhc2hfc2hhMV91cGRhdGUsCisJCWdpdF9oYXNoX3NoYTFfZmluYWwsCisJCSZlbXB0eV90cmVlX29pZCwKKwkJJmVtcHR5X2Jsb2Jfb2lkLAorCX0sCisJeworCQkic2hhMjU2IiwKKwkJLyogInMyNTYiLCBiaWctZW5kaWFuICovCisJCTB4NzMzMjM1MzYsCisJCUdJVF9TSEEyNTZfUkFXU1osCisJCUdJVF9TSEEyNTZfSEVYU1osCisJCUdJVF9TSEEyNTZfQkxLU1osCisJCWdpdF9oYXNoX3NoYTI1Nl9pbml0LAorCQlnaXRfaGFzaF9zaGEyNTZfY2xvbmUsCisJCWdpdF9oYXNoX3NoYTI1Nl91cGRhdGUsCisJCWdpdF9oYXNoX3NoYTI1Nl9maW5hbCwKKwkJJmVtcHR5X3RyZWVfb2lkX3NoYTI1NiwKKwkJJmVtcHR5X2Jsb2Jfb2lkX3NoYTI1NiwKKwl9Cit9OworCitjb25zdCBjaGFyICplbXB0eV90cmVlX29pZF9oZXgodm9pZCkKK3sKKwlzdGF0aWMgY2hhciBidWZbR0lUX01BWF9IRVhTWiArIDFdOworCXJldHVybiBvaWRfdG9faGV4X3IoYnVmLCB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlKTsKK30KKworY29uc3QgY2hhciAqZW1wdHlfYmxvYl9vaWRfaGV4KHZvaWQpCit7CisJc3RhdGljIGNoYXIgYnVmW0dJVF9NQVhfSEVYU1ogKyAxXTsKKwlyZXR1cm4gb2lkX3RvX2hleF9yKGJ1ZiwgdGhlX2hhc2hfYWxnby0+ZW1wdHlfYmxvYik7Cit9CisKK2ludCBoYXNoX2FsZ29fYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCWludCBpOworCWlmICghbmFtZSkKKwkJcmV0dXJuIEdJVF9IQVNIX1VOS05PV047CisJZm9yIChpID0gMTsgaSA8IEdJVF9IQVNIX05BTEdPUzsgaSsrKQorCQlpZiAoIXN0cmNtcChuYW1lLCBoYXNoX2FsZ29zW2ldLm5hbWUpKQorCQkJcmV0dXJuIGk7CisJcmV0dXJuIEdJVF9IQVNIX1VOS05PV047Cit9CisKK2ludCBoYXNoX2FsZ29fYnlfaWQodWludDMyX3QgZm9ybWF0X2lkKQoreworCWludCBpOworCWZvciAoaSA9IDE7IGkgPCBHSVRfSEFTSF9OQUxHT1M7IGkrKykKKwkJaWYgKGZvcm1hdF9pZCA9PSBoYXNoX2FsZ29zW2ldLmZvcm1hdF9pZCkKKwkJCXJldHVybiBpOworCXJldHVybiBHSVRfSEFTSF9VTktOT1dOOworfQorCitpbnQgaGFzaF9hbGdvX2J5X2xlbmd0aChpbnQgbGVuKQoreworCWludCBpOworCWZvciAoaSA9IDE7IGkgPCBHSVRfSEFTSF9OQUxHT1M7IGkrKykKKwkJaWYgKGxlbiA9PSBoYXNoX2FsZ29zW2ldLnJhd3N6KQorCQkJcmV0dXJuIGk7CisJcmV0dXJuIEdJVF9IQVNIX1VOS05PV047Cit9CisKKy8qCisgKiBUaGlzIGlzIG1lYW50IHRvIGhvbGQgYSAqc21hbGwqIG51bWJlciBvZiBvYmplY3RzIHRoYXQgeW91IHdvdWxkCisgKiB3YW50IHJlYWRfb2JqZWN0X2ZpbGUoKSB0byBiZSBhYmxlIHRvIHJldHVybiwgYnV0IHlldCB5b3UgZG8gbm90IHdhbnQKKyAqIHRvIHdyaXRlIHRoZW0gaW50byB0aGUgb2JqZWN0IHN0b3JlIChlLmcuIGEgYnJvd3NlLW9ubHkKKyAqIGFwcGxpY2F0aW9uKS4KKyAqLworc3RhdGljIHN0cnVjdCBjYWNoZWRfb2JqZWN0IHsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdm9pZCAqYnVmOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKK30gKmNhY2hlZF9vYmplY3RzOworc3RhdGljIGludCBjYWNoZWRfb2JqZWN0X25yLCBjYWNoZWRfb2JqZWN0X2FsbG9jOworCitzdGF0aWMgc3RydWN0IGNhY2hlZF9vYmplY3QgZW1wdHlfdHJlZSA9IHsKKwl7IEVNUFRZX1RSRUVfU0hBMV9CSU5fTElURVJBTCB9LAorCU9CSl9UUkVFLAorCSIiLAorCTAKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVkX29iamVjdCAqZmluZF9jYWNoZWRfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY2FjaGVkX29iamVjdCAqY28gPSBjYWNoZWRfb2JqZWN0czsKKworCWZvciAoaSA9IDA7IGkgPCBjYWNoZWRfb2JqZWN0X25yOyBpKyssIGNvKyspIHsKKwkJaWYgKG9pZGVxKCZjby0+b2lkLCBvaWQpKQorCQkJcmV0dXJuIGNvOworCX0KKwlpZiAob2lkZXEob2lkLCB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlKSkKKwkJcmV0dXJuICZlbXB0eV90cmVlOworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyBpbnQgZ2V0X2NvbnZfZmxhZ3ModW5zaWduZWQgZmxhZ3MpCit7CisJaWYgKGZsYWdzICYgSEFTSF9SRU5PUk1BTElaRSkKKwkJcmV0dXJuIENPTlZfRU9MX1JFTk9STUFMSVpFOworCWVsc2UgaWYgKGZsYWdzICYgSEFTSF9XUklURV9PQkpFQ1QpCisJCXJldHVybiBnbG9iYWxfY29udl9mbGFnc19lb2wgfCBDT05WX1dSSVRFX09CSkVDVDsKKwllbHNlCisJCXJldHVybiAwOworfQorCisKK2ludCBta2Rpcl9pbl9naXRkaXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAobWtkaXIocGF0aCwgMDc3NykpIHsKKwkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCXN0cnVjdCBzdGF0IHN0OworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKGVycm5vICE9IEVFWElTVCkKKwkJCXJldHVybiAtMTsKKwkJLyoKKwkJICogQXJlIHdlIGxvb2tpbmcgYXQgYSBwYXRoIGluIGEgc3ltbGlua2VkIHdvcmt0cmVlCisJCSAqIHdob3NlIG9yaWdpbmFsIHJlcG9zaXRvcnkgZG9lcyBub3QgeWV0IGhhdmUgaXQ/CisJCSAqIGUuZy4gLmdpdC9yci1jYWNoZSBwb2ludGluZyBhdCBpdHMgb3JpZ2luYWwKKwkJICogcmVwb3NpdG9yeSBpbiB3aGljaCB0aGUgdXNlciBoYXNuJ3QgcGVyZm9ybWVkIGFueQorCQkgKiBjb25mbGljdCByZXNvbHV0aW9uIHlldD8KKwkJICovCisJCWlmIChsc3RhdChwYXRoLCAmc3QpIHx8ICFTX0lTTE5LKHN0LnN0X21vZGUpIHx8CisJCSAgICBzdHJidWZfcmVhZGxpbmsoJnNiLCBwYXRoLCBzdC5zdF9zaXplKSB8fAorCQkgICAgIWlzX2Fic29sdXRlX3BhdGgoc2IuYnVmKSB8fAorCQkgICAgbWtkaXIoc2IuYnVmLCAwNzc3KSkgeworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJCWVycm5vID0gc2F2ZWRfZXJybm87CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9CisJcmV0dXJuIGFkanVzdF9zaGFyZWRfcGVybShwYXRoKTsKK30KKworZW51bSBzY2xkX2Vycm9yIHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMoY2hhciAqcGF0aCkKK3sKKwljaGFyICpuZXh0X2NvbXBvbmVudCA9IHBhdGggKyBvZmZzZXRfMXN0X2NvbXBvbmVudChwYXRoKTsKKwllbnVtIHNjbGRfZXJyb3IgcmV0ID0gU0NMRF9PSzsKKworCXdoaWxlIChyZXQgPT0gU0NMRF9PSyAmJiBuZXh0X2NvbXBvbmVudCkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJY2hhciAqc2xhc2ggPSBuZXh0X2NvbXBvbmVudCwgc2xhc2hfY2hhcmFjdGVyOworCisJCXdoaWxlICgqc2xhc2ggJiYgIWlzX2Rpcl9zZXAoKnNsYXNoKSkKKwkJCXNsYXNoKys7CisKKwkJaWYgKCEqc2xhc2gpCisJCQlicmVhazsKKworCQluZXh0X2NvbXBvbmVudCA9IHNsYXNoICsgMTsKKwkJd2hpbGUgKGlzX2Rpcl9zZXAoKm5leHRfY29tcG9uZW50KSkKKwkJCW5leHRfY29tcG9uZW50Kys7CisJCWlmICghKm5leHRfY29tcG9uZW50KQorCQkJYnJlYWs7CisKKwkJc2xhc2hfY2hhcmFjdGVyID0gKnNsYXNoOworCQkqc2xhc2ggPSAnXDAnOworCQlpZiAoIXN0YXQocGF0aCwgJnN0KSkgeworCQkJLyogcGF0aCBleGlzdHMgKi8KKwkJCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJCWVycm5vID0gRU5PVERJUjsKKwkJCQlyZXQgPSBTQ0xEX0VYSVNUUzsKKwkJCX0KKwkJfSBlbHNlIGlmIChta2RpcihwYXRoLCAwNzc3KSkgeworCQkJaWYgKGVycm5vID09IEVFWElTVCAmJgorCQkJICAgICFzdGF0KHBhdGgsICZzdCkgJiYgU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCQk7IC8qIHNvbWVib2R5IGNyZWF0ZWQgaXQgc2luY2Ugd2UgY2hlY2tlZCAqLworCQkJZWxzZSBpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJCS8qCisJCQkJICogRWl0aGVyIG1rZGlyKCkgZmFpbGVkIGJlY2F1c2UKKwkJCQkgKiBzb21lYm9keSBqdXN0IHBydW5lZCB0aGUgY29udGFpbmluZworCQkJCSAqIGRpcmVjdG9yeSwgb3Igc3RhdCgpIGZhaWxlZCBiZWNhdXNlCisJCQkJICogdGhlIGZpbGUgdGhhdCB3YXMgaW4gb3VyIHdheSB3YXMKKwkJCQkgKiBqdXN0IHJlbW92ZWQuICBFaXRoZXIgd2F5LCBpbmZvcm0KKwkJCQkgKiB0aGUgY2FsbGVyIHRoYXQgaXQgbWlnaHQgYmUgd29ydGgKKwkJCQkgKiB0cnlpbmcgYWdhaW46CisJCQkJICovCisJCQkJcmV0ID0gU0NMRF9WQU5JU0hFRDsKKwkJCWVsc2UKKwkJCQlyZXQgPSBTQ0xEX0ZBSUxFRDsKKwkJfSBlbHNlIGlmIChhZGp1c3Rfc2hhcmVkX3Blcm0ocGF0aCkpIHsKKwkJCXJldCA9IFNDTERfUEVSTVM7CisJCX0KKwkJKnNsYXNoID0gc2xhc2hfY2hhcmFjdGVyOworCX0KKwlyZXR1cm4gcmV0OworfQorCitlbnVtIHNjbGRfZXJyb3Igc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChjb25zdCBjaGFyICpwYXRoKQoreworCWludCBzYXZlX2Vycm5vOworCS8qIHBhdGggcG9pbnRzIHRvIGNhY2hlIGVudHJpZXMsIHNvIHhzdHJkdXAgYmVmb3JlIG1lc3Npbmcgd2l0aCBpdCAqLworCWNoYXIgKmJ1ZiA9IHhzdHJkdXAocGF0aCk7CisJZW51bSBzY2xkX2Vycm9yIHJlc3VsdCA9IHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMoYnVmKTsKKworCXNhdmVfZXJybm8gPSBlcnJubzsKKwlmcmVlKGJ1Zik7CisJZXJybm8gPSBzYXZlX2Vycm5vOworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCByYWNlcHJvb2ZfY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY3JlYXRlX2ZpbGVfZm4gZm4sIHZvaWQgKmNiKQoreworCS8qCisJICogVGhlIG51bWJlciBvZiB0aW1lcyB3ZSB3aWxsIHRyeSB0byByZW1vdmUgZW1wdHkgZGlyZWN0b3JpZXMKKwkgKiBpbiB0aGUgd2F5IG9mIHBhdGguIFRoaXMgaXMgb25seSAxIGJlY2F1c2UgaWYgYW5vdGhlcgorCSAqIHByb2Nlc3MgaXMgcmFjaWx5IGNyZWF0aW5nIGRpcmVjdG9yaWVzIHRoYXQgY29uZmxpY3Qgd2l0aAorCSAqIHVzLCB3ZSBkb24ndCB3YW50IHRvIGZpZ2h0IGFnYWluc3QgdGhlbS4KKwkgKi8KKwlpbnQgcmVtb3ZlX2RpcmVjdG9yaWVzX3JlbWFpbmluZyA9IDE7CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB3ZSB3aWxsIHRyeSB0byBjcmVhdGUgdGhlCisJICogZGlyZWN0b3JpZXMgY29udGFpbmluZyBwYXRoLiBXZSBhcmUgd2lsbGluZyB0byBhdHRlbXB0IHRoaXMKKwkgKiBtb3JlIHRoYW4gb25jZSwgYmVjYXVzZSBhbm90aGVyIHByb2Nlc3MgY291bGQgYmUgdHJ5aW5nIHRvCisJICogY2xlYW4gdXAgZW1wdHkgZGlyZWN0b3JpZXMgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSBhcmUKKwkgKiB0cnlpbmcgdG8gY3JlYXRlIHRoZW0uCisJICovCisJaW50IGNyZWF0ZV9kaXJlY3Rvcmllc19yZW1haW5pbmcgPSAzOworCisJLyogQSBzY3JhdGNoIGNvcHkgb2YgcGF0aCwgZmlsbGVkIGxhemlseSBpZiB3ZSBuZWVkIGl0OiAqLworCXN0cnVjdCBzdHJidWYgcGF0aF9jb3B5ID0gU1RSQlVGX0lOSVQ7CisKKwlpbnQgcmV0LCBzYXZlX2Vycm5vOworCisJLyogU2FuaXR5IGNoZWNrOiAqLworCWFzc2VydCgqcGF0aCk7CisKK3JldHJ5X2ZuOgorCXJldCA9IGZuKHBhdGgsIGNiKTsKKwlzYXZlX2Vycm5vID0gZXJybm87CisJaWYgKCFyZXQpCisJCWdvdG8gb3V0OworCisJaWYgKGVycm5vID09IEVJU0RJUiAmJiByZW1vdmVfZGlyZWN0b3JpZXNfcmVtYWluaW5nLS0gPiAwKSB7CisJCS8qCisJCSAqIEEgZGlyZWN0b3J5IGlzIGluIHRoZSB3YXkuIE1heWJlIGl0IGlzIGVtcHR5OyB0cnkKKwkJICogdG8gcmVtb3ZlIGl0OgorCQkgKi8KKwkJaWYgKCFwYXRoX2NvcHkubGVuKQorCQkJc3RyYnVmX2FkZHN0cigmcGF0aF9jb3B5LCBwYXRoKTsKKworCQlpZiAoIXJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJnBhdGhfY29weSwgUkVNT1ZFX0RJUl9FTVBUWV9PTkxZKSkKKwkJCWdvdG8gcmV0cnlfZm47CisJfSBlbHNlIGlmIChlcnJubyA9PSBFTk9FTlQgJiYgY3JlYXRlX2RpcmVjdG9yaWVzX3JlbWFpbmluZy0tID4gMCkgeworCQkvKgorCQkgKiBNYXliZSB0aGUgY29udGFpbmluZyBkaXJlY3RvcnkgZGlkbid0IGV4aXN0LCBvcgorCQkgKiBtYXliZSBpdCB3YXMganVzdCBkZWxldGVkIGJ5IGEgcHJvY2VzcyB0aGF0IGlzCisJCSAqIHJhY2luZyB3aXRoIHVzIHRvIGNsZWFuIHVwIGVtcHR5IGRpcmVjdG9yaWVzLiBUcnkKKwkJICogdG8gY3JlYXRlIGl0OgorCQkgKi8KKwkJZW51bSBzY2xkX2Vycm9yIHNjbGRfcmVzdWx0OworCisJCWlmICghcGF0aF9jb3B5LmxlbikKKwkJCXN0cmJ1Zl9hZGRzdHIoJnBhdGhfY29weSwgcGF0aCk7CisKKwkJZG8geworCQkJc2NsZF9yZXN1bHQgPSBzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKHBhdGhfY29weS5idWYpOworCQkJaWYgKHNjbGRfcmVzdWx0ID09IFNDTERfT0spCisJCQkJZ290byByZXRyeV9mbjsKKwkJfSB3aGlsZSAoc2NsZF9yZXN1bHQgPT0gU0NMRF9WQU5JU0hFRCAmJiBjcmVhdGVfZGlyZWN0b3JpZXNfcmVtYWluaW5nLS0gPiAwKTsKKwl9CisKK291dDoKKwlzdHJidWZfcmVsZWFzZSgmcGF0aF9jb3B5KTsKKwllcnJubyA9IHNhdmVfZXJybm87CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZmlsbF9sb29zZV9wYXRoKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCB0aGVfaGFzaF9hbGdvLT5yYXdzejsgaSsrKSB7CisJCXN0YXRpYyBjaGFyIGhleFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiOworCQl1bnNpZ25lZCBpbnQgdmFsID0gb2lkLT5oYXNoW2ldOworCQlzdHJidWZfYWRkY2goYnVmLCBoZXhbdmFsID4+IDRdKTsKKwkJc3RyYnVmX2FkZGNoKGJ1ZiwgaGV4W3ZhbCAmIDB4Zl0pOworCQlpZiAoIWkpCisJCQlzdHJidWZfYWRkY2goYnVmLCAnLycpOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKm9kYl9sb29zZV9wYXRoKHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIsCisJCQkJICBzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJc3RyYnVmX2FkZHN0cihidWYsIG9kYi0+cGF0aCk7CisJc3RyYnVmX2FkZGNoKGJ1ZiwgJy8nKTsKKwlmaWxsX2xvb3NlX3BhdGgoYnVmLCBvaWQpOworCXJldHVybiBidWYtPmJ1ZjsKK30KKworY29uc3QgY2hhciAqbG9vc2Vfb2JqZWN0X3BhdGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gb2RiX2xvb3NlX3BhdGgoci0+b2JqZWN0cy0+b2RiLCBidWYsIG9pZCk7Cit9CisKKy8qCisgKiBSZXR1cm4gbm9uLXplcm8gaWZmIHRoZSBwYXRoIGlzIHVzYWJsZSBhcyBhbiBhbHRlcm5hdGUgb2JqZWN0IGRhdGFiYXNlLgorICovCitzdGF0aWMgaW50IGFsdF9vZGJfdXNhYmxlKHN0cnVjdCByYXdfb2JqZWN0X3N0b3JlICpvLAorCQkJICBzdHJ1Y3Qgc3RyYnVmICpwYXRoLAorCQkJICBjb25zdCBjaGFyICpub3JtYWxpemVkX29iamRpcikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiOworCisJLyogRGV0ZWN0IGNhc2VzIHdoZXJlIGFsdGVybmF0ZSBkaXNhcHBlYXJlZCAqLworCWlmICghaXNfZGlyZWN0b3J5KHBhdGgtPmJ1ZikpIHsKKwkJZXJyb3IoXygib2JqZWN0IGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdDsgIgorCQkJImNoZWNrIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiKSwKKwkJICAgICAgcGF0aC0+YnVmKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBQcmV2ZW50IHRoZSBjb21tb24gbWlzdGFrZSBvZiBsaXN0aW5nIHRoZSBzYW1lCisJICogdGhpbmcgdHdpY2UsIG9yIG9iamVjdCBkaXJlY3RvcnkgaXRzZWxmLgorCSAqLworCWZvciAob2RiID0gby0+b2RiOyBvZGI7IG9kYiA9IG9kYi0+bmV4dCkgeworCQlpZiAoIWZzcGF0aGNtcChwYXRoLT5idWYsIG9kYi0+cGF0aCkpCisJCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFmc3BhdGhjbXAocGF0aC0+YnVmLCBub3JtYWxpemVkX29iamRpcikpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBQcmVwYXJlIGFsdGVybmF0ZSBvYmplY3QgZGF0YWJhc2UgcmVnaXN0cnkuCisgKgorICogVGhlIHZhcmlhYmxlIGFsdF9vZGJfbGlzdCBwb2ludHMgYXQgdGhlIGxpc3Qgb2Ygc3RydWN0CisgKiBvYmplY3RfZGlyZWN0b3J5LiAgVGhlIGVsZW1lbnRzIG9uIHRoaXMgbGlzdCBjb21lIGZyb20KKyAqIG5vbi1lbXB0eSBlbGVtZW50cyBmcm9tIGNvbG9uIHNlcGFyYXRlZCBBTFRFUk5BVEVfREJfRU5WSVJPTk1FTlQKKyAqIGVudmlyb25tZW50IHZhcmlhYmxlLCBhbmQgJEdJVF9PQkpFQ1RfRElSRUNUT1JZL2luZm8vYWx0ZXJuYXRlcywKKyAqIHdob3NlIGNvbnRlbnRzIGlzIHNpbWlsYXIgdG8gdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSBidXQgY2FuIGJlCisgKiBMRiBzZXBhcmF0ZWQuICBJdHMgYmFzZSBwb2ludHMgYXQgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgdGhhdAorICogY29udGFpbnMgIi90aGUvZGlyZWN0b3J5L2NvcnJlc3BvbmRpbmcvdG8vLmdpdC9vYmplY3RzLy4uLiIsIHdoaWxlCisgKiBpdHMgbmFtZSBwb2ludHMganVzdCBhZnRlciB0aGUgc2xhc2ggYXQgdGhlIGVuZCBvZiAiLmdpdC9vYmplY3RzLyIKKyAqIGluIHRoZSBleGFtcGxlIGFib3ZlLCBhbmQgaGFzIGVub3VnaCBzcGFjZSB0byBob2xkIDQwLWJ5dGUgaGV4CisgKiBTSEExLCBhbiBleHRyYSBzbGFzaCBmb3IgdGhlIGZpcnN0IGxldmVsIGluZGlyZWN0aW9uLCBhbmQgdGhlCisgKiB0ZXJtaW5hdGluZyBOVUwuCisgKi8KK3N0YXRpYyB2b2lkIHJlYWRfaW5mb19hbHRlcm5hdGVzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSBjb25zdCBjaGFyICpyZWxhdGl2ZV9iYXNlLAorCQkJCSBpbnQgZGVwdGgpOworc3RhdGljIGludCBsaW5rX2FsdF9vZGJfZW50cnkoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKmVudHJ5LAorCWNvbnN0IGNoYXIgKnJlbGF0aXZlX2Jhc2UsIGludCBkZXB0aCwgY29uc3QgY2hhciAqbm9ybWFsaXplZF9vYmpkaXIpCit7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKmVudDsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGhidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghaXNfYWJzb2x1dGVfcGF0aChlbnRyeSkgJiYgcmVsYXRpdmVfYmFzZSkgeworCQlzdHJidWZfcmVhbHBhdGgoJnBhdGhidWYsIHJlbGF0aXZlX2Jhc2UsIDEpOworCQlzdHJidWZfYWRkY2goJnBhdGhidWYsICcvJyk7CisJfQorCXN0cmJ1Zl9hZGRzdHIoJnBhdGhidWYsIGVudHJ5KTsKKworCWlmIChzdHJidWZfbm9ybWFsaXplX3BhdGgoJnBhdGhidWYpIDwgMCAmJiByZWxhdGl2ZV9iYXNlKSB7CisJCWVycm9yKF8oInVuYWJsZSB0byBub3JtYWxpemUgYWx0ZXJuYXRlIG9iamVjdCBwYXRoOiAlcyIpLAorCQkgICAgICBwYXRoYnVmLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoYnVmKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogVGhlIHRyYWlsaW5nIHNsYXNoIGFmdGVyIHRoZSBkaXJlY3RvcnkgbmFtZSBpcyBnaXZlbiBieQorCSAqIHRoaXMgZnVuY3Rpb24gYXQgdGhlIGVuZC4gUmVtb3ZlIGR1cGxpY2F0ZXMuCisJICovCisJd2hpbGUgKHBhdGhidWYubGVuICYmIHBhdGhidWYuYnVmW3BhdGhidWYubGVuIC0gMV0gPT0gJy8nKQorCQlzdHJidWZfc2V0bGVuKCZwYXRoYnVmLCBwYXRoYnVmLmxlbiAtIDEpOworCisJaWYgKCFhbHRfb2RiX3VzYWJsZShyLT5vYmplY3RzLCAmcGF0aGJ1Ziwgbm9ybWFsaXplZF9vYmpkaXIpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoYnVmKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWVudCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCplbnQpKTsKKwllbnQtPnBhdGggPSB4c3RyZHVwKHBhdGhidWYuYnVmKTsKKworCS8qIGFkZCB0aGUgYWx0ZXJuYXRlIGVudHJ5ICovCisJKnItPm9iamVjdHMtPm9kYl90YWlsID0gZW50OworCXItPm9iamVjdHMtPm9kYl90YWlsID0gJihlbnQtPm5leHQpOworCWVudC0+bmV4dCA9IE5VTEw7CisKKwkvKiByZWN1cnNpdmVseSBhZGQgYWx0ZXJuYXRlcyAqLworCXJlYWRfaW5mb19hbHRlcm5hdGVzKHIsIHBhdGhidWYuYnVmLCBkZXB0aCArIDEpOworCisJc3RyYnVmX3JlbGVhc2UoJnBhdGhidWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfYWx0X29kYl9lbnRyeShjb25zdCBjaGFyICpzdHJpbmcsCisJCQkJICAgICAgIGludCBzZXAsCisJCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwljb25zdCBjaGFyICplbmQ7CisKKwlzdHJidWZfcmVzZXQob3V0KTsKKworCWlmICgqc3RyaW5nID09ICcjJykgeworCQkvKiBjb21tZW50OyBjb25zdW1lIHVwIHRvIG5leHQgc2VwYXJhdG9yICovCisJCWVuZCA9IHN0cmNocm51bChzdHJpbmcsIHNlcCk7CisJfSBlbHNlIGlmICgqc3RyaW5nID09ICciJyAmJiAhdW5xdW90ZV9jX3N0eWxlKG91dCwgc3RyaW5nLCAmZW5kKSkgeworCQkvKgorCQkgKiBxdW90ZWQgcGF0aDsgdW5xdW90ZV9jX3N0eWxlIGhhcyBjb3BpZWQgdGhlCisJCSAqIGRhdGEgZm9yIHVzIGFuZCBzZXQgImVuZCIuIEJyb2tlbiBxdW90aW5nIChlLmcuLAorCQkgKiBhbiBlbnRyeSB0aGF0IGRvZXNuJ3QgZW5kIHdpdGggYSBxdW90ZSkgZmFsbHMKKwkJICogYmFjayB0byB0aGUgdW5xdW90ZWQgY2FzZSBiZWxvdy4KKwkJICovCisJfSBlbHNlIHsKKwkJLyogbm9ybWFsLCB1bnF1b3RlZCBwYXRoICovCisJCWVuZCA9IHN0cmNocm51bChzdHJpbmcsIHNlcCk7CisJCXN0cmJ1Zl9hZGQob3V0LCBzdHJpbmcsIGVuZCAtIHN0cmluZyk7CisJfQorCisJaWYgKCplbmQpCisJCWVuZCsrOworCXJldHVybiBlbmQ7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmtfYWx0X29kYl9lbnRyaWVzKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICphbHQsCisJCQkJIGludCBzZXAsIGNvbnN0IGNoYXIgKnJlbGF0aXZlX2Jhc2UsIGludCBkZXB0aCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG9iamRpcmJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgZW50cnkgPSBTVFJCVUZfSU5JVDsKKworCWlmICghYWx0IHx8ICEqYWx0KQorCQlyZXR1cm47CisKKwlpZiAoZGVwdGggPiA1KSB7CisJCWVycm9yKF8oIiVzOiBpZ25vcmluZyBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlcywgbmVzdGluZyB0b28gZGVlcCIpLAorCQkJCXJlbGF0aXZlX2Jhc2UpOworCQlyZXR1cm47CisJfQorCisJc3RyYnVmX2FkZF9hYnNvbHV0ZV9wYXRoKCZvYmpkaXJidWYsIHItPm9iamVjdHMtPm9kYi0+cGF0aCk7CisJaWYgKHN0cmJ1Zl9ub3JtYWxpemVfcGF0aCgmb2JqZGlyYnVmKSA8IDApCisJCWRpZShfKCJ1bmFibGUgdG8gbm9ybWFsaXplIG9iamVjdCBkaXJlY3Rvcnk6ICVzIiksCisJCSAgICBvYmpkaXJidWYuYnVmKTsKKworCXdoaWxlICgqYWx0KSB7CisJCWFsdCA9IHBhcnNlX2FsdF9vZGJfZW50cnkoYWx0LCBzZXAsICZlbnRyeSk7CisJCWlmICghZW50cnkubGVuKQorCQkJY29udGludWU7CisJCWxpbmtfYWx0X29kYl9lbnRyeShyLCBlbnRyeS5idWYsCisJCQkJICAgcmVsYXRpdmVfYmFzZSwgZGVwdGgsIG9iamRpcmJ1Zi5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmZW50cnkpOworCXN0cmJ1Zl9yZWxlYXNlKCZvYmpkaXJidWYpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2luZm9fYWx0ZXJuYXRlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgY29uc3QgY2hhciAqcmVsYXRpdmVfYmFzZSwKKwkJCQkgaW50IGRlcHRoKQoreworCWNoYXIgKnBhdGg7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXBhdGggPSB4c3RyZm10KCIlcy9pbmZvL2FsdGVybmF0ZXMiLCByZWxhdGl2ZV9iYXNlKTsKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCBwYXRoLCAxMDI0KSA8IDApIHsKKwkJd2Fybl9vbl9mb3Blbl9lcnJvcnMocGF0aCk7CisJCWZyZWUocGF0aCk7CisJCXJldHVybjsKKwl9CisKKwlsaW5rX2FsdF9vZGJfZW50cmllcyhyLCBidWYuYnVmLCAnXG4nLCByZWxhdGl2ZV9iYXNlLCBkZXB0aCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJZnJlZShwYXRoKTsKK30KKwordm9pZCBhZGRfdG9fYWx0ZXJuYXRlc19maWxlKGNvbnN0IGNoYXIgKnJlZmVyZW5jZSkKK3sKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2sgPSBMT0NLX0lOSVQ7CisJY2hhciAqYWx0cyA9IGdpdF9wYXRoZHVwKCJvYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIpOworCUZJTEUgKmluLCAqb3V0OworCWludCBmb3VuZCA9IDA7CisKKwlob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2NrLCBhbHRzLCBMT0NLX0RJRV9PTl9FUlJPUik7CisJb3V0ID0gZmRvcGVuX2xvY2tfZmlsZSgmbG9jaywgInciKTsKKwlpZiAoIW91dCkKKwkJZGllX2Vycm5vKF8oInVuYWJsZSB0byBmZG9wZW4gYWx0ZXJuYXRlcyBsb2NrZmlsZSIpKTsKKworCWluID0gZm9wZW4oYWx0cywgInIiKTsKKwlpZiAoaW4pIHsKKwkJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwkJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBpbikgIT0gRU9GKSB7CisJCQlpZiAoIXN0cmNtcChyZWZlcmVuY2UsIGxpbmUuYnVmKSkgeworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWZwcmludGZfb3JfZGllKG91dCwgIiVzXG4iLCBsaW5lLmJ1Zik7CisJCX0KKworCQlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJCWZjbG9zZShpbik7CisJfQorCWVsc2UgaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJZGllX2Vycm5vKF8oInVuYWJsZSB0byByZWFkIGFsdGVybmF0ZXMgZmlsZSIpKTsKKworCWlmIChmb3VuZCkgeworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCX0gZWxzZSB7CisJCWZwcmludGZfb3JfZGllKG91dCwgIiVzXG4iLCByZWZlcmVuY2UpOworCQlpZiAoY29tbWl0X2xvY2tfZmlsZSgmbG9jaykpCisJCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIG1vdmUgbmV3IGFsdGVybmF0ZXMgZmlsZSBpbnRvIHBsYWNlIikpOworCQlpZiAodGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPmxvYWRlZF9hbHRlcm5hdGVzKQorCQkJbGlua19hbHRfb2RiX2VudHJpZXModGhlX3JlcG9zaXRvcnksIHJlZmVyZW5jZSwKKwkJCQkJICAgICAnXG4nLCBOVUxMLCAwKTsKKwl9CisJZnJlZShhbHRzKTsKK30KKwordm9pZCBhZGRfdG9fYWx0ZXJuYXRlc19tZW1vcnkoY29uc3QgY2hhciAqcmVmZXJlbmNlKQoreworCS8qCisJICogTWFrZSBzdXJlIGFsdGVybmF0ZXMgYXJlIGluaXRpYWxpemVkLCBvciBlbHNlIG91ciBlbnRyeSBtYXkgYmUKKwkgKiBvdmVyd3JpdHRlbiB3aGVuIHRoZXkgYXJlLgorCSAqLworCXByZXBhcmVfYWx0X29kYih0aGVfcmVwb3NpdG9yeSk7CisKKwlsaW5rX2FsdF9vZGJfZW50cmllcyh0aGVfcmVwb3NpdG9yeSwgcmVmZXJlbmNlLAorCQkJICAgICAnXG4nLCBOVUxMLCAwKTsKK30KKworLyoKKyAqIENvbXB1dGUgdGhlIGV4YWN0IHBhdGggYW4gYWx0ZXJuYXRlIGlzIGF0IGFuZCByZXR1cm5zIGl0LiBJbiBjYXNlIG9mCisgKiBlcnJvciBOVUxMIGlzIHJldHVybmVkIGFuZCB0aGUgaHVtYW4gcmVhZGFibGUgZXJyb3IgaXMgYWRkZWQgdG8gYGVycmAKKyAqIGBwYXRoYCBtYXkgYmUgcmVsYXRpdmUgYW5kIHNob3VsZCBwb2ludCB0byAkR0lUX0RJUi4KKyAqIGBlcnJgIG11c3Qgbm90IGJlIG51bGwuCisgKi8KK2NoYXIgKmNvbXB1dGVfYWx0ZXJuYXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWNoYXIgKnJlZl9naXQgPSBOVUxMOworCWNvbnN0IGNoYXIgKnJlcG87CisJaW50IHNlZW5fZXJyb3IgPSAwOworCisJcmVmX2dpdCA9IHJlYWxfcGF0aGR1cChwYXRoLCAwKTsKKwlpZiAoIXJlZl9naXQpIHsKKwkJc2Vlbl9lcnJvciA9IDE7CisJCXN0cmJ1Zl9hZGRmKGVyciwgXygicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IiksIHBhdGgpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXBvID0gcmVhZF9naXRmaWxlKHJlZl9naXQpOworCWlmICghcmVwbykKKwkJcmVwbyA9IHJlYWRfZ2l0ZmlsZShta3BhdGgoIiVzLy5naXQiLCByZWZfZ2l0KSk7CisJaWYgKHJlcG8pIHsKKwkJZnJlZShyZWZfZ2l0KTsKKwkJcmVmX2dpdCA9IHhzdHJkdXAocmVwbyk7CisJfQorCisJaWYgKCFyZXBvICYmIGlzX2RpcmVjdG9yeShta3BhdGgoIiVzLy5naXQvb2JqZWN0cyIsIHJlZl9naXQpKSkgeworCQljaGFyICpyZWZfZ2l0X2dpdCA9IG1rcGF0aGR1cCgiJXMvLmdpdCIsIHJlZl9naXQpOworCQlmcmVlKHJlZl9naXQpOworCQlyZWZfZ2l0ID0gcmVmX2dpdF9naXQ7CisJfSBlbHNlIGlmICghaXNfZGlyZWN0b3J5KG1rcGF0aCgiJXMvb2JqZWN0cyIsIHJlZl9naXQpKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCXNlZW5fZXJyb3IgPSAxOworCQlpZiAoZ2V0X2NvbW1vbl9kaXIoJnNiLCByZWZfZ2l0KSkgeworCQkJc3RyYnVmX2FkZGYoZXJyLAorCQkJCSAgICBfKCJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGFzIGEgbGlua2VkICIKKwkJCQkgICAgICAiY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIiksCisJCQkJICAgIHBhdGgpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlzdHJidWZfYWRkZihlcnIsIF8oInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgIgorCQkJCQkibG9jYWwgcmVwb3NpdG9yeS4iKSwgcGF0aCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghYWNjZXNzKG1rcGF0aCgiJXMvc2hhbGxvdyIsIHJlZl9naXQpLCBGX09LKSkgeworCQlzdHJidWZfYWRkZihlcnIsIF8oInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgc2hhbGxvdyIpLAorCQkJICAgIHBhdGgpOworCQlzZWVuX2Vycm9yID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFhY2Nlc3MobWtwYXRoKCIlcy9pbmZvL2dyYWZ0cyIsIHJlZl9naXQpLCBGX09LKSkgeworCQlzdHJidWZfYWRkZihlcnIsCisJCQkgICAgXygicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIiksCisJCQkgICAgcGF0aCk7CisJCXNlZW5fZXJyb3IgPSAxOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlpZiAoc2Vlbl9lcnJvcikgeworCQlGUkVFX0FORF9OVUxMKHJlZl9naXQpOworCX0KKworCXJldHVybiByZWZfZ2l0OworfQorCitzdGF0aWMgdm9pZCBmaWxsX2FsdGVybmF0ZV9yZWZzX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCwKKwkJCQkJY29uc3QgY2hhciAqcmVwb19wYXRoKQoreworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSgiY29yZS5hbHRlcm5hdGVSZWZzQ29tbWFuZCIsICZ2YWx1ZSkpIHsKKwkJY21kLT51c2Vfc2hlbGwgPSAxOworCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLT5hcmdzLCB2YWx1ZSk7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLT5hcmdzLCByZXBvX3BhdGgpOworCX0gZWxzZSB7CisJCWNtZC0+Z2l0X2NtZCA9IDE7CisKKwkJYXJndl9hcnJheV9wdXNoZigmY21kLT5hcmdzLCAiLS1naXQtZGlyPSVzIiwgcmVwb19wYXRoKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQtPmFyZ3MsICJmb3ItZWFjaC1yZWYiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQtPmFyZ3MsICItLWZvcm1hdD0lKG9iamVjdG5hbWUpIik7CisKKwkJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSgiY29yZS5hbHRlcm5hdGVSZWZzUHJlZml4ZXMiLCAmdmFsdWUpKSB7CisJCQlhcmd2X2FycmF5X3B1c2goJmNtZC0+YXJncywgIi0tIik7CisJCQlhcmd2X2FycmF5X3NwbGl0KCZjbWQtPmFyZ3MsIHZhbHVlKTsKKwkJfQorCX0KKworCWNtZC0+ZW52ID0gbG9jYWxfcmVwb19lbnY7CisJY21kLT5vdXQgPSAtMTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9hbHRlcm5hdGVfcmVmcyhjb25zdCBjaGFyICpwYXRoLAorCQkJCWFsdGVybmF0ZV9yZWZfZm4gKmNiLAorCQkJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCUZJTEUgKmZoOworCisJZmlsbF9hbHRlcm5hdGVfcmVmc19jb21tYW5kKCZjbWQsIHBhdGgpOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNtZCkpCisJCXJldHVybjsKKworCWZoID0geGZkb3BlbihjbWQub3V0LCAiciIpOworCXdoaWxlIChzdHJidWZfZ2V0bGluZV9sZigmbGluZSwgZmgpICE9IEVPRikgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJY29uc3QgY2hhciAqcDsKKworCQlpZiAocGFyc2Vfb2lkX2hleChsaW5lLmJ1ZiwgJm9pZCwgJnApIHx8ICpwKSB7CisJCQl3YXJuaW5nKF8oImludmFsaWQgbGluZSB3aGlsZSBwYXJzaW5nIGFsdGVybmF0ZSByZWZzOiAlcyIpLAorCQkJCWxpbmUuYnVmKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2IoJm9pZCwgZGF0YSk7CisJfQorCisJZmNsb3NlKGZoKTsKKwlmaW5pc2hfY29tbWFuZCgmY21kKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7Cit9CisKK3N0cnVjdCBhbHRlcm5hdGVfcmVmc19kYXRhIHsKKwlhbHRlcm5hdGVfcmVmX2ZuICpmbjsKKwl2b2lkICpkYXRhOworfTsKKworc3RhdGljIGludCByZWZzX2Zyb21fYWx0ZXJuYXRlX2NiKHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICplLAorCQkJCSAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzaXplX3QgYmFzZV9sZW47CisJc3RydWN0IGFsdGVybmF0ZV9yZWZzX2RhdGEgKmNiID0gZGF0YTsKKworCWlmICghc3RyYnVmX3JlYWxwYXRoKCZwYXRoLCBlLT5wYXRoLCAwKSkKKwkJZ290byBvdXQ7CisJaWYgKCFzdHJidWZfc3RyaXBfc3VmZml4KCZwYXRoLCAiL29iamVjdHMiKSkKKwkJZ290byBvdXQ7CisJYmFzZV9sZW4gPSBwYXRoLmxlbjsKKworCS8qIElzIHRoaXMgYSBnaXQgcmVwb3NpdG9yeSB3aXRoIHJlZnM/ICovCisJc3RyYnVmX2FkZHN0cigmcGF0aCwgIi9yZWZzIik7CisJaWYgKCFpc19kaXJlY3RvcnkocGF0aC5idWYpKQorCQlnb3RvIG91dDsKKwlzdHJidWZfc2V0bGVuKCZwYXRoLCBiYXNlX2xlbik7CisKKwlyZWFkX2FsdGVybmF0ZV9yZWZzKHBhdGguYnVmLCBjYi0+Zm4sIGNiLT5kYXRhKTsKKworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmb3JfZWFjaF9hbHRlcm5hdGVfcmVmKGFsdGVybmF0ZV9yZWZfZm4gZm4sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFsdGVybmF0ZV9yZWZzX2RhdGEgY2I7CisJY2IuZm4gPSBmbjsKKwljYi5kYXRhID0gZGF0YTsKKwlmb3JlYWNoX2FsdF9vZGIocmVmc19mcm9tX2FsdGVybmF0ZV9jYiwgJmNiKTsKK30KKworaW50IGZvcmVhY2hfYWx0X29kYihhbHRfb2RiX2ZuIGZuLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqZW50OworCWludCByID0gMDsKKworCXByZXBhcmVfYWx0X29kYih0aGVfcmVwb3NpdG9yeSk7CisJZm9yIChlbnQgPSB0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cy0+b2RiLT5uZXh0OyBlbnQ7IGVudCA9IGVudC0+bmV4dCkgeworCQlyID0gZm4oZW50LCBjYik7CisJCWlmIChyKQorCQkJYnJlYWs7CisJfQorCXJldHVybiByOworfQorCit2b2lkIHByZXBhcmVfYWx0X29kYihzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlpZiAoci0+b2JqZWN0cy0+bG9hZGVkX2FsdGVybmF0ZXMpCisJCXJldHVybjsKKworCWxpbmtfYWx0X29kYl9lbnRyaWVzKHIsIHItPm9iamVjdHMtPmFsdGVybmF0ZV9kYiwgUEFUSF9TRVAsIE5VTEwsIDApOworCisJcmVhZF9pbmZvX2FsdGVybmF0ZXMociwgci0+b2JqZWN0cy0+b2RiLT5wYXRoLCAwKTsKKwlyLT5vYmplY3RzLT5sb2FkZWRfYWx0ZXJuYXRlcyA9IDE7Cit9CisKKy8qIFJldHVybnMgMSBpZiB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBmcmVzaGVuZWQgdGhlIGZpbGUsIDAgb3RoZXJ3aXNlLiAqLworc3RhdGljIGludCBmcmVzaGVuX2ZpbGUoY29uc3QgY2hhciAqZm4pCit7CisJcmV0dXJuICF1dGltZShmbiwgTlVMTCk7Cit9CisKKy8qCisgKiBBbGwgb2YgdGhlIGNoZWNrX2FuZF9mcmVzaGVuIGZ1bmN0aW9ucyByZXR1cm4gMSBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIHdhcworICogZnJlc2hlbmVkIChpZiBmcmVzaGVuaW5nIHdhcyByZXF1ZXN0ZWQpLCAwIG90aGVyd2lzZS4gSWYgdGhleSByZXR1cm4KKyAqIDAsIHlvdSBzaG91bGQgbm90IGFzc3VtZSB0aGF0IGl0IGlzIHNhZmUgdG8gc2tpcCBhIHdyaXRlIG9mIHRoZSBvYmplY3QgKGl0CisgKiBlaXRoZXIgZG9lcyBub3QgZXhpc3Qgb24gZGlzaywgb3IgaGFzIGEgc3RhbGUgbXRpbWUgYW5kIG1heSBiZSBzdWJqZWN0IHRvCisgKiBwcnVuaW5nKS4KKyAqLworaW50IGNoZWNrX2FuZF9mcmVzaGVuX2ZpbGUoY29uc3QgY2hhciAqZm4sIGludCBmcmVzaGVuKQoreworCWlmIChhY2Nlc3MoZm4sIEZfT0spKQorCQlyZXR1cm4gMDsKKwlpZiAoZnJlc2hlbiAmJiAhZnJlc2hlbl9maWxlKGZuKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfYW5kX2ZyZXNoZW5fb2RiKHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIsCisJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgaW50IGZyZXNoZW4pCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCW9kYl9sb29zZV9wYXRoKG9kYiwgJnBhdGgsIG9pZCk7CisJcmV0dXJuIGNoZWNrX2FuZF9mcmVzaGVuX2ZpbGUocGF0aC5idWYsIGZyZXNoZW4pOworfQorCitzdGF0aWMgaW50IGNoZWNrX2FuZF9mcmVzaGVuX2xvY2FsKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZyZXNoZW4pCit7CisJcmV0dXJuIGNoZWNrX2FuZF9mcmVzaGVuX29kYih0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cy0+b2RiLCBvaWQsIGZyZXNoZW4pOworfQorCitzdGF0aWMgaW50IGNoZWNrX2FuZF9mcmVzaGVuX25vbmxvY2FsKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZyZXNoZW4pCit7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYjsKKworCXByZXBhcmVfYWx0X29kYih0aGVfcmVwb3NpdG9yeSk7CisJZm9yIChvZGIgPSB0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cy0+b2RiLT5uZXh0OyBvZGI7IG9kYiA9IG9kYi0+bmV4dCkgeworCQlpZiAoY2hlY2tfYW5kX2ZyZXNoZW5fb2RiKG9kYiwgb2lkLCBmcmVzaGVuKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19hbmRfZnJlc2hlbihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmcmVzaGVuKQoreworCXJldHVybiBjaGVja19hbmRfZnJlc2hlbl9sb2NhbChvaWQsIGZyZXNoZW4pIHx8CisJICAgICAgIGNoZWNrX2FuZF9mcmVzaGVuX25vbmxvY2FsKG9pZCwgZnJlc2hlbik7Cit9CisKK2ludCBoYXNfbG9vc2Vfb2JqZWN0X25vbmxvY2FsKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gY2hlY2tfYW5kX2ZyZXNoZW5fbm9ubG9jYWwob2lkLCAwKTsKK30KKworc3RhdGljIGludCBoYXNfbG9vc2Vfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gY2hlY2tfYW5kX2ZyZXNoZW4ob2lkLCAwKTsKK30KKworc3RhdGljIHZvaWQgbW1hcF9saW1pdF9jaGVjayhzaXplX3QgbGVuZ3RoKQoreworCXN0YXRpYyBzaXplX3QgbGltaXQgPSAwOworCWlmICghbGltaXQpIHsKKwkJbGltaXQgPSBnaXRfZW52X3Vsb25nKCJHSVRfTU1BUF9MSU1JVCIsIDApOworCQlpZiAoIWxpbWl0KQorCQkJbGltaXQgPSBTSVpFX01BWDsKKwl9CisJaWYgKGxlbmd0aCA+IGxpbWl0KQorCQlkaWUoXygiYXR0ZW1wdGluZyB0byBtbWFwICUiUFJJdU1BWCIgb3ZlciBsaW1pdCAlIlBSSXVNQVgpLAorCQkgICAgKHVpbnRtYXhfdClsZW5ndGgsICh1aW50bWF4X3QpbGltaXQpOworfQorCit2b2lkICp4bW1hcF9nZW50bHkodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsCisJCSAgaW50IHByb3QsIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpCit7CisJdm9pZCAqcmV0OworCisJbW1hcF9saW1pdF9jaGVjayhsZW5ndGgpOworCXJldCA9IG1tYXAoc3RhcnQsIGxlbmd0aCwgcHJvdCwgZmxhZ3MsIGZkLCBvZmZzZXQpOworCWlmIChyZXQgPT0gTUFQX0ZBSUxFRCAmJiAhbGVuZ3RoKQorCQlyZXQgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgKnhtbWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoLAorCWludCBwcm90LCBpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2Zmc2V0KQoreworCXZvaWQgKnJldCA9IHhtbWFwX2dlbnRseShzdGFydCwgbGVuZ3RoLCBwcm90LCBmbGFncywgZmQsIG9mZnNldCk7CisJaWYgKHJldCA9PSBNQVBfRkFJTEVEKQorCQlkaWVfZXJybm8oXygibW1hcCBmYWlsZWQiKSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFdpdGggYW4gaW4tY29yZSBvYmplY3QgZGF0YSBpbiAibWFwIiwgcmVoYXNoIGl0IHRvIG1ha2Ugc3VyZSB0aGUKKyAqIG9iamVjdCBuYW1lIGFjdHVhbGx5IG1hdGNoZXMgIm9pZCIgdG8gZGV0ZWN0IG9iamVjdCBjb3JydXB0aW9uLgorICogV2l0aCAibWFwIiA9PSBOVUxMLCB0cnkgcmVhZGluZyB0aGUgb2JqZWN0IG5hbWVkIHdpdGggIm9pZCIgdXNpbmcKKyAqIHRoZSBzdHJlYW1pbmcgaW50ZXJmYWNlIGFuZCByZWhhc2ggaXQgdG8gZG8gdGhlIHNhbWUuCisgKi8KK2ludCBjaGVja19vYmplY3Rfc2lnbmF0dXJlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICB2b2lkICptYXAsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqdHlwZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHJlYWxfb2lkOworCWVudW0gb2JqZWN0X3R5cGUgb2JqX3R5cGU7CisJc3RydWN0IGdpdF9pc3RyZWFtICpzdDsKKwlnaXRfaGFzaF9jdHggYzsKKwljaGFyIGhkcltNQVhfSEVBREVSX0xFTl07CisJaW50IGhkcmxlbjsKKworCWlmIChtYXApIHsKKwkJaGFzaF9vYmplY3RfZmlsZShyLT5oYXNoX2FsZ28sIG1hcCwgc2l6ZSwgdHlwZSwgJnJlYWxfb2lkKTsKKwkJcmV0dXJuICFvaWRlcShvaWQsICZyZWFsX29pZCkgPyAtMSA6IDA7CisJfQorCisJc3QgPSBvcGVuX2lzdHJlYW0ociwgb2lkLCAmb2JqX3R5cGUsICZzaXplLCBOVUxMKTsKKwlpZiAoIXN0KQorCQlyZXR1cm4gLTE7CisKKwkvKiBHZW5lcmF0ZSB0aGUgaGVhZGVyICovCisJaGRybGVuID0geHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksICIlcyAlIlBSSXVNQVggLCB0eXBlX25hbWUob2JqX3R5cGUpLCAodWludG1heF90KXNpemUpICsgMTsKKworCS8qIFNoYTEuLiAqLworCXItPmhhc2hfYWxnby0+aW5pdF9mbigmYyk7CisJci0+aGFzaF9hbGdvLT51cGRhdGVfZm4oJmMsIGhkciwgaGRybGVuKTsKKwlmb3IgKDs7KSB7CisJCWNoYXIgYnVmWzEwMjQgKiAxNl07CisJCXNzaXplX3QgcmVhZGxlbiA9IHJlYWRfaXN0cmVhbShzdCwgYnVmLCBzaXplb2YoYnVmKSk7CisKKwkJaWYgKHJlYWRsZW4gPCAwKSB7CisJCQljbG9zZV9pc3RyZWFtKHN0KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoIXJlYWRsZW4pCisJCQlicmVhazsKKwkJci0+aGFzaF9hbGdvLT51cGRhdGVfZm4oJmMsIGJ1ZiwgcmVhZGxlbik7CisJfQorCXItPmhhc2hfYWxnby0+ZmluYWxfZm4ocmVhbF9vaWQuaGFzaCwgJmMpOworCWNsb3NlX2lzdHJlYW0oc3QpOworCXJldHVybiAhb2lkZXEob2lkLCAmcmVhbF9vaWQpID8gLTEgOiAwOworfQorCitpbnQgZ2l0X29wZW5fY2xvZXhlYyhjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpCit7CisJaW50IGZkOworCXN0YXRpYyBpbnQgb19jbG9leGVjID0gT19DTE9FWEVDOworCisJZmQgPSBvcGVuKG5hbWUsIGZsYWdzIHwgb19jbG9leGVjKTsKKwlpZiAoKG9fY2xvZXhlYyAmIE9fQ0xPRVhFQykgJiYgZmQgPCAwICYmIGVycm5vID09IEVJTlZBTCkgeworCQkvKiBUcnkgYWdhaW4gdy9vIE9fQ0xPRVhFQzogdGhlIGtlcm5lbCBtaWdodCBub3Qgc3VwcG9ydCBpdCAqLworCQlvX2Nsb2V4ZWMgJj0gfk9fQ0xPRVhFQzsKKwkJZmQgPSBvcGVuKG5hbWUsIGZsYWdzIHwgb19jbG9leGVjKTsKKwl9CisKKyNpZiBkZWZpbmVkKEZfR0VURkQpICYmIGRlZmluZWQoRl9TRVRGRCkgJiYgZGVmaW5lZChGRF9DTE9FWEVDKQorCXsKKwkJc3RhdGljIGludCBmZF9jbG9leGVjID0gRkRfQ0xPRVhFQzsKKworCQlpZiAoIW9fY2xvZXhlYyAmJiAwIDw9IGZkICYmIGZkX2Nsb2V4ZWMpIHsKKwkJCS8qIE9wZW5lZCB3L28gT19DTE9FWEVDPyAgdHJ5IHdpdGggZmNudGwoMikgdG8gYWRkIGl0ICovCisJCQlpbnQgZmxhZ3MgPSBmY250bChmZCwgRl9HRVRGRCk7CisJCQlpZiAoZmNudGwoZmQsIEZfU0VURkQsIGZsYWdzIHwgZmRfY2xvZXhlYykpCisJCQkJZmRfY2xvZXhlYyA9IDA7CisJCX0KKwl9CisjZW5kaWYKKwlyZXR1cm4gZmQ7Cit9CisKKy8qCisgKiBGaW5kICJvaWQiIGFzIGEgbG9vc2Ugb2JqZWN0IGluIHRoZSBsb2NhbCByZXBvc2l0b3J5IG9yIGluIGFuIGFsdGVybmF0ZS4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlLgorICoKKyAqIFRoZSAicGF0aCIgb3V0LXBhcmFtZXRlciB3aWxsIGdpdmUgdGhlIHBhdGggb2YgdGhlIG9iamVjdCB3ZSBmb3VuZCAoaWYgYW55KS4KKyAqIE5vdGUgdGhhdCBpdCBtYXkgcG9pbnQgdG8gc3RhdGljIHN0b3JhZ2UgYW5kIGlzIG9ubHkgdmFsaWQgdW50aWwgYW5vdGhlcgorICogY2FsbCB0byBzdGF0X2xvb3NlX29iamVjdCgpLgorICovCitzdGF0aWMgaW50IHN0YXRfbG9vc2Vfb2JqZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgIHN0cnVjdCBzdGF0ICpzdCwgY29uc3QgY2hhciAqKnBhdGgpCit7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYjsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXByZXBhcmVfYWx0X29kYihyKTsKKwlmb3IgKG9kYiA9IHItPm9iamVjdHMtPm9kYjsgb2RiOyBvZGIgPSBvZGItPm5leHQpIHsKKwkJKnBhdGggPSBvZGJfbG9vc2VfcGF0aChvZGIsICZidWYsIG9pZCk7CisJCWlmICghbHN0YXQoKnBhdGgsIHN0KSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIExpa2Ugc3RhdF9sb29zZV9vYmplY3QoKSwgYnV0IGFjdHVhbGx5IG9wZW4gdGhlIG9iamVjdCBhbmQgcmV0dXJuIHRoZQorICogZGVzY3JpcHRvci4gU2VlIHRoZSBjYXZlYXRzIG9uIHRoZSAicGF0aCIgcGFyYW1ldGVyIGFib3ZlLgorICovCitzdGF0aWMgaW50IG9wZW5fbG9vc2Vfb2JqZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKipwYXRoKQoreworCWludCBmZDsKKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiOworCWludCBtb3N0X2ludGVyZXN0aW5nX2Vycm5vID0gRU5PRU5UOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJcHJlcGFyZV9hbHRfb2RiKHIpOworCWZvciAob2RiID0gci0+b2JqZWN0cy0+b2RiOyBvZGI7IG9kYiA9IG9kYi0+bmV4dCkgeworCQkqcGF0aCA9IG9kYl9sb29zZV9wYXRoKG9kYiwgJmJ1Ziwgb2lkKTsKKwkJZmQgPSBnaXRfb3BlbigqcGF0aCk7CisJCWlmIChmZCA+PSAwKQorCQkJcmV0dXJuIGZkOworCisJCWlmIChtb3N0X2ludGVyZXN0aW5nX2Vycm5vID09IEVOT0VOVCkKKwkJCW1vc3RfaW50ZXJlc3RpbmdfZXJybm8gPSBlcnJubzsKKwl9CisJZXJybm8gPSBtb3N0X2ludGVyZXN0aW5nX2Vycm5vOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBxdWlja19oYXNfbG9vc2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYjsKKworCXByZXBhcmVfYWx0X29kYihyKTsKKwlmb3IgKG9kYiA9IHItPm9iamVjdHMtPm9kYjsgb2RiOyBvZGIgPSBvZGItPm5leHQpIHsKKwkJaWYgKG9pZF9hcnJheV9sb29rdXAob2RiX2xvb3NlX2NhY2hlKG9kYiwgb2lkKSwgb2lkKSA+PSAwKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogTWFwIHRoZSBsb29zZSBvYmplY3QgYXQgInBhdGgiIGlmIGl0IGlzIG5vdCBOVUxMLCBvciB0aGUgcGF0aCBmb3VuZCBieQorICogc2VhcmNoaW5nIGZvciBhIGxvb3NlIG9iamVjdCBuYW1lZCAib2lkIi4KKyAqLworc3RhdGljIHZvaWQgKm1hcF9sb29zZV9vYmplY3RfMShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXZvaWQgKm1hcDsKKwlpbnQgZmQ7CisKKwlpZiAocGF0aCkKKwkJZmQgPSBnaXRfb3BlbihwYXRoKTsKKwllbHNlCisJCWZkID0gb3Blbl9sb29zZV9vYmplY3Qociwgb2lkLCAmcGF0aCk7CisJbWFwID0gTlVMTDsKKwlpZiAoZmQgPj0gMCkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQlpZiAoIWZzdGF0KGZkLCAmc3QpKSB7CisJCQkqc2l6ZSA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisJCQlpZiAoISpzaXplKSB7CisJCQkJLyogbW1hcCgpIGlzIGZvcmJpZGRlbiBvbiBlbXB0eSBmaWxlcyAqLworCQkJCWVycm9yKF8oIm9iamVjdCBmaWxlICVzIGlzIGVtcHR5IiksIHBhdGgpOworCQkJCWNsb3NlKGZkKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCW1hcCA9IHhtbWFwKE5VTEwsICpzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJCX0KKwkJY2xvc2UoZmQpOworCX0KKwlyZXR1cm4gbWFwOworfQorCit2b2lkICptYXBfbG9vc2Vfb2JqZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwlyZXR1cm4gbWFwX2xvb3NlX29iamVjdF8xKHIsIE5VTEwsIG9pZCwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgdW5wYWNrX2xvb3NlX3Nob3J0X2hlYWRlcihnaXRfenN0cmVhbSAqc3RyZWFtLAorCQkJCSAgICAgdW5zaWduZWQgY2hhciAqbWFwLCB1bnNpZ25lZCBsb25nIG1hcHNpemUsCisJCQkJICAgICB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgYnVmc2l6KQoreworCWludCByZXQ7CisKKwkvKiBHZXQgdGhlIGRhdGEgc3RyZWFtICovCisJbWVtc2V0KHN0cmVhbSwgMCwgc2l6ZW9mKCpzdHJlYW0pKTsKKwlzdHJlYW0tPm5leHRfaW4gPSBtYXA7CisJc3RyZWFtLT5hdmFpbF9pbiA9IG1hcHNpemU7CisJc3RyZWFtLT5uZXh0X291dCA9IGJ1ZmZlcjsKKwlzdHJlYW0tPmF2YWlsX291dCA9IGJ1ZnNpejsKKworCWdpdF9pbmZsYXRlX2luaXQoc3RyZWFtKTsKKwlvYmpfcmVhZF91bmxvY2soKTsKKwlyZXQgPSBnaXRfaW5mbGF0ZShzdHJlYW0sIDApOworCW9ial9yZWFkX2xvY2soKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB1bnBhY2tfbG9vc2VfaGVhZGVyKGdpdF96c3RyZWFtICpzdHJlYW0sCisJCQl1bnNpZ25lZCBjaGFyICptYXAsIHVuc2lnbmVkIGxvbmcgbWFwc2l6ZSwKKwkJCXZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBidWZzaXopCit7CisJaW50IHN0YXR1cyA9IHVucGFja19sb29zZV9zaG9ydF9oZWFkZXIoc3RyZWFtLCBtYXAsIG1hcHNpemUsCisJCQkJCSAgICAgICBidWZmZXIsIGJ1ZnNpeik7CisKKwlpZiAoc3RhdHVzIDwgWl9PSykKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSB0ZXJtaW5hdGluZyBOVUwgKi8KKwlpZiAoIW1lbWNocihidWZmZXIsICdcMCcsIHN0cmVhbS0+bmV4dF9vdXQgLSAodW5zaWduZWQgY2hhciAqKWJ1ZmZlcikpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1bnBhY2tfbG9vc2VfaGVhZGVyX3RvX3N0cmJ1ZihnaXRfenN0cmVhbSAqc3RyZWFtLCB1bnNpZ25lZCBjaGFyICptYXAsCisJCQkJCSB1bnNpZ25lZCBsb25nIG1hcHNpemUsIHZvaWQgKmJ1ZmZlciwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYnVmc2l6LCBzdHJ1Y3Qgc3RyYnVmICpoZWFkZXIpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHVucGFja19sb29zZV9zaG9ydF9oZWFkZXIoc3RyZWFtLCBtYXAsIG1hcHNpemUsIGJ1ZmZlciwgYnVmc2l6KTsKKwlpZiAoc3RhdHVzIDwgWl9PSykKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBDaGVjayBpZiBlbnRpcmUgaGVhZGVyIGlzIHVucGFja2VkIGluIHRoZSBmaXJzdCBpdGVyYXRpb24uCisJICovCisJaWYgKG1lbWNocihidWZmZXIsICdcMCcsIHN0cmVhbS0+bmV4dF9vdXQgLSAodW5zaWduZWQgY2hhciAqKWJ1ZmZlcikpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBidWZmZXJbMC4uYnVmc2l6XSB3YXMgbm90IGxhcmdlIGVub3VnaC4gIENvcHkgdGhlIHBhcnRpYWwKKwkgKiByZXN1bHQgb3V0IHRvIGhlYWRlciwgYW5kIHRoZW4gYXBwZW5kIHRoZSByZXN1bHQgb2YgZnVydGhlcgorCSAqIHJlYWRpbmcgdGhlIHN0cmVhbS4KKwkgKi8KKwlzdHJidWZfYWRkKGhlYWRlciwgYnVmZmVyLCBzdHJlYW0tPm5leHRfb3V0IC0gKHVuc2lnbmVkIGNoYXIgKilidWZmZXIpOworCXN0cmVhbS0+bmV4dF9vdXQgPSBidWZmZXI7CisJc3RyZWFtLT5hdmFpbF9vdXQgPSBidWZzaXo7CisKKwlkbyB7CisJCW9ial9yZWFkX3VubG9jaygpOworCQlzdGF0dXMgPSBnaXRfaW5mbGF0ZShzdHJlYW0sIDApOworCQlvYmpfcmVhZF9sb2NrKCk7CisJCXN0cmJ1Zl9hZGQoaGVhZGVyLCBidWZmZXIsIHN0cmVhbS0+bmV4dF9vdXQgLSAodW5zaWduZWQgY2hhciAqKWJ1ZmZlcik7CisJCWlmIChtZW1jaHIoYnVmZmVyLCAnXDAnLCBzdHJlYW0tPm5leHRfb3V0IC0gKHVuc2lnbmVkIGNoYXIgKilidWZmZXIpKQorCQkJcmV0dXJuIDA7CisJCXN0cmVhbS0+bmV4dF9vdXQgPSBidWZmZXI7CisJCXN0cmVhbS0+YXZhaWxfb3V0ID0gYnVmc2l6OworCX0gd2hpbGUgKHN0YXR1cyAhPSBaX1NUUkVBTV9FTkQpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgKnVucGFja19sb29zZV9yZXN0KGdpdF96c3RyZWFtICpzdHJlYW0sCisJCQkgICAgICAgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWludCBieXRlcyA9IHN0cmxlbihidWZmZXIpICsgMTsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSB4bWFsbG9jeihzaXplKTsKKwl1bnNpZ25lZCBsb25nIG47CisJaW50IHN0YXR1cyA9IFpfT0s7CisKKwluID0gc3RyZWFtLT50b3RhbF9vdXQgLSBieXRlczsKKwlpZiAobiA+IHNpemUpCisJCW4gPSBzaXplOworCW1lbWNweShidWYsIChjaGFyICopIGJ1ZmZlciArIGJ5dGVzLCBuKTsKKwlieXRlcyA9IG47CisJaWYgKGJ5dGVzIDw9IHNpemUpIHsKKwkJLyoKKwkJICogVGhlIGFib3ZlIGNvbmRpdGlvbiBtdXN0IGJlIChieXRlcyA8PSBzaXplKSwgbm90CisJCSAqIChieXRlcyA8IHNpemUpLiAgSW4gb3RoZXIgd29yZHMsIGV2ZW4gdGhvdWdoIHdlCisJCSAqIGV4cGVjdCBubyBtb3JlIG91dHB1dCBhbmQgc2V0IGF2YWlsX291dCB0byB6ZXJvLAorCQkgKiB0aGUgaW5wdXQgemxpYiBzdHJlYW0gbWF5IGhhdmUgYnl0ZXMgdGhhdCBleHByZXNzCisJCSAqICJ0aGlzIGNvbmNsdWRlcyB0aGUgc3RyZWFtIiwgYW5kIHdlICpkbyogd2FudCB0bworCQkgKiBlYXQgdGhhdCBpbnB1dC4KKwkJICoKKwkJICogT3RoZXJ3aXNlIHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIHRlc3QgdGhhdCB3ZQorCQkgKiBjb25zdW1lZCBhbGwgdGhlIGlucHV0IHRvIHJlYWNoIHRoZSBleHBlY3RlZCBzaXplOworCQkgKiB3ZSBhbHNvIHdhbnQgdG8gY2hlY2sgdGhhdCB6bGliIHRlbGxzIHVzIHRoYXQgYWxsCisJCSAqIHdlbnQgd2VsbCB3aXRoIHN0YXR1cyA9PSBaX1NUUkVBTV9FTkQgYXQgdGhlIGVuZC4KKwkJICovCisJCXN0cmVhbS0+bmV4dF9vdXQgPSBidWYgKyBieXRlczsKKwkJc3RyZWFtLT5hdmFpbF9vdXQgPSBzaXplIC0gYnl0ZXM7CisJCXdoaWxlIChzdGF0dXMgPT0gWl9PSykgeworCQkJb2JqX3JlYWRfdW5sb2NrKCk7CisJCQlzdGF0dXMgPSBnaXRfaW5mbGF0ZShzdHJlYW0sIFpfRklOSVNIKTsKKwkJCW9ial9yZWFkX2xvY2soKTsKKwkJfQorCX0KKwlpZiAoc3RhdHVzID09IFpfU1RSRUFNX0VORCAmJiAhc3RyZWFtLT5hdmFpbF9pbikgeworCQlnaXRfaW5mbGF0ZV9lbmQoc3RyZWFtKTsKKwkJcmV0dXJuIGJ1ZjsKKwl9CisKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZXJyb3IoXygiY29ycnVwdCBsb29zZSBvYmplY3QgJyVzJyIpLCBvaWRfdG9faGV4KG9pZCkpOworCWVsc2UgaWYgKHN0cmVhbS0+YXZhaWxfaW4pCisJCWVycm9yKF8oImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIiksCisJCSAgICAgIG9pZF90b19oZXgob2lkKSk7CisJZnJlZShidWYpOworCXJldHVybiBOVUxMOworfQorCisvKgorICogV2UgdXNlZCB0byBqdXN0IHVzZSAic3NjYW5mKCkiLCBidXQgdGhhdCdzIGFjdHVhbGx5IHdheQorICogdG9vIHBlcm1pc3NpdmUgZm9yIHdoYXQgd2Ugd2FudCB0byBjaGVjay4gU28gZG8gYW4gYW5hbAorICogb2JqZWN0IGhlYWRlciBwYXJzZSBieSBoYW5kLgorICovCitzdGF0aWMgaW50IHBhcnNlX2xvb3NlX2hlYWRlcl9leHRlbmRlZChjb25zdCBjaGFyICpoZHIsIHN0cnVjdCBvYmplY3RfaW5mbyAqb2ksCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwljb25zdCBjaGFyICp0eXBlX2J1ZiA9IGhkcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IHR5cGUsIHR5cGVfbGVuID0gMDsKKworCS8qCisJICogVGhlIHR5cGUgY2FuIGJlIG9mIGFueSBzaXplIGJ1dCBpcyBmb2xsb3dlZCBieQorCSAqIGEgc3BhY2UuCisJICovCisJZm9yICg7OykgeworCQljaGFyIGMgPSAqaGRyKys7CisJCWlmICghYykKKwkJCXJldHVybiAtMTsKKwkJaWYgKGMgPT0gJyAnKQorCQkJYnJlYWs7CisJCXR5cGVfbGVuKys7CisJfQorCisJdHlwZSA9IHR5cGVfZnJvbV9zdHJpbmdfZ2VudGx5KHR5cGVfYnVmLCB0eXBlX2xlbiwgMSk7CisJaWYgKG9pLT50eXBlX25hbWUpCisJCXN0cmJ1Zl9hZGQob2ktPnR5cGVfbmFtZSwgdHlwZV9idWYsIHR5cGVfbGVuKTsKKwkvKgorCSAqIFNldCB0eXBlIHRvIDAgaWYgaXRzIGFuIHVua25vd24gb2JqZWN0IGFuZAorCSAqIHdlJ3JlIG9idGFpbmluZyB0aGUgdHlwZSB1c2luZyAnLS1hbGxvdy11bmtub3duLXR5cGUnCisJICogb3B0aW9uLgorCSAqLworCWlmICgoZmxhZ3MgJiBPQkpFQ1RfSU5GT19BTExPV19VTktOT1dOX1RZUEUpICYmICh0eXBlIDwgMCkpCisJCXR5cGUgPSAwOworCWVsc2UgaWYgKHR5cGUgPCAwKQorCQlkaWUoXygiaW52YWxpZCBvYmplY3QgdHlwZSIpKTsKKwlpZiAob2ktPnR5cGVwKQorCQkqb2ktPnR5cGVwID0gdHlwZTsKKworCS8qCisJICogVGhlIGxlbmd0aCBtdXN0IGZvbGxvdyBpbW1lZGlhdGVseSwgYW5kIGJlIGluIGNhbm9uaWNhbAorCSAqIGRlY2ltYWwgZm9ybWF0IChpZSAiMDEwIiBpcyBub3QgdmFsaWQpLgorCSAqLworCXNpemUgPSAqaGRyKysgLSAnMCc7CisJaWYgKHNpemUgPiA5KQorCQlyZXR1cm4gLTE7CisJaWYgKHNpemUpIHsKKwkJZm9yICg7OykgeworCQkJdW5zaWduZWQgbG9uZyBjID0gKmhkciAtICcwJzsKKwkJCWlmIChjID4gOSkKKwkJCQlicmVhazsKKwkJCWhkcisrOworCQkJc2l6ZSA9IHNpemUgKiAxMCArIGM7CisJCX0KKwl9CisKKwlpZiAob2ktPnNpemVwKQorCQkqb2ktPnNpemVwID0gc2l6ZTsKKworCS8qCisJICogVGhlIGxlbmd0aCBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgemVybyBieXRlCisJICovCisJcmV0dXJuICpoZHIgPyAtMSA6IHR5cGU7Cit9CisKK2ludCBwYXJzZV9sb29zZV9oZWFkZXIoY29uc3QgY2hhciAqaGRyLCB1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2luZm8gb2kgPSBPQkpFQ1RfSU5GT19JTklUOworCisJb2kuc2l6ZXAgPSBzaXplcDsKKwlyZXR1cm4gcGFyc2VfbG9vc2VfaGVhZGVyX2V4dGVuZGVkKGhkciwgJm9pLCAwKTsKK30KKworc3RhdGljIGludCBsb29zZV9vYmplY3RfaW5mbyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2luZm8gKm9pLCBpbnQgZmxhZ3MpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdW5zaWduZWQgbG9uZyBtYXBzaXplOworCXZvaWQgKm1hcDsKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJY2hhciBoZHJbTUFYX0hFQURFUl9MRU5dOworCXN0cnVjdCBzdHJidWYgaGRyYnVmID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgbG9uZyBzaXplX3NjcmF0Y2g7CisKKwlpZiAob2ktPmRlbHRhX2Jhc2Vfb2lkKQorCQlvaWRjbHIob2ktPmRlbHRhX2Jhc2Vfb2lkKTsKKworCS8qCisJICogSWYgd2UgZG9uJ3QgY2FyZSBhYm91dCB0eXBlIG9yIHNpemUsIHRoZW4gd2UgZG9uJ3QKKwkgKiBuZWVkIHRvIGxvb2sgaW5zaWRlIHRoZSBvYmplY3QgYXQgYWxsLiBOb3RlIHRoYXQgd2UKKwkgKiBkbyBub3Qgb3B0aW1pemUgb3V0IHRoZSBzdGF0IGNhbGwsIGV2ZW4gaWYgdGhlCisJICogY2FsbGVyIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZGlzay1zaXplLCBzaW5jZSBvdXIKKwkgKiByZXR1cm4gdmFsdWUgaW1wbGljaXRseSBpbmRpY2F0ZXMgd2hldGhlciB0aGUKKwkgKiBvYmplY3QgZXZlbiBleGlzdHMuCisJICovCisJaWYgKCFvaS0+dHlwZXAgJiYgIW9pLT50eXBlX25hbWUgJiYgIW9pLT5zaXplcCAmJiAhb2ktPmNvbnRlbnRwKSB7CisJCWNvbnN0IGNoYXIgKnBhdGg7CisJCXN0cnVjdCBzdGF0IHN0OworCQlpZiAoIW9pLT5kaXNrX3NpemVwICYmIChmbGFncyAmIE9CSkVDVF9JTkZPX1FVSUNLKSkKKwkJCXJldHVybiBxdWlja19oYXNfbG9vc2Uociwgb2lkKSA/IDAgOiAtMTsKKwkJaWYgKHN0YXRfbG9vc2Vfb2JqZWN0KHIsIG9pZCwgJnN0LCAmcGF0aCkgPCAwKQorCQkJcmV0dXJuIC0xOworCQlpZiAob2ktPmRpc2tfc2l6ZXApCisJCQkqb2ktPmRpc2tfc2l6ZXAgPSBzdC5zdF9zaXplOworCQlyZXR1cm4gMDsKKwl9CisKKwltYXAgPSBtYXBfbG9vc2Vfb2JqZWN0KHIsIG9pZCwgJm1hcHNpemUpOworCWlmICghbWFwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIW9pLT5zaXplcCkKKwkJb2ktPnNpemVwID0gJnNpemVfc2NyYXRjaDsKKworCWlmIChvaS0+ZGlza19zaXplcCkKKwkJKm9pLT5kaXNrX3NpemVwID0gbWFwc2l6ZTsKKwlpZiAoKGZsYWdzICYgT0JKRUNUX0lORk9fQUxMT1dfVU5LTk9XTl9UWVBFKSkgeworCQlpZiAodW5wYWNrX2xvb3NlX2hlYWRlcl90b19zdHJidWYoJnN0cmVhbSwgbWFwLCBtYXBzaXplLCBoZHIsIHNpemVvZihoZHIpLCAmaGRyYnVmKSA8IDApCisJCQlzdGF0dXMgPSBlcnJvcihfKCJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIiksCisJCQkJICAgICAgIG9pZF90b19oZXgob2lkKSk7CisJfSBlbHNlIGlmICh1bnBhY2tfbG9vc2VfaGVhZGVyKCZzdHJlYW0sIG1hcCwgbWFwc2l6ZSwgaGRyLCBzaXplb2YoaGRyKSkgPCAwKQorCQlzdGF0dXMgPSBlcnJvcihfKCJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciIpLAorCQkJICAgICAgIG9pZF90b19oZXgob2lkKSk7CisJaWYgKHN0YXR1cyA8IDApCisJCTsgLyogRG8gbm90aGluZyAqLworCWVsc2UgaWYgKGhkcmJ1Zi5sZW4pIHsKKwkJaWYgKChzdGF0dXMgPSBwYXJzZV9sb29zZV9oZWFkZXJfZXh0ZW5kZWQoaGRyYnVmLmJ1Ziwgb2ksIGZsYWdzKSkgPCAwKQorCQkJc3RhdHVzID0gZXJyb3IoXygidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIiksCisJCQkJICAgICAgIG9pZF90b19oZXgob2lkKSk7CisJfSBlbHNlIGlmICgoc3RhdHVzID0gcGFyc2VfbG9vc2VfaGVhZGVyX2V4dGVuZGVkKGhkciwgb2ksIGZsYWdzKSkgPCAwKQorCQlzdGF0dXMgPSBlcnJvcihfKCJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIiksIG9pZF90b19oZXgob2lkKSk7CisKKwlpZiAoc3RhdHVzID49IDAgJiYgb2ktPmNvbnRlbnRwKSB7CisJCSpvaS0+Y29udGVudHAgPSB1bnBhY2tfbG9vc2VfcmVzdCgmc3RyZWFtLCBoZHIsCisJCQkJCQkgICpvaS0+c2l6ZXAsIG9pZCk7CisJCWlmICghKm9pLT5jb250ZW50cCkgeworCQkJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCQkJc3RhdHVzID0gLTE7CisJCX0KKwl9IGVsc2UKKwkJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCisJbXVubWFwKG1hcCwgbWFwc2l6ZSk7CisJaWYgKHN0YXR1cyAmJiBvaS0+dHlwZXApCisJCSpvaS0+dHlwZXAgPSBzdGF0dXM7CisJaWYgKG9pLT5zaXplcCA9PSAmc2l6ZV9zY3JhdGNoKQorCQlvaS0+c2l6ZXAgPSBOVUxMOworCXN0cmJ1Zl9yZWxlYXNlKCZoZHJidWYpOworCW9pLT53aGVuY2UgPSBPSV9MT09TRTsKKwlyZXR1cm4gKHN0YXR1cyA8IDApID8gc3RhdHVzIDogMDsKK30KKworaW50IG9ial9yZWFkX3VzZV9sb2NrID0gMDsKK3B0aHJlYWRfbXV0ZXhfdCBvYmpfcmVhZF9tdXRleDsKKwordm9pZCBlbmFibGVfb2JqX3JlYWRfbG9jayh2b2lkKQoreworCWlmIChvYmpfcmVhZF91c2VfbG9jaykKKwkJcmV0dXJuOworCisJb2JqX3JlYWRfdXNlX2xvY2sgPSAxOworCWluaXRfcmVjdXJzaXZlX211dGV4KCZvYmpfcmVhZF9tdXRleCk7Cit9CisKK3ZvaWQgZGlzYWJsZV9vYmpfcmVhZF9sb2NrKHZvaWQpCit7CisJaWYgKCFvYmpfcmVhZF91c2VfbG9jaykKKwkJcmV0dXJuOworCisJb2JqX3JlYWRfdXNlX2xvY2sgPSAwOworCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmb2JqX3JlYWRfbXV0ZXgpOworfQorCitpbnQgZmV0Y2hfaWZfbWlzc2luZyA9IDE7CisKK3N0YXRpYyBpbnQgZG9fb2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICAgICAgIHN0cnVjdCBvYmplY3RfaW5mbyAqb2ksIHVuc2lnbmVkIGZsYWdzKQoreworCXN0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2luZm8gYmxhbmtfb2kgPSBPQkpFQ1RfSU5GT19JTklUOworCXN0cnVjdCBjYWNoZWRfb2JqZWN0ICpjbzsKKwlzdHJ1Y3QgcGFja19lbnRyeSBlOworCWludCBydHlwZTsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZWFsID0gb2lkOworCWludCBhbHJlYWR5X3JldHJpZWQgPSAwOworCisKKwlpZiAoZmxhZ3MgJiBPQkpFQ1RfSU5GT19MT09LVVBfUkVQTEFDRSkKKwkJcmVhbCA9IGxvb2t1cF9yZXBsYWNlX29iamVjdChyLCBvaWQpOworCisJaWYgKGlzX251bGxfb2lkKHJlYWwpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIW9pKQorCQlvaSA9ICZibGFua19vaTsKKworCWNvID0gZmluZF9jYWNoZWRfb2JqZWN0KHJlYWwpOworCWlmIChjbykgeworCQlpZiAob2ktPnR5cGVwKQorCQkJKihvaS0+dHlwZXApID0gY28tPnR5cGU7CisJCWlmIChvaS0+c2l6ZXApCisJCQkqKG9pLT5zaXplcCkgPSBjby0+c2l6ZTsKKwkJaWYgKG9pLT5kaXNrX3NpemVwKQorCQkJKihvaS0+ZGlza19zaXplcCkgPSAwOworCQlpZiAob2ktPmRlbHRhX2Jhc2Vfb2lkKQorCQkJb2lkY2xyKG9pLT5kZWx0YV9iYXNlX29pZCk7CisJCWlmIChvaS0+dHlwZV9uYW1lKQorCQkJc3RyYnVmX2FkZHN0cihvaS0+dHlwZV9uYW1lLCB0eXBlX25hbWUoY28tPnR5cGUpKTsKKwkJaWYgKG9pLT5jb250ZW50cCkKKwkJCSpvaS0+Y29udGVudHAgPSB4bWVtZHVweihjby0+YnVmLCBjby0+c2l6ZSk7CisJCW9pLT53aGVuY2UgPSBPSV9DQUNIRUQ7CisJCXJldHVybiAwOworCX0KKworCXdoaWxlICgxKSB7CisJCWlmIChmaW5kX3BhY2tfZW50cnkociwgcmVhbCwgJmUpKQorCQkJYnJlYWs7CisKKwkJaWYgKGZsYWdzICYgT0JKRUNUX0lORk9fSUdOT1JFX0xPT1NFKQorCQkJcmV0dXJuIC0xOworCisJCS8qIE1vc3QgbGlrZWx5IGl0J3MgYSBsb29zZSBvYmplY3QuICovCisJCWlmICghbG9vc2Vfb2JqZWN0X2luZm8ociwgcmVhbCwgb2ksIGZsYWdzKSkKKwkJCXJldHVybiAwOworCisJCS8qIE5vdCBhIGxvb3NlIG9iamVjdDsgc29tZW9uZSBlbHNlIG1heSBoYXZlIGp1c3QgcGFja2VkIGl0LiAqLworCQlpZiAoIShmbGFncyAmIE9CSkVDVF9JTkZPX1FVSUNLKSkgeworCQkJcmVwcmVwYXJlX3BhY2tlZF9naXQocik7CisJCQlpZiAoZmluZF9wYWNrX2VudHJ5KHIsIHJlYWwsICZlKSkKKwkJCQlicmVhazsKKwkJfQorCisJCS8qIENoZWNrIGlmIGl0IGlzIGEgbWlzc2luZyBvYmplY3QgKi8KKwkJaWYgKGZldGNoX2lmX21pc3NpbmcgJiYgaGFzX3Byb21pc29yX3JlbW90ZSgpICYmCisJCSAgICAhYWxyZWFkeV9yZXRyaWVkICYmIHIgPT0gdGhlX3JlcG9zaXRvcnkgJiYKKwkJICAgICEoZmxhZ3MgJiBPQkpFQ1RfSU5GT19TS0lQX0ZFVENIX09CSkVDVCkpIHsKKwkJCS8qCisJCQkgKiBUT0RPIEludmVzdGlnYXRlIGNoZWNraW5nIHByb21pc29yX3JlbW90ZV9nZXRfZGlyZWN0KCkKKwkJCSAqIFRPRE8gcmV0dXJuIHZhbHVlIGFuZCBzdG9wcGluZyBvbiBlcnJvciBoZXJlLgorCQkJICogVE9ETyBQYXNzIGEgcmVwb3NpdG9yeSBzdHJ1Y3QgdGhyb3VnaAorCQkJICogcHJvbWlzb3JfcmVtb3RlX2dldF9kaXJlY3QoKSwgc3VjaCB0aGF0IGFyYml0cmFyeQorCQkJICogcmVwb3NpdG9yaWVzIHdvcmsuCisJCQkgKi8KKwkJCXByb21pc29yX3JlbW90ZV9nZXRfZGlyZWN0KHIsIHJlYWwsIDEpOworCQkJYWxyZWFkeV9yZXRyaWVkID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChvaSA9PSAmYmxhbmtfb2kpCisJCS8qCisJCSAqIFdlIGtub3cgdGhhdCB0aGUgY2FsbGVyIGRvZXNuJ3QgYWN0dWFsbHkgbmVlZCB0aGUKKwkJICogaW5mb3JtYXRpb24gYmVsb3csIHNvIHJldHVybiBlYXJseS4KKwkJICovCisJCXJldHVybiAwOworCXJ0eXBlID0gcGFja2VkX29iamVjdF9pbmZvKHIsIGUucCwgZS5vZmZzZXQsIG9pKTsKKwlpZiAocnR5cGUgPCAwKSB7CisJCW1hcmtfYmFkX3BhY2tlZF9vYmplY3QoZS5wLCByZWFsLT5oYXNoKTsKKwkJcmV0dXJuIGRvX29pZF9vYmplY3RfaW5mb19leHRlbmRlZChyLCByZWFsLCBvaSwgMCk7CisJfSBlbHNlIGlmIChvaS0+d2hlbmNlID09IE9JX1BBQ0tFRCkgeworCQlvaS0+dS5wYWNrZWQub2Zmc2V0ID0gZS5vZmZzZXQ7CisJCW9pLT51LnBhY2tlZC5wYWNrID0gZS5wOworCQlvaS0+dS5wYWNrZWQuaXNfZGVsdGEgPSAocnR5cGUgPT0gT0JKX1JFRl9ERUxUQSB8fAorCQkJCQkgcnR5cGUgPT0gT0JKX09GU19ERUxUQSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgc3RydWN0IG9iamVjdF9pbmZvICpvaSwgdW5zaWduZWQgZmxhZ3MpCit7CisJaW50IHJldDsKKwlvYmpfcmVhZF9sb2NrKCk7CisJcmV0ID0gZG9fb2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKHIsIG9pZCwgb2ksIGZsYWdzKTsKKwlvYmpfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qIHJldHVybnMgZW51bSBvYmplY3RfdHlwZSBvciBuZWdhdGl2ZSAqLworaW50IG9pZF9vYmplY3RfaW5mbyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgIHVuc2lnbmVkIGxvbmcgKnNpemVwKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlzdHJ1Y3Qgb2JqZWN0X2luZm8gb2kgPSBPQkpFQ1RfSU5GT19JTklUOworCisJb2kudHlwZXAgPSAmdHlwZTsKKwlvaS5zaXplcCA9IHNpemVwOworCWlmIChvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQociwgb2lkLCAmb2ksCisJCQkJICAgICAgT0JKRUNUX0lORk9fTE9PS1VQX1JFUExBQ0UpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiB0eXBlOworfQorCitzdGF0aWMgdm9pZCAqcmVhZF9vYmplY3Qoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLAorCQkJIHVuc2lnbmVkIGxvbmcgKnNpemUpCit7CisJc3RydWN0IG9iamVjdF9pbmZvIG9pID0gT0JKRUNUX0lORk9fSU5JVDsKKwl2b2lkICpjb250ZW50OworCW9pLnR5cGVwID0gdHlwZTsKKwlvaS5zaXplcCA9IHNpemU7CisJb2kuY29udGVudHAgPSAmY29udGVudDsKKworCWlmIChvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQociwgb2lkLCAmb2ksIDApIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGNvbnRlbnQ7Cit9CisKK2ludCBwcmV0ZW5kX29iamVjdF9maWxlKHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJCXN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgY2FjaGVkX29iamVjdCAqY287CisKKwloYXNoX29iamVjdF9maWxlKHRoZV9oYXNoX2FsZ28sIGJ1ZiwgbGVuLCB0eXBlX25hbWUodHlwZSksIG9pZCk7CisJaWYgKGhhc19vYmplY3RfZmlsZShvaWQpIHx8IGZpbmRfY2FjaGVkX29iamVjdChvaWQpKQorCQlyZXR1cm4gMDsKKwlBTExPQ19HUk9XKGNhY2hlZF9vYmplY3RzLCBjYWNoZWRfb2JqZWN0X25yICsgMSwgY2FjaGVkX29iamVjdF9hbGxvYyk7CisJY28gPSAmY2FjaGVkX29iamVjdHNbY2FjaGVkX29iamVjdF9ucisrXTsKKwljby0+c2l6ZSA9IGxlbjsKKwljby0+dHlwZSA9IHR5cGU7CisJY28tPmJ1ZiA9IHhtYWxsb2MobGVuKTsKKwltZW1jcHkoY28tPmJ1ZiwgYnVmLCBsZW4pOworCW9pZGNweSgmY28tPm9pZCwgb2lkKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZGllcyBvbiBjb3JydXB0IG9iamVjdHM7IHRoZSBjYWxsZXJzIHdobyB3YW50IHRvCisgKiBkZWFsIHdpdGggdGhlbSBzaG91bGQgYXJyYW5nZSB0byBjYWxsIHJlYWRfb2JqZWN0KCkgYW5kIGdpdmUgZXJyb3IKKyAqIG1lc3NhZ2VzIHRoZW1zZWx2ZXMuCisgKi8KK3ZvaWQgKnJlYWRfb2JqZWN0X2ZpbGVfZXh0ZW5kZWQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCWVudW0gb2JqZWN0X3R5cGUgKnR5cGUsCisJCQkJdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCQlpbnQgbG9va3VwX3JlcGxhY2UpCit7CisJdm9pZCAqZGF0YTsKKwljb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwljb25zdCBjaGFyICpwYXRoOworCXN0cnVjdCBzdGF0IHN0OworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnJlcGwgPSBsb29rdXBfcmVwbGFjZSA/CisJCWxvb2t1cF9yZXBsYWNlX29iamVjdChyLCBvaWQpIDogb2lkOworCisJZXJybm8gPSAwOworCWRhdGEgPSByZWFkX29iamVjdChyLCByZXBsLCB0eXBlLCBzaXplKTsKKwlpZiAoZGF0YSkKKwkJcmV0dXJuIGRhdGE7CisKKwlvYmpfcmVhZF9sb2NrKCk7CisJaWYgKGVycm5vICYmIGVycm5vICE9IEVOT0VOVCkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byByZWFkIG9iamVjdCAlcyIpLCBvaWRfdG9faGV4KG9pZCkpOworCisJLyogZGllIGlmIHdlIHJlcGxhY2VkIGFuIG9iamVjdCB3aXRoIG9uZSB0aGF0IGRvZXMgbm90IGV4aXN0ICovCisJaWYgKHJlcGwgIT0gb2lkKQorCQlkaWUoXygicmVwbGFjZW1lbnQgJXMgbm90IGZvdW5kIGZvciAlcyIpLAorCQkgICAgb2lkX3RvX2hleChyZXBsKSwgb2lkX3RvX2hleChvaWQpKTsKKworCWlmICghc3RhdF9sb29zZV9vYmplY3QociwgcmVwbCwgJnN0LCAmcGF0aCkpCisJCWRpZShfKCJsb29zZSBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIpLAorCQkgICAgb2lkX3RvX2hleChyZXBsKSwgcGF0aCk7CisKKwlpZiAoKHAgPSBoYXNfcGFja2VkX2FuZF9iYWQociwgcmVwbC0+aGFzaCkpICE9IE5VTEwpCisJCWRpZShfKCJwYWNrZWQgb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiKSwKKwkJICAgIG9pZF90b19oZXgocmVwbCksIHAtPnBhY2tfbmFtZSk7CisJb2JqX3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCAqcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgY29uc3QgY2hhciAqcmVxdWlyZWRfdHlwZV9uYW1lLAorCQkJCSB1bnNpZ25lZCBsb25nICpzaXplLAorCQkJCSBzdHJ1Y3Qgb2JqZWN0X2lkICphY3R1YWxfb2lkX3JldHVybikKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGUsIHJlcXVpcmVkX3R5cGU7CisJdm9pZCAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgaXNpemU7CisJc3RydWN0IG9iamVjdF9pZCBhY3R1YWxfb2lkOworCisJcmVxdWlyZWRfdHlwZSA9IHR5cGVfZnJvbV9zdHJpbmcocmVxdWlyZWRfdHlwZV9uYW1lKTsKKwlvaWRjcHkoJmFjdHVhbF9vaWQsIG9pZCk7CisJd2hpbGUgKDEpIHsKKwkJaW50IHJlZl9sZW5ndGggPSAtMTsKKwkJY29uc3QgY2hhciAqcmVmX3R5cGUgPSBOVUxMOworCisJCWJ1ZmZlciA9IHJlcG9fcmVhZF9vYmplY3RfZmlsZShyLCAmYWN0dWFsX29pZCwgJnR5cGUsICZpc2l6ZSk7CisJCWlmICghYnVmZmVyKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmICh0eXBlID09IHJlcXVpcmVkX3R5cGUpIHsKKwkJCSpzaXplID0gaXNpemU7CisJCQlpZiAoYWN0dWFsX29pZF9yZXR1cm4pCisJCQkJb2lkY3B5KGFjdHVhbF9vaWRfcmV0dXJuLCAmYWN0dWFsX29pZCk7CisJCQlyZXR1cm4gYnVmZmVyOworCQl9CisJCS8qIEhhbmRsZSByZWZlcmVuY2VzICovCisJCWVsc2UgaWYgKHR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJCXJlZl90eXBlID0gInRyZWUgIjsKKwkJZWxzZSBpZiAodHlwZSA9PSBPQkpfVEFHKQorCQkJcmVmX3R5cGUgPSAib2JqZWN0ICI7CisJCWVsc2UgeworCQkJZnJlZShidWZmZXIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcmVmX2xlbmd0aCA9IHN0cmxlbihyZWZfdHlwZSk7CisKKwkJaWYgKHJlZl9sZW5ndGggKyB0aGVfaGFzaF9hbGdvLT5oZXhzeiA+IGlzaXplIHx8CisJCSAgICBtZW1jbXAoYnVmZmVyLCByZWZfdHlwZSwgcmVmX2xlbmd0aCkgfHwKKwkJICAgIGdldF9vaWRfaGV4KChjaGFyICopIGJ1ZmZlciArIHJlZl9sZW5ndGgsICZhY3R1YWxfb2lkKSkgeworCQkJZnJlZShidWZmZXIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJZnJlZShidWZmZXIpOworCQkvKiBOb3cgd2UgaGF2ZSB0aGUgSUQgb2YgdGhlIHJlZmVycmVkLXRvIG9iamVjdCBpbgorCQkgKiBhY3R1YWxfb2lkLiAgQ2hlY2sgYWdhaW4uICovCisJfQorfQorCitzdGF0aWMgdm9pZCB3cml0ZV9vYmplY3RfZmlsZV9wcmVwYXJlKGNvbnN0IHN0cnVjdCBnaXRfaGFzaF9hbGdvICphbGdvLAorCQkJCSAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJICAgICAgY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgICAgIGNoYXIgKmhkciwgaW50ICpoZHJsZW4pCit7CisJZ2l0X2hhc2hfY3R4IGM7CisKKwkvKiBHZW5lcmF0ZSB0aGUgaGVhZGVyICovCisJKmhkcmxlbiA9IHhzbnByaW50ZihoZHIsICpoZHJsZW4sICIlcyAlIlBSSXVNQVggLCB0eXBlLCAodWludG1heF90KWxlbikrMTsKKworCS8qIFNoYTEuLiAqLworCWFsZ28tPmluaXRfZm4oJmMpOworCWFsZ28tPnVwZGF0ZV9mbigmYywgaGRyLCAqaGRybGVuKTsKKwlhbGdvLT51cGRhdGVfZm4oJmMsIGJ1ZiwgbGVuKTsKKwlhbGdvLT5maW5hbF9mbihvaWQtPmhhc2gsICZjKTsKK30KKworLyoKKyAqIE1vdmUgdGhlIGp1c3Qgd3JpdHRlbiBvYmplY3QgaW50byBpdHMgZmluYWwgcmVzdGluZyBwbGFjZS4KKyAqLworaW50IGZpbmFsaXplX29iamVjdF9maWxlKGNvbnN0IGNoYXIgKnRtcGZpbGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWludCByZXQgPSAwOworCisJaWYgKG9iamVjdF9jcmVhdGlvbl9tb2RlID09IE9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMpCisJCWdvdG8gdHJ5X3JlbmFtZTsKKwllbHNlIGlmIChsaW5rKHRtcGZpbGUsIGZpbGVuYW1lKSkKKwkJcmV0ID0gZXJybm87CisKKwkvKgorCSAqIENvZGEgaGFjayAtIGNvZGEgZG9lc24ndCBsaWtlIGNyb3NzLWRpcmVjdG9yeSBsaW5rcywKKwkgKiBzbyB3ZSBmYWxsIGJhY2sgdG8gYSByZW5hbWUsIHdoaWNoIHdpbGwgbWVhbiB0aGF0IGl0CisJICogd29uJ3QgYmUgYWJsZSB0byBjaGVjayBjb2xsaXNpb25zLCBidXQgdGhhdCdzIG5vdCBhCisJICogYmlnIGRlYWwuCisJICoKKwkgKiBUaGUgc2FtZSBob2xkcyBmb3IgRkFUIGZvcm1hdHRlZCBtZWRpYS4KKwkgKgorCSAqIFdoZW4gdGhpcyBzdWNjZWVkcywgd2UganVzdCByZXR1cm4uICBXZSBoYXZlIG5vdGhpbmcKKwkgKiBsZWZ0IHRvIHVubGluay4KKwkgKi8KKwlpZiAocmV0ICYmIHJldCAhPSBFRVhJU1QpIHsKKwl0cnlfcmVuYW1lOgorCQlpZiAoIXJlbmFtZSh0bXBmaWxlLCBmaWxlbmFtZSkpCisJCQlnb3RvIG91dDsKKwkJcmV0ID0gZXJybm87CisJfQorCXVubGlua19vcl93YXJuKHRtcGZpbGUpOworCWlmIChyZXQpIHsKKwkJaWYgKHJldCAhPSBFRVhJU1QpIHsKKwkJCXJldHVybiBlcnJvcl9lcnJubyhfKCJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIpLCBmaWxlbmFtZSk7CisJCX0KKwkJLyogRklYTUUhISEgQ29sbGlzaW9uIGNoZWNrIGhlcmUgPyAqLworCX0KKworb3V0OgorCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0oZmlsZW5hbWUpKQorCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIHNldCBwZXJtaXNzaW9uIHRvICclcyciKSwgZmlsZW5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX2J1ZmZlcihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLCBsZW4pIDwgMCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImZpbGUgd3JpdGUgZXJyb3IiKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBoYXNoX29iamVjdF9maWxlKGNvbnN0IHN0cnVjdCBnaXRfaGFzaF9hbGdvICphbGdvLCBjb25zdCB2b2lkICpidWYsCisJCSAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGNvbnN0IGNoYXIgKnR5cGUsCisJCSAgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWNoYXIgaGRyW01BWF9IRUFERVJfTEVOXTsKKwlpbnQgaGRybGVuID0gc2l6ZW9mKGhkcik7CisJd3JpdGVfb2JqZWN0X2ZpbGVfcHJlcGFyZShhbGdvLCBidWYsIGxlbiwgdHlwZSwgb2lkLCBoZHIsICZoZHJsZW4pOworCXJldHVybiAwOworfQorCisvKiBGaW5hbGl6ZSBhIGZpbGUgb24gZGlzaywgYW5kIGNsb3NlIGl0LiAqLworc3RhdGljIHZvaWQgY2xvc2VfbG9vc2Vfb2JqZWN0KGludCBmZCkKK3sKKwlpZiAoZnN5bmNfb2JqZWN0X2ZpbGVzKQorCQlmc3luY19vcl9kaWUoZmQsICJsb29zZSBvYmplY3QgZmlsZSIpOworCWlmIChjbG9zZShmZCkgIT0gMCkKKwkJZGllX2Vycm5vKF8oImVycm9yIHdoZW4gY2xvc2luZyBsb29zZSBvYmplY3QgZmlsZSIpKTsKK30KKworLyogU2l6ZSBvZiBkaXJlY3RvcnkgY29tcG9uZW50LCBpbmNsdWRpbmcgdGhlIGVuZGluZyAnLycgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRpcmVjdG9yeV9zaXplKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWNvbnN0IGNoYXIgKnMgPSBzdHJyY2hyKGZpbGVuYW1lLCAnLycpOworCWlmICghcykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHMgLSBmaWxlbmFtZSArIDE7Cit9CisKKy8qCisgKiBUaGlzIGNyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGZpbmFsCisgKiAnZmlsZW5hbWUnCisgKgorICogV2Ugd2FudCB0byBhdm9pZCBjcm9zcy1kaXJlY3RvcnkgZmlsZW5hbWUgcmVuYW1lcywgYmVjYXVzZSB0aG9zZQorICogY2FuIGhhdmUgcHJvYmxlbXMgb24gdmFyaW91cyBmaWxlc3lzdGVtcyAoRkFULCBORlMsIENvZGEpLgorICovCitzdGF0aWMgaW50IGNyZWF0ZV90bXBmaWxlKHN0cnVjdCBzdHJidWYgKnRtcCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJaW50IGZkLCBkaXJsZW4gPSBkaXJlY3Rvcnlfc2l6ZShmaWxlbmFtZSk7CisKKwlzdHJidWZfcmVzZXQodG1wKTsKKwlzdHJidWZfYWRkKHRtcCwgZmlsZW5hbWUsIGRpcmxlbik7CisJc3RyYnVmX2FkZHN0cih0bXAsICJ0bXBfb2JqX1hYWFhYWCIpOworCWZkID0gZ2l0X21rc3RlbXBfbW9kZSh0bXAtPmJ1ZiwgMDQ0NCk7CisJaWYgKGZkIDwgMCAmJiBkaXJsZW4gJiYgZXJybm8gPT0gRU5PRU5UKSB7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0czsgbm90ZSB0aGF0IHRoZSBjb250ZW50cworCQkgKiBvZiB0aGUgYnVmZmVyIGFyZSB1bmRlZmluZWQgYWZ0ZXIgbWtzdGVtcCByZXR1cm5zIGFuCisJCSAqIGVycm9yLCBzbyB3ZSBoYXZlIHRvIHJld3JpdGUgdGhlIHdob2xlIGJ1ZmZlciBmcm9tCisJCSAqIHNjcmF0Y2guCisJCSAqLworCQlzdHJidWZfcmVzZXQodG1wKTsKKwkJc3RyYnVmX2FkZCh0bXAsIGZpbGVuYW1lLCBkaXJsZW4gLSAxKTsKKwkJaWYgKG1rZGlyKHRtcC0+YnVmLCAwNzc3KSAmJiBlcnJubyAhPSBFRVhJU1QpCisJCQlyZXR1cm4gLTE7CisJCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0odG1wLT5idWYpKQorCQkJcmV0dXJuIC0xOworCisJCS8qIFRyeSBhZ2FpbiAqLworCQlzdHJidWZfYWRkc3RyKHRtcCwgIi90bXBfb2JqX1hYWFhYWCIpOworCQlmZCA9IGdpdF9ta3N0ZW1wX21vZGUodG1wLT5idWYsIDA0NDQpOworCX0KKwlyZXR1cm4gZmQ7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfbG9vc2Vfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY2hhciAqaGRyLAorCQkJICAgICAgaW50IGhkcmxlbiwgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCSAgICAgIHRpbWVfdCBtdGltZSkKK3sKKwlpbnQgZmQsIHJldDsKKwl1bnNpZ25lZCBjaGFyIGNvbXByZXNzZWRbNDA5Nl07CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCWdpdF9oYXNoX2N0eCBjOworCXN0cnVjdCBvYmplY3RfaWQgcGFyYW5vX29pZDsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB0bXBfZmlsZSA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGZpbGVuYW1lID0gU1RSQlVGX0lOSVQ7CisKKwlsb29zZV9vYmplY3RfcGF0aCh0aGVfcmVwb3NpdG9yeSwgJmZpbGVuYW1lLCBvaWQpOworCisJZmQgPSBjcmVhdGVfdG1wZmlsZSgmdG1wX2ZpbGUsIGZpbGVuYW1lLmJ1Zik7CisJaWYgKGZkIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRUFDQ0VTKQorCQkJcmV0dXJuIGVycm9yKF8oImluc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciBhZGRpbmcgYW4gb2JqZWN0IHRvIHJlcG9zaXRvcnkgZGF0YWJhc2UgJXMiKSwgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CisJCWVsc2UKKwkJCXJldHVybiBlcnJvcl9lcnJubyhfKCJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlIikpOworCX0KKworCS8qIFNldCBpdCB1cCAqLworCWdpdF9kZWZsYXRlX2luaXQoJnN0cmVhbSwgemxpYl9jb21wcmVzc2lvbl9sZXZlbCk7CisJc3RyZWFtLm5leHRfb3V0ID0gY29tcHJlc3NlZDsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGNvbXByZXNzZWQpOworCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJmMpOworCisJLyogRmlyc3QgaGVhZGVyLi4gKi8KKwlzdHJlYW0ubmV4dF9pbiA9ICh1bnNpZ25lZCBjaGFyICopaGRyOworCXN0cmVhbS5hdmFpbF9pbiA9IGhkcmxlbjsKKwl3aGlsZSAoZ2l0X2RlZmxhdGUoJnN0cmVhbSwgMCkgPT0gWl9PSykKKwkJOyAvKiBub3RoaW5nICovCisJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjLCBoZHIsIGhkcmxlbik7CisKKwkvKiBUaGVuIHRoZSBkYXRhIGl0c2VsZi4uICovCisJc3RyZWFtLm5leHRfaW4gPSAodm9pZCAqKWJ1ZjsKKwlzdHJlYW0uYXZhaWxfaW4gPSBsZW47CisJZG8geworCQl1bnNpZ25lZCBjaGFyICppbjAgPSBzdHJlYW0ubmV4dF9pbjsKKwkJcmV0ID0gZ2l0X2RlZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpOworCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmMsIGluMCwgc3RyZWFtLm5leHRfaW4gLSBpbjApOworCQlpZiAod3JpdGVfYnVmZmVyKGZkLCBjb21wcmVzc2VkLCBzdHJlYW0ubmV4dF9vdXQgLSBjb21wcmVzc2VkKSA8IDApCisJCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlIGxvb3NlIG9iamVjdCBmaWxlIikpOworCQlzdHJlYW0ubmV4dF9vdXQgPSBjb21wcmVzc2VkOworCQlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGNvbXByZXNzZWQpOworCX0gd2hpbGUgKHJldCA9PSBaX09LKTsKKworCWlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKQorCQlkaWUoXygidW5hYmxlIHRvIGRlZmxhdGUgbmV3IG9iamVjdCAlcyAoJWQpIiksIG9pZF90b19oZXgob2lkKSwKKwkJICAgIHJldCk7CisJcmV0ID0gZ2l0X2RlZmxhdGVfZW5kX2dlbnRseSgmc3RyZWFtKTsKKwlpZiAocmV0ICE9IFpfT0spCisJCWRpZShfKCJkZWZsYXRlRW5kIG9uIG9iamVjdCAlcyBmYWlsZWQgKCVkKSIpLCBvaWRfdG9faGV4KG9pZCksCisJCSAgICByZXQpOworCXRoZV9oYXNoX2FsZ28tPmZpbmFsX2ZuKHBhcmFub19vaWQuaGFzaCwgJmMpOworCWlmICghb2lkZXEob2lkLCAmcGFyYW5vX29pZCkpCisJCWRpZShfKCJjb25mdXNlZCBieSB1bnN0YWJsZSBvYmplY3Qgc291cmNlIGRhdGEgZm9yICVzIiksCisJCSAgICBvaWRfdG9faGV4KG9pZCkpOworCisJY2xvc2VfbG9vc2Vfb2JqZWN0KGZkKTsKKworCWlmIChtdGltZSkgeworCQlzdHJ1Y3QgdXRpbWJ1ZiB1dGI7CisJCXV0Yi5hY3RpbWUgPSBtdGltZTsKKwkJdXRiLm1vZHRpbWUgPSBtdGltZTsKKwkJaWYgKHV0aW1lKHRtcF9maWxlLmJ1ZiwgJnV0YikgPCAwKQorCQkJd2FybmluZ19lcnJubyhfKCJmYWlsZWQgdXRpbWUoKSBvbiAlcyIpLCB0bXBfZmlsZS5idWYpOworCX0KKworCXJldHVybiBmaW5hbGl6ZV9vYmplY3RfZmlsZSh0bXBfZmlsZS5idWYsIGZpbGVuYW1lLmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgZnJlc2hlbl9sb29zZV9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXJldHVybiBjaGVja19hbmRfZnJlc2hlbihvaWQsIDEpOworfQorCitzdGF0aWMgaW50IGZyZXNoZW5fcGFja2VkX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IHBhY2tfZW50cnkgZTsKKwlpZiAoIWZpbmRfcGFja19lbnRyeSh0aGVfcmVwb3NpdG9yeSwgb2lkLCAmZSkpCisJCXJldHVybiAwOworCWlmIChlLnAtPmZyZXNoZW5lZCkKKwkJcmV0dXJuIDE7CisJaWYgKCFmcmVzaGVuX2ZpbGUoZS5wLT5wYWNrX25hbWUpKQorCQlyZXR1cm4gMDsKKwllLnAtPmZyZXNoZW5lZCA9IDE7CisJcmV0dXJuIDE7Cit9CisKK2ludCB3cml0ZV9vYmplY3RfZmlsZShjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCBjb25zdCBjaGFyICp0eXBlLAorCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJY2hhciBoZHJbTUFYX0hFQURFUl9MRU5dOworCWludCBoZHJsZW4gPSBzaXplb2YoaGRyKTsKKworCS8qIE5vcm1hbGx5IGlmIHdlIGhhdmUgaXQgaW4gdGhlIHBhY2sgdGhlbiB3ZSBkbyBub3QgYm90aGVyIHdyaXRpbmcKKwkgKiBpdCBvdXQgaW50byAuZ2l0L29iamVjdHMvPz8vP3szOH0gZmlsZS4KKwkgKi8KKwl3cml0ZV9vYmplY3RfZmlsZV9wcmVwYXJlKHRoZV9oYXNoX2FsZ28sIGJ1ZiwgbGVuLCB0eXBlLCBvaWQsIGhkciwKKwkJCQkgICZoZHJsZW4pOworCWlmIChmcmVzaGVuX3BhY2tlZF9vYmplY3Qob2lkKSB8fCBmcmVzaGVuX2xvb3NlX29iamVjdChvaWQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gd3JpdGVfbG9vc2Vfb2JqZWN0KG9pZCwgaGRyLCBoZHJsZW4sIGJ1ZiwgbGVuLCAwKTsKK30KKworaW50IGhhc2hfb2JqZWN0X2ZpbGVfbGl0ZXJhbGx5KGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgICAgICAgY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgIHVuc2lnbmVkIGZsYWdzKQoreworCWNoYXIgKmhlYWRlcjsKKwlpbnQgaGRybGVuLCBzdGF0dXMgPSAwOworCisJLyogdHlwZSBzdHJpbmcsIFNQLCAlbHUgb2YgdGhlIGxlbmd0aCBwbHVzIE5VTCBtdXN0IGZpdCB0aGlzICovCisJaGRybGVuID0gc3RybGVuKHR5cGUpICsgTUFYX0hFQURFUl9MRU47CisJaGVhZGVyID0geG1hbGxvYyhoZHJsZW4pOworCXdyaXRlX29iamVjdF9maWxlX3ByZXBhcmUodGhlX2hhc2hfYWxnbywgYnVmLCBsZW4sIHR5cGUsIG9pZCwgaGVhZGVyLAorCQkJCSAgJmhkcmxlbik7CisKKwlpZiAoIShmbGFncyAmIEhBU0hfV1JJVEVfT0JKRUNUKSkKKwkJZ290byBjbGVhbnVwOworCWlmIChmcmVzaGVuX3BhY2tlZF9vYmplY3Qob2lkKSB8fCBmcmVzaGVuX2xvb3NlX29iamVjdChvaWQpKQorCQlnb3RvIGNsZWFudXA7CisJc3RhdHVzID0gd3JpdGVfbG9vc2Vfb2JqZWN0KG9pZCwgaGVhZGVyLCBoZHJsZW4sIGJ1ZiwgbGVuLCAwKTsKKworY2xlYW51cDoKKwlmcmVlKGhlYWRlcik7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGZvcmNlX29iamVjdF9sb29zZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHRpbWVfdCBtdGltZSkKK3sKKwl2b2lkICpidWY7CisJdW5zaWduZWQgbG9uZyBsZW47CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgaGRyW01BWF9IRUFERVJfTEVOXTsKKwlpbnQgaGRybGVuOworCWludCByZXQ7CisKKwlpZiAoaGFzX2xvb3NlX29iamVjdChvaWQpKQorCQlyZXR1cm4gMDsKKwlidWYgPSByZWFkX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkLCAmdHlwZSwgJmxlbik7CisJaWYgKCFidWYpCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcmVhZCBvYmplY3QgZm9yICVzIiksIG9pZF90b19oZXgob2lkKSk7CisJaGRybGVuID0geHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksICIlcyAlIlBSSXVNQVggLCB0eXBlX25hbWUodHlwZSksICh1aW50bWF4X3QpbGVuKSArIDE7CisJcmV0ID0gd3JpdGVfbG9vc2Vfb2JqZWN0KG9pZCwgaGRyLCBoZHJsZW4sIGJ1ZiwgbGVuLCBtdGltZSk7CisJZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHJlcG9faGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZsYWdzKQoreworCWlmICghc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpCisJCXJldHVybiAwOworCXJldHVybiBvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQociwgb2lkLCBOVUxMLCBmbGFncykgPj0gMDsKK30KKworaW50IHJlcG9faGFzX29iamVjdF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gcmVwb19oYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncyhyLCBvaWQsIDApOworfQorCitzdGF0aWMgdm9pZCBjaGVja190cmVlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCisJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIGJ1Ziwgc2l6ZSk7CisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpCisJCS8qIGRvIG5vdGhpbmcKKwkJICogdHJlZV9lbnRyeSgpIHdpbGwgZGllKCkgb24gbWFsZm9ybWVkIGVudHJpZXMgKi8KKwkJOworfQorCitzdGF0aWMgdm9pZCBjaGVja19jb21taXQoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgY29tbWl0IGM7CisJbWVtc2V0KCZjLCAwLCBzaXplb2YoYykpOworCWlmIChwYXJzZV9jb21taXRfYnVmZmVyKHRoZV9yZXBvc2l0b3J5LCAmYywgYnVmLCBzaXplLCAwKSkKKwkJZGllKF8oImNvcnJ1cHQgY29tbWl0IikpOworfQorCitzdGF0aWMgdm9pZCBjaGVja190YWcoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgdGFnIHQ7CisJbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOworCWlmIChwYXJzZV90YWdfYnVmZmVyKHRoZV9yZXBvc2l0b3J5LCAmdCwgYnVmLCBzaXplKSkKKwkJZGllKF8oImNvcnJ1cHQgdGFnIikpOworfQorCitzdGF0aWMgaW50IGluZGV4X21lbShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsCisJCSAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkgICAgIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzKQoreworCWludCByZXQsIHJlX2FsbG9jYXRlZCA9IDA7CisJaW50IHdyaXRlX29iamVjdCA9IGZsYWdzICYgSEFTSF9XUklURV9PQkpFQ1Q7CisKKwlpZiAoIXR5cGUpCisJCXR5cGUgPSBPQkpfQkxPQjsKKworCS8qCisJICogQ29udmVydCBibG9icyB0byBnaXQgaW50ZXJuYWwgZm9ybWF0CisJICovCisJaWYgKCh0eXBlID09IE9CSl9CTE9CKSAmJiBwYXRoKSB7CisJCXN0cnVjdCBzdHJidWYgbmJ1ZiA9IFNUUkJVRl9JTklUOworCQlpZiAoY29udmVydF90b19naXQoaXN0YXRlLCBwYXRoLCBidWYsIHNpemUsICZuYnVmLAorCQkJCSAgIGdldF9jb252X2ZsYWdzKGZsYWdzKSkpIHsKKwkJCWJ1ZiA9IHN0cmJ1Zl9kZXRhY2goJm5idWYsICZzaXplKTsKKwkJCXJlX2FsbG9jYXRlZCA9IDE7CisJCX0KKwl9CisJaWYgKGZsYWdzICYgSEFTSF9GT1JNQVRfQ0hFQ0spIHsKKwkJaWYgKHR5cGUgPT0gT0JKX1RSRUUpCisJCQljaGVja190cmVlKGJ1Ziwgc2l6ZSk7CisJCWlmICh0eXBlID09IE9CSl9DT01NSVQpCisJCQljaGVja19jb21taXQoYnVmLCBzaXplKTsKKwkJaWYgKHR5cGUgPT0gT0JKX1RBRykKKwkJCWNoZWNrX3RhZyhidWYsIHNpemUpOworCX0KKworCWlmICh3cml0ZV9vYmplY3QpCisJCXJldCA9IHdyaXRlX29iamVjdF9maWxlKGJ1Ziwgc2l6ZSwgdHlwZV9uYW1lKHR5cGUpLCBvaWQpOworCWVsc2UKKwkJcmV0ID0gaGFzaF9vYmplY3RfZmlsZSh0aGVfaGFzaF9hbGdvLCBidWYsIHNpemUsCisJCQkJICAgICAgIHR5cGVfbmFtZSh0eXBlKSwgb2lkKTsKKwlpZiAocmVfYWxsb2NhdGVkKQorCQlmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbmRleF9zdHJlYW1fY29udmVydF9ibG9iKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgICAgaW50IGZkLAorCQkJCSAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgICAgIHVuc2lnbmVkIGZsYWdzKQoreworCWludCByZXQ7CisJY29uc3QgaW50IHdyaXRlX29iamVjdCA9IGZsYWdzICYgSEFTSF9XUklURV9PQkpFQ1Q7CisJc3RydWN0IHN0cmJ1ZiBzYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlhc3NlcnQocGF0aCk7CisJYXNzZXJ0KHdvdWxkX2NvbnZlcnRfdG9fZ2l0X2ZpbHRlcl9mZChpc3RhdGUsIHBhdGgpKTsKKworCWNvbnZlcnRfdG9fZ2l0X2ZpbHRlcl9mZChpc3RhdGUsIHBhdGgsIGZkLCAmc2J1ZiwKKwkJCQkgZ2V0X2NvbnZfZmxhZ3MoZmxhZ3MpKTsKKworCWlmICh3cml0ZV9vYmplY3QpCisJCXJldCA9IHdyaXRlX29iamVjdF9maWxlKHNidWYuYnVmLCBzYnVmLmxlbiwgdHlwZV9uYW1lKE9CSl9CTE9CKSwKKwkJCQkJb2lkKTsKKwllbHNlCisJCXJldCA9IGhhc2hfb2JqZWN0X2ZpbGUodGhlX2hhc2hfYWxnbywgc2J1Zi5idWYsIHNidWYubGVuLAorCQkJCSAgICAgICB0eXBlX25hbWUoT0JKX0JMT0IpLCBvaWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGluZGV4X3BpcGUoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgaW50IGZkLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgc2J1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXQ7CisKKwlpZiAoc3RyYnVmX3JlYWQoJnNidWYsIGZkLCA0MDk2KSA+PSAwKQorCQlyZXQgPSBpbmRleF9tZW0oaXN0YXRlLCBvaWQsIHNidWYuYnVmLCBzYnVmLmxlbiwgdHlwZSwgcGF0aCwgZmxhZ3MpOworCWVsc2UKKwkJcmV0ID0gLTE7CisJc3RyYnVmX3JlbGVhc2UoJnNidWYpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgU01BTExfRklMRV9TSVpFICgzMioxMDI0KQorCitzdGF0aWMgaW50IGluZGV4X2NvcmUoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCSAgICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZkLCBzaXplX3Qgc2l6ZSwKKwkJICAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpwYXRoLAorCQkgICAgICB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgcmV0OworCisJaWYgKCFzaXplKSB7CisJCXJldCA9IGluZGV4X21lbShpc3RhdGUsIG9pZCwgIiIsIHNpemUsIHR5cGUsIHBhdGgsIGZsYWdzKTsKKwl9IGVsc2UgaWYgKHNpemUgPD0gU01BTExfRklMRV9TSVpFKSB7CisJCWNoYXIgKmJ1ZiA9IHhtYWxsb2Moc2l6ZSk7CisJCXNzaXplX3QgcmVhZF9yZXN1bHQgPSByZWFkX2luX2Z1bGwoZmQsIGJ1Ziwgc2l6ZSk7CisJCWlmIChyZWFkX3Jlc3VsdCA8IDApCisJCQlyZXQgPSBlcnJvcl9lcnJubyhfKCJyZWFkIGVycm9yIHdoaWxlIGluZGV4aW5nICVzIiksCisJCQkJCSAgcGF0aCA/IHBhdGggOiAiPHVua25vd24+Iik7CisJCWVsc2UgaWYgKHJlYWRfcmVzdWx0ICE9IHNpemUpCisJCQlyZXQgPSBlcnJvcihfKCJzaG9ydCByZWFkIHdoaWxlIGluZGV4aW5nICVzIiksCisJCQkJICAgIHBhdGggPyBwYXRoIDogIjx1bmtub3duPiIpOworCQllbHNlCisJCQlyZXQgPSBpbmRleF9tZW0oaXN0YXRlLCBvaWQsIGJ1Ziwgc2l6ZSwgdHlwZSwgcGF0aCwgZmxhZ3MpOworCQlmcmVlKGJ1Zik7CisJfSBlbHNlIHsKKwkJdm9pZCAqYnVmID0geG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCQlyZXQgPSBpbmRleF9tZW0oaXN0YXRlLCBvaWQsIGJ1Ziwgc2l6ZSwgdHlwZSwgcGF0aCwgZmxhZ3MpOworCQltdW5tYXAoYnVmLCBzaXplKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgY3JlYXRlcyBvbmUgcGFja2ZpbGUgcGVyIGxhcmdlIGJsb2IgdW5sZXNzIGJ1bGstY2hlY2tpbgorICogbWFjaGluZXJ5IGlzICJwbHVnZ2VkIi4KKyAqCisgKiBUaGlzIGFsc28gYnlwYXNzZXMgdGhlIHVzdWFsICJjb252ZXJ0LXRvLWdpdCIgZGFuY2UsIGFuZCB0aGF0IGlzIG9uCisgKiBwdXJwb3NlLiBXZSBjb3VsZCB3cml0ZSBhIHN0cmVhbWluZyB2ZXJzaW9uIG9mIHRoZSBjb252ZXJ0aW5nCisgKiBmdW5jdGlvbnMgYW5kIGluc2VydCB0aGF0IGJlZm9yZSBmZWVkaW5nIHRoZSBkYXRhIHRvIGZhc3QtaW1wb3J0CisgKiAob3IgZXF1aXZhbGVudCBpbi1jb3JlIEFQSSBkZXNjcmliZWQgYWJvdmUpLiBIb3dldmVyLCB0aGF0IGlzCisgKiBzb21ld2hhdCBjb21wbGljYXRlZCwgYXMgd2UgZG8gbm90IGtub3cgdGhlIHNpemUgb2YgdGhlIGZpbHRlcgorICogcmVzdWx0LCB3aGljaCB3ZSBuZWVkIHRvIGtub3cgYmVmb3JlaGFuZCB3aGVuIHdyaXRpbmcgYSBnaXQgb2JqZWN0LgorICogU2luY2UgdGhlIHByaW1hcnkgbW90aXZhdGlvbiBmb3IgdHJ5aW5nIHRvIHN0cmVhbSBmcm9tIHRoZSB3b3JraW5nCisgKiB0cmVlIGZpbGUgYW5kIHRvIGF2b2lkIG1tYXBpbmcgaXQgaW4gY29yZSBpcyB0byBkZWFsIHdpdGggbGFyZ2UKKyAqIGJpbmFyeSBibG9icywgdGhleSBnZW5lcmFsbHkgZG8gbm90IHdhbnQgdG8gZ2V0IGFueSBjb252ZXJzaW9uLCBhbmQKKyAqIGNhbGxlcnMgc2hvdWxkIGF2b2lkIHRoaXMgY29kZSBwYXRoIHdoZW4gZmlsdGVycyBhcmUgcmVxdWVzdGVkLgorICovCitzdGF0aWMgaW50IGluZGV4X3N0cmVhbShzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmZCwgc2l6ZV90IHNpemUsCisJCQllbnVtIG9iamVjdF90eXBlIHR5cGUsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQl1bnNpZ25lZCBmbGFncykKK3sKKwlyZXR1cm4gaW5kZXhfYnVsa19jaGVja2luKG9pZCwgZmQsIHNpemUsIHR5cGUsIHBhdGgsIGZsYWdzKTsKK30KKworaW50IGluZGV4X2ZkKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJICAgICBpbnQgZmQsIHN0cnVjdCBzdGF0ICpzdCwKKwkgICAgIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgZmxhZ3MpCit7CisJaW50IHJldDsKKworCS8qCisJICogQ2FsbCB4c2l6ZV90KCkgb25seSB3aGVuIG5lZWRlZCB0byBhdm9pZCBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeQorCSAqIGRpZSgpIGZvciBsYXJnZSBmaWxlcy4KKwkgKi8KKwlpZiAodHlwZSA9PSBPQkpfQkxPQiAmJiBwYXRoICYmIHdvdWxkX2NvbnZlcnRfdG9fZ2l0X2ZpbHRlcl9mZChpc3RhdGUsIHBhdGgpKQorCQlyZXQgPSBpbmRleF9zdHJlYW1fY29udmVydF9ibG9iKGlzdGF0ZSwgb2lkLCBmZCwgcGF0aCwgZmxhZ3MpOworCWVsc2UgaWYgKCFTX0lTUkVHKHN0LT5zdF9tb2RlKSkKKwkJcmV0ID0gaW5kZXhfcGlwZShpc3RhdGUsIG9pZCwgZmQsIHR5cGUsIHBhdGgsIGZsYWdzKTsKKwllbHNlIGlmIChzdC0+c3Rfc2l6ZSA8PSBiaWdfZmlsZV90aHJlc2hvbGQgfHwgdHlwZSAhPSBPQkpfQkxPQiB8fAorCQkgKHBhdGggJiYgd291bGRfY29udmVydF90b19naXQoaXN0YXRlLCBwYXRoKSkpCisJCXJldCA9IGluZGV4X2NvcmUoaXN0YXRlLCBvaWQsIGZkLCB4c2l6ZV90KHN0LT5zdF9zaXplKSwKKwkJCQkgdHlwZSwgcGF0aCwgZmxhZ3MpOworCWVsc2UKKwkJcmV0ID0gaW5kZXhfc3RyZWFtKG9pZCwgZmQsIHhzaXplX3Qoc3QtPnN0X3NpemUpLCB0eXBlLCBwYXRoLAorCQkJCSAgIGZsYWdzKTsKKwljbG9zZShmZCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGluZGV4X3BhdGgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkgICAgICAgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKnN0LCB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgZmQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCByYyA9IDA7CisKKwlzd2l0Y2ggKHN0LT5zdF9tb2RlICYgU19JRk1UKSB7CisJY2FzZSBTX0lGUkVHOgorCQlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCQlpZiAoZmQgPCAwKQorCQkJcmV0dXJuIGVycm9yX2Vycm5vKCJvcGVuKFwiJXNcIikiLCBwYXRoKTsKKwkJaWYgKGluZGV4X2ZkKGlzdGF0ZSwgb2lkLCBmZCwgc3QsIE9CSl9CTE9CLCBwYXRoLCBmbGFncykgPCAwKQorCQkJcmV0dXJuIGVycm9yKF8oIiVzOiBmYWlsZWQgdG8gaW5zZXJ0IGludG8gZGF0YWJhc2UiKSwKKwkJCQkgICAgIHBhdGgpOworCQlicmVhazsKKwljYXNlIFNfSUZMTks6CisJCWlmIChzdHJidWZfcmVhZGxpbmsoJnNiLCBwYXRoLCBzdC0+c3Rfc2l6ZSkpCisJCQlyZXR1cm4gZXJyb3JfZXJybm8oInJlYWRsaW5rKFwiJXNcIikiLCBwYXRoKTsKKwkJaWYgKCEoZmxhZ3MgJiBIQVNIX1dSSVRFX09CSkVDVCkpCisJCQloYXNoX29iamVjdF9maWxlKHRoZV9oYXNoX2FsZ28sIHNiLmJ1Ziwgc2IubGVuLAorCQkJCQkgYmxvYl90eXBlLCBvaWQpOworCQllbHNlIGlmICh3cml0ZV9vYmplY3RfZmlsZShzYi5idWYsIHNiLmxlbiwgYmxvYl90eXBlLCBvaWQpKQorCQkJcmMgPSBlcnJvcihfKCIlczogZmFpbGVkIHRvIGluc2VydCBpbnRvIGRhdGFiYXNlIiksIHBhdGgpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlicmVhazsKKwljYXNlIFNfSUZESVI6CisJCXJldHVybiByZXNvbHZlX2dpdGxpbmtfcmVmKHBhdGgsICJIRUFEIiwgb2lkKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZXJyb3IoXygiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIpLCBwYXRoKTsKKwl9CisJcmV0dXJuIHJjOworfQorCitpbnQgcmVhZF9wYWNrX2hlYWRlcihpbnQgZmQsIHN0cnVjdCBwYWNrX2hlYWRlciAqaGVhZGVyKQoreworCWlmIChyZWFkX2luX2Z1bGwoZmQsIGhlYWRlciwgc2l6ZW9mKCpoZWFkZXIpKSAhPSBzaXplb2YoKmhlYWRlcikpCisJCS8qICJlb2YgYmVmb3JlIHBhY2sgaGVhZGVyIHdhcyBmdWxseSByZWFkIiAqLworCQlyZXR1cm4gUEhfRVJST1JfRU9GOworCisJaWYgKGhlYWRlci0+aGRyX3NpZ25hdHVyZSAhPSBodG9ubChQQUNLX1NJR05BVFVSRSkpCisJCS8qICJwcm90b2NvbCBlcnJvciAocGFjayBzaWduYXR1cmUgbWlzbWF0Y2ggZGV0ZWN0ZWQpIiAqLworCQlyZXR1cm4gUEhfRVJST1JfUEFDS19TSUdOQVRVUkU7CisJaWYgKCFwYWNrX3ZlcnNpb25fb2soaGVhZGVyLT5oZHJfdmVyc2lvbikpCisJCS8qICJwcm90b2NvbCBlcnJvciAocGFjayB2ZXJzaW9uIHVuc3VwcG9ydGVkKSIgKi8KKwkJcmV0dXJuIFBIX0VSUk9SX1BST1RPQ09MOworCXJldHVybiAwOworfQorCit2b2lkIGFzc2VydF9vaWRfdHlwZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGVudW0gb2JqZWN0X3R5cGUgZXhwZWN0KQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgb2lkLCBOVUxMKTsKKwlpZiAodHlwZSA8IDApCisJCWRpZShfKCIlcyBpcyBub3QgYSB2YWxpZCBvYmplY3QiKSwgb2lkX3RvX2hleChvaWQpKTsKKwlpZiAodHlwZSAhPSBleHBlY3QpCisJCWRpZShfKCIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIpLCBvaWRfdG9faGV4KG9pZCksCisJCSAgICB0eXBlX25hbWUoZXhwZWN0KSk7Cit9CisKK2ludCBmb3JfZWFjaF9maWxlX2luX29ial9zdWJkaXIodW5zaWduZWQgaW50IHN1YmRpcl9uciwKKwkJCQlzdHJ1Y3Qgc3RyYnVmICpwYXRoLAorCQkJCWVhY2hfbG9vc2Vfb2JqZWN0X2ZuIG9ial9jYiwKKwkJCQllYWNoX2xvb3NlX2NydWZ0X2ZuIGNydWZ0X2NiLAorCQkJCWVhY2hfbG9vc2Vfc3ViZGlyX2ZuIHN1YmRpcl9jYiwKKwkJCQl2b2lkICpkYXRhKQoreworCXNpemVfdCBvcmlnbGVuLCBiYXNlbGVuOworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmRlOworCWludCByID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCWlmIChzdWJkaXJfbnIgPiAweGZmKQorCQlCVUcoImludmFsaWQgbG9vc2Ugb2JqZWN0IHN1YmRpcmVjdG9yeTogJXgiLCBzdWJkaXJfbnIpOworCisJb3JpZ2xlbiA9IHBhdGgtPmxlbjsKKwlzdHJidWZfY29tcGxldGUocGF0aCwgJy8nKTsKKwlzdHJidWZfYWRkZihwYXRoLCAiJTAyeCIsIHN1YmRpcl9ucik7CisKKwlkaXIgPSBvcGVuZGlyKHBhdGgtPmJ1Zik7CisJaWYgKCFkaXIpIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCXIgPSBlcnJvcl9lcnJubyhfKCJ1bmFibGUgdG8gb3BlbiAlcyIpLCBwYXRoLT5idWYpOworCQlzdHJidWZfc2V0bGVuKHBhdGgsIG9yaWdsZW4pOworCQlyZXR1cm4gcjsKKwl9CisKKwlvaWQuaGFzaFswXSA9IHN1YmRpcl9ucjsKKwlzdHJidWZfYWRkY2gocGF0aCwgJy8nKTsKKwliYXNlbGVuID0gcGF0aC0+bGVuOworCisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkpIHsKKwkJc2l6ZV90IG5hbWVsZW47CisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGRlLT5kX25hbWUpKQorCQkJY29udGludWU7CisKKwkJbmFtZWxlbiA9IHN0cmxlbihkZS0+ZF9uYW1lKTsKKwkJc3RyYnVmX3NldGxlbihwYXRoLCBiYXNlbGVuKTsKKwkJc3RyYnVmX2FkZChwYXRoLCBkZS0+ZF9uYW1lLCBuYW1lbGVuKTsKKwkJaWYgKG5hbWVsZW4gPT0gdGhlX2hhc2hfYWxnby0+aGV4c3ogLSAyICYmCisJCSAgICAhaGV4X3RvX2J5dGVzKG9pZC5oYXNoICsgMSwgZGUtPmRfbmFtZSwKKwkJCQkgIHRoZV9oYXNoX2FsZ28tPnJhd3N6IC0gMSkpIHsKKwkJCWlmIChvYmpfY2IpIHsKKwkJCQlyID0gb2JqX2NiKCZvaWQsIHBhdGgtPmJ1ZiwgZGF0YSk7CisJCQkJaWYgKHIpCisJCQkJCWJyZWFrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY3J1ZnRfY2IpIHsKKwkJCXIgPSBjcnVmdF9jYihkZS0+ZF9uYW1lLCBwYXRoLT5idWYsIGRhdGEpOworCQkJaWYgKHIpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJY2xvc2VkaXIoZGlyKTsKKworCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgYmFzZWxlbiAtIDEpOworCWlmICghciAmJiBzdWJkaXJfY2IpCisJCXIgPSBzdWJkaXJfY2Ioc3ViZGlyX25yLCBwYXRoLT5idWYsIGRhdGEpOworCisJc3RyYnVmX3NldGxlbihwYXRoLCBvcmlnbGVuKTsKKworCXJldHVybiByOworfQorCitpbnQgZm9yX2VhY2hfbG9vc2VfZmlsZV9pbl9vYmpkaXJfYnVmKHN0cnVjdCBzdHJidWYgKnBhdGgsCisJCQkgICAgZWFjaF9sb29zZV9vYmplY3RfZm4gb2JqX2NiLAorCQkJICAgIGVhY2hfbG9vc2VfY3J1ZnRfZm4gY3J1ZnRfY2IsCisJCQkgICAgZWFjaF9sb29zZV9zdWJkaXJfZm4gc3ViZGlyX2NiLAorCQkJICAgIHZvaWQgKmRhdGEpCit7CisJaW50IHIgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCXIgPSBmb3JfZWFjaF9maWxlX2luX29ial9zdWJkaXIoaSwgcGF0aCwgb2JqX2NiLCBjcnVmdF9jYiwKKwkJCQkJCXN1YmRpcl9jYiwgZGF0YSk7CisJCWlmIChyKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHI7Cit9CisKK2ludCBmb3JfZWFjaF9sb29zZV9maWxlX2luX29iamRpcihjb25zdCBjaGFyICpwYXRoLAorCQkJCSAgZWFjaF9sb29zZV9vYmplY3RfZm4gb2JqX2NiLAorCQkJCSAgZWFjaF9sb29zZV9jcnVmdF9mbiBjcnVmdF9jYiwKKwkJCQkgIGVhY2hfbG9vc2Vfc3ViZGlyX2ZuIHN1YmRpcl9jYiwKKwkJCQkgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcjsKKworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcGF0aCk7CisJciA9IGZvcl9lYWNoX2xvb3NlX2ZpbGVfaW5fb2JqZGlyX2J1ZigmYnVmLCBvYmpfY2IsIGNydWZ0X2NiLAorCQkJCQkgICAgICBzdWJkaXJfY2IsIGRhdGEpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHI7Cit9CisKK2ludCBmb3JfZWFjaF9sb29zZV9vYmplY3QoZWFjaF9sb29zZV9vYmplY3RfZm4gY2IsIHZvaWQgKmRhdGEsCisJCQkgIGVudW0gZm9yX2VhY2hfb2JqZWN0X2ZsYWdzIGZsYWdzKQoreworCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGI7CisKKwlwcmVwYXJlX2FsdF9vZGIodGhlX3JlcG9zaXRvcnkpOworCWZvciAob2RiID0gdGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPm9kYjsgb2RiOyBvZGIgPSBvZGItPm5leHQpIHsKKwkJaW50IHIgPSBmb3JfZWFjaF9sb29zZV9maWxlX2luX29iamRpcihvZGItPnBhdGgsIGNiLCBOVUxMLAorCQkJCQkJICAgICAgTlVMTCwgZGF0YSk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisKKwkJaWYgKGZsYWdzICYgRk9SX0VBQ0hfT0JKRUNUX0xPQ0FMX09OTFkpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcHBlbmRfbG9vc2Vfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICAgICB2b2lkICpkYXRhKQoreworCW9pZF9hcnJheV9hcHBlbmQoZGF0YSwgb2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IG9pZF9hcnJheSAqb2RiX2xvb3NlX2NhY2hlKHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIsCisJCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaW50IHN1YmRpcl9uciA9IG9pZC0+aGFzaFswXTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKHN1YmRpcl9uciA8IDAgfHwKKwkgICAgc3ViZGlyX25yID49IEFSUkFZX1NJWkUob2RiLT5sb29zZV9vYmplY3RzX3N1YmRpcl9zZWVuKSkKKwkJQlVHKCJzdWJkaXJfbnIgb3V0IG9mIHJhbmdlIik7CisKKwlpZiAob2RiLT5sb29zZV9vYmplY3RzX3N1YmRpcl9zZWVuW3N1YmRpcl9ucl0pCisJCXJldHVybiAmb2RiLT5sb29zZV9vYmplY3RzX2NhY2hlW3N1YmRpcl9ucl07CisKKwlzdHJidWZfYWRkc3RyKCZidWYsIG9kYi0+cGF0aCk7CisJZm9yX2VhY2hfZmlsZV9pbl9vYmpfc3ViZGlyKHN1YmRpcl9uciwgJmJ1ZiwKKwkJCQkgICAgYXBwZW5kX2xvb3NlX29iamVjdCwKKwkJCQkgICAgTlVMTCwgTlVMTCwKKwkJCQkgICAgJm9kYi0+bG9vc2Vfb2JqZWN0c19jYWNoZVtzdWJkaXJfbnJdKTsKKwlvZGItPmxvb3NlX29iamVjdHNfc3ViZGlyX3NlZW5bc3ViZGlyX25yXSA9IDE7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuICZvZGItPmxvb3NlX29iamVjdHNfY2FjaGVbc3ViZGlyX25yXTsKK30KKwordm9pZCBvZGJfY2xlYXJfbG9vc2VfY2FjaGUoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9kYi0+bG9vc2Vfb2JqZWN0c19jYWNoZSk7IGkrKykKKwkJb2lkX2FycmF5X2NsZWFyKCZvZGItPmxvb3NlX29iamVjdHNfY2FjaGVbaV0pOworCW1lbXNldCgmb2RiLT5sb29zZV9vYmplY3RzX3N1YmRpcl9zZWVuLCAwLAorCSAgICAgICBzaXplb2Yob2RiLT5sb29zZV9vYmplY3RzX3N1YmRpcl9zZWVuKSk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfc3RyZWFtX29pZChnaXRfenN0cmVhbSAqc3RyZWFtLAorCQkJICAgIGNvbnN0IGNoYXIgKmhkciwKKwkJCSAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpleHBlY3RlZF9vaWQpCit7CisJZ2l0X2hhc2hfY3R4IGM7CisJc3RydWN0IG9iamVjdF9pZCByZWFsX29pZDsKKwl1bnNpZ25lZCBjaGFyIGJ1Zls0MDk2XTsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3JlYWQ7CisJaW50IHN0YXR1cyA9IFpfT0s7CisKKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZjKTsKKwl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmMsIGhkciwgc3RyZWFtLT50b3RhbF9vdXQpOworCisJLyoKKwkgKiBXZSBhbHJlYWR5IHJlYWQgc29tZSBieXRlcyBpbnRvIGhkciwgYnV0IHRoZSBvbmVzIHVwIHRvIHRoZSBOVUwKKwkgKiBkbyBub3QgY291bnQgYWdhaW5zdCB0aGUgb2JqZWN0J3MgY29udGVudCBzaXplLgorCSAqLworCXRvdGFsX3JlYWQgPSBzdHJlYW0tPnRvdGFsX291dCAtIHN0cmxlbihoZHIpIC0gMTsKKworCS8qCisJICogVGhpcyBzaXplIGNvbXBhcmlzb24gbXVzdCBiZSAiPD0iIHRvIHJlYWQgdGhlIGZpbmFsIHpsaWIgcGFja2V0czsKKwkgKiBzZWUgdGhlIGNvbW1lbnQgaW4gdW5wYWNrX2xvb3NlX3Jlc3QgZm9yIGRldGFpbHMuCisJICovCisJd2hpbGUgKHRvdGFsX3JlYWQgPD0gc2l6ZSAmJgorCSAgICAgICAoc3RhdHVzID09IFpfT0sgfHwKKwkJKHN0YXR1cyA9PSBaX0JVRl9FUlJPUiAmJiAhc3RyZWFtLT5hdmFpbF9vdXQpKSkgeworCQlzdHJlYW0tPm5leHRfb3V0ID0gYnVmOworCQlzdHJlYW0tPmF2YWlsX291dCA9IHNpemVvZihidWYpOworCQlpZiAoc2l6ZSAtIHRvdGFsX3JlYWQgPCBzdHJlYW0tPmF2YWlsX291dCkKKwkJCXN0cmVhbS0+YXZhaWxfb3V0ID0gc2l6ZSAtIHRvdGFsX3JlYWQ7CisJCXN0YXR1cyA9IGdpdF9pbmZsYXRlKHN0cmVhbSwgWl9GSU5JU0gpOworCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmMsIGJ1Ziwgc3RyZWFtLT5uZXh0X291dCAtIGJ1Zik7CisJCXRvdGFsX3JlYWQgKz0gc3RyZWFtLT5uZXh0X291dCAtIGJ1ZjsKKwl9CisJZ2l0X2luZmxhdGVfZW5kKHN0cmVhbSk7CisKKwlpZiAoc3RhdHVzICE9IFpfU1RSRUFNX0VORCkgeworCQllcnJvcihfKCJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIiksIG9pZF90b19oZXgoZXhwZWN0ZWRfb2lkKSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHN0cmVhbS0+YXZhaWxfaW4pIHsKKwkJZXJyb3IoXygiZ2FyYmFnZSBhdCBlbmQgb2YgbG9vc2Ugb2JqZWN0ICclcyciKSwKKwkJICAgICAgb2lkX3RvX2hleChleHBlY3RlZF9vaWQpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXRoZV9oYXNoX2FsZ28tPmZpbmFsX2ZuKHJlYWxfb2lkLmhhc2gsICZjKTsKKwlpZiAoIW9pZGVxKGV4cGVjdGVkX29pZCwgJnJlYWxfb2lkKSkgeworCQllcnJvcihfKCJoYXNoIG1pc21hdGNoIGZvciAlcyAoZXhwZWN0ZWQgJXMpIiksIHBhdGgsCisJCSAgICAgIG9pZF90b19oZXgoZXhwZWN0ZWRfb2lkKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJlYWRfbG9vc2Vfb2JqZWN0KGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmV4cGVjdGVkX29pZCwKKwkJICAgICAgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJICAgICAgdm9pZCAqKmNvbnRlbnRzKQoreworCWludCByZXQgPSAtMTsKKwl2b2lkICptYXAgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgbWFwc2l6ZTsKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJY2hhciBoZHJbTUFYX0hFQURFUl9MRU5dOworCisJKmNvbnRlbnRzID0gTlVMTDsKKworCW1hcCA9IG1hcF9sb29zZV9vYmplY3RfMSh0aGVfcmVwb3NpdG9yeSwgcGF0aCwgTlVMTCwgJm1hcHNpemUpOworCWlmICghbWFwKSB7CisJCWVycm9yX2Vycm5vKF8oInVuYWJsZSB0byBtbWFwICVzIiksIHBhdGgpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodW5wYWNrX2xvb3NlX2hlYWRlcigmc3RyZWFtLCBtYXAsIG1hcHNpemUsIGhkciwgc2l6ZW9mKGhkcikpIDwgMCkgeworCQllcnJvcihfKCJ1bmFibGUgdG8gdW5wYWNrIGhlYWRlciBvZiAlcyIpLCBwYXRoKTsKKwkJZ290byBvdXQ7CisJfQorCisJKnR5cGUgPSBwYXJzZV9sb29zZV9oZWFkZXIoaGRyLCBzaXplKTsKKwlpZiAoKnR5cGUgPCAwKSB7CisJCWVycm9yKF8oInVuYWJsZSB0byBwYXJzZSBoZWFkZXIgb2YgJXMiKSwgcGF0aCk7CisJCWdpdF9pbmZsYXRlX2VuZCgmc3RyZWFtKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCp0eXBlID09IE9CSl9CTE9CICYmICpzaXplID4gYmlnX2ZpbGVfdGhyZXNob2xkKSB7CisJCWlmIChjaGVja19zdHJlYW1fb2lkKCZzdHJlYW0sIGhkciwgKnNpemUsIHBhdGgsIGV4cGVjdGVkX29pZCkgPCAwKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJKmNvbnRlbnRzID0gdW5wYWNrX2xvb3NlX3Jlc3QoJnN0cmVhbSwgaGRyLCAqc2l6ZSwgZXhwZWN0ZWRfb2lkKTsKKwkJaWYgKCEqY29udGVudHMpIHsKKwkJCWVycm9yKF8oInVuYWJsZSB0byB1bnBhY2sgY29udGVudHMgb2YgJXMiKSwgcGF0aCk7CisJCQlnaXRfaW5mbGF0ZV9lbmQoJnN0cmVhbSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoY2hlY2tfb2JqZWN0X3NpZ25hdHVyZSh0aGVfcmVwb3NpdG9yeSwgZXhwZWN0ZWRfb2lkLAorCQkJCQkgICAqY29udGVudHMsICpzaXplLAorCQkJCQkgICB0eXBlX25hbWUoKnR5cGUpKSkgeworCQkJZXJyb3IoXygiaGFzaCBtaXNtYXRjaCBmb3IgJXMgKGV4cGVjdGVkICVzKSIpLCBwYXRoLAorCQkJICAgICAgb2lkX3RvX2hleChleHBlY3RlZF9vaWQpKTsKKwkJCWZyZWUoKmNvbnRlbnRzKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJcmV0ID0gMDsgLyogZXZlcnl0aGluZyBjaGVja3Mgb3V0ICovCisKK291dDoKKwlpZiAobWFwKQorCQltdW5tYXAobWFwLCBtYXBzaXplKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvc2hhMS1sb29rdXAuYyBiL3NoYTEtbG9va3VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxODU4NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYTEtbG9va3VwLmMKQEAgLTAsMCArMSwxMjkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisKK3N0YXRpYyB1aW50MzJfdCB0YWtlMihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXJldHVybiAoKHNoYTFbMF0gPDwgOCkgfCBzaGExWzFdKTsKK30KKworLyoKKyAqIENvbnZlbnRpb25hbCBiaW5hcnkgc2VhcmNoIGxvb3AgbG9va3MgbGlrZSB0aGlzOgorICoKKyAqICAgICAgZG8geworICogICAgICAgICAgICAgIGludCBtaSA9IGxvICsgKGhpIC0gbG8pIC8gMjsKKyAqICAgICAgICAgICAgICBpbnQgY21wID0gImVudHJ5IHBvaW50ZWQgYXQgYnkgbWkiIG1pbnVzICJ0YXJnZXQiOworICogICAgICAgICAgICAgIGlmICghY21wKQorICogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtaSBpcyB0aGUgd2FudGVkIG9uZSkKKyAqICAgICAgICAgICAgICBpZiAoY21wID4gMCkKKyAqICAgICAgICAgICAgICAgICAgICAgIGhpID0gbWk7ICJtaSBpcyBsYXJnZXIgdGhhbiB0YXJnZXQiCisgKiAgICAgICAgICAgICAgZWxzZQorICogICAgICAgICAgICAgICAgICAgICAgbG8gPSBtaSsxOyAibWkgaXMgc21hbGxlciB0aGFuIHRhcmdldCIKKyAqICAgICAgfSB3aGlsZSAobG8gPCBoaSk7CisgKgorICogVGhlIGludmFyaWFudHMgYXJlOgorICoKKyAqIC0gV2hlbiBlbnRlcmluZyB0aGUgbG9vcCwgbG8gcG9pbnRzIGF0IGEgc2xvdCB0aGF0IGlzIG5ldmVyCisgKiAgIGFib3ZlIHRoZSB0YXJnZXQgKGl0IGNvdWxkIGJlIGF0IHRoZSB0YXJnZXQpLCBoaSBwb2ludHMgYXQgYQorICogICBzbG90IHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBhYm92ZSB0aGUgdGFyZ2V0IChpdCBjYW4gbmV2ZXIKKyAqICAgYmUgYXQgdGhlIHRhcmdldCkuCisgKgorICogLSBXZSBmaW5kIGEgcG9pbnQgJ21pJyBiZXR3ZWVuIGxvIGFuZCBoaSAobWkgY291bGQgYmUgdGhlIHNhbWUKKyAqICAgYXMgbG8sIGJ1dCBuZXZlciBjYW4gYmUgdGhlIHNhbWUgYXMgaGkpLCBhbmQgY2hlY2sgaWYgaXQgaGl0cworICogICB0aGUgdGFyZ2V0LiAgVGhlcmUgYXJlIHRocmVlIGNhc2VzOgorICoKKyAqICAgIC0gaWYgaXQgaXMgYSBoaXQsIHdlIGFyZSBoYXBweS4KKyAqCisgKiAgICAtIGlmIGl0IGlzIHN0cmljdGx5IGhpZ2hlciB0aGFuIHRoZSB0YXJnZXQsIHdlIHVwZGF0ZSBoaSB3aXRoCisgKiAgICAgIGl0LgorICoKKyAqICAgIC0gaWYgaXQgaXMgc3RyaWN0bHkgbG93ZXIgdGhhbiB0aGUgdGFyZ2V0LCB3ZSB1cGRhdGUgbG8gdG8gYmUKKyAqICAgICAgb25lIHNsb3QgYWZ0ZXIgaXQsIGJlY2F1c2Ugd2UgYWxsb3cgbG8gdG8gYmUgYXQgdGhlIHRhcmdldC4KKyAqCisgKiBXaGVuIGNob29zaW5nICdtaScsIHdlIGRvIG5vdCBoYXZlIHRvIHRha2UgdGhlICJtaWRkbGUiIGJ1dAorICogYW55d2hlcmUgaW4gYmV0d2VlbiBsbyBhbmQgaGksIGFzIGxvbmcgYXMgbG8gPD0gbWkgPCBoaSBpcworICogc2F0aXNmaWVkLiAgV2hlbiB3ZSBzb21laG93IGtub3cgdGhhdCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUKKyAqIHRhcmdldCBhbmQgbG8gaXMgbXVjaCBzaG9ydGVyIHRoYW4gdGhlIHRhcmdldCBhbmQgaGksIHdlIGNvdWxkCisgKiBwaWNrIG1pIHRoYXQgaXMgbXVjaCBjbG9zZXIgdG8gbG8gdGhhbiB0aGUgbWlkd2F5LgorICovCisvKgorICogVGhlIHRhYmxlIHNob3VsZCBjb250YWluICJuciIgZWxlbWVudHMuCisgKiBUaGUgc2hhMSBvZiBlbGVtZW50IGkgKGJldHdlZW4gMCBhbmQgbnIgLSAxKSBzaG91bGQgYmUgcmV0dXJuZWQKKyAqIGJ5ICJmbihpLCB0YWJsZSkiLgorICovCitpbnQgc2hhMV9wb3MoY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgdm9pZCAqdGFibGUsIHNpemVfdCBuciwKKwkgICAgIHNoYTFfYWNjZXNzX2ZuIGZuKQoreworCXNpemVfdCBoaSA9IG5yOworCXNpemVfdCBsbyA9IDA7CisJc2l6ZV90IG1pID0gMDsKKworCWlmICghbnIpCisJCXJldHVybiAtMTsKKworCWlmIChuciAhPSAxKSB7CisJCXNpemVfdCBsb3YsIGhpdiwgbWl2LCBvZnM7CisKKwkJZm9yIChvZnMgPSAwOyBvZnMgPCB0aGVfaGFzaF9hbGdvLT5yYXdzeiAtIDI7IG9mcyArPSAyKSB7CisJCQlsb3YgPSB0YWtlMihmbigwLCB0YWJsZSkgKyBvZnMpOworCQkJaGl2ID0gdGFrZTIoZm4obnIgLSAxLCB0YWJsZSkgKyBvZnMpOworCQkJbWl2ID0gdGFrZTIoaGFzaCArIG9mcyk7CisJCQlpZiAobWl2IDwgbG92KQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChoaXYgPCBtaXYpCisJCQkJcmV0dXJuIGluZGV4X3Bvc190b19pbnNlcnRfcG9zKG5yKTsKKwkJCWlmIChsb3YgIT0gaGl2KSB7CisJCQkJLyoKKwkJCQkgKiBBdCB0aGlzIHBvaW50IG1pdiBjb3VsZCBiZSBlcXVhbAorCQkJCSAqIHRvIGhpdiAoYnV0IHNoYTEgY291bGQgc3RpbGwgYmUgaGlnaGVyKTsKKwkJCQkgKiB0aGUgaW52YXJpYW50IG9mIChtaSA8IGhpKSBzaG91bGQgYmUKKwkJCQkgKiBrZXB0LgorCQkJCSAqLworCQkJCW1pID0gKG5yIC0gMSkgKiAobWl2IC0gbG92KSAvIChoaXYgLSBsb3YpOworCQkJCWlmIChsbyA8PSBtaSAmJiBtaSA8IGhpKQorCQkJCQlicmVhazsKKwkJCQlCVUcoImFzc2VydGlvbiBmYWlsZWQgaW4gYmluYXJ5IHNlYXJjaCIpOworCQkJfQorCQl9CisJfQorCisJZG8geworCQlpbnQgY21wOworCQljbXAgPSBoYXNoY21wKGZuKG1pLCB0YWJsZSksIGhhc2gpOworCQlpZiAoIWNtcCkKKwkJCXJldHVybiBtaTsKKwkJaWYgKGNtcCA+IDApCisJCQloaSA9IG1pOworCQllbHNlCisJCQlsbyA9IG1pICsgMTsKKwkJbWkgPSBsbyArIChoaSAtIGxvKSAvIDI7CisJfSB3aGlsZSAobG8gPCBoaSk7CisJcmV0dXJuIGluZGV4X3Bvc190b19pbnNlcnRfcG9zKGxvKTsKK30KKworaW50IGJzZWFyY2hfaGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCB1aW50MzJfdCAqZmFub3V0X25ibywKKwkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhYmxlLCBzaXplX3Qgc3RyaWRlLCB1aW50MzJfdCAqcmVzdWx0KQoreworCXVpbnQzMl90IGhpLCBsbzsKKworCWhpID0gbnRvaGwoZmFub3V0X25ib1sqc2hhMV0pOworCWxvID0gKCgqc2hhMSA9PSAweDApID8gMCA6IG50b2hsKGZhbm91dF9uYm9bKnNoYTEgLSAxXSkpOworCisJd2hpbGUgKGxvIDwgaGkpIHsKKwkJdW5zaWduZWQgbWkgPSBsbyArIChoaSAtIGxvKSAvIDI7CisJCWludCBjbXAgPSBoYXNoY21wKHRhYmxlICsgbWkgKiBzdHJpZGUsIHNoYTEpOworCisJCWlmICghY21wKSB7CisJCQlpZiAocmVzdWx0KQorCQkJCSpyZXN1bHQgPSBtaTsKKwkJCXJldHVybiAxOworCQl9CisJCWlmIChjbXAgPiAwKQorCQkJaGkgPSBtaTsKKwkJZWxzZQorCQkJbG8gPSBtaSArIDE7CisJfQorCisJaWYgKHJlc3VsdCkKKwkJKnJlc3VsdCA9IGxvOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc2hhMS1sb29rdXAuaCBiL3NoYTEtbG9va3VwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFmY2QwMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYTEtbG9va3VwLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBTSEExX0xPT0tVUF9ICisjZGVmaW5lIFNIQTFfTE9PS1VQX0gKKwordHlwZWRlZiBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExX2FjY2Vzc19mbihzaXplX3QgaW5kZXgsIHZvaWQgKnRhYmxlKTsKKworaW50IHNoYTFfcG9zKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJICAgICB2b2lkICp0YWJsZSwKKwkgICAgIHNpemVfdCBuciwKKwkgICAgIHNoYTFfYWNjZXNzX2ZuIGZuKTsKKworLyoKKyAqIFNlYXJjaGVzIGZvciBzaGExIGluIHRhYmxlLCB1c2luZyB0aGUgZ2l2ZW4gZmFub3V0IHRhYmxlIHRvIGRldGVybWluZSB0aGUKKyAqIGludGVydmFsIHRvIHNlYXJjaCwgdGhlbiB1c2luZyBiaW5hcnkgc2VhcmNoLiBSZXR1cm5zIDEgaWYgZm91bmQsIDAgaWYgbm90LgorICoKKyAqIFRha2VzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAqCisgKiAgLSBzaGExOiB0aGUgaGFzaCB0byBzZWFyY2ggZm9yCisgKiAgLSBmYW5vdXRfbmJvOiBhIDI1Ni1lbGVtZW50IGFycmF5IG9mIE5FVFdPUkstb3JkZXIgMzItYml0IGludGVnZXJzOyB0aGUKKyAqICAgIGludGVnZXIgYXQgcG9zaXRpb24gaSByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGFibGUgd2hvc2UKKyAqICAgIGZpcnN0IGJ5dGUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGkKKyAqICAtIHRhYmxlOiBhIHNvcnRlZCBsaXN0IG9mIGhhc2hlcyB3aXRoIG9wdGlvbmFsIGV4dHJhIGluZm9ybWF0aW9uIGluIGJldHdlZW4KKyAqICAtIHN0cmlkZTogZGlzdGFuY2UgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgZWxlbWVudHMgaW4gdGFibGUgKHNob3VsZCBiZQorICogICAgR0lUX01BWF9SQVdTWiBvciBncmVhdGVyKQorICogIC0gcmVzdWx0OiBpZiBub3QgTlVMTCwgdGhpcyBmdW5jdGlvbiBzdG9yZXMgdGhlIGVsZW1lbnQgaW5kZXggb2YgdGhlCisgKiAgICBwb3NpdGlvbiBmb3VuZCAoaWYgdGhlIHNlYXJjaCBpcyBzdWNjZXNzZnVsKSBvciB0aGUgaW5kZXggb2YgdGhlIGxlYXN0CisgKiAgICBlbGVtZW50IHRoYXQgaXMgZ3JlYXRlciB0aGFuIHNoYTEgKGlmIHRoZSBzZWFyY2ggaXMgbm90IHN1Y2Nlc3NmdWwpCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBmYW5vdXQgdGFibGUuCisgKi8KK2ludCBic2VhcmNoX2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgdWludDMyX3QgKmZhbm91dF9uYm8sCisJCSBjb25zdCB1bnNpZ25lZCBjaGFyICp0YWJsZSwgc2l6ZV90IHN0cmlkZSwgdWludDMyX3QgKnJlc3VsdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NoYTEtbmFtZS5jIGIvc2hhMS1uYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4Y2I1MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYTEtbmFtZS5jCkBAIC0wLDAgKzEsMTk0MSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAib2lkLWFycmF5LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAibWlkeC5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorCitzdGF0aWMgaW50IGdldF9vaWRfb25lbGluZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqLCBzdHJ1Y3Qgb2JqZWN0X2lkICosIHN0cnVjdCBjb21taXRfbGlzdCAqKTsKKwordHlwZWRlZiBpbnQgKCpkaXNhbWJpZ3VhdGVfaGludF9mbikoc3RydWN0IHJlcG9zaXRvcnkgKiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqLCB2b2lkICopOworCitzdHJ1Y3QgZGlzYW1iaWd1YXRlX3N0YXRlIHsKKwlpbnQgbGVuOyAvKiBsZW5ndGggb2YgcHJlZml4IGluIGhleCBjaGFycyAqLworCWNoYXIgaGV4X3BmeFtHSVRfTUFYX0hFWFNaICsgMV07CisJc3RydWN0IG9iamVjdF9pZCBiaW5fcGZ4OworCisJc3RydWN0IHJlcG9zaXRvcnkgKnJlcG87CisJZGlzYW1iaWd1YXRlX2hpbnRfZm4gZm47CisJdm9pZCAqY2JfZGF0YTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGNhbmRpZGF0ZTsKKwl1bnNpZ25lZCBjYW5kaWRhdGVfZXhpc3RzOjE7CisJdW5zaWduZWQgY2FuZGlkYXRlX2NoZWNrZWQ6MTsKKwl1bnNpZ25lZCBjYW5kaWRhdGVfb2s6MTsKKwl1bnNpZ25lZCBkaXNhbWJpZ3VhdGVfZm5fdXNlZDoxOworCXVuc2lnbmVkIGFtYmlndW91czoxOworCXVuc2lnbmVkIGFsd2F5c19jYWxsX2ZuOjE7Cit9OworCitzdGF0aWMgdm9pZCB1cGRhdGVfY2FuZGlkYXRlcyhzdHJ1Y3QgZGlzYW1iaWd1YXRlX3N0YXRlICpkcywgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY3VycmVudCkKK3sKKwlpZiAoZHMtPmFsd2F5c19jYWxsX2ZuKSB7CisJCWRzLT5hbWJpZ3VvdXMgPSBkcy0+Zm4oZHMtPnJlcG8sIGN1cnJlbnQsIGRzLT5jYl9kYXRhKSA/IDEgOiAwOworCQlyZXR1cm47CisJfQorCWlmICghZHMtPmNhbmRpZGF0ZV9leGlzdHMpIHsKKwkJLyogdGhpcyBpcyB0aGUgZmlyc3QgY2FuZGlkYXRlICovCisJCW9pZGNweSgmZHMtPmNhbmRpZGF0ZSwgY3VycmVudCk7CisJCWRzLT5jYW5kaWRhdGVfZXhpc3RzID0gMTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAob2lkZXEoJmRzLT5jYW5kaWRhdGUsIGN1cnJlbnQpKSB7CisJCS8qIHRoZSBzYW1lIGFzIHdoYXQgd2UgYWxyZWFkeSBoYXZlIHNlZW4gKi8KKwkJcmV0dXJuOworCX0KKworCWlmICghZHMtPmZuKSB7CisJCS8qIGNhbm5vdCBkaXNhbWJpZ3VhdGUgYmV0d2VlbiBkcy0+Y2FuZGlkYXRlIGFuZCBjdXJyZW50ICovCisJCWRzLT5hbWJpZ3VvdXMgPSAxOworCQlyZXR1cm47CisJfQorCisJaWYgKCFkcy0+Y2FuZGlkYXRlX2NoZWNrZWQpIHsKKwkJZHMtPmNhbmRpZGF0ZV9vayA9IGRzLT5mbihkcy0+cmVwbywgJmRzLT5jYW5kaWRhdGUsIGRzLT5jYl9kYXRhKTsKKwkJZHMtPmRpc2FtYmlndWF0ZV9mbl91c2VkID0gMTsKKwkJZHMtPmNhbmRpZGF0ZV9jaGVja2VkID0gMTsKKwl9CisKKwlpZiAoIWRzLT5jYW5kaWRhdGVfb2spIHsKKwkJLyogZGlzY2FyZCB0aGUgY2FuZGlkYXRlOyB3ZSBrbm93IGl0IGRvZXMgbm90IHNhdGlzZnkgZm4gKi8KKwkJb2lkY3B5KCZkcy0+Y2FuZGlkYXRlLCBjdXJyZW50KTsKKwkJZHMtPmNhbmRpZGF0ZV9jaGVja2VkID0gMDsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHdlIHJlYWNoIHRoaXMgcG9pbnQsIHdlIGtub3cgZHMtPmNhbmRpZGF0ZSBzYXRpc2ZpZXMgZm4gKi8KKwlpZiAoZHMtPmZuKGRzLT5yZXBvLCBjdXJyZW50LCBkcy0+Y2JfZGF0YSkpIHsKKwkJLyoKKwkJICogaWYgYm90aCBjdXJyZW50IGFuZCBjYW5kaWRhdGUgc2F0aXNmeSBmbiwgd2UgY2Fubm90CisJCSAqIGRpc2FtYmlndWF0ZS4KKwkJICovCisJCWRzLT5jYW5kaWRhdGVfb2sgPSAwOworCQlkcy0+YW1iaWd1b3VzID0gMTsKKwl9CisKKwkvKiBvdGhlcndpc2UsIGN1cnJlbnQgY2FuIGJlIGRpc2NhcmRlZCBhbmQgY2FuZGlkYXRlIGlzIHN0aWxsIGdvb2QgKi8KK30KKworc3RhdGljIGludCBtYXRjaF9zaGEodW5zaWduZWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqKTsKKworc3RhdGljIHZvaWQgZmluZF9zaG9ydF9vYmplY3RfZmlsZW5hbWUoc3RydWN0IGRpc2FtYmlndWF0ZV9zdGF0ZSAqZHMpCit7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYjsKKworCWZvciAob2RiID0gZHMtPnJlcG8tPm9iamVjdHMtPm9kYjsgb2RiICYmICFkcy0+YW1iaWd1b3VzOyBvZGIgPSBvZGItPm5leHQpIHsKKwkJaW50IHBvczsKKwkJc3RydWN0IG9pZF9hcnJheSAqbG9vc2Vfb2JqZWN0czsKKworCQlsb29zZV9vYmplY3RzID0gb2RiX2xvb3NlX2NhY2hlKG9kYiwgJmRzLT5iaW5fcGZ4KTsKKwkJcG9zID0gb2lkX2FycmF5X2xvb2t1cChsb29zZV9vYmplY3RzLCAmZHMtPmJpbl9wZngpOworCQlpZiAocG9zIDwgMCkKKwkJCXBvcyA9IC0xIC0gcG9zOworCQl3aGlsZSAoIWRzLT5hbWJpZ3VvdXMgJiYgcG9zIDwgbG9vc2Vfb2JqZWN0cy0+bnIpIHsKKwkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwkJCW9pZCA9IGxvb3NlX29iamVjdHMtPm9pZCArIHBvczsKKwkJCWlmICghbWF0Y2hfc2hhKGRzLT5sZW4sIGRzLT5iaW5fcGZ4Lmhhc2gsIG9pZC0+aGFzaCkpCisJCQkJYnJlYWs7CisJCQl1cGRhdGVfY2FuZGlkYXRlcyhkcywgb2lkKTsKKwkJCXBvcysrOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IG1hdGNoX3NoYSh1bnNpZ25lZCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIpCit7CisJZG8geworCQlpZiAoKmEgIT0gKmIpCisJCQlyZXR1cm4gMDsKKwkJYSsrOworCQliKys7CisJCWxlbiAtPSAyOworCX0gd2hpbGUgKGxlbiA+IDEpOworCWlmIChsZW4pCisJCWlmICgoKmEgXiAqYikgJiAweGYwKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHVuaXF1ZV9pbl9taWR4KHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLAorCQkJICAgc3RydWN0IGRpc2FtYmlndWF0ZV9zdGF0ZSAqZHMpCit7CisJdWludDMyX3QgbnVtLCBpLCBmaXJzdCA9IDA7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY3VycmVudCA9IE5VTEw7CisJbnVtID0gbS0+bnVtX29iamVjdHM7CisKKwlpZiAoIW51bSkKKwkJcmV0dXJuOworCisJYnNlYXJjaF9taWR4KCZkcy0+YmluX3BmeCwgbSwgJmZpcnN0KTsKKworCS8qCisJICogQXQgdGhpcyBwb2ludCwgImZpcnN0IiBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGxvd2VzdCBvYmplY3QKKwkgKiB3aXRoIGFuIG9iamVjdCBuYW1lIHRoYXQgY291bGQgbWF0Y2ggImJpbl9wZngiLiAgU2VlIGlmIHdlIGhhdmUKKwkgKiAwLCAxIG9yIG1vcmUgb2JqZWN0cyB0aGF0IGFjdHVhbGx5IG1hdGNoKGVzKS4KKwkgKi8KKwlmb3IgKGkgPSBmaXJzdDsgaSA8IG51bSAmJiAhZHMtPmFtYmlndW91czsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljdXJyZW50ID0gbnRoX21pZHhlZF9vYmplY3Rfb2lkKCZvaWQsIG0sIGkpOworCQlpZiAoIW1hdGNoX3NoYShkcy0+bGVuLCBkcy0+YmluX3BmeC5oYXNoLCBjdXJyZW50LT5oYXNoKSkKKwkJCWJyZWFrOworCQl1cGRhdGVfY2FuZGlkYXRlcyhkcywgY3VycmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1bmlxdWVfaW5fcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCSAgIHN0cnVjdCBkaXNhbWJpZ3VhdGVfc3RhdGUgKmRzKQoreworCXVpbnQzMl90IG51bSwgaSwgZmlyc3QgPSAwOworCisJaWYgKHAtPm11bHRpX3BhY2tfaW5kZXgpCisJCXJldHVybjsKKworCWlmIChvcGVuX3BhY2tfaW5kZXgocCkgfHwgIXAtPm51bV9vYmplY3RzKQorCQlyZXR1cm47CisKKwludW0gPSBwLT5udW1fb2JqZWN0czsKKwlic2VhcmNoX3BhY2soJmRzLT5iaW5fcGZ4LCBwLCAmZmlyc3QpOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCAiZmlyc3QiIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgbG93ZXN0IG9iamVjdAorCSAqIHdpdGggYW4gb2JqZWN0IG5hbWUgdGhhdCBjb3VsZCBtYXRjaCAiYmluX3BmeCIuICBTZWUgaWYgd2UgaGF2ZQorCSAqIDAsIDEgb3IgbW9yZSBvYmplY3RzIHRoYXQgYWN0dWFsbHkgbWF0Y2goZXMpLgorCSAqLworCWZvciAoaSA9IGZpcnN0OyBpIDwgbnVtICYmICFkcy0+YW1iaWd1b3VzOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCW50aF9wYWNrZWRfb2JqZWN0X2lkKCZvaWQsIHAsIGkpOworCQlpZiAoIW1hdGNoX3NoYShkcy0+bGVuLCBkcy0+YmluX3BmeC5oYXNoLCBvaWQuaGFzaCkpCisJCQlicmVhazsKKwkJdXBkYXRlX2NhbmRpZGF0ZXMoZHMsICZvaWQpOworCX0KK30KKworc3RhdGljIHZvaWQgZmluZF9zaG9ydF9wYWNrZWRfb2JqZWN0KHN0cnVjdCBkaXNhbWJpZ3VhdGVfc3RhdGUgKmRzKQoreworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCisJZm9yIChtID0gZ2V0X211bHRpX3BhY2tfaW5kZXgoZHMtPnJlcG8pOyBtICYmICFkcy0+YW1iaWd1b3VzOworCSAgICAgbSA9IG0tPm5leHQpCisJCXVuaXF1ZV9pbl9taWR4KG0sIGRzKTsKKwlmb3IgKHAgPSBnZXRfcGFja2VkX2dpdChkcy0+cmVwbyk7IHAgJiYgIWRzLT5hbWJpZ3VvdXM7CisJICAgICBwID0gcC0+bmV4dCkKKwkJdW5pcXVlX2luX3BhY2socCwgZHMpOworfQorCitzdGF0aWMgaW50IGZpbmlzaF9vYmplY3RfZGlzYW1iaWd1YXRpb24oc3RydWN0IGRpc2FtYmlndWF0ZV9zdGF0ZSAqZHMsCisJCQkJCXN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpZiAoZHMtPmFtYmlndW91cykKKwkJcmV0dXJuIFNIT1JUX05BTUVfQU1CSUdVT1VTOworCisJaWYgKCFkcy0+Y2FuZGlkYXRlX2V4aXN0cykKKwkJcmV0dXJuIE1JU1NJTkdfT0JKRUNUOworCisJaWYgKCFkcy0+Y2FuZGlkYXRlX2NoZWNrZWQpCisJCS8qCisJCSAqIElmIHRoaXMgaXMgdGhlIG9ubHkgY2FuZGlkYXRlLCB0aGVyZSBpcyBubyBwb2ludAorCQkgKiBjYWxsaW5nIHRoZSBkaXNhbWJpZ3VhdGlvbiBoaW50IGNhbGxiYWNrLgorCQkgKgorCQkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIGN1cnJlbnQgY2FuZGlkYXRlCisJCSAqIHJlcGxhY2VkIGFuIGVhcmxpZXIgY2FuZGlkYXRlIHRoYXQgZGlkIF9ub3RfIHBhc3MKKwkJICogdGhlIGRpc2FtYmlndWF0aW9uIGhpbnQgY2FsbGJhY2ssIHRoZW4gd2UgZG8gaGF2ZQorCQkgKiBtb3JlIHRoYW4gb25lIG9iamVjdHMgdGhhdCBtYXRjaCB0aGUgc2hvcnQgbmFtZQorCQkgKiBnaXZlbiwgc28gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGlzIG9uZSBtYXRjaGVzOworCQkgKiBvdGhlcndpc2UsIGlmIHdlIGRpc2NvdmVyZWQgdGhpcyBvbmUgYW5kIHRoZSBvbmUKKwkJICogdGhhdCB3ZSBwcmV2aW91c2x5IGRpc2NhcmRlZCBpbiB0aGUgcmV2ZXJzZSBvcmRlciwKKwkJICogd2Ugd291bGQgZW5kIHVwIHNob3dpbmcgZGlmZmVyZW50IHJlc3VsdHMgaW4gdGhlCisJCSAqIHNhbWUgcmVwb3NpdG9yeSEKKwkJICovCisJCWRzLT5jYW5kaWRhdGVfb2sgPSAoIWRzLT5kaXNhbWJpZ3VhdGVfZm5fdXNlZCB8fAorCQkJCSAgICBkcy0+Zm4oZHMtPnJlcG8sICZkcy0+Y2FuZGlkYXRlLCBkcy0+Y2JfZGF0YSkpOworCisJaWYgKCFkcy0+Y2FuZGlkYXRlX29rKQorCQlyZXR1cm4gU0hPUlRfTkFNRV9BTUJJR1VPVVM7CisKKwlvaWRjcHkob2lkLCAmZHMtPmNhbmRpZGF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlzYW1iaWd1YXRlX2NvbW1pdF9vbmx5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICAgIHZvaWQgKmNiX2RhdGFfdW51c2VkKQoreworCWludCBraW5kID0gb2lkX29iamVjdF9pbmZvKHIsIG9pZCwgTlVMTCk7CisJcmV0dXJuIGtpbmQgPT0gT0JKX0NPTU1JVDsKK30KKworc3RhdGljIGludCBkaXNhbWJpZ3VhdGVfY29tbWl0dGlzaF9vbmx5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJCXZvaWQgKmNiX2RhdGFfdW51c2VkKQoreworCXN0cnVjdCBvYmplY3QgKm9iajsKKwlpbnQga2luZDsKKworCWtpbmQgPSBvaWRfb2JqZWN0X2luZm8ociwgb2lkLCBOVUxMKTsKKwlpZiAoa2luZCA9PSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gMTsKKwlpZiAoa2luZCAhPSBPQkpfVEFHKQorCQlyZXR1cm4gMDsKKworCS8qIFdlIG5lZWQgdG8gZG8gdGhpcyB0aGUgaGFyZCB3YXkuLi4gKi8KKwlvYmogPSBkZXJlZl90YWcociwgcGFyc2Vfb2JqZWN0KHIsIG9pZCksIE5VTEwsIDApOworCWlmIChvYmogJiYgb2JqLT50eXBlID09IE9CSl9DT01NSVQpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpc2FtYmlndWF0ZV90cmVlX29ubHkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICB2b2lkICpjYl9kYXRhX3VudXNlZCkKK3sKKwlpbnQga2luZCA9IG9pZF9vYmplY3RfaW5mbyhyLCBvaWQsIE5VTEwpOworCXJldHVybiBraW5kID09IE9CSl9UUkVFOworfQorCitzdGF0aWMgaW50IGRpc2FtYmlndWF0ZV90cmVlaXNoX29ubHkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICAgICB2b2lkICpjYl9kYXRhX3VudXNlZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJaW50IGtpbmQ7CisKKwlraW5kID0gb2lkX29iamVjdF9pbmZvKHIsIG9pZCwgTlVMTCk7CisJaWYgKGtpbmQgPT0gT0JKX1RSRUUgfHwga2luZCA9PSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gMTsKKwlpZiAoa2luZCAhPSBPQkpfVEFHKQorCQlyZXR1cm4gMDsKKworCS8qIFdlIG5lZWQgdG8gZG8gdGhpcyB0aGUgaGFyZCB3YXkuLi4gKi8KKwlvYmogPSBkZXJlZl90YWcociwgcGFyc2Vfb2JqZWN0KHIsIG9pZCksIE5VTEwsIDApOworCWlmIChvYmogJiYgKG9iai0+dHlwZSA9PSBPQkpfVFJFRSB8fCBvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpc2FtYmlndWF0ZV9ibG9iX29ubHkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICB2b2lkICpjYl9kYXRhX3VudXNlZCkKK3sKKwlpbnQga2luZCA9IG9pZF9vYmplY3RfaW5mbyhyLCBvaWQsIE5VTEwpOworCXJldHVybiBraW5kID09IE9CSl9CTE9COworfQorCitzdGF0aWMgZGlzYW1iaWd1YXRlX2hpbnRfZm4gZGVmYXVsdF9kaXNhbWJpZ3VhdGVfaGludDsKKworaW50IHNldF9kaXNhbWJpZ3VhdGVfaGludF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJZGlzYW1iaWd1YXRlX2hpbnRfZm4gZm47CisJfSBoaW50c1tdID0geworCQl7ICJub25lIiwgTlVMTCB9LAorCQl7ICJjb21taXQiLCBkaXNhbWJpZ3VhdGVfY29tbWl0X29ubHkgfSwKKwkJeyAiY29tbWl0dGlzaCIsIGRpc2FtYmlndWF0ZV9jb21taXR0aXNoX29ubHkgfSwKKwkJeyAidHJlZSIsIGRpc2FtYmlndWF0ZV90cmVlX29ubHkgfSwKKwkJeyAidHJlZWlzaCIsIGRpc2FtYmlndWF0ZV90cmVlaXNoX29ubHkgfSwKKwkJeyAiYmxvYiIsIGRpc2FtYmlndWF0ZV9ibG9iX29ubHkgfQorCX07CisJaW50IGk7CisKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhpbnRzKTsgaSsrKSB7CisJCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgaGludHNbaV0ubmFtZSkpIHsKKwkJCWRlZmF1bHRfZGlzYW1iaWd1YXRlX2hpbnQgPSBoaW50c1tpXS5mbjsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIGVycm9yKCJ1bmtub3duIGhpbnQgdHlwZSBmb3IgJyVzJzogJXMiLCB2YXIsIHZhbHVlKTsKK30KKworc3RhdGljIGludCBpbml0X29iamVjdF9kaXNhbWJpZ3VhdGlvbihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAorCQkJCSAgICAgIHN0cnVjdCBkaXNhbWJpZ3VhdGVfc3RhdGUgKmRzKQoreworCWludCBpOworCisJaWYgKGxlbiA8IE1JTklNVU1fQUJCUkVWIHx8IGxlbiA+IHRoZV9oYXNoX2FsZ28tPmhleHN6KQorCQlyZXR1cm4gLTE7CisKKwltZW1zZXQoZHMsIDAsIHNpemVvZigqZHMpKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW4gO2krKykgeworCQl1bnNpZ25lZCBjaGFyIGMgPSBuYW1lW2ldOworCQl1bnNpZ25lZCBjaGFyIHZhbDsKKwkJaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQorCQkJdmFsID0gYyAtICcwJzsKKwkJZWxzZSBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCisJCQl2YWwgPSBjIC0gJ2EnICsgMTA7CisJCWVsc2UgaWYgKGMgPj0gJ0EnICYmIGMgPD0nRicpIHsKKwkJCXZhbCA9IGMgLSAnQScgKyAxMDsKKwkJCWMgLT0gJ0EnIC0gJ2EnOworCQl9CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwkJZHMtPmhleF9wZnhbaV0gPSBjOworCQlpZiAoIShpICYgMSkpCisJCQl2YWwgPDw9IDQ7CisJCWRzLT5iaW5fcGZ4Lmhhc2hbaSA+PiAxXSB8PSB2YWw7CisJfQorCisJZHMtPmxlbiA9IGxlbjsKKwlkcy0+aGV4X3BmeFtsZW5dID0gJ1wwJzsKKwlkcy0+cmVwbyA9IHI7CisJcHJlcGFyZV9hbHRfb2RiKHIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfYW1iaWd1b3VzX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHZvaWQgKmRhdGEpCit7CisJY29uc3Qgc3RydWN0IGRpc2FtYmlndWF0ZV9zdGF0ZSAqZHMgPSBkYXRhOworCXN0cnVjdCBzdHJidWYgZGVzYyA9IFNUUkJVRl9JTklUOworCWludCB0eXBlOworCisJaWYgKGRzLT5mbiAmJiAhZHMtPmZuKGRzLT5yZXBvLCBvaWQsIGRzLT5jYl9kYXRhKSkKKwkJcmV0dXJuIDA7CisKKwl0eXBlID0gb2lkX29iamVjdF9pbmZvKGRzLT5yZXBvLCBvaWQsIE5VTEwpOworCWlmICh0eXBlID09IE9CSl9DT01NSVQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbG9va3VwX2NvbW1pdChkcy0+cmVwbywgb2lkKTsKKwkJaWYgKGNvbW1pdCkgeworCQkJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHBwID0gezB9OworCQkJcHAuZGF0ZV9tb2RlLnR5cGUgPSBEQVRFX1NIT1JUOworCQkJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgIiAlYWQgLSAlcyIsICZkZXNjLCAmcHApOworCQl9CisJfSBlbHNlIGlmICh0eXBlID09IE9CSl9UQUcpIHsKKwkJc3RydWN0IHRhZyAqdGFnID0gbG9va3VwX3RhZyhkcy0+cmVwbywgb2lkKTsKKwkJaWYgKCFwYXJzZV90YWcodGFnKSAmJiB0YWctPnRhZykKKwkJCXN0cmJ1Zl9hZGRmKCZkZXNjLCAiICVzIiwgdGFnLT50YWcpOworCX0KKworCWFkdmlzZSgiICAlcyAlcyVzIiwKKwkgICAgICAgcmVwb19maW5kX3VuaXF1ZV9hYmJyZXYoZHMtPnJlcG8sIG9pZCwgREVGQVVMVF9BQkJSRVYpLAorCSAgICAgICB0eXBlX25hbWUodHlwZSkgPyB0eXBlX25hbWUodHlwZSkgOiAidW5rbm93biB0eXBlIiwKKwkgICAgICAgZGVzYy5idWYpOworCisJc3RyYnVmX3JlbGVhc2UoJmRlc2MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbGxlY3RfYW1iaWd1b3VzKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdm9pZCAqZGF0YSkKK3sKKwlvaWRfYXJyYXlfYXBwZW5kKGRhdGEsIG9pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVwb19jb2xsZWN0X2FtYmlndW91cyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGNvbGxlY3RfYW1iaWd1b3VzKG9pZCwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgc29ydF9hbWJpZ3VvdXMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqY3R4KQoreworCXN0cnVjdCByZXBvc2l0b3J5ICpzb3J0X2FtYmlndW91c19yZXBvID0gY3R4OworCWludCBhX3R5cGUgPSBvaWRfb2JqZWN0X2luZm8oc29ydF9hbWJpZ3VvdXNfcmVwbywgYSwgTlVMTCk7CisJaW50IGJfdHlwZSA9IG9pZF9vYmplY3RfaW5mbyhzb3J0X2FtYmlndW91c19yZXBvLCBiLCBOVUxMKTsKKwlpbnQgYV90eXBlX3NvcnQ7CisJaW50IGJfdHlwZV9zb3J0OworCisJLyoKKwkgKiBTb3J0cyBieSBoYXNoIHdpdGhpbiB0aGUgc2FtZSBvYmplY3QgdHlwZSwganVzdCBhcworCSAqIG9pZF9hcnJheV9mb3JfZWFjaF91bmlxdWUoKSB3b3VsZCBkby4KKwkgKi8KKwlpZiAoYV90eXBlID09IGJfdHlwZSkKKwkJcmV0dXJuIG9pZGNtcChhLCBiKTsKKworCS8qCisJICogQmV0d2VlbiBvYmplY3QgdHlwZXMgc2hvdyB0YWdzLCB0aGVuIGNvbW1pdHMsIGFuZCBmaW5hbGx5CisJICogdHJlZXMgYW5kIGJsb2JzLgorCSAqCisJICogVGhlIG9iamVjdF90eXBlIGVudW0gaXMgY29tbWl0LCB0cmVlLCBibG9iLCB0YWcsIGJ1dCB3ZQorCSAqIHdhbnQgdGFnLCBjb21taXQsIHRyZWUgYmxvYi4gQ2xldmVybHkgKHBlcmhhcHMgdG9vCisJICogY2xldmVybHkpIGRvIHRoYXQgd2l0aCBtb2R1bHVzLCBzaW5jZSB0aGUgZW51bSBhc3NpZ25zIDEgdG8KKwkgKiBjb21taXQsIHNvIHRhZyBiZWNvbWVzIDAuCisJICovCisJYV90eXBlX3NvcnQgPSBhX3R5cGUgJSA0OworCWJfdHlwZV9zb3J0ID0gYl90eXBlICUgNDsKKwlyZXR1cm4gYV90eXBlX3NvcnQgPiBiX3R5cGVfc29ydCA/IDEgOiAtMTsKK30KKworc3RhdGljIHZvaWQgc29ydF9hbWJpZ3VvdXNfb2lkX2FycmF5KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgb2lkX2FycmF5ICphKQoreworCVFTT1JUX1MoYS0+b2lkLCBhLT5uciwgc29ydF9hbWJpZ3VvdXMsIHIpOworfQorCitzdGF0aWMgZW51bSBnZXRfb2lkX3Jlc3VsdCBnZXRfc2hvcnRfb2lkKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJCQkJIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkJIHVuc2lnbmVkIGZsYWdzKQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGRpc2FtYmlndWF0ZV9zdGF0ZSBkczsKKwlpbnQgcXVpZXRseSA9ICEhKGZsYWdzICYgR0VUX09JRF9RVUlFVExZKTsKKworCWlmIChpbml0X29iamVjdF9kaXNhbWJpZ3VhdGlvbihyLCBuYW1lLCBsZW4sICZkcykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoSEFTX01VTFRJX0JJVFMoZmxhZ3MgJiBHRVRfT0lEX0RJU0FNQklHVUFUT1JTKSkKKwkJQlVHKCJtdWx0aXBsZSBnZXRfc2hvcnRfb2lkIGRpc2FtYmlndWF0b3IgZmxhZ3MiKTsKKworCWlmIChmbGFncyAmIEdFVF9PSURfQ09NTUlUKQorCQlkcy5mbiA9IGRpc2FtYmlndWF0ZV9jb21taXRfb25seTsKKwllbHNlIGlmIChmbGFncyAmIEdFVF9PSURfQ09NTUlUVElTSCkKKwkJZHMuZm4gPSBkaXNhbWJpZ3VhdGVfY29tbWl0dGlzaF9vbmx5OworCWVsc2UgaWYgKGZsYWdzICYgR0VUX09JRF9UUkVFKQorCQlkcy5mbiA9IGRpc2FtYmlndWF0ZV90cmVlX29ubHk7CisJZWxzZSBpZiAoZmxhZ3MgJiBHRVRfT0lEX1RSRUVJU0gpCisJCWRzLmZuID0gZGlzYW1iaWd1YXRlX3RyZWVpc2hfb25seTsKKwllbHNlIGlmIChmbGFncyAmIEdFVF9PSURfQkxPQikKKwkJZHMuZm4gPSBkaXNhbWJpZ3VhdGVfYmxvYl9vbmx5OworCWVsc2UKKwkJZHMuZm4gPSBkZWZhdWx0X2Rpc2FtYmlndWF0ZV9oaW50OworCisJZmluZF9zaG9ydF9vYmplY3RfZmlsZW5hbWUoJmRzKTsKKwlmaW5kX3Nob3J0X3BhY2tlZF9vYmplY3QoJmRzKTsKKwlzdGF0dXMgPSBmaW5pc2hfb2JqZWN0X2Rpc2FtYmlndWF0aW9uKCZkcywgb2lkKTsKKworCS8qCisJICogSWYgd2UgZGlkbid0IGZpbmQgaXQsIGRvIHRoZSB1c3VhbCByZXByZXBhcmUoKSBzbG93LXBhdGgsCisJICogc2luY2UgdGhlIG9iamVjdCBtYXkgaGF2ZSByZWNlbnRseSBiZWVuIGFkZGVkIHRvIHRoZSByZXBvc2l0b3J5CisJICogb3IgbWlncmF0ZWQgZnJvbSBsb29zZSB0byBwYWNrZWQuCisJICovCisJaWYgKHN0YXR1cyA9PSBNSVNTSU5HX09CSkVDVCkgeworCQlyZXByZXBhcmVfcGFja2VkX2dpdChyKTsKKwkJZmluZF9zaG9ydF9vYmplY3RfZmlsZW5hbWUoJmRzKTsKKwkJZmluZF9zaG9ydF9wYWNrZWRfb2JqZWN0KCZkcyk7CisJCXN0YXR1cyA9IGZpbmlzaF9vYmplY3RfZGlzYW1iaWd1YXRpb24oJmRzLCBvaWQpOworCX0KKworCWlmICghcXVpZXRseSAmJiAoc3RhdHVzID09IFNIT1JUX05BTUVfQU1CSUdVT1VTKSkgeworCQlzdHJ1Y3Qgb2lkX2FycmF5IGNvbGxlY3QgPSBPSURfQVJSQVlfSU5JVDsKKworCQllcnJvcihfKCJzaG9ydCBTSEExICVzIGlzIGFtYmlndW91cyIpLCBkcy5oZXhfcGZ4KTsKKworCQkvKgorCQkgKiBXZSBtYXkgc3RpbGwgaGF2ZSBhbWJpZ3VpdHkgaWYgd2Ugc2ltcGx5IHNhdyBhIHNlcmllcyBvZgorCQkgKiBjYW5kaWRhdGVzIHRoYXQgZGlkIG5vdCBzYXRpc2Z5IG91ciBoaW50IGZ1bmN0aW9uLiBJbgorCQkgKiB0aGF0IGNhc2UsIHdlIHN0aWxsIHdhbnQgdG8gc2hvdyB0aGVtLCBzbyBkaXNhYmxlIHRoZSBoaW50CisJCSAqIGZ1bmN0aW9uIGVudGlyZWx5LgorCQkgKi8KKwkJaWYgKCFkcy5hbWJpZ3VvdXMpCisJCQlkcy5mbiA9IE5VTEw7CisKKwkJYWR2aXNlKF8oIlRoZSBjYW5kaWRhdGVzIGFyZToiKSk7CisJCXJlcG9fZm9yX2VhY2hfYWJicmV2KHIsIGRzLmhleF9wZngsIGNvbGxlY3RfYW1iaWd1b3VzLCAmY29sbGVjdCk7CisJCXNvcnRfYW1iaWd1b3VzX29pZF9hcnJheShyLCAmY29sbGVjdCk7CisKKwkJaWYgKG9pZF9hcnJheV9mb3JfZWFjaCgmY29sbGVjdCwgc2hvd19hbWJpZ3VvdXNfb2JqZWN0LCAmZHMpKQorCQkJQlVHKCJzaG93X2FtYmlndW91c19vYmplY3Qgc2hvdWxkbid0IHJldHVybiBub24temVybyIpOworCQlvaWRfYXJyYXlfY2xlYXIoJmNvbGxlY3QpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCByZXBvX2Zvcl9lYWNoX2FiYnJldihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJIGVhY2hfYWJicmV2X2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvaWRfYXJyYXkgY29sbGVjdCA9IE9JRF9BUlJBWV9JTklUOworCXN0cnVjdCBkaXNhbWJpZ3VhdGVfc3RhdGUgZHM7CisJaW50IHJldDsKKworCWlmIChpbml0X29iamVjdF9kaXNhbWJpZ3VhdGlvbihyLCBwcmVmaXgsIHN0cmxlbihwcmVmaXgpLCAmZHMpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJZHMuYWx3YXlzX2NhbGxfZm4gPSAxOworCWRzLmZuID0gcmVwb19jb2xsZWN0X2FtYmlndW91czsKKwlkcy5jYl9kYXRhID0gJmNvbGxlY3Q7CisJZmluZF9zaG9ydF9vYmplY3RfZmlsZW5hbWUoJmRzKTsKKwlmaW5kX3Nob3J0X3BhY2tlZF9vYmplY3QoJmRzKTsKKworCXJldCA9IG9pZF9hcnJheV9mb3JfZWFjaF91bmlxdWUoJmNvbGxlY3QsIGZuLCBjYl9kYXRhKTsKKwlvaWRfYXJyYXlfY2xlYXIoJmNvbGxlY3QpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHNsb3Qgb2YgdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0IHNldCBpbiAidmFsIi4gVGhlcmUgYXJlIHZhcmlvdXMKKyAqIHdheXMgdG8gZG8gdGhpcyBxdWlja2x5IHdpdGggZmxzKCkgb3IgX19idWlsdGluX2NsemwoKSwgYnV0IHNwZWVkIGlzCisgKiBwcm9iYWJseSBub3QgYSBiaWcgZGVhbCBoZXJlLgorICovCitzdGF0aWMgdW5zaWduZWQgbXNiKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIHIgPSAwOworCXdoaWxlICh2YWwgPj49IDEpCisJCXIrKzsKKwlyZXR1cm4gcjsKK30KKworc3RydWN0IG1pbl9hYmJyZXZfZGF0YSB7CisJdW5zaWduZWQgaW50IGluaXRfbGVuOworCXVuc2lnbmVkIGludCBjdXJfbGVuOworCWNoYXIgKmhleDsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQ7Cit9OworCitzdGF0aWMgaW5saW5lIGNoYXIgZ2V0X2hleF9jaGFyX2Zyb21fb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkJIHVuc2lnbmVkIGludCBwb3MpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgaGV4W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisKKwlpZiAoKHBvcyAmIDEpID09IDApCisJCXJldHVybiBoZXhbb2lkLT5oYXNoW3BvcyA+PiAxXSA+PiA0XTsKKwllbHNlCisJCXJldHVybiBoZXhbb2lkLT5oYXNoW3BvcyA+PiAxXSAmIDB4Zl07Cit9CisKK3N0YXRpYyBpbnQgZXh0ZW5kX2FiYnJldl9sZW4oY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBtaW5fYWJicmV2X2RhdGEgKm1hZCA9IGNiX2RhdGE7CisKKwl1bnNpZ25lZCBpbnQgaSA9IG1hZC0+aW5pdF9sZW47CisJd2hpbGUgKG1hZC0+aGV4W2ldICYmIG1hZC0+aGV4W2ldID09IGdldF9oZXhfY2hhcl9mcm9tX29pZChvaWQsIGkpKQorCQlpKys7CisKKwlpZiAoaSA8IEdJVF9NQVhfUkFXU1ogJiYgaSA+PSBtYWQtPmN1cl9sZW4pCisJCW1hZC0+Y3VyX2xlbiA9IGkgKyAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVwb19leHRlbmRfYWJicmV2X2xlbihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGV4dGVuZF9hYmJyZXZfbGVuKG9pZCwgY2JfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfYWJicmV2X2xlbl9mb3JfbWlkeChzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwKKwkJCQkgICAgIHN0cnVjdCBtaW5fYWJicmV2X2RhdGEgKm1hZCkKK3sKKwlpbnQgbWF0Y2ggPSAwOworCXVpbnQzMl90IG51bSwgZmlyc3QgPSAwOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm1hZF9vaWQ7CisKKwlpZiAoIW0tPm51bV9vYmplY3RzKQorCQlyZXR1cm47CisKKwludW0gPSBtLT5udW1fb2JqZWN0czsKKwltYWRfb2lkID0gbWFkLT5vaWQ7CisJbWF0Y2ggPSBic2VhcmNoX21pZHgobWFkX29pZCwgbSwgJmZpcnN0KTsKKworCS8qCisJICogZmlyc3QgaXMgbm93IHRoZSBwb3NpdGlvbiBpbiB0aGUgcGFja2ZpbGUgd2hlcmUgd2Ugd291bGQgaW5zZXJ0CisJICogbWFkLT5oYXNoIGlmIGl0IGRvZXMgbm90IGV4aXN0IChvciB0aGUgcG9zaXRpb24gb2YgbWFkLT5oYXNoIGlmCisJICogaXQgZG9lcyBleGlzdCkuIEhlbmNlLCB3ZSBjb25zaWRlciBhIG1heGltdW0gb2YgdHdvIG9iamVjdHMKKwkgKiBuZWFyYnkgZm9yIHRoZSBhYmJyZXZpYXRpb24gbGVuZ3RoLgorCSAqLworCW1hZC0+aW5pdF9sZW4gPSAwOworCWlmICghbWF0Y2gpIHsKKwkJaWYgKG50aF9taWR4ZWRfb2JqZWN0X29pZCgmb2lkLCBtLCBmaXJzdCkpCisJCQlleHRlbmRfYWJicmV2X2xlbigmb2lkLCBtYWQpOworCX0gZWxzZSBpZiAoZmlyc3QgPCBudW0gLSAxKSB7CisJCWlmIChudGhfbWlkeGVkX29iamVjdF9vaWQoJm9pZCwgbSwgZmlyc3QgKyAxKSkKKwkJCWV4dGVuZF9hYmJyZXZfbGVuKCZvaWQsIG1hZCk7CisJfQorCWlmIChmaXJzdCA+IDApIHsKKwkJaWYgKG50aF9taWR4ZWRfb2JqZWN0X29pZCgmb2lkLCBtLCBmaXJzdCAtIDEpKQorCQkJZXh0ZW5kX2FiYnJldl9sZW4oJm9pZCwgbWFkKTsKKwl9CisJbWFkLT5pbml0X2xlbiA9IG1hZC0+Y3VyX2xlbjsKK30KKworc3RhdGljIHZvaWQgZmluZF9hYmJyZXZfbGVuX2Zvcl9wYWNrKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJCSAgICAgc3RydWN0IG1pbl9hYmJyZXZfZGF0YSAqbWFkKQoreworCWludCBtYXRjaCA9IDA7CisJdWludDMyX3QgbnVtLCBmaXJzdCA9IDA7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbWFkX29pZDsKKworCWlmIChwLT5tdWx0aV9wYWNrX2luZGV4KQorCQlyZXR1cm47CisKKwlpZiAob3Blbl9wYWNrX2luZGV4KHApIHx8ICFwLT5udW1fb2JqZWN0cykKKwkJcmV0dXJuOworCisJbnVtID0gcC0+bnVtX29iamVjdHM7CisJbWFkX29pZCA9IG1hZC0+b2lkOworCW1hdGNoID0gYnNlYXJjaF9wYWNrKG1hZF9vaWQsIHAsICZmaXJzdCk7CisKKwkvKgorCSAqIGZpcnN0IGlzIG5vdyB0aGUgcG9zaXRpb24gaW4gdGhlIHBhY2tmaWxlIHdoZXJlIHdlIHdvdWxkIGluc2VydAorCSAqIG1hZC0+aGFzaCBpZiBpdCBkb2VzIG5vdCBleGlzdCAob3IgdGhlIHBvc2l0aW9uIG9mIG1hZC0+aGFzaCBpZgorCSAqIGl0IGRvZXMgZXhpc3QpLiBIZW5jZSwgd2UgY29uc2lkZXIgYSBtYXhpbXVtIG9mIHR3byBvYmplY3RzCisJICogbmVhcmJ5IGZvciB0aGUgYWJicmV2aWF0aW9uIGxlbmd0aC4KKwkgKi8KKwltYWQtPmluaXRfbGVuID0gMDsKKwlpZiAoIW1hdGNoKSB7CisJCWlmICghbnRoX3BhY2tlZF9vYmplY3RfaWQoJm9pZCwgcCwgZmlyc3QpKQorCQkJZXh0ZW5kX2FiYnJldl9sZW4oJm9pZCwgbWFkKTsKKwl9IGVsc2UgaWYgKGZpcnN0IDwgbnVtIC0gMSkgeworCQlpZiAoIW50aF9wYWNrZWRfb2JqZWN0X2lkKCZvaWQsIHAsIGZpcnN0ICsgMSkpCisJCQlleHRlbmRfYWJicmV2X2xlbigmb2lkLCBtYWQpOworCX0KKwlpZiAoZmlyc3QgPiAwKSB7CisJCWlmICghbnRoX3BhY2tlZF9vYmplY3RfaWQoJm9pZCwgcCwgZmlyc3QgLSAxKSkKKwkJCWV4dGVuZF9hYmJyZXZfbGVuKCZvaWQsIG1hZCk7CisJfQorCW1hZC0+aW5pdF9sZW4gPSBtYWQtPmN1cl9sZW47Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfYWJicmV2X2xlbl9wYWNrZWQoc3RydWN0IG1pbl9hYmJyZXZfZGF0YSAqbWFkKQoreworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCisJZm9yIChtID0gZ2V0X211bHRpX3BhY2tfaW5kZXgobWFkLT5yZXBvKTsgbTsgbSA9IG0tPm5leHQpCisJCWZpbmRfYWJicmV2X2xlbl9mb3JfbWlkeChtLCBtYWQpOworCWZvciAocCA9IGdldF9wYWNrZWRfZ2l0KG1hZC0+cmVwbyk7IHA7IHAgPSBwLT5uZXh0KQorCQlmaW5kX2FiYnJldl9sZW5fZm9yX3BhY2socCwgbWFkKTsKK30KKworaW50IHJlcG9fZmluZF91bmlxdWVfYWJicmV2X3Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNoYXIgKmhleCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZGlzYW1iaWd1YXRlX3N0YXRlIGRzOworCXN0cnVjdCBtaW5fYWJicmV2X2RhdGEgbWFkOworCXN0cnVjdCBvYmplY3RfaWQgb2lkX3JldDsKKwljb25zdCB1bnNpZ25lZCBoZXhzeiA9IHItPmhhc2hfYWxnby0+aGV4c3o7CisKKwlpZiAobGVuIDwgMCkgeworCQl1bnNpZ25lZCBsb25nIGNvdW50ID0gcmVwb19hcHByb3hpbWF0ZV9vYmplY3RfY291bnQocik7CisJCS8qCisJCSAqIEFkZCBvbmUgYmVjYXVzZSB0aGUgTVNCIG9ubHkgdGVsbHMgdXMgdGhlIGhpZ2hlc3QgYml0IHNldCwKKwkJICogbm90IGluY2x1ZGluZyB0aGUgdmFsdWUgb2YgYWxsIHRoZSBfb3RoZXJfIGJpdHMgKHNvICIxNSIKKwkJICogaXMgb25seSBvbmUgb2ZmIG9mIDJeNCwgYnV0IHRoZSBNU0IgaXMgdGhlIDNyZCBiaXQuCisJCSAqLworCQlsZW4gPSBtc2IoY291bnQpICsgMTsKKwkJLyoKKwkJICogV2Ugbm93IGtub3cgd2UgaGF2ZSBvbiB0aGUgb3JkZXIgb2YgMl5sZW4gb2JqZWN0cywgd2hpY2gKKwkJICogZXhwZWN0cyBhIGNvbGxpc2lvbiBhdCAyXihsZW4vMikuIEJ1dCB3ZSBhbHNvIGNhcmUgYWJvdXQgaGV4CisJCSAqIGNoYXJzLCBub3QgYml0cywgYW5kIHRoZXJlIGFyZSA0IGJpdHMgcGVyIGhleC4gU28gYWxsCisJCSAqIHRvZ2V0aGVyIHdlIG5lZWQgdG8gZGl2aWRlIGJ5IDIgYW5kIHJvdW5kIHVwLgorCQkgKi8KKwkJbGVuID0gRElWX1JPVU5EX1VQKGxlbiwgMik7CisJCS8qCisJCSAqIEZvciB2ZXJ5IHNtYWxsIHJlcG9zLCB3ZSBzdGljayB3aXRoIG91ciByZWd1bGFyIGZhbGxiYWNrLgorCQkgKi8KKwkJaWYgKGxlbiA8IEZBTExCQUNLX0RFRkFVTFRfQUJCUkVWKQorCQkJbGVuID0gRkFMTEJBQ0tfREVGQVVMVF9BQkJSRVY7CisJfQorCisJb2lkX3RvX2hleF9yKGhleCwgb2lkKTsKKwlpZiAobGVuID09IGhleHN6IHx8ICFsZW4pCisJCXJldHVybiBoZXhzejsKKworCW1hZC5yZXBvID0gcjsKKwltYWQuaW5pdF9sZW4gPSBsZW47CisJbWFkLmN1cl9sZW4gPSBsZW47CisJbWFkLmhleCA9IGhleDsKKwltYWQub2lkID0gb2lkOworCisJZmluZF9hYmJyZXZfbGVuX3BhY2tlZCgmbWFkKTsKKworCWlmIChpbml0X29iamVjdF9kaXNhbWJpZ3VhdGlvbihyLCBoZXgsIG1hZC5jdXJfbGVuLCAmZHMpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJZHMuZm4gPSByZXBvX2V4dGVuZF9hYmJyZXZfbGVuOworCWRzLmFsd2F5c19jYWxsX2ZuID0gMTsKKwlkcy5jYl9kYXRhID0gKHZvaWQgKikmbWFkOworCisJZmluZF9zaG9ydF9vYmplY3RfZmlsZW5hbWUoJmRzKTsKKwkodm9pZClmaW5pc2hfb2JqZWN0X2Rpc2FtYmlndWF0aW9uKCZkcywgJm9pZF9yZXQpOworCisJaGV4W21hZC5jdXJfbGVuXSA9IDA7CisJcmV0dXJuIG1hZC5jdXJfbGVuOworfQorCitjb25zdCBjaGFyICpyZXBvX2ZpbmRfdW5pcXVlX2FiYnJldihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgICBpbnQgbGVuKQoreworCXN0YXRpYyBpbnQgYnVmbm87CisJc3RhdGljIGNoYXIgaGV4YnVmZmVyWzRdW0dJVF9NQVhfSEVYU1ogKyAxXTsKKwljaGFyICpoZXggPSBoZXhidWZmZXJbYnVmbm9dOworCWJ1Zm5vID0gKGJ1Zm5vICsgMSkgJSBBUlJBWV9TSVpFKGhleGJ1ZmZlcik7CisJcmVwb19maW5kX3VuaXF1ZV9hYmJyZXZfcihyLCBoZXgsIG9pZCwgbGVuKTsKKwlyZXR1cm4gaGV4OworfQorCitzdGF0aWMgaW50IGFtYmlndW91c19wYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pCit7CisJaW50IHNsYXNoID0gMTsKKwlpbnQgY250OworCisJZm9yIChjbnQgPSAwOyBjbnQgPCBsZW47IGNudCsrKSB7CisJCXN3aXRjaCAoKnBhdGgrKykgeworCQljYXNlICdcMCc6CisJCQlicmVhazsKKwkJY2FzZSAnLyc6CisJCQlpZiAoc2xhc2gpCisJCQkJYnJlYWs7CisJCQlzbGFzaCA9IDE7CisJCQljb250aW51ZTsKKwkJY2FzZSAnLic6CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCXNsYXNoID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc2xhc2g7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0X21hcmsoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgbGVuLAorCQkJICBjb25zdCBjaGFyICoqc3VmZml4LCBpbnQgbnIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlpbnQgc3VmZml4X2xlbiA9IHN0cmxlbihzdWZmaXhbaV0pOworCQlpZiAoc3VmZml4X2xlbiA8PSBsZW4KKwkJICAgICYmICFzdHJuY2FzZWNtcChzdHJpbmcsIHN1ZmZpeFtpXSwgc3VmZml4X2xlbikpCisJCQlyZXR1cm4gc3VmZml4X2xlbjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVwc3RyZWFtX21hcmsoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgbGVuKQoreworCWNvbnN0IGNoYXIgKnN1ZmZpeFtdID0geyAiQHt1cHN0cmVhbX0iLCAiQHt1fSIgfTsKKwlyZXR1cm4gYXRfbWFyayhzdHJpbmcsIGxlbiwgc3VmZml4LCBBUlJBWV9TSVpFKHN1ZmZpeCkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdXNoX21hcmsoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgbGVuKQoreworCWNvbnN0IGNoYXIgKnN1ZmZpeFtdID0geyAiQHtwdXNofSIgfTsKKwlyZXR1cm4gYXRfbWFyayhzdHJpbmcsIGxlbiwgc3VmZml4LCBBUlJBWV9TSVpFKHN1ZmZpeCkpOworfQorCitzdGF0aWMgZW51bSBnZXRfb2lkX3Jlc3VsdCBnZXRfb2lkXzEoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdW5zaWduZWQgbG9va3VwX2ZsYWdzKTsKK3N0YXRpYyBpbnQgaW50ZXJwcmV0X250aF9wcmlvcl9jaGVja291dChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIHN0cnVjdCBzdHJidWYgKmJ1Zik7CisKK3N0YXRpYyBpbnQgZ2V0X29pZF9iYXNpYyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLAorCQkJIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0YXRpYyBjb25zdCBjaGFyICp3YXJuX21zZyA9ICJyZWZuYW1lICclLipzJyBpcyBhbWJpZ3VvdXMuIjsKKwlzdGF0aWMgY29uc3QgY2hhciAqb2JqZWN0X25hbWVfbXNnID0gTl8oCisJIkdpdCBub3JtYWxseSBuZXZlciBjcmVhdGVzIGEgcmVmIHRoYXQgZW5kcyB3aXRoIDQwIGhleCBjaGFyYWN0ZXJzXG4iCisJImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKwkibWF5IGJlIGNyZWF0ZWQgYnkgbWlzdGFrZS4gRm9yIGV4YW1wbGUsXG4iCisJIlxuIgorCSIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisJIlxuIgorCSJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKwkiZXhhbWluZSB0aGVzZSByZWZzIGFuZCBtYXliZSBkZWxldGUgdGhlbS4gVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5XG4iCisJInJ1bm5pbmcgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIik7CisJc3RydWN0IG9iamVjdF9pZCB0bXBfb2lkOworCWNoYXIgKnJlYWxfcmVmID0gTlVMTDsKKwlpbnQgcmVmc19mb3VuZCA9IDA7CisJaW50IGF0LCByZWZsb2dfbGVuLCBudGhfcHJpb3IgPSAwOworCisJaWYgKGxlbiA9PSByLT5oYXNoX2FsZ28tPmhleHN6ICYmICFnZXRfb2lkX2hleChzdHIsIG9pZCkpIHsKKwkJaWYgKHdhcm5fYW1iaWd1b3VzX3JlZnMgJiYgd2Fybl9vbl9vYmplY3RfcmVmbmFtZV9hbWJpZ3VpdHkpIHsKKwkJCXJlZnNfZm91bmQgPSByZXBvX2R3aW1fcmVmKHIsIHN0ciwgbGVuLCAmdG1wX29pZCwgJnJlYWxfcmVmKTsKKwkJCWlmIChyZWZzX2ZvdW5kID4gMCkgeworCQkJCXdhcm5pbmcod2Fybl9tc2csIGxlbiwgc3RyKTsKKwkJCQlpZiAoYWR2aWNlX29iamVjdF9uYW1lX3dhcm5pbmcpCisJCQkJCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIF8ob2JqZWN0X25hbWVfbXNnKSk7CisJCQl9CisJCQlmcmVlKHJlYWxfcmVmKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBiYXNpY0B7dGltZSBvciBudW1iZXIgb3IgLW51bWJlcn0gZm9ybWF0IHRvIHF1ZXJ5IHJlZi1sb2cgKi8KKwlyZWZsb2dfbGVuID0gYXQgPSAwOworCWlmIChsZW4gJiYgc3RyW2xlbi0xXSA9PSAnfScpIHsKKwkJZm9yIChhdCA9IGxlbi00OyBhdCA+PSAwOyBhdC0tKSB7CisJCQlpZiAoc3RyW2F0XSA9PSAnQCcgJiYgc3RyW2F0KzFdID09ICd7JykgeworCQkJCWlmIChzdHJbYXQrMl0gPT0gJy0nKSB7CisJCQkJCWlmIChhdCAhPSAwKQorCQkJCQkJLyogQHstTn0gbm90IGF0IHN0YXJ0ICovCisJCQkJCQlyZXR1cm4gLTE7CisJCQkJCW50aF9wcmlvciA9IDE7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpZiAoIXVwc3RyZWFtX21hcmsoc3RyICsgYXQsIGxlbiAtIGF0KSAmJgorCQkJCSAgICAhcHVzaF9tYXJrKHN0ciArIGF0LCBsZW4gLSBhdCkpIHsKKwkJCQkJcmVmbG9nX2xlbiA9IChsZW4tMSkgLSAoYXQrMik7CisJCQkJCWxlbiA9IGF0OworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qIEFjY2VwdCBvbmx5IHVuYW1iaWd1b3VzIHJlZiBwYXRocy4gKi8KKwlpZiAobGVuICYmIGFtYmlndW91c19wYXRoKHN0ciwgbGVuKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKG50aF9wcmlvcikgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlpbnQgZGV0YWNoZWQ7CisKKwkJaWYgKGludGVycHJldF9udGhfcHJpb3JfY2hlY2tvdXQociwgc3RyLCBsZW4sICZidWYpID4gMCkgeworCQkJZGV0YWNoZWQgPSAoYnVmLmxlbiA9PSByLT5oYXNoX2FsZ28tPmhleHN6ICYmICFnZXRfb2lkX2hleChidWYuYnVmLCBvaWQpKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQkJaWYgKGRldGFjaGVkKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKCFsZW4gJiYgcmVmbG9nX2xlbikKKwkJLyogYWxsb3cgIkB7Li4ufSIgdG8gbWVhbiB0aGUgY3VycmVudCBicmFuY2ggcmVmbG9nICovCisJCXJlZnNfZm91bmQgPSByZXBvX2R3aW1fcmVmKHIsICJIRUFEIiwgNCwgb2lkLCAmcmVhbF9yZWYpOworCWVsc2UgaWYgKHJlZmxvZ19sZW4pCisJCXJlZnNfZm91bmQgPSByZXBvX2R3aW1fbG9nKHIsIHN0ciwgbGVuLCBvaWQsICZyZWFsX3JlZik7CisJZWxzZQorCQlyZWZzX2ZvdW5kID0gcmVwb19kd2ltX3JlZihyLCBzdHIsIGxlbiwgb2lkLCAmcmVhbF9yZWYpOworCisJaWYgKCFyZWZzX2ZvdW5kKQorCQlyZXR1cm4gLTE7CisKKwlpZiAod2Fybl9hbWJpZ3VvdXNfcmVmcyAmJiAhKGZsYWdzICYgR0VUX09JRF9RVUlFVExZKSAmJgorCSAgICAocmVmc19mb3VuZCA+IDEgfHwKKwkgICAgICFnZXRfc2hvcnRfb2lkKHIsIHN0ciwgbGVuLCAmdG1wX29pZCwgR0VUX09JRF9RVUlFVExZKSkpCisJCXdhcm5pbmcod2Fybl9tc2csIGxlbiwgc3RyKTsKKworCWlmIChyZWZsb2dfbGVuKSB7CisJCWludCBudGgsIGk7CisJCXRpbWVzdGFtcF90IGF0X3RpbWU7CisJCXRpbWVzdGFtcF90IGNvX3RpbWU7CisJCWludCBjb190eiwgY29fY250OworCisJCS8qIElzIGl0IGFza2luZyBmb3IgTi10aCBlbnRyeSwgb3IgYXBwcm94aWRhdGU/ICovCisJCWZvciAoaSA9IG50aCA9IDA7IDAgPD0gbnRoICYmIGkgPCByZWZsb2dfbGVuOyBpKyspIHsKKwkJCWNoYXIgY2ggPSBzdHJbYXQrMitpXTsKKwkJCWlmICgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKQorCQkJCW50aCA9IG50aCAqIDEwICsgY2ggLSAnMCc7CisJCQllbHNlCisJCQkJbnRoID0gLTE7CisJCX0KKwkJaWYgKDEwMDAwMDAwMCA8PSBudGgpIHsKKwkJCWF0X3RpbWUgPSBudGg7CisJCQludGggPSAtMTsKKwkJfSBlbHNlIGlmICgwIDw9IG50aCkKKwkJCWF0X3RpbWUgPSAwOworCQllbHNlIHsKKwkJCWludCBlcnJvcnMgPSAwOworCQkJY2hhciAqdG1wID0geHN0cm5kdXAoc3RyICsgYXQgKyAyLCByZWZsb2dfbGVuKTsKKwkJCWF0X3RpbWUgPSBhcHByb3hpZGF0ZV9jYXJlZnVsKHRtcCwgJmVycm9ycyk7CisJCQlmcmVlKHRtcCk7CisJCQlpZiAoZXJyb3JzKSB7CisJCQkJZnJlZShyZWFsX3JlZik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJCWlmIChyZWFkX3JlZl9hdChnZXRfbWFpbl9yZWZfc3RvcmUociksCisJCQkJcmVhbF9yZWYsIGZsYWdzLCBhdF90aW1lLCBudGgsIG9pZCwgTlVMTCwKKwkJCQkmY29fdGltZSwgJmNvX3R6LCAmY29fY250KSkgeworCQkJaWYgKCFsZW4pIHsKKwkJCQlpZiAoIXNraXBfcHJlZml4KHJlYWxfcmVmLCAicmVmcy9oZWFkcy8iLCAmc3RyKSkKKwkJCQkJc3RyID0gIkhFQUQiOworCQkJCWxlbiA9IHN0cmxlbihzdHIpOworCQkJfQorCQkJaWYgKGF0X3RpbWUpIHsKKwkJCQlpZiAoIShmbGFncyAmIEdFVF9PSURfUVVJRVRMWSkpIHsKKwkJCQkJd2FybmluZyhfKCJsb2cgZm9yICclLipzJyBvbmx5IGdvZXMgYmFjayB0byAlcyIpLAorCQkJCQkJbGVuLCBzdHIsCisJCQkJCQlzaG93X2RhdGUoY29fdGltZSwgY29fdHosIERBVEVfTU9ERShSRkMyODIyKSkpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGZsYWdzICYgR0VUX09JRF9RVUlFVExZKSB7CisJCQkJCWV4aXQoMTI4KTsKKwkJCQl9CisJCQkJZGllKF8oImxvZyBmb3IgJyUuKnMnIG9ubHkgaGFzICVkIGVudHJpZXMiKSwKKwkJCQkgICAgbGVuLCBzdHIsIGNvX2NudCk7CisJCQl9CisJCX0KKwl9CisKKwlmcmVlKHJlYWxfcmVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gZ2V0X29pZF9yZXN1bHQgZ2V0X3BhcmVudChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAorCQkJCSAgICAgIHN0cnVjdCBvYmplY3RfaWQgKnJlc3VsdCwgaW50IGlkeCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwllbnVtIGdldF9vaWRfcmVzdWx0IHJldCA9IGdldF9vaWRfMShyLCBuYW1lLCBsZW4sICZvaWQsCisJCQkJCSAgICBHRVRfT0lEX0NPTU1JVFRJU0gpOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHIsICZvaWQpOworCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJcmV0dXJuIE1JU1NJTkdfT0JKRUNUOworCWlmICghaWR4KSB7CisJCW9pZGNweShyZXN1bHQsICZjb21taXQtPm9iamVjdC5vaWQpOworCQlyZXR1cm4gRk9VTkQ7CisJfQorCXAgPSBjb21taXQtPnBhcmVudHM7CisJd2hpbGUgKHApIHsKKwkJaWYgKCEtLWlkeCkgeworCQkJb2lkY3B5KHJlc3VsdCwgJnAtPml0ZW0tPm9iamVjdC5vaWQpOworCQkJcmV0dXJuIEZPVU5EOworCQl9CisJCXAgPSBwLT5uZXh0OworCX0KKwlyZXR1cm4gTUlTU0lOR19PQkpFQ1Q7Cit9CisKK3N0YXRpYyBlbnVtIGdldF9vaWRfcmVzdWx0IGdldF9udGhfYW5jZXN0b3Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAorCQkJCQkgICAgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0LAorCQkJCQkgICAgaW50IGdlbmVyYXRpb24pCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWludCByZXQ7CisKKwlyZXQgPSBnZXRfb2lkXzEociwgbmFtZSwgbGVuLCAmb2lkLCBHRVRfT0lEX0NPTU1JVFRJU0gpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UociwgJm9pZCk7CisJaWYgKCFjb21taXQpCisJCXJldHVybiBNSVNTSU5HX09CSkVDVDsKKworCXdoaWxlIChnZW5lcmF0aW9uLS0pIHsKKwkJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpIHx8ICFjb21taXQtPnBhcmVudHMpCisJCQlyZXR1cm4gTUlTU0lOR19PQkpFQ1Q7CisJCWNvbW1pdCA9IGNvbW1pdC0+cGFyZW50cy0+aXRlbTsKKwl9CisJb2lkY3B5KHJlc3VsdCwgJmNvbW1pdC0+b2JqZWN0Lm9pZCk7CisJcmV0dXJuIEZPVU5EOworfQorCitzdHJ1Y3Qgb2JqZWN0ICpyZXBvX3BlZWxfdG9fdHlwZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCQkJIHN0cnVjdCBvYmplY3QgKm8sIGVudW0gb2JqZWN0X3R5cGUgZXhwZWN0ZWRfdHlwZSkKK3sKKwlpZiAobmFtZSAmJiAhbmFtZWxlbikKKwkJbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKwl3aGlsZSAoMSkgeworCQlpZiAoIW8gfHwgKCFvLT5wYXJzZWQgJiYgIXBhcnNlX29iamVjdChyLCAmby0+b2lkKSkpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGV4cGVjdGVkX3R5cGUgPT0gT0JKX0FOWSB8fCBvLT50eXBlID09IGV4cGVjdGVkX3R5cGUpCisJCQlyZXR1cm4gbzsKKwkJaWYgKG8tPnR5cGUgPT0gT0JKX1RBRykKKwkJCW8gPSAoKHN0cnVjdCB0YWcqKSBvKS0+dGFnZ2VkOworCQllbHNlIGlmIChvLT50eXBlID09IE9CSl9DT01NSVQpCisJCQlvID0gJihyZXBvX2dldF9jb21taXRfdHJlZShyLCAoKHN0cnVjdCBjb21taXQgKilvKSktPm9iamVjdCk7CisJCWVsc2UgeworCQkJaWYgKG5hbWUpCisJCQkJZXJyb3IoIiUuKnM6IGV4cGVjdGVkICVzIHR5cGUsIGJ1dCB0aGUgb2JqZWN0ICIKKwkJCQkgICAgICAiZGVyZWZlcmVuY2VzIHRvICVzIHR5cGUiLAorCQkJCSAgICAgIG5hbWVsZW4sIG5hbWUsIHR5cGVfbmFtZShleHBlY3RlZF90eXBlKSwKKwkJCQkgICAgICB0eXBlX25hbWUoby0+dHlwZSkpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgcGVlbF9vbmlvbihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJICAgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB1bnNpZ25lZCBsb29rdXBfZmxhZ3MpCit7CisJc3RydWN0IG9iamVjdF9pZCBvdXRlcjsKKwljb25zdCBjaGFyICpzcDsKKwl1bnNpZ25lZCBpbnQgZXhwZWN0ZWRfdHlwZSA9IDA7CisJc3RydWN0IG9iamVjdCAqbzsKKworCS8qCisJICogInJlZl57dHlwZX0iIGRlcmVmZXJlbmNlcyByZWYgcmVwZWF0ZWRseSB1bnRpbCB5b3UgY2Fubm90CisJICogZGVyZWZlcmVuY2UgYW55bW9yZSwgb3IgeW91IGdldCBhbiBvYmplY3Qgb2YgZ2l2ZW4gdHlwZSwKKwkgKiB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICAicmVmXnt9IiBtZWFucyBqdXN0IGRlcmVmZXJlbmNlCisJICogdGFncyB1bnRpbCB5b3UgZ2V0IGEgbm9uLXRhZy4gICJyZWZeMCIgaXMgYSBzaG9ydGhhbmQgZm9yCisJICogInJlZl57Y29tbWl0fSIuICAiY29tbWl0Xnt0cmVlfSIgY291bGQgYmUgdXNlZCB0byBmaW5kIHRoZQorCSAqIHRvcC1sZXZlbCB0cmVlIG9mIHRoZSBnaXZlbiBjb21taXQuCisJICovCisJaWYgKGxlbiA8IDQgfHwgbmFtZVtsZW4tMV0gIT0gJ30nKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKHNwID0gbmFtZSArIGxlbiAtIDE7IG5hbWUgPD0gc3A7IHNwLS0pIHsKKwkJaW50IGNoID0gKnNwOworCQlpZiAoY2ggPT0gJ3snICYmIG5hbWUgPCBzcCAmJiBzcFstMV0gPT0gJ14nKQorCQkJYnJlYWs7CisJfQorCWlmIChzcCA8PSBuYW1lKQorCQlyZXR1cm4gLTE7CisKKwlzcCsrOyAvKiBiZWdpbm5pbmcgb2YgdHlwZSBuYW1lLCBvciBjbG9zaW5nIGJyYWNlIGZvciBlbXB0eSAqLworCWlmIChzdGFydHNfd2l0aChzcCwgImNvbW1pdH0iKSkKKwkJZXhwZWN0ZWRfdHlwZSA9IE9CSl9DT01NSVQ7CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgoc3AsICJ0YWd9IikpCisJCWV4cGVjdGVkX3R5cGUgPSBPQkpfVEFHOworCWVsc2UgaWYgKHN0YXJ0c193aXRoKHNwLCAidHJlZX0iKSkKKwkJZXhwZWN0ZWRfdHlwZSA9IE9CSl9UUkVFOworCWVsc2UgaWYgKHN0YXJ0c193aXRoKHNwLCAiYmxvYn0iKSkKKwkJZXhwZWN0ZWRfdHlwZSA9IE9CSl9CTE9COworCWVsc2UgaWYgKHN0YXJ0c193aXRoKHNwLCAib2JqZWN0fSIpKQorCQlleHBlY3RlZF90eXBlID0gT0JKX0FOWTsKKwllbHNlIGlmIChzcFswXSA9PSAnfScpCisJCWV4cGVjdGVkX3R5cGUgPSBPQkpfTk9ORTsKKwllbHNlIGlmIChzcFswXSA9PSAnLycpCisJCWV4cGVjdGVkX3R5cGUgPSBPQkpfQ09NTUlUOworCWVsc2UKKwkJcmV0dXJuIC0xOworCisJbG9va3VwX2ZsYWdzICY9IH5HRVRfT0lEX0RJU0FNQklHVUFUT1JTOworCWlmIChleHBlY3RlZF90eXBlID09IE9CSl9DT01NSVQpCisJCWxvb2t1cF9mbGFncyB8PSBHRVRfT0lEX0NPTU1JVFRJU0g7CisJZWxzZSBpZiAoZXhwZWN0ZWRfdHlwZSA9PSBPQkpfVFJFRSkKKwkJbG9va3VwX2ZsYWdzIHw9IEdFVF9PSURfVFJFRUlTSDsKKworCWlmIChnZXRfb2lkXzEociwgbmFtZSwgc3AgLSBuYW1lIC0gMiwgJm91dGVyLCBsb29rdXBfZmxhZ3MpKQorCQlyZXR1cm4gLTE7CisKKwlvID0gcGFyc2Vfb2JqZWN0KHIsICZvdXRlcik7CisJaWYgKCFvKQorCQlyZXR1cm4gLTE7CisJaWYgKCFleHBlY3RlZF90eXBlKSB7CisJCW8gPSBkZXJlZl90YWcociwgbywgbmFtZSwgc3AgLSBuYW1lIC0gMik7CisJCWlmICghbyB8fCAoIW8tPnBhcnNlZCAmJiAhcGFyc2Vfb2JqZWN0KHIsICZvLT5vaWQpKSkKKwkJCXJldHVybiAtMTsKKwkJb2lkY3B5KG9pZCwgJm8tPm9pZCk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogQXQgdGhpcyBwb2ludCwgdGhlIHN5bnRheCBsb29rIGNvcnJlY3QsIHNvCisJICogaWYgd2UgZG8gbm90IGdldCB0aGUgbmVlZGVkIG9iamVjdCwgd2Ugc2hvdWxkCisJICogYmFyZi4KKwkgKi8KKwlvID0gcmVwb19wZWVsX3RvX3R5cGUociwgbmFtZSwgbGVuLCBvLCBleHBlY3RlZF90eXBlKTsKKwlpZiAoIW8pCisJCXJldHVybiAtMTsKKworCW9pZGNweShvaWQsICZvLT5vaWQpOworCWlmIChzcFswXSA9PSAnLycpIHsKKwkJLyogIiRjb21taXReey9mb299IiAqLworCQljaGFyICpwcmVmaXg7CisJCWludCByZXQ7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IE5VTEw7CisKKwkJLyoKKwkJICogJGNvbW1pdF57L30uIFNvbWUgcmVnZXggaW1wbGVtZW50YXRpb24gbWF5IHJlamVjdC4KKwkJICogV2UgZG9uJ3QgbmVlZCByZWdleCBhbnl3YXkuICcnIHBhdHRlcm4gYWx3YXlzIG1hdGNoZXMuCisJCSAqLworCQlpZiAoc3BbMV0gPT0gJ30nKQorCQkJcmV0dXJuIDA7CisKKwkJcHJlZml4ID0geHN0cm5kdXAoc3AgKyAxLCBuYW1lICsgbGVuIC0gMSAtIChzcCArIDEpKTsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KChzdHJ1Y3QgY29tbWl0ICopbywgJmxpc3QpOworCQlyZXQgPSBnZXRfb2lkX29uZWxpbmUociwgcHJlZml4LCBvaWQsIGxpc3QpOworCQlmcmVlKHByZWZpeCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9kZXNjcmliZV9uYW1lKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAorCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJY29uc3QgY2hhciAqY3A7CisJdW5zaWduZWQgZmxhZ3MgPSBHRVRfT0lEX1FVSUVUTFkgfCBHRVRfT0lEX0NPTU1JVDsKKworCWZvciAoY3AgPSBuYW1lICsgbGVuIC0gMTsgbmFtZSArIDIgPD0gY3A7IGNwLS0pIHsKKwkJY2hhciBjaCA9ICpjcDsKKwkJaWYgKCFpc3hkaWdpdChjaCkpIHsKKwkJCS8qIFdlIG11c3QgYmUgbG9va2luZyBhdCBnIGluICJTT01FVEhJTkctZyIKKwkJCSAqIGZvciBpdCB0byBiZSBkZXNjcmliZSBvdXRwdXQuCisJCQkgKi8KKwkJCWlmIChjaCA9PSAnZycgJiYgY3BbLTFdID09ICctJykgeworCQkJCWNwKys7CisJCQkJbGVuIC09IGNwIC0gbmFtZTsKKwkJCQlyZXR1cm4gZ2V0X3Nob3J0X29pZChyLAorCQkJCQkJICAgICBjcCwgbGVuLCBvaWQsIGZsYWdzKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBlbnVtIGdldF9vaWRfcmVzdWx0IGdldF9vaWRfMShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCisJCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICAgICB1bnNpZ25lZCBsb29rdXBfZmxhZ3MpCit7CisJaW50IHJldCwgaGFzX3N1ZmZpeDsKKwljb25zdCBjaGFyICpjcDsKKworCS8qCisJICogIm5hbWV+MyIgaXMgIm5hbWVeXl4iLCAibmFtZX4iIGlzICJuYW1lfjEiLCBhbmQgIm5hbWVeIiBpcyAibmFtZV4xIi4KKwkgKi8KKwloYXNfc3VmZml4ID0gMDsKKwlmb3IgKGNwID0gbmFtZSArIGxlbiAtIDE7IG5hbWUgPD0gY3A7IGNwLS0pIHsKKwkJaW50IGNoID0gKmNwOworCQlpZiAoJzAnIDw9IGNoICYmIGNoIDw9ICc5JykKKwkJCWNvbnRpbnVlOworCQlpZiAoY2ggPT0gJ34nIHx8IGNoID09ICdeJykKKwkJCWhhc19zdWZmaXggPSBjaDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGhhc19zdWZmaXgpIHsKKwkJdW5zaWduZWQgaW50IG51bSA9IDA7CisJCWludCBsZW4xID0gY3AgLSBuYW1lOworCQljcCsrOworCQl3aGlsZSAoY3AgPCBuYW1lICsgbGVuKSB7CisJCQl1bnNpZ25lZCBpbnQgZGlnaXQgPSAqY3ArKyAtICcwJzsKKwkJCWlmICh1bnNpZ25lZF9tdWx0X292ZXJmbG93cyhudW0sIDEwKSkKKwkJCQlyZXR1cm4gTUlTU0lOR19PQkpFQ1Q7CisJCQludW0gKj0gMTA7CisJCQlpZiAodW5zaWduZWRfYWRkX292ZXJmbG93cyhudW0sIGRpZ2l0KSkKKwkJCQlyZXR1cm4gTUlTU0lOR19PQkpFQ1Q7CisJCQludW0gKz0gZGlnaXQ7CisJCX0KKwkJaWYgKCFudW0gJiYgbGVuMSA9PSBsZW4gLSAxKQorCQkJbnVtID0gMTsKKwkJZWxzZSBpZiAobnVtID4gSU5UX01BWCkKKwkJCXJldHVybiBNSVNTSU5HX09CSkVDVDsKKwkJaWYgKGhhc19zdWZmaXggPT0gJ14nKQorCQkJcmV0dXJuIGdldF9wYXJlbnQociwgbmFtZSwgbGVuMSwgb2lkLCBudW0pOworCQkvKiBlbHNlIGlmIChoYXNfc3VmZml4ID09ICd+JykgLS0gZ29lcyB3aXRob3V0IHNheWluZyAqLworCQlyZXR1cm4gZ2V0X250aF9hbmNlc3RvcihyLCBuYW1lLCBsZW4xLCBvaWQsIG51bSk7CisJfQorCisJcmV0ID0gcGVlbF9vbmlvbihyLCBuYW1lLCBsZW4sIG9pZCwgbG9va3VwX2ZsYWdzKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIEZPVU5EOworCisJcmV0ID0gZ2V0X29pZF9iYXNpYyhyLCBuYW1lLCBsZW4sIG9pZCwgbG9va3VwX2ZsYWdzKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIEZPVU5EOworCisJLyogSXQgY291bGQgYmUgZGVzY3JpYmUgb3V0cHV0IHRoYXQgaXMgIlNPTUVUSElORy1nWFhYWCIgKi8KKwlyZXQgPSBnZXRfZGVzY3JpYmVfbmFtZShyLCBuYW1lLCBsZW4sIG9pZCk7CisJaWYgKCFyZXQpCisJCXJldHVybiBGT1VORDsKKworCXJldHVybiBnZXRfc2hvcnRfb2lkKHIsIG5hbWUsIGxlbiwgb2lkLCBsb29rdXBfZmxhZ3MpOworfQorCisvKgorICogVGhpcyBpbnRlcnByZXRzIG5hbWVzIGxpa2UgJzovSW5pdGlhbCByZXZpc2lvbiBvZiAiZ2l0IicgYnkgc2VhcmNoaW5nCisgKiB0aHJvdWdoIGhpc3RvcnkgYW5kIHJldHVybmluZyB0aGUgZmlyc3QgY29tbWl0IHdob3NlIG1lc3NhZ2Ugc3RhcnRzCisgKiB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uLgorICoKKyAqIEZvciBuZWdhdGl2ZS1tYXRjaGluZywgcHJlZml4IHRoZSBwYXR0ZXJuLXBhcnQgd2l0aCAnIS0nLCBsaWtlOiAnOi8hLVdJUCcuCisgKgorICogRm9yIGEgbGl0ZXJhbCAnIScgY2hhcmFjdGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBwYXR0ZXJuLCB5b3UgaGF2ZSB0byByZXBlYXQKKyAqIHRoYXQsIGxpa2U6ICc6LyEhZm9vJworICoKKyAqIEZvciBmdXR1cmUgZXh0ZW5zaW9uLCBhbGwgb3RoZXIgc2VxdWVuY2VzIGJlZ2lubmluZyB3aXRoICc6LyEnIGFyZSByZXNlcnZlZC4KKyAqLworCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworI2RlZmluZSBPTkVMSU5FX1NFRU4gKDF1PDwyMCkKKworc3RydWN0IGhhbmRsZV9vbmVfcmVmX2NiIHsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0OworfTsKKworc3RhdGljIGludCBoYW5kbGVfb25lX3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBoYW5kbGVfb25lX3JlZl9jYiAqY2IgPSBjYl9kYXRhOworCXN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QgPSBjYi0+bGlzdDsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBwYXJzZV9vYmplY3QoY2ItPnJlcG8sIG9pZCk7CisJaWYgKCFvYmplY3QpCisJCXJldHVybiAwOworCWlmIChvYmplY3QtPnR5cGUgPT0gT0JKX1RBRykgeworCQlvYmplY3QgPSBkZXJlZl90YWcoY2ItPnJlcG8sIG9iamVjdCwgcGF0aCwKKwkJCQkgICBzdHJsZW4ocGF0aCkpOworCQlpZiAoIW9iamVjdCkKKwkJCXJldHVybiAwOworCX0KKwlpZiAob2JqZWN0LT50eXBlICE9IE9CSl9DT01NSVQpCisJCXJldHVybiAwOworCWNvbW1pdF9saXN0X2luc2VydCgoc3RydWN0IGNvbW1pdCAqKW9iamVjdCwgbGlzdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X29pZF9vbmVsaW5lKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpiYWNrdXAgPSBOVUxMLCAqbDsKKwlpbnQgZm91bmQgPSAwOworCWludCBuZWdhdGl2ZSA9IDA7CisJcmVnZXhfdCByZWdleDsKKworCWlmIChwcmVmaXhbMF0gPT0gJyEnKSB7CisJCXByZWZpeCsrOworCisJCWlmIChwcmVmaXhbMF0gPT0gJy0nKSB7CisJCQlwcmVmaXgrKzsKKwkJCW5lZ2F0aXZlID0gMTsKKwkJfSBlbHNlIGlmIChwcmVmaXhbMF0gIT0gJyEnKSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlpZiAocmVnY29tcCgmcmVnZXgsIHByZWZpeCwgUkVHX0VYVEVOREVEKSkKKwkJcmV0dXJuIC0xOworCisJZm9yIChsID0gbGlzdDsgbDsgbCA9IGwtPm5leHQpIHsKKwkJbC0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IE9ORUxJTkVfU0VFTjsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGwtPml0ZW0sICZiYWNrdXApOworCX0KKwl3aGlsZSAobGlzdCkgeworCQljb25zdCBjaGFyICpwLCAqYnVmOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJCWludCBtYXRjaGVzOworCisJCWNvbW1pdCA9IHBvcF9tb3N0X3JlY2VudF9jb21taXQoJmxpc3QsIE9ORUxJTkVfU0VFTik7CisJCWlmICghcGFyc2Vfb2JqZWN0KHIsICZjb21taXQtPm9iamVjdC5vaWQpKQorCQkJY29udGludWU7CisJCWJ1ZiA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgTlVMTCk7CisJCXAgPSBzdHJzdHIoYnVmLCAiXG5cbiIpOworCQltYXRjaGVzID0gbmVnYXRpdmUgXiAocCAmJiAhcmVnZXhlYygmcmVnZXgsIHAgKyAyLCAwLCBOVUxMLCAwKSk7CisJCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBidWYpOworCisJCWlmIChtYXRjaGVzKSB7CisJCQlvaWRjcHkob2lkLCAmY29tbWl0LT5vYmplY3Qub2lkKTsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJlZ2ZyZWUoJnJlZ2V4KTsKKwlmcmVlX2NvbW1pdF9saXN0KGxpc3QpOworCWZvciAobCA9IGJhY2t1cDsgbDsgbCA9IGwtPm5leHQpCisJCWNsZWFyX2NvbW1pdF9tYXJrcyhsLT5pdGVtLCBPTkVMSU5FX1NFRU4pOworCWZyZWVfY29tbWl0X2xpc3QoYmFja3VwKTsKKwlyZXR1cm4gZm91bmQgPyAwIDogLTE7Cit9CisKK3N0cnVjdCBncmFiX250aF9icmFuY2hfc3dpdGNoX2NiZGF0YSB7CisJaW50IHJlbWFpbmluZzsKKwlzdHJ1Y3Qgc3RyYnVmICpzYjsKK307CisKK3N0YXRpYyBpbnQgZ3JhYl9udGhfYnJhbmNoX3N3aXRjaChzdHJ1Y3Qgb2JqZWN0X2lkICpvb2lkLCBzdHJ1Y3Qgb2JqZWN0X2lkICpub2lkLAorCQkJCSAgY29uc3QgY2hhciAqZW1haWwsIHRpbWVzdGFtcF90IHRpbWVzdGFtcCwgaW50IHR6LAorCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgZ3JhYl9udGhfYnJhbmNoX3N3aXRjaF9jYmRhdGEgKmNiID0gY2JfZGF0YTsKKwljb25zdCBjaGFyICptYXRjaCA9IE5VTEwsICp0YXJnZXQgPSBOVUxMOworCXNpemVfdCBsZW47CisKKwlpZiAoc2tpcF9wcmVmaXgobWVzc2FnZSwgImNoZWNrb3V0OiBtb3ZpbmcgZnJvbSAiLCAmbWF0Y2gpKQorCQl0YXJnZXQgPSBzdHJzdHIobWF0Y2gsICIgdG8gIik7CisKKwlpZiAoIW1hdGNoIHx8ICF0YXJnZXQpCisJCXJldHVybiAwOworCWlmICgtLShjYi0+cmVtYWluaW5nKSA9PSAwKSB7CisJCWxlbiA9IHRhcmdldCAtIG1hdGNoOworCQlzdHJidWZfcmVzZXQoY2ItPnNiKTsKKwkJc3RyYnVmX2FkZChjYi0+c2IsIG1hdGNoLCBsZW4pOworCQlyZXR1cm4gMTsgLyogd2UgYXJlIGRvbmUgKi8KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQYXJzZSBAey1OfSBzeW50YXgsIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGFyc2VkCisgKiBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2Ugc2lnbmFsIGFuIGVycm9yIHdpdGggbmVnYXRpdmUgdmFsdWUuCisgKi8KK3N0YXRpYyBpbnQgaW50ZXJwcmV0X250aF9wcmlvcl9jaGVja291dChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCQkJCXN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlsb25nIG50aDsKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBncmFiX250aF9icmFuY2hfc3dpdGNoX2NiZGF0YSBjYjsKKwljb25zdCBjaGFyICpicmFjZTsKKwljaGFyICpudW1fZW5kOworCisJaWYgKG5hbWVsZW4gPCA0KQorCQlyZXR1cm4gLTE7CisJaWYgKG5hbWVbMF0gIT0gJ0AnIHx8IG5hbWVbMV0gIT0gJ3snIHx8IG5hbWVbMl0gIT0gJy0nKQorCQlyZXR1cm4gLTE7CisJYnJhY2UgPSBtZW1jaHIobmFtZSwgJ30nLCBuYW1lbGVuKTsKKwlpZiAoIWJyYWNlKQorCQlyZXR1cm4gLTE7CisJbnRoID0gc3RydG9sKG5hbWUgKyAzLCAmbnVtX2VuZCwgMTApOworCWlmIChudW1fZW5kICE9IGJyYWNlKQorCQlyZXR1cm4gLTE7CisJaWYgKG50aCA8PSAwKQorCQlyZXR1cm4gLTE7CisJY2IucmVtYWluaW5nID0gbnRoOworCWNiLnNiID0gYnVmOworCisJcmV0dmFsID0gcmVmc19mb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2UoZ2V0X21haW5fcmVmX3N0b3JlKHIpLAorCQkJIkhFQUQiLCBncmFiX250aF9icmFuY2hfc3dpdGNoLCAmY2IpOworCWlmICgwIDwgcmV0dmFsKSB7CisJCXJldHZhbCA9IGJyYWNlIC0gbmFtZSArIDE7CisJfSBlbHNlCisJCXJldHZhbCA9IDA7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgcmVwb19nZXRfb2lkX21iKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpvbmUsICp0d287CisJc3RydWN0IGNvbW1pdF9saXN0ICptYnM7CisJc3RydWN0IG9iamVjdF9pZCBvaWRfdG1wOworCWNvbnN0IGNoYXIgKmRvdHM7CisJaW50IHN0OworCisJZG90cyA9IHN0cnN0cihuYW1lLCAiLi4uIik7CisJaWYgKCFkb3RzKQorCQlyZXR1cm4gcmVwb19nZXRfb2lkKHIsIG5hbWUsIG9pZCk7CisJaWYgKGRvdHMgPT0gbmFtZSkKKwkJc3QgPSByZXBvX2dldF9vaWQociwgIkhFQUQiLCAmb2lkX3RtcCk7CisJZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgc2I7CisJCXN0cmJ1Zl9pbml0KCZzYiwgZG90cyAtIG5hbWUpOworCQlzdHJidWZfYWRkKCZzYiwgbmFtZSwgZG90cyAtIG5hbWUpOworCQlzdCA9IHJlcG9fZ2V0X29pZF9jb21taXR0aXNoKHIsIHNiLmJ1ZiwgJm9pZF90bXApOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCX0KKwlpZiAoc3QpCisJCXJldHVybiBzdDsKKwlvbmUgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkociwgJm9pZF90bXAsIDApOworCWlmICghb25lKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocmVwb19nZXRfb2lkX2NvbW1pdHRpc2gociwgZG90c1szXSA/IChkb3RzICsgMykgOiAiSEVBRCIsICZvaWRfdG1wKSkKKwkJcmV0dXJuIC0xOworCXR3byA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyLCAmb2lkX3RtcCwgMCk7CisJaWYgKCF0d28pCisJCXJldHVybiAtMTsKKwltYnMgPSByZXBvX2dldF9tZXJnZV9iYXNlcyhyLCBvbmUsIHR3byk7CisJaWYgKCFtYnMgfHwgbWJzLT5uZXh0KQorCQlzdCA9IC0xOworCWVsc2UgeworCQlzdCA9IDA7CisJCW9pZGNweShvaWQsICZtYnMtPml0ZW0tPm9iamVjdC5vaWQpOworCX0KKwlmcmVlX2NvbW1pdF9saXN0KG1icyk7CisJcmV0dXJuIHN0OworfQorCisvKiBwYXJzZSBAc29tZXRoaW5nIHN5bnRheCwgd2hlbiAnc29tZXRoaW5nJyBpcyBub3Qgey4qfSAqLworc3RhdGljIGludCBpbnRlcnByZXRfZW1wdHlfYXQoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBsZW4sIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwljb25zdCBjaGFyICpuZXh0OworCisJaWYgKGxlbiB8fCBuYW1lWzFdID09ICd7JykKKwkJcmV0dXJuIC0xOworCisJLyogbWFrZSBzdXJlIGl0J3MgYSBzaW5nbGUgQCwgb3IgQEB7Lip9LCBub3QgQGZvbyAqLworCW5leHQgPSBtZW1jaHIobmFtZSArIGxlbiArIDEsICdAJywgbmFtZWxlbiAtIGxlbiAtIDEpOworCWlmIChuZXh0ICYmIG5leHRbMV0gIT0gJ3snKQorCQlyZXR1cm4gLTE7CisJaWYgKCFuZXh0KQorCQluZXh0ID0gbmFtZSArIG5hbWVsZW47CisJaWYgKG5leHQgIT0gbmFtZSArIDEpCisJCXJldHVybiAtMTsKKworCXN0cmJ1Zl9yZXNldChidWYpOworCXN0cmJ1Zl9hZGQoYnVmLCAiSEVBRCIsIDQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlaW50ZXJwcmV0KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBsZW4sCisJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICpidWYsIHVuc2lnbmVkIGFsbG93ZWQpCit7CisJLyogd2UgaGF2ZSBleHRyYSBkYXRhLCB3aGljaCBtaWdodCBuZWVkIGZ1cnRoZXIgcHJvY2Vzc2luZyAqLworCXN0cnVjdCBzdHJidWYgdG1wID0gU1RSQlVGX0lOSVQ7CisJaW50IHVzZWQgPSBidWYtPmxlbjsKKwlpbnQgcmV0OworCisJc3RyYnVmX2FkZChidWYsIG5hbWUgKyBsZW4sIG5hbWVsZW4gLSBsZW4pOworCXJldCA9IHJlcG9faW50ZXJwcmV0X2JyYW5jaF9uYW1lKHIsIGJ1Zi0+YnVmLCBidWYtPmxlbiwgJnRtcCwgYWxsb3dlZCk7CisJLyogdGhhdCBkYXRhIHdhcyBub3QgaW50ZXJwcmV0ZWQsIHJlbW92ZSBvdXIgY3J1ZnQgKi8KKwlpZiAocmV0IDwgMCkgeworCQlzdHJidWZfc2V0bGVuKGJ1ZiwgdXNlZCk7CisJCXJldHVybiBsZW47CisJfQorCXN0cmJ1Zl9yZXNldChidWYpOworCXN0cmJ1Zl9hZGRidWYoYnVmLCAmdG1wKTsKKwlzdHJidWZfcmVsZWFzZSgmdG1wKTsKKwkvKiB0d2VhayBmb3Igc2l6ZSBvZiB7LU59IHZlcnN1cyBleHBhbmRlZCByZWYgbmFtZSAqLworCXJldHVybiByZXQgLSB1c2VkICsgbGVuOworfQorCitzdGF0aWMgdm9pZCBzZXRfc2hvcnRlbmVkX3JlZihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpyZWYpCit7CisJY2hhciAqcyA9IHJlZnNfc2hvcnRlbl91bmFtYmlndW91c19yZWYoZ2V0X21haW5fcmVmX3N0b3JlKHIpLCByZWYsIDApOworCXN0cmJ1Zl9yZXNldChidWYpOworCXN0cmJ1Zl9hZGRzdHIoYnVmLCBzKTsKKwlmcmVlKHMpOworfQorCitzdGF0aWMgaW50IGJyYW5jaF9pbnRlcnByZXRfYWxsb3dlZChjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBhbGxvd2VkKQoreworCWlmICghYWxsb3dlZCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKGFsbG93ZWQgJiBJTlRFUlBSRVRfQlJBTkNIX0xPQ0FMKSAmJgorCSAgICBzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJcmV0dXJuIDE7CisJaWYgKChhbGxvd2VkICYgSU5URVJQUkVUX0JSQU5DSF9SRU1PVEUpICYmCisJICAgIHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL3JlbW90ZXMvIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW50ZXJwcmV0X2JyYW5jaF9tYXJrKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCQkgaW50IGF0LCBzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkJIGludCAoKmdldF9tYXJrKShjb25zdCBjaGFyICosIGludCksCisJCQkJIGNvbnN0IGNoYXIgKigqZ2V0X2RhdGEpKHN0cnVjdCBicmFuY2ggKiwKKwkJCQkJCQkgc3RydWN0IHN0cmJ1ZiAqKSwKKwkJCQkgdW5zaWduZWQgYWxsb3dlZCkKK3sKKwlpbnQgbGVuOworCXN0cnVjdCBicmFuY2ggKmJyYW5jaDsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJbGVuID0gZ2V0X21hcmsobmFtZSArIGF0LCBuYW1lbGVuIC0gYXQpOworCWlmICghbGVuKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobWVtY2hyKG5hbWUsICc6JywgYXQpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYXQpIHsKKwkJY2hhciAqbmFtZV9zdHIgPSB4bWVtZHVweihuYW1lLCBhdCk7CisJCWJyYW5jaCA9IGJyYW5jaF9nZXQobmFtZV9zdHIpOworCQlmcmVlKG5hbWVfc3RyKTsKKwl9IGVsc2UKKwkJYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKworCXZhbHVlID0gZ2V0X2RhdGEoYnJhbmNoLCAmZXJyKTsKKwlpZiAoIXZhbHVlKQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisKKwlpZiAoIWJyYW5jaF9pbnRlcnByZXRfYWxsb3dlZCh2YWx1ZSwgYWxsb3dlZCkpCisJCXJldHVybiAtMTsKKworCXNldF9zaG9ydGVuZWRfcmVmKHIsIGJ1ZiwgdmFsdWUpOworCXJldHVybiBsZW4gKyBhdDsKK30KKworaW50IHJlcG9faW50ZXJwcmV0X2JyYW5jaF9uYW1lKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJCSAgICAgICB1bnNpZ25lZCBhbGxvd2VkKQoreworCWNoYXIgKmF0OworCWNvbnN0IGNoYXIgKnN0YXJ0OworCWludCBsZW47CisKKwlpZiAoIW5hbWVsZW4pCisJCW5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisKKwlpZiAoIWFsbG93ZWQgfHwgKGFsbG93ZWQgJiBJTlRFUlBSRVRfQlJBTkNIX0xPQ0FMKSkgeworCQlsZW4gPSBpbnRlcnByZXRfbnRoX3ByaW9yX2NoZWNrb3V0KHIsIG5hbWUsIG5hbWVsZW4sIGJ1Zik7CisJCWlmICghbGVuKSB7CisJCQlyZXR1cm4gbGVuOyAvKiBzeW50YXggT2ssIG5vdCBlbm91Z2ggc3dpdGNoZXMgKi8KKwkJfSBlbHNlIGlmIChsZW4gPiAwKSB7CisJCQlpZiAobGVuID09IG5hbWVsZW4pCisJCQkJcmV0dXJuIGxlbjsgLyogY29uc3VtZWQgYWxsICovCisJCQllbHNlCisJCQkJcmV0dXJuIHJlaW50ZXJwcmV0KHIsIG5hbWUsIG5hbWVsZW4sIGxlbiwgYnVmLCBhbGxvd2VkKTsKKwkJfQorCX0KKworCWZvciAoc3RhcnQgPSBuYW1lOworCSAgICAgKGF0ID0gbWVtY2hyKHN0YXJ0LCAnQCcsIG5hbWVsZW4gLSAoc3RhcnQgLSBuYW1lKSkpOworCSAgICAgc3RhcnQgPSBhdCArIDEpIHsKKworCQlpZiAoIWFsbG93ZWQgfHwgKGFsbG93ZWQgJiBJTlRFUlBSRVRfQlJBTkNIX0hFQUQpKSB7CisJCQlsZW4gPSBpbnRlcnByZXRfZW1wdHlfYXQobmFtZSwgbmFtZWxlbiwgYXQgLSBuYW1lLCBidWYpOworCQkJaWYgKGxlbiA+IDApCisJCQkJcmV0dXJuIHJlaW50ZXJwcmV0KHIsIG5hbWUsIG5hbWVsZW4sIGxlbiwgYnVmLAorCQkJCQkJICAgYWxsb3dlZCk7CisJCX0KKworCQlsZW4gPSBpbnRlcnByZXRfYnJhbmNoX21hcmsociwgbmFtZSwgbmFtZWxlbiwgYXQgLSBuYW1lLCBidWYsCisJCQkJCSAgICB1cHN0cmVhbV9tYXJrLCBicmFuY2hfZ2V0X3Vwc3RyZWFtLAorCQkJCQkgICAgYWxsb3dlZCk7CisJCWlmIChsZW4gPiAwKQorCQkJcmV0dXJuIGxlbjsKKworCQlsZW4gPSBpbnRlcnByZXRfYnJhbmNoX21hcmsociwgbmFtZSwgbmFtZWxlbiwgYXQgLSBuYW1lLCBidWYsCisJCQkJCSAgICBwdXNoX21hcmssIGJyYW5jaF9nZXRfcHVzaCwKKwkJCQkJICAgIGFsbG93ZWQpOworCQlpZiAobGVuID4gMCkKKwkJCXJldHVybiBsZW47CisJfQorCisJcmV0dXJuIC0xOworfQorCit2b2lkIHN0cmJ1Zl9icmFuY2huYW1lKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBhbGxvd2VkKQoreworCWludCBsZW4gPSBzdHJsZW4obmFtZSk7CisJaW50IHVzZWQgPSBpbnRlcnByZXRfYnJhbmNoX25hbWUobmFtZSwgbGVuLCBzYiwgYWxsb3dlZCk7CisKKwlpZiAodXNlZCA8IDApCisJCXVzZWQgPSAwOworCXN0cmJ1Zl9hZGQoc2IsIG5hbWUgKyB1c2VkLCBsZW4gLSB1c2VkKTsKK30KKworaW50IHN0cmJ1Zl9jaGVja19icmFuY2hfcmVmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkKKwkJc3RyYnVmX2JyYW5jaG5hbWUoc2IsIG5hbWUsIElOVEVSUFJFVF9CUkFOQ0hfTE9DQUwpOworCWVsc2UKKwkJc3RyYnVmX2FkZHN0cihzYiwgbmFtZSk7CisKKwkvKgorCSAqIFRoaXMgc3BsaWNlIG11c3QgYmUgZG9uZSBldmVuIGlmIHdlIGVuZCB1cCByZWplY3RpbmcgdGhlCisJICogbmFtZTsgYnVpbHRpbi9icmFuY2guYzo6Y29weV9vcl9yZW5hbWVfYnJhbmNoKCkgc3RpbGwgd2FudHMKKwkgKiB0byBzZWUgd2hhdCB0aGUgbmFtZSBleHBhbmRlZCB0byBzbyB0aGF0ICJicmFuY2ggLW0iIGNhbiBiZQorCSAqIHVzZWQgYXMgYSB0b29sIHRvIGNvcnJlY3QgZWFybGllciBtaXN0YWtlcy4KKwkgKi8KKwlzdHJidWZfc3BsaWNlKHNiLCAwLCAwLCAicmVmcy9oZWFkcy8iLCAxMSk7CisKKwlpZiAoKm5hbWUgPT0gJy0nIHx8CisJICAgICFzdHJjbXAoc2ItPmJ1ZiwgInJlZnMvaGVhZHMvSEVBRCIpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gY2hlY2tfcmVmbmFtZV9mb3JtYXQoc2ItPmJ1ZiwgMCk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGxpa2UgImdldF9vaWRfYmFzaWMoKSIsIGV4Y2VwdCBpdCBhbGxvd3MgIm9iamVjdCBJRCBleHByZXNzaW9ucyIsCisgKiBub3RhYmx5ICJ4eXpeIiBmb3IgInBhcmVudCBvZiB4eXoiCisgKi8KK2ludCByZXBvX2dldF9vaWQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgdW51c2VkOworCXJldHVybiBnZXRfb2lkX3dpdGhfY29udGV4dChyLCBuYW1lLCAwLCBvaWQsICZ1bnVzZWQpOworfQorCisvKgorICogVGhpcyByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUgaWYgdGhlIHN0cmluZyAoYnVpbHQgdXNpbmcgcHJpbnRmCisgKiBmb3JtYXQgYW5kIHRoZSBnaXZlbiBhcmd1bWVudHMpIGlzIG5vdCBhIHZhbGlkIG9iamVjdC4KKyAqLworaW50IGdldF9vaWRmKHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgcmV0OworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0cmJ1Zl92YWRkZigmc2IsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlyZXQgPSBnZXRfb2lkKHNiLmJ1Ziwgb2lkKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIE1hbnkgY2FsbGVycyBrbm93IHRoYXQgdGhlIHVzZXIgbWVhbnQgdG8gbmFtZSBhIGNvbW1pdC1pc2ggYnkKKyAqIHN5bnRhY3RpY2FsIHBvc2l0aW9ucyB3aGVyZSB0aGUgb2JqZWN0IG5hbWUgYXBwZWFycy4gIENhbGxpbmcgdGhpcworICogZnVuY3Rpb24gYWxsb3dzIHRoZSBtYWNoaW5lcnkgdG8gZGlzYW1iaWd1YXRlIHNob3J0ZXItdGhhbi11bmlxdWUKKyAqIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lcyBiZXR3ZWVuIGNvbW1pdC1pc2ggYW5kIG90aGVycy4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIE5PVCBlcnJvciBvdXQgd2hlbiB0aGUgbmFtZWQgb2JqZWN0IGlzIG5vdCBhCisgKiBjb21taXQtaXNoLiBJdCBpcyBtZXJlbHkgdG8gZ2l2ZSBhIGhpbnQgdG8gdGhlIGRpc2FtYmlndWF0aW9uCisgKiBtYWNoaW5lcnkuCisgKi8KK2ludCByZXBvX2dldF9vaWRfY29tbWl0dGlzaChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgdW51c2VkOworCXJldHVybiBnZXRfb2lkX3dpdGhfY29udGV4dChyLCBuYW1lLCBHRVRfT0lEX0NPTU1JVFRJU0gsCisJCQkJICAgIG9pZCwgJnVudXNlZCk7Cit9CisKK2ludCByZXBvX2dldF9vaWRfdHJlZWlzaChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSBjb25zdCBjaGFyICpuYW1lLAorCQkJIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgdW51c2VkOworCXJldHVybiBnZXRfb2lkX3dpdGhfY29udGV4dChyLCBuYW1lLCBHRVRfT0lEX1RSRUVJU0gsCisJCQkJICAgIG9pZCwgJnVudXNlZCk7Cit9CisKK2ludCByZXBvX2dldF9vaWRfY29tbWl0KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJY29uc3QgY2hhciAqbmFtZSwKKwkJCXN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgdW51c2VkOworCXJldHVybiBnZXRfb2lkX3dpdGhfY29udGV4dChyLCBuYW1lLCBHRVRfT0lEX0NPTU1JVCwKKwkJCQkgICAgb2lkLCAmdW51c2VkKTsKK30KKworaW50IHJlcG9fZ2V0X29pZF90cmVlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IG9iamVjdF9jb250ZXh0IHVudXNlZDsKKwlyZXR1cm4gZ2V0X29pZF93aXRoX2NvbnRleHQociwgbmFtZSwgR0VUX09JRF9UUkVFLAorCQkJCSAgICBvaWQsICZ1bnVzZWQpOworfQorCitpbnQgcmVwb19nZXRfb2lkX2Jsb2Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgdW51c2VkOworCXJldHVybiBnZXRfb2lkX3dpdGhfY29udGV4dChyLCBuYW1lLCBHRVRfT0lEX0JMT0IsCisJCQkJICAgIG9pZCwgJnVudXNlZCk7Cit9CisKKy8qIE11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiBvYmplY3RfbmFtZTpmaWxlbmFtZSBkb2Vzbid0IGV4aXN0LiAqLworc3RhdGljIHZvaWQgZGlhZ25vc2VfaW52YWxpZF9vaWRfcGF0aChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdHJlZV9vaWQsCisJCQkJICAgICAgY29uc3QgY2hhciAqb2JqZWN0X25hbWUsCisJCQkJICAgICAgaW50IG9iamVjdF9uYW1lX2xlbikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwl1bnNpZ25lZCBzaG9ydCBtb2RlOworCisJaWYgKCFwcmVmaXgpCisJCXByZWZpeCA9ICIiOworCisJaWYgKGZpbGVfZXhpc3RzKGZpbGVuYW1lKSkKKwkJZGllKF8oInBhdGggJyVzJyBleGlzdHMgb24gZGlzaywgYnV0IG5vdCBpbiAnJS4qcyciKSwKKwkJICAgIGZpbGVuYW1lLCBvYmplY3RfbmFtZV9sZW4sIG9iamVjdF9uYW1lKTsKKwlpZiAoaXNfbWlzc2luZ19maWxlX2Vycm9yKGVycm5vKSkgeworCQljaGFyICpmdWxsbmFtZSA9IHhzdHJmbXQoIiVzJXMiLCBwcmVmaXgsIGZpbGVuYW1lKTsKKworCQlpZiAoIWdldF90cmVlX2VudHJ5KHIsIHRyZWVfb2lkLCBmdWxsbmFtZSwgJm9pZCwgJm1vZGUpKSB7CisJCQlkaWUoXygicGF0aCAnJXMnIGV4aXN0cywgYnV0IG5vdCAnJXMnXG4iCisJCQkgICAgImhpbnQ6IERpZCB5b3UgbWVhbiAnJS4qczolcycgYWthICclLipzOi4vJXMnPyIpLAorCQkJICAgIGZ1bGxuYW1lLAorCQkJICAgIGZpbGVuYW1lLAorCQkJICAgIG9iamVjdF9uYW1lX2xlbiwgb2JqZWN0X25hbWUsCisJCQkgICAgZnVsbG5hbWUsCisJCQkgICAgb2JqZWN0X25hbWVfbGVuLCBvYmplY3RfbmFtZSwKKwkJCSAgICBmaWxlbmFtZSk7CisJCX0KKwkJZGllKF8oInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCBpbiAnJS4qcyciKSwKKwkJICAgIGZpbGVuYW1lLCBvYmplY3RfbmFtZV9sZW4sIG9iamVjdF9uYW1lKTsKKwl9Cit9CisKKy8qIE11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiA6c3RhZ2U6ZmlsZW5hbWUgZG9lc24ndCBleGlzdC4gKi8KK3N0YXRpYyB2b2lkIGRpYWdub3NlX2ludmFsaWRfaW5kZXhfcGF0aChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJaW50IHN0YWdlLAorCQkJCQljb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCWNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlID0gci0+aW5kZXg7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwlpbnQgcG9zOworCXVuc2lnbmVkIG5hbWVsZW4gPSBzdHJsZW4oZmlsZW5hbWUpOworCXN0cnVjdCBzdHJidWYgZnVsbG5hbWUgPSBTVFJCVUZfSU5JVDsKKworCWlmICghcHJlZml4KQorCQlwcmVmaXggPSAiIjsKKworCS8qIFdyb25nIHN0YWdlIG51bWJlcj8gKi8KKwlwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIGZpbGVuYW1lLCBuYW1lbGVuKTsKKwlpZiAocG9zIDwgMCkKKwkJcG9zID0gLXBvcyAtIDE7CisJaWYgKHBvcyA8IGlzdGF0ZS0+Y2FjaGVfbnIpIHsKKwkJY2UgPSBpc3RhdGUtPmNhY2hlW3Bvc107CisJCWlmIChjZV9uYW1lbGVuKGNlKSA9PSBuYW1lbGVuICYmCisJCSAgICAhbWVtY21wKGNlLT5uYW1lLCBmaWxlbmFtZSwgbmFtZWxlbikpCisJCQlkaWUoXygicGF0aCAnJXMnIGlzIGluIHRoZSBpbmRleCwgYnV0IG5vdCBhdCBzdGFnZSAlZFxuIgorCQkJICAgICJoaW50OiBEaWQgeW91IG1lYW4gJzolZDolcyc/IiksCisJCQkgICAgZmlsZW5hbWUsIHN0YWdlLAorCQkJICAgIGNlX3N0YWdlKGNlKSwgZmlsZW5hbWUpOworCX0KKworCS8qIENvbmZ1c2lvbiBiZXR3ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBmaWxlbmFtZXM/ICovCisJc3RyYnVmX2FkZHN0cigmZnVsbG5hbWUsIHByZWZpeCk7CisJc3RyYnVmX2FkZHN0cigmZnVsbG5hbWUsIGZpbGVuYW1lKTsKKwlwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIGZ1bGxuYW1lLmJ1ZiwgZnVsbG5hbWUubGVuKTsKKwlpZiAocG9zIDwgMCkKKwkJcG9zID0gLXBvcyAtIDE7CisJaWYgKHBvcyA8IGlzdGF0ZS0+Y2FjaGVfbnIpIHsKKwkJY2UgPSBpc3RhdGUtPmNhY2hlW3Bvc107CisJCWlmIChjZV9uYW1lbGVuKGNlKSA9PSBmdWxsbmFtZS5sZW4gJiYKKwkJICAgICFtZW1jbXAoY2UtPm5hbWUsIGZ1bGxuYW1lLmJ1ZiwgZnVsbG5hbWUubGVuKSkKKwkJCWRpZShfKCJwYXRoICclcycgaXMgaW4gdGhlIGluZGV4LCBidXQgbm90ICclcydcbiIKKwkJCSAgICAiaGludDogRGlkIHlvdSBtZWFuICc6JWQ6JXMnIGFrYSAnOiVkOi4vJXMnPyIpLAorCQkJICAgIGZ1bGxuYW1lLmJ1ZiwgZmlsZW5hbWUsCisJCQkgICAgY2Vfc3RhZ2UoY2UpLCBmdWxsbmFtZS5idWYsCisJCQkgICAgY2Vfc3RhZ2UoY2UpLCBmaWxlbmFtZSk7CisJfQorCisJaWYgKHJlcG9fZmlsZV9leGlzdHMociwgZmlsZW5hbWUpKQorCQlkaWUoXygicGF0aCAnJXMnIGV4aXN0cyBvbiBkaXNrLCBidXQgbm90IGluIHRoZSBpbmRleCIpLCBmaWxlbmFtZSk7CisJaWYgKGlzX21pc3NpbmdfZmlsZV9lcnJvcihlcnJubykpCisJCWRpZShfKCJwYXRoICclcycgZG9lcyBub3QgZXhpc3QgKG5laXRoZXIgb24gZGlzayBub3IgaW4gdGhlIGluZGV4KSIpLAorCQkgICAgZmlsZW5hbWUpOworCisJc3RyYnVmX3JlbGVhc2UoJmZ1bGxuYW1lKTsKK30KKworCitzdGF0aWMgY2hhciAqcmVzb2x2ZV9yZWxhdGl2ZV9wYXRoKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpyZWwpCit7CisJaWYgKCFzdGFydHNfd2l0aChyZWwsICIuLyIpICYmICFzdGFydHNfd2l0aChyZWwsICIuLi8iKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAociAhPSB0aGVfcmVwb3NpdG9yeSB8fCAhaXNfaW5zaWRlX3dvcmtfdHJlZSgpKQorCQlkaWUoXygicmVsYXRpdmUgcGF0aCBzeW50YXggY2FuJ3QgYmUgdXNlZCBvdXRzaWRlIHdvcmtpbmcgdHJlZSIpKTsKKworCS8qIGRpZSgpIGluc2lkZSBwcmVmaXhfcGF0aCgpIGlmIHJlc29sdmVkIHBhdGggaXMgb3V0c2lkZSB3b3JrdHJlZSAqLworCXJldHVybiBwcmVmaXhfcGF0aChzdGFydHVwX2luZm8tPnByZWZpeCwKKwkJCSAgIHN0YXJ0dXBfaW5mby0+cHJlZml4ID8gc3RybGVuKHN0YXJ0dXBfaW5mby0+cHJlZml4KSA6IDAsCisJCQkgICByZWwpOworfQorCitzdGF0aWMgZW51bSBnZXRfb2lkX3Jlc3VsdCBnZXRfb2lkX3dpdGhfY29udGV4dF8xKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCSAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgIHVuc2lnbmVkIGZsYWdzLAorCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSAgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgc3RydWN0IG9iamVjdF9jb250ZXh0ICpvYykKK3sKKwlpbnQgcmV0LCBicmFja2V0X2RlcHRoOworCWludCBuYW1lbGVuID0gc3RybGVuKG5hbWUpOworCWNvbnN0IGNoYXIgKmNwOworCWludCBvbmx5X3RvX2RpZSA9IGZsYWdzICYgR0VUX09JRF9PTkxZX1RPX0RJRTsKKworCWlmIChvbmx5X3RvX2RpZSkKKwkJZmxhZ3MgfD0gR0VUX09JRF9RVUlFVExZOworCisJbWVtc2V0KG9jLCAwLCBzaXplb2YoKm9jKSk7CisJb2MtPm1vZGUgPSBTX0lGSU5WQUxJRDsKKwlzdHJidWZfaW5pdCgmb2MtPnN5bWxpbmtfcGF0aCwgMCk7CisJcmV0ID0gZ2V0X29pZF8xKHJlcG8sIG5hbWUsIG5hbWVsZW4sIG9pZCwgZmxhZ3MpOworCWlmICghcmV0KQorCQlyZXR1cm4gcmV0OworCS8qCisJICogc2hhMTpwYXRoIC0tPiBvYmplY3QgbmFtZSBvZiBwYXRoIGluIGVudCBzaGExCisJICogOnBhdGggLT4gb2JqZWN0IG5hbWUgb2YgYWJzb2x1dGUgcGF0aCBpbiBpbmRleAorCSAqIDouL3BhdGggLT4gb2JqZWN0IG5hbWUgb2YgcGF0aCByZWxhdGl2ZSB0byBjd2QgaW4gaW5kZXgKKwkgKiA6WzAtM106cGF0aCAtPiBvYmplY3QgbmFtZSBvZiBwYXRoIGluIGluZGV4IGF0IHN0YWdlCisJICogOi9mb28gLT4gcmVjZW50IGNvbW1pdCBtYXRjaGluZyBmb28KKwkgKi8KKwlpZiAobmFtZVswXSA9PSAnOicpIHsKKwkJaW50IHN0YWdlID0gMDsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwkJY2hhciAqbmV3X3BhdGggPSBOVUxMOworCQlpbnQgcG9zOworCQlpZiAoIW9ubHlfdG9fZGllICYmIG5hbWVsZW4gPiAyICYmIG5hbWVbMV0gPT0gJy8nKSB7CisJCQlzdHJ1Y3QgaGFuZGxlX29uZV9yZWZfY2IgY2I7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMOworCisJCQljYi5yZXBvID0gcmVwbzsKKwkJCWNiLmxpc3QgPSAmbGlzdDsKKwkJCXJlZnNfZm9yX2VhY2hfcmVmKGdldF9tYWluX3JlZl9zdG9yZShyZXBvKSwgaGFuZGxlX29uZV9yZWYsICZjYik7CisJCQlyZWZzX2hlYWRfcmVmKGdldF9tYWluX3JlZl9zdG9yZShyZXBvKSwgaGFuZGxlX29uZV9yZWYsICZjYik7CisJCQljb21taXRfbGlzdF9zb3J0X2J5X2RhdGUoJmxpc3QpOworCQkJcmV0dXJuIGdldF9vaWRfb25lbGluZShyZXBvLCBuYW1lICsgMiwgb2lkLCBsaXN0KTsKKwkJfQorCQlpZiAobmFtZWxlbiA8IDMgfHwKKwkJICAgIG5hbWVbMl0gIT0gJzonIHx8CisJCSAgICBuYW1lWzFdIDwgJzAnIHx8ICczJyA8IG5hbWVbMV0pCisJCQljcCA9IG5hbWUgKyAxOworCQllbHNlIHsKKwkJCXN0YWdlID0gbmFtZVsxXSAtICcwJzsKKwkJCWNwID0gbmFtZSArIDM7CisJCX0KKwkJbmV3X3BhdGggPSByZXNvbHZlX3JlbGF0aXZlX3BhdGgocmVwbywgY3ApOworCQlpZiAoIW5ld19wYXRoKSB7CisJCQluYW1lbGVuID0gbmFtZWxlbiAtIChjcCAtIG5hbWUpOworCQl9IGVsc2UgeworCQkJY3AgPSBuZXdfcGF0aDsKKwkJCW5hbWVsZW4gPSBzdHJsZW4oY3ApOworCQl9CisKKwkJaWYgKGZsYWdzICYgR0VUX09JRF9SRUNPUkRfUEFUSCkKKwkJCW9jLT5wYXRoID0geHN0cmR1cChjcCk7CisKKwkJaWYgKCFyZXBvLT5pbmRleCB8fCAhcmVwby0+aW5kZXgtPmNhY2hlKQorCQkJcmVwb19yZWFkX2luZGV4KHJlcG8pOworCQlwb3MgPSBpbmRleF9uYW1lX3BvcyhyZXBvLT5pbmRleCwgY3AsIG5hbWVsZW4pOworCQlpZiAocG9zIDwgMCkKKwkJCXBvcyA9IC1wb3MgLSAxOworCQl3aGlsZSAocG9zIDwgcmVwby0+aW5kZXgtPmNhY2hlX25yKSB7CisJCQljZSA9IHJlcG8tPmluZGV4LT5jYWNoZVtwb3NdOworCQkJaWYgKGNlX25hbWVsZW4oY2UpICE9IG5hbWVsZW4gfHwKKwkJCSAgICBtZW1jbXAoY2UtPm5hbWUsIGNwLCBuYW1lbGVuKSkKKwkJCQlicmVhazsKKwkJCWlmIChjZV9zdGFnZShjZSkgPT0gc3RhZ2UpIHsKKwkJCQlvaWRjcHkob2lkLCAmY2UtPm9pZCk7CisJCQkJb2MtPm1vZGUgPSBjZS0+Y2VfbW9kZTsKKwkJCQlmcmVlKG5ld19wYXRoKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXBvcysrOworCQl9CisJCWlmIChvbmx5X3RvX2RpZSAmJiBuYW1lWzFdICYmIG5hbWVbMV0gIT0gJy8nKQorCQkJZGlhZ25vc2VfaW52YWxpZF9pbmRleF9wYXRoKHJlcG8sIHN0YWdlLCBwcmVmaXgsIGNwKTsKKwkJZnJlZShuZXdfcGF0aCk7CisJCXJldHVybiAtMTsKKwl9CisJZm9yIChjcCA9IG5hbWUsIGJyYWNrZXRfZGVwdGggPSAwOyAqY3A7IGNwKyspIHsKKwkJaWYgKCpjcCA9PSAneycpCisJCQlicmFja2V0X2RlcHRoKys7CisJCWVsc2UgaWYgKGJyYWNrZXRfZGVwdGggJiYgKmNwID09ICd9JykKKwkJCWJyYWNrZXRfZGVwdGgtLTsKKwkJZWxzZSBpZiAoIWJyYWNrZXRfZGVwdGggJiYgKmNwID09ICc6JykKKwkJCWJyZWFrOworCX0KKwlpZiAoKmNwID09ICc6JykgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIHRyZWVfb2lkOworCQlpbnQgbGVuID0gY3AgLSBuYW1lOworCQl1bnNpZ25lZCBzdWJfZmxhZ3MgPSBmbGFnczsKKworCQlzdWJfZmxhZ3MgJj0gfkdFVF9PSURfRElTQU1CSUdVQVRPUlM7CisJCXN1Yl9mbGFncyB8PSBHRVRfT0lEX1RSRUVJU0g7CisKKwkJaWYgKCFnZXRfb2lkXzEocmVwbywgbmFtZSwgbGVuLCAmdHJlZV9vaWQsIHN1Yl9mbGFncykpIHsKKwkJCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gY3ArMTsKKwkJCWNoYXIgKm5ld19maWxlbmFtZSA9IE5VTEw7CisKKwkJCW5ld19maWxlbmFtZSA9IHJlc29sdmVfcmVsYXRpdmVfcGF0aChyZXBvLCBmaWxlbmFtZSk7CisJCQlpZiAobmV3X2ZpbGVuYW1lKQorCQkJCWZpbGVuYW1lID0gbmV3X2ZpbGVuYW1lOworCQkJaWYgKGZsYWdzICYgR0VUX09JRF9GT0xMT1dfU1lNTElOS1MpIHsKKwkJCQlyZXQgPSBnZXRfdHJlZV9lbnRyeV9mb2xsb3dfc3ltbGlua3MocmVwbywgJnRyZWVfb2lkLAorCQkJCQlmaWxlbmFtZSwgb2lkLCAmb2MtPnN5bWxpbmtfcGF0aCwKKwkJCQkJJm9jLT5tb2RlKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0ID0gZ2V0X3RyZWVfZW50cnkocmVwbywgJnRyZWVfb2lkLCBmaWxlbmFtZSwgb2lkLAorCQkJCQkJICAgICAmb2MtPm1vZGUpOworCQkJCWlmIChyZXQgJiYgb25seV90b19kaWUpIHsKKwkJCQkJZGlhZ25vc2VfaW52YWxpZF9vaWRfcGF0aChyZXBvLCBwcmVmaXgsCisJCQkJCQkJCSAgIGZpbGVuYW1lLAorCQkJCQkJCQkgICAmdHJlZV9vaWQsCisJCQkJCQkJCSAgIG5hbWUsIGxlbik7CisJCQkJfQorCQkJfQorCQkJaWYgKGZsYWdzICYgR0VUX09JRF9SRUNPUkRfUEFUSCkKKwkJCQlvYy0+cGF0aCA9IHhzdHJkdXAoZmlsZW5hbWUpOworCisJCQlmcmVlKG5ld19maWxlbmFtZSk7CisJCQlyZXR1cm4gcmV0OworCQl9IGVsc2UgeworCQkJaWYgKG9ubHlfdG9fZGllKQorCQkJCWRpZShfKCJpbnZhbGlkIG9iamVjdCBuYW1lICclLipzJy4iKSwgbGVuLCBuYW1lKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4geW91IGtub3cgIm5hbWUiIGdpdmVuIGJ5IHRoZSBlbmQgdXNlciBtdXN0CisgKiBuYW1lIGFuIG9iamVjdCBidXQgaXQgZG9lc24ndDsgdGhlIGZ1bmN0aW9uIF9tYXlfIGRpZSB3aXRoIGEgYmV0dGVyCisgKiBkaWFnbm9zdGljIG1lc3NhZ2UgdGhhbiAibm8gc3VjaCBvYmplY3QgJ25hbWUnIiwgZS5nLiAiUGF0aCAnZG9jJyBkb2VzIG5vdAorICogZXhpc3QgaW4gJ0hFQUQnIiB3aGVuIGdpdmVuICJIRUFEOmRvYyIsIG9yIGl0IG1heSByZXR1cm4gaW4gd2hpY2ggY2FzZQorICogeW91IGhhdmUgYSBjaGFuY2UgdG8gZGlhZ25vc2UgdGhlIGVycm9yIGZ1cnRoZXIuCisgKi8KK3ZvaWQgbWF5YmVfZGllX29uX21pc3NwZWx0X29iamVjdF9uYW1lKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG9iamVjdF9jb250ZXh0IG9jOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWdldF9vaWRfd2l0aF9jb250ZXh0XzEociwgbmFtZSwgR0VUX09JRF9PTkxZX1RPX0RJRSwKKwkJCSAgICAgICBwcmVmaXgsICZvaWQsICZvYyk7Cit9CisKK2VudW0gZ2V0X29pZF9yZXN1bHQgZ2V0X29pZF93aXRoX2NvbnRleHQoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkJCSBjb25zdCBjaGFyICpzdHIsCisJCQkJCSB1bnNpZ25lZCBmbGFncywKKwkJCQkJIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkJIHN0cnVjdCBvYmplY3RfY29udGV4dCAqb2MpCit7CisJaWYgKGZsYWdzICYgR0VUX09JRF9GT0xMT1dfU1lNTElOS1MgJiYgZmxhZ3MgJiBHRVRfT0lEX09OTFlfVE9fRElFKQorCQlCVUcoImluY29tcGF0aWJsZSBmbGFncyBmb3IgZ2V0X3NoYTFfd2l0aF9jb250ZXh0Iik7CisJcmV0dXJuIGdldF9vaWRfd2l0aF9jb250ZXh0XzEocmVwbywgc3RyLCBmbGFncywgTlVMTCwgb2lkLCBvYyk7Cit9CmRpZmYgLS1naXQgYS9zaGExY29sbGlzaW9uZGV0ZWN0aW9uIGIvc2hhMWNvbGxpc2lvbmRldGVjdGlvbgpuZXcgZmlsZSBtb2RlIDE2MDAwMAppbmRleCAwMDAwMDAwLi44NTU4MjdjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhMWNvbGxpc2lvbmRldGVjdGlvbgpAQCAtMCwwICsxIEBACitTdWJwcm9qZWN0IGNvbW1pdCA4NTU4MjdjNTgzYmMzMDY0NWJhNDI3ODg1Y2FhNDBjNWI4MTc2NGQyCmRpZmYgLS1naXQgYS9zaGExZGMvLmdpdGF0dHJpYnV0ZXMgYi9zaGExZGMvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1M2Y0MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYTFkYy8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisqIHdoaXRlc3BhY2U9LWluZGVudC13aXRoLW5vbi10YWIKZGlmZiAtLWdpdCBhL3NoYTFkYy9MSUNFTlNFLnR4dCBiL3NoYTFkYy9MSUNFTlNFLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTNlNmExCi0tLSAvZGV2L251bGwKKysrIGIvc2hhMWRjL0xJQ0VOU0UudHh0CkBAIC0wLDAgKzEsMzAgQEAKK01JVCBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMjAxNzoKKyAgICBNYXJjIFN0ZXZlbnMKKyAgICBDcnlwdG9sb2d5IEdyb3VwCisgICAgQ2VudHJ1bSBXaXNrdW5kZSAmIEluZm9ybWF0aWNhCisgICAgUC5PLiBCb3ggOTQwNzksIDEwOTAgR0IgQW1zdGVyZGFtLCBOZXRoZXJsYW5kcworICAgIG1hcmNAbWFyYy1zdGV2ZW5zLm5sCisKKyAgICBEYW4gU2h1bW93CisgICAgTWljcm9zb2Z0IFJlc2VhcmNoCisgICAgZGFuc2h1QG1pY3Jvc29mdC5jb20KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorU09GVFdBUkUuCmRpZmYgLS1naXQgYS9zaGExZGMvc2hhMS5jIGIvc2hhMWRjL3NoYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWRlMmNiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhMWRjL3NoYTEuYwpAQCAtMCwwICsxLDE5MTEgQEAKKy8qKioKKyogQ29weXJpZ2h0IDIwMTcgTWFyYyBTdGV2ZW5zIDxtYXJjQG1hcmMtc3RldmVucy5ubD4sIERhbiBTaHVtb3cgKGRhbnNodUBtaWNyb3NvZnQuY29tKQorKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIFNvZnR3YXJlIExpY2Vuc2UuCisqIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFLnR4dCBvciBjb3B5IGF0CisqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCisqKiovCisKKyNpZm5kZWYgU0hBMURDX05PX1NUQU5EQVJEX0lOQ0xVREVTCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bWVtb3J5Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZmRlZiBfX3VuaXhfXworI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAvKiBtYWtlIHN1cmUgbWFjcm9zIGxpa2UgX0JJR19FTkRJQU4gdmlzaWJsZSAqLworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFNIQTFEQ19DVVNUT01fSU5DTFVERV9TSEExX0MKKyNpbmNsdWRlIFNIQTFEQ19DVVNUT01fSU5DTFVERV9TSEExX0MKKyNlbmRpZgorCisjaWZuZGVmIFNIQTFEQ19JTklUX1NBRkVfSEFTSF9ERUZBVUxUCisjZGVmaW5lIFNIQTFEQ19JTklUX1NBRkVfSEFTSF9ERUZBVUxUIDEKKyNlbmRpZgorCisjaW5jbHVkZSAic2hhMS5oIgorI2luY2x1ZGUgInViY19jaGVjay5oIgorCisjaWYgKGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVkKF9fYW1kNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NCkgfHwgXAorICAgICBkZWZpbmVkKGkzODYpIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9faTQ4Nl9fKSAgfHwgXAorICAgICBkZWZpbmVkKF9faTU4Nl9fKSB8fCBkZWZpbmVkKF9faTY4Nl9fKSB8fCBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX19YODZfXykgfHwgXAorICAgICBkZWZpbmVkKF9YODZfKSB8fCBkZWZpbmVkKF9fVEhXX0lOVEVMX18pIHx8IGRlZmluZWQoX19JODZfXykgfHwgZGVmaW5lZChfX0lOVEVMX18pIHx8IFwKKyAgICAgZGVmaW5lZChfXzM4NikgfHwgZGVmaW5lZChfTV9YNjQpIHx8IGRlZmluZWQoX01fQU1ENjQpKQorI2RlZmluZSBTSEExRENfT05fSU5URUxfTElLRV9QUk9DRVNTT1IKKyNlbmRpZgorCisvKgorICAgQmVjYXVzZSBMaXR0bGUtRW5kaWFuIGFyY2hpdGVjdHVyZXMgYXJlIG1vc3QgY29tbW9uLAorICAgd2Ugb25seSBzZXQgU0hBMURDX0JJR0VORElBTiBpZiBvbmUgb2YgdGhlc2UgY29uZGl0aW9ucyBpcyBtZXQuCisgICBOb3RlIHRoYXQgYWxsIE1TRlQgcGxhdGZvcm1zIGFyZSBsaXR0bGUgZW5kaWFuLAorICAgc28gbm9uZSBvZiB0aGVzZSB3aWxsIGJlIGRlZmluZWQgdW5kZXIgdGhlIE1TQyBjb21waWxlci4KKyAgIElmIHlvdSBhcmUgY29tcGlsaW5nIG9uIGEgYmlnIGVuZGlhbiBwbGF0Zm9ybSBhbmQgeW91ciBjb21waWxlciBkb2VzIG5vdCBkZWZpbmUgb25lIG9mIHRoZXNlLAorICAgeW91IHdpbGwgaGF2ZSB0byBhZGQgd2hhdGV2ZXIgbWFjcm9zIHlvdXIgdG9vbCBjaGFpbiBkZWZpbmVzIHRvIGluZGljYXRlIEJpZy1FbmRpYW5uZXNzLgorICovCisKKyNpZiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBkZWZpbmVkKF9fT1JERVJfQklHX0VORElBTl9fKQorLyoKKyAqIFNob3VsZCBkZXRlY3QgQmlnIEVuZGlhbiB1bmRlciBHQ0Mgc2luY2UgYXQgbGVhc3QgNC42LjAgKGdjYyBzdm4KKyAqIHJldiAjMTY1ODgxKS4gU2VlCisgKiBodHRwczovL2djYy5nbnUub3JnL29ubGluZWRvY3MvY3BwL0NvbW1vbi1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sCisgKgorICogVGhpcyBhbHNvIHdvcmtzIHVuZGVyIGNsYW5nIHNpbmNlIDMuMiwgaXQgY29waWVkIHRoZSBHQ0MtaXNtLiBTZWUKKyAqIGNsYW5nLmdpdCdzIDNiMTk4YTk3ZDIgKCJQcmVwcm9jZXNzb3I6IGFkZCBfX0JZVEVfT1JERVJfXworICogcHJlZGVmaW5lZCBtYWNybyIsIDIwMTItMDctMjcpCisgKi8KKyNpZiBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXworI2RlZmluZSBTSEExRENfQklHRU5ESUFOCisjZW5kaWYKKworLyogTm90IHVuZGVyIEdDQy1hbGlrZSAqLworI2VsaWYgZGVmaW5lZChfX0JZVEVfT1JERVIpICYmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorLyoKKyAqIFNob3VsZCBkZXRlY3QgQmlnIEVuZGlhbiB1bmRlciBnbGliYy5naXQgc2luY2UgMTQyNDVlYjcwZSAoImVudGVyZWQKKyAqIGludG8gUkNTIiwgMTk5Mi0xMS0yNSkuIERlZmluZWQgaW4gPGVuZGlhbi5oPiB3aGljaCB3aWxsIGhhdmUgYmVlbgorICogYnJvdWdodCBpbiBieSBzdGFuZGFyZCBoZWFkZXJzLiBTZWUgZ2xpYmMuZ2l0IGFuZAorICogaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9wcmVkZWYvd2lraS9FbmRpYW5uZXNzLworICovCisjaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorI2RlZmluZSBTSEExRENfQklHRU5ESUFOCisjZW5kaWYKKworLyogTm90IHVuZGVyIEdDQy1hbGlrZSBvciBnbGliYyAqLworI2VsaWYgZGVmaW5lZChfQllURV9PUkRFUikgJiYgZGVmaW5lZChfQklHX0VORElBTikgJiYgZGVmaW5lZChfTElUVExFX0VORElBTikKKy8qCisgKiAqQlNEIGFuZCBuZXdsaWIgKGVtYmVkZGVkIGxpbnV4LCBjeWd3aW4sIGV0YykuCisgKiB0aGUgZGVmaW5lZChfQklHX0VORElBTikgJiYgZGVmaW5lZChfTElUVExFX0VORElBTikgcGFydCBwcmV2ZW50cworICogdGhpcyBjb25kaXRpb24gZnJvbSBtYXRjaGluZyB3aXRoIFNvbGFyaXMvc3BhcmMuCisgKiAoU29sYXJpcyBkZWZpbmVzIG9ubHkgb25lIGVuZGlhbiBtYWNybykKKyAqLworI2lmIF9CWVRFX09SREVSID09IF9CSUdfRU5ESUFOCisjZGVmaW5lIFNIQTFEQ19CSUdFTkRJQU4KKyNlbmRpZgorCisvKiBOb3QgdW5kZXIgR0NDLWFsaWtlIG9yIGdsaWJjIG9yICpCU0Qgb3IgbmV3bGliICovCisjZWxpZiAoZGVmaW5lZChfX0FSTUVCX18pIHx8IGRlZmluZWQoX19USFVNQkVCX18pIHx8IGRlZmluZWQoX19BQVJDSDY0RUJfXykgfHwgXAorICAgICAgIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBcCisgICAgICAgZGVmaW5lZChfX3NwYXJjKSkKKy8qCisgKiBTaG91bGQgZGVmaW5lIEJpZyBFbmRpYW4gZm9yIGEgd2hpdGVsaXN0IG9mIGtub3duIHByb2Nlc3NvcnMuIFNlZQorICogaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9wcmVkZWYvd2lraS9FbmRpYW5uZXNzLyBhbmQKKyAqIGh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9zZXJ2ZXItc3RvcmFnZS9zb2xhcmlzL3BvcnRpbmd0b3NvbGFyaXMtMTM4NTE0Lmh0bWwKKyAqLworI2RlZmluZSBTSEExRENfQklHRU5ESUFOCisKKy8qIE5vdCB1bmRlciBHQ0MtYWxpa2Ugb3IgZ2xpYmMgb3IgKkJTRCBvciBuZXdsaWIgb3IgPHByb2Nlc3NvciB3aGl0ZWxpc3Q+ICovCisjZWxpZiAoZGVmaW5lZChfQUlYKSB8fCBkZWZpbmVkKF9faHB1eCkpCisKKy8qCisgKiBEZWZpbmVzIEJpZyBFbmRpYW4gb24gYSB3aGl0ZWxpc3Qgb2YgT1NzIHRoYXQgYXJlIGtub3duIHRvIGJlIEJpZworICogRW5kaWFuLW9ubHkuIFNlZQorICogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzkzMDU2ODIzLTI3NDAtZDA3Mi0xZWJkLTQ2YjQ0MGIzM2Q3ZUBmZWx0LmRlbW9uLm5sLworICovCisjZGVmaW5lIFNIQTFEQ19CSUdFTkRJQU4KKworLyogTm90IHVuZGVyIEdDQy1hbGlrZSBvciBnbGliYyBvciAqQlNEIG9yIG5ld2xpYiBvciA8cHJvY2Vzc29yIHdoaXRlbGlzdD4gb3IgPG9zIHdoaXRlbGlzdD4gKi8KKyNlbGlmIGRlZmluZWQoU0hBMURDX09OX0lOVEVMX0xJS0VfUFJPQ0VTU09SKQorLyoKKyAqIEFzIGEgbGFzdCByZXNvcnQgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2Ugd2UncmUgbm90IDEwMCUgc3VyZQorICogYWJvdXQgYmVsb3csIHdlIGJsYWNrbGlzdCBzcGVjaWZpYyBwcm9jZXNzb3JzIGhlcmUuIFdlIGNvdWxkIGFkZAorICogbW9yZSwgc2VlIGUuZy4gaHR0cHM6Ly93aWtpLmRlYmlhbi5vcmcvQXJjaGl0ZWN0dXJlU3BlY2lmaWNzTWVtbworICovCisjZWxzZSAvKiBOb3QgdW5kZXIgR0NDLWFsaWtlIG9yIGdsaWJjIG9yICpCU0Qgb3IgbmV3bGliIG9yIDxwcm9jZXNzb3Igd2hpdGVsaXN0PiBvciA8b3Mgd2hpdGVsaXN0PiBvciA8cHJvY2Vzc29yIGJsYWNrbGlzdD4gKi8KKworLyogV2UgZG8gbm90aGluZyBtb3JlIGhlcmUgZm9yIG5vdyAqLworLyojZXJyb3IgIlVuY29tbWVudCB0aGlzIHRvIHNlZSBpZiB5b3UgZmFsbCB0aHJvdWdoIGFsbCB0aGUgZGV0ZWN0aW9uIiovCisKKyNlbmRpZiAvKiBCaWcgRW5kaWFuIGRldGVjdGlvbiAqLworCisjaWYgKGRlZmluZWQoU0hBMURDX0ZPUkNFX0xJVFRMRUVORElBTikgJiYgZGVmaW5lZChTSEExRENfQklHRU5ESUFOKSkKKyN1bmRlZiBTSEExRENfQklHRU5ESUFOCisjZW5kaWYKKyNpZiAoZGVmaW5lZChTSEExRENfRk9SQ0VfQklHRU5ESUFOKSAmJiAhZGVmaW5lZChTSEExRENfQklHRU5ESUFOKSkKKyNkZWZpbmUgU0hBMURDX0JJR0VORElBTgorI2VuZGlmCisvKkVORElBTk5FU1MgU0VMRUNUSU9OKi8KKworI2lmbmRlZiBTSEExRENfRk9SQ0VfQUxJR05FRF9BQ0NFU1MKKyNpZiBkZWZpbmVkKFNIQTFEQ19GT1JDRV9VTkFMSUdORURfQUNDRVNTKSB8fCBkZWZpbmVkKFNIQTFEQ19PTl9JTlRFTF9MSUtFX1BST0NFU1NPUikKKyNkZWZpbmUgU0hBMURDX0FMTE9XX1VOQUxJR05FRF9BQ0NFU1MKKyNlbmRpZiAvKlVOQUxJR05FRCBBQ0NFU1MgREVURUNUSU9OKi8KKyNlbmRpZiAvKkZPUkNFIEFMSUdORUQgQUNDRVNTKi8KKworI2RlZmluZSByb3RhdGVfcmlnaHQoeCxuKSAoKCh4KT4+KG4pKXwoKHgpPDwoMzItKG4pKSkpCisjZGVmaW5lIHJvdGF0ZV9sZWZ0KHgsbikgICgoKHgpPDwobikpfCgoeCk+PigzMi0obikpKSkKKworI2RlZmluZSBzaGExX2Jzd2FwMzIoeCkgXAorCXt4ID0gKCh4IDw8IDgpICYgMHhGRjAwRkYwMCkgfCAoKHggPj4gOCkgJiAweEZGMDBGRik7IHggPSAoeCA8PCAxNikgfCAoeCA+PiAxNik7fQorCisjZGVmaW5lIHNoYTFfbWl4KFcsIHQpICAocm90YXRlX2xlZnQoV1t0IC0gM10gXiBXW3QgLSA4XSBeIFdbdCAtIDE0XSBeIFdbdCAtIDE2XSwgMSkpCisKKyNpZmRlZiBTSEExRENfQklHRU5ESUFOCisJI2RlZmluZSBzaGExX2xvYWQobSwgdCwgdGVtcCkgIHsgdGVtcCA9IG1bdF07IH0KKyNlbHNlCisJI2RlZmluZSBzaGExX2xvYWQobSwgdCwgdGVtcCkgIHsgdGVtcCA9IG1bdF07IHNoYTFfYnN3YXAzMih0ZW1wKTsgfQorI2VuZGlmCisKKyNkZWZpbmUgc2hhMV9zdG9yZShXLCB0LCB4KQkqKHZvbGF0aWxlIHVpbnQzMl90ICopJldbdF0gPSB4CisKKyNkZWZpbmUgc2hhMV9mMShiLGMsZCkgKChkKV4oKGIpJigoYyleKGQpKSkpCisjZGVmaW5lIHNoYTFfZjIoYixjLGQpICgoYileKGMpXihkKSkKKyNkZWZpbmUgc2hhMV9mMyhiLGMsZCkgKCgoYikmKGMpKSsoKGQpJigoYileKGMpKSkpCisjZGVmaW5lIHNoYTFfZjQoYixjLGQpICgoYileKGMpXihkKSkKKworI2RlZmluZSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGEsIGIsIGMsIGQsIGUsIG0sIHQpIFwKKwl7IGUgKz0gcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YxKGIsYyxkKSArIDB4NUE4Mjc5OTkgKyBtW3RdOyBiID0gcm90YXRlX2xlZnQoYiwgMzApOyB9CisjZGVmaW5lIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgbSwgdCkgXAorCXsgZSArPSByb3RhdGVfbGVmdChhLCA1KSArIHNoYTFfZjIoYixjLGQpICsgMHg2RUQ5RUJBMSArIG1bdF07IGIgPSByb3RhdGVfbGVmdChiLCAzMCk7IH0KKyNkZWZpbmUgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBtLCB0KSBcCisJeyBlICs9IHJvdGF0ZV9sZWZ0KGEsIDUpICsgc2hhMV9mMyhiLGMsZCkgKyAweDhGMUJCQ0RDICsgbVt0XTsgYiA9IHJvdGF0ZV9sZWZ0KGIsIDMwKTsgfQorI2RlZmluZSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIG0sIHQpIFwKKwl7IGUgKz0gcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2Y0KGIsYyxkKSArIDB4Q0E2MkMxRDYgKyBtW3RdOyBiID0gcm90YXRlX2xlZnQoYiwgMzApOyB9CisKKyNkZWZpbmUgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtLCB0KSBcCisJeyBiID0gcm90YXRlX3JpZ2h0KGIsIDMwKTsgZSAtPSByb3RhdGVfbGVmdChhLCA1KSArIHNoYTFfZjEoYixjLGQpICsgMHg1QTgyNzk5OSArIG1bdF07IH0KKyNkZWZpbmUgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtLCB0KSBcCisJeyBiID0gcm90YXRlX3JpZ2h0KGIsIDMwKTsgZSAtPSByb3RhdGVfbGVmdChhLCA1KSArIHNoYTFfZjIoYixjLGQpICsgMHg2RUQ5RUJBMSArIG1bdF07IH0KKyNkZWZpbmUgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtLCB0KSBcCisJeyBiID0gcm90YXRlX3JpZ2h0KGIsIDMwKTsgZSAtPSByb3RhdGVfbGVmdChhLCA1KSArIHNoYTFfZjMoYixjLGQpICsgMHg4RjFCQkNEQyArIG1bdF07IH0KKyNkZWZpbmUgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtLCB0KSBcCisJeyBiID0gcm90YXRlX3JpZ2h0KGIsIDMwKTsgZSAtPSByb3RhdGVfbGVmdChhLCA1KSArIHNoYTFfZjQoYixjLGQpICsgMHhDQTYyQzFENiArIG1bdF07IH0KKworI2RlZmluZSBTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGEsIGIsIGMsIGQsIGUsIG0sIFcsIHQsIHRlbXApIFwKKwl7c2hhMV9sb2FkKG0sIHQsIHRlbXApOyBzaGExX3N0b3JlKFcsIHQsIHRlbXApOyBlICs9IHRlbXAgKyByb3RhdGVfbGVmdChhLCA1KSArIHNoYTFfZjEoYixjLGQpICsgMHg1QTgyNzk5OTsgYiA9IHJvdGF0ZV9sZWZ0KGIsIDMwKTt9CisKKyNkZWZpbmUgU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfRVhQQU5EKGEsIGIsIGMsIGQsIGUsIFcsIHQsIHRlbXApIFwKKwl7dGVtcCA9IHNoYTFfbWl4KFcsIHQpOyBzaGExX3N0b3JlKFcsIHQsIHRlbXApOyBlICs9IHRlbXAgKyByb3RhdGVfbGVmdChhLCA1KSArIHNoYTFfZjEoYixjLGQpICsgMHg1QTgyNzk5OTsgYiA9IHJvdGF0ZV9sZWZ0KGIsIDMwKTsgfQorCisjZGVmaW5lIFNIQTFDT01QUkVTU19GVUxMX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIHQsIHRlbXApIFwKKwl7dGVtcCA9IHNoYTFfbWl4KFcsIHQpOyBzaGExX3N0b3JlKFcsIHQsIHRlbXApOyBlICs9IHRlbXAgKyByb3RhdGVfbGVmdChhLCA1KSArIHNoYTFfZjIoYixjLGQpICsgMHg2RUQ5RUJBMTsgYiA9IHJvdGF0ZV9sZWZ0KGIsIDMwKTsgfQorCisjZGVmaW5lIFNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIHQsIHRlbXApIFwKKwl7dGVtcCA9IHNoYTFfbWl4KFcsIHQpOyBzaGExX3N0b3JlKFcsIHQsIHRlbXApOyBlICs9IHRlbXAgKyByb3RhdGVfbGVmdChhLCA1KSArIHNoYTFfZjMoYixjLGQpICsgMHg4RjFCQkNEQzsgYiA9IHJvdGF0ZV9sZWZ0KGIsIDMwKTsgfQorCisjZGVmaW5lIFNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIHQsIHRlbXApIFwKKwl7dGVtcCA9IHNoYTFfbWl4KFcsIHQpOyBzaGExX3N0b3JlKFcsIHQsIHRlbXApOyBlICs9IHRlbXAgKyByb3RhdGVfbGVmdChhLCA1KSArIHNoYTFfZjQoYixjLGQpICsgMHhDQTYyQzFENjsgYiA9IHJvdGF0ZV9sZWZ0KGIsIDMwKTsgfQorCisKKyNkZWZpbmUgU0hBMV9TVE9SRV9TVEFURShpKSBzdGF0ZXNbaV1bMF0gPSBhOyBzdGF0ZXNbaV1bMV0gPSBiOyBzdGF0ZXNbaV1bMl0gPSBjOyBzdGF0ZXNbaV1bM10gPSBkOyBzdGF0ZXNbaV1bNF0gPSBlOworCisjaWZkZWYgQlVJTEROT0NPTExERVRFQ1RTSEExQ09NUFJFU1NJT04KK3ZvaWQgc2hhMV9jb21wcmVzc2lvbih1aW50MzJfdCBpaHZbNV0sIGNvbnN0IHVpbnQzMl90IG1bMTZdKQoreworCXVpbnQzMl90IFdbODBdOworCXVpbnQzMl90IGEsYixjLGQsZTsKKwl1bnNpZ25lZCBpOworCisJbWVtY3B5KFcsIG0sIDE2ICogNCk7CisJZm9yIChpID0gMTY7IGkgPCA4MDsgKytpKQorCQlXW2ldID0gc2hhMV9taXgoVywgaSk7CisKKwlhID0gaWh2WzBdOyBiID0gaWh2WzFdOyBjID0gaWh2WzJdOyBkID0gaWh2WzNdOyBlID0gaWh2WzRdOworCisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCAwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDEpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCAzKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDQpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDcpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYywgZCwgZSwgYSwgYiwgVywgOCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA5KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDEwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDExKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDEyKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDEzKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDE0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDE1KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDE2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDE3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDE4KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDE5KTsKKworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMjApOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMjEpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMjIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMjMpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMjQpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMjUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMjYpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMjcpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMjgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMjkpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMzApOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMzEpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMzIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMzMpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMzQpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMzUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMzYpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMzcpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMzgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMzkpOworCisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA0MCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA0MSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA0Mik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA0Myk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA0NCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA0NSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA0Nik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA0Nyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA0OCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA0OSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA1MCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA1MSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA1Mik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA1Myk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA1NCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA1NSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA1Nik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA1Nyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA1OCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA1OSk7CisKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDYwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDYxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDYyKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDYzKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDY0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDY1KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDY2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDY3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDY4KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDY5KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDcwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDcxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDcyKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDczKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDc0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDc1KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDc2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDc3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDc4KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDc5KTsKKworCWlodlswXSArPSBhOyBpaHZbMV0gKz0gYjsgaWh2WzJdICs9IGM7IGlodlszXSArPSBkOyBpaHZbNF0gKz0gZTsKK30KKyNlbmRpZiAvKkJVSUxETk9DT0xMREVURUNUU0hBMUNPTVBSRVNTSU9OKi8KKworCitzdGF0aWMgdm9pZCBzaGExX2NvbXByZXNzaW9uX1codWludDMyX3QgaWh2WzVdLCBjb25zdCB1aW50MzJfdCBXWzgwXSkKK3sKKwl1aW50MzJfdCBhID0gaWh2WzBdLCBiID0gaWh2WzFdLCBjID0gaWh2WzJdLCBkID0gaWh2WzNdLCBlID0gaWh2WzRdOworCisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCAwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDEpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCAzKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDQpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDcpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYywgZCwgZSwgYSwgYiwgVywgOCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA5KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDEwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDExKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDEyKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDEzKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDE0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDE1KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDE2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDE3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDE4KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDE5KTsKKworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMjApOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMjEpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMjIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMjMpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMjQpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMjUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMjYpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMjcpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMjgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMjkpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMzApOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMzEpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMzIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMzMpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMzQpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMzUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMzYpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMzcpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMzgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMzkpOworCisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA0MCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA0MSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA0Mik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA0Myk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA0NCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA0NSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA0Nik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA0Nyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA0OCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA0OSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA1MCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA1MSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA1Mik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA1Myk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA1NCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA1NSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA1Nik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA1Nyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA1OCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA1OSk7CisKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDYwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDYxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDYyKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDYzKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDY0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDY1KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDY2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDY3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDY4KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDY5KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDcwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDcxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDcyKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDczKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDc0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDc1KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDc2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDc3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDc4KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDc5KTsKKworCWlodlswXSArPSBhOyBpaHZbMV0gKz0gYjsgaWh2WzJdICs9IGM7IGlodlszXSArPSBkOyBpaHZbNF0gKz0gZTsKK30KKworCisKK3ZvaWQgc2hhMV9jb21wcmVzc2lvbl9zdGF0ZXModWludDMyX3QgaWh2WzVdLCBjb25zdCB1aW50MzJfdCBtWzE2XSwgdWludDMyX3QgV1s4MF0sIHVpbnQzMl90IHN0YXRlc1s4MF1bNV0pCit7CisJdWludDMyX3QgYSA9IGlodlswXSwgYiA9IGlodlsxXSwgYyA9IGlodlsyXSwgZCA9IGlodlszXSwgZSA9IGlodls0XTsKKwl1aW50MzJfdCB0ZW1wOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMDAKKwlTSEExX1NUT1JFX1NUQVRFKDApCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGEsIGIsIGMsIGQsIGUsIG0sIFcsIDAsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMDEKKwlTSEExX1NUT1JFX1NUQVRFKDEpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGUsIGEsIGIsIGMsIGQsIG0sIFcsIDEsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMDIKKwlTSEExX1NUT1JFX1NUQVRFKDIpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGQsIGUsIGEsIGIsIGMsIG0sIFcsIDIsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMDMKKwlTSEExX1NUT1JFX1NUQVRFKDMpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGMsIGQsIGUsIGEsIGIsIG0sIFcsIDMsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMDQKKwlTSEExX1NUT1JFX1NUQVRFKDQpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGIsIGMsIGQsIGUsIGEsIG0sIFcsIDQsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMDUKKwlTSEExX1NUT1JFX1NUQVRFKDUpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGEsIGIsIGMsIGQsIGUsIG0sIFcsIDUsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMDYKKwlTSEExX1NUT1JFX1NUQVRFKDYpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGUsIGEsIGIsIGMsIGQsIG0sIFcsIDYsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMDcKKwlTSEExX1NUT1JFX1NUQVRFKDcpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGQsIGUsIGEsIGIsIGMsIG0sIFcsIDcsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMDgKKwlTSEExX1NUT1JFX1NUQVRFKDgpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGMsIGQsIGUsIGEsIGIsIG0sIFcsIDgsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMDkKKwlTSEExX1NUT1JFX1NUQVRFKDkpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGIsIGMsIGQsIGUsIGEsIG0sIFcsIDksIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMTAKKwlTSEExX1NUT1JFX1NUQVRFKDEwKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChhLCBiLCBjLCBkLCBlLCBtLCBXLCAxMCwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUxMQorCVNIQTFfU1RPUkVfU1RBVEUoMTEpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGUsIGEsIGIsIGMsIGQsIG0sIFcsIDExLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTEyCisJU0hBMV9TVE9SRV9TVEFURSgxMikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EMV9TVEVQX0xPQUQoZCwgZSwgYSwgYiwgYywgbSwgVywgMTIsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMTMKKwlTSEExX1NUT1JFX1NUQVRFKDEzKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChjLCBkLCBlLCBhLCBiLCBtLCBXLCAxMywgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUxNAorCVNIQTFfU1RPUkVfU1RBVEUoMTQpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGIsIGMsIGQsIGUsIGEsIG0sIFcsIDE0LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTE1CisJU0hBMV9TVE9SRV9TVEFURSgxNSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EMV9TVEVQX0xPQUQoYSwgYiwgYywgZCwgZSwgbSwgVywgMTUsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMTYKKwlTSEExX1NUT1JFX1NUQVRFKDE2KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfRVhQQU5EKGUsIGEsIGIsIGMsIGQsIFcsIDE2LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTE3CisJU0hBMV9TVE9SRV9TVEFURSgxNykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EMV9TVEVQX0VYUEFORChkLCBlLCBhLCBiLCBjLCBXLCAxNywgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUxOAorCVNIQTFfU1RPUkVfU1RBVEUoMTgpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9FWFBBTkQoYywgZCwgZSwgYSwgYiwgVywgMTgsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMTkKKwlTSEExX1NUT1JFX1NUQVRFKDE5KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfRVhQQU5EKGIsIGMsIGQsIGUsIGEsIFcsIDE5LCB0ZW1wKTsKKworCisKKyNpZmRlZiBET1NUT1JFU1RBVEUyMAorCVNIQTFfU1RPUkVfU1RBVEUoMjApCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCAyMCwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUyMQorCVNIQTFfU1RPUkVfU1RBVEUoMjEpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAyMSwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUyMgorCVNIQTFfU1RPUkVfU1RBVEUoMjIpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCAyMiwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUyMworCVNIQTFfU1RPUkVfU1RBVEUoMjMpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCAyMywgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUyNAorCVNIQTFfU1RPUkVfU1RBVEUoMjQpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCAyNCwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUyNQorCVNIQTFfU1RPUkVfU1RBVEUoMjUpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCAyNSwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUyNgorCVNIQTFfU1RPUkVfU1RBVEUoMjYpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAyNiwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUyNworCVNIQTFfU1RPUkVfU1RBVEUoMjcpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCAyNywgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUyOAorCVNIQTFfU1RPUkVfU1RBVEUoMjgpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCAyOCwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUyOQorCVNIQTFfU1RPUkVfU1RBVEUoMjkpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCAyOSwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUzMAorCVNIQTFfU1RPUkVfU1RBVEUoMzApCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCAzMCwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUzMQorCVNIQTFfU1RPUkVfU1RBVEUoMzEpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAzMSwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUzMgorCVNIQTFfU1RPUkVfU1RBVEUoMzIpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCAzMiwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUzMworCVNIQTFfU1RPUkVfU1RBVEUoMzMpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCAzMywgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUzNAorCVNIQTFfU1RPUkVfU1RBVEUoMzQpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCAzNCwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUzNQorCVNIQTFfU1RPUkVfU1RBVEUoMzUpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCAzNSwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUzNgorCVNIQTFfU1RPUkVfU1RBVEUoMzYpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAzNiwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUzNworCVNIQTFfU1RPUkVfU1RBVEUoMzcpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCAzNywgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUzOAorCVNIQTFfU1RPUkVfU1RBVEUoMzgpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCAzOCwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUzOQorCVNIQTFfU1RPUkVfU1RBVEUoMzkpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCAzOSwgdGVtcCk7CisKKworCisjaWZkZWYgRE9TVE9SRVNUQVRFNDAKKwlTSEExX1NUT1JFX1NUQVRFKDQwKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNDAsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNDEKKwlTSEExX1NUT1JFX1NUQVRFKDQxKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNDEsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNDIKKwlTSEExX1NUT1JFX1NUQVRFKDQyKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNDIsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNDMKKwlTSEExX1NUT1JFX1NUQVRFKDQzKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNDMsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNDQKKwlTSEExX1NUT1JFX1NUQVRFKDQ0KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNDQsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNDUKKwlTSEExX1NUT1JFX1NUQVRFKDQ1KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNDUsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNDYKKwlTSEExX1NUT1JFX1NUQVRFKDQ2KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNDYsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNDcKKwlTSEExX1NUT1JFX1NUQVRFKDQ3KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNDcsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNDgKKwlTSEExX1NUT1JFX1NUQVRFKDQ4KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNDgsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNDkKKwlTSEExX1NUT1JFX1NUQVRFKDQ5KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNDksIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNTAKKwlTSEExX1NUT1JFX1NUQVRFKDUwKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNTAsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNTEKKwlTSEExX1NUT1JFX1NUQVRFKDUxKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNTEsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNTIKKwlTSEExX1NUT1JFX1NUQVRFKDUyKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNTIsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNTMKKwlTSEExX1NUT1JFX1NUQVRFKDUzKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNTMsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNTQKKwlTSEExX1NUT1JFX1NUQVRFKDU0KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNTQsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNTUKKwlTSEExX1NUT1JFX1NUQVRFKDU1KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNTUsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNTYKKwlTSEExX1NUT1JFX1NUQVRFKDU2KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNTYsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNTcKKwlTSEExX1NUT1JFX1NUQVRFKDU3KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNTcsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNTgKKwlTSEExX1NUT1JFX1NUQVRFKDU4KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNTgsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNTkKKwlTSEExX1NUT1JFX1NUQVRFKDU5KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNTksIHRlbXApOworCisKKworCisjaWZkZWYgRE9TVE9SRVNUQVRFNjAKKwlTSEExX1NUT1JFX1NUQVRFKDYwKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoYSwgYiwgYywgZCwgZSwgVywgNjAsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNjEKKwlTSEExX1NUT1JFX1NUQVRFKDYxKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoZSwgYSwgYiwgYywgZCwgVywgNjEsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNjIKKwlTSEExX1NUT1JFX1NUQVRFKDYyKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoZCwgZSwgYSwgYiwgYywgVywgNjIsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNjMKKwlTSEExX1NUT1JFX1NUQVRFKDYzKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoYywgZCwgZSwgYSwgYiwgVywgNjMsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNjQKKwlTSEExX1NUT1JFX1NUQVRFKDY0KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoYiwgYywgZCwgZSwgYSwgVywgNjQsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNjUKKwlTSEExX1NUT1JFX1NUQVRFKDY1KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoYSwgYiwgYywgZCwgZSwgVywgNjUsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNjYKKwlTSEExX1NUT1JFX1NUQVRFKDY2KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoZSwgYSwgYiwgYywgZCwgVywgNjYsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNjcKKwlTSEExX1NUT1JFX1NUQVRFKDY3KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoZCwgZSwgYSwgYiwgYywgVywgNjcsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNjgKKwlTSEExX1NUT1JFX1NUQVRFKDY4KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoYywgZCwgZSwgYSwgYiwgVywgNjgsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNjkKKwlTSEExX1NUT1JFX1NUQVRFKDY5KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoYiwgYywgZCwgZSwgYSwgVywgNjksIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNzAKKwlTSEExX1NUT1JFX1NUQVRFKDcwKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoYSwgYiwgYywgZCwgZSwgVywgNzAsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNzEKKwlTSEExX1NUT1JFX1NUQVRFKDcxKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoZSwgYSwgYiwgYywgZCwgVywgNzEsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNzIKKwlTSEExX1NUT1JFX1NUQVRFKDcyKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoZCwgZSwgYSwgYiwgYywgVywgNzIsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNzMKKwlTSEExX1NUT1JFX1NUQVRFKDczKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoYywgZCwgZSwgYSwgYiwgVywgNzMsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNzQKKwlTSEExX1NUT1JFX1NUQVRFKDc0KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoYiwgYywgZCwgZSwgYSwgVywgNzQsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNzUKKwlTSEExX1NUT1JFX1NUQVRFKDc1KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoYSwgYiwgYywgZCwgZSwgVywgNzUsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNzYKKwlTSEExX1NUT1JFX1NUQVRFKDc2KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoZSwgYSwgYiwgYywgZCwgVywgNzYsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNzcKKwlTSEExX1NUT1JFX1NUQVRFKDc3KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoZCwgZSwgYSwgYiwgYywgVywgNzcsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNzgKKwlTSEExX1NUT1JFX1NUQVRFKDc4KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoYywgZCwgZSwgYSwgYiwgVywgNzgsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFNzkKKwlTSEExX1NUT1JFX1NUQVRFKDc5KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQ0X1NURVAoYiwgYywgZCwgZSwgYSwgVywgNzksIHRlbXApOworCisKKworCWlodlswXSArPSBhOyBpaHZbMV0gKz0gYjsgaWh2WzJdICs9IGM7IGlodlszXSArPSBkOyBpaHZbNF0gKz0gZTsKK30KKworCisKKworI2RlZmluZSBTSEExX1JFQ09NUFJFU1ModCkgXAorc3RhdGljIHZvaWQgc2hhMXJlY29tcHJlc3NfZmFzdF8gIyMgdCAodWludDMyX3QgaWh2aW5bNV0sIHVpbnQzMl90IGlodm91dFs1XSwgY29uc3QgdWludDMyX3QgbWUyWzgwXSwgY29uc3QgdWludDMyX3Qgc3RhdGVbNV0pIFwKK3sgXAorCXVpbnQzMl90IGEgPSBzdGF0ZVswXSwgYiA9IHN0YXRlWzFdLCBjID0gc3RhdGVbMl0sIGQgPSBzdGF0ZVszXSwgZSA9IHN0YXRlWzRdOyBcCisJaWYgKHQgPiA3OSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDc5KTsgXAorCWlmICh0ID4gNzgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCA3OCk7IFwKKwlpZiAodCA+IDc3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgNzcpOyBcCisJaWYgKHQgPiA3NikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDc2KTsgXAorCWlmICh0ID4gNzUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCA3NSk7IFwKKwlpZiAodCA+IDc0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgNzQpOyBcCisJaWYgKHQgPiA3MykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDczKTsgXAorCWlmICh0ID4gNzIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoZCwgZSwgYSwgYiwgYywgbWUyLCA3Mik7IFwKKwlpZiAodCA+IDcxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgNzEpOyBcCisJaWYgKHQgPiA3MCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDcwKTsgXAorCWlmICh0ID4gNjkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCA2OSk7IFwKKwlpZiAodCA+IDY4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgNjgpOyBcCisJaWYgKHQgPiA2NykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDY3KTsgXAorCWlmICh0ID4gNjYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCA2Nik7IFwKKwlpZiAodCA+IDY1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgNjUpOyBcCisJaWYgKHQgPiA2NCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDY0KTsgXAorCWlmICh0ID4gNjMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCA2Myk7IFwKKwlpZiAodCA+IDYyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgNjIpOyBcCisJaWYgKHQgPiA2MSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDYxKTsgXAorCWlmICh0ID4gNjApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCA2MCk7IFwKKwlpZiAodCA+IDU5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgNTkpOyBcCisJaWYgKHQgPiA1OCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDU4KTsgXAorCWlmICh0ID4gNTcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoZCwgZSwgYSwgYiwgYywgbWUyLCA1Nyk7IFwKKwlpZiAodCA+IDU2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgNTYpOyBcCisJaWYgKHQgPiA1NSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDU1KTsgXAorCWlmICh0ID4gNTQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCA1NCk7IFwKKwlpZiAodCA+IDUzKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgNTMpOyBcCisJaWYgKHQgPiA1MikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDUyKTsgXAorCWlmICh0ID4gNTEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCA1MSk7IFwKKwlpZiAodCA+IDUwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgNTApOyBcCisJaWYgKHQgPiA0OSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDQ5KTsgXAorCWlmICh0ID4gNDgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCA0OCk7IFwKKwlpZiAodCA+IDQ3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgNDcpOyBcCisJaWYgKHQgPiA0NikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDQ2KTsgXAorCWlmICh0ID4gNDUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCA0NSk7IFwKKwlpZiAodCA+IDQ0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgNDQpOyBcCisJaWYgKHQgPiA0MykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDQzKTsgXAorCWlmICh0ID4gNDIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoZCwgZSwgYSwgYiwgYywgbWUyLCA0Mik7IFwKKwlpZiAodCA+IDQxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgNDEpOyBcCisJaWYgKHQgPiA0MCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDQwKTsgXAorCWlmICh0ID4gMzkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCAzOSk7IFwKKwlpZiAodCA+IDM4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgMzgpOyBcCisJaWYgKHQgPiAzNykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDM3KTsgXAorCWlmICh0ID4gMzYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCAzNik7IFwKKwlpZiAodCA+IDM1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgMzUpOyBcCisJaWYgKHQgPiAzNCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDM0KTsgXAorCWlmICh0ID4gMzMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCAzMyk7IFwKKwlpZiAodCA+IDMyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgMzIpOyBcCisJaWYgKHQgPiAzMSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDMxKTsgXAorCWlmICh0ID4gMzApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCAzMCk7IFwKKwlpZiAodCA+IDI5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgMjkpOyBcCisJaWYgKHQgPiAyOCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDI4KTsgXAorCWlmICh0ID4gMjcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoZCwgZSwgYSwgYiwgYywgbWUyLCAyNyk7IFwKKwlpZiAodCA+IDI2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgMjYpOyBcCisJaWYgKHQgPiAyNSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDI1KTsgXAorCWlmICh0ID4gMjQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCAyNCk7IFwKKwlpZiAodCA+IDIzKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgMjMpOyBcCisJaWYgKHQgPiAyMikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDIyKTsgXAorCWlmICh0ID4gMjEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCAyMSk7IFwKKwlpZiAodCA+IDIwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgMjApOyBcCisJaWYgKHQgPiAxOSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDE5KTsgXAorCWlmICh0ID4gMTgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCAxOCk7IFwKKwlpZiAodCA+IDE3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgMTcpOyBcCisJaWYgKHQgPiAxNikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDE2KTsgXAorCWlmICh0ID4gMTUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCAxNSk7IFwKKwlpZiAodCA+IDE0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgMTQpOyBcCisJaWYgKHQgPiAxMykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDEzKTsgXAorCWlmICh0ID4gMTIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoZCwgZSwgYSwgYiwgYywgbWUyLCAxMik7IFwKKwlpZiAodCA+IDExKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgMTEpOyBcCisJaWYgKHQgPiAxMCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDEwKTsgXAorCWlmICh0ID4gOSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDkpOyBcCisJaWYgKHQgPiA4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgOCk7IFwKKwlpZiAodCA+IDcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoZCwgZSwgYSwgYiwgYywgbWUyLCA3KTsgXAorCWlmICh0ID4gNikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDYpOyBcCisJaWYgKHQgPiA1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgNSk7IFwKKwlpZiAodCA+IDQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCA0KTsgXAorCWlmICh0ID4gMykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDMpOyBcCisJaWYgKHQgPiAyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgMik7IFwKKwlpZiAodCA+IDEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCAxKTsgXAorCWlmICh0ID4gMCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDApOyBcCisJaWh2aW5bMF0gPSBhOyBpaHZpblsxXSA9IGI7IGlodmluWzJdID0gYzsgaWh2aW5bM10gPSBkOyBpaHZpbls0XSA9IGU7IFwKKwlhID0gc3RhdGVbMF07IGIgPSBzdGF0ZVsxXTsgYyA9IHN0YXRlWzJdOyBkID0gc3RhdGVbM107IGUgPSBzdGF0ZVs0XTsgXAorCWlmICh0IDw9IDApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCAwKTsgXAorCWlmICh0IDw9IDEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCAxKTsgXAorCWlmICh0IDw9IDIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCAyKTsgXAorCWlmICh0IDw9IDMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCAzKTsgXAorCWlmICh0IDw9IDQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCA0KTsgXAorCWlmICh0IDw9IDUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCA1KTsgXAorCWlmICh0IDw9IDYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCA2KTsgXAorCWlmICh0IDw9IDcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCA3KTsgXAorCWlmICh0IDw9IDgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCA4KTsgXAorCWlmICh0IDw9IDkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCA5KTsgXAorCWlmICh0IDw9IDEwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgMTApOyBcCisJaWYgKHQgPD0gMTEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCAxMSk7IFwKKwlpZiAodCA8PSAxMikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChkLCBlLCBhLCBiLCBjLCBtZTIsIDEyKTsgXAorCWlmICh0IDw9IDEzKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgMTMpOyBcCisJaWYgKHQgPD0gMTQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCAxNCk7IFwKKwlpZiAodCA8PSAxNSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDE1KTsgXAorCWlmICh0IDw9IDE2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgMTYpOyBcCisJaWYgKHQgPD0gMTcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCAxNyk7IFwKKwlpZiAodCA8PSAxOCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDE4KTsgXAorCWlmICh0IDw9IDE5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgMTkpOyBcCisJaWYgKHQgPD0gMjApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCAyMCk7IFwKKwlpZiAodCA8PSAyMSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChlLCBhLCBiLCBjLCBkLCBtZTIsIDIxKTsgXAorCWlmICh0IDw9IDIyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgMjIpOyBcCisJaWYgKHQgPD0gMjMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCAyMyk7IFwKKwlpZiAodCA8PSAyNCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChiLCBjLCBkLCBlLCBhLCBtZTIsIDI0KTsgXAorCWlmICh0IDw9IDI1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgMjUpOyBcCisJaWYgKHQgPD0gMjYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCAyNik7IFwKKwlpZiAodCA8PSAyNykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChkLCBlLCBhLCBiLCBjLCBtZTIsIDI3KTsgXAorCWlmICh0IDw9IDI4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgMjgpOyBcCisJaWYgKHQgPD0gMjkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCAyOSk7IFwKKwlpZiAodCA8PSAzMCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDMwKTsgXAorCWlmICh0IDw9IDMxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgMzEpOyBcCisJaWYgKHQgPD0gMzIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCAzMik7IFwKKwlpZiAodCA8PSAzMykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDMzKTsgXAorCWlmICh0IDw9IDM0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgMzQpOyBcCisJaWYgKHQgPD0gMzUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCAzNSk7IFwKKwlpZiAodCA8PSAzNikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChlLCBhLCBiLCBjLCBkLCBtZTIsIDM2KTsgXAorCWlmICh0IDw9IDM3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgMzcpOyBcCisJaWYgKHQgPD0gMzgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCAzOCk7IFwKKwlpZiAodCA8PSAzOSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChiLCBjLCBkLCBlLCBhLCBtZTIsIDM5KTsgXAorCWlmICh0IDw9IDQwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgNDApOyBcCisJaWYgKHQgPD0gNDEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCA0MSk7IFwKKwlpZiAodCA8PSA0MikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChkLCBlLCBhLCBiLCBjLCBtZTIsIDQyKTsgXAorCWlmICh0IDw9IDQzKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgNDMpOyBcCisJaWYgKHQgPD0gNDQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCA0NCk7IFwKKwlpZiAodCA8PSA0NSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDQ1KTsgXAorCWlmICh0IDw9IDQ2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgNDYpOyBcCisJaWYgKHQgPD0gNDcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCA0Nyk7IFwKKwlpZiAodCA8PSA0OCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDQ4KTsgXAorCWlmICh0IDw9IDQ5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgNDkpOyBcCisJaWYgKHQgPD0gNTApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCA1MCk7IFwKKwlpZiAodCA8PSA1MSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChlLCBhLCBiLCBjLCBkLCBtZTIsIDUxKTsgXAorCWlmICh0IDw9IDUyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgNTIpOyBcCisJaWYgKHQgPD0gNTMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCA1Myk7IFwKKwlpZiAodCA8PSA1NCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChiLCBjLCBkLCBlLCBhLCBtZTIsIDU0KTsgXAorCWlmICh0IDw9IDU1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgNTUpOyBcCisJaWYgKHQgPD0gNTYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCA1Nik7IFwKKwlpZiAodCA8PSA1NykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChkLCBlLCBhLCBiLCBjLCBtZTIsIDU3KTsgXAorCWlmICh0IDw9IDU4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgNTgpOyBcCisJaWYgKHQgPD0gNTkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCA1OSk7IFwKKwlpZiAodCA8PSA2MCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDYwKTsgXAorCWlmICh0IDw9IDYxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgNjEpOyBcCisJaWYgKHQgPD0gNjIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCA2Mik7IFwKKwlpZiAodCA8PSA2MykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDYzKTsgXAorCWlmICh0IDw9IDY0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgNjQpOyBcCisJaWYgKHQgPD0gNjUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCA2NSk7IFwKKwlpZiAodCA8PSA2NikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBtZTIsIDY2KTsgXAorCWlmICh0IDw9IDY3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgNjcpOyBcCisJaWYgKHQgPD0gNjgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCA2OCk7IFwKKwlpZiAodCA8PSA2OSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBtZTIsIDY5KTsgXAorCWlmICh0IDw9IDcwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgNzApOyBcCisJaWYgKHQgPD0gNzEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCA3MSk7IFwKKwlpZiAodCA8PSA3MikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBtZTIsIDcyKTsgXAorCWlmICh0IDw9IDczKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgNzMpOyBcCisJaWYgKHQgPD0gNzQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCA3NCk7IFwKKwlpZiAodCA8PSA3NSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDc1KTsgXAorCWlmICh0IDw9IDc2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgNzYpOyBcCisJaWYgKHQgPD0gNzcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCA3Nyk7IFwKKwlpZiAodCA8PSA3OCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDc4KTsgXAorCWlmICh0IDw9IDc5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgNzkpOyBcCisJaWh2b3V0WzBdID0gaWh2aW5bMF0gKyBhOyBpaHZvdXRbMV0gPSBpaHZpblsxXSArIGI7IGlodm91dFsyXSA9IGlodmluWzJdICsgYzsgaWh2b3V0WzNdID0gaWh2aW5bM10gKyBkOyBpaHZvdXRbNF0gPSBpaHZpbls0XSArIGU7IFwKK30KKworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTI3KSAgLyogQ29tcGlsZXIgY29tcGxhaW5zIGFib3V0IHRoZSBjaGVja3MgaW4gdGhlIGFib3ZlIG1hY3JvIGJlaW5nIGNvbnN0YW50LiAqLworI2VuZGlmCisKKyNpZmRlZiBET1NUT1JFU1RBVEUwCitTSEExX1JFQ09NUFJFU1MoMCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMQorU0hBMV9SRUNPTVBSRVNTKDEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTIKK1NIQTFfUkVDT01QUkVTUygyKQorI2VuZGlmCisKKyNpZmRlZiBET1NUT1JFU1RBVEUzCitTSEExX1JFQ09NUFJFU1MoMykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNAorU0hBMV9SRUNPTVBSRVNTKDQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTUKK1NIQTFfUkVDT01QUkVTUyg1KQorI2VuZGlmCisKKyNpZmRlZiBET1NUT1JFU1RBVEU2CitTSEExX1JFQ09NUFJFU1MoNikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNworU0hBMV9SRUNPTVBSRVNTKDcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTgKK1NIQTFfUkVDT01QUkVTUyg4KQorI2VuZGlmCisKKyNpZmRlZiBET1NUT1JFU1RBVEU5CitTSEExX1JFQ09NUFJFU1MoOSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMTAKK1NIQTFfUkVDT01QUkVTUygxMCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMTEKK1NIQTFfUkVDT01QUkVTUygxMSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMTIKK1NIQTFfUkVDT01QUkVTUygxMikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMTMKK1NIQTFfUkVDT01QUkVTUygxMykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMTQKK1NIQTFfUkVDT01QUkVTUygxNCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMTUKK1NIQTFfUkVDT01QUkVTUygxNSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMTYKK1NIQTFfUkVDT01QUkVTUygxNikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMTcKK1NIQTFfUkVDT01QUkVTUygxNykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMTgKK1NIQTFfUkVDT01QUkVTUygxOCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMTkKK1NIQTFfUkVDT01QUkVTUygxOSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMjAKK1NIQTFfUkVDT01QUkVTUygyMCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMjEKK1NIQTFfUkVDT01QUkVTUygyMSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMjIKK1NIQTFfUkVDT01QUkVTUygyMikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMjMKK1NIQTFfUkVDT01QUkVTUygyMykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMjQKK1NIQTFfUkVDT01QUkVTUygyNCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMjUKK1NIQTFfUkVDT01QUkVTUygyNSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMjYKK1NIQTFfUkVDT01QUkVTUygyNikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMjcKK1NIQTFfUkVDT01QUkVTUygyNykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMjgKK1NIQTFfUkVDT01QUkVTUygyOCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMjkKK1NIQTFfUkVDT01QUkVTUygyOSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMzAKK1NIQTFfUkVDT01QUkVTUygzMCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMzEKK1NIQTFfUkVDT01QUkVTUygzMSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMzIKK1NIQTFfUkVDT01QUkVTUygzMikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMzMKK1NIQTFfUkVDT01QUkVTUygzMykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMzQKK1NIQTFfUkVDT01QUkVTUygzNCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMzUKK1NIQTFfUkVDT01QUkVTUygzNSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMzYKK1NIQTFfUkVDT01QUkVTUygzNikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMzcKK1NIQTFfUkVDT01QUkVTUygzNykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMzgKK1NIQTFfUkVDT01QUkVTUygzOCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMzkKK1NIQTFfUkVDT01QUkVTUygzOSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNDAKK1NIQTFfUkVDT01QUkVTUyg0MCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNDEKK1NIQTFfUkVDT01QUkVTUyg0MSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNDIKK1NIQTFfUkVDT01QUkVTUyg0MikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNDMKK1NIQTFfUkVDT01QUkVTUyg0MykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNDQKK1NIQTFfUkVDT01QUkVTUyg0NCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNDUKK1NIQTFfUkVDT01QUkVTUyg0NSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNDYKK1NIQTFfUkVDT01QUkVTUyg0NikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNDcKK1NIQTFfUkVDT01QUkVTUyg0NykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNDgKK1NIQTFfUkVDT01QUkVTUyg0OCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNDkKK1NIQTFfUkVDT01QUkVTUyg0OSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNTAKK1NIQTFfUkVDT01QUkVTUyg1MCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNTEKK1NIQTFfUkVDT01QUkVTUyg1MSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNTIKK1NIQTFfUkVDT01QUkVTUyg1MikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNTMKK1NIQTFfUkVDT01QUkVTUyg1MykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNTQKK1NIQTFfUkVDT01QUkVTUyg1NCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNTUKK1NIQTFfUkVDT01QUkVTUyg1NSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNTYKK1NIQTFfUkVDT01QUkVTUyg1NikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNTcKK1NIQTFfUkVDT01QUkVTUyg1NykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNTgKK1NIQTFfUkVDT01QUkVTUyg1OCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNTkKK1NIQTFfUkVDT01QUkVTUyg1OSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNjAKK1NIQTFfUkVDT01QUkVTUyg2MCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNjEKK1NIQTFfUkVDT01QUkVTUyg2MSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNjIKK1NIQTFfUkVDT01QUkVTUyg2MikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNjMKK1NIQTFfUkVDT01QUkVTUyg2MykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNjQKK1NIQTFfUkVDT01QUkVTUyg2NCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNjUKK1NIQTFfUkVDT01QUkVTUyg2NSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNjYKK1NIQTFfUkVDT01QUkVTUyg2NikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNjcKK1NIQTFfUkVDT01QUkVTUyg2NykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNjgKK1NIQTFfUkVDT01QUkVTUyg2OCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNjkKK1NIQTFfUkVDT01QUkVTUyg2OSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNzAKK1NIQTFfUkVDT01QUkVTUyg3MCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNzEKK1NIQTFfUkVDT01QUkVTUyg3MSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNzIKK1NIQTFfUkVDT01QUkVTUyg3MikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNzMKK1NIQTFfUkVDT01QUkVTUyg3MykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNzQKK1NIQTFfUkVDT01QUkVTUyg3NCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNzUKK1NIQTFfUkVDT01QUkVTUyg3NSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNzYKK1NIQTFfUkVDT01QUkVTUyg3NikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNzcKK1NIQTFfUkVDT01QUkVTUyg3NykKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNzgKK1NIQTFfUkVDT01QUkVTUyg3OCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNzkKK1NIQTFfUkVDT01QUkVTUyg3OSkKKyNlbmRpZgorCisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKKworc3RhdGljIHZvaWQgc2hhMV9yZWNvbXByZXNzaW9uX3N0ZXAodWludDMyX3Qgc3RlcCwgdWludDMyX3QgaWh2aW5bNV0sIHVpbnQzMl90IGlodm91dFs1XSwgY29uc3QgdWludDMyX3QgbWUyWzgwXSwgY29uc3QgdWludDMyX3Qgc3RhdGVbNV0pCit7CisJc3dpdGNoIChzdGVwKQorCXsKKyNpZmRlZiBET1NUT1JFU1RBVEUwCisJY2FzZSAwOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzAoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMQorCWNhc2UgMToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8xKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTIKKwljYXNlIDI6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUzCisJY2FzZSAzOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzMoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNAorCWNhc2UgNDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF80KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTUKKwljYXNlIDU6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU2CisJY2FzZSA2OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzYoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNworCWNhc2UgNzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF83KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTgKKwljYXNlIDg6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfOChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU5CisJY2FzZSA5OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzkoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMTAKKwljYXNlIDEwOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzEwKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTExCisJY2FzZSAxMToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8xMShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUxMgorCWNhc2UgMTI6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMTIoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMTMKKwljYXNlIDEzOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzEzKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTE0CisJY2FzZSAxNDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8xNChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUxNQorCWNhc2UgMTU6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMTUoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMTYKKwljYXNlIDE2OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzE2KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTE3CisJY2FzZSAxNzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8xNyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUxOAorCWNhc2UgMTg6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMTgoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMTkKKwljYXNlIDE5OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzE5KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTIwCisJY2FzZSAyMDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8yMChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUyMQorCWNhc2UgMjE6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMjEoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMjIKKwljYXNlIDIyOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzIyKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTIzCisJY2FzZSAyMzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8yMyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUyNAorCWNhc2UgMjQ6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMjQoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMjUKKwljYXNlIDI1OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzI1KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTI2CisJY2FzZSAyNjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8yNihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUyNworCWNhc2UgMjc6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMjcoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMjgKKwljYXNlIDI4OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzI4KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTI5CisJY2FzZSAyOToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8yOShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUzMAorCWNhc2UgMzA6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMzAoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMzEKKwljYXNlIDMxOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzMxKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTMyCisJY2FzZSAzMjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8zMihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUzMworCWNhc2UgMzM6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMzMoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMzQKKwljYXNlIDM0OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzM0KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTM1CisJY2FzZSAzNToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8zNShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUzNgorCWNhc2UgMzY6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMzYoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMzcKKwljYXNlIDM3OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzM3KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTM4CisJY2FzZSAzODoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8zOChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUzOQorCWNhc2UgMzk6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMzkoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNDAKKwljYXNlIDQwOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzQwKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTQxCisJY2FzZSA0MToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF80MShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU0MgorCWNhc2UgNDI6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNDIoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNDMKKwljYXNlIDQzOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzQzKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTQ0CisJY2FzZSA0NDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF80NChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU0NQorCWNhc2UgNDU6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNDUoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNDYKKwljYXNlIDQ2OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzQ2KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTQ3CisJY2FzZSA0NzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF80NyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU0OAorCWNhc2UgNDg6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNDgoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNDkKKwljYXNlIDQ5OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzQ5KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTUwCisJY2FzZSA1MDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF81MChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU1MQorCWNhc2UgNTE6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNTEoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNTIKKwljYXNlIDUyOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzUyKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTUzCisJY2FzZSA1MzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF81MyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU1NAorCWNhc2UgNTQ6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNTQoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNTUKKwljYXNlIDU1OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzU1KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTU2CisJY2FzZSA1NjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF81NihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU1NworCWNhc2UgNTc6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNTcoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNTgKKwljYXNlIDU4OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzU4KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTU5CisJY2FzZSA1OToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF81OShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU2MAorCWNhc2UgNjA6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNjAoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNjEKKwljYXNlIDYxOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzYxKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTYyCisJY2FzZSA2MjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF82MihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU2MworCWNhc2UgNjM6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNjMoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNjQKKwljYXNlIDY0OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzY0KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTY1CisJY2FzZSA2NToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF82NShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU2NgorCWNhc2UgNjY6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNjYoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNjcKKwljYXNlIDY3OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzY3KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTY4CisJY2FzZSA2ODoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF82OChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU2OQorCWNhc2UgNjk6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNjkoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNzAKKwljYXNlIDcwOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzcwKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTcxCisJY2FzZSA3MToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF83MShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU3MgorCWNhc2UgNzI6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNzIoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNzMKKwljYXNlIDczOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzczKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTc0CisJY2FzZSA3NDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF83NChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU3NQorCWNhc2UgNzU6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNzUoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNzYKKwljYXNlIDc2OgorCQlzaGExcmVjb21wcmVzc19mYXN0Xzc2KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTc3CisJY2FzZSA3NzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF83NyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU3OAorCWNhc2UgNzg6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNzgoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNzkKKwljYXNlIDc5OgorCQlzaGExcmVjb21wcmVzc19mYXN0Xzc5KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWFib3J0KCk7CisJfQorCit9CisKKworCitzdGF0aWMgdm9pZCBzaGExX3Byb2Nlc3MoU0hBMV9DVFgqIGN0eCwgY29uc3QgdWludDMyX3QgYmxvY2tbMTZdKQoreworCXVuc2lnbmVkIGksIGo7CisJdWludDMyX3QgdWJjX2R2X21hc2tbRFZNQVNLU0laRV0gPSB7IDB4RkZGRkZGRkYgfTsKKwl1aW50MzJfdCBpaHZ0bXBbNV07CisKKwljdHgtPmlodjFbMF0gPSBjdHgtPmlodlswXTsKKwljdHgtPmlodjFbMV0gPSBjdHgtPmlodlsxXTsKKwljdHgtPmlodjFbMl0gPSBjdHgtPmlodlsyXTsKKwljdHgtPmlodjFbM10gPSBjdHgtPmlodlszXTsKKwljdHgtPmlodjFbNF0gPSBjdHgtPmlodls0XTsKKworCXNoYTFfY29tcHJlc3Npb25fc3RhdGVzKGN0eC0+aWh2LCBibG9jaywgY3R4LT5tMSwgY3R4LT5zdGF0ZXMpOworCisJaWYgKGN0eC0+ZGV0ZWN0X2NvbGwpCisJeworCQlpZiAoY3R4LT51YmNfY2hlY2spCisJCXsKKwkJCXViY19jaGVjayhjdHgtPm0xLCB1YmNfZHZfbWFzayk7CisJCX0KKworCQlpZiAodWJjX2R2X21hc2tbMF0gIT0gMCkKKwkJeworCQkJZm9yIChpID0gMDsgc2hhMV9kdnNbaV0uZHZUeXBlICE9IDA7ICsraSkKKwkJCXsKKwkJCQlpZiAodWJjX2R2X21hc2tbMF0gJiAoKHVpbnQzMl90KSgxKSA8PCBzaGExX2R2c1tpXS5tYXNrYikpCisJCQkJeworCQkJCQlmb3IgKGogPSAwOyBqIDwgODA7ICsraikKKwkJCQkJCWN0eC0+bTJbal0gPSBjdHgtPm0xW2pdIF4gc2hhMV9kdnNbaV0uZG1bal07CisKKwkJCQkJc2hhMV9yZWNvbXByZXNzaW9uX3N0ZXAoc2hhMV9kdnNbaV0udGVzdHQsIGN0eC0+aWh2MiwgaWh2dG1wLCBjdHgtPm0yLCBjdHgtPnN0YXRlc1tzaGExX2R2c1tpXS50ZXN0dF0pOworCisJCQkJCS8qIHRvIHZlcmlmeSBTSEEtMSBjb2xsaXNpb24gZGV0ZWN0aW9uIGNvZGUgd2l0aCBjb2xsaXNpb25zIGZvciByZWR1Y2VkLXN0ZXAgU0hBLTEgKi8KKwkJCQkJaWYgKCgwID09ICgoaWh2dG1wWzBdIF4gY3R4LT5paHZbMF0pIHwgKGlodnRtcFsxXSBeIGN0eC0+aWh2WzFdKSB8IChpaHZ0bXBbMl0gXiBjdHgtPmlodlsyXSkgfCAoaWh2dG1wWzNdIF4gY3R4LT5paHZbM10pIHwgKGlodnRtcFs0XSBeIGN0eC0+aWh2WzRdKSkpCisJCQkJCQl8fCAoY3R4LT5yZWR1Y2VkX3JvdW5kX2NvbGwgJiYgMD09KChjdHgtPmlodjFbMF0gXiBjdHgtPmlodjJbMF0pIHwgKGN0eC0+aWh2MVsxXSBeIGN0eC0+aWh2MlsxXSkgfCAoY3R4LT5paHYxWzJdIF4gY3R4LT5paHYyWzJdKSB8IChjdHgtPmlodjFbM10gXiBjdHgtPmlodjJbM10pIHwgKGN0eC0+aWh2MVs0XSBeIGN0eC0+aWh2Mls0XSkpKSkKKwkJCQkJeworCQkJCQkJY3R4LT5mb3VuZF9jb2xsaXNpb24gPSAxOworCisJCQkJCQlpZiAoY3R4LT5zYWZlX2hhc2gpCisJCQkJCQl7CisJCQkJCQkJc2hhMV9jb21wcmVzc2lvbl9XKGN0eC0+aWh2LCBjdHgtPm0xKTsKKwkJCQkJCQlzaGExX2NvbXByZXNzaW9uX1coY3R4LT5paHYsIGN0eC0+bTEpOworCQkJCQkJfQorCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKwordm9pZCBTSEExRENJbml0KFNIQTFfQ1RYKiBjdHgpCit7CisJY3R4LT50b3RhbCA9IDA7CisJY3R4LT5paHZbMF0gPSAweDY3NDUyMzAxOworCWN0eC0+aWh2WzFdID0gMHhFRkNEQUI4OTsKKwljdHgtPmlodlsyXSA9IDB4OThCQURDRkU7CisJY3R4LT5paHZbM10gPSAweDEwMzI1NDc2OworCWN0eC0+aWh2WzRdID0gMHhDM0QyRTFGMDsKKwljdHgtPmZvdW5kX2NvbGxpc2lvbiA9IDA7CisJY3R4LT5zYWZlX2hhc2ggPSBTSEExRENfSU5JVF9TQUZFX0hBU0hfREVGQVVMVDsKKwljdHgtPnViY19jaGVjayA9IDE7CisJY3R4LT5kZXRlY3RfY29sbCA9IDE7CisJY3R4LT5yZWR1Y2VkX3JvdW5kX2NvbGwgPSAwOworCWN0eC0+Y2FsbGJhY2sgPSBOVUxMOworfQorCit2b2lkIFNIQTFEQ1NldFNhZmVIYXNoKFNIQTFfQ1RYKiBjdHgsIGludCBzYWZlaGFzaCkKK3sKKwlpZiAoc2FmZWhhc2gpCisJCWN0eC0+c2FmZV9oYXNoID0gMTsKKwllbHNlCisJCWN0eC0+c2FmZV9oYXNoID0gMDsKK30KKworCit2b2lkIFNIQTFEQ1NldFVzZVVCQyhTSEExX0NUWCogY3R4LCBpbnQgdWJjX2NoZWNrKQoreworCWlmICh1YmNfY2hlY2spCisJCWN0eC0+dWJjX2NoZWNrID0gMTsKKwllbHNlCisJCWN0eC0+dWJjX2NoZWNrID0gMDsKK30KKwordm9pZCBTSEExRENTZXRVc2VEZXRlY3RDb2xsKFNIQTFfQ1RYKiBjdHgsIGludCBkZXRlY3RfY29sbCkKK3sKKwlpZiAoZGV0ZWN0X2NvbGwpCisJCWN0eC0+ZGV0ZWN0X2NvbGwgPSAxOworCWVsc2UKKwkJY3R4LT5kZXRlY3RfY29sbCA9IDA7Cit9CisKK3ZvaWQgU0hBMURDU2V0RGV0ZWN0UmVkdWNlZFJvdW5kQ29sbGlzaW9uKFNIQTFfQ1RYKiBjdHgsIGludCByZWR1Y2VkX3JvdW5kX2NvbGwpCit7CisJaWYgKHJlZHVjZWRfcm91bmRfY29sbCkKKwkJY3R4LT5yZWR1Y2VkX3JvdW5kX2NvbGwgPSAxOworCWVsc2UKKwkJY3R4LT5yZWR1Y2VkX3JvdW5kX2NvbGwgPSAwOworfQorCit2b2lkIFNIQTFEQ1NldENhbGxiYWNrKFNIQTFfQ1RYKiBjdHgsIGNvbGxpc2lvbl9ibG9ja19jYWxsYmFjayBjYWxsYmFjaykKK3sKKwljdHgtPmNhbGxiYWNrID0gY2FsbGJhY2s7Cit9CisKK3ZvaWQgU0hBMURDVXBkYXRlKFNIQTFfQ1RYKiBjdHgsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBsZWZ0LCBmaWxsOworCisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm47CisKKwlsZWZ0ID0gY3R4LT50b3RhbCAmIDYzOworCWZpbGwgPSA2NCAtIGxlZnQ7CisKKwlpZiAobGVmdCAmJiBsZW4gPj0gZmlsbCkKKwl7CisJCWN0eC0+dG90YWwgKz0gZmlsbDsKKwkJbWVtY3B5KGN0eC0+YnVmZmVyICsgbGVmdCwgYnVmLCBmaWxsKTsKKwkJc2hhMV9wcm9jZXNzKGN0eCwgKHVpbnQzMl90KikoY3R4LT5idWZmZXIpKTsKKwkJYnVmICs9IGZpbGw7CisJCWxlbiAtPSBmaWxsOworCQlsZWZ0ID0gMDsKKwl9CisJd2hpbGUgKGxlbiA+PSA2NCkKKwl7CisJCWN0eC0+dG90YWwgKz0gNjQ7CisKKyNpZiBkZWZpbmVkKFNIQTFEQ19BTExPV19VTkFMSUdORURfQUNDRVNTKQorCQlzaGExX3Byb2Nlc3MoY3R4LCAodWludDMyX3QqKShidWYpKTsKKyNlbHNlCisJCW1lbWNweShjdHgtPmJ1ZmZlciwgYnVmLCA2NCk7CisJCXNoYTFfcHJvY2VzcyhjdHgsICh1aW50MzJfdCopKGN0eC0+YnVmZmVyKSk7CisjZW5kaWYgLyogZGVmaW5lZChTSEExRENfQUxMT1dfVU5BTElHTkVEX0FDQ0VTUykgKi8KKwkJYnVmICs9IDY0OworCQlsZW4gLT0gNjQ7CisJfQorCWlmIChsZW4gPiAwKQorCXsKKwkJY3R4LT50b3RhbCArPSBsZW47CisJCW1lbWNweShjdHgtPmJ1ZmZlciArIGxlZnQsIGJ1ZiwgbGVuKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcGFkZGluZ1s2NF0gPQoreworCTB4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307CisKK2ludCBTSEExRENGaW5hbCh1bnNpZ25lZCBjaGFyIG91dHB1dFsyMF0sIFNIQTFfQ1RYICpjdHgpCit7CisJdWludDMyX3QgbGFzdCA9IGN0eC0+dG90YWwgJiA2MzsKKwl1aW50MzJfdCBwYWRuID0gKGxhc3QgPCA1NikgPyAoNTYgLSBsYXN0KSA6ICgxMjAgLSBsYXN0KTsKKwl1aW50NjRfdCB0b3RhbDsKKwlTSEExRENVcGRhdGUoY3R4LCAoY29uc3QgY2hhciopKHNoYTFfcGFkZGluZyksIHBhZG4pOworCisJdG90YWwgPSBjdHgtPnRvdGFsIC0gcGFkbjsKKwl0b3RhbCA8PD0gMzsKKwljdHgtPmJ1ZmZlcls1Nl0gPSAodW5zaWduZWQgY2hhcikodG90YWwgPj4gNTYpOworCWN0eC0+YnVmZmVyWzU3XSA9ICh1bnNpZ25lZCBjaGFyKSh0b3RhbCA+PiA0OCk7CisJY3R4LT5idWZmZXJbNThdID0gKHVuc2lnbmVkIGNoYXIpKHRvdGFsID4+IDQwKTsKKwljdHgtPmJ1ZmZlcls1OV0gPSAodW5zaWduZWQgY2hhcikodG90YWwgPj4gMzIpOworCWN0eC0+YnVmZmVyWzYwXSA9ICh1bnNpZ25lZCBjaGFyKSh0b3RhbCA+PiAyNCk7CisJY3R4LT5idWZmZXJbNjFdID0gKHVuc2lnbmVkIGNoYXIpKHRvdGFsID4+IDE2KTsKKwljdHgtPmJ1ZmZlcls2Ml0gPSAodW5zaWduZWQgY2hhcikodG90YWwgPj4gOCk7CisJY3R4LT5idWZmZXJbNjNdID0gKHVuc2lnbmVkIGNoYXIpKHRvdGFsKTsKKwlzaGExX3Byb2Nlc3MoY3R4LCAodWludDMyX3QqKShjdHgtPmJ1ZmZlcikpOworCW91dHB1dFswXSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlswXSA+PiAyNCk7CisJb3V0cHV0WzFdID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzBdID4+IDE2KTsKKwlvdXRwdXRbMl0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbMF0gPj4gOCk7CisJb3V0cHV0WzNdID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzBdKTsKKwlvdXRwdXRbNF0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbMV0gPj4gMjQpOworCW91dHB1dFs1XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlsxXSA+PiAxNik7CisJb3V0cHV0WzZdID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzFdID4+IDgpOworCW91dHB1dFs3XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlsxXSk7CisJb3V0cHV0WzhdID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzJdID4+IDI0KTsKKwlvdXRwdXRbOV0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbMl0gPj4gMTYpOworCW91dHB1dFsxMF0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbMl0gPj4gOCk7CisJb3V0cHV0WzExXSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlsyXSk7CisJb3V0cHV0WzEyXSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlszXSA+PiAyNCk7CisJb3V0cHV0WzEzXSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlszXSA+PiAxNik7CisJb3V0cHV0WzE0XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlszXSA+PiA4KTsKKwlvdXRwdXRbMTVdID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzNdKTsKKwlvdXRwdXRbMTZdID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzRdID4+IDI0KTsKKwlvdXRwdXRbMTddID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzRdID4+IDE2KTsKKwlvdXRwdXRbMThdID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzRdID4+IDgpOworCW91dHB1dFsxOV0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbNF0pOworCXJldHVybiBjdHgtPmZvdW5kX2NvbGxpc2lvbjsKK30KKworI2lmZGVmIFNIQTFEQ19DVVNUT01fVFJBSUxJTkdfSU5DTFVERV9TSEExX0MKKyNpbmNsdWRlIFNIQTFEQ19DVVNUT01fVFJBSUxJTkdfSU5DTFVERV9TSEExX0MKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc2hhMWRjL3NoYTEuaCBiL3NoYTFkYy9zaGExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0ZTk0YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYTFkYy9zaGExLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qKioKKyogQ29weXJpZ2h0IDIwMTcgTWFyYyBTdGV2ZW5zIDxtYXJjQG1hcmMtc3RldmVucy5ubD4sIERhbiBTaHVtb3cgPGRhbnNodUBtaWNyb3NvZnQuY29tPgorKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIFNvZnR3YXJlIExpY2Vuc2UuCisqIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFLnR4dCBvciBjb3B5IGF0CisqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCisqKiovCisKKyNpZm5kZWYgU0hBMURDX1NIQTFfSAorI2RlZmluZSBTSEExRENfU0hBMV9ICisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmbmRlZiBTSEExRENfTk9fU1RBTkRBUkRfSU5DTFVERVMKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCisvKiBzaGEtMSBjb21wcmVzc2lvbiBmdW5jdGlvbiB0aGF0IHRha2VzIGFuIGFscmVhZHkgZXhwYW5kZWQgbWVzc2FnZSwgYW5kIGFkZGl0aW9uYWxseSBzdG9yZSBpbnRlcm1lZGlhdGUgc3RhdGVzICovCisvKiBvbmx5IHN0b3JlcyBzdGF0ZXMgaWkgKHRoZSBzdGF0ZSBiZXR3ZWVuIHN0ZXAgaWktMSBhbmQgc3RlcCBpaSkgd2hlbiBET1NUT1JFU1RBVEVpaSBpcyBkZWZpbmVkIGluIHViY19jaGVjay5oICovCit2b2lkIHNoYTFfY29tcHJlc3Npb25fc3RhdGVzKHVpbnQzMl90WzVdLCBjb25zdCB1aW50MzJfdFsxNl0sIHVpbnQzMl90WzgwXSwgdWludDMyX3RbODBdWzVdKTsKKworLyoKKy8vIEZ1bmN0aW9uIHR5cGUgZm9yIHNoYTFfcmVjb21wcmVzc2lvbl9zdGVwX1QgKHVpbnQzMl90IGlodmluWzVdLCB1aW50MzJfdCBpaHZvdXRbNV0sIGNvbnN0IHVpbnQzMl90IG1lMls4MF0sIGNvbnN0IHVpbnQzMl90IHN0YXRlWzVdKS4KKy8vIFdoZXJlIDAgPD0gVCA8IDgwCisvLyAgICAgICBtZTIgaXMgYW4gZXhwYW5kZWQgbWVzc2FnZSAodGhlIGV4cGFuc2lvbiBvZiBhbiBvcmlnaW5hbCBtZXNzYWdlIGJsb2NrIFhPUidlZCB3aXRoIGEgZGlzdHVyYmFuY2UgdmVjdG9yJ3MgbWVzc2FnZSBibG9jayBkaWZmZXJlbmNlLikKKy8vICAgICAgIHN0YXRlIGlzIHRoZSBpbnRlcm5hbCBzdGF0ZSAoYSxiLGMsZCxlKSBiZWZvcmUgc3RlcCBUIG9mIHRoZSBTSEEtMSBjb21wcmVzc2lvbiBmdW5jdGlvbiB3aGlsZSBwcm9jZXNzaW5nIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGJsb2NrLgorLy8gVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuOgorLy8gICAgICAgaWh2aW46IFRoZSByZWNvbnN0cnVjdGVkIGlucHV0IGNoYWluaW5nIHZhbHVlLgorLy8gICAgICAgaWh2b3V0OiBUaGUgcmVjb25zdHJ1Y3RlZCBvdXRwdXQgY2hhaW5pbmcgdmFsdWUuCisqLwordHlwZWRlZiB2b2lkKCpzaGExX3JlY29tcHJlc3Npb25fdHlwZSkodWludDMyX3QqLCB1aW50MzJfdCosIGNvbnN0IHVpbnQzMl90KiwgY29uc3QgdWludDMyX3QqKTsKKworLyogQSBjYWxsYmFjayBmdW5jdGlvbiB0eXBlIHRoYXQgY2FuIGJlIHNldCB0byBiZSBjYWxsZWQgd2hlbiBhIGNvbGxpc2lvbiBibG9jayBoYXMgYmVlbiBmb3VuZDogKi8KKy8qIHZvaWQgY29sbGlzaW9uX2Jsb2NrX2NhbGxiYWNrKHVpbnQ2NF90IGJ5dGVvZmZzZXQsIGNvbnN0IHVpbnQzMl90IGlodmluMVs1XSwgY29uc3QgdWludDMyX3QgaWh2aW4yWzVdLCBjb25zdCB1aW50MzJfdCBtMVs4MF0sIGNvbnN0IHVpbnQzMl90IG0yWzgwXSkgKi8KK3R5cGVkZWYgdm9pZCgqY29sbGlzaW9uX2Jsb2NrX2NhbGxiYWNrKSh1aW50NjRfdCwgY29uc3QgdWludDMyX3QqLCBjb25zdCB1aW50MzJfdCosIGNvbnN0IHVpbnQzMl90KiwgY29uc3QgdWludDMyX3QqKTsKKworLyogVGhlIFNIQS0xIGNvbnRleHQuICovCit0eXBlZGVmIHN0cnVjdCB7CisJdWludDY0X3QgdG90YWw7CisJdWludDMyX3QgaWh2WzVdOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzY0XTsKKwlpbnQgZm91bmRfY29sbGlzaW9uOworCWludCBzYWZlX2hhc2g7CisJaW50IGRldGVjdF9jb2xsOworCWludCB1YmNfY2hlY2s7CisJaW50IHJlZHVjZWRfcm91bmRfY29sbDsKKwljb2xsaXNpb25fYmxvY2tfY2FsbGJhY2sgY2FsbGJhY2s7CisKKwl1aW50MzJfdCBpaHYxWzVdOworCXVpbnQzMl90IGlodjJbNV07CisJdWludDMyX3QgbTFbODBdOworCXVpbnQzMl90IG0yWzgwXTsKKwl1aW50MzJfdCBzdGF0ZXNbODBdWzVdOworfSBTSEExX0NUWDsKKworLyogSW5pdGlhbGl6ZSBTSEEtMSBjb250ZXh0LiAqLwordm9pZCBTSEExRENJbml0KFNIQTFfQ1RYKik7CisKKy8qCisgICAgRnVuY3Rpb24gdG8gZW5hYmxlIHNhZmUgU0hBLTEgaGFzaGluZzoKKyAgICBDb2xsaXNpb24gYXR0YWNrcyBhcmUgdGh3YXJ0ZWQgYnkgaGFzaGluZyBhIGRldGVjdGVkIG5lYXItY29sbGlzaW9uIGJsb2NrIDMgdGltZXMuCisgICAgVGhpbmsgb2YgaXQgYXMgZXh0ZW5kaW5nIFNIQS0xIGZyb20gODAtc3RlcHMgdG8gMjQwLXN0ZXBzIGZvciBzdWNoIGJsb2NrczoKKyAgICAgICAgVGhlIGJlc3QgY29sbGlzaW9uIGF0dGFja3MgYWdhaW5zdCBTSEEtMSBoYXZlIGNvbXBsZXhpdHkgYWJvdXQgMl42MCwKKyAgICAgICAgdGh1cyBmb3IgMjQwLXN0ZXBzIGFuIGltbWVkaWF0ZSBsb3dlci1ib3VuZCBmb3IgdGhlIGJlc3QgY3J5cHRhbmFseXRpYyBhdHRhY2tzIHdvdWxkIGJlIDJeMTgwLgorICAgICAgICBBbiBhdHRhY2tlciB3b3VsZCBiZSBiZXR0ZXIgb2ZmIHVzaW5nIGEgZ2VuZXJpYyBiaXJ0aGRheSBzZWFyY2ggb2YgY29tcGxleGl0eSAyXjgwLgorCisgICBFbmFibGluZyBzYWZlIFNIQS0xIGhhc2hpbmcgd2lsbCByZXN1bHQgaW4gdGhlIGNvcnJlY3QgU0hBLTEgaGFzaCBmb3IgbWVzc2FnZXMgd2hlcmUgbm8gY29sbGlzaW9uIGF0dGFjayB3YXMgZGV0ZWN0ZWQsCisgICBidXQgaXQgd2lsbCByZXN1bHQgaW4gYSBkaWZmZXJlbnQgU0hBLTEgaGFzaCBmb3IgbWVzc2FnZXMgd2hlcmUgYSBjb2xsaXNpb24gYXR0YWNrIHdhcyBkZXRlY3RlZC4KKyAgIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IGludmFsaWRhdGUgU0hBLTEgYmFzZWQgZGlnaXRhbCBzaWduYXR1cmUgZm9yZ2VyaWVzLgorICAgRW5hYmxlZCBieSBkZWZhdWx0LgorKi8KK3ZvaWQgU0hBMURDU2V0U2FmZUhhc2goU0hBMV9DVFgqLCBpbnQpOworCisvKgorICAgIEZ1bmN0aW9uIHRvIGRpc2FibGUgb3IgZW5hYmxlIHRoZSB1c2Ugb2YgVW5hdm9pZGFibGUgQml0Y29uZGl0aW9ucyAocHJvdmlkZXMgYSBzaWduaWZpY2FudCBzcGVlZCB1cCkuCisgICAgRW5hYmxlZCBieSBkZWZhdWx0CisgKi8KK3ZvaWQgU0hBMURDU2V0VXNlVUJDKFNIQTFfQ1RYKiwgaW50KTsKKworLyoKKyAgICBGdW5jdGlvbiB0byBkaXNhYmxlIG9yIGVuYWJsZSB0aGUgdXNlIG9mIENvbGxpc2lvbiBEZXRlY3Rpb24uCisgICAgRW5hYmxlZCBieSBkZWZhdWx0LgorICovCit2b2lkIFNIQTFEQ1NldFVzZURldGVjdENvbGwoU0hBMV9DVFgqLCBpbnQpOworCisvKiBmdW5jdGlvbiB0byBkaXNhYmxlIG9yIGVuYWJsZSB0aGUgZGV0ZWN0aW9uIG9mIHJlZHVjZWQtcm91bmQgU0hBLTEgY29sbGlzaW9ucyAqLworLyogZGlzYWJsZWQgYnkgZGVmYXVsdCAqLwordm9pZCBTSEExRENTZXREZXRlY3RSZWR1Y2VkUm91bmRDb2xsaXNpb24oU0hBMV9DVFgqLCBpbnQpOworCisvKiBmdW5jdGlvbiB0byBzZXQgYSBjYWxsYmFjayBmdW5jdGlvbiwgcGFzcyBOVUxMIHRvIGRpc2FibGUgKi8KKy8qIGJ5IGRlZmF1bHQgbm8gY2FsbGJhY2sgc2V0ICovCit2b2lkIFNIQTFEQ1NldENhbGxiYWNrKFNIQTFfQ1RYKiwgY29sbGlzaW9uX2Jsb2NrX2NhbGxiYWNrKTsKKworLyogdXBkYXRlIFNIQS0xIGNvbnRleHQgd2l0aCBidWZmZXIgY29udGVudHMgKi8KK3ZvaWQgU0hBMURDVXBkYXRlKFNIQTFfQ1RYKiwgY29uc3QgY2hhciosIHNpemVfdCk7CisKKy8qIG9idGFpbiBTSEEtMSBoYXNoIGZyb20gU0hBLTEgY29udGV4dCAqLworLyogcmV0dXJuczogMCA9IG5vIGNvbGxpc2lvbiBkZXRlY3RlZCwgb3RoZXJ3aXNlID0gY29sbGlzaW9uIGZvdW5kID0+IHdhcm4gdXNlciBmb3IgYWN0aXZlIGF0dGFjayAqLworaW50ICBTSEExRENGaW5hbCh1bnNpZ25lZCBjaGFyWzIwXSwgU0hBMV9DVFgqKTsKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworI2lmZGVmIFNIQTFEQ19DVVNUT01fVFJBSUxJTkdfSU5DTFVERV9TSEExX0gKKyNpbmNsdWRlIFNIQTFEQ19DVVNUT01fVFJBSUxJTkdfSU5DTFVERV9TSEExX0gKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NoYTFkYy91YmNfY2hlY2suYyBiL3NoYTFkYy91YmNfY2hlY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2JlZmYyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhMWRjL3ViY19jaGVjay5jCkBAIC0wLDAgKzEsMzcyIEBACisvKioqCisqIENvcHlyaWdodCAyMDE3IE1hcmMgU3RldmVucyA8bWFyY0BtYXJjLXN0ZXZlbnMubmw+LCBEYW4gU2h1bW93IDxkYW5zaHVAbWljcm9zb2Z0LmNvbT4KKyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBTb2Z0d2FyZSBMaWNlbnNlLgorKiBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRS50eHQgb3IgY29weSBhdAorKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAorKioqLworCisvKgorLy8gdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgdGhlICdwYXJzZV9iaXRyZWwnIHByb2dyYW0gaW4gdGhlIHRvb2xzIHNlY3Rpb24KKy8vIHVzaW5nIHRoZSBkYXRhIGZpbGVzIGZyb20gZGlyZWN0b3J5ICd0b29scy9kYXRhLzM1NjUnCisvLworLy8gc2hhMV9kdnMgY29udGFpbnMgYSBsaXN0IG9mIFNIQS0xIERpc3R1cmJhbmNlIFZlY3RvcnMgKERWKSB0byBjaGVjaworLy8gZHZUeXBlLCBkdksgYW5kIGR2QiBkZWZpbmUgdGhlIERWOiBJKEssQikgb3IgSUkoSyxCKSAoc2VlIHRoZSBwYXBlcikKKy8vIGRtWzgwXSBpcyB0aGUgZXhwYW5kZWQgbWVzc2FnZSBibG9jayBYT1ItZGlmZmVyZW5jZSBkZWZpbmVkIGJ5IHRoZSBEVgorLy8gdGVzdHQgaXMgdGhlIHN0ZXAgdG8gZG8gdGhlIHJlY29tcHJlc3Npb24gZnJvbSBmb3IgY29sbGlzaW9uIGRldGVjdGlvbgorLy8gbWFza2kgYW5kIG1hc2tiIGRlZmluZSB0aGUgYml0IHRvIGNoZWNrIGZvciBlYWNoIERWIGluIHRoZSBkdm1hc2sgcmV0dXJuZWQgYnkgdWJjX2NoZWNrCisvLworLy8gdWJjX2NoZWNrIHRha2VzIGFzIGlucHV0IGFuIGV4cGFuZGVkIG1lc3NhZ2UgYmxvY2sgYW5kIHZlcmlmaWVzIHRoZSB1bmF2b2lkYWJsZSBiaXRjb25kaXRpb25zIGZvciBhbGwgbGlzdGVkIERWcworLy8gaXQgcmV0dXJucyBhIGR2bWFzayB3aGVyZSBlYWNoIGJpdCBiZWxvbmdpbmcgdG8gYSBEViBpcyBzZXQgaWYgYWxsIHVuYXZvaWRhYmxlIGJpdGNvbmRpdGlvbnMgZm9yIHRoYXQgRFYgaGF2ZSBiZWVuIG1ldAorLy8gdGh1cyBvbmUgbmVlZHMgdG8gZG8gdGhlIHJlY29tcHJlc3Npb24gY2hlY2sgZm9yIGVhY2ggRFYgdGhhdCBoYXMgaXRzIGJpdCBzZXQKKy8vCisvLyB1YmNfY2hlY2sgaXMgcHJvZ3JhbW1hdGljYWxseSBnZW5lcmF0ZWQgYW5kIHRoZSB1bmF2b2lkYWJsZSBiaXRjb25kaXRpb25zIGhhdmUgYmVlbiBoYXJkY29kZWQKKy8vIGEgZGlyZWN0bHkgdmVyaWZpYWJsZSB2ZXJzaW9uIG5hbWVkIHViY19jaGVja192ZXJpZnkgY2FuIGJlIGZvdW5kIGluIHViY19jaGVja192ZXJpZnkuYworLy8gdWJjX2NoZWNrIGhhcyBiZWVuIHZlcmlmaWVkIGFnYWluc3QgdWJjX2NoZWNrX3ZlcmlmeSB1c2luZyB0aGUgJ3ViY19jaGVja190ZXN0JyBwcm9ncmFtIGluIHRoZSB0b29scyBzZWN0aW9uCisqLworCisjaWZuZGVmIFNIQTFEQ19OT19TVEFOREFSRF9JTkNMVURFUworI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWZkZWYgU0hBMURDX0NVU1RPTV9JTkNMVURFX1VCQ19DSEVDS19DCisjaW5jbHVkZSBTSEExRENfQ1VTVE9NX0lOQ0xVREVfVUJDX0NIRUNLX0MKKyNlbmRpZgorI2luY2x1ZGUgInViY19jaGVjay5oIgorCitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV80M18wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDA7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV80NF8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDE7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV80NV8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDI7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV80Nl8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDM7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV80Nl8yX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDQ7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV80N18wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDU7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV80N18yX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDY7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV80OF8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDc7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV80OF8yX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDg7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV80OV8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDk7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV80OV8yX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDEwOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNTBfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAxMTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JXzUwXzJfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMTI7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV81MV8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDEzOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNTFfMl9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAxNDsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JXzUyXzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMTU7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNDVfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAxNjsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV80Nl8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDE3Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzQ2XzJfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMTg7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNDdfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAxOTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV80OF8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDIwOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzQ5XzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMjE7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNDlfMl9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAyMjsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV81MF8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDIzOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzUwXzJfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMjQ7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNTFfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAyNTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV81MV8yX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDI2Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzUyXzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMjc7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNTNfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAyODsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV81NF8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDI5Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzU1XzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMzA7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNTZfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAzMTsKKworZHZfaW5mb190IHNoYTFfZHZzW10gPQoreworICB7MSw0MywwLDU4LDAsMCwgeyAweDA4MDAwMDAwLDB4OTgwMDAwMGMsMHhkODAwMDAxMCwweDA4MDAwMDEwLDB4YjgwMDAwMTAsMHg5ODAwMDAwMCwweDYwMDAwMDAwLDB4MDAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDE0LDB4MTAwMDAwMTAsMHhiODAwMDAxNCwweDI4MDAwMDAwLDB4MjAwMDAwMTAsMHg0ODAwMDAwMCwweDA4MDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4OTAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHhiMDAwMDAwOCwweDQwMDAwMDAwLDB4OTAwMDAwMDAsMHhmMDAwMDAxMCwweDkwMDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweDkwMDAwMDEwLDB4OTAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MjAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MCwweDQwMDAwMDAyLDB4ODAwMDAwMDQsMHg4MDAwMDA4MCwweDgwMDAwMDA2LDB4MDAwMDAwNDksMHgwMDAwMDEwMywweDgwMDAwMDA5LDB4ODAwMDAwMTIsMHg4MDAwMDIwMiwweDAwMDAwMDE4LDB4MDAwMDAxNjQsMHgwMDAwMDQwOCwweDgwMDAwMGU2LDB4ODAwMDAwNGMsMHgwMDAwMDgwMywweDgwMDAwMTYxLDB4ODAwMDA1OTkgfSB9CissIHsxLDQ0LDAsNTgsMCwxLCB7IDB4YjQwMDAwMDgsMHgwODAwMDAwMCwweDk4MDAwMDBjLDB4ZDgwMDAwMTAsMHgwODAwMDAxMCwweGI4MDAwMDEwLDB4OTgwMDAwMDAsMHg2MDAwMDAwMCwweDAwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxNCwweDEwMDAwMDEwLDB4YjgwMDAwMTQsMHgyODAwMDAwMCwweDIwMDAwMDEwLDB4NDgwMDAwMDAsMHgwODAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweDkwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4YjAwMDAwMDgsMHg0MDAwMDAwMCwweDkwMDAwMDAwLDB4ZjAwMDAwMTAsMHg5MDAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHg5MDAwMDAxMCwweDkwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDIwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDAsMHg0MDAwMDAwMiwweDgwMDAwMDA0LDB4ODAwMDAwODAsMHg4MDAwMDAwNiwweDAwMDAwMDQ5LDB4MDAwMDAxMDMsMHg4MDAwMDAwOSwweDgwMDAwMDEyLDB4ODAwMDAyMDIsMHgwMDAwMDAxOCwweDAwMDAwMTY0LDB4MDAwMDA0MDgsMHg4MDAwMDBlNiwweDgwMDAwMDRjLDB4MDAwMDA4MDMsMHg4MDAwMDE2MSB9IH0KKywgezEsNDUsMCw1OCwwLDIsIHsgMHhmNDAwMDAxNCwweGI0MDAwMDA4LDB4MDgwMDAwMDAsMHg5ODAwMDAwYywweGQ4MDAwMDEwLDB4MDgwMDAwMTAsMHhiODAwMDAxMCwweDk4MDAwMDAwLDB4NjAwMDAwMDAsMHgwMDAwMDAwOCwweGMwMDAwMDAwLDB4OTAwMDAwMTQsMHgxMDAwMDAxMCwweGI4MDAwMDE0LDB4MjgwMDAwMDAsMHgyMDAwMDAxMCwweDQ4MDAwMDAwLDB4MDgwMDAwMTgsMHg2MDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHg5MDAwMDAwOCwweGMwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweGIwMDAwMDA4LDB4NDAwMDAwMDAsMHg5MDAwMDAwMCwweGYwMDAwMDEwLDB4OTAwMDAwMTgsMHg2MDAwMDAwMCwweDkwMDAwMDEwLDB4OTAwMDAwMTAsMHg5MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgyMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQwLDB4NDAwMDAwMDIsMHg4MDAwMDAwNCwweDgwMDAwMDgwLDB4ODAwMDAwMDYsMHgwMDAwMDA0OSwweDAwMDAwMTAzLDB4ODAwMDAwMDksMHg4MDAwMDAxMiwweDgwMDAwMjAyLDB4MDAwMDAwMTgsMHgwMDAwMDE2NCwweDAwMDAwNDA4LDB4ODAwMDAwZTYsMHg4MDAwMDA0YywweDAwMDAwODAzIH0gfQorLCB7MSw0NiwwLDU4LDAsMywgeyAweDJjMDAwMDEwLDB4ZjQwMDAwMTQsMHhiNDAwMDAwOCwweDA4MDAwMDAwLDB4OTgwMDAwMGMsMHhkODAwMDAxMCwweDA4MDAwMDEwLDB4YjgwMDAwMTAsMHg5ODAwMDAwMCwweDYwMDAwMDAwLDB4MDAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDE0LDB4MTAwMDAwMTAsMHhiODAwMDAxNCwweDI4MDAwMDAwLDB4MjAwMDAwMTAsMHg0ODAwMDAwMCwweDA4MDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4OTAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHhiMDAwMDAwOCwweDQwMDAwMDAwLDB4OTAwMDAwMDAsMHhmMDAwMDAxMCwweDkwMDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweDkwMDAwMDEwLDB4OTAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MjAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MCwweDQwMDAwMDAyLDB4ODAwMDAwMDQsMHg4MDAwMDA4MCwweDgwMDAwMDA2LDB4MDAwMDAwNDksMHgwMDAwMDEwMywweDgwMDAwMDA5LDB4ODAwMDAwMTIsMHg4MDAwMDIwMiwweDAwMDAwMDE4LDB4MDAwMDAxNjQsMHgwMDAwMDQwOCwweDgwMDAwMGU2LDB4ODAwMDAwNGMgfSB9CissIHsxLDQ2LDIsNTgsMCw0LCB7IDB4YjAwMDAwNDAsMHhkMDAwMDA1MywweGQwMDAwMDIyLDB4MjAwMDAwMDAsMHg2MDAwMDAzMiwweDYwMDAwMDQzLDB4MjAwMDAwNDAsMHhlMDAwMDA0MiwweDYwMDAwMDAyLDB4ODAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAzLDB4NDAwMDAwNTIsMHg0MDAwMDA0MCwweGUwMDAwMDUyLDB4YTAwMDAwMDAsMHg4MDAwMDA0MCwweDIwMDAwMDAxLDB4MjAwMDAwNjAsMHg4MDAwMDAwMSwweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHg0MDAwMDAyMiwweDAwMDAwMDAzLDB4NDAwMDAwNDIsMHhjMDAwMDA0MywweGMwMDAwMDIyLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweGMwMDAwMDQzLDB4NDAwMDAwNjIsMHg4MDAwMDAwMSwweDQwMDAwMDQyLDB4NDAwMDAwNDIsMHg0MDAwMDAwMiwweDAwMDAwMDAyLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDgwMDAwMDAwLDB4ODAwMDAwMDIsMHg4MDAwMDA0MCwweDAwMDAwMDAwLDB4ODAwMDAwNDAsMHg4MDAwMDAwMCwweDAwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAyLDB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwNCwweDAwMDAwMDgwLDB4MDAwMDAwMDQsMHgwMDAwMDAwOSwweDAwMDAwMTAxLDB4MDAwMDAwMDksMHgwMDAwMDAxMiwweDAwMDAwMjAyLDB4MDAwMDAwMWEsMHgwMDAwMDEyNCwweDAwMDAwNDBjLDB4MDAwMDAwMjYsMHgwMDAwMDA0YSwweDAwMDAwODBhLDB4MDAwMDAwNjAsMHgwMDAwMDU5MCwweDAwMDAxMDIwLDB4MDAwMDAzOWEsMHgwMDAwMDEzMiB9IH0KKywgezEsNDcsMCw1OCwwLDUsIHsgMHhjODAwMDAxMCwweDJjMDAwMDEwLDB4ZjQwMDAwMTQsMHhiNDAwMDAwOCwweDA4MDAwMDAwLDB4OTgwMDAwMGMsMHhkODAwMDAxMCwweDA4MDAwMDEwLDB4YjgwMDAwMTAsMHg5ODAwMDAwMCwweDYwMDAwMDAwLDB4MDAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDE0LDB4MTAwMDAwMTAsMHhiODAwMDAxNCwweDI4MDAwMDAwLDB4MjAwMDAwMTAsMHg0ODAwMDAwMCwweDA4MDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4OTAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHhiMDAwMDAwOCwweDQwMDAwMDAwLDB4OTAwMDAwMDAsMHhmMDAwMDAxMCwweDkwMDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweDkwMDAwMDEwLDB4OTAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MjAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MCwweDQwMDAwMDAyLDB4ODAwMDAwMDQsMHg4MDAwMDA4MCwweDgwMDAwMDA2LDB4MDAwMDAwNDksMHgwMDAwMDEwMywweDgwMDAwMDA5LDB4ODAwMDAwMTIsMHg4MDAwMDIwMiwweDAwMDAwMDE4LDB4MDAwMDAxNjQsMHgwMDAwMDQwOCwweDgwMDAwMGU2IH0gfQorLCB7MSw0NywyLDU4LDAsNiwgeyAweDIwMDAwMDQzLDB4YjAwMDAwNDAsMHhkMDAwMDA1MywweGQwMDAwMDIyLDB4MjAwMDAwMDAsMHg2MDAwMDAzMiwweDYwMDAwMDQzLDB4MjAwMDAwNDAsMHhlMDAwMDA0MiwweDYwMDAwMDAyLDB4ODAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAzLDB4NDAwMDAwNTIsMHg0MDAwMDA0MCwweGUwMDAwMDUyLDB4YTAwMDAwMDAsMHg4MDAwMDA0MCwweDIwMDAwMDAxLDB4MjAwMDAwNjAsMHg4MDAwMDAwMSwweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHg0MDAwMDAyMiwweDAwMDAwMDAzLDB4NDAwMDAwNDIsMHhjMDAwMDA0MywweGMwMDAwMDIyLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweGMwMDAwMDQzLDB4NDAwMDAwNjIsMHg4MDAwMDAwMSwweDQwMDAwMDQyLDB4NDAwMDAwNDIsMHg0MDAwMDAwMiwweDAwMDAwMDAyLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDgwMDAwMDAwLDB4ODAwMDAwMDIsMHg4MDAwMDA0MCwweDAwMDAwMDAwLDB4ODAwMDAwNDAsMHg4MDAwMDAwMCwweDAwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAyLDB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwNCwweDAwMDAwMDgwLDB4MDAwMDAwMDQsMHgwMDAwMDAwOSwweDAwMDAwMTAxLDB4MDAwMDAwMDksMHgwMDAwMDAxMiwweDAwMDAwMjAyLDB4MDAwMDAwMWEsMHgwMDAwMDEyNCwweDAwMDAwNDBjLDB4MDAwMDAwMjYsMHgwMDAwMDA0YSwweDAwMDAwODBhLDB4MDAwMDAwNjAsMHgwMDAwMDU5MCwweDAwMDAxMDIwLDB4MDAwMDAzOWEgfSB9CissIHsxLDQ4LDAsNTgsMCw3LCB7IDB4YjgwMDAwMGEsMHhjODAwMDAxMCwweDJjMDAwMDEwLDB4ZjQwMDAwMTQsMHhiNDAwMDAwOCwweDA4MDAwMDAwLDB4OTgwMDAwMGMsMHhkODAwMDAxMCwweDA4MDAwMDEwLDB4YjgwMDAwMTAsMHg5ODAwMDAwMCwweDYwMDAwMDAwLDB4MDAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDE0LDB4MTAwMDAwMTAsMHhiODAwMDAxNCwweDI4MDAwMDAwLDB4MjAwMDAwMTAsMHg0ODAwMDAwMCwweDA4MDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4OTAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHhiMDAwMDAwOCwweDQwMDAwMDAwLDB4OTAwMDAwMDAsMHhmMDAwMDAxMCwweDkwMDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweDkwMDAwMDEwLDB4OTAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MjAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MCwweDQwMDAwMDAyLDB4ODAwMDAwMDQsMHg4MDAwMDA4MCwweDgwMDAwMDA2LDB4MDAwMDAwNDksMHgwMDAwMDEwMywweDgwMDAwMDA5LDB4ODAwMDAwMTIsMHg4MDAwMDIwMiwweDAwMDAwMDE4LDB4MDAwMDAxNjQsMHgwMDAwMDQwOCB9IH0KKywgezEsNDgsMiw1OCwwLDgsIHsgMHhlMDAwMDAyYSwweDIwMDAwMDQzLDB4YjAwMDAwNDAsMHhkMDAwMDA1MywweGQwMDAwMDIyLDB4MjAwMDAwMDAsMHg2MDAwMDAzMiwweDYwMDAwMDQzLDB4MjAwMDAwNDAsMHhlMDAwMDA0MiwweDYwMDAwMDAyLDB4ODAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAzLDB4NDAwMDAwNTIsMHg0MDAwMDA0MCwweGUwMDAwMDUyLDB4YTAwMDAwMDAsMHg4MDAwMDA0MCwweDIwMDAwMDAxLDB4MjAwMDAwNjAsMHg4MDAwMDAwMSwweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHg0MDAwMDAyMiwweDAwMDAwMDAzLDB4NDAwMDAwNDIsMHhjMDAwMDA0MywweGMwMDAwMDIyLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweGMwMDAwMDQzLDB4NDAwMDAwNjIsMHg4MDAwMDAwMSwweDQwMDAwMDQyLDB4NDAwMDAwNDIsMHg0MDAwMDAwMiwweDAwMDAwMDAyLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDgwMDAwMDAwLDB4ODAwMDAwMDIsMHg4MDAwMDA0MCwweDAwMDAwMDAwLDB4ODAwMDAwNDAsMHg4MDAwMDAwMCwweDAwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAyLDB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwNCwweDAwMDAwMDgwLDB4MDAwMDAwMDQsMHgwMDAwMDAwOSwweDAwMDAwMTAxLDB4MDAwMDAwMDksMHgwMDAwMDAxMiwweDAwMDAwMjAyLDB4MDAwMDAwMWEsMHgwMDAwMDEyNCwweDAwMDAwNDBjLDB4MDAwMDAwMjYsMHgwMDAwMDA0YSwweDAwMDAwODBhLDB4MDAwMDAwNjAsMHgwMDAwMDU5MCwweDAwMDAxMDIwIH0gfQorLCB7MSw0OSwwLDU4LDAsOSwgeyAweDE4MDAwMDAwLDB4YjgwMDAwMGEsMHhjODAwMDAxMCwweDJjMDAwMDEwLDB4ZjQwMDAwMTQsMHhiNDAwMDAwOCwweDA4MDAwMDAwLDB4OTgwMDAwMGMsMHhkODAwMDAxMCwweDA4MDAwMDEwLDB4YjgwMDAwMTAsMHg5ODAwMDAwMCwweDYwMDAwMDAwLDB4MDAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDE0LDB4MTAwMDAwMTAsMHhiODAwMDAxNCwweDI4MDAwMDAwLDB4MjAwMDAwMTAsMHg0ODAwMDAwMCwweDA4MDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4OTAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHhiMDAwMDAwOCwweDQwMDAwMDAwLDB4OTAwMDAwMDAsMHhmMDAwMDAxMCwweDkwMDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweDkwMDAwMDEwLDB4OTAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MjAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MCwweDQwMDAwMDAyLDB4ODAwMDAwMDQsMHg4MDAwMDA4MCwweDgwMDAwMDA2LDB4MDAwMDAwNDksMHgwMDAwMDEwMywweDgwMDAwMDA5LDB4ODAwMDAwMTIsMHg4MDAwMDIwMiwweDAwMDAwMDE4LDB4MDAwMDAxNjQgfSB9CissIHsxLDQ5LDIsNTgsMCwxMCwgeyAweDYwMDAwMDAwLDB4ZTAwMDAwMmEsMHgyMDAwMDA0MywweGIwMDAwMDQwLDB4ZDAwMDAwNTMsMHhkMDAwMDAyMiwweDIwMDAwMDAwLDB4NjAwMDAwMzIsMHg2MDAwMDA0MywweDIwMDAwMDQwLDB4ZTAwMDAwNDIsMHg2MDAwMDAwMiwweDgwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMywweDQwMDAwMDUyLDB4NDAwMDAwNDAsMHhlMDAwMDA1MiwweGEwMDAwMDAwLDB4ODAwMDAwNDAsMHgyMDAwMDAwMSwweDIwMDAwMDYwLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweGMwMDAwMDQzLDB4NDAwMDAwMjIsMHgwMDAwMDAwMywweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHhjMDAwMDAyMiwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHhjMDAwMDA0MywweDQwMDAwMDYyLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweDQwMDAwMDQyLDB4NDAwMDAwMDIsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4ODAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAyLDB4ODAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDQsMHgwMDAwMDA4MCwweDAwMDAwMDA0LDB4MDAwMDAwMDksMHgwMDAwMDEwMSwweDAwMDAwMDA5LDB4MDAwMDAwMTIsMHgwMDAwMDIwMiwweDAwMDAwMDFhLDB4MDAwMDAxMjQsMHgwMDAwMDQwYywweDAwMDAwMDI2LDB4MDAwMDAwNGEsMHgwMDAwMDgwYSwweDAwMDAwMDYwLDB4MDAwMDA1OTAgfSB9CissIHsxLDUwLDAsNjUsMCwxMSwgeyAweDA4MDAwMDBjLDB4MTgwMDAwMDAsMHhiODAwMDAwYSwweGM4MDAwMDEwLDB4MmMwMDAwMTAsMHhmNDAwMDAxNCwweGI0MDAwMDA4LDB4MDgwMDAwMDAsMHg5ODAwMDAwYywweGQ4MDAwMDEwLDB4MDgwMDAwMTAsMHhiODAwMDAxMCwweDk4MDAwMDAwLDB4NjAwMDAwMDAsMHgwMDAwMDAwOCwweGMwMDAwMDAwLDB4OTAwMDAwMTQsMHgxMDAwMDAxMCwweGI4MDAwMDE0LDB4MjgwMDAwMDAsMHgyMDAwMDAxMCwweDQ4MDAwMDAwLDB4MDgwMDAwMTgsMHg2MDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHg5MDAwMDAwOCwweGMwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweGIwMDAwMDA4LDB4NDAwMDAwMDAsMHg5MDAwMDAwMCwweGYwMDAwMDEwLDB4OTAwMDAwMTgsMHg2MDAwMDAwMCwweDkwMDAwMDEwLDB4OTAwMDAwMTAsMHg5MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgyMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQwLDB4NDAwMDAwMDIsMHg4MDAwMDAwNCwweDgwMDAwMDgwLDB4ODAwMDAwMDYsMHgwMDAwMDA0OSwweDAwMDAwMTAzLDB4ODAwMDAwMDksMHg4MDAwMDAxMiwweDgwMDAwMjAyLDB4MDAwMDAwMTggfSB9CissIHsxLDUwLDIsNjUsMCwxMiwgeyAweDIwMDAwMDMwLDB4NjAwMDAwMDAsMHhlMDAwMDAyYSwweDIwMDAwMDQzLDB4YjAwMDAwNDAsMHhkMDAwMDA1MywweGQwMDAwMDIyLDB4MjAwMDAwMDAsMHg2MDAwMDAzMiwweDYwMDAwMDQzLDB4MjAwMDAwNDAsMHhlMDAwMDA0MiwweDYwMDAwMDAyLDB4ODAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAzLDB4NDAwMDAwNTIsMHg0MDAwMDA0MCwweGUwMDAwMDUyLDB4YTAwMDAwMDAsMHg4MDAwMDA0MCwweDIwMDAwMDAxLDB4MjAwMDAwNjAsMHg4MDAwMDAwMSwweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHg0MDAwMDAyMiwweDAwMDAwMDAzLDB4NDAwMDAwNDIsMHhjMDAwMDA0MywweGMwMDAwMDIyLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweGMwMDAwMDQzLDB4NDAwMDAwNjIsMHg4MDAwMDAwMSwweDQwMDAwMDQyLDB4NDAwMDAwNDIsMHg0MDAwMDAwMiwweDAwMDAwMDAyLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDgwMDAwMDAwLDB4ODAwMDAwMDIsMHg4MDAwMDA0MCwweDAwMDAwMDAwLDB4ODAwMDAwNDAsMHg4MDAwMDAwMCwweDAwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAyLDB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwNCwweDAwMDAwMDgwLDB4MDAwMDAwMDQsMHgwMDAwMDAwOSwweDAwMDAwMTAxLDB4MDAwMDAwMDksMHgwMDAwMDAxMiwweDAwMDAwMjAyLDB4MDAwMDAwMWEsMHgwMDAwMDEyNCwweDAwMDAwNDBjLDB4MDAwMDAwMjYsMHgwMDAwMDA0YSwweDAwMDAwODBhLDB4MDAwMDAwNjAgfSB9CissIHsxLDUxLDAsNjUsMCwxMywgeyAweGU4MDAwMDAwLDB4MDgwMDAwMGMsMHgxODAwMDAwMCwweGI4MDAwMDBhLDB4YzgwMDAwMTAsMHgyYzAwMDAxMCwweGY0MDAwMDE0LDB4YjQwMDAwMDgsMHgwODAwMDAwMCwweDk4MDAwMDBjLDB4ZDgwMDAwMTAsMHgwODAwMDAxMCwweGI4MDAwMDEwLDB4OTgwMDAwMDAsMHg2MDAwMDAwMCwweDAwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxNCwweDEwMDAwMDEwLDB4YjgwMDAwMTQsMHgyODAwMDAwMCwweDIwMDAwMDEwLDB4NDgwMDAwMDAsMHgwODAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweDkwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4YjAwMDAwMDgsMHg0MDAwMDAwMCwweDkwMDAwMDAwLDB4ZjAwMDAwMTAsMHg5MDAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHg5MDAwMDAxMCwweDkwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDIwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDAsMHg0MDAwMDAwMiwweDgwMDAwMDA0LDB4ODAwMDAwODAsMHg4MDAwMDAwNiwweDAwMDAwMDQ5LDB4MDAwMDAxMDMsMHg4MDAwMDAwOSwweDgwMDAwMDEyLDB4ODAwMDAyMDIgfSB9CissIHsxLDUxLDIsNjUsMCwxNCwgeyAweGEwMDAwMDAzLDB4MjAwMDAwMzAsMHg2MDAwMDAwMCwweGUwMDAwMDJhLDB4MjAwMDAwNDMsMHhiMDAwMDA0MCwweGQwMDAwMDUzLDB4ZDAwMDAwMjIsMHgyMDAwMDAwMCwweDYwMDAwMDMyLDB4NjAwMDAwNDMsMHgyMDAwMDA0MCwweGUwMDAwMDQyLDB4NjAwMDAwMDIsMHg4MDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDMsMHg0MDAwMDA1MiwweDQwMDAwMDQwLDB4ZTAwMDAwNTIsMHhhMDAwMDAwMCwweDgwMDAwMDQwLDB4MjAwMDAwMDEsMHgyMDAwMDA2MCwweDgwMDAwMDAxLDB4NDAwMDAwNDIsMHhjMDAwMDA0MywweDQwMDAwMDIyLDB4MDAwMDAwMDMsMHg0MDAwMDA0MiwweGMwMDAwMDQzLDB4YzAwMDAwMjIsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4YzAwMDAwNDMsMHg0MDAwMDA2MiwweDgwMDAwMDAxLDB4NDAwMDAwNDIsMHg0MDAwMDA0MiwweDQwMDAwMDAyLDB4MDAwMDAwMDIsMHgwMDAwMDA0MCwweDgwMDAwMDAyLDB4ODAwMDAwMDAsMHg4MDAwMDAwMiwweDgwMDAwMDQwLDB4MDAwMDAwMDAsMHg4MDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMCwweDAwMDAwMDQwLDB4ODAwMDAwMDIsMHgwMDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA0LDB4MDAwMDAwODAsMHgwMDAwMDAwNCwweDAwMDAwMDA5LDB4MDAwMDAxMDEsMHgwMDAwMDAwOSwweDAwMDAwMDEyLDB4MDAwMDAyMDIsMHgwMDAwMDAxYSwweDAwMDAwMTI0LDB4MDAwMDA0MGMsMHgwMDAwMDAyNiwweDAwMDAwMDRhLDB4MDAwMDA4MGEgfSB9CissIHsxLDUyLDAsNjUsMCwxNSwgeyAweDA0MDAwMDEwLDB4ZTgwMDAwMDAsMHgwODAwMDAwYywweDE4MDAwMDAwLDB4YjgwMDAwMGEsMHhjODAwMDAxMCwweDJjMDAwMDEwLDB4ZjQwMDAwMTQsMHhiNDAwMDAwOCwweDA4MDAwMDAwLDB4OTgwMDAwMGMsMHhkODAwMDAxMCwweDA4MDAwMDEwLDB4YjgwMDAwMTAsMHg5ODAwMDAwMCwweDYwMDAwMDAwLDB4MDAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDE0LDB4MTAwMDAwMTAsMHhiODAwMDAxNCwweDI4MDAwMDAwLDB4MjAwMDAwMTAsMHg0ODAwMDAwMCwweDA4MDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4OTAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHhiMDAwMDAwOCwweDQwMDAwMDAwLDB4OTAwMDAwMDAsMHhmMDAwMDAxMCwweDkwMDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweDkwMDAwMDEwLDB4OTAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MjAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MCwweDQwMDAwMDAyLDB4ODAwMDAwMDQsMHg4MDAwMDA4MCwweDgwMDAwMDA2LDB4MDAwMDAwNDksMHgwMDAwMDEwMywweDgwMDAwMDA5LDB4ODAwMDAwMTIgfSB9CissIHsyLDQ1LDAsNTgsMCwxNiwgeyAweGVjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4MmMwMDAwMDQsMHhiYzAwMDAxOCwweGIwMDAwMDEwLDB4MDAwMDAwMGMsMHhiODAwMDAxMCwweDA4MDAwMDE4LDB4NzgwMDAwMTAsMHgwODAwMDAxNCwweDcwMDAwMDEwLDB4YjgwMDAwMWMsMHhlODAwMDAwMCwweGIwMDAwMDA0LDB4NTgwMDAwMTAsMHhiMDAwMDAwYywweDQ4MDAwMDAwLDB4YjAwMDAwMDAsMHhiODAwMDAxMCwweDk4MDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHg2MDAwMDAwMCwweDAwMDAwMDE4LDB4ZTAwMDAwMDAsMHg5MDAwMDAwMCwweDMwMDAwMDEwLDB4YjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgwMDAwMDAxMCwweDgwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDEsMHg0MDAwMDAyMiwweDgwMDAwMDA1LDB4YzAwMDAwODIsMHhjMDAwMDA0NiwweDQwMDAwMDRiLDB4ODAwMDAxMDcsMHgwMDAwMDA4OSwweDAwMDAwMDE0LDB4ODAwMDAyNGIsMHgwMDAwMDExYiwweDgwMDAwMTZkLDB4ODAwMDA0MWEsMHgwMDAwMDJlNCwweDgwMDAwMDU0LDB4MDAwMDA5NjcgfSB9CissIHsyLDQ2LDAsNTgsMCwxNywgeyAweDI0MDAwMDFjLDB4ZWMwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgyYzAwMDAwNCwweGJjMDAwMDE4LDB4YjAwMDAwMTAsMHgwMDAwMDAwYywweGI4MDAwMDEwLDB4MDgwMDAwMTgsMHg3ODAwMDAxMCwweDA4MDAwMDE0LDB4NzAwMDAwMTAsMHhiODAwMDAxYywweGU4MDAwMDAwLDB4YjAwMDAwMDQsMHg1ODAwMDAxMCwweGIwMDAwMDBjLDB4NDgwMDAwMDAsMHhiMDAwMDAwMCwweGI4MDAwMDEwLDB4OTgwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDYwMDAwMDAwLDB4MDAwMDAwMTgsMHhlMDAwMDAwMCwweDkwMDAwMDAwLDB4MzAwMDAwMTAsMHhiMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDAwMDAwMDEwLDB4ODAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MSwweDQwMDAwMDIyLDB4ODAwMDAwMDUsMHhjMDAwMDA4MiwweGMwMDAwMDQ2LDB4NDAwMDAwNGIsMHg4MDAwMDEwNywweDAwMDAwMDg5LDB4MDAwMDAwMTQsMHg4MDAwMDI0YiwweDAwMDAwMTFiLDB4ODAwMDAxNmQsMHg4MDAwMDQxYSwweDAwMDAwMmU0LDB4ODAwMDAwNTQgfSB9CissIHsyLDQ2LDIsNTgsMCwxOCwgeyAweDkwMDAwMDcwLDB4YjAwMDAwNTMsMHgzMDAwMDAwOCwweDAwMDAwMDQzLDB4ZDAwMDAwNzIsMHhiMDAwMDAxMCwweGYwMDAwMDYyLDB4YzAwMDAwNDIsMHgwMDAwMDAzMCwweGUwMDAwMDQyLDB4MjAwMDAwNjAsMHhlMDAwMDA0MSwweDIwMDAwMDUwLDB4YzAwMDAwNDEsMHhlMDAwMDA3MiwweGEwMDAwMDAzLDB4YzAwMDAwMTIsMHg2MDAwMDA0MSwweGMwMDAwMDMyLDB4MjAwMDAwMDEsMHhjMDAwMDAwMiwweGUwMDAwMDQyLDB4NjAwMDAwNDIsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAyLDB4MDAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAxLDB4MDAwMDAwNjAsMHg4MDAwMDAwMywweDQwMDAwMDAyLDB4YzAwMDAwNDAsMHhjMDAwMDAwMiwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMiwweDAwMDAwMDQwLDB4MDAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4MDAwMDAwMDAsMHg4MDAwMDA0MCwweDgwMDAwMDAyLDB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDQsMHgwMDAwMDA4MCwweDAwMDAwMDA0LDB4MDAwMDAwMDksMHgwMDAwMDEwNSwweDAwMDAwMDg5LDB4MDAwMDAwMTYsMHgwMDAwMDIwYiwweDAwMDAwMTFiLDB4MDAwMDAxMmQsMHgwMDAwMDQxZSwweDAwMDAwMjI0LDB4MDAwMDAwNTAsMHgwMDAwMDkyZSwweDAwMDAwNDZjLDB4MDAwMDA1YjYsMHgwMDAwMTA2YSwweDAwMDAwYjkwLDB4MDAwMDAxNTIgfSB9CissIHsyLDQ3LDAsNTgsMCwxOSwgeyAweDIwMDAwMDEwLDB4MjQwMDAwMWMsMHhlYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDJjMDAwMDA0LDB4YmMwMDAwMTgsMHhiMDAwMDAxMCwweDAwMDAwMDBjLDB4YjgwMDAwMTAsMHgwODAwMDAxOCwweDc4MDAwMDEwLDB4MDgwMDAwMTQsMHg3MDAwMDAxMCwweGI4MDAwMDFjLDB4ZTgwMDAwMDAsMHhiMDAwMDAwNCwweDU4MDAwMDEwLDB4YjAwMDAwMGMsMHg0ODAwMDAwMCwweGIwMDAwMDAwLDB4YjgwMDAwMTAsMHg5ODAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4NjAwMDAwMDAsMHgwMDAwMDAxOCwweGUwMDAwMDAwLDB4OTAwMDAwMDAsMHgzMDAwMDAxMCwweGIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MDAwMDAwMTAsMHg4MDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQxLDB4NDAwMDAwMjIsMHg4MDAwMDAwNSwweGMwMDAwMDgyLDB4YzAwMDAwNDYsMHg0MDAwMDA0YiwweDgwMDAwMTA3LDB4MDAwMDAwODksMHgwMDAwMDAxNCwweDgwMDAwMjRiLDB4MDAwMDAxMWIsMHg4MDAwMDE2ZCwweDgwMDAwNDFhLDB4MDAwMDAyZTQgfSB9CissIHsyLDQ4LDAsNTgsMCwyMCwgeyAweGJjMDAwMDFhLDB4MjAwMDAwMTAsMHgyNDAwMDAxYywweGVjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4MmMwMDAwMDQsMHhiYzAwMDAxOCwweGIwMDAwMDEwLDB4MDAwMDAwMGMsMHhiODAwMDAxMCwweDA4MDAwMDE4LDB4NzgwMDAwMTAsMHgwODAwMDAxNCwweDcwMDAwMDEwLDB4YjgwMDAwMWMsMHhlODAwMDAwMCwweGIwMDAwMDA0LDB4NTgwMDAwMTAsMHhiMDAwMDAwYywweDQ4MDAwMDAwLDB4YjAwMDAwMDAsMHhiODAwMDAxMCwweDk4MDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHg2MDAwMDAwMCwweDAwMDAwMDE4LDB4ZTAwMDAwMDAsMHg5MDAwMDAwMCwweDMwMDAwMDEwLDB4YjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgwMDAwMDAxMCwweDgwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDEsMHg0MDAwMDAyMiwweDgwMDAwMDA1LDB4YzAwMDAwODIsMHhjMDAwMDA0NiwweDQwMDAwMDRiLDB4ODAwMDAxMDcsMHgwMDAwMDA4OSwweDAwMDAwMDE0LDB4ODAwMDAyNGIsMHgwMDAwMDExYiwweDgwMDAwMTZkLDB4ODAwMDA0MWEgfSB9CissIHsyLDQ5LDAsNTgsMCwyMSwgeyAweDNjMDAwMDA0LDB4YmMwMDAwMWEsMHgyMDAwMDAxMCwweDI0MDAwMDFjLDB4ZWMwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgyYzAwMDAwNCwweGJjMDAwMDE4LDB4YjAwMDAwMTAsMHgwMDAwMDAwYywweGI4MDAwMDEwLDB4MDgwMDAwMTgsMHg3ODAwMDAxMCwweDA4MDAwMDE0LDB4NzAwMDAwMTAsMHhiODAwMDAxYywweGU4MDAwMDAwLDB4YjAwMDAwMDQsMHg1ODAwMDAxMCwweGIwMDAwMDBjLDB4NDgwMDAwMDAsMHhiMDAwMDAwMCwweGI4MDAwMDEwLDB4OTgwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDYwMDAwMDAwLDB4MDAwMDAwMTgsMHhlMDAwMDAwMCwweDkwMDAwMDAwLDB4MzAwMDAwMTAsMHhiMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDAwMDAwMDEwLDB4ODAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MSwweDQwMDAwMDIyLDB4ODAwMDAwMDUsMHhjMDAwMDA4MiwweGMwMDAwMDQ2LDB4NDAwMDAwNGIsMHg4MDAwMDEwNywweDAwMDAwMDg5LDB4MDAwMDAwMTQsMHg4MDAwMDI0YiwweDAwMDAwMTFiLDB4ODAwMDAxNmQgfSB9CissIHsyLDQ5LDIsNTgsMCwyMiwgeyAweGYwMDAwMDEwLDB4ZjAwMDAwNmEsMHg4MDAwMDA0MCwweDkwMDAwMDcwLDB4YjAwMDAwNTMsMHgzMDAwMDAwOCwweDAwMDAwMDQzLDB4ZDAwMDAwNzIsMHhiMDAwMDAxMCwweGYwMDAwMDYyLDB4YzAwMDAwNDIsMHgwMDAwMDAzMCwweGUwMDAwMDQyLDB4MjAwMDAwNjAsMHhlMDAwMDA0MSwweDIwMDAwMDUwLDB4YzAwMDAwNDEsMHhlMDAwMDA3MiwweGEwMDAwMDAzLDB4YzAwMDAwMTIsMHg2MDAwMDA0MSwweGMwMDAwMDMyLDB4MjAwMDAwMDEsMHhjMDAwMDAwMiwweGUwMDAwMDQyLDB4NjAwMDAwNDIsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAyLDB4MDAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAxLDB4MDAwMDAwNjAsMHg4MDAwMDAwMywweDQwMDAwMDAyLDB4YzAwMDAwNDAsMHhjMDAwMDAwMiwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMiwweDAwMDAwMDQwLDB4MDAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4MDAwMDAwMDAsMHg4MDAwMDA0MCwweDgwMDAwMDAyLDB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDQsMHgwMDAwMDA4MCwweDAwMDAwMDA0LDB4MDAwMDAwMDksMHgwMDAwMDEwNSwweDAwMDAwMDg5LDB4MDAwMDAwMTYsMHgwMDAwMDIwYiwweDAwMDAwMTFiLDB4MDAwMDAxMmQsMHgwMDAwMDQxZSwweDAwMDAwMjI0LDB4MDAwMDAwNTAsMHgwMDAwMDkyZSwweDAwMDAwNDZjLDB4MDAwMDA1YjYgfSB9CissIHsyLDUwLDAsNjUsMCwyMywgeyAweGI0MDAwMDFjLDB4M2MwMDAwMDQsMHhiYzAwMDAxYSwweDIwMDAwMDEwLDB4MjQwMDAwMWMsMHhlYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDJjMDAwMDA0LDB4YmMwMDAwMTgsMHhiMDAwMDAxMCwweDAwMDAwMDBjLDB4YjgwMDAwMTAsMHgwODAwMDAxOCwweDc4MDAwMDEwLDB4MDgwMDAwMTQsMHg3MDAwMDAxMCwweGI4MDAwMDFjLDB4ZTgwMDAwMDAsMHhiMDAwMDAwNCwweDU4MDAwMDEwLDB4YjAwMDAwMGMsMHg0ODAwMDAwMCwweGIwMDAwMDAwLDB4YjgwMDAwMTAsMHg5ODAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4NjAwMDAwMDAsMHgwMDAwMDAxOCwweGUwMDAwMDAwLDB4OTAwMDAwMDAsMHgzMDAwMDAxMCwweGIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MDAwMDAwMTAsMHg4MDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQxLDB4NDAwMDAwMjIsMHg4MDAwMDAwNSwweGMwMDAwMDgyLDB4YzAwMDAwNDYsMHg0MDAwMDA0YiwweDgwMDAwMTA3LDB4MDAwMDAwODksMHgwMDAwMDAxNCwweDgwMDAwMjRiLDB4MDAwMDAxMWIgfSB9CissIHsyLDUwLDIsNjUsMCwyNCwgeyAweGQwMDAwMDcyLDB4ZjAwMDAwMTAsMHhmMDAwMDA2YSwweDgwMDAwMDQwLDB4OTAwMDAwNzAsMHhiMDAwMDA1MywweDMwMDAwMDA4LDB4MDAwMDAwNDMsMHhkMDAwMDA3MiwweGIwMDAwMDEwLDB4ZjAwMDAwNjIsMHhjMDAwMDA0MiwweDAwMDAwMDMwLDB4ZTAwMDAwNDIsMHgyMDAwMDA2MCwweGUwMDAwMDQxLDB4MjAwMDAwNTAsMHhjMDAwMDA0MSwweGUwMDAwMDcyLDB4YTAwMDAwMDMsMHhjMDAwMDAxMiwweDYwMDAwMDQxLDB4YzAwMDAwMzIsMHgyMDAwMDAwMSwweGMwMDAwMDAyLDB4ZTAwMDAwNDIsMHg2MDAwMDA0MiwweDgwMDAwMDAyLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDIsMHgwMDAwMDA0MCwweDAwMDAwMDAwLDB4ODAwMDAwNDAsMHg4MDAwMDAwMCwweDAwMDAwMDQwLDB4ODAwMDAwMDEsMHgwMDAwMDA2MCwweDgwMDAwMDAzLDB4NDAwMDAwMDIsMHhjMDAwMDA0MCwweGMwMDAwMDAyLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAyLDB4MDAwMDAwNDAsMHgwMDAwMDAwMiwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAyLDB4MDAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDIsMHgwMDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwNCwweDAwMDAwMDgwLDB4MDAwMDAwMDQsMHgwMDAwMDAwOSwweDAwMDAwMTA1LDB4MDAwMDAwODksMHgwMDAwMDAxNiwweDAwMDAwMjBiLDB4MDAwMDAxMWIsMHgwMDAwMDEyZCwweDAwMDAwNDFlLDB4MDAwMDAyMjQsMHgwMDAwMDA1MCwweDAwMDAwOTJlLDB4MDAwMDA0NmMgfSB9CissIHsyLDUxLDAsNjUsMCwyNSwgeyAweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgzYzAwMDAwNCwweGJjMDAwMDFhLDB4MjAwMDAwMTAsMHgyNDAwMDAxYywweGVjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4MmMwMDAwMDQsMHhiYzAwMDAxOCwweGIwMDAwMDEwLDB4MDAwMDAwMGMsMHhiODAwMDAxMCwweDA4MDAwMDE4LDB4NzgwMDAwMTAsMHgwODAwMDAxNCwweDcwMDAwMDEwLDB4YjgwMDAwMWMsMHhlODAwMDAwMCwweGIwMDAwMDA0LDB4NTgwMDAwMTAsMHhiMDAwMDAwYywweDQ4MDAwMDAwLDB4YjAwMDAwMDAsMHhiODAwMDAxMCwweDk4MDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHg2MDAwMDAwMCwweDAwMDAwMDE4LDB4ZTAwMDAwMDAsMHg5MDAwMDAwMCwweDMwMDAwMDEwLDB4YjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgwMDAwMDAxMCwweDgwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDEsMHg0MDAwMDAyMiwweDgwMDAwMDA1LDB4YzAwMDAwODIsMHhjMDAwMDA0NiwweDQwMDAwMDRiLDB4ODAwMDAxMDcsMHgwMDAwMDA4OSwweDAwMDAwMDE0LDB4ODAwMDAyNGIgfSB9CissIHsyLDUxLDIsNjUsMCwyNiwgeyAweDAwMDAwMDQzLDB4ZDAwMDAwNzIsMHhmMDAwMDAxMCwweGYwMDAwMDZhLDB4ODAwMDAwNDAsMHg5MDAwMDA3MCwweGIwMDAwMDUzLDB4MzAwMDAwMDgsMHgwMDAwMDA0MywweGQwMDAwMDcyLDB4YjAwMDAwMTAsMHhmMDAwMDA2MiwweGMwMDAwMDQyLDB4MDAwMDAwMzAsMHhlMDAwMDA0MiwweDIwMDAwMDYwLDB4ZTAwMDAwNDEsMHgyMDAwMDA1MCwweGMwMDAwMDQxLDB4ZTAwMDAwNzIsMHhhMDAwMDAwMywweGMwMDAwMDEyLDB4NjAwMDAwNDEsMHhjMDAwMDAzMiwweDIwMDAwMDAxLDB4YzAwMDAwMDIsMHhlMDAwMDA0MiwweDYwMDAwMDQyLDB4ODAwMDAwMDIsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4MDAwMDAwMDAsMHg4MDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMSwweDAwMDAwMDYwLDB4ODAwMDAwMDMsMHg0MDAwMDAwMiwweGMwMDAwMDQwLDB4YzAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDIsMHgwMDAwMDA0MCwweDAwMDAwMDAyLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDIsMHgwMDAwMDA0MCwweDAwMDAwMDAwLDB4ODAwMDAwNDAsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA0LDB4MDAwMDAwODAsMHgwMDAwMDAwNCwweDAwMDAwMDA5LDB4MDAwMDAxMDUsMHgwMDAwMDA4OSwweDAwMDAwMDE2LDB4MDAwMDAyMGIsMHgwMDAwMDExYiwweDAwMDAwMTJkLDB4MDAwMDA0MWUsMHgwMDAwMDIyNCwweDAwMDAwMDUwLDB4MDAwMDA5MmUgfSB9CissIHsyLDUyLDAsNjUsMCwyNywgeyAweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDNjMDAwMDA0LDB4YmMwMDAwMWEsMHgyMDAwMDAxMCwweDI0MDAwMDFjLDB4ZWMwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgyYzAwMDAwNCwweGJjMDAwMDE4LDB4YjAwMDAwMTAsMHgwMDAwMDAwYywweGI4MDAwMDEwLDB4MDgwMDAwMTgsMHg3ODAwMDAxMCwweDA4MDAwMDE0LDB4NzAwMDAwMTAsMHhiODAwMDAxYywweGU4MDAwMDAwLDB4YjAwMDAwMDQsMHg1ODAwMDAxMCwweGIwMDAwMDBjLDB4NDgwMDAwMDAsMHhiMDAwMDAwMCwweGI4MDAwMDEwLDB4OTgwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDYwMDAwMDAwLDB4MDAwMDAwMTgsMHhlMDAwMDAwMCwweDkwMDAwMDAwLDB4MzAwMDAwMTAsMHhiMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDAwMDAwMDEwLDB4ODAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MSwweDQwMDAwMDIyLDB4ODAwMDAwMDUsMHhjMDAwMDA4MiwweGMwMDAwMDQ2LDB4NDAwMDAwNGIsMHg4MDAwMDEwNywweDAwMDAwMDg5LDB4MDAwMDAwMTQgfSB9CissIHsyLDUzLDAsNjUsMCwyOCwgeyAweGNjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4M2MwMDAwMDQsMHhiYzAwMDAxYSwweDIwMDAwMDEwLDB4MjQwMDAwMWMsMHhlYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDJjMDAwMDA0LDB4YmMwMDAwMTgsMHhiMDAwMDAxMCwweDAwMDAwMDBjLDB4YjgwMDAwMTAsMHgwODAwMDAxOCwweDc4MDAwMDEwLDB4MDgwMDAwMTQsMHg3MDAwMDAxMCwweGI4MDAwMDFjLDB4ZTgwMDAwMDAsMHhiMDAwMDAwNCwweDU4MDAwMDEwLDB4YjAwMDAwMGMsMHg0ODAwMDAwMCwweGIwMDAwMDAwLDB4YjgwMDAwMTAsMHg5ODAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4NjAwMDAwMDAsMHgwMDAwMDAxOCwweGUwMDAwMDAwLDB4OTAwMDAwMDAsMHgzMDAwMDAxMCwweGIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MDAwMDAwMTAsMHg4MDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQxLDB4NDAwMDAwMjIsMHg4MDAwMDAwNSwweGMwMDAwMDgyLDB4YzAwMDAwNDYsMHg0MDAwMDA0YiwweDgwMDAwMTA3LDB4MDAwMDAwODkgfSB9CissIHsyLDU0LDAsNjUsMCwyOSwgeyAweDA0MDAwMDFjLDB4Y2MwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgzYzAwMDAwNCwweGJjMDAwMDFhLDB4MjAwMDAwMTAsMHgyNDAwMDAxYywweGVjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4MmMwMDAwMDQsMHhiYzAwMDAxOCwweGIwMDAwMDEwLDB4MDAwMDAwMGMsMHhiODAwMDAxMCwweDA4MDAwMDE4LDB4NzgwMDAwMTAsMHgwODAwMDAxNCwweDcwMDAwMDEwLDB4YjgwMDAwMWMsMHhlODAwMDAwMCwweGIwMDAwMDA0LDB4NTgwMDAwMTAsMHhiMDAwMDAwYywweDQ4MDAwMDAwLDB4YjAwMDAwMDAsMHhiODAwMDAxMCwweDk4MDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHg2MDAwMDAwMCwweDAwMDAwMDE4LDB4ZTAwMDAwMDAsMHg5MDAwMDAwMCwweDMwMDAwMDEwLDB4YjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgwMDAwMDAxMCwweDgwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDEsMHg0MDAwMDAyMiwweDgwMDAwMDA1LDB4YzAwMDAwODIsMHhjMDAwMDA0NiwweDQwMDAwMDRiLDB4ODAwMDAxMDcgfSB9CissIHsyLDU1LDAsNjUsMCwzMCwgeyAweDAwMDAwMDEwLDB4MDQwMDAwMWMsMHhjYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDNjMDAwMDA0LDB4YmMwMDAwMWEsMHgyMDAwMDAxMCwweDI0MDAwMDFjLDB4ZWMwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgyYzAwMDAwNCwweGJjMDAwMDE4LDB4YjAwMDAwMTAsMHgwMDAwMDAwYywweGI4MDAwMDEwLDB4MDgwMDAwMTgsMHg3ODAwMDAxMCwweDA4MDAwMDE0LDB4NzAwMDAwMTAsMHhiODAwMDAxYywweGU4MDAwMDAwLDB4YjAwMDAwMDQsMHg1ODAwMDAxMCwweGIwMDAwMDBjLDB4NDgwMDAwMDAsMHhiMDAwMDAwMCwweGI4MDAwMDEwLDB4OTgwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDYwMDAwMDAwLDB4MDAwMDAwMTgsMHhlMDAwMDAwMCwweDkwMDAwMDAwLDB4MzAwMDAwMTAsMHhiMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDAwMDAwMDEwLDB4ODAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MSwweDQwMDAwMDIyLDB4ODAwMDAwMDUsMHhjMDAwMDA4MiwweGMwMDAwMDQ2LDB4NDAwMDAwNGIgfSB9CissIHsyLDU2LDAsNjUsMCwzMSwgeyAweDI2MDAwMDFhLDB4MDAwMDAwMTAsMHgwNDAwMDAxYywweGNjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4M2MwMDAwMDQsMHhiYzAwMDAxYSwweDIwMDAwMDEwLDB4MjQwMDAwMWMsMHhlYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDJjMDAwMDA0LDB4YmMwMDAwMTgsMHhiMDAwMDAxMCwweDAwMDAwMDBjLDB4YjgwMDAwMTAsMHgwODAwMDAxOCwweDc4MDAwMDEwLDB4MDgwMDAwMTQsMHg3MDAwMDAxMCwweGI4MDAwMDFjLDB4ZTgwMDAwMDAsMHhiMDAwMDAwNCwweDU4MDAwMDEwLDB4YjAwMDAwMGMsMHg0ODAwMDAwMCwweGIwMDAwMDAwLDB4YjgwMDAwMTAsMHg5ODAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4NjAwMDAwMDAsMHgwMDAwMDAxOCwweGUwMDAwMDAwLDB4OTAwMDAwMDAsMHgzMDAwMDAxMCwweGIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MDAwMDAwMTAsMHg4MDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQxLDB4NDAwMDAwMjIsMHg4MDAwMDAwNSwweGMwMDAwMDgyLDB4YzAwMDAwNDYgfSB9CissIHswLDAsMCwwLDAsMCwgezAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMH19Cit9Owordm9pZCB1YmNfY2hlY2soY29uc3QgdWludDMyX3QgV1s4MF0sIHVpbnQzMl90IGR2bWFza1sxXSkKK3sKKwl1aW50MzJfdCBtYXNrID0gfigodWludDMyX3QpKDApKTsKKwltYXNrICY9ICgoKCgoV1s0NF1eV1s0NV0pPj4yOSkmMSktMSkgfCB+KERWX0lfNDhfMF9iaXR8RFZfSV81MV8wX2JpdHxEVl9JXzUyXzBfYml0fERWX0lJXzQ1XzBfYml0fERWX0lJXzQ2XzBfYml0fERWX0lJXzUwXzBfYml0fERWX0lJXzUxXzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDldXldbNTBdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQ2XzBfYml0fERWX0lJXzQ1XzBfYml0fERWX0lJXzUwXzBfYml0fERWX0lJXzUxXzBfYml0fERWX0lJXzU1XzBfYml0fERWX0lJXzU2XzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDhdXldbNDldKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQ1XzBfYml0fERWX0lfNTJfMF9iaXR8RFZfSUlfNDlfMF9iaXR8RFZfSUlfNTBfMF9iaXR8RFZfSUlfNTRfMF9iaXR8RFZfSUlfNTVfMF9iaXQpKTsKKwltYXNrICY9ICgoKChXWzQ3XV4oV1s1MF0+PjI1KSkmKDE8PDQpKS0oMTw8NCkpIHwgfihEVl9JXzQ3XzBfYml0fERWX0lfNDlfMF9iaXR8RFZfSV81MV8wX2JpdHxEVl9JSV80NV8wX2JpdHxEVl9JSV81MV8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQ3XV5XWzQ4XSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80NF8wX2JpdHxEVl9JXzUxXzBfYml0fERWX0lJXzQ4XzBfYml0fERWX0lJXzQ5XzBfYml0fERWX0lJXzUzXzBfYml0fERWX0lJXzU0XzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDZdPj40KV4oV1s0OV0+PjI5KSkmMSktMSkgfCB+KERWX0lfNDZfMF9iaXR8RFZfSV80OF8wX2JpdHxEVl9JXzUwXzBfYml0fERWX0lfNTJfMF9iaXR8RFZfSUlfNTBfMF9iaXR8RFZfSUlfNTVfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0Nl1eV1s0N10pPj4yOSkmMSktMSkgfCB+KERWX0lfNDNfMF9iaXR8RFZfSV81MF8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV81Ml8wX2JpdHxEVl9JSV81M18wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQ1XT4+NCleKFdbNDhdPj4yOSkpJjEpLTEpIHwgfihEVl9JXzQ1XzBfYml0fERWX0lfNDdfMF9iaXR8RFZfSV80OV8wX2JpdHxEVl9JXzUxXzBfYml0fERWX0lJXzQ5XzBfYml0fERWX0lJXzU0XzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDVdXldbNDZdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQ5XzBfYml0fERWX0lfNTJfMF9iaXR8RFZfSUlfNDZfMF9iaXR8RFZfSUlfNDdfMF9iaXR8RFZfSUlfNTFfMF9iaXR8RFZfSUlfNTJfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0NF0+PjQpXihXWzQ3XT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80NF8wX2JpdHxEVl9JXzQ2XzBfYml0fERWX0lfNDhfMF9iaXR8RFZfSV81MF8wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV81M18wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQzXT4+NCleKFdbNDZdPj4yOSkpJjEpLTEpIHwgfihEVl9JXzQzXzBfYml0fERWX0lfNDVfMF9iaXR8RFZfSV80N18wX2JpdHxEVl9JXzQ5XzBfYml0fERWX0lJXzQ3XzBfYml0fERWX0lJXzUyXzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDNdXldbNDRdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQ3XzBfYml0fERWX0lfNTBfMF9iaXR8RFZfSV81MV8wX2JpdHxEVl9JSV80NV8wX2JpdHxEVl9JSV80OV8wX2JpdHxEVl9JSV81MF8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQyXT4+NCleKFdbNDVdPj4yOSkpJjEpLTEpIHwgfihEVl9JXzQ0XzBfYml0fERWX0lfNDZfMF9iaXR8RFZfSV80OF8wX2JpdHxEVl9JXzUyXzBfYml0fERWX0lJXzQ2XzBfYml0fERWX0lJXzUxXzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDFdPj40KV4oV1s0NF0+PjI5KSkmMSktMSkgfCB+KERWX0lfNDNfMF9iaXR8RFZfSV80NV8wX2JpdHxEVl9JXzQ3XzBfYml0fERWX0lfNTFfMF9iaXR8RFZfSUlfNDVfMF9iaXR8RFZfSUlfNTBfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0MF1eV1s0MV0pPj4yOSkmMSktMSkgfCB+KERWX0lfNDRfMF9iaXR8RFZfSV80N18wX2JpdHxEVl9JXzQ4XzBfYml0fERWX0lJXzQ2XzBfYml0fERWX0lJXzQ3XzBfYml0fERWX0lJXzU2XzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNTRdXldbNTVdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzUxXzBfYml0fERWX0lJXzQ3XzBfYml0fERWX0lJXzUwXzBfYml0fERWX0lJXzU1XzBfYml0fERWX0lJXzU2XzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNTNdXldbNTRdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzUwXzBfYml0fERWX0lJXzQ2XzBfYml0fERWX0lJXzQ5XzBfYml0fERWX0lJXzU0XzBfYml0fERWX0lJXzU1XzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNTJdXldbNTNdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQ5XzBfYml0fERWX0lJXzQ1XzBfYml0fERWX0lJXzQ4XzBfYml0fERWX0lJXzUzXzBfYml0fERWX0lJXzU0XzBfYml0KSk7CisJbWFzayAmPSAoKCgoV1s1MF1eKFdbNTNdPj4yNSkpJigxPDw0KSktKDE8PDQpKSB8IH4oRFZfSV81MF8wX2JpdHxEVl9JXzUyXzBfYml0fERWX0lJXzQ2XzBfYml0fERWX0lJXzQ4XzBfYml0fERWX0lJXzU0XzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNTBdXldbNTFdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQ3XzBfYml0fERWX0lJXzQ2XzBfYml0fERWX0lJXzUxXzBfYml0fERWX0lJXzUyXzBfYml0fERWX0lJXzU2XzBfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0OV1eKFdbNTJdPj4yNSkpJigxPDw0KSktKDE8PDQpKSB8IH4oRFZfSV80OV8wX2JpdHxEVl9JXzUxXzBfYml0fERWX0lJXzQ1XzBfYml0fERWX0lJXzQ3XzBfYml0fERWX0lJXzUzXzBfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0OF1eKFdbNTFdPj4yNSkpJigxPDw0KSktKDE8PDQpKSB8IH4oRFZfSV80OF8wX2JpdHxEVl9JXzUwXzBfYml0fERWX0lfNTJfMF9iaXR8RFZfSUlfNDZfMF9iaXR8RFZfSUlfNTJfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0Ml1eV1s0M10pPj4yOSkmMSktMSkgfCB+KERWX0lfNDZfMF9iaXR8RFZfSV80OV8wX2JpdHxEVl9JXzUwXzBfYml0fERWX0lJXzQ4XzBfYml0fERWX0lJXzQ5XzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDFdXldbNDJdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQ1XzBfYml0fERWX0lfNDhfMF9iaXR8RFZfSV80OV8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV80OF8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQwXT4+NCleKFdbNDNdPj4yOSkpJjEpLTEpIHwgfihEVl9JXzQ0XzBfYml0fERWX0lfNDZfMF9iaXR8RFZfSV81MF8wX2JpdHxEVl9JSV80OV8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzM5XT4+NCleKFdbNDJdPj4yOSkpJjEpLTEpIHwgfihEVl9JXzQzXzBfYml0fERWX0lfNDVfMF9iaXR8RFZfSV80OV8wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV81NV8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDRfMF9iaXR8RFZfSV80OF8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV81NF8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKChXWzM4XT4+NCleKFdbNDFdPj4yOSkpJjEpLTEpIHwgfihEVl9JXzQ0XzBfYml0fERWX0lfNDhfMF9iaXR8RFZfSUlfNDdfMF9iaXR8RFZfSUlfNTRfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1szN10+PjQpXihXWzQwXT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80M18wX2JpdHxEVl9JXzQ3XzBfYml0fERWX0lJXzQ2XzBfYml0fERWX0lJXzUzXzBfYml0fERWX0lJXzU1XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV81Ml8wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV81MV8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKChXWzU1XV5XWzU2XSk+PjI5KSYxKS0xKSB8IH4oRFZfSV81Ml8wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV81MV8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNTJfMF9iaXR8RFZfSUlfNDhfMF9iaXR8RFZfSUlfNTBfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKQorCQltYXNrICY9ICgoKChXWzUyXV4oV1s1NV0+PjI1KSkmKDE8PDQpKS0oMTw8NCkpIHwgfihEVl9JXzUyXzBfYml0fERWX0lJXzQ4XzBfYml0fERWX0lJXzUwXzBfYml0fERWX0lJXzU2XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV81MV8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV80OV8wX2JpdHxEVl9JSV81NV8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKFdbNTFdXihXWzU0XT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lfNTFfMF9iaXR8RFZfSUlfNDdfMF9iaXR8RFZfSUlfNDlfMF9iaXR8RFZfSUlfNTVfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ4XzBfYml0fERWX0lJXzQ3XzBfYml0fERWX0lJXzUyXzBfYml0fERWX0lJXzUzXzBfYml0KSkKKwkJbWFzayAmPSAoKCgoKFdbNTFdXldbNTJdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQ4XzBfYml0fERWX0lJXzQ3XzBfYml0fERWX0lJXzUyXzBfYml0fERWX0lJXzUzXzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80Nl8wX2JpdHxEVl9JXzQ5XzBfYml0fERWX0lJXzQ1XzBfYml0fERWX0lJXzQ4XzBfYml0KSkKKwkJbWFzayAmPSAoKCgoKFdbMzZdPj40KV4oV1s0MF0+PjI5KSkmMSktMSkgfCB+KERWX0lfNDZfMF9iaXR8RFZfSV80OV8wX2JpdHxEVl9JSV80NV8wX2JpdHxEVl9JSV80OF8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNTJfMF9iaXR8RFZfSUlfNDhfMF9iaXR8RFZfSUlfNDlfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKChXWzUzXV5XWzU2XSk+PjI5KSYxKSkgfCB+KERWX0lfNTJfMF9iaXR8RFZfSUlfNDhfMF9iaXR8RFZfSUlfNDlfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzUwXzBfYml0fERWX0lJXzQ2XzBfYml0fERWX0lJXzQ3XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKCgoV1s1MV1eV1s1NF0pPj4yOSkmMSkpIHwgfihEVl9JXzUwXzBfYml0fERWX0lJXzQ2XzBfYml0fERWX0lJXzQ3XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80OV8wX2JpdHxEVl9JXzUxXzBfYml0fERWX0lJXzQ1XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKCgoV1s1MF1eV1s1Ml0pPj4yOSkmMSkpIHwgfihEVl9JXzQ5XzBfYml0fERWX0lfNTFfMF9iaXR8RFZfSUlfNDVfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ4XzBfYml0fERWX0lfNTBfMF9iaXR8RFZfSV81Ml8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNDldXldbNTFdKT4+MjkpJjEpKSB8IH4oRFZfSV80OF8wX2JpdHxEVl9JXzUwXzBfYml0fERWX0lfNTJfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ3XzBfYml0fERWX0lfNDlfMF9iaXR8RFZfSV81MV8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNDhdXldbNTBdKT4+MjkpJjEpKSB8IH4oRFZfSV80N18wX2JpdHxEVl9JXzQ5XzBfYml0fERWX0lfNTFfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ2XzBfYml0fERWX0lfNDhfMF9iaXR8RFZfSV81MF8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNDddXldbNDldKT4+MjkpJjEpKSB8IH4oRFZfSV80Nl8wX2JpdHxEVl9JXzQ4XzBfYml0fERWX0lfNTBfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ1XzBfYml0fERWX0lfNDdfMF9iaXR8RFZfSV80OV8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNDZdXldbNDhdKT4+MjkpJjEpKSB8IH4oRFZfSV80NV8wX2JpdHxEVl9JXzQ3XzBfYml0fERWX0lfNDlfMF9iaXQpKTsKKwltYXNrICY9ICgoKChXWzQ1XV5XWzQ3XSkmKDE8PDYpKS0oMTw8NikpIHwgfihEVl9JXzQ3XzJfYml0fERWX0lfNDlfMl9iaXR8RFZfSV81MV8yX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDRfMF9iaXR8RFZfSV80Nl8wX2JpdHxEVl9JXzQ4XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKCgoV1s0NV1eV1s0N10pPj4yOSkmMSkpIHwgfihEVl9JXzQ0XzBfYml0fERWX0lfNDZfMF9iaXR8RFZfSV80OF8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQ0XV5XWzQ2XSk+PjYpJjEpLTEpIHwgfihEVl9JXzQ2XzJfYml0fERWX0lfNDhfMl9iaXR8RFZfSV81MF8yX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDNfMF9iaXR8RFZfSV80NV8wX2JpdHxEVl9JXzQ3XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKCgoV1s0NF1eV1s0Nl0pPj4yOSkmMSkpIHwgfihEVl9JXzQzXzBfYml0fERWX0lfNDVfMF9iaXR8RFZfSV80N18wX2JpdCkpOworCW1hc2sgJj0gKCgwLSgoV1s0MV1eKFdbNDJdPj41KSkmKDE8PDEpKSkgfCB+KERWX0lfNDhfMl9iaXR8RFZfSUlfNDZfMl9iaXR8RFZfSUlfNTFfMl9iaXQpKTsKKwltYXNrICY9ICgoMC0oKFdbNDBdXihXWzQxXT4+NSkpJigxPDwxKSkpIHwgfihEVl9JXzQ3XzJfYml0fERWX0lfNTFfMl9iaXR8RFZfSUlfNTBfMl9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ0XzBfYml0fERWX0lfNDZfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKChXWzQwXV5XWzQyXSk+PjQpJjEpKSB8IH4oRFZfSV80NF8wX2JpdHxEVl9JXzQ2XzBfYml0fERWX0lJXzU2XzBfYml0KSk7CisJbWFzayAmPSAoKDAtKChXWzM5XV4oV1s0MF0+PjUpKSYoMTw8MSkpKSB8IH4oRFZfSV80Nl8yX2JpdHxEVl9JXzUwXzJfYml0fERWX0lJXzQ5XzJfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80M18wX2JpdHxEVl9JXzQ1XzBfYml0fERWX0lJXzU1XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKCgoV1szOV1eV1s0MV0pPj40KSYxKSkgfCB+KERWX0lfNDNfMF9iaXR8RFZfSV80NV8wX2JpdHxEVl9JSV81NV8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDRfMF9iaXR8RFZfSUlfNTRfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKChXWzM4XV5XWzQwXSk+PjQpJjEpKSB8IH4oRFZfSV80NF8wX2JpdHxEVl9JSV81NF8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDNfMF9iaXR8RFZfSUlfNTNfMF9iaXR8RFZfSUlfNTVfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKChXWzM3XV5XWzM5XSk+PjQpJjEpKSB8IH4oRFZfSV80M18wX2JpdHxEVl9JSV81M18wX2JpdHxEVl9JSV81NV8wX2JpdCkpOworCW1hc2sgJj0gKCgwLSgoV1szNl1eKFdbMzddPj41KSkmKDE8PDEpKSkgfCB+KERWX0lfNDdfMl9iaXR8RFZfSV81MF8yX2JpdHxEVl9JSV80Nl8yX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDVfMF9iaXR8RFZfSV80OF8wX2JpdHxEVl9JSV80N18wX2JpdCkpCisJCW1hc2sgJj0gKCgoKChXWzM1XT4+NCleKFdbMzldPj4yOSkpJjEpLTEpIHwgfihEVl9JXzQ1XzBfYml0fERWX0lfNDhfMF9iaXR8RFZfSUlfNDdfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ4XzBfYml0fERWX0lJXzQ4XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKChXWzYzXV4oV1s2NF0+PjUpKSYoMTw8MCkpKSB8IH4oRFZfSV80OF8wX2JpdHxEVl9JSV80OF8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDVfMF9iaXR8RFZfSUlfNDVfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKFdbNjNdXihXWzY0XT4+NSkpJigxPDwxKSkpIHwgfihEVl9JXzQ1XzBfYml0fERWX0lJXzQ1XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80N18wX2JpdHxEVl9JSV80N18wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoV1s2Ml1eKFdbNjNdPj41KSkmKDE8PDApKSkgfCB+KERWX0lfNDdfMF9iaXR8RFZfSUlfNDdfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ2XzBfYml0fERWX0lJXzQ2XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKChXWzYxXV4oV1s2Ml0+PjUpKSYoMTw8MCkpKSB8IH4oRFZfSV80Nl8wX2JpdHxEVl9JSV80Nl8wX2JpdCkpOworCW1hc2sgJj0gKCgwLSgoV1s2MV1eKFdbNjJdPj41KSkmKDE8PDIpKSkgfCB+KERWX0lfNDZfMl9iaXR8RFZfSUlfNDZfMl9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ1XzBfYml0fERWX0lJXzQ1XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKChXWzYwXV4oV1s2MV0+PjUpKSYoMTw8MCkpKSB8IH4oRFZfSV80NV8wX2JpdHxEVl9JSV80NV8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lJXzUxXzBfYml0fERWX0lJXzU0XzBfYml0KSkKKwkJbWFzayAmPSAoKCgoKFdbNThdXldbNTldKT4+MjkpJjEpLTEpIHwgfihEVl9JSV81MV8wX2JpdHxEVl9JSV81NF8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lJXzUwXzBfYml0fERWX0lJXzUzXzBfYml0KSkKKwkJbWFzayAmPSAoKCgoKFdbNTddXldbNThdKT4+MjkpJjEpLTEpIHwgfihEVl9JSV81MF8wX2JpdHxEVl9JSV81M18wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lJXzUyXzBfYml0fERWX0lJXzU0XzBfYml0KSkKKwkJbWFzayAmPSAoKCgoV1s1Nl1eKFdbNTldPj4yNSkpJigxPDw0KSktKDE8PDQpKSB8IH4oRFZfSUlfNTJfMF9iaXR8RFZfSUlfNTRfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JSV81MV8wX2JpdHxEVl9JSV81Ml8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNTZdXldbNTldKT4+MjkpJjEpKSB8IH4oRFZfSUlfNTFfMF9iaXR8RFZfSUlfNTJfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JSV80OV8wX2JpdHxEVl9JSV81Ml8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKChXWzU2XV5XWzU3XSk+PjI5KSYxKS0xKSB8IH4oRFZfSUlfNDlfMF9iaXR8RFZfSUlfNTJfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JSV81MV8wX2JpdHxEVl9JSV81M18wX2JpdCkpCisJCW1hc2sgJj0gKCgoKFdbNTVdXihXWzU4XT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lJXzUxXzBfYml0fERWX0lJXzUzXzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSUlfNTBfMF9iaXR8RFZfSUlfNTJfMF9iaXQpKQorCQltYXNrICY9ICgoKChXWzU0XV4oV1s1N10+PjI1KSkmKDE8PDQpKS0oMTw8NCkpIHwgfihEVl9JSV81MF8wX2JpdHxEVl9JSV81Ml8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lJXzQ5XzBfYml0fERWX0lJXzUxXzBfYml0KSkKKwkJbWFzayAmPSAoKCgoV1s1M11eKFdbNTZdPj4yNSkpJigxPDw0KSktKDE8PDQpKSB8IH4oRFZfSUlfNDlfMF9iaXR8RFZfSUlfNTFfMF9iaXQpKTsKKwltYXNrICY9ICgoKChXWzUxXV4oV1s1MF0+PjUpKSYoMTw8MSkpLSgxPDwxKSkgfCB+KERWX0lfNTBfMl9iaXR8RFZfSUlfNDZfMl9iaXQpKTsKKwltYXNrICY9ICgoKChXWzQ4XV5XWzUwXSkmKDE8PDYpKS0oMTw8NikpIHwgfihEVl9JXzUwXzJfYml0fERWX0lJXzQ2XzJfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV81MV8wX2JpdHxEVl9JXzUyXzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKCgoV1s0OF1eV1s1NV0pPj4yOSkmMSkpIHwgfihEVl9JXzUxXzBfYml0fERWX0lfNTJfMF9iaXQpKTsKKwltYXNrICY9ICgoKChXWzQ3XV5XWzQ5XSkmKDE8PDYpKS0oMTw8NikpIHwgfihEVl9JXzQ5XzJfYml0fERWX0lfNTFfMl9iaXQpKTsKKwltYXNrICY9ICgoKChXWzQ4XV4oV1s0N10+PjUpKSYoMTw8MSkpLSgxPDwxKSkgfCB+KERWX0lfNDdfMl9iaXR8RFZfSUlfNTFfMl9iaXQpKTsKKwltYXNrICY9ICgoKChXWzQ2XV5XWzQ4XSkmKDE8PDYpKS0oMTw8NikpIHwgfihEVl9JXzQ4XzJfYml0fERWX0lfNTBfMl9iaXQpKTsKKwltYXNrICY9ICgoKChXWzQ3XV4oV1s0Nl0+PjUpKSYoMTw8MSkpLSgxPDwxKSkgfCB+KERWX0lfNDZfMl9iaXR8RFZfSUlfNTBfMl9iaXQpKTsKKwltYXNrICY9ICgoMC0oKFdbNDRdXihXWzQ1XT4+NSkpJigxPDwxKSkpIHwgfihEVl9JXzUxXzJfYml0fERWX0lJXzQ5XzJfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0M11eV1s0NV0pJigxPDw2KSktKDE8PDYpKSB8IH4oRFZfSV80N18yX2JpdHxEVl9JXzQ5XzJfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDJdXldbNDRdKT4+NikmMSktMSkgfCB+KERWX0lfNDZfMl9iaXR8RFZfSV80OF8yX2JpdCkpOworCW1hc2sgJj0gKCgoKFdbNDNdXihXWzQyXT4+NSkpJigxPDwxKSktKDE8PDEpKSB8IH4oRFZfSUlfNDZfMl9iaXR8RFZfSUlfNTFfMl9iaXQpKTsKKwltYXNrICY9ICgoKChXWzQyXV4oV1s0MV0+PjUpKSYoMTw8MSkpLSgxPDwxKSkgfCB+KERWX0lfNTFfMl9iaXR8RFZfSUlfNTBfMl9iaXQpKTsKKwltYXNrICY9ICgoKChXWzQxXV4oV1s0MF0+PjUpKSYoMTw8MSkpLSgxPDwxKSkgfCB+KERWX0lfNTBfMl9iaXR8RFZfSUlfNDlfMl9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzUyXzBfYml0fERWX0lJXzUxXzBfYml0KSkKKwkJbWFzayAmPSAoKCgoV1szOV1eKFdbNDNdPj4yNSkpJigxPDw0KSktKDE8PDQpKSB8IH4oRFZfSV81Ml8wX2JpdHxEVl9JSV81MV8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNTFfMF9iaXR8RFZfSUlfNTBfMF9iaXQpKQorCQltYXNrICY9ICgoKChXWzM4XV4oV1s0Ml0+PjI1KSkmKDE8PDQpKS0oMTw8NCkpIHwgfihEVl9JXzUxXzBfYml0fERWX0lJXzUwXzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80OF8yX2JpdHxEVl9JXzUxXzJfYml0KSkKKwkJbWFzayAmPSAoKDAtKChXWzM3XV4oV1szOF0+PjUpKSYoMTw8MSkpKSB8IH4oRFZfSV80OF8yX2JpdHxEVl9JXzUxXzJfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV81MF8wX2JpdHxEVl9JSV80OV8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKFdbMzddXihXWzQxXT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lfNTBfMF9iaXR8RFZfSUlfNDlfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JSV81Ml8wX2JpdHxEVl9JSV81NF8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoV1szNl1eV1szOF0pJigxPDw0KSkpIHwgfihEVl9JSV81Ml8wX2JpdHxEVl9JSV81NF8wX2JpdCkpOworCW1hc2sgJj0gKCgwLSgoV1szNV1eKFdbMzZdPj41KSkmKDE8PDEpKSkgfCB+KERWX0lfNDZfMl9iaXR8RFZfSV80OV8yX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNTFfMF9iaXR8RFZfSUlfNDdfMF9iaXQpKQorCQltYXNrICY9ICgoKChXWzM1XV4oV1szOV0+PjI1KSkmKDE8PDMpKS0oMTw8MykpIHwgfihEVl9JXzUxXzBfYml0fERWX0lJXzQ3XzBfYml0KSk7CitpZiAobWFzaykgeworCisJaWYgKG1hc2sgJiBEVl9JXzQzXzBfYml0KQorCQkgaWYgKAorCQkJICAgICEoKFdbNjFdXihXWzYyXT4+NSkpICYgKDE8PDEpKQorCQkJIHx8ICEoISgoV1s1OV1eKFdbNjNdPj4yNSkpICYgKDE8PDUpKSkKKwkJCSB8fCAhKChXWzU4XV4oV1s2M10+PjMwKSkgJiAoMTw8MCkpCisJCSApICBtYXNrICY9IH5EVl9JXzQzXzBfYml0OworCWlmIChtYXNrICYgRFZfSV80NF8wX2JpdCkKKwkJIGlmICgKKwkJCSAgICAhKChXWzYyXV4oV1s2M10+PjUpKSAmICgxPDwxKSkKKwkJCSB8fCAhKCEoKFdbNjBdXihXWzY0XT4+MjUpKSAmICgxPDw1KSkpCisJCQkgfHwgISgoV1s1OV1eKFdbNjRdPj4zMCkpICYgKDE8PDApKQorCQkgKSAgbWFzayAmPSB+RFZfSV80NF8wX2JpdDsKKwlpZiAobWFzayAmIERWX0lfNDZfMl9iaXQpCisJCW1hc2sgJj0gKCh+KChXWzQwXV5XWzQyXSk+PjIpKSB8IH5EVl9JXzQ2XzJfYml0KTsKKwlpZiAobWFzayAmIERWX0lfNDdfMl9iaXQpCisJCSBpZiAoCisJCQkgICAgISgoV1s2Ml1eKFdbNjNdPj41KSkgJiAoMTw8MikpCisJCQkgfHwgISghKChXWzQxXV5XWzQzXSkgJiAoMTw8NikpKQorCQkgKSAgbWFzayAmPSB+RFZfSV80N18yX2JpdDsKKwlpZiAobWFzayAmIERWX0lfNDhfMl9iaXQpCisJCSBpZiAoCisJCQkgICAgISgoV1s2M11eKFdbNjRdPj41KSkgJiAoMTw8MikpCisJCQkgfHwgISghKChXWzQ4XV4oV1s0OV08PDUpKSAmICgxPDw2KSkpCisJCSApICBtYXNrICY9IH5EVl9JXzQ4XzJfYml0OworCWlmIChtYXNrICYgRFZfSV80OV8yX2JpdCkKKwkJIGlmICgKKwkJCSAgICAhKCEoKFdbNDldXihXWzUwXTw8NSkpICYgKDE8PDYpKSkKKwkJCSB8fCAhKChXWzQyXV5XWzUwXSkgJiAoMTw8MSkpCisJCQkgfHwgISghKChXWzM5XV4oV1s0MF08PDUpKSAmICgxPDw2KSkpCisJCQkgfHwgISgoV1szOF1eV1s0MF0pICYgKDE8PDEpKQorCQkgKSAgbWFzayAmPSB+RFZfSV80OV8yX2JpdDsKKwlpZiAobWFzayAmIERWX0lfNTBfMF9iaXQpCisJCW1hc2sgJj0gKCgoKFdbMzZdXldbMzddKTw8NykpIHwgfkRWX0lfNTBfMF9iaXQpOworCWlmIChtYXNrICYgRFZfSV81MF8yX2JpdCkKKwkJbWFzayAmPSAoKCgoV1s0M11eV1s1MV0pPDwxMSkpIHwgfkRWX0lfNTBfMl9iaXQpOworCWlmIChtYXNrICYgRFZfSV81MV8wX2JpdCkKKwkJbWFzayAmPSAoKCgoV1szN11eV1szOF0pPDw5KSkgfCB+RFZfSV81MV8wX2JpdCk7CisJaWYgKG1hc2sgJiBEVl9JXzUxXzJfYml0KQorCQkgaWYgKAorCQkJICAgICEoISgoV1s1MV1eKFdbNTJdPDw1KSkgJiAoMTw8NikpKQorCQkJIHx8ICEoISgoV1s0OV1eV1s1MV0pICYgKDE8PDYpKSkKKwkJCSB8fCAhKCEoKFdbMzddXihXWzM3XT4+NSkpICYgKDE8PDEpKSkKKwkJCSB8fCAhKCEoKFdbMzVdXihXWzM5XT4+MjUpKSAmICgxPDw1KSkpCisJCSApICBtYXNrICY9IH5EVl9JXzUxXzJfYml0OworCWlmIChtYXNrICYgRFZfSV81Ml8wX2JpdCkKKwkJbWFzayAmPSAoKCgoV1szOF1eV1szOV0pPDwxMSkpIHwgfkRWX0lfNTJfMF9iaXQpOworCWlmIChtYXNrICYgRFZfSUlfNDZfMl9iaXQpCisJCW1hc2sgJj0gKCgoKFdbNDddXldbNTFdKTw8MTcpKSB8IH5EVl9JSV80Nl8yX2JpdCk7CisJaWYgKG1hc2sgJiBEVl9JSV80OF8wX2JpdCkKKwkJIGlmICgKKwkJCSAgICAhKCEoKFdbMzZdXihXWzQwXT4+MjUpKSAmICgxPDwzKSkpCisJCQkgfHwgISgoV1szNV1eKFdbNDBdPDwyKSkgJiAoMTw8MzApKQorCQkgKSAgbWFzayAmPSB+RFZfSUlfNDhfMF9iaXQ7CisJaWYgKG1hc2sgJiBEVl9JSV80OV8wX2JpdCkKKwkJIGlmICgKKwkJCSAgICAhKCEoKFdbMzddXihXWzQxXT4+MjUpKSAmICgxPDwzKSkpCisJCQkgfHwgISgoV1szNl1eKFdbNDFdPDwyKSkgJiAoMTw8MzApKQorCQkgKSAgbWFzayAmPSB+RFZfSUlfNDlfMF9iaXQ7CisJaWYgKG1hc2sgJiBEVl9JSV80OV8yX2JpdCkKKwkJIGlmICgKKwkJCSAgICAhKCEoKFdbNTNdXihXWzU0XTw8NSkpICYgKDE8PDYpKSkKKwkJCSB8fCAhKCEoKFdbNTFdXldbNTNdKSAmICgxPDw2KSkpCisJCQkgfHwgISgoV1s1MF1eV1s1NF0pICYgKDE8PDEpKQorCQkJIHx8ICEoISgoV1s0NV1eKFdbNDZdPDw1KSkgJiAoMTw8NikpKQorCQkJIHx8ICEoISgoV1szN11eKFdbNDFdPj4yNSkpICYgKDE8PDUpKSkKKwkJCSB8fCAhKChXWzM2XV4oV1s0MV0+PjMwKSkgJiAoMTw8MCkpCisJCSApICBtYXNrICY9IH5EVl9JSV80OV8yX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzUwXzBfYml0KQorCQkgaWYgKAorCQkJICAgICEoKFdbNTVdXldbNThdKSAmICgxPDwyOSkpCisJCQkgfHwgISghKChXWzM4XV4oV1s0Ml0+PjI1KSkgJiAoMTw8MykpKQorCQkJIHx8ICEoKFdbMzddXihXWzQyXTw8MikpICYgKDE8PDMwKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lJXzUwXzBfYml0OworCWlmIChtYXNrICYgRFZfSUlfNTBfMl9iaXQpCisJCSBpZiAoCisJCQkgICAgISghKChXWzU0XV4oV1s1NV08PDUpKSAmICgxPDw2KSkpCisJCQkgfHwgISghKChXWzUyXV5XWzU0XSkgJiAoMTw8NikpKQorCQkJIHx8ICEoKFdbNTFdXldbNTVdKSAmICgxPDwxKSkKKwkJCSB8fCAhKChXWzQ1XV5XWzQ3XSkgJiAoMTw8MSkpCisJCQkgfHwgISghKChXWzM4XV4oV1s0Ml0+PjI1KSkgJiAoMTw8NSkpKQorCQkJIHx8ICEoKFdbMzddXihXWzQyXT4+MzApKSAmICgxPDwwKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lJXzUwXzJfYml0OworCWlmIChtYXNrICYgRFZfSUlfNTFfMF9iaXQpCisJCSBpZiAoCisJCQkgICAgISghKChXWzM5XV4oV1s0M10+PjI1KSkgJiAoMTw8MykpKQorCQkJIHx8ICEoKFdbMzhdXihXWzQzXTw8MikpICYgKDE8PDMwKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lJXzUxXzBfYml0OworCWlmIChtYXNrICYgRFZfSUlfNTFfMl9iaXQpCisJCSBpZiAoCisJCQkgICAgISghKChXWzU1XV4oV1s1Nl08PDUpKSAmICgxPDw2KSkpCisJCQkgfHwgISghKChXWzUzXV5XWzU1XSkgJiAoMTw8NikpKQorCQkJIHx8ICEoKFdbNTJdXldbNTZdKSAmICgxPDwxKSkKKwkJCSB8fCAhKChXWzQ2XV5XWzQ4XSkgJiAoMTw8MSkpCisJCQkgfHwgISghKChXWzM5XV4oV1s0M10+PjI1KSkgJiAoMTw8NSkpKQorCQkJIHx8ICEoKFdbMzhdXihXWzQzXT4+MzApKSAmICgxPDwwKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lJXzUxXzJfYml0OworCWlmIChtYXNrICYgRFZfSUlfNTJfMF9iaXQpCisJCSBpZiAoCisJCQkgICAgISghKChXWzU5XV5XWzYwXSkgJiAoMTw8MjkpKSkKKwkJCSB8fCAhKCEoKFdbNDBdXihXWzQ0XT4+MjUpKSAmICgxPDwzKSkpCisJCQkgfHwgISghKChXWzQwXV4oV1s0NF0+PjI1KSkgJiAoMTw8NCkpKQorCQkJIHx8ICEoKFdbMzldXihXWzQ0XTw8MikpICYgKDE8PDMwKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lJXzUyXzBfYml0OworCWlmIChtYXNrICYgRFZfSUlfNTNfMF9iaXQpCisJCSBpZiAoCisJCQkgICAgISgoV1s1OF1eV1s2MV0pICYgKDE8PDI5KSkKKwkJCSB8fCAhKCEoKFdbNTddXihXWzYxXT4+MjUpKSAmICgxPDw0KSkpCisJCQkgfHwgISghKChXWzQxXV4oV1s0NV0+PjI1KSkgJiAoMTw8MykpKQorCQkJIHx8ICEoISgoV1s0MV1eKFdbNDVdPj4yNSkpICYgKDE8PDQpKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lJXzUzXzBfYml0OworCWlmIChtYXNrICYgRFZfSUlfNTRfMF9iaXQpCisJCSBpZiAoCisJCQkgICAgISghKChXWzU4XV4oV1s2Ml0+PjI1KSkgJiAoMTw8NCkpKQorCQkJIHx8ICEoISgoV1s0Ml1eKFdbNDZdPj4yNSkpICYgKDE8PDMpKSkKKwkJCSB8fCAhKCEoKFdbNDJdXihXWzQ2XT4+MjUpKSAmICgxPDw0KSkpCisJCSApICBtYXNrICY9IH5EVl9JSV81NF8wX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzU1XzBfYml0KQorCQkgaWYgKAorCQkJICAgICEoISgoV1s1OV1eKFdbNjNdPj4yNSkpICYgKDE8PDQpKSkKKwkJCSB8fCAhKCEoKFdbNTddXihXWzU5XT4+MjUpKSAmICgxPDw0KSkpCisJCQkgfHwgISghKChXWzQzXV4oV1s0N10+PjI1KSkgJiAoMTw8MykpKQorCQkJIHx8ICEoISgoV1s0M11eKFdbNDddPj4yNSkpICYgKDE8PDQpKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lJXzU1XzBfYml0OworCWlmIChtYXNrICYgRFZfSUlfNTZfMF9iaXQpCisJCSBpZiAoCisJCQkgICAgISghKChXWzYwXV4oV1s2NF0+PjI1KSkgJiAoMTw8NCkpKQorCQkJIHx8ICEoISgoV1s0NF1eKFdbNDhdPj4yNSkpICYgKDE8PDMpKSkKKwkJCSB8fCAhKCEoKFdbNDRdXihXWzQ4XT4+MjUpKSAmICgxPDw0KSkpCisJCSApICBtYXNrICY9IH5EVl9JSV81Nl8wX2JpdDsKK30KKworCWR2bWFza1swXT1tYXNrOworfQorCisjaWZkZWYgU0hBMURDX0NVU1RPTV9UUkFJTElOR19JTkNMVURFX1VCQ19DSEVDS19DCisjaW5jbHVkZSBTSEExRENfQ1VTVE9NX1RSQUlMSU5HX0lOQ0xVREVfVUJDX0NIRUNLX0MKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc2hhMWRjL3ViY19jaGVjay5oIGIvc2hhMWRjL3ViY19jaGVjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZTE3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGExZGMvdWJjX2NoZWNrLmgKQEAgLTAsMCArMSw1MiBAQAorLyoqKgorKiBDb3B5cmlnaHQgMjAxNyBNYXJjIFN0ZXZlbnMgPG1hcmNAbWFyYy1zdGV2ZW5zLm5sPiwgRGFuIFNodW1vdyA8ZGFuc2h1QG1pY3Jvc29mdC5jb20+CisqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgU29mdHdhcmUgTGljZW5zZS4KKyogU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0UudHh0IG9yIGNvcHkgYXQKKyogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKKyoqKi8KKworLyoKKy8vIHRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSAncGFyc2VfYml0cmVsJyBwcm9ncmFtIGluIHRoZSB0b29scyBzZWN0aW9uCisvLyB1c2luZyB0aGUgZGF0YSBmaWxlcyBmcm9tIGRpcmVjdG9yeSAndG9vbHMvZGF0YS8zNTY1JworLy8KKy8vIHNoYTFfZHZzIGNvbnRhaW5zIGEgbGlzdCBvZiBTSEEtMSBEaXN0dXJiYW5jZSBWZWN0b3JzIChEVikgdG8gY2hlY2sKKy8vIGR2VHlwZSwgZHZLIGFuZCBkdkIgZGVmaW5lIHRoZSBEVjogSShLLEIpIG9yIElJKEssQikgKHNlZSB0aGUgcGFwZXIpCisvLyBkbVs4MF0gaXMgdGhlIGV4cGFuZGVkIG1lc3NhZ2UgYmxvY2sgWE9SLWRpZmZlcmVuY2UgZGVmaW5lZCBieSB0aGUgRFYKKy8vIHRlc3R0IGlzIHRoZSBzdGVwIHRvIGRvIHRoZSByZWNvbXByZXNzaW9uIGZyb20gZm9yIGNvbGxpc2lvbiBkZXRlY3Rpb24KKy8vIG1hc2tpIGFuZCBtYXNrYiBkZWZpbmUgdGhlIGJpdCB0byBjaGVjayBmb3IgZWFjaCBEViBpbiB0aGUgZHZtYXNrIHJldHVybmVkIGJ5IHViY19jaGVjaworLy8KKy8vIHViY19jaGVjayB0YWtlcyBhcyBpbnB1dCBhbiBleHBhbmRlZCBtZXNzYWdlIGJsb2NrIGFuZCB2ZXJpZmllcyB0aGUgdW5hdm9pZGFibGUgYml0Y29uZGl0aW9ucyBmb3IgYWxsIGxpc3RlZCBEVnMKKy8vIGl0IHJldHVybnMgYSBkdm1hc2sgd2hlcmUgZWFjaCBiaXQgYmVsb25naW5nIHRvIGEgRFYgaXMgc2V0IGlmIGFsbCB1bmF2b2lkYWJsZSBiaXRjb25kaXRpb25zIGZvciB0aGF0IERWIGhhdmUgYmVlbiBtZXQKKy8vIHRodXMgb25lIG5lZWRzIHRvIGRvIHRoZSByZWNvbXByZXNzaW9uIGNoZWNrIGZvciBlYWNoIERWIHRoYXQgaGFzIGl0cyBiaXQgc2V0CisqLworCisjaWZuZGVmIFNIQTFEQ19VQkNfQ0hFQ0tfSAorI2RlZmluZSBTSEExRENfVUJDX0NIRUNLX0gKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZuZGVmIFNIQTFEQ19OT19TVEFOREFSRF9JTkNMVURFUworI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKyNkZWZpbmUgRFZNQVNLU0laRSAxCit0eXBlZGVmIHN0cnVjdCB7IGludCBkdlR5cGU7IGludCBkdks7IGludCBkdkI7IGludCB0ZXN0dDsgaW50IG1hc2tpOyBpbnQgbWFza2I7IHVpbnQzMl90IGRtWzgwXTsgfSBkdl9pbmZvX3Q7CitleHRlcm4gZHZfaW5mb190IHNoYTFfZHZzW107Cit2b2lkIHViY19jaGVjayhjb25zdCB1aW50MzJfdCBXWzgwXSwgdWludDMyX3QgZHZtYXNrW0RWTUFTS1NJWkVdKTsKKworI2RlZmluZSBET1NUT1JFU1RBVEU1OAorI2RlZmluZSBET1NUT1JFU1RBVEU2NQorCisjZGVmaW5lIENIRUNLX0RWTUFTSyhfRFZNQVNLKSAoMCAhPSBfRFZNQVNLWzBdKQorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisjaWZkZWYgU0hBMURDX0NVU1RPTV9UUkFJTElOR19JTkNMVURFX1VCQ19DSEVDS19ICisjaW5jbHVkZSBTSEExRENfQ1VTVE9NX1RSQUlMSU5HX0lOQ0xVREVfVUJDX0NIRUNLX0gKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NoYTFkY19naXQuYyBiL3NoYTFkY19naXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzMwMGU4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhMWRjX2dpdC5jCkBAIC0wLDAgKzEsMzggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjaWZkZWYgRENfU0hBMV9FWFRFUk5BTAorLyoKKyAqIFNhbWUgYXMgU0hBMURDSW5pdCwgYnV0IHdpdGggZGVmYXVsdCBzYXZlX2hhc2g9MAorICovCit2b2lkIGdpdF9TSEExRENJbml0KFNIQTFfQ1RYICpjdHgpCit7CisJU0hBMURDSW5pdChjdHgpOworCVNIQTFEQ1NldFNhZmVIYXNoKGN0eCwgMCk7Cit9CisjZW5kaWYKKworLyoKKyAqIFNhbWUgYXMgU0hBMURDRmluYWwsIGJ1dCBjb252ZXJ0IGNvbGxpc2lvbiBhdHRhY2sgY2FzZSBpbnRvIGEgdmVyYm9zZSBkaWUoKS4KKyAqLwordm9pZCBnaXRfU0hBMURDRmluYWwodW5zaWduZWQgY2hhciBoYXNoWzIwXSwgU0hBMV9DVFggKmN0eCkKK3sKKwlpZiAoIVNIQTFEQ0ZpbmFsKGhhc2gsIGN0eCkpCisJCXJldHVybjsKKwlkaWUoIlNIQS0xIGFwcGVhcnMgdG8gYmUgcGFydCBvZiBhIGNvbGxpc2lvbiBhdHRhY2s6ICVzIiwKKwkgICAgaGFzaF90b19oZXhfYWxnb3AoaGFzaCwgJmhhc2hfYWxnb3NbR0lUX0hBU0hfU0hBMV0pKTsKK30KKworLyoKKyAqIFNhbWUgYXMgU0hBMURDVXBkYXRlLCBidXQgYWRqdXN0IHR5cGVzIHRvIG1hdGNoIGdpdCdzIHVzdWFsIGludGVyZmFjZS4KKyAqLwordm9pZCBnaXRfU0hBMURDVXBkYXRlKFNIQTFfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKnZkYXRhLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwljb25zdCBjaGFyICpkYXRhID0gdmRhdGE7CisJLyogV2UgZXhwZWN0IGFuIHVuc2lnbmVkIGxvbmcsIGJ1dCBzaGExZGMgb25seSB0YWtlcyBhbiBpbnQgKi8KKwl3aGlsZSAobGVuID4gSU5UX01BWCkgeworCQlTSEExRENVcGRhdGUoY3R4LCBkYXRhLCBJTlRfTUFYKTsKKwkJZGF0YSArPSBJTlRfTUFYOworCQlsZW4gLT0gSU5UX01BWDsKKwl9CisJU0hBMURDVXBkYXRlKGN0eCwgZGF0YSwgbGVuKTsKK30KZGlmZiAtLWdpdCBhL3NoYTFkY19naXQuaCBiL3NoYTFkY19naXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWUxYzNmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhMWRjX2dpdC5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qIFBsdW1iaW5nIHdpdGggY29sbGl0aW9uLWRldGVjdGluZyBTSEExIGNvZGUgKi8KKworI2lmZGVmIERDX1NIQTFfRVhURVJOQUwKKyNpbmNsdWRlIDxzaGExZGMvc2hhMS5oPgorI2VsaWYgZGVmaW5lZChEQ19TSEExX1NVQk1PRFVMRSkKKyNpbmNsdWRlICJzaGExY29sbGlzaW9uZGV0ZWN0aW9uL2xpYi9zaGExLmgiCisjZWxzZQorI2luY2x1ZGUgInNoYTFkYy9zaGExLmgiCisjZW5kaWYKKworI2lmZGVmIERDX1NIQTFfRVhURVJOQUwKK3ZvaWQgZ2l0X1NIQTFEQ0luaXQoU0hBMV9DVFggKik7CisjZWxzZQorI2RlZmluZSBnaXRfU0hBMURDSW5pdAlTSEExRENJbml0CisjZW5kaWYKKwordm9pZCBnaXRfU0hBMURDRmluYWwodW5zaWduZWQgY2hhciBbMjBdLCBTSEExX0NUWCAqKTsKK3ZvaWQgZ2l0X1NIQTFEQ1VwZGF0ZShTSEExX0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGxlbik7CisKKyNkZWZpbmUgcGxhdGZvcm1fU0hBX0NUWCBTSEExX0NUWAorI2RlZmluZSBwbGF0Zm9ybV9TSEExX0luaXQgZ2l0X1NIQTFEQ0luaXQKKyNkZWZpbmUgcGxhdGZvcm1fU0hBMV9VcGRhdGUgZ2l0X1NIQTFEQ1VwZGF0ZQorI2RlZmluZSBwbGF0Zm9ybV9TSEExX0ZpbmFsIGdpdF9TSEExRENGaW5hbApkaWZmIC0tZ2l0IGEvc2hhMjU2L2Jsb2NrL3NoYTI1Ni5jIGIvc2hhMjU2L2Jsb2NrL3NoYTI1Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ODUwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGEyNTYvYmxvY2svc2hhMjU2LmMKQEAgLTAsMCArMSwxOTYgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICIuL3NoYTI1Ni5oIgorCisjdW5kZWYgUk5ECisjdW5kZWYgQkxLU0laRQorCisjZGVmaW5lIEJMS1NJWkUgYmxrX1NIQTI1Nl9CTEtTSVpFCisKK3ZvaWQgYmxrX1NIQTI1Nl9Jbml0KGJsa19TSEEyNTZfQ1RYICpjdHgpCit7CisJY3R4LT5vZmZzZXQgPSAwOworCWN0eC0+c2l6ZSA9IDA7CisJY3R4LT5zdGF0ZVswXSA9IDB4NmEwOWU2Njd1bDsKKwljdHgtPnN0YXRlWzFdID0gMHhiYjY3YWU4NXVsOworCWN0eC0+c3RhdGVbMl0gPSAweDNjNmVmMzcydWw7CisJY3R4LT5zdGF0ZVszXSA9IDB4YTU0ZmY1M2F1bDsKKwljdHgtPnN0YXRlWzRdID0gMHg1MTBlNTI3ZnVsOworCWN0eC0+c3RhdGVbNV0gPSAweDliMDU2ODhjdWw7CisJY3R4LT5zdGF0ZVs2XSA9IDB4MWY4M2Q5YWJ1bDsKKwljdHgtPnN0YXRlWzddID0gMHg1YmUwY2QxOXVsOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHJvcih1aW50MzJfdCB4LCB1bnNpZ25lZCBuKQoreworCXJldHVybiAoeCA+PiBuKSB8ICh4IDw8ICgzMiAtIG4pKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaCh1aW50MzJfdCB4LCB1aW50MzJfdCB5LCB1aW50MzJfdCB6KQoreworCXJldHVybiB6IF4gKHggJiAoeSBeIHopKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBtYWoodWludDMyX3QgeCwgdWludDMyX3QgeSwgdWludDMyX3QgeikKK3sKKwlyZXR1cm4gKCh4IHwgeSkgJiB6KSB8ICh4ICYgeSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3Qgc2lnbWEwKHVpbnQzMl90IHgpCit7CisJcmV0dXJuIHJvcih4LCAyKSBeIHJvcih4LCAxMykgXiByb3IoeCwgMjIpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHNpZ21hMSh1aW50MzJfdCB4KQoreworCXJldHVybiByb3IoeCwgNikgXiByb3IoeCwgMTEpIF4gcm9yKHgsIDI1KTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBnYW1tYTAodWludDMyX3QgeCkKK3sKKwlyZXR1cm4gcm9yKHgsIDcpIF4gcm9yKHgsIDE4KSBeICh4ID4+IDMpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGdhbW1hMSh1aW50MzJfdCB4KQoreworCXJldHVybiByb3IoeCwgMTcpIF4gcm9yKHgsIDE5KSBeICh4ID4+IDEwKTsKK30KKworc3RhdGljIHZvaWQgYmxrX1NIQTI1Nl9UcmFuc2Zvcm0oYmxrX1NIQTI1Nl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmKQoreworCisJdWludDMyX3QgU1s4XSwgV1s2NF0sIHQwLCB0MTsKKwlpbnQgaTsKKworCS8qIGNvcHkgc3RhdGUgaW50byBTICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJU1tpXSA9IGN0eC0+c3RhdGVbaV07CisKKwkvKiBjb3B5IHRoZSBzdGF0ZSBpbnRvIDUxMi1iaXRzIGludG8gV1swLi4xNV0gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKywgYnVmICs9IHNpemVvZih1aW50MzJfdCkpCisJCVdbaV0gPSBnZXRfYmUzMihidWYpOworCisJLyogZmlsbCBXWzE2Li42M10gKi8KKwlmb3IgKGkgPSAxNjsgaSA8IDY0OyBpKyspCisJCVdbaV0gPSBnYW1tYTEoV1tpIC0gMl0pICsgV1tpIC0gN10gKyBnYW1tYTAoV1tpIC0gMTVdKSArIFdbaSAtIDE2XTsKKworI2RlZmluZSBSTkQoYSxiLGMsZCxlLGYsZyxoLGksa2kpICAgICAgICAgICAgICAgICAgICBcCisJdDAgPSBoICsgc2lnbWExKGUpICsgY2goZSwgZiwgZykgKyBraSArIFdbaV07ICAgXAorCXQxID0gc2lnbWEwKGEpICsgbWFqKGEsIGIsIGMpOyAgICAgICAgICAgICAgICAgIFwKKwlkICs9IHQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaCAgPSB0MCArIHQxOworCisJUk5EKFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSwwLDB4NDI4YTJmOTgpOworCVJORChTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sMSwweDcxMzc0NDkxKTsKKwlSTkQoU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLDIsMHhiNWMwZmJjZik7CisJUk5EKFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSwzLDB4ZTliNWRiYTUpOworCVJORChTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sNCwweDM5NTZjMjViKTsKKwlSTkQoU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLDUsMHg1OWYxMTFmMSk7CisJUk5EKFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSw2LDB4OTIzZjgyYTQpOworCVJORChTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sNywweGFiMWM1ZWQ1KTsKKwlSTkQoU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLDgsMHhkODA3YWE5OCk7CisJUk5EKFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSw5LDB4MTI4MzViMDEpOworCVJORChTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sMTAsMHgyNDMxODViZSk7CisJUk5EKFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSwxMSwweDU1MGM3ZGMzKTsKKwlSTkQoU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLDEyLDB4NzJiZTVkNzQpOworCVJORChTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sMTMsMHg4MGRlYjFmZSk7CisJUk5EKFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSwxNCwweDliZGMwNmE3KTsKKwlSTkQoU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLDE1LDB4YzE5YmYxNzQpOworCVJORChTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sMTYsMHhlNDliNjljMSk7CisJUk5EKFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSwxNywweGVmYmU0Nzg2KTsKKwlSTkQoU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLDE4LDB4MGZjMTlkYzYpOworCVJORChTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sMTksMHgyNDBjYTFjYyk7CisJUk5EKFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSwyMCwweDJkZTkyYzZmKTsKKwlSTkQoU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLDIxLDB4NGE3NDg0YWEpOworCVJORChTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sMjIsMHg1Y2IwYTlkYyk7CisJUk5EKFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSwyMywweDc2Zjk4OGRhKTsKKwlSTkQoU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLDI0LDB4OTgzZTUxNTIpOworCVJORChTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sMjUsMHhhODMxYzY2ZCk7CisJUk5EKFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSwyNiwweGIwMDMyN2M4KTsKKwlSTkQoU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLDI3LDB4YmY1OTdmYzcpOworCVJORChTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sMjgsMHhjNmUwMGJmMyk7CisJUk5EKFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSwyOSwweGQ1YTc5MTQ3KTsKKwlSTkQoU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLDMwLDB4MDZjYTYzNTEpOworCVJORChTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sMzEsMHgxNDI5Mjk2Nyk7CisJUk5EKFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSwzMiwweDI3YjcwYTg1KTsKKwlSTkQoU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLDMzLDB4MmUxYjIxMzgpOworCVJORChTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sMzQsMHg0ZDJjNmRmYyk7CisJUk5EKFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSwzNSwweDUzMzgwZDEzKTsKKwlSTkQoU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLDM2LDB4NjUwYTczNTQpOworCVJORChTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sMzcsMHg3NjZhMGFiYik7CisJUk5EKFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSwzOCwweDgxYzJjOTJlKTsKKwlSTkQoU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLDM5LDB4OTI3MjJjODUpOworCVJORChTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sNDAsMHhhMmJmZThhMSk7CisJUk5EKFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSw0MSwweGE4MWE2NjRiKTsKKwlSTkQoU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLDQyLDB4YzI0YjhiNzApOworCVJORChTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sNDMsMHhjNzZjNTFhMyk7CisJUk5EKFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSw0NCwweGQxOTJlODE5KTsKKwlSTkQoU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLDQ1LDB4ZDY5OTA2MjQpOworCVJORChTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sNDYsMHhmNDBlMzU4NSk7CisJUk5EKFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSw0NywweDEwNmFhMDcwKTsKKwlSTkQoU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLDQ4LDB4MTlhNGMxMTYpOworCVJORChTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sNDksMHgxZTM3NmMwOCk7CisJUk5EKFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSw1MCwweDI3NDg3NzRjKTsKKwlSTkQoU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLDUxLDB4MzRiMGJjYjUpOworCVJORChTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sNTIsMHgzOTFjMGNiMyk7CisJUk5EKFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSw1MywweDRlZDhhYTRhKTsKKwlSTkQoU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLDU0LDB4NWI5Y2NhNGYpOworCVJORChTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sNTUsMHg2ODJlNmZmMyk7CisJUk5EKFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSw1NiwweDc0OGY4MmVlKTsKKwlSTkQoU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLDU3LDB4NzhhNTYzNmYpOworCVJORChTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sNTgsMHg4NGM4NzgxNCk7CisJUk5EKFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSw1OSwweDhjYzcwMjA4KTsKKwlSTkQoU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLDYwLDB4OTBiZWZmZmEpOworCVJORChTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sNjEsMHhhNDUwNmNlYik7CisJUk5EKFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSw2MiwweGJlZjlhM2Y3KTsKKwlSTkQoU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLDYzLDB4YzY3MTc4ZjIpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJY3R4LT5zdGF0ZVtpXSArPSBTW2ldOworfQorCit2b2lkIGJsa19TSEEyNTZfVXBkYXRlKGJsa19TSEEyNTZfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJdW5zaWduZWQgaW50IGxlbl9idWYgPSBjdHgtPnNpemUgJiA2MzsKKworCWN0eC0+c2l6ZSArPSBsZW47CisKKwkvKiBSZWFkIHRoZSBkYXRhIGludG8gYnVmIGFuZCBwcm9jZXNzIGJsb2NrcyBhcyB0aGV5IGdldCBmdWxsICovCisJaWYgKGxlbl9idWYpIHsKKwkJdW5zaWduZWQgaW50IGxlZnQgPSA2NCAtIGxlbl9idWY7CisJCWlmIChsZW4gPCBsZWZ0KQorCQkJbGVmdCA9IGxlbjsKKwkJbWVtY3B5KGxlbl9idWYgKyBjdHgtPmJ1ZiwgZGF0YSwgbGVmdCk7CisJCWxlbl9idWYgPSAobGVuX2J1ZiArIGxlZnQpICYgNjM7CisJCWxlbiAtPSBsZWZ0OworCQlkYXRhID0gKChjb25zdCBjaGFyICopZGF0YSArIGxlZnQpOworCQlpZiAobGVuX2J1ZikKKwkJCXJldHVybjsKKwkJYmxrX1NIQTI1Nl9UcmFuc2Zvcm0oY3R4LCBjdHgtPmJ1Zik7CisJfQorCXdoaWxlIChsZW4gPj0gNjQpIHsKKwkJYmxrX1NIQTI1Nl9UcmFuc2Zvcm0oY3R4LCBkYXRhKTsKKwkJZGF0YSA9ICgoY29uc3QgY2hhciAqKWRhdGEgKyA2NCk7CisJCWxlbiAtPSA2NDsKKwl9CisJaWYgKGxlbikKKwkJbWVtY3B5KGN0eC0+YnVmLCBkYXRhLCBsZW4pOworfQorCit2b2lkIGJsa19TSEEyNTZfRmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBibGtfU0hBMjU2X0NUWCAqY3R4KQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhZFs2NF0gPSB7IDB4ODAgfTsKKwl1bnNpZ25lZCBpbnQgcGFkbGVuWzJdOworCWludCBpOworCisJLyogUGFkIHdpdGggYSBiaW5hcnkgMSAoaWUgMHg4MCksIHRoZW4gemVyb2VzLCB0aGVuIGxlbmd0aCAqLworCXBhZGxlblswXSA9IGh0b25sKCh1aW50MzJfdCkoY3R4LT5zaXplID4+IDI5KSk7CisJcGFkbGVuWzFdID0gaHRvbmwoKHVpbnQzMl90KShjdHgtPnNpemUgPDwgMykpOworCisJaSA9IGN0eC0+c2l6ZSAmIDYzOworCWJsa19TSEEyNTZfVXBkYXRlKGN0eCwgcGFkLCAxICsgKDYzICYgKDU1IC0gaSkpKTsKKwlibGtfU0hBMjU2X1VwZGF0ZShjdHgsIHBhZGxlbiwgOCk7CisKKwkvKiBjb3B5IG91dHB1dCAqLworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyssIGRpZ2VzdCArPSBzaXplb2YodWludDMyX3QpKQorCQlwdXRfYmUzMihkaWdlc3QsIGN0eC0+c3RhdGVbaV0pOworfQpkaWZmIC0tZ2l0IGEvc2hhMjU2L2Jsb2NrL3NoYTI1Ni5oIGIvc2hhMjU2L2Jsb2NrL3NoYTI1Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOTlkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGEyNTYvYmxvY2svc2hhMjU2LmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBTSEEyNTZfQkxPQ0tfU0hBMjU2X0gKKyNkZWZpbmUgU0hBMjU2X0JMT0NLX1NIQTI1Nl9ICisKKyNkZWZpbmUgYmxrX1NIQTI1Nl9CTEtTSVpFIDY0CisKK3N0cnVjdCBibGtfU0hBMjU2X0NUWCB7CisJdWludDMyX3Qgc3RhdGVbOF07CisJdWludDY0X3Qgc2l6ZTsKKwl1aW50MzJfdCBvZmZzZXQ7CisJdWludDhfdCBidWZbYmxrX1NIQTI1Nl9CTEtTSVpFXTsKK307CisKK3R5cGVkZWYgc3RydWN0IGJsa19TSEEyNTZfQ1RYIGJsa19TSEEyNTZfQ1RYOworCit2b2lkIGJsa19TSEEyNTZfSW5pdChibGtfU0hBMjU2X0NUWCAqY3R4KTsKK3ZvaWQgYmxrX1NIQTI1Nl9VcGRhdGUoYmxrX1NIQTI1Nl9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Cit2b2lkIGJsa19TSEEyNTZfRmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBibGtfU0hBMjU2X0NUWCAqY3R4KTsKKworI2RlZmluZSBwbGF0Zm9ybV9TSEEyNTZfQ1RYIGJsa19TSEEyNTZfQ1RYCisjZGVmaW5lIHBsYXRmb3JtX1NIQTI1Nl9Jbml0IGJsa19TSEEyNTZfSW5pdAorI2RlZmluZSBwbGF0Zm9ybV9TSEEyNTZfVXBkYXRlIGJsa19TSEEyNTZfVXBkYXRlCisjZGVmaW5lIHBsYXRmb3JtX1NIQTI1Nl9GaW5hbCBibGtfU0hBMjU2X0ZpbmFsCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc2hhMjU2L2djcnlwdC5oIGIvc2hhMjU2L2djcnlwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMWRhNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGEyNTYvZ2NyeXB0LmgKQEAgLTAsMCArMSwzNiBAQAorI2lmbmRlZiBTSEEyNTZfR0NSWVBUX0gKKyNkZWZpbmUgU0hBMjU2X0dDUllQVF9ICisKKyNpbmNsdWRlIDxnY3J5cHQuaD4KKworI2RlZmluZSBTSEEyNTZfRElHRVNUX1NJWkUgMzIKKwordHlwZWRlZiBnY3J5X21kX2hkX3QgZ2NyeXB0X1NIQTI1Nl9DVFg7CisKK2lubGluZSB2b2lkIGdjcnlwdF9TSEEyNTZfSW5pdChnY3J5cHRfU0hBMjU2X0NUWCAqY3R4KQoreworCWdjcnlfbWRfb3BlbihjdHgsIEdDUllfTURfU0hBMjU2LCAwKTsKK30KKworaW5saW5lIHZvaWQgZ2NyeXB0X1NIQTI1Nl9VcGRhdGUoZ2NyeXB0X1NIQTI1Nl9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlnY3J5X21kX3dyaXRlKCpjdHgsIGRhdGEsIGxlbik7Cit9CisKK2lubGluZSB2b2lkIGdjcnlwdF9TSEEyNTZfRmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBnY3J5cHRfU0hBMjU2X0NUWCAqY3R4KQoreworCW1lbWNweShkaWdlc3QsIGdjcnlfbWRfcmVhZCgqY3R4LCBHQ1JZX01EX1NIQTI1NiksIFNIQTI1Nl9ESUdFU1RfU0laRSk7Cit9CisKK2lubGluZSB2b2lkIGdjcnlwdF9TSEEyNTZfQ2xvbmUoZ2NyeXB0X1NIQTI1Nl9DVFggKmRzdCwgY29uc3QgZ2NyeXB0X1NIQTI1Nl9DVFggKnNyYykKK3sKKwlnY3J5X21kX2NvcHkoZHN0LCAqc3JjKTsKK30KKworI2RlZmluZSBwbGF0Zm9ybV9TSEEyNTZfQ1RYIGdjcnlwdF9TSEEyNTZfQ1RYCisjZGVmaW5lIHBsYXRmb3JtX1NIQTI1Nl9Jbml0IGdjcnlwdF9TSEEyNTZfSW5pdAorI2RlZmluZSBwbGF0Zm9ybV9TSEEyNTZfQ2xvbmUgZ2NyeXB0X1NIQTI1Nl9DbG9uZQorI2RlZmluZSBwbGF0Zm9ybV9TSEEyNTZfVXBkYXRlIGdjcnlwdF9TSEEyNTZfVXBkYXRlCisjZGVmaW5lIHBsYXRmb3JtX1NIQTI1Nl9GaW5hbCBnY3J5cHRfU0hBMjU2X0ZpbmFsCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc2hhbGxvdy5jIGIvc2hhbGxvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MjZkZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFsbG93LmMKQEAgLTAsMCArMSw4MTkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJ0ZW1wZmlsZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAib2lkLWFycmF5LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJzaGFsbG93LmgiCisKK3ZvaWQgc2V0X2FsdGVybmF0ZV9zaGFsbG93X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBvdmVycmlkZSkKK3sKKwlpZiAoci0+cGFyc2VkX29iamVjdHMtPmlzX3NoYWxsb3cgIT0gLTEpCisJCUJVRygiaXNfcmVwb3NpdG9yeV9zaGFsbG93IG11c3Qgbm90IGJlIGNhbGxlZCBiZWZvcmUgc2V0X2FsdGVybmF0ZV9zaGFsbG93X2ZpbGUiKTsKKwlpZiAoci0+cGFyc2VkX29iamVjdHMtPmFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgJiYgIW92ZXJyaWRlKQorCQlyZXR1cm47CisJZnJlZShyLT5wYXJzZWRfb2JqZWN0cy0+YWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSk7CisJci0+cGFyc2VkX29iamVjdHMtPmFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPSB4c3RyZHVwX29yX251bGwocGF0aCk7Cit9CisKK2ludCByZWdpc3Rlcl9zaGFsbG93KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQgPQorCQl4bWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tbWl0X2dyYWZ0KSk7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbG9va3VwX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKworCW9pZGNweSgmZ3JhZnQtPm9pZCwgb2lkKTsKKwlncmFmdC0+bnJfcGFyZW50ID0gLTE7CisJaWYgKGNvbW1pdCAmJiBjb21taXQtPm9iamVjdC5wYXJzZWQpCisJCWNvbW1pdC0+cGFyZW50cyA9IE5VTEw7CisJcmV0dXJuIHJlZ2lzdGVyX2NvbW1pdF9ncmFmdChyLCBncmFmdCwgMCk7Cit9CisKK2ludCB1bnJlZ2lzdGVyX3NoYWxsb3coY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWludCBwb3MgPSBjb21taXRfZ3JhZnRfcG9zKHRoZV9yZXBvc2l0b3J5LCBvaWQtPmhhc2gpOworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKHBvcyArIDEgPCB0aGVfcmVwb3NpdG9yeS0+cGFyc2VkX29iamVjdHMtPmdyYWZ0c19ucikKKwkJTU9WRV9BUlJBWSh0aGVfcmVwb3NpdG9yeS0+cGFyc2VkX29iamVjdHMtPmdyYWZ0cyArIHBvcywKKwkJCSAgIHRoZV9yZXBvc2l0b3J5LT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzICsgcG9zICsgMSwKKwkJCSAgIHRoZV9yZXBvc2l0b3J5LT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzX25yIC0gcG9zIC0gMSk7CisJdGhlX3JlcG9zaXRvcnktPnBhcnNlZF9vYmplY3RzLT5ncmFmdHNfbnItLTsKKwlyZXR1cm4gMDsKK30KKworaW50IGlzX3JlcG9zaXRvcnlfc2hhbGxvdyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlGSUxFICpmcDsKKwljaGFyIGJ1ZlsxMDI0XTsKKwljb25zdCBjaGFyICpwYXRoID0gci0+cGFyc2VkX29iamVjdHMtPmFsdGVybmF0ZV9zaGFsbG93X2ZpbGU7CisKKwlpZiAoci0+cGFyc2VkX29iamVjdHMtPmlzX3NoYWxsb3cgPj0gMCkKKwkJcmV0dXJuIHItPnBhcnNlZF9vYmplY3RzLT5pc19zaGFsbG93OworCisJaWYgKCFwYXRoKQorCQlwYXRoID0gZ2l0X3BhdGhfc2hhbGxvdyhyKTsKKwkvKgorCSAqIGZldGNoLXBhY2sgc2V0cyAnLS1zaGFsbG93LWZpbGUgIiInIGFzIGFuIGluZGljYXRvciB0aGF0IG5vCisJICogc2hhbGxvdyBmaWxlIHNob3VsZCBiZSB1c2VkLiBXZSBjb3VsZCBqdXN0IG9wZW4gaXQgYW5kIGl0CisJICogd2lsbCBsaWtlbHkgZmFpbC4gQnV0IGxldCdzIGRvIGFuIGV4cGxpY2l0IGNoZWNrIGluc3RlYWQuCisJICovCisJaWYgKCEqcGF0aCB8fCAoZnAgPSBmb3BlbihwYXRoLCAiciIpKSA9PSBOVUxMKSB7CisJCXN0YXRfdmFsaWRpdHlfY2xlYXIoci0+cGFyc2VkX29iamVjdHMtPnNoYWxsb3dfc3RhdCk7CisJCXItPnBhcnNlZF9vYmplY3RzLT5pc19zaGFsbG93ID0gMDsKKwkJcmV0dXJuIHItPnBhcnNlZF9vYmplY3RzLT5pc19zaGFsbG93OworCX0KKwlzdGF0X3ZhbGlkaXR5X3VwZGF0ZShyLT5wYXJzZWRfb2JqZWN0cy0+c2hhbGxvd19zdGF0LCBmaWxlbm8oZnApKTsKKwlyLT5wYXJzZWRfb2JqZWN0cy0+aXNfc2hhbGxvdyA9IDE7CisKKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlpZiAoZ2V0X29pZF9oZXgoYnVmLCAmb2lkKSkKKwkJCWRpZSgiYmFkIHNoYWxsb3cgbGluZTogJXMiLCBidWYpOworCQlyZWdpc3Rlcl9zaGFsbG93KHIsICZvaWQpOworCX0KKwlmY2xvc2UoZnApOworCXJldHVybiByLT5wYXJzZWRfb2JqZWN0cy0+aXNfc2hhbGxvdzsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfcmVwb3NpdG9yeV9zaGFsbG93KHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXItPnBhcnNlZF9vYmplY3RzLT5pc19zaGFsbG93ID0gLTE7CisJc3RhdF92YWxpZGl0eV9jbGVhcihyLT5wYXJzZWRfb2JqZWN0cy0+c2hhbGxvd19zdGF0KTsKK30KKworaW50IGNvbW1pdF9zaGFsbG93X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBzaGFsbG93X2xvY2sgKmxrKQoreworCWludCByZXMgPSBjb21taXRfbG9ja19maWxlKCZsay0+bG9jayk7CisJcmVzZXRfcmVwb3NpdG9yeV9zaGFsbG93KHIpOworCXJldHVybiByZXM7Cit9CisKK3ZvaWQgcm9sbGJhY2tfc2hhbGxvd19maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgc2hhbGxvd19sb2NrICpsaykKK3sKKwlyb2xsYmFja19sb2NrX2ZpbGUoJmxrLT5sb2NrKTsKKwlyZXNldF9yZXBvc2l0b3J5X3NoYWxsb3cocik7Cit9CisKKy8qCisgKiBUT0RPOiB1c2UgImludCIgZWxlbXR5cGUgaW5zdGVhZCBvZiAiaW50ICoiIHdoZW4vaWYgY29tbWl0LXNsYWIKKyAqIHN1cHBvcnRzIGEgInZhbGlkIiBmbGFnLgorICovCitkZWZpbmVfY29tbWl0X3NsYWIoY29tbWl0X2RlcHRoLCBpbnQgKik7CitzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9zaGFsbG93X2NvbW1pdHMoc3RydWN0IG9iamVjdF9hcnJheSAqaGVhZHMsIGludCBkZXB0aCwKKwkJaW50IHNoYWxsb3dfZmxhZywgaW50IG5vdF9zaGFsbG93X2ZsYWcpCit7CisJaW50IGkgPSAwLCBjdXJfZGVwdGggPSAwOworCXN0cnVjdCBjb21taXRfbGlzdCAqcmVzdWx0ID0gTlVMTDsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IHN0YWNrID0gT0JKRUNUX0FSUkFZX0lOSVQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdDsKKwlzdHJ1Y3QgY29tbWl0X2RlcHRoIGRlcHRoczsKKworCWluaXRfY29tbWl0X2RlcHRoKCZkZXB0aHMpOworCXdoaWxlIChjb21taXQgfHwgaSA8IGhlYWRzLT5uciB8fCBzdGFjay5ucikgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJCWlmICghY29tbWl0KSB7CisJCQlpZiAoaSA8IGhlYWRzLT5ucikgeworCQkJCWludCAqKmRlcHRoX3Nsb3Q7CisJCQkJY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKikKKwkJCQkJZGVyZWZfdGFnKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJICBoZWFkcy0+b2JqZWN0c1tpKytdLml0ZW0sCisJCQkJCQkgIE5VTEwsIDApOworCQkJCWlmICghY29tbWl0IHx8IGNvbW1pdC0+b2JqZWN0LnR5cGUgIT0gT0JKX0NPTU1JVCkgeworCQkJCQljb21taXQgPSBOVUxMOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZGVwdGhfc2xvdCA9IGNvbW1pdF9kZXB0aF9hdCgmZGVwdGhzLCBjb21taXQpOworCQkJCWlmICghKmRlcHRoX3Nsb3QpCisJCQkJCSpkZXB0aF9zbG90ID0geG1hbGxvYyhzaXplb2YoaW50KSk7CisJCQkJKipkZXB0aF9zbG90ID0gMDsKKwkJCQljdXJfZGVwdGggPSAwOworCQkJfSBlbHNlIHsKKwkJCQljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKQorCQkJCQlvYmplY3RfYXJyYXlfcG9wKCZzdGFjayk7CisJCQkJY3VyX2RlcHRoID0gKipjb21taXRfZGVwdGhfYXQoJmRlcHRocywgY29tbWl0KTsKKwkJCX0KKwkJfQorCQlwYXJzZV9jb21taXRfb3JfZGllKGNvbW1pdCk7CisJCWN1cl9kZXB0aCsrOworCQlpZiAoKGRlcHRoICE9IElORklOSVRFX0RFUFRIICYmIGN1cl9kZXB0aCA+PSBkZXB0aCkgfHwKKwkJICAgIChpc19yZXBvc2l0b3J5X3NoYWxsb3codGhlX3JlcG9zaXRvcnkpICYmICFjb21taXQtPnBhcmVudHMgJiYKKwkJICAgICAoZ3JhZnQgPSBsb29rdXBfY29tbWl0X2dyYWZ0KHRoZV9yZXBvc2l0b3J5LCAmY29tbWl0LT5vYmplY3Qub2lkKSkgIT0gTlVMTCAmJgorCQkgICAgIGdyYWZ0LT5ucl9wYXJlbnQgPCAwKSkgeworCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgJnJlc3VsdCk7CisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBzaGFsbG93X2ZsYWc7CisJCQljb21taXQgPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gbm90X3NoYWxsb3dfZmxhZzsKKwkJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzLCBjb21taXQgPSBOVUxMOyBwOyBwID0gcC0+bmV4dCkgeworCQkJaW50ICoqZGVwdGhfc2xvdCA9IGNvbW1pdF9kZXB0aF9hdCgmZGVwdGhzLCBwLT5pdGVtKTsKKwkJCWlmICghKmRlcHRoX3Nsb3QpIHsKKwkJCQkqZGVwdGhfc2xvdCA9IHhtYWxsb2Moc2l6ZW9mKGludCkpOworCQkJCSoqZGVwdGhfc2xvdCA9IGN1cl9kZXB0aDsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGN1cl9kZXB0aCA+PSAqKmRlcHRoX3Nsb3QpCisJCQkJCWNvbnRpbnVlOworCQkJCSoqZGVwdGhfc2xvdCA9IGN1cl9kZXB0aDsKKwkJCX0KKwkJCWlmIChwLT5uZXh0KQorCQkJCWFkZF9vYmplY3RfYXJyYXkoJnAtPml0ZW0tPm9iamVjdCwKKwkJCQkJCU5VTEwsICZzdGFjayk7CisJCQllbHNlIHsKKwkJCQljb21taXQgPSBwLT5pdGVtOworCQkJCWN1cl9kZXB0aCA9ICoqY29tbWl0X2RlcHRoX2F0KCZkZXB0aHMsIGNvbW1pdCk7CisJCQl9CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IGRlcHRocy5zbGFiX2NvdW50OyBpKyspIHsKKwkJaW50IGo7CisKKwkJaWYgKCFkZXB0aHMuc2xhYltpXSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgZGVwdGhzLnNsYWJfc2l6ZTsgaisrKQorCQkJZnJlZShkZXB0aHMuc2xhYltpXVtqXSk7CisJfQorCWNsZWFyX2NvbW1pdF9kZXB0aCgmZGVwdGhzKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqZGF0YSkKK3sKKwljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCBkYXRhKTsKK30KKworLyoKKyAqIEdpdmVuIHJldi1saXN0IGFyZ3VtZW50cywgcnVuIHJldi1saXN0LiBBbGwgcmVhY2hhYmxlIGNvbW1pdHMKKyAqIGV4Y2VwdCBib3JkZXIgb25lcyBhcmUgbWFya2VkIHdpdGggbm90X3NoYWxsb3dfZmxhZy4gQm9yZGVyIGNvbW1pdHMKKyAqIGFyZSBtYXJrZWQgd2l0aCBzaGFsbG93X2ZsYWcuIFRoZSBsaXN0IG9mIGJvcmRlci9zaGFsbG93IGNvbW1pdHMKKyAqIGFyZSBhbHNvIHJldHVybmVkLgorICovCitzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9zaGFsbG93X2NvbW1pdHNfYnlfcmV2X2xpc3QoaW50IGFjLCBjb25zdCBjaGFyICoqYXYsCisJCQkJCQkgICAgaW50IHNoYWxsb3dfZmxhZywKKwkJCQkJCSAgICBpbnQgbm90X3NoYWxsb3dfZmxhZykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdCA9IE5VTEwsICpwOworCXN0cnVjdCBjb21taXRfbGlzdCAqbm90X3NoYWxsb3dfbGlzdCA9IE5VTEw7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJaW50IGJvdGhfZmxhZ3MgPSBzaGFsbG93X2ZsYWcgfCBub3Rfc2hhbGxvd19mbGFnOworCisJLyoKKwkgKiBTSEFMTE9XIChleGNsdWRlZCkgYW5kIE5PVF9TSEFMTE9XIChpbmNsdWRlZCkgc2hvdWxkIG5vdCBiZQorCSAqIHNldCBhdCB0aGlzIHBvaW50LiBCdXQgYmV0dGVyIGJlIHNhZmUgdGhhbiBzb3JyeS4KKwkgKi8KKwljbGVhcl9vYmplY3RfZmxhZ3MoYm90aF9mbGFncyk7CisKKwlpc19yZXBvc2l0b3J5X3NoYWxsb3codGhlX3JlcG9zaXRvcnkpOyAvKiBtYWtlIHN1cmUgc2hhbGxvd3MgYXJlIHJlYWQgKi8KKworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXZzLCBOVUxMKTsKKwlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOworCXNldHVwX3JldmlzaW9ucyhhYywgYXYsICZyZXZzLCBOVUxMKTsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisJdHJhdmVyc2VfY29tbWl0X2xpc3QoJnJldnMsIHNob3dfY29tbWl0LCBOVUxMLCAmbm90X3NoYWxsb3dfbGlzdCk7CisKKwlpZiAoIW5vdF9zaGFsbG93X2xpc3QpCisJCWRpZSgibm8gY29tbWl0cyBzZWxlY3RlZCBmb3Igc2hhbGxvdyByZXF1ZXN0cyIpOworCisJLyogTWFyayBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgYXMgTk9UX1NIQUxMT1cgKi8KKwlmb3IgKHAgPSBub3Rfc2hhbGxvd19saXN0OyBwOyBwID0gcC0+bmV4dCkKKwkJcC0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IG5vdF9zaGFsbG93X2ZsYWc7CisKKwkvKgorCSAqIG1hcmsgYm9yZGVyIGNvbW1pdHMgU0hBTExPVyArIE5PVF9TSEFMTE9XLgorCSAqIFdlIGNhbm5vdCBjbGVhciBOT1RfU0hBTExPVyByaWdodCBub3cuIEltYWdpbmUgYm9yZGVyCisJICogY29tbWl0IEEgaXMgcHJvY2Vzc2VkIGZpcnN0LCB0aGVuIGNvbW1pdCBCLCB3aG9zZSBwYXJlbnQgaXMKKwkgKiBBLCBsYXRlci4gSWYgTk9UX1NIQUxMT1cgb24gQSBpcyBjbGVhcmVkIGF0IHN0ZXAgMSwgQgorCSAqIGl0c2VsZiBpcyBjb25zaWRlcmVkIGJvcmRlciBhdCBzdGVwIDIsIHdoaWNoIGlzIGluY29ycmVjdC4KKwkgKi8KKwlmb3IgKHAgPSBub3Rfc2hhbGxvd19saXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gcC0+aXRlbTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisKKwkJaWYgKHBhcnNlX2NvbW1pdChjKSkKKwkJCWRpZSgidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIsCisJCQkgICAgb2lkX3RvX2hleCgmYy0+b2JqZWN0Lm9pZCkpOworCisJCWZvciAocGFyZW50ID0gYy0+cGFyZW50czsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpCisJCQlpZiAoIShwYXJlbnQtPml0ZW0tPm9iamVjdC5mbGFncyAmIG5vdF9zaGFsbG93X2ZsYWcpKSB7CisJCQkJYy0+b2JqZWN0LmZsYWdzIHw9IHNoYWxsb3dfZmxhZzsKKwkJCQljb21taXRfbGlzdF9pbnNlcnQoYywgJnJlc3VsdCk7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCWZyZWVfY29tbWl0X2xpc3Qobm90X3NoYWxsb3dfbGlzdCk7CisKKwkvKgorCSAqIE5vdyB3ZSBjYW4gY2xlYW4gdXAgTk9UX1NIQUxMT1cgb24gYm9yZGVyIGNvbW1pdHMuIEhhdmluZworCSAqIGJvdGggZmxhZ3Mgc2V0IGNhbiBjb25mdXNlIHRoZSBjYWxsZXIuCisJICovCisJZm9yIChwID0gcmVzdWx0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvID0gJnAtPml0ZW0tPm9iamVjdDsKKwkJaWYgKChvLT5mbGFncyAmIGJvdGhfZmxhZ3MpID09IGJvdGhfZmxhZ3MpCisJCQlvLT5mbGFncyAmPSB+bm90X3NoYWxsb3dfZmxhZzsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfc2hhbGxvd19maWxlX2Zvcl91cGRhdGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJaWYgKHItPnBhcnNlZF9vYmplY3RzLT5pc19zaGFsbG93ID09IC0xKQorCQlCVUcoInNoYWxsb3cgbXVzdCBiZSBpbml0aWFsaXplZCBieSBub3ciKTsKKworCWlmICghc3RhdF92YWxpZGl0eV9jaGVjayhyLT5wYXJzZWRfb2JqZWN0cy0+c2hhbGxvd19zdGF0LAorCQkJCSBnaXRfcGF0aF9zaGFsbG93KHIpKSkKKwkJZGllKCJzaGFsbG93IGZpbGUgaGFzIGNoYW5nZWQgc2luY2Ugd2UgcmVhZCBpdCIpOworfQorCisjZGVmaW5lIFNFRU5fT05MWSAxCisjZGVmaW5lIFZFUkJPU0UgICAyCisjZGVmaW5lIFFVSUNLIDQKKworc3RydWN0IHdyaXRlX3NoYWxsb3dfZGF0YSB7CisJc3RydWN0IHN0cmJ1ZiAqb3V0OworCWludCB1c2VfcGFja19wcm90b2NvbDsKKwlpbnQgY291bnQ7CisJdW5zaWduZWQgZmxhZ3M7Cit9OworCitzdGF0aWMgaW50IHdyaXRlX29uZV9zaGFsbG93KGNvbnN0IHN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0LCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCB3cml0ZV9zaGFsbG93X2RhdGEgKmRhdGEgPSBjYl9kYXRhOworCWNvbnN0IGNoYXIgKmhleCA9IG9pZF90b19oZXgoJmdyYWZ0LT5vaWQpOworCWlmIChncmFmdC0+bnJfcGFyZW50ICE9IC0xKQorCQlyZXR1cm4gMDsKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBRVUlDSykgeworCQlpZiAoIWhhc19vYmplY3RfZmlsZSgmZ3JhZnQtPm9pZCkpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGRhdGEtPmZsYWdzICYgU0VFTl9PTkxZKSB7CisJCXN0cnVjdCBjb21taXQgKmMgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCAmZ3JhZnQtPm9pZCk7CisJCWlmICghYyB8fCAhKGMtPm9iamVjdC5mbGFncyAmIFNFRU4pKSB7CisJCQlpZiAoZGF0YS0+ZmxhZ3MgJiBWRVJCT1NFKQorCQkJCXByaW50ZigiUmVtb3ZpbmcgJXMgZnJvbSAuZ2l0L3NoYWxsb3dcbiIsCisJCQkJICAgICAgIG9pZF90b19oZXgoJmMtPm9iamVjdC5vaWQpKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCWRhdGEtPmNvdW50Kys7CisJaWYgKGRhdGEtPnVzZV9wYWNrX3Byb3RvY29sKQorCQlwYWNrZXRfYnVmX3dyaXRlKGRhdGEtPm91dCwgInNoYWxsb3cgJXMiLCBoZXgpOworCWVsc2UgeworCQlzdHJidWZfYWRkc3RyKGRhdGEtPm91dCwgaGV4KTsKKwkJc3RyYnVmX2FkZGNoKGRhdGEtPm91dCwgJ1xuJyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX3NoYWxsb3dfY29tbWl0c18xKHN0cnVjdCBzdHJidWYgKm91dCwgaW50IHVzZV9wYWNrX3Byb3RvY29sLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBvaWRfYXJyYXkgKmV4dHJhLAorCQkJCSAgIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCB3cml0ZV9zaGFsbG93X2RhdGEgZGF0YTsKKwlpbnQgaTsKKwlkYXRhLm91dCA9IG91dDsKKwlkYXRhLnVzZV9wYWNrX3Byb3RvY29sID0gdXNlX3BhY2tfcHJvdG9jb2w7CisJZGF0YS5jb3VudCA9IDA7CisJZGF0YS5mbGFncyA9IGZsYWdzOworCWZvcl9lYWNoX2NvbW1pdF9ncmFmdCh3cml0ZV9vbmVfc2hhbGxvdywgJmRhdGEpOworCWlmICghZXh0cmEpCisJCXJldHVybiBkYXRhLmNvdW50OworCWZvciAoaSA9IDA7IGkgPCBleHRyYS0+bnI7IGkrKykgeworCQlzdHJidWZfYWRkc3RyKG91dCwgb2lkX3RvX2hleChleHRyYS0+b2lkICsgaSkpOworCQlzdHJidWZfYWRkY2gob3V0LCAnXG4nKTsKKwkJZGF0YS5jb3VudCsrOworCX0KKwlyZXR1cm4gZGF0YS5jb3VudDsKK30KKworaW50IHdyaXRlX3NoYWxsb3dfY29tbWl0cyhzdHJ1Y3Qgc3RyYnVmICpvdXQsIGludCB1c2VfcGFja19wcm90b2NvbCwKKwkJCSAgY29uc3Qgc3RydWN0IG9pZF9hcnJheSAqZXh0cmEpCit7CisJcmV0dXJuIHdyaXRlX3NoYWxsb3dfY29tbWl0c18xKG91dCwgdXNlX3BhY2tfcHJvdG9jb2wsIGV4dHJhLCAwKTsKK30KKworY29uc3QgY2hhciAqc2V0dXBfdGVtcG9yYXJ5X3NoYWxsb3coY29uc3Qgc3RydWN0IG9pZF9hcnJheSAqZXh0cmEpCit7CisJc3RydWN0IHRlbXBmaWxlICp0ZW1wOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmICh3cml0ZV9zaGFsbG93X2NvbW1pdHMoJnNiLCAwLCBleHRyYSkpIHsKKwkJdGVtcCA9IHhta3NfdGVtcGZpbGUoZ2l0X3BhdGgoInNoYWxsb3dfWFhYWFhYIikpOworCisJCWlmICh3cml0ZV9pbl9mdWxsKHRlbXAtPmZkLCBzYi5idWYsIHNiLmxlbikgPCAwIHx8CisJCSAgICBjbG9zZV90ZW1wZmlsZV9nZW50bHkodGVtcCkgPCAwKQorCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gd3JpdGUgdG8gJXMiLAorCQkJCSAgZ2V0X3RlbXBmaWxlX3BhdGgodGVtcCkpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm4gZ2V0X3RlbXBmaWxlX3BhdGgodGVtcCk7CisJfQorCS8qCisJICogaXNfcmVwb3NpdG9yeV9zaGFsbG93KCkgc2VlcyBlbXB0eSBzdHJpbmcgYXMgIm5vIHNoYWxsb3cKKwkgKiBmaWxlIi4KKwkgKi8KKwlyZXR1cm4gIiI7Cit9CisKK3ZvaWQgc2V0dXBfYWx0ZXJuYXRlX3NoYWxsb3coc3RydWN0IHNoYWxsb3dfbG9jayAqc2hhbGxvd19sb2NrLAorCQkJICAgICBjb25zdCBjaGFyICoqYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG9pZF9hcnJheSAqZXh0cmEpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCBmZDsKKworCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmc2hhbGxvd19sb2NrLT5sb2NrLAorCQkJCSAgICAgICBnaXRfcGF0aF9zaGFsbG93KHRoZV9yZXBvc2l0b3J5KSwKKwkJCQkgICAgICAgTE9DS19ESUVfT05fRVJST1IpOworCWNoZWNrX3NoYWxsb3dfZmlsZV9mb3JfdXBkYXRlKHRoZV9yZXBvc2l0b3J5KTsKKwlpZiAod3JpdGVfc2hhbGxvd19jb21taXRzKCZzYiwgMCwgZXh0cmEpKSB7CisJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBzYi5idWYsIHNiLmxlbikgPCAwKQorCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gd3JpdGUgdG8gJXMiLAorCQkJCSAgZ2V0X2xvY2tfZmlsZV9wYXRoKCZzaGFsbG93X2xvY2stPmxvY2spKTsKKwkJKmFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPSBnZXRfbG9ja19maWxlX3BhdGgoJnNoYWxsb3dfbG9jay0+bG9jayk7CisJfSBlbHNlCisJCS8qCisJCSAqIGlzX3JlcG9zaXRvcnlfc2hhbGxvdygpIHNlZXMgZW1wdHkgc3RyaW5nIGFzICJubworCQkgKiBzaGFsbG93IGZpbGUiLgorCQkgKi8KKwkJKmFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPSAiIjsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgaW50IGFkdmVydGlzZV9zaGFsbG93X2dyYWZ0c19jYihjb25zdCBzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCwgdm9pZCAqY2IpCit7CisJaW50IGZkID0gKihpbnQgKiljYjsKKwlpZiAoZ3JhZnQtPm5yX3BhcmVudCA9PSAtMSkKKwkJcGFja2V0X3dyaXRlX2ZtdChmZCwgInNoYWxsb3cgJXNcbiIsIG9pZF90b19oZXgoJmdyYWZ0LT5vaWQpKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhZHZlcnRpc2Vfc2hhbGxvd19ncmFmdHMoaW50IGZkKQoreworCWlmICghaXNfcmVwb3NpdG9yeV9zaGFsbG93KHRoZV9yZXBvc2l0b3J5KSkKKwkJcmV0dXJuOworCWZvcl9lYWNoX2NvbW1pdF9ncmFmdChhZHZlcnRpc2Vfc2hhbGxvd19ncmFmdHNfY2IsICZmZCk7Cit9CisKKy8qCisgKiBtYXJrX3JlYWNoYWJsZV9vYmplY3RzKCkgc2hvdWxkIGhhdmUgYmVlbiBydW4gcHJpb3IgdG8gdGhpcyBhbmQgYWxsCisgKiByZWFjaGFibGUgY29tbWl0cyBtYXJrZWQgYXMgIlNFRU4iLCBleGNlcHQgd2hlbiBxdWlja19wcnVuZSBpcyBub24temVybywKKyAqIGluIHdoaWNoIGNhc2UgbGluZXMgYXJlIGV4Y2lzZWQgZnJvbSB0aGUgc2hhbGxvdyBmaWxlIGlmIHRoZXkgcmVmZXIgdG8KKyAqIGNvbW1pdHMgdGhhdCBkbyBub3QgZXhpc3QgKGFueSBsb25nZXIpLgorICovCit2b2lkIHBydW5lX3NoYWxsb3codW5zaWduZWQgb3B0aW9ucykKK3sKKwlzdHJ1Y3Qgc2hhbGxvd19sb2NrIHNoYWxsb3dfbG9jayA9IFNIQUxMT1dfTE9DS19JTklUOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBmbGFncyA9IFNFRU5fT05MWTsKKwlpbnQgZmQ7CisKKwlpZiAob3B0aW9ucyAmIFBSVU5FX1FVSUNLKQorCQlmbGFncyB8PSBRVUlDSzsKKworCWlmIChvcHRpb25zICYgUFJVTkVfU0hPV19PTkxZKSB7CisJCWZsYWdzIHw9IFZFUkJPU0U7CisJCXdyaXRlX3NoYWxsb3dfY29tbWl0c18xKCZzYiwgMCwgTlVMTCwgZmxhZ3MpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm47CisJfQorCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmc2hhbGxvd19sb2NrLmxvY2ssCisJCQkJICAgICAgIGdpdF9wYXRoX3NoYWxsb3codGhlX3JlcG9zaXRvcnkpLAorCQkJCSAgICAgICBMT0NLX0RJRV9PTl9FUlJPUik7CisJY2hlY2tfc2hhbGxvd19maWxlX2Zvcl91cGRhdGUodGhlX3JlcG9zaXRvcnkpOworCWlmICh3cml0ZV9zaGFsbG93X2NvbW1pdHNfMSgmc2IsIDAsIE5VTEwsIGZsYWdzKSkgeworCQlpZiAod3JpdGVfaW5fZnVsbChmZCwgc2IuYnVmLCBzYi5sZW4pIDwgMCkKKwkJCWRpZV9lcnJubygiZmFpbGVkIHRvIHdyaXRlIHRvICVzIiwKKwkJCQkgIGdldF9sb2NrX2ZpbGVfcGF0aCgmc2hhbGxvd19sb2NrLmxvY2spKTsKKwkJY29tbWl0X3NoYWxsb3dfZmlsZSh0aGVfcmVwb3NpdG9yeSwgJnNoYWxsb3dfbG9jayk7CisJfSBlbHNlIHsKKwkJdW5saW5rKGdpdF9wYXRoX3NoYWxsb3codGhlX3JlcG9zaXRvcnkpKTsKKwkJcm9sbGJhY2tfc2hhbGxvd19maWxlKHRoZV9yZXBvc2l0b3J5LCAmc2hhbGxvd19sb2NrKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RydWN0IHRyYWNlX2tleSB0cmFjZV9zaGFsbG93ID0gVFJBQ0VfS0VZX0lOSVQoU0hBTExPVyk7CisKKy8qCisgKiBTdGVwIDEsIHNwbGl0IHNlbmRlciBzaGFsbG93IGNvbW1pdHMgaW50byAib3VycyIgYW5kICJ0aGVpcnMiCisgKiBTdGVwIDIsIGNsZWFuICJvdXJzIiBiYXNlZCBvbiAuZ2l0L3NoYWxsb3cKKyAqLwordm9pZCBwcmVwYXJlX3NoYWxsb3dfaW5mbyhzdHJ1Y3Qgc2hhbGxvd19pbmZvICppbmZvLCBzdHJ1Y3Qgb2lkX2FycmF5ICpzYSkKK3sKKwlpbnQgaTsKKwl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9zaGFsbG93LCAic2hhbGxvdzogcHJlcGFyZV9zaGFsbG93X2luZm9cbiIpOworCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKKwlpbmZvLT5zaGFsbG93ID0gc2E7CisJaWYgKCFzYSkKKwkJcmV0dXJuOworCUFMTE9DX0FSUkFZKGluZm8tPm91cnMsIHNhLT5ucik7CisJQUxMT0NfQVJSQVkoaW5mby0+dGhlaXJzLCBzYS0+bnIpOworCWZvciAoaSA9IDA7IGkgPCBzYS0+bnI7IGkrKykgeworCQlpZiAoaGFzX29iamVjdF9maWxlKHNhLT5vaWQgKyBpKSkgeworCQkJc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQ7CisJCQlncmFmdCA9IGxvb2t1cF9jb21taXRfZ3JhZnQodGhlX3JlcG9zaXRvcnksCisJCQkJCQkgICAgJnNhLT5vaWRbaV0pOworCQkJaWYgKGdyYWZ0ICYmIGdyYWZ0LT5ucl9wYXJlbnQgPCAwKQorCQkJCWNvbnRpbnVlOworCQkJaW5mby0+b3Vyc1tpbmZvLT5ucl9vdXJzKytdID0gaTsKKwkJfSBlbHNlCisJCQlpbmZvLT50aGVpcnNbaW5mby0+bnJfdGhlaXJzKytdID0gaTsKKwl9Cit9CisKK3ZvaWQgY2xlYXJfc2hhbGxvd19pbmZvKHN0cnVjdCBzaGFsbG93X2luZm8gKmluZm8pCit7CisJZnJlZShpbmZvLT5vdXJzKTsKKwlmcmVlKGluZm8tPnRoZWlycyk7Cit9CisKKy8qIFN0ZXAgNCwgcmVtb3ZlIG5vbi1leGlzdGVudCBvbmVzIGluICJ0aGVpcnMiIGFmdGVyIGdldHRpbmcgdGhlIHBhY2sgKi8KKwordm9pZCByZW1vdmVfbm9uZXhpc3RlbnRfdGhlaXJzX3NoYWxsb3coc3RydWN0IHNoYWxsb3dfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSBpbmZvLT5zaGFsbG93LT5vaWQ7CisJaW50IGksIGRzdDsKKwl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9zaGFsbG93LCAic2hhbGxvdzogcmVtb3ZlX25vbmV4aXN0ZW50X3RoZWlyc19zaGFsbG93XG4iKTsKKwlmb3IgKGkgPSBkc3QgPSAwOyBpIDwgaW5mby0+bnJfdGhlaXJzOyBpKyspIHsKKwkJaWYgKGkgIT0gZHN0KQorCQkJaW5mby0+dGhlaXJzW2RzdF0gPSBpbmZvLT50aGVpcnNbaV07CisJCWlmIChoYXNfb2JqZWN0X2ZpbGUob2lkICsgaW5mby0+dGhlaXJzW2ldKSkKKwkJCWRzdCsrOworCX0KKwlpbmZvLT5ucl90aGVpcnMgPSBkc3Q7Cit9CisKK2RlZmluZV9jb21taXRfc2xhYihyZWZfYml0bWFwLCB1aW50MzJfdCAqKTsKKworI2RlZmluZSBQT09MX1NJWkUgKDUxMiAqIDEwMjQpCisKK3N0cnVjdCBwYWludF9pbmZvIHsKKwlzdHJ1Y3QgcmVmX2JpdG1hcCByZWZfYml0bWFwOworCXVuc2lnbmVkIG5yX2JpdHM7CisJY2hhciAqKnBvb2xzOworCWNoYXIgKmZyZWUsICplbmQ7CisJdW5zaWduZWQgcG9vbF9jb3VudDsKK307CisKK3N0YXRpYyB1aW50MzJfdCAqcGFpbnRfYWxsb2Moc3RydWN0IHBhaW50X2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgbnIgPSBESVZfUk9VTkRfVVAoaW5mby0+bnJfYml0cywgMzIpOworCXVuc2lnbmVkIHNpemUgPSBuciAqIHNpemVvZih1aW50MzJfdCk7CisJdm9pZCAqcDsKKwlpZiAoIWluZm8tPnBvb2xfY291bnQgfHwgc2l6ZSA+IGluZm8tPmVuZCAtIGluZm8tPmZyZWUpIHsKKwkJaWYgKHNpemUgPiBQT09MX1NJWkUpCisJCQlCVUcoInBvb2wgc2l6ZSB0b28gc21hbGwgZm9yICVkIGluIHBhaW50X2FsbG9jKCkiLAorCQkJICAgIHNpemUpOworCQlpbmZvLT5wb29sX2NvdW50Kys7CisJCVJFQUxMT0NfQVJSQVkoaW5mby0+cG9vbHMsIGluZm8tPnBvb2xfY291bnQpOworCQlpbmZvLT5mcmVlID0geG1hbGxvYyhQT09MX1NJWkUpOworCQlpbmZvLT5wb29sc1tpbmZvLT5wb29sX2NvdW50IC0gMV0gPSBpbmZvLT5mcmVlOworCQlpbmZvLT5lbmQgPSBpbmZvLT5mcmVlICsgUE9PTF9TSVpFOworCX0KKwlwID0gaW5mby0+ZnJlZTsKKwlpbmZvLT5mcmVlICs9IHNpemU7CisJcmV0dXJuIHA7Cit9CisKKy8qCisgKiBHaXZlbiBhIGNvbW1pdCBTSEEtMSwgd2FsayBkb3duIHRvIHBhcmVudHMgdW50aWwgZWl0aGVyIFNFRU4sCisgKiBVTklOVEVSRVNUSU5HIG9yIEJPVFRPTSBpcyBoaXQuIFNldCB0aGUgaWQtdGggYml0IGluIHJlZl9iaXRtYXAgZm9yCisgKiBhbGwgd2Fsa2VkIGNvbW1pdHMuCisgKi8KK3N0YXRpYyB2b2lkIHBhaW50X2Rvd24oc3RydWN0IHBhaW50X2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBpZCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbnI7CisJc3RydWN0IGNvbW1pdF9saXN0ICpoZWFkID0gTlVMTDsKKwlpbnQgYml0bWFwX25yID0gRElWX1JPVU5EX1VQKGluZm8tPm5yX2JpdHMsIDMyKTsKKwlzaXplX3QgYml0bWFwX3NpemUgPSBzdF9tdWx0KHNpemVvZih1aW50MzJfdCksIGJpdG1hcF9ucik7CisJc3RydWN0IGNvbW1pdCAqYyA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseSh0aGVfcmVwb3NpdG9yeSwgb2lkLAorCQkJCQkJCSAgMSk7CisJdWludDMyX3QgKnRtcDsgLyogdG8gYmUgZnJlZWQgYmVmb3JlIHJldHVybiAqLworCXVpbnQzMl90ICpiaXRtYXA7CisKKwlpZiAoIWMpCisJCXJldHVybjsKKworCXRtcCA9IHhtYWxsb2MoYml0bWFwX3NpemUpOworCWJpdG1hcCA9IHBhaW50X2FsbG9jKGluZm8pOworCW1lbXNldChiaXRtYXAsIDAsIGJpdG1hcF9zaXplKTsKKwliaXRtYXBbaWQgLyAzMl0gfD0gKDFVIDw8IChpZCAlIDMyKSk7CisJY29tbWl0X2xpc3RfaW5zZXJ0KGMsICZoZWFkKTsKKwl3aGlsZSAoaGVhZCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJCXN0cnVjdCBjb21taXQgKmMgPSBwb3BfY29tbWl0KCZoZWFkKTsKKwkJdWludDMyX3QgKipyZWZzID0gcmVmX2JpdG1hcF9hdCgmaW5mby0+cmVmX2JpdG1hcCwgYyk7CisKKwkJLyogWFhYIGNoZWNrICJVTklOVEVSRVNUSU5HIiBmcm9tIHBhY2sgYml0bWFwcyBpZiBhdmFpbGFibGUgKi8KKwkJaWYgKGMtPm9iamVjdC5mbGFncyAmIChTRUVOIHwgVU5JTlRFUkVTVElORykpCisJCQljb250aW51ZTsKKwkJZWxzZQorCQkJYy0+b2JqZWN0LmZsYWdzIHw9IFNFRU47CisKKwkJaWYgKCpyZWZzID09IE5VTEwpCisJCQkqcmVmcyA9IGJpdG1hcDsKKwkJZWxzZSB7CisJCQltZW1jcHkodG1wLCAqcmVmcywgYml0bWFwX3NpemUpOworCQkJZm9yIChpID0gMDsgaSA8IGJpdG1hcF9ucjsgaSsrKQorCQkJCXRtcFtpXSB8PSBiaXRtYXBbaV07CisJCQlpZiAobWVtY21wKHRtcCwgKnJlZnMsIGJpdG1hcF9zaXplKSkgeworCQkJCSpyZWZzID0gcGFpbnRfYWxsb2MoaW5mbyk7CisJCQkJbWVtY3B5KCpyZWZzLCB0bXAsIGJpdG1hcF9zaXplKTsKKwkJCX0KKwkJfQorCisJCWlmIChjLT5vYmplY3QuZmxhZ3MgJiBCT1RUT00pCisJCQljb250aW51ZTsKKworCQlpZiAocGFyc2VfY29tbWl0KGMpKQorCQkJZGllKCJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIiwKKwkJCSAgICBvaWRfdG9faGV4KCZjLT5vYmplY3Qub2lkKSk7CisKKwkJZm9yIChwID0gYy0+cGFyZW50czsgcDsgcCA9IHAtPm5leHQpIHsKKwkJCWlmIChwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBTRUVOKQorCQkJCWNvbnRpbnVlOworCQkJY29tbWl0X2xpc3RfaW5zZXJ0KHAtPml0ZW0sICZoZWFkKTsKKwkJfQorCX0KKworCW5yID0gZ2V0X21heF9vYmplY3RfaW5kZXgoKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvID0gZ2V0X2luZGV4ZWRfb2JqZWN0KGkpOworCQlpZiAobyAmJiBvLT50eXBlID09IE9CSl9DT01NSVQpCisJCQlvLT5mbGFncyAmPSB+U0VFTjsKKwl9CisKKwlmcmVlKHRtcCk7Cit9CisKK3N0YXRpYyBpbnQgbWFya191bmludGVyZXN0aW5nKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJICAgICAgIG9pZCwgMSk7CisJaWYgKCFjb21taXQpCisJCXJldHVybiAwOworCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJbWFya19wYXJlbnRzX3VuaW50ZXJlc3RpbmcoY29tbWl0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcG9zdF9hc3NpZ25fc2hhbGxvdyhzdHJ1Y3Qgc2hhbGxvd19pbmZvICppbmZvLAorCQkJCXN0cnVjdCByZWZfYml0bWFwICpyZWZfYml0bWFwLAorCQkJCWludCAqcmVmX3N0YXR1cyk7CisvKgorICogU3RlcCA2KCs3KSwgYXNzb2NpYXRlIHNoYWxsb3cgY29tbWl0cyB3aXRoIG5ldyByZWZzCisgKgorICogaW5mby0+cmVmIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBJZiB1c2VkIGlzIG5vdCBOVUxMLCBpdCdzIGFuIGFycmF5IG9mIGluZm8tPnNoYWxsb3ctPm5yCisgKiBiaXRtYXBzLiBUaGUgbi10aCBiaXQgc2V0IGluIHRoZSBtLXRoIGJpdG1hcCBpZiByZWZbbl0gbmVlZHMgdGhlCisgKiBtLXRoIHNoYWxsb3cgY29tbWl0IGZyb20gaW5mby0+c2hhbGxvdy4KKyAqCisgKiBJZiB1c2VkIGlzIE5VTEwsICJvdXJzIiBhbmQgInRoZWlycyIgYXJlIHVwZGF0ZWQuIEFuZCBpZiByZWZfc3RhdHVzCisgKiBpcyBub3QgTlVMTCBpdCdzIGFuIGFycmF5IG9mIHJlZi0+bnIgaW50cy4gcmVmX3N0YXR1c1tpXSBpcyB0cnVlIGlmCisgKiB0aGUgcmVmIG5lZWRzIHNvbWUgc2hhbGxvdyBjb21taXRzIGZyb20gZWl0aGVyIGluZm8tPm91cnMgb3IKKyAqIGluZm8tPnRoZWlycy4KKyAqLwordm9pZCBhc3NpZ25fc2hhbGxvd19jb21taXRzX3RvX3JlZnMoc3RydWN0IHNoYWxsb3dfaW5mbyAqaW5mbywKKwkJCQkgICAgdWludDMyX3QgKip1c2VkLCBpbnQgKnJlZl9zdGF0dXMpCit7CisJc3RydWN0IG9iamVjdF9pZCAqb2lkID0gaW5mby0+c2hhbGxvdy0+b2lkOworCXN0cnVjdCBvaWRfYXJyYXkgKnJlZiA9IGluZm8tPnJlZjsKKwl1bnNpZ25lZCBpbnQgaSwgbnI7CisJaW50ICpzaGFsbG93LCBucl9zaGFsbG93ID0gMDsKKwlzdHJ1Y3QgcGFpbnRfaW5mbyBwaTsKKworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX3NoYWxsb3csICJzaGFsbG93OiBhc3NpZ25fc2hhbGxvd19jb21taXRzX3RvX3JlZnNcbiIpOworCUFMTE9DX0FSUkFZKHNoYWxsb3csIGluZm8tPm5yX291cnMgKyBpbmZvLT5ucl90aGVpcnMpOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5ucl9vdXJzOyBpKyspCisJCXNoYWxsb3dbbnJfc2hhbGxvdysrXSA9IGluZm8tPm91cnNbaV07CisJZm9yIChpID0gMDsgaSA8IGluZm8tPm5yX3RoZWlyczsgaSsrKQorCQlzaGFsbG93W25yX3NoYWxsb3crK10gPSBpbmZvLT50aGVpcnNbaV07CisKKwkvKgorCSAqIFByZXBhcmUgdGhlIGNvbW1pdCBncmFwaCB0byB0cmFjayB3aGF0IHJlZnMgY2FuIHJlYWNoIHdoYXQKKwkgKiAobmV3KSBzaGFsbG93IGNvbW1pdHMuCisJICovCisJbnIgPSBnZXRfbWF4X29iamVjdF9pbmRleCgpOworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm8gPSBnZXRfaW5kZXhlZF9vYmplY3QoaSk7CisJCWlmICghbyB8fCBvLT50eXBlICE9IE9CSl9DT01NSVQpCisJCQljb250aW51ZTsKKworCQlvLT5mbGFncyAmPSB+KFVOSU5URVJFU1RJTkcgfCBCT1RUT00gfCBTRUVOKTsKKwl9CisKKwltZW1zZXQoJnBpLCAwLCBzaXplb2YocGkpKTsKKwlpbml0X3JlZl9iaXRtYXAoJnBpLnJlZl9iaXRtYXApOworCXBpLm5yX2JpdHMgPSByZWYtPm5yOworCisJLyoKKwkgKiAiLS1ub3QgLS1hbGwiIHRvIGN1dCBzaG9ydCB0aGUgdHJhdmVyc2FsIGlmIG5ldyByZWZzCisJICogY29ubmVjdCB0byBvbGQgcmVmcy4gSWYgbm90IChlLmcuIGZvcmNlIHJlZiB1cGRhdGVzKSBpdCdsbAorCSAqIGhhdmUgdG8gZ28gZG93biB0byB0aGUgY3VycmVudCBzaGFsbG93IGNvbW1pdHMuCisJICovCisJaGVhZF9yZWYobWFya191bmludGVyZXN0aW5nLCBOVUxMKTsKKwlmb3JfZWFjaF9yZWYobWFya191bmludGVyZXN0aW5nLCBOVUxMKTsKKworCS8qIE1hcmsgcG90ZW50aWFsIGJvdHRvbXMgc28gd2Ugd29uJ3QgZ28gb3V0IG9mIGJvdW5kICovCisJZm9yIChpID0gMDsgaSA8IG5yX3NoYWxsb3c7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gbG9va3VwX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSAmb2lkW3NoYWxsb3dbaV1dKTsKKwkJYy0+b2JqZWN0LmZsYWdzIHw9IEJPVFRPTTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVmLT5ucjsgaSsrKQorCQlwYWludF9kb3duKCZwaSwgcmVmLT5vaWQgKyBpLCBpKTsKKworCWlmICh1c2VkKSB7CisJCWludCBiaXRtYXBfc2l6ZSA9IERJVl9ST1VORF9VUChwaS5ucl9iaXRzLCAzMikgKiBzaXplb2YodWludDMyX3QpOworCQltZW1zZXQodXNlZCwgMCwgc2l6ZW9mKCp1c2VkKSAqIGluZm8tPnNoYWxsb3ctPm5yKTsKKwkJZm9yIChpID0gMDsgaSA8IG5yX3NoYWxsb3c7IGkrKykgeworCQkJY29uc3Qgc3RydWN0IGNvbW1pdCAqYyA9IGxvb2t1cF9jb21taXQodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJICAgICAgICZvaWRbc2hhbGxvd1tpXV0pOworCQkJdWludDMyX3QgKiptYXAgPSByZWZfYml0bWFwX2F0KCZwaS5yZWZfYml0bWFwLCBjKTsKKwkJCWlmICgqbWFwKQorCQkJCXVzZWRbc2hhbGxvd1tpXV0gPSB4bWVtZHVweigqbWFwLCBiaXRtYXBfc2l6ZSk7CisJCX0KKwkJLyoKKwkJICogdW5yZWFjaGFibGUgc2hhbGxvdyBjb21taXRzIGFyZSBub3QgcmVtb3ZlZCBmcm9tCisJCSAqICJvdXJzIiBhbmQgInRoZWlycyIuIFRoZSB1c2VyIGlzIHN1cHBvc2VkIHRvIHJ1bgorCQkgKiBzdGVwIDcgb24gZXZlcnkgcmVmIHNlcGFyYXRlbHkgYW5kIG5vdCB0cnVzdCAib3VycyIKKwkJICogYW5kICJ0aGVpcnMiIGFueSBtb3JlLgorCQkgKi8KKwl9IGVsc2UKKwkJcG9zdF9hc3NpZ25fc2hhbGxvdyhpbmZvLCAmcGkucmVmX2JpdG1hcCwgcmVmX3N0YXR1cyk7CisKKwljbGVhcl9yZWZfYml0bWFwKCZwaS5yZWZfYml0bWFwKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGkucG9vbF9jb3VudDsgaSsrKQorCQlmcmVlKHBpLnBvb2xzW2ldKTsKKwlmcmVlKHBpLnBvb2xzKTsKKwlmcmVlKHNoYWxsb3cpOworfQorCitzdHJ1Y3QgY29tbWl0X2FycmF5IHsKKwlzdHJ1Y3QgY29tbWl0ICoqY29tbWl0czsKKwlpbnQgbnIsIGFsbG9jOworfTsKKworc3RhdGljIGludCBhZGRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBjb21taXRfYXJyYXkgKmNhID0gY2JfZGF0YTsKKwlBTExPQ19HUk9XKGNhLT5jb21taXRzLCBjYS0+bnIgKyAxLCBjYS0+YWxsb2MpOworCWNhLT5jb21taXRzW2NhLT5ucl0gPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJICAgICBvaWQsIDEpOworCWlmIChjYS0+Y29tbWl0c1tjYS0+bnJdKQorCQljYS0+bnIrKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3JlZnN0YXR1cyhpbnQgKnJlZl9zdGF0dXMsIGludCBuciwgdWludDMyX3QgKmJpdG1hcCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpZiAoIXJlZl9zdGF0dXMpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKwkJaWYgKGJpdG1hcFtpIC8gMzJdICYgKDFVIDw8IChpICUgMzIpKSkKKwkJCXJlZl9zdGF0dXNbaV0rKzsKK30KKworLyoKKyAqIFN0ZXAgNywgcmVhY2hhYmlsaXR5IHRlc3Qgb24gIm91cnMiIGF0IGNvbW1pdCBsZXZlbAorICovCitzdGF0aWMgdm9pZCBwb3N0X2Fzc2lnbl9zaGFsbG93KHN0cnVjdCBzaGFsbG93X2luZm8gKmluZm8sCisJCQkJc3RydWN0IHJlZl9iaXRtYXAgKnJlZl9iaXRtYXAsCisJCQkJaW50ICpyZWZfc3RhdHVzKQoreworCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9IGluZm8tPnNoYWxsb3ctPm9pZDsKKwlzdHJ1Y3QgY29tbWl0ICpjOworCXVpbnQzMl90ICoqYml0bWFwOworCWludCBkc3QsIGksIGo7CisJaW50IGJpdG1hcF9uciA9IERJVl9ST1VORF9VUChpbmZvLT5yZWYtPm5yLCAzMik7CisJc3RydWN0IGNvbW1pdF9hcnJheSBjYTsKKworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX3NoYWxsb3csICJzaGFsbG93OiBwb3N0X2Fzc2lnbl9zaGFsbG93XG4iKTsKKwlpZiAocmVmX3N0YXR1cykKKwkJbWVtc2V0KHJlZl9zdGF0dXMsIDAsIHNpemVvZigqcmVmX3N0YXR1cykgKiBpbmZvLT5yZWYtPm5yKTsKKworCS8qIFJlbW92ZSB1bnJlYWNoYWJsZSBzaGFsbG93IGNvbW1pdHMgZnJvbSAidGhlaXJzIiAqLworCWZvciAoaSA9IGRzdCA9IDA7IGkgPCBpbmZvLT5ucl90aGVpcnM7IGkrKykgeworCQlpZiAoaSAhPSBkc3QpCisJCQlpbmZvLT50aGVpcnNbZHN0XSA9IGluZm8tPnRoZWlyc1tpXTsKKwkJYyA9IGxvb2t1cF9jb21taXQodGhlX3JlcG9zaXRvcnksICZvaWRbaW5mby0+dGhlaXJzW2ldXSk7CisJCWJpdG1hcCA9IHJlZl9iaXRtYXBfYXQocmVmX2JpdG1hcCwgYyk7CisJCWlmICghKmJpdG1hcCkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgYml0bWFwX25yOyBqKyspCisJCQlpZiAoYml0bWFwWzBdW2pdKSB7CisJCQkJdXBkYXRlX3JlZnN0YXR1cyhyZWZfc3RhdHVzLCBpbmZvLT5yZWYtPm5yLCAqYml0bWFwKTsKKwkJCQlkc3QrKzsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisJaW5mby0+bnJfdGhlaXJzID0gZHN0OworCisJbWVtc2V0KCZjYSwgMCwgc2l6ZW9mKGNhKSk7CisJaGVhZF9yZWYoYWRkX3JlZiwgJmNhKTsKKwlmb3JfZWFjaF9yZWYoYWRkX3JlZiwgJmNhKTsKKworCS8qIFJlbW92ZSB1bnJlYWNoYWJsZSBzaGFsbG93IGNvbW1pdHMgZnJvbSAib3VycyIgKi8KKwlmb3IgKGkgPSBkc3QgPSAwOyBpIDwgaW5mby0+bnJfb3VyczsgaSsrKSB7CisJCWlmIChpICE9IGRzdCkKKwkJCWluZm8tPm91cnNbZHN0XSA9IGluZm8tPm91cnNbaV07CisJCWMgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCAmb2lkW2luZm8tPm91cnNbaV1dKTsKKwkJYml0bWFwID0gcmVmX2JpdG1hcF9hdChyZWZfYml0bWFwLCBjKTsKKwkJaWYgKCEqYml0bWFwKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IDA7IGogPCBiaXRtYXBfbnI7IGorKykKKwkJCWlmIChiaXRtYXBbMF1bal0gJiYKKwkJCSAgICAvKiBTdGVwIDcsIHJlYWNoYWJpbGl0eSB0ZXN0IGF0IGNvbW1pdCBsZXZlbCAqLworCQkJICAgICFpbl9tZXJnZV9iYXNlc19tYW55KGMsIGNhLm5yLCBjYS5jb21taXRzKSkgeworCQkJCXVwZGF0ZV9yZWZzdGF0dXMocmVmX3N0YXR1cywgaW5mby0+cmVmLT5uciwgKmJpdG1hcCk7CisJCQkJZHN0Kys7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCWluZm8tPm5yX291cnMgPSBkc3Q7CisKKwlmcmVlKGNhLmNvbW1pdHMpOworfQorCisvKiAoRGVsYXllZCkgc3RlcCA3LCByZWFjaGFiaWxpdHkgdGVzdCBhdCBjb21taXQgbGV2ZWwgKi8KK2ludCBkZWxheWVkX3JlYWNoYWJpbGl0eV90ZXN0KHN0cnVjdCBzaGFsbG93X2luZm8gKnNpLCBpbnQgYykKK3sKKwlpZiAoc2ktPm5lZWRfcmVhY2hhYmlsaXR5X3Rlc3RbY10pIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbG9va3VwX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSAgICAgICZzaS0+c2hhbGxvdy0+b2lkW2NdKTsKKworCQlpZiAoIXNpLT5jb21taXRzKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2FycmF5IGNhOworCisJCQltZW1zZXQoJmNhLCAwLCBzaXplb2YoY2EpKTsKKwkJCWhlYWRfcmVmKGFkZF9yZWYsICZjYSk7CisJCQlmb3JfZWFjaF9yZWYoYWRkX3JlZiwgJmNhKTsKKwkJCXNpLT5jb21taXRzID0gY2EuY29tbWl0czsKKwkJCXNpLT5ucl9jb21taXRzID0gY2EubnI7CisJCX0KKworCQlzaS0+cmVhY2hhYmxlW2NdID0gaW5fbWVyZ2VfYmFzZXNfbWFueShjb21taXQsCisJCQkJCQkgICAgICAgc2ktPm5yX2NvbW1pdHMsCisJCQkJCQkgICAgICAgc2ktPmNvbW1pdHMpOworCQlzaS0+bmVlZF9yZWFjaGFiaWxpdHlfdGVzdFtjXSA9IDA7CisJfQorCXJldHVybiBzaS0+cmVhY2hhYmxlW2NdOworfQpkaWZmIC0tZ2l0IGEvc2hhbGxvdy5oIGIvc2hhbGxvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNGE5NmQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFsbG93LmgKQEAgLTAsMCArMSw4MSBAQAorI2lmbmRlZiBTSEFMTE9XX0gKKyNkZWZpbmUgU0hBTExPV19ICisKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKwordm9pZCBzZXRfYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqcGF0aCwgaW50IG92ZXJyaWRlKTsKK2ludCByZWdpc3Rlcl9zaGFsbG93KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworaW50IHVucmVnaXN0ZXJfc2hhbGxvdyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworaW50IGlzX3JlcG9zaXRvcnlfc2hhbGxvdyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisKKy8qCisgKiBMb2NrIGZvciB1cGRhdGluZyB0aGUgJEdJVF9ESVIvc2hhbGxvdyBmaWxlLgorICoKKyAqIFVzZSBgY29tbWl0X3NoYWxsb3dfZmlsZSgpYCB0byBjb21taXQgYW4gdXBkYXRlLCBvcgorICogYHJvbGxiYWNrX3NoYWxsb3dfZmlsZSgpYCB0byByb2xsIGl0IGJhY2suIEluIGVpdGhlciBjYXNlLCBhbnkKKyAqIGluLW1lbW9yeSBjYWNoZWQgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggY29tbWl0cyBhcmUgc2hhbGxvdyB3aWxsIGJlCisgKiBhcHByb3ByaWF0ZWx5IGludmFsaWRhdGVkIHNvIHRoYXQgZnV0dXJlIG9wZXJhdGlvbnMgcmVmbGVjdCB0aGUgbmV3CisgKiBzdGF0ZS4KKyAqLworc3RydWN0IHNoYWxsb3dfbG9jayB7CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrOworfTsKKyNkZWZpbmUgU0hBTExPV19MT0NLX0lOSVQgeyBMT0NLX0lOSVQgfQorCisvKiBjb21taXQgJEdJVF9ESVIvc2hhbGxvdyBhbmQgcmVzZXQgc3RhdC12YWxpZGl0eSBjaGVja3MgKi8KK2ludCBjb21taXRfc2hhbGxvd19maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgc2hhbGxvd19sb2NrICpsayk7CisvKiByb2xsYmFjayAkR0lUX0RJUi9zaGFsbG93IGFuZCByZXNldCBzdGF0LXZhbGlkaXR5IGNoZWNrcyAqLwordm9pZCByb2xsYmFja19zaGFsbG93X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBzaGFsbG93X2xvY2sgKmxrKTsKKworc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfc2hhbGxvd19jb21taXRzKHN0cnVjdCBvYmplY3RfYXJyYXkgKmhlYWRzLAorCQkJCQlpbnQgZGVwdGgsIGludCBzaGFsbG93X2ZsYWcsIGludCBub3Rfc2hhbGxvd19mbGFnKTsKK3N0cnVjdCBjb21taXRfbGlzdCAqZ2V0X3NoYWxsb3dfY29tbWl0c19ieV9yZXZfbGlzdCgKKwkJaW50IGFjLCBjb25zdCBjaGFyICoqYXYsIGludCBzaGFsbG93X2ZsYWcsIGludCBub3Rfc2hhbGxvd19mbGFnKTsKK2ludCB3cml0ZV9zaGFsbG93X2NvbW1pdHMoc3RydWN0IHN0cmJ1ZiAqb3V0LCBpbnQgdXNlX3BhY2tfcHJvdG9jb2wsCisJCQkgIGNvbnN0IHN0cnVjdCBvaWRfYXJyYXkgKmV4dHJhKTsKKwordm9pZCBzZXR1cF9hbHRlcm5hdGVfc2hhbGxvdyhzdHJ1Y3Qgc2hhbGxvd19sb2NrICpzaGFsbG93X2xvY2ssCisJCQkgICAgIGNvbnN0IGNoYXIgKiphbHRlcm5hdGVfc2hhbGxvd19maWxlLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgb2lkX2FycmF5ICpleHRyYSk7CisKK2NvbnN0IGNoYXIgKnNldHVwX3RlbXBvcmFyeV9zaGFsbG93KGNvbnN0IHN0cnVjdCBvaWRfYXJyYXkgKmV4dHJhKTsKKwordm9pZCBhZHZlcnRpc2Vfc2hhbGxvd19ncmFmdHMoaW50KTsKKworI2RlZmluZSBQUlVORV9TSE9XX09OTFkgMQorI2RlZmluZSBQUlVORV9RVUlDSyAyCit2b2lkIHBydW5lX3NoYWxsb3codW5zaWduZWQgb3B0aW9ucyk7CisKKy8qCisgKiBJbml0aWFsaXplIHdpdGggcHJlcGFyZV9zaGFsbG93X2luZm8oKSBvciB6ZXJvLWluaXRpYWxpemUgKGVxdWl2YWxlbnQgdG8KKyAqIHByZXBhcmVfc2hhbGxvd19pbmZvIHdpdGggYSBOVUxMIG9pZF9hcnJheSkuCisgKi8KK3N0cnVjdCBzaGFsbG93X2luZm8geworCXN0cnVjdCBvaWRfYXJyYXkgKnNoYWxsb3c7CisJaW50ICpvdXJzLCBucl9vdXJzOworCWludCAqdGhlaXJzLCBucl90aGVpcnM7CisJc3RydWN0IG9pZF9hcnJheSAqcmVmOworCisJLyogZm9yIHJlY2VpdmUtcGFjayAqLworCXVpbnQzMl90ICoqdXNlZF9zaGFsbG93OworCWludCAqbmVlZF9yZWFjaGFiaWxpdHlfdGVzdDsKKwlpbnQgKnJlYWNoYWJsZTsKKwlpbnQgKnNoYWxsb3dfcmVmOworCXN0cnVjdCBjb21taXQgKipjb21taXRzOworCWludCBucl9jb21taXRzOworfTsKKwordm9pZCBwcmVwYXJlX3NoYWxsb3dfaW5mbyhzdHJ1Y3Qgc2hhbGxvd19pbmZvICosIHN0cnVjdCBvaWRfYXJyYXkgKik7Cit2b2lkIGNsZWFyX3NoYWxsb3dfaW5mbyhzdHJ1Y3Qgc2hhbGxvd19pbmZvICopOwordm9pZCByZW1vdmVfbm9uZXhpc3RlbnRfdGhlaXJzX3NoYWxsb3coc3RydWN0IHNoYWxsb3dfaW5mbyAqKTsKK3ZvaWQgYXNzaWduX3NoYWxsb3dfY29tbWl0c190b19yZWZzKHN0cnVjdCBzaGFsbG93X2luZm8gKmluZm8sCisJCQkJICAgIHVpbnQzMl90ICoqdXNlZCwKKwkJCQkgICAgaW50ICpyZWZfc3RhdHVzKTsKK2ludCBkZWxheWVkX3JlYWNoYWJpbGl0eV90ZXN0KHN0cnVjdCBzaGFsbG93X2luZm8gKnNpLCBpbnQgYyk7CisKK2V4dGVybiBzdHJ1Y3QgdHJhY2Vfa2V5IHRyYWNlX3NoYWxsb3c7CisKKyNlbmRpZiAvKiBTSEFMTE9XX0ggKi8KZGlmZiAtLWdpdCBhL3NoZWxsLmMgYi9zaGVsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZjdmZmQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGVsbC5jCkBAIC0wLDAgKzEsMTk5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJhbGlhcy5oIgorI2luY2x1ZGUgInByb21wdC5oIgorCisjZGVmaW5lIENPTU1BTkRfRElSICJnaXQtc2hlbGwtY29tbWFuZHMiCisjZGVmaW5lIEhFTFBfQ09NTUFORCBDT01NQU5EX0RJUiAiL2hlbHAiCisjZGVmaW5lIE5PTE9HSU5fQ09NTUFORCBDT01NQU5EX0RJUiAiL25vLWludGVyYWN0aXZlLWxvZ2luIgorCitzdGF0aWMgaW50IGRvX2dlbmVyaWNfY21kKGNvbnN0IGNoYXIgKm1lLCBjaGFyICphcmcpCit7CisJY29uc3QgY2hhciAqbXlfYXJndls0XTsKKworCXNldHVwX3BhdGgoKTsKKwlpZiAoIWFyZyB8fCAhKGFyZyA9IHNxX2RlcXVvdGUoYXJnKSkgfHwgKmFyZyA9PSAnLScpCisJCWRpZSgiYmFkIGFyZ3VtZW50Iik7CisJaWYgKCFza2lwX3ByZWZpeChtZSwgImdpdC0iLCAmbWUpKQorCQlkaWUoImJhZCBjb21tYW5kIik7CisKKwlteV9hcmd2WzBdID0gbWU7CisJbXlfYXJndlsxXSA9IGFyZzsKKwlteV9hcmd2WzJdID0gTlVMTDsKKworCXJldHVybiBleGVjdl9naXRfY21kKG15X2FyZ3YpOworfQorCitzdGF0aWMgaW50IGlzX3ZhbGlkX2NtZF9uYW1lKGNvbnN0IGNoYXIgKmNtZCkKK3sKKwkvKiBUZXN0IGNvbW1hbmQgY29udGFpbnMgbm8gLiBvciAvIGNoYXJhY3RlcnMgKi8KKwlyZXR1cm4gY21kW3N0cmNzcG4oY21kLCAiLi8iKV0gPT0gJ1wwJzsKK30KKworc3RhdGljIGNoYXIgKm1ha2VfY21kKGNvbnN0IGNoYXIgKnByb2cpCit7CisJcmV0dXJuIHhzdHJmbXQoIiVzLyVzIiwgQ09NTUFORF9ESVIsIHByb2cpOworfQorCitzdGF0aWMgdm9pZCBjZF90b19ob21lZGlyKHZvaWQpCit7CisJY29uc3QgY2hhciAqaG9tZSA9IGdldGVudigiSE9NRSIpOworCWlmICghaG9tZSkKKwkJZGllKCJjb3VsZCBub3QgZGV0ZXJtaW5lIHVzZXIncyBob21lIGRpcmVjdG9yeTsgSE9NRSBpcyB1bnNldCIpOworCWlmIChjaGRpcihob21lKSA9PSAtMSkKKwkJZGllKCJjb3VsZCBub3QgY2hkaXIgdG8gdXNlcidzIGhvbWUgZGlyZWN0b3J5Iik7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9zaGVsbCh2b2lkKQoreworCWludCBkb25lID0gMDsKKwlzdGF0aWMgY29uc3QgY2hhciAqaGVscF9hcmd2W10gPSB7IEhFTFBfQ09NTUFORCwgTlVMTCB9OworCisJaWYgKCFhY2Nlc3MoTk9MT0dJTl9DT01NQU5ELCBGX09LKSkgeworCQkvKiBJbnRlcmFjdGl2ZSBsb2dpbiBkaXNhYmxlZC4gKi8KKwkJY29uc3QgY2hhciAqYXJndltdID0geyBOT0xPR0lOX0NPTU1BTkQsIE5VTEwgfTsKKwkJaW50IHN0YXR1czsKKworCQlzdGF0dXMgPSBydW5fY29tbWFuZF92X29wdChhcmd2LCAwKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlleGl0KDEyNyk7CisJCWV4aXQoc3RhdHVzKTsKKwl9CisKKwkvKiBQcmludCBoZWxwIGlmIGVuYWJsZWQgKi8KKwlydW5fY29tbWFuZF92X29wdChoZWxwX2FyZ3YsIFJVTl9TSUxFTlRfRVhFQ19GQUlMVVJFKTsKKworCWRvIHsKKwkJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJCWNvbnN0IGNoYXIgKnByb2c7CisJCWNoYXIgKmZ1bGxfY21kOworCQljaGFyICpyYXdhcmdzOworCQljaGFyICpzcGxpdF9hcmdzOworCQljb25zdCBjaGFyICoqYXJndjsKKwkJaW50IGNvZGU7CisJCWludCBjb3VudDsKKworCQlmcHJpbnRmKHN0ZGVyciwgImdpdD4gIik7CisJCWlmIChnaXRfcmVhZF9saW5lX2ludGVyYWN0aXZlbHkoJmxpbmUpID09IEVPRikgeworCQkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCQkJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCQkJYnJlYWs7CisJCX0KKwkJcmF3YXJncyA9IHN0cmJ1Zl9kZXRhY2goJmxpbmUsIE5VTEwpOworCQlzcGxpdF9hcmdzID0geHN0cmR1cChyYXdhcmdzKTsKKwkJY291bnQgPSBzcGxpdF9jbWRsaW5lKHNwbGl0X2FyZ3MsICZhcmd2KTsKKwkJaWYgKGNvdW50IDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGNvbW1hbmQgZm9ybWF0ICclcyc6ICVzXG4iLCByYXdhcmdzLAorCQkJCXNwbGl0X2NtZGxpbmVfc3RyZXJyb3IoY291bnQpKTsKKwkJCWZyZWUoc3BsaXRfYXJncyk7CisJCQlmcmVlKHJhd2FyZ3MpOworCQkJY29udGludWU7CisJCX0KKworCQlwcm9nID0gYXJndlswXTsKKwkJaWYgKCFzdHJjbXAocHJvZywgIiIpKSB7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChwcm9nLCAicXVpdCIpIHx8ICFzdHJjbXAocHJvZywgImxvZ291dCIpIHx8CisJCQkgICAhc3RyY21wKHByb2csICJleGl0IikgfHwgIXN0cmNtcChwcm9nLCAiYnllIikpIHsKKwkJCWRvbmUgPSAxOworCQl9IGVsc2UgaWYgKGlzX3ZhbGlkX2NtZF9uYW1lKHByb2cpKSB7CisJCQlmdWxsX2NtZCA9IG1ha2VfY21kKHByb2cpOworCQkJYXJndlswXSA9IGZ1bGxfY21kOworCQkJY29kZSA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9TSUxFTlRfRVhFQ19GQUlMVVJFKTsKKwkJCWlmIChjb2RlID09IC0xICYmIGVycm5vID09IEVOT0VOVCkgeworCQkJCWZwcmludGYoc3RkZXJyLCAidW5yZWNvZ25pemVkIGNvbW1hbmQgJyVzJ1xuIiwgcHJvZyk7CisJCQl9CisJCQlmcmVlKGZ1bGxfY21kKTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBjb21tYW5kIGZvcm1hdCAnJXMnXG4iLCBwcm9nKTsKKwkJfQorCisJCWZyZWUoYXJndik7CisJCWZyZWUocmF3YXJncyk7CisJfSB3aGlsZSAoIWRvbmUpOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1hbmRzIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCAoKmV4ZWMpKGNvbnN0IGNoYXIgKm1lLCBjaGFyICphcmcpOworfSBjbWRfbGlzdFtdID0geworCXsgImdpdC1yZWNlaXZlLXBhY2siLCBkb19nZW5lcmljX2NtZCB9LAorCXsgImdpdC11cGxvYWQtcGFjayIsIGRvX2dlbmVyaWNfY21kIH0sCisJeyAiZ2l0LXVwbG9hZC1hcmNoaXZlIiwgZG9fZ2VuZXJpY19jbWQgfSwKKwl7IE5VTEwgfSwKK307CisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY2hhciAqcHJvZzsKKwljb25zdCBjaGFyICoqdXNlcl9hcmd2OworCXN0cnVjdCBjb21tYW5kcyAqY21kOworCWludCBjb3VudDsKKworCS8qCisJICogU3BlY2lhbCBoYWNrIHRvIHByZXRlbmQgdG8gYmUgYSBDVlMgc2VydmVyCisJICovCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICJjdnMgc2VydmVyIikpIHsKKwkJYXJndi0tOworCX0gZWxzZSBpZiAoYXJnYyA9PSAxKSB7CisJCS8qIEFsbG93IHRoZSB1c2VyIHRvIHJ1biBhbiBpbnRlcmFjdGl2ZSBzaGVsbCAqLworCQljZF90b19ob21lZGlyKCk7CisJCWlmIChhY2Nlc3MoQ09NTUFORF9ESVIsIFJfT0sgfCBYX09LKSA9PSAtMSkgeworCQkJZGllKCJJbnRlcmFjdGl2ZSBnaXQgc2hlbGwgaXMgbm90IGVuYWJsZWQuXG4iCisJCQkgICAgImhpbnQ6IH4vIiBDT01NQU5EX0RJUiAiIHNob3VsZCBleGlzdCAiCisJCQkgICAgImFuZCBoYXZlIHJlYWQgYW5kIGV4ZWN1dGUgYWNjZXNzLiIpOworCQl9CisJCXJ1bl9zaGVsbCgpOworCQlleGl0KDApOworCX0gZWxzZSBpZiAoYXJnYyAhPSAzIHx8IHN0cmNtcChhcmd2WzFdLCAiLWMiKSkgeworCQkvKgorCQkgKiBXZSBkbyBub3QgYWNjZXB0IGFueSBvdGhlciBtb2RlcyBleGNlcHQgIi1jIiBmb2xsb3dlZCBieQorCQkgKiAiY21kIGFyZyIsIHdoZXJlICJjbWQiIGlzIGEgdmVyeSBsaW1pdGVkIHN1YnNldCBvZiBnaXQKKwkJICogY29tbWFuZHMgb3IgYSBjb21tYW5kIGluIHRoZSBDT01NQU5EX0RJUgorCQkgKi8KKwkJZGllKCJSdW4gd2l0aCBubyBhcmd1bWVudHMgb3Igd2l0aCAtYyBjbWQiKTsKKwl9CisKKwlwcm9nID0geHN0cmR1cChhcmd2WzJdKTsKKwlpZiAoIXN0cm5jbXAocHJvZywgImdpdCIsIDMpICYmIGlzc3BhY2UocHJvZ1szXSkpCisJCS8qIEFjY2VwdCAiZ2l0IGZvbyIgYXMgaWYgdGhlIGNhbGxlciBzYWlkICJnaXQtZm9vIi4gKi8KKwkJcHJvZ1szXSA9ICctJzsKKworCWZvciAoY21kID0gY21kX2xpc3QgOyBjbWQtPm5hbWUgOyBjbWQrKykgeworCQlpbnQgbGVuID0gc3RybGVuKGNtZC0+bmFtZSk7CisJCWNoYXIgKmFyZzsKKwkJaWYgKHN0cm5jbXAoY21kLT5uYW1lLCBwcm9nLCBsZW4pKQorCQkJY29udGludWU7CisJCWFyZyA9IE5VTEw7CisJCXN3aXRjaCAocHJvZ1tsZW5dKSB7CisJCWNhc2UgJ1wwJzoKKwkJCWFyZyA9IE5VTEw7CisJCQlicmVhazsKKwkJY2FzZSAnICc6CisJCQlhcmcgPSBwcm9nICsgbGVuICsgMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29udGludWU7CisJCX0KKwkJZXhpdChjbWQtPmV4ZWMoY21kLT5uYW1lLCBhcmcpKTsKKwl9CisKKwljZF90b19ob21lZGlyKCk7CisJY291bnQgPSBzcGxpdF9jbWRsaW5lKHByb2csICZ1c2VyX2FyZ3YpOworCWlmIChjb3VudCA+PSAwKSB7CisJCWlmIChpc192YWxpZF9jbWRfbmFtZSh1c2VyX2FyZ3ZbMF0pKSB7CisJCQlwcm9nID0gbWFrZV9jbWQodXNlcl9hcmd2WzBdKTsKKwkJCXVzZXJfYXJndlswXSA9IHByb2c7CisJCQlleGVjdih1c2VyX2FyZ3ZbMF0sIChjaGFyICpjb25zdCAqKSB1c2VyX2FyZ3YpOworCQl9CisJCWZyZWUocHJvZyk7CisJCWZyZWUodXNlcl9hcmd2KTsKKwkJZGllKCJ1bnJlY29nbml6ZWQgY29tbWFuZCAnJXMnIiwgYXJndlsyXSk7CisJfSBlbHNlIHsKKwkJZnJlZShwcm9nKTsKKwkJZGllKCJpbnZhbGlkIGNvbW1hbmQgZm9ybWF0ICclcyc6ICVzIiwgYXJndlsyXSwKKwkJICAgIHNwbGl0X2NtZGxpbmVfc3RyZXJyb3IoY291bnQpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zaG9ydGxvZy5oIGIvc2hvcnRsb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmE2MWM0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hvcnRsb2cuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIFNIT1JUTE9HX0gKKyNkZWZpbmUgU0hPUlRMT0dfSAorCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworc3RydWN0IGNvbW1pdDsKKworc3RydWN0IHNob3J0bG9nIHsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdDsKKwlpbnQgc3VtbWFyeTsKKwlpbnQgd3JhcF9saW5lczsKKwlpbnQgc29ydF9ieV9udW1iZXI7CisJaW50IHdyYXA7CisJaW50IGluMTsKKwlpbnQgaW4yOworCWludCB1c2VyX2Zvcm1hdDsKKwlpbnQgYWJicmV2OworCWludCBjb21taXR0ZXI7CisKKwljaGFyICpjb21tb25fcmVwb19wcmVmaXg7CisJaW50IGVtYWlsOworCXN0cnVjdCBzdHJpbmdfbGlzdCBtYWlsbWFwOworCUZJTEUgKmZpbGU7Cit9OworCit2b2lkIHNob3J0bG9nX2luaXQoc3RydWN0IHNob3J0bG9nICpsb2cpOworCit2b2lkIHNob3J0bG9nX2FkZF9jb21taXQoc3RydWN0IHNob3J0bG9nICpsb2csIHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CisKK3ZvaWQgc2hvcnRsb2dfb3V0cHV0KHN0cnVjdCBzaG9ydGxvZyAqbG9nKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zaWRlYmFuZC5jIGIvc2lkZWJhbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjg1MTExCi0tLSAvZGV2L251bGwKKysrIGIvc2lkZWJhbmQuYwpAQCAtMCwwICsxLDIzOSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorI2luY2x1ZGUgImhlbHAuaCIKKworc3RydWN0IGtleXdvcmRfZW50cnkgeworCS8qCisJICogV2UgdXNlIGtleXdvcmQgYXMgY29uZmlnIGtleSBzbyBpdCBzaG91bGQgYmUgYSBzaW5nbGUgYWxwaGFudW1lcmljIHdvcmQuCisJICovCisJY29uc3QgY2hhciAqa2V5d29yZDsKKwljaGFyIGNvbG9yW0NPTE9SX01BWExFTl07Cit9OworCitzdGF0aWMgc3RydWN0IGtleXdvcmRfZW50cnkga2V5d29yZHNbXSA9IHsKKwl7ICJoaW50IiwJR0lUX0NPTE9SX1lFTExPVyB9LAorCXsgIndhcm5pbmciLAlHSVRfQ09MT1JfQk9MRF9ZRUxMT1cgfSwKKwl7ICJzdWNjZXNzIiwJR0lUX0NPTE9SX0JPTERfR1JFRU4gfSwKKwl7ICJlcnJvciIsCUdJVF9DT0xPUl9CT0xEX1JFRCB9LAorfTsKKworLyogUmV0dXJucyBhIGNvbG9yIHNldHRpbmcgKEdJVF9DT0xPUl9ORVZFUiwgZXRjKS4gKi8KK3N0YXRpYyBpbnQgdXNlX3NpZGViYW5kX2NvbG9ycyh2b2lkKQoreworCXN0YXRpYyBpbnQgdXNlX3NpZGViYW5kX2NvbG9yc19jYWNoZWQgPSAtMTsKKworCWNvbnN0IGNoYXIgKmtleSA9ICJjb2xvci5yZW1vdGUiOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljaGFyICp2YWx1ZTsKKwlpbnQgaTsKKworCWlmICh1c2Vfc2lkZWJhbmRfY29sb3JzX2NhY2hlZCA+PSAwKQorCQlyZXR1cm4gdXNlX3NpZGViYW5kX2NvbG9yc19jYWNoZWQ7CisKKwlpZiAoIWdpdF9jb25maWdfZ2V0X3N0cmluZyhrZXksICZ2YWx1ZSkpIHsKKwkJdXNlX3NpZGViYW5kX2NvbG9yc19jYWNoZWQgPSBnaXRfY29uZmlnX2NvbG9yYm9vbChrZXksIHZhbHVlKTsKKwl9IGVsc2UgaWYgKCFnaXRfY29uZmlnX2dldF9zdHJpbmcoImNvbG9yLnVpIiwgJnZhbHVlKSkgeworCQl1c2Vfc2lkZWJhbmRfY29sb3JzX2NhY2hlZCA9IGdpdF9jb25maWdfY29sb3Jib29sKCJjb2xvci51aSIsIHZhbHVlKTsKKwl9IGVsc2UgeworCQl1c2Vfc2lkZWJhbmRfY29sb3JzX2NhY2hlZCA9IEdJVF9DT0xPUl9BVVRPOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGtleXdvcmRzKTsgaSsrKSB7CisJCXN0cmJ1Zl9yZXNldCgmc2IpOworCQlzdHJidWZfYWRkZigmc2IsICIlcy4lcyIsIGtleSwga2V5d29yZHNbaV0ua2V5d29yZCk7CisJCWlmIChnaXRfY29uZmlnX2dldF9zdHJpbmcoc2IuYnVmLCAmdmFsdWUpKQorCQkJY29udGludWU7CisJCWlmIChjb2xvcl9wYXJzZSh2YWx1ZSwga2V5d29yZHNbaV0uY29sb3IpKQorCQkJY29udGludWU7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHVzZV9zaWRlYmFuZF9jb2xvcnNfY2FjaGVkOworfQorCit2b2lkIGxpc3RfY29uZmlnX2NvbG9yX3NpZGViYW5kX3Nsb3RzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoa2V5d29yZHMpOyBpKyspCisJCWxpc3RfY29uZmlnX2l0ZW0obGlzdCwgcHJlZml4LCBrZXl3b3Jkc1tpXS5rZXl3b3JkKTsKK30KKworLyoKKyAqIE9wdGlvbmFsbHkgaGlnaGxpZ2h0IG9uZSBrZXl3b3JkIGluIHJlbW90ZSBvdXRwdXQgaWYgaXQgYXBwZWFycyBhdCB0aGUgc3RhcnQKKyAqIG9mIHRoZSBsaW5lLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgZm9yIGEgc2luZ2xlIGxpbmUgb25seSwgd2hpY2ggaXMKKyAqIHBhc3NlZCBhcyB0aGUgZmlyc3QgTiBjaGFyYWN0ZXJzIG9mIHRoZSBTUkMgYXJyYXkuCisgKgorICogTkVFRFNXT1JLOiB1c2UgInNpemVfdCBuIiBpbnN0ZWFkIGZvciBjbGFyaXR5LgorICovCitzdGF0aWMgdm9pZCBtYXliZV9jb2xvcml6ZV9zaWRlYmFuZChzdHJ1Y3Qgc3RyYnVmICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIGludCBuKQoreworCWludCBpOworCisJaWYgKCF3YW50X2NvbG9yX3N0ZGVycih1c2Vfc2lkZWJhbmRfY29sb3JzKCkpKSB7CisJCXN0cmJ1Zl9hZGQoZGVzdCwgc3JjLCBuKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlICgwIDwgbiAmJiBpc3NwYWNlKCpzcmMpKSB7CisJCXN0cmJ1Zl9hZGRjaChkZXN0LCAqc3JjKTsKKwkJc3JjKys7CisJCW4tLTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShrZXl3b3Jkcyk7IGkrKykgeworCQlzdHJ1Y3Qga2V5d29yZF9lbnRyeSAqcCA9IGtleXdvcmRzICsgaTsKKwkJaW50IGxlbiA9IHN0cmxlbihwLT5rZXl3b3JkKTsKKworCQlpZiAobiA8IGxlbikKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBNYXRjaCBjYXNlIGluc2Vuc2l0aXZlbHksIHNvIHdlIGNvbG9yaXplIG91dHB1dCBmcm9tIGV4aXN0aW5nCisJCSAqIHNlcnZlcnMgcmVnYXJkbGVzcyBvZiB0aGUgY2FzZSB0aGF0IHRoZXkgdXNlIGZvciB0aGVpcgorCQkgKiBtZXNzYWdlcy4gV2Ugb25seSBoaWdobGlnaHQgdGhlIHdvcmQgcHJlY2lzZWx5LCBzbworCQkgKiAic3VjY2Vzc2Z1bCIgc3RheXMgdW5jb2xvcmVkLgorCQkgKi8KKwkJaWYgKCFzdHJuY2FzZWNtcChwLT5rZXl3b3JkLCBzcmMsIGxlbikgJiYKKwkJICAgIChsZW4gPT0gbiB8fCAhaXNhbG51bShzcmNbbGVuXSkpKSB7CisJCQlzdHJidWZfYWRkc3RyKGRlc3QsIHAtPmNvbG9yKTsKKwkJCXN0cmJ1Zl9hZGQoZGVzdCwgc3JjLCBsZW4pOworCQkJc3RyYnVmX2FkZHN0cihkZXN0LCBHSVRfQ09MT1JfUkVTRVQpOworCQkJbiAtPSBsZW47CisJCQlzcmMgKz0gbGVuOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzdHJidWZfYWRkKGRlc3QsIHNyYywgbik7Cit9CisKKworI2RlZmluZSBESVNQTEFZX1BSRUZJWCAicmVtb3RlOiAiCisKKyNkZWZpbmUgQU5TSV9TVUZGSVggIlwwMzNbSyIKKyNkZWZpbmUgRFVNQl9TVUZGSVggIiAgICAgICAgIgorCitpbnQgZGVtdWx0aXBsZXhfc2lkZWJhbmQoY29uc3QgY2hhciAqbWUsIGNoYXIgKmJ1ZiwgaW50IGxlbiwKKwkJCSBpbnQgZGllX29uX2Vycm9yLAorCQkJIHN0cnVjdCBzdHJidWYgKnNjcmF0Y2gsCisJCQkgZW51bSBzaWRlYmFuZF90eXBlICpzaWRlYmFuZF90eXBlKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpzdWZmaXg7CisJY29uc3QgY2hhciAqYiwgKmJyazsKKwlpbnQgYmFuZDsKKworCWlmICghc3VmZml4KSB7CisJCWlmIChpc2F0dHkoMikgJiYgIWlzX3Rlcm1pbmFsX2R1bWIoKSkKKwkJCXN1ZmZpeCA9IEFOU0lfU1VGRklYOworCQllbHNlCisJCQlzdWZmaXggPSBEVU1CX1NVRkZJWDsKKwl9CisKKwlpZiAobGVuID09IDApIHsKKwkJKnNpZGViYW5kX3R5cGUgPSBTSURFQkFORF9GTFVTSDsKKwkJZ290byBjbGVhbnVwOworCX0KKwlpZiAobGVuIDwgMSkgeworCQlzdHJidWZfYWRkZihzY3JhdGNoLAorCQkJICAgICIlcyVzOiBwcm90b2NvbCBlcnJvcjogbm8gYmFuZCBkZXNpZ25hdG9yIiwKKwkJCSAgICBzY3JhdGNoLT5sZW4gPyAiXG4iIDogIiIsIG1lKTsKKwkJKnNpZGViYW5kX3R5cGUgPSBTSURFQkFORF9QUk9UT0NPTF9FUlJPUjsKKwkJZ290byBjbGVhbnVwOworCX0KKwliYW5kID0gYnVmWzBdICYgMHhmZjsKKwlidWZbbGVuXSA9ICdcMCc7CisJbGVuLS07CisJc3dpdGNoIChiYW5kKSB7CisJY2FzZSAzOgorCQlpZiAoZGllX29uX2Vycm9yKQorCQkJZGllKCJyZW1vdGUgZXJyb3I6ICVzIiwgYnVmICsgMSk7CisJCXN0cmJ1Zl9hZGRmKHNjcmF0Y2gsICIlcyVzIiwgc2NyYXRjaC0+bGVuID8gIlxuIiA6ICIiLAorCQkJICAgIERJU1BMQVlfUFJFRklYKTsKKwkJbWF5YmVfY29sb3JpemVfc2lkZWJhbmQoc2NyYXRjaCwgYnVmICsgMSwgbGVuKTsKKworCQkqc2lkZWJhbmRfdHlwZSA9IFNJREVCQU5EX1JFTU9URV9FUlJPUjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQliID0gYnVmICsgMTsKKworCQkvKgorCQkgKiBBcHBlbmQgYSBzdWZmaXggdG8gZWFjaCBub25lbXB0eSBsaW5lIHRvIGNsZWFyIHRoZQorCQkgKiBlbmQgb2YgdGhlIHNjcmVlbiBsaW5lLgorCQkgKgorCQkgKiBUaGUgb3V0cHV0IGlzIGFjY3VtdWxhdGVkIGluIGEgYnVmZmVyIGFuZAorCQkgKiBlYWNoIGxpbmUgaXMgcHJpbnRlZCB0byBzdGRlcnIgdXNpbmcKKwkJICogd3JpdGUoMikgdG8gZW5zdXJlIGludGVyLXByb2Nlc3MgYXRvbWljaXR5LgorCQkgKi8KKwkJd2hpbGUgKChicmsgPSBzdHJwYnJrKGIsICJcblxyIikpKSB7CisJCQlpbnQgbGluZWxlbiA9IGJyayAtIGI7CisKKwkJCWlmICghc2NyYXRjaC0+bGVuKQorCQkJCXN0cmJ1Zl9hZGRzdHIoc2NyYXRjaCwgRElTUExBWV9QUkVGSVgpOworCQkJaWYgKGxpbmVsZW4gPiAwKSB7CisJCQkJbWF5YmVfY29sb3JpemVfc2lkZWJhbmQoc2NyYXRjaCwgYiwgbGluZWxlbik7CisJCQkJc3RyYnVmX2FkZHN0cihzY3JhdGNoLCBzdWZmaXgpOworCQkJfQorCisJCQlzdHJidWZfYWRkY2goc2NyYXRjaCwgKmJyayk7CisJCQl4d3JpdGUoMiwgc2NyYXRjaC0+YnVmLCBzY3JhdGNoLT5sZW4pOworCQkJc3RyYnVmX3Jlc2V0KHNjcmF0Y2gpOworCisJCQliID0gYnJrICsgMTsKKwkJfQorCisJCWlmICgqYikgeworCQkJc3RyYnVmX2FkZHN0cihzY3JhdGNoLCBzY3JhdGNoLT5sZW4gPworCQkJCSAgICAiIiA6IERJU1BMQVlfUFJFRklYKTsKKwkJCW1heWJlX2NvbG9yaXplX3NpZGViYW5kKHNjcmF0Y2gsIGIsIHN0cmxlbihiKSk7CisJCX0KKwkJcmV0dXJuIDA7CisJY2FzZSAxOgorCQkqc2lkZWJhbmRfdHlwZSA9IFNJREVCQU5EX1BSSU1BUlk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0cmJ1Zl9hZGRmKHNjcmF0Y2gsICIlcyVzOiBwcm90b2NvbCBlcnJvcjogYmFkIGJhbmQgIyVkIiwKKwkJCSAgICBzY3JhdGNoLT5sZW4gPyAiXG4iIDogIiIsIG1lLCBiYW5kKTsKKwkJKnNpZGViYW5kX3R5cGUgPSBTSURFQkFORF9QUk9UT0NPTF9FUlJPUjsKKwkJYnJlYWs7CisJfQorCitjbGVhbnVwOgorCWlmIChkaWVfb25fZXJyb3IgJiYgKnNpZGViYW5kX3R5cGUgPT0gU0lERUJBTkRfUFJPVE9DT0xfRVJST1IpCisJCWRpZSgiJXMiLCBzY3JhdGNoLT5idWYpOworCWlmIChzY3JhdGNoLT5sZW4pIHsKKwkJc3RyYnVmX2FkZGNoKHNjcmF0Y2gsICdcbicpOworCQl4d3JpdGUoMiwgc2NyYXRjaC0+YnVmLCBzY3JhdGNoLT5sZW4pOworCX0KKwlzdHJidWZfcmVsZWFzZShzY3JhdGNoKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIGZkIGlzIGNvbm5lY3RlZCB0byB0aGUgcmVtb3RlIHNpZGU7IHNlbmQgdGhlIHNpZGViYW5kIGRhdGEKKyAqIG92ZXIgbXVsdGlwbGV4ZWQgcGFja2V0IHN0cmVhbS4KKyAqLwordm9pZCBzZW5kX3NpZGViYW5kKGludCBmZCwgaW50IGJhbmQsIGNvbnN0IGNoYXIgKmRhdGEsIHNzaXplX3Qgc3osIGludCBwYWNrZXRfbWF4KQoreworCWNvbnN0IGNoYXIgKnAgPSBkYXRhOworCisJd2hpbGUgKHN6KSB7CisJCXVuc2lnbmVkIG47CisJCWNoYXIgaGRyWzVdOworCisJCW4gPSBzejsKKwkJaWYgKHBhY2tldF9tYXggLSA1IDwgbikKKwkJCW4gPSBwYWNrZXRfbWF4IC0gNTsKKwkJaWYgKDAgPD0gYmFuZCkgeworCQkJeHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksICIlMDR4IiwgbiArIDUpOworCQkJaGRyWzRdID0gYmFuZDsKKwkJCXdyaXRlX29yX2RpZShmZCwgaGRyLCA1KTsKKwkJfSBlbHNlIHsKKwkJCXhzbnByaW50ZihoZHIsIHNpemVvZihoZHIpLCAiJTA0eCIsIG4gKyA0KTsKKwkJCXdyaXRlX29yX2RpZShmZCwgaGRyLCA0KTsKKwkJfQorCQl3cml0ZV9vcl9kaWUoZmQsIHAsIG4pOworCQlwICs9IG47CisJCXN6IC09IG47CisJfQorfQpkaWZmIC0tZ2l0IGEvc2lkZWJhbmQuaCBiL3NpZGViYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI3NzQwYQotLS0gL2Rldi9udWxsCisrKyBiL3NpZGViYW5kLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBTSURFQkFORF9ICisjZGVmaW5lIFNJREVCQU5EX0gKKworZW51bSBzaWRlYmFuZF90eXBlIHsKKwlTSURFQkFORF9QUk9UT0NPTF9FUlJPUiA9IC0yLAorCVNJREVCQU5EX1JFTU9URV9FUlJPUiA9IC0xLAorCVNJREVCQU5EX0ZMVVNIID0gMCwKKwlTSURFQkFORF9QUklNQVJZID0gMQorfTsKKworLyoKKyAqIEluc3BlY3RzIGEgbXVsdGlwbGV4ZWQgcGFja2V0IHJlYWQgZnJvbSB0aGUgcmVtb3RlLiBJZiB0aGlzIHBhY2tldCBpcyBhCisgKiBwcm9ncmVzcyBwYWNrZXQgYW5kIHRodXMgc2hvdWxkIG5vdCBiZSBwcm9jZXNzZWQgYnkgdGhlIGNhbGxlciwgcmV0dXJucyAwLgorICogT3RoZXJ3aXNlLCByZXR1cm5zIDEsIHJlbGVhc2VzIHNjcmF0Y2gsIGFuZCBzZXRzIHNpZGViYW5kX3R5cGUuCisgKgorICogSWYgdGhpcyBwYWNrZXQgaXMgU0lERUJBTkRfUFJPVE9DT0xfRVJST1IsIFNJREVCQU5EX1JFTU9URV9FUlJPUiwgb3IgYQorICogcHJvZ3Jlc3MgcGFja2V0LCBhbHNvIHByaW50cyBhIG1lc3NhZ2UgdG8gc3RkZXJyLgorICoKKyAqIHNjcmF0Y2ggbXVzdCBiZSBhIHN0cnVjdCBzdHJidWYgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIuIEl0IGlzIHVzZWQgdG8gc3RvcmUKKyAqIHByb2dyZXNzIG1lc3NhZ2VzIHNwbGl0IGFjcm9zcyBtdWx0aXBsZSBwYWNrZXRzLgorICovCitpbnQgZGVtdWx0aXBsZXhfc2lkZWJhbmQoY29uc3QgY2hhciAqbWUsIGNoYXIgKmJ1ZiwgaW50IGxlbiwKKwkJCSBpbnQgZGllX29uX2Vycm9yLAorCQkJIHN0cnVjdCBzdHJidWYgKnNjcmF0Y2gsCisJCQkgZW51bSBzaWRlYmFuZF90eXBlICpzaWRlYmFuZF90eXBlKTsKKwordm9pZCBzZW5kX3NpZGViYW5kKGludCBmZCwgaW50IGJhbmQsIGNvbnN0IGNoYXIgKmRhdGEsIHNzaXplX3Qgc3osIGludCBwYWNrZXRfbWF4KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zaWdjaGFpbi5jIGIvc2lnY2hhaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjI2NzdiCi0tLSAvZGV2L251bGwKKysrIGIvc2lnY2hhaW4uYwpAQCAtMCwwICsxLDYxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorCisjZGVmaW5lIFNJR0NIQUlOX01BWF9TSUdOQUxTIDMyCisKK3N0cnVjdCBzaWdjaGFpbl9zaWduYWwgeworCXNpZ2NoYWluX2Z1biAqb2xkOworCWludCBuOworCWludCBhbGxvYzsKK307CitzdGF0aWMgc3RydWN0IHNpZ2NoYWluX3NpZ25hbCBzaWduYWxzW1NJR0NIQUlOX01BWF9TSUdOQUxTXTsKKworc3RhdGljIHZvaWQgY2hlY2tfc2lnbnVtKGludCBzaWcpCit7CisJaWYgKHNpZyA8IDEgfHwgc2lnID49IFNJR0NIQUlOX01BWF9TSUdOQUxTKQorCQlCVUcoInNpZ25hbCBvdXQgb2YgcmFuZ2U6ICVkIiwgc2lnKTsKK30KKworaW50IHNpZ2NoYWluX3B1c2goaW50IHNpZywgc2lnY2hhaW5fZnVuIGYpCit7CisJc3RydWN0IHNpZ2NoYWluX3NpZ25hbCAqcyA9IHNpZ25hbHMgKyBzaWc7CisJY2hlY2tfc2lnbnVtKHNpZyk7CisKKwlBTExPQ19HUk9XKHMtPm9sZCwgcy0+biArIDEsIHMtPmFsbG9jKTsKKwlzLT5vbGRbcy0+bl0gPSBzaWduYWwoc2lnLCBmKTsKKwlpZiAocy0+b2xkW3MtPm5dID09IFNJR19FUlIpCisJCXJldHVybiAtMTsKKwlzLT5uKys7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzaWdjaGFpbl9wb3AoaW50IHNpZykKK3sKKwlzdHJ1Y3Qgc2lnY2hhaW5fc2lnbmFsICpzID0gc2lnbmFscyArIHNpZzsKKwljaGVja19zaWdudW0oc2lnKTsKKwlpZiAocy0+biA8IDEpCisJCXJldHVybiAwOworCisJaWYgKHNpZ25hbChzaWcsIHMtPm9sZFtzLT5uIC0gMV0pID09IFNJR19FUlIpCisJCXJldHVybiAtMTsKKwlzLT5uLS07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2lnY2hhaW5fcHVzaF9jb21tb24oc2lnY2hhaW5fZnVuIGYpCit7CisJc2lnY2hhaW5fcHVzaChTSUdJTlQsIGYpOworCXNpZ2NoYWluX3B1c2goU0lHSFVQLCBmKTsKKwlzaWdjaGFpbl9wdXNoKFNJR1RFUk0sIGYpOworCXNpZ2NoYWluX3B1c2goU0lHUVVJVCwgZik7CisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBmKTsKK30KKwordm9pZCBzaWdjaGFpbl9wb3BfY29tbW9uKHZvaWQpCit7CisJc2lnY2hhaW5fcG9wKFNJR1BJUEUpOworCXNpZ2NoYWluX3BvcChTSUdRVUlUKTsKKwlzaWdjaGFpbl9wb3AoU0lHVEVSTSk7CisJc2lnY2hhaW5fcG9wKFNJR0hVUCk7CisJc2lnY2hhaW5fcG9wKFNJR0lOVCk7Cit9CmRpZmYgLS1naXQgYS9zaWdjaGFpbi5oIGIvc2lnY2hhaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTZiYWRhCi0tLSAvZGV2L251bGwKKysrIGIvc2lnY2hhaW4uaApAQCAtMCwwICsxLDU3IEBACisjaWZuZGVmIFNJR0NIQUlOX0gKKyNkZWZpbmUgU0lHQ0hBSU5fSAorCisvKioKKyAqIENvZGUgb2Z0ZW4gd2FudHMgdG8gc2V0IGEgc2lnbmFsIGhhbmRsZXIgdG8gY2xlYW4gdXAgdGVtcG9yYXJ5IGZpbGVzIG9yCisgKiBvdGhlciB3b3JrLWluLXByb2dyZXNzIHdoZW4gd2UgZGllIHVuZXhwZWN0ZWRseS4gRm9yIG11bHRpcGxlIHBpZWNlcyBvZgorICogY29kZSB0byBkbyB0aGlzIHdpdGhvdXQgY29uZmxpY3RpbmcsIGVhY2ggcGllY2Ugb2YgY29kZSBtdXN0IHJlbWVtYmVyCisgKiB0aGUgb2xkIHZhbHVlIG9mIHRoZSBoYW5kbGVyIGFuZCByZXN0b3JlIGl0IGVpdGhlciB3aGVuOgorICoKKyAqICAgMS4gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgaXMgZmluaXNoZWQsIGFuZCB0aGUgaGFuZGxlciBpcyBubyBsb25nZXIKKyAqICAgICAgbmVjZXNzYXJ5LiBUaGUgaGFuZGxlciBzaG91bGQgcmV2ZXJ0IHRvIHRoZSBvcmlnaW5hbCBiZWhhdmlvcgorICogICAgICAoZWl0aGVyIGFub3RoZXIgaGFuZGxlciwgU0lHX0RGTCwgb3IgU0lHX0lHTikuCisgKgorICogICAyLiBUaGUgc2lnbmFsIGlzIHJlY2VpdmVkLiBXZSBzaG91bGQgdGhlbiBkbyBvdXIgY2xlYW51cCwgdGhlbiBjaGFpbgorICogICAgICB0byB0aGUgbmV4dCBoYW5kbGVyIChvciBkaWUgaWYgaXQgaXMgU0lHX0RGTCkuCisgKgorICogU2lnY2hhaW4gaXMgYSB0aW55IGxpYnJhcnkgZm9yIGtlZXBpbmcgYSBzdGFjayBvZiBoYW5kbGVycy4gWW91ciBoYW5kbGVyCisgKiBhbmQgaW5zdGFsbGF0aW9uIGNvZGUgc2hvdWxkIGxvb2sgc29tZXRoaW5nIGxpa2U6CisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIHZvaWQgY2xlYW5fZm9vX29uX3NpZ25hbChpbnQgc2lnKQorICogICB7CisgKiAJICBjbGVhbl9mb28oKTsKKyAqIAkgIHNpZ2NoYWluX3BvcChzaWcpOworICogCSAgcmFpc2Uoc2lnKTsKKyAqICAgfQorICoKKyAqICAgdm9pZCBvdGhlcl9mdW5jKCkKKyAqICAgeworICogCSAgc2lnY2hhaW5fcHVzaF9jb21tb24oY2xlYW5fZm9vX29uX3NpZ25hbCk7CisgKiAJICBtZXNzX3VwX2ZvbygpOworICogCSAgY2xlYW5fZm9vKCk7CisgKiAgIH0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqLworCisvKioKKyAqIEhhbmRsZXJzIGFyZSBnaXZlbiB0aGUgdHlwZWRlZiBvZiBzaWdjaGFpbl9mdW4uIFRoaXMgaXMgdGhlIHNhbWUgdHlwZQorICogdGhhdCBpcyBnaXZlbiB0byBzaWduYWwoKSBvciBzaWdhY3Rpb24oKS4gSXQgaXMgcGVyZmVjdGx5IHJlYXNvbmFibGUgdG8KKyAqIHB1c2ggU0lHX0RGTCBvciBTSUdfSUdOIG9udG8gdGhlIHN0YWNrLgorICovCit0eXBlZGVmIHZvaWQgKCpzaWdjaGFpbl9mdW4pKGludCk7CisKKy8qIFlvdSBjYW4gc2lnY2hhaW5fcHVzaCBhbmQgc2lnY2hhaW5fcG9wIGluZGl2aWR1YWwgc2lnbmFscy4gKi8KK2ludCBzaWdjaGFpbl9wdXNoKGludCBzaWcsIHNpZ2NoYWluX2Z1biBmKTsKK2ludCBzaWdjaGFpbl9wb3AoaW50IHNpZyk7CisKKy8qKgorICogcHVzaCB0aGUgaGFuZGxlciBvbnRvIHRoZSBzdGFjayBmb3IgdGhlIGNvbW1vbiBzaWduYWxzOgorICogU0lHSU5ULCBTSUdIVVAsIFNJR1RFUk0sIFNJR1FVSVQgYW5kIFNJR1BJUEUuCisgKi8KK3ZvaWQgc2lnY2hhaW5fcHVzaF9jb21tb24oc2lnY2hhaW5fZnVuIGYpOworCit2b2lkIHNpZ2NoYWluX3BvcF9jb21tb24odm9pZCk7CisKKyNlbmRpZiAvKiBTSUdDSEFJTl9IICovCmRpZmYgLS1naXQgYS9zcGxpdC1pbmRleC5jIGIvc3BsaXQtaW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjE1NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvc3BsaXQtaW5kZXguYwpAQCAtMCwwICsxLDQ3MyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic3BsaXQtaW5kZXguaCIKKyNpbmNsdWRlICJld2FoL2V3b2suaCIKKworc3RydWN0IHNwbGl0X2luZGV4ICppbml0X3NwbGl0X2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWlmICghaXN0YXRlLT5zcGxpdF9pbmRleCkgeworCQlpc3RhdGUtPnNwbGl0X2luZGV4ID0geGNhbGxvYygxLCBzaXplb2YoKmlzdGF0ZS0+c3BsaXRfaW5kZXgpKTsKKwkJaXN0YXRlLT5zcGxpdF9pbmRleC0+cmVmY291bnQgPSAxOworCX0KKwlyZXR1cm4gaXN0YXRlLT5zcGxpdF9pbmRleDsKK30KKworaW50IHJlYWRfbGlua19leHRlbnNpb24oc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgY29uc3Qgdm9pZCAqZGF0YV8sIHVuc2lnbmVkIGxvbmcgc3opCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IGRhdGFfOworCXN0cnVjdCBzcGxpdF9pbmRleCAqc2k7CisJaW50IHJldDsKKworCWlmIChzeiA8IHRoZV9oYXNoX2FsZ28tPnJhd3N6KQorCQlyZXR1cm4gZXJyb3IoImNvcnJ1cHQgbGluayBleHRlbnNpb24gKHRvbyBzaG9ydCkiKTsKKwlzaSA9IGluaXRfc3BsaXRfaW5kZXgoaXN0YXRlKTsKKwloYXNoY3B5KHNpLT5iYXNlX29pZC5oYXNoLCBkYXRhKTsKKwlkYXRhICs9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCXN6IC09IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCWlmICghc3opCisJCXJldHVybiAwOworCXNpLT5kZWxldGVfYml0bWFwID0gZXdhaF9uZXcoKTsKKwlyZXQgPSBld2FoX3JlYWRfbW1hcChzaS0+ZGVsZXRlX2JpdG1hcCwgZGF0YSwgc3opOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gZXJyb3IoImNvcnJ1cHQgZGVsZXRlIGJpdG1hcCBpbiBsaW5rIGV4dGVuc2lvbiIpOworCWRhdGEgKz0gcmV0OworCXN6IC09IHJldDsKKwlzaS0+cmVwbGFjZV9iaXRtYXAgPSBld2FoX25ldygpOworCXJldCA9IGV3YWhfcmVhZF9tbWFwKHNpLT5yZXBsYWNlX2JpdG1hcCwgZGF0YSwgc3opOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gZXJyb3IoImNvcnJ1cHQgcmVwbGFjZSBiaXRtYXAgaW4gbGluayBleHRlbnNpb24iKTsKKwlpZiAocmV0ICE9IHN6KQorCQlyZXR1cm4gZXJyb3IoImdhcmJhZ2UgYXQgdGhlIGVuZCBvZiBsaW5rIGV4dGVuc2lvbiIpOworCXJldHVybiAwOworfQorCitpbnQgd3JpdGVfbGlua19leHRlbnNpb24oc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3RydWN0IHNwbGl0X2luZGV4ICpzaSA9IGlzdGF0ZS0+c3BsaXRfaW5kZXg7CisJc3RyYnVmX2FkZChzYiwgc2ktPmJhc2Vfb2lkLmhhc2gsIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKKwlpZiAoIXNpLT5kZWxldGVfYml0bWFwICYmICFzaS0+cmVwbGFjZV9iaXRtYXApCisJCXJldHVybiAwOworCWV3YWhfc2VyaWFsaXplX3N0cmJ1ZihzaS0+ZGVsZXRlX2JpdG1hcCwgc2IpOworCWV3YWhfc2VyaWFsaXplX3N0cmJ1ZihzaS0+cmVwbGFjZV9iaXRtYXAsIHNiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWFya19iYXNlX2luZGV4X2VudHJpZXMoc3RydWN0IGluZGV4X3N0YXRlICpiYXNlKQoreworCWludCBpOworCS8qCisJICogVG8ga2VlcCB0cmFjayBvZiB0aGUgc2hhcmVkIGVudHJpZXMgYmV0d2VlbgorCSAqIGlzdGF0ZS0+YmFzZS0+Y2FjaGVbXSBhbmQgaXN0YXRlLT5jYWNoZVtdLCBiYXNlIGVudHJ5CisJICogcG9zaXRpb24gaXMgc3RvcmVkIGluIGVhY2ggYmFzZSBlbnRyeS4gQWxsIHBvc2l0aW9ucyBzdGFydAorCSAqIGZyb20gMSBpbnN0ZWFkIG9mIDAsIHdoaWNoIGlzIHJlc2VydmVkIHRvIHNheSAidGhpcyBpcyBhIG5ldworCSAqIGVudHJ5Ii4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYmFzZS0+Y2FjaGVfbnI7IGkrKykKKwkJYmFzZS0+Y2FjaGVbaV0tPmluZGV4ID0gaSArIDE7Cit9CisKK3ZvaWQgbW92ZV9jYWNoZV90b19iYXNlX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXN0cnVjdCBzcGxpdF9pbmRleCAqc2kgPSBpc3RhdGUtPnNwbGl0X2luZGV4OworCWludCBpOworCisJLyoKKwkgKiBJZiB0aGVyZSB3YXMgYSBwcmV2aW91cyBiYXNlIGluZGV4LCB0aGVuIHRyYW5zZmVyIG93bmVyc2hpcCBvZiBhbGxvY2F0ZWQKKwkgKiBlbnRyaWVzIHRvIHRoZSBwYXJlbnQgaW5kZXguCisJICovCisJaWYgKHNpLT5iYXNlICYmCisJCXNpLT5iYXNlLT5jZV9tZW1fcG9vbCkgeworCisJCWlmICghaXN0YXRlLT5jZV9tZW1fcG9vbCkKKwkJCW1lbV9wb29sX2luaXQoJmlzdGF0ZS0+Y2VfbWVtX3Bvb2wsIDApOworCisJCW1lbV9wb29sX2NvbWJpbmUoaXN0YXRlLT5jZV9tZW1fcG9vbCwgaXN0YXRlLT5zcGxpdF9pbmRleC0+YmFzZS0+Y2VfbWVtX3Bvb2wpOworCX0KKworCXNpLT5iYXNlID0geGNhbGxvYygxLCBzaXplb2YoKnNpLT5iYXNlKSk7CisJc2ktPmJhc2UtPnZlcnNpb24gPSBpc3RhdGUtPnZlcnNpb247CisJLyogemVybyB0aW1lc3RhbXAgZGlzYWJsZXMgcmFjeSB0ZXN0IGluIGNlX3dyaXRlX2luZGV4KCkgKi8KKwlzaS0+YmFzZS0+dGltZXN0YW1wID0gaXN0YXRlLT50aW1lc3RhbXA7CisJQUxMT0NfR1JPVyhzaS0+YmFzZS0+Y2FjaGUsIGlzdGF0ZS0+Y2FjaGVfbnIsIHNpLT5iYXNlLT5jYWNoZV9hbGxvYyk7CisJc2ktPmJhc2UtPmNhY2hlX25yID0gaXN0YXRlLT5jYWNoZV9ucjsKKworCS8qCisJICogVGhlIG1lbV9wb29sIG5lZWRzIHRvIG1vdmUgd2l0aCB0aGUgYWxsb2NhdGVkIGVudHJpZXMuCisJICovCisJc2ktPmJhc2UtPmNlX21lbV9wb29sID0gaXN0YXRlLT5jZV9tZW1fcG9vbDsKKwlpc3RhdGUtPmNlX21lbV9wb29sID0gTlVMTDsKKworCUNPUFlfQVJSQVkoc2ktPmJhc2UtPmNhY2hlLCBpc3RhdGUtPmNhY2hlLCBpc3RhdGUtPmNhY2hlX25yKTsKKwltYXJrX2Jhc2VfaW5kZXhfZW50cmllcyhzaS0+YmFzZSk7CisJZm9yIChpID0gMDsgaSA8IHNpLT5iYXNlLT5jYWNoZV9ucjsgaSsrKQorCQlzaS0+YmFzZS0+Y2FjaGVbaV0tPmNlX2ZsYWdzICY9IH5DRV9VUERBVEVfSU5fQkFTRTsKK30KKworc3RhdGljIHZvaWQgbWFya19lbnRyeV9mb3JfZGVsZXRlKHNpemVfdCBwb3MsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUgPSBkYXRhOworCWlmIChwb3MgPj0gaXN0YXRlLT5jYWNoZV9ucikKKwkJZGllKCJwb3NpdGlvbiBmb3IgZGVsZXRlICVkIGV4Y2VlZHMgYmFzZSBpbmRleCBzaXplICVkIiwKKwkJICAgIChpbnQpcG9zLCBpc3RhdGUtPmNhY2hlX25yKTsKKwlpc3RhdGUtPmNhY2hlW3Bvc10tPmNlX2ZsYWdzIHw9IENFX1JFTU9WRTsKKwlpc3RhdGUtPnNwbGl0X2luZGV4LT5ucl9kZWxldGlvbnMrKzsKK30KKworc3RhdGljIHZvaWQgcmVwbGFjZV9lbnRyeShzaXplX3QgcG9zLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlID0gZGF0YTsKKwlzdHJ1Y3Qgc3BsaXRfaW5kZXggKnNpID0gaXN0YXRlLT5zcGxpdF9pbmRleDsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmRzdCwgKnNyYzsKKworCWlmIChwb3MgPj0gaXN0YXRlLT5jYWNoZV9ucikKKwkJZGllKCJwb3NpdGlvbiBmb3IgcmVwbGFjZW1lbnQgJWQgZXhjZWVkcyBiYXNlIGluZGV4IHNpemUgJWQiLAorCQkgICAgKGludClwb3MsIGlzdGF0ZS0+Y2FjaGVfbnIpOworCWlmIChzaS0+bnJfcmVwbGFjZW1lbnRzID49IHNpLT5zYXZlZF9jYWNoZV9ucikKKwkJZGllKCJ0b28gbWFueSByZXBsYWNlbWVudHMgKCVkIHZzICVkKSIsCisJCSAgICBzaS0+bnJfcmVwbGFjZW1lbnRzLCBzaS0+c2F2ZWRfY2FjaGVfbnIpOworCWRzdCA9IGlzdGF0ZS0+Y2FjaGVbcG9zXTsKKwlpZiAoZHN0LT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJZGllKCJlbnRyeSAlZCBpcyBtYXJrZWQgYXMgYm90aCByZXBsYWNlZCBhbmQgZGVsZXRlZCIsCisJCSAgICAoaW50KXBvcyk7CisJc3JjID0gc2ktPnNhdmVkX2NhY2hlW3NpLT5ucl9yZXBsYWNlbWVudHNdOworCWlmIChjZV9uYW1lbGVuKHNyYykpCisJCWRpZSgiY29ycnVwdCBsaW5rIGV4dGVuc2lvbiwgZW50cnkgJWQgc2hvdWxkIGhhdmUgIgorCQkgICAgInplcm8gbGVuZ3RoIG5hbWUiLCAoaW50KXBvcyk7CisJc3JjLT5pbmRleCA9IHBvcyArIDE7CisJc3JjLT5jZV9mbGFncyB8PSBDRV9VUERBVEVfSU5fQkFTRTsKKwlzcmMtPmNlX25hbWVsZW4gPSBkc3QtPmNlX25hbWVsZW47CisJY29weV9jYWNoZV9lbnRyeShkc3QsIHNyYyk7CisJZGlzY2FyZF9jYWNoZV9lbnRyeShzcmMpOworCXNpLT5ucl9yZXBsYWNlbWVudHMrKzsKK30KKwordm9pZCBtZXJnZV9iYXNlX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXN0cnVjdCBzcGxpdF9pbmRleCAqc2kgPSBpc3RhdGUtPnNwbGl0X2luZGV4OworCXVuc2lnbmVkIGludCBpOworCisJbWFya19iYXNlX2luZGV4X2VudHJpZXMoc2ktPmJhc2UpOworCisJc2ktPnNhdmVkX2NhY2hlCSAgICA9IGlzdGF0ZS0+Y2FjaGU7CisJc2ktPnNhdmVkX2NhY2hlX25yICA9IGlzdGF0ZS0+Y2FjaGVfbnI7CisJaXN0YXRlLT5jYWNoZV9uciAgICA9IHNpLT5iYXNlLT5jYWNoZV9ucjsKKwlpc3RhdGUtPmNhY2hlCSAgICA9IE5VTEw7CisJaXN0YXRlLT5jYWNoZV9hbGxvYyA9IDA7CisJQUxMT0NfR1JPVyhpc3RhdGUtPmNhY2hlLCBpc3RhdGUtPmNhY2hlX25yLCBpc3RhdGUtPmNhY2hlX2FsbG9jKTsKKwlDT1BZX0FSUkFZKGlzdGF0ZS0+Y2FjaGUsIHNpLT5iYXNlLT5jYWNoZSwgaXN0YXRlLT5jYWNoZV9ucik7CisKKwlzaS0+bnJfZGVsZXRpb25zID0gMDsKKwlzaS0+bnJfcmVwbGFjZW1lbnRzID0gMDsKKwlld2FoX2VhY2hfYml0KHNpLT5yZXBsYWNlX2JpdG1hcCwgcmVwbGFjZV9lbnRyeSwgaXN0YXRlKTsKKwlld2FoX2VhY2hfYml0KHNpLT5kZWxldGVfYml0bWFwLCBtYXJrX2VudHJ5X2Zvcl9kZWxldGUsIGlzdGF0ZSk7CisJaWYgKHNpLT5ucl9kZWxldGlvbnMpCisJCXJlbW92ZV9tYXJrZWRfY2FjaGVfZW50cmllcyhpc3RhdGUsIDApOworCisJZm9yIChpID0gc2ktPm5yX3JlcGxhY2VtZW50czsgaSA8IHNpLT5zYXZlZF9jYWNoZV9ucjsgaSsrKSB7CisJCWlmICghY2VfbmFtZWxlbihzaS0+c2F2ZWRfY2FjaGVbaV0pKQorCQkJZGllKCJjb3JydXB0IGxpbmsgZXh0ZW5zaW9uLCBlbnRyeSAlZCBzaG91bGQgIgorCQkJICAgICJoYXZlIG5vbi16ZXJvIGxlbmd0aCBuYW1lIiwgaSk7CisJCWFkZF9pbmRleF9lbnRyeShpc3RhdGUsIHNpLT5zYXZlZF9jYWNoZVtpXSwKKwkJCQlBRERfQ0FDSEVfT0tfVE9fQUREIHwKKwkJCQlBRERfQ0FDSEVfS0VFUF9DQUNIRV9UUkVFIHwKKwkJCQkvKgorCQkJCSAqIHdlIG1heSBoYXZlIHRvIHJlcGxheSB3aGF0CisJCQkJICogbWVyZ2UtcmVjdXJzaXZlLmM6dXBkYXRlX3N0YWdlcygpCisJCQkJICogZG9lcywgd2hpY2ggaGFzIHRoaXMgZmxhZyBvbgorCQkJCSAqLworCQkJCUFERF9DQUNIRV9TS0lQX0RGQ0hFQ0spOworCQlzaS0+c2F2ZWRfY2FjaGVbaV0gPSBOVUxMOworCX0KKworCWV3YWhfZnJlZShzaS0+ZGVsZXRlX2JpdG1hcCk7CisJZXdhaF9mcmVlKHNpLT5yZXBsYWNlX2JpdG1hcCk7CisJRlJFRV9BTkRfTlVMTChzaS0+c2F2ZWRfY2FjaGUpOworCXNpLT5kZWxldGVfYml0bWFwICA9IE5VTEw7CisJc2ktPnJlcGxhY2VfYml0bWFwID0gTlVMTDsKKwlzaS0+c2F2ZWRfY2FjaGVfbnIgPSAwOworfQorCisvKgorICogQ29tcGFyZSBtb3N0IG9mIHRoZSBmaWVsZHMgaW4gdHdvIGNhY2hlIGVudHJpZXMsIGkuZS4gYWxsIGV4Y2VwdCB0aGUKKyAqIGhhc2htYXBfZW50cnkgYW5kIHRoZSBuYW1lLgorICovCitzdGF0aWMgaW50IGNvbXBhcmVfY2VfY29udGVudChzdHJ1Y3QgY2FjaGVfZW50cnkgKmEsIHN0cnVjdCBjYWNoZV9lbnRyeSAqYikKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgb25kaXNrX2ZsYWdzID0gQ0VfU1RBR0VNQVNLIHwgQ0VfVkFMSUQgfAorCQkJCQkgIENFX0VYVEVOREVEX0ZMQUdTOworCXVuc2lnbmVkIGludCBjZV9mbGFncyA9IGEtPmNlX2ZsYWdzOworCXVuc2lnbmVkIGludCBiYXNlX2ZsYWdzID0gYi0+Y2VfZmxhZ3M7CisJaW50IHJldDsKKworCS8qIG9ubHkgb24tZGlzayBmbGFncyBtYXR0ZXIgKi8KKwlhLT5jZV9mbGFncyAmPSBvbmRpc2tfZmxhZ3M7CisJYi0+Y2VfZmxhZ3MgJj0gb25kaXNrX2ZsYWdzOworCXJldCA9IG1lbWNtcCgmYS0+Y2Vfc3RhdF9kYXRhLCAmYi0+Y2Vfc3RhdF9kYXRhLAorCQkgICAgIG9mZnNldG9mKHN0cnVjdCBjYWNoZV9lbnRyeSwgbmFtZSkgLQorCQkgICAgIG9mZnNldG9mKHN0cnVjdCBjYWNoZV9lbnRyeSwgY2Vfc3RhdF9kYXRhKSk7CisJYS0+Y2VfZmxhZ3MgPSBjZV9mbGFnczsKKwliLT5jZV9mbGFncyA9IGJhc2VfZmxhZ3M7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHByZXBhcmVfdG9fd3JpdGVfc3BsaXRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3RydWN0IHNwbGl0X2luZGV4ICpzaSA9IGluaXRfc3BsaXRfaW5kZXgoaXN0YXRlKTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKiplbnRyaWVzID0gTlVMTCwgKmNlOworCWludCBpLCBucl9lbnRyaWVzID0gMCwgbnJfYWxsb2MgPSAwOworCisJc2ktPmRlbGV0ZV9iaXRtYXAgPSBld2FoX25ldygpOworCXNpLT5yZXBsYWNlX2JpdG1hcCA9IGV3YWhfbmV3KCk7CisKKwlpZiAoc2ktPmJhc2UpIHsKKwkJLyogR28gdGhyb3VnaCBpc3RhdGUtPmNhY2hlW10gYW5kIG1hcmsgQ0VfTUFUQ0hFRCB0bworCQkgKiBlbnRyeSB3aXRoIHBvc2l0aXZlIGluZGV4LiBXZSdsbCBnbyB0aHJvdWdoCisJCSAqIGJhc2UtPmNhY2hlW10gbGF0ZXIgdG8gZGVsZXRlIGFsbCBlbnRyaWVzIGluIGJhc2UKKwkJICogdGhhdCBhcmUgbm90IG1hcmtlZCB3aXRoIGVpdGhlciBDRV9NQVRDSEVEIG9yCisJCSAqIENFX1VQREFURV9JTl9CQVNFLiBJZiBpc3RhdGUtPmNhY2hlW2ldIGlzIGEKKwkJICogZHVwbGljYXRlLCBkZWR1cGxpY2F0ZSBpdC4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqYmFzZTsKKwkJCWNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJCWlmICghY2UtPmluZGV4KSB7CisJCQkJLyoKKwkJCQkgKiBEdXJpbmcgc2ltcGxlIHVwZGF0ZSBpbmRleCBvcGVyYXRpb25zIHRoaXMKKwkJCQkgKiBpcyBhIGNhY2hlIGVudHJ5IHRoYXQgaXMgbm90IHByZXNlbnQgaW4KKwkJCQkgKiB0aGUgc2hhcmVkIGluZGV4LiAgSXQgd2lsbCBiZSBhZGRlZCB0byB0aGUKKwkJCQkgKiBzcGxpdCBpbmRleC4KKwkJCQkgKgorCQkJCSAqIEhvd2V2ZXIsIGl0IG1pZ2h0IGFsc28gcmVwcmVzZW50IGEgZmlsZQorCQkJCSAqIHRoYXQgYWxyZWFkeSBoYXMgYSBjYWNoZSBlbnRyeSBpbiB0aGUKKwkJCQkgKiBzaGFyZWQgaW5kZXgsIGJ1dCBhIG5ldyBpbmRleCBoYXMganVzdAorCQkJCSAqIGJlZW4gY29uc3RydWN0ZWQgYnkgdW5wYWNrX3RyZWVzKCksIGFuZAorCQkJCSAqIHRoaXMgZW50cnkgbm93IHJlZmVycyB0byBkaWZmZXJlbnQgY29udGVudAorCQkJCSAqIHRoYW4gd2hhdCB3YXMgcmVjb3JkZWQgaW4gdGhlIG9yaWdpbmFsCisJCQkJICogaW5kZXgsIGUuZy4gZHVyaW5nICdyZWFkLXRyZWUgLW0gSEVBRF4nIG9yCisJCQkJICogJ2NoZWNrb3V0IEhFQUReJy4gIEluIHRoaXMgY2FzZSB0aGUKKwkJCQkgKiBvcmlnaW5hbCBlbnRyeSBpbiB0aGUgc2hhcmVkIGluZGV4IHdpbGwgYmUKKwkJCQkgKiBtYXJrZWQgYXMgZGVsZXRlZCwgYW5kIHRoaXMgZW50cnkgd2lsbCBiZQorCQkJCSAqIGFkZGVkIHRvIHRoZSBzcGxpdCBpbmRleC4KKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChjZS0+aW5kZXggPiBzaS0+YmFzZS0+Y2FjaGVfbnIpIHsKKwkJCQlCVUcoImNlIHJlZmVycyB0byBhIHNoYXJlZCBjZSBhdCAlZCwgd2hpY2ggaXMgYmV5b25kIHRoZSBzaGFyZWQgaW5kZXggc2l6ZSAlZCIsCisJCQkJICAgIGNlLT5pbmRleCwgc2ktPmJhc2UtPmNhY2hlX25yKTsKKwkJCX0KKwkJCWNlLT5jZV9mbGFncyB8PSBDRV9NQVRDSEVEOyAvKiBvciAic2hhcmVkIiAqLworCQkJYmFzZSA9IHNpLT5iYXNlLT5jYWNoZVtjZS0+aW5kZXggLSAxXTsKKwkJCWlmIChjZSA9PSBiYXNlKSB7CisJCQkJLyogVGhlIGVudHJ5IGlzIHByZXNlbnQgaW4gdGhlIHNoYXJlZCBpbmRleC4gKi8KKwkJCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfVVBEQVRFX0lOX0JBU0UpIHsKKwkJCQkJLyoKKwkJCQkJICogQWxyZWFkeSBtYXJrZWQgZm9yIGluY2x1c2lvbiBpbgorCQkJCQkgKiB0aGUgc3BsaXQgaW5kZXgsIGVpdGhlciBiZWNhdXNlCisJCQkJCSAqIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgd2FzCisJCQkJCSAqIG1vZGlmaWVkIGFuZCB0aGUgY2FjaGVkIHN0YXQgZGF0YQorCQkJCQkgKiB3YXMgcmVmcmVzaGVkLCBvciBiZWNhdXNlIHRoZXJlCisJCQkJCSAqIGlzIGFscmVhZHkgYSByZXBsYWNlbWVudCBlbnRyeSBpbgorCQkJCQkgKiB0aGUgc3BsaXQgaW5kZXguCisJCQkJCSAqIE5vdGhpbmcgbW9yZSB0byBkbyBoZXJlLgorCQkJCQkgKi8KKwkJCQl9IGVsc2UgaWYgKCFjZV91cHRvZGF0ZShjZSkgJiYKKwkJCQkJICAgaXNfcmFjeV90aW1lc3RhbXAoaXN0YXRlLCBjZSkpIHsKKwkJCQkJLyoKKwkJCQkJICogQSByYWNpbHkgY2xlYW4gY2FjaGUgZW50cnkgc3RvcmVkCisJCQkJCSAqIG9ubHkgaW4gdGhlIHNoYXJlZCBpbmRleDogaXQgbXVzdAorCQkJCQkgKiBiZSBhZGRlZCB0byB0aGUgc3BsaXQgaW5kZXgsIHNvCisJCQkJCSAqIHRoZSBzdWJzZXF1ZW50IGRvX3dyaXRlX2luZGV4KCkKKwkJCQkJICogY2FuIHNtdWRnZSBpdHMgc3RhdCBkYXRhLgorCQkJCQkgKi8KKwkJCQkJY2UtPmNlX2ZsYWdzIHw9IENFX1VQREFURV9JTl9CQVNFOworCQkJCX0gZWxzZSB7CisJCQkJCS8qCisJCQkJCSAqIFRoZSBlbnRyeSBpcyBvbmx5IHByZXNlbnQgaW4gdGhlCisJCQkJCSAqIHNoYXJlZCBpbmRleCBhbmQgaXQgd2FzIG5vdAorCQkJCQkgKiByZWZyZXNoZWQuCisJCQkJCSAqIEp1c3QgbGVhdmUgaXQgdGhlcmUuCisJCQkJCSAqLworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChjZS0+Y2VfbmFtZWxlbiAhPSBiYXNlLT5jZV9uYW1lbGVuIHx8CisJCQkgICAgc3RyY21wKGNlLT5uYW1lLCBiYXNlLT5uYW1lKSkgeworCQkJCWNlLT5pbmRleCA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKgorCQkJICogVGhpcyBpcyB0aGUgY29weSBvZiBhIGNhY2hlIGVudHJ5IHRoYXQgaXMgcHJlc2VudAorCQkJICogaW4gdGhlIHNoYXJlZCBpbmRleCwgY3JlYXRlZCBieSB1bnBhY2tfdHJlZXMoKQorCQkJICogd2hpbGUgaXQgY29uc3RydWN0ZWQgYSBuZXcgaW5kZXguCisJCQkgKi8KKwkJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEVfSU5fQkFTRSkgeworCQkJCS8qCisJCQkJICogQWxyZWFkeSBtYXJrZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgc3BsaXQKKwkJCQkgKiBpbmRleCwgZWl0aGVyIGJlY2F1c2UgdGhlIGNvcnJlc3BvbmRpbmcKKwkJCQkgKiBmaWxlIHdhcyBtb2RpZmllZCBhbmQgdGhlIGNhY2hlZCBzdGF0IGRhdGEKKwkJCQkgKiB3YXMgcmVmcmVzaGVkLCBvciBiZWNhdXNlIHRoZSBvcmlnaW5hbAorCQkJCSAqIGVudHJ5IGFscmVhZHkgaGFkIGEgcmVwbGFjZW1lbnQgZW50cnkgaW4KKwkJCQkgKiB0aGUgc3BsaXQgaW5kZXguCisJCQkJICogTm90aGluZyB0byBkby4KKwkJCQkgKi8KKwkJCX0gZWxzZSBpZiAoIWNlX3VwdG9kYXRlKGNlKSAmJgorCQkJCSAgIGlzX3JhY3lfdGltZXN0YW1wKGlzdGF0ZSwgY2UpKSB7CisJCQkJLyoKKwkJCQkgKiBBIGNvcHkgb2YgYSByYWNpbHkgY2xlYW4gY2FjaGUgZW50cnkgZnJvbQorCQkJCSAqIHRoZSBzaGFyZWQgaW5kZXguICBJdCBtdXN0IGJlIGFkZGVkIHRvCisJCQkJICogdGhlIHNwbGl0IGluZGV4LCBzbyB0aGUgc3Vic2VxdWVudAorCQkJCSAqIGRvX3dyaXRlX2luZGV4KCkgY2FuIHNtdWRnZSBpdHMgc3RhdCBkYXRhLgorCQkJCSAqLworCQkJCWNlLT5jZV9mbGFncyB8PSBDRV9VUERBVEVfSU5fQkFTRTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBUaG9yb3VnaGx5IGNvbXBhcmUgdGhlIGNhY2hlZCBkYXRhIHRvIHNlZQorCQkJCSAqIHdoZXRoZXIgaXQgc2hvdWxkIGJlIG1hcmtlZCBmb3IgaW5jbHVzaW9uCisJCQkJICogaW4gdGhlIHNwbGl0IGluZGV4LgorCQkJCSAqCisJCQkJICogVGhpcyBjb21wYXJpc29uIG1pZ2h0IGJlIHVubmVjZXNzYXJ5LCBhcworCQkJCSAqIGNvZGUgcGF0aHMgbW9kaWZ5aW5nIHRoZSBjYWNoZWQgZGF0YSBkbworCQkJCSAqIHNldCBDRV9VUERBVEVfSU5fQkFTRSBhcyB3ZWxsLgorCQkJCSAqLworCQkJCWlmIChjb21wYXJlX2NlX2NvbnRlbnQoY2UsIGJhc2UpKQorCQkJCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfVVBEQVRFX0lOX0JBU0U7CisJCQl9CisJCQlkaXNjYXJkX2NhY2hlX2VudHJ5KGJhc2UpOworCQkJc2ktPmJhc2UtPmNhY2hlW2NlLT5pbmRleCAtIDFdID0gY2U7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHNpLT5iYXNlLT5jYWNoZV9ucjsgaSsrKSB7CisJCQljZSA9IHNpLT5iYXNlLT5jYWNoZVtpXTsKKwkJCWlmICgoY2UtPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKSB8fAorCQkJICAgICEoY2UtPmNlX2ZsYWdzICYgQ0VfTUFUQ0hFRCkpCisJCQkJZXdhaF9zZXQoc2ktPmRlbGV0ZV9iaXRtYXAsIGkpOworCQkJZWxzZSBpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfVVBEQVRFX0lOX0JBU0UpIHsKKwkJCQlld2FoX3NldChzaS0+cmVwbGFjZV9iaXRtYXAsIGkpOworCQkJCWNlLT5jZV9mbGFncyB8PSBDRV9TVFJJUF9OQU1FOworCQkJCUFMTE9DX0dST1coZW50cmllcywgbnJfZW50cmllcysxLCBucl9hbGxvYyk7CisJCQkJZW50cmllc1tucl9lbnRyaWVzKytdID0gY2U7CisJCQl9CisJCQlpZiAoaXNfbnVsbF9vaWQoJmNlLT5vaWQpKQorCQkJCWlzdGF0ZS0+ZHJvcF9jYWNoZV90cmVlID0gMTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQlpZiAoKCFzaS0+YmFzZSB8fCAhY2UtPmluZGV4KSAmJiAhKGNlLT5jZV9mbGFncyAmIENFX1JFTU9WRSkpIHsKKwkJCWFzc2VydCghKGNlLT5jZV9mbGFncyAmIENFX1NUUklQX05BTUUpKTsKKwkJCUFMTE9DX0dST1coZW50cmllcywgbnJfZW50cmllcysxLCBucl9hbGxvYyk7CisJCQllbnRyaWVzW25yX2VudHJpZXMrK10gPSBjZTsKKwkJfQorCQljZS0+Y2VfZmxhZ3MgJj0gfkNFX01BVENIRUQ7CisJfQorCisJLyoKKwkgKiB0YWtlIGNhY2hlW10gb3V0IHRlbXBvcmFyaWx5LCBwdXQgZW50cmllc1tdIGluIGl0cyBwbGFjZQorCSAqIGZvciB3cml0aW5nCisJICovCisJc2ktPnNhdmVkX2NhY2hlID0gaXN0YXRlLT5jYWNoZTsKKwlzaS0+c2F2ZWRfY2FjaGVfbnIgPSBpc3RhdGUtPmNhY2hlX25yOworCWlzdGF0ZS0+Y2FjaGUgPSBlbnRyaWVzOworCWlzdGF0ZS0+Y2FjaGVfbnIgPSBucl9lbnRyaWVzOworfQorCit2b2lkIGZpbmlzaF93cml0aW5nX3NwbGl0X2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXN0cnVjdCBzcGxpdF9pbmRleCAqc2kgPSBpbml0X3NwbGl0X2luZGV4KGlzdGF0ZSk7CisKKwlld2FoX2ZyZWUoc2ktPmRlbGV0ZV9iaXRtYXApOworCWV3YWhfZnJlZShzaS0+cmVwbGFjZV9iaXRtYXApOworCXNpLT5kZWxldGVfYml0bWFwID0gTlVMTDsKKwlzaS0+cmVwbGFjZV9iaXRtYXAgPSBOVUxMOworCWZyZWUoaXN0YXRlLT5jYWNoZSk7CisJaXN0YXRlLT5jYWNoZSA9IHNpLT5zYXZlZF9jYWNoZTsKKwlpc3RhdGUtPmNhY2hlX25yID0gc2ktPnNhdmVkX2NhY2hlX25yOworfQorCit2b2lkIGRpc2NhcmRfc3BsaXRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3RydWN0IHNwbGl0X2luZGV4ICpzaSA9IGlzdGF0ZS0+c3BsaXRfaW5kZXg7CisJaWYgKCFzaSkKKwkJcmV0dXJuOworCWlzdGF0ZS0+c3BsaXRfaW5kZXggPSBOVUxMOworCXNpLT5yZWZjb3VudC0tOworCWlmIChzaS0+cmVmY291bnQpCisJCXJldHVybjsKKwlpZiAoc2ktPmJhc2UpIHsKKwkJZGlzY2FyZF9pbmRleChzaS0+YmFzZSk7CisJCWZyZWUoc2ktPmJhc2UpOworCX0KKwlmcmVlKHNpKTsKK30KKwordm9pZCBzYXZlX29yX2ZyZWVfaW5kZXhfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJaWYgKGNlLT5pbmRleCAmJgorCSAgICBpc3RhdGUtPnNwbGl0X2luZGV4ICYmCisJICAgIGlzdGF0ZS0+c3BsaXRfaW5kZXgtPmJhc2UgJiYKKwkgICAgY2UtPmluZGV4IDw9IGlzdGF0ZS0+c3BsaXRfaW5kZXgtPmJhc2UtPmNhY2hlX25yICYmCisJICAgIGNlID09IGlzdGF0ZS0+c3BsaXRfaW5kZXgtPmJhc2UtPmNhY2hlW2NlLT5pbmRleCAtIDFdKQorCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfUkVNT1ZFOworCWVsc2UKKwkJZGlzY2FyZF9jYWNoZV9lbnRyeShjZSk7Cit9CisKK3ZvaWQgcmVwbGFjZV9pbmRleF9lbnRyeV9pbl9iYXNlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSBzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZF9lbnRyeSwKKwkJCQkgc3RydWN0IGNhY2hlX2VudHJ5ICpuZXdfZW50cnkpCit7CisJaWYgKG9sZF9lbnRyeS0+aW5kZXggJiYKKwkgICAgaXN0YXRlLT5zcGxpdF9pbmRleCAmJgorCSAgICBpc3RhdGUtPnNwbGl0X2luZGV4LT5iYXNlICYmCisJICAgIG9sZF9lbnRyeS0+aW5kZXggPD0gaXN0YXRlLT5zcGxpdF9pbmRleC0+YmFzZS0+Y2FjaGVfbnIpIHsKKwkJbmV3X2VudHJ5LT5pbmRleCA9IG9sZF9lbnRyeS0+aW5kZXg7CisJCWlmIChvbGRfZW50cnkgIT0gaXN0YXRlLT5zcGxpdF9pbmRleC0+YmFzZS0+Y2FjaGVbbmV3X2VudHJ5LT5pbmRleCAtIDFdKQorCQkJZGlzY2FyZF9jYWNoZV9lbnRyeShpc3RhdGUtPnNwbGl0X2luZGV4LT5iYXNlLT5jYWNoZVtuZXdfZW50cnktPmluZGV4IC0gMV0pOworCQlpc3RhdGUtPnNwbGl0X2luZGV4LT5iYXNlLT5jYWNoZVtuZXdfZW50cnktPmluZGV4IC0gMV0gPSBuZXdfZW50cnk7CisJfQorfQorCit2b2lkIGFkZF9zcGxpdF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpZiAoIWlzdGF0ZS0+c3BsaXRfaW5kZXgpIHsKKwkJaW5pdF9zcGxpdF9pbmRleChpc3RhdGUpOworCQlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gU1BMSVRfSU5ERVhfT1JERVJFRDsKKwl9Cit9CisKK3ZvaWQgcmVtb3ZlX3NwbGl0X2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWlmIChpc3RhdGUtPnNwbGl0X2luZGV4KSB7CisJCWlmIChpc3RhdGUtPnNwbGl0X2luZGV4LT5iYXNlKSB7CisJCQkvKgorCQkJICogV2hlbiByZW1vdmluZyB0aGUgc3BsaXQgaW5kZXgsIHdlIG5lZWQgdG8gbW92ZQorCQkJICogb3duZXJzaGlwIG9mIHRoZSBtZW1fcG9vbCBhc3NvY2lhdGVkIHdpdGggdGhlCisJCQkgKiBiYXNlIGluZGV4IHRvIHRoZSBtYWluIGluZGV4LiBUaGVyZSBtYXkgYmUgY2FjaGUgZW50cmllcworCQkJICogYWxsb2NhdGVkIGZyb20gdGhlIGJhc2UncyBtZW1vcnkgcG9vbCB0aGF0IGFyZSBzaGFyZWQgd2l0aAorCQkJICogdGhlX2luZGV4LmNhY2hlW10uCisJCQkgKi8KKwkJCW1lbV9wb29sX2NvbWJpbmUoaXN0YXRlLT5jZV9tZW1fcG9vbCwKKwkJCQkJIGlzdGF0ZS0+c3BsaXRfaW5kZXgtPmJhc2UtPmNlX21lbV9wb29sKTsKKworCQkJLyoKKwkJCSAqIFRoZSBzcGxpdCBpbmRleCBubyBsb25nZXIgb3ducyB0aGUgbWVtX3Bvb2wgYmFja2luZworCQkJICogaXRzIGNhY2hlIGFycmF5LiBBcyB3ZSBhcmUgZGlzY2FyZGluZyB0aGlzIGluZGV4LAorCQkJICogbWFyayB0aGUgaW5kZXggYXMgaGF2aW5nIG5vIGNhY2hlIGVudHJpZXMsIHNvIGl0CisJCQkgKiB3aWxsIG5vdCBhdHRlbXB0IHRvIGNsZWFuIHVwIHRoZSBjYWNoZSBlbnRyaWVzIG9yCisJCQkgKiB2YWxpZGF0ZSB0aGVtLgorCQkJICovCisJCQlpc3RhdGUtPnNwbGl0X2luZGV4LT5iYXNlLT5jYWNoZV9uciA9IDA7CisJCX0KKworCQkvKgorCQkgKiBXZSBjYW4gZGlzY2FyZCB0aGUgc3BsaXQgaW5kZXggYmVjYXVzZSBpdHMKKwkJICogbWVtb3J5IHBvb2wgaGFzIGJlZW4gaW5jb3Jwb3JhdGVkIGludG8gdGhlCisJCSAqIG1lbW9yeSBwb29sIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGhlX2luZGV4LgorCQkgKi8KKwkJZGlzY2FyZF9zcGxpdF9pbmRleChpc3RhdGUpOworCisJCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCB8PSBTT01FVEhJTkdfQ0hBTkdFRDsKKwl9Cit9CmRpZmYgLS1naXQgYS9zcGxpdC1pbmRleC5oIGIvc3BsaXQtaW5kZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTQzNWNhCi0tLSAvZGV2L251bGwKKysrIGIvc3BsaXQtaW5kZXguaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVmIFNQTElUX0lOREVYX0gKKyNkZWZpbmUgU1BMSVRfSU5ERVhfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKworc3RydWN0IGluZGV4X3N0YXRlOworc3RydWN0IHN0cmJ1ZjsKK3N0cnVjdCBld2FoX2JpdG1hcDsKKworc3RydWN0IHNwbGl0X2luZGV4IHsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGJhc2Vfb2lkOworCXN0cnVjdCBpbmRleF9zdGF0ZSAqYmFzZTsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmRlbGV0ZV9iaXRtYXA7CisJc3RydWN0IGV3YWhfYml0bWFwICpyZXBsYWNlX2JpdG1hcDsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKipzYXZlZF9jYWNoZTsKKwl1bnNpZ25lZCBpbnQgc2F2ZWRfY2FjaGVfbnI7CisJdW5zaWduZWQgaW50IG5yX2RlbGV0aW9uczsKKwl1bnNpZ25lZCBpbnQgbnJfcmVwbGFjZW1lbnRzOworCWludCByZWZjb3VudDsKK307CisKK3N0cnVjdCBzcGxpdF9pbmRleCAqaW5pdF9zcGxpdF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7Cit2b2lkIHNhdmVfb3JfZnJlZV9pbmRleF9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSk7Cit2b2lkIHJlcGxhY2VfaW5kZXhfZW50cnlfaW5fYmFzZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsCisJCQkJIHN0cnVjdCBjYWNoZV9lbnRyeSAqbmV3X2VudHJ5KTsKK2ludCByZWFkX2xpbmtfZXh0ZW5zaW9uKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzeik7CitpbnQgd3JpdGVfbGlua19leHRlbnNpb24oc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOwordm9pZCBtb3ZlX2NhY2hlX3RvX2Jhc2VfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOwordm9pZCBtZXJnZV9iYXNlX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKK3ZvaWQgcHJlcGFyZV90b193cml0ZV9zcGxpdF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7Cit2b2lkIGZpbmlzaF93cml0aW5nX3NwbGl0X2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKK3ZvaWQgZGlzY2FyZF9zcGxpdF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7Cit2b2lkIGFkZF9zcGxpdF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7Cit2b2lkIHJlbW92ZV9zcGxpdF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3RhYmxlLXFzb3J0LmMgYi9zdGFibGUtcXNvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2JhZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhYmxlLXFzb3J0LmMKQEAgLTAsMCArMSw2MiBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorCisvKgorICogQSBtZXJnZSBzb3J0IGltcGxlbWVudGF0aW9uLCBzaW1wbGlmaWVkIGZyb20gdGhlIHFzb3J0IGltcGxlbWVudGF0aW9uCisgKiBieSBNaWtlIEhhZXJ0ZWwsIHdoaWNoIGlzIGEgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAqLworCitzdGF0aWMgdm9pZCBtc29ydF93aXRoX3RtcCh2b2lkICpiLCBzaXplX3Qgbiwgc2l6ZV90IHMsCisJCQkgICBpbnQgKCpjbXApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSwKKwkJCSAgIGNoYXIgKnQpCit7CisJY2hhciAqdG1wOworCWNoYXIgKmIxLCAqYjI7CisJc2l6ZV90IG4xLCBuMjsKKworCWlmIChuIDw9IDEpCisJCXJldHVybjsKKworCW4xID0gbiAvIDI7CisJbjIgPSBuIC0gbjE7CisJYjEgPSBiOworCWIyID0gKGNoYXIgKiliICsgKG4xICogcyk7CisKKwltc29ydF93aXRoX3RtcChiMSwgbjEsIHMsIGNtcCwgdCk7CisJbXNvcnRfd2l0aF90bXAoYjIsIG4yLCBzLCBjbXAsIHQpOworCisJdG1wID0gdDsKKworCXdoaWxlIChuMSA+IDAgJiYgbjIgPiAwKSB7CisJCWlmIChjbXAoYjEsIGIyKSA8PSAwKSB7CisJCQltZW1jcHkodG1wLCBiMSwgcyk7CisJCQl0bXAgKz0gczsKKwkJCWIxICs9IHM7CisJCQktLW4xOworCQl9IGVsc2UgeworCQkJbWVtY3B5KHRtcCwgYjIsIHMpOworCQkJdG1wICs9IHM7CisJCQliMiArPSBzOworCQkJLS1uMjsKKwkJfQorCX0KKwlpZiAobjEgPiAwKQorCQltZW1jcHkodG1wLCBiMSwgbjEgKiBzKTsKKwltZW1jcHkoYiwgdCwgKG4gLSBuMikgKiBzKTsKK30KKwordm9pZCBnaXRfc3RhYmxlX3Fzb3J0KHZvaWQgKmIsIHNpemVfdCBuLCBzaXplX3QgcywKKwkJICAgICAgaW50ICgqY21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCit7CisJY29uc3Qgc2l6ZV90IHNpemUgPSBzdF9tdWx0KG4sIHMpOworCWNoYXIgYnVmWzEwMjRdOworCisJaWYgKHNpemUgPCBzaXplb2YoYnVmKSkgeworCQkvKiBUaGUgdGVtcG9yYXJ5IGFycmF5IGZpdHMgb24gdGhlIHNtYWxsIG9uLXN0YWNrIGJ1ZmZlci4gKi8KKwkJbXNvcnRfd2l0aF90bXAoYiwgbiwgcywgY21wLCBidWYpOworCX0gZWxzZSB7CisJCS8qIEl0J3Mgc29tZXdoYXQgbGFyZ2UsIHNvIG1hbGxvYyBpdC4gICovCisJCWNoYXIgKnRtcCA9IHhtYWxsb2Moc2l6ZSk7CisJCW1zb3J0X3dpdGhfdG1wKGIsIG4sIHMsIGNtcCwgdG1wKTsKKwkJZnJlZSh0bXApOworCX0KK30KZGlmZiAtLWdpdCBhL3N0cmJ1Zi5jIGIvc3RyYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYxYTdkMwotLS0gL2Rldi9udWxsCisrKyBiL3N0cmJ1Zi5jCkBAIC0wLDAgKzEsMTE4NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAidXRmOC5oIgorCitpbnQgc3RhcnRzX3dpdGgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJZm9yICg7IDsgc3RyKyssIHByZWZpeCsrKQorCQlpZiAoISpwcmVmaXgpCisJCQlyZXR1cm4gMTsKKwkJZWxzZSBpZiAoKnN0ciAhPSAqcHJlZml4KQorCQkJcmV0dXJuIDA7Cit9CisKK2ludCBpc3RhcnRzX3dpdGgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJZm9yICg7IDsgc3RyKyssIHByZWZpeCsrKQorCQlpZiAoISpwcmVmaXgpCisJCQlyZXR1cm4gMTsKKwkJZWxzZSBpZiAodG9sb3dlcigqc3RyKSAhPSB0b2xvd2VyKCpwcmVmaXgpKQorCQkJcmV0dXJuIDA7Cit9CisKK2ludCBza2lwX3RvX29wdGlvbmFsX2FyZ19kZWZhdWx0KGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSBjb25zdCBjaGFyICoqYXJnLCBjb25zdCBjaGFyICpkZWYpCit7CisJY29uc3QgY2hhciAqcDsKKworCWlmICghc2tpcF9wcmVmaXgoc3RyLCBwcmVmaXgsICZwKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoISpwKSB7CisJCWlmIChhcmcpCisJCQkqYXJnID0gZGVmOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoKnAgIT0gJz0nKQorCQlyZXR1cm4gMDsKKworCWlmIChhcmcpCisJCSphcmcgPSBwICsgMTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFVzZWQgYXMgdGhlIGRlZmF1bHQgLT5idWYgdmFsdWUsIHNvIHRoYXQgcGVvcGxlIGNhbiBhbHdheXMgYXNzdW1lCisgKiBidWYgaXMgbm9uIE5VTEwgYW5kIC0+YnVmIGlzIE5VTCB0ZXJtaW5hdGVkIGV2ZW4gZm9yIGEgZnJlc2hseQorICogaW5pdGlhbGl6ZWQgc3RyYnVmLgorICovCitjaGFyIHN0cmJ1Zl9zbG9wYnVmWzFdOworCit2b2lkIHN0cmJ1Zl9pbml0KHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgaGludCkKK3sKKwlzYi0+YWxsb2MgPSBzYi0+bGVuID0gMDsKKwlzYi0+YnVmID0gc3RyYnVmX3Nsb3BidWY7CisJaWYgKGhpbnQpCisJCXN0cmJ1Zl9ncm93KHNiLCBoaW50KTsKK30KKwordm9pZCBzdHJidWZfcmVsZWFzZShzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpZiAoc2ItPmFsbG9jKSB7CisJCWZyZWUoc2ItPmJ1Zik7CisJCXN0cmJ1Zl9pbml0KHNiLCAwKTsKKwl9Cit9CisKK2NoYXIgKnN0cmJ1Zl9kZXRhY2goc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCAqc3opCit7CisJY2hhciAqcmVzOworCXN0cmJ1Zl9ncm93KHNiLCAwKTsKKwlyZXMgPSBzYi0+YnVmOworCWlmIChzeikKKwkJKnN6ID0gc2ItPmxlbjsKKwlzdHJidWZfaW5pdChzYiwgMCk7CisJcmV0dXJuIHJlczsKK30KKwordm9pZCBzdHJidWZfYXR0YWNoKHN0cnVjdCBzdHJidWYgKnNiLCB2b2lkICpidWYsIHNpemVfdCBsZW4sIHNpemVfdCBhbGxvYykKK3sKKwlzdHJidWZfcmVsZWFzZShzYik7CisJc2ItPmJ1ZiAgID0gYnVmOworCXNiLT5sZW4gICA9IGxlbjsKKwlzYi0+YWxsb2MgPSBhbGxvYzsKKwlzdHJidWZfZ3JvdyhzYiwgMCk7CisJc2ItPmJ1ZltzYi0+bGVuXSA9ICdcMCc7Cit9CisKK3ZvaWQgc3RyYnVmX2dyb3coc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBleHRyYSkKK3sKKwlpbnQgbmV3X2J1ZiA9ICFzYi0+YWxsb2M7CisJaWYgKHVuc2lnbmVkX2FkZF9vdmVyZmxvd3MoZXh0cmEsIDEpIHx8CisJICAgIHVuc2lnbmVkX2FkZF9vdmVyZmxvd3Moc2ItPmxlbiwgZXh0cmEgKyAxKSkKKwkJZGllKCJ5b3Ugd2FudCB0byB1c2Ugd2F5IHRvbyBtdWNoIG1lbW9yeSIpOworCWlmIChuZXdfYnVmKQorCQlzYi0+YnVmID0gTlVMTDsKKwlBTExPQ19HUk9XKHNiLT5idWYsIHNiLT5sZW4gKyBleHRyYSArIDEsIHNiLT5hbGxvYyk7CisJaWYgKG5ld19idWYpCisJCXNiLT5idWZbMF0gPSAnXDAnOworfQorCit2b2lkIHN0cmJ1Zl90cmltKHN0cnVjdCBzdHJidWYgKnNiKQoreworCXN0cmJ1Zl9ydHJpbShzYik7CisJc3RyYnVmX2x0cmltKHNiKTsKK30KKwordm9pZCBzdHJidWZfcnRyaW0oc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJd2hpbGUgKHNiLT5sZW4gPiAwICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpc2ItPmJ1ZltzYi0+bGVuIC0gMV0pKQorCQlzYi0+bGVuLS07CisJc2ItPmJ1ZltzYi0+bGVuXSA9ICdcMCc7Cit9CisKK3ZvaWQgc3RyYnVmX3RyaW1fdHJhaWxpbmdfZGlyX3NlcChzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwl3aGlsZSAoc2ItPmxlbiA+IDAgJiYgaXNfZGlyX3NlcCgodW5zaWduZWQgY2hhcilzYi0+YnVmW3NiLT5sZW4gLSAxXSkpCisJCXNiLT5sZW4tLTsKKwlzYi0+YnVmW3NiLT5sZW5dID0gJ1wwJzsKK30KKwordm9pZCBzdHJidWZfdHJpbV90cmFpbGluZ19uZXdsaW5lKHN0cnVjdCBzdHJidWYgKnNiKQoreworCWlmIChzYi0+bGVuID4gMCAmJiBzYi0+YnVmW3NiLT5sZW4gLSAxXSA9PSAnXG4nKSB7CisJCWlmICgtLXNiLT5sZW4gPiAwICYmIHNiLT5idWZbc2ItPmxlbiAtIDFdID09ICdccicpCisJCQktLXNiLT5sZW47CisJCXNiLT5idWZbc2ItPmxlbl0gPSAnXDAnOworCX0KK30KKwordm9pZCBzdHJidWZfbHRyaW0oc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJY2hhciAqYiA9IHNiLT5idWY7CisJd2hpbGUgKHNiLT5sZW4gPiAwICYmIGlzc3BhY2UoKmIpKSB7CisJCWIrKzsKKwkJc2ItPmxlbi0tOworCX0KKwltZW1tb3ZlKHNiLT5idWYsIGIsIHNiLT5sZW4pOworCXNiLT5idWZbc2ItPmxlbl0gPSAnXDAnOworfQorCitpbnQgc3RyYnVmX3JlZW5jb2RlKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpmcm9tLCBjb25zdCBjaGFyICp0bykKK3sKKwljaGFyICpvdXQ7CisJc2l6ZV90IGxlbjsKKworCWlmIChzYW1lX2VuY29kaW5nKGZyb20sIHRvKSkKKwkJcmV0dXJuIDA7CisKKwlvdXQgPSByZWVuY29kZV9zdHJpbmdfbGVuKHNiLT5idWYsIHNiLT5sZW4sIHRvLCBmcm9tLCAmbGVuKTsKKwlpZiAoIW91dCkKKwkJcmV0dXJuIC0xOworCisJc3RyYnVmX2F0dGFjaChzYiwgb3V0LCBsZW4sIGxlbik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc3RyYnVmX3RvbG93ZXIoc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJY2hhciAqcCA9IHNiLT5idWYsICplbmQgPSBzYi0+YnVmICsgc2ItPmxlbjsKKwlmb3IgKDsgcCA8IGVuZDsgcCsrKQorCQkqcCA9IHRvbG93ZXIoKnApOworfQorCitzdHJ1Y3Qgc3RyYnVmICoqc3RyYnVmX3NwbGl0X2J1Zihjb25zdCBjaGFyICpzdHIsIHNpemVfdCBzbGVuLAorCQkJCSBpbnQgdGVybWluYXRvciwgaW50IG1heCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICoqcmV0ID0gTlVMTDsKKwlzaXplX3QgbnIgPSAwLCBhbGxvYyA9IDA7CisJc3RydWN0IHN0cmJ1ZiAqdDsKKworCXdoaWxlIChzbGVuKSB7CisJCWludCBsZW4gPSBzbGVuOworCQlpZiAobWF4IDw9IDAgfHwgbnIgKyAxIDwgbWF4KSB7CisJCQljb25zdCBjaGFyICplbmQgPSBtZW1jaHIoc3RyLCB0ZXJtaW5hdG9yLCBzbGVuKTsKKwkJCWlmIChlbmQpCisJCQkJbGVuID0gZW5kIC0gc3RyICsgMTsKKwkJfQorCQl0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0cmJ1ZikpOworCQlzdHJidWZfaW5pdCh0LCBsZW4pOworCQlzdHJidWZfYWRkKHQsIHN0ciwgbGVuKTsKKwkJQUxMT0NfR1JPVyhyZXQsIG5yICsgMiwgYWxsb2MpOworCQlyZXRbbnIrK10gPSB0OworCQlzdHIgKz0gbGVuOworCQlzbGVuIC09IGxlbjsKKwl9CisJQUxMT0NfR1JPVyhyZXQsIG5yICsgMSwgYWxsb2MpOyAvKiBJbiBjYXNlIHN0cmluZyB3YXMgZW1wdHkgKi8KKwlyZXRbbnJdID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHN0cmJ1Zl9hZGRfc2VwYXJhdGVkX3N0cmluZ19saXN0KHN0cnVjdCBzdHJidWYgKnN0ciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpzZXAsCisJCQkJICAgICAgc3RydWN0IHN0cmluZ19saXN0ICpzbGlzdCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlpbnQgc2VwX25lZWRlZCA9IDA7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIHNsaXN0KSB7CisJCWlmIChzZXBfbmVlZGVkKQorCQkJc3RyYnVmX2FkZHN0cihzdHIsIHNlcCk7CisJCXN0cmJ1Zl9hZGRzdHIoc3RyLCBpdGVtLT5zdHJpbmcpOworCQlzZXBfbmVlZGVkID0gMTsKKwl9Cit9CisKK3ZvaWQgc3RyYnVmX2xpc3RfZnJlZShzdHJ1Y3Qgc3RyYnVmICoqc2JzKQoreworCXN0cnVjdCBzdHJidWYgKipzID0gc2JzOworCisJd2hpbGUgKCpzKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCpzKTsKKwkJZnJlZSgqcysrKTsKKwl9CisJZnJlZShzYnMpOworfQorCitpbnQgc3RyYnVmX2NtcChjb25zdCBzdHJ1Y3Qgc3RyYnVmICphLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpiKQoreworCXNpemVfdCBsZW4gPSBhLT5sZW4gPCBiLT5sZW4gPyBhLT5sZW46IGItPmxlbjsKKwlpbnQgY21wID0gbWVtY21wKGEtPmJ1ZiwgYi0+YnVmLCBsZW4pOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisJcmV0dXJuIGEtPmxlbiA8IGItPmxlbiA/IC0xOiBhLT5sZW4gIT0gYi0+bGVuOworfQorCit2b2lkIHN0cmJ1Zl9zcGxpY2Uoc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBwb3MsIHNpemVfdCBsZW4sCisJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRsZW4pCit7CisJaWYgKHVuc2lnbmVkX2FkZF9vdmVyZmxvd3MocG9zLCBsZW4pKQorCQlkaWUoInlvdSB3YW50IHRvIHVzZSB3YXkgdG9vIG11Y2ggbWVtb3J5Iik7CisJaWYgKHBvcyA+IHNiLT5sZW4pCisJCWRpZSgiYHBvcycgaXMgdG9vIGZhciBhZnRlciB0aGUgZW5kIG9mIHRoZSBidWZmZXIiKTsKKwlpZiAocG9zICsgbGVuID4gc2ItPmxlbikKKwkJZGllKCJgcG9zICsgbGVuJyBpcyB0b28gZmFyIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpOworCisJaWYgKGRsZW4gPj0gbGVuKQorCQlzdHJidWZfZ3JvdyhzYiwgZGxlbiAtIGxlbik7CisJbWVtbW92ZShzYi0+YnVmICsgcG9zICsgZGxlbiwKKwkJCXNiLT5idWYgKyBwb3MgKyBsZW4sCisJCQlzYi0+bGVuIC0gcG9zIC0gbGVuKTsKKwltZW1jcHkoc2ItPmJ1ZiArIHBvcywgZGF0YSwgZGxlbik7CisJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiArIGRsZW4gLSBsZW4pOworfQorCit2b2lkIHN0cmJ1Zl9pbnNlcnQoc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBwb3MsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc3RyYnVmX3NwbGljZShzYiwgcG9zLCAwLCBkYXRhLCBsZW4pOworfQorCit2b2lkIHN0cmJ1Zl92aW5zZXJ0ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCWludCBsZW4sIGxlbjI7CisJY2hhciBzYXZlOworCXZhX2xpc3QgY3A7CisKKwlpZiAocG9zID4gc2ItPmxlbikKKwkJZGllKCJgcG9zJyBpcyB0b28gZmFyIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpOworCXZhX2NvcHkoY3AsIGFwKTsKKwlsZW4gPSB2c25wcmludGYoc2ItPmJ1ZiArIHNiLT5sZW4sIDAsIGZtdCwgY3ApOworCXZhX2VuZChjcCk7CisJaWYgKGxlbiA8IDApCisJCUJVRygieW91ciB2c25wcmludGYgaXMgYnJva2VuIChyZXR1cm5lZCAlZCkiLCBsZW4pOworCWlmICghbGVuKQorCQlyZXR1cm47IC8qIG5vdGhpbmcgdG8gZG8gKi8KKwlpZiAodW5zaWduZWRfYWRkX292ZXJmbG93cyhzYi0+bGVuLCBsZW4pKQorCQlkaWUoInlvdSB3YW50IHRvIHVzZSB3YXkgdG9vIG11Y2ggbWVtb3J5Iik7CisJc3RyYnVmX2dyb3coc2IsIGxlbik7CisJbWVtbW92ZShzYi0+YnVmICsgcG9zICsgbGVuLCBzYi0+YnVmICsgcG9zLCBzYi0+bGVuIC0gcG9zKTsKKwkvKiB2c25wcmludGYoKSB3aWxsIGFwcGVuZCBhIE5VTCwgb3ZlcndyaXRpbmcgb25lIG9mIG91ciBjaGFyYWN0ZXJzICovCisJc2F2ZSA9IHNiLT5idWZbcG9zICsgbGVuXTsKKwlsZW4yID0gdnNucHJpbnRmKHNiLT5idWYgKyBwb3MsIGxlbiArIDEsIGZtdCwgYXApOworCXNiLT5idWZbcG9zICsgbGVuXSA9IHNhdmU7CisJaWYgKGxlbjIgIT0gbGVuKQorCQlCVUcoInlvdXIgdnNucHJpbnRmIGlzIGJyb2tlbiAocmV0dXJucyBpbmNvbnNpc3RlbnQgbGVuZ3RocykiKTsKKwlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuICsgbGVuKTsKK30KKwordm9pZCBzdHJidWZfaW5zZXJ0ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlzdHJidWZfdmluc2VydGYoc2IsIHBvcywgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKwordm9pZCBzdHJidWZfcmVtb3ZlKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgcG9zLCBzaXplX3QgbGVuKQoreworCXN0cmJ1Zl9zcGxpY2Uoc2IsIHBvcywgbGVuLCAiIiwgMCk7Cit9CisKK3ZvaWQgc3RyYnVmX2FkZChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJidWZfZ3JvdyhzYiwgbGVuKTsKKwltZW1jcHkoc2ItPmJ1ZiArIHNiLT5sZW4sIGRhdGEsIGxlbik7CisJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiArIGxlbik7Cit9CisKK3ZvaWQgc3RyYnVmX2FkZGJ1ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc2IyKQoreworCXN0cmJ1Zl9ncm93KHNiLCBzYjItPmxlbik7CisJbWVtY3B5KHNiLT5idWYgKyBzYi0+bGVuLCBzYjItPmJ1Ziwgc2IyLT5sZW4pOworCXN0cmJ1Zl9zZXRsZW4oc2IsIHNiLT5sZW4gKyBzYjItPmxlbik7Cit9CisKK2NvbnN0IGNoYXIgKnN0cmJ1Zl9qb2luX2FyZ3Yoc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQkJICAgICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNoYXIgZGVsaW0pCit7CisJaWYgKCFhcmdjKQorCQlyZXR1cm4gYnVmLT5idWY7CisKKwlzdHJidWZfYWRkc3RyKGJ1ZiwgKmFyZ3YpOworCXdoaWxlICgtLWFyZ2MpIHsKKwkJc3RyYnVmX2FkZGNoKGJ1ZiwgZGVsaW0pOworCQlzdHJidWZfYWRkc3RyKGJ1ZiwgKigrK2FyZ3YpKTsKKwl9CisKKwlyZXR1cm4gYnVmLT5idWY7Cit9CisKK3ZvaWQgc3RyYnVmX2FkZGNoYXJzKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgYywgc2l6ZV90IG4pCit7CisJc3RyYnVmX2dyb3coc2IsIG4pOworCW1lbXNldChzYi0+YnVmICsgc2ItPmxlbiwgYywgbik7CisJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiArIG4pOworfQorCit2b2lkIHN0cmJ1Zl9hZGRmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0cmJ1Zl92YWRkZihzYiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2xpbmVzKHN0cnVjdCBzdHJidWYgKm91dCwKKwkJCWNvbnN0IGNoYXIgKnByZWZpeDEsCisJCQljb25zdCBjaGFyICpwcmVmaXgyLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwl3aGlsZSAoc2l6ZSkgeworCQljb25zdCBjaGFyICpwcmVmaXg7CisJCWNvbnN0IGNoYXIgKm5leHQgPSBtZW1jaHIoYnVmLCAnXG4nLCBzaXplKTsKKwkJbmV4dCA9IG5leHQgPyAobmV4dCArIDEpIDogKGJ1ZiArIHNpemUpOworCisJCXByZWZpeCA9ICgocHJlZml4MiAmJiAoYnVmWzBdID09ICdcbicgfHwgYnVmWzBdID09ICdcdCcpKQorCQkJICA/IHByZWZpeDIgOiBwcmVmaXgxKTsKKwkJc3RyYnVmX2FkZHN0cihvdXQsIHByZWZpeCk7CisJCXN0cmJ1Zl9hZGQob3V0LCBidWYsIG5leHQgLSBidWYpOworCQlzaXplIC09IG5leHQgLSBidWY7CisJCWJ1ZiA9IG5leHQ7CisJfQorCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKG91dCk7Cit9CisKK3ZvaWQgc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXMoc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0YXRpYyBjaGFyIHByZWZpeDFbM107CisJc3RhdGljIGNoYXIgcHJlZml4MlsyXTsKKworCWlmIChwcmVmaXgxWzBdICE9IGNvbW1lbnRfbGluZV9jaGFyKSB7CisJCXhzbnByaW50ZihwcmVmaXgxLCBzaXplb2YocHJlZml4MSksICIlYyAiLCBjb21tZW50X2xpbmVfY2hhcik7CisJCXhzbnByaW50ZihwcmVmaXgyLCBzaXplb2YocHJlZml4MiksICIlYyIsIGNvbW1lbnRfbGluZV9jaGFyKTsKKwl9CisJYWRkX2xpbmVzKG91dCwgcHJlZml4MSwgcHJlZml4MiwgYnVmLCBzaXplKTsKK30KKwordm9pZCBzdHJidWZfY29tbWVudGVkX2FkZGYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGluY29tcGxldGVfbGluZSA9IHNiLT5sZW4gJiYgc2ItPmJ1ZltzYi0+bGVuIC0gMV0gIT0gJ1xuJzsKKworCXZhX3N0YXJ0KHBhcmFtcywgZm10KTsKKwlzdHJidWZfdmFkZGYoJmJ1ZiwgZm10LCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworCisJc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXMoc2IsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCWlmIChpbmNvbXBsZXRlX2xpbmUpCisJCXNiLT5idWZbLS1zYi0+bGVuXSA9ICdcMCc7CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKwordm9pZCBzdHJidWZfdmFkZGYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlpbnQgbGVuOworCXZhX2xpc3QgY3A7CisKKwlpZiAoIXN0cmJ1Zl9hdmFpbChzYikpCisJCXN0cmJ1Zl9ncm93KHNiLCA2NCk7CisJdmFfY29weShjcCwgYXApOworCWxlbiA9IHZzbnByaW50ZihzYi0+YnVmICsgc2ItPmxlbiwgc2ItPmFsbG9jIC0gc2ItPmxlbiwgZm10LCBjcCk7CisJdmFfZW5kKGNwKTsKKwlpZiAobGVuIDwgMCkKKwkJQlVHKCJ5b3VyIHZzbnByaW50ZiBpcyBicm9rZW4gKHJldHVybmVkICVkKSIsIGxlbik7CisJaWYgKGxlbiA+IHN0cmJ1Zl9hdmFpbChzYikpIHsKKwkJc3RyYnVmX2dyb3coc2IsIGxlbik7CisJCWxlbiA9IHZzbnByaW50ZihzYi0+YnVmICsgc2ItPmxlbiwgc2ItPmFsbG9jIC0gc2ItPmxlbiwgZm10LCBhcCk7CisJCWlmIChsZW4gPiBzdHJidWZfYXZhaWwoc2IpKQorCQkJQlVHKCJ5b3VyIHZzbnByaW50ZiBpcyBicm9rZW4gKGluc2F0aWFibGUpIik7CisJfQorCXN0cmJ1Zl9zZXRsZW4oc2IsIHNiLT5sZW4gKyBsZW4pOworfQorCit2b2lkIHN0cmJ1Zl9leHBhbmQoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZvcm1hdCwgZXhwYW5kX2ZuX3QgZm4sCisJCSAgIHZvaWQgKmNvbnRleHQpCit7CisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpwZXJjZW50OworCQlzaXplX3QgY29uc3VtZWQ7CisKKwkJcGVyY2VudCA9IHN0cmNocm51bChmb3JtYXQsICclJyk7CisJCXN0cmJ1Zl9hZGQoc2IsIGZvcm1hdCwgcGVyY2VudCAtIGZvcm1hdCk7CisJCWlmICghKnBlcmNlbnQpCisJCQlicmVhazsKKwkJZm9ybWF0ID0gcGVyY2VudCArIDE7CisKKwkJaWYgKCpmb3JtYXQgPT0gJyUnKSB7CisJCQlzdHJidWZfYWRkY2goc2IsICclJyk7CisJCQlmb3JtYXQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29uc3VtZWQgPSBmbihzYiwgZm9ybWF0LCBjb250ZXh0KTsKKwkJaWYgKGNvbnN1bWVkKQorCQkJZm9ybWF0ICs9IGNvbnN1bWVkOworCQllbHNlCisJCQlzdHJidWZfYWRkY2goc2IsICclJyk7CisJfQorfQorCitzaXplX3Qgc3RyYnVmX2V4cGFuZF9saXRlcmFsX2NiKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJCWNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJCXZvaWQgKmNvbnRleHQpCit7CisJaW50IGNoOworCisJc3dpdGNoIChwbGFjZWhvbGRlclswXSkgeworCWNhc2UgJ24nOgkJLyogbmV3bGluZSAqLworCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCQlyZXR1cm4gMTsKKwljYXNlICd4JzoKKwkJLyogJXgwMCA9PSBOVUwsICV4MGEgPT0gTEYsIGV0Yy4gKi8KKwkJY2ggPSBoZXgyY2hyKHBsYWNlaG9sZGVyICsgMSk7CisJCWlmIChjaCA8IDApCisJCQlyZXR1cm4gMDsKKwkJc3RyYnVmX2FkZGNoKHNiLCBjaCk7CisJCXJldHVybiAzOworCX0KKwlyZXR1cm4gMDsKK30KKworc2l6ZV90IHN0cmJ1Zl9leHBhbmRfZGljdF9jYihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGxhY2Vob2xkZXIsCisJCXZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHN0cmJ1Zl9leHBhbmRfZGljdF9lbnRyeSAqZSA9IGNvbnRleHQ7CisJc2l6ZV90IGxlbjsKKworCWZvciAoOyBlLT5wbGFjZWhvbGRlciAmJiAobGVuID0gc3RybGVuKGUtPnBsYWNlaG9sZGVyKSk7IGUrKykgeworCQlpZiAoIXN0cm5jbXAocGxhY2Vob2xkZXIsIGUtPnBsYWNlaG9sZGVyLCBsZW4pKSB7CisJCQlpZiAoZS0+dmFsdWUpCisJCQkJc3RyYnVmX2FkZHN0cihzYiwgZS0+dmFsdWUpOworCQkJcmV0dXJuIGxlbjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBzdHJidWZfYWRkYnVmX3BlcmNlbnRxdW90ZShzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IHN0cnVjdCBzdHJidWYgKnNyYykKK3sKKwlzaXplX3QgaSwgbGVuID0gc3JjLT5sZW47CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKHNyYy0+YnVmW2ldID09ICclJykKKwkJCXN0cmJ1Zl9hZGRjaChkc3QsICclJyk7CisJCXN0cmJ1Zl9hZGRjaChkc3QsIHNyYy0+YnVmW2ldKTsKKwl9Cit9CisKKyNkZWZpbmUgVVJMX1VOU0FGRV9DSEFSUyAiIDw+XCIle318XFxeYDo/I1tdQCEkJicoKSorLDs9IgorCit2b2lkIHN0cmJ1Zl9hZGRfcGVyY2VudGVuY29kZShzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50IGZsYWdzKQoreworCXNpemVfdCBpLCBsZW4gPSBzdHJsZW4oc3JjKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIGNoID0gc3JjW2ldOworCQlpZiAoY2ggPD0gMHgxRiB8fCBjaCA+PSAweDdGIHx8CisJCSAgICAoY2ggPT0gJy8nICYmIChmbGFncyAmIFNUUkJVRl9FTkNPREVfU0xBU0gpKSB8fAorCQkgICAgc3RyY2hyKFVSTF9VTlNBRkVfQ0hBUlMsIGNoKSkKKwkJCXN0cmJ1Zl9hZGRmKGRzdCwgIiUlJTAyWCIsICh1bnNpZ25lZCBjaGFyKWNoKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKGRzdCwgY2gpOworCX0KK30KKworc2l6ZV90IHN0cmJ1Zl9mcmVhZChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHNpemUsIEZJTEUgKmYpCit7CisJc2l6ZV90IHJlczsKKwlzaXplX3Qgb2xkYWxsb2MgPSBzYi0+YWxsb2M7CisKKwlzdHJidWZfZ3JvdyhzYiwgc2l6ZSk7CisJcmVzID0gZnJlYWQoc2ItPmJ1ZiArIHNiLT5sZW4sIDEsIHNpemUsIGYpOworCWlmIChyZXMgPiAwKQorCQlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuICsgcmVzKTsKKwllbHNlIGlmIChvbGRhbGxvYyA9PSAwKQorCQlzdHJidWZfcmVsZWFzZShzYik7CisJcmV0dXJuIHJlczsKK30KKworc3NpemVfdCBzdHJidWZfcmVhZChzdHJ1Y3Qgc3RyYnVmICpzYiwgaW50IGZkLCBzaXplX3QgaGludCkKK3sKKwlzaXplX3Qgb2xkbGVuID0gc2ItPmxlbjsKKwlzaXplX3Qgb2xkYWxsb2MgPSBzYi0+YWxsb2M7CisKKwlzdHJidWZfZ3JvdyhzYiwgaGludCA/IGhpbnQgOiA4MTkyKTsKKwlmb3IgKDs7KSB7CisJCXNzaXplX3Qgd2FudCA9IHNiLT5hbGxvYyAtIHNiLT5sZW4gLSAxOworCQlzc2l6ZV90IGdvdCA9IHJlYWRfaW5fZnVsbChmZCwgc2ItPmJ1ZiArIHNiLT5sZW4sIHdhbnQpOworCisJCWlmIChnb3QgPCAwKSB7CisJCQlpZiAob2xkYWxsb2MgPT0gMCkKKwkJCQlzdHJidWZfcmVsZWFzZShzYik7CisJCQllbHNlCisJCQkJc3RyYnVmX3NldGxlbihzYiwgb2xkbGVuKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlzYi0+bGVuICs9IGdvdDsKKwkJaWYgKGdvdCA8IHdhbnQpCisJCQlicmVhazsKKwkJc3RyYnVmX2dyb3coc2IsIDgxOTIpOworCX0KKworCXNiLT5idWZbc2ItPmxlbl0gPSAnXDAnOworCXJldHVybiBzYi0+bGVuIC0gb2xkbGVuOworfQorCitzc2l6ZV90IHN0cmJ1Zl9yZWFkX29uY2Uoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBmZCwgc2l6ZV90IGhpbnQpCit7CisJc2l6ZV90IG9sZGFsbG9jID0gc2ItPmFsbG9jOworCXNzaXplX3QgY250OworCisJc3RyYnVmX2dyb3coc2IsIGhpbnQgPyBoaW50IDogODE5Mik7CisJY250ID0geHJlYWQoZmQsIHNiLT5idWYgKyBzYi0+bGVuLCBzYi0+YWxsb2MgLSBzYi0+bGVuIC0gMSk7CisJaWYgKGNudCA+IDApCisJCXN0cmJ1Zl9zZXRsZW4oc2IsIHNiLT5sZW4gKyBjbnQpOworCWVsc2UgaWYgKG9sZGFsbG9jID09IDApCisJCXN0cmJ1Zl9yZWxlYXNlKHNiKTsKKwlyZXR1cm4gY250OworfQorCitzc2l6ZV90IHN0cmJ1Zl93cml0ZShzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqZikKK3sKKwlyZXR1cm4gc2ItPmxlbiA/IGZ3cml0ZShzYi0+YnVmLCAxLCBzYi0+bGVuLCBmKSA6IDA7Cit9CisKK3NzaXplX3Qgc3RyYnVmX3dyaXRlX2ZkKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgZmQpCit7CisJcmV0dXJuIHNiLT5sZW4gPyB3cml0ZShmZCwgc2ItPmJ1Ziwgc2ItPmxlbikgOiAwOworfQorCisjZGVmaW5lIFNUUkJVRl9NQVhMSU5LICgyKlBBVEhfTUFYKQorCitpbnQgc3RyYnVmX3JlYWRsaW5rKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgaGludCkKK3sKKwlzaXplX3Qgb2xkYWxsb2MgPSBzYi0+YWxsb2M7CisKKwlpZiAoaGludCA8IDMyKQorCQloaW50ID0gMzI7CisKKwl3aGlsZSAoaGludCA8IFNUUkJVRl9NQVhMSU5LKSB7CisJCXNzaXplX3QgbGVuOworCisJCXN0cmJ1Zl9ncm93KHNiLCBoaW50KTsKKwkJbGVuID0gcmVhZGxpbmsocGF0aCwgc2ItPmJ1ZiwgaGludCk7CisJCWlmIChsZW4gPCAwKSB7CisJCQlpZiAoZXJybm8gIT0gRVJBTkdFKQorCQkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGxlbiA8IGhpbnQpIHsKKwkJCXN0cmJ1Zl9zZXRsZW4oc2IsIGxlbik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIC4uIHRoZSBidWZmZXIgd2FzIHRvbyBzbWFsbCAtIHRyeSBhZ2FpbiAqLworCQloaW50ICo9IDI7CisJfQorCWlmIChvbGRhbGxvYyA9PSAwKQorCQlzdHJidWZfcmVsZWFzZShzYik7CisJcmV0dXJuIC0xOworfQorCitpbnQgc3RyYnVmX2dldGN3ZChzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlzaXplX3Qgb2xkYWxsb2MgPSBzYi0+YWxsb2M7CisJc2l6ZV90IGd1ZXNzZWRfbGVuID0gMTI4OworCisJZm9yICg7OyBndWVzc2VkX2xlbiAqPSAyKSB7CisJCXN0cmJ1Zl9ncm93KHNiLCBndWVzc2VkX2xlbik7CisJCWlmIChnZXRjd2Qoc2ItPmJ1Ziwgc2ItPmFsbG9jKSkgeworCQkJc3RyYnVmX3NldGxlbihzYiwgc3RybGVuKHNiLT5idWYpKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyoKKwkJICogSWYgZ2V0Y3dkKDMpIGlzIGltcGxlbWVudGVkIGFzIGEgc3lzY2FsbCB0aGF0IGZhbGxzCisJCSAqIGJhY2sgdG8gYSByZWd1bGFyIGxvb2t1cCB1c2luZyByZWFkZGlyKDMpIGV0Yy4gdGhlbgorCQkgKiB3ZSBtYXkgYmUgYWJsZSB0byBhdm9pZCBFQUNDRVMgYnkgcHJvdmlkaW5nIGVub3VnaAorCQkgKiBzcGFjZSB0byB0aGUgc3lzY2FsbCBhcyBpdCdzIG5vdCBuZWNlc3NhcmlseSBib3VuZAorCQkgKiB0byB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMgdGhlIGZhbGxiYWNrLgorCQkgKi8KKwkJaWYgKGVycm5vID09IEVBQ0NFUyAmJiBndWVzc2VkX2xlbiA8IFBBVEhfTUFYKQorCQkJY29udGludWU7CisKKwkJaWYgKGVycm5vICE9IEVSQU5HRSkKKwkJCWJyZWFrOworCX0KKwlpZiAob2xkYWxsb2MgPT0gMCkKKwkJc3RyYnVmX3JlbGVhc2Uoc2IpOworCWVsc2UKKwkJc3RyYnVmX3Jlc2V0KHNiKTsKKwlyZXR1cm4gLTE7Cit9CisKKyNpZmRlZiBIQVZFX0dFVERFTElNCitpbnQgc3RyYnVmX2dldHdob2xlbGluZShzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqZnAsIGludCB0ZXJtKQoreworCXNzaXplX3QgcjsKKworCWlmIChmZW9mKGZwKSkKKwkJcmV0dXJuIEVPRjsKKworCXN0cmJ1Zl9yZXNldChzYik7CisKKwkvKiBUcmFuc2xhdGUgc2xvcGJ1ZiB0byBOVUxMLCBhcyB3ZSBjYW5ub3QgY2FsbCByZWFsbG9jIG9uIGl0ICovCisJaWYgKCFzYi0+YWxsb2MpCisJCXNiLT5idWYgPSBOVUxMOworCWVycm5vID0gMDsKKwlyID0gZ2V0ZGVsaW0oJnNiLT5idWYsICZzYi0+YWxsb2MsIHRlcm0sIGZwKTsKKworCWlmIChyID4gMCkgeworCQlzYi0+bGVuID0gcjsKKwkJcmV0dXJuIDA7CisJfQorCWFzc2VydChyID09IC0xKTsKKworCS8qCisJICogTm9ybWFsbHkgd2Ugd291bGQgaGF2ZSBjYWxsZWQgeHJlYWxsb2MsIHdoaWNoIHdpbGwgdHJ5IHRvIGZyZWUKKwkgKiBtZW1vcnkgYW5kIHJlY292ZXIuIEJ1dCB3ZSBoYXZlIG5vIHdheSB0byB0ZWxsIGdldGRlbGltKCkgdG8gZG8gc28uCisJICogV29yc2UsIHdlIGNhbm5vdCB0cnkgdG8gcmVjb3ZlciBFTk9NRU0gb3Vyc2VsdmVzLCBiZWNhdXNlIHdlIGhhdmUKKwkgKiBubyBpZGVhIGhvdyBtYW55IGJ5dGVzIHdlcmUgcmVhZCBieSBnZXRkZWxpbS4KKwkgKgorCSAqIER5aW5nIGhlcmUgaXMgcmVhc29uYWJsZS4gSXQgbWlycm9ycyB3aGF0IHhyZWFsbG9jIHdvdWxkIGRvIG9uCisJICogY2F0YXN0cm9waGljIG1lbW9yeSBmYWlsdXJlLiBXZSBza2lwIHRoZSBvcHBvcnR1bml0eSB0byBmcmVlIHBhY2sKKwkgKiBtZW1vcnkgYW5kIHJldHJ5LCBidXQgdGhhdCdzIHVubGlrZWx5IHRvIGhlbHAgZm9yIGEgbWFsbG9jIHNtYWxsCisJICogZW5vdWdoIHRvIGhvbGQgYSBzaW5nbGUgbGluZSBvZiBpbnB1dCwgYW55d2F5LgorCSAqLworCWlmIChlcnJubyA9PSBFTk9NRU0pCisJCWRpZSgiT3V0IG9mIG1lbW9yeSwgZ2V0ZGVsaW0gZmFpbGVkIik7CisKKwkvKgorCSAqIFJlc3RvcmUgc3RyYnVmIGludmFyaWFudHM7IGlmIGdldGRlbGltIGxlZnQgdXMgd2l0aCBhIE5VTEwgcG9pbnRlciwKKwkgKiB3ZSBjYW4ganVzdCByZS1pbml0LCBidXQgb3RoZXJ3aXNlIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBvdXIKKwkgKiBsZW5ndGggaXMgZW1wdHksIGFuZCB0aGF0IHRoZSByZXN1bHQgaXMgTlVMLXRlcm1pbmF0ZWQuCisJICovCisJaWYgKCFzYi0+YnVmKQorCQlzdHJidWZfaW5pdChzYiwgMCk7CisJZWxzZQorCQlzdHJidWZfcmVzZXQoc2IpOworCXJldHVybiBFT0Y7Cit9CisjZWxzZQoraW50IHN0cmJ1Zl9nZXR3aG9sZWxpbmUoc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZwLCBpbnQgdGVybSkKK3sKKwlpbnQgY2g7CisKKwlpZiAoZmVvZihmcCkpCisJCXJldHVybiBFT0Y7CisKKwlzdHJidWZfcmVzZXQoc2IpOworCWZsb2NrZmlsZShmcCk7CisJd2hpbGUgKChjaCA9IGdldGNfdW5sb2NrZWQoZnApKSAhPSBFT0YpIHsKKwkJaWYgKCFzdHJidWZfYXZhaWwoc2IpKQorCQkJc3RyYnVmX2dyb3coc2IsIDEpOworCQlzYi0+YnVmW3NiLT5sZW4rK10gPSBjaDsKKwkJaWYgKGNoID09IHRlcm0pCisJCQlicmVhazsKKwl9CisJZnVubG9ja2ZpbGUoZnApOworCWlmIChjaCA9PSBFT0YgJiYgc2ItPmxlbiA9PSAwKQorCQlyZXR1cm4gRU9GOworCisJc2ItPmJ1ZltzYi0+bGVuXSA9ICdcMCc7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworaW50IHN0cmJ1Zl9hcHBlbmR3aG9sZWxpbmUoc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZwLCBpbnQgdGVybSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwlpZiAoc3RyYnVmX2dldHdob2xlbGluZSgmbGluZSwgZnAsIHRlcm0pKQorCQlyZXR1cm4gRU9GOworCXN0cmJ1Zl9hZGRidWYoc2IsICZsaW5lKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RyYnVmX2dldGRlbGltKHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpmcCwgaW50IHRlcm0pCit7CisJaWYgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoc2IsIGZwLCB0ZXJtKSkKKwkJcmV0dXJuIEVPRjsKKwlpZiAoc2ItPmJ1ZltzYi0+bGVuIC0gMV0gPT0gdGVybSkKKwkJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiAtIDEpOworCXJldHVybiAwOworfQorCitpbnQgc3RyYnVmX2dldGxpbmUoc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZwKQoreworCWlmIChzdHJidWZfZ2V0d2hvbGVsaW5lKHNiLCBmcCwgJ1xuJykpCisJCXJldHVybiBFT0Y7CisJaWYgKHNiLT5idWZbc2ItPmxlbiAtIDFdID09ICdcbicpIHsKKwkJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiAtIDEpOworCQlpZiAoc2ItPmxlbiAmJiBzYi0+YnVmW3NiLT5sZW4gLSAxXSA9PSAnXHInKQorCQkJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiAtIDEpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHN0cmJ1Zl9nZXRsaW5lX2xmKHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpmcCkKK3sKKwlyZXR1cm4gc3RyYnVmX2dldGRlbGltKHNiLCBmcCwgJ1xuJyk7Cit9CisKK2ludCBzdHJidWZfZ2V0bGluZV9udWwoc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZwKQoreworCXJldHVybiBzdHJidWZfZ2V0ZGVsaW0oc2IsIGZwLCAnXDAnKTsKK30KKworaW50IHN0cmJ1Zl9nZXR3aG9sZWxpbmVfZmQoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBmZCwgaW50IHRlcm0pCit7CisJc3RyYnVmX3Jlc2V0KHNiKTsKKworCXdoaWxlICgxKSB7CisJCWNoYXIgY2g7CisJCXNzaXplX3QgbGVuID0geHJlYWQoZmQsICZjaCwgMSk7CisJCWlmIChsZW4gPD0gMCkKKwkJCXJldHVybiBFT0Y7CisJCXN0cmJ1Zl9hZGRjaChzYiwgY2gpOworCQlpZiAoY2ggPT0gdGVybSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3NpemVfdCBzdHJidWZfcmVhZF9maWxlKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgaGludCkKK3sKKwlpbnQgZmQ7CisJc3NpemVfdCBsZW47CisJaW50IHNhdmVkX2Vycm5vOworCisJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisJbGVuID0gc3RyYnVmX3JlYWQoc2IsIGZkLCBoaW50KTsKKwlzYXZlZF9lcnJubyA9IGVycm5vOworCWNsb3NlKGZkKTsKKwlpZiAobGVuIDwgMCkgeworCQllcnJubyA9IHNhdmVkX2Vycm5vOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKwordm9pZCBzdHJidWZfYWRkX2xpbmVzKHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqcHJlZml4LAorCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCWFkZF9saW5lcyhvdXQsIHByZWZpeCwgTlVMTCwgYnVmLCBzaXplKTsKK30KKwordm9pZCBzdHJidWZfYWRkc3RyX3htbF9xdW90ZWQoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpzKQoreworCXdoaWxlICgqcykgeworCQlzaXplX3QgbGVuID0gc3RyY3NwbihzLCAiXCI8PiYiKTsKKwkJc3RyYnVmX2FkZChidWYsIHMsIGxlbik7CisJCXMgKz0gbGVuOworCQlzd2l0Y2ggKCpzKSB7CisJCWNhc2UgJyInOgorCQkJc3RyYnVmX2FkZHN0cihidWYsICImcXVvdDsiKTsKKwkJCWJyZWFrOworCQljYXNlICc8JzoKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiJmx0OyIpOworCQkJYnJlYWs7CisJCWNhc2UgJz4nOgorCQkJc3RyYnVmX2FkZHN0cihidWYsICImZ3Q7Iik7CisJCQlicmVhazsKKwkJY2FzZSAnJic6CisJCQlzdHJidWZfYWRkc3RyKGJ1ZiwgIiZhbXA7Iik7CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJcmV0dXJuOworCQl9CisJCXMrKzsKKwl9Cit9CisKK2ludCBpc19yZmMzOTg2X3Jlc2VydmVkX29yX3VucmVzZXJ2ZWQoY2hhciBjaCkKK3sKKwlpZiAoaXNfcmZjMzk4Nl91bnJlc2VydmVkKGNoKSkKKwkJcmV0dXJuIDE7CisJc3dpdGNoIChjaCkgeworCQljYXNlICchJzogY2FzZSAnKic6IGNhc2UgJ1wnJzogY2FzZSAnKCc6IGNhc2UgJyknOiBjYXNlICc7JzoKKwkJY2FzZSAnOic6IGNhc2UgJ0AnOiBjYXNlICcmJzogY2FzZSAnPSc6IGNhc2UgJysnOiBjYXNlICckJzoKKwkJY2FzZSAnLCc6IGNhc2UgJy8nOiBjYXNlICc/JzogY2FzZSAnIyc6IGNhc2UgJ1snOiBjYXNlICddJzoKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGlzX3JmYzM5ODZfdW5yZXNlcnZlZChjaGFyIGNoKQoreworCXJldHVybiBpc2FsbnVtKGNoKSB8fAorCQljaCA9PSAnLScgfHwgY2ggPT0gJ18nIHx8IGNoID09ICcuJyB8fCBjaCA9PSAnfic7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmJ1Zl9hZGRfdXJsZW5jb2RlKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuLAorCQkJCSBjaGFyX3ByZWRpY2F0ZSBhbGxvd191bmVuY29kZWRfZm4pCit7CisJc3RyYnVmX2dyb3coc2IsIGxlbik7CisJd2hpbGUgKGxlbi0tKSB7CisJCWNoYXIgY2ggPSAqcysrOworCQlpZiAoYWxsb3dfdW5lbmNvZGVkX2ZuKGNoKSkKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgY2gpOworCQllbHNlCisJCQlzdHJidWZfYWRkZihzYiwgIiUlJTAyeCIsICh1bnNpZ25lZCBjaGFyKWNoKTsKKwl9Cit9CisKK3ZvaWQgc3RyYnVmX2FkZHN0cl91cmxlbmNvZGUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnMsCisJCQkgICAgIGNoYXJfcHJlZGljYXRlIGFsbG93X3VuZW5jb2RlZF9mbikKK3sKKwlzdHJidWZfYWRkX3VybGVuY29kZShzYiwgcywgc3RybGVuKHMpLCBhbGxvd191bmVuY29kZWRfZm4pOworfQorCitzdGF0aWMgdm9pZCBzdHJidWZfaHVtYW5pc2Uoc3RydWN0IHN0cmJ1ZiAqYnVmLCBvZmZfdCBieXRlcywKKwkJCQkgaW50IGh1bWFuaXNlX3JhdGUpCit7CisJaWYgKGJ5dGVzID4gMSA8PCAzMCkgeworCQlzdHJidWZfYWRkZihidWYsCisJCQkJaHVtYW5pc2VfcmF0ZSA9PSAwID8KKwkJCQkJLyogVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlICovCisJCQkJCV8oIiV1LiUyLjJ1IEdpQiIpIDoKKwkJCQkJLyogVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlL3NlY29uZCAqLworCQkJCQlfKCIldS4lMi4ydSBHaUIvcyIpLAorCQkJICAgICh1bnNpZ25lZCkoYnl0ZXMgPj4gMzApLAorCQkJICAgICh1bnNpZ25lZCkoYnl0ZXMgJiAoKDEgPDwgMzApIC0gMSkpIC8gMTA3Mzc0MTkpOworCX0gZWxzZSBpZiAoYnl0ZXMgPiAxIDw8IDIwKSB7CisJCXVuc2lnbmVkIHggPSBieXRlcyArIDUyNDM7ICAvKiBmb3Igcm91bmRpbmcgKi8KKwkJc3RyYnVmX2FkZGYoYnVmLAorCQkJCWh1bWFuaXNlX3JhdGUgPT0gMCA/CisJCQkJCS8qIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZSAqLworCQkJCQlfKCIldS4lMi4ydSBNaUIiKSA6CisJCQkJCS8qIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZS9zZWNvbmQgKi8KKwkJCQkJXygiJXUuJTIuMnUgTWlCL3MiKSwKKwkJCSAgICB4ID4+IDIwLCAoKHggJiAoKDEgPDwgMjApIC0gMSkpICogMTAwKSA+PiAyMCk7CisJfSBlbHNlIGlmIChieXRlcyA+IDEgPDwgMTApIHsKKwkJdW5zaWduZWQgeCA9IGJ5dGVzICsgNTsgIC8qIGZvciByb3VuZGluZyAqLworCQlzdHJidWZfYWRkZihidWYsCisJCQkJaHVtYW5pc2VfcmF0ZSA9PSAwID8KKwkJCQkJLyogVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlICovCisJCQkJCV8oIiV1LiUyLjJ1IEtpQiIpIDoKKwkJCQkJLyogVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlL3NlY29uZCAqLworCQkJCQlfKCIldS4lMi4ydSBLaUIvcyIpLAorCQkJICAgIHggPj4gMTAsICgoeCAmICgoMSA8PCAxMCkgLSAxKSkgKiAxMDApID4+IDEwKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZihidWYsCisJCQkJaHVtYW5pc2VfcmF0ZSA9PSAwID8KKwkJCQkJLyogVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUgKi8KKwkJCQkJUV8oIiV1IGJ5dGUiLCAiJXUgYnl0ZXMiLCAodW5zaWduZWQpYnl0ZXMpIDoKKwkJCQkJLyogVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUvc2Vjb25kICovCisJCQkJCVFfKCIldSBieXRlL3MiLCAiJXUgYnl0ZXMvcyIsICh1bnNpZ25lZClieXRlcyksCisJCQkJKHVuc2lnbmVkKWJ5dGVzKTsKKwl9Cit9CisKK3ZvaWQgc3RyYnVmX2h1bWFuaXNlX2J5dGVzKHN0cnVjdCBzdHJidWYgKmJ1Ziwgb2ZmX3QgYnl0ZXMpCit7CisJc3RyYnVmX2h1bWFuaXNlKGJ1ZiwgYnl0ZXMsIDApOworfQorCit2b2lkIHN0cmJ1Zl9odW1hbmlzZV9yYXRlKHN0cnVjdCBzdHJidWYgKmJ1Ziwgb2ZmX3QgYnl0ZXMpCit7CisJc3RyYnVmX2h1bWFuaXNlKGJ1ZiwgYnl0ZXMsIDEpOworfQorCit2b2lkIHN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoISpwYXRoKQorCQlkaWUoIlRoZSBlbXB0eSBzdHJpbmcgaXMgbm90IGEgdmFsaWQgcGF0aCIpOworCWlmICghaXNfYWJzb2x1dGVfcGF0aChwYXRoKSkgeworCQlzdHJ1Y3Qgc3RhdCBjd2Rfc3RhdCwgcHdkX3N0YXQ7CisJCXNpemVfdCBvcmlnX2xlbiA9IHNiLT5sZW47CisJCWNoYXIgKmN3ZCA9IHhnZXRjd2QoKTsKKwkJY2hhciAqcHdkID0gZ2V0ZW52KCJQV0QiKTsKKwkJaWYgKHB3ZCAmJiBzdHJjbXAocHdkLCBjd2QpICYmCisJCSAgICAhc3RhdChjd2QsICZjd2Rfc3RhdCkgJiYKKwkJICAgIChjd2Rfc3RhdC5zdF9kZXYgfHwgY3dkX3N0YXQuc3RfaW5vKSAmJgorCQkgICAgIXN0YXQocHdkLCAmcHdkX3N0YXQpICYmCisJCSAgICBwd2Rfc3RhdC5zdF9kZXYgPT0gY3dkX3N0YXQuc3RfZGV2ICYmCisJCSAgICBwd2Rfc3RhdC5zdF9pbm8gPT0gY3dkX3N0YXQuc3RfaW5vKQorCQkJc3RyYnVmX2FkZHN0cihzYiwgcHdkKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZHN0cihzYiwgY3dkKTsKKwkJaWYgKHNiLT5sZW4gPiBvcmlnX2xlbiAmJiAhaXNfZGlyX3NlcChzYi0+YnVmW3NiLT5sZW4gLSAxXSkpCisJCQlzdHJidWZfYWRkY2goc2IsICcvJyk7CisJCWZyZWUoY3dkKTsKKwl9CisJc3RyYnVmX2FkZHN0cihzYiwgcGF0aCk7Cit9CisKK3ZvaWQgc3RyYnVmX2FkZF9yZWFsX3BhdGgoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKHNiLT5sZW4pIHsKKwkJc3RydWN0IHN0cmJ1ZiByZXNvbHZlZCA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfcmVhbHBhdGgoJnJlc29sdmVkLCBwYXRoLCAxKTsKKwkJc3RyYnVmX2FkZGJ1ZihzYiwgJnJlc29sdmVkKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnJlc29sdmVkKTsKKwl9IGVsc2UKKwkJc3RyYnVmX3JlYWxwYXRoKHNiLCBwYXRoLCAxKTsKK30KKworaW50IHByaW50Zl9sbihjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdnByaW50ZihmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCWlmIChyZXQgPCAwIHx8IHB1dGNoYXIoJ1xuJykgPT0gRU9GKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHJldCArIDE7Cit9CisKK2ludCBmcHJpbnRmX2xuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdmZwcmludGYoZnAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKHJldCA8IDAgfHwgcHV0YygnXG4nLCBmcCkgPT0gRU9GKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHJldCArIDE7Cit9CisKK2NoYXIgKnhzdHJkdXBfdG9sb3dlcihjb25zdCBjaGFyICpzdHJpbmcpCit7CisJY2hhciAqcmVzdWx0OworCXNpemVfdCBsZW4sIGk7CisKKwlsZW4gPSBzdHJsZW4oc3RyaW5nKTsKKwlyZXN1bHQgPSB4bWFsbG9jeihsZW4pOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJcmVzdWx0W2ldID0gdG9sb3dlcihzdHJpbmdbaV0pOworCXJldHVybiByZXN1bHQ7Cit9CisKK2NoYXIgKnhzdHJkdXBfdG91cHBlcihjb25zdCBjaGFyICpzdHJpbmcpCit7CisJY2hhciAqcmVzdWx0OworCXNpemVfdCBsZW4sIGk7CisKKwlsZW4gPSBzdHJsZW4oc3RyaW5nKTsKKwlyZXN1bHQgPSB4bWFsbG9jeihsZW4pOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJcmVzdWx0W2ldID0gdG91cHBlcihzdHJpbmdbaV0pOworCXJldHVybiByZXN1bHQ7Cit9CisKK2NoYXIgKnhzdHJ2Zm10KGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl92YWRkZigmYnVmLCBmbXQsIGFwKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworY2hhciAqeHN0cmZtdChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWNoYXIgKnJldDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHhzdHJ2Zm10KGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHN0cmJ1Zl9hZGRmdGltZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZm10LCBjb25zdCBzdHJ1Y3QgdG0gKnRtLAorCQkgICAgIGludCB0el9vZmZzZXQsIGludCBzdXBwcmVzc190el9uYW1lKQoreworCXN0cnVjdCBzdHJidWYgbXVuZ2VkX2ZtdCA9IFNUUkJVRl9JTklUOworCXNpemVfdCBoaW50ID0gMTI4OworCXNpemVfdCBsZW47CisKKwlpZiAoISpmbXQpCisJCXJldHVybjsKKworCS8qCisJICogVGhlcmUgaXMgbm8gcG9ydGFibGUgd2F5IHRvIHBhc3MgdGltZXpvbmUgaW5mb3JtYXRpb24gdG8KKwkgKiBzdHJmdGltZSwgc28gd2UgaGFuZGxlICV6IGFuZCAlWiBoZXJlLgorCSAqLworCWZvciAoOzspIHsKKwkJY29uc3QgY2hhciAqcGVyY2VudCA9IHN0cmNocm51bChmbXQsICclJyk7CisJCXN0cmJ1Zl9hZGQoJm11bmdlZF9mbXQsIGZtdCwgcGVyY2VudCAtIGZtdCk7CisJCWlmICghKnBlcmNlbnQpCisJCQlicmVhazsKKwkJZm10ID0gcGVyY2VudCArIDE7CisJCXN3aXRjaCAoKmZtdCkgeworCQljYXNlICclJzoKKwkJCXN0cmJ1Zl9hZGRzdHIoJm11bmdlZF9mbXQsICIlJSIpOworCQkJZm10Kys7CisJCQlicmVhazsKKwkJY2FzZSAneic6CisJCQlzdHJidWZfYWRkZigmbXVuZ2VkX2ZtdCwgIiUrMDVkIiwgdHpfb2Zmc2V0KTsKKwkJCWZtdCsrOworCQkJYnJlYWs7CisJCWNhc2UgJ1onOgorCQkJaWYgKHN1cHByZXNzX3R6X25hbWUpIHsKKwkJCQlmbXQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWRlZmF1bHQ6CisJCQlzdHJidWZfYWRkY2goJm11bmdlZF9mbXQsICclJyk7CisJCX0KKwl9CisJZm10ID0gbXVuZ2VkX2ZtdC5idWY7CisKKwlzdHJidWZfZ3JvdyhzYiwgaGludCk7CisJbGVuID0gc3RyZnRpbWUoc2ItPmJ1ZiArIHNiLT5sZW4sIHNiLT5hbGxvYyAtIHNiLT5sZW4sIGZtdCwgdG0pOworCisJaWYgKCFsZW4pIHsKKwkJLyoKKwkJICogc3RyZnRpbWUgcmVwb3J0cyAiMCIgaWYgaXQgY291bGQgbm90IGZpdCB0aGUgcmVzdWx0IGluIHRoZSBidWZmZXIuCisJCSAqIFVuZm9ydHVuYXRlbHksIGl0IGFsc28gcmVwb3J0cyAiMCIgaWYgdGhlIHJlcXVlc3RlZCB0aW1lIHN0cmluZworCQkgKiB0YWtlcyAwIGJ5dGVzLiBTbyBvdXIgc3RyYXRlZ3kgaXMgdG8gbXVuZ2UgdGhlIGZvcm1hdCBzbyB0aGF0IHRoZQorCQkgKiBvdXRwdXQgY29udGFpbnMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgYW5kIHRoZW4gZHJvcCB0aGUgZXh0cmEKKwkJICogY2hhcmFjdGVyIGJlZm9yZSByZXR1cm5pbmcuCisJCSAqLworCQlzdHJidWZfYWRkY2goJm11bmdlZF9mbXQsICcgJyk7CisJCXdoaWxlICghbGVuKSB7CisJCQloaW50ICo9IDI7CisJCQlzdHJidWZfZ3JvdyhzYiwgaGludCk7CisJCQlsZW4gPSBzdHJmdGltZShzYi0+YnVmICsgc2ItPmxlbiwgc2ItPmFsbG9jIC0gc2ItPmxlbiwKKwkJCQkgICAgICAgbXVuZ2VkX2ZtdC5idWYsIHRtKTsKKwkJfQorCQlsZW4tLTsgLyogZHJvcCBtdW5nZWQgc3BhY2UgKi8KKwl9CisJc3RyYnVmX3JlbGVhc2UoJm11bmdlZF9mbXQpOworCXN0cmJ1Zl9zZXRsZW4oc2IsIHNiLT5sZW4gKyBsZW4pOworfQorCit2b2lkIHN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgaW50IGFiYnJldl9sZW4pCit7CisJaW50IHI7CisJc3RyYnVmX2dyb3coc2IsIEdJVF9NQVhfSEVYU1ogKyAxKTsKKwlyID0gZmluZF91bmlxdWVfYWJicmV2X3Ioc2ItPmJ1ZiArIHNiLT5sZW4sIG9pZCwgYWJicmV2X2xlbik7CisJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiArIHIpOworfQorCisvKgorICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIGEgbGluZSwgd2l0aG91dCB0cmFpbGluZyBzcGFjZXMuCisgKgorICogSWYgdGhlIGxpbmUgZW5kcyB3aXRoIG5ld2xpbmUsIGl0IHdpbGwgYmUgcmVtb3ZlZCB0b28uCisgKi8KK3N0YXRpYyBzaXplX3QgY2xlYW51cChjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCXdoaWxlIChsZW4pIHsKKwkJdW5zaWduZWQgY2hhciBjID0gbGluZVtsZW4gLSAxXTsKKwkJaWYgKCFpc3NwYWNlKGMpKQorCQkJYnJlYWs7CisJCWxlbi0tOworCX0KKworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBSZW1vdmUgZW1wdHkgbGluZXMgZnJvbSB0aGUgYmVnaW5uaW5nIGFuZCBlbmQKKyAqIGFuZCBhbHNvIHRyYWlsaW5nIHNwYWNlcyBmcm9tIGV2ZXJ5IGxpbmUuCisgKgorICogVHVybiBtdWx0aXBsZSBjb25zZWN1dGl2ZSBlbXB0eSBsaW5lcyBiZXR3ZWVuIHBhcmFncmFwaHMKKyAqIGludG8ganVzdCBvbmUgZW1wdHkgbGluZS4KKyAqCisgKiBJZiB0aGUgaW5wdXQgaGFzIG9ubHkgZW1wdHkgbGluZXMgYW5kIHNwYWNlcywKKyAqIG5vIG91dHB1dCB3aWxsIGJlIHByb2R1Y2VkLgorICoKKyAqIElmIGxhc3QgbGluZSBkb2VzIG5vdCBoYXZlIGEgbmV3bGluZSBhdCB0aGUgZW5kLCBvbmUgaXMgYWRkZWQuCisgKgorICogRW5hYmxlIHNraXBfY29tbWVudHMgdG8gc2tpcCBldmVyeSBsaW5lIHN0YXJ0aW5nIHdpdGggY29tbWVudAorICogY2hhcmFjdGVyLgorICovCit2b2lkIHN0cmJ1Zl9zdHJpcHNwYWNlKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgc2tpcF9jb21tZW50cykKK3sKKwlzaXplX3QgZW1wdGllcyA9IDA7CisJc2l6ZV90IGksIGosIGxlbiwgbmV3bGVuOworCWNoYXIgKmVvbDsKKworCS8qIFdlIG1heSBoYXZlIHRvIGFkZCBhIG5ld2xpbmUuICovCisJc3RyYnVmX2dyb3coc2IsIDEpOworCisJZm9yIChpID0gaiA9IDA7IGkgPCBzYi0+bGVuOyBpICs9IGxlbiwgaiArPSBuZXdsZW4pIHsKKwkJZW9sID0gbWVtY2hyKHNiLT5idWYgKyBpLCAnXG4nLCBzYi0+bGVuIC0gaSk7CisJCWxlbiA9IGVvbCA/IGVvbCAtIChzYi0+YnVmICsgaSkgKyAxIDogc2ItPmxlbiAtIGk7CisKKwkJaWYgKHNraXBfY29tbWVudHMgJiYgbGVuICYmIHNiLT5idWZbaV0gPT0gY29tbWVudF9saW5lX2NoYXIpIHsKKwkJCW5ld2xlbiA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQluZXdsZW4gPSBjbGVhbnVwKHNiLT5idWYgKyBpLCBsZW4pOworCisJCS8qIE5vdCBqdXN0IGFuIGVtcHR5IGxpbmU/ICovCisJCWlmIChuZXdsZW4pIHsKKwkJCWlmIChlbXB0aWVzID4gMCAmJiBqID4gMCkKKwkJCQlzYi0+YnVmW2orK10gPSAnXG4nOworCQkJZW1wdGllcyA9IDA7CisJCQltZW1tb3ZlKHNiLT5idWYgKyBqLCBzYi0+YnVmICsgaSwgbmV3bGVuKTsKKwkJCXNiLT5idWZbbmV3bGVuICsgaisrXSA9ICdcbic7CisJCX0gZWxzZSB7CisJCQllbXB0aWVzKys7CisJCX0KKwl9CisKKwlzdHJidWZfc2V0bGVuKHNiLCBqKTsKK30KKworaW50IHN0cmJ1Zl9ub3JtYWxpemVfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzcmMpCit7CisJc3RydWN0IHN0cmJ1ZiBkc3QgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9ncm93KCZkc3QsIHNyYy0+bGVuKTsKKwlpZiAobm9ybWFsaXplX3BhdGhfY29weShkc3QuYnVmLCBzcmMtPmJ1ZikgPCAwKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZkc3QpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBub3JtYWxpemVfcGF0aCBkb2VzIG5vdCB0ZWxsIHVzIHRoZSBuZXcgbGVuZ3RoLCBzbyB3ZSBoYXZlIHRvCisJICogY29tcHV0ZSBpdCBieSBsb29raW5nIGZvciB0aGUgbmV3IE5VTCBpdCBwbGFjZWQKKwkgKi8KKwlzdHJidWZfc2V0bGVuKCZkc3QsIHN0cmxlbihkc3QuYnVmKSk7CisJc3RyYnVmX3N3YXAoc3JjLCAmZHN0KTsKKwlzdHJidWZfcmVsZWFzZSgmZHN0KTsKKwlyZXR1cm4gMDsKK30KKworaW50IHN0cmJ1Zl9lZGl0X2ludGVyYWN0aXZlbHkoc3RydWN0IHN0cmJ1ZiAqYnVmZmVyLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICAgY29uc3QgY2hhciAqY29uc3QgKmVudikKK3sKKwljaGFyICpwYXRoMiA9IE5VTEw7CisJaW50IGZkLCByZXMgPSAwOworCisJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKHBhdGgpKQorCQlwYXRoID0gcGF0aDIgPSB4c3RyZHVwKGdpdF9wYXRoKCIlcyIsIHBhdGgpKTsKKworCWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlyZXMgPSBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiksIHBhdGgpOworCWVsc2UgaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1ZmZlci0+YnVmLCBidWZmZXItPmxlbikgPCAwKSB7CisJCXJlcyA9IGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiksIHBhdGgpOworCQljbG9zZShmZCk7CisJfSBlbHNlIGlmIChjbG9zZShmZCkgPCAwKQorCQlyZXMgPSBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgY2xvc2UgJyVzJyIpLCBwYXRoKTsKKwllbHNlIHsKKwkJc3RyYnVmX3Jlc2V0KGJ1ZmZlcik7CisJCWlmIChsYXVuY2hfZWRpdG9yKHBhdGgsIGJ1ZmZlciwgZW52KSA8IDApCisJCQlyZXMgPSBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgZWRpdCAnJXMnIiksIHBhdGgpOworCQl1bmxpbmsocGF0aCk7CisJfQorCisJZnJlZShwYXRoMik7CisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL3N0cmJ1Zi5oIGIvc3RyYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2MmViNgotLS0gL2Rldi9udWxsCisrKyBiL3N0cmJ1Zi5oCkBAIC0wLDAgKzEsNzQxIEBACisjaWZuZGVmIFNUUkJVRl9ICisjZGVmaW5lIFNUUkJVRl9ICisKK3N0cnVjdCBzdHJpbmdfbGlzdDsKKworLyoqCisgKiBzdHJidWYncyBhcmUgbWVhbnQgdG8gYmUgdXNlZCB3aXRoIGFsbCB0aGUgdXN1YWwgQyBzdHJpbmcgYW5kIG1lbW9yeQorICogQVBJcy4gR2l2ZW4gdGhhdCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaXMga25vd24sIGl0J3Mgb2Z0ZW4gYmV0dGVyIHRvCisgKiB1c2UgdGhlIG1lbSogZnVuY3Rpb25zIHRoYW4gYSBzdHIqIG9uZSAobWVtY2hyIHZzLiBzdHJjaHIgZS5nLikuCisgKiBUaG91Z2gsIG9uZSBoYXMgdG8gYmUgY2FyZWZ1bCBhYm91dCB0aGUgZmFjdCB0aGF0IHN0ciogZnVuY3Rpb25zIG9mdGVuCisgKiBzdG9wIG9uIE5VTHMgYW5kIHRoYXQgc3RyYnVmcyBtYXkgaGF2ZSBlbWJlZGRlZCBOVUxzLgorICoKKyAqIEEgc3RyYnVmIGlzIE5VTCB0ZXJtaW5hdGVkIGZvciBjb252ZW5pZW5jZSwgYnV0IG5vIGZ1bmN0aW9uIGluIHRoZQorICogc3RyYnVmIEFQSSBhY3R1YWxseSByZWxpZXMgb24gdGhlIHN0cmluZyBiZWluZyBmcmVlIG9mIE5VTHMuCisgKgorICogc3RyYnVmcyBoYXZlIHNvbWUgaW52YXJpYW50cyB0aGF0IGFyZSB2ZXJ5IGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQ6CisgKgorICogIC0gVGhlIGBidWZgIG1lbWJlciBpcyBuZXZlciBOVUxMLCBzbyBpdCBjYW4gYmUgdXNlZCBpbiBhbnkgdXN1YWwgQworICogICAgc3RyaW5nIG9wZXJhdGlvbnMgc2FmZWx5LiBzdHJidWYncyBfaGF2ZV8gdG8gYmUgaW5pdGlhbGl6ZWQgZWl0aGVyIGJ5CisgKiAgICBgc3RyYnVmX2luaXQoKWAgb3IgYnkgYD0gU1RSQlVGX0lOSVRgIGJlZm9yZSB0aGUgaW52YXJpYW50cywgdGhvdWdoLgorICoKKyAqICAgIERvICpub3QqIGFzc3VtZSBhbnl0aGluZyBvbiB3aGF0IGBidWZgIHJlYWxseSBpcyAoZS5nLiBpZiBpdCBpcworICogICAgYWxsb2NhdGVkIG1lbW9yeSBvciBub3QpLCB1c2UgYHN0cmJ1Zl9kZXRhY2goKWAgdG8gdW53cmFwIGEgbWVtb3J5CisgKiAgICBidWZmZXIgZnJvbSBpdHMgc3RyYnVmIHNoZWxsIGluIGEgc2FmZSB3YXkuIFRoYXQgaXMgdGhlIHNvbGUgc3VwcG9ydGVkCisgKiAgICB3YXkuIFRoaXMgd2lsbCBnaXZlIHlvdSBhIG1hbGxvY2VkIGJ1ZmZlciB0aGF0IHlvdSBjYW4gbGF0ZXIgYGZyZWUoKWAuCisgKgorICogICAgSG93ZXZlciwgaXQgaXMgdG90YWxseSBzYWZlIHRvIG1vZGlmeSBhbnl0aGluZyBpbiB0aGUgc3RyaW5nIHBvaW50ZWQgYnkKKyAqICAgIHRoZSBgYnVmYCBtZW1iZXIsIGJldHdlZW4gdGhlIGluZGljZXMgYDBgIGFuZCBgbGVuLTFgIChpbmNsdXNpdmUpLgorICoKKyAqICAtIFRoZSBgYnVmYCBtZW1iZXIgaXMgYSBieXRlIGFycmF5IHRoYXQgaGFzIGF0IGxlYXN0IGBsZW4gKyAxYCBieXRlcworICogICAgYWxsb2NhdGVkLiBUaGUgZXh0cmEgYnl0ZSBpcyB1c2VkIHRvIHN0b3JlIGEgYCdcMCdgLCBhbGxvd2luZyB0aGUKKyAqICAgIGBidWZgIG1lbWJlciB0byBiZSBhIHZhbGlkIEMtc3RyaW5nLiBFdmVyeSBzdHJidWYgZnVuY3Rpb24gZW5zdXJlIHRoaXMKKyAqICAgIGludmFyaWFudCBpcyBwcmVzZXJ2ZWQuCisgKgorICogICAgTk9URTogSXQgaXMgT0sgdG8gInBsYXkiIHdpdGggdGhlIGJ1ZmZlciBkaXJlY3RseSBpZiB5b3Ugd29yayBpdCB0aGlzCisgKiAgICB3YXk6CisgKgorICogICAgICAgIHN0cmJ1Zl9ncm93KHNiLCBTT01FX1NJWkUpOyA8MT4KKyAqICAgICAgICBzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuICsgU09NRV9PVEhFUl9TSVpFKTsKKyAqCisgKiAgICA8MT4gSGVyZSwgdGhlIG1lbW9yeSBhcnJheSBzdGFydGluZyBhdCBgc2ItPmJ1ZmAsIGFuZCBvZiBsZW5ndGgKKyAqICAgIGBzdHJidWZfYXZhaWwoc2IpYCBpcyBhbGwgeW91cnMsIGFuZCB5b3UgY2FuIGJlIHN1cmUgdGhhdAorICogICAgYHN0cmJ1Zl9hdmFpbChzYilgIGlzIGF0IGxlYXN0IGBTT01FX1NJWkVgLgorICoKKyAqICAgIE5PVEU6IGBTT01FX09USEVSX1NJWkVgIG11c3QgYmUgc21hbGxlciBvciBlcXVhbCB0byBgc3RyYnVmX2F2YWlsKHNiKWAuCisgKgorICogICAgRG9pbmcgc28gaXMgc2FmZSwgdGhvdWdoIGlmIGl0IGhhcyB0byBiZSBkb25lIGluIG1hbnkgcGxhY2VzLCBhZGRpbmcgdGhlCisgKiAgICBtaXNzaW5nIEFQSSB0byB0aGUgc3RyYnVmIG1vZHVsZSBpcyB0aGUgd2F5IHRvIGdvLgorICoKKyAqICAgIFdBUk5JTkc6IERvIF9ub3RfIGFzc3VtZSB0aGF0IHRoZSBhcmVhIHRoYXQgaXMgeW91cnMgaXMgb2Ygc2l6ZSBgYWxsb2MKKyAqICAgIC0gMWAgZXZlbiBpZiBpdCdzIHRydWUgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEFsbG9jIGlzIHNvbWVob3cgYQorICogICAgInByaXZhdGUiIG1lbWJlciB0aGF0IHNob3VsZCBub3QgYmUgbWVzc2VkIHdpdGguIFVzZSBgc3RyYnVmX2F2YWlsKClgCisgKiAgICBpbnN0ZWFkLgorKi8KKworLyoqCisgKiBEYXRhIFN0cnVjdHVyZXMKKyAqIC0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qKgorICogVGhpcyBpcyB0aGUgc3RyaW5nIGJ1ZmZlciBzdHJ1Y3R1cmUuIFRoZSBgbGVuYCBtZW1iZXIgY2FuIGJlIHVzZWQgdG8KKyAqIGRldGVybWluZSB0aGUgY3VycmVudCBsZW5ndGggb2YgdGhlIHN0cmluZywgYW5kIGBidWZgIG1lbWJlciBwcm92aWRlcworICogYWNjZXNzIHRvIHRoZSBzdHJpbmcgaXRzZWxmLgorICovCitzdHJ1Y3Qgc3RyYnVmIHsKKwlzaXplX3QgYWxsb2M7CisJc2l6ZV90IGxlbjsKKwljaGFyICpidWY7Cit9OworCitleHRlcm4gY2hhciBzdHJidWZfc2xvcGJ1ZltdOworI2RlZmluZSBTVFJCVUZfSU5JVCAgeyAuYWxsb2MgPSAwLCAubGVuID0gMCwgLmJ1ZiA9IHN0cmJ1Zl9zbG9wYnVmIH0KKworLyoKKyAqIFByZWRlY2xhcmUgdGhpcyBoZXJlLCBzaW5jZSBjYWNoZS5oIGluY2x1ZGVzIHRoaXMgZmlsZSBiZWZvcmUgaXQgZGVmaW5lcyB0aGUKKyAqIHN0cnVjdC4KKyAqLworc3RydWN0IG9iamVjdF9pZDsKKworLyoqCisgKiBMaWZlIEN5Y2xlIEZ1bmN0aW9ucworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKioKKyAqIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZS4gVGhlIHNlY29uZCBwYXJhbWV0ZXIgY2FuIGJlIHplcm8gb3IgYSBiaWdnZXIKKyAqIG51bWJlciB0byBhbGxvY2F0ZSBtZW1vcnksIGluIGNhc2UgeW91IHdhbnQgdG8gcHJldmVudCBmdXJ0aGVyIHJlYWxsb2NzLgorICovCit2b2lkIHN0cmJ1Zl9pbml0KHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgYWxsb2MpOworCisvKioKKyAqIFJlbGVhc2UgYSBzdHJpbmcgYnVmZmVyIGFuZCB0aGUgbWVtb3J5IGl0IHVzZWQuIEFmdGVyIHRoaXMgY2FsbCwgdGhlCisgKiBzdHJidWYgcG9pbnRzIHRvIGFuIGVtcHR5IHN0cmluZyB0aGF0IGRvZXMgbm90IG5lZWQgdG8gYmUgZnJlZSgpZWQsIGFzCisgKiBpZiBpdCBoYWQgYmVlbiBzZXQgdG8gYFNUUkJVRl9JTklUYCBhbmQgbmV2ZXIgbW9kaWZpZWQuCisgKgorICogVG8gY2xlYXIgYSBzdHJidWYgaW4gcHJlcGFyYXRpb24gZm9yIGZ1cnRoZXIgdXNlIHdpdGhvdXQgdGhlIG92ZXJoZWFkCisgKiBvZiBmcmVlKClpbmcgYW5kIG1hbGxvYygpaW5nIGFnYWluLCB1c2Ugc3RyYnVmX3Jlc2V0KCkgaW5zdGVhZC4KKyAqLwordm9pZCBzdHJidWZfcmVsZWFzZShzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qKgorICogRGV0YWNoIHRoZSBzdHJpbmcgZnJvbSB0aGUgc3RyYnVmIGFuZCByZXR1cm5zIGl0OyB5b3Ugbm93IG93biB0aGUKKyAqIHN0b3JhZ2UgdGhlIHN0cmluZyBvY2N1cGllcyBhbmQgaXQgaXMgeW91ciByZXNwb25zaWJpbGl0eSBmcm9tIHRoZW4gb24KKyAqIHRvIHJlbGVhc2UgaXQgd2l0aCBgZnJlZSgzKWAgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCBpdC4KKyAqCisgKiBUaGUgc3RyYnVmIHRoYXQgcHJldmlvdXNseSBoZWxkIHRoZSBzdHJpbmcgaXMgcmVzZXQgdG8gYFNUUkJVRl9JTklUYCBzbworICogaXQgY2FuIGJlIHJldXNlZCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK2NoYXIgKnN0cmJ1Zl9kZXRhY2goc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCAqc3opOworCisvKioKKyAqIEF0dGFjaCBhIHN0cmluZyB0byBhIGJ1ZmZlci4gWW91IHNob3VsZCBzcGVjaWZ5IHRoZSBzdHJpbmcgdG8gYXR0YWNoLAorICogdGhlIGN1cnJlbnQgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgYW5kIHRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIG1lbW9yeS4KKyAqIFRoZSBhbW91bnQgbXVzdCBiZSBsYXJnZXIgdGhhbiB0aGUgc3RyaW5nIGxlbmd0aCwgYmVjYXVzZSB0aGUgc3RyaW5nIHlvdQorICogcGFzcyBpcyBzdXBwb3NlZCB0byBiZSBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4gIFRoaXMgc3RyaW5nIF9tdXN0XyBiZQorICogbWFsbG9jKCllZCwgYW5kIGFmdGVyIGF0dGFjaGluZywgdGhlIHBvaW50ZXIgY2Fubm90IGJlIHJlbGllZCB1cG9uCisgKiBhbnltb3JlLCBhbmQgbmVpdGhlciBiZSBmcmVlKClkIGRpcmVjdGx5LgorICovCit2b2lkIHN0cmJ1Zl9hdHRhY2goc3RydWN0IHN0cmJ1ZiAqc2IsIHZvaWQgKnN0ciwgc2l6ZV90IGxlbiwgc2l6ZV90IG1lbSk7CisKKy8qKgorICogU3dhcCB0aGUgY29udGVudHMgb2YgdHdvIHN0cmluZyBidWZmZXJzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RyYnVmX3N3YXAoc3RydWN0IHN0cmJ1ZiAqYSwgc3RydWN0IHN0cmJ1ZiAqYikKK3sKKwlTV0FQKCphLCAqYik7Cit9CisKKworLyoqCisgKiBGdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoqCisgKiBEZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgYnV0IHVudXNlZCBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHN0cmJ1Zl9hdmFpbChjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlyZXR1cm4gc2ItPmFsbG9jID8gc2ItPmFsbG9jIC0gc2ItPmxlbiAtIDEgOiAwOworfQorCisvKioKKyAqIEVuc3VyZSB0aGF0IGF0IGxlYXN0IHRoaXMgYW1vdW50IG9mIHVudXNlZCBtZW1vcnkgaXMgYXZhaWxhYmxlIGFmdGVyCisgKiBgbGVuYC4gVGhpcyBpcyB1c2VkIHdoZW4geW91IGtub3cgYSB0eXBpY2FsIHNpemUgZm9yIHdoYXQgeW91IHdpbGwgYWRkCisgKiBhbmQgd2FudCB0byBhdm9pZCByZXBldGl0aXZlIGF1dG9tYXRpYyByZXNpemluZyBvZiB0aGUgdW5kZXJseWluZyBidWZmZXIuCisgKiBUaGlzIGlzIG5ldmVyIGEgbmVlZGVkIG9wZXJhdGlvbiwgYnV0IGNhbiBiZSBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgaW4KKyAqIHNvbWUgY2FzZXMuCisgKi8KK3ZvaWQgc3RyYnVmX2dyb3coc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBhbW91bnQpOworCisvKioKKyAqIFNldCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgdG8gYSBnaXZlbiB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBkb2VzICpub3QqCisgKiBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBzbyB5b3Ugc2hvdWxkIG5vdCBwZXJmb3JtIGEgYHN0cmJ1Zl9zZXRsZW4oKWAgdG8gYQorICogbGVuZ3RoIHRoYXQgaXMgbGFyZ2VyIHRoYW4gYGxlbiArIHN0cmJ1Zl9hdmFpbCgpYC4gYHN0cmJ1Zl9zZXRsZW4oKWAgaXMKKyAqIGp1c3QgbWVhbnQgYXMgYSAncGxlYXNlIGZpeCBpbnZhcmlhbnRzIGZyb20gdGhpcyBzdHJidWYgSSBqdXN0IG1lc3NlZAorICogd2l0aCcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdHJidWZfc2V0bGVuKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgbGVuKQoreworCWlmIChsZW4gPiAoc2ItPmFsbG9jID8gc2ItPmFsbG9jIC0gMSA6IDApKQorCQlkaWUoIkJVRzogc3RyYnVmX3NldGxlbigpIGJleW9uZCBidWZmZXIiKTsKKwlzYi0+bGVuID0gbGVuOworCWlmIChzYi0+YnVmICE9IHN0cmJ1Zl9zbG9wYnVmKQorCQlzYi0+YnVmW2xlbl0gPSAnXDAnOworCWVsc2UKKwkJYXNzZXJ0KCFzdHJidWZfc2xvcGJ1ZlswXSk7Cit9CisKKy8qKgorICogRW1wdHkgdGhlIGJ1ZmZlciBieSBzZXR0aW5nIHRoZSBzaXplIG9mIGl0IHRvIHplcm8uCisgKi8KKyNkZWZpbmUgc3RyYnVmX3Jlc2V0KHNiKSAgc3RyYnVmX3NldGxlbihzYiwgMCkKKworCisvKioKKyAqIEZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qKgorICogU3RyaXAgd2hpdGVzcGFjZSBmcm9tIHRoZSBiZWdpbm5pbmcgKGBsdHJpbWApLCBlbmQgKGBydHJpbWApLCBvciBib3RoIHNpZGUKKyAqIChgdHJpbWApIG9mIGEgc3RyaW5nLgorICovCit2b2lkIHN0cmJ1Zl90cmltKHN0cnVjdCBzdHJidWYgKnNiKTsKK3ZvaWQgc3RyYnVmX3J0cmltKHN0cnVjdCBzdHJidWYgKnNiKTsKK3ZvaWQgc3RyYnVmX2x0cmltKHN0cnVjdCBzdHJidWYgKnNiKTsKKworLyogU3RyaXAgdHJhaWxpbmcgZGlyZWN0b3J5IHNlcGFyYXRvcnMgKi8KK3ZvaWQgc3RyYnVmX3RyaW1fdHJhaWxpbmdfZGlyX3NlcChzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qIFN0cmlwIHRyYWlsaW5nIExGIG9yIENSL0xGICovCit2b2lkIHN0cmJ1Zl90cmltX3RyYWlsaW5nX25ld2xpbmUoc3RydWN0IHN0cmJ1ZiAqc2IpOworCisvKioKKyAqIFJlcGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJidWYgd2l0aCBhIHJlZW5jb2RlZCBmb3JtLiAgUmV0dXJucyAtMQorICogb24gZXJyb3IsIDAgb24gc3VjY2Vzcy4KKyAqLworaW50IHN0cmJ1Zl9yZWVuY29kZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pOworCisvKioKKyAqIExvd2VyY2FzZSBlYWNoIGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyIHVzaW5nIGB0b2xvd2VyYC4KKyAqLwordm9pZCBzdHJidWZfdG9sb3dlcihzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qKgorICogQ29tcGFyZSB0d28gYnVmZmVycy4gUmV0dXJucyBhbiBpbnRlZ2VyIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIKKyAqIHRoYW4gemVybyBpZiB0aGUgZmlyc3QgYnVmZmVyIGlzIGZvdW5kLCByZXNwZWN0aXZlbHksIHRvIGJlIGxlc3MgdGhhbiwKKyAqIHRvIG1hdGNoLCBvciBiZSBncmVhdGVyIHRoYW4gdGhlIHNlY29uZCBidWZmZXIuCisgKi8KK2ludCBzdHJidWZfY21wKGNvbnN0IHN0cnVjdCBzdHJidWYgKmZpcnN0LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzZWNvbmQpOworCisKKy8qKgorICogQWRkaW5nIGRhdGEgdG8gdGhlIGJ1ZmZlcgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIE5PVEU6IEFsbCBvZiB0aGUgZnVuY3Rpb25zIGluIHRoaXMgc2VjdGlvbiB3aWxsIGdyb3cgdGhlIGJ1ZmZlciBhcworICogbmVjZXNzYXJ5LiAgSWYgdGhleSBmYWlsIGZvciBzb21lIHJlYXNvbiBvdGhlciB0aGFuIG1lbW9yeSBzaG9ydGFnZSBhbmQgdGhlCisgKiBidWZmZXIgaGFkbid0IGJlZW4gYWxsb2NhdGVkIGJlZm9yZSAoaS5lLiB0aGUgYHN0cnVjdCBzdHJidWZgIHdhcyBzZXQgdG8KKyAqIGBTVFJCVUZfSU5JVGApLCB0aGVuIHRoZXkgd2lsbCBmcmVlKCkgaXQuCisgKi8KKworLyoqCisgKiBBZGQgYSBzaW5nbGUgY2hhcmFjdGVyIHRvIHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdHJidWZfYWRkY2goc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBjKQoreworCWlmICghc3RyYnVmX2F2YWlsKHNiKSkKKwkJc3RyYnVmX2dyb3coc2IsIDEpOworCXNiLT5idWZbc2ItPmxlbisrXSA9IGM7CisJc2ItPmJ1ZltzYi0+bGVuXSA9ICdcMCc7Cit9CisKKy8qKgorICogQWRkIGEgY2hhcmFjdGVyIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRpbWVzIHRvIHRoZSBidWZmZXIuCisgKi8KK3ZvaWQgc3RyYnVmX2FkZGNoYXJzKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgYywgc2l6ZV90IG4pOworCisvKioKKyAqIEluc2VydCBkYXRhIHRvIHRoZSBnaXZlbiBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyLiBUaGUgcmVtYWluaW5nIGNvbnRlbnRzCisgKiB3aWxsIGJlIHNoaWZ0ZWQsIG5vdCBvdmVyd3JpdHRlbi4KKyAqLwordm9pZCBzdHJidWZfaW5zZXJ0KHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgcG9zLCBjb25zdCB2b2lkICosIHNpemVfdCk7CisKKy8qKgorICogSW5zZXJ0IGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBnaXZlbiBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyLgorICogVGhlIHJlbWFpbmluZyBjb250ZW50cyB3aWxsIGJlIHNoaWZ0ZWQsIG5vdCBvdmVyd3JpdHRlbi4gIEl0J3MgYW4KKyAqIGlubGluZSBmdW5jdGlvbiB0byBhbGxvdyB0aGUgY29tcGlsZXIgdG8gcmVzb2x2ZSBzdHJsZW4oKSBjYWxscyBvbgorICogY29uc3RhbnRzIGF0IGNvbXBpbGUgdGltZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHN0cmJ1Zl9pbnNlcnRzdHIoc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBwb3MsCisJCQkJICAgIGNvbnN0IGNoYXIgKnMpCit7CisJc3RyYnVmX2luc2VydChzYiwgcG9zLCBzLCBzdHJsZW4ocykpOworfQorCisvKioKKyAqIEluc2VydCBkYXRhIHRvIHRoZSBnaXZlbiBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyIGdpdmluZyBhIHByaW50ZiBmb3JtYXQKKyAqIHN0cmluZy4gVGhlIGNvbnRlbnRzIHdpbGwgYmUgc2hpZnRlZCwgbm90IG92ZXJ3cml0dGVuLgorICovCit2b2lkIHN0cmJ1Zl92aW5zZXJ0ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgY29uc3QgY2hhciAqZm10LAorCQkgICAgIHZhX2xpc3QgYXApOworCit2b2lkIHN0cmJ1Zl9pbnNlcnRmKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgcG9zLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKy8qKgorICogUmVtb3ZlIGdpdmVuIGFtb3VudCBvZiBkYXRhIGZyb20gYSBnaXZlbiBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyLgorICovCit2b2lkIHN0cmJ1Zl9yZW1vdmUoc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBwb3MsIHNpemVfdCBsZW4pOworCisvKioKKyAqIFJlbW92ZSB0aGUgYnl0ZXMgYmV0d2VlbiBgcG9zLi5wb3MrbGVuYCBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBnaXZlbgorICogZGF0YS4KKyAqLwordm9pZCBzdHJidWZfc3BsaWNlKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgcG9zLCBzaXplX3QgbGVuLAorCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pOworCisvKioKKyAqIEFkZCBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgYnVmZmVyLiBFYWNoIGxpbmUgd2lsbCBiZSBwcmVwZW5kZWQKKyAqIGJ5IGEgY29tbWVudCBjaGFyYWN0ZXIgYW5kIGEgYmxhbmsuCisgKi8KK3ZvaWQgc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXMoc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpOworCisKKy8qKgorICogQWRkIGRhdGEgb2YgZ2l2ZW4gbGVuZ3RoIHRvIHRoZSBidWZmZXIuCisgKi8KK3ZvaWQgc3RyYnVmX2FkZChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisKKy8qKgorICogQWRkIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBidWZmZXIuCisgKgorICogTk9URTogVGhpcyBmdW5jdGlvbiB3aWxsICphbHdheXMqIGJlIGltcGxlbWVudGVkIGFzIGFuIGlubGluZSBvciBhIG1hY3JvCisgKiB1c2luZyBzdHJsZW4sIG1lYW5pbmcgdGhhdCB0aGlzIGlzIGVmZmljaWVudCB0byB3cml0ZSB0aGluZ3MgbGlrZToKKyAqCisgKiAgICAgc3RyYnVmX2FkZHN0cihzYiwgImltbWVkaWF0ZSBzdHJpbmciKTsKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdHJidWZfYWRkc3RyKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzKQoreworCXN0cmJ1Zl9hZGQoc2IsIHMsIHN0cmxlbihzKSk7Cit9CisKKy8qKgorICogQ29weSB0aGUgY29udGVudHMgb2YgYW5vdGhlciBidWZmZXIgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBvbmUuCisgKi8KK3ZvaWQgc3RyYnVmX2FkZGJ1ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc2IyKTsKKworLyoqCisgKiBKb2luIHRoZSBhcmd1bWVudHMgaW50byBhIGJ1ZmZlci4gYGRlbGltYCBpcyBwdXQgYmV0d2VlbiBldmVyeQorICogdHdvIGFyZ3VtZW50cy4KKyAqLworY29uc3QgY2hhciAqc3RyYnVmX2pvaW5fYXJndihzdHJ1Y3Qgc3RyYnVmICpidWYsIGludCBhcmdjLAorCQkJICAgICBjb25zdCBjaGFyICoqYXJndiwgY2hhciBkZWxpbSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBleHBhbmQgYSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5pbmcKKyAqIHBsYWNlaG9sZGVycy4gVG8gdGhhdCBlbmQsIGl0IHBhcnNlcyB0aGUgc3RyaW5nIGFuZCBjYWxscyB0aGUgc3BlY2lmaWVkCisgKiBmdW5jdGlvbiBmb3IgZXZlcnkgcGVyY2VudCBzaWduIGZvdW5kLgorICoKKyAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBnaXZlbiBhIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgYCVgCisgKiBhbmQgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3Qgc3RyYnVmLiAgSXQgaXMgZXhwZWN0ZWQgdG8gYWRkIHRoZSBleHBhbmRlZAorICogdmVyc2lvbiBvZiB0aGUgcGxhY2Vob2xkZXIgdG8gdGhlIHN0cmJ1ZiwgZS5nLiB0byBhZGQgYSBuZXdsaW5lCisgKiBjaGFyYWN0ZXIgaWYgdGhlIGxldHRlciBgbmAgYXBwZWFycyBhZnRlciBhIGAlYC4gIFRoZSBmdW5jdGlvbiByZXR1cm5zCisgKiB0aGUgbGVuZ3RoIG9mIHRoZSBwbGFjZWhvbGRlciByZWNvZ25pemVkIGFuZCBgc3RyYnVmX2V4cGFuZCgpYCBza2lwcworICogb3ZlciBpdC4KKyAqCisgKiBUaGUgZm9ybWF0IGAlJWAgaXMgYXV0b21hdGljYWxseSBleHBhbmRlZCB0byBhIHNpbmdsZSBgJWAgYXMgYSBxdW90aW5nCisgKiBtZWNoYW5pc207IGNhbGxlcnMgZG8gbm90IG5lZWQgdG8gaGFuZGxlIHRoZSBgJWAgcGxhY2Vob2xkZXIgdGhlbXNlbHZlcywKKyAqIGFuZCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBub3QgYmUgaW52b2tlZCBmb3IgdGhpcyBwbGFjZWhvbGRlci4KKyAqCisgKiBBbGwgb3RoZXIgY2hhcmFjdGVycyAobm9uLXBlcmNlbnQgYW5kIG5vdCBza2lwcGVkIG9uZXMpIGFyZSBjb3BpZWQKKyAqIHZlcmJhdGltIHRvIHRoZSBzdHJidWYuICBJZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQgemVybywgbWVhbmluZyB0aGF0IHRoZQorICogcGxhY2Vob2xkZXIgaXMgdW5rbm93biwgdGhlbiB0aGUgcGVyY2VudCBzaWduIGlzIGNvcGllZCwgdG9vLgorICoKKyAqIEluIG9yZGVyIHRvIGZhY2lsaXRhdGUgY2FjaGluZyBhbmQgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBnaXZlCisgKiBwYXJhbWV0ZXJzIHRvIHRoZSBjYWxsYmFjaywgYHN0cmJ1Zl9leHBhbmQoKWAgcGFzc2VzIGEgY29udGV4dCBwb2ludGVyLAorICogd2hpY2ggY2FuIGJlIHVzZWQgYnkgdGhlIHByb2dyYW1tZXIgb2YgdGhlIGNhbGxiYWNrIGFzIHNoZSBzZWVzIGZpdC4KKyAqLwordHlwZWRlZiBzaXplX3QgKCpleHBhbmRfZm5fdCkgKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJICAgICAgIHZvaWQgKmNvbnRleHQpOwordm9pZCBzdHJidWZfZXhwYW5kKHN0cnVjdCBzdHJidWYgKnNiLAorCQkgICBjb25zdCBjaGFyICpmb3JtYXQsCisJCSAgIGV4cGFuZF9mbl90IGZuLAorCQkgICB2b2lkICpjb250ZXh0KTsKKworLyoqCisgKiBVc2VkIGFzIGNhbGxiYWNrIGZvciBgc3RyYnVmX2V4cGFuZGAgdG8gb25seSBleHBhbmQgbGl0ZXJhbHMKKyAqIChpLmUuICVuIGFuZCAleE5OKS4gVGhlIGNvbnRleHQgYXJndW1lbnQgaXMgaWdub3JlZC4KKyAqLworc2l6ZV90IHN0cmJ1Zl9leHBhbmRfbGl0ZXJhbF9jYihzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCQljb25zdCBjaGFyICpwbGFjZWhvbGRlciwKKwkJCQl2b2lkICpjb250ZXh0KTsKKworLyoqCisgKiBVc2VkIGFzIGNhbGxiYWNrIGZvciBgc3RyYnVmX2V4cGFuZCgpYCwgZXhwZWN0cyBhbiBhcnJheSBvZgorICogc3RydWN0IHN0cmJ1Zl9leHBhbmRfZGljdF9lbnRyeSBhcyBjb250ZXh0LCBpLmUuIHBhaXJzIG9mCisgKiBwbGFjZWhvbGRlciBhbmQgcmVwbGFjZW1lbnQgc3RyaW5nLiAgVGhlIGFycmF5IG5lZWRzIHRvIGJlCisgKiB0ZXJtaW5hdGVkIGJ5IGFuIGVudHJ5IHdpdGggcGxhY2Vob2xkZXIgc2V0IHRvIE5VTEwuCisgKi8KK3N0cnVjdCBzdHJidWZfZXhwYW5kX2RpY3RfZW50cnkgeworCWNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyOworCWNvbnN0IGNoYXIgKnZhbHVlOworfTsKK3NpemVfdCBzdHJidWZfZXhwYW5kX2RpY3RfY2Ioc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgICAgIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJICAgICB2b2lkICpjb250ZXh0KTsKKworLyoqCisgKiBBcHBlbmQgdGhlIGNvbnRlbnRzIG9mIG9uZSBzdHJidWYgdG8gYW5vdGhlciwgcXVvdGluZyBhbnkKKyAqIHBlcmNlbnQgc2lnbnMgKCIlIikgaW50byBkb3VibGUtcGVyY2VudHMgKCIlJSIpIGluIHRoZQorICogZGVzdGluYXRpb24uIFRoaXMgaXMgdXNlZnVsIGZvciBsaXRlcmFsIGRhdGEgdG8gYmUgZmVkIHRvIGVpdGhlcgorICogc3RyYnVmX2V4cGFuZCBvciB0byB0aGUgKnByaW50ZiBmYW1pbHkgb2YgZnVuY3Rpb25zLgorICovCit2b2lkIHN0cmJ1Zl9hZGRidWZfcGVyY2VudHF1b3RlKHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc3JjKTsKKworI2RlZmluZSBTVFJCVUZfRU5DT0RFX1NMQVNIIDEKKworLyoqCisgKiBBcHBlbmQgdGhlIGNvbnRlbnRzIG9mIGEgc3RyaW5nIHRvIGEgc3RyYnVmLCBwZXJjZW50LWVuY29kaW5nIGFueSBjaGFyYWN0ZXJzCisgKiB0aGF0IGFyZSBuZWVkZWQgdG8gYmUgZW5jb2RlZCBmb3IgYSBVUkwuCisgKgorICogSWYgU1RSQlVGX0VOQ09ERV9TTEFTSCBpcyBzZXQgaW4gZmxhZ3MsIHBlcmNlbnQtZW5jb2RlIHNsYXNoZXMuICBPdGhlcndpc2UsCisgKiBzbGFzaGVzIGFyZSBub3QgcGVyY2VudC1lbmNvZGVkLgorICovCit2b2lkIHN0cmJ1Zl9hZGRfcGVyY2VudGVuY29kZShzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50IGZsYWdzKTsKKworLyoqCisgKiBBcHBlbmQgdGhlIGdpdmVuIGJ5dGUgc2l6ZSBhcyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyAoaS5lLiAxMi4yMyBLaUIsCisgKiAzLjUwIE1pQikuCisgKi8KK3ZvaWQgc3RyYnVmX2h1bWFuaXNlX2J5dGVzKHN0cnVjdCBzdHJidWYgKmJ1Ziwgb2ZmX3QgYnl0ZXMpOworCisvKioKKyAqIEFwcGVuZCB0aGUgZ2l2ZW4gYnl0ZSByYXRlIGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIChpLmUuIDEyLjIzIEtpQi9zLAorICogMy41MCBNaUIvcykuCisgKi8KK3ZvaWQgc3RyYnVmX2h1bWFuaXNlX3JhdGUoc3RydWN0IHN0cmJ1ZiAqYnVmLCBvZmZfdCBieXRlcyk7CisKKy8qKgorICogQWRkIGEgZm9ybWF0dGVkIHN0cmluZyB0byB0aGUgYnVmZmVyLgorICovCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwyLDMpKSkKK3ZvaWQgc3RyYnVmX2FkZGYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworLyoqCisgKiBBZGQgYSBmb3JtYXR0ZWQgc3RyaW5nIHByZXBlbmRlZCBieSBhIGNvbW1lbnQgY2hhcmFjdGVyIGFuZCBhCisgKiBibGFuayB0byB0aGUgYnVmZmVyLgorICovCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQordm9pZCBzdHJidWZfY29tbWVudGVkX2FkZGYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsMiwwKSkpCit2b2lkIHN0cmJ1Zl92YWRkZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKTsKKworLyoqCisgKiBBZGQgdGhlIHRpbWUgc3BlY2lmaWVkIGJ5IGB0bWAsIGFzIGZvcm1hdHRlZCBieSBgc3RyZnRpbWVgLgorICogYHR6X29mZnNldGAgaXMgaW4gZGVjaW1hbCBoaG1tIGZvcm1hdCwgZS5nLiAtNjAwIG1lYW5zIHNpeCBob3VycyB3ZXN0CisgKiBvZiBHcmVlbndpY2gsIGFuZCBpdCdzIHVzZWQgdG8gZXhwYW5kICV6IGludGVybmFsbHkuICBIb3dldmVyLCB0b2tlbnMKKyAqIHdpdGggbW9kaWZpZXJzIChlLmcuICVFeikgYXJlIHBhc3NlZCB0byBgc3RyZnRpbWVgLgorICogYHN1cHByZXNzX3R6X25hbWVgLCB3aGVuIHNldCwgZXhwYW5kcyAlWiBpbnRlcm5hbGx5IHRvIHRoZSBlbXB0eQorICogc3RyaW5nIHJhdGhlciB0aGFuIHBhc3NpbmcgaXQgdG8gYHN0cmZ0aW1lYC4KKyAqLwordm9pZCBzdHJidWZfYWRkZnRpbWUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwKKwkJICAgIGNvbnN0IHN0cnVjdCB0bSAqdG0sIGludCB0el9vZmZzZXQsCisJCSAgICBpbnQgc3VwcHJlc3NfdHpfbmFtZSk7CisKKy8qKgorICogUmVhZCBhIGdpdmVuIHNpemUgb2YgZGF0YSBmcm9tIGEgRklMRSogcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICoKKyAqIE5PVEU6IFRoZSBidWZmZXIgaXMgcmV3b3VuZCBpZiB0aGUgcmVhZCBmYWlscy4gSWYgLTEgaXMgcmV0dXJuZWQsCisgKiBgZXJybm9gIG11c3QgYmUgY29uc3VsdGVkLCBsaWtlIHlvdSB3b3VsZCBkbyBmb3IgYHJlYWQoMylgLgorICogYHN0cmJ1Zl9yZWFkKClgLCBgc3RyYnVmX3JlYWRfZmlsZSgpYCBhbmQgYHN0cmJ1Zl9nZXRsaW5lXyooKWAKKyAqIGZhbWlseSBvZiBmdW5jdGlvbnMgaGF2ZSB0aGUgc2FtZSBiZWhhdmlvdXIgYXMgd2VsbC4KKyAqLworc2l6ZV90IHN0cmJ1Zl9mcmVhZChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHNpemUsIEZJTEUgKmZpbGUpOworCisvKioKKyAqIFJlYWQgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLiBUaGUgdGhpcmQgYXJndW1lbnQgY2FuIGJlCisgKiB1c2VkIHRvIGdpdmUgYSBoaW50IGFib3V0IHRoZSBmaWxlIHNpemUsIHRvIGF2b2lkIHJlYWxsb2NzLiAgSWYgcmVhZCBmYWlscywKKyAqIGFueSBwYXJ0aWFsIHJlYWQgaXMgdW5kb25lLgorICovCitzc2l6ZV90IHN0cmJ1Zl9yZWFkKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgZmQsIHNpemVfdCBoaW50KTsKKworLyoqCisgKiBSZWFkIHRoZSBjb250ZW50cyBvZiBhIGdpdmVuIGZpbGUgZGVzY3JpcHRvciBwYXJ0aWFsbHkgYnkgdXNpbmcgb25seSBvbmUKKyAqIGF0dGVtcHQgb2YgeHJlYWQuIFRoZSB0aGlyZCBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBnaXZlIGEgaGludCBhYm91dCB0aGUKKyAqIGZpbGUgc2l6ZSwgdG8gYXZvaWQgcmVhbGxvY3MuIFJldHVybnMgdGhlIG51bWJlciBvZiBuZXcgYnl0ZXMgYXBwZW5kZWQgdG8KKyAqIHRoZSBzYi4KKyAqLworc3NpemVfdCBzdHJidWZfcmVhZF9vbmNlKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgZmQsIHNpemVfdCBoaW50KTsKKworLyoqCisgKiBSZWFkIHRoZSBjb250ZW50cyBvZiBhIGZpbGUsIHNwZWNpZmllZCBieSBpdHMgcGF0aC4gVGhlIHRoaXJkIGFyZ3VtZW50CisgKiBjYW4gYmUgdXNlZCB0byBnaXZlIGEgaGludCBhYm91dCB0aGUgZmlsZSBzaXplLCB0byBhdm9pZCByZWFsbG9jcy4KKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBpZiBzb21lIGVycm9yCisgKiBvY2N1cnJlZCB3aGlsZSBvcGVuaW5nIG9yIHJlYWRpbmcgdGhlIGZpbGUuCisgKi8KK3NzaXplX3Qgc3RyYnVmX3JlYWRfZmlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGhpbnQpOworCisvKioKKyAqIFJlYWQgdGhlIHRhcmdldCBvZiBhIHN5bWJvbGljIGxpbmssIHNwZWNpZmllZCBieSBpdHMgcGF0aC4gIFRoZSB0aGlyZAorICogYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gZ2l2ZSBhIGhpbnQgYWJvdXQgdGhlIHNpemUsIHRvIGF2b2lkIHJlYWxsb2NzLgorICovCitpbnQgc3RyYnVmX3JlYWRsaW5rKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgaGludCk7CisKKy8qKgorICogV3JpdGUgdGhlIHdob2xlIGNvbnRlbnQgb2YgdGhlIHN0cmJ1ZiB0byB0aGUgc3RyZWFtIG5vdCBzdG9wcGluZyBhdAorICogTlVMIGJ5dGVzLgorICovCitzc2l6ZV90IHN0cmJ1Zl93cml0ZShzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqc3RyZWFtKTsKK3NzaXplX3Qgc3RyYnVmX3dyaXRlX2ZkKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgZmQpOworCisvKioKKyAqIFJlYWQgYSBsaW5lIGZyb20gYSBGSUxFICosIG92ZXJ3cml0aW5nIHRoZSBleGlzdGluZyBjb250ZW50cyBvZgorICogdGhlIHN0cmJ1Zi4gIFRoZSBzdHJidWZfZ2V0bGluZSooKSBmYW1pbHkgb2YgZnVuY3Rpb25zIHNoYXJlCisgKiB0aGlzIHNpZ25hdHVyZSwgYnV0IGhhdmUgZGlmZmVyZW50IGxpbmUgdGVybWluYXRpb24gY29udmVudGlvbnMuCisgKgorICogUmVhZGluZyBzdG9wcyBhZnRlciB0aGUgdGVybWluYXRvciBvciBhdCBFT0YuICBUaGUgdGVybWluYXRvcgorICogaXMgcmVtb3ZlZCBmcm9tIHRoZSBidWZmZXIgYmVmb3JlIHJldHVybmluZy4gIFJldHVybnMgMCB1bmxlc3MKKyAqIHRoZXJlIHdhcyBub3RoaW5nIGxlZnQgYmVmb3JlIEVPRiwgaW4gd2hpY2ggY2FzZSBpdCByZXR1cm5zIGBFT0ZgLgorICovCit0eXBlZGVmIGludCAoKnN0cmJ1Zl9nZXRsaW5lX2ZuKShzdHJ1Y3Qgc3RyYnVmICosIEZJTEUgKik7CisKKy8qIFVzZXMgTEYgYXMgdGhlIGxpbmUgdGVybWluYXRvciAqLworaW50IHN0cmJ1Zl9nZXRsaW5lX2xmKHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpmcCk7CisKKy8qIFVzZXMgTlVMIGFzIHRoZSBsaW5lIHRlcm1pbmF0b3IgKi8KK2ludCBzdHJidWZfZ2V0bGluZV9udWwoc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZwKTsKKworLyoKKyAqIFNpbWlsYXIgdG8gc3RyYnVmX2dldGxpbmVfbGYoKSwgYnV0IGFkZGl0aW9uYWxseSB0cmVhdHMgYSBDUiB0aGF0CisgKiBjb21lcyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIExGIGFzIHBhcnQgb2YgdGhlIHRlcm1pbmF0b3IuCisgKiBUaGlzIGlzIHRoZSBtb3N0IGZyaWVuZGx5IHZlcnNpb24gdG8gYmUgdXNlZCB0byByZWFkICJ0ZXh0IiBmaWxlcworICogdGhhdCBjYW4gY29tZSBmcm9tIHBsYXRmb3JtcyB3aG9zZSBuYXRpdmUgdGV4dCBmb3JtYXQgaXMgQ1JMRgorICogdGVybWluYXRlZC4KKyAqLworaW50IHN0cmJ1Zl9nZXRsaW5lKHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpmaWxlKTsKKworCisvKioKKyAqIExpa2UgYHN0cmJ1Zl9nZXRsaW5lYCwgYnV0IGtlZXBzIHRoZSB0cmFpbGluZyB0ZXJtaW5hdG9yIChpZgorICogYW55KSBpbiB0aGUgYnVmZmVyLgorICovCitpbnQgc3RyYnVmX2dldHdob2xlbGluZShzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqZmlsZSwgaW50IHRlcm0pOworCisvKioKKyAqIExpa2UgYHN0cmJ1Zl9nZXR3aG9sZWxpbmVgLCBidXQgYXBwZW5kcyB0aGUgbGluZSBpbnN0ZWFkIG9mCisgKiByZXNldHRpbmcgdGhlIGJ1ZmZlciBmaXJzdC4KKyAqLworaW50IHN0cmJ1Zl9hcHBlbmR3aG9sZWxpbmUoc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZpbGUsIGludCB0ZXJtKTsKKworLyoqCisgKiBMaWtlIGBzdHJidWZfZ2V0d2hvbGVsaW5lYCwgYnV0IG9wZXJhdGVzIG9uIGEgZmlsZSBkZXNjcmlwdG9yLgorICogSXQgcmVhZHMgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUsIHNvIGl0IGlzIHZlcnkgc2xvdy4gIERvIG5vdAorICogdXNlIGl0IHVubGVzcyB5b3UgbmVlZCB0aGUgY29ycmVjdCBwb3NpdGlvbiBpbiB0aGUgZmlsZQorICogZGVzY3JpcHRvci4KKyAqLworaW50IHN0cmJ1Zl9nZXR3aG9sZWxpbmVfZmQoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBmZCwgaW50IHRlcm0pOworCisvKioKKyAqIFNldCB0aGUgYnVmZmVyIHRvIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICovCitpbnQgc3RyYnVmX2dldGN3ZChzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qKgorICogQWRkIGEgcGF0aCB0byBhIGJ1ZmZlciwgY29udmVydGluZyBhIHJlbGF0aXZlIHBhdGggdG8gYW4KKyAqIGFic29sdXRlIG9uZSBpbiB0aGUgcHJvY2Vzcy4gIFN5bWJvbGljIGxpbmtzIGFyZSBub3QKKyAqIHJlc29sdmVkLgorICovCit2b2lkIHN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCk7CisKKy8qKgorICogQ2Fub25pemUgYHBhdGhgIChtYWtlIGl0IGFic29sdXRlLCByZXNvbHZlIHN5bWxpbmtzLCByZW1vdmUgZXh0cmEKKyAqIHNsYXNoZXMpIGFuZCBhcHBlbmQgaXQgdG8gYHNiYC4gIERpZSB3aXRoIGFuIGluZm9ybWF0aXZlIGVycm9yCisgKiBtZXNzYWdlIGlmIHRoZXJlIGlzIGEgcHJvYmxlbS4KKyAqCisgKiBUaGUgZGlyZWN0b3J5IHBhcnQgb2YgYHBhdGhgIChpLmUuLCBldmVyeXRoaW5nIHVwIHRvIHRoZSBsYXN0CisgKiBkaXJfc2VwKSBtdXN0IGRlbm90ZSBhIHZhbGlkLCBleGlzdGluZyBkaXJlY3RvcnksIGJ1dCB0aGUgbGFzdAorICogY29tcG9uZW50IG5lZWQgbm90IGV4aXN0LgorICoKKyAqIENhbGxlcnMgdGhhdCBkb24ndCBtaW5kIGxpbmtzIHNob3VsZCB1c2UgdGhlIG1vcmUgbGlnaHR3ZWlnaHQKKyAqIHN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aCgpIGluc3RlYWQuCisgKi8KK3ZvaWQgc3RyYnVmX2FkZF9yZWFsX3BhdGgoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBhdGgpOworCisKKy8qKgorICogTm9ybWFsaXplIGluLXBsYWNlIHRoZSBwYXRoIGNvbnRhaW5lZCBpbiB0aGUgc3RyYnVmLiBTZWUKKyAqIG5vcm1hbGl6ZV9wYXRoX2NvcHkoKSBmb3IgZGV0YWlscy4gSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgY29udGVudHMgb2YgInNiIgorICogYXJlIGxlZnQgdW50b3VjaGVkLCBhbmQgLTEgaXMgcmV0dXJuZWQuCisgKi8KK2ludCBzdHJidWZfbm9ybWFsaXplX3BhdGgoc3RydWN0IHN0cmJ1ZiAqc2IpOworCisvKioKKyAqIFN0cmlwIHdoaXRlc3BhY2UgZnJvbSBhIGJ1ZmZlci4gVGhlIHNlY29uZCBwYXJhbWV0ZXIgY29udHJvbHMgaWYKKyAqIGNvbW1lbnRzIGFyZSBjb25zaWRlcmVkIGNvbnRlbnRzIHRvIGJlIHJlbW92ZWQgb3Igbm90LgorICovCit2b2lkIHN0cmJ1Zl9zdHJpcHNwYWNlKHN0cnVjdCBzdHJidWYgKmJ1ZiwgaW50IHNraXBfY29tbWVudHMpOworCitzdGF0aWMgaW5saW5lIGludCBzdHJidWZfc3RyaXBfc3VmZml4KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzdWZmaXgpCit7CisJaWYgKHN0cmlwX3N1ZmZpeF9tZW0oc2ItPmJ1ZiwgJnNiLT5sZW4sIHN1ZmZpeCkpIHsKKwkJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbik7CisJCXJldHVybiAxOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoqCisgKiBTcGxpdCBzdHIgKG9mIGxlbmd0aCBzbGVuKSBhdCB0aGUgc3BlY2lmaWVkIHRlcm1pbmF0b3IgY2hhcmFjdGVyLgorICogUmV0dXJuIGEgbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cmJ1ZiBvYmplY3RzCisgKiBob2xkaW5nIHRoZSBzdWJzdHJpbmdzLiAgVGhlIHN1YnN0cmluZ3MgaW5jbHVkZSB0aGUgdGVybWluYXRvciwKKyAqIGV4Y2VwdCBmb3IgdGhlIGxhc3Qgc3Vic3RyaW5nLCB3aGljaCBtaWdodCBiZSB1bnRlcm1pbmF0ZWQgaWYgdGhlCisgKiBvcmlnaW5hbCBzdHJpbmcgZGlkIG5vdCBlbmQgd2l0aCBhIHRlcm1pbmF0b3IuICBJZiBtYXggaXMgcG9zaXRpdmUsCisgKiB0aGVuIHNwbGl0IHRoZSBzdHJpbmcgaW50byBhdCBtb3N0IG1heCBzdWJzdHJpbmdzICh3aXRoIHRoZSBsYXN0CisgKiBzdWJzdHJpbmcgY29udGFpbmluZyBldmVyeXRoaW5nIGZvbGxvd2luZyB0aGUgKG1heC0xKXRoIHRlcm1pbmF0b3IKKyAqIGNoYXJhY3RlcikuCisgKgorICogVGhlIG1vc3QgZ2VuZXJpYyBmb3JtIGlzIGBzdHJidWZfc3BsaXRfYnVmYCwgd2hpY2ggdGFrZXMgYW4gYXJiaXRyYXJ5CisgKiBwb2ludGVyL2xlbiBidWZmZXIuIFRoZSBgX3N0cmAgdmFyaWFudCB0YWtlcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZywKKyAqIHRoZSBgX21heGAgdmFyaWFudCB0YWtlcyBhIHN0cmJ1ZiwgYW5kIGp1c3QgYHN0cmJ1Zl9zcGxpdGAgaXMgYSBjb252ZW5pZW5jZQorICogd3JhcHBlciB0byBkcm9wIHRoZSBgbWF4YCBwYXJhbWV0ZXIuCisgKgorICogRm9yIGxpZ2h0ZXItd2VpZ2h0IGFsdGVybmF0aXZlcywgc2VlIHN0cmluZ19saXN0X3NwbGl0KCkgYW5kCisgKiBzdHJpbmdfbGlzdF9zcGxpdF9pbl9wbGFjZSgpLgorICovCitzdHJ1Y3Qgc3RyYnVmICoqc3RyYnVmX3NwbGl0X2J1Zihjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sCisJCQkJIGludCB0ZXJtaW5hdG9yLCBpbnQgbWF4KTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3RyYnVmICoqc3RyYnVmX3NwbGl0X3N0cihjb25zdCBjaGFyICpzdHIsCisJCQkJCSAgICAgICBpbnQgdGVybWluYXRvciwgaW50IG1heCkKK3sKKwlyZXR1cm4gc3RyYnVmX3NwbGl0X2J1ZihzdHIsIHN0cmxlbihzdHIpLCB0ZXJtaW5hdG9yLCBtYXgpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzdHJidWYgKipzdHJidWZfc3BsaXRfbWF4KGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiLAorCQkJCQkgICAgICAgaW50IHRlcm1pbmF0b3IsIGludCBtYXgpCit7CisJcmV0dXJuIHN0cmJ1Zl9zcGxpdF9idWYoc2ItPmJ1Ziwgc2ItPmxlbiwgdGVybWluYXRvciwgbWF4KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3RyYnVmICoqc3RyYnVmX3NwbGl0KGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiLAorCQkJCQkgICBpbnQgdGVybWluYXRvcikKK3sKKwlyZXR1cm4gc3RyYnVmX3NwbGl0X21heChzYiwgdGVybWluYXRvciwgMCk7Cit9CisKKy8qCisgKiBBZGRzIGFsbCBzdHJpbmdzIG9mIGEgc3RyaW5nIGxpc3QgdG8gdGhlIHN0cmJ1Ziwgc2VwYXJhdGVkIGJ5IHRoZSBnaXZlbgorICogc2VwYXJhdG9yLiAgRm9yIGV4YW1wbGUsIGlmIHNlcCBpcworICogICAnLCAnCisgKiBhbmQgc2xpc3QgY29udGFpbnMKKyAqICAgWydlbGVtZW50MScsICdlbGVtZW50MicsIC4uLiwgJ2VsZW1lbnROJ10sCisgKiB0aGVuIHdyaXRlOgorICogICAnZWxlbWVudDEsIGVsZW1lbnQyLCAuLi4sIGVsZW1lbnROJworICogdG8gc3RyLiAgSWYgb25seSBvbmUgZWxlbWVudCwganVzdCB3cml0ZSAiZWxlbWVudDEiIHRvIHN0ci4KKyAqLwordm9pZCBzdHJidWZfYWRkX3NlcGFyYXRlZF9zdHJpbmdfbGlzdChzdHJ1Y3Qgc3RyYnVmICpzdHIsCisJCQkJICAgICAgY29uc3QgY2hhciAqc2VwLAorCQkJCSAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqc2xpc3QpOworCisvKioKKyAqIEZyZWUgYSBOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZiBzdHJidWZzIChmb3IgZXhhbXBsZSwgdGhlIHJldHVybgorICogdmFsdWVzIG9mIHRoZSBzdHJidWZfc3BsaXQqKCkgZnVuY3Rpb25zKS4KKyAqLwordm9pZCBzdHJidWZfbGlzdF9mcmVlKHN0cnVjdCBzdHJidWYgKipsaXN0KTsKKworLyoqCisgKiBBZGQgdGhlIGFiYnJldmlhdGlvbiwgYXMgZ2VuZXJhdGVkIGJ5IGZpbmRfdW5pcXVlX2FiYnJldiwgb2YgYHNoYTFgIHRvCisgKiB0aGUgc3RyYnVmIGBzYmAuCisgKi8KK3ZvaWQgc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgaW50IGFiYnJldl9sZW4pOworCisvKioKKyAqIExhdW5jaCB0aGUgdXNlciBwcmVmZXJyZWQgZWRpdG9yIHRvIGVkaXQgYSBmaWxlIGFuZCBmaWxsIHRoZSBidWZmZXIKKyAqIHdpdGggdGhlIGZpbGUncyBjb250ZW50cyB1cG9uIHRoZSB1c2VyIGNvbXBsZXRpbmcgdGhlaXIgZWRpdGluZy4gVGhlCisgKiB0aGlyZCBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGVudmlyb25tZW50IHdoaWNoIHRoZSBlZGl0b3IgaXMKKyAqIHJ1biBpbi4gSWYgdGhlIGJ1ZmZlciBpcyBOVUxMIHRoZSBlZGl0b3IgaXMgbGF1bmNoZWQgYXMgdXN1YWwgYnV0IHRoZQorICogZmlsZSdzIGNvbnRlbnRzIGFyZSBub3QgcmVhZCBpbnRvIHRoZSBidWZmZXIgdXBvbiBjb21wbGV0aW9uLgorICovCitpbnQgbGF1bmNoX2VkaXRvcihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsCisJCSAgY29uc3QgY2hhciAqY29uc3QgKmVudik7CisKK2ludCBsYXVuY2hfc2VxdWVuY2VfZWRpdG9yKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwKKwkJCSAgIGNvbnN0IGNoYXIgKmNvbnN0ICplbnYpOworCisvKgorICogSW4gY29udHJhc3QgdG8gYGxhdW5jaF9lZGl0b3IoKWAsIHRoaXMgZnVuY3Rpb24gd3JpdGVzIG91dCB0aGUgY29udGVudHMKKyAqIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBmaXJzdCwgdGhlbiBjbGVhcnMgdGhlIGBidWZmZXJgLCB0aGVuIGxhdW5jaGVzCisgKiB0aGUgZWRpdG9yIGFuZCByZWFkcyBiYWNrIGluIHRoZSBmaWxlIGNvbnRlbnRzIGludG8gdGhlIGBidWZmZXJgLgorICogRmluYWxseSwgaXQgZGVsZXRlcyB0aGUgdGVtcG9yYXJ5IGZpbGUuCisgKgorICogSWYgYHBhdGhgIGlzIHJlbGF0aXZlLCBpdCByZWZlcnMgdG8gYSBmaWxlIGluIHRoZSBgLmdpdGAgZGlyZWN0b3J5LgorICovCitpbnQgc3RyYnVmX2VkaXRfaW50ZXJhY3RpdmVseShzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgICBjb25zdCBjaGFyICpjb25zdCAqZW52KTsKKwordm9pZCBzdHJidWZfYWRkX2xpbmVzKHN0cnVjdCBzdHJidWYgKnNiLAorCQkgICAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJICAgICAgc2l6ZV90IHNpemUpOworCisvKioKKyAqIEFwcGVuZCBzIHRvIHNiLCB3aXRoIHRoZSBjaGFyYWN0ZXJzICc8JywgJz4nLCAnJicgYW5kICciJyBjb252ZXJ0ZWQKKyAqIGludG8gWE1MIGVudGl0aWVzLgorICovCit2b2lkIHN0cmJ1Zl9hZGRzdHJfeG1sX3F1b3RlZChzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnMpOworCisvKioKKyAqICJDb21wbGV0ZSIgdGhlIGNvbnRlbnRzIG9mIGBzYmAgYnkgZW5zdXJpbmcgdGhhdCBlaXRoZXIgaXQgZW5kcyB3aXRoIHRoZQorICogY2hhcmFjdGVyIGB0ZXJtYCwgb3IgaXQgaXMgZW1wdHkuICBUaGlzIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwKKyAqIHRvIGVuc3VyZSB0aGF0IHRleHQgZW5kcyB3aXRoIGEgbmV3bGluZSwgYnV0IHdpdGhvdXQgY3JlYXRpbmcgYW4gZW1wdHkKKyAqIGJsYW5rIGxpbmUgaWYgdGhlcmUgaXMgbm8gY29udGVudCBpbiB0aGUgZmlyc3QgcGxhY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdHJidWZfY29tcGxldGUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNoYXIgdGVybSkKK3sKKwlpZiAoc2ItPmxlbiAmJiBzYi0+YnVmW3NiLT5sZW4gLSAxXSAhPSB0ZXJtKQorCQlzdHJidWZfYWRkY2goc2IsIHRlcm0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RyYnVmX2NvbXBsZXRlX2xpbmUoc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJc3RyYnVmX2NvbXBsZXRlKHNiLCAnXG4nKTsKK30KKworLyoKKyAqIENvcHkgIm5hbWUiIHRvICJzYiIsIGV4cGFuZGluZyBhbnkgc3BlY2lhbCBALW1hcmtzIGFzIGhhbmRsZWQgYnkKKyAqIGludGVycHJldF9icmFuY2hfbmFtZSgpLiBUaGUgcmVzdWx0IGlzIGEgbm9uLXF1YWxpZmllZCBicmFuY2ggbmFtZQorICogKHNvICJmb28iIG9yICJvcmlnaW4vbWFzdGVyIiBpbnN0ZWFkIG9mICJyZWZzL2hlYWRzL2ZvbyIgb3IKKyAqICJyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciIpLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIG5hbWUgbWF5IG5vdCBiZSBhIHN5bnRhY3RpY2FsbHkgdmFsaWQgcmVmbmFtZS4KKyAqCisgKiBJZiAiYWxsb3dlZCIgaXMgbm9uLXplcm8sIHJlc3RyaWN0IHRoZSBzZXQgb2YgYWxsb3dlZCBleHBhbnNpb25zLiBTZWUKKyAqIGludGVycHJldF9icmFuY2hfbmFtZSgpIGZvciBkZXRhaWxzLgorICovCit2b2lkIHN0cmJ1Zl9icmFuY2huYW1lKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICAgdW5zaWduZWQgYWxsb3dlZCk7CisKKy8qCisgKiBMaWtlIHN0cmJ1Zl9icmFuY2huYW1lKCkgYWJvdmUsIGJ1dCBjb25maXJtIHRoYXQgdGhlIHJlc3VsdCBpcworICogc3ludGFjdGljYWxseSB2YWxpZCB0byBiZSB1c2VkIGFzIGEgbG9jYWwgYnJhbmNoIG5hbWUgaW4gcmVmcy9oZWFkcy8uCisgKgorICogVGhlIHJldHVybiB2YWx1ZSBpcyAiMCIgaWYgdGhlIHJlc3VsdCBpcyB2YWxpZCwgYW5kICItMSIgb3RoZXJ3aXNlLgorICovCitpbnQgc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm5hbWUpOworCit0eXBlZGVmIGludCAoKmNoYXJfcHJlZGljYXRlKShjaGFyIGNoKTsKKworaW50IGlzX3JmYzM5ODZfdW5yZXNlcnZlZChjaGFyIGNoKTsKK2ludCBpc19yZmMzOTg2X3Jlc2VydmVkX29yX3VucmVzZXJ2ZWQoY2hhciBjaCk7CisKK3ZvaWQgc3RyYnVmX2FkZHN0cl91cmxlbmNvZGUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgIGNoYXJfcHJlZGljYXRlIGFsbG93X3VuZW5jb2RlZF9mbik7CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLDEsMikpKQoraW50IHByaW50Zl9sbihjb25zdCBjaGFyICpmbXQsIC4uLik7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwyLDMpKSkKK2ludCBmcHJpbnRmX2xuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKK2NoYXIgKnhzdHJkdXBfdG9sb3dlcihjb25zdCBjaGFyICopOworY2hhciAqeHN0cmR1cF90b3VwcGVyKGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogQ3JlYXRlIGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyB1c2luZyBwcmludGYgZm9ybWF0LiBZb3UgY2FuIGRvIHRoaXMgZWFzaWx5CisgKiB3aXRoIGEgc3RyYnVmLCBidXQgdGhpcyBwcm92aWRlcyBhIHNob3J0Y3V0IHRvIHNhdmUgYSBmZXcgbGluZXMuCisgKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAwKSkpCitjaGFyICp4c3RydmZtdChjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK2NoYXIgKnhzdHJmbXQoY29uc3QgY2hhciAqZm10LCAuLi4pOworCisjZW5kaWYgLyogU1RSQlVGX0ggKi8KZGlmZiAtLWdpdCBhL3N0cmVhbWluZy5jIGIvc3RyZWFtaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAwZjA3YQotLS0gL2Rldi9udWxsCisrKyBiL3N0cmVhbWluZy5jCkBAIC0wLDAgKzEsNTY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicmVwbGFjZS1vYmplY3QuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorCitlbnVtIGlucHV0X3NvdXJjZSB7CisJc3RyZWFtX2Vycm9yID0gLTEsCisJaW5jb3JlID0gMCwKKwlsb29zZSA9IDEsCisJcGFja19ub25fZGVsdGEgPSAyCit9OworCit0eXBlZGVmIGludCAoKm9wZW5faXN0cmVhbV9mbikoc3RydWN0IGdpdF9pc3RyZWFtICosCisJCQkgICAgICAgc3RydWN0IHJlcG9zaXRvcnkgKiwKKwkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2luZm8gKiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosCisJCQkgICAgICAgZW51bSBvYmplY3RfdHlwZSAqKTsKK3R5cGVkZWYgaW50ICgqY2xvc2VfaXN0cmVhbV9mbikoc3RydWN0IGdpdF9pc3RyZWFtICopOwordHlwZWRlZiBzc2l6ZV90ICgqcmVhZF9pc3RyZWFtX2ZuKShzdHJ1Y3QgZ2l0X2lzdHJlYW0gKiwgY2hhciAqLCBzaXplX3QpOworCitzdHJ1Y3Qgc3RyZWFtX3Z0YmwgeworCWNsb3NlX2lzdHJlYW1fZm4gY2xvc2U7CisJcmVhZF9pc3RyZWFtX2ZuIHJlYWQ7Cit9OworCisjZGVmaW5lIG9wZW5fbWV0aG9kX2RlY2wobmFtZSkgXAorCWludCBvcGVuX2lzdHJlYW1fICMjbmFtZSBcCisJKHN0cnVjdCBnaXRfaXN0cmVhbSAqc3QsIHN0cnVjdCByZXBvc2l0b3J5ICpyLCBcCisJIHN0cnVjdCBvYmplY3RfaW5mbyAqb2ksIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgXAorCSBlbnVtIG9iamVjdF90eXBlICp0eXBlKQorCisjZGVmaW5lIGNsb3NlX21ldGhvZF9kZWNsKG5hbWUpIFwKKwlpbnQgY2xvc2VfaXN0cmVhbV8gIyNuYW1lIFwKKwkoc3RydWN0IGdpdF9pc3RyZWFtICpzdCkKKworI2RlZmluZSByZWFkX21ldGhvZF9kZWNsKG5hbWUpIFwKKwlzc2l6ZV90IHJlYWRfaXN0cmVhbV8gIyNuYW1lIFwKKwkoc3RydWN0IGdpdF9pc3RyZWFtICpzdCwgY2hhciAqYnVmLCBzaXplX3Qgc3opCisKKy8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyBvcGVuX21ldGhvZF9kZWNsKGluY29yZSk7CitzdGF0aWMgb3Blbl9tZXRob2RfZGVjbChsb29zZSk7CitzdGF0aWMgb3Blbl9tZXRob2RfZGVjbChwYWNrX25vbl9kZWx0YSk7CitzdGF0aWMgc3RydWN0IGdpdF9pc3RyZWFtICphdHRhY2hfc3RyZWFtX2ZpbHRlcihzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0LAorCQkJCQkJc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlcik7CisKKworc3RhdGljIG9wZW5faXN0cmVhbV9mbiBvcGVuX2lzdHJlYW1fdGJsW10gPSB7CisJb3Blbl9pc3RyZWFtX2luY29yZSwKKwlvcGVuX2lzdHJlYW1fbG9vc2UsCisJb3Blbl9pc3RyZWFtX3BhY2tfbm9uX2RlbHRhLAorfTsKKworI2RlZmluZSBGSUxURVJfQlVGRkVSICgxMDI0KjE2KQorCitzdHJ1Y3QgZmlsdGVyZWRfaXN0cmVhbSB7CisJc3RydWN0IGdpdF9pc3RyZWFtICp1cHN0cmVhbTsKKwlzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyOworCWNoYXIgaWJ1ZltGSUxURVJfQlVGRkVSXTsKKwljaGFyIG9idWZbRklMVEVSX0JVRkZFUl07CisJaW50IGlfZW5kLCBpX3B0cjsKKwlpbnQgb19lbmQsIG9fcHRyOworCWludCBpbnB1dF9maW5pc2hlZDsKK307CisKK3N0cnVjdCBnaXRfaXN0cmVhbSB7CisJY29uc3Qgc3RydWN0IHN0cmVhbV92dGJsICp2dGJsOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsgLyogaW5mbGF0ZWQgc2l6ZSBvZiBmdWxsIG9iamVjdCAqLworCWdpdF96c3RyZWFtIHo7CisJZW51bSB7IHpfdW51c2VkLCB6X3VzZWQsIHpfZG9uZSwgel9lcnJvciB9IHpfc3RhdGU7CisKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQljaGFyICpidWY7IC8qIGZyb20gcmVhZF9vYmplY3QoKSAqLworCQkJdW5zaWduZWQgbG9uZyByZWFkX3B0cjsKKwkJfSBpbmNvcmU7CisKKwkJc3RydWN0IHsKKwkJCXZvaWQgKm1hcHBlZDsKKwkJCXVuc2lnbmVkIGxvbmcgbWFwc2l6ZTsKKwkJCWNoYXIgaGRyWzMyXTsKKwkJCWludCBoZHJfYXZhaWw7CisJCQlpbnQgaGRyX3VzZWQ7CisJCX0gbG9vc2U7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrOworCQkJb2ZmX3QgcG9zOworCQl9IGluX3BhY2s7CisKKwkJc3RydWN0IGZpbHRlcmVkX2lzdHJlYW0gZmlsdGVyZWQ7CisJfSB1OworfTsKKworaW50IGNsb3NlX2lzdHJlYW0oc3RydWN0IGdpdF9pc3RyZWFtICpzdCkKK3sKKwlpbnQgciA9IHN0LT52dGJsLT5jbG9zZShzdCk7CisJZnJlZShzdCk7CisJcmV0dXJuIHI7Cit9CisKK3NzaXplX3QgcmVhZF9pc3RyZWFtKHN0cnVjdCBnaXRfaXN0cmVhbSAqc3QsIHZvaWQgKmJ1Ziwgc2l6ZV90IHN6KQoreworCXJldHVybiBzdC0+dnRibC0+cmVhZChzdCwgYnVmLCBzeik7Cit9CisKK3N0YXRpYyBlbnVtIGlucHV0X3NvdXJjZSBpc3RyZWFtX3NvdXJjZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQllbnVtIG9iamVjdF90eXBlICp0eXBlLAorCQkJCQlzdHJ1Y3Qgb2JqZWN0X2luZm8gKm9pKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlpbnQgc3RhdHVzOworCisJb2ktPnR5cGVwID0gdHlwZTsKKwlvaS0+c2l6ZXAgPSAmc2l6ZTsKKwlzdGF0dXMgPSBvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQociwgb2lkLCBvaSwgMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdHJlYW1fZXJyb3I7CisKKwlzd2l0Y2ggKG9pLT53aGVuY2UpIHsKKwljYXNlIE9JX0xPT1NFOgorCQlyZXR1cm4gbG9vc2U7CisJY2FzZSBPSV9QQUNLRUQ6CisJCWlmICghb2ktPnUucGFja2VkLmlzX2RlbHRhICYmIGJpZ19maWxlX3RocmVzaG9sZCA8IHNpemUpCisJCQlyZXR1cm4gcGFja19ub25fZGVsdGE7CisJCS8qIGZhbGx0aHJ1ICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIGluY29yZTsKKwl9Cit9CisKK3N0cnVjdCBnaXRfaXN0cmVhbSAqb3Blbl9pc3RyZWFtKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsCisJCQkJIHVuc2lnbmVkIGxvbmcgKnNpemUsCisJCQkJIHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIpCit7CisJc3RydWN0IGdpdF9pc3RyZWFtICpzdDsKKwlzdHJ1Y3Qgb2JqZWN0X2luZm8gb2kgPSBPQkpFQ1RfSU5GT19JTklUOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnJlYWwgPSBsb29rdXBfcmVwbGFjZV9vYmplY3Qociwgb2lkKTsKKwllbnVtIGlucHV0X3NvdXJjZSBzcmMgPSBpc3RyZWFtX3NvdXJjZShyLCByZWFsLCB0eXBlLCAmb2kpOworCisJaWYgKHNyYyA8IDApCisJCXJldHVybiBOVUxMOworCisJc3QgPSB4bWFsbG9jKHNpemVvZigqc3QpKTsKKwlpZiAob3Blbl9pc3RyZWFtX3RibFtzcmNdKHN0LCByLCAmb2ksIHJlYWwsIHR5cGUpKSB7CisJCWlmIChvcGVuX2lzdHJlYW1faW5jb3JlKHN0LCByLCAmb2ksIHJlYWwsIHR5cGUpKSB7CisJCQlmcmVlKHN0KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCWlmIChmaWx0ZXIpIHsKKwkJLyogQWRkICImJiAhaXNfbnVsbF9zdHJlYW1fZmlsdGVyKGZpbHRlcikiIGZvciBwZXJmb3JtYW5jZSAqLworCQlzdHJ1Y3QgZ2l0X2lzdHJlYW0gKm5zdCA9IGF0dGFjaF9zdHJlYW1fZmlsdGVyKHN0LCBmaWx0ZXIpOworCQlpZiAoIW5zdCkgeworCQkJY2xvc2VfaXN0cmVhbShzdCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlzdCA9IG5zdDsKKwl9CisKKwkqc2l6ZSA9IHN0LT5zaXplOworCXJldHVybiBzdDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb21tb24gaGVscGVycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgY2xvc2VfZGVmbGF0ZWRfc3RyZWFtKHN0cnVjdCBnaXRfaXN0cmVhbSAqc3QpCit7CisJaWYgKHN0LT56X3N0YXRlID09IHpfdXNlZCkKKwkJZ2l0X2luZmxhdGVfZW5kKCZzdC0+eik7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsdGVyZWQgc3RyZWFtCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgY2xvc2VfbWV0aG9kX2RlY2woZmlsdGVyZWQpCit7CisJZnJlZV9zdHJlYW1fZmlsdGVyKHN0LT51LmZpbHRlcmVkLmZpbHRlcik7CisJcmV0dXJuIGNsb3NlX2lzdHJlYW0oc3QtPnUuZmlsdGVyZWQudXBzdHJlYW0pOworfQorCitzdGF0aWMgcmVhZF9tZXRob2RfZGVjbChmaWx0ZXJlZCkKK3sKKwlzdHJ1Y3QgZmlsdGVyZWRfaXN0cmVhbSAqZnMgPSAmKHN0LT51LmZpbHRlcmVkKTsKKwlzaXplX3QgZmlsbGVkID0gMDsKKworCXdoaWxlIChzeikgeworCQkvKiBkbyB3ZSBhbHJlYWR5IGhhdmUgZmlsdGVyZWQgb3V0cHV0PyAqLworCQlpZiAoZnMtPm9fcHRyIDwgZnMtPm9fZW5kKSB7CisJCQlzaXplX3QgdG9fbW92ZSA9IGZzLT5vX2VuZCAtIGZzLT5vX3B0cjsKKwkJCWlmIChzeiA8IHRvX21vdmUpCisJCQkJdG9fbW92ZSA9IHN6OworCQkJbWVtY3B5KGJ1ZiArIGZpbGxlZCwgZnMtPm9idWYgKyBmcy0+b19wdHIsIHRvX21vdmUpOworCQkJZnMtPm9fcHRyICs9IHRvX21vdmU7CisJCQlzeiAtPSB0b19tb3ZlOworCQkJZmlsbGVkICs9IHRvX21vdmU7CisJCQljb250aW51ZTsKKwkJfQorCQlmcy0+b19lbmQgPSBmcy0+b19wdHIgPSAwOworCisJCS8qIGRvIHdlIGhhdmUgYW55dGhpbmcgdG8gZmVlZCB0aGUgZmlsdGVyIHdpdGg/ICovCisJCWlmIChmcy0+aV9wdHIgPCBmcy0+aV9lbmQpIHsKKwkJCXNpemVfdCB0b19mZWVkID0gZnMtPmlfZW5kIC0gZnMtPmlfcHRyOworCQkJc2l6ZV90IHRvX3JlY2VpdmUgPSBGSUxURVJfQlVGRkVSOworCQkJaWYgKHN0cmVhbV9maWx0ZXIoZnMtPmZpbHRlciwKKwkJCQkJICBmcy0+aWJ1ZiArIGZzLT5pX3B0ciwgJnRvX2ZlZWQsCisJCQkJCSAgZnMtPm9idWYsICZ0b19yZWNlaXZlKSkKKwkJCQlyZXR1cm4gLTE7CisJCQlmcy0+aV9wdHIgPSBmcy0+aV9lbmQgLSB0b19mZWVkOworCQkJZnMtPm9fZW5kID0gRklMVEVSX0JVRkZFUiAtIHRvX3JlY2VpdmU7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIHRlbGwgdGhlIGZpbHRlciB0byBkcmFpbiB1cG9uIG5vIG1vcmUgaW5wdXQgKi8KKwkJaWYgKGZzLT5pbnB1dF9maW5pc2hlZCkgeworCQkJc2l6ZV90IHRvX3JlY2VpdmUgPSBGSUxURVJfQlVGRkVSOworCQkJaWYgKHN0cmVhbV9maWx0ZXIoZnMtPmZpbHRlciwKKwkJCQkJICBOVUxMLCBOVUxMLAorCQkJCQkgIGZzLT5vYnVmLCAmdG9fcmVjZWl2ZSkpCisJCQkJcmV0dXJuIC0xOworCQkJZnMtPm9fZW5kID0gRklMVEVSX0JVRkZFUiAtIHRvX3JlY2VpdmU7CisJCQlpZiAoIWZzLT5vX2VuZCkKKwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZzLT5pX2VuZCA9IGZzLT5pX3B0ciA9IDA7CisKKwkJLyogcmVmaWxsIHRoZSBpbnB1dCBmcm9tIHRoZSB1cHN0cmVhbSAqLworCQlpZiAoIWZzLT5pbnB1dF9maW5pc2hlZCkgeworCQkJZnMtPmlfZW5kID0gcmVhZF9pc3RyZWFtKGZzLT51cHN0cmVhbSwgZnMtPmlidWYsIEZJTFRFUl9CVUZGRVIpOworCQkJaWYgKGZzLT5pX2VuZCA8IDApCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKGZzLT5pX2VuZCkKKwkJCQljb250aW51ZTsKKwkJfQorCQlmcy0+aW5wdXRfZmluaXNoZWQgPSAxOworCX0KKwlyZXR1cm4gZmlsbGVkOworfQorCitzdGF0aWMgc3RydWN0IHN0cmVhbV92dGJsIGZpbHRlcmVkX3Z0YmwgPSB7CisJY2xvc2VfaXN0cmVhbV9maWx0ZXJlZCwKKwlyZWFkX2lzdHJlYW1fZmlsdGVyZWQsCit9OworCitzdGF0aWMgc3RydWN0IGdpdF9pc3RyZWFtICphdHRhY2hfc3RyZWFtX2ZpbHRlcihzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0LAorCQkJCQkJc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlcikKK3sKKwlzdHJ1Y3QgZ2l0X2lzdHJlYW0gKmlmcyA9IHhtYWxsb2Moc2l6ZW9mKCppZnMpKTsKKwlzdHJ1Y3QgZmlsdGVyZWRfaXN0cmVhbSAqZnMgPSAmKGlmcy0+dS5maWx0ZXJlZCk7CisKKwlpZnMtPnZ0YmwgPSAmZmlsdGVyZWRfdnRibDsKKwlmcy0+dXBzdHJlYW0gPSBzdDsKKwlmcy0+ZmlsdGVyID0gZmlsdGVyOworCWZzLT5pX2VuZCA9IGZzLT5pX3B0ciA9IDA7CisJZnMtPm9fZW5kID0gZnMtPm9fcHRyID0gMDsKKwlmcy0+aW5wdXRfZmluaXNoZWQgPSAwOworCWlmcy0+c2l6ZSA9IC0xOyAvKiB1bmtub3duICovCisJcmV0dXJuIGlmczsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTG9vc2Ugb2JqZWN0IHN0cmVhbQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHJlYWRfbWV0aG9kX2RlY2wobG9vc2UpCit7CisJc2l6ZV90IHRvdGFsX3JlYWQgPSAwOworCisJc3dpdGNoIChzdC0+el9zdGF0ZSkgeworCWNhc2Ugel9kb25lOgorCQlyZXR1cm4gMDsKKwljYXNlIHpfZXJyb3I6CisJCXJldHVybiAtMTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoc3QtPnUubG9vc2UuaGRyX3VzZWQgPCBzdC0+dS5sb29zZS5oZHJfYXZhaWwpIHsKKwkJc2l6ZV90IHRvX2NvcHkgPSBzdC0+dS5sb29zZS5oZHJfYXZhaWwgLSBzdC0+dS5sb29zZS5oZHJfdXNlZDsKKwkJaWYgKHN6IDwgdG9fY29weSkKKwkJCXRvX2NvcHkgPSBzejsKKwkJbWVtY3B5KGJ1Ziwgc3QtPnUubG9vc2UuaGRyICsgc3QtPnUubG9vc2UuaGRyX3VzZWQsIHRvX2NvcHkpOworCQlzdC0+dS5sb29zZS5oZHJfdXNlZCArPSB0b19jb3B5OworCQl0b3RhbF9yZWFkICs9IHRvX2NvcHk7CisJfQorCisJd2hpbGUgKHRvdGFsX3JlYWQgPCBzeikgeworCQlpbnQgc3RhdHVzOworCisJCXN0LT56Lm5leHRfb3V0ID0gKHVuc2lnbmVkIGNoYXIgKilidWYgKyB0b3RhbF9yZWFkOworCQlzdC0+ei5hdmFpbF9vdXQgPSBzeiAtIHRvdGFsX3JlYWQ7CisJCXN0YXR1cyA9IGdpdF9pbmZsYXRlKCZzdC0+eiwgWl9GSU5JU0gpOworCisJCXRvdGFsX3JlYWQgPSBzdC0+ei5uZXh0X291dCAtICh1bnNpZ25lZCBjaGFyICopYnVmOworCisJCWlmIChzdGF0dXMgPT0gWl9TVFJFQU1fRU5EKSB7CisJCQlnaXRfaW5mbGF0ZV9lbmQoJnN0LT56KTsKKwkJCXN0LT56X3N0YXRlID0gel9kb25lOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0YXR1cyAhPSBaX09LICYmIChzdGF0dXMgIT0gWl9CVUZfRVJST1IgfHwgdG90YWxfcmVhZCA8IHN6KSkgeworCQkJZ2l0X2luZmxhdGVfZW5kKCZzdC0+eik7CisJCQlzdC0+el9zdGF0ZSA9IHpfZXJyb3I7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIHRvdGFsX3JlYWQ7Cit9CisKK3N0YXRpYyBjbG9zZV9tZXRob2RfZGVjbChsb29zZSkKK3sKKwljbG9zZV9kZWZsYXRlZF9zdHJlYW0oc3QpOworCW11bm1hcChzdC0+dS5sb29zZS5tYXBwZWQsIHN0LT51Lmxvb3NlLm1hcHNpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN0cmVhbV92dGJsIGxvb3NlX3Z0YmwgPSB7CisJY2xvc2VfaXN0cmVhbV9sb29zZSwKKwlyZWFkX2lzdHJlYW1fbG9vc2UsCit9OworCitzdGF0aWMgb3Blbl9tZXRob2RfZGVjbChsb29zZSkKK3sKKwlzdC0+dS5sb29zZS5tYXBwZWQgPSBtYXBfbG9vc2Vfb2JqZWN0KHIsIG9pZCwgJnN0LT51Lmxvb3NlLm1hcHNpemUpOworCWlmICghc3QtPnUubG9vc2UubWFwcGVkKQorCQlyZXR1cm4gLTE7CisJaWYgKCh1bnBhY2tfbG9vc2VfaGVhZGVyKCZzdC0+eiwKKwkJCQkgc3QtPnUubG9vc2UubWFwcGVkLAorCQkJCSBzdC0+dS5sb29zZS5tYXBzaXplLAorCQkJCSBzdC0+dS5sb29zZS5oZHIsCisJCQkJIHNpemVvZihzdC0+dS5sb29zZS5oZHIpKSA8IDApIHx8CisJICAgIChwYXJzZV9sb29zZV9oZWFkZXIoc3QtPnUubG9vc2UuaGRyLCAmc3QtPnNpemUpIDwgMCkpIHsKKwkJZ2l0X2luZmxhdGVfZW5kKCZzdC0+eik7CisJCW11bm1hcChzdC0+dS5sb29zZS5tYXBwZWQsIHN0LT51Lmxvb3NlLm1hcHNpemUpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3QtPnUubG9vc2UuaGRyX3VzZWQgPSBzdHJsZW4oc3QtPnUubG9vc2UuaGRyKSArIDE7CisJc3QtPnUubG9vc2UuaGRyX2F2YWlsID0gc3QtPnoudG90YWxfb3V0OworCXN0LT56X3N0YXRlID0gel91c2VkOworCisJc3QtPnZ0YmwgPSAmbG9vc2VfdnRibDsKKwlyZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBOb24tZGVsdGEgcGFja2VkIG9iamVjdCBzdHJlYW0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyByZWFkX21ldGhvZF9kZWNsKHBhY2tfbm9uX2RlbHRhKQoreworCXNpemVfdCB0b3RhbF9yZWFkID0gMDsKKworCXN3aXRjaCAoc3QtPnpfc3RhdGUpIHsKKwljYXNlIHpfdW51c2VkOgorCQltZW1zZXQoJnN0LT56LCAwLCBzaXplb2Yoc3QtPnopKTsKKwkJZ2l0X2luZmxhdGVfaW5pdCgmc3QtPnopOworCQlzdC0+el9zdGF0ZSA9IHpfdXNlZDsKKwkJYnJlYWs7CisJY2FzZSB6X2RvbmU6CisJCXJldHVybiAwOworCWNhc2Ugel9lcnJvcjoKKwkJcmV0dXJuIC0xOworCWNhc2Ugel91c2VkOgorCQlicmVhazsKKwl9CisKKwl3aGlsZSAodG90YWxfcmVhZCA8IHN6KSB7CisJCWludCBzdGF0dXM7CisJCXN0cnVjdCBwYWNrX3dpbmRvdyAqd2luZG93ID0gTlVMTDsKKwkJdW5zaWduZWQgY2hhciAqbWFwcGVkOworCisJCW1hcHBlZCA9IHVzZV9wYWNrKHN0LT51LmluX3BhY2sucGFjaywgJndpbmRvdywKKwkJCQkgIHN0LT51LmluX3BhY2sucG9zLCAmc3QtPnouYXZhaWxfaW4pOworCisJCXN0LT56Lm5leHRfb3V0ID0gKHVuc2lnbmVkIGNoYXIgKilidWYgKyB0b3RhbF9yZWFkOworCQlzdC0+ei5hdmFpbF9vdXQgPSBzeiAtIHRvdGFsX3JlYWQ7CisJCXN0LT56Lm5leHRfaW4gPSBtYXBwZWQ7CisJCXN0YXR1cyA9IGdpdF9pbmZsYXRlKCZzdC0+eiwgWl9GSU5JU0gpOworCisJCXN0LT51LmluX3BhY2sucG9zICs9IHN0LT56Lm5leHRfaW4gLSBtYXBwZWQ7CisJCXRvdGFsX3JlYWQgPSBzdC0+ei5uZXh0X291dCAtICh1bnNpZ25lZCBjaGFyICopYnVmOworCQl1bnVzZV9wYWNrKCZ3aW5kb3cpOworCisJCWlmIChzdGF0dXMgPT0gWl9TVFJFQU1fRU5EKSB7CisJCQlnaXRfaW5mbGF0ZV9lbmQoJnN0LT56KTsKKwkJCXN0LT56X3N0YXRlID0gel9kb25lOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBVbmxpa2UgdGhlIGxvb3NlIG9iamVjdCBjYXNlLCB3ZSBkbyBub3QgaGF2ZSB0byB3b3JyeSBoZXJlCisJCSAqIGFib3V0IHJ1bm5pbmcgb3V0IG9mIGlucHV0IGJ5dGVzIGFuZCBzcGlubmluZyBpbmZpbml0ZWx5LiBJZgorCQkgKiB3ZSBnZXQgWl9CVUZfRVJST1IgZHVlIHRvIHRvbyBmZXcgaW5wdXQgYnl0ZXMsIHRoZW4gd2UnbGwKKwkJICogcmVwbGVuaXNoIHRoZW0gaW4gdGhlIG5leHQgdXNlX3BhY2soKSBjYWxsIHdoZW4gd2UgbG9vcC4gSWYKKwkJICogd2UgdHJ1bHkgaGl0IHRoZSBlbmQgb2YgdGhlIHBhY2sgKGkuZS4sIGJlY2F1c2UgaXQncyBjb3JydXB0CisJCSAqIG9yIHRydW5jYXRlZCksIHRoZW4gdXNlX3BhY2soKSBjYXRjaGVzIHRoYXQgYW5kIHdpbGwgZGllKCkuCisJCSAqLworCQlpZiAoc3RhdHVzICE9IFpfT0sgJiYgc3RhdHVzICE9IFpfQlVGX0VSUk9SKSB7CisJCQlnaXRfaW5mbGF0ZV9lbmQoJnN0LT56KTsKKwkJCXN0LT56X3N0YXRlID0gel9lcnJvcjsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gdG90YWxfcmVhZDsKK30KKworc3RhdGljIGNsb3NlX21ldGhvZF9kZWNsKHBhY2tfbm9uX2RlbHRhKQoreworCWNsb3NlX2RlZmxhdGVkX3N0cmVhbShzdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX3Z0YmwgcGFja19ub25fZGVsdGFfdnRibCA9IHsKKwljbG9zZV9pc3RyZWFtX3BhY2tfbm9uX2RlbHRhLAorCXJlYWRfaXN0cmVhbV9wYWNrX25vbl9kZWx0YSwKK307CisKK3N0YXRpYyBvcGVuX21ldGhvZF9kZWNsKHBhY2tfbm9uX2RlbHRhKQoreworCXN0cnVjdCBwYWNrX3dpbmRvdyAqd2luZG93OworCWVudW0gb2JqZWN0X3R5cGUgaW5fcGFja190eXBlOworCisJc3QtPnUuaW5fcGFjay5wYWNrID0gb2ktPnUucGFja2VkLnBhY2s7CisJc3QtPnUuaW5fcGFjay5wb3MgPSBvaS0+dS5wYWNrZWQub2Zmc2V0OworCXdpbmRvdyA9IE5VTEw7CisKKwlpbl9wYWNrX3R5cGUgPSB1bnBhY2tfb2JqZWN0X2hlYWRlcihzdC0+dS5pbl9wYWNrLnBhY2ssCisJCQkJCSAgICAmd2luZG93LAorCQkJCQkgICAgJnN0LT51LmluX3BhY2sucG9zLAorCQkJCQkgICAgJnN0LT5zaXplKTsKKwl1bnVzZV9wYWNrKCZ3aW5kb3cpOworCXN3aXRjaCAoaW5fcGFja190eXBlKSB7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOyAvKiB3ZSBkbyBub3QgZG8gZGVsdGFzIGZvciBub3cgKi8KKwljYXNlIE9CSl9DT01NSVQ6CisJY2FzZSBPQkpfVFJFRToKKwljYXNlIE9CSl9CTE9COgorCWNhc2UgT0JKX1RBRzoKKwkJYnJlYWs7CisJfQorCXN0LT56X3N0YXRlID0gel91bnVzZWQ7CisJc3QtPnZ0YmwgPSAmcGFja19ub25fZGVsdGFfdnRibDsKKwlyZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBJbi1jb3JlIHN0cmVhbQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGNsb3NlX21ldGhvZF9kZWNsKGluY29yZSkKK3sKKwlmcmVlKHN0LT51LmluY29yZS5idWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgcmVhZF9tZXRob2RfZGVjbChpbmNvcmUpCit7CisJc2l6ZV90IHJlYWRfc2l6ZSA9IHN6OworCXNpemVfdCByZW1haW5kZXIgPSBzdC0+c2l6ZSAtIHN0LT51LmluY29yZS5yZWFkX3B0cjsKKworCWlmIChyZW1haW5kZXIgPD0gcmVhZF9zaXplKQorCQlyZWFkX3NpemUgPSByZW1haW5kZXI7CisJaWYgKHJlYWRfc2l6ZSkgeworCQltZW1jcHkoYnVmLCBzdC0+dS5pbmNvcmUuYnVmICsgc3QtPnUuaW5jb3JlLnJlYWRfcHRyLCByZWFkX3NpemUpOworCQlzdC0+dS5pbmNvcmUucmVhZF9wdHIgKz0gcmVhZF9zaXplOworCX0KKwlyZXR1cm4gcmVhZF9zaXplOworfQorCitzdGF0aWMgc3RydWN0IHN0cmVhbV92dGJsIGluY29yZV92dGJsID0geworCWNsb3NlX2lzdHJlYW1faW5jb3JlLAorCXJlYWRfaXN0cmVhbV9pbmNvcmUsCit9OworCitzdGF0aWMgb3Blbl9tZXRob2RfZGVjbChpbmNvcmUpCit7CisJc3QtPnUuaW5jb3JlLmJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGVfZXh0ZW5kZWQociwgb2lkLCB0eXBlLCAmc3QtPnNpemUsIDApOworCXN0LT51LmluY29yZS5yZWFkX3B0ciA9IDA7CisJc3QtPnZ0YmwgPSAmaW5jb3JlX3Z0Ymw7CisKKwlyZXR1cm4gc3QtPnUuaW5jb3JlLmJ1ZiA/IDAgOiAtMTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVXNlcnMgb2Ygc3RyZWFtaW5nIGludGVyZmFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBzdHJlYW1fYmxvYl90b19mZChpbnQgZmQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciwKKwkJICAgICAgaW50IGNhbl9zZWVrKQoreworCXN0cnVjdCBnaXRfaXN0cmVhbSAqc3Q7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgc3o7CisJc3NpemVfdCBrZXB0ID0gMDsKKwlpbnQgcmVzdWx0ID0gLTE7CisKKwlzdCA9IG9wZW5faXN0cmVhbSh0aGVfcmVwb3NpdG9yeSwgb2lkLCAmdHlwZSwgJnN6LCBmaWx0ZXIpOworCWlmICghc3QpIHsKKwkJaWYgKGZpbHRlcikKKwkJCWZyZWVfc3RyZWFtX2ZpbHRlcihmaWx0ZXIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlpZiAodHlwZSAhPSBPQkpfQkxPQikKKwkJZ290byBjbG9zZV9hbmRfZXhpdDsKKwlmb3IgKDs7KSB7CisJCWNoYXIgYnVmWzEwMjQgKiAxNl07CisJCXNzaXplX3Qgd3JvdGUsIGhvbGV0bzsKKwkJc3NpemVfdCByZWFkbGVuID0gcmVhZF9pc3RyZWFtKHN0LCBidWYsIHNpemVvZihidWYpKTsKKworCQlpZiAocmVhZGxlbiA8IDApCisJCQlnb3RvIGNsb3NlX2FuZF9leGl0OworCQlpZiAoIXJlYWRsZW4pCisJCQlicmVhazsKKwkJaWYgKGNhbl9zZWVrICYmIHNpemVvZihidWYpID09IHJlYWRsZW4pIHsKKwkJCWZvciAoaG9sZXRvID0gMDsgaG9sZXRvIDwgcmVhZGxlbjsgaG9sZXRvKyspCisJCQkJaWYgKGJ1Zltob2xldG9dKQorCQkJCQlicmVhazsKKwkJCWlmIChyZWFkbGVuID09IGhvbGV0bykgeworCQkJCWtlcHQgKz0gaG9sZXRvOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaWYgKGtlcHQgJiYgbHNlZWsoZmQsIGtlcHQsIFNFRUtfQ1VSKSA9PSAob2ZmX3QpIC0xKQorCQkJZ290byBjbG9zZV9hbmRfZXhpdDsKKwkJZWxzZQorCQkJa2VwdCA9IDA7CisJCXdyb3RlID0gd3JpdGVfaW5fZnVsbChmZCwgYnVmLCByZWFkbGVuKTsKKworCQlpZiAod3JvdGUgPCAwKQorCQkJZ290byBjbG9zZV9hbmRfZXhpdDsKKwl9CisJaWYgKGtlcHQgJiYgKGxzZWVrKGZkLCBrZXB0IC0gMSwgU0VFS19DVVIpID09IChvZmZfdCkgLTEgfHwKKwkJICAgICB4d3JpdGUoZmQsICIiLCAxKSAhPSAxKSkKKwkJZ290byBjbG9zZV9hbmRfZXhpdDsKKwlyZXN1bHQgPSAwOworCisgY2xvc2VfYW5kX2V4aXQ6CisJY2xvc2VfaXN0cmVhbShzdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL3N0cmVhbWluZy5oIGIvc3RyZWFtaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0ZTZhYwotLS0gL2Rldi9udWxsCisrKyBiL3N0cmVhbWluZy5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuCisgKi8KKyNpZm5kZWYgU1RSRUFNSU5HX0gKKyNkZWZpbmUgU1RSRUFNSU5HX0ggMQorI2luY2x1ZGUgImNhY2hlLmgiCisKKy8qIG9wYXF1ZSAqLworc3RydWN0IGdpdF9pc3RyZWFtOworCitzdHJ1Y3QgZ2l0X2lzdHJlYW0gKm9wZW5faXN0cmVhbShzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosCisJCQkJIGVudW0gb2JqZWN0X3R5cGUgKiwgdW5zaWduZWQgbG9uZyAqLAorCQkJCSBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqKTsKK2ludCBjbG9zZV9pc3RyZWFtKHN0cnVjdCBnaXRfaXN0cmVhbSAqKTsKK3NzaXplX3QgcmVhZF9pc3RyZWFtKHN0cnVjdCBnaXRfaXN0cmVhbSAqLCB2b2lkICosIHNpemVfdCk7CisKK2ludCBzdHJlYW1fYmxvYl90b19mZChpbnQgZmQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiwgc3RydWN0IHN0cmVhbV9maWx0ZXIgKiwgaW50IGNhbl9zZWVrKTsKKworI2VuZGlmIC8qIFNUUkVBTUlOR19IICovCmRpZmYgLS1naXQgYS9zdHJpbmctbGlzdC5jIGIvc3RyaW5nLWxpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTE3OTU1Ci0tLSAvZGV2L251bGwKKysrIGIvc3RyaW5nLWxpc3QuYwpAQCAtMCwwICsxLDMyMSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKwordm9pZCBzdHJpbmdfbGlzdF9pbml0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgaW50IHN0cmR1cF9zdHJpbmdzKQoreworCW1lbXNldChsaXN0LCAwLCBzaXplb2YoKmxpc3QpKTsKKwlsaXN0LT5zdHJkdXBfc3RyaW5ncyA9IHN0cmR1cF9zdHJpbmdzOworfQorCisvKiBpZiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgcG9pbnQgdG8gdGhlIGluZGV4IHdoZXJlIHRoZSBlbnRyeSBjb3VsZCBiZQorICogaW5zZXJ0ZWQgKi8KK3N0YXRpYyBpbnQgZ2V0X2VudHJ5X2luZGV4KGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nLAorCQlpbnQgKmV4YWN0X21hdGNoKQoreworCWludCBsZWZ0ID0gLTEsIHJpZ2h0ID0gbGlzdC0+bnI7CisJY29tcGFyZV9zdHJpbmdzX2ZuIGNtcCA9IGxpc3QtPmNtcCA/IGxpc3QtPmNtcCA6IHN0cmNtcDsKKworCXdoaWxlIChsZWZ0ICsgMSA8IHJpZ2h0KSB7CisJCWludCBtaWRkbGUgPSBsZWZ0ICsgKHJpZ2h0IC0gbGVmdCkgLyAyOworCQlpbnQgY29tcGFyZSA9IGNtcChzdHJpbmcsIGxpc3QtPml0ZW1zW21pZGRsZV0uc3RyaW5nKTsKKwkJaWYgKGNvbXBhcmUgPCAwKQorCQkJcmlnaHQgPSBtaWRkbGU7CisJCWVsc2UgaWYgKGNvbXBhcmUgPiAwKQorCQkJbGVmdCA9IG1pZGRsZTsKKwkJZWxzZSB7CisJCQkqZXhhY3RfbWF0Y2ggPSAxOworCQkJcmV0dXJuIG1pZGRsZTsKKwkJfQorCX0KKworCSpleGFjdF9tYXRjaCA9IDA7CisJcmV0dXJuIHJpZ2h0OworfQorCisvKiByZXR1cm5zIC0xLWluZGV4IGlmIGFscmVhZHkgZXhpc3RzICovCitzdGF0aWMgaW50IGFkZF9lbnRyeShpbnQgaW5zZXJ0X2F0LCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlpbnQgZXhhY3RfbWF0Y2ggPSAwOworCWludCBpbmRleCA9IGluc2VydF9hdCAhPSAtMSA/IGluc2VydF9hdCA6IGdldF9lbnRyeV9pbmRleChsaXN0LCBzdHJpbmcsICZleGFjdF9tYXRjaCk7CisKKwlpZiAoZXhhY3RfbWF0Y2gpCisJCXJldHVybiAtMSAtIGluZGV4OworCisJQUxMT0NfR1JPVyhsaXN0LT5pdGVtcywgbGlzdC0+bnIrMSwgbGlzdC0+YWxsb2MpOworCWlmIChpbmRleCA8IGxpc3QtPm5yKQorCQlNT1ZFX0FSUkFZKGxpc3QtPml0ZW1zICsgaW5kZXggKyAxLCBsaXN0LT5pdGVtcyArIGluZGV4LAorCQkJICAgbGlzdC0+bnIgLSBpbmRleCk7CisJbGlzdC0+aXRlbXNbaW5kZXhdLnN0cmluZyA9IGxpc3QtPnN0cmR1cF9zdHJpbmdzID8KKwkJeHN0cmR1cChzdHJpbmcpIDogKGNoYXIgKilzdHJpbmc7CisJbGlzdC0+aXRlbXNbaW5kZXhdLnV0aWwgPSBOVUxMOworCWxpc3QtPm5yKys7CisKKwlyZXR1cm4gaW5kZXg7Cit9CisKK3N0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9pbnNlcnQoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJaW50IGluZGV4ID0gYWRkX2VudHJ5KC0xLCBsaXN0LCBzdHJpbmcpOworCisJaWYgKGluZGV4IDwgMCkKKwkJaW5kZXggPSAtMSAtIGluZGV4OworCisJcmV0dXJuIGxpc3QtPml0ZW1zICsgaW5kZXg7Cit9CisKK3ZvaWQgc3RyaW5nX2xpc3RfcmVtb3ZlKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nLAorCQkJaW50IGZyZWVfdXRpbCkKK3sKKwlpbnQgZXhhY3RfbWF0Y2g7CisJaW50IGkgPSBnZXRfZW50cnlfaW5kZXgobGlzdCwgc3RyaW5nLCAmZXhhY3RfbWF0Y2gpOworCisJaWYgKGV4YWN0X21hdGNoKSB7CisJCWlmIChsaXN0LT5zdHJkdXBfc3RyaW5ncykKKwkJCWZyZWUobGlzdC0+aXRlbXNbaV0uc3RyaW5nKTsKKwkJaWYgKGZyZWVfdXRpbCkKKwkJCWZyZWUobGlzdC0+aXRlbXNbaV0udXRpbCk7CisKKwkJbGlzdC0+bnItLTsKKwkJTU9WRV9BUlJBWShsaXN0LT5pdGVtcyArIGksIGxpc3QtPml0ZW1zICsgaSArIDEsIGxpc3QtPm5yIC0gaSk7CisJfQorfQorCitpbnQgc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlpbnQgZXhhY3RfbWF0Y2g7CisJZ2V0X2VudHJ5X2luZGV4KGxpc3QsIHN0cmluZywgJmV4YWN0X21hdGNoKTsKKwlyZXR1cm4gZXhhY3RfbWF0Y2g7Cit9CisKK2ludCBzdHJpbmdfbGlzdF9maW5kX2luc2VydF9pbmRleChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJCQkgIGludCBuZWdhdGl2ZV9leGlzdGluZ19pbmRleCkKK3sKKwlpbnQgZXhhY3RfbWF0Y2g7CisJaW50IGluZGV4ID0gZ2V0X2VudHJ5X2luZGV4KGxpc3QsIHN0cmluZywgJmV4YWN0X21hdGNoKTsKKwlpZiAoZXhhY3RfbWF0Y2gpCisJCWluZGV4ID0gLTEgLSAobmVnYXRpdmVfZXhpc3RpbmdfaW5kZXggPyBpbmRleCA6IDApOworCXJldHVybiBpbmRleDsKK30KKworc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnN0cmluZ19saXN0X2xvb2t1cChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlpbnQgZXhhY3RfbWF0Y2gsIGkgPSBnZXRfZW50cnlfaW5kZXgobGlzdCwgc3RyaW5nLCAmZXhhY3RfbWF0Y2gpOworCWlmICghZXhhY3RfbWF0Y2gpCisJCXJldHVybiBOVUxMOworCXJldHVybiBsaXN0LT5pdGVtcyArIGk7Cit9CisKK3ZvaWQgc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBpbnQgZnJlZV91dGlsKQoreworCWlmIChsaXN0LT5uciA+IDEpIHsKKwkJaW50IHNyYywgZHN0OworCQljb21wYXJlX3N0cmluZ3NfZm4gY21wID0gbGlzdC0+Y21wID8gbGlzdC0+Y21wIDogc3RyY21wOworCQlmb3IgKHNyYyA9IGRzdCA9IDE7IHNyYyA8IGxpc3QtPm5yOyBzcmMrKykgeworCQkJaWYgKCFjbXAobGlzdC0+aXRlbXNbZHN0IC0gMV0uc3RyaW5nLCBsaXN0LT5pdGVtc1tzcmNdLnN0cmluZykpIHsKKwkJCQlpZiAobGlzdC0+c3RyZHVwX3N0cmluZ3MpCisJCQkJCWZyZWUobGlzdC0+aXRlbXNbc3JjXS5zdHJpbmcpOworCQkJCWlmIChmcmVlX3V0aWwpCisJCQkJCWZyZWUobGlzdC0+aXRlbXNbc3JjXS51dGlsKTsKKwkJCX0gZWxzZQorCQkJCWxpc3QtPml0ZW1zW2RzdCsrXSA9IGxpc3QtPml0ZW1zW3NyY107CisJCX0KKwkJbGlzdC0+bnIgPSBkc3Q7CisJfQorfQorCitpbnQgZm9yX2VhY2hfc3RyaW5nX2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJIHN0cmluZ19saXN0X2VhY2hfZnVuY190IGZuLCB2b2lkICpjYl9kYXRhKQoreworCWludCBpLCByZXQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQlpZiAoKHJldCA9IGZuKCZsaXN0LT5pdGVtc1tpXSwgY2JfZGF0YSkpKQorCQkJYnJlYWs7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBmaWx0ZXJfc3RyaW5nX2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBpbnQgZnJlZV91dGlsLAorCQkJc3RyaW5nX2xpc3RfZWFjaF9mdW5jX3Qgd2FudCwgdm9pZCAqY2JfZGF0YSkKK3sKKwlpbnQgc3JjLCBkc3QgPSAwOworCWZvciAoc3JjID0gMDsgc3JjIDwgbGlzdC0+bnI7IHNyYysrKSB7CisJCWlmICh3YW50KCZsaXN0LT5pdGVtc1tzcmNdLCBjYl9kYXRhKSkgeworCQkJbGlzdC0+aXRlbXNbZHN0KytdID0gbGlzdC0+aXRlbXNbc3JjXTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsaXN0LT5zdHJkdXBfc3RyaW5ncykKKwkJCQlmcmVlKGxpc3QtPml0ZW1zW3NyY10uc3RyaW5nKTsKKwkJCWlmIChmcmVlX3V0aWwpCisJCQkJZnJlZShsaXN0LT5pdGVtc1tzcmNdLnV0aWwpOworCQl9CisJfQorCWxpc3QtPm5yID0gZHN0OworfQorCitzdGF0aWMgaW50IGl0ZW1faXNfbm90X2VtcHR5KHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICp1bnVzZWQpCit7CisJcmV0dXJuICppdGVtLT5zdHJpbmcgIT0gJ1wwJzsKK30KKwordm9pZCBzdHJpbmdfbGlzdF9yZW1vdmVfZW1wdHlfaXRlbXMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBpbnQgZnJlZV91dGlsKQoreworCWZpbHRlcl9zdHJpbmdfbGlzdChsaXN0LCBmcmVlX3V0aWwsIGl0ZW1faXNfbm90X2VtcHR5LCBOVUxMKTsKK30KKwordm9pZCBzdHJpbmdfbGlzdF9jbGVhcihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGludCBmcmVlX3V0aWwpCit7CisJaWYgKGxpc3QtPml0ZW1zKSB7CisJCWludCBpOworCQlpZiAobGlzdC0+c3RyZHVwX3N0cmluZ3MpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQkJCWZyZWUobGlzdC0+aXRlbXNbaV0uc3RyaW5nKTsKKwkJfQorCQlpZiAoZnJlZV91dGlsKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykKKwkJCQlmcmVlKGxpc3QtPml0ZW1zW2ldLnV0aWwpOworCQl9CisJCWZyZWUobGlzdC0+aXRlbXMpOworCX0KKwlsaXN0LT5pdGVtcyA9IE5VTEw7CisJbGlzdC0+bnIgPSBsaXN0LT5hbGxvYyA9IDA7Cit9CisKK3ZvaWQgc3RyaW5nX2xpc3RfY2xlYXJfZnVuYyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIHN0cmluZ19saXN0X2NsZWFyX2Z1bmNfdCBjbGVhcmZ1bmMpCit7CisJaWYgKGxpc3QtPml0ZW1zKSB7CisJCWludCBpOworCQlpZiAoY2xlYXJmdW5jKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykKKwkJCQljbGVhcmZ1bmMobGlzdC0+aXRlbXNbaV0udXRpbCwgbGlzdC0+aXRlbXNbaV0uc3RyaW5nKTsKKwkJfQorCQlpZiAobGlzdC0+c3RyZHVwX3N0cmluZ3MpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQkJCWZyZWUobGlzdC0+aXRlbXNbaV0uc3RyaW5nKTsKKwkJfQorCQlmcmVlKGxpc3QtPml0ZW1zKTsKKwl9CisJbGlzdC0+aXRlbXMgPSBOVUxMOworCWxpc3QtPm5yID0gbGlzdC0+YWxsb2MgPSAwOworfQorCitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCQkJCSAgY2hhciAqc3RyaW5nKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpyZXR2YWw7CisJQUxMT0NfR1JPVyhsaXN0LT5pdGVtcywgbGlzdC0+bnIgKyAxLCBsaXN0LT5hbGxvYyk7CisJcmV0dmFsID0gJmxpc3QtPml0ZW1zW2xpc3QtPm5yKytdOworCXJldHZhbC0+c3RyaW5nID0gc3RyaW5nOworCXJldHZhbC0+dXRpbCA9IE5VTEw7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnN0cmluZ19saXN0X2FwcGVuZChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsCisJCQkJCSAgICBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJcmV0dXJuIHN0cmluZ19saXN0X2FwcGVuZF9ub2R1cCgKKwkJCWxpc3QsCisJCQlsaXN0LT5zdHJkdXBfc3RyaW5ncyA/IHhzdHJkdXAoc3RyaW5nKSA6IChjaGFyICopc3RyaW5nKTsKK30KKworLyoKKyAqIEVuY2Fwc3VsYXRlIHRoZSBjb21wYXJlIGZ1bmN0aW9uIHBvaW50ZXIgYmVjYXVzZSBJU08gQzk5IGZvcmJpZHMKKyAqIGNhc3RpbmcgZnJvbSB2b2lkICogdG8gYSBmdW5jdGlvbiBwb2ludGVyIGFuZCB2aWNlIHZlcnNhLgorICovCitzdHJ1Y3Qgc3RyaW5nX2xpc3Rfc29ydF9jdHgKK3sKKwljb21wYXJlX3N0cmluZ3NfZm4gY21wOworfTsKKworc3RhdGljIGludCBjbXBfaXRlbXMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqY3R4KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9zb3J0X2N0eCAqc29ydF9jdHggPSBjdHg7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKm9uZSA9IGE7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnR3byA9IGI7CisJcmV0dXJuIHNvcnRfY3R4LT5jbXAob25lLT5zdHJpbmcsIHR3by0+c3RyaW5nKTsKK30KKwordm9pZCBzdHJpbmdfbGlzdF9zb3J0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Rfc29ydF9jdHggc29ydF9jdHggPSB7bGlzdC0+Y21wID8gbGlzdC0+Y21wIDogc3RyY21wfTsKKworCVFTT1JUX1MobGlzdC0+aXRlbXMsIGxpc3QtPm5yLCBjbXBfaXRlbXMsICZzb3J0X2N0eCk7Cit9CisKK3N0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICp1bnNvcnRlZF9zdHJpbmdfbGlzdF9sb29rdXAoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJCQkJICAgICBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJY29tcGFyZV9zdHJpbmdzX2ZuIGNtcCA9IGxpc3QtPmNtcCA/IGxpc3QtPmNtcCA6IHN0cmNtcDsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgbGlzdCkKKwkJaWYgKCFjbXAoc3RyaW5nLCBpdGVtLT5zdHJpbmcpKQorCQkJcmV0dXJuIGl0ZW07CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCB1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCQkgICAgY29uc3QgY2hhciAqc3RyaW5nKQoreworCXJldHVybiB1bnNvcnRlZF9zdHJpbmdfbGlzdF9sb29rdXAobGlzdCwgc3RyaW5nKSAhPSBOVUxMOworfQorCit2b2lkIHVuc29ydGVkX3N0cmluZ19saXN0X2RlbGV0ZV9pdGVtKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgaW50IGksIGludCBmcmVlX3V0aWwpCit7CisJaWYgKGxpc3QtPnN0cmR1cF9zdHJpbmdzKQorCQlmcmVlKGxpc3QtPml0ZW1zW2ldLnN0cmluZyk7CisJaWYgKGZyZWVfdXRpbCkKKwkJZnJlZShsaXN0LT5pdGVtc1tpXS51dGlsKTsKKwlsaXN0LT5pdGVtc1tpXSA9IGxpc3QtPml0ZW1zW2xpc3QtPm5yLTFdOworCWxpc3QtPm5yLS07Cit9CisKK2ludCBzdHJpbmdfbGlzdF9zcGxpdChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJICAgICAgaW50IGRlbGltLCBpbnQgbWF4c3BsaXQpCit7CisJaW50IGNvdW50ID0gMDsKKwljb25zdCBjaGFyICpwID0gc3RyaW5nLCAqZW5kOworCisJaWYgKCFsaXN0LT5zdHJkdXBfc3RyaW5ncykKKwkJZGllKCJpbnRlcm5hbCBlcnJvciBpbiBzdHJpbmdfbGlzdF9zcGxpdCgpOiAiCisJCSAgICAibGlzdC0+c3RyZHVwX3N0cmluZ3MgbXVzdCBiZSBzZXQiKTsKKwlmb3IgKDs7KSB7CisJCWNvdW50Kys7CisJCWlmIChtYXhzcGxpdCA+PSAwICYmIGNvdW50ID4gbWF4c3BsaXQpIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZChsaXN0LCBwKTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCQllbmQgPSBzdHJjaHIocCwgZGVsaW0pOworCQlpZiAoZW5kKSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmRfbm9kdXAobGlzdCwgeG1lbWR1cHoocCwgZW5kIC0gcCkpOworCQkJcCA9IGVuZCArIDE7CisJCX0gZWxzZSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgcCk7CisJCQlyZXR1cm4gY291bnQ7CisJCX0KKwl9Cit9CisKK2ludCBzdHJpbmdfbGlzdF9zcGxpdF9pbl9wbGFjZShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNoYXIgKnN0cmluZywKKwkJCSAgICAgICBpbnQgZGVsaW0sIGludCBtYXhzcGxpdCkKK3sKKwlpbnQgY291bnQgPSAwOworCWNoYXIgKnAgPSBzdHJpbmcsICplbmQ7CisKKwlpZiAobGlzdC0+c3RyZHVwX3N0cmluZ3MpCisJCWRpZSgiaW50ZXJuYWwgZXJyb3IgaW4gc3RyaW5nX2xpc3Rfc3BsaXRfaW5fcGxhY2UoKTogIgorCQkgICAgImxpc3QtPnN0cmR1cF9zdHJpbmdzIG11c3Qgbm90IGJlIHNldCIpOworCWZvciAoOzspIHsKKwkJY291bnQrKzsKKwkJaWYgKG1heHNwbGl0ID49IDAgJiYgY291bnQgPiBtYXhzcGxpdCkgeworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHApOworCQkJcmV0dXJuIGNvdW50OworCQl9CisJCWVuZCA9IHN0cmNocihwLCBkZWxpbSk7CisJCWlmIChlbmQpIHsKKwkJCSplbmQgPSAnXDAnOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHApOworCQkJcCA9IGVuZCArIDE7CisJCX0gZWxzZSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgcCk7CisJCQlyZXR1cm4gY291bnQ7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9zdHJpbmctbGlzdC5oIGIvc3RyaW5nLWxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzVkMjc0Ci0tLSAvZGV2L251bGwKKysrIGIvc3RyaW5nLWxpc3QuaApAQCAtMCwwICsxLDI2NiBAQAorI2lmbmRlZiBTVFJJTkdfTElTVF9ICisjZGVmaW5lIFNUUklOR19MSVNUX0gKKworLyoqCisgKiBUaGUgc3RyaW5nX2xpc3QgQVBJIG9mZmVycyBhIGRhdGEgc3RydWN0dXJlIGFuZCBmdW5jdGlvbnMgdG8gaGFuZGxlCisgKiBzb3J0ZWQgYW5kIHVuc29ydGVkIGFycmF5cyBvZiBzdHJpbmdzLiAgQSAic29ydGVkIiBsaXN0IGlzIG9uZSB3aG9zZQorICogZW50cmllcyBhcmUgc29ydGVkIGJ5IHN0cmluZyB2YWx1ZSBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkIGJ5IHRoZSBgY21wYAorICogbWVtYmVyIChgc3RyY21wKClgIGJ5IGRlZmF1bHQpLgorICoKKyAqIFRoZSBjYWxsZXI6CisgKgorICogLiBBbGxvY2F0ZXMgYW5kIGNsZWFycyBhIGBzdHJ1Y3Qgc3RyaW5nX2xpc3RgIHZhcmlhYmxlLgorICoKKyAqIC4gSW5pdGlhbGl6ZXMgdGhlIG1lbWJlcnMuIFlvdSBtaWdodCB3YW50IHRvIHNldCB0aGUgZmxhZyBgc3RyZHVwX3N0cmluZ3NgCisgKiAgIGlmIHRoZSBzdHJpbmdzIHNob3VsZCBiZSBzdHJkdXAoKWVkLiBGb3IgZXhhbXBsZSwgdGhpcyBpcyBuZWNlc3NhcnkKKyAqICAgd2hlbiB5b3UgYWRkIHNvbWV0aGluZyBsaWtlIGdpdF9wYXRoKCIuLi4iKSwgc2luY2UgdGhhdCBmdW5jdGlvbiByZXR1cm5zCisgKiAgIGEgc3RhdGljIGJ1ZmZlciB0aGF0IHdpbGwgY2hhbmdlIHdpdGggdGhlIG5leHQgY2FsbCB0byBnaXRfcGF0aCgpLgorICoKKyAqIElmIHlvdSBuZWVkIHNvbWV0aGluZyBhZHZhbmNlZCwgeW91IGNhbiBtYW51YWxseSBtYWxsb2MoKSB0aGUgYGl0ZW1zYAorICogbWVtYmVyICh5b3UgbmVlZCB0aGlzIGlmIHlvdSBhZGQgdGhpbmdzIGxhdGVyKSBhbmQgeW91IHNob3VsZCBzZXQgdGhlCisgKiBgbnJgIGFuZCBgYWxsb2NgIG1lbWJlcnMgaW4gdGhhdCBjYXNlLCB0b28uCisgKgorICogLiBBZGRzIG5ldyBpdGVtcyB0byB0aGUgbGlzdCwgdXNpbmcgYHN0cmluZ19saXN0X2FwcGVuZGAsCisgKiAgIGBzdHJpbmdfbGlzdF9hcHBlbmRfbm9kdXBgLCBgc3RyaW5nX2xpc3RfaW5zZXJ0YCwKKyAqICAgYHN0cmluZ19saXN0X3NwbGl0YCwgYW5kL29yIGBzdHJpbmdfbGlzdF9zcGxpdF9pbl9wbGFjZWAuCisgKgorICogLiBDYW4gY2hlY2sgaWYgYSBzdHJpbmcgaXMgaW4gdGhlIGxpc3QgdXNpbmcgYHN0cmluZ19saXN0X2hhc19zdHJpbmdgIG9yCisgKiAgIGB1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nYCBhbmQgZ2V0IGl0IGZyb20gdGhlIGxpc3QgdXNpbmcKKyAqICAgYHN0cmluZ19saXN0X2xvb2t1cGAgZm9yIHNvcnRlZCBsaXN0cy4KKyAqCisgKiAuIENhbiBzb3J0IGFuIHVuc29ydGVkIGxpc3QgdXNpbmcgYHN0cmluZ19saXN0X3NvcnRgLgorICoKKyAqIC4gQ2FuIHJlbW92ZSBkdXBsaWNhdGUgaXRlbXMgZnJvbSBhIHNvcnRlZCBsaXN0IHVzaW5nCisgKiAgIGBzdHJpbmdfbGlzdF9yZW1vdmVfZHVwbGljYXRlc2AuCisgKgorICogLiBDYW4gcmVtb3ZlIGluZGl2aWR1YWwgaXRlbXMgb2YgYW4gdW5zb3J0ZWQgbGlzdCB1c2luZworICogICBgdW5zb3J0ZWRfc3RyaW5nX2xpc3RfZGVsZXRlX2l0ZW1gLgorICoKKyAqIC4gQ2FuIHJlbW92ZSBpdGVtcyBub3QgbWF0Y2hpbmcgYSBjcml0ZXJpb24gZnJvbSBhIHNvcnRlZCBvciB1bnNvcnRlZAorICogICBsaXN0IHVzaW5nIGBmaWx0ZXJfc3RyaW5nX2xpc3RgLCBvciByZW1vdmUgZW1wdHkgc3RyaW5ncyB1c2luZworICogICBgc3RyaW5nX2xpc3RfcmVtb3ZlX2VtcHR5X2l0ZW1zYC4KKyAqCisgKiAuIEZpbmFsbHkgaXQgc2hvdWxkIGZyZWUgdGhlIGxpc3QgdXNpbmcgYHN0cmluZ19saXN0X2NsZWFyYC4KKyAqCisgKiBFeGFtcGxlOgorICoKKyAqICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisgKiAgICAgaW50IGk7CisgKgorICogICAgIHN0cmluZ19saXN0X2FwcGVuZCgmbGlzdCwgImZvbyIpOworICogICAgIHN0cmluZ19saXN0X2FwcGVuZCgmbGlzdCwgImJhciIpOworICogICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspCisgKiAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCBsaXN0Lml0ZW1zW2ldLnN0cmluZykKKyAqCisgKiBOT1RFOiBJdCBpcyBtb3JlIGVmZmljaWVudCB0byBidWlsZCBhbiB1bnNvcnRlZCBsaXN0IGFuZCBzb3J0IGl0CisgKiBhZnRlcndhcmRzLCBpbnN0ZWFkIG9mIGJ1aWxkaW5nIGEgc29ydGVkIGxpc3QgKGBPKG4gbG9nIG4pYCBpbnN0ZWFkIG9mCisgKiBgTyhuXjIpYCkuCisgKgorICogSG93ZXZlciwgaWYgeW91IHVzZSB0aGUgbGlzdCB0byBjaGVjayBpZiBhIGNlcnRhaW4gc3RyaW5nIHdhcyBhZGRlZAorICogYWxyZWFkeSwgeW91IHNob3VsZCBub3QgZG8gdGhhdCAodXNpbmcgdW5zb3J0ZWRfc3RyaW5nX2xpc3RfaGFzX3N0cmluZygpKSwKKyAqIGJlY2F1c2UgdGhlIGNvbXBsZXhpdHkgd291bGQgYmUgcXVhZHJhdGljIGFnYWluIChidXQgd2l0aCBhIHdvcnNlIGZhY3RvcikuCisgKi8KKworLyoqCisgKiBSZXByZXNlbnRzIGFuIGl0ZW0gb2YgdGhlIGxpc3QuIFRoZSBgc3RyaW5nYCBtZW1iZXIgaXMgYSBwb2ludGVyIHRvIHRoZQorICogc3RyaW5nLCBhbmQgeW91IG1heSB1c2UgdGhlIGB1dGlsYCBtZW1iZXIgZm9yIGFueSBwdXJwb3NlLCBpZiB5b3Ugd2FudC4KKyAqLworc3RydWN0IHN0cmluZ19saXN0X2l0ZW0geworCWNoYXIgKnN0cmluZzsKKwl2b2lkICp1dGlsOworfTsKKwordHlwZWRlZiBpbnQgKCpjb21wYXJlX3N0cmluZ3NfZm4pKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBSZXByZXNlbnRzIHRoZSBsaXN0IGl0c2VsZi4KKyAqCisgKiAuIFRoZSBhcnJheSBvZiBpdGVtcyBhcmUgYXZhaWxhYmxlIHZpYSB0aGUgYGl0ZW1zYCBtZW1iZXIuCisgKiAuIFRoZSBgbnJgIG1lbWJlciBjb250YWlucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHN0b3JlZCBpbiB0aGUgbGlzdC4KKyAqIC4gVGhlIGBhbGxvY2AgbWVtYmVyIGlzIHVzZWQgdG8gYXZvaWQgcmVhbGxvY2F0aW5nIGF0IGV2ZXJ5IGluc2VydGlvbi4KKyAqICAgWW91IHNob3VsZCBub3QgdGFtcGVyIHdpdGggaXQuCisgKiAuIFNldHRpbmcgdGhlIGBzdHJkdXBfc3RyaW5nc2AgbWVtYmVyIHRvIDEgd2lsbCBzdHJkdXAoKSB0aGUgc3RyaW5ncworICogICBiZWZvcmUgYWRkaW5nIHRoZW0sIHNlZSBhYm92ZS4KKyAqIC4gVGhlIGBjb21wYXJlX3N0cmluZ3NfZm5gIG1lbWJlciBpcyB1c2VkIHRvIHNwZWNpZnkgYSBjdXN0b20gY29tcGFyZQorICogICBmdW5jdGlvbiwgb3RoZXJ3aXNlIGBzdHJjbXAoKWAgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBmdW5jdGlvbi4KKyAqLworc3RydWN0IHN0cmluZ19saXN0IHsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbXM7CisJdW5zaWduZWQgaW50IG5yLCBhbGxvYzsKKwl1bnNpZ25lZCBpbnQgc3RyZHVwX3N0cmluZ3M6MTsKKwljb21wYXJlX3N0cmluZ3NfZm4gY21wOyAvKiBOVUxMIHVzZXMgc3RyY21wKCkgKi8KK307CisKKyNkZWZpbmUgU1RSSU5HX0xJU1RfSU5JVF9OT0RVUCB7IE5VTEwsIDAsIDAsIDAsIE5VTEwgfQorI2RlZmluZSBTVFJJTkdfTElTVF9JTklUX0RVUCAgIHsgTlVMTCwgMCwgMCwgMSwgTlVMTCB9CisKKy8qIEdlbmVyYWwgZnVuY3Rpb25zIHdoaWNoIHdvcmsgd2l0aCBib3RoIHNvcnRlZCBhbmQgdW5zb3J0ZWQgbGlzdHMuICovCisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgbWVtYmVycyBvZiB0aGUgc3RyaW5nX2xpc3QsIHNldCBgc3RyZHVwX3N0cmluZ3NgCisgKiBtZW1iZXIgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIHBhcmFtZXRlci4KKyAqLwordm9pZCBzdHJpbmdfbGlzdF9pbml0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgaW50IHN0cmR1cF9zdHJpbmdzKTsKKworLyoqIENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUgZm9yIGZvcl9lYWNoX3N0cmluZ19saXN0ICovCit0eXBlZGVmIGludCAoKnN0cmluZ19saXN0X2VhY2hfZnVuY190KShzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqLCB2b2lkICopOworCisvKioKKyAqIEFwcGx5IGB3YW50YCB0byBlYWNoIGl0ZW0gaW4gYGxpc3RgLCByZXRhaW5pbmcgb25seSB0aGUgb25lcyBmb3Igd2hpY2gKKyAqIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUuICBJZiBgZnJlZV91dGlsYCBpcyB0cnVlLCBjYWxsIGZyZWUoKSBvbgorICogdGhlIHV0aWwgbWVtYmVycyBvZiBhbnkgaXRlbXMgdGhhdCBoYXZlIHRvIGJlIGRlbGV0ZWQuICBQcmVzZXJ2ZQorICogdGhlIG9yZGVyIG9mIHRoZSBpdGVtcyB0aGF0IGFyZSByZXRhaW5lZC4KKyAqLwordm9pZCBmaWx0ZXJfc3RyaW5nX2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBpbnQgZnJlZV91dGlsLAorCQkJc3RyaW5nX2xpc3RfZWFjaF9mdW5jX3Qgd2FudCwgdm9pZCAqY2JfZGF0YSk7CisKKy8qKgorICogRnJlZSBhIHN0cmluZ19saXN0LiBUaGUgYHN0cmluZ2AgcG9pbnRlciBvZiB0aGUgaXRlbXMgd2lsbCBiZSBmcmVlZAorICogaW4gY2FzZSB0aGUgYHN0cmR1cF9zdHJpbmdzYCBtZW1iZXIgb2YgdGhlIHN0cmluZ19saXN0IGlzIHNldC4gVGhlCisgKiBzZWNvbmQgcGFyYW1ldGVyIGNvbnRyb2xzIGlmIHRoZSBgdXRpbGAgcG9pbnRlciBvZiB0aGUgaXRlbXMgc2hvdWxkCisgKiBiZSBmcmVlZCBvciBub3QuCisgKi8KK3ZvaWQgc3RyaW5nX2xpc3RfY2xlYXIoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBpbnQgZnJlZV91dGlsKTsKKworLyoqCisgKiBDYWxsYmFjayB0eXBlIGZvciBgc3RyaW5nX2xpc3RfY2xlYXJfZnVuY2AuICBUaGUgc3RyaW5nIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIHV0aWwgcG9pbnRlciBpcyBwYXNzZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudAorICovCit0eXBlZGVmIHZvaWQgKCpzdHJpbmdfbGlzdF9jbGVhcl9mdW5jX3QpKHZvaWQgKnAsIGNvbnN0IGNoYXIgKnN0cik7CisKKy8qKiBDYWxsIGEgY3VzdG9tIGNsZWFyIGZ1bmN0aW9uIG9uIGVhY2ggdXRpbCBwb2ludGVyICovCit2b2lkIHN0cmluZ19saXN0X2NsZWFyX2Z1bmMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBzdHJpbmdfbGlzdF9jbGVhcl9mdW5jX3QgY2xlYXJmdW5jKTsKKworLyoqCisgKiBBcHBseSBgZnVuY2AgdG8gZWFjaCBpdGVtLiBJZiBgZnVuY2AgcmV0dXJucyBub256ZXJvLCB0aGUKKyAqIGl0ZXJhdGlvbiBhYm9ydHMgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgcHJvcGFnYXRlZC4KKyAqLworaW50IGZvcl9lYWNoX3N0cmluZ19saXN0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCSBzdHJpbmdfbGlzdF9lYWNoX2Z1bmNfdCBmdW5jLCB2b2lkICpjYl9kYXRhKTsKKworLyoqIEl0ZXJhdGUgb3ZlciBlYWNoIGl0ZW0sIGFzIGEgbWFjcm8uICovCisjZGVmaW5lIGZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSxsaXN0KSAgICAgICAgICAgIFwKKwlmb3IgKGl0ZW0gPSAobGlzdCktPml0ZW1zOyAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICBpdGVtICYmIGl0ZW0gPCAobGlzdCktPml0ZW1zICsgKGxpc3QpLT5ucjsgXAorCSAgICAgKytpdGVtKQorCisvKioKKyAqIFJlbW92ZSBhbnkgZW1wdHkgc3RyaW5ncyBmcm9tIHRoZSBsaXN0LiAgSWYgZnJlZV91dGlsIGlzIHRydWUsIGNhbGwKKyAqIGZyZWUoKSBvbiB0aGUgdXRpbCBtZW1iZXJzIG9mIGFueSBpdGVtcyB0aGF0IGhhdmUgdG8gYmUgZGVsZXRlZC4KKyAqIFByZXNlcnZlIHRoZSBvcmRlciBvZiB0aGUgaXRlbXMgdGhhdCBhcmUgcmV0YWluZWQuCisgKi8KK3ZvaWQgc3RyaW5nX2xpc3RfcmVtb3ZlX2VtcHR5X2l0ZW1zKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgaW50IGZyZWVfdXRpbCk7CisKKy8qIFVzZSB0aGVzZSBmdW5jdGlvbnMgb25seSBvbiBzb3J0ZWQgbGlzdHM6ICovCisKKy8qKiBEZXRlcm1pbmUgaWYgdGhlIHN0cmluZ19saXN0IGhhcyBhIGdpdmVuIHN0cmluZyBvciBub3QuICovCitpbnQgc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZyk7CitpbnQgc3RyaW5nX2xpc3RfZmluZF9pbnNlcnRfaW5kZXgoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcsCisJCQkJICBpbnQgbmVnYXRpdmVfZXhpc3RpbmdfaW5kZXgpOworCisvKioKKyAqIEluc2VydCBhIG5ldyBlbGVtZW50IHRvIHRoZSBzdHJpbmdfbGlzdC4gVGhlIHJldHVybmVkIHBvaW50ZXIgY2FuCisgKiBiZSBoYW5keSBpZiB5b3Ugd2FudCB0byB3cml0ZSBzb21ldGhpbmcgdG8gdGhlIGB1dGlsYCBwb2ludGVyIG9mCisgKiB0aGUgc3RyaW5nX2xpc3RfaXRlbSBjb250YWluaW5nIHRoZSBqdXN0IGFkZGVkIHN0cmluZy4gSWYgdGhlIGdpdmVuCisgKiBzdHJpbmcgYWxyZWFkeSBleGlzdHMgdGhlIGluc2VydGlvbiB3aWxsIGJlIHNraXBwZWQgYW5kIHRoZSBwb2ludGVyCisgKiB0byB0aGUgZXhpc3RpbmcgaXRlbSByZXR1cm5lZC4KKyAqCisgKiBTaW5jZSB0aGlzIGZ1bmN0aW9uIHVzZXMgeHJlYWxsb2MoKSAod2hpY2ggZGllKClzIGlmIGl0IGZhaWxzKSBpZiB0aGUKKyAqIGxpc3QgbmVlZHMgdG8gZ3JvdywgaXQgaXMgc2FmZSBub3QgdG8gY2hlY2sgdGhlIHBvaW50ZXIuIEkuZS4geW91IG1heQorICogd3JpdGUgYHN0cmluZ19saXN0X2luc2VydCguLi4pLT51dGlsID0gLi4uO2AuCisgKi8KK3N0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9pbnNlcnQoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcpOworCisvKioKKyAqIFJlbW92ZSB0aGUgZ2l2ZW4gc3RyaW5nIGZyb20gdGhlIHNvcnRlZCBsaXN0LiAgSWYgdGhlIHN0cmluZworICogZG9lc24ndCBleGlzdCwgdGhlIGxpc3QgaXMgbm90IGFsdGVyZWQuCisgKi8KK3ZvaWQgc3RyaW5nX2xpc3RfcmVtb3ZlKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nLAorCQkJaW50IGZyZWVfdXRpbCk7CisKKy8qKgorICogQ2hlY2sgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBwYXJ0IG9mIGEgc29ydGVkIGxpc3QuIElmIGl0IGlzIHBhcnQgb2YgdGhlIGxpc3QsCisgKiByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgc3RyaW5nX2xpc3RfaXRlbSwgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9sb29rdXAoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcpOworCisvKgorICogUmVtb3ZlIGFsbCBidXQgdGhlIGZpcnN0IG9mIGNvbnNlY3V0aXZlIGVudHJpZXMgd2l0aCB0aGUgc2FtZQorICogc3RyaW5nIHZhbHVlLiAgSWYgZnJlZV91dGlsIGlzIHRydWUsIGNhbGwgZnJlZSgpIG9uIHRoZSB1dGlsCisgKiBtZW1iZXJzIG9mIGFueSBpdGVtcyB0aGF0IGhhdmUgdG8gYmUgZGVsZXRlZC4KKyAqLwordm9pZCBzdHJpbmdfbGlzdF9yZW1vdmVfZHVwbGljYXRlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnNvcnRlZF9saXN0LCBpbnQgZnJlZV91dGlsKTsKKworCisvKiBVc2UgdGhlc2UgZnVuY3Rpb25zIG9ubHkgb24gdW5zb3J0ZWQgbGlzdHM6ICovCisKKy8qKgorICogQWRkIHN0cmluZyB0byB0aGUgZW5kIG9mIGxpc3QuICBJZiBsaXN0LT5zdHJkdXBfc3RyaW5nIGlzIHNldCwgdGhlbgorICogc3RyaW5nIGlzIGNvcGllZDsgb3RoZXJ3aXNlIHRoZSBuZXcgc3RyaW5nX2xpc3RfZW50cnkgcmVmZXJzIHRvIHRoZQorICogaW5wdXQgc3RyaW5nLgorICovCitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3RyaW5nX2xpc3RfYXBwZW5kKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nKTsKKworLyoqCisgKiBMaWtlIHN0cmluZ19saXN0X2FwcGVuZCgpLCBleGNlcHQgc3RyaW5nIGlzIG5ldmVyIGNvcGllZC4gIFdoZW4KKyAqIGxpc3QtPnN0cmR1cF9zdHJpbmdzIGlzIHNldCwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBoYW5kCisgKiBvd25lcnNoaXAgb2YgYSBtYWxsb2MoKWVkIHN0cmluZyB0byBsaXN0IHdpdGhvdXQgbWFraW5nIGFuIGV4dHJhCisgKiBjb3B5LgorICovCitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY2hhciAqc3RyaW5nKTsKKworLyoqCisgKiBTb3J0IHRoZSBsaXN0J3MgZW50cmllcyBieSBzdHJpbmcgdmFsdWUgaW4gb3JkZXIgc3BlY2lmaWVkIGJ5IGxpc3QtPmNtcAorICogKHN0cmNtcCgpIGlmIGxpc3QtPmNtcCBpcyBOVUxMKS4KKyAqLwordm9pZCBzdHJpbmdfbGlzdF9zb3J0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCk7CisKKy8qKgorICogTGlrZSBgc3RyaW5nX2xpc3RfaGFzX3N0cmluZygpYCBidXQgZm9yIHVuc29ydGVkIGxpc3RzLiBMaW5lYXIgaW4KKyAqIHNpemUgb2YgdGhlIGxpc3QuCisgKi8KK2ludCB1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nKTsKKworLyoqCisgKiBMaWtlIGBzdHJpbmdfbGlzdF9sb29rdXAoKWAgYnV0IGZvciB1bnNvcnRlZCBsaXN0cy4gTGluZWFyIGluIHNpemUKKyAqIG9mIHRoZSBsaXN0LgorICovCitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqdW5zb3J0ZWRfc3RyaW5nX2xpc3RfbG9va3VwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCQkJCSAgICAgY29uc3QgY2hhciAqc3RyaW5nKTsKKy8qKgorICogUmVtb3ZlIGFuIGl0ZW0gZnJvbSBhIHN0cmluZ19saXN0LiBUaGUgYHN0cmluZ2AgcG9pbnRlciBvZiB0aGUKKyAqIGl0ZW1zIHdpbGwgYmUgZnJlZWQgaW4gY2FzZSB0aGUgYHN0cmR1cF9zdHJpbmdzYCBtZW1iZXIgb2YgdGhlCisgKiBzdHJpbmdfbGlzdCBpcyBzZXQuIFRoZSB0aGlyZCBwYXJhbWV0ZXIgY29udHJvbHMgaWYgdGhlIGB1dGlsYAorICogcG9pbnRlciBvZiB0aGUgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIG9yIG5vdC4KKyAqLwordm9pZCB1bnNvcnRlZF9zdHJpbmdfbGlzdF9kZWxldGVfaXRlbShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGludCBpLCBpbnQgZnJlZV91dGlsKTsKKworLyoqCisgKiBTcGxpdCBzdHJpbmcgaW50byBzdWJzdHJpbmdzIG9uIGNoYXJhY3RlciBgZGVsaW1gIGFuZCBhcHBlbmQgdGhlCisgKiBzdWJzdHJpbmdzIHRvIGBsaXN0YC4gIFRoZSBpbnB1dCBzdHJpbmcgaXMgbm90IG1vZGlmaWVkLgorICogbGlzdC0+c3RyZHVwX3N0cmluZ3MgbXVzdCBiZSBzZXQsIGFzIG5ldyBtZW1vcnkgbmVlZHMgdG8gYmUKKyAqIGFsbG9jYXRlZCB0byBob2xkIHRoZSBzdWJzdHJpbmdzLiAgSWYgbWF4c3BsaXQgaXMgbm9uLW5lZ2F0aXZlLAorICogdGhlbiBzcGxpdCBhdCBtb3N0IG1heHNwbGl0IHRpbWVzLiAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygc3Vic3RyaW5ncworICogYXBwZW5kZWQgdG8gbGlzdC4KKyAqCisgKiBFeGFtcGxlczoKKyAqICAgc3RyaW5nX2xpc3Rfc3BsaXQobCwgImZvbzpiYXI6YmF6IiwgJzonLCAtMSkgLT4gWyJmb28iLCAiYmFyIiwgImJheiJdCisgKiAgIHN0cmluZ19saXN0X3NwbGl0KGwsICJmb286YmFyOmJheiIsICc6JywgMCkgLT4gWyJmb286YmFyOmJheiJdCisgKiAgIHN0cmluZ19saXN0X3NwbGl0KGwsICJmb286YmFyOmJheiIsICc6JywgMSkgLT4gWyJmb28iLCAiYmFyOmJheiJdCisgKiAgIHN0cmluZ19saXN0X3NwbGl0KGwsICJmb286YmFyOiIsICc6JywgLTEpIC0+IFsiZm9vIiwgImJhciIsICIiXQorICogICBzdHJpbmdfbGlzdF9zcGxpdChsLCAiIiwgJzonLCAtMSkgLT4gWyIiXQorICogICBzdHJpbmdfbGlzdF9zcGxpdChsLCAiOiIsICc6JywgLTEpIC0+IFsiIiwgIiJdCisgKi8KK2ludCBzdHJpbmdfbGlzdF9zcGxpdChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJICAgICAgaW50IGRlbGltLCBpbnQgbWF4c3BsaXQpOworCisvKgorICogTGlrZSBzdHJpbmdfbGlzdF9zcGxpdCgpLCBleGNlcHQgdGhhdCBzdHJpbmcgaXMgc3BsaXQgaW4tcGxhY2U6IHRoZQorICogZGVsaW1pdGVyIGNoYXJhY3RlcnMgaW4gc3RyaW5nIGFyZSBvdmVyd3JpdHRlbiB3aXRoIE5VTHMsIGFuZCB0aGUKKyAqIG5ldyBzdHJpbmdfbGlzdF9pdGVtcyBwb2ludCBpbnRvIHN0cmluZyAod2hpY2ggdGhlcmVmb3JlIG11c3Qgbm90CisgKiBiZSBtb2RpZmllZCBvciBmcmVlZCB3aGlsZSB0aGUgc3RyaW5nX2xpc3QgaXMgaW4gdXNlKS4KKyAqIGxpc3QtPnN0cmR1cF9zdHJpbmdzIG11c3QgKm5vdCogYmUgc2V0LgorICovCitpbnQgc3RyaW5nX2xpc3Rfc3BsaXRfaW5fcGxhY2Uoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjaGFyICpzdHJpbmcsCisJCQkgICAgICAgaW50IGRlbGltLCBpbnQgbWF4c3BsaXQpOworI2VuZGlmIC8qIFNUUklOR19MSVNUX0ggKi8KZGlmZiAtLWdpdCBhL3N1Yi1wcm9jZXNzLmMgYi9zdWItcHJvY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMWFmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9zdWItcHJvY2Vzcy5jCkBAIC0wLDAgKzEsMjE2IEBACisvKgorICogR2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBiYWNrZ3JvdW5kIHByb2Nlc3MgaW5mcmFzdHJ1Y3R1cmUuCisgKi8KKyNpbmNsdWRlICJzdWItcHJvY2Vzcy5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKworaW50IGNtZDJwcm9jZXNzX2NtcChjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCSAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZXB0ciwKKwkJICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCSAgICBjb25zdCB2b2lkICp1bnVzZWRfa2V5ZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3Qgc3VicHJvY2Vzc19lbnRyeSAqZTEsICplMjsKKworCWUxID0gY29udGFpbmVyX29mKGVwdHIsIGNvbnN0IHN0cnVjdCBzdWJwcm9jZXNzX2VudHJ5LCBlbnQpOworCWUyID0gY29udGFpbmVyX29mKGVudHJ5X29yX2tleSwgY29uc3Qgc3RydWN0IHN1YnByb2Nlc3NfZW50cnksIGVudCk7CisKKwlyZXR1cm4gc3RyY21wKGUxLT5jbWQsIGUyLT5jbWQpOworfQorCitzdHJ1Y3Qgc3VicHJvY2Vzc19lbnRyeSAqc3VicHJvY2Vzc19maW5kX2VudHJ5KHN0cnVjdCBoYXNobWFwICpoYXNobWFwLCBjb25zdCBjaGFyICpjbWQpCit7CisJc3RydWN0IHN1YnByb2Nlc3NfZW50cnkga2V5OworCisJaGFzaG1hcF9lbnRyeV9pbml0KCZrZXkuZW50LCBzdHJoYXNoKGNtZCkpOworCWtleS5jbWQgPSBjbWQ7CisJcmV0dXJuIGhhc2htYXBfZ2V0X2VudHJ5KGhhc2htYXAsICZrZXksIGVudCwgTlVMTCk7Cit9CisKK2ludCBzdWJwcm9jZXNzX3JlYWRfc3RhdHVzKGludCBmZCwgc3RydWN0IHN0cmJ1ZiAqc3RhdHVzKQoreworCXN0cnVjdCBzdHJidWYgKipwYWlyOworCWNoYXIgKmxpbmU7CisJaW50IGxlbjsKKworCWZvciAoOzspIHsKKwkJbGVuID0gcGFja2V0X3JlYWRfbGluZV9nZW50bHkoZmQsIE5VTEwsICZsaW5lKTsKKwkJaWYgKChsZW4gPCAwKSB8fCAhbGluZSkKKwkJCWJyZWFrOworCQlwYWlyID0gc3RyYnVmX3NwbGl0X3N0cihsaW5lLCAnPScsIDIpOworCQlpZiAocGFpclswXSAmJiBwYWlyWzBdLT5sZW4gJiYgcGFpclsxXSkgeworCQkJLyogdGhlIGxhc3QgInN0YXR1cz08Zm9vPiIgbGluZSB3aW5zICovCisJCQlpZiAoIXN0cmNtcChwYWlyWzBdLT5idWYsICJzdGF0dXM9IikpIHsKKwkJCQlzdHJidWZfcmVzZXQoc3RhdHVzKTsKKwkJCQlzdHJidWZfYWRkYnVmKHN0YXR1cywgcGFpclsxXSk7CisJCQl9CisJCX0KKwkJc3RyYnVmX2xpc3RfZnJlZShwYWlyKTsKKwl9CisKKwlyZXR1cm4gKGxlbiA8IDApID8gbGVuIDogMDsKK30KKwordm9pZCBzdWJwcm9jZXNzX3N0b3Aoc3RydWN0IGhhc2htYXAgKmhhc2htYXAsIHN0cnVjdCBzdWJwcm9jZXNzX2VudHJ5ICplbnRyeSkKK3sKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm47CisKKwllbnRyeS0+cHJvY2Vzcy5jbGVhbl9vbl9leGl0ID0gMDsKKwlraWxsKGVudHJ5LT5wcm9jZXNzLnBpZCwgU0lHVEVSTSk7CisJZmluaXNoX2NvbW1hbmQoJmVudHJ5LT5wcm9jZXNzKTsKKworCWhhc2htYXBfcmVtb3ZlKGhhc2htYXAsICZlbnRyeS0+ZW50LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgc3VicHJvY2Vzc19leGl0X2hhbmRsZXIoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKnByb2Nlc3MpCit7CisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKwkvKiBDbG9zaW5nIHRoZSBwaXBlIHNpZ25hbHMgdGhlIHN1YnByb2Nlc3MgdG8gaW5pdGlhdGUgYSBzaHV0ZG93bi4gKi8KKwljbG9zZShwcm9jZXNzLT5pbik7CisJY2xvc2UocHJvY2Vzcy0+b3V0KTsKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisJLyogRmluaXNoIGNvbW1hbmQgd2lsbCB3YWl0IHVudGlsIHRoZSBzaHV0ZG93biBpcyBjb21wbGV0ZS4gKi8KKwlmaW5pc2hfY29tbWFuZChwcm9jZXNzKTsKK30KKworaW50IHN1YnByb2Nlc3Nfc3RhcnQoc3RydWN0IGhhc2htYXAgKmhhc2htYXAsIHN0cnVjdCBzdWJwcm9jZXNzX2VudHJ5ICplbnRyeSwgY29uc3QgY2hhciAqY21kLAorCXN1YnByb2Nlc3Nfc3RhcnRfZm4gc3RhcnRmbikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpwcm9jZXNzOworCisJZW50cnktPmNtZCA9IGNtZDsKKwlwcm9jZXNzID0gJmVudHJ5LT5wcm9jZXNzOworCisJY2hpbGRfcHJvY2Vzc19pbml0KHByb2Nlc3MpOworCWFyZ3ZfYXJyYXlfcHVzaCgmcHJvY2Vzcy0+YXJncywgY21kKTsKKwlwcm9jZXNzLT51c2Vfc2hlbGwgPSAxOworCXByb2Nlc3MtPmluID0gLTE7CisJcHJvY2Vzcy0+b3V0ID0gLTE7CisJcHJvY2Vzcy0+Y2xlYW5fb25fZXhpdCA9IDE7CisJcHJvY2Vzcy0+Y2xlYW5fb25fZXhpdF9oYW5kbGVyID0gc3VicHJvY2Vzc19leGl0X2hhbmRsZXI7CisJcHJvY2Vzcy0+dHJhY2UyX2NoaWxkX2NsYXNzID0gInN1YnByb2Nlc3MiOworCisJZXJyID0gc3RhcnRfY29tbWFuZChwcm9jZXNzKTsKKwlpZiAoZXJyKSB7CisJCWVycm9yKCJjYW5ub3QgZm9yayB0byBydW4gc3VicHJvY2VzcyAnJXMnIiwgY21kKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwloYXNobWFwX2VudHJ5X2luaXQoJmVudHJ5LT5lbnQsIHN0cmhhc2goY21kKSk7CisKKwllcnIgPSBzdGFydGZuKGVudHJ5KTsKKwlpZiAoZXJyKSB7CisJCWVycm9yKCJpbml0aWFsaXphdGlvbiBmb3Igc3VicHJvY2VzcyAnJXMnIGZhaWxlZCIsIGNtZCk7CisJCXN1YnByb2Nlc3Nfc3RvcChoYXNobWFwLCBlbnRyeSk7CisJCXJldHVybiBlcnI7CisJfQorCisJaGFzaG1hcF9hZGQoaGFzaG1hcCwgJmVudHJ5LT5lbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRzaGFrZV92ZXJzaW9uKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpwcm9jZXNzLAorCQkJICAgICBjb25zdCBjaGFyICp3ZWxjb21lX3ByZWZpeCwgaW50ICp2ZXJzaW9ucywKKwkJCSAgICAgaW50ICpjaG9zZW5fdmVyc2lvbikKK3sKKwlpbnQgdmVyc2lvbl9zY3JhdGNoOworCWludCBpOworCWNoYXIgKmxpbmU7CisJY29uc3QgY2hhciAqcDsKKworCWlmICghY2hvc2VuX3ZlcnNpb24pCisJCWNob3Nlbl92ZXJzaW9uID0gJnZlcnNpb25fc2NyYXRjaDsKKworCWlmIChwYWNrZXRfd3JpdGVfZm10X2dlbnRseShwcm9jZXNzLT5pbiwgIiVzLWNsaWVudFxuIiwKKwkJCQkgICAgd2VsY29tZV9wcmVmaXgpKQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCB3cml0ZSBjbGllbnQgaWRlbnRpZmljYXRpb24iKTsKKwlmb3IgKGkgPSAwOyB2ZXJzaW9uc1tpXTsgaSsrKSB7CisJCWlmIChwYWNrZXRfd3JpdGVfZm10X2dlbnRseShwcm9jZXNzLT5pbiwgInZlcnNpb249JWRcbiIsCisJCQkJCSAgICB2ZXJzaW9uc1tpXSkpCisJCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCB3cml0ZSByZXF1ZXN0ZWQgdmVyc2lvbiIpOworCX0KKwlpZiAocGFja2V0X2ZsdXNoX2dlbnRseShwcm9jZXNzLT5pbikpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHdyaXRlIGZsdXNoIHBhY2tldCIpOworCisJaWYgKCEobGluZSA9IHBhY2tldF9yZWFkX2xpbmUocHJvY2Vzcy0+b3V0LCBOVUxMKSkgfHwKKwkgICAgIXNraXBfcHJlZml4KGxpbmUsIHdlbGNvbWVfcHJlZml4LCAmcCkgfHwKKwkgICAgc3RyY21wKHAsICItc2VydmVyIikpCisJCXJldHVybiBlcnJvcigiVW5leHBlY3RlZCBsaW5lICclcycsIGV4cGVjdGVkICVzLXNlcnZlciIsCisJCQkgICAgIGxpbmUgPyBsaW5lIDogIjxmbHVzaCBwYWNrZXQ+Iiwgd2VsY29tZV9wcmVmaXgpOworCWlmICghKGxpbmUgPSBwYWNrZXRfcmVhZF9saW5lKHByb2Nlc3MtPm91dCwgTlVMTCkpIHx8CisJICAgICFza2lwX3ByZWZpeChsaW5lLCAidmVyc2lvbj0iLCAmcCkgfHwKKwkgICAgc3RydG9sX2kocCwgMTAsIGNob3Nlbl92ZXJzaW9uKSkKKwkJcmV0dXJuIGVycm9yKCJVbmV4cGVjdGVkIGxpbmUgJyVzJywgZXhwZWN0ZWQgdmVyc2lvbiIsCisJCQkgICAgIGxpbmUgPyBsaW5lIDogIjxmbHVzaCBwYWNrZXQ+Iik7CisJaWYgKChsaW5lID0gcGFja2V0X3JlYWRfbGluZShwcm9jZXNzLT5vdXQsIE5VTEwpKSkKKwkJcmV0dXJuIGVycm9yKCJVbmV4cGVjdGVkIGxpbmUgJyVzJywgZXhwZWN0ZWQgZmx1c2giLCBsaW5lKTsKKworCS8qIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB2ZXJzaW9uIHJlY2VpdmVkIGlzIHN1cHBvcnRlZCAqLworCWZvciAoaSA9IDA7IHZlcnNpb25zW2ldOyBpKyspIHsKKwkJaWYgKHZlcnNpb25zW2ldID09ICpjaG9zZW5fdmVyc2lvbikKKwkJCWJyZWFrOworCX0KKwlpZiAoIXZlcnNpb25zW2ldKQorCQlyZXR1cm4gZXJyb3IoIlZlcnNpb24gJWQgbm90IHN1cHBvcnRlZCIsICpjaG9zZW5fdmVyc2lvbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kc2hha2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpwcm9jZXNzLAorCQkJCSAgc3RydWN0IHN1YnByb2Nlc3NfY2FwYWJpbGl0eSAqY2FwYWJpbGl0aWVzLAorCQkJCSAgdW5zaWduZWQgaW50ICpzdXBwb3J0ZWRfY2FwYWJpbGl0aWVzKQoreworCWludCBpOworCWNoYXIgKmxpbmU7CisKKwlmb3IgKGkgPSAwOyBjYXBhYmlsaXRpZXNbaV0ubmFtZTsgaSsrKSB7CisJCWlmIChwYWNrZXRfd3JpdGVfZm10X2dlbnRseShwcm9jZXNzLT5pbiwgImNhcGFiaWxpdHk9JXNcbiIsCisJCQkJCSAgICBjYXBhYmlsaXRpZXNbaV0ubmFtZSkpCisJCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCB3cml0ZSByZXF1ZXN0ZWQgY2FwYWJpbGl0eSIpOworCX0KKwlpZiAocGFja2V0X2ZsdXNoX2dlbnRseShwcm9jZXNzLT5pbikpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHdyaXRlIGZsdXNoIHBhY2tldCIpOworCisJd2hpbGUgKChsaW5lID0gcGFja2V0X3JlYWRfbGluZShwcm9jZXNzLT5vdXQsIE5VTEwpKSkgeworCQljb25zdCBjaGFyICpwOworCQlpZiAoIXNraXBfcHJlZml4KGxpbmUsICJjYXBhYmlsaXR5PSIsICZwKSkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaSA9IDA7CisJCSAgICAgY2FwYWJpbGl0aWVzW2ldLm5hbWUgJiYgc3RyY21wKHAsIGNhcGFiaWxpdGllc1tpXS5uYW1lKTsKKwkJICAgICBpKyspCisJCQk7CisJCWlmIChjYXBhYmlsaXRpZXNbaV0ubmFtZSkgeworCQkJaWYgKHN1cHBvcnRlZF9jYXBhYmlsaXRpZXMpCisJCQkJKnN1cHBvcnRlZF9jYXBhYmlsaXRpZXMgfD0gY2FwYWJpbGl0aWVzW2ldLmZsYWc7CisJCX0gZWxzZSB7CisJCQlkaWUoInN1YnByb2Nlc3MgJyVzJyByZXF1ZXN0ZWQgdW5zdXBwb3J0ZWQgY2FwYWJpbGl0eSAnJXMnIiwKKwkJCSAgICBwcm9jZXNzLT5hcmd2WzBdLCBwKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgc3VicHJvY2Vzc19oYW5kc2hha2Uoc3RydWN0IHN1YnByb2Nlc3NfZW50cnkgKmVudHJ5LAorCQkJIGNvbnN0IGNoYXIgKndlbGNvbWVfcHJlZml4LAorCQkJIGludCAqdmVyc2lvbnMsCisJCQkgaW50ICpjaG9zZW5fdmVyc2lvbiwKKwkJCSBzdHJ1Y3Qgc3VicHJvY2Vzc19jYXBhYmlsaXR5ICpjYXBhYmlsaXRpZXMsCisJCQkgdW5zaWduZWQgaW50ICpzdXBwb3J0ZWRfY2FwYWJpbGl0aWVzKQoreworCWludCByZXR2YWw7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKnByb2Nlc3MgPSAmZW50cnktPnByb2Nlc3M7CisKKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCisJcmV0dmFsID0gaGFuZHNoYWtlX3ZlcnNpb24ocHJvY2Vzcywgd2VsY29tZV9wcmVmaXgsIHZlcnNpb25zLAorCQkJCSAgIGNob3Nlbl92ZXJzaW9uKSB8fAorCQkgaGFuZHNoYWtlX2NhcGFiaWxpdGllcyhwcm9jZXNzLCBjYXBhYmlsaXRpZXMsCisJCQkJCXN1cHBvcnRlZF9jYXBhYmlsaXRpZXMpOworCisJc2lnY2hhaW5fcG9wKFNJR1BJUEUpOworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9zdWItcHJvY2Vzcy5oIGIvc3ViLXByb2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODVmMjFmCi0tLSAvZGV2L251bGwKKysrIGIvc3ViLXByb2Nlc3MuaApAQCAtMCwwICsxLDk4IEBACisjaWZuZGVmIFNVQlBST0NFU1NfSAorI2RlZmluZSBTVUJQUk9DRVNTX0gKKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCisvKgorICogVGhlIHN1Yi1wcm9jZXNzIEFQSSBtYWtlcyBpdCBwb3NzaWJsZSB0byBydW4gYmFja2dyb3VuZCBzdWItcHJvY2Vzc2VzCisgKiBmb3IgdGhlIGVudGlyZSBsaWZldGltZSBvZiBhIEdpdCBpbnZvY2F0aW9uLiBJZiBHaXQgbmVlZHMgdG8gY29tbXVuaWNhdGUKKyAqIHdpdGggYW4gZXh0ZXJuYWwgcHJvY2VzcyBtdWx0aXBsZSB0aW1lcywgdGhlbiB0aGlzIGNhbiByZWR1Y2VzIHRoZSBwcm9jZXNzCisgKiBpbnZvY2F0aW9uIG92ZXJoZWFkLiBHaXQgYW5kIHRoZSBzdWItcHJvY2VzcyBjb21tdW5pY2F0ZSB0aHJvdWdoIHN0ZGluIGFuZAorICogc3Rkb3V0LgorICoKKyAqIFRoZSBzdWItcHJvY2Vzc2VzIGFyZSBrZXB0IGluIGEgaGFzaG1hcCBieSBjb21tYW5kIG5hbWUgYW5kIGxvb2tlZCB1cAorICogdmlhIHRoZSBzdWJwcm9jZXNzX2ZpbmRfZW50cnkgZnVuY3Rpb24uICBJZiBhbiBleGlzdGluZyBpbnN0YW5jZSBjYW4gbm90CisgKiBiZSBmb3VuZCB0aGVuIGEgbmV3IHByb2Nlc3Mgc2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHN0YXJ0ZWQuICBXaGVuIHRoZQorICogcGFyZW50IGdpdCBjb21tYW5kIHRlcm1pbmF0ZXMsIGFsbCBzdWItcHJvY2Vzc2VzIGFyZSBhbHNvIHRlcm1pbmF0ZWQuCisgKgorICogVGhpcyBBUEkgaXMgYmFzZWQgb24gdGhlIHJ1bi1jb21tYW5kIEFQSS4KKyAqLworCisgLyogZGF0YSBzdHJ1Y3R1cmVzICovCisKKy8qIE1lbWJlcnMgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBkaXJlY3RseS4gKi8KK3N0cnVjdCBzdWJwcm9jZXNzX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJY29uc3QgY2hhciAqY21kOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHByb2Nlc3M7Cit9OworCitzdHJ1Y3Qgc3VicHJvY2Vzc19jYXBhYmlsaXR5IHsKKwljb25zdCBjaGFyICpuYW1lOworCisJLyoKKwkgKiBzdWJwcm9jZXNzX2hhbmRzaGFrZSB3aWxsICJ8PSIgdGhpcyB2YWx1ZSB0byBzdXBwb3J0ZWRfY2FwYWJpbGl0aWVzCisJICogaWYgdGhlIHNlcnZlciByZXBvcnRzIHRoYXQgaXQgc3VwcG9ydHMgdGhpcyBjYXBhYmlsaXR5LgorCSAqLworCXVuc2lnbmVkIGludCBmbGFnOworfTsKKworLyogc3VicHJvY2VzcyBmdW5jdGlvbnMgKi8KKworLyogRnVuY3Rpb24gdG8gdGVzdCB0d28gc3VicHJvY2VzcyBoYXNobWFwIGVudHJpZXMgZm9yIGVxdWFsaXR5LiAqLworaW50IGNtZDJwcm9jZXNzX2NtcChjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCSAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCSAgICBjb25zdCB2b2lkICp1bnVzZWRfa2V5ZGF0YSk7CisKKy8qCisgKiBVc2VyLXN1cHBsaWVkIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIHN1Yi1wcm9jZXNzLiAgVGhpcyBpcworICogdHlwaWNhbGx5IHVzZWQgdG8gbmVnb3RpYXRlIHRoZSBpbnRlcmZhY2UgdmVyc2lvbiBhbmQgY2FwYWJpbGl0aWVzLgorICovCit0eXBlZGVmIGludCgqc3VicHJvY2Vzc19zdGFydF9mbikoc3RydWN0IHN1YnByb2Nlc3NfZW50cnkgKmVudHJ5KTsKKworLyogU3RhcnQgYSBzdWJwcm9jZXNzIGFuZCBhZGQgaXQgdG8gdGhlIHN1YnByb2Nlc3MgaGFzaG1hcC4gKi8KK2ludCBzdWJwcm9jZXNzX3N0YXJ0KHN0cnVjdCBoYXNobWFwICpoYXNobWFwLCBzdHJ1Y3Qgc3VicHJvY2Vzc19lbnRyeSAqZW50cnksIGNvbnN0IGNoYXIgKmNtZCwKKwkJc3VicHJvY2Vzc19zdGFydF9mbiBzdGFydGZuKTsKKworLyogS2lsbCBhIHN1YnByb2Nlc3MgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBzdWJwcm9jZXNzIGhhc2htYXAuICovCit2b2lkIHN1YnByb2Nlc3Nfc3RvcChzdHJ1Y3QgaGFzaG1hcCAqaGFzaG1hcCwgc3RydWN0IHN1YnByb2Nlc3NfZW50cnkgKmVudHJ5KTsKKworLyogRmluZCBhIHN1YnByb2Nlc3MgaW4gdGhlIHN1YnByb2Nlc3MgaGFzaG1hcC4gKi8KK3N0cnVjdCBzdWJwcm9jZXNzX2VudHJ5ICpzdWJwcm9jZXNzX2ZpbmRfZW50cnkoc3RydWN0IGhhc2htYXAgKmhhc2htYXAsIGNvbnN0IGNoYXIgKmNtZCk7CisKKy8qIHN1YnByb2Nlc3MgaGVscGVyIGZ1bmN0aW9ucyAqLworCisvKiBHZXQgdGhlIHVuZGVybHlpbmcgYHN0cnVjdCBjaGlsZF9wcm9jZXNzYCBmcm9tIGEgc3VicHJvY2Vzcy4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKnN1YnByb2Nlc3NfZ2V0X2NoaWxkX3Byb2Nlc3MoCisJCXN0cnVjdCBzdWJwcm9jZXNzX2VudHJ5ICplbnRyeSkKK3sKKwlyZXR1cm4gJmVudHJ5LT5wcm9jZXNzOworfQorCisvKgorICogUGVyZm9ybSB0aGUgdmVyc2lvbiBhbmQgY2FwYWJpbGl0eSBuZWdvdGlhdGlvbiBhcyBkZXNjcmliZWQgaW4gdGhlCisgKiAiSGFuZHNoYWtlIiBzZWN0aW9uIG9mIGxvbmctcnVubmluZy1wcm9jZXNzLXByb3RvY29sLnR4dCB1c2luZyB0aGUKKyAqIGdpdmVuIHJlcXVlc3RlZCB2ZXJzaW9ucyBhbmQgY2FwYWJpbGl0aWVzLiBUaGUgInZlcnNpb25zIiBhbmQgImNhcGFiaWxpdGllcyIKKyAqIHBhcmFtZXRlcnMgYXJlIGFycmF5cyB0ZXJtaW5hdGVkIGJ5IGEgMCBvciBibGFuayBzdHJ1Y3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIHdoZW4gYSBzdWJwcm9jZXNzIGlzIHN0YXJ0ZWQgKGFzIHBhcnQgb2YKKyAqIHRoZSAic3RhcnRmbiIgcGFzc2VkIHRvIHN1YnByb2Nlc3Nfc3RhcnQpLgorICovCitpbnQgc3VicHJvY2Vzc19oYW5kc2hha2Uoc3RydWN0IHN1YnByb2Nlc3NfZW50cnkgKmVudHJ5LAorCQkJIGNvbnN0IGNoYXIgKndlbGNvbWVfcHJlZml4LAorCQkJIGludCAqdmVyc2lvbnMsCisJCQkgaW50ICpjaG9zZW5fdmVyc2lvbiwKKwkJCSBzdHJ1Y3Qgc3VicHJvY2Vzc19jYXBhYmlsaXR5ICpjYXBhYmlsaXRpZXMsCisJCQkgdW5zaWduZWQgaW50ICpzdXBwb3J0ZWRfY2FwYWJpbGl0aWVzKTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHdpbGwgcmVhZCBwYWNrZXRzIGxvb2tpbmcgZm9yICJzdGF0dXM9PGZvbz4iCisgKiBrZXkvdmFsdWUgcGFpcnMgYW5kIHJldHVybiB0aGUgdmFsdWUgZnJvbSB0aGUgbGFzdCAic3RhdHVzIiBwYWNrZXQKKyAqLworCitpbnQgc3VicHJvY2Vzc19yZWFkX3N0YXR1cyhpbnQgZmQsIHN0cnVjdCBzdHJidWYgKnN0YXR1cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3VibW9kdWxlLWNvbmZpZy5jIGIvc3VibW9kdWxlLWNvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNzVkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zdWJtb2R1bGUtY29uZmlnLmMKQEAgLTAsMCArMSw4MTEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUtY29uZmlnLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCisvKgorICogc3VibW9kdWxlIGNhY2hlIGxvb2t1cCBzdHJ1Y3R1cmUKKyAqIFRoZXJlIGlzIG9uZSBzaGFyZWQgc2V0IG9mICdzdHJ1Y3Qgc3VibW9kdWxlJyBlbnRyaWVzIHdoaWNoIGNhbiBiZQorICogbG9va2VkIHVwIGJ5IHRoZWlyIHNoYTEgYmxvYiBpZCBvZiB0aGUgLmdpdG1vZHVsZXMgZmlsZSBhbmQgZWl0aGVyCisgKiB1c2luZyBwYXRoIG9yIG5hbWUgYXMga2V5LgorICogZm9yX3BhdGggc3RvcmVzIHN1Ym1vZHVsZSBlbnRyaWVzIHdpdGggcGF0aCBhcyBrZXkKKyAqIGZvcl9uYW1lIHN0b3JlcyBzdWJtb2R1bGUgZW50cmllcyB3aXRoIG5hbWUgYXMga2V5CisgKi8KK3N0cnVjdCBzdWJtb2R1bGVfY2FjaGUgeworCXN0cnVjdCBoYXNobWFwIGZvcl9wYXRoOworCXN0cnVjdCBoYXNobWFwIGZvcl9uYW1lOworCXVuc2lnbmVkIGluaXRpYWxpemVkOjE7CisJdW5zaWduZWQgZ2l0bW9kdWxlc19yZWFkOjE7Cit9OworCisvKgorICogdGhpbiB3cmFwcGVyIHN0cnVjdCBuZWVkZWQgdG8gaW5zZXJ0ICdzdHJ1Y3Qgc3VibW9kdWxlJyBlbnRyaWVzIHRvCisgKiB0aGUgaGFzaG1hcAorICovCitzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJc3RydWN0IHN1Ym1vZHVsZSAqY29uZmlnOworfTsKKworZW51bSBsb29rdXBfdHlwZSB7CisJbG9va3VwX25hbWUsCisJbG9va3VwX3BhdGgKK307CisKK3N0YXRpYyBpbnQgY29uZmlnX3BhdGhfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCSAgIGNvbnN0IHZvaWQgKnVudXNlZF9rZXlkYXRhKQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGVfZW50cnkgKmEsICpiOworCisJYSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5LCBlbnQpOworCWIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5LCBlbnQpOworCisJcmV0dXJuIHN0cmNtcChhLT5jb25maWctPnBhdGgsIGItPmNvbmZpZy0+cGF0aCkgfHwKKwkgICAgICAgIW9pZGVxKCZhLT5jb25maWctPmdpdG1vZHVsZXNfb2lkLCAmYi0+Y29uZmlnLT5naXRtb2R1bGVzX29pZCk7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX25hbWVfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCSAgIGNvbnN0IHZvaWQgKnVudXNlZF9rZXlkYXRhKQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGVfZW50cnkgKmEsICpiOworCisJYSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5LCBlbnQpOworCWIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5LCBlbnQpOworCisJcmV0dXJuIHN0cmNtcChhLT5jb25maWctPm5hbWUsIGItPmNvbmZpZy0+bmFtZSkgfHwKKwkgICAgICAgIW9pZGVxKCZhLT5jb25maWctPmdpdG1vZHVsZXNfb2lkLCAmYi0+Y29uZmlnLT5naXRtb2R1bGVzX29pZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpzdWJtb2R1bGVfY2FjaGVfYWxsb2Modm9pZCkKK3sKKwlyZXR1cm4geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSkpOworfQorCitzdGF0aWMgdm9pZCBzdWJtb2R1bGVfY2FjaGVfaW5pdChzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSkKK3sKKwloYXNobWFwX2luaXQoJmNhY2hlLT5mb3JfcGF0aCwgY29uZmlnX3BhdGhfY21wLCBOVUxMLCAwKTsKKwloYXNobWFwX2luaXQoJmNhY2hlLT5mb3JfbmFtZSwgY29uZmlnX25hbWVfY21wLCBOVUxMLCAwKTsKKwljYWNoZS0+aW5pdGlhbGl6ZWQgPSAxOworfQorCitzdGF0aWMgdm9pZCBmcmVlX29uZV9jb25maWcoc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSAqZW50cnkpCit7CisJZnJlZSgodm9pZCAqKSBlbnRyeS0+Y29uZmlnLT5wYXRoKTsKKwlmcmVlKCh2b2lkICopIGVudHJ5LT5jb25maWctPm5hbWUpOworCWZyZWUoKHZvaWQgKikgZW50cnktPmNvbmZpZy0+YnJhbmNoKTsKKwlmcmVlKCh2b2lkICopIGVudHJ5LT5jb25maWctPnVwZGF0ZV9zdHJhdGVneS5jb21tYW5kKTsKKwlmcmVlKGVudHJ5LT5jb25maWcpOworfQorCitzdGF0aWMgdm9pZCBzdWJtb2R1bGVfY2FjaGVfY2xlYXIoc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSAqY2FjaGUpCit7CisJc3RydWN0IGhhc2htYXBfaXRlciBpdGVyOworCXN0cnVjdCBzdWJtb2R1bGVfZW50cnkgKmVudHJ5OworCisJaWYgKCFjYWNoZS0+aW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKworCS8qCisJICogV2UgaXRlcmF0ZSBvdmVyIHRoZSBuYW1lIGhhc2ggaGVyZSB0byBiZSBzeW1tZXRyaWMgd2l0aCB0aGUKKwkgKiBhbGxvY2F0aW9uIG9mIHN0cnVjdCBzdWJtb2R1bGUgZW50cmllcy4gRWFjaCBpcyBhbGxvY2F0ZWQgYnkKKwkgKiB0aGVpciAuZ2l0bW9kdWxlcyBibG9iIHNoYTEgYW5kIHN1Ym1vZHVsZSBuYW1lLgorCSAqLworCWhhc2htYXBfZm9yX2VhY2hfZW50cnkoJmNhY2hlLT5mb3JfbmFtZSwgJml0ZXIsIGVudHJ5LAorCQkJCWVudCAvKiBtZW1iZXIgbmFtZSAqLykKKwkJZnJlZV9vbmVfY29uZmlnKGVudHJ5KTsKKworCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZjYWNoZS0+Zm9yX3BhdGgsIHN0cnVjdCBzdWJtb2R1bGVfZW50cnksIGVudCk7CisJaGFzaG1hcF9mcmVlX2VudHJpZXMoJmNhY2hlLT5mb3JfbmFtZSwgc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSwgZW50KTsKKwljYWNoZS0+aW5pdGlhbGl6ZWQgPSAwOworCWNhY2hlLT5naXRtb2R1bGVzX3JlYWQgPSAwOworfQorCit2b2lkIHN1Ym1vZHVsZV9jYWNoZV9mcmVlKHN0cnVjdCBzdWJtb2R1bGVfY2FjaGUgKmNhY2hlKQoreworCXN1Ym1vZHVsZV9jYWNoZV9jbGVhcihjYWNoZSk7CisJZnJlZShjYWNoZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaF9vaWRfc3RyaW5nKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICAgY29uc3QgY2hhciAqc3RyaW5nKQoreworCXJldHVybiBtZW1oYXNoKG9pZC0+aGFzaCwgdGhlX2hhc2hfYWxnby0+cmF3c3opICsgc3RyaGFzaChzdHJpbmcpOworfQorCitzdGF0aWMgdm9pZCBjYWNoZV9wdXRfcGF0aChzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSwKKwkJCSAgIHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZSkKK3sKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfb2lkX3N0cmluZygmc3VibW9kdWxlLT5naXRtb2R1bGVzX29pZCwKKwkJCQkJICAgIHN1Ym1vZHVsZS0+cGF0aCk7CisJc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSAqZSA9IHhtYWxsb2Moc2l6ZW9mKCplKSk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZlLT5lbnQsIGhhc2gpOworCWUtPmNvbmZpZyA9IHN1Ym1vZHVsZTsKKwloYXNobWFwX3B1dCgmY2FjaGUtPmZvcl9wYXRoLCAmZS0+ZW50KTsKK30KKworc3RhdGljIHZvaWQgY2FjaGVfcmVtb3ZlX3BhdGgoc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSAqY2FjaGUsCisJCQkgICAgICBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGUpCit7CisJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX29pZF9zdHJpbmcoJnN1Ym1vZHVsZS0+Z2l0bW9kdWxlc19vaWQsCisJCQkJCSAgICBzdWJtb2R1bGUtPnBhdGgpOworCXN0cnVjdCBzdWJtb2R1bGVfZW50cnkgZTsKKwlzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5ICpyZW1vdmVkOworCWhhc2htYXBfZW50cnlfaW5pdCgmZS5lbnQsIGhhc2gpOworCWUuY29uZmlnID0gc3VibW9kdWxlOworCXJlbW92ZWQgPSBoYXNobWFwX3JlbW92ZV9lbnRyeSgmY2FjaGUtPmZvcl9wYXRoLCAmZSwgZW50LCBOVUxMKTsKKwlmcmVlKHJlbW92ZWQpOworfQorCitzdGF0aWMgdm9pZCBjYWNoZV9hZGQoc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSAqY2FjaGUsCisJCSAgICAgIHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZSkKK3sKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfb2lkX3N0cmluZygmc3VibW9kdWxlLT5naXRtb2R1bGVzX29pZCwKKwkJCQkJICAgIHN1Ym1vZHVsZS0+bmFtZSk7CisJc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSAqZSA9IHhtYWxsb2Moc2l6ZW9mKCplKSk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZlLT5lbnQsIGhhc2gpOworCWUtPmNvbmZpZyA9IHN1Ym1vZHVsZTsKKwloYXNobWFwX2FkZCgmY2FjaGUtPmZvcl9uYW1lLCAmZS0+ZW50KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKmNhY2hlX2xvb2t1cF9wYXRoKHN0cnVjdCBzdWJtb2R1bGVfY2FjaGUgKmNhY2hlLAorCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpnaXRtb2R1bGVzX29pZCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5ICplbnRyeTsKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfb2lkX3N0cmluZyhnaXRtb2R1bGVzX29pZCwgcGF0aCk7CisJc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSBrZXk7CisJc3RydWN0IHN1Ym1vZHVsZSBrZXlfY29uZmlnOworCisJb2lkY3B5KCZrZXlfY29uZmlnLmdpdG1vZHVsZXNfb2lkLCBnaXRtb2R1bGVzX29pZCk7CisJa2V5X2NvbmZpZy5wYXRoID0gcGF0aDsKKworCWhhc2htYXBfZW50cnlfaW5pdCgma2V5LmVudCwgaGFzaCk7CisJa2V5LmNvbmZpZyA9ICZrZXlfY29uZmlnOworCisJZW50cnkgPSBoYXNobWFwX2dldF9lbnRyeSgmY2FjaGUtPmZvcl9wYXRoLCAma2V5LCBlbnQsIE5VTEwpOworCWlmIChlbnRyeSkKKwkJcmV0dXJuIGVudHJ5LT5jb25maWc7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3VibW9kdWxlICpjYWNoZV9sb29rdXBfbmFtZShzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZ2l0bW9kdWxlc19vaWQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSAqZW50cnk7CisJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX29pZF9zdHJpbmcoZ2l0bW9kdWxlc19vaWQsIG5hbWUpOworCXN0cnVjdCBzdWJtb2R1bGVfZW50cnkga2V5OworCXN0cnVjdCBzdWJtb2R1bGUga2V5X2NvbmZpZzsKKworCW9pZGNweSgma2V5X2NvbmZpZy5naXRtb2R1bGVzX29pZCwgZ2l0bW9kdWxlc19vaWQpOworCWtleV9jb25maWcubmFtZSA9IG5hbWU7CisKKwloYXNobWFwX2VudHJ5X2luaXQoJmtleS5lbnQsIGhhc2gpOworCWtleS5jb25maWcgPSAma2V5X2NvbmZpZzsKKworCWVudHJ5ID0gaGFzaG1hcF9nZXRfZW50cnkoJmNhY2hlLT5mb3JfbmFtZSwgJmtleSwgZW50LCBOVUxMKTsKKwlpZiAoZW50cnkpCisJCXJldHVybiBlbnRyeS0+Y29uZmlnOworCXJldHVybiBOVUxMOworfQorCitpbnQgY2hlY2tfc3VibW9kdWxlX25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwkvKiBEaXNhbGxvdyBlbXB0eSBuYW1lcyAqLworCWlmICghKm5hbWUpCisJCXJldHVybiAtMTsKKworCS8qCisJICogTG9vayBmb3IgJy4uJyBhcyBhIHBhdGggY29tcG9uZW50LiBDaGVjayBib3RoICcvJyBhbmQgJ1xcJyBhcworCSAqIHNlcGFyYXRvcnMgcmF0aGVyIHRoYW4gaXNfZGlyX3NlcCgpLCBiZWNhdXNlIHdlIHdhbnQgdGhlIG5hbWUgcnVsZXMKKwkgKiB0byBiZSBjb25zaXN0ZW50IGFjcm9zcyBwbGF0Zm9ybXMuCisJICovCisJZ290byBpbl9jb21wb25lbnQ7IC8qIGFsd2F5cyBzdGFydCBpbnNpZGUgY29tcG9uZW50ICovCisJd2hpbGUgKCpuYW1lKSB7CisJCWNoYXIgYyA9ICpuYW1lKys7CisJCWlmIChjID09ICcvJyB8fCBjID09ICdcXCcpIHsKK2luX2NvbXBvbmVudDoKKwkJCWlmIChuYW1lWzBdID09ICcuJyAmJiBuYW1lWzFdID09ICcuJyAmJgorCQkJICAgICghbmFtZVsyXSB8fCBuYW1lWzJdID09ICcvJyB8fCBuYW1lWzJdID09ICdcXCcpKQorCQkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5hbWVfYW5kX2l0ZW1fZnJvbV92YXIoY29uc3QgY2hhciAqdmFyLCBzdHJ1Y3Qgc3RyYnVmICpuYW1lLAorCQkJCSAgc3RydWN0IHN0cmJ1ZiAqaXRlbSkKK3sKKwljb25zdCBjaGFyICpzdWJzZWN0aW9uLCAqa2V5OworCXNpemVfdCBzdWJzZWN0aW9uX2xlbjsKKwlpbnQgcGFyc2U7CisJcGFyc2UgPSBwYXJzZV9jb25maWdfa2V5KHZhciwgInN1Ym1vZHVsZSIsICZzdWJzZWN0aW9uLAorCQkJJnN1YnNlY3Rpb25fbGVuLCAma2V5KTsKKwlpZiAocGFyc2UgPCAwIHx8ICFzdWJzZWN0aW9uKQorCQlyZXR1cm4gMDsKKworCXN0cmJ1Zl9hZGQobmFtZSwgc3Vic2VjdGlvbiwgc3Vic2VjdGlvbl9sZW4pOworCWlmIChjaGVja19zdWJtb2R1bGVfbmFtZShuYW1lLT5idWYpIDwgMCkgeworCQl3YXJuaW5nKF8oImlnbm9yaW5nIHN1c3BpY2lvdXMgc3VibW9kdWxlIG5hbWU6ICVzIiksIG5hbWUtPmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKG5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzdHJidWZfYWRkc3RyKGl0ZW0sIGtleSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBzdWJtb2R1bGUgKmxvb2t1cF9vcl9jcmVhdGVfYnlfbmFtZShzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZ2l0bW9kdWxlc19vaWQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN1Ym1vZHVsZSAqc3VibW9kdWxlOworCXN0cnVjdCBzdHJidWYgbmFtZV9idWYgPSBTVFJCVUZfSU5JVDsKKworCXN1Ym1vZHVsZSA9IGNhY2hlX2xvb2t1cF9uYW1lKGNhY2hlLCBnaXRtb2R1bGVzX29pZCwgbmFtZSk7CisJaWYgKHN1Ym1vZHVsZSkKKwkJcmV0dXJuIHN1Ym1vZHVsZTsKKworCXN1Ym1vZHVsZSA9IHhtYWxsb2Moc2l6ZW9mKCpzdWJtb2R1bGUpKTsKKworCXN0cmJ1Zl9hZGRzdHIoJm5hbWVfYnVmLCBuYW1lKTsKKwlzdWJtb2R1bGUtPm5hbWUgPSBzdHJidWZfZGV0YWNoKCZuYW1lX2J1ZiwgTlVMTCk7CisKKwlzdWJtb2R1bGUtPnBhdGggPSBOVUxMOworCXN1Ym1vZHVsZS0+dXJsID0gTlVMTDsKKwlzdWJtb2R1bGUtPnVwZGF0ZV9zdHJhdGVneS50eXBlID0gU01fVVBEQVRFX1VOU1BFQ0lGSUVEOworCXN1Ym1vZHVsZS0+dXBkYXRlX3N0cmF0ZWd5LmNvbW1hbmQgPSBOVUxMOworCXN1Ym1vZHVsZS0+ZmV0Y2hfcmVjdXJzZSA9IFJFQ1VSU0VfU1VCTU9EVUxFU19OT05FOworCXN1Ym1vZHVsZS0+aWdub3JlID0gTlVMTDsKKwlzdWJtb2R1bGUtPmJyYW5jaCA9IE5VTEw7CisJc3VibW9kdWxlLT5yZWNvbW1lbmRfc2hhbGxvdyA9IC0xOworCisJb2lkY3B5KCZzdWJtb2R1bGUtPmdpdG1vZHVsZXNfb2lkLCBnaXRtb2R1bGVzX29pZCk7CisKKwljYWNoZV9hZGQoY2FjaGUsIHN1Ym1vZHVsZSk7CisKKwlyZXR1cm4gc3VibW9kdWxlOworfQorCitzdGF0aWMgaW50IHBhcnNlX2ZldGNoX3JlY3Vyc2UoY29uc3QgY2hhciAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgICAgaW50IGRpZV9vbl9lcnJvcikKK3sKKwlzd2l0Y2ggKGdpdF9wYXJzZV9tYXliZV9ib29sKGFyZykpIHsKKwljYXNlIDE6CisJCXJldHVybiBSRUNVUlNFX1NVQk1PRFVMRVNfT047CisJY2FzZSAwOgorCQlyZXR1cm4gUkVDVVJTRV9TVUJNT0RVTEVTX09GRjsKKwlkZWZhdWx0OgorCQlpZiAoIXN0cmNtcChhcmcsICJvbi1kZW1hbmQiKSkKKwkJCXJldHVybiBSRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EOworCQkvKgorCQkgKiBQbGVhc2UgdXBkYXRlICRfX2dpdF9mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXMgaW4KKwkJICogZ2l0LWNvbXBsZXRpb24uYmFzaCB3aGVuIHlvdSBhZGQgbmV3IG9wdGlvbnMuCisJCSAqLworCQlpZiAoZGllX29uX2Vycm9yKQorCQkJZGllKCJiYWQgJXMgYXJndW1lbnQ6ICVzIiwgb3B0LCBhcmcpOworCQllbHNlCisJCQlyZXR1cm4gUkVDVVJTRV9TVUJNT0RVTEVTX0VSUk9SOworCX0KK30KKworaW50IHBhcnNlX3N1Ym1vZHVsZV9mZXRjaGpvYnMoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpbnQgZmV0Y2hqb2JzID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJaWYgKGZldGNoam9icyA8IDApCisJCWRpZShfKCJuZWdhdGl2ZSB2YWx1ZXMgbm90IGFsbG93ZWQgZm9yIHN1Ym1vZHVsZS5mZXRjaGpvYnMiKSk7CisJcmV0dXJuIGZldGNoam9iczsKK30KKworaW50IHBhcnNlX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcoY29uc3QgY2hhciAqb3B0LCBjb25zdCBjaGFyICphcmcpCit7CisJcmV0dXJuIHBhcnNlX2ZldGNoX3JlY3Vyc2Uob3B0LCBhcmcsIDEpOworfQorCitpbnQgb3B0aW9uX2ZldGNoX3BhcnNlX3JlY3Vyc2Vfc3VibW9kdWxlcyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50ICp2OworCisJaWYgKCFvcHQtPnZhbHVlKQorCQlyZXR1cm4gLTE7CisKKwl2ID0gb3B0LT52YWx1ZTsKKworCWlmICh1bnNldCkgeworCQkqdiA9IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkY7CisJfSBlbHNlIHsKKwkJaWYgKGFyZykKKwkJCSp2ID0gcGFyc2VfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzX2FyZyhvcHQtPmxvbmdfbmFtZSwgYXJnKTsKKwkJZWxzZQorCQkJKnYgPSBSRUNVUlNFX1NVQk1PRFVMRVNfT047CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX3VwZGF0ZV9yZWN1cnNlKGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCWludCBkaWVfb25fZXJyb3IpCit7CisJc3dpdGNoIChnaXRfcGFyc2VfbWF5YmVfYm9vbChhcmcpKSB7CisJY2FzZSAxOgorCQlyZXR1cm4gUkVDVVJTRV9TVUJNT0RVTEVTX09OOworCWNhc2UgMDoKKwkJcmV0dXJuIFJFQ1VSU0VfU1VCTU9EVUxFU19PRkY7CisJZGVmYXVsdDoKKwkJaWYgKGRpZV9vbl9lcnJvcikKKwkJCWRpZSgiYmFkICVzIGFyZ3VtZW50OiAlcyIsIG9wdCwgYXJnKTsKKwkJcmV0dXJuIFJFQ1VSU0VfU1VCTU9EVUxFU19FUlJPUjsKKwl9Cit9CisKK2ludCBwYXJzZV91cGRhdGVfcmVjdXJzZV9zdWJtb2R1bGVzX2FyZyhjb25zdCBjaGFyICpvcHQsIGNvbnN0IGNoYXIgKmFyZykKK3sKKwlyZXR1cm4gcGFyc2VfdXBkYXRlX3JlY3Vyc2Uob3B0LCBhcmcsIDEpOworfQorCitzdGF0aWMgaW50IHBhcnNlX3B1c2hfcmVjdXJzZShjb25zdCBjaGFyICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICAgICBpbnQgZGllX29uX2Vycm9yKQoreworCXN3aXRjaCAoZ2l0X3BhcnNlX21heWJlX2Jvb2woYXJnKSkgeworCWNhc2UgMToKKwkJLyogVGhlcmUncyBubyBzaW1wbGUgIm9uIiB2YWx1ZSB3aGVuIHB1c2hpbmcgKi8KKwkJaWYgKGRpZV9vbl9lcnJvcikKKwkJCWRpZSgiYmFkICVzIGFyZ3VtZW50OiAlcyIsIG9wdCwgYXJnKTsKKwkJZWxzZQorCQkJcmV0dXJuIFJFQ1VSU0VfU1VCTU9EVUxFU19FUlJPUjsKKwljYXNlIDA6CisJCXJldHVybiBSRUNVUlNFX1NVQk1PRFVMRVNfT0ZGOworCWRlZmF1bHQ6CisJCWlmICghc3RyY21wKGFyZywgIm9uLWRlbWFuZCIpKQorCQkJcmV0dXJuIFJFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQ7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiY2hlY2siKSkKKwkJCXJldHVybiBSRUNVUlNFX1NVQk1PRFVMRVNfQ0hFQ0s7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAib25seSIpKQorCQkJcmV0dXJuIFJFQ1VSU0VfU1VCTU9EVUxFU19PTkxZOworCQkvKgorCQkgKiBQbGVhc2UgdXBkYXRlICRfX2dpdF9wdXNoX3JlY3Vyc2Vfc3VibW9kdWxlcyBpbgorCQkgKiBnaXQtY29tcGxldGlvbi5iYXNoIHdoZW4geW91IGFkZCBuZXcgbW9kZXMuCisJCSAqLworCQllbHNlIGlmIChkaWVfb25fZXJyb3IpCisJCQlkaWUoImJhZCAlcyBhcmd1bWVudDogJXMiLCBvcHQsIGFyZyk7CisJCWVsc2UKKwkJCXJldHVybiBSRUNVUlNFX1NVQk1PRFVMRVNfRVJST1I7CisJfQorfQorCitpbnQgcGFyc2VfcHVzaF9yZWN1cnNlX3N1Ym1vZHVsZXNfYXJnKGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqYXJnKQoreworCXJldHVybiBwYXJzZV9wdXNoX3JlY3Vyc2Uob3B0LCBhcmcsIDEpOworfQorCitzdGF0aWMgdm9pZCB3YXJuX211bHRpcGxlX2NvbmZpZyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlaXNoX25hbWUsCisJCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKm9wdGlvbikKK3sKKwljb25zdCBjaGFyICpjb21taXRfc3RyaW5nID0gIldPUktUUkVFIjsKKwlpZiAodHJlZWlzaF9uYW1lKQorCQljb21taXRfc3RyaW5nID0gb2lkX3RvX2hleCh0cmVlaXNoX25hbWUpOworCXdhcm5pbmcoIiVzOi5naXRtb2R1bGVzLCBtdWx0aXBsZSBjb25maWd1cmF0aW9ucyBmb3VuZCBmb3IgIgorCQkJIidzdWJtb2R1bGUuJXMuJXMnLiBTa2lwcGluZyBzZWNvbmQgb25lISIsCisJCQljb21taXRfc3RyaW5nLCBuYW1lLCBvcHRpb24pOworfQorCitzdGF0aWMgdm9pZCB3YXJuX2NvbW1hbmRfbGluZV9vcHRpb24oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwl3YXJuaW5nKF8oImlnbm9yaW5nICclcycgd2hpY2ggbWF5IGJlIGludGVycHJldGVkIGFzIgorCQkgICIgYSBjb21tYW5kLWxpbmUgb3B0aW9uOiAlcyIpLCB2YXIsIHZhbHVlKTsKK30KKworc3RydWN0IHBhcnNlX2NvbmZpZ19wYXJhbWV0ZXIgeworCXN0cnVjdCBzdWJtb2R1bGVfY2FjaGUgKmNhY2hlOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnRyZWVpc2hfbmFtZTsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpnaXRtb2R1bGVzX29pZDsKKwlpbnQgb3ZlcndyaXRlOworfTsKKworLyoKKyAqIFBhcnNlIGEgY29uZmlnIGl0ZW0gZnJvbSAuZ2l0bW9kdWxlcy4KKyAqCisgKiBUaGlzIGRvZXMgbm90IGhhbmRsZSBzdWJtb2R1bGUtcmVsYXRlZCBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1haW4KKyAqIGNvbmZpZyBzdG9yZSAoLmdpdC9jb25maWcsIGV0YykuICBDYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IKKyAqIGNoZWNraW5nIGZvciBvdmVycmlkZXMgaW4gdGhlIG1haW4gY29uZmlnIHN0b3JlIHdoZW4gYXBwcm9wcmlhdGUuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBhcnNlX2NvbmZpZ19wYXJhbWV0ZXIgKm1lID0gZGF0YTsKKwlzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGU7CisJc3RydWN0IHN0cmJ1ZiBuYW1lID0gU1RSQlVGX0lOSVQsIGl0ZW0gPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gMDsKKworCS8qIHRoaXMgYWxzbyBlbnN1cmVzIHRoYXQgd2Ugb25seSBwYXJzZSBzdWJtb2R1bGUgZW50cmllcyAqLworCWlmICghbmFtZV9hbmRfaXRlbV9mcm9tX3Zhcih2YXIsICZuYW1lLCAmaXRlbSkpCisJCXJldHVybiAwOworCisJc3VibW9kdWxlID0gbG9va3VwX29yX2NyZWF0ZV9ieV9uYW1lKG1lLT5jYWNoZSwKKwkJCQkJICAgICBtZS0+Z2l0bW9kdWxlc19vaWQsCisJCQkJCSAgICAgbmFtZS5idWYpOworCisJaWYgKCFzdHJjbXAoaXRlbS5idWYsICJwYXRoIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldCA9IGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWVsc2UgaWYgKGxvb2tzX2xpa2VfY29tbWFuZF9saW5lX29wdGlvbih2YWx1ZSkpCisJCQl3YXJuX2NvbW1hbmRfbGluZV9vcHRpb24odmFyLCB2YWx1ZSk7CisJCWVsc2UgaWYgKCFtZS0+b3ZlcndyaXRlICYmIHN1Ym1vZHVsZS0+cGF0aCkKKwkJCXdhcm5fbXVsdGlwbGVfY29uZmlnKG1lLT50cmVlaXNoX25hbWUsIHN1Ym1vZHVsZS0+bmFtZSwKKwkJCQkJInBhdGgiKTsKKwkJZWxzZSB7CisJCQlpZiAoc3VibW9kdWxlLT5wYXRoKQorCQkJCWNhY2hlX3JlbW92ZV9wYXRoKG1lLT5jYWNoZSwgc3VibW9kdWxlKTsKKwkJCWZyZWUoKHZvaWQgKikgc3VibW9kdWxlLT5wYXRoKTsKKwkJCXN1Ym1vZHVsZS0+cGF0aCA9IHhzdHJkdXAodmFsdWUpOworCQkJY2FjaGVfcHV0X3BhdGgobWUtPmNhY2hlLCBzdWJtb2R1bGUpOworCQl9CisJfSBlbHNlIGlmICghc3RyY21wKGl0ZW0uYnVmLCAiZmV0Y2hyZWN1cnNlc3VibW9kdWxlcyIpKSB7CisJCS8qIHdoZW4gcGFyc2luZyB3b3JrdHJlZSBjb25maWd1cmF0aW9ucyB3ZSBjYW4gZGllIGVhcmx5ICovCisJCWludCBkaWVfb25fZXJyb3IgPSBpc19udWxsX29pZChtZS0+Z2l0bW9kdWxlc19vaWQpOworCQlpZiAoIW1lLT5vdmVyd3JpdGUgJiYKKwkJICAgIHN1Ym1vZHVsZS0+ZmV0Y2hfcmVjdXJzZSAhPSBSRUNVUlNFX1NVQk1PRFVMRVNfTk9ORSkKKwkJCXdhcm5fbXVsdGlwbGVfY29uZmlnKG1lLT50cmVlaXNoX25hbWUsIHN1Ym1vZHVsZS0+bmFtZSwKKwkJCQkJImZldGNocmVjdXJzZXN1Ym1vZHVsZXMiKTsKKwkJZWxzZQorCQkJc3VibW9kdWxlLT5mZXRjaF9yZWN1cnNlID0gcGFyc2VfZmV0Y2hfcmVjdXJzZSgKKwkJCQkJCQkJdmFyLCB2YWx1ZSwKKwkJCQkJCQkJZGllX29uX2Vycm9yKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoaXRlbS5idWYsICJpZ25vcmUiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0ID0gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJZWxzZSBpZiAoIW1lLT5vdmVyd3JpdGUgJiYgc3VibW9kdWxlLT5pZ25vcmUpCisJCQl3YXJuX211bHRpcGxlX2NvbmZpZyhtZS0+dHJlZWlzaF9uYW1lLCBzdWJtb2R1bGUtPm5hbWUsCisJCQkJCSJpZ25vcmUiKTsKKwkJZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAidW50cmFja2VkIikgJiYKKwkJCSBzdHJjbXAodmFsdWUsICJkaXJ0eSIpICYmCisJCQkgc3RyY21wKHZhbHVlLCAiYWxsIikgJiYKKwkJCSBzdHJjbXAodmFsdWUsICJub25lIikpCisJCQl3YXJuaW5nKCJJbnZhbGlkIHBhcmFtZXRlciAnJXMnIGZvciBjb25maWcgb3B0aW9uICIKKwkJCQkJIidzdWJtb2R1bGUuJXMuaWdub3JlJyIsIHZhbHVlLCBuYW1lLmJ1Zik7CisJCWVsc2UgeworCQkJZnJlZSgodm9pZCAqKSBzdWJtb2R1bGUtPmlnbm9yZSk7CisJCQlzdWJtb2R1bGUtPmlnbm9yZSA9IHhzdHJkdXAodmFsdWUpOworCQl9CisJfSBlbHNlIGlmICghc3RyY21wKGl0ZW0uYnVmLCAidXJsIikpIHsKKwkJaWYgKCF2YWx1ZSkgeworCQkJcmV0ID0gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJfSBlbHNlIGlmIChsb29rc19saWtlX2NvbW1hbmRfbGluZV9vcHRpb24odmFsdWUpKSB7CisJCQl3YXJuX2NvbW1hbmRfbGluZV9vcHRpb24odmFyLCB2YWx1ZSk7CisJCX0gZWxzZSBpZiAoIW1lLT5vdmVyd3JpdGUgJiYgc3VibW9kdWxlLT51cmwpIHsKKwkJCXdhcm5fbXVsdGlwbGVfY29uZmlnKG1lLT50cmVlaXNoX25hbWUsIHN1Ym1vZHVsZS0+bmFtZSwKKwkJCQkJInVybCIpOworCQl9IGVsc2UgeworCQkJZnJlZSgodm9pZCAqKSBzdWJtb2R1bGUtPnVybCk7CisJCQlzdWJtb2R1bGUtPnVybCA9IHhzdHJkdXAodmFsdWUpOworCQl9CisJfSBlbHNlIGlmICghc3RyY21wKGl0ZW0uYnVmLCAidXBkYXRlIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldCA9IGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWVsc2UgaWYgKCFtZS0+b3ZlcndyaXRlICYmCisJCQkgc3VibW9kdWxlLT51cGRhdGVfc3RyYXRlZ3kudHlwZSAhPSBTTV9VUERBVEVfVU5TUEVDSUZJRUQpCisJCQl3YXJuX211bHRpcGxlX2NvbmZpZyhtZS0+dHJlZWlzaF9uYW1lLCBzdWJtb2R1bGUtPm5hbWUsCisJCQkJCSAgICAgInVwZGF0ZSIpOworCQllbHNlIGlmIChwYXJzZV9zdWJtb2R1bGVfdXBkYXRlX3N0cmF0ZWd5KHZhbHVlLAorCQkJICZzdWJtb2R1bGUtPnVwZGF0ZV9zdHJhdGVneSkgPCAwIHx8CisJCQkgc3VibW9kdWxlLT51cGRhdGVfc3RyYXRlZ3kudHlwZSA9PSBTTV9VUERBVEVfQ09NTUFORCkKKwkJCWRpZShfKCJpbnZhbGlkIHZhbHVlIGZvciAlcyIpLCB2YXIpOworCX0gZWxzZSBpZiAoIXN0cmNtcChpdGVtLmJ1ZiwgInNoYWxsb3ciKSkgeworCQlpZiAoIW1lLT5vdmVyd3JpdGUgJiYgc3VibW9kdWxlLT5yZWNvbW1lbmRfc2hhbGxvdyAhPSAtMSkKKwkJCXdhcm5fbXVsdGlwbGVfY29uZmlnKG1lLT50cmVlaXNoX25hbWUsIHN1Ym1vZHVsZS0+bmFtZSwKKwkJCQkJICAgICAic2hhbGxvdyIpOworCQllbHNlCisJCQlzdWJtb2R1bGUtPnJlY29tbWVuZF9zaGFsbG93ID0KKwkJCQlnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJfSBlbHNlIGlmICghc3RyY21wKGl0ZW0uYnVmLCAiYnJhbmNoIikpIHsKKwkJaWYgKCFtZS0+b3ZlcndyaXRlICYmIHN1Ym1vZHVsZS0+YnJhbmNoKQorCQkJd2Fybl9tdWx0aXBsZV9jb25maWcobWUtPnRyZWVpc2hfbmFtZSwgc3VibW9kdWxlLT5uYW1lLAorCQkJCQkgICAgICJicmFuY2giKTsKKwkJZWxzZSB7CisJCQlmcmVlKCh2b2lkICopc3VibW9kdWxlLT5icmFuY2gpOworCQkJc3VibW9kdWxlLT5icmFuY2ggPSB4c3RyZHVwKHZhbHVlKTsKKwkJfQorCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmaXRlbSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdpdG1vZHVsZV9vaWRfZnJvbV9jb21taXQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdHJlZWlzaF9uYW1lLAorCQkJCSAgICAgc3RydWN0IG9iamVjdF9pZCAqZ2l0bW9kdWxlc19vaWQsCisJCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICpyZXYpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoaXNfbnVsbF9vaWQodHJlZWlzaF9uYW1lKSkgeworCQlvaWRjbHIoZ2l0bW9kdWxlc19vaWQpOworCQlyZXR1cm4gMTsKKwl9CisKKwlzdHJidWZfYWRkZihyZXYsICIlczouZ2l0bW9kdWxlcyIsIG9pZF90b19oZXgodHJlZWlzaF9uYW1lKSk7CisJaWYgKGdldF9vaWQocmV2LT5idWYsIGdpdG1vZHVsZXNfb2lkKSA+PSAwKQorCQlyZXQgPSAxOworCisJcmV0dXJuIHJldDsKK30KKworLyogVGhpcyBkb2VzIGEgbG9va3VwIG9mIGEgc3VibW9kdWxlIGNvbmZpZ3VyYXRpb24gYnkgbmFtZSBvciBieSBwYXRoCisgKiAoa2V5KSB3aXRoIG9uLWRlbWFuZCByZWFkaW5nIG9mIHRoZSBhcHByb3ByaWF0ZSAuZ2l0bW9kdWxlcyBmcm9tCisgKiByZXZpc2lvbnMuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpjb25maWdfZnJvbShzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdHJlZWlzaF9uYW1lLCBjb25zdCBjaGFyICprZXksCisJCWVudW0gbG9va3VwX3R5cGUgbG9va3VwX3R5cGUpCit7CisJc3RydWN0IHN0cmJ1ZiByZXYgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBsb25nIGNvbmZpZ19zaXplOworCWNoYXIgKmNvbmZpZyA9IE5VTEw7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZSA9IE5VTEw7CisJc3RydWN0IHBhcnNlX2NvbmZpZ19wYXJhbWV0ZXIgcGFyYW1ldGVyOworCisJLyoKKwkgKiBJZiBhbnkgcGFyYW1ldGVyIGV4Y2VwdCB0aGUgY2FjaGUgaXMgYSBOVUxMIHBvaW50ZXIganVzdAorCSAqIHJldHVybiB0aGUgZmlyc3Qgc3VibW9kdWxlLiBDYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyCisJICogdGhlcmUgYXJlIGFueSBzdWJtb2R1bGVzIHBhcnNlZC4KKwkgKi8KKwlpZiAoIXRyZWVpc2hfbmFtZSB8fCAha2V5KSB7CisJCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwkJc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSAqZW50cnk7CisKKwkJZW50cnkgPSBoYXNobWFwX2l0ZXJfZmlyc3RfZW50cnkoJmNhY2hlLT5mb3JfbmFtZSwgJml0ZXIsCisJCQkJCQlzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5LAorCQkJCQkJZW50IC8qIG1lbWJlciBuYW1lICovKTsKKwkJaWYgKCFlbnRyeSkKKwkJCXJldHVybiBOVUxMOworCQlyZXR1cm4gZW50cnktPmNvbmZpZzsKKwl9CisKKwlpZiAoIWdpdG1vZHVsZV9vaWRfZnJvbV9jb21taXQodHJlZWlzaF9uYW1lLCAmb2lkLCAmcmV2KSkKKwkJZ290byBvdXQ7CisKKwlzd2l0Y2ggKGxvb2t1cF90eXBlKSB7CisJY2FzZSBsb29rdXBfbmFtZToKKwkJc3VibW9kdWxlID0gY2FjaGVfbG9va3VwX25hbWUoY2FjaGUsICZvaWQsIGtleSk7CisJCWJyZWFrOworCWNhc2UgbG9va3VwX3BhdGg6CisJCXN1Ym1vZHVsZSA9IGNhY2hlX2xvb2t1cF9wYXRoKGNhY2hlLCAmb2lkLCBrZXkpOworCQlicmVhazsKKwl9CisJaWYgKHN1Ym1vZHVsZSkKKwkJZ290byBvdXQ7CisKKwljb25maWcgPSByZWFkX29iamVjdF9maWxlKCZvaWQsICZ0eXBlLCAmY29uZmlnX3NpemUpOworCWlmICghY29uZmlnIHx8IHR5cGUgIT0gT0JKX0JMT0IpCisJCWdvdG8gb3V0OworCisJLyogZmlsbCB0aGUgc3VibW9kdWxlIGNvbmZpZyBpbnRvIHRoZSBjYWNoZSAqLworCXBhcmFtZXRlci5jYWNoZSA9IGNhY2hlOworCXBhcmFtZXRlci50cmVlaXNoX25hbWUgPSB0cmVlaXNoX25hbWU7CisJcGFyYW1ldGVyLmdpdG1vZHVsZXNfb2lkID0gJm9pZDsKKwlwYXJhbWV0ZXIub3ZlcndyaXRlID0gMDsKKwlnaXRfY29uZmlnX2Zyb21fbWVtKHBhcnNlX2NvbmZpZywgQ09ORklHX09SSUdJTl9TVUJNT0RVTEVfQkxPQiwgcmV2LmJ1ZiwKKwkJCWNvbmZpZywgY29uZmlnX3NpemUsICZwYXJhbWV0ZXIsIE5VTEwpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZXYpOworCWZyZWUoY29uZmlnKTsKKworCXN3aXRjaCAobG9va3VwX3R5cGUpIHsKKwljYXNlIGxvb2t1cF9uYW1lOgorCQlyZXR1cm4gY2FjaGVfbG9va3VwX25hbWUoY2FjaGUsICZvaWQsIGtleSk7CisJY2FzZSBsb29rdXBfcGF0aDoKKwkJcmV0dXJuIGNhY2hlX2xvb2t1cF9wYXRoKGNhY2hlLCAmb2lkLCBrZXkpOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KKworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZyZXYpOworCWZyZWUoY29uZmlnKTsKKwlyZXR1cm4gc3VibW9kdWxlOworfQorCitzdGF0aWMgdm9pZCBzdWJtb2R1bGVfY2FjaGVfY2hlY2tfaW5pdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbykKK3sKKwlpZiAocmVwby0+c3VibW9kdWxlX2NhY2hlICYmIHJlcG8tPnN1Ym1vZHVsZV9jYWNoZS0+aW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKworCWlmICghcmVwby0+c3VibW9kdWxlX2NhY2hlKQorCQlyZXBvLT5zdWJtb2R1bGVfY2FjaGUgPSBzdWJtb2R1bGVfY2FjaGVfYWxsb2MoKTsKKworCXN1Ym1vZHVsZV9jYWNoZV9pbml0KHJlcG8tPnN1Ym1vZHVsZV9jYWNoZSk7Cit9CisKKy8qCisgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIHByaXZhdGUgZm9yIGEgcmVhc29uLCB0aGUgJy5naXRtb2R1bGVzJyBmaWxlIHNob3VsZAorICogbm90IGJlIHVzZWQgYXMgYSBtZWNoYW5pc20gdG8gcmV0cmlldmUgYXJiaXRyYXJ5IGNvbmZpZ3VyYXRpb24gc3RvcmVkIGluCisgKiB0aGUgcmVwb3NpdG9yeS4KKyAqCisgKiBSdW5zIHRoZSBwcm92aWRlZCBjb25maWcgZnVuY3Rpb24gb24gdGhlICcuZ2l0bW9kdWxlcycgZmlsZSBmb3VuZCBpbiB0aGUKKyAqIHdvcmtpbmcgZGlyZWN0b3J5LgorICovCitzdGF0aWMgdm9pZCBjb25maWdfZnJvbV9naXRtb2R1bGVzKGNvbmZpZ19mbl90IGZuLCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgdm9pZCAqZGF0YSkKK3sKKwlpZiAocmVwby0+d29ya3RyZWUpIHsKKwkJc3RydWN0IGdpdF9jb25maWdfc291cmNlIGNvbmZpZ19zb3VyY2UgPSB7CisJCQkwLCAuc2NvcGUgPSBDT05GSUdfU0NPUEVfU1VCTU9EVUxFCisJCX07CisJCWNvbnN0IHN0cnVjdCBjb25maWdfb3B0aW9ucyBvcHRzID0geyAwIH07CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljaGFyICpmaWxlOworCQljaGFyICpvaWRzdHIgPSBOVUxMOworCisJCWZpbGUgPSByZXBvX3dvcmt0cmVlX3BhdGgocmVwbywgR0lUTU9EVUxFU19GSUxFKTsKKwkJaWYgKGZpbGVfZXhpc3RzKGZpbGUpKSB7CisJCQljb25maWdfc291cmNlLmZpbGUgPSBmaWxlOworCQl9IGVsc2UgaWYgKHJlcG9fZ2V0X29pZChyZXBvLCBHSVRNT0RVTEVTX0lOREVYLCAmb2lkKSA+PSAwIHx8CisJCQkgICByZXBvX2dldF9vaWQocmVwbywgR0lUTU9EVUxFU19IRUFELCAmb2lkKSA+PSAwKSB7CisJCQljb25maWdfc291cmNlLmJsb2IgPSBvaWRzdHIgPSB4c3RyZHVwKG9pZF90b19oZXgoJm9pZCkpOworCQkJaWYgKHJlcG8gIT0gdGhlX3JlcG9zaXRvcnkpCisJCQkJYWRkX3RvX2FsdGVybmF0ZXNfbWVtb3J5KHJlcG8tPm9iamVjdHMtPm9kYi0+cGF0aCk7CisJCX0gZWxzZSB7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWNvbmZpZ193aXRoX29wdGlvbnMoZm4sIGRhdGEsICZjb25maWdfc291cmNlLCAmb3B0cyk7CisKK291dDoKKwkJZnJlZShvaWRzdHIpOworCQlmcmVlKGZpbGUpOworCX0KK30KKworc3RhdGljIGludCBnaXRtb2R1bGVzX2NiKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8gPSBkYXRhOworCXN0cnVjdCBwYXJzZV9jb25maWdfcGFyYW1ldGVyIHBhcmFtZXRlcjsKKworCXBhcmFtZXRlci5jYWNoZSA9IHJlcG8tPnN1Ym1vZHVsZV9jYWNoZTsKKwlwYXJhbWV0ZXIudHJlZWlzaF9uYW1lID0gTlVMTDsKKwlwYXJhbWV0ZXIuZ2l0bW9kdWxlc19vaWQgPSAmbnVsbF9vaWQ7CisJcGFyYW1ldGVyLm92ZXJ3cml0ZSA9IDE7CisKKwlyZXR1cm4gcGFyc2VfY29uZmlnKHZhciwgdmFsdWUsICZwYXJhbWV0ZXIpOworfQorCit2b2lkIHJlcG9fcmVhZF9naXRtb2R1bGVzKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBpbnQgc2tpcF9pZl9yZWFkKQoreworCXN1Ym1vZHVsZV9jYWNoZV9jaGVja19pbml0KHJlcG8pOworCisJaWYgKHJlcG8tPnN1Ym1vZHVsZV9jYWNoZS0+Z2l0bW9kdWxlc19yZWFkICYmIHNraXBfaWZfcmVhZCkKKwkJcmV0dXJuOworCisJaWYgKHJlcG9fcmVhZF9pbmRleChyZXBvKSA8IDApCisJCXJldHVybjsKKworCWlmICghaXNfZ2l0bW9kdWxlc191bm1lcmdlZChyZXBvLT5pbmRleCkpCisJCWNvbmZpZ19mcm9tX2dpdG1vZHVsZXMoZ2l0bW9kdWxlc19jYiwgcmVwbywgcmVwbyk7CisKKwlyZXBvLT5zdWJtb2R1bGVfY2FjaGUtPmdpdG1vZHVsZXNfcmVhZCA9IDE7Cit9CisKK3ZvaWQgZ2l0bW9kdWxlc19jb25maWdfb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmNvbW1pdF9vaWQpCit7CisJc3RydWN0IHN0cmJ1ZiByZXYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCXN1Ym1vZHVsZV9jYWNoZV9jaGVja19pbml0KHRoZV9yZXBvc2l0b3J5KTsKKworCWlmIChnaXRtb2R1bGVfb2lkX2Zyb21fY29tbWl0KGNvbW1pdF9vaWQsICZvaWQsICZyZXYpKSB7CisJCWdpdF9jb25maWdfZnJvbV9ibG9iX29pZChnaXRtb2R1bGVzX2NiLCByZXYuYnVmLAorCQkJCQkgJm9pZCwgdGhlX3JlcG9zaXRvcnkpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmcmV2KTsKKworCXRoZV9yZXBvc2l0b3J5LT5zdWJtb2R1bGVfY2FjaGUtPmdpdG1vZHVsZXNfcmVhZCA9IDE7Cit9CisKK2NvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZV9mcm9tX25hbWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlaXNoX25hbWUsCisJCWNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmVwb19yZWFkX2dpdG1vZHVsZXMociwgMSk7CisJcmV0dXJuIGNvbmZpZ19mcm9tKHItPnN1Ym1vZHVsZV9jYWNoZSwgdHJlZWlzaF9uYW1lLCBuYW1lLCBsb29rdXBfbmFtZSk7Cit9CisKK2NvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZV9mcm9tX3BhdGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlaXNoX25hbWUsCisJCWNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmVwb19yZWFkX2dpdG1vZHVsZXMociwgMSk7CisJcmV0dXJuIGNvbmZpZ19mcm9tKHItPnN1Ym1vZHVsZV9jYWNoZSwgdHJlZWlzaF9uYW1lLCBwYXRoLCBsb29rdXBfcGF0aCk7Cit9CisKK3ZvaWQgc3VibW9kdWxlX2ZyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJaWYgKHItPnN1Ym1vZHVsZV9jYWNoZSkKKwkJc3VibW9kdWxlX2NhY2hlX2NsZWFyKHItPnN1Ym1vZHVsZV9jYWNoZSk7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX3ByaW50X2NhbGxiYWNrKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiX2RhdGEpCit7CisJY2hhciAqd2FudGVkX2tleSA9IGNiX2RhdGE7CisKKwlpZiAoIXN0cmNtcCh3YW50ZWRfa2V5LCB2YXIpKQorCQlwcmludGYoIiVzXG4iLCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHByaW50X2NvbmZpZ19mcm9tX2dpdG1vZHVsZXMoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlpbnQgcmV0OworCWNoYXIgKnN0b3JlX2tleTsKKworCXJldCA9IGdpdF9jb25maWdfcGFyc2Vfa2V5KGtleSwgJnN0b3JlX2tleSwgTlVMTCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiBDT05GSUdfSU5WQUxJRF9LRVk7CisKKwljb25maWdfZnJvbV9naXRtb2R1bGVzKGNvbmZpZ19wcmludF9jYWxsYmFjaywgcmVwbywgc3RvcmVfa2V5KTsKKworCWZyZWUoc3RvcmVfa2V5KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNvbmZpZ19zZXRfaW5fZ2l0bW9kdWxlc19maWxlX2dlbnRseShjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCByZXQ7CisKKwlyZXQgPSBnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShHSVRNT0RVTEVTX0ZJTEUsIGtleSwgdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQkvKiBNYXliZSB0aGUgdXNlciBhbHJlYWR5IGRpZCB0aGF0LCBkb24ndCBlcnJvciBvdXQgaGVyZSAqLworCQl3YXJuaW5nKF8oIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiKSwga2V5KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBmZXRjaF9jb25maWcgeworCWludCAqbWF4X2NoaWxkcmVuOworCWludCAqcmVjdXJzZV9zdWJtb2R1bGVzOworfTsKKworc3RhdGljIGludCBnaXRtb2R1bGVzX2ZldGNoX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgZmV0Y2hfY29uZmlnICpjb25maWcgPSBjYjsKKwlpZiAoIXN0cmNtcCh2YXIsICJzdWJtb2R1bGUuZmV0Y2hqb2JzIikpIHsKKwkJKihjb25maWctPm1heF9jaGlsZHJlbikgPSBwYXJzZV9zdWJtb2R1bGVfZmV0Y2hqb2JzKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodmFyLCAiZmV0Y2gucmVjdXJzZXN1Ym1vZHVsZXMiKSkgeworCQkqKGNvbmZpZy0+cmVjdXJzZV9zdWJtb2R1bGVzKSA9IHBhcnNlX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGZldGNoX2NvbmZpZ19mcm9tX2dpdG1vZHVsZXMoaW50ICptYXhfY2hpbGRyZW4sIGludCAqcmVjdXJzZV9zdWJtb2R1bGVzKQoreworCXN0cnVjdCBmZXRjaF9jb25maWcgY29uZmlnID0geworCQkubWF4X2NoaWxkcmVuID0gbWF4X2NoaWxkcmVuLAorCQkucmVjdXJzZV9zdWJtb2R1bGVzID0gcmVjdXJzZV9zdWJtb2R1bGVzCisJfTsKKwljb25maWdfZnJvbV9naXRtb2R1bGVzKGdpdG1vZHVsZXNfZmV0Y2hfY29uZmlnLCB0aGVfcmVwb3NpdG9yeSwgJmNvbmZpZyk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0bW9kdWxlc191cGRhdGVfY2xvbmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsCisJCQkJCSAgdm9pZCAqY2IpCit7CisJaW50ICptYXhfam9icyA9IGNiOworCWlmICghc3RyY21wKHZhciwgInN1Ym1vZHVsZS5mZXRjaGpvYnMiKSkKKwkJKm1heF9qb2JzID0gcGFyc2Vfc3VibW9kdWxlX2ZldGNoam9icyh2YXIsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1cGRhdGVfY2xvbmVfY29uZmlnX2Zyb21fZ2l0bW9kdWxlcyhpbnQgKm1heF9qb2JzKQoreworCWNvbmZpZ19mcm9tX2dpdG1vZHVsZXMoZ2l0bW9kdWxlc191cGRhdGVfY2xvbmVfY29uZmlnLCB0aGVfcmVwb3NpdG9yeSwgJm1heF9qb2JzKTsKK30KZGlmZiAtLWdpdCBhL3N1Ym1vZHVsZS1jb25maWcuaCBiL3N1Ym1vZHVsZS1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTFlMjJjCi0tLSAvZGV2L251bGwKKysrIGIvc3VibW9kdWxlLWNvbmZpZy5oCkBAIC0wLDAgKzEsMTA4IEBACisjaWZuZGVmIFNVQk1PRFVMRV9DT05GSUdfQ0FDSEVfSAorI2RlZmluZSBTVUJNT0RVTEVfQ09ORklHX0NBQ0hFX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCisvKioKKyAqIFRoZSBzdWJtb2R1bGUgY29uZmlnIGNhY2hlIEFQSSBhbGxvd3MgdG8gcmVhZCBzdWJtb2R1bGUKKyAqIGNvbmZpZ3VyYXRpb25zL2luZm9ybWF0aW9uIGZyb20gc3BlY2lmaWVkIHJldmlzaW9ucy4gSW50ZXJuYWxseQorICogaW5mb3JtYXRpb24gaXMgbGF6aWx5IHJlYWQgaW50byBhIGNhY2hlIHRoYXQgaXMgdXNlZCB0byBhdm9pZAorICogdW5uZWNlc3NhcnkgcGFyc2luZyBvZiB0aGUgc2FtZSAuZ2l0bW9kdWxlcyBmaWxlcy4gTG9va3VwcyBjYW4gYmUgZG9uZSBieQorICogc3VibW9kdWxlIHBhdGggb3IgbmFtZS4KKyAqCisgKiBVc2FnZQorICogLS0tLS0KKyAqCisgKiBUaGUgY2FsbGVyIGNhbiBsb29rIHVwIGluZm9ybWF0aW9uIGFib3V0IHN1Ym1vZHVsZXMgYnkgdXNpbmcgdGhlCisgKiBgc3VibW9kdWxlX2Zyb21fcGF0aCgpYCBvciBgc3VibW9kdWxlX2Zyb21fbmFtZSgpYCBmdW5jdGlvbnMuIFRoZXkgcmV0dXJuCisgKiBhIGBzdHJ1Y3Qgc3VibW9kdWxlYCB3aGljaCBjb250YWlucyB0aGUgdmFsdWVzLiBUaGUgQVBJIGF1dG9tYXRpY2FsbHkKKyAqIGluaXRpYWxpemVzIGFuZCBhbGxvY2F0ZXMgdGhlIG5lZWRlZCBpbmZyYXN0cnVjdHVyZSBvbi1kZW1hbmQuIElmIHRoZQorICogY2FsbGVyIGRvZXMgb25seSB3YW50IHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSByZXZpc2lvbnMgdGhlIGluaXRpYWxpemF0aW9uCisgKiBjYW4gYmUgc2tpcHBlZC4KKyAqCisgKiBJZiB0aGUgaW50ZXJuYWwgY2FjaGUgbWlnaHQgZ3JvdyB0b28gYmlnIG9yIHdoZW4gdGhlIGNhbGxlciBpcyBkb25lIHdpdGgKKyAqIHRoZSBBUEksIGFsbCBpbnRlcm5hbGx5IGNhY2hlZCB2YWx1ZXMgY2FuIGJlIGZyZWVkIHdpdGggc3VibW9kdWxlX2ZyZWUoKS4KKyAqCisgKi8KKworLyoKKyAqIFN1Ym1vZHVsZSBlbnRyeSBjb250YWluaW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIGNlcnRhaW4gc3VibW9kdWxlCisgKiBpbiBhIGNlcnRhaW4gcmV2aXNpb24uIEl0IGlzIHJldHVybmVkIGJ5IHRoZSBsb29rdXAgZnVuY3Rpb25zLgorICovCitzdHJ1Y3Qgc3VibW9kdWxlIHsKKwljb25zdCBjaGFyICpwYXRoOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqdXJsOworCWludCBmZXRjaF9yZWN1cnNlOworCWNvbnN0IGNoYXIgKmlnbm9yZTsKKwljb25zdCBjaGFyICpicmFuY2g7CisJc3RydWN0IHN1Ym1vZHVsZV91cGRhdGVfc3RyYXRlZ3kgdXBkYXRlX3N0cmF0ZWd5OworCS8qIHRoZSBvYmplY3QgaWQgb2YgdGhlIHJlc3BvbnNpYmxlIC5naXRtb2R1bGVzIGZpbGUgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2lkIGdpdG1vZHVsZXNfb2lkOworCWludCByZWNvbW1lbmRfc2hhbGxvdzsKK307CisKKyNkZWZpbmUgU1VCTU9EVUxFX0lOSVQgeyBOVUxMLCBOVUxMLCBOVUxMLCBSRUNVUlNFX1NVQk1PRFVMRVNfTk9ORSwgXAorCU5VTEwsIE5VTEwsIFNVQk1PRFVMRV9VUERBVEVfU1RSQVRFR1lfSU5JVCwgeyB7IDAgfSB9LCAtMSB9OworCitzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlOworc3RydWN0IHJlcG9zaXRvcnk7CisKK3ZvaWQgc3VibW9kdWxlX2NhY2hlX2ZyZWUoc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSAqY2FjaGUpOworCitpbnQgcGFyc2Vfc3VibW9kdWxlX2ZldGNoam9icyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2ludCBwYXJzZV9mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXNfYXJnKGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqYXJnKTsKK3N0cnVjdCBvcHRpb247CitpbnQgb3B0aW9uX2ZldGNoX3BhcnNlX3JlY3Vyc2Vfc3VibW9kdWxlcyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpOworaW50IHBhcnNlX3VwZGF0ZV9yZWN1cnNlX3N1Ym1vZHVsZXNfYXJnKGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqYXJnKTsKK2ludCBwYXJzZV9wdXNoX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcoY29uc3QgY2hhciAqb3B0LCBjb25zdCBjaGFyICphcmcpOwordm9pZCByZXBvX3JlYWRfZ2l0bW9kdWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgaW50IHNraXBfaWZfcmVhZCk7Cit2b2lkIGdpdG1vZHVsZXNfY29uZmlnX29pZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXRfb2lkKTsKKworLyoqCisgKiBTYW1lIGFzIHN1Ym1vZHVsZV9mcm9tX3BhdGggYnV0IGxvb2t1cCBieSBuYW1lLgorICovCitjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGVfZnJvbV9uYW1lKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY29tbWl0X29yX3RyZWUsCisJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lKTsKKworLyoqCisgKiBHaXZlbiBhIHRyZWUtaXNoIGluIHRoZSBzdXBlcnByb2plY3QgYW5kIGEgcGF0aCwgcmV0dXJuIHRoZSBzdWJtb2R1bGUgdGhhdAorICogaXMgYm91bmQgYXQgdGhlIHBhdGggaW4gdGhlIG5hbWVkIHRyZWUuCisgKi8KK2NvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZV9mcm9tX3BhdGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXRfb3JfdHJlZSwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdGgpOworCisvKioKKyAqIFVzZSB0aGVzZSB0byBmcmVlIHRoZSBpbnRlcm5hbGx5IGNhY2hlZCB2YWx1ZXMuCisgKi8KK3ZvaWQgc3VibW9kdWxlX2ZyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworCitpbnQgcHJpbnRfY29uZmlnX2Zyb21fZ2l0bW9kdWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqa2V5KTsKK2ludCBjb25maWdfc2V0X2luX2dpdG1vZHVsZXNfZmlsZV9nZW50bHkoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSk7CisKKy8qCisgKiBSZXR1cm5zIDAgaWYgdGhlIG5hbWUgaXMgc3ludGFjdGljYWxseSBhY2NlcHRhYmxlIGFzIGEgc3VibW9kdWxlICJuYW1lIgorICogKGUuZy4sIHRoYXQgbWF5IGJlIGZvdW5kIGluIHRoZSBzdWJzZWN0aW9uIG9mIGEgLmdpdG1vZHVsZXMgZmlsZSkgYW5kIC0xCisgKiBvdGhlcndpc2UuCisgKi8KK2ludCBjaGVja19zdWJtb2R1bGVfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKworLyoKKyAqIE5vdGU6IHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgZXhpc3Qgc29sZWx5IHRvIG1haW50YWluIGJhY2t3YXJkCisgKiBjb21wYXRpYmlsaXR5IHdpdGggJ2ZldGNoJyBhbmQgJ3VwZGF0ZV9jbG9uZScgc3RvcmluZyBjb25maWd1cmF0aW9uIGluCisgKiAnLmdpdG1vZHVsZXMnLgorICoKKyAqIE5ldyBoZWxwZXJzIHRvIHJldHJpZXZlIGFyYml0cmFyeSBjb25maWd1cmF0aW9uIGZyb20gdGhlICcuZ2l0bW9kdWxlcycgZmlsZQorICogc2hvdWxkIE5PVCBiZSBhZGRlZC4KKyAqLwordm9pZCBmZXRjaF9jb25maWdfZnJvbV9naXRtb2R1bGVzKGludCAqbWF4X2NoaWxkcmVuLCBpbnQgKnJlY3Vyc2Vfc3VibW9kdWxlcyk7Cit2b2lkIHVwZGF0ZV9jbG9uZV9jb25maWdfZnJvbV9naXRtb2R1bGVzKGludCAqbWF4X2pvYnMpOworCisjZW5kaWYgLyogU1VCTU9EVUxFX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9zdWJtb2R1bGUuYyBiL3N1Ym1vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZWY1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9zdWJtb2R1bGUuYwpAQCAtMCwwICsxLDIyODcgQEAKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS1jb25maWcuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAib2lkLWFycmF5LmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0aHJlYWQtdXRpbHMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgIndvcmt0cmVlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorCitzdGF0aWMgaW50IGNvbmZpZ191cGRhdGVfcmVjdXJzZV9zdWJtb2R1bGVzID0gUkVDVVJTRV9TVUJNT0RVTEVTX09GRjsKK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZWRfZmV0Y2hfcmVmX3RpcHM7CitzdGF0aWMgc3RydWN0IG9pZF9hcnJheSByZWZfdGlwc19iZWZvcmVfZmV0Y2g7CitzdGF0aWMgc3RydWN0IG9pZF9hcnJheSByZWZfdGlwc19hZnRlcl9mZXRjaDsKKworLyoKKyAqIENoZWNrIGlmIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGlzIHVubWVyZ2VkLiBQYXJzaW5nIG9mIHRoZSAuZ2l0bW9kdWxlcyBmaWxlCisgKiB3aWxsIGJlIGRpc2FibGVkIGJlY2F1c2Ugd2UgY2FuJ3QgZ3Vlc3Mgd2hhdCBtaWdodCBiZSBjb25maWd1cmVkIGluCisgKiAuZ2l0bW9kdWxlcyB1bmxlc3MgdGhlIHVzZXIgcmVzb2x2ZXMgdGhlIGNvbmZsaWN0LgorICovCitpbnQgaXNfZ2l0bW9kdWxlc191bm1lcmdlZChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpbnQgcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBHSVRNT0RVTEVTX0ZJTEUsIHN0cmxlbihHSVRNT0RVTEVTX0ZJTEUpKTsKKwlpZiAocG9zIDwgMCkgeyAvKiAuZ2l0bW9kdWxlcyBub3QgZm91bmQgb3IgaXNuJ3QgbWVyZ2VkICovCisJCXBvcyA9IC0xIC0gcG9zOworCQlpZiAoaXN0YXRlLT5jYWNoZV9uciA+IHBvcykgeyAgLyogdGhlcmUgaXMgYSAuZ2l0bW9kdWxlcyAqLworCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zXTsKKwkJCWlmIChjZV9uYW1lbGVuKGNlKSA9PSBzdHJsZW4oR0lUTU9EVUxFU19GSUxFKSAmJgorCQkJICAgICFzdHJjbXAoY2UtPm5hbWUsIEdJVE1PRFVMRVNfRklMRSkpCisJCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGlzIHNhZmUgdG8gd3JpdGUuCisgKgorICogV3JpdGluZyB0byB0aGUgLmdpdG1vZHVsZXMgZmlsZSByZXF1aXJlcyB0aGF0IHRoZSBmaWxlIGV4aXN0cyBpbiB0aGUKKyAqIHdvcmtpbmcgdHJlZSBvciwgaWYgaXQgZG9lc24ndCwgdGhhdCBhIGJyYW5kIG5ldyAuZ2l0bW9kdWxlcyBmaWxlIGlzIGdvaW5nCisgKiB0byBiZSBjcmVhdGVkIChpLmUuIGl0J3MgbmVpdGhlciBpbiB0aGUgaW5kZXggbm9yIGluIHRoZSBjdXJyZW50IGJyYW5jaCkuCisgKgorICogSXQgaXMgbm90IHNhZmUgdG8gd3JpdGUgdG8gLmdpdG1vZHVsZXMgaWYgaXQncyBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZSBidXQKKyAqIGl0IGlzIGluIHRoZSBpbmRleCBvciBpbiB0aGUgY3VycmVudCBicmFuY2gsIGJlY2F1c2Ugd3JpdGluZyBuZXcgdmFsdWVzCisgKiAoYW5kIHN0YWdpbmcgdGhlbSkgd291bGQgYmxpbmRseSBvdmVyd3JpdGUgQUxMIHRoZSBvbGQgY29udGVudC4KKyAqLworaW50IGlzX3dyaXRpbmdfZ2l0bW9kdWxlc19vayh2b2lkKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXJldHVybiBmaWxlX2V4aXN0cyhHSVRNT0RVTEVTX0ZJTEUpIHx8CisJCShnZXRfb2lkKEdJVE1PRFVMRVNfSU5ERVgsICZvaWQpIDwgMCAmJiBnZXRfb2lkKEdJVE1PRFVMRVNfSEVBRCwgJm9pZCkgPCAwKTsKK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGhhcyB1bnN0YWdlZCBtb2RpZmljYXRpb25zLiAgVGhpcyBtdXN0IGJlCisgKiBjaGVja2VkIGJlZm9yZSBhbGxvd2luZyBtb2RpZmljYXRpb25zIHRvIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIHdpdGggdGhlCisgKiBpbnRlbnRpb24gdG8gc3RhZ2UgdGhlbSBsYXRlciwgYmVjYXVzZSB3aGVuIGNvbnRpbnVpbmcgd2Ugd291bGQgc3RhZ2UgdGhlCisgKiBtb2RpZmljYXRpb25zIHRoZSB1c2VyIGRpZG4ndCBzdGFnZSBoZXJzZWxmIHRvby4gVGhhdCBtaWdodCBjaGFuZ2UgaW4gYQorICogZnV0dXJlIHZlcnNpb24gd2hlbiB3ZSBsZWFybiB0byBzdGFnZSB0aGUgY2hhbmdlcyB3ZSBkbyBvdXJzZWx2ZXMgd2l0aG91dAorICogc3RhZ2luZyBhbnkgcHJldmlvdXMgbW9kaWZpY2F0aW9ucy4KKyAqLworaW50IGlzX3N0YWdpbmdfZ2l0bW9kdWxlc19vayhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpbnQgcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBHSVRNT0RVTEVTX0ZJTEUsIHN0cmxlbihHSVRNT0RVTEVTX0ZJTEUpKTsKKworCWlmICgocG9zID49IDApICYmIChwb3MgPCBpc3RhdGUtPmNhY2hlX25yKSkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaWYgKGxzdGF0KEdJVE1PRFVMRVNfRklMRSwgJnN0KSA9PSAwICYmCisJCSAgICBpZV9tb2RpZmllZChpc3RhdGUsIGlzdGF0ZS0+Y2FjaGVbcG9zXSwgJnN0LCAwKSAmIERBVEFfQ0hBTkdFRCkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGZvcl9lYWNoX3JlbW90ZV9yZWZfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwKKwkJCQkJIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiByZWZzX2Zvcl9lYWNoX3JlbW90ZV9yZWYoZ2V0X3N1Ym1vZHVsZV9yZWZfc3RvcmUoc3VibW9kdWxlKSwKKwkJCQkJZm4sIGNiX2RhdGEpOworfQorCisvKgorICogVHJ5IHRvIHVwZGF0ZSB0aGUgInBhdGgiIGVudHJ5IGluIHRoZSAic3VibW9kdWxlLjxuYW1lPiIgc2VjdGlvbiBvZiB0aGUKKyAqIC5naXRtb2R1bGVzIGZpbGUuIFJldHVybiAwIG9ubHkgaWYgYSAuZ2l0bW9kdWxlcyBmaWxlIHdhcyBmb3VuZCwgYSBzZWN0aW9uCisgKiB3aXRoIHRoZSBjb3JyZWN0IHBhdGg9PG9sZHBhdGg+IHNldHRpbmcgd2FzIGZvdW5kIGFuZCB3ZSBjb3VsZCB1cGRhdGUgaXQuCisgKi8KK2ludCB1cGRhdGVfcGF0aF9pbl9naXRtb2R1bGVzKGNvbnN0IGNoYXIgKm9sZHBhdGgsIGNvbnN0IGNoYXIgKm5ld3BhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiBlbnRyeSA9IFNUUkJVRl9JTklUOworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZTsKKwlpbnQgcmV0OworCisJaWYgKCFmaWxlX2V4aXN0cyhHSVRNT0RVTEVTX0ZJTEUpKSAvKiBEbyBub3RoaW5nIHdpdGhvdXQgLmdpdG1vZHVsZXMgKi8KKwkJcmV0dXJuIC0xOworCisJaWYgKGlzX2dpdG1vZHVsZXNfdW5tZXJnZWQodGhlX3JlcG9zaXRvcnktPmluZGV4KSkKKwkJZGllKF8oIkNhbm5vdCBjaGFuZ2UgdW5tZXJnZWQgLmdpdG1vZHVsZXMsIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIGZpcnN0IikpOworCisJc3VibW9kdWxlID0gc3VibW9kdWxlX2Zyb21fcGF0aCh0aGVfcmVwb3NpdG9yeSwgJm51bGxfb2lkLCBvbGRwYXRoKTsKKwlpZiAoIXN1Ym1vZHVsZSB8fCAhc3VibW9kdWxlLT5uYW1lKSB7CisJCXdhcm5pbmcoXygiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIiksIG9sZHBhdGgpOworCQlyZXR1cm4gLTE7CisJfQorCXN0cmJ1Zl9hZGRzdHIoJmVudHJ5LCAic3VibW9kdWxlLiIpOworCXN0cmJ1Zl9hZGRzdHIoJmVudHJ5LCBzdWJtb2R1bGUtPm5hbWUpOworCXN0cmJ1Zl9hZGRzdHIoJmVudHJ5LCAiLnBhdGgiKTsKKwlyZXQgPSBjb25maWdfc2V0X2luX2dpdG1vZHVsZXNfZmlsZV9nZW50bHkoZW50cnkuYnVmLCBuZXdwYXRoKTsKKwlzdHJidWZfcmVsZWFzZSgmZW50cnkpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUcnkgdG8gcmVtb3ZlIHRoZSAic3VibW9kdWxlLjxuYW1lPiIgc2VjdGlvbiBmcm9tIC5naXRtb2R1bGVzIHdoZXJlIHRoZSBnaXZlbgorICogcGF0aCBpcyBjb25maWd1cmVkLiBSZXR1cm4gMCBvbmx5IGlmIGEgLmdpdG1vZHVsZXMgZmlsZSB3YXMgZm91bmQsIGEgc2VjdGlvbgorICogd2l0aCB0aGUgY29ycmVjdCBwYXRoPTxwYXRoPiBzZXR0aW5nIHdhcyBmb3VuZCBhbmQgd2UgY291bGQgcmVtb3ZlIGl0LgorICovCitpbnQgcmVtb3ZlX3BhdGhfZnJvbV9naXRtb2R1bGVzKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiBzZWN0ID0gU1RSQlVGX0lOSVQ7CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3VibW9kdWxlOworCisJaWYgKCFmaWxlX2V4aXN0cyhHSVRNT0RVTEVTX0ZJTEUpKSAvKiBEbyBub3RoaW5nIHdpdGhvdXQgLmdpdG1vZHVsZXMgKi8KKwkJcmV0dXJuIC0xOworCisJaWYgKGlzX2dpdG1vZHVsZXNfdW5tZXJnZWQodGhlX3JlcG9zaXRvcnktPmluZGV4KSkKKwkJZGllKF8oIkNhbm5vdCBjaGFuZ2UgdW5tZXJnZWQgLmdpdG1vZHVsZXMsIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIGZpcnN0IikpOworCisJc3VibW9kdWxlID0gc3VibW9kdWxlX2Zyb21fcGF0aCh0aGVfcmVwb3NpdG9yeSwgJm51bGxfb2lkLCBwYXRoKTsKKwlpZiAoIXN1Ym1vZHVsZSB8fCAhc3VibW9kdWxlLT5uYW1lKSB7CisJCXdhcm5pbmcoXygiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIiksIHBhdGgpOworCQlyZXR1cm4gLTE7CisJfQorCXN0cmJ1Zl9hZGRzdHIoJnNlY3QsICJzdWJtb2R1bGUuIik7CisJc3RyYnVmX2FkZHN0cigmc2VjdCwgc3VibW9kdWxlLT5uYW1lKTsKKwlpZiAoZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbl9pbl9maWxlKEdJVE1PRFVMRVNfRklMRSwgc2VjdC5idWYsIE5VTEwpIDwgMCkgeworCQkvKiBNYXliZSB0aGUgdXNlciBhbHJlYWR5IGRpZCB0aGF0LCBkb24ndCBlcnJvciBvdXQgaGVyZSAqLworCQl3YXJuaW5nKF8oIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIiksIHBhdGgpOworCQlzdHJidWZfcmVsZWFzZSgmc2VjdCk7CisJCXJldHVybiAtMTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnNlY3QpOworCXJldHVybiAwOworfQorCit2b2lkIHN0YWdlX3VwZGF0ZWRfZ2l0bW9kdWxlcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpZiAoYWRkX2ZpbGVfdG9faW5kZXgoaXN0YXRlLCBHSVRNT0RVTEVTX0ZJTEUsIDApKQorCQlkaWUoXygic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIpKTsKK30KKworLyogVE9ETzogcmVtb3ZlIHRoaXMgZnVuY3Rpb24sIHVzZSByZXBvX3N1Ym1vZHVsZV9pbml0IGluc3RlYWQuICovCitpbnQgYWRkX3N1Ym1vZHVsZV9vZGIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG9iamVjdHNfZGlyZWN0b3J5ID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBzdHJidWZfZ2l0X3BhdGhfc3VibW9kdWxlKCZvYmplY3RzX2RpcmVjdG9yeSwgcGF0aCwgIm9iamVjdHMvIik7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCWlmICghaXNfZGlyZWN0b3J5KG9iamVjdHNfZGlyZWN0b3J5LmJ1ZikpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisJYWRkX3RvX2FsdGVybmF0ZXNfbWVtb3J5KG9iamVjdHNfZGlyZWN0b3J5LmJ1Zik7Citkb25lOgorCXN0cmJ1Zl9yZWxlYXNlKCZvYmplY3RzX2RpcmVjdG9yeSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBzZXRfZGlmZm9wdF9mbGFnc19mcm9tX3N1Ym1vZHVsZV9jb25maWcoc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCwKKwkJCQkJICAgICBjb25zdCBjaGFyICpwYXRoKQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZSA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJCSZudWxsX29pZCwgcGF0aCk7CisJaWYgKHN1Ym1vZHVsZSkgeworCQljb25zdCBjaGFyICppZ25vcmU7CisJCWNoYXIgKmtleTsKKworCQlrZXkgPSB4c3RyZm10KCJzdWJtb2R1bGUuJXMuaWdub3JlIiwgc3VibW9kdWxlLT5uYW1lKTsKKwkJaWYgKHJlcG9fY29uZmlnX2dldF9zdHJpbmdfY29uc3QodGhlX3JlcG9zaXRvcnksIGtleSwgJmlnbm9yZSkpCisJCQlpZ25vcmUgPSBzdWJtb2R1bGUtPmlnbm9yZTsKKwkJZnJlZShrZXkpOworCisJCWlmIChpZ25vcmUpCisJCQloYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKGRpZmZvcHQsIGlnbm9yZSk7CisJCWVsc2UgaWYgKGlzX2dpdG1vZHVsZXNfdW5tZXJnZWQodGhlX3JlcG9zaXRvcnktPmluZGV4KSkKKwkJCWRpZmZvcHQtPmZsYWdzLmlnbm9yZV9zdWJtb2R1bGVzID0gMTsKKwl9Cit9CisKKy8qIENoZWFwIGZ1bmN0aW9uIHRoYXQgb25seSBkZXRlcm1pbmVzIGlmIHdlJ3JlIGludGVyZXN0ZWQgaW4gc3VibW9kdWxlcyBhdCBhbGwgKi8KK2ludCBnaXRfZGVmYXVsdF9zdWJtb2R1bGVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgInN1Ym1vZHVsZS5yZWN1cnNlIikpIHsKKwkJaW50IHYgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkgPworCQkJUkVDVVJTRV9TVUJNT0RVTEVTX09OIDogUkVDVVJTRV9TVUJNT0RVTEVTX09GRjsKKwkJY29uZmlnX3VwZGF0ZV9yZWN1cnNlX3N1Ym1vZHVsZXMgPSB2OworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG9wdGlvbl9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXNfd29ya3RyZWVfdXBkYXRlcihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJCQkgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCkgeworCQljb25maWdfdXBkYXRlX3JlY3Vyc2Vfc3VibW9kdWxlcyA9IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkY7CisJCXJldHVybiAwOworCX0KKwlpZiAoYXJnKQorCQljb25maWdfdXBkYXRlX3JlY3Vyc2Vfc3VibW9kdWxlcyA9CisJCQlwYXJzZV91cGRhdGVfcmVjdXJzZV9zdWJtb2R1bGVzX2FyZyhvcHQtPmxvbmdfbmFtZSwKKwkJCQkJCQkgICAgYXJnKTsKKwllbHNlCisJCWNvbmZpZ191cGRhdGVfcmVjdXJzZV9zdWJtb2R1bGVzID0gUkVDVVJTRV9TVUJNT0RVTEVTX09OOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgaWYgYSBzdWJtb2R1bGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYXQgYSBnaXZlbiAncGF0aCcKKyAqLworaW50IGlzX3N1Ym1vZHVsZV9hY3RpdmUoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHJldCA9IDA7CisJY2hhciAqa2V5ID0gTlVMTDsKKwljaGFyICp2YWx1ZSA9IE5VTEw7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpzbDsKKwljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICptb2R1bGU7CisKKwltb2R1bGUgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKHJlcG8sICZudWxsX29pZCwgcGF0aCk7CisKKwkvKiBlYXJseSByZXR1cm4gaWYgdGhlcmUgaXNuJ3QgYSBwYXRoLT5tb2R1bGUgbWFwcGluZyAqLworCWlmICghbW9kdWxlKQorCQlyZXR1cm4gMDsKKworCS8qIHN1Ym1vZHVsZS48bmFtZT4uYWN0aXZlIGlzIHNldCAqLworCWtleSA9IHhzdHJmbXQoInN1Ym1vZHVsZS4lcy5hY3RpdmUiLCBtb2R1bGUtPm5hbWUpOworCWlmICghcmVwb19jb25maWdfZ2V0X2Jvb2wocmVwbywga2V5LCAmcmV0KSkgeworCQlmcmVlKGtleSk7CisJCXJldHVybiByZXQ7CisJfQorCWZyZWUoa2V5KTsKKworCS8qIHN1Ym1vZHVsZS5hY3RpdmUgaXMgc2V0ICovCisJc2wgPSByZXBvX2NvbmZpZ19nZXRfdmFsdWVfbXVsdGkocmVwbywgInN1Ym1vZHVsZS5hY3RpdmUiKTsKKwlpZiAoc2wpIHsKKwkJc3RydWN0IHBhdGhzcGVjIHBzOworCQlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCQljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIHNsKSB7CisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIGl0ZW0tPnN0cmluZyk7CisJCX0KKworCQlwYXJzZV9wYXRoc3BlYygmcHMsIDAsIDAsIE5VTEwsIGFyZ3MuYXJndik7CisJCXJldCA9IG1hdGNoX3BhdGhzcGVjKHJlcG8tPmluZGV4LCAmcHMsIHBhdGgsIHN0cmxlbihwYXRoKSwgMCwgTlVMTCwgMSk7CisKKwkJYXJndl9hcnJheV9jbGVhcigmYXJncyk7CisJCWNsZWFyX3BhdGhzcGVjKCZwcyk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogZmFsbGJhY2sgdG8gY2hlY2tpbmcgaWYgdGhlIFVSTCBpcyBzZXQgKi8KKwlrZXkgPSB4c3RyZm10KCJzdWJtb2R1bGUuJXMudXJsIiwgbW9kdWxlLT5uYW1lKTsKKwlyZXQgPSAhcmVwb19jb25maWdfZ2V0X3N0cmluZyhyZXBvLCBrZXksICZ2YWx1ZSk7CisKKwlmcmVlKHZhbHVlKTsKKwlmcmVlKGtleSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGlzX3N1Ym1vZHVsZV9wb3B1bGF0ZWRfZ2VudGx5KGNvbnN0IGNoYXIgKnBhdGgsIGludCAqcmV0dXJuX2Vycm9yX2NvZGUpCit7CisJaW50IHJldCA9IDA7CisJY2hhciAqZ2l0ZGlyID0geHN0cmZtdCgiJXMvLmdpdCIsIHBhdGgpOworCisJaWYgKHJlc29sdmVfZ2l0ZGlyX2dlbnRseShnaXRkaXIsIHJldHVybl9lcnJvcl9jb2RlKSkKKwkJcmV0ID0gMTsKKworCWZyZWUoZ2l0ZGlyKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGllcyBpZiB0aGUgcHJvdmlkZWQgJ3ByZWZpeCcgY29ycmVzcG9uZHMgdG8gYW4gdW5wb3B1bGF0ZWQgc3VibW9kdWxlCisgKi8KK3ZvaWQgZGllX2luX3VucG9wdWxhdGVkX3N1Ym1vZHVsZShjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSwgcHJlZml4bGVuOworCisJaWYgKCFwcmVmaXgpCisJCXJldHVybjsKKworCXByZWZpeGxlbiA9IHN0cmxlbihwcmVmaXgpOworCisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJaW50IGNlX2xlbiA9IGNlX25hbWVsZW4oY2UpOworCisJCWlmICghU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJY29udGludWU7CisJCWlmIChwcmVmaXhsZW4gPD0gY2VfbGVuKQorCQkJY29udGludWU7CisJCWlmIChzdHJuY21wKGNlLT5uYW1lLCBwcmVmaXgsIGNlX2xlbikpCisJCQljb250aW51ZTsKKwkJaWYgKHByZWZpeFtjZV9sZW5dICE9ICcvJykKKwkJCWNvbnRpbnVlOworCisJCWRpZShfKCJpbiB1bnBvcHVsYXRlZCBzdWJtb2R1bGUgJyVzJyIpLCBjZS0+bmFtZSk7CisJfQorfQorCisvKgorICogRGllcyBpZiBhbnkgcGF0aHMgaW4gdGhlIHByb3ZpZGVkIHBhdGhzcGVjIGRlc2NlbmRzIGludG8gYSBzdWJtb2R1bGUKKyAqLwordm9pZCBkaWVfcGF0aF9pbnNpZGVfc3VibW9kdWxlKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpCit7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQlpbnQgY2VfbGVuID0gY2VfbmFtZWxlbihjZSk7CisKKwkJaWYgKCFTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQljb250aW51ZTsKKworCQlmb3IgKGogPSAwOyBqIDwgcHMtPm5yIDsgaisrKSB7CisJCQljb25zdCBzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqaXRlbSA9ICZwcy0+aXRlbXNbal07CisKKwkJCWlmIChpdGVtLT5sZW4gPD0gY2VfbGVuKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGl0ZW0tPm1hdGNoW2NlX2xlbl0gIT0gJy8nKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHN0cm5jbXAoY2UtPm5hbWUsIGl0ZW0tPm1hdGNoLCBjZV9sZW4pKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGl0ZW0tPmxlbiA9PSBjZV9sZW4gKyAxKQorCQkJCWNvbnRpbnVlOworCisJCQlkaWUoXygiUGF0aHNwZWMgJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIiksCisJCQkgICAgaXRlbS0+b3JpZ2luYWwsIGNlX2xlbiwgY2UtPm5hbWUpOworCQl9CisJfQorfQorCitlbnVtIHN1Ym1vZHVsZV91cGRhdGVfdHlwZSBwYXJzZV9zdWJtb2R1bGVfdXBkYXRlX3R5cGUoY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAodmFsdWUsICJub25lIikpCisJCXJldHVybiBTTV9VUERBVEVfTk9ORTsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiY2hlY2tvdXQiKSkKKwkJcmV0dXJuIFNNX1VQREFURV9DSEVDS09VVDsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAicmViYXNlIikpCisJCXJldHVybiBTTV9VUERBVEVfUkVCQVNFOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJtZXJnZSIpKQorCQlyZXR1cm4gU01fVVBEQVRFX01FUkdFOworCWVsc2UgaWYgKCp2YWx1ZSA9PSAnIScpCisJCXJldHVybiBTTV9VUERBVEVfQ09NTUFORDsKKwllbHNlCisJCXJldHVybiBTTV9VUERBVEVfVU5TUEVDSUZJRUQ7Cit9CisKK2ludCBwYXJzZV9zdWJtb2R1bGVfdXBkYXRlX3N0cmF0ZWd5KGNvbnN0IGNoYXIgKnZhbHVlLAorCQlzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9zdHJhdGVneSAqZHN0KQoreworCWVudW0gc3VibW9kdWxlX3VwZGF0ZV90eXBlIHR5cGU7CisKKwlmcmVlKCh2b2lkKilkc3QtPmNvbW1hbmQpOworCWRzdC0+Y29tbWFuZCA9IE5VTEw7CisKKwl0eXBlID0gcGFyc2Vfc3VibW9kdWxlX3VwZGF0ZV90eXBlKHZhbHVlKTsKKwlpZiAodHlwZSA9PSBTTV9VUERBVEVfVU5TUEVDSUZJRUQpCisJCXJldHVybiAtMTsKKworCWRzdC0+dHlwZSA9IHR5cGU7CisJaWYgKHR5cGUgPT0gU01fVVBEQVRFX0NPTU1BTkQpCisJCWRzdC0+Y29tbWFuZCA9IHhzdHJkdXAodmFsdWUgKyAxKTsKKworCXJldHVybiAwOworfQorCitjb25zdCBjaGFyICpzdWJtb2R1bGVfc3RyYXRlZ3lfdG9fc3RyaW5nKGNvbnN0IHN0cnVjdCBzdWJtb2R1bGVfdXBkYXRlX3N0cmF0ZWd5ICpzKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzd2l0Y2ggKHMtPnR5cGUpIHsKKwljYXNlIFNNX1VQREFURV9DSEVDS09VVDoKKwkJcmV0dXJuICJjaGVja291dCI7CisJY2FzZSBTTV9VUERBVEVfTUVSR0U6CisJCXJldHVybiAibWVyZ2UiOworCWNhc2UgU01fVVBEQVRFX1JFQkFTRToKKwkJcmV0dXJuICJyZWJhc2UiOworCWNhc2UgU01fVVBEQVRFX05PTkU6CisJCXJldHVybiAibm9uZSI7CisJY2FzZSBTTV9VUERBVEVfVU5TUEVDSUZJRUQ6CisJCXJldHVybiBOVUxMOworCWNhc2UgU01fVVBEQVRFX0NPTU1BTkQ6CisJCXN0cmJ1Zl9hZGRmKCZzYiwgIiElcyIsIHMtPmNvbW1hbmQpOworCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBoYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQsCisJCQkJICBjb25zdCBjaGFyICphcmcpCit7CisJZGlmZm9wdC0+ZmxhZ3MuaWdub3JlX3N1Ym1vZHVsZXMgPSAwOworCWRpZmZvcHQtPmZsYWdzLmlnbm9yZV91bnRyYWNrZWRfaW5fc3VibW9kdWxlcyA9IDA7CisJZGlmZm9wdC0+ZmxhZ3MuaWdub3JlX2RpcnR5X3N1Ym1vZHVsZXMgPSAwOworCisJaWYgKCFzdHJjbXAoYXJnLCAiYWxsIikpCisJCWRpZmZvcHQtPmZsYWdzLmlnbm9yZV9zdWJtb2R1bGVzID0gMTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInVudHJhY2tlZCIpKQorCQlkaWZmb3B0LT5mbGFncy5pZ25vcmVfdW50cmFja2VkX2luX3N1Ym1vZHVsZXMgPSAxOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZGlydHkiKSkKKwkJZGlmZm9wdC0+ZmxhZ3MuaWdub3JlX2RpcnR5X3N1Ym1vZHVsZXMgPSAxOworCWVsc2UgaWYgKHN0cmNtcChhcmcsICJub25lIikpCisJCWRpZShfKCJiYWQgLS1pZ25vcmUtc3VibW9kdWxlcyBhcmd1bWVudDogJXMiKSwgYXJnKTsKKwkvKgorCSAqIFBsZWFzZSB1cGRhdGUgX2dpdF9zdGF0dXMoKSBpbiBnaXQtY29tcGxldGlvbi5iYXNoIHdoZW4geW91CisJICogYWRkIG5ldyBvcHRpb25zCisJICovCit9CisKK3N0YXRpYyBpbnQgcHJlcGFyZV9zdWJtb2R1bGVfc3VtbWFyeShzdHJ1Y3QgcmV2X2luZm8gKnJldiwgY29uc3QgY2hhciAqcGF0aCwKKwkJc3RydWN0IGNvbW1pdCAqbGVmdCwgc3RydWN0IGNvbW1pdCAqcmlnaHQsCisJCXN0cnVjdCBjb21taXRfbGlzdCAqbWVyZ2VfYmFzZXMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0OworCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgcmV2LCBOVUxMKTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgcmV2LCBOVUxMKTsKKwlyZXYtPmxlZnRfcmlnaHQgPSAxOworCXJldi0+Zmlyc3RfcGFyZW50X29ubHkgPSAxOworCWxlZnQtPm9iamVjdC5mbGFncyB8PSBTWU1NRVRSSUNfTEVGVDsKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2LCAmbGVmdC0+b2JqZWN0LCBwYXRoKTsKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2LCAmcmlnaHQtPm9iamVjdCwgcGF0aCk7CisJZm9yIChsaXN0ID0gbWVyZ2VfYmFzZXM7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CisJCWxpc3QtPml0ZW0tPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQlhZGRfcGVuZGluZ19vYmplY3QocmV2LCAmbGlzdC0+aXRlbS0+b2JqZWN0LAorCQkJb2lkX3RvX2hleCgmbGlzdC0+aXRlbS0+b2JqZWN0Lm9pZCkpOworCX0KKwlyZXR1cm4gcHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3N1Ym1vZHVsZV9zdW1tYXJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGRpZmZfb3B0aW9ucyAqbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBmb3JtYXRbXSA9ICIgICVtICVzIjsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ocmV2KSkpIHsKKwkJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwkJY3R4LmRhdGVfbW9kZSA9IHJldi0+ZGF0ZV9tb2RlOworCQljdHgub3V0cHV0X2VuY29kaW5nID0gZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKTsKKwkJc3RyYnVmX3NldGxlbigmc2IsIDApOworCQlyZXBvX2Zvcm1hdF9jb21taXRfbWVzc2FnZShyLCBjb21taXQsIGZvcm1hdCwgJnNiLAorCQkJCSAgICAgICZjdHgpOworCQlzdHJidWZfYWRkY2goJnNiLCAnXG4nKTsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpCisJCQlkaWZmX2VtaXRfc3VibW9kdWxlX2RlbChvLCBzYi5idWYpOworCQllbHNlCisJCQlkaWZmX2VtaXRfc3VibW9kdWxlX2FkZChvLCBzYi5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2Vudl9ub19naXRfZGlyKHN0cnVjdCBhcmd2X2FycmF5ICpvdXQpCit7CisJY29uc3QgY2hhciAqIGNvbnN0ICp2YXI7CisKKwlmb3IgKHZhciA9IGxvY2FsX3JlcG9fZW52OyAqdmFyOyB2YXIrKykgeworCQlpZiAoc3RyY21wKCp2YXIsIENPTkZJR19EQVRBX0VOVklST05NRU5UKSkKKwkJCWFyZ3ZfYXJyYXlfcHVzaChvdXQsICp2YXIpOworCX0KK30KKwordm9pZCBwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudihzdHJ1Y3QgYXJndl9hcnJheSAqb3V0KQoreworCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52X25vX2dpdF9kaXIob3V0KTsKKwlhcmd2X2FycmF5X3B1c2hmKG91dCwgIiVzPSVzIiwgR0lUX0RJUl9FTlZJUk9OTUVOVCwKKwkJCSBERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQpOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2Vudl9pbl9naXRkaXIoc3RydWN0IGFyZ3ZfYXJyYXkgKm91dCkKK3sKKwlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2Vudl9ub19naXRfZGlyKG91dCk7CisJYXJndl9hcnJheV9wdXNoZihvdXQsICIlcz0uIiwgR0lUX0RJUl9FTlZJUk9OTUVOVCk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGEgcmVwb3NpdG9yeSBzdHJ1Y3QgZm9yIGEgc3VibW9kdWxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCAncGF0aCcuCisgKgorICogVW5saWtlIHJlcG9fc3VibW9kdWxlX2luaXQsIHRoaXMgdG9sZXJhdGVzIHN1Ym1vZHVsZXMgbm90IHByZXNlbnQKKyAqIGluIC5naXRtb2R1bGVzLiBUaGlzIGZ1bmN0aW9uIGV4aXN0cyBvbmx5IHRvIHByZXNlcnZlIGhpc3RvcmljYWwgYmVoYXZpb3IsCisgKgorICogUmV0dXJucyB0aGUgcmVwb3NpdG9yeSBzdHJ1Y3Qgb24gc3VjY2VzcywKKyAqIE5VTEwgd2hlbiB0aGUgc3VibW9kdWxlIGlzIG5vdCBwcmVzZW50LgorICovCitzdGF0aWMgc3RydWN0IHJlcG9zaXRvcnkgKm9wZW5fc3VibW9kdWxlKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCByZXBvc2l0b3J5ICpvdXQgPSB4bWFsbG9jKHNpemVvZigqb3V0KSk7CisKKwlpZiAoc3VibW9kdWxlX3RvX2dpdGRpcigmc2IsIHBhdGgpIHx8IHJlcG9faW5pdChvdXQsIHNiLmJ1ZiwgTlVMTCkpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJZnJlZShvdXQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBNYXJrIGl0IGFzIGEgc3VibW9kdWxlICovCisJb3V0LT5zdWJtb2R1bGVfcHJlZml4ID0geHN0cmR1cChwYXRoKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIG91dDsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0byBkaXNwbGF5IHRoZSBzdWJtb2R1bGUgaGVhZGVyIGxpbmUgcHJpb3IgdG8gdGhlIGZ1bGwKKyAqIHN1bW1hcnkgb3V0cHV0LgorICoKKyAqIElmIGl0IGNhbiBsb2NhdGUgdGhlIHN1Ym1vZHVsZSBnaXQgZGlyZWN0b3J5IGl0IHdpbGwgY3JlYXRlIGEgcmVwb3NpdG9yeQorICogaGFuZGxlIGZvciB0aGUgc3VibW9kdWxlIGFuZCBsb29rdXAgYm90aCB0aGUgbGVmdCBhbmQgcmlnaHQgY29tbWl0cyBhbmQKKyAqIHB1dCB0aGVtIGludG8gdGhlIGxlZnQgYW5kIHJpZ2h0IHBvaW50ZXJzLgorICovCitzdGF0aWMgdm9pZCBzaG93X3N1Ym1vZHVsZV9oZWFkZXIoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJY29uc3QgY2hhciAqcGF0aCwKKwkJc3RydWN0IG9iamVjdF9pZCAqb25lLCBzdHJ1Y3Qgb2JqZWN0X2lkICp0d28sCisJCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSwKKwkJc3RydWN0IHJlcG9zaXRvcnkgKnN1YiwKKwkJc3RydWN0IGNvbW1pdCAqKmxlZnQsIHN0cnVjdCBjb21taXQgKipyaWdodCwKKwkJc3RydWN0IGNvbW1pdF9saXN0ICoqbWVyZ2VfYmFzZXMpCit7CisJY29uc3QgY2hhciAqbWVzc2FnZSA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCBmYXN0X2ZvcndhcmQgPSAwLCBmYXN0X2JhY2t3YXJkID0gMDsKKworCWlmIChkaXJ0eV9zdWJtb2R1bGUgJiBESVJUWV9TVUJNT0RVTEVfVU5UUkFDS0VEKQorCQlkaWZmX2VtaXRfc3VibW9kdWxlX3VudHJhY2tlZChvLCBwYXRoKTsKKworCWlmIChkaXJ0eV9zdWJtb2R1bGUgJiBESVJUWV9TVUJNT0RVTEVfTU9ESUZJRUQpCisJCWRpZmZfZW1pdF9zdWJtb2R1bGVfbW9kaWZpZWQobywgcGF0aCk7CisKKwlpZiAoaXNfbnVsbF9vaWQob25lKSkKKwkJbWVzc2FnZSA9ICIobmV3IHN1Ym1vZHVsZSkiOworCWVsc2UgaWYgKGlzX251bGxfb2lkKHR3bykpCisJCW1lc3NhZ2UgPSAiKHN1Ym1vZHVsZSBkZWxldGVkKSI7CisKKwlpZiAoIXN1YikgeworCQlpZiAoIW1lc3NhZ2UpCisJCQltZXNzYWdlID0gIihjb21taXRzIG5vdCBwcmVzZW50KSI7CisJCWdvdG8gb3V0cHV0X2hlYWRlcjsKKwl9CisKKwkvKgorCSAqIEF0dGVtcHQgdG8gbG9va3VwIHRoZSBjb21taXQgcmVmZXJlbmNlcywgYW5kIGRldGVybWluZSBpZiB0aGlzIGlzCisJICogYSBmYXN0IGZvcndhcmQgb3IgZmFzdCBiYWNrd2FyZHMgdXBkYXRlLgorCSAqLworCSpsZWZ0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc3ViLCBvbmUpOworCSpyaWdodCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHN1YiwgdHdvKTsKKworCS8qCisJICogV2FybiBhYm91dCBtaXNzaW5nIGNvbW1pdHMgaW4gdGhlIHN1Ym1vZHVsZSBwcm9qZWN0LCBidXQgb25seSBpZgorCSAqIHRoZXkgYXJlbid0IG51bGwuCisJICovCisJaWYgKCghaXNfbnVsbF9vaWQob25lKSAmJiAhKmxlZnQpIHx8CisJICAgICAoIWlzX251bGxfb2lkKHR3bykgJiYgISpyaWdodCkpCisJCW1lc3NhZ2UgPSAiKGNvbW1pdHMgbm90IHByZXNlbnQpIjsKKworCSptZXJnZV9iYXNlcyA9IHJlcG9fZ2V0X21lcmdlX2Jhc2VzKHN1YiwgKmxlZnQsICpyaWdodCk7CisJaWYgKCptZXJnZV9iYXNlcykgeworCQlpZiAoKCptZXJnZV9iYXNlcyktPml0ZW0gPT0gKmxlZnQpCisJCQlmYXN0X2ZvcndhcmQgPSAxOworCQllbHNlIGlmICgoKm1lcmdlX2Jhc2VzKS0+aXRlbSA9PSAqcmlnaHQpCisJCQlmYXN0X2JhY2t3YXJkID0gMTsKKwl9CisKKwlpZiAob2lkZXEob25lLCB0d28pKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCXJldHVybjsKKwl9CisKK291dHB1dF9oZWFkZXI6CisJc3RyYnVmX2FkZGYoJnNiLCAiU3VibW9kdWxlICVzICIsIHBhdGgpOworCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldigmc2IsIG9uZSwgREVGQVVMVF9BQkJSRVYpOworCXN0cmJ1Zl9hZGRzdHIoJnNiLCAoZmFzdF9iYWNrd2FyZCB8fCBmYXN0X2ZvcndhcmQpID8gIi4uIiA6ICIuLi4iKTsKKwlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJnNiLCB0d28sIERFRkFVTFRfQUJCUkVWKTsKKwlpZiAobWVzc2FnZSkKKwkJc3RyYnVmX2FkZGYoJnNiLCAiICVzXG4iLCBtZXNzYWdlKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzOlxuIiwgZmFzdF9iYWNrd2FyZCA/ICIgKHJld2luZCkiIDogIiIpOworCWRpZmZfZW1pdF9zdWJtb2R1bGVfaGVhZGVyKG8sIHNiLmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCit2b2lkIHNob3dfc3VibW9kdWxlX3N1bW1hcnkoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqcGF0aCwKKwkJc3RydWN0IG9iamVjdF9pZCAqb25lLCBzdHJ1Y3Qgb2JqZWN0X2lkICp0d28sCisJCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBjb21taXQgKmxlZnQgPSBOVUxMLCAqcmlnaHQgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqbWVyZ2VfYmFzZXMgPSBOVUxMOworCXN0cnVjdCByZXBvc2l0b3J5ICpzdWI7CisKKwlzdWIgPSBvcGVuX3N1Ym1vZHVsZShwYXRoKTsKKwlzaG93X3N1Ym1vZHVsZV9oZWFkZXIobywgcGF0aCwgb25lLCB0d28sIGRpcnR5X3N1Ym1vZHVsZSwKKwkJCSAgICAgIHN1YiwgJmxlZnQsICZyaWdodCwgJm1lcmdlX2Jhc2VzKTsKKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBib3RoIGEgbGVmdCBhbmQgYSByaWdodCBwb2ludGVyLCB0aGVyZSBpcyBubworCSAqIHJlYXNvbiB0byB0cnkgYW5kIGRpc3BsYXkgYSBzdW1tYXJ5LiBUaGUgaGVhZGVyIGxpbmUgc2hvdWxkIGNvbnRhaW4KKwkgKiBhbGwgdGhlIGluZm9ybWF0aW9uIHRoZSB1c2VyIG5lZWRzLgorCSAqLworCWlmICghbGVmdCB8fCAhcmlnaHQgfHwgIXN1YikKKwkJZ290byBvdXQ7CisKKwkvKiBUcmVhdCByZXZpc2lvbiB3YWxrZXIgZmFpbHVyZSB0aGUgc2FtZSBhcyBtaXNzaW5nIGNvbW1pdHMgKi8KKwlpZiAocHJlcGFyZV9zdWJtb2R1bGVfc3VtbWFyeSgmcmV2LCBwYXRoLCBsZWZ0LCByaWdodCwgbWVyZ2VfYmFzZXMpKSB7CisJCWRpZmZfZW1pdF9zdWJtb2R1bGVfZXJyb3IobywgIihyZXZpc2lvbiB3YWxrZXIgZmFpbGVkKVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXByaW50X3N1Ym1vZHVsZV9zdW1tYXJ5KHN1YiwgJnJldiwgbyk7CisKK291dDoKKwlpZiAobWVyZ2VfYmFzZXMpCisJCWZyZWVfY29tbWl0X2xpc3QobWVyZ2VfYmFzZXMpOworCWNsZWFyX2NvbW1pdF9tYXJrcyhsZWZ0LCB+MCk7CisJY2xlYXJfY29tbWl0X21hcmtzKHJpZ2h0LCB+MCk7CisJaWYgKHN1YikgeworCQlyZXBvX2NsZWFyKHN1Yik7CisJCWZyZWUoc3ViKTsKKwl9Cit9CisKK3ZvaWQgc2hvd19zdWJtb2R1bGVfaW5saW5lX2RpZmYoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqcGF0aCwKKwkJc3RydWN0IG9iamVjdF9pZCAqb25lLCBzdHJ1Y3Qgb2JqZWN0X2lkICp0d28sCisJCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSkKK3sKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkID0gdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSwgKm5ld19vaWQgPSB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlOworCXN0cnVjdCBjb21taXQgKmxlZnQgPSBOVUxMLCAqcmlnaHQgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqbWVyZ2VfYmFzZXMgPSBOVUxMOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqc3ViOworCisJc3ViID0gb3Blbl9zdWJtb2R1bGUocGF0aCk7CisJc2hvd19zdWJtb2R1bGVfaGVhZGVyKG8sIHBhdGgsIG9uZSwgdHdvLCBkaXJ0eV9zdWJtb2R1bGUsCisJCQkgICAgICBzdWIsICZsZWZ0LCAmcmlnaHQsICZtZXJnZV9iYXNlcyk7CisKKwkvKiBXZSBuZWVkIGEgdmFsaWQgbGVmdCBhbmQgcmlnaHQgY29tbWl0IHRvIGRpc3BsYXkgYSBkaWZmZXJlbmNlICovCisJaWYgKCEobGVmdCB8fCBpc19udWxsX29pZChvbmUpKSB8fAorCSAgICAhKHJpZ2h0IHx8IGlzX251bGxfb2lkKHR3bykpKQorCQlnb3RvIGRvbmU7CisKKwlpZiAobGVmdCkKKwkJb2xkX29pZCA9IG9uZTsKKwlpZiAocmlnaHQpCisJCW5ld19vaWQgPSB0d287CisKKwljcC5naXRfY21kID0gMTsKKwljcC5kaXIgPSBwYXRoOworCWNwLm91dCA9IC0xOworCWNwLm5vX3N0ZGluID0gMTsKKworCS8qIFRPRE86IG90aGVyIG9wdGlvbnMgbWF5IG5lZWQgdG8gYmUgcGFzc2VkIGhlcmUuICovCisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgImRpZmYiLCAiLS1zdWJtb2R1bGU9ZGlmZiIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmFyZ3MsICItLWNvbG9yPSVzIiwgd2FudF9jb2xvcihvLT51c2VfY29sb3IpID8KKwkJCSAiYWx3YXlzIiA6ICJuZXZlciIpOworCisJaWYgKG8tPmZsYWdzLnJldmVyc2VfZGlmZikgeworCQlhcmd2X2FycmF5X3B1c2hmKCZjcC5hcmdzLCAiLS1zcmMtcHJlZml4PSVzJXMvIiwKKwkJCQkgby0+Yl9wcmVmaXgsIHBhdGgpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjcC5hcmdzLCAiLS1kc3QtcHJlZml4PSVzJXMvIiwKKwkJCQkgby0+YV9wcmVmaXgsIHBhdGgpOworCX0gZWxzZSB7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmFyZ3MsICItLXNyYy1wcmVmaXg9JXMlcy8iLAorCQkJCSBvLT5hX3ByZWZpeCwgcGF0aCk7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmFyZ3MsICItLWRzdC1wcmVmaXg9JXMlcy8iLAorCQkJCSBvLT5iX3ByZWZpeCwgcGF0aCk7CisJfQorCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgb2lkX3RvX2hleChvbGRfb2lkKSk7CisJLyoKKwkgKiBJZiB0aGUgc3VibW9kdWxlIGhhcyBtb2RpZmllZCBjb250ZW50LCB3ZSB3aWxsIGRpZmYgYWdhaW5zdCB0aGUKKwkgKiB3b3JrIHRyZWUsIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHVzZXIgaGFzIGFza2VkIGZvciB0aGUKKwkgKiBkaWZmIGZvcm1hdCBhbmQgd2lzaGVzIHRvIGFjdHVhbGx5IHNlZSBhbGwgZGlmZmVyZW5jZXMgZXZlbiBpZiB0aGV5CisJICogaGF2ZW4ndCB5ZXQgYmVlbiBjb21taXR0ZWQgdG8gdGhlIHN1Ym1vZHVsZSB5ZXQuCisJICovCisJaWYgKCEoZGlydHlfc3VibW9kdWxlICYgRElSVFlfU1VCTU9EVUxFX01PRElGSUVEKSkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBvaWRfdG9faGV4KG5ld19vaWQpKTsKKworCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52KCZjcC5lbnZfYXJyYXkpOworCWlmIChzdGFydF9jb21tYW5kKCZjcCkpCisJCWRpZmZfZW1pdF9zdWJtb2R1bGVfZXJyb3IobywgIihkaWZmIGZhaWxlZClcbiIpOworCisJd2hpbGUgKHN0cmJ1Zl9nZXR3aG9sZWxpbmVfZmQoJnNiLCBjcC5vdXQsICdcbicpICE9IEVPRikKKwkJZGlmZl9lbWl0X3N1Ym1vZHVsZV9waXBldGhyb3VnaChvLCBzYi5idWYsIHNiLmxlbik7CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmNwKSkKKwkJZGlmZl9lbWl0X3N1Ym1vZHVsZV9lcnJvcihvLCAiKGRpZmYgZmFpbGVkKVxuIik7CisKK2RvbmU6CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlpZiAobWVyZ2VfYmFzZXMpCisJCWZyZWVfY29tbWl0X2xpc3QobWVyZ2VfYmFzZXMpOworCWlmIChsZWZ0KQorCQljbGVhcl9jb21taXRfbWFya3MobGVmdCwgfjApOworCWlmIChyaWdodCkKKwkJY2xlYXJfY29tbWl0X21hcmtzKHJpZ2h0LCB+MCk7CisJaWYgKHN1YikgeworCQlyZXBvX2NsZWFyKHN1Yik7CisJCWZyZWUoc3ViKTsKKwl9Cit9CisKK2ludCBzaG91bGRfdXBkYXRlX3N1Ym1vZHVsZXModm9pZCkKK3sKKwlyZXR1cm4gY29uZmlnX3VwZGF0ZV9yZWN1cnNlX3N1Ym1vZHVsZXMgPT0gUkVDVVJTRV9TVUJNT0RVTEVTX09OOworfQorCitjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGVfZnJvbV9jZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCWlmICghU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghc2hvdWxkX3VwZGF0ZV9zdWJtb2R1bGVzKCkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHN1Ym1vZHVsZV9mcm9tX3BhdGgodGhlX3JlcG9zaXRvcnksICZudWxsX29pZCwgY2UtPm5hbWUpOworfQorCitzdGF0aWMgc3RydWN0IG9pZF9hcnJheSAqc3VibW9kdWxlX2NvbW1pdHMoc3RydWN0IHN0cmluZ19saXN0ICpzdWJtb2R1bGVzLAorCQkJCQkgICBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChzdWJtb2R1bGVzLCBuYW1lKTsKKwlpZiAoaXRlbS0+dXRpbCkKKwkJcmV0dXJuIChzdHJ1Y3Qgb2lkX2FycmF5ICopIGl0ZW0tPnV0aWw7CisKKwkvKiBORUVEU1dPUks6IHNob3VsZCB3ZSBoYXZlIG9pZF9hcnJheV9pbml0KCk/ICovCisJaXRlbS0+dXRpbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBvaWRfYXJyYXkpKTsKKwlyZXR1cm4gKHN0cnVjdCBvaWRfYXJyYXkgKikgaXRlbS0+dXRpbDsKK30KKworc3RydWN0IGNvbGxlY3RfY2hhbmdlZF9zdWJtb2R1bGVzX2NiX2RhdGEgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyZXBvOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqY2hhbmdlZDsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXRfb2lkOworfTsKKworLyoKKyAqIHRoaXMgd291bGQgbm9ybWFsbHkgYmUgdHdvIGZ1bmN0aW9uczogZGVmYXVsdF9uYW1lX2Zyb21fcGF0aCgpIGFuZAorICogcGF0aF9mcm9tX2RlZmF1bHRfbmFtZSgpLiBTaW5jZSB0aGUgZGVmYXVsdCBuYW1lIGlzIHRoZSBzYW1lIGFzCisgKiB0aGUgc3VibW9kdWxlIHBhdGggd2UgY2FuIGdldCBhd2F5IHdpdGgganVzdCBvbmUgZnVuY3Rpb24gd2hpY2ggb25seQorICogY2hlY2tzIHdoZXRoZXIgdGhlcmUgaXMgYSBzdWJtb2R1bGUgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGF0IHRoYXQKKyAqIGxvY2F0aW9uLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9uYW1lX29yX3BhdGgoY29uc3QgY2hhciAqcGF0aF9vcl9uYW1lKQoreworCWludCBlcnJvcl9jb2RlOworCisJaWYgKCFpc19zdWJtb2R1bGVfcG9wdWxhdGVkX2dlbnRseShwYXRoX29yX25hbWUsICZlcnJvcl9jb2RlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcGF0aF9vcl9uYW1lOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0X2NoYW5nZWRfc3VibW9kdWxlc19jYihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkJCSAgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJCQkJICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjb2xsZWN0X2NoYW5nZWRfc3VibW9kdWxlc19jYl9kYXRhICptZSA9IGRhdGE7CisJc3RydWN0IHN0cmluZ19saXN0ICpjaGFuZ2VkID0gbWUtPmNoYW5nZWQ7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY29tbWl0X29pZCA9IG1lLT5jb21taXRfb2lkOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJc3RydWN0IG9pZF9hcnJheSAqY29tbWl0czsKKwkJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3VibW9kdWxlOworCQljb25zdCBjaGFyICpuYW1lOworCisJCWlmICghU19JU0dJVExJTksocC0+dHdvLT5tb2RlKSkKKwkJCWNvbnRpbnVlOworCisJCXN1Ym1vZHVsZSA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgobWUtPnJlcG8sCisJCQkJCQljb21taXRfb2lkLCBwLT50d28tPnBhdGgpOworCQlpZiAoc3VibW9kdWxlKQorCQkJbmFtZSA9IHN1Ym1vZHVsZS0+bmFtZTsKKwkJZWxzZSB7CisJCQluYW1lID0gZGVmYXVsdF9uYW1lX29yX3BhdGgocC0+dHdvLT5wYXRoKTsKKwkJCS8qIG1ha2Ugc3VyZSBuYW1lIGRvZXMgbm90IGNvbGxpZGUgd2l0aCBleGlzdGluZyBvbmUgKi8KKwkJCWlmIChuYW1lKQorCQkJCXN1Ym1vZHVsZSA9IHN1Ym1vZHVsZV9mcm9tX25hbWUobWUtPnJlcG8sCisJCQkJCQkJCWNvbW1pdF9vaWQsIG5hbWUpOworCQkJaWYgKHN1Ym1vZHVsZSkgeworCQkJCXdhcm5pbmcoXygiU3VibW9kdWxlIGluIGNvbW1pdCAlcyBhdCBwYXRoOiAiCisJCQkJCSInJXMnIGNvbGxpZGVzIHdpdGggYSBzdWJtb2R1bGUgbmFtZWQgIgorCQkJCQkidGhlIHNhbWUuIFNraXBwaW5nIGl0LiIpLAorCQkJCQlvaWRfdG9faGV4KGNvbW1pdF9vaWQpLCBwLT50d28tPnBhdGgpOworCQkJCW5hbWUgPSBOVUxMOworCQkJfQorCQl9CisKKwkJaWYgKCFuYW1lKQorCQkJY29udGludWU7CisKKwkJY29tbWl0cyA9IHN1Ym1vZHVsZV9jb21taXRzKGNoYW5nZWQsIG5hbWUpOworCQlvaWRfYXJyYXlfYXBwZW5kKGNvbW1pdHMsICZwLT50d28tPm9pZCk7CisJfQorfQorCisvKgorICogQ29sbGVjdCB0aGUgcGF0aHMgb2Ygc3VibW9kdWxlcyBpbiAnY2hhbmdlZCcgd2hpY2ggaGF2ZSBjaGFuZ2VkIGJhc2VkIG9uCisgKiB0aGUgcmV2aXNpb25zIGFzIHNwZWNpZmllZCBpbiAnYXJndicuICBFYWNoIGVudHJ5IGluICdjaGFuZ2VkJyB3aWxsIGFsc28KKyAqIGhhdmUgYSBjb3JyZXNwb25kaW5nICdzdHJ1Y3Qgb2lkX2FycmF5JyAoaW4gdGhlICd1dGlsJyBmaWVsZCkgd2hpY2ggbGlzdHMKKyAqIHdoYXQgdGhlIHN1Ym1vZHVsZSBwb2ludGVycyB3ZXJlIHVwZGF0ZWQgdG8gZHVyaW5nIHRoZSBjaGFuZ2UuCisgKi8KK3N0YXRpYyB2b2lkIGNvbGxlY3RfY2hhbmdlZF9zdWJtb2R1bGVzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNoYW5nZWQsCisJCQkJICAgICAgIHN0cnVjdCBhcmd2X2FycmF5ICphcmd2KQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJcmVwb19pbml0X3JldmlzaW9ucyhyLCAmcmV2LCBOVUxMKTsKKwlzZXR1cF9yZXZpc2lvbnMoYXJndi0+YXJnYywgYXJndi0+YXJndiwgJnJldiwgTlVMTCk7CisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2KSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24oJnJldikpKSB7CisJCXN0cnVjdCByZXZfaW5mbyBkaWZmX3JldjsKKwkJc3RydWN0IGNvbGxlY3RfY2hhbmdlZF9zdWJtb2R1bGVzX2NiX2RhdGEgZGF0YTsKKwkJZGF0YS5yZXBvID0gcjsKKwkJZGF0YS5jaGFuZ2VkID0gY2hhbmdlZDsKKwkJZGF0YS5jb21taXRfb2lkID0gJmNvbW1pdC0+b2JqZWN0Lm9pZDsKKworCQlyZXBvX2luaXRfcmV2aXNpb25zKHIsICZkaWZmX3JldiwgTlVMTCk7CisJCWRpZmZfcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKwkJZGlmZl9yZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSBjb2xsZWN0X2NoYW5nZWRfc3VibW9kdWxlc19jYjsKKwkJZGlmZl9yZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2tfZGF0YSA9ICZkYXRhOworCQlkaWZmX3RyZWVfY29tYmluZWRfbWVyZ2UoY29tbWl0LCAxLCAmZGlmZl9yZXYpOworCX0KKworCXJlc2V0X3JldmlzaW9uX3dhbGsoKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9zdWJtb2R1bGVzX29pZHMoc3RydWN0IHN0cmluZ19saXN0ICpzdWJtb2R1bGVzKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgc3VibW9kdWxlcykKKwkJb2lkX2FycmF5X2NsZWFyKChzdHJ1Y3Qgb2lkX2FycmF5ICopIGl0ZW0tPnV0aWwpOworCXN0cmluZ19saXN0X2NsZWFyKHN1Ym1vZHVsZXMsIDEpOworfQorCitzdGF0aWMgaW50IGhhc19yZW1vdGUoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX29pZF90b19hcmd2KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSAqYXJndiA9IGRhdGE7CisJYXJndl9hcnJheV9wdXNoKGFyZ3YsIG9pZF90b19oZXgob2lkKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBoYXNfY29tbWl0X2RhdGEgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyZXBvOworCWludCByZXN1bHQ7CisJY29uc3QgY2hhciAqcGF0aDsKK307CisKK3N0YXRpYyBpbnQgY2hlY2tfaGFzX2NvbW1pdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGhhc19jb21taXRfZGF0YSAqY2IgPSBkYXRhOworCisJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gb2lkX29iamVjdF9pbmZvKGNiLT5yZXBvLCBvaWQsIE5VTEwpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBPQkpfQ09NTUlUOgorCQlyZXR1cm4gMDsKKwljYXNlIE9CSl9CQUQ6CisJCS8qCisJCSAqIE9iamVjdCBpcyBtaXNzaW5nIG9yIGludmFsaWQuIElmIGludmFsaWQsIGFuIGVycm9yIG1lc3NhZ2UKKwkJICogaGFzIGFscmVhZHkgYmVlbiBwcmludGVkLgorCQkgKi8KKwkJY2ItPnJlc3VsdCA9IDA7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCWRpZShfKCJzdWJtb2R1bGUgZW50cnkgJyVzJyAoJXMpIGlzIGEgJXMsIG5vdCBhIGNvbW1pdCIpLAorCQkgICAgY2ItPnBhdGgsIG9pZF90b19oZXgob2lkKSwgdHlwZV9uYW1lKHR5cGUpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3VibW9kdWxlX2hhc19jb21taXRzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSBjb25zdCBjaGFyICpwYXRoLAorCQkJCSBzdHJ1Y3Qgb2lkX2FycmF5ICpjb21taXRzKQoreworCXN0cnVjdCBoYXNfY29tbWl0X2RhdGEgaGFzX2NvbW1pdCA9IHsgciwgMSwgcGF0aCB9OworCisJLyoKKwkgKiBQZXJmb3JtIGEgY2hlYXAsIGJ1dCBpbmNvcnJlY3QgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgJ2NvbW1pdHMnLgorCSAqIFRoaXMgaXMgZG9uZSBieSBhZGRpbmcgdGhlIHN1Ym1vZHVsZSdzIG9iamVjdCBzdG9yZSB0byB0aGUgaW4tY29yZQorCSAqIG9iamVjdCBzdG9yZSwgYW5kIHRoZW4gcXVlcnlpbmcgZm9yIGVhY2ggY29tbWl0J3MgZXhpc3RlbmNlLiAgSWYgd2UKKwkgKiBkbyBub3QgaGF2ZSB0aGUgY29tbWl0IG9iamVjdCBhbnl3aGVyZSwgdGhlcmUgaXMgbm8gY2hhbmNlIHdlIGhhdmUKKwkgKiBpdCBpbiB0aGUgb2JqZWN0IHN0b3JlIG9mIHRoZSBjb3JyZWN0IHN1Ym1vZHVsZSBhbmQgaGF2ZSBpdAorCSAqIHJlYWNoYWJsZSBmcm9tIGEgcmVmLCBzbyB3ZSBjYW4gZmFpbCBlYXJseSB3aXRob3V0IHNwYXduaW5nIHJldi1saXN0CisJICogd2hpY2ggaXMgZXhwZW5zaXZlLgorCSAqLworCWlmIChhZGRfc3VibW9kdWxlX29kYihwYXRoKSkKKwkJcmV0dXJuIDA7CisKKwlvaWRfYXJyYXlfZm9yX2VhY2hfdW5pcXVlKGNvbW1pdHMsIGNoZWNrX2hhc19jb21taXQsICZoYXNfY29tbWl0KTsKKworCWlmIChoYXNfY29tbWl0LnJlc3VsdCkgeworCQkvKgorCQkgKiBFdmVuIGlmIHRoZSBzdWJtb2R1bGUgaXMgY2hlY2tlZCBvdXQgYW5kIHRoZSBjb21taXQgaXMKKwkJICogcHJlc2VudCwgbWFrZSBzdXJlIGl0IGV4aXN0cyBpbiB0aGUgc3VibW9kdWxlJ3Mgb2JqZWN0IHN0b3JlCisJCSAqIGFuZCB0aGF0IGl0IGlzIHJlYWNoYWJsZSBmcm9tIGEgcmVmLgorCQkgKi8KKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisKKwkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgInJldi1saXN0IiwgIi1uIiwgIjEiLCBOVUxMKTsKKwkJb2lkX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZShjb21taXRzLCBhcHBlbmRfb2lkX3RvX2FyZ3YsICZjcC5hcmdzKTsKKwkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgIi0tbm90IiwgIi0tYWxsIiwgTlVMTCk7CisKKwkJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoJmNwLmVudl9hcnJheSk7CisJCWNwLmdpdF9jbWQgPSAxOworCQljcC5ub19zdGRpbiA9IDE7CisJCWNwLmRpciA9IHBhdGg7CisKKwkJaWYgKGNhcHR1cmVfY29tbWFuZCgmY3AsICZvdXQsIEdJVF9NQVhfSEVYU1ogKyAxKSB8fCBvdXQubGVuKQorCQkJaGFzX2NvbW1pdC5yZXN1bHQgPSAwOworCisJCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworCX0KKworCXJldHVybiBoYXNfY29tbWl0LnJlc3VsdDsKK30KKworc3RhdGljIGludCBzdWJtb2R1bGVfbmVlZHNfcHVzaGluZyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICBjb25zdCBjaGFyICpwYXRoLAorCQkJCSAgIHN0cnVjdCBvaWRfYXJyYXkgKmNvbW1pdHMpCit7CisJaWYgKCFzdWJtb2R1bGVfaGFzX2NvbW1pdHMociwgcGF0aCwgY29tbWl0cykpCisJCS8qCisJCSAqIE5PVEU6IFdlIGRvIGNvbnNpZGVyIGl0IHNhZmUgdG8gcmV0dXJuICJubyIgaGVyZS4gVGhlCisJCSAqIGNvcnJlY3QgYW5zd2VyIHdvdWxkIGJlICJXZSBkbyBub3Qga25vdyIgaW5zdGVhZCBvZgorCQkgKiAiTm8gcHVzaCBuZWVkZWQiLCBidXQgaXQgaXMgcXVpdGUgaGFyZCB0byBjaGFuZ2UKKwkJICogdGhlIHN1Ym1vZHVsZSBwb2ludGVyIHdpdGhvdXQgaGF2aW5nIHRoZSBzdWJtb2R1bGUKKwkJICogYXJvdW5kLiBJZiBhIHVzZXIgZGlkIGhvd2V2ZXIgY2hhbmdlIHRoZSBzdWJtb2R1bGVzCisJCSAqIHdpdGhvdXQgaGF2aW5nIHRoZSBzdWJtb2R1bGUgYXJvdW5kLCB0aGlzIGluZGljYXRlcworCQkgKiBhbiBleHBlcnQgd2hvIGtub3dzIHdoYXQgdGhleSBhcmUgZG9pbmcgb3IgYQorCQkgKiBtYWludGFpbmVyIGludGVncmF0aW5nIHdvcmsgZnJvbSBvdGhlciBwZW9wbGUuIEluCisJCSAqIGJvdGggY2FzZXMgaXQgc2hvdWxkIGJlIHNhZmUgdG8gc2tpcCB0aGlzIGNoZWNrLgorCQkgKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAoZm9yX2VhY2hfcmVtb3RlX3JlZl9zdWJtb2R1bGUocGF0aCwgaGFzX3JlbW90ZSwgTlVMTCkgPiAwKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlpbnQgbmVlZHNfcHVzaGluZyA9IDA7CisKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAicmV2LWxpc3QiKTsKKwkJb2lkX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZShjb21taXRzLCBhcHBlbmRfb2lkX3RvX2FyZ3YsICZjcC5hcmdzKTsKKwkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgIi0tbm90IiwgIi0tcmVtb3RlcyIsICItbiIsICIxIiAsIE5VTEwpOworCisJCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52KCZjcC5lbnZfYXJyYXkpOworCQljcC5naXRfY21kID0gMTsKKwkJY3Aubm9fc3RkaW4gPSAxOworCQljcC5vdXQgPSAtMTsKKwkJY3AuZGlyID0gcGF0aDsKKwkJaWYgKHN0YXJ0X2NvbW1hbmQoJmNwKSkKKwkJCWRpZShfKCJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QgPGNvbW1pdHM+IC0tbm90IC0tcmVtb3RlcyAtbiAxJyBjb21tYW5kIGluIHN1Ym1vZHVsZSAlcyIpLAorCQkJCQlwYXRoKTsKKwkJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIGNwLm91dCwgdGhlX2hhc2hfYWxnby0+aGV4c3ogKyAxKSkKKwkJCW5lZWRzX3B1c2hpbmcgPSAxOworCQlmaW5pc2hfY29tbWFuZCgmY3ApOworCQljbG9zZShjcC5vdXQpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmV0dXJuIG5lZWRzX3B1c2hpbmc7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBmaW5kX3VucHVzaGVkX3N1Ym1vZHVsZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgIHN0cnVjdCBvaWRfYXJyYXkgKmNvbW1pdHMsCisJCQkgICAgIGNvbnN0IGNoYXIgKnJlbW90ZXNfbmFtZSwKKwkJCSAgICAgc3RydWN0IHN0cmluZ19saXN0ICpuZWVkc19wdXNoaW5nKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBzdWJtb2R1bGVzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKm5hbWU7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJndiA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCS8qIGFyZ3YuYXJndlswXSB3aWxsIGJlIGlnbm9yZWQgYnkgc2V0dXBfcmV2aXNpb25zICovCisJYXJndl9hcnJheV9wdXNoKCZhcmd2LCAiZmluZF91bnB1c2hlZF9zdWJtb2R1bGVzIik7CisJb2lkX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZShjb21taXRzLCBhcHBlbmRfb2lkX3RvX2FyZ3YsICZhcmd2KTsKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3YsICItLW5vdCIpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmFyZ3YsICItLXJlbW90ZXM9JXMiLCByZW1vdGVzX25hbWUpOworCisJY29sbGVjdF9jaGFuZ2VkX3N1Ym1vZHVsZXMociwgJnN1Ym1vZHVsZXMsICZhcmd2KTsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0obmFtZSwgJnN1Ym1vZHVsZXMpIHsKKwkJc3RydWN0IG9pZF9hcnJheSAqY29tbWl0cyA9IG5hbWUtPnV0aWw7CisJCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZTsKKwkJY29uc3QgY2hhciAqcGF0aCA9IE5VTEw7CisKKwkJc3VibW9kdWxlID0gc3VibW9kdWxlX2Zyb21fbmFtZShyLCAmbnVsbF9vaWQsIG5hbWUtPnN0cmluZyk7CisJCWlmIChzdWJtb2R1bGUpCisJCQlwYXRoID0gc3VibW9kdWxlLT5wYXRoOworCQllbHNlCisJCQlwYXRoID0gZGVmYXVsdF9uYW1lX29yX3BhdGgobmFtZS0+c3RyaW5nKTsKKworCQlpZiAoIXBhdGgpCisJCQljb250aW51ZTsKKworCQlpZiAoc3VibW9kdWxlX25lZWRzX3B1c2hpbmcociwgcGF0aCwgY29tbWl0cykpCisJCQlzdHJpbmdfbGlzdF9pbnNlcnQobmVlZHNfcHVzaGluZywgcGF0aCk7CisJfQorCisJZnJlZV9zdWJtb2R1bGVzX29pZHMoJnN1Ym1vZHVsZXMpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3YpOworCisJcmV0dXJuIG5lZWRzX3B1c2hpbmctPm5yOworfQorCitzdGF0aWMgaW50IHB1c2hfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgIGNvbnN0IHN0cnVjdCByZW1vdGUgKnJlbW90ZSwKKwkJCSAgY29uc3Qgc3RydWN0IHJlZnNwZWMgKnJzLAorCQkJICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnB1c2hfb3B0aW9ucywKKwkJCSAgaW50IGRyeV9ydW4pCit7CisJaWYgKGZvcl9lYWNoX3JlbW90ZV9yZWZfc3VibW9kdWxlKHBhdGgsIGhhc19yZW1vdGUsIE5VTEwpID4gMCkgeworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAicHVzaCIpOworCQlpZiAoZHJ5X3J1bikKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi0tZHJ5LXJ1biIpOworCisJCWlmIChwdXNoX29wdGlvbnMgJiYgcHVzaF9vcHRpb25zLT5ucikgeworCQkJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIHB1c2hfb3B0aW9ucykKKwkJCQlhcmd2X2FycmF5X3B1c2hmKCZjcC5hcmdzLCAiLS1wdXNoLW9wdGlvbj0lcyIsCisJCQkJCQkgaXRlbS0+c3RyaW5nKTsKKwkJfQorCisJCWlmIChyZW1vdGUtPm9yaWdpbiAhPSBSRU1PVEVfVU5DT05GSUdVUkVEKSB7CisJCQlpbnQgaTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgcmVtb3RlLT5uYW1lKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBycy0+cmF3X25yOyBpKyspCisJCQkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBycy0+cmF3W2ldKTsKKwkJfQorCisJCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52KCZjcC5lbnZfYXJyYXkpOworCQljcC5naXRfY21kID0gMTsKKwkJY3Aubm9fc3RkaW4gPSAxOworCQljcC5kaXIgPSBwYXRoOworCQlpZiAocnVuX2NvbW1hbmQoJmNwKSkKKwkJCXJldHVybiAwOworCQljbG9zZShjcC5vdXQpOworCX0KKworCXJldHVybiAxOworfQorCisvKgorICogUGVyZm9ybSBhIGNoZWNrIGluIHRoZSBzdWJtb2R1bGUgdG8gc2VlIGlmIHRoZSByZW1vdGUgYW5kIHJlZnNwZWMgd29yay4KKyAqIERpZSBpZiB0aGUgc3VibW9kdWxlIGNhbid0IGJlIHB1c2hlZC4KKyAqLworc3RhdGljIHZvaWQgc3VibW9kdWxlX3B1c2hfY2hlY2soY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqaGVhZCwKKwkJCQkgY29uc3Qgc3RydWN0IHJlbW90ZSAqcmVtb3RlLAorCQkJCSBjb25zdCBzdHJ1Y3QgcmVmc3BlYyAqcnMpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJaW50IGk7CisKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICJzdWJtb2R1bGUtLWhlbHBlciIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgInB1c2gtY2hlY2siKTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIGhlYWQpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgcmVtb3RlLT5uYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBycy0+cmF3X25yOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgcnMtPnJhd1tpXSk7CisKKwlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3AuZW52X2FycmF5KTsKKwljcC5naXRfY21kID0gMTsKKwljcC5ub19zdGRpbiA9IDE7CisJY3Aubm9fc3Rkb3V0ID0gMTsKKwljcC5kaXIgPSBwYXRoOworCisJLyoKKwkgKiBTaW1wbHkgaW5kaWNhdGUgaWYgJ3N1Ym1vZHVsZS0taGVscGVyIHB1c2gtY2hlY2snIGZhaWxlZC4KKwkgKiBNb3JlIGRldGFpbGVkIGVycm9yIGluZm9ybWF0aW9uIHdpbGwgYmUgcHJvdmlkZWQgYnkgdGhlCisJICogY2hpbGQgcHJvY2Vzcy4KKwkgKi8KKwlpZiAocnVuX2NvbW1hbmQoJmNwKSkKKwkJZGllKF8oInByb2Nlc3MgZm9yIHN1Ym1vZHVsZSAnJXMnIGZhaWxlZCIpLCBwYXRoKTsKK30KKworaW50IHB1c2hfdW5wdXNoZWRfc3VibW9kdWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgc3RydWN0IG9pZF9hcnJheSAqY29tbWl0cywKKwkJCSAgICAgY29uc3Qgc3RydWN0IHJlbW90ZSAqcmVtb3RlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgcmVmc3BlYyAqcnMsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcHVzaF9vcHRpb25zLAorCQkJICAgICBpbnQgZHJ5X3J1bikKK3sKKwlpbnQgaSwgcmV0ID0gMTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbmVlZHNfcHVzaGluZyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJaWYgKCFmaW5kX3VucHVzaGVkX3N1Ym1vZHVsZXMociwgY29tbWl0cywKKwkJCQkgICAgICByZW1vdGUtPm5hbWUsICZuZWVkc19wdXNoaW5nKSkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIFZlcmlmeSB0aGF0IHRoZSByZW1vdGUgYW5kIHJlZnNwZWMgY2FuIGJlIHByb3BhZ2F0ZWQgdG8gYWxsCisJICogc3VibW9kdWxlcy4gIFRoaXMgY2hlY2sgY2FuIGJlIHNraXBwZWQgaWYgdGhlIHJlbW90ZSBhbmQgcmVmc3BlYworCSAqIHdvbid0IGJlIHByb3BhZ2F0ZWQgZHVlIHRvIHRoZSByZW1vdGUgYmVpbmcgdW5jb25maWd1cmVkIChlLmcuIGEgVVJMCisJICogaW5zdGVhZCBvZiBhIHJlbW90ZSBuYW1lKS4KKwkgKi8KKwlpZiAocmVtb3RlLT5vcmlnaW4gIT0gUkVNT1RFX1VOQ09ORklHVVJFRCkgeworCQljaGFyICpoZWFkOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWRfb2lkOworCisJCWhlYWQgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIDAsICZoZWFkX29pZCwgTlVMTCk7CisJCWlmICghaGVhZCkKKwkJCWRpZShfKCJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIpKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbmVlZHNfcHVzaGluZy5ucjsgaSsrKQorCQkJc3VibW9kdWxlX3B1c2hfY2hlY2sobmVlZHNfcHVzaGluZy5pdGVtc1tpXS5zdHJpbmcsCisJCQkJCSAgICAgaGVhZCwgcmVtb3RlLCBycyk7CisJCWZyZWUoaGVhZCk7CisJfQorCisJLyogQWN0dWFsbHkgcHVzaCB0aGUgc3VibW9kdWxlcyAqLworCWZvciAoaSA9IDA7IGkgPCBuZWVkc19wdXNoaW5nLm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aCA9IG5lZWRzX3B1c2hpbmcuaXRlbXNbaV0uc3RyaW5nOworCQlmcHJpbnRmKHN0ZGVyciwgXygiUHVzaGluZyBzdWJtb2R1bGUgJyVzJ1xuIiksIHBhdGgpOworCQlpZiAoIXB1c2hfc3VibW9kdWxlKHBhdGgsIHJlbW90ZSwgcnMsCisJCQkJICAgIHB1c2hfb3B0aW9ucywgZHJ5X3J1bikpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJVbmFibGUgdG8gcHVzaCBzdWJtb2R1bGUgJyVzJ1xuIiksIHBhdGgpOworCQkJcmV0ID0gMDsKKwkJfQorCX0KKworCXN0cmluZ19saXN0X2NsZWFyKCZuZWVkc19wdXNoaW5nLCAwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX29pZF90b19hcnJheShjb25zdCBjaGFyICpyZWYsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgICBpbnQgZmxhZ3MsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG9pZF9hcnJheSAqYXJyYXkgPSBkYXRhOworCW9pZF9hcnJheV9hcHBlbmQoYXJyYXksIG9pZCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY2hlY2tfZm9yX25ld19zdWJtb2R1bGVfY29tbWl0cyhzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaWYgKCFpbml0aWFsaXplZF9mZXRjaF9yZWZfdGlwcykgeworCQlmb3JfZWFjaF9yZWYoYXBwZW5kX29pZF90b19hcnJheSwgJnJlZl90aXBzX2JlZm9yZV9mZXRjaCk7CisJCWluaXRpYWxpemVkX2ZldGNoX3JlZl90aXBzID0gMTsKKwl9CisKKwlvaWRfYXJyYXlfYXBwZW5kKCZyZWZfdGlwc19hZnRlcl9mZXRjaCwgb2lkKTsKK30KKworc3RhdGljIHZvaWQgY2FsY3VsYXRlX2NoYW5nZWRfc3VibW9kdWxlX3BhdGhzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNoYW5nZWRfc3VibW9kdWxlX25hbWVzKQoreworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKm5hbWU7CisKKwkvKiBObyBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBubyBzdWJtb2R1bGVzIGNvbmZpZ3VyZWQgKi8KKwlpZiAoIXN1Ym1vZHVsZV9mcm9tX3BhdGgociwgTlVMTCwgTlVMTCkpCisJCXJldHVybjsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgIi0tIik7IC8qIGFyZ3ZbMF0gcHJvZ3JhbSBuYW1lICovCisJb2lkX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZSgmcmVmX3RpcHNfYWZ0ZXJfZmV0Y2gsCisJCQkJICAgYXBwZW5kX29pZF90b19hcmd2LCAmYXJndik7CisJYXJndl9hcnJheV9wdXNoKCZhcmd2LCAiLS1ub3QiKTsKKwlvaWRfYXJyYXlfZm9yX2VhY2hfdW5pcXVlKCZyZWZfdGlwc19iZWZvcmVfZmV0Y2gsCisJCQkJICAgYXBwZW5kX29pZF90b19hcmd2LCAmYXJndik7CisKKwkvKgorCSAqIENvbGxlY3QgYWxsIHN1Ym1vZHVsZXMgKHdoZXRoZXIgY2hlY2tlZCBvdXQgb3Igbm90KSBmb3Igd2hpY2ggbmV3CisJICogY29tbWl0cyBoYXZlIGJlZW4gcmVjb3JkZWQgdXBzdHJlYW0gaW4gImNoYW5nZWRfc3VibW9kdWxlX25hbWVzIi4KKwkgKi8KKwljb2xsZWN0X2NoYW5nZWRfc3VibW9kdWxlcyhyLCBjaGFuZ2VkX3N1Ym1vZHVsZV9uYW1lcywgJmFyZ3YpOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShuYW1lLCBjaGFuZ2VkX3N1Ym1vZHVsZV9uYW1lcykgeworCQlzdHJ1Y3Qgb2lkX2FycmF5ICpjb21taXRzID0gbmFtZS0+dXRpbDsKKwkJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3VibW9kdWxlOworCQljb25zdCBjaGFyICpwYXRoID0gTlVMTDsKKworCQlzdWJtb2R1bGUgPSBzdWJtb2R1bGVfZnJvbV9uYW1lKHIsICZudWxsX29pZCwgbmFtZS0+c3RyaW5nKTsKKwkJaWYgKHN1Ym1vZHVsZSkKKwkJCXBhdGggPSBzdWJtb2R1bGUtPnBhdGg7CisJCWVsc2UKKwkJCXBhdGggPSBkZWZhdWx0X25hbWVfb3JfcGF0aChuYW1lLT5zdHJpbmcpOworCisJCWlmICghcGF0aCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdWJtb2R1bGVfaGFzX2NvbW1pdHMociwgcGF0aCwgY29tbWl0cykpIHsKKwkJCW9pZF9hcnJheV9jbGVhcihjb21taXRzKTsKKwkJCSpuYW1lLT5zdHJpbmcgPSAnXDAnOworCQl9CisJfQorCisJc3RyaW5nX2xpc3RfcmVtb3ZlX2VtcHR5X2l0ZW1zKGNoYW5nZWRfc3VibW9kdWxlX25hbWVzLCAxKTsKKworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3YpOworCW9pZF9hcnJheV9jbGVhcigmcmVmX3RpcHNfYmVmb3JlX2ZldGNoKTsKKwlvaWRfYXJyYXlfY2xlYXIoJnJlZl90aXBzX2FmdGVyX2ZldGNoKTsKKwlpbml0aWFsaXplZF9mZXRjaF9yZWZfdGlwcyA9IDA7Cit9CisKK2ludCBzdWJtb2R1bGVfdG91Y2hlc19pbl9yYW5nZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpleGNsX29pZCwKKwkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICppbmNsX29pZCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3VicyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJaW50IHJldDsKKworCS8qIE5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIG5vIHN1Ym1vZHVsZXMgY29uZmlndXJlZCAqLworCWlmICghc3VibW9kdWxlX2Zyb21fcGF0aChyLCBOVUxMLCBOVUxMKSkKKwkJcmV0dXJuIDA7CisKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLSIpOyAvKiBhcmdzWzBdIHByb2dyYW0gbmFtZSAqLworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb2lkX3RvX2hleChpbmNsX29pZCkpOworCWlmICghaXNfbnVsbF9vaWQoZXhjbF9vaWQpKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tbm90Iik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb2lkX3RvX2hleChleGNsX29pZCkpOworCX0KKworCWNvbGxlY3RfY2hhbmdlZF9zdWJtb2R1bGVzKHIsICZzdWJzLCAmYXJncyk7CisJcmV0ID0gc3Vicy5ucjsKKworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCisJZnJlZV9zdWJtb2R1bGVzX29pZHMoJnN1YnMpOworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBzdWJtb2R1bGVfcGFyYWxsZWxfZmV0Y2ggeworCWludCBjb3VudDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzOworCXN0cnVjdCByZXBvc2l0b3J5ICpyOworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwlpbnQgY29tbWFuZF9saW5lX29wdGlvbjsKKwlpbnQgZGVmYXVsdF9vcHRpb247CisJaW50IHF1aWV0OworCWludCByZXN1bHQ7CisKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY2hhbmdlZF9zdWJtb2R1bGVfbmFtZXM7CisKKwkvKiBQZW5kaW5nIGZldGNoZXMgYnkgT0lEcyAqLworCXN0cnVjdCBmZXRjaF90YXNrICoqb2lkX2ZldGNoX3Rhc2tzOworCWludCBvaWRfZmV0Y2hfdGFza3NfbnIsIG9pZF9mZXRjaF90YXNrc19hbGxvYzsKKworCXN0cnVjdCBzdHJidWYgc3VibW9kdWxlc193aXRoX2Vycm9yczsKK307CisjZGVmaW5lIFNQRl9JTklUIHswLCBBUkdWX0FSUkFZX0lOSVQsIE5VTEwsIE5VTEwsIDAsIDAsIDAsIDAsIFwKKwkJICBTVFJJTkdfTElTVF9JTklUX0RVUCwgXAorCQkgIE5VTEwsIDAsIDAsIFNUUkJVRl9JTklUfQorCitzdGF0aWMgaW50IGdldF9mZXRjaF9yZWN1cnNlX2NvbmZpZyhjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGUsCisJCQkJICAgIHN0cnVjdCBzdWJtb2R1bGVfcGFyYWxsZWxfZmV0Y2ggKnNwZikKK3sKKwlpZiAoc3BmLT5jb21tYW5kX2xpbmVfb3B0aW9uICE9IFJFQ1VSU0VfU1VCTU9EVUxFU19ERUZBVUxUKQorCQlyZXR1cm4gc3BmLT5jb21tYW5kX2xpbmVfb3B0aW9uOworCisJaWYgKHN1Ym1vZHVsZSkgeworCQljaGFyICprZXk7CisJCWNvbnN0IGNoYXIgKnZhbHVlOworCisJCWludCBmZXRjaF9yZWN1cnNlID0gc3VibW9kdWxlLT5mZXRjaF9yZWN1cnNlOworCQlrZXkgPSB4c3RyZm10KCJzdWJtb2R1bGUuJXMuZmV0Y2hSZWN1cnNlU3VibW9kdWxlcyIsIHN1Ym1vZHVsZS0+bmFtZSk7CisJCWlmICghcmVwb19jb25maWdfZ2V0X3N0cmluZ19jb25zdChzcGYtPnIsIGtleSwgJnZhbHVlKSkgeworCQkJZmV0Y2hfcmVjdXJzZSA9IHBhcnNlX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcoa2V5LCB2YWx1ZSk7CisJCX0KKwkJZnJlZShrZXkpOworCisJCWlmIChmZXRjaF9yZWN1cnNlICE9IFJFQ1VSU0VfU1VCTU9EVUxFU19OT05FKQorCQkJLyogbG9jYWwgY29uZmlnIG92ZXJydWxlcyBldmVyeXRoaW5nIGV4Y2VwdCBjb21tYW5kbGluZSAqLworCQkJcmV0dXJuIGZldGNoX3JlY3Vyc2U7CisJfQorCisJcmV0dXJuIHNwZi0+ZGVmYXVsdF9vcHRpb247Cit9CisKKy8qCisgKiBGZXRjaCBpbiBwcm9ncmVzcyAoaWYgY2FsbGJhY2sgZGF0YSkgb3IKKyAqIHBlbmRpbmcgKGlmIGluIG9pZF9mZXRjaF90YXNrcyBpbiBzdHJ1Y3Qgc3VibW9kdWxlX3BhcmFsbGVsX2ZldGNoKQorICovCitzdHJ1Y3QgZmV0Y2hfdGFzayB7CisJc3RydWN0IHJlcG9zaXRvcnkgKnJlcG87CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViOworCXVuc2lnbmVkIGZyZWVfc3ViIDogMTsgLyogRG8gd2UgbmVlZCB0byBmcmVlIHRoZSBzdWJtb2R1bGU/ICovCisKKwlzdHJ1Y3Qgb2lkX2FycmF5ICpjb21taXRzOyAvKiBFbnN1cmUgdGhlc2UgY29tbWl0cyBhcmUgZmV0Y2hlZCAqLworfTsKKworLyoqCisgKiBXaGVuIGEgc3VibW9kdWxlIGlzIG5vdCBkZWZpbmVkIGluIC5naXRtb2R1bGVzLCB3ZSBjYW5ub3QgYWNjZXNzIGl0CisgKiB2aWEgdGhlIHJlZ3VsYXIgc3VibW9kdWxlLWNvbmZpZy4gQ3JlYXRlIGEgZmFrZSBzdWJtb2R1bGUsIHdoaWNoIHdlIGNhbgorICogd29yayBvbi4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKmdldF9ub25fZ2l0bW9kdWxlc19zdWJtb2R1bGUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3VibW9kdWxlICpyZXQgPSBOVUxMOworCWNvbnN0IGNoYXIgKm5hbWUgPSBkZWZhdWx0X25hbWVfb3JfcGF0aChwYXRoKTsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXQgPSB4bWFsbG9jKHNpemVvZigqcmV0KSk7CisJbWVtc2V0KHJldCwgMCwgc2l6ZW9mKCpyZXQpKTsKKwlyZXQtPnBhdGggPSBuYW1lOworCXJldC0+bmFtZSA9IG5hbWU7CisKKwlyZXR1cm4gKGNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKikgcmV0OworfQorCitzdGF0aWMgc3RydWN0IGZldGNoX3Rhc2sgKmZldGNoX3Rhc2tfY3JlYXRlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgICAgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgZmV0Y2hfdGFzayAqdGFzayA9IHhtYWxsb2Moc2l6ZW9mKCp0YXNrKSk7CisJbWVtc2V0KHRhc2ssIDAsIHNpemVvZigqdGFzaykpOworCisJdGFzay0+c3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aChyLCAmbnVsbF9vaWQsIHBhdGgpOworCWlmICghdGFzay0+c3ViKSB7CisJCS8qCisJCSAqIE5vIGVudHJ5IGluIC5naXRtb2R1bGVzPyBUZWNobmljYWxseSBub3QgYSBzdWJtb2R1bGUsCisJCSAqIGJ1dCBoaXN0b3JpY2FsbHkgd2Ugc3VwcG9ydGVkIHJlcG9zaXRvcmllcyB0aGF0IGhhcHBlbiB0byBiZQorCQkgKiBpbi1wbGFjZSB3aGVyZSBhIGdpdGxpbmsgaXMuIEtlZXAgc3VwcG9ydGluZyB0aGVtLgorCQkgKi8KKwkJdGFzay0+c3ViID0gZ2V0X25vbl9naXRtb2R1bGVzX3N1Ym1vZHVsZShwYXRoKTsKKwkJaWYgKCF0YXNrLT5zdWIpIHsKKwkJCWZyZWUodGFzayk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCXRhc2stPmZyZWVfc3ViID0gMTsKKwl9CisKKwlyZXR1cm4gdGFzazsKK30KKworc3RhdGljIHZvaWQgZmV0Y2hfdGFza19yZWxlYXNlKHN0cnVjdCBmZXRjaF90YXNrICpwKQoreworCWlmIChwLT5mcmVlX3N1YikKKwkJZnJlZSgodm9pZCopcC0+c3ViKTsKKwlwLT5mcmVlX3N1YiA9IDA7CisJcC0+c3ViID0gTlVMTDsKKworCWlmIChwLT5yZXBvKQorCQlyZXBvX2NsZWFyKHAtPnJlcG8pOworCUZSRUVfQU5EX05VTEwocC0+cmVwbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVwb3NpdG9yeSAqZ2V0X3N1Ym1vZHVsZV9yZXBvX2ZvcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJCSBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWIpCit7CisJc3RydWN0IHJlcG9zaXRvcnkgKnJldCA9IHhtYWxsb2Moc2l6ZW9mKCpyZXQpKTsKKworCWlmIChyZXBvX3N1Ym1vZHVsZV9pbml0KHJldCwgciwgc3ViKSkgeworCQkvKgorCQkgKiBObyBlbnRyeSBpbiAuZ2l0bW9kdWxlcz8gVGVjaG5pY2FsbHkgbm90IGEgc3VibW9kdWxlLAorCQkgKiBidXQgaGlzdG9yaWNhbGx5IHdlIHN1cHBvcnRlZCByZXBvc2l0b3JpZXMgdGhhdCBoYXBwZW4gdG8gYmUKKwkJICogaW4tcGxhY2Ugd2hlcmUgYSBnaXRsaW5rIGlzLiBLZWVwIHN1cHBvcnRpbmcgdGhlbS4KKwkJICovCisJCXN0cnVjdCBzdHJidWYgZ2l0ZGlyID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9yZXBvX3dvcmt0cmVlX3BhdGgoJmdpdGRpciwgciwgIiVzLy5naXQiLCBzdWItPnBhdGgpOworCQlpZiAocmVwb19pbml0KHJldCwgZ2l0ZGlyLmJ1ZiwgTlVMTCkpIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZnaXRkaXIpOworCQkJZnJlZShyZXQpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJmdpdGRpcik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnZXRfbmV4dF9zdWJtb2R1bGUoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNwLAorCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyLCB2b2lkICpkYXRhLCB2b2lkICoqdGFza19jYikKK3sKKwlzdHJ1Y3Qgc3VibW9kdWxlX3BhcmFsbGVsX2ZldGNoICpzcGYgPSBkYXRhOworCisJZm9yICg7IHNwZi0+Y291bnQgPCBzcGYtPnItPmluZGV4LT5jYWNoZV9ucjsgc3BmLT5jb3VudCsrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBzcGYtPnItPmluZGV4LT5jYWNoZVtzcGYtPmNvdW50XTsKKwkJY29uc3QgY2hhciAqZGVmYXVsdF9hcmd2OworCQlzdHJ1Y3QgZmV0Y2hfdGFzayAqdGFzazsKKworCQlpZiAoIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCWNvbnRpbnVlOworCisJCXRhc2sgPSBmZXRjaF90YXNrX2NyZWF0ZShzcGYtPnIsIGNlLT5uYW1lKTsKKwkJaWYgKCF0YXNrKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChnZXRfZmV0Y2hfcmVjdXJzZV9jb25maWcodGFzay0+c3ViLCBzcGYpKQorCQl7CisJCWRlZmF1bHQ6CisJCWNhc2UgUkVDVVJTRV9TVUJNT0RVTEVTX0RFRkFVTFQ6CisJCWNhc2UgUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORDoKKwkJCWlmICghdGFzay0+c3ViIHx8CisJCQkgICAgIXN0cmluZ19saXN0X2xvb2t1cCgKKwkJCQkJJnNwZi0+Y2hhbmdlZF9zdWJtb2R1bGVfbmFtZXMsCisJCQkJCXRhc2stPnN1Yi0+bmFtZSkpCisJCQkJY29udGludWU7CisJCQlkZWZhdWx0X2FyZ3YgPSAib24tZGVtYW5kIjsKKwkJCWJyZWFrOworCQljYXNlIFJFQ1VSU0VfU1VCTU9EVUxFU19PTjoKKwkJCWRlZmF1bHRfYXJndiA9ICJ5ZXMiOworCQkJYnJlYWs7CisJCWNhc2UgUkVDVVJTRV9TVUJNT0RVTEVTX09GRjoKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdGFzay0+cmVwbyA9IGdldF9zdWJtb2R1bGVfcmVwb19mb3Ioc3BmLT5yLCB0YXNrLT5zdWIpOworCQlpZiAodGFzay0+cmVwbykgeworCQkJc3RydWN0IHN0cmJ1ZiBzdWJtb2R1bGVfcHJlZml4ID0gU1RSQlVGX0lOSVQ7CisJCQljaGlsZF9wcm9jZXNzX2luaXQoY3ApOworCQkJY3AtPmRpciA9IHRhc2stPnJlcG8tPmdpdGRpcjsKKwkJCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52X2luX2dpdGRpcigmY3AtPmVudl9hcnJheSk7CisJCQljcC0+Z2l0X2NtZCA9IDE7CisJCQlpZiAoIXNwZi0+cXVpZXQpCisJCQkJc3RyYnVmX2FkZGYoZXJyLCBfKCJGZXRjaGluZyBzdWJtb2R1bGUgJXMlc1xuIiksCisJCQkJCSAgICBzcGYtPnByZWZpeCwgY2UtPm5hbWUpOworCQkJYXJndl9hcnJheV9pbml0KCZjcC0+YXJncyk7CisJCQlhcmd2X2FycmF5X3B1c2h2KCZjcC0+YXJncywgc3BmLT5hcmdzLmFyZ3YpOworCQkJYXJndl9hcnJheV9wdXNoKCZjcC0+YXJncywgZGVmYXVsdF9hcmd2KTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AtPmFyZ3MsICItLXN1Ym1vZHVsZS1wcmVmaXgiKTsKKworCQkJc3RyYnVmX2FkZGYoJnN1Ym1vZHVsZV9wcmVmaXgsICIlcyVzLyIsCisJCQkJCQkgICAgICAgc3BmLT5wcmVmaXgsCisJCQkJCQkgICAgICAgdGFzay0+c3ViLT5wYXRoKTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AtPmFyZ3MsIHN1Ym1vZHVsZV9wcmVmaXguYnVmKTsKKworCQkJc3BmLT5jb3VudCsrOworCQkJKnRhc2tfY2IgPSB0YXNrOworCisJCQlzdHJidWZfcmVsZWFzZSgmc3VibW9kdWxlX3ByZWZpeCk7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIHsKKworCQkJZmV0Y2hfdGFza19yZWxlYXNlKHRhc2spOworCQkJZnJlZSh0YXNrKTsKKworCQkJLyoKKwkJCSAqIEFuIGVtcHR5IGRpcmVjdG9yeSBpcyBub3JtYWwsCisJCQkgKiB0aGUgc3VibW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZAorCQkJICovCisJCQlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpICYmCisJCQkgICAgIWlzX2VtcHR5X2RpcihjZS0+bmFtZSkpIHsKKwkJCQlzcGYtPnJlc3VsdCA9IDE7CisJCQkJc3RyYnVmX2FkZGYoZXJyLAorCQkJCQkgICAgXygiQ291bGQgbm90IGFjY2VzcyBzdWJtb2R1bGUgJyVzJ1xuIiksCisJCQkJCSAgICBjZS0+bmFtZSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoc3BmLT5vaWRfZmV0Y2hfdGFza3NfbnIpIHsKKwkJc3RydWN0IGZldGNoX3Rhc2sgKnRhc2sgPQorCQkJc3BmLT5vaWRfZmV0Y2hfdGFza3Nbc3BmLT5vaWRfZmV0Y2hfdGFza3NfbnIgLSAxXTsKKwkJc3RydWN0IHN0cmJ1ZiBzdWJtb2R1bGVfcHJlZml4ID0gU1RSQlVGX0lOSVQ7CisJCXNwZi0+b2lkX2ZldGNoX3Rhc2tzX25yLS07CisKKwkJc3RyYnVmX2FkZGYoJnN1Ym1vZHVsZV9wcmVmaXgsICIlcyVzLyIsCisJCQkgICAgc3BmLT5wcmVmaXgsIHRhc2stPnN1Yi0+cGF0aCk7CisKKwkJY2hpbGRfcHJvY2Vzc19pbml0KGNwKTsKKwkJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnZfaW5fZ2l0ZGlyKCZjcC0+ZW52X2FycmF5KTsKKwkJY3AtPmdpdF9jbWQgPSAxOworCQljcC0+ZGlyID0gdGFzay0+cmVwby0+Z2l0ZGlyOworCisJCWFyZ3ZfYXJyYXlfaW5pdCgmY3AtPmFyZ3MpOworCQlhcmd2X2FycmF5X3B1c2h2KCZjcC0+YXJncywgc3BmLT5hcmdzLmFyZ3YpOworCQlhcmd2X2FycmF5X3B1c2goJmNwLT5hcmdzLCAib24tZGVtYW5kIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AtPmFyZ3MsICItLXN1Ym1vZHVsZS1wcmVmaXgiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjcC0+YXJncywgc3VibW9kdWxlX3ByZWZpeC5idWYpOworCisJCS8qIE5FRURTV09SSzogaGF2ZSBnZXRfZGVmYXVsdF9yZW1vdGUgZnJvbSBzdWJtb2R1bGUtLWhlbHBlciAqLworCQlhcmd2X2FycmF5X3B1c2goJmNwLT5hcmdzLCAib3JpZ2luIik7CisJCW9pZF9hcnJheV9mb3JfZWFjaF91bmlxdWUodGFzay0+Y29tbWl0cywKKwkJCQkJICBhcHBlbmRfb2lkX3RvX2FyZ3YsICZjcC0+YXJncyk7CisKKwkJKnRhc2tfY2IgPSB0YXNrOworCQlzdHJidWZfcmVsZWFzZSgmc3VibW9kdWxlX3ByZWZpeCk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZldGNoX3N0YXJ0X2ZhaWx1cmUoc3RydWN0IHN0cmJ1ZiAqZXJyLAorCQkJICAgICAgIHZvaWQgKmNiLCB2b2lkICp0YXNrX2NiKQoreworCXN0cnVjdCBzdWJtb2R1bGVfcGFyYWxsZWxfZmV0Y2ggKnNwZiA9IGNiOworCXN0cnVjdCBmZXRjaF90YXNrICp0YXNrID0gdGFza19jYjsKKworCXNwZi0+cmVzdWx0ID0gMTsKKworCWZldGNoX3Rhc2tfcmVsZWFzZSh0YXNrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21taXRfbWlzc2luZ19pbl9zdWIoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCByZXBvc2l0b3J5ICpzdWJyZXBvID0gZGF0YTsKKworCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IG9pZF9vYmplY3RfaW5mbyhzdWJyZXBvLCBvaWQsIE5VTEwpOworCisJcmV0dXJuIHR5cGUgIT0gT0JKX0NPTU1JVDsKK30KKworc3RhdGljIGludCBmZXRjaF9maW5pc2goaW50IHJldHZhbHVlLCBzdHJ1Y3Qgc3RyYnVmICplcnIsCisJCQl2b2lkICpjYiwgdm9pZCAqdGFza19jYikKK3sKKwlzdHJ1Y3Qgc3VibW9kdWxlX3BhcmFsbGVsX2ZldGNoICpzcGYgPSBjYjsKKwlzdHJ1Y3QgZmV0Y2hfdGFzayAqdGFzayA9IHRhc2tfY2I7CisKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJc3RydWN0IG9pZF9hcnJheSAqY29tbWl0czsKKworCWlmICghdGFzayB8fCAhdGFzay0+c3ViKQorCQlCVUcoImNhbGxiYWNrIGNvb2tpZSBib2d1cyIpOworCisJaWYgKHJldHZhbHVlKSB7CisJCS8qCisJCSAqIE5FRURTV09SSzogVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgb3ZlcmFsbCBmZXRjaAorCQkgKiBmYWlsZWQsIGV2ZW4gdGhvdWdoIHRoZXJlIG1heSBiZSBhIHN1YnNlcXVlbnQgZmV0Y2gKKwkJICogYnkgY29tbWl0IGhhc2ggdGhhdCBtaWdodCB3b3JrLiBJdCBtYXkgYmUgYSBnb29kCisJCSAqIGlkZWEgdG8gbm90IGluZGljYXRlIGZhaWx1cmUgaW4gdGhpcyBjYXNlLCBhbmQgb25seQorCQkgKiBpbmRpY2F0ZSBmYWlsdXJlIGlmIHRoZSBzdWJzZXF1ZW50IGZldGNoIGZhaWxzLgorCQkgKi8KKwkJc3BmLT5yZXN1bHQgPSAxOworCisJCXN0cmJ1Zl9hZGRmKCZzcGYtPnN1Ym1vZHVsZXNfd2l0aF9lcnJvcnMsICJcdCVzXG4iLAorCQkJICAgIHRhc2stPnN1Yi0+bmFtZSk7CisJfQorCisJLyogSXMgdGhpcyB0aGUgc2Vjb25kIHRpbWUgd2UgcHJvY2VzcyB0aGlzIHN1Ym1vZHVsZT8gKi8KKwlpZiAodGFzay0+Y29tbWl0cykKKwkJZ290byBvdXQ7CisKKwlpdCA9IHN0cmluZ19saXN0X2xvb2t1cCgmc3BmLT5jaGFuZ2VkX3N1Ym1vZHVsZV9uYW1lcywgdGFzay0+c3ViLT5uYW1lKTsKKwlpZiAoIWl0KQorCQkvKiBDb3VsZCBiZSBhbiB1bmNoYW5nZWQgc3VibW9kdWxlLCBub3QgY29udGFpbmVkIGluIHRoZSBsaXN0ICovCisJCWdvdG8gb3V0OworCisJY29tbWl0cyA9IGl0LT51dGlsOworCW9pZF9hcnJheV9maWx0ZXIoY29tbWl0cywKKwkJCSBjb21taXRfbWlzc2luZ19pbl9zdWIsCisJCQkgdGFzay0+cmVwbyk7CisKKwkvKiBBcmUgdGhlcmUgY29tbWl0cyB3ZSB3YW50LCBidXQgZG8gbm90IGV4aXN0PyAqLworCWlmIChjb21taXRzLT5ucikgeworCQl0YXNrLT5jb21taXRzID0gY29tbWl0czsKKwkJQUxMT0NfR1JPVyhzcGYtPm9pZF9mZXRjaF90YXNrcywKKwkJCSAgIHNwZi0+b2lkX2ZldGNoX3Rhc2tzX25yICsgMSwKKwkJCSAgIHNwZi0+b2lkX2ZldGNoX3Rhc2tzX2FsbG9jKTsKKwkJc3BmLT5vaWRfZmV0Y2hfdGFza3Nbc3BmLT5vaWRfZmV0Y2hfdGFza3NfbnJdID0gdGFzazsKKwkJc3BmLT5vaWRfZmV0Y2hfdGFza3NfbnIrKzsKKwkJcmV0dXJuIDA7CisJfQorCitvdXQ6CisJZmV0Y2hfdGFza19yZWxlYXNlKHRhc2spOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBmZXRjaF9wb3B1bGF0ZWRfc3VibW9kdWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqb3B0aW9ucywKKwkJCSAgICAgICBjb25zdCBjaGFyICpwcmVmaXgsIGludCBjb21tYW5kX2xpbmVfb3B0aW9uLAorCQkJICAgICAgIGludCBkZWZhdWx0X29wdGlvbiwKKwkJCSAgICAgICBpbnQgcXVpZXQsIGludCBtYXhfcGFyYWxsZWxfam9icykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3VibW9kdWxlX3BhcmFsbGVsX2ZldGNoIHNwZiA9IFNQRl9JTklUOworCisJc3BmLnIgPSByOworCXNwZi5jb21tYW5kX2xpbmVfb3B0aW9uID0gY29tbWFuZF9saW5lX29wdGlvbjsKKwlzcGYuZGVmYXVsdF9vcHRpb24gPSBkZWZhdWx0X29wdGlvbjsKKwlzcGYucXVpZXQgPSBxdWlldDsKKwlzcGYucHJlZml4ID0gcHJlZml4OworCisJaWYgKCFyLT53b3JrdHJlZSkKKwkJZ290byBvdXQ7CisKKwlpZiAocmVwb19yZWFkX2luZGV4KHIpIDwgMCkKKwkJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmc3BmLmFyZ3MsICJmZXRjaCIpOworCWZvciAoaSA9IDA7IGkgPCBvcHRpb25zLT5hcmdjOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaCgmc3BmLmFyZ3MsIG9wdGlvbnMtPmFyZ3ZbaV0pOworCWFyZ3ZfYXJyYXlfcHVzaCgmc3BmLmFyZ3MsICItLXJlY3Vyc2Utc3VibW9kdWxlcy1kZWZhdWx0Iik7CisJLyogZGVmYXVsdCB2YWx1ZSwgIi0tc3VibW9kdWxlLXByZWZpeCIgYW5kIGl0cyB2YWx1ZSBhcmUgYWRkZWQgbGF0ZXIgKi8KKworCWNhbGN1bGF0ZV9jaGFuZ2VkX3N1Ym1vZHVsZV9wYXRocyhyLCAmc3BmLmNoYW5nZWRfc3VibW9kdWxlX25hbWVzKTsKKwlzdHJpbmdfbGlzdF9zb3J0KCZzcGYuY2hhbmdlZF9zdWJtb2R1bGVfbmFtZXMpOworCXJ1bl9wcm9jZXNzZXNfcGFyYWxsZWxfdHIyKG1heF9wYXJhbGxlbF9qb2JzLAorCQkJCSAgIGdldF9uZXh0X3N1Ym1vZHVsZSwKKwkJCQkgICBmZXRjaF9zdGFydF9mYWlsdXJlLAorCQkJCSAgIGZldGNoX2ZpbmlzaCwKKwkJCQkgICAmc3BmLAorCQkJCSAgICJzdWJtb2R1bGUiLCAicGFyYWxsZWwvZmV0Y2giKTsKKworCWlmIChzcGYuc3VibW9kdWxlc193aXRoX2Vycm9ycy5sZW4gPiAwKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiRXJyb3JzIGR1cmluZyBzdWJtb2R1bGUgZmV0Y2g6XG4lcyIpLAorCQkJc3BmLnN1Ym1vZHVsZXNfd2l0aF9lcnJvcnMuYnVmKTsKKworCisJYXJndl9hcnJheV9jbGVhcigmc3BmLmFyZ3MpOworb3V0OgorCWZyZWVfc3VibW9kdWxlc19vaWRzKCZzcGYuY2hhbmdlZF9zdWJtb2R1bGVfbmFtZXMpOworCXJldHVybiBzcGYucmVzdWx0OworfQorCit1bnNpZ25lZCBpc19zdWJtb2R1bGVfbW9kaWZpZWQoY29uc3QgY2hhciAqcGF0aCwgaW50IGlnbm9yZV91bnRyYWNrZWQpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlGSUxFICpmcDsKKwl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUgPSAwOworCWNvbnN0IGNoYXIgKmdpdF9kaXI7CisJaW50IGlnbm9yZV9jcF9leGl0X2NvZGUgPSAwOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzLy5naXQiLCBwYXRoKTsKKwlnaXRfZGlyID0gcmVhZF9naXRmaWxlKGJ1Zi5idWYpOworCWlmICghZ2l0X2RpcikKKwkJZ2l0X2RpciA9IGJ1Zi5idWY7CisJaWYgKCFpc19naXRfZGlyZWN0b3J5KGdpdF9kaXIpKSB7CisJCWlmIChpc19kaXJlY3RvcnkoZ2l0X2RpcikpCisJCQlkaWUoXygiJyVzJyBub3QgcmVjb2duaXplZCBhcyBhIGdpdCByZXBvc2l0b3J5IiksIGdpdF9kaXIpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJLyogVGhlIHN1Ym1vZHVsZSBpcyBub3QgY2hlY2tlZCBvdXQsIHNvIGl0IGlzIG5vdCBtb2RpZmllZCAqLworCQlyZXR1cm4gMDsKKwl9CisJc3RyYnVmX3Jlc2V0KCZidWYpOworCisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgInN0YXR1cyIsICItLXBvcmNlbGFpbj0yIiwgTlVMTCk7CisJaWYgKGlnbm9yZV91bnRyYWNrZWQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi11bm8iKTsKKworCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52KCZjcC5lbnZfYXJyYXkpOworCWNwLmdpdF9jbWQgPSAxOworCWNwLm5vX3N0ZGluID0gMTsKKwljcC5vdXQgPSAtMTsKKwljcC5kaXIgPSBwYXRoOworCWlmIChzdGFydF9jb21tYW5kKCZjcCkpCisJCWRpZShfKCJDb3VsZCBub3QgcnVuICdnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTInIGluIHN1Ym1vZHVsZSAlcyIpLCBwYXRoKTsKKworCWZwID0geGZkb3BlbihjcC5vdXQsICJyIik7CisJd2hpbGUgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoJmJ1ZiwgZnAsICdcbicpICE9IEVPRikgeworCQkvKiByZWd1bGFyIHVudHJhY2tlZCBmaWxlcyAqLworCQlpZiAoYnVmLmJ1ZlswXSA9PSAnPycpCisJCQlkaXJ0eV9zdWJtb2R1bGUgfD0gRElSVFlfU1VCTU9EVUxFX1VOVFJBQ0tFRDsKKworCQlpZiAoYnVmLmJ1ZlswXSA9PSAndScgfHwKKwkJICAgIGJ1Zi5idWZbMF0gPT0gJzEnIHx8CisJCSAgICBidWYuYnVmWzBdID09ICcyJykgeworCQkJLyogVCA9IGxpbmUgdHlwZSwgWFkgPSBzdGF0dXMsIFNTU1MgPSBzdWJtb2R1bGUgc3RhdGUgKi8KKwkJCWlmIChidWYubGVuIDwgc3RybGVuKCJUIFhZIFNTU1MiKSkKKwkJCQlCVUcoImludmFsaWQgc3RhdHVzIC0tcG9yY2VsYWluPTIgbGluZSAlcyIsCisJCQkJICAgIGJ1Zi5idWYpOworCisJCQlpZiAoYnVmLmJ1Zls1XSA9PSAnUycgJiYgYnVmLmJ1Zls4XSA9PSAnVScpCisJCQkJLyogbmVzdGVkIHVudHJhY2tlZCBmaWxlICovCisJCQkJZGlydHlfc3VibW9kdWxlIHw9IERJUlRZX1NVQk1PRFVMRV9VTlRSQUNLRUQ7CisKKwkJCWlmIChidWYuYnVmWzBdID09ICd1JyB8fAorCQkJICAgIGJ1Zi5idWZbMF0gPT0gJzInIHx8CisJCQkgICAgbWVtY21wKGJ1Zi5idWYgKyA1LCAiUy4uVSIsIDQpKQorCQkJCS8qIG90aGVyIGNoYW5nZSAqLworCQkJCWRpcnR5X3N1Ym1vZHVsZSB8PSBESVJUWV9TVUJNT0RVTEVfTU9ESUZJRUQ7CisJCX0KKworCQlpZiAoKGRpcnR5X3N1Ym1vZHVsZSAmIERJUlRZX1NVQk1PRFVMRV9NT0RJRklFRCkgJiYKKwkJICAgICgoZGlydHlfc3VibW9kdWxlICYgRElSVFlfU1VCTU9EVUxFX1VOVFJBQ0tFRCkgfHwKKwkJICAgICBpZ25vcmVfdW50cmFja2VkKSkgeworCQkJLyoKKwkJCSAqIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIGFueSBmdXJ0aGVyIGluZm9ybWF0aW9uIGZyb20KKwkJCSAqIHRoZSBjaGlsZCBhbnkgbW9yZSwgbmVpdGhlciBvdXRwdXQgbm9yIGl0cyBleGl0IGNvZGUuCisJCQkgKi8KKwkJCWlnbm9yZV9jcF9leGl0X2NvZGUgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJZmNsb3NlKGZwKTsKKworCWlmIChmaW5pc2hfY29tbWFuZCgmY3ApICYmICFpZ25vcmVfY3BfZXhpdF9jb2RlKQorCQlkaWUoXygiJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49MicgZmFpbGVkIGluIHN1Ym1vZHVsZSAlcyIpLCBwYXRoKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiBkaXJ0eV9zdWJtb2R1bGU7Cit9CisKK2ludCBzdWJtb2R1bGVfdXNlc19naXRmaWxlKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqYXJndltdID0geworCQkic3VibW9kdWxlIiwKKwkJImZvcmVhY2giLAorCQkiLS1xdWlldCIsCisJCSItLXJlY3Vyc2l2ZSIsCisJCSJ0ZXN0IC1mIC5naXQiLAorCQlOVUxMLAorCX07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpnaXRfZGlyOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzLy5naXQiLCBwYXRoKTsKKwlnaXRfZGlyID0gcmVhZF9naXRmaWxlKGJ1Zi5idWYpOworCWlmICghZ2l0X2RpcikgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmV0dXJuIDA7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJLyogTm93IHRlc3QgdGhhdCBhbGwgbmVzdGVkIHN1Ym1vZHVsZXMgdXNlIGEgZ2l0ZmlsZSB0b28gKi8KKwljcC5hcmd2ID0gYXJndjsKKwlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3AuZW52X2FycmF5KTsKKwljcC5naXRfY21kID0gMTsKKwljcC5ub19zdGRpbiA9IDE7CisJY3Aubm9fc3RkZXJyID0gMTsKKwljcC5ub19zdGRvdXQgPSAxOworCWNwLmRpciA9IHBhdGg7CisJaWYgKHJ1bl9jb21tYW5kKCZjcCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDaGVjayBpZiBpdCBpcyBhIGJhZCBpZGVhIHRvIHJlbW92ZSBhIHN1Ym1vZHVsZSwgaS5lLiBpZiB3ZSdkIGxvc2UgZGF0YQorICogd2hlbiBkb2luZyBzby4KKyAqCisgKiBSZXR1cm4gMSBpZiB3ZSdkIGxvc2UgZGF0YSwgcmV0dXJuIDAgaWYgdGhlIHJlbW92YWwgaXMgZmluZSwKKyAqIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgZm9yIGVycm9ycy4KKyAqLworaW50IGJhZF90b19yZW1vdmVfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzKQoreworCXNzaXplX3QgbGVuOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWZpbGVfZXhpc3RzKHBhdGgpIHx8IGlzX2VtcHR5X2RpcihwYXRoKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN1Ym1vZHVsZV91c2VzX2dpdGZpbGUocGF0aCkpCisJCXJldHVybiAxOworCisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgInN0YXR1cyIsICItLXBvcmNlbGFpbiIsCisJCQkJICAgIi0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSIsIE5VTEwpOworCisJaWYgKGZsYWdzICYgU1VCTU9EVUxFX1JFTU9WQUxfSUdOT1JFX1VOVFJBQ0tFRCkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLXVubyIpOworCWVsc2UKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLXVhbGwiKTsKKworCWlmICghKGZsYWdzICYgU1VCTU9EVUxFX1JFTU9WQUxfSUdOT1JFX0lHTk9SRURfVU5UUkFDS0VEKSkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS1pZ25vcmVkIik7CisKKwlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3AuZW52X2FycmF5KTsKKwljcC5naXRfY21kID0gMTsKKwljcC5ub19zdGRpbiA9IDE7CisJY3Aub3V0ID0gLTE7CisJY3AuZGlyID0gcGF0aDsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY3ApKSB7CisJCWlmIChmbGFncyAmIFNVQk1PRFVMRV9SRU1PVkFMX0RJRV9PTl9FUlJPUikKKwkJCWRpZShfKCJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIiksCisJCQkJcGF0aCk7CisJCXJldCA9IC0xOworCQlnb3RvIG91dDsKKwl9CisKKwlsZW4gPSBzdHJidWZfcmVhZCgmYnVmLCBjcC5vdXQsIDEwMjQpOworCWlmIChsZW4gPiAyKQorCQlyZXQgPSAxOworCWNsb3NlKGNwLm91dCk7CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmNwKSkgeworCQlpZiAoZmxhZ3MgJiBTVUJNT0RVTEVfUkVNT1ZBTF9ESUVfT05fRVJST1IpCisJCQlkaWUoXygiY291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciKSwKKwkJCQlwYXRoKTsKKwkJcmV0ID0gLTE7CisJfQorb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgc3VibW9kdWxlX3Vuc2V0X2NvcmVfd29ya3RyZWUoY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViKQoreworCWNoYXIgKmNvbmZpZ19wYXRoID0geHN0cmZtdCgiJXMvbW9kdWxlcy8lcy9jb25maWciLAorCQkJCSAgICBnZXRfZ2l0X2RpcigpLCBzdWItPm5hbWUpOworCisJaWYgKGdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KGNvbmZpZ19wYXRoLCAiY29yZS53b3JrdHJlZSIsIE5VTEwpKQorCQl3YXJuaW5nKF8oIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciKSwKKwkJCSAgc3ViLT5wYXRoKTsKKworCWZyZWUoY29uZmlnX3BhdGgpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3N1cGVyX3ByZWZpeF9vcl9lbXB0eSh2b2lkKQoreworCWNvbnN0IGNoYXIgKnMgPSBnZXRfc3VwZXJfcHJlZml4KCk7CisJaWYgKCFzKQorCQlzID0gIiI7CisJcmV0dXJuIHM7Cit9CisKK3N0YXRpYyBpbnQgc3VibW9kdWxlX2hhc19kaXJ0eV9pbmRleChjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWIpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3AuZW52X2FycmF5KTsKKworCWNwLmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJkaWZmLWluZGV4IiwgIi0tcXVpZXQiLAorCQkJCSAgICItLWNhY2hlZCIsICJIRUFEIiwgTlVMTCk7CisJY3Aubm9fc3RkaW4gPSAxOworCWNwLm5vX3N0ZG91dCA9IDE7CisJY3AuZGlyID0gc3ViLT5wYXRoOworCWlmIChzdGFydF9jb21tYW5kKCZjcCkpCisJCWRpZShfKCJjb3VsZCBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIiksIHN1Yi0+cGF0aCk7CisKKwlyZXR1cm4gZmluaXNoX2NvbW1hbmQoJmNwKTsKK30KKworc3RhdGljIHZvaWQgc3VibW9kdWxlX3Jlc2V0X2luZGV4KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoJmNwLmVudl9hcnJheSk7CisKKwljcC5naXRfY21kID0gMTsKKwljcC5ub19zdGRpbiA9IDE7CisJY3AuZGlyID0gcGF0aDsKKworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmFyZ3MsICItLXN1cGVyLXByZWZpeD0lcyVzLyIsCisJCQkJICAgZ2V0X3N1cGVyX3ByZWZpeF9vcl9lbXB0eSgpLCBwYXRoKTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAicmVhZC10cmVlIiwgIi11IiwgIi0tcmVzZXQiLCBOVUxMKTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgZW1wdHlfdHJlZV9vaWRfaGV4KCkpOworCisJaWYgKHJ1bl9jb21tYW5kKCZjcCkpCisJCWRpZShfKCJjb3VsZCBub3QgcmVzZXQgc3VibW9kdWxlIGluZGV4IikpOworfQorCisvKioKKyAqIE1vdmVzIGEgc3VibW9kdWxlIGF0IGEgZ2l2ZW4gcGF0aCBmcm9tIGEgZ2l2ZW4gaGVhZCB0byBhbm90aGVyIG5ldyBoZWFkLgorICogRm9yIGVkZ2UgY2FzZXMgKGEgc3VibW9kdWxlIGNvbWluZyBpbnRvIGV4aXN0ZW5jZSBvciByZW1vdmluZyBhIHN1Ym1vZHVsZSkKKyAqIHBhc3MgTlVMTCBmb3Igb2xkIG9yIG5ldyByZXNwZWN0aXZlbHkuCisgKi8KK2ludCBzdWJtb2R1bGVfbW92ZV9oZWFkKGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgY29uc3QgY2hhciAqb2xkX2hlYWQsCisJCQkgY29uc3QgY2hhciAqbmV3X2hlYWQsCisJCQkgdW5zaWduZWQgZmxhZ3MpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViOworCWludCAqZXJyb3JfY29kZV9wdHIsIGVycm9yX2NvZGU7CisKKwlpZiAoIWlzX3N1Ym1vZHVsZV9hY3RpdmUodGhlX3JlcG9zaXRvcnksIHBhdGgpKQorCQlyZXR1cm4gMDsKKworCWlmIChmbGFncyAmIFNVQk1PRFVMRV9NT1ZFX0hFQURfRk9SQ0UpCisJCS8qCisJCSAqIFBhc3Mgbm9uIE5VTEwgcG9pbnRlciB0byBpc19zdWJtb2R1bGVfcG9wdWxhdGVkX2dlbnRseQorCQkgKiB0byBwcmV2ZW50IGRpZSgpLWluZy4gV2UnbGwgdXNlIGNvbm5lY3Rfd29ya190cmVlX2FuZF9naXRfZGlyCisJCSAqIHRvIGZpeHVwIHRoZSBzdWJtb2R1bGUgaW4gdGhlIGZvcmNlIGNhc2UgbGF0ZXIuCisJCSAqLworCQllcnJvcl9jb2RlX3B0ciA9ICZlcnJvcl9jb2RlOworCWVsc2UKKwkJZXJyb3JfY29kZV9wdHIgPSBOVUxMOworCisJaWYgKG9sZF9oZWFkICYmICFpc19zdWJtb2R1bGVfcG9wdWxhdGVkX2dlbnRseShwYXRoLCBlcnJvcl9jb2RlX3B0cikpCisJCXJldHVybiAwOworCisJc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aCh0aGVfcmVwb3NpdG9yeSwgJm51bGxfb2lkLCBwYXRoKTsKKworCWlmICghc3ViKQorCQlCVUcoImNvdWxkIG5vdCBnZXQgc3VibW9kdWxlIGluZm9ybWF0aW9uIGZvciAnJXMnIiwgcGF0aCk7CisKKwlpZiAob2xkX2hlYWQgJiYgIShmbGFncyAmIFNVQk1PRFVMRV9NT1ZFX0hFQURfRk9SQ0UpKSB7CisJCS8qIENoZWNrIGlmIHRoZSBzdWJtb2R1bGUgaGFzIGEgZGlydHkgaW5kZXguICovCisJCWlmIChzdWJtb2R1bGVfaGFzX2RpcnR5X2luZGV4KHN1YikpCisJCQlyZXR1cm4gZXJyb3IoXygic3VibW9kdWxlICclcycgaGFzIGRpcnR5IGluZGV4IiksIHBhdGgpOworCX0KKworCWlmICghKGZsYWdzICYgU1VCTU9EVUxFX01PVkVfSEVBRF9EUllfUlVOKSkgeworCQlpZiAob2xkX2hlYWQpIHsKKwkJCWlmICghc3VibW9kdWxlX3VzZXNfZ2l0ZmlsZShwYXRoKSkKKwkJCQlhYnNvcmJfZ2l0X2Rpcl9pbnRvX3N1cGVycHJvamVjdChwYXRoLAorCQkJCQlBQlNPUkJfR0lURElSX1JFQ1VSU0VfU1VCTU9EVUxFUyk7CisJCX0gZWxzZSB7CisJCQljaGFyICpnaXRkaXIgPSB4c3RyZm10KCIlcy9tb2R1bGVzLyVzIiwKKwkJCQkgICAgZ2V0X2dpdF9kaXIoKSwgc3ViLT5uYW1lKTsKKwkJCWNvbm5lY3Rfd29ya190cmVlX2FuZF9naXRfZGlyKHBhdGgsIGdpdGRpciwgMCk7CisJCQlmcmVlKGdpdGRpcik7CisKKwkJCS8qIG1ha2Ugc3VyZSB0aGUgaW5kZXggaXMgY2xlYW4gYXMgd2VsbCAqLworCQkJc3VibW9kdWxlX3Jlc2V0X2luZGV4KHBhdGgpOworCQl9CisKKwkJaWYgKG9sZF9oZWFkICYmIChmbGFncyAmIFNVQk1PRFVMRV9NT1ZFX0hFQURfRk9SQ0UpKSB7CisJCQljaGFyICpnaXRkaXIgPSB4c3RyZm10KCIlcy9tb2R1bGVzLyVzIiwKKwkJCQkgICAgZ2V0X2dpdF9kaXIoKSwgc3ViLT5uYW1lKTsKKwkJCWNvbm5lY3Rfd29ya190cmVlX2FuZF9naXRfZGlyKHBhdGgsIGdpdGRpciwgMSk7CisJCQlmcmVlKGdpdGRpcik7CisJCX0KKwl9CisKKwlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3AuZW52X2FycmF5KTsKKworCWNwLmdpdF9jbWQgPSAxOworCWNwLm5vX3N0ZGluID0gMTsKKwljcC5kaXIgPSBwYXRoOworCisJYXJndl9hcnJheV9wdXNoZigmY3AuYXJncywgIi0tc3VwZXItcHJlZml4PSVzJXMvIiwKKwkJCWdldF9zdXBlcl9wcmVmaXhfb3JfZW1wdHkoKSwgcGF0aCk7CisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgInJlYWQtdHJlZSIsICItLXJlY3Vyc2Utc3VibW9kdWxlcyIsIE5VTEwpOworCisJaWYgKGZsYWdzICYgU1VCTU9EVUxFX01PVkVfSEVBRF9EUllfUlVOKQorCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItbiIpOworCWVsc2UKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLXUiKTsKKworCWlmIChmbGFncyAmIFNVQk1PRFVMRV9NT1ZFX0hFQURfRk9SQ0UpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi0tcmVzZXQiKTsKKwllbHNlCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi1tIik7CisKKwlpZiAoIShmbGFncyAmIFNVQk1PRFVMRV9NT1ZFX0hFQURfRk9SQ0UpKQorCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIG9sZF9oZWFkID8gb2xkX2hlYWQgOiBlbXB0eV90cmVlX29pZF9oZXgoKSk7CisKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIG5ld19oZWFkID8gbmV3X2hlYWQgOiBlbXB0eV90cmVlX29pZF9oZXgoKSk7CisKKwlpZiAocnVuX2NvbW1hbmQoJmNwKSkgeworCQlyZXQgPSBlcnJvcihfKCJTdWJtb2R1bGUgJyVzJyBjb3VsZCBub3QgYmUgdXBkYXRlZC4iKSwgcGF0aCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghKGZsYWdzICYgU1VCTU9EVUxFX01PVkVfSEVBRF9EUllfUlVOKSkgeworCQlpZiAobmV3X2hlYWQpIHsKKwkJCWNoaWxkX3Byb2Nlc3NfaW5pdCgmY3ApOworCQkJLyogYWxzbyBzZXQgdGhlIEhFQUQgYWNjb3JkaW5nbHkgKi8KKwkJCWNwLmdpdF9jbWQgPSAxOworCQkJY3Aubm9fc3RkaW4gPSAxOworCQkJY3AuZGlyID0gcGF0aDsKKworCQkJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoJmNwLmVudl9hcnJheSk7CisJCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAidXBkYXRlLXJlZiIsICJIRUFEIiwKKwkJCQkJICItLW5vLWRlcmVmIiwgbmV3X2hlYWQsIE5VTEwpOworCisJCQlpZiAocnVuX2NvbW1hbmQoJmNwKSkgeworCQkJCXJldCA9IC0xOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCQlzdHJidWZfYWRkZigmc2IsICIlcy8uZ2l0IiwgcGF0aCk7CisJCQl1bmxpbmtfb3Jfd2FybihzYi5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCQkJaWYgKGlzX2VtcHR5X2RpcihwYXRoKSkKKwkJCQlybWRpcl9vcl93YXJuKHBhdGgpOworCisJCQlzdWJtb2R1bGVfdW5zZXRfY29yZV93b3JrdHJlZShzdWIpOworCQl9CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKK2ludCB2YWxpZGF0ZV9zdWJtb2R1bGVfZ2l0X2RpcihjaGFyICpnaXRfZGlyLCBjb25zdCBjaGFyICpzdWJtb2R1bGVfbmFtZSkKK3sKKwlzaXplX3QgbGVuID0gc3RybGVuKGdpdF9kaXIpLCBzdWZmaXhfbGVuID0gc3RybGVuKHN1Ym1vZHVsZV9uYW1lKTsKKwljaGFyICpwOworCWludCByZXQgPSAwOworCisJaWYgKGxlbiA8PSBzdWZmaXhfbGVuIHx8IChwID0gZ2l0X2RpciArIGxlbiAtIHN1ZmZpeF9sZW4pWy0xXSAhPSAnLycgfHwKKwkgICAgc3RyY21wKHAsIHN1Ym1vZHVsZV9uYW1lKSkKKwkJQlVHKCJzdWJtb2R1bGUgbmFtZSAnJXMnIG5vdCBhIHN1ZmZpeCBvZiBnaXQgZGlyICclcyciLAorCQkgICAgc3VibW9kdWxlX25hbWUsIGdpdF9kaXIpOworCisJLyoKKwkgKiBXZSBwcmV2ZW50IHRoZSBjb250ZW50cyBvZiBzaWJsaW5nIHN1Ym1vZHVsZXMnIGdpdCBkaXJlY3RvcmllcyB0bworCSAqIGNsYXNoLgorCSAqCisJICogRXhhbXBsZTogaGF2aW5nIGEgc3VibW9kdWxlIG5hbWVkIGBoaXBwb2AgYW5kIGFub3RoZXIgb25lIG5hbWVkCisJICogYGhpcHBvL2hvb2tzYCB3b3VsZCByZXN1bHQgaW4gdGhlIGdpdCBkaXJlY3RvcmllcworCSAqIGAuZ2l0L21vZHVsZXMvaGlwcG8vYCBhbmQgYC5naXQvbW9kdWxlcy9oaXBwby9ob29rcy9gLCByZXNwZWN0aXZlbHksCisJICogYnV0IHRoZSBsYXR0ZXIgZGlyZWN0b3J5IGlzIGFscmVhZHkgZGVzaWduYXRlZCB0byBjb250YWluIHRoZSBob29rcworCSAqIG9mIHRoZSBmb3JtZXIuCisJICovCisJZm9yICg7ICpwOyBwKyspIHsKKwkJaWYgKGlzX2Rpcl9zZXAoKnApKSB7CisJCQljaGFyIGMgPSAqcDsKKworCQkJKnAgPSAnXDAnOworCQkJaWYgKGlzX2dpdF9kaXJlY3RvcnkoZ2l0X2RpcikpCisJCQkJcmV0ID0gLTE7CisJCQkqcCA9IGM7CisKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiBlcnJvcihfKCJzdWJtb2R1bGUgZ2l0IGRpciAnJXMnIGlzICIKKwkJCQkJICAgICAgICJpbnNpZGUgZ2l0IGRpciAnJS4qcyciKSwKKwkJCQkJICAgICBnaXRfZGlyLAorCQkJCQkgICAgIChpbnQpKHAgLSBnaXRfZGlyKSwgZ2l0X2Rpcik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEVtYmVkcyBhIHNpbmdsZSBzdWJtb2R1bGVzIGdpdCBkaXJlY3RvcnkgaW50byB0aGUgc3VwZXJwcm9qZWN0cyBnaXQgZGlyLAorICogbm9uIHJlY3Vyc2l2ZWx5LgorICovCitzdGF0aWMgdm9pZCByZWxvY2F0ZV9zaW5nbGVfZ2l0X2Rpcl9pbnRvX3N1cGVycHJvamVjdChjb25zdCBjaGFyICpwYXRoKQoreworCWNoYXIgKm9sZF9naXRfZGlyID0gTlVMTCwgKnJlYWxfb2xkX2dpdF9kaXIgPSBOVUxMLCAqcmVhbF9uZXdfZ2l0X2RpciA9IE5VTEw7CisJY2hhciAqbmV3X2dpdF9kaXI7CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViOworCisJaWYgKHN1Ym1vZHVsZV91c2VzX3dvcmt0cmVlcyhwYXRoKSkKKwkJZGllKF8oInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCAiCisJCSAgICAgICJtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiKSwgcGF0aCk7CisKKwlvbGRfZ2l0X2RpciA9IHhzdHJmbXQoIiVzLy5naXQiLCBwYXRoKTsKKwlpZiAocmVhZF9naXRmaWxlKG9sZF9naXRfZGlyKSkKKwkJLyogSWYgaXQgaXMgYW4gYWN0dWFsIGdpdGZpbGUsIGl0IGRvZXNuJ3QgbmVlZCBtaWdyYXRpb24uICovCisJCXJldHVybjsKKworCXJlYWxfb2xkX2dpdF9kaXIgPSByZWFsX3BhdGhkdXAob2xkX2dpdF9kaXIsIDEpOworCisJc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aCh0aGVfcmVwb3NpdG9yeSwgJm51bGxfb2lkLCBwYXRoKTsKKwlpZiAoIXN1YikKKwkJZGllKF8oImNvdWxkIG5vdCBsb29rdXAgbmFtZSBmb3Igc3VibW9kdWxlICclcyciKSwgcGF0aCk7CisKKwluZXdfZ2l0X2RpciA9IGdpdF9wYXRoZHVwKCJtb2R1bGVzLyVzIiwgc3ViLT5uYW1lKTsKKwlpZiAodmFsaWRhdGVfc3VibW9kdWxlX2dpdF9kaXIobmV3X2dpdF9kaXIsIHN1Yi0+bmFtZSkgPCAwKQorCQlkaWUoXygicmVmdXNpbmcgdG8gbW92ZSAnJXMnIGludG8gYW4gZXhpc3RpbmcgZ2l0IGRpciIpLAorCQkgICAgcmVhbF9vbGRfZ2l0X2Rpcik7CisJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QobmV3X2dpdF9kaXIpIDwgMCkKKwkJZGllKF8oImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciKSwgbmV3X2dpdF9kaXIpOworCXJlYWxfbmV3X2dpdF9kaXIgPSByZWFsX3BhdGhkdXAobmV3X2dpdF9kaXIsIDEpOworCWZyZWUobmV3X2dpdF9kaXIpOworCisJZnByaW50ZihzdGRlcnIsIF8oIk1pZ3JhdGluZyBnaXQgZGlyZWN0b3J5IG9mICclcyVzJyBmcm9tXG4nJXMnIHRvXG4nJXMnXG4iKSwKKwkJZ2V0X3N1cGVyX3ByZWZpeF9vcl9lbXB0eSgpLCBwYXRoLAorCQlyZWFsX29sZF9naXRfZGlyLCByZWFsX25ld19naXRfZGlyKTsKKworCXJlbG9jYXRlX2dpdGRpcihwYXRoLCByZWFsX29sZF9naXRfZGlyLCByZWFsX25ld19naXRfZGlyKTsKKworCWZyZWUob2xkX2dpdF9kaXIpOworCWZyZWUocmVhbF9vbGRfZ2l0X2Rpcik7CisJZnJlZShyZWFsX25ld19naXRfZGlyKTsKK30KKworLyoKKyAqIE1pZ3JhdGUgdGhlIGdpdCBkaXJlY3Rvcnkgb2YgdGhlIHN1Ym1vZHVsZSBnaXZlbiBieSBwYXRoIGZyb20KKyAqIGhhdmluZyBpdHMgZ2l0IGRpcmVjdG9yeSB3aXRoaW4gdGhlIHdvcmtpbmcgdHJlZSB0byB0aGUgZ2l0IGRpciBuZXN0ZWQKKyAqIGluIGl0cyBzdXBlcnByb2plY3RzIGdpdCBkaXIgdW5kZXIgbW9kdWxlcy8uCisgKi8KK3ZvaWQgYWJzb3JiX2dpdF9kaXJfaW50b19zdXBlcnByb2plY3QoY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgICAgICB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgZXJyX2NvZGU7CisJY29uc3QgY2hhciAqc3ViX2dpdF9kaXI7CisJc3RydWN0IHN0cmJ1ZiBnaXRkaXIgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkZigmZ2l0ZGlyLCAiJXMvLmdpdCIsIHBhdGgpOworCXN1Yl9naXRfZGlyID0gcmVzb2x2ZV9naXRkaXJfZ2VudGx5KGdpdGRpci5idWYsICZlcnJfY29kZSk7CisKKwkvKiBOb3QgcG9wdWxhdGVkPyAqLworCWlmICghc3ViX2dpdF9kaXIpIHsKKwkJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViOworCisJCWlmIChlcnJfY29kZSA9PSBSRUFEX0dJVEZJTEVfRVJSX1NUQVRfRkFJTEVEKSB7CisJCQkvKiB1bnBvcHVsYXRlZCBhcyBleHBlY3RlZCAqLworCQkJc3RyYnVmX3JlbGVhc2UoJmdpdGRpcik7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoZXJyX2NvZGUgIT0gUkVBRF9HSVRGSUxFX0VSUl9OT1RfQV9SRVBPKQorCQkJLyogV2UgZG9uJ3Qga25vdyB3aGF0IGJyb2tlIGhlcmUuICovCisJCQlyZWFkX2dpdGZpbGVfZXJyb3JfZGllKGVycl9jb2RlLCBwYXRoLCBOVUxMKTsKKworCQkvKgorCQkqIE1heWJlIHBvcHVsYXRlZCwgYnV0IG5vIGdpdCBkaXJlY3Rvcnkgd2FzIGZvdW5kPworCQkqIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgc3VwZXJwcm9qZWN0IGlzIGEgc3VibW9kdWxlCisJCSogaXRzZWxmIGFuZCB3YXMganVzdCBhYnNvcmJlZC4gVGhlIGFic29ycHRpb24gb2YgdGhlCisJCSogc3VwZXJwcm9qZWN0IGRpZCBub3QgcmV3cml0ZSB0aGUgZ2l0IGZpbGUgbGlua3MgeWV0LAorCQkqIGZpeCBpdCBub3cuCisJCSovCisJCXN1YiA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgodGhlX3JlcG9zaXRvcnksICZudWxsX29pZCwgcGF0aCk7CisJCWlmICghc3ViKQorCQkJZGllKF8oImNvdWxkIG5vdCBsb29rdXAgbmFtZSBmb3Igc3VibW9kdWxlICclcyciKSwgcGF0aCk7CisJCWNvbm5lY3Rfd29ya190cmVlX2FuZF9naXRfZGlyKHBhdGgsCisJCQlnaXRfcGF0aCgibW9kdWxlcy8lcyIsIHN1Yi0+bmFtZSksIDApOworCX0gZWxzZSB7CisJCS8qIElzIGl0IGFscmVhZHkgYWJzb3JiZWQgaW50byB0aGUgc3VwZXJwcm9qZWN0cyBnaXQgZGlyPyAqLworCQljaGFyICpyZWFsX3N1Yl9naXRfZGlyID0gcmVhbF9wYXRoZHVwKHN1Yl9naXRfZGlyLCAxKTsKKwkJY2hhciAqcmVhbF9jb21tb25fZ2l0X2RpciA9IHJlYWxfcGF0aGR1cChnZXRfZ2l0X2NvbW1vbl9kaXIoKSwgMSk7CisKKwkJaWYgKCFzdGFydHNfd2l0aChyZWFsX3N1Yl9naXRfZGlyLCByZWFsX2NvbW1vbl9naXRfZGlyKSkKKwkJCXJlbG9jYXRlX3NpbmdsZV9naXRfZGlyX2ludG9fc3VwZXJwcm9qZWN0KHBhdGgpOworCisJCWZyZWUocmVhbF9zdWJfZ2l0X2Rpcik7CisJCWZyZWUocmVhbF9jb21tb25fZ2l0X2Rpcik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZnaXRkaXIpOworCisJaWYgKGZsYWdzICYgQUJTT1JCX0dJVERJUl9SRUNVUlNFX1NVQk1PRFVMRVMpIHsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoZmxhZ3MgJiB+QUJTT1JCX0dJVERJUl9SRUNVUlNFX1NVQk1PRFVMRVMpCisJCQlCVUcoIndlIGRvbid0IGtub3cgaG93IHRvIHBhc3MgdGhlIGZsYWdzIGRvd24/Iik7CisKKwkJc3RyYnVmX2FkZHN0cigmc2IsIGdldF9zdXBlcl9wcmVmaXhfb3JfZW1wdHkoKSk7CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBwYXRoKTsKKwkJc3RyYnVmX2FkZGNoKCZzYiwgJy8nKTsKKworCQljcC5kaXIgPSBwYXRoOworCQljcC5naXRfY21kID0gMTsKKwkJY3Aubm9fc3RkaW4gPSAxOworCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAiLS1zdXBlci1wcmVmaXgiLCBzYi5idWYsCisJCQkJCSAgICJzdWJtb2R1bGUtLWhlbHBlciIsCisJCQkJCSAgICJhYnNvcmItZ2l0LWRpcnMiLCBOVUxMKTsKKwkJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoJmNwLmVudl9hcnJheSk7CisJCWlmIChydW5fY29tbWFuZCgmY3ApKQorCQkJZGllKF8oImNvdWxkIG5vdCByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciKSwgcGF0aCk7CisKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9Cit9CisKK2ludCBnZXRfc3VwZXJwcm9qZWN0X3dvcmtpbmdfdHJlZShzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgb25lX3VwID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqY3dkID0geGdldGN3ZCgpOworCWludCByZXQgPSAwOworCWNvbnN0IGNoYXIgKnN1YnBhdGg7CisJaW50IGNvZGU7CisJc3NpemVfdCBsZW47CisKKwlpZiAoIWlzX2luc2lkZV93b3JrX3RyZWUoKSkKKwkJLyoKKwkJICogRklYTUU6CisJCSAqIFdlIG1pZ2h0IGhhdmUgYSBzdXBlcnByb2plY3QsIGJ1dCBpdCBpcyBoYXJkZXIKKwkJICogdG8gZGV0ZXJtaW5lLgorCQkgKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN0cmJ1Zl9yZWFscGF0aCgmb25lX3VwLCAiLi4vIiwgMCkpCisJCXJldHVybiAwOworCisJc3VicGF0aCA9IHJlbGF0aXZlX3BhdGgoY3dkLCBvbmVfdXAuYnVmLCAmc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZvbmVfdXApOworCisJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoJmNwLmVudl9hcnJheSk7CisJYXJndl9hcnJheV9wb3AoJmNwLmVudl9hcnJheSk7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAiLS1saXRlcmFsLXBhdGhzcGVjcyIsICItQyIsICIuLiIsCisJCQkibHMtZmlsZXMiLCAiLXoiLCAiLS1zdGFnZSIsICItLWZ1bGwtbmFtZSIsICItLSIsCisJCQlzdWJwYXRoLCBOVUxMKTsKKwlzdHJidWZfcmVzZXQoJnNiKTsKKworCWNwLm5vX3N0ZGluID0gMTsKKwljcC5ub19zdGRlcnIgPSAxOworCWNwLm91dCA9IC0xOworCWNwLmdpdF9jbWQgPSAxOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNwKSkKKwkJZGllKF8oImNvdWxkIG5vdCBzdGFydCBscy1maWxlcyBpbiAuLiIpKTsKKworCWxlbiA9IHN0cmJ1Zl9yZWFkKCZzYiwgY3Aub3V0LCBQQVRIX01BWCk7CisJY2xvc2UoY3Aub3V0KTsKKworCWlmIChzdGFydHNfd2l0aChzYi5idWYsICIxNjAwMDAiKSkgeworCQlpbnQgc3VwZXJfc3ViX2xlbjsKKwkJaW50IGN3ZF9sZW4gPSBzdHJsZW4oY3dkKTsKKwkJY2hhciAqc3VwZXJfc3ViLCAqc3VwZXJfd3Q7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgYSBzdXBlcnByb2plY3QgaGF2aW5nIHRoaXMgcmVwbyBhcyBhIHN1Ym1vZHVsZS4KKwkJICogVGhlIGZvcm1hdCBpcyA8bW9kZT4gU1AgPGhhc2g+IFNQIDxzdGFnZT4gVEFCIDxmdWxsIG5hbWU+IFwwLAorCQkgKiBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIG5hbWUgYWZ0ZXIgdGhlIHRhYi4KKwkJICovCisJCXN1cGVyX3N1YiA9IHN0cmNocihzYi5idWYsICdcdCcpICsgMTsKKwkJc3VwZXJfc3ViX2xlbiA9IHN0cmxlbihzdXBlcl9zdWIpOworCisJCWlmIChzdXBlcl9zdWJfbGVuID4gY3dkX2xlbiB8fAorCQkgICAgc3RyY21wKCZjd2RbY3dkX2xlbiAtIHN1cGVyX3N1Yl9sZW5dLCBzdXBlcl9zdWIpKQorCQkJQlVHKCJyZXR1cm5lZCBwYXRoIHN0cmluZyBkb2Vzbid0IG1hdGNoIGN3ZD8iKTsKKworCQlzdXBlcl93dCA9IHhzdHJkdXAoY3dkKTsKKwkJc3VwZXJfd3RbY3dkX2xlbiAtIHN1cGVyX3N1Yl9sZW5dID0gJ1wwJzsKKworCQlzdHJidWZfcmVhbHBhdGgoYnVmLCBzdXBlcl93dCwgMSk7CisJCXJldCA9IDE7CisJCWZyZWUoc3VwZXJfd3QpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJY29kZSA9IGZpbmlzaF9jb21tYW5kKCZjcCk7CisKKwlpZiAoY29kZSA9PSAxMjgpCisJCS8qICcuLi8nIGlzIG5vdCBhIGdpdCByZXBvc2l0b3J5ICovCisJCXJldHVybiAwOworCWlmIChjb2RlID09IDAgJiYgbGVuID09IDApCisJCS8qIFRoZXJlIGlzIGFuIHVucmVsYXRlZCBnaXQgcmVwb3NpdG9yeSBhdCAnLi4vJyAqLworCQlyZXR1cm4gMDsKKwlpZiAoY29kZSkKKwkJZGllKF8oImxzLXRyZWUgcmV0dXJuZWQgdW5leHBlY3RlZCByZXR1cm4gY29kZSAlZCIpLCBjb2RlKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQdXQgdGhlIGdpdGRpciBmb3IgYSBzdWJtb2R1bGUgKGdpdmVuIHJlbGF0aXZlIHRvIHRoZSBtYWluCisgKiByZXBvc2l0b3J5IHdvcmt0cmVlKSBpbnRvIGBidWZgLCBvciByZXR1cm4gLTEgb24gZXJyb3IuCisgKi8KK2ludCBzdWJtb2R1bGVfdG9fZ2l0ZGlyKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqc3VibW9kdWxlKQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKwljb25zdCBjaGFyICpnaXRfZGlyOworCWludCByZXQgPSAwOworCisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJc3RyYnVmX2FkZHN0cihidWYsIHN1Ym1vZHVsZSk7CisJc3RyYnVmX2NvbXBsZXRlKGJ1ZiwgJy8nKTsKKwlzdHJidWZfYWRkc3RyKGJ1ZiwgIi5naXQiKTsKKworCWdpdF9kaXIgPSByZWFkX2dpdGZpbGUoYnVmLT5idWYpOworCWlmIChnaXRfZGlyKSB7CisJCXN0cmJ1Zl9yZXNldChidWYpOworCQlzdHJidWZfYWRkc3RyKGJ1ZiwgZ2l0X2Rpcik7CisJfQorCWlmICghaXNfZ2l0X2RpcmVjdG9yeShidWYtPmJ1ZikpIHsKKwkJc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aCh0aGVfcmVwb3NpdG9yeSwgJm51bGxfb2lkLCBzdWJtb2R1bGUpOworCQlpZiAoIXN1YikgeworCQkJcmV0ID0gLTE7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJCXN0cmJ1Zl9naXRfcGF0aChidWYsICIlcy8lcyIsICJtb2R1bGVzIiwgc3ViLT5uYW1lKTsKKwl9CisKK2NsZWFudXA6CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3N1Ym1vZHVsZS5oIGIvc3VibW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRhZDY0OQotLS0gL2Rldi9udWxsCisrKyBiL3N1Ym1vZHVsZS5oCkBAIC0wLDAgKzEsMTU5IEBACisjaWZuZGVmIFNVQk1PRFVMRV9ICisjZGVmaW5lIFNVQk1PRFVMRV9ICisKK3N0cnVjdCBhcmd2X2FycmF5Oworc3RydWN0IGNhY2hlX2VudHJ5Oworc3RydWN0IGRpZmZfb3B0aW9uczsKK3N0cnVjdCBpbmRleF9zdGF0ZTsKK3N0cnVjdCBvYmplY3RfaWQ7CitzdHJ1Y3Qgb2lkX2FycmF5Oworc3RydWN0IHBhdGhzcGVjOworc3RydWN0IHJlbW90ZTsKK3N0cnVjdCByZXBvc2l0b3J5Oworc3RydWN0IHN0cmluZ19saXN0Oworc3RydWN0IHN0cmJ1ZjsKKworZW51bSB7CisJUkVDVVJTRV9TVUJNT0RVTEVTX09OTFkgPSAtNSwKKwlSRUNVUlNFX1NVQk1PRFVMRVNfQ0hFQ0sgPSAtNCwKKwlSRUNVUlNFX1NVQk1PRFVMRVNfRVJST1IgPSAtMywKKwlSRUNVUlNFX1NVQk1PRFVMRVNfTk9ORSA9IC0yLAorCVJFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQgPSAtMSwKKwlSRUNVUlNFX1NVQk1PRFVMRVNfT0ZGID0gMCwKKwlSRUNVUlNFX1NVQk1PRFVMRVNfREVGQVVMVCA9IDEsCisJUkVDVVJTRV9TVUJNT0RVTEVTX09OID0gMgorfTsKKworZW51bSBzdWJtb2R1bGVfdXBkYXRlX3R5cGUgeworCVNNX1VQREFURV9VTlNQRUNJRklFRCA9IDAsCisJU01fVVBEQVRFX0NIRUNLT1VULAorCVNNX1VQREFURV9SRUJBU0UsCisJU01fVVBEQVRFX01FUkdFLAorCVNNX1VQREFURV9OT05FLAorCVNNX1VQREFURV9DT01NQU5ECit9OworCitzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9zdHJhdGVneSB7CisJZW51bSBzdWJtb2R1bGVfdXBkYXRlX3R5cGUgdHlwZTsKKwljb25zdCBjaGFyICpjb21tYW5kOworfTsKKyNkZWZpbmUgU1VCTU9EVUxFX1VQREFURV9TVFJBVEVHWV9JTklUIHtTTV9VUERBVEVfVU5TUEVDSUZJRUQsIE5VTEx9CisKK2ludCBpc19naXRtb2R1bGVzX3VubWVyZ2VkKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKK2ludCBpc193cml0aW5nX2dpdG1vZHVsZXNfb2sodm9pZCk7CitpbnQgaXNfc3RhZ2luZ19naXRtb2R1bGVzX29rKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKK2ludCB1cGRhdGVfcGF0aF9pbl9naXRtb2R1bGVzKGNvbnN0IGNoYXIgKm9sZHBhdGgsIGNvbnN0IGNoYXIgKm5ld3BhdGgpOworaW50IHJlbW92ZV9wYXRoX2Zyb21fZ2l0bW9kdWxlcyhjb25zdCBjaGFyICpwYXRoKTsKK3ZvaWQgc3RhZ2VfdXBkYXRlZF9naXRtb2R1bGVzKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKK3ZvaWQgc2V0X2RpZmZvcHRfZmxhZ3NfZnJvbV9zdWJtb2R1bGVfY29uZmlnKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwKKwkJCQkJICAgICBjb25zdCBjaGFyICpwYXRoKTsKK2ludCBnaXRfZGVmYXVsdF9zdWJtb2R1bGVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKKworc3RydWN0IG9wdGlvbjsKK2ludCBvcHRpb25fcGFyc2VfcmVjdXJzZV9zdWJtb2R1bGVzX3dvcmt0cmVlX3VwZGF0ZXIoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkJICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCk7CitpbnQgaXNfc3VibW9kdWxlX2FjdGl2ZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqcGF0aCk7CisvKgorICogRGV0ZXJtaW5lIGlmIGEgc3VibW9kdWxlIGhhcyBiZWVuIHBvcHVsYXRlZCBhdCBhIGdpdmVuICdwYXRoJyBieSBjaGVja2luZyBpZgorICogdGhlIDxwYXRoPi8uZ2l0IHJlc29sdmVzIHRvIGEgdmFsaWQgZ2l0IHJlcG9zaXRvcnkuCisgKiBJZiByZXR1cm5fZXJyb3JfY29kZSBpcyBOVUxMLCBkaWUgb24gZXJyb3IuCisgKiBPdGhlcndpc2UgdGhlIHJldHVybiBlcnJvciBjb2RlIGlzIHRoZSBzYW1lIGFzIG9mIHJlc29sdmVfZ2l0ZGlyX2dlbnRseS4KKyAqLworaW50IGlzX3N1Ym1vZHVsZV9wb3B1bGF0ZWRfZ2VudGx5KGNvbnN0IGNoYXIgKnBhdGgsIGludCAqcmV0dXJuX2Vycm9yX2NvZGUpOwordm9pZCBkaWVfaW5fdW5wb3B1bGF0ZWRfc3VibW9kdWxlKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgY29uc3QgY2hhciAqcHJlZml4KTsKK3ZvaWQgZGllX3BhdGhfaW5zaWRlX3N1Ym1vZHVsZShjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzKTsKK2VudW0gc3VibW9kdWxlX3VwZGF0ZV90eXBlIHBhcnNlX3N1Ym1vZHVsZV91cGRhdGVfdHlwZShjb25zdCBjaGFyICp2YWx1ZSk7CitpbnQgcGFyc2Vfc3VibW9kdWxlX3VwZGF0ZV9zdHJhdGVneShjb25zdCBjaGFyICp2YWx1ZSwKKwkJCQkgICAgc3RydWN0IHN1Ym1vZHVsZV91cGRhdGVfc3RyYXRlZ3kgKmRzdCk7Citjb25zdCBjaGFyICpzdWJtb2R1bGVfc3RyYXRlZ3lfdG9fc3RyaW5nKGNvbnN0IHN0cnVjdCBzdWJtb2R1bGVfdXBkYXRlX3N0cmF0ZWd5ICpzKTsKK3ZvaWQgaGFuZGxlX2lnbm9yZV9zdWJtb2R1bGVzX2FyZyhzdHJ1Y3QgZGlmZl9vcHRpb25zICosIGNvbnN0IGNoYXIgKik7Cit2b2lkIHNob3dfc3VibW9kdWxlX3N1bW1hcnkoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvbmUsIHN0cnVjdCBvYmplY3RfaWQgKnR3bywKKwkJCSAgICB1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUpOwordm9pZCBzaG93X3N1Ym1vZHVsZV9pbmxpbmVfZGlmZihzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLCBjb25zdCBjaGFyICpwYXRoLAorCQkJCXN0cnVjdCBvYmplY3RfaWQgKm9uZSwgc3RydWN0IG9iamVjdF9pZCAqdHdvLAorCQkJCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSk7CisvKiBDaGVjayBpZiB3ZSB3YW50IHRvIHVwZGF0ZSBhbnkgc3VibW9kdWxlLiovCitpbnQgc2hvdWxkX3VwZGF0ZV9zdWJtb2R1bGVzKHZvaWQpOworLyoKKyAqIFJldHVybnMgdGhlIHN1Ym1vZHVsZSBzdHJ1Y3QgaWYgdGhlIGdpdmVuIGNlIGVudHJ5IGlzIGEgc3VibW9kdWxlCisgKiBhbmQgaXQgc2hvdWxkIGJlIHVwZGF0ZWQuIFJldHVybnMgTlVMTCBvdGhlcndpc2UuCisgKi8KK2NvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZV9mcm9tX2NlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpOwordm9pZCBjaGVja19mb3JfbmV3X3N1Ym1vZHVsZV9jb21taXRzKHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CitpbnQgZmV0Y2hfcG9wdWxhdGVkX3N1Ym1vZHVsZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGFyZ3ZfYXJyYXkgKm9wdGlvbnMsCisJCQkgICAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICAgIGludCBjb21tYW5kX2xpbmVfb3B0aW9uLAorCQkJICAgICAgIGludCBkZWZhdWx0X29wdGlvbiwKKwkJCSAgICAgICBpbnQgcXVpZXQsIGludCBtYXhfcGFyYWxsZWxfam9icyk7Cit1bnNpZ25lZCBpc19zdWJtb2R1bGVfbW9kaWZpZWQoY29uc3QgY2hhciAqcGF0aCwgaW50IGlnbm9yZV91bnRyYWNrZWQpOworaW50IHN1Ym1vZHVsZV91c2VzX2dpdGZpbGUoY29uc3QgY2hhciAqcGF0aCk7CisKKyNkZWZpbmUgU1VCTU9EVUxFX1JFTU9WQUxfRElFX09OX0VSUk9SICgxPDwwKQorI2RlZmluZSBTVUJNT0RVTEVfUkVNT1ZBTF9JR05PUkVfVU5UUkFDS0VEICgxPDwxKQorI2RlZmluZSBTVUJNT0RVTEVfUkVNT1ZBTF9JR05PUkVfSUdOT1JFRF9VTlRSQUNLRUQgKDE8PDIpCitpbnQgYmFkX3RvX3JlbW92ZV9zdWJtb2R1bGUoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgZmxhZ3MpOworCitpbnQgYWRkX3N1Ym1vZHVsZV9vZGIoY29uc3QgY2hhciAqcGF0aCk7CisKKy8qCisgKiBDaGVja3MgaWYgdGhlcmUgYXJlIHN1Ym1vZHVsZSBjaGFuZ2VzIGluIGEuLmIuIElmIGEgaXMgdGhlIG51bGwgT0lELAorICogY2hlY2tzIGIgYW5kIGFsbCBpdHMgYW5jZXN0b3JzIGluc3RlYWQuCisgKi8KK2ludCBzdWJtb2R1bGVfdG91Y2hlc19pbl9yYW5nZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICphLAorCQkJICAgICAgIHN0cnVjdCBvYmplY3RfaWQgKmIpOworaW50IGZpbmRfdW5wdXNoZWRfc3VibW9kdWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgc3RydWN0IG9pZF9hcnJheSAqY29tbWl0cywKKwkJCSAgICAgY29uc3QgY2hhciAqcmVtb3Rlc19uYW1lLAorCQkJICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm5lZWRzX3B1c2hpbmcpOworc3RydWN0IHJlZnNwZWM7CitpbnQgcHVzaF91bnB1c2hlZF9zdWJtb2R1bGVzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICBzdHJ1Y3Qgb2lkX2FycmF5ICpjb21taXRzLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCByZWZzcGVjICpycywKKwkJCSAgICAgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpwdXNoX29wdGlvbnMsCisJCQkgICAgIGludCBkcnlfcnVuKTsKKy8qCisgKiBHaXZlbiBhIHN1Ym1vZHVsZSBwYXRoIChhcyBpbiB0aGUgaW5kZXgpLCByZXR1cm4gdGhlIHJlcG9zaXRvcnkKKyAqIHBhdGggb2YgdGhhdCBzdWJtb2R1bGUgaW4gJ2J1ZicuIFJldHVybiAtMSBvbiBlcnJvciBvciB3aGVuIHRoZQorICogc3VibW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4KKyAqLworaW50IHN1Ym1vZHVsZV90b19naXRkaXIoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpzdWJtb2R1bGUpOworCisvKgorICogTWFrZSBzdXJlIHRoYXQgbm8gc3VibW9kdWxlJ3MgZ2l0IGRpciBpcyBuZXN0ZWQgaW4gYSBzaWJsaW5nIHN1Ym1vZHVsZSdzLgorICovCitpbnQgdmFsaWRhdGVfc3VibW9kdWxlX2dpdF9kaXIoY2hhciAqZ2l0X2RpciwgY29uc3QgY2hhciAqc3VibW9kdWxlX25hbWUpOworCisjZGVmaW5lIFNVQk1PRFVMRV9NT1ZFX0hFQURfRFJZX1JVTiAoMTw8MCkKKyNkZWZpbmUgU1VCTU9EVUxFX01PVkVfSEVBRF9GT1JDRSAgICgxPDwxKQoraW50IHN1Ym1vZHVsZV9tb3ZlX2hlYWQoY29uc3QgY2hhciAqcGF0aCwKKwkJCWNvbnN0IGNoYXIgKm9sZCwKKwkJCWNvbnN0IGNoYXIgKm5ld19oZWFkLAorCQkJdW5zaWduZWQgZmxhZ3MpOworCit2b2lkIHN1Ym1vZHVsZV91bnNldF9jb3JlX3dvcmt0cmVlKGNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Yik7CisKKy8qCisgKiBQcmVwYXJlIHRoZSAiZW52X2FycmF5IiBwYXJhbWV0ZXIgb2YgYSAic3RydWN0IGNoaWxkX3Byb2Nlc3MiIGZvciBleGVjdXRpbmcKKyAqIGEgc3VibW9kdWxlIGJ5IGNsZWFyaW5nIGFueSByZXBvLXNwZWNpZmljIGVudmlyb25tZW50IHZhcmlhYmxlcywgYnV0CisgKiByZXRhaW5pbmcgYW55IGNvbmZpZyBpbiB0aGUgZW52aXJvbm1lbnQuCisgKi8KK3ZvaWQgcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoc3RydWN0IGFyZ3ZfYXJyYXkgKm91dCk7CisKKyNkZWZpbmUgQUJTT1JCX0dJVERJUl9SRUNVUlNFX1NVQk1PRFVMRVMgKDE8PDApCit2b2lkIGFic29yYl9naXRfZGlyX2ludG9fc3VwZXJwcm9qZWN0KGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICAgICAgdW5zaWduZWQgZmxhZ3MpOworCisvKgorICogUmV0dXJuIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSB3b3JraW5nIHRyZWUgb2YgdGhlIHN1cGVycHJvamVjdCwgd2hpY2ggdGhpcworICogcHJvamVjdCBpcyBhIHN1Ym1vZHVsZSBvZi4gSWYgdGhpcyByZXBvc2l0b3J5IGlzIG5vdCBhIHN1Ym1vZHVsZSBvZgorICogYW5vdGhlciByZXBvc2l0b3J5LCByZXR1cm4gMC4KKyAqLworaW50IGdldF9zdXBlcnByb2plY3Rfd29ya2luZ190cmVlKHN0cnVjdCBzdHJidWYgKmJ1Zik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3ltbGlua3MuYyBiL3N5bWxpbmtzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkNDU4YQotLS0gL2Rldi9udWxsCisrKyBiL3N5bWxpbmtzLmMKQEAgLTAsMCArMSwzMjMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdGF0aWMgaW50IHRocmVhZGVkX2NoZWNrX2xlYWRpbmdfcGF0aChzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbik7CitzdGF0aWMgaW50IHRocmVhZGVkX2hhc19kaXJzX29ubHlfcGF0aChzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgaW50IHByZWZpeF9sZW4pOworCisvKgorICogUmV0dXJucyB0aGUgbGVuZ3RoIChvbiBhIHBhdGggY29tcG9uZW50IGJhc2lzKSBvZiB0aGUgbG9uZ2VzdAorICogY29tbW9uIHByZWZpeCBtYXRjaCBvZiAnbmFtZV9hJyBhbmQgJ25hbWVfYicuCisgKi8KK3N0YXRpYyBpbnQgbG9uZ2VzdF9wYXRoX21hdGNoKGNvbnN0IGNoYXIgKm5hbWVfYSwgaW50IGxlbl9hLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZV9iLCBpbnQgbGVuX2IsCisJCQkgICAgICBpbnQgKnByZXZpb3VzX3NsYXNoKQoreworCWludCBtYXhfbGVuLCBtYXRjaF9sZW4gPSAwLCBtYXRjaF9sZW5fcHJldiA9IDAsIGkgPSAwOworCisJbWF4X2xlbiA9IGxlbl9hIDwgbGVuX2IgPyBsZW5fYSA6IGxlbl9iOworCXdoaWxlIChpIDwgbWF4X2xlbiAmJiBuYW1lX2FbaV0gPT0gbmFtZV9iW2ldKSB7CisJCWlmIChuYW1lX2FbaV0gPT0gJy8nKSB7CisJCQltYXRjaF9sZW5fcHJldiA9IG1hdGNoX2xlbjsKKwkJCW1hdGNoX2xlbiA9IGk7CisJCX0KKwkJaSsrOworCX0KKwkvKgorCSAqIElzICduYW1lX2InIGEgc3Vic3RyaW5nIG9mICduYW1lX2EnLCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwKKwkgKiBvciBpcyAnbmFtZV9hJyBhbmQgJ25hbWVfYicgdGhlIGV4YWN0IHNhbWUgc3RyaW5nPworCSAqLworCWlmIChpID49IG1heF9sZW4gJiYgKChsZW5fYSA+IGxlbl9iICYmIG5hbWVfYVtsZW5fYl0gPT0gJy8nKSB8fAorCQkJICAgICAobGVuX2EgPCBsZW5fYiAmJiBuYW1lX2JbbGVuX2FdID09ICcvJykgfHwKKwkJCSAgICAgKGxlbl9hID09IGxlbl9iKSkpIHsKKwkJbWF0Y2hfbGVuX3ByZXYgPSBtYXRjaF9sZW47CisJCW1hdGNoX2xlbiA9IGk7CisJfQorCSpwcmV2aW91c19zbGFzaCA9IG1hdGNoX2xlbl9wcmV2OworCXJldHVybiBtYXRjaF9sZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfZGVmIGRlZmF1bHRfY2FjaGUgPSBDQUNIRV9ERUZfSU5JVDsKKworc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2xzdGF0X2NhY2hlKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlKQoreworCXN0cmJ1Zl9yZXNldCgmY2FjaGUtPnBhdGgpOworCWNhY2hlLT5mbGFncyA9IDA7CisJLyoKKwkgKiBUaGUgdHJhY2tfZmxhZ3MgYW5kIHByZWZpeF9sZW5fc3RhdF9mdW5jIG1lbWJlcnMgaXMgb25seQorCSAqIHNldCBieSB0aGUgc2FmZWd1YXJkIHJ1bGUgaW5zaWRlIGxzdGF0X2NhY2hlKCkKKwkgKi8KK30KKworI2RlZmluZSBGTF9ESVIgICAgICAoMSA8PCAwKQorI2RlZmluZSBGTF9OT0VOVCAgICAoMSA8PCAxKQorI2RlZmluZSBGTF9TWU1MSU5LICAoMSA8PCAyKQorI2RlZmluZSBGTF9MU1RBVEVSUiAoMSA8PCAzKQorI2RlZmluZSBGTF9FUlIgICAgICAoMSA8PCA0KQorI2RlZmluZSBGTF9GVUxMUEFUSCAoMSA8PCA1KQorCisvKgorICogQ2hlY2sgaWYgbmFtZSAnbmFtZScgb2YgbGVuZ3RoICdsZW4nIGhhcyBhIHN5bWxpbmsgbGVhZGluZworICogY29tcG9uZW50LCBvciBpZiB0aGUgZGlyZWN0b3J5IGV4aXN0cyBhbmQgaXMgcmVhbCwgb3Igbm90LgorICoKKyAqIFRvIHNwZWVkIHVwIHRoZSBjaGVjaywgc29tZSBpbmZvcm1hdGlvbiBpcyBhbGxvd2VkIHRvIGJlIGNhY2hlZC4KKyAqIFRoaXMgY2FuIGJlIGluZGljYXRlZCBieSB0aGUgJ3RyYWNrX2ZsYWdzJyBhcmd1bWVudCwgd2hpY2ggYWxzbyBjYW4KKyAqIGJlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB3ZSBzaG91bGQgY2hlY2sgdGhlIGZ1bGwgcGF0aC4KKyAqCisgKiBUaGUgJ3ByZWZpeF9sZW5fc3RhdF9mdW5jJyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBsZW5ndGgKKyAqIG9mIHRoZSBwcmVmaXgsIHdoZXJlIHRoZSBjYWNoZSBzaG91bGQgdXNlIHRoZSBzdGF0KCkgZnVuY3Rpb24KKyAqIGluc3RlYWQgb2YgdGhlIGxzdGF0KCkgZnVuY3Rpb24gdG8gdGVzdCBlYWNoIHBhdGggY29tcG9uZW50LgorICovCitzdGF0aWMgaW50IGxzdGF0X2NhY2hlX21hdGNobGVuKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlLAorCQkJCWNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCisJCQkJaW50ICpyZXRfZmxhZ3MsIGludCB0cmFja19mbGFncywKKwkJCQlpbnQgcHJlZml4X2xlbl9zdGF0X2Z1bmMpCit7CisJaW50IG1hdGNoX2xlbiwgbGFzdF9zbGFzaCwgbGFzdF9zbGFzaF9kaXIsIHByZXZpb3VzX3NsYXNoOworCWludCBzYXZlX2ZsYWdzLCByZXQ7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoY2FjaGUtPnRyYWNrX2ZsYWdzICE9IHRyYWNrX2ZsYWdzIHx8CisJICAgIGNhY2hlLT5wcmVmaXhfbGVuX3N0YXRfZnVuYyAhPSBwcmVmaXhfbGVuX3N0YXRfZnVuYykgeworCQkvKgorCQkgKiBBcyBhIHNhZmVndWFyZCBydWxlIHdlIGNsZWFyIHRoZSBjYWNoZSBpZiB0aGUKKwkJICogdmFsdWVzIG9mIHRyYWNrX2ZsYWdzIGFuZC9vciBwcmVmaXhfbGVuX3N0YXRfZnVuYworCQkgKiBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBsYXN0IHN1cHBsaWVkIHZhbHVlcy4KKwkJICovCisJCXJlc2V0X2xzdGF0X2NhY2hlKGNhY2hlKTsKKwkJY2FjaGUtPnRyYWNrX2ZsYWdzID0gdHJhY2tfZmxhZ3M7CisJCWNhY2hlLT5wcmVmaXhfbGVuX3N0YXRfZnVuYyA9IHByZWZpeF9sZW5fc3RhdF9mdW5jOworCQltYXRjaF9sZW4gPSBsYXN0X3NsYXNoID0gMDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIG1hdGNoIGZyb20gdGhlIGNhY2hlIGZvcgorCQkgKiB0aGUgMiAiZXhjbHVkaW5nIiBwYXRoIHR5cGVzLgorCQkgKi8KKwkJbWF0Y2hfbGVuID0gbGFzdF9zbGFzaCA9CisJCQlsb25nZXN0X3BhdGhfbWF0Y2gobmFtZSwgbGVuLCBjYWNoZS0+cGF0aC5idWYsCisJCQkJCSAgIGNhY2hlLT5wYXRoLmxlbiwgJnByZXZpb3VzX3NsYXNoKTsKKwkJKnJldF9mbGFncyA9IGNhY2hlLT5mbGFncyAmIHRyYWNrX2ZsYWdzICYgKEZMX05PRU5UfEZMX1NZTUxJTkspOworCisJCWlmICghKHRyYWNrX2ZsYWdzICYgRkxfRlVMTFBBVEgpICYmIG1hdGNoX2xlbiA9PSBsZW4pCisJCQltYXRjaF9sZW4gPSBsYXN0X3NsYXNoID0gcHJldmlvdXNfc2xhc2g7CisKKwkJaWYgKCpyZXRfZmxhZ3MgJiYgbWF0Y2hfbGVuID09IGNhY2hlLT5wYXRoLmxlbikKKwkJCXJldHVybiBtYXRjaF9sZW47CisJCS8qCisJCSAqIElmIHdlIG5vdyBoYXZlIG1hdGNoX2xlbiA+IDAsIHdlIHdvdWxkIGtub3cgdGhhdAorCQkgKiB0aGUgbWF0Y2hlZCBwYXJ0IHdpbGwgYWx3YXlzIGJlIGEgZGlyZWN0b3J5LgorCQkgKgorCQkgKiBBbHNvLCBpZiB3ZSBhcmUgdHJhY2tpbmcgZGlyZWN0b3JpZXMgYW5kICduYW1lJyBpcworCQkgKiBhIHN1YnN0cmluZyBvZiB0aGUgY2FjaGUgb24gYSBwYXRoIGNvbXBvbmVudCBiYXNpcywKKwkJICogd2UgY2FuIHJldHVybiBpbW1lZGlhdGVseS4KKwkJICovCisJCSpyZXRfZmxhZ3MgPSB0cmFja19mbGFncyAmIEZMX0RJUjsKKwkJaWYgKCpyZXRfZmxhZ3MgJiYgbGVuID09IG1hdGNoX2xlbikKKwkJCXJldHVybiBtYXRjaF9sZW47CisJfQorCisJLyoKKwkgKiBPa2F5LCBubyBtYXRjaCBmcm9tIHRoZSBjYWNoZSBzbyBmYXIsIHNvIG5vdyB3ZSBoYXZlIHRvCisJICogY2hlY2sgdGhlIHJlc3Qgb2YgdGhlIHBhdGggY29tcG9uZW50cy4KKwkgKi8KKwkqcmV0X2ZsYWdzID0gRkxfRElSOworCWxhc3Rfc2xhc2hfZGlyID0gbGFzdF9zbGFzaDsKKwlpZiAobGVuID4gY2FjaGUtPnBhdGgubGVuKQorCQlzdHJidWZfZ3JvdygmY2FjaGUtPnBhdGgsIGxlbiAtIGNhY2hlLT5wYXRoLmxlbik7CisJd2hpbGUgKG1hdGNoX2xlbiA8IGxlbikgeworCQlkbyB7CisJCQljYWNoZS0+cGF0aC5idWZbbWF0Y2hfbGVuXSA9IG5hbWVbbWF0Y2hfbGVuXTsKKwkJCW1hdGNoX2xlbisrOworCQl9IHdoaWxlIChtYXRjaF9sZW4gPCBsZW4gJiYgbmFtZVttYXRjaF9sZW5dICE9ICcvJyk7CisJCWlmIChtYXRjaF9sZW4gPj0gbGVuICYmICEodHJhY2tfZmxhZ3MgJiBGTF9GVUxMUEFUSCkpCisJCQlicmVhazsKKwkJbGFzdF9zbGFzaCA9IG1hdGNoX2xlbjsKKwkJY2FjaGUtPnBhdGguYnVmW2xhc3Rfc2xhc2hdID0gJ1wwJzsKKworCQlpZiAobGFzdF9zbGFzaCA8PSBwcmVmaXhfbGVuX3N0YXRfZnVuYykKKwkJCXJldCA9IHN0YXQoY2FjaGUtPnBhdGguYnVmLCAmc3QpOworCQllbHNlCisJCQlyZXQgPSBsc3RhdChjYWNoZS0+cGF0aC5idWYsICZzdCk7CisKKwkJaWYgKHJldCkgeworCQkJKnJldF9mbGFncyA9IEZMX0xTVEFURVJSOworCQkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCQkqcmV0X2ZsYWdzIHw9IEZMX05PRU5UOworCQl9IGVsc2UgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCWxhc3Rfc2xhc2hfZGlyID0gbGFzdF9zbGFzaDsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpIHsKKwkJCSpyZXRfZmxhZ3MgPSBGTF9TWU1MSU5LOworCQl9IGVsc2UgeworCQkJKnJldF9mbGFncyA9IEZMX0VSUjsKKwkJfQorCQlicmVhazsKKwl9CisKKwkvKgorCSAqIEF0IHRoZSBlbmQgdXBkYXRlIHRoZSBjYWNoZS4gIE5vdGUgdGhhdCBtYXggMyBkaWZmZXJlbnQKKwkgKiBwYXRoIHR5cGVzLCBGTF9OT0VOVCwgRkxfU1lNTElOSyBhbmQgRkxfRElSLCBjYW4gYmUgY2FjaGVkCisJICogZm9yIHRoZSBtb21lbnQhCisJICovCisJc2F2ZV9mbGFncyA9ICpyZXRfZmxhZ3MgJiB0cmFja19mbGFncyAmIChGTF9OT0VOVHxGTF9TWU1MSU5LKTsKKwlpZiAoc2F2ZV9mbGFncyAmJiBsYXN0X3NsYXNoID4gMCkgeworCQljYWNoZS0+cGF0aC5idWZbbGFzdF9zbGFzaF0gPSAnXDAnOworCQljYWNoZS0+cGF0aC5sZW4gPSBsYXN0X3NsYXNoOworCQljYWNoZS0+ZmxhZ3MgPSBzYXZlX2ZsYWdzOworCX0gZWxzZSBpZiAoKHRyYWNrX2ZsYWdzICYgRkxfRElSKSAmJiBsYXN0X3NsYXNoX2RpciA+IDApIHsKKwkJLyoKKwkJICogV2UgaGF2ZSBhIHNlcGFyYXRlIHRlc3QgZm9yIHRoZSBkaXJlY3RvcnkgY2FzZSwKKwkJICogc2luY2UgaXQgY291bGQgYmUgdGhhdCB3ZSBoYXZlIGZvdW5kIGEgc3ltbGluayBvciBhCisJCSAqIG5vbi1leGlzdGluZyBkaXJlY3RvcnkgYW5kIHRoZSB0cmFja19mbGFncyBzYXlzCisJCSAqIHRoYXQgd2UgY2Fubm90IGNhY2hlIHRoaXMgZmFjdCwgc28gdGhlIGNhY2hlIHdvdWxkCisJCSAqIHRoZW4gaGF2ZSBiZWVuIGxlZnQgZW1wdHkgaW4gdGhpcyBjYXNlLgorCQkgKgorCQkgKiBCdXQgaWYgd2UgYXJlIGFsbG93ZWQgdG8gdHJhY2sgcmVhbCBkaXJlY3Rvcmllcywgd2UKKwkJICogY2FuIHN0aWxsIGNhY2hlIHRoZSBwYXRoIGNvbXBvbmVudHMgYmVmb3JlIHRoZSBsYXN0CisJCSAqIG9uZSAodGhlIGZvdW5kIHN5bWxpbmsgb3Igbm9uLWV4aXN0aW5nIGNvbXBvbmVudCkuCisJCSAqLworCQljYWNoZS0+cGF0aC5idWZbbGFzdF9zbGFzaF9kaXJdID0gJ1wwJzsKKwkJY2FjaGUtPnBhdGgubGVuID0gbGFzdF9zbGFzaF9kaXI7CisJCWNhY2hlLT5mbGFncyA9IEZMX0RJUjsKKwl9IGVsc2UgeworCQlyZXNldF9sc3RhdF9jYWNoZShjYWNoZSk7CisJfQorCXJldHVybiBtYXRjaF9sZW47Cit9CisKK3N0YXRpYyBpbnQgbHN0YXRfY2FjaGUoc3RydWN0IGNhY2hlX2RlZiAqY2FjaGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCisJCSAgICAgICBpbnQgdHJhY2tfZmxhZ3MsIGludCBwcmVmaXhfbGVuX3N0YXRfZnVuYykKK3sKKwlpbnQgZmxhZ3M7CisJKHZvaWQpbHN0YXRfY2FjaGVfbWF0Y2hsZW4oY2FjaGUsIG5hbWUsIGxlbiwgJmZsYWdzLCB0cmFja19mbGFncywKKwkJCXByZWZpeF9sZW5fc3RhdF9mdW5jKTsKKwlyZXR1cm4gZmxhZ3M7Cit9CisKKyNkZWZpbmUgVVNFX09OTFlfTFNUQVQgIDAKKworLyoKKyAqIFJldHVybiBub24temVybyBpZiBwYXRoICduYW1lJyBoYXMgYSBsZWFkaW5nIHN5bWxpbmsgY29tcG9uZW50CisgKi8KK2ludCB0aHJlYWRlZF9oYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoc3RydWN0IGNhY2hlX2RlZiAqY2FjaGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJcmV0dXJuIGxzdGF0X2NhY2hlKGNhY2hlLCBuYW1lLCBsZW4sIEZMX1NZTUxJTkt8RkxfRElSLCBVU0VfT05MWV9MU1RBVCkgJiBGTF9TWU1MSU5LOworfQorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHBhdGggJ25hbWUnIGhhcyBhIGxlYWRpbmcgc3ltbGluayBjb21wb25lbnQKKyAqLworaW50IGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCXJldHVybiB0aHJlYWRlZF9oYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoJmRlZmF1bHRfY2FjaGUsIG5hbWUsIGxlbik7Cit9CisKKy8qCisgKiBSZXR1cm4gemVybyBpZiBwYXRoICduYW1lJyBoYXMgYSBsZWFkaW5nIHN5bWxpbmsgY29tcG9uZW50IG9yCisgKiBpZiBzb21lIGxlYWRpbmcgcGF0aCBjb21wb25lbnQgZG9lcyBub3QgZXhpc3RzLgorICoKKyAqIFJldHVybiAtMSBpZiBsZWFkaW5nIHBhdGggZXhpc3RzIGFuZCBpcyBhIGRpcmVjdG9yeS4KKyAqCisgKiBSZXR1cm4gcGF0aCBsZW5ndGggaWYgbGVhZGluZyBwYXRoIGV4aXN0cyBhbmQgaXMgbmVpdGhlciBhCisgKiBkaXJlY3Rvcnkgbm9yIGEgc3ltbGluay4KKyAqLworaW50IGNoZWNrX2xlYWRpbmdfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCXJldHVybiB0aHJlYWRlZF9jaGVja19sZWFkaW5nX3BhdGgoJmRlZmF1bHRfY2FjaGUsIG5hbWUsIGxlbik7Cit9CisKKy8qCisgKiBSZXR1cm4gemVybyBpZiBwYXRoICduYW1lJyBoYXMgYSBsZWFkaW5nIHN5bWxpbmsgY29tcG9uZW50IG9yCisgKiBpZiBzb21lIGxlYWRpbmcgcGF0aCBjb21wb25lbnQgZG9lcyBub3QgZXhpc3RzLgorICoKKyAqIFJldHVybiAtMSBpZiBsZWFkaW5nIHBhdGggZXhpc3RzIGFuZCBpcyBhIGRpcmVjdG9yeS4KKyAqCisgKiBSZXR1cm4gcGF0aCBsZW5ndGggaWYgbGVhZGluZyBwYXRoIGV4aXN0cyBhbmQgaXMgbmVpdGhlciBhCisgKiBkaXJlY3Rvcnkgbm9yIGEgc3ltbGluay4KKyAqLworc3RhdGljIGludCB0aHJlYWRlZF9jaGVja19sZWFkaW5nX3BhdGgoc3RydWN0IGNhY2hlX2RlZiAqY2FjaGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJaW50IGZsYWdzOworCWludCBtYXRjaF9sZW4gPSBsc3RhdF9jYWNoZV9tYXRjaGxlbihjYWNoZSwgbmFtZSwgbGVuLCAmZmxhZ3MsCisJCQkgICBGTF9TWU1MSU5LfEZMX05PRU5UfEZMX0RJUiwgVVNFX09OTFlfTFNUQVQpOworCWlmIChmbGFncyAmIEZMX05PRU5UKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmIChmbGFncyAmIEZMX0RJUikKKwkJcmV0dXJuIC0xOworCWVsc2UKKwkJcmV0dXJuIG1hdGNoX2xlbjsKK30KKworLyoKKyAqIFJldHVybiBub24temVybyBpZiBhbGwgcGF0aCBjb21wb25lbnRzIG9mICduYW1lJyBleGlzdHMgYXMgYQorICogZGlyZWN0b3J5LiAgSWYgcHJlZml4X2xlbiA+IDAsIHdlIHdpbGwgdGVzdCB3aXRoIHRoZSBzdGF0KCkKKyAqIGZ1bmN0aW9uIGluc3RlYWQgb2YgdGhlIGxzdGF0KCkgZnVuY3Rpb24gZm9yIGEgcHJlZml4IGxlbmd0aCBvZgorICogJ3ByZWZpeF9sZW4nLCB0aHVzIHdlIHRoZW4gYWxsb3cgZm9yIHN5bWxpbmtzIGluIHRoZSBwcmVmaXggcGFydCBhcworICogbG9uZyBhcyB0aG9zZSBwb2ludHMgdG8gcmVhbCBleGlzdGluZyBkaXJlY3Rvcmllcy4KKyAqLworaW50IGhhc19kaXJzX29ubHlfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgcHJlZml4X2xlbikKK3sKKwlyZXR1cm4gdGhyZWFkZWRfaGFzX2RpcnNfb25seV9wYXRoKCZkZWZhdWx0X2NhY2hlLCBuYW1lLCBsZW4sIHByZWZpeF9sZW4pOworfQorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIGFsbCBwYXRoIGNvbXBvbmVudHMgb2YgJ25hbWUnIGV4aXN0cyBhcyBhCisgKiBkaXJlY3RvcnkuICBJZiBwcmVmaXhfbGVuID4gMCwgd2Ugd2lsbCB0ZXN0IHdpdGggdGhlIHN0YXQoKQorICogZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgbHN0YXQoKSBmdW5jdGlvbiBmb3IgYSBwcmVmaXggbGVuZ3RoIG9mCisgKiAncHJlZml4X2xlbicsIHRodXMgd2UgdGhlbiBhbGxvdyBmb3Igc3ltbGlua3MgaW4gdGhlIHByZWZpeCBwYXJ0IGFzCisgKiBsb25nIGFzIHRob3NlIHBvaW50cyB0byByZWFsIGV4aXN0aW5nIGRpcmVjdG9yaWVzLgorICovCitzdGF0aWMgaW50IHRocmVhZGVkX2hhc19kaXJzX29ubHlfcGF0aChzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgaW50IHByZWZpeF9sZW4pCit7CisJcmV0dXJuIGxzdGF0X2NhY2hlKGNhY2hlLCBuYW1lLCBsZW4sCisJCQkgICBGTF9ESVJ8RkxfRlVMTFBBVEgsIHByZWZpeF9sZW4pICYKKwkJRkxfRElSOworfQorCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiByZW1vdmFsID0gU1RSQlVGX0lOSVQ7CisKK3N0YXRpYyB2b2lkIGRvX3JlbW92ZV9zY2hlZHVsZWRfZGlycyhpbnQgbmV3X2xlbikKK3sKKwl3aGlsZSAocmVtb3ZhbC5sZW4gPiBuZXdfbGVuKSB7CisJCXJlbW92YWwuYnVmW3JlbW92YWwubGVuXSA9ICdcMCc7CisJCWlmIChybWRpcihyZW1vdmFsLmJ1ZikpCisJCQlicmVhazsKKwkJZG8geworCQkJcmVtb3ZhbC5sZW4tLTsKKwkJfSB3aGlsZSAocmVtb3ZhbC5sZW4gPiBuZXdfbGVuICYmCisJCQkgcmVtb3ZhbC5idWZbcmVtb3ZhbC5sZW5dICE9ICcvJyk7CisJfQorCXJlbW92YWwubGVuID0gbmV3X2xlbjsKK30KKwordm9pZCBzY2hlZHVsZV9kaXJfZm9yX3JlbW92YWwoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlpbnQgbWF0Y2hfbGVuLCBsYXN0X3NsYXNoLCBpLCBwcmV2aW91c19zbGFzaDsKKworCW1hdGNoX2xlbiA9IGxhc3Rfc2xhc2ggPSBpID0KKwkJbG9uZ2VzdF9wYXRoX21hdGNoKG5hbWUsIGxlbiwgcmVtb3ZhbC5idWYsIHJlbW92YWwubGVuLAorCQkJCSAgICZwcmV2aW91c19zbGFzaCk7CisJLyogRmluZCBsYXN0IHNsYXNoIGluc2lkZSAnbmFtZScgKi8KKwl3aGlsZSAoaSA8IGxlbikgeworCQlpZiAobmFtZVtpXSA9PSAnLycpCisJCQlsYXN0X3NsYXNoID0gaTsKKwkJaSsrOworCX0KKworCS8qCisJICogSWYgd2UgYXJlIGFib3V0IHRvIGdvIGRvd24gdGhlIGRpcmVjdG9yeSB0cmVlLCB3ZSBjaGVjayBpZgorCSAqIHdlIG11c3QgZmlyc3QgZ28gdXB3YXJkcyB0aGUgdHJlZSwgc3VjaCB0aGF0IHdlIHRoZW4gY2FuCisJICogcmVtb3ZlIHBvc3NpYmxlIGVtcHR5IGRpcmVjdG9yaWVzIGFzIHdlIGdvIHVwd2FyZHMuCisJICovCisJaWYgKG1hdGNoX2xlbiA8IGxhc3Rfc2xhc2ggJiYgbWF0Y2hfbGVuIDwgcmVtb3ZhbC5sZW4pCisJCWRvX3JlbW92ZV9zY2hlZHVsZWRfZGlycyhtYXRjaF9sZW4pOworCS8qCisJICogSWYgd2UgZ28gZGVlcGVyIGRvd24gdGhlIGRpcmVjdG9yeSB0cmVlLCB3ZSBvbmx5IG5lZWQgdG8KKwkgKiBzYXZlIHRoZSBuZXcgcGF0aCBjb21wb25lbnRzIGFzIHdlIGdvIGRvd24uCisJICovCisJaWYgKG1hdGNoX2xlbiA8IGxhc3Rfc2xhc2gpCisJCXN0cmJ1Zl9hZGQoJnJlbW92YWwsICZuYW1lW21hdGNoX2xlbl0sIGxhc3Rfc2xhc2ggLSBtYXRjaF9sZW4pOworfQorCit2b2lkIHJlbW92ZV9zY2hlZHVsZWRfZGlycyh2b2lkKQoreworCWRvX3JlbW92ZV9zY2hlZHVsZWRfZGlycygwKTsKK30KZGlmZiAtLWdpdCBhL3QvLmdpdGF0dHJpYnV0ZXMgYi90Ly5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMDU0MzQKLS0tIC9kZXYvbnVsbAorKysgYi90Ly5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEsMjUgQEAKK3RbMC05XVswLTldWzAtOV1bMC05XS8qIC13aGl0ZXNwYWNlCisvY2hhaW5saW50LyouZXhwZWN0IGVvbD1sZgorL2RpZmYtbGliLyogZW9sPWxmCisvdDAxMTAvdXJsLSogYmluYXJ5CisvdDMyMDYvKiBlb2w9bGYKKy90MzkwMC8qLnR4dCBlb2w9bGYKKy90MzkwMS8qLnR4dCBlb2w9bGYKKy90NDAzNC8qLyogZW9sPWxmCisvdDQwMTMvKiBlb2w9bGYKKy90NDAxOC8qIGVvbD1sZgorL3Q0MDUxLyogZW9sPWxmCisvdDQxMDAvKiBlb2w9bGYKKy90NDEwMS8qIGVvbD1sZgorL3Q0MTA5LyogZW9sPWxmCisvdDQxMTAvKiBlb2w9bGYKKy90NDEzNS8qIGVvbD1sZgorL3Q0MjExLyogZW9sPWxmCisvdDQyNTIvKiBlb2w9bGYKKy90NDI1Ni8xLyogZW9sPWxmCisvdDUxMDAvKiBlb2w9bGYKKy90NTUxNS8qIGVvbD1sZgorL3Q1NTZ4X2NvbW1vbiBlb2w9bGYKKy90NzUwMC8qIGVvbD1sZgorL3Q4MDA1LyoudHh0IGVvbD1sZgorL3Q5Ki8qLmR1bXAgZW9sPWxmCmRpZmYgLS1naXQgYS90Ly5naXRpZ25vcmUgYi90Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjZjU3NwotLS0gL2Rldi9udWxsCisrKyBiL3QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDUgQEAKKy90cmFzaCBkaXJlY3RvcnkqCisvdGVzdC1yZXN1bHRzCisvLnByb3ZlCisvY2hhaW5saW50dG1wCisvb3V0LwpkaWZmIC0tZ2l0IGEvdC9HaXQtU1ZOLzAwY29tcGlsZS50IGIvdC9HaXQtU1ZOLzAwY29tcGlsZS50Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM5MmZlZTQKLS0tIC9kZXYvbnVsbAorKysgYi90L0dpdC1TVk4vMDBjb21waWxlLnQKQEAgLTAsMCArMSwxNCBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiA3OworCityZXF1aXJlX29rICdHaXQ6OlNWTic7CityZXF1aXJlX29rICdHaXQ6OlNWTjo6VXRpbHMnOworcmVxdWlyZV9vayAnR2l0OjpTVk46OlJhJzsKK3JlcXVpcmVfb2sgJ0dpdDo6U1ZOOjpMb2cnOworcmVxdWlyZV9vayAnR2l0OjpTVk46Ok1pZ3JhdGlvbic7CityZXF1aXJlX29rICdHaXQ6OkluZGV4SW5mbyc7CityZXF1aXJlX29rICdHaXQ6OlNWTjo6R2xvYlNwZWMnOwpkaWZmIC0tZ2l0IGEvdC9HaXQtU1ZOL1V0aWxzL2FkZF9wYXRoX3RvX3VybC50IGIvdC9HaXQtU1ZOL1V0aWxzL2FkZF9wYXRoX3RvX3VybC50Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmYmQ4NzgKLS0tIC9kZXYvbnVsbAorKysgYi90L0dpdC1TVk4vVXRpbHMvYWRkX3BhdGhfdG9fdXJsLnQKQEAgLTAsMCArMSwyNyBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgVGVzdDo6TW9yZSAnbm9fcGxhbic7CisKK3VzZSBHaXQ6OlNWTjo6VXRpbHMgcXcoCisJYWRkX3BhdGhfdG9fdXJsCispOworCisjIEEgcmVmZXJlbmNlIGNhbm5vdCBiZSBhIGhhc2gga2V5LCBzbyB3ZSB1c2UgYW4gYXJyYXkuCitteSBAdGVzdHMgPSAoCisJWyJodHRwOi8veC5jb20iLCAiYmFyIl0JCQk9PiAnaHR0cDovL3guY29tL2JhcicsCisJWyJodHRwOi8veC5jb20iLCAiIl0JCQk9PiAnaHR0cDovL3guY29tJywKKwlbImh0dHA6Ly94LmNvbS9mb28vIiwgdW5kZWZdCQk9PiAnaHR0cDovL3guY29tL2Zvby8nLAorCVsiaHR0cDovL3guY29tL2Zvby8iLCAiL2Jhci9iYXovIl0JPT4gJ2h0dHA6Ly94LmNvbS9mb28vYmFyL2Jhei8nLAorCVsiaHR0cDovL3guY29tIiwgJ3BlciVjZW50J10JCT0+ICdodHRwOi8veC5jb20vcGVyJTI1Y2VudCcsCispOworCit3aGlsZShAdGVzdHMpIHsKKwlteSgkaGF2ZSwgJHdhbnQpID0gc3BsaWNlIEB0ZXN0cywgMCwgMjsKKworCW15ICRhcmdzID0gam9pbiAiLCAiLCBtYXAgeyBxcVsnJF8nXSB9IG1hcCB7IGRlZmluZWQoJF8pID8gJF8gOiAndW5kZWYnIH0gQCRoYXZlOworCW15ICRuYW1lID0gImFkZF9wYXRoX3RvX3VybCgkYXJncykgZXEgJHdhbnQiOworCWlzIGFkZF9wYXRoX3RvX3VybChAJGhhdmUpLCAkd2FudCwgJG5hbWU7Cit9CmRpZmYgLS1naXQgYS90L0dpdC1TVk4vVXRpbHMvY2FuX2NvbXByZXNzLnQgYi90L0dpdC1TVk4vVXRpbHMvY2FuX2NvbXByZXNzLnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDdiNDliOAotLS0gL2Rldi9udWxsCisrKyBiL3QvR2l0LVNWTi9VdGlscy9jYW5fY29tcHJlc3MudApAQCAtMCwwICsxLDExIEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIFRlc3Q6Ok1vcmUgJ25vX3BsYW4nOworCit1c2UgR2l0OjpTVk46OlV0aWxzIHF3KGNhbl9jb21wcmVzcyk7CisKKyMgISEgaXMgdGhlICJjb252ZXJ0IHRoaXMgdG8gYm9vbGVhbiIgb3BlcmF0b3IuCitpcyAhIWNhbl9jb21wcmVzcygpLCAhIWV2YWwgeyByZXF1aXJlIENvbXByZXNzOjpabGliIH07CmRpZmYgLS1naXQgYS90L0dpdC1TVk4vVXRpbHMvY2Fub25pY2FsaXplX3VybC50IGIvdC9HaXQtU1ZOL1V0aWxzL2Nhbm9uaWNhbGl6ZV91cmwudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNTc5NWFiCi0tLSAvZGV2L251bGwKKysrIGIvdC9HaXQtU1ZOL1V0aWxzL2Nhbm9uaWNhbGl6ZV91cmwudApAQCAtMCwwICsxLDI2IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyMgVGVzdCBvdXIgb3duIGhvbWUgcm9sbGVkIFVSTCBjYW5vbmljYWxpemVyLiAgVGVzdCB0aGUgcHJpdmF0ZSBvbmUKKyMgZGlyZWN0bHkgYmVjYXVzZSB3ZSBjYW4ndCBwcmVkaWN0IHdoYXQgdGhlIFNWTiBBUEkgaXMgZG9pbmcgdG8gZG8uCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlICdub19wbGFuJzsKKwordXNlIEdpdDo6U1ZOOjpVdGlsczsKK215ICRjYW5vbmljYWxpemVfdXJsID0gXCZHaXQ6OlNWTjo6VXRpbHM6Ol9jYW5vbmljYWxpemVfdXJsX291cnNlbHZlczsKKworbXkgJXRlc3RzID0gKAorCSJodHRwOi8veC5jb20iCQkJPT4gImh0dHA6Ly94LmNvbSIsCisJImh0dHA6Ly94LmNvbS8iCQkJPT4gImh0dHA6Ly94LmNvbSIsCisJImh0dHA6Ly94LmNvbS9mb28vYmFyIgkJPT4gImh0dHA6Ly94LmNvbS9mb28vYmFyIiwKKwkiaHR0cDovL3guY29tLy9mb28vL2Jhci8vIgk9PiAiaHR0cDovL3guY29tL2Zvby9iYXIiLAorCSJodHRwOi8veC5jb20vICAvJS8iCQk9PiAiaHR0cDovL3guY29tLyUyMCUyMC8lMjUiLAorKTsKKworZm9yIG15ICRhcmcgKGtleXMgJXRlc3RzKSB7CisJbXkgJHdhbnQgPSAkdGVzdHN7JGFyZ307CisKKwlpcyAkY2Fub25pY2FsaXplX3VybC0+KCRhcmcpLCAkd2FudCwgImNhbm9uaWNhbGl6ZV91cmwoJyRhcmcnKSA9PiAkd2FudCI7Cit9CmRpZmYgLS1naXQgYS90L0dpdC1TVk4vVXRpbHMvY29sbGFwc2VfZG90ZG90LnQgYi90L0dpdC1TVk4vVXRpbHMvY29sbGFwc2VfZG90ZG90LnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWRhMWNjZQotLS0gL2Rldi9udWxsCisrKyBiL3QvR2l0LVNWTi9VdGlscy9jb2xsYXBzZV9kb3Rkb3QudApAQCAtMCwwICsxLDIzIEBACisjIS91c3IvYmluL2VudiBwZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlICdub19wbGFuJzsKKwordXNlIEdpdDo6U1ZOOjpVdGlsczsKK215ICRjb2xsYXBzZV9kb3Rkb3QgPSBcJkdpdDo6U1ZOOjpVdGlsczo6X2NvbGxhcHNlX2RvdGRvdDsKKworbXkgJXRlc3RzID0gKAorCSJmb28vYmFyL2JheiIJCQk9PiAiZm9vL2Jhci9iYXoiLAorCSIuLiIJCQkJPT4gIi4uIiwKKwkiZm9vLy4uIgkJCT0+ICIiLAorCSIvZm9vL2Jhci8uLi8uLi9iYXoiCQk9PiAiL2JheiIsCisJImRlZXBseS8uLi8uL2RlZXBseS9uZXN0ZWQiCT0+ICIuL2RlZXBseS9uZXN0ZWQiLAorKTsKKworZm9yIG15ICRhcmcgKGtleXMgJXRlc3RzKSB7CisJbXkgJHdhbnQgPSAkdGVzdHN7JGFyZ307CisKKwlpcyAkY29sbGFwc2VfZG90ZG90LT4oJGFyZyksICR3YW50LCAiX2NvbGxhcHNlX2RvdGRvdCgnJGFyZycpID0+ICR3YW50IjsKK30KZGlmZiAtLWdpdCBhL3QvR2l0LVNWTi9VdGlscy9mYXRhbC50IGIvdC9HaXQtU1ZOL1V0aWxzL2ZhdGFsLnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDllMTQzOAotLS0gL2Rldi9udWxsCisrKyBiL3QvR2l0LVNWTi9VdGlscy9mYXRhbC50CkBAIC0wLDAgKzEsMzQgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgVGVzdDo6TW9yZSAnbm9fcGxhbic7CisKK0JFR0lOIHsKKwkjIE92ZXJyaWRlIGV4aXQgYXQgQkVHSU4gdGltZSBiZWZvcmUgR2l0OjpTVk46OlV0aWxzIGlzIGxvYWRlZAorCSMgc28gaXQgd2lsbCBzZWUgb3VyIGxvY2FsIGV4aXQgbGF0ZXIuCisJKkNPUkU6OkdMT0JBTDo6ZXhpdCA9IHN1Yig7JCkgeworCXJldHVybiBAXyA/IENPUkU6OmV4aXQoJF9bMF0pIDogQ09SRTo6ZXhpdCgpOworCX07Cit9CisKK3VzZSBHaXQ6OlNWTjo6VXRpbHMgcXcoZmF0YWwpOworCisjIGZhdGFsKCkKK3sKKwkjIENhcHR1cmUgdGhlIGV4aXQgY29kZSBhbmQgcHJldmVudCBleGl0LgorCW15ICRleGl0X3N0YXR1czsKKwlubyB3YXJuaW5ncyAncmVkZWZpbmUnOworCWxvY2FsICpDT1JFOjpHTE9CQUw6OmV4aXQgPSBzdWIgeyAkZXhpdF9zdGF0dXMgPSAkX1swXSB8fCAwIH07CisKKwkjIFRyYXAgZmF0YWwncyBtZXNzYWdlIHRvIFNUREVSUgorCW15ICRzdGRlcnI7CisJY2xvc2UgU1RERVJSOworCW9rIG9wZW4gU1RERVJSLCAiPiIsIFwkc3RkZXJyOworCisJZmF0YWwgIlNvbWUiLCAiU3R1ZmYiLCAiSGFwcGVuZWQiOworCisJaXMgJHN0ZGVyciwgIlNvbWUgU3R1ZmYgSGFwcGVuZWRcbiI7CisJaXMgJGV4aXRfc3RhdHVzLCAxOworfQpkaWZmIC0tZ2l0IGEvdC9HaXQtU1ZOL1V0aWxzL2pvaW5fcGF0aHMudCBiL3QvR2l0LVNWTi9VdGlscy9qb2luX3BhdGhzLnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDQ0ODhlNwotLS0gL2Rldi9udWxsCisrKyBiL3QvR2l0LVNWTi9VdGlscy9qb2luX3BhdGhzLnQKQEAgLTAsMCArMSwzMiBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgVGVzdDo6TW9yZSAnbm9fcGxhbic7CisKK3VzZSBHaXQ6OlNWTjo6VXRpbHMgcXcoCisJam9pbl9wYXRocworKTsKKworIyBBIHJlZmVyZW5jZSBjYW5ub3QgYmUgYSBoYXNoIGtleSwgc28gd2UgdXNlIGFuIGFycmF5LgorbXkgQHRlc3RzID0gKAorCVtdCQkJCQk9PiAnJywKKwlbIi94LmNvbSIsICJiYXIiXQkJCT0+ICcveC5jb20vYmFyJywKKwlbInguY29tIiwgIiJdCQkJCT0+ICd4LmNvbScsCisJWyIveC5jb20vZm9vLyIsIHVuZGVmLCAiYmFyIl0JCT0+ICcveC5jb20vZm9vL2JhcicsCisJWyJ4LmNvbS9mb28vIiwgIi9iYXIvYmF6LyJdCQk9PiAneC5jb20vZm9vL2Jhci9iYXovJywKKwlbImZvbyIsICJiYXIiXQkJCQk9PiAnZm9vL2JhcicsCisJWyIvZm9vL2JhciIsICJiYXoiLCAiL2JpZmYiXQkJPT4gJy9mb28vYmFyL2Jhei9iaWZmJywKKwlbIiIsIHVuZGVmLCAiLiJdCQkJPT4gJy4nLAorCVtdCQkJCQk9PiAnJywKKworKTsKKword2hpbGUoQHRlc3RzKSB7CisJbXkoJGhhdmUsICR3YW50KSA9IHNwbGljZSBAdGVzdHMsIDAsIDI7CisKKwlteSAkYXJncyA9IGpvaW4gIiwgIiwgbWFwIHsgcXFbJyRfJ10gfSBtYXAgeyBkZWZpbmVkKCRfKSA/ICRfIDogJ3VuZGVmJyB9IEAkaGF2ZTsKKwlteSAkbmFtZSA9ICJqb2luX3BhdGhzKCRhcmdzKSBlcSAnJHdhbnQnIjsKKwlpcyBqb2luX3BhdGhzKEAkaGF2ZSksICR3YW50LCAkbmFtZTsKK30KZGlmZiAtLWdpdCBhL3QvTWFrZWZpbGUgYi90L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4M2ZkMTgKLS0tIC9kZXYvbnVsbAorKysgYi90L01ha2VmaWxlCkBAIC0wLDAgKzEsMTIyIEBACisjIFJ1biB0ZXN0cworIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKworLWluY2x1ZGUgLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi9jb25maWcubWFrCisKKyNHSVRfVEVTVF9PUFRTID0gLS12ZXJib3NlIC0tZGVidWcKK1NIRUxMX1BBVEggPz0gJChTSEVMTCkKK1RFU1RfU0hFTExfUEFUSCA/PSAkKFNIRUxMX1BBVEgpCitQRVJMX1BBVEggPz0gL3Vzci9iaW4vcGVybAorVEFSID89ICQoVEFSKQorUk0gPz0gcm0gLWYKK1BST1ZFID89IHByb3ZlCitERUZBVUxUX1RFU1RfVEFSR0VUID89IHRlc3QKK1RFU1RfTElOVCA/PSB0ZXN0LWxpbnQKKworaWZkZWYgVEVTVF9PVVRQVVRfRElSRUNUT1JZCitURVNUX1JFU1VMVFNfRElSRUNUT1JZID0gJChURVNUX09VVFBVVF9ESVJFQ1RPUlkpL3Rlc3QtcmVzdWx0cworQ0hBSU5MSU5UVE1QID0gJChURVNUX09VVFBVVF9ESVJFQ1RPUlkpL2NoYWlubGludHRtcAorZWxzZQorVEVTVF9SRVNVTFRTX0RJUkVDVE9SWSA9IHRlc3QtcmVzdWx0cworQ0hBSU5MSU5UVE1QID0gY2hhaW5saW50dG1wCitlbmRpZgorCisjIFNoZWxsIHF1b3RlOworU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSCkpCitURVNUX1NIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFRFU1RfU0hFTExfUEFUSCkpCitQRVJMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFBFUkxfUEFUSCkpCitURVNUX1JFU1VMVFNfRElSRUNUT1JZX1NRID0gJChzdWJzdCAnLCdcJycsJChURVNUX1JFU1VMVFNfRElSRUNUT1JZKSkKK0NIQUlOTElOVFRNUF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoQ0hBSU5MSU5UVE1QKSkKKworVCA9ICQoc29ydCAkKHdpbGRjYXJkIHRbMC05XVswLTldWzAtOV1bMC05XS0qLnNoKSkKK1RHSVRXRUIgPSAkKHNvcnQgJCh3aWxkY2FyZCB0OTVbMC05XVswLTldLSouc2gpKQorVEhFTFBFUlMgPSAkKHNvcnQgJChmaWx0ZXItb3V0ICQoVCksJCh3aWxkY2FyZCAqLnNoKSkpCitDSEFJTkxJTlRURVNUUyA9ICQoc29ydCAkKHBhdHN1YnN0IGNoYWlubGludC8lLnRlc3QsJSwkKHdpbGRjYXJkIGNoYWlubGludC8qLnRlc3QpKSkKK0NIQUlOTElOVCA9IHNlZCAtZiBjaGFpbmxpbnQuc2VkCisKK2FsbDogJChERUZBVUxUX1RFU1RfVEFSR0VUKQorCit0ZXN0OiBwcmUtY2xlYW4gY2hlY2stY2hhaW5saW50ICQoVEVTVF9MSU5UKQorCSQoTUFLRSkgYWdncmVnYXRlLXJlc3VsdHMtYW5kLWNsZWFudXAKKworZmFpbGVkOgorCUBmYWlsZWQ9JCQoY2QgJyQoVEVTVF9SRVNVTFRTX0RJUkVDVE9SWV9TUSknICYmIFwKKwkJZ3JlcCAtbCAnXmZhaWxlZCBbMS05XScgKi5jb3VudHMgfCBcCisJCXNlZCAtbiAncy9cLmNvdW50cyQkLy5zaC9wJykgJiYgXAorCXRlc3QgLXogIiQkZmFpbGVkIiB8fCAkKE1BS0UpICQkZmFpbGVkCisKK3Byb3ZlOiBwcmUtY2xlYW4gY2hlY2stY2hhaW5saW50ICQoVEVTVF9MSU5UKQorCUBlY2hvICIqKiogcHJvdmUgKioqIjsgJChQUk9WRSkgLS1leGVjICckKFRFU1RfU0hFTExfUEFUSF9TUSknICQoR0lUX1BST1ZFX09QVFMpICQoVCkgOjogJChHSVRfVEVTVF9PUFRTKQorCSQoTUFLRSkgY2xlYW4tZXhjZXB0LXByb3ZlLWNhY2hlCisKKyQoVCk6CisJQGVjaG8gIioqKiAkQCAqKioiOyAnJChURVNUX1NIRUxMX1BBVEhfU1EpJyAkQCAkKEdJVF9URVNUX09QVFMpCisKK3ByZS1jbGVhbjoKKwkkKFJNKSAtciAnJChURVNUX1JFU1VMVFNfRElSRUNUT1JZX1NRKScKKworY2xlYW4tZXhjZXB0LXByb3ZlLWNhY2hlOiBjbGVhbi1jaGFpbmxpbnQKKwkkKFJNKSAtciAndHJhc2ggZGlyZWN0b3J5Jy4qICckKFRFU1RfUkVTVUxUU19ESVJFQ1RPUllfU1EpJworCSQoUk0pIC1yIHZhbGdyaW5kL2JpbgorCitjbGVhbjogY2xlYW4tZXhjZXB0LXByb3ZlLWNhY2hlCisJJChSTSkgLnByb3ZlCisKK2NsZWFuLWNoYWlubGludDoKKwkkKFJNKSAtciAnJChDSEFJTkxJTlRUTVBfU1EpJworCitjaGVjay1jaGFpbmxpbnQ6CisJQG1rZGlyIC1wICckKENIQUlOTElOVFRNUF9TUSknICYmIFwKKwllcnI9MCAmJiBcCisJZm9yIGkgaW4gJChDSEFJTkxJTlRURVNUUyk7IGRvIFwKKwkJJChDSEFJTkxJTlQpIDxjaGFpbmxpbnQvJCRpLnRlc3QgfCBcCisJCXNlZCAtZSAnL14jIExJTlQ6IC9kJyA+JyQoQ0hBSU5MSU5UVE1QX1NRKScvJCRpLmFjdHVhbCAmJiBcCisJCWRpZmYgLXUgY2hhaW5saW50LyQkaS5leHBlY3QgJyQoQ0hBSU5MSU5UVE1QX1NRKScvJCRpLmFjdHVhbCB8fCBlcnI9MTsgXAorCWRvbmUgJiYgZXhpdCAkJGVycgorCit0ZXN0LWxpbnQ6IHRlc3QtbGludC1kdXBsaWNhdGVzIHRlc3QtbGludC1leGVjdXRhYmxlIHRlc3QtbGludC1zaGVsbC1zeW50YXggXAorCXRlc3QtbGludC1maWxlbmFtZXMKKwordGVzdC1saW50LWR1cGxpY2F0ZXM6CisJQGR1cHM9YGVjaG8gJChUKSB8IHRyICcgJyAnXG4nIHwgc2VkICdzLy0uKi8vJyB8IHNvcnQgfCB1bmlxIC1kYCAmJiBcCisJCXRlc3QgLXogIiQkZHVwcyIgfHwgeyBcCisJCWVjaG8gPiYyICJkdXBsaWNhdGUgdGVzdCBudW1iZXJzOiIgJCRkdXBzOyBleGl0IDE7IH0KKwordGVzdC1saW50LWV4ZWN1dGFibGU6CisJQGJhZD1gZm9yIGkgaW4gJChUKTsgZG8gdGVzdCAteCAiJCRpIiB8fCBlY2hvICQkaTsgZG9uZWAgJiYgXAorCQl0ZXN0IC16ICIkJGJhZCIgfHwgeyBcCisJCWVjaG8gPiYyICJub24tZXhlY3V0YWJsZSB0ZXN0czoiICQkYmFkOyBleGl0IDE7IH0KKwordGVzdC1saW50LXNoZWxsLXN5bnRheDoKKwlAJyQoUEVSTF9QQVRIX1NRKScgY2hlY2stbm9uLXBvcnRhYmxlLXNoZWxsLnBsICQoVCkgJChUSEVMUEVSUykKKwordGVzdC1saW50LWZpbGVuYW1lczoKKwlAIyBXZSBkbyAqbm90KiBwYXNzIGEgZ2xvYiB0byBscy1maWxlcyBidXQgdXNlIGdyZXAgaW5zdGVhZCwgdG8gY2F0Y2gKKwlAIyBub24tQVNDSUkgY2hhcmFjdGVycyAod2hpY2ggYXJlIHF1b3RlZCB3aXRoaW4gZG91YmxlLXF1b3RlcykKKwlAYmFkPSIkJChnaXQgLWMgY29yZS5xdW90ZXBhdGg9dHJ1ZSBscy1maWxlcyAyPi9kZXYvbnVsbCB8IFwKKwkJCWdyZXAgJ1siKjo8Pj9cXHxdJykiOyBcCisJCXRlc3QgLXogIiQkYmFkIiB8fCB7IFwKKwkJZWNobyA+JjIgIm5vbi1wb3J0YWJsZSBmaWxlIG5hbWUocyk6ICQkYmFkIjsgZXhpdCAxOyB9CisKK2FnZ3JlZ2F0ZS1yZXN1bHRzLWFuZC1jbGVhbnVwOiAkKFQpCisJJChNQUtFKSBhZ2dyZWdhdGUtcmVzdWx0cworCSQoTUFLRSkgY2xlYW4KKworYWdncmVnYXRlLXJlc3VsdHM6CisJZm9yIGYgaW4gJyQoVEVTVF9SRVNVTFRTX0RJUkVDVE9SWV9TUSknL3QqLSouY291bnRzOyBkbyBcCisJCWVjaG8gIiQkZiI7IFwKKwlkb25lIHwgJyQoU0hFTExfUEFUSF9TUSknIC4vYWdncmVnYXRlLXJlc3VsdHMuc2gKKworZ2l0d2ViLXRlc3Q6CisJJChNQUtFKSAkKFRHSVRXRUIpCisKK3ZhbGdyaW5kOgorCSQoTUFLRSkgR0lUX1RFU1RfT1BUUz0iJChHSVRfVEVTVF9PUFRTKSAtLXZhbGdyaW5kIgorCitwZXJmOgorCSQoTUFLRSkgLUMgcGVyZi8gYWxsCisKKy5QSE9OWTogcHJlLWNsZWFuICQoVCkgYWdncmVnYXRlLXJlc3VsdHMgY2xlYW4gdmFsZ3JpbmQgcGVyZiBjaGVjay1jaGFpbmxpbnQgY2xlYW4tY2hhaW5saW50CmRpZmYgLS1naXQgYS90L1JFQURNRSBiL3QvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmODYzODMKLS0tIC9kZXYvbnVsbAorKysgYi90L1JFQURNRQpAQCAtMCwwICsxLDExNzggQEAKK0NvcmUgR0lUIFRlc3RzCis9PT09PT09PT09PT09PQorCitUaGlzIGRpcmVjdG9yeSBob2xkcyBtYW55IHRlc3Qgc2NyaXB0cyBmb3IgY29yZSBHSVQgdG9vbHMuICBUaGUKK2ZpcnN0IHBhcnQgb2YgdGhpcyBzaG9ydCBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHJ1biB0aGUgdGVzdHMKK2FuZCByZWFkIHRoZWlyIG91dHB1dC4KKworV2hlbiBmaXhpbmcgdGhlIHRvb2xzIG9yIGFkZGluZyBlbmhhbmNlbWVudHMsIHlvdSBhcmUgc3Ryb25nbHkKK2VuY291cmFnZWQgdG8gYWRkIHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IHRvIGNvdmVyIHdoYXQgeW91IGFyZQordHJ5aW5nIHRvIGZpeCBvciBlbmhhbmNlLiAgVGhlIGxhdGVyIHBhcnQgb2YgdGhpcyBzaG9ydCBkb2N1bWVudAorZGVzY3JpYmVzIGhvdyB5b3VyIHRlc3Qgc2NyaXB0cyBzaG91bGQgYmUgb3JnYW5pemVkLgorCisKK1J1bm5pbmcgVGVzdHMKKy0tLS0tLS0tLS0tLS0KKworVGhlIGVhc2llc3Qgd2F5IHRvIHJ1biB0ZXN0cyBpcyB0byBzYXkgIm1ha2UiLiAgVGhpcyBydW5zIGFsbAordGhlIHRlc3RzLgorCisgICAgKioqIHQwMDAwLWJhc2ljLnNoICoqKgorICAgIG9rIDEgLSAuZ2l0L29iamVjdHMgc2hvdWxkIGJlIGVtcHR5IGFmdGVyIGdpdCBpbml0IGluIGFuIGVtcHR5IHJlcG8uCisgICAgb2sgMiAtIC5naXQvb2JqZWN0cyBzaG91bGQgaGF2ZSAzIHN1YmRpcmVjdG9yaWVzLgorICAgIG9rIDMgLSBzdWNjZXNzIGlzIHJlcG9ydGVkIGxpa2UgdGhpcworICAgIC4uLgorICAgIG9rIDQzIC0gdmVyeSBsb25nIG5hbWUgaW4gdGhlIGluZGV4IGhhbmRsZWQgc2FuZWx5CisgICAgIyBmaXhlZCAxIGtub3duIGJyZWFrYWdlKHMpCisgICAgIyBzdGlsbCBoYXZlIDEga25vd24gYnJlYWthZ2UocykKKyAgICAjIHBhc3NlZCBhbGwgcmVtYWluaW5nIDQyIHRlc3QocykKKyAgICAxLi40MworICAgICoqKiB0MDAwMS1pbml0LnNoICoqKgorICAgIG9rIDEgLSBwbGFpbgorICAgIG9rIDIgLSBwbGFpbiB3aXRoIEdJVF9XT1JLX1RSRUUKKyAgICBvayAzIC0gcGxhaW4gYmFyZQorCitTaW5jZSB0aGUgdGVzdHMgYWxsIG91dHB1dCBUQVAgKHNlZSBodHRwOi8vdGVzdGFueXRoaW5nLm9yZykgdGhleSBjYW4KK2JlIHJ1biB3aXRoIGFueSBUQVAgaGFybmVzcy4gSGVyZSdzIGFuIGV4YW1wbGUgb2YgcGFyYWxsZWwgdGVzdGluZworcG93ZXJlZCBieSBhIHJlY2VudCB2ZXJzaW9uIG9mIHByb3ZlKDEpOgorCisgICAgJCBwcm92ZSAtLXRpbWVyIC0tam9icyAxNSAuL3RbMC05XSouc2gKKyAgICBbMTk6MTc6MzNdIC4vdDAwMDUtc2lnbmFscy5zaCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBvayAgICAgICAzNiBtcworICAgIFsxOToxNzozM10gLi90MDAyMi1jcmxmLXJlbmFtZS5zaCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIG9rICAgICAgIDY5IG1zCisgICAgWzE5OjE3OjMzXSAuL3QwMDI0LWNybGYtYXJjaGl2ZS5zaCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gb2sgICAgICAxNTQgbXMKKyAgICBbMTk6MTc6MzNdIC4vdDAwMDQtdW53cml0YWJsZS5zaCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBvayAgICAgIDI4OSBtcworICAgIFsxOToxNzozM10gLi90MDAwMi1naXRmaWxlLnNoIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIG9rICAgICAgNDgwIG1zCisgICAgPT09KCAgICAgMTAyOzAgIDI1Lz8gIDYvPyAgNS8/ICAxNi8/ICAxLz8gIDQvPyAgMi8/ICAxLz8gIDMvPyAgMS4uLiApPT09CisKK3Byb3ZlIGFuZCBvdGhlciBoYXJuZXNzZXMgY29tZSB3aXRoIGEgbG90IG9mIHVzZWZ1bCBvcHRpb25zLiBUaGUKKy0tc3RhdGUgb3B0aW9uIGluIHBhcnRpY3VsYXIgaXMgdmVyeSB1c2VmdWw6CisKKyAgICAjIFJlcGVhdCB1bnRpbCBubyBtb3JlIGZhaWx1cmVzCisgICAgJCBwcm92ZSAtaiAxNSAtLXN0YXRlPWZhaWxlZCxzYXZlIC4vdFswLTldKi5zaAorCitZb3UgY2FuIGdpdmUgREVGQVVMVF9URVNUX1RBUkdFVD1wcm92ZSBvbiB0aGUgbWFrZSBjb21tYW5kIChvciBkZWZpbmUgaXQKK2luIGNvbmZpZy5tYWspIHRvIGNhdXNlICJtYWtlIHRlc3QiIHRvIHJ1biB0ZXN0cyB1bmRlciBwcm92ZS4KK0dJVF9QUk9WRV9PUFRTIGNhbiBiZSB1c2VkIHRvIHBhc3MgYWRkaXRpb25hbCBvcHRpb25zLCBlLmcuCisKKyAgICAkIG1ha2UgREVGQVVMVF9URVNUX1RBUkdFVD1wcm92ZSBHSVRfUFJPVkVfT1BUUz0nLS10aW1lciAtLWpvYnMgMTYnIHRlc3QKKworWW91IGNhbiBhbHNvIHJ1biBlYWNoIHRlc3QgaW5kaXZpZHVhbGx5IGZyb20gY29tbWFuZCBsaW5lLCBsaWtlIHRoaXM6CisKKyAgICAkIHNoIC4vdDMwMTAtbHMtZmlsZXMta2lsbGVkLW1vZGlmaWVkLnNoCisgICAgb2sgMSAtIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgdG8gYWRkIHZhcmlvdXMgcGF0aHMuCisgICAgb2sgMiAtIGdpdCBscy1maWxlcyAtayB0byBzaG93IGtpbGxlZCBmaWxlcy4KKyAgICBvayAzIC0gdmFsaWRhdGUgZ2l0IGxzLWZpbGVzIC1rIG91dHB1dC4KKyAgICBvayA0IC0gZ2l0IGxzLWZpbGVzIC1tIHRvIHNob3cgbW9kaWZpZWQgZmlsZXMuCisgICAgb2sgNSAtIHZhbGlkYXRlIGdpdCBscy1maWxlcyAtbSBvdXRwdXQuCisgICAgIyBwYXNzZWQgYWxsIDUgdGVzdChzKQorICAgIDEuLjUKKworWW91IGNhbiBwYXNzIC0tdmVyYm9zZSAob3IgLXYpLCAtLWRlYnVnIChvciAtZCksIGFuZCAtLWltbWVkaWF0ZQorKG9yIC1pKSBjb21tYW5kIGxpbmUgYXJndW1lbnQgdG8gdGhlIHRlc3QsIG9yIGJ5IHNldHRpbmcgR0lUX1RFU1RfT1BUUworYXBwcm9wcmlhdGVseSBiZWZvcmUgcnVubmluZyAibWFrZSIuIFNob3J0IG9wdGlvbnMgY2FuIGJlIGJ1bmRsZWQsIGkuZS4KKyctZCAtdicgaXMgdGhlIHNhbWUgYXMgJy1kdicuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJVGhpcyBtYWtlcyB0aGUgdGVzdCBtb3JlIHZlcmJvc2UuICBTcGVjaWZpY2FsbHksIHRoZQorCWNvbW1hbmQgYmVpbmcgcnVuIGFuZCB0aGVpciBvdXRwdXQgaWYgYW55IGFyZSBhbHNvCisJb3V0cHV0LgorCistLXZlcmJvc2Utb25seT08cGF0dGVybj46OgorCUxpa2UgLS12ZXJib3NlLCBidXQgdGhlIGVmZmVjdCBpcyBsaW1pdGVkIHRvIHRlc3RzIHdpdGgKKwludW1iZXJzIG1hdGNoaW5nIDxwYXR0ZXJuPi4gIFRoZSBudW1iZXIgbWF0Y2hlZCBhZ2FpbnN0IGlzCisJc2ltcGx5IHRoZSBydW5uaW5nIGNvdW50IG9mIHRoZSB0ZXN0IHdpdGhpbiB0aGUgZmlsZS4KKworLXg6OgorCVR1cm4gb24gc2hlbGwgdHJhY2luZyAoaS5lLiwgYHNldCAteGApIGR1cmluZyB0aGUgdGVzdHMKKwl0aGVtc2VsdmVzLiBJbXBsaWVzIGAtLXZlcmJvc2VgLgorCUlnbm9yZWQgaW4gdGVzdCBzY3JpcHRzIHRoYXQgc2V0IHRoZSB2YXJpYWJsZSAndGVzdF91bnRyYWNlYWJsZScKKwl0byBhIG5vbi1lbXB0eSB2YWx1ZSwgdW5sZXNzIGl0J3MgcnVuIHdpdGggYSBCYXNoIHZlcnNpb24KKwlzdXBwb3J0aW5nIEJBU0hfWFRSQUNFRkQsIGkuZS4gdjQuMSBvciBsYXRlci4KKworLWQ6OgorLS1kZWJ1Zzo6CisJVGhpcyBtYXkgaGVscCB0aGUgcGVyc29uIHdobyBpcyBkZXZlbG9waW5nIGEgbmV3IHRlc3QuCisJSXQgY2F1c2VzIHRoZSBjb21tYW5kIGRlZmluZWQgd2l0aCB0ZXN0X2RlYnVnIHRvIHJ1bi4KKwlUaGUgInRyYXNoIiBkaXJlY3RvcnkgKHVzZWQgdG8gc3RvcmUgYWxsIHRlbXBvcmFyeSBkYXRhCisJZHVyaW5nIHRlc3RpbmcpIGlzIG5vdCBkZWxldGVkIGV2ZW4gaWYgdGhlcmUgYXJlIG5vCisJZmFpbGVkIHRlc3RzIHNvIHRoYXQgeW91IGNhbiBpbnNwZWN0IGl0cyBjb250ZW50cyBhZnRlcgorCXRoZSB0ZXN0IGZpbmlzaGVkLgorCistaTo6CistLWltbWVkaWF0ZTo6CisJVGhpcyBjYXVzZXMgdGhlIHRlc3QgdG8gaW1tZWRpYXRlbHkgZXhpdCB1cG9uIHRoZSBmaXJzdAorCWZhaWxlZCB0ZXN0LiBDbGVhbnVwIGNvbW1hbmRzIHJlcXVlc3RlZCB3aXRoCisJdGVzdF93aGVuX2ZpbmlzaGVkIGFyZSBub3QgZXhlY3V0ZWQgaWYgdGhlIHRlc3QgZmFpbGVkLAorCWluIG9yZGVyIHRvIGtlZXAgdGhlIHN0YXRlIGZvciBpbnNwZWN0aW9uIGJ5IHRoZSB0ZXN0ZXIKKwl0byBkaWFnbm9zZSB0aGUgYnVnLgorCistbDo6CistLWxvbmctdGVzdHM6OgorCVRoaXMgY2F1c2VzIGFkZGl0aW9uYWwgbG9uZy1ydW5uaW5nIHRlc3RzIHRvIGJlIHJ1biAod2hlcmUKKwlhdmFpbGFibGUpLCBmb3IgbW9yZSBleGhhdXN0aXZlIHRlc3RpbmcuCisKKy1yOjoKKy0tcnVuPTx0ZXN0LXNlbGVjdG9yPjo6CisJUnVuIG9ubHkgdGhlIHN1YnNldCBvZiB0ZXN0cyBpbmRpY2F0ZWQgYnkKKwk8dGVzdC1zZWxlY3Rvcj4uICBTZWUgc2VjdGlvbiAiU2tpcHBpbmcgVGVzdHMiIGJlbG93IGZvcgorCTx0ZXN0LXNlbGVjdG9yPiBzeW50YXguCisKKy0tdmFsZ3JpbmQ9PHRvb2w+OjoKKwlFeGVjdXRlIGFsbCBHaXQgYmluYXJpZXMgdW5kZXIgdmFsZ3JpbmQgdG9vbCA8dG9vbD4gYW5kIGV4aXQKKwl3aXRoIHN0YXR1cyAxMjYgb24gZXJyb3JzIChqdXN0IGxpa2UgcmVndWxhciB0ZXN0cywgdGhpcyB3aWxsCisJb25seSBzdG9wIHRoZSB0ZXN0IHNjcmlwdCB3aGVuIHJ1bm5pbmcgdW5kZXIgLWkpLgorCisJU2luY2UgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gcnVuIHRoZSB0ZXN0cyB3aXRoIC0tdmFsZ3JpbmQgYW5kCisJbm90IHNlZSBhbnkgb3V0cHV0LCB0aGlzIG9wdGlvbiBpbXBsaWVzIC0tdmVyYm9zZS4gIEZvcgorCWNvbnZlbmllbmNlLCBpdCBhbHNvIGltcGxpZXMgLS10ZWUuCisKKwk8dG9vbD4gZGVmYXVsdHMgdG8gJ21lbWNoZWNrJywganVzdCBsaWtlIHZhbGdyaW5kIGl0c2VsZi4KKwlPdGhlciBwYXJ0aWN1bGFybHkgdXNlZnVsIGNob2ljZXMgaW5jbHVkZSAnaGVsZ3JpbmQnIGFuZAorCSdkcmQnLCBidXQgeW91IG1heSB1c2UgYW55IHRvb2wgcmVjb2duaXplZCBieSB5b3VyIHZhbGdyaW5kCisJaW5zdGFsbGF0aW9uLgorCisJQXMgYSBzcGVjaWFsIGNhc2UsIDx0b29sPiBjYW4gYmUgJ21lbWNoZWNrLWZhc3QnLCB3aGljaCB1c2VzCisJbWVtY2hlY2sgYnV0IGRpc2FibGVzIC0tdHJhY2stb3JpZ2lucy4gIFVzZSB0aGlzIGlmIHlvdSBhcmUKKwlydW5uaW5nIHRlc3RzIGluIGJ1bGssIHRvIHNlZSBpZiB0aGVyZSBhcmUgX2FueV8gbWVtb3J5CisJaXNzdWVzLgorCisJTm90ZSB0aGF0IG1lbWNoZWNrIGlzIHJ1biB3aXRoIHRoZSBvcHRpb24gLS1sZWFrLWNoZWNrPW5vLAorCWFzIHRoZSBnaXQgcHJvY2VzcyBpcyBzaG9ydC1saXZlZCBhbmQgc29tZSBlcnJvcnMgYXJlIG5vdAorCWludGVyZXN0aW5nLiBJbiBvcmRlciB0byBydW4gYSBzaW5nbGUgY29tbWFuZCB1bmRlciB0aGUgc2FtZQorCWNvbmRpdGlvbnMgbWFudWFsbHksIHlvdSBzaG91bGQgc2V0IEdJVF9WQUxHUklORCB0byBwb2ludCB0bworCXRoZSAndC92YWxncmluZC8nIGRpcmVjdG9yeSBhbmQgdXNlIHRoZSBjb21tYW5kcyB1bmRlcgorCSd0L3ZhbGdyaW5kL2Jpbi8nLgorCistLXZhbGdyaW5kLW9ubHk9PHBhdHRlcm4+OjoKKwlMaWtlIC0tdmFsZ3JpbmQsIGJ1dCB0aGUgZWZmZWN0IGlzIGxpbWl0ZWQgdG8gdGVzdHMgd2l0aAorCW51bWJlcnMgbWF0Y2hpbmcgPHBhdHRlcm4+LiAgVGhlIG51bWJlciBtYXRjaGVkIGFnYWluc3QgaXMKKwlzaW1wbHkgdGhlIHJ1bm5pbmcgY291bnQgb2YgdGhlIHRlc3Qgd2l0aGluIHRoZSBmaWxlLgorCistLXRlZTo6CisJSW4gYWRkaXRpb24gdG8gcHJpbnRpbmcgdGhlIHRlc3Qgb3V0cHV0IHRvIHRoZSB0ZXJtaW5hbCwKKwl3cml0ZSBpdCB0byBmaWxlcyBuYW1lZCAndC90ZXN0LXJlc3VsdHMvJFRFU1RfTkFNRS5vdXQnLgorCUFzIHRoZSBuYW1lcyBkZXBlbmQgb24gdGhlIHRlc3RzJyBmaWxlIG5hbWVzLCBpdCBpcyBzYWZlIHRvCisJcnVuIHRoZSB0ZXN0cyB3aXRoIHRoaXMgb3B0aW9uIGluIHBhcmFsbGVsLgorCistVjo6CistLXZlcmJvc2UtbG9nOjoKKwlXcml0ZSB2ZXJib3NlIG91dHB1dCB0byB0aGUgc2FtZSBsb2dmaWxlIGFzIGAtLXRlZWAsIGJ1dCBkbworCV9ub3RfIHdyaXRlIGl0IHRvIHN0ZG91dC4gVW5saWtlIGAtLXRlZSAtLXZlcmJvc2VgLCB0aGlzIG9wdGlvbgorCWlzIHNhZmUgdG8gdXNlIHdoZW4gc3Rkb3V0IGlzIGJlaW5nIGNvbnN1bWVkIGJ5IGEgVEFQIHBhcnNlcgorCWxpa2UgYHByb3ZlYC4gSW1wbGllcyBgLS10ZWVgIGFuZCBgLS12ZXJib3NlYC4KKworLS13aXRoLWRhc2hlczo6CisJQnkgZGVmYXVsdCB0ZXN0cyBhcmUgcnVuIHdpdGhvdXQgZGFzaGVkIGZvcm1zIG9mCisJY29tbWFuZHMgKGxpa2UgZ2l0LWNvbW1pdCkgaW4gdGhlIFBBVEggKGl0IG9ubHkgdXNlcworCXdyYXBwZXJzIGZyb20gLi4vYmluLXdyYXBwZXJzKS4gIFVzZSB0aGlzIG9wdGlvbiB0byBpbmNsdWRlCisJdGhlIGJ1aWxkIGRpcmVjdG9yeSAoLi4pIGluIHRoZSBQQVRILCB3aGljaCBjb250YWlucyBhbGwKKwl0aGUgZGFzaGVkIGZvcm1zIG9mIGNvbW1hbmRzLiAgVGhpcyBvcHRpb24gaXMgY3VycmVudGx5CisJaW1wbGllZCBieSBvdGhlciBvcHRpb25zIGxpa2UgLS12YWxncmluZCBhbmQKKwlHSVRfVEVTVF9JTlNUQUxMRUQuCisKKy0tbm8tYmluLXdyYXBwZXJzOjoKKwlCeSBkZWZhdWx0LCB0aGUgdGVzdCBzdWl0ZSB1c2VzIHRoZSB3cmFwcGVycyBpbgorCWAuLi9iaW4td3JhcHBlcnMvYCB0byBleGVjdXRlIGBnaXRgIGFuZCBmcmllbmRzLiBXaXRoIHRoaXMgb3B0aW9uLAorCWAuLi9naXRgIGFuZCBmcmllbmRzIGFyZSBydW4gZGlyZWN0bHkuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkCisJaW4gZ2VuZXJhbCwgYXMgdGhlIHdyYXBwZXJzIGNvbnRhaW4gc2FmZWd1YXJkcyB0byBlbnN1cmUgdGhhdCBubworCWZpbGVzIGZyb20gYW4gaW5zdGFsbGVkIEdpdCBhcmUgdXNlZCwgYnV0IGNhbiBzcGVlZCB1cCB0ZXN0IHJ1bnMKKwllc3BlY2lhbGx5IG9uIHBsYXRmb3JtcyB3aGVyZSBydW5uaW5nIHNoZWxsIHNjcmlwdHMgaXMgZXhwZW5zaXZlCisJKG1vc3Qgbm90YWJseSwgV2luZG93cykuCisKKy0tcm9vdD08ZGlyZWN0b3J5Pjo6CisJQ3JlYXRlICJ0cmFzaCIgZGlyZWN0b3JpZXMgdXNlZCB0byBzdG9yZSBhbGwgdGVtcG9yYXJ5IGRhdGEgZHVyaW5nCisJdGVzdGluZyB1bmRlciA8ZGlyZWN0b3J5PiwgaW5zdGVhZCBvZiB0aGUgdC8gZGlyZWN0b3J5LgorCVVzaW5nIHRoaXMgb3B0aW9uIHdpdGggYSBSQU0tYmFzZWQgZmlsZXN5c3RlbSAoc3VjaCBhcyB0bXBmcykKKwljYW4gbWFzc2l2ZWx5IHNwZWVkIHVwIHRoZSB0ZXN0IHN1aXRlLgorCistLWNoYWluLWxpbnQ6OgorLS1uby1jaGFpbi1saW50OjoKKwlJZiAtLWNoYWluLWxpbnQgaXMgZW5hYmxlZCwgdGhlIHRlc3QgaGFybmVzcyB3aWxsIGNoZWNrIGVhY2gKKwl0ZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IGl0IHByb3Blcmx5ICImJi1jaGFpbnMiIGFsbCBjb21tYW5kcyAoc28KKwl0aGF0IGEgZmFpbHVyZSBpbiB0aGUgbWlkZGxlIGRvZXMgbm90IGdvIHVubm90aWNlZCBieSB0aGUgZmluYWwKKwlleGl0IGNvZGUgb2YgdGhlIHRlc3QpLiBUaGlzIGNoZWNrIGlzIHBlcmZvcm1lZCBpbiBhZGRpdGlvbiB0bworCXJ1bm5pbmcgdGhlIHRlc3RzIHRoZW1zZWx2ZXMuIFlvdSBtYXkgYWxzbyBlbmFibGUgb3IgZGlzYWJsZQorCXRoaXMgZmVhdHVyZSBieSBzZXR0aW5nIHRoZSBHSVRfVEVTVF9DSEFJTl9MSU5UIGVudmlyb25tZW50CisJdmFyaWFibGUgdG8gIjEiIG9yICIwIiwgcmVzcGVjdGl2ZWx5LgorCistLXN0cmVzczo6CisJUnVuIHRoZSB0ZXN0IHNjcmlwdCByZXBlYXRlZGx5IGluIG11bHRpcGxlIHBhcmFsbGVsIGpvYnMgdW50aWwKKwlvbmUgb2YgdGhlbSBmYWlscy4gIFVzZWZ1bCBmb3IgcmVwcm9kdWNpbmcgcmFyZSBmYWlsdXJlcyBpbgorCWZsYWt5IHRlc3RzLiAgVGhlIG51bWJlciBvZiBwYXJhbGxlbCBqb2JzIGlzLCBpbiBvcmRlciBvZgorCXByZWNlZGVuY2U6IHRoZSB2YWx1ZSBvZiB0aGUgR0lUX1RFU1RfU1RSRVNTX0xPQUQKKwllbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgdHdpY2UgdGhlIG51bWJlciBvZiBhdmFpbGFibGUKKwlwcm9jZXNzb3JzIChhcyBzaG93biBieSB0aGUgJ2dldGNvbmYnIHV0aWxpdHkpLAlvciA4LgorCUltcGxpZXMgYC0tdmVyYm9zZSAteCAtLWltbWVkaWF0ZWAgdG8gZ2V0IHRoZSBtb3N0IGluZm9ybWF0aW9uCisJYWJvdXQgdGhlIGZhaWx1cmUuICBOb3RlIHRoYXQgdGhlIHZlcmJvc2Ugb3V0cHV0IG9mIGVhY2ggdGVzdAorCWpvYiBpcyBzYXZlZCB0byAndC90ZXN0LXJlc3VsdHMvJFRFU1RfTkFNRS5zdHJlc3MtPG5yPi5vdXQnLAorCWFuZCBvbmx5IHRoZSBvdXRwdXQgb2YgdGhlIGZhaWxlZCB0ZXN0IGpvYiBpcyBzaG93biBvbiB0aGUKKwl0ZXJtaW5hbC4gIFRoZSBuYW1lcyBvZiB0aGUgdHJhc2ggZGlyZWN0b3JpZXMgZ2V0IGEKKwknLnN0cmVzcy08bnI+JyBzdWZmaXgsIGFuZCB0aGUgdHJhc2ggZGlyZWN0b3J5IG9mIHRoZSBmYWlsZWQKKwl0ZXN0IGpvYiBpcyByZW5hbWVkIHRvIGVuZCB3aXRoIGEgJy5zdHJlc3MtZmFpbGVkJyBzdWZmaXguCisKKy0tc3RyZXNzLWpvYnM9PE4+OjoKKwlPdmVycmlkZSB0aGUgbnVtYmVyIG9mIHBhcmFsbGVsIGpvYnMuIEltcGxpZXMgYC0tc3RyZXNzYC4KKworLS1zdHJlc3MtbGltaXQ9PE4+OjoKKwlXaGVuIGNvbWJpbmVkIHdpdGggLS1zdHJlc3MgcnVuIHRoZSB0ZXN0IHNjcmlwdCByZXBlYXRlZGx5CisJdGhpcyBtYW55IHRpbWVzIGluIGVhY2ggb2YgdGhlIHBhcmFsbGVsIGpvYnMgb3IgdW50aWwgb25lIG9mCisJdGhlbSBmYWlscywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiBJbXBsaWVzIGAtLXN0cmVzc2AuCisKK1lvdSBjYW4gYWxzbyBzZXQgdGhlIEdJVF9URVNUX0lOU1RBTExFRCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0bwordGhlIGJpbmRpciBvZiBhbiBleGlzdGluZyBnaXQgaW5zdGFsbGF0aW9uIHRvIHRlc3QgdGhhdCBpbnN0YWxsYXRpb24uCitZb3Ugc3RpbGwgbmVlZCB0byBoYXZlIGJ1aWx0IHRoaXMgZ2l0IHNhbmRib3gsIGZyb20gd2hpY2ggdmFyaW91cwordGVzdC0qIHN1cHBvcnQgcHJvZ3JhbXMsIHRlbXBsYXRlcywgYW5kIHBlcmwgbGlicmFyaWVzIGFyZSB1c2VkLgorSWYgeW91ciBpbnN0YWxsZWQgZ2l0IGlzIGluY29tcGxldGUsIGl0IHdpbGwgc2lsZW50bHkgdGVzdCBwYXJ0cyBvZgoreW91ciBidWlsdCB2ZXJzaW9uIGluc3RlYWQuCisKK1doZW4gdXNpbmcgR0lUX1RFU1RfSU5TVEFMTEVELCB5b3UgY2FuIGFsc28gc2V0IEdJVF9URVNUX0VYRUNfUEFUSCB0bworb3ZlcnJpZGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXNoZWQtZm9ybSBzdWJjb21tYW5kcyAod2hhdAorR0lUX0VYRUNfUEFUSCB3b3VsZCBiZSB1c2VkIGZvciBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbikuCitHSVRfVEVTVF9FWEVDX1BBVEggZGVmYXVsdHMgdG8gYCRHSVRfVEVTVF9JTlNUQUxMRUQvZ2l0IC0tZXhlYy1wYXRoYC4KKworCitTa2lwcGluZyBUZXN0cworLS0tLS0tLS0tLS0tLS0KKworSW4gc29tZSBlbnZpcm9ubWVudHMsIGNlcnRhaW4gdGVzdHMgaGF2ZSBubyB3YXkgb2Ygc3VjY2VlZGluZworZHVlIHRvIHBsYXRmb3JtIGxpbWl0YXRpb24sIHN1Y2ggYXMgbGFjayBvZiAndW56aXAnIHByb2dyYW0sIG9yCitmaWxlc3lzdGVtIHRoYXQgZG8gbm90IGFsbG93IGFyYml0cmFyeSBzZXF1ZW5jZSBvZiBub24tTlVMIGJ5dGVzCithcyBwYXRobmFtZXMuCisKK1lvdSBzaG91bGQgYmUgYWJsZSB0byBzYXkgc29tZXRoaW5nIGxpa2UKKworICAgICQgR0lUX1NLSVBfVEVTVFM9dDkyMDAuOCBzaCAuL3Q5MjAwLWdpdC1jdnNleHBvcnQtY29tbWl0LnNoCisKK2FuZCBldmVuOgorCisgICAgJCBHSVRfU0tJUF9URVNUUz0ndFswLTRdPz8/IHQ5MT8/IHQ5MjAwLjgnIG1ha2UKKwordG8gb21pdCBzdWNoIHRlc3RzLiAgVGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBhCitTUCBzZXBhcmF0ZWQgbGlzdCBvZiBwYXR0ZXJucyB0aGF0IHRlbGxzIHdoaWNoIHRlc3RzIHRvIHNraXAsCithbmQgZWl0aGVyIGNhbiBtYXRjaCB0aGUgInRbMC05XXs0fSIgcGFydCB0byBza2lwIHRoZSB3aG9sZQordGVzdCwgb3IgdFswLTldezR9IGZvbGxvd2VkIGJ5ICIuJG51bWJlciIgdG8gc2F5IHdoaWNoCitwYXJ0aWN1bGFyIHRlc3QgdG8gc2tpcC4KKworRm9yIGFuIGluZGl2aWR1YWwgdGVzdCBzdWl0ZSAtLXJ1biBjb3VsZCBiZSB1c2VkIHRvIHNwZWNpZnkgdGhhdAorb25seSBzb21lIHRlc3RzIHNob3VsZCBiZSBydW4gb3IgdGhhdCBzb21lIHRlc3RzIHNob3VsZCBiZQorZXhjbHVkZWQgZnJvbSBhIHJ1bi4KKworVGhlIGFyZ3VtZW50IGZvciAtLXJ1biBpcyBhIGxpc3Qgb2YgaW5kaXZpZHVhbCB0ZXN0IG51bWJlcnMgb3IKK3JhbmdlcyB3aXRoIGFuIG9wdGlvbmFsIG5lZ2F0aW9uIHByZWZpeCB0aGF0IGRlZmluZSB3aGF0IHRlc3RzIGluCithIHRlc3Qgc3VpdGUgdG8gaW5jbHVkZSBpbiB0aGUgcnVuLiAgQSByYW5nZSBpcyB0d28gbnVtYmVycworc2VwYXJhdGVkIHdpdGggYSBkYXNoIGFuZCBtYXRjaGVzIGEgcmFuZ2Ugb2YgdGVzdHMgd2l0aCBib3RoIGVuZHMKK2JlZW4gaW5jbHVkZWQuICBZb3UgbWF5IG9taXQgdGhlIGZpcnN0IG9yIHRoZSBzZWNvbmQgbnVtYmVyIHRvCittZWFuICJmcm9tIHRoZSBmaXJzdCB0ZXN0IiBvciAidXAgdG8gdGhlIHZlcnkgbGFzdCB0ZXN0IgorcmVzcGVjdGl2ZWx5LgorCitPcHRpb25hbCBwcmVmaXggb2YgJyEnIG1lYW5zIHRoYXQgdGhlIHRlc3Qgb3IgYSByYW5nZSBvZiB0ZXN0cworc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIHJ1bi4KKworSWYgLS1ydW4gc3RhcnRzIHdpdGggYW4gdW5wcmVmaXhlZCBudW1iZXIgb3IgcmFuZ2UgdGhlIGluaXRpYWwKK3NldCBvZiB0ZXN0cyB0byBydW4gaXMgZW1wdHkuIElmIHRoZSBmaXJzdCBpdGVtIHN0YXJ0cyB3aXRoICchJworYWxsIHRoZSB0ZXN0cyBhcmUgYWRkZWQgdG8gdGhlIGluaXRpYWwgc2V0LiAgQWZ0ZXIgaW5pdGlhbCBzZXQgaXMKK2RldGVybWluZWQgZXZlcnkgdGVzdCBudW1iZXIgb3IgcmFuZ2UgaXMgYWRkZWQgb3IgZXhjbHVkZWQgZnJvbQordGhlIHNldCBvbmUgYnkgb25lLCBmcm9tIGxlZnQgdG8gcmlnaHQuCisKK0luZGl2aWR1YWwgbnVtYmVycyBvciByYW5nZXMgY291bGQgYmUgc2VwYXJhdGVkIGVpdGhlciBieSBhIHNwYWNlCitvciBhIGNvbW1hLgorCitGb3IgZXhhbXBsZSwgdG8gcnVuIG9ubHkgdGVzdHMgdXAgdG8gYSBzcGVjaWZpYyB0ZXN0ICgyMSksIG9uZQorY291bGQgZG8gdGhpczoKKworICAgICQgc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaCAtLXJ1bj0nMS0yMScKKworb3IgdGhpczoKKworICAgICQgc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaCAtLXJ1bj0nLTIxJworCitDb21tb24gY2FzZSBpcyB0byBydW4gc2V2ZXJhbCBzZXR1cCB0ZXN0cyAoMSwgMiwgMykgYW5kIHRoZW4gYQorc3BlY2lmaWMgdGVzdCAoMjEpIHRoYXQgcmVsaWVzIG9uIHRoYXQgc2V0dXA6CisKKyAgICAkIHNoIC4vdDkyMDAtZ2l0LWN2c2V4cG9ydC1jb21taXQuc2ggLS1ydW49JzEgMiAzIDIxJworCitvcjoKKworICAgICQgc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaCAtLXJ1bj0xLDIsMywyMQorCitvcjoKKworICAgICQgc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaCAtLXJ1bj0nLTMgMjEnCisKK0FzIG5vdGVkIGFib3ZlLCB0aGUgdGVzdCBzZXQgaXMgYnVpbHQgYnkgZ29pbmcgdGhyb3VnaCB0aGUgaXRlbXMKK2Zyb20gbGVmdCB0byByaWdodCwgc28gdGhpczoKKworICAgICQgc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaCAtLXJ1bj0nMS00ICEzJworCit3aWxsIHJ1biB0ZXN0cyAxLCAyLCBhbmQgNC4gIEl0ZW1zIHRoYXQgY29tZSBsYXRlciBoYXZlIGhpZ2hlcgorcHJlY2VkZW5jZS4gIEl0IG1lYW5zIHRoYXQgdGhpczoKKworICAgICQgc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaCAtLXJ1bj0nITMgMS00JworCit3b3VsZCBqdXN0IHJ1biB0ZXN0cyBmcm9tIDEgdG8gNCwgaW5jbHVkaW5nIDMuCisKK1lvdSBtYXkgdXNlIG5lZ2F0aW9uIHdpdGggcmFuZ2VzLiAgVGhlIGZvbGxvd2luZyB3aWxsIHJ1biBhbGwKK3Rlc3QgaW4gdGhlIHRlc3Qgc3VpdGUgZXhjZXB0IGZyb20gNyB1cCB0byAxMToKKworICAgICQgc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaCAtLXJ1bj0nITctMTEnCisKK1NvbWUgdGVzdHMgaW4gYSB0ZXN0IHN1aXRlIHJlbHkgb24gdGhlIHByZXZpb3VzIHRlc3RzIHBlcmZvcm1pbmcKK2NlcnRhaW4gYWN0aW9ucywgc3BlY2lmaWNhbGx5IHNvbWUgdGVzdHMgYXJlIGRlc2lnbmF0ZWQgYXMKKyJzZXR1cCIgdGVzdCwgc28geW91IGNhbm5vdCBfYXJiaXRyYXJpbHlfIGRpc2FibGUgb25lIHRlc3QgYW5kCitleHBlY3QgdGhlIHJlc3QgdG8gZnVuY3Rpb24gY29ycmVjdGx5LgorCistLXJ1biBpcyBtb3N0bHkgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gZm9jdXMgb24gYSBzcGVjaWZpYyB0ZXN0CithbmQga25vdyB3aGF0IHNldHVwIGlzIG5lZWRlZCBmb3IgaXQuICBPciB3aGVuIHlvdSB3YW50IHRvIHJ1bgorZXZlcnl0aGluZyB1cCB0byBhIGNlcnRhaW4gdGVzdC4KKworCitSdW5uaW5nIHRlc3RzIHdpdGggc3BlY2lhbCBzZXR1cHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgd2hvbGUgdGVzdCBzdWl0ZSBjb3VsZCBiZSBydW4gdG8gdGVzdCBzb21lIHNwZWNpYWwgZmVhdHVyZXMKK3RoYXQgY2Fubm90IGJlIGVhc2lseSBjb3ZlcmVkIGJ5IGEgZmV3IHNwZWNpZmljIHRlc3QgY2FzZXMuIFRoZXNlCitjb3VsZCBiZSBlbmFibGVkIGJ5IHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUgd2l0aCBjb3JyZWN0IEdJVF9URVNUXworZW52aXJvbm1lbnQgc2V0LgorCitHSVRfVEVTVF9GQUlMX1BSRVJFUVM9PGJvb2xlYW4+IGZhaWxzIGFsbCBwcmVyZXF1aXNpdGVzLiBUaGlzIGlzCit1c2VmdWwgZm9yIGRpc2NvdmVyaW5nIGlzc3VlcyB3aXRoIHRoZSB0ZXN0cyB3aGVyZSBzYXkgYSBsYXRlciB0ZXN0CitpbXBsaWNpdGx5IGRlcGVuZHMgb24gYW4gb3B0aW9uYWwgZWFybGllciB0ZXN0LgorCitUaGVyZSdzIGEgIkZBSUxfUFJFUkVRUyIgcHJlcmVxdWlzaXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdCBmb3IKK3doZXRoZXIgdGhpcyBtb2RlIGlzIGFjdGl2ZSwgYW5kIGUuZy4gc2tpcCBzb21lIHRlc3RzIHRoYXQgYXJlIGhhcmQgdG8KK3JlZmFjdG9yIHRvIGRlYWwgd2l0aCBpdC4gVGhlICJTWU1MSU5LUyIgcHJlcmVxdWlzaXRlIGlzIGN1cnJlbnRseQorZXhjbHVkZWQgYXMgc28gbXVjaCByZWxpZXMgb24gaXQsIGJ1dCB0aGlzIG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorCitHSVRfVEVTVF9HRVRURVhUX1BPSVNPTj08Ym9vbGVhbj4gdHVybnMgYWxsIHN0cmluZ3MgbWFya2VkIGZvcgordHJhbnNsYXRpb24gaW50byBnaWJiZXJpc2ggaWYgdHJ1ZS4gVXNlZCBmb3Igc3BvdHRpbmcgdGhvc2UgdGVzdHMgdGhhdAorbmVlZCB0byBiZSBtYXJrZWQgd2l0aCBhIENfTE9DQUxFX09VVFBVVCBwcmVyZXF1aXNpdGUgd2hlbiBhZGRpbmcgbW9yZQorc3RyaW5ncyBmb3IgdHJhbnNsYXRpb24uIFNlZSAiVGVzdGluZyBtYXJrZWQgc3RyaW5ncyIgaW4gcG8vUkVBRE1FIGZvcgorZGV0YWlscy4KKworR0lUX1RFU1RfU1BMSVRfSU5ERVg9PGJvb2xlYW4+IGZvcmNlcyBzcGxpdC1pbmRleCBtb2RlIG9uIHRoZSB3aG9sZQordGVzdCBzdWl0ZS4gQWNjZXB0IGFueSBib29sZWFuIHZhbHVlcyB0aGF0IGFyZSBhY2NlcHRlZCBieSBnaXQtY29uZmlnLgorCitHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTxuPiwgd2hlbiBzZXQsIG1ha2VzICdwcm90b2NvbC52ZXJzaW9uJworZGVmYXVsdCB0byBuLgorCitHSVRfVEVTVF9GVUxMX0lOX1BBQ0tfQVJSQVk9PGJvb2xlYW4+IGV4ZXJjaXNlcyB0aGUgdW5jb21tb24KK3BhY2stb2JqZWN0cyBjb2RlIHBhdGggd2hlcmUgdGhlcmUgYXJlIG1vcmUgdGhhbiAxMDI0IHBhY2tzIGV2ZW4gaWYKK3RoZSBhY3R1YWwgbnVtYmVyIG9mIHBhY2tzIGluIHJlcG9zaXRvcnkgaXMgYmVsb3cgdGhpcyBsaW1pdC4gQWNjZXB0CithbnkgYm9vbGVhbiB2YWx1ZXMgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgZ2l0LWNvbmZpZy4KKworR0lUX1RFU1RfT0VfU0laRT08bj4gZXhlcmNpc2VzIHRoZSB1bmNvbW1vbiBwYWNrLW9iamVjdHMgY29kZSBwYXRoCit3aGVyZSB3ZSBkbyBub3QgY2FjaGUgb2JqZWN0IHNpemUgaW4gbWVtb3J5IGFuZCByZWFkIGl0IGZyb20gZXhpc3RpbmcKK3BhY2tzIG9uIGRlbWFuZC4gVGhpcyBub3JtYWxseSBvbmx5IGhhcHBlbnMgd2hlbiB0aGUgb2JqZWN0IHNpemUgaXMKK292ZXIgMkdCLiBUaGlzIHZhcmlhYmxlIGZvcmNlcyB0aGUgY29kZSBwYXRoIG9uIGFueSBvYmplY3QgbGFyZ2VyIHRoYW4KKzxuPiBieXRlcy4KKworR0lUX1RFU1RfT0VfREVMVEFfU0laRT08bj4gZXhlcmNpc2VzIHRoZSB1bmNvbW1vbiBwYWNrLW9iamVjdHMgY29kZQorcGF0aCB3aGVyZSBkZWx0YXMgbGFyZ2VyIHRoYW4gdGhpcyBsaW1pdCByZXF1aXJlIGV4dHJhIG1lbW9yeQorYWxsb2NhdGlvbiBmb3IgYm9va2tlZXBpbmcuCisKK0dJVF9URVNUX1ZBTElEQVRFX0lOREVYX0NBQ0hFX0VOVFJJRVM9PGJvb2xlYW4+IGNoZWNrcyB0aGF0IGNhY2hlLXRyZWUKK3JlY29yZHMgYXJlIHZhbGlkIHdoZW4gdGhlIGluZGV4IGlzIHdyaXR0ZW4gb3V0IG9yIGFmdGVyIGEgbWVyZ2UuIFRoaXMKK2lzIG1vc3RseSB0byBjYXRjaCBtaXNzaW5nIGludmFsaWRhdGlvbi4gRGVmYXVsdCBpcyB0cnVlLgorCitHSVRfVEVTVF9DT01NSVRfR1JBUEg9PGJvb2xlYW4+LCB3aGVuIHRydWUsIGZvcmNlcyB0aGUgY29tbWl0LWdyYXBoIHRvCitiZSB3cml0dGVuIGFmdGVyIGV2ZXJ5ICdnaXQgY29tbWl0JyBjb21tYW5kLCBhbmQgb3ZlcnJpZGVzIHRoZQorJ2NvcmUuY29tbWl0R3JhcGgnIHNldHRpbmcgdG8gdHJ1ZS4KKworR0lUX1RFU1RfQ09NTUlUX0dSQVBIX0NIQU5HRURfUEFUSFM9PGJvb2xlYW4+LCB3aGVuIHRydWUsIGZvcmNlcworY29tbWl0LWdyYXBoIHdyaXRlIHRvIGNvbXB1dGUgYW5kIHdyaXRlIGNoYW5nZWQgcGF0aCBCbG9vbSBmaWx0ZXJzIGZvcgorZXZlcnkgJ2dpdCBjb21taXQtZ3JhcGggd3JpdGUnLCBhcyBpZiB0aGUgYC0tY2hhbmdlZC1wYXRoc2Agb3B0aW9uIHdhcworcGFzc2VkIGluLgorCitHSVRfVEVTVF9GU01PTklUT1I9JFBXRC90NzUxOS9mc21vbml0b3ItYWxsIGV4ZXJjaXNlcyB0aGUgZnNtb25pdG9yCitjb2RlIHBhdGggZm9yIHV0aWxpemluZyBhIGZpbGUgc3lzdGVtIG1vbml0b3IgdG8gc3BlZWQgdXAgZGV0ZWN0aW5nCituZXcgb3IgY2hhbmdlZCBmaWxlcy4KKworR0lUX1RFU1RfSU5ERVhfVkVSU0lPTj08bj4gZXhlcmNpc2VzIHRoZSBpbmRleCByZWFkL3dyaXRlIGNvZGUgcGF0aAorZm9yIHRoZSBpbmRleCB2ZXJzaW9uIHNwZWNpZmllZC4gIENhbiBiZSBzZXQgdG8gYW55IHZhbGlkIHZlcnNpb24KKyhjdXJyZW50bHkgMiwgMywgb3IgNCkuCisKK0dJVF9URVNUX1BBQ0tfU1BBUlNFPTxib29sZWFuPiBpZiBkaXNhYmxlZCB3aWxsIGRlZmF1bHQgdGhlIHBhY2stb2JqZWN0cworYnVpbHRpbiB0byB1c2UgdGhlIG5vbi1zcGFyc2Ugb2JqZWN0IHdhbGsuIFRoaXMgY2FuIHN0aWxsIGJlIG92ZXJyaWRkZW4gYnkKK3RoZSAtLXNwYXJzZSBjb21tYW5kLWxpbmUgYXJndW1lbnQuCisKK0dJVF9URVNUX1BSRUxPQURfSU5ERVg9PGJvb2xlYW4+IGV4ZXJjaXNlcyB0aGUgcHJlbG9hZC1pbmRleCBjb2RlIHBhdGgKK2J5IG92ZXJyaWRpbmcgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGNhY2hlIGVudHJpZXMgcmVxdWlyZWQgcGVyIHRocmVhZC4KKworR0lUX1RFU1RfQUREX0lfVVNFX0JVSUxUSU49PGJvb2xlYW4+LCB3aGVuIHRydWUsIGVuYWJsZXMgdGhlCitidWlsdC1pbiB2ZXJzaW9uIG9mIGdpdCBhZGQgLWkuIFNlZSAnYWRkLmludGVyYWN0aXZlLnVzZUJ1aWx0aW4nIGluCitnaXQtY29uZmlnKDEpLgorCitHSVRfVEVTVF9JTkRFWF9USFJFQURTPTxuPiBlbmFibGVzIGV4ZXJjaXNpbmcgdGhlIG11bHRpLXRocmVhZGVkIGxvYWRpbmcKK29mIHRoZSBpbmRleCBmb3IgdGhlIHdob2xlIHRlc3Qgc3VpdGUgYnkgYnlwYXNzaW5nIHRoZSBkZWZhdWx0IG51bWJlciBvZgorY2FjaGUgZW50cmllcyBhbmQgdGhyZWFkIG1pbmltdW1zLiBTZXR0aW5nIHRoaXMgdG8gMSB3aWxsIG1ha2UgdGhlCitpbmRleCBsb2FkaW5nIHNpbmdsZSB0aHJlYWRlZC4KKworR0lUX1RFU1RfTVVMVElfUEFDS19JTkRFWD08Ym9vbGVhbj4sIHdoZW4gdHJ1ZSwgZm9yY2VzIHRoZSBtdWx0aS1wYWNrLQoraW5kZXggdG8gYmUgd3JpdHRlbiBhZnRlciBldmVyeSAnZ2l0IHJlcGFjaycgY29tbWFuZCwgYW5kIG92ZXJyaWRlcyB0aGUKKydjb3JlLm11bHRpUGFja0luZGV4JyBzZXR0aW5nIHRvIHRydWUuCisKK0dJVF9URVNUX1NJREVCQU5EX0FMTD08Ym9vbGVhbj4sIHdoZW4gdHJ1ZSwgb3ZlcnJpZGVzIHRoZQorJ3VwbG9hZHBhY2suYWxsb3dTaWRlYmFuZEFsbCcgc2V0dGluZyB0byB0cnVlLCBhbmQgd2hlbiBmYWxzZSwgZm9yY2VzCitmZXRjaC1wYWNrIHRvIG5vdCByZXF1ZXN0IHNpZGViYW5kLWFsbCAoZXZlbiBpZiB0aGUgc2VydmVyIGFkdmVydGlzZXMKK3NpZGViYW5kLWFsbCkuCisKK0dJVF9URVNUX0RJU0FMTE9XX0FCQlJFVklBVEVEX09QVElPTlM9PGJvb2xlYW4+LCB3aGVuIHRydWUgKHdoaWNoIGlzCit0aGUgZGVmYXVsdCB3aGVuIHJ1bm5pbmcgdGVzdHMpLCBlcnJvcnMgb3V0IHdoZW4gYW4gYWJicmV2aWF0ZWQgb3B0aW9uCitpcyB1c2VkLgorCitOYW1pbmcgVGVzdHMKKy0tLS0tLS0tLS0tLQorCitUaGUgdGVzdCBmaWxlcyBhcmUgbmFtZWQgYXM6CisKKwl0Tk5OTi1jb21tYW5kbmFtZS1kZXRhaWxzLnNoCisKK3doZXJlIE4gaXMgYSBkZWNpbWFsIGRpZ2l0LgorCitGaXJzdCBkaWdpdCB0ZWxscyB0aGUgZmFtaWx5OgorCisJMCAtIHRoZSBhYnNvbHV0ZSBiYXNpY3MgYW5kIGdsb2JhbCBzdHVmZgorCTEgLSB0aGUgYmFzaWMgY29tbWFuZHMgY29uY2VybmluZyBkYXRhYmFzZQorCTIgLSB0aGUgYmFzaWMgY29tbWFuZHMgY29uY2VybmluZyB0aGUgd29ya2luZyB0cmVlCisJMyAtIHRoZSBvdGhlciBiYXNpYyBjb21tYW5kcyAoZS5nLiBscy1maWxlcykKKwk0IC0gdGhlIGRpZmYgY29tbWFuZHMKKwk1IC0gdGhlIHB1bGwgYW5kIGV4cG9ydGluZyBjb21tYW5kcworCTYgLSB0aGUgcmV2aXNpb24gdHJlZSBjb21tYW5kcyAoZXZlbiBlLmcuIG1lcmdlLWJhc2UpCisJNyAtIHRoZSBwb3JjZWxhaW5pc2ggY29tbWFuZHMgY29uY2VybmluZyB0aGUgd29ya2luZyB0cmVlCisJOCAtIHRoZSBwb3JjZWxhaW5pc2ggY29tbWFuZHMgY29uY2VybmluZyBmb3JlbnNpY3MKKwk5IC0gdGhlIGdpdCB0b29scworCitTZWNvbmQgZGlnaXQgdGVsbHMgdGhlIHBhcnRpY3VsYXIgY29tbWFuZCB3ZSBhcmUgdGVzdGluZy4KKworVGhpcmQgZGlnaXQgKG9wdGlvbmFsbHkpIHRlbGxzIHRoZSBwYXJ0aWN1bGFyIHN3aXRjaCBvciBncm91cCBvZiBzd2l0Y2hlcword2UgYXJlIHRlc3RpbmcuCisKK0lmIHlvdSBjcmVhdGUgZmlsZXMgdW5kZXIgdC8gZGlyZWN0b3J5IChpLmUuIGhlcmUpIHRoYXQgaXMgbm90Cit0aGUgdG9wLWxldmVsIHRlc3Qgc2NyaXB0LCBuZXZlciBuYW1lIHRoZSBmaWxlIHRvIG1hdGNoIHRoZSBhYm92ZQorcGF0dGVybi4gIFRoZSBNYWtlZmlsZSBoZXJlIGNvbnNpZGVycyBhbGwgc3VjaCBmaWxlcyBhcyB0aGUKK3RvcC1sZXZlbCB0ZXN0IHNjcmlwdCBhbmQgdHJpZXMgdG8gcnVuIGFsbCBvZiB0aGVtLiAgQ2FyZSBpcworZXNwZWNpYWxseSBuZWVkZWQgaWYgeW91IGFyZSBjcmVhdGluZyBhIGNvbW1vbiB0ZXN0IGxpYnJhcnkKK2ZpbGUsIHNpbWlsYXIgdG8gdGVzdC1saWIuc2gsIGJlY2F1c2Ugc3VjaCBhIGxpYnJhcnkgZmlsZSBtYXkKK25vdCBiZSBzdWl0YWJsZSBmb3Igc3RhbmRhbG9uZSBleGVjdXRpb24uCisKKworV3JpdGluZyBUZXN0cworLS0tLS0tLS0tLS0tLQorCitUaGUgdGVzdCBzY3JpcHQgaXMgd3JpdHRlbiBhcyBhIHNoZWxsIHNjcmlwdC4gIEl0IHNob3VsZCBzdGFydAord2l0aCB0aGUgc3RhbmRhcmQgIiMhL2Jpbi9zaCIsIGFuZCBhbgorYXNzaWdubWVudCB0byB2YXJpYWJsZSAndGVzdF9kZXNjcmlwdGlvbicsIGxpa2UgdGhpczoKKworCSMhL2Jpbi9zaAorCisJdGVzdF9kZXNjcmlwdGlvbj0neHh4IHRlc3QgKG9wdGlvbiAtLWZyb3R6KQorCisJVGhpcyB0ZXN0IHJlZ2lzdGVycyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUgY2FjaGUKKwlhbmQgdHJpZXMgdG8gcnVuIGdpdC1scy1maWxlcyB3aXRoIG9wdGlvbiAtLWZyb3R6LicKKworCitTb3VyY2UgJ3Rlc3QtbGliLnNoJworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgYXNzaWduaW5nIHRlc3RfZGVzY3JpcHRpb24sIHRoZSB0ZXN0IHNjcmlwdCBzaG91bGQgc291cmNlCit0ZXN0LWxpYi5zaCBsaWtlIHRoaXM6CisKKwkuIC4vdGVzdC1saWIuc2gKKworVGhpcyB0ZXN0IGhhcm5lc3MgbGlicmFyeSBkb2VzIHRoZSBmb2xsb3dpbmcgdGhpbmdzOgorCisgLSBJZiB0aGUgc2NyaXB0IGlzIGludm9rZWQgd2l0aCBjb21tYW5kIGxpbmUgYXJndW1lbnQgLS1oZWxwCisgICAob3IgLWgpLCBpdCBzaG93cyB0aGUgdGVzdF9kZXNjcmlwdGlvbiBhbmQgZXhpdHMuCisKKyAtIENyZWF0ZXMgYW4gZW1wdHkgdGVzdCBkaXJlY3Rvcnkgd2l0aCBhbiBlbXB0eSAuZ2l0L29iamVjdHMgZGF0YWJhc2UKKyAgIGFuZCBjaGRpcigyKSBpbnRvIGl0LiAgVGhpcyBkaXJlY3RvcnkgaXMgJ3QvdHJhc2gKKyAgIGRpcmVjdG9yeS4kdGVzdF9uYW1lX3dpdGhvdXRfZG90c2gnLCB3aXRoIHQvIHN1YmplY3QgdG8gY2hhbmdlIGJ5CisgICB0aGUgLS1yb290IG9wdGlvbiBkb2N1bWVudGVkIGFib3ZlLCBhbmQgYSAnLnN0cmVzcy08Tj4nIHN1ZmZpeAorICAgYXBwZW5kZWQgYnkgdGhlIC0tc3RyZXNzIG9wdGlvbi4KKworIC0gRGVmaW5lcyBzdGFuZGFyZCB0ZXN0IGhlbHBlciBmdW5jdGlvbnMgZm9yIHlvdXIgc2NyaXB0cyB0bworICAgdXNlLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGFsbCBzY3JpcHRzIGJlaGF2ZQorICAgY29uc2lzdGVudGx5IHdoZW4gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAtLXZlcmJvc2UgKG9yIC12KSwKKyAgIC0tZGVidWcgKG9yIC1kKSwgYW5kIC0taW1tZWRpYXRlIChvciAtaSkgaXMgZ2l2ZW4uCisKK0RvJ3MgJiBkb24ndHMKKy0tLS0tLS0tLS0tLS0KKworSGVyZSBhcmUgYSBmZXcgZXhhbXBsZXMgb2YgdGhpbmdzIHlvdSBwcm9iYWJseSBzaG91bGQgYW5kIHNob3VsZG4ndCBkbword2hlbiB3cml0aW5nIHRlc3RzLgorCitIZXJlIGFyZSB0aGUgImRvJ3M6IgorCisgLSBQdXQgYWxsIGNvZGUgaW5zaWRlIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgYW5kIG90aGVyIGFzc2VydGlvbnMuCisKKyAgIEV2ZW4gY29kZSB0aGF0IGlzbid0IGEgdGVzdCBwZXIgc2UsIGJ1dCBtZXJlbHkgc29tZSBzZXR1cCBjb2RlCisgICBzaG91bGQgYmUgaW5zaWRlIGEgdGVzdCBhc3NlcnRpb24uCisKKyAtIENoYWluIHlvdXIgdGVzdCBhc3NlcnRpb25zCisKKyAgIFdyaXRlIHRlc3QgY29kZSBsaWtlIHRoaXM6CisKKwlnaXQgbWVyZ2UgZm9vICYmCisJZ2l0IHB1c2ggYmFyICYmCisJdGVzdCAuLi4KKworICAgSW5zdGVhZCBvZjoKKworCWdpdCBtZXJnZSBobGEKKwlnaXQgcHVzaCBnaAorCXRlc3QgLi4uCisKKyAgIFRoYXQgd2F5IGFsbCBvZiB0aGUgY29tbWFuZHMgaW4geW91ciB0ZXN0cyB3aWxsIHN1Y2NlZWQgb3IgZmFpbC4gSWYKKyAgIHlvdSBtdXN0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHNvbWV0aGluZywgY29uc2lkZXIgdXNpbmcgYQorICAgaGVscGVyIGZ1bmN0aW9uIChlLmcuIHVzZSBzYW5lX3Vuc2V0IGluc3RlYWQgb2YgdW5zZXQsIGluIG9yZGVyCisgICB0byBhdm9pZCB1bnBvcnRhYmxlIHJldHVybiB2YWx1ZSBmb3IgdW5zZXR0aW5nIGEgdmFyaWFibGUgdGhhdCB3YXMKKyAgIGFscmVhZHkgdW5zZXQpLCBvciBwcmVwZW5kaW5nIHRoZSBjb21tYW5kIHdpdGggdGVzdF9taWdodF9mYWlsIG9yCisgICB0ZXN0X211c3RfZmFpbC4KKworIC0gQ2hlY2sgdGhlIHRlc3QgY292ZXJhZ2UgZm9yIHlvdXIgdGVzdHMuIFNlZSB0aGUgIlRlc3QgY292ZXJhZ2UiCisgICBiZWxvdy4KKworICAgRG9uJ3QgYmxpbmRseSBmb2xsb3cgdGVzdCBjb3ZlcmFnZSBtZXRyaWNzOyBpZiBhIG5ldyBmdW5jdGlvbiB5b3UgYWRkZWQKKyAgIGRvZXNuJ3QgaGF2ZSBhbnkgY292ZXJhZ2UsIHRoZW4geW91J3JlIHByb2JhYmx5IGRvaW5nIHNvbWV0aGluZyB3cm9uZywKKyAgIGJ1dCBoYXZpbmcgMTAwJSBjb3ZlcmFnZSBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCB5b3UgdGVzdGVkCisgICBldmVyeXRoaW5nLgorCisgICBUZXN0cyB0aGF0IGFyZSBsaWtlbHkgdG8gc21va2Ugb3V0IGZ1dHVyZSByZWdyZXNzaW9ucyBhcmUgYmV0dGVyCisgICB0aGFuIHRlc3RzIHRoYXQganVzdCBpbmZsYXRlIHRoZSBjb3ZlcmFnZSBtZXRyaWNzLgorCisgLSBXaGVuIGEgdGVzdCBjaGVja3MgZm9yIGFuIGFic29sdXRlIHBhdGggdGhhdCBhIGdpdCBjb21tYW5kIGdlbmVyYXRlZCwKKyAgIGNvbnN0cnVjdCB0aGUgZXhwZWN0ZWQgdmFsdWUgdXNpbmcgJChwd2QpIHJhdGhlciB0aGFuICRQV0QsCisgICAkVEVTVF9ESVJFQ1RPUlksIG9yICRUUkFTSF9ESVJFQ1RPUlkuIEl0IG1ha2VzIGEgZGlmZmVyZW5jZSBvbgorICAgV2luZG93cywgd2hlcmUgdGhlIHNoZWxsIChNU1lTIGJhc2gpIG1hbmdsZXMgYWJzb2x1dGUgcGF0aCBuYW1lcy4KKyAgIEZvciBkZXRhaWxzLCBzZWUgdGhlIGNvbW1pdCBtZXNzYWdlIG9mIDQxMTQxNTZhZTkuCisKKyAtIFJlbWVtYmVyIHRoYXQgaW5zaWRlIHRoZSA8c2NyaXB0PiBwYXJ0LCB0aGUgc3RhbmRhcmQgb3V0cHV0IGFuZAorICAgc3RhbmRhcmQgZXJyb3Igc3RyZWFtcyBhcmUgZGlzY2FyZGVkLCBhbmQgdGhlIHRlc3QgaGFybmVzcyBvbmx5CisgICByZXBvcnRzICJvayIgb3IgIm5vdCBvayIgdG8gdGhlIGVuZCB1c2VyIHJ1bm5pbmcgdGhlIHRlc3RzLiBVbmRlcgorICAgLS12ZXJib3NlLCB0aGV5IGFyZSBzaG93biB0byBoZWxwIGRlYnVnIHRoZSB0ZXN0cy4KKworIC0gQmUgY2FyZWZ1bCB3aGVuIHlvdSBsb29wCisKKyAgIFlvdSBtYXkgbmVlZCB0byB2ZXJpZnkgbXVsdGlwbGUgdGhpbmdzIGluIGEgbG9vcCwgYnV0IHRoZQorICAgZm9sbG93aW5nIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5OgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0aHJlZSB0aGluZ3MnICcKKwkgICAgZm9yIGkgaW4gb25lIHR3byB0aHJlZQorCSAgICBkbworCQl0ZXN0X3NvbWV0aGluZyAiJGkiCisJICAgIGRvbmUgJiYKKwkgICAgdGVzdF9zb21ldGhpbmdfZWxzZQorCScKKworICAgQmVjYXVzZSB0aGUgc3RhdHVzIG9mIHRoZSBsb29wIGl0c2VsZiBpcyB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlCisgICB0ZXN0X3NvbWV0aGluZyBpbiB0aGUgbGFzdCByb3VuZCwgdGhlIGxvb3AgZG9lcyBub3QgZmFpbCB3aGVuCisgICAidGVzdF9zb21ldGhpbmciIGZvciAib25lIiBvciAidHdvIiBmYWlscy4gIFRoaXMgaXMgbm90IHdoYXQgeW91CisgICB3YW50LgorCisgICBJbnN0ZWFkLCB5b3UgY2FuIGJyZWFrIG91dCBvZiB0aGUgbG9vcCBpbW1lZGlhdGVseSB3aGVuIHlvdSBzZWUgYQorICAgZmFpbHVyZS4gIEJlY2F1c2UgYWxsIHRlc3RfZXhwZWN0Xyogc25pcHBldHMgYXJlIGV4ZWN1dGVkIGluc2lkZQorICAgYSBmdW5jdGlvbiwgInJldHVybiAxIiBjYW4gYmUgdXNlZCB0byBmYWlsIHRoZSB0ZXN0IGltbWVkaWF0ZWx5CisgICB1cG9uIGEgZmFpbHVyZToKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdGhyZWUgdGhpbmdzJyAnCisJICAgIGZvciBpIGluIG9uZSB0d28gdGhyZWUKKwkgICAgZG8KKwkJdGVzdF9zb21ldGhpbmcgIiRpIiB8fCByZXR1cm4gMQorCSAgICBkb25lICYmCisJICAgIHRlc3Rfc29tZXRoaW5nX2Vsc2UKKwknCisKKyAgIE5vdGUgdGhhdCB3ZSBzdGlsbCAmJi1jaGFpbiB0aGUgbG9vcCB0byBwcm9wYWdhdGUgZmFpbHVyZXMgZnJvbQorICAgZWFybGllciBjb21tYW5kcy4KKworCitBbmQgaGVyZSBhcmUgdGhlICJkb24ndHM6IgorCisgLSBEb24ndCBleGl0KCkgd2l0aGluIGEgPHNjcmlwdD4gcGFydC4KKworICAgVGhlIGhhcm5lc3Mgd2lsbCBjYXRjaCB0aGlzIGFzIGEgcHJvZ3JhbW1pbmcgZXJyb3Igb2YgdGhlIHRlc3QuCisgICBVc2UgdGVzdF9kb25lIGluc3RlYWQgaWYgeW91IG5lZWQgdG8gc3RvcCB0aGUgdGVzdHMgZWFybHkgKHNlZQorICAgIlNraXBwaW5nIHRlc3RzIiBiZWxvdykuCisKKyAtIERvbid0IHVzZSAnISBnaXQgY21kJyB3aGVuIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZ2l0IGNvbW1hbmQKKyAgIGV4aXRzIHdpdGggZmFpbHVyZSBpbiBhIGNvbnRyb2xsZWQgd2F5IGJ5IGNhbGxpbmcgImRpZSgpIi4gIEluc3RlYWQsCisgICB1c2UgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBjbWQnLiAgVGhpcyB3aWxsIHNpZ25hbCBhIGZhaWx1cmUgaWYgZ2l0CisgICBkaWVzIGluIGFuIHVuZXhwZWN0ZWQgd2F5IChlLmcuIHNlZ2ZhdWx0KS4KKworICAgT24gdGhlIG90aGVyIGhhbmQsIGRvbid0IHVzZSB0ZXN0X211c3RfZmFpbCBmb3IgcnVubmluZyByZWd1bGFyCisgICBwbGF0Zm9ybSBjb21tYW5kczsganVzdCB1c2UgJyEgY21kJy4gIFdlIGFyZSBub3QgaW4gdGhlIGJ1c2luZXNzCisgICBvZiB2ZXJpZnlpbmcgdGhhdCB0aGUgd29ybGQgZ2l2ZW4gdG8gdXMgc2FuZWx5IHdvcmtzLgorCisgLSBEb24ndCBmZWVkIHRoZSBvdXRwdXQgb2YgYSBnaXQgY29tbWFuZCB0byBhIHBpcGUsIGFzIGluOgorCisgICAgIGdpdCAtQyByZXBvIGxzLWZpbGVzIHwKKyAgICAgeGFyZ3MgLW4gMSBiYXNlbmFtZSB8CisgICAgIGdyZXAgZm9vCisKKyAgIHdoaWNoIHdpbGwgZGlzY2FyZCBnaXQncyBleGl0IGNvZGUgYW5kIG1heSBtYXNrIGEgY3Jhc2guIEluIHRoZQorICAgYWJvdmUgZXhhbXBsZSwgYWxsIGV4aXQgY29kZXMgYXJlIGlnbm9yZWQgZXhjZXB0IGdyZXAncy4KKworICAgSW5zdGVhZCwgd3JpdGUgdGhlIG91dHB1dCBvZiB0aGF0IGNvbW1hbmQgdG8gYSB0ZW1wb3JhcnkKKyAgIGZpbGUgd2l0aCAiPiIgb3IgYXNzaWduIGl0IHRvIGEgdmFyaWFibGUgd2l0aCAieD0kKGdpdCAuLi4pIiByYXRoZXIKKyAgIHRoYW4gcGlwZSBpdC4KKworIC0gRG9uJ3QgdXNlIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGluIGEgd2F5IHRoYXQgZGlzY2FyZHMgZ2l0J3MgZXhpdAorICAgY29kZS4gV2hlbiBhc3NpZ25pbmcgdG8gYSB2YXJpYWJsZSwgdGhlIGV4aXQgY29kZSBpcyBub3QgZGlzY2FyZGVkLAorICAgZS5nLjoKKworICAgICB4PSQoZ2l0IGNhdC1maWxlIC1wICRzaGEpICYmCisgICAgIC4uLgorCisgICBpcyBPSyBiZWNhdXNlIGEgY3Jhc2ggaW4gImdpdCBjYXQtZmlsZSIgd2lsbCBjYXVzZSB0aGUgIiYmIiBjaGFpbgorICAgdG8gZmFpbCwgYnV0OgorCisgICAgIHRlc3QgInJlZnMvaGVhZHMvZm9vIiA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiCisKKyAgIGlzIG5vdCBPSyBhbmQgYSBjcmFzaCBpbiBnaXQgY291bGQgZ28gdW5kZXRlY3RlZC4KKworIC0gRG9uJ3QgdXNlIHBlcmwgd2l0aG91dCBzcGVsbGluZyBpdCBhcyAiJFBFUkxfUEFUSCIuIFRoaXMgaXMgdG8gaGVscAorICAgb3VyIGZyaWVuZHMgb24gV2luZG93cyB3aGVyZSB0aGUgcGxhdGZvcm0gUGVybCBvZnRlbiBhZGRzIENSIGJlZm9yZQorICAgdGhlIGVuZCBvZiBsaW5lLCBhbmQgdGhleSBidW5kbGUgR2l0IHdpdGggYSB2ZXJzaW9uIG9mIFBlcmwgdGhhdAorICAgZG9lcyBub3QgZG8gc28sIHdob3NlIHBhdGggaXMgc3BlY2lmaWVkIHdpdGggJFBFUkxfUEFUSC4gTm90ZSB0aGF0IHdlCisgICBwcm92aWRlIGEgInBlcmwiIGZ1bmN0aW9uIHdoaWNoIHVzZXMgJFBFUkxfUEFUSCB1bmRlciB0aGUgaG9vZCwgc28KKyAgIHlvdSBkbyBub3QgbmVlZCB0byB3b3JyeSB3aGVuIHNpbXBseSBydW5uaW5nIHBlcmwgaW4gdGhlIHRlc3Qgc2NyaXB0cworICAgKGJ1dCB5b3UgZG8sIGZvciBleGFtcGxlLCBvbiBhIHNoZWJhbmcgbGluZSBvciBpbiBhIHN1YiBzY3JpcHQKKyAgIGNyZWF0ZWQgdmlhICJ3cml0ZV9zY3JpcHQiKS4KKworIC0gRG9uJ3QgdXNlIHNoIHdpdGhvdXQgc3BlbGxpbmcgaXQgYXMgIiRTSEVMTF9QQVRIIiwgd2hlbiB0aGUgc2NyaXB0CisgICBjYW4gYmUgbWlzaW50ZXJwcmV0ZWQgYnkgYnJva2VuIHBsYXRmb3JtIHNoZWxsIChlLmcuIFNvbGFyaXMpLgorCisgLSBEb24ndCBjaGRpciBhcm91bmQgaW4gdGVzdHMuICBJdCBpcyBub3Qgc3VmZmljaWVudCB0byBjaGRpciB0bworICAgc29tZXdoZXJlIGFuZCB0aGVuIGNoZGlyIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGxvY2F0aW9uIGxhdGVyIGluCisgICB0aGUgdGVzdCwgYXMgYW55IGludGVybWVkaWF0ZSBzdGVwIGNhbiBmYWlsIGFuZCBhYm9ydCB0aGUgdGVzdCwKKyAgIGNhdXNpbmcgdGhlIG5leHQgdGVzdCB0byBzdGFydCBpbiBhbiB1bmV4cGVjdGVkIGRpcmVjdG9yeS4gIERvIHNvCisgICBpbnNpZGUgYSBzdWJzaGVsbCBpZiBuZWNlc3NhcnkuCisKKyAtIERvbid0IHNhdmUgYW5kIHZlcmlmeSB0aGUgc3RhbmRhcmQgZXJyb3Igb2YgY29tcG91bmQgY29tbWFuZHMsIGkuZS4KKyAgIGdyb3VwIGNvbW1hbmRzLCBzdWJzaGVsbHMsIGFuZCBzaGVsbCBmdW5jdGlvbnMgKGV4Y2VwdCB0ZXN0IGhlbHBlcgorICAgZnVuY3Rpb25zIGxpa2UgJ3Rlc3RfbXVzdF9mYWlsJykgbGlrZSB0aGlzOgorCisgICAgICggY2QgZGlyICYmIGdpdCBjbWQgKSAyPmVycm9yICYmCisgICAgIHRlc3RfY21wIGV4cGVjdCBlcnJvcgorCisgICBXaGVuIHJ1bm5pbmcgdGhlIHRlc3Qgd2l0aCAnLXgnIHRyYWNpbmcsIHRoZW4gdGhlIHRyYWNlIG9mIGNvbW1hbmRzCisgICBleGVjdXRlZCBpbiB0aGUgY29tcG91bmQgY29tbWFuZCB3aWxsIGJlIGluY2x1ZGVkIGluIHN0YW5kYXJkIGVycm9yCisgICBhcyB3ZWxsLCBxdWl0ZSBwb3NzaWJseSB0aHJvd2luZyBvZmYgdGhlIHN1YnNlcXVlbnQgY2hlY2tzIGV4YW1pbmluZworICAgdGhlIG91dHB1dC4gIEluc3RlYWQsIHNhdmUgb25seSB0aGUgcmVsZXZhbnQgZ2l0IGNvbW1hbmQncyBzdGFuZGFyZAorICAgZXJyb3I6CisKKyAgICAgKCBjZCBkaXIgJiYgZ2l0IGNtZCAyPi4uL2Vycm9yICkgJiYKKyAgICAgdGVzdF9jbXAgZXhwZWN0IGVycm9yCisKKyAtIERvbid0IGJyZWFrIHRoZSBUQVAgb3V0cHV0CisKKyAgIFRoZSByYXcgb3V0cHV0IGZyb20geW91ciB0ZXN0IG1heSBiZSBpbnRlcnByZXRlZCBieSBhIFRBUCBoYXJuZXNzLiBUQVAKKyAgIGhhcm5lc3NlcyB3aWxsIGlnbm9yZSBldmVyeXRoaW5nIHRoZXkgZG9uJ3Qga25vdyBhYm91dCwgYnV0IGRvbid0IHN0ZXAKKyAgIG9uIHRoZWlyIHRvZXMgaW4gdGhlc2UgYXJlYXM6CisKKyAgIC0gRG9uJ3QgcHJpbnQgbGluZXMgbGlrZSAiJHguLiR5IiB3aGVyZSAkeCBhbmQgJHkgYXJlIGludGVnZXJzLgorCisgICAtIERvbid0IHByaW50IGxpbmVzIHRoYXQgYmVnaW4gd2l0aCAib2siIG9yICJub3Qgb2siLgorCisgICBUQVAgaGFybmVzc2VzIGV4cGVjdCBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCBlaXRoZXIgIm9rIiBhbmQgIm5vdAorICAgb2siIHRvIHNpZ25hbCBhIHRlc3QgcGFzc2VkIG9yIGZhaWxlZCAoYW5kIG91ciBoYXJuZXNzIGFscmVhZHkKKyAgIHByb2R1Y2VzIHN1Y2ggbGluZXMpLCBzbyB5b3VyIHNjcmlwdCBzaG91bGRuJ3QgZW1pdCBzdWNoIGxpbmVzIHRvCisgICB0aGVpciBvdXRwdXQuCisKKyAgIFlvdSBjYW4gZ2xlYW4gc29tZSBmdXJ0aGVyIHBvc3NpYmxlIGlzc3VlcyBmcm9tIHRoZSBUQVAgZ3JhbW1hcgorICAgKHNlZSBodHRwczovL21ldGFjcGFuLm9yZy9wb2QvVEFQOjpQYXJzZXI6OkdyYW1tYXIjVEFQLUdSQU1NQVIpCisgICBidXQgdGhlIGJlc3QgaW5kaWNhdGlvbiBpcyB0byBqdXN0IHJ1biB0aGUgdGVzdHMgd2l0aCBwcm92ZSgxKSwKKyAgIGl0J2xsIGNvbXBsYWluIGlmIGFueXRoaW5nIGlzIGFtaXNzLgorCisKK1NraXBwaW5nIHRlc3RzCistLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgbmVlZCB0byBza2lwIHRlc3RzIHlvdSBzaG91bGQgZG8gc28gYnkgdXNpbmcgdGhlIHRocmVlLWFyZyBmb3JtCitvZiB0aGUgdGVzdF8qIGZ1bmN0aW9ucyAoc2VlIHRoZSAiVGVzdCBoYXJuZXNzIGxpYnJhcnkiIHNlY3Rpb24KK2JlbG93KSwgZS5nLjoKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnSSBuZWVkIFBlcmwnICcKKyAgICAgICAgcGVybCAtZSAiaGxhZ2goKSBpZiB1bmZfdW5mKCkiCisgICAgJworCitUaGUgYWR2YW50YWdlIG9mIHNraXBwaW5nIHRlc3RzIGxpa2UgdGhpcyBpcyB0aGF0IHBsYXRmb3JtcyB0aGF0IGRvbid0CitoYXZlIHRoZSBQRVJMIGFuZCBvdGhlciBvcHRpb25hbCBkZXBlbmRlbmNpZXMgZ2V0IGFuIGluZGljYXRpb24gb2YgaG93CittYW55IHRlc3RzIHRoZXkncmUgbWlzc2luZy4KKworSWYgdGhlIHRlc3QgY29kZSBpcyB0b28gaGFpcnkgZm9yIHRoYXQgKGkuZS4gZG9lcyBhIGxvdCBvZiBzZXR1cCB3b3JrCitvdXRzaWRlIHRlc3QgYXNzZXJ0aW9ucykgeW91IGNhbiBhbHNvIHNraXAgYWxsIHJlbWFpbmluZyB0ZXN0cyBieQorc2V0dGluZyBza2lwX2FsbCBhbmQgaW1tZWRpYXRlbHkgY2FsbCB0ZXN0X2RvbmU6CisKKwlpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTAorCXRoZW4KKwkgICAgc2tpcF9hbGw9J3NraXBwaW5nIHBlcmwgaW50ZXJmYWNlIHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJICAgIHRlc3RfZG9uZQorCWZpCisKK1RoZSBzdHJpbmcgeW91IGdpdmUgdG8gc2tpcF9hbGwgd2lsbCBiZSB1c2VkIGFzIGFuIGV4cGxhbmF0aW9uIGZvciB3aHkKK3RoZSB0ZXN0IHdhcyBza2lwcGVkLgorCitFbmQgd2l0aCB0ZXN0X2RvbmUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3VyIHNjcmlwdCB3aWxsIGJlIGEgc2VxdWVuY2Ugb2YgdGVzdHMsIHVzaW5nIGhlbHBlciBmdW5jdGlvbnMKK2Zyb20gdGhlIHRlc3QgaGFybmVzcyBsaWJyYXJ5LiAgQXQgdGhlIGVuZCBvZiB0aGUgc2NyaXB0LCBjYWxsCisndGVzdF9kb25lJy4KKworCitUZXN0IGhhcm5lc3MgbGlicmFyeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIGEgaGFuZGZ1bCBoZWxwZXIgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIHRlc3QgaGFybmVzcworbGlicmFyeSBmb3IgeW91ciBzY3JpcHQgdG8gdXNlLgorCisgLSB0ZXN0X2V4cGVjdF9zdWNjZXNzIFs8cHJlcmVxPl0gPG1lc3NhZ2U+IDxzY3JpcHQ+CisKKyAgIFVzdWFsbHkgdGFrZXMgdHdvIHN0cmluZ3MgYXMgcGFyYW1ldGVycywgYW5kIGV2YWx1YXRlcyB0aGUKKyAgIDxzY3JpcHQ+LiAgSWYgaXQgeWllbGRzIHN1Y2Nlc3MsIHRlc3QgaXMgY29uc2lkZXJlZAorICAgc3VjY2Vzc2Z1bC4gIDxtZXNzYWdlPiBzaG91bGQgc3RhdGUgd2hhdCBpdCBpcyB0ZXN0aW5nLgorCisgICBFeGFtcGxlOgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJICAgICdnaXQtd3JpdGUtdHJlZSBzaG91bGQgYmUgYWJsZSB0byB3cml0ZSBhbiBlbXB0eSB0cmVlLicgXAorCSAgICAndHJlZT0kKGdpdC13cml0ZS10cmVlKScKKworICAgSWYgeW91IHN1cHBseSB0aHJlZSBwYXJhbWV0ZXJzIHRoZSBmaXJzdCB3aWxsIGJlIHRha2VuIHRvIGJlIGEKKyAgIHByZXJlcXVpc2l0ZTsgc2VlIHRoZSB0ZXN0X3NldF9wcmVyZXEgYW5kIHRlc3RfaGF2ZV9wcmVyZXEKKyAgIGRvY3VtZW50YXRpb24gYmVsb3c6CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZ2l0IC0tcGFnaW5hdGUgcmV2LWxpc3QgdXNlcyBhIHBhZ2VyJyBcCisJICAgICcgLi4uICcKKworICAgWW91IGNhbiBhbHNvIHN1cHBseSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHByZXJlcXVpc2l0ZXMsIGluIHRoZQorICAgcmFyZSBjYXNlIHdoZXJlIHlvdXIgdGVzdCBkZXBlbmRzIG9uIG1vcmUgdGhhbiBvbmU6CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwsUFlUSE9OICd5byBkYXdnJyBcCisJICAgICcgdGVzdCAkKHBlcmwgLUUgJ3ByaW50IGV2YWwgIjEgKyIgLiBxeFtweXRob24gLWMgInByaW50IDIiXScpID09ICI0IiAnCisKKyAtIHRlc3RfZXhwZWN0X2ZhaWx1cmUgWzxwcmVyZXE+XSA8bWVzc2FnZT4gPHNjcmlwdD4KKworICAgVGhpcyBpcyBOT1QgdGhlIG9wcG9zaXRlIG9mIHRlc3RfZXhwZWN0X3N1Y2Nlc3MsIGJ1dCBpcyB1c2VkCisgICB0byBtYXJrIGEgdGVzdCB0aGF0IGRlbW9uc3RyYXRlcyBhIGtub3duIGJyZWFrYWdlLiAgVW5saWtlCisgICB0aGUgdXN1YWwgdGVzdF9leHBlY3Rfc3VjY2VzcyB0ZXN0cywgd2hpY2ggc2F5ICJvayIgb24KKyAgIHN1Y2Nlc3MgYW5kICJGQUlMIiBvbiBmYWlsdXJlLCB0aGlzIHdpbGwgc2F5ICJGSVhFRCIgb24KKyAgIHN1Y2Nlc3MgYW5kICJzdGlsbCBicm9rZW4iIG9uIGZhaWx1cmUuICBGYWlsdXJlcyBmcm9tIHRoZXNlCisgICB0ZXN0cyB3b24ndCBjYXVzZSAtaSAoaW1tZWRpYXRlKSB0byBzdG9wLgorCisgICBMaWtlIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgdGhpcyBmdW5jdGlvbiBjYW4gb3B0aW9uYWxseSB1c2UgYSB0aHJlZQorICAgYXJndW1lbnQgaW52b2NhdGlvbiB3aXRoIGEgcHJlcmVxdWlzaXRlIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KKworIC0gdGVzdF9kZWJ1ZyA8c2NyaXB0PgorCisgICBUaGlzIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50LCA8c2NyaXB0PiwgYW5kIGV2YWx1YXRlcyBpdCBvbmx5CisgICB3aGVuIHRoZSB0ZXN0IHNjcmlwdCBpcyBzdGFydGVkIHdpdGggLS1kZWJ1ZyBjb21tYW5kIGxpbmUKKyAgIGFyZ3VtZW50LiAgVGhpcyBpcyBwcmltYXJpbHkgbWVhbnQgZm9yIHVzZSBkdXJpbmcgdGhlCisgICBkZXZlbG9wbWVudCBvZiBhIG5ldyB0ZXN0IHNjcmlwdC4KKworIC0gZGVidWcgPGdpdC1jb21tYW5kPgorCisgICBSdW4gYSBnaXQgY29tbWFuZCBpbnNpZGUgYSBkZWJ1Z2dlci4gVGhpcyBpcyBwcmltYXJpbHkgbWVhbnQgZm9yCisgICB1c2Ugd2hlbiBkZWJ1Z2dpbmcgYSBmYWlsaW5nIHRlc3Qgc2NyaXB0LgorCisgLSB0ZXN0X2RvbmUKKworICAgWW91ciB0ZXN0IHNjcmlwdCBtdXN0IGhhdmUgdGVzdF9kb25lIGF0IHRoZSBlbmQuICBJdHMgcHVycG9zZQorICAgaXMgdG8gc3VtbWFyaXplIHN1Y2Nlc3NlcyBhbmQgZmFpbHVyZXMgaW4gdGhlIHRlc3Qgc2NyaXB0IGFuZAorICAgZXhpdCB3aXRoIGFuIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuCisKKyAtIHRlc3RfdGljaworCisgICBNYWtlIGNvbW1pdCBhbmQgdGFnIG5hbWVzIGNvbnNpc3RlbnQgYnkgc2V0dGluZyB0aGUgYXV0aG9yIGFuZAorICAgY29tbWl0dGVyIHRpbWVzIHRvIGRlZmluZWQgc3RhdGUuICBTdWJzZXF1ZW50IGNhbGxzIHdpbGwKKyAgIGFkdmFuY2UgdGhlIHRpbWVzIGJ5IGEgZml4ZWQgYW1vdW50LgorCisgLSB0ZXN0X2NvbW1pdCA8bWVzc2FnZT4gWzxmaWxlbmFtZT4gWzxjb250ZW50cz5dXQorCisgICBDcmVhdGVzIGEgY29tbWl0IHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UsIGNvbW1pdHRpbmcgdGhlIGdpdmVuCisgICBmaWxlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnRzIChkZWZhdWx0IGZvciBib3RoIGlzIHRvIHJldXNlIHRoZQorICAgbWVzc2FnZSBzdHJpbmcpLCBhbmQgYWRkcyBhIHRhZyAoYWdhaW4gcmV1c2luZyB0aGUgbWVzc2FnZQorICAgc3RyaW5nIGFzIG5hbWUpLiAgQ2FsbHMgdGVzdF90aWNrIHRvIG1ha2UgdGhlIFNIQS0xcworICAgcmVwcm9kdWNpYmxlLgorCisgLSB0ZXN0X21lcmdlIDxtZXNzYWdlPiA8Y29tbWl0LW9yLXRhZz4KKworICAgTWVyZ2VzIHRoZSBnaXZlbiByZXYgdXNpbmcgdGhlIGdpdmVuIG1lc3NhZ2UuICBMaWtlIHRlc3RfY29tbWl0LAorICAgY3JlYXRlcyBhIHRhZyBhbmQgY2FsbHMgdGVzdF90aWNrIGJlZm9yZSBjb21taXR0aW5nLgorCisgLSB0ZXN0X3NldF9wcmVyZXEgPHByZXJlcT4KKworICAgU2V0IGEgdGVzdCBwcmVyZXF1aXNpdGUgdG8gYmUgdXNlZCBsYXRlciB3aXRoIHRlc3RfaGF2ZV9wcmVyZXEuIFRoZQorICAgdGVzdC1saWIgd2lsbCBzZXQgc29tZSBwcmVyZXF1aXNpdGVzIGZvciB5b3UsIHNlZSB0aGUKKyAgICJQcmVyZXF1aXNpdGVzIiBzZWN0aW9uIGJlbG93IGZvciBhIGZ1bGwgbGlzdCBvZiB0aGVzZS4KKworICAgT3RoZXJzIHlvdSBjYW4gc2V0IHlvdXJzZWxmIGFuZCB1c2UgbGF0ZXIgd2l0aCBlaXRoZXIKKyAgIHRlc3RfaGF2ZV9wcmVyZXEgZGlyZWN0bHksIG9yIHRoZSB0aHJlZSBhcmd1bWVudCBpbnZvY2F0aW9uIG9mCisgICB0ZXN0X2V4cGVjdF9zdWNjZXNzIGFuZCB0ZXN0X2V4cGVjdF9mYWlsdXJlLgorCisgLSB0ZXN0X2hhdmVfcHJlcmVxIDxwcmVyZXE+CisKKyAgIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVyZXF1aXNpdGUgcHJldmlvdXNseSBzZXQgd2l0aCB0ZXN0X3NldF9wcmVyZXEuCisgICBUaGUgbW9zdCBjb21tb24gd2F5IHRvIHVzZSB0aGlzIGV4cGxpY2l0bHkgKGFzIG9wcG9zZWQgdG8gdGhlCisgICBpbXBsaWNpdCB1c2Ugd2hlbiBhbiBhcmd1bWVudCBpcyBwYXNzZWQgdG8gdGVzdF9leHBlY3RfKikgaXMgdG8gc2tpcAorICAgYWxsIHRoZSB0ZXN0cyBhdCB0aGUgc3RhcnQgb2YgdGhlIHRlc3Qgc2NyaXB0IGlmIHdlIGRvbid0IGhhdmUgc29tZQorICAgZXNzZW50aWFsIHByZXJlcXVpc2l0ZToKKworCWlmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMCisJdGhlbgorCSAgICBza2lwX2FsbD0nc2tpcHBpbmcgcGVybCBpbnRlcmZhY2UgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwkgICAgdGVzdF9kb25lCisJZmkKKworIC0gdGVzdF9leHRlcm5hbCBbPHByZXJlcT5dIDxtZXNzYWdlPiA8ZXh0ZXJuYWw+IDxzY3JpcHQ+CisKKyAgIEV4ZWN1dGUgYSA8c2NyaXB0PiB3aXRoIGFuIDxleHRlcm5hbD4gaW50ZXJwcmV0ZXIgKGxpa2UgcGVybCkuIFRoaXMKKyAgIHdhcyBhZGRlZCBmb3IgdGVzdHMgbGlrZSB0OTcwMC1wZXJsLWdpdC5zaCB3aGljaCBkbyBtb3N0IG9mIHRoZWlyCisgICB3b3JrIGluIGFuIGV4dGVybmFsIHRlc3Qgc2NyaXB0LgorCisJdGVzdF9leHRlcm5hbCBcCisJICAgICdHaXR3ZWJDYWNoZTo6KkZpbGVDYWNoZSonIFwKKwkgICAgcGVybCAiJFRFU1RfRElSRUNUT1JZIi90OTUwMy90ZXN0X2NhY2hlX2ludGVyZmFjZS5wbAorCisgICBJZiB0aGUgdGVzdCBpcyBvdXRwdXR0aW5nIGl0cyBvd24gVEFQIHlvdSBzaG91bGQgc2V0IHRoZQorICAgdGVzdF9leHRlcm5hbF9oYXNfdGFwIHZhcmlhYmxlIHNvbWV3aGVyZSBiZWZvcmUgY2FsbGluZyB0aGUgZmlyc3QKKyAgIHRlc3RfZXh0ZXJuYWwqIGZ1bmN0aW9uLiBTZWUgdDk3MDAtcGVybC1naXQuc2ggZm9yIGFuIGV4YW1wbGUuCisKKwkjIFRoZSBleHRlcm5hbCB0ZXN0IHdpbGwgb3V0cHV0cyBpdHMgb3duIHBsYW4KKwl0ZXN0X2V4dGVybmFsX2hhc190YXA9MQorCisgLSB0ZXN0X2V4dGVybmFsX3dpdGhvdXRfc3RkZXJyIFs8cHJlcmVxPl0gPG1lc3NhZ2U+IDxleHRlcm5hbD4gPHNjcmlwdD4KKworICAgTGlrZSB0ZXN0X2V4dGVybmFsIGJ1dCBmYWlsIGlmIHRoZXJlJ3MgYW55IG91dHB1dCBvbiBzdGRlcnIsCisgICBpbnN0ZWFkIG9mIGNoZWNraW5nIHRoZSBleGl0IGNvZGUuCisKKwl0ZXN0X2V4dGVybmFsX3dpdGhvdXRfc3RkZXJyIFwKKwkgICAgJ1BlcmwgQVBJJyBcCisJICAgIHBlcmwgIiRURVNUX0RJUkVDVE9SWSIvdDk3MDAvdGVzdC5wbAorCisgLSB0ZXN0X2V4cGVjdF9jb2RlIDxleGl0LWNvZGU+IDxjb21tYW5kPgorCisgICBSdW4gYSBjb21tYW5kIGFuZCBlbnN1cmUgdGhhdCBpdCBleGl0cyB3aXRoIHRoZSBnaXZlbiBleGl0IGNvZGUuCisgICBGb3IgZXhhbXBsZToKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01lcmdlIHdpdGggZC9mIGNvbmZsaWN0cycgJworCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG1lcmdlICJtZXJnZSBtc2ciIEIgbWFzdGVyCisJJworCisgLSB0ZXN0X211c3RfZmFpbCBbPG9wdGlvbnM+XSA8Z2l0LWNvbW1hbmQ+CisKKyAgIFJ1biBhIGdpdCBjb21tYW5kIGFuZCBlbnN1cmUgaXQgZmFpbHMgaW4gYSBjb250cm9sbGVkIHdheS4gIFVzZQorICAgdGhpcyBpbnN0ZWFkIG9mICIhIDxnaXQtY29tbWFuZD4iLiAgV2hlbiBnaXQtY29tbWFuZCBkaWVzIGR1ZSB0byBhCisgICBzZWdmYXVsdCwgdGVzdF9tdXN0X2ZhaWwgZGlhZ25vc2VzIGl0IGFzIGFuIGVycm9yOyAiISA8Z2l0LWNvbW1hbmQ+IgorICAgdHJlYXRzIGl0IGFzIGp1c3QgYW5vdGhlciBleHBlY3RlZCBmYWlsdXJlLCB3aGljaCB3b3VsZCBsZXQgc3VjaCBhCisgICBidWcgZ28gdW5ub3RpY2VkLgorCisgICBBY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworICAgICBvaz08c2lnbmFsLW5hbWU+Wyw8Li4uPl06CisgICAgICAgRG9uJ3QgdHJlYXQgYW4gZXhpdCBjYXVzZWQgYnkgdGhlIGdpdmVuIHNpZ25hbCBhcyBlcnJvci4KKyAgICAgICBNdWx0aXBsZSBzaWduYWxzIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4KKyAgICAgICBDdXJyZW50bHkgcmVjb2duaXplZCBzaWduYWwgbmFtZXMgYXJlOiBzaWdwaXBlLCBzdWNjZXNzLgorICAgICAgIChEb24ndCB1c2UgJ3N1Y2Nlc3MnLCB1c2UgJ3Rlc3RfbWlnaHRfZmFpbCcgaW5zdGVhZC4pCisKKyAtIHRlc3RfbWlnaHRfZmFpbCBbPG9wdGlvbnM+XSA8Z2l0LWNvbW1hbmQ+CisKKyAgIFNpbWlsYXIgdG8gdGVzdF9tdXN0X2ZhaWwsIGJ1dCB0b2xlcmF0ZSBzdWNjZXNzLCB0b28uICBVc2UgdGhpcworICAgaW5zdGVhZCBvZiAiPGdpdC1jb21tYW5kPiB8fCA6IiB0byBjYXRjaCBmYWlsdXJlcyBkdWUgdG8gc2Vndi4KKworICAgQWNjZXB0cyB0aGUgc2FtZSBvcHRpb25zIGFzIHRlc3RfbXVzdF9mYWlsLgorCisgLSB0ZXN0X2NtcCA8ZXhwZWN0ZWQ+IDxhY3R1YWw+CisKKyAgIENoZWNrIHdoZXRoZXIgdGhlIGNvbnRlbnQgb2YgdGhlIDxhY3R1YWw+IGZpbGUgbWF0Y2hlcyB0aGUKKyAgIDxleHBlY3RlZD4gZmlsZS4gIFRoaXMgYmVoYXZlcyBsaWtlICJjbXAiIGJ1dCBwcm9kdWNlcyBtb3JlCisgICBoZWxwZnVsIG91dHB1dCB3aGVuIHRoZSB0ZXN0IGlzIHJ1biB3aXRoICItdiIgb3B0aW9uLgorCisgLSB0ZXN0X2NtcF9yZXYgPGV4cGVjdGVkPiA8YWN0dWFsPgorCisgICBDaGVjayB3aGV0aGVyIHRoZSA8ZXhwZWN0ZWQ+IHJldiBwb2ludHMgdG8gdGhlIHNhbWUgY29tbWl0IGFzIHRoZQorICAgPGFjdHVhbD4gcmV2LgorCisgLSB0ZXN0X2xpbmVfY291bnQgKD0gfCAtbHQgfCAtZ2UgfCAuLi4pIDxsZW5ndGg+IDxmaWxlPgorCisgICBDaGVjayB3aGV0aGVyIGEgZmlsZSBoYXMgdGhlIGxlbmd0aCBpdCBpcyBleHBlY3RlZCB0by4KKworIC0gdGVzdF9wYXRoX2lzX2ZpbGUgPHBhdGg+IFs8ZGlhZ25vc2lzPl0KKyAgIHRlc3RfcGF0aF9pc19kaXIgPHBhdGg+IFs8ZGlhZ25vc2lzPl0KKyAgIHRlc3RfcGF0aF9pc19taXNzaW5nIDxwYXRoPiBbPGRpYWdub3Npcz5dCisKKyAgIENoZWNrIGlmIHRoZSBuYW1lZCBwYXRoIGlzIGEgZmlsZSwgaWYgdGhlIG5hbWVkIHBhdGggaXMgYQorICAgZGlyZWN0b3J5LCBvciBpZiB0aGUgbmFtZWQgcGF0aCBkb2VzIG5vdCBleGlzdCwgcmVzcGVjdGl2ZWx5LAorICAgYW5kIGZhaWwgb3RoZXJ3aXNlLCBzaG93aW5nIHRoZSA8ZGlhZ25vc2lzPiB0ZXh0LgorCisgLSB0ZXN0X3doZW5fZmluaXNoZWQgPHNjcmlwdD4KKworICAgUHJlcGVuZCA8c2NyaXB0PiB0byBhIGxpc3Qgb2YgY29tbWFuZHMgdG8gcnVuIHRvIGNsZWFuIHVwCisgICBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHRlc3QuICBJZiBzb21lIGNsZWFuLXVwIGNvbW1hbmQKKyAgIGZhaWxzLCB0aGUgdGVzdCB3aWxsIG5vdCBwYXNzLgorCisgICBFeGFtcGxlOgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIHBvaW50aW5nIHRvIG5vbi1jb21taXQnICcKKwkJZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSA+LmdpdC9yZWZzL2hlYWRzL2ludmFsaWQgJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2ludmFsaWQiICYmCisJCS4uLgorCScKKworIC0gdGVzdF9hdGV4aXQgPHNjcmlwdD4KKworICAgUHJlcGVuZCA8c2NyaXB0PiB0byBhIGxpc3Qgb2YgY29tbWFuZHMgdG8gcnVuIHVuY29uZGl0aW9uYWxseSB0bworICAgY2xlYW4gdXAgYmVmb3JlIHRoZSB0ZXN0IHNjcmlwdCBleGl0cywgZS5nLiB0byBzdG9wIGEgZGFlbW9uOgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBnaXQgZGFlbW9uJyAnCisJCWdpdCBkYWVtb24gJgorCQlkYWVtb25fcGlkPSQhICYmCisJCXRlc3RfYXRleGl0ICdraWxsICRkYWVtb25fcGlkJyAmJgorCQloZWxsbyB3b3JsZAorCScKKworICAgVGhlIGNvbW1hbmRzIHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSB0cmFzaCBkaXJlY3RvcnkgaXMgcmVtb3ZlZCwKKyAgIGkuZS4gdGhlIGF0ZXhpdCBjb21tYW5kcyB3aWxsIHN0aWxsIGJlIGFibGUgdG8gYWNjZXNzIGFueSBwaWRmaWxlcyBvcgorICAgc29ja2V0IGZpbGVzLgorCisgICBOb3RlIHRoYXQgdGhlc2UgY29tbWFuZHMgd2lsbCBiZSBydW4gZXZlbiB3aGVuIGEgdGVzdCBzY3JpcHQgcnVuCisgICB3aXRoICctLWltbWVkaWF0ZScgZmFpbHMuICBCZSBjYXJlZnVsIHdpdGggeW91ciBhdGV4aXQgY29tbWFuZHMgdG8KKyAgIG1pbmltaXplIGFueSBjaGFuZ2VzIHRvIHRoZSBmYWlsZWQgc3RhdGUuCisKKyAtIHRlc3Rfd3JpdGVfbGluZXMgPGxpbmVzPgorCisgICBXcml0ZSA8bGluZXM+IG9uIHN0YW5kYXJkIG91dHB1dCwgb25lIGxpbmUgcGVyIGFyZ3VtZW50LgorICAgVXNlZnVsIHRvIHByZXBhcmUgbXVsdGktbGluZSBmaWxlcyBpbiBhIGNvbXBhY3QgZm9ybS4KKworICAgRXhhbXBsZToKKworCXRlc3Rfd3JpdGVfbGluZXMgYSBiIGMgZCBlIGYgZyA+Zm9vCisKKyAgIElzIGEgbW9yZSBjb21wYWN0IGVxdWl2YWxlbnQgb2Y6CisJY2F0ID5mb28gPDwtRU9GCisJYQorCWIKKwljCisJZAorCWUKKwlmCisJZworCUVPRgorCisKKyAtIHRlc3RfcGF1c2UKKworCVRoaXMgY29tbWFuZCBpcyB1c2VmdWwgZm9yIHdyaXRpbmcgYW5kIGRlYnVnZ2luZyB0ZXN0cyBhbmQgbXVzdCBiZQorCXJlbW92ZWQgYmVmb3JlIHN1Ym1pdHRpbmcuIEl0IGhhbHRzIHRoZSBleGVjdXRpb24gb2YgdGhlIHRlc3QgYW5kCisJc3Bhd25zIGEgc2hlbGwgaW4gdGhlIHRyYXNoIGRpcmVjdG9yeS4gRXhpdCB0aGUgc2hlbGwgdG8gY29udGludWUKKwl0aGUgdGVzdC4gRXhhbXBsZToKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QnICcKKwkJZ2l0IGRvLXNvbWV0aGluZyA+YWN0dWFsICYmCisJCXRlc3RfcGF1c2UgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisgLSB0ZXN0X2xuX3NfYWRkIDxwYXRoMT4gPHBhdGgyPgorCisgICBUaGlzIGZ1bmN0aW9uIGhlbHBzIHN5c3RlbXMgd2hvc2UgZmlsZXN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IHN5bWJvbGljCisgICBsaW5rcy4gVXNlIGl0IHRvIGFkZCBhIHN5bWJvbGljIGxpbmsgZW50cnkgdG8gdGhlIGluZGV4IHdoZW4gaXQgaXMgbm90CisgICBpbXBvcnRhbnQgdGhhdCB0aGUgZmlsZSBzeXN0ZW0gZW50cnkgaXMgYSBzeW1ib2xpYyBsaW5rLCBpLmUuLCBpbnN0ZWFkCisgICBvZiB0aGUgc2VxdWVuY2UKKworCWxuIC1zIGZvbyBiYXIgJiYKKwlnaXQgYWRkIGJhcgorCisgICBTb21ldGltZXMgaXQgaXMgcG9zc2libGUgdG8gc3BsaXQgYSB0ZXN0IGluIGEgcGFydCB0aGF0IGRvZXMgbm90IG5lZWQKKyAgIHRoZSBzeW1ib2xpYyBsaW5rIGluIHRoZSBmaWxlIHN5c3RlbSBhbmQgYSBwYXJ0IHRoYXQgZG9lczsgdGhlbiBvbmx5CisgICB0aGUgbGF0dGVyIHBhcnQgbmVlZCBiZSBwcm90ZWN0ZWQgYnkgYSBTWU1MSU5LUyBwcmVyZXF1aXNpdGUgKHNlZSBiZWxvdykuCisKKyAtIHRlc3Rfb2lkX2luaXQKKworICAgVGhpcyBmdW5jdGlvbiBsb2FkcyBmYWN0cyBhbmQgdXNlZnVsIG9iamVjdCBJRHMgcmVsYXRlZCB0byB0aGUgaGFzaAorICAgYWxnb3JpdGhtKHMpIGluIHVzZSBmcm9tIHRoZSBmaWxlcyBpbiB0L29pZC1pbmZvLgorCisgLSB0ZXN0X29pZF9jYWNoZQorCisgICBUaGlzIGZ1bmN0aW9uIHJlYWRzIHBlci1oYXNoIGFsZ29yaXRobSBpbmZvcm1hdGlvbiBmcm9tIHN0YW5kYXJkCisgICBpbnB1dCAodXN1YWxseSBhIGhlcmVkb2MpIGluIHRoZSBmb3JtYXQgZGVzY3JpYmVkIGluCisgICB0L29pZC1pbmZvL1JFQURNRS4gIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0LXNwZWNpZmljIHZhbHVlcywgc3VjaCBhcworICAgb2JqZWN0IElEcywgd2hpY2ggbXVzdCB2YXJ5IGJhc2VkIG9uIHRoZSBoYXNoIGFsZ29yaXRobS4KKworICAgQ2VydGFpbiBmaXhlZCB2YWx1ZXMsIHN1Y2ggYXMgaGFzaCBzaXplcyBhbmQgY29tbW9uIHBsYWNlaG9sZGVyCisgICBvYmplY3QgSURzLCBjYW4gYmUgbG9hZGVkIHdpdGggdGVzdF9vaWRfaW5pdCAoZGVzY3JpYmVkIGFib3ZlKS4KKworIC0gdGVzdF9vaWQgPGtleT4KKworICAgVGhpcyBmdW5jdGlvbiBsb29rcyB1cCBhIHZhbHVlIGZvciB0aGUgaGFzaCBhbGdvcml0aG0gaW4gdXNlLCBiYXNlZAorICAgb24gdGhlIGtleSBnaXZlbi4gIFRoZSB2YWx1ZSBtdXN0IGhhdmUgYmVlbiBsb2FkZWQgdXNpbmcKKyAgIHRlc3Rfb2lkX2luaXQgb3IgdGVzdF9vaWRfY2FjaGUuICBQcm92aWRpbmcgYW4gdW5rbm93biBrZXkgaXMgYW4KKyAgIGVycm9yLgorCisgLSB5ZXMgWzxzdHJpbmc+XQorCisgICBUaGlzIGlzIG9mdGVuIHNlZW4gaW4gbW9kZXJuIFVOSVggYnV0IHNvbWUgcGxhdGZvcm1zIGxhY2sgaXQsIHNvCisgICB0aGUgdGVzdCBoYXJuZXNzIG92ZXJyaWRlcyB0aGUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gd2l0aCBhCisgICBtb3JlIGxpbWl0ZWQgb25lLiAgVXNlIHRoaXMgb25seSB3aGVuIGZlZWRpbmcgYSBoYW5kZnVsIGxpbmVzIG9mCisgICBvdXRwdXQgdG8gdGhlIGRvd25zdHJlYW0tLS11bmxpa2UgdGhlIHJlYWwgdmVyc2lvbiwgaXQgZ2VuZXJhdGVzCisgICBvbmx5IHVwIHRvIDk5IGxpbmVzLgorCisgLSB0ZXN0X2Jvb2xfZW52IDxlbnYtdmFyaWFibGUtbmFtZT4gPGRlZmF1bHQtdmFsdWU+CisKKyAgIEdpdmVuIHRoZSBuYW1lIG9mIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGggYSBib29sIHZhbHVlLAorICAgbm9ybWFsaXplIGl0cyB2YWx1ZSB0byBhIDAgKHRydWUpIG9yIDEgKGZhbHNlIG9yIGVtcHR5IHN0cmluZykKKyAgIHJldHVybiBjb2RlLiAgUmV0dXJuIHdpdGggY29kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBkZWZhdWx0CisgICB2YWx1ZSBpZiB0aGUgdmFyaWFibGUgaXMgdW5zZXQuCisgICBBYm9ydCB0aGUgdGVzdCBzY3JpcHQgaWYgZWl0aGVyIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgb3IgdGhlCisgICBkZWZhdWx0IGFyZSBub3QgdmFsaWQgYm9vbCB2YWx1ZXMuCisKKworUHJlcmVxdWlzaXRlcworLS0tLS0tLS0tLS0tLQorCitUaGVzZSBhcmUgdGhlIHByZXJlcXVpc2l0ZXMgdGhhdCB0aGUgdGVzdCBsaWJyYXJ5IHByZWRlZmluZXMgd2l0aAordGVzdF9oYXZlX3ByZXJlcS4KKworU2VlIHRoZSBwcmVyZXEgYXJndW1lbnQgdG8gdGhlIHRlc3RfKiBmdW5jdGlvbnMgaW4gdGhlICJUZXN0IGhhcm5lc3MKK2xpYnJhcnkiIHNlY3Rpb24gYWJvdmUgYW5kIHRoZSAidGVzdF9oYXZlX3ByZXJlcSIgZnVuY3Rpb24gZm9yIGhvdyB0bwordXNlIHRoZXNlLCBhbmQgInRlc3Rfc2V0X3ByZXJlcSIgZm9yIGhvdyB0byBkZWZpbmUgeW91ciBvd24uCisKKyAtIFBZVEhPTgorCisgICBHaXQgd2Fzbid0IGNvbXBpbGVkIHdpdGggTk9fUFlUSE9OPVllc1BsZWFzZS4gV3JhcCBhbnkgdGVzdHMgdGhhdAorICAgbmVlZCBQeXRob24gd2l0aCB0aGlzLgorCisgLSBQRVJMCisKKyAgIEdpdCB3YXNuJ3QgY29tcGlsZWQgd2l0aCBOT19QRVJMPVllc1BsZWFzZS4KKworICAgRXZlbiB3aXRob3V0IHRoZSBQRVJMIHByZXJlcXVpc2l0ZSwgdGVzdHMgY2FuIGFzc3VtZSB0aGVyZSBpcyBhCisgICB1c2FibGUgcGVybCBpbnRlcnByZXRlciBhdCAkUEVSTF9QQVRILCB0aG91Z2ggaXQgbmVlZCBub3QgYmUKKyAgIHBhcnRpY3VsYXJseSBtb2Rlcm4uCisKKyAtIFBPU0lYUEVSTQorCisgICBUaGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBQT1NJWCBzdHlsZSBwZXJtaXNzaW9uIGJpdHMuCisKKyAtIEJTTEFTSFBTUEVDCisKKyAgIEJhY2tzbGFzaGVzIGluIHBhdGhzcGVjIGFyZSBub3QgZGlyZWN0b3J5IHNlcGFyYXRvcnMuIFRoaXMgaXMgbm90CisgICBzZXQgb24gV2luZG93cy4gU2VlIDZmZDExMDZhIGZvciBkZXRhaWxzLgorCisgLSBFWEVDS0VFUFNQSUQKKworICAgVGhlIHByb2Nlc3MgcmV0YWlucyB0aGUgc2FtZSBwaWQgYWNyb3NzIGV4ZWMoMikuIFNlZSBmYjlhMmJlYSBmb3IKKyAgIGRldGFpbHMuCisKKyAtIFBJUEUKKworICAgVGhlIGZpbGVzeXN0ZW0gd2UncmUgb24gc3VwcG9ydHMgY3JlYXRpb24gb2YgRklGT3MgKG5hbWVkIHBpcGVzKQorICAgdmlhIG1rZmlmbygxKS4KKworIC0gU1lNTElOS1MKKworICAgVGhlIGZpbGVzeXN0ZW0gd2UncmUgb24gc3VwcG9ydHMgc3ltYm9saWMgbGlua3MuIEUuZy4gYSBGQVQKKyAgIGZpbGVzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IHRoZXNlLiBTZWUgNzA0YTMxNDMgZm9yIGRldGFpbHMuCisKKyAtIFNBTklUWQorCisgICBUZXN0IGlzIG5vdCBydW4gYnkgcm9vdCB1c2VyLCBhbmQgYW4gYXR0ZW1wdCB0byB3cml0ZSB0byBhbgorICAgdW53cml0YWJsZSBmaWxlIGlzIGV4cGVjdGVkIHRvIGZhaWwgY29ycmVjdGx5LgorCisgLSBQQ1JFCisKKyAgIEdpdCB3YXMgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBQQ1JFLiBXcmFwIGFueSB0ZXN0cworICAgdGhhdCB1c2UgZ2l0LWdyZXAgLS1wZXJsLXJlZ2V4cCBvciBnaXQtZ3JlcCAtUCBpbiB0aGVzZS4KKworIC0gTElCUENSRTEKKworICAgR2l0IHdhcyBjb21waWxlZCB3aXRoIFBDUkUgdjEgc3VwcG9ydCB2aWEKKyAgIFVTRV9MSUJQQ1JFMT1ZZXNQbGVhc2UuIFdyYXAgYW55IFBDUkUgdXNpbmcgdGVzdHMgdGhhdCBmb3Igc29tZQorICAgcmVhc29uIG5lZWQgdjEgb2YgdGhlIFBDUkUgbGlicmFyeSBpbnN0ZWFkIG9mIHYyIGluIHRoZXNlLgorCisgLSBMSUJQQ1JFMgorCisgICBHaXQgd2FzIGNvbXBpbGVkIHdpdGggUENSRSB2MiBzdXBwb3J0IHZpYQorICAgVVNFX0xJQlBDUkUyPVllc1BsZWFzZS4gV3JhcCBhbnkgUENSRSB1c2luZyB0ZXN0cyB0aGF0IGZvciBzb21lCisgICByZWFzb24gbmVlZCB2MiBvZiB0aGUgUENSRSBsaWJyYXJ5IGluc3RlYWQgb2YgdjEgaW4gdGhlc2UuCisKKyAtIENBU0VfSU5TRU5TSVRJVkVfRlMKKworICAgVGVzdCBpcyBydW4gb24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtLgorCisgLSBVVEY4X05GRF9UT19ORkMKKworICAgVGVzdCBpcyBydW4gb24gYSBmaWxlc3lzdGVtIHdoaWNoIGNvbnZlcnRzIGRlY29tcG9zZWQgdXRmLTggKG5mZCkKKyAgIHRvIHByZWNvbXBvc2VkIHV0Zi04IChuZmMpLgorCisgLSBQVEhSRUFEUworCisgICBHaXQgd2Fzbid0IGNvbXBpbGVkIHdpdGggTk9fUFRIUkVBRFM9WWVzUGxlYXNlLgorCitUaXBzIGZvciBXcml0aW5nIFRlc3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FzIHdpdGggYW55IHByb2dyYW1taW5nIHByb2plY3RzLCBleGlzdGluZyBwcm9ncmFtcyBhcmUgdGhlIGJlc3QKK3NvdXJjZSBvZiB0aGUgaW5mb3JtYXRpb24uICBIb3dldmVyLCBkbyBfbm90XyBlbXVsYXRlCit0MDAwMC1iYXNpYy5zaCB3aGVuIHdyaXRpbmcgeW91ciB0ZXN0cy4gIFRoZSB0ZXN0IGlzIHNwZWNpYWwgaW4KK3RoYXQgaXQgdHJpZXMgdG8gdmFsaWRhdGUgdGhlIHZlcnkgY29yZSBvZiBHSVQuICBGb3IgZXhhbXBsZSwgaXQKK2tub3dzIHRoYXQgdGhlcmUgd2lsbCBiZSAyNTYgc3ViZGlyZWN0b3JpZXMgdW5kZXIgLmdpdC9vYmplY3RzLywKK2FuZCBpdCBrbm93cyB0aGF0IHRoZSBvYmplY3QgSUQgb2YgYW4gZW1wdHkgdHJlZSBpcyBhIGNlcnRhaW4KKzQwLWJ5dGUgc3RyaW5nLiAgVGhpcyBpcyBkZWxpYmVyYXRlbHkgZG9uZSBzbyBpbiB0MDAwMC1iYXNpYy5zaAorYmVjYXVzZSB0aGUgdGhpbmdzIHRoZSB2ZXJ5IGJhc2ljIGNvcmUgdGVzdCB0cmllcyB0byBhY2hpZXZlIGlzCit0byBzZXJ2ZSBhcyBhIGJhc2lzIGZvciBwZW9wbGUgd2hvIGFyZSBjaGFuZ2luZyB0aGUgR0lUIGludGVybmFsCitkcmFzdGljYWxseS4gIEZvciB0aGVzZSBwZW9wbGUsIGFmdGVyIG1ha2luZyBjZXJ0YWluIGNoYW5nZXMsCitub3Qgc2VlaW5nIGZhaWx1cmVzIGZyb20gdGhlIGJhc2ljIHRlc3QgX2lzXyBhIGZhaWx1cmUuICBBbmQKK3N1Y2ggZHJhc3RpYyBjaGFuZ2VzIHRvIHRoZSBjb3JlIEdJVCB0aGF0IGV2ZW4gY2hhbmdlcyB0aGVzZQorb3RoZXJ3aXNlIHN1cHBvc2VkbHkgc3RhYmxlIG9iamVjdCBJRHMgc2hvdWxkIGJlIGFjY29tcGFuaWVkIGJ5CithbiB1cGRhdGUgdG8gdDAwMDAtYmFzaWMuc2guCisKK0hvd2V2ZXIsIG90aGVyIHRlc3RzIHRoYXQgc2ltcGx5IHJlbHkgb24gYmFzaWMgcGFydHMgb2YgdGhlIGNvcmUKK0dJVCB3b3JraW5nIHByb3Blcmx5IHNob3VsZCBub3QgaGF2ZSB0aGF0IGxldmVsIG9mIGludGltYXRlCitrbm93bGVkZ2Ugb2YgdGhlIGNvcmUgR0lUIGludGVybmFscy4gIElmIGFsbCB0aGUgdGVzdCBzY3JpcHRzCitoYXJkY29kZWQgdGhlIG9iamVjdCBJRHMgbGlrZSB0MDAwMC1iYXNpYy5zaCBkb2VzLCB0aGF0IGRlZmVhdHMKK3RoZSBwdXJwb3NlIG9mIHQwMDAwLWJhc2ljLnNoLCB3aGljaCBpcyB0byBpc29sYXRlIHRoYXQgbGV2ZWwgb2YKK3ZhbGlkYXRpb24gaW4gb25lIHBsYWNlLiAgWW91ciB0ZXN0IGFsc28gZW5kcyB1cCBuZWVkaW5nCit1cGRhdGluZyB3aGVuIHN1Y2ggYSBjaGFuZ2UgdG8gdGhlIGludGVybmFsIGhhcHBlbnMsIHNvIGRvIF9ub3RfCitkbyBpdCBhbmQgbGVhdmUgdGhlIGxvdyBsZXZlbCBvZiB2YWxpZGF0aW9uIHRvIHQwMDAwLWJhc2ljLnNoLgorCitUZXN0IGNvdmVyYWdlCistLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gdXNlIHRoZSBjb3ZlcmFnZSB0ZXN0cyB0byBmaW5kIGNvZGUgcGF0aHMgdGhhdCBhcmUgbm90IGJlaW5nCit1c2VkIG9yIHByb3Blcmx5IGV4ZXJjaXNlZCB5ZXQuCisKK1RvIGRvIHRoYXQsIHJ1biB0aGUgY292ZXJhZ2UgdGFyZ2V0IGF0IHRoZSB0b3AtbGV2ZWwgKG5vdCBpbiB0aGUgdC8KK2RpcmVjdG9yeSk6CisKKyAgICBtYWtlIGNvdmVyYWdlCisKK1RoYXQnbGwgY29tcGlsZSBHaXQgd2l0aCBHQ0MncyBjb3ZlcmFnZSBhcmd1bWVudHMsIGFuZCBnZW5lcmF0ZSBhIHRlc3QKK3JlcG9ydCB3aXRoIGdjb3YgYWZ0ZXIgdGhlIHRlc3RzIGZpbmlzaC4gUnVubmluZyB0aGUgY292ZXJhZ2UgdGVzdHMKK2NhbiB0YWtlIGEgd2hpbGUsIHNpbmNlIHJ1bm5pbmcgdGhlIHRlc3RzIGluIHBhcmFsbGVsIGlzIGluY29tcGF0aWJsZQord2l0aCBHQ0MncyBjb3ZlcmFnZSBtb2RlLgorCitBZnRlciB0aGUgdGVzdHMgaGF2ZSBydW4geW91IGNhbiBnZW5lcmF0ZSBhIGxpc3Qgb2YgdW50ZXN0ZWQKK2Z1bmN0aW9uczoKKworICAgIG1ha2UgY292ZXJhZ2UtdW50ZXN0ZWQtZnVuY3Rpb25zCisKK1lvdSBjYW4gYWxzbyBnZW5lcmF0ZSBhIGRldGFpbGVkIHBlci1maWxlIEhUTUwgcmVwb3J0IHVzaW5nIHRoZQorRGV2ZWw6OkNvdmVyIG1vZHVsZS4gVG8gaW5zdGFsbCBpdCBkbzoKKworICAgIyBPbiBEZWJpYW4gb3IgVWJ1bnR1OgorICAgc3VkbyBhcHRpdHVkZSBpbnN0YWxsIGxpYmRldmVsLWNvdmVyLXBlcmwKKworICAgIyBGcm9tIHRoZSBDUEFOIHdpdGggY3Bhbm1pbnVzCisgICBjdXJsIC1MIGh0dHA6Ly9jcGFubWluLnVzIHwgcGVybCAtIC0tc3VkbyAtLXNlbGYtdXBncmFkZQorICAgY3Bhbm0gLS1zdWRvIERldmVsOjpDb3ZlcgorCitUaGVuLCBhdCB0aGUgdG9wLWxldmVsOgorCisgICAgbWFrZSBjb3Zlcl9kYl9odG1sCisKK1RoYXQnbGwgZ2VuZXJhdGUgYSBkZXRhaWxlZCBjb3ZlciByZXBvcnQgaW4gdGhlICJjb3Zlcl9kYl9odG1sIgorZGlyZWN0b3J5LCB3aGljaCB5b3UgY2FuIHRoZW4gY29weSB0byBhIHdlYnNlcnZlciwgb3IgaW5zcGVjdCBsb2NhbGx5CitpbiBhIGJyb3dzZXIuCmRpZmYgLS1naXQgYS90L2FnZ3JlZ2F0ZS1yZXN1bHRzLnNoIGIvdC9hZ2dyZWdhdGUtcmVzdWx0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43OTEzZTIwCi0tLSAvZGV2L251bGwKKysrIGIvdC9hZ2dyZWdhdGUtcmVzdWx0cy5zaApAQCAtMCwwICsxLDQ2IEBACisjIS9iaW4vc2gKKworZmFpbGVkX3Rlc3RzPQorZml4ZWQ9MAorc3VjY2Vzcz0wCitmYWlsZWQ9MAorYnJva2VuPTAKK3RvdGFsPTAKKword2hpbGUgcmVhZCBmaWxlCitkbworCXdoaWxlIHJlYWQgdHlwZSB2YWx1ZQorCWRvCisJCWNhc2UgJHR5cGUgaW4KKwkJJycpCisJCQljb250aW51ZSA7OworCQlmaXhlZCkKKwkJCWZpeGVkPSQoKCRmaXhlZCArICR2YWx1ZSkpIDs7CisJCXN1Y2Nlc3MpCisJCQlzdWNjZXNzPSQoKCRzdWNjZXNzICsgJHZhbHVlKSkgOzsKKwkJZmFpbGVkKQorCQkJZmFpbGVkPSQoKCRmYWlsZWQgKyAkdmFsdWUpKQorCQkJaWYgdGVzdCAkdmFsdWUgIT0gMAorCQkJdGhlbgorCQkJCXRlc3RudW09JChleHByICIkZmlsZSIgOiAndGVzdC1yZXN1bHRzL1wodFswLTldKlwpLScpCisJCQkJZmFpbGVkX3Rlc3RzPSIkZmFpbGVkX3Rlc3RzICR0ZXN0bnVtIgorCQkJZmkKKwkJCTs7CisJCWJyb2tlbikKKwkJCWJyb2tlbj0kKCgkYnJva2VuICsgJHZhbHVlKSkgOzsKKwkJdG90YWwpCisJCQl0b3RhbD0kKCgkdG90YWwgKyAkdmFsdWUpKSA7OworCQllc2FjCisJZG9uZSA8IiRmaWxlIgorZG9uZQorCitpZiB0ZXN0IC1uICIkZmFpbGVkX3Rlc3RzIgordGhlbgorCXByaW50ZiAiXG5mYWlsZWQgdGVzdChzKTokZmFpbGVkX3Rlc3RzXG5cbiIKK2ZpCisKK3ByaW50ZiAiJS04cyVkXG4iIGZpeGVkICRmaXhlZAorcHJpbnRmICIlLThzJWRcbiIgc3VjY2VzcyAkc3VjY2VzcworcHJpbnRmICIlLThzJWRcbiIgZmFpbGVkICRmYWlsZWQKK3ByaW50ZiAiJS04cyVkXG4iIGJyb2tlbiAkYnJva2VuCitwcmludGYgIiUtOHMlZFxuIiB0b3RhbCAkdG90YWwKZGlmZiAtLWdpdCBhL3QvYW5ub3RhdGUtdGVzdHMuc2ggYi90L2Fubm90YXRlLXRlc3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MzNhZjUKLS0tIC9kZXYvbnVsbAorKysgYi90L2Fubm90YXRlLXRlc3RzLnNoCkBAIC0wLDAgKzEsNTg0IEBACisjIFRoaXMgZmlsZSBpc24ndCB1c2VkIGFzIGEgdGVzdCBzY3JpcHQgZGlyZWN0bHksIGluc3RlYWQgaXQgaXMKKyMgc291cmNlZCBmcm9tIHQ4MDAxLWFubm90YXRlLnNoIGFuZCB0ODAwMi1ibGFtZS5zaC4KKworaWYgdGVzdF9oYXZlX3ByZXJlcSBNSU5HVwordGhlbgorICBzYW5pdGl6ZV9MICgpIHsKKwllY2hvICIkMSIgfCBzZWQgJ3NYXCheLUxcfCxcKVxeXD8vWCZcXDsqWGcnCisgIH0KK2Vsc2UKKyAgc2FuaXRpemVfTCAoKSB7CisJZWNobyAiJDEiCisgIH0KK2ZpCisKK2NoZWNrX2NvdW50ICgpIHsKKwloZWFkPSAmJgorCWZpbGU9J2ZpbGUnICYmCisJb3B0aW9ucz0gJiYKKwl3aGlsZSA6CisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1oKSBoZWFkPSIkMiI7IHNoaWZ0OyBzaGlmdCA7OworCQktZikgZmlsZT0iJDIiOyBzaGlmdDsgc2hpZnQgOzsKKwkJLUwqKSBvcHRpb25zPSIkb3B0aW9ucyAkKHNhbml0aXplX0wgIiQxIikiOyBzaGlmdCA7OworCQktKikgb3B0aW9ucz0iJG9wdGlvbnMgJDEiOyBzaGlmdCA7OworCQkqKSBicmVhayA7OworCQllc2FjCisJZG9uZSAmJgorCWVjaG8gIiRQUk9HICRvcHRpb25zICRmaWxlICRoZWFkIiA+JjQgJiYKKwkkUFJPRyAkb3B0aW9ucyAkZmlsZSAkaGVhZCA+YWN0dWFsICYmCisJcGVybCAtZSAnCisJCW15ICVleHBlY3QgPSAoQEFSR1YpOworCQlteSAlY291bnQgPSBtYXAgeyAkXyA9PiAwIH0ga2V5cyAlZXhwZWN0OworCQl3aGlsZSAoPFNURElOPikgeworCQkJaWYgKC9eWzAtOWEtZl0rXHRcKChbXlx0XSspXHQvKSB7CisJCQkJbXkgJGF1dGhvciA9ICQxOworCQkJCWZvciAoJGF1dGhvcikgeyBzL15ccyovLzsgcy9ccyokLy87IH0KKwkJCQkkY291bnR7JGF1dGhvcn0rKzsKKwkJCX0KKwkJfQorCQlteSAkYmFkID0gMDsKKwkJd2hpbGUgKG15ICgkYXV0aG9yLCAkY291bnQpID0gZWFjaCAlY291bnQpIHsKKwkJCW15ICRvazsKKwkJCW15ICR2YWx1ZSA9IDA7CisJCQkkdmFsdWUgPSAkZXhwZWN0eyRhdXRob3J9IGlmIGRlZmluZWQgJGV4cGVjdHskYXV0aG9yfTsKKwkJCWlmICgkdmFsdWUgIT0gJGNvdW50KSB7CisJCQkJJGJhZCA9IDE7CisJCQkJJG9rID0gImJhZCI7CisJCQl9CisJCQllbHNlIHsKKwkJCQkkb2sgPSAiZ29vZCI7CisJCQl9CisJCQlwcmludCBTVERFUlIgIkF1dGhvciAkYXV0aG9yIChleHBlY3RlZCAkdmFsdWUsIGF0dHJpYnV0ZWQgJGNvdW50KSAkb2tcbiI7CisJCX0KKwkJZXhpdCgkYmFkKTsKKwknICIkQCIgPGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBBIGxpbmVzJyAnCisJZWNobyAiMUEgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIiA+ZmlsZSAmJgorCWVjaG8gImxhenkgZG9nIiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkEiIEdJVF9BVVRIT1JfRU1BSUw9IkFAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1hIC1tICJJbml0aWFsLiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgMSBhdXRob3InICcKKwljaGVja19jb3VudCBBIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgaW4gYSBiYXJlIHJlcG8gd2l0aG91dCBzdGFydGluZyBjb21taXQnICcKKwlnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZS5naXQgJiYKKwkoCisJCWNkIGJhcmUuZ2l0ICYmCisJCWNoZWNrX2NvdW50IEEgMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgYnkgdGFnIG9iamVjdHMnICcKKwlnaXQgdGFnIC1tICJ0ZXN0IHRhZyIgdGVzdFRhZyAmJgorCWdpdCB0YWcgLW0gInRlc3QgdGFnICMyIiB0ZXN0VGFnMiB0ZXN0VGFnICYmCisJY2hlY2tfY291bnQgLWggdGVzdFRhZyBBIDIgJiYKKwljaGVja19jb3VudCAtaCB0ZXN0VGFnMiBBIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgQiBsaW5lcycgJworCWVjaG8gIjJBIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSIgPj5maWxlICYmCisJZWNobyAibGF6eSBkb2ciID4+ZmlsZSAmJgorCUdJVF9BVVRIT1JfTkFNRT0iQiIgR0lUX0FVVEhPUl9FTUFJTD0iQkB0ZXN0LmdpdCIgXAorCWdpdCBjb21taXQgLWEgLW0gIlNlY29uZC4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIDIgYXV0aG9ycycgJworCWNoZWNrX2NvdW50IEEgMiBCIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgQjEgbGluZXMgKGJyYW5jaDEpJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDEgbWFzdGVyICYmCisJZWNobyAiM0Egc2xvdyBncmVlbiBmb3gganVtcHMgaW50byB0aGUiID4+ZmlsZSAmJgorCWVjaG8gIndlbGwuIiA+PmZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkIxIiBHSVRfQVVUSE9SX0VNQUlMPSJCMUB0ZXN0LmdpdCIgXAorCWdpdCBjb21taXQgLWEgLW0gIkJyYW5jaDEtMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgMiBhdXRob3JzICsgMSBicmFuY2gxIGF1dGhvcicgJworCWNoZWNrX2NvdW50IEEgMiBCIDIgQjEgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBCMiBsaW5lcyAoYnJhbmNoMiknICcKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBtYXN0ZXIgJiYKKwlzZWQgLWUgInMvMkEgcXVpY2sgYnJvd24vNEEgcXVpY2sgYnJvd24gbGF6eSBkb2cvIiA8ZmlsZSA+ZmlsZS5uZXcgJiYKKwltdiBmaWxlLm5ldyBmaWxlICYmCisJR0lUX0FVVEhPUl9OQU1FPSJCMiIgR0lUX0FVVEhPUl9FTUFJTD0iQjJAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1hIC1tICJCcmFuY2gyLTEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIDIgYXV0aG9ycyArIDEgYnJhbmNoMiBhdXRob3InICcKKwljaGVja19jb3VudCBBIDIgQiAxIEIyIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYnJhbmNoMSAmIGJyYW5jaDInICcKKwlnaXQgbWVyZ2UgYnJhbmNoMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAyIGF1dGhvcnMgKyAyIG1lcmdlZC1pbiBhdXRob3JzJyAnCisJY2hlY2tfY291bnQgQSAyIEIgMSBCMSAyIEIyIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLS1maXJzdC1wYXJlbnQgYmxhbWVzIG1lcmdlIGZvciBicmFuY2gxJyAnCisJY2hlY2tfY291bnQgLS1maXJzdC1wYXJlbnQgQSAyIEIgMSAiQSBVIFRob3IiIDIgQjIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBhbmNlc3RvcicgJworCWNoZWNrX2NvdW50IC1oIG1hc3RlciBBIDIgQiAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGdyZWF0LWFuY2VzdG9yJyAnCisJY2hlY2tfY291bnQgLWggbWFzdGVyXiBBIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXZpbCBtZXJnZScgJworCWVjaG8gImV2aWwgbWVyZ2UuIiA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC0tYW1lbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgZXZpbCBtZXJnZScgJworCWNoZWNrX2NvdW50IEEgMiBCIDEgQjEgMiBCMiAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBodWdlIGdyYWZ0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgYnJhbmNoMiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvaW5mby9ncmFmdHMiICYmCisJZ3JhZnQ9ICYmCisJZm9yIGkgaW4gMCAxIDIKKwlkbworCQlmb3IgaiBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5CisJCWRvCisJCQlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gIiRpJGoiICYmCisJCQlwcmludGYgIiVzXG4iICIkaSIgIiRqIiA+ZmlsZSAmJgorCQkJdGVzdF90aWNrICYmCisJCQlHSVRfQVVUSE9SX05BTUU9JGkkaiBHSVRfQVVUSE9SX0VNQUlMPSRpJGpAdGVzdC5naXQgXAorCQkJZ2l0IGNvbW1pdCAtYSAtbSAiJGkkaiIgJiYKKwkJCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkJCWdyYWZ0PSIkZ3JhZnQkY29tbWl0ICIKKwkJZG9uZQorCWRvbmUgJiYKKwlwcmludGYgIiVzICIgJGdyYWZ0ID4uZ2l0L2luZm8vZ3JhZnRzICYmCisJY2hlY2tfY291bnQgLWggMDAgMDEgMSAxMCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGluY29tcGxldGUgbGluZScgJworCWVjaG8gImluY29tcGxldGUiIHwgdHIgLWQgIlxcMDEyIiA+PmZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkMiIEdJVF9BVVRIT1JfRU1BSUw9IkNAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1hIC1tICJJbmNvbXBsZXRlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBpbmNvbXBsZXRlIGxpbmUnICcKKwljaGVja19jb3VudCBBIDIgQiAxIEIxIDIgQjIgMSAiQSBVIFRob3IiIDEgQyAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGVkaXRzJyAnCisJbXYgZmlsZSBmaWxlLm9yaWcgJiYKKwl7CisJCWNhdCBmaWxlLm9yaWcgJiYKKwkJZWNobworCX0gfCBzZWQgLWUgInMvXjNBLzk5LyIgLWUgIi9eMUEvZCIgLWUgIi9eaW5jb21wbGV0ZS9kIiA+ZmlsZSAmJgorCWVjaG8gImluY29tcGxldGUiIHwgdHIgLWQgIlxcMDEyIiA+PmZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkQiIEdJVF9BVVRIT1JfRU1BSUw9IkRAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1hIC1tICJlZGl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBlZGl0cycgJworCWNoZWNrX2NvdW50IEEgMSBCIDEgQjEgMSBCMiAxICJBIFUgVGhvciIgMSBDIDEgRCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9iZnVzY2F0ZWQgZW1haWwnICcKKwllY2hvICJObyByb2JvdHMgYWxsb3dlZCIgPmZpbGUubmV3ICYmCisJY2F0IGZpbGUgPj5maWxlLm5ldyAmJgorCW12IGZpbGUubmV3IGZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkUiIEdJVF9BVVRIT1JfRU1BSUw9IkUgYXQgdGVzdCBkb3QgZ2l0IiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAibm9yb2JvdHMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIG9iZnVzY2F0ZWQgZW1haWwnICcKKwljaGVja19jb3VudCBBIDEgQiAxIEIxIDEgQjIgMSAiQSBVIFRob3IiIDEgQyAxIEQgMSBFIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgMSAoYWxsKScgJworCWNoZWNrX2NvdW50IC1MMSBBIDEgQiAxIEIxIDEgQjIgMSAiQSBVIFRob3IiIDEgQyAxIEQgMSBFIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgLCAoYWxsKScgJworCWNoZWNrX2NvdW50IC1MLCBBIDEgQiAxIEIxIDEgQjIgMSAiQSBVIFRob3IiIDEgQyAxIEQgMSBFIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCAoWCB0byBlbmQpJyAnCisJY2hlY2tfY291bnQgLUw1IEIxIDEgQyAxIEQgMSAiQSBVIFRob3IiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwgKFggdG8gZW5kKScgJworCWNoZWNrX2NvdW50IC1MNSwgQjEgMSBDIDEgRCAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAsWSAodXAgdG8gWSknICcKKwljaGVja19jb3VudCAtTCwzIEEgMSBCMiAxIEUgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLFgnICcKKwljaGVja19jb3VudCAtTDMsMyBCMiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsWScgJworCWNoZWNrX2NvdW50IC1MMyw2IEIgMSBCMSAxIEIyIDEgRCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFksWCAodW5kb2N1bWVudGVkKScgJworCWNoZWNrX2NvdW50IC1MNiwzIEIgMSBCMSAxIEIyIDEgRCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIC1YJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwtMSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDAnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDAgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAsMCcgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MLDAgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAsKzAnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTCwrMCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsKzAnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDEsKzAgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLCsxJyAnCisJY2hlY2tfY291bnQgLUwzLCsxIEIyIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwrTicgJworCWNoZWNrX2NvdW50IC1MMywrNCBCIDEgQjEgMSBCMiAxIEQgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAsLTAnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTCwtMCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsLTAnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDEsLTAgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLC0xJyAnCisJY2hlY2tfY291bnQgLUwzLC0xIEIyIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwtTicgJworCWNoZWNrX2NvdW50IC1MNiwtNCBCIDEgQjEgMSBCMiAxIEQgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAvUkUvIChSRSB0byBlbmQpJyAnCisJY2hlY2tfY291bnQgLUwvZXZpbC8gQyAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAvUkUvLC9SRTIvJyAnCisJY2hlY2tfY291bnQgLUwvcm9ib3QvLC9ncmVlbi8gQSAxIEIgMSBCMiAxIEQgMSBFIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwvUkUvJyAnCisJY2hlY2tfY291bnQgLUw1LC9ldmlsLyBCMSAxIEQgMSAiQSBVIFRob3IiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgL1JFLyxZJyAnCisJY2hlY2tfY291bnQgLUwvOTkvLDcgQjEgMSBEIDEgIkEgVSBUaG9yIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIC9SRS8sK04nICcKKwljaGVja19jb3VudCAtTC85OS8sKzMgQjEgMSBEIDEgIkEgVSBUaG9yIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIC9SRS8sLU4nICcKKwljaGVja19jb3VudCAtTC85OS8sLTMgQiAxIEIyIDEgRCAxCisnCisKKyMgJ2ZpbGUnIGVuZHMgd2l0aCBhbiBpbmNvbXBsZXRlIGxpbmUsIHNvICd3YycgcmVwb3J0cyBvbmUgZmV3ZXIgbGluZXMgdGhhbgorIyBnaXQtYmxhbWUgc2VlcywgaGVuY2UgdGhlIGxhc3QgbGluZSBpcyBhY3R1YWxseSAkKHdjLi4uKSsxLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCAoWCA9PSBubGluZXMpJyAnCisJbj0kKGV4cHIgJCh3YyAtbCA8ZmlsZSkgKyAxKSAmJgorCWNoZWNrX2NvdW50IC1MJG4gQyAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFggKFggPT0gbmxpbmVzICsgMSknICcKKwluPSQoZXhwciAkKHdjIC1sIDxmaWxlKSArIDIpICYmCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwkbiBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFggKFggPiBubGluZXMpJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwxMjM0NSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MICxZIChZID09IG5saW5lcyknICcKKwluPSQoZXhwciAkKHdjIC1sIDxmaWxlKSArIDEpICYmCisJY2hlY2tfY291bnQgLUwsJG4gQSAxIEIgMSBCMSAxIEIyIDEgIkEgVSBUaG9yIiAxIEMgMSBEIDEgRSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MICxZIChZID09IG5saW5lcyArIDEpJyAnCisJbj0kKGV4cHIgJCh3YyAtbCA8ZmlsZSkgKyAyKSAmJgorCWNoZWNrX2NvdW50IC1MLCRuIEEgMSBCIDEgQjEgMSBCMiAxICJBIFUgVGhvciIgMSBDIDEgRCAxIEUgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAsWSAoWSA+IG5saW5lcyknICcKKwljaGVja19jb3VudCAtTCwxMjM0NSBBIDEgQiAxIEIxIDEgQjIgMSAiQSBVIFRob3IiIDEgQyAxIEQgMSBFIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgbXVsdGlwbGUgKGRpc2pvaW50KScgJworCWNoZWNrX2NvdW50IC1MMiwzIC1MNiw3IEEgMSBCMSAxIEIyIDEgIkEgVSBUaG9yIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIG11bHRpcGxlIChkaXNqb2ludDogdW5vcmRlcmVkKScgJworCWNoZWNrX2NvdW50IC1MNiw3IC1MMiwzIEEgMSBCMSAxIEIyIDEgIkEgVSBUaG9yIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIG11bHRpcGxlIChhZGphY2VudCknICcKKwljaGVja19jb3VudCAtTDIsMyAtTDQsNSBBIDEgQiAxIEIyIDEgRCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIG11bHRpcGxlIChhZGphY2VudDogdW5vcmRlcmVkKScgJworCWNoZWNrX2NvdW50IC1MNCw1IC1MMiwzIEEgMSBCIDEgQjIgMSBEIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgbXVsdGlwbGUgKG92ZXJsYXBwaW5nKScgJworCWNoZWNrX2NvdW50IC1MMiw0IC1MMyw1IEEgMSBCIDEgQjIgMSBEIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgbXVsdGlwbGUgKG92ZXJsYXBwaW5nOiB1bm9yZGVyZWQpJyAnCisJY2hlY2tfY291bnQgLUwzLDUgLUwyLDQgQSAxIEIgMSBCMiAxIEQgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBtdWx0aXBsZSAoc3VwZXJzZXQvc3Vic2V0KScgJworCWNoZWNrX2NvdW50IC1MMiw4IC1MMyw1IEEgMSBCIDEgQjEgMSBCMiAxIEMgMSBEIDEgIkEgVSBUaG9yIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIG11bHRpcGxlIChzdXBlcnNldC9zdWJzZXQ6IHVub3JkZXJlZCknICcKKwljaGVja19jb3VudCAtTDMsNSAtTDIsOCBBIDEgQiAxIEIxIDEgQjIgMSBDIDEgRCAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAvUkUvIChyZWxhdGl2ZSknICcKKwljaGVja19jb3VudCAtTDMsMyAtTC9mb3gvIEIxIDEgQjIgMSBDIDEgRCAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAvUkUvIChyZWxhdGl2ZTogbm8gcHJlY2VkaW5nIHJhbmdlKScgJworCWNoZWNrX2NvdW50IC1ML2RvZy8gQSAxIEIgMSBCMSAxIEIyIDEgQyAxIEQgMSAiQSBVIFRob3IiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgL1JFLyAocmVsYXRpdmU6IGFkamFjZW50KScgJworCWNoZWNrX2NvdW50IC1MMSwxIC1ML2RvZy8sKzEgQSAxIEUgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAvUkUvIChyZWxhdGl2ZTogbm90IGZvdW5kKScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MNCw0IC1ML2RvZy8gZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAvUkUvIChyZWxhdGl2ZTogZW5kLW9mLWZpbGUpJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwsIC1MLyQvIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgXi9SRS8gKGFic29sdXRlKScgJworCWNoZWNrX2NvdW50IC1MMywzIC1MXi9kb2cvLCsyIEEgMSBCMiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIF4vUkUvIChhYnNvbHV0ZTogbm8gcHJlY2VkaW5nIHJhbmdlKScgJworCWNoZWNrX2NvdW50IC1MXi9kb2cvLCsyIEEgMSBCMiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIF4vUkUvIChhYnNvbHV0ZTogbm90IGZvdW5kKScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MNCw0IC1MXi90YW1ib3VyaW5lLyBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIF4vUkUvIChhYnNvbHV0ZTogZW5kLW9mLWZpbGUpJyAnCisJbj0kKGV4cHIgJCh3YyAtbCA8ZmlsZSkgKyAxKSAmJgorCWNoZWNrX2NvdW50IC1MJG4gLUxeLyQvLCsyIEEgMSBDIDEgRSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC1MIDpyZWdleCcgJworCXRyIFEgIlxcdCIgPmhlbGxvLmMgPDwtXEVPRiAmJgorCWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCisJeworCVFwdXRzKCJoZWxsbyIpOworCX0KKwlFT0YKKwlnaXQgYWRkIGhlbGxvLmMgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkYiIEdJVF9BVVRIT1JfRU1BSUw9IkZAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1tICJoZWxsbyIgJiYKKworCW12IGhlbGxvLmMgaGVsbG8ub3JpZyAmJgorCXNlZCAtZSAiL30vIHt4OyBzLyQvUXB1dHMoXCJnb29kYnllXCIpOy87IEc7fSIgPGhlbGxvLm9yaWcgfAorCXRyIFEgIlxcdCIgPmhlbGxvLmMgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkciIEdJVF9BVVRIT1JfRU1BSUw9IkdAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1hIC1tICJnb29kYnllIiAmJgorCisJbXYgaGVsbG8uYyBoZWxsby5vcmlnICYmCisJZWNobyAiI2luY2x1ZGUgPHN0ZGlvLmg+IiA+aGVsbG8uYyAmJgorCWNhdCBoZWxsby5vcmlnID4+aGVsbG8uYyAmJgorCXRyIFEgIlxcdCIgPj5oZWxsby5jIDw8LVxFT0YgJiYKKwl2b2lkIG1haWwoKQorCXsKKwlRcHV0cygibWFpbCIpOworCX0KKwlFT0YKKwlHSVRfQVVUSE9SX05BTUU9IkgiIEdJVF9BVVRIT1JfRU1BSUw9IkhAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1hIC1tICJtYWlsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCA6bGl0ZXJhbCcgJworCWNoZWNrX2NvdW50IC1mIGhlbGxvLmMgLUw6bWFpbiBGIDQgRyAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDpyZWdleCcgJworCWNoZWNrX2NvdW50IC1mIGhlbGxvLmMgIi1MOm1bYS16XVthLXpdbCIgSCA0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDpub21hdGNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUw6bm9tYXRjaCBoZWxsby5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDpSRSAocmVsYXRpdmUpJyAnCisJY2hlY2tfY291bnQgLWYgaGVsbG8uYyAtTDMsMyAtTDptYS4uIEYgMSBIIDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgOlJFIChyZWxhdGl2ZTogbm8gcHJlY2VkaW5nIHJhbmdlKScgJworCWNoZWNrX2NvdW50IC1mIGhlbGxvLmMgLUw6bWEuLiBGIDQgRyAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDpSRSAocmVsYXRpdmU6IG5vdCBmb3VuZCknICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDMsMyAtTDp0YW1ib3VyaW5lIGhlbGxvLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgOlJFIChyZWxhdGl2ZTogZW5kLW9mLWZpbGUpJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwsIC1MOm1haW4gaGVsbG8uYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBeOlJFIChhYnNvbHV0ZSknICcKKwljaGVja19jb3VudCAtZiBoZWxsby5jIC1MMywzIC1MXjptYS4uIEYgNCBHIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgXjpSRSAoYWJzb2x1dGU6IG5vIHByZWNlZGluZyByYW5nZSknICcKKwljaGVja19jb3VudCAtZiBoZWxsby5jIC1MXjptYS4uIEYgNCBHIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgXjpSRSAoYWJzb2x1dGU6IG5vdCBmb3VuZCknICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDQsNCAtTF46dGFtYm91cmluZSBoZWxsby5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIF46UkUgKGFic29sdXRlOiBlbmQtb2YtZmlsZSknICcKKwluPSQocHJpbnRmICIlZCIgJCh3YyAtbCA8aGVsbG8uYykpICYmCisJY2hlY2tfY291bnQgLWYgaGVsbG8uYyAtTCRuIC1MXjptYS4uIEYgNCBHIDEgSCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGluY3JlbWVudGFsJyAnCisJKAorCUdJVF9BVVRIT1JfTkFNRT1JICYmCisJZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSAmJgorCUdJVF9BVVRIT1JfRU1BSUw9SUB0ZXN0LmdpdCAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0VNQUlMICYmCisJPmluY3JlbWVudGFsICYmCisJZ2l0IGFkZCBpbmNyZW1lbnRhbCAmJgorCWdpdCBjb21taXQgLW0gInN0ZXAgMCIgJiYKKwlwcmludGYgInBhcnRpYWwiID4+aW5jcmVtZW50YWwgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzdGVwIDAuNSIgJiYKKwllY2hvID4+aW5jcmVtZW50YWwgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzdGVwIDEiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBlbXB0eScgJworCWNoZWNrX2NvdW50IC1oIEhFQUReXiAtZiBpbmNyZW1lbnRhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAwIGVtcHR5JyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwwIGluY3JlbWVudGFsIEhFQUReXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAxIGVtcHR5JyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwxIGluY3JlbWVudGFsIEhFQUReXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAyIGVtcHR5JyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwyIGluY3JlbWVudGFsIEhFQUReXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBoYWxmJyAnCisJY2hlY2tfY291bnQgLWggSEVBRF4gLWYgaW5jcmVtZW50YWwgSSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDAgaGFsZicgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMCBpbmNyZW1lbnRhbCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAxIGhhbGYnICcKKwljaGVja19jb3VudCAtaCBIRUFEXiAtZiBpbmNyZW1lbnRhbCAtTDEgSSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDIgaGFsZicgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMiBpbmNyZW1lbnRhbCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAzIGhhbGYnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDMgaW5jcmVtZW50YWwgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgZnVsbCcgJworCWNoZWNrX2NvdW50IC1mIGluY3JlbWVudGFsIEkgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAwIGZ1bGwnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDAgaW5jcmVtZW50YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgMSBmdWxsJyAnCisJY2hlY2tfY291bnQgLWYgaW5jcmVtZW50YWwgLUwxIEkgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAyIGZ1bGwnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDIgaW5jcmVtZW50YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgMyBmdWxsJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwzIGluY3JlbWVudGFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLCsnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDEsKyBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsLScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMSwtIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCAobm9uLW51bWVyaWMgWCknICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTFggZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLFkgKG5vbi1udW1lcmljIFkpJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwxLFkgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLCtOIChub24tbnVtZXJpYyBOKScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMSwrTiBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsLU4gKG5vbi1udW1lcmljIE4pJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwxLC1OIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgLF4vUkUvJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwxLF4vOTkvIGZpbGUKKycKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50LnNlZCBiL3QvY2hhaW5saW50LnNlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGRmNDBlCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQuc2VkCkBAIC0wLDAgKzEsMzY5IEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERldGVjdCBicm9rZW4gJiYtY2hhaW5zIGluIHRlc3RzLgorIworIyBBdCBwcmVzZW50LCBvbmx5ICYmLWNoYWlucyBpbiBzdWJzaGVsbHMgYXJlIGV4YW1pbmVkIGJ5IHRoaXMgbGludGVyOworIyB0b3AtbGV2ZWwgJiYtY2hhaW5zIGFyZSBpbnN0ZWFkIGNoZWNrZWQgZGlyZWN0bHkgYnkgdGhlIHRlc3QgZnJhbWV3b3JrLiBMaWtlCisjIHRoZSB0b3AtbGV2ZWwgJiYtY2hhaW4gbGludGVyLCB0aGUgc3Vic2hlbGwgbGludGVyIChpbnRlbnRpb25hbGx5KSBkb2VzIG5vdAorIyBjaGVjayAmJi1jaGFpbnMgd2l0aGluIHsuLi59IGJsb2Nrcy4KKyMKKyMgQ2hlY2tpbmcgZm9yICYmLWNoYWluIGJyZWFrYWdlIGlzIGRvbmUgbGluZS1ieS1saW5lIGJ5IHB1cmUgdGV4dHVhbAorIyBpbnNwZWN0aW9uLgorIworIyBJbmNvbXBsZXRlIGxpbmVzICh0aG9zZSBlbmRpbmcgd2l0aCAiXCIpIGFyZSBzdGl0Y2hlZCB0b2dldGhlciB3aXRoIGZvbGxvd2luZworIyBsaW5lcyB0byBzaW1wbGlmeSBwcm9jZXNzaW5nLCBwYXJ0aWN1bGFybHkgb2YgIm9uZS1saW5lciIgc3RhdGVtZW50cy4KKyMgVG9wLWxldmVsIGhlcmUtZG9jcyBhcmUgc3dhbGxvd2VkIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlcyB3aXRoaW4gdGhlCisjIGhlcmUtZG9jIGJvZHksIGFsdGhvdWdoIHRoZSBzdGF0ZW1lbnQgdG8gd2hpY2ggdGhlIGhlcmUtZG9jIGlzIGF0dGFjaGVkIGlzCisjIHJldGFpbmVkLgorIworIyBIZXVyaXN0aWNzIGFyZSB1c2VkIHRvIGRldGVjdCBlbmQtb2Ytc3Vic2hlbGwgd2hlbiB0aGUgY2xvc2luZyAiKSIgaXMgY3VkZGxlZAorIyB3aXRoIHRoZSBmaW5hbCBzdWJzaGVsbCBzdGF0ZW1lbnQgb24gdGhlIHNhbWUgbGluZToKKyMKKyMgICAgKGNkIGZvbyAmJgorIyAgICAgICAgYmFyKQorIworIyBpbiBvcmRlciB0byBhdm9pZCBtaXNpbnRlcnByZXRpbmcgdGhlICIpIiBpbiBjb25zdHJ1Y3RzIHN1Y2ggYXMgIng9JCguLi4pIgorIyBhbmQgImNhc2UgJHggaW4gKikiIGFzIGVuZGluZyB0aGUgc3Vic2hlbGwuCisjCisjIExpbmVzIG1pc3NpbmcgYSBmaW5hbCAiJiYiIGFyZSBmbGFnZ2VkIHdpdGggIj8hQU1QPyEiLCBhbmQgbGluZXMgd2hpY2ggY2hhaW4KKyMgY29tbWFuZHMgd2l0aCAiOyIgaW50ZXJuYWxseSByYXRoZXIgdGhhbiAiJiYiIGFyZSBmbGFnZ2VkICI/IVNFTUk/ISIuIEEgbGluZQorIyBtYXkgYmUgZmxhZ2dlZCBmb3IgYm90aCB2aW9sYXRpb25zLgorIworIyBEZXRlY3Rpb24gb2YgYSBtaXNzaW5nICYmLWxpbmsgaW4gYSBtdWx0aS1saW5lIHN1YnNoZWxsIGlzIGNvbXBsaWNhdGVkIGJ5IHRoZQorIyBmYWN0IHRoYXQgdGhlIGxhc3Qgc3RhdGVtZW50IGJlZm9yZSB0aGUgY2xvc2luZyAiKSIgbXVzdCBub3QgZW5kIHdpdGggIiYmIi4KKyMgU2luY2UgcHJvY2Vzc2luZyBpcyBsaW5lLWJ5LWxpbmUsIGl0IGlzIG5vdCBrbm93biB3aGV0aGVyIGEgbWlzc2luZyAiJiYiIGlzCisjIGxlZ2l0aW1hdGUgb3Igbm90IHVudGlsIHRoZSBfbmV4dF8gbGluZSBpcyBzZWVuLiBUbyBhY2NvbW1vZGF0ZSB0aGlzLCB3aXRoaW4KKyMgbXVsdGktbGluZSBzdWJzaGVsbHMsIGVhY2ggbGluZSBpcyBzdG9yZWQgaW4gc2VkJ3MgImhvbGQiIGFyZWEgdW50aWwgYWZ0ZXIKKyMgdGhlIG5leHQgbGluZSBpcyBzZWVuIGFuZCBwcm9jZXNzZWQuIElmIHRoZSBuZXh0IGxpbmUgaXMgYSBzdGFuZC1hbG9uZSAiKSIsCisjIHRoZW4gYSBtaXNzaW5nICImJiIgb24gdGhlIHByZXZpb3VzIGxpbmUgaXMgbGVnaXRpbWF0ZTsgb3RoZXJ3aXNlIGEgbWlzc2luZworIyAiJiYiIGlzIGEgYnJlYWsgaW4gdGhlICYmLWNoYWluLgorIworIyAgICAoCisjICAgICAgICAgY2QgZm9vICYmCisjICAgICAgICAgYmFyCisjICAgICkKKyMKKyMgSW4gcHJhY3RpY2FsIHRlcm1zLCB3aGVuICJiYXIiIGlzIGVuY291bnRlcmVkLCBpdCBpcyBmbGFnZ2VkIHdpdGggIj8hQU1QPyEiLAorIyBidXQgd2hlbiB0aGUgc3RhbmQtYWxvbmUgIikiIGxpbmUgaXMgc2VlbiB3aGljaCBjbG9zZXMgdGhlIHN1YnNoZWxsLCB0aGUKKyMgIj8hQU1QPyEiIHZpb2xhdGlvbiBpcyByZW1vdmVkIGZyb20gdGhlICJiYXIiIGxpbmUgKHJldHJpZXZlZCBmcm9tIHRoZSAiaG9sZCIKKyMgYXJlYSkgc2luY2UgdGhlIGZpbmFsIHN0YXRlbWVudCBvZiBhIHN1YnNoZWxsIG11c3Qgbm90IGVuZCB3aXRoICImJiIuIFRoZQorIyBmaW5hbCBsaW5lIG9mIGEgc3Vic2hlbGwgbWF5IHN0aWxsIGJyZWFrIHRoZSAmJi1jaGFpbiBieSB1c2luZyAiOyIgaW50ZXJuYWxseQorIyB0byBjaGFpbiBjb21tYW5kcyB0b2dldGhlciByYXRoZXIgdGhhbiAiJiYiLCBzbyAiPyFTRU1JPyEiIGlzIG5ldmVyIHJlbW92ZWQKKyMgZnJvbSBhIGxpbmUgKGV2ZW4gdGhvdWdoICI/IUFNUD8hIiBtaWdodCBiZSkuCisjCisjIENhcmUgaXMgdGFrZW4gdG8gcmVjb2duaXplIHRoZSBsYXN0IF9zdGF0ZW1lbnRfIG9mIGEgbXVsdGktbGluZSBzdWJzaGVsbCwgbm90CisjIG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHRleHR1YWwgX2xpbmVfIHdpdGhpbiB0aGUgc3Vic2hlbGwsIHNpbmNlICYmLWNoYWluaW5nCisjIGFwcGxpZXMgdG8gc3RhdGVtZW50cywgbm90IHRvIGxpbmVzLiBDb25zZXF1ZW50bHksIGJsYW5rIGxpbmVzLCBjb21tZW50CisjIGxpbmVzLCBhbmQgaGVyZS1kb2NzIGFyZSBzd2FsbG93ZWQgKGJ1dCBub3QgdGhlIGNvbW1hbmQgdG8gd2hpY2ggdGhlIGhlcmUtZG9jCisjIGlzIGF0dGFjaGVkKSwgbGVhdmluZyB0aGUgbGFzdCBzdGF0ZW1lbnQgaW4gdGhlICJob2xkIiBhcmVhLCBub3QgdGhlIGxhc3QKKyMgbGluZSwgdGh1cyBzaW1wbGlmeWluZyAmJi1saW5rIGNoZWNraW5nLgorIworIyBUaGUgZmluYWwgc3RhdGVtZW50IGJlZm9yZSAiZG9uZSIgaW4gZm9yLSBhbmQgd2hpbGUtbG9vcHMsIGFuZCBiZWZvcmUgImVsaWYiLAorIyAiZWxzZSIsIGFuZCAiZmkiIGluIGlmLXRoZW4tZWxzZSBsaWtld2lzZSBtdXN0IG5vdCBlbmQgd2l0aCAiJiYiLCB0aHVzCisjIHJlY2VpdmVzIHNpbWlsYXIgdHJlYXRtZW50LgorIworIyBTd2FsbG93aW5nIGhlcmUtZG9jcyB3aXRoIGFyYml0cmFyeSB0YWdzIHJlcXVpcmVzIGEgYml0IG9mIGZpbmVzc2UuIFdoZW4gYQorIyBsaW5lIHN1Y2ggYXMgImNhdCA8PEVPRiA+b3V0IiBpcyBzZWVuLCB0aGUgaGVyZS1kb2MgdGFnIGlzIG1vdmVkIHRvIHRoZSBmcm9udAorIyBvZiB0aGUgbGluZSBlbmNsb3NlZCBpbiBhbmdsZSBicmFja2V0cyBhcyBhIHNlbnRpbmVsLCBnaXZpbmcgIjxFT0Y+Y2F0ID5vdXQiLgorIyBBcyBlYWNoIHN1YnNlcXVlbnQgbGluZSBpcyByZWFkLCBpdCBpcyBhcHBlbmRlZCB0byB0aGUgdGFyZ2V0IGxpbmUgYW5kIGEKKyMgKHdoaXRlc3BhY2UtbG9vc2UpIGJhY2stcmVmZXJlbmNlIG1hdGNoIC9ePCguKik+XG5cMSQvIGlzIGF0dGVtcHRlZCB0byBzZWUgaWYKKyMgdGhlIGNvbnRlbnQgaW5zaWRlICI8Li4uPiIgbWF0Y2hlcyB0aGUgZW50aXJldHkgb2YgdGhlIG5ld2x5LXJlYWQgbGluZS4gRm9yCisjIGluc3RhbmNlLCBpZiB0aGUgbmV4dCBsaW5lIHJlYWQgaXMgInNvbWUgZGF0YSIsIHdoZW4gY29uY2F0ZW5hdGVkIHdpdGggdGhlCisjIHRhcmdldCBsaW5lLCBpdCBiZWNvbWVzICI8RU9GPmNhdCA+b3V0XG5zb21lIGRhdGEiLCBhbmQgYSBtYXRjaCBpcyBhdHRlbXB0ZWQKKyMgdG8gc2VlIGlmICJFT0YiIG1hdGNoZXMgInNvbWUgZGF0YSIuIFNpbmNlIGl0IGRvZXNuJ3QsIHRoZSBuZXh0IGxpbmUgaXMKKyMgYXR0ZW1wdGVkLiBXaGVuIGEgbGluZSBjb25zaXN0aW5nIG9mIG9ubHkgIkVPRiIgKGFuZCBwb3NzaWJsZSB3aGl0ZXNwYWNlKSBpcworIyBlbmNvdW50ZXJlZCwgaXQgaXMgYXBwZW5kZWQgdG8gdGhlIHRhcmdldCBsaW5lIGdpdmluZyAiPEVPRj5jYXQgPm91dFxuRU9GIiwKKyMgaW4gd2hpY2ggY2FzZSB0aGUgIkVPRiIgaW5zaWRlICI8Li4uPiIgZG9lcyBtYXRjaCB0aGUgdGV4dCBmb2xsb3dpbmcgdGhlCisjIG5ld2xpbmUsIHRodXMgdGhlIGNsb3NpbmcgaGVyZS1kb2MgdGFnIGhhcyBiZWVuIGZvdW5kLiBUaGUgY2xvc2luZyB0YWcgbGluZQorIyBhbmQgdGhlICI8Li4uPiIgcHJlZml4IG9uIHRoZSB0YXJnZXQgbGluZSBhcmUgdGhlbiBkaXNjYXJkZWQsIGxlYXZpbmcganVzdAorIyB0aGUgdGFyZ2V0IGxpbmUgImNhdCA+b3V0Ii4KKyMKKyMgVG8gZmFjaWxpdGF0ZSByZWdyZXNzaW9uIHRlc3RpbmcgKGFuZCBtYW51YWwgZGVidWdnaW5nKSwgYSAiPiIgYW5ub3RhdGlvbiBpcworIyBhcHBsaWVkIHRvIHRoZSBsaW5lIGNvbnRhaW5pbmcgIikiIHdoaWNoIGNsb3NlcyBhIHN1YnNoZWxsLCAiPj4iIHRvIGEgbGluZQorIyBjbG9zaW5nIGEgbmVzdGVkIHN1YnNoZWxsLCBhbmQgIj4+PiIgdG8gYSBsaW5lIGNsb3NpbmcgYm90aCBhdCBvbmNlLiBUaGlzCisjIG1ha2VzIGl0IGVhc3kgdG8gZGV0ZWN0IHdoZXRoZXIgdGhlIGhldXJpc3RpY3MgY29ycmVjdGx5IGlkZW50aWZ5CisjIGVuZC1vZi1zdWJzaGVsbC4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBpbmNvbXBsZXRlIGxpbmUgLS0gc2x1cnAgdXAgbmV4dCBsaW5lCis6c3F1YXNoCisvXFwkLyB7CisJTgorCXMvXFxcbi8vCisJYnNxdWFzaAorfQorCisjIGhlcmUtZG9jIC0tIHN3YWxsb3cgaXQgdG8gYXZvaWQgZmFsc2UgaGl0cyB3aXRoaW4gaXRzIGJvZHkgKGJ1dCBrZWVwIHRoZQorIyBjb21tYW5kIHRvIHdoaWNoIGl0IHdhcyBhdHRhY2hlZCkKKy88PFsgCV0qWy1cXCciXSpbQS1aYS16MC05X10vIHsKKwlzL15cKC4qXCk8PFsgCV0qWy1cXCciXSpcKFtBLVphLXowLTlfXVtBLVphLXowLTlfXSpcKVsnIl0qLzxcMj5cMTw8LworCXMvWyAJXSo8PC8vCisJOmhlcmVkCisJTgorCS9ePFwoW14+XSpcKT4uKlxuWyAJXSpcMVsgCV0qJC8heworCQlzL1xuLiokLy8KKwkJYmhlcmVkCisJfQorCXMvXjxbXj5dKj4vLworCXMvXG4uKiQvLworfQorCisjIG9uZS1saW5lciAiKC4uLikgJiYiCisvXlsgCV0qISpbIAldKiguLiopWyAJXSomJlsgCV0qJC9ib25lbGluZQorCisjIHNhbWUgYXMgYWJvdmUgYnV0IHdpdGhvdXQgdHJhaWxpbmcgIiYmIgorL15bIAldKiEqWyAJXSooLi4qKVsgCV0qJC9ib25lbGluZQorCisjIG9uZS1saW5lciAiKC4uLikgPngiIChvciAiMj54IiBvciAiPHgiIG9yICJ8eCIgb3IgIiYiCisvXlsgCV0qISpbIAldKiguLiopWyAJXSpbMC05XSpbPD58Jl0vYm9uZWxpbmUKKworIyBtdWx0aS1saW5lICIoLi4uXG4uLi4pIgorL15bIAldKigvYnN1YnNoZWxsCisKKyMgaW5ub2N1b3VzIGxpbmUgLS0gcHJpbnQgaXQgYW5kIGFkdmFuY2UgdG8gbmV4dCBsaW5lCitiCisKKyMgZm91bmQgb25lLWxpbmVyICIoLi4uKSIgLS0gbWFyayBzdXNwZWN0IGlmIGl0IHVzZXMgIjsiIGludGVybmFsbHkgcmF0aGVyIHRoYW4KKyMgIiYmIiAoYnV0IG5vdCAiOyIgaW4gYSBzdHJpbmcpCis6b25lbGluZQorLzsveworCS8iW14iXSo7W14iXSoiLyFzL14vPyFTRU1JPyEvCit9CitiCisKKzpzdWJzaGVsbAorIyBiYXJlICIoIiBsaW5lPyAtLSBzdGFzaCBmb3IgbGF0ZXIgcHJpbnRpbmcKKy9eWyAJXSooWwldKiQvIHsKKwloCisJYm5leHRsaW5lCit9CisjICIoLi4uIiBsaW5lIC0tIHNwbGl0IG9mZiBhbmQgc3Rhc2ggIigiLCB0aGVuIHByb2Nlc3MgIi4uLiIgYXMgaXRzIG93biBsaW5lCit4CitzLy4qLygvCit4CitzLygvLworYnNsdXJwCisKKzpuZXh0bGluZQorTgorcy8uKlxuLy8KKworOnNsdXJwCisjIGluY29tcGxldGUgbGluZSAiLi4uXCIKKy9cXCQvYmljbXBsdGUKKyMgbXVsdGktbGluZSBxdW90ZWQgc3RyaW5nICIuLi5cbi4uLiI/CisvIi9iZHFzdHJpbmcKKyMgbXVsdGktbGluZSBxdW90ZWQgc3RyaW5nICcuLi5cbi4uLic/IChidXQgbm90IGNvbnRyYWN0aW9uIGluIHN0cmluZyAiaXQncyIpCisvJy97CisJLyJbXiciXSonW14nIl0qIi8hYnNxc3RyaW5nCit9Cis6Zm9sZGVkCisjIGhlcmUtZG9jIC0tIHN3YWxsb3cgaXQKKy88PFsgCV0qWy1cXCciXSpbQS1aYS16MC05X10vYmhlcmVkb2MKKyMgY29tbWVudCBvciBlbXB0eSBsaW5lIC0tIGRpc2NhcmQgc2luY2UgZmluYWwgbm9uLWNvbW1lbnQsIG5vbi1lbXB0eSBsaW5lCisjIGJlZm9yZSBjbG9zaW5nICIpIiwgImRvbmUiLCAiZWxzaWYiLCAiZWxzZSIsIG9yICJmaSIgd2lsbCBuZWVkIHRvIGJlCisjIHJlLXZpc2l0ZWQgdG8gZHJvcCAic3VzcGVjdCIgbWFya2luZyBzaW5jZSBmaW5hbCBsaW5lIG9mIHRob3NlIGNvbnN0cnVjdHMKKyMgbGVnaXRpbWF0ZWx5IGxhY2tzICImJiIsIHNvICJzdXNwZWN0IiBtYXJrIG11c3QgYmUgcmVtb3ZlZAorL15bIAldKiMvYm5leHRsaW5lCisvXlsgCV0qJC9ibmV4dGxpbmUKKyMgaW4tbGluZSBjb21tZW50IC0tIHN0cmlwIGl0IChidXQgbm90ICIjIiBpbiBhIHN0cmluZywgQmFzaCAkeyMuLi59IGFycmF5CisjIGxlbmd0aCwgb3IgUGVyZm9yY2UgIi8vZGVwb3QvcGF0aCM0MiIgcmV2aXNpb24gaW4gZmlsZXNwZWMpCisvWyAJXSMveworCS8iW14iXSojW14iXSoiLyFzL1sgCV0jLiokLy8KK30KKyMgb25lLWxpbmVyICJjYXNlIC4uLiBlc2FjIgorL15bIAldKmNhc2VbIAldKi4uKmVzYWMvYmNoa2NobgorIyBtdWx0aS1saW5lICJjYXNlIC4uLiBlc2FjIgorL15bIAldKmNhc2VbIAldLi4qWyAJXWluL2JjYXNlCisjIG11bHRpLWxpbmUgImZvciAuLi4gZG9uZSIgb3IgIndoaWxlIC4uLiBkb25lIgorL15bIAldKmZvclsgCV0uLipbIAldaW4vYmNvbnRpbnVlCisvXlsgCV0qd2hpbGVbIAldL2Jjb250aW51ZQorL15bIAldKmRvWyAJXS9iY29udGludWUKKy9eWyAJXSpkb1sgCV0qJC9iY29udGludWUKKy87WyAJXSpkby9iY29udGludWUKKy9eWyAJXSpkb25lWyAJXSomJlsgCV0qJC9iZG9uZQorL15bIAldKmRvbmVbIAldKiQvYmRvbmUKKy9eWyAJXSpkb25lWyAJXSpbPD58XS9iZG9uZQorL15bIAldKmRvbmVbIAldKikvYmRvbmUKKy98fFsgCV0qZXhpdFsgCV0vYmNvbnRpbnVlCisvfHxbIAldKmV4aXRbIAldKiQvYmNvbnRpbnVlCisjIG11bHRpLWxpbmUgImlmLi4uZWxzaWYuLi5lbHNlLi4uZmkiCisvXlsgCV0qaWZbIAldL2Jjb250aW51ZQorL15bIAldKnRoZW5bIAldL2Jjb250aW51ZQorL15bIAldKnRoZW5bIAldKiQvYmNvbnRpbnVlCisvO1sgCV0qdGhlbi9iY29udGludWUKKy9eWyAJXSplbGlmWyAJXS9iZWxzZQorL15bIAldKmVsaWZbIAldKiQvYmVsc2UKKy9eWyAJXSplbHNlWyAJXS9iZWxzZQorL15bIAldKmVsc2VbIAldKiQvYmVsc2UKKy9eWyAJXSpmaVsgCV0qJiZbIAldKiQvYmRvbmUKKy9eWyAJXSpmaVsgCV0qJC9iZG9uZQorL15bIAldKmZpWyAJXSpbPD58XS9iZG9uZQorL15bIAldKmZpWyAJXSopL2Jkb25lCisjIG5lc3RlZCBvbmUtbGluZXIgIiguLi4pICYmIgorL15bIAldKiguKilbIAldKiYmWyAJXSokL2JjaGtjaG4KKyMgbmVzdGVkIG9uZS1saW5lciAiKC4uLikiCisvXlsgCV0qKC4qKVsgCV0qJC9iY2hrY2huCisjIG5lc3RlZCBvbmUtbGluZXIgIiguLi4pID54IiAob3IgIjI+eCIgb3IgIjx4IiBvciAifHgiKQorL15bIAldKiguKilbIAldKlswLTldKls8PnxdL2JjaGtjaG4KKyMgbmVzdGVkIG11bHRpLWxpbmUgIiguLi5cbi4uLikiCisvXlsgCV0qKC9ibmVzdAorIyBtdWx0aS1saW5lICJ7Li4uXG4uLi59IgorL15bIAldKnsvYmJsb2NrCisjIGNsb3NpbmcgIikiIG9uIG93biBsaW5lIC0tIGV4aXQgc3Vic2hlbGwKKy9eWyAJXSopL2JjbHNzb2xvCisjICIkKCguLi4pKSIgLS0gYXJpdGhtZXRpYyBleHBhbnNpb247IG5vdCBjbG9zaW5nICIpIgorL1wkKChbXildW14pXSopKVteKV0qJC9iY2hrY2huCisjICIkKC4uLikiIC0tIGNvbW1hbmQgc3Vic3RpdHV0aW9uOyBub3QgY2xvc2luZyAiKSIKKy9cJChbXildW14pXSopW14pXSokL2JjaGtjaG4KKyMgbXVsdGktbGluZSAiJCguLi5cbi4uLikiIC0tIGNvbW1hbmQgc3Vic3RpdHV0aW9uOyB0cmVhdCBhcyBuZXN0ZWQgc3Vic2hlbGwKKy9cJChbXildKiQvYm5lc3QKKyMgIj0oLi4uKSIgLS0gQmFzaCBhcnJheSBhc3NpZ25tZW50OyBub3QgY2xvc2luZyAiKSIKKy89KC9iY2hrY2huCisjIGNsb3NpbmcgIi4uLikgJiYiCisvKVsgCV0qJiZbIAldKiQvYmNsb3NlCisjIGNsb3NpbmcgIi4uLikiCisvKVsgCV0qJC9iY2xvc2UKKyMgY2xvc2luZyAiLi4uKSA+eCIgKG9yICIyPngiIG9yICI8eCIgb3IgInx4IikKKy8pWyAJXSpbPD58XS9iY2xvc2UKKzpjaGtjaG4KKyMgbWFyayBzdXNwZWN0IGlmIGxpbmUgdXNlcyAiOyIgaW50ZXJuYWxseSByYXRoZXIgdGhhbiAiJiYiIChidXQgbm90ICI7IiBpbiBhCisjIHN0cmluZyBhbmQgbm90ICI7OyIgaW4gb25lLWxpbmVyICJjYXNlLi4uZXNhYyIpCisvOy97CisJLzs7LyF7CisJCS8iW14iXSo7W14iXSoiLyFzL14vPyFTRU1JPyEvCisJfQorfQorIyBsaW5lIGVuZHMgd2l0aCBwaXBlICIuLi58IiAtLSB2YWxpZDsgbm90IG1pc3NpbmcgIiYmIgorL3xbIAldKiQvYmNvbnRpbnVlCisjIG1pc3NpbmcgZW5kLW9mLWxpbmUgIiYmIiAtLSBtYXJrIHN1c3BlY3QKKy8mJlsgCV0qJC8hcy9eLz8hQU1QPyEvCis6Y29udGludWUKKyMgcmV0cmlldmUgYW5kIHByaW50IHByZXZpb3VzIGxpbmUKK3gKK24KK2JzbHVycAorCisjIGZvdW5kIGluY29tcGxldGUgbGluZSAiLi4uXCIgLS0gc2x1cnAgdXAgbmV4dCBsaW5lCis6aWNtcGx0ZQorTgorcy9cXFxuLy8KK2JzbHVycAorCisjIGNoZWNrIGZvciBtdWx0aS1saW5lIGRvdWJsZS1xdW90ZWQgc3RyaW5nICIuLi5cbi4uLiIgLS0gZm9sZCB0byBvbmUgbGluZQorOmRxc3RyaW5nCisjIHJlbW92ZSBhbGwgcXVvdGUgcGFpcnMKK3MvIlwoW14iXSpcKSIvQCFcMUAhL2cKKyMgZG9uZSBpZiBubyBkYW5nbGluZyBxdW90ZQorLyIvIWJkcWRvbmUKKyMgb3RoZXJ3aXNlLCBzbHVycCBuZXh0IGxpbmUgYW5kIHRyeSBhZ2FpbgorTgorcy9cbi8vCitiZHFzdHJpbmcKKzpkcWRvbmUKK3MvQCEvIi9nCitiZm9sZGVkCisKKyMgY2hlY2sgZm9yIG11bHRpLWxpbmUgc2luZ2xlLXF1b3RlZCBzdHJpbmcgJy4uLlxuLi4uJyAtLSBmb2xkIHRvIG9uZSBsaW5lCis6c3FzdHJpbmcKKyMgcmVtb3ZlIGFsbCBxdW90ZSBwYWlycworcy8nXChbXiddKlwpJy9AIVwxQCEvZworIyBkb25lIGlmIG5vIGRhbmdsaW5nIHF1b3RlCisvJy8hYnNxZG9uZQorIyBvdGhlcndpc2UsIHNsdXJwIG5leHQgbGluZSBhbmQgdHJ5IGFnYWluCitOCitzL1xuLy8KK2JzcXN0cmluZworOnNxZG9uZQorcy9AIS8nL2cKK2Jmb2xkZWQKKworIyBmb3VuZCBoZXJlLWRvYyAtLSBzd2FsbG93IGl0IHRvIGF2b2lkIGZhbHNlIGhpdHMgd2l0aGluIGl0cyBib2R5IChidXQga2VlcAorIyB0aGUgY29tbWFuZCB0byB3aGljaCBpdCB3YXMgYXR0YWNoZWQpCis6aGVyZWRvYworcy9eXCguKlwpPDxbIAldKlstXFwnIl0qXChbQS1aYS16MC05X11bQS1aYS16MC05X10qXClbJyJdKi88XDI+XDE8PC8KK3MvWyAJXSo8PC8vCis6aGVyZWRzdWIKK04KKy9ePFwoW14+XSpcKT4uKlxuWyAJXSpcMVsgCV0qJC8heworCXMvXG4uKiQvLworCWJoZXJlZHN1YgorfQorcy9ePFtePl0qPi8vCitzL1xuLiokLy8KK2Jmb2xkZWQKKworIyBmb3VuZCAiY2FzZSAuLi4gaW4iIC0tIHBhc3MgdGhyb3VnaCB1bnRvdWNoZWQKKzpjYXNlCit4CituCisvXlsgCV0qZXNhYy9ic2x1cnAKK2JjYXNlCisKKyMgZm91bmQgImVsc2UiIG9yICJlbGlmIiAtLSBkcm9wICJzdXNwZWN0IiBmcm9tIGZpbmFsIGxpbmUgYmVmb3JlICJlbHNlIiBzaW5jZQorIyB0aGF0IGxpbmUgbGVnaXRpbWF0ZWx5IGxhY2tzICImJiIKKzplbHNlCit4CitzLz8hQU1QPyEvLworeAorYmNvbnRpbnVlCisKKyMgZm91bmQgImRvbmUiIGNsb3NpbmcgZm9yLWxvb3Agb3Igd2hpbGUtbG9vcCwgb3IgImZpIiBjbG9zaW5nIGlmLXRoZW4gLS0gZHJvcAorIyAic3VzcGVjdCIgZnJvbSBmaW5hbCBjb250YWluZWQgbGluZSBzaW5jZSB0aGF0IGxpbmUgbGVnaXRpbWF0ZWx5IGxhY2tzICImJiIKKzpkb25lCit4CitzLz8hQU1QPyEvLworeAorIyBpcyAnZG9uZScgb3IgJ2ZpJyBjdWRkbGVkIHdpdGggIikiIHRvIGNsb3NlIHN1YnNoZWxsPworL2RvbmUuKikvYmNsb3NlCisvZmkuKikvYmNsb3NlCitiY2hrY2huCisKKyMgZm91bmQgbmVzdGVkIG11bHRpLWxpbmUgIiguLi5cbi4uLikiIC0tIHBhc3MgdGhyb3VnaCB1bnRvdWNoZWQKKzpuZXN0Cit4Cis6bnN0c2x1cnAKK24KKyMgY2xvc2luZyAiKSIgb24gb3duIGxpbmUgLS0gc3RvcCBuZXN0ZWQgc2x1cnAKKy9eWyAJXSopL2Juc3RjbG9zZQorIyBjb21tZW50IC0tIG5vdCBjbG9zaW5nICIpIiBpZiBpbiBjb21tZW50CisvXlsgCV0qIy9ibnN0Y250CisjICIkKCguLi4pKSIgLS0gYXJpdGhtZXRpYyBleHBhbnNpb247IG5vdCBjbG9zaW5nICIpIgorL1wkKChbXildW14pXSopKVteKV0qJC9ibnN0Y250CisjICIkKC4uLikiIC0tIGNvbW1hbmQgc3Vic3RpdHV0aW9uOyBub3QgY2xvc2luZyAiKSIKKy9cJChbXildW14pXSopW14pXSokL2Juc3RjbnQKKyMgY2xvc2luZyAiLi4uKSIgLS0gc3RvcCBuZXN0ZWQgc2x1cnAKKy8pL2Juc3RjbG9zZQorOm5zdGNudAoreAorYm5zdHNsdXJwCis6bnN0Y2xvc2UKK3MvXi8+Pi8KKyMgaXMgaXQgIikpIiB3aGljaCBjbG9zZXMgbmVzdGVkIGFuZCBwYXJlbnQgc3Vic2hlbGxzPworLylbIAldKikvYnNsdXJwCitiY2hrY2huCisKKyMgZm91bmQgbXVsdGktbGluZSAiey4uLlxuLi4ufSIgYmxvY2sgLS0gcGFzcyB0aHJvdWdoIHVudG91Y2hlZAorOmJsb2NrCit4CituCisjIGNsb3NpbmcgIn0iIC0tIHN0b3AgYmxvY2sgc2x1cnAKKy99L2JjaGtjaG4KK2JibG9jaworCisjIGZvdW5kIGNsb3NpbmcgIikiIG9uIG93biBsaW5lIC0tIGRyb3AgInN1c3BlY3QiIGZyb20gZmluYWwgbGluZSBvZiBzdWJzaGVsbAorIyBzaW5jZSB0aGF0IGxpbmUgbGVnaXRpbWF0ZWx5IGxhY2tzICImJiIgYW5kIGV4aXQgc3Vic2hlbGwgbG9vcAorOmNsc3NvbG8KK3gKK3MvPyFBTVA/IS8vCitwCit4CitzL14vPi8KK2IKKworIyBmb3VuZCBjbG9zaW5nICIuLi4pIiAtLSBleGl0IHN1YnNoZWxsIGxvb3AKKzpjbG9zZQoreAorcAoreAorcy9eLz4vCitiCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9hcml0aG1ldGljLWV4cGFuc2lvbi5leHBlY3QgYi90L2NoYWlubGludC9hcml0aG1ldGljLWV4cGFuc2lvbi5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk0NTdkMwotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2FyaXRobWV0aWMtZXhwYW5zaW9uLmV4cGVjdApAQCAtMCwwICsxLDkgQEAKKygKKwlmb28gJiYKKwliYXI9JCgoNDIgKyAxKSkgJiYKKwliYXoKKz4pICYmCisoCis/IUFNUD8hCWJhcj0kKCg0MiArIDEpKQorCWJhegorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2FyaXRobWV0aWMtZXhwYW5zaW9uLnRlc3QgYi90L2NoYWlubGludC9hcml0aG1ldGljLWV4cGFuc2lvbi50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MjA2OTYKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9hcml0aG1ldGljLWV4cGFuc2lvbi50ZXN0CkBAIC0wLDAgKzEsMTEgQEAKKygKKwlmb28gJiYKKyMgTElOVDogY2xvc2luZyAiKSIgb2YgJCgoLi4uKSkgbm90IG1pc2ludGVycHJldGVkIGFzIHN1YnNoZWxsLWNsb3NpbmcgIikiCisJYmFyPSQoKDQyICsgMSkpICYmCisJYmF6CispICYmCisoCisjIExJTlQ6IG1pc3NpbmcgIiYmIiBvbiAkKCguLi4pKQorCWJhcj0kKCg0MiArIDEpKQorCWJhegorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvYmFzaC1hcnJheS5leHBlY3QgYi90L2NoYWlubGludC9iYXNoLWFycmF5LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGE4MzBkCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvYmFzaC1hcnJheS5leHBlY3QKQEAgLTAsMCArMSwxMCBAQAorKAorCWZvbyAmJgorCWJhcj0oZ3VtYm8gc3R1bWJvIHd1bWJvKSAmJgorCWJhegorPikgJiYKKygKKwlmb28gJiYKKwliYXI9JHsjYmFyW0BdfSAmJgorCWJhegorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2Jhc2gtYXJyYXkudGVzdCBiL3QvY2hhaW5saW50L2Jhc2gtYXJyYXkudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmJiYjc3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvYmFzaC1hcnJheS50ZXN0CkBAIC0wLDAgKzEsMTIgQEAKKygKKwlmb28gJiYKKyMgTElOVDogIikiIGluIEJhc2ggYXJyYXkgYXNzaWdubWVudCBub3QgbWlzaW50ZXJwcmV0ZWQgYXMgc3Vic2hlbGwtY2xvc2luZyAiKSIKKwliYXI9KGd1bWJvIHN0dW1ibyB3dW1ibykgJiYKKwliYXoKKykgJiYKKygKKwlmb28gJiYKKyMgTElOVDogQmFzaCBhcnJheSBsZW5ndGggb3BlcmF0b3Igbm90IG1pc2ludGVycHJldGVkIGFzIGNvbW1lbnQKKwliYXI9JHsjYmFyW0BdfSAmJgorCWJhegorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvYmxhbmstbGluZS5leHBlY3QgYi90L2NoYWlubGludC9ibGFuay1saW5lLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmU5MzllCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvYmxhbmstbGluZS5leHBlY3QKQEAgLTAsMCArMSw0IEBACisoCisJbm90aGluZyAmJgorCXNvbWV0aGluZworPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2JsYW5rLWxpbmUudGVzdCBiL3QvY2hhaW5saW50L2JsYW5rLWxpbmUudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmRkMTQzCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvYmxhbmstbGluZS50ZXN0CkBAIC0wLDAgKzEsMTAgQEAKKygKKworCW5vdGhpbmcgJiYKKworCXNvbWV0aGluZworIyBMSU5UOiBzd2FsbG93IGJsYW5rIGxpbmVzIHNpbmNlIGZpbmFsIF9zdGF0ZW1lbnRfIGJlZm9yZSBzdWJzaGVsbCBlbmQgaXMKKyMgTElOVDogc2lnbmlmaWNhbnQgdG8gIiYmIi1jaGVjaywgbm90IGZpbmFsIF9saW5lXyAod2hpY2ggbWlnaHQgYmUgYmxhbmspCisKKworKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvYmxvY2suZXhwZWN0IGIvdC9jaGFpbmxpbnQvYmxvY2suZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZDdlODkKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9ibG9jay5leHBlY3QKQEAgLTAsMCArMSwxMiBAQAorKAorCWZvbyAmJgorCXsKKwkJZWNobyBhCisJCWVjaG8gYgorCX0gJiYKKwliYXIgJiYKKwl7CisJCWVjaG8gYworPyFBTVA/IQl9CisJYmF6Cis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvYmxvY2sudGVzdCBiL3QvY2hhaW5saW50L2Jsb2NrLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1OTE1MQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2Jsb2NrLnRlc3QKQEAgLTAsMCArMSwxNSBAQAorKAorIyBMSU5UOiBtaXNzaW5nICImJiIgaW4gYmxvY2sgbm90IGN1cnJlbnRseSBkZXRlY3RlZCAoZm9yIGNvbnNpc3RlbmN5IHdpdGgKKyMgTElOVDogLS1jaGFpbi1saW50IGF0IHRvcCBsZXZlbCBhbmQgdG8gcHJvdmlkZSBlc2NhcGUgaGF0Y2ggaWYgbmVlZGVkKQorCWZvbyAmJgorCXsKKwkJZWNobyBhCisJCWVjaG8gYgorCX0gJiYKKwliYXIgJiYKKyMgTElOVDogbWlzc2luZyAiJiYiIGF0IGNsb3NpbmcgIn0iCisJeworCQllY2hvIGMKKwl9CisJYmF6CispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9icm9rZW4tY2hhaW4uZXhwZWN0IGIvdC9jaGFpbmxpbnQvYnJva2VuLWNoYWluLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWIwZjQyCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvYnJva2VuLWNoYWluLmV4cGVjdApAQCAtMCwwICsxLDYgQEAKKygKKwlmb28gJiYKKz8hQU1QPyEJYmFyCisJYmF6ICYmCisJd29wCis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvYnJva2VuLWNoYWluLnRlc3QgYi90L2NoYWlubGludC9icm9rZW4tY2hhaW4udGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2M2N2I2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvYnJva2VuLWNoYWluLnRlc3QKQEAgLTAsMCArMSw4IEBACisoCisJZm9vICYmCisjIExJTlQ6IG1pc3NpbmcgIiYmIiBmcm9tICdiYXInCisJYmFyCisJYmF6ICYmCisjIExJTlQ6IGZpbmFsIHN0YXRlbWVudCBiZWZvcmUgY2xvc2luZyAiKSIgbGVnaXRpbWF0ZWx5IGxhY2tzICImJiIKKwl3b3AKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2Nhc2UuZXhwZWN0IGIvdC9jaGFpbmxpbnQvY2FzZS5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFmMTIxZgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2Nhc2UuZXhwZWN0CkBAIC0wLDAgKzEsMTkgQEAKKygKKwljYXNlICIkeCIgaW4KKwl4KSBmb28gOzsKKwkqKSBiYXIgOzsKKwllc2FjICYmCisJZm9vYmFyCis+KSAmJgorKAorCWNhc2UgIiR4IiBpbgorCXgpIGZvbyA7OworCSopIGJhciA7OworPyFBTVA/IQllc2FjCisJZm9vYmFyCis+KSAmJgorKAorCWNhc2UgIiR4IiBpbiAxKSB0cnVlOzsgZXNhYyAmJgorPyFBTVA/IQljYXNlICIkeSIgaW4gMikgZmFsc2U7OyBlc2FjCisJZm9vYmFyCis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvY2FzZS50ZXN0IGIvdC9jaGFpbmxpbnQvY2FzZS50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZjZmZjcKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9jYXNlLnRlc3QKQEAgLTAsMCArMSwyMyBAQAorKAorIyBMSU5UOiAiLi4uKSIgYXJtcyBpbiAnY2FzZScgbm90IG1pc2ludGVycHJldGVkIGFzIHN1YnNoZWxsLWNsb3NpbmcgIikiCisJY2FzZSAiJHgiIGluCisJeCkgZm9vIDs7CisJKikgYmFyIDs7CisJZXNhYyAmJgorCWZvb2JhcgorKSAmJgorKAorIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJ2VzYWMnCisJY2FzZSAiJHgiIGluCisJeCkgZm9vIDs7CisJKikgYmFyIDs7CisJZXNhYworCWZvb2JhcgorKSAmJgorKAorIyBMSU5UOiAiLi4uKSIgYXJtIGluIG9uZS1saW5lciAnY2FzZScgbm90IG1pc2ludGVycHJldGVkIGFzIGNsb3NpbmcgIikiCisJY2FzZSAiJHgiIGluIDEpIHRydWU7OyBlc2FjICYmCisjIExJTlQ6IHNhbWUgYnV0IG1pc3NpbmcgIiYmIgorCWNhc2UgIiR5IiBpbiAyKSBmYWxzZTs7IGVzYWMKKwlmb29iYXIKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2Nsb3NlLW5lc3RlZC1hbmQtcGFyZW50LXRvZ2V0aGVyLmV4cGVjdCBiL3QvY2hhaW5saW50L2Nsb3NlLW5lc3RlZC1hbmQtcGFyZW50LXRvZ2V0aGVyLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTkxMGY5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvY2xvc2UtbmVzdGVkLWFuZC1wYXJlbnQtdG9nZXRoZXIuZXhwZWN0CkBAIC0wLDAgKzEsNCBAQAorKAorY2QgZm9vICYmCisJKGJhciAmJgorPj4+CQliYXopKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvY2xvc2UtbmVzdGVkLWFuZC1wYXJlbnQtdG9nZXRoZXIudGVzdCBiL3QvY2hhaW5saW50L2Nsb3NlLW5lc3RlZC1hbmQtcGFyZW50LXRvZ2V0aGVyLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkNDgyZgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2Nsb3NlLW5lc3RlZC1hbmQtcGFyZW50LXRvZ2V0aGVyLnRlc3QKQEAgLTAsMCArMSwzIEBACisoY2QgZm9vICYmCisJKGJhciAmJgorCQliYXopKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvY2xvc2Utc3Vic2hlbGwuZXhwZWN0IGIvdC9jaGFpbmxpbnQvY2xvc2Utc3Vic2hlbGwuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NDY4ODcKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9jbG9zZS1zdWJzaGVsbC5leHBlY3QKQEAgLTAsMCArMSwyNSBAQAorKAorCWZvbworPikgJiYKKygKKwliYXIKKz4pID5vdXQgJiYKKygKKwliYXoKKz4pIDI+ZXJyICYmCisoCisJYm9vCis+KSA8aW5wdXQgJiYKKygKKwliaXAKKz4pIHwgd3V6emxlICYmCisoCisJYm9wCis+KSB8IGZhenogCWZvenogJiYKKygKKwlidXAKKz4pIHwKK2Z1enpsZSAmJgorKAorCXlvcAorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2Nsb3NlLXN1YnNoZWxsLnRlc3QgYi90L2NoYWlubGludC9jbG9zZS1zdWJzaGVsbC50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOGNhNDQKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9jbG9zZS1zdWJzaGVsbC50ZXN0CkBAIC0wLDAgKzEsMjcgQEAKKyMgTElOVDogY2xvc2luZyAiKSIgd2l0aCB2YXJpb3VzIGRlY29yYXRpb25zICgiJiYiLCAiPiIsICJ8IiwgZXRjLikKKygKKwlmb28KKykgJiYKKygKKwliYXIKKykgPm91dCAmJgorKAorCWJhegorKSAyPmVyciAmJgorKAorCWJvbworKSA8aW5wdXQgJiYKKygKKwliaXAKKykgfCB3dXp6bGUgJiYKKygKKwlib3AKKykgfCBmYXp6IFwKKwlmb3p6ICYmCisoCisJYnVwCispIHwKK2Z1enpsZSAmJgorKAorCXlvcAorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvY29tbWFuZC1zdWJzdGl0dXRpb24uZXhwZWN0IGIvdC9jaGFpbmxpbnQvY29tbWFuZC1zdWJzdGl0dXRpb24uZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDExOGUKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9jb21tYW5kLXN1YnN0aXR1dGlvbi5leHBlY3QKQEAgLTAsMCArMSw5IEBACisoCisJZm9vICYmCisJYmFyPSQoZ29iYmxlKSAmJgorCWJhegorPikgJiYKKygKKz8hQU1QPyEJYmFyPSQoZ29iYmxlIGJsb2NrcykKKwliYXoKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9jb21tYW5kLXN1YnN0aXR1dGlvbi50ZXN0IGIvdC9jaGFpbmxpbnQvY29tbWFuZC1zdWJzdGl0dXRpb24udGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmJiMDAyCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvY29tbWFuZC1zdWJzdGl0dXRpb24udGVzdApAQCAtMCwwICsxLDExIEBACisoCisJZm9vICYmCisjIExJTlQ6IGNsb3NpbmcgIikiIG9mICQoLi4uKSBub3QgbWlzaW50ZXJwcmV0ZWQgYXMgc3Vic2hlbGwtY2xvc2luZyAiKSIKKwliYXI9JChnb2JibGUpICYmCisJYmF6CispICYmCisoCisjIExJTlQ6IG1pc3NpbmcgIiYmIiBvbiAkKC4uLikKKwliYXI9JChnb2JibGUgYmxvY2tzKQorCWJhegorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvY29tbWVudC5leHBlY3QgYi90L2NoYWlubGludC9jb21tZW50LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmU5MzllCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvY29tbWVudC5leHBlY3QKQEAgLTAsMCArMSw0IEBACisoCisJbm90aGluZyAmJgorCXNvbWV0aGluZworPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2NvbW1lbnQudGVzdCBiL3QvY2hhaW5saW50L2NvbW1lbnQudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTNjMGM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvY29tbWVudC50ZXN0CkBAIC0wLDAgKzEsMTEgQEAKKygKKyMgTElOVDogc3dhbGxvdyBjb21tZW50IGxpbmVzCisJIyBjb21tZW50IDEKKwlub3RoaW5nICYmCisJIyBjb21tZW50IDIKKwlzb21ldGhpbmcKKyMgTElOVDogc3dhbGxvdyBjb21tZW50IGxpbmVzIHNpbmNlIGZpbmFsIF9zdGF0ZW1lbnRfIGJlZm9yZSBzdWJzaGVsbCBlbmQgaXMKKyMgTElOVDogc2lnbmlmaWNhbnQgdG8gIiYmIi1jaGVjaywgbm90IGZpbmFsIF9saW5lXyAod2hpY2ggbWlnaHQgYmUgY29tbWVudCkKKwkjIGNvbW1lbnQgMworCSMgY29tbWVudCA0CispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9jb21wbGV4LWlmLWluLWN1ZGRsZWQtbG9vcC5leHBlY3QgYi90L2NoYWlubGludC9jb21wbGV4LWlmLWluLWN1ZGRsZWQtbG9vcC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY3NGI4OAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2NvbXBsZXgtaWYtaW4tY3VkZGxlZC1sb29wLmV4cGVjdApAQCAtMCwwICsxLDEwIEBACisoCitmb3IgaSBpbiBhIGIgYzsgZG8KKyAgIGlmIHRlc3QgIiQoZWNobyAkKHdhZmZsZSBiYXQpKSIgPSAiZWxldmVudGVlbiIgJiYKKyAgICAgdGVzdCAiJHgiID0gIiR5IjsgdGhlbgorICAgICA6CisgICBlbHNlCisgICAgIGVjaG8gPmZpbGUKKyAgIGZpCis+IGRvbmUpICYmCit0ZXN0ICEgLWYgZmlsZQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvY29tcGxleC1pZi1pbi1jdWRkbGVkLWxvb3AudGVzdCBiL3QvY2hhaW5saW50L2NvbXBsZXgtaWYtaW4tY3VkZGxlZC1sb29wLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcxYmJkOAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2NvbXBsZXgtaWYtaW4tY3VkZGxlZC1sb29wLnRlc3QKQEAgLTAsMCArMSwxMSBAQAorIyBMSU5UOiAnZm9yJyBsb29wIGN1ZGRsZWQgd2l0aCAiKCIgYW5kICIpIiBhbmQgbmVzdGVkICdpZicgd2l0aCBjb21wbGV4CisjIExJTlQ6IG11bHRpLWxpbmUgY29uZGl0aW9uOyBpbmRlbnRlZCB3aXRoIHNwYWNlcywgbm90IHRhYnMKKyhmb3IgaSBpbiBhIGIgYzsgZG8KKyAgIGlmIHRlc3QgIiQoZWNobyAkKHdhZmZsZSBiYXQpKSIgPSAiZWxldmVudGVlbiIgJiYKKyAgICAgdGVzdCAiJHgiID0gIiR5IjsgdGhlbgorICAgICA6CisgICBlbHNlCisgICAgIGVjaG8gPmZpbGUKKyAgIGZpCisgZG9uZSkgJiYKK3Rlc3QgISAtZiBmaWxlCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9jdWRkbGVkLWlmLXRoZW4tZWxzZS5leHBlY3QgYi90L2NoYWlubGludC9jdWRkbGVkLWlmLXRoZW4tZWxzZS5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIyYTAyNgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2N1ZGRsZWQtaWYtdGhlbi1lbHNlLmV4cGVjdApAQCAtMCwwICsxLDcgQEAKKygKK2lmIHRlc3QgLXogIiI7IHRoZW4KKyAgICBlY2hvIGVtcHR5CisgZWxzZQorICAgIGVjaG8gYml6enkKKz4gZmkpICYmCitlY2hvIGZvb2JhcgpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvY3VkZGxlZC1pZi10aGVuLWVsc2UudGVzdCBiL3QvY2hhaW5saW50L2N1ZGRsZWQtaWYtdGhlbi1lbHNlLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVkNzc0YQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2N1ZGRsZWQtaWYtdGhlbi1lbHNlLnRlc3QKQEAgLTAsMCArMSw3IEBACisjIExJTlQ6ICdpZicgY3VkZGxlZCB3aXRoICIoIiBhbmQgIikiOyBpbmRlbnRlZCB3aXRoIHNwYWNlcywgbm90IHRhYnMKKyhpZiB0ZXN0IC16ICIiOyB0aGVuCisgICAgZWNobyBlbXB0eQorIGVsc2UKKyAgICBlY2hvIGJpenp5CisgZmkpICYmCitlY2hvIGZvb2JhcgpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvY3VkZGxlZC1sb29wLmV4cGVjdCBiL3QvY2hhaW5saW50L2N1ZGRsZWQtbG9vcC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwMjYwZAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2N1ZGRsZWQtbG9vcC5leHBlY3QKQEAgLTAsMCArMSw1IEBACisoCisgd2hpbGUgcmVhZCB4CisgIGRvIGZvb2JhciBib3AgfHwgZXhpdCAxCis+ICBkb25lIDxmaWxlICkgJiYKK291dHNpZGUgc3Vic2hlbGwKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2N1ZGRsZWQtbG9vcC50ZXN0IGIvdC9jaGFpbmxpbnQvY3VkZGxlZC1sb29wLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0MWQ3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2N1ZGRsZWQtbG9vcC50ZXN0CkBAIC0wLDAgKzEsNyBAQAorIyBMSU5UOiAnd2hpbGUnIGxvb3AgY3VkZGxlZCB3aXRoICIoIiBhbmQgIikiLCB3aXRoIGVtYmVkZGVkIChhbGxvd2VkKQorIyBMSU5UOiAifHwgZXhpdCB7bn0iIHRvIGV4aXQgbG9vcCBlYXJseSwgYW5kIHVzaW5nIHJlZGlyZWN0aW9uICI8IiB0byBmZWVkCisjIExJTlQ6IGxvb3A7IGluZGVudGVkIHdpdGggc3BhY2VzLCBub3QgdGFicworKCB3aGlsZSByZWFkIHgKKyAgZG8gZm9vYmFyIGJvcCB8fCBleGl0IDEKKyAgZG9uZSA8ZmlsZSApICYmCitvdXRzaWRlIHN1YnNoZWxsCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9jdWRkbGVkLmV4cGVjdCBiL3QvY2hhaW5saW50L2N1ZGRsZWQuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MDZkNDYKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9jdWRkbGVkLmV4cGVjdApAQCAtMCwwICsxLDIxIEBACisoCitjZCBmb28gJiYKKwliYXIKKz4pICYmCisKKygKKz8hQU1QPyFjZCBmb28KKwliYXIKKz4pICYmCisKKygKKwljZCBmb28gJiYKKz4JYmFyKSAmJgorCisoCitjZCBmb28gJiYKKz4JYmFyKSAmJgorCisoCis/IUFNUD8hY2QgZm9vCis+CWJhcikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2N1ZGRsZWQudGVzdCBiL3QvY2hhaW5saW50L2N1ZGRsZWQudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDk5ZmE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvY3VkZGxlZC50ZXN0CkBAIC0wLDAgKzEsMjMgQEAKKyMgTElOVDogZmlyc3Qgc3Vic2hlbGwgc3RhdGVtZW50IGN1ZGRsZWQgd2l0aCBvcGVuaW5nICIoIjsgZm9yIGltcGxlbWVudGF0aW9uCisjIExJTlQ6IHNpbXBsaWNpdHksICIoLi4uIiBpcyBzcGxpdCBpbnRvIHR3byBsaW5lcywgIigiIGFuZCAiLi4uIgorKGNkIGZvbyAmJgorCWJhcgorKSAmJgorCisjIExJTlQ6IHNhbWUgd2l0aCBtaXNzaW5nICImJiIKKyhjZCBmb28KKwliYXIKKykgJiYKKworIyBMSU5UOiBjbG9zaW5nICIpIiBjdWRkbGVkIHdpdGggZmluYWwgc3Vic2hlbGwgc3RhdGVtZW50CisoCisJY2QgZm9vICYmCisJYmFyKSAmJgorCisjIExJTlQ6ICIoIiBhbmQgIikiIGN1ZGRsZWQgd2l0aCBmaXJzdCBhbmQgZmluYWwgc3Vic2hlbGwgc3RhdGVtZW50cworKGNkIGZvbyAmJgorCWJhcikgJiYKKworIyBMSU5UOiBzYW1lIHdpdGggbWlzc2luZyAiJiYiCisoY2QgZm9vCisJYmFyKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvZXhpdC1sb29wLmV4cGVjdCBiL3QvY2hhaW5saW50L2V4aXQtbG9vcC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRkOGJkZQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2V4aXQtbG9vcC5leHBlY3QKQEAgLTAsMCArMSwyNCBAQAorKAorCWZvciBpIGluIGEgYiBjCisJZG8KKwkJZm9vIHx8IGV4aXQgMQorCQliYXIgJiYKKwkJYmF6CisJZG9uZQorPikgJiYKKygKKwl3aGlsZSB0cnVlCisJZG8KKwkJZm9vIHx8IGV4aXQgMQorCQliYXIgJiYKKwkJYmF6CisJZG9uZQorPikgJiYKKygKKwlpPTAgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sdCAxMAorCWRvCisJCWVjaG8gJGkgfHwgZXhpdAorCQlpPSQoKCRpICsgMSkpCisJZG9uZQorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2V4aXQtbG9vcC50ZXN0IGIvdC9jaGFpbmxpbnQvZXhpdC1sb29wLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwMzgyMAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2V4aXQtbG9vcC50ZXN0CkBAIC0wLDAgKzEsMjcgQEAKKygKKwlmb3IgaSBpbiBhIGIgYworCWRvCisjIExJTlQ6ICJ8fCBleGl0IHtufSIgdmFsaWQgZm9yLWxvb3AgZXNjYXBlIGluIHN1YnNoZWxsOyBubyAiJiYiIG5lZWRlZAorCQlmb28gfHwgZXhpdCAxCisJCWJhciAmJgorCQliYXoKKwlkb25lCispICYmCisoCisJd2hpbGUgdHJ1ZQorCWRvCisjIExJTlQ6ICJ8fCBleGl0IHtufSIgdmFsaWQgd2hpbGUtbG9vcCBlc2NhcGUgaW4gc3Vic2hlbGw7IG5vICImJiIgbmVlZGVkCisJCWZvbyB8fCBleGl0IDEKKwkJYmFyICYmCisJCWJhegorCWRvbmUKKykgJiYKKygKKwlpPTAgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sdCAxMAorCWRvCisjIExJTlQ6ICJ8fCBleGl0IiAoc2FucyBleGl0IGNvZGUpIHZhbGlkIGVzY2FwZSBpbiBzdWJzaGVsbDsgbm8gIiYmIiBuZWVkZWQKKwkJZWNobyAkaSB8fCBleGl0CisJCWk9JCgoJGkgKyAxKSkKKwlkb25lCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9leGl0LXN1YnNoZWxsLmV4cGVjdCBiL3QvY2hhaW5saW50L2V4aXQtc3Vic2hlbGwuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNzg0NTQKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9leGl0LXN1YnNoZWxsLmV4cGVjdApAQCAtMCwwICsxLDUgQEAKKygKKwlmb28gfHwgZXhpdCAxCisJYmFyICYmCisJYmF6Cis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvZXhpdC1zdWJzaGVsbC50ZXN0IGIvdC9jaGFpbmxpbnQvZXhpdC1zdWJzaGVsbC50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNmFiNjkKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9leGl0LXN1YnNoZWxsLnRlc3QKQEAgLTAsMCArMSw2IEBACisoCisjIExJTlQ6ICJ8fCBleGl0IHtufSIgdmFsaWQgc3Vic2hlbGwgZXNjYXBlIHdpdGhvdXQgaHVydGluZyAmJi1jaGFpbgorCWZvbyB8fCBleGl0IDEKKwliYXIgJiYKKwliYXoKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2Zvci1sb29wLmV4cGVjdCBiL3QvY2hhaW5saW50L2Zvci1sb29wLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzNjZjU2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvZm9yLWxvb3AuZXhwZWN0CkBAIC0wLDAgKzEsMTEgQEAKKygKKwlmb3IgaSBpbiBhIGIgYworCWRvCis/IUFNUD8hCQllY2hvICRpCisJCWNhdAorPyFBTVA/IQlkb25lCisJZm9yIGkgaW4gYSBiIGM7IGRvCisJCWVjaG8gJGkgJiYKKwkJY2F0ICRpCisJZG9uZQorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2Zvci1sb29wLnRlc3QgYi90L2NoYWlubGludC9mb3ItbG9vcC50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYjc2MjYKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9mb3ItbG9vcC50ZXN0CkBAIC0wLDAgKzEsMTkgQEAKKygKKyMgTElOVDogJ2ZvcicsICdkbycsICdkb25lJyBkbyBub3QgbmVlZCAiJiYiCisJZm9yIGkgaW4gYSBiIGMKKwlkbworIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJ2VjaG8nCisJCWVjaG8gJGkKKyMgTElOVDogbGFzdCBzdGF0ZW1lbnQgb2Ygd2hpbGUgZG9lcyBub3QgbmVlZCAiJiYiCisJCWNhdCA8PC1cRU9GCisJCWJhcgorCQlFT0YKKyMgTElOVDogbWlzc2luZyAiJiYiIG9uICdkb25lJworCWRvbmUKKworIyBMSU5UOiAnZG8nIG9uIHNhbWUgbGluZSBhcyAnZm9yJworCWZvciBpIGluIGEgYiBjOyBkbworCQllY2hvICRpICYmCisJCWNhdCAkaQorCWRvbmUKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2hlcmUtZG9jLWNsb3NlLXN1YnNoZWxsLmV4cGVjdCBiL3QvY2hhaW5saW50L2hlcmUtZG9jLWNsb3NlLXN1YnNoZWxsLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDExZTMzCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvaGVyZS1kb2MtY2xvc2Utc3Vic2hlbGwuZXhwZWN0CkBAIC0wLDAgKzEsMiBAQAorKAorPgljYXQpCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9oZXJlLWRvYy1jbG9zZS1zdWJzaGVsbC50ZXN0IGIvdC9jaGFpbmxpbnQvaGVyZS1kb2MtY2xvc2Utc3Vic2hlbGwudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODU3ZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvaGVyZS1kb2MtY2xvc2Utc3Vic2hlbGwudGVzdApAQCAtMCwwICsxLDUgQEAKKygKKyMgTElOVDogbGluZSBjb250YWlucyBoZXJlLWRvYyBhbmQgY2xvc2VzIG5lc3RlZCBzdWJzaGVsbAorCWNhdCA8PC1cSU5QVVQpCisJZml6egorCUlOUFVUCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9oZXJlLWRvYy1tdWx0aS1saW5lLWNvbW1hbmQtc3Vic3QuZXhwZWN0IGIvdC9jaGFpbmxpbnQvaGVyZS1kb2MtbXVsdGktbGluZS1jb21tYW5kLXN1YnN0LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWZiNzUyCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvaGVyZS1kb2MtbXVsdGktbGluZS1jb21tYW5kLXN1YnN0LmV4cGVjdApAQCAtMCwwICsxLDUgQEAKKygKKwl4PSQoYm9iYmxlICYmCis/IUFNUD8hPj4JCXdpZmZsZSkKKwllY2hvICR4Cis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvaGVyZS1kb2MtbXVsdGktbGluZS1jb21tYW5kLXN1YnN0LnRlc3QgYi90L2NoYWlubGludC9oZXJlLWRvYy1tdWx0aS1saW5lLWNvbW1hbmQtc3Vic3QudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTliYzVkCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvaGVyZS1kb2MtbXVsdGktbGluZS1jb21tYW5kLXN1YnN0LnRlc3QKQEAgLTAsMCArMSw5IEBACisoCisjIExJTlQ6IGxpbmUgY29udGFpbnMgaGVyZS1kb2MgYW5kIG9wZW5zIG11bHRpLWxpbmUgJCguLi4pCisJeD0kKGJvYmJsZSA8PC1cRU5EICYmCisJCWZvc3NpbAorCQl2ZWdldGFibGUKKwkJRU5ECisJCXdpZmZsZSkKKwllY2hvICR4CispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9oZXJlLWRvYy1tdWx0aS1saW5lLXN0cmluZy5leHBlY3QgYi90L2NoYWlubGludC9oZXJlLWRvYy1tdWx0aS1saW5lLXN0cmluZy5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIwMzhhMAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2hlcmUtZG9jLW11bHRpLWxpbmUtc3RyaW5nLmV4cGVjdApAQCAtMCwwICsxLDQgQEAKKygKKz8hQU1QPyEJY2F0ICYmIGVjaG8gIm11bHRpLWxpbmUJc3RyaW5nIgorCWJhcAorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2hlcmUtZG9jLW11bHRpLWxpbmUtc3RyaW5nLnRlc3QgYi90L2NoYWlubGludC9oZXJlLWRvYy1tdWx0aS1saW5lLXN0cmluZy50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1M2VkYmMKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9oZXJlLWRvYy1tdWx0aS1saW5lLXN0cmluZy50ZXN0CkBAIC0wLDAgKzEsOCBAQAorKAorIyBMSU5UOiBsaW5lIGNvbnRhaW5zIGhlcmUtZG9jIGFuZCBvcGVucyBtdWx0aS1saW5lIHN0cmluZworCWNhdCA8PC1cVFhUICYmIGVjaG8gIm11bHRpLWxpbmUKKwlzdHJpbmciCisJZml6emxlCisJVFhUCisJYmFwCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9oZXJlLWRvYy5leHBlY3QgYi90L2NoYWlubGludC9oZXJlLWRvYy5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0YjA2NQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2hlcmUtZG9jLmV4cGVjdApAQCAtMCwwICsxLDkgQEAKK2Jvb2RsZSB3b2JiYSAgICAgICAgZ29yZ28gc25vb3QgICAgICAgIHdhZnRhIHNudXJiICYmCisKK2NhdCA+Zm9vICYmCisKK2NhdCA+YmFyICYmCisKK2NhdCA+Ym9vICYmCisKK2hvcnRpY3VsdHVyZQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvaGVyZS1kb2MudGVzdCBiL3QvY2hhaW5saW50L2hlcmUtZG9jLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ0Y2U4YQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2hlcmUtZG9jLnRlc3QKQEAgLTAsMCArMSwzNyBAQAorIyBMSU5UOiBzdGl0Y2ggdG9nZXRoZXIgaW5jb21wbGV0ZSBcLWVuZGluZyBsaW5lcworIyBMSU5UOiBzd2FsbG93IGhlcmUtZG9jIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlcyBpbiBjb250ZW50Citib29kbGUgd29iYmEgXAorICAgICAgIGdvcmdvIHNub290IFwKKyAgICAgICB3YWZ0YSBzbnVyYiA8PEVPRiAmJgorcXVvdGggdGhlIHJhdmVuLAorbmV2ZXJtb3JlLi4uCitFT0YKKworIyBMSU5UOiBzd2FsbG93IGhlcmUtZG9jIHdpdGggYXJiaXRyYXJ5IHRhZworY2F0IDw8LUFyYml0cmFyeV9UYWdfNDIgPmZvbyAmJgorc25vegorYm96Cit3b3oKK0FyYml0cmFyeV9UYWdfNDIKKworIyBMSU5UOiBzd2FsbG93ICdxdW90ZWQnIGhlcmUtZG9jCitjYXQgPDwnRlVNUCcgPmJhciAmJgorc25vegorYm96Cit3b3oKK0ZVTVAKKworIyBMSU5UOiBzd2FsbG93ICJxdW90ZWQiIGhlcmUtZG9jCitjYXQgPDwienVtcCIgPmJvbyAmJgorc25vegorYm96Cit3b3oKK3p1bXAKKworIyBMSU5UOiBzd2FsbG93IGhlcmUtZG9jIChFT0YgaXMgbGFzdCBsaW5lIG9mIHRlc3QpCitob3J0aWN1bHR1cmUgPDxcRU9GCitnb21legorbW9ydGljaWEKK3dlZG5lc2RheQorcHVnc2x5CitFT0YKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2lmLWluLWxvb3AuZXhwZWN0IGIvdC9jaGFpbmxpbnQvaWYtaW4tbG9vcC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNkM2NlYgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2lmLWluLWxvb3AuZXhwZWN0CkBAIC0wLDAgKzEsMTIgQEAKKygKKwlmb3IgaSBpbiBhIGIgYworCWRvCisJCWlmIGZhbHNlCisJCXRoZW4KKz8hQU1QPyEJCQllY2hvICJlcnIiCisJCQlleGl0IDEKKz8hQU1QPyEJCWZpCisJCWZvbworPyFBTVA/IQlkb25lCisJYmFyCis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvaWYtaW4tbG9vcC50ZXN0IGIvdC9jaGFpbmxpbnQvaWYtaW4tbG9vcC50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZjIyZGEKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9pZi1pbi1sb29wLnRlc3QKQEAgLTAsMCArMSwxNSBAQAorKAorCWZvciBpIGluIGEgYiBjCisJZG8KKwkJaWYgZmFsc2UKKwkJdGhlbgorIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJ2VjaG8nCisJCQllY2hvICJlcnIiCisJCQlleGl0IDEKKyMgTElOVDogbWlzc2luZyAiJiYiIG9uICdmaScKKwkJZmkKKwkJZm9vCisjIExJTlQ6IG1pc3NpbmcgIiYmIiBvbiAnZG9uZScKKwlkb25lCisJYmFyCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9pZi10aGVuLWVsc2UuZXhwZWN0IGIvdC9jaGFpbmxpbnQvaWYtdGhlbi1lbHNlLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTUzYzdiCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvaWYtdGhlbi1lbHNlLmV4cGVjdApAQCAtMCwwICsxLDE5IEBACisoCisJaWYgdGVzdCAtbiAiIgorCXRoZW4KKz8hQU1QPyEJCWVjaG8gdmVyeQorCQllY2hvIGVtcHR5CisJZWxpZiB0ZXN0IC16ICIiCisJCWVjaG8gZm9vCisJZWxzZQorCQllY2hvIGZvbyAmJgorCQljYXQKKz8hQU1QPyEJZmkKKwllY2hvIHBvb2RsZQorPikgJiYKKygKKwlpZiB0ZXN0IC1uICIiOyB0aGVuCisJCWVjaG8gdmVyeSAmJgorPyFBTVA/IQkJZWNobyBlbXB0eQorCWlmCis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvaWYtdGhlbi1lbHNlLnRlc3QgYi90L2NoYWlubGludC9pZi10aGVuLWVsc2UudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmQ4ZTlhCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvaWYtdGhlbi1lbHNlLnRlc3QKQEAgLTAsMCArMSwyOCBAQAorKAorIyBMSU5UOiAnaWYnLCAndGhlbicsICdlbGlmJywgJ2Vsc2UnLCAnZmknIGRvIG5vdCBuZWVkICImJiIKKwlpZiB0ZXN0IC1uICIiCisJdGhlbgorIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJ2VjaG8nCisJCWVjaG8gdmVyeQorIyBMSU5UOiBsYXN0IHN0YXRlbWVudCBiZWZvcmUgJ2VsaWYnIGRvZXMgbm90IG5lZWQgIiYmIgorCQllY2hvIGVtcHR5CisJZWxpZiB0ZXN0IC16ICIiCisjIExJTlQ6IGxhc3Qgc3RhdGVtZW50IGJlZm9yZSAnZWxzZScgZG9lcyBub3QgbmVlZCAiJiYiCisJCWVjaG8gZm9vCisJZWxzZQorCQllY2hvIGZvbyAmJgorIyBMSU5UOiBsYXN0IHN0YXRlbWVudCBiZWZvcmUgJ2ZpJyBkb2VzIG5vdCBuZWVkICImJiIKKwkJY2F0IDw8LVxFT0YKKwkJYmFyCisJCUVPRgorIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJ2ZpJworCWZpCisJZWNobyBwb29kbGUKKykgJiYKKygKKyMgTElOVDogJ3RoZW4nIG9uIHNhbWUgbGluZSBhcyAnaWYnCisJaWYgdGVzdCAtbiAiIjsgdGhlbgorCQllY2hvIHZlcnkgJiYKKwkJZWNobyBlbXB0eQorCWlmCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9pbmNvbXBsZXRlLWxpbmUuZXhwZWN0IGIvdC9jaGFpbmxpbnQvaW5jb21wbGV0ZS1saW5lLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjNlYmFiCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvaW5jb21wbGV0ZS1saW5lLmV4cGVjdApAQCAtMCwwICsxLDQgQEAKK2xpbmUgMSBsaW5lIDIgbGluZSAzIGxpbmUgNCAmJgorKAorCWxpbmUgNSAJbGluZSA2IAlsaW5lIDcgCWxpbmUgOAorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2luY29tcGxldGUtbGluZS50ZXN0IGIvdC9jaGFpbmxpbnQvaW5jb21wbGV0ZS1saW5lLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1NjY1OAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2luY29tcGxldGUtbGluZS50ZXN0CkBAIC0wLDAgKzEsMTIgQEAKKyMgTElOVDogc3RpdGNoIHRvZ2V0aGVyIGFsbCBpbmNvbXBsZXRlIFwtZW5kaW5nIGxpbmVzCitsaW5lIDEgXAorbGluZSAyIFwKK2xpbmUgMyBcCitsaW5lIDQgJiYKKygKKyMgTElOVDogc3RpdGNoIHRvZ2V0aGVyIGFsbCBpbmNvbXBsZXRlIFwtZW5kaW5nIGxpbmVzIChzdWJzaGVsbCkKKwlsaW5lIDUgXAorCWxpbmUgNiBcCisJbGluZSA3IFwKKwlsaW5lIDgKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2lubGluZS1jb21tZW50LmV4cGVjdCBiL3QvY2hhaW5saW50L2lubGluZS1jb21tZW50LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzlmMjUwCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvaW5saW5lLWNvbW1lbnQuZXhwZWN0CkBAIC0wLDAgKzEsOSBAQAorKAorCWZvb2JhciAmJgorPyFBTVA/IQliYXJmb28KKwlmbGliYmxlICJub3QgYSAjIGNvbW1lbnQiCis+KSAmJgorCisoCitjZCBmb28gJiYKKz4JZmxpYmJsZSAibm90IGEgIyBjb21tZW50IikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2lubGluZS1jb21tZW50LnRlc3QgYi90L2NoYWlubGludC9pbmxpbmUtY29tbWVudC50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjY4NTYKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9pbmxpbmUtY29tbWVudC50ZXN0CkBAIC0wLDAgKzEsMTIgQEAKKygKKyMgTElOVDogc3dhbGxvdyBpbmxpbmUgY29tbWVudCAobGVhdmluZyBjb21tYW5kIGludGFjdCkKKwlmb29iYXIgJiYgIyBjb21tZW50IDEKKyMgTElOVDogbWlzcG9zaXRpb25lZCAiJiYiIChjb3JyZWN0bHkpIHN3YWxsb3dlZCB3aXRoIGNvbW1lbnQKKwliYXJmb28gIyB3cm9uZyBwb3NpdGlvbiBmb3IgJiYKKyMgTElOVDogIiMiIGluIHN0cmluZyBub3QgbWlzaW50ZXJwcmV0ZWQgYXMgY29tbWVudAorCWZsaWJibGUgIm5vdCBhICMgY29tbWVudCIKKykgJiYKKworIyBMSU5UOiAiIyIgaW4gc3RyaW5nIGluIGN1ZGRsZWQgc3Vic2hlbGwgbm90IG1pc2ludGVycHJldGVkIGFzIGNvbW1lbnQKKyhjZCBmb28gJiYKKwlmbGliYmxlICJub3QgYSAjIGNvbW1lbnQiKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvbG9vcC1pbi1pZi5leHBlY3QgYi90L2NoYWlubGludC9sb29wLWluLWlmLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODhlNjIyCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvbG9vcC1pbi1pZi5leHBlY3QKQEAgLTAsMCArMSwxMiBAQAorKAorCWlmIHRydWUKKwl0aGVuCisJCXdoaWxlIHRydWUKKwkJZG8KKz8hQU1QPyEJCQllY2hvICJwb3AiCisJCQllY2hvICJnbHVwIgorPyFBTVA/IQkJZG9uZQorCQlmb28KKz8hQU1QPyEJZmkKKwliYXIKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9sb29wLWluLWlmLnRlc3QgYi90L2NoYWlubGludC9sb29wLWluLWlmLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNlOGJhOAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2xvb3AtaW4taWYudGVzdApAQCAtMCwwICsxLDE1IEBACisoCisJaWYgdHJ1ZQorCXRoZW4KKwkJd2hpbGUgdHJ1ZQorCQlkbworIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJ2VjaG8nCisJCQllY2hvICJwb3AiCisJCQllY2hvICJnbHVwIgorIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJ2RvbmUnCisJCWRvbmUKKwkJZm9vCisjIExJTlQ6IG1pc3NpbmcgIiYmIiBvbiAnZmknCisJZmkKKwliYXIKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L211bHRpLWxpbmUtbmVzdGVkLWNvbW1hbmQtc3Vic3RpdHV0aW9uLmV4cGVjdCBiL3QvY2hhaW5saW50L211bHRpLWxpbmUtbmVzdGVkLWNvbW1hbmQtc3Vic3RpdHV0aW9uLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWI2YzhiCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvbXVsdGktbGluZS1uZXN0ZWQtY29tbWFuZC1zdWJzdGl0dXRpb24uZXhwZWN0CkBAIC0wLDAgKzEsMTggQEAKKygKKwlmb28gJiYKKwl4PSQoCisJCWVjaG8gYmFyIHwKKwkJY2F0Cis+PgkpICYmCisJZWNobyBvaworPikgfAorc29ydCAmJgorKAorCWJhciAmJgorCXg9JChlY2hvIGJhciB8CisJCWNhdAorPj4JKSAmJgorCXk9JChlY2hvIGJheiB8Cis+PgkJZmlwKSAmJgorCWVjaG8gZmFpbAorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L211bHRpLWxpbmUtbmVzdGVkLWNvbW1hbmQtc3Vic3RpdHV0aW9uLnRlc3QgYi90L2NoYWlubGludC9tdWx0aS1saW5lLW5lc3RlZC1jb21tYW5kLXN1YnN0aXR1dGlvbi50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMDA1ODMKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9tdWx0aS1saW5lLW5lc3RlZC1jb21tYW5kLXN1YnN0aXR1dGlvbi50ZXN0CkBAIC0wLDAgKzEsMTggQEAKKygKKwlmb28gJiYKKwl4PSQoCisJCWVjaG8gYmFyIHwKKwkJY2F0CisJKSAmJgorCWVjaG8gb2sKKykgfAorc29ydCAmJgorKAorCWJhciAmJgorCXg9JChlY2hvIGJhciB8CisJCWNhdAorCSkgJiYKKwl5PSQoZWNobyBiYXogfAorCQlmaXApICYmCisJZWNobyBmYWlsCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9tdWx0aS1saW5lLXN0cmluZy5leHBlY3QgYi90L2NoYWlubGludC9tdWx0aS1saW5lLXN0cmluZy5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwY2I1OQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L211bHRpLWxpbmUtc3RyaW5nLmV4cGVjdApAQCAtMCwwICsxLDE1IEBACisoCisJeD0ibGluZSAxCQlsaW5lIDIJCWxpbmUgMyIgJiYKKz8hQU1QPyEJeT0nbGluZSAxCQlsaW5lMicKKwlmb29iYXIKKz4pICYmCisoCisJZWNobyAidGhlcmUncyBub3RoaW5nIHRvIHNlZSBoZXJlIiAmJgorCWV4aXQKKz4pICYmCisoCisJZWNobyAieHl6IiAiYWJjCQlkZWYJCWdoaSIgJiYKKwllY2hvICd4eXonICdhYmMJCWRlZgkJZ2hpJyAmJgorCWVjaG8gJ3h5eicgImFiYwkJZGVmCQlnaGkiICYmCisJYmFyZm9vCis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvbXVsdGktbGluZS1zdHJpbmcudGVzdCBiL3QvY2hhaW5saW50L211bHRpLWxpbmUtc3RyaW5nLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3YWI4OQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L211bHRpLWxpbmUtc3RyaW5nLnRlc3QKQEAgLTAsMCArMSwyNyBAQAorKAorCXg9ImxpbmUgMQorCQlsaW5lIDIKKwkJbGluZSAzIiAmJgorIyBMSU5UOiBtaXNzaW5nICImJiIgb24gYXNzaWdubWVudAorCXk9J2xpbmUgMQorCQlsaW5lMicKKwlmb29iYXIKKykgJiYKKygKKyMgTElOVDogYXBvc3Ryb3BoZSAoaW4gYSBjb250cmFjdGlvbikgd2l0aGluIHN0cmluZyBub3QgbWlzaW50ZXJwcmV0ZWQgYXMKKyMgTElOVDogc3RhcnRpbmcgbXVsdGktbGluZSBzaW5nbGUtcXVvdGVkIHN0cmluZworCWVjaG8gInRoZXJlJ3Mgbm90aGluZyB0byBzZWUgaGVyZSIgJiYKKwlleGl0CispICYmCisoCisJZWNobyAieHl6IiAiYWJjCisJCWRlZgorCQlnaGkiICYmCisJZWNobyAneHl6JyAnYWJjCisJCWRlZgorCQlnaGknICYmCisJZWNobyAneHl6JyAiYWJjCisJCWRlZgorCQlnaGkiICYmCisJYmFyZm9vCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9uZWdhdGVkLW9uZS1saW5lci5leHBlY3QgYi90L2NoYWlubGludC9uZWdhdGVkLW9uZS1saW5lci5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YxODQyOQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L25lZ2F0ZWQtb25lLWxpbmVyLmV4cGVjdApAQCAtMCwwICsxLDUgQEAKKyEgKGZvbyAmJiBiYXIpICYmCishIChmb28gJiYgYmFyKSA+YmF6ICYmCisKKz8hU0VNST8hISAoZm9vOyBiYXIpICYmCis/IVNFTUk/ISEgKGZvbzsgYmFyKSA+YmF6CmRpZmYgLS1naXQgYS90L2NoYWlubGludC9uZWdhdGVkLW9uZS1saW5lci50ZXN0IGIvdC9jaGFpbmxpbnQvbmVnYXRlZC1vbmUtbGluZXIudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTU5OGU5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvbmVnYXRlZC1vbmUtbGluZXIudGVzdApAQCAtMCwwICsxLDcgQEAKKyMgTElOVDogdG9wLWxldmVsIG9uZS1saW5lciBzdWJzaGVsbAorISAoZm9vICYmIGJhcikgJiYKKyEgKGZvbyAmJiBiYXIpID5iYXogJiYKKworIyBMSU5UOiB0b3AtbGV2ZWwgb25lLWxpbmVyIHN1YnNoZWxsIG1pc3NpbmcgaW50ZXJuYWwgIiYmIgorISAoZm9vOyBiYXIpICYmCishIChmb287IGJhcikgPmJhegpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvbmVzdGVkLWN1ZGRsZWQtc3Vic2hlbGwuZXhwZWN0IGIvdC9jaGFpbmxpbnQvbmVzdGVkLWN1ZGRsZWQtc3Vic2hlbGwuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYTU5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9uZXN0ZWQtY3VkZGxlZC1zdWJzaGVsbC5leHBlY3QKQEAgLTAsMCArMSwxOSBAQAorKAorCShjZCBmb28gJiYKKwkJYmFyCis+PgkpICYmCisJKGNkIGZvbyAmJgorCQliYXIKKz8hQU1QPyE+PgkpCisJKAorCQljZCBmb28gJiYKKz4+CQliYXIpICYmCisJKAorCQljZCBmb28gJiYKKz8hQU1QPyE+PgkJYmFyKQorCShjZCBmb28gJiYKKz4+CQliYXIpICYmCisJKGNkIGZvbyAmJgorPyFBTVA/IT4+CQliYXIpCisJZm9vYmFyCis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvbmVzdGVkLWN1ZGRsZWQtc3Vic2hlbGwudGVzdCBiL3QvY2hhaW5saW50L25lc3RlZC1jdWRkbGVkLXN1YnNoZWxsLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZkNjU2YwotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L25lc3RlZC1jdWRkbGVkLXN1YnNoZWxsLnRlc3QKQEAgLTAsMCArMSwzMSBAQAorKAorIyBMSU5UOiBvcGVuaW5nICIoIiBjdWRkbGVkIHdpdGggZmlyc3QgbmVzdGVkIHN1YnNoZWxsIHN0YXRlbWVudAorCShjZCBmb28gJiYKKwkJYmFyCisJKSAmJgorCisjIExJTlQ6IHNhbWUgYnV0ICImJiIgbWlzc2luZworCShjZCBmb28gJiYKKwkJYmFyCisJKQorCisjIExJTlQ6IGNsb3NpbmcgIikiIGN1ZGRsZWQgd2l0aCBmaW5hbCBuZXN0ZWQgc3Vic2hlbGwgc3RhdGVtZW50CisJKAorCQljZCBmb28gJiYKKwkJYmFyKSAmJgorCisjIExJTlQ6IHNhbWUgYnV0ICImJiIgbWlzc2luZworCSgKKwkJY2QgZm9vICYmCisJCWJhcikKKworIyBMSU5UOiAiKCIgYW5kICIpIiBjdWRkbGVkIHdpdGggZmlyc3QgYW5kIGZpbmFsIHN1YnNoZWxsIHN0YXRlbWVudHMKKwkoY2QgZm9vICYmCisJCWJhcikgJiYKKworIyBMSU5UOiBzYW1lIGJ1dCAiJiYiIG1pc3NpbmcKKwkoY2QgZm9vICYmCisJCWJhcikKKworCWZvb2JhcgorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvbmVzdGVkLWhlcmUtZG9jLmV4cGVjdCBiL3QvY2hhaW5saW50L25lc3RlZC1oZXJlLWRvYy5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM5ZWYxYwotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L25lc3RlZC1oZXJlLWRvYy5leHBlY3QKQEAgLTAsMCArMSw3IEBACitjYXQgPmZvb3AgJiYKKworKAorCWNhdCAmJgorPyFBTVA/IQljYXQKKwlmb29iYXIKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9uZXN0ZWQtaGVyZS1kb2MudGVzdCBiL3QvY2hhaW5saW50L25lc3RlZC1oZXJlLWRvYy50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNTQwNGIKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9uZXN0ZWQtaGVyZS1kb2MudGVzdApAQCAtMCwwICsxLDMzIEBACisjIExJTlQ6IGlubmVyICJFT0YiIG5vdCBtaXNpbnRyZXByZXRlZCBhcyBjbG9zaW5nIEFSQklUUkFSWSBoZXJlLWRvYworY2F0IDw8QVJCSVRSQVJZID5mb29wICYmCituYWRkbGUKK2Z1YiA8PEVPRgorCW5venpsZQorCW5vb2RsZQorRU9GCitmb3JtcAorQVJCSVRSQVJZCisKKygKKyMgTElOVDogaW5uZXIgIkVPRiIgbm90IG1pc2ludHJlcHJldGVkIGFzIGNsb3NpbmcgSU5QVVRfRU5EIGhlcmUtZG9jCisJY2F0IDw8LVxJTlBVVF9FTkQgJiYKKwlmaXNoIGFyZSBtaWNlCisJYnV0IGdlZXNlIGdvIHNsb3cKKwlkYXRhIDw8RU9GCisJCXBlcmwgaXMgbGVycAorCQlhbmQgbm90aGluZyBlbHNlCisJRU9GCisJdG9pbmsKKwlJTlBVVF9FTkQKKworIyBMSU5UOiBzYW1lIGJ1dCBtaXNzaW5nICImJiIKKwljYXQgPDwtXEVPVAorCXRleHQgZ29lcyBoZXJlCisJZGF0YSA8PEVPRgorCQlkYXRhIGdvZXMgaGVyZQorCUVPRgorCW1vcmUgdGVzdCBoZXJlCisJRU9UCisKKwlmb29iYXIKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L25lc3RlZC1zdWJzaGVsbC1jb21tZW50LmV4cGVjdCBiL3QvY2hhaW5saW50L25lc3RlZC1zdWJzaGVsbC1jb21tZW50LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWI2OGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvbmVzdGVkLXN1YnNoZWxsLWNvbW1lbnQuZXhwZWN0CkBAIC0wLDAgKzEsMTEgQEAKKygKKwlmb28gJiYKKwkoCisJCWJhciAmJgorCQkjIGJvdHRsZXMgd29iYmxlIHdoaWxlIGZpZGRsZXMgZ29iYmxlCisJCSMgbWlub3IgbnVtYmVycyBvZiBjb3dzIChvciBkbyB0aGV5PykKKwkJYmF6ICYmCisJCXNuYWZmCis/IUFNUD8hPj4JKQorCWZ1enp5Cis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvbmVzdGVkLXN1YnNoZWxsLWNvbW1lbnQudGVzdCBiL3QvY2hhaW5saW50L25lc3RlZC1zdWJzaGVsbC1jb21tZW50LnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZmMTM2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L25lc3RlZC1zdWJzaGVsbC1jb21tZW50LnRlc3QKQEAgLTAsMCArMSwxMyBAQAorKAorCWZvbyAmJgorCSgKKwkJYmFyICYmCisjIExJTlQ6ICIpIiBpbiBjb21tZW50IGluIG5lc3RlZCBzdWJzaGVsbCBub3QgbWlzaW50ZXJwcmV0ZWQgYXMgY2xvc2luZyAiKSIKKwkJIyBib3R0bGVzIHdvYmJsZSB3aGlsZSBmaWRkbGVzIGdvYmJsZQorCQkjIG1pbm9yIG51bWJlcnMgb2YgY293cyAob3IgZG8gdGhleT8pCisJCWJheiAmJgorCQlzbmFmZgorIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJyknCisJKQorCWZ1enp5CispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9uZXN0ZWQtc3Vic2hlbGwuZXhwZWN0IGIvdC9jaGFpbmxpbnQvbmVzdGVkLXN1YnNoZWxsLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODE2NWFkCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvbmVzdGVkLXN1YnNoZWxsLmV4cGVjdApAQCAtMCwwICsxLDEyIEBACisoCisJY2QgZm9vICYmCisJKAorCQllY2hvIGEgJiYKKwkJZWNobyBiCis+PgkpID5maWxlICYmCisJY2QgZm9vICYmCisJKAorCQllY2hvIGEKKwkJZWNobyBiCis+PgkpID5maWxlCis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvbmVzdGVkLXN1YnNoZWxsLnRlc3QgYi90L2NoYWlubGludC9uZXN0ZWQtc3Vic2hlbGwudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OThiMDVhCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvbmVzdGVkLXN1YnNoZWxsLnRlc3QKQEAgLTAsMCArMSwxNCBAQAorKAorCWNkIGZvbyAmJgorCSgKKwkJZWNobyBhICYmCisJCWVjaG8gYgorCSkgPmZpbGUgJiYKKworCWNkIGZvbyAmJgorCSgKKyMgTElOVDogbmVzdGVkIG11bHRpLWxpbmUgc3Vic2hlbGwgbm90IHByZXNlbnRseSBjaGVja2VkIGZvciBtaXNzaW5nICImJiIKKwkJZWNobyBhCisJCWVjaG8gYgorCSkgPmZpbGUKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L29uZS1saW5lci5leHBlY3QgYi90L2NoYWlubGludC9vbmUtbGluZXIuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzN2YyMjcKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9vbmUtbGluZXIuZXhwZWN0CkBAIC0wLDAgKzEsOSBAQAorKGZvbyAmJiBiYXIpICYmCisoZm9vICYmIGJhcikgfAorKGZvbyAmJiBiYXIpID5iYXogJiYKKworPyFTRU1JPyEoZm9vOyBiYXIpICYmCis/IVNFTUk/IShmb287IGJhcikgfAorPyFTRU1JPyEoZm9vOyBiYXIpID5iYXoKKworKGZvbyAiYmFyOyBiYXoiKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvb25lLWxpbmVyLnRlc3QgYi90L2NoYWlubGludC9vbmUtbGluZXIudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzlhY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvb25lLWxpbmVyLnRlc3QKQEAgLTAsMCArMSwxMiBAQAorIyBMSU5UOiB0b3AtbGV2ZWwgb25lLWxpbmVyIHN1YnNoZWxsCisoZm9vICYmIGJhcikgJiYKKyhmb28gJiYgYmFyKSB8CisoZm9vICYmIGJhcikgPmJheiAmJgorCisjIExJTlQ6IHRvcC1sZXZlbCBvbmUtbGluZXIgc3Vic2hlbGwgbWlzc2luZyBpbnRlcm5hbCAiJiYiCisoZm9vOyBiYXIpICYmCisoZm9vOyBiYXIpIHwKKyhmb287IGJhcikgPmJhegorCisjIExJTlQ6ICI7IiBpbiBzdHJpbmcgbm90IG1pc2ludGVycHJldGVkIGFzIGJyb2tlbiAmJi1jaGFpbgorKGZvbyAiYmFyOyBiYXoiKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvcDQtZmlsZXNwZWMuZXhwZWN0IGIvdC9jaGFpbmxpbnQvcDQtZmlsZXNwZWMuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YjNkODgKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9wNC1maWxlc3BlYy5leHBlY3QKQEAgLTAsMCArMSw0IEBACisoCisJcDQgcHJpbnQgLTEgLy9kZXBvdC9maWRkbGUjNDIgPmZpbGUgJiYKKwlmb29iYXIKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9wNC1maWxlc3BlYy50ZXN0IGIvdC9jaGFpbmxpbnQvcDQtZmlsZXNwZWMudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmQyZDZlCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvcDQtZmlsZXNwZWMudGVzdApAQCAtMCwwICsxLDUgQEAKKygKKyMgTElOVDogUGVyZm9yY2UgcmV2c3BlYyBpbiBmaWxlc3BlYyBub3QgbWlzaW50ZXJwcmV0ZWQgYXMgaW4tbGluZSBjb21tZW50CisJcDQgcHJpbnQgLTEgLy9kZXBvdC9maWRkbGUjNDIgPmZpbGUgJiYKKwlmb29iYXIKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L3BpcGUuZXhwZWN0IGIvdC9jaGFpbmxpbnQvcGlwZS5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjExYjkwMQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L3BpcGUuZXhwZWN0CkBAIC0wLDAgKzEsOCBAQAorKAorCWZvbyB8CisJYmFyIHwKKwliYXogJiYKKwlmaXNoIHwKKz8hQU1QPyEJY293CisJc3VuZGVyCis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvcGlwZS50ZXN0IGIvdC9jaGFpbmxpbnQvcGlwZS50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YWY0ZGUKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9waXBlLnRlc3QKQEAgLTAsMCArMSwxMiBAQAorKAorIyBMSU5UOiBubyAiJiYiIG5lZWRlZCBvbiBsaW5lIGVuZGluZyB3aXRoICJ8IgorCWZvbyB8CisJYmFyIHwKKwliYXogJiYKKworIyBMSU5UOiBmaW5hbCBsaW5lIG9mIHBpcGUgc2VxdWVuY2UgKCdjb3cnKSBsYWNraW5nICImJiIKKwlmaXNoIHwKKwljb3cKKworCXN1bmRlcgorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvc2VtaWNvbG9uLmV4cGVjdCBiL3QvY2hhaW5saW50L3NlbWljb2xvbi5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3OTM4NAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L3NlbWljb2xvbi5leHBlY3QKQEAgLTAsMCArMSwyMCBAQAorKAorPyFBTVA/IT8hU0VNST8hCWNhdCBmb28gOyBlY2hvIGJhcgorPyFTRU1JPyEJY2F0IGZvbyA7IGVjaG8gYmFyCis+KSAmJgorKAorPyFTRU1JPyEJY2F0IGZvbyA7IGVjaG8gYmFyICYmCis/IVNFTUk/IQljYXQgZm9vIDsgZWNobyBiYXIKKz4pICYmCisoCisJZWNobyAiZm9vOyBiYXIiICYmCis/IVNFTUk/IQljYXQgZm9vOyBlY2hvIGJhcgorPikgJiYKKygKKz8hU0VNST8hCWZvbzsKKz4pICYmCisoCitjZCBmb28gJiYKKwlmb3IgaSBpbiBhIGIgYzsgZG8KKz8hU0VNST8hCQllY2hvOworPglkb25lKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvc2VtaWNvbG9uLnRlc3QgYi90L2NoYWlubGludC9zZW1pY29sb24udGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODJjOGViCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvc2VtaWNvbG9uLnRlc3QKQEAgLTAsMCArMSwyNSBAQAorKAorIyBMSU5UOiBtaXNzaW5nIGludGVybmFsICImJiIgYW5kIGVuZGluZyAiJiYiCisJY2F0IGZvbyA7IGVjaG8gYmFyCisjIExJTlQ6IGZpbmFsIHN0YXRlbWVudCBiZWZvcmUgIikiIG9ubHkgbWlzc2luZyBpbnRlcm5hbCAiJiYiCisJY2F0IGZvbyA7IGVjaG8gYmFyCispICYmCisoCisjIExJTlQ6IG1pc3NpbmcgaW50ZXJuYWwgIiYmIgorCWNhdCBmb28gOyBlY2hvIGJhciAmJgorCWNhdCBmb28gOyBlY2hvIGJhcgorKSAmJgorKAorIyBMSU5UOiBub3QgZm9vbGVkIGJ5IHNlbWljb2xvbiBpbiBzdHJpbmcKKwllY2hvICJmb287IGJhciIgJiYKKwljYXQgZm9vOyBlY2hvIGJhcgorKSAmJgorKAorIyBMSU5UOiB1bm5lY2Vzc2FyeSB0ZXJtaW5hdGluZyBzZW1pY29sb24KKwlmb287CispICYmCisoY2QgZm9vICYmCisJZm9yIGkgaW4gYSBiIGM7IGRvCisjIExJTlQ6IHVubmVjZXNzYXJ5IHRlcm1pbmF0aW5nIHNlbWljb2xvbgorCQllY2hvOworCWRvbmUpCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9zdWJzaGVsbC1oZXJlLWRvYy5leHBlY3QgYi90L2NoYWlubGludC9zdWJzaGVsbC1oZXJlLWRvYy5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3MjNlNwotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L3N1YnNoZWxsLWhlcmUtZG9jLmV4cGVjdApAQCAtMCwwICsxLDExIEBACisoCisJZWNobyB3b2JiYSAJICAgICAgIGdvcmdvIHNub290IAkgICAgICAgd2FmdGEgc251cmIgJiYKKz8hQU1QPyEJY2F0ID5iaXAKKwllY2hvID5ib3AKKz4pICYmCisoCisJY2F0ID5idXAgJiYKKwljYXQgPmJ1cDIgJiYKKwljYXQgPmJ1cDMgJiYKKwltZWVwCis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvc3Vic2hlbGwtaGVyZS1kb2MudGVzdCBiL3QvY2hhaW5saW50L3N1YnNoZWxsLWhlcmUtZG9jLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZiM2JhNAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L3N1YnNoZWxsLWhlcmUtZG9jLnRlc3QKQEAgLTAsMCArMSwzOSBAQAorKAorIyBMSU5UOiBzdGl0Y2ggdG9nZXRoZXIgaW5jb21wbGV0ZSBcLWVuZGluZyBsaW5lcworIyBMSU5UOiBzd2FsbG93IGhlcmUtZG9jIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlcyBpbiBjb250ZW50CisJZWNobyB3b2JiYSBcCisJICAgICAgIGdvcmdvIHNub290IFwKKwkgICAgICAgd2FmdGEgc251cmIgPDwtRU9GICYmCisJcXVvdGggdGhlIHJhdmVuLAorCW5ldmVybW9yZS4uLgorCUVPRgorCisjIExJTlQ6IG1pc3NpbmcgIiYmIiBvbiAnY2F0JworCWNhdCA8PEVPRiA+YmlwCisJZmlzaCBmbHkgaGlnaAorCUVPRgorCisjIExJTlQ6IHN3YWxsb3cgaGVyZS1kb2MgKEVPRiBpcyBsYXN0IGxpbmUgb2Ygc3Vic2hlbGwpCisJZWNobyA8PC1cRU9GID5ib3AKKwlnb21legorCW1vcnRpY2lhCisJd2VkbmVzZGF5CisJcHVnc2x5CisJRU9GCispICYmCisoCisjIExJTlQ6IHN3YWxsb3cgaGVyZS1kb2Mgd2l0aCBhcmJpdHJhcnkgdGFnCisJY2F0IDw8LVxBUkJJVFJBUlkgPmJ1cCAmJgorCWdsaW5rCisJRklaWgorCUFSQklUUkFSWQorCWNhdCA8PC0nQVJCSVRSQVJZMicgPmJ1cDIgJiYKKwlnbGluaworCUZJWloKKwlBUkJJVFJBUlkyCisJY2F0IDw8LSJBUkJJVFJBUlkzIiA+YnVwMyAmJgorCWdsaW5rCisJRklaWgorCUFSQklUUkFSWTMKKwltZWVwCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9zdWJzaGVsbC1vbmUtbGluZXIuZXhwZWN0IGIvdC9jaGFpbmxpbnQvc3Vic2hlbGwtb25lLWxpbmVyLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTE2MjgyCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvc3Vic2hlbGwtb25lLWxpbmVyLmV4cGVjdApAQCAtMCwwICsxLDE0IEBACisoCisJKGZvbyAmJiBiYXIpICYmCisJKGZvbyAmJiBiYXIpIHwKKwkoZm9vICYmIGJhcikgPmJheiAmJgorPyFTRU1JPyEJKGZvbzsgYmFyKSAmJgorPyFTRU1JPyEJKGZvbzsgYmFyKSB8Cis/IVNFTUk/IQkoZm9vOyBiYXIpID5iYXogJiYKKwkoZm9vIHx8IGV4aXQgMSkgJiYKKwkoZm9vIHx8IGV4aXQgMSkgfAorCShmb28gfHwgZXhpdCAxKSA+YmF6ICYmCis/IUFNUD8hCShmb28gJiYgYmFyKQorPyFBTVA/IT8hU0VNST8hCShmb28gJiYgYmFyOyBiYXopCisJZm9vYmFyCis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvc3Vic2hlbGwtb25lLWxpbmVyLnRlc3QgYi90L2NoYWlubGludC9zdWJzaGVsbC1vbmUtbGluZXIudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2ZhNjQzCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvc3Vic2hlbGwtb25lLWxpbmVyLnRlc3QKQEAgLTAsMCArMSwyNCBAQAorKAorIyBMSU5UOiBuZXN0ZWQgb25lLWxpbmVyIHN1YnNoZWxsCisJKGZvbyAmJiBiYXIpICYmCisJKGZvbyAmJiBiYXIpIHwKKwkoZm9vICYmIGJhcikgPmJheiAmJgorCisjIExJTlQ6IG5lc3RlZCBvbmUtbGluZXIgc3Vic2hlbGwgbWlzc2luZyBpbnRlcm5hbCAiJiYiCisJKGZvbzsgYmFyKSAmJgorCShmb287IGJhcikgfAorCShmb287IGJhcikgPmJheiAmJgorCisjIExJTlQ6IG5lc3RlZCBvbmUtbGluZXIgc3Vic2hlbGwgd2l0aCAifHwgZXhpdCIKKwkoZm9vIHx8IGV4aXQgMSkgJiYKKwkoZm9vIHx8IGV4aXQgMSkgfAorCShmb28gfHwgZXhpdCAxKSA+YmF6ICYmCisKKyMgTElOVDogbmVzdGVkIG9uZS1saW5lciBzdWJzaGVsbCBsYWNraW5nIGVuZGluZyAiJiYiCisJKGZvbyAmJiBiYXIpCisKKyMgTElOVDogbmVzdGVkIG9uZS1saW5lciBzdWJzaGVsbCBtaXNzaW5nIGludGVybmFsICImJiIgYW5kIGxhY2tpbmcgZW5kaW5nICImJiIKKwkoZm9vICYmIGJhcjsgYmF6KQorCisJZm9vYmFyCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC90NzkwMC1zdWJ0cmVlLmV4cGVjdCBiL3QvY2hhaW5saW50L3Q3OTAwLXN1YnRyZWUuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OTEzNDIKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC90NzkwMC1zdWJ0cmVlLmV4cGVjdApAQCAtMCwwICsxLDEwIEBACisoCisJY2hrcz0ic3ViMXN1YjJzdWIzc3ViNCIgJiYKKwljaGtzX3N1Yj0kKGNhdCB8IHNlZCAncyxeLHN1YiBkaXIvLCcKKz4+KSAmJgorCWNoa21zPSJtYWluLXN1YjFtYWluLXN1YjJtYWluLXN1YjNtYWluLXN1YjQiICYmCisJY2hrbXNfc3ViPSQoY2F0IHwgc2VkICdzLF4sc3ViIGRpci8sJworPj4pICYmCisJc3ViZmlsZXM9JChnaXQgbHMtZmlsZXMpICYmCisJY2hlY2tfZXF1YWwgIiRzdWJmaWxlcyIgIiRjaGttcyRjaGtzIgorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L3Q3OTAwLXN1YnRyZWUudGVzdCBiL3QvY2hhaW5saW50L3Q3OTAwLXN1YnRyZWUudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzdkODM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvdDc5MDAtc3VidHJlZS50ZXN0CkBAIC0wLDAgKzEsMjIgQEAKKygKKwljaGtzPSJzdWIxCitzdWIyCitzdWIzCitzdWI0IiAmJgorCWNoa3Nfc3ViPSQoY2F0IDw8VFhUIHwgc2VkICdzLF4sc3ViIGRpci8sJworJGNoa3MKK1RYVAorKSAmJgorCWNoa21zPSJtYWluLXN1YjEKK21haW4tc3ViMgorbWFpbi1zdWIzCittYWluLXN1YjQiICYmCisJY2hrbXNfc3ViPSQoY2F0IDw8VFhUIHwgc2VkICdzLF4sc3ViIGRpci8sJworJGNoa21zCitUWFQKKykgJiYKKworCXN1YmZpbGVzPSQoZ2l0IGxzLWZpbGVzKSAmJgorCWNoZWNrX2VxdWFsICIkc3ViZmlsZXMiICIkY2hrbXMKKyRjaGtzIgorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvd2hpbGUtbG9vcC5leHBlY3QgYi90L2NoYWlubGludC93aGlsZS1sb29wLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2NmZjJjCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvd2hpbGUtbG9vcC5leHBlY3QKQEAgLTAsMCArMSwxMSBAQAorKAorCXdoaWxlIHRydWUKKwlkbworPyFBTVA/IQkJZWNobyBmb28KKwkJY2F0Cis/IUFNUD8hCWRvbmUKKwl3aGlsZSB0cnVlOyBkbworCQllY2hvIGZvbyAmJgorCQljYXQgYmFyCisJZG9uZQorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L3doaWxlLWxvb3AudGVzdCBiL3QvY2hhaW5saW50L3doaWxlLWxvb3AudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWRmMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvd2hpbGUtbG9vcC50ZXN0CkBAIC0wLDAgKzEsMTkgQEAKKygKKyMgTElOVDogJ3doaWxlLCAnZG8nLCAnZG9uZScgZG8gbm90IG5lZWQgIiYmIgorCXdoaWxlIHRydWUKKwlkbworIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJ2VjaG8nCisJCWVjaG8gZm9vCisjIExJTlQ6IGxhc3Qgc3RhdGVtZW50IG9mIHdoaWxlIGRvZXMgbm90IG5lZWQgIiYmIgorCQljYXQgPDwtXEVPRgorCQliYXIKKwkJRU9GCisjIExJTlQ6IG1pc3NpbmcgIiYmIiBvbiAnZG9uZScKKwlkb25lCisKKyMgTElOVDogJ2RvJyBvbiBzYW1lIGxpbmUgYXMgJ3doaWxlJworCXdoaWxlIHRydWU7IGRvCisJCWVjaG8gZm9vICYmCisJCWNhdCBiYXIKKwlkb25lCispCmRpZmYgLS1naXQgYS90L2NoZWNrLW5vbi1wb3J0YWJsZS1zaGVsbC5wbCBiL3QvY2hlY2stbm9uLXBvcnRhYmxlLXNoZWxsLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkMzMwMzUKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoZWNrLW5vbi1wb3J0YWJsZS1zaGVsbC5wbApAQCAtMCwwICsxLDU1IEBACisjIS91c3IvYmluL3BlcmwKKworIyBUZXN0IHQwMDAwLi50OTk5OS5zaCBmb3Igbm9uIHBvcnRhYmxlIHNoZWxsIHNjcmlwdHMKKyMgVGhpcyBzY3JpcHQgY2FuIGJlIGNhbGxlZCB3aXRoIG9uZSBvciBtb3JlIGZpbGVuYW1lcyBhcyBwYXJhbWV0ZXJzCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK215ICRleGl0X2NvZGU9MDsKK215ICVmdW5jOworCitzdWIgZXJyIHsKKwlteSAkbXNnID0gc2hpZnQ7CisJcy9eXHMrLy87CisJcy9ccyskLy87CisJcy9ccysvIC9nOworCXByaW50ICIkQVJHVjokLjogZXJyb3I6ICRtc2c6ICRfXG4iOworCSRleGl0X2NvZGUgPSAxOworfQorCisjIGdsZWFuIG5hbWVzIG9mIHNoZWxsIGZ1bmN0aW9ucworZm9yIG15ICRpIChAQVJHVikgeworCW9wZW4obXkgJGYsICc8JywgJGkpIG9yIGRpZSAiJDA6ICRpOiAkIVxuIjsKKwl3aGlsZSAoPCRmPikgeworCQkkZnVuY3skMX0gPSAxIGlmIC9eXHMqKFx3KylccypcKFwpXHMqe1xzKiQvOworCX0KKwljbG9zZSAkZjsKK30KKworbXkgJGxpbmUgPSAnJzsKK3doaWxlICg8PikgeworCWNob21wOworCSRsaW5lIC49ICRfOworCSMgc3RpdGNoIHRvZ2V0aGVyIGluY29tcGxldGUgbGluZXMgKHRob3NlIGVuZGluZyB3aXRoICJcIikKKwluZXh0IGlmICRsaW5lID1+IHMvXFwkLy87CisKKwkkXyA9ICRsaW5lOworCS9cYmNwXHMrLWEvIGFuZCBlcnIgJ2NwIC1hIGlzIG5vdCBwb3J0YWJsZSc7CisJL1xic2VkXHMrLVteZWZuXVxzKy8gYW5kIGVyciAnc2VkIG9wdGlvbiBub3QgcG9ydGFibGUgKHVzZSBvbmx5IC1uLCAtZSwgLWYpJzsKKwkvXGJlY2hvXHMrLVtuZUVdLyBhbmQgZXJyICdlY2hvIHdpdGggb3B0aW9uIGlzIG5vdCBwb3J0YWJsZSAodXNlIHByaW50ZiknOworCS9eXHMqZGVjbGFyZVxzKy8gYW5kIGVyciAnYXJyYXlzL2RlY2xhcmUgbm90IHBvcnRhYmxlJzsKKwkvXlxzKlteI11ccyp3aGljaFxzLyBhbmQgZXJyICd3aGljaCBpcyBub3QgcG9ydGFibGUgKHVzZSB0eXBlKSc7CisJL1xidGVzdFxzK1tePV0qPT0vIGFuZCBlcnIgJyJ0ZXN0IGEgPT0gYiIgaXMgbm90IHBvcnRhYmxlICh1c2UgPSknOworCS9cYndjIC1sLioiXHMqPS8gYW5kIGVyciAnYCIkKHdjIC1sKSJgIGlzIG5vdCBwb3J0YWJsZSAodXNlIHRlc3RfbGluZV9jb3VudCknOworCS9cYmhlYWRccystY1xiLyBhbmQgZXJyICdoZWFkIC1jIGlzIG5vdCBwb3J0YWJsZSAodXNlIHRlc3RfY29weV9ieXRlcyBCWVRFUyA8ZmlsZSA+b3V0KSc7CisJLyg/OlwkXChzZXF8XlxzKnNlcVxiKS8gYW5kIGVyciAnc2VxIGlzIG5vdCBwb3J0YWJsZSAodXNlIHRlc3Rfc2VxKSc7CisJL1xiZ3JlcFxiLiotLWZpbGVcYi8gYW5kIGVyciAnZ3JlcCAtLWZpbGUgRklMRSBpcyBub3QgcG9ydGFibGUgKHVzZSBncmVwIC1mIEZJTEUpJzsKKwkvXGJleHBvcnRccytbQS1aYS16MC05X10qPS8gYW5kIGVyciAnImV4cG9ydCBGT089YmFyIiBpcyBub3QgcG9ydGFibGUgKHVzZSBGT089YmFyICYmIGV4cG9ydCBGT08pJzsKKwkvXlxzKihbQS1aMC05X10rPShcdyp8KFsiJ10pLio/XDMpXHMrKSsoXHcrKS8gYW5kIGV4aXN0cygkZnVuY3skNH0pIGFuZAorCQllcnIgJyJGT089YmFyIHNoZWxsX2Z1bmMiIGFzc2lnbm1lbnQgZXh0ZW5kcyBiZXlvbmQgInNoZWxsX2Z1bmMiJzsKKwkkbGluZSA9ICcnOworCSMgdGhpcyByZXNldHMgb3VyICQuIGZvciBlYWNoIGZpbGUKKwljbG9zZSBBUkdWIGlmIGVvZjsKK30KK2V4aXQgJGV4aXRfY29kZTsKZGlmZiAtLWdpdCBhL3QvZGlmZi1saWIuc2ggYi90L2RpZmYtbGliLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZTg4MGYKLS0tIC9kZXYvbnVsbAorKysgYi90L2RpZmYtbGliLnNoCkBAIC0wLDAgKzEsMzkgQEAKKzoKKworc2FuaXRpemVfZGlmZl9yYXc9Jy9eOi9zLyAnIlwoJE9JRF9SRUdFWFwpIicgJyJcKCRPSURfUkVHRVhcKSInIFwoW0EtWl1cKVswLTldKgkvIFwxIFwyIFwzIwkvJworY29tcGFyZV9kaWZmX3JhdyAoKSB7CisgICAgIyBXaGVuIGhldXJpc3RpY3MgYXJlIGltcHJvdmVkLCB0aGUgc2NvcmUgbnVtYmVycyB3b3VsZCBjaGFuZ2UuCisgICAgIyBJZ25vcmUgdGhlbSB3aGlsZSBjb21wYXJpbmcuCisgICAgIyBBbHNvIHdlIGRvIG5vdCBjaGVjayBTSEExIGhhc2ggZ2VuZXJhdGlvbiBpbiB0aGlzIHRlc3QsIHdoaWNoCisgICAgIyBpcyBhIGpvYiBmb3IgdDAwMDAtYmFzaWMuc2gKKworICAgIHNlZCAtZSAiJHNhbml0aXplX2RpZmZfcmF3IiA8IiQxIiA+LnRtcC0xCisgICAgc2VkIC1lICIkc2FuaXRpemVfZGlmZl9yYXciIDwiJDIiID4udG1wLTIKKyAgICB0ZXN0X2NtcCAudG1wLTEgLnRtcC0yICYmIHJtIC1mIC50bXAtMSAudG1wLTIKK30KKworc2FuaXRpemVfZGlmZl9yYXdfej0nL146L3MvICciJE9JRF9SRUdFWCInICciJE9JRF9SRUdFWCInIFwoW0EtWl1cKVswLTldKiQvIFggWCBcMSMvJworY29tcGFyZV9kaWZmX3Jhd196ICgpIHsKKyAgICAjIFdoZW4gaGV1cmlzdGljcyBhcmUgaW1wcm92ZWQsIHRoZSBzY29yZSBudW1iZXJzIHdvdWxkIGNoYW5nZS4KKyAgICAjIElnbm9yZSB0aGVtIHdoaWxlIGNvbXBhcmluZy4KKyAgICAjIEFsc28gd2UgZG8gbm90IGNoZWNrIFNIQTEgaGFzaCBnZW5lcmF0aW9uIGluIHRoaXMgdGVzdCwgd2hpY2gKKyAgICAjIGlzIGEgam9iIGZvciB0MDAwMC1iYXNpYy5zaAorCisgICAgcGVybCAtcGUgJ3kvXDAwMC9cMDEyLycgPCIkMSIgfCBzZWQgLWUgIiRzYW5pdGl6ZV9kaWZmX3Jhd196IiA+LnRtcC0xCisgICAgcGVybCAtcGUgJ3kvXDAwMC9cMDEyLycgPCIkMiIgfCBzZWQgLWUgIiRzYW5pdGl6ZV9kaWZmX3Jhd196IiA+LnRtcC0yCisgICAgdGVzdF9jbXAgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCit9CisKK2NvbXBhcmVfZGlmZl9wYXRjaCAoKSB7CisgICAgIyBXaGVuIGhldXJpc3RpY3MgYXJlIGltcHJvdmVkLCB0aGUgc2NvcmUgbnVtYmVycyB3b3VsZCBjaGFuZ2UuCisgICAgIyBJZ25vcmUgdGhlbSB3aGlsZSBjb21wYXJpbmcuCisgICAgc2VkIC1lICcKKwkvXltkaXNdKmltaWxhcml0eSBpbmRleCBbMC05XSolJC9kCisJL15pbmRleCBbMC05YS1mXSpcLlwuWzAtOWEtZl0vZAorICAgICcgPCIkMSIgPi50bXAtMQorICAgIHNlZCAtZSAnCisJL15bZGlzXSppbWlsYXJpdHkgaW5kZXggWzAtOV0qJSQvZAorCS9eaW5kZXggWzAtOWEtZl0qXC5cLlswLTlhLWZdL2QKKyAgICAnIDwiJDIiID4udG1wLTIKKyAgICB0ZXN0X2NtcCAudG1wLTEgLnRtcC0yICYmIHJtIC1mIC50bXAtMSAudG1wLTIKK30KZGlmZiAtLWdpdCBhL3QvZGlmZi1saWIvQ09QWUlORyBiL3QvZGlmZi1saWIvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmY4N2M0Ci0tLSAvZGV2L251bGwKKysrIGIvdC9kaWZmLWxpYi9DT1BZSU5HCkBAIC0wLDAgKzEsMzYxIEBACisKKyBOb3RlIHRoYXQgdGhlIG9ubHkgdmFsaWQgdmVyc2lvbiBvZiB0aGUgR1BMIGFzIGZhciBhcyB0aGlzIHByb2plY3QKKyBpcyBjb25jZXJuZWQgaXMgX3RoaXNfIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSAoaWUgdjIsIG5vdAorIHYyLjIgb3IgdjMueCBvciB3aGF0ZXZlciksIHVubGVzcyBleHBsaWNpdGx5IG90aGVyd2lzZSBzdGF0ZWQuCisKKyBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKKyBhIGdvb2QgaWRlYSwgSSBhbHNvIGFzayB0aGF0IHBlb3BsZSBpbnZvbHZlZCB3aXRoIHRoZSBwcm9qZWN0IG1ha2UKKyB0aGVpciBwcmVmZXJlbmNlcyBrbm93bi4gSW4gcGFydGljdWxhciwgaWYgeW91IHRydXN0IG1lIHRvIG1ha2UgdGhhdAorIGRlY2lzaW9uLCB5b3UgbWlnaHQgbm90ZSBzbyBpbiB5b3VyIGNvcHlyaWdodCBtZXNzYWdlLCBpZSBzb21ldGhpbmcKKyBsaWtlCisKKwlUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Miwgb3IgYSBsYXRlciB2ZXJzaW9uCisJYXQgdGhlIGRpc2NyZXRpb24gb2YgTGludXMuCisKKyAgbWlnaHQgYXZvaWQgaXNzdWVzLiBCdXQgd2UgY2FuIGFsc28ganVzdCBkZWNpZGUgdG8gc3luY2hyb25pemUgYW5kCisgIGNvbnRhY3QgYWxsIGNvcHlyaWdodCBob2xkZXJzIG9uIHJlY29yZCBpZi93aGVuIHRoZSBvY2Nhc2lvbiBhcmlzZXMuCisKKwkJCUxpbnVzIFRvcnZhbGRzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3QvZGlmZi1saWIvUkVBRE1FIGIvdC9kaWZmLWxpYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4MTQyYwotLS0gL2Rldi9udWxsCisrKyBiL3QvZGlmZi1saWIvUkVBRE1FCkBAIC0wLDAgKzEsNDYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCUdJVCAtIHRoZSBzdHVwaWQgY29udGVudCB0cmFja2VyCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworImdpdCIgY2FuIG1lYW4gYW55dGhpbmcsIGRlcGVuZGluZyBvbiB5b3VyIG1vb2QuCisKKyAtIHJhbmRvbSB0aHJlZS1sZXR0ZXIgY29tYmluYXRpb24gdGhhdCBpcyBwcm9ub3VuY2VhYmxlLCBhbmQgbm90CisgICBhY3R1YWxseSB1c2VkIGJ5IGFueSBjb21tb24gVU5JWCBjb21tYW5kLiAgVGhlIGZhY3QgdGhhdCBpdCBpcyBhCisgICBtaXNwcm9udW5jaWF0aW9uIG9mICJnZXQiIG1heSBvciBtYXkgbm90IGJlIHJlbGV2YW50LgorIC0gc3R1cGlkLiBjb250ZW1wdGlibGUgYW5kIGRlc3BpY2FibGUuIHNpbXBsZS4gVGFrZSB5b3VyIHBpY2sgZnJvbSB0aGUKKyAgIGRpY3Rpb25hcnkgb2Ygc2xhbmcuCisgLSAiZ2xvYmFsIGluZm9ybWF0aW9uIHRyYWNrZXIiOiB5b3UncmUgaW4gYSBnb29kIG1vb2QsIGFuZCBpdCBhY3R1YWxseQorICAgd29ya3MgZm9yIHlvdS4gQW5nZWxzIHNpbmcsIGFuZCBhIGxpZ2h0IHN1ZGRlbmx5IGZpbGxzIHRoZSByb29tLgorIC0gImdvZGRhbW4gaWRpb3RpYyB0cnVja2xvYWQgb2Ygc2gqdCI6IHdoZW4gaXQgYnJlYWtzCisKK0dpdCBpcyBhIGZhc3QsIHNjYWxhYmxlLCBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbSB3aXRoIGFuCit1bnVzdWFsbHkgcmljaCBjb21tYW5kIHNldCB0aGF0IHByb3ZpZGVzIGJvdGggaGlnaC1sZXZlbCBvcGVyYXRpb25zCithbmQgZnVsbCBhY2Nlc3MgdG8gaW50ZXJuYWxzLgorCitHaXQgaXMgYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0l0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgd2l0aCBoZWxwIG9mIGEgZ3JvdXAgb2YKK2hhY2tlcnMgYXJvdW5kIHRoZSBuZXQuIEl0IGlzIGN1cnJlbnRseSBtYWludGFpbmVkIGJ5IEp1bmlvIEMgSGFtYW5vLgorCitQbGVhc2UgcmVhZCB0aGUgZmlsZSBJTlNUQUxMIGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgorU2VlIERvY3VtZW50YXRpb24vdHV0b3JpYWwudHh0IHRvIGdldCBzdGFydGVkLCB0aGVuIHNlZQorRG9jdW1lbnRhdGlvbi9ldmVyeWRheS50eHQgZm9yIGEgdXNlZnVsIG1pbmltdW0gc2V0IG9mIGNvbW1hbmRzLAorYW5kICJtYW4gZ2l0LWNvbW1hbmRuYW1lIiBmb3IgZG9jdW1lbnRhdGlvbiBvZiBlYWNoIGNvbW1hbmQuCitDVlMgdXNlcnMgbWF5IGFsc28gd2FudCB0byByZWFkIERvY3VtZW50YXRpb24vY3ZzLW1pZ3JhdGlvbi50eHQuCisKK01hbnkgR2l0IG9ubGluZSByZXNvdXJjZXMgYXJlIGFjY2Vzc2libGUgZnJvbSBodHRwOi8vZ2l0Lm9yLmN6LworaW5jbHVkaW5nIGZ1bGwgZG9jdW1lbnRhdGlvbiBhbmQgR2l0IHJlbGF0ZWQgdG9vbHMuCisKK1RoZSB1c2VyIGRpc2N1c3Npb24gYW5kIGRldmVsb3BtZW50IG9mIEdpdCB0YWtlIHBsYWNlIG9uIHRoZSBHaXQKK21haWxpbmcgbGlzdCAtLSBldmVyeW9uZSBpcyB3ZWxjb21lIHRvIHBvc3QgYnVnIHJlcG9ydHMsIGZlYXR1cmUKK3JlcXVlc3RzLCBjb21tZW50cyBhbmQgcGF0Y2hlcyB0byBnaXRAdmdlci5rZXJuZWwub3JnLiBUbyBzdWJzY3JpYmUKK3RvIHRoZSBsaXN0LCBzZW5kIGFuIGVtYWlsIHdpdGgganVzdCAic3Vic2NyaWJlIGdpdCIgaW4gdGhlIGJvZHkgdG8KK21ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcuIFRoZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMgYXJlIGF2YWlsYWJsZSBhdAoraHR0cDovL21hcmMudGhlYWltc2dyb3VwLmNvbS8/bD1naXQgYW5kIG90aGVyIGFyY2hpdmFsIHNpdGVzLgorCitUaGUgbWVzc2FnZXMgdGl0bGVkICJBIG5vdGUgZnJvbSB0aGUgbWFpbnRhaW5lciIsICJXaGF0J3MgaW4KK2dpdC5naXQgKHN0YWJsZSkiIGFuZCAiV2hhdCdzIGNvb2tpbmcgaW4gZ2l0LmdpdCAodG9waWNzKSIgYW5kCit0aGUgZGlzY3Vzc2lvbiBmb2xsb3dpbmcgdGhlbSBvbiB0aGUgbWFpbGluZyBsaXN0IGdpdmUgYSBnb29kCityZWZlcmVuY2UgZm9yIHByb2plY3Qgc3RhdHVzLCBkZXZlbG9wbWVudCBkaXJlY3Rpb24gYW5kCityZW1haW5pbmcgdGFza3MuCmRpZmYgLS1naXQgYS90L2dpdHdlYi1saWIuc2ggYi90L2dpdHdlYi1saWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzMmNhNgotLS0gL2Rldi9udWxsCisrKyBiL3QvZ2l0d2ViLWxpYi5zaApAQCAtMCwwICsxLDEyMyBAQAorIyBJbml0aWFsaXphdGlvbiBhbmQgaGVscGVycyBmb3IgR2l0d2ViIHRlc3RzLCB3aGljaCBzb3VyY2UgdGhpcworIyBzaGVsbCBsaWJyYXJ5IGluc3RlYWQgb2YgdGVzdC1saWIuc2guCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKYWt1YiBOYXJlYnNraQorIworCitnaXR3ZWJfaW5pdCAoKSB7CisJc2FmZV9wd2Q9IiQocGVybCAtTVBPU0lYPWdldGN3ZCAtZSAncHJpbnQgcXVvdGVtZXRhKGdldGN3ZCknKSIKKwljYXQgPmdpdHdlYl9jb25maWcucGVybCA8PEVPRgorIyEvdXNyL2Jpbi9wZXJsCisKKyMgZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZm9yIHRlc3RzCisKK291ciBcJHZlcnNpb24gPSAnY3VycmVudCc7CitvdXIgXCRHSVQgPSAnZ2l0JzsKK291ciBcJHByb2plY3Ryb290ID0gIiRzYWZlX3B3ZCI7CitvdXIgXCRwcm9qZWN0X21heGRlcHRoID0gODsKK291ciBcJGhvbWVfbGlua19zdHIgPSAncHJvamVjdHMnOworb3VyIFwkc2l0ZV9uYW1lID0gJ1tsb2NhbGhvc3RdJzsKK291ciBcJHNpdGVfaHRtbF9oZWFkX3N0cmluZyA9ICcnOworb3VyIFwkc2l0ZV9oZWFkZXIgPSAnJzsKK291ciBcJHNpdGVfZm9vdGVyID0gJyc7CitvdXIgXCRob21lX3RleHQgPSAnaW5kZXh0ZXh0Lmh0bWwnOworb3VyIEBzdHlsZXNoZWV0cyA9ICgnZmlsZTovLy8kR0lUX0JVSUxEX0RJUi9naXR3ZWIvc3RhdGljL2dpdHdlYi5jc3MnKTsKK291ciBcJGxvZ28gPSAnZmlsZTovLy8kR0lUX0JVSUxEX0RJUi9naXR3ZWIvc3RhdGljL2dpdC1sb2dvLnBuZyc7CitvdXIgXCRmYXZpY29uID0gJ2ZpbGU6Ly8vJEdJVF9CVUlMRF9ESVIvZ2l0d2ViL3N0YXRpYy9naXQtZmF2aWNvbi5wbmcnOworb3VyIFwkcHJvamVjdHNfbGlzdCA9ICcnOworb3VyIFwkZXhwb3J0X29rID0gJyc7CitvdXIgXCRzdHJpY3RfZXhwb3J0ID0gJyc7CitvdXIgXCRtYXhsb2FkID0gdW5kZWY7CisKK0VPRgorCisJY2F0ID4uZ2l0L2Rlc2NyaXB0aW9uIDw8RU9GCiskMCB0ZXN0IHJlcG9zaXRvcnkKK0VPRgorCisJIyBZb3UgY2FuIHNldCB0aGUgR0lUV0VCX1RFU1RfSU5TVEFMTEVEIGVudmlyb25tZW50IHZhcmlhYmxlIHRvCisJIyB0aGUgZ2l0d2ViZGlyICh0aGUgZGlyZWN0b3J5IHdoZXJlIGdpdHdlYiBpcyBpbnN0YWxsZWQgLyBkZXBsb3llZCB0bykKKwkjIG9mIGFuIGV4aXN0aW5nIGdpdHdlYiBpbnN0YWxsYXRpb24gdG8gdGVzdCB0aGF0IGluc3RhbGxhdGlvbiwKKwkjIG9yIHNpbXBseSB0byBwYXRobmFtZSBvZiBpbnN0YWxsZWQgZ2l0d2ViIHNjcmlwdC4KKwlpZiB0ZXN0IC1uICIkR0lUV0VCX1RFU1RfSU5TVEFMTEVEIiA7IHRoZW4KKwkJaWYgdGVzdCAtZCAkR0lUV0VCX1RFU1RfSU5TVEFMTEVEOyB0aGVuCisJCQlTQ1JJUFRfTkFNRT0iJEdJVFdFQl9URVNUX0lOU1RBTExFRC9naXR3ZWIuY2dpIgorCQllbHNlCisJCQlTQ1JJUFRfTkFNRT0iJEdJVFdFQl9URVNUX0lOU1RBTExFRCIKKwkJZmkKKwkJdGVzdCAtZiAiJFNDUklQVF9OQU1FIiB8fAorCQllcnJvciAiQ2Fubm90IGZpbmQgZ2l0d2ViIGF0ICRHSVRXRUJfVEVTVF9JTlNUQUxMRUQuIgorCQlzYXkgIiMgVGVzdGluZyAkU0NSSVBUX05BTUUiCisJZWxzZSAjIG5vcm1hbCBjYXNlLCB1c2Ugc291cmNlIHZlcnNpb24gb2YgZ2l0d2ViCisJCVNDUklQVF9OQU1FPSIkR0lUX0JVSUxEX0RJUi9naXR3ZWIvZ2l0d2ViLnBlcmwiCisJZmkKKwlleHBvcnQgU0NSSVBUX05BTUUKK30KKworZ2l0d2ViX3J1biAoKSB7CisJR0FURVdBWV9JTlRFUkZBQ0U9J0NHSS8xLjEnCisJSFRUUF9BQ0NFUFQ9JyovKicKKwlSRVFVRVNUX01FVEhPRD0nR0VUJworCVFVRVJZX1NUUklORz0kMQorCVBBVEhfSU5GTz0kMgorCVJFUVVFU1RfVVJJPS9naXR3ZWIuY2dpJFBBVEhfSU5GTworCWV4cG9ydCBHQVRFV0FZX0lOVEVSRkFDRSBIVFRQX0FDQ0VQVCBSRVFVRVNUX01FVEhPRCBcCisJCVFVRVJZX1NUUklORyBQQVRIX0lORk8gUkVRVUVTVF9VUkkKKworCUdJVFdFQl9DT05GSUc9JChwd2QpL2dpdHdlYl9jb25maWcucGVybAorCWV4cG9ydCBHSVRXRUJfQ09ORklHCisKKwkjIHNvbWUgb2YgZ2l0IGNvbW1hbmRzIHdyaXRlIHRvIFNUREVSUiBvbiBlcnJvciwgYnV0IHRoaXMgaXMgbm90CisJIyB3cml0dGVuIHRvIHdlYiBzZXJ2ZXIgbG9ncywgc28gd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHRoYXQ6CisJIyB3ZSBhcmUgaW50ZXJlc3RlZCBvbmx5IGluIHByb3Blcmx5IGZvcm1hdHRlZCBlcnJvcnMvd2FybmluZ3MKKwlybSAtZiBnaXR3ZWIubG9nICYmCisJcGVybCAtLSAiJFNDUklQVF9OQU1FIiBcCisJCT5naXR3ZWIub3V0cHV0IDI+Z2l0d2ViLmxvZyAmJgorCXBlcmwgLXcgLWUgJworCQlvcGVuIE8sICI+Z2l0d2ViLmhlYWRlcnMiOworCQl3aGlsZSAoPD4pIHsKKwkJCXByaW50IE87CisJCQlsYXN0IGlmICgvXlxyJC8gfHwgL14kLyk7CisJCX0KKwkJb3BlbiBPLCAiPmdpdHdlYi5ib2R5IjsKKwkJd2hpbGUgKDw+KSB7CisJCQlwcmludCBPOworCQl9CisJCWNsb3NlIE87CisJJyBnaXR3ZWIub3V0cHV0ICYmCisJaWYgZ3JlcCAnXltbXScgZ2l0d2ViLmxvZyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJdGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5sb2cgPiYyJyAmJgorCQlmYWxzZQorCWVsc2UKKwkJdHJ1ZQorCWZpCisKKwkjIGdpdHdlYi5sb2cgaXMgbGVmdCBmb3IgZGVidWdnaW5nCisJIyBnaXR3ZWIub3V0cHV0IGlzIHVzZWQgdG8gcGFyc2UgSFRUUCBvdXRwdXQKKwkjIGdpdHdlYi5oZWFkZXJzIGNvbnRhaW5zIG9ubHkgSFRUUCBoZWFkZXJzCisJIyBnaXR3ZWIuYm9keSBjb250YWlucyBib2R5IG9mIG1lc3NhZ2UsIHdpdGhvdXQgaGVhZGVycworfQorCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkw7IHRoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0d2ViIHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorCitwZXJsIC1NRW5jb2RlIC1lICckZT0iIjtkZWNvZGVfdXRmOCgkZSwgRW5jb2RlOjpGQl9DUk9BSyknID4vZGV2L251bGwgMj4mMSB8fCB7CisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdHdlYiB0ZXN0cywgcGVybCB2ZXJzaW9uIGlzIHRvbyBvbGQnCisJdGVzdF9kb25lCit9CisKK3BlcmwgLU1DR0kgLU1DR0k6OlV0aWwgLU1DR0k6OkNhcnAgLWUgMCA+L2Rldi9udWxsIDI+JjEgfHwgeworCXNraXBfYWxsPSdza2lwcGluZyBnaXR3ZWIgdGVzdHMsIENHSSAmIENHSTo6VXRpbCAmIENHSTo6Q2FycCBtb2R1bGVzIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCit9CisKK3BlcmwgLW1UaW1lOjpIaVJlcyAtZSAwID4vZGV2L251bGwgMj4mMSB8fCB7CisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdHdlYiB0ZXN0cywgVGltZTo6SGlSZXMgbW9kdWxlIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCit9CisKK2dpdHdlYl9pbml0CmRpZmYgLS1naXQgYS90L2hlbHBlci8uZ2l0aWdub3JlIGIvdC9oZWxwZXIvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGM3YmIwYmIKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNCBAQAorL3Rlc3QtdG9vbAorL3Rlc3QtZmFrZS1zc2gKKy90ZXN0LWxpbmUtYnVmZmVyCisvdGVzdC1zdm4tZmUKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtYWR2aXNlLmMgYi90L2hlbHBlci90ZXN0LWFkdmlzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Y2RjMjgKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWFkdmlzZS5jCkBAIC0wLDAgKzEsMjIgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImFkdmljZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorCitpbnQgY21kX19hZHZpc2VfaWZfZW5hYmxlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaWYgKCFhcmd2WzFdKQorCWRpZSgidXNhZ2U6ICVzIDxhZHZpY2U+IiwgYXJndlswXSk7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJLyoKKwkgKiBBbnkgYWR2aWNlIHR5cGUgY2FuIGJlIHVzZWQgZm9yIHRlc3RpbmcsIGJ1dCBORVNURURfVEFHIHdhcworCSAqIHNlbGVjdGVkIGhlcmUgYW5kIGluIHQwMDE4IHdoZXJlIHRoaXMgY29tbWFuZCBpcyBiZWluZworCSAqIGV4ZWN1dGVkLgorCSAqLworCWFkdmlzZV9pZl9lbmFibGVkKEFEVklDRV9ORVNURURfVEFHLCBhcmd2WzFdKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1ibG9vbS5jIGIvdC9oZWxwZXIvdGVzdC1ibG9vbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYWE4MGIKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWJsb29tLmMKQEAgLTAsMCArMSw5MyBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImJsb29tLmgiCisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisKK3N0YXRpYyBzdHJ1Y3QgYmxvb21fZmlsdGVyX3NldHRpbmdzIHNldHRpbmdzID0gREVGQVVMVF9CTE9PTV9GSUxURVJfU0VUVElOR1M7CisKK3N0YXRpYyB2b2lkIGFkZF9zdHJpbmdfdG9fZmlsdGVyKGNvbnN0IGNoYXIgKmRhdGEsIHN0cnVjdCBibG9vbV9maWx0ZXIgKmZpbHRlcikgeworCQlzdHJ1Y3QgYmxvb21fa2V5IGtleTsKKwkJaW50IGk7CisKKwkJZmlsbF9ibG9vbV9rZXkoZGF0YSwgc3RybGVuKGRhdGEpLCAma2V5LCAmc2V0dGluZ3MpOworCQlwcmludGYoIkhhc2hlczoiKTsKKwkJZm9yIChpID0gMDsgaSA8IHNldHRpbmdzLm51bV9oYXNoZXM7IGkrKyl7CisJCQlwcmludGYoIjB4JTA4eHwiLCBrZXkuaGFzaGVzW2ldKTsKKwkJfQorCQlwcmludGYoIlxuIik7CisJCWFkZF9rZXlfdG9fZmlsdGVyKCZrZXksIGZpbHRlciwgJnNldHRpbmdzKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfYmxvb21fZmlsdGVyKHN0cnVjdCBibG9vbV9maWx0ZXIgKmZpbHRlcikgeworCWludCBpOworCisJaWYgKCFmaWx0ZXIpIHsKKwkJcHJpbnRmKCJObyBmaWx0ZXIuXG4iKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGYoIkZpbHRlcl9MZW5ndGg6JWRcbiIsIChpbnQpZmlsdGVyLT5sZW4pOworCXByaW50ZigiRmlsdGVyX0RhdGE6Iik7CisJZm9yIChpID0gMDsgaSA8IGZpbHRlci0+bGVuOyBpKyspIHsKKwkJcHJpbnRmKCIlMDJ4fCIsIGZpbHRlci0+ZGF0YVtpXSk7CisJfQorCXByaW50ZigiXG4iKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2Jsb29tX2ZpbHRlcl9mb3JfY29tbWl0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmNvbW1pdF9vaWQpCit7CisJc3RydWN0IGNvbW1pdCAqYzsKKwlzdHJ1Y3QgYmxvb21fZmlsdGVyICpmaWx0ZXI7CisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCWMgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCBjb21taXRfb2lkKTsKKwlmaWx0ZXIgPSBnZXRfYmxvb21fZmlsdGVyKHRoZV9yZXBvc2l0b3J5LCBjLCAxKTsKKwlwcmludF9ibG9vbV9maWx0ZXIoZmlsdGVyKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmJsb29tX3VzYWdlID0gIlxuIgorIiAgdGVzdC10b29sIGJsb29tIGdldF9tdXJtdXIzIDxzdHJpbmc+XG4iCisiICB0ZXN0LXRvb2wgYmxvb20gZ2VuZXJhdGVfZmlsdGVyIDxzdHJpbmc+IFs8c3RyaW5nPi4uLl1cbiIKKyIgIHRlc3QtdG9vbCBnZXRfZmlsdGVyX2Zvcl9jb21taXQgPGNvbW1pdC1oZXg+XG4iOworCitpbnQgY21kX19ibG9vbShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaWYgKGFyZ2MgPCAyKQorCQl1c2FnZShibG9vbV91c2FnZSk7CisKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiZ2V0X211cm11cjMiKSkgeworCQl1aW50MzJfdCBoYXNoZWQ7CisJCWlmIChhcmdjIDwgMykKKwkJCXVzYWdlKGJsb29tX3VzYWdlKTsKKwkJaGFzaGVkID0gbXVybXVyM19zZWVkZWQoMCwgYXJndlsyXSwgc3RybGVuKGFyZ3ZbMl0pKTsKKwkJcHJpbnRmKCJNdXJtdXIzIEhhc2ggd2l0aCBzZWVkPTA6MHglMDh4XG4iLCBoYXNoZWQpOworCX0KKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJnZW5lcmF0ZV9maWx0ZXIiKSkgeworCQlzdHJ1Y3QgYmxvb21fZmlsdGVyIGZpbHRlcjsKKwkJaW50IGkgPSAyOworCQlmaWx0ZXIubGVuID0gIChzZXR0aW5ncy5iaXRzX3Blcl9lbnRyeSArIEJJVFNfUEVSX1dPUkQgLSAxKSAvIEJJVFNfUEVSX1dPUkQ7CisJCWZpbHRlci5kYXRhID0geGNhbGxvYyhmaWx0ZXIubGVuLCBzaXplb2YodW5zaWduZWQgY2hhcikpOworCisJCWlmIChhcmdjIC0gMSA8IGkpCisJCQl1c2FnZShibG9vbV91c2FnZSk7CisKKwkJd2hpbGUgKGFyZ3ZbaV0pIHsKKwkJCWFkZF9zdHJpbmdfdG9fZmlsdGVyKGFyZ3ZbaV0sICZmaWx0ZXIpOworCQkJaSsrOworCQl9CisKKwkJcHJpbnRfYmxvb21fZmlsdGVyKCZmaWx0ZXIpOworCX0KKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJnZXRfZmlsdGVyX2Zvcl9jb21taXQiKSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJY29uc3QgY2hhciAqZW5kOworCQlpZiAoYXJnYyA8IDMpCisJCQl1c2FnZShibG9vbV91c2FnZSk7CisJCWlmIChwYXJzZV9vaWRfaGV4KGFyZ3ZbMl0sICZvaWQsICZlbmQpKQorCQkJZGllKCJjYW5ub3QgcGFyc2Ugb2lkICclcyciLCBhcmd2WzJdKTsKKwkJaW5pdF9ibG9vbV9maWx0ZXJzKCk7CisJCWdldF9ibG9vbV9maWx0ZXJfZm9yX2NvbW1pdCgmb2lkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtY2htdGltZS5jIGIvdC9oZWxwZXIvdGVzdC1jaG10aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEyMmFmNAotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtY2htdGltZS5jCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogVGhpcyBwcm9ncmFtIGNhbiBlaXRoZXIgY2hhbmdlIG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBnaXZlbgorICogZmlsZShzKSBvciBqdXN0IHByaW50IGl0LiBUaGUgcHJvZ3JhbSBkb2VzIG5vdCBjaGFuZ2UgYXRpbWUgb3IKKyAqIGN0aW1lICh0aGVpciB2YWx1ZXMgYXJlIGV4cGxpY2l0bHkgcHJlc2VydmVkKS4KKyAqCisgKiBUaGUgbXRpbWUgY2FuIGJlIGNoYW5nZWQgdG8gYW4gYWJzb2x1dGUgdmFsdWU6CisgKgorICoJdGVzdC10b29sIGNobXRpbWUgPTxzZWNvbmRzPiBmaWxlLi4uCisgKgorICogUmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZSBhcyByZXR1cm5lZCBieSB0aW1lKDMpOgorICoKKyAqCXRlc3QtdG9vbCBjaG10aW1lID0rPHNlY29uZHM+IChvciA9LTxzZWNvbmRzPikgZmlsZS4uLgorICoKKyAqIE9yIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IG10aW1lIG9mIHRoZSBmaWxlOgorICoKKyAqCXRlc3QtdG9vbCBjaG10aW1lIDxzZWNvbmRzPiBmaWxlLi4uCisgKgl0ZXN0LXRvb2wgY2htdGltZSArPHNlY29uZHM+IChvciAtPHNlY29uZHM+KSBmaWxlLi4uCisgKgorICogRXhhbXBsZXM6CisgKgorICogVG8gcHJpbnQgdGhlIG10aW1lIGFuZCB0aGUgZmlsZSBuYW1lIHVzZSAtLXZlcmJvc2UgYW5kIHNldAorICogdGhlIGZpbGUgbXRpbWUgb2Zmc2V0IHRvIDA6CisgKgorICoJdGVzdC10b29sIGNobXRpbWUgLXYgKzAgZmlsZQorICoKKyAqIFRvIHByaW50IG9ubHkgdGhlIG10aW1lIHVzZSAtLWdldDoKKyAqCisgKgl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCBmaWxlCisgKgorICogVG8gc2V0IHRoZSBtdGltZSB0byBjdXJyZW50IHRpbWU6CisgKgorICoJdGVzdC10b29sIGNobXRpbWUgPSswIGZpbGUKKyAqCisgKiBUbyBzZXQgdGhlIGZpbGUgbXRpbWUgb2Zmc2V0IHRvICsxIGFuZCBwcmludCB0aGUgbmV3IHZhbHVlOgorICoKKyAqCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0ICsxIGZpbGUKKyAqCisgKi8KKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlIDx1dGltZS5oPgorCitzdGF0aWMgY29uc3QgY2hhciB1c2FnZV9zdHJbXSA9CisJIigtdnwtLXZlcmJvc2V8LWd8LS1nZXQpICgrfD18PSt8PS18LSk8c2Vjb25kcz4gPGZpbGU+Li4uIjsKKworc3RhdGljIGludCB0aW1lc3BlY19hcmcoY29uc3QgY2hhciAqYXJnLCBsb25nIGludCAqc2V0X3RpbWUsIGludCAqc2V0X2VxKQoreworCWNoYXIgKnRlc3Q7CisJY29uc3QgY2hhciAqdGltZXNwZWMgPSBhcmc7CisJKnNldF9lcSA9ICgqdGltZXNwZWMgPT0gJz0nKSA/IDEgOiAwOworCWlmICgqc2V0X2VxKSB7CisJCXRpbWVzcGVjKys7CisJCWlmICgqdGltZXNwZWMgPT0gJysnKSB7CisJCQkqc2V0X2VxID0gMjsgLyogcmVsYXRpdmUgImluIHRoZSBmdXR1cmUiICovCisJCQl0aW1lc3BlYysrOworCQl9CisJfQorCSpzZXRfdGltZSA9IHN0cnRvbCh0aW1lc3BlYywgJnRlc3QsIDEwKTsKKwlpZiAoKnRlc3QpIHsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgoKnNldF9lcSAmJiAqc2V0X3RpbWUgPCAwKSB8fCAqc2V0X2VxID09IDIpIHsKKwkJdGltZV90IG5vdyA9IHRpbWUoTlVMTCk7CisJCSpzZXRfdGltZSArPSBub3c7CisJfQorCXJldHVybiAxOworfQorCitpbnQgY21kX19jaG10aW1lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdGF0aWMgaW50IHZlcmJvc2U7CisJc3RhdGljIGludCBnZXQ7CisKKwlpbnQgaSA9IDE7CisJLyogbm8gbXRpbWUgY2hhbmdlIGJ5IGRlZmF1bHQgKi8KKwlpbnQgc2V0X2VxID0gMDsKKwlsb25nIGludCBzZXRfdGltZSA9IDA7CisKKwlpZiAoYXJnYyA8IDMpCisJCWdvdG8gdXNhZ2U7CisKKwlpZiAoc3RyY21wKGFyZ3ZbaV0sICItLWdldCIpID09IDAgfHwgc3RyY21wKGFyZ3ZbaV0sICItZyIpID09IDApIHsKKwkJZ2V0ID0gMTsKKwkJKytpOworCX0gZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItLXZlcmJvc2UiKSA9PSAwIHx8IHN0cmNtcChhcmd2W2ldLCAiLXYiKSA9PSAwKSB7CisJCXZlcmJvc2UgPSAxOworCQkrK2k7CisJfQorCisJaWYgKGkgPT0gYXJnYykgeworCQlnb3RvIHVzYWdlOworCX0KKworCWlmICh0aW1lc3BlY19hcmcoYXJndltpXSwgJnNldF90aW1lLCAmc2V0X2VxKSkgeworCQkrK2k7CisJfSBlbHNlIHsKKwkJaWYgKGdldCA9PSAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIk5vdCBhIGJhc2UtMTAgaW50ZWdlcjogJXNcbiIsIGFyZ3ZbaV0gKyAxKTsKKwkJCWdvdG8gdXNhZ2U7CisJCX0KKwl9CisKKwlpZiAoaSA9PSBhcmdjKQorCQlnb3RvIHVzYWdlOworCisJZm9yICg7IGkgPCBhcmdjOyBpKyspIHsKKwkJc3RydWN0IHN0YXQgc2I7CisJCXN0cnVjdCB1dGltYnVmIHV0YjsKKwkJdWludG1heF90IG10aW1lOworCisJCWlmIChzdGF0KGFyZ3ZbaV0sICZzYikgPCAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBzdGF0ICVzOiAlc1xuIiwKKwkJCSAgICAgICAgYXJndltpXSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybiAxOworCQl9CisKKyNpZmRlZiBHSVRfV0lORE9XU19OQVRJVkUKKwkJaWYgKCEoc2Iuc3RfbW9kZSAmIFNfSVdVU1IpICYmCisJCQkJY2htb2QoYXJndltpXSwgc2Iuc3RfbW9kZSB8IFNfSVdVU1IpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBtYWtlIHVzZXItd3JpdGFibGUgJXM6ICVzIiwKKwkJCQlhcmd2W2ldLCBzdHJlcnJvcihlcnJubykpOworCQkJcmV0dXJuIDE7CisJCX0KKyNlbmRpZgorCisJCXV0Yi5hY3RpbWUgPSBzYi5zdF9hdGltZTsKKwkJdXRiLm1vZHRpbWUgPSBzZXRfZXEgPyBzZXRfdGltZSA6IHNiLnN0X210aW1lICsgc2V0X3RpbWU7CisKKwkJbXRpbWUgPSB1dGIubW9kdGltZSA8IDAgPyAwOiB1dGIubW9kdGltZTsKKwkJaWYgKGdldCkgeworCQkJcHJpbnRmKCIlIlBSSXVNQVgiXG4iLCBtdGltZSk7CisJCX0gZWxzZSBpZiAodmVyYm9zZSkgeworCQkJcHJpbnRmKCIlIlBSSXVNQVgiXHQlc1xuIiwgbXRpbWUsIGFyZ3ZbaV0pOworCQl9CisKKwkJaWYgKHV0Yi5tb2R0aW1lICE9IHNiLnN0X210aW1lICYmIHV0aW1lKGFyZ3ZbaV0sICZ1dGIpIDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbW9kaWZ5IHRpbWUgb24gJXM6ICVzXG4iLAorCQkJICAgICAgICBhcmd2W2ldLCBzdHJlcnJvcihlcnJubykpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKwordXNhZ2U6CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgJXNcbiIsIGFyZ3ZbMF0sIHVzYWdlX3N0cik7CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWNvbmZpZy5jIGIvdC9oZWxwZXIvdGVzdC1jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzRjNzIyCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1jb25maWcuYwpAQCAtMCwwICsxLDE5NCBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBleHBvc2VzIHRoZSBDIEFQSSBvZiB0aGUgY29uZmlndXJhdGlvbiBtZWNoYW5pc20KKyAqIGFzIGEgc2V0IG9mIHNpbXBsZSBjb21tYW5kcyBpbiBvcmRlciB0byBmYWNpbGl0YXRlIHRlc3RpbmcuCisgKgorICogUmVhZHMgc3RkaW4gYW5kIHByaW50cyByZXN1bHQgb2YgY29tbWFuZCB0byBzdGRvdXQ6CisgKgorICogZ2V0X3ZhbHVlIC0+IHByaW50cyB0aGUgdmFsdWUgd2l0aCBoaWdoZXN0IHByaW9yaXR5IGZvciB0aGUgZW50ZXJlZCBrZXkKKyAqCisgKiBnZXRfdmFsdWVfbXVsdGkgLT4gcHJpbnRzIGFsbCB2YWx1ZXMgZm9yIHRoZSBlbnRlcmVkIGtleSBpbiBpbmNyZWFzaW5nIG9yZGVyCisgKgkJICAgICBvZiBwcmlvcml0eQorICoKKyAqIGdldF9pbnQgLT4gcHJpbnQgaW50ZWdlciB2YWx1ZSBmb3IgdGhlIGVudGVyZWQga2V5IG9yIGRpZQorICoKKyAqIGdldF9ib29sIC0+IHByaW50IGJvb2wgdmFsdWUgZm9yIHRoZSBlbnRlcmVkIGtleSBvciBkaWUKKyAqCisgKiBnZXRfc3RyaW5nIC0+IHByaW50IHN0cmluZyB2YWx1ZSBmb3IgdGhlIGVudGVyZWQga2V5IG9yIGRpZQorICoKKyAqIGNvbmZpZ3NldF9nZXRfdmFsdWUgLT4gcmV0dXJucyB2YWx1ZSB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5IGZvciB0aGUgZW50ZXJlZCBrZXkKKyAqIAkJCWZyb20gYSBjb25maWdfc2V0IGNvbnN0cnVjdGVkIGZyb20gZmlsZXMgZW50ZXJlZCBhcyBhcmd1bWVudHMuCisgKgorICogY29uZmlnc2V0X2dldF92YWx1ZV9tdWx0aSAtPiByZXR1cm5zIHZhbHVlX2xpc3QgZm9yIHRoZSBlbnRlcmVkIGtleSBzb3J0ZWQgaW4KKyAqIAkJCQlhc2NlbmRpbmcgb3JkZXIgb2YgcHJpb3JpdHkgZnJvbSBhIGNvbmZpZ19zZXQKKyAqIAkJCQljb25zdHJ1Y3RlZCBmcm9tIGZpbGVzIGVudGVyZWQgYXMgYXJndW1lbnRzLgorICoKKyAqIGl0ZXJhdGUgLT4gaXRlcmF0ZSBvdmVyIGFsbCB2YWx1ZXMgdXNpbmcgZ2l0X2NvbmZpZygpLCBhbmQgcHJpbnQgc29tZQorICogICAgICAgICAgICBkYXRhIGZvciBlYWNoCisgKgorICogRXhhbXBsZXM6CisgKgorICogVG8gcHJpbnQgdGhlIHZhbHVlIHdpdGggaGlnaGVzdCBwcmlvcml0eSBmb3Iga2V5ICJmb28uYkFyIEJhei5yb2NrIjoKKyAqIAl0ZXN0LXRvb2wgY29uZmlnIGdldF92YWx1ZSAiZm9vLmJBciBCYXoucm9jayIKKyAqCisgKi8KKworc3RhdGljIGludCBpdGVyYXRlX2NiKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJc3RhdGljIGludCBucjsKKworCWlmIChucisrKQorCQlwdXRjaGFyKCdcbicpOworCisJcHJpbnRmKCJrZXk9JXNcbiIsIHZhcik7CisJcHJpbnRmKCJ2YWx1ZT0lc1xuIiwgdmFsdWUgPyB2YWx1ZSA6ICIobnVsbCkiKTsKKwlwcmludGYoIm9yaWdpbj0lc1xuIiwgY3VycmVudF9jb25maWdfb3JpZ2luX3R5cGUoKSk7CisJcHJpbnRmKCJuYW1lPSVzXG4iLCBjdXJyZW50X2NvbmZpZ19uYW1lKCkpOworCXByaW50ZigibG5vPSVkXG4iLCBjdXJyZW50X2NvbmZpZ19saW5lKCkpOworCXByaW50Zigic2NvcGU9JXNcbiIsIGNvbmZpZ19zY29wZV9uYW1lKGN1cnJlbnRfY29uZmlnX3Njb3BlKCkpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVhcmx5X2NvbmZpZ19jYihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICp2ZGF0YSkKK3sKKwljb25zdCBjaGFyICprZXkgPSB2ZGF0YTsKKworCWlmICghc3RyY21wKGtleSwgdmFyKSkKKwkJcHJpbnRmKCIlc1xuIiwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfX2NvbmZpZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGksIHZhbDsKKwljb25zdCBjaGFyICp2OworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqc3RycHRyOworCXN0cnVjdCBjb25maWdfc2V0IGNzOworCisJaWYgKGFyZ2MgPT0gMyAmJiAhc3RyY21wKGFyZ3ZbMV0sICJyZWFkX2Vhcmx5X2NvbmZpZyIpKSB7CisJCXJlYWRfZWFybHlfY29uZmlnKGVhcmx5X2NvbmZpZ19jYiwgKHZvaWQgKilhcmd2WzJdKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJZ2l0X2NvbmZpZ3NldF9pbml0KCZjcyk7CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJQbGVhc2UsIHByb3ZpZGUgYSBjb21tYW5kIG5hbWUgb24gdGhlIGNvbW1hbmQtbGluZVxuIik7CisJCWdvdG8gZXhpdDE7CisJfSBlbHNlIGlmIChhcmdjID09IDMgJiYgIXN0cmNtcChhcmd2WzFdLCAiZ2V0X3ZhbHVlIikpIHsKKwkJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZShhcmd2WzJdLCAmdikpIHsKKwkJCWlmICghdikKKwkJCQlwcmludGYoIihOVUxMKVxuIik7CisJCQllbHNlCisJCQkJcHJpbnRmKCIlc1xuIiwgdik7CisJCQlnb3RvIGV4aXQwOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJWYWx1ZSBub3QgZm91bmQgZm9yIFwiJXNcIlxuIiwgYXJndlsyXSk7CisJCQlnb3RvIGV4aXQxOworCQl9CisJfSBlbHNlIGlmIChhcmdjID09IDMgJiYgIXN0cmNtcChhcmd2WzFdLCAiZ2V0X3ZhbHVlX211bHRpIikpIHsKKwkJc3RycHRyID0gZ2l0X2NvbmZpZ19nZXRfdmFsdWVfbXVsdGkoYXJndlsyXSk7CisJCWlmIChzdHJwdHIpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBzdHJwdHItPm5yOyBpKyspIHsKKwkJCQl2ID0gc3RycHRyLT5pdGVtc1tpXS5zdHJpbmc7CisJCQkJaWYgKCF2KQorCQkJCQlwcmludGYoIihOVUxMKVxuIik7CisJCQkJZWxzZQorCQkJCQlwcmludGYoIiVzXG4iLCB2KTsKKwkJCX0KKwkJCWdvdG8gZXhpdDA7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIlZhbHVlIG5vdCBmb3VuZCBmb3IgXCIlc1wiXG4iLCBhcmd2WzJdKTsKKwkJCWdvdG8gZXhpdDE7CisJCX0KKwl9IGVsc2UgaWYgKGFyZ2MgPT0gMyAmJiAhc3RyY21wKGFyZ3ZbMV0sICJnZXRfaW50IikpIHsKKwkJaWYgKCFnaXRfY29uZmlnX2dldF9pbnQoYXJndlsyXSwgJnZhbCkpIHsKKwkJCXByaW50ZigiJWRcbiIsIHZhbCk7CisJCQlnb3RvIGV4aXQwOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJWYWx1ZSBub3QgZm91bmQgZm9yIFwiJXNcIlxuIiwgYXJndlsyXSk7CisJCQlnb3RvIGV4aXQxOworCQl9CisJfSBlbHNlIGlmIChhcmdjID09IDMgJiYgIXN0cmNtcChhcmd2WzFdLCAiZ2V0X2Jvb2wiKSkgeworCQlpZiAoIWdpdF9jb25maWdfZ2V0X2Jvb2woYXJndlsyXSwgJnZhbCkpIHsKKwkJCXByaW50ZigiJWRcbiIsIHZhbCk7CisJCQlnb3RvIGV4aXQwOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJWYWx1ZSBub3QgZm91bmQgZm9yIFwiJXNcIlxuIiwgYXJndlsyXSk7CisJCQlnb3RvIGV4aXQxOworCQl9CisJfSBlbHNlIGlmIChhcmdjID09IDMgJiYgIXN0cmNtcChhcmd2WzFdLCAiZ2V0X3N0cmluZyIpKSB7CisJCWlmICghZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KGFyZ3ZbMl0sICZ2KSkgeworCQkJcHJpbnRmKCIlc1xuIiwgdik7CisJCQlnb3RvIGV4aXQwOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJWYWx1ZSBub3QgZm91bmQgZm9yIFwiJXNcIlxuIiwgYXJndlsyXSk7CisJCQlnb3RvIGV4aXQxOworCQl9CisJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJjb25maWdzZXRfZ2V0X3ZhbHVlIikpIHsKKwkJZm9yIChpID0gMzsgaSA8IGFyZ2M7IGkrKykgeworCQkJaW50IGVycjsKKwkJCWlmICgoZXJyID0gZ2l0X2NvbmZpZ3NldF9hZGRfZmlsZSgmY3MsIGFyZ3ZbaV0pKSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgKCVkKSByZWFkaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSAlcy5cbiIsIGVyciwgYXJndltpXSk7CisJCQkJZ290byBleGl0MjsKKwkJCX0KKwkJfQorCQlpZiAoIWdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlKCZjcywgYXJndlsyXSwgJnYpKSB7CisJCQlpZiAoIXYpCisJCQkJcHJpbnRmKCIoTlVMTClcbiIpOworCQkJZWxzZQorCQkJCXByaW50ZigiJXNcbiIsIHYpOworCQkJZ290byBleGl0MDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiVmFsdWUgbm90IGZvdW5kIGZvciBcIiVzXCJcbiIsIGFyZ3ZbMl0pOworCQkJZ290byBleGl0MTsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiY29uZmlnc2V0X2dldF92YWx1ZV9tdWx0aSIpKSB7CisJCWZvciAoaSA9IDM7IGkgPCBhcmdjOyBpKyspIHsKKwkJCWludCBlcnI7CisJCQlpZiAoKGVyciA9IGdpdF9jb25maWdzZXRfYWRkX2ZpbGUoJmNzLCBhcmd2W2ldKSkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yICglZCkgcmVhZGluZyBjb25maWd1cmF0aW9uIGZpbGUgJXMuXG4iLCBlcnIsIGFyZ3ZbaV0pOworCQkJCWdvdG8gZXhpdDI7CisJCQl9CisJCX0KKwkJc3RycHRyID0gZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWVfbXVsdGkoJmNzLCBhcmd2WzJdKTsKKwkJaWYgKHN0cnB0cikgeworCQkJZm9yIChpID0gMDsgaSA8IHN0cnB0ci0+bnI7IGkrKykgeworCQkJCXYgPSBzdHJwdHItPml0ZW1zW2ldLnN0cmluZzsKKwkJCQlpZiAoIXYpCisJCQkJCXByaW50ZigiKE5VTEwpXG4iKTsKKwkJCQllbHNlCisJCQkJCXByaW50ZigiJXNcbiIsIHYpOworCQkJfQorCQkJZ290byBleGl0MDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiVmFsdWUgbm90IGZvdW5kIGZvciBcIiVzXCJcbiIsIGFyZ3ZbMl0pOworCQkJZ290byBleGl0MTsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiaXRlcmF0ZSIpKSB7CisJCWdpdF9jb25maWcoaXRlcmF0ZV9jYiwgTlVMTCk7CisJCWdvdG8gZXhpdDA7CisJfQorCisJZGllKCIlczogUGxlYXNlIGNoZWNrIHRoZSBzeW50YXggYW5kIHRoZSBmdW5jdGlvbiBuYW1lIiwgYXJndlswXSk7CisKK2V4aXQwOgorCWdpdF9jb25maWdzZXRfY2xlYXIoJmNzKTsKKwlyZXR1cm4gMDsKKworZXhpdDE6CisJZ2l0X2NvbmZpZ3NldF9jbGVhcigmY3MpOworCXJldHVybiAxOworCitleGl0MjoKKwlnaXRfY29uZmlnc2V0X2NsZWFyKCZjcyk7CisJcmV0dXJuIDI7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWN0eXBlLmMgYi90L2hlbHBlci90ZXN0LWN0eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjNGMyMwotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtY3R5cGUuYwpAQCAtMCwwICsxLDQzIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKworc3RhdGljIGludCByYzsKKworc3RhdGljIHZvaWQgcmVwb3J0X2Vycm9yKGNvbnN0IGNoYXIgKmNsYXNzLCBpbnQgY2gpCit7CisJcHJpbnRmKCIlcyBjbGFzc2lmaWVzIGNoYXIgJWQgKDB4JTAyeCkgd3JvbmdseVxuIiwgY2xhc3MsIGNoLCBjaCk7CisJcmMgPSAxOworfQorCitzdGF0aWMgaW50IGlzX2luKGNvbnN0IGNoYXIgKnMsIGludCBjaCkKK3sKKwkvKiBXZSBjYW4ndCBmaW5kIE5VTCB1c2luZyBzdHJjaHIuICBJdCdzIGNsYXNzbGVzcyBhbnl3YXkuICovCisJaWYgKGNoID09ICdcMCcpCisJCXJldHVybiAwOworCXJldHVybiAhIXN0cmNocihzLCBjaCk7Cit9CisKKyNkZWZpbmUgVEVTVF9DTEFTUyh0LHMpIHsJCQlcCisJaW50IGk7CQkJCQlcCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CQlcCisJCWlmIChpc19pbihzLCBpKSAhPSB0KGkpKQlcCisJCQlyZXBvcnRfZXJyb3IoI3QsIGkpOwlcCisJfQkJCQkJXAorfQorCisjZGVmaW5lIERJR0lUICIwMTIzNDU2Nzg5IgorI2RlZmluZSBMT1dFUiAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCisjZGVmaW5lIFVQUEVSICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKworaW50IGNtZF9fY3R5cGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCVRFU1RfQ0xBU1MoaXNkaWdpdCwgRElHSVQpOworCVRFU1RfQ0xBU1MoaXNzcGFjZSwgIiBcblxyXHQiKTsKKwlURVNUX0NMQVNTKGlzYWxwaGEsIExPV0VSIFVQUEVSKTsKKwlURVNUX0NMQVNTKGlzYWxudW0sIExPV0VSIFVQUEVSIERJR0lUKTsKKwlURVNUX0NMQVNTKGlzX2dsb2Jfc3BlY2lhbCwgIio/W1xcIik7CisJVEVTVF9DTEFTUyhpc19yZWdleF9zcGVjaWFsLCAiJCgpKisuP1tcXF57fCIpOworCVRFU1RfQ0xBU1MoaXNfcGF0aHNwZWNfbWFnaWMsICIhXCIjJSYnLC0vOjs8PT5AX2B+Iik7CisKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWRhdGUuYyBiL3QvaGVscGVyL3Rlc3QtZGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OWVmZjQKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWRhdGUuYwpAQCAtMCwwICsxLDEzMiBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICp1c2FnZV9tc2cgPSAiXG4iCisiICB0ZXN0LXRvb2wgZGF0ZSByZWxhdGl2ZSBbdGltZV90XS4uLlxuIgorIiAgdGVzdC10b29sIGRhdGUgaHVtYW4gW3RpbWVfdF0uLi5cbiIKKyIgIHRlc3QtdG9vbCBkYXRlIHNob3c6PGZvcm1hdD4gW3RpbWVfdF0uLi5cbiIKKyIgIHRlc3QtdG9vbCBkYXRlIHBhcnNlIFtkYXRlXS4uLlxuIgorIiAgdGVzdC10b29sIGRhdGUgYXBwcm94aWRhdGUgW2RhdGVdLi4uXG4iCisiICB0ZXN0LXRvb2wgZGF0ZSB0aW1lc3RhbXAgW2RhdGVdLi4uXG4iCisiICB0ZXN0LXRvb2wgZGF0ZSBnZXRuYW5vcyBbc3RhcnQtbmFub3NdXG4iCisiICB0ZXN0LXRvb2wgZGF0ZSBpczY0Yml0XG4iCisiICB0ZXN0LXRvb2wgZGF0ZSB0aW1lX3QtaXM2NGJpdFxuIjsKKworc3RhdGljIHZvaWQgc2hvd19yZWxhdGl2ZV9kYXRlcyhjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJZm9yICg7ICphcmd2OyBhcmd2KyspIHsKKwkJdGltZV90IHQgPSBhdG9pKCphcmd2KTsKKwkJc2hvd19kYXRlX3JlbGF0aXZlKHQsICZidWYpOworCQlwcmludGYoIiVzIC0+ICVzXG4iLCAqYXJndiwgYnVmLmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2h1bWFuX2RhdGVzKGNvbnN0IGNoYXIgKiphcmd2KQoreworCWZvciAoOyAqYXJndjsgYXJndisrKSB7CisJCXRpbWVfdCB0ID0gYXRvaSgqYXJndik7CisJCXByaW50ZigiJXMgLT4gJXNcbiIsICphcmd2LCBzaG93X2RhdGUodCwgMCwgREFURV9NT0RFKEhVTUFOKSkpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19kYXRlcyhjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqZm9ybWF0KQoreworCXN0cnVjdCBkYXRlX21vZGUgbW9kZTsKKworCXBhcnNlX2RhdGVfZm9ybWF0KGZvcm1hdCwgJm1vZGUpOworCWZvciAoOyAqYXJndjsgYXJndisrKSB7CisJCWNoYXIgKmFyZzsKKwkJdGltZXN0YW1wX3QgdDsKKwkJaW50IHR6OworCisJCS8qCisJCSAqIERvIG5vdCB1c2Ugb3VyIG5vcm1hbCB0aW1lc3RhbXAgcGFyc2luZyBoZXJlLCBhcyB0aGUgcG9pbnQKKwkJICogaXMgdG8gdGVzdCB0aGUgZm9ybWF0dGluZyBjb2RlIGluIGlzb2xhdGlvbi4KKwkJICovCisJCXQgPSBwYXJzZV90aW1lc3RhbXAoKmFyZ3YsICZhcmcsIDEwKTsKKwkJd2hpbGUgKCphcmcgPT0gJyAnKQorCQkJYXJnKys7CisJCXR6ID0gYXRvaShhcmcpOworCisJCXByaW50ZigiJXMgLT4gJXNcbiIsICphcmd2LCBzaG93X2RhdGUodCwgdHosICZtb2RlKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwYXJzZV9kYXRlcyhjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlc3VsdCA9IFNUUkJVRl9JTklUOworCisJZm9yICg7ICphcmd2OyBhcmd2KyspIHsKKwkJdGltZXN0YW1wX3QgdDsKKwkJaW50IHR6OworCisJCXN0cmJ1Zl9yZXNldCgmcmVzdWx0KTsKKwkJcGFyc2VfZGF0ZSgqYXJndiwgJnJlc3VsdCk7CisJCWlmIChzc2NhbmYocmVzdWx0LmJ1ZiwgIiUiUFJJdGltZSIgJWQiLCAmdCwgJnR6KSA9PSAyKQorCQkJcHJpbnRmKCIlcyAtPiAlc1xuIiwKKwkJCSAgICAgICAqYXJndiwgc2hvd19kYXRlKHQsIHR6LCBEQVRFX01PREUoSVNPODYwMSkpKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlcyAtPiBiYWRcbiIsICphcmd2KTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2FwcHJveGlkYXRlKGNvbnN0IGNoYXIgKiphcmd2KQoreworCWZvciAoOyAqYXJndjsgYXJndisrKSB7CisJCXRpbWVzdGFtcF90IHQ7CisJCXQgPSBhcHByb3hpZGF0ZV9yZWxhdGl2ZSgqYXJndik7CisJCXByaW50ZigiJXMgLT4gJXNcbiIsICphcmd2LCBzaG93X2RhdGUodCwgMCwgREFURV9NT0RFKElTTzg2MDEpKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwYXJzZV9hcHByb3hfdGltZXN0YW1wKGNvbnN0IGNoYXIgKiphcmd2KQoreworCWZvciAoOyAqYXJndjsgYXJndisrKSB7CisJCXRpbWVzdGFtcF90IHQ7CisJCXQgPSBhcHByb3hpZGF0ZV9yZWxhdGl2ZSgqYXJndik7CisJCXByaW50ZigiJXMgLT4gJSJQUkl0aW1lIlxuIiwgKmFyZ3YsIHQpOworCX0KK30KKworc3RhdGljIHZvaWQgZ2V0bmFub3MoY29uc3QgY2hhciAqKmFyZ3YpCit7CisJZG91YmxlIHNlY29uZHMgPSBnZXRuYW5vdGltZSgpIC8gMS4wZTk7CisKKwlpZiAoKmFyZ3YpCisJCXNlY29uZHMgLT0gc3RydG9kKCphcmd2LCBOVUxMKTsKKwlwcmludGYoIiVsZlxuIiwgc2Vjb25kcyk7Cit9CisKK2ludCBjbWRfX2RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKng7CisKKwlhcmd2Kys7CisJaWYgKCEqYXJndikKKwkJdXNhZ2UodXNhZ2VfbXNnKTsKKwlpZiAoIXN0cmNtcCgqYXJndiwgInJlbGF0aXZlIikpCisJCXNob3dfcmVsYXRpdmVfZGF0ZXMoYXJndisxKTsKKwllbHNlIGlmICghc3RyY21wKCphcmd2LCAiaHVtYW4iKSkKKwkJc2hvd19odW1hbl9kYXRlcyhhcmd2KzEpOworCWVsc2UgaWYgKHNraXBfcHJlZml4KCphcmd2LCAic2hvdzoiLCAmeCkpCisJCXNob3dfZGF0ZXMoYXJndisxLCB4KTsKKwllbHNlIGlmICghc3RyY21wKCphcmd2LCAicGFyc2UiKSkKKwkJcGFyc2VfZGF0ZXMoYXJndisxKTsKKwllbHNlIGlmICghc3RyY21wKCphcmd2LCAiYXBwcm94aWRhdGUiKSkKKwkJcGFyc2VfYXBwcm94aWRhdGUoYXJndisxKTsKKwllbHNlIGlmICghc3RyY21wKCphcmd2LCAidGltZXN0YW1wIikpCisJCXBhcnNlX2FwcHJveF90aW1lc3RhbXAoYXJndisxKTsKKwllbHNlIGlmICghc3RyY21wKCphcmd2LCAiZ2V0bmFub3MiKSkKKwkJZ2V0bmFub3MoYXJndisxKTsKKwllbHNlIGlmICghc3RyY21wKCphcmd2LCAiaXM2NGJpdCIpKQorCQlyZXR1cm4gc2l6ZW9mKHRpbWVzdGFtcF90KSA9PSA4ID8gMCA6IDE7CisJZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgInRpbWVfdC1pczY0Yml0IikpCisJCXJldHVybiBzaXplb2YodGltZV90KSA9PSA4ID8gMCA6IDE7CisJZWxzZQorCQl1c2FnZSh1c2FnZV9tc2cpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1kZWx0YS5jIGIvdC9oZWxwZXIvdGVzdC1kZWx0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDlhNDkKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWRlbHRhLmMKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIHRlc3QtZGVsdGEuYzogdGVzdCBjb2RlIHRvIGV4ZXJjaXNlIGRpZmYtZGVsdGEuYyBhbmQgcGF0Y2gtZGVsdGEuYworICoKKyAqIChDKSAyMDA1IE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CisgKgorICogVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciB1c2FnZV9zdHJbXSA9CisJInRlc3QtdG9vbCBkZWx0YSAoLWR8LXApIDxmcm9tX2ZpbGU+IDxkYXRhX2ZpbGU+IDxvdXRfZmlsZT4iOworCitpbnQgY21kX19kZWx0YShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGZkOworCXN0cnVjdCBzdGF0IHN0OworCXZvaWQgKmZyb21fYnVmLCAqZGF0YV9idWYsICpvdXRfYnVmOworCXVuc2lnbmVkIGxvbmcgZnJvbV9zaXplLCBkYXRhX3NpemUsIG91dF9zaXplOworCisJaWYgKGFyZ2MgIT0gNSB8fCAoc3RyY21wKGFyZ3ZbMV0sICItZCIpICYmIHN0cmNtcChhcmd2WzFdLCAiLXAiKSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXNcbiIsIHVzYWdlX3N0cik7CisJCXJldHVybiAxOworCX0KKworCWZkID0gb3Blbihhcmd2WzJdLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCB8fCBmc3RhdChmZCwgJnN0KSkgeworCQlwZXJyb3IoYXJndlsyXSk7CisJCXJldHVybiAxOworCX0KKwlmcm9tX3NpemUgPSBzdC5zdF9zaXplOworCWZyb21fYnVmID0geG1hbGxvYyhmcm9tX3NpemUpOworCWlmIChyZWFkX2luX2Z1bGwoZmQsIGZyb21fYnVmLCBmcm9tX3NpemUpIDwgMCkgeworCQlwZXJyb3IoYXJndlsyXSk7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIDE7CisJfQorCWNsb3NlKGZkKTsKKworCWZkID0gb3Blbihhcmd2WzNdLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCB8fCBmc3RhdChmZCwgJnN0KSkgeworCQlwZXJyb3IoYXJndlszXSk7CisJCXJldHVybiAxOworCX0KKwlkYXRhX3NpemUgPSBzdC5zdF9zaXplOworCWRhdGFfYnVmID0geG1hbGxvYyhkYXRhX3NpemUpOworCWlmIChyZWFkX2luX2Z1bGwoZmQsIGRhdGFfYnVmLCBkYXRhX3NpemUpIDwgMCkgeworCQlwZXJyb3IoYXJndlszXSk7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIDE7CisJfQorCWNsb3NlKGZkKTsKKworCWlmIChhcmd2WzFdWzFdID09ICdkJykKKwkJb3V0X2J1ZiA9IGRpZmZfZGVsdGEoZnJvbV9idWYsIGZyb21fc2l6ZSwKKwkJCQkgICAgIGRhdGFfYnVmLCBkYXRhX3NpemUsCisJCQkJICAgICAmb3V0X3NpemUsIDApOworCWVsc2UKKwkJb3V0X2J1ZiA9IHBhdGNoX2RlbHRhKGZyb21fYnVmLCBmcm9tX3NpemUsCisJCQkJICAgICAgZGF0YV9idWYsIGRhdGFfc2l6ZSwKKwkJCQkgICAgICAmb3V0X3NpemUpOworCWlmICghb3V0X2J1ZikgeworCQlmcHJpbnRmKHN0ZGVyciwgImRlbHRhIG9wZXJhdGlvbiBmYWlsZWQgKHJldHVybmVkIE5VTEwpXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZmQgPSBvcGVuIChhcmd2WzRdLCBPX1dST05MWXxPX0NSRUFUfE9fVFJVTkMsIDA2NjYpOworCWlmIChmZCA8IDAgfHwgd3JpdGVfaW5fZnVsbChmZCwgb3V0X2J1Ziwgb3V0X3NpemUpIDwgMCkgeworCQlwZXJyb3IoYXJndls0XSk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1kaXItaXRlcmF0b3IuYyBiL3QvaGVscGVyL3Rlc3QtZGlyLWl0ZXJhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5YjZiZgotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtZGlyLWl0ZXJhdG9yLmMKQEAgLTAsMCArMSw2NSBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgIml0ZXJhdG9yLmgiCisjaW5jbHVkZSAiZGlyLWl0ZXJhdG9yLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICplcnJvcl9uYW1lKGludCBlcnJvcl9udW1iZXIpCit7CisJc3dpdGNoIChlcnJvcl9udW1iZXIpIHsKKwljYXNlIEVOT0VOVDogcmV0dXJuICJFTk9FTlQiOworCWNhc2UgRU5PVERJUjogcmV0dXJuICJFTk9URElSIjsKKwlkZWZhdWx0OiByZXR1cm4gIkVTT01FVEhJTkdFTFNFIjsKKwl9Cit9CisKKy8qCisgKiB1c2FnZToKKyAqIHRvb2wtdGVzdCBkaXItaXRlcmF0b3IgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS1wZWRhbnRpY10gZGlyZWN0b3J5X3BhdGgKKyAqLworaW50IGNtZF9fZGlyX2l0ZXJhdG9yKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgZGlyX2l0ZXJhdG9yICpkaXRlcjsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCWludCBpdGVyX3N0YXR1czsKKworCWZvciAoKythcmd2LCAtLWFyZ2M7ICphcmd2ICYmIHN0YXJ0c193aXRoKCphcmd2LCAiLS0iKTsgKythcmd2LCAtLWFyZ2MpIHsKKwkJaWYgKHN0cmNtcCgqYXJndiwgIi0tZm9sbG93LXN5bWxpbmtzIikgPT0gMCkKKwkJCWZsYWdzIHw9IERJUl9JVEVSQVRPUl9GT0xMT1dfU1lNTElOS1M7CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwgIi0tcGVkYW50aWMiKSA9PSAwKQorCQkJZmxhZ3MgfD0gRElSX0lURVJBVE9SX1BFREFOVElDOworCQllbHNlCisJCQlkaWUoImludmFsaWQgb3B0aW9uICclcyciLCAqYXJndik7CisJfQorCisJaWYgKCEqYXJndiB8fCBhcmdjICE9IDEpCisJCWRpZSgiZGlyLWl0ZXJhdG9yIG5lZWRzIGV4YWN0bHkgb25lIG5vbi1vcHRpb24gYXJndW1lbnQiKTsKKworCWRpdGVyID0gZGlyX2l0ZXJhdG9yX2JlZ2luKCphcmd2LCBmbGFncyk7CisKKwlpZiAoIWRpdGVyKSB7CisJCXByaW50ZigiZGlyX2l0ZXJhdG9yX2JlZ2luIGZhaWx1cmU6ICVzXG4iLCBlcnJvcl9uYW1lKGVycm5vKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwl3aGlsZSAoKGl0ZXJfc3RhdHVzID0gZGlyX2l0ZXJhdG9yX2FkdmFuY2UoZGl0ZXIpKSA9PSBJVEVSX09LKSB7CisJCWlmIChTX0lTRElSKGRpdGVyLT5zdC5zdF9tb2RlKSkKKwkJCXByaW50ZigiW2RdICIpOworCQllbHNlIGlmIChTX0lTUkVHKGRpdGVyLT5zdC5zdF9tb2RlKSkKKwkJCXByaW50ZigiW2ZdICIpOworCQllbHNlIGlmIChTX0lTTE5LKGRpdGVyLT5zdC5zdF9tb2RlKSkKKwkJCXByaW50ZigiW3NdICIpOworCQllbHNlCisJCQlwcmludGYoIls/XSAiKTsKKworCQlwcmludGYoIiglcykgWyVzXSAlc1xuIiwgZGl0ZXItPnJlbGF0aXZlX3BhdGgsIGRpdGVyLT5iYXNlbmFtZSwKKwkJICAgICAgIGRpdGVyLT5wYXRoLmJ1Zik7CisJfQorCisJaWYgKGl0ZXJfc3RhdHVzICE9IElURVJfRE9ORSkgeworCQlwcmludGYoImRpcl9pdGVyYXRvcl9hZHZhbmNlIGZhaWx1cmVcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtZHJvcC1jYWNoZXMuYyBiL3QvaGVscGVyL3Rlc3QtZHJvcC1jYWNoZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjQyNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1kcm9wLWNhY2hlcy5jCkBAIC0wLDAgKzEsMTYwIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKKyNpZiBkZWZpbmVkKEdJVF9XSU5ET1dTX05BVElWRSkKKyNpbmNsdWRlICJsYXp5bG9hZC5oIgorCitzdGF0aWMgaW50IGNtZF9zeW5jKHZvaWQpCit7CisJY2hhciBCdWZmZXJbTUFYX1BBVEhdOworCURXT1JEIGR3UmV0OworCWNoYXIgc3pWb2x1bWVBY2Nlc3NQYXRoW10gPSAiXFxcXC5cXFhYWFg6IjsKKwlIQU5ETEUgaFZvbFdyaXRlOworCWludCBzdWNjZXNzID0gMCwgZG9zX2RyaXZlX3ByZWZpeDsKKworCWR3UmV0ID0gR2V0Q3VycmVudERpcmVjdG9yeShNQVhfUEFUSCwgQnVmZmVyKTsKKwlpZiAoKDAgPT0gZHdSZXQpIHx8IChkd1JldCA+IE1BWF9QQVRIKSkKKwkJcmV0dXJuIGVycm9yKCJFcnJvciBnZXR0aW5nIGN1cnJlbnQgZGlyZWN0b3J5Iik7CisKKwlkb3NfZHJpdmVfcHJlZml4ID0gaGFzX2Rvc19kcml2ZV9wcmVmaXgoQnVmZmVyKTsKKwlpZiAoIWRvc19kcml2ZV9wcmVmaXgpCisJCXJldHVybiBlcnJvcigiJyVzJzogaW52YWxpZCBkcml2ZSBsZXR0ZXIiLCBCdWZmZXIpOworCisJbWVtY3B5KHN6Vm9sdW1lQWNjZXNzUGF0aCwgQnVmZmVyLCBkb3NfZHJpdmVfcHJlZml4KTsKKwlzelZvbHVtZUFjY2Vzc1BhdGhbZG9zX2RyaXZlX3ByZWZpeF0gPSAnXDAnOworCisJaFZvbFdyaXRlID0gQ3JlYXRlRmlsZShzelZvbHVtZUFjY2Vzc1BhdGgsIEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEUsCisJCUZJTEVfU0hBUkVfUkVBRCB8IEZJTEVfU0hBUkVfV1JJVEUsIE5VTEwsIE9QRU5fRVhJU1RJTkcsIDAsIE5VTEwpOworCWlmIChJTlZBTElEX0hBTkRMRV9WQUxVRSA9PSBoVm9sV3JpdGUpCisJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIG9wZW4gdm9sdW1lIGZvciB3cml0aW5nLCBuZWVkIGFkbWluIGFjY2VzcyIpOworCisJc3VjY2VzcyA9IEZsdXNoRmlsZUJ1ZmZlcnMoaFZvbFdyaXRlKTsKKwlpZiAoIXN1Y2Nlc3MpCisJCWVycm9yKCJVbmFibGUgdG8gZmx1c2ggdm9sdW1lIik7CisKKwlDbG9zZUhhbmRsZShoVm9sV3JpdGUpOworCisJcmV0dXJuICFzdWNjZXNzOworfQorCisjZGVmaW5lIFNUQVRVU19TVUNDRVNTCQkJKDB4MDAwMDAwMDBMKQorI2RlZmluZSBTVEFUVVNfUFJJVklMRUdFX05PVF9IRUxECSgweEMwMDAwMDYxTCkKKwordHlwZWRlZiBlbnVtIF9TWVNURU1fSU5GT1JNQVRJT05fQ0xBU1MgeworCVN5c3RlbU1lbW9yeUxpc3RJbmZvcm1hdGlvbiA9IDgwLAorfSBTWVNURU1fSU5GT1JNQVRJT05fQ0xBU1M7CisKK3R5cGVkZWYgZW51bSBfU1lTVEVNX01FTU9SWV9MSVNUX0NPTU1BTkQgeworCU1lbW9yeUNhcHR1cmVBY2Nlc3NlZEJpdHMsCisJTWVtb3J5Q2FwdHVyZUFuZFJlc2V0QWNjZXNzZWRCaXRzLAorCU1lbW9yeUVtcHR5V29ya2luZ1NldHMsCisJTWVtb3J5Rmx1c2hNb2RpZmllZExpc3QsCisJTWVtb3J5UHVyZ2VTdGFuZGJ5TGlzdCwKKwlNZW1vcnlQdXJnZUxvd1ByaW9yaXR5U3RhbmRieUxpc3QsCisJTWVtb3J5Q29tbWFuZE1heAorfSBTWVNURU1fTUVNT1JZX0xJU1RfQ09NTUFORDsKKworc3RhdGljIEJPT0wgR2V0UHJpdmlsZWdlKEhBTkRMRSBUb2tlbkhhbmRsZSwgTFBDU1RSIGxwTmFtZSwgaW50IGZsYWdzKQoreworCUJPT0wgYlJlc3VsdDsKKwlEV09SRCBkd0J1ZmZlckxlbmd0aDsKKwlMVUlEIGx1aWQ7CisJVE9LRU5fUFJJVklMRUdFUyB0cFByZXZpb3VzU3RhdGU7CisJVE9LRU5fUFJJVklMRUdFUyB0cE5ld1N0YXRlOworCisJZHdCdWZmZXJMZW5ndGggPSAxNjsKKwliUmVzdWx0ID0gTG9va3VwUHJpdmlsZWdlVmFsdWVBKDAsIGxwTmFtZSwgJmx1aWQpOworCWlmIChiUmVzdWx0KSB7CisJCXRwTmV3U3RhdGUuUHJpdmlsZWdlQ291bnQgPSAxOworCQl0cE5ld1N0YXRlLlByaXZpbGVnZXNbMF0uTHVpZCA9IGx1aWQ7CisJCXRwTmV3U3RhdGUuUHJpdmlsZWdlc1swXS5BdHRyaWJ1dGVzID0gMDsKKwkJYlJlc3VsdCA9IEFkanVzdFRva2VuUHJpdmlsZWdlcyhUb2tlbkhhbmRsZSwgMCwgJnRwTmV3U3RhdGUsCisJCQkoRFdPUkQpKChMUEJZVEUpJih0cE5ld1N0YXRlLlByaXZpbGVnZXNbMV0pIC0gKExQQllURSkmdHBOZXdTdGF0ZSksCisJCQkmdHBQcmV2aW91c1N0YXRlLCAmZHdCdWZmZXJMZW5ndGgpOworCQlpZiAoYlJlc3VsdCkgeworCQkJdHBQcmV2aW91c1N0YXRlLlByaXZpbGVnZUNvdW50ID0gMTsKKwkJCXRwUHJldmlvdXNTdGF0ZS5Qcml2aWxlZ2VzWzBdLkx1aWQgPSBsdWlkOworCQkJdHBQcmV2aW91c1N0YXRlLlByaXZpbGVnZXNbMF0uQXR0cmlidXRlcyA9IGZsYWdzICE9IDAgPyAyIDogMDsKKwkJCWJSZXN1bHQgPSBBZGp1c3RUb2tlblByaXZpbGVnZXMoVG9rZW5IYW5kbGUsIDAsICZ0cFByZXZpb3VzU3RhdGUsCisJCQkJZHdCdWZmZXJMZW5ndGgsIDAsIDApOworCQl9CisJfQorCXJldHVybiBiUmVzdWx0OworfQorCitzdGF0aWMgaW50IGNtZF9kcm9wY2FjaGVzKHZvaWQpCit7CisJSEFORExFIGhQcm9jZXNzID0gR2V0Q3VycmVudFByb2Nlc3MoKTsKKwlIQU5ETEUgaFRva2VuOworCURFQ0xBUkVfUFJPQ19BRERSKG50ZGxsLmRsbCwgRFdPUkQsIE50U2V0U3lzdGVtSW5mb3JtYXRpb24sIElOVCwgUFZPSUQsIFVMT05HKTsKKwlTWVNURU1fTUVNT1JZX0xJU1RfQ09NTUFORCBjb21tYW5kOworCWludCBzdGF0dXM7CisKKwlpZiAoIU9wZW5Qcm9jZXNzVG9rZW4oaFByb2Nlc3MsIFRPS0VOX1FVRVJZIHwgVE9LRU5fQURKVVNUX1BSSVZJTEVHRVMsICZoVG9rZW4pKQorCQlyZXR1cm4gZXJyb3IoIkNhbid0IG9wZW4gY3VycmVudCBwcm9jZXNzIHRva2VuIik7CisKKwlpZiAoIUdldFByaXZpbGVnZShoVG9rZW4sICJTZVByb2ZpbGVTaW5nbGVQcm9jZXNzUHJpdmlsZWdlIiwgMSkpCisJCXJldHVybiBlcnJvcigiQ2FuJ3QgZ2V0IFNlUHJvZmlsZVNpbmdsZVByb2Nlc3NQcml2aWxlZ2UiKTsKKworCUNsb3NlSGFuZGxlKGhUb2tlbik7CisKKwlpZiAoIUlOSVRfUFJPQ19BRERSKE50U2V0U3lzdGVtSW5mb3JtYXRpb24pKQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBmaW5kIE50U2V0U3lzdGVtSW5mb3JtYXRpb24oKSBmdW5jdGlvbiIpOworCisJY29tbWFuZCA9IE1lbW9yeVB1cmdlU3RhbmRieUxpc3Q7CisJc3RhdHVzID0gTnRTZXRTeXN0ZW1JbmZvcm1hdGlvbigKKwkJU3lzdGVtTWVtb3J5TGlzdEluZm9ybWF0aW9uLAorCQkmY29tbWFuZCwKKwkJc2l6ZW9mKFNZU1RFTV9NRU1PUllfTElTVF9DT01NQU5EKQorCSk7CisJaWYgKHN0YXR1cyA9PSBTVEFUVVNfUFJJVklMRUdFX05PVF9IRUxEKQorCQllcnJvcigiSW5zdWZmaWNpZW50IHByaXZpbGVnZXMgdG8gcHVyZ2UgdGhlIHN0YW5kYnkgbGlzdCwgbmVlZCBhZG1pbiBhY2Nlc3MiKTsKKwllbHNlIGlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCWVycm9yKCJVbmFibGUgdG8gZXhlY3V0ZSB0aGUgbWVtb3J5IGxpc3QgY29tbWFuZCAlZCIsIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykKKworc3RhdGljIGludCBjbWRfc3luYyh2b2lkKQoreworCXJldHVybiBzeXN0ZW0oInN5bmMiKTsKK30KKworc3RhdGljIGludCBjbWRfZHJvcGNhY2hlcyh2b2lkKQoreworCXJldHVybiBzeXN0ZW0oImVjaG8gMyB8IHN1ZG8gdGVlIC9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcyIpOworfQorCisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKworc3RhdGljIGludCBjbWRfc3luYyh2b2lkKQoreworCXJldHVybiBzeXN0ZW0oInN5bmMiKTsKK30KKworc3RhdGljIGludCBjbWRfZHJvcGNhY2hlcyh2b2lkKQoreworCXJldHVybiBzeXN0ZW0oInN1ZG8gcHVyZ2UiKTsKK30KKworI2Vsc2UKKworc3RhdGljIGludCBjbWRfc3luYyh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtZF9kcm9wY2FjaGVzKHZvaWQpCit7CisJcmV0dXJuIGVycm9yKCJkcm9wIGNhY2hlcyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybSIpOworfQorCisjZW5kaWYKKworaW50IGNtZF9fZHJvcF9jYWNoZXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNtZF9zeW5jKCk7CisJcmV0dXJuIGNtZF9kcm9wY2FjaGVzKCk7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWR1bXAtY2FjaGUtdHJlZS5jIGIvdC9oZWxwZXIvdGVzdC1kdW1wLWNhY2hlLXRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTNmODhmCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1kdW1wLWNhY2hlLXRyZWUuYwpAQCAtMCwwICsxLDY5IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorCisKK3N0YXRpYyB2b2lkIGR1bXBfb25lKHN0cnVjdCBjYWNoZV90cmVlICppdCwgY29uc3QgY2hhciAqcGZ4LCBjb25zdCBjaGFyICp4KQoreworCWlmIChpdC0+ZW50cnlfY291bnQgPCAwKQorCQlwcmludGYoIiUtNDBzICVzJXMgKCVkIHN1YnRyZWVzKVxuIiwKKwkJICAgICAgICJpbnZhbGlkIiwgeCwgcGZ4LCBpdC0+c3VidHJlZV9ucik7CisJZWxzZQorCQlwcmludGYoIiVzICVzJXMgKCVkIGVudHJpZXMsICVkIHN1YnRyZWVzKVxuIiwKKwkJICAgICAgIG9pZF90b19oZXgoJml0LT5vaWQpLCB4LCBwZngsCisJCSAgICAgICBpdC0+ZW50cnlfY291bnQsIGl0LT5zdWJ0cmVlX25yKTsKK30KKworc3RhdGljIGludCBkdW1wX2NhY2hlX3RyZWUoc3RydWN0IGNhY2hlX3RyZWUgKml0LAorCQkJICAgc3RydWN0IGNhY2hlX3RyZWUgKnJlZiwKKwkJCSAgIGNvbnN0IGNoYXIgKnBmeCkKK3sKKwlpbnQgaTsKKwlpbnQgZXJycyA9IDA7CisKKwlpZiAoIWl0IHx8ICFyZWYpCisJCS8qIG1pc3NpbmcgaW4gZWl0aGVyICovCisJCXJldHVybiAwOworCisJaWYgKGl0LT5lbnRyeV9jb3VudCA8IDApIHsKKwkJLyogaW52YWxpZCAqLworCQlkdW1wX29uZShpdCwgcGZ4LCAiIik7CisJCWR1bXBfb25lKHJlZiwgcGZ4LCAiIyhyZWYpICIpOworCX0KKwllbHNlIHsKKwkJZHVtcF9vbmUoaXQsIHBmeCwgIiIpOworCQlpZiAoIW9pZGVxKCZpdC0+b2lkLCAmcmVmLT5vaWQpIHx8CisJCSAgICByZWYtPmVudHJ5X2NvdW50ICE9IGl0LT5lbnRyeV9jb3VudCB8fAorCQkgICAgcmVmLT5zdWJ0cmVlX25yICE9IGl0LT5zdWJ0cmVlX25yKSB7CisJCQkvKiBjbGFpbXMgdG8gYmUgdmFsaWQgYnV0IGlzIGx5aW5nICovCisJCQlkdW1wX29uZShyZWYsIHBmeCwgIiMocmVmKSAiKTsKKwkJCWVycnMgPSAxOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IGl0LT5zdWJ0cmVlX25yOyBpKyspIHsKKwkJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpkb3duID0gaXQtPmRvd25baV07CisJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqcmR3bjsKKworCQlyZHduID0gY2FjaGVfdHJlZV9zdWIocmVmLCBkb3duLT5uYW1lKTsKKwkJeHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzJS4qcy8iLCBwZngsIGRvd24tPm5hbWVsZW4sIGRvd24tPm5hbWUpOworCQlpZiAoZHVtcF9jYWNoZV90cmVlKGRvd24tPmNhY2hlX3RyZWUsIHJkd24tPmNhY2hlX3RyZWUsIHBhdGgpKQorCQkJZXJycyA9IDE7CisJfQorCXJldHVybiBlcnJzOworfQorCitpbnQgY21kX19kdW1wX2NhY2hlX3RyZWUoaW50IGFjLCBjb25zdCBjaGFyICoqYXYpCit7CisJc3RydWN0IGluZGV4X3N0YXRlIGlzdGF0ZTsKKwlzdHJ1Y3QgY2FjaGVfdHJlZSAqYW5vdGhlciA9IGNhY2hlX3RyZWUoKTsKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIpOworCWlzdGF0ZSA9IHRoZV9pbmRleDsKKwlpc3RhdGUuY2FjaGVfdHJlZSA9IGFub3RoZXI7CisJY2FjaGVfdHJlZV91cGRhdGUoJmlzdGF0ZSwgV1JJVEVfVFJFRV9EUllfUlVOKTsKKwlyZXR1cm4gZHVtcF9jYWNoZV90cmVlKGFjdGl2ZV9jYWNoZV90cmVlLCBhbm90aGVyLCAiIik7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWR1bXAtZnNtb25pdG9yLmMgYi90L2hlbHBlci90ZXN0LWR1bXAtZnNtb25pdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc1ZjBhYwotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtZHVtcC1mc21vbml0b3IuYwpAQCAtMCwwICsxLDIyIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKworaW50IGNtZF9fZHVtcF9mc21vbml0b3IoaW50IGFjLCBjb25zdCBjaGFyICoqYXYpCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUgPSB0aGVfcmVwb3NpdG9yeS0+aW5kZXg7CisJaW50IGk7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJaWYgKGRvX3JlYWRfaW5kZXgoaXN0YXRlLCB0aGVfcmVwb3NpdG9yeS0+aW5kZXhfZmlsZSwgMCkgPCAwKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiKTsKKwlpZiAoIWlzdGF0ZS0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlKSB7CisJCXByaW50Zigibm8gZnNtb25pdG9yXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXByaW50ZigiZnNtb25pdG9yIGxhc3QgdXBkYXRlICVzXG4iLCBpc3RhdGUtPmZzbW9uaXRvcl9sYXN0X3VwZGF0ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKQorCQlwcmludGYoKGlzdGF0ZS0+Y2FjaGVbaV0tPmNlX2ZsYWdzICYgQ0VfRlNNT05JVE9SX1ZBTElEKSA/ICIrIiA6ICItIik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtZHVtcC1zcGxpdC1pbmRleC5jIGIvdC9oZWxwZXIvdGVzdC1kdW1wLXNwbGl0LWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIwOTg4MAotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtZHVtcC1zcGxpdC1pbmRleC5jCkBAIC0wLDAgKzEsMzkgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInNwbGl0LWluZGV4LmgiCisjaW5jbHVkZSAiZXdhaC9ld29rLmgiCisKK3N0YXRpYyB2b2lkIHNob3dfYml0KHNpemVfdCBwb3MsIHZvaWQgKmRhdGEpCit7CisJcHJpbnRmKCIgJWQiLCAoaW50KXBvcyk7Cit9CisKK2ludCBjbWRfX2R1bXBfc3BsaXRfaW5kZXgoaW50IGFjLCBjb25zdCBjaGFyICoqYXYpCit7CisJc3RydWN0IHNwbGl0X2luZGV4ICpzaTsKKwlpbnQgaTsKKworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKworCWRvX3JlYWRfaW5kZXgoJnRoZV9pbmRleCwgYXZbMV0sIDEpOworCXByaW50Zigib3duICVzXG4iLCBvaWRfdG9faGV4KCZ0aGVfaW5kZXgub2lkKSk7CisJc2kgPSB0aGVfaW5kZXguc3BsaXRfaW5kZXg7CisJaWYgKCFzaSkgeworCQlwcmludGYoIm5vdCBhIHNwbGl0IGluZGV4XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXByaW50ZigiYmFzZSAlc1xuIiwgb2lkX3RvX2hleCgmc2ktPmJhc2Vfb2lkKSk7CisJZm9yIChpID0gMDsgaSA8IHRoZV9pbmRleC5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSB0aGVfaW5kZXguY2FjaGVbaV07CisJCXByaW50ZigiJTA2byAlcyAlZFx0JXNcbiIsIGNlLT5jZV9tb2RlLAorCQkgICAgICAgb2lkX3RvX2hleCgmY2UtPm9pZCksIGNlX3N0YWdlKGNlKSwgY2UtPm5hbWUpOworCX0KKwlwcmludGYoInJlcGxhY2VtZW50czoiKTsKKwlpZiAoc2ktPnJlcGxhY2VfYml0bWFwKQorCQlld2FoX2VhY2hfYml0KHNpLT5yZXBsYWNlX2JpdG1hcCwgc2hvd19iaXQsIE5VTEwpOworCXByaW50ZigiXG5kZWxldGlvbnM6Iik7CisJaWYgKHNpLT5kZWxldGVfYml0bWFwKQorCQlld2FoX2VhY2hfYml0KHNpLT5kZWxldGVfYml0bWFwLCBzaG93X2JpdCwgTlVMTCk7CisJcHJpbnRmKCJcbiIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1kdW1wLXVudHJhY2tlZC1jYWNoZS5jIGIvdC9oZWxwZXIvdGVzdC1kdW1wLXVudHJhY2tlZC1jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMGYyYzcKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWR1bXAtdW50cmFja2VkLWNhY2hlLmMKQEAgLTAsMCArMSw2NiBAQAorI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKworc3RhdGljIGludCBjb21wYXJlX3VudHJhY2tlZChjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3QgY2hhciAqY29uc3QgKmEgPSBhXzsKKwljb25zdCBjaGFyICpjb25zdCAqYiA9IGJfOworCXJldHVybiBzdHJjbXAoKmEsICpiKTsKK30KKworc3RhdGljIGludCBjb21wYXJlX2Rpcihjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKmNvbnN0ICphID0gYV87CisJY29uc3Qgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKmNvbnN0ICpiID0gYl87CisJcmV0dXJuIHN0cmNtcCgoKmEpLT5uYW1lLCAoKmIpLT5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgZHVtcChzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqdWNkLCBzdHJ1Y3Qgc3RyYnVmICpiYXNlKQoreworCWludCBpLCBsZW47CisJUVNPUlQodWNkLT51bnRyYWNrZWQsIHVjZC0+dW50cmFja2VkX25yLCBjb21wYXJlX3VudHJhY2tlZCk7CisJUVNPUlQodWNkLT5kaXJzLCB1Y2QtPmRpcnNfbnIsIGNvbXBhcmVfZGlyKTsKKwlsZW4gPSBiYXNlLT5sZW47CisJc3RyYnVmX2FkZGYoYmFzZSwgIiVzLyIsIHVjZC0+bmFtZSk7CisJcHJpbnRmKCIlcyAlcyIsIGJhc2UtPmJ1ZiwKKwkgICAgICAgb2lkX3RvX2hleCgmdWNkLT5leGNsdWRlX29pZCkpOworCWlmICh1Y2QtPnJlY3Vyc2UpCisJCWZwdXRzKCIgcmVjdXJzZSIsIHN0ZG91dCk7CisJaWYgKHVjZC0+Y2hlY2tfb25seSkKKwkJZnB1dHMoIiBjaGVja19vbmx5Iiwgc3Rkb3V0KTsKKwlpZiAodWNkLT52YWxpZCkKKwkJZnB1dHMoIiB2YWxpZCIsIHN0ZG91dCk7CisJcHJpbnRmKCJcbiIpOworCWZvciAoaSA9IDA7IGkgPCB1Y2QtPnVudHJhY2tlZF9ucjsgaSsrKQorCQlwcmludGYoIiVzXG4iLCB1Y2QtPnVudHJhY2tlZFtpXSk7CisJZm9yIChpID0gMDsgaSA8IHVjZC0+ZGlyc19ucjsgaSsrKQorCQlkdW1wKHVjZC0+ZGlyc1tpXSwgYmFzZSk7CisJc3RyYnVmX3NldGxlbihiYXNlLCBsZW4pOworfQorCitpbnQgY21kX19kdW1wX3VudHJhY2tlZF9jYWNoZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdikKK3sKKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YzsKKwlzdHJ1Y3Qgc3RyYnVmIGJhc2UgPSBTVFJCVUZfSU5JVDsKKworCS8qIEhhY2sgdG8gYXZvaWQgbW9kaWZ5aW5nIHRoZSB1bnRyYWNrZWQgY2FjaGUgd2hlbiB3ZSByZWFkIGl0ICovCisJaWdub3JlX3VudHJhY2tlZF9jYWNoZV9jb25maWcgPSAxOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiKTsKKwl1YyA9IHRoZV9pbmRleC51bnRyYWNrZWQ7CisJaWYgKCF1YykgeworCQlwcmludGYoIm5vIHVudHJhY2tlZCBjYWNoZVxuIik7CisJCXJldHVybiAwOworCX0KKwlwcmludGYoImluZm8vZXhjbHVkZSAlc1xuIiwgb2lkX3RvX2hleCgmdWMtPnNzX2luZm9fZXhjbHVkZS5vaWQpKTsKKwlwcmludGYoImNvcmUuZXhjbHVkZXNmaWxlICVzXG4iLCBvaWRfdG9faGV4KCZ1Yy0+c3NfZXhjbHVkZXNfZmlsZS5vaWQpKTsKKwlwcmludGYoImV4Y2x1ZGVfcGVyX2RpciAlc1xuIiwgdWMtPmV4Y2x1ZGVfcGVyX2Rpcik7CisJcHJpbnRmKCJmbGFncyAlMDh4XG4iLCB1Yy0+ZGlyX2ZsYWdzKTsKKwlpZiAodWMtPnJvb3QpCisJCWR1bXAodWMtPnJvb3QsICZiYXNlKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtZXhhbXBsZS1kZWNvcmF0ZS5jIGIvdC9oZWxwZXIvdGVzdC1leGFtcGxlLWRlY29yYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhhMWNkZQotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtZXhhbXBsZS1kZWNvcmF0ZS5jCkBAIC0wLDAgKzEsNzUgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImRlY29yYXRlLmgiCisKK2ludCBjbWRfX2V4YW1wbGVfZGVjb3JhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBkZWNvcmF0aW9uIG47CisJc3RydWN0IG9iamVjdF9pZCBvbmVfb2lkID0geyB7MX0gfTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHR3b19vaWQgPSB7IHsyfSB9OworCXN0cnVjdCBvYmplY3RfaWQgdGhyZWVfb2lkID0geyB7M30gfTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvbmUsICp0d28sICp0aHJlZTsKKworCWludCBkZWNvcmF0aW9uX2EsIGRlY29yYXRpb25fYjsKKworCXZvaWQgKnJldDsKKworCWludCBpLCBvYmplY3RzX25vdGljZWQgPSAwOworCisJLyoKKwkgKiBUaGUgc3RydWN0IG11c3QgYmUgemVyby1pbml0aWFsaXplZC4KKwkgKi8KKwltZW1zZXQoJm4sIDAsIHNpemVvZihuKSk7CisKKwkvKgorCSAqIEFkZCAyIG9iamVjdHMsIG9uZSB3aXRoIGEgbm9uLU5VTEwgZGVjb3JhdGlvbiBhbmQgb25lIHdpdGggYSBOVUxMCisJICogZGVjb3JhdGlvbi4KKwkgKi8KKwlvbmUgPSBsb29rdXBfdW5rbm93bl9vYmplY3QoJm9uZV9vaWQpOworCXR3byA9IGxvb2t1cF91bmtub3duX29iamVjdCgmdHdvX29pZCk7CisJcmV0ID0gYWRkX2RlY29yYXRpb24oJm4sIG9uZSwgJmRlY29yYXRpb25fYSk7CisJaWYgKHJldCkKKwkJQlVHKCJ3aGVuIGFkZGluZyBhIGJyYW5kLW5ldyBvYmplY3QsIE5VTEwgc2hvdWxkIGJlIHJldHVybmVkIik7CisJcmV0ID0gYWRkX2RlY29yYXRpb24oJm4sIHR3bywgTlVMTCk7CisJaWYgKHJldCkKKwkJQlVHKCJ3aGVuIGFkZGluZyBhIGJyYW5kLW5ldyBvYmplY3QsIE5VTEwgc2hvdWxkIGJlIHJldHVybmVkIik7CisKKwkvKgorCSAqIFdoZW4gcmUtYWRkaW5nIGFuIGFscmVhZHkgZXhpc3Rpbmcgb2JqZWN0LCB0aGUgb2xkIGRlY29yYXRpb24gaXMKKwkgKiByZXR1cm5lZC4KKwkgKi8KKwlyZXQgPSBhZGRfZGVjb3JhdGlvbigmbiwgb25lLCBOVUxMKTsKKwlpZiAocmV0ICE9ICZkZWNvcmF0aW9uX2EpCisJCUJVRygid2hlbiByZWFkZGluZyBhbiBhbHJlYWR5IGV4aXN0aW5nIG9iamVjdCwgZXhpc3RpbmcgZGVjb3JhdGlvbiBzaG91bGQgYmUgcmV0dXJuZWQiKTsKKwlyZXQgPSBhZGRfZGVjb3JhdGlvbigmbiwgdHdvLCAmZGVjb3JhdGlvbl9iKTsKKwlpZiAocmV0KQorCQlCVUcoIndoZW4gcmVhZGRpbmcgYW4gYWxyZWFkeSBleGlzdGluZyBvYmplY3QsIGV4aXN0aW5nIGRlY29yYXRpb24gc2hvdWxkIGJlIHJldHVybmVkIik7CisKKwkvKgorCSAqIExvb2t1cCByZXR1cm5zIHRoZSBhZGRlZCBkZWNsYXJhdGlvbnMsIG9yIE5VTEwgaWYgdGhlIG9iamVjdCB3YXMKKwkgKiBuZXZlciBhZGRlZC4KKwkgKi8KKwlyZXQgPSBsb29rdXBfZGVjb3JhdGlvbigmbiwgb25lKTsKKwlpZiAocmV0KQorCQlCVUcoImxvb2t1cCBzaG91bGQgcmV0dXJuIGFkZGVkIGRlY2xhcmF0aW9uIik7CisJcmV0ID0gbG9va3VwX2RlY29yYXRpb24oJm4sIHR3byk7CisJaWYgKHJldCAhPSAmZGVjb3JhdGlvbl9iKQorCQlCVUcoImxvb2t1cCBzaG91bGQgcmV0dXJuIGFkZGVkIGRlY2xhcmF0aW9uIik7CisJdGhyZWUgPSBsb29rdXBfdW5rbm93bl9vYmplY3QoJnRocmVlX29pZCk7CisJcmV0ID0gbG9va3VwX2RlY29yYXRpb24oJm4sIHRocmVlKTsKKwlpZiAocmV0KQorCQlCVUcoImxvb2t1cCBmb3IgdW5rbm93biBvYmplY3Qgc2hvdWxkIHJldHVybiBOVUxMIik7CisKKwkvKgorCSAqIFRoZSB1c2VyIGNhbiBhbHNvIGxvb3AgdGhyb3VnaCBhbGwgZW50cmllcy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbi5zaXplOyBpKyspIHsKKwkJaWYgKG4uZW50cmllc1tpXS5iYXNlKQorCQkJb2JqZWN0c19ub3RpY2VkKys7CisJfQorCWlmIChvYmplY3RzX25vdGljZWQgIT0gMikKKwkJQlVHKCJzaG91bGQgaGF2ZSAyIG9iamVjdHMiKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1mYWtlLXNzaC5jIGIvdC9oZWxwZXIvdGVzdC1mYWtlLXNzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYmVlZTkKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWZha2Utc3NoLmMKQEAgLTAsMCArMSwzMCBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqdHJhc2hfZGlyZWN0b3J5ID0gZ2V0ZW52KCJUUkFTSF9ESVJFQ1RPUlkiKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCUZJTEUgKmY7CisJaW50IGk7CisJY29uc3QgY2hhciAqY2hpbGRfYXJndltdID0geyBOVUxMLCBOVUxMIH07CisKKwkvKiBGaXJzdCwgcHJpbnQgYWxsIHBhcmFtZXRlcnMgaW50byAkVFJBU0hfRElSRUNUT1JZL3NzaC1vdXRwdXQgKi8KKwlpZiAoIXRyYXNoX2RpcmVjdG9yeSkKKwkJZGllKCJOZWVkIGEgVFJBU0hfRElSRUNUT1JZISIpOworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy9zc2gtb3V0cHV0IiwgdHJhc2hfZGlyZWN0b3J5KTsKKwlmID0gZm9wZW4oYnVmLmJ1ZiwgInciKTsKKwlpZiAoIWYpCisJCWRpZSgiQ291bGQgbm90IHdyaXRlIHRvICVzIiwgYnVmLmJ1Zik7CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJZnByaW50ZihmLCAiJXMlcyIsIGkgPiAwID8gIiAiIDogIiIsIGkgPiAwID8gYXJndltpXSA6ICJzc2g6Iik7CisJZnByaW50ZihmLCAiXG4iKTsKKwlmY2xvc2UoZik7CisKKwkvKiBOb3csIGV2YWx1YXRlIHRoZSAqbGFzdCogcGFyYW1ldGVyICovCisJaWYgKGFyZ2MgPCAyKQorCQlyZXR1cm4gMDsKKwljaGlsZF9hcmd2WzBdID0gYXJndlthcmdjIC0gMV07CisJcmV0dXJuIHJ1bl9jb21tYW5kX3Zfb3B0KGNoaWxkX2FyZ3YsIFJVTl9VU0lOR19TSEVMTCk7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWdlbnJhbmRvbS5jIGIvdC9oZWxwZXIvdGVzdC1nZW5yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWI4ZGMxCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1nZW5yYW5kb20uYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogU2ltcGxlIHJhbmRvbSBkYXRhIGdlbmVyYXRvciB1c2VkIHRvIGNyZWF0ZSByZXByb2R1Y2libGUgdGVzdCBmaWxlcy4KKyAqIFRoaXMgaXMgaW5zcGlyZWQgZnJvbSBQT1NJWC4xLTIwMDEgaW1wbGVtZW50YXRpb24gZXhhbXBsZSBmb3IgcmFuZCgpLgorICogQ29weXJpZ2h0IChDKSAyMDA3IGJ5IE5pY29sYXMgUGl0cmUsIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKworaW50IGNtZF9fZ2VucmFuZG9tKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBsb25nIGNvdW50LCBuZXh0ID0gMDsKKwl1bnNpZ25lZCBjaGFyICpjOworCisJaWYgKGFyZ2MgPCAyIHx8IGFyZ2MgPiAzKSB7CisJCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIDxzZWVkX3N0cmluZz4gWzxzaXplPl1cbiIsIGFyZ3ZbMF0pOworCQlyZXR1cm4gMTsKKwl9CisKKwljID0gKHVuc2lnbmVkIGNoYXIgKikgYXJndlsxXTsKKwlkbyB7CisJCW5leHQgPSBuZXh0ICogMTEgKyAqYzsKKwl9IHdoaWxlICgqYysrKTsKKworCWNvdW50ID0gKGFyZ2MgPT0gMykgPyBzdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDApIDogLTFMOworCisJd2hpbGUgKGNvdW50LS0pIHsKKwkJbmV4dCA9IG5leHQgKiAxMTAzNTE1MjQ1ICsgMTIzNDU7CisJCWlmIChwdXRjaGFyKChuZXh0ID4+IDE2KSAmIDB4ZmYpID09IEVPRikKKwkJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtZ2VuemVyb3MuYyBiL3QvaGVscGVyL3Rlc3QtZ2VuemVyb3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTMyZjViCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1nZW56ZXJvcy5jCkBAIC0wLDAgKzEsMjEgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKworaW50IGNtZF9fZ2VuemVyb3MoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWxvbmcgY291bnQ7CisKKwlpZiAoYXJnYyA+IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgWzxjb3VudD5dXG4iLCBhcmd2WzBdKTsKKwkJcmV0dXJuIDE7CisJfQorCisJY291bnQgPSBhcmdjID4gMSA/IHN0cnRvbChhcmd2WzFdLCBOVUxMLCAwKSA6IC0xTDsKKworCXdoaWxlIChjb3VudCA8IDAgfHwgY291bnQtLSkgeworCQlpZiAocHV0Y2hhcigwKSA9PSBFT0YpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWhhc2gtc3BlZWQuYyBiL3QvaGVscGVyL3Rlc3QtaGFzaC1zcGVlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMjIzM2MKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWhhc2gtc3BlZWQuYwpAQCAtMCwwICsxLDYxIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKworI2RlZmluZSBOVU1fU0VDT05EUyAzCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlX2hhc2goY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKmFsZ28sIGdpdF9oYXNoX2N0eCAqY3R4LCB1aW50OF90ICpmaW5hbCwgY29uc3Qgdm9pZCAqcCwgc2l6ZV90IGxlbikKK3sKKwlhbGdvLT5pbml0X2ZuKGN0eCk7CisJYWxnby0+dXBkYXRlX2ZuKGN0eCwgcCwgbGVuKTsKKwlhbGdvLT5maW5hbF9mbihmaW5hbCwgY3R4KTsKK30KKworaW50IGNtZF9faGFzaF9zcGVlZChpbnQgYWMsIGNvbnN0IGNoYXIgKiphdikKK3sKKwlnaXRfaGFzaF9jdHggY3R4OworCXVuc2lnbmVkIGNoYXIgaGFzaFtHSVRfTUFYX1JBV1NaXTsKKwljbG9ja190IGluaXRpYWwsIHN0YXJ0LCBlbmQ7CisJdW5zaWduZWQgYnVmc2l6ZXNbXSA9IHsgNjQsIDI1NiwgMTAyNCwgODE5MiwgMTYzODQgfTsKKwlpbnQgaTsKKwl2b2lkICpwOworCWNvbnN0IHN0cnVjdCBnaXRfaGFzaF9hbGdvICphbGdvID0gTlVMTDsKKworCWlmIChhYyA9PSAyKSB7CisJCWZvciAoaSA9IDE7IGkgPCBHSVRfSEFTSF9OQUxHT1M7IGkrKykgeworCQkJaWYgKCFzdHJjbXAoYXZbMV0sIGhhc2hfYWxnb3NbaV0ubmFtZSkpIHsKKwkJCQlhbGdvID0gJmhhc2hfYWxnb3NbaV07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKCFhbGdvKQorCQlkaWUoInVzYWdlOiB0ZXN0LXRvb2wgaGFzaC1zcGVlZCBhbGdvX25hbWUiKTsKKworCS8qIFVzZSB0aGlzIGFzIGFuIG9mZnNldCB0byBtYWtlIG92ZXJmbG93IGxlc3MgbGlrZWx5LiAqLworCWluaXRpYWwgPSBjbG9jaygpOworCisJcHJpbnRmKCJhbGdvOiAlc1xuIiwgYWxnby0+bmFtZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWZzaXplcyk7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGosIGtiOworCQlkb3VibGUga2JfcGVyX3NlYzsKKwkJcCA9IHhjYWxsb2MoMSwgYnVmc2l6ZXNbaV0pOworCQlzdGFydCA9IGVuZCA9IGNsb2NrKCkgLSBpbml0aWFsOworCQlmb3IgKGogPSAwOyAoKGVuZCAtIHN0YXJ0KSAvIENMT0NLU19QRVJfU0VDKSA8IE5VTV9TRUNPTkRTOyBqKyspIHsKKwkJCWNvbXB1dGVfaGFzaChhbGdvLCAmY3R4LCBoYXNoLCBwLCBidWZzaXplc1tpXSk7CisKKwkJCS8qCisJCQkgKiBPbmx5IGNoZWNrIGVsYXBzZWQgdGltZSBldmVyeSAxMjggaXRlcmF0aW9ucyB0byBhdm9pZAorCQkJICogZG9taW5hdGluZyB0aGUgcnVudGltZSB3aXRoIHN5c3RlbSBjYWxscy4KKwkJCSAqLworCQkJaWYgKCEoaiAmIDEyNykpCisJCQkJZW5kID0gY2xvY2soKSAtIGluaXRpYWw7CisJCX0KKwkJa2IgPSBqICogYnVmc2l6ZXNbaV07CisJCWtiX3Blcl9zZWMgPSBrYiAvICgxMDI0ICogKChkb3VibGUpZW5kIC0gc3RhcnQpIC8gQ0xPQ0tTX1BFUl9TRUMpOworCQlwcmludGYoInNpemUgJXU6ICVsdSBpdGVyczsgJWx1IEtpQjsgJTAuMmYgS2lCL3NcbiIsIGJ1ZnNpemVzW2ldLCBqLCBrYiwga2JfcGVyX3NlYyk7CisJCWZyZWUocCk7CisJfQorCisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtaGFzaC5jIGIvdC9oZWxwZXIvdGVzdC1oYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEzMWRlNgotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtaGFzaC5jCkBAIC0wLDAgKzEsNTggQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCitpbnQgY21kX2hhc2hfaW1wbChpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgaW50IGFsZ28pCit7CisJZ2l0X2hhc2hfY3R4IGN0eDsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9IRVhTWl07CisJdW5zaWduZWQgYnVmc3ogPSA4MTkyOworCWludCBiaW5hcnkgPSAwOworCWNoYXIgKmJ1ZmZlcjsKKwljb25zdCBzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyAqYWxnb3AgPSAmaGFzaF9hbGdvc1thbGdvXTsKKworCWlmIChhYyA9PSAyKSB7CisJCWlmICghc3RyY21wKGF2WzFdLCAiLWIiKSkKKwkJCWJpbmFyeSA9IDE7CisJCWVsc2UKKwkJCWJ1ZnN6ID0gc3RydG91bChhdlsxXSwgTlVMTCwgMTApICogMTAyNCAqIDEwMjQ7CisJfQorCisJaWYgKCFidWZzeikKKwkJYnVmc3ogPSA4MTkyOworCisJd2hpbGUgKChidWZmZXIgPSBtYWxsb2MoYnVmc3opKSA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAiYnVmc3ogJXUgaXMgdG9vIGJpZywgaGFsdmluZy4uLlxuIiwgYnVmc3opOworCQlidWZzeiAvPSAyOworCQlpZiAoYnVmc3ogPCAxMDI0KQorCQkJZGllKCJPT1BTIik7CisJfQorCisJYWxnb3AtPmluaXRfZm4oJmN0eCk7CisKKwl3aGlsZSAoMSkgeworCQlzc2l6ZV90IHN6LCB0aGlzX3N6OworCQljaGFyICpjcCA9IGJ1ZmZlcjsKKwkJdW5zaWduZWQgcm9vbSA9IGJ1ZnN6OworCQl0aGlzX3N6ID0gMDsKKwkJd2hpbGUgKHJvb20pIHsKKwkJCXN6ID0geHJlYWQoMCwgY3AsIHJvb20pOworCQkJaWYgKHN6ID09IDApCisJCQkJYnJlYWs7CisJCQlpZiAoc3ogPCAwKQorCQkJCWRpZV9lcnJubygidGVzdC1oYXNoIik7CisJCQl0aGlzX3N6ICs9IHN6OworCQkJY3AgKz0gc3o7CisJCQlyb29tIC09IHN6OworCQl9CisJCWlmICh0aGlzX3N6ID09IDApCisJCQlicmVhazsKKwkJYWxnb3AtPnVwZGF0ZV9mbigmY3R4LCBidWZmZXIsIHRoaXNfc3opOworCX0KKwlhbGdvcC0+ZmluYWxfZm4oaGFzaCwgJmN0eCk7CisKKwlpZiAoYmluYXJ5KQorCQlmd3JpdGUoaGFzaCwgMSwgYWxnb3AtPnJhd3N6LCBzdGRvdXQpOworCWVsc2UKKwkJcHV0cyhoYXNoX3RvX2hleF9hbGdvcChoYXNoLCBhbGdvcCkpOworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWhhc2htYXAuYyBiL3QvaGVscGVyL3Rlc3QtaGFzaG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzODcwNjIKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWhhc2htYXAuYwpAQCAtMCwwICsxLDI2NyBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RydWN0IHRlc3RfZW50cnkKK3sKKwlpbnQgcGFkZGluZzsgLyogaGFzaG1hcCBlbnRyeSBubyBsb25nZXIgbmVlZHMgdG8gYmUgdGhlIGZpcnN0IG1lbWJlciAqLworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwkvKiBrZXkgYW5kIHZhbHVlIGFzIHR3byBcMC10ZXJtaW5hdGVkIHN0cmluZ3MgKi8KKwljaGFyIGtleVtGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfdmFsdWUoY29uc3Qgc3RydWN0IHRlc3RfZW50cnkgKmUpCit7CisJcmV0dXJuIGUtPmtleSArIHN0cmxlbihlLT5rZXkpICsgMTsKK30KKworc3RhdGljIGludCB0ZXN0X2VudHJ5X2NtcChjb25zdCB2b2lkICpjbXBfZGF0YSwKKwkJCSAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVwdHIsCisJCQkgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCQkgIGNvbnN0IHZvaWQgKmtleWRhdGEpCit7CisJY29uc3QgaW50IGlnbm9yZV9jYXNlID0gY21wX2RhdGEgPyAqKChpbnQgKiljbXBfZGF0YSkgOiAwOworCWNvbnN0IHN0cnVjdCB0ZXN0X2VudHJ5ICplMSwgKmUyOworCWNvbnN0IGNoYXIgKmtleSA9IGtleWRhdGE7CisKKwllMSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3QgdGVzdF9lbnRyeSwgZW50KTsKKwllMiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIGNvbnN0IHN0cnVjdCB0ZXN0X2VudHJ5LCBlbnQpOworCisJaWYgKGlnbm9yZV9jYXNlKQorCQlyZXR1cm4gc3RyY2FzZWNtcChlMS0+a2V5LCBrZXkgPyBrZXkgOiBlMi0+a2V5KTsKKwllbHNlCisJCXJldHVybiBzdHJjbXAoZTEtPmtleSwga2V5ID8ga2V5IDogZTItPmtleSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGVzdF9lbnRyeSAqYWxsb2NfdGVzdF9lbnRyeSh1bnNpZ25lZCBpbnQgaGFzaCwKKwkJCQkJICAgY2hhciAqa2V5LCBjaGFyICp2YWx1ZSkKK3sKKwlzaXplX3Qga2xlbiA9IHN0cmxlbihrZXkpOworCXNpemVfdCB2bGVuID0gc3RybGVuKHZhbHVlKTsKKwlzdHJ1Y3QgdGVzdF9lbnRyeSAqZW50cnkgPSB4bWFsbG9jKHN0X2FkZDQoc2l6ZW9mKCplbnRyeSksIGtsZW4sIHZsZW4sIDIpKTsKKwloYXNobWFwX2VudHJ5X2luaXQoJmVudHJ5LT5lbnQsIGhhc2gpOworCW1lbWNweShlbnRyeS0+a2V5LCBrZXksIGtsZW4gKyAxKTsKKwltZW1jcHkoZW50cnktPmtleSArIGtsZW4gKyAxLCB2YWx1ZSwgdmxlbiArIDEpOworCXJldHVybiBlbnRyeTsKK30KKworI2RlZmluZSBIQVNIX01FVEhPRF9GTlYgMAorI2RlZmluZSBIQVNIX01FVEhPRF9JIDEKKyNkZWZpbmUgSEFTSF9NRVRIT0RfSURJVjEwIDIKKyNkZWZpbmUgSEFTSF9NRVRIT0RfMCAzCisjZGVmaW5lIEhBU0hfTUVUSE9EX1gyIDQKKyNkZWZpbmUgVEVTVF9TUEFSU0UgOAorI2RlZmluZSBURVNUX0FERCAxNgorI2RlZmluZSBURVNUX1NJWkUgMTAwMDAwCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaCh1bnNpZ25lZCBpbnQgbWV0aG9kLCB1bnNpZ25lZCBpbnQgaSwgY29uc3QgY2hhciAqa2V5KQoreworCXVuc2lnbmVkIGludCBoYXNoID0gMDsKKwlzd2l0Y2ggKG1ldGhvZCAmIDMpCisJeworCWNhc2UgSEFTSF9NRVRIT0RfRk5WOgorCQloYXNoID0gc3RyaGFzaChrZXkpOworCQlicmVhazsKKwljYXNlIEhBU0hfTUVUSE9EX0k6CisJCWhhc2ggPSBpOworCQlicmVhazsKKwljYXNlIEhBU0hfTUVUSE9EX0lESVYxMDoKKwkJaGFzaCA9IGkgLyAxMDsKKwkJYnJlYWs7CisJY2FzZSBIQVNIX01FVEhPRF8wOgorCQloYXNoID0gMDsKKwkJYnJlYWs7CisJfQorCisJaWYgKG1ldGhvZCAmIEhBU0hfTUVUSE9EX1gyKQorCQloYXNoID0gMiAqIGhhc2g7CisJcmV0dXJuIGhhc2g7Cit9CisKKy8qCisgKiBUZXN0IHBlcmZvcm1hbmNlIG9mIGhhc2htYXAuW2NoXQorICogVXNhZ2U6IHRpbWUgZWNobyAicGVyZmhhc2htYXAgbWV0aG9kIHJvdW5kcyIgfCB0ZXN0LXRvb2wgaGFzaG1hcAorICovCitzdGF0aWMgdm9pZCBwZXJmX2hhc2htYXAodW5zaWduZWQgaW50IG1ldGhvZCwgdW5zaWduZWQgaW50IHJvdW5kcykKK3sKKwlzdHJ1Y3QgaGFzaG1hcCBtYXA7CisJY2hhciBidWZbMTZdOworCXN0cnVjdCB0ZXN0X2VudHJ5ICoqZW50cmllczsKKwl1bnNpZ25lZCBpbnQgKmhhc2hlczsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKworCUFMTE9DX0FSUkFZKGVudHJpZXMsIFRFU1RfU0laRSk7CisJQUxMT0NfQVJSQVkoaGFzaGVzLCBURVNUX1NJWkUpOworCWZvciAoaSA9IDA7IGkgPCBURVNUX1NJWkU7IGkrKykgeworCQl4c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVpIiwgaSk7CisJCWVudHJpZXNbaV0gPSBhbGxvY190ZXN0X2VudHJ5KDAsIGJ1ZiwgIiIpOworCQloYXNoZXNbaV0gPSBoYXNoKG1ldGhvZCwgaSwgZW50cmllc1tpXS0+a2V5KTsKKwl9CisKKwlpZiAobWV0aG9kICYgVEVTVF9BREQpIHsKKwkJLyogdGVzdCBhZGRpbmcgdG8gdGhlIG1hcCAqLworCQlmb3IgKGogPSAwOyBqIDwgcm91bmRzOyBqKyspIHsKKwkJCWhhc2htYXBfaW5pdCgmbWFwLCB0ZXN0X2VudHJ5X2NtcCwgTlVMTCwgMCk7CisKKwkJCS8qIGFkZCBlbnRyaWVzICovCisJCQlmb3IgKGkgPSAwOyBpIDwgVEVTVF9TSVpFOyBpKyspIHsKKwkJCQloYXNobWFwX2VudHJ5X2luaXQoJmVudHJpZXNbaV0tPmVudCwgaGFzaGVzW2ldKTsKKwkJCQloYXNobWFwX2FkZCgmbWFwLCAmZW50cmllc1tpXS0+ZW50KTsKKwkJCX0KKworCQkJaGFzaG1hcF9mcmVlKCZtYXApOworCQl9CisJfSBlbHNlIHsKKwkJLyogdGVzdCBtYXAgbG9va3VwcyAqLworCQloYXNobWFwX2luaXQoJm1hcCwgdGVzdF9lbnRyeV9jbXAsIE5VTEwsIDApOworCisJCS8qIGZpbGwgdGhlIG1hcCAoc3BhcnNlbHkgaWYgc3BlY2lmaWVkKSAqLworCQlqID0gKG1ldGhvZCAmIFRFU1RfU1BBUlNFKSA/IFRFU1RfU0laRSAvIDEwIDogVEVTVF9TSVpFOworCQlmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7CisJCQloYXNobWFwX2VudHJ5X2luaXQoJmVudHJpZXNbaV0tPmVudCwgaGFzaGVzW2ldKTsKKwkJCWhhc2htYXBfYWRkKCZtYXAsICZlbnRyaWVzW2ldLT5lbnQpOworCQl9CisKKwkJZm9yIChqID0gMDsgaiA8IHJvdW5kczsgaisrKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgVEVTVF9TSVpFOyBpKyspIHsKKwkJCQloYXNobWFwX2dldF9mcm9tX2hhc2goJm1hcCwgaGFzaGVzW2ldLAorCQkJCQkJICAgICAgZW50cmllc1tpXS0+a2V5KTsKKwkJCX0KKwkJfQorCisJCWhhc2htYXBfZnJlZSgmbWFwKTsKKwl9Cit9CisKKyNkZWZpbmUgREVMSU0gIiBcdFxyXG4iCisKKy8qCisgKiBSZWFkIHN0ZGluIGxpbmUgYnkgbGluZSBhbmQgcHJpbnQgcmVzdWx0IG9mIGNvbW1hbmRzIHRvIHN0ZG91dDoKKyAqCisgKiBoYXNoIGtleSAtPiBzdHJoYXNoKGtleSkgbWVtaGFzaChrZXkpIHN0cmloYXNoKGtleSkgbWVtaWhhc2goa2V5KQorICogcHV0IGtleSB2YWx1ZSAtPiBOVUxMIC8gb2xkIHZhbHVlCisgKiBnZXQga2V5IC0+IE5VTEwgLyB2YWx1ZQorICogcmVtb3ZlIGtleSAtPiBOVUxMIC8gb2xkIHZhbHVlCisgKiBpdGVyYXRlIC0+IGtleTEgdmFsdWUxXG5rZXkyIHZhbHVlMlxuLi4uCisgKiBzaXplIC0+IHRhYmxlc2l6ZSBudW1lbnRyaWVzCisgKgorICogcGVyZmhhc2htYXAgbWV0aG9kIHJvdW5kcyAtPiB0ZXN0IGhhc2htYXAuW2NoXSBwZXJmb3JtYW5jZQorICovCitpbnQgY21kX19oYXNobWFwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgaGFzaG1hcCBtYXA7CisJaW50IGljYXNlOworCisJLyogaW5pdCBoYXNoIG1hcCAqLworCWljYXNlID0gYXJnYyA+IDEgJiYgIXN0cmNtcCgiaWdub3JlY2FzZSIsIGFyZ3ZbMV0pOworCWhhc2htYXBfaW5pdCgmbWFwLCB0ZXN0X2VudHJ5X2NtcCwgJmljYXNlLCAwKTsKKworCS8qIHByb2Nlc3MgY29tbWFuZHMgZnJvbSBzdGRpbiAqLworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmbGluZSwgc3RkaW4pICE9IEVPRikgeworCQljaGFyICpjbWQsICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7CisJCXVuc2lnbmVkIGludCBoYXNoID0gMDsKKwkJc3RydWN0IHRlc3RfZW50cnkgKmVudHJ5OworCisJCS8qIGJyZWFrIGxpbmUgaW50byBjb21tYW5kIGFuZCB1cCB0byB0d28gcGFyYW1ldGVycyAqLworCQljbWQgPSBzdHJ0b2sobGluZS5idWYsIERFTElNKTsKKwkJLyogaWdub3JlIGVtcHR5IGxpbmVzICovCisJCWlmICghY21kIHx8ICpjbWQgPT0gJyMnKQorCQkJY29udGludWU7CisKKwkJcDEgPSBzdHJ0b2soTlVMTCwgREVMSU0pOworCQlpZiAocDEpIHsKKwkJCWhhc2ggPSBpY2FzZSA/IHN0cmloYXNoKHAxKSA6IHN0cmhhc2gocDEpOworCQkJcDIgPSBzdHJ0b2soTlVMTCwgREVMSU0pOworCQl9CisKKwkJaWYgKCFzdHJjbXAoImFkZCIsIGNtZCkgJiYgcDEgJiYgcDIpIHsKKworCQkJLyogY3JlYXRlIGVudHJ5IHdpdGgga2V5ID0gcDEsIHZhbHVlID0gcDIgKi8KKwkJCWVudHJ5ID0gYWxsb2NfdGVzdF9lbnRyeShoYXNoLCBwMSwgcDIpOworCisJCQkvKiBhZGQgdG8gaGFzaG1hcCAqLworCQkJaGFzaG1hcF9hZGQoJm1hcCwgJmVudHJ5LT5lbnQpOworCisJCX0gZWxzZSBpZiAoIXN0cmNtcCgicHV0IiwgY21kKSAmJiBwMSAmJiBwMikgeworCisJCQkvKiBjcmVhdGUgZW50cnkgd2l0aCBrZXkgPSBwMSwgdmFsdWUgPSBwMiAqLworCQkJZW50cnkgPSBhbGxvY190ZXN0X2VudHJ5KGhhc2gsIHAxLCBwMik7CisKKwkJCS8qIGFkZCAvIHJlcGxhY2UgZW50cnkgKi8KKwkJCWVudHJ5ID0gaGFzaG1hcF9wdXRfZW50cnkoJm1hcCwgZW50cnksIGVudCk7CisKKwkJCS8qIHByaW50IGFuZCBmcmVlIHJlcGxhY2VkIGVudHJ5LCBpZiBhbnkgKi8KKwkJCXB1dHMoZW50cnkgPyBnZXRfdmFsdWUoZW50cnkpIDogIk5VTEwiKTsKKwkJCWZyZWUoZW50cnkpOworCisJCX0gZWxzZSBpZiAoIXN0cmNtcCgiZ2V0IiwgY21kKSAmJiBwMSkgeworCQkJLyogbG9va3VwIGVudHJ5IGluIGhhc2htYXAgKi8KKwkJCWVudHJ5ID0gaGFzaG1hcF9nZXRfZW50cnlfZnJvbV9oYXNoKCZtYXAsIGhhc2gsIHAxLAorCQkJCQkJCXN0cnVjdCB0ZXN0X2VudHJ5LCBlbnQpOworCisJCQkvKiBwcmludCByZXN1bHQgKi8KKwkJCWlmICghZW50cnkpCisJCQkJcHV0cygiTlVMTCIpOworCQkJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeV9mcm9tKCZtYXAsIGVudHJ5LCBlbnQpCisJCQkJcHV0cyhnZXRfdmFsdWUoZW50cnkpKTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoInJlbW92ZSIsIGNtZCkgJiYgcDEpIHsKKworCQkJLyogc2V0dXAgc3RhdGljIGtleSAqLworCQkJc3RydWN0IGhhc2htYXBfZW50cnkga2V5OworCQkJc3RydWN0IGhhc2htYXBfZW50cnkgKnJtOworCQkJaGFzaG1hcF9lbnRyeV9pbml0KCZrZXksIGhhc2gpOworCisJCQkvKiByZW1vdmUgZW50cnkgZnJvbSBoYXNobWFwICovCisJCQlybSA9IGhhc2htYXBfcmVtb3ZlKCZtYXAsICZrZXksIHAxKTsKKwkJCWVudHJ5ID0gcm0gPyBjb250YWluZXJfb2Yocm0sIHN0cnVjdCB0ZXN0X2VudHJ5LCBlbnQpCisJCQkJCTogTlVMTDsKKworCQkJLyogcHJpbnQgcmVzdWx0IGFuZCBmcmVlIGVudHJ5Ki8KKwkJCXB1dHMoZW50cnkgPyBnZXRfdmFsdWUoZW50cnkpIDogIk5VTEwiKTsKKwkJCWZyZWUoZW50cnkpOworCisJCX0gZWxzZSBpZiAoIXN0cmNtcCgiaXRlcmF0ZSIsIGNtZCkpIHsKKwkJCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKworCQkJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeSgmbWFwLCAmaXRlciwgZW50cnksCisJCQkJCQllbnQgLyogbWVtYmVyIG5hbWUgKi8pCisJCQkJcHJpbnRmKCIlcyAlc1xuIiwgZW50cnktPmtleSwgZ2V0X3ZhbHVlKGVudHJ5KSk7CisKKwkJfSBlbHNlIGlmICghc3RyY21wKCJzaXplIiwgY21kKSkgeworCisJCQkvKiBwcmludCB0YWJsZSBzaXplcyAqLworCQkJcHJpbnRmKCIldSAldVxuIiwgbWFwLnRhYmxlc2l6ZSwKKwkJCSAgICAgICBoYXNobWFwX2dldF9zaXplKCZtYXApKTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoImludGVybiIsIGNtZCkgJiYgcDEpIHsKKworCQkJLyogdGVzdCB0aGF0IHN0cmludGVybiB3b3JrcyAqLworCQkJY29uc3QgY2hhciAqaTEgPSBzdHJpbnRlcm4ocDEpOworCQkJY29uc3QgY2hhciAqaTIgPSBzdHJpbnRlcm4ocDEpOworCQkJaWYgKHN0cmNtcChpMSwgcDEpKQorCQkJCXByaW50Zigic3RyaW50ZXJuKCVzKSByZXR1cm5zICVzXG4iLCBwMSwgaTEpOworCQkJZWxzZSBpZiAoaTEgPT0gcDEpCisJCQkJcHJpbnRmKCJzdHJpbnRlcm4oJXMpIHJldHVybnMgaW5wdXQgcG9pbnRlclxuIiwgcDEpOworCQkJZWxzZSBpZiAoaTEgIT0gaTIpCisJCQkJcHJpbnRmKCJzdHJpbnRlcm4oJXMpICE9IHN0cmludGVybiglcykiLCBpMSwgaTIpOworCQkJZWxzZQorCQkJCXByaW50ZigiJXNcbiIsIGkxKTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoInBlcmZoYXNobWFwIiwgY21kKSAmJiBwMSAmJiBwMikgeworCisJCQlwZXJmX2hhc2htYXAoYXRvaShwMSksIGF0b2kocDIpKTsKKworCQl9IGVsc2UgeworCisJCQlwcmludGYoIlVua25vd24gY29tbWFuZCAlc1xuIiwgY21kKTsKKworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZtYXAsIHN0cnVjdCB0ZXN0X2VudHJ5LCBlbnQpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1pbmRleC12ZXJzaW9uLmMgYi90L2hlbHBlci90ZXN0LWluZGV4LXZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2QxMDk2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1pbmRleC12ZXJzaW9uLmMKQEAgLTAsMCArMSwxNSBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisKK2ludCBjbWRfX2luZGV4X3ZlcnNpb24oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBjYWNoZV9oZWFkZXIgaGRyOworCWludCB2ZXJzaW9uOworCisJbWVtc2V0KCZoZHIsMCxzaXplb2YoaGRyKSk7CisJaWYgKHJlYWQoMCwgJmhkciwgc2l6ZW9mKGhkcikpICE9IHNpemVvZihoZHIpKQorCQlyZXR1cm4gMDsKKwl2ZXJzaW9uID0gbnRvaGwoaGRyLmhkcl92ZXJzaW9uKTsKKwlwcmludGYoIiVkXG4iLCB2ZXJzaW9uKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtanNvbi13cml0ZXIuYyBiL3QvaGVscGVyL3Rlc3QtanNvbi13cml0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2M0NTI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1qc29uLXdyaXRlci5jCkBAIC0wLDAgKzEsNTY1IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJqc29uLXdyaXRlci5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0X29iajEgPSAie1wiYVwiOlwiYWJjXCIsXCJiXCI6NDIsXCJjXCI6dHJ1ZX0iOworc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdF9vYmoyID0gIntcImFcIjotMSxcImJcIjoyMTQ3NDgzNjQ3LFwiY1wiOjB9IjsKK3N0YXRpYyBjb25zdCBjaGFyICpleHBlY3Rfb2JqMyA9ICJ7XCJhXCI6MCxcImJcIjo0Mjk0OTY3Mjk1LFwiY1wiOjkyMjMzNzIwMzY4NTQ3NzU4MDd9IjsKK3N0YXRpYyBjb25zdCBjaGFyICpleHBlY3Rfb2JqNCA9ICJ7XCJ0XCI6dHJ1ZSxcImZcIjpmYWxzZSxcIm5cIjpudWxsfSI7CitzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0X29iajUgPSAie1wiYWJjXFx0ZGVmXCI6XCJhYmNcXFxcZGVmXCJ9IjsKK3N0YXRpYyBjb25zdCBjaGFyICpleHBlY3Rfb2JqNiA9ICJ7XCJhXCI6My4xNH0iOworCitzdGF0aWMgY29uc3QgY2hhciAqcHJldHR5X29iajEgPSAoIntcbiIKKwkJCQkgICIgIFwiYVwiOiBcImFiY1wiLFxuIgorCQkJCSAgIiAgXCJiXCI6IDQyLFxuIgorCQkJCSAgIiAgXCJjXCI6IHRydWVcbiIKKwkJCQkgICJ9Iik7CitzdGF0aWMgY29uc3QgY2hhciAqcHJldHR5X29iajIgPSAoIntcbiIKKwkJCQkgICIgIFwiYVwiOiAtMSxcbiIKKwkJCQkgICIgIFwiYlwiOiAyMTQ3NDgzNjQ3LFxuIgorCQkJCSAgIiAgXCJjXCI6IDBcbiIKKwkJCQkgICJ9Iik7CitzdGF0aWMgY29uc3QgY2hhciAqcHJldHR5X29iajMgPSAoIntcbiIKKwkJCQkgICIgIFwiYVwiOiAwLFxuIgorCQkJCSAgIiAgXCJiXCI6IDQyOTQ5NjcyOTUsXG4iCisJCQkJICAiICBcImNcIjogOTIyMzM3MjAzNjg1NDc3NTgwN1xuIgorCQkJCSAgIn0iKTsKK3N0YXRpYyBjb25zdCBjaGFyICpwcmV0dHlfb2JqNCA9ICgie1xuIgorCQkJCSAgIiAgXCJ0XCI6IHRydWUsXG4iCisJCQkJICAiICBcImZcIjogZmFsc2UsXG4iCisJCQkJICAiICBcIm5cIjogbnVsbFxuIgorCQkJCSAgIn0iKTsKKworc3RhdGljIHN0cnVjdCBqc29uX3dyaXRlciBvYmoxID0gSlNPTl9XUklURVJfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QganNvbl93cml0ZXIgb2JqMiA9IEpTT05fV1JJVEVSX0lOSVQ7CitzdGF0aWMgc3RydWN0IGpzb25fd3JpdGVyIG9iajMgPSBKU09OX1dSSVRFUl9JTklUOworc3RhdGljIHN0cnVjdCBqc29uX3dyaXRlciBvYmo0ID0gSlNPTl9XUklURVJfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QganNvbl93cml0ZXIgb2JqNSA9IEpTT05fV1JJVEVSX0lOSVQ7CitzdGF0aWMgc3RydWN0IGpzb25fd3JpdGVyIG9iajYgPSBKU09OX1dSSVRFUl9JTklUOworCitzdGF0aWMgdm9pZCBtYWtlX29iajEoaW50IHByZXR0eSkKK3sKKwlqd19vYmplY3RfYmVnaW4oJm9iajEsIHByZXR0eSk7CisJeworCQlqd19vYmplY3Rfc3RyaW5nKCZvYmoxLCAiYSIsICJhYmMiKTsKKwkJandfb2JqZWN0X2ludG1heCgmb2JqMSwgImIiLCA0Mik7CisJCWp3X29iamVjdF90cnVlKCZvYmoxLCAiYyIpOworCX0KKwlqd19lbmQoJm9iajEpOworfQorCitzdGF0aWMgdm9pZCBtYWtlX29iajIoaW50IHByZXR0eSkKK3sKKwlqd19vYmplY3RfYmVnaW4oJm9iajIsIHByZXR0eSk7CisJeworCQlqd19vYmplY3RfaW50bWF4KCZvYmoyLCAiYSIsIC0xKTsKKwkJandfb2JqZWN0X2ludG1heCgmb2JqMiwgImIiLCAweDdmZmZmZmZmKTsKKwkJandfb2JqZWN0X2ludG1heCgmb2JqMiwgImMiLCAwKTsKKwl9CisJandfZW5kKCZvYmoyKTsKK30KKworc3RhdGljIHZvaWQgbWFrZV9vYmozKGludCBwcmV0dHkpCit7CisJandfb2JqZWN0X2JlZ2luKCZvYmozLCBwcmV0dHkpOworCXsKKwkJandfb2JqZWN0X2ludG1heCgmb2JqMywgImEiLCAwKTsKKwkJandfb2JqZWN0X2ludG1heCgmb2JqMywgImIiLCAweGZmZmZmZmZmKTsKKwkJandfb2JqZWN0X2ludG1heCgmb2JqMywgImMiLCAweDdmZmZmZmZmZmZmZmZmZmZVTEwpOworCX0KKwlqd19lbmQoJm9iajMpOworfQorCitzdGF0aWMgdm9pZCBtYWtlX29iajQoaW50IHByZXR0eSkKK3sKKwlqd19vYmplY3RfYmVnaW4oJm9iajQsIHByZXR0eSk7CisJeworCQlqd19vYmplY3RfdHJ1ZSgmb2JqNCwgInQiKTsKKwkJandfb2JqZWN0X2ZhbHNlKCZvYmo0LCAiZiIpOworCQlqd19vYmplY3RfbnVsbCgmb2JqNCwgIm4iKTsKKwl9CisJandfZW5kKCZvYmo0KTsKK30KKworc3RhdGljIHZvaWQgbWFrZV9vYmo1KGludCBwcmV0dHkpCit7CisJandfb2JqZWN0X2JlZ2luKCZvYmo1LCBwcmV0dHkpOworCXsKKwkJandfb2JqZWN0X3N0cmluZygmb2JqNSwgImFiYyIgIlx4MDkiICJkZWYiLCAiYWJjIiAiXFwiICJkZWYiKTsKKwl9CisJandfZW5kKCZvYmo1KTsKK30KKworc3RhdGljIHZvaWQgbWFrZV9vYmo2KGludCBwcmV0dHkpCit7CisJandfb2JqZWN0X2JlZ2luKCZvYmo2LCBwcmV0dHkpOworCXsKKwkJandfb2JqZWN0X2RvdWJsZSgmb2JqNiwgImEiLCAyLCAzLjE0MTU5KTsKKwl9CisJandfZW5kKCZvYmo2KTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdF9hcnIxID0gIltcImFiY1wiLDQyLHRydWVdIjsKK3N0YXRpYyBjb25zdCBjaGFyICpleHBlY3RfYXJyMiA9ICJbLTEsMjE0NzQ4MzY0NywwXSI7CitzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0X2FycjMgPSAiWzAsNDI5NDk2NzI5NSw5MjIzMzcyMDM2ODU0Nzc1ODA3XSI7CitzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0X2FycjQgPSAiW3RydWUsZmFsc2UsbnVsbF0iOworCitzdGF0aWMgY29uc3QgY2hhciAqcHJldHR5X2FycjEgPSAoIltcbiIKKwkJCQkgICIgIFwiYWJjXCIsXG4iCisJCQkJICAiICA0MixcbiIKKwkJCQkgICIgIHRydWVcbiIKKwkJCQkgICJdIik7CitzdGF0aWMgY29uc3QgY2hhciAqcHJldHR5X2FycjIgPSAoIltcbiIKKwkJCQkgICIgIC0xLFxuIgorCQkJCSAgIiAgMjE0NzQ4MzY0NyxcbiIKKwkJCQkgICIgIDBcbiIKKwkJCQkgICJdIik7CitzdGF0aWMgY29uc3QgY2hhciAqcHJldHR5X2FycjMgPSAoIltcbiIKKwkJCQkgICIgIDAsXG4iCisJCQkJICAiICA0Mjk0OTY3Mjk1LFxuIgorCQkJCSAgIiAgOTIyMzM3MjAzNjg1NDc3NTgwN1xuIgorCQkJCSAgIl0iKTsKK3N0YXRpYyBjb25zdCBjaGFyICpwcmV0dHlfYXJyNCA9ICgiW1xuIgorCQkJCSAgIiAgdHJ1ZSxcbiIKKwkJCQkgICIgIGZhbHNlLFxuIgorCQkJCSAgIiAgbnVsbFxuIgorCQkJCSAgIl0iKTsKKworc3RhdGljIHN0cnVjdCBqc29uX3dyaXRlciBhcnIxID0gSlNPTl9XUklURVJfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QganNvbl93cml0ZXIgYXJyMiA9IEpTT05fV1JJVEVSX0lOSVQ7CitzdGF0aWMgc3RydWN0IGpzb25fd3JpdGVyIGFycjMgPSBKU09OX1dSSVRFUl9JTklUOworc3RhdGljIHN0cnVjdCBqc29uX3dyaXRlciBhcnI0ID0gSlNPTl9XUklURVJfSU5JVDsKKworc3RhdGljIHZvaWQgbWFrZV9hcnIxKGludCBwcmV0dHkpCit7CisJandfYXJyYXlfYmVnaW4oJmFycjEsIHByZXR0eSk7CisJeworCQlqd19hcnJheV9zdHJpbmcoJmFycjEsICJhYmMiKTsKKwkJandfYXJyYXlfaW50bWF4KCZhcnIxLCA0Mik7CisJCWp3X2FycmF5X3RydWUoJmFycjEpOworCX0KKwlqd19lbmQoJmFycjEpOworfQorCitzdGF0aWMgdm9pZCBtYWtlX2FycjIoaW50IHByZXR0eSkKK3sKKwlqd19hcnJheV9iZWdpbigmYXJyMiwgcHJldHR5KTsKKwl7CisJCWp3X2FycmF5X2ludG1heCgmYXJyMiwgLTEpOworCQlqd19hcnJheV9pbnRtYXgoJmFycjIsIDB4N2ZmZmZmZmYpOworCQlqd19hcnJheV9pbnRtYXgoJmFycjIsIDApOworCX0KKwlqd19lbmQoJmFycjIpOworfQorCitzdGF0aWMgdm9pZCBtYWtlX2FycjMoaW50IHByZXR0eSkKK3sKKwlqd19hcnJheV9iZWdpbigmYXJyMywgcHJldHR5KTsKKwl7CisJCWp3X2FycmF5X2ludG1heCgmYXJyMywgMCk7CisJCWp3X2FycmF5X2ludG1heCgmYXJyMywgMHhmZmZmZmZmZik7CisJCWp3X2FycmF5X2ludG1heCgmYXJyMywgMHg3ZmZmZmZmZmZmZmZmZmZmVUxMKTsKKwl9CisJandfZW5kKCZhcnIzKTsKK30KKworc3RhdGljIHZvaWQgbWFrZV9hcnI0KGludCBwcmV0dHkpCit7CisJandfYXJyYXlfYmVnaW4oJmFycjQsIHByZXR0eSk7CisJeworCQlqd19hcnJheV90cnVlKCZhcnI0KTsKKwkJandfYXJyYXlfZmFsc2UoJmFycjQpOworCQlqd19hcnJheV9udWxsKCZhcnI0KTsKKwl9CisJandfZW5kKCZhcnI0KTsKK30KKworc3RhdGljIGNoYXIgKmV4cGVjdF9uZXN0MSA9CisJIntcIm9iajFcIjp7XCJhXCI6XCJhYmNcIixcImJcIjo0MixcImNcIjp0cnVlfSxcImFycjFcIjpbXCJhYmNcIiw0Mix0cnVlXX0iOworCitzdGF0aWMgc3RydWN0IGpzb25fd3JpdGVyIG5lc3QxID0gSlNPTl9XUklURVJfSU5JVDsKKworc3RhdGljIHZvaWQgbWFrZV9uZXN0MShpbnQgcHJldHR5KQoreworCWp3X29iamVjdF9iZWdpbigmbmVzdDEsIHByZXR0eSk7CisJeworCQlqd19vYmplY3Rfc3ViX2p3KCZuZXN0MSwgIm9iajEiLCAmb2JqMSk7CisJCWp3X29iamVjdF9zdWJfancoJm5lc3QxLCAiYXJyMSIsICZhcnIxKTsKKwl9CisJandfZW5kKCZuZXN0MSk7Cit9CisKK3N0YXRpYyBjaGFyICpleHBlY3RfaW5saW5lMSA9CisJIntcIm9iajFcIjp7XCJhXCI6XCJhYmNcIixcImJcIjo0MixcImNcIjp0cnVlfSxcImFycjFcIjpbXCJhYmNcIiw0Mix0cnVlXX0iOworCitzdGF0aWMgY2hhciAqcHJldHR5X2lubGluZTEgPQorCSgie1xuIgorCSAiICBcIm9iajFcIjoge1xuIgorCSAiICAgIFwiYVwiOiBcImFiY1wiLFxuIgorCSAiICAgIFwiYlwiOiA0MixcbiIKKwkgIiAgICBcImNcIjogdHJ1ZVxuIgorCSAiICB9LFxuIgorCSAiICBcImFycjFcIjogW1xuIgorCSAiICAgIFwiYWJjXCIsXG4iCisJICIgICAgNDIsXG4iCisJICIgICAgdHJ1ZVxuIgorCSAiICBdXG4iCisJICJ9Iik7CisKK3N0YXRpYyBzdHJ1Y3QganNvbl93cml0ZXIgaW5saW5lMSA9IEpTT05fV1JJVEVSX0lOSVQ7CisKK3N0YXRpYyB2b2lkIG1ha2VfaW5saW5lMShpbnQgcHJldHR5KQoreworCWp3X29iamVjdF9iZWdpbigmaW5saW5lMSwgcHJldHR5KTsKKwl7CisJCWp3X29iamVjdF9pbmxpbmVfYmVnaW5fb2JqZWN0KCZpbmxpbmUxLCAib2JqMSIpOworCQl7CisJCQlqd19vYmplY3Rfc3RyaW5nKCZpbmxpbmUxLCAiYSIsICJhYmMiKTsKKwkJCWp3X29iamVjdF9pbnRtYXgoJmlubGluZTEsICJiIiwgNDIpOworCQkJandfb2JqZWN0X3RydWUoJmlubGluZTEsICJjIik7CisJCX0KKwkJandfZW5kKCZpbmxpbmUxKTsKKwkJandfb2JqZWN0X2lubGluZV9iZWdpbl9hcnJheSgmaW5saW5lMSwgImFycjEiKTsKKwkJeworCQkJandfYXJyYXlfc3RyaW5nKCZpbmxpbmUxLCAiYWJjIik7CisJCQlqd19hcnJheV9pbnRtYXgoJmlubGluZTEsIDQyKTsKKwkJCWp3X2FycmF5X3RydWUoJmlubGluZTEpOworCQl9CisJCWp3X2VuZCgmaW5saW5lMSk7CisJfQorCWp3X2VuZCgmaW5saW5lMSk7Cit9CisKK3N0YXRpYyBjaGFyICpleHBlY3RfaW5saW5lMiA9CisJIltbMSwyXSxbMyw0XSx7XCJhXCI6XCJhYmNcIn1dIjsKKworc3RhdGljIGNoYXIgKnByZXR0eV9pbmxpbmUyID0KKwkoIltcbiIKKwkgIiAgW1xuIgorCSAiICAgIDEsXG4iCisJICIgICAgMlxuIgorCSAiICBdLFxuIgorCSAiICBbXG4iCisJICIgICAgMyxcbiIKKwkgIiAgICA0XG4iCisJICIgIF0sXG4iCisJICIgIHtcbiIKKwkgIiAgICBcImFcIjogXCJhYmNcIlxuIgorCSAiICB9XG4iCisJICJdIik7CisKK3N0YXRpYyBzdHJ1Y3QganNvbl93cml0ZXIgaW5saW5lMiA9IEpTT05fV1JJVEVSX0lOSVQ7CisKK3N0YXRpYyB2b2lkIG1ha2VfaW5saW5lMihpbnQgcHJldHR5KQoreworCWp3X2FycmF5X2JlZ2luKCZpbmxpbmUyLCBwcmV0dHkpOworCXsKKwkJandfYXJyYXlfaW5saW5lX2JlZ2luX2FycmF5KCZpbmxpbmUyKTsKKwkJeworCQkJandfYXJyYXlfaW50bWF4KCZpbmxpbmUyLCAxKTsKKwkJCWp3X2FycmF5X2ludG1heCgmaW5saW5lMiwgMik7CisJCX0KKwkJandfZW5kKCZpbmxpbmUyKTsKKwkJandfYXJyYXlfaW5saW5lX2JlZ2luX2FycmF5KCZpbmxpbmUyKTsKKwkJeworCQkJandfYXJyYXlfaW50bWF4KCZpbmxpbmUyLCAzKTsKKwkJCWp3X2FycmF5X2ludG1heCgmaW5saW5lMiwgNCk7CisJCX0KKwkJandfZW5kKCZpbmxpbmUyKTsKKwkJandfYXJyYXlfaW5saW5lX2JlZ2luX29iamVjdCgmaW5saW5lMik7CisJCXsKKwkJCWp3X29iamVjdF9zdHJpbmcoJmlubGluZTIsICJhIiwgImFiYyIpOworCQl9CisJCWp3X2VuZCgmaW5saW5lMik7CisJfQorCWp3X2VuZCgmaW5saW5lMik7Cit9CisKKy8qCisgKiBXaGVuIHN1cGVyIGlzIGNvbXBhY3QsIHdlIGV4cGVjdCBzdWJzIHRvIGJlIGNvbXBhY3RlZCAoZXZlbiBpZiBvcmlnaW5hbGx5CisgKiBwcmV0dHkpLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0X21peGVkMSA9CisJKCJ7XCJvYmoxXCI6e1wiYVwiOlwiYWJjXCIsXCJiXCI6NDIsXCJjXCI6dHJ1ZX0sIgorCSAiXCJhcnIxXCI6W1wiYWJjXCIsNDIsdHJ1ZV19Iik7CisKKy8qCisgKiBXaGVuIHN1cGVyIGlzIHByZXR0eSwgYSBjb21wYWN0IHN1YiAob2JqMSkgaXMga2VwdCBjb21wYWN0IGFuZCBhIHByZXR0eQorICogc3ViIChhcnIxKSBpcyByZS1pbmRlbnRlZC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnByZXR0eV9taXhlZDEgPQorCSgie1xuIgorCSAiICBcIm9iajFcIjoge1wiYVwiOlwiYWJjXCIsXCJiXCI6NDIsXCJjXCI6dHJ1ZX0sXG4iCisJICIgIFwiYXJyMVwiOiBbXG4iCisJICIgICAgXCJhYmNcIixcbiIKKwkgIiAgICA0MixcbiIKKwkgIiAgICB0cnVlXG4iCisJICIgIF1cbiIKKwkgIn0iKTsKKworc3RhdGljIHN0cnVjdCBqc29uX3dyaXRlciBtaXhlZDEgPSBKU09OX1dSSVRFUl9JTklUOworCitzdGF0aWMgdm9pZCBtYWtlX21peGVkMShpbnQgcHJldHR5KQoreworCWp3X2luaXQoJm9iajEpOworCWp3X2luaXQoJmFycjEpOworCisJbWFrZV9vYmoxKDApOyAvKiBvYmoxIGlzIGNvbXBhY3QgKi8KKwltYWtlX2FycjEoMSk7IC8qIGFycjEgaXMgcHJldHR5ICovCisKKwlqd19vYmplY3RfYmVnaW4oJm1peGVkMSwgcHJldHR5KTsKKwl7CisJCWp3X29iamVjdF9zdWJfancoJm1peGVkMSwgIm9iajEiLCAmb2JqMSk7CisJCWp3X29iamVjdF9zdWJfancoJm1peGVkMSwgImFycjEiLCAmYXJyMSk7CisJfQorCWp3X2VuZCgmbWl4ZWQxKTsKK30KKworc3RhdGljIHZvaWQgY21wKGNvbnN0IGNoYXIgKnRlc3QsIGNvbnN0IHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmV4cCkKK3sKKwlpZiAoIXN0cmNtcChqdy0+anNvbi5idWYsIGV4cCkpCisJCXJldHVybjsKKworCXByaW50ZigiZXJyb3JbJXNdOiBvYnNlcnZlZCAnJXMnIGV4cGVjdGVkICclcydcbiIsCisJICAgICAgIHRlc3QsIGp3LT5qc29uLmJ1ZiwgZXhwKTsKKwlleGl0KDEpOworfQorCisjZGVmaW5lIHQodikgZG8geyBtYWtlXyMjdigwKTsgY21wKCN2LCAmdiwgZXhwZWN0XyMjdik7IH0gd2hpbGUgKDApCisjZGVmaW5lIHAodikgZG8geyBtYWtlXyMjdigxKTsgY21wKCN2LCAmdiwgcHJldHR5XyMjdik7IH0gd2hpbGUgKDApCisKKy8qCisgKiBSdW4gc29tZSBiYXNpYyByZWdyZXNzaW9uIHRlc3RzIHdpdGggc29tZSBrbm93biBwYXR0ZXJucy4KKyAqIFRoZXNlIHRlc3RzIGFsc28gZGVtb25zdHJhdGUgaG93IHRvIHVzZSB0aGUgandfIEFQSS4KKyAqLworc3RhdGljIGludCB1bml0X3Rlc3RzKHZvaWQpCit7CisJLyogY29tcHRhY3QgKGNhbm9uaWNhbCkgZm9ybXMgKi8KKwl0KG9iajEpOworCXQob2JqMik7CisJdChvYmozKTsKKwl0KG9iajQpOworCXQob2JqNSk7CisJdChvYmo2KTsKKworCXQoYXJyMSk7CisJdChhcnIyKTsKKwl0KGFycjMpOworCXQoYXJyNCk7CisKKwl0KG5lc3QxKTsKKworCXQoaW5saW5lMSk7CisJdChpbmxpbmUyKTsKKworCWp3X2luaXQoJm9iajEpOworCWp3X2luaXQoJm9iajIpOworCWp3X2luaXQoJm9iajMpOworCWp3X2luaXQoJm9iajQpOworCisJandfaW5pdCgmYXJyMSk7CisJandfaW5pdCgmYXJyMik7CisJandfaW5pdCgmYXJyMyk7CisJandfaW5pdCgmYXJyNCk7CisKKwlqd19pbml0KCZpbmxpbmUxKTsKKwlqd19pbml0KCZpbmxpbmUyKTsKKworCS8qIHByZXR0eSBmb3JtcyAqLworCXAob2JqMSk7CisJcChvYmoyKTsKKwlwKG9iajMpOworCXAob2JqNCk7CisKKwlwKGFycjEpOworCXAoYXJyMik7CisJcChhcnIzKTsKKwlwKGFycjQpOworCisJcChpbmxpbmUxKTsKKwlwKGlubGluZTIpOworCisJLyogbWl4ZWQgZm9ybXMgKi8KKwl0KG1peGVkMSk7CisJandfaW5pdCgmbWl4ZWQxKTsKKwlwKG1peGVkMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2V0X3MoaW50IGxpbmVfbnIsIGNoYXIgKipzX2luKQoreworCSpzX2luID0gc3RydG9rKE5VTEwsICIgIik7CisJaWYgKCEqc19pbikKKwkJZGllKCJsaW5lWyVkXTogZXhwZWN0ZWQ6IDxzPiIsIGxpbmVfbnIpOworfQorCitzdGF0aWMgdm9pZCBnZXRfaShpbnQgbGluZV9uciwgaW50bWF4X3QgKnNfaW4pCit7CisJY2hhciAqczsKKwljaGFyICplbmRwdHI7CisKKwlnZXRfcyhsaW5lX25yLCAmcyk7CisKKwkqc19pbiA9IHN0cnRvbChzLCAmZW5kcHRyLCAxMCk7CisJaWYgKCplbmRwdHIgfHwgZXJybm8gPT0gRVJBTkdFKQorCQlkaWUoImxpbmVbJWRdOiBpbnZhbGlkIGludGVnZXIgdmFsdWUiLCBsaW5lX25yKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2QoaW50IGxpbmVfbnIsIGRvdWJsZSAqc19pbikKK3sKKwljaGFyICpzOworCWNoYXIgKmVuZHB0cjsKKworCWdldF9zKGxpbmVfbnIsICZzKTsKKworCSpzX2luID0gc3RydG9kKHMsICZlbmRwdHIpOworCWlmICgqZW5kcHRyIHx8IGVycm5vID09IEVSQU5HRSkKKwkJZGllKCJsaW5lWyVkXTogaW52YWxpZCBmbG9hdCB2YWx1ZSIsIGxpbmVfbnIpOworfQorCitzdGF0aWMgaW50IHByZXR0eTsKKworI2RlZmluZSBNQVhfTElORV9MRU5HVEggKDY0ICogMTAyNCkKKworc3RhdGljIGNoYXIgKmdldF90cmltbWVkX2xpbmUoY2hhciAqYnVmLCBpbnQgYnVmX3NpemUpCit7CisJaW50IGxlbjsKKworCWlmICghZmdldHMoYnVmLCBidWZfc2l6ZSwgc3RkaW4pKQorCQlyZXR1cm4gTlVMTDsKKworCWxlbiA9IHN0cmxlbihidWYpOworCXdoaWxlIChsZW4gPiAwKSB7CisJCWNoYXIgYyA9IGJ1ZltsZW4gLSAxXTsKKwkJaWYgKGMgPT0gJ1xuJyB8fCBjID09ICdccicgfHwgYyA9PSAnICcgfHwgYyA9PSAnXHQnKQorCQkJYnVmWy0tbGVuXSA9IDA7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCXdoaWxlICgqYnVmID09ICcgJyB8fCAqYnVmID09ICdcdCcpCisJCWJ1ZisrOworCisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIGludCBzY3JpcHRlZCh2b2lkKQoreworCXN0cnVjdCBqc29uX3dyaXRlciBqdyA9IEpTT05fV1JJVEVSX0lOSVQ7CisJY2hhciBidWZbTUFYX0xJTkVfTEVOR1RIXTsKKwljaGFyICpsaW5lOworCWludCBsaW5lX25yID0gMDsKKworCWxpbmUgPSBnZXRfdHJpbW1lZF9saW5lKGJ1ZiwgTUFYX0xJTkVfTEVOR1RIKTsKKwlpZiAoIWxpbmUpCisJCXJldHVybiAwOworCisJaWYgKCFzdHJjbXAobGluZSwgIm9iamVjdCIpKQorCQlqd19vYmplY3RfYmVnaW4oJmp3LCBwcmV0dHkpOworCWVsc2UgaWYgKCFzdHJjbXAobGluZSwgImFycmF5IikpCisJCWp3X2FycmF5X2JlZ2luKCZqdywgcHJldHR5KTsKKwllbHNlCisJCWRpZSgiZXhwZWN0ZWQgZmlyc3QgbGluZSB0byBiZSAnb2JqZWN0JyBvciAnYXJyYXknIik7CisKKwl3aGlsZSAoKGxpbmUgPSBnZXRfdHJpbW1lZF9saW5lKGJ1ZiwgTUFYX0xJTkVfTEVOR1RIKSkgIT0gTlVMTCkgeworCQljaGFyICp2ZXJiOworCQljaGFyICprZXk7CisJCWNoYXIgKnNfdmFsdWU7CisJCWludG1heF90IGlfdmFsdWU7CisJCWRvdWJsZSBkX3ZhbHVlOworCisJCWxpbmVfbnIrKzsKKworCQl2ZXJiID0gc3RydG9rKGxpbmUsICIgIik7CisKKwkJaWYgKCFzdHJjbXAodmVyYiwgImVuZCIpKSB7CisJCQlqd19lbmQoJmp3KTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKHZlcmIsICJvYmplY3Qtc3RyaW5nIikpIHsKKwkJCWdldF9zKGxpbmVfbnIsICZrZXkpOworCQkJZ2V0X3MobGluZV9uciwgJnNfdmFsdWUpOworCQkJandfb2JqZWN0X3N0cmluZygmancsIGtleSwgc192YWx1ZSk7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcCh2ZXJiLCAib2JqZWN0LWludCIpKSB7CisJCQlnZXRfcyhsaW5lX25yLCAma2V5KTsKKwkJCWdldF9pKGxpbmVfbnIsICZpX3ZhbHVlKTsKKwkJCWp3X29iamVjdF9pbnRtYXgoJmp3LCBrZXksIGlfdmFsdWUpOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAodmVyYiwgIm9iamVjdC1kb3VibGUiKSkgeworCQkJZ2V0X3MobGluZV9uciwgJmtleSk7CisJCQlnZXRfaShsaW5lX25yLCAmaV92YWx1ZSk7CisJCQlnZXRfZChsaW5lX25yLCAmZF92YWx1ZSk7CisJCQlqd19vYmplY3RfZG91YmxlKCZqdywga2V5LCBpX3ZhbHVlLCBkX3ZhbHVlKTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKHZlcmIsICJvYmplY3QtdHJ1ZSIpKSB7CisJCQlnZXRfcyhsaW5lX25yLCAma2V5KTsKKwkJCWp3X29iamVjdF90cnVlKCZqdywga2V5KTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKHZlcmIsICJvYmplY3QtZmFsc2UiKSkgeworCQkJZ2V0X3MobGluZV9uciwgJmtleSk7CisJCQlqd19vYmplY3RfZmFsc2UoJmp3LCBrZXkpOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAodmVyYiwgIm9iamVjdC1udWxsIikpIHsKKwkJCWdldF9zKGxpbmVfbnIsICZrZXkpOworCQkJandfb2JqZWN0X251bGwoJmp3LCBrZXkpOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAodmVyYiwgIm9iamVjdC1vYmplY3QiKSkgeworCQkJZ2V0X3MobGluZV9uciwgJmtleSk7CisJCQlqd19vYmplY3RfaW5saW5lX2JlZ2luX29iamVjdCgmancsIGtleSk7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcCh2ZXJiLCAib2JqZWN0LWFycmF5IikpIHsKKwkJCWdldF9zKGxpbmVfbnIsICZrZXkpOworCQkJandfb2JqZWN0X2lubGluZV9iZWdpbl9hcnJheSgmancsIGtleSk7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcCh2ZXJiLCAiYXJyYXktc3RyaW5nIikpIHsKKwkJCWdldF9zKGxpbmVfbnIsICZzX3ZhbHVlKTsKKwkJCWp3X2FycmF5X3N0cmluZygmancsIHNfdmFsdWUpOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAodmVyYiwgImFycmF5LWludCIpKSB7CisJCQlnZXRfaShsaW5lX25yLCAmaV92YWx1ZSk7CisJCQlqd19hcnJheV9pbnRtYXgoJmp3LCBpX3ZhbHVlKTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKHZlcmIsICJhcnJheS1kb3VibGUiKSkgeworCQkJZ2V0X2kobGluZV9uciwgJmlfdmFsdWUpOworCQkJZ2V0X2QobGluZV9uciwgJmRfdmFsdWUpOworCQkJandfYXJyYXlfZG91YmxlKCZqdywgaV92YWx1ZSwgZF92YWx1ZSk7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcCh2ZXJiLCAiYXJyYXktdHJ1ZSIpKQorCQkJandfYXJyYXlfdHJ1ZSgmancpOworCQllbHNlIGlmICghc3RyY21wKHZlcmIsICJhcnJheS1mYWxzZSIpKQorCQkJandfYXJyYXlfZmFsc2UoJmp3KTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2ZXJiLCAiYXJyYXktbnVsbCIpKQorCQkJandfYXJyYXlfbnVsbCgmancpOworCQllbHNlIGlmICghc3RyY21wKHZlcmIsICJhcnJheS1vYmplY3QiKSkKKwkJCWp3X2FycmF5X2lubGluZV9iZWdpbl9vYmplY3QoJmp3KTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2ZXJiLCAiYXJyYXktYXJyYXkiKSkKKwkJCWp3X2FycmF5X2lubGluZV9iZWdpbl9hcnJheSgmancpOworCQllbHNlCisJCQlkaWUoInVucmVjb2duaXplZCB0b2tlbjogJyVzJyIsIHZlcmIpOworCX0KKworCWlmICghandfaXNfdGVybWluYXRlZCgmancpKQorCQlkaWUoImpzb24gbm90IHRlcm1pbmF0ZWQ6ICclcyciLCBqdy5qc29uLmJ1Zik7CisKKwlwcmludGYoIiVzXG4iLCBqdy5qc29uLmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgmancuanNvbik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfX2pzb25fd3JpdGVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlhcmdjLS07IC8qIHNraXAgb3ZlciAianNvbi13cml0ZXIiIGFyZyAqLworCWFyZ3YrKzsKKworCWlmIChhcmdjID4gMCAmJiBhcmd2WzBdWzBdID09ICctJykgeworCQlpZiAoIXN0cmNtcChhcmd2WzBdLCAiLXUiKSB8fCAhc3RyY21wKGFyZ3ZbMF0sICItLXVuaXQiKSkKKwkJCXJldHVybiB1bml0X3Rlc3RzKCk7CisKKwkJaWYgKCFzdHJjbXAoYXJndlswXSwgIi1wIikgfHwgIXN0cmNtcChhcmd2WzBdLCAiLS1wcmV0dHkiKSkKKwkJCXByZXR0eSA9IDE7CisJfQorCisJcmV0dXJuIHNjcmlwdGVkKCk7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWxhenktaW5pdC1uYW1lLWhhc2guYyBiL3QvaGVscGVyL3Rlc3QtbGF6eS1pbml0LW5hbWUtaGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMWI0YzkKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWxhenktaW5pdC1uYW1lLWhhc2guYwpAQCAtMCwwICsxLDI2MSBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgaW50IHNpbmdsZTsKK3N0YXRpYyBpbnQgbXVsdGk7CitzdGF0aWMgaW50IGNvdW50ID0gMTsKK3N0YXRpYyBpbnQgZHVtcDsKK3N0YXRpYyBpbnQgcGVyZjsKK3N0YXRpYyBpbnQgYW5hbHl6ZTsKK3N0YXRpYyBpbnQgYW5hbHl6ZV9zdGVwOworCisvKgorICogRHVtcCB0aGUgY29udGVudHMgb2YgdGhlICJkaXIiIGFuZCAibmFtZSIgaGFzaCB0YWJsZXMgdG8gc3Rkb3V0LgorICogSWYgeW91IHNvcnQgdGhlIHJlc3VsdCwgeW91IGNhbiBjb21wYXJlIGl0IHdpdGggdGhlIG90aGVyIHR5cGUKKyAqIG1vZGUgYW5kIHZlcmlmeSB0aGF0IGJvdGggc2luZ2xlIGFuZCBtdWx0aSBwcm9kdWNlIHRoZSBzYW1lIHNldC4KKyAqLworc3RhdGljIHZvaWQgZHVtcF9ydW4odm9pZCkKK3sKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXJfZGlyOworCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcl9jYWNoZTsKKworCS8qIFN0b2xlbiBmcm9tIG5hbWUtaGFzaC5jICovCisJc3RydWN0IGRpcl9lbnRyeSB7CisJCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwkJc3RydWN0IGRpcl9lbnRyeSAqcGFyZW50OworCQlpbnQgbnI7CisJCXVuc2lnbmVkIGludCBuYW1lbGVuOworCQljaGFyIG5hbWVbRkxFWF9BUlJBWV07CisJfTsKKworCXN0cnVjdCBkaXJfZW50cnkgKmRpcjsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJcmVhZF9jYWNoZSgpOworCWlmIChzaW5nbGUpIHsKKwkJdGVzdF9sYXp5X2luaXRfbmFtZV9oYXNoKCZ0aGVfaW5kZXgsIDApOworCX0gZWxzZSB7CisJCWludCBucl90aHJlYWRzX3VzZWQgPSB0ZXN0X2xhenlfaW5pdF9uYW1lX2hhc2goJnRoZV9pbmRleCwgMSk7CisJCWlmICghbnJfdGhyZWFkc191c2VkKQorCQkJZGllKCJub24tdGhyZWFkZWQgY29kZSBwYXRoIHVzZWQiKTsKKwl9CisKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KCZ0aGVfaW5kZXguZGlyX2hhc2gsICZpdGVyX2RpciwgZGlyLAorCQkJCWVudCAvKiBtZW1iZXIgbmFtZSAqLykKKwkJcHJpbnRmKCJkaXIgJTA4eCAlN2QgJXNcbiIsIGRpci0+ZW50Lmhhc2gsIGRpci0+bnIsIGRpci0+bmFtZSk7CisKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KCZ0aGVfaW5kZXgubmFtZV9oYXNoLCAmaXRlcl9jYWNoZSwgY2UsCisJCQkJZW50IC8qIG1lbWJlciBuYW1lICovKQorCQlwcmludGYoIm5hbWUgJTA4eCAlc1xuIiwgY2UtPmVudC5oYXNoLCBjZS0+bmFtZSk7CisKKwlkaXNjYXJkX2NhY2hlKCk7Cit9CisKKy8qCisgKiBSdW4gdGhlIHNpbmdsZSBvciBtdWx0aSB0aHJlYWRlZCB2ZXJzaW9uICJjb3VudCIgdGltZXMgYW5kCisgKiByZXBvcnQgb24gdGhlIHRpbWUgdGFrZW4uCisgKi8KK3N0YXRpYyB1aW50NjRfdCB0aW1lX3J1bnMoaW50IHRyeV90aHJlYWRlZCkKK3sKKwl1aW50NjRfdCB0MCwgdDEsIHQyOworCXVpbnQ2NF90IHN1bSA9IDA7CisJdWludDY0X3QgYXZnOworCWludCBucl90aHJlYWRzX3VzZWQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQl0MCA9IGdldG5hbm90aW1lKCk7CisJCXJlYWRfY2FjaGUoKTsKKwkJdDEgPSBnZXRuYW5vdGltZSgpOworCQlucl90aHJlYWRzX3VzZWQgPSB0ZXN0X2xhenlfaW5pdF9uYW1lX2hhc2goJnRoZV9pbmRleCwgdHJ5X3RocmVhZGVkKTsKKwkJdDIgPSBnZXRuYW5vdGltZSgpOworCisJCXN1bSArPSAodDIgLSB0MSk7CisKKwkJaWYgKHRyeV90aHJlYWRlZCAmJiAhbnJfdGhyZWFkc191c2VkKQorCQkJZGllKCJub24tdGhyZWFkZWQgY29kZSBwYXRoIHVzZWQiKTsKKworCQlpZiAobnJfdGhyZWFkc191c2VkKQorCQkJcHJpbnRmKCIlZiAlZiAlZCBtdWx0aSAlZFxuIiwKKwkJCQkgICAoKGRvdWJsZSkodDEgLSB0MCkpLzEwMDAwMDAwMDAsCisJCQkJICAgKChkb3VibGUpKHQyIC0gdDEpKS8xMDAwMDAwMDAwLAorCQkJCSAgIHRoZV9pbmRleC5jYWNoZV9uciwKKwkJCQkgICBucl90aHJlYWRzX3VzZWQpOworCQllbHNlCisJCQlwcmludGYoIiVmICVmICVkIHNpbmdsZVxuIiwKKwkJCQkgICAoKGRvdWJsZSkodDEgLSB0MCkpLzEwMDAwMDAwMDAsCisJCQkJICAgKChkb3VibGUpKHQyIC0gdDEpKS8xMDAwMDAwMDAwLAorCQkJCSAgIHRoZV9pbmRleC5jYWNoZV9ucik7CisJCWZmbHVzaChzdGRvdXQpOworCisJCWRpc2NhcmRfY2FjaGUoKTsKKwl9CisKKwlhdmcgPSBzdW0gLyBjb3VudDsKKwlpZiAoY291bnQgPiAxKQorCQlwcmludGYoImF2ZyAlZiAlc1xuIiwKKwkJCSAgIChkb3VibGUpYXZnLzEwMDAwMDAwMDAsCisJCQkgICAodHJ5X3RocmVhZGVkKSA/ICJtdWx0aSIgOiAic2luZ2xlIik7CisKKwlyZXR1cm4gYXZnOworfQorCisvKgorICogVHJ5IGEgc2VyaWVzIG9mIHJ1bnMgdmFyeWluZyB0aGUgImlzdGF0ZS0+Y2FjaGVfbnIiIGFuZAorICogdHJ5IHRvIGZpbmQgYSBnb29kIHZhbHVlIGZvciB0aGUgbXVsdGktdGhyZWFkZWQgY3JpdGVyaWEuCisgKi8KK3N0YXRpYyB2b2lkIGFuYWx5emVfcnVuKHZvaWQpCit7CisJdWludDY0X3QgdDFzLCB0MW0sIHQycywgdDJtOworCWludCBjYWNoZV9ucl9saW1pdDsKKwlpbnQgbnJfdGhyZWFkc191c2VkID0gMDsKKwlpbnQgaTsKKwlpbnQgbnI7CisKKwlyZWFkX2NhY2hlKCk7CisJY2FjaGVfbnJfbGltaXQgPSB0aGVfaW5kZXguY2FjaGVfbnI7CisJZGlzY2FyZF9jYWNoZSgpOworCisJbnIgPSBhbmFseXplOworCXdoaWxlICgxKSB7CisJCXVpbnQ2NF90IHN1bV9zaW5nbGUgPSAwOworCQl1aW50NjRfdCBzdW1fbXVsdGkgPSAwOworCQl1aW50NjRfdCBhdmdfc2luZ2xlOworCQl1aW50NjRfdCBhdmdfbXVsdGk7CisKKwkJaWYgKG5yID4gY2FjaGVfbnJfbGltaXQpCisJCQluciA9IGNhY2hlX25yX2xpbWl0OworCisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQlyZWFkX2NhY2hlKCk7CisJCQl0aGVfaW5kZXguY2FjaGVfbnIgPSBucjsgLyogY2hlYXAgdHJ1bmNhdGUgb2YgaW5kZXggKi8KKwkJCXQxcyA9IGdldG5hbm90aW1lKCk7CisJCQl0ZXN0X2xhenlfaW5pdF9uYW1lX2hhc2goJnRoZV9pbmRleCwgMCk7CisJCQl0MnMgPSBnZXRuYW5vdGltZSgpOworCQkJc3VtX3NpbmdsZSArPSAodDJzIC0gdDFzKTsKKwkJCXRoZV9pbmRleC5jYWNoZV9uciA9IGNhY2hlX25yX2xpbWl0OworCQkJZGlzY2FyZF9jYWNoZSgpOworCisJCQlyZWFkX2NhY2hlKCk7CisJCQl0aGVfaW5kZXguY2FjaGVfbnIgPSBucjsgLyogY2hlYXAgdHJ1bmNhdGUgb2YgaW5kZXggKi8KKwkJCXQxbSA9IGdldG5hbm90aW1lKCk7CisJCQlucl90aHJlYWRzX3VzZWQgPSB0ZXN0X2xhenlfaW5pdF9uYW1lX2hhc2goJnRoZV9pbmRleCwgMSk7CisJCQl0Mm0gPSBnZXRuYW5vdGltZSgpOworCQkJc3VtX211bHRpICs9ICh0Mm0gLSB0MW0pOworCQkJdGhlX2luZGV4LmNhY2hlX25yID0gY2FjaGVfbnJfbGltaXQ7CisJCQlkaXNjYXJkX2NhY2hlKCk7CisKKwkJCWlmICghbnJfdGhyZWFkc191c2VkKQorCQkJCXByaW50ZigiICAgIFtzaXplICU4ZF0gW3NpbmdsZSAlZl0gICBub24tdGhyZWFkZWQgY29kZSBwYXRoIHVzZWRcbiIsCisJCQkJCSAgIG5yLCAoKGRvdWJsZSkodDJzIC0gdDFzKSkvMTAwMDAwMDAwMCk7CisJCQllbHNlCisJCQkJcHJpbnRmKCIgICAgW3NpemUgJThkXSBbc2luZ2xlICVmXSAlYyBbbXVsdGkgJWYgJWRdXG4iLAorCQkJCQkgICBuciwKKwkJCQkJICAgKChkb3VibGUpKHQycyAtIHQxcykpLzEwMDAwMDAwMDAsCisJCQkJCSAgICgoKHQycyAtIHQxcykgPCAodDJtIC0gdDFtKSkgPyAnPCcgOiAnPicpLAorCQkJCQkgICAoKGRvdWJsZSkodDJtIC0gdDFtKSkvMTAwMDAwMDAwMCwKKwkJCQkJICAgbnJfdGhyZWFkc191c2VkKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQl9CisJCWlmIChjb3VudCA+IDEpIHsKKwkJCWF2Z19zaW5nbGUgPSBzdW1fc2luZ2xlIC8gY291bnQ7CisJCQlhdmdfbXVsdGkgPSBzdW1fbXVsdGkgLyBjb3VudDsKKwkJCWlmICghbnJfdGhyZWFkc191c2VkKQorCQkJCXByaW50ZigiYXZnIFtzaXplICU4ZF0gW3NpbmdsZSAlZl1cbiIsCisJCQkJCSAgIG5yLAorCQkJCQkgICAoZG91YmxlKWF2Z19zaW5nbGUvMTAwMDAwMDAwMCk7CisJCQllbHNlCisJCQkJcHJpbnRmKCJhdmcgW3NpemUgJThkXSBbc2luZ2xlICVmXSAlYyBbbXVsdGkgJWYgJWRdXG4iLAorCQkJCQkgICBuciwKKwkJCQkJICAgKGRvdWJsZSlhdmdfc2luZ2xlLzEwMDAwMDAwMDAsCisJCQkJCSAgIChhdmdfc2luZ2xlIDwgYXZnX211bHRpID8gJzwnIDogJz4nKSwKKwkJCQkJICAgKGRvdWJsZSlhdmdfbXVsdGkvMTAwMDAwMDAwMCwKKwkJCQkJICAgbnJfdGhyZWFkc191c2VkKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQl9CisKKwkJaWYgKG5yID49IGNhY2hlX25yX2xpbWl0KQorCQkJcmV0dXJuOworCQluciArPSBhbmFseXplX3N0ZXA7CisJfQorfQorCitpbnQgY21kX19sYXp5X2luaXRfbmFtZV9oYXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICp1c2FnZVtdID0geworCQkidGVzdC10b29sIGxhenktaW5pdC1uYW1lLWhhc2ggLWQgKC1zIHwgLW0pIiwKKwkJInRlc3QtdG9vbCBsYXp5LWluaXQtbmFtZS1oYXNoIC1wIFstYyBjXSIsCisJCSJ0ZXN0LXRvb2wgbGF6eS1pbml0LW5hbWUtaGFzaCAtYSBhIFstLXN0ZXAgc10gWy1jIGNdIiwKKwkJInRlc3QtdG9vbCBsYXp5LWluaXQtbmFtZS1oYXNoICgtcyB8IC1tKSBbLWMgY10iLAorCQkidGVzdC10b29sIGxhenktaW5pdC1uYW1lLWhhc2ggLXMgLW0gWy1jIGNdIiwKKwkJTlVMTAorCX07CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdzJywgInNpbmdsZSIsICZzaW5nbGUsICJydW4gc2luZ2xlLXRocmVhZGVkIGNvZGUiKSwKKwkJT1BUX0JPT0woJ20nLCAibXVsdGkiLCAmbXVsdGksICJydW4gbXVsdGktdGhyZWFkZWQgY29kZSIpLAorCQlPUFRfSU5URUdFUignYycsICJjb3VudCIsICZjb3VudCwgIm51bWJlciBvZiBwYXNzZXMiKSwKKwkJT1BUX0JPT0woJ2QnLCAiZHVtcCIsICZkdW1wLCAiZHVtcCBoYXNoIHRhYmxlcyIpLAorCQlPUFRfQk9PTCgncCcsICJwZXJmIiwgJnBlcmYsICJjb21wYXJlIHNpbmdsZSB2cyBtdWx0aSIpLAorCQlPUFRfSU5URUdFUignYScsICJhbmFseXplIiwgJmFuYWx5emUsICJhbmFseXplIGRpZmZlcmVudCBtdWx0aSBzaXplcyIpLAorCQlPUFRfSU5URUdFUigwLCAic3RlcCIsICZhbmFseXplX3N0ZXAsICJhbmFseXplIHN0ZXAgZmFjdG9yIiksCisJCU9QVF9FTkQoKSwKKwl9OworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwl1aW50NjRfdCBhdmdfc2luZ2xlLCBhdmdfbXVsdGk7CisKKwlwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHVzYWdlLCAwKTsKKworCS8qCisJICogaXN0YXRlLT5kaXJfaGFzaCBpcyBvbmx5IGNyZWF0ZWQgd2hlbiBpZ25vcmVfY2FzZSBpcyBzZXQuCisJICovCisJaWdub3JlX2Nhc2UgPSAxOworCisJaWYgKGR1bXApIHsKKwkJaWYgKHBlcmYgfHwgYW5hbHl6ZSA+IDApCisJCQlkaWUoImNhbm5vdCBjb21iaW5lIGR1bXAsIHBlcmYsIG9yIGFuYWx5emUiKTsKKwkJaWYgKGNvdW50ID4gMSkKKwkJCWRpZSgiY291bnQgbm90IHZhbGlkIHdpdGggZHVtcCIpOworCQlpZiAoc2luZ2xlICYmIG11bHRpKQorCQkJZGllKCJjYW5ub3QgdXNlIGJvdGggc2luZ2xlIGFuZCBtdWx0aSB3aXRoIGR1bXAiKTsKKwkJaWYgKCFzaW5nbGUgJiYgIW11bHRpKQorCQkJZGllKCJkdW1wIHJlcXVpcmVzIGVpdGhlciBzaW5nbGUgb3IgbXVsdGkiKTsKKwkJZHVtcF9ydW4oKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHBlcmYpIHsKKwkJaWYgKGFuYWx5emUgPiAwKQorCQkJZGllKCJjYW5ub3QgY29tYmluZSBkdW1wLCBwZXJmLCBvciBhbmFseXplIik7CisJCWlmIChzaW5nbGUgfHwgbXVsdGkpCisJCQlkaWUoImNhbm5vdCB1c2Ugc2luZ2xlIG9yIG11bHRpIHdpdGggcGVyZiIpOworCQlhdmdfc2luZ2xlID0gdGltZV9ydW5zKDApOworCQlhdmdfbXVsdGkgPSB0aW1lX3J1bnMoMSk7CisJCWlmIChhdmdfbXVsdGkgPiBhdmdfc2luZ2xlKQorCQkJZGllKCJtdWx0aSBpcyBzbG93ZXIiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFuYWx5emUpIHsKKwkJaWYgKGFuYWx5emUgPCA1MDApCisJCQlkaWUoImFuYWx5emUgbXVzdCBiZSBhdCBsZWFzdCA1MDAiKTsKKwkJaWYgKCFhbmFseXplX3N0ZXApCisJCQlhbmFseXplX3N0ZXAgPSBhbmFseXplOworCQlpZiAoc2luZ2xlIHx8IG11bHRpKQorCQkJZGllKCJjYW5ub3QgdXNlIHNpbmdsZSBvciBtdWx0aSB3aXRoIGFuYWx5emUiKTsKKwkJYW5hbHl6ZV9ydW4oKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzaW5nbGUgJiYgIW11bHRpKQorCQlkaWUoInJlcXVpcmUgZWl0aGVyIC1zIG9yIC1tIG9yIGJvdGgiKTsKKworCWlmIChzaW5nbGUpCisJCXRpbWVfcnVucygwKTsKKwlpZiAobXVsdGkpCisJCXRpbWVfcnVucygxKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1saW5lLWJ1ZmZlci5jIGIvdC9oZWxwZXIvdGVzdC1saW5lLWJ1ZmZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OGRkN2UKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWxpbmUtYnVmZmVyLmMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIHRlc3QtbGluZS1idWZmZXIuYzogY29kZSB0byBleGVyY2lzZSB0aGUgc3ZuIGltcG9ydGVyJ3MgaW5wdXQgaGVscGVyCisgKi8KKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInZjcy1zdm4vbGluZV9idWZmZXIuaCIKKworc3RhdGljIHVpbnQzMl90IHN0cnRvdWludDMyKGNvbnN0IGNoYXIgKnMpCit7CisJY2hhciAqZW5kOworCXVpbnRtYXhfdCBuID0gc3RydG91bWF4KHMsICZlbmQsIDEwKTsKKwlpZiAoKnMgPT0gJ1wwJyB8fCAqZW5kICE9ICdcMCcpCisJCWRpZSgiaW52YWxpZCBjb3VudDogJXMiLCBzKTsKKwlyZXR1cm4gKHVpbnQzMl90KSBuOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfY29tbWFuZChjb25zdCBjaGFyICpjb21tYW5kLCBjb25zdCBjaGFyICphcmcsIHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKQoreworCWlmIChzdGFydHNfd2l0aChjb21tYW5kLCAiYmluYXJ5ICIpKSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZGNoKCZzYiwgJz4nKTsKKwkJYnVmZmVyX3JlYWRfYmluYXJ5KGJ1ZiwgJnNiLCBzdHJ0b3VpbnQzMihhcmcpKTsKKwkJZndyaXRlKHNiLmJ1ZiwgMSwgc2IubGVuLCBzdGRvdXQpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoY29tbWFuZCwgImNvcHkgIikpIHsKKwkJYnVmZmVyX2NvcHlfYnl0ZXMoYnVmLCBzdHJ0b3VpbnQzMihhcmcpKTsKKwl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGNvbW1hbmQsICJza2lwICIpKSB7CisJCWJ1ZmZlcl9za2lwX2J5dGVzKGJ1Ziwgc3RydG91aW50MzIoYXJnKSk7CisJfSBlbHNlIHsKKwkJZGllKCJ1bnJlY29nbml6ZWQgY29tbWFuZDogJXMiLCBjb21tYW5kKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9saW5lKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBsaW5lX2J1ZmZlciAqc3RkaW5fYnVmKQoreworCWNvbnN0IGNoYXIgKmFyZyA9IHN0cmNocihsaW5lLCAnICcpOworCWlmICghYXJnKQorCQlkaWUoIm5vIGFyZ3VtZW50IGluIGxpbmU6ICVzIiwgbGluZSk7CisJaGFuZGxlX2NvbW1hbmQobGluZSwgYXJnICsgMSwgc3RkaW5fYnVmKTsKK30KKworaW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgbGluZV9idWZmZXIgc3RkaW5fYnVmID0gTElORV9CVUZGRVJfSU5JVDsKKwlzdHJ1Y3QgbGluZV9idWZmZXIgZmlsZV9idWYgPSBMSU5FX0JVRkZFUl9JTklUOworCXN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQgPSAmc3RkaW5fYnVmOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWNoYXIgKnM7CisKKwlpZiAoYXJnYyA9PSAxKQorCQlmaWxlbmFtZSA9IE5VTEw7CisJZWxzZSBpZiAoYXJnYyA9PSAyKQorCQlmaWxlbmFtZSA9IGFyZ3ZbMV07CisJZWxzZQorCQl1c2FnZSgidGVzdC1saW5lLWJ1ZmZlciBbZmlsZSB8ICZmZF0gPCBzY3JpcHQiKTsKKworCWlmIChidWZmZXJfaW5pdCgmc3RkaW5fYnVmLCBOVUxMKSkKKwkJZGllX2Vycm5vKCJvcGVuIGVycm9yIik7CisJaWYgKGZpbGVuYW1lKSB7CisJCWlmICgqZmlsZW5hbWUgPT0gJyYnKSB7CisJCQlpZiAoYnVmZmVyX2ZkaW5pdCgmZmlsZV9idWYsIHN0cnRvdWludDMyKGZpbGVuYW1lICsgMSkpKQorCQkJCWRpZV9lcnJubygiZXJyb3Igb3BlbmluZyBmZCAlcyIsIGZpbGVuYW1lICsgMSk7CisJCX0gZWxzZSB7CisJCQlpZiAoYnVmZmVyX2luaXQoJmZpbGVfYnVmLCBmaWxlbmFtZSkpCisJCQkJZGllX2Vycm5vKCJlcnJvciBvcGVuaW5nICVzIiwgZmlsZW5hbWUpOworCQl9CisJCWlucHV0ID0gJmZpbGVfYnVmOworCX0KKworCXdoaWxlICgocyA9IGJ1ZmZlcl9yZWFkX2xpbmUoJnN0ZGluX2J1ZikpKQorCQloYW5kbGVfbGluZShzLCBpbnB1dCk7CisKKwlpZiAoZmlsZW5hbWUgJiYgYnVmZmVyX2RlaW5pdCgmZmlsZV9idWYpKQorCQlkaWUoImVycm9yIHJlYWRpbmcgZnJvbSAlcyIsIGZpbGVuYW1lKTsKKwlpZiAoYnVmZmVyX2RlaW5pdCgmc3RkaW5fYnVmKSkKKwkJZGllKCJpbnB1dCBlcnJvciIpOworCWlmIChmZXJyb3Ioc3Rkb3V0KSkKKwkJZGllKCJvdXRwdXQgZXJyb3IiKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtbWF0Y2gtdHJlZXMuYyBiL3QvaGVscGVyL3Rlc3QtbWF0Y2gtdHJlZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWZkNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1tYXRjaC10cmVlcy5jCkBAIC0wLDAgKzEsMjcgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKworaW50IGNtZF9fbWF0Y2hfdHJlZXMoaW50IGFjLCBjb25zdCBjaGFyICoqYXYpCit7CisJc3RydWN0IG9iamVjdF9pZCBoYXNoMSwgaGFzaDIsIHNoaWZ0ZWQ7CisJc3RydWN0IHRyZWUgKm9uZSwgKnR3bzsKKworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKworCWlmIChnZXRfb2lkKGF2WzFdLCAmaGFzaDEpKQorCQlkaWUoImNhbm5vdCBwYXJzZSAlcyBhcyBhbiBvYmplY3QgbmFtZSIsIGF2WzFdKTsKKwlpZiAoZ2V0X29pZChhdlsyXSwgJmhhc2gyKSkKKwkJZGllKCJjYW5ub3QgcGFyc2UgJXMgYXMgYW4gb2JqZWN0IG5hbWUiLCBhdlsyXSk7CisJb25lID0gcGFyc2VfdHJlZV9pbmRpcmVjdCgmaGFzaDEpOworCWlmICghb25lKQorCQlkaWUoIm5vdCBhIHRyZWUtaXNoICVzIiwgYXZbMV0pOworCXR3byA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoJmhhc2gyKTsKKwlpZiAoIXR3bykKKwkJZGllKCJub3QgYSB0cmVlLWlzaCAlcyIsIGF2WzJdKTsKKworCXNoaWZ0X3RyZWUodGhlX3JlcG9zaXRvcnksICZvbmUtPm9iamVjdC5vaWQsICZ0d28tPm9iamVjdC5vaWQsICZzaGlmdGVkLCAtMSk7CisJcHJpbnRmKCJzaGlmdGVkOiAlc1xuIiwgb2lkX3RvX2hleCgmc2hpZnRlZCkpOworCisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtbWVyZ2Vzb3J0LmMgYi90L2hlbHBlci90ZXN0LW1lcmdlc29ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1Y2ZmYWEKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LW1lcmdlc29ydC5jCkBAIC0wLDAgKzEsNTMgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm1lcmdlc29ydC5oIgorCitzdHJ1Y3QgbGluZSB7CisJY2hhciAqdGV4dDsKKwlzdHJ1Y3QgbGluZSAqbmV4dDsKK307CisKK3N0YXRpYyB2b2lkICpnZXRfbmV4dChjb25zdCB2b2lkICphKQoreworCXJldHVybiAoKGNvbnN0IHN0cnVjdCBsaW5lICopYSktPm5leHQ7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9uZXh0KHZvaWQgKmEsIHZvaWQgKmIpCit7CisJKChzdHJ1Y3QgbGluZSAqKWEpLT5uZXh0ID0gYjsKK30KKworc3RhdGljIGludCBjb21wYXJlX3N0cmluZ3MoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgbGluZSAqeCA9IGEsICp5ID0gYjsKKwlyZXR1cm4gc3RyY21wKHgtPnRleHQsIHktPnRleHQpOworfQorCitpbnQgY21kX19tZXJnZXNvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBsaW5lICpsaW5lLCAqcCA9IE5VTEwsICpsaW5lcyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJZm9yICg7OykgeworCQlpZiAoc3RyYnVmX2dldHdob2xlbGluZSgmc2IsIHN0ZGluLCAnXG4nKSkKKwkJCWJyZWFrOworCQlsaW5lID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGxpbmUpKTsKKwkJbGluZS0+dGV4dCA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwkJaWYgKHApIHsKKwkJCWxpbmUtPm5leHQgPSBwLT5uZXh0OworCQkJcC0+bmV4dCA9IGxpbmU7CisJCX0gZWxzZSB7CisJCQlsaW5lLT5uZXh0ID0gTlVMTDsKKwkJCWxpbmVzID0gbGluZTsKKwkJfQorCQlwID0gbGluZTsKKwl9CisKKwlsaW5lcyA9IGxsaXN0X21lcmdlc29ydChsaW5lcywgZ2V0X25leHQsIHNldF9uZXh0LCBjb21wYXJlX3N0cmluZ3MpOworCisJd2hpbGUgKGxpbmVzKSB7CisJCXByaW50ZigiJXMiLCBsaW5lcy0+dGV4dCk7CisJCWxpbmVzID0gbGluZXMtPm5leHQ7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1ta3RlbXAuYyBiL3QvaGVscGVyL3Rlc3QtbWt0ZW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5MDY4OAotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtbWt0ZW1wLmMKQEAgLTAsMCArMSwxNSBAQAorLyoKKyAqIHRlc3QtbWt0ZW1wLmM6IGNvZGUgdG8gZXhlcmNpc2UgdGhlIGNyZWF0aW9uIG9mIHRlbXBvcmFyeSBmaWxlcworICovCisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKK2ludCBjbWRfX21rdGVtcChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaWYgKGFyZ2MgIT0gMikKKwkJdXNhZ2UoIkV4cGVjdGVkIDEgcGFyYW1ldGVyIGRlZmluaW5nIHRoZSB0ZW1wb3JhcnkgZmlsZSB0ZW1wbGF0ZSIpOworCisJeG1rc3RlbXAoeHN0cmR1cChhcmd2WzFdKSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3Qtb2lkLWFycmF5LmMgYi90L2hlbHBlci90ZXN0LW9pZC1hcnJheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOWZkNWYKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LW9pZC1hcnJheS5jCkBAIC0wLDAgKzEsMzYgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9pZC1hcnJheS5oIgorCitzdGF0aWMgaW50IHByaW50X29pZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHZvaWQgKmRhdGEpCit7CisJcHV0cyhvaWRfdG9faGV4KG9pZCkpOworCXJldHVybiAwOworfQorCitpbnQgY21kX19vaWRfYXJyYXkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBvaWRfYXJyYXkgYXJyYXkgPSBPSURfQVJSQVlfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmbGluZSwgc3RkaW4pICE9IEVPRikgeworCQljb25zdCBjaGFyICphcmc7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCWlmIChza2lwX3ByZWZpeChsaW5lLmJ1ZiwgImFwcGVuZCAiLCAmYXJnKSkgeworCQkJaWYgKGdldF9vaWRfaGV4KGFyZywgJm9pZCkpCisJCQkJZGllKCJub3QgYSBoZXhhZGVjaW1hbCBvaWQ6ICVzIiwgYXJnKTsKKwkJCW9pZF9hcnJheV9hcHBlbmQoJmFycmF5LCAmb2lkKTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChsaW5lLmJ1ZiwgImxvb2t1cCAiLCAmYXJnKSkgeworCQkJaWYgKGdldF9vaWRfaGV4KGFyZywgJm9pZCkpCisJCQkJZGllKCJub3QgYSBoZXhhZGVjaW1hbCBvaWQ6ICVzIiwgYXJnKTsKKwkJCXByaW50ZigiJWRcbiIsIG9pZF9hcnJheV9sb29rdXAoJmFycmF5LCAmb2lkKSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChsaW5lLmJ1ZiwgImNsZWFyIikpCisJCQlvaWRfYXJyYXlfY2xlYXIoJmFycmF5KTsKKwkJZWxzZSBpZiAoIXN0cmNtcChsaW5lLmJ1ZiwgImZvcl9lYWNoX3VuaXF1ZSIpKQorCQkJb2lkX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZSgmYXJyYXksIHByaW50X29pZCwgTlVMTCk7CisJCWVsc2UKKwkJCWRpZSgidW5rbm93biBjb21tYW5kOiAlcyIsIGxpbmUuYnVmKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LW9pZG1hcC5jIGIvdC9oZWxwZXIvdGVzdC1vaWRtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWNmOTk5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1vaWRtYXAuYwpAQCAtMCwwICsxLDExMiBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2lkbWFwLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKKy8qIGtleSBpcyBhbiBvaWQgYW5kIHZhbHVlIGlzIGEgbmFtZSAoY291bGQgYmUgYSByZWZuYW1lIGZvciBleGFtcGxlKSAqLworc3RydWN0IHRlc3RfZW50cnkgeworCXN0cnVjdCBvaWRtYXBfZW50cnkgZW50cnk7CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfTsKKworI2RlZmluZSBERUxJTSAiIFx0XHJcbiIKKworLyoKKyAqIFJlYWQgc3RkaW4gbGluZSBieSBsaW5lIGFuZCBwcmludCByZXN1bHQgb2YgY29tbWFuZHMgdG8gc3Rkb3V0OgorICoKKyAqIGhhc2ggb2lka2V5IC0+IHNoYTFoYXNoKG9pZGtleSkKKyAqIHB1dCBvaWRrZXkgbmFtZXZhbHVlIC0+IE5VTEwgLyBvbGQgbmFtZXZhbHVlCisgKiBnZXQgb2lka2V5IC0+IE5VTEwgLyBuYW1ldmFsdWUKKyAqIHJlbW92ZSBvaWRrZXkgLT4gTlVMTCAvIG9sZCBuYW1ldmFsdWUKKyAqIGl0ZXJhdGUgLT4gb2lka2V5MSBuYW1ldmFsdWUxXG5vaWRrZXkyIG5hbWV2YWx1ZTJcbi4uLgorICoKKyAqLworaW50IGNtZF9fb2lkbWFwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2lkbWFwIG1hcCA9IE9JRE1BUF9JTklUOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJLyogaW5pdCBvaWRtYXAgKi8KKwlvaWRtYXBfaW5pdCgmbWFwLCAwKTsKKworCS8qIHByb2Nlc3MgY29tbWFuZHMgZnJvbSBzdGRpbiAqLworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmbGluZSwgc3RkaW4pICE9IEVPRikgeworCQljaGFyICpjbWQsICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7CisJCXN0cnVjdCB0ZXN0X2VudHJ5ICplbnRyeTsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJLyogYnJlYWsgbGluZSBpbnRvIGNvbW1hbmQgYW5kIHVwIHRvIHR3byBwYXJhbWV0ZXJzICovCisJCWNtZCA9IHN0cnRvayhsaW5lLmJ1ZiwgREVMSU0pOworCQkvKiBpZ25vcmUgZW1wdHkgbGluZXMgKi8KKwkJaWYgKCFjbWQgfHwgKmNtZCA9PSAnIycpCisJCQljb250aW51ZTsKKworCQlwMSA9IHN0cnRvayhOVUxMLCBERUxJTSk7CisJCWlmIChwMSkKKwkJCXAyID0gc3RydG9rKE5VTEwsIERFTElNKTsKKworCQlpZiAoIXN0cmNtcCgicHV0IiwgY21kKSAmJiBwMSAmJiBwMikgeworCisJCQlpZiAoZ2V0X29pZChwMSwgJm9pZCkpIHsKKwkJCQlwcmludGYoIlVua25vd24gb2lkOiAlc1xuIiwgcDEpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBjcmVhdGUgZW50cnkgd2l0aCBvaWRfa2V5ID0gcDEsIG5hbWVfdmFsdWUgPSBwMiAqLworCQkJRkxFWF9BTExPQ19TVFIoZW50cnksIG5hbWUsIHAyKTsKKwkJCW9pZGNweSgmZW50cnktPmVudHJ5Lm9pZCwgJm9pZCk7CisKKwkJCS8qIGFkZCAvIHJlcGxhY2UgZW50cnkgKi8KKwkJCWVudHJ5ID0gb2lkbWFwX3B1dCgmbWFwLCBlbnRyeSk7CisKKwkJCS8qIHByaW50IGFuZCBmcmVlIHJlcGxhY2VkIGVudHJ5LCBpZiBhbnkgKi8KKwkJCXB1dHMoZW50cnkgPyBlbnRyeS0+bmFtZSA6ICJOVUxMIik7CisJCQlmcmVlKGVudHJ5KTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoImdldCIsIGNtZCkgJiYgcDEpIHsKKworCQkJaWYgKGdldF9vaWQocDEsICZvaWQpKSB7CisJCQkJcHJpbnRmKCJVbmtub3duIG9pZDogJXNcbiIsIHAxKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogbG9va3VwIGVudHJ5IGluIG9pZG1hcCAqLworCQkJZW50cnkgPSBvaWRtYXBfZ2V0KCZtYXAsICZvaWQpOworCisJCQkvKiBwcmludCByZXN1bHQgKi8KKwkJCXB1dHMoZW50cnkgPyBlbnRyeS0+bmFtZSA6ICJOVUxMIik7CisKKwkJfSBlbHNlIGlmICghc3RyY21wKCJyZW1vdmUiLCBjbWQpICYmIHAxKSB7CisKKwkJCWlmIChnZXRfb2lkKHAxLCAmb2lkKSkgeworCQkJCXByaW50ZigiVW5rbm93biBvaWQ6ICVzXG4iLCBwMSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIHJlbW92ZSBlbnRyeSBmcm9tIG9pZG1hcCAqLworCQkJZW50cnkgPSBvaWRtYXBfcmVtb3ZlKCZtYXAsICZvaWQpOworCisJCQkvKiBwcmludCByZXN1bHQgYW5kIGZyZWUgZW50cnkqLworCQkJcHV0cyhlbnRyeSA/IGVudHJ5LT5uYW1lIDogIk5VTEwiKTsKKwkJCWZyZWUoZW50cnkpOworCisJCX0gZWxzZSBpZiAoIXN0cmNtcCgiaXRlcmF0ZSIsIGNtZCkpIHsKKworCQkJc3RydWN0IG9pZG1hcF9pdGVyIGl0ZXI7CisJCQlvaWRtYXBfaXRlcl9pbml0KCZtYXAsICZpdGVyKTsKKwkJCXdoaWxlICgoZW50cnkgPSBvaWRtYXBfaXRlcl9uZXh0KCZpdGVyKSkpCisJCQkJcHJpbnRmKCIlcyAlc1xuIiwgb2lkX3RvX2hleCgmZW50cnktPmVudHJ5Lm9pZCksIGVudHJ5LT5uYW1lKTsKKworCQl9IGVsc2UgeworCisJCQlwcmludGYoIlVua25vd24gY29tbWFuZCAlc1xuIiwgY21kKTsKKworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCW9pZG1hcF9mcmVlKCZtYXAsIDEpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1vbmxpbmUtY3B1cy5jIGIvdC9oZWxwZXIvdGVzdC1vbmxpbmUtY3B1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYjBkNTMKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LW9ubGluZS1jcHVzLmMKQEAgLTAsMCArMSw5IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisKK2ludCBjbWRfX29ubGluZV9jcHVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlwcmludGYoIiVkXG4iLCBvbmxpbmVfY3B1cygpKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcGFyc2Utb3B0aW9ucy5jIGIvdC9oZWxwZXIvdGVzdC1wYXJzZS1vcHRpb25zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1MWNlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCkBAIC0wLDAgKzEsMTkwIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJ0cmFjZTIuaCIKKworc3RhdGljIGludCBib29sZWFuID0gMDsKK3N0YXRpYyBpbnQgaW50ZWdlciA9IDA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWduaXR1ZGUgPSAwOworc3RhdGljIHRpbWVzdGFtcF90IHRpbWVzdGFtcDsKK3N0YXRpYyBpbnQgYWJicmV2ID0gNzsKK3N0YXRpYyBpbnQgdmVyYm9zZSA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLworc3RhdGljIGludCBkcnlfcnVuID0gMCwgcXVpZXQgPSAwOworc3RhdGljIGNoYXIgKnN0cmluZyA9IE5VTEw7CitzdGF0aWMgY2hhciAqZmlsZSA9IE5VTEw7CitzdGF0aWMgaW50IGFtYmlndW91czsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisKK3N0YXRpYyBzdHJ1Y3QgeworCWludCBjYWxsZWQ7CisJY29uc3QgY2hhciAqYXJnOworCWludCB1bnNldDsKK30gbGVuZ3RoX2NiOworCitzdGF0aWMgaW50IGxlbmd0aF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWxlbmd0aF9jYi5jYWxsZWQgPSAxOworCWxlbmd0aF9jYi5hcmcgPSBhcmc7CisJbGVuZ3RoX2NiLnVuc2V0ID0gdW5zZXQ7CisKKwlpZiAodW5zZXQpCisJCXJldHVybiAxOyAvKiBkbyBub3Qgc3VwcG9ydCB1bnNldCAqLworCisJKihpbnQgKilvcHQtPnZhbHVlID0gc3RybGVuKGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnVtYmVyX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCSooaW50ICopb3B0LT52YWx1ZSA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb2xsZWN0X2V4cGVjdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqZXhwZWN0OworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCBzdHJidWYgbGFiZWwgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpjb2xvbjsKKworCWlmICghYXJnIHx8IHVuc2V0KQorCQlkaWUoIm1hbGZvcm1lZCAtLWV4cGVjdCBvcHRpb24iKTsKKworCWV4cGVjdCA9IChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKilvcHQtPnZhbHVlOworCWNvbG9uID0gc3RyY2hyKGFyZywgJzonKTsKKwlpZiAoIWNvbG9uKQorCQlkaWUoIm1hbGZvcm1lZCAtLWV4cGVjdCBvcHRpb24sIGxhY2tpbmcgYSBjb2xvbiIpOworCXN0cmJ1Zl9hZGQoJmxhYmVsLCBhcmcsIGNvbG9uIC0gYXJnKTsKKwlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KGV4cGVjdCwgc3RyYnVmX2RldGFjaCgmbGFiZWwsIE5VTEwpKTsKKwlpZiAoaXRlbS0+dXRpbCkKKwkJZGllKCJtYWxmb3JtZWQgLS1leHBlY3Qgb3B0aW9uLCBkdXBsaWNhdGUgJXMiLCBsYWJlbC5idWYpOworCWl0ZW0tPnV0aWwgPSAodm9pZCAqKWFyZzsKKwlyZXR1cm4gMDsKK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsMyw0KSkpCitzdGF0aWMgdm9pZCBzaG93KHN0cnVjdCBzdHJpbmdfbGlzdCAqZXhwZWN0LCBpbnQgKnN0YXR1cywgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl2YV9saXN0IGFyZ3M7CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXN0cmJ1Zl92YWRkZigmYnVmLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKworCWlmICghZXhwZWN0LT5ucikKKwkJcHJpbnRmKCIlc1xuIiwgYnVmLmJ1Zik7CisJZWxzZSB7CisJCWNoYXIgKmNvbG9uID0gc3RyY2hyKGJ1Zi5idWYsICc6Jyk7CisJCWlmICghY29sb24pCisJCQlkaWUoIm1hbGZvcm1lZCBvdXRwdXQgZm9ybWF0LCBvdXRwdXQgbGFja2luZyBjb2xvbjogJXMiLCBmbXQpOworCQkqY29sb24gPSAnXDAnOworCQlpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKGV4cGVjdCwgYnVmLmJ1Zik7CisJCSpjb2xvbiA9ICc6JzsKKwkJaWYgKCFpdGVtKQorCQkJOyAvKiBub3QgYW1vbmcgZW50cmllcyBiZWluZyBjaGVja2VkICovCisJCWVsc2UgeworCQkJaWYgKHN0cmNtcCgoY29uc3QgY2hhciAqKWl0ZW0tPnV0aWwsIGJ1Zi5idWYpKSB7CisJCQkJcHJpbnRmKCItJXNcbiIsIChjaGFyICopaXRlbS0+dXRpbCk7CisJCQkJcHJpbnRmKCIrJXNcbiIsIGJ1Zi5idWYpOworCQkJCSpzdGF0dXMgPSAxOworCQkJfQorCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitpbnQgY21kX19wYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpwcmVmaXggPSAicHJlZml4LyI7CisJY29uc3QgY2hhciAqdXNhZ2VbXSA9IHsKKwkJInRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIDxvcHRpb25zPiIsCisJCSIiLAorCQkiQSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBwYXJzZS1vcHRpb25zIEFQSS4iLAorCQlOVUxMCisJfTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhwZWN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woMCwgInllcyIsICZib29sZWFuLCAiZ2V0IGEgYm9vbGVhbiIpLAorCQlPUFRfQk9PTCgnRCcsICJuby1kb3VidCIsICZib29sZWFuLCAiYmVnaW5zIHdpdGggJ25vLSciKSwKKwkJeyBPUFRJT05fU0VUX0lOVCwgJ0InLCAibm8tZmVhciIsICZib29sZWFuLCBOVUxMLAorCQkgICJiZSBicmF2ZSIsIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgMSB9LAorCQlPUFRfQ09VTlRVUCgnYicsICJib29sZWFuIiwgJmJvb2xlYW4sICJpbmNyZW1lbnQgYnkgb25lIiksCisJCU9QVF9CSVQoJzQnLCAib3I0IiwgJmJvb2xlYW4sCisJCQkiYml0d2lzZS1vciBib29sZWFuIHdpdGggLi4uMDEwMCIsIDQpLAorCQlPUFRfTkVHQklUKDAsICJuZWctb3I0IiwgJmJvb2xlYW4sICJzYW1lIGFzIC0tbm8tb3I0IiwgNCksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9JTlRFR0VSKCdpJywgImludGVnZXIiLCAmaW50ZWdlciwgImdldCBhIGludGVnZXIiKSwKKwkJT1BUX0lOVEVHRVIoJ2onLCBOVUxMLCAmaW50ZWdlciwgImdldCBhIGludGVnZXIsIHRvbyIpLAorCQlPUFRfTUFHTklUVURFKCdtJywgIm1hZ25pdHVkZSIsICZtYWduaXR1ZGUsICJnZXQgYSBtYWduaXR1ZGUiKSwKKwkJT1BUX1NFVF9JTlQoMCwgInNldDIzIiwgJmludGVnZXIsICJzZXQgaW50ZWdlciB0byAyMyIsIDIzKSwKKwkJT1BUX0NNRE1PREUoMCwgIm1vZGUxIiwgJmludGVnZXIsICJzZXQgaW50ZWdlciB0byAxIChjbWRtb2RlIG9wdGlvbikiLCAxKSwKKwkJT1BUX0NNRE1PREUoMCwgIm1vZGUyIiwgJmludGVnZXIsICJzZXQgaW50ZWdlciB0byAyIChjbWRtb2RlIG9wdGlvbikiLCAyKSwKKwkJT1BUX0NBTExCQUNLKCdMJywgImxlbmd0aCIsICZpbnRlZ2VyLCAic3RyIiwKKwkJCSJnZXQgbGVuZ3RoIG9mIDxzdHI+IiwgbGVuZ3RoX2NhbGxiYWNrKSwKKwkJT1BUX0ZJTEVOQU1FKCdGJywgImZpbGUiLCAmZmlsZSwgInNldCBmaWxlIHRvIDxmaWxlPiIpLAorCQlPUFRfR1JPVVAoIlN0cmluZyBvcHRpb25zIiksCisJCU9QVF9TVFJJTkcoJ3MnLCAic3RyaW5nIiwgJnN0cmluZywgInN0cmluZyIsICJnZXQgYSBzdHJpbmciKSwKKwkJT1BUX1NUUklORygwLCAic3RyaW5nMiIsICZzdHJpbmcsICJzdHIiLCAiZ2V0IGFub3RoZXIgc3RyaW5nIiksCisJCU9QVF9TVFJJTkcoMCwgInN0IiwgJnN0cmluZywgInN0IiwgImdldCBhbm90aGVyIHN0cmluZyAocGVydmVydCBvcmRlcmluZykiKSwKKwkJT1BUX1NUUklORygnbycsIE5VTEwsICZzdHJpbmcsICJzdHIiLCAiZ2V0IGFub3RoZXIgc3RyaW5nIiksCisJCU9QVF9OT09QX05PQVJHKDAsICJvYnNvbGV0ZSIpLAorCQlPUFRfU1RSSU5HX0xJU1QoMCwgImxpc3QiLCAmbGlzdCwgInN0ciIsICJhZGQgc3RyIHRvIGxpc3QiKSwKKwkJT1BUX0dST1VQKCJNYWdpYyBhcmd1bWVudHMiKSwKKwkJT1BUX0FSR1VNRU5UKCJxdXV4IiwgTlVMTCwgIm1lYW5zIC0tcXV1eCIpLAorCQlPUFRfTlVNQkVSX0NBTExCQUNLKCZpbnRlZ2VyLCAic2V0IGludGVnZXIgdG8gTlVNIiwKKwkJCW51bWJlcl9jYWxsYmFjayksCisJCXsgT1BUSU9OX0NPVU5UVVAsICcrJywgTlVMTCwgJmJvb2xlYW4sIE5VTEwsICJzYW1lIGFzIC1iIiwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9EQVNIIH0sCisJCXsgT1BUSU9OX0NPVU5UVVAsIDAsICJhbWJpZ3VvdXMiLCAmYW1iaWd1b3VzLCBOVUxMLAorCQkgICJwb3NpdGl2ZSBhbWJpZ3VpdHkiLCBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcgfSwKKwkJeyBPUFRJT05fQ09VTlRVUCwgMCwgIm5vLWFtYmlndW91cyIsICZhbWJpZ3VvdXMsIE5VTEwsCisJCSAgIm5lZ2F0aXZlIGFtYmlndWl0eSIsIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRyB9LAorCQlPUFRfR1JPVVAoIlN0YW5kYXJkIG9wdGlvbnMiKSwKKwkJT1BUX19BQkJSRVYoJmFiYnJldiksCisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgImJlIHZlcmJvc2UiKSwKKwkJT1BUX19EUllfUlVOKCZkcnlfcnVuLCAiZHJ5IHJ1biIpLAorCQlPUFRfX1FVSUVUKCZxdWlldCwgImJlIHF1aWV0IiksCisJCU9QVF9DQUxMQkFDSygwLCAiZXhwZWN0IiwgJmV4cGVjdCwgInN0cmluZyIsCisJCQkgICAgICJleHBlY3RlZCBvdXRwdXQgaW4gdGhlIHZhcmlhYmxlIGR1bXAiLAorCQkJICAgICBjb2xsZWN0X2V4cGVjdCksCisJCU9QVF9HUk9VUCgiQWxpYXMiKSwKKwkJT1BUX1NUUklORygnQScsICJhbGlhcy1zb3VyY2UiLCAmc3RyaW5nLCAic3RyaW5nIiwgImdldCBhIHN0cmluZyIpLAorCQlPUFRfQUxJQVMoJ1onLCAiYWxpYXMtdGFyZ2V0IiwgImFsaWFzLXNvdXJjZSIpLAorCQlPUFRfRU5EKCksCisJfTsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCXRyYWNlMl9jbWRfbmFtZSgiX3BhcnNlXyIpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgKGNvbnN0IGNoYXIgKiopYXJndiwgcHJlZml4LCBvcHRpb25zLCB1c2FnZSwgMCk7CisKKwlpZiAobGVuZ3RoX2NiLmNhbGxlZCkgeworCQljb25zdCBjaGFyICphcmcgPSBsZW5ndGhfY2IuYXJnOworCQlpbnQgdW5zZXQgPSBsZW5ndGhfY2IudW5zZXQ7CisJCXNob3coJmV4cGVjdCwgJnJldCwgIkNhbGxiYWNrOiBcIiVzXCIsICVkIiwKKwkJICAgICAoYXJnID8gYXJnIDogIm5vdCBzZXQiKSwgdW5zZXQpOworCX0KKwlzaG93KCZleHBlY3QsICZyZXQsICJib29sZWFuOiAlZCIsIGJvb2xlYW4pOworCXNob3coJmV4cGVjdCwgJnJldCwgImludGVnZXI6ICVkIiwgaW50ZWdlcik7CisJc2hvdygmZXhwZWN0LCAmcmV0LCAibWFnbml0dWRlOiAlbHUiLCBtYWduaXR1ZGUpOworCXNob3coJmV4cGVjdCwgJnJldCwgInRpbWVzdGFtcDogJSJQUkl0aW1lLCB0aW1lc3RhbXApOworCXNob3coJmV4cGVjdCwgJnJldCwgInN0cmluZzogJXMiLCBzdHJpbmcgPyBzdHJpbmcgOiAiKG5vdCBzZXQpIik7CisJc2hvdygmZXhwZWN0LCAmcmV0LCAiYWJicmV2OiAlZCIsIGFiYnJldik7CisJc2hvdygmZXhwZWN0LCAmcmV0LCAidmVyYm9zZTogJWQiLCB2ZXJib3NlKTsKKwlzaG93KCZleHBlY3QsICZyZXQsICJxdWlldDogJWQiLCBxdWlldCk7CisJc2hvdygmZXhwZWN0LCAmcmV0LCAiZHJ5IHJ1bjogJXMiLCBkcnlfcnVuID8gInllcyIgOiAibm8iKTsKKwlzaG93KCZleHBlY3QsICZyZXQsICJmaWxlOiAlcyIsIGZpbGUgPyBmaWxlIDogIihub3Qgc2V0KSIpOworCisJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykKKwkJc2hvdygmZXhwZWN0LCAmcmV0LCAibGlzdDogJXMiLCBsaXN0Lml0ZW1zW2ldLnN0cmluZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQlzaG93KCZleHBlY3QsICZyZXQsICJhcmcgJTAyZDogJXMiLCBpLCBhcmd2W2ldKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXBhcnNlLXBhdGhzcGVjLWZpbGUuYyBiL3QvaGVscGVyL3Rlc3QtcGFyc2UtcGF0aHNwZWMtZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTA4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXBhcnNlLXBhdGhzcGVjLWZpbGUuYwpAQCAtMCwwICsxLDMzIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAiZ2V0dGV4dC5oIgorCitpbnQgY21kX19wYXJzZV9wYXRoc3BlY19maWxlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJY29uc3QgY2hhciAqcGF0aHNwZWNfZnJvbV9maWxlID0gTlVMTDsKKwlpbnQgcGF0aHNwZWNfZmlsZV9udWwgPSAwLCBpOworCisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVzYWdlW10gPSB7CisJCSJ0ZXN0LXRvb2wgcGFyc2UtcGF0aHNwZWMtZmlsZSAtLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF0iLAorCQlOVUxMCisJfTsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfUEFUSFNQRUNfRlJPTV9GSUxFKCZwYXRoc3BlY19mcm9tX2ZpbGUpLAorCQlPUFRfUEFUSFNQRUNfRklMRV9OVUwoJnBhdGhzcGVjX2ZpbGVfbnVsKSwKKwkJT1BUX0VORCgpCisJfTsKKworCXBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgdXNhZ2UsIDApOworCisJcGFyc2VfcGF0aHNwZWNfZmlsZSgmcGF0aHNwZWMsIDAsIDAsIE5VTEwsIHBhdGhzcGVjX2Zyb21fZmlsZSwKKwkJCSAgICBwYXRoc3BlY19maWxlX251bCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGF0aHNwZWMubnI7IGkrKykKKwkJcHJpbnRmKCIlc1xuIiwgcGF0aHNwZWMuaXRlbXNbaV0ub3JpZ2luYWwpOworCisJY2xlYXJfcGF0aHNwZWMoJnBhdGhzcGVjKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcGF0aC11dGlscy5jIGIvdC9oZWxwZXIvdGVzdC1wYXRoLXV0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEzYTE1MwotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtcGF0aC11dGlscy5jCkBAIC0wLDAgKzEsNDc3IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInV0ZjguaCIKKworLyoKKyAqIEEgInN0cmluZ19saXN0X2VhY2hfZnVuY190IiBmdW5jdGlvbiB0aGF0IG5vcm1hbGl6ZXMgYW4gZW50cnkgZnJvbQorICogR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMuICBJZiB0aGUgcGF0aCBpcyB1bnVzYWJsZSBmb3Igc29tZSByZWFzb24sCisgKiBkaWUgd2l0aCBhbiBleHBsYW5hdGlvbi4KKyAqLworc3RhdGljIGludCBub3JtYWxpemVfY2VpbGluZ19lbnRyeShzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqdW51c2VkKQoreworCWNoYXIgKmNlaWwgPSBpdGVtLT5zdHJpbmc7CisKKwlpZiAoISpjZWlsKQorCQlkaWUoIkVtcHR5IHBhdGggaXMgbm90IHN1cHBvcnRlZCIpOworCWlmICghaXNfYWJzb2x1dGVfcGF0aChjZWlsKSkKKwkJZGllKCJQYXRoIFwiJXNcIiBpcyBub3QgYWJzb2x1dGUiLCBjZWlsKTsKKwlpZiAobm9ybWFsaXplX3BhdGhfY29weShjZWlsLCBjZWlsKSA8IDApCisJCWRpZSgiUGF0aCBcIiVzXCIgY291bGQgbm90IGJlIG5vcm1hbGl6ZWQiLCBjZWlsKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgbm9ybWFsaXplX2FyZ3Zfc3RyaW5nKGNvbnN0IGNoYXIgKip2YXIsIGNvbnN0IGNoYXIgKmlucHV0KQoreworCWlmICghc3RyY21wKGlucHV0LCAiPG51bGw+IikpCisJCSp2YXIgPSBOVUxMOworCWVsc2UgaWYgKCFzdHJjbXAoaW5wdXQsICI8ZW1wdHk+IikpCisJCSp2YXIgPSAiIjsKKwllbHNlCisJCSp2YXIgPSBpbnB1dDsKKworCWlmICgqdmFyICYmICgqKnZhciA9PSAnPCcgfHwgKip2YXIgPT0gJygnKSkKKwkJZGllKCJCYWQgdmFsdWU6ICVzXG4iLCBpbnB1dCk7Cit9CisKK3N0cnVjdCB0ZXN0X2RhdGEgeworCWNvbnN0IGNoYXIgKmZyb207ICAvKiBpbnB1dDogIHRyYW5zZm9ybSBmcm9tIHRoaXMgLi4uICovCisJY29uc3QgY2hhciAqdG87ICAgIC8qIG91dHB1dDogLi4uIHRvIHRoaXMuICAgICAgICAgICAgKi8KKwljb25zdCBjaGFyICphbHRlcm5hdGl2ZTsgLyogb3V0cHV0OiAuLi4gb3IgdGhpcy4gICAgICAqLworfTsKKworLyoKKyAqIENvbXBhdGliaWxpdHkgd3JhcHBlcnMgZm9yIE9wZW5CU0QsIHdob3NlIGJhc2VuYW1lKDMpIGFuZCBkaXJuYW1lKDMpCisgKiBoYXZlIGNvbnN0IHBhcmFtZXRlcnMuCisgKi8KK3N0YXRpYyBjaGFyICpwb3NpeF9iYXNlbmFtZShjaGFyICpwYXRoKQoreworCXJldHVybiBiYXNlbmFtZShwYXRoKTsKK30KKworc3RhdGljIGNoYXIgKnBvc2l4X2Rpcm5hbWUoY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gZGlybmFtZShwYXRoKTsKK30KKworc3RhdGljIGludCB0ZXN0X2Z1bmN0aW9uKHN0cnVjdCB0ZXN0X2RhdGEgKmRhdGEsIGNoYXIgKigqZnVuYykoY2hhciAqaW5wdXQpLAorCWNvbnN0IGNoYXIgKmZ1bmNuYW1lKQoreworCWludCBmYWlsZWQgPSAwLCBpOworCWNoYXIgYnVmZmVyWzEwMjRdOworCWNoYXIgKnRvOworCisJZm9yIChpID0gMDsgZGF0YVtpXS50bzsgaSsrKSB7CisJCWlmICghZGF0YVtpXS5mcm9tKQorCQkJdG8gPSBmdW5jKE5VTEwpOworCQllbHNlIHsKKwkJCXhzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXMiLCBkYXRhW2ldLmZyb20pOworCQkJdG8gPSBmdW5jKGJ1ZmZlcik7CisJCX0KKwkJaWYgKCFzdHJjbXAodG8sIGRhdGFbaV0udG8pKQorCQkJY29udGludWU7CisJCWlmICghZGF0YVtpXS5hbHRlcm5hdGl2ZSkKKwkJCWVycm9yKCJGQUlMOiAlcyglcykgPT4gJyVzJyAhPSAnJXMnXG4iLAorCQkJCWZ1bmNuYW1lLCBkYXRhW2ldLmZyb20sIHRvLCBkYXRhW2ldLnRvKTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh0bywgZGF0YVtpXS5hbHRlcm5hdGl2ZSkpCisJCQljb250aW51ZTsKKwkJZWxzZQorCQkJZXJyb3IoIkZBSUw6ICVzKCVzKSA9PiAnJXMnICE9ICclcycsICclcydcbiIsCisJCQkJZnVuY25hbWUsIGRhdGFbaV0uZnJvbSwgdG8sIGRhdGFbaV0udG8sCisJCQkJZGF0YVtpXS5hbHRlcm5hdGl2ZSk7CisJCWZhaWxlZCA9IDE7CisJfQorCXJldHVybiBmYWlsZWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGVzdF9kYXRhIGJhc2VuYW1lX2RhdGFbXSA9IHsKKwkvKiAtLS0gUE9TSVggdHlwZSBwYXRocyAtLS0gKi8KKwl7IE5VTEwsICAgICAgICAgICAgICAiLiIgICAgfSwKKwl7ICIiLCAgICAgICAgICAgICAgICAiLiIgICAgfSwKKwl7ICIuIiwgICAgICAgICAgICAgICAiLiIgICAgfSwKKwl7ICIuLiIsICAgICAgICAgICAgICAiLi4iICAgfSwKKwl7ICIvIiwgICAgICAgICAgICAgICAiLyIgICAgfSwKKwl7ICIvLyIsICAgICAgICAgICAgICAiLyIsICIvLyIgfSwKKwl7ICIvLy8iLCAgICAgICAgICAgICAiLyIsICIvLyIgfSwKKwl7ICIvLy8vIiwgICAgICAgICAgICAiLyIsICIvLyIgfSwKKwl7ICJ1c3IiLCAgICAgICAgICAgICAidXNyIiAgfSwKKwl7ICIvdXNyIiwgICAgICAgICAgICAidXNyIiAgfSwKKwl7ICIvdXNyLyIsICAgICAgICAgICAidXNyIiAgfSwKKwl7ICIvdXNyLy8iLCAgICAgICAgICAidXNyIiAgfSwKKwl7ICIvdXNyL2xpYiIsICAgICAgICAibGliIiAgfSwKKwl7ICJ1c3IvbGliIiwgICAgICAgICAibGliIiAgfSwKKwl7ICJ1c3IvbGliLy8vIiwgICAgICAibGliIiAgfSwKKworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX01TQ19WRVIpCisJLyogLS0tIHdpbjMyIHR5cGUgcGF0aHMgLS0tICovCisJeyAiXFx1c3IiLCAgICAgICAgICAgInVzciIgIH0sCisJeyAiXFx1c3JcXCIsICAgICAgICAgInVzciIgIH0sCisJeyAiXFx1c3JcXFxcIiwgICAgICAgInVzciIgIH0sCisJeyAiXFx1c3JcXGxpYiIsICAgICAgImxpYiIgIH0sCisJeyAidXNyXFxsaWIiLCAgICAgICAgImxpYiIgIH0sCisJeyAidXNyXFxsaWJcXFxcXFwiLCAgImxpYiIgIH0sCisJeyAiQzovdXNyIiwgICAgICAgICAgInVzciIgIH0sCisJeyAiQzovdXNyIiwgICAgICAgICAgInVzciIgIH0sCisJeyAiQzovdXNyLyIsICAgICAgICAgInVzciIgIH0sCisJeyAiQzovdXNyLy8iLCAgICAgICAgInVzciIgIH0sCisJeyAiQzovdXNyL2xpYiIsICAgICAgImxpYiIgIH0sCisJeyAiQzp1c3IvbGliIiwgICAgICAgImxpYiIgIH0sCisJeyAiQzp1c3IvbGliLy8vIiwgICAgImxpYiIgIH0sCisJeyAiQzoiLCAgICAgICAgICAgICAgIi4iICAgIH0sCisJeyAiQzphIiwgICAgICAgICAgICAgImEiICAgIH0sCisJeyAiQzovIiwgICAgICAgICAgICAgIi8iICAgIH0sCisJeyAiQzovLy8iLCAgICAgICAgICAgIi8iICAgIH0sCisJeyAiXFwiLCAgICAgICAgICAgICAgIlxcIiwgIi8iIH0sCisJeyAiXFxcXCIsICAgICAgICAgICAgIlxcIiwgIi8iIH0sCisJeyAiXFxcXFxcIiwgICAgICAgICAgIlxcIiwgIi8iIH0sCisjZW5kaWYKKwl7IE5VTEwsICAgICAgICAgICAgICBOVUxMICAgfQorfTsKKworc3RhdGljIHN0cnVjdCB0ZXN0X2RhdGEgZGlybmFtZV9kYXRhW10gPSB7CisJLyogLS0tIFBPU0lYIHR5cGUgcGF0aHMgLS0tICovCisJeyBOVUxMLCAgICAgICAgICAgICAgIi4iICAgICAgfSwKKwl7ICIiLCAgICAgICAgICAgICAgICAiLiIgICAgICB9LAorCXsgIi4iLCAgICAgICAgICAgICAgICIuIiAgICAgIH0sCisJeyAiLi4iLCAgICAgICAgICAgICAgIi4iICAgICAgfSwKKwl7ICIvIiwgICAgICAgICAgICAgICAiLyIgICAgICB9LAorCXsgIi8vIiwgICAgICAgICAgICAgICIvIiwgIi8vIiB9LAorCXsgIi8vLyIsICAgICAgICAgICAgICIvIiwgIi8vIiB9LAorCXsgIi8vLy8iLCAgICAgICAgICAgICIvIiwgIi8vIiB9LAorCXsgInVzciIsICAgICAgICAgICAgICIuIiAgICAgIH0sCisJeyAiL3VzciIsICAgICAgICAgICAgIi8iICAgICAgfSwKKwl7ICIvdXNyLyIsICAgICAgICAgICAiLyIgICAgICB9LAorCXsgIi91c3IvLyIsICAgICAgICAgICIvIiAgICAgIH0sCisJeyAiL3Vzci9saWIiLCAgICAgICAgIi91c3IiICAgfSwKKwl7ICJ1c3IvbGliIiwgICAgICAgICAidXNyIiAgICB9LAorCXsgInVzci9saWIvLy8iLCAgICAgICJ1c3IiICAgIH0sCisKKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9NU0NfVkVSKQorCS8qIC0tLSB3aW4zMiB0eXBlIHBhdGhzIC0tLSAqLworCXsgIlxcIiwgICAgICAgICAgICAgICJcXCIgICAgIH0sCisJeyAiXFxcXCIsICAgICAgICAgICAgIlxcXFwiICAgfSwKKwl7ICJcXHVzciIsICAgICAgICAgICAiXFwiICAgICB9LAorCXsgIlxcdXNyXFwiLCAgICAgICAgICJcXCIgICAgIH0sCisJeyAiXFx1c3JcXFxcIiwgICAgICAgIlxcIiAgICAgfSwKKwl7ICJcXHVzclxcbGliIiwgICAgICAiXFx1c3IiICB9LAorCXsgInVzclxcbGliIiwgICAgICAgICJ1c3IiICAgIH0sCisJeyAidXNyXFxsaWJcXFxcXFwiLCAgInVzciIgICAgfSwKKwl7ICJDOmEiLCAgICAgICAgICAgICAiQzouIiAgICB9LAorCXsgIkM6LyIsICAgICAgICAgICAgICJDOi8iICAgIH0sCisJeyAiQzovLy8iLCAgICAgICAgICAgIkM6LyIgICAgfSwKKwl7ICJDOi91c3IiLCAgICAgICAgICAiQzovIiAgICB9LAorCXsgIkM6L3Vzci8iLCAgICAgICAgICJDOi8iICAgIH0sCisJeyAiQzovdXNyLy8iLCAgICAgICAgIkM6LyIgICAgfSwKKwl7ICJDOi91c3IvbGliIiwgICAgICAiQzovdXNyIiB9LAorCXsgIkM6dXNyL2xpYiIsICAgICAgICJDOnVzciIgIH0sCisJeyAiQzp1c3IvbGliLy8vIiwgICAgIkM6dXNyIiAgfSwKKwl7ICJcXFxcXFwiLCAgICAgICAgICAiXFwiICAgICB9LAorCXsgIlxcXFxcXFxcIiwgICAgICAgICJcXCIgICAgIH0sCisJeyAiQzoiLCAgICAgICAgICAgICAgIkM6LiIsICIuIiB9LAorI2VuZGlmCisJeyBOVUxMLCAgICAgICAgICAgICAgTlVMTCAgICAgfQorfTsKKworc3RhdGljIGludCBpc19kb3RnaXRtb2R1bGVzKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIGlzX2hmc19kb3RnaXRtb2R1bGVzKHBhdGgpIHx8IGlzX250ZnNfZG90Z2l0bW9kdWxlcyhwYXRoKTsKK30KKworc3RhdGljIGludCBjbXBfYnlfc3Rfc2l6ZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWludHB0cl90IHggPSAoaW50cHRyX3QpKChzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqKWEpLT51dGlsOworCWludHB0cl90IHkgPSAoaW50cHRyX3QpKChzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqKWIpLT51dGlsOworCisJcmV0dXJuIHggPiB5ID8gLTEgOiAoeCA8IHkgPyArMSA6IDApOworfQorCisvKgorICogQSB2ZXJ5IHNpbXBsZSwgcmVwcm9kdWNpYmxlIHBzZXVkby1yYW5kb20gZ2VuZXJhdG9yLiBDb3BpZWQgZnJvbQorICogYHRlc3QtZ2VucmFuZG9tLmNgLgorICovCitzdGF0aWMgdWludDY0X3QgbXlfcmFuZG9tX3ZhbHVlID0gMTIzNDsKKworc3RhdGljIHVpbnQ2NF90IG15X3JhbmRvbSh2b2lkKQoreworCW15X3JhbmRvbV92YWx1ZSA9IG15X3JhbmRvbV92YWx1ZSAqIDExMDM1MTUyNDUgKyAxMjM0NTsKKwlyZXR1cm4gbXlfcmFuZG9tX3ZhbHVlOworfQorCisvKgorICogQSBmYXN0IGFwcHJveGltYXRpb24gb2YgdGhlIHNxdWFyZSByb290LCB3aXRob3V0IHJlcXVpcmluZyBtYXRoLmguCisgKgorICogSXQgdXNlcyBOZXd0b24ncyBtZXRob2QgdG8gYXBwcm94aW1hdGUgdGhlIHNvbHV0aW9uIG9mIDAgPSB4XjIgLSB2YWx1ZS4KKyAqLworc3RhdGljIGRvdWJsZSBteV9zcXJ0KGRvdWJsZSB2YWx1ZSkKK3sKKwljb25zdCBkb3VibGUgZXBzaWxvbiA9IDFlLTY7CisJZG91YmxlIHggPSB2YWx1ZTsKKworCWlmICh2YWx1ZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWZvciAoOzspIHsKKwkJZG91YmxlIGRlbHRhID0gKHZhbHVlIC8geCAtIHgpIC8gMjsKKwkJaWYgKGRlbHRhIDwgZXBzaWxvbiAmJiBkZWx0YSA+IC1lcHNpbG9uKQorCQkJcmV0dXJuIHggKyBkZWx0YTsKKwkJeCArPSBkZWx0YTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHJvdGVjdF9udGZzX2hmc19iZW5jaG1hcmsoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXNpemVfdCBpLCBqLCBuciwgbWluX2xlbiA9IDMsIG1heF9sZW4gPSAyMDsKKwljaGFyICoqbmFtZXM7CisJaW50IHJlcGV0aXRpb25zID0gMTUsIGZpbGVfbW9kZSA9IDAxMDA2NDQ7CisJdWludDY0X3QgYmVnaW4sIGVuZDsKKwlkb3VibGUgbVszXVsyXSwgdlszXVsyXTsKKwl1aW50NjRfdCBjdW11bDsKKwlkb3VibGUgY3VtdWwyOworCisJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoYXJndlsxXSwgIi0td2l0aC1zeW1saW5rLW1vZGUiKSkgeworCQlmaWxlX21vZGUgPSAwMTIwMDAwOworCQlhcmdjLS07CisJCWFyZ3YrKzsKKwl9CisKKwluciA9IGFyZ2MgPiAxID8gc3RydG91bChhcmd2WzFdLCBOVUxMLCAwKSA6IDEwMDAwMDA7CisJQUxMT0NfQVJSQVkobmFtZXMsIG5yKTsKKworCWlmIChhcmdjID4gMikgeworCQltaW5fbGVuID0gc3RydG91bChhcmd2WzJdLCBOVUxMLCAwKTsKKwkJaWYgKGFyZ2MgPiAzKQorCQkJbWF4X2xlbiA9IHN0cnRvdWwoYXJndlszXSwgTlVMTCwgMCk7CisJCWlmIChtaW5fbGVuID4gbWF4X2xlbikKKwkJCWRpZSgibWluX2xlbiA+IG1heF9sZW4iKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlzaXplX3QgbGVuID0gbWluX2xlbiArIChteV9yYW5kb20oKSAlIChtYXhfbGVuICsgMSAtIG1pbl9sZW4pKTsKKworCQluYW1lc1tpXSA9IHhtYWxsb2N6KGxlbik7CisJCXdoaWxlIChsZW4gPiAwKQorCQkJbmFtZXNbaV1bLS1sZW5dID0gKGNoYXIpKCcgJyArIChteV9yYW5kb20oKSAlICgnXHg3ZicgLSAnICcpKSk7CisJfQorCisJZm9yIChwcm90ZWN0X250ZnMgPSAwOyBwcm90ZWN0X250ZnMgPCAyOyBwcm90ZWN0X250ZnMrKykKKwkJZm9yIChwcm90ZWN0X2hmcyA9IDA7IHByb3RlY3RfaGZzIDwgMjsgcHJvdGVjdF9oZnMrKykgeworCQkJY3VtdWwgPSAwOworCQkJY3VtdWwyID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCByZXBldGl0aW9uczsgaSsrKSB7CisJCQkJYmVnaW4gPSBnZXRuYW5vdGltZSgpOworCQkJCWZvciAoaiA9IDA7IGogPCBucjsgaisrKQorCQkJCQl2ZXJpZnlfcGF0aChuYW1lc1tqXSwgZmlsZV9tb2RlKTsKKwkJCQllbmQgPSBnZXRuYW5vdGltZSgpOworCQkJCXByaW50ZigicHJvdGVjdF9udGZzID0gJWQsIHByb3RlY3RfaGZzID0gJWQ6ICVsZm1zXG4iLCBwcm90ZWN0X250ZnMsIHByb3RlY3RfaGZzLCAoZW5kLWJlZ2luKSAvIChkb3VibGUpMWU2KTsKKwkJCQljdW11bCArPSBlbmQgLSBiZWdpbjsKKwkJCQljdW11bDIgKz0gKGVuZCAtIGJlZ2luKSAqIChlbmQgLSBiZWdpbik7CisJCQl9CisJCQltW3Byb3RlY3RfbnRmc11bcHJvdGVjdF9oZnNdID0gY3VtdWwgLyAoZG91YmxlKXJlcGV0aXRpb25zOworCQkJdltwcm90ZWN0X250ZnNdW3Byb3RlY3RfaGZzXSA9IG15X3NxcnQoY3VtdWwyIC8gKGRvdWJsZSlyZXBldGl0aW9ucyAtIG1bcHJvdGVjdF9udGZzXVtwcm90ZWN0X2hmc10gKiBtW3Byb3RlY3RfbnRmc11bcHJvdGVjdF9oZnNdKTsKKwkJCXByaW50ZigibWVhbjogJWxmbXMsIHN0ZGRldjogJWxmbXNcbiIsIG1bcHJvdGVjdF9udGZzXVtwcm90ZWN0X2hmc10gLyAoZG91YmxlKTFlNiwgdltwcm90ZWN0X250ZnNdW3Byb3RlY3RfaGZzXSAvIChkb3VibGUpMWU2KTsKKwkJfQorCisJZm9yIChwcm90ZWN0X250ZnMgPSAwOyBwcm90ZWN0X250ZnMgPCAyOyBwcm90ZWN0X250ZnMrKykKKwkJZm9yIChwcm90ZWN0X2hmcyA9IDA7IHByb3RlY3RfaGZzIDwgMjsgcHJvdGVjdF9oZnMrKykKKwkJCXByaW50ZigibnRmcz0lZC9oZnM9JWQ6ICVsZiUlIHNsb3dlclxuIiwgcHJvdGVjdF9udGZzLCBwcm90ZWN0X2hmcywgKG1bcHJvdGVjdF9udGZzXVtwcm90ZWN0X2hmc10gLSBtWzBdWzBdKSAqIDEwMCAvIG1bMF1bMF0pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfX3BhdGhfdXRpbHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWlmIChhcmdjID09IDMgJiYgIXN0cmNtcChhcmd2WzFdLCAibm9ybWFsaXplX3BhdGhfY29weSIpKSB7CisJCWNoYXIgKmJ1ZiA9IHhtYWxsb2N6KHN0cmxlbihhcmd2WzJdKSk7CisJCWludCBydiA9IG5vcm1hbGl6ZV9wYXRoX2NvcHkoYnVmLCBhcmd2WzJdKTsKKwkJaWYgKHJ2KQorCQkJYnVmID0gIisrZmFpbGVkKysiOworCQlwdXRzKGJ1Zik7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID49IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAicmVhbF9wYXRoIikpIHsKKwkJc3RydWN0IHN0cmJ1ZiByZWFscGF0aCA9IFNUUkJVRl9JTklUOworCQl3aGlsZSAoYXJnYyA+IDIpIHsKKwkJCXN0cmJ1Zl9yZWFscGF0aCgmcmVhbHBhdGgsIGFyZ3ZbMl0sIDEpOworCQkJcHV0cyhyZWFscGF0aC5idWYpOworCQkJYXJnYy0tOworCQkJYXJndisrOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZyZWFscGF0aCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID49IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiYWJzb2x1dGVfcGF0aCIpKSB7CisJCXdoaWxlIChhcmdjID4gMikgeworCQkJcHV0cyhhYnNvbHV0ZV9wYXRoKGFyZ3ZbMl0pKTsKKwkJCWFyZ2MtLTsKKwkJCWFyZ3YrKzsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJnYyA9PSA0ICYmICFzdHJjbXAoYXJndlsxXSwgImxvbmdlc3RfYW5jZXN0b3JfbGVuZ3RoIikpIHsKKwkJaW50IGxlbjsKKwkJc3RydWN0IHN0cmluZ19saXN0IGNlaWxpbmdfZGlycyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCQljaGFyICpwYXRoID0geHN0cmR1cChhcmd2WzJdKTsKKworCQkvKgorCQkgKiBXZSBoYXZlIHRvIG5vcm1hbGl6ZSB0aGUgYXJndW1lbnRzIGJlY2F1c2UgdW5kZXIKKwkJICogV2luZG93cywgYmFzaCBtYW5nbGVzIGFyZ3VtZW50cyB0aGF0IGxvb2sgbGlrZQorCQkgKiBhYnNvbHV0ZSBQT1NJWCBwYXRocyBvciBjb2xvbi1zZXBhcmF0ZSBsaXN0cyBvZgorCQkgKiBhYnNvbHV0ZSBQT1NJWCBwYXRocyBpbnRvIERPUyBwYXRocyAoZS5nLiwKKwkJICogIi9mb286L2Zvby9iYXIiIG1pZ2h0IGJlIGNvbnZlcnRlZCB0bworCQkgKiAiRDpcU3JjXG1zeXNnaXRcZm9vO0Q6XFNyY1xtc3lzZ2l0XGZvb1xiYXIiKSwKKwkJICogd2hlcmVhcyBsb25nZXN0X2FuY2VzdG9yX2xlbmd0aCgpIHJlcXVpcmVzIHBhdGhzCisJCSAqIHRoYXQgdXNlIGZvcndhcmQgc2xhc2hlcy4KKwkJICovCisJCWlmIChub3JtYWxpemVfcGF0aF9jb3B5KHBhdGgsIHBhdGgpKQorCQkJZGllKCJQYXRoIFwiJXNcIiBjb3VsZCBub3QgYmUgbm9ybWFsaXplZCIsIGFyZ3ZbMl0pOworCQlzdHJpbmdfbGlzdF9zcGxpdCgmY2VpbGluZ19kaXJzLCBhcmd2WzNdLCBQQVRIX1NFUCwgLTEpOworCQlmaWx0ZXJfc3RyaW5nX2xpc3QoJmNlaWxpbmdfZGlycywgMCwKKwkJCQkgICBub3JtYWxpemVfY2VpbGluZ19lbnRyeSwgTlVMTCk7CisJCWxlbiA9IGxvbmdlc3RfYW5jZXN0b3JfbGVuZ3RoKHBhdGgsICZjZWlsaW5nX2RpcnMpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmY2VpbGluZ19kaXJzLCAwKTsKKwkJZnJlZShwYXRoKTsKKwkJcHJpbnRmKCIlZFxuIiwgbGVuKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPj0gNCAmJiAhc3RyY21wKGFyZ3ZbMV0sICJwcmVmaXhfcGF0aCIpKSB7CisJCWNvbnN0IGNoYXIgKnByZWZpeCA9IGFyZ3ZbMl07CisJCWludCBwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCk7CisJCWludCBub25naXRfb2s7CisJCXNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXRfb2spOworCQl3aGlsZSAoYXJnYyA+IDMpIHsKKwkJCXB1dHMocHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXhfbGVuLCBhcmd2WzNdKSk7CisJCQlhcmdjLS07CisJCQlhcmd2Kys7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPT0gNCAmJiAhc3RyY21wKGFyZ3ZbMV0sICJzdHJpcF9wYXRoX3N1ZmZpeCIpKSB7CisJCWNoYXIgKnByZWZpeCA9IHN0cmlwX3BhdGhfc3VmZml4KGFyZ3ZbMl0sIGFyZ3ZbM10pOworCQlwcmludGYoIiVzXG4iLCBwcmVmaXggPyBwcmVmaXggOiAiKG51bGwpIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDMgJiYgIXN0cmNtcChhcmd2WzFdLCAicHJpbnRfcGF0aCIpKSB7CisJCXB1dHMoYXJndlsyXSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDQgJiYgIXN0cmNtcChhcmd2WzFdLCAicmVsYXRpdmVfcGF0aCIpKSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqaW4sICpwcmVmaXgsICpyZWw7CisJCW5vcm1hbGl6ZV9hcmd2X3N0cmluZygmaW4sIGFyZ3ZbMl0pOworCQlub3JtYWxpemVfYXJndl9zdHJpbmcoJnByZWZpeCwgYXJndlszXSk7CisJCXJlbCA9IHJlbGF0aXZlX3BhdGgoaW4sIHByZWZpeCwgJnNiKTsKKwkJaWYgKCFyZWwpCisJCQlwdXRzKCIobnVsbCkiKTsKKwkJZWxzZQorCQkJcHV0cyhzdHJsZW4ocmVsKSA+IDAgPyByZWwgOiAiKGVtcHR5KSIpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgImJhc2VuYW1lIikpCisJCXJldHVybiB0ZXN0X2Z1bmN0aW9uKGJhc2VuYW1lX2RhdGEsIHBvc2l4X2Jhc2VuYW1lLCBhcmd2WzFdKTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiZGlybmFtZSIpKQorCQlyZXR1cm4gdGVzdF9mdW5jdGlvbihkaXJuYW1lX2RhdGEsIHBvc2l4X2Rpcm5hbWUsIGFyZ3ZbMV0pOworCisJaWYgKGFyZ2MgPiAyICYmICFzdHJjbXAoYXJndlsxXSwgImlzX2RvdGdpdG1vZHVsZXMiKSkgeworCQlpbnQgcmVzID0gMCwgZXhwZWN0ID0gMSwgaTsKKwkJZm9yIChpID0gMjsgaSA8IGFyZ2M7IGkrKykKKwkJCWlmICghc3RyY21wKCItLW5vdCIsIGFyZ3ZbaV0pKQorCQkJCWV4cGVjdCA9ICFleHBlY3Q7CisJCQllbHNlIGlmIChleHBlY3QgIT0gaXNfZG90Z2l0bW9kdWxlcyhhcmd2W2ldKSkKKwkJCQlyZXMgPSBlcnJvcigiJyVzJyBpcyAlcy5naXRtb2R1bGVzIiwgYXJndltpXSwKKwkJCQkJICAgIGV4cGVjdCA/ICJub3QgIiA6ICIiKTsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIm9rOiAnJXMnIGlzICVzLmdpdG1vZHVsZXNcbiIsCisJCQkJCWFyZ3ZbaV0sIGV4cGVjdCA/ICIiIDogIm5vdCAiKTsKKwkJcmV0dXJuICEhcmVzOworCX0KKworCWlmIChhcmdjID4gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICJmaWxlLXNpemUiKSkgeworCQlpbnQgcmVzID0gMCwgaTsKKwkJc3RydWN0IHN0YXQgc3Q7CisKKwkJZm9yIChpID0gMjsgaSA8IGFyZ2M7IGkrKykKKwkJCWlmIChzdGF0KGFyZ3ZbaV0sICZzdCkpCisJCQkJcmVzID0gZXJyb3JfZXJybm8oIkNhbm5vdCBzdGF0ICclcyciLCBhcmd2W2ldKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIiUiUFJJdU1BWCJcbiIsICh1aW50bWF4X3Qpc3Quc3Rfc2l6ZSk7CisJCXJldHVybiAhIXJlczsKKwl9CisKKwlpZiAoYXJnYyA9PSA0ICYmICFzdHJjbXAoYXJndlsxXSwgInNraXAtbi1ieXRlcyIpKSB7CisJCWludCBmZCA9IG9wZW4oYXJndlsyXSwgT19SRE9OTFkpLCBvZmZzZXQgPSBhdG9pKGFyZ3ZbM10pOworCQljaGFyIGJ1ZmZlcls2NTUzNl07CisKKwkJaWYgKGZkIDwgMCkKKwkJCWRpZV9lcnJubygiY291bGQgbm90IG9wZW4gJyVzJyIsIGFyZ3ZbMl0pOworCQlpZiAobHNlZWsoZmQsIG9mZnNldCwgU0VFS19TRVQpIDwgMCkKKwkJCWRpZV9lcnJubygiY291bGQgbm90IHNraXAgJWQgYnl0ZXMiLCBvZmZzZXQpOworCQlmb3IgKDs7KSB7CisJCQlzc2l6ZV90IGNvdW50ID0gcmVhZChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJCQlpZiAoY291bnQgPCAwKQorCQkJCWRpZV9lcnJubygiY291bGQgbm90IHJlYWQgJyVzJyIsIGFyZ3ZbMl0pOworCQkJaWYgKCFjb3VudCkKKwkJCQlicmVhazsKKwkJCWlmICh3cml0ZSgxLCBidWZmZXIsIGNvdW50KSA8IDApCisJCQkJZGllX2Vycm5vKCJjb3VsZCBub3Qgd3JpdGUgdG8gc3Rkb3V0Iik7CisJCX0KKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJnYyA+IDUgJiYgIXN0cmNtcChhcmd2WzFdLCAic2xpY2UtdGVzdHMiKSkgeworCQlpbnQgcmVzID0gMDsKKwkJbG9uZyBvZmZzZXQsIHN0cmlkZSwgaTsKKwkJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQlvZmZzZXQgPSBzdHJ0b2woYXJndlsyXSwgTlVMTCwgMTApOworCQlzdHJpZGUgPSBzdHJ0b2woYXJndlszXSwgTlVMTCwgMTApOworCQlpZiAoc3RyaWRlIDwgMSkKKwkJCXN0cmlkZSA9IDE7CisJCWZvciAoaSA9IDQ7IGkgPCBhcmdjOyBpKyspCisJCQlpZiAoc3RhdChhcmd2W2ldLCAmc3QpKQorCQkJCXJlcyA9IGVycm9yX2Vycm5vKCJDYW5ub3Qgc3RhdCAnJXMnIiwgYXJndltpXSk7CisJCQllbHNlCisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZsaXN0LCBhcmd2W2ldKS0+dXRpbCA9CisJCQkJCSh2b2lkICopKGludHB0cl90KXN0LnN0X3NpemU7CisJCVFTT1JUKGxpc3QuaXRlbXMsIGxpc3QubnIsIGNtcF9ieV9zdF9zaXplKTsKKwkJZm9yIChpID0gb2Zmc2V0OyBpIDwgbGlzdC5ucjsgaSs9IHN0cmlkZSkKKwkJCXByaW50ZigiJXNcbiIsIGxpc3QuaXRlbXNbaV0uc3RyaW5nKTsKKworCQlyZXR1cm4gISFyZXM7CisJfQorCisJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoYXJndlsxXSwgInByb3RlY3RfbnRmc19oZnMiKSkKKwkJcmV0dXJuICEhcHJvdGVjdF9udGZzX2hmc19iZW5jaG1hcmsoYXJnYyAtIDEsIGFyZ3YgKyAxKTsKKworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICJpc192YWxpZF9wYXRoIikpIHsKKwkJaW50IHJlcyA9IDAsIGV4cGVjdCA9IDEsIGk7CisKKwkJZm9yIChpID0gMjsgaSA8IGFyZ2M7IGkrKykKKwkJCWlmICghc3RyY21wKCItLW5vdCIsIGFyZ3ZbaV0pKQorCQkJCWV4cGVjdCA9IDA7CisJCQllbHNlIGlmIChleHBlY3QgIT0gaXNfdmFsaWRfcGF0aChhcmd2W2ldKSkKKwkJCQlyZXMgPSBlcnJvcigiJyVzJyBpcyVzIGEgdmFsaWQgcGF0aCIsCisJCQkJCSAgICBhcmd2W2ldLCBleHBlY3QgPyAiIG5vdCIgOiAiIik7CisJCQllbHNlCisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSInJXMnIGlzJXMgYSB2YWxpZCBwYXRoXG4iLAorCQkJCQlhcmd2W2ldLCBleHBlY3QgPyAiIiA6ICIgbm90Iik7CisKKwkJcmV0dXJuICEhcmVzOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiJXM6IHVua25vd24gZnVuY3Rpb24gbmFtZTogJXNcbiIsIGFyZ3ZbMF0sCisJCWFyZ3ZbMV0gPyBhcmd2WzFdIDogIih0aGVyZSB3YXMgbm9uZSkiKTsKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcGt0LWxpbmUuYyBiL3QvaGVscGVyL3Rlc3QtcGt0LWxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmNhNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1wa3QtbGluZS5jCkBAIC0wLDAgKzEsOTggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisKK3N0YXRpYyB2b2lkIHBhY2tfbGluZShjb25zdCBjaGFyICpsaW5lKQoreworCWlmICghc3RyY21wKGxpbmUsICIwMDAwIikgfHwgIXN0cmNtcChsaW5lLCAiMDAwMFxuIikpCisJCXBhY2tldF9mbHVzaCgxKTsKKwllbHNlIGlmICghc3RyY21wKGxpbmUsICIwMDAxIikgfHwgIXN0cmNtcChsaW5lLCAiMDAwMVxuIikpCisJCXBhY2tldF9kZWxpbSgxKTsKKwllbHNlCisJCXBhY2tldF93cml0ZV9mbXQoMSwgIiVzIiwgbGluZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWlmIChhcmdjKSB7IC8qIHJlYWQgZnJvbSBhcmd2ICovCisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQkJcGFja19saW5lKGFyZ3ZbaV0pOworCX0gZWxzZSB7IC8qIHJlYWQgZnJvbSBzdGRpbiAqLworCQljaGFyIGxpbmVbTEFSR0VfUEFDS0VUX01BWF07CisJCXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIHN0ZGluKSkgeworCQkJcGFja19saW5lKGxpbmUpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB1bnBhY2sodm9pZCkKK3sKKwlzdHJ1Y3QgcGFja2V0X3JlYWRlciByZWFkZXI7CisJcGFja2V0X3JlYWRlcl9pbml0KCZyZWFkZXIsIDAsIE5VTEwsIDAsCisJCQkgICBQQUNLRVRfUkVBRF9HRU5UTEVfT05fRU9GIHwKKwkJCSAgIFBBQ0tFVF9SRUFEX0NIT01QX05FV0xJTkUpOworCisJd2hpbGUgKHBhY2tldF9yZWFkZXJfcmVhZCgmcmVhZGVyKSAhPSBQQUNLRVRfUkVBRF9FT0YpIHsKKwkJc3dpdGNoIChyZWFkZXIuc3RhdHVzKSB7CisJCWNhc2UgUEFDS0VUX1JFQURfRU9GOgorCQkJYnJlYWs7CisJCWNhc2UgUEFDS0VUX1JFQURfTk9STUFMOgorCQkJcHJpbnRmKCIlc1xuIiwgcmVhZGVyLmxpbmUpOworCQkJYnJlYWs7CisJCWNhc2UgUEFDS0VUX1JFQURfRkxVU0g6CisJCQlwcmludGYoIjAwMDBcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgUEFDS0VUX1JFQURfREVMSU06CisJCQlwcmludGYoIjAwMDFcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVucGFja19zaWRlYmFuZCh2b2lkKQoreworCXN0cnVjdCBwYWNrZXRfcmVhZGVyIHJlYWRlcjsKKwlwYWNrZXRfcmVhZGVyX2luaXQoJnJlYWRlciwgMCwgTlVMTCwgMCwKKwkJCSAgIFBBQ0tFVF9SRUFEX0dFTlRMRV9PTl9FT0YgfAorCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSk7CisKKwl3aGlsZSAocGFja2V0X3JlYWRlcl9yZWFkKCZyZWFkZXIpICE9IFBBQ0tFVF9SRUFEX0VPRikgeworCQlpbnQgYmFuZDsKKwkJaW50IGZkOworCisJCXN3aXRjaCAocmVhZGVyLnN0YXR1cykgeworCQljYXNlIFBBQ0tFVF9SRUFEX0VPRjoKKwkJCWJyZWFrOworCQljYXNlIFBBQ0tFVF9SRUFEX05PUk1BTDoKKwkJCWJhbmQgPSByZWFkZXIubGluZVswXSAmIDB4ZmY7CisJCQlpZiAoYmFuZCA8IDEgfHwgYmFuZCA+IDIpCisJCQkJY29udGludWU7IC8qIHNraXAgbm9uLXNpZGViYW5kIHBhY2tldHMgKi8KKwkJCWZkID0gYmFuZDsKKworCQkJd3JpdGVfb3JfZGllKGZkLCByZWFkZXIubGluZSArIDEsIHJlYWRlci5wa3RsZW4gLSAxKTsKKwkJCWJyZWFrOworCQljYXNlIFBBQ0tFVF9SRUFEX0ZMVVNIOgorCQkJcmV0dXJuOworCQljYXNlIFBBQ0tFVF9SRUFEX0RFTElNOgorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK2ludCBjbWRfX3BrdF9saW5lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpZiAoYXJnYyA8IDIpCisJCWRpZSgidG9vIGZldyBhcmd1bWVudHMiKTsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJwYWNrIikpCisJCXBhY2soYXJnYyAtIDIsIGFyZ3YgKyAyKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJ1bnBhY2siKSkKKwkJdW5wYWNrKCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAidW5wYWNrLXNpZGViYW5kIikpCisJCXVucGFja19zaWRlYmFuZCgpOworCWVsc2UKKwkJZGllKCJpbnZhbGlkIGFyZ3VtZW50ICclcyciLCBhcmd2WzFdKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1wcmlvLXF1ZXVlLmMgYi90L2hlbHBlci90ZXN0LXByaW8tcXVldWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDAyODQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1wcmlvLXF1ZXVlLmMKQEAgLTAsMCArMSw1MCBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicHJpby1xdWV1ZS5oIgorCitzdGF0aWMgaW50IGludGNtcChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIsIHZvaWQgKmRhdGEpCit7CisJY29uc3QgaW50ICphID0gdmEsICpiID0gdmI7CisJcmV0dXJuICphIC0gKmI7Cit9CisKK3N0YXRpYyB2b2lkIHNob3coaW50ICp2KQoreworCWlmICghdikKKwkJcHJpbnRmKCJOVUxMXG4iKTsKKwllbHNlCisJCXByaW50ZigiJWRcbiIsICp2KTsKKwlmcmVlKHYpOworfQorCitpbnQgY21kX19wcmlvX3F1ZXVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgcHJpb19xdWV1ZSBwcSA9IHsgaW50Y21wIH07CisKKwl3aGlsZSAoKisrYXJndikgeworCQlpZiAoIXN0cmNtcCgqYXJndiwgImdldCIpKSB7CisJCQl2b2lkICpwZWVrID0gcHJpb19xdWV1ZV9wZWVrKCZwcSk7CisJCQl2b2lkICpnZXQgPSBwcmlvX3F1ZXVlX2dldCgmcHEpOworCQkJaWYgKHBlZWsgIT0gZ2V0KQorCQkJCUJVRygicGVlayBhbmQgZ2V0IHJlc3VsdHMgZG8gbm90IG1hdGNoIik7CisJCQlzaG93KGdldCk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgImR1bXAiKSkgeworCQkJdm9pZCAqcGVlazsKKwkJCXZvaWQgKmdldDsKKwkJCXdoaWxlICgocGVlayA9IHByaW9fcXVldWVfcGVlaygmcHEpKSkgeworCQkJCWdldCA9IHByaW9fcXVldWVfZ2V0KCZwcSk7CisJCQkJaWYgKHBlZWsgIT0gZ2V0KQorCQkJCQlCVUcoInBlZWsgYW5kIGdldCByZXN1bHRzIGRvIG5vdCBtYXRjaCIpOworCQkJCXNob3coZ2V0KTsKKwkJCX0KKwkJfSBlbHNlIGlmICghc3RyY21wKCphcmd2LCAic3RhY2siKSkgeworCQkJcHEuY29tcGFyZSA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQlpbnQgKnYgPSB4bWFsbG9jKHNpemVvZigqdikpOworCQkJKnYgPSBhdG9pKCphcmd2KTsKKwkJCXByaW9fcXVldWVfcHV0KCZwcSwgdik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcHJvZ3Jlc3MuYyBiL3QvaGVscGVyL3Rlc3QtcHJvZ3Jlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDA1Y2JlCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1wcm9ncmVzcy5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBBIHRlc3QgaGVscGVyIHRvIGV4ZXJjaXNlIHRoZSBwcm9ncmVzcyBkaXNwbGF5LgorICoKKyAqIFJlYWRzIGluc3RydWN0aW9ucyBmcm9tIHN0YW5kYXJkIGlucHV0LCBvbmUgaW5zdHJ1Y3Rpb24gcGVyIGxpbmU6CisgKgorICogICAicHJvZ3Jlc3MgPGl0ZW1zPiIgLSBDYWxsIGRpc3BsYXlfcHJvZ3Jlc3MoKSB3aXRoIHRoZSBnaXZlbiBpdGVtIGNvdW50CisgKiAgICAgICAgICAgICAgICAgICAgICAgIGFzIHBhcmFtZXRlci4KKyAqICAgInRocm91Z2hwdXQgPGJ5dGVzPiA8bWlsbGlzPiAtIENhbGwgZGlzcGxheV90aHJvdWdocHV0KCkgd2l0aCB0aGUgZ2l2ZW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgY291bnQgYXMgcGFyYW1ldGVyLiAgVGhlICdtaWxsaXMnCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSB0aW1lIGVsYXBzZWQgc2luY2UgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9wcm9ncmVzcygpIGNhbGwuCisgKiAgICJ1cGRhdGUiIC0gU2V0IHRoZSAncHJvZ3Jlc3NfdXBkYXRlJyBmbGFnLgorICoKKyAqIFNlZSAndDA1MDAtcHJvZ3Jlc3MtZGlzcGxheS5zaCcgZm9yIGV4YW1wbGVzLgorICovCisjZGVmaW5lIEdJVF9URVNUX1BST0dSRVNTX09OTFkKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJnZXR0ZXh0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK2ludCBjbWRfX3Byb2dyZXNzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgdG90YWwgPSAwOworCWNvbnN0IGNoYXIgKnRpdGxlOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CisKKwljb25zdCBjaGFyICp1c2FnZVtdID0geworCQkidGVzdC10b29sIHByb2dyZXNzIFstLXRvdGFsPTxuPl0gPHByb2dyZXNzLXRpdGxlPiIsCisJCU5VTEwKKwl9OworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfSU5URUdFUigwLCAidG90YWwiLCAmdG90YWwsICJ0b3RhbCBudW1iZXIgb2YgaXRlbXMiKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCB1c2FnZSwgMCk7CisJaWYgKGFyZ2MgIT0gMSkKKwkJZGllKCJuZWVkIGEgdGl0bGUgZm9yIHRoZSBwcm9ncmVzcyBvdXRwdXQiKTsKKwl0aXRsZSA9IGFyZ3ZbMF07CisKKwlwcm9ncmVzc190ZXN0aW5nID0gMTsKKwlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKHRpdGxlLCB0b3RhbCk7CisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBzdGRpbikgIT0gRU9GKSB7CisJCWNoYXIgKmVuZDsKKworCQlpZiAoc2tpcF9wcmVmaXgobGluZS5idWYsICJwcm9ncmVzcyAiLCAoY29uc3QgY2hhciAqKikgJmVuZCkpIHsKKwkJCXVpbnQ2NF90IGl0ZW1fY291bnQgPSBzdHJ0b3VsbChlbmQsICZlbmQsIDEwKTsKKwkJCWlmICgqZW5kICE9ICdcMCcpCisJCQkJZGllKCJpbnZhbGlkIGlucHV0OiAnJXMnXG4iLCBsaW5lLmJ1Zik7CisJCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpdGVtX2NvdW50KTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChsaW5lLmJ1ZiwgInRocm91Z2hwdXQgIiwKKwkJCQkgICAgICAgKGNvbnN0IGNoYXIgKiopICZlbmQpKSB7CisJCQl1aW50NjRfdCBieXRlX2NvdW50LCB0ZXN0X21zOworCisJCQlieXRlX2NvdW50ID0gc3RydG91bGwoZW5kLCAmZW5kLCAxMCk7CisJCQlpZiAoKmVuZCAhPSAnICcpCisJCQkJZGllKCJpbnZhbGlkIGlucHV0OiAnJXMnXG4iLCBsaW5lLmJ1Zik7CisJCQl0ZXN0X21zID0gc3RydG91bGwoZW5kICsgMSwgJmVuZCwgMTApOworCQkJaWYgKCplbmQgIT0gJ1wwJykKKwkJCQlkaWUoImludmFsaWQgaW5wdXQ6ICclcydcbiIsIGxpbmUuYnVmKTsKKwkJCXByb2dyZXNzX3Rlc3RfbnMgPSB0ZXN0X21zICogMTAwMCAqIDEwMDA7CisJCQlkaXNwbGF5X3Rocm91Z2hwdXQocHJvZ3Jlc3MsIGJ5dGVfY291bnQpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAobGluZS5idWYsICJ1cGRhdGUiKSkKKwkJCXByb2dyZXNzX3Rlc3RfZm9yY2VfdXBkYXRlKCk7CisJCWVsc2UKKwkJCWRpZSgiaW52YWxpZCBpbnB1dDogJyVzJ1xuIiwgbGluZS5idWYpOworCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcmVhY2guYyBiL3QvaGVscGVyL3Rlc3QtcmVhY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDI3MjE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1yZWFjaC5jCkBAIC0wLDAgKzEsMTY4IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicmVmLWZpbHRlci5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAidGFnLmgiCisKK3N0YXRpYyB2b2lkIHByaW50X3NvcnRlZF9jb21taXRfaWRzKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJd2hpbGUgKGxpc3QpIHsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzLCBvaWRfdG9faGV4KCZsaXN0LT5pdGVtLT5vYmplY3Qub2lkKSk7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKworCXN0cmluZ19saXN0X3NvcnQoJnMpOworCisJZm9yIChpID0gMDsgaSA8IHMubnI7IGkrKykKKwkJcHJpbnRmKCIlc1xuIiwgcy5pdGVtc1tpXS5zdHJpbmcpOworCisJc3RyaW5nX2xpc3RfY2xlYXIoJnMsIDApOworfQorCitpbnQgY21kX19yZWFjaChpbnQgYWMsIGNvbnN0IGNoYXIgKiphdikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZF9BLCBvaWRfQjsKKwlzdHJ1Y3QgY29tbWl0ICpBLCAqQjsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKlgsICpZOworCXN0cnVjdCBvYmplY3RfYXJyYXkgWF9vYmogPSBPQkpFQ1RfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgY29tbWl0ICoqWF9hcnJheSwgKipZX2FycmF5OworCWludCBYX25yLCBYX2FsbG9jLCBZX25yLCBZX2FsbG9jOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJlcG9zaXRvcnkgKnIgPSB0aGVfcmVwb3NpdG9yeTsKKworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKworCWlmIChhYyA8IDIpCisJCWV4aXQoMSk7CisKKwlBID0gQiA9IE5VTEw7CisJWCA9IFkgPSBOVUxMOworCVhfbnIgPSBZX25yID0gMDsKKwlYX2FsbG9jID0gWV9hbGxvYyA9IDE2OworCUFMTE9DX0FSUkFZKFhfYXJyYXksIFhfYWxsb2MpOworCUFMTE9DX0FSUkFZKFlfYXJyYXksIFlfYWxsb2MpOworCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZidWYsIHN0ZGluKSAhPSBFT0YpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBvYmplY3QgKm9yaWc7CisJCXN0cnVjdCBvYmplY3QgKnBlZWxlZDsKKwkJc3RydWN0IGNvbW1pdCAqYzsKKwkJaWYgKGJ1Zi5sZW4gPCAzKQorCQkJY29udGludWU7CisKKwkJaWYgKGdldF9vaWRfY29tbWl0dGlzaChidWYuYnVmICsgMiwgJm9pZCkpCisJCQlkaWUoImZhaWxlZCB0byByZXNvbHZlICVzIiwgYnVmLmJ1ZiArIDIpOworCisJCW9yaWcgPSBwYXJzZV9vYmplY3QociwgJm9pZCk7CisJCXBlZWxlZCA9IGRlcmVmX3RhZ19ub3ZlcmlmeShvcmlnKTsKKworCQlpZiAoIXBlZWxlZCkKKwkJCWRpZSgiZmFpbGVkIHRvIGxvYWQgY29tbWl0IGZvciBpbnB1dCAlcyByZXN1bHRpbmcgaW4gb2lkICVzXG4iLAorCQkJICAgIGJ1Zi5idWYsIG9pZF90b19oZXgoJm9pZCkpOworCisJCWMgPSBvYmplY3RfYXNfdHlwZShyLCBwZWVsZWQsIE9CSl9DT01NSVQsIDApOworCisJCWlmICghYykKKwkJCWRpZSgiZmFpbGVkIHRvIGxvYWQgY29tbWl0IGZvciBpbnB1dCAlcyByZXN1bHRpbmcgaW4gb2lkICVzXG4iLAorCQkJICAgIGJ1Zi5idWYsIG9pZF90b19oZXgoJm9pZCkpOworCisJCXN3aXRjaCAoYnVmLmJ1ZlswXSkgeworCQkJY2FzZSAnQSc6CisJCQkJb2lkY3B5KCZvaWRfQSwgJm9pZCk7CisJCQkJQSA9IGM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ0InOgorCQkJCW9pZGNweSgmb2lkX0IsICZvaWQpOworCQkJCUIgPSBjOworCQkJCWJyZWFrOworCisJCQljYXNlICdYJzoKKwkJCQljb21taXRfbGlzdF9pbnNlcnQoYywgJlgpOworCQkJCUFMTE9DX0dST1coWF9hcnJheSwgWF9uciArIDEsIFhfYWxsb2MpOworCQkJCVhfYXJyYXlbWF9ucisrXSA9IGM7CisJCQkJYWRkX29iamVjdF9hcnJheShvcmlnLCBOVUxMLCAmWF9vYmopOworCQkJCWJyZWFrOworCisJCQljYXNlICdZJzoKKwkJCQljb21taXRfbGlzdF9pbnNlcnQoYywgJlkpOworCQkJCUFMTE9DX0dST1coWV9hcnJheSwgWV9uciArIDEsIFlfYWxsb2MpOworCQkJCVlfYXJyYXlbWV9ucisrXSA9IGM7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJZGllKCJ1bmV4cGVjdGVkIHN0YXJ0IG9mIGxpbmU6ICVjIiwgYnVmLmJ1ZlswXSk7CisJCX0KKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlpZiAoIXN0cmNtcChhdlsxXSwgInJlZl9uZXdlciIpKQorCQlwcmludGYoIiVzKEEsQik6JWRcbiIsIGF2WzFdLCByZWZfbmV3ZXIoJm9pZF9BLCAmb2lkX0IpKTsKKwllbHNlIGlmICghc3RyY21wKGF2WzFdLCAiaW5fbWVyZ2VfYmFzZXMiKSkKKwkJcHJpbnRmKCIlcyhBLEIpOiVkXG4iLCBhdlsxXSwgaW5fbWVyZ2VfYmFzZXMoQSwgQikpOworCWVsc2UgaWYgKCFzdHJjbXAoYXZbMV0sICJpc19kZXNjZW5kYW50X29mIikpCisJCXByaW50ZigiJXMoQSxYKTolZFxuIiwgYXZbMV0sIGlzX2Rlc2NlbmRhbnRfb2YoQSwgWCkpOworCWVsc2UgaWYgKCFzdHJjbXAoYXZbMV0sICJnZXRfbWVyZ2VfYmFzZXNfbWFueSIpKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IGdldF9tZXJnZV9iYXNlc19tYW55KEEsIFhfbnIsIFhfYXJyYXkpOworCQlwcmludGYoIiVzKEEsWCk6XG4iLCBhdlsxXSk7CisJCXByaW50X3NvcnRlZF9jb21taXRfaWRzKGxpc3QpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhdlsxXSwgInJlZHVjZV9oZWFkcyIpKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IHJlZHVjZV9oZWFkcyhYKTsKKwkJcHJpbnRmKCIlcyhYKTpcbiIsIGF2WzFdKTsKKwkJcHJpbnRfc29ydGVkX2NvbW1pdF9pZHMobGlzdCk7CisJfSBlbHNlIGlmICghc3RyY21wKGF2WzFdLCAiY2FuX2FsbF9mcm9tX3JlYWNoIikpIHsKKwkJcHJpbnRmKCIlcyhYLFkpOiVkXG4iLCBhdlsxXSwgY2FuX2FsbF9mcm9tX3JlYWNoKFgsIFksIDEpKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXZbMV0sICJjYW5fYWxsX2Zyb21fcmVhY2hfd2l0aF9mbGFnIikpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICppdGVyID0gWTsKKworCQl3aGlsZSAoaXRlcikgeworCQkJaXRlci0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IDI7CisJCQlpdGVyID0gaXRlci0+bmV4dDsKKwkJfQorCisJCXByaW50ZigiJXMoWCxfLF8sMCwwKTolZFxuIiwgYXZbMV0sIGNhbl9hbGxfZnJvbV9yZWFjaF93aXRoX2ZsYWcoJlhfb2JqLCAyLCA0LCAwLCAwKSk7CisJfSBlbHNlIGlmICghc3RyY21wKGF2WzFdLCAiY29tbWl0X2NvbnRhaW5zIikpIHsKKwkJc3RydWN0IHJlZl9maWx0ZXIgZmlsdGVyOworCQlzdHJ1Y3QgY29udGFpbnNfY2FjaGUgY2FjaGU7CisJCWluaXRfY29udGFpbnNfY2FjaGUoJmNhY2hlKTsKKworCQlpZiAoYWMgPiAyICYmICFzdHJjbXAoYXZbMl0sICItLXRhZyIpKQorCQkJZmlsdGVyLndpdGhfY29tbWl0X3RhZ19hbGdvID0gMTsKKwkJZWxzZQorCQkJZmlsdGVyLndpdGhfY29tbWl0X3RhZ19hbGdvID0gMDsKKworCQlwcmludGYoIiVzKF8sQSxYLF8pOiVkXG4iLCBhdlsxXSwgY29tbWl0X2NvbnRhaW5zKCZmaWx0ZXIsIEEsIFgsICZjYWNoZSkpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhdlsxXSwgImdldF9yZWFjaGFibGVfc3Vic2V0IikpIHsKKwkJY29uc3QgaW50IHJlYWNoYWJsZV9mbGFnID0gMTsKKwkJaW50IGksIGNvdW50ID0gMDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpjdXJyZW50OworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBnZXRfcmVhY2hhYmxlX3N1YnNldChYX2FycmF5LCBYX25yLAorCQkJCQkJCQlZX2FycmF5LCBZX25yLAorCQkJCQkJCQlyZWFjaGFibGVfZmxhZyk7CisJCXByaW50ZigiZ2V0X3JlYWNoYWJsZV9zdWJzZXQoWCxZKVxuIik7CisJCWZvciAoY3VycmVudCA9IGxpc3Q7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KSB7CisJCQlpZiAoIShsaXN0LT5pdGVtLT5vYmplY3QuZmxhZ3MgJiByZWFjaGFibGVfZmxhZykpCisJCQkJZGllKF8oImNvbW1pdCAlcyBpcyBub3QgbWFya2VkIHJlYWNoYWJsZSIpLAorCQkJCSAgICBvaWRfdG9faGV4KCZsaXN0LT5pdGVtLT5vYmplY3Qub2lkKSk7CisJCQljb3VudCsrOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBZX25yOyBpKyspIHsKKwkJCWlmIChZX2FycmF5W2ldLT5vYmplY3QuZmxhZ3MgJiByZWFjaGFibGVfZmxhZykKKwkJCQljb3VudC0tOworCQl9CisKKwkJaWYgKGNvdW50IDwgMCkKKwkJCWRpZShfKCJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiKSk7CisKKwkJcHJpbnRfc29ydGVkX2NvbW1pdF9pZHMobGlzdCk7CisJfQorCisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcmVhZC1jYWNoZS5jIGIvdC9oZWxwZXIvdGVzdC1yZWFkLWNhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ0OTc3YQotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtcmVhZC1jYWNoZS5jCkBAIC0wLDAgKzEsMzYgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorCitpbnQgY21kX19yZWFkX2NhY2hlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaSwgY250ID0gMTsKKwljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKKworCWlmIChhcmdjID4gMSAmJiBza2lwX3ByZWZpeChhcmd2WzFdLCAiLS1wcmludC1hbmQtcmVmcmVzaD0iLCAmbmFtZSkpIHsKKwkJYXJnYy0tOworCQlhcmd2Kys7CisJfQorCisJaWYgKGFyZ2MgPT0gMikKKwkJY250ID0gc3RydG9sKGFyZ3ZbMV0sIE5VTEwsIDApOworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCXJlYWRfY2FjaGUoKTsKKwkJaWYgKG5hbWUpIHsKKwkJCWludCBwb3M7CisKKwkJCXJlZnJlc2hfaW5kZXgoJnRoZV9pbmRleCwgUkVGUkVTSF9RVUlFVCwKKwkJCQkgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCXBvcyA9IGluZGV4X25hbWVfcG9zKCZ0aGVfaW5kZXgsIG5hbWUsIHN0cmxlbihuYW1lKSk7CisJCQlpZiAocG9zIDwgMCkKKwkJCQlkaWUoIiVzIG5vdCBpbiBpbmRleCIsIG5hbWUpOworCQkJcHJpbnRmKCIlcyBpcyVzIHVwIHRvIGRhdGVcbiIsIG5hbWUsCisJCQkgICAgICAgY2VfdXB0b2RhdGUodGhlX2luZGV4LmNhY2hlW3Bvc10pID8gIiIgOiAiIG5vdCIpOworCQkJd3JpdGVfZmlsZShuYW1lLCAiJWRcbiIsIGkpOworCQl9CisJCWRpc2NhcmRfY2FjaGUoKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXJlYWQtZ3JhcGguYyBiL3QvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMGM5NjIKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXJlYWQtZ3JhcGguYwpAQCAtMCwwICsxLDQ2IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisKK2ludCBjbWRfX3JlYWRfZ3JhcGgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBjb21taXRfZ3JhcGggKmdyYXBoID0gTlVMTDsKKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCW9kYiA9IHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzLT5vZGI7CisKKwlncmFwaCA9IHJlYWRfY29tbWl0X2dyYXBoX29uZSh0aGVfcmVwb3NpdG9yeSwgb2RiKTsKKwlpZiAoIWdyYXBoKQorCQlyZXR1cm4gMTsKKworCisJcHJpbnRmKCJoZWFkZXI6ICUwOHggJWQgJWQgJWQgJWRcbiIsCisJCW50b2hsKCoodWludDMyX3QqKWdyYXBoLT5kYXRhKSwKKwkJKih1bnNpZ25lZCBjaGFyKikoZ3JhcGgtPmRhdGEgKyA0KSwKKwkJKih1bnNpZ25lZCBjaGFyKikoZ3JhcGgtPmRhdGEgKyA1KSwKKwkJKih1bnNpZ25lZCBjaGFyKikoZ3JhcGgtPmRhdGEgKyA2KSwKKwkJKih1bnNpZ25lZCBjaGFyKikoZ3JhcGgtPmRhdGEgKyA3KSk7CisJcHJpbnRmKCJudW1fY29tbWl0czogJXVcbiIsIGdyYXBoLT5udW1fY29tbWl0cyk7CisJcHJpbnRmKCJjaHVua3M6Iik7CisKKwlpZiAoZ3JhcGgtPmNodW5rX29pZF9mYW5vdXQpCisJCXByaW50ZigiIG9pZF9mYW5vdXQiKTsKKwlpZiAoZ3JhcGgtPmNodW5rX29pZF9sb29rdXApCisJCXByaW50ZigiIG9pZF9sb29rdXAiKTsKKwlpZiAoZ3JhcGgtPmNodW5rX2NvbW1pdF9kYXRhKQorCQlwcmludGYoIiBjb21taXRfbWV0YWRhdGEiKTsKKwlpZiAoZ3JhcGgtPmNodW5rX2V4dHJhX2VkZ2VzKQorCQlwcmludGYoIiBleHRyYV9lZGdlcyIpOworCWlmIChncmFwaC0+Y2h1bmtfYmxvb21faW5kZXhlcykKKwkJcHJpbnRmKCIgYmxvb21faW5kZXhlcyIpOworCWlmIChncmFwaC0+Y2h1bmtfYmxvb21fZGF0YSkKKwkJcHJpbnRmKCIgYmxvb21fZGF0YSIpOworCXByaW50ZigiXG4iKTsKKworCVVOTEVBSyhncmFwaCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcmVhZC1taWR4LmMgYi90L2hlbHBlci90ZXN0LXJlYWQtbWlkeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMWI1ODYKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXJlYWQtbWlkeC5jCkBAIC0wLDAgKzEsNTEgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm1pZHguaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisKK3N0YXRpYyBpbnQgcmVhZF9taWR4X2ZpbGUoY29uc3QgY2hhciAqb2JqZWN0X2RpcikKK3sKKwl1aW50MzJfdCBpOworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptID0gbG9hZF9tdWx0aV9wYWNrX2luZGV4KG9iamVjdF9kaXIsIDEpOworCisJaWYgKCFtKQorCQlyZXR1cm4gMTsKKworCXByaW50ZigiaGVhZGVyOiAlMDh4ICVkICVkICVkXG4iLAorCSAgICAgICBtLT5zaWduYXR1cmUsCisJICAgICAgIG0tPnZlcnNpb24sCisJICAgICAgIG0tPm51bV9jaHVua3MsCisJICAgICAgIG0tPm51bV9wYWNrcyk7CisKKwlwcmludGYoImNodW5rczoiKTsKKworCWlmIChtLT5jaHVua19wYWNrX25hbWVzKQorCQlwcmludGYoIiBwYWNrLW5hbWVzIik7CisJaWYgKG0tPmNodW5rX29pZF9mYW5vdXQpCisJCXByaW50ZigiIG9pZC1mYW5vdXQiKTsKKwlpZiAobS0+Y2h1bmtfb2lkX2xvb2t1cCkKKwkJcHJpbnRmKCIgb2lkLWxvb2t1cCIpOworCWlmIChtLT5jaHVua19vYmplY3Rfb2Zmc2V0cykKKwkJcHJpbnRmKCIgb2JqZWN0LW9mZnNldHMiKTsKKwlpZiAobS0+Y2h1bmtfbGFyZ2Vfb2Zmc2V0cykKKwkJcHJpbnRmKCIgbGFyZ2Utb2Zmc2V0cyIpOworCisJcHJpbnRmKCJcbm51bV9vYmplY3RzOiAlZFxuIiwgbS0+bnVtX29iamVjdHMpOworCisJcHJpbnRmKCJwYWNrczpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fcGFja3M7IGkrKykKKwkJcHJpbnRmKCIlc1xuIiwgbS0+cGFja19uYW1lc1tpXSk7CisKKwlwcmludGYoIm9iamVjdC1kaXI6ICVzXG4iLCBtLT5vYmplY3RfZGlyKTsKKworCXJldHVybiAwOworfQorCitpbnQgY21kX19yZWFkX21pZHgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWlmIChhcmdjICE9IDIpCisJCXVzYWdlKCJyZWFkLW1pZHggPG9iamVjdC1kaXI+Iik7CisKKwlyZXR1cm4gcmVhZF9taWR4X2ZpbGUoYXJndlsxXSk7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXJlZi1zdG9yZS5jIGIvdC9oZWxwZXIvdGVzdC1yZWYtc3RvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTlmYzAwCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1yZWYtc3RvcmUuYwpAQCAtMCwwICsxLDI5OSBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgIndvcmt0cmVlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqbm90bnVsbChjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKCFhcmcpCisJCWRpZSgiJXMgcmVxdWlyZWQiLCBuYW1lKTsKKwlyZXR1cm4gYXJnOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGFyZ19mbGFncyhjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIGF0b2kobm90bnVsbChhcmcsIG5hbWUpKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKipnZXRfc3RvcmUoY29uc3QgY2hhciAqKmFyZ3YsIHN0cnVjdCByZWZfc3RvcmUgKipyZWZzKQoreworCWNvbnN0IGNoYXIgKmdpdGRpcjsKKworCWlmICghYXJndlswXSkgeworCQlkaWUoInJlZiBzdG9yZSByZXF1aXJlZCIpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAibWFpbiIpKSB7CisJCSpyZWZzID0gZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZ3ZbMF0sICJzdWJtb2R1bGU6IiwgJmdpdGRpcikpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQlpbnQgcmV0OworCisJCXJldCA9IHN0cmJ1Zl9naXRfcGF0aF9zdWJtb2R1bGUoJnNiLCBnaXRkaXIsICJvYmplY3RzLyIpOworCQlpZiAocmV0KQorCQkJZGllKCJzdHJidWZfZ2l0X3BhdGhfc3VibW9kdWxlIGZhaWxlZDogJWQiLCByZXQpOworCQlhZGRfdG9fYWx0ZXJuYXRlc19tZW1vcnkoc2IuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCQkqcmVmcyA9IGdldF9zdWJtb2R1bGVfcmVmX3N0b3JlKGdpdGRpcik7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmd2WzBdLCAid29ya3RyZWU6IiwgJmdpdGRpcikpIHsKKwkJc3RydWN0IHdvcmt0cmVlICoqcCwgKip3b3JrdHJlZXMgPSBnZXRfd29ya3RyZWVzKDApOworCisJCWZvciAocCA9IHdvcmt0cmVlczsgKnA7IHArKykgeworCQkJc3RydWN0IHdvcmt0cmVlICp3dCA9ICpwOworCisJCQlpZiAoIXd0LT5pZCkgeworCQkJCS8qIHNwZWNpYWwgY2FzZSBmb3IgbWFpbiB3b3JrdHJlZSAqLworCQkJCWlmICghc3RyY21wKGdpdGRpciwgIm1haW4iKSkKKwkJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoZ2l0ZGlyLCB3dC0+aWQpKQorCQkJCWJyZWFrOworCQl9CisJCWlmICghKnApCisJCQlkaWUoIm5vIHN1Y2ggd29ya3RyZWU6ICVzIiwgZ2l0ZGlyKTsKKworCQkqcmVmcyA9IGdldF93b3JrdHJlZV9yZWZfc3RvcmUoKnApOworCX0gZWxzZQorCQlkaWUoInVua25vd24gYmFja2VuZCAlcyIsIGFyZ3ZbMF0pOworCisJaWYgKCEqcmVmcykKKwkJZGllKCJubyByZWYgc3RvcmUiKTsKKworCS8qIGNvbnN1bWUgc3RvcmUtc3BlY2lmaWMgb3B0aW9uYWwgYXJndW1lbnRzIGlmIG5lZWRlZCAqLworCisJcmV0dXJuIGFyZ3YgKyAxOworfQorCisKK3N0YXRpYyBpbnQgY21kX3BhY2tfcmVmcyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBhcmdfZmxhZ3MoKmFyZ3YrKywgImZsYWdzIik7CisKKwlyZXR1cm4gcmVmc19wYWNrX3JlZnMocmVmcywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGNtZF9wZWVsX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpyZWZuYW1lID0gbm90bnVsbCgqYXJndisrLCAicmVmbmFtZSIpOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCByZXQ7CisKKwlyZXQgPSByZWZzX3BlZWxfcmVmKHJlZnMsIHJlZm5hbWUsICZvaWQpOworCWlmICghcmV0KQorCQlwdXRzKG9pZF90b19oZXgoJm9pZCkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY21kX2NyZWF0ZV9zeW1yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IG5vdG51bGwoKmFyZ3YrKywgInJlZm5hbWUiKTsKKwljb25zdCBjaGFyICp0YXJnZXQgPSBub3RudWxsKCphcmd2KyssICJ0YXJnZXQiKTsKKwljb25zdCBjaGFyICpsb2dtc2cgPSAqYXJndisrOworCisJcmV0dXJuIHJlZnNfY3JlYXRlX3N5bXJlZihyZWZzLCByZWZuYW1lLCB0YXJnZXQsIGxvZ21zZyk7Cit9CisKK3N0YXRpYyBpbnQgY21kX2RlbGV0ZV9yZWZzKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IGFyZ19mbGFncygqYXJndisrLCAiZmxhZ3MiKTsKKwljb25zdCBjaGFyICptc2cgPSAqYXJndisrOworCXN0cnVjdCBzdHJpbmdfbGlzdCByZWZuYW1lcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisKKwl3aGlsZSAoKmFyZ3YpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVmbmFtZXMsICphcmd2KyspOworCisJcmV0dXJuIHJlZnNfZGVsZXRlX3JlZnMocmVmcywgbXNnLCAmcmVmbmFtZXMsIGZsYWdzKTsKK30KKworc3RhdGljIGludCBjbWRfcmVuYW1lX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpvbGRyZWYgPSBub3RudWxsKCphcmd2KyssICJvbGRyZWYiKTsKKwljb25zdCBjaGFyICpuZXdyZWYgPSBub3RudWxsKCphcmd2KyssICJuZXdyZWYiKTsKKwljb25zdCBjaGFyICpsb2dtc2cgPSAqYXJndisrOworCisJcmV0dXJuIHJlZnNfcmVuYW1lX3JlZihyZWZzLCBvbGRyZWYsIG5ld3JlZiwgbG9nbXNnKTsKK30KKworc3RhdGljIGludCBlYWNoX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJcHJpbnRmKCIlcyAlcyAweCV4XG4iLCBvaWRfdG9faGV4KG9pZCksIHJlZm5hbWUsIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbWRfZm9yX2VhY2hfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnByZWZpeCA9IG5vdG51bGwoKmFyZ3YrKywgInByZWZpeCIpOworCisJcmV0dXJuIHJlZnNfZm9yX2VhY2hfcmVmX2luKHJlZnMsIHByZWZpeCwgZWFjaF9yZWYsIE5VTEwpOworfQorCitzdGF0aWMgaW50IGNtZF9yZXNvbHZlX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljb25zdCBjaGFyICpyZWZuYW1lID0gbm90bnVsbCgqYXJndisrLCAicmVmbmFtZSIpOworCWludCByZXNvbHZlX2ZsYWdzID0gYXJnX2ZsYWdzKCphcmd2KyssICJyZXNvbHZlLWZsYWdzIik7CisJaW50IGZsYWdzOworCWNvbnN0IGNoYXIgKnJlZjsKKworCXJlZiA9IHJlZnNfcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZnMsIHJlZm5hbWUsIHJlc29sdmVfZmxhZ3MsCisJCQkJICAgICAgJm9pZCwgJmZsYWdzKTsKKwlwcmludGYoIiVzICVzIDB4JXhcbiIsIG9pZF90b19oZXgoJm9pZCksIHJlZiA/IHJlZiA6ICIobnVsbCkiLCBmbGFncyk7CisJcmV0dXJuIHJlZiA/IDAgOiAxOworfQorCitzdGF0aWMgaW50IGNtZF92ZXJpZnlfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnJlZm5hbWUgPSBub3RudWxsKCphcmd2KyssICJyZWZuYW1lIik7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVmc192ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGUocmVmcywgcmVmbmFtZSwgTlVMTCwgTlVMTCwgJmVycik7CisJaWYgKGVyci5sZW4pCisJCXB1dHMoZXJyLmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbWRfZm9yX2VhY2hfcmVmbG9nKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXJldHVybiByZWZzX2Zvcl9lYWNoX3JlZmxvZyhyZWZzLCBlYWNoX3JlZiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgZWFjaF9yZWZsb2coc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCwgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmNvbW1pdHRlciwgdGltZXN0YW1wX3QgdGltZXN0YW1wLAorCQkgICAgICAgaW50IHR6LCBjb25zdCBjaGFyICptc2csIHZvaWQgKmNiX2RhdGEpCit7CisJcHJpbnRmKCIlcyAlcyAlcyAlIlBSSXRpbWUiICVkICVzXG4iLAorCSAgICAgICBvaWRfdG9faGV4KG9sZF9vaWQpLCBvaWRfdG9faGV4KG5ld19vaWQpLAorCSAgICAgICBjb21taXR0ZXIsIHRpbWVzdGFtcCwgdHosIG1zZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21kX2Zvcl9lYWNoX3JlZmxvZ19lbnQoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IG5vdG51bGwoKmFyZ3YrKywgInJlZm5hbWUiKTsKKworCXJldHVybiByZWZzX2Zvcl9lYWNoX3JlZmxvZ19lbnQocmVmcywgcmVmbmFtZSwgZWFjaF9yZWZsb2csIHJlZnMpOworfQorCitzdGF0aWMgaW50IGNtZF9mb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2Uoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IG5vdG51bGwoKmFyZ3YrKywgInJlZm5hbWUiKTsKKworCXJldHVybiByZWZzX2Zvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZShyZWZzLCByZWZuYW1lLCBlYWNoX3JlZmxvZywgcmVmcyk7Cit9CisKK3N0YXRpYyBpbnQgY21kX3JlZmxvZ19leGlzdHMoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IG5vdG51bGwoKmFyZ3YrKywgInJlZm5hbWUiKTsKKworCXJldHVybiAhcmVmc19yZWZsb2dfZXhpc3RzKHJlZnMsIHJlZm5hbWUpOworfQorCitzdGF0aWMgaW50IGNtZF9jcmVhdGVfcmVmbG9nKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnJlZm5hbWUgPSBub3RudWxsKCphcmd2KyssICJyZWZuYW1lIik7CisJaW50IGZvcmNlX2NyZWF0ZSA9IGFyZ19mbGFncygqYXJndisrLCAiZm9yY2UtY3JlYXRlIik7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVmc19jcmVhdGVfcmVmbG9nKHJlZnMsIHJlZm5hbWUsIGZvcmNlX2NyZWF0ZSwgJmVycik7CisJaWYgKGVyci5sZW4pCisJCXB1dHMoZXJyLmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbWRfZGVsZXRlX3JlZmxvZyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpyZWZuYW1lID0gbm90bnVsbCgqYXJndisrLCAicmVmbmFtZSIpOworCisJcmV0dXJuIHJlZnNfZGVsZXRlX3JlZmxvZyhyZWZzLCByZWZuYW1lKTsKK30KKworc3RhdGljIGludCBjbWRfcmVmbG9nX2V4cGlyZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlkaWUoIm5vdCBzdXBwb3J0ZWQgeWV0Iik7Cit9CisKK3N0YXRpYyBpbnQgY21kX2RlbGV0ZV9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqbXNnID0gbm90bnVsbCgqYXJndisrLCAibXNnIik7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IG5vdG51bGwoKmFyZ3YrKywgInJlZm5hbWUiKTsKKwljb25zdCBjaGFyICpzaGExX2J1ZiA9IG5vdG51bGwoKmFyZ3YrKywgIm9sZC1zaGExIik7CisJdW5zaWduZWQgaW50IGZsYWdzID0gYXJnX2ZsYWdzKCphcmd2KyssICJmbGFncyIpOworCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZDsKKworCWlmIChnZXRfb2lkX2hleChzaGExX2J1ZiwgJm9sZF9vaWQpKQorCQlkaWUoIm5vdCBzaGEtMSIpOworCisJcmV0dXJuIHJlZnNfZGVsZXRlX3JlZihyZWZzLCBtc2csIHJlZm5hbWUsICZvbGRfb2lkLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgY21kX3VwZGF0ZV9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqbXNnID0gbm90bnVsbCgqYXJndisrLCAibXNnIik7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IG5vdG51bGwoKmFyZ3YrKywgInJlZm5hbWUiKTsKKwljb25zdCBjaGFyICpuZXdfc2hhMV9idWYgPSBub3RudWxsKCphcmd2KyssICJuZXctc2hhMSIpOworCWNvbnN0IGNoYXIgKm9sZF9zaGExX2J1ZiA9IG5vdG51bGwoKmFyZ3YrKywgIm9sZC1zaGExIik7CisJdW5zaWduZWQgaW50IGZsYWdzID0gYXJnX2ZsYWdzKCphcmd2KyssICJmbGFncyIpOworCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG5ld19vaWQ7CisKKwlpZiAoZ2V0X29pZF9oZXgob2xkX3NoYTFfYnVmLCAmb2xkX29pZCkgfHwKKwkgICAgZ2V0X29pZF9oZXgobmV3X3NoYTFfYnVmLCAmbmV3X29pZCkpCisJCWRpZSgibm90IHNoYS0xIik7CisKKwlyZXR1cm4gcmVmc191cGRhdGVfcmVmKHJlZnMsIG1zZywgcmVmbmFtZSwKKwkJCSAgICAgICAmbmV3X29pZCwgJm9sZF9vaWQsCisJCQkgICAgICAgZmxhZ3MsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworfQorCitzdHJ1Y3QgY29tbWFuZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKCpmdW5jKShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICoqYXJndik7Cit9OworCitzdGF0aWMgc3RydWN0IGNvbW1hbmQgY29tbWFuZHNbXSA9IHsKKwl7ICJwYWNrLXJlZnMiLCBjbWRfcGFja19yZWZzIH0sCisJeyAicGVlbC1yZWYiLCBjbWRfcGVlbF9yZWYgfSwKKwl7ICJjcmVhdGUtc3ltcmVmIiwgY21kX2NyZWF0ZV9zeW1yZWYgfSwKKwl7ICJkZWxldGUtcmVmcyIsIGNtZF9kZWxldGVfcmVmcyB9LAorCXsgInJlbmFtZS1yZWYiLCBjbWRfcmVuYW1lX3JlZiB9LAorCXsgImZvci1lYWNoLXJlZiIsIGNtZF9mb3JfZWFjaF9yZWYgfSwKKwl7ICJyZXNvbHZlLXJlZiIsIGNtZF9yZXNvbHZlX3JlZiB9LAorCXsgInZlcmlmeS1yZWYiLCBjbWRfdmVyaWZ5X3JlZiB9LAorCXsgImZvci1lYWNoLXJlZmxvZyIsIGNtZF9mb3JfZWFjaF9yZWZsb2cgfSwKKwl7ICJmb3ItZWFjaC1yZWZsb2ctZW50IiwgY21kX2Zvcl9lYWNoX3JlZmxvZ19lbnQgfSwKKwl7ICJmb3ItZWFjaC1yZWZsb2ctZW50LXJldmVyc2UiLCBjbWRfZm9yX2VhY2hfcmVmbG9nX2VudF9yZXZlcnNlIH0sCisJeyAicmVmbG9nLWV4aXN0cyIsIGNtZF9yZWZsb2dfZXhpc3RzIH0sCisJeyAiY3JlYXRlLXJlZmxvZyIsIGNtZF9jcmVhdGVfcmVmbG9nIH0sCisJeyAiZGVsZXRlLXJlZmxvZyIsIGNtZF9kZWxldGVfcmVmbG9nIH0sCisJeyAicmVmbG9nLWV4cGlyZSIsIGNtZF9yZWZsb2dfZXhwaXJlIH0sCisJLyoKKwkgKiBiYWNrZW5kIHRyYW5zYWN0aW9uIGZ1bmN0aW9ucyBjYW4ndCBiZSB0ZXN0ZWQgc2VwYXJhdGVseQorCSAqLworCXsgImRlbGV0ZS1yZWYiLCBjbWRfZGVsZXRlX3JlZiB9LAorCXsgInVwZGF0ZS1yZWYiLCBjbWRfdXBkYXRlX3JlZiB9LAorCXsgTlVMTCwgTlVMTCB9Cit9OworCitpbnQgY21kX19yZWZfc3RvcmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCByZWZfc3RvcmUgKnJlZnM7CisJY29uc3QgY2hhciAqZnVuYzsKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJYXJndiA9IGdldF9zdG9yZShhcmd2ICsgMSwgJnJlZnMpOworCisJZnVuYyA9ICphcmd2Kys7CisJaWYgKCFmdW5jKQorCQlkaWUoInJlZiBmdW5jdGlvbiByZXF1aXJlZCIpOworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZC0+bmFtZTsgY21kKyspIHsKKwkJaWYgKCFzdHJjbXAoZnVuYywgY21kLT5uYW1lKSkKKwkJCXJldHVybiBjbWQtPmZ1bmMocmVmcywgYXJndik7CisJfQorCWRpZSgidW5rbm93biBmdW5jdGlvbiAlcyIsIGZ1bmMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1yZWdleC5jIGIvdC9oZWxwZXIvdGVzdC1yZWdleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMjg0Y2MKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXJlZ2V4LmMKQEAgLTAsMCArMSw3NiBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImdldHRleHQuaCIKKworc3RydWN0IHJlZ19mbGFnIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBmbGFnOworfTsKKworc3RhdGljIHN0cnVjdCByZWdfZmxhZyByZWdfZmxhZ3NbXSA9IHsKKwl7ICJFWFRFTkRFRCIsCSBSRUdfRVhURU5ERUQJfSwKKwl7ICJORVdMSU5FIiwJIFJFR19ORVdMSU5FCX0sCisJeyAiSUNBU0UiLAkgUkVHX0lDQVNFCX0sCisJeyAiTk9UQk9MIiwJIFJFR19OT1RCT0wJfSwKKyNpZmRlZiBSRUdfU1RBUlRFTkQKKwl7ICJTVEFSVEVORCIsCSBSRUdfU1RBUlRFTkQJfSwKKyNlbmRpZgorCXsgTlVMTCwgMCB9Cit9OworCitzdGF0aWMgaW50IHRlc3RfcmVnZXhfYnVnKHZvaWQpCit7CisJY2hhciAqcGF0ID0gIltePXt9IFx0XSsiOworCWNoYXIgKnN0ciA9ICI9e31cbmZyZWQiOworCXJlZ2V4X3QgcjsKKwlyZWdtYXRjaF90IG1bMV07CisKKwlpZiAocmVnY29tcCgmciwgcGF0LCBSRUdfRVhURU5ERUQgfCBSRUdfTkVXTElORSkpCisJCWRpZSgiZmFpbGVkIHJlZ2NvbXAoKSBmb3IgcGF0dGVybiAnJXMnIiwgcGF0KTsKKwlpZiAocmVnZXhlYygmciwgc3RyLCAxLCBtLCAwKSkKKwkJZGllKCJubyBtYXRjaCBvZiBwYXR0ZXJuICclcycgdG8gc3RyaW5nICclcyciLCBwYXQsIHN0cik7CisKKwkvKiBodHRwOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTM5NTcgICovCisJaWYgKG1bMF0ucm1fc28gPT0gMykgLyogbWF0Y2hlcyAnXG4nIHdoZW4gaXQgc2hvdWxkIG5vdCAqLworCQlkaWUoInJlZ2V4IGJ1ZyBjb25maXJtZWQ6IHJlLWJ1aWxkIGdpdCB3aXRoIE5PX1JFR0VYPTEiKTsKKworCXJldHVybiAwOworfQorCitpbnQgY21kX19yZWdleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqcGF0OworCWNvbnN0IGNoYXIgKnN0cjsKKwlpbnQgZmxhZ3MgPSAwOworCXJlZ2V4X3QgcjsKKwlyZWdtYXRjaF90IG1bMV07CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi0tYnVnIikpCisJCXJldHVybiB0ZXN0X3JlZ2V4X2J1ZygpOworCWVsc2UgaWYgKGFyZ2MgPCAzKQorCQl1c2FnZSgidGVzdC10b29sIHJlZ2V4IC0tYnVnXG4iCisJCSAgICAgICJ0ZXN0LXRvb2wgcmVnZXggPHBhdHRlcm4+IDxzdHJpbmc+IFs8b3B0aW9ucz5dIik7CisKKwlhcmd2Kys7CisJcGF0ID0gKmFyZ3YrKzsKKwlzdHIgPSAqYXJndisrOworCXdoaWxlICgqYXJndikgeworCQlzdHJ1Y3QgcmVnX2ZsYWcgKnJmOworCQlmb3IgKHJmID0gcmVnX2ZsYWdzOyByZi0+bmFtZTsgcmYrKykKKwkJCWlmICghc3RyY21wKCphcmd2LCByZi0+bmFtZSkpIHsKKwkJCQlmbGFncyB8PSByZi0+ZmxhZzsKKwkJCQlicmVhazsKKwkJCX0KKwkJaWYgKCFyZi0+bmFtZSkKKwkJCWRpZSgiZG8gbm90IHJlY29nbml6ZSAlcyIsICphcmd2KTsKKwkJYXJndisrOworCX0KKwlnaXRfc2V0dXBfZ2V0dGV4dCgpOworCisJaWYgKHJlZ2NvbXAoJnIsIHBhdCwgZmxhZ3MpKQorCQlkaWUoImZhaWxlZCByZWdjb21wKCkgZm9yIHBhdHRlcm4gJyVzJyIsIHBhdCk7CisJaWYgKHJlZ2V4ZWMoJnIsIHN0ciwgMSwgbSwgMCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXJlcG9zaXRvcnkuYyBiL3QvaGVscGVyL3Rlc3QtcmVwb3NpdG9yeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZjBlM2MKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXJlcG9zaXRvcnkuYwpAQCAtMCwwICsxLDEwMCBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LWdyYXBoLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKworc3RhdGljIHZvaWQgdGVzdF9wYXJzZV9jb21taXRfaW5fZ3JhcGgoY29uc3QgY2hhciAqZ2l0ZGlyLCBjb25zdCBjaGFyICp3b3JrdHJlZSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY29tbWl0X29pZCkKK3sKKwlzdHJ1Y3QgcmVwb3NpdG9yeSByOworCXN0cnVjdCBjb21taXQgKmM7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisKKwlzZXR1cF9naXRfZW52KGdpdGRpcik7CisKKwltZW1zZXQodGhlX3JlcG9zaXRvcnksIDAsIHNpemVvZigqdGhlX3JlcG9zaXRvcnkpKTsKKworCWlmIChyZXBvX2luaXQoJnIsIGdpdGRpciwgd29ya3RyZWUpKQorCQlkaWUoIkNvdWxkbid0IGluaXQgcmVwbyIpOworCisJcmVwb19zZXRfaGFzaF9hbGdvKHRoZV9yZXBvc2l0b3J5LCBoYXNoX2FsZ29fYnlfcHRyKHIuaGFzaF9hbGdvKSk7CisKKwljID0gbG9va3VwX2NvbW1pdCgmciwgY29tbWl0X29pZCk7CisKKwlpZiAoIXBhcnNlX2NvbW1pdF9pbl9ncmFwaCgmciwgYykpCisJCWRpZSgiQ291bGRuJ3QgcGFyc2UgY29tbWl0Iik7CisKKwlwcmludGYoIiUiUFJJdGltZSwgYy0+ZGF0ZSk7CisJZm9yIChwYXJlbnQgPSBjLT5wYXJlbnRzOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+bmV4dCkKKwkJcHJpbnRmKCIgJXMiLCBvaWRfdG9faGV4KCZwYXJlbnQtPml0ZW0tPm9iamVjdC5vaWQpKTsKKwlwcmludGYoIlxuIik7CisKKwlyZXBvX2NsZWFyKCZyKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9nZXRfY29tbWl0X3RyZWVfaW5fZ3JhcGgoY29uc3QgY2hhciAqZ2l0ZGlyLAorCQkJCQkgIGNvbnN0IGNoYXIgKndvcmt0cmVlLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmNvbW1pdF9vaWQpCit7CisJc3RydWN0IHJlcG9zaXRvcnkgcjsKKwlzdHJ1Y3QgY29tbWl0ICpjOworCXN0cnVjdCB0cmVlICp0cmVlOworCisJc2V0dXBfZ2l0X2VudihnaXRkaXIpOworCisJbWVtc2V0KHRoZV9yZXBvc2l0b3J5LCAwLCBzaXplb2YoKnRoZV9yZXBvc2l0b3J5KSk7CisKKwlpZiAocmVwb19pbml0KCZyLCBnaXRkaXIsIHdvcmt0cmVlKSkKKwkJZGllKCJDb3VsZG4ndCBpbml0IHJlcG8iKTsKKworCXJlcG9fc2V0X2hhc2hfYWxnbyh0aGVfcmVwb3NpdG9yeSwgaGFzaF9hbGdvX2J5X3B0cihyLmhhc2hfYWxnbykpOworCisJYyA9IGxvb2t1cF9jb21taXQoJnIsIGNvbW1pdF9vaWQpOworCisJLyoKKwkgKiBnZXRfY29tbWl0X3RyZWVfaW5fZ3JhcGggZG9lcyBub3QgYXV0b21hdGljYWxseSBwYXJzZSB0aGUgY29tbWl0LCBzbworCSAqIHBhcnNlIGl0IGZpcnN0LgorCSAqLworCWlmICghcGFyc2VfY29tbWl0X2luX2dyYXBoKCZyLCBjKSkKKwkJZGllKCJDb3VsZG4ndCBwYXJzZSBjb21taXQiKTsKKwl0cmVlID0gZ2V0X2NvbW1pdF90cmVlX2luX2dyYXBoKCZyLCBjKTsKKwlpZiAoIXRyZWUpCisJCWRpZSgiQ291bGRuJ3QgZ2V0IGNvbW1pdCB0cmVlIik7CisKKwlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KCZ0cmVlLT5vYmplY3Qub2lkKSk7CisKKwlyZXBvX2NsZWFyKCZyKTsKK30KKworaW50IGNtZF9fcmVwb3NpdG9yeShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IG5vbmdpdF9vayA9IDA7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0X29rKTsKKworCWlmIChhcmdjIDwgMikKKwkJZGllKCJtdXN0IGhhdmUgYXQgbGVhc3QgMiBhcmd1bWVudHMiKTsKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAicGFyc2VfY29tbWl0X2luX2dyYXBoIikpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWlmIChhcmdjIDwgNSkKKwkJCWRpZSgibm90IGVub3VnaCBhcmd1bWVudHMiKTsKKwkJaWYgKHBhcnNlX29pZF9oZXgoYXJndls0XSwgJm9pZCwgJmFyZ3ZbNF0pKQorCQkJZGllKCJjYW5ub3QgcGFyc2Ugb2lkICclcyciLCBhcmd2WzRdKTsKKwkJdGVzdF9wYXJzZV9jb21taXRfaW5fZ3JhcGgoYXJndlsyXSwgYXJndlszXSwgJm9pZCk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJnZXRfY29tbWl0X3RyZWVfaW5fZ3JhcGgiKSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJaWYgKGFyZ2MgPCA1KQorCQkJZGllKCJub3QgZW5vdWdoIGFyZ3VtZW50cyIpOworCQlpZiAocGFyc2Vfb2lkX2hleChhcmd2WzRdLCAmb2lkLCAmYXJndls0XSkpCisJCQlkaWUoImNhbm5vdCBwYXJzZSBvaWQgJyVzJyIsIGFyZ3ZbNF0pOworCQl0ZXN0X2dldF9jb21taXRfdHJlZV9pbl9ncmFwaChhcmd2WzJdLCBhcmd2WzNdLCAmb2lkKTsKKwl9IGVsc2UgeworCQlkaWUoInVucmVjb2duaXplZCAnJXMnIiwgYXJndlsxXSk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1yZXZpc2lvbi13YWxraW5nLmMgYi90L2hlbHBlci90ZXN0LXJldmlzaW9uLXdhbGtpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjViMmRiCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1yZXZpc2lvbi13YWxraW5nLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIHRlc3QtcmV2aXNpb24td2Fsa2luZy5jOiB0ZXN0IHJldmlzaW9uIHdhbGtpbmcgQVBJLgorICoKKyAqIChDKSAyMDEyIEhlaWtvIFZvaWd0IDxodm9pZ3RAaHZvaWd0Lm5ldD4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorCitzdGF0aWMgdm9pZCBwcmludF9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCWN0eC5kYXRlX21vZGUudHlwZSA9IERBVEVfTk9STUFMOworCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICIgJW0gJXMiLCAmc2IsICZjdHgpOworCXByaW50ZigiJXNcbiIsIHNiLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RhdGljIGludCBydW5fcmV2aXNpb25fd2Fsayh2b2lkKQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHtOVUxMLCAiLS1hbGwiLCBOVUxMfTsKKwlpbnQgYXJnYyA9IEFSUkFZX1NJWkUoYXJndikgLSAxOworCWludCBnb3RfcmV2aXNpb24gPSAwOworCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldiwgTlVMTCk7CisJc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsIE5VTEwpOworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldikpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXYpKSAhPSBOVUxMKSB7CisJCXByaW50X2NvbW1pdChjb21taXQpOworCQlnb3RfcmV2aXNpb24gPSAxOworCX0KKworCXJlc2V0X3JldmlzaW9uX3dhbGsoKTsKKwlyZXR1cm4gZ290X3JldmlzaW9uOworfQorCitpbnQgY21kX19yZXZpc2lvbl93YWxraW5nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpZiAoYXJnYyA8IDIpCisJCXJldHVybiAxOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJaWYgKCFzdHJjbXAoYXJndlsxXSwgInJ1bi10d2ljZSIpKSB7CisJCXByaW50ZigiMXN0XG4iKTsKKwkJaWYgKCFydW5fcmV2aXNpb25fd2FsaygpKQorCQkJcmV0dXJuIDE7CisJCXByaW50ZigiMm5kXG4iKTsKKwkJaWYgKCFydW5fcmV2aXNpb25fd2FsaygpKQorCQkJcmV0dXJuIDE7CisKKwkJcmV0dXJuIDA7CisJfQorCisJZnByaW50ZihzdGRlcnIsICJjaGVjayB1c2FnZVxuIik7CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXJ1bi1jb21tYW5kLmMgYi90L2hlbHBlci90ZXN0LXJ1bi1jb21tYW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY0NmFhMgotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtcnVuLWNvbW1hbmQuYwpAQCAtMCwwICsxLDQyOCBAQAorLyoKKyAqIHRlc3QtcnVuLWNvbW1hbmQuYzogdGVzdCBydW4gY29tbWFuZCBBUEkuCisgKgorICogKEMpIDIwMDkgSWxhcmkgTGl1c3ZhYXJhIDxpbGFyaS5saXVzdmFhcmFAZWxpc2FuZXQuZmk+CisgKgorICogVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJ0aHJlYWQtdXRpbHMuaCIKKyNpbmNsdWRlICJ3aWxkbWF0Y2guaCIKKyNpbmNsdWRlICJnZXR0ZXh0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgaW50IG51bWJlcl9jYWxsYmFja3M7CitzdGF0aWMgaW50IHBhcmFsbGVsX25leHQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNwLAorCQkJIHN0cnVjdCBzdHJidWYgKmVyciwKKwkJCSB2b2lkICpjYiwKKwkJCSB2b2lkICoqdGFza19jYikKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZCA9IGNiOworCWlmIChudW1iZXJfY2FsbGJhY2tzID49IDQpCisJCXJldHVybiAwOworCisJYXJndl9hcnJheV9wdXNodigmY3AtPmFyZ3MsIGQtPmFyZ3YpOworCXN0cmJ1Zl9hZGRzdHIoZXJyLCAicHJlbG9hZGVkIG91dHB1dCBvZiBhIGNoaWxkXG4iKTsKKwludW1iZXJfY2FsbGJhY2tzKys7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbm9fam9iKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjcCwKKwkJICBzdHJ1Y3Qgc3RyYnVmICplcnIsCisJCSAgdm9pZCAqY2IsCisJCSAgdm9pZCAqKnRhc2tfY2IpCit7CisJc3RyYnVmX2FkZHN0cihlcnIsICJubyBmdXJ0aGVyIGpvYnMgYXZhaWxhYmxlXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0YXNrX2ZpbmlzaGVkKGludCByZXN1bHQsCisJCQkgc3RydWN0IHN0cmJ1ZiAqZXJyLAorCQkJIHZvaWQgKnBwX2NiLAorCQkJIHZvaWQgKnBwX3Rhc2tfY2IpCit7CisJc3RyYnVmX2FkZHN0cihlcnIsICJhc2tpbmcgZm9yIGEgcXVpY2sgc3RvcFxuIik7CisJcmV0dXJuIDE7Cit9CisKK3N0cnVjdCB0ZXN0c3VpdGUgeworCXN0cnVjdCBzdHJpbmdfbGlzdCB0ZXN0cywgZmFpbGVkOworCWludCBuZXh0OworCWludCBxdWlldCwgaW1tZWRpYXRlLCB2ZXJib3NlLCB2ZXJib3NlX2xvZywgdHJhY2UsIHdyaXRlX2p1bml0X3htbDsKK307CisjZGVmaW5lIFRFU1RTVUlURV9JTklUIFwKKwl7IFNUUklOR19MSVNUX0lOSVRfRFVQLCBTVFJJTkdfTElTVF9JTklUX0RVUCwgLTEsIDAsIDAsIDAsIDAsIDAsIDAgfQorCitzdGF0aWMgaW50IG5leHRfdGVzdChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY3AsIHN0cnVjdCBzdHJidWYgKmVyciwgdm9pZCAqY2IsCisJCSAgICAgdm9pZCAqKnRhc2tfY2IpCit7CisJc3RydWN0IHRlc3RzdWl0ZSAqc3VpdGUgPSBjYjsKKwljb25zdCBjaGFyICp0ZXN0OworCWlmIChzdWl0ZS0+bmV4dCA+PSBzdWl0ZS0+dGVzdHMubnIpCisJCXJldHVybiAwOworCisJdGVzdCA9IHN1aXRlLT50ZXN0cy5pdGVtc1tzdWl0ZS0+bmV4dCsrXS5zdHJpbmc7CisJYXJndl9hcnJheV9wdXNobCgmY3AtPmFyZ3MsICJzaCIsIHRlc3QsIE5VTEwpOworCWlmIChzdWl0ZS0+cXVpZXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AtPmFyZ3MsICItLXF1aWV0Iik7CisJaWYgKHN1aXRlLT5pbW1lZGlhdGUpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AtPmFyZ3MsICItaSIpOworCWlmIChzdWl0ZS0+dmVyYm9zZSkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC0+YXJncywgIi12Iik7CisJaWYgKHN1aXRlLT52ZXJib3NlX2xvZykKKwkJYXJndl9hcnJheV9wdXNoKCZjcC0+YXJncywgIi1WIik7CisJaWYgKHN1aXRlLT50cmFjZSkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC0+YXJncywgIi14Iik7CisJaWYgKHN1aXRlLT53cml0ZV9qdW5pdF94bWwpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AtPmFyZ3MsICItLXdyaXRlLWp1bml0LXhtbCIpOworCisJc3RyYnVmX2FkZGYoZXJyLCAiT3V0cHV0IG9mICclcyc6XG4iLCB0ZXN0KTsKKwkqdGFza19jYiA9ICh2b2lkICopdGVzdDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHRlc3RfZmluaXNoZWQoaW50IHJlc3VsdCwgc3RydWN0IHN0cmJ1ZiAqZXJyLCB2b2lkICpjYiwKKwkJCSB2b2lkICp0YXNrX2NiKQoreworCXN0cnVjdCB0ZXN0c3VpdGUgKnN1aXRlID0gY2I7CisJY29uc3QgY2hhciAqbmFtZSA9IChjb25zdCBjaGFyICopdGFza19jYjsKKworCWlmIChyZXN1bHQpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmc3VpdGUtPmZhaWxlZCwgbmFtZSk7CisKKwlzdHJidWZfYWRkZihlcnIsICIlczogJyVzJ1xuIiwgcmVzdWx0ID8gIkZBSUwiIDogIlNVQ0NFU1MiLCBuYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlc3RfZmFpbGVkKHN0cnVjdCBzdHJidWYgKm91dCwgdm9pZCAqY2IsIHZvaWQgKnRhc2tfY2IpCit7CisJc3RydWN0IHRlc3RzdWl0ZSAqc3VpdGUgPSBjYjsKKwljb25zdCBjaGFyICpuYW1lID0gKGNvbnN0IGNoYXIgKil0YXNrX2NiOworCisJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdWl0ZS0+ZmFpbGVkLCBuYW1lKTsKKwlzdHJidWZfYWRkZihvdXQsICJGQUlMRUQgVE8gU1RBUlQ6ICclcydcbiIsIG5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGVzdHN1aXRlX3VzYWdlW10gPSB7CisJInRlc3QtcnVuLWNvbW1hbmQgdGVzdHN1aXRlIFs8b3B0aW9ucz5dIFs8cGF0dGVybj4uLi5dIiwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHRlc3RzdWl0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHRlc3RzdWl0ZSBzdWl0ZSA9IFRFU1RTVUlURV9JTklUOworCWludCBtYXhfam9icyA9IDEsIGksIHJldDsKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnaScsICJpbW1lZGlhdGUiLCAmc3VpdGUuaW1tZWRpYXRlLAorCQkJICJzdG9wIGF0IGZpcnN0IGZhaWxlZCB0ZXN0IGNhc2UocykiKSwKKwkJT1BUX0lOVEVHRVIoJ2onLCAiam9icyIsICZtYXhfam9icywgInJ1biA8Tj4gam9icyBpbiBwYXJhbGxlbCIpLAorCQlPUFRfQk9PTCgncScsICJxdWlldCIsICZzdWl0ZS5xdWlldCwgImJlIHRlcnNlIiksCisJCU9QVF9CT09MKCd2JywgInZlcmJvc2UiLCAmc3VpdGUudmVyYm9zZSwgImJlIHZlcmJvc2UiKSwKKwkJT1BUX0JPT0woJ1YnLCAidmVyYm9zZS1sb2ciLCAmc3VpdGUudmVyYm9zZV9sb2csCisJCQkgImJlIHZlcmJvc2UsIHJlZGlyZWN0ZWQgdG8gYSBmaWxlIiksCisJCU9QVF9CT09MKCd4JywgInRyYWNlIiwgJnN1aXRlLnRyYWNlLCAidHJhY2Ugc2hlbGwgY29tbWFuZHMiKSwKKwkJT1BUX0JPT0woMCwgIndyaXRlLWp1bml0LXhtbCIsICZzdWl0ZS53cml0ZV9qdW5pdF94bWwsCisJCQkgIndyaXRlIEpVbml0LXN0eWxlIFhNTCBmaWxlcyIpLAorCQlPUFRfRU5EKCkKKwl9OworCisJbWVtc2V0KCZzdWl0ZSwgMCwgc2l6ZW9mKHN1aXRlKSk7CisJc3VpdGUudGVzdHMuc3RyZHVwX3N0cmluZ3MgPSBzdWl0ZS5mYWlsZWQuc3RyZHVwX3N0cmluZ3MgPSAxOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywKKwkJCXRlc3RzdWl0ZV91c2FnZSwgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisKKwlpZiAobWF4X2pvYnMgPD0gMCkKKwkJbWF4X2pvYnMgPSBvbmxpbmVfY3B1cygpOworCisJZGlyID0gb3BlbmRpcigiLiIpOworCWlmICghZGlyKQorCQlkaWUoIkNvdWxkIG5vdCBvcGVuIHRoZSBjdXJyZW50IGRpcmVjdG9yeSIpOworCXdoaWxlICgoZCA9IHJlYWRkaXIoZGlyKSkpIHsKKwkJY29uc3QgY2hhciAqcCA9IGQtPmRfbmFtZTsKKworCQlpZiAoKnAgIT0gJ3QnIHx8ICFpc2RpZ2l0KHBbMV0pIHx8ICFpc2RpZ2l0KHBbMl0pIHx8CisJCSAgICAhaXNkaWdpdChwWzNdKSB8fCAhaXNkaWdpdChwWzRdKSB8fCBwWzVdICE9ICctJyB8fAorCQkgICAgIWVuZHNfd2l0aChwLCAiLnNoIikpCisJCQljb250aW51ZTsKKworCQkvKiBObyBwYXR0ZXJuOiBtYXRjaCBhbGwgKi8KKwkJaWYgKCFhcmdjKSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN1aXRlLnRlc3RzLCBwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJCWlmICghd2lsZG1hdGNoKGFyZ3ZbaV0sIHAsIDApKSB7CisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdWl0ZS50ZXN0cywgcCk7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCWNsb3NlZGlyKGRpcik7CisKKwlpZiAoIXN1aXRlLnRlc3RzLm5yKQorCQlkaWUoIk5vIHRlc3RzIG1hdGNoISIpOworCWlmIChtYXhfam9icyA+IHN1aXRlLnRlc3RzLm5yKQorCQltYXhfam9icyA9IHN1aXRlLnRlc3RzLm5yOworCisJZnByaW50ZihzdGRlcnIsICJSdW5uaW5nICVkIHRlc3RzICglZCBhdCBhIHRpbWUpXG4iLAorCQlzdWl0ZS50ZXN0cy5uciwgbWF4X2pvYnMpOworCisJcmV0ID0gcnVuX3Byb2Nlc3Nlc19wYXJhbGxlbChtYXhfam9icywgbmV4dF90ZXN0LCB0ZXN0X2ZhaWxlZCwKKwkJCQkgICAgIHRlc3RfZmluaXNoZWQsICZzdWl0ZSk7CisKKwlpZiAoc3VpdGUuZmFpbGVkLm5yID4gMCkgeworCQlyZXQgPSAxOworCQlmcHJpbnRmKHN0ZGVyciwgIiVkIHRlc3RzIGZhaWxlZDpcblxuIiwgc3VpdGUuZmFpbGVkLm5yKTsKKwkJZm9yIChpID0gMDsgaSA8IHN1aXRlLmZhaWxlZC5ucjsgaSsrKQorCQkJZnByaW50ZihzdGRlcnIsICJcdCVzXG4iLCBzdWl0ZS5mYWlsZWQuaXRlbXNbaV0uc3RyaW5nKTsKKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3VpdGUudGVzdHMsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZzdWl0ZS5mYWlsZWQsIDApOworCisJcmV0dXJuICEhcmV0OworfQorCitzdGF0aWMgdWludDY0X3QgbXlfcmFuZG9tX25leHQgPSAxMjM0OworCitzdGF0aWMgdWludDY0X3QgbXlfcmFuZG9tKHZvaWQpCit7CisJdWludDY0X3QgcmVzID0gbXlfcmFuZG9tX25leHQ7CisJbXlfcmFuZG9tX25leHQgPSBteV9yYW5kb21fbmV4dCAqIDExMDM1MTUyNDUgKyAxMjM0NTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHF1b3RlX3N0cmVzc190ZXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwkvKgorCSAqIFdlIGFyZSBydW5uaW5nIGEgcXVvdGUtc3RyZXNzIHRlc3QuCisJICogc3Bhd24gYSBzdWJwcm9jZXNzIHRoYXQgcnVucyBxdW90ZS1zdHJlc3Mgd2l0aCBhCisJICogc3BlY2lhbCBvcHRpb24gdGhhdCBlY2hvZXMgYmFjayB0aGUgYXJndW1lbnRzIHRoYXQKKwkgKiB3ZXJlIHBhc3NlZCBpbi4KKwkgKi8KKwljaGFyIHNwZWNpYWxbXSA9ICIuPypcXF5fXCInYHt9KClbXTw+QH4mKzo7JCUiOyAvLyBcdFxyXG5cYSI7CisJaW50IGksIGosIGssIHRyaWFscyA9IDEwMCwgc2tpcCA9IDAsIG1zeXMyID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9JTlRFR0VSKCduJywgInRyaWFscyIsICZ0cmlhbHMsICJOdW1iZXIgb2YgdHJpYWxzIiksCisJCU9QVF9JTlRFR0VSKCdzJywgInNraXAiLCAmc2tpcCwgIlNraXAgPG4+IHRyaWFscyIpLAorCQlPUFRfQk9PTCgnbScsICJtc3lzMiIsICZtc3lzMiwgIlRlc3QgcXVvdGluZyBmb3IgTVNZUzIncyBzaCIpLAorCQlPUFRfRU5EKCkKKwl9OworCWNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZVtdID0geworCQkidGVzdC10b29sIHJ1bi1jb21tYW5kIHF1b3RlLXN0cmVzcy10ZXN0IDxvcHRpb25zPiIsCisJCU5VTEwKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgdXNhZ2UsIDApOworCisJc2V0ZW52KCJNU1lTX05PX1BBVEhDT05WIiwgIjEiLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCB0cmlhbHM7IGkrKykgeworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwkJc2l6ZV90IGFyZ19jb3VudCwgYXJnX29mZnNldDsKKwkJaW50IHJldCA9IDA7CisKKwkJYXJndl9hcnJheV9jbGVhcigmYXJncyk7CisJCWlmIChtc3lzMikKKwkJCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3MsICJzaCIsICItYyIsCisJCQkJCSAicHJpbnRmICVzXFxcXDAgXCIkQFwiIiwgInNraXAiLCBOVUxMKTsKKwkJZWxzZQorCQkJYXJndl9hcnJheV9wdXNobCgmYXJncywgInRlc3QtdG9vbCIsICJydW4tY29tbWFuZCIsCisJCQkJCSAicXVvdGUtZWNobyIsIE5VTEwpOworCQlhcmdfb2Zmc2V0ID0gYXJncy5hcmdjOworCisJCWlmIChhcmdjID4gMCkgeworCQkJdHJpYWxzID0gMTsKKwkJCWFyZ19jb3VudCA9IGFyZ2M7CisJCQlmb3IgKGogPSAwOyBqIDwgYXJnX2NvdW50OyBqKyspCisJCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBhcmd2W2pdKTsKKwkJfSBlbHNlIHsKKwkJCWFyZ19jb3VudCA9IDEgKyAobXlfcmFuZG9tKCkgJSA1KTsKKwkJCWZvciAoaiA9IDA7IGogPCBhcmdfY291bnQ7IGorKykgeworCQkJCWNoYXIgYnVmWzIwXTsKKwkJCQlzaXplX3QgbWluX2xlbiA9IDE7CisJCQkJc2l6ZV90IGFyZ19sZW4gPSBtaW5fbGVuICsKKwkJCQkJKG15X3JhbmRvbSgpICUgKEFSUkFZX1NJWkUoYnVmKSAtIG1pbl9sZW4pKTsKKworCQkJCWZvciAoayA9IDA7IGsgPCBhcmdfbGVuOyBrKyspCisJCQkJCWJ1ZltrXSA9IHNwZWNpYWxbbXlfcmFuZG9tKCkgJQorCQkJCQkJQVJSQVlfU0laRShzcGVjaWFsKV07CisJCQkJYnVmW2FyZ19sZW5dID0gJ1wwJzsKKworCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgYnVmKTsKKwkJCX0KKwkJfQorCisJCWlmIChpIDwgc2tpcCkKKwkJCWNvbnRpbnVlOworCisJCWNwLmFyZ3YgPSBhcmdzLmFyZ3Y7CisJCXN0cmJ1Zl9yZXNldCgmb3V0KTsKKwkJaWYgKHBpcGVfY29tbWFuZCgmY3AsIE5VTEwsIDAsICZvdXQsIDAsIE5VTEwsIDApIDwgMCkKKwkJCXJldHVybiBlcnJvcigiRmFpbGVkIHRvIHNwYXduIGNoaWxkIHByb2Nlc3MiKTsKKworCQlmb3IgKGogPSAwLCBrID0gMDsgaiA8IGFyZ19jb3VudDsgaisrKSB7CisJCQljb25zdCBjaGFyICphcmcgPSBhcmdzLmFyZ3ZbaiArIGFyZ19vZmZzZXRdOworCisJCQlpZiAoc3RyY21wKGFyZywgb3V0LmJ1ZiArIGspKQorCQkJCXJldCA9IGVycm9yKCJpbmNvcnJlY3RseSBxdW90ZWQgYXJnOiAnJXMnLCAiCisJCQkJCSAgICAiZWNob2VkIGJhY2sgYXMgJyVzJyIsCisJCQkJCSAgICAgYXJnLCBvdXQuYnVmICsgayk7CisJCQlrICs9IHN0cmxlbihvdXQuYnVmICsgaykgKyAxOworCQl9CisKKwkJaWYgKGsgIT0gb3V0LmxlbikKKwkJCXJldCA9IGVycm9yKCJnb3QgJWQgYnl0ZXMsIGJ1dCBjb25zdW1lZCBvbmx5ICVkIiwKKwkJCQkgICAgIChpbnQpb3V0LmxlbiwgKGludClrKTsKKworCQlpZiAocmV0KSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlRyaWFsICMlZCBmYWlsZWQuIEFyZ3VtZW50czpcbiIsIGkpOworCQkJZm9yIChqID0gMDsgaiA8IGFyZ19jb3VudDsgaisrKQorCQkJCWZwcmludGYoc3RkZXJyLCAiYXJnICMlZDogJyVzJ1xuIiwKKwkJCQkJKGludClqLCBhcmdzLmFyZ3ZbaiArIGFyZ19vZmZzZXRdKTsKKworCQkJc3RyYnVmX3JlbGVhc2UoJm91dCk7CisJCQlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlmIChpICYmIChpICUgMTAwKSA9PSAwKQorCQkJZnByaW50ZihzdGRlcnIsICJUcmlhbHMgY29tcGxldGVkOiAlZFxuIiwgKGludClpKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmb3V0KTsKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHF1b3RlX2VjaG8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXdoaWxlIChhcmdjID4gMSkgeworCQlmd3JpdGUoYXJndlsxXSwgc3RybGVuKGFyZ3ZbMV0pLCAxLCBzdGRvdXQpOworCQlmcHV0YygnXDAnLCBzdGRvdXQpOworCQlhcmd2Kys7CisJCWFyZ2MtLTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbmhlcml0X2hhbmRsZShjb25zdCBjaGFyICphcmd2MCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljaGFyIHBhdGhbUEFUSF9NQVhdOworCWludCB0bXA7CisKKwkvKiBGaXJzdCwgb3BlbiBhbiBpbmhlcml0YWJsZSBoYW5kbGUgKi8KKwl4c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAib3V0LVhYWFhYWCIpOworCXRtcCA9IHhta3N0ZW1wKHBhdGgpOworCisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywKKwkJCSAidGVzdC10b29sIiwgYXJndjAsICJpbmhlcml0ZWQtaGFuZGxlLWNoaWxkIiwgTlVMTCk7CisJY3AuaW4gPSAtMTsKKwljcC5ub19zdGRvdXQgPSBjcC5ub19zdGRlcnIgPSAxOworCWlmIChzdGFydF9jb21tYW5kKCZjcCkgPCAwKQorCQlkaWUoIkNvdWxkIG5vdCBzdGFydCBjaGlsZCBwcm9jZXNzIik7CisKKwkvKiBUaGVuIGNsb3NlIGl0LCBhbmQgdHJ5IHRvIGRlbGV0ZSBpdC4gKi8KKwljbG9zZSh0bXApOworCWlmICh1bmxpbmsocGF0aCkpCisJCWRpZSgiQ291bGQgbm90IGRlbGV0ZSAnJXMnIiwgcGF0aCk7CisKKwlpZiAoY2xvc2UoY3AuaW4pIDwgMCB8fCBmaW5pc2hfY29tbWFuZCgmY3ApIDwgMCkKKwkJZGllKCJDaGlsZCBkaWQgbm90IGZpbmlzaCIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5oZXJpdF9oYW5kbGVfY2hpbGQodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDApIDwgMCkKKwkJZGllKCJDb3VsZCBub3QgcmVhZCBzdGRpbiIpOworCXByaW50ZigiUmVjZWl2ZWQgJXNcbiIsIGJ1Zi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfX3J1bl9jb21tYW5kKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCBqb2JzOworCisJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoYXJndlsxXSwgInRlc3RzdWl0ZSIpKQorCQlleGl0KHRlc3RzdWl0ZShhcmdjIC0gMSwgYXJndiArIDEpKTsKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiaW5oZXJpdGVkLWhhbmRsZSIpKQorCQlleGl0KGluaGVyaXRfaGFuZGxlKGFyZ3ZbMF0pKTsKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiaW5oZXJpdGVkLWhhbmRsZS1jaGlsZCIpKQorCQlleGl0KGluaGVyaXRfaGFuZGxlX2NoaWxkKCkpOworCisJaWYgKGFyZ2MgPj0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICJxdW90ZS1zdHJlc3MtdGVzdCIpKQorCQlyZXR1cm4gISFxdW90ZV9zdHJlc3NfdGVzdChhcmdjIC0gMSwgYXJndiArIDEpOworCisJaWYgKGFyZ2MgPj0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICJxdW90ZS1lY2hvIikpCisJCXJldHVybiAhIXF1b3RlX2VjaG8oYXJnYyAtIDEsIGFyZ3YgKyAxKTsKKworCWlmIChhcmdjIDwgMykKKwkJcmV0dXJuIDE7CisJd2hpbGUgKCFzdHJjbXAoYXJndlsxXSwgImVudiIpKSB7CisJCWlmICghYXJndlsyXSkKKwkJCWRpZSgiZW52IHNwZWNpZmllciB3aXRob3V0IGEgdmFsdWUiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZwcm9jLmVudl9hcnJheSwgYXJndlsyXSk7CisJCWFyZ3YgKz0gMjsKKwkJYXJnYyAtPSAyOworCX0KKwlpZiAoYXJnYyA8IDMpCisJCXJldHVybiAxOworCXByb2MuYXJndiA9IChjb25zdCBjaGFyICoqKWFyZ3YgKyAyOworCisJaWYgKCFzdHJjbXAoYXJndlsxXSwgInN0YXJ0LWNvbW1hbmQtRU5PRU5UIikpIHsKKwkJaWYgKHN0YXJ0X2NvbW1hbmQoJnByb2MpIDwgMCAmJiBlcnJubyA9PSBFTk9FTlQpCisJCQlyZXR1cm4gMDsKKwkJZnByaW50ZihzdGRlcnIsICJGQUlMICVzXG4iLCBhcmd2WzFdKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmICghc3RyY21wKGFyZ3ZbMV0sICJydW4tY29tbWFuZCIpKQorCQlleGl0KHJ1bl9jb21tYW5kKCZwcm9jKSk7CisKKwlqb2JzID0gYXRvaShhcmd2WzJdKTsKKwlwcm9jLmFyZ3YgPSAoY29uc3QgY2hhciAqKilhcmd2ICsgMzsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJydW4tY29tbWFuZC1wYXJhbGxlbCIpKQorCQlleGl0KHJ1bl9wcm9jZXNzZXNfcGFyYWxsZWwoam9icywgcGFyYWxsZWxfbmV4dCwKKwkJCQkJICAgIE5VTEwsIE5VTEwsICZwcm9jKSk7CisKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAicnVuLWNvbW1hbmQtYWJvcnQiKSkKKwkJZXhpdChydW5fcHJvY2Vzc2VzX3BhcmFsbGVsKGpvYnMsIHBhcmFsbGVsX25leHQsCisJCQkJCSAgICBOVUxMLCB0YXNrX2ZpbmlzaGVkLCAmcHJvYykpOworCisJaWYgKCFzdHJjbXAoYXJndlsxXSwgInJ1bi1jb21tYW5kLW5vLWpvYnMiKSkKKwkJZXhpdChydW5fcHJvY2Vzc2VzX3BhcmFsbGVsKGpvYnMsIG5vX2pvYiwKKwkJCQkJICAgIE5VTEwsIHRhc2tfZmluaXNoZWQsICZwcm9jKSk7CisKKwlmcHJpbnRmKHN0ZGVyciwgImNoZWNrIHVzYWdlXG4iKTsKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3Qtc2NyYXAtY2FjaGUtdHJlZS5jIGIvdC9oZWxwZXIvdGVzdC1zY3JhcC1jYWNoZS10cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzZjE2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3Qtc2NyYXAtY2FjaGUtdHJlZS5jCkBAIC0wLDAgKzEsMTkgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKworaW50IGNtZF9fc2NyYXBfY2FjaGVfdHJlZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdikKK3sKKwlzdHJ1Y3QgbG9ja19maWxlIGluZGV4X2xvY2sgPSBMT0NLX0lOSVQ7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIExPQ0tfRElFX09OX0VSUk9SKTsKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIik7CisJYWN0aXZlX2NhY2hlX3RyZWUgPSBOVUxMOworCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmluZGV4X2xvY2ssIENPTU1JVF9MT0NLKSkKKwkJZGllKCJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jIGIvdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZTM1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXNlcnZlLXYyLmMKQEAgLTAsMCArMSwzMSBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInNlcnZlLmgiCisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3Qgc2VydmVfdXNhZ2VbXSA9IHsKKwlOXygidGVzdC10b29sIHNlcnZlLXYyIFs8b3B0aW9ucz5dIiksCisJTlVMTAorfTsKKworaW50IGNtZF9fc2VydmVfdjIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBzZXJ2ZV9vcHRpb25zIG9wdHMgPSBTRVJWRV9PUFRJT05TX0lOSVQ7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woMCwgInN0YXRlbGVzcy1ycGMiLCAmb3B0cy5zdGF0ZWxlc3NfcnBjLAorCQkJIE5fKCJxdWl0IGFmdGVyIGEgc2luZ2xlIHJlcXVlc3QvcmVzcG9uc2UgZXhjaGFuZ2UiKSksCisJCU9QVF9CT09MKDAsICJhZHZlcnRpc2UtY2FwYWJpbGl0aWVzIiwgJm9wdHMuYWR2ZXJ0aXNlX2NhcGFiaWxpdGllcywKKwkJCSBOXygiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBhZHZlcnRpc2luZyBjYXBhYmlsaXRpZXMiKSksCisJCU9QVF9FTkQoKQorCX07CisJY29uc3QgY2hhciAqcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJLyogaWdub3JlIGFsbCB1bmtub3duIGNtZGxpbmUgc3dpdGNoZXMgZm9yIG5vdyAqLworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgc2VydmVfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTik7CisJc2VydmUoJm9wdHMpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXNoYTEuYyBiL3QvaGVscGVyL3Rlc3Qtc2hhMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NjBjMzgKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXNoYTEuYwpAQCAtMCwwICsxLDcgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCitpbnQgY21kX19zaGExKGludCBhYywgY29uc3QgY2hhciAqKmF2KQoreworCXJldHVybiBjbWRfaGFzaF9pbXBsKGFjLCBhdiwgR0lUX0hBU0hfU0hBMSk7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXNoYTEuc2ggYi90L2hlbHBlci90ZXN0LXNoYTEuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODQ1OTQ4OAotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3Qtc2hhMS5zaApAQCAtMCwwICsxLDgzIEBACisjIS9iaW4vc2gKKworZGQgaWY9L2Rldi96ZXJvIGJzPTEwNDg1NzYgY291bnQ9MTAwIDI+L2Rldi9udWxsIHwKKy91c3IvYmluL3RpbWUgdC9oZWxwZXIvdGVzdC10b29sIHNoYTEgPi9kZXYvbnVsbAorCit3aGlsZSByZWFkIGV4cGVjdCBjbnQgcGZ4CitkbworCWNhc2UgIiRleHBlY3QiIGluICcjJyopIGNvbnRpbnVlIDs7IGVzYWMKKwlhY3R1YWw9JCgKKwkJeworCQkJdGVzdCAteiAiJHBmeCIgfHwgZWNobyAiJHBmeCIKKwkJCWRkIGlmPS9kZXYvemVybyBicz0xMDQ4NTc2IGNvdW50PSRjbnQgMj4vZGV2L251bGwgfAorCQkJcGVybCAtcGUgJ3kvXDAwMC9nLycKKwkJfSB8IC4vdC9oZWxwZXIvdGVzdC10b29sIHNoYTEgJGNudAorCSkKKwlpZiB0ZXN0ICIkZXhwZWN0IiA9ICIkYWN0dWFsIgorCXRoZW4KKwkJZWNobyAiT0s6ICRleHBlY3QgJGNudCAkcGZ4IgorCWVsc2UKKwkJZWNobyA+JjIgIk9PUFM6ICRjbnQiCisJCWVjaG8gPiYyICJleHBlY3Q6ICRleHBlY3QiCisJCWVjaG8gPiYyICJhY3R1YWw6ICRhY3R1YWwiCisJCWV4aXQgMQorCWZpCitkb25lIDw8RU9GCitkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5IDAKKzNmNzg2ODUwZTM4NzU1MGZkYWI4MzZlZDdlNmRjODgxZGUyMzAwMWIgMCBhCis1Mjc3Y2JiNDVhMTU5MDIxMzdkMzMyZDk3ZTg5Y2Y4MTM2NTQ1NDg1IDAgYWIKKzAzY2ZkNzQzNjYxZjA3OTc1ZmEyZjEyMjBjNTE5NGNiYWZmNDg0NTEgMCBhYmMKKzMzMzBiNDM3MzY0MGY5ZTQ2MDQ5OTFlNzNjN2U4NmJmZDhkYTJkYzMgMCBhYmNkCitlYzExMzEyMzg2YWQ1NjE2NzRmNzI0YjhjY2E3Y2YxNzk2ZTI2ZDFkIDAgYWJjZGUKK2JkYzM3YzA3NGVjNGVlNjA1MGQ2OGJjMTMzYzZiOTEyZjM2NDc0ZGYgMCBhYmNkZWYKKzY5YmNhOTliOTIzODU5ZjJkYzQ4NmI1NWI4N2Y0OTY4OWI3MzU4YzcgMCBhYmNkZWZnCitlNDE0YWY3MTYxYzk1NTQwODlmNDEwNmQ2ZjE3OTdlZjE0YTczNjY2IDAgYWJjZGVmZ2gKKzA3MDdmMjk3MDA0M2Y5ZjdjMjIwMjk0ODJkYjI3NzMzZGVhZWMwMjkgMCBhYmNkZWZnaGkKK2E0ZGQ4YWE3NGE1NjM2NzI4ZmU1MjQ1MTYzNmUyZTE3NzI2MDMzYWEgMQorOTk4NmI0NWUyZjRkNzA4NjM3MjUzM2JiNjk1M2E4NjUyZmEzNjQ0YSAxIGZyb3R6CisyM2Q4ZDRmNzg4ZTg1MjZiNDg3NzU0OGEzMjU3NzU0M2NiYWFmNTFmIDEwCis4Y2QyM2Y4MjJhYjQ0YzdmNDgxYjhjOTJkNTkxZjZkMWZjYWQ0MzFjIDEwIGZyb3R6CitmM2I1NjA0YTRlNjA0ODk5YzEyMzNlZGIzYmYxY2MwZWRlNGQ4YzMyIDUxMgorYjA5NWJkODM3YTM3MTU5MzA0ODEzNmU0MjllOWFjNGI0NzZlMWJiMyA1MTIgZnJvdHoKKzA4ZmE4MWQ2MTkwOTQ4ZGU1Y2NjYTM5NjYzNDBjYzQ4YzEwY2NlYWMgMTIwMCB4eXp6eQorZTMzYTI5MWY0MmMzMGExNTk3MzNkZDk4YjhiM2U0ZmYzNDE1OGNhMCA0MDkwIDRHCisjYTNiZjc4M2JjMjBjYWE5NThmNmNiMjRkZDE0MGE3YjIxOTg0ODM4ZCA5OTk5IG5pdGZvbAorRU9GCisKK2V4aXQKKworIyBnZW5lcmF0aW5nIHRlc3QgdmVjdG9ycworIyBpbnB1dHMgYXJlIG51bWJlciBvZiBtZWdhYnl0ZXMgZm9sbG93ZWQgYnkgc29tZSByYW5kb20gc3RyaW5nIHRvIHByZWZpeC4KKword2hpbGUgcmVhZCBjbnQgcGZ4CitkbworCWFjdHVhbD0kKAorCQl7CisJCQl0ZXN0IC16ICIkcGZ4IiB8fCBlY2hvICIkcGZ4IgorCQkJZGQgaWY9L2Rldi96ZXJvIGJzPTEwNDg1NzYgY291bnQ9JGNudCAyPi9kZXYvbnVsbCB8CisJCQlwZXJsIC1wZSAneS9cMDAwL2cvJworCQl9IHwgc2hhMXN1bSB8CisJCXNlZCAtZSAncy8gLiovLycKKwkpCisJZWNobyAiJGFjdHVhbCAkY250ICRwZngiCitkb25lIDw8RU9GCiswCiswIGEKKzAgYWIKKzAgYWJjCiswIGFiY2QKKzAgYWJjZGUKKzAgYWJjZGVmCiswIGFiY2RlZmcKKzAgYWJjZGVmZ2gKKzAgYWJjZGVmZ2hpCisxCisxIGZyb3R6CisxMAorMTAgZnJvdHoKKzUxMgorNTEyIGZyb3R6CisxMjAwIHh5enp5Cis0MDkwIDRHCis5OTk5IG5pdGZvbAorRU9GCmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXNoYTI1Ni5jIGIvdC9oZWxwZXIvdGVzdC1zaGEyNTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWM2YTk5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1zaGEyNTYuYwpAQCAtMCwwICsxLDcgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCitpbnQgY21kX19zaGEyNTYoaW50IGFjLCBjb25zdCBjaGFyICoqYXYpCit7CisJcmV0dXJuIGNtZF9oYXNoX2ltcGwoYWMsIGF2LCBHSVRfSEFTSF9TSEEyNTYpOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1zaWdjaGFpbi5jIGIvdC9oZWxwZXIvdGVzdC1zaWdjaGFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTNiY2MKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXNpZ2NoYWluLmMKQEAgLTAsMCArMSwyNCBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKworI2RlZmluZSBYKGYpIFwKK3N0YXRpYyB2b2lkIGYoaW50IHNpZykgeyBcCisJcHV0cygjZik7IFwKKwlmZmx1c2goc3Rkb3V0KTsgXAorCXNpZ2NoYWluX3BvcChzaWcpOyBcCisJcmFpc2Uoc2lnKTsgXAorfQorWChvbmUpCitYKHR3bykKK1godGhyZWUpCisjdW5kZWYgWAorCitpbnQgY21kX19zaWdjaGFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc2lnY2hhaW5fcHVzaChTSUdURVJNLCBvbmUpOworCXNpZ2NoYWluX3B1c2goU0lHVEVSTSwgdHdvKTsKKwlzaWdjaGFpbl9wdXNoKFNJR1RFUk0sIHRocmVlKTsKKwlyYWlzZShTSUdURVJNKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3Qtc3RyY21wLW9mZnNldC5jIGIvdC9oZWxwZXIvdGVzdC1zdHJjbXAtb2Zmc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRlNGE2ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3Qtc3RyY21wLW9mZnNldC5jCkBAIC0wLDAgKzEsMjMgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCitpbnQgY21kX19zdHJjbXBfb2Zmc2V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgcmVzdWx0OworCXNpemVfdCBvZmZzZXQ7CisKKwlpZiAoIWFyZ3ZbMV0gfHwgIWFyZ3ZbMl0pCisJCWRpZSgidXNhZ2U6ICVzIDxzdHJpbmcxPiA8c3RyaW5nMj4iLCBhcmd2WzBdKTsKKworCXJlc3VsdCA9IHN0cmNtcF9vZmZzZXQoYXJndlsxXSwgYXJndlsyXSwgJm9mZnNldCk7CisKKwkvKgorCSAqIEJlY2F1c2UgZGlmZmVyZW50IENSVHMgYmVoYXZlIGRpZmZlcmVudGx5LCBvbmx5IHJlbHkgb24gc2lnbnMKKwkgKiBvZiB0aGUgcmVzdWx0IHZhbHVlcy4KKwkgKi8KKwlyZXN1bHQgPSAocmVzdWx0IDwgMCA/IC0xIDoKKwkJCSAgcmVzdWx0ID4gMCA/IDEgOgorCQkJICAwKTsKKwlwcmludGYoIiVkICUiUFJJdU1BWCJcbiIsIHJlc3VsdCwgKHVpbnRtYXhfdClvZmZzZXQpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1zdHJpbmctbGlzdC5jIGIvdC9oZWxwZXIvdGVzdC1zdHJpbmctbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMjNkZGEKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXN0cmluZy1saXN0LmMKQEAgLTAsMCArMSwxMjkgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKKy8qCisgKiBQYXJzZSBhbiBhcmd1bWVudCBpbnRvIGEgc3RyaW5nIGxpc3QuICBhcmcgc2hvdWxkIGVpdGhlciBiZSBhCisgKiAnOictc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5ncywgb3IgIi0iIHRvIGluZGljYXRlIGFuIGVtcHR5IHN0cmluZworICogbGlzdCAoYXMgb3Bwb3NlZCB0byAiIiwgd2hpY2ggaW5kaWNhdGVzIGEgc3RyaW5nIGxpc3QgY29udGFpbmluZyBhCisgKiBzaW5nbGUgZW1wdHkgc3RyaW5nKS4gIGxpc3QtPnN0cmR1cF9zdHJpbmdzIG11c3QgYmUgc2V0LgorICovCitzdGF0aWMgdm9pZCBwYXJzZV9zdHJpbmdfbGlzdChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAoIXN0cmNtcChhcmcsICItIikpCisJCXJldHVybjsKKworCSh2b2lkKXN0cmluZ19saXN0X3NwbGl0KGxpc3QsIGFyZywgJzonLCAtMSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2xpc3QoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQlwcmludGYoIlslZF06IFwiJXNcIlxuIiwgaSwgbGlzdC0+aXRlbXNbaV0uc3RyaW5nKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfbGlzdF9jb21wYWN0KGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwlpbnQgaTsKKwlpZiAoIWxpc3QtPm5yKQorCQlwcmludGYoIi1cbiIpOworCWVsc2UgeworCQlwcmludGYoIiVzIiwgbGlzdC0+aXRlbXNbMF0uc3RyaW5nKTsKKwkJZm9yIChpID0gMTsgaSA8IGxpc3QtPm5yOyBpKyspCisJCQlwcmludGYoIjolcyIsIGxpc3QtPml0ZW1zW2ldLnN0cmluZyk7CisJCXByaW50ZigiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHJlZml4X2NiKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICpjYl9kYXRhKQoreworCWNvbnN0IGNoYXIgKnByZWZpeCA9IChjb25zdCBjaGFyICopY2JfZGF0YTsKKwlyZXR1cm4gc3RhcnRzX3dpdGgoaXRlbS0+c3RyaW5nLCBwcmVmaXgpOworfQorCitpbnQgY21kX19zdHJpbmdfbGlzdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaWYgKGFyZ2MgPT0gNSAmJiAhc3RyY21wKGFyZ3ZbMV0sICJzcGxpdCIpKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJCWludCBpOworCQljb25zdCBjaGFyICpzID0gYXJndlsyXTsKKwkJaW50IGRlbGltID0gKmFyZ3ZbM107CisJCWludCBtYXhzcGxpdCA9IGF0b2koYXJndls0XSk7CisKKwkJaSA9IHN0cmluZ19saXN0X3NwbGl0KCZsaXN0LCBzLCBkZWxpbSwgbWF4c3BsaXQpOworCQlwcmludGYoIiVkXG4iLCBpKTsKKwkJd3JpdGVfbGlzdCgmbGlzdCk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPT0gNSAmJiAhc3RyY21wKGFyZ3ZbMV0sICJzcGxpdF9pbl9wbGFjZSIpKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwkJaW50IGk7CisJCWNoYXIgKnMgPSB4c3RyZHVwKGFyZ3ZbMl0pOworCQlpbnQgZGVsaW0gPSAqYXJndlszXTsKKwkJaW50IG1heHNwbGl0ID0gYXRvaShhcmd2WzRdKTsKKworCQlpID0gc3RyaW5nX2xpc3Rfc3BsaXRfaW5fcGxhY2UoJmxpc3QsIHMsIGRlbGltLCBtYXhzcGxpdCk7CisJCXByaW50ZigiJWRcbiIsIGkpOworCQl3cml0ZV9saXN0KCZsaXN0KTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDApOworCQlmcmVlKHMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJnYyA9PSA0ICYmICFzdHJjbXAoYXJndlsxXSwgImZpbHRlciIpKSB7CisJCS8qCisJCSAqIFJldGFpbiBvbmx5IHRoZSBpdGVtcyB0aGF0IGhhdmUgdGhlIHNwZWNpZmllZCBwcmVmaXguCisJCSAqIEFyZ3VtZW50czogbGlzdHwtIHByZWZpeAorCQkgKi8KKwkJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwkJY29uc3QgY2hhciAqcHJlZml4ID0gYXJndlszXTsKKworCQlwYXJzZV9zdHJpbmdfbGlzdCgmbGlzdCwgYXJndlsyXSk7CisJCWZpbHRlcl9zdHJpbmdfbGlzdCgmbGlzdCwgMCwgcHJlZml4X2NiLCAodm9pZCAqKXByZWZpeCk7CisJCXdyaXRlX2xpc3RfY29tcGFjdCgmbGlzdCk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPT0gMyAmJiAhc3RyY21wKGFyZ3ZbMV0sICJyZW1vdmVfZHVwbGljYXRlcyIpKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwkJcGFyc2Vfc3RyaW5nX2xpc3QoJmxpc3QsIGFyZ3ZbMl0pOworCQlzdHJpbmdfbGlzdF9yZW1vdmVfZHVwbGljYXRlcygmbGlzdCwgMCk7CisJCXdyaXRlX2xpc3RfY29tcGFjdCgmbGlzdCk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICJzb3J0IikpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJCXN0cmJ1Zl9yZWFkKCZzYiwgMCwgMCk7CisKKwkJLyoKKwkJICogU3BsaXQgYnkgbmV3bGluZSwgYnV0IGRvbid0IGNyZWF0ZSBhIHN0cmluZ19saXN0IGl0ZW0KKwkJICogZm9yIHRoZSBlbXB0eSBzdHJpbmcgYWZ0ZXIgdGhlIGxhc3Qgc2VwYXJhdG9yLgorCQkgKi8KKwkJaWYgKHNiLmxlbiAmJiBzYi5idWZbc2IubGVuIC0gMV0gPT0gJ1xuJykKKwkJCXN0cmJ1Zl9zZXRsZW4oJnNiLCBzYi5sZW4gLSAxKTsKKwkJc3RyaW5nX2xpc3Rfc3BsaXRfaW5fcGxhY2UoJmxpc3QsIHNiLmJ1ZiwgJ1xuJywgLTEpOworCisJCXN0cmluZ19saXN0X3NvcnQoJmxpc3QpOworCisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJmxpc3QpCisJCQlwdXRzKGl0ZW0tPnN0cmluZyk7CisKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDApOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmtub3duIGZ1bmN0aW9uIG5hbWU6ICVzXG4iLCBhcmd2WzBdLAorCQlhcmd2WzFdID8gYXJndlsxXSA6ICIodGhlcmUgd2FzIG5vbmUpIik7CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXN1Ym1vZHVsZS1jb25maWcuYyBiL3QvaGVscGVyL3Rlc3Qtc3VibW9kdWxlLWNvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNjkyNzQKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXN1Ym1vZHVsZS1jb25maWcuYwpAQCAtMCwwICsxLDczIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUtY29uZmlnLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisKK3N0YXRpYyB2b2lkIGRpZV91c2FnZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFs8Y29tbWl0PiA8c3VibW9kdWxlcGF0aD5dIC4uLlxuIiwgYXJndlswXSk7CisJZXhpdCgxKTsKK30KKworaW50IGNtZF9fc3VibW9kdWxlX2NvbmZpZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqKmFyZyA9IGFyZ3Y7CisJaW50IG15X2FyZ2MgPSBhcmdjOworCWludCBvdXRwdXRfdXJsID0gMDsKKwlpbnQgbG9va3VwX25hbWUgPSAwOworCisJYXJnKys7CisJbXlfYXJnYy0tOworCXdoaWxlIChhcmdbMF0gJiYgc3RhcnRzX3dpdGgoYXJnWzBdLCAiLS0iKSkgeworCQlpZiAoIXN0cmNtcChhcmdbMF0sICItLXVybCIpKQorCQkJb3V0cHV0X3VybCA9IDE7CisJCWlmICghc3RyY21wKGFyZ1swXSwgIi0tbmFtZSIpKQorCQkJbG9va3VwX25hbWUgPSAxOworCQlhcmcrKzsKKwkJbXlfYXJnYy0tOworCX0KKworCWlmIChteV9hcmdjICUgMiAhPSAwKQorCQlkaWVfdXNhZ2UoYXJnYywgYXJndiwgIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMuIik7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisKKwl3aGlsZSAoKmFyZykgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIGNvbW1pdF9vaWQ7CisJCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZTsKKwkJY29uc3QgY2hhciAqY29tbWl0OworCQljb25zdCBjaGFyICpwYXRoX29yX25hbWU7CisKKwkJY29tbWl0ID0gYXJnWzBdOworCQlwYXRoX29yX25hbWUgPSBhcmdbMV07CisKKwkJaWYgKGNvbW1pdFswXSA9PSAnXDAnKQorCQkJb2lkY2xyKCZjb21taXRfb2lkKTsKKwkJZWxzZSBpZiAoZ2V0X29pZChjb21taXQsICZjb21taXRfb2lkKSA8IDApCisJCQlkaWVfdXNhZ2UoYXJnYywgYXJndiwgIkNvbW1pdCBub3QgZm91bmQuIik7CisKKwkJaWYgKGxvb2t1cF9uYW1lKSB7CisJCQlzdWJtb2R1bGUgPSBzdWJtb2R1bGVfZnJvbV9uYW1lKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSZjb21taXRfb2lkLCBwYXRoX29yX25hbWUpOworCQl9IGVsc2UKKwkJCXN1Ym1vZHVsZSA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJJmNvbW1pdF9vaWQsIHBhdGhfb3JfbmFtZSk7CisJCWlmICghc3VibW9kdWxlKQorCQkJZGllX3VzYWdlKGFyZ2MsIGFyZ3YsICJTdWJtb2R1bGUgbm90IGZvdW5kLiIpOworCisJCWlmIChvdXRwdXRfdXJsKQorCQkJcHJpbnRmKCJTdWJtb2R1bGUgdXJsOiAnJXMnIGZvciBwYXRoICclcydcbiIsCisJCQkJCXN1Ym1vZHVsZS0+dXJsLCBzdWJtb2R1bGUtPnBhdGgpOworCQllbHNlCisJCQlwcmludGYoIlN1Ym1vZHVsZSBuYW1lOiAnJXMnIGZvciBwYXRoICclcydcbiIsCisJCQkJCXN1Ym1vZHVsZS0+bmFtZSwgc3VibW9kdWxlLT5wYXRoKTsKKworCQlhcmcgKz0gMjsKKwl9CisKKwlzdWJtb2R1bGVfZnJlZSh0aGVfcmVwb3NpdG9yeSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3Qtc3VibW9kdWxlLW5lc3RlZC1yZXBvLWNvbmZpZy5jIGIvdC9oZWxwZXIvdGVzdC1zdWJtb2R1bGUtbmVzdGVkLXJlcG8tY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM5NzkyOQotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3Qtc3VibW9kdWxlLW5lc3RlZC1yZXBvLWNvbmZpZy5jCkBAIC0wLDAgKzEsMzIgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUtY29uZmlnLmgiCisKK3N0YXRpYyB2b2lkIGRpZV91c2FnZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIDxzdWJtb2R1bGVwYXRoPiA8Y29uZmlnIG5hbWU+XG4iLCBhcmd2WzBdKTsKKwlleGl0KDEpOworfQorCitpbnQgY21kX19zdWJtb2R1bGVfbmVzdGVkX3JlcG9fY29uZmlnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgcmVwb3NpdG9yeSBzdWJyZXBvOworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKworCWlmIChhcmdjIDwgMykKKwkJZGllX3VzYWdlKGFyZ2MsIGFyZ3YsICJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLiIpOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aCh0aGVfcmVwb3NpdG9yeSwgJm51bGxfb2lkLCBhcmd2WzFdKTsKKwlpZiAocmVwb19zdWJtb2R1bGVfaW5pdCgmc3VicmVwbywgdGhlX3JlcG9zaXRvcnksIHN1YikpIHsKKwkJZGllX3VzYWdlKGFyZ2MsIGFyZ3YsICJTdWJtb2R1bGUgbm90IGZvdW5kLiIpOworCX0KKworCS8qIFJlYWQgdGhlIGNvbmZpZyBvZiBfY2hpbGRfIHN1Ym1vZHVsZXMuICovCisJcHJpbnRfY29uZmlnX2Zyb21fZ2l0bW9kdWxlcygmc3VicmVwbywgYXJndlsyXSk7CisKKwlzdWJtb2R1bGVfZnJlZSh0aGVfcmVwb3NpdG9yeSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3Qtc3VicHJvY2Vzcy5jIGIvdC9oZWxwZXIvdGVzdC1zdWJwcm9jZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJiNjlkZQotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3Qtc3VicHJvY2Vzcy5jCkBAIC0wLDAgKzEsMjAgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisKK2ludCBjbWRfX3N1YnByb2Nlc3MoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCBub2dpdCA9IDA7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9naXQpOworCWlmIChub2dpdCkKKwkJZGllKCJObyBnaXQgcmVwbyBmb3VuZCIpOworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLXNldHVwLXdvcmstdHJlZSIpKSB7CisJCXNldHVwX3dvcmtfdHJlZSgpOworCQlhcmd2Kys7CisJfQorCWNwLmdpdF9jbWQgPSAxOworCWNwLmFyZ3YgPSAoY29uc3QgY2hhciAqKilhcmd2ICsgMTsKKwlyZXR1cm4gcnVuX2NvbW1hbmQoJmNwKTsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3Qtc3ZuLWZlLmMgYi90L2hlbHBlci90ZXN0LXN2bi1mZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NjdjMDgKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXN2bi1mZS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiB0ZXN0LXN2bi1mZTogQ29kZSB0byBleGVyY2lzZSB0aGUgc3ZuIGltcG9ydCBsaWIKKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAidmNzLXN2bi9zdm5kdW1wLmgiCisjaW5jbHVkZSAidmNzLXN2bi9zdm5kaWZmLmgiCisjaW5jbHVkZSAidmNzLXN2bi9zbGlkaW5nX3dpbmRvdy5oIgorI2luY2x1ZGUgInZjcy1zdm4vbGluZV9idWZmZXIuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdGVzdF9zdm5mZV91c2FnZVtdID0KKwkidGVzdC1zdm4tZmUgKDxkdW1wZmlsZT4gfCBbLWRdIDxwcmVpbWFnZT4gPGRlbHRhPiA8bGVuPikiOworCitzdGF0aWMgaW50IGFwcGx5X2RlbHRhKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgbGluZV9idWZmZXIgcHJlaW1hZ2UgPSBMSU5FX0JVRkZFUl9JTklUOworCXN0cnVjdCBsaW5lX2J1ZmZlciBkZWx0YSA9IExJTkVfQlVGRkVSX0lOSVQ7CisJc3RydWN0IHNsaWRpbmdfdmlldyBwcmVpbWFnZV92aWV3ID0gU0xJRElOR19WSUVXX0lOSVQoJnByZWltYWdlLCAtMSk7CisKKwlpZiAoYXJnYyAhPSA1KQorCQl1c2FnZSh0ZXN0X3N2bmZlX3VzYWdlKTsKKworCWlmIChidWZmZXJfaW5pdCgmcHJlaW1hZ2UsIGFyZ3ZbMl0pKQorCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuIHByZWltYWdlIik7CisJaWYgKGJ1ZmZlcl9pbml0KCZkZWx0YSwgYXJndlszXSkpCisJCWRpZV9lcnJubygiY2Fubm90IG9wZW4gZGVsdGEiKTsKKwlpZiAoc3ZuZGlmZjBfYXBwbHkoJmRlbHRhLCAob2ZmX3QpIHN0cnRvdW1heChhcmd2WzRdLCBOVUxMLCAwKSwKKwkJCQkJJnByZWltYWdlX3ZpZXcsIHN0ZG91dCkpCisJCXJldHVybiAxOworCWlmIChidWZmZXJfZGVpbml0KCZwcmVpbWFnZSkpCisJCWRpZV9lcnJubygiY2Fubm90IGNsb3NlIHByZWltYWdlIik7CisJaWYgKGJ1ZmZlcl9kZWluaXQoJmRlbHRhKSkKKwkJZGllX2Vycm5vKCJjYW5ub3QgY2xvc2UgZGVsdGEiKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJlaW1hZ2Vfdmlldy5idWYpOworCXJldHVybiAwOworfQorCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWlmIChhcmdjID09IDIpIHsKKwkJaWYgKHN2bmR1bXBfaW5pdChhcmd2WzFdKSkKKwkJCXJldHVybiAxOworCQlzdm5kdW1wX3JlYWQoTlVMTCwgInJlZnMvaGVhZHMvbWFzdGVyIiwgInJlZnMvbm90ZXMvc3ZuL3JldnMiKTsKKwkJc3ZuZHVtcF9kZWluaXQoKTsKKwkJc3ZuZHVtcF9yZXNldCgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJnYyA+PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1kIikpCisJCXJldHVybiBhcHBseV9kZWx0YShhcmdjLCBhcmd2KTsKKwl1c2FnZSh0ZXN0X3N2bmZlX3VzYWdlKTsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtdG9vbC5jIGIvdC9oZWxwZXIvdGVzdC10b29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwYjJlZgotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtdG9vbC5jCkBAIC0wLDAgKzEsMTIyIEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAidHJhY2UyLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRlc3RfdG9vbF91c2FnZVtdID0geworCSJ0ZXN0LXRvb2wgWy1DIDxkaXJlY3Rvcnk+XSA8Y29tbWFuZCBbPGFyZ3VtZW50cz4uLi5dXSIsCisJTlVMTAorfTsKKworc3RydWN0IHRlc3RfY21kIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCAoKmZuKShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworfTsKKworc3RhdGljIHN0cnVjdCB0ZXN0X2NtZCBjbWRzW10gPSB7CisJeyAiYWR2aXNlIiwgY21kX19hZHZpc2VfaWZfZW5hYmxlZCB9LAorCXsgImJsb29tIiwgY21kX19ibG9vbSB9LAorCXsgImNobXRpbWUiLCBjbWRfX2NobXRpbWUgfSwKKwl7ICJjb25maWciLCBjbWRfX2NvbmZpZyB9LAorCXsgImN0eXBlIiwgY21kX19jdHlwZSB9LAorCXsgImRhdGUiLCBjbWRfX2RhdGUgfSwKKwl7ICJkZWx0YSIsIGNtZF9fZGVsdGEgfSwKKwl7ICJkaXItaXRlcmF0b3IiLCBjbWRfX2Rpcl9pdGVyYXRvciB9LAorCXsgImRyb3AtY2FjaGVzIiwgY21kX19kcm9wX2NhY2hlcyB9LAorCXsgImR1bXAtY2FjaGUtdHJlZSIsIGNtZF9fZHVtcF9jYWNoZV90cmVlIH0sCisJeyAiZHVtcC1mc21vbml0b3IiLCBjbWRfX2R1bXBfZnNtb25pdG9yIH0sCisJeyAiZHVtcC1zcGxpdC1pbmRleCIsIGNtZF9fZHVtcF9zcGxpdF9pbmRleCB9LAorCXsgImR1bXAtdW50cmFja2VkLWNhY2hlIiwgY21kX19kdW1wX3VudHJhY2tlZF9jYWNoZSB9LAorCXsgImV4YW1wbGUtZGVjb3JhdGUiLCBjbWRfX2V4YW1wbGVfZGVjb3JhdGUgfSwKKwl7ICJnZW5yYW5kb20iLCBjbWRfX2dlbnJhbmRvbSB9LAorCXsgImdlbnplcm9zIiwgY21kX19nZW56ZXJvcyB9LAorCXsgImhhc2htYXAiLCBjbWRfX2hhc2htYXAgfSwKKwl7ICJoYXNoLXNwZWVkIiwgY21kX19oYXNoX3NwZWVkIH0sCisJeyAiaW5kZXgtdmVyc2lvbiIsIGNtZF9faW5kZXhfdmVyc2lvbiB9LAorCXsgImpzb24td3JpdGVyIiwgY21kX19qc29uX3dyaXRlciB9LAorCXsgImxhenktaW5pdC1uYW1lLWhhc2giLCBjbWRfX2xhenlfaW5pdF9uYW1lX2hhc2ggfSwKKwl7ICJtYXRjaC10cmVlcyIsIGNtZF9fbWF0Y2hfdHJlZXMgfSwKKwl7ICJtZXJnZXNvcnQiLCBjbWRfX21lcmdlc29ydCB9LAorCXsgIm1rdGVtcCIsIGNtZF9fbWt0ZW1wIH0sCisJeyAib2lkLWFycmF5IiwgY21kX19vaWRfYXJyYXkgfSwKKwl7ICJvaWRtYXAiLCBjbWRfX29pZG1hcCB9LAorCXsgIm9ubGluZS1jcHVzIiwgY21kX19vbmxpbmVfY3B1cyB9LAorCXsgInBhcnNlLW9wdGlvbnMiLCBjbWRfX3BhcnNlX29wdGlvbnMgfSwKKwl7ICJwYXJzZS1wYXRoc3BlYy1maWxlIiwgY21kX19wYXJzZV9wYXRoc3BlY19maWxlIH0sCisJeyAicGF0aC11dGlscyIsIGNtZF9fcGF0aF91dGlscyB9LAorCXsgInBrdC1saW5lIiwgY21kX19wa3RfbGluZSB9LAorCXsgInByaW8tcXVldWUiLCBjbWRfX3ByaW9fcXVldWUgfSwKKwl7ICJwcm9ncmVzcyIsIGNtZF9fcHJvZ3Jlc3MgfSwKKwl7ICJyZWFjaCIsIGNtZF9fcmVhY2ggfSwKKwl7ICJyZWFkLWNhY2hlIiwgY21kX19yZWFkX2NhY2hlIH0sCisJeyAicmVhZC1ncmFwaCIsIGNtZF9fcmVhZF9ncmFwaCB9LAorCXsgInJlYWQtbWlkeCIsIGNtZF9fcmVhZF9taWR4IH0sCisJeyAicmVmLXN0b3JlIiwgY21kX19yZWZfc3RvcmUgfSwKKwl7ICJyZWdleCIsIGNtZF9fcmVnZXggfSwKKwl7ICJyZXBvc2l0b3J5IiwgY21kX19yZXBvc2l0b3J5IH0sCisJeyAicmV2aXNpb24td2Fsa2luZyIsIGNtZF9fcmV2aXNpb25fd2Fsa2luZyB9LAorCXsgInJ1bi1jb21tYW5kIiwgY21kX19ydW5fY29tbWFuZCB9LAorCXsgInNjcmFwLWNhY2hlLXRyZWUiLCBjbWRfX3NjcmFwX2NhY2hlX3RyZWUgfSwKKwl7ICJzZXJ2ZS12MiIsIGNtZF9fc2VydmVfdjIgfSwKKwl7ICJzaGExIiwgY21kX19zaGExIH0sCisJeyAic2hhMjU2IiwgY21kX19zaGEyNTYgfSwKKwl7ICJzaWdjaGFpbiIsIGNtZF9fc2lnY2hhaW4gfSwKKwl7ICJzdHJjbXAtb2Zmc2V0IiwgY21kX19zdHJjbXBfb2Zmc2V0IH0sCisJeyAic3RyaW5nLWxpc3QiLCBjbWRfX3N0cmluZ19saXN0IH0sCisJeyAic3VibW9kdWxlLWNvbmZpZyIsIGNtZF9fc3VibW9kdWxlX2NvbmZpZyB9LAorCXsgInN1Ym1vZHVsZS1uZXN0ZWQtcmVwby1jb25maWciLCBjbWRfX3N1Ym1vZHVsZV9uZXN0ZWRfcmVwb19jb25maWcgfSwKKwl7ICJzdWJwcm9jZXNzIiwgY21kX19zdWJwcm9jZXNzIH0sCisJeyAidHJhY2UyIiwgY21kX190cmFjZTIgfSwKKwl7ICJ1cmxtYXRjaC1ub3JtYWxpemF0aW9uIiwgY21kX191cmxtYXRjaF9ub3JtYWxpemF0aW9uIH0sCisJeyAieG1sLWVuY29kZSIsIGNtZF9feG1sX2VuY29kZSB9LAorCXsgIndpbGRtYXRjaCIsIGNtZF9fd2lsZG1hdGNoIH0sCisjaWZkZWYgR0lUX1dJTkRPV1NfTkFUSVZFCisJeyAid2luZG93cy1uYW1lZC1waXBlIiwgY21kX193aW5kb3dzX25hbWVkX3BpcGUgfSwKKyNlbmRpZgorCXsgIndyaXRlLWNhY2hlIiwgY21kX193cml0ZV9jYWNoZSB9LAorfTsKKworc3RhdGljIE5PUkVUVVJOIHZvaWQgZGllX3VzYWdlKHZvaWQpCit7CisJc2l6ZV90IGk7CisKKwlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiB0ZXN0LXRvb2wgPHRvb2xuYW1lPiBbYXJnc11cbiIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNtZHMpOyBpKyspCisJCWZwcmludGYoc3RkZXJyLCAiICAlc1xuIiwgY21kc1tpXS5uYW1lKTsKKwlleGl0KDEyOCk7Cit9CisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGk7CisJY29uc3QgY2hhciAqd29ya2luZ19kaXJlY3RvcnkgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKCdDJywgTlVMTCwgJndvcmtpbmdfZGlyZWN0b3J5LCAiZGlyZWN0b3J5IiwKKwkJCSAgICJjaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IiksCisJCU9QVF9FTkQoKQorCX07CisKKwlCVUdfZXhpdF9jb2RlID0gOTk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgdGVzdF90b29sX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OIHwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjApOworCisJaWYgKGFyZ2MgPCAyKQorCQlkaWVfdXNhZ2UoKTsKKworCWlmICh3b3JraW5nX2RpcmVjdG9yeSAmJiBjaGRpcih3b3JraW5nX2RpcmVjdG9yeSkgPCAwKQorCQlkaWUoIkNvdWxkIG5vdCBjZCB0byAnJXMnIiwgd29ya2luZ19kaXJlY3RvcnkpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY21kcyk7IGkrKykgeworCQlpZiAoIXN0cmNtcChjbWRzW2ldLm5hbWUsIGFyZ3ZbMV0pKSB7CisJCQlhcmd2Kys7CisJCQlhcmdjLS07CisJCQl0cmFjZTJfY21kX25hbWUoY21kc1tpXS5uYW1lKTsKKwkJCXRyYWNlMl9jbWRfbGlzdF9jb25maWcoKTsKKwkJCXRyYWNlMl9jbWRfbGlzdF9lbnZfdmFycygpOworCQkJcmV0dXJuIGNtZHNbaV0uZm4oYXJnYywgYXJndik7CisJCX0KKwl9CisJZXJyb3IoInRoZXJlIGlzIG5vIHRvb2wgbmFtZWQgJyVzJyIsIGFyZ3ZbMV0pOworCWRpZV91c2FnZSgpOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC10b29sLmggYi90L2hlbHBlci90ZXN0LXRvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGM4ZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC10b29sLmgKQEAgLTAsMCArMSw3MCBAQAorI2lmbmRlZiBURVNUX1RPT0xfSAorI2RlZmluZSBURVNUX1RPT0xfSAorCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKworaW50IGNtZF9fYWR2aXNlX2lmX2VuYWJsZWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX2Jsb29tKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19jaG10aW1lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19jb25maWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX2N0eXBlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19kYXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19kZWx0YShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fZGlyX2l0ZXJhdG9yKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19kcm9wX2NhY2hlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fZHVtcF9jYWNoZV90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19kdW1wX2ZzbW9uaXRvcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fZHVtcF9zcGxpdF9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fZHVtcF91bnRyYWNrZWRfY2FjaGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX2V4YW1wbGVfZGVjb3JhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX2dlbnJhbmRvbShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fZ2VuemVyb3MoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX2hhc2htYXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX2hhc2hfc3BlZWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX2luZGV4X3ZlcnNpb24oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX2pzb25fd3JpdGVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19sYXp5X2luaXRfbmFtZV9oYXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19tYXRjaF90cmVlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fbWVyZ2Vzb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19ta3RlbXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX29pZG1hcChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fb25saW5lX2NwdXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3BhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3BhcnNlX3BhdGhzcGVjX2ZpbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KTsKK2ludCBjbWRfX3BhdGhfdXRpbHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3BrdF9saW5lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19wcmlvX3F1ZXVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19wcm9ncmVzcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fcmVhY2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3JlYWRfY2FjaGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3JlYWRfZ3JhcGgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3JlYWRfbWlkeChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fcmVmX3N0b3JlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19yZWdleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fcmVwb3NpdG9yeShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fcmV2aXNpb25fd2Fsa2luZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fcnVuX2NvbW1hbmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3NjcmFwX2NhY2hlX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3NlcnZlX3YyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19zaGExKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19vaWRfYXJyYXkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3NoYTI1NihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fc2lnY2hhaW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3N0cmNtcF9vZmZzZXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3N0cmluZ19saXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19zdWJtb2R1bGVfY29uZmlnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19zdWJtb2R1bGVfbmVzdGVkX3JlcG9fY29uZmlnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19zdWJwcm9jZXNzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX190cmFjZTIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3VybG1hdGNoX25vcm1hbGl6YXRpb24oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3htbF9lbmNvZGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3dpbGRtYXRjaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworI2lmZGVmIEdJVF9XSU5ET1dTX05BVElWRQoraW50IGNtZF9fd2luZG93c19uYW1lZF9waXBlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CisjZW5kaWYKK2ludCBjbWRfX3dyaXRlX2NhY2hlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CisKK2ludCBjbWRfaGFzaF9pbXBsKGludCBhYywgY29uc3QgY2hhciAqKmF2LCBpbnQgYWxnbyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC10cmFjZTIuYyBiL3QvaGVscGVyL3Rlc3QtdHJhY2UyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk3ODE5YwotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtdHJhY2UyLmMKQEAgLTAsMCArMSwyNzMgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisKK3R5cGVkZWYgaW50KGZuX3VuaXRfdGVzdCkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKKworc3RydWN0IHVuaXRfdGVzdCB7CisJZm5fdW5pdF90ZXN0ICp1dF9mbjsKKwljb25zdCBjaGFyICp1dF9uYW1lOworCWNvbnN0IGNoYXIgKnV0X3VzYWdlOworfTsKKworI2RlZmluZSBNeU9rIDAKKyNkZWZpbmUgTXlFcnJvciAxCisKK3N0YXRpYyBpbnQgZ2V0X2koaW50ICpwX3ZhbHVlLCBjb25zdCBjaGFyICpkYXRhKQoreworCWNoYXIgKmVuZHB0cjsKKworCWlmICghZGF0YSB8fCAhKmRhdGEpCisJCXJldHVybiBNeUVycm9yOworCisJKnBfdmFsdWUgPSBzdHJ0b2woZGF0YSwgJmVuZHB0ciwgMTApOworCWlmICgqZW5kcHRyIHx8IGVycm5vID09IEVSQU5HRSkKKwkJcmV0dXJuIE15RXJyb3I7CisKKwlyZXR1cm4gTXlPazsKK30KKworLyoKKyAqIENhdXNlIHByb2Nlc3MgdG8gZXhpdCB3aXRoIHRoZSByZXF1ZXN0ZWQgdmFsdWUgdmlhICJyZXR1cm4iLgorICoKKyAqIFJlbHkgb24gdGVzdC10b29sLmM6Y21kX21haW4oKSB0byBjYWxsIHRyYWNlMl9jbWRfZXhpdCgpCisgKiB3aXRoIG91ciByZXN1bHQuCisgKgorICogVGVzdCBoYXJuZXNzIGNhbiBjb25maXJtOgorICogW10gdGhlIHByb2Nlc3MtZXhpdCB2YWx1ZS4KKyAqIFtdIHRoZSAiY29kZSIgZmllbGQgaW4gdGhlICJleGl0IiB0cmFjZTIgZXZlbnQuCisgKiBbXSB0aGUgImNvZGUiIGZpZWxkIGluIHRoZSAiYXRleGl0IiB0cmFjZTIgZXZlbnQuCisgKiBbXSB0aGUgIm5hbWUiIGZpZWxkIGluIHRoZSAiY21kX25hbWUiIHRyYWNlMiBldmVudC4KKyAqIFtdICJkZWZfcGFyYW0iIGV2ZW50cyBmb3IgYWxsIG9mIHRoZSAiaW50ZXJlc3RpbmciIHByZS1kZWZpbmVkCisgKiBjb25maWcgc2V0dGluZ3MuCisgKi8KK3N0YXRpYyBpbnQgdXRfMDAxcmV0dXJuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgcmM7CisKKwlpZiAoZ2V0X2koJnJjLCBhcmd2WzBdKSkKKwkJZGllKCJleHBlY3QgPGV4aXRfY29kZT4iKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENhdXNlIHRoZSBwcm9jZXNzIHRvIGV4aXQgd2l0aCB0aGUgcmVxdWVzdGVkIHZhbHVlIHZpYSAiZXhpdCgpIi4KKyAqCisgKiBUZXN0IGhhcm5lc3MgY2FuIGNvbmZpcm06CisgKiBbXSB0aGUgImNvZGUiIGZpZWxkIGluIHRoZSAiZXhpdCIgdHJhY2UyIGV2ZW50LgorICogW10gdGhlICJjb2RlIiBmaWVsZCBpbiB0aGUgImF0ZXhpdCIgdHJhY2UyIGV2ZW50LgorICogW10gdGhlICJuYW1lIiBmaWVsZCBpbiB0aGUgImNtZF9uYW1lIiB0cmFjZTIgZXZlbnQuCisgKiBbXSAiZGVmX3BhcmFtIiBldmVudHMgZm9yIGFsbCBvZiB0aGUgImludGVyZXN0aW5nIiBwcmUtZGVmaW5lZAorICogY29uZmlnIHNldHRpbmdzLgorICovCitzdGF0aWMgaW50IHV0XzAwMmV4aXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCByYzsKKworCWlmIChnZXRfaSgmcmMsIGFyZ3ZbMF0pKQorCQlkaWUoImV4cGVjdCA8ZXhpdF9jb2RlPiIpOworCisJZXhpdChyYyk7Cit9CisKKy8qCisgKiBTZW5kIGFuICJlcnJvciIgZXZlbnQgd2l0aCBlYWNoIHZhbHVlIGluIGFyZ3YuICBOb3JtYWxseSwgZ2l0IG9ubHkgaXNzdWVzCisgKiBhIHNpbmdsZSAiZXJyb3IiIGV2ZW50IGltbWVkaWF0ZWx5IGJlZm9yZSBpc3N1aW5nIGFuICJleGl0IiBldmVudCAoc3VjaAorICogYXMgaW4gZGllKCkgb3IgQlVHKCkpLCBidXQgbXVsdGlwbGUgImVycm9yIiBldmVudHMgYXJlIGFsbG93ZWQuCisgKgorICogVGVzdCBoYXJuZXNzIGNhbiBjb25maXJtOgorICogW10gYSB0cmFjZTIgImVycm9yIiBldmVudCBmb3IgZWFjaCB2YWx1ZSBpbiBhcmd2LgorICogW10gdGhlICJuYW1lIiBmaWVsZCBpbiB0aGUgImNtZF9uYW1lIiB0cmFjZTIgZXZlbnQuCisgKiBbXSAob3B0aW9uYWwpIHRoZSBmaWxlOmxpbmUgaW4gdGhlICJleGl0IiBldmVudCByZWZlcnMgdG8gdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGludCB1dF8wMDNlcnJvcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGs7CisKKwlpZiAoIWFyZ3ZbMF0gfHwgISphcmd2WzBdKQorCQlkaWUoImV4cGVjdCA8ZXJyb3JfbWVzc2FnZT4iKTsKKworCWZvciAoayA9IDA7IGsgPCBhcmdjOyBrKyspCisJCWVycm9yKCIlcyIsIGFyZ3Zba10pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSdW4gYSBjaGlsZCBwcm9jZXNzIGFuZCB3YWl0IGZvciBpdCB0byBmaW5pc2ggYW5kIGV4aXQgd2l0aCBpdHMgcmV0dXJuIGNvZGUuCisgKiB0ZXN0LXRvb2wgdHJhY2UyIDAwNGNoaWxkIFs8Y2hpbGQtY29tbWFuZC1saW5lPl0KKyAqCisgKiBGb3IgZXhhbXBsZToKKyAqIHRlc3QtdG9vbCB0cmFjZTIgMDA0Y2hpbGQgZ2l0IHZlcnNpb24KKyAqIHRlc3QtdG9vbCB0cmFjZTIgMDA0Y2hpbGQgdGVzdC10b29sIHRyYWNlMiAwMDFyZXR1cm4gMAorICogdGVzdC10b29sIHRyYWNlMiAwMDRjaGlsZCB0ZXN0LXRvb2wgdHJhY2UyIDAwNGNoaWxkIHRlc3QtdG9vbCB0cmFjZTIgMDA0Y2hpbGQKKyAqIHRlc3QtdG9vbCB0cmFjZTIgMDA0Y2hpbGQgZ2l0IC1jIGFsaWFzLnh5ej12ZXJzaW9uIHh5egorICoKKyAqIFRlc3QgaGFybmVzcyBjYW4gY29uZmlybToKKyAqIFtdIHRoZSAibmFtZSIgZmllbGQgaW4gdGhlICJjbWRfbmFtZSIgdHJhY2UyIGV2ZW50LgorICogW10gdGhhdCB0aGUgb3V0ZXIgcHJvY2VzcyBoYXMgYSBzaW5nbGUgY29tcG9uZW50IFNJRCAob3IgZGVwdGggImQwIiBpbgorICogICAgdGhlIFBFUkYgc3RyZWFtKS4KKyAqIFtdIHRoYXQgImNoaWxkX3N0YXJ0IiBhbmQgImNoaWxkX2V4aXQiIGV2ZW50cyBhcmUgZ2VuZXJhdGVkIGZvciB0aGUgY2hpbGQuCisgKiBbXSBpZiB0aGUgY2hpbGQgcHJvY2VzcyBpcyBhbiBpbnN0cnVtZW50ZWQgZXhlY3V0YWJsZToKKyAqICAgIFtdIHRoYXQgInZlcnNpb24iLCAic3RhcnQiLCAuLi4sICJleGl0IiwgYW5kICJhdGV4aXQiIGV2ZW50cyBhcmUKKyAqICAgICAgIGdlbmVyYXRlZCBieSB0aGUgY2hpbGQgcHJvY2Vzcy4KKyAqICAgIFtdIHRoYXQgdGhlIGNoaWxkIHByb2Nlc3MgZXZlbnRzIGhhdmUgYSBtdWx0aXBsZSBjb21wb25lbnQgU0lEIChvcgorICogICAgICAgZGVwdGggImROKzEiIGluIHRoZSBQRVJGIHN0cmVhbSkuCisgKiBbXSB0aGF0IHRoZSBjaGlsZCBleGl0IGNvZGUgaXMgcHJvcGFnYXRlZCB0byB0aGUgcGFyZW50IHByb2Nlc3MgImV4aXQiCisgKiAgICBhbmQgImF0ZXhpdCIgZXZlbnRzLi4KKyAqIFtdIChvcHRpb25hbCkgdGhhdCB0aGUgInRfYWJzIiBmaWVsZCBpbiB0aGUgY2hpbGQgcHJvY2VzcyAiYXRleGl0IiBldmVudAorICogICAgaXMgbGVzcyB0aGFuIHRoZSAidF9yZWwiIGZpZWxkIGluIHRoZSAiY2hpbGRfZXhpdCIgZXZlbnQgb2YgdGhlIHBhcmVudAorICogICAgcHJvY2Vzcy4KKyAqIFtdIGlmIHRoZSBjaGlsZCBwcm9jZXNzIGlzIGxpa2UgdGhlIGFsaWFzIGV4YW1wbGUgYWJvdmUsCisgKiAgICBbXSAob3B0aW9uYWwpIHRoZSBjaGlsZCBwcm9jZXNzIGF0dGVtcHRzIHRvIHJ1biAiZ2l0LXh5eCIgYXMgYSBkYXNoZWQKKyAqICAgICAgIGNvbW1hbmQuCisgKiAgICBbXSB0aGUgY2hpbGQgcHJvY2VzcyBlbWl0cyBhbiAiYWxpYXMiIGV2ZW50IHdpdGggInh5eiIgPT4gInZlcnNpb24iCisgKiAgICBbXSB0aGUgY2hpbGQgcHJvY2VzcyBydW5zICJnaXQgdmVyc2lvbiIgYXMgYSBjaGlsZCBwcm9jZXNzLgorICogICAgW10gdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGEgMyBjb21wb25lbnQgU0lEIChvciBkZXB0aCAiZDIiIGluIHRoZSBQRVJGCisgKiAgICAgICBzdHJlYW0pLgorICovCitzdGF0aWMgaW50IHV0XzAwNGNoaWxkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgcmVzdWx0OworCisJLyoKKwkgKiBBbGxvdyBlbXB0eSA8Y2hpbGRfY29tbWFuZF9saW5lPiBzbyB3ZSBjYW4gZG8gYXJiaXRyYXJpbHkgZGVlcAorCSAqIGNvbW1hbmQgbmVzdGluZyBhbmQgbGV0IHRoZSBsYXN0IG9uZSBiZSBudWxsLgorCSAqLworCWlmICghYXJnYykKKwkJcmV0dXJuIDA7CisKKwlyZXN1bHQgPSBydW5fY29tbWFuZF92X29wdChhcmd2LCAwKTsKKwlleGl0KHJlc3VsdCk7Cit9CisKKy8qCisgKiBFeGVjIGEgZ2l0IGNvbW1hbmQuICBUaGlzIG1heSBlaXRoZXIgY3JlYXRlIGEgY2hpbGQgcHJvY2VzcyAoV2luZG93cykKKyAqIG9yIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHByb2Nlc3MuCisgKiB0ZXN0LXRvb2wgdHJhY2UyIDAwNWV4ZWMgPGdpdF9jb21tYW5kX2FyZ3M+CisgKgorICogRm9yIGV4YW1wbGU6CisgKiB0ZXN0LXRvb2wgdHJhY2UyIDAwNWV4ZWMgdmVyc2lvbgorICoKKyAqIFRlc3QgaGFybmVzcyBjYW4gY29uZmlybSAob24gV2luZG93cyk6CisgKiBbXSB0aGUgIm5hbWUiIGZpZWxkIGluIHRoZSAiY21kX25hbWUiIHRyYWNlMiBldmVudC4KKyAqIFtdIHRoYXQgdGhlIG91dGVyIHByb2Nlc3MgaGFzIGEgc2luZ2xlIGNvbXBvbmVudCBTSUQgKG9yIGRlcHRoICJkMCIgaW4KKyAqICAgIHRoZSBQRVJGIHN0cmVhbSkuCisgKiBbXSB0aGF0ICJleGVjIiBhbmQgImV4ZWNfcmVzdWx0IiBldmVudHMgYXJlIGdlbmVyYXRlZCBmb3IgdGhlIGNoaWxkCisgKiAgICBwcm9jZXNzIChzaW5jZSB0aGUgV2luZG93cyBjb21wYXRpYmlsaXR5IGxheWVyIGZha2VzIGFuIGV4ZWMoKSB3aXRoCisgKiAgICBhIENyZWF0ZVByb2Nlc3MoKSwgV2FpdEZvclNpbmdsZU9iamVjdCgpLCBhbmQgZXhpdCgpKS4KKyAqIFtdIHRoYXQgdGhlIGNoaWxkIHByb2Nlc3MgaGFzIG11bHRpcGxlIGNvbXBvbmVudCBTSUQgKG9yIGRlcHRoICJkTisxIgorICogICAgaW4gdGhlIFBFUkYgc3RyZWFtKS4KKyAqCisgKiBUZXN0IGhhcm5lc3MgY2FuIGNvbmZpcm0gKG9uIHBsYXRmb3JtcyB3aXRoIGEgcmVhbCBleGVjKCkgZnVuY3Rpb24pOgorICogW10gVE9ETyB0YWxrIGFib3V0IHByb2Nlc3MgcmVwbGFjZW1lbnQgYW5kIGhvdyBpdCBhZmZlY3RzIFNJRC4KKyAqLworc3RhdGljIGludCB1dF8wMDVleGVjKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgcmVzdWx0OworCisJaWYgKCFhcmdjKQorCQlyZXR1cm4gMDsKKworCXJlc3VsdCA9IGV4ZWN2X2dpdF9jbWQoYXJndik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB1dF8wMDZkYXRhKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICp1c2FnZV9lcnJvciA9CisJCSJleHBlY3QgPGNhdDA+IDxrMD4gPHYwPiBbPGNhdDE+IDxrMT4gPHYxPiBbLi4uXV0iOworCisJaWYgKGFyZ2MgJSAzICE9IDApCisJCWRpZSgiJXMiLCB1c2FnZV9lcnJvcik7CisKKwl3aGlsZSAoYXJnYykgeworCQlpZiAoIWFyZ3ZbMF0gfHwgISphcmd2WzBdIHx8ICFhcmd2WzFdIHx8ICEqYXJndlsxXSB8fAorCQkgICAgIWFyZ3ZbMl0gfHwgISphcmd2WzJdKQorCQkJZGllKCIlcyIsIHVzYWdlX2Vycm9yKTsKKworCQl0cmFjZTJfZGF0YV9zdHJpbmcoYXJndlswXSwgdGhlX3JlcG9zaXRvcnksIGFyZ3ZbMV0sIGFyZ3ZbMl0pOworCQlhcmd2ICs9IDM7CisJCWFyZ2MgLT0gMzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFVzYWdlOgorICogICAgIHRlc3QtdG9vbCB0cmFjZTIgPHV0X25hbWVfMT4gPHV0X3VzYWdlXzE+CisgKiAgICAgdGVzdC10b29sIHRyYWNlMiA8dXRfbmFtZV8yPiA8dXRfdXNhZ2VfMj4KKyAqICAgICAuLi4KKyAqLworI2RlZmluZSBVU0FHRV9QUkVGSVggInRlc3QtdG9vbCB0cmFjZTIiCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgdW5pdF90ZXN0IHV0X3RhYmxlW10gPSB7CisJeyB1dF8wMDFyZXR1cm4sICAgIjAwMXJldHVybiIsICI8ZXhpdF9jb2RlPiIgfSwKKwl7IHV0XzAwMmV4aXQsICAgICAiMDAyZXhpdCIsICAgIjxleGl0X2NvZGU+IiB9LAorCXsgdXRfMDAzZXJyb3IsICAgICIwMDNlcnJvciIsICAiPGVycm9yX21lc3NhZ2U+KyIgfSwKKwl7IHV0XzAwNGNoaWxkLCAgICAiMDA0Y2hpbGQiLCAgIls8Y2hpbGRfY29tbWFuZF9saW5lPl0iIH0sCisJeyB1dF8wMDVleGVjLCAgICAgIjAwNWV4ZWMiLCAgICI8Z2l0X2NvbW1hbmRfYXJncz4iIH0sCisJeyB1dF8wMDZkYXRhLCAgICAgIjAwNmRhdGEiLCAgICJbPGNhdGVnb3J5PiA8a2V5PiA8dmFsdWU+XSsiIH0sCit9OworLyogY2xhbmctZm9ybWF0IG9uICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyNkZWZpbmUgZm9yX2VhY2hfdXQoaywgdXRfaykJCQlcCisJZm9yIChrID0gMCwgdXRfayA9ICZ1dF90YWJsZVtrXTsJXAorCSAgICAgayA8IEFSUkFZX1NJWkUodXRfdGFibGUpOwkJXAorCSAgICAgaysrLCB1dF9rID0gJnV0X3RhYmxlW2tdKQorLyogY2xhbmctZm9ybWF0IG9uICovCisKK3N0YXRpYyBpbnQgcHJpbnRfdXNhZ2Uodm9pZCkKK3sKKwlpbnQgazsKKwlzdHJ1Y3QgdW5pdF90ZXN0ICp1dF9rOworCisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTpcbiIpOworCWZvcl9lYWNoX3V0IChrLCB1dF9rKQorCQlmcHJpbnRmKHN0ZGVyciwgIlx0JXMgJXMgJXNcbiIsIFVTQUdFX1BSRUZJWCwgdXRfay0+dXRfbmFtZSwKKwkJCXV0X2stPnV0X3VzYWdlKTsKKworCXJldHVybiAxMjk7Cit9CisKKy8qCisgKiBJc3N1ZSB2YXJpb3VzIHRyYWNlMiBldmVudHMgZm9yIHRlc3RpbmcuCisgKgorICogV2UgYXNzdW1lIHRoYXQgdGhlc2UgdHJhY2UyIHJvdXRpbmVzIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkOgorICogICAgW10gdHJhY2UyX2luaXRpYWxpemUoKSAgICAgIFtjb21tb24tbWFpbi5jOm1haW4oKV0KKyAqICAgIFtdIHRyYWNlMl9jbWRfc3RhcnQoKSAgICAgICBbY29tbW9uLW1haW4uYzptYWluKCldCisgKiAgICBbXSB0cmFjZTJfY21kX25hbWUoKSAgICAgICAgW3Rlc3QtdG9vbC5jOmNtZF9tYWluKCldCisgKiAgICBbXSB0cmFjZDJfY21kX2xpc3RfY29uZmlnKCkgW3Rlc3QtdG9vbC5jOmNtZF9tYWluKCldCisgKiBTbyB0aGF0OgorICogICAgW10gdGhlIHZhcmlvdXMgdHJhY2UyIHN0cmVhbXMgYXJlIG9wZW4uCisgKiAgICBbXSB0aGUgcHJvY2VzcyBTSUQgaGFzIGJlZW4gY3JlYXRlZC4KKyAqICAgIFtdIHRoZSAidmVyc2lvbiIgZXZlbnQgaGFzIGJlZW4gZ2VuZXJhdGVkLgorICogICAgW10gdGhlICJzdGFydCIgZXZlbnQgaGFzIGJlZW4gZ2VuZXJhdGVkLgorICogICAgW10gdGhlICJjbWRfbmFtZSIgZXZlbnQgaGFzIGJlZW4gZ2VuZXJhdGVkLgorICogICAgW10gdGhpcyB3cml0ZXMgdmFyaW91cyAiZGVmX3BhcmFtIiBldmVudHMgZm9yIGludGVyZXN0aW5nIGNvbmZpZyB2YWx1ZXMuCisgKgorICogV2UgZnVydGhlciBhc3N1bWUgdGhhdCBpZiB3ZSByZXR1cm4gKHJhdGhlciB0aGFuIGV4aXQoKSksIHRyYWNlMl9jbWRfZXhpdCgpCisgKiB3aWxsIGJlIGNhbGxlZCBieSB0ZXN0LXRvb2wuYzpjbWRfbWFpbigpLgorICovCitpbnQgY21kX190cmFjZTIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBrOworCXN0cnVjdCB1bml0X3Rlc3QgKnV0X2s7CisKKwlhcmdjLS07IC8qIHNraXAgb3ZlciAidHJhY2UyIiBhcmcgKi8KKwlhcmd2Kys7CisKKwlpZiAoYXJnYykKKwkJZm9yX2VhY2hfdXQgKGssIHV0X2spCisJCQlpZiAoIXN0cmNtcChhcmd2WzBdLCB1dF9rLT51dF9uYW1lKSkKKwkJCQlyZXR1cm4gdXRfay0+dXRfZm4oYXJnYyAtIDEsIGFyZ3YgKyAxKTsKKworCXJldHVybiBwcmludF91c2FnZSgpOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uLmMgYi90L2hlbHBlci90ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjRkNjdlCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uLmMKQEAgLTAsMCArMSw1MSBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInVybG1hdGNoLmgiCisKK2ludCBjbWRfX3VybG1hdGNoX25vcm1hbGl6YXRpb24oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgdXNhZ2VbXSA9ICJ0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiBbLXAgfCAtbF0gPHVybDE+IHwgPHVybDE+IDx1cmwyPiI7CisJY2hhciAqdXJsMSwgKnVybDI7CisJaW50IG9wdF9wID0gMCwgb3B0X2wgPSAwOworCisJLyoKKwkgKiBGb3Igb25lIHVybCwgc3VjY2VlZCBpZiB1cmxfbm9ybWFsaXplIHN1Y2NlZWRzIG9uIGl0LCBmYWlsIG90aGVyd2lzZS4KKwkgKiBGb3IgdHdvIHVybHMsIHN1Y2NlZWQgb25seSBpZiB1cmxfbm9ybWFsaXplIHN1Y2NlZWRzIG9uIGJvdGggYW5kCisJICogdGhlIHJlc3VsdHMgY29tcGFyZSBlcXVhbCB3aXRoIHN0cmNtcC4gIElmIC1wIGlzIGdpdmVuIChvbmUgdXJsIG9ubHkpCisJICogYW5kIHVybF9ub3JtYWxpemUgc3VjY2VlZHMsIHByaW50IHRoZSByZXN1bHQgZm9sbG93ZWQgYnkgIlxuIi4gIElmCisJICogLWwgaXMgZ2l2ZW4gKG9uZSB1cmwgb25seSkgYW5kIHVybF9ub3JtYWxpemUgc3VjY2VlZHMsIHByaW50IHRoZQorCSAqIHJldHVybmVkIGxlbmd0aCBpbiBkZWNpbWFsIGZvbGxvd2VkIGJ5ICJcbiIuCisJICovCisKKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcChhcmd2WzFdLCAiLXAiKSkgeworCQlvcHRfcCA9IDE7CisJCWFyZ2MtLTsKKwkJYXJndisrOworCX0gZWxzZSBpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWwiKSkgeworCQlvcHRfbCA9IDE7CisJCWFyZ2MtLTsKKwkJYXJndisrOworCX0KKworCWlmIChhcmdjIDwgMiB8fCBhcmdjID4gMykKKwkJZGllKCIlcyIsIHVzYWdlKTsKKworCWlmIChhcmdjID09IDIpIHsKKwkJc3RydWN0IHVybF9pbmZvIGluZm87CisJCXVybDEgPSB1cmxfbm9ybWFsaXplKGFyZ3ZbMV0sICZpbmZvKTsKKwkJaWYgKCF1cmwxKQorCQkJcmV0dXJuIDE7CisJCWlmIChvcHRfcCkKKwkJCXByaW50ZigiJXNcbiIsIHVybDEpOworCQlpZiAob3B0X2wpCisJCQlwcmludGYoIiV1XG4iLCAodW5zaWduZWQpaW5mby51cmxfbGVuKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG9wdF9wIHx8IG9wdF9sKQorCQlkaWUoIiVzIiwgdXNhZ2UpOworCisJdXJsMSA9IHVybF9ub3JtYWxpemUoYXJndlsxXSwgTlVMTCk7CisJdXJsMiA9IHVybF9ub3JtYWxpemUoYXJndlsyXSwgTlVMTCk7CisJcmV0dXJuICh1cmwxICYmIHVybDIgJiYgIXN0cmNtcCh1cmwxLCB1cmwyKSkgPyAwIDogMTsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3Qtd2lsZG1hdGNoLmMgYi90L2hlbHBlci90ZXN0LXdpbGRtYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMTAzZDEKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXdpbGRtYXRjaC5jCkBAIC0wLDAgKzEsMjQgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCitpbnQgY21kX193aWxkbWF0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpOworCWZvciAoaSA9IDI7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKGFyZ3ZbaV1bMF0gPT0gJy8nKQorCQkJZGllKCJGb3J3YXJkIHNsYXNoIGlzIG5vdCBhbGxvd2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlXG4iCisJCQkgICAgInBhdHRlcm4gYmVjYXVzZSBXaW5kb3dzIGRvZXMgbm90IGxpa2UgaXQuIFVzZSBgWFhYLycgaW5zdGVhZC4iKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAoYXJndltpXSwgIlhYWC8iLCA0KSkKKwkJCWFyZ3ZbaV0gKz0gMzsKKwl9CisJaWYgKCFzdHJjbXAoYXJndlsxXSwgIndpbGRtYXRjaCIpKQorCQlyZXR1cm4gISF3aWxkbWF0Y2goYXJndlszXSwgYXJndlsyXSwgV01fUEFUSE5BTUUpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIml3aWxkbWF0Y2giKSkKKwkJcmV0dXJuICEhd2lsZG1hdGNoKGFyZ3ZbM10sIGFyZ3ZbMl0sIFdNX1BBVEhOQU1FIHwgV01fQ0FTRUZPTEQpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInBhdGhtYXRjaCIpKQorCQlyZXR1cm4gISF3aWxkbWF0Y2goYXJndlszXSwgYXJndlsyXSwgMCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiaXBhdGhtYXRjaCIpKQorCQlyZXR1cm4gISF3aWxkbWF0Y2goYXJndlszXSwgYXJndlsyXSwgV01fQ0FTRUZPTEQpOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXdpbmRvd3MtbmFtZWQtcGlwZS5jIGIvdC9oZWxwZXIvdGVzdC13aW5kb3dzLW5hbWVkLXBpcGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTUyMTgzCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC13aW5kb3dzLW5hbWVkLXBpcGUuYwpAQCAtMCwwICsxLDcyIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKKyNpZmRlZiBHSVRfV0lORE9XU19OQVRJVkUKK3N0YXRpYyBjb25zdCBjaGFyICp1c2FnZV9zdHJpbmcgPSAiPHBpcGUtZmlsZW5hbWU+IjsKKworI2RlZmluZSBURVNUX0JVRlNJWkUgKDQwOTYpCisKK2ludCBjbWRfX3dpbmRvd3NfbmFtZWRfcGlwZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJc3RydWN0IHN0cmJ1ZiBwYXRobmFtZSA9IFNUUkJVRl9JTklUOworCWludCBlcnI7CisJSEFORExFIGg7CisJQk9PTCBjb25uZWN0ZWQ7CisJY2hhciBidWZbVEVTVF9CVUZTSVpFICsgMV07CisKKwlpZiAoYXJnYyA8IDIpCisJCWdvdG8gcHJpbnRfdXNhZ2U7CisJZmlsZW5hbWUgPSBhcmd2WzFdOworCWlmIChzdHJwYnJrKGZpbGVuYW1lLCAiL1xcIikpCisJCWdvdG8gcHJpbnRfdXNhZ2U7CisJc3RyYnVmX2FkZGYoJnBhdGhuYW1lLCAiLy8uL3BpcGUvJXMiLCBmaWxlbmFtZSk7CisKKwkvKgorCSAqIENyZWF0ZSBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGUgc2VydmVyIHNpZGUgb2YgdGhlIG5hbWVkIHBpcGUuCisJICogVGhpcyB3aWxsIGFsbG93IGV4YWN0bHkgb25lIGNsaWVudCBpbnN0YW5jZSB0byBjb25uZWN0IHRvIGl0LgorCSAqLworCWggPSBDcmVhdGVOYW1lZFBpcGVBKAorCQlwYXRobmFtZS5idWYsCisJCVBJUEVfQUNDRVNTX0lOQk9VTkQgfCBGSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRSwKKwkJUElQRV9UWVBFX01FU1NBR0UgfCBQSVBFX1JFQURNT0RFX01FU1NBR0UgfCBQSVBFX1dBSVQsCisJCVBJUEVfVU5MSU1JVEVEX0lOU1RBTkNFUywKKwkJVEVTVF9CVUZTSVpFLCBURVNUX0JVRlNJWkUsIDAsIE5VTEwpOworCWlmIChoID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisJCWVyciA9IGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpOworCQlmcHJpbnRmKHN0ZGVyciwgIkNyZWF0ZU5hbWVkUGlwZSBmYWlsZWQ6ICVzXG4iLAorCQkJc3RyZXJyb3IoZXJyKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJY29ubmVjdGVkID0gQ29ubmVjdE5hbWVkUGlwZShoLCBOVUxMKQorCQk/IFRSVUUKKwkJOiAoR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfUElQRV9DT05ORUNURUQpOworCWlmICghY29ubmVjdGVkKSB7CisJCWVyciA9IGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpOworCQlmcHJpbnRmKHN0ZGVyciwgIkNvbm5lY3ROYW1lZFBpcGUgZmFpbGVkOiAlc1xuIiwKKwkJCXN0cmVycm9yKGVycikpOworCQlDbG9zZUhhbmRsZShoKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl3aGlsZSAoMSkgeworCQlEV09SRCBuYnI7CisJCUJPT0wgc3VjY2VzcyA9IFJlYWRGaWxlKGgsIGJ1ZiwgVEVTVF9CVUZTSVpFLCAmbmJyLCBOVUxMKTsKKwkJaWYgKCFzdWNjZXNzIHx8IG5iciA9PSAwKQorCQkJYnJlYWs7CisJCWJ1ZltuYnJdID0gMDsKKworCQl3cml0ZSgxLCBidWYsIG5icik7CisJfQorCisJRGlzY29ubmVjdE5hbWVkUGlwZShoKTsKKwlDbG9zZUhhbmRsZShoKTsKKwlyZXR1cm4gMDsKKworcHJpbnRfdXNhZ2U6CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgJXNcbiIsIGFyZ3ZbMF0sIHVzYWdlX3N0cmluZyk7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3Qtd3JpdGUtY2FjaGUuYyBiL3QvaGVscGVyL3Rlc3Qtd3JpdGUtY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODM3NzE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC13cml0ZS1jYWNoZS5jCkBAIC0wLDAgKzEsMjAgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisKK2ludCBjbWRfX3dyaXRlX2NhY2hlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgbG9ja19maWxlIGluZGV4X2xvY2sgPSBMT0NLX0lOSVQ7CisJaW50IGksIGNudCA9IDE7CisJaWYgKGFyZ2MgPT0gMikKKwkJY250ID0gc3RydG9sKGFyZ3ZbMV0sIE5VTEwsIDApOworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwlyZWFkX2NhY2hlKCk7CisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCWhvbGRfbG9ja2VkX2luZGV4KCZpbmRleF9sb2NrLCBMT0NLX0RJRV9PTl9FUlJPUik7CisJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmluZGV4X2xvY2ssIENPTU1JVF9MT0NLKSkKKwkJCWRpZSgidW5hYmxlIHRvIHdyaXRlIGluZGV4IGZpbGUiKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QteG1sLWVuY29kZS5jIGIvdC9oZWxwZXIvdGVzdC14bWwtZW5jb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY0OGJiZAotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QteG1sLWVuY29kZS5jCkBAIC0wLDAgKzEsODAgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKnV0ZjhfcmVwbGFjZV9jaGFyYWN0ZXIgPSAiJiN4ZmZmZDsiOworCisvKgorICogRW5jb2RlcyAocG9zc2libHkgaW5jb3JyZWN0KSBVVEYtOCBvbiA8c3RkaW4+IHRvIDxzdGRvdXQ+LCB0byBiZSBlbWJlZGRlZAorICogaW4gYW4gWE1MIGZpbGUuCisgKi8KK2ludCBjbWRfX3htbF9lbmNvZGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGNoYXIgYnVmWzEwMjRdLCB0bXBbNF0sICp0bXAyID0gTlVMTDsKKwlzc2l6ZV90IGN1ciA9IDAsIGxlbiA9IDEsIHJlbWFpbmluZyA9IDA7CisJdW5zaWduZWQgY2hhciBjaDsKKworCWZvciAoOzspIHsKKwkJaWYgKCsrY3VyID09IGxlbikgeworCQkJbGVuID0geHJlYWQoMCwgYnVmLCBzaXplb2YoYnVmKSk7CisJCQlpZiAoIWxlbikKKwkJCQlyZXR1cm4gMDsKKwkJCWlmIChsZW4gPCAwKQorCQkJCWRpZV9lcnJubygiQ291bGQgbm90IHJlYWQgPHN0ZGluPiIpOworCQkJY3VyID0gMDsKKwkJfQorCQljaCA9IGJ1ZltjdXJdOworCisJCWlmICh0bXAyKSB7CisJCQlpZiAoKGNoICYgMHhjMCkgIT0gMHg4MCkgeworCQkJCWZwdXRzKHV0ZjhfcmVwbGFjZV9jaGFyYWN0ZXIsIHN0ZG91dCk7CisJCQkJdG1wMiA9IE5VTEw7CisJCQkJY3VyLS07CisJCQkJY29udGludWU7CisJCQl9CisJCQkqdG1wMiA9IGNoOworCQkJdG1wMisrOworCQkJaWYgKC0tcmVtYWluaW5nID09IDApIHsKKwkJCQlmd3JpdGUodG1wLCB0bXAyIC0gdG1wLCAxLCBzdGRvdXQpOworCQkJCXRtcDIgPSBOVUxMOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIShjaCAmIDB4ODApKSB7CisJCQkvKiAweHh4eHh4eCAqLworCQkJaWYgKGNoID09ICcmJykKKwkJCQlmcHV0cygiJmFtcDsiLCBzdGRvdXQpOworCQkJZWxzZSBpZiAoY2ggPT0gJ1wnJykKKwkJCQlmcHV0cygiJmFwb3M7Iiwgc3Rkb3V0KTsKKwkJCWVsc2UgaWYgKGNoID09ICciJykKKwkJCQlmcHV0cygiJnF1b3Q7Iiwgc3Rkb3V0KTsKKwkJCWVsc2UgaWYgKGNoID09ICc8JykKKwkJCQlmcHV0cygiJmx0OyIsIHN0ZG91dCk7CisJCQllbHNlIGlmIChjaCA9PSAnPicpCisJCQkJZnB1dHMoIiZndDsiLCBzdGRvdXQpOworCQkJZWxzZSBpZiAoY2ggPj0gMHgyMCkKKwkJCQlmcHV0YyhjaCwgc3Rkb3V0KTsKKwkJCWVsc2UgaWYgKGNoID09IDB4MDkgfHwgY2ggPT0gMHgwYSB8fCBjaCA9PSAweDBkKQorCQkJCWZwcmludGYoc3Rkb3V0LCAiJiN4JTAyeDsiLCBjaCk7CisJCQllbHNlCisJCQkJZnB1dHModXRmOF9yZXBsYWNlX2NoYXJhY3Rlciwgc3Rkb3V0KTsKKwkJfSBlbHNlIGlmICgoY2ggJiAweGUwKSA9PSAweGMwKSB7CisJCQkvKiAxMTBYWFhYeCAxMHh4eHh4eCAqLworCQkJdG1wWzBdID0gY2g7CisJCQlyZW1haW5pbmcgPSAxOworCQkJdG1wMiA9IHRtcCArIDE7CisJCX0gZWxzZSBpZiAoKGNoICYgMHhmMCkgPT0gMHhlMCkgeworCQkJLyogMTExMFhYWFggMTBYeHh4eHggMTB4eHh4eHggKi8KKwkJCXRtcFswXSA9IGNoOworCQkJcmVtYWluaW5nID0gMjsKKwkJCXRtcDIgPSB0bXAgKyAxOworCQl9IGVsc2UgaWYgKChjaCAmIDB4ZjgpID09IDB4ZjApIHsKKwkJCS8qIDExMTEwWFhYIDEwWFh4eHh4IDEweHh4eHh4IDEweHh4eHh4ICovCisJCQl0bXBbMF0gPSBjaDsKKwkJCXJlbWFpbmluZyA9IDM7CisJCQl0bXAyID0gdG1wICsgMTsKKwkJfSBlbHNlCisJCQlmcHV0cyh1dGY4X3JlcGxhY2VfY2hhcmFjdGVyLCBzdGRvdXQpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9pbnRlcm9wLy5naXRpZ25vcmUgYi90L2ludGVyb3AvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWM3OGQzCi0tLSAvZGV2L251bGwKKysrIGIvdC9pbnRlcm9wLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACisvdHJhc2ggZGlyZWN0b3J5Ki8KKy90ZXN0LXJlc3VsdHMvCisvLnByb3ZlLworL2J1aWxkLwpkaWZmIC0tZ2l0IGEvdC9pbnRlcm9wL01ha2VmaWxlIGIvdC9pbnRlcm9wL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYTRiYmMKLS0tIC9kZXYvbnVsbAorKysgYi90L2ludGVyb3AvTWFrZWZpbGUKQEAgLTAsMCArMSwxNiBAQAorLWluY2x1ZGUgLi4vLi4vY29uZmlnLm1haworZXhwb3J0IEdJVF9URVNUX09QVElPTlMKKworU0hFTExfUEFUSCA/PSAkKFNIRUxMKQorU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSCkpCitUID0gJChzb3J0ICQod2lsZGNhcmQgaVswLTldWzAtOV1bMC05XVswLTldLSouc2gpKQorCithbGw6ICQoVCkKKworJChUKToKKwlAZWNobyAiKioqICRAICoqKiI7ICckKFNIRUxMX1BBVEhfU1EpJyAkQCAkKEdJVF9URVNUX09QVFMpCisKK2NsZWFuOgorCXJtIC1yZiBidWlsZCAidHJhc2ggZGlyZWN0b3J5Ii4qIHRlc3QtcmVzdWx0cworCisuUEhPTlk6IGFsbCBjbGVhbiAkKFQpCmRpZmYgLS1naXQgYS90L2ludGVyb3AvUkVBRE1FIGIvdC9pbnRlcm9wL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmQ0MmJkCi0tLSAvZGV2L251bGwKKysrIGIvdC9pbnRlcm9wL1JFQURNRQpAQCAtMCwwICsxLDg1IEBACitHaXQgdmVyc2lvbiBpbnRlcm9wZXJhYmlsaXR5IHRlc3RzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZGlyZWN0b3J5IGhhcyBpbnRlcm9wZXJhYmlsaXR5IHRlc3RzIGZvciBnaXQuIEVhY2ggc2NyaXB0IGlzCitzaW1pbGFyIHRvIHRoZSBub3JtYWwgdGVzdCBzY3JpcHRzIGZvdW5kIGluIHQvLCBidXQgd2l0aCB0aGUgYWRkZWQgdHdpc3QKK3RoYXQgdHdvIHNwZWNpYWwgdmVyc2lvbnMgb2YgZ2l0LCAiZ2l0LmEiIGFuZCAiZ2l0LmIiLCBhcmUgYXZhaWxhYmxlIGluCit0aGUgUEFUSC4gSW5kaXZpZHVhbCB0ZXN0cyBjYW4gdGhlbiBjaGVjayB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUKK3R3byB2ZXJzaW9ucy4KKworV2hlbiB5b3UgYWRkIGEgZmVhdHVyZSB0aGF0IGhhbmRsZXMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYmV0d2VlbiBnaXQKK3ZlcnNpb25zLCBpdCdzIGVuY291cmFnZWQgdG8gYWRkIGEgdGVzdCBoZXJlIHRvIG1ha2Ugc3VyZSBpdCBiZWhhdmVzIGFzCit5b3UgZXhwZWN0LgorCisKK1J1bm5pbmcgVGVzdHMKKy0tLS0tLS0tLS0tLS0KKworVGhlIGVhc2llc3Qgd2F5IHRvIHJ1biB0ZXN0cyBpcyB0byBzYXkgIm1ha2UiLiAgVGhpcyBydW5zIGFsbAordGhlIHRlc3RzIGFnYWluc3QgdGhlaXIgZGVmYXVsdCB2ZXJzaW9ucy4KKworWW91IGNhbiBydW4gYSBzaW5nbGUgdGVzdCBsaWtlOgorCisgICAgJCAuL2kwMDAwLWJhc2ljLnNoCisgICAgb2sgMSAtIGJhcmUgZ2l0IGlzIGZvcmJpZGRlbgorICAgIG9rIDIgLSBnaXQuYSB2ZXJzaW9uICh2MS42LjYuMykKKyAgICBvayAzIC0gZ2l0LmIgdmVyc2lvbiAodjIuMTEuMSkKKyAgICAjIHBhc3NlZCBhbGwgMyB0ZXN0KHMpCisgICAgMS4uMworCitFYWNoIHRlc3QgY29udGFpbnMgZGVmYXVsdCB2ZXJzaW9ucyB0byBydW4gYWdhaW5zdC4gWW91IG1heSBvdmVycmlkZQordGhlc2UgYnkgc2V0dGluZyBgR0lUX1RFU1RfVkVSU0lPTl9BYCBhbmQgYEdJVF9URVNUX1ZFUlNJT05fQmAgaW4gdGhlCitlbnZpcm9ubWVudC4gTm90ZSB0aGF0IG5vdCBhbGwgY29tYmluYXRpb25zIHdpbGwgZ2l2ZSBzZW5zaWJsZSBvdXRjb21lcworZm9yIGFsbCB0ZXN0cyAoZS5nLiwgYSB0ZXN0IGNoZWNraW5nIGZvciBhIHNwZWNpZmljIG9sZC9uZXcgaW50ZXJhY3Rpb24KK21heSB3YW50IHNvbWV0aGluZyAib2xkIiBlbm91Z2giIGFuZCBzb21ldGhpbmcgIm5ldyIgZW5vdWdoOyBzZWUKK2luZGl2aWR1YWwgdGVzdHMgZm9yIGRldGFpbHMpLgorCitWZXJzaW9uIG5hbWVzIHNob3VsZCBiZSByZXNvbHZhYmxlIGFzIHJldmlzaW9ucyBpbiB0aGUgY3VycmVudAorcmVwb3NpdG9yeS4gVGhleSB3aWxsIGJlIGV4cG9ydGVkIGFuZCBidWlsdCBhcyBuZWVkZWQgdXNpbmcgdGhlCitjb25maWcubWFrIGZpbGVzIGZvdW5kIGF0IHRoZSByb290IG9mIHlvdXIgd29ya2luZyB0cmVlLgorCitUaGUgZXhjZXB0aW9uIGlzIHRoZSBzcGVjaWFsIHZlcnNpb24gIi4iIHdoaWNoIHVzZXMgdGhlIGN1cnJlbnRseS1idWlsdAorY29udGVudHMgb2YgeW91ciB3b3JraW5nIHRyZWUuCisKK1lvdSBjYW4gc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIChpbiB0aGUgZW52aXJvbm1lbnQgb3IgaW4geW91ciBjb25maWcubWFrKToKKworICAgIEdJVF9JTlRFUk9QX01BS0VfT1BUUworCU9wdGlvbnMgdG8gcGFzcyB0byBgbWFrZWAgd2hlbiBidWlsZGluZyBhIGdpdCB2ZXJzaW9uIChlLmcuLAorCWAtajhgKS4KKworWW91IGNhbiBhbHNvIHBhc3MgYW55IGNvbW1hbmQtbGluZSBvcHRpb25zIHRha2VuIGJ5IG9yZGluYXJ5IGdpdCB0ZXN0cyAoZS5nLiwKKyItdiIpLgorCisKK05hbWluZyBUZXN0cworLS0tLS0tLS0tLS0tCisKK1RoZSBpbnRlcm9wIHRlc3QgZmlsZXMgYXJlIG5hbWVkIGxpa2U6CisKKwlpTk5OTi1zaG9ydC1kZXNjcmlwdGlvbi5zaAorCit3aGVyZSBOIGlzIGEgZGVjaW1hbCBkaWdpdC4gIFRoZSBzYW1lIGNvbnZlbnRpb25zIGZvciBjaG9vc2luZyBOTk5OIGFzCitmb3Igbm9ybWFsIHRlc3RzIGFwcGx5LgorCisKK1dyaXRpbmcgVGVzdHMKKy0tLS0tLS0tLS0tLS0KKworQW4gaW50ZXJvcCB0ZXN0IHNjcmlwdCBzdGFydHMgbGlrZSBhIG5vcm1hbCBzY3JpcHQsIGRlY2xhcmluZyBhIGZldwordmFyaWFibGVzIGFuZCB0aGVuIGluY2x1ZGluZyBpbnRlcm9wLWxpYi5zaCAod2hpY2ggaW5jbHVkZXMgdGVzdC1saWIuc2gpLgorQmVzaWRlcyB0ZXN0X2Rlc2NyaXB0aW9uLCB5b3Ugc2hvdWxkIGFsc28gc2V0IHRoZSAkVkVSU0lPTl9BIGFuZCAkVkVSU0lPTl9CCit2YXJpYWJsZXMgdG8gZ2l2ZSB0aGUgZGVmYXVsdCB2ZXJzaW9ucyB0byB0ZXN0IGFnYWluc3QuIFNlZSB0MDAwMC1iYXNpYy5zaCBmb3IKK2FuIGV4YW1wbGUuCisKK1lvdSBjYW4gdGhlbiB1c2UgdGVzdF9leHBlY3Rfc3VjY2VzcyBhcyB1c3VhbCwgd2l0aCBhIGZldyBkaWZmZXJlbmNlczoKKworICAxLiBUaGUgc3BlY2lhbCBjb21tYW5kcyAiZ2l0LmEiIGFuZCAiZ2l0LmIiIGNvcnJlc3BvbmQgdG8gdGhlCisgICAgIHR3byB2ZXJzaW9ucy4KKworICAyLiBZb3UgY2Fubm90IGNhbGwgYSBiYXJlICJnaXQiLiBUaGlzIGlzIHRvIHByZXZlbnQgYWNjaWRlbnRzIHdoZXJlCisgICAgIHlvdSBtZWFudCAiZ2l0LmEiIG9yICJnaXQuYiIuCisKKyAgMy4gVGhlIHRyYXNoIGRpcmVjdG9yeSBpcyBfbm90XyBhIGdpdCByZXBvc2l0b3J5IGJ5IGRlZmF1bHQuIFlvdQorICAgICBzaG91bGQgY3JlYXRlIG9uZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSB2ZXJzaW9uIG9mIGdpdC4KKworQXQgdGhlIGVuZCBvZiB0aGUgc2NyaXB0LCBjYWxsIHRlc3RfZG9uZSBhcyB1c3VhbC4KZGlmZiAtLWdpdCBhL3QvaW50ZXJvcC9pMDAwMC1iYXNpYy5zaCBiL3QvaW50ZXJvcC9pMDAwMC1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MDNlOTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9pbnRlcm9wL2kwMDAwLWJhc2ljLnNoCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorCisjIE5vdGUgdGhhdCB0aGlzIHRlc3Qgb25seSB3b3JrcyBvbiByZWFsIHZlcnNpb24gbnVtYmVycywKKyMgYXMgaXQgZGVwZW5kcyBvbiBtYXRjaGluZyB0aGUgb3V0cHV0IHRvICJnaXQgdmVyc2lvbiIuCitWRVJTSU9OX0E9djEuNi42LjMKK1ZFUlNJT05fQj12Mi4xMS4xCisKK3Rlc3RfZGVzY3JpcHRpb249J3Nhbml0eSB0ZXN0IGludGVyb3AgbGlicmFyeScKKy4gLi9pbnRlcm9wLWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJlIGdpdCBpcyBmb3JiaWRkZW4nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdmVyc2lvbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQuYSB2ZXJzaW9uICgkVkVSU0lPTl9BKSIgJworCWVjaG8gZ2l0IHZlcnNpb24gJHtWRVJTSU9OX0Ejdn0gPmV4cGVjdCAmJgorCWdpdC5hIHZlcnNpb24gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZ2l0LmIgdmVyc2lvbiAoJFZFUlNJT05fQikiICcKKwllY2hvIGdpdCB2ZXJzaW9uICR7VkVSU0lPTl9CI3Z9ID5leHBlY3QgJiYKKwlnaXQuYiB2ZXJzaW9uID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9pbnRlcm9wL2k1NTAwLWdpdC1kYWVtb24uc2ggYi90L2ludGVyb3AvaTU1MDAtZ2l0LWRhZW1vbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZDIyZTQyCi0tLSAvZGV2L251bGwKKysrIGIvdC9pbnRlcm9wL2k1NTAwLWdpdC1kYWVtb24uc2gKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKK1ZFUlNJT05fQT0uCitWRVJTSU9OX0I9djEuMC4wCisKKzogJHtMSUJfR0lUX0RBRU1PTl9QT1JUOj01NTAwfQorTElCX0dJVF9EQUVNT05fQ09NTUFORD0nZ2l0LmEgZGFlbW9uJworCit0ZXN0X2Rlc2NyaXB0aW9uPSdjbG9uZSBhbmQgZmV0Y2ggYnkgb2xkZXIgY2xpZW50JworLiAuL2ludGVyb3AtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1naXQtZGFlbW9uLnNoCisKK3N0YXJ0X2dpdF9kYWVtb24gLS1leHBvcnQtYWxsCisKK3JlcG89JEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlIHJlcG8gc2VydmVkIGJ5ICRWRVJTSU9OX0EiICcKKwlnaXQuYSBpbml0ICIkcmVwbyIgJiYKKwlnaXQuYSAtQyAiJHJlcG8iIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSB3aXRoICRWRVJTSU9OX0IiICcKKwlnaXQuYiBjbG9uZSAiJEdJVF9EQUVNT05fVVJML3JlcG8iIGNoaWxkICYmCisJZWNobyBvbmUgPmV4cGVjdCAmJgorCWdpdC5hIC1DIGNoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCB3aXRoICRWRVJTSU9OX0IiICcKKwlnaXQuYSAtQyAiJHJlcG8iIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHR3byAmJgorCSgKKwkJY2QgY2hpbGQgJiYKKwkJZ2l0LmIgZmV0Y2gKKwkpICYmCisJZWNobyB0d28gPmV4cGVjdCAmJgorCWdpdC5hIC1DIGNoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyBGRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9pbnRlcm9wL2k1NzAwLXByb3RvY29sLXRyYW5zaXRpb24uc2ggYi90L2ludGVyb3AvaTU3MDAtcHJvdG9jb2wtdHJhbnNpdGlvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45N2U4ZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9pbnRlcm9wL2k1NzAwLXByb3RvY29sLXRyYW5zaXRpb24uc2gKQEAgLTAsMCArMSw2OCBAQAorIyEvYmluL3NoCisKK1ZFUlNJT05fQT0uCitWRVJTSU9OX0I9djIuMC4wCisKKzogJHtMSUJfR0lUX0RBRU1PTl9QT1JUOj01NzAwfQorTElCX0dJVF9EQUVNT05fQ09NTUFORD0nZ2l0LmIgZGFlbW9uJworCit0ZXN0X2Rlc2NyaXB0aW9uPSdjbG9uZSBhbmQgZmV0Y2ggYnkgY2xpZW50IHdobyBpcyB0cnlpbmcgdG8gdXNlIGEgbmV3IHByb3RvY29sJworLiAuL2ludGVyb3AtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1naXQtZGFlbW9uLnNoCisKK3N0YXJ0X2dpdF9kYWVtb24gLS1leHBvcnQtYWxsCisKK3JlcG89JEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlIHJlcG8gc2VydmVkIGJ5ICRWRVJTSU9OX0IiICcKKwlnaXQuYiBpbml0ICIkcmVwbyIgJiYKKwlnaXQuYiAtQyAiJHJlcG8iIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQ6Ly8gY2xvbmUgd2l0aCAkVkVSU0lPTl9BIGFuZCBwcm90b2NvbCB2MSIgJworCUdJVF9UUkFDRV9QQUNLRVQ9MSBnaXQuYSAtYyBwcm90b2NvbC52ZXJzaW9uPTEgY2xvbmUgIiRHSVRfREFFTU9OX1VSTC9yZXBvIiBjaGlsZCAyPmxvZyAmJgorCWdpdC5hIC1DIGNoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0LmIgLUMgIiRyZXBvIiBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlncmVwICJ2ZXJzaW9uPTEiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQ6Ly8gZmV0Y2ggd2l0aCAkVkVSU0lPTl9BIGFuZCBwcm90b2NvbCB2MSIgJworCWdpdC5iIC1DICIkcmVwbyIgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdHdvICYmCisJZ2l0LmIgLUMgIiRyZXBvIiBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdC5hIC1DIGNoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MSBmZXRjaCAyPmxvZyAmJgorCWdpdC5hIC1DIGNoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyBGRVRDSF9IRUFEID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlncmVwICJ2ZXJzaW9uPTEiIGxvZyAmJgorCSEgZ3JlcCAidmVyc2lvbiAxIiBsb2cKKycKKworc3RvcF9naXRfZGFlbW9uCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSByZXBvIHNlcnZlZCBieSAkVkVSU0lPTl9CIiAnCisJZ2l0LmIgaW5pdCBwYXJlbnQgJiYKKwlnaXQuYiAtQyBwYXJlbnQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZpbGU6Ly8gY2xvbmUgd2l0aCAkVkVSU0lPTl9BIGFuZCBwcm90b2NvbCB2MSIgJworCUdJVF9UUkFDRV9QQUNLRVQ9MSBnaXQuYSAtYyBwcm90b2NvbC52ZXJzaW9uPTEgY2xvbmUgLS11cGxvYWQtcGFjaz0iZ2l0LmIgdXBsb2FkLXBhY2siIHBhcmVudCBjaGlsZDIgMj5sb2cgJiYKKwlnaXQuYSAtQyBjaGlsZDIgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlnaXQuYiAtQyBwYXJlbnQgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJISBncmVwICJ2ZXJzaW9uIDEiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmaWxlOi8vIGZldGNoIHdpdGggJFZFUlNJT05fQSBhbmQgcHJvdG9jb2wgdjEiICcKKwlnaXQuYiAtQyBwYXJlbnQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdHdvICYmCisJZ2l0LmIgLUMgcGFyZW50IGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPTEgZ2l0LmEgLUMgY2hpbGQyIC1jIHByb3RvY29sLnZlcnNpb249MSBmZXRjaCAtLXVwbG9hZC1wYWNrPSJnaXQuYiB1cGxvYWQtcGFjayIgMj5sb2cgJiYKKwlnaXQuYSAtQyBjaGlsZDIgbG9nIC0xIC0tZm9ybWF0PSVzIEZFVENIX0hFQUQgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCSEgZ3JlcCAidmVyc2lvbiAxIiBsb2cKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L2ludGVyb3AvaW50ZXJvcC1saWIuc2ggYi90L2ludGVyb3AvaW50ZXJvcC1saWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwYTI5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvaW50ZXJvcC9pbnRlcm9wLWxpYi5zaApAQCAtMCwwICsxLDkyIEBACisjIEludGVyb3BlcmFiaWxpdHkgdGVzdGluZyBmcmFtZXdvcmsuIEVhY2ggc2NyaXB0IHNob3VsZCBzb3VyY2UKKyMgdGhpcyBhZnRlciBzZXR0aW5nIGRlZmF1bHQgJFZFUlNJT05fQSBhbmQgJFZFUlNJT05fQiB2YXJpYWJsZXMuCisKKy4gLi4vLi4vR0lULUJVSUxELU9QVElPTlMKK0lOVEVST1BfUk9PVD0kKHB3ZCkKK0JVSUxEX1JPT1Q9JElOVEVST1BfUk9PVC9idWlsZAorCitidWlsZF92ZXJzaW9uICgpIHsKKwlpZiB0ZXN0IC16ICIkMSIKKwl0aGVuCisJCWVjaG8gPiYyICJlcnJvcjogdGVzdCBzY3JpcHQgZGlkIG5vdCBzZXQgZGVmYXVsdCB2ZXJzaW9ucyIKKwkJcmV0dXJuIDEKKwlmaQorCisJaWYgdGVzdCAiJDEiID0gIi4iCisJdGhlbgorCQlnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbAorCQlyZXR1cm4gMAorCWZpCisKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSAiJDFee3RyZWV9IikgfHwgcmV0dXJuIDEKKwlkaXI9JEJVSUxEX1JPT1QvJHNoYTEKKworCWlmIHRlc3QgLWUgIiRkaXIvLmJ1aWx0IgorCXRoZW4KKwkJZWNobyAiJGRpciIKKwkJcmV0dXJuIDAKKwlmaQorCisJZWNobyA+JjIgIj09PiBCdWlsZGluZyAkMS4uLiIKKworCW1rZGlyIC1wICIkZGlyIiB8fCByZXR1cm4gMQorCisJKGNkICIkKGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXApIiAmJiBnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgIiRzaGExIikgfAorCShjZCAiJGRpciIgJiYgdGFyIHgpIHx8CisJcmV0dXJuIDEKKworCWZvciBjb25maWcgaW4gY29uZmlnLm1hayBjb25maWcubWFrLmF1dG9nZW4gY29uZmlnLnN0YXR1cworCWRvCisJCWlmIHRlc3QgLWUgIiRJTlRFUk9QX1JPT1QvLi4vLi4vJGNvbmZpZyIKKwkJdGhlbgorCQkJY3AgIiRJTlRFUk9QX1JPT1QvLi4vLi4vJGNvbmZpZyIgIiRkaXIvIiB8fCByZXR1cm4gMQorCQlmaQorCWRvbmUKKworCSgKKwkJY2QgIiRkaXIiICYmCisJCW1ha2UgJEdJVF9JTlRFUk9QX01BS0VfT1BUUyA+JjIgJiYKKwkJdG91Y2ggLmJ1aWx0CisJKSB8fCByZXR1cm4gMQorCisJZWNobyAiJGRpciIKK30KKworIyBPbGQgdmVyc2lvbnMgb2YgZ2l0IGRvbid0IGhhdmUgYmluLXdyYXBwZXJzLCBzbyBsZXQncyBnaXZlIGEgcm91Z2ggZW11bGF0aW9uLgord3JhcF9naXQgKCkgeworCXdyaXRlX3NjcmlwdCAiJDEiIDw8LUVPRgorCUdJVF9FWEVDX1BBVEg9IiQyIgorCWV4cG9ydCBHSVRfRVhFQ19QQVRICisJUEFUSD0iJDI6XCRQQVRIIgorCWV4cG9ydCBHSVRfRVhFQ19QQVRICisJZXhlYyBnaXQgIlwkQCIKKwlFT0YKK30KKworZ2VuZXJhdGVfd3JhcHBlcnMgKCkgeworCW1rZGlyIC1wIC5iaW4gJiYKKwl3cmFwX2dpdCAuYmluL2dpdC5hICIkRElSX0EiICYmCisJd3JhcF9naXQgLmJpbi9naXQuYiAiJERJUl9CIiAmJgorCXdyaXRlX3NjcmlwdCAuYmluL2dpdCA8PC1cRU9GICYmCisJZWNobyA+JjIgZmF0YWw6IHRlc3QgdHJpZWQgdG8gcnVuIGdlbmVyaWMgZ2l0CisJZXhpdCAxCisJRU9GCisJUEFUSD0kKHB3ZCkvLmJpbjokUEFUSAorfQorCitWRVJTSU9OX0E9JHtHSVRfVEVTVF9WRVJTSU9OX0E6LSRWRVJTSU9OX0F9CitWRVJTSU9OX0I9JHtHSVRfVEVTVF9WRVJTSU9OX0I6LSRWRVJTSU9OX0J9CisKK2lmICEgRElSX0E9JChidWlsZF92ZXJzaW9uICIkVkVSU0lPTl9BIikgfHwKKyAgICEgRElSX0I9JChidWlsZF92ZXJzaW9uICIkVkVSU0lPTl9CIikKK3RoZW4KKwllY2hvID4mMiAiZmF0YWw6IHVuYWJsZSB0byBidWlsZCBnaXQgdmVyc2lvbnMiCisJZXhpdCAxCitmaQorCitURVNUX0RJUkVDVE9SWT0kSU5URVJPUF9ST09ULy4uCitURVNUX09VVFBVVF9ESVJFQ1RPUlk9JElOVEVST1BfUk9PVAorVEVTVF9OT19DUkVBVEVfUkVQTz10CisuICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtbGliLnNoCisKK2dlbmVyYXRlX3dyYXBwZXJzIHx8IGRpZSAidW5hYmxlIHRvIHNldCB1cCBpbnRlcm9wIHRlc3QgZW52aXJvbm1lbnQiCmRpZmYgLS1naXQgYS90L2xpYi1iYXNoLnNoIGIvdC9saWItYmFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGI2MDYwCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItYmFzaC5zaApAQCAtMCwwICsxLDE5IEBACisjIFNoZWxsIGxpYnJhcnkgc291cmNlZCBpbnN0ZWFkIG9mIC4vdGVzdC1saWIuc2ggYnkgdGVzdHMgdGhhdCBuZWVkCisjIHRvIHJ1biB1bmRlciBCYXNoOyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHRlc3RzIG9mIHRoZSBjb21wbGV0aW9uCisjIHNjcmlwdC4KKworaWYgdGVzdCAtbiAiJEJBU0giICYmIHRlc3QgLXogIiRQT1NJWExZX0NPUlJFQ1QiCit0aGVuCisJIyB3ZSBhcmUgaW4gZnVsbC1vbiBiYXNoIG1vZGUKKwl0cnVlCitlbGlmIHR5cGUgYmFzaCA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKwkjIGV4ZWN1dGUgaW4gZnVsbC1vbiBiYXNoIG1vZGUKKwl1bnNldCBQT1NJWExZX0NPUlJFQ1QKKwlleGVjIGJhc2ggIiQwIiAiJEAiCitlbHNlCisJZWNobyAnMS4uMCAjU0tJUCBza2lwcGluZyBiYXNoIGNvbXBsZXRpb24gdGVzdHM7IGJhc2ggbm90IGF2YWlsYWJsZScKKwlleGl0IDAKK2ZpCisKKy4gLi90ZXN0LWxpYi5zaApkaWZmIC0tZ2l0IGEvdC9saWItY3JlZGVudGlhbC5zaCBiL3QvbGliLWNyZWRlbnRpYWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhMmNiZQotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWNyZWRlbnRpYWwuc2gKQEAgLTAsMCArMSwzMDcgQEAKKyMgU2hlbGwgbGlicmFyeSBmb3IgdGVzdGluZyBjcmVkZW50aWFsIGhhbmRsaW5nIGluY2x1ZGluZyBoZWxwZXJzLiBTZWUgdDAzMDIKKyMgZm9yIGFuIGV4YW1wbGUgb2YgdGVzdGluZyBhIHNwZWNpZmljIGhlbHBlci4KKworIyBUcnkgYSBzZXQgb2YgY3JlZGVudGlhbCBoZWxwZXJzOyB0aGUgZXhwZWN0ZWQgc3RkaW4sCisjIHN0ZG91dCBhbmQgc3RkZXJyIHNob3VsZCBiZSBwcm92aWRlZCBvbiBzdGRpbiwKKyMgc2VwYXJhdGVkIGJ5ICItLSIuCitjaGVjaygpIHsKKwljcmVkZW50aWFsX29wdHM9CisJY3JlZGVudGlhbF9jbWQ9JDEKKwlzaGlmdAorCWZvciBhcmcgaW4gIiRAIjsgZG8KKwkJY3JlZGVudGlhbF9vcHRzPSIkY3JlZGVudGlhbF9vcHRzIC1jIGNyZWRlbnRpYWwuaGVscGVyPSckYXJnJyIKKwlkb25lCisJcmVhZF9jaHVuayA+c3RkaW4gJiYKKwlyZWFkX2NodW5rID5leHBlY3Qtc3Rkb3V0ICYmCisJcmVhZF9jaHVuayA+ZXhwZWN0LXN0ZGVyciAmJgorCWlmICEgZXZhbCAiZ2l0ICRjcmVkZW50aWFsX29wdHMgY3JlZGVudGlhbCAkY3JlZGVudGlhbF9jbWQgPHN0ZGluID5zdGRvdXQgMj5zdGRlcnIiOyB0aGVuCisJCWVjaG8gImdpdCBjcmVkZW50aWFsIGZhaWxlZCB3aXRoIGNvZGUgJD8iICYmCisJCWNhdCBzdGRlcnIgJiYKKwkJZmFsc2UKKwlmaSAmJgorCXRlc3RfY21wIGV4cGVjdC1zdGRvdXQgc3Rkb3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC1zdGRlcnIgc3RkZXJyCit9CisKK3JlYWRfY2h1bmsoKSB7CisJd2hpbGUgcmVhZCBsaW5lOyBkbworCQljYXNlICIkbGluZSIgaW4KKwkJLS0pIGJyZWFrIDs7CisJCSopIGVjaG8gIiRsaW5lIiA7OworCQllc2FjCisJZG9uZQorfQorCisjIENsZWFyIGFueSByZXNpZHVhbCBkYXRhIGZyb20gcHJldmlvdXMgdGVzdHMuIFdlIG9ubHkKKyMgbmVlZCB0aGlzIHdoZW4gdGVzdGluZyB0aGlyZC1wYXJ0eSBoZWxwZXJzIHdoaWNoIHJlYWQgYW5kCisjIHdyaXRlIG91dHNpZGUgb2Ygb3VyIHRyYXNoLWRpcmVjdG9yeSBzYW5kYm94LgorIworIyBEb24ndCBib3RoZXIgY2hlY2tpbmcgZm9yIHN1Y2Nlc3MgaGVyZSwgYXMgaXQgaXMKKyMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGVzdHMgYW5kIHJlcHJlc2VudHMgYSBiZXN0IGVmZm9ydCB0bworIyBjbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMuCitoZWxwZXJfdGVzdF9jbGVhbigpIHsKKwlyZWplY3QgJDEgaHR0cHMgZXhhbXBsZS5jb20gc3RvcmUtdXNlcgorCXJlamVjdCAkMSBodHRwcyBleGFtcGxlLmNvbSB1c2VyMQorCXJlamVjdCAkMSBodHRwcyBleGFtcGxlLmNvbSB1c2VyMgorCXJlamVjdCAkMSBodHRwIHBhdGgudGxkIHVzZXIKKwlyZWplY3QgJDEgaHR0cHMgdGltZW91dC50bGQgdXNlcgorCXJlamVjdCAkMSBodHRwcyBzc28udGxkCit9CisKK3JlamVjdCgpIHsKKwkoCisJCWVjaG8gcHJvdG9jb2w9JDIKKwkJZWNobyBob3N0PSQzCisJCWVjaG8gdXNlcm5hbWU9JDQKKwkpIHwgZ2l0IC1jIGNyZWRlbnRpYWwuaGVscGVyPSQxIGNyZWRlbnRpYWwgcmVqZWN0Cit9CisKK2hlbHBlcl90ZXN0KCkgeworCUhFTFBFUj0kMQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSBoYXMgbm8gZXhpc3RpbmcgZGF0YSIgJworCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9YXNrcGFzcy11c2VybmFtZQorCQlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJCS0tCisJCWFza3Bhc3M6IFVzZXJuYW1lIGZvciAnXCcnaHR0cHM6Ly9leGFtcGxlLmNvbSdcJyc6CisJCWFza3Bhc3M6IFBhc3N3b3JkIGZvciAnXCcnaHR0cHM6Ly9hc2twYXNzLXVzZXJuYW1lQGV4YW1wbGUuY29tJ1wnJzoKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSBzdG9yZXMgcGFzc3dvcmQiICcKKwkJY2hlY2sgYXBwcm92ZSAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT1zdG9yZS11c2VyCisJCXBhc3N3b3JkPXN0b3JlLXBhc3MKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSBjYW4gcmV0cmlldmUgcGFzc3dvcmQiICcKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXN0b3JlLXVzZXIKKwkJcGFzc3dvcmQ9c3RvcmUtcGFzcworCQktLQorCQlFT0YKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIHJlcXVpcmVzIG1hdGNoaW5nIHByb3RvY29sIiAnCisJCWNoZWNrIGZpbGwgJEhFTFBFUiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHAKKwkJaG9zdD1leGFtcGxlLmNvbQorCQktLQorCQlwcm90b2NvbD1odHRwCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9YXNrcGFzcy11c2VybmFtZQorCQlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJCS0tCisJCWFza3Bhc3M6IFVzZXJuYW1lIGZvciAnXCcnaHR0cDovL2V4YW1wbGUuY29tJ1wnJzoKKwkJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwOi8vYXNrcGFzcy11c2VybmFtZUBleGFtcGxlLmNvbSdcJyc6CisJCUVPRgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhlbHBlciAoJEhFTFBFUikgcmVxdWlyZXMgbWF0Y2hpbmcgaG9zdCIgJworCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PW90aGVyLnRsZAorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PW90aGVyLnRsZAorCQl1c2VybmFtZT1hc2twYXNzLXVzZXJuYW1lCisJCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwkJLS0KKwkJYXNrcGFzczogVXNlcm5hbWUgZm9yICdcJydodHRwczovL290aGVyLnRsZCdcJyc6CisJCWFza3Bhc3M6IFBhc3N3b3JkIGZvciAnXCcnaHR0cHM6Ly9hc2twYXNzLXVzZXJuYW1lQG90aGVyLnRsZCdcJyc6CisJCUVPRgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhlbHBlciAoJEhFTFBFUikgcmVxdWlyZXMgbWF0Y2hpbmcgdXNlcm5hbWUiICcKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT1vdGhlcgorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPW90aGVyCisJCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwkJLS0KKwkJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwczovL290aGVyQGV4YW1wbGUuY29tJ1wnJzoKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSByZXF1aXJlcyBtYXRjaGluZyBwYXRoIiAnCisJCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwudXNlaHR0cHBhdGggdHJ1ZSAmJgorCQljaGVjayBhcHByb3ZlICRIRUxQRVIgPDwtXEVPRiAmJgorCQlwcm90b2NvbD1odHRwCisJCWhvc3Q9cGF0aC50bGQKKwkJcGF0aD1mb28uZ2l0CisJCXVzZXJuYW1lPXVzZXIKKwkJcGFzc3dvcmQ9cGFzcworCQlFT0YKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cAorCQlob3N0PXBhdGgudGxkCisJCXBhdGg9YmFyLmdpdAorCQktLQorCQlwcm90b2NvbD1odHRwCisJCWhvc3Q9cGF0aC50bGQKKwkJcGF0aD1iYXIuZ2l0CisJCXVzZXJuYW1lPWFza3Bhc3MtdXNlcm5hbWUKKwkJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCQktLQorCQlhc2twYXNzOiBVc2VybmFtZSBmb3IgJ1wnJ2h0dHA6Ly9wYXRoLnRsZC9iYXIuZ2l0J1wnJzoKKwkJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwOi8vYXNrcGFzcy11c2VybmFtZUBwYXRoLnRsZC9iYXIuZ2l0J1wnJzoKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSBjYW4gZm9yZ2V0IGhvc3QiICcKKwkJY2hlY2sgcmVqZWN0ICRIRUxQRVIgPDwtXEVPRiAmJgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCUVPRgorCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9YXNrcGFzcy11c2VybmFtZQorCQlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJCS0tCisJCWFza3Bhc3M6IFVzZXJuYW1lIGZvciAnXCcnaHR0cHM6Ly9leGFtcGxlLmNvbSdcJyc6CisJCWFza3Bhc3M6IFBhc3N3b3JkIGZvciAnXCcnaHR0cHM6Ly9hc2twYXNzLXVzZXJuYW1lQGV4YW1wbGUuY29tJ1wnJzoKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSBjYW4gc3RvcmUgbXVsdGlwbGUgdXNlcnMiICcKKwkJY2hlY2sgYXBwcm92ZSAkSEVMUEVSIDw8LVxFT0YgJiYKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMQorCQlwYXNzd29yZD1wYXNzMQorCQlFT0YKKwkJY2hlY2sgYXBwcm92ZSAkSEVMUEVSIDw8LVxFT0YgJiYKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMgorCQlwYXNzd29yZD1wYXNzMgorCQlFT0YKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YgJiYKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMQorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIxCisJCXBhc3N3b3JkPXBhc3MxCisJCUVPRgorCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIyCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9dXNlcjIKKwkJcGFzc3dvcmQ9cGFzczIKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSBjYW4gZm9yZ2V0IHVzZXIiICcKKwkJY2hlY2sgcmVqZWN0ICRIRUxQRVIgPDwtXEVPRiAmJgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIxCisJCUVPRgorCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIxCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9dXNlcjEKKwkJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCQktLQorCQlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHBzOi8vdXNlcjFAZXhhbXBsZS5jb20nXCcnOgorCQlFT0YKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIHJlbWVtYmVycyBvdGhlciB1c2VyIiAnCisJCWNoZWNrIGZpbGwgJEhFTFBFUiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9dXNlcjIKKwkJLS0KKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMgorCQlwYXNzd29yZD1wYXNzMgorCQlFT0YKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIGNhbiBzdG9yZSBlbXB0eSB1c2VybmFtZSIgJworCQljaGVjayBhcHByb3ZlICRIRUxQRVIgPDwtXEVPRiAmJgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PXNzby50bGQKKwkJdXNlcm5hbWU9CisJCXBhc3N3b3JkPQorCQlFT0YKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1zc28udGxkCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9c3NvLnRsZAorCQl1c2VybmFtZT0KKwkJcGFzc3dvcmQ9CisJCUVPRgorCScKK30KKworaGVscGVyX3Rlc3RfdGltZW91dCgpIHsKKwlIRUxQRVI9IiQqIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSB0aW1lcyBvdXQiICcKKwkJY2hlY2sgYXBwcm92ZSAiJEhFTFBFUiIgPDwtXEVPRiAmJgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PXRpbWVvdXQudGxkCisJCXVzZXJuYW1lPXVzZXIKKwkJcGFzc3dvcmQ9cGFzcworCQlFT0YKKwkJc2xlZXAgMiAmJgorCQljaGVjayBmaWxsICIkSEVMUEVSIiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9dGltZW91dC50bGQKKwkJLS0KKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD10aW1lb3V0LnRsZAorCQl1c2VybmFtZT1hc2twYXNzLXVzZXJuYW1lCisJCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwkJLS0KKwkJYXNrcGFzczogVXNlcm5hbWUgZm9yICdcJydodHRwczovL3RpbWVvdXQudGxkJ1wnJzoKKwkJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwczovL2Fza3Bhc3MtdXNlcm5hbWVAdGltZW91dC50bGQnXCcnOgorCQlFT0YKKwknCit9CisKK3dyaXRlX3NjcmlwdCBhc2twYXNzIDw8XEVPRgorZWNobyA+JjIgYXNrcGFzczogJCoKK3doYXQ9JChlY2hvICQxIHwgY3V0IC1kIiAiIC1mMSB8IHRyIEEtWiBhLXogfCB0ciAtY2QgYS16KQorZWNobyAiYXNrcGFzcy0kd2hhdCIKK0VPRgorR0lUX0FTS1BBU1M9IiRQV0QvYXNrcGFzcyIKK2V4cG9ydCBHSVRfQVNLUEFTUwpkaWZmIC0tZ2l0IGEvdC9saWItY3ZzLnNoIGIvdC9saWItY3ZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmJjZmIKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1jdnMuc2gKQEAgLTAsMCArMSw3OCBAQAorIyBTaGVsbCBsaWJyYXJ5IHNvdXJjZWQgaW5zdGVhZCBvZiAuL3Rlc3QtbGliLnNoIGJ5IGN2c2ltcG9ydCB0ZXN0cy4KKworLiAuL3Rlc3QtbGliLnNoCisKK3Vuc2V0IENWU19TRVJWRVIKKworaWYgISB0eXBlIGN2cyA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgY3ZzaW1wb3J0IHRlc3RzLCBjdnMgbm90IGZvdW5kJworCXRlc3RfZG9uZQorZmkKKworQ1ZTPSJjdnMgLWYiCitleHBvcnQgQ1ZTCisKK2N2c3BzX3ZlcnNpb249JChjdnNwcyAtaCAyPiYxIHwgc2VkIC1uZSAncy9jdnNwcyB2ZXJzaW9uIC8vcCcpCitjYXNlICIkY3ZzcHNfdmVyc2lvbiIgaW4KKzIuMSB8IDIuMiopCisJOzsKKycnKQorCXNraXBfYWxsPSdza2lwcGluZyBjdnNpbXBvcnQgdGVzdHMsIGN2c3BzIG5vdCBmb3VuZCcKKwl0ZXN0X2RvbmUKKwk7OworKikKKwlza2lwX2FsbD0nc2tpcHBpbmcgY3ZzaW1wb3J0IHRlc3RzLCB1bnN1cHBvcnRlZCBjdnNwcyB2ZXJzaW9uJworCXRlc3RfZG9uZQorCTs7Citlc2FjCisKK3NldHVwX2N2c190ZXN0X3JlcG9zaXRvcnkgKCkgeworCUNWU1JPT1Q9IiQocHdkKS8uY3Zzcm9vdCIgJiYKKwljcCAtciAiJFRFU1RfRElSRUNUT1JZLyQxL2N2c3Jvb3QiICIkQ1ZTUk9PVCIgJiYKKwlleHBvcnQgQ1ZTUk9PVAorfQorCit0ZXN0X2N2c19jbyAoKSB7CisJIyBVc2FnZTogdGVzdF9jdnNfY28gQlJBTkNIX05BTUUKKwlybSAtcmYgbW9kdWxlLWN2cy0iJDEiCisJaWYgWyAiJDEiID0gIm1hc3RlciIgXQorCXRoZW4KKwkJJENWUyBjbyAtUCAtZCBtb2R1bGUtY3ZzLSIkMSIgLUEgbW9kdWxlCisJZWxzZQorCQkkQ1ZTIGNvIC1QIC1kIG1vZHVsZS1jdnMtIiQxIiAtciAiJDEiIG1vZHVsZQorCWZpCit9CisKK3Rlc3RfZ2l0X2NvICgpIHsKKwkjIFVzYWdlOiB0ZXN0X2dpdF9jbyBCUkFOQ0hfTkFNRQorCShjZCBtb2R1bGUtZ2l0ICYmIGdpdCBjaGVja291dCAiJDEiKQorfQorCit0ZXN0X2NtcF9icmFuY2hfZmlsZSAoKSB7CisJIyBVc2FnZTogdGVzdF9jbXBfYnJhbmNoX2ZpbGUgQlJBTkNIX05BTUUgUEFUSAorCSMgVGhlIGJyYW5jaCBtdXN0IGFscmVhZHkgYmUgY2hlY2tlZCBvdXQgb2YgQ1ZTIGFuZCBnaXQuCisJdGVzdF9jbXAgbW9kdWxlLWN2cy0iJDEiLyIkMiIgbW9kdWxlLWdpdC8iJDIiCit9CisKK3Rlc3RfY21wX2JyYW5jaF90cmVlICgpIHsKKwkjIFVzYWdlOiB0ZXN0X2NtcF9icmFuY2hfdHJlZSBCUkFOQ0hfTkFNRQorCSMgQ2hlY2sgQlJBTkNIX05BTUUgb3V0IG9mIENWUyBhbmQgZ2l0IGFuZCBtYWtlIHN1cmUgdGhhdCBhbGwKKwkjIG9mIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYXJlIGlkZW50aWNhbC4KKworCXRlc3RfY3ZzX2NvICIkMSIgJiYKKwl0ZXN0X2dpdF9jbyAiJDEiICYmCisJKAorCQljZCBtb2R1bGUtY3ZzLSIkMSIKKwkJZmluZCAuIC10eXBlIGQgLW5hbWUgQ1ZTIC1wcnVuZSAtbyAtdHlwZSBmIC1wcmludAorCSkgfCBzb3J0ID5tb2R1bGUtY3ZzLSIkMSIubGlzdCAmJgorCSgKKwkJY2QgbW9kdWxlLWdpdAorCQlmaW5kIC4gLXR5cGUgZCAtbmFtZSAuZ2l0IC1wcnVuZSAtbyAtdHlwZSBmIC1wcmludAorCSkgfCBzb3J0ID5tb2R1bGUtZ2l0LSIkMSIubGlzdCAmJgorCXRlc3RfY21wIG1vZHVsZS1jdnMtIiQxIi5saXN0IG1vZHVsZS1naXQtIiQxIi5saXN0ICYmCisJY2F0IG1vZHVsZS1jdnMtIiQxIi5saXN0IHwgd2hpbGUgcmVhZCBmCisJZG8KKwkJdGVzdF9jbXBfYnJhbmNoX2ZpbGUgIiQxIiAiJGYiIHx8IHJldHVybiAxCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvdC9saWItZGlmZi1hbHRlcm5hdGl2ZS5zaCBiL3QvbGliLWRpZmYtYWx0ZXJuYXRpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxZTQwOAotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWRpZmYtYWx0ZXJuYXRpdmUuc2gKQEAgLTAsMCArMSwxNzAgQEAKKyMgSGVscGVycyBzaGFyZWQgYnkgdGhlIHRlc3Qgc2NyaXB0cyBmb3IgZGlmZiBhbGdvcml0aG1zIChwYXRpZW5jZSwKKyMgaGlzdG9ncmFtLCBldGMpLgorCit0ZXN0X2RpZmZfZnJvYm5pdHooKSB7CisJY2F0ID5maWxlMSA8PFxFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvLyBGcm9icyBmb28gaGVhcnRpbHkKK2ludCBmcm9ibml0eihpbnQgZm9vKQoreworICAgIGludCBpOworICAgIGZvcihpID0gMDsgaSA8IDEwOyBpKyspCisgICAgeworICAgICAgICBwcmludGYoIllvdXIgYW5zd2VyIGlzOiAiKTsKKyAgICAgICAgcHJpbnRmKCIlZFxuIiwgZm9vKTsKKyAgICB9Cit9CisKK2ludCBmYWN0KGludCBuKQoreworICAgIGlmKG4gPiAxKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhY3Qobi0xKSAqIG47CisgICAgfQorICAgIHJldHVybiAxOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZnJvYm5pdHooZmFjdCgxMCkpOworfQorRU9GCisKKwljYXQgPmZpbGUyIDw8XEVPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBmaWIoaW50IG4pCit7CisgICAgaWYobiA+IDIpCisgICAgeworICAgICAgICByZXR1cm4gZmliKG4tMSkgKyBmaWIobi0yKTsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKKy8vIEZyb2JzIGZvbyBoZWFydGlseQoraW50IGZyb2JuaXR6KGludCBmb28pCit7CisgICAgaW50IGk7CisgICAgZm9yKGkgPSAwOyBpIDwgMTA7IGkrKykKKyAgICB7CisgICAgICAgIHByaW50ZigiJWRcbiIsIGZvbyk7CisgICAgfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZnJvYm5pdHooZmliKDEwKSk7Cit9CitFT0YKKworCWZpbGUxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUxKSkKKwlmaWxlMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBmaWxlMikpCisJY2F0ID5leHBlY3QgPDxFT0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUyCitpbmRleCAkZmlsZTEuLiRmaWxlMiAxMDA2NDQKKy0tLSBhL2ZpbGUxCisrKysgYi9maWxlMgorQEAgLTEsMjYgKzEsMjUgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAKKytpbnQgZmliKGludCBuKQorK3sKKysgICAgaWYobiA+IDIpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmaWIobi0xKSArIGZpYihuLTIpOworKyAgICB9CisrICAgIHJldHVybiAxOworK30KKysKKyAvLyBGcm9icyBmb28gaGVhcnRpbHkKKyBpbnQgZnJvYm5pdHooaW50IGZvbykKKyB7CisgICAgIGludCBpOworICAgICBmb3IoaSA9IDA7IGkgPCAxMDsgaSsrKQorICAgICB7CistICAgICAgICBwcmludGYoIllvdXIgYW5zd2VyIGlzOiAiKTsKKyAgICAgICAgIHByaW50ZigiJWRcbiIsIGZvbyk7CisgICAgIH0KKyB9CisgCistaW50IGZhY3QoaW50IG4pCisteworLSAgICBpZihuID4gMSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGZhY3Qobi0xKSAqIG47CistICAgIH0KKy0gICAgcmV0dXJuIDE7CistfQorLQorIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CistICAgIGZyb2JuaXR6KGZhY3QoMTApKTsKKysgICAgZnJvYm5pdHooZmliKDEwKSk7CisgfQorRU9GCisKKwlTVFJBVEVHWT0kMQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJFNUUkFURUdZIGRpZmYiICcKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAiLS0kU1RSQVRFR1kiIGZpbGUxIGZpbGUyID4gb3V0cHV0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkU1RSQVRFR1kgZGlmZiBvdXRwdXQgaXMgdmFsaWQiICcKKwkJbXYgZmlsZTIgZXhwZWN0ICYmCisJCWdpdCBhcHBseSA8IG91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgZmlsZTIKKwknCit9CisKK3Rlc3RfZGlmZl91bmlxdWUoKSB7CisJY2F0ID51bmlxMSA8PFxFT0YKKzEKKzIKKzMKKzQKKzUKKzYKK0VPRgorCisJY2F0ID51bmlxMiA8PFxFT0YKK2EKK2IKK2MKK2QKK2UKK2YKK0VPRgorCisJdW5pcTE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgdW5pcTEpKQorCXVuaXEyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHVuaXEyKSkKKwljYXQgPmV4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL3VuaXExIGIvdW5pcTIKK2luZGV4ICR1bmlxMS4uJHVuaXEyIDEwMDY0NAorLS0tIGEvdW5pcTEKKysrKyBiL3VuaXEyCitAQCAtMSw2ICsxLDYgQEAKKy0xCistMgorLTMKKy00CistNQorLTYKKythCisrYgorK2MKKytkCisrZQorK2YKK0VPRgorCisJU1RSQVRFR1k9JDEKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXBsZXRlbHkgZGlmZmVyZW50IGZpbGVzJyAnCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggIi0tJFNUUkFURUdZIiB1bmlxMSB1bmlxMiA+IG91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJJworfQorCmRpZmYgLS1naXQgYS90L2xpYi1nZXR0ZXh0LnNoIGIvdC9saWItZ2V0dGV4dC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTM5YjQyCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZ2V0dGV4dC5zaApAQCAtMCwwICsxLDYzIEBACisjIEluaXRpYWxpemF0aW9uIGFuZCBJY2VsYW5kaWMgbG9jYWxlIGZvciBiYXNpYyBnaXQgaTE4biB0ZXN0cywKKyMgd2hpY2ggc291cmNlIHRoaXMgc2NyaXB0bGV0IGluc3RlYWQgb2YgLi90ZXN0LWxpYi5zaC4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uCisjCisKKy4gLi90ZXN0LWxpYi5zaAorCitHSVRfVEVYVERPTUFJTkRJUj0iJEdJVF9CVUlMRF9ESVIvcG8vYnVpbGQvbG9jYWxlIgorR0lUX1BPX1BBVEg9IiRHSVRfQlVJTERfRElSL3BvIgorZXhwb3J0IEdJVF9URVhURE9NQUlORElSIEdJVF9QT19QQVRICisKK2lmIHRlc3QgLW4gIiRHSVRfVEVTVF9JTlNUQUxMRUQiCit0aGVuCisJLiAiJChnaXQgLS1leGVjLXBhdGgpIi9naXQtc2gtaTE4bgorZWxzZQorCS4gIiRHSVRfQlVJTERfRElSIi9naXQtc2gtaTE4bgorZmkKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBHRVRURVhUICYmIHRlc3RfaGF2ZV9wcmVyZXEgQ19MT0NBTEVfT1VUUFVUCit0aGVuCisJIyBpc19JUy5VVEYtOCBvbiBTb2xhcmlzIGFuZCBGcmVlQlNELCBpc19JUy51dGY4IG9uIERlYmlhbgorCWlzX0lTX2xvY2FsZT0kKGxvY2FsZSAtYSAyPi9kZXYvbnVsbCB8CisJCXNlZCAtbiAnL15pc19JU1wuW3VVXVt0VF1bZkZdLSo4JC97CisJCXAKKwkJcQorCX0nKQorCSMgaXNfSVMuSVNPODg1OS0xIG9uIFNvbGFyaXMgYW5kIEZyZWVCU0QsIGlzX0lTLmlzbzg4NTkxIG9uIERlYmlhbgorCWlzX0lTX2lzb19sb2NhbGU9JChsb2NhbGUgLWEgMj4vZGV2L251bGwgfAorCQlzZWQgLW4gJy9eaXNfSVNcLltpSV1bc1NdW29PXTg4NTktKjEkL3sKKwkJcAorCQlxCisJfScpCisKKwkjIEV4cG9ydCB0aGVtIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIHRoZSB0MDIwMi90ZXN0LnBsIFBlcmwKKwkjIHRlc3QgY2FuIHVzZSBpdCB0b28KKwlleHBvcnQgaXNfSVNfbG9jYWxlIGlzX0lTX2lzb19sb2NhbGUKKworCWlmIHRlc3QgLW4gIiRpc19JU19sb2NhbGUiICYmCisJCXRlc3QgJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSAhPSAiZmFsbHRocm91Z2giCisJdGhlbgorCQkjIFNvbWUgb2YgdGhlIHRlc3RzIG5lZWQgdGhlIHJlZmVyZW5jZSBJY2VsYW5kaWMgbG9jYWxlCisJCXRlc3Rfc2V0X3ByZXJlcSBHRVRURVhUX0xPQ0FMRQorCisJCSMgRXhwb3J0aW5nIGZvciB0MDIwMi90ZXN0LnBsCisJCUdFVFRFWFRfTE9DQUxFPTEKKwkJZXhwb3J0IEdFVFRFWFRfTE9DQUxFCisJCXNheSAiIyBsaWItZ2V0dGV4dDogRm91bmQgJyRpc19JU19sb2NhbGUnIGFzIGFuIGlzX0lTIFVURi04IGxvY2FsZSIKKwllbHNlCisJCXNheSAiIyBsaWItZ2V0dGV4dDogTm8gaXNfSVMgVVRGLTggbG9jYWxlIGF2YWlsYWJsZSIKKwlmaQorCisJaWYgdGVzdCAtbiAiJGlzX0lTX2lzb19sb2NhbGUiICYmCisJCXRlc3QgJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSAhPSAiZmFsbHRocm91Z2giCisJdGhlbgorCQkjIFNvbWUgb2YgdGhlIHRlc3RzIG5lZWQgdGhlIHJlZmVyZW5jZSBJY2VsYW5kaWMgbG9jYWxlCisJCXRlc3Rfc2V0X3ByZXJlcSBHRVRURVhUX0lTT19MT0NBTEUKKworCQlzYXkgIiMgbGliLWdldHRleHQ6IEZvdW5kICckaXNfSVNfaXNvX2xvY2FsZScgYXMgYW4gaXNfSVMgSVNPLTg4NTktMSBsb2NhbGUiCisJZWxzZQorCQlzYXkgIiMgbGliLWdldHRleHQ6IE5vIGlzX0lTIElTTy04ODU5LTEgbG9jYWxlIGF2YWlsYWJsZSIKKwlmaQorZmkKZGlmZiAtLWdpdCBhL3QvbGliLWdpdC1kYWVtb24uc2ggYi90L2xpYi1naXQtZGFlbW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MjU2OTIKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1naXQtZGFlbW9uLnNoCkBAIC0wLDAgKzEsMTIwIEBACisjIFNoZWxsIGxpYnJhcnkgdG8gcnVuIGdpdC1kYWVtb24gaW4gdGVzdHMuICBFbmRzIHRoZSB0ZXN0IGVhcmx5IGlmCisjIEdJVF9URVNUX0dJVF9EQUVNT04gaXMgbm90IHNldC4KKyMKKyMgVXNhZ2U6CisjCisjCS4gLi90ZXN0LWxpYi5zaAorIwkuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1naXQtZGFlbW9uLnNoCisjCXN0YXJ0X2dpdF9kYWVtb24KKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4uJyAnCisjCQkuLi4KKyMJJworIworIwl0ZXN0X2V4cGVjdF9zdWNjZXNzIC4uLgorIworIwl0ZXN0X2RvbmUKKworaWYgISB0ZXN0X2Jvb2xfZW52IEdJVF9URVNUX0dJVF9EQUVNT04gdHJ1ZQordGhlbgorCXNraXBfYWxsPSJnaXQtZGFlbW9uIHRlc3RpbmcgZGlzYWJsZWQgKHVuc2V0IEdJVF9URVNUX0dJVF9EQUVNT04gdG8gZW5hYmxlKSIKKwl0ZXN0X2RvbmUKK2ZpCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgIVBJUEUKK3RoZW4KKwl0ZXN0X3NraXBfb3JfZGllIEdJVF9URVNUX0dJVF9EQUVNT04gImZpbGUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgRklGT3MiCitmaQorCit0ZXN0X3NldF9wb3J0IExJQl9HSVRfREFFTU9OX1BPUlQKKworR0lUX0RBRU1PTl9QSUQ9CitHSVRfREFFTU9OX1BJREZJTEU9IiRQV0QiL2RhZW1vbi5waWQKK0dJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIPSIkUFdEIi9yZXBvCitHSVRfREFFTU9OX0hPU1RfUE9SVD0xMjcuMC4wLjE6JExJQl9HSVRfREFFTU9OX1BPUlQKK0dJVF9EQUVNT05fVVJMPWdpdDovLyRHSVRfREFFTU9OX0hPU1RfUE9SVAorCityZWdpc3RlcmVkX3N0b3BfZ2l0X2RhZW1vbl9hdGV4aXRfaGFuZGxlcj0KK3N0YXJ0X2dpdF9kYWVtb24oKSB7CisJaWYgdGVzdCAtbiAiJEdJVF9EQUVNT05fUElEIgorCXRoZW4KKwkJZXJyb3IgInN0YXJ0X2dpdF9kYWVtb24gYWxyZWFkeSBjYWxsZWQiCisJZmkKKworCW1rZGlyIC1wICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiCisKKwkjIE9uZSBvZiB0aGUgdGVzdCBzY3JpcHRzIHN0b3BzIGFuZCB0aGVuIHJlLXN0YXJ0cyAnZ2l0IGRhZW1vbicuCisJIyBEb24ndCByZWdpc3RlciBhbmQgdGhlbiBydW4gdGhlIHNhbWUgYXRleGl0IGhhbmRsZXJzIHNldmVyYWwgdGltZXMuCisJaWYgdGVzdCAteiAiJHJlZ2lzdGVyZWRfc3RvcF9naXRfZGFlbW9uX2F0ZXhpdF9oYW5kbGVyIgorCXRoZW4KKwkJdGVzdF9hdGV4aXQgJ3N0b3BfZ2l0X2RhZW1vbicKKwkJcmVnaXN0ZXJlZF9zdG9wX2dpdF9kYWVtb25fYXRleGl0X2hhbmRsZXI9QWxyZWFkeURvbmUKKwlmaQorCisJc2F5ID4mMyAiU3RhcnRpbmcgZ2l0IGRhZW1vbiAuLi4iCisJbWtmaWZvIGdpdF9kYWVtb25fb3V0cHV0CisJJHtMSUJfR0lUX0RBRU1PTl9DT01NQU5EOi1naXQgZGFlbW9ufSBcCisJCS0tbGlzdGVuPTEyNy4wLjAuMSAtLXBvcnQ9IiRMSUJfR0lUX0RBRU1PTl9QT1JUIiBcCisJCS0tcmV1c2VhZGRyIC0tdmVyYm9zZSAtLXBpZC1maWxlPSIkR0lUX0RBRU1PTl9QSURGSUxFIiBcCisJCS0tYmFzZS1wYXRoPSIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiIFwKKwkJIiRAIiAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIiBcCisJCT4mMyAyPmdpdF9kYWVtb25fb3V0cHV0ICYKKwlHSVRfREFFTU9OX1BJRD0kIQorCXsKKwkJcmVhZCAtciBsaW5lIDwmNworCQlwcmludGYgIiVzXG4iICIkbGluZSIgPiY0CisJCWNhdCA8JjcgPiY0ICYKKwl9IDc8Z2l0X2RhZW1vbl9vdXRwdXQgJiYKKworCSMgQ2hlY2sgZXhwZWN0ZWQgb3V0cHV0CisJaWYgdGVzdCB4IiQoZXhwciAiJGxpbmUiIDogIlxbWzAtOV0qXF0gXCguKlwpIikiICE9IHgiUmVhZHkgdG8gcnVtYmxlIgorCXRoZW4KKwkJa2lsbCAiJEdJVF9EQUVNT05fUElEIgorCQl3YWl0ICIkR0lUX0RBRU1PTl9QSUQiCisJCXVuc2V0IEdJVF9EQUVNT05fUElECisJCXRlc3Rfc2tpcF9vcl9kaWUgR0lUX1RFU1RfR0lUX0RBRU1PTiBcCisJCQkiZ2l0IGRhZW1vbiBmYWlsZWQgdG8gc3RhcnQiCisJZmkKK30KKworc3RvcF9naXRfZGFlbW9uKCkgeworCWlmIHRlc3QgLXogIiRHSVRfREFFTU9OX1BJRCIKKwl0aGVuCisJCXJldHVybgorCWZpCisKKwkjIGtpbGwgZ2l0LWRhZW1vbiBjaGlsZCBvZiBnaXQKKwlzYXkgPiYzICJTdG9wcGluZyBnaXQgZGFlbW9uIC4uLiIKKwlraWxsICIkR0lUX0RBRU1PTl9QSUQiCisJd2FpdCAiJEdJVF9EQUVNT05fUElEIiA+JjMgMj4mNAorCXJldD0kPworCWlmICEgdGVzdF9tYXRjaF9zaWduYWwgMTUgJHJldAorCXRoZW4KKwkJZXJyb3IgImdpdCBkYWVtb24gZXhpdGVkIHdpdGggc3RhdHVzOiAkcmV0IgorCWZpCisJa2lsbCAiJChjYXQgIiRHSVRfREFFTU9OX1BJREZJTEUiKSIgMj4vZGV2L251bGwKKwlHSVRfREFFTU9OX1BJRD0KKwlybSAtZiBnaXRfZGFlbW9uX291dHB1dCAiJEdJVF9EQUVNT05fUElERklMRSIKK30KKworIyBBIHN0cmlwcGVkLWRvd24gdmVyc2lvbiBvZiBhIG5ldGNhdCBjbGllbnQsIHRoYXQgY29ubmVjdHMgdG8gYSAiaG9zdDpwb3J0IgorIyBnaXZlbiBpbiAkMSwgc2VuZHMgaXRzIHN0ZGluIGZvbGxvd2VkIGJ5IEVPRiwgdGhlbiBkdW1wcyB0aGUgcmVzcG9uc2UgKHVudGlsCisjIEVPRikgdG8gc3Rkb3V0LgorZmFrZV9uYygpIHsKKwlpZiAhIHRlc3RfZGVjbGFyZWRfcHJlcmVxIEZBS0VOQworCXRoZW4KKwkJZWNobyA+JjQgImZha2VfbmM6IG5lZWQgdG8gZGVjbGFyZSBGQUtFTkMgcHJlcmVxdWlzaXRlIgorCQlyZXR1cm4gMTI3CisJZmkKKwlwZXJsIC1Nc3RyaWN0IC1NSU86OlNvY2tldDo6SU5FVCAtZSAnCisJCW15ICRzID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KHNoaWZ0KQorCQkJb3IgZGllICJ1bmFibGUgdG8gb3BlbiBzb2NrZXQ6ICQhIjsKKwkJcHJpbnQgJHMgPFNURElOPjsKKwkJJHMtPnNodXRkb3duKDEpOworCQlwcmludCA8JHM+OworCScgIiRAIgorfQorCit0ZXN0X2xhenlfcHJlcmVxIEZBS0VOQyAnCisJcGVybCAtTUlPOjpTb2NrZXQ6OklORVQgLWUgImV4aXQgMCIKKycKZGlmZiAtLWdpdCBhL3QvbGliLWdpdC1wNC5zaCBiL3QvbGliLWdpdC1wNC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWZmMmFiCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZ2l0LXA0LnNoCkBAIC0wLDAgKzEsMjI0IEBACisjCisjIExpYnJhcnkgY29kZSBmb3IgZ2l0IHA0IHRlc3RzCisjCisKKyMgcDQgdGVzdHMgbmV2ZXIgdXNlIHRoZSB0b3AtbGV2ZWwgcmVwbzsgYWx3YXlzIGJ1aWxkL2Nsb25lIGludG8KKyMgYSBzdWJkaXJlY3RvcnkgY2FsbGVkICIkZ2l0IgorVEVTVF9OT19DUkVBVEVfUkVQTz1Ob1RoYW5rcworCisjIFNvbWUgb3BlcmF0aW9ucyByZXF1aXJlIG11bHRpcGxlIGF0dGVtcHRzIHRvIGJlIHN1Y2Nlc3NmdWwuIERlZmluZQorIyBoZXJlIHRoZSBtYXhpbWFsIHJldHJ5IHRpbWVvdXQgaW4gc2Vjb25kcy4KK1JFVFJZX1RJTUVPVVQ9NjAKKworIyBTb21ldGltZXMgcDRkIHNlZW1zIHRvIGhhbmcuIFRlcm1pbmF0ZSB0aGUgcDRkIHByb2Nlc3MgYXV0b21hdGljYWxseSBhZnRlcgorIyB0aGUgZGVmaW5lZCB0aW1lb3V0IGluIHNlY29uZHMuCitQNERfVElNRU9VVD0zMDAKKworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQWVRIT04KK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0IHA0IHRlc3RzOyBweXRob24gbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisoIHA0IC1oICYmIHA0ZCAtaCApID4vZGV2L251bGwgMj4mMSB8fCB7CisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCBwNCB0ZXN0czsgbm8gcDQgb3IgcDRkJworCXRlc3RfZG9uZQorfQorCisjIE9uIGN5Z3dpbiwgdGhlIE5UIHZlcnNpb24gb2YgUGVyZm9yY2UgY2FuIGJlIHVzZWQuICBXaGVuIGdpdmluZworIyBpdCBwYXRocywgZWl0aGVyIG9uIHRoZSBjb21tYW5kLWxpbmUgb3IgaW4gY2xpZW50IHNwZWNpZmljYXRpb25zLAorIyBiZSBzdXJlIHRvIHVzZSB0aGUgbmF0aXZlIHdpbmRvd3MgZm9ybS4KKyMKKyMgT2xkZXIgdmVyc2lvbnMgb2YgcGVyZm9yY2Ugd2VyZSBhdmFpbGFibGUgY29tcGlsZWQgbmF0aXZlbHkgZm9yCisjIGN5Z3dpbi4gIFRob3NlIGRvIG5vdCBhY2NlcHQgbmF0aXZlIHdpbmRvd3MgcGF0aHMsIHNvIG1ha2Ugc3VyZQorIyBub3QgdG8gY29udmVydCBmb3IgdGhlbS4KK25hdGl2ZV9wYXRoICgpIHsKKwlwYXRoPSIkMSIgJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIENZR1dJTiAmJiAhIHA0IC1WIHwgZ3JlcCAtcSBDWUdXSU4KKwl0aGVuCisJCXBhdGg9JChjeWdwYXRoIC0td2luZG93cyAiJHBhdGgiKQorCWVsc2UKKwkJcGF0aD0kKHRlc3QtdG9vbCBwYXRoLXV0aWxzIHJlYWxfcGF0aCAiJHBhdGgiKQorCWZpICYmCisJZWNobyAiJHBhdGgiCit9CisKK3Rlc3Rfc2V0X3BvcnQgUDREUE9SVAorCitQNFBPUlQ9bG9jYWxob3N0OiRQNERQT1JUCitQNENMSUVOVD1jbGllbnQKK1A0VVNFUj1hdXRob3IKK1A0RURJVE9SPXRydWUKK3Vuc2V0IFA0Q0hBUlNFVAorZXhwb3J0IFA0UE9SVCBQNENMSUVOVCBQNFVTRVIgUDRFRElUT1IgUDRDSEFSU0VUCisKK2RiPSIkVFJBU0hfRElSRUNUT1JZL2RiIgorY2xpPSIkVFJBU0hfRElSRUNUT1JZL2NsaSIKK2dpdD0iJFRSQVNIX0RJUkVDVE9SWS9naXQiCitwaWRmaWxlPSIkVFJBU0hfRElSRUNUT1JZL3A0ZC5waWQiCisKK3N0b3BfcDRkX2FuZF93YXRjaGRvZyAoKSB7CisJa2lsbCAtOSAkcDRkX3BpZCAkd2F0Y2hkb2dfcGlkCit9CisKKyMgZ2l0IHA0IHN1Ym1pdCBnZW5lcmF0ZXMgYSB0ZW1wIGZpbGUsIHdoaWNoIHdpbGwKKyMgbm90IGdldCBjbGVhbmVkIHVwIGlmIHRoZSBzdWJtaXNzaW9uIGZhaWxzLiAgRG9uJ3QKKyMgY2x1dHRlciB1cCAvdG1wIG9uIHRoZSB0ZXN0IG1hY2hpbmUuCitUTVBESVI9IiRUUkFTSF9ESVJFQ1RPUlkiCitleHBvcnQgVE1QRElSCisKK3JlZ2lzdGVyZWRfc3RvcF9wNGRfYXRleGl0X2hhbmRsZXI9CitzdGFydF9wNGQgKCkgeworCSMgT25lIG9mIHRoZSB0ZXN0IHNjcmlwdHMgc3RvcHMgYW5kIHRoZW4gcmUtc3RhcnRzIHA0ZC4KKwkjIERvbid0IHJlZ2lzdGVyIGFuZCB0aGVuIHJ1biB0aGUgc2FtZSBhdGV4aXQgaGFuZGxlcnMgc2V2ZXJhbCB0aW1lcy4KKwlpZiB0ZXN0IC16ICIkcmVnaXN0ZXJlZF9zdG9wX3A0ZF9hdGV4aXRfaGFuZGxlciIKKwl0aGVuCisJCXRlc3RfYXRleGl0ICdzdG9wX3A0ZF9hbmRfd2F0Y2hkb2cnCisJCXJlZ2lzdGVyZWRfc3RvcF9wNGRfYXRleGl0X2hhbmRsZXI9QWxyZWFkeURvbmUKKwlmaQorCisJbWtkaXIgLXAgIiRkYiIgIiRjbGkiICIkZ2l0IiAmJgorCXJtIC1mICIkcGlkZmlsZSIgJiYKKwkoCisJCWNkICIkZGIiICYmCisJCXsKKwkJCXA0ZCAtcSAtcCAkUDREUE9SVCAiJEAiICYKKwkJCWVjaG8gJCEgPiIkcGlkZmlsZSIKKwkJfQorCSkgJiYKKwlwNGRfcGlkPSQoY2F0ICIkcGlkZmlsZSIpCisKKwkjIFRoaXMgZ2l2ZXMgcDRkIGEgbG9uZyB0aW1lIHRvIHN0YXJ0IHVwLCBhcyBpdCBjYW4gYmUKKwkjIHF1aXRlIHNsb3cgZGVwZW5kaW5nIG9uIHRoZSBtYWNoaW5lLiAgU2V0IHRoaXMgZW52aXJvbm1lbnQKKwkjIHZhcmlhYmxlIHRvIHNvbWV0aGluZyBzbWFsbGVyIHRvIGZhaWwgZmFzdGVyIGluLCBzYXksCisJIyBhbiBhdXRvbWF0ZWQgdGVzdCBzZXR1cC4gIElmIHRoZSBwNGQgcHJvY2VzcyBkaWVzLCB0aGF0CisJIyB3aWxsIGJlIGNhdWdodCB3aXRoIHRoZSAia2lsbCAtMCIgY2hlY2sgYmVsb3cuCisJaT0ke1A0RF9TVEFSVF9QQVRJRU5DRTotMzAwfQorCisJbnJfdHJpZXNfbGVmdD0kUDREX1RJTUVPVVQKKwl3aGlsZSB0cnVlCisJZG8KKwkJaWYgdGVzdCAkbnJfdHJpZXNfbGVmdCAtZXEgMAorCQl0aGVuCisJCQlraWxsIC05ICRwNGRfcGlkCisJCQlleGl0IDEKKwkJZmkKKwkJc2xlZXAgMQorCQlucl90cmllc19sZWZ0PSQoKCRucl90cmllc19sZWZ0IC0gMSkpCisJZG9uZSAyPi9kZXYvbnVsbCA0PiYyICYKKwl3YXRjaGRvZ19waWQ9JCEKKworCXJlYWR5PQorCXdoaWxlIHRlc3QgJGkgLWd0IDAKKwlkbworCQkjIHN1Y2NlZWQgd2hlbiBwNCBjbGllbnQgY29tbWFuZHMgc3RhcnQgdG8gd29yaworCQlpZiBwNCBpbmZvID4vZGV2L251bGwgMj4mMQorCQl0aGVuCisJCQlyZWFkeT10cnVlCisJCQlicmVhaworCQlmaQorCQkjIGZhaWwgaWYgcDRkIGRpZWQKKwkJa2lsbCAtMCAkcDRkX3BpZCAyPi9kZXYvbnVsbCB8fCBicmVhaworCQllY2hvIHdhaXRpbmcgZm9yIHA0ZCB0byBzdGFydAorCQlzbGVlcCAxCisJCWk9JCgoICRpIC0gMSApKQorCWRvbmUKKworCWlmIHRlc3QgLXogIiRyZWFkeSIKKwl0aGVuCisJCSMgcDRkIGZhaWxlZCB0byBzdGFydAorCQlyZXR1cm4gMQorCWZpCisKKwkjIGJ1aWxkIGEgcDQgdXNlciBzbyBhdXRob3JAZXhhbXBsZS5jb20gaGFzIGFuIGVudHJ5CisJcDRfYWRkX3VzZXIgYXV0aG9yCisKKwkjIGJ1aWxkIGEgY2xpZW50CisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKworCXJldHVybiAwCit9CisKK3A0X2FkZF91c2VyICgpIHsKKwluYW1lPSQxICYmCisJcDQgdXNlciAtZiAtaSA8PC1FT0YKKwlVc2VyOiAkbmFtZQorCUVtYWlsOiAkbmFtZUBleGFtcGxlLmNvbQorCUZ1bGxOYW1lOiBEci4gJG5hbWUKKwlFT0YKK30KKworcDRfYWRkX2pvYiAoKSB7CisJcDQgam9iIC1mIC1pIDw8LUVPRgorCUpvYjogJDEKKwlTdGF0dXM6IG9wZW4KKwlVc2VyOiBkdW1teQorCURlc2NyaXB0aW9uOgorCUVPRgorfQorCityZXRyeV91bnRpbF9zdWNjZXNzICgpIHsKKwlucl90cmllc19sZWZ0PSRSRVRSWV9USU1FT1VUCisJdW50aWwgIiRAIiAyPi9kZXYvbnVsbCB8fCB0ZXN0ICRucl90cmllc19sZWZ0IC1lcSAwCisJZG8KKwkJc2xlZXAgMQorCQlucl90cmllc19sZWZ0PSQoKCRucl90cmllc19sZWZ0IC0gMSkpCisJZG9uZQorfQorCitzdG9wX2FuZF9jbGVhbnVwX3A0ZCAoKSB7CisJa2lsbCAtOSAkcDRkX3BpZCAkd2F0Y2hkb2dfcGlkCisJd2FpdCAkcDRkX3BpZAorCXJtIC1yZiAiJGRiIiAiJGNsaSIgIiRwaWRmaWxlIgorfQorCitjbGVhbnVwX2dpdCAoKSB7CisJcmV0cnlfdW50aWxfc3VjY2VzcyBybSAtciAiJGdpdCIKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJGdpdCIgJiYKKwlyZXRyeV91bnRpbF9zdWNjZXNzIG1rZGlyICIkZ2l0IgorfQorCittYXJzaGFsX2R1bXAgKCkgeworCXdoYXQ9JDEgJiYKKwlsaW5lPSR7MjotMX0gJiYKKwljYXQgPiIkVFJBU0hfRElSRUNUT1JZL21hcnNoYWwtZHVtcC5weSIgPDwtRU9GICYmCisJaW1wb3J0IG1hcnNoYWwKKwlpbXBvcnQgc3lzCisJaW5zdHJlYW0gPSBnZXRhdHRyKHN5cy5zdGRpbiwgJ2J1ZmZlcicsIHN5cy5zdGRpbikKKwlmb3IgaSBpbiByYW5nZSgkbGluZSk6CisJICAgIGQgPSBtYXJzaGFsLmxvYWQoaW5zdHJlYW0pCisJcHJpbnQoZFtiJyR3aGF0J10uZGVjb2RlKCd1dGYtOCcpKQorCUVPRgorCSIkUFlUSE9OX1BBVEgiICIkVFJBU0hfRElSRUNUT1JZL21hcnNoYWwtZHVtcC5weSIKK30KKworIworIyBDb25zdHJ1Y3QgYSBjbGllbnQgd2l0aCB0aGlzIGxpc3Qgb2YgVmlldyBsaW5lcworIworY2xpZW50X3ZpZXcgKCkgeworCSgKKwkJY2F0IDw8LUVPRiAmJgorCQlDbGllbnQ6ICRQNENMSUVOVAorCQlEZXNjcmlwdGlvbjogJFA0Q0xJRU5UCisJCVJvb3Q6ICRjbGkKKwkJQWx0Um9vdHM6ICQobmF0aXZlX3BhdGggIiRjbGkiKQorCQlMaW5lRW5kOiB1bml4CisJCVZpZXc6CisJCUVPRgorCQlwcmludGYgIlx0JXNcbiIgIiRAIgorCSkgfCBwNCBjbGllbnQgLWkKK30KKworaXNfY2xpX2ZpbGVfd3JpdGVhYmxlICgpIHsKKwkjIGN5Z3dpbiB2ZXJzaW9uIG9mIHA0IGRvZXMgbm90IHNldCByZWFkLW9ubHkgYXR0ciwKKwkjIHdpbGwgYmUgbWFya2VkIDQ0NCBidXQgLXcgaXMgdHJ1ZQorCWZpbGU9IiQxIiAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgQ1lHV0lOICYmIHA0IC1WIHwgZ3JlcCAtcSBDWUdXSU4KKwl0aGVuCisJCXN0YXQ9JChzdGF0IC0tZm9ybWF0PSVhICIkZmlsZSIpICYmCisJCXRlc3QgJHN0YXQgPSA2NDQKKwllbHNlCisJCXRlc3QgLXcgIiRmaWxlIgorCWZpCit9CmRpZmYgLS1naXQgYS90L2xpYi1naXQtc3ZuLnNoIGIvdC9saWItZ2l0LXN2bi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDI0OGU2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZ2l0LXN2bi5zaApAQCAtMCwwICsxLDEzMiBAQAorLiAuL3Rlc3QtbGliLnNoCisKK2lmIHRlc3QgLW4gIiROT19TVk5fVEVTVFMiCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCBzdm4gdGVzdHMsIE5PX1NWTl9URVNUUyBkZWZpbmVkJworCXRlc3RfZG9uZQorZmkKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCBzdm4gdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKK0dJVF9ESVI9JFBXRC8uZ2l0CitHSVRfU1ZOX0RJUj0kR0lUX0RJUi9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4KK1NWTl9UUkVFPSRHSVRfU1ZOX0RJUi9zdm4tdHJlZQordGVzdF9zZXRfcG9ydCBTVk5TRVJWRV9QT1JUCisKK3N2biA+L2Rldi9udWxsIDI+JjEKK2lmIHRlc3QgJD8gLW5lIDEKK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0IHN2biB0ZXN0cywgc3ZuIG5vdCBmb3VuZCcKKwl0ZXN0X2RvbmUKK2ZpCisKK3N2bnJlcG89JFBXRC9zdm5yZXBvCitleHBvcnQgc3ZucmVwbworc3ZuY29uZj0kUFdEL3N2bmNvbmYKK2V4cG9ydCBzdm5jb25mCisKK3BlcmwgLXcgLWUgIgordXNlIFNWTjo6Q29yZTsKK3VzZSBTVk46OlJlcG9zOworXCRTVk46OkNvcmU6OlZFUlNJT04gZ3QgJzEuMS4wJyBvciBleGl0KDQyKTsKK3N5c3RlbShxdy9zdm5hZG1pbiBjcmVhdGUgLS1mcy10eXBlIGZzZnMvLCBcJEVOVntzdm5yZXBvfSkgPT0gMCBvciBleGl0KDQxKTsKKyIgPiYzIDI+JjQKK3g9JD8KK2lmIHRlc3QgJHggLW5lIDAKK3RoZW4KKwlpZiB0ZXN0ICR4IC1lcSA0MjsgdGhlbgorCQlza2lwX2FsbD0nUGVybCBTVk4gbGlicmFyaWVzIG11c3QgYmUgPj0gMS4xLjAnCisJZWxpZiB0ZXN0ICR4IC1lcSA0MTsgdGhlbgorCQlza2lwX2FsbD0nc3ZuYWRtaW4gZmFpbGVkIHRvIGNyZWF0ZSBmc2ZzIHJlcG9zaXRvcnknCisJZWxzZQorCQlza2lwX2FsbD0nUGVybCBTVk4gbGlicmFyaWVzIG5vdCBmb3VuZCBvciB1bnVzYWJsZScKKwlmaQorCXRlc3RfZG9uZQorZmkKKworcmF3c3ZucmVwbz0iJHN2bnJlcG8iCitzdm5yZXBvPSJmaWxlOi8vJHN2bnJlcG8iCisKK3Bva2UoKSB7CisJdGVzdC10b29sIGNobXRpbWUgKzEgIiQxIgorfQorCisjIFdlIG5lZWQgdGhpcywgYmVjYXVzZSB3ZSBzaG91bGQgcGFzcyBlbXB0eSBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSB0bworIyB0aGUgJ3N2biBjb21taXQnIHRvIGF2b2lkIGF1dG9tYXRlZCBwcm9wZXJ0eSBjaGFuZ2VzIGFuZCBvdGhlciBzdHVmZgorIyB0aGF0IGNvdWxkIGJlIHNldCBmcm9tIHVzZXIncyBjb25maWd1cmF0aW9uIGZpbGVzIGluIH4vLnN1YnZlcnNpb24uCitzdm5fY21kICgpIHsKKwlbIC1kICIkc3ZuY29uZiIgXSB8fCBta2RpciAiJHN2bmNvbmYiCisJb3JpZ19zdm5jbWQ9IiQxIjsgc2hpZnQKKwlpZiBbIC16ICIkb3JpZ19zdm5jbWQiIF07IHRoZW4KKwkJc3ZuCisJCXJldHVybgorCWZpCisJc3ZuICIkb3JpZ19zdm5jbWQiIC0tY29uZmlnLWRpciAiJHN2bmNvbmYiICIkQCIKK30KKworbWF5YmVfc3RhcnRfaHR0cGQgKCkgeworCWxvYz0kezEtc3ZufQorCisJaWYgdGVzdF9ib29sX2VudiBHSVRfVEVTVF9TVk5fSFRUUEQgZmFsc2UKKwl0aGVuCisJCS4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCisJCUxJQl9IVFRQRF9TVk49IiRsb2MiCisJCXN0YXJ0X2h0dHBkCisJZmkKK30KKworY29udmVydF90b19yZXZfZGIgKCkgeworCXBlcmwgLXcgLS0gLSAiJEAiIDw8XEVPRgordXNlIHN0cmljdDsKK0BBUkdWID09IDIgb3IgZGllICJ1c2FnZTogY29udmVydF90b19yZXZfZGIgPGlucHV0PiA8b3V0cHV0PiI7CitvcGVuIG15ICR3ciwgJys+JywgJEFSR1ZbMV0gb3IgZGllICIkITogY291bGRuJ3Qgb3BlbjogJEFSR1ZbMV0iOworb3BlbiBteSAkcmQsICc8JywgJEFSR1ZbMF0gb3IgZGllICIkITogY291bGRuJ3Qgb3BlbjogJEFSR1ZbMF0iOworbXkgJHNpemUgPSAoc3RhdCgkcmQpKVs3XTsKKygkc2l6ZSAlIDI0KSA9PSAwIG9yIGRpZSAiSW5jb25zaXN0ZW50IHNpemU6ICRzaXplIjsKK3doaWxlIChzeXNyZWFkKCRyZCwgbXkgJGJ1ZiwgMjQpID09IDI0KSB7CisJbXkgKCRyLCAkYykgPSB1bnBhY2soJ05INDAnLCAkYnVmKTsKKwlteSAkb2Zmc2V0ID0gJHIgKiA0MTsKKwlzZWVrICR3ciwgMCwgMiBvciBkaWUgJCE7CisJbXkgJHBvcyA9IHRlbGwgJHdyOworCWlmICgkcG9zIDwgJG9mZnNldCkgeworCQlmb3IgKDEgLi4gKCgkb2Zmc2V0IC0gJHBvcykgLyA0MSkpIHsKKwkJCXByaW50ICR3ciAoKCcwJyB4IDQwKSwiXG4iKSBvciBkaWUgJCE7CisJCX0KKwl9CisJc2VlayAkd3IsICRvZmZzZXQsIDAgb3IgZGllICQhOworCXByaW50ICR3ciAkYywiXG4iIG9yIGRpZSAkITsKK30KK2Nsb3NlICR3ciBvciBkaWUgJCE7CitjbG9zZSAkcmQgb3IgZGllICQhOworRU9GCit9CisKK3JlcXVpcmVfc3Zuc2VydmUgKCkgeworCWlmICEgdGVzdF9ib29sX2VudiBHSVRfVEVTVF9TVk5TRVJWRSBmYWxzZQorCXRoZW4KKwkJc2tpcF9hbGw9J3NraXBwaW5nIHN2bnNlcnZlIHRlc3QuIChzZXQgJEdJVF9URVNUX1NWTlNFUlZFIHRvIGVuYWJsZSknCisJCXRlc3RfZG9uZQorCWZpCit9CisKK3N0YXJ0X3N2bnNlcnZlICgpIHsKKwlzdm5zZXJ2ZSAtLWxpc3Rlbi1wb3J0ICRTVk5TRVJWRV9QT1JUIFwKKwkJIC0tcm9vdCAiJHJhd3N2bnJlcG8iIFwKKwkJIC0tbGlzdGVuLW9uY2UgXAorCQkgLS1saXN0ZW4taG9zdCAxMjcuMC4wLjEgJgorfQorCitwcmVwYXJlX2FfdXRmOF9sb2NhbGUgKCkgeworCWFfdXRmOF9sb2NhbGU9JChsb2NhbGUgLWEgfCBzZWQgLW4gJy9cLlt1VV1bdFRdW2ZGXS0qOCQveworCXAKKwlxCit9JykKKwlpZiB0ZXN0IC1uICIkYV91dGY4X2xvY2FsZSIKKwl0aGVuCisJCXRlc3Rfc2V0X3ByZXJlcSBVVEY4CisJZWxzZQorCQlzYXkgIiMgVVRGLTggbG9jYWxlIG5vdCBhdmFpbGFibGUsIHNvbWUgdGVzdHMgYXJlIHNraXBwZWQiCisJZmkKK30KZGlmZiAtLWdpdCBhL3QvbGliLWdwZy5zaCBiL3QvbGliLWdwZy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmM1MjQxCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZ3BnLnNoCkBAIC0wLDAgKzEsOTYgQEAKKyMgV2UgYWx3YXlzIHNldCBHTlVQR0hPTUUsIGV2ZW4gaWYgbm8gdXNhYmxlIEdQRyB3YXMgZm91bmQsIGFzCisjCisjIC0gSXQgZG9lcyBub3QgaHVydCwgYW5kCisjCisjIC0gd2UgY2Fubm90IHNldCBnbG9iYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIGxhenkgcHJlcmVxcyBiZWNhdXNlIHRoZXkgYXJlCisjICAgZXhlY3V0ZWQgaW4gYW4gZXZhbCdlZCBzdWJzaGVsbCB0aGF0IGNoYW5nZXMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIGEKKyMgICB0ZW1wb3Jhcnkgb25lLgorCitHTlVQR0hPTUU9IiRQV0QvZ3BnaG9tZSIKK2V4cG9ydCBHTlVQR0hPTUUKKwordGVzdF9sYXp5X3ByZXJlcSBHUEcgJworCWdwZ192ZXJzaW9uPSQoZ3BnIC0tdmVyc2lvbiAyPiYxKQorCXRlc3QgJD8gIT0gMTI3IHx8IGV4aXQgMQorCisJIyBBcyBzYWlkIGhlcmU6IGh0dHA6Ly93d3cuZ251cGcub3JnL2RvY3VtZW50YXRpb24vZmFxcy5odG1sI3E2LjE5CisJIyB0aGUgZ3BnIHZlcnNpb24gMS4wLjYgZGlkIG5vdCBwYXJzZSB0cnVzdCBwYWNrZXRzIGNvcnJlY3RseSwgc28gZm9yCisJIyB0aGF0IHZlcnNpb24sIGNyZWF0aW9uIG9mIHNpZ25lZCB0YWdzIHVzaW5nIHRoZSBnZW5lcmF0ZWQga2V5IGZhaWxzLgorCWNhc2UgIiRncGdfdmVyc2lvbiIgaW4KKwkiZ3BnIChHbnVQRykgMS4wLjYiKikKKwkJc2F5ICJZb3VyIHZlcnNpb24gb2YgZ3BnICgxLjAuNikgaXMgdG9vIGJ1Z2d5IGZvciB0ZXN0aW5nIgorCQlleGl0IDEKKwkJOzsKKwkqKQorCQkjIEF2YWlsYWJsZSBrZXkgaW5mbzoKKwkJIyAqIFR5cGUgRFNBIGFuZCBFbGdhbWFsLCBzaXplIDIwNDggYml0cywgbm8gZXhwaXJhdGlvbiBkYXRlLAorCQkjICAgbmFtZSBhbmQgZW1haWw6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwkJIyAqIFR5cGUgUlNBLCBzaXplIDIwNDggYml0cywgbm8gZXhwaXJhdGlvbiBkYXRlLAorCQkjICAgbmFtZSBhbmQgZW1haWw6IEVyaXMgRGlzY29yZGlhIDxkaXNjb3JkQGV4YW1wbGUubmV0PgorCQkjIE5vIHBhc3N3b3JkIGdpdmVuLCB0byBlbmFibGUgbm9uLWludGVyYWN0aXZlIG9wZXJhdGlvbi4KKwkJIyBUbyBnZW5lcmF0ZSBuZXcga2V5OgorCQkjCWdwZyAtLWhvbWVkaXIgL3RtcC9ncGdob21lIC0tZ2VuLWtleQorCQkjIFRvIHdyaXRlIGFybW9yZWQgZXhwb3J0ZWQga2V5IHRvIGtleXJpbmc6CisJCSMJZ3BnIC0taG9tZWRpciAvdG1wL2dwZ2hvbWUgLS1leHBvcnQtc2VjcmV0LWtleXMgXAorCQkjCQktLWFybW9yIDB4REVBREJFRUYgPj4gbGliLWdwZy9rZXlyaW5nLmdwZworCQkjCWdwZyAtLWhvbWVkaXIgL3RtcC9ncGdob21lIC0tZXhwb3J0IFwKKwkJIwkJLS1hcm1vciAweERFQURCRUVGID4+IGxpYi1ncGcva2V5cmluZy5ncGcKKwkJIyBUbyBleHBvcnQgb3duZXJ0cnVzdDoKKwkJIwlncGcgLS1ob21lZGlyIC90bXAvZ3BnaG9tZSAtLWV4cG9ydC1vd25lcnRydXN0IFwKKwkJIwkJPiBsaWItZ3BnL293bmVydHJ1c3QKKwkJbWtkaXIgIiRHTlVQR0hPTUUiICYmCisJCWNobW9kIDA3MDAgIiRHTlVQR0hPTUUiICYmCisJCShncGdjb25mIC0ta2lsbCBncGctYWdlbnQgfHwgOiApICYmCisJCWdwZyAtLWhvbWVkaXIgIiR7R05VUEdIT01FfSIgLS1pbXBvcnQgXAorCQkJIiRURVNUX0RJUkVDVE9SWSIvbGliLWdwZy9rZXlyaW5nLmdwZyAmJgorCQlncGcgLS1ob21lZGlyICIke0dOVVBHSE9NRX0iIC0taW1wb3J0LW93bmVydHJ1c3QgXAorCQkJIiRURVNUX0RJUkVDVE9SWSIvbGliLWdwZy9vd25lcnRydXN0ICYmCisJCWdwZyAtLWhvbWVkaXIgIiR7R05VUEdIT01FfSIgPC9kZXYvbnVsbCA+L2Rldi9udWxsIFwKKwkJCS0tc2lnbiAtdSBjb21taXR0ZXJAZXhhbXBsZS5jb20KKwkJOzsKKwllc2FjCisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgR1BHU00gJworCXRlc3RfaGF2ZV9wcmVyZXEgR1BHICYmCisJIyBBdmFpbGFibGUga2V5IGluZm86CisJIyAqIHNlZSB0L2xpYi1ncGcvZ3Bnc20tZ2VuLWtleS5pbgorCSMgVG8gZ2VuZXJhdGUgbmV3IGNlcnRpZmljYXRlOgorCSMgICogbm8gcGFzc3BocmFzZQorCSMJZ3Bnc20gLS1ob21lZGlyIC90bXAvZ3BnaG9tZS8gXAorCSMJCS1vIC90bXAvZ3Bnc20uY3J0LnVzZXIgXAorCSMJCS0tZ2VuZXJhdGUta2V5IFwKKwkjCQktLWJhdGNoIHQvbGliLWdwZy9ncGdzbS1nZW4ta2V5LmluCisJIyBUbyBpbXBvcnQgY2VydGlmaWNhdGU6CisJIwlncGdzbSAtLWhvbWVkaXIgL3RtcC9ncGdob21lLyBcCisJIwkJLS1pbXBvcnQgL3RtcC9ncGdzbS5jcnQudXNlcgorCSMgVG8gZXhwb3J0IGludG8gYSAucDEyIHdlIGNhbiBsYXRlciBpbXBvcnQ6CisJIwlncGdzbSAtLWhvbWVkaXIgL3RtcC9ncGdob21lLyBcCisJIwkJLW8gdC9saWItZ3BnL2dwZ3NtX2NlcnQucDEyIFwKKwkjCQktLWV4cG9ydC1zZWNyZXQta2V5LXAxMiAiY29tbWl0dGVyQGV4YW1wbGUuY29tIgorCWVjaG8gfCBncGdzbSAtLWhvbWVkaXIgIiR7R05VUEdIT01FfSIgXAorCQktLXBhc3NwaHJhc2UtZmQgMCAtLXBpbmVudHJ5LW1vZGUgbG9vcGJhY2sgXAorCQktLWltcG9ydCAiJFRFU1RfRElSRUNUT1JZIi9saWItZ3BnL2dwZ3NtX2NlcnQucDEyICYmCisKKwlncGdzbSAtLWhvbWVkaXIgIiR7R05VUEdIT01FfSIgLUsgfAorCWdyZXAgZmluZ2VycHJpbnQ6IHwKKwljdXQgLWQiICIgLWY0IHwKKwl0ciAtZCAiXFxuIiA+IiR7R05VUEdIT01FfS90cnVzdGxpc3QudHh0IiAmJgorCisJZWNobyAiIFMgcmVsYXgiID4+IiR7R05VUEdIT01FfS90cnVzdGxpc3QudHh0IiAmJgorCWVjaG8gaGVsbG8gfCBncGdzbSAtLWhvbWVkaXIgIiR7R05VUEdIT01FfSIgPi9kZXYvbnVsbCBcCisJICAgICAgIC11IGNvbW1pdHRlckBleGFtcGxlLmNvbSAtbyAvZGV2L251bGwgLS1zaWduIC0KKycKKwordGVzdF9sYXp5X3ByZXJlcSBSRkMxOTkxICcKKwl0ZXN0X2hhdmVfcHJlcmVxIEdQRyAmJgorCWVjaG8gfCBncGcgLS1ob21lZGlyICIke0dOVVBHSE9NRX0iIC1iIC0tcmZjMTk5MSA+L2Rldi9udWxsCisnCisKK3Nhbml0aXplX3BncCgpIHsKKwlwZXJsIC1uZSAnCisJCS9eLS0tLS1FTkQgUEdQLyBhbmQgJGluX3BncCA9IDA7CisJCXByaW50IHVubGVzcyAkaW5fcGdwOworCQkvXi0tLS0tQkVHSU4gUEdQLyBhbmQgJGluX3BncCA9IDE7CisJJworfQpkaWZmIC0tZ2l0IGEvdC9saWItZ3BnL2dwZ3NtLWdlbi1rZXkuaW4gYi90L2xpYi1ncGcvZ3Bnc20tZ2VuLWtleS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2ZkODdjCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZ3BnL2dwZ3NtLWdlbi1rZXkuaW4KQEAgLTAsMCArMSw4IEBACitLZXktVHlwZTogUlNBCitLZXktTGVuZ3RoOiAyMDQ4CitLZXktVXNhZ2U6IHNpZ24KK1NlcmlhbDogcmFuZG9tCitOYW1lLUROOiBDTj1DIE8gTWl0dGVyLCBPPUV4YW1wbGUsIFNOPUMgTywgR049TWl0dGVyCitOYW1lLUVtYWlsOiBjb21taXR0ZXJAZXhhbXBsZS5jb20KK05vdC1CZWZvcmU6IDE5NzAtMDEtMDEgMDA6MDA6MDAKK05vdC1BZnRlcjogMzAwMC0wMS0wMSAwMDowMDowMApkaWZmIC0tZ2l0IGEvdC9saWItZ3BnL2dwZ3NtX2NlcnQucDEyIGIvdC9saWItZ3BnL2dwZ3NtX2NlcnQucDEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZmZhZDAKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1ncGcvZ3Bnc21fY2VydC5wMTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC9saWItZ3BnL2tleXJpbmcuZ3BnIGIvdC9saWItZ3BnL2tleXJpbmcuZ3BnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOGRmY2UKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1ncGcva2V5cmluZy5ncGcKQEAgLTAsMCArMSwxOTIgQEAKKy0tLS0tQkVHSU4gUEdQIFBSSVZBVEUgS0VZIEJMT0NLLS0tLS0KK1ZlcnNpb246IEdudVBHIHYxCisKK2xRRzdCRVpueXlrUkJBQ3pDUGpJcFRZTkw3WTJ0UXFsRUdUVERsdlpjV05MakY1ZjdaenV5T3FOT2lkTFVnRkQKKzM2cWNoMUxaTFNaa1NoZFIzR2FlK2Jzb2x5anhybEZ1RlAwZVhSUE10cUsyMGFMdzdXWnZQRnBFVjFUaE1uZSsKK1BSSmpZcnZnaFd3M0wwVlZJQUlaOEdYd3JWQnVVOTl1RWpIRUkwb2pZbG9PdkZjMmpWUGdTYW9CdndDZzQ4VGoKK2ZvbDJmb1NvSmE3WFV1OXlBTDhzemc4RC9SVXNUek5GK0k5aFNSSGw3TVlLRk1Zb0tFWTlCRGdyZ0F1anA3WVkKKzhxZEdzaVViMEdneXpwMmtSalpGdDRscGN2S2hHZkhuNUdFam10aytmUmJENXFQZk1xS0ZXK1QwTlBmWWxZbUwKK0pKNGZzNHFaOEx4N3g2aUc2WDUxdStZTndzUXVJR2pNQ0MzQ2VOaTNGN29yNjUxa2tOWUFTYmFRMU5ST2tDSU4KK051ZHlBLzBhYXN2b1pVb05KQWMyY1A1SWZzNldoWE1XTGZNUjJwMlhiZkt3S05ZbmVlYzYwdXNuU0NvbWNLcWgKK3NKVmswR3l0dnIzRk9ZVmhSa1huS0FieCswVzJ1ckZQOE9GVkJURUtPNlRzMlZ5Z1dHZ25lUVlvSG5xendsVUUKK3lqT2pscitseWY3dTJzL0tBeHBLQTZqbnR0RWRSWkFteldraHVveDF3d0FVa3IyNy9RQUFuM1RFektSMXB4eFIKKytSM2RIdUZwbm5mYXRNSURDNU8wSWtNZ1R5Qk5hWFIwWlhJZ1BHTnZiVzFwZEhSbGNrQmxlR0Z0Y0d4bExtTnYKK2JUNklYZ1FURVFJQUhnVUNSbWZMS1FJYkF3WUxDUWdIQXdJREZRSURBeFlDQVFJZUFRSVhnQUFLQ1JBVHR2VWUKK3pkNUREWFFkQUtDOTJmK3dPclRrYm1QRWYrdStxQS9HdjZCeFF3Q2ZRMTI4SlhDaTNNcE1COHRJMkttbzE1dFkKK2dubWRBajBFUm1mTFRoQUlBTTY1ZVQ5VDYrZ2cwZkpuK1F4aHMzRkZEUGp4SzZBT0JTM1NpZVdXbVhPNnN0WloKK3BsdmI3cjIrc1hZcDhITUhudG5PWDNUUlBvbEl4MWRzZGt2M1czdzh5VXpmOUxtbzJYTVBzWjMvaXNXZEViT0kKK0Ewck8zQjF4d2JRTzd2RW9XSGVCN3V5WUlGNllzSUgwcE1xeGtJbWNpd0IxdG5KUEI5T3hxUEhsRC9IeXlIcjIKK3ZvajZubUVHYVBRV2o4L2RrZnllblhtNlhtTlpVWkwvc2xrNnRSaE53djRjVzNRUUxoMzluYml6OXJxdlpNS0YKK1hYOHdrWTRGZFFrSmpDR3dxekcrN3lKY3lIdmVtMjkvaXEvL2pSTFpnZGlOOEJ3VjNNQ1RKeURwOC9XYi9kOXkKK2paY1VtMVJkdHdSaXdmaGZRK3ptcHlzcG03T3hJTmZINjVyZjdmOEFCQTBJQUxSaU1Scy9lT0Q1OWpyWVhtUFMKK1pRVWJpQUxsYkpKdHVQMmM5TjNXWjVPZ3JoRGlBVytTRElOK2hnRHluSjliN0MyZEUzeE5hdWQ0emFYQUFGNDQKK0o0SjBiQW8yWnRab0phancrR1h3YVpmaDRaN25QTkh3RWNiRkQ0L3VYUENqOWpQa2NMT0pxR21VWTFhWGR5Z28KK3QzSG41VS96bzhKeFBRODNZYkpRaGt6QU9aL0hHb3dMTnFLZ0drTExIbjFYOXFheTBDeGxmVFFlRU41Ulp5bDMKK2I0cVJ6R2dHQUxGdm9oZXlaSVV3MVRialJwYm4za3FsSm9vRVFZMDJWd1hGWGZMSS9Md3pnbGlsSDZzU2NrdnMKKzBXSEtMWiswTDZiM0NnSkhOMlJzWjdReHdDQmkxYWVtc3ZyNjVGZUVYcC9BWXhhRzVkdVVic3VnRzhQZ29KMDYKK2JzRUFBVlFOUU8zY1hXcHVpSi9uTkxMbld1UHVuQktKVWx1cmtCZGYyR0QrbSttdUYwVnB3RGNoaHFxYlRPNGUKK0ZxT0lTUVFZRVFJQUNRVUNSbWZMVGdJYkRBQUtDUkFUdHZVZXpkNUREY0hzQUtEUWNvQXREV0pGdXBWUnFsZUIKK0Nleng0UTJraEFDY0NzKy9MdEU4TGI5aEMrMmN2cjN1SDVwODJBST0KKz1hRWlVCistLS0tLUVORCBQR1AgUFJJVkFURSBLRVkgQkxPQ0stLS0tLQorLS0tLS1CRUdJTiBQR1AgUFJJVkFURSBLRVkgQkxPQ0stLS0tLQorCitsUU9ZQkZGTWxrY0JDQURKaS94bkFGOHlJMzRQSGlsU0NiTTdWdE9GTzE3b0ZNa3B1NGNnTjJRcFB1TTVNVmp5CitjdnJ6S1NndVpGdlBDREx6ZUFGSlcxdVB4TDRTSGFIU2tpc0NyRmhpakg3T0pXY09QTlBTRkN3dStpbkFvQXN2CitIbTRuczZwZkRaeVJqVlRIU1k0cmRNSVNxS0ZSb3phWHU4dkhlQlJ6SWhGbnViQkNlcEtaVzA3b0tQbnJuRUxWCitUVlVTVVZJKzZlbDhKRm1KSVd4eExOTGhmUlJTUEYwdjRNRFhQRi8vaUNXaVpESStKMXBMdlE1Vi9mN1l0ZnNECitHVjBvUFk2Nko3MkJGSkc1NTVlS0J0dG5OWTkwMUxtSTNvY241UDVpVm5YRGFxTUVsdzdGS3BuQU5YdWNnWTNICis0a0x5TmtJM3MzSjBDR2JYSTdiM01CV3RqY3R1aFd2MXEyRzVBQkVCQUFFQUIvd0xpdXphL3FFZnYxQ2ZqN0ZRCit5dEFYcHoxWW9BY3JjTS81M1RlUlFocmJ2SWVlNVpOR2hMZENreW90ODFRZXVKclNhWE8wRTlDeFJ5bnJqUVE3CitpYllxTjdIeTB1dTFrQWJRUUpqbVZkUVhUS25LSjdXbTdvTTRoWWhOc1ZDS05YYysxKzVBZkRZR2c0blpvYjM2CitxcWdIdGMrQXJkbDVWZlVnN3VGK2Vacm5TTXlualpBTmdpa0tiUHRFMDlES1Z0Vk90VUU0eFREOWlqa3BnbjY1CitnbHNaRHFiN0o0UVZnVGVFaUNES0pzUXZpbjNTd3JQQnFCeEJSVUxGMlRJYU1iT3dlNmRIaWlhSTg1cnN2QVdTCitWR3pvblVCM0lVMTQ3MFAyU0RJVmN6YlhZVUsvbkRTR3g2Wlowd0x1OVpjQ3lVUHZ4VkV5a3VoMlA0VVdIbGErCituSExSQkFETUxhdmNmanNDSTVDUlVzZHVyWXBnRThZM2JFYmNEcHZ6QXU1alQ1RDI1cDNZUERPRE9YRDNBS1R0CitQelZNQVJWdHY4dHdrYmdBeVdhb0Rldkp6OE90bW9Td3NXamRGbzRZdnNZdzlqVjdZZjNHd3pEM1lhMVpuVzMyCitKV1FyNmNYOHFjSzBBdWtBRDdVWmtWeWhVMktCdkIwMnQ4bEtITGJTY0hYVFlWcXJ5d1FBL0xOVVh3bUhqaSs2Citvc25TUUFDOFg5Z2dNT0VzOWRHbzdRbGs0SmdmR0FIMTdDRkkzUzN1YnNhVkVkeHozWXd6T2tEOFNObUViTHlXCithN0NaL1JucGRBWlUwbkI3a1NmYmZabDdhamhQYmdLQk1zYVYyeXZhRGRKZW9yNG01ZUtkWGZmUmswU2tzeGpMCitaLzRQMXRUSXVMOFd6ZXRHQi9hRGNXREZnc2VTQUFzRUFMem1mNTc5cHRsU21EeUdSQUtRcXViK21qNFYzRVVaCisxR1ZHY2ZCWTg2dzNCWlZEc2FSaUN0Y05qay9sY1A0QVoxVmJiNDJSTTZqazhuTHNFTlJjN3JmMnhhN1pQZjBUCis2bjVGNlcrdms3RUc3NlJvRmhLVnRHWm5nR0tpREdWYXZ4azNGVC95ZjhsS3JUM3dZaVQwM1NaRHVaMHBXdmt1CitGaUpHRXllc0FDOFdSejYwSkVWeWFYTWdSR2x6WTI5eVpHbGhJRHhrYVhOamIzSmtRR1Y0WVcxd2JHVXVibVYwCitQb2tCT0FRVEFRSUFJZ1VDVVV5V1J3SWJBd1lMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0QUFDZ2tRCitZUWt1aGJjaWNZbFlvd2Y3QitmK0ZEY0xWZnc4WHpHbEtrdTFGNlBJMXlHQ3Q3QU1PMi9Ka21PNExsZ0h1SWdGCitwcWU1Yi9YaktsMElzUmNiVkxpdHFpSW9rYzh1KzdIOHlZVTY3RERsaXE3dDFncUJ5K3FUaFNIY2duNldNS1RhCitxQ3FPRTJqekh5cXVsSUF6UXNKUStjNVNSb2ZFWkFLVDRRYTJEeStuc3FXRHBJRTc4YUpkMFZua2s5VTZIMlZ1CitBQnZVZU4vSU1ndnhQcjUyNW8rckJEN0xVNEozQ3RPemZWK3NPNiszM2RhK0JtOVVoa1I0dEM0SC9uMWRETjFKCitZdXhCUWJneFRxL2g4bUtlNC83L1l2eSs1V3NZZDk2WlJMRTJaRldlV1h0S2t3bVliUTQyRzNTWlVYYVo4UjhPCit0YlR5VXJqYkZLaXBPNHd2WHdoeWp1MWw5Y3hBc3JjYTZ4YlNDSjBEbUFSUlRKWkhBUWdBcVR0UEZjVFhxTStVCitvN2JPb28rZGNIaThYRGYvOFhTRW1aZk1LYy9VNXBTVEJrN2gxZ1NLdUd6akYybjN3UW02QTgrMTAxdlRMYVE2CitQb0ZERlc4dVFCMDBtanltR3JSRFlGZ3o4YmpobmFla1puQTRYVGhyMVJPamZmZ01oczN1VHBDZWJkVitsTDhLCiswb0pUSGMzOVRQTFRnMjNERmNSU0ROKzNBUkpKUzcrQ1JCSWJ0OUw1Z09icGdBNEhVYXAvbzZON08wNHJRT1BVCis4M01BcW53bzJKVE8vRGVkMHpvYWQwVm8zMU5tazRGK0t2RUU1MmZ0R0hiZDd5cUlVR0tCdDJTZVRBaDg1MGFjCitMZU5aUCtWMVk3YXRCQ3I3L3ptK0pwSFdxOU9INy9Ob21sRUlreEw4V0R0OEdmQUtvcVpncWVmTCtBQ0VuTGJBCit0MWR1M2YwRnN3QVJBUUFCQUFmOERjbGFJUURmUE01a1lvM3krWVZQb3lrQzExUnNrbVFXcFZpYmRsQ0xISm0vCisvSVNTbTFmVllUN2xwVE9wemwwWGZWWC9qdzlzL2N2aVB0TlMvcjBHL0l3a2krZ2k5QXY1YlREaVVtL29XV3FkCisxd2FQWVBER3dCNFFkS092aVkvZk9TRkk5dE9zc3p0NUN6czR3RFhXeTkwQVpEV2Q3ZmtIWWlzYmdvZlYxc2pLCitROGJZUVBhYmNlcGNaMkp5RVQrRXBaQkVtVUhIcVE3NmJUaXFqTitWejZrMU9GbHNFQnpHa0UrV0lha0Foa1EyCis1N29VclJnRmUraDZDaDdtZUIvdjZ2VmZJUlNzTHBaZTE4M3VjNFNpZ3F0ZnNnamJHOVBxT2NBSk9xb3ZEbmNCCitTY2czcXZwV0ZPQWtUQTNSZSt5QlBVZDJISGw5V0YvVFBhMmtCRENUMlFRQXhjSlplVUN1VWdEZ0NpenFFZ2ZzCitLem02ZHk0Ry9PSmRXMHE5bTlwc0hxRDFYV0xkN1pMRTQrZVRTMWN4a3RKaUdjR05kR29aRDBFdGd4a1YwOXVNCisxMlFZQ09CRXJGSnp2NC80b2xlZEhlRWhUYVJSL21GRkdScCtrV1R6MkFpL3pOcVVkM0QrK0RZVWU4ZzRtVlFKCis2SlAwMTRYaHZvUm5hQ2ZUOGNIOVpkMEVBTnNTTDcwV0dkaWZjVm9XS0E5akZKaGFoYzBzU0c2SVp2TU9jN2JzCitjU2JoQnFMRW5oZU9ia2FyQlArQSt6Z2xscUlmK3NiQ2Fzc01YamNWNTJtbmw5dGgzSjVSV3I3c2NyUUxKOVpYCitJdnozdW9QODV2d2xVSTk4ZEk5cm9ZSzBPcEttRzRoTkZwcEFjZ2lDVk5Wam5RbGh1US9Ib2V4Ukh4Um1ubWNiCiszOGpQQS9zRUhQQ0ZiTENHT1NCK0hRTkt4LzVXZjZWcEZYLzRvQk5iSVVpWW94Y1JsMGpwWVQ3TGMwemJjOFNvCitIdGhqUGZXaFhoS3pZdkVEQzVZZ0FTRXkxY05iR01VSmNHeXVBSW53SVFqcTQ0RlN3Uk1rSTNJU1NIbmJ2MWlICiswd0JWSlV6cGx1TWViRUFlc2RaVXoxRGNaV1ZmNmVWSkQwZGhaeEQ2RG9HN1hqMW05VGhVaVFFZkJCZ0JBZ0FKCitCUUpSVEpaSEFoc01BQW9KRUdFSkxvVzNJbkdKN0hFSUFNWGtNZjRjT1dtbkF1dnZjU20zS3BMZ2h1V2lrOWR5CitmbjFzWS9JRzVhdG9LSyt5cG1WL1RsQmxNWnFGUXp1UElKUVQ4VkxibXh0TGxEaEpHMDRMYkk2YzhheElaeE9PCitaS0x5NW5UVFN5MTZ6dHFFZVM3ZWlmSExQWmcxVUZGeUVFSVExWFcwQ05EQWV1V0toOTBFUmp5bDRDZzdQbldTCitaOUVpK3pqNkpENVBjZGkzQkpoUW85V09MT1ZFSjBOSG1ld1RZcWs5UVZYSC8wdjFIZGw0TE1KdGdjYmRiRFdrCis0VVRrWGJnOXBuM3VtQ2drTkozVnM4ZlduSVdPOUl6ZHIyL3dyRlkySnZVVDdZdmwrd3NOSVdhdHZPRXpHeTduCitCT1c3OFdVeHpodTBZSlRMS3kraUtDamc1SFM1ZHg2T0MrZTRhRUVnZmhOUENNa2J2RHNKanRTZEE1Z0VXOTY3CiszQUVJQUtqc2VUMHNUUWp5TjM5Zk9uMGZ6eFdwODlSRU1VVUtnTGlnYjAxTUt1dU5JM2NlZEJac3ozaHBGT0tWCitjaWk1cmxkdzh1ZjN5UzNPa2h0MkRmSFBTRDROckd6TEdFelNUcFExMFM4TjJxMERVWXd5TFU2QzBVOEhuTVptCisvbitsQ0dCYlVveHZucnVvaEF2S0FqcEhPM3JtSjhENERlOWhsV2cvZndkQXhRUTBTdmUwa044VndrMnAxR3VPCitPV1FLVjFTVTljK2tCaW91N2Rld1FtYmlsUFJhbkttUDVaU1U0ZW1ocFRPTWxKRlhGK2ttWVNPRFFrMWNNdldXCitPYjN0dGxsMmxsWDBHdWw3U2pmK2hhcS9GY1J5Ums3VHc1TUh3WmpyNWFXaUNueTAvMCtieXZmRjZTQklmenlFCitxbHlXVVJRMmdIWlVxU2lHM1FQTVppWXIwNGNBRVFFQUFRQUgvQW00cnYvb1FGNndvZGd6NXk0emM2SkppVERBCis0K25LZEl1UjdPS3FVeGsxb283ZVpqSk1ML3h2TXVteWdOeVV2Sjlub2RsMVNsTUtpbE9oZEFzd2ZrS2o5Z0pZCitCZERKTG0xT3VmaFczcEp3eTZhaGJqZXFFZ3dKRlZFTnRTUEYwemt1eUVEOWtFbHJwYkQyWlRHZnp3ZE0wZTlECisxMFpERld0T0RDdzhyek9GY2lqdWpnSThvaWxMdHhTTnJra1RLVysyNVdKRlJOUFNIZ0lrTUltOFVsUEFHK3JqCiszWWo5VXFvZGVYVFN2WHdHMnpjZU94akZKYWRWNzdzT0ZKRGd3V3NsTjZKOEVsNCtHY2d3RlZlcEp4b1pFajdlCitjS2ttVnIwRGM5L1EwNEQ1ZFdBVGMxRlljSWhaYlR1M29JbUNBaDQ1ZXA0dTlXWUxVVjVQR3llTXZpRUVBTXdvCittSmJZQnhXdVBqcE5hNzIySFFjYnZNVWlaV1dEd0hmTENpYi9TYVAwQWdmRGFoaWQ4L1BjWnd4T1BIUEJ5QnJtCitHRGkwejdpYm4vcGdKcjA3a3BwMUNpYzludGZjMkZ2a0kwUU16RzBFdWlla3pReVBFbnpqb0RIRitWNG5KSWoyCitHV1ZqTFlZcWxaV0VtaHNmS3QxQ25sUFhCdW5Lb0RKMzBBQlBjSEovQkFEVDBXeEFJVktGNGxPMkhsckRWUDQ0CitidWZCRUc5Q3Q3ZGwvRzA4UXZlNEFnM1ZFWnBUODJ2RUZwMEx6WDBtVENESVVLSlVZQVlMeEFJUGhQN0l2SWZjCitFWlhyd3lEVXhVN1lTZ0tUSE1LbzluRkM2ZkljMUdlR1BSYWxJRjFnbVRZMzJxbFlKQzZ5NUJURGhaTlY1eWRHCit1OFFMMlAvb3JQN1h1UnJKeWV5SytRUC9YVGVrci9EUzZKa2N0ODI2TVBBNTJjaUlrV1ZnWUxhdEg1Zk80SENxCitzc0RVOHZ6N0ZiYnZHczBHMVhuN0dBNG05ZE5ZVk9adEt3WCsrM25mMklFT3BnUGlaVlRuL25QMnUzSHV0cEpiCisvSE1MbGNmWkdpR2R4UzZuL3ZkejZ3c0VvYkpvaTZTVGtIa0ErVkZOT1NabWRzdzZlS2wzWDkxMXRwQ1RZZk9HCisyVTQ3L0lrQ2JBUVlBUWdBSUJZaEJOUytJakVhMHhNZVh0b3BwR0VKTG9XM0luR0pCUUpiM3J2Y0Foc0NBVUFKCitFR0VKTG9XM0luR0p3SFFnQkJrQkNBQWRGaUVFK0RaS1dlQi8vcDlOWXdCYVphRHVvQzR3eXRjRkFsdmV1OXdBCitDZ2tRWmFEdW9DNHd5dGNEOWdmL1dpZ3RIbDdsRnlsOFJhRS91cVJPRkVlbFp5TTAwdjFoNTVmZC9JR1JHODhFCit0TjBMcjRGYXFCcVBrTVpqVS9MTjlVTUJhVGQrNzQ4dkhsSGF3ZVpxbGpYSnU5OUNPOUlkN1k0dzdXekYzQzNZCit5UXNHWjkyRUd4dGhzUEswK3JoSFYwTWJhSU51cEkxb085Z0FURmdsU3hxMTdvODNGSmF0R1JqYVhDWmF1OGpyCis1Ny9CeTFNR3RqaytJcTFOa3pHa3JYNzc4TGRSUUdMS0R3MlFhN2xzZEhZOGQzbFVQQUg4bWJiOTdFTG1JYzl0CitQRzJhTTdBVEpMN25CbUZ1VEhvNmhtRWNJdzMyRWk5S0sxenhNMFp5bEVZa2pCakhBbGtsV21LYjlNaWF5TUM1Cit1SFc3SXloamwrTmJnYklFcjJKVGFtVy85dEw2VXJJSXhpREVkcWFITmZDYUIvOUQrVjMxVXBjb2hjOWF6d0I0CitBRjhkaVF3dDVuZmlWcG5WZUYvVzgrZVMxQnkyVzZRcndMTnRoTlJhYllGbnVTZjlVU0hBWTZhdERXZStlZ0lkCitNTEl2NGNlMGkzeWtvY3pTdTBvTW9VQ014ZGw5a1Fyc05IWkNxV1gvT2lERExTYjA1dS9QLzNoZTkwMHk2dFNCCisxNU1iSVBBNmk1QncvNjkzbkhndXF4UzFBU2JCQi9MaUl1M3ZDWGRGRXM5Uk12SUorcWtQM3hRQTk2b0ltUWlLCitSM1U2T0d2NTkzZU9OS2lqVUlOTnFIUnE2K1V4SXlKK09DQWkrTDJRVGlkQWhKTFJDcDZFWkQ5NnUwMmN0aFlxCis4S0E4ajErcng5QmNiZWFjVlZIZXBlRzFKc2d4c1hYOEJUSjdadVM1VlZuZFpPamFnOFVSVy85bkpNZjAxdy9oCitlbDY0Cis9SXY3VworLS0tLS1FTkQgUEdQIFBSSVZBVEUgS0VZIEJMT0NLLS0tLS0KKy0tLS0tQkVHSU4gUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQorCittUUdpQkVabnl5a1JCQUN6Q1BqSXBUWU5MN1kydFFxbEVHVFREbHZaY1dOTGpGNWY3Wnp1eU9xTk9pZExVZ0ZECiszNnFjaDFMWkxTWmtTaGRSM0dhZStic29seWp4cmxGdUZQMGVYUlBNdHFLMjBhTHc3V1p2UEZwRVYxVGhNbmUrCitQUkpqWXJ2Z2hXdzNMMFZWSUFJWjhHWHdyVkJ1VTk5dUVqSEVJMG9qWWxvT3ZGYzJqVlBnU2FvQnZ3Q2c0OFRqCitmb2wyZm9Tb0phN1hVdTl5QUw4c3pnOEQvUlVzVHpORitJOWhTUkhsN01ZS0ZNWW9LRVk5QkRncmdBdWpwN1lZCis4cWRHc2lVYjBHZ3l6cDJrUmpaRnQ0bHBjdktoR2ZIbjVHRWptdGsrZlJiRDVxUGZNcUtGVytUME5QZllsWW1MCitKSjRmczRxWjhMeDd4NmlHNlg1MXUrWU53c1F1SUdqTUNDM0NlTmkzRjdvcjY1MWtrTllBU2JhUTFOUk9rQ0lOCitOdWR5QS8wYWFzdm9aVW9OSkFjMmNQNUlmczZXaFhNV0xmTVIycDJYYmZLd0tOWW5lZWM2MHVzblNDb21jS3FoCitzSlZrMEd5dHZyM0ZPWVZoUmtYbktBYngrMFcydXJGUDhPRlZCVEVLTzZUczJWeWdXR2duZVFZb0hucXp3bFVFCit5ak9qbHIrbHlmN3Uycy9LQXhwS0E2am50dEVkUlpBbXpXa2h1b3gxd3dBVWtyMjcvYlFpUXlCUElFMXBkSFJsCitjaUE4WTI5dGJXbDBkR1Z5UUdWNFlXMXdiR1V1WTI5dFBvaGVCQk1SQWdBZUJRSkdaOHNwQWhzREJnc0pDQWNECitBZ01WQWdNREZnSUJBaDRCQWhlQUFBb0pFQk8yOVI3TjNrTU5kQjBBb0wzWi83QTZ0T1J1WThSLzY3Nm9EOGEvCitvSEZEQUo5RFhid2xjS0xjeWt3SHkwallxYWpYbTFpQ2Via0NEUVJHWjh0T0VBZ0F6cmw1UDFQcjZDRFI4bWY1CitER0d6Y1VVTStQRXJvQTRGTGRLSjVaYVpjN3F5MWxtbVc5dnV2YjZ4ZGlud2N3ZWUyYzVmZE5FK2lVakhWMngyCitTL2RiZkR6SlROLzB1YWpaY3creG5mK0t4WjBSczRnRFNzN2NIWEhCdEE3dThTaFlkNEh1N0pnZ1hwaXdnZlNrCit5ckdRaVp5TEFIVzJjazhIMDdHbzhlVVA4ZkxJZXZhK2lQcWVZUVpvOUJhUHo5MlIvSjZkZWJwZVkxbFJrdit5CitXVHExR0UzQy9oeGJkQkF1SGYyZHVMUDJ1cTlrd29WZGZ6Q1JqZ1YxQ1FtTUliQ3JNYjd2SWx6SWU5NmJiMytLCityLytORXRtQjJJM3dIQlhjd0pNbklPbno5WnY5MzNLTmx4U2JWRjIzQkdMQitGOUQ3T2FuS3ltYnM3RWcxOGZyCittdC90L3dBRURRZ0F0R0l4R3o5NDRQbjJPdGhlWTlKbEJSdUlBdVZza20yNC9aejAzZFpuazZDdUVPSUJiNUlNCitnMzZHQVBLY24xdnNMWjBUZkUxcTUzak5wY0FBWGpnbmduUnNDalptMW1nbHFQRDRaZkJwbCtIaG51YzgwZkFSCit4c1VQais1YzhLUDJNK1J3czRtb2FaUmpWcGQzS0NpM2NlZmxUL09qd25FOUR6ZGhzbENHVE1BNW44Y2FqQXMyCitvcUFhUXNzZWZWZjJwckxRTEdWOU5CNFEzbEZuS1hkdmlwSE1hQVlBc1craUY3SmtoVERWTnVOR2x1ZmVTcVVtCitpZ1JCalRaWEJjVmQ4c2o4dkRPQ1dLVWZxeEp5Uyt6Ulljb3RuN1F2cHZjS0FrYzNaR3hudERIQUlHTFZwNmF5CisrdnJrVjRSZW44QmpGb2JsMjVSdXk2QWJ3K0NnblRwdXdZaEpCQmdSQWdBSkJRSkdaOHRPQWhzTUFBb0pFQk8yCis5UjdOM2tNTndld0FvTkJ5Z0MwTllrVzZsVkdxVjRFSjdQSGhEYVNFQUp3S3o3OHUwVHd0djJFTDdaeSt2ZTRmCittbnpZQXBrQkRRUlJUSlpIQVFnQXlZdjhad0JmTWlOK0R4NHBVZ216TzFiVGhUdGU2QlRKS2J1SElEZGtLVDdqCitPVEZZOG5MNjh5a29MbVJiendneTgzZ0JTVnRiajhTK0VoMmgwcElyQXF4WVlveCt6aVZuRGp6VDBoUXNMdm9wCit3S0FMTHg1dUo3T3FYdzJja1kxVXgwbU9LM1RDRXFpaFVhTTJsN3ZMeDNnVWN5SVJaN213UW5xU21WdE82Q2o1Cis2NXhDMVUxVkVsRlNQdW5wZkNSWmlTRnNjU3pTNFgwVVVqeGRMK0RBMXp4Zi80Z2xvbVF5UGlkYVM3ME9WZjMrCisyTFg3QXhsZEtEMk91aWU5Z1JTUnVlZVhpZ2JiWnpXUGROUzVpTjZISitUK1lsWjF3MnFqQkpjT3hTcVp3RFY3CituSUdOeCtKQzhqWkNON055ZEFobTF5TzI5ekFWclkzTGJvVnI5YXRodVFBUkFRQUJ0Q1JGY21seklFUnBjMk52CitjbVJwWVNBOFpHbHpZMjl5WkVCbGVHRnRjR3hsTG01bGRENkpBVGdFRXdFQ0FDSUZBbEZNbGtjQ0d3TUdDd2tJCitCd01DQmhVSUFna0tDd1FXQWdNQkFoNEJBaGVBQUFvSkVHRUpMb1czSW5HSldLTUgrd2ZuL2hRM0MxWDhQRjh4CitwU3BMdFJlanlOY2hncmV3RER0dnlaSmp1QzVZQjdpSUJhYW51Vy8xNHlwZENMRVhHMVM0cmFvaUtKSFBMdnV4CisvTW1GT3V3dzVZcXU3ZFlLZ2N2cWs0VWgzSUorbGpDazJxZ3FqaE5vOHg4cXJwU0FNMExDVVBuT1VrYUh4R1FDCitrK0VHdGc4dnA3S2xnNlNCTy9HaVhkRlo1SlBWT2g5bGJnQWIxSGpmeURJTDhUNitkdWFQcXdRK3kxT0Nkd3JUCitzMzFmckR1dnQ5M1d2Z1p2VklaRWVMUXVCLzU5WFF6ZFNXTHNRVUc0TVU2djRmSmludVArLzJMOHZ1VnJHSGZlCittVVN4Tm1SVm5sbDdTcE1KbUcwT05odDBtVkYybWZFZkRyVzA4bEs0MnhTb3FUdU1MMThJY283dFpmWE1RTEszCitHdXNXMGdpNUFRMEVVVXlXUndFSUFLazdUeFhFMTZqUGxLTzJ6cUtQblhCNHZGdzMvL0YwaEptWHpDblAxT2FVCitrd1pPNGRZRWlyaHM0eGRwOThFSnVnUFB0ZE5iMHkya09qNkJReFZ2TGtBZE5KbzhwaHEwUTJCWU0vRzQ0WjJuCitwR1p3T0YwNGE5VVRvMzM0REliTjdrNlFubTNWZnBTL0N0S0NVeDNOL1V6eTA0TnR3eFhFVWd6ZnR3RVNTVXUvCitna1FTRzdmUytZRG02WUFPQjFHcWY2T2plenRPSzBEajFQTnpBS3A4S05pVXp2dzNuZE02R25kRmFOOVRacE9CCitmaXJ4Qk9kbjdSaDIzZThxaUZCaWdiZGtua3dJZk9kR25DM2pXVC9sZFdPMnJRUXErLzg1dmlhUjFxdlRoKy96CithSnBSQ0pNUy9GZzdmQm53Q3FLbVlLbm55L2dBaEp5MndMZFhidDM5QmJNQUVRRUFBWWtCSHdRWUFRSUFDUVVDCitVVXlXUndJYkRBQUtDUkJoQ1M2RnR5SnhpZXh4Q0FERjVESCtIRGxwcHdMcjczRXB0eXFTNElibG9wUFhjbjU5CitiR1B5QnVXcmFDaXZzcVpsZjA1UVpUR2FoVU03anlDVUUvRlMyNXNiUzVRNFNSdE9DMnlPblBHc1NHY1RqbVNpCis4dVowMDBzdGVzN2FoSGt1M29ueHl6MllOVkJSY2hCQ0VOVjF0QWpRd0hybGlvZmRCRVk4cGVBb096NTFrbWZSCitJdnM0K2lRK1QzSFl0d1NZVUtQVmppemxSQ2REUjVuc0UyS3BQVUZWeC85TDlSM1plQ3pDYllIRzNXdzFwT0ZFCis1RjI0UGFaOTdwZ29KRFNkMWJQSDFweUZqdlNNM2E5djhLeFdOaWIxRSsyTDVmc0xEU0ZtcmJ6aE14c3U1d1RsCit1L0ZsTWM0YnRHQ1V5eXN2b2lnbzRPUjB1WGNlamd2bnVHaEJJSDRUVHdqSkc3dzdDWTdVdVFFTkJGdmV1OXdCCitDQUNvN0hrOUxFMEk4amQvWHpwOUg4OFZxZlBVUkRGRkNvQzRvRzlOVENycmpTTjNIblFXYk05NGFSVGlsWElvCit1YTVYY1BMbjk4a3R6cEliZGczeHowZytEYXhzeXhoTTBrNlVOZEV2RGRxdEExR01NaTFPZ3RGUEI1ekdadjUvCitwUWhnVzFLTWI1NjdxSVFMeWdJNlJ6dDY1aWZBK0EzdllaVm9QMzhIUU1VRU5FcjN0SkRmRmNKTnFkUnJqamxrCitDbGRVbFBYUHBBWXFMdTNYc0VKbTRwVDBXcHlwaitXVWxPSHBvYVV6akpTUlZ4ZnBKbUVqZzBKTlhETDFsam05Cis3YlpaZHBaVjlCcnBlMG8zL29XcXZ4WEVja1pPMDhPVEI4R1k2K1dsb2dwOHRQOVBtOHIzeGVrZ1NIODhoS3BjCitsbEVVTm9CMlZLa29odDBEekdZbUs5T0hBQkVCQUFHSkFtd0VHQUVJQUNBV0lRVFV2aUl4R3RNVEhsN2FLYVJoCitDUzZGdHlKeGlRVUNXOTY3M0FJYkFnRkFDUkJoQ1M2RnR5SnhpY0IwSUFRWkFRZ0FIUlloQlBnMlNsbmdmLzZmCitUV01BV21XZzdxQXVNTXJYQlFKYjNydmNBQW9KRUdXZzdxQXVNTXJYQS9ZSC8xb29MUjVlNVJjcGZFV2hQN3FrCitUaFJIcFdjak5OTDlZZWVYM2Z5QmtSdlBCTFRkQzYrQldxZ2FqNURHWTFQeXpmVkRBV2szZnUrUEx4NVIyc0htCithcFkxeWJ2ZlFqdlNIZTJPTU8xc3hkd3QyTWtMQm1mZGhCc2JZYkR5dFBxNFIxZERHMmlEYnFTTmFEdllBRXhZCitKVXNhdGU2UE54U1dyUmtZMmx3bVdydkk2K2Uvd2N0VEJyWTVQaUt0VFpNeHBLMSsrL0MzVVVCaXlnOE5rR3U1CitiSFIyUEhkNVZEd0IvSm0yL2V4QzVpSFBiVHh0bWpPd0V5Uys1d1poYmt4Nk9vWmhIQ01OOWhJdlNpdGM4VE5HCitjcFJHSkl3WXh3SlpKVnBpbS9USW1zakF1YmgxdXlNb1k1ZmpXNEd5Qks5aVUycGx2L2JTK2xLeUNNWWd4SGFtCitoelh3bWdmL1EvbGQ5VktYS0lYUFdzOEFlQUJmSFlrTUxlWjM0bGFaMVhoZjF2UG5rdFFjdGx1a0s4Q3piWVRVCitXbTJCWjdrbi9WRWh3R09tclExbnZub0NIVEN5TCtISHRJdDhwS0hNMHJ0S0RLRkFqTVhaZlpFSzdEUjJRcWxsCisvem9nd3kwbTlPYnZ6Lzk0WHZkTk11clVnZGVUR3lEd09vdVFjUCt2ZDV4NExxc1V0UUVtd1FmeTRpTHQ3d2wzCitSUkxQVVRMeUNmcXBEOThVQVBlcUNKa0lpa2QxT2pocitmZDNqalNvbzFDRFRhaDBhdXZsTVNNaWZqZ2dJdmk5CitrRTRuUUlTUzBRcWVoR1EvZXJ0Tm5MWVdLdkNnUEk5ZnE4ZlFYRzNtbkZWUjNxWGh0U2JJTWJGMS9BVXllMmJrCit1VlZaM1dUbzJvUEZFVnYvWnlUSDlOY1A0WHBldUE9PQorPUtSeVQKKy0tLS0tRU5EIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0KZGlmZiAtLWdpdCBhL3QvbGliLWdwZy9vd25lcnRydXN0IGIvdC9saWItZ3BnL293bmVydHJ1c3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNlM2M0ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWdwZy9vd25lcnRydXN0CkBAIC0wLDAgKzEsNCBAQAorIyBMaXN0IG9mIGFzc2lnbmVkIHRydXN0dmFsdWVzLCBjcmVhdGVkIFRodSAxMSBEZWMgMjAxNCAwMToyNjoyOCBQTSBDRVQKKyMgKFVzZSAiZ3BnIC0taW1wb3J0LW93bmVydHJ1c3QiIHRvIHJlc3RvcmUgdGhlbSkKKzczRDc1ODc0NEJFNzIxNjk4RUM1NEU4NzEzQjZGNTFFQ0RERTQzMEQ6NjoKK0Q0QkUyMjMxMUFEMzEzMUU1RURBMjlBNDYxMDkyRTg1QjcyMjcxODk6MzoKZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkLnNoIGIvdC9saWItaHR0cGQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ0OWVlOQotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWh0dHBkLnNoCkBAIC0wLDAgKzEsMzA4IEBACisjIFNoZWxsIGxpYnJhcnkgdG8gcnVuIGFuIEhUVFAgc2VydmVyIGZvciB1c2UgaW4gdGVzdHMuCisjIEVuZHMgdGhlIHRlc3QgZWFybHkgaWYgaHR0cGQgdGVzdHMgc2hvdWxkIG5vdCBiZSBydW4sCisjIGZvciBleGFtcGxlIGJlY2F1c2UgdGhlIHVzZXIgaGFzIG5vdCBlbmFibGVkIHRoZW0uCisjCisjIFVzYWdlOgorIworIwkuIC4vdGVzdC1saWIuc2gKKyMJLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKKyMJc3RhcnRfaHR0cGQKKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4uJyAnCisjCQkuLi4KKyMJJworIworIwl0ZXN0X2V4cGVjdF9zdWNjZXNzIC4uLgorIworIwl0ZXN0X2RvbmUKKyMKKyMgQ2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMuCisjCisjICAgIEdJVF9URVNUX0hUVFBEICAgICAgICAgICAgICBlbmFibGUgSFRUUEQgdGVzdHMKKyMgICAgTElCX0hUVFBEX1BBVEggICAgICAgICAgICAgIHdlYiBzZXJ2ZXIgcGF0aAorIyAgICBMSUJfSFRUUERfTU9EVUxFX1BBVEggICAgICAgd2ViIHNlcnZlciBtb2R1bGVzIHBhdGgKKyMgICAgTElCX0hUVFBEX1BPUlQgICAgICAgICAgICAgIGxpc3RlbmluZyBwb3J0CisjICAgIExJQl9IVFRQRF9EQVYgICAgICAgICAgICAgICBlbmFibGUgREFWCisjICAgIExJQl9IVFRQRF9TVk4gICAgICAgICAgICAgICBlbmFibGUgU1ZOIGF0IGdpdmVuIGxvY2F0aW9uIChlLmcuICJzdm4iKQorIyAgICBMSUJfSFRUUERfU1NMICAgICAgICAgICAgICAgZW5hYmxlIFNTTAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggQ2xlbWVucyBCdWNoYWNoZXIgPGRyaXp6ZEBhb24uYXQ+CisjCisKK2lmIHRlc3QgLW4gIiROT19DVVJMIgordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyB0ZXN0LCBnaXQgYnVpbHQgd2l0aG91dCBodHRwIHN1cHBvcnQnCisJdGVzdF9kb25lCitmaQorCitpZiB0ZXN0IC1uICIkTk9fRVhQQVQiICYmIHRlc3QgLW4gIiRMSUJfSFRUUERfREFWIgordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyB0ZXN0LCBnaXQgYnVpbHQgd2l0aG91dCBleHBhdCBzdXBwb3J0JworCXRlc3RfZG9uZQorZmkKKworaWYgISB0ZXN0X2Jvb2xfZW52IEdJVF9URVNUX0hUVFBEIHRydWUKK3RoZW4KKwlza2lwX2FsbD0iTmV0d29yayB0ZXN0aW5nIGRpc2FibGVkICh1bnNldCBHSVRfVEVTVF9IVFRQRCB0byBlbmFibGUpIgorCXRlc3RfZG9uZQorZmkKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIE5PVF9ST09UOyB0aGVuCisJdGVzdF9za2lwX29yX2RpZSBHSVRfVEVTVF9IVFRQRCBcCisJCSJDYW5ub3QgcnVuIGh0dHBkIHRlc3RzIGFzIHJvb3QiCitmaQorCitIVFRQRF9QQVJBPSIiCisKK2ZvciBERUZBVUxUX0hUVFBEX1BBVEggaW4gJy91c3Ivc2Jpbi9odHRwZCcgJy91c3Ivc2Jpbi9hcGFjaGUyJworZG8KKwlpZiB0ZXN0IC14ICIkREVGQVVMVF9IVFRQRF9QQVRIIgorCXRoZW4KKwkJYnJlYWsKKwlmaQorZG9uZQorCitmb3IgREVGQVVMVF9IVFRQRF9NT0RVTEVfUEFUSCBpbiAnL3Vzci9saWJleGVjL2FwYWNoZTInIFwKKwkJCQkgJy91c3IvbGliL2FwYWNoZTIvbW9kdWxlcycgXAorCQkJCSAnL3Vzci9saWI2NC9odHRwZC9tb2R1bGVzJyBcCisJCQkJICcvdXNyL2xpYi9odHRwZC9tb2R1bGVzJworZG8KKwlpZiB0ZXN0IC1kICIkREVGQVVMVF9IVFRQRF9NT0RVTEVfUEFUSCIKKwl0aGVuCisJCWJyZWFrCisJZmkKK2RvbmUKKworY2FzZSAkKHVuYW1lKSBpbgorCURhcndpbikKKwkJSFRUUERfUEFSQT0iJEhUVFBEX1BBUkEgLUREYXJ3aW4iCisJOzsKK2VzYWMKKworTElCX0hUVFBEX1BBVEg9JHtMSUJfSFRUUERfUEFUSC0iJERFRkFVTFRfSFRUUERfUEFUSCJ9Cit0ZXN0X3NldF9wb3J0IExJQl9IVFRQRF9QT1JUCisKK1RFU1RfUEFUSD0iJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQKK0hUVFBEX1JPT1RfUEFUSD0iJFBXRCIvaHR0cGQKK0hUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSD0kSFRUUERfUk9PVF9QQVRIL3d3dworCisjIGhhY2sgdG8gc3VwcHJlc3MgYXBhY2hlIFBhc3NFbnYgd2FybmluZ3MKK0dJVF9WQUxHUklORD0kR0lUX1ZBTEdSSU5EOyBleHBvcnQgR0lUX1ZBTEdSSU5ECitHSVRfVkFMR1JJTkRfT1BUSU9OUz0kR0lUX1ZBTEdSSU5EX09QVElPTlM7IGV4cG9ydCBHSVRfVkFMR1JJTkRfT1BUSU9OUworR0lUX1RFU1RfU0lERUJBTkRfQUxMPSRHSVRfVEVTVF9TSURFQkFORF9BTEw7IGV4cG9ydCBHSVRfVEVTVF9TSURFQkFORF9BTEwKK0dJVF9UUkFDRT0kR0lUX1RSQUNFOyBleHBvcnQgR0lUX1RSQUNFCisKK2lmICEgdGVzdCAteCAiJExJQl9IVFRQRF9QQVRIIgordGhlbgorCXRlc3Rfc2tpcF9vcl9kaWUgR0lUX1RFU1RfSFRUUEQgIm5vIHdlYiBzZXJ2ZXIgZm91bmQgYXQgJyRMSUJfSFRUUERfUEFUSCciCitmaQorCitIVFRQRF9WRVJTSU9OPSQoJExJQl9IVFRQRF9QQVRIIC12IHwgXAorCXNlZCAtbiAncy9eU2VydmVyIHZlcnNpb246IEFwYWNoZVwvXChbMC05XSpcKVwuLiokL1wxL3A7IHEnKQorCitpZiB0ZXN0IC1uICIkSFRUUERfVkVSU0lPTiIKK3RoZW4KKwlpZiB0ZXN0IC16ICIkTElCX0hUVFBEX01PRFVMRV9QQVRIIgorCXRoZW4KKwkJaWYgISB0ZXN0ICRIVFRQRF9WRVJTSU9OIC1nZSAyCisJCXRoZW4KKwkJCXRlc3Rfc2tpcF9vcl9kaWUgR0lUX1RFU1RfSFRUUEQgXAorCQkJCSJhdCBsZWFzdCBBcGFjaGUgdmVyc2lvbiAyIGlzIHJlcXVpcmVkIgorCQlmaQorCQlpZiAhIHRlc3QgLWQgIiRERUZBVUxUX0hUVFBEX01PRFVMRV9QQVRIIgorCQl0aGVuCisJCQl0ZXN0X3NraXBfb3JfZGllIEdJVF9URVNUX0hUVFBEIFwKKwkJCQkiQXBhY2hlIG1vZHVsZSBkaXJlY3Rvcnkgbm90IGZvdW5kIgorCQlmaQorCisJCUxJQl9IVFRQRF9NT0RVTEVfUEFUSD0iJERFRkFVTFRfSFRUUERfTU9EVUxFX1BBVEgiCisJZmkKK2Vsc2UKKwl0ZXN0X3NraXBfb3JfZGllIEdJVF9URVNUX0hUVFBEIFwKKwkJIkNvdWxkIG5vdCBpZGVudGlmeSB3ZWIgc2VydmVyIGF0ICckTElCX0hUVFBEX1BBVEgnIgorZmkKKworaW5zdGFsbF9zY3JpcHQgKCkgeworCXdyaXRlX3NjcmlwdCAiJEhUVFBEX1JPT1RfUEFUSC8kMSIgPCIkVEVTVF9QQVRILyQxIgorfQorCitwcmVwYXJlX2h0dHBkKCkgeworCW1rZGlyIC1wICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIgorCWNwICIkVEVTVF9QQVRIIi9wYXNzd2QgIiRIVFRQRF9ST09UX1BBVEgiCisJaW5zdGFsbF9zY3JpcHQgYnJva2VuLXNtYXJ0LWh0dHAuc2gKKwlpbnN0YWxsX3NjcmlwdCBlcnJvci1zbWFydC1odHRwLnNoCisJaW5zdGFsbF9zY3JpcHQgZXJyb3Iuc2gKKwlpbnN0YWxsX3NjcmlwdCBhcHBseS1vbmUtdGltZS1wZXJsLnNoCisKKwlsbiAtcyAiJExJQl9IVFRQRF9NT0RVTEVfUEFUSCIgIiRIVFRQRF9ST09UX1BBVEgvbW9kdWxlcyIKKworCWlmIHRlc3QgLW4gIiRMSUJfSFRUUERfU1NMIgorCXRoZW4KKwkJSFRUUERfUFJPVE89aHR0cHMKKworCQlSQU5ERklMRV9QQVRIPSIkSFRUUERfUk9PVF9QQVRIIi8ucm5kIG9wZW5zc2wgcmVxIFwKKwkJCS1jb25maWcgIiRURVNUX1BBVEgvc3NsLmNuZiIgXAorCQkJLW5ldyAteDUwOSAtbm9kZXMgXAorCQkJLW91dCAiJEhUVFBEX1JPT1RfUEFUSC9odHRwZC5wZW0iIFwKKwkJCS1rZXlvdXQgIiRIVFRQRF9ST09UX1BBVEgvaHR0cGQucGVtIgorCQlHSVRfU1NMX05PX1ZFUklGWT10CisJCWV4cG9ydCBHSVRfU1NMX05PX1ZFUklGWQorCQlIVFRQRF9QQVJBPSIkSFRUUERfUEFSQSAtRFNTTCIKKwllbHNlCisJCUhUVFBEX1BST1RPPWh0dHAKKwlmaQorCUhUVFBEX0RFU1Q9MTI3LjAuMC4xOiRMSUJfSFRUUERfUE9SVAorCUhUVFBEX1VSTD0kSFRUUERfUFJPVE86Ly8kSFRUUERfREVTVAorCUhUVFBEX1VSTF9VU0VSPSRIVFRQRF9QUk9UTzovL3VzZXIlNDBob3N0QCRIVFRQRF9ERVNUCisJSFRUUERfVVJMX1VTRVJfUEFTUz0kSFRUUERfUFJPVE86Ly91c2VyJTQwaG9zdDpwYXNzJTQwaG9zdEAkSFRUUERfREVTVAorCisJaWYgdGVzdCAtbiAiJExJQl9IVFRQRF9EQVYiIHx8IHRlc3QgLW4gIiRMSUJfSFRUUERfU1ZOIgorCXRoZW4KKwkJSFRUUERfUEFSQT0iJEhUVFBEX1BBUkEgLUREQVYiCisKKwkJaWYgdGVzdCAtbiAiJExJQl9IVFRQRF9TVk4iCisJCXRoZW4KKwkJCUhUVFBEX1BBUkE9IiRIVFRQRF9QQVJBIC1EU1ZOIgorCQkJTElCX0hUVFBEX1NWTlBBVEg9IiRyYXdzdm5yZXBvIgorCQkJc3ZucmVwbz0iaHR0cDovLzEyNy4wLjAuMTokTElCX0hUVFBEX1BPUlQvIgorCQkJc3ZucmVwbz0iJHN2bnJlcG8kTElCX0hUVFBEX1NWTiIKKwkJCWV4cG9ydCBMSUJfSFRUUERfU1ZOIExJQl9IVFRQRF9TVk5QQVRICisJCWZpCisJZmkKK30KKworc3RhcnRfaHR0cGQoKSB7CisJcHJlcGFyZV9odHRwZCA+JjMgMj4mNAorCisJdGVzdF9hdGV4aXQgc3RvcF9odHRwZAorCisJIiRMSUJfSFRUUERfUEFUSCIgLWQgIiRIVFRQRF9ST09UX1BBVEgiIFwKKwkJLWYgIiRURVNUX1BBVEgvYXBhY2hlLmNvbmYiICRIVFRQRF9QQVJBIFwKKwkJLWMgIkxpc3RlbiAxMjcuMC4wLjE6JExJQl9IVFRQRF9QT1JUIiAtayBzdGFydCBcCisJCT4mMyAyPiY0CisJaWYgdGVzdCAkPyAtbmUgMAorCXRoZW4KKwkJY2F0ICIkSFRUUERfUk9PVF9QQVRIIi9lcnJvci5sb2cgPiY0IDI+L2Rldi9udWxsCisJCXRlc3Rfc2tpcF9vcl9kaWUgR0lUX1RFU1RfSFRUUEQgIndlYiBzZXJ2ZXIgc2V0dXAgZmFpbGVkIgorCWZpCit9CisKK3N0b3BfaHR0cGQoKSB7CisJIiRMSUJfSFRUUERfUEFUSCIgLWQgIiRIVFRQRF9ST09UX1BBVEgiIFwKKwkJLWYgIiRURVNUX1BBVEgvYXBhY2hlLmNvbmYiICRIVFRQRF9QQVJBIC1rIHN0b3AKK30KKwordGVzdF9odHRwX3B1c2hfbm9uZmYgKCkgeworCVJFTU9URV9SRVBPPSQxCisJTE9DQUxfUkVQTz0kMgorCUJSQU5DSD0kMworCUVYUEVDVF9DQVNfUkVTVUxUPSR7NC1mYWlsdXJlfQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLWZhc3QtZm9yd2FyZCBwdXNoIGZhaWxzJyAnCisJCWNkICIkUkVNT1RFX1JFUE8iICYmCisJCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisKKwkJY2QgIiRMT0NBTF9SRVBPIiAmJgorCQlnaXQgY2hlY2tvdXQgJEJSQU5DSCAmJgorCQllY2hvICJjaGFuZ2VkIiA+IHBhdGgyICYmCisJCWdpdCBjb21taXQgLWEgLW0gcGF0aDIgLS1hbWVuZCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC12IG9yaWdpbiA+b3V0cHV0IDI+JjEgJiYKKwkJKGNkICIkUkVNT1RFX1JFUE8iICYmCisJCSB0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1mYXN0LWZvcndhcmQgcHVzaCBzaG93IHJlZiBzdGF0dXMnICcKKwkJZ3JlcCAiXiAhIFxbcmVqZWN0ZWRcXVsgXSokQlJBTkNIIC0+ICRCUkFOQ0ggKG5vbi1mYXN0LWZvcndhcmQpJCIgb3V0cHV0CisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLWZhc3QtZm9yd2FyZCBwdXNoIHNob3dzIGhlbHAgbWVzc2FnZScgJworCQl0ZXN0X2kxOG5ncmVwICJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSIgb3V0cHV0CisJJworCisJdGVzdF9leHBlY3RfJHtFWFBFQ1RfQ0FTX1JFU1VMVH0gJ2ZvcmNlIHdpdGggbGVhc2UgYWthIGNhcycgJworCQlIRUFEPSQoCWNkICIkUkVNT1RFX1JFUE8iICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCApICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAnXCcnCisJCQkoY2QgIiRSRU1PVEVfUkVQTyIgJiYgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAiJEhFQUQiKQorCQknXCcnICYmCisJCSgKKwkJCWNkICIkTE9DQUxfUkVQTyIgJiYKKwkJCWdpdCBwdXNoIC12IC0tZm9yY2Utd2l0aC1sZWFzZT0kQlJBTkNIOiRIRUFEIG9yaWdpbgorCQkpICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRCUkFOQ0giID5leHBlY3QgJiYKKwkJKAorCQkJY2QgIiRSRU1PVEVfUkVQTyIgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFECisJCSkgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworfQorCitzZXR1cF9hc2twYXNzX2hlbHBlcigpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhc2twYXNzIGhlbHBlcicgJworCQl3cml0ZV9zY3JpcHQgIiRUUkFTSF9ESVJFQ1RPUlkvYXNrcGFzcyIgPDwtXEVPRiAmJgorCQllY2hvID4+IiRUUkFTSF9ESVJFQ1RPUlkvYXNrcGFzcy1xdWVyeSIgImFza3Bhc3M6ICQqIiAmJgorCQljYXNlICIkKiIgaW4KKwkJKlVzZXJuYW1lKikKKwkJCXdoYXQ9dXNlcgorCQkJOzsKKwkJKlBhc3N3b3JkKikKKwkJCXdoYXQ9cGFzcworCQkJOzsKKwkJZXNhYyAmJgorCQljYXQgIiRUUkFTSF9ESVJFQ1RPUlkvYXNrcGFzcy0kd2hhdCIKKwkJRU9GCisJCUdJVF9BU0tQQVNTPSIkVFJBU0hfRElSRUNUT1JZL2Fza3Bhc3MiICYmCisJCWV4cG9ydCBHSVRfQVNLUEFTUyAmJgorCQlleHBvcnQgVFJBU0hfRElSRUNUT1JZCisJJworfQorCitzZXRfYXNrcGFzcygpIHsKKwk+IiRUUkFTSF9ESVJFQ1RPUlkvYXNrcGFzcy1xdWVyeSIgJiYKKwllY2hvICIkMSIgPiIkVFJBU0hfRElSRUNUT1JZL2Fza3Bhc3MtdXNlciIgJiYKKwllY2hvICIkMiIgPiIkVFJBU0hfRElSRUNUT1JZL2Fza3Bhc3MtcGFzcyIKK30KKworZXhwZWN0X2Fza3Bhc3MoKSB7CisJZGVzdD0kSFRUUERfREVTVCR7MysvJDN9CisKKwl7CisJCWNhc2UgIiQxIiBpbgorCQlub25lKQorCQkJOzsKKwkJcGFzcykKKwkJCWVjaG8gImFza3Bhc3M6IFBhc3N3b3JkIGZvciAnaHR0cDovLyQyQCRkZXN0JzogIgorCQkJOzsKKwkJYm90aCkKKwkJCWVjaG8gImFza3Bhc3M6IFVzZXJuYW1lIGZvciAnaHR0cDovLyRkZXN0JzogIgorCQkJZWNobyAiYXNrcGFzczogUGFzc3dvcmQgZm9yICdodHRwOi8vJDJAJGRlc3QnOiAiCisJCQk7OworCQkqKQorCQkJZmFsc2UKKwkJCTs7CisJCWVzYWMKKwl9ID4iJFRSQVNIX0RJUkVDVE9SWS9hc2twYXNzLWV4cGVjdCIgJiYKKwl0ZXN0X2NtcCAiJFRSQVNIX0RJUkVDVE9SWS9hc2twYXNzLWV4cGVjdCIgXAorCQkgIiRUUkFTSF9ESVJFQ1RPUlkvYXNrcGFzcy1xdWVyeSIKK30KKworc3RyaXBfYWNjZXNzX2xvZygpIHsKKwlzZWQgLWUgIgorCQlzL14uKiBcIi8vCisJCXMvXCIvLworCQlzLyBbMS05XVswLTldKlwkLy8KKwkJcy9eR0VUIC9HRVQgIC8KKwkiICIkSFRUUERfUk9PVF9QQVRIIi9hY2Nlc3MubG9nCit9CisKKyMgUmVxdWlyZXMgb25lIGFyZ3VtZW50OiB0aGUgbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyB0aGUgZXhwZWN0ZWQgc3RyaXBwZWQKKyMgYWNjZXNzIGxvZyBlbnRyaWVzLgorY2hlY2tfYWNjZXNzX2xvZygpIHsKKwlzb3J0ICIkMSIgPiIkMSIuc29ydGVkICYmCisJc3RyaXBfYWNjZXNzX2xvZyA+YWNjZXNzLmxvZy5zdHJpcHBlZCAmJgorCXNvcnQgYWNjZXNzLmxvZy5zdHJpcHBlZCA+YWNjZXNzLmxvZy5zb3J0ZWQgJiYKKwlpZiAhIHRlc3RfY21wICIkMSIuc29ydGVkIGFjY2Vzcy5sb2cuc29ydGVkCisJdGhlbgorCQl0ZXN0X2NtcCAiJDEiIGFjY2Vzcy5sb2cuc3RyaXBwZWQKKwlmaQorfQpkaWZmIC0tZ2l0IGEvdC9saWItaHR0cGQvYXBhY2hlLmNvbmYgYi90L2xpYi1odHRwZC9hcGFjaGUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTRlNTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvYXBhY2hlLmNvbmYKQEAgLTAsMCArMSwyNTggQEAKK1NlcnZlck5hbWUgZHVtbXkKK1BpZEZpbGUgaHR0cGQucGlkCitEb2N1bWVudFJvb3Qgd3d3CitMb2dGb3JtYXQgIiVoICVsICV1ICV0IFwiJXJcIiAlPnMgJWIiIGNvbW1vbgorQ3VzdG9tTG9nIGFjY2Vzcy5sb2cgY29tbW9uCitFcnJvckxvZyBlcnJvci5sb2cKKzxJZk1vZHVsZSAhbW9kX2xvZ19jb25maWcuYz4KKwlMb2FkTW9kdWxlIGxvZ19jb25maWdfbW9kdWxlIG1vZHVsZXMvbW9kX2xvZ19jb25maWcuc28KKzwvSWZNb2R1bGU+Cis8SWZNb2R1bGUgIW1vZF9hbGlhcy5jPgorCUxvYWRNb2R1bGUgYWxpYXNfbW9kdWxlIG1vZHVsZXMvbW9kX2FsaWFzLnNvCis8L0lmTW9kdWxlPgorPElmTW9kdWxlICFtb2RfY2dpLmM+CisJTG9hZE1vZHVsZSBjZ2lfbW9kdWxlIG1vZHVsZXMvbW9kX2NnaS5zbworPC9JZk1vZHVsZT4KKzxJZk1vZHVsZSAhbW9kX2Vudi5jPgorCUxvYWRNb2R1bGUgZW52X21vZHVsZSBtb2R1bGVzL21vZF9lbnYuc28KKzwvSWZNb2R1bGU+Cis8SWZNb2R1bGUgIW1vZF9yZXdyaXRlLmM+CisJTG9hZE1vZHVsZSByZXdyaXRlX21vZHVsZSBtb2R1bGVzL21vZF9yZXdyaXRlLnNvCis8L0lGTW9kdWxlPgorPElmTW9kdWxlICFtb2RfdmVyc2lvbi5jPgorCUxvYWRNb2R1bGUgdmVyc2lvbl9tb2R1bGUgbW9kdWxlcy9tb2RfdmVyc2lvbi5zbworPC9JZk1vZHVsZT4KKzxJZk1vZHVsZSAhbW9kX2hlYWRlcnMuYz4KKwlMb2FkTW9kdWxlIGhlYWRlcnNfbW9kdWxlIG1vZHVsZXMvbW9kX2hlYWRlcnMuc28KKzwvSWZNb2R1bGU+Cis8SWZNb2R1bGUgIW1vZF9zZXRlbnZpZi5jPgorCUxvYWRNb2R1bGUgc2V0ZW52aWZfbW9kdWxlIG1vZHVsZXMvbW9kX3NldGVudmlmLnNvCis8L0lmTW9kdWxlPgorCis8SWZWZXJzaW9uIDwgMi40PgorTG9ja0ZpbGUgYWNjZXB0LmxvY2sKKzwvSWZWZXJzaW9uPgorCis8SWZWZXJzaW9uIDwgMi4xPgorPElmTW9kdWxlICFtb2RfYXV0aC5jPgorCUxvYWRNb2R1bGUgYXV0aF9tb2R1bGUgbW9kdWxlcy9tb2RfYXV0aC5zbworPC9JZk1vZHVsZT4KKzwvSWZWZXJzaW9uPgorCis8SWZWZXJzaW9uID49IDIuMT4KKzxJZk1vZHVsZSAhbW9kX2F1dGhfYmFzaWMuYz4KKwlMb2FkTW9kdWxlIGF1dGhfYmFzaWNfbW9kdWxlIG1vZHVsZXMvbW9kX2F1dGhfYmFzaWMuc28KKzwvSWZNb2R1bGU+Cis8SWZNb2R1bGUgIW1vZF9hdXRobl9maWxlLmM+CisJTG9hZE1vZHVsZSBhdXRobl9maWxlX21vZHVsZSBtb2R1bGVzL21vZF9hdXRobl9maWxlLnNvCis8L0lmTW9kdWxlPgorPElmTW9kdWxlICFtb2RfYXV0aHpfdXNlci5jPgorCUxvYWRNb2R1bGUgYXV0aHpfdXNlcl9tb2R1bGUgbW9kdWxlcy9tb2RfYXV0aHpfdXNlci5zbworPC9JZk1vZHVsZT4KKzxJZk1vZHVsZSAhbW9kX2F1dGh6X2hvc3QuYz4KKwlMb2FkTW9kdWxlIGF1dGh6X2hvc3RfbW9kdWxlIG1vZHVsZXMvbW9kX2F1dGh6X2hvc3Quc28KKzwvSWZNb2R1bGU+Cis8L0lmVmVyc2lvbj4KKworPElmVmVyc2lvbiA+PSAyLjQ+Cis8SWZNb2R1bGUgIW1vZF9hdXRobl9jb3JlLmM+CisJTG9hZE1vZHVsZSBhdXRobl9jb3JlX21vZHVsZSBtb2R1bGVzL21vZF9hdXRobl9jb3JlLnNvCis8L0lmTW9kdWxlPgorPElmTW9kdWxlICFtb2RfYXV0aHpfY29yZS5jPgorCUxvYWRNb2R1bGUgYXV0aHpfY29yZV9tb2R1bGUgbW9kdWxlcy9tb2RfYXV0aHpfY29yZS5zbworPC9JZk1vZHVsZT4KKzxJZk1vZHVsZSAhbW9kX2FjY2Vzc19jb21wYXQuYz4KKwlMb2FkTW9kdWxlIGFjY2Vzc19jb21wYXRfbW9kdWxlIG1vZHVsZXMvbW9kX2FjY2Vzc19jb21wYXQuc28KKzwvSWZNb2R1bGU+Cis8SWZNb2R1bGUgIW1vZF9tcG1fcHJlZm9yay5jPgorCUxvYWRNb2R1bGUgbXBtX3ByZWZvcmtfbW9kdWxlIG1vZHVsZXMvbW9kX21wbV9wcmVmb3JrLnNvCis8L0lmTW9kdWxlPgorPElmTW9kdWxlICFtb2RfdW5peGQuYz4KKwlMb2FkTW9kdWxlIHVuaXhkX21vZHVsZSBtb2R1bGVzL21vZF91bml4ZC5zbworPC9JZk1vZHVsZT4KKzwvSWZWZXJzaW9uPgorCitQYXNzRW52IEdJVF9WQUxHUklORAorUGFzc0VudiBHSVRfVkFMR1JJTkRfT1BUSU9OUworUGFzc0VudiBHTlVQR0hPTUUKK1Bhc3NFbnYgQVNBTl9PUFRJT05TCitQYXNzRW52IExTQU5fT1BUSU9OUworUGFzc0VudiBHSVRfVFJBQ0UKK1Bhc3NFbnYgR0lUX0NPTkZJR19OT1NZU1RFTQorUGFzc0VudiBHSVRfVEVTVF9TSURFQkFORF9BTEwKKworU2V0RW52SWYgR2l0LVByb3RvY29sICIuKiIgR0lUX1BST1RPQ09MPSQwCisKK0FsaWFzIC9kdW1iLyB3d3cvCitBbGlhcyAvYXV0aC9kdW1iLyB3d3cvYXV0aC9kdW1iLworCis8TG9jYXRpb25NYXRjaCAvc21hcnQvPgorCVNldEVudiBHSVRfRVhFQ19QQVRIICR7R0lUX0VYRUNfUEFUSH0KKwlTZXRFbnYgR0lUX0hUVFBfRVhQT1JUX0FMTAorPC9Mb2NhdGlvbk1hdGNoPgorPExvY2F0aW9uTWF0Y2ggL3NtYXJ0X25vZXhwb3J0Lz4KKwlTZXRFbnYgR0lUX0VYRUNfUEFUSCAke0dJVF9FWEVDX1BBVEh9Cis8L0xvY2F0aW9uTWF0Y2g+Cis8TG9jYXRpb25NYXRjaCAvc21hcnRfY3VzdG9tX2Vudi8+CisJU2V0RW52IEdJVF9FWEVDX1BBVEggJHtHSVRfRVhFQ19QQVRIfQorCVNldEVudiBHSVRfSFRUUF9FWFBPUlRfQUxMCisJU2V0RW52IEdJVF9DT01NSVRURVJfTkFNRSAiQ3VzdG9tIFVzZXIiCisJU2V0RW52IEdJVF9DT01NSVRURVJfRU1BSUwgY3VzdG9tQGV4YW1wbGUuY29tCis8L0xvY2F0aW9uTWF0Y2g+Cis8TG9jYXRpb25NYXRjaCAvc21hcnRfbmFtZXNwYWNlLz4KKwlTZXRFbnYgR0lUX0VYRUNfUEFUSCAke0dJVF9FWEVDX1BBVEh9CisJU2V0RW52IEdJVF9IVFRQX0VYUE9SVF9BTEwKKwlTZXRFbnYgR0lUX05BTUVTUEFDRSBucworPC9Mb2NhdGlvbk1hdGNoPgorPExvY2F0aW9uTWF0Y2ggL3NtYXJ0X2Nvb2tpZXMvPgorCVNldEVudiBHSVRfRVhFQ19QQVRIICR7R0lUX0VYRUNfUEFUSH0KKwlTZXRFbnYgR0lUX0hUVFBfRVhQT1JUX0FMTAorCUhlYWRlciBzZXQgU2V0LUNvb2tpZSBuYW1lPXZhbHVlCis8L0xvY2F0aW9uTWF0Y2g+Cis8TG9jYXRpb25NYXRjaCAvc21hcnRfaGVhZGVycy8+CisJU2V0RW52IEdJVF9FWEVDX1BBVEggJHtHSVRfRVhFQ19QQVRIfQorCVNldEVudiBHSVRfSFRUUF9FWFBPUlRfQUxMCis8L0xvY2F0aW9uTWF0Y2g+Cis8TG9jYXRpb25NYXRjaCAvb25lX3RpbWVfcGVybC8+CisJU2V0RW52IEdJVF9FWEVDX1BBVEggJHtHSVRfRVhFQ19QQVRIfQorCVNldEVudiBHSVRfSFRUUF9FWFBPUlRfQUxMCis8L0xvY2F0aW9uTWF0Y2g+CitTY3JpcHRBbGlhc01hdGNoIC9lcnJvcl9naXRfdXBsb2FkX3BhY2svKC4qKS9naXQtdXBsb2FkLXBhY2sgZXJyb3Iuc2gvCitTY3JpcHRBbGlhc01hdGNoIC9zbWFydF8qW14vXSovKC4qKSAke0dJVF9FWEVDX1BBVEh9L2dpdC1odHRwLWJhY2tlbmQvJDEKK1NjcmlwdEFsaWFzIC9icm9rZW5fc21hcnQvIGJyb2tlbi1zbWFydC1odHRwLnNoLworU2NyaXB0QWxpYXMgL2Vycm9yX3NtYXJ0LyBlcnJvci1zbWFydC1odHRwLnNoLworU2NyaXB0QWxpYXMgL2Vycm9yLyBlcnJvci5zaC8KK1NjcmlwdEFsaWFzTWF0Y2ggL29uZV90aW1lX3BlcmwvKC4qKSBhcHBseS1vbmUtdGltZS1wZXJsLnNoLyQxCis8RGlyZWN0b3J5ICR7R0lUX0VYRUNfUEFUSH0+CisJT3B0aW9ucyBGb2xsb3dTeW1saW5rcworPC9EaXJlY3Rvcnk+Cis8RmlsZXMgYnJva2VuLXNtYXJ0LWh0dHAuc2g+CisJT3B0aW9ucyBFeGVjQ0dJCis8L0ZpbGVzPgorPEZpbGVzIGVycm9yLXNtYXJ0LWh0dHAuc2g+CisJT3B0aW9ucyBFeGVjQ0dJCis8L0ZpbGVzPgorPEZpbGVzIGVycm9yLnNoPgorICBPcHRpb25zIEV4ZWNDR0kKKzwvRmlsZXM+Cis8RmlsZXMgYXBwbHktb25lLXRpbWUtcGVybC5zaD4KKwlPcHRpb25zIEV4ZWNDR0kKKzwvRmlsZXM+Cis8RmlsZXMgJHtHSVRfRVhFQ19QQVRIfS9naXQtaHR0cC1iYWNrZW5kPgorCU9wdGlvbnMgRXhlY0NHSQorPC9GaWxlcz4KKworUmV3cml0ZUVuZ2luZSBvbgorUmV3cml0ZVJ1bGUgXi9kdW1iLXJlZGlyLyguKikkIC9kdW1iLyQxIFtSPTMwMV0KK1Jld3JpdGVSdWxlIF4vc21hcnQtcmVkaXItcGVybS8oLiopJCAvc21hcnQvJDEgW1I9MzAxXQorUmV3cml0ZVJ1bGUgXi9zbWFydC1yZWRpci10ZW1wLyguKikkIC9zbWFydC8kMSBbUj0zMDJdCitSZXdyaXRlUnVsZSBeL3NtYXJ0LXJlZGlyLWF1dGgvKC4qKSQgL2F1dGgvc21hcnQvJDEgW1I9MzAxXQorUmV3cml0ZVJ1bGUgXi9zbWFydC1yZWRpci1saW1pdGVkLyguKikvaW5mby9yZWZzJCAvc21hcnQvJDEvaW5mby9yZWZzIFtSPTMwMV0KK1Jld3JpdGVSdWxlIF4vZnRwLXJlZGlyLyguKikkIGZ0cDovL2xvY2FsaG9zdDoxMDAwLyQxIFtSPTMwMl0KKworUmV3cml0ZVJ1bGUgXi9sb29wLXJlZGlyL3gteC14LXgteC14LXgteC14LXgteC14LXgteC14LXgteC14LXgteC0oLiopIC8kMSBbUj0zMDJdCitSZXdyaXRlUnVsZSBeL2xvb3AtcmVkaXIvKC4qKSQgL2xvb3AtcmVkaXIveC0kMSBbUj0zMDJdCisKKyMgcmVkaXItdG8vNTAyL3g/eSAtPiByZWFsbHktcmVkaXItdG8/cGF0aD01MDIveCZxcz15IHdoaWNoIHJldHVybnMgNTAyCisjIHJlZGlyLXRvL3g/eSAtPiByZWFsbHktcmVkaXItdG8/cGF0aD14JnFzPXkgLT4geD95CitSZXdyaXRlQ29uZCAle1FVRVJZX1NUUklOR30gXiguKikkCitSZXdyaXRlUnVsZSBeL3JlZGlyLXRvLyguKikkIC9yZWFsbHktcmVkaXItdG8/cGF0aD0kMSZxcz0lMSBbUj0zMDJdCitSZXdyaXRlQ29uZCAle1FVRVJZX1NUUklOR30gXnBhdGg9NTAyLyguKikmcXM9KC4qKSQKK1Jld3JpdGVSdWxlIF4vcmVhbGx5LXJlZGlyLXRvJCAtIFtSPTUwMixMXQorUmV3cml0ZUNvbmQgJXtRVUVSWV9TVFJJTkd9IF5wYXRoPSguKikmcXM9KC4qKSQKK1Jld3JpdGVSdWxlIF4vcmVhbGx5LXJlZGlyLXRvJCAvJTE/JTIgW1I9MzAyXQorCisjIFRoZSBmaXJzdCBydWxlIGlzc3VlcyBhIGNsaWVudC1zaWRlIHJlZGlyZWN0IHRvIHNvbWV0aGluZworIyB0aGF0IF9kb2Vzbid0XyBsb29rIGxpa2UgYSBnaXQgcmVwby4gVGhlIHNlY29uZCBydWxlIGlzIGEKKyMgc2VydmVyLXNpZGUgcmV3cml0ZSwgc28gdGhhdCBpdCB0dXJucyBvdXQgdGhlIG9kZC1sb29raW5nCisjIHRoaW5nIF9pc18gYSBnaXQgcmVwby4gVGhlICJbUFRdIiB0ZWxscyBBcGFjaGUgdG8gbWF0Y2gKKyMgdGhlIHVzdWFsIFNjcmlwdEFsaWFzIHJ1bGVzIGZvciAvc21hcnQuCitSZXdyaXRlUnVsZSBeL2luc2FuZS1yZWRpci8oLiopJCAvaW50ZXJuLXJlZGlyLyQxL2ZvbyBbUj0zMDFdCitSZXdyaXRlUnVsZSBeL2ludGVybi1yZWRpci8oLiopL2ZvbyQgL3NtYXJ0LyQxIFtQVF0KKworIyBTZXJ2ZSBpbmZvL3JlZnMgaW50ZXJuYWxseSB3aXRob3V0IHJlZGlyZWN0aW5nLCBidXQKKyMgaXNzdWUgYSByZWRpcmVjdCBmb3IgYW55IG9iamVjdCByZXF1ZXN0cy4KK1Jld3JpdGVSdWxlIF4vcmVkaXItb2JqZWN0cy8oLiovaW5mby9yZWZzKSQgL2R1bWIvJDEgW1BUXQorUmV3cml0ZVJ1bGUgXi9yZWRpci1vYmplY3RzLyguKi9vYmplY3RzLy4qKSQgL2R1bWIvJDEgW1I9MzAxXQorCisjIEFwYWNoZSAyLjIgZG9lcyBub3QgdW5kZXJzdGFuZCA8UmVxdWlyZUFsbD4sIHNvIHdlIHVzZSBSZXdyaXRlQ29uZC4KKyMgQW5kIGFzIFJld3JpdGVDb25kIGRvZXMgbm90IGFsbG93IHRlc3RpbmcgZm9yIG5vbi1tYXRjaGVzLCB3ZSBtYXRjaAorIyB0aGUgZGVzaXJlZCBjYXNlIGZpcnN0IChvbmUgaGFzIGFicmEsIHR3byBoYXMgY2FkYWJyYSksIGFuZCBsZXQgaXQKKyMgcGFzcyBieSBtYXJraW5nIHRoZSBSZXdyaXRlUnVsZSBhcyBbTF0sICJsYXN0IHJ1bGUsIGRvIG5vdCBwcm9jZXNzCisjIGFueSBvdGhlciBtYXRjaGluZyBSZXdyaXRlUnVsZXMgYWZ0ZXIgdGhpcyIpLCBhbmQgdGhlbiBoYXZlIGFub3RoZXIKKyMgUmV3cml0ZVJ1bGUgdGhhdCBtYXRjaGVzIGFsbCBvdGhlciBjYXNlcyBhbmQgbGV0cyB0aGVtIGZhaWwgdmlhICdbRl0nLAorIyAiZmFpbCB0aGUgcmVxdWVzdCIuCitSZXdyaXRlQ29uZCAle0hUVFA6eC1tYWdpYy1vbmV9ID1hYnJhCitSZXdyaXRlQ29uZCAle0hUVFA6eC1tYWdpYy10d299ID1jYWRhYnJhCitSZXdyaXRlUnVsZSBeL3NtYXJ0X2hlYWRlcnMvLiogLSBbTF0KK1Jld3JpdGVSdWxlIF4vc21hcnRfaGVhZGVycy8uKiAtIFtGXQorCis8SWZEZWZpbmUgU1NMPgorTG9hZE1vZHVsZSBzc2xfbW9kdWxlIG1vZHVsZXMvbW9kX3NzbC5zbworCitTU0xDZXJ0aWZpY2F0ZUZpbGUgaHR0cGQucGVtCitTU0xDZXJ0aWZpY2F0ZUtleUZpbGUgaHR0cGQucGVtCitTU0xSYW5kb21TZWVkIHN0YXJ0dXAgZmlsZTovZGV2L3VyYW5kb20gNTEyCitTU0xSYW5kb21TZWVkIGNvbm5lY3QgZmlsZTovZGV2L3VyYW5kb20gNTEyCitTU0xTZXNzaW9uQ2FjaGUgbm9uZQorU1NMTXV0ZXggZmlsZTpzc2xfbXV0ZXgKK1NTTEVuZ2luZSBPbgorPC9JZkRlZmluZT4KKworPExvY2F0aW9uIC9hdXRoLz4KKwlBdXRoVHlwZSBCYXNpYworCUF1dGhOYW1lICJnaXQtYXV0aCIKKwlBdXRoVXNlckZpbGUgcGFzc3dkCisJUmVxdWlyZSB2YWxpZC11c2VyCis8L0xvY2F0aW9uPgorCis8TG9jYXRpb25NYXRjaCAiXi9hdXRoLXB1c2gvLiovZ2l0LXJlY2VpdmUtcGFjayQiPgorCUF1dGhUeXBlIEJhc2ljCisJQXV0aE5hbWUgImdpdC1hdXRoIgorCUF1dGhVc2VyRmlsZSBwYXNzd2QKKwlSZXF1aXJlIHZhbGlkLXVzZXIKKzwvTG9jYXRpb25NYXRjaD4KKworPExvY2F0aW9uTWF0Y2ggIl4vYXV0aC1mZXRjaC8uKi9naXQtdXBsb2FkLXBhY2skIj4KKwlBdXRoVHlwZSBCYXNpYworCUF1dGhOYW1lICJnaXQtYXV0aCIKKwlBdXRoVXNlckZpbGUgcGFzc3dkCisJUmVxdWlyZSB2YWxpZC11c2VyCis8L0xvY2F0aW9uTWF0Y2g+CisKK1Jld3JpdGVDb25kICV7UVVFUllfU1RSSU5HfSBzZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgW09SXQorUmV3cml0ZUNvbmQgJXtSRVFVRVNUX1VSSX0gL2dpdC1yZWNlaXZlLXBhY2skCitSZXdyaXRlUnVsZSBeL2hhbGYtYXV0aC1jb21wbGV0ZS8gLSBbRT1BVVRIUkVRVUlSRUQ6eWVzXQorCis8TG9jYXRpb24gL2hhbGYtYXV0aC1jb21wbGV0ZS8+CisgIE9yZGVyIERlbnksQWxsb3cKKyAgRGVueSBmcm9tIGVudj1BVVRIUkVRVUlSRUQKKworICBBdXRoVHlwZSBCYXNpYworICBBdXRoTmFtZSAiR2l0IEFjY2VzcyIKKyAgQXV0aFVzZXJGaWxlIHBhc3N3ZAorICBSZXF1aXJlIHZhbGlkLXVzZXIKKyAgU2F0aXNmeSBBbnkKKzwvTG9jYXRpb24+CisKKzxJZkRlZmluZSBEQVY+CisJTG9hZE1vZHVsZSBkYXZfbW9kdWxlIG1vZHVsZXMvbW9kX2Rhdi5zbworCUxvYWRNb2R1bGUgZGF2X2ZzX21vZHVsZSBtb2R1bGVzL21vZF9kYXZfZnMuc28KKworCURBVkxvY2tEQiBEQVZMb2NrCisJPExvY2F0aW9uIC9kdW1iLz4KKwkJRGF2IG9uCisJPC9Mb2NhdGlvbj4KKwk8TG9jYXRpb24gL2F1dGgvZHVtYj4KKwkJRGF2IG9uCisJPC9Mb2NhdGlvbj4KKzwvSWZEZWZpbmU+CisKKzxJZkRlZmluZSBTVk4+CisJTG9hZE1vZHVsZSBkYXZfc3ZuX21vZHVsZSBtb2R1bGVzL21vZF9kYXZfc3ZuLnNvCisKKwk8TG9jYXRpb24gLyR7TElCX0hUVFBEX1NWTn0+CisJCURBViBzdm4KKwkJU1ZOUGF0aCAiJHtMSUJfSFRUUERfU1ZOUEFUSH0iCisJPC9Mb2NhdGlvbj4KKzwvSWZEZWZpbmU+CmRpZmYgLS1naXQgYS90L2xpYi1odHRwZC9hcHBseS1vbmUtdGltZS1wZXJsLnNoIGIvdC9saWItaHR0cGQvYXBwbHktb25lLXRpbWUtcGVybC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWEwYWJkCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvYXBwbHktb25lLXRpbWUtcGVybC5zaApAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKworIyBJZiAib25lLXRpbWUtcGVybCIgZXhpc3RzIGluICRIVFRQRF9ST09UX1BBVEgsIHJ1biBwZXJsIG9uIHRoZSBIVFRQIHJlc3BvbnNlLAorIyB1c2luZyB0aGUgY29udGVudHMgb2YgIm9uZS10aW1lLXBlcmwiIGFzIHRoZSBwZXJsIGNvbW1hbmQgdG8gYmUgcnVuLiBJZiB0aGUKKyMgcmVzcG9uc2Ugd2FzIG1vZGlmaWVkIGFzIGEgcmVzdWx0LCBkZWxldGUgIm9uZS10aW1lLXBlcmwiIHNvIHRoYXQgc3Vic2VxdWVudAorIyBIVFRQIHJlc3BvbnNlcyBhcmUgbm8gbG9uZ2VyIG1vZGlmaWVkLgorIworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIHRoZSBlZmZlY3RzIG9mIHRoZSByZXBvc2l0b3J5IGNoYW5naW5nIGluCisjIGJldHdlZW4gSFRUUCByZXF1ZXN0LXJlc3BvbnNlIHBhaXJzLgoraWYgdGVzdCAtZiBvbmUtdGltZS1wZXJsCit0aGVuCisJTENfQUxMPUMKKwlleHBvcnQgTENfQUxMCisKKwkiJEdJVF9FWEVDX1BBVEgvZ2l0LWh0dHAtYmFja2VuZCIgPm91dAorCXBlcmwgLXBlICIkKGNhdCBvbmUtdGltZS1wZXJsKSIgb3V0ID5vdXRfbW9kaWZpZWQKKworCWlmIGNtcCAtcyBvdXQgb3V0X21vZGlmaWVkCisJdGhlbgorCQljYXQgb3V0CisJZWxzZQorCQljYXQgb3V0X21vZGlmaWVkCisJCXJtIG9uZS10aW1lLXBlcmwKKwlmaQorZWxzZQorCSIkR0lUX0VYRUNfUEFUSC9naXQtaHR0cC1iYWNrZW5kIgorZmkKZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkL2Jyb2tlbi1zbWFydC1odHRwLnNoIGIvdC9saWItaHR0cGQvYnJva2VuLXNtYXJ0LWh0dHAuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjYzYxMAotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWh0dHBkL2Jyb2tlbi1zbWFydC1odHRwLnNoCkBAIC0wLDAgKzEsMTAgQEAKK3ByaW50ZiAiQ29udGVudC1UeXBlOiB0ZXh0LyVzXG4iICJodG1sIgorZWNobworcHJpbnRmICIlc1xuIiAiMDAxZSMgc2VydmljZT1naXQtdXBsb2FkLXBhY2siCitwcmludGYgIiVzIiAgICIwMDAwIgorcHJpbnRmICIlcyVjJXMlc1xuIiBcCisJIjAwYTU4NjgxZDlmMjg2YTQ4YjA4ZjM3YjNhMDk1MzMwZGExNjY4OWUzNjkzIEhFQUQiIFwKKwkwIFwKKwkiIGluY2x1ZGUtdGFnIG11bHRpX2Fja19kZXRhaWxlZCBtdWx0aV9hY2sgb2ZzLWRlbHRhIiBcCisJIiBzaWRlLWJhbmQgc2lkZS1iYW5kLTY0ayB0aGluLXBhY2sgbm8tcHJvZ3Jlc3Mgc2hhbGxvdyBuby1kb25lICIKK3ByaW50ZiAiJXMiICAgIjAwMDAiCmRpZmYgLS1naXQgYS90L2xpYi1odHRwZC9lcnJvci1zbWFydC1odHRwLnNoIGIvdC9saWItaHR0cGQvZXJyb3Itc21hcnQtaHR0cC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjVkNDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvZXJyb3Itc21hcnQtaHR0cC5zaApAQCAtMCwwICsxLDMgQEAKK2VjaG8gIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1naXQtdXBsb2FkLXBhY2stYWR2ZXJ0aXNlbWVudCIKK2VjaG8KK3ByaW50ZiAiJXMiICIwMDE5RVJSIHNlcnZlci1zaWRlIGVycm9yIgpkaWZmIC0tZ2l0IGEvdC9saWItaHR0cGQvZXJyb3Iuc2ggYi90L2xpYi1odHRwZC9lcnJvci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNzdiOGU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvZXJyb3Iuc2gKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisKK3ByaW50ZiAiU3RhdHVzOiA1MDAgSW50ZW50aW9uYWwgQnJlYWthZ2VcbiIKKworcHJpbnRmICJDb250ZW50LVR5cGU6ICIKK2NoYXJzZXQ9aXNvLTg4NTktMQorY2FzZSAiJFBBVEhfSU5GTyIgaW4KKypodG1sKikKKwlwcmludGYgInRleHQvaHRtbCIKKwk7OworKnRleHQqKQorCXByaW50ZiAidGV4dC9wbGFpbiIKKwk7OworKmNoYXJzZXQqKQorCXByaW50ZiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIKKwljaGFyc2V0PXV0Zi04CisJOzsKKyp1dGYxNiopCisJcHJpbnRmICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi0xNiIKKwljaGFyc2V0PXV0Zi0xNgorCTs7Cisqb2RkLXNwYWNpbmcqKQorCXByaW50ZiAidGV4dC9wbGFpbjsgZm9vPWJhciA7Y2hhcnNldD11dGYtMTY7IG90aGVyPW5vbnNlbnNlIgorCWNoYXJzZXQ9dXRmLTE2CisJOzsKK2VzYWMKK3ByaW50ZiAiXG4iCisKK3ByaW50ZiAiXG4iCitwcmludGYgInRoaXMgaXMgdGhlIGVycm9yIG1lc3NhZ2VcbiIgfAoraWNvbnYgLWYgdXMtYXNjaWkgLXQgJGNoYXJzZXQKZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkL3Bhc3N3ZCBiL3QvbGliLWh0dHBkL3Bhc3N3ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWEzNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvcGFzc3dkCkBAIC0wLDAgKzEgQEAKK3VzZXJAaG9zdDp4YjRFOHBxRDgxS1FzCmRpZmYgLS1naXQgYS90L2xpYi1odHRwZC9zc2wuY25mIGIvdC9saWItaHR0cGQvc3NsLmNuZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGFiMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvc3NsLmNuZgpAQCAtMCwwICsxLDggQEAKK1JBTkRGSUxFICAgICAgICAgICAgICAgID0gJEVOVjo6UkFOREZJTEVfUEFUSAorCitbIHJlcSBdCitkZWZhdWx0X2JpdHMgICAgICAgICAgICA9IDEwMjQKK2Rpc3Rpbmd1aXNoZWRfbmFtZSAgICAgID0gcmVxX2Rpc3Rpbmd1aXNoZWRfbmFtZQorcHJvbXB0ICAgICAgICAgICAgICAgICAgPSBubworWyByZXFfZGlzdGluZ3Vpc2hlZF9uYW1lIF0KK2NvbW1vbk5hbWUgICAgICAgICAgICAgID0gMTI3LjAuMC4xCmRpZmYgLS1naXQgYS90L2xpYi1sb2ctZ3JhcGguc2ggYi90L2xpYi1sb2ctZ3JhcGguc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE4NGNjZQotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWxvZy1ncmFwaC5zaApAQCAtMCwwICsxLDI4IEBACisjIEhlbHBzIHNoYXJlZCBieSB0aGUgdGVzdCBzY3JpcHRzIGZvciBjb21wYXJpbmcgbG9nIGdyYXBocy4KKworc2FuaXRpemVfbG9nX291dHB1dCAoKSB7CisJc2VkIC1lICdzLyAqJC8vJyBcCisJICAgIC1lICdzL2NvbW1pdCBbMC05YS1mXSokL2NvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUvJyBcCisJICAgIC1lICdzL01lcmdlOiBbIDAtOWEtZl0qJC9NZXJnZTogTUVSR0VfUEFSRU5UUy8nIFwKKwkgICAgLWUgJ3MvTWVyZ2UgdGFnLiovTWVyZ2UgSEVBRFMgREVTQ1JJUFRJT04vJyBcCisJICAgIC1lICdzL01lcmdlIGNvbW1pdC4qL01lcmdlIEhFQURTIERFU0NSSVBUSU9OLycgXAorCSAgICAtZSAncy9pbmRleCBbMC05YS1mXSpcLlwuWzAtOWEtZl0qL2luZGV4IEJFRk9SRS4uQUZURVIvJworfQorCitsaWJfdGVzdF9jbXBfZ3JhcGggKCkgeworCWdpdCBsb2cgLS1ncmFwaCAiJEAiID5vdXRwdXQgJiYKKwlzZWQgJ3MvICokLy8nID5vdXRwdXQuc2FuaXRpemVkIDxvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dC5zYW5pdGl6ZWQKK30KKworbGliX3Rlc3RfY21wX3Nob3J0X2dyYXBoICgpIHsKKwlnaXQgbG9nIC0tZ3JhcGggLS1wcmV0dHk9c2hvcnQgIiRAIiA+b3V0cHV0ICYmCisJc2FuaXRpemVfbG9nX291dHB1dCA+b3V0cHV0LnNhbml0aXplZCA8b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQuc2FuaXRpemVkCit9CisKK2xpYl90ZXN0X2NtcF9jb2xvcmVkX2dyYXBoICgpIHsKKwlnaXQgbG9nIC0tZ3JhcGggLS1jb2xvcj1hbHdheXMgIiRAIiA+b3V0cHV0LmNvbG9ycy5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8b3V0cHV0LmNvbG9ycy5yYXcgfCBzZWQgInMvICpcJC8vIiA+b3V0cHV0LmNvbG9ycyAmJgorCXRlc3RfY21wIGV4cGVjdC5jb2xvcnMgb3V0cHV0LmNvbG9ycworfQpkaWZmIC0tZ2l0IGEvdC9saWItcGFjay5zaCBiL3QvbGliLXBhY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM0NjMxNwotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLXBhY2suc2gKQEAgLTAsMCArMSwxMzUgQEAKKyMgU3VwcG9ydCByb3V0aW5lcyBmb3IgaGFuZC1jcmFmdGluZyB3ZWlyZCBvciBtYWxpY2lvdXMgcGFja3MuCisjCisjIFlvdSBjYW4gbWFrZSBhIGNvbXBsZXRlIHBhY2sgbGlrZToKKyMKKyMgICBwYWNrX2hlYWRlciAyID5mb28ucGFjayAmJgorIyAgIHBhY2tfb2JqIGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgPj5mb28ucGFjayAmJgorIyAgIHBhY2tfb2JqIGU2OGZlODEyOWI1NDZiMTAxYWVlOTUxMGM1MzI4ZTdmMjFjYTFkMTggPj5mb28ucGFjayAmJgorIyAgIHBhY2tfdHJhaWxlciBmb28ucGFjaworCisjIFByaW50IHRoZSBiaWctZW5kaWFuIDQtYnl0ZSBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiAkMQordWludDMyX29jdGFsICgpIHsKKwluPSQxCisJcHJpbnRmICdcXCVvJyAkKCgkbiAvIDE2Nzc3MjE2KSk7IG49JCgobiAlIDE2Nzc3MjE2KSkKKwlwcmludGYgJ1xcJW8nICQoKCRuIC8gICAgNjU1MzYpKTsgbj0kKChuICUgICAgNjU1MzYpKQorCXByaW50ZiAnXFwlbycgJCgoJG4gLyAgICAgIDI1NikpOyBuPSQoKG4gJSAgICAgIDI1NikpCisJcHJpbnRmICdcXCVvJyAkKCgkbiAgICAgICAgICAgKSk7Cit9CisKKyMgUHJpbnQgdGhlIGJpZy1lbmRpYW4gNC1ieXRlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiAkMQordWludDMyX2JpbmFyeSAoKSB7CisJcHJpbnRmICIkKHVpbnQzMl9vY3RhbCAiJDEiKSIKK30KKworIyBQcmludCBhIHBhY2sgaGVhZGVyLCB2ZXJzaW9uIDIsIGZvciBhIHBhY2sgd2l0aCAkMSBvYmplY3RzCitwYWNrX2hlYWRlciAoKSB7CisJcHJpbnRmICdQQUNLJyAmJgorCXByaW50ZiAnXDBcMFwwXDInICYmCisJdWludDMyX2JpbmFyeSAiJDEiCit9CisKKyMgUHJpbnQgdGhlIHBhY2sgZGF0YSBmb3Igb2JqZWN0ICQxLCBhcyBhIGRlbHRhIGFnYWluc3Qgb2JqZWN0ICQyIChvciBhcyBhIGZ1bGwKKyMgb2JqZWN0IGlmICQyIGlzIG1pc3Npbmcgb3IgZW1wdHkpLiBUaGUgb3V0cHV0IGlzIHN1aXRhYmxlIGZvciBpbmNsdWRpbmcKKyMgZGlyZWN0bHkgaW4gdGhlIHBhY2tmaWxlLCBhbmQgcmVwcmVzZW50cyB0aGUgZW50aXJldHkgb2YgdGhlIG9iamVjdCBlbnRyeS4KKyMgRG9pbmcgdGhpcyBvbiB0aGUgZmx5IChlc3BlY2lhbGx5IHBpY2tpbmcgeW91ciBkZWx0YXMpIGlzIHF1aXRlIHRyaWNreSwgc28gd2UKKyMgaGF2ZSBoYXJkY29kZWQgc29tZSB3ZWxsLWtub3duIG9iamVjdHMuIFNlZSB0aGUgY2FzZSBzdGF0ZW1lbnRzIGJlbG93IGZvciB0aGUKKyMgY29tcGxldGUgbGlzdC4KK3BhY2tfb2JqICgpIHsKKwl0ZXN0X29pZF9pbml0CisKKwljYXNlICIkMSIgaW4KKwkjIGVtcHR5IGJsb2IKKwkkRU1QVFlfQkxPQikKKwkJY2FzZSAiJDIiIGluCisJCScnKQorCQkJcHJpbnRmICdcMDYwXDE3MFwyMzRcMDAzXDBcMFwwXDBcMScKKwkJCXJldHVybgorCQkJOzsKKwkJZXNhYworCQk7OworCisJIyBibG9iIGNvbnRhaW5pbmcgIlw3XDc2IgorCSQodGVzdF9vaWQgcGFja2xpYl83Xzc2KSkKKwkJY2FzZSAiJDIiIGluCisJCScnKQorCQkJcHJpbnRmICdcMDYyXDE3MFwyMzRcMTQzXDI2N1wzXDBcMFwxMTZcMFwxMDYnCisJCQlyZXR1cm4KKwkJCTs7CisJCTAxZDc3MTM2NjZmNGRlODIyNzc2Yzc2MjJjMTBmMWIwN2RlMjgwZGMpCisJCQlwcmludGYgJ1wxNjVcMVwzMjdcMTYxXDY2XDE0NlwzNjRcMzM2XDIwMlw0N1wxNjYnICYmCisJCQlwcmludGYgJ1wzMDdcMTQyXDU0XDIwXDM2MVwyNjBcMTc1XDM0MlwyMDBcMzM0XDE3MCcgJiYKKwkJCXByaW50ZiAnXDIzNFwxNDNcMTQyXDE0MlwxNDJcMjY3XDAwM1wwXDBcMTUxXDBcMTE0JworCQkJcmV0dXJuCisJCQk7OworCQkzN2M4ZTJjMTViYjIyYjkxMmU1OWI0M2ZkNTFhNGY3ZTk0NjVlZDBiNTA4NGM1YTE0MTFkOTkxY2JlNjMwNjgzKQorCQkJcHJpbnRmICdcMTY1XDY3XDMxMFwzNDJcMzAxXDEzM1wyNjJcNTNcMjIxXDU2XDEzMScgJiYKKwkJCXByaW50ZiAnXDI2NFw3N1wzMjVcMzJcMTE3XDE3NlwyMjRcMTQ1XDM1NVwxM1wxMjAnICYmCisJCQlwcmludGYgJ1wyMDRcMzA1XDI0MVwxMDFcMzVcMjMxXDM0XDI3NlwxNDNcNlwyMDNcMTcwJyAmJgorCQkJcHJpbnRmICdcMjM0XDE0M1wxNDJcMTQyXDE0MlwyNjdcMDAzXDBcMFwxNTFcMFwxMTQnCisJCQlyZXR1cm4KKwkJCTs7CisJCWVzYWMKKwkJOzsKKworCSMgYmxvYiBjb250YWluaW5nICJcN1wwIgorCSQodGVzdF9vaWQgcGFja2xpYl83XzApKQorCQljYXNlICIkMiIgaW4KKwkJJycpCisJCQlwcmludGYgJ1wwNjJcMTcwXDIzNFwxNDNcMTQ3XDBcMFwwXDIwXDBcMTAnCisJCQlyZXR1cm4KKwkJCTs7CisJCWU2OGZlODEyOWI1NDZiMTAxYWVlOTUxMGM1MzI4ZTdmMjFjYTFkMTgpCisJCQlwcmludGYgJ1wxNjVcMzQ2XDIxN1wzNTBcMjJcMjMzXDEyNFwxNTNcMjBcMzJcMzU2JyAmJgorCQkJcHJpbnRmICdcMjI1XDIwXDMwNVw2MlwyMTZcMTc3XDQxXDMxMlwzNVwzMFwxNzBcMjM0JyAmJgorCQkJcHJpbnRmICdcMTQzXDE0MlwxNDJcMTQyXDE0N1wwXDBcMFw1M1wwXDE2JworCQkJcmV0dXJuCisJCQk7OworCQk1ZDhlNmZjNDBmMmRhYjAwZTY5ODNhNDg1MjNmZTU3ZTYyMWY0NjQzNGNiNThkYmQ0NDIyZmJhMDMzODBkODg2KQorCQkJcHJpbnRmICdcMTY1XDEzNVwyMTZcMTU3XDMwNFwxN1w1NVwyNTNcMFwzNDZcMjMwXDcyJyAmJgorCQkJcHJpbnRmICdcMTEwXDEyMlw3N1wzNDVcMTc2XDE0MlwzN1wxMDZcMTAzXDExNFwyNjUnICYmCisJCQlwcmludGYgJ1wyMTVcMjc1XDEwNFw0MlwzNzNcMjQwXDYzXDIwMFwzMzBcMjA2XDE3MFwyMzQnICYmCisJCQlwcmludGYgJ1wxNDNcMTQyXDE0MlwxNDJcMTQ3XDBcMFwwXDUzXDBcMTYnCisJCQlyZXR1cm4KKwkJCTs7CisJCWVzYWMKKwkJOzsKKwllc2FjCisKKwkjIElmIGl0J3Mgbm90IGEgZGVsdGEsIHdlIGNhbiBjb252aW5jZSBwYWNrLW9iamVjdHMgdG8gZ2VuZXJhdGUgYSBwYWNrCisJIyB3aXRoIGp1c3Qgb3VyIGVudHJ5LCBhbmQgdGhlbiBzdHJpcCBvZmYgdGhlIGhlYWRlciAoMTIgYnl0ZXMpIGFuZAorCSMgdHJhaWxlciAoMjAgYnl0ZXMpLgorCWlmIHRlc3QgLXogIiQyIgorCXRoZW4KKwkJZWNobyAiJDEiIHwgZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCA+cGFja19vYmoudG1wICYmCisJCXNpemU9JCh3YyAtYyA8cGFja19vYmoudG1wKSAmJgorCQlkZCBpZj1wYWNrX29iai50bXAgYnM9MSBjb3VudD0kKChzaXplIC0gJCh0ZXN0X29pZCByYXdzeikgLSAxMikpIHNraXA9MTIgJiYKKwkJcm0gLWYgcGFja19vYmoudG1wCisJCXJldHVybgorCWZpCisKKwllY2hvID4mMiAiQlVHOiBkb24ndCBrbm93IGhvdyB0byBwcmludCAkMSR7MjorIChmcm9tICQyKX0iCisJcmV0dXJuIDEKK30KKworIyBDb21wdXRlIGFuZCBhcHBlbmQgcGFjayB0cmFpbGVyIHRvICIkMSIKK3BhY2tfdHJhaWxlciAoKSB7CisJdGVzdF9vaWRfaW5pdCAmJgorCXRlc3QtdG9vbCAkKHRlc3Rfb2lkIGFsZ28pIC1iIDwiJDEiID50cmFpbGVyLnRtcCAmJgorCWNhdCB0cmFpbGVyLnRtcCA+PiIkMSIgJiYKKwlybSAtZiB0cmFpbGVyLnRtcAorfQorCisjIFJlbW92ZSBhbnkgZXhpc3RpbmcgcGFja3MgdG8gbWFrZSBzdXJlIHRoYXQKKyMgd2hhdGV2ZXIgd2UgaW5kZXggbmV4dCB3aWxsIGJlIHRoZSBwYWNrIHRoYXQgd2UKKyMgYWN0dWFsbHkgdXNlLgorY2xlYXJfcGFja3MgKCkgeworCXJtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyoKK30KKwordGVzdF9vaWRfY2FjaGUgPDwtRU9GCitwYWNrbGliXzdfMCBzaGExOjAxZDc3MTM2NjZmNGRlODIyNzc2Yzc2MjJjMTBmMWIwN2RlMjgwZGMKK3BhY2tsaWJfN18wIHNoYTI1NjozN2M4ZTJjMTViYjIyYjkxMmU1OWI0M2ZkNTFhNGY3ZTk0NjVlZDBiNTA4NGM1YTE0MTFkOTkxY2JlNjMwNjgzCisKK3BhY2tsaWJfN183NiBzaGExOmU2OGZlODEyOWI1NDZiMTAxYWVlOTUxMGM1MzI4ZTdmMjFjYTFkMTgKK3BhY2tsaWJfN183NiBzaGEyNTY6NWQ4ZTZmYzQwZjJkYWIwMGU2OTgzYTQ4NTIzZmU1N2U2MjFmNDY0MzRjYjU4ZGJkNDQyMmZiYTAzMzgwZDg4NgorRU9GCmRpZmYgLS1naXQgYS90L2xpYi1wYWdlci5zaCBiL3QvbGliLXBhZ2VyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYTdhM2YKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1wYWdlci5zaApAQCAtMCwwICsxLDE1IEBACisjIEhlbHBlcnMgZm9yIHRlc3RzIG9mIGdpdCdzIGNob2ljZSBvZiBwYWdlci4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZXJtaW5lIGRlZmF1bHQgcGFnZXInICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUucGFnZXIgJiYKKwlsZXNzPSQoCisJCXVuc2V0IFBBR0VSIEdJVF9QQUdFUjsKKwkJZ2l0IHZhciBHSVRfUEFHRVIKKwkpICYmCisJdGVzdCAtbiAiJGxlc3MiCisnCisKK2lmIGV4cHIgIiRsZXNzIiA6ICdbYS16XVthLXpdKiQnID4vZGV2L251bGwKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgU0lNUExFUEFHRVIKK2ZpCmRpZmYgLS1naXQgYS90L2xpYi1wYXRjaC1tb2RlLnNoIGIvdC9saWItcGF0Y2gtbW9kZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmQ3NmJmCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItcGF0Y2gtbW9kZS5zaApAQCAtMCwwICsxLDUwIEBACis6IGluY2x1ZGVkIGZyb20gdDIwMTYgYW5kIG90aGVycworCisuIC4vdGVzdC1saWIuc2gKKworIyBzZXRfc3RhdGUgPHBhdGg+IDx3b3JrdHJlZS1jb250ZW50PiA8aW5kZXgtY29udGVudD4KKyMKKyMgUHJlcGFyZSB0aGUgY29udGVudCBmb3IgcGF0aCBpbiB3b3JrdHJlZSBhbmQgdGhlIGluZGV4IGFzIHNwZWNpZmllZC4KK3NldF9zdGF0ZSAoKSB7CisJZWNobyAiJDMiID4gIiQxIiAmJgorCWdpdCBhZGQgIiQxIiAmJgorCWVjaG8gIiQyIiA+ICIkMSIKK30KKworIyBzYXZlX3N0YXRlIDxwYXRoPgorIworIyBTYXZlIGluZGV4L3dvcmt0cmVlIGNvbnRlbnQgb2YgPHBhdGg+IGluIHRoZSBmaWxlcyBfd29ya3RyZWVfPHBhdGg+CisjIGFuZCBfaW5kZXhfPHBhdGg+CitzYXZlX3N0YXRlICgpIHsKKwlub3NsYXNoPSIkKGVjaG8gIiQxIiB8IHRyIC8gXykiICYmCisJY2F0ICIkMSIgPiBfd29ya3RyZWVfIiRub3NsYXNoIiAmJgorCWdpdCBzaG93IDoiJDEiID4gX2luZGV4XyIkbm9zbGFzaCIKK30KKworIyBzZXRfYW5kX3NhdmVfc3RhdGUgPHBhdGg+IDx3b3JrdHJlZS1jb250ZW50PiA8aW5kZXgtY29udGVudD4KK3NldF9hbmRfc2F2ZV9zdGF0ZSAoKSB7CisJc2V0X3N0YXRlICIkQCIgJiYKKwlzYXZlX3N0YXRlICIkMSIKK30KKworIyB2ZXJpZnlfc3RhdGUgPHBhdGg+IDxleHBlY3RlZC13b3JrdHJlZS1jb250ZW50PiA8ZXhwZWN0ZWQtaW5kZXgtY29udGVudD4KK3ZlcmlmeV9zdGF0ZSAoKSB7CisJdGVzdCAiJChjYXQgIiQxIikiID0gIiQyIiAmJgorCXRlc3QgIiQoZ2l0IHNob3cgOiIkMSIpIiA9ICIkMyIKK30KKworIyB2ZXJpZnlfc2F2ZWRfc3RhdGUgPHBhdGg+CisjCisjIENhbGwgdmVyaWZ5X3N0YXRlIHdpdGggZXhwZWN0ZWQgY29udGVudHMgZnJvbSB0aGUgbGFzdCBzYXZlX3N0YXRlCit2ZXJpZnlfc2F2ZWRfc3RhdGUgKCkgeworCW5vc2xhc2g9IiQoZWNobyAiJDEiIHwgdHIgLyBfKSIgJiYKKwl2ZXJpZnlfc3RhdGUgIiQxIiAiJChjYXQgX3dvcmt0cmVlXyIkbm9zbGFzaCIpIiAiJChjYXQgX2luZGV4XyIkbm9zbGFzaCIpIgorfQorCitzYXZlX2hlYWQgKCkgeworCWdpdCByZXYtcGFyc2UgSEVBRCA+IF9oZWFkCit9CisKK3ZlcmlmeV9zYXZlZF9oZWFkICgpIHsKKwl0ZXN0ICIkKGNhdCBfaGVhZCkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKK30KZGlmZiAtLWdpdCBhL3QvbGliLXByb3RvLWRpc2FibGUuc2ggYi90L2xpYi1wcm90by1kaXNhYmxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYmFiZTUKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1wcm90by1kaXNhYmxlLnNoCkBAIC0wLDAgKzEsMjIwIEBACisjIFRlc3Qgcm91dGluZXMgZm9yIGNoZWNraW5nIHByb3RvY29sIGRpc2FibGluZy4KKworIyBUZXN0IGNsb25lL2ZldGNoL3B1c2ggd2l0aCBHSVRfQUxMT1dfUFJPVE9DT0wgd2hpdGVsaXN0Cit0ZXN0X3doaXRlbGlzdCAoKSB7CisJZGVzYz0kMQorCXByb3RvPSQyCisJdXJsPSQzCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSAkZGVzYyAoZW5hYmxlZCkiICcKKwkJcm0gLXJmIHRtcC5naXQgJiYKKwkJKAorCQkJR0lUX0FMTE9XX1BST1RPQ09MPSRwcm90byAmJgorCQkJZXhwb3J0IEdJVF9BTExPV19QUk9UT0NPTCAmJgorCQkJZ2l0IGNsb25lIC0tYmFyZSAiJHVybCIgdG1wLmdpdAorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggJGRlc2MgKGVuYWJsZWQpIiAnCisJCSgKKwkJCWNkIHRtcC5naXQgJiYKKwkJCUdJVF9BTExPV19QUk9UT0NPTD0kcHJvdG8gJiYKKwkJCWV4cG9ydCBHSVRfQUxMT1dfUFJPVE9DT0wgJiYKKwkJCWdpdCBmZXRjaAorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicHVzaCAkZGVzYyAoZW5hYmxlZCkiICcKKwkJKAorCQkJY2QgdG1wLmdpdCAmJgorCQkJR0lUX0FMTE9XX1BST1RPQ09MPSRwcm90byAmJgorCQkJZXhwb3J0IEdJVF9BTExPV19QUk9UT0NPTCAmJgorCQkJZ2l0IHB1c2ggb3JpZ2luIEhFQUQ6cHVzaGVkCisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJwdXNoICRkZXNjIChkaXNhYmxlZCkiICcKKwkJKAorCQkJY2QgdG1wLmdpdCAmJgorCQkJR0lUX0FMTE9XX1BST1RPQ09MPW5vbmUgJiYKKwkJCWV4cG9ydCBHSVRfQUxMT1dfUFJPVE9DT0wgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIG9yaWdpbiBIRUFEOnB1c2hlZAorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggJGRlc2MgKGRpc2FibGVkKSIgJworCQkoCisJCQljZCB0bXAuZ2l0ICYmCisJCQlHSVRfQUxMT1dfUFJPVE9DT0w9bm9uZSAmJgorCQkJZXhwb3J0IEdJVF9BTExPV19QUk9UT0NPTCAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoCisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSAkZGVzYyAoZGlzYWJsZWQpIiAnCisJCXJtIC1yZiB0bXAuZ2l0ICYmCisJCSgKKwkJCUdJVF9BTExPV19QUk9UT0NPTD1ub25lICYmCisJCQlleHBvcnQgR0lUX0FMTE9XX1BST1RPQ09MICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1iYXJlICIkdXJsIiB0bXAuZ2l0CisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSAkZGVzYyAoZW52IHZhciBoYXMgcHJlY2VkZW5jZSkiICcKKwkJcm0gLXJmIHRtcC5naXQgJiYKKwkJKAorCQkJR0lUX0FMTE9XX1BST1RPQ09MPW5vbmUgJiYKKwkJCWV4cG9ydCBHSVRfQUxMT1dfUFJPVE9DT0wgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBwcm90b2NvbC5hbGxvdz1hbHdheXMgY2xvbmUgLS1iYXJlICIkdXJsIiB0bXAuZ2l0ICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgcHJvdG9jb2wuJHByb3RvLmFsbG93PWFsd2F5cyBjbG9uZSAtLWJhcmUgIiR1cmwiIHRtcC5naXQKKwkJKQorCScKK30KKwordGVzdF9jb25maWcgKCkgeworCWRlc2M9JDEKKwlwcm90bz0kMgorCXVybD0kMworCisJIyBUZXN0IGNsb25lL2ZldGNoL3B1c2ggd2l0aCBwcm90b2NvbC48dHlwZT4uYWxsb3cgY29uZmlnCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgJGRlc2MgKGVuYWJsZWQgd2l0aCBjb25maWcpIiAnCisJCXJtIC1yZiB0bXAuZ2l0ICYmCisJCWdpdCAtYyBwcm90b2NvbC4kcHJvdG8uYWxsb3c9YWx3YXlzIGNsb25lIC0tYmFyZSAiJHVybCIgdG1wLmdpdAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoICRkZXNjIChlbmFibGVkKSIgJworCQlnaXQgLUMgdG1wLmdpdCAtYyBwcm90b2NvbC4kcHJvdG8uYWxsb3c9YWx3YXlzIGZldGNoCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicHVzaCAkZGVzYyAoZW5hYmxlZCkiICcKKwkJZ2l0IC1DIHRtcC5naXQgLWMgcHJvdG9jb2wuJHByb3RvLmFsbG93PWFsd2F5cyAgcHVzaCBvcmlnaW4gSEVBRDpwdXNoZWQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJwdXNoICRkZXNjIChkaXNhYmxlZCkiICcKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHRtcC5naXQgLWMgcHJvdG9jb2wuJHByb3RvLmFsbG93PW5ldmVyIHB1c2ggb3JpZ2luIEhFQUQ6cHVzaGVkCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggJGRlc2MgKGRpc2FibGVkKSIgJworCQl0ZXN0X211c3RfZmFpbCBnaXQgLUMgdG1wLmdpdCAtYyBwcm90b2NvbC4kcHJvdG8uYWxsb3c9bmV2ZXIgZmV0Y2gKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSAkZGVzYyAoZGlzYWJsZWQpIiAnCisJCXJtIC1yZiB0bXAuZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBwcm90b2NvbC4kcHJvdG8uYWxsb3c9bmV2ZXIgY2xvbmUgLS1iYXJlICIkdXJsIiB0bXAuZ2l0CisJJworCisJIyBUZXN0IGNsb25lL2ZldGNoL3B1c2ggd2l0aCBwcm90b2NvbC51c2VyLmFsbG93IGFuZCBpdHMgZW52IHZhcgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lICRkZXNjIChlbmFibGVkKSIgJworCQlybSAtcmYgdG1wLmdpdCAmJgorCQlnaXQgLWMgcHJvdG9jb2wuJHByb3RvLmFsbG93PXVzZXIgY2xvbmUgLS1iYXJlICIkdXJsIiB0bXAuZ2l0CisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggJGRlc2MgKGVuYWJsZWQpIiAnCisJCWdpdCAtQyB0bXAuZ2l0IC1jIHByb3RvY29sLiRwcm90by5hbGxvdz11c2VyIGZldGNoCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicHVzaCAkZGVzYyAoZW5hYmxlZCkiICcKKwkJZ2l0IC1DIHRtcC5naXQgLWMgcHJvdG9jb2wuJHByb3RvLmFsbG93PXVzZXIgcHVzaCBvcmlnaW4gSEVBRDpwdXNoZWQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJwdXNoICRkZXNjIChkaXNhYmxlZCkiICcKKwkJKAorCQkJY2QgdG1wLmdpdCAmJgorCQkJR0lUX1BST1RPQ09MX0ZST01fVVNFUj0wICYmCisJCQlleHBvcnQgR0lUX1BST1RPQ09MX0ZST01fVVNFUiAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHByb3RvY29sLiRwcm90by5hbGxvdz11c2VyIHB1c2ggb3JpZ2luIEhFQUQ6cHVzaGVkCisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCAkZGVzYyAoZGlzYWJsZWQpIiAnCisJCSgKKwkJCWNkIHRtcC5naXQgJiYKKwkJCUdJVF9QUk9UT0NPTF9GUk9NX1VTRVI9MCAmJgorCQkJZXhwb3J0IEdJVF9QUk9UT0NPTF9GUk9NX1VTRVIgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBwcm90b2NvbC4kcHJvdG8uYWxsb3c9dXNlciBmZXRjaAorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgJGRlc2MgKGRpc2FibGVkKSIgJworCQlybSAtcmYgdG1wLmdpdCAmJgorCQkoCisJCQlHSVRfUFJPVE9DT0xfRlJPTV9VU0VSPTAgJiYKKwkJCWV4cG9ydCBHSVRfUFJPVE9DT0xfRlJPTV9VU0VSICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgcHJvdG9jb2wuJHByb3RvLmFsbG93PXVzZXIgY2xvbmUgLS1iYXJlICIkdXJsIiB0bXAuZ2l0CisJCSkKKwknCisKKwkjIFRlc3QgY2xvbmUvZmV0Y2gvcHVzaCB3aXRoIHByb3RvY29sLmFsbG93IHVzZXIgZGVmaW5lZCBkZWZhdWx0CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgJGRlc2MgKGVuYWJsZWQpIiAnCisJCXJtIC1yZiB0bXAuZ2l0ICYmCisJCXRlc3RfY29uZmlnX2dsb2JhbCBwcm90b2NvbC5hbGxvdyBhbHdheXMgJiYKKwkJZ2l0IGNsb25lIC0tYmFyZSAiJHVybCIgdG1wLmdpdAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoICRkZXNjIChlbmFibGVkKSIgJworCQl0ZXN0X2NvbmZpZ19nbG9iYWwgcHJvdG9jb2wuYWxsb3cgYWx3YXlzICYmCisJCWdpdCAtQyB0bXAuZ2l0IGZldGNoCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicHVzaCAkZGVzYyAoZW5hYmxlZCkiICcKKwkJdGVzdF9jb25maWdfZ2xvYmFsIHByb3RvY29sLmFsbG93IGFsd2F5cyAmJgorCQlnaXQgLUMgdG1wLmdpdCBwdXNoIG9yaWdpbiBIRUFEOnB1c2hlZAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInB1c2ggJGRlc2MgKGRpc2FibGVkKSIgJworCQl0ZXN0X2NvbmZpZ19nbG9iYWwgcHJvdG9jb2wuYWxsb3cgbmV2ZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHRtcC5naXQgcHVzaCBvcmlnaW4gSEVBRDpwdXNoZWQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCAkZGVzYyAoZGlzYWJsZWQpIiAnCisJCXRlc3RfY29uZmlnX2dsb2JhbCBwcm90b2NvbC5hbGxvdyBuZXZlciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgLUMgdG1wLmdpdCBmZXRjaAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lICRkZXNjIChkaXNhYmxlZCkiICcKKwkJcm0gLXJmIHRtcC5naXQgJiYKKwkJdGVzdF9jb25maWdfZ2xvYmFsIHByb3RvY29sLmFsbG93IG5ldmVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLWJhcmUgIiR1cmwiIHRtcC5naXQKKwknCit9CisKKyMgdGVzdCBjbG9uaW5nIGEgcGFydGljdWxhciBwcm90b2NvbAorIyAgICQxIC0gZGVzY3JpcHRpb24gb2YgdGhlIHByb3RvY29sCisjICAgJDIgLSBtYWNoaW5lLXJlYWRhYmxlIG5hbWUgb2YgdGhlIHByb3RvY29sCisjICAgJDMgLSB0aGUgVVJMIHRvIHRyeSBjbG9uaW5nCit0ZXN0X3Byb3RvICgpIHsKKwl0ZXN0X3doaXRlbGlzdCAiJEAiCisKKwl0ZXN0X2NvbmZpZyAiJEAiCit9CisKKyMgc2V0IHVwIGFuIHNzaCB3cmFwcGVyIHRoYXQgd2lsbCBhY2Nlc3MgJGhvc3QvJHJlcG8gaW4gdGhlCisjIHRyYXNoIGRpcmVjdG9yeSwgYW5kIGVuYWJsZSBpdCBmb3Igc3Vic2VxdWVudCB0ZXN0cy4KK3NldHVwX3NzaF93cmFwcGVyICgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzc2ggd3JhcHBlcicgJworCQl3cml0ZV9zY3JpcHQgc3NoLXdyYXBwZXIgPDwtXEVPRiAmJgorCQllY2hvID4mMiAic3NoOiAkKiIKKwkJaG9zdD0kMTsgc2hpZnQKKwkJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvJGhvc3QiICYmCisJCWV2YWwgIiQqIgorCQlFT0YKKwkJR0lUX1NTSD0iJFBXRC9zc2gtd3JhcHBlciIgJiYKKwkJZXhwb3J0IEdJVF9TU0ggJiYKKwkJZXhwb3J0IFRSQVNIX0RJUkVDVE9SWQorCScKK30KKworIyBzZXQgdXAgYSB3cmFwcGVyIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCByZW1vdGUtZXh0IHRvCisjIGFjY2VzcyByZXBvc2l0b3JpZXMgaW4gdGhlICJyZW1vdGUiIGRpcmVjdG9yeSBvZiB0cmFzaC1kaXIsCisjIGxpa2UgImV4dDo6ZmFrZS1yZW1vdGUgJVMgcmVwby5naXQiCitzZXR1cF9leHRfd3JhcHBlciAoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXh0IHdyYXBwZXInICcKKwkJd3JpdGVfc2NyaXB0IGZha2UtcmVtb3RlIDw8LVxFT0YgJiYKKwkJZWNobyA+JjIgImZha2UtcmVtb3RlOiAkKiIKKwkJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvcmVtb3RlIiAmJgorCQlldmFsICIkKiIKKwkJRU9GCisJCVBBVEg9JFRSQVNIX0RJUkVDVE9SWTokUEFUSCAmJgorCQlleHBvcnQgVFJBU0hfRElSRUNUT1JZCisJJworfQpkaWZmIC0tZ2l0IGEvdC9saWItcmVhZC10cmVlLW0tM3dheS5zaCBiL3QvbGliLXJlYWQtdHJlZS1tLTN3YXkuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY4MzI5YQotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLXJlYWQtdHJlZS1tLTN3YXkuc2gKQEAgLTAsMCArMSwxNTggQEAKKzogSW5jbHVkZWQgZnJvbSB0MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoIGFuZCBvdGhlcnMKKyMgT3JpZ2luYWwgdHJlZS4KK21rZGlyIFoKK2ZvciBhIGluIE4gRCBNCitkbworICAgIGZvciBiIGluIE4gRCBNCisgICAgZG8KKyAgICAgICAgcD0kYSRiCisJZWNobyBUaGlzIGlzICRwIGZyb20gdGhlIG9yaWdpbmFsIHRyZWUuID4kcAorCWVjaG8gVGhpcyBpcyBaLyRwIGZyb20gdGhlIG9yaWdpbmFsIHRyZWUuID5aLyRwCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJICAgICJhZGRpbmcgdGVzdCBmaWxlICRwIGFuZCBaLyRwIiBcCisJICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkICRwICYmCisJICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgWi8kcCcKKyAgICBkb25lCitkb25lCitlY2hvIFRoaXMgaXMgU1MgZnJvbSB0aGUgb3JpZ2luYWwgdHJlZS4gPlNTCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYWRkaW5nIHRlc3QgZmlsZSBTUycgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIFNTJworY2F0ID5UVCA8PFxFT0YKK1RoaXMgaXMgYSB0cml2aWFsIG1lcmdlIHNhbXBsZSB0ZXh0LgorQnJhbmNoIEEgaXMgZXhwZWN0ZWQgdG8gdXBjYXNlIHRoaXMgd29yZCwgaGVyZS4KK1RoZXJlIGFyZSBzb21lIGZpbGxlciBsaW5lcyB0byBhdm9pZCBkaWZmIGNvbnRleHQKK2NvbmZsaWN0cyBoZXJlLAorbGlrZSB0aGlzIG9uZSwKK2FuZCB0aGlzIG9uZSwKK2FuZCB0aGlzIG9uZSBpcyB5ZXQgYW5vdGhlciBvbmUgb2YgdGhlbS4KK0F0IHRoZSB2ZXJ5IGVuZCwgaGVyZSBjb21lcyBhbm90aGVyIGxpbmUsIHRoYXQgaXMKK3RoZSB3b3JkLCBleHBlY3RlZCB0byBiZSB1cGNhc2VkIGJ5IEJyYW5jaCBCLgorVGhpcyBjb25jbHVkZXMgdGhlIHRyaXZpYWwgbWVyZ2Ugc2FtcGxlIGZpbGUuCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhZGRpbmcgdGVzdCBmaWxlIFRUJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgVFQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSBpbml0aWFsIHRyZWUnIFwKKyAgICAndHJlZV9PPSQoZ2l0IHdyaXRlLXRyZWUpJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYW5jaCBBIGFuZCBCIG1ha2VzIHRoZSBjaGFuZ2VzIGFjY29yZGluZyB0byB0aGUgYWJvdmUgbWF0cml4LgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYW5jaCBBCisKK3RvX3JlbW92ZT0kKGVjaG8gRD8gWi9EPykKK3JtIC1mICR0b19yZW1vdmUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGFuZ2UgaW4gYnJhbmNoIEEgKHJlbW92YWwpJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgJHRvX3JlbW92ZScKKworZm9yIHAgaW4gTT8gWi9NPworZG8KKyAgICBlY2hvIFRoaXMgaXMgbW9kaWZpZWQgJHAgaW4gdGhlIGJyYW5jaCBBLiA+JHAKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY2hhbmdlIGluIGJyYW5jaCBBIChtb2RpZmljYXRpb24pJyBcCisgICAgICAgICJnaXQgdXBkYXRlLWluZGV4ICRwIgorZG9uZQorCitmb3IgcCBpbiBBTiBBQSBaL0FOIFovQUEKK2RvCisgICAgZWNobyBUaGlzIGlzIGFkZGVkICRwIGluIHRoZSBicmFuY2ggQS4gPiRwCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoYW5nZSBpbiBicmFuY2ggQSAoYWRkaXRpb24pJyBcCisJImdpdCB1cGRhdGUtaW5kZXggLS1hZGQgJHAiCitkb25lCisKK2VjaG8gVGhpcyBpcyBTUyBmcm9tIHRoZSBtb2RpZmllZCB0cmVlLiA+U1MKK2VjaG8gVGhpcyBpcyBMTCBmcm9tIHRoZSBtb2RpZmllZCB0cmVlLiA+TEwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGFuZ2UgaW4gYnJhbmNoIEEgKGFkZGl0aW9uKScgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIExMICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggU1MnCittdiBUVCBUVC0KK3NlZCAtZSAnL0JyYW5jaCBBL3Mvd29yZC9XT1JEL2cnIDxUVC0gPlRUCitybSAtZiBUVC0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGFuZ2UgaW4gYnJhbmNoIEEgKGVkaXQpJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggVFQnCisKK21rZGlyIERGCitlY2hvIEJyYW5jaCBBIG1ha2VzIGEgZmlsZSBhdCBERi9ERiwgY3JlYXRpbmcgYSBkaXJlY3RvcnkgREYuID5ERi9ERgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoYW5nZSBpbiBicmFuY2ggQSAoY2hhbmdlIGZpbGUgdG8gZGlyZWN0b3J5KScgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIERGL0RGJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncmVjb3JkaW5nIGJyYW5jaCBBIHRyZWUnIFwKKyAgICAndHJlZV9BPSQoZ2l0IHdyaXRlLXRyZWUpJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYW5jaCBCCisjIFN0YXJ0IGZyb20gTworCitybSAtcmYgW05ETUFTTFRdW05ETUFTTFRdIFogREYKK21rZGlyIFoKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdyZWFkaW5nIG9yaWdpbmFsIHRyZWUgYW5kIGNoZWNraW5nIG91dCcgXAorICAgICdnaXQgcmVhZC10cmVlICR0cmVlX08gJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC1hJworCit0b19yZW1vdmU9JChlY2hvID9EIFovP0QpCitybSAtZiAkdG9fcmVtb3ZlCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hhbmdlIGluIGJyYW5jaCBCIChyZW1vdmFsKScgXAorICAgICJnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlICR0b19yZW1vdmUiCisKK2ZvciBwIGluID9NIFovP00KK2RvCisgICAgZWNobyBUaGlzIGlzIG1vZGlmaWVkICRwIGluIHRoZSBicmFuY2ggQi4gPiRwCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoYW5nZSBpbiBicmFuY2ggQiAobW9kaWZpY2F0aW9uKScgXAorCSJnaXQgdXBkYXRlLWluZGV4ICRwIgorZG9uZQorCitmb3IgcCBpbiBOQSBBQSBaL05BIFovQUEKK2RvCisgICAgZWNobyBUaGlzIGlzIGFkZGVkICRwIGluIHRoZSBicmFuY2ggQi4gPiRwCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoYW5nZSBpbiBicmFuY2ggQiAoYWRkaXRpb24pJyBcCisJImdpdCB1cGRhdGUtaW5kZXggLS1hZGQgJHAiCitkb25lCitlY2hvIFRoaXMgaXMgU1MgZnJvbSB0aGUgbW9kaWZpZWQgdHJlZS4gPlNTCitlY2hvIFRoaXMgaXMgTEwgZnJvbSB0aGUgbW9kaWZpZWQgdHJlZS4gPkxMCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hhbmdlIGluIGJyYW5jaCBCIChhZGRpdGlvbiBhbmQgbW9kaWZpY2F0aW9uKScgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIExMICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggU1MnCittdiBUVCBUVC0KK3NlZCAtZSAnL0JyYW5jaCBCL3Mvd29yZC9XT1JEL2cnIDxUVC0gPlRUCitybSAtZiBUVC0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGFuZ2UgaW4gYnJhbmNoIEIgKG1vZGlmaWNhdGlvbiknIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCBUVCcKKworZWNobyBCcmFuY2ggQiBtYWtlcyBhIGZpbGUgYXQgREYuID5ERgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoYW5nZSBpbiBicmFuY2ggQiAoYWRkaXRpb24gb2YgYSBmaWxlIHRvIGNvbmZsaWN0IHdpdGggZGlyZWN0b3J5KScgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIERGJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncmVjb3JkaW5nIGJyYW5jaCBCIHRyZWUnIFwKKyAgICAndHJlZV9CPSQoZ2l0IHdyaXRlLXRyZWUpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAna2VlcCBjb250ZW50cyBvZiAzIHRyZWVzIGZvciBlYXN5IGFjY2VzcycgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIGdpdCByZWFkLXRyZWUgJHRyZWVfTyAmJgorICAgICBta2RpciAub3JpZy1PICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD0ub3JpZy1PLyAtZiAtcSAtYSAmJgorICAgICBybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIGdpdCByZWFkLXRyZWUgJHRyZWVfQSAmJgorICAgICBta2RpciAub3JpZy1BICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD0ub3JpZy1BLyAtZiAtcSAtYSAmJgorICAgICBybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIGdpdCByZWFkLXRyZWUgJHRyZWVfQiAmJgorICAgICBta2RpciAub3JpZy1CICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD0ub3JpZy1CLyAtZiAtcSAtYScKZGlmZiAtLWdpdCBhL3QvbGliLXJlYWQtdHJlZS5zaCBiL3QvbGliLXJlYWQtdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTVmNDg1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItcmVhZC10cmVlLnNoCkBAIC0wLDAgKzEsNDEgQEAKKyMgSGVscGVyIGZ1bmN0aW9ucyB0byBjaGVjayBpZiByZWFkLXRyZWUgd291bGQgc3VjY2VlZC9mYWlsIGFzIGV4cGVjdGVkIHdpdGgKKyMgYW5kIHdpdGhvdXQgdGhlIGRyeS1ydW4gb3B0aW9uLiBUaGV5IGFsc28gdGVzdCB0aGF0IHRoZSBkcnktcnVuIGRvZXMgbm90CisjIHdyaXRlIHRoZSBpbmRleCBhbmQgdGhhdCB0b2dldGhlciB3aXRoIC11IGl0IGRvZXNuJ3QgdG91Y2ggdGhlIHdvcmsgdHJlZS4KKyMKK3JlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgKCkgeworCWdpdCBscy1maWxlcyAtcyA+cHJlLWRyeS1ydW4gJiYKKwlnaXQgcmVhZC10cmVlIC1uICIkQCIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPnBvc3QtZHJ5LXJ1biAmJgorCXRlc3RfY21wIHByZS1kcnktcnVuIHBvc3QtZHJ5LXJ1biAmJgorCWdpdCByZWFkLXRyZWUgIiRAIgorfQorCityZWFkX3RyZWVfbXVzdF9mYWlsICgpIHsKKwlnaXQgbHMtZmlsZXMgLXMgPnByZS1kcnktcnVuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAtbiAiJEAiICYmCisJZ2l0IGxzLWZpbGVzIC1zID5wb3N0LWRyeS1ydW4gJiYKKwl0ZXN0X2NtcCBwcmUtZHJ5LXJ1biBwb3N0LWRyeS1ydW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVhZC10cmVlICIkQCIKK30KKworcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkICgpIHsKKwlnaXQgbHMtZmlsZXMgLXMgPnByZS1kcnktcnVuICYmCisJZ2l0IGRpZmYtZmlsZXMgLXAgPnByZS1kcnktcnVuLXd0ICYmCisJZ2l0IHJlYWQtdHJlZSAtbiAiJEAiICYmCisJZ2l0IGxzLWZpbGVzIC1zID5wb3N0LWRyeS1ydW4gJiYKKwlnaXQgZGlmZi1maWxlcyAtcCA+cG9zdC1kcnktcnVuLXd0ICYmCisJdGVzdF9jbXAgcHJlLWRyeS1ydW4gcG9zdC1kcnktcnVuICYmCisJdGVzdF9jbXAgcHJlLWRyeS1ydW4td3QgcG9zdC1kcnktcnVuLXd0ICYmCisJZ2l0IHJlYWQtdHJlZSAiJEAiCit9CisKK3JlYWRfdHJlZV91X211c3RfZmFpbCAoKSB7CisJZ2l0IGxzLWZpbGVzIC1zID5wcmUtZHJ5LXJ1biAmJgorCWdpdCBkaWZmLWZpbGVzIC1wID5wcmUtZHJ5LXJ1bi13dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgLW4gIiRAIiAmJgorCWdpdCBscy1maWxlcyAtcyA+cG9zdC1kcnktcnVuICYmCisJZ2l0IGRpZmYtZmlsZXMgLXAgPnBvc3QtZHJ5LXJ1bi13dCAmJgorCXRlc3RfY21wIHByZS1kcnktcnVuIHBvc3QtZHJ5LXJ1biAmJgorCXRlc3RfY21wIHByZS1kcnktcnVuLXd0IHBvc3QtZHJ5LXJ1bi13dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgIiRAIgorfQpkaWZmIC0tZ2l0IGEvdC9saWItcmViYXNlLnNoIGIvdC9saWItcmViYXNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MmMwNTEKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1yZWJhc2Uuc2gKQEAgLTAsMCArMSwxNDkgQEAKKyMgSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IGludGVyYWN0aXZlIHJlYmFzZSB0ZXN0cy4KKworIyBBZnRlciBzZXR0aW5nIHRoZSBmYWtlIGVkaXRvciB3aXRoIHRoaXMgZnVuY3Rpb24sIHlvdSBjYW4KKyMKKyMgLSBvdmVycmlkZSB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aCAkRkFLRV9DT01NSVRfTUVTU0FHRQorIyAtIGFtZW5kIHRoZSBjb21taXQgbWVzc2FnZSB3aXRoICRGQUtFX0NPTU1JVF9BTUVORAorIyAtIGNoZWNrIHRoYXQgbm9uLWNvbW1pdCBtZXNzYWdlcyBoYXZlIGEgY2VydGFpbiBsaW5lIGNvdW50IHdpdGggJEVYUEVDVF9DT1VOVAorIyAtIGNoZWNrIHRoZSBjb21taXQgY291bnQgaW4gdGhlIGNvbW1pdCBtZXNzYWdlIGhlYWRlciB3aXRoICRFWFBFQ1RfSEVBREVSX0NPVU5UCisjIC0gcmV3cml0ZSBhIHJlYmFzZSAtaSBzY3JpcHQgYXMgZGlyZWN0ZWQgYnkgJEZBS0VfTElORVMuCisjICAgJEZBS0VfTElORVMgY29uc2lzdHMgb2YgYSBzZXF1ZW5jZSBvZiB3b3JkcyBzZXBhcmF0ZWQgYnkgc3BhY2VzLgorIyAgIFRoZSBmb2xsb3dpbmcgd29yZCBjb21iaW5hdGlvbnMgYXJlIHBvc3NpYmxlOgorIworIyAgICI8bGluZW5vPiIgLS0gYWRkIGEgInBpY2siIGxpbmUgd2l0aCB0aGUgU0hBMSB0YWtlbiBmcm9tIHRoZQorIyAgICAgICBzcGVjaWZpZWQgbGluZS4KKyMKKyMgICAiPGNtZD4gPGxpbmVubz4iIC0tIGFkZCBhIGxpbmUgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbW1hbmQKKyMgICAgICAgKCJwaWNrIiwgInNxdWFzaCIsICJmaXh1cCIsICJlZGl0IiwgInJld29yZCIgb3IgImRyb3AiKSBhbmQgdGhlCisjICAgICAgIFNIQTEgdGFrZW4gZnJvbSB0aGUgc3BlY2lmaWVkIGxpbmUuCisjCisjICAgImV4ZWNfY21kX3dpdGhfYXJncyIgLS0gYWRkIGFuICJleGVjIGNtZCB3aXRoIGFyZ3MiIGxpbmUuCisjCisjICAgIiMiIC0tIEFkZCBhIGNvbW1lbnQgbGluZS4KKyMKKyMgICAiPiIgLS0gQWRkIGEgYmxhbmsgbGluZS4KKworc2V0X2Zha2VfZWRpdG9yICgpIHsKKwl3cml0ZV9zY3JpcHQgZmFrZS1lZGl0b3Iuc2ggPDwtXEVPRgorCWNhc2UgIiQxIiBpbgorCSovQ09NTUlUX0VESVRNU0cpCisJCXRlc3QgLXogIiRFWFBFQ1RfSEVBREVSX0NPVU5UIiB8fAorCQkJdGVzdCAiJEVYUEVDVF9IRUFERVJfQ09VTlQiID0gIiQoc2VkIC1uICcxcy9eIyBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgXCguKlwpIGNvbW1pdHNcLi9cMS9wJyA8ICIkMSIpIiB8fAorCQkJdGVzdCAiIyAjIEdFVFRFWFQgUE9JU09OICMiID0gIiQoc2VkIC1uICcxcCcgPCAiJDEiKSIgfHwKKwkJCWV4aXQKKwkJdGVzdCAteiAiJEZBS0VfQ09NTUlUX01FU1NBR0UiIHx8IGVjaG8gIiRGQUtFX0NPTU1JVF9NRVNTQUdFIiA+ICIkMSIKKwkJdGVzdCAteiAiJEZBS0VfQ09NTUlUX0FNRU5EIiB8fCBlY2hvICIkRkFLRV9DT01NSVRfQU1FTkQiID4+ICIkMSIKKwkJZXhpdAorCQk7OworCWVzYWMKKwl0ZXN0IC16ICIkRVhQRUNUX0NPVU5UIiB8fAorCQl0ZXN0ICIkRVhQRUNUX0NPVU5UIiA9ICQoc2VkIC1lICcvXiMvZCcgLWUgJy9eJC9kJyA8ICIkMSIgfCB3YyAtbCkgfHwKKwkJZXhpdAorCXRlc3QgLXogIiRGQUtFX0xJTkVTIiAmJiBleGl0CisJZ3JlcCAtdiAnXiMnIDwgIiQxIiA+ICIkMSIudG1wCisJcm0gLWYgIiQxIgorCWVjaG8gJ3JlYmFzZSAtaSBzY3JpcHQgYmVmb3JlIGVkaXRpbmc6JworCWNhdCAiJDEiLnRtcAorCWFjdGlvbj1cJgorCWZvciBsaW5lIGluICRGQUtFX0xJTkVTOyBkbworCQljYXNlICRsaW5lIGluCisJCXBpY2t8cHxzcXVhc2h8c3xmaXh1cHxmfGVkaXR8ZXxyZXdvcmR8cnxkcm9wfGR8bGFiZWx8bHxyZXNldHxyfG1lcmdlfG0pCisJCQlhY3Rpb249IiRsaW5lIjs7CisJCWV4ZWNfKnx4Xyp8YnJlYWt8YikKKwkJCWVjaG8gIiRsaW5lIiB8IHNlZCAncy9fLyAvZycgPj4gIiQxIjs7CisJCSIjIikKKwkJCWVjaG8gJyMgY29tbWVudCcgPj4gIiQxIjs7CisJCSI+IikKKwkJCWVjaG8gPj4gIiQxIjs7CisJCWJhZCkKKwkJCWFjdGlvbj0iYmFkY21kIjs7CisJCWZha2VzaGEpCisJCQl0ZXN0IFwmICE9ICIkYWN0aW9uIiB8fCBhY3Rpb249cGljaworCQkJZWNobyAiJGFjdGlvbiBYWFhYWFhYIEZhbHNlIGNvbW1pdCIgPj4gIiQxIgorCQkJYWN0aW9uPXBpY2s7OworCQkqKQorCQkJc2VkIC1uICIke2xpbmV9cy9eW2Etel1bYS16XSovJGFjdGlvbi9wIiA8ICIkMSIudG1wID4+ICIkMSIKKwkJCWFjdGlvbj1cJjs7CisJCWVzYWMKKwlkb25lCisJZWNobyAncmViYXNlIC1pIHNjcmlwdCBhZnRlciBlZGl0aW5nOicKKwljYXQgIiQxIgorCUVPRgorCisJdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvZmFrZS1lZGl0b3Iuc2giCit9CisKKyMgQWZ0ZXIgc2V0X2NhdF90b2RvX2VkaXRvciwgcmViYXNlIC1pIHdpbGwgd3JpdGUgdGhlIHRvZG8gbGlzdCAoaWdub3JpbmcKKyMgYmxhbmsgbGluZXMgYW5kIGNvbW1lbnRzKSB0byBzdGRvdXQsIGFuZCBleGl0IGZhaWx1cmUgKHNvIHlvdSBzaG91bGQgcnVuCisjIGl0IHdpdGggdGVzdF9tdXN0X2ZhaWwpLiAgVGhpcyBjYW4gYmUgdXNlZCB0byB2ZXJpZnkgdGhlIGV4cGVjdGVkIHVzZXIKKyMgZXhwZXJpZW5jZSwgZm9yIHRvZG8gbGlzdCBjaGFuZ2VzIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgb3V0Y29tZSBvZgorIyByZWJhc2U7IG9yIGFzIGFuIGV4dHJhIGNoZWNrIGluIGFkZGl0aW9uIHRvIGNoZWNraW5nIHRoZSBvdXRjb21lLgorCitzZXRfY2F0X3RvZG9fZWRpdG9yICgpIHsKKwl3cml0ZV9zY3JpcHQgZmFrZS1lZGl0b3Iuc2ggPDwtXEVPRgorCWdyZXAgIl5bXiNdIiAiJDEiCisJZXhpdCAxCisJRU9GCisJdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvZmFrZS1lZGl0b3Iuc2giCit9CisKKyMgY2hlY2tzIHRoYXQgdGhlIHJldmlzaW9ucyBpbiAiJDIiIHJlcHJlc2VudCBhIGxpbmVhciByYW5nZSB3aXRoIHRoZQorIyBzdWJqZWN0cyBpbiAiJDEiCit0ZXN0X2xpbmVhcl9yYW5nZSAoKSB7CisJcmV2bGlzdF9tZXJnZXM9JChnaXQgcmV2LWxpc3QgLS1tZXJnZXMgIiQyIikgJiYKKwl0ZXN0IC16ICIkcmV2bGlzdF9tZXJnZXMiICYmCisJZXhwZWN0ZWQ9JDEKKwlzZXQgLS0gJChnaXQgbG9nIC0tcmV2ZXJzZSAtLWZvcm1hdD0lcyAiJDIiKQorCXRlc3QgIiRleHBlY3RlZCIgPSAiJCoiCit9CisKK3Jlc2V0X3JlYmFzZSAoKSB7CisJdGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2xlYW4gLWYKK30KKworY2hlcnJ5X3BpY2sgKCkgeworCWdpdCBjaGVycnktcGljayAtbiAiJDIiICYmCisJZ2l0IGNvbW1pdCAtbSAiJDEiICYmCisJZ2l0IHRhZyAiJDEiCit9CisKK3JldmVydCAoKSB7CisJZ2l0IHJldmVydCAtbiAiJDIiICYmCisJZ2l0IGNvbW1pdCAtbSAiJDEiICYmCisJZ2l0IHRhZyAiJDEiCit9CisKK21ha2VfZW1wdHkgKCkgeworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiJDEiICYmCisJZ2l0IHRhZyAiJDEiCit9CisKKyMgQ2FsbCB0aGlzIChpbnNpZGUgdGVzdF9leHBlY3Rfc3VjY2VzcykgYXQgdGhlIGVuZCBvZiBhIHRlc3QgZmlsZSB0bworIyBjaGVjayB0aGF0IG5vIHRlc3RzIGhhdmUgY2hhbmdlZCBlZGl0b3IgcmVsYXRlZCBlbnZpcm9ubWVudAorIyB2YXJpYWJsZXMgb3IgY29uZmlnIHNldHRpbmdzCit0ZXN0X2VkaXRvcl91bmNoYW5nZWQgKCkgeworCSMgV2UncmUgb25seSBpbnRlcmVzdGVkIGluIGV4cG9ydGVkIHZhcmlhYmxlcyBoZW5jZSAnc2ggLWMnCisJc2ggLWMgJ2NhdCA+YWN0dWFsIDw8LUVPRgorCUVESVRPUj0kRURJVE9SCisJRkFLRV9DT01NSVRfQU1FTkQ9JEZBS0VfQ09NTUlUX0FNRU5ECisJRkFLRV9DT01NSVRfTUVTU0FHRT0kRkFLRV9DT01NSVRfTUVTU0FHRQorCUZBS0VfTElORVM9JEZBS0VfTElORVMKKwlHSVRfRURJVE9SPSRHSVRfRURJVE9SCisJR0lUX1NFUVVFTkNFX0VESVRPUj0kR0lUX1NFUVVFTkNFX0VESVRPUgorCWNvcmUuZWRpdG9yPSQoZ2l0IGNvbmZpZyBjb3JlLmVkaXRvcikKKwlzZXF1ZW5jZS5lZGl0b3I9JChnaXQgY29uZmlnIHNlcXVlbmNlLmVkaXRvcikKKwlFT0YnCisJY2F0ID5leHBlY3QgPDwtXEVPRgorCUVESVRPUj06CisJRkFLRV9DT01NSVRfQU1FTkQ9CisJRkFLRV9DT01NSVRfTUVTU0FHRT0KKwlGQUtFX0xJTkVTPQorCUdJVF9FRElUT1I9CisJR0lUX1NFUVVFTkNFX0VESVRPUj0KKwljb3JlLmVkaXRvcj0KKwlzZXF1ZW5jZS5lZGl0b3I9CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQpkaWZmIC0tZ2l0IGEvdC9saWItc3VibW9kdWxlLXVwZGF0ZS5zaCBiL3QvbGliLXN1Ym1vZHVsZS11cGRhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRmYzY0OAotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLXN1Ym1vZHVsZS11cGRhdGUuc2gKQEAgLTAsMCArMSwxMDY0IEBACisjIENyZWF0ZSBhIHN1Ym1vZHVsZSBsYXlvdXQgdXNlZCBmb3IgYWxsIHRlc3RzIGJlbG93LgorIworIyBUaGUgZm9sbG93aW5nIHVzZSBjYXNlcyBhcmUgY292ZXJlZDoKKyMgLSBOZXcgc3VibW9kdWxlIChub19zdWJtb2R1bGUgPT4gYWRkX3N1YjEpCisjIC0gUmVtb3ZlZCBzdWJtb2R1bGUgKGFkZF9zdWIxID0+IHJlbW92ZV9zdWIxKQorIyAtIFVwZGF0ZWQgc3VibW9kdWxlIChhZGRfc3ViMSA9PiBtb2RpZnlfc3ViMSkKKyMgLSBVcGRhdGVkIHN1Ym1vZHVsZSByZWN1cnNpdmVseSAoYWRkX25lc3RlZF9zdWIgPT4gbW9kaWZ5X3N1YjFfcmVjdXJzaXZlbHkpCisjIC0gU3VibW9kdWxlIHVwZGF0ZWQgdG8gaW52YWxpZCBjb21taXQgKGFkZF9zdWIxID0+IGludmFsaWRfc3ViMSkKKyMgLSBTdWJtb2R1bGUgdXBkYXRlZCBmcm9tIGludmFsaWQgY29tbWl0IChpbnZhbGlkX3N1YjEgPT4gdmFsaWRfc3ViMSkKKyMgLSBTdWJtb2R1bGUgcmVwbGFjZWQgYnkgdHJhY2tlZCBmaWxlcyBpbiBkaXJlY3RvcnkgKGFkZF9zdWIxID0+CisjICAgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5KQorIyAtIERpcmVjdG9yeSBjb250YWluaW5nIHRyYWNrZWQgZmlsZXMgcmVwbGFjZWQgYnkgc3VibW9kdWxlCisjICAgKHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSA9PiByZXBsYWNlX2RpcmVjdG9yeV93aXRoX3N1YjEpCisjIC0gU3VibW9kdWxlIHJlcGxhY2VkIGJ5IHRyYWNrZWQgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgKGFkZF9zdWIxID0+CisjICAgcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSkKKyMgLSBUcmFja2VkIGZpbGUgcmVwbGFjZWQgYnkgc3VibW9kdWxlIChyZXBsYWNlX3N1YjFfd2l0aF9maWxlID0+CisjICAgcmVwbGFjZV9maWxlX3dpdGhfc3ViMSkKKyMKKyMgICAgICAgICAgICAgICAgICAgICAtLS0tTworIyAgICAgICAgICAgICAgICAgICAgLyAgICBeCisjICAgICAgICAgICAgICAgICAgIC8gICAgIHJlbW92ZV9zdWIxCisjICAgICAgICAgICAgICAgICAgLworIyAgICAgICBhZGRfc3ViMSAgLy0tLS0tLS1PLS0tLS0tLS0tTy0tLS0tLS0tTyAgbW9kaWZ5X3N1YjFfcmVjdXJzaXZlbHkKKyMgICAgICAgICAgICAgfCAgLyAgICAgICAgXiAgICAgICAgIGFkZF9uZXN0ZWRfc3ViCisjICAgICAgICAgICAgIHwgLyAgICAgICAgIG1vZGlmeV9zdWIxCisjICAgICAgICAgICAgIHYvCisjICAgICAgTy0tLS0tLU8tLS0tLS0tLS0tLU8tLS0tLS0tLS1PCisjICAgICAgXiAgICAgICBcICAgICAgICAgIF4gICAgICAgICByZXBsYWNlX2RpcmVjdG9yeV93aXRoX3N1YjEKKyMgICAgICB8ICAgICAgICBcICAgICAgICAgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5CisjIG5vX3N1Ym1vZHVsZSAgIFwKKyMgICAgICAgICAgICAgICAgIC0tLS0tLS0tTy0tLS0tLS0tLU8KKyMgICAgICAgICAgICAgICAgICBcICAgICAgXiAgICAgICAgIHJlcGxhY2VfZmlsZV93aXRoX3N1YjEKKyMgICAgICAgICAgICAgICAgICAgXCAgICAgcmVwbGFjZV9zdWIxX3dpdGhfZmlsZQorIyAgICAgICAgICAgICAgICAgICAgXAorIyAgICAgICAgICAgICAgICAgICAgIC0tLS1PLS0tLS0tLS0tTworIyAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgdmFsaWRfc3ViMQorIyAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkX3N1YjEKKyMKKworY3JlYXRlX2xpYl9zdWJtb2R1bGVfcmVwbyAoKSB7CisJZ2l0IGluaXQgc3VibW9kdWxlX3VwZGF0ZV9zdWIxICYmCisJKAorCQljZCBzdWJtb2R1bGVfdXBkYXRlX3N1YjEgJiYKKwkJZWNobyAiZXhwZWN0IiA+Pi5naXRpZ25vcmUgJiYKKwkJZWNobyAiYWN0dWFsIiA+Pi5naXRpZ25vcmUgJiYKKwkJZWNobyAieCIgPmZpbGUxICYmCisJCWVjaG8gInkiID5maWxlMiAmJgorCQlnaXQgYWRkIC5naXRpZ25vcmUgZmlsZTEgZmlsZTIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQmFzZSBpbnNpZGUgZmlyc3Qgc3VibW9kdWxlIiAmJgorCQlnaXQgYnJhbmNoICJub19zdWJtb2R1bGUiCisJKSAmJgorCWdpdCBpbml0IHN1Ym1vZHVsZV91cGRhdGVfc3ViMiAmJgorCSgKKwkJY2Qgc3VibW9kdWxlX3VwZGF0ZV9zdWIyCisJCWVjaG8gImV4cGVjdCIgPj4uZ2l0aWdub3JlICYmCisJCWVjaG8gImFjdHVhbCIgPj4uZ2l0aWdub3JlICYmCisJCWVjaG8gIngiID5maWxlMSAmJgorCQllY2hvICJ5IiA+ZmlsZTIgJiYKKwkJZ2l0IGFkZCAuZ2l0aWdub3JlIGZpbGUxIGZpbGUyICYmCisJCWdpdCBjb21taXQgLW0gIm5lc3RlZCBzdWJtb2R1bGUgYmFzZSIgJiYKKwkJZ2l0IGJyYW5jaCAibm9fc3VibW9kdWxlIgorCSkgJiYKKwlnaXQgaW5pdCBzdWJtb2R1bGVfdXBkYXRlX3JlcG8gJiYKKwkoCisJCWNkIHN1Ym1vZHVsZV91cGRhdGVfcmVwbyAmJgorCQllY2hvICJleHBlY3QiID4+LmdpdGlnbm9yZSAmJgorCQllY2hvICJhY3R1YWwiID4+LmdpdGlnbm9yZSAmJgorCQllY2hvICJ4IiA+ZmlsZTEgJiYKKwkJZWNobyAieSIgPmZpbGUyICYmCisJCWdpdCBhZGQgLmdpdGlnbm9yZSBmaWxlMSBmaWxlMiAmJgorCQlnaXQgY29tbWl0IC1tICJCYXNlIiAmJgorCQlnaXQgYnJhbmNoICJub19zdWJtb2R1bGUiICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iICJhZGRfc3ViMSIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlX3VwZGF0ZV9zdWIxIHN1YjEgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlX3VwZGF0ZV9zdWIxIHVuaW5pdGlhbGl6ZWRfc3ViICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1YjEuaWdub3JlIGFsbCAmJgorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIxLmlnbm9yZSBhbGwgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgc3ViMSIgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgcmVtb3ZlX3N1YjEgYWRkX3N1YjEgJiYKKwkJZ2l0IHJldmVydCBIRUFEICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIG1vZGlmeV9zdWIxIGFkZF9zdWIxICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJCSgKKwkJCWNkIHN1YjEgJiYKKwkJCWdpdCBmZXRjaCAmJgorCQkJZ2l0IGNoZWNrb3V0IC1iICJtb2RpZmljYXRpb25zIiAmJgorCQkJZWNobyAieiIgPmZpbGUyICYmCisJCQllY2hvICJ4IiA+ZmlsZTMgJiYKKwkJCWdpdCBhZGQgZmlsZTIgZmlsZTMgJiYKKwkJCWdpdCBjb21taXQgLW0gIm1vZGlmaWVkIGZpbGUyIGFuZCBhZGRlZCBmaWxlMyIgJiYKKwkJCWdpdCBwdXNoIG9yaWdpbiBtb2RpZmljYXRpb25zCisJCSkgJiYKKwkJZ2l0IGFkZCBzdWIxICYmCisJCWdpdCBjb21taXQgLW0gIk1vZGlmeSBzdWIxIiAmJgorCisJCWdpdCBjaGVja291dCAtYiBhZGRfbmVzdGVkX3N1YiBtb2RpZnlfc3ViMSAmJgorCQlnaXQgLUMgc3ViMSBjaGVja291dCAtYiAiYWRkX25lc3RlZF9zdWIiICYmCisJCWdpdCAtQyBzdWIxIHN1Ym1vZHVsZSBhZGQgLS1icmFuY2ggbm9fc3VibW9kdWxlIC4uL3N1Ym1vZHVsZV91cGRhdGVfc3ViMiBzdWIyICYmCisJCWdpdCAtQyBzdWIxIGNvbW1pdCAtYSAtbSAiYWRkIGEgbmVzdGVkIHN1Ym1vZHVsZSIgJiYKKwkJZ2l0IGFkZCBzdWIxICYmCisJCWdpdCBjb21taXQgLWEgLW0gInVwZGF0ZSBzdWJtb2R1bGUsIHRoYXQgdXBkYXRlcyBhIG5lc3RlZCBzdWJtb2R1bGUiICYmCisJCWdpdCBjaGVja291dCAtYiBtb2RpZnlfc3ViMV9yZWN1cnNpdmVseSAmJgorCQlnaXQgLUMgc3ViMSBjaGVja291dCAtYiBtb2RpZnlfc3ViMV9yZWN1cnNpdmVseSAmJgorCQlnaXQgLUMgc3ViMS9zdWIyIGNoZWNrb3V0IC1iIG1vZGlmeV9zdWIxX3JlY3Vyc2l2ZWx5ICYmCisJCWVjaG8gY2hhbmdlID5zdWIxL3N1YjIvZmlsZTMgJiYKKwkJZ2l0IC1DIHN1YjEvc3ViMiBhZGQgZmlsZTMgJiYKKwkJZ2l0IC1DIHN1YjEvc3ViMiBjb21taXQgLW0gIm1ha2UgYSBjaGFuZ2UgaW4gbmVzdGVkIHN1YiIgJiYKKwkJZ2l0IC1DIHN1YjEgYWRkIHN1YjIgJiYKKwkJZ2l0IC1DIHN1YjEgY29tbWl0IC1tICJ1cGRhdGUgbmVzdGVkIHN1YiIgJiYKKwkJZ2l0IGFkZCBzdWIxICYmCisJCWdpdCBjb21taXQgLW0gInVwZGF0ZSBzdWIxLCB0aGF0IHVwZGF0ZXMgbmVzdGVkIHN1YiIgJiYKKwkJZ2l0IC1DIHN1YjEgcHVzaCBvcmlnaW4gbW9kaWZ5X3N1YjFfcmVjdXJzaXZlbHkgJiYKKwkJZ2l0IC1DIHN1YjEvc3ViMiBwdXNoIG9yaWdpbiBtb2RpZnlfc3ViMV9yZWN1cnNpdmVseSAmJgorCQlnaXQgLUMgc3ViMSBzdWJtb2R1bGUgZGVpbml0IC1mIC0tYWxsICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSBhZGRfc3ViMSAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCQlnaXQgLUMgc3ViMSBjaGVja291dCBtb2RpZmljYXRpb25zICYmCisJCWdpdCBybSAtLWNhY2hlZCBzdWIxICYmCisJCXJtIHN1YjEvLmdpdCogJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAtLXJlbW92ZS1zZWN0aW9uICJzdWJtb2R1bGUuc3ViMSIgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyBzdWIxLyogJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVwbGFjZSBzdWIxIHdpdGggZGlyZWN0b3J5IiAmJgorCisJCWdpdCBjaGVja291dCAtYiByZXBsYWNlX2RpcmVjdG9yeV93aXRoX3N1YjEgJiYKKwkJZ2l0IHJldmVydCBIRUFEICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgYWRkX3N1YjEgJiYKKwkJZ2l0IHJtIHN1YjEgJiYKKwkJZWNobyAiY29udGVudCIgPnN1YjEgJiYKKwkJZ2l0IGFkZCBzdWIxICYmCisJCWdpdCBjb21taXQgLW0gIlJlcGxhY2Ugc3ViMSB3aXRoIGZpbGUiICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlcGxhY2VfZmlsZV93aXRoX3N1YjEgJiYKKwkJZ2l0IHJldmVydCBIRUFEICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIGludmFsaWRfc3ViMSBhZGRfc3ViMSAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAkKHRlc3Rfb2lkIG51bWVyaWMpIHN1YjEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiSW52YWxpZCBzdWIxIGNvbW1pdCIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHZhbGlkX3N1YjEgJiYKKwkJZ2l0IHJldmVydCBIRUFEICYmCisKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSkKK30KKworIyBIZWxwZXIgZnVuY3Rpb24gdG8gcmVwbGFjZSBnaXRmaWxlIHdpdGggLmdpdCBkaXJlY3RvcnkKK3JlcGxhY2VfZ2l0ZmlsZV93aXRoX2dpdF9kaXIgKCkgeworCSgKKwkJY2QgIiQxIiAmJgorCQlnaXRfZGlyPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKSIgJiYKKwkJcm0gLWYgLmdpdCAmJgorCQljcCAtUiAiJGdpdF9kaXIiIC5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT0uIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlCisJKQorfQorCisjIFRlc3QgdGhhdCB0aGUgLmdpdCBkaXJlY3RvcnkgaW4gdGhlIHN1Ym1vZHVsZSBpcyB1bmNoYW5nZWQgKGV4Y2VwdCBmb3IgdGhlCisjIGNvcmUud29ya3RyZWUgc2V0dGluZywgd2hpY2ggYXBwZWFycyBvbmx5IGluICRHSVRfRElSL21vZHVsZXMvJDEvY29uZmlnKS4KKyMgQ2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSB0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IGFzIHRoZSBsYXR0ZXIgbWlnaHQKKyMgd3JpdGUgdGhlIGluZGV4IGZpbGUgbGVhZGluZyB0byBmYWxzZSBwb3NpdGl2ZSBpbmRleCBkaWZmZXJlbmNlcy4KKyMKKyMgTm90ZSB0aGF0IHRoaXMgb25seSBzdXBwb3J0cyBzdWJtb2R1bGVzIGF0IHRoZSByb290IGxldmVsIG9mIHRoZQorIyBzdXBlcnByb2plY3QsIHdpdGggdGhlIGRlZmF1bHQgbmFtZSwgaS5lLiBzYW1lIGFzIGl0cyBwYXRoLgordGVzdF9naXRfZGlyZWN0b3J5X2lzX3VuY2hhbmdlZCAoKSB7CisJKAorCQljZCAiLmdpdC9tb2R1bGVzLyQxIiAmJgorCQkjIGRvZXMgY29yZS53b3JrdHJlZSBwb2ludCBhdCB0aGUgcmlnaHQgcGxhY2U/CisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlKSIgPSAiLi4vLi4vLi4vJDEiICYmCisJCSMgcmVtb3ZlIGl0IHRlbXBvcmFyaWx5IGJlZm9yZSBjb21wYXJpbmcsIGFzCisJCSMgIiQxLy5naXQvY29uZmlnIiBsYWNrcyBpdC4uLgorCQlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53b3JrdHJlZQorCSkgJiYKKwlkaWZmIC1yICIuZ2l0L21vZHVsZXMvJDEiICIkMS8uZ2l0IiAmJgorCSgKKwkJIyAuLi4gYW5kIHRoZW4gcmVzdG9yZS4KKwkJY2QgIi5naXQvbW9kdWxlcy8kMSIgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlICIuLi8uLi8uLi8kMSIKKwkpCit9CisKK3Rlc3RfZ2l0X2RpcmVjdG9yeV9leGlzdHMoKSB7CisJdGVzdCAtZSAiLmdpdC9tb2R1bGVzLyQxIiAmJgorCWlmIHRlc3QgLWYgc3ViMS8uZ2l0CisJdGhlbgorCQkjIGRvZXMgY29yZS53b3JrdHJlZSBwb2ludCBhdCB0aGUgcmlnaHQgcGxhY2U/CisJCXRlc3QgIiQoZ2l0IC1DIC5naXQvbW9kdWxlcy8kMSBjb25maWcgY29yZS53b3JrdHJlZSkiID0gIi4uLy4uLy4uLyQxIgorCWZpCit9CisKKyMgSGVscGVyIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGF0IHRoZSBzdGFydCBvZiBldmVyeSB0ZXN0IGJlbG93LCBpdCBzZXRzIHVwCisjIHRoZSBzdWJtb2R1bGUgcmVwbyBpZiBpdCBkb2Vzbid0IGV4aXN0IGFuZCBjb25maWd1cmVzIHRoZSBtb3N0IHByb2JsZW1hdGljCisjIHNldHRpbmdzIGZvciBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMuCitwcm9sb2cgKCkgeworCXRlc3Rfb2lkX2luaXQgJiYKKwkodGVzdCAtZCBzdWJtb2R1bGVfdXBkYXRlX3JlcG8gfHwgY3JlYXRlX2xpYl9zdWJtb2R1bGVfcmVwbykgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZGlmZi5pZ25vcmVTdWJtb2R1bGVzIGFsbCAmJgorCXRlc3RfY29uZmlnIGRpZmYuaWdub3JlU3VibW9kdWxlcyBhbGwKK30KKworIyBIZWxwZXIgZnVuY3Rpb24gdG8gYnJpbmcgd29yayB0cmVlIGJhY2sgaW50byB0aGUgc3RhdGUgZ2l2ZW4gYnkgdGhlCisjIGNvbW1pdC4gVGhpcyBpbmNsdWRlcyB0cnlpbmcgdG8gcG9wdWxhdGUgc3ViMSBhY2NvcmRpbmdseSBpZiBpdCBleGlzdHMgYW5kCisjIHNob3VsZCBiZSB1cGRhdGVkIHRvIGFuIGV4aXN0aW5nIGNvbW1pdC4KK3Jlc2V0X3dvcmtfdHJlZV90byAoKSB7CisJcm0gLXJmIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwlnaXQgY2xvbmUgc3VibW9kdWxlX3VwZGF0ZV9yZXBvIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJcm0gLXJmIHN1YjEgJiYKKwkJZ2l0IGNoZWNrb3V0IC1mICIkMSIgJiYKKwkJZ2l0IHN0YXR1cyAtdSAtcyA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwkJaGFzaD0kKGdpdCByZXYtcGFyc2UgLS1yZXZzLW9ubHkgSEVBRDpzdWIxKSAmJgorCQlpZiB0ZXN0IC1uICIkaGFzaCIgJiYKKwkJICAgdGVzdCAkKGNkICIuLi9zdWJtb2R1bGVfdXBkYXRlX3N1YjEiICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRoYXNoXntjb21taXR9IikKKwkJdGhlbgorCQkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlICJzdWIxIgorCQlmaQorCSkKK30KKworcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgKCkgeworCXJlc2V0X3dvcmtfdHJlZV90byAkMSAmJgorCSMgbWFrZSB0aGUgc3VibW9kdWxlIGdpdCBkaXJzIGF2YWlsYWJsZQorCWlmICEgdGVzdCAtZCBzdWJtb2R1bGVfdXBkYXRlLy5naXQvbW9kdWxlcy9zdWIxCisJdGhlbgorCQlta2RpciAtcCBzdWJtb2R1bGVfdXBkYXRlLy5naXQvbW9kdWxlcyAmJgorCQljcCAtciBzdWJtb2R1bGVfdXBkYXRlX3JlcG8vLmdpdC9tb2R1bGVzL3N1YjEgc3VibW9kdWxlX3VwZGF0ZS8uZ2l0L21vZHVsZXMvc3ViMQorCQlHSVRfV09SS19UUkVFPS4gZ2l0IC1DIHN1Ym1vZHVsZV91cGRhdGUvLmdpdC9tb2R1bGVzL3N1YjEgY29uZmlnIC0tdW5zZXQgY29yZS53b3JrdHJlZQorCWZpICYmCisJaWYgISB0ZXN0IC1kIHN1Ym1vZHVsZV91cGRhdGUvLmdpdC9tb2R1bGVzL3N1YjEvbW9kdWxlcy9zdWIyCisJdGhlbgorCQlta2RpciAtcCBzdWJtb2R1bGVfdXBkYXRlLy5naXQvbW9kdWxlcy9zdWIxL21vZHVsZXMgJiYKKwkJY3AgLXIgc3VibW9kdWxlX3VwZGF0ZV9yZXBvLy5naXQvbW9kdWxlcy9zdWIxL21vZHVsZXMvc3ViMiBzdWJtb2R1bGVfdXBkYXRlLy5naXQvbW9kdWxlcy9zdWIxL21vZHVsZXMvc3ViMgorCQkjIGNvcmUud29ya3RyZWUgaXMgdW5zZXQgZm9yIHN1YjIgYXMgaXQgaXMgbm90IGNoZWNrZWQgb3V0CisJZmkgJiYKKwkjIGluZGljYXRlIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRoZSBzdWJtb2R1bGU6CisJZ2l0IC1DIHN1Ym1vZHVsZV91cGRhdGUgY29uZmlnIHN1Ym1vZHVsZS5zdWIxLnVybCAiYm9ndXMiICYmCisJIyBzdWIxIG1pZ2h0IG5vdCBiZSBjaGVja2VkIG91dCwgc28gdXNlIHRoZSBnaXQgZGlyCisJZ2l0IC1DIHN1Ym1vZHVsZV91cGRhdGUvLmdpdC9tb2R1bGVzL3N1YjEgY29uZmlnIHN1Ym1vZHVsZS5zdWIyLnVybCAiYm9ndXMiCit9CisKKyMgVGVzdCB0aGF0IHRoZSBzdXBlcnByb2plY3QgY29udGFpbnMgdGhlIGNvbnRlbnQgYWNjb3JkaW5nIHRvIGNvbW1pdCAiJDEiCisjICh0aGUgd29yayB0cmVlIG11c3QgbWF0Y2ggdGhlIGluZGV4IGZvciBldmVyeXRoaW5nIGJ1dCBzdWJtb2R1bGVzIGJ1dCB0aGUKKyMgaW5kZXggbXVzdCBleGFjdGx5IG1hdGNoIHRoZSBnaXZlbiBjb21taXQgaW5jbHVkaW5nIGFueSBzdWJtb2R1bGUgU0hBLTFzKS4KK3Rlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgKCkgeworCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkICIkMSIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwlnaXQgZGlmZi1maWxlcyAtLWlnbm9yZS1zdWJtb2R1bGVzID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCit9CisKKyMgVGVzdCB0aGF0IHRoZSBnaXZlbiBzdWJtb2R1bGUgYXQgcGF0aCAiJDEiIGNvbnRhaW5zIHRoZSBjb250ZW50IGFjY29yZGluZworIyB0byB0aGUgc3VibW9kdWxlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0J3MgY29tbWl0ICIkMiIKK3Rlc3Rfc3VibW9kdWxlX2NvbnRlbnQgKCkgeworCWlmIHRlc3QgeCIkMSIgPSAieC1DIgorCXRoZW4KKwkJY2QgIiQyIgorCQlzaGlmdDsgc2hpZnQ7CisJZmkKKwlpZiB0ZXN0ICQjICE9IDIKKwl0aGVuCisJCWVjaG8gInRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgbmVlZHMgdHdvIGFyZ3VtZW50cyIKKwkJcmV0dXJuIDEKKwlmaSAmJgorCXN1Ym1vZHVsZT0iJDEiICYmCisJY29tbWl0PSIkMiIgJiYKKwl0ZXN0IC1kICIkc3VibW9kdWxlIi8gJiYKKwlpZiAhIHRlc3QgLWYgIiRzdWJtb2R1bGUiLy5naXQgJiYgISB0ZXN0IC1kICIkc3VibW9kdWxlIi8uZ2l0CisJdGhlbgorCQllY2hvICJTdWJtb2R1bGUgJHN1Ym1vZHVsZSBpcyBub3QgcG9wdWxhdGVkIgorCQlyZXR1cm4gMQorCWZpICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRjb21taXQ6JHN1Ym1vZHVsZSIpICYmCisJaWYgdGVzdCAteiAiJHNoYTEiCisJdGhlbgorCQllY2hvICJDb3VsZG4ndCByZXRyaWV2ZSBTSEEtMSBvZiAkc3VibW9kdWxlIGZvciAkY29tbWl0IgorCQlyZXR1cm4gMQorCWZpICYmCisJKAorCQljZCAiJHN1Ym1vZHVsZSIgJiYKKwkJZ2l0IHN0YXR1cyAtdSAtcyA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwkJZ2l0IGRpZmYgIiRzaGExIiA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKwkpCit9CisKKyMgVGVzdCB0aGF0IHRoZSBmb2xsb3dpbmcgdHJhbnNpdGlvbnMgYXJlIGNvcnJlY3RseSBoYW5kbGVkOgorIyAtIFVwZGF0ZWQgc3VibW9kdWxlCisjIC0gTmV3IHN1Ym1vZHVsZQorIyAtIFJlbW92ZWQgc3VibW9kdWxlCisjIC0gRGlyZWN0b3J5IGNvbnRhaW5pbmcgdHJhY2tlZCBmaWxlcyByZXBsYWNlZCBieSBzdWJtb2R1bGUKKyMgLSBTdWJtb2R1bGUgcmVwbGFjZWQgYnkgdHJhY2tlZCBmaWxlcyBpbiBkaXJlY3RvcnkKKyMgLSBTdWJtb2R1bGUgcmVwbGFjZWQgYnkgdHJhY2tlZCBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZQorIyAtIFRyYWNrZWQgZmlsZSByZXBsYWNlZCBieSBzdWJtb2R1bGUKKyMKKyMgVGhlIGRlZmF1bHQgaXMgdGhhdCBzdWJtb2R1bGUgY29udGVudHMgYXJlbid0IGNoYW5nZWQgdW50aWwgImdpdCBzdWJtb2R1bGUKKyMgdXBkYXRlIiBpcyBydW4uIEFuZCBldmVuIHRoZW4gdGhhdCBjb21tYW5kIGRvZXNuJ3QgZGVsZXRlIHRoZSB3b3JrIHRyZWUgb2YKKyMgYSByZW1vdmVkIHN1Ym1vZHVsZS4KKyMKKyMgUmVtb3ZpbmcgYSBzdWJtb2R1bGUgY29udGFpbmluZyBhIC5naXQgZGlyZWN0b3J5IG11c3QgZmFpbCBldmVuIHdoZW4gZm9yY2VkCisjIHRvIHByb3RlY3QgdGhlIGhpc3RvcnkhCisjCisKKyMgSW50ZXJuYWwgZnVuY3Rpb247IHVzZSB0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2goKSBvcgorIyB0ZXN0X3N1Ym1vZHVsZV9mb3JjZWRfc3dpdGNoKCkgaW5zdGVhZC4KK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaF9jb21tb24oKSB7CisJY29tbWFuZD0iJDEiCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBBcHBlYXJpbmcgc3VibW9kdWxlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFN3aXRjaGluZyB0byBhIGNvbW1pdCBsZXR0aW5nIGEgc3VibW9kdWxlIGFwcGVhciBjcmVhdGVzIGVtcHR5IGRpciAuLi4KKwlpZiB0ZXN0ICIkS05PV05fRkFJTFVSRV9TVEFTSF9ET0VTX0lHTk9SRV9TVUJNT0RVTEVfQ0hBTkdFUyIgPSAxCisJdGhlbgorCQkjIFJlc3RvcmluZyBzdGFzaCBmYWlscyB0byByZXN0b3JlIHN1Ym1vZHVsZSBpbmRleCBlbnRyeQorCQlSRVNVTFQ9ImZhaWx1cmUiCisJZWxzZQorCQlSRVNVTFQ9InN1Y2Nlc3MiCisJZmkKKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogYWRkZWQgc3VibW9kdWxlIGNyZWF0ZXMgZW1wdHkgZGlyZWN0b3J5IiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gbm9fc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgYWRkX3N1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQkkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3RfZGlyX2lzX2VtcHR5IHN1YjEgJiYKKwkJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgLi4uIGFuZCBkb2Vzbid0IGNhcmUgaWYgaXQgYWxyZWFkeSBleGlzdHMuCisJdGVzdF9leHBlY3RfJFJFU1VMVCAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSBsZWF2ZXMgZXhpc3RpbmcgZW1wdHkgZGlyZWN0b3J5IGFsb25lIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gbm9fc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCW1rZGlyIHN1YjEgJiYKKwkJCWdpdCBicmFuY2ggLXQgYWRkX3N1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQkkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3RfZGlyX2lzX2VtcHR5IHN1YjEgJiYKKwkJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgUmVwbGFjaW5nIGEgdHJhY2tlZCBmaWxlIHdpdGggYSBzdWJtb2R1bGUgcHJvZHVjZXMgYW4gZW1wdHkKKwkjIGRpcmVjdG9yeSAuLi4KKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogcmVwbGFjZSB0cmFja2VkIGZpbGUgd2l0aCBzdWJtb2R1bGUgY3JlYXRlcyBlbXB0eSBkaXJlY3RvcnkiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byByZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9maWxlX3dpdGhfc3ViMSBvcmlnaW4vcmVwbGFjZV9maWxlX3dpdGhfc3ViMSAmJgorCQkJJGNvbW1hbmQgcmVwbGFjZV9maWxlX3dpdGhfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9maWxlX3dpdGhfc3ViMSAmJgorCQkJdGVzdF9kaXJfaXNfZW1wdHkgc3ViMSAmJgorCQkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL3JlcGxhY2VfZmlsZV93aXRoX3N1YjEKKwkJKQorCScKKwkjIC4uLiBhcyBkb2VzIHJlbW92aW5nIGEgZGlyZWN0b3J5IHdpdGggdHJhY2tlZCBmaWxlcyB3aXRoIGEKKwkjIHN1Ym1vZHVsZS4KKwlpZiB0ZXN0ICIkS05PV05fRkFJTFVSRV9OT0ZGX01FUkdFX0RPRVNOVF9DUkVBVEVfRU1QVFlfU1VCTU9EVUxFX0RJUiIgPSAxCisJdGhlbgorCQkjIE5vbiBmYXN0LWZvcndhcmQgbWVyZ2VzIGZhaWwgd2l0aCAiRGlyZWN0b3J5IHN1YjEgZG9lc24ndAorCQkjIGV4aXN0LiBzdWIxIiBiZWNhdXNlIHRoZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5IGlzIG5vdAorCQkjIGNyZWF0ZWQKKwkJUkVTVUxUPSJmYWlsdXJlIgorCWVsc2UKKwkJUkVTVUxUPSJzdWNjZXNzIgorCWZpCisJdGVzdF9leHBlY3RfJFJFU1VMVCAiJGNvbW1hbmQ6IHJlcGxhY2UgZGlyZWN0b3J5IHdpdGggc3VibW9kdWxlIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxIG9yaWdpbi9yZXBsYWNlX2RpcmVjdG9yeV93aXRoX3N1YjEgJiYKKwkJCSRjb21tYW5kIHJlcGxhY2VfZGlyZWN0b3J5X3dpdGhfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxICYmCisJCQl0ZXN0X2Rpcl9pc19lbXB0eSBzdWIxICYmCisJCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxCisJCSkKKwknCisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRGlzYXBwZWFyaW5nIHN1Ym1vZHVsZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgUmVtb3ZpbmcgYSBzdWJtb2R1bGUgZG9lc24ndCByZW1vdmUgaXRzIHdvcmsgdHJlZSAuLi4KKwlpZiB0ZXN0ICIkS05PV05fRkFJTFVSRV9TVEFTSF9ET0VTX0lHTk9SRV9TVUJNT0RVTEVfQ0hBTkdFUyIgPSAxCisJdGhlbgorCQlSRVNVTFQ9ImZhaWx1cmUiCisJZWxzZQorCQlSRVNVTFQ9InN1Y2Nlc3MiCisJZmkKKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogcmVtb3ZlZCBzdWJtb2R1bGUgbGVhdmVzIHN1Ym1vZHVsZSBkaXJlY3RvcnkgYW5kIGl0cyBjb250ZW50cyBpbiBwbGFjZSIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVtb3ZlX3N1YjEgb3JpZ2luL3JlbW92ZV9zdWIxICYmCisJCQkkY29tbWFuZCByZW1vdmVfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVtb3ZlX3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKwkjIC4uLiBlc3BlY2lhbGx5IHdoZW4gaXQgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeS4KKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogcmVtb3ZlZCBzdWJtb2R1bGUgbGVhdmVzIHN1Ym1vZHVsZSBjb250YWluaW5nIGEgLmdpdCBkaXJlY3RvcnkgYWxvbmUiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlbW92ZV9zdWIxIG9yaWdpbi9yZW1vdmVfc3ViMSAmJgorCQkJcmVwbGFjZV9naXRmaWxlX3dpdGhfZ2l0X2RpciBzdWIxICYmCisJCQkkY29tbWFuZCByZW1vdmVfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVtb3ZlX3N1YjEgJiYKKwkJCXRlc3RfZ2l0X2RpcmVjdG9yeV9pc191bmNoYW5nZWQgc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgUmVwbGFjaW5nIGEgc3VibW9kdWxlIHdpdGggZmlsZXMgaW4gYSBkaXJlY3RvcnkgbXVzdCBmYWlsIGFzIHRoZQorCSMgc3VibW9kdWxlIHdvcmsgdHJlZSBpc24ndCByZW1vdmVkIC4uLgorCWlmIHRlc3QgIiRLTk9XTl9GQUlMVVJFX05PRkZfTUVSR0VfQVRURU1QVFNfVE9fTUVSR0VfUkVNT1ZFRF9TVUJNT0RVTEVfRklMRVMiID0gMQorCXRoZW4KKwkJIyBOb24gZmFzdC1mb3J3YXJkIG1lcmdlcyBhdHRlbXB0IHRvIG1lcmdlIHRoZSBmb3JtZXIKKwkJIyBzdWJtb2R1bGUgZmlsZXMgd2l0aCB0aGUgbmV3bHkgY2hlY2tlZCBvdXQgb25lcyBpbiB0aGUKKwkJIyBkaXJlY3Rvcnkgb2YgdGhlIHNhbWUgbmFtZSB3aGlsZSBpdCBzaG91bGRuJ3QuCisJCVJFU1VMVD0iZmFpbHVyZSIKKwllbGlmIHRlc3QgIiRLTk9XTl9GQUlMVVJFX0ZPUkNFRF9TV0lUQ0hfVEVTVFMiID0gMQorCXRoZW4KKwkJIyBBbGwgZXhpc3RpbmcgdGVzdHMgdGhhdCB1c2UgdGVzdF9zdWJtb2R1bGVfZm9yY2VkX3N3aXRjaCgpCisJCSMgcmVxdWlyZSB0aGlzLgorCQlSRVNVTFQ9ImZhaWx1cmUiCisJZWxzZQorCQlSRVNVTFQ9InN1Y2Nlc3MiCisJZmkKKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogcmVwbGFjZSBzdWJtb2R1bGUgd2l0aCBhIGRpcmVjdG9yeSBtdXN0IGZhaWwiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCQl0ZXN0X211c3RfZmFpbCAkY29tbWFuZCByZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL2FkZF9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxCisJCSkKKwknCisJIyAuLi4gZXNwZWNpYWxseSB3aGVuIGl0IGNvbnRhaW5zIGEgLmdpdCBkaXJlY3RvcnkuCisJdGVzdF9leHBlY3RfJFJFU1VMVCAiJGNvbW1hbmQ6IHJlcGxhY2Ugc3VibW9kdWxlIGNvbnRhaW5pbmcgYSAuZ2l0IGRpcmVjdG9yeSB3aXRoIGEgZGlyZWN0b3J5IG11c3QgZmFpbCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5IG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkgJiYKKwkJCXJlcGxhY2VfZ2l0ZmlsZV93aXRoX2dpdF9kaXIgc3ViMSAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgJGNvbW1hbmQgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJdGVzdF9naXRfZGlyZWN0b3J5X2lzX3VuY2hhbmdlZCBzdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxCisJCSkKKwknCisJIyBSZXBsYWNpbmcgaXQgd2l0aCBhIGZpbGUgbXVzdCBmYWlsIGFzIGl0IGNvdWxkIHRocm93IGF3YXkgYW55IGxvY2FsCisJIyB3b3JrIHRyZWUgY2hhbmdlcyAuLi4KKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICIkY29tbWFuZDogcmVwbGFjZSBzdWJtb2R1bGUgd2l0aCBhIGZpbGUgbXVzdCBmYWlsIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCByZXBsYWNlX3N1YjFfd2l0aF9maWxlIG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQl0ZXN0X211c3RfZmFpbCAkY29tbWFuZCByZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgLi4uIG9yIGV2ZW4gZGVzdHJveSB1bnB1c2hlZCBwYXJ0cyBvZiBzdWJtb2R1bGUgaGlzdG9yeSBpZiB0aGF0CisJIyBzdGlsbCB1c2VzIGEgLmdpdCBkaXJlY3RvcnkuCisJdGVzdF9leHBlY3RfZmFpbHVyZSAiJGNvbW1hbmQ6IHJlcGxhY2Ugc3VibW9kdWxlIGNvbnRhaW5pbmcgYSAuZ2l0IGRpcmVjdG9yeSB3aXRoIGEgZmlsZSBtdXN0IGZhaWwiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgb3JpZ2luL3JlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgJiYKKwkJCXJlcGxhY2VfZ2l0ZmlsZV93aXRoX2dpdF9kaXIgc3ViMSAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgJGNvbW1hbmQgcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3RfZ2l0X2RpcmVjdG9yeV9pc191bmNoYW5nZWQgc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTW9kaWZpZWQgc3VibW9kdWxlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFVwZGF0aW5nIGEgc3VibW9kdWxlIHNoYTEgZG9lc24ndCB1cGRhdGUgdGhlIHN1Ym1vZHVsZSdzIHdvcmsgdHJlZQorCWlmIHRlc3QgIiRLTk9XTl9GQUlMVVJFX0NIRVJSWV9QSUNLX1NFRVNfRU1QVFlfQ09NTUlUIiA9IDEKKwl0aGVuCisJCSMgV2hlbiBjaGVycnkgcGlja2luZyBhIFNIQS0xIHVwZGF0ZSBmb3IgYW4gaWdub3JlZCBzdWJtb2R1bGUKKwkJIyB0aGUgY29tbWl0IGluY29ycmVjdGx5IGZhaWxzIHdpdGggIlRoZSBwcmV2aW91cyBjaGVycnktcGljaworCQkjIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uIgorCQlSRVNVTFQ9ImZhaWx1cmUiCisJZWxzZQorCQlSRVNVTFQ9InN1Y2Nlc3MiCisJZmkKKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogbW9kaWZpZWQgc3VibW9kdWxlIGRvZXMgbm90IHVwZGF0ZSBzdWJtb2R1bGUgd29yayB0cmVlIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCBtb2RpZnlfc3ViMSBvcmlnaW4vbW9kaWZ5X3N1YjEgJiYKKwkJCSRjb21tYW5kIG1vZGlmeV9zdWIxICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9tb2RpZnlfc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vbW9kaWZ5X3N1YjEKKwkJKQorCScKKwkjIFVwZGF0aW5nIGEgc3VibW9kdWxlIHRvIGFuIGludmFsaWQgc2hhMSBkb2Vzbid0IHVwZGF0ZSB0aGUKKwkjIHN1Ym1vZHVsZSdzIHdvcmsgdHJlZSwgc3Vic2VxdWVudCB1cGRhdGUgd2lsbCBmYWlsCisJdGVzdF9leHBlY3RfJFJFU1VMVCAiJGNvbW1hbmQ6IG1vZGlmaWVkIHN1Ym1vZHVsZSBkb2VzIG5vdCB1cGRhdGUgc3VibW9kdWxlIHdvcmsgdHJlZSB0byBpbnZhbGlkIGNvbW1pdCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgaW52YWxpZF9zdWIxIG9yaWdpbi9pbnZhbGlkX3N1YjEgJiYKKwkJCSRjb21tYW5kIGludmFsaWRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vaW52YWxpZF9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgVXBkYXRpbmcgYSBzdWJtb2R1bGUgZnJvbSBhbiBpbnZhbGlkIHNoYTEgZG9lc24ndCB1cGRhdGUgdGhlCisJIyBzdWJtb2R1bGUncyB3b3JrIHRyZWUsIHN1YnNlcXVlbnQgdXBkYXRlIHdpbGwgc3VjY2VlZAorCXRlc3RfZXhwZWN0XyRSRVNVTFQgIiRjb21tYW5kOiBtb2RpZmllZCBzdWJtb2R1bGUgZG9lcyBub3QgdXBkYXRlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgZnJvbSBpbnZhbGlkIGNvbW1pdCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGludmFsaWRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHZhbGlkX3N1YjEgb3JpZ2luL3ZhbGlkX3N1YjEgJiYKKwkJCSRjb21tYW5kIHZhbGlkX3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL3ZhbGlkX3N1YjEgJiYKKwkJCXRlc3RfZGlyX2lzX2VtcHR5IHN1YjEgJiYKKwkJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi92YWxpZF9zdWIxCisJCSkKKwknCit9CisKKyMgRGVjbGFyZXMgYW5kIGludm9rZXMgc2V2ZXJhbCB0ZXN0cyB0aGF0LCBpbiB2YXJpb3VzIHNpdHVhdGlvbnMsIGNoZWNrcyB0aGF0CisjIHRoZSBwcm92aWRlZCB0cmFuc2l0aW9uIGZ1bmN0aW9uOgorIyAgLSBzdWNjZWVkcyBpbiB1cGRhdGluZyB0aGUgd29ya3RyZWUgYW5kIGluZGV4IG9mIGEgc3VwZXJwcm9qZWN0IHRvIGEgdGFyZ2V0CisjICAgIGNvbW1pdCwgb3IgZmFpbHMgYXRvbWljYWxseSAoZGVwZW5kaW5nIG9uIHRoZSB0ZXN0IHNpdHVhdGlvbikKKyMgIC0gaWYgc3VjY2VlZHMsIHRoZSBjb250ZW50cyBvZiBzdWJtb2R1bGUgZGlyZWN0b3JpZXMgYXJlIHVuY2hhbmdlZAorIyAgLSBpZiBzdWNjZWVkcywgb25jZSAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGlzIGludm9rZWQsIHRoZSBjb250ZW50cyBvZgorIyAgICBzdWJtb2R1bGUgZGlyZWN0b3JpZXMgYXJlIHVwZGF0ZWQKKyMKKyMgSWYgdGhlIGNvbW1hbmQgdW5kZXIgdGVzdCBpcyBrbm93biB0byBub3Qgd29yayB3aXRoIHN1Ym1vZHVsZXMgaW4gY2VydGFpbgorIyBjb25kaXRpb25zLCBzZXQgdGhlIGFwcHJvcHJpYXRlIEtOT1dOX0ZBSUxVUkVfKiB2YXJpYWJsZSB1c2VkIGluIHRoZSB0ZXN0cworIyBiZWxvdyB0byAxLgorIworIyBVc2UgYXMgZm9sbG93czoKKyMKKyMgbXlfZnVuYyAoKSB7CisjICAgdGFyZ2V0PSQxCisjICAgIyBEbyBzb21ldGhpbmcgaGVyZSB0aGF0IHVwZGF0ZXMgdGhlIHdvcmt0cmVlIGFuZCBpbmRleCB0byBtYXRjaCB0YXJnZXQsCisjICAgIyBidXQgbm90IGFueSBzdWJtb2R1bGUgZGlyZWN0b3JpZXMuCisjIH0KKyMgdGVzdF9zdWJtb2R1bGVfc3dpdGNoICJteV9mdW5jIgordGVzdF9zdWJtb2R1bGVfc3dpdGNoICgpIHsKKwljb21tYW5kPSIkMSIKKwl0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2hfY29tbW9uICIkY29tbWFuZCIKKworCSMgQW4gZW1wdHkgZGlyZWN0b3J5IGRvZXMgbm90IHByZXZlbnQgdGhlIGNyZWF0aW9uIG9mIGEgc3VibW9kdWxlIG9mCisJIyB0aGUgc2FtZSBuYW1lLCBidXQgYSBmaWxlIGRvZXMuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSBkb2Vzbid0IHJlbW92ZSB1bnRyYWNrZWQgdW5pZ25vcmVkIGZpbGUgd2l0aCBzYW1lIG5hbWUiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBub19zdWJtb2R1bGUgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCBhZGRfc3ViMSBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCT5zdWIxICYmCisJCQl0ZXN0X211c3RfZmFpbCAkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vbm9fc3VibW9kdWxlICYmCisJCQl0ZXN0X211c3RfYmVfZW1wdHkgc3ViMQorCQkpCisJJworfQorCisjIFNhbWUgYXMgdGVzdF9zdWJtb2R1bGVfc3dpdGNoKCksIGV4Y2VwdCB0aGF0IHRocm93aW5nIGF3YXkgbG9jYWwgY2hhbmdlcyBpbgorIyB0aGUgc3VwZXJwcm9qZWN0IGlzIGFsbG93ZWQuCit0ZXN0X3N1Ym1vZHVsZV9mb3JjZWRfc3dpdGNoICgpIHsKKwljb21tYW5kPSIkMSIKKwlLTk9XTl9GQUlMVVJFX0ZPUkNFRF9TV0lUQ0hfVEVTVFM9MQorCXRlc3Rfc3VibW9kdWxlX3N3aXRjaF9jb21tb24gIiRjb21tYW5kIgorCisJIyBXaGVuIGZvcmNlZCwgYSBmaWxlIGluIHRoZSBzdXBlcnByb2plY3QgZG9lcyBub3QgcHJldmVudCBjcmVhdGluZyBhCisJIyBzdWJtb2R1bGUgb2YgdGhlIHNhbWUgbmFtZS4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogYWRkZWQgc3VibW9kdWxlIGRvZXMgcmVtb3ZlIHVudHJhY2tlZCB1bmlnbm9yZWQgZmlsZSB3aXRoIHNhbWUgbmFtZSB3aGVuIGZvcmNlZCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIG5vX3N1Ym1vZHVsZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IGFkZF9zdWIxIG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJPnN1YjEgJiYKKwkJCSRjb21tYW5kIGFkZF9zdWIxICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJdGVzdF9kaXJfaXNfZW1wdHkgc3ViMQorCQkpCisJJworfQorCisjIFRlc3QgdGhhdCBzdWJtb2R1bGUgY29udGVudHMgYXJlIGNvcnJlY3RseSB1cGRhdGVkIHdoZW4gc3dpdGNoaW5nCisjIGJldHdlZW4gY29tbWl0cyB0aGF0IGNoYW5nZSBhIHN1Ym1vZHVsZS4KKyMgVGVzdCB0aGF0IHRoZSBmb2xsb3dpbmcgdHJhbnNpdGlvbnMgYXJlIGNvcnJlY3RseSBoYW5kbGVkOgorIyAoVGhlc2UgdGVzdHMgYXJlIGFsc28gYWJvdmUgaW4gdGhlIGNhc2Ugd2hlcmUgd2UgZXhwZWN0IG5vIGNoYW5nZQorIyAgaW4gdGhlIHN1Ym1vZHVsZSkKKyMgLSBVcGRhdGVkIHN1Ym1vZHVsZQorIyAtIE5ldyBzdWJtb2R1bGUKKyMgLSBSZW1vdmVkIHN1Ym1vZHVsZQorIyAtIERpcmVjdG9yeSBjb250YWluaW5nIHRyYWNrZWQgZmlsZXMgcmVwbGFjZWQgYnkgc3VibW9kdWxlCisjIC0gU3VibW9kdWxlIHJlcGxhY2VkIGJ5IHRyYWNrZWQgZmlsZXMgaW4gZGlyZWN0b3J5CisjIC0gU3VibW9kdWxlIHJlcGxhY2VkIGJ5IHRyYWNrZWQgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUKKyMgLSBUcmFja2VkIGZpbGUgcmVwbGFjZWQgYnkgc3VibW9kdWxlCisjCisjIE5ldyB0ZXN0IGNhc2VzCisjIC0gUmVtb3ZpbmcgYSBzdWJtb2R1bGUgd2l0aCBhIGdpdCBkaXJlY3RvcnkgYWJzb3JicyB0aGUgc3VibW9kdWxlcworIyAgIGdpdCBkaXJlY3RvcnkgZmlyc3QgaW50byB0aGUgc3VwZXJwcm9qZWN0LgorIyAtIFN3aXRjaGluZyBmcm9tIG5vIHN1Ym1vZHVsZSB0byBuZXN0ZWQgc3VibW9kdWxlcworIyAtIFN3aXRjaGluZyBmcm9tIG5lc3RlZCBzdWJtb2R1bGVzIHRvIG5vIHN1Ym1vZHVsZQorCisjIEludGVybmFsIGZ1bmN0aW9uOyB1c2UgdGVzdF9zdWJtb2R1bGVfc3dpdGNoX3JlY3Vyc2luZ193aXRoX2FyZ3MoKSBvcgorIyB0ZXN0X3N1Ym1vZHVsZV9mb3JjZWRfc3dpdGNoX3JlY3Vyc2luZ193aXRoX2FyZ3MoKSBpbnN0ZWFkLgordGVzdF9zdWJtb2R1bGVfcmVjdXJzaW5nX3dpdGhfYXJnc19jb21tb24oKSB7CisJY29tbWFuZD0iJDEiCisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEFwcGVhcmluZyBzdWJtb2R1bGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgU3dpdGNoaW5nIHRvIGEgY29tbWl0IGxldHRpbmcgYSBzdWJtb2R1bGUgYXBwZWFyIGNoZWNrcyBpdCBvdXQgLi4uCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSBpcyBjaGVja2VkIG91dCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgbm9fc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgYWRkX3N1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQkkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKwkjIC4uLiBpZ25vcmluZyBhbiBlbXB0eSBleGlzdGluZyBkaXJlY3RvcnkuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSBpcyBjaGVja2VkIG91dCBpbiBlbXB0eSBkaXIiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIG5vX3N1Ym1vZHVsZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlta2RpciBzdWIxICYmCisJCQlnaXQgYnJhbmNoIC10IGFkZF9zdWIxIG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJJGNvbW1hbmQgYWRkX3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL2FkZF9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxCisJCSkKKwknCisKKwkjIFJlcGxhY2luZyBhIHRyYWNrZWQgZmlsZSB3aXRoIGEgc3VibW9kdWxlIHByb2R1Y2VzIGEgY2hlY2tlZCBvdXQgc3VibW9kdWxlCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IHJlcGxhY2UgdHJhY2tlZCBmaWxlIHdpdGggc3VibW9kdWxlIGNoZWNrcyBvdXQgc3VibW9kdWxlIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG9faW50ZXJlc3RlZCByZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9maWxlX3dpdGhfc3ViMSBvcmlnaW4vcmVwbGFjZV9maWxlX3dpdGhfc3ViMSAmJgorCQkJJGNvbW1hbmQgcmVwbGFjZV9maWxlX3dpdGhfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9maWxlX3dpdGhfc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9yZXBsYWNlX2ZpbGVfd2l0aF9zdWIxCisJCSkKKwknCisJIyAuLi4gYXMgZG9lcyByZW1vdmluZyBhIGRpcmVjdG9yeSB3aXRoIHRyYWNrZWQgZmlsZXMgd2l0aCBhIHN1Ym1vZHVsZS4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogcmVwbGFjZSBkaXJlY3Rvcnkgd2l0aCBzdWJtb2R1bGUiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlcGxhY2VfZGlyZWN0b3J5X3dpdGhfc3ViMSBvcmlnaW4vcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxICYmCisJCQkkY29tbWFuZCByZXBsYWNlX2RpcmVjdG9yeV93aXRoX3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL3JlcGxhY2VfZGlyZWN0b3J5X3dpdGhfc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9yZXBsYWNlX2RpcmVjdG9yeV93aXRoX3N1YjEKKwkJKQorCScKKwkjIFN3aXRjaGluZyB0byBhIGNvbW1pdCB3aXRoIG5lc3RlZCBzdWJtb2R1bGVzIHJlY3Vyc2l2ZWx5IGNoZWNrcyB0aGVtIG91dAorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjb21tYW5kOiBuZXN0ZWQgc3VibW9kdWxlcyBhcmUgY2hlY2tlZCBvdXQiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIG5vX3N1Ym1vZHVsZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IG1vZGlmeV9zdWIxX3JlY3Vyc2l2ZWx5IG9yaWdpbi9tb2RpZnlfc3ViMV9yZWN1cnNpdmVseSAmJgorCQkJJGNvbW1hbmQgbW9kaWZ5X3N1YjFfcmVjdXJzaXZlbHkgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL21vZGlmeV9zdWIxX3JlY3Vyc2l2ZWx5ICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL21vZGlmeV9zdWIxX3JlY3Vyc2l2ZWx5ICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IC1DIHN1YjEgc3ViMiBvcmlnaW4vbW9kaWZ5X3N1YjFfcmVjdXJzaXZlbHkKKwkJKQorCScKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBEaXNhcHBlYXJpbmcgc3VibW9kdWxlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJIyBSZW1vdmluZyBhIHN1Ym1vZHVsZSByZW1vdmVzIGl0cyB3b3JrIHRyZWUgLi4uCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IHJlbW92ZWQgc3VibW9kdWxlIHJlbW92ZXMgc3VibW9kdWxlcyB3b3JraW5nIHRyZWUiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVtb3ZlX3N1YjEgb3JpZ2luL3JlbW92ZV9zdWIxICYmCisJCQkkY29tbWFuZCByZW1vdmVfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVtb3ZlX3N1YjEgJiYKKwkJCSEgdGVzdCAtZSBzdWIxICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXQvbW9kdWxlcy9zdWIxL2NvbmZpZyBjb3JlLndvcmt0cmVlCisJCSkKKwknCisJIyAuLi4gYWJzb3JiaW5nIGEgLmdpdCBkaXJlY3RvcnkgYWxvbmcgdGhlIHdheS4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogcmVtb3ZlZCBzdWJtb2R1bGUgYWJzb3JicyBzdWJtb2R1bGVzIC5naXQgZGlyZWN0b3J5IiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG9faW50ZXJlc3RlZCBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlbW92ZV9zdWIxIG9yaWdpbi9yZW1vdmVfc3ViMSAmJgorCQkJcmVwbGFjZV9naXRmaWxlX3dpdGhfZ2l0X2RpciBzdWIxICYmCisJCQlybSAtcmYgLmdpdC9tb2R1bGVzICYmCisJCQkkY29tbWFuZCByZW1vdmVfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVtb3ZlX3N1YjEgJiYKKwkJCSEgdGVzdCAtZSBzdWIxICYmCisJCQl0ZXN0X2dpdF9kaXJlY3RvcnlfZXhpc3RzIHN1YjEKKwkJKQorCScKKworCSMgUmVwbGFjaW5nIGl0IHdpdGggYSBmaWxlIC4uLgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjb21tYW5kOiByZXBsYWNlIHN1Ym1vZHVsZSB3aXRoIGEgZmlsZSIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCByZXBsYWNlX3N1YjFfd2l0aF9maWxlIG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQkkY29tbWFuZCByZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQl0ZXN0IC1mIHN1YjEKKwkJKQorCScKKwlSRVNVTFREUz1zdWNjZXNzCisJaWYgdGVzdCAiJEtOT1dOX0ZBSUxVUkVfRElSRUNUT1JZX1NVQk1PRFVMRV9DT05GTElDVFMiID0gMQorCXRoZW4KKwkJUkVTVUxURFM9ZmFpbHVyZQorCWZpCisJIyAuLi4gbXVzdCBjaGVjayBpdHMgbG9jYWwgd29yayB0cmVlIGZvciB1bnRyYWNrZWQgZmlsZXMKKwl0ZXN0X2V4cGVjdF8kUkVTVUxURFMgIiRjb21tYW5kOiByZXBsYWNlIHN1Ym1vZHVsZSB3aXRoIGEgZmlsZSBtdXN0IGZhaWwgd2l0aCB1bnRyYWNrZWQgZmlsZXMiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSAmJgorCQkJOiA+c3ViMS91bnRyYWNrZWRmaWxlICYmCisJCQl0ZXN0X211c3RfZmFpbCAkY29tbWFuZCByZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJdGVzdCAtZiBzdWIxL3VudHJhY2tlZF9maWxlCisJCSkKKwknCisKKwkjIFN3aXRjaGluZyB0byBhIGNvbW1pdCB3aXRob3V0IG5lc3RlZCBzdWJtb2R1bGVzIHJlbW92ZXMgdGhlaXIgd29ya3RyZWVzCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IHdvcmt0cmVlcyBvZiBuZXN0ZWQgc3VibW9kdWxlcyBhcmUgcmVtb3ZlZCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgYWRkX25lc3RlZF9zdWIgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCBub19zdWJtb2R1bGUgb3JpZ2luL25vX3N1Ym1vZHVsZSAmJgorCQkJJGNvbW1hbmQgbm9fc3VibW9kdWxlICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9ub19zdWJtb2R1bGUgJiYKKwkJCSEgdGVzdF9wYXRoX2lzX2RpciBzdWIxICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXQvbW9kdWxlcy9zdWIxL2NvbmZpZyBjb3JlLndvcmt0cmVlICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXQvbW9kdWxlcy9zdWIxL21vZHVsZXMvc3ViMi9jb25maWcgY29yZS53b3JrdHJlZQorCQkpCisJJworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTW9kaWZpZWQgc3VibW9kdWxlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFVwZGF0aW5nIGEgc3VibW9kdWxlIHNoYTEgdXBkYXRlcyB0aGUgc3VibW9kdWxlJ3Mgd29yayB0cmVlCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IG1vZGlmaWVkIHN1Ym1vZHVsZSB1cGRhdGVzIHN1Ym1vZHVsZSB3b3JrIHRyZWUiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgbW9kaWZ5X3N1YjEgb3JpZ2luL21vZGlmeV9zdWIxICYmCisJCQkkY29tbWFuZCBtb2RpZnlfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vbW9kaWZ5X3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vbW9kaWZ5X3N1YjEKKwkJKQorCScKKwkjIFVwZGF0aW5nIGEgc3VibW9kdWxlIHRvIGFuIGludmFsaWQgc2hhMSBkb2Vzbid0IHVwZGF0ZSB0aGUKKwkjIHN1cGVycHJvamVjdCBub3IgdGhlIHN1Ym1vZHVsZSdzIHdvcmsgdHJlZS4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogdXBkYXRpbmcgdG8gYSBtaXNzaW5nIHN1Ym1vZHVsZSBjb21taXQgZmFpbHMiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgaW52YWxpZF9zdWIxIG9yaWdpbi9pbnZhbGlkX3N1YjEgJiYKKwkJCXRlc3RfbXVzdF9mYWlsICRjb21tYW5kIGludmFsaWRfc3ViMSAyPmVyciAmJgorCQkJdGVzdF9pMThuZ3JlcCBzdWIxIGVyciAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKwkjIFVwZGF0aW5nIGEgc3VibW9kdWxlIGRvZXMgbm90IHRvdWNoIHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQgYnJhbmNoIGluIHRoZSBzdWJtb2R1bGUKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogc3VibW9kdWxlIGJyYW5jaCBpcyBub3QgY2hhbmdlZCwgZGV0YWNoIEhFQUQgaW5zdGVhZCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IC1DIHN1YjEgY2hlY2tvdXQgLWIga2VlcF9icmFuY2ggJiYKKwkJCWdpdCAtQyBzdWIxIHJldi1wYXJzZSBIRUFEID5leHBlY3QgJiYKKwkJCWdpdCBicmFuY2ggLXQgbW9kaWZ5X3N1YjEgb3JpZ2luL21vZGlmeV9zdWIxICYmCisJCQkkY29tbWFuZCBtb2RpZnlfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vbW9kaWZ5X3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vbW9kaWZ5X3N1YjEgJiYKKwkJCWdpdCAtQyBzdWIxIHJldi1wYXJzZSBrZWVwX2JyYW5jaCA+YWN0dWFsICYmCisJCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc3ViMSBzeW1ib2xpYy1yZWYgSEVBRAorCQkpCisJJworfQorCisjIERlY2xhcmVzIGFuZCBpbnZva2VzIHNldmVyYWwgdGVzdHMgdGhhdCwgaW4gdmFyaW91cyBzaXR1YXRpb25zLCBjaGVja3MgdGhhdAorIyB0aGUgcHJvdmlkZWQgR2l0IGNvbW1hbmQsIHdoZW4gaW52b2tlZCB3aXRoIC0tcmVjdXJzZS1zdWJtb2R1bGVzOgorIyAgLSBzdWNjZWVkcyBpbiB1cGRhdGluZyB0aGUgd29ya3RyZWUgYW5kIGluZGV4IG9mIGEgc3VwZXJwcm9qZWN0IHRvIGEgdGFyZ2V0CisjICAgIGNvbW1pdCwgb3IgZmFpbHMgYXRvbWljYWxseSAoZGVwZW5kaW5nIG9uIHRoZSB0ZXN0IHNpdHVhdGlvbikKKyMgIC0gaWYgc3VjY2VlZHMsIHRoZSBjb250ZW50cyBvZiBzdWJtb2R1bGUgZGlyZWN0b3JpZXMgYXJlIHVwZGF0ZWQKKyMKKyMgU3BlY2lmeSB0aGUgR2l0IGNvbW1hbmQgc28gdGhhdCAiZ2l0ICRHSVRfQ09NTUFORCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIKKyMgd29ya3MuCisjCisjIElmIHRoZSBjb21tYW5kIHVuZGVyIHRlc3QgaXMga25vd24gdG8gbm90IHdvcmsgd2l0aCBzdWJtb2R1bGVzIGluIGNlcnRhaW4KKyMgY29uZGl0aW9ucywgc2V0IHRoZSBhcHByb3ByaWF0ZSBLTk9XTl9GQUlMVVJFXyogdmFyaWFibGUgdXNlZCBpbiB0aGUgdGVzdHMKKyMgYmVsb3cgdG8gMS4KKyMKKyMgVXNlIGFzIGZvbGxvd3M6CisjCisjIHRlc3Rfc3VibW9kdWxlX3N3aXRjaF9yZWN1cnNpbmdfd2l0aF9hcmdzICIkR0lUX0NPTU1BTkQiCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2hfcmVjdXJzaW5nX3dpdGhfYXJncyAoKSB7CisJY21kX2FyZ3M9IiQxIgorCWNvbW1hbmQ9ImdpdCAkY21kX2FyZ3MgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCisJdGVzdF9zdWJtb2R1bGVfcmVjdXJzaW5nX3dpdGhfYXJnc19jb21tb24gIiRjb21tYW5kIgorCisJUkVTVUxURFM9c3VjY2VzcworCWlmIHRlc3QgIiRLTk9XTl9GQUlMVVJFX0RJUkVDVE9SWV9TVUJNT0RVTEVfQ09ORkxJQ1RTIiA9IDEKKwl0aGVuCisJCVJFU1VMVERTPWZhaWx1cmUKKwlmaQorCVJFU1VMVE9JPXN1Y2Nlc3MKKwlpZiB0ZXN0ICIkS05PV05fRkFJTFVSRV9TVUJNT0RVTEVfT1ZFUldSSVRFX0lHTk9SRURfVU5UUkFDS0VEIiA9IDEKKwl0aGVuCisJCVJFU1VMVE9JPWZhaWx1cmUKKwlmaQorCSMgU3dpdGNoaW5nIHRvIGEgY29tbWl0IGxldHRpbmcgYSBzdWJtb2R1bGUgYXBwZWFyIGNhbm5vdCBvdmVycmlkZSBhbgorCSMgdW50cmFja2VkIGZpbGUuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSBkb2Vzbid0IHJlbW92ZSB1bnRyYWNrZWQgZmlsZSB3aXRoIHNhbWUgbmFtZSIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgbm9fc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgYWRkX3N1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQk6ID5zdWIxICYmCisJCQl0ZXN0X211c3RfZmFpbCAkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vbm9fc3VibW9kdWxlICYmCisJCQl0ZXN0X211c3RfYmVfZW1wdHkgc3ViMQorCQkpCisJJworCSMgLi4uIGJ1dCBhbiBpZ25vcmVkIGZpbGUgaXMgZmluZS4KKwl0ZXN0X2V4cGVjdF8kUkVTVUxUT0kgIiRjb21tYW5kOiBhZGRlZCBzdWJtb2R1bGUgcmVtb3ZlcyBhbiB1bnRyYWNrZWQgaWdub3JlZCBmaWxlIiAnCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gc3VibW9kdWxlX3VwZGF0ZS8uZ2l0L2luZm8vZXhjbHVkZSIgJiYKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIG5vX3N1Ym1vZHVsZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IGFkZF9zdWIxIG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJOiA+c3ViMSAmJgorCQkJZWNobyBzdWIxID4uZ2l0L2luZm8vZXhjbHVkZSAmJgorCQkJJGNvbW1hbmQgYWRkX3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL2FkZF9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxCisJCSkKKwknCisKKwkjIFJlcGxhY2luZyBhIHN1Ym1vZHVsZSB3aXRoIGZpbGVzIGluIGEgZGlyZWN0b3J5IG11c3Qgc3VjY2VlZHMKKwkjIHdoZW4gdGhlIHN1Ym1vZHVsZSBpcyBjbGVhbgorCXRlc3RfZXhwZWN0XyRSRVNVTFREUyAiJGNvbW1hbmQ6IHJlcGxhY2Ugc3VibW9kdWxlIHdpdGggYSBkaXJlY3RvcnkiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5IG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkgJiYKKwkJCSRjb21tYW5kIHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL3JlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeQorCQkpCisJJworCSMgLi4uIGFic29yYmluZyBhIC5naXQgZGlyZWN0b3J5LgorCXRlc3RfZXhwZWN0XyRSRVNVTFREUyAiJGNvbW1hbmQ6IHJlcGxhY2Ugc3VibW9kdWxlIGNvbnRhaW5pbmcgYSAuZ2l0IGRpcmVjdG9yeSB3aXRoIGEgZGlyZWN0b3J5IG11c3QgYWJzb3JiIHRoZSBnaXQgZGlyIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG9faW50ZXJlc3RlZCBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCQlyZXBsYWNlX2dpdGZpbGVfd2l0aF9naXRfZGlyIHN1YjEgJiYKKwkJCXJtIC1yZiAuZ2l0L21vZHVsZXMgJiYKKwkJCSRjb21tYW5kIHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCQl0ZXN0X2dpdF9kaXJlY3RvcnlfZXhpc3RzIHN1YjEKKwkJKQorCScKKworCSMgLi4uIGFuZCBpZ25vcmVkIGZpbGVzIGFyZSBpZ25vcmVkCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IHJlcGxhY2Ugc3VibW9kdWxlIHdpdGggYSBmaWxlIHdvcmtzIGlnbm9yZXMgaWdub3JlZCBmaWxlcyBpbiBzdWJtb2R1bGUiICcKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBzdWJtb2R1bGVfdXBkYXRlLy5naXQvbW9kdWxlcy9zdWIxL2luZm8vZXhjbHVkZSIgJiYKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSAmJgorCQkJZWNobyBpZ25vcmVkID4uZ2l0L21vZHVsZXMvc3ViMS9pbmZvL2V4Y2x1ZGUgJiYKKwkJCTogPnN1YjEvaWdub3JlZCAmJgorCQkJJGNvbW1hbmQgcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSAmJgorCQkJdGVzdCAtZiBzdWIxCisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQgLWMgc3VibW9kdWxlLnJlY3Vyc2U9dHJ1ZSAkY21kX2FyZ3M6IG1vZGlmaWVkIHN1Ym1vZHVsZSB1cGRhdGVzIHN1Ym1vZHVsZSB3b3JrIHRyZWUiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgbW9kaWZ5X3N1YjEgb3JpZ2luL21vZGlmeV9zdWIxICYmCisJCQlnaXQgLWMgc3VibW9kdWxlLnJlY3Vyc2U9dHJ1ZSAkY21kX2FyZ3MgbW9kaWZ5X3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL21vZGlmeV9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL21vZGlmeV9zdWIxCisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogbW9kaWZpZWQgc3VibW9kdWxlIHVwZGF0ZXMgc3VibW9kdWxlIHJlY3Vyc2l2ZWx5IiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG9faW50ZXJlc3RlZCBhZGRfbmVzdGVkX3N1YiAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IG1vZGlmeV9zdWIxX3JlY3Vyc2l2ZWx5IG9yaWdpbi9tb2RpZnlfc3ViMV9yZWN1cnNpdmVseSAmJgorCQkJJGNvbW1hbmQgbW9kaWZ5X3N1YjFfcmVjdXJzaXZlbHkgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL21vZGlmeV9zdWIxX3JlY3Vyc2l2ZWx5ICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL21vZGlmeV9zdWIxX3JlY3Vyc2l2ZWx5ICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IC1DIHN1YjEgc3ViMiBvcmlnaW4vbW9kaWZ5X3N1YjFfcmVjdXJzaXZlbHkKKwkJKQorCScKK30KKworIyBTYW1lIGFzIHRlc3Rfc3VibW9kdWxlX3N3aXRjaF9yZWN1cnNpbmdfd2l0aF9hcmdzKCksIGV4Y2VwdCB0aGF0IHRocm93aW5nCisjIGF3YXkgbG9jYWwgY2hhbmdlcyBpbiB0aGUgc3VwZXJwcm9qZWN0IGlzIGFsbG93ZWQuCit0ZXN0X3N1Ym1vZHVsZV9mb3JjZWRfc3dpdGNoX3JlY3Vyc2luZ193aXRoX2FyZ3MgKCkgeworCWNtZF9hcmdzPSIkMSIKKwljb21tYW5kPSJnaXQgJGNtZF9hcmdzIC0tcmVjdXJzZS1zdWJtb2R1bGVzIgorCXRlc3Rfc3VibW9kdWxlX3JlY3Vyc2luZ193aXRoX2FyZ3NfY29tbW9uICIkY29tbWFuZCIKKworCVJFU1VMVD1zdWNjZXNzCisJaWYgdGVzdCAiJEtOT1dOX0ZBSUxVUkVfRElSRUNUT1JZX1NVQk1PRFVMRV9DT05GTElDVFMiID0gMQorCXRoZW4KKwkJUkVTVUxUPWZhaWx1cmUKKwlmaQorCSMgU3dpdGNoaW5nIHRvIGEgY29tbWl0IGxldHRpbmcgYSBzdWJtb2R1bGUgYXBwZWFyIGRvZXMgbm90IGNhcmUgYWJvdXQKKwkjIGFuIHVudHJhY2tlZCBmaWxlLgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjb21tYW5kOiBhZGRlZCBzdWJtb2R1bGUgZG9lcyByZW1vdmUgdW50cmFja2VkIHVuaWdub3JlZCBmaWxlIHdpdGggc2FtZSBuYW1lIHdoZW4gZm9yY2VkIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG9faW50ZXJlc3RlZCBub19zdWJtb2R1bGUgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCBhZGRfc3ViMSBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCT5zdWIxICYmCisJCQkkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKworCSMgUmVwbGFjaW5nIGEgc3VibW9kdWxlIHdpdGggZmlsZXMgaW4gYSBkaXJlY3RvcnkgLi4uCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IHJlcGxhY2Ugc3VibW9kdWxlIHdpdGggYSBkaXJlY3RvcnkiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5IG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkgJiYKKwkJCSRjb21tYW5kIHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5CisJCSkKKwknCisJIyAuLi4gYWJzb3JiaW5nIGEgLmdpdCBkaXJlY3RvcnkuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IHJlcGxhY2Ugc3VibW9kdWxlIGNvbnRhaW5pbmcgYSAuZ2l0IGRpcmVjdG9yeSB3aXRoIGEgZGlyZWN0b3J5IG11c3QgZmFpbCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCByZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3Rvcnkgb3JpZ2luL3JlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSAmJgorCQkJcmVwbGFjZV9naXRmaWxlX3dpdGhfZ2l0X2RpciBzdWIxICYmCisJCQlybSAtcmYgLmdpdC9tb2R1bGVzL3N1YjEgJiYKKwkJCSRjb21tYW5kIHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCQl0ZXN0X2dpdF9kaXJlY3RvcnlfZXhpc3RzIHN1YjEKKwkJKQorCScKKworCSMgLi4uIGV2ZW4gaWYgdGhlIHN1Ym1vZHVsZSBjb250YWlucyBpZ25vcmVkIGZpbGVzCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IHJlcGxhY2Ugc3VibW9kdWxlIHdpdGggYSBmaWxlIGlnbm9yaW5nIGlnbm9yZWQgZmlsZXMiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSAmJgorCQkJOiA+c3ViMS9leHBlY3QgJiYKKwkJCSRjb21tYW5kIHJlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL3JlcGxhY2Vfc3ViMV93aXRoX2ZpbGUKKwkJKQorCScKKworCSMgVXBkYXRpbmcgYSBzdWJtb2R1bGUgZnJvbSBhbiBpbnZhbGlkIHNoYTEgdXBkYXRlcworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjb21tYW5kOiBtb2RpZmllZCBzdWJtb2R1bGUgZG9lcyB1cGRhdGUgc3VibW9kdWxlIHdvcmsgdHJlZSBmcm9tIGludmFsaWQgY29tbWl0IiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG9faW50ZXJlc3RlZCBpbnZhbGlkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCB2YWxpZF9zdWIxIG9yaWdpbi92YWxpZF9zdWIxICYmCisJCQkkY29tbWFuZCB2YWxpZF9zdWIxICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi92YWxpZF9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL3ZhbGlkX3N1YjEKKwkJKQorCScKKworCSMgT2xkIHZlcnNpb25zIG9mIEdpdCB3ZXJlIGJ1Z2d5IHdyaXRpbmcgdGhlIC5naXQgbGluayBmaWxlCisJIyAoZS5nLiBiZWZvcmUgZjhlYWEwYmE5OGIgYW5kIHRoZW4gbW92aW5nIHRoZSBzdXBlcnByb2plY3QgcmVwbworCSMgd2hvc2Ugc3VibW9kdWxlcyBjb250YWluZWQgYWJzb2x1dGUgcGF0aHMpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IHVwZGF0aW5nIHN1Ym1vZHVsZXMgZml4ZXMgLmdpdCBsaW5rcyIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCBtb2RpZnlfc3ViMSBvcmlnaW4vbW9kaWZ5X3N1YjEgJiYKKwkJCWVjaG8gImdpdGRpcjogYm9ndXMvcGF0aCIgPnN1YjEvLmdpdCAmJgorCQkJJGNvbW1hbmQgbW9kaWZ5X3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL21vZGlmeV9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL21vZGlmeV9zdWIxCisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogY2hhbmdlZCBzdWJtb2R1bGUgd29ya3RyZWUgaXMgcmVzZXQiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCXJtIHN1YjEvZmlsZTEgJiYKKwkJCTogPnN1YjEvbmV3X2ZpbGUgJiYKKwkJCWdpdCAtQyBzdWIxIGFkZCBuZXdfZmlsZSAmJgorCQkJJGNvbW1hbmQgSEVBRCAmJgorCQkJdGVzdF9wYXRoX2lzX2ZpbGUgc3ViMS9maWxlMSAmJgorCQkJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3ViMS9uZXdfZmlsZQorCQkpCisJJworfQpkaWZmIC0tZ2l0IGEvdC9saWItdDYwMDAuc2ggYi90L2xpYi10NjAwMC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGVkNDc2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItdDYwMDAuc2gKQEAgLTAsMCArMSwxMzcgQEAKKzogaW5jbHVkZWQgZnJvbSA2MDAyIGFuZCBvdGhlcnMKKworbWtkaXIgLXAgLmdpdC9yZWZzL3RhZ3MKKworPnNlZC5zY3JpcHQKKworIyBBbnN3ZXIgdGhlIHNoYTEgaGFzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnLiBUaGUgdGFnIG11c3QgZXhpc3QgdW5kZXIgcmVmcy90YWdzCit0YWcgKCkgeworCV90YWc9JDEKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJyZWZzL3RhZ3MvJF90YWciIHx8CisJZXJyb3IgInRhZzogXCIkX3RhZ1wiIGRvZXMgbm90IGV4aXN0IgorfQorCisjIEdlbmVyYXRlIGEgY29tbWl0IHVzaW5nIHRoZSB0ZXh0IHNwZWNpZmllZCB0byBtYWtlIGl0IHVuaXF1ZSBhbmQgdGhlIHRyZWUKKyMgbmFtZWQgYnkgdGhlIHRhZyBzcGVjaWZpZWQuCit1bmlxdWVfY29tbWl0ICgpIHsKKwlfdGV4dD0kMQorCV90cmVlPSQyCisJc2hpZnQgMgorCWVjaG8gIiRfdGV4dCIgfCBnaXQgY29tbWl0LXRyZWUgJCh0YWcgIiRfdHJlZSIpICIkQCIKK30KKworIyBTYXZlIHRoZSBvdXRwdXQgb2YgYSBjb21tYW5kIGludG8gdGhlIHRhZyBzcGVjaWZpZWQuIFByZXBlbmQKKyMgYSBzdWJzdGl0dXRpb24gc2NyaXB0IGZvciB0aGUgdGFnIG9udG8gdGhlIGZyb250IG9mIHNlZC5zY3JpcHQKK3NhdmVfdGFnICgpIHsKKwlfdGFnPSQxCisJdGVzdCAtbiAiJF90YWciIHx8IGVycm9yICJ1c2FnZTogc2F2ZV90YWcgdGFnIGNvbW1pdC1hcmdzIC4uLiIKKwlzaGlmdCAxCisJIiRAIiA+Ii5naXQvcmVmcy90YWdzLyRfdGFnIgorCisJZWNobyAicy8kKHRhZyAkX3RhZykvJF90YWcvZyIgPnNlZC5zY3JpcHQudG1wCisJY2F0IHNlZC5zY3JpcHQgPj5zZWQuc2NyaXB0LnRtcAorCXJtIHNlZC5zY3JpcHQKKwltdiBzZWQuc2NyaXB0LnRtcCBzZWQuc2NyaXB0Cit9CisKKyMgUmVwbGFjZSB1bmhlbHBmdWwgc2hhMSBoYXNoZXMgd2l0aCB0aGVpciBzeW1ib2xpYyBlcXVpdmFsZW50cworZW50YWcgKCkgeworCXNlZCAtZiBzZWQuc2NyaXB0Cit9CisKKyMgRXhlY3V0ZSBhIGNvbW1hbmQgYWZ0ZXIgZmlyc3Qgc2F2aW5nLCB0aGVuIHNldHRpbmcgdGhlIEdJVF9BVVRIT1JfRU1BSUwKKyMgdGFnIHRvIGEgc3BlY2lmaWVkIHZhbHVlLiBSZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBvbiByZXR1cm4uCithc19hdXRob3IgKCkgeworCV9hdXRob3I9JDEKKwlzaGlmdCAxCisJX3NhdmU9JEdJVF9BVVRIT1JfRU1BSUwKKworCUdJVF9BVVRIT1JfRU1BSUw9IiRfYXV0aG9yIgorCWV4cG9ydCBHSVRfQVVUSE9SX0VNQUlMCisJIiRAIgorCWlmIHRlc3QgLXogIiRfc2F2ZSIKKwl0aGVuCisJCXVuc2V0IEdJVF9BVVRIT1JfRU1BSUwKKwllbHNlCisJCUdJVF9BVVRIT1JfRU1BSUw9IiRfc2F2ZSIKKwkJZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwKKwlmaQorfQorCitjb21taXRfZGF0ZSAoKSB7CisJX2NvbW1pdD0kMQorCWdpdCBjYXQtZmlsZSBjb21taXQgJF9jb21taXQgfAorCXNlZCAtbiAicy9eY29tbWl0dGVyIC4qPiBcKFswLTldKlwpIC4qL1wxL3AiCit9CisKKyMgQXNzaWduIHRoZSB2YWx1ZSBvZiBmYWtlIGRhdGUgdG8gYSB2YXJpYWJsZSwgYnV0CisjIGFsbG93IGZhaXJseSBjb21tb24gIjE5NzEtMDgtMTYgMDA6MDAiIHRvIGJlIG9taXR0ZAorYXNzaWduX2Zha2VfZGF0ZSAoKSB7CisJY2FzZSAiJDIiIGluCisJPz86Pz86Pz8pCWV2YWwgIiQxPScxOTcxLTA4LTE2ICQyJyIgOzsKKwk/Pzo/PykJCWV2YWwgIiQxPScxOTcxLTA4LTE2IDAwOiQyJyIgOzsKKwk/PykJCWV2YWwgIiQxPScxOTcxLTA4LTE2IDAwOjAwOiQyJyIgOzsKKwkqKQkJZXZhbCAiJDE9JyQyJyIgOzsKKwllc2FjCit9CisKK29uX2NvbW1pdHRlcl9kYXRlICgpIHsKKwlhc3NpZ25fZmFrZV9kYXRlIEdJVF9DT01NSVRURVJfREFURSAiJDEiCisJZXhwb3J0IEdJVF9DT01NSVRURVJfREFURQorCXNoaWZ0IDEKKwkiJEAiCit9CisKK29uX2RhdGVzICgpIHsKKwlhc3NpZ25fZmFrZV9kYXRlIEdJVF9DT01NSVRURVJfREFURSAiJDEiCisJYXNzaWduX2Zha2VfZGF0ZSBHSVRfQVVUSE9SX0RBVEUgIiQyIgorCWV4cG9ydCBHSVRfQ09NTUlUVEVSX0RBVEUgR0lUX0FVVEhPUl9EQVRFCisJc2hpZnQgMgorCSIkQCIKK30KKworIyBFeGVjdXRlIGEgY29tbWFuZCBhbmQgc3VwcHJlc3MgYW55IGVycm9yIG91dHB1dC4KK2hpZGVfZXJyb3IgKCkgeworCSIkQCIgMj4vZGV2L251bGwKK30KKworY2hlY2tfb3V0cHV0ICgpIHsKKwlfbmFtZT0kMQorCXNoaWZ0IDEKKwlpZiBldmFsICIkKiIgfCBlbnRhZyA+IiRfbmFtZS5hY3R1YWwiCisJdGhlbgorCQl0ZXN0X2NtcCAiJF9uYW1lLmV4cGVjdGVkIiAiJF9uYW1lLmFjdHVhbCIKKwllbHNlCisJCXJldHVybiAxCisJZmkKK30KKworIyBUdXJuIGEgcmVhc29uYWJsZSB0ZXN0IGRlc2NyaXB0aW9uIGludG8gYSByZWFzb25hYmxlIHRlc3QgbmFtZS4KKyMgQWxsIGFscGhhbnVtcyB0cmFuc2xhdGVkIGludG8gLSdzIHdoaWNoIGFyZSB0aGVuIGNvbXByZXNzZWQgYW5kIHN0cmlwcGVkCisjIGZyb20gZnJvbnQgYW5kIGJhY2suCituYW1lX2Zyb21fZGVzY3JpcHRpb24gKCkgeworCXBlcmwgLXBlICcKKwkJcy9bXkEtWmEtejAtOS5dLy0vZzsKKwkJcy8tKy8tL2c7CisJCXMvLSQvLzsKKwkJcy9eLS8vOworCQl5L0EtWi9hLXovOworCScKK30KKworCisjIEV4ZWN1dGUgdGhlIHRlc3QgZGVzY3JpYmVkIGJ5IHRoZSBmaXJzdCBhcmd1bWVudCwgYnkgZXZhbCdpbmcKKyMgY29tbWFuZCBsaW5lIHNwZWNpZmllZCBpbiB0aGUgMm5kIGFyZ3VtZW50LiBDaGVjayB0aGUgc3RhdHVzIGNvZGUKKyMgaXMgemVybyBhbmQgdGhhdCB0aGUgb3V0cHV0IG1hdGNoZXMgdGhlIHN0cmVhbSByZWFkIGZyb20KKyMgc3RkaW4uCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcygpCit7CisJX2Rlc2NyaXB0aW9uPSQxCisJX3Rlc3Q9JDIKKwl0ZXN0ICQjIC1lcSAyIHx8CisJZXJyb3IgInVzYWdlOiB0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyBkZXNjcmlwdGlvbiB0ZXN0IDw8RU9GIC4uLiBFT0YiCisKKwlfbmFtZT0kKGVjaG8gJF9kZXNjcmlwdGlvbiB8IG5hbWVfZnJvbV9kZXNjcmlwdGlvbikKKwljYXQgPiIkX25hbWUuZXhwZWN0ZWQiCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJF9kZXNjcmlwdGlvbiIgImNoZWNrX291dHB1dCAkX25hbWUgXCIkX3Rlc3RcIiIKK30KZGlmZiAtLWdpdCBhL3QvbGliLXRlcm1pbmFsLnNoIGIvdC9saWItdGVybWluYWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM4MDlkYwotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLXRlcm1pbmFsLnNoCkBAIC0wLDAgKzEsMzYgQEAKKyMgSGVscGVycyBmb3IgdGVybWluYWwgb3V0cHV0IHRlc3RzLgorCisjIENhdGNoIHRlc3RzIHdoaWNoIHNob3VsZCBkZXBlbmQgb24gVFRZIGJ1dCBmb3Jnb3QgdG8uIFRoZXJlJ3Mgbm8gbmVlZAorIyB0byBhZGRpdGlvbmFsbHkgY2hlY2sgdGhhdCB0aGUgVFRZIHByZXJlcSBpcyBzZXQgaGVyZS4gIElmIHRoZSB0ZXN0IGRlY2xhcmVkCisjIGl0IGFuZCB3ZSBhcmUgcnVubmluZyB0aGUgdGVzdCwgdGhlbiBpdCBtdXN0IGhhdmUgYmVlbiBzZXQuCit0ZXN0X3Rlcm1pbmFsICgpIHsKKwlpZiAhIHRlc3RfZGVjbGFyZWRfcHJlcmVxIFRUWQorCXRoZW4KKwkJZWNobyA+JjQgInRlc3RfdGVybWluYWw6IG5lZWQgdG8gZGVjbGFyZSBUVFkgcHJlcmVxdWlzaXRlIgorCQlyZXR1cm4gMTI3CisJZmkKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtdGVybWluYWwucGVybCAiJEAiIDI+JjcKK30gNz4mMiAyPiY0CisKK3Rlc3RfbGF6eV9wcmVyZXEgVFRZICcKKwl0ZXN0X2hhdmVfcHJlcmVxIFBFUkwgJiYKKworCSMgUmVhZGluZyBmcm9tIHRoZSBwdHkgbWFzdGVyIHNlZW1zIHRvIGdldCBzdHVjayBfc29tZXRpbWVzXworCSMgb24gTWFjIE9TIFggMTAuNS4wLCB1c2luZyBQZXJsIDUuMTAuMCBvciA1LjguOS4KKwkjCisJIyBSZXByb2R1Y3Rpb24gcmVjaXBlOiBydW4KKwkjCisJIwlpPTAKKwkjCXdoaWxlIC4vdGVzdC10ZXJtaW5hbC5wZXJsIGVjaG8gaGkgJGkKKwkjCWRvCisJIwkJOiAkKChpID0gJGkgKyAxKSkKKwkjCWRvbmUKKwkjCisJIyBBZnRlciAyMDAwIGl0ZXJhdGlvbnMgb3Igc28gaXQgaGFuZ3MuCisJIyBodHRwczovL3J0LmNwYW4ub3JnL1RpY2tldC9EaXNwbGF5Lmh0bWw/aWQ9NjU2OTIKKwkjCisJdGVzdCAiJCh1bmFtZSAtcykiICE9IERhcndpbiAmJgorCisJcGVybCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LXRlcm1pbmFsLnBlcmwgXAorCQlzaCAtYyAidGVzdCAtdCAxICYmIHRlc3QgLXQgMiIKKycKZGlmZiAtLWdpdCBhL3Qvb2lkLWluZm8vUkVBRE1FIGIvdC9vaWQtaW5mby9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Qvb2lkLWluZm8vUkVBRE1FCkBAIC0wLDAgKzEsMTkgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHZhcmlvdXMgcGVyLWhhc2ggdmFsdWVzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHRlc3RzdWl0ZS4KKworRWFjaCBmaWxlIGNvbnRhaW5zIGxpbmVzIGNvbnRhaW5pbmcgYSBrZXktdmFsdWUgcGFpcjsgYmxhbmsgbGluZXMgYW5kIGxpbmVzCitzdGFydGluZyB3aXRoIGAjYCBhcmUgaWdub3JlZC4gIFRoZSBrZXkgYW5kIHZhbHVlIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZQorKHNwZWNpZmljYWxseSwgdGhvc2Ugd2hpdGVzcGFjZSBpbiB0aGUgZGVmYXVsdCBgJElGU2ApLiAgVGhlIGtleSBjb25zaXN0cyBvbmx5CitvZiBzaGVsbCBpZGVudGlmaWVyIGNoYXJhY3RlcnMsIGFuZCB0aGUgdmFsdWUgY29uc2lzdHMgb2YgYSBoYXNoIGFsZ29yaXRobSwKK2NvbG9uLCBhbmQgdmFsdWUuICBUaGUgaGFzaCBhbGdvcml0aG0gYWxzbyBjb25zaXN0cyBvbmx5IG9mIHNoZWxsIGlkZW50aWZpZXIKK2NoYXJhY3RlcnM7IGl0IHNob3VsZCBtYXRjaCB0aGUgdmFsdWUgaW4gc2hhMS1maWxlLmMuCisKK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGxpbmVzIG1hcCB0aGUga2V5ICJyYXdzeiIgdG8gIjIwIiBpZiBTSEEtMSBpcyBpbiB1c2UKK2FuZCB0byAiMzIiIGlmIFNIQS0yNTYgaXMgaW4gdXNlOgorCistLS0tCityYXdzeiBzaGExOjIwCityYXdzeiBzaGEyNTY6MzIKKy0tLS0KKworVGhlIGtleXMgYW5kIHZhbHVlcyB1c2VkIGhlcmUgYXJlIGxvYWRlZCBieSBgdGVzdF9vaWRfaW5pdGAgKHNlZSB0aGUgUkVBRE1FIGZpbGUKK2luIHRoZSAidCIgZGlyZWN0b3J5KSBhbmQgYXJlIHVzZWQgYnkgY2FsbGluZyBgdGVzdF9vaWRgLgpkaWZmIC0tZ2l0IGEvdC9vaWQtaW5mby9oYXNoLWluZm8gYi90L29pZC1pbmZvL2hhc2gtaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDczNmRkCi0tLSAvZGV2L251bGwKKysrIGIvdC9vaWQtaW5mby9oYXNoLWluZm8KQEAgLTAsMCArMSwxNyBAQAorcmF3c3ogc2hhMToyMAorcmF3c3ogc2hhMjU2OjMyCisKK2hleHN6IHNoYTE6NDAKK2hleHN6IHNoYTI1Njo2NAorCit6ZXJvIHNoYTE6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoremVybyBzaGEyNTY6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCithbGdvIHNoYTE6c2hhMQorYWxnbyBzaGEyNTY6c2hhMjU2CisKK2VtcHR5X2Jsb2Igc2hhMTplNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCitlbXB0eV9ibG9iIHNoYTI1Njo0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzCisKK2VtcHR5X3RyZWUgc2hhMTo0YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0CitlbXB0eV90cmVlIHNoYTI1Njo2ZWYxOWI0MTIyNWM1MzY5ZjFjMTA0ZDQ1ZDhkODVlZmE5YjA1N2I1M2IxNGI0YjliOTM5ZGQ3NGRlY2M1MzIxCmRpZmYgLS1naXQgYS90L29pZC1pbmZvL29pZCBiL3Qvb2lkLWluZm8vb2lkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NTQ5NzAKLS0tIC9kZXYvbnVsbAorKysgYi90L29pZC1pbmZvL29pZApAQCAtMCwwICsxLDI5IEBACisjIFRoZXNlIGFyZSBzb21lIGNvbW1vbiBpbnZhbGlkIGFuZCBwYXJ0aWFsIG9iamVjdCBJRHMgdXNlZCBpbiB0ZXN0cy4KKzAwMQlzaGExOjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKKzAwMQlzaGEyNTY6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorMDAyCXNoYTE6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorMDAyCXNoYTI1NjowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCiswMDMJc2hhMTowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCiswMDMJc2hhMjU2OjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzAwNAlzaGExOjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzAwNAlzaGEyNTY6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorMDA1CXNoYTE6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorMDA1CXNoYTI1NjowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CiswMDYJc2hhMTowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2CiswMDYJc2hhMjU2OjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzAwNwlzaGExOjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKKzAwNwlzaGEyNTY6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworIyBBbGwgemVyb3Mgb3IgRnMgbWlzc2luZyBvbmUgb3IgdHdvIGhleCBzZWdtZW50cy4KK3plcm9fMQkJc2hhMTowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK3plcm9fMQkJc2hhMjU2OjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoremVyb18yCQlzaGExOjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCit6ZXJvXzIJCXNoYTI1NjowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZmZfMQkJc2hhMTpmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKK2ZmXzEJCXNoYTI1NjpmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKK2ZmXzIJCXNoYTE6ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKK2ZmXzIJCXNoYTI1NjpmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgorIyBNb3JlIHZhcmlvdXMgaW52YWxpZCBPSURzLgorbnVtZXJpYwkJc2hhMTowMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5CitudW1lcmljCQlzaGEyNTY6MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZGVhZGJlZWYJc2hhMTpkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmCitkZWFkYmVlZglzaGEyNTY6ZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZgpkaWZmIC0tZ2l0IGEvdC9wZXJmLy5naXRpZ25vcmUgYi90L3BlcmYvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODJlYjhlCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACisvYnVpbGQvCisvdGVzdC1yZXN1bHRzLworL3RyYXNoIGRpcmVjdG9yeSovCmRpZmYgLS1naXQgYS90L3BlcmYvTWFrZWZpbGUgYi90L3BlcmYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0NzE1NQotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9NYWtlZmlsZQpAQCAtMCwwICsxLDE1IEBACistaW5jbHVkZSAuLi8uLi9jb25maWcubWFrCitleHBvcnQgR0lUX1RFU1RfT1BUSU9OUworCithbGw6IHBlcmYKKworcGVyZjogcHJlLWNsZWFuCisJLi9ydW4KKworcHJlLWNsZWFuOgorCXJtIC1yZiB0ZXN0LXJlc3VsdHMKKworY2xlYW46CisJcm0gLXJmIGJ1aWxkICJ0cmFzaCBkaXJlY3RvcnkiLiogdGVzdC1yZXN1bHRzCisKKy5QSE9OWTogYWxsIHBlcmYgcHJlLWNsZWFuIGNsZWFuCmRpZmYgLS1naXQgYS90L3BlcmYvUkVBRE1FIGIvdC9wZXJmL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2I3MGUyCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL1JFQURNRQpAQCAtMCwwICsxLDE5NSBAQAorR2l0IHBlcmZvcm1hbmNlIHRlc3RzCis9PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkaXJlY3RvcnkgaG9sZHMgcGVyZm9ybWFuY2UgdGVzdGluZyBzY3JpcHRzIGZvciBnaXQgdG9vbHMuICBUaGUKK2ZpcnN0IHBhcnQgb2YgdGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHZhcmlvdXMgd2F5cyBpbiB3aGljaCB5b3UKK2NhbiBydW4gdGhlbS4KKworV2hlbiBmaXhpbmcgdGhlIHRvb2xzIG9yIGFkZGluZyBlbmhhbmNlbWVudHMsIHlvdSBhcmUgc3Ryb25nbHkKK2VuY291cmFnZWQgdG8gYWRkIHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IHRvIGNvdmVyIHdoYXQgeW91IGFyZQordHJ5aW5nIHRvIGZpeCBvciBlbmhhbmNlLiAgVGhlIGxhdGVyIHBhcnQgb2YgdGhpcyBzaG9ydCBkb2N1bWVudAorZGVzY3JpYmVzIGhvdyB5b3VyIHRlc3Qgc2NyaXB0cyBzaG91bGQgYmUgb3JnYW5pemVkLgorCisKK1J1bm5pbmcgVGVzdHMKKy0tLS0tLS0tLS0tLS0KKworVGhlIGVhc2llc3Qgd2F5IHRvIHJ1biB0ZXN0cyBpcyB0byBzYXkgIm1ha2UiLiAgVGhpcyBydW5zIGFsbAordGhlIHRlc3RzIG9uIHRoZSBjdXJyZW50IGdpdCByZXBvc2l0b3J5LgorCisgICAgPT09IFJ1bm5pbmcgMiB0ZXN0cyBpbiB0aGlzIHRyZWUgPT09CisgICAgWy4uLl0KKyAgICBUZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgdHJlZQorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIDAwMDEuMTogcmV2LWxpc3QgLS1hbGwgICAgICAgICAgICAgICAgICAgMC41NCgwLjUxKzAuMDIpCisgICAgMDAwMS4yOiByZXYtbGlzdCAtLWFsbCAtLW9iamVjdHMgICAgICAgICA2LjE0KDUuOTkrMC4xMSkKKyAgICA3ODEwLjE6IGdyZXAgd29ya3RyZWUsIGNoZWFwIHJlZ2V4ICAgICAgIDAuMTYoMC4xNiswLjM1KQorICAgIDc4MTAuMjogZ3JlcCB3b3JrdHJlZSwgZXhwZW5zaXZlIHJlZ2V4ICAgNy45MCgyOS43NSswLjM3KQorICAgIDc4MTAuMzogZ3JlcCAtLWNhY2hlZCwgY2hlYXAgcmVnZXggICAgICAgMy4wNygzLjAyKzAuMjUpCisgICAgNzgxMC40OiBncmVwIC0tY2FjaGVkLCBleHBlbnNpdmUgcmVnZXggICA5LjM5KDMwLjU3KzAuMjQpCisKK1lvdSBjYW4gY29tcGFyZSBtdWx0aXBsZSByZXBvc2l0b3JpZXMgYW5kIGV2ZW4gZ2l0IHJldmlzaW9ucyB3aXRoIHRoZQorJ3J1bicgc2NyaXB0OgorCisgICAgJCAuL3J1biAuIG9yaWdpbi9uZXh0IC9wYXRoL3RvL2dpdC10cmVlIHAwMDAxLXJldi1saXN0LnNoCisKK3doZXJlIC4gc3RhbmRzIGZvciB0aGUgY3VycmVudCBnaXQgdHJlZS4gIFRoZSBmdWxsIGludm9jYXRpb24gaXMKKworICAgIC4vcnVuIFs8cmV2aXNpb258ZGlyZWN0b3J5Pi4uLl0gWy0tXSBbPHRlc3Qtc2NyaXB0Pi4uLl0KKworQSAnLicgYXJndW1lbnQgaXMgaW1wbGllZCBpZiB5b3UgZG8gbm90IHBhc3MgYW55IG90aGVyCityZXZpc2lvbnMvZGlyZWN0b3JpZXMuCisKK1lvdSBjYW4gYWxzbyBtYW51YWxseSB0ZXN0IHRoaXMgb3IgYW5vdGhlciBnaXQgYnVpbGQgdHJlZSwgYW5kIHRoZW4KK2NhbGwgdGhlIGFnZ3JlZ2F0aW9uIHNjcmlwdCB0byBzdW1tYXJpemUgdGhlIHJlc3VsdHM6CisKKyAgICAkIC4vcDAwMDEtcmV2LWxpc3Quc2gKKyAgICBbLi4uXQorICAgICQgLi9ydW4gL3BhdGgvdG8vb3RoZXIvZ2l0IC0tIC4vcDAwMDEtcmV2LWxpc3Quc2gKKyAgICBbLi4uXQorICAgICQgLi9hZ2dyZWdhdGUucGVybCAuIC9wYXRoL3RvL290aGVyL2dpdCAuL3AwMDAxLXJldi1saXN0LnNoCisKK2FnZ3JlZ2F0ZS5wZXJsIGhhcyB0aGUgc2FtZSBpbnZvY2F0aW9uIGFzICdydW4nLCBpdCBqdXN0IGRvZXMgbm90IHJ1bgorYW55dGhpbmcgYmVmb3JlaGFuZC4KKworWW91IGNhbiBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgKGFsc28gaW4geW91ciBjb25maWcubWFrKToKKworICAgIEdJVF9QRVJGX1JFUEVBVF9DT1VOVAorCU51bWJlciBvZiB0aW1lcyBhIHRlc3Qgc2hvdWxkIGJlIHJlcGVhdGVkIGZvciBiZXN0LW9mLU4KKwltZWFzdXJlbWVudHMuICBEZWZhdWx0cyB0byAzLgorCisgICAgR0lUX1BFUkZfTUFLRV9PUFRTCisJT3B0aW9ucyB0byB1c2Ugd2hlbiBhdXRvbWF0aWNhbGx5IGJ1aWxkaW5nIGEgZ2l0IHRyZWUgZm9yCisJcGVyZm9ybWFuY2UgdGVzdGluZy4gRS5nLiwgLWo2IHdvdWxkIGJlIHVzZWZ1bC4gUGFzc2VkCisJZGlyZWN0bHkgdG8gbWFrZSBhcyAibWFrZSAkR0lUX1BFUkZfTUFLRV9PUFRTIi4KKworICAgIEdJVF9QRVJGX01BS0VfQ09NTUFORAorCUFuIGFyYml0cmFyeSBjb21tYW5kIHRoYXQnbGwgYmUgcnVuIGluIHBsYWNlIG9mIHRoZSBtYWtlCisJY29tbWFuZCwgaWYgc2V0IHRoZSBHSVRfUEVSRl9NQUtFX09QVFMgdmFyaWFibGUgaXMKKwlpZ25vcmVkLiBVc2VmdWwgaW4gY2FzZXMgd2hlcmUgc291cmNlIHRyZWUgY2hhbmdlcyBtaWdodAorCXJlcXVpcmUgaXNzdWluZyBhIGRpZmZlcmVudCBtYWtlIGNvbW1hbmQgdG8gZGlmZmVyZW50CisJcmV2aXNpb25zLgorCisJVGhpcyBjYW4gYmUgKGFiKXVzZWQgdG8gbW9ua2V5cGF0Y2ggb3Igb3RoZXJ3aXNlIGNoYW5nZSB0aGUKKwl0cmVlIGFib3V0IHRvIGJlIGJ1aWx0LiBOb3RlIHRoYXQgdGhlIGJ1aWxkIGRpcmVjdG9yeSBjYW4gYmUKKwlyZS11c2VkIGZvciBzdWJzZXF1ZW50IHJ1bnMgc28gdGhlIG1ha2UgY29tbWFuZCBtaWdodCBnZXQKKwlleGVjdXRlZCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSB0cmVlLCBidXQgZG9uJ3QgY291bnQgb24KKwlhbnkgb2YgdGhhdCwgdGhhdCdzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCB0aGF0IG1pZ2h0IGNoYW5nZQorCWluIHRoZSBmdXR1cmUuCisKKyAgICBHSVRfUEVSRl9SRVBPCisgICAgR0lUX1BFUkZfTEFSR0VfUkVQTworCVJlcG9zaXRvcmllcyB0byBjb3B5IGZvciB0aGUgcGVyZm9ybWFuY2UgdGVzdHMuICBUaGUgbm9ybWFsCisJcmVwbyBzaG91bGQgYmUgYXQgbGVhc3QgZ2l0LmdpdCBzaXplLiAgVGhlIGxhcmdlIHJlcG8gc2hvdWxkCisJcHJvYmFibHkgYmUgYWJvdXQgbGludXguZ2l0IHNpemUgZm9yIG9wdGltYWwgcmVzdWx0cy4KKwlCb3RoIGRlZmF1bHQgdG8gdGhlIGdpdC5naXQgeW91IGFyZSBydW5uaW5nIGZyb20uCisKK1lvdSBjYW4gYWxzbyBwYXNzIHRoZSBvcHRpb25zIHRha2VuIGJ5IG9yZGluYXJ5IGdpdCB0ZXN0czsgdGhlIG1vc3QKK3VzZWZ1bCBvbmUgaXM6CisKKy0tcm9vdD08ZGlyZWN0b3J5Pjo6CisJQ3JlYXRlICJ0cmFzaCIgZGlyZWN0b3JpZXMgdXNlZCB0byBzdG9yZSBhbGwgdGVtcG9yYXJ5IGRhdGEgZHVyaW5nCisJdGVzdGluZyB1bmRlciA8ZGlyZWN0b3J5PiwgaW5zdGVhZCBvZiB0aGUgdC8gZGlyZWN0b3J5LgorCVVzaW5nIHRoaXMgb3B0aW9uIHdpdGggYSBSQU0tYmFzZWQgZmlsZXN5c3RlbSAoc3VjaCBhcyB0bXBmcykKKwljYW4gbWFzc2l2ZWx5IHNwZWVkIHVwIHRoZSB0ZXN0IHN1aXRlLgorCisKK05hbWluZyBUZXN0cworLS0tLS0tLS0tLS0tCisKK1RoZSBwZXJmb3JtYW5jZSB0ZXN0IGZpbGVzIGFyZSBuYW1lZCBhczoKKworCXBOTk5OLWNvbW1hbmRuYW1lLWRldGFpbHMuc2gKKword2hlcmUgTiBpcyBhIGRlY2ltYWwgZGlnaXQuICBUaGUgc2FtZSBjb252ZW50aW9ucyBmb3IgY2hvb3NpbmcgTk5OTiBhcworZm9yIG5vcm1hbCB0ZXN0cyBhcHBseS4KKworCitXcml0aW5nIFRlc3RzCistLS0tLS0tLS0tLS0tCisKK1RoZSBwZXJmIHNjcmlwdCBzdGFydHMgbXVjaCBsaWtlIGEgbm9ybWFsIHRlc3Qgc2NyaXB0LCBleGNlcHQgaXQKK3NvdXJjZXMgcGVyZi1saWIuc2g6CisKKwkjIS9iaW4vc2gKKwkjCisJIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKwkjCisKKwl0ZXN0X2Rlc2NyaXB0aW9uPSd4eHggcGVyZm9ybWFuY2UgdGVzdCcKKwkuIC4vcGVyZi1saWIuc2gKKworQWZ0ZXIgdGhhdCB5b3Ugd2lsbCB3YW50IHRvIHVzZSBzb21lIG9mIHRoZSBmb2xsb3dpbmc6CisKKwl0ZXN0X3BlcmZfZnJlc2hfcmVwbyAgICAjIHNldHMgdXAgYW4gZW1wdHkgcmVwb3NpdG9yeQorCXRlc3RfcGVyZl9kZWZhdWx0X3JlcG8gICMgc2V0cyB1cCBhICJub3JtYWwiIHJlcG9zaXRvcnkKKwl0ZXN0X3BlcmZfbGFyZ2VfcmVwbyAgICAjIHNldHMgdXAgYSAibGFyZ2UiIHJlcG9zaXRvcnkKKworCXRlc3RfcGVyZl9kZWZhdWx0X3JlcG8gc3ViICAjIGRpdHRvLCBpbiBhIHN1YmRpciAic3ViIgorCisgICAgICAgIHRlc3RfY2hlY2tvdXRfd29ya3RyZWUgICMgaWYgeW91IG5lZWQgdGhlIHdvcmt0cmVlIHRvbworCitBdCBsZWFzdCBvbmUgb2YgdGhlIGZpcnN0IHR3byBpcyByZXF1aXJlZCEKKworWW91IGNhbiB1c2UgdGVzdF9leHBlY3Rfc3VjY2VzcyBhcyB1c3VhbC4gSW4gYm90aCB0ZXN0X2V4cGVjdF9zdWNjZXNzCithbmQgaW4gdGVzdF9wZXJmLCBydW5uaW5nICJnaXQiIHBvaW50cyB0byB0aGUgdmVyc2lvbiB0aGF0IGlzIGJlaW5nCitwZXJmLXRlc3RlZC4gVGhlICRNT0RFUk5fR0lUIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgZ2l0IHdyYXBwZXIgZm9yIHRoZQorY3VycmVudGx5IGNoZWNrZWQtb3V0IHZlcnNpb24gKGkuZS4sIHRoZSBvbmUgdGhhdCBtYXRjaGVzIHRoZSB0L3BlcmYKK3NjcmlwdHMgeW91IGFyZSBydW5uaW5nKS4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgc2V0dXAgdXNlcyBjb21tYW5kcwordGhhdCBvbmx5IHdvcmsgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBnaXQgdGhhbiB3aGF0IHlvdSBtaWdodCB3YW50IHRvCit0ZXN0IChidXQgb2J2aW91c2x5IHlvdXIgbmV3IGNvbW1hbmRzIG11c3Qgc3RpbGwgY3JlYXRlIGEgc3RhdGUgdGhhdCBjYW4KK2JlIHVzZWQgYnkgdGhlIG9sZGVyIHZlcnNpb24gb2YgZ2l0IHlvdSBhcmUgdGVzdGluZykuCisKK0ZvciBhY3R1YWwgcGVyZm9ybWFuY2UgdGVzdHMsIHVzZQorCisJdGVzdF9wZXJmICdkZXNjcmlwdGl2ZSBzdHJpbmcnICcKKwkJY29tbWFuZDEgJiYKKwkJY29tbWFuZDIKKwknCisKK3Rlc3RfcGVyZiBzcGF3bnMgYSBzdWJzaGVsbCwgZm9yIGxhY2sgb2YgYmV0dGVyIG9wdGlvbnMuICBUaGlzIG1lYW5zCit0aGF0CisKKyogeW91IF9tdXN0XyBleHBvcnQgYWxsIHZhcmlhYmxlcyB0aGF0IHlvdSBuZWVkIGluIHRoZSBzdWJzaGVsbAorCisqIHlvdSBfbXVzdF8gZmxhZyBhbGwgdmFyaWFibGVzIHRoYXQgeW91IHdhbnQgdG8gcGVyc2lzdCBmcm9tIHRoZQorICBzdWJzaGVsbCB3aXRoICd0ZXN0X2V4cG9ydCc6CisKKwl0ZXN0X3BlcmYgJ2Rlc2NyaXB0aXZlIHN0cmluZycgJworCQlmb289JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCXRlc3RfZXhwb3J0IGZvbworCScKKworICBUaGUgc28tZXhwb3J0ZWQgdmFyaWFibGVzIGFyZSBhdXRvbWF0aWNhbGx5IG1hcmtlZCBmb3IgZXhwb3J0IGluIHRoZQorICBzaGVsbCBleGVjdXRpbmcgdGhlIHBlcmYgdGVzdC4gIEZvciB5b3VyIGNvbnZlbmllbmNlLCB0ZXN0X2V4cG9ydCBpcworICB0aGUgc2FtZSBhcyBleHBvcnQgaW4gdGhlIG1haW4gc2hlbGwuCisKKyAgVGhpcyBmZWF0dXJlIHJlbGllcyBvbiBhIGJpdCBvZiBtYWdpYyB1c2luZyAnc2V0JyBhbmQgJ3NvdXJjZScuCisgIFdoaWxlIHdlIGhhdmUgdHJpZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgY2FuIGNvcGUgd2l0aCBlbWJlZGRlZAorICB3aGl0ZXNwYWNlIGFuZCBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMsIGl0IHdpbGwgbm90IHdvcmsgd2l0aAorICBtdWx0aS1saW5lIGRhdGEuCisKK1JhdGhlciB0aGFuIHRyYWNraW5nIHRoZSBwZXJmb3JtYW5jZSBieSBydW4tdGltZSBhcyBgdGVzdF9wZXJmYCBkb2VzLCB5b3UKK21heSBhbHNvIHRyYWNrIG91dHB1dCBzaXplIGJ5IHVzaW5nIGB0ZXN0X3NpemVgLiBUaGUgc3Rkb3V0IG9mIHRoZQorZnVuY3Rpb24gc2hvdWxkIGJlIGEgc2luZ2xlIG51bWVyaWMgdmFsdWUsIHdoaWNoIHdpbGwgYmUgY2FwdHVyZWQgYW5kCitzaG93biBpbiB0aGUgYWdncmVnYXRlZCBvdXRwdXQuIEZvciBleGFtcGxlOgorCisJdGVzdF9wZXJmICd0aW1lIGZvbycgJworCQkuL2ZvbyA+Zm9vLm91dAorCScKKworCXRlc3Rfc2l6ZSAnb3V0cHV0IHNpemUnCisJCXdjIC1jIDxmb28ub3V0CisJJworCittaWdodCBwcm9kdWNlIG91dHB1dCBsaWtlOgorCisJVGVzdCAgICAgICAgICAgICAgICBvcmlnaW4gICAgICAgICAgIEhFQUQKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJMTIzNC4xIHRpbWUgZm9vICAgICAwLjM3KDAuNzkrMC4wMikgIDAuMjYoMC41MSswLjAyKSAtMjkuNyUKKwkxMjM0LjIgb3V0cHV0IHNpemUgICAgICAgICAgICAgNC4zTSAgICAgICAgICAgICAzLjZNIC0xNC43JQorCitUaGUgaXRlbSBiZWluZyBtZWFzdXJlZCAoYW5kIGl0cyB1bml0cykgaXMgdXAgdG8gdGhlIHRlc3Q7IHRoZSBjb250ZXh0CithbmQgdGhlIHRlc3QgdGl0bGUgc2hvdWxkIG1ha2UgaXQgY2xlYXIgdG8gdGhlIHVzZXIgd2hldGhlciBiaWdnZXIgb3IKK3NtYWxsZXIgbnVtYmVycyBhcmUgYmV0dGVyLiBVbmxpa2UgdGVzdF9wZXJmLCB0aGUgdGVzdCBjb2RlIHdpbGwgb25seSBiZQorcnVuIG9uY2UsIHNpbmNlIG91dHB1dCBzaXplcyB0ZW5kIHRvIGJlIG1vcmUgZGV0ZXJtaW5pc3RpYyB0aGFuIHRpbWluZ3MuCmRpZmYgLS1naXQgYS90L3BlcmYvYWdncmVnYXRlLnBlcmwgYi90L3BlcmYvYWdncmVnYXRlLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTRlNGNkYQotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9hZ2dyZWdhdGUucGVybApAQCAtMCwwICsxLDM1NiBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBsaWIgJy4uLy4uL3BlcmwvYnVpbGQvbGliJzsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgR2V0b3B0OjpMb25nOwordXNlIEN3ZCBxdyhyZWFscGF0aCk7CisKK3N1YiBnZXRfdGltZXMgeworCW15ICRuYW1lID0gc2hpZnQ7CisJb3BlbiBteSAkZmgsICI8IiwgJG5hbWUgb3IgcmV0dXJuIHVuZGVmOworCW15ICRsaW5lID0gPCRmaD47CisJcmV0dXJuIHVuZGVmIGlmIG5vdCBkZWZpbmVkICRsaW5lOworCWNsb3NlICRmaCBvciBkaWUgImNhbm5vdCBjbG9zZSAkbmFtZTogJCEiOworCSMgdGltZXMKKwlpZiAoJGxpbmUgPX4gL14oPzooXGQrKTopPyhcZCspOihcZCsoPzpcLlxkKyk/KSAoXGQrKD86XC5cZCspPykgKFxkKyg/OlwuXGQrKT8pJC8pIHsKKwkJbXkgJHJ0ID0gKChkZWZpbmVkICQxID8gJDEgOiAwLjApKjYwKyQyKSo2MCskMzsKKwkJcmV0dXJuICgkcnQsICQ0LCAkNSk7CisJIyBzaXplCisJfSBlbHNpZiAoJGxpbmUgPX4gL15cZCskLykgeworCQlyZXR1cm4gJCY7CisJfSBlbHNlIHsKKwkJZGllICJiYWQgaW5wdXQgbGluZTogJGxpbmUiOworCX0KK30KKworc3ViIHJlbGF0aXZlX2NoYW5nZSB7CisJbXkgKCRyLCAkZmlyc3RyKSA9IEBfOworCWlmICgkZmlyc3RyID4gMCkgeworCQlyZXR1cm4gc3ByaW50ZiAiJSsuMWYlJSIsIDEwMC4wKigkci0kZmlyc3RyKS8kZmlyc3RyOworCX0gZWxzaWYgKCRyID09IDApIHsKKwkJcmV0dXJuICI9IjsKKwl9IGVsc2UgeworCQlyZXR1cm4gIitpbmYiOworCX0KK30KKworc3ViIGZvcm1hdF90aW1lcyB7CisJbXkgKCRyLCAkdSwgJHMsICRmaXJzdHIpID0gQF87CisJIyBubyB2YWx1ZSBtZWFucyB3ZSBkaWQgbm90IGZpbmlzaCB0aGUgdGVzdAorCWlmICghZGVmaW5lZCAkcikgeworCQlyZXR1cm4gIjxtaXNzaW5nPiI7CisJfQorCSMgYSBzaW5nbGUgdmFsdWUgbWVhbnMgd2UgaGF2ZSBhIHNpemUsIG5vdCB0aW1lcworCWlmICghZGVmaW5lZCAkdSkgeworCQlyZXR1cm4gZm9ybWF0X3NpemUoJHIsICRmaXJzdHIpOworCX0KKwkjIG90aGVyd2lzZSwgd2UgaGF2ZSByZWFsL3VzZXIvc3lzdGVtIHRpbWVzCisJbXkgJG91dCA9IHNwcmludGYgIiUuMmYoJS4yZislLjJmKSIsICRyLCAkdSwgJHM7CisJJG91dCAuPSAnICcgLiByZWxhdGl2ZV9jaGFuZ2UoJHIsICRmaXJzdHIpIGlmIGRlZmluZWQgJGZpcnN0cjsKKwlyZXR1cm4gJG91dDsKK30KKworc3ViIHVzYWdlIHsKKwlwcmludCA8PEVPVDsKKy4vYWdncmVnYXRlLnBlcmwgW29wdGlvbnNdIFstLV0gWzxkaXJfb3JfcmV2Pi4uLl0gWy0tXSBbPHRlc3Rfc2NyaXB0Pi4uLl0gPgorCisgIE9wdGlvbnM6CisgICAgLS1jb2Rlc3BlZWQgICAgICAgICAgKiBGb3JtYXQgb3V0cHV0IGZvciBDb2Rlc3BlZWQKKyAgICAtLXJlcG9uYW1lICAgIDxzdHI+ICAqIFNlbmQgZ2l2ZW4gcmVwb25hbWUgdG8gY29kZXNwZWVkCisgICAgLS1zb3J0LWJ5ICAgICA8c3RyPiAgKiBTb3J0IG91dHB1dCAob25seSAicmVncmVzc2lvbiIgY3JpdGVyaWEgaXMgc3VwcG9ydGVkKQorICAgIC0tc3Vic2VjdGlvbiAgPHN0cj4gICogVXNlIHJlc3VsdHMgZnJvbSBnaXZlbiBzdWJzZWN0aW9uCisKK0VPVAorCWV4aXQoMSk7Cit9CisKK3N1YiBodW1hbl9zaXplIHsKKwlteSAkbiA9IHNoaWZ0OworCW15IEB1bml0cyA9ICgnJywgcXcoSyBNIEcpKTsKKwl3aGlsZSAoJG4gPiA5MDAgJiYgQHVuaXRzID4gMSkgeworCQkkbiAvPSAxMDAwOworCQlzaGlmdCBAdW5pdHM7CisJfQorCXJldHVybiAkbiB1bmxlc3MgbGVuZ3RoICR1bml0c1swXTsKKwlyZXR1cm4gc3ByaW50ZiAnJS4xZiVzJywgJG4sICR1bml0c1swXTsKK30KKworc3ViIGZvcm1hdF9zaXplIHsKKwlteSAoJHNpemUsICRmaXJzdCkgPSBAXzsKKwkjIG1hdGNoIHRoZSB3aWR0aCBvZiBhIHRpbWU6IDAuMDAoMC4wMCswLjAwKQorCW15ICRvdXQgPSBzcHJpbnRmICclMTVzJywgaHVtYW5fc2l6ZSgkc2l6ZSk7CisJJG91dCAuPSAnICcgLiByZWxhdGl2ZV9jaGFuZ2UoJHNpemUsICRmaXJzdCkgaWYgZGVmaW5lZCAkZmlyc3Q7CisJcmV0dXJuICRvdXQ7Cit9CisKK3N1YiBzYW5lX2JhY2t0aWNrcyB7CisJb3BlbihteSAkZmgsICctfCcsIEBfKTsKKwlyZXR1cm4gPCRmaD47Cit9CisKK215IChAZGlycywgJWRpcm5hbWVzLCAlZGlyYWJicmV2cywgJXByZWZpeGVzLCBAdGVzdHMsCisgICAgJGNvZGVzcGVlZCwgJHNvcnRieSwgJHN1YnNlY3Rpb24sICRyZXBvbmFtZSk7CisKK0dldG9wdDo6TG9uZzo6Q29uZmlndXJlIHF3LyByZXF1aXJlX29yZGVyIC87CisKK215ICRyYyA9IEdldE9wdGlvbnMoImNvZGVzcGVlZCIgICAgID0+IFwkY29kZXNwZWVkLAorCQkgICAgInJlcG9uYW1lPXMiICAgID0+IFwkcmVwb25hbWUsCisJCSAgICAic29ydC1ieT1zIiAgICAgPT4gXCRzb3J0YnksCisJCSAgICAic3Vic2VjdGlvbj1zIiAgPT4gXCRzdWJzZWN0aW9uKTsKK3VzYWdlKCkgdW5sZXNzICRyYzsKKword2hpbGUgKHNjYWxhciBAQVJHVikgeworCW15ICRhcmcgPSAkQVJHVlswXTsKKwlteSAkZGlyOworCW15ICRwcmVmaXggPSAnJzsKKwlsYXN0IGlmIC1mICRhcmcgb3IgJGFyZyBlcSAiLS0iOworCWlmICghIC1kICRhcmcpIHsKKwkJbXkgJHJldiA9IHNhbmVfYmFja3RpY2tzKHF3KGdpdCByZXYtcGFyc2UgLS12ZXJpZnkpLCAkYXJnKTsKKwkJY2hvbXAgJHJldjsKKwkJJGRpciA9ICJidWlsZC8iLiRyZXY7CisJfSBlbHNpZiAoJGFyZyBlcSAnLicpIHsKKwkJJGRpciA9ICcuJzsKKwl9IGVsc2UgeworCQkkZGlyID0gcmVhbHBhdGgoJGFyZyk7CisJCSRkaXJuYW1lc3skZGlyfSA9ICRkaXI7CisJCSRwcmVmaXggLj0gJ2JpbmRpcic7CisJfQorCXB1c2ggQGRpcnMsICRkaXI7CisJJGRpcm5hbWVzeyRkaXJ9IHx8PSAkYXJnOworCSRwcmVmaXggLj0gJGRpcjsKKwkkcHJlZml4ID1+IHRyL15hLXpBLVowLTkvXy9jOworCSRwcmVmaXhlc3skZGlyfSA9ICRwcmVmaXggLiAnLic7CisJc2hpZnQgQEFSR1Y7Cit9CisKK2lmIChub3QgQGRpcnMpIHsKKwlAZGlycyA9ICgnLicpOworfQorJGRpcm5hbWVzeycuJ30gPSAkZGlyYWJicmV2c3snLid9ID0gInRoaXMgdHJlZSI7CiskcHJlZml4ZXN7Jy4nfSA9ICcnOworCitzaGlmdCBAQVJHViBpZiBzY2FsYXIgQEFSR1YgYW5kICRBUkdWWzBdIGVxICItLSI7CisKK0B0ZXN0cyA9IEBBUkdWOworaWYgKG5vdCBAdGVzdHMpIHsKKwlAdGVzdHMgPSBnbG9iICJwPz8/Py0qLnNoIjsKK30KKworbXkgJHJlc3VsdHNkaXIgPSAidGVzdC1yZXN1bHRzIjsKKworaWYgKCEgJHN1YnNlY3Rpb24gYW5kCisgICAgZXhpc3RzICRFTlZ7R0lUX1BFUkZfU1VCU0VDVElPTn0gYW5kCisgICAgJEVOVntHSVRfUEVSRl9TVUJTRUNUSU9OfSBuZSAiIikgeworCSRzdWJzZWN0aW9uID0gJEVOVntHSVRfUEVSRl9TVUJTRUNUSU9OfTsKK30KKworaWYgKCRzdWJzZWN0aW9uKSB7CisJJHJlc3VsdHNkaXIgLj0gIi8iIC4gJHN1YnNlY3Rpb247Cit9CisKK215IEBzdWJ0ZXN0czsKK215ICVzaG9ydHRlc3RzOworZm9yIG15ICR0IChAdGVzdHMpIHsKKwkkdCA9fiBzeyg/Oi4qLyk/KHAoXGQrKS1bXi9dKylcLnNoJH17JDF9IG9yIGRpZSAiYmFkIHRlc3QgbmFtZTogJHQiOworCW15ICRuID0gJDI7CisJbXkgJGZuYW1lID0gIiRyZXN1bHRzZGlyLyR0LnN1YnRlc3RzIjsKKwlvcGVuIG15ICRmcCwgIjwiLCAkZm5hbWUgb3IgZGllICJjYW5ub3Qgb3BlbiAkZm5hbWU6ICQhIjsKKwlmb3IgKDwkZnA+KSB7CisJCWNob21wOworCQkvXihcZCspJC8gb3IgZGllICJtYWxmb3JtZWQgc3VidGVzdCBsaW5lOiAkXyI7CisJCXB1c2ggQHN1YnRlc3RzLCAiJHQuJDEiOworCQkkc2hvcnR0ZXN0c3siJHQuJDEifSA9ICIkbi4kMSI7CisJfQorCWNsb3NlICRmcCBvciBkaWUgImNhbm5vdCBjbG9zZSAkZm5hbWU6ICQhIjsKK30KKworc3ViIHJlYWRfZGVzY3IgeworCW15ICRuYW1lID0gc2hpZnQ7CisJb3BlbiBteSAkZmgsICI8IiwgJG5hbWUgb3IgcmV0dXJuICI8ZXJyb3IgcmVhZGluZyBkZXNjcmlwdGlvbj4iOworCWJpbm1vZGUgJGZoLCAiOnV0ZjgiIG9yIGRpZSAiUEFOSUMgb24gYmlubW9kZTogJCEiOworCW15ICRsaW5lID0gPCRmaD47CisJY2xvc2UgJGZoIG9yIGRpZSAiY2Fubm90IGNsb3NlICRuYW1lIjsKKwljaG9tcCAkbGluZTsKKwlyZXR1cm4gJGxpbmU7Cit9CisKK3N1YiBoYXZlX2R1cGxpY2F0ZSB7CisJbXkgJXNlZW47CisJZm9yIChAXykgeworCQlyZXR1cm4gMSBpZiBleGlzdHMgJHNlZW57JF99OworCQkkc2VlbnskX30gPSAxOworCX0KKwlyZXR1cm4gMDsKK30KK3N1YiBoYXZlX3NsYXNoIHsKKwlmb3IgKEBfKSB7CisJCXJldHVybiAxIGlmIG17L307CisJfQorCXJldHVybiAwOworfQorCitzdWIgZGlzcGxheV9kaXIgeworCW15ICgkZCkgPSBAXzsKKwlyZXR1cm4gZXhpc3RzICRkaXJhYmJyZXZzeyRkfSA/ICRkaXJhYmJyZXZzeyRkfSA6ICRkaXJuYW1lc3skZH07Cit9CisKK3N1YiBwcmludF9kZWZhdWx0X3Jlc3VsdHMgeworCW15ICVkZXNjcnM7CisJbXkgJGRlc2NybGVuID0gNDsgIyAiVGVzdCIKKwlmb3IgbXkgJHQgKEBzdWJ0ZXN0cykgeworCQkkZGVzY3JzeyR0fSA9ICRzaG9ydHRlc3RzeyR0fS4iOiAiLnJlYWRfZGVzY3IoIiRyZXN1bHRzZGlyLyR0LmRlc2NyIik7CisJCSRkZXNjcmxlbiA9IGxlbmd0aCAkZGVzY3JzeyR0fSBpZiBsZW5ndGggJGRlc2Nyc3skdH0+JGRlc2NybGVuOworCX0KKworCW15ICVuZXdkaXJhYmJyZXZzID0gJWRpcmFiYnJldnM7CisJd2hpbGUgKCFoYXZlX2R1cGxpY2F0ZSh2YWx1ZXMgJW5ld2RpcmFiYnJldnMpKSB7CisJCSVkaXJhYmJyZXZzID0gJW5ld2RpcmFiYnJldnM7CisJCWxhc3QgaWYgIWhhdmVfc2xhc2godmFsdWVzICVkaXJhYmJyZXZzKTsKKwkJJW5ld2RpcmFiYnJldnMgPSAlZGlyYWJicmV2czsKKwkJZm9yICh2YWx1ZXMgJW5ld2RpcmFiYnJldnMpIHsKKwkJCXN7XlteL10qL317fTsKKwkJfQorCX0KKworCW15ICV0aW1lczsKKwlteSBAY29sd2lkdGggPSAoKDApeEBkaXJzKTsKKwlmb3IgbXkgJGkgKDAuLiQjZGlycykgeworCQlteSAkdyA9IGxlbmd0aCBkaXNwbGF5X2RpcigkZGlyc1skaV0pOworCQkkY29sd2lkdGhbJGldID0gJHcgaWYgJHcgPiAkY29sd2lkdGhbJGldOworCX0KKwlmb3IgbXkgJHQgKEBzdWJ0ZXN0cykgeworCQlteSAkZmlyc3RyOworCQlmb3IgbXkgJGkgKDAuLiQjZGlycykgeworCQkJbXkgJGQgPSAkZGlyc1skaV07CisJCQlteSAkYmFzZSA9ICIkcmVzdWx0c2Rpci8kcHJlZml4ZXN7JGR9JHQiOworCQkJJHRpbWVzeyRwcmVmaXhlc3skZH0uJHR9ID0gW2dldF90aW1lcygiJGJhc2UucmVzdWx0IildOworCQkJbXkgKCRyLCR1LCRzKSA9IEB7JHRpbWVzeyRwcmVmaXhlc3skZH0uJHR9fTsKKwkJCW15ICR3ID0gbGVuZ3RoIGZvcm1hdF90aW1lcygkciwkdSwkcywkZmlyc3RyKTsKKwkJCSRjb2x3aWR0aFskaV0gPSAkdyBpZiAkdyA+ICRjb2x3aWR0aFskaV07CisJCQkkZmlyc3RyID0gJHIgdW5sZXNzIGRlZmluZWQgJGZpcnN0cjsKKwkJfQorCX0KKwlteSAkdG90YWx3aWR0aCA9IDMqQGRpcnMrJGRlc2NybGVuOworCSR0b3RhbHdpZHRoICs9ICRfIGZvciAoQGNvbHdpZHRoKTsKKworCXByaW50ZiAiJS0ke2Rlc2NybGVufXMiLCAiVGVzdCI7CisJZm9yIG15ICRpICgwLi4kI2RpcnMpIHsKKwkJcHJpbnRmICIgICAlLSRjb2x3aWR0aFskaV1zIiwgZGlzcGxheV9kaXIoJGRpcnNbJGldKTsKKwl9CisJcHJpbnQgIlxuIjsKKwlwcmludCAiLSJ4JHRvdGFsd2lkdGgsICJcbiI7CisJZm9yIG15ICR0IChAc3VidGVzdHMpIHsKKwkJcHJpbnRmICIlLSR7ZGVzY3JsZW59cyIsICRkZXNjcnN7JHR9OworCQlteSAkZmlyc3RyOworCQlmb3IgbXkgJGkgKDAuLiQjZGlycykgeworCQkJbXkgJGQgPSAkZGlyc1skaV07CisJCQlteSAoJHIsJHUsJHMpID0gQHskdGltZXN7JHByZWZpeGVzeyRkfS4kdH19OworCQkJcHJpbnRmICIgICAlLSRjb2x3aWR0aFskaV1zIiwgZm9ybWF0X3RpbWVzKCRyLCR1LCRzLCRmaXJzdHIpOworCQkJJGZpcnN0ciA9ICRyIHVubGVzcyBkZWZpbmVkICRmaXJzdHI7CisJCX0KKwkJcHJpbnQgIlxuIjsKKwl9Cit9CisKK3N1YiBwcmludF9zb3J0ZWRfcmVzdWx0cyB7CisJbXkgKCRzb3J0YnkpID0gQF87CisKKwlpZiAoJHNvcnRieSBuZSAicmVncmVzc2lvbiIpIHsKKwkJcHJpbnQgIk9ubHkgJ3JlZ3Jlc3Npb24nIGlzIHN1cHBvcnRlZCBhcyAnLS1zb3J0LWJ5JyBhcmd1bWVudFxuIjsKKwkJdXNhZ2UoKTsKKwl9CisKKwlteSBAZXZvbHV0aW9uczsKKwlmb3IgbXkgJHQgKEBzdWJ0ZXN0cykgeworCQlteSAoJHByZXZyLCAkcHJldnUsICRwcmV2cywgJHByZXZyZXYpOworCQlmb3IgbXkgJGkgKDAuLiQjZGlycykgeworCQkJbXkgJGQgPSAkZGlyc1skaV07CisJCQlteSAoJHIsICR1LCAkcykgPSBnZXRfdGltZXMoIiRyZXN1bHRzZGlyLyRwcmVmaXhlc3skZH0kdC5yZXN1bHQiKTsKKwkJCWlmICgkaSA+IDAgYW5kIGRlZmluZWQgJHIgYW5kIGRlZmluZWQgJHByZXZyIGFuZCAkcHJldnIgPiAwKSB7CisJCQkJbXkgJHBlcmNlbnQgPSAxMDAuMCAqICgkciAtICRwcmV2cikgLyAkcHJldnI7CisJCQkJcHVzaCBAZXZvbHV0aW9ucywgeyAicGVyY2VudCIgID0+ICRwZXJjZW50LAorCQkJCQkJICAgICJ0ZXN0IiAgICAgPT4gJHQsCisJCQkJCQkgICAgInByZXZyZXYiICA9PiAkcHJldnJldiwKKwkJCQkJCSAgICAicmV2IiAgICAgID0+ICRkLAorCQkJCQkJICAgICJwcmV2ciIgICAgPT4gJHByZXZyLAorCQkJCQkJICAgICJyIiAgICAgICAgPT4gJHIsCisJCQkJCQkgICAgInByZXZ1IiAgICA9PiAkcHJldnUsCisJCQkJCQkgICAgInUiICAgICAgICA9PiAkdSwKKwkJCQkJCSAgICAicHJldnMiICAgID0+ICRwcmV2cywKKwkJCQkJCSAgICAicyIgICAgICAgID0+ICRzfTsKKwkJCX0KKwkJCSgkcHJldnIsICRwcmV2dSwgJHByZXZzLCAkcHJldnJldikgPSAoJHIsICR1LCAkcywgJGQpOworCQl9CisJfQorCisJbXkgQHNvcnRlZF9ldm9sdXRpb25zID0gc29ydCB7ICRiLT57cGVyY2VudH0gPD0+ICRhLT57cGVyY2VudH0gfSBAZXZvbHV0aW9uczsKKworCWZvciBteSAkZSAoQHNvcnRlZF9ldm9sdXRpb25zKSB7CisJCXByaW50ZiAiJSsuMWYlJSIsICRlLT57cGVyY2VudH07CisJCXByaW50ICIgIiAuICRlLT57dGVzdH07CisJCXByaW50ICIgIiAuIGZvcm1hdF90aW1lcygkZS0+e3ByZXZyfSwgJGUtPntwcmV2dX0sICRlLT57cHJldnN9KTsKKwkJcHJpbnQgIiAiIC4gZm9ybWF0X3RpbWVzKCRlLT57cn0sICRlLT57dX0sICRlLT57c30pOworCQlwcmludCAiICIgLiBkaXNwbGF5X2RpcigkZS0+e3ByZXZyZXZ9KTsKKwkJcHJpbnQgIiAiIC4gZGlzcGxheV9kaXIoJGUtPntyZXZ9KTsKKwkJcHJpbnQgIlxuIjsKKwl9Cit9CisKK3N1YiBwcmludF9jb2Rlc3BlZWRfcmVzdWx0cyB7CisJbXkgKCRzdWJzZWN0aW9uKSA9IEBfOworCisJbXkgJHByb2plY3QgPSAiR2l0IjsKKworCW15ICRleGVjdXRhYmxlID0gYHVuYW1lIC1zIC1tYDsKKwljaG9tcCAkZXhlY3V0YWJsZTsKKworCWlmICgkc3Vic2VjdGlvbikgeworCQkkZXhlY3V0YWJsZSAuPSAiLCAiIC4gJHN1YnNlY3Rpb247CisJfQorCisJbXkgJGVudmlyb25tZW50OworCWlmICgkcmVwb25hbWUpIHsKKwkJJGVudmlyb25tZW50ID0gJHJlcG9uYW1lOworCX0gZWxzaWYgKGV4aXN0cyAkRU5We0dJVF9QRVJGX1JFUE9fTkFNRX0gYW5kICRFTlZ7R0lUX1BFUkZfUkVQT19OQU1FfSBuZSAiIikgeworCQkkZW52aXJvbm1lbnQgPSAkRU5We0dJVF9QRVJGX1JFUE9fTkFNRX07CisJfSBlbHNlIHsKKwkJJGVudmlyb25tZW50ID0gYHVuYW1lIC1yYDsKKwkJY2hvbXAgJGVudmlyb25tZW50OworCX0KKworCW15IEBkYXRhOworCisJZm9yIG15ICR0IChAc3VidGVzdHMpIHsKKwkJZm9yIG15ICRkIChAZGlycykgeworCQkJbXkgJGNvbW1pdGlkID0gJHByZWZpeGVzeyRkfTsKKwkJCSRjb21taXRpZCA9fiBzL15idWlsZF8vLzsKKwkJCSRjb21taXRpZCA9fiBzL1wuJC8vOworCQkJbXkgKCRyZXN1bHRfdmFsdWUsICR1LCAkcykgPSBnZXRfdGltZXMoIiRyZXN1bHRzZGlyLyRwcmVmaXhlc3skZH0kdC5yZXN1bHQiKTsKKworCQkJbXkgJXZhbHMgPSAoCisJCQkJImNvbW1pdGlkIiA9PiAkY29tbWl0aWQsCisJCQkJInByb2plY3QiID0+ICRwcm9qZWN0LAorCQkJCSJicmFuY2giID0+ICRkaXJuYW1lc3skZH0sCisJCQkJImV4ZWN1dGFibGUiID0+ICRleGVjdXRhYmxlLAorCQkJCSJiZW5jaG1hcmsiID0+ICRzaG9ydHRlc3RzeyR0fSAuICIgIiAuIHJlYWRfZGVzY3IoIiRyZXN1bHRzZGlyLyR0LmRlc2NyIiksCisJCQkJImVudmlyb25tZW50IiA9PiAkZW52aXJvbm1lbnQsCisJCQkJInJlc3VsdF92YWx1ZSIgPT4gJHJlc3VsdF92YWx1ZSwKKwkJCSAgICApOworCQkJcHVzaCBAZGF0YSwgXCV2YWxzOworCQl9CisJfQorCisJcmVxdWlyZSBKU09OOworCXByaW50IEpTT046OnRvX2pzb24oXEBkYXRhLCB7dXRmOCA9PiAxLCBwcmV0dHkgPT4gMSwgY2Fub25pY2FsID0+IDF9KSwgIlxuIjsKK30KKworYmlubW9kZSBTVERPVVQsICI6dXRmOCIgb3IgZGllICJQQU5JQyBvbiBiaW5tb2RlOiAkISI7CisKK2lmICgkY29kZXNwZWVkKSB7CisJcHJpbnRfY29kZXNwZWVkX3Jlc3VsdHMoJHN1YnNlY3Rpb24pOworfSBlbHNpZiAoZGVmaW5lZCAkc29ydGJ5KSB7CisJcHJpbnRfc29ydGVkX3Jlc3VsdHMoJHNvcnRieSk7Cit9IGVsc2UgeworCXByaW50X2RlZmF1bHRfcmVzdWx0cygpOworfQpkaWZmIC0tZ2l0IGEvdC9wZXJmL2Jpc2VjdF9yZWdyZXNzaW9uIGIvdC9wZXJmL2Jpc2VjdF9yZWdyZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNlNDdlMTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvYmlzZWN0X3JlZ3Jlc3Npb24KQEAgLTAsMCArMSw3MyBAQAorIyEvYmluL3NoCisKKyMgUmVhZCBhIGxpbmUgY29taW5nIGZyb20gYC4vYWdncmVnYXRlLnBlcmwgLS1zb3J0LWJ5IHJlZ3Jlc3Npb24gLi4uYAorIyBhbmQgYXV0b21hdGljYWxseSBiaXNlY3QgdG8gZmluZCB0aGUgY29tbWl0IHJlc3BvbnNpYmxlIGZvciB0aGUKKyMgcGVyZm9ybWFuY2UgcmVncmVzc2lvbi4KKyMKKyMgTGluZXMgZnJvbSBgLi9hZ2dyZWdhdGUucGVybCAtLXNvcnQtYnkgcmVncmVzc2lvbiAuLi5gIGxvb2sgbGlrZToKKyMKKyMgKzEwMC4wJSBwNzgyMS1ncmVwLWVuZ2luZXMtZml4ZWQuMSAwLjA0KDAuMTArMC4wMykgMC4wOCgwLjExKzAuMDgpIHYyLjE0LjMgdjIuMTUuMQorIyArMzMuMyUgcDc4MjAtZ3JlcC1lbmdpbmVzLjEgMC4wMygwLjA4KzAuMDIpIDAuMDQoMC4wOCswLjAyKSB2Mi4xNC4zIHYyLjE1LjEKKyMKKworZGllICgpIHsKKwllY2hvID4mMiAiZXJyb3I6ICQqIgorCWV4aXQgMQorfQorCit3aGlsZSBbICQjIC1ndCAwIF07IGRvCisJYXJnPSIkMSIKKwljYXNlICIkYXJnIiBpbgorCS0taGVscCkKKwkJZWNobyAidXNhZ2U6ICQwIFstLWNvbmZpZyBmaWxlXSBbLS1zdWJzZWN0aW9uIHN1YnNlY3Rpb25dIgorCQlleGl0IDAKKwkJOzsKKwktLWNvbmZpZykKKwkJc2hpZnQKKwkJR0lUX1BFUkZfQ09ORklHX0ZJTEU9JChjZCAiJChkaXJuYW1lICIkMSIpIjsgcHdkKS8kKGJhc2VuYW1lICIkMSIpCisJCWV4cG9ydCBHSVRfUEVSRl9DT05GSUdfRklMRQorCQlzaGlmdCA7OworCS0tc3Vic2VjdGlvbikKKwkJc2hpZnQKKwkJR0lUX1BFUkZfU1VCU0VDVElPTj0iJDEiCisJCWV4cG9ydCBHSVRfUEVSRl9TVUJTRUNUSU9OCisJCXNoaWZ0IDs7CisJLS0qKQorCQlkaWUgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIgOzsKKwkqKQorCQlkaWUgInVua25vd24gYXJndW1lbnQgJyRhcmcnIgorCQk7OworCWVzYWMKK2RvbmUKKworcmVhZCAtciByZWdyZXNzaW9uIHN1YnRlc3Qgb2xkdGltZSBuZXd0aW1lIG9sZHJldiBuZXdyZXYKKwordGVzdF9zY3JpcHQ9JChlY2hvICIkc3VidGVzdCIgfCBzZWQgLWUgJ3MvXCguKlwpXC5bMC05XSokL1wxLnNoLycpCit0ZXN0X251bWJlcj0kKGVjaG8gIiRzdWJ0ZXN0IiB8IHNlZCAtZSAncy8uKlwuXChbMC05XSpcKSQvXDEvJykKKworIyBvbGR0aW1lIGFuZCBuZXd0aW1lIGFyZSBkZWNpbWFsIG51bWJlciwgbm90IGludGVnZXJzCisKK29sZHRpbWU9JChlY2hvICIkb2xkdGltZSIgfCBzZWQgLWUgJ3MvXlwoWzAtOV1cK1wuWzAtOV1cK1wpLiokL1wxLycpCituZXd0aW1lPSQoZWNobyAiJG5ld3RpbWUiIHwgc2VkIC1lICdzL15cKFswLTldXCtcLlswLTldXCtcKS4qJC9cMS8nKQorCit0ZXN0ICQoZWNobyAiJG5ld3RpbWUiICIkb2xkdGltZSIgfCBhd2sgJ3sgcHJpbnQgKCQxID4gJDIpIH0nKSA9IDEgfHwKKwlkaWUgIk5ldyB0aW1lICckbmV3dGltZScgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBvbGQgdGltZSAnJG9sZHRpbWUnIgorCit0bXBkaXI9JChta3RlbXAgLWQgLXQgYmlzZWN0X3JlZ3Jlc3Npb25fWFhYWFhYKSB8fCBkaWUgIkZhaWxlZCB0byBjcmVhdGUgdGVtcCBkaXJlY3RvcnkiCitlY2hvICIkb2xkdGltZSIgPiIkdG1wZGlyL29sZHRpbWUiIHx8IGRpZSAiRmFpbGVkIHRvIHdyaXRlIHRvICckdG1wZGlyL29sZHRpbWUnIgorZWNobyAiJG5ld3RpbWUiID4iJHRtcGRpci9uZXd0aW1lIiB8fCBkaWUgIkZhaWxlZCB0byB3cml0ZSB0byAnJHRtcGRpci9uZXd0aW1lJyIKKworIyBCaXNlY3RpbmcgbXVzdCBiZSBwZXJmb3JtZWQgZnJvbSB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSAoZXZlbiB3aXRoIC0tbm8tY2hlY2tvdXQpCisoCisJdG9wbGV2ZWxfZGlyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpIHx8IGRpZSAiRmFpbGVkIHRvIGZpbmQgdG9wIGxldmVsIGRpcmVjdG9yeSIKKwljZCAiJHRvcGxldmVsX2RpciIgfHwgZGllICJGYWlsZWQgdG8gY2QgaW50byB0b3AgbGV2ZWwgZGlyZWN0b3J5ICckdG9wbGV2ZWxfZGlyJyIKKworCWdpdCBiaXNlY3Qgc3RhcnQgLS1uby1jaGVja291dCAiJG5ld3JldiIgIiRvbGRyZXYiIHx8IGRpZSAiRmFpbGVkIHRvIHN0YXJ0IGJpc2VjdGluZyIKKworCWdpdCBiaXNlY3QgcnVuIHQvcGVyZi9iaXNlY3RfcnVuX3NjcmlwdCAiJHRlc3Rfc2NyaXB0IiAiJHRlc3RfbnVtYmVyIiAiJHRtcGRpciIKKwlyZXM9IiQ/IgorCisJZ2l0IGJpc2VjdCByZXNldAorCisJZXhpdCAiJHJlcyIKKykKZGlmZiAtLWdpdCBhL3QvcGVyZi9iaXNlY3RfcnVuX3NjcmlwdCBiL3QvcGVyZi9iaXNlY3RfcnVuX3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZWJhZjE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL2Jpc2VjdF9ydW5fc2NyaXB0CkBAIC0wLDAgKzEsNTMgQEAKKyMhL2Jpbi9zaAorCitzY3JpcHQ9IiQxIgordGVzdF9udW1iZXI9IiQyIgoraW5mb19kaXI9IiQzIgorCisjIFRoaXMgYWJvcnRzIHRoZSBiaXNlY3Rpb24gaW1tZWRpYXRlbHkKK2RpZSAoKSB7CisJZWNobyA+JjIgImVycm9yOiAkKiIKKwlleGl0IDI1NQorfQorCitiaXNlY3RfaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQklTRUNUX0hFQUQpIHx8IGRpZSAiRmFpbGVkIHRvIGZpbmQgQklTRUNUX0hFQUQgcmVmIgorCitzY3JpcHRfbnVtYmVyPSQoZWNobyAiJHNjcmlwdCIgfCBzZWQgLWUgInMvXnBcKFswLTldKlwpLipcJC9cMS8iKSB8fCBkaWUgIkZhaWxlZCB0byBnZXQgc2NyaXB0IG51bWJlciBmb3IgJyRzY3JpcHQnIgorCitvbGR0aW1lPSQoY2F0ICIkaW5mb19kaXIvb2xkdGltZSIpIHx8IGRpZSAiRmFpbGVkIHRvIGFjY2VzcyAnJGluZm9fZGlyL29sZHRpbWUnIgorbmV3dGltZT0kKGNhdCAiJGluZm9fZGlyL25ld3RpbWUiKSB8fCBkaWUgIkZhaWxlZCB0byBhY2Nlc3MgJyRpbmZvX2Rpci9uZXd0aW1lJyIKKworY2QgdC9wZXJmIHx8IGRpZSAiRmFpbGVkIHRvIGNkIGludG8gJ3QvcGVyZiciCisKK3Jlc3VsdF9maWxlPSIkaW5mb19kaXIvcGVyZl8ke3NjcmlwdF9udW1iZXJ9XyR7YmlzZWN0X2hlYWR9X3Jlc3VsdHMudHh0IgorCitHSVRfUEVSRl9ESVJTX09SX1JFVlM9IiRiaXNlY3RfaGVhZCIKK2V4cG9ydCBHSVRfUEVSRl9ESVJTX09SX1JFVlMKKworIyBEb24ndCB1c2UgY29kZXNwZWVkCitHSVRfUEVSRl9DT0RFU1BFRURfT1VUUFVUPQorR0lUX1BFUkZfU0VORF9UT19DT0RFU1BFRUQ9CitleHBvcnQgR0lUX1BFUkZfQ09ERVNQRUVEX09VVFBVVAorZXhwb3J0IEdJVF9QRVJGX1NFTkRfVE9fQ09ERVNQRUVECisKKy4vcnVuICIkc2NyaXB0IiA+IiRyZXN1bHRfZmlsZSIgMj4mMSB8fCBkaWUgIkZhaWxlZCB0byBydW4gcGVyZiB0ZXN0ICckc2NyaXB0JyIKKworcnRpbWU9JChzZWQgLW4gInMvXiRzY3JpcHRfbnVtYmVyXC4kdGVzdF9udW1iZXI6LipcKFswLTldXCtcLlswLTldXCtcKSguKikuKlwkL1wxL3AiICIkcmVzdWx0X2ZpbGUiKQorCitlY2hvICJuZXd0aW1lOiAkbmV3dGltZSIKK2VjaG8gInJ0aW1lOiAkcnRpbWUiCitlY2hvICJvbGR0aW1lOiAkb2xkdGltZSIKKworIyBDb21wYXJlICgkbmV3dGltZSAtICRydGltZSkgd2l0aCAoJHJ0aW1lIC0gJG9sZHRpbWUpCisjIFRpbWVzIGFyZSBkZWNpbWFsIG51bWJlciwgbm90IGludGVnZXJzCisKK2lmIHRlc3QgJChlY2hvICIkbmV3dGltZSIgIiRydGltZSIgIiRvbGR0aW1lIiB8IGF3ayAneyBwcmludCAoJDEgLSAkMiA+ICQyIC0gJDMpIH0nKSA9IDEKK3RoZW4KKwkjIEN1cnJlbnQgY29tbWl0IGlzIGNvbnNpZGVyZWQgImdvb2Qvb2xkIgorCWVjaG8gIiRydGltZSIgPiIkaW5mb19kaXIvb2xkdGltZSIKKwlleGl0IDAKK2Vsc2UKKwkjIEN1cnJlbnQgY29tbWl0IGlzIGNvbnNpZGVyZWQgImJhZC9uZXciCisJZWNobyAiJHJ0aW1lIiA+IiRpbmZvX2Rpci9uZXd0aW1lIgorCWV4aXQgMQorZmkKZGlmZiAtLWdpdCBhL3QvcGVyZi9saWItcGFjay5zaCBiL3QvcGVyZi9saWItcGFjay5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzg2NWRiCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL2xpYi1wYWNrLnNoCkBAIC0wLDAgKzEsMjUgQEAKKyMgSGVscGVycyBmb3IgZGVhbGluZyB3aXRoIGxhcmdlIG51bWJlcnMgb2YgcGFja3MuCisKKyMgY3JlYXRlICQxIG5vbnNlbnNlIHBhY2tzLCBlYWNoIHdpdGggYSBzaW5nbGUgYmxvYgorY3JlYXRlX3BhY2tzICgpIHsKKwlwZXJsIC1sZSAnCisJCW15ICgkbikgPSBAQVJHVjsKKwkJZm9yICgxLi4kbikgeworCQkJcHJpbnQgImJsb2IiOworCQkJcHJpbnQgImRhdGEgPDxFT0YiOworCQkJcHJpbnQgIiRfIjsKKwkJCXByaW50ICJFT0YiOworCQkJcHJpbnQgImNoZWNrcG9pbnQiCisJCX0KKwknICIkQCIgfAorCWdpdCBmYXN0LWltcG9ydAorfQorCisjIGNyZWF0ZSBhIGxhcmdlIG51bWJlciBvZiBwYWNrcywgZGlzYWJsaW5nIGFueSBnYyB3aGljaCBtaWdodAorIyBjYXVzZSB1cyB0byByZXBhY2sgdGhlbQorc2V0dXBfbWFueV9wYWNrcyAoKSB7CisJZ2l0IGNvbmZpZyBnYy5hdXRvIDAgJiYKKwlnaXQgY29uZmlnIGdjLmF1dG9wYWNrbGltaXQgMCAmJgorCWdpdCBjb25maWcgZmFzdGltcG9ydC51bnBhY2tsaW1pdCAwICYmCisJY3JlYXRlX3BhY2tzIDUwMAorfQpkaWZmIC0tZ2l0IGEvdC9wZXJmL21pbl90aW1lLnBlcmwgYi90L3BlcmYvbWluX3RpbWUucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMWEyNzE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL21pbl90aW1lLnBlcmwKQEAgLTAsMCArMSwyMSBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK215ICRtaW5ydCA9IDFlMTAwOworbXkgJG1pbjsKKword2hpbGUgKDw+KSB7CisJIyBbaDpdbTpzLnh4IFUueHggUy54eAorCS9eKD86KFxkKyk6KT8oXGQrKTooXGQrKD86XC5cZCspPykgKFxkKyg/OlwuXGQrKT8pIChcZCsoPzpcLlxkKyk/KSQvCisJCW9yIGRpZSAiYmFkIGlucHV0IGxpbmU6ICRfIjsKKwlteSAkcnQgPSAoKGRlZmluZWQgJDEgPyAkMSA6IDAuMCkqNjArJDIpKjYwKyQzOworCWlmICgkcnQgPCAkbWlucnQpIHsKKwkJJG1pbiA9ICRfOworCQkkbWlucnQgPSAkcnQ7CisJfQorfQorCitpZiAoIWRlZmluZWQgJG1pbikgeworCWRpZSAibm8gaW5wdXQgZm91bmQiOworfQorCitwcmludCAkbWluOwpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AwMDAwLXBlcmYtbGliLXNhbml0eS5zaCBiL3QvcGVyZi9wMDAwMC1wZXJmLWxpYi1zYW5pdHkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDAyYzIxZQotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wMDAwMC1wZXJmLWxpYi1zYW5pdHkuc2gKQEAgLTAsMCArMSw1NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIHdoZXRoZXIgcGVyZi1saWIgZmFjaWxpdGllcyB3b3JrJworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKwordGVzdF9wZXJmICd0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvIHdvcmtzJyAnCisJZm9vPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3RfZXhwb3J0IGZvbworJworCit0ZXN0X2NoZWNrb3V0X3dvcmt0cmVlCisKK3Rlc3RfcGVyZiAndGVzdF9jaGVja291dF93b3JrdHJlZSB3b3JrcycgJworCXd0PSQoZmluZCAuIHwgd2MgLWwpICYmCisJaWR4PSQoZ2l0IGxzLWZpbGVzIHwgd2MgLWwpICYmCisJdGVzdCAkd3QgLWd0ICRpZHgKKycKKworYmF6PWJhegordGVzdF9leHBvcnQgYmF6CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3RfZXhwb3J0IHdvcmtzJyAnCisJZWNobyAiJGZvbyIgJiYKKwl0ZXN0ICIkZm9vIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJZWNobyAiJGJheiIgJiYKKwl0ZXN0ICIkYmF6IiA9IGJhegorJworCit0ZXN0X3BlcmYgJ2V4cG9ydCBhIHdlaXJkIHZhcicgJworCWJhcj0id2VpcmQgIyB2YXJpYWJsZSIgJiYKKwl0ZXN0X2V4cG9ydCBiYXIKKycKKwordGVzdF9wZXJmICfDqeG4v8Ot4bqXIMWEw7bFhC3DgcWaxIbDjcONIMSH4binw6HFlcOhxIfhupfDqcWVxZsnICd0cnVlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0X2V4cG9ydCB3b3JrcyB3aXRoIHdlaXJkIHZhcnMnICcKKwllY2hvICIkYmFyIiAmJgorCXRlc3QgIiRiYXIiID0gIndlaXJkICMgdmFyaWFibGUiCisnCisKK3Rlc3RfcGVyZiAnaW1wb3J0YW50IHZhcmlhYmxlcyBhdmFpbGFibGUgaW4gc3Vic2hlbGxzJyAnCisJdGVzdCAtbiAiJEhPTUUiICYmCisJdGVzdCAtbiAiJFRFU1RfRElSRUNUT1JZIiAmJgorCXRlc3QgLW4gIiRUUkFTSF9ESVJFQ1RPUlkiICYmCisJdGVzdCAtbiAiJEdJVF9CVUlMRF9ESVIiCisnCisKK3Rlc3RfcGVyZiAndGVzdC1saWItZnVuY3Rpb25zIGNvcnJlY3RseSBsb2FkZWQgaW4gc3Vic2hlbGxzJyAnCisJOiA+YSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGEgJiYKKwk6ID5iICYmCisJdGVzdF9jbXAgYSBiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AwMDAxLXJldi1saXN0LnNoIGIvdC9wZXJmL3AwMDAxLXJldi1saXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMwNDJhODUKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDAwMDEtcmV2LWxpc3Quc2gKQEAgLTAsMCArMSw0OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IlRlc3RzIGhpc3Rvcnkgd2Fsa2luZyBwZXJmb3JtYW5jZSIKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKwordGVzdF9wZXJmICdyZXYtbGlzdCAtLWFsbCcgJworCWdpdCByZXYtbGlzdCAtLWFsbCA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAncmV2LWxpc3QgLS1hbGwgLS1vYmplY3RzJyAnCisJZ2l0IHJldi1saXN0IC0tYWxsIC0tb2JqZWN0cyA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAncmV2LWxpc3QgLS1wYXJlbnRzJyAnCisJZ2l0IHJldi1saXN0IC0tcGFyZW50cyBIRUFEID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGR1bW15IGZpbGUnICcKKwllY2hvIHVubGlrZWx5LXRvLWFscmVhZHktYmUtdGhlcmUgPmR1bW15ICYmCisJZ2l0IGFkZCBkdW1teSAmJgorCWdpdCBjb21taXQgLW0gZHVtbXkKKycKKwordGVzdF9wZXJmICdyZXYtbGlzdCAtLSBkdW1teScgJworCWdpdCByZXYtbGlzdCBIRUFEIC0tIGR1bW15CisnCisKK3Rlc3RfcGVyZiAncmV2LWxpc3QgLS1wYXJlbnRzIC0tIGR1bW15JyAnCisJZ2l0IHJldi1saXN0IC0tcGFyZW50cyBIRUFEIC0tIGR1bW15CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBuZXcgdW5yZWZlcmVuY2VkIGNvbW1pdCcgJworCWNvbW1pdD0kKGdpdCBjb21taXQtdHJlZSBIRUFEXnt0cmVlfSAtcCBIRUFEKSAmJgorCXRlc3RfZXhwb3J0IGNvbW1pdAorJworCit0ZXN0X3BlcmYgJ3Jldi1saXN0ICRjb21taXQgLS1ub3QgLS1hbGwnICcKKwlnaXQgcmV2LWxpc3QgJGNvbW1pdCAtLW5vdCAtLWFsbCA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAncmV2LWxpc3QgLS1vYmplY3RzICRjb21taXQgLS1ub3QgLS1hbGwnICcKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzICRjb21taXQgLS1ub3QgLS1hbGwgPi9kZXYvbnVsbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wMDAwMi1yZWFkLWNhY2hlLnNoIGIvdC9wZXJmL3AwMDAyLXJlYWQtY2FjaGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2RkMTA1YQotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wMDAwMi1yZWFkLWNhY2hlLnNoCkBAIC0wLDAgKzEsMTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJUZXN0cyBwZXJmb3JtYW5jZSBvZiByZWFkaW5nIHRoZSBpbmRleCIKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKworY291bnQ9MTAwMAordGVzdF9wZXJmICJyZWFkX2NhY2hlL2Rpc2NhcmRfY2FjaGUgJGNvdW50IHRpbWVzIiAiCisJdGVzdC10b29sIHJlYWQtY2FjaGUgJGNvdW50CisiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AwMDAzLWRlbHRhLWJhc2UtY2FjaGUuc2ggYi90L3BlcmYvcDAwMDMtZGVsdGEtYmFzZS1jYWNoZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MjM2OWVhCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3AwMDAzLWRlbHRhLWJhc2UtY2FjaGUuc2gKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgb3BlcmF0aW9ucyB0aGF0IGVtcGhhc2l6ZSB0aGUgZGVsdGEgYmFzZSBjYWNoZS4KKworV2UgbG9vayBhdCBib3RoICJsb2cgLS1yYXciLCB3aGljaCBzaG91bGQgcHV0IG9ubHkgdHJlZXMgaW50byB0aGUgZGVsdGEgY2FjaGUsCithbmQgImxvZyAtU2ZvbyAtLXJhdyIsIHdoaWNoIHNob3VsZCBsb29rIGF0IGJvdGggdHJlZXMgYW5kIGJsb2JzLgorCitBbnkgZWZmZWN0cyB3aWxsIGJlIGVtcGhhc2l6ZWQgaWYgdGhlIHRlc3QgcmVwb3NpdG9yeSBpcyBmdWxseSBwYWNrZWQgKGxvb3NlCitvYmplY3RzIG9idmlvdXNseSBkbyBub3QgdXNlIHRoZSBkZWx0YSBiYXNlIGNhY2hlIGF0IGFsbCkuIEl0IGlzIGFsc28KK2VtcGhhc2l6ZWQgaWYgdGhlIHBhY2sgaGFzIGxvbmcgZGVsdGEgY2hhaW5zIChlLmcuLCBhcyBwcm9kdWNlZCBieSAiZ2MKKy0tYWdncmVzc2l2ZSIpLCB0aG91Z2ggY2FjaGUgaXMgc3RpbGwgcXVpdGUgbm90aWNlYWJsZSBldmVuIHdpdGggdGhlIGRlZmF1bHQKK2RlcHRoIG9mIDUwLgorCitUaGUgc2V0dGluZyBvZiBjb3JlLmRlbHRhQmFzZUNhY2hlTGltaXQgaW4gdGhlIHNvdXJjZSByZXBvc2l0b3J5IGlzIGFsc28KK3JlbGV2YW50IChkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgeW91ciB0ZXN0IHJlcG8pLCBzbyBiZSBzdXJlIGl0IGlzIGNvbnNpc3RlbnQKK2JldHdlZW4gcnVucy4KKycKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfbGFyZ2VfcmVwbworCisjIHB1dHMgbW9zdGx5IHRyZWVzIGludG8gdGhlIGRlbHRhIGJhc2UgY2FjaGUKK3Rlc3RfcGVyZiAnbG9nIC0tcmF3JyAnCisJZ2l0IGxvZyAtLXJhdyA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAnbG9nIC1TJyAnCisJZ2l0IGxvZyAtLXJhdyAtU2ZvbyA+L2Rldi9udWxsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AwMDA0LWxhenktaW5pdC1uYW1lLWhhc2guc2ggYi90L3BlcmYvcDAwMDQtbGF6eS1pbml0LW5hbWUtaGFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYWZjMDhmCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3AwMDA0LWxhenktaW5pdC1uYW1lLWhhc2guc2gKQEAgLTAsMCArMSw1NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIG11bHRpLXRocmVhZGVkIGxhenlfaW5pdF9uYW1lX2hhc2gnCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2xhcmdlX3JlcG8KK3Rlc3RfY2hlY2tvdXRfd29ya3RyZWUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGJvdGggbWV0aG9kcyBidWlsZCB0aGUgc2FtZSBoYXNobWFwcycgJworCXRlc3QtdG9vbCBsYXp5LWluaXQtbmFtZS1oYXNoIC0tZHVtcCAtLXNpbmdsZSA+b3V0LnNpbmdsZSAmJgorCWlmIHRlc3QtdG9vbCBsYXp5LWluaXQtbmFtZS1oYXNoIC0tZHVtcCAtLW11bHRpID5vdXQubXVsdGkKKwl0aGVuCisJCXRlc3Rfc2V0X3ByZXJlcSBSRVBPX0JJR19FTk9VR0hfRk9SX01VTFRJICYmCisJCXNvcnQgPG91dC5zaW5nbGUgPnNvcnRlZC5zaW5nbGUgJiYKKwkJc29ydCA8b3V0Lm11bHRpID5zb3J0ZWQubXVsdGkgJiYKKwkJdGVzdF9jbXAgc29ydGVkLnNpbmdsZSBzb3J0ZWQubXVsdGkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYWxpYnJhdGUnICcKKwllbnRyaWVzPSQod2MgLWwgPG91dC5zaW5nbGUpICYmCisKKwljYXNlICRlbnRyaWVzIGluCisJPykgY291bnQ9MTAwMDAwMCA7OworCT8/KSBjb3VudD0xMDAwMDAgOzsKKwk/Pz8pIGNvdW50PTEwMDAwIDs7CisJPz8/PykgY291bnQ9MTAwMCA7OworCT8/Pz8/KSBjb3VudD0xMDAgOzsKKwk/Pz8/Pz8pIGNvdW50PTEwIDs7CisJKikgY291bnQ9MSA7OworCWVzYWMgJiYKKwlleHBvcnQgY291bnQgJiYKKworCWNhc2UgJGVudHJpZXMgaW4KKwkxKSBlbnRyaWVzX2Rlc2M9IjEgZW50cnkiIDs7CisJKikgZW50cmllc19kZXNjPSIkZW50cmllcyBlbnRyaWVzIiA7OworCWVzYWMgJiYKKworCWNhc2UgJGNvdW50IGluCisJMSkgY291bnRfZGVzYz0iMSByb3VuZCIgOzsKKwkqKSBjb3VudF9kZXNjPSIkY291bnQgcm91bmRzIiA7OworCWVzYWMgJiYKKworCWRlc2M9IiRlbnRyaWVzX2Rlc2MsICRjb3VudF9kZXNjIiAmJgorCWV4cG9ydCBkZXNjCisnCisKK3Rlc3RfcGVyZiAic2luZ2xlLXRocmVhZGVkLCAkZGVzYyIgIgorCXRlc3QtdG9vbCBsYXp5LWluaXQtbmFtZS1oYXNoIC0tc2luZ2xlIC0tY291bnQ9JGNvdW50CisiCisKK3Rlc3RfcGVyZiBSRVBPX0JJR19FTk9VR0hfRk9SX01VTFRJICJtdWx0aS10aHJlYWRlZCwgJGRlc2MiICIKKwl0ZXN0LXRvb2wgbGF6eS1pbml0LW5hbWUtaGFzaCAtLW11bHRpIC0tY291bnQ9JGNvdW50CisiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AwMDA1LXN0YXR1cy5zaCBiL3QvcGVyZi9wMDAwNS1zdGF0dXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGIwYWE5OAotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wMDAwNS1zdGF0dXMuc2gKQEAgLTAsMCArMSw0OSBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgdGVzdCBtZWFzdXJlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgdmFyaW91cyByZWFkLXRyZWUKKyMgYW5kIHN0YXR1cyBvcGVyYXRpb25zLiAgSXQgaXMgcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4KKyMgdGhlIGFsZ29yaXRobWljIGNvc3RzIG9mIGluZGV4IG9wZXJhdGlvbnMgYW5kIHJlY3Vyc2l2ZQorIyB0cmVlIHRyYXZlcnNhbCAtLSBhbmQgTk9UIGRpc2sgSS9PIG9uIHRob3VzYW5kcyBvZiBmaWxlcy4KKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdHMgcGVyZm9ybWFuY2Ugb2YgcmVhZC10cmVlIgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCisjIElmIHRoZSB0ZXN0IHJlcG8gd2FzIGdlbmVyYXRlZCBieSAuL3JlcG9zL21hbnktZmlsZXMuc2gKKyMgdGhlbiB3ZSBrbm93IHNvbWV0aGluZyBhYm91dCB0aGUgZGF0YSBzaGFwZSBhbmQgYnJhbmNoZXMsCisjIHNvIHdlIGNhbiBpc29sYXRlIHRlc3RpbmcgdG8gdGhlIGJhbGxhc3QtcmVsYXRlZCBjb21taXRzCisjIGFuZCBzZXR1cCBzcGFyc2UtY2hlY2tvdXQgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb3B1bGF0ZQorIyB0aGUgYmFsbGFzdCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisjCisjIE90aGVyd2lzZSwgd2UgbWFrZSBzb21lIGdlbmVyYWwgYXNzdW1wdGlvbnMgYWJvdXQgdGhlCisjIHJlcG8gYW5kIGNvbnNpZGVyIHRoZSBlbnRpcmUgaGlzdG9yeSBvZiB0aGUgY3VycmVudAorIyBicmFuY2ggdG8gYmUgdGhlIGJhbGxhc3QuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIHJlcG8iICcKKwlpZiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcDAwMDYtYmFsbGFzdF57Y29tbWl0fQorCXRoZW4KKwkJZWNobyBBc3N1bWluZyBzeW50aGV0aWMgcmVwbyBmcm9tIG1hbnktZmlsZXMuc2gKKwkJZ2l0IGJyYW5jaCBicl9iYXNlICAgICAgICAgICAgbWFzdGVyCisJCWdpdCBicmFuY2ggYnJfYmFsbGFzdCAgICAgICAgIHAwMDA2LWJhbGxhc3QKKwkJZ2l0IGNvbmZpZyAtLWxvY2FsIGNvcmUuc3BhcnNlY2hlY2tvdXQgMQorCQljYXQgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPDwtRU9GCisJCS8qCisJCSFiYWxsYXN0LyoKKwkJRU9GCisJZWxzZQorCQllY2hvIEFzc3VtaW5nIG5vbi1zeW50aGV0aWMgcmVwby4uLgorCQlnaXQgYnJhbmNoIGJyX2Jhc2UgICAgICAgICAgICAkKGdpdCByZXYtbGlzdCBIRUFEIHwgdGFpbCAtbiAxKQorCQlnaXQgYnJhbmNoIGJyX2JhbGxhc3QgICAgICAgICBIRUFECisJZmkgJiYKKwlnaXQgY2hlY2tvdXQgLXEgYnJfYmFsbGFzdCAmJgorCW5yX2ZpbGVzPSQoZ2l0IGxzLWZpbGVzIHwgd2MgLWwpCisnCisKK3Rlc3RfcGVyZiAicmVhZC10cmVlIHN0YXR1cyBicl9iYWxsYXN0ICgkbnJfZmlsZXMpIiAnCisJZ2l0IHJlYWQtdHJlZSBIRUFEICYmCisJZ2l0IHN0YXR1cworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wMDAwNi1yZWFkLXRyZWUtY2hlY2tvdXQuc2ggYi90L3BlcmYvcDAwMDYtcmVhZC10cmVlLWNoZWNrb3V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc4Y2MyM2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDAwMDYtcmVhZC10cmVlLWNoZWNrb3V0LnNoCkBAIC0wLDAgKzEsNjcgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIHRlc3QgbWVhc3VyZXMgdGhlIHBlcmZvcm1hbmNlIG9mIHZhcmlvdXMgcmVhZC10cmVlCisjIGFuZCBjaGVja291dCBvcGVyYXRpb25zLiAgSXQgaXMgcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4KKyMgdGhlIGFsZ29yaXRobWljIGNvc3RzIG9mIGluZGV4IG9wZXJhdGlvbnMgYW5kIHJlY3Vyc2l2ZQorIyB0cmVlIHRyYXZlcnNhbCAtLSBhbmQgTk9UIGRpc2sgSS9PIG9uIHRob3VzYW5kcyBvZiBmaWxlcy4KKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdHMgcGVyZm9ybWFuY2Ugb2YgcmVhZC10cmVlIgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCisjIElmIHRoZSB0ZXN0IHJlcG8gd2FzIGdlbmVyYXRlZCBieSAuL3JlcG9zL21hbnktZmlsZXMuc2gKKyMgdGhlbiB3ZSBrbm93IHNvbWV0aGluZyBhYm91dCB0aGUgZGF0YSBzaGFwZSBhbmQgYnJhbmNoZXMsCisjIHNvIHdlIGNhbiBpc29sYXRlIHRlc3RpbmcgdG8gdGhlIGJhbGxhc3QtcmVsYXRlZCBjb21taXRzCisjIGFuZCBzZXR1cCBzcGFyc2UtY2hlY2tvdXQgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb3B1bGF0ZQorIyB0aGUgYmFsbGFzdCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisjCisjIE90aGVyd2lzZSwgd2UgbWFrZSBzb21lIGdlbmVyYWwgYXNzdW1wdGlvbnMgYWJvdXQgdGhlCisjIHJlcG8gYW5kIGNvbnNpZGVyIHRoZSBlbnRpcmUgaGlzdG9yeSBvZiB0aGUgY3VycmVudAorIyBicmFuY2ggdG8gYmUgdGhlIGJhbGxhc3QuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIHJlcG8iICcKKwlpZiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcDAwMDYtYmFsbGFzdF57Y29tbWl0fQorCXRoZW4KKwkJZWNobyBBc3N1bWluZyBzeW50aGV0aWMgcmVwbyBmcm9tIG1hbnktZmlsZXMuc2gKKwkJZ2l0IGJyYW5jaCBicl9iYXNlICAgICAgICAgICAgbWFzdGVyCisJCWdpdCBicmFuY2ggYnJfYmFsbGFzdCAgICAgICAgIHAwMDA2LWJhbGxhc3ReCisJCWdpdCBicmFuY2ggYnJfYmFsbGFzdF9hbGlhcyAgIHAwMDA2LWJhbGxhc3ReCisJCWdpdCBicmFuY2ggYnJfYmFsbGFzdF9wbHVzXzEgIHAwMDA2LWJhbGxhc3QKKwkJZ2l0IGNvbmZpZyAtLWxvY2FsIGNvcmUuc3BhcnNlY2hlY2tvdXQgMQorCQljYXQgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPDwtRU9GCisJCS8qCisJCSFiYWxsYXN0LyoKKwkJRU9GCisJZWxzZQorCQllY2hvIEFzc3VtaW5nIG5vbi1zeW50aGV0aWMgcmVwby4uLgorCQlnaXQgYnJhbmNoIGJyX2Jhc2UgICAgICAgICAgICAkKGdpdCByZXYtbGlzdCBIRUFEIHwgdGFpbCAtbiAxKQorCQlnaXQgYnJhbmNoIGJyX2JhbGxhc3QgICAgICAgICBIRUFEXiB8fCBlcnJvciAibm8gYW5jZXN0b3IgY29tbWl0IGZyb20gY3VycmVudCBoZWFkIgorCQlnaXQgYnJhbmNoIGJyX2JhbGxhc3RfYWxpYXMgICBIRUFEXgorCQlnaXQgYnJhbmNoIGJyX2JhbGxhc3RfcGx1c18xICBIRUFECisJZmkgJiYKKwlnaXQgY2hlY2tvdXQgLXEgYnJfYmFsbGFzdCAmJgorCW5yX2ZpbGVzPSQoZ2l0IGxzLWZpbGVzIHwgd2MgLWwpCisnCisKK3Rlc3RfcGVyZiAicmVhZC10cmVlIGJyX2Jhc2UgYnJfYmFsbGFzdCAoJG5yX2ZpbGVzKSIgJworCWdpdCByZWFkLXRyZWUgLW0gYnJfYmFzZSBicl9iYWxsYXN0IC1uCisnCisKK3Rlc3RfcGVyZiAic3dpdGNoIGJldHdlZW4gYnJfYmFzZSBicl9iYWxsYXN0ICgkbnJfZmlsZXMpIiAnCisJZ2l0IGNoZWNrb3V0IC1xIGJyX2Jhc2UgJiYKKwlnaXQgY2hlY2tvdXQgLXEgYnJfYmFsbGFzdAorJworCit0ZXN0X3BlcmYgInN3aXRjaCBiZXR3ZWVuIGJyX2JhbGxhc3QgYnJfYmFsbGFzdF9wbHVzXzEgKCRucl9maWxlcykiICcKKwlnaXQgY2hlY2tvdXQgLXEgYnJfYmFsbGFzdF9wbHVzXzEgJiYKKwlnaXQgY2hlY2tvdXQgLXEgYnJfYmFsbGFzdAorJworCit0ZXN0X3BlcmYgInN3aXRjaCBiZXR3ZWVuIGFsaWFzZXMgKCRucl9maWxlcykiICcKKwlnaXQgY2hlY2tvdXQgLXEgYnJfYmFsbGFzdF9hbGlhcyAmJgorCWdpdCBjaGVja291dCAtcSBicl9iYWxsYXN0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AwMDA3LXdyaXRlLWNhY2hlLnNoIGIvdC9wZXJmL3AwMDA3LXdyaXRlLWNhY2hlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA5NTk1MjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDAwMDctd3JpdGUtY2FjaGUuc2gKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IlRlc3RzIHBlcmZvcm1hbmNlIG9mIHdyaXRpbmcgdGhlIGluZGV4IgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCByZXBvIiAnCisJaWYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3AwMDA2LWJhbGxhc3Ree2NvbW1pdH0KKwl0aGVuCisJCWVjaG8gQXNzdW1pbmcgc3ludGhldGljIHJlcG8gZnJvbSBtYW55LWZpbGVzLnNoCisJCWdpdCBjb25maWcgLS1sb2NhbCBjb3JlLnNwYXJzZWNoZWNrb3V0IDEKKwkJY2F0ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IDw8LUVPRgorCQkvKgorCQkhYmFsbGFzdC8qCisJCUVPRgorCWVsc2UKKwkJZWNobyBBc3N1bWluZyBub24tc3ludGhldGljIHJlcG8uLi4KKwlmaSAmJgorCW5yX2ZpbGVzPSQoZ2l0IGxzLWZpbGVzIHwgd2MgLWwpCisnCisKK2NvdW50PTMKK3Rlc3RfcGVyZiAid3JpdGVfbG9ja2VkX2luZGV4ICRjb3VudCB0aW1lcyAoJG5yX2ZpbGVzIGZpbGVzKSIgIgorCXRlc3QtdG9vbCB3cml0ZS1jYWNoZSAkY291bnQKKyIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDAwNzEtc29ydC5zaCBiL3QvcGVyZi9wMDA3MS1zb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlOTI0ZjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDAwNzEtc29ydC5zaApAQCAtMCwwICsxLDI2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQmFzaWMgc29ydCBwZXJmb3JtYW5jZSB0ZXN0cycKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgIiouW2NoXSIgIiouc2giIHwKKwljdXQgLWYyIC1kIiAiIHwKKwlnaXQgY2F0LWZpbGUgLS1iYXRjaCA+dW5zb3J0ZWQKKycKKwordGVzdF9wZXJmICdzb3J0KDEpJyAnCisJc29ydCA8dW5zb3J0ZWQgPmV4cGVjdAorJworCit0ZXN0X3BlcmYgJ3N0cmluZ19saXN0X3NvcnQoKScgJworCXRlc3QtdG9vbCBzdHJpbmctbGlzdCBzb3J0IDx1bnNvcnRlZCA+YWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmluZ19saXN0X3NvcnQoKSBzb3J0cyBsaWtlIHNvcnQoMSknICcKKwl0ZXN0X2NtcF9iaW4gZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wMDEwMC1nbG9iYmluZy5zaCBiL3QvcGVyZi9wMDEwMC1nbG9iYmluZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZDE4YTljCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3AwMTAwLWdsb2JiaW5nLnNoCkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJUZXN0cyBwYXRob2xvZ2ljYWwgZ2xvYmJpbmcgcGVyZm9ybWFuY2UKKworU2hvd3MgaG93IEdpdCdzIGdsb2JiaW5nIHBlcmZvcm1hbmNlIHBlcmZvcm1zIHdoZW4gZ2l2ZW4gdGhlIHNvcnQgb2YKK3BhdGhvbG9naWNhbCBwYXR0ZXJucyBkZXNjcmliZWQgaW4gYXQgaHR0cHM6Ly9yZXNlYXJjaC5zd3RjaC5jb20vZ2xvYgorIgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9nbG9ic19iaWc9JzEwIDI1IDUwIDc1IDEwMCcKK3Rlc3RfZ2xvYnNfc21hbGw9JzEgMiAzIDQgNSA2JworCit0ZXN0X3BlcmZfZnJlc2hfcmVwbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWZvciBpIGluICQodGVzdF9zZXEgMSAxMDApCisJZG8KKwkJcHJpbnRmICJhIiA+PnJlZm5hbWUgJiYKKwkJZm9yIGogaW4gJCh0ZXN0X3NlcSAxICRpKQorCQlkbworCQkJcHJpbnRmICJhKiIgPj5yZWZnbG9iLiRpCisJCWRvbmUgJiYKKwkJZWNobyBiID4+cmVmZ2xvYi4kaQorCWRvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0ZXN0ICQoY2F0IHJlZm5hbWUpLnQgIiIgJChjYXQgcmVmbmFtZSkudAorJworCitmb3IgaSBpbiAkdGVzdF9nbG9ic19zbWFsbAorZG8KKwl0ZXN0X3BlcmYgInJlZmdsb2IoKGEqKV5uYikgYWdhaW5zdCB0YWcgKGFeMTAwKS50OyBuID0gJGkiICcKKwkJZ2l0IGZvci1lYWNoLXJlZiAicmVmcy90YWdzLyQoY2F0IHJlZmdsb2IuJyRpJyliIgorCScKK2RvbmUKKworZm9yIGkgaW4gJHRlc3RfZ2xvYnNfc21hbGwKK2RvCisJdGVzdF9wZXJmICJmaWxlZ2xvYigoYSopXm5iKSBhZ2FpbnN0IGZpbGUgKGFeMTAwKS50OyBuID0gJGkiICcKKwkJZ2l0IGxzLWZpbGVzICIkKGNhdCByZWZnbG9iLickaScpYiIKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AxNDUwLWZzY2suc2ggYi90L3BlcmYvcDE0NTAtZnNjay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZTFiODQxCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3AxNDUwLWZzY2suc2gKQEAgLTAsMCArMSwxMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZnNjayBwZXJmb3JtYW5jZScKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9sYXJnZV9yZXBvCisKK3Rlc3RfcGVyZiAnZnNjaycgJworCWdpdCBmc2NrCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AxNDUxLWZzY2stc2tpcC1saXN0LnNoIGIvdC9wZXJmL3AxNDUxLWZzY2stc2tpcC1saXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyYjk3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDE0NTEtZnNjay1za2lwLWxpc3Quc2gKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZnNjayBza2lwTGlzdCBwZXJmb3JtYW5jZScKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9mcmVzaF9yZXBvCisKK249MTAwMDAwMAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCAkbiBiYWQgY29tbWl0cyIgJworCWZvciBpIGluICQodGVzdF9zZXEgMSAkbikKKwlkbworCQllY2hvICJjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIiICYmCisJCWVjaG8gImNvbW1pdHRlciBDIDxjQGV4YW1wbGUuY29tPiAxMjM0NTY3ODkwICswMDAwIiAmJgorCQllY2hvICJkYXRhIDw8RU9GIiAmJgorCQllY2hvICIkaS5RLiIgJiYKKwkJZWNobyAiRU9GIgorCWRvbmUgfCBxX3RvX251bCB8IGdpdCBmYXN0LWltcG9ydAorJworCitza2lwPTAKK3doaWxlIHRlc3QgJHNraXAgLWxlICRuCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSBza2lwTGlzdCBmb3IgJHNraXAgYmFkIGNvbW1pdHMiICcKKwkJZ2l0IGxvZyAtLWZvcm1hdD0lSCAtLW1heC1jb3VudD0kc2tpcCB8CisJCXNvcnQgPnNraXBsaXN0CisJJworCisJdGVzdF9wZXJmICJmc2NrIHdpdGggJHNraXAgc2tpcHBlZCBiYWQgY29tbWl0cyIgJworCQlnaXQgLWMgZnNjay5za2lwTGlzdD1za2lwbGlzdCBmc2NrCisJJworCisJY2FzZSAkc2tpcCBpbgorCTApIHNraXA9MSA7OworCSopIHNraXA9JHtza2lwfTAgOzsKKwllc2FjCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AzNDAwLXJlYmFzZS5zaCBiL3QvcGVyZi9wMzQwMC1yZWJhc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDIwMmFhZQotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wMzQwMC1yZWJhc2Uuc2gKQEAgLTAsMCArMSw1NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIHJlYmFzZSBwZXJmb3JtYW5jZScKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlYmFzaW5nIG9uIHRvcCBvZiBhIGxvdCBvZiBjaGFuZ2VzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIC1CIGJhc2UgJiYKKwlnaXQgY2hlY2tvdXQgLUIgdG8tcmViYXNlICYmCisJZ2l0IGNoZWNrb3V0IC1CIHVwc3RyZWFtICYmCisJZm9yIGkgaW4gJChzZXEgMTAwKQorCWRvCisJCSMgc2ltdWxhdGUgaHVnZSBkaWZmcworCQllY2hvIGNoYW5nZSRpID51bnJlbGF0ZWQtZmlsZSRpICYmCisJCXNlcSAxMDAwID4+dW5yZWxhdGVkLWZpbGUkaSAmJgorCQlnaXQgYWRkIHVucmVsYXRlZC1maWxlJGkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gY29tbWl0JGkgdW5yZWxhdGVkLWZpbGUkaSAmJgorCQllY2hvIGNoYW5nZSRpID51bnJlbGF0ZWQtZmlsZSRpICYmCisJCXNlcSAxMDAwIHwgdGFjID4+dW5yZWxhdGVkLWZpbGUkaSAmJgorCQlnaXQgYWRkIHVucmVsYXRlZC1maWxlJGkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gY29tbWl0JGktcmV2ZXJzZSB1bnJlbGF0ZWQtZmlsZSRpIHx8CisJCWJyZWFrCisJZG9uZSAmJgorCWdpdCBjaGVja291dCB0by1yZWJhc2UgJiYKKwl0ZXN0X2NvbW1pdCBvdXItcGF0Y2ggaW50ZXJlc3RpbmctZmlsZQorJworCit0ZXN0X3BlcmYgJ3JlYmFzZSBvbiB0b3Agb2YgYSBsb3Qgb2YgdW5yZWxhdGVkIGNoYW5nZXMnICcKKwlnaXQgcmViYXNlIC0tb250byB1cHN0cmVhbSBIRUFEXiAmJgorCWdpdCByZWJhc2UgLS1vbnRvIGJhc2UgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmViYXNpbmcgbWFueSBjaGFuZ2VzIHdpdGhvdXQgc3BsaXQtaW5kZXgnICcKKwlnaXQgY29uZmlnIGNvcmUuc3BsaXRJbmRleCBmYWxzZSAmJgorCWdpdCBjaGVja291dCAtQiB1cHN0cmVhbTIgdG8tcmViYXNlICYmCisJZ2l0IGNoZWNrb3V0IC1CIHRvLXJlYmFzZTIgdXBzdHJlYW0KKycKKwordGVzdF9wZXJmICdyZWJhc2UgYSBsb3Qgb2YgdW5yZWxhdGVkIGNoYW5nZXMgd2l0aG91dCBzcGxpdC1pbmRleCcgJworCWdpdCByZWJhc2UgLS1vbnRvIHVwc3RyZWFtMiBiYXNlICYmCisJZ2l0IHJlYmFzZSAtLW9udG8gYmFzZSB1cHN0cmVhbTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmViYXNpbmcgbWFueSBjaGFuZ2VzIHdpdGggc3BsaXQtaW5kZXgnICcKKwlnaXQgY29uZmlnIGNvcmUuc3BsaXRJbmRleCB0cnVlCisnCisKK3Rlc3RfcGVyZiAncmViYXNlIGEgbG90IG9mIHVucmVsYXRlZCBjaGFuZ2VzIHdpdGggc3BsaXQtaW5kZXgnICcKKwlnaXQgcmViYXNlIC0tb250byB1cHN0cmVhbTIgYmFzZSAmJgorCWdpdCByZWJhc2UgLS1vbnRvIGJhc2UgdXBzdHJlYW0yCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaCBiL3QvcGVyZi9wMzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODhmNDdkZQotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wMzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIHJlYmFzZSAtaSBwZXJmb3JtYW5jZScKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCisKKyMgVGhpcyBjb21taXQgbWVyZ2VzIGEgc3VmZmljaWVudGx5IGxvbmcgdG9waWMgYnJhbmNoIGZvciByZWFzb25hYmxlCisjIHBlcmZvcm1hbmNlIHRlc3RpbmcKK2JyYW5jaF9tZXJnZT1iYTUzMTJkYTE5YzZmZGI2YzY3NDdkNDc5ZjU4OTMyYWFlNmU5MDBjXntjb21taXR9CitleHBvcnQgYnJhbmNoX21lcmdlCisKK2dpdCByZXYtcGFyc2UgLS12ZXJpZnkgJGJyYW5jaF9tZXJnZSA+L2Rldi9udWxsIDI+JjEgfHwgeworCXNraXBfYWxsPSdza2lwcGluZyBiZWNhdXNlICRicmFuY2hfbWVyZ2Ugd2FzIG5vdCBmb3VuZCcKKwl0ZXN0X2RvbmUKK30KKword3JpdGVfc2NyaXB0IHN3YXAtZmlyc3QtdHdvLnNoIDw8XEVPRgorY2FzZSAiJDEiIGluCisqL0NPTU1JVF9FRElUTVNHKQorCW12ICIkMSIgIiQxIi5iYWsgJiYKKwlzZWQgLWUgJzF7aDtkfScgLWUgMkcgPCIkMSIuYmFrID4iJDEiCisJOzsKK2VzYWMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBjb25maWcgY29yZS5lZGl0b3IgIlwiJFBXRCIvc3dhcC1maXJzdC10d28uc2hcIiAmJgorCWdpdCBjaGVja291dCAtZiAkYnJhbmNoX21lcmdlXjIKKycKKwordGVzdF9wZXJmICdyZWJhc2UgLWknICcKKwlnaXQgcmViYXNlIC1pICRicmFuY2hfbWVyZ2VeCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A0MDAwLWRpZmYtYWxnb3JpdGhtcy5zaCBiL3QvcGVyZi9wNDAwMC1kaWZmLWFsZ29yaXRobXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2UwMGM5ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNDAwMC1kaWZmLWFsZ29yaXRobXMuc2gKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IlRlc3RzIGRpZmYgZ2VuZXJhdGlvbiBwZXJmb3JtYW5jZSIKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKwordGVzdF9wZXJmICdsb2cgLTMwMDAgKGJhc2VsaW5lKScgJworCWdpdCBsb2cgLTMwMDAgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ2xvZyAtLXJhdyAtMzAwMCAodHJlZS1vbmx5KScgJworCWdpdCBsb2cgLS1yYXcgLTMwMDAgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ2xvZyAtcCAtMzAwMCAoTXllcnMpJyAnCisJZ2l0IGxvZyAtcCAtMzAwMCA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAnbG9nIC1wIC0zMDAwIC0taGlzdG9ncmFtJyAnCisJZ2l0IGxvZyAtcCAtMzAwMCAtLWhpc3RvZ3JhbSA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAnbG9nIC1wIC0zMDAwIC0tcGF0aWVuY2UnICcKKwlnaXQgbG9nIC1wIC0zMDAwIC0tcGF0aWVuY2UgPi9kZXYvbnVsbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNDAwMS1kaWZmLW5vLWluZGV4LnNoIGIvdC9wZXJmL3A0MDAxLWRpZmYtbm8taW5kZXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjgzYmU2OQotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNDAwMS1kaWZmLW5vLWluZGV4LnNoCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJUZXN0IGRpZmYgLS1uby1pbmRleCBwZXJmb3JtYW5jZSIKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9sYXJnZV9yZXBvCit0ZXN0X2NoZWNrb3V0X3dvcmt0cmVlCisKK2ZpbGUxPSQoZ2l0IGxzLWZpbGVzIHwgdGFpbCAtbiAyIHwgaGVhZCAtMSkKK2ZpbGUyPSQoZ2l0IGxzLWZpbGVzIHwgdGFpbCAtbiAxIHwgaGVhZCAtMSkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZW1wdHkgZmlsZXMsIHNvIHRoZXkgdGFrZSBubyB0aW1lIHRvIGRpZmYiICIKKwllY2hvID4kZmlsZTEgJiYKKwllY2hvID4kZmlsZTIKKyIKKwordGVzdF9wZXJmICJkaWZmIC0tbm8taW5kZXgiICIKKwlnaXQgZGlmZiAtLW5vLWluZGV4ICRmaWxlMSAkZmlsZTIgPi9kZXYvbnVsbAorIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNDIwNS1sb2ctcHJldHR5LWZvcm1hdHMuc2ggYi90L3BlcmYvcDQyMDUtbG9nLXByZXR0eS1mb3JtYXRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdjMjZmNGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDQyMDUtbG9nLXByZXR0eS1mb3JtYXRzLnNoCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyB0aGUgcGVyZm9ybWFuY2Ugb2YgdmFyaW91cyBwcmV0dHkgZm9ybWF0IHBsYWNlaG9sZGVycycKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKworZm9yIGZvcm1hdCBpbiAlSCAlaCAlVCAldCAlUCAlcCAlaC0laC0laAorZG8KKwl0ZXN0X3BlcmYgImxvZyB3aXRoICRmb3JtYXQiICIKKwkJZ2l0IGxvZyAtLWZvcm1hdD1cIiRmb3JtYXRcIiA+L2Rldi9udWxsCisJIgorZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNDIxMS1saW5lLWxvZy5zaCBiL3QvcGVyZi9wNDIxMS1saW5lLWxvZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOTJiY2MwCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A0MjExLWxpbmUtbG9nLnNoCkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyBsb2cgLUwgcGVyZm9ybWFuY2UnCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCisjIFBpY2sgYSBmaWxlIHRvIGxvZyBwc2V1ZG8tcmFuZG9tbHkuICBUaGUgc29ydCBrZXkgaXMgdGhlIGJsb2IgaGFzaCwKKyMgc28gaXQgaXMgc3RhYmxlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VsZWN0IGEgZmlsZScgJworCWdpdCBscy10cmVlIEhFQUQgfCBncmVwIF4xMDA2NDQgfAorCXNvcnQgLWsgMyB8IGhlYWQgLTEgfCBjdXQgLWYgMiA+ZmlsZWxpc3QKKycKKworZmlsZT0kKGNhdCBmaWxlbGlzdCkKK2V4cG9ydCBmaWxlCisKK3Rlc3RfcGVyZiAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAoYmFzZWxpbmUpJyAnCisJZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciBIRUFEID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdnaXQgbG9nIC0tZm9sbG93IChiYXNlbGluZSBmb3IgLU0pJyAnCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1mb2xsb3cgLS0gIiRmaWxlIiA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAnZ2l0IGxvZyAtTCAocmVuYW1lcyBvZmYpJyAnCisJZ2l0IGxvZyAtLW5vLXJlbmFtZXMgLUwgMToiJGZpbGUiID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdnaXQgbG9nIC1MIChyZW5hbWVzIG9uKScgJworCWdpdCBsb2cgLU0gLUwgMToiJGZpbGUiID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdnaXQgbG9nIC0tb25lbGluZSAtLXJhdyAtLXBhcmVudHMnICcKKwlnaXQgbG9nIC0tb25lbGluZSAtLXJhdyAtLXBhcmVudHMgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ2dpdCBsb2cgLS1vbmVsaW5lIC0tcmF3IC0tcGFyZW50cyAtMTAwMCcgJworCWdpdCBsb2cgLS1vbmVsaW5lIC0tcmF3IC0tcGFyZW50cyAtMTAwMCA+L2Rldi9udWxsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A0MjIwLWxvZy1ncmVwLWVuZ2luZXMuc2ggYi90L3BlcmYvcDQyMjAtbG9nLWdyZXAtZW5naW5lcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYmM0N2RlCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A0MjIwLWxvZy1ncmVwLWVuZ2luZXMuc2gKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IkNvbXBhcmlzb24gb2YgZ2l0LWxvZydzIC0tZ3JlcCByZWdleCBlbmdpbmVzCisKK1NldCBHSVRfUEVSRl80MjIwX0xPR19PUFRTIGluIHRoZSBlbnZpcm9ubWVudCB0byBwYXNzIG9wdGlvbnMgdG8KK2dpdC1ncmVwLiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBhIGxlYWRpbmcgc3BhY2UsCitlLmcuIEdJVF9QRVJGXzQyMjBfTE9HX09QVFM9JyAtaScuIFNvbWUgb3B0aW9ucyB0byB0cnk6CisKKwktaQorCS0taW52ZXJ0LWdyZXAKKwktaSAtLWludmVydC1ncmVwCisiCisKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfbGFyZ2VfcmVwbwordGVzdF9jaGVja291dF93b3JrdHJlZQorCitmb3IgcGF0dGVybiBpbiBcCisJJ2hvdy50bycgXAorCSdeaG93IHRvJyBcCisJJ1tob3ddIHRvJyBcCisJJ1woZS50W14gXSpcfHYucnlcKSByYXJlJyBcCisJJ21cKMO6XHx1XClsdC5iXCjDplx8eVwpdGUnCitkbworCWZvciBlbmdpbmUgaW4gYmFzaWMgZXh0ZW5kZWQgcGVybAorCWRvCisJCWlmIHRlc3QgJGVuZ2luZSAhPSAiYmFzaWMiCisJCXRoZW4KKwkJCSMgUG9vciBtYW4ncyBiYXNpYyAtPiBleHRlbmRlZCBjb252ZXJ0ZXIuCisJCQlwYXR0ZXJuPSQoZWNobyAkcGF0dGVybiB8IHNlZCAncy9cXC8vZycpCisJCWZpCisJCWlmIHRlc3QgJGVuZ2luZSA9ICJwZXJsIiAmJiAhIHRlc3RfaGF2ZV9wcmVyZXEgUENSRQorCQl0aGVuCisJCQlwcmVyZXE9IlBDUkUiCisJCWVsc2UKKwkJCXByZXJlcT0iIgorCQlmaQorCQl0ZXN0X3BlcmYgJHByZXJlcSAiJGVuZ2luZSBsb2ckR0lUX1BFUkZfNDIyMF9MT0dfT1BUUyAtLWdyZXA9JyRwYXR0ZXJuJyIgIgorCQkJZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9JGVuZ2luZSBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVoJEdJVF9QRVJGXzQyMjBfTE9HX09QVFMgLS1ncmVwPSckcGF0dGVybicgPidvdXQuJGVuZ2luZScgfHwgOgorCQkiCisJZG9uZQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiYXNzZXJ0IHRoYXQgYWxsIGVuZ2luZXMgZm91bmQgdGhlIHNhbWUgZm9yJEdJVF9QRVJGXzQyMjBfTE9HX09QVFMgJyRwYXR0ZXJuJyIgJworCQl0ZXN0X2NtcCBvdXQuYmFzaWMgb3V0LmV4dGVuZGVkICYmCisJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgUENSRQorCQl0aGVuCisJCQl0ZXN0X2NtcCBvdXQuYmFzaWMgb3V0LnBlcmwKKwkJZmkKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A0MjIxLWxvZy1ncmVwLWVuZ2luZXMtZml4ZWQuc2ggYi90L3BlcmYvcDQyMjEtbG9nLWdyZXAtZW5naW5lcy1maXhlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNjA5NzEyCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A0MjIxLWxvZy1ncmVwLWVuZ2luZXMtZml4ZWQuc2gKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IkNvbXBhcmlzb24gb2YgZ2l0LWxvZydzIC0tZ3JlcCByZWdleCBlbmdpbmVzIHdpdGggLUYKKworU2V0IEdJVF9QRVJGXzQyMjFfTE9HX09QVFMgaW4gdGhlIGVudmlyb25tZW50IHRvIHBhc3Mgb3B0aW9ucyB0bworZ2l0LWdyZXAuIE1ha2Ugc3VyZSB0byBpbmNsdWRlIGEgbGVhZGluZyBzcGFjZSwKK2UuZy4gR0lUX1BFUkZfNDIyMV9MT0dfT1BUUz0nIC1pJy4gU29tZSBvcHRpb25zIHRvIHRyeToKKworCS1pCisJLS1pbnZlcnQtZ3JlcAorCS1pIC0taW52ZXJ0LWdyZXAKKyIKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9sYXJnZV9yZXBvCit0ZXN0X2NoZWNrb3V0X3dvcmt0cmVlCisKK2ZvciBwYXR0ZXJuIGluICdpbnQnICd1bmNvbW1vbicgJ8OmJworZG8KKwlmb3IgZW5naW5lIGluIGZpeGVkIGJhc2ljIGV4dGVuZGVkIHBlcmwKKwlkbworCQlpZiB0ZXN0ICRlbmdpbmUgPSAicGVybCIgJiYgISB0ZXN0X2hhdmVfcHJlcmVxIFBDUkUKKwkJdGhlbgorCQkJcHJlcmVxPSJQQ1JFIgorCQllbHNlCisJCQlwcmVyZXE9IiIKKwkJZmkKKwkJdGVzdF9wZXJmICRwcmVyZXEgIiRlbmdpbmUgbG9nJEdJVF9QRVJGXzQyMjFfTE9HX09QVFMgLS1ncmVwPSckcGF0dGVybiciICIKKwkJCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPSRlbmdpbmUgbG9nIC0tcHJldHR5PWZvcm1hdDolaCRHSVRfUEVSRl80MjIxX0xPR19PUFRTIC0tZ3JlcD0nJHBhdHRlcm4nID4nb3V0LiRlbmdpbmUnIHx8IDoKKwkJIgorCWRvbmUKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFzc2VydCB0aGF0IGFsbCBlbmdpbmVzIGZvdW5kIHRoZSBzYW1lIGZvciRHSVRfUEVSRl80MjIxX0xPR19PUFRTICckcGF0dGVybiciICcKKwkJdGVzdF9jbXAgb3V0LmZpeGVkIG91dC5iYXNpYyAmJgorCQl0ZXN0X2NtcCBvdXQuZml4ZWQgb3V0LmV4dGVuZGVkICYmCisJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgUENSRQorCQl0aGVuCisJCQl0ZXN0X2NtcCBvdXQuZml4ZWQgb3V0LnBlcmwKKwkJZmkKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A1MzAyLXBhY2staW5kZXguc2ggYi90L3BlcmYvcDUzMDItcGFjay1pbmRleC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOWIzZTExCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A1MzAyLXBhY2staW5kZXguc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IlRlc3RzIGluZGV4LXBhY2sgcGVyZm9ybWFuY2UiCisKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfbGFyZ2VfcmVwbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2snICcKKwlnaXQgcmVwYWNrIC1hZCAmJgorCVBBQ0s9JChscyAuZ2l0L29iamVjdHMvcGFjay8qLnBhY2sgfCBoZWFkIC1uMSkgJiYKKwl0ZXN0IC1mICIkUEFDSyIgJiYKKwlleHBvcnQgUEFDSworJworCit0ZXN0X3BlcmYgJ2luZGV4LXBhY2sgMCB0aHJlYWRzJyAnCisJcm0gLXJmIHJlcG8uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlcG8uZ2l0ICYmCisJR0lUX0RJUj1yZXBvLmdpdCBnaXQgaW5kZXgtcGFjayAtLXRocmVhZHM9MSAtLXN0ZGluIDwgJFBBQ0sKKycKKwordGVzdF9wZXJmICdpbmRleC1wYWNrIDEgdGhyZWFkICcgJworCXJtIC1yZiByZXBvLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSByZXBvLmdpdCAmJgorCUdJVF9ESVI9cmVwby5naXQgR0lUX0ZPUkNFX1RIUkVBRFM9MSBnaXQgaW5kZXgtcGFjayAtLXRocmVhZHM9MSAtLXN0ZGluIDwgJFBBQ0sKKycKKwordGVzdF9wZXJmICdpbmRleC1wYWNrIDIgdGhyZWFkcycgJworCXJtIC1yZiByZXBvLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSByZXBvLmdpdCAmJgorCUdJVF9ESVI9cmVwby5naXQgZ2l0IGluZGV4LXBhY2sgLS10aHJlYWRzPTIgLS1zdGRpbiA8ICRQQUNLCisnCisKK3Rlc3RfcGVyZiAnaW5kZXgtcGFjayA0IHRocmVhZHMnICcKKwlybSAtcmYgcmVwby5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgcmVwby5naXQgJiYKKwlHSVRfRElSPXJlcG8uZ2l0IGdpdCBpbmRleC1wYWNrIC0tdGhyZWFkcz00IC0tc3RkaW4gPCAkUEFDSworJworCit0ZXN0X3BlcmYgJ2luZGV4LXBhY2sgOCB0aHJlYWRzJyAnCisJcm0gLXJmIHJlcG8uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlcG8uZ2l0ICYmCisJR0lUX0RJUj1yZXBvLmdpdCBnaXQgaW5kZXgtcGFjayAtLXRocmVhZHM9OCAtLXN0ZGluIDwgJFBBQ0sKKycKKwordGVzdF9wZXJmICdpbmRleC1wYWNrIGRlZmF1bHQgbnVtYmVyIG9mIHRocmVhZHMnICcKKwlybSAtcmYgcmVwby5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgcmVwby5naXQgJiYKKwlHSVRfRElSPXJlcG8uZ2l0IGdpdCBpbmRleC1wYWNrIC0tc3RkaW4gPCAkUEFDSworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNTMwMy1tYW55LXBhY2tzLnNoIGIvdC9wZXJmL3A1MzAzLW1hbnktcGFja3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2VlNzkxNgotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNTMwMy1tYW55LXBhY2tzLnNoCkBAIC0wLDAgKzEsMTA2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGVyZm9ybWFuY2Ugd2l0aCBsYXJnZSBudW1iZXJzIG9mIHBhY2tzJworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9sYXJnZV9yZXBvCisKKyMgQSByZWFsIG1hbnktcGFjayBzaXR1YXRpb24gd291bGQgcHJvYmFibHkgY29tZSBmcm9tIGhhdmluZyBhIGxvdCBvZiBwdXNoZXMKKyMgb3ZlciB0aW1lLiBXZSBkb24ndCBrbm93IGhvdyBiaWcgZWFjaCBwdXNoIHdvdWxkIGJlLCBidXQgd2UgY2FuIGZha2UgaXQgYnkKKyMganVzdCB3YWxraW5nIHRoZSBmaXJzdC1wYXJlbnQgY2hhaW4gYW5kIGhhdmluZyBldmVyeSA1IGNvbW1pdHMgYmUgdGhlaXIgb3duCisjICJwdXNoIi4gVGhpcyBpc24ndCBfZW50aXJlbHlfIGFjY3VyYXRlLCBhcyByZWFsIHB1c2hlcyB3b3VsZCBoYXZlIHNvbWUKKyMgZHVwbGljYXRlIG9iamVjdHMgZHVlIHRvIHRoaW4tcGFjayBmaXhpbmcsIGJ1dCBpdCdzIGEgcmVhc29uYWJsZQorIyBhcHByb3hpbWF0aW9uLgorIworIyBBbmQgdGhlbiBhbGwgb2YgdGhlIHJlc3Qgb2YgdGhlIG9iamVjdHMgY2FuIGdvIGluIGEgc2luZ2xlIHBhY2tmaWxlIHRoYXQKKyMgcmVwcmVzZW50cyB0aGUgc3RhdGUgYmVmb3JlIGFueSBvZiB0aG9zZSBwdXNoZXMgKGFjdHVhbGx5LCB3ZSdsbCBnZW5lcmF0ZQorIyB0aGF0IGZpcnN0IGJlY2F1c2UgaW4gc3VjaCBhIHNldHVwIGl0IHdvdWxkIGJlIHRoZSBvbGRlc3QgcGFjaywgYW5kIHdlIHNvcnQKKyMgdGhlIHBhY2tzIGJ5IHJldmVyc2UgbXRpbWUgaW5zaWRlIGdpdCkuCityZXBhY2tfaW50b19uICgpIHsKKwlybSAtcmYgc3RhZ2luZyAmJgorCW1rZGlyIHN0YWdpbmcgJiYKKworCWdpdCByZXYtbGlzdCAtLWZpcnN0LXBhcmVudCBIRUFEIHwKKwlzZWQgLW4gJzF+NXAnIHwKKwloZWFkIC1uICIkMSIgfAorCXBlcmwgLWUgJ3ByaW50IHJldmVyc2UgPD4nIFwKKwk+cHVzaGVzCisKKwkjIGNyZWF0ZSBiYXNlIHBhY2tmaWxlCisJaGVhZCAtbiAxIHB1c2hlcyB8CisJZ2l0IHBhY2stb2JqZWN0cyAtLWRlbHRhLWJhc2Utb2Zmc2V0IC0tcmV2cyBzdGFnaW5nL3BhY2sKKworCSMgYW5kIHRoZW4gaW5jcmVtZW50YWxzIGJldHdlZW4gZWFjaCBwYWlyIG9mIGNvbW1pdHMKKwlsYXN0PSAmJgorCXdoaWxlIHJlYWQgcmV2CisJZG8KKwkJaWYgdGVzdCAtbiAiJGxhc3QiOyB0aGVuCisJCQl7CisJCQkJZWNobyAiJHJldiIgJiYKKwkJCQllY2hvICJeJGxhc3QiCisJCQl9IHwKKwkJCWdpdCBwYWNrLW9iamVjdHMgLS1kZWx0YS1iYXNlLW9mZnNldCAtLXJldnMgXAorCQkJCXN0YWdpbmcvcGFjayB8fCByZXR1cm4gMQorCQlmaQorCQlsYXN0PSRyZXYKKwlkb25lIDxwdXNoZXMgJiYKKworCSMgYW5kIGluc3RhbGwgdGhlIHdob2xlIHRoaW5nCisJcm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKiAmJgorCW12IHN0YWdpbmcvKiAuZ2l0L29iamVjdHMvcGFjay8KK30KKworIyBQcmV0ZW5kIHdlIGp1c3QgaGF2ZSBhIHNpbmdsZSBicmFuY2ggYW5kIG5vIHJlZmxvZ3MsIGFuZCB0aGF0IGV2ZXJ5dGhpbmcgaXMKKyMgaW4gb2JqZWN0cy9wYWNrOyB0aGF0IG1ha2VzIG91ciBmYWtlIHBhY2stYnVpbGRpbmcgdmlhIHJlcGFja19pbnRvX24oKQorIyBtdWNoIHNpbXBsZXIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGlmeSByZWFjaGFiaWxpdHknICcKKwl0aXA9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0ib3B0aW9uIG5vLWRlcmVmJTBhZGVsZXRlICUocmVmbmFtZSkiIHwKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluICYmCisJcm0gLXJmIC5naXQvbG9ncyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICR0aXAgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcmVwYWNrIC1hZAorJworCitmb3IgbnJfcGFja3MgaW4gMSA1MCAxMDAwCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSAkbnJfcGFja3MtcGFjayBzY2VuYXJpbyIgJworCQlyZXBhY2tfaW50b19uICRucl9wYWNrcworCScKKworCXRlc3RfcGVyZiAicmV2LWxpc3QgKCRucl9wYWNrcykiICcKKwkJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWFsbCA+L2Rldi9udWxsCisJJworCisJIyBUaGlzIHNpbXVsYXRlcyB0aGUgaW50ZXJlc3RpbmcgcGFydCBvZiB0aGUgcmVwYWNrLCB3aGljaCBpcyB0aGUKKwkjIGFjdHVhbCBwYWNrIGdlbmVyYXRpb24sIHdpdGhvdXQgc211ZGdpbmcgdGhlIG9uLWRpc2sgc2V0dXAKKwkjIGJldHdlZW4gdHJpYWxzLgorCXRlc3RfcGVyZiAicmVwYWNrICgkbnJfcGFja3MpIiAnCisJCUdJVF9URVNUX0ZVTExfSU5fUEFDS19BUlJBWT0xIFwKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLWtlZXAtdHJ1ZS1wYXJlbnRzIFwKKwkJICAtLWhvbm9yLXBhY2sta2VlcCAtLW5vbi1lbXB0eSAtLWFsbCBcCisJCSAgLS1yZWZsb2cgLS1pbmRleGVkLW9iamVjdHMgLS1kZWx0YS1iYXNlLW9mZnNldCBcCisJCSAgLS1zdGRvdXQgPC9kZXYvbnVsbCA+L2Rldi9udWxsCisJJworZG9uZQorCisjIE1lYXN1cmUgcGFjayBsb2FkaW5nIHdpdGggMTAsMDAwIHBhY2tzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2VuZXJhdGUgbG90cyBvZiBwYWNrcycgJworCWZvciBpIGluICQodGVzdF9zZXEgMTAwMDApOyBkbworCQllY2hvICJibG9iIgorCQllY2hvICJkYXRhIDw8RU9GIgorCQllY2hvICJibG9iICRpIgorCQllY2hvICJFT0YiCisJCWVjaG8gImNoZWNrcG9pbnQiCisJZG9uZSB8CisJZ2l0IC1jIGZhc3RpbXBvcnQudW5wYWNrTGltaXQ9MCBmYXN0LWltcG9ydAorJworCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byBldmFsdWF0ZSBsb2FkIHRpbWUgZm9yIGEgbGFyZ2UgbnVtYmVyCisjIG9mIHBhY2tzIHdoaWxlIGRvaW5nIGFzIGxpdHRsZSBvdGhlciB3b3JrIGFzIHBvc3NpYmxlLgordGVzdF9wZXJmICJsb2FkIDEwLDAwMCBwYWNrcyIgJworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIkhFQURee2NvbW1pdH0iCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A1MzA0LXBydW5lLnNoIGIvdC9wZXJmL3A1MzA0LXBydW5lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzYmFlZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDUzMDQtcHJ1bmUuc2gKQEAgLTAsMCArMSwzNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BlcmZvcm1hbmNlIHRlc3RzIG9mIHBydW5lJworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHJlYWNoYWJsZSBsb29zZSBvYmplY3RzJyAnCisJZ2l0IHJlcGFjayAtYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHMnICcKKwlnaXQgcHJ1bmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlybSB0aGVyZSBhcmUgbm8gbG9vc2Ugb2JqZWN0cycgJworCWdpdCBjb3VudC1vYmplY3RzIHwgZ3JlcCBeMAorJworCit0ZXN0X3BlcmYgJ3BydW5lIHdpdGggbm8gb2JqZWN0cycgJworCWdpdCBwcnVuZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgd2l0aCBiaXRtYXBzJyAnCisJZ2l0IHJlcGFjayAtYWRiCisnCisKKyMgV2UgaGF2ZSB0byBjcmVhdGUgdGhlIG9iamVjdCBpbiBlYWNoIHRyaWFsIHJ1biwgc2luY2Ugb3RoZXJ3aXNlCisjIHJ1bnMgYWZ0ZXIgdGhlIGZpcnN0IHNlZSBubyBvYmplY3QgYW5kIGp1c3Qgc2tpcCB0aGUgdHJhdmVyc2FsIGVudGlyZWx5IQordGVzdF9wZXJmICdwcnVuZSB3aXRoIGJpdG1hcHMnICcKKwllY2hvICJwcm9iYWJseSBub3QgcHJlc2VudCBpbiByZXBvIiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluICYmCisJZ2l0IHBydW5lCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A1MzEwLXBhY2stYml0bWFwcy5zaCBiL3QvcGVyZi9wNTMxMC1wYWNrLWJpdG1hcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjNlNzI1ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNTMxMC1wYWNrLWJpdG1hcHMuc2gKQEAgLTAsMCArMSw5OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIHBhY2sgcGVyZm9ybWFuY2UgdXNpbmcgYml0bWFwcycKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfbGFyZ2VfcmVwbworCisjIG5vdGUgdGhhdCB3ZSBkbyBldmVyeXRoaW5nIHRocm91Z2ggY29uZmlnLAorIyBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gY29tcGFyZSBiaXRtYXAtYXdhcmUKKyMgZ2l0IHZlcnN1cyBub24tYml0bWFwIGdpdAorIworIyBXZSBpbnRlbnRpb25hbGx5IHVzZSB0aGUgZGVwcmVjYXRlZCBwYWNrLndyaXRlYml0bWFwcworIyBjb25maWcgc28gdGhhdCB3ZSBjYW4gdGVzdCBhZ2FpbnN0IG9sZGVyIHZlcnNpb25zIG9mIGdpdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJpdG1hcCBjb25maWcnICcKKwlnaXQgY29uZmlnIHBhY2sud3JpdGViaXRtYXBzIHRydWUKKycKKwordGVzdF9wZXJmICdyZXBhY2sgdG8gZGlzaycgJworCWdpdCByZXBhY2sgLWFkCisnCisKK3Rlc3RfcGVyZiAnc2ltdWxhdGVkIGNsb25lJyAnCisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCAtLWFsbCA8L2Rldi9udWxsID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdzaW11bGF0ZWQgZmV0Y2gnICcKKwloYXZlPSQoZ2l0IHJldi1saXN0IEhFQUR+MTAwIC0xKSAmJgorCXsKKwkJZWNobyBIRUFEICYmCisJCWVjaG8gXiRoYXZlCisJfSB8IGdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0ID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdwYWNrIHRvIGZpbGUgKGJpdG1hcCknICcKKwlnaXQgcGFjay1vYmplY3RzIC0tdXNlLWJpdG1hcC1pbmRleCAtLWFsbCBwYWNrMWIgPC9kZXYvbnVsbCA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAncmV2LWxpc3QgKGNvbW1pdHMpJyAnCisJZ2l0IHJldi1saXN0IC0tYWxsIC0tdXNlLWJpdG1hcC1pbmRleCA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAncmV2LWxpc3QgKG9iamVjdHMpJyAnCisJZ2l0IHJldi1saXN0IC0tYWxsIC0tdXNlLWJpdG1hcC1pbmRleCAtLW9iamVjdHMgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ3Jldi1saXN0IGNvdW50IHdpdGggYmxvYjpub25lJyAnCisJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCAtLWNvdW50IC0tb2JqZWN0cyAtLWFsbCBcCisJCS0tZmlsdGVyPWJsb2I6bm9uZSA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAncmV2LWxpc3QgY291bnQgd2l0aCBibG9iOmxpbWl0PTFrJyAnCisJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCAtLWNvdW50IC0tb2JqZWN0cyAtLWFsbCBcCisJCS0tZmlsdGVyPWJsb2I6bGltaXQ9MWsgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ3Jldi1saXN0IGNvdW50IHdpdGggdHJlZTowJyAnCisJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCAtLWNvdW50IC0tb2JqZWN0cyAtLWFsbCBcCisJCS0tZmlsdGVyPXRyZWU6MCA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAnc2ltdWxhdGVkIHBhcnRpYWwgY2xvbmUnICcKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IC0tYWxsIC0tZmlsdGVyPWJsb2I6bm9uZSA8L2Rldi9udWxsID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHBhcnRpYWwgYml0bWFwIHN0YXRlJyAnCisJIyBwaWNrIGEgY29tbWl0IHRvIHJlcHJlc2VudCB0aGUgcmVwbyB0aXAgaW4gdGhlIHBhc3QKKwljdXRvZmY9JChnaXQgcmV2LWxpc3QgSEVBRH4xMDAgLTEpICYmCisJb3JpZ190aXA9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwkjIG5vdyBraWxsIG9mZiBhbGwgb2YgdGhlIHJlZnMgYW5kIHByZXRlbmQgd2UgaGFkCisJIyBqdXN0IHRoZSBvbmUgdGlwCisJcm0gLXJmIC5naXQvbG9ncyAuZ2l0L3JlZnMvKiAuZ2l0L3BhY2tlZC1yZWZzICYmCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkY3V0b2ZmICYmCisKKwkjIGFuZCB0aGVuIHJlcGFjaywgd2hpY2ggd2lsbCBsZWF2ZSB1cyB3aXRoIGEgbmljZQorCSMgYmlnIGJpdG1hcCBwYWNrIG9mIHRoZSAib2xkIiBoaXN0b3J5LCBhbmQgYWxsIG9mCisJIyB0aGUgbmV3IGhpc3Rvcnkgd2lsbCBiZSBsb29zZSwgYXMgaWYgaXQgaGFkIGJlZW4gcHVzaGVkCisJIyB1cCBpbmNyZW1lbnRhbGx5IGFuZCBleHBsb2RlZCB2aWEgdW5wYWNrLW9iamVjdHMKKwlnaXQgcmVwYWNrIC1BZCAmJgorCisJIyBhbmQgbm93IHJlc3RvcmUgb3VyIG9yaWdpbmFsIHRpcCwgYXMgaWYgdGhlIHB1c2hlcworCSMgaGFkIGhhcHBlbmVkCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkb3JpZ190aXAKKycKKwordGVzdF9wZXJmICdjbG9uZSAocGFydGlhbCBiaXRtYXApJyAnCisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCAtLWFsbCA8L2Rldi9udWxsID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdwYWNrIHRvIGZpbGUgKHBhcnRpYWwgYml0bWFwKScgJworCWdpdCBwYWNrLW9iamVjdHMgLS11c2UtYml0bWFwLWluZGV4IC0tYWxsIHBhY2syYiA8L2Rldi9udWxsID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdyZXYtbGlzdCB3aXRoIHRyZWUgZmlsdGVyIChwYXJ0aWFsIGJpdG1hcCknICcKKwlnaXQgcmV2LWxpc3QgLS11c2UtYml0bWFwLWluZGV4IC0tY291bnQgLS1vYmplY3RzIC0tYWxsIFwKKwkJLS1maWx0ZXI9dHJlZTowID4vZGV2L251bGwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDUzMTEtcGFjay1iaXRtYXBzLWZldGNoLnNoIGIvdC9wZXJmL3A1MzExLXBhY2stYml0bWFwcy1mZXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40N2MzZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A1MzExLXBhY2stYml0bWFwcy1mZXRjaC5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGVyZm9ybWFuY2Ugb2YgZmV0Y2hlcyBmcm9tIGJpdG1hcHBlZCBwYWNrcycKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBiaXRtYXBwZWQgc2VydmVyIHJlcG8nICcKKwlnaXQgY29uZmlnIHBhY2sud3JpdGViaXRtYXBzIHRydWUgJiYKKwlnaXQgcmVwYWNrIC1hZAorJworCisjIHNpbXVsYXRlIGEgZmV0Y2ggZnJvbSBhIHJlcG9zaXRvcnkgdGhhdCBsYXN0IGZldGNoZWQgTiBkYXlzIGFnbywgZm9yCisjIHZhcmlvdXMgdmFsdWVzIG9mIE4uIFdlIGRvIHNvIGJ5IGZvbGxvd2luZyB0aGUgZmlyc3QtcGFyZW50IGNoYWluLAorIyBhbmQgYXNzdW1lIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgY2hhaW4gdGhhdCBpcyBOIGRheXMgb2xkZXIgdGhhbiB0aGUgY3VycmVudAorIyBIRUFEIGlzIHdoZXJlIHRoZSBIRUFEIHdvdWxkIGhhdmUgYmVlbiB0aGVuLgorZm9yIGRheXMgaW4gMSAyIDQgOCAxNiAzMiA2NCAxMjg7IGRvCisJdGl0bGU9JChwcmludGYgJyUxMHMnICIoJGRheXMgZGF5cykiKQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIHJldnMgZnJvbSAkZGF5cyBkYXlzIGFnbyIgJworCQlub3c9JChnaXQgbG9nIC0xIC0tZm9ybWF0PSVjdCBIRUFEKSAmJgorCQl0aGVuPSQoKCRub3cgLSAoJGRheXMgKiA4NjQwMCkpKSAmJgorCQl0aXA9JChnaXQgcmV2LWxpc3QgLTEgLS1maXJzdC1wYXJlbnQgLS11bnRpbD0kdGhlbiBIRUFEKSAmJgorCQl7CisJCQllY2hvIEhFQUQgJiYKKwkJCWVjaG8gXiR0aXAKKwkJfSA+cmV2cworCScKKworCXRlc3RfcGVyZiAic2VydmVyICR0aXRsZSIgJworCQlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IC0tcmV2cyBcCisJCQkJIC0tdGhpbiAtLWRlbHRhLWJhc2Utb2Zmc2V0IFwKKwkJCQkgPHJldnMgPnRtcC5wYWNrCisJJworCisJdGVzdF9zaXplICJzaXplICAgJHRpdGxlIiAnCisJCXdjIC1jIDx0bXAucGFjaworCScKKworCXRlc3RfcGVyZiAiY2xpZW50ICR0aXRsZSIgJworCQlnaXQgaW5kZXgtcGFjayAtLXN0ZGluIC0tZml4LXRoaW4gPHRtcC5wYWNrCisJJworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNTU1MC1mZXRjaC10YWdzLnNoIGIvdC9wZXJmL3A1NTUwLWZldGNoLXRhZ3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDBlMGUwMQotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNTU1MC1mZXRjaC10YWdzLnNoCkBAIC0wLDAgKzEsNzggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwZXJmb3JtYW5jZSBvZiB0YWctZm9sbG93aW5nIHdpdGggbWFueSB0YWdzCisKK1RoaXMgdGVzdHMgYSBmYWlybHkgcGF0aG9sb2dpY2FsIGNhc2UsIHNvIHJhdGhlciB0aGFuIHJlbHkgb24gYSByZWFsLXdvcmxkCitjYXNlLCB3ZSB3aWxsIGNvbnN0cnVjdCBvdXIgb3duIHJlcG9zaXRvcnkuIFRoZSBzaXR1YXRpb24gaXMgcm91Z2hseSBhcworZm9sbG93cy4KKworVGhlIHBhcmVudCByZXBvc2l0b3J5IGhhcyBhIGxhcmdlIG51bWJlciBvZiB0YWdzIHdoaWNoIGFyZSBkaXNjb25uZWN0ZWQgZnJvbQordGhlIHJlc3Qgb2YgaGlzdG9yeS4gVGhhdCBtYWtlcyB0aGVtIGNhbmRpZGF0ZXMgZm9yIHRhZy1mb2xsb3dpbmcsIGJ1dCB3ZSBuZXZlcgorYWN0dWFsbHkgZ3JhYiB0aGVtIChhbmQgdGh1cyB0aGV5IHdpbGwgaW1wYWN0IGVhY2ggc3Vic2VxdWVudCBmZXRjaCkuCisKK1RoZSBjaGlsZCByZXBvc2l0b3J5IGlzIGEgY2xvbmUgb2YgcGFyZW50LCB3aXRob3V0IHRoZSB0YWdzLCBhbmQgaXMgYXQgbGVhc3QKK29uZSBjb21taXQgYmVoaW5kIHRoZSBwYXJlbnQgKG1lYW5pbmcgdGhhdCB3ZSB3aWxsIGZldGNoIG9uZSBvYmplY3QgYW5kIHRoZW4KK2V4YW1pbmUgdGhlIHRhZ3MgdG8gc2VlIGlmIHRoZXkgbmVlZCBmb2xsb3dlZCkuIEZ1cnRoZXJtb3JlLCBpdCBoYXMgYSBsYXJnZQorbnVtYmVyIG9mIHBhY2tzLgorCitUaGUgZXhhY3QgdmFsdWVzIG9mICJsYXJnZSIgaGVyZSBhcmUgc29tZXdoYXQgYXJiaXRyYXJ5OyBJIHBpY2tlZCB2YWx1ZXMgdGhhdAorc3RhcnQgdG8gc2hvdyBhIG5vdGljZWFibGUgcGVyZm9ybWFuY2UgcHJvYmxlbSBvbiBteSBtYWNoaW5lLCBidXQgd2l0aG91dAordGFraW5nIHRvbyBsb25nIHRvIHNldCB1cCBhbmQgcnVuIHRoZSB0ZXN0cy4KKycKKy4gLi9wZXJmLWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZL3BlcmYvbGliLXBhY2suc2giCisKKyMgbWFrZSBhIGxvbmcgbm9uc2Vuc2UgaGlzdG9yeSBvbiBicmFuY2ggJDEsIGNvbnNpc3Rpbmcgb2YgJDIgY29tbWl0cywgZWFjaAorIyB3aXRoIGEgdW5pcXVlIGZpbGUgcG9pbnRpbmcgdG8gdGhlIGJsb2IgYXQgJDIuCitjcmVhdGVfaGlzdG9yeSAoKSB7CisJcGVybCAtbGUgJworCQlteSAoJGJyYW5jaCwgJG4sICRibG9iKSA9IEBBUkdWOworCQlmb3IgKDEuLiRuKSB7CisJCQlwcmludCAiY29tbWl0IHJlZnMvaGVhZHMvJGJyYW5jaCI7CisJCQlwcmludCAiY29tbWl0dGVyIG5vYm9keSA8bm9ib2R5QGV4YW1wbGUuY29tPiBub3ciOworCQkJcHJpbnQgImRhdGEgNCI7CisJCQlwcmludCAiZm9vIjsKKwkJCXByaW50ICJNIDEwMDY0NCAkYmxvYiAkXyI7CisJCX0KKwknICIkQCIgfAorCWdpdCBmYXN0LWltcG9ydCAtLWRhdGUtZm9ybWF0PW5vdworfQorCisjIG1ha2UgYSBzZXJpZXMgb2YgdGFncywgb25lIHBlciBjb21taXQgaW4gdGhlIHJldmlzaW9uIHJhbmdlIGdpdmVuIGJ5ICRACitjcmVhdGVfdGFncyAoKSB7CisJZ2l0IHJldi1saXN0ICIkQCIgfAorCXBlcmwgLWxuZSAncHJpbnQgImNyZWF0ZSByZWZzL3RhZ3MvJC4gJF8iJyB8CisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcGFyZW50IGFuZCBjaGlsZCcgJworCWdpdCBpbml0IHBhcmVudCAmJgorCWdpdCAtQyBwYXJlbnQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYmFzZSAmJgorCWdpdCBjbG9uZSBwYXJlbnQgY2hpbGQgJiYKKwlnaXQgLUMgcGFyZW50IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHRyaWdnZXItZmV0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9wdWxhdGUgcGFyZW50IHRhZ3MnICcKKwkoCisJCWNkIHBhcmVudCAmJgorCQlibG9iPSQoZWNobyBjb250ZW50IHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJCWNyZWF0ZV9oaXN0b3J5IGNydWZ0IDMwMDAgJGJsb2IgJiYKKwkJY3JlYXRlX3RhZ3MgY3J1ZnQgJiYKKwkJZ2l0IGJyYW5jaCAtRCBjcnVmdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGNoaWxkIHBhY2tzJyAnCisJKAorCQljZCBjaGlsZCAmJgorCQlzZXR1cF9tYW55X3BhY2tzCisJKQorJworCit0ZXN0X3BlcmYgJ2ZldGNoJyAnCisJIyBtYWtlIHN1cmUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGZldGNoIG9uIGVhY2ggaXRlcmF0aW9uCisJZ2l0IC1DIGNoaWxkIHVwZGF0ZS1yZWYgLWQgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwlnaXQgLUMgY2hpbGQgZmV0Y2gKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDU1NTEtZmV0Y2gtcmVzY2FuLnNoIGIvdC9wZXJmL3A1NTUxLWZldGNoLXJlc2Nhbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iOTlkYzIzCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A1NTUxLWZldGNoLXJlc2Nhbi5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZmV0Y2ggcGVyZm9ybWFuY2Ugd2l0aCBtYW55IHBhY2tzCisKK0l0IGlzIGNvbW1vbiBmb3IgZmV0Y2ggdG8gY29uc2lkZXIgb2JqZWN0cyB0aGF0IHdlIG1pZ2h0IG5vdCBoYXZlLCBhbmQgaXQgaXMgYW4KK2Vhc3kgbWlzdGFrZSBmb3IgdGhlIGNvZGUgdG8gdXNlIGEgZnVuY3Rpb24gbGlrZSBgcGFyc2Vfb2JqZWN0YCB0aGF0IG1pZ2h0CitnaXZlIHRoZSBjb3JyZWN0IF9hbnN3ZXJfIG9uIHN1Y2ggYW4gb2JqZWN0LCBidXQgZG8gc28gc2xvd2x5IChkdWUgdG8KK3JlLXNjYW5uaW5nIHRoZSBwYWNrIGRpcmVjdG9yeSBmb3IgbG9va3VwIGZhaWx1cmVzKS4KKworVGhlIHJlc3VsdGluZyBwZXJmb3JtYW5jZSBkcm9wIGNhbiBiZSBoYXJkIHRvIG5vdGljZSBpbiBhIHJlYWwgcmVwb3NpdG9yeSwgYnV0CitiZWNvbWVzIHF1aXRlIGxhcmdlIGluIGEgcmVwb3NpdG9yeSB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIHBhY2tzLiBTbyB0aGlzCit0ZXN0IGNyZWF0ZXMgYSBtb3JlIHBhdGhvbG9naWNhbCBjYXNlLCBzaW5jZSBhbnkgbWlzdGFrZXMgd291bGQgcHJvZHVjZSBhIG1vcmUKK25vdGljZWFibGUgc2xvd2Rvd24uCisnCisuIC4vcGVyZi1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvcGVyZi9saWItcGFjay5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcGFyZW50IGFuZCBjaGlsZCcgJworCWdpdCBpbml0IHBhcmVudCAmJgorCWdpdCBjbG9uZSBwYXJlbnQgY2hpbGQKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcmVmcyBpbiB0aGUgcGFyZW50JyAnCisJKAorCQljZCBwYXJlbnQgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGZvbyAmJgorCQloZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQl0ZXN0X3NlcSAxMDAwIHwKKwkJc2VkICJzLC4qLHVwZGF0ZSByZWZzL2hlYWRzLyYgJGhlYWQsIiB8CisJCSRNT0RFUk5fR0lUIHVwZGF0ZS1yZWYgLS1zdGRpbgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG1hbnkgcGFja3MgaW4gdGhlIGNoaWxkJyAnCisJKAorCQljZCBjaGlsZCAmJgorCQlzZXR1cF9tYW55X3BhY2tzCisJKQorJworCit0ZXN0X3BlcmYgJ2ZldGNoJyAnCisJIyBzdGFydCBhdCB0aGUgc2FtZSBzdGF0ZSBmb3IgZWFjaCBpdGVyYXRpb24KKwlvYmo9JCgkTU9ERVJOX0dJVCAtQyBwYXJlbnQgcmV2LXBhcnNlIEhFQUQpICYmCisJKAorCQljZCBjaGlsZCAmJgorCQkkTU9ERVJOX0dJVCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9ImRlbGV0ZSAlKHJlZm5hbWUpIiByZWZzL3JlbW90ZXMgfAorCQkkTU9ERVJOX0dJVCB1cGRhdGUtcmVmIC0tc3RkaW4gJiYKKwkJcm0gLXZmIC5naXQvb2JqZWN0cy8kKGVjaG8gJG9iaiB8IHNlZCAic3xeLi58Ji98IikgJiYKKworCQlnaXQgZmV0Y2gKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A1NjAwLXBhcnRpYWwtY2xvbmUuc2ggYi90L3BlcmYvcDU2MDAtcGFydGlhbC1jbG9uZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZTA0YmQyCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A1NjAwLXBhcnRpYWwtY2xvbmUuc2gKQEAgLTAsMCArMSwyNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BlcmZvcm1hbmNlIG9mIHBhcnRpYWwgY2xvbmVzJworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5hYmxlIHNlcnZlci1zaWRlIGNvbmZpZycgJworCWdpdCBjb25maWcgdXBsb2FkcGFjay5hbGxvd0ZpbHRlciB0cnVlICYmCisJZ2l0IGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93QW55U0hBMUluV2FudCB0cnVlCisnCisKK3Rlc3RfcGVyZiAnY2xvbmUgd2l0aG91dCBibG9icycgJworCXJtIC1yZiBiYXJlLmdpdCAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tYmFyZSAtLWZpbHRlcj1ibG9iOm5vbmUgLiBiYXJlLmdpdAorJworCit0ZXN0X3BlcmYgJ2NoZWNrb3V0IG9mIHJlc3VsdCcgJworCXJtIC1yZiB3b3JrdHJlZSAmJgorCW1rZGlyIC1wIHdvcmt0cmVlLy5naXQgJiYKKwl0YXIgLUMgYmFyZS5naXQgLWNmIC0gLiB8IHRhciAtQyB3b3JrdHJlZS8uZ2l0IC14ZiAtICYmCisJZ2l0IC1DIHdvcmt0cmVlIGNvbmZpZyBjb3JlLmJhcmUgZmFsc2UgJiYKKwlnaXQgLUMgd29ya3RyZWUgY2hlY2tvdXQgLWYKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDU2MDEtY2xvbmUtcmVmZXJlbmNlLnNoIGIvdC9wZXJmL3A1NjAxLWNsb25lLXJlZmVyZW5jZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OGZlZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A1NjAxLWNsb25lLXJlZmVyZW5jZS5zaApAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc3BlZWQgb2YgY2xvbmUgLS1yZWZlcmVuY2UnCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgc2hhcmVhYmxlIHJlcG9zaXRvcnknICcKKwlnaXQgY2xvbmUgLS1iYXJlIC4gc2hhcmVkLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZHZhbmNlIGJhc2UgcmVwb3NpdG9yeScgJworCSMgRG8gbm90IHVzZSB0ZXN0X2NvbW1pdCBoZXJlOyBpdHMgdGVzdF90aWNrIHdpbGwKKwkjIHVzZSBzb21lIGFuY2llbnQgaGFyZC1jb2RlZCBkYXRlLiBUaGUgcmVzdWx0aW5nIGNsb2NrCisJIyBza2V3IHdpbGwgY2F1c2UgcGFjay1vYmplY3RzIHRvIHRyYXZlcnNlIGluIGEgdmVyeQorCSMgc3ViLW9wdGltYWwgb3JkZXIsIHNrZXdpbmcgdGhlIHJlc3VsdHMuCisJZWNobyBjb250ZW50ID5uZXctZmlsZS10aGF0LWRvZXMtbm90LWV4aXN0ICYmCisJZ2l0IGFkZCBuZXctZmlsZS10aGF0LWRvZXMtbm90LWV4aXN0ICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IGNvbW1pdCIKKycKKwordGVzdF9wZXJmICdjbG9uZSAtLXJlZmVyZW5jZScgJworCXJtIC1yZiBkc3QuZ2l0ICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1iYXJlIC0tcmVmZXJlbmNlIHNoYXJlZC5naXQgLiBkc3QuZ2l0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A3MDAwLWZpbHRlci1icmFuY2guc2ggYi90L3BlcmYvcDcwMDAtZmlsdGVyLWJyYW5jaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMDI5NTg2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A3MDAwLWZpbHRlci1icmFuY2guc2gKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BlcmZvcm1hbmNlIG9mIGZpbHRlci1icmFuY2gnCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbwordGVzdF9jaGVja291dF93b3JrdHJlZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXJrIGJhc2VzIGZvciB0ZXN0cycgJworCWdpdCB0YWcgLWYgdGlwICYmCisJZ2l0IHRhZyAtZiBiYXNlIEhFQUR+MTAwCisnCisKK3Rlc3RfcGVyZiAnbm9vcCBmaWx0ZXInICcKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggdGlwICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgYmFzZS4uSEVBRAorJworCit0ZXN0X3BlcmYgJ25vb3AgcHJ1bmUtZW1wdHknICcKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggdGlwICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgLS1wcnVuZS1lbXB0eSBiYXNlLi5IRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A3MzAwLWNsZWFuLnNoIGIvdC9wZXJmL3A3MzAwLWNsZWFuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdjMTg4OGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDczMDAtY2xlYW4uc2gKQEAgLTAsMCArMSwzNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IlRlc3QgZ2l0LWNsZWFuIHBlcmZvcm1hbmNlIgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbwordGVzdF9jaGVja291dF93b3JrdHJlZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB1bnRyYWNrZWQgZGlyZWN0b3J5IHdpdGggbWFueSBzdWIgZGlycycgJworCXJtIC1yZiA1MDBfc3ViX2RpcnMgMTAwMDAwX3N1Yl9kaXJzIGNsZWFuX3Rlc3RfZGlyICYmCisJbWtkaXIgNTAwX3N1Yl9kaXJzIDEwMDAwMF9zdWJfZGlycyBjbGVhbl90ZXN0X2RpciAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMSA1MDApCisJZG8KKwkJbWtkaXIgNTAwX3N1Yl9kaXJzL2RpciRpIHx8IHJldHVybiAkPworCWRvbmUgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMjAwKQorCWRvCisJCWNwIC1yIDUwMF9zdWJfZGlycyAxMDAwMDBfc3ViX2RpcnMvZGlyJGkgfHwgcmV0dXJuICQ/CisJZG9uZQorJworCit0ZXN0X3BlcmYgJ2NsZWFuIG1hbnkgdW50cmFja2VkIHN1YiBkaXJzLCBjaGVjayBmb3IgbmVzdGVkIGdpdCcgJworCWdpdCBjbGVhbiAtbiAtcSAtZiAtZCAxMDAwMDBfc3ViX2RpcnMvCisnCisKK3Rlc3RfcGVyZiAnY2xlYW4gbWFueSB1bnRyYWNrZWQgc3ViIGRpcnMsIGlnbm9yZSBuZXN0ZWQgZ2l0JyAnCisJZ2l0IGNsZWFuIC1uIC1xIC1mIC1mIC1kIDEwMDAwMF9zdWJfZGlycy8KKycKKwordGVzdF9wZXJmICdscy1maWxlcyAtbycgJworCWdpdCBscy1maWxlcyAtbworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNzUxOS1mc21vbml0b3Iuc2ggYi90L3BlcmYvcDc1MTktZnNtb25pdG9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRlZjdlY2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDc1MTktZnNtb25pdG9yLnNoCkBAIC0wLDAgKzEsMTgzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdCBjb3JlLmZzbW9uaXRvciIKKworLiAuL3BlcmYtbGliLnNoCisKKyMKKyMgUGVyZm9ybWFuY2UgdGVzdCBmb3IgdGhlIGZzbW9uaXRvciBmZWF0dXJlIHdoaWNoIGVuYWJsZXMgZ2l0IHRvIHRhbGsgdG8gYQorIyBmaWxlIHN5c3RlbSBjaGFuZ2UgbW9uaXRvciBhbmQgYXZvaWQgaGF2aW5nIHRvIHNjYW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5CisjIGZvciBuZXcgb3IgbW9kaWZpZWQgZmlsZXMuCisjCisjIEJ5IGRlZmF1bHQsIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHdpbGwgdXRpbGl6ZSB0aGUgV2F0Y2htYW4gZmlsZSBzeXN0ZW0KKyMgbW9uaXRvciBpZiBpdCBpcyBpbnN0YWxsZWQuICBJZiBXYXRjaG1hbiBpcyBub3QgaW5zdGFsbGVkLCBpdCB3aWxsIHVzZSBhCisjIGR1bW15IGludGVncmF0aW9uIHNjcmlwdCB0aGF0IGRvZXMgbm90IHJlcG9ydCBhbnkgbmV3IG9yIG1vZGlmaWVkIGZpbGVzLgorIyBUaGUgZHVtbXkgc2NyaXB0IGhhcyB2ZXJ5IGxpdHRsZSBvdmVyaGVhZCB3aGljaCBwcm92aWRlcyBvcHRpbWlzdGljIHJlc3VsdHMuCisjCisjIFRoZSBwZXJmb3JtYW5jZSB0ZXN0IHdpbGwgYWxzbyB1c2UgdGhlIHVudHJhY2tlZCBjYWNoZSBmZWF0dXJlIGlmIGl0IGlzCisjIGF2YWlsYWJsZSBhcyBmc21vbml0b3IgdXNlcyBpdCB0byBzcGVlZCB1cCBzY2FubmluZyBmb3IgdW50cmFja2VkIGZpbGVzLgorIworIyBUaGVyZSBhcmUgMyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBhbHRlciB0aGUgZGVmYXVsdAorIyBiZWhhdmlvciBvZiB0aGUgcGVyZm9ybWFuY2UgdGVzdDoKKyMKKyMgR0lUX1BFUkZfNzUxOV9VTlRSQUNLRURfQ0FDSEU6IHVzZWQgdG8gY29uZmlndXJlIGNvcmUudW50cmFja2VkQ2FjaGUKKyMgR0lUX1BFUkZfNzUxOV9TUExJVF9JTkRFWDogdXNlZCB0byBjb25maWd1cmUgY29yZS5zcGxpdEluZGV4CisjIEdJVF9QRVJGXzc1MTlfRlNNT05JVE9SOiB1c2VkIHRvIGNvbmZpZ3VyZSBjb3JlLmZzTW9uaXRvcgorIworIyBUaGUgYmlnIHdpbiBmb3IgdXNpbmcgZnNtb25pdG9yIGlzIHRoZSBlbGltaW5hdGlvbiBvZiB0aGUgbmVlZCB0byBzY2FuIHRoZQorIyB3b3JraW5nIGRpcmVjdG9yeSBsb29raW5nIGZvciBjaGFuZ2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMuIElmIHRoZSBmaWxlCisjIGluZm9ybWF0aW9uIGlzIGFsbCBjYWNoZWQgaW4gUkFNLCB0aGUgYmVuZWZpdHMgYXJlIHJlZHVjZWQuCisjCisjIEdJVF9QRVJGXzc1MTlfRFJPUF9DQUNIRTogaWYgc2V0LCB0aGUgT1MgY2FjaGVzIGFyZSBkcm9wcGVkIGJldHdlZW4gdGVzdHMKKyMKKwordGVzdF9wZXJmX2xhcmdlX3JlcG8KK3Rlc3RfY2hlY2tvdXRfd29ya3RyZWUKKwordGVzdF9sYXp5X3ByZXJlcSBVTlRSQUNLRURfQ0FDSEUgJworCXsgZ2l0IHVwZGF0ZS1pbmRleCAtLXRlc3QtdW50cmFja2VkLWNhY2hlOyByZXQ9JD87IH0gJiYKKwl0ZXN0ICRyZXQgLW5lIDEKKycKKwordGVzdF9sYXp5X3ByZXJlcSBXQVRDSE1BTiAnCisJY29tbWFuZCAtdiB3YXRjaG1hbgorJworCitpZiB0ZXN0X2hhdmVfcHJlcmVxIFdBVENITUFOCit0aGVuCisJIyBDb252ZXJ0IHVuaXggc3R5bGUgcGF0aHMgdG8gZXNjYXBlZCBXaW5kb3dzIHN0eWxlIHBhdGhzIGZvciBXYXRjaG1hbgorCWNhc2UgIiQodW5hbWUgLXMpIiBpbgorCU1TWVNfTlQqKQorCSAgR0lUX1dPUktfVFJFRT0iJChjeWdwYXRoIC1hdyAiJFBXRCIgfCBzZWQgJ3MsXFwsLyxnJykiCisJICA7OworCSopCisJICBHSVRfV09SS19UUkVFPSIkUFdEIgorCSAgOzsKKwllc2FjCitmaQorCitpZiB0ZXN0IC1uICIkR0lUX1BFUkZfNzUxOV9EUk9QX0NBQ0hFIgordGhlbgorCSMgV2hlbiB1c2luZyBHSVRfUEVSRl83NTE5X0RST1BfQ0FDSEUsIEdJVF9QRVJGX1JFUEVBVF9DT1VOVCBtdXN0IGJlIDEgdG8KKwkjIGdlbmVyYXRlIHZhbGlkIHJlc3VsdHMuIE90aGVyd2lzZSB0aGUgY2FjaGluZyB0aGF0IGhhcHBlbnMgZm9yIHRoZSBudGgKKwkjIHJ1biB3aWxsIG5lZ2F0ZSB0aGUgdmFsaWRpdHkgb2YgdGhlIGNvbXBhcmlzb25zLgorCWlmIHRlc3QgIiRHSVRfUEVSRl9SRVBFQVRfQ09VTlQiIC1uZSAxCisJdGhlbgorCQllY2hvICJ3YXJuaW5nOiBTZXR0aW5nIEdJVF9QRVJGX1JFUEVBVF9DT1VOVD0xIiA+JjIKKwkJR0lUX1BFUkZfUkVQRUFUX0NPVU5UPTEKKwlmaQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgZm9yIGZzbW9uaXRvciIgJworCSMgc2V0IHVudHJhY2tlZENhY2hlIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQKKwlpZiB0ZXN0IC1uICIkR0lUX1BFUkZfNzUxOV9VTlRSQUNLRURfQ0FDSEUiCisJdGhlbgorCQlnaXQgY29uZmlnIGNvcmUudW50cmFja2VkQ2FjaGUgIiRHSVRfUEVSRl83NTE5X1VOVFJBQ0tFRF9DQUNIRSIKKwllbHNlCisJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgVU5UUkFDS0VEX0NBQ0hFCisJCXRoZW4KKwkJCWdpdCBjb25maWcgY29yZS51bnRyYWNrZWRDYWNoZSB0cnVlCisJCWVsc2UKKwkJCWdpdCBjb25maWcgY29yZS51bnRyYWNrZWRDYWNoZSBmYWxzZQorCQlmaQorCWZpICYmCisKKwkjIHNldCBjb3JlLnNwbGl0aW5kZXggZGVwZW5kaW5nIG9uIHRoZSBlbnZpcm9ubWVudAorCWlmIHRlc3QgLW4gIiRHSVRfUEVSRl83NTE5X1NQTElUX0lOREVYIgorCXRoZW4KKwkJZ2l0IGNvbmZpZyBjb3JlLnNwbGl0SW5kZXggIiRHSVRfUEVSRl83NTE5X1NQTElUX0lOREVYIgorCWZpICYmCisKKwkjIHNldCBJTlRFR1JBVElPTl9TQ1JJUFQgZGVwZW5kaW5nIG9uIHRoZSBlbnZpcm9ubWVudAorCWlmIHRlc3QgLW4gIiRHSVRfUEVSRl83NTE5X0ZTTU9OSVRPUiIKKwl0aGVuCisJCUlOVEVHUkFUSU9OX1NDUklQVD0iJEdJVF9QRVJGXzc1MTlfRlNNT05JVE9SIgorCWVsc2UKKwkJIworCQkjIENob29zZSBpbnRlZ3JhdGlvbiBzY3JpcHQgYmFzZWQgb24gZXhpc3RlbmNlIG9mIFdhdGNobWFuLgorCQkjIElmIFdhdGNobWFuIGV4aXN0cywgd2F0Y2ggdGhlIHdvcmsgdHJlZSBhbmQgYXR0ZW1wdCBhIHF1ZXJ5LgorCQkjIElmIGV2ZXJ5dGhpbmcgc3VjY2VlZHMsIHVzZSBXYXRjaG1hbiBpbnRlZ3JhdGlvbiBzY3JpcHQsCisJCSMgZWxzZSBmYWxsIGJhY2sgdG8gYW4gZW1wdHkgaW50ZWdyYXRpb24gc2NyaXB0LgorCQkjCisJCW1rZGlyIC5naXQvaG9va3MgJiYKKwkJaWYgdGVzdF9oYXZlX3ByZXJlcSBXQVRDSE1BTgorCQl0aGVuCisJCQlJTlRFR1JBVElPTl9TQ1JJUFQ9Ii5naXQvaG9va3MvZnNtb25pdG9yLXdhdGNobWFuIiAmJgorCQkJY3AgIiRURVNUX0RJUkVDVE9SWS8uLi90ZW1wbGF0ZXMvaG9va3MtLWZzbW9uaXRvci13YXRjaG1hbi5zYW1wbGUiICIkSU5URUdSQVRJT05fU0NSSVBUIiAmJgorCQkJd2F0Y2htYW4gd2F0Y2ggIiRHSVRfV09SS19UUkVFIiAmJgorCQkJd2F0Y2htYW4gd2F0Y2gtbGlzdCB8IGdyZXAgLXEgLUYgIiRHSVRfV09SS19UUkVFIgorCQllbHNlCisJCQlJTlRFR1JBVElPTl9TQ1JJUFQ9Ii5naXQvaG9va3MvZnNtb25pdG9yLWVtcHR5IiAmJgorCQkJd3JpdGVfc2NyaXB0ICIkSU5URUdSQVRJT05fU0NSSVBUIjw8LVxFT0YKKwkJCUVPRgorCQlmaQorCWZpICYmCisKKwlnaXQgY29uZmlnIGNvcmUuZnNtb25pdG9yICIkSU5URUdSQVRJT05fU0NSSVBUIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1mc21vbml0b3IKKycKKworaWYgdGVzdCAtbiAiJEdJVF9QRVJGXzc1MTlfRFJPUF9DQUNIRSI7IHRoZW4KKwl0ZXN0LXRvb2wgZHJvcC1jYWNoZXMKK2ZpCisKK3Rlc3RfcGVyZiAic3RhdHVzIChmc21vbml0b3I9JElOVEVHUkFUSU9OX1NDUklQVCkiICcKKwlnaXQgc3RhdHVzCisnCisKK2lmIHRlc3QgLW4gIiRHSVRfUEVSRl83NTE5X0RST1BfQ0FDSEUiOyB0aGVuCisJdGVzdC10b29sIGRyb3AtY2FjaGVzCitmaQorCit0ZXN0X3BlcmYgInN0YXR1cyAtdW5vIChmc21vbml0b3I9JElOVEVHUkFUSU9OX1NDUklQVCkiICcKKwlnaXQgc3RhdHVzIC11bm8KKycKKworaWYgdGVzdCAtbiAiJEdJVF9QRVJGXzc1MTlfRFJPUF9DQUNIRSI7IHRoZW4KKwl0ZXN0LXRvb2wgZHJvcC1jYWNoZXMKK2ZpCisKK3Rlc3RfcGVyZiAic3RhdHVzIC11YWxsIChmc21vbml0b3I9JElOVEVHUkFUSU9OX1NDUklQVCkiICcKKwlnaXQgc3RhdHVzIC11YWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIHdpdGhvdXQgZnNtb25pdG9yIiAnCisJdW5zZXQgSU5URUdSQVRJT05fU0NSSVBUICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUuZnNtb25pdG9yICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLWZzbW9uaXRvcgorJworCitpZiB0ZXN0IC1uICIkR0lUX1BFUkZfNzUxOV9EUk9QX0NBQ0hFIjsgdGhlbgorCXRlc3QtdG9vbCBkcm9wLWNhY2hlcworZmkKKwordGVzdF9wZXJmICJzdGF0dXMgKGZzbW9uaXRvcj0kSU5URUdSQVRJT05fU0NSSVBUKSIgJworCWdpdCBzdGF0dXMKKycKKworaWYgdGVzdCAtbiAiJEdJVF9QRVJGXzc1MTlfRFJPUF9DQUNIRSI7IHRoZW4KKwl0ZXN0LXRvb2wgZHJvcC1jYWNoZXMKK2ZpCisKK3Rlc3RfcGVyZiAic3RhdHVzIC11bm8gKGZzbW9uaXRvcj0kSU5URUdSQVRJT05fU0NSSVBUKSIgJworCWdpdCBzdGF0dXMgLXVubworJworCitpZiB0ZXN0IC1uICIkR0lUX1BFUkZfNzUxOV9EUk9QX0NBQ0hFIjsgdGhlbgorCXRlc3QtdG9vbCBkcm9wLWNhY2hlcworZmkKKwordGVzdF9wZXJmICJzdGF0dXMgLXVhbGwgKGZzbW9uaXRvcj0kSU5URUdSQVRJT05fU0NSSVBUKSIgJworCWdpdCBzdGF0dXMgLXVhbGwKKycKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBXQVRDSE1BTgordGhlbgorCXdhdGNobWFuIHdhdGNoLWRlbCAiJEdJVF9XT1JLX1RSRUUiID4vZGV2L251bGwgMj4mMSAmJgorCisJIyBXb3JrIGFyb3VuZCBXYXRjaG1hbiBidWcgb24gV2luZG93cyB3aGVyZSBpdCBob2xkcyBvbiB0byBoYW5kbGVzCisJIyBwcmV2ZW50aW5nIHRoZSByZW1vdmFsIG9mIHRoZSB0cmFzaCBkaXJlY3RvcnkKKwl3YXRjaG1hbiBzaHV0ZG93bi1zZXJ2ZXIgPi9kZXYvbnVsbCAyPiYxCitmaQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNzgxMC1ncmVwLnNoIGIvdC9wZXJmL3A3ODEwLWdyZXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWY0YWRlNgotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNzgxMC1ncmVwLnNoCkBAIC0wLDAgKzEsMjMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJnaXQtZ3JlcCBwZXJmb3JtYW5jZSBpbiB2YXJpb3VzIG1vZGVzIgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2xhcmdlX3JlcG8KK3Rlc3RfY2hlY2tvdXRfd29ya3RyZWUKKwordGVzdF9wZXJmICdncmVwIHdvcmt0cmVlLCBjaGVhcCByZWdleCcgJworCWdpdCBncmVwIHNvbWVfbm9uZXhpc3RlbnRfc3RyaW5nIHx8IDoKKycKK3Rlc3RfcGVyZiAnZ3JlcCB3b3JrdHJlZSwgZXhwZW5zaXZlIHJlZ2V4JyAnCisJZ2l0IGdyZXAgIl4uKiAqc29tZV9ub25leGlzdGVudF9zdHJpbmckIiB8fCA6CisnCit0ZXN0X3BlcmYgJ2dyZXAgLS1jYWNoZWQsIGNoZWFwIHJlZ2V4JyAnCisJZ2l0IGdyZXAgLS1jYWNoZWQgc29tZV9ub25leGlzdGVudF9zdHJpbmcgfHwgOgorJwordGVzdF9wZXJmICdncmVwIC0tY2FjaGVkLCBleHBlbnNpdmUgcmVnZXgnICcKKwlnaXQgZ3JlcCAtLWNhY2hlZCAiXi4qICpzb21lX25vbmV4aXN0ZW50X3N0cmluZyQiIHx8IDoKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDc4MjAtZ3JlcC1lbmdpbmVzLnNoIGIvdC9wZXJmL3A3ODIwLWdyZXAtZW5naW5lcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YjA5YzViCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A3ODIwLWdyZXAtZW5naW5lcy5zaApAQCAtMCwwICsxLDg4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iQ29tcGFyaXNvbiBvZiBnaXQtZ3JlcCdzIHJlZ2V4IGVuZ2luZXMKKworU2V0IEdJVF9QRVJGXzc4MjBfR1JFUF9PUFRTIGluIHRoZSBlbnZpcm9ubWVudCB0byBwYXNzIG9wdGlvbnMgdG8KK2dpdC1ncmVwLiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBhIGxlYWRpbmcgc3BhY2UsCitlLmcuIEdJVF9QRVJGXzc4MjBfR1JFUF9PUFRTPScgLWknLiBTb21lIG9wdGlvbnMgdG8gdHJ5OgorCisJLWkKKwktdworCS12CisJLXZpCisJLXZ3CisJLXZpdworCitJZiBHSVRfUEVSRl9HUkVQX1RIUkVBRFMgaXMgc2V0IHRvIGEgbGlzdCBvZiB0aHJlYWRzIChlLmcuICcxIDQgOCcKK2V0Yy4pIHdlIHdpbGwgdGVzdCB0aGUgcGF0dGVybnMgdW5kZXIgdGhvc2UgbnVtYmVycyBvZiB0aHJlYWRzLgorIgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2xhcmdlX3JlcG8KK3Rlc3RfY2hlY2tvdXRfd29ya3RyZWUKKworaWYgdGVzdCAtbiAiJEdJVF9QRVJGX0dSRVBfVEhSRUFEUyIKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgUEVSRl9HUkVQX0VOR0lORVNfVEhSRUFEUworZmkKKworZm9yIHBhdHRlcm4gaW4gXAorCSdob3cudG8nIFwKKwknXmhvdyB0bycgXAorCSdbaG93XSB0bycgXAorCSdcKGUudFteIF0qXHx2LnJ5XCkgcmFyZScgXAorCSdtXCjDulx8dVwpbHQuYlwow6ZcfHlcKXRlJworZG8KKwlmb3IgZW5naW5lIGluIGJhc2ljIGV4dGVuZGVkIHBlcmwKKwlkbworCQlpZiB0ZXN0ICRlbmdpbmUgIT0gImJhc2ljIgorCQl0aGVuCisJCQkjIFBvb3IgbWFuJ3MgYmFzaWMgLT4gZXh0ZW5kZWQgY29udmVydGVyLgorCQkJcGF0dGVybj0kKGVjaG8gIiRwYXR0ZXJuIiB8IHNlZCAncy9cXC8vZycpCisJCWZpCisJCWlmIHRlc3QgJGVuZ2luZSA9ICJwZXJsIiAmJiAhIHRlc3RfaGF2ZV9wcmVyZXEgUENSRQorCQl0aGVuCisJCQlwcmVyZXE9IlBDUkUiCisJCWVsc2UKKwkJCXByZXJlcT0iIgorCQlmaQorCQlpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSRl9HUkVQX0VOR0lORVNfVEhSRUFEUworCQl0aGVuCisJCQl0ZXN0X3BlcmYgJHByZXJlcSAiJGVuZ2luZSBncmVwJEdJVF9QRVJGXzc4MjBfR1JFUF9PUFRTICckcGF0dGVybiciICIKKwkJCQlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT0kZW5naW5lIGdyZXAkR0lUX1BFUkZfNzgyMF9HUkVQX09QVFMgLS0gJyRwYXR0ZXJuJyA+J291dC4kZW5naW5lJyB8fCA6CisJCQkiCisJCWVsc2UKKwkJCWZvciB0aHJlYWRzIGluICRHSVRfUEVSRl9HUkVQX1RIUkVBRFMKKwkJCWRvCisJCQkJdGVzdF9wZXJmIFBUSFJFQURTLCRwcmVyZXEgIiRlbmdpbmUgZ3JlcCRHSVRfUEVSRl83ODIwX0dSRVBfT1BUUyAnJHBhdHRlcm4nIHdpdGggJHRocmVhZHMgdGhyZWFkcyIgIgorCQkJCQlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT0kZW5naW5lIC1jIGdyZXAudGhyZWFkcz0kdGhyZWFkcyBncmVwJEdJVF9QRVJGXzc4MjBfR1JFUF9PUFRTIC0tICckcGF0dGVybicgPidvdXQuJGVuZ2luZS4kdGhyZWFkcycgfHwgOgorCQkJCSIKKwkJCWRvbmUKKwkJZmkKKwlkb25lCisKKwlpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSRl9HUkVQX0VOR0lORVNfVEhSRUFEUworCXRoZW4KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAiYXNzZXJ0IHRoYXQgYWxsIGVuZ2luZXMgZm91bmQgdGhlIHNhbWUgZm9yJEdJVF9QRVJGXzc4MjBfR1JFUF9PUFRTICckcGF0dGVybiciICcKKwkJCXRlc3RfY21wIG91dC5iYXNpYyBvdXQuZXh0ZW5kZWQgJiYKKwkJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgUENSRQorCQkJdGhlbgorCQkJCXRlc3RfY21wIG91dC5iYXNpYyBvdXQucGVybAorCQkJZmkKKwkJJworCWVsc2UKKwkJZm9yIHRocmVhZHMgaW4gJEdJVF9QRVJGX0dSRVBfVEhSRUFEUworCQlkbworCQkJdGVzdF9leHBlY3Rfc3VjY2VzcyBQVEhSRUFEUyAiYXNzZXJ0IHRoYXQgYWxsIGVuZ2luZXMgZm91bmQgdGhlIHNhbWUgZm9yJEdJVF9QRVJGXzc4MjBfR1JFUF9PUFRTICckcGF0dGVybicgdW5kZXIgdGhyZWFkaW5nIiAiCisJCQkJdGVzdF9jbXAgb3V0LmJhc2ljLiR0aHJlYWRzIG91dC5leHRlbmRlZC4kdGhyZWFkcyAmJgorCQkJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgUENSRQorCQkJCXRoZW4KKwkJCQkJdGVzdF9jbXAgb3V0LmJhc2ljLiR0aHJlYWRzIG91dC5wZXJsLiR0aHJlYWRzCisJCQkJZmkKKwkJCSIKKwkJZG9uZQorCWZpCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A3ODIxLWdyZXAtZW5naW5lcy1maXhlZC5zaCBiL3QvcGVyZi9wNzgyMS1ncmVwLWVuZ2luZXMtZml4ZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjFlNDFiOAotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNzgyMS1ncmVwLWVuZ2luZXMtZml4ZWQuc2gKQEAgLTAsMCArMSw3NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IkNvbXBhcmlzb24gb2YgZ2l0LWdyZXAncyByZWdleCBlbmdpbmVzIHdpdGggLUYKKworU2V0IEdJVF9QRVJGXzc4MjFfR1JFUF9PUFRTIGluIHRoZSBlbnZpcm9ubWVudCB0byBwYXNzIG9wdGlvbnMgdG8KK2dpdC1ncmVwLiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBhIGxlYWRpbmcgc3BhY2UsCitlLmcuIEdJVF9QRVJGXzc4MjFfR1JFUF9PUFRTPScgLXcnLiBTZWUgcDc4MjAtZ3JlcC1lbmdpbmVzLnNoIGZvciBtb3JlCitvcHRpb25zIHRvIHRyeS4KKworSWYgR0lUX1BFUkZfNzgyMV9USFJFQURTIGlzIHNldCB0byBhIGxpc3Qgb2YgdGhyZWFkcyAoZS5nLiAnMSA0IDgnCitldGMuKSB3ZSB3aWxsIHRlc3QgdGhlIHBhdHRlcm5zIHVuZGVyIHRob3NlIG51bWJlcnMgb2YgdGhyZWFkcy4KKyIKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9sYXJnZV9yZXBvCit0ZXN0X2NoZWNrb3V0X3dvcmt0cmVlCisKK2lmIHRlc3QgLW4gIiRHSVRfUEVSRl9HUkVQX1RIUkVBRFMiCit0aGVuCisJdGVzdF9zZXRfcHJlcmVxIFBFUkZfR1JFUF9FTkdJTkVTX1RIUkVBRFMKK2ZpCisKK2ZvciBwYXR0ZXJuIGluICdpbnQnICd1bmNvbW1vbicgJ8OmJworZG8KKwlmb3IgZW5naW5lIGluIGZpeGVkIGJhc2ljIGV4dGVuZGVkIHBlcmwKKwlkbworCQlpZiB0ZXN0ICRlbmdpbmUgPSAicGVybCIgJiYgISB0ZXN0X2hhdmVfcHJlcmVxIFBDUkUKKwkJdGhlbgorCQkJcHJlcmVxPSJQQ1JFIgorCQllbHNlCisJCQlwcmVyZXE9IiIKKwkJZmkKKwkJaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkZfR1JFUF9FTkdJTkVTX1RIUkVBRFMKKwkJdGhlbgorCQkJdGVzdF9wZXJmICRwcmVyZXEgIiRlbmdpbmUgZ3JlcCRHSVRfUEVSRl83ODIxX0dSRVBfT1BUUyAkcGF0dGVybiIgIgorCQkJCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPSRlbmdpbmUgZ3JlcCRHSVRfUEVSRl83ODIxX0dSRVBfT1BUUyAkcGF0dGVybiA+J291dC4kZW5naW5lJyB8fCA6CisJCQkiCisJCWVsc2UKKwkJCWZvciB0aHJlYWRzIGluICRHSVRfUEVSRl9HUkVQX1RIUkVBRFMKKwkJCWRvCisJCQkJdGVzdF9wZXJmIFBUSFJFQURTLCRwcmVyZXEgIiRlbmdpbmUgZ3JlcCRHSVRfUEVSRl83ODIxX0dSRVBfT1BUUyAkcGF0dGVybiB3aXRoICR0aHJlYWRzIHRocmVhZHMiICIKKwkJCQkJZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9JGVuZ2luZSAtYyBncmVwLnRocmVhZHM9JHRocmVhZHMgZ3JlcCRHSVRfUEVSRl83ODIxX0dSRVBfT1BUUyAkcGF0dGVybiA+J291dC4kZW5naW5lLiR0aHJlYWRzJyB8fCA6CisJCQkJIgorCQkJZG9uZQorCQlmaQorCWRvbmUKKworCWlmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJGX0dSRVBfRU5HSU5FU19USFJFQURTCisJdGhlbgorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJhc3NlcnQgdGhhdCBhbGwgZW5naW5lcyBmb3VuZCB0aGUgc2FtZSBmb3IkR0lUX1BFUkZfNzgyMV9HUkVQX09QVFMgJHBhdHRlcm4iICcKKwkJCXRlc3RfY21wIG91dC5maXhlZCBvdXQuYmFzaWMgJiYKKwkJCXRlc3RfY21wIG91dC5maXhlZCBvdXQuZXh0ZW5kZWQgJiYKKwkJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgUENSRQorCQkJdGhlbgorCQkJCXRlc3RfY21wIG91dC5maXhlZCBvdXQucGVybAorCQkJZmkKKwkJJworCWVsc2UKKwkJZm9yIHRocmVhZHMgaW4gJEdJVF9QRVJGX0dSRVBfVEhSRUFEUworCQlkbworCQkJdGVzdF9leHBlY3Rfc3VjY2VzcyBQVEhSRUFEUyAiYXNzZXJ0IHRoYXQgYWxsIGVuZ2luZXMgZm91bmQgdGhlIHNhbWUgZm9yJEdJVF9QRVJGXzc4MjFfR1JFUF9PUFRTICRwYXR0ZXJuIHVuZGVyIHRocmVhZGluZyIgIgorCQkJCXRlc3RfY21wIG91dC5maXhlZC4kdGhyZWFkcyBvdXQuYmFzaWMuJHRocmVhZHMgJiYKKwkJCQl0ZXN0X2NtcCBvdXQuZml4ZWQuJHRocmVhZHMgb3V0LmV4dGVuZGVkLiR0aHJlYWRzICYmCisJCQkJaWYgdGVzdF9oYXZlX3ByZXJlcSBQQ1JFCisJCQkJdGhlbgorCQkJCQl0ZXN0X2NtcCBvdXQuZml4ZWQuJHRocmVhZHMgb3V0LnBlcmwuJHRocmVhZHMKKwkJCQlmaQorCQkJIgorCQlkb25lCisJZmkKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDkzMDAtZmFzdC1pbXBvcnQtZXhwb3J0LnNoIGIvdC9wZXJmL3A5MzAwLWZhc3QtaW1wb3J0LWV4cG9ydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ODYxNjFlCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A5MzAwLWZhc3QtaW1wb3J0LWV4cG9ydC5zaApAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBmYXN0LWltcG9ydCBhbmQgZmFzdC1leHBvcnQgcGVyZm9ybWFuY2UnCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCisjIFVzZSAtLW5vLWRhdGEgaGVyZSB0byBwcm9kdWNlIGEgdmFzdGx5IHNtYWxsZXIgZXhwb3J0IGZpbGUuCisjIFRoaXMgaXMgbXVjaCBjaGVhcGVyIHRvIHdvcmsgd2l0aCBidXQgc2hvdWxkIHN0aWxsIGV4ZXJjaXNlCisjIGZhc3QtaW1wb3J0IHByZXR0eSB3ZWxsICh3ZSdsbCBzdGlsbCBwcm9jZXNzIGFsbCBjb21taXRzIGFuZAorIyB0cmVlcywgd2hpY2ggYWNjb3VudCBmb3IgNjAlIG9yIG1vcmUgb2Ygb2JqZWN0cyBpbiBtb3N0IHJlcG9zKS4KKyMKKyMgVXNlIC0tcmVlbmNvZGUgdG8gYXZvaWQgdGhlIGRlZmF1bHQgb2YgYWJvcnRpbmcgb24gbm9uLXV0ZjggY29tbWl0cywKKyMgd2hpY2ggbGV0cyB0aGlzIHRlc3QgcnVuIGFnYWluc3QgYSB3aWRlciB2YXJpZXR5IG9mIHNhbXBsZSByZXBvcy4KK3Rlc3RfcGVyZiAnZXhwb3J0IChuby1ibG9icyknICcKKwlnaXQgZmFzdC1leHBvcnQgLS1yZWVuY29kZT15ZXMgLS1uby1kYXRhIEhFQUQgPmV4cG9ydAorJworCit0ZXN0X3BlcmYgJ2ltcG9ydCAobm8tYmxvYnMpJyAnCisJZ2l0IGZhc3QtaW1wb3J0IC0tZm9yY2UgPGV4cG9ydAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wZXJmLWxpYi5zaCBiL3QvcGVyZi9wZXJmLWxpYi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2UzODkzCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3BlcmYtbGliLnNoCkBAIC0wLDAgKzEsMjQ3IEBACisjIFBlcmZvcm1hbmNlIHRlc3RpbmcgZnJhbWV3b3JrLiAgRWFjaCBwZXJmIHNjcmlwdCBzdGFydHMgbXVjaCBsaWtlCisjIGEgbm9ybWFsIHRlc3Qgc2NyaXB0LCBleGNlcHQgaXQgc291cmNlcyB0aGlzIGxpYnJhcnkgaW5zdGVhZCBvZgorIyB0ZXN0LWxpYi5zaC4gIFNlZSB0L3BlcmYvUkVBRE1FIGZvciBkb2N1bWVudGF0aW9uLgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhvbWFzIFJhc3QKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvIC4KKworIyBUaGVzZSB2YXJpYWJsZXMgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBpbmNsdXNpb24gb2YgdGVzdC1saWIuc2ggYmVsb3csCisjIGJlY2F1c2UgaXQgd2lsbCBjaGFuZ2Ugb3VyIHdvcmtpbmcgZGlyZWN0b3J5LgorVEVTVF9ESVJFQ1RPUlk9JChwd2QpLy4uCitURVNUX09VVFBVVF9ESVJFQ1RPUlk9JChwd2QpCisKK1RFU1RfTk9fQ1JFQVRFX1JFUE89dAorVEVTVF9OT19NQUxMT0NfQ0hFQ0s9dAorCisuIC4uL3Rlc3QtbGliLnNoCisKK2lmIHRlc3QgLW4gIiRHSVRfVEVTVF9JTlNUQUxMRUQiIC1hIC16ICIkUEVSRl9TRVRfR0lUX1RFU1RfSU5TVEFMTEVEIgordGhlbgorCWVycm9yICJEbyBub3QgdXNlIEdJVF9URVNUX0lOU1RBTExFRCB3aXRoIHRoZSBwZXJmIHRlc3RzLgorCitJbnN0ZWFkIHVzZToKKworICAgIC4vcnVuIDxwYXRoLXRvLWdpdD4gLS0gPHRlc3RzPgorCitTZWUgdC9wZXJmL1JFQURNRSBmb3IgZGV0YWlscy4iCitmaQorCisjIFZhcmlhYmxlcyBmcm9tIHRlc3QtbGliIHRoYXQgYXJlIG5vcm1hbGx5IGludGVybmFsIHRvIHRoZSB0ZXN0czsgd2UKKyMgbmVlZCB0byBleHBvcnQgdGhlbSBmb3IgdGVzdF9wZXJmIHN1YnNoZWxscworZXhwb3J0IFRFU1RfRElSRUNUT1JZIFRSQVNIX0RJUkVDVE9SWSBHSVRfQlVJTERfRElSIEdJVF9URVNUX0NNUAorCitNT0RFUk5fR0lUPSRHSVRfQlVJTERfRElSL2Jpbi13cmFwcGVycy9naXQKK2V4cG9ydCBNT0RFUk5fR0lUCisKK3BlcmZfcmVzdWx0c19kaXI9JFRFU1RfT1VUUFVUX0RJUkVDVE9SWS90ZXN0LXJlc3VsdHMKK3Rlc3QgLW4gIiRHSVRfUEVSRl9TVUJTRUNUSU9OIiAmJiBwZXJmX3Jlc3VsdHNfZGlyPSIkcGVyZl9yZXN1bHRzX2Rpci8kR0lUX1BFUkZfU1VCU0VDVElPTiIKK21rZGlyIC1wICIkcGVyZl9yZXN1bHRzX2RpciIKK3JtIC1mICIkcGVyZl9yZXN1bHRzX2RpciIvJChiYXNlbmFtZSAiJDAiIC5zaCkuc3VidGVzdHMKKworZGllX2lmX2J1aWxkX2Rpcl9ub3RfcmVwbyAoKSB7CisJaWYgISAoIGNkICIkVEVTVF9ESVJFQ1RPUlkvLi4iICYmCisJCSAgICBnaXQgcmV2LXBhcnNlIC0tYnVpbGQtZGlyID4vZGV2L251bGwgMj4mMSApOyB0aGVuCisJCWVycm9yICJObyAkMSBkZWZpbmVkLCBhbmQgeW91ciBidWlsZCBkaXJlY3RvcnkgaXMgbm90IGEgcmVwbyIKKwlmaQorfQorCitpZiB0ZXN0IC16ICIkR0lUX1BFUkZfUkVQTyI7IHRoZW4KKwlkaWVfaWZfYnVpbGRfZGlyX25vdF9yZXBvICckR0lUX1BFUkZfUkVQTycKKwlHSVRfUEVSRl9SRVBPPSRURVNUX0RJUkVDVE9SWS8uLgorZmkKK2lmIHRlc3QgLXogIiRHSVRfUEVSRl9MQVJHRV9SRVBPIjsgdGhlbgorCWRpZV9pZl9idWlsZF9kaXJfbm90X3JlcG8gJyRHSVRfUEVSRl9MQVJHRV9SRVBPJworCUdJVF9QRVJGX0xBUkdFX1JFUE89JFRFU1RfRElSRUNUT1JZLy4uCitmaQorCit0ZXN0X3BlcmZfZG9fcmVwb19zeW1saW5rX2NvbmZpZ18gKCkgeworCXRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MgfHwgZ2l0IGNvbmZpZyBjb3JlLnN5bWxpbmtzIGZhbHNlCit9CisKK3Rlc3RfcGVyZl9jcmVhdGVfcmVwb19mcm9tICgpIHsKKwl0ZXN0ICIkIyIgPSAyIHx8CisJQlVHICJub3QgMiBwYXJhbWV0ZXJzIHRvIHRlc3QtY3JlYXRlLXJlcG8iCisJcmVwbz0iJDEiCisJc291cmNlPSIkMiIKKwlzb3VyY2VfZ2l0PSIkKCIkTU9ERVJOX0dJVCIgLUMgIiRzb3VyY2UiIHJldi1wYXJzZSAtLWdpdC1kaXIpIgorCW9iamVjdHNfZGlyPSIkKCIkTU9ERVJOX0dJVCIgLUMgIiRzb3VyY2UiIHJldi1wYXJzZSAtLWdpdC1wYXRoIG9iamVjdHMpIgorCW1rZGlyIC1wICIkcmVwby8uZ2l0IgorCSgKKwkJY2QgIiRzb3VyY2UiICYmCisJCXsgY3AgLVJsICIkb2JqZWN0c19kaXIiICIkcmVwby8uZ2l0LyIgMj4vZGV2L251bGwgfHwKKwkJCWNwIC1SICIkb2JqZWN0c19kaXIiICIkcmVwby8uZ2l0LyI7IH0gJiYKKwkJZm9yIHN0dWZmIGluICIkc291cmNlX2dpdCIvKjsgZG8KKwkJCWNhc2UgIiRzdHVmZiIgaW4KKwkJCQkqL29iamVjdHN8Ki9ob29rc3wqL2NvbmZpZ3wqL2NvbW1vbmRpcikKKwkJCQkJOzsKKwkJCQkqKQorCQkJCQljcCAtUiAiJHN0dWZmIiAiJHJlcG8vLmdpdC8iIHx8IGV4aXQgMQorCQkJCQk7OworCQkJZXNhYworCQlkb25lCisJKSAmJgorCSgKKwkJY2QgIiRyZXBvIiAmJgorCQkiJE1PREVSTl9HSVQiIGluaXQgLXEgJiYKKwkJdGVzdF9wZXJmX2RvX3JlcG9fc3ltbGlua19jb25maWdfICYmCisJCW12IC5naXQvaG9va3MgLmdpdC9ob29rcy1kaXNhYmxlZCAyPi9kZXYvbnVsbCAmJgorCQlpZiB0ZXN0IC1mIC5naXQvaW5kZXgubG9jaworCQl0aGVuCisJCQkjIFdlIG1heSBiZSBjb3B5aW5nIGEgcmVwbyB0aGF0IGNhbid0IHJ1biAiZ2l0CisJCQkjIHN0YXR1cyIgZHVlIHRvIGEgbG9ja2VkIGluZGV4LiBTaW5jZSB3ZSBoYXZlCisJCQkjIGEgY29weSBpdCdzIGZpbmUgdG8gcmVtb3ZlIHRoZSBsb2NrLgorCQkJcm0gLmdpdC9pbmRleC5sb2NrCisJCWZpCisJKSB8fCBlcnJvciAiZmFpbGVkIHRvIGNvcHkgcmVwb3NpdG9yeSAnJHNvdXJjZScgdG8gJyRyZXBvJyIKK30KKworIyBjYWxsIGF0IGxlYXN0IG9uZSBvZiB0aGVzZSB0byBlc3RhYmxpc2ggYW4gYXBwcm9wcmlhdGVseS1zaXplZCByZXBvc2l0b3J5Cit0ZXN0X3BlcmZfZnJlc2hfcmVwbyAoKSB7CisJcmVwbz0iJHsxOi0kVFJBU0hfRElSRUNUT1JZfSIKKwkiJE1PREVSTl9HSVQiIGluaXQgLXEgIiRyZXBvIiAmJgorCSgKKwkJY2QgIiRyZXBvIiAmJgorCQl0ZXN0X3BlcmZfZG9fcmVwb19zeW1saW5rX2NvbmZpZ18KKwkpCit9CisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8gKCkgeworCXRlc3RfcGVyZl9jcmVhdGVfcmVwb19mcm9tICIkezE6LSRUUkFTSF9ESVJFQ1RPUll9IiAiJEdJVF9QRVJGX1JFUE8iCit9Cit0ZXN0X3BlcmZfbGFyZ2VfcmVwbyAoKSB7CisJaWYgdGVzdCAiJEdJVF9QRVJGX0xBUkdFX1JFUE8iID0gIiRHSVRfQlVJTERfRElSIjsgdGhlbgorCQllY2hvICJ3YXJuaW5nOiBcJEdJVF9QRVJGX0xBUkdFX1JFUE8gaXMgXCRHSVRfQlVJTERfRElSLiIgPiYyCisJCWVjaG8gIndhcm5pbmc6IFRoaXMgd2lsbCB3b3JrLCBidXQgbWF5IG5vdCBiZSBhIHN1ZmZpY2llbnRseSBsYXJnZSByZXBvIiA+JjIKKwkJZWNobyAid2FybmluZzogZm9yIHJlcHJlc2VudGF0aXZlIG1lYXN1cmVtZW50cy4iID4mMgorCWZpCisJdGVzdF9wZXJmX2NyZWF0ZV9yZXBvX2Zyb20gIiR7MTotJFRSQVNIX0RJUkVDVE9SWX0iICIkR0lUX1BFUkZfTEFSR0VfUkVQTyIKK30KK3Rlc3RfY2hlY2tvdXRfd29ya3RyZWUgKCkgeworCWdpdCBjaGVja291dC1pbmRleCAtdSAtYSB8fAorCWVycm9yICJnaXQgY2hlY2tvdXQtaW5kZXggZmFpbGVkIgorfQorCisjIFBlcmZvcm1hbmNlIHRlc3RzIHNob3VsZCBuZXZlciBmYWlsLiAgSWYgdGhleSBkbywgc3RvcCBpbW1lZGlhdGVseQoraW1tZWRpYXRlPXQKKworIyBQZXJmIHRlc3RzIHJlcXVpcmUgR05VIHRpbWUKK2Nhc2UgIiQodW5hbWUgLXMpIiBpbiBEYXJ3aW4pIEdUSU1FPSIke0dUSU1FOi1ndGltZX0iOzsgZXNhYworR1RJTUU9IiR7R1RJTUU6LS91c3IvYmluL3RpbWV9IgorCit0ZXN0X3J1bl9wZXJmXyAoKSB7CisJdGVzdF9jbGVhbnVwPToKKwl0ZXN0X2V4cG9ydF89InRlc3RfY2xlYW51cCIKKwlleHBvcnQgdGVzdF9jbGVhbnVwIHRlc3RfZXhwb3J0XworCSIkR1RJTUUiIC1mICIlRSAlVSAlUyIgLW8gdGVzdF90aW1lLiRpICIkU0hFTEwiIC1jICcKKy4gJyIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtbGliLWZ1bmN0aW9ucy5zaCcKK3Rlc3RfZXhwb3J0ICgpIHsKKwlbICQjICE9IDAgXSB8fCByZXR1cm4gMAorCXRlc3RfZXhwb3J0Xz0iJHRlc3RfZXhwb3J0X1xcfCQxIgorCXNoaWZ0CisJdGVzdF9leHBvcnQgIiRAIgorfQorJyIkMSInCityZXQ9JD8KK3NldCB8IHNlZCAtbiAicyciLycvJ1xcXFwnJy9nIic7cy9eXFwoJHRlc3RfZXhwb3J0X1xcKS9leHBvcnQgJyInJiciJy9wIiA+dGVzdF92YXJzCitleGl0ICRyZXQnID4mMyAyPiY0CisJZXZhbF9yZXQ9JD8KKworCWlmIHRlc3QgJGV2YWxfcmV0ID0gMCB8fCB0ZXN0IC1uICIkZXhwZWN0aW5nX2ZhaWx1cmUiCisJdGhlbgorCQl0ZXN0X2V2YWxfICIkdGVzdF9jbGVhbnVwIgorCQkuIC4vdGVzdF92YXJzIHx8IGVycm9yICJmYWlsZWQgdG8gbG9hZCB1cGRhdGVkIGVudmlyb25tZW50IgorCWZpCisJaWYgdGVzdCAiJHZlcmJvc2UiID0gInQiICYmIHRlc3QgLW4gIiRIQVJORVNTX0FDVElWRSI7IHRoZW4KKwkJZWNobyAiIgorCWZpCisJcmV0dXJuICIkZXZhbF9yZXQiCit9CisKK3Rlc3Rfd3JhcHBlcl8gKCkgeworCXRlc3Rfd3JhcHBlcl9mdW5jXz0kMTsgc2hpZnQKKwl0ZXN0X3N0YXJ0XworCXRlc3QgIiQjIiA9IDMgJiYgeyB0ZXN0X3ByZXJlcT0kMTsgc2hpZnQ7IH0gfHwgdGVzdF9wcmVyZXE9CisJdGVzdCAiJCMiID0gMiB8fAorCUJVRyAibm90IDIgb3IgMyBwYXJhbWV0ZXJzIHRvIHRlc3QtZXhwZWN0LXN1Y2Nlc3MiCisJZXhwb3J0IHRlc3RfcHJlcmVxCisJaWYgISB0ZXN0X3NraXAgIiRAIgorCXRoZW4KKwkJYmFzZT0kKGJhc2VuYW1lICIkMCIgLnNoKQorCQllY2hvICIkdGVzdF9jb3VudCIgPj4iJHBlcmZfcmVzdWx0c19kaXIiLyRiYXNlLnN1YnRlc3RzCisJCWVjaG8gIiQxIiA+IiRwZXJmX3Jlc3VsdHNfZGlyIi8kYmFzZS4kdGVzdF9jb3VudC5kZXNjcgorCQliYXNlPSIkcGVyZl9yZXN1bHRzX2RpciIvIiRQRVJGX1JFU1VMVFNfUFJFRklYJChiYXNlbmFtZSAiJDAiIC5zaCkiLiIkdGVzdF9jb3VudCIKKwkJIiR0ZXN0X3dyYXBwZXJfZnVuY18iICIkQCIKKwlmaQorCisJdGVzdF9maW5pc2hfCit9CisKK3Rlc3RfcGVyZl8gKCkgeworCWlmIHRlc3QgLXogIiR2ZXJib3NlIjsgdGhlbgorCQlwcmludGYgIiVzIiAicGVyZiAkdGVzdF9jb3VudCAtICQxOiIKKwllbHNlCisJCWVjaG8gInBlcmYgJHRlc3RfY291bnQgLSAkMToiCisJZmkKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgJEdJVF9QRVJGX1JFUEVBVF9DT1VOVCk7IGRvCisJCXNheSA+JjMgInJ1bm5pbmc6ICQyIgorCQlpZiB0ZXN0X3J1bl9wZXJmXyAiJDIiCisJCXRoZW4KKwkJCWlmIHRlc3QgLXogIiR2ZXJib3NlIjsgdGhlbgorCQkJCXByaW50ZiAiICVzIiAiJGkiCisJCQllbHNlCisJCQkJZWNobyAiKiB0aW1pbmcgcnVuICRpLyRHSVRfUEVSRl9SRVBFQVRfQ09VTlQ6IgorCQkJZmkKKwkJZWxzZQorCQkJdGVzdCAteiAiJHZlcmJvc2UiICYmIGVjaG8KKwkJCXRlc3RfZmFpbHVyZV8gIiRAIgorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJaWYgdGVzdCAteiAiJHZlcmJvc2UiOyB0aGVuCisJCWVjaG8gIiBvayIKKwllbHNlCisJCXRlc3Rfb2tfICIkMSIKKwlmaQorCSIkVEVTVF9ESVJFQ1RPUlkiL3BlcmYvbWluX3RpbWUucGVybCB0ZXN0X3RpbWUuKiA+IiRiYXNlIi5yZXN1bHQKK30KKwordGVzdF9wZXJmICgpIHsKKwl0ZXN0X3dyYXBwZXJfIHRlc3RfcGVyZl8gIiRAIgorfQorCit0ZXN0X3NpemVfICgpIHsKKwlzYXkgPiYzICJydW5uaW5nOiAkMiIKKwlpZiB0ZXN0X2V2YWxfICIkMiIgMz4iJGJhc2UiLnJlc3VsdDsgdGhlbgorCQl0ZXN0X29rXyAiJDEiCisJZWxzZQorCQl0ZXN0X2ZhaWx1cmVfICIkQCIKKwlmaQorfQorCit0ZXN0X3NpemUgKCkgeworCXRlc3Rfd3JhcHBlcl8gdGVzdF9zaXplXyAiJEAiCit9CisKKyMgV2UgZXh0ZW5kIHRlc3RfZG9uZSB0byBwcmludCB0aW1pbmdzIGF0IHRoZSBlbmQgKC4vcnVuIGRpc2FibGVzIHRoaXMKKyMgYW5kIGRvZXMgaXQgYWZ0ZXIgcnVubmluZyBldmVyeXRoaW5nKQordGVzdF9hdF9lbmRfaG9va18gKCkgeworCWlmIHRlc3QgLXogIiRHSVRfUEVSRl9BR0dSRUdBVElOR19MQVRFUiI7IHRoZW4KKwkJKCBjZCAiJFRFU1RfRElSRUNUT1JZIi9wZXJmICYmIC4vYWdncmVnYXRlLnBlcmwgJChiYXNlbmFtZSAiJDAiKSApCisJZmkKK30KKwordGVzdF9leHBvcnQgKCkgeworCWV4cG9ydCAiJEAiCit9CmRpZmYgLS1naXQgYS90L3BlcmYvcmVwb3MvLmdpdGlnbm9yZSBiL3QvcGVyZi9yZXBvcy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZTNkYzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcmVwb3MvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACitnZW4tKi8KZGlmZiAtLWdpdCBhL3QvcGVyZi9yZXBvcy9pbmZsYXRlLXJlcG8uc2ggYi90L3BlcmYvcmVwb3MvaW5mbGF0ZS1yZXBvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZjZmM5OTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcmVwb3MvaW5mbGF0ZS1yZXBvLnNoCkBAIC0wLDAgKzEsODUgQEAKKyMhL2Jpbi9zaAorIyBJbmZsYXRlIHRoZSBzaXplIG9mIGFuIEVYSVNUSU5HIHJlcG8uCisjCisjIFRoaXMgc2NyaXB0IHNob3VsZCBiZSBydW4gaW5zaWRlIHRoZSB3b3JrdHJlZSBvZiBhIFRFU1QgcmVwby4KKyMgSXQgd2lsbCB1c2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IEhFQUQgdG8gZ2VuZXJhdGUgYQorIyBjb21taXQgY29udGFpbmluZyBjb3BpZXMgb2YgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3VjaCB0aGF0IHRoZQorIyB0b3RhbCBzaXplIG9mIHRoZSBjb21taXQgaGFzIGF0IGxlYXN0IDx0YXJnZXRfc2l6ZT4gZmlsZXMuCisjCisjIFVzYWdlOiBbLXQgdGFyZ2V0X3NpemVdIFstYiBicmFuY2hfbmFtZV0KKworc2V0IC1lCisKK3RhcmdldF9zaXplPTEwMDAwCiticmFuY2hfbmFtZT1wMDAwNi1iYWxsYXN0CitiYWxsYXN0PWJhbGxhc3QKKword2hpbGUgdGVzdCAiJCMiIC1uZSAwCitkbworICAgIGNhc2UgIiQxIiBpbgorCS1iKQorCSAgICBzaGlmdDsKKwkgICAgdGVzdCAiJCMiIC1uZSAwIHx8IHsgZWNobyAnZXJyb3I6IC1iIHJlcXVpcmVzIGFuIGFyZ3VtZW50JyA+JjI7IGV4aXQgMTsgfQorCSAgICBicmFuY2hfbmFtZT0kMTsKKwkgICAgc2hpZnQgOzsKKwktdCkKKwkgICAgc2hpZnQ7CisJICAgIHRlc3QgIiQjIiAtbmUgMCB8fCB7IGVjaG8gJ2Vycm9yOiAtdCByZXF1aXJlcyBhbiBhcmd1bWVudCcgPiYyOyBleGl0IDE7IH0KKwkgICAgdGFyZ2V0X3NpemU9JDE7CisJICAgIHNoaWZ0IDs7CisJKikKKwkgICAgZWNobyAiZXJyb3I6IHVua25vd24gb3B0aW9uICckMSciID4mMjsgZXhpdCAxIDs7CisgICAgZXNhYworZG9uZQorCitnaXQgbHMtdHJlZSAtciBIRUFEID5HRU5fc3JjX2xpc3QKK25yX3NyY19maWxlcz0kKGNhdCBHRU5fc3JjX2xpc3QgfCB3YyAtbCkKKworc3JjX2JyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLS1zaG9ydCBIRUFEKQorCitlY2hvICJCcmFuY2ggJHNyY19icmFuY2ggaW5pdGlhbGx5IGhhcyAkbnJfc3JjX2ZpbGVzIGZpbGVzLiIKKworaWYgdGVzdCAkdGFyZ2V0X3NpemUgLWxlICRucl9zcmNfZmlsZXMKK3RoZW4KKyAgICBlY2hvICJSZXBvc2l0b3J5IGFscmVhZHkgZXhjZWVkcyB0YXJnZXQgc2l6ZSAkdGFyZ2V0X3NpemUuIgorICAgIHJtIEdFTl9zcmNfbGlzdAorICAgIGV4aXQgMQorZmkKKworIyBDcmVhdGUgd2VsbC1rbm93biBicmFuY2ggYW5kIGFkZCAxIGZpbGUgY2hhbmdlIHRvIHN0YXJ0CisjIGlmIG9mZiBiZWZvcmUgdGhlIGJhbGxhc3QuCitnaXQgY2hlY2tvdXQgLWIgJGJyYW5jaF9uYW1lIEhFQUQKK2VjaG8gIiR0YXJnZXRfc2l6ZSIgPiBpbmZsYXRlLXJlcG8ucGFyYW1zCitnaXQgYWRkIGluZmxhdGUtcmVwby5wYXJhbXMKK2dpdCBjb21taXQgLXEgLW0gcGFyYW1zCisKKyMgQ3JlYXRlIGJhbGxhc3QgZm9yIGluIG91ciBicmFuY2guCitjb3B5PTEKK25yX2ZpbGVzPSRucl9zcmNfZmlsZXMKK3doaWxlIHRlc3QgJG5yX2ZpbGVzIC1sdCAkdGFyZ2V0X3NpemUKK2RvCisgICAgc2VkIC1lICJzfAl8CSRiYWxsYXN0LyRjb3B5L3wiIDxHRU5fc3JjX2xpc3QgfAorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvCisKKyAgICBucl9maWxlcz0kKGV4cHIgJG5yX2ZpbGVzICsgJG5yX3NyY19maWxlcykKKyAgICBjb3B5PSQoZXhwciAkY29weSArIDEpCitkb25lCitybSBHRU5fc3JjX2xpc3QKK2dpdCBjb21taXQgLXEgLW0gImJhbGxhc3QiCisKKyMgTW9kaWZ5IDEgZmlsZSBhbmQgY29tbWl0LgorZWNobyAiJHRhcmdldF9zaXplIiA+PiBpbmZsYXRlLXJlcG8ucGFyYW1zCitnaXQgYWRkIGluZmxhdGUtcmVwby5wYXJhbXMKK2dpdCBjb21taXQgLXEgLW0gImJhbGxhc3QgcGx1cyAxIgorCitucl9maWxlcz0kKGdpdCBscy1maWxlcyB8IHdjIC1sKQorCisjIENoZWNrb3V0IG1hc3RlciB0byBwdXQgcmVwbyBpbiBjYW5vbmljYWwgc3RhdGUgKGJlY2F1c2UKKyMgdGhlIHBlcmYgdGVzdCBtYXkgbmVlZCB0byBjbG9uZSBhbmQgZW5hYmxlIHNwYXJzZS1jaGVja291dAorIyBiZWZvcmUgYXR0ZW1wdGluZyB0byBjaGVja291dCBhIGNvbW1pdCB3aXRoIHRoZSBiYWxsYXN0CisjIChiZWNhdXNlIGl0IG1heSBjb250YWluIDEwMEsgZGlyZWN0b3JpZXMgYW5kIDFNIGZpbGVzKSkuCitnaXQgY2hlY2tvdXQgJHNyY19icmFuY2gKKworZWNobyAiUmVwb3NpdG9yeSBpbmZsYXRlZC4gQnJhbmNoICRicmFuY2hfbmFtZSBoYXMgJG5yX2ZpbGVzIGZpbGVzLiIKKworZXhpdCAwCmRpZmYgLS1naXQgYS90L3BlcmYvcmVwb3MvbWFueS1maWxlcy5zaCBiL3QvcGVyZi9yZXBvcy9tYW55LWZpbGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4NzIwZTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcmVwb3MvbWFueS1maWxlcy5zaApAQCAtMCwwICsxLDExMCBAQAorIyEvYmluL3NoCisjIEdlbmVyYXRlIHRlc3QgZGF0YSByZXBvc2l0b3J5IHVzaW5nIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgorIyBXaGVuIG9taXR0ZWQsIHdlIGNyZWF0ZSAiZ2VuLW1hbnktZmlsZXMtZC13LWYuZ2l0Ii4KKyMKKyMgVXNhZ2U6IFstciByZXBvXSBbLWQgZGVwdGhdIFstdyB3aWR0aF0gWy1mIGZpbGVzXQorIworIyAtciByZXBvOiBwYXRoIHRvIHRoZSBuZXcgcmVwbyB0byBiZSBnZW5lcmF0ZWQKKyMgLWQgZGVwdGg6IHRoZSBkZXB0aCBvZiBzdWItZGlyZWN0b3JpZXMKKyMgLXcgd2lkdGg6IHRoZSBudW1iZXIgb2Ygc3ViLWRpcmVjdG9yaWVzIGF0IGVhY2ggbGV2ZWwKKyMgLWYgZmlsZXM6IHRoZSBudW1iZXIgb2YgZmlsZXMgY3JlYXRlZCBpbiBlYWNoIGRpcmVjdG9yeQorIworIyBOb3RlIHRoYXQgYWxsIGZpbGVzIHdpbGwgaGF2ZSB0aGUgc2FtZSBTSEEtMSBhbmQgZWFjaAorIyBkaXJlY3RvcnkgYXQgYSBsZXZlbCB3aWxsIGhhdmUgdGhlIHNhbWUgU0hBLTEsIHNvIHdlCisjIHdpbGwgcG90ZW50aWFsbHkgaGF2ZSBhIGxhcmdlIGluZGV4LCBidXQgbm90IGEgbGFyZ2UKKyMgT0RCLgorIworIyBCYWxsYXN0IHdpbGwgYmUgY3JlYXRlZCB1bmRlciAiYmFsbGFzdC8iLgorCitFTVBUWV9CTE9CPWU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKKworc2V0IC1lCisKKyMgKDUsIDEwLCA5KSB3aWxsIGNyZWF0ZSA5OTksOTk5IGJhbGxhc3QgZmlsZXMuCisjICg0LCAxMCwgOSkgd2lsbCBjcmVhdGUgIDk5LDk5OSBiYWxsYXN0IGZpbGVzLgorZGVwdGg9NQord2lkdGg9MTAKK2ZpbGVzPTkKKword2hpbGUgdGVzdCAiJCMiIC1uZSAwCitkbworICAgIGNhc2UgIiQxIiBpbgorCS1yKQorCSAgICBzaGlmdDsKKwkgICAgdGVzdCAiJCMiIC1uZSAwIHx8IHsgZWNobyAnZXJyb3I6IC1yIHJlcXVpcmVzIGFuIGFyZ3VtZW50JyA+JjI7IGV4aXQgMTsgfQorCSAgICByZXBvPSQxOworCSAgICBzaGlmdCA7OworCS1kKQorCSAgICBzaGlmdDsKKwkgICAgdGVzdCAiJCMiIC1uZSAwIHx8IHsgZWNobyAnZXJyb3I6IC1kIHJlcXVpcmVzIGFuIGFyZ3VtZW50JyA+JjI7IGV4aXQgMTsgfQorCSAgICBkZXB0aD0kMTsKKwkgICAgc2hpZnQgOzsKKwktdykKKwkgICAgc2hpZnQ7CisJICAgIHRlc3QgIiQjIiAtbmUgMCB8fCB7IGVjaG8gJ2Vycm9yOiAtdyByZXF1aXJlcyBhbiBhcmd1bWVudCcgPiYyOyBleGl0IDE7IH0KKwkgICAgd2lkdGg9JDE7CisJICAgIHNoaWZ0IDs7CisJLWYpCisJICAgIHNoaWZ0OworCSAgICB0ZXN0ICIkIyIgLW5lIDAgfHwgeyBlY2hvICdlcnJvcjogLWYgcmVxdWlyZXMgYW4gYXJndW1lbnQnID4mMjsgZXhpdCAxOyB9CisJICAgIGZpbGVzPSQxOworCSAgICBzaGlmdCA7OworCSopCisJICAgIGVjaG8gImVycm9yOiB1bmtub3duIG9wdGlvbiAnJDEnIiA+JjI7IGV4aXQgMSA7OworCWVzYWMKK2RvbmUKKworIyBJbmZsYXRlIHRoZSBpbmRleCB3aXRoIHRob3VzYW5kcyBvZiBlbXB0eSBmaWxlcy4KKyMgdXNhZ2U6IGRpciBkZXB0aCB3aWR0aCBmaWxlcworZmlsbF9pbmRleCgpIHsKKwlhd2sgLXYgYXJnX2Rpcj0kMSAtdiBhcmdfZGVwdGg9JDIgLXYgYXJnX3dpZHRoPSQzIC12IGFyZ19maWxlcz0kNCAnCisJCWZ1bmN0aW9uIG1ha2VfcGF0aHMoZGlyLCBkZXB0aCwgd2lkdGgsIGZpbGVzLCBmLCB3KSB7CisJCQlmb3IgKGYgPSAxOyBmIDw9IGZpbGVzOyBmKyspIHsKKwkJCQlwcmludCBkaXIgIi9maWxlIiBmCisJCQl9CisJCQlpZiAoZGVwdGggPiAwKSB7CisJCQkJZm9yICh3ID0gMTsgdyA8PSB3aWR0aDsgdysrKSB7CisJCQkJCW1ha2VfcGF0aHMoZGlyICIvZGlyIiB3LCBkZXB0aCAtIDEsIHdpZHRoLCBmaWxlcykKKwkJCQl9CisJCQl9CisJCX0KKwkJRU5EIHsgbWFrZV9wYXRocyhhcmdfZGlyLCBhcmdfZGVwdGgsIGFyZ193aWR0aCwgYXJnX2ZpbGVzKSB9CisJCScgPC9kZXYvbnVsbCB8CisJc2VkICJzL14vMTAwNjQ0ICRFTVBUWV9CTE9CCS8iIHwKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbworCXJldHVybiAwCit9CisKK1sgLXogIiRyZXBvIiBdICYmIHJlcG89Z2VuLW1hbnktZmlsZXMtJGRlcHRoLiR3aWR0aC4kZmlsZXMuZ2l0CisKK21rZGlyICRyZXBvCitjZCAkcmVwbworZ2l0IGluaXQgLgorCisjIENyZWF0ZSBhbiBpbml0aWFsIGNvbW1pdCBqdXN0IHRvIGRlZmluZSBtYXN0ZXIuCit0b3VjaCBtYW55LWZpbGVzLmVtcHR5CitlY2hvICIkZGVwdGggJHdpZHRoICRmaWxlcyIgPm1hbnktZmlsZXMucGFyYW1zCitnaXQgYWRkIG1hbnktZmlsZXMuKgorZ2l0IGNvbW1pdCAtcSAtbSBwYXJhbXMKKworIyBDcmVhdGUgYmFsbGFzdCBmb3IgcDAwMDYgYmFzZWQgdXBvbiB0aGUgZ2l2ZW4gcGFyYW1zIGFuZAorIyBpbmZsYXRlIHRoZSBpbmRleCB3aXRoIHRob3VzYW5kcyBvZiBlbXB0eSBmaWxlcyBhbmQgY29tbWl0LgorZ2l0IGNoZWNrb3V0IC1iIHAwMDA2LWJhbGxhc3QKK2ZpbGxfaW5kZXggImJhbGxhc3QiICRkZXB0aCAkd2lkdGggJGZpbGVzCitnaXQgY29tbWl0IC1xIC1tICJiYWxsYXN0IgorCitucl9maWxlcz0kKGdpdCBscy1maWxlcyB8IHdjIC1sKQorCisjIE1vZGlmeSAxIGZpbGUgYW5kIGNvbW1pdC4KK2VjaG8gIiRkZXB0aCAkd2lkdGggJGZpbGVzIiA+Pm1hbnktZmlsZXMucGFyYW1zCitnaXQgYWRkIG1hbnktZmlsZXMucGFyYW1zCitnaXQgY29tbWl0IC1xIC1tICJiYWxsYXN0IHBsdXMgMSIKKworIyBDaGVja291dCBtYXN0ZXIgdG8gcHV0IHJlcG8gaW4gY2Fub25pY2FsIHN0YXRlIChiZWNhdXNlCisjIHRoZSBwZXJmIHRlc3QgbWF5IG5lZWQgdG8gY2xvbmUgYW5kIGVuYWJsZSBzcGFyc2UtY2hlY2tvdXQKKyMgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY2hlY2tvdXQgYSBjb21taXQgd2l0aCB0aGUgYmFsbGFzdAorIyAoYmVjYXVzZSBpdCBtYXkgY29udGFpbiAxMDBLIGRpcmVjdG9yaWVzIGFuZCAxTSBmaWxlcykpLgorZ2l0IGNoZWNrb3V0IG1hc3RlcgorCitlY2hvICJSZXBvc2l0b3J5ICIkcmVwbyIgKCRkZXB0aCwgJHdpZHRoLCAkZmlsZXMpIGNyZWF0ZWQuICBCYWxsYXN0ICRucl9maWxlcy4iCitleGl0IDAKZGlmZiAtLWdpdCBhL3QvcGVyZi9ydW4gYi90L3BlcmYvcnVuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3Yjg2MTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcnVuCkBAIC0wLDAgKzEsMjQ3IEBACisjIS9iaW4vc2gKKworZGllICgpIHsKKwllY2hvID4mMiAiZXJyb3I6ICQqIgorCWV4aXQgMQorfQorCit3aGlsZSBbICQjIC1ndCAwIF07IGRvCisJYXJnPSIkMSIKKwljYXNlICIkYXJnIiBpbgorCS0tKQorCQlicmVhayA7OworCS0taGVscCkKKwkJZWNobyAidXNhZ2U6ICQwIFstLWNvbmZpZyBmaWxlXSBbLS1zdWJzZWN0aW9uIHN1YnNlY10gW290aGVyX2dpdF90cmVlLi4uXSBbLS1dIFt0ZXN0X3NjcmlwdHNdIgorCQlleGl0IDAgOzsKKwktLWNvbmZpZykKKwkJc2hpZnQKKwkJR0lUX1BFUkZfQ09ORklHX0ZJTEU9JChjZCAiJChkaXJuYW1lICIkMSIpIjsgcHdkKS8kKGJhc2VuYW1lICIkMSIpCisJCWV4cG9ydCBHSVRfUEVSRl9DT05GSUdfRklMRQorCQlzaGlmdCA7OworCS0tc3Vic2VjdGlvbikKKwkJc2hpZnQKKwkJR0lUX1BFUkZfU1VCU0VDVElPTj0iJDEiCisJCWV4cG9ydCBHSVRfUEVSRl9TVUJTRUNUSU9OCisJCXNoaWZ0IDs7CisJLS0qKQorCQlkaWUgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIgOzsKKwkqKQorCQlicmVhayA7OworCWVzYWMKK2RvbmUKKworcnVuX29uZV9kaXIgKCkgeworCWlmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKwkJc2V0IC0tIHA/Pz8/LSouc2gKKwlmaQorCWVjaG8gIj09PSBSdW5uaW5nICQjIHRlc3RzIGluICR7R0lUX1RFU1RfSU5TVEFMTEVEOi10aGlzIHRyZWV9ID09PSIKKwlmb3IgdCBpbiAiJEAiOyBkbworCQkuLyR0ICRHSVRfVEVTVF9PUFRTCisJZG9uZQorfQorCit1bnBhY2tfZ2l0X3JldiAoKSB7CisJcmV2PSQxCisJZWNobyAiPT09IFVucGFja2luZyAkcmV2IGluIGJ1aWxkLyRyZXYgPT09IgorCW1rZGlyIC1wIGJ1aWxkLyRyZXYKKwkoY2QgIiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctY2R1cCkiICYmIGdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAkcmV2KSB8CisJKGNkIGJ1aWxkLyRyZXYgJiYgdGFyIHgpCit9CisKK2J1aWxkX2dpdF9yZXYgKCkgeworCXJldj0kMQorCW5hbWU9IiQyIgorCWZvciBjb25maWcgaW4gY29uZmlnLm1hayBjb25maWcubWFrLmF1dG9nZW4gY29uZmlnLnN0YXR1cworCWRvCisJCWlmIHRlc3QgLWUgIi4uLy4uLyRjb25maWciCisJCXRoZW4KKwkJCWNwICIuLi8uLi8kY29uZmlnIiAiYnVpbGQvJHJldi8iCisJCWZpCisJZG9uZQorCWVjaG8gIj09PSBCdWlsZGluZyAkcmV2ICgkbmFtZSkgPT09IgorCSgKKwkJY2QgYnVpbGQvJHJldiAmJgorCQlpZiB0ZXN0IC1uICIkR0lUX1BFUkZfTUFLRV9DT01NQU5EIgorCQl0aGVuCisJCQlzaCAtYyAiJEdJVF9QRVJGX01BS0VfQ09NTUFORCIKKwkJZWxzZQorCQkJbWFrZSAkR0lUX1BFUkZfTUFLRV9PUFRTCisJCWZpCisJKSB8fCBkaWUgImZhaWxlZCB0byBidWlsZCByZXZpc2lvbiAnJG15ZGlyJyIKK30KKworc2V0X2dpdF90ZXN0X2luc3RhbGxlZCAoKSB7CisJbXlkaXI9JDEKKworCW15ZGlyX2Ficz0kKGNkICRteWRpciAmJiBwd2QpCisJbXlkaXJfYWJzX3dyYXBwZXJzPSIkbXlkaXJfYWJzX3dyYXBwZXJzL2Jpbi13cmFwcGVycyIKKwlpZiB0ZXN0IC1kICIkbXlkaXJfYWJzX3dyYXBwZXJzIgorCXRoZW4KKwkJR0lUX1RFU1RfSU5TVEFMTEVEPSRteWRpcl9hYnNfd3JhcHBlcnMKKwllbHNlCisJCSMgT2xkZXIgdmVyc2lvbnMgb2YgZ2l0IGxhY2tlZCBiaW4td3JhcHBlcnM7CisJCSMgZmFsbGJhY2sgdG8gdGhlIGZpbGVzIGluIHRoZSByb290LgorCQlHSVRfVEVTVF9JTlNUQUxMRUQ9JG15ZGlyX2FicworCWZpCisJZXhwb3J0IEdJVF9URVNUX0lOU1RBTExFRAorCVBFUkZfU0VUX0dJVF9URVNUX0lOU1RBTExFRD10cnVlCisJZXhwb3J0IFBFUkZfU0VUX0dJVF9URVNUX0lOU1RBTExFRAorfQorCitydW5fZGlyc19oZWxwZXIgKCkgeworCW15ZGlyPSR7MSUvfQorCXNoaWZ0CisJd2hpbGUgdGVzdCAkIyAtZ3QgMCAtYSAiJDEiICE9IC0tIC1hICEgLWYgIiQxIjsgZG8KKwkJc2hpZnQKKwlkb25lCisJaWYgdGVzdCAkIyAtZ3QgMCAtYSAiJDEiID0gLS07IHRoZW4KKwkJc2hpZnQKKwlmaQorCisJUEVSRl9SRVNVTFRTX1BSRUZJWD0KKwlpZiB0ZXN0ICIkbXlkaXIiID0gIi4iCisJdGhlbgorCQl1bnNldCBHSVRfVEVTVF9JTlNUQUxMRUQKKwllbGlmIHRlc3QgLWQgIiRteWRpciIKKwl0aGVuCisJCVBFUkZfUkVTVUxUU19QUkVGSVg9YmluZGlyJChjZCAkbXlkaXIgJiYgcHJpbnRmICIlcyIgIiQocHdkKSIgfCB0ciAtYyAiW2EtekEtWjAtOV0iICJfIikuCisJCXNldF9naXRfdGVzdF9pbnN0YWxsZWQgIiRteWRpciIKKwllbHNlCisJCXJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRteWRpciIgMj4vZGV2L251bGwpIHx8CisJCWRpZSAiJyRteWRpcicgaXMgbmVpdGhlciBhIGRpcmVjdG9yeSBub3IgYSB2YWxpZCByZXZpc2lvbiIKKwkJaWYgWyAhIC1kIGJ1aWxkLyRyZXYgXTsgdGhlbgorCQkJdW5wYWNrX2dpdF9yZXYgJHJldgorCQlmaQorCQlidWlsZF9naXRfcmV2ICRyZXYgIiRteWRpciIKKwkJbXlkaXI9YnVpbGQvJHJldgorCisJCVBFUkZfUkVTVUxUU19QUkVGSVg9YnVpbGRfJHJldi4KKwkJc2V0X2dpdF90ZXN0X2luc3RhbGxlZCAiJG15ZGlyIgorCWZpCisJZXhwb3J0IFBFUkZfUkVTVUxUU19QUkVGSVgKKworCXJ1bl9vbmVfZGlyICIkQCIKK30KKworcnVuX2RpcnMgKCkgeworCXdoaWxlIHRlc3QgJCMgLWd0IDAgLWEgIiQxIiAhPSAtLSAtYSAhIC1mICIkMSI7IGRvCisJCXJ1bl9kaXJzX2hlbHBlciAiJEAiCisJCXNoaWZ0CisJZG9uZQorfQorCitnZXRfc3Vic2VjdGlvbnMgKCkgeworCXNlY3Rpb249IiQxIgorCXRlc3QgLXogIiRHSVRfUEVSRl9DT05GSUdfRklMRSIgJiYgcmV0dXJuCisJZ2l0IGNvbmZpZyAtZiAiJEdJVF9QRVJGX0NPTkZJR19GSUxFIiAtLW5hbWUtb25seSAtLWdldC1yZWdleCAiJHNlY3Rpb25cLi4qXC5bXi5dKyIgfAorCXNlZCAtZSAicy8kc2VjdGlvblwuXCguKlwpXC4uKi9cMS8iIHwgc29ydCB8IHVuaXEKK30KKworZ2V0X3Zhcl9mcm9tX2Vudl9vcl9jb25maWcgKCkgeworCWVudl92YXI9IiQxIgorCWNvbmZfc2VjPSIkMiIKKwljb25mX3Zhcj0iJDMiCisJY29uZl9vcHRzPSIkNCIgIyBvcHRpb25hbAorCisJIyBEbyBub3RoaW5nIGlmIHRoZSBlbnYgdmFyaWFibGUgaXMgYWxyZWFkeSBzZXQKKwlldmFsICJ0ZXN0IC16IFwiXCR7JGVudl92YXIreH1cIiIgfHwgcmV0dXJuCisKKwl0ZXN0IC16ICIkR0lUX1BFUkZfQ09ORklHX0ZJTEUiICYmIHJldHVybgorCisJIyBDaGVjayBpZiB0aGUgdmFyaWFibGUgaXMgaW4gdGhlIGNvbmZpZyBmaWxlCisJaWYgdGVzdCAtbiAiJEdJVF9QRVJGX1NVQlNFQ1RJT04iCisJdGhlbgorCQl2YXI9IiRjb25mX3NlYy4kR0lUX1BFUkZfU1VCU0VDVElPTi4kY29uZl92YXIiCisJCWNvbmZfdmFsdWU9JChnaXQgY29uZmlnICRjb25mX29wdHMgLWYgIiRHSVRfUEVSRl9DT05GSUdfRklMRSIgIiR2YXIiKSAmJgorCQlldmFsICIkZW52X3Zhcj1cIiRjb25mX3ZhbHVlXCIiICYmIHJldHVybgorCWZpCisJdmFyPSIkY29uZl9zZWMuJGNvbmZfdmFyIgorCWNvbmZfdmFsdWU9JChnaXQgY29uZmlnICRjb25mX29wdHMgLWYgIiRHSVRfUEVSRl9DT05GSUdfRklMRSIgIiR2YXIiKSAmJgorCWV2YWwgIiRlbnZfdmFyPVwiJGNvbmZfdmFsdWVcIiIKK30KKworcnVuX3N1YnNlY3Rpb24gKCkgeworCWdldF92YXJfZnJvbV9lbnZfb3JfY29uZmlnICJHSVRfUEVSRl9SRVBFQVRfQ09VTlQiICJwZXJmIiAicmVwZWF0Q291bnQiICItLWludCIKKwk6ICR7R0lUX1BFUkZfUkVQRUFUX0NPVU5UOj0zfQorCWV4cG9ydCBHSVRfUEVSRl9SRVBFQVRfQ09VTlQKKworCWdldF92YXJfZnJvbV9lbnZfb3JfY29uZmlnICJHSVRfUEVSRl9ESVJTX09SX1JFVlMiICJwZXJmIiAiZGlyc09yUmV2cyIKKwlzZXQgLS0gJEdJVF9QRVJGX0RJUlNfT1JfUkVWUyAiJEAiCisKKwlnZXRfdmFyX2Zyb21fZW52X29yX2NvbmZpZyAiR0lUX1BFUkZfTUFLRV9DT01NQU5EIiAicGVyZiIgIm1ha2VDb21tYW5kIgorCWdldF92YXJfZnJvbV9lbnZfb3JfY29uZmlnICJHSVRfUEVSRl9NQUtFX09QVFMiICJwZXJmIiAibWFrZU9wdHMiCisKKwlnZXRfdmFyX2Zyb21fZW52X29yX2NvbmZpZyAiR0lUX1BFUkZfUkVQT19OQU1FIiAicGVyZiIgInJlcG9OYW1lIgorCWV4cG9ydCBHSVRfUEVSRl9SRVBPX05BTUUKKworCUdJVF9QRVJGX0FHR1JFR0FUSU5HX0xBVEVSPXQKKwlleHBvcnQgR0lUX1BFUkZfQUdHUkVHQVRJTkdfTEFURVIKKworCWlmIHRlc3QgJCMgPSAwIC1vICIkMSIgPSAtLSAtbyAtZiAiJDEiOyB0aGVuCisJCXNldCAtLSAuICIkQCIKKwlmaQorCisJY29kZXNwZWVkX29wdD0KKwl0ZXN0ICIkR0lUX1BFUkZfQ09ERVNQRUVEX09VVFBVVCIgPSAidHJ1ZSIgJiYgY29kZXNwZWVkX29wdD0iLS1jb2Rlc3BlZWQiCisKKwlydW5fZGlycyAiJEAiCisKKwlpZiB0ZXN0IC16ICIkR0lUX1BFUkZfU0VORF9UT19DT0RFU1BFRUQiCisJdGhlbgorCQkuL2FnZ3JlZ2F0ZS5wZXJsICRjb2Rlc3BlZWRfb3B0ICIkQCIKKwllbHNlCisJCWpzb25fcmVzX2ZpbGU9InRlc3QtcmVzdWx0cy8kR0lUX1BFUkZfU1VCU0VDVElPTi9hZ2dyZWdhdGUuanNvbiIKKwkJLi9hZ2dyZWdhdGUucGVybCAtLWNvZGVzcGVlZCAiJEAiIHwgdGVlICIkanNvbl9yZXNfZmlsZSIKKwkJc2VuZF9kYXRhX3VybD0iJEdJVF9QRVJGX1NFTkRfVE9fQ09ERVNQRUVEL3Jlc3VsdC9hZGQvanNvbi8iCisJCWN1cmwgLXYgLS1yZXF1ZXN0IFBPU1QgLS1kYXRhLXVybGVuY29kZSAianNvbj0kKGNhdCAiJGpzb25fcmVzX2ZpbGUiKSIgIiRzZW5kX2RhdGFfdXJsIgorCWZpCit9CisKK2dldF92YXJfZnJvbV9lbnZfb3JfY29uZmlnICJHSVRfUEVSRl9DT0RFU1BFRURfT1VUUFVUIiAicGVyZiIgImNvZGVzcGVlZE91dHB1dCIgIi0tYm9vbCIKK2dldF92YXJfZnJvbV9lbnZfb3JfY29uZmlnICJHSVRfUEVSRl9TRU5EX1RPX0NPREVTUEVFRCIgInBlcmYiICJzZW5kVG9Db2Rlc3BlZWQiCisKK2NkICIkKGRpcm5hbWUgJDApIgorLiAuLi8uLi9HSVQtQlVJTEQtT1BUSU9OUworCitta2RpciAtcCB0ZXN0LXJlc3VsdHMKK2dldF9zdWJzZWN0aW9ucyAicGVyZiIgPnRlc3QtcmVzdWx0cy9ydW5fc3Vic2VjdGlvbnMubmFtZXMKKworaWYgdGVzdCAkKHdjIC1sIDx0ZXN0LXJlc3VsdHMvcnVuX3N1YnNlY3Rpb25zLm5hbWVzKSAtZXEgMAordGhlbgorCWlmIHRlc3QgLW4gIiRHSVRfUEVSRl9TVUJTRUNUSU9OIgorCXRoZW4KKwkJaWYgdGVzdCAtbiAiJEdJVF9QRVJGX0NPTkZJR19GSUxFIgorCQl0aGVuCisJCQlkaWUgIm5vIHN1YnNlY3Rpb25zIGFyZSBkZWZpbmVkIGluIGNvbmZpZyBmaWxlICckR0lUX1BFUkZfQ09ORklHX0ZJTEUnIgorCQllbHNlCisJCQlkaWUgInN1YnNlY3Rpb24gJyRHSVRfUEVSRl9TVUJTRUNUSU9OJyBkZWZpbmVkIHdpdGhvdXQgYSBjb25maWcgZmlsZSIKKwkJZmkKKwlmaQorCSgKKwkJcnVuX3N1YnNlY3Rpb24gIiRAIgorCSkKK2VsaWYgdGVzdCAtbiAiJEdJVF9QRVJGX1NVQlNFQ1RJT04iCit0aGVuCisJZWdyZXAgIl4kR0lUX1BFUkZfU1VCU0VDVElPTlwkIiB0ZXN0LXJlc3VsdHMvcnVuX3N1YnNlY3Rpb25zLm5hbWVzID4vZGV2L251bGwgfHwKKwkJZGllICJzdWJzZWN0aW9uICckR0lUX1BFUkZfU1VCU0VDVElPTicgbm90IGZvdW5kIGluICckR0lUX1BFUkZfQ09ORklHX0ZJTEUnIgorCisJZWdyZXAgIl4kR0lUX1BFUkZfU1VCU0VDVElPTlwkIiB0ZXN0LXJlc3VsdHMvcnVuX3N1YnNlY3Rpb25zLm5hbWVzIHwgd2hpbGUgcmVhZCAtciBzdWJzZWMKKwlkbworCQkoCisJCQlHSVRfUEVSRl9TVUJTRUNUSU9OPSIkc3Vic2VjIgorCQkJZXhwb3J0IEdJVF9QRVJGX1NVQlNFQ1RJT04KKwkJCWVjaG8gIj09PT09PT09IFJ1biBmb3Igc3Vic2VjdGlvbiAnJEdJVF9QRVJGX1NVQlNFQ1RJT04nID09PT09PT09IgorCQkJcnVuX3N1YnNlY3Rpb24gIiRAIgorCQkpCisJZG9uZQorZWxzZQorCXdoaWxlIHJlYWQgLXIgc3Vic2VjCisJZG8KKwkJKAorCQkJR0lUX1BFUkZfU1VCU0VDVElPTj0iJHN1YnNlYyIKKwkJCWV4cG9ydCBHSVRfUEVSRl9TVUJTRUNUSU9OCisJCQllY2hvICI9PT09PT09PSBSdW4gZm9yIHN1YnNlY3Rpb24gJyRHSVRfUEVSRl9TVUJTRUNUSU9OJyA9PT09PT09PSIKKwkJCXJ1bl9zdWJzZWN0aW9uICIkQCIKKwkJKQorCWRvbmUgPHRlc3QtcmVzdWx0cy9ydW5fc3Vic2VjdGlvbnMubmFtZXMKK2ZpCmRpZmYgLS1naXQgYS90L3QwMDAwLWJhc2ljLnNoIGIvdC90MDAwMC1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZmYxNzZjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAwMC1iYXNpYy5zaApAQCAtMCwwICsxLDEyNzQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGUgdmVyeSBiYXNpY3MgcGFydCAjMS4KKworVGhlIHJlc3Qgb2YgdGhlIHRlc3Qgc3VpdGUgZG9lcyBub3QgY2hlY2sgdGhlIGJhc2ljIG9wZXJhdGlvbiBvZiBnaXQKK3BsdW1iaW5nIGNvbW1hbmRzIHRvIHdvcmsgdmVyeSBjYXJlZnVsbHkuICBUaGVpciBqb2IgaXMgdG8gY29uY2VudHJhdGUKK29uIHRyaWNreSBmZWF0dXJlcyB0aGF0IGNhdXNlZCBidWdzIGluIHRoZSBwYXN0IHRvIGRldGVjdCByZWdyZXNzaW9uLgorCitUaGlzIHRlc3QgcnVucyB2ZXJ5IGJhc2ljIGZlYXR1cmVzLCBsaWtlIHJlZ2lzdGVyaW5nIHRoaW5ncyBpbiBjYWNoZSwKK3dyaXRpbmcgdHJlZSwgZXRjLgorCitOb3RlIHRoYXQgdGhpcyB0ZXN0ICpkZWxpYmVyYXRlbHkqIGhhcmQtY29kZXMgbWFueSBleHBlY3RlZCBvYmplY3QKK0lEcy4gIFdoZW4gb2JqZWN0IElEIGNvbXB1dGF0aW9uIGNoYW5nZXMsIGxpa2UgaW4gdGhlIHByZXZpb3VzIGNhc2Ugb2YKK3N3YXBwaW5nIGNvbXByZXNzaW9uIGFuZCBoYXNoaW5nIG9yZGVyLCB0aGUgcGVyc29uIHdobyBpcyBtYWtpbmcgdGhlCittb2RpZmljYXRpb24gKnNob3VsZCogdGFrZSBub3RpY2UgYW5kIHVwZGF0ZSB0aGUgdGVzdCB2ZWN0b3JzIGhlcmUuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0cnlfbG9jYWxfeHkgKCkgeworCWxvY2FsIHg9ImxvY2FsIiB5PSJhbHNvbG9jYWwiICYmCisJZWNobyAiJHggJHkiCit9CisKKyMgQ2hlY2sgd2hldGhlciB0aGUgc2hlbGwgc3VwcG9ydHMgdGhlICJsb2NhbCIga2V5d29yZC4gImxvY2FsIiBpcyBub3QKKyMgUE9TSVgtc3RhbmRhcmQsIGJ1dCBpdCBpcyB2ZXJ5IHdpZGVseSBzdXBwb3J0ZWQgYnkgUE9TSVgtY29tcGxpYW50CisjIHNoZWxscywgYW5kIHdlIHJlbHkgb24gaXQgd2l0aGluIEdpdCdzIHRlc3QgZnJhbWV3b3JrLgorIworIyBJZiB5b3VyIHNoZWxsIGZhaWxzIHRoaXMgdGVzdCwgdGhlIHJlc3VsdHMgb2Ygb3RoZXIgdGVzdHMgbWF5IGJlCisjIHVucmVsaWFibGUuIFlvdSBtYXkgd2lzaCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8gdGhlIEdpdCBtYWlsaW5nCisjIGxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LCBhcyBpdCBjb3VsZCBjYXVzZSB1cyB0byByZWNvbnNpZGVyCisjIHJlbHlpbmcgb24gImxvY2FsIi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IHRoZSBydW5uaW5nIHNoZWxsIHN1cHBvcnRzICJsb2NhbCInICcKKwl4PSJub3Rsb2NhbCIgJiYKKwl5PSJhbHNvbm90bG9jYWwiICYmCisJZWNobyAibG9jYWwgYWxzb2xvY2FsIiA+ZXhwZWN0ZWQxICYmCisJdHJ5X2xvY2FsX3h5ID5hY3R1YWwxICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQxIGFjdHVhbDEgJiYKKwllY2hvICJub3Rsb2NhbCBhbHNvbm90bG9jYWwiID5leHBlY3RlZDIgJiYKKwllY2hvICIkeCAkeSIgPmFjdHVhbDIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDIgYWN0dWFsMgorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGdpdCBpbml0IGhhcyBiZWVuIGRvbmUgaW4gYW4gZW1wdHkgcmVwb3NpdG9yeS4KKyMgbWFrZSBzdXJlIGl0IGlzIGVtcHR5LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0L29iamVjdHMgc2hvdWxkIGJlIGVtcHR5IGFmdGVyIGdpdCBpbml0IGluIGFuIGVtcHR5IHJlcG8nICcKKwlmaW5kIC5naXQvb2JqZWN0cyAtdHlwZSBmIC1wcmludCA+c2hvdWxkLWJlLWVtcHR5ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBzaG91bGQtYmUtZW1wdHkKKycKKworIyBhbHNvIGl0IHNob3VsZCBoYXZlIDIgc3ViZGlyZWN0b3JpZXM7IG5vIGZhbi1vdXQgYW55bW9yZSwgcGFjaywgYW5kIGluZm8uCisjIDMgaXMgY291bnRpbmcgIm9iamVjdHMiIGl0c2VsZgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdC9vYmplY3RzIHNob3VsZCBoYXZlIDMgc3ViZGlyZWN0b3JpZXMnICcKKwlmaW5kIC5naXQvb2JqZWN0cyAtdHlwZSBkIC1wcmludCA+ZnVsbC1vZi1kaXJlY3RvcmllcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgZnVsbC1vZi1kaXJlY3RvcmllcworJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgaGFybmVzcwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2VzcyBpcyByZXBvcnRlZCBsaWtlIHRoaXMnICcKKwk6CisnCisKK19ydW5fc3ViX3Rlc3RfbGliX3Rlc3RfY29tbW9uICgpIHsKKwluZWc9IiQxIiBuYW1lPSIkMiIgZGVzY3I9IiQzIiAjIHN0ZGluIGlzIHRoZSBib2R5IG9mIHRoZSB0ZXN0IGNvZGUKKwlzaGlmdCAzCisJbWtkaXIgIiRuYW1lIiAmJgorCSgKKwkJIyBQcmV0ZW5kIHdlJ3JlIG5vdCBydW5uaW5nIHVuZGVyIGEgdGVzdCBoYXJuZXNzLCB3aGV0aGVyIHdlCisJCSMgYXJlIG9yIG5vdC4gVGhlIHRlc3QtbGliIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBzZXR0aW5nIG9mCisJCSMgdGhpcyB2YXJpYWJsZSwgc28gd2UgbmVlZCBhIHN0YWJsZSBzZXR0aW5nIHVuZGVyIHdoaWNoIHRvIHJ1bgorCQkjIHRoZSBzdWItdGVzdC4KKwkJc2FuZV91bnNldCBIQVJORVNTX0FDVElWRSAmJgorCQljZCAiJG5hbWUiICYmCisJCXdyaXRlX3NjcmlwdCAiJG5hbWUuc2giICIkVEVTVF9TSEVMTF9QQVRIIiA8PC1FT0YgJiYKKwkJdGVzdF9kZXNjcmlwdGlvbj0nJGRlc2NyIChydW4gaW4gc3ViIHRlc3QtbGliKQorCisJCVRoaXMgaXMgcnVuIGluIGEgc3ViIHRlc3QtbGliIHNvIHRoYXQgd2UgZG8gbm90IGdldCBpbmNvcnJlY3QKKwkJcGFzc2luZyBtZXRyaWNzCisJCScKKworCQkjIFRlbGwgdGhlIGZyYW1ld29yayB0aGF0IHdlIGFyZSBzZWxmLXRlc3RpbmcgdG8gbWFrZSBzdXJlCisJCSMgaXQgeWllbGRzIGEgc3RhYmxlIHJlc3VsdC4KKwkJR0lUX1RFU1RfRlJBTUVXT1JLX1NFTEZURVNUPXQgJiYKKworCQkjIFBvaW50IHRvIHRoZSB0L3Rlc3QtbGliLnNoLCB3aGljaCBpc24ndCBpbiAuLi8gYXMgdXN1YWwKKwkJLiAiXCRURVNUX0RJUkVDVE9SWSIvdGVzdC1saWIuc2gKKwkJRU9GCisJCWNhdCA+PiIkbmFtZS5zaCIgJiYKKwkJZXhwb3J0IFRFU1RfRElSRUNUT1JZICYmCisJCVRFU1RfT1VUUFVUX0RJUkVDVE9SWT0kKHB3ZCkgJiYKKwkJZXhwb3J0IFRFU1RfT1VUUFVUX0RJUkVDVE9SWSAmJgorCQlzYW5lX3Vuc2V0IEdJVF9URVNUX0ZBSUxfUFJFUkVRUyAmJgorCQlpZiB0ZXN0IC16ICIkbmVnIgorCQl0aGVuCisJCQkuLyIkbmFtZS5zaCIgIiRAIiA+b3V0IDI+ZXJyCisJCWVsc2UKKwkJCSEgLi8iJG5hbWUuc2giICIkQCIgPm91dCAyPmVycgorCQlmaQorCSkKK30KKworcnVuX3N1Yl90ZXN0X2xpYl90ZXN0ICgpIHsKKwlfcnVuX3N1Yl90ZXN0X2xpYl90ZXN0X2NvbW1vbiAnJyAiJEAiCit9CisKK3J1bl9zdWJfdGVzdF9saWJfdGVzdF9lcnIgKCkgeworCV9ydW5fc3ViX3Rlc3RfbGliX3Rlc3RfY29tbW9uICchJyAiJEAiCit9CisKK2NoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0ICgpIHsKKwluYW1lPSIkMSIgIyBzdGRpbiBpcyB0aGUgZXhwZWN0ZWQgb3V0cHV0IGZyb20gdGhlIHRlc3QKKwkoCisJCWNkICIkbmFtZSIgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCQlzZWQgLWUgJ3MvXj4gLy8nIC1lICdzL1okLy8nID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IG91dAorCSkKK30KKworY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3RfZXJyICgpIHsKKwluYW1lPSIkMSIgIyBzdGRpbiBpcyB0aGUgZXhwZWN0ZWQgb3V0cHV0IGZyb20gdGhlIHRlc3QKKwkjIGV4cGVjdGVkIGVycm9yIG91dHB1dCBpcyBpbiBkZXNjcmlwdG9yIDMKKwkoCisJCWNkICIkbmFtZSIgJiYKKwkJc2VkIC1lICdzL14+IC8vJyAtZSAncy9aJC8vJyA+ZXhwZWN0Lm91dCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qub3V0IG91dCAmJgorCQlzZWQgLWUgJ3MvXj4gLy8nIC1lICdzL1okLy8nIDwmMyA+ZXhwZWN0LmVyciAmJgorCQl0ZXN0X2NtcCBleHBlY3QuZXJyIGVycgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldGVuZCB3ZSBoYXZlIGEgZnVsbHkgcGFzc2luZyB0ZXN0IHN1aXRlJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IGZ1bGwtcGFzcyAnMyBwYXNzaW5nIHRlc3RzJyA8PC1cXEVPRiAmJgorCWZvciBpIGluIDEgMiAzCisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJZG9uZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IGZ1bGwtcGFzcyA8PC1cXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdCAjMQorCT4gb2sgMiAtIHBhc3NpbmcgdGVzdCAjMgorCT4gb2sgMyAtIHBhc3NpbmcgdGVzdCAjMworCT4gIyBwYXNzZWQgYWxsIDMgdGVzdChzKQorCT4gMS4uMworCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0ZW5kIHdlIGhhdmUgYSBwYXJ0aWFsbHkgcGFzc2luZyB0ZXN0IHN1aXRlJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0X2VyciBcCisJCXBhcnRpYWwtcGFzcyAnMi8zIHRlc3RzIHBhc3NpbmcnIDw8LVxcRU9GICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFzc2luZyB0ZXN0ICMxJyAndHJ1ZScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsaW5nIHRlc3QgIzInICdmYWxzZScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXNzaW5nIHRlc3QgIzMnICd0cnVlJworCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHBhcnRpYWwtcGFzcyA8PC1cXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdCAjMQorCT4gbm90IG9rIDIgLSBmYWlsaW5nIHRlc3QgIzIKKwkjCWZhbHNlCisJPiBvayAzIC0gcGFzc2luZyB0ZXN0ICMzCisJPiAjIGZhaWxlZCAxIGFtb25nIDMgdGVzdChzKQorCT4gMS4uMworCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0ZW5kIHdlIGhhdmUgYSBrbm93biBicmVha2FnZScgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBmYWlsaW5nLXRvZG8gJ0EgZmFpbGluZyBUT0RPIHRlc3QnIDw8LVxcRU9GICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFzc2luZyB0ZXN0JyAndHJ1ZScKKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICdwcmV0ZW5kIHdlIGhhdmUgYSBrbm93biBicmVha2FnZScgJ2ZhbHNlJworCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IGZhaWxpbmctdG9kbyA8PC1cXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdAorCT4gbm90IG9rIDIgLSBwcmV0ZW5kIHdlIGhhdmUgYSBrbm93biBicmVha2FnZSAjIFRPRE8ga25vd24gYnJlYWthZ2UKKwk+ICMgc3RpbGwgaGF2ZSAxIGtub3duIGJyZWFrYWdlKHMpCisJPiAjIHBhc3NlZCBhbGwgcmVtYWluaW5nIDEgdGVzdChzKQorCT4gMS4uMgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0ZW5kIHdlIGhhdmUgZml4ZWQgYSBrbm93biBicmVha2FnZScgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBwYXNzaW5nLXRvZG8gJ0EgcGFzc2luZyBUT0RPIHRlc3QnIDw8LVxcRU9GICYmCisJdGVzdF9leHBlY3RfZmFpbHVyZSAncHJldGVuZCB3ZSBoYXZlIGZpeGVkIGEga25vd24gYnJlYWthZ2UnICd0cnVlJworCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHBhc3NpbmctdG9kbyA8PC1cXEVPRgorCT4gb2sgMSAtIHByZXRlbmQgd2UgaGF2ZSBmaXhlZCBhIGtub3duIGJyZWFrYWdlICMgVE9ETyBrbm93biBicmVha2FnZSB2YW5pc2hlZAorCT4gIyAxIGtub3duIGJyZWFrYWdlKHMpIHZhbmlzaGVkOyBwbGVhc2UgdXBkYXRlIHRlc3QocykKKwk+IDEuLjEKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldGVuZCB3ZSBoYXZlIGZpeGVkIG9uZSBvZiB0d28ga25vd24gYnJlYWthZ2VzIChydW4gaW4gc3ViIHRlc3QtbGliKScgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBwYXJ0aWFsbHktcGFzc2luZy10b2RvcyBcCisJCScyIFRPRE8gdGVzdHMsIG9uZSBwYXNzaW5nJyA8PC1cXEVPRiAmJgorCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3ByZXRlbmQgd2UgaGF2ZSBhIGtub3duIGJyZWFrYWdlJyAnZmFsc2UnCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldGVuZCB3ZSBoYXZlIGEgcGFzc2luZyB0ZXN0JyAndHJ1ZScKKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICdwcmV0ZW5kIHdlIGhhdmUgZml4ZWQgYW5vdGhlciBrbm93biBicmVha2FnZScgJ3RydWUnCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgcGFydGlhbGx5LXBhc3NpbmctdG9kb3MgPDwtXFxFT0YKKwk+IG5vdCBvayAxIC0gcHJldGVuZCB3ZSBoYXZlIGEga25vd24gYnJlYWthZ2UgIyBUT0RPIGtub3duIGJyZWFrYWdlCisJPiBvayAyIC0gcHJldGVuZCB3ZSBoYXZlIGEgcGFzc2luZyB0ZXN0CisJPiBvayAzIC0gcHJldGVuZCB3ZSBoYXZlIGZpeGVkIGFub3RoZXIga25vd24gYnJlYWthZ2UgIyBUT0RPIGtub3duIGJyZWFrYWdlIHZhbmlzaGVkCisJPiAjIDEga25vd24gYnJlYWthZ2UocykgdmFuaXNoZWQ7IHBsZWFzZSB1cGRhdGUgdGVzdChzKQorCT4gIyBzdGlsbCBoYXZlIDEga25vd24gYnJlYWthZ2UocykKKwk+ICMgcGFzc2VkIGFsbCByZW1haW5pbmcgMSB0ZXN0KHMpCisJPiAxLi4zCisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXRlbmQgd2UgaGF2ZSBhIHBhc3MsIGZhaWwsIGFuZCBrbm93biBicmVha2FnZScgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdF9lcnIgXAorCQltaXhlZC1yZXN1bHRzMSAnbWl4ZWQgcmVzdWx0cyAjMScgPDwtXFxFT0YgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXNzaW5nIHRlc3QnICd0cnVlJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxpbmcgdGVzdCcgJ2ZhbHNlJworCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3ByZXRlbmQgd2UgaGF2ZSBhIGtub3duIGJyZWFrYWdlJyAnZmFsc2UnCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgbWl4ZWQtcmVzdWx0czEgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QKKwk+IG5vdCBvayAyIC0gZmFpbGluZyB0ZXN0CisJPiAjCWZhbHNlCisJPiBub3Qgb2sgMyAtIHByZXRlbmQgd2UgaGF2ZSBhIGtub3duIGJyZWFrYWdlICMgVE9ETyBrbm93biBicmVha2FnZQorCT4gIyBzdGlsbCBoYXZlIDEga25vd24gYnJlYWthZ2UocykKKwk+ICMgZmFpbGVkIDEgYW1vbmcgcmVtYWluaW5nIDIgdGVzdChzKQorCT4gMS4uMworCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0ZW5kIHdlIGhhdmUgYSBtaXggb2YgYWxsIHBvc3NpYmxlIHJlc3VsdHMnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3RfZXJyIFwKKwkJbWl4ZWQtcmVzdWx0czIgJ21peGVkIHJlc3VsdHMgIzInIDw8LVxcRU9GICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFzc2luZyB0ZXN0JyAndHJ1ZScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXNzaW5nIHRlc3QnICd0cnVlJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bhc3NpbmcgdGVzdCcgJ3RydWUnCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFzc2luZyB0ZXN0JyAndHJ1ZScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsaW5nIHRlc3QnICdmYWxzZScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsaW5nIHRlc3QnICdmYWxzZScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsaW5nIHRlc3QnICdmYWxzZScKKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICdwcmV0ZW5kIHdlIGhhdmUgYSBrbm93biBicmVha2FnZScgJ2ZhbHNlJworCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3ByZXRlbmQgd2UgaGF2ZSBhIGtub3duIGJyZWFrYWdlJyAnZmFsc2UnCisJdGVzdF9leHBlY3RfZmFpbHVyZSAncHJldGVuZCB3ZSBoYXZlIGZpeGVkIGEga25vd24gYnJlYWthZ2UnICd0cnVlJworCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IG1peGVkLXJlc3VsdHMyIDw8LVxcRU9GCisJPiBvayAxIC0gcGFzc2luZyB0ZXN0CisJPiBvayAyIC0gcGFzc2luZyB0ZXN0CisJPiBvayAzIC0gcGFzc2luZyB0ZXN0CisJPiBvayA0IC0gcGFzc2luZyB0ZXN0CisJPiBub3Qgb2sgNSAtIGZhaWxpbmcgdGVzdAorCT4gIwlmYWxzZQorCT4gbm90IG9rIDYgLSBmYWlsaW5nIHRlc3QKKwk+ICMJZmFsc2UKKwk+IG5vdCBvayA3IC0gZmFpbGluZyB0ZXN0CisJPiAjCWZhbHNlCisJPiBub3Qgb2sgOCAtIHByZXRlbmQgd2UgaGF2ZSBhIGtub3duIGJyZWFrYWdlICMgVE9ETyBrbm93biBicmVha2FnZQorCT4gbm90IG9rIDkgLSBwcmV0ZW5kIHdlIGhhdmUgYSBrbm93biBicmVha2FnZSAjIFRPRE8ga25vd24gYnJlYWthZ2UKKwk+IG9rIDEwIC0gcHJldGVuZCB3ZSBoYXZlIGZpeGVkIGEga25vd24gYnJlYWthZ2UgIyBUT0RPIGtub3duIGJyZWFrYWdlIHZhbmlzaGVkCisJPiAjIDEga25vd24gYnJlYWthZ2UocykgdmFuaXNoZWQ7IHBsZWFzZSB1cGRhdGUgdGVzdChzKQorCT4gIyBzdGlsbCBoYXZlIDIga25vd24gYnJlYWthZ2UocykKKwk+ICMgZmFpbGVkIDMgYW1vbmcgcmVtYWluaW5nIDcgdGVzdChzKQorCT4gMS4uMTAKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ3Rlc3QgLS12ZXJib3NlJyAnCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0X2VyciBcCisJCXQxMjM0LXZlcmJvc2UgInRlc3QgdmVyYm9zZSIgLS12ZXJib3NlIDw8LVxFT0YgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJwYXNzaW5nIHRlc3QiIHRydWUKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJ0ZXN0IHdpdGggb3V0cHV0IiAiZWNobyBmb28iCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmFpbGluZyB0ZXN0IiBmYWxzZQorCXRlc3RfZG9uZQorCUVPRgorCW12IHQxMjM0LXZlcmJvc2Uvb3V0IHQxMjM0LXZlcmJvc2Uvb3V0KyAmJgorCWdyZXAgLXYgIl5Jbml0aWFsaXplZCBlbXB0eSIgdDEyMzQtdmVyYm9zZS9vdXQrID50MTIzNC12ZXJib3NlL291dCAmJgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHQxMjM0LXZlcmJvc2UgPDwtXEVPRgorCT4gZXhwZWN0aW5nIHN1Y2Nlc3Mgb2YgMTIzNC4xICdcJydwYXNzaW5nIHRlc3QnXCcnOiB0cnVlCisJPiBvayAxIC0gcGFzc2luZyB0ZXN0CisJPiBaCisJPiBleHBlY3Rpbmcgc3VjY2VzcyBvZiAxMjM0LjIgJ1wnJ3Rlc3Qgd2l0aCBvdXRwdXQnXCcnOiBlY2hvIGZvbworCT4gZm9vCisJPiBvayAyIC0gdGVzdCB3aXRoIG91dHB1dAorCT4gWgorCT4gZXhwZWN0aW5nIHN1Y2Nlc3Mgb2YgMTIzNC4zICdcJydmYWlsaW5nIHRlc3QnXCcnOiBmYWxzZQorCT4gbm90IG9rIDMgLSBmYWlsaW5nIHRlc3QKKwk+ICMJZmFsc2UKKwk+IFoKKwk+ICMgZmFpbGVkIDEgYW1vbmcgMyB0ZXN0KHMpCisJPiAxLi4zCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS12ZXJib3NlLW9ubHknICcKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3RfZXJyIFwKKwkJdDIzNDUtdmVyYm9zZS1vbmx5LTIgInRlc3QgdmVyYm9zZS1vbmx5PTIiIFwKKwkJLS12ZXJib3NlLW9ubHk9MiA8PC1cRU9GICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicGFzc2luZyB0ZXN0IiB0cnVlCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAidGVzdCB3aXRoIG91dHB1dCIgImVjaG8gZm9vIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZhaWxpbmcgdGVzdCIgZmFsc2UKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCB0MjM0NS12ZXJib3NlLW9ubHktMiA8PC1cRU9GCisJPiBvayAxIC0gcGFzc2luZyB0ZXN0CisJPiBaCisJPiBleHBlY3Rpbmcgc3VjY2VzcyBvZiAyMzQ1LjIgJ1wnJ3Rlc3Qgd2l0aCBvdXRwdXQnXCcnOiBlY2hvIGZvbworCT4gZm9vCisJPiBvayAyIC0gdGVzdCB3aXRoIG91dHB1dAorCT4gWgorCT4gbm90IG9rIDMgLSBmYWlsaW5nIHRlc3QKKwk+ICMJZmFsc2UKKwk+ICMgZmFpbGVkIDEgYW1vbmcgMyB0ZXN0KHMpCisJPiAxLi4zCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9TS0lQX1RFU1RTJyAiCisJKAorCQlHSVRfU0tJUF9URVNUUz0nZ2l0LjInICYmIGV4cG9ydCBHSVRfU0tJUF9URVNUUyAmJgorCQlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgZ2l0LXNraXAtdGVzdHMtYmFzaWMgXAorCQkJJ0dJVF9TS0lQX1RFU1RTJyA8PC1cXEVPRiAmJgorCQlmb3IgaSBpbiAxIDIgMworCQlkbworCQkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJCWRvbmUKKwkJdGVzdF9kb25lCisJCUVPRgorCQljaGVja19zdWJfdGVzdF9saWJfdGVzdCBnaXQtc2tpcC10ZXN0cy1iYXNpYyA8PC1cXEVPRgorCQk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwkJPiBvayAyICMgc2tpcCBwYXNzaW5nIHRlc3QgIzIgKEdJVF9TS0lQX1RFU1RTKQorCQk+IG9rIDMgLSBwYXNzaW5nIHRlc3QgIzMKKwkJPiAjIHBhc3NlZCBhbGwgMyB0ZXN0KHMpCisJCT4gMS4uMworCQlFT0YKKwkpCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9TS0lQX1RFU1RTIHNldmVyYWwgdGVzdHMnICIKKwkoCisJCUdJVF9TS0lQX1RFU1RTPSdnaXQuMiBnaXQuNScgJiYgZXhwb3J0IEdJVF9TS0lQX1RFU1RTICYmCisJCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBnaXQtc2tpcC10ZXN0cy1zZXZlcmFsIFwKKwkJCSdHSVRfU0tJUF9URVNUUyBzZXZlcmFsIHRlc3RzJyA8PC1cXEVPRiAmJgorCQlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCQlkbworCQkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJCWRvbmUKKwkJdGVzdF9kb25lCisJCUVPRgorCQljaGVja19zdWJfdGVzdF9saWJfdGVzdCBnaXQtc2tpcC10ZXN0cy1zZXZlcmFsIDw8LVxcRU9GCisJCT4gb2sgMSAtIHBhc3NpbmcgdGVzdCAjMQorCQk+IG9rIDIgIyBza2lwIHBhc3NpbmcgdGVzdCAjMiAoR0lUX1NLSVBfVEVTVFMpCisJCT4gb2sgMyAtIHBhc3NpbmcgdGVzdCAjMworCQk+IG9rIDQgLSBwYXNzaW5nIHRlc3QgIzQKKwkJPiBvayA1ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzUgKEdJVF9TS0lQX1RFU1RTKQorCQk+IG9rIDYgLSBwYXNzaW5nIHRlc3QgIzYKKwkJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJCT4gMS4uNgorCQlFT0YKKwkpCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9TS0lQX1RFU1RTIHNoIHBhdHRlcm4nICIKKwkoCisJCUdJVF9TS0lQX1RFU1RTPSdnaXQuWzItNV0nICYmIGV4cG9ydCBHSVRfU0tJUF9URVNUUyAmJgorCQlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgZ2l0LXNraXAtdGVzdHMtc2gtcGF0dGVybiBcCisJCQknR0lUX1NLSVBfVEVTVFMgc2ggcGF0dGVybicgPDwtXFxFT0YgJiYKKwkJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwkJZG8KKwkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCQlkb25lCisJCXRlc3RfZG9uZQorCQlFT0YKKwkJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgZ2l0LXNraXAtdGVzdHMtc2gtcGF0dGVybiA8PC1cXEVPRgorCQk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwkJPiBvayAyICMgc2tpcCBwYXNzaW5nIHRlc3QgIzIgKEdJVF9TS0lQX1RFU1RTKQorCQk+IG9rIDMgIyBza2lwIHBhc3NpbmcgdGVzdCAjMyAoR0lUX1NLSVBfVEVTVFMpCisJCT4gb2sgNCAjIHNraXAgcGFzc2luZyB0ZXN0ICM0IChHSVRfU0tJUF9URVNUUykKKwkJPiBvayA1ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzUgKEdJVF9TS0lQX1RFU1RTKQorCQk+IG9rIDYgLSBwYXNzaW5nIHRlc3QgIzYKKwkJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJCT4gMS4uNgorCQlFT0YKKwkpCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9TS0lQX1RFU1RTIGVudGlyZSBzdWl0ZScgIgorCSgKKwkJR0lUX1NLSVBfVEVTVFM9J2dpdCcgJiYgZXhwb3J0IEdJVF9TS0lQX1RFU1RTICYmCisJCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBnaXQtc2tpcC10ZXN0cy1lbnRpcmUtc3VpdGUgXAorCQkJJ0dJVF9TS0lQX1RFU1RTIGVudGlyZSBzdWl0ZScgPDwtXFxFT0YgJiYKKwkJZm9yIGkgaW4gMSAyIDMKKwkJZG8KKwkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCQlkb25lCisJCXRlc3RfZG9uZQorCQlFT0YKKwkJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgZ2l0LXNraXAtdGVzdHMtZW50aXJlLXN1aXRlIDw8LVxcRU9GCisJCT4gMS4uMCAjIFNLSVAgc2tpcCBhbGwgdGVzdHMgaW4gZ2l0CisJCUVPRgorCSkKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX1NLSVBfVEVTVFMgZG9lcyBub3Qgc2tpcCB1bm1hdGNoZWQgc3VpdGUnICIKKwkoCisJCUdJVF9TS0lQX1RFU1RTPSdub3RnaXQnICYmIGV4cG9ydCBHSVRfU0tJUF9URVNUUyAmJgorCQlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgZ2l0LXNraXAtdGVzdHMtdW5tYXRjaGVkLXN1aXRlIFwKKwkJCSdHSVRfU0tJUF9URVNUUyBkb2VzIG5vdCBza2lwIHVubWF0Y2hlZCBzdWl0ZScgPDwtXFxFT0YgJiYKKwkJZm9yIGkgaW4gMSAyIDMKKwkJZG8KKwkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCQlkb25lCisJCXRlc3RfZG9uZQorCQlFT0YKKwkJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgZ2l0LXNraXAtdGVzdHMtdW5tYXRjaGVkLXN1aXRlIDw8LVxcRU9GCisJCT4gb2sgMSAtIHBhc3NpbmcgdGVzdCAjMQorCQk+IG9rIDIgLSBwYXNzaW5nIHRlc3QgIzIKKwkJPiBvayAzIC0gcGFzc2luZyB0ZXN0ICMzCisJCT4gIyBwYXNzZWQgYWxsIDMgdGVzdChzKQorCQk+IDEuLjMKKwkJRU9GCisJKQorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biBiYXNpYycgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBydW4tYmFzaWMgXAorCQknLS1ydW4gYmFzaWMnIC0tcnVuPScxIDMgNScgPDwtXFxFT0YgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCWRvbmUKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBydW4tYmFzaWMgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwk+IG9rIDIgIyBza2lwIHBhc3NpbmcgdGVzdCAjMiAoLS1ydW4pCisJPiBvayAzIC0gcGFzc2luZyB0ZXN0ICMzCisJPiBvayA0ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzQgKC0tcnVuKQorCT4gb2sgNSAtIHBhc3NpbmcgdGVzdCAjNQorCT4gb2sgNiAjIHNraXAgcGFzc2luZyB0ZXN0ICM2ICgtLXJ1bikKKwk+ICMgcGFzc2VkIGFsbCA2IHRlc3QocykKKwk+IDEuLjYKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gd2l0aCBhIHJhbmdlJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1yYW5nZSBcCisJCSctLXJ1biB3aXRoIGEgcmFuZ2UnIC0tcnVuPScxLTMnIDw8LVxcRU9GICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwlkb25lCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLXJhbmdlIDw8LVxcRU9GCisJPiBvayAxIC0gcGFzc2luZyB0ZXN0ICMxCisJPiBvayAyIC0gcGFzc2luZyB0ZXN0ICMyCisJPiBvayAzIC0gcGFzc2luZyB0ZXN0ICMzCisJPiBvayA0ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzQgKC0tcnVuKQorCT4gb2sgNSAjIHNraXAgcGFzc2luZyB0ZXN0ICM1ICgtLXJ1bikKKwk+IG9rIDYgIyBza2lwIHBhc3NpbmcgdGVzdCAjNiAoLS1ydW4pCisJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJPiAxLi42CisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIHdpdGggdHdvIHJhbmdlcycgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBydW4tdHdvLXJhbmdlcyBcCisJCSctLXJ1biB3aXRoIHR3byByYW5nZXMnIC0tcnVuPScxLTIgNS02JyA8PC1cXEVPRiAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2CisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJZG9uZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi10d28tcmFuZ2VzIDw8LVxcRU9GCisJPiBvayAxIC0gcGFzc2luZyB0ZXN0ICMxCisJPiBvayAyIC0gcGFzc2luZyB0ZXN0ICMyCisJPiBvayAzICMgc2tpcCBwYXNzaW5nIHRlc3QgIzMgKC0tcnVuKQorCT4gb2sgNCAjIHNraXAgcGFzc2luZyB0ZXN0ICM0ICgtLXJ1bikKKwk+IG9rIDUgLSBwYXNzaW5nIHRlc3QgIzUKKwk+IG9rIDYgLSBwYXNzaW5nIHRlc3QgIzYKKwk+ICMgcGFzc2VkIGFsbCA2IHRlc3QocykKKwk+IDEuLjYKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gd2l0aCBhIGxlZnQgb3BlbiByYW5nZScgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBydW4tbGVmdC1vcGVuLXJhbmdlIFwKKwkJJy0tcnVuIHdpdGggYSBsZWZ0IG9wZW4gcmFuZ2UnIC0tcnVuPSctMycgPDwtXFxFT0YgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCWRvbmUKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBydW4tbGVmdC1vcGVuLXJhbmdlIDw8LVxcRU9GCisJPiBvayAxIC0gcGFzc2luZyB0ZXN0ICMxCisJPiBvayAyIC0gcGFzc2luZyB0ZXN0ICMyCisJPiBvayAzIC0gcGFzc2luZyB0ZXN0ICMzCisJPiBvayA0ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzQgKC0tcnVuKQorCT4gb2sgNSAjIHNraXAgcGFzc2luZyB0ZXN0ICM1ICgtLXJ1bikKKwk+IG9rIDYgIyBza2lwIHBhc3NpbmcgdGVzdCAjNiAoLS1ydW4pCisJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJPiAxLi42CisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIHdpdGggYSByaWdodCBvcGVuIHJhbmdlJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1yaWdodC1vcGVuLXJhbmdlIFwKKwkJJy0tcnVuIHdpdGggYSByaWdodCBvcGVuIHJhbmdlJyAtLXJ1bj0nNC0nIDw8LVxcRU9GICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwlkb25lCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLXJpZ2h0LW9wZW4tcmFuZ2UgPDwtXFxFT0YKKwk+IG9rIDEgIyBza2lwIHBhc3NpbmcgdGVzdCAjMSAoLS1ydW4pCisJPiBvayAyICMgc2tpcCBwYXNzaW5nIHRlc3QgIzIgKC0tcnVuKQorCT4gb2sgMyAjIHNraXAgcGFzc2luZyB0ZXN0ICMzICgtLXJ1bikKKwk+IG9rIDQgLSBwYXNzaW5nIHRlc3QgIzQKKwk+IG9rIDUgLSBwYXNzaW5nIHRlc3QgIzUKKwk+IG9rIDYgLSBwYXNzaW5nIHRlc3QgIzYKKwk+ICMgcGFzc2VkIGFsbCA2IHRlc3QocykKKwk+IDEuLjYKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gd2l0aCBiYXNpYyBuZWdhdGlvbicgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBydW4tYmFzaWMtbmVnIFwKKwkJJy0tcnVuIHdpdGggYmFzaWMgbmVnYXRpb24nIC0tcnVuPSciJyEzJyInIDw8LVxcRU9GICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwlkb25lCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLWJhc2ljLW5lZyA8PC1cXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdCAjMQorCT4gb2sgMiAtIHBhc3NpbmcgdGVzdCAjMgorCT4gb2sgMyAjIHNraXAgcGFzc2luZyB0ZXN0ICMzICgtLXJ1bikKKwk+IG9rIDQgLSBwYXNzaW5nIHRlc3QgIzQKKwk+IG9rIDUgLSBwYXNzaW5nIHRlc3QgIzUKKwk+IG9rIDYgLSBwYXNzaW5nIHRlc3QgIzYKKwk+ICMgcGFzc2VkIGFsbCA2IHRlc3QocykKKwk+IDEuLjYKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gd2l0aCB0d28gbmVnYXRpb25zJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi10d28tbmVnIFwKKwkJJy0tcnVuIHdpdGggdHdvIG5lZ2F0aW9ucycgLS1ydW49JyInITMgITYnIicgPDwtXFxFT0YgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCWRvbmUKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBydW4tdHdvLW5lZyA8PC1cXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdCAjMQorCT4gb2sgMiAtIHBhc3NpbmcgdGVzdCAjMgorCT4gb2sgMyAjIHNraXAgcGFzc2luZyB0ZXN0ICMzICgtLXJ1bikKKwk+IG9rIDQgLSBwYXNzaW5nIHRlc3QgIzQKKwk+IG9rIDUgLSBwYXNzaW5nIHRlc3QgIzUKKwk+IG9rIDYgIyBza2lwIHBhc3NpbmcgdGVzdCAjNiAoLS1ydW4pCisJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJPiAxLi42CisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIGEgcmFuZ2UgYW5kIG5lZ2F0aW9uJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1yYW5nZS1hbmQtbmVnIFwKKwkJJy0tcnVuIGEgcmFuZ2UgYW5kIG5lZ2F0aW9uJyAtLXJ1bj0nIictNCAhMiciJyA8PC1cXEVPRiAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2CisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJZG9uZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1yYW5nZS1hbmQtbmVnIDw8LVxcRU9GCisJPiBvayAxIC0gcGFzc2luZyB0ZXN0ICMxCisJPiBvayAyICMgc2tpcCBwYXNzaW5nIHRlc3QgIzIgKC0tcnVuKQorCT4gb2sgMyAtIHBhc3NpbmcgdGVzdCAjMworCT4gb2sgNCAtIHBhc3NpbmcgdGVzdCAjNAorCT4gb2sgNSAjIHNraXAgcGFzc2luZyB0ZXN0ICM1ICgtLXJ1bikKKwk+IG9rIDYgIyBza2lwIHBhc3NpbmcgdGVzdCAjNiAoLS1ydW4pCisJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJPiAxLi42CisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIHJhbmdlIG5lZ2F0aW9uJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1yYW5nZS1uZWcgXAorCQknLS1ydW4gcmFuZ2UgbmVnYXRpb24nIC0tcnVuPSciJyExLTMnIicgPDwtXFxFT0YgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCWRvbmUKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBydW4tcmFuZ2UtbmVnIDw8LVxcRU9GCisJPiBvayAxICMgc2tpcCBwYXNzaW5nIHRlc3QgIzEgKC0tcnVuKQorCT4gb2sgMiAjIHNraXAgcGFzc2luZyB0ZXN0ICMyICgtLXJ1bikKKwk+IG9rIDMgIyBza2lwIHBhc3NpbmcgdGVzdCAjMyAoLS1ydW4pCisJPiBvayA0IC0gcGFzc2luZyB0ZXN0ICM0CisJPiBvayA1IC0gcGFzc2luZyB0ZXN0ICM1CisJPiBvayA2IC0gcGFzc2luZyB0ZXN0ICM2CisJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJPiAxLi42CisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIGluY2x1ZGUsIGV4Y2x1ZGUgYW5kIGluY2x1ZGUnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLWluYy1uZWctaW5jIFwKKwkJJy0tcnVuIGluY2x1ZGUsIGV4Y2x1ZGUgYW5kIGluY2x1ZGUnIFwKKwkJLS1ydW49JyInMS01ICExLTMgMiciJyA8PC1cXEVPRiAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2CisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJZG9uZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1pbmMtbmVnLWluYyA8PC1cXEVPRgorCT4gb2sgMSAjIHNraXAgcGFzc2luZyB0ZXN0ICMxICgtLXJ1bikKKwk+IG9rIDIgLSBwYXNzaW5nIHRlc3QgIzIKKwk+IG9rIDMgIyBza2lwIHBhc3NpbmcgdGVzdCAjMyAoLS1ydW4pCisJPiBvayA0IC0gcGFzc2luZyB0ZXN0ICM0CisJPiBvayA1IC0gcGFzc2luZyB0ZXN0ICM1CisJPiBvayA2ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzYgKC0tcnVuKQorCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCT4gMS4uNgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biBpbmNsdWRlLCBleGNsdWRlIGFuZCBpbmNsdWRlLCBjb21tYSBzZXBhcmF0ZWQnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLWluYy1uZWctaW5jLWNvbW1hIFwKKwkJJy0tcnVuIGluY2x1ZGUsIGV4Y2x1ZGUgYW5kIGluY2x1ZGUsIGNvbW1hIHNlcGFyYXRlZCcgXAorCQktLXJ1bj0xLTUsXCExLTMsMiA8PC1cXEVPRiAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2CisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJZG9uZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1pbmMtbmVnLWluYy1jb21tYSA8PC1cXEVPRgorCT4gb2sgMSAjIHNraXAgcGFzc2luZyB0ZXN0ICMxICgtLXJ1bikKKwk+IG9rIDIgLSBwYXNzaW5nIHRlc3QgIzIKKwk+IG9rIDMgIyBza2lwIHBhc3NpbmcgdGVzdCAjMyAoLS1ydW4pCisJPiBvayA0IC0gcGFzc2luZyB0ZXN0ICM0CisJPiBvayA1IC0gcGFzc2luZyB0ZXN0ICM1CisJPiBvayA2ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzYgKC0tcnVuKQorCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCT4gMS4uNgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biBleGNsdWRlIGFuZCBpbmNsdWRlJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1uZWctaW5jIFwKKwkJJy0tcnVuIGV4Y2x1ZGUgYW5kIGluY2x1ZGUnIFwKKwkJLS1ydW49JyInITMtIDUnIicgPDwtXFxFT0YgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCWRvbmUKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBydW4tbmVnLWluYyA8PC1cXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdCAjMQorCT4gb2sgMiAtIHBhc3NpbmcgdGVzdCAjMgorCT4gb2sgMyAjIHNraXAgcGFzc2luZyB0ZXN0ICMzICgtLXJ1bikKKwk+IG9rIDQgIyBza2lwIHBhc3NpbmcgdGVzdCAjNCAoLS1ydW4pCisJPiBvayA1IC0gcGFzc2luZyB0ZXN0ICM1CisJPiBvayA2ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzYgKC0tcnVuKQorCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCT4gMS4uNgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biBlbXB0eSBzZWxlY3RvcnMnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLWVtcHR5LXNlbCBcCisJCSctLXJ1biBlbXB0eSBzZWxlY3RvcnMnIFwKKwkJLS1ydW49JzEsLDMsLCw1JyA8PC1cXEVPRiAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2CisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJZG9uZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1lbXB0eS1zZWwgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwk+IG9rIDIgIyBza2lwIHBhc3NpbmcgdGVzdCAjMiAoLS1ydW4pCisJPiBvayAzIC0gcGFzc2luZyB0ZXN0ICMzCisJPiBvayA0ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzQgKC0tcnVuKQorCT4gb2sgNSAtIHBhc3NpbmcgdGVzdCAjNQorCT4gb2sgNiAjIHNraXAgcGFzc2luZyB0ZXN0ICM2ICgtLXJ1bikKKwk+ICMgcGFzc2VkIGFsbCA2IHRlc3QocykKKwk+IDEuLjYKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gaW52YWxpZCByYW5nZSBzdGFydCcgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdF9lcnIgcnVuLWludi1yYW5nZS1zdGFydCBcCisJCSctLXJ1biBpbnZhbGlkIHJhbmdlIHN0YXJ0JyBcCisJCS0tcnVuPSdhLTUnIDw8LVxcRU9GICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjMVwiICd0cnVlJworCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0X2VyciBydW4taW52LXJhbmdlLXN0YXJ0IFwKKwkJPDwtXFxFT0ZfT1VUIDM8PC1cXEVPRl9FUlIKKwk+IEZBVEFMOiBVbmV4cGVjdGVkIGV4aXQgd2l0aCBjb2RlIDEKKwlFT0ZfT1VUCisJPiBlcnJvcjogLS1ydW46IGludmFsaWQgbm9uLW51bWVyaWMgaW4gcmFuZ2Ugc3RhcnQ6ICdhLTUnCisJRU9GX0VSUgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biBpbnZhbGlkIHJhbmdlIGVuZCcgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdF9lcnIgcnVuLWludi1yYW5nZS1lbmQgXAorCQknLS1ydW4gaW52YWxpZCByYW5nZSBlbmQnIFwKKwkJLS1ydW49JzEteicgPDwtXFxFT0YgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICMxXCIgJ3RydWUnCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3RfZXJyIHJ1bi1pbnYtcmFuZ2UtZW5kIFwKKwkJPDwtXFxFT0ZfT1VUIDM8PC1cXEVPRl9FUlIKKwk+IEZBVEFMOiBVbmV4cGVjdGVkIGV4aXQgd2l0aCBjb2RlIDEKKwlFT0ZfT1VUCisJPiBlcnJvcjogLS1ydW46IGludmFsaWQgbm9uLW51bWVyaWMgaW4gcmFuZ2UgZW5kOiAnMS16JworCUVPRl9FUlIKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gaW52YWxpZCBzZWxlY3RvcicgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdF9lcnIgcnVuLWludi1zZWxlY3RvciBcCisJCSctLXJ1biBpbnZhbGlkIHNlbGVjdG9yJyBcCisJCS0tcnVuPScxPycgPDwtXFxFT0YgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICMxXCIgJ3RydWUnCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3RfZXJyIHJ1bi1pbnYtc2VsZWN0b3IgXAorCQk8PC1cXEVPRl9PVVQgMzw8LVxcRU9GX0VSUgorCT4gRkFUQUw6IFVuZXhwZWN0ZWQgZXhpdCB3aXRoIGNvZGUgMQorCUVPRl9PVVQKKwk+IGVycm9yOiAtLXJ1bjogaW52YWxpZCBub24tbnVtZXJpYyBpbiB0ZXN0IHNlbGVjdG9yOiAnMT8nCisJRU9GX0VSUgorIgorCisKK3Rlc3Rfc2V0X3ByZXJlcSBIQVZFSVQKK2hhdmVpdD1ubwordGVzdF9leHBlY3Rfc3VjY2VzcyBIQVZFSVQgJ3Rlc3QgcnVucyBpZiBwcmVyZXF1aXNpdGUgaXMgc2F0aXNmaWVkJyAnCisJdGVzdF9oYXZlX3ByZXJlcSBIQVZFSVQgJiYKKwloYXZlaXQ9eWVzCisnCitkb250aGF2ZWl0PXllcwordGVzdF9leHBlY3Rfc3VjY2VzcyBET05USEFWRUlUICd1bm1ldCBwcmVyZXF1aXNpdGUgY2F1c2VzIHRlc3QgdG8gYmUgc2tpcHBlZCcgJworCWRvbnRoYXZlaXQ9bm8KKycKK2lmIHRlc3QgLXogIiRHSVRfVEVTVF9GQUlMX1BSRVJFUVNfSU5URVJOQUwiIC1hICRoYXZlaXQkZG9udGhhdmVpdCAhPSB5ZXN5ZXMKK3RoZW4KKwlzYXkgImJ1ZyBpbiB0ZXN0IGZyYW1ld29yazogcHJlcmVxdWlzaXRlIHRhZ3MgZG8gbm90IHdvcmsgcmVsaWFibHkiCisJZXhpdCAxCitmaQorCit0ZXN0X3NldF9wcmVyZXEgSEFWRVRISVMKK2hhdmVpdD1ubwordGVzdF9leHBlY3Rfc3VjY2VzcyBIQVZFVEhJUyxIQVZFSVQgJ3Rlc3QgcnVucyBpZiBwcmVyZXF1aXNpdGVzIGFyZSBzYXRpc2ZpZWQnICcKKwl0ZXN0X2hhdmVfcHJlcmVxIEhBVkVJVCAmJgorCXRlc3RfaGF2ZV9wcmVyZXEgSEFWRVRISVMgJiYKKwloYXZlaXQ9eWVzCisnCitkb250aGF2ZWl0PXllcwordGVzdF9leHBlY3Rfc3VjY2VzcyBIQVZFSVQsRE9OVEhBVkVJVCAndW5tZXQgcHJlcmVxdWlzaXRlcyBjYXVzZXMgdGVzdCB0byBiZSBza2lwcGVkJyAnCisJZG9udGhhdmVpdD1ubworJworZG9udGhhdmVpdGVpdGhlcj15ZXMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRE9OVEhBVkVJVCxIQVZFSVQgJ3VubWV0IHByZXJlcXVpc2l0ZXMgY2F1c2VzIHRlc3QgdG8gYmUgc2tpcHBlZCcgJworCWRvbnRoYXZlaXRlaXRoZXI9bm8KKycKK2lmIHRlc3QgLXogIiRHSVRfVEVTVF9GQUlMX1BSRVJFUVNfSU5URVJOQUwiIC1hICRoYXZlaXQkZG9udGhhdmVpdCRkb250aGF2ZWl0ZWl0aGVyICE9IHllc3llc3llcwordGhlbgorCXNheSAiYnVnIGluIHRlc3QgZnJhbWV3b3JrOiBtdWx0aXBsZSBwcmVyZXF1aXNpdGUgdGFncyBkbyBub3Qgd29yayByZWxpYWJseSIKKwlleGl0IDEKK2ZpCisKK3Rlc3RfbGF6eV9wcmVyZXEgTEFaWV9UUlVFIHRydWUKK2hhdmV0cnVlPW5vCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExBWllfVFJVRSAndGVzdCBydW5zIGlmIGxhenkgcHJlcmVxIGlzIHNhdGlzZmllZCcgJworCWhhdmV0cnVlPXllcworJworZG9udGhhdmV0cnVlPXllcwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTEFaWV9UUlVFICdtaXNzaW5nIGxhenkgcHJlcmVxcyBza2lwIHRlc3RzJyAnCisJZG9udGhhdmV0cnVlPW5vCisnCisKK2lmIHRlc3QgLXogIiRHSVRfVEVTVF9GQUlMX1BSRVJFUVNfSU5URVJOQUwiIC1hICIkaGF2ZXRydWUkZG9udGhhdmV0cnVlIiAhPSB5ZXN5ZXMKK3RoZW4KKwlzYXkgJ2J1ZyBpbiB0ZXN0IGZyYW1ld29yazogbGF6eSBwcmVyZXF1aXNpdGVzIGRvIG5vdCB3b3JrJworCWV4aXQgMQorZmkKKwordGVzdF9sYXp5X3ByZXJlcSBMQVpZX0ZBTFNFIGZhbHNlCitub3RoYXZlZmFsc2U9bm8KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIUxBWllfRkFMU0UgJ25lZ2F0aXZlIGxhenkgcHJlcmVxcyBjaGVja2VkJyAnCisJbm90aGF2ZWZhbHNlPXllcworJworaGF2ZWZhbHNlPXllcwordGVzdF9leHBlY3Rfc3VjY2VzcyBMQVpZX0ZBTFNFICdtaXNzaW5nIG5lZ2F0aXZlIGxhenkgcHJlcmVxcyB3aWxsIHNraXAnICcKKwloYXZlZmFsc2U9bm8KKycKKworaWYgdGVzdCAteiAiJEdJVF9URVNUX0ZBSUxfUFJFUkVRU19JTlRFUk5BTCIgLWEgIiRub3RoYXZlZmFsc2UkaGF2ZWZhbHNlIiAhPSB5ZXN5ZXMKK3RoZW4KKwlzYXkgJ2J1ZyBpbiB0ZXN0IGZyYW1ld29yazogbmVnYXRpdmUgbGF6eSBwcmVyZXF1aXNpdGVzIGRvIG5vdCB3b3JrJworCWV4aXQgMQorZmkKKworY2xlYW49bm8KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3RzIGNsZWFuIHVwIGFmdGVyIHRoZW1zZWx2ZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW49eWVzCisnCisKK2lmIHRlc3QgLXogIiRHSVRfVEVTVF9GQUlMX1BSRVJFUVNfSU5URVJOQUwiIC1hICRjbGVhbiAhPSB5ZXMKK3RoZW4KKwlzYXkgImJ1ZyBpbiB0ZXN0IGZyYW1ld29yazogYmFzaWMgY2xlYW51cCBjb21tYW5kIGRvZXMgbm90IHdvcmsgcmVsaWFibHkiCisJZXhpdCAxCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXp5IHByZXJlcXMgZG8gbm90IHR1cm4gb2ZmIHRyYWNpbmcnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgbGF6eS1wcmVyZXEtYW5kLXRyYWNpbmcgXAorCQknbGF6eSBwcmVyZXFzIGFuZCAteCcgLXYgLXggPDwtXFxFT0YgJiYKKwl0ZXN0X2xhenlfcHJlcmVxIExBWlkgdHJ1ZQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBsYXp5ICd0ZXN0X2hhdmVfcHJlcmVxIExBWlkgJiYgZWNobyB0cmFjZScKKworCXRlc3RfZG9uZQorCUVPRgorCisJZ3JlcCAnZWNobyB0cmFjZScgbGF6eS1wcmVyZXEtYW5kLXRyYWNpbmcvZXJyCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3RzIGNsZWFuIHVwIGV2ZW4gb24gZmFpbHVyZXMnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3RfZXJyIFwKKwkJZmFpbGluZy1jbGVhbnVwICdGYWlsaW5nIHRlc3RzIHdpdGggY2xlYW51cCBjb21tYW5kcycgPDwtXFxFT0YgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0cyBjbGVhbiB1cCBldmVuIGFmdGVyIGEgZmFpbHVyZScgJworCQl0b3VjaCBjbGVhbi1hZnRlci1mYWlsdXJlICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCBybSBjbGVhbi1hZnRlci1mYWlsdXJlICYmCisJCShleGl0IDEpCisJJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWx1cmUgdG8gY2xlYW4gdXAgY2F1c2VzIHRoZSB0ZXN0IHRvIGZhaWwnICcKKwkJdGVzdF93aGVuX2ZpbmlzaGVkIFwiKGV4aXQgMilcIgorCScKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBmYWlsaW5nLWNsZWFudXAgPDwtXFxFT0YKKwk+IG5vdCBvayAxIC0gdGVzdHMgY2xlYW4gdXAgZXZlbiBhZnRlciBhIGZhaWx1cmUKKwk+ICMJWgorCT4gIwl0b3VjaCBjbGVhbi1hZnRlci1mYWlsdXJlICYmCisJPiAjCXRlc3Rfd2hlbl9maW5pc2hlZCBybSBjbGVhbi1hZnRlci1mYWlsdXJlICYmCisJPiAjCShleGl0IDEpCisJPiAjCVoKKwk+IG5vdCBvayAyIC0gZmFpbHVyZSB0byBjbGVhbiB1cCBjYXVzZXMgdGhlIHRlc3QgdG8gZmFpbAorCT4gIwlaCisJPiAjCXRlc3Rfd2hlbl9maW5pc2hlZCBcIihleGl0IDIpXCIKKwk+ICMJWgorCT4gIyBmYWlsZWQgMiBhbW9uZyAyIHRlc3QocykKKwk+IDEuLjIKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdF9hdGV4aXQgaXMgcnVuJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0X2VyciBcCisJCWF0ZXhpdC1jbGVhbnVwICdSdW4gYXRleGl0IGNvbW1hbmRzJyAtaSA8PC1cXEVPRiAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3RzIGNsZWFuIHVwIGV2ZW4gYWZ0ZXIgYSBmYWlsdXJlJyAnCisJCT4gLi4vLi4vY2xlYW4tYXRleGl0ICYmCisJCXRlc3RfYXRleGl0IHJtIC4uLy4uL2NsZWFuLWF0ZXhpdCAmJgorCQk+IC4uLy4uL2Fsc28tY2xlYW4tYXRleGl0ICYmCisJCXRlc3RfYXRleGl0IHJtIC4uLy4uL2Fsc28tY2xlYW4tYXRleGl0ICYmCisJCT4gLi4vLi4vZG9udC1jbGVhbi1hdGV4aXQgJiYKKwkJKGV4aXQgMSkKKwknCisJdGVzdF9kb25lCisJRU9GCisJdGVzdF9wYXRoX2lzX2ZpbGUgZG9udC1jbGVhbi1hdGV4aXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBjbGVhbi1hdGV4aXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhbHNvLWNsZWFuLWF0ZXhpdAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0X29pZCBzZXR1cCcgJworCXRlc3Rfb2lkX2luaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdF9vaWQgcHJvdmlkZXMgc2FuZSBpbmZvIGJ5IGRlZmF1bHQnICcKKwl0ZXN0X29pZCB6ZXJvID5hY3R1YWwgJiYKKwlncmVwICJeMDAqXCQiIGFjdHVhbCAmJgorCXJhd3N6PSIkKHRlc3Rfb2lkIHJhd3N6KSIgJiYKKwloZXhzej0iJCh0ZXN0X29pZCBoZXhzeikiICYmCisJdGVzdCAiJGhleHN6IiAtZXEgJCh3YyAtYyA8YWN0dWFsKSAmJgorCXRlc3QgJCgoICRyYXdzeiAqIDIpKSAtZXEgIiRoZXhzeiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdF9vaWQgY2FuIGxvb2sgdXAgZGF0YSBmb3IgU0hBLTEnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfZGV0ZWN0X2hhc2giICYmCisJdGVzdF9zZXRfaGFzaCBzaGExICYmCisJdGVzdF9vaWQgemVybyA+YWN0dWFsICYmCisJZ3JlcCAiXjAwKlwkIiBhY3R1YWwgJiYKKwlyYXdzej0iJCh0ZXN0X29pZCByYXdzeikiICYmCisJaGV4c3o9IiQodGVzdF9vaWQgaGV4c3opIiAmJgorCXRlc3QgJCh3YyAtYyA8YWN0dWFsKSAtZXEgNDAgJiYKKwl0ZXN0ICIkcmF3c3oiIC1lcSAyMCAmJgorCXRlc3QgIiRoZXhzeiIgLWVxIDQwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Rfb2lkIGNhbiBsb29rIHVwIGRhdGEgZm9yIFNIQS0yNTYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfZGV0ZWN0X2hhc2giICYmCisJdGVzdF9zZXRfaGFzaCBzaGEyNTYgJiYKKwl0ZXN0X29pZCB6ZXJvID5hY3R1YWwgJiYKKwlncmVwICJeMDAqXCQiIGFjdHVhbCAmJgorCXJhd3N6PSIkKHRlc3Rfb2lkIHJhd3N6KSIgJiYKKwloZXhzej0iJCh0ZXN0X29pZCBoZXhzeikiICYmCisJdGVzdCAkKHdjIC1jIDxhY3R1YWwpIC1lcSA2NCAmJgorCXRlc3QgIiRyYXdzeiIgLWVxIDMyICYmCisJdGVzdCAiJGhleHN6IiAtZXEgNjQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdF9ib29sX2VudicgJworCSgKKwkJc2FuZV91bnNldCBlbnZ2YXIgJiYKKworCQl0ZXN0X2Jvb2xfZW52IGVudnZhciB0cnVlICYmCisJCSEgdGVzdF9ib29sX2VudiBlbnZ2YXIgZmFsc2UgJiYKKworCQllbnZ2YXI9ICYmCisJCWV4cG9ydCBlbnZ2YXIgJiYKKwkJISB0ZXN0X2Jvb2xfZW52IGVudnZhciB0cnVlICYmCisJCSEgdGVzdF9ib29sX2VudiBlbnZ2YXIgZmFsc2UgJiYKKworCQllbnZ2YXI9dHJ1ZSAmJgorCQl0ZXN0X2Jvb2xfZW52IGVudnZhciB0cnVlICYmCisJCXRlc3RfYm9vbF9lbnYgZW52dmFyIGZhbHNlICYmCisKKwkJZW52dmFyPWZhbHNlICYmCisJCSEgdGVzdF9ib29sX2VudiBlbnZ2YXIgdHJ1ZSAmJgorCQkhIHRlc3RfYm9vbF9lbnYgZW52dmFyIGZhbHNlICYmCisKKwkJZW52dmFyPWludmFsaWQgJiYKKwkJIyBXaGVuIGVuY291bnRlcmluZyBhbiBpbnZhbGlkIGJvb2wgdmFsdWUsIHRlc3RfYm9vbF9lbnYKKwkJIyBwcmludHMgaXRzIGVycm9yIG1lc3NhZ2UgdG8gdGhlIG9yaWdpbmFsIHN0ZGVyciBvZiB0aGUKKwkJIyB0ZXN0IHNjcmlwdCwgaGVuY2UgdGhlIHJlZGlyZWN0aW9uIG9mIGZkIDcsIGFuZCBhYm9ydHMKKwkJIyB3aXRoICJleGl0IDEiLCBoZW5jZSB0aGUgc3Vic2hlbGwuCisJCSEgKCB0ZXN0X2Jvb2xfZW52IGVudnZhciB0cnVlICkgNz5lcnIgJiYKKwkJZ3JlcCAiZXJyb3I6IHRlc3RfYm9vbF9lbnYgcmVxdWlyZXMgYm9vbCB2YWx1ZXMiIGVyciAmJgorCisJCWVudnZhcj10cnVlICYmCisJCSEgKCB0ZXN0X2Jvb2xfZW52IGVudnZhciBpbnZhbGlkICkgNz5lcnIgJiYKKwkJZ3JlcCAiZXJyb3I6IHRlc3RfYm9vbF9lbnYgcmVxdWlyZXMgYm9vbCB2YWx1ZXMiIGVycgorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCYXNpY3Mgb2YgdGhlIGJhc2ljcworCit0ZXN0X29pZF9jYWNoZSA8PFxFT0YKK3BhdGgwZiBzaGExOmY4NzI5MGY4ZWIyY2JiZWE3ODU3MjE0NDU5YTA3Mzk5MjdlYWIxNTQKK3BhdGgwZiBzaGEyNTY6NjM4MTA2YWY3YzM4YmUwNTZmMzIxMmNiZDdhYzY1YmMxYmFjNzRmNDIwY2E1YTQzNmZmMDA2YTlkMDI1ZDE3ZAorCitwYXRoMHMgc2hhMToxNWE5ODQzM2FlMzMxMTRiMDg1ZjNlYjNiYjAzYjgzMmIzMTgwYTAxCitwYXRoMHMgc2hhMjU2OjNhMjRjYzUzY2Y2OGVkZGRhYzQ5MGJiZjk0YTQxOGE1MjkzMjEzMDU0MTM2MWY2ODVkZjY4NWU0MWRkNmMzNjMKKworcGF0aDJmIHNoYTE6M2ZlZmY5NDllZDAwYTYyZDlmN2FmOTdjMTVjZDhhMzA1OTVlN2FjNworcGF0aDJmIHNoYTI1NjoyYTdmMzY1NzFjNmZkYmFmMGUzZjYyNzUxYTBiMjVhM2Y0YzU0ZDJkMTEzN2IzZjRhZjljYjc5NGJiNDk4ZTVmCisKK3BhdGgycyBzaGExOmQ4Y2UxNjFhZGRjNTE3Mzg2N2EzYzNjNzMwOTI0Mzg4ZGFlZGJjMzgKK3BhdGgycyBzaGEyNTY6MThmZDYxMWI3ODdjMmU5MzhkZGNjMjQ4ZmFiZTRkNjZhMTUwZjkzNjQ3NjNlOWVjMTMzZGQwMWQ1YmI3YzY1YQorCitwYXRoMmQgc2hhMTo1OGEwOWMyM2UyY2ExNTIxOTNmMjc4NmUwNjk4NmI3YjY3MTJiZGJlCitwYXRoMmQgc2hhMjU2OjAwZTRiMzJiOTZlN2UzZDY1ZDc5MTEyZGNiZWE1MzIzOGEyMjcxNWY4OTY5MzNhNjJiODExMzc3ZTI2NTBjMTcKKworcGF0aDNmIHNoYTE6MGFhMzRjYWU2OGQwODc4NTc4YWQxMTljODZjYTJiNWVkNWIyODM3NgorcGF0aDNmIHNoYTI1NjowOWY1ODYxNmI5NTFiZDU3MWI4Y2I5ZGM3NmQzNzJmYmIwOWFiOTlkYjIzOTNmNWFiMzE4OWQyNmM0NTA5OWFkCisKK3BhdGgzcyBzaGExOjg1OTkxMDM5NjliNDNhZmY3ZTQzMGVmZWE3OWNhNDYzNjQ2Njc5NGYKK3BhdGgzcyBzaGEyNTY6ZmNlMWFlZDA4N2MwNTMzMDZmM2Y3NGMzMmMxYTgzOGM2NjJiYmM0NTUxYTdhYzI0MjBmNWQ2ZWIwNjEzNzRkMAorCitwYXRoM2Qgc2hhMToyMWFlODI2OWNhY2JlNTdhZTA5MTM4ZGNjM2EyODg3ZjkwNGQwMmIzCitwYXRoM2Qgc2hhMjU2OjliNjA0OTdiZTk1OWNiODMwYmYzZjBkYzgyYmNjOWFkOWU5MjVhMjRlNDgwODM3YWRlNDZiMjI5NWU0N2VmZTEKKworc3VicDNmIHNoYTE6MDBmYjU5MDhjYjk3YzI1NjRhOTc4M2MwYzY0MDg3MzMzYjNiNDY0Zgorc3VicDNmIHNoYTI1NjphMWE5ZTE2OTk4Yzk4ODQ1M2YxODMxM2QxMDM3NWVlMWQwZGRlZmU3NTdlNzEwZGNhZTBkNjZhYTFlMGM1OGIzCisKK3N1YnAzcyBzaGExOjY2NDlhMWViZTllOWYxYzU1M2I2NmY1YTZlNzQxMzZhMDdjY2M1N2MKK3N1YnAzcyBzaGEyNTY6ODE3NTlkOWY1ZTkzYzY1NDZlY2ZjYWRiNTYwYzFmZjA1NzMxNGIwOWY5M2ZlOGVjMDZlMmQ4NjEwZDM0ZWYxMAorCitzdWJwM2Qgc2hhMTozYzVlNTM5OWYzYTMzM2VkZGVjY2U3YTliOTQ2NWI2M2Y2NWY1MWUyCitzdWJwM2Qgc2hhMjU2Ojc2YjRlZjQ4MmQ0ZmExYzc1NDM5MDM0NGNmMzg1MWM3Zjg4M2IyN2NmOWJjOTk5YzY1NDc5MjhjNDZhZWFmYjcKKworcm9vdCBzaGExOjA4NzcwNGE5NmJhZjFjMmQxYzg2OWE4YjA4NDQ4MWUxMjFjODhiNWIKK3Jvb3Qgc2hhMjU2Ojk0ODFiNTJhYmFiMWIyZmZlZWRiZjlkZTYzY2U0MjJiOTI5ZjE3OWMxYjk4ZmY3YmVlNWY4ZjFiYzA3MTA3NTEKKworc2ltcGxldHJlZSBzaGExOjdiYjk0MzU1OWEzMDViZGQ2YmRlZTJjZWY2ZTVkZjI0MTNjM2QzMGEKK3NpbXBsZXRyZWUgc2hhMjU2OjE3MTBjMDdhNmM4NmY5YTNjNzM3NjM2NGRmMDRjNDdlZTM5ZTVhNWUyMjFmY2RkODRiNzQzYmM5YmI3ZTJiYzUKK0VPRgorCisjIHVwZGF0aW5nIGEgbmV3IGZpbGUgd2l0aG91dCAtLWFkZCBzaG91bGQgZmFpbC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB1cGRhdGUtaW5kZXggd2l0aG91dCAtLWFkZCBzaG91bGQgZmFpbCBhZGRpbmcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IHNob3VsZC1iZS1lbXB0eQorJworCisjIGFuZCB3aXRoIC0tYWRkIGl0IHNob3VsZCBzdWNjZWVkLCBldmVuIGlmIGl0IGlzIGVtcHR5IChpdCB1c2VkIHRvIGZhaWwpLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHVwZGF0ZS1pbmRleCB3aXRoIC0tYWRkIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBzaG91bGQtYmUtZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyB0cmVlIG91dCB3aXRoIGdpdCB3cml0ZS10cmVlJyAnCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKQorJworCisjIHdlIGtub3cgdGhlIHNoYXBlIGFuZCBjb250ZW50cyBvZiB0aGUgdHJlZSBhbmQga25vdyB0aGUgb2JqZWN0IElEIGZvciBpdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIG9iamVjdCBJRCBvZiBhIGtub3duIHRyZWUnICcKKwl0ZXN0ICIkdHJlZSIgPSAiJCh0ZXN0X29pZCBzaW1wbGV0cmVlKSIKKyAgICAnCisKKyMgUmVtb3ZpbmcgcGF0aHMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgdXBkYXRlLWluZGV4IHdpdGhvdXQgLS1yZW1vdmUgc2hvdWxkIGZhaWwgcmVtb3ZpbmcnICcKKwlybSAtZiBzaG91bGQtYmUtZW1wdHkgZnVsbC1vZi1kaXJlY3RvcmllcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggc2hvdWxkLWJlLWVtcHR5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB1cGRhdGUtaW5kZXggd2l0aCAtLXJlbW92ZSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIHNob3VsZC1iZS1lbXB0eQorJworCisjIEVtcHR5IHRyZWUgY2FuIGJlIHdyaXR0ZW4gd2l0aCByZWNlbnQgd3JpdGUtdHJlZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB3cml0ZS10cmVlIHNob3VsZCBiZSBhYmxlIHRvIHdyaXRlIGFuIGVtcHR5IHRyZWUnICcKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIG9iamVjdCBJRCBvZiBhIGtub3duIHRyZWUnICcKKwl0ZXN0ICIkdHJlZSIgPSAkRU1QVFlfVFJFRQorJworCisjIFZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRpbmcgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIHdpdGggZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCcgJworCW1rZGlyIHBhdGgyIHBhdGgzIHBhdGgzL3N1YnAzICYmCisJcGF0aHM9InBhdGgwIHBhdGgyL2ZpbGUyIHBhdGgzL2ZpbGUzIHBhdGgzL3N1YnAzL2ZpbGUzIiAmJgorCSgKKwkJZm9yIHAgaW4gJHBhdGhzCisJCWRvCisJCQllY2hvICJoZWxsbyAkcCIgPiRwIHx8IGV4aXQgMQorCQkJdGVzdF9sbl9zX2FkZCAiaGVsbG8gJHAiICR7cH1zeW0gfHwgZXhpdCAxCisJCWRvbmUKKwkpICYmCisJZmluZCBwYXRoKiAhIC10eXBlIGQgLXByaW50IHwgeGFyZ3MgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZAorJworCisjIFNob3cgdGhlbSBhbmQgc2VlIHRoYXQgbWF0Y2hlcyB3aGF0IHdlIGV4cGVjdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgc3RhZ2Ugd2l0aCBnaXQgbHMtZmlsZXMgLS1zdGFnZScgJworCWdpdCBscy1maWxlcyAtLXN0YWdlID5jdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIGdpdCBscy1maWxlcyBvdXRwdXQgZm9yIGEga25vd24gdHJlZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJMTAwNjQ0ICQodGVzdF9vaWQgcGF0aDBmKSAwCXBhdGgwCisJMTIwMDAwICQodGVzdF9vaWQgcGF0aDBzKSAwCXBhdGgwc3ltCisJMTAwNjQ0ICQodGVzdF9vaWQgcGF0aDJmKSAwCXBhdGgyL2ZpbGUyCisJMTIwMDAwICQodGVzdF9vaWQgcGF0aDJzKSAwCXBhdGgyL2ZpbGUyc3ltCisJMTAwNjQ0ICQodGVzdF9vaWQgcGF0aDNmKSAwCXBhdGgzL2ZpbGUzCisJMTIwMDAwICQodGVzdF9vaWQgcGF0aDNzKSAwCXBhdGgzL2ZpbGUzc3ltCisJMTAwNjQ0ICQodGVzdF9vaWQgc3VicDNmKSAwCXBhdGgzL3N1YnAzL2ZpbGUzCisJMTIwMDAwICQodGVzdF9vaWQgc3VicDNzKSAwCXBhdGgzL3N1YnAzL2ZpbGUzc3ltCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0aW5nIHRyZWUgb3V0IHdpdGggZ2l0IHdyaXRlLXRyZWUnICcKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIG9iamVjdCBJRCBmb3IgYSBrbm93biB0cmVlJyAnCisJdGVzdCAiJHRyZWUiID0gIiQodGVzdF9vaWQgcm9vdCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgdHJlZSB3aXRoIGdpdCBscy10cmVlJyAnCisgICAgZ2l0IGxzLXRyZWUgJHRyZWUgPmN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLXRyZWUgb3V0cHV0IGZvciBhIGtub3duIHRyZWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCTEwMDY0NCBibG9iICQodGVzdF9vaWQgcGF0aDBmKQlwYXRoMAorCTEyMDAwMCBibG9iICQodGVzdF9vaWQgcGF0aDBzKQlwYXRoMHN5bQorCTA0MDAwMCB0cmVlICQodGVzdF9vaWQgcGF0aDJkKQlwYXRoMgorCTA0MDAwMCB0cmVlICQodGVzdF9vaWQgcGF0aDNkKQlwYXRoMworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKworIyBUaGlzIGNoYW5nZWQgaW4gbHMtdHJlZSBwYXRoc3BlYyBjaGFuZ2UgLS0gcmVjdXJzaXZlIGRvZXMKKyMgbm90IHNob3cgdHJlZSBub2RlcyBhbnltb3JlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyB0cmVlIHdpdGggZ2l0IGxzLXRyZWUgLXInICcKKwlnaXQgbHMtdHJlZSAtciAkdHJlZSA+Y3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtdHJlZSAtciBvdXRwdXQgZm9yIGEga25vd24gdHJlZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJMTAwNjQ0IGJsb2IgJCh0ZXN0X29pZCBwYXRoMGYpCXBhdGgwCisJMTIwMDAwIGJsb2IgJCh0ZXN0X29pZCBwYXRoMHMpCXBhdGgwc3ltCisJMTAwNjQ0IGJsb2IgJCh0ZXN0X29pZCBwYXRoMmYpCXBhdGgyL2ZpbGUyCisJMTIwMDAwIGJsb2IgJCh0ZXN0X29pZCBwYXRoMnMpCXBhdGgyL2ZpbGUyc3ltCisJMTAwNjQ0IGJsb2IgJCh0ZXN0X29pZCBwYXRoM2YpCXBhdGgzL2ZpbGUzCisJMTIwMDAwIGJsb2IgJCh0ZXN0X29pZCBwYXRoM3MpCXBhdGgzL2ZpbGUzc3ltCisJMTAwNjQ0IGJsb2IgJCh0ZXN0X29pZCBzdWJwM2YpCXBhdGgzL3N1YnAzL2ZpbGUzCisJMTIwMDAwIGJsb2IgJCh0ZXN0X29pZCBzdWJwM3MpCXBhdGgzL3N1YnAzL2ZpbGUzc3ltCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCisjIEJ1dCB3aXRoIC1yIC10IHdlIGNhbiBoYXZlIGJvdGguCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIHRyZWUgd2l0aCBnaXQgbHMtdHJlZSAtciAtdCcgJworCWdpdCBscy10cmVlIC1yIC10ICR0cmVlID5jdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy10cmVlIC1yIG91dHB1dCBmb3IgYSBrbm93biB0cmVlJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIHBhdGgwZikJcGF0aDAKKwkxMjAwMDAgYmxvYiAkKHRlc3Rfb2lkIHBhdGgwcykJcGF0aDBzeW0KKwkwNDAwMDAgdHJlZSAkKHRlc3Rfb2lkIHBhdGgyZCkJcGF0aDIKKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIHBhdGgyZikJcGF0aDIvZmlsZTIKKwkxMjAwMDAgYmxvYiAkKHRlc3Rfb2lkIHBhdGgycykJcGF0aDIvZmlsZTJzeW0KKwkwNDAwMDAgdHJlZSAkKHRlc3Rfb2lkIHBhdGgzZCkJcGF0aDMKKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIHBhdGgzZikJcGF0aDMvZmlsZTMKKwkxMjAwMDAgYmxvYiAkKHRlc3Rfb2lkIHBhdGgzcykJcGF0aDMvZmlsZTNzeW0KKwkwNDAwMDAgdHJlZSAkKHRlc3Rfb2lkIHN1YnAzZCkJcGF0aDMvc3VicDMKKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIHN1YnAzZikJcGF0aDMvc3VicDMvZmlsZTMKKwkxMjAwMDAgYmxvYiAkKHRlc3Rfb2lkIHN1YnAzcykJcGF0aDMvc3VicDMvZmlsZTNzeW0KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRpbmcgcGFydGlhbCB0cmVlIG91dCB3aXRoIGdpdCB3cml0ZS10cmVlIC0tcHJlZml4JyAnCisJcHRyZWU9JChnaXQgd3JpdGUtdHJlZSAtLXByZWZpeD1wYXRoMykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgb2JqZWN0IElEIGZvciBhIGtub3duIHRyZWUnICcKKwl0ZXN0ICIkcHRyZWUiID0gJCh0ZXN0X29pZCBwYXRoM2QpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRpbmcgcGFydGlhbCB0cmVlIG91dCB3aXRoIGdpdCB3cml0ZS10cmVlIC0tcHJlZml4JyAnCisJcHRyZWU9JChnaXQgd3JpdGUtdHJlZSAtLXByZWZpeD1wYXRoMy9zdWJwMykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgb2JqZWN0IElEIGZvciBhIGtub3duIHRyZWUnICcKKwl0ZXN0ICIkcHRyZWUiID0gJCh0ZXN0X29pZCBzdWJwM2QpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1dCBpbnZhbGlkIG9iamVjdHMgaW50byB0aGUgaW5kZXgnICcKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJc3VmZml4PSQoZWNobyAkWkVST19PSUQgfCBzZWQgLWUgInMvXi4vLyIpICYmCisJY2F0ID5iYWRvYmplY3RzIDw8LUVPRiAmJgorCTEwMDY0NCBibG9iICQodGVzdF9vaWQgMDAxKQlkaXIvZmlsZTEKKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIDAwMikJZGlyL2ZpbGUyCisJMTAwNjQ0IGJsb2IgJCh0ZXN0X29pZCAwMDMpCWRpci9maWxlMworCTEwMDY0NCBibG9iICQodGVzdF9vaWQgMDA0KQlkaXIvZmlsZTQKKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIDAwNSkJZGlyL2ZpbGU1CisJRU9GCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGJhZG9iamVjdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyB0aGlzIHRyZWUgd2l0aG91dCAtLW1pc3Npbmctb2snICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgd3JpdGUtdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0aW5nIHRoaXMgdHJlZSB3aXRoIC0tbWlzc2luZy1vaycgJworCWdpdCB3cml0ZS10cmVlIC0tbWlzc2luZy1vaworJworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWFkLXRyZWUgZm9sbG93ZWQgYnkgd3JpdGUtdHJlZSBzaG91bGQgYmUgaWRlbXBvdGVudCcgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgcmVhZC10cmVlICR0cmVlICYmCisJdGVzdCAtZiAuZ2l0L2luZGV4ICYmCisJbmV3dHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXRlc3QgIiRuZXd0cmVlIiA9ICIkdHJlZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgZ2l0IGRpZmYtZmlsZXMgb3V0cHV0IGZvciBhIGtub3cgY2FjaGUvd29yayB0cmVlIHN0YXRlJyAnCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCBwYXRoMGYpICRaRVJPX09JRCBNCXBhdGgwCis6MTIwMDAwIDEyMDAwMCAkKHRlc3Rfb2lkIHBhdGgwcykgJFpFUk9fT0lEIE0JcGF0aDBzeW0KKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgcGF0aDJmKSAkWkVST19PSUQgTQlwYXRoMi9maWxlMgorOjEyMDAwMCAxMjAwMDAgJCh0ZXN0X29pZCBwYXRoMnMpICRaRVJPX09JRCBNCXBhdGgyL2ZpbGUyc3ltCis6MTAwNjQ0IDEwMDY0NCAkKHRlc3Rfb2lkIHBhdGgzZikgJFpFUk9fT0lEIE0JcGF0aDMvZmlsZTMKKzoxMjAwMDAgMTIwMDAwICQodGVzdF9vaWQgcGF0aDNzKSAkWkVST19PSUQgTQlwYXRoMy9maWxlM3N5bQorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCBzdWJwM2YpICRaRVJPX09JRCBNCXBhdGgzL3N1YnAzL2ZpbGUzCis6MTIwMDAwIDEyMDAwMCAkKHRlc3Rfb2lkIHN1YnAzcykgJFpFUk9fT0lEIE0JcGF0aDMvc3VicDMvZmlsZTNzeW0KK0VPRgorCWdpdCBkaWZmLWZpbGVzID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGRpZmYgYWZ0ZXIgY2hlY2tvdXQgYW5kIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoJyAnCisJZ2l0IGRpZmYtZmlsZXMgPmN1cnJlbnQgJiYKKwljbXAgLXMgY3VycmVudCAvZGV2L251bGwKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworUD0kKHRlc3Rfb2lkIHJvb3QpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQtdHJlZSByZWNvcmRzIHRoZSBjb3JyZWN0IHRyZWUgaW4gYSBjb21taXQnICcKKwljb21taXQwPSQoZWNobyBOTyB8IGdpdCBjb21taXQtdHJlZSAkUCkgJiYKKwl0cmVlPSQoZ2l0IHNob3cgLS1wcmV0dHk9cmF3ICRjb21taXQwIHwKKwkJIHNlZCAtbiAtZSAicy9edHJlZSAvL3AiIC1lICIvXmF1dGhvciAvcSIpICYmCisJdGVzdCAieiR0cmVlIiA9ICJ6JFAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQtdHJlZSByZWNvcmRzIHRoZSBjb3JyZWN0IHBhcmVudCBpbiBhIGNvbW1pdCcgJworCWNvbW1pdDE9JChlY2hvIE5PIHwgZ2l0IGNvbW1pdC10cmVlICRQIC1wICRjb21taXQwKSAmJgorCXBhcmVudD0kKGdpdCBzaG93IC0tcHJldHR5PXJhdyAkY29tbWl0MSB8CisJCXNlZCAtbiAtZSAicy9ecGFyZW50IC8vcCIgLWUgIi9eYXV0aG9yIC9xIikgJiYKKwl0ZXN0ICJ6JGNvbW1pdDAiID0gInokcGFyZW50IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29tbWl0LXRyZWUgb21pdHMgZHVwbGljYXRlZCBwYXJlbnQgaW4gYSBjb21taXQnICcKKwljb21taXQyPSQoZWNobyBOTyB8IGdpdCBjb21taXQtdHJlZSAkUCAtcCAkY29tbWl0MCAtcCAkY29tbWl0MCkgJiYKKwkgICAgIHBhcmVudD0kKGdpdCBzaG93IC0tcHJldHR5PXJhdyAkY29tbWl0MiB8CisJCXNlZCAtbiAtZSAicy9ecGFyZW50IC8vcCIgLWUgIi9eYXV0aG9yIC9xIiB8CisJCXNvcnQgLXUpICYmCisJdGVzdCAieiRjb21taXQwIiA9ICJ6JHBhcmVudCIgJiYKKwludW1wYXJlbnQ9JChnaXQgc2hvdyAtLXByZXR0eT1yYXcgJGNvbW1pdDIgfAorCQlzZWQgLW4gLWUgInMvXnBhcmVudCAvL3AiIC1lICIvXmF1dGhvciAvcSIgfAorCQl3YyAtbCkgJiYKKwl0ZXN0ICRudW1wYXJlbnQgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCBEL0YgY29uZmxpY3QnICcKKwltdiBwYXRoMCB0bXAgJiYKKwltdiBwYXRoMiBwYXRoMCAmJgorCW12IHRtcCBwYXRoMiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZXBsYWNlIHBhdGgyIHBhdGgwL2ZpbGUyICYmCisJbnVtcGF0aDA9JChnaXQgbHMtZmlsZXMgcGF0aDAgfCB3YyAtbCkgJiYKKwl0ZXN0ICRudW1wYXRoMCA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyeSBsb25nIG5hbWUgaW4gdGhlIGluZGV4IGhhbmRsZWQgc2FuZWx5JyAnCisKKwlhPWEgJiYgIyAxCisJYT0kYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSAmJiAjIDE2CisJYT0kYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSAmJiAjIDI1NgorCWE9JGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEgJiYgIyA0MDk2CisJYT0ke2F9cSAmJgorCisJPnBhdGg0ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoNCAmJgorCSgKKwkJZ2l0IGxzLWZpbGVzIC1zIHBhdGg0IHwKKwkJc2VkIC1lICJzLwkuKi8JLyIgfAorCQl0ciAtZCAiXDAxMiIgJiYKKwkJZWNobyAiJGEiCisJKSB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJbGVuPSQoZ2l0IGxzLWZpbGVzICJhKiIgfCB3YyAtYykgJiYKKwl0ZXN0ICRsZW4gPSA0MDk4CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwMS1pbml0LnNoIGIvdC90MDAwMS1pbml0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFlZGQ1YWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDAxLWluaXQuc2gKQEAgLTAsMCArMSw0NjcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgaW5pdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX2NvbmZpZyAoKSB7CisJaWYgdGVzdCAtZCAiJDEiICYmIHRlc3QgLWYgIiQxL2NvbmZpZyIgJiYgdGVzdCAtZCAiJDEvcmVmcyIKKwl0aGVuCisJCTogaGFwcHkKKwllbHNlCisJCWVjaG8gImV4cGVjdGVkIGEgZGlyZWN0b3J5ICQxLCBhIGZpbGUgJDEvY29uZmlnIGFuZCAkMS9yZWZzIgorCQlyZXR1cm4gMQorCWZpCisKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFBPU0lYUEVSTSAmJiB0ZXN0IC14ICIkMS9jb25maWciCisJdGhlbgorCQllY2hvICIkMS9jb25maWcgaXMgZXhlY3V0YWJsZT8iCisJCXJldHVybiAxCisJZmkKKworCWJhcmU9JChjZCAiJDEiICYmIGdpdCBjb25maWcgLS1ib29sIGNvcmUuYmFyZSkKKwl3b3JrdHJlZT0kKGNkICIkMSIgJiYgZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlKSB8fAorCXdvcmt0cmVlPXVuc2V0CisKKwl0ZXN0ICIkYmFyZSIgPSAiJDIiICYmIHRlc3QgIiR3b3JrdHJlZSIgPSAiJDMiIHx8IHsKKwkJZWNobyAiZXhwZWN0ZWQgYmFyZT0kMiB3b3JrdHJlZT0kMyIKKwkJZWNobyAiICAgICBnb3QgYmFyZT0kYmFyZSB3b3JrdHJlZT0kd29ya3RyZWUiCisJCXJldHVybiAxCisJfQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFpbicgJworCWdpdCBpbml0IHBsYWluICYmCisJY2hlY2tfY29uZmlnIHBsYWluLy5naXQgZmFsc2UgdW5zZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhaW4gbmVzdGVkIGluIGJhcmUnICcKKwkoCisJCWdpdCBpbml0IC0tYmFyZSBiYXJlLWFuY2VzdG9yLmdpdCAmJgorCQljZCBiYXJlLWFuY2VzdG9yLmdpdCAmJgorCQlta2RpciBwbGFpbi1uZXN0ZWQgJiYKKwkJY2QgcGxhaW4tbmVzdGVkICYmCisJCWdpdCBpbml0CisJKSAmJgorCWNoZWNrX2NvbmZpZyBiYXJlLWFuY2VzdG9yLmdpdC9wbGFpbi1uZXN0ZWQvLmdpdCBmYWxzZSB1bnNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFpbiB0aHJvdWdoIGFsaWFzZWQgY29tbWFuZCwgb3V0c2lkZSBhbnkgZ2l0IHJlcG8nICcKKwkoCisJCUhPTUU9JChwd2QpL2FsaWFzLWNvbmZpZyAmJgorCQlleHBvcnQgSE9NRSAmJgorCQlta2RpciBhbGlhcy1jb25maWcgJiYKKwkJZWNobyAiW2FsaWFzXSBhbGlhc2VkaW5pdCA9IGluaXQiID5hbGlhcy1jb25maWcvLmdpdGNvbmZpZyAmJgorCisJCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSQocHdkKSAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKworCQlta2RpciBwbGFpbi1hbGlhc2VkICYmCisJCWNkIHBsYWluLWFsaWFzZWQgJiYKKwkJZ2l0IGFsaWFzZWRpbml0CisJKSAmJgorCWNoZWNrX2NvbmZpZyBwbGFpbi1hbGlhc2VkLy5naXQgZmFsc2UgdW5zZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhaW4gbmVzdGVkIHRocm91Z2ggYWxpYXNlZCBjb21tYW5kJyAnCisJKAorCQlnaXQgaW5pdCBwbGFpbi1hbmNlc3Rvci1hbGlhc2VkICYmCisJCWNkIHBsYWluLWFuY2VzdG9yLWFsaWFzZWQgJiYKKwkJZWNobyAiW2FsaWFzXSBhbGlhc2VkaW5pdCA9IGluaXQiID4+LmdpdC9jb25maWcgJiYKKwkJbWtkaXIgcGxhaW4tbmVzdGVkICYmCisJCWNkIHBsYWluLW5lc3RlZCAmJgorCQlnaXQgYWxpYXNlZGluaXQKKwkpICYmCisJY2hlY2tfY29uZmlnIHBsYWluLWFuY2VzdG9yLWFsaWFzZWQvcGxhaW4tbmVzdGVkLy5naXQgZmFsc2UgdW5zZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhaW4gbmVzdGVkIGluIGJhcmUgdGhyb3VnaCBhbGlhc2VkIGNvbW1hbmQnICcKKwkoCisJCWdpdCBpbml0IC0tYmFyZSBiYXJlLWFuY2VzdG9yLWFsaWFzZWQuZ2l0ICYmCisJCWNkIGJhcmUtYW5jZXN0b3ItYWxpYXNlZC5naXQgJiYKKwkJZWNobyAiW2FsaWFzXSBhbGlhc2VkaW5pdCA9IGluaXQiID4+Y29uZmlnICYmCisJCW1rZGlyIHBsYWluLW5lc3RlZCAmJgorCQljZCBwbGFpbi1uZXN0ZWQgJiYKKwkJZ2l0IGFsaWFzZWRpbml0CisJKSAmJgorCWNoZWNrX2NvbmZpZyBiYXJlLWFuY2VzdG9yLWFsaWFzZWQuZ2l0L3BsYWluLW5lc3RlZC8uZ2l0IGZhbHNlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05vIGV4dHJhIEdJVF8qIG9uIGFsaWFzIHNjcmlwdHMnICcKKwl3cml0ZV9zY3JpcHQgc2NyaXB0IDw8LVxFT0YgJiYKKwllbnYgfAorCQlzZWQgLW4gXAorCQkJLWUgIi9eR0lUX1BSRUZJWD0vZCIgXAorCQkJLWUgIi9eR0lUX1RFWFRET01BSU5ESVI9L2QiIFwKKwkJCS1lICIvXkdJVF9UUkFDRTJfUEFSRU5UL2QiIFwKKwkJCS1lICIvXkdJVF8vcy89LiovL3AiIHwKKwkJc29ydAorCUVPRgorCS4vc2NyaXB0ID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgYWxpYXMuc2NyaXB0IFwhLi9zY3JpcHQgJiYKKwkoIG1rZGlyIHN1YiAmJiBjZCBzdWIgJiYgZ2l0IHNjcmlwdCA+Li4vYWN0dWFsICkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhaW4gd2l0aCBHSVRfV09SS19UUkVFJyAnCisJbWtkaXIgcGxhaW4td3QgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1dPUktfVFJFRT0iJChwd2QpL3BsYWluLXd0IiBnaXQgaW5pdCBwbGFpbi13dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFpbiBiYXJlJyAnCisJZ2l0IC0tYmFyZSBpbml0IHBsYWluLWJhcmUtMSAmJgorCWNoZWNrX2NvbmZpZyBwbGFpbi1iYXJlLTEgdHJ1ZSB1bnNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFpbiBiYXJlIHdpdGggR0lUX1dPUktfVFJFRScgJworCW1rZGlyIHBsYWluLWJhcmUtMiAmJgorCXRlc3RfbXVzdF9mYWlsIFwKKwkJZW52IEdJVF9XT1JLX1RSRUU9IiQocHdkKS9wbGFpbi1iYXJlLTIiIFwKKwkJZ2l0IC0tYmFyZSBpbml0IHBsYWluLWJhcmUtMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRElSIGJhcmUnICcKKwlta2RpciBnaXQtZGlyLWJhcmUuZ2l0ICYmCisJR0lUX0RJUj1naXQtZGlyLWJhcmUuZ2l0IGdpdCBpbml0ICYmCisJY2hlY2tfY29uZmlnIGdpdC1kaXItYmFyZS5naXQgdHJ1ZSB1bnNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IC0tYmFyZScgJworCWdpdCBpbml0IC0tYmFyZSBpbml0LWJhcmUuZ2l0ICYmCisJY2hlY2tfY29uZmlnIGluaXQtYmFyZS5naXQgdHJ1ZSB1bnNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRElSIG5vbi1iYXJlJyAnCisKKwkoCisJCW1rZGlyIG5vbi1iYXJlICYmCisJCWNkIG5vbi1iYXJlICYmCisJCUdJVF9ESVI9LmdpdCBnaXQgaW5pdAorCSkgJiYKKwljaGVja19jb25maWcgbm9uLWJhcmUvLmdpdCBmYWxzZSB1bnNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRElSICYgR0lUX1dPUktfVFJFRSAoMSknICcKKworCSgKKwkJbWtkaXIgZ2l0LWRpci13dC0xLmdpdCAmJgorCQlHSVRfV09SS19UUkVFPSQocHdkKSBHSVRfRElSPWdpdC1kaXItd3QtMS5naXQgZ2l0IGluaXQKKwkpICYmCisJY2hlY2tfY29uZmlnIGdpdC1kaXItd3QtMS5naXQgZmFsc2UgIiQocHdkKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0RJUiAmIEdJVF9XT1JLX1RSRUUgKDIpJyAnCisJbWtkaXIgZ2l0LWRpci13dC0yLmdpdCAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBcCisJCUdJVF9XT1JLX1RSRUU9IiQocHdkKSIgXAorCQlHSVRfRElSPWdpdC1kaXItd3QtMi5naXQgXAorCQlnaXQgLS1iYXJlIGluaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVpbml0JyAnCisKKwkoCisJCW1rZGlyIGFnYWluICYmCisJCWNkIGFnYWluICYmCisJCWdpdCBpbml0ID5vdXQxIDI+ZXJyMSAmJgorCQlnaXQgaW5pdCA+b3V0MiAyPmVycjIKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiSW5pdGlhbGl6ZWQgZW1wdHkiIGFnYWluL291dDEgJiYKKwl0ZXN0X2kxOG5ncmVwICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIiBhZ2Fpbi9vdXQyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFnYWluL2VycjEgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWdhaW4vZXJyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHdpdGggLS10ZW1wbGF0ZScgJworCW1rZGlyIHRlbXBsYXRlLXNvdXJjZSAmJgorCWVjaG8gY29udGVudCA+dGVtcGxhdGUtc291cmNlL2ZpbGUgJiYKKwlnaXQgaW5pdCAtLXRlbXBsYXRlPXRlbXBsYXRlLXNvdXJjZSB0ZW1wbGF0ZS1jdXN0b20gJiYKKwl0ZXN0X2NtcCB0ZW1wbGF0ZS1zb3VyY2UvZmlsZSB0ZW1wbGF0ZS1jdXN0b20vLmdpdC9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgd2l0aCAtLXRlbXBsYXRlIChibGFuayknICcKKwlnaXQgaW5pdCB0ZW1wbGF0ZS1wbGFpbiAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRlbXBsYXRlLXBsYWluLy5naXQvaW5mby9leGNsdWRlICYmCisJZ2l0IGluaXQgLS10ZW1wbGF0ZT0gdGVtcGxhdGUtYmxhbmsgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZW1wbGF0ZS1ibGFuay8uZ2l0L2luZm8vZXhjbHVkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHdpdGggaW5pdC50ZW1wbGF0ZWRpciBzZXQnICcKKwlta2RpciB0ZW1wbGF0ZWRpci1zb3VyY2UgJiYKKwllY2hvIENvbnRlbnQgPnRlbXBsYXRlZGlyLXNvdXJjZS9maWxlICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIGluaXQudGVtcGxhdGVkaXIgIiR7SE9NRX0vdGVtcGxhdGVkaXItc291cmNlIiAmJgorCSgKKwkJbWtkaXIgdGVtcGxhdGVkaXItc2V0ICYmCisJCWNkIHRlbXBsYXRlZGlyLXNldCAmJgorCQlzYW5lX3Vuc2V0IEdJVF9URU1QTEFURV9ESVIgJiYKKwkJTk9fU0VUX0dJVF9URU1QTEFURV9ESVI9dCAmJgorCQlleHBvcnQgTk9fU0VUX0dJVF9URU1QTEFURV9ESVIgJiYKKwkJZ2l0IGluaXQKKwkpICYmCisJdGVzdF9jbXAgdGVtcGxhdGVkaXItc291cmNlL2ZpbGUgdGVtcGxhdGVkaXItc2V0Ly5naXQvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IC0tYmFyZS8tLXNoYXJlZCBvdmVycmlkZXMgc3lzdGVtL2dsb2JhbCBjb25maWcnICcKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgY29yZS5iYXJlIGZhbHNlICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSAwNjQwICYmCisJZ2l0IGluaXQgLS1iYXJlIC0tc2hhcmVkPTA2NjYgaW5pdC1iYXJlLXNoYXJlZC1vdmVycmlkZSAmJgorCWNoZWNrX2NvbmZpZyBpbml0LWJhcmUtc2hhcmVkLW92ZXJyaWRlIHRydWUgdW5zZXQgJiYKKwl0ZXN0IHgwNjY2ID0gXAorCXgkKGdpdCBjb25maWcgLWYgaW5pdC1iYXJlLXNoYXJlZC1vdmVycmlkZS9jb25maWcgY29yZS5zaGFyZWRSZXBvc2l0b3J5KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGhvbm9ycyBnbG9iYWwgY29yZS5zaGFyZWRSZXBvc2l0b3J5JyAnCisJdGVzdF9jb25maWdfZ2xvYmFsIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSAwNjY2ICYmCisJZ2l0IGluaXQgc2hhcmVkLWhvbm9yLWdsb2JhbCAmJgorCXRlc3QgeDA2NjYgPSBcCisJeCQoZ2l0IGNvbmZpZyAtZiBzaGFyZWQtaG9ub3ItZ2xvYmFsLy5naXQvY29uZmlnIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbGxvd3MgaW5zYW5lbHkgbG9uZyAtLXRlbXBsYXRlJyAnCisJZ2l0IGluaXQgLS10ZW1wbGF0ZT0kKHByaW50ZiAieCUwOTk5OWR4IiAxKSB0ZXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgY3JlYXRlcyBhIG5ldyBkaXJlY3RvcnknICcKKwlybSAtZnIgbmV3ZGlyICYmCisJZ2l0IGluaXQgbmV3ZGlyICYmCisJdGVzdF9wYXRoX2lzX2RpciBuZXdkaXIvLmdpdC9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgY3JlYXRlcyBhIG5ldyBiYXJlIGRpcmVjdG9yeScgJworCXJtIC1mciBuZXdkaXIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgbmV3ZGlyICYmCisJdGVzdF9wYXRoX2lzX2RpciBuZXdkaXIvcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHJlY3JlYXRlcyBhIGRpcmVjdG9yeScgJworCXJtIC1mciBuZXdkaXIgJiYKKwlta2RpciBuZXdkaXIgJiYKKwlnaXQgaW5pdCBuZXdkaXIgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIG5ld2Rpci8uZ2l0L3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCByZWNyZWF0ZXMgYSBuZXcgYmFyZSBkaXJlY3RvcnknICcKKwlybSAtZnIgbmV3ZGlyICYmCisJbWtkaXIgbmV3ZGlyICYmCisJZ2l0IGluaXQgLS1iYXJlIG5ld2RpciAmJgorCXRlc3RfcGF0aF9pc19kaXIgbmV3ZGlyL3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBjcmVhdGVzIGEgbmV3IGRlZXAgZGlyZWN0b3J5JyAnCisJcm0gLWZyIG5ld2RpciAmJgorCWdpdCBpbml0IG5ld2Rpci9hL2IvYyAmJgorCXRlc3RfcGF0aF9pc19kaXIgbmV3ZGlyL2EvYi9jLy5naXQvcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnaW5pdCBjcmVhdGVzIGEgbmV3IGRlZXAgZGlyZWN0b3J5ICh1bWFzayB2cy4gc2hhcmVkKScgJworCXJtIC1mciBuZXdkaXIgJiYKKwkoCisJCSMgTGVhZGluZyBkaXJlY3RvcmllcyBzaG91bGQgaG9ub3IgdW1hc2sgd2hpbGUKKwkJIyB0aGUgcmVwb3NpdG9yeSBpdHNlbGYgc2hvdWxkIGZvbGxvdyAic2hhcmVkIgorCQlta2RpciBuZXdkaXIgJiYKKwkJIyBSZW1vdmUgYSBkZWZhdWx0IEFDTCBpZiBwb3NzaWJsZS4KKwkJKHNldGZhY2wgLWsgbmV3ZGlyIDI+L2Rldi9udWxsIHx8IHRydWUpICYmCisJCXVtYXNrIDAwMiAmJgorCQlnaXQgaW5pdCAtLWJhcmUgLS1zaGFyZWQ9MDY2MCBuZXdkaXIvYS9iL2MgJiYKKwkJdGVzdF9wYXRoX2lzX2RpciBuZXdkaXIvYS9iL2MvcmVmcyAmJgorCQlscyAtbGQgbmV3ZGlyL2EgbmV3ZGlyL2EvYiA+IGxzYWIub3V0ICYmCisJCSEgZ3JlcCAtdiAiXmRyd3hyd1tzeF1yLXgiIGxzYWIub3V0ICYmCisJCWxzIC1sZCBuZXdkaXIvYS9iL2MgPiBsc2Mub3V0ICYmCisJCSEgZ3JlcCAtdiAiXmRyd3hyd1tzeF0tLS0iIGxzYy5vdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgbm90aWNlcyBFRVhJU1QgKDEpJyAnCisJcm0gLWZyIG5ld2RpciAmJgorCT5uZXdkaXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgaW5pdCBuZXdkaXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBuZXdkaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBub3RpY2VzIEVFWElTVCAoMiknICcKKwlybSAtZnIgbmV3ZGlyICYmCisJbWtkaXIgbmV3ZGlyICYmCisJPm5ld2Rpci9hICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluaXQgbmV3ZGlyL2EvYiAmJgorCXRlc3RfcGF0aF9pc19maWxlIG5ld2Rpci9hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnaW5pdCBub3RpY2VzIEVQRVJNJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjaG1vZCArdyBuZXdkaXIiICYmCisJcm0gLWZyIG5ld2RpciAmJgorCW1rZGlyIG5ld2RpciAmJgorCWNobW9kIC13IG5ld2RpciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBpbml0IG5ld2Rpci9hL2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBjcmVhdGVzIGEgbmV3IGJhcmUgZGlyZWN0b3J5IHdpdGggZ2xvYmFsIC0tYmFyZScgJworCXJtIC1yZiBuZXdkaXIgJiYKKwlnaXQgLS1iYXJlIGluaXQgbmV3ZGlyICYmCisJdGVzdF9wYXRoX2lzX2RpciBuZXdkaXIvcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHByZWZlcnMgY29tbWFuZCBsaW5lIHRvIEdJVF9ESVInICcKKwlybSAtcmYgbmV3ZGlyICYmCisJbWtkaXIgb3RoZXJkaXIgJiYKKwlHSVRfRElSPW90aGVyZGlyIGdpdCAtLWJhcmUgaW5pdCBuZXdkaXIgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIG5ld2Rpci9yZWZzICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgb3RoZXJkaXIvcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHdpdGggc2VwYXJhdGUgZ2l0ZGlyJyAnCisJcm0gLXJmIG5ld2RpciAmJgorCWdpdCBpbml0IC0tc2VwYXJhdGUtZ2l0LWRpciByZWFsZ2l0ZGlyIG5ld2RpciAmJgorCW5ld2Rpcl9naXQ9IiQoY2F0IG5ld2Rpci8uZ2l0KSIgJiYKKwl0ZXN0X2NtcF9mc3BhdGggIiQocHdkKS9yZWFsZ2l0ZGlyIiAiJHtuZXdkaXJfZ2l0I2dpdGRpcjogfSIgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHJlYWxnaXRkaXIvcmVmcworJworCit0ZXN0X2xhenlfcHJlcmVxIEdFVENXRF9JR05PUkVTX1BFUk1TICcKKwliYXNlPUdFVENXRF9URVNUX0JBU0VfRElSICYmCisJbWtkaXIgLXAgJGJhc2UvZGlyICYmCisJY2htb2QgMTAwICRiYXNlIHx8CisJQlVHICJjYW5ub3QgcHJlcGFyZSAkYmFzZSIKKworCShjZCAkYmFzZS9kaXIgJiYgL2Jpbi9wd2QgLVApCisJc3RhdHVzPSQ/CisKKwljaG1vZCA3MDAgJGJhc2UgJiYKKwlybSAtcmYgJGJhc2UgfHwKKwlCVUcgImNhbm5vdCBjbGVhbiAkYmFzZSIKKwlyZXR1cm4gJHN0YXR1cworJworCitjaGVja19sb25nX2Jhc2VfcGF0aCAoKSB7CisJIyBleGNlZWQgaW5pdGlhbCBidWZmZXIgc2l6ZSBvZiBzdHJidWZfZ2V0Y3dkKCkKKwljb21wb25lbnQ9MTIzNDU2Nzg5YWJjZGVmICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjaG1vZCAwNzAwICRjb21wb25lbnQ7IHJtIC1yZiAkY29tcG9uZW50IiAmJgorCXAzMT0kY29tcG9uZW50LyRjb21wb25lbnQgJiYKKwlwMTI3PSRwMzEvJHAzMS8kcDMxLyRwMzEgJiYKKwlta2RpciAtcCAkcDEyNyAmJgorCWlmIHRlc3QgJCMgPSAxCisJdGhlbgorCQljaG1vZCAkMSAkY29tcG9uZW50CisJZmkgJiYKKwkoCisJCWNkICRwMTI3ICYmCisJCWdpdCBpbml0IG5ld2RpcgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBpbiBsb25nIGJhc2UgcGF0aCcgJworCWNoZWNrX2xvbmdfYmFzZV9wYXRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUQ1dEX0lHTk9SRVNfUEVSTVMgJ2luaXQgaW4gbG9uZyByZXN0cmljdGVkIGJhc2UgcGF0aCcgJworCWNoZWNrX2xvbmdfYmFzZV9wYXRoIDAxMTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtaW5pdCBvbiAuZ2l0IGZpbGUnICcKKwkoIGNkIG5ld2RpciAmJiBnaXQgaW5pdCApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlLWluaXQgdG8gdXBkYXRlIGdpdCBsaW5rJyAnCisJZ2l0IC1DIG5ld2RpciBpbml0IC0tc2VwYXJhdGUtZ2l0LWRpciAuLi9zdXJyZWFsZ2l0ZGlyICYmCisJbmV3ZGlyX2dpdD0iJChjYXQgbmV3ZGlyLy5naXQpIiAmJgorCXRlc3RfY21wX2ZzcGF0aCAiJChwd2QpL3N1cnJlYWxnaXRkaXIiICIke25ld2Rpcl9naXQjZ2l0ZGlyOiB9IiAmJgorCXRlc3RfcGF0aF9pc19kaXIgc3VycmVhbGdpdGRpci9yZWZzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgcmVhbGdpdGRpci9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlLWluaXQgdG8gbW92ZSBnaXRkaXInICcKKwlybSAtcmYgbmV3ZGlyIHJlYWxnaXRkaXIgc3VycmVhbGdpdGRpciAmJgorCWdpdCBpbml0IG5ld2RpciAmJgorCWdpdCAtQyBuZXdkaXIgaW5pdCAtLXNlcGFyYXRlLWdpdC1kaXIgLi4vcmVhbGdpdGRpciAmJgorCW5ld2Rpcl9naXQ9IiQoY2F0IG5ld2Rpci8uZ2l0KSIgJiYKKwl0ZXN0X2NtcF9mc3BhdGggIiQocHdkKS9yZWFsZ2l0ZGlyIiAiJHtuZXdkaXJfZ2l0I2dpdGRpcjogfSIgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHJlYWxnaXRkaXIvcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdyZS1pbml0IHRvIG1vdmUgZ2l0ZGlyIHN5bWxpbmsnICcKKwlybSAtcmYgbmV3ZGlyIHJlYWxnaXRkaXIgJiYKKwlnaXQgaW5pdCBuZXdkaXIgJiYKKwkoCisJY2QgbmV3ZGlyICYmCisJbXYgLmdpdCBoZXJlICYmCisJbG4gLXMgaGVyZSAuZ2l0ICYmCisJZ2l0IGluaXQgLS1zZXBhcmF0ZS1naXQtZGlyIC4uL3JlYWxnaXRkaXIKKwkpICYmCisJZWNobyAiZ2l0ZGlyOiAkKHB3ZCkvcmVhbGdpdGRpciIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgbmV3ZGlyLy5naXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBuZXdkaXIvaGVyZSAmJgorCXRlc3RfcGF0aF9pc19kaXIgcmVhbGdpdGRpci9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJy5naXQgaGlkZGVuJyAnCisJcm0gLXJmIG5ld2RpciAmJgorCSgKKwkJc2FuZV91bnNldCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgJiYKKwkJbWtkaXIgbmV3ZGlyICYmCisJCWNkIG5ld2RpciAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X3BhdGhfaXNfaGlkZGVuIC5naXQKKwkpICYmCisJY2hlY2tfY29uZmlnIG5ld2Rpci8uZ2l0IGZhbHNlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ2JhcmUgZ2l0IGRpciBub3QgaGlkZGVuJyAnCisJcm0gLXJmIG5ld2RpciAmJgorCSgKKwkJc2FuZV91bnNldCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgR0lUX0NPTkZJRyAmJgorCQlta2RpciBuZXdkaXIgJiYKKwkJY2QgbmV3ZGlyICYmCisJCWdpdCAtLWJhcmUgaW5pdAorCSkgJiYKKwkhIGlzX2hpZGRlbiBuZXdkaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIGluaXQgZnJvbSBkb2VzIG5vdCB1c2UgY29uZmlnIGZyb20gY3dkJyAnCisJcm0gLXJmIG5ld2RpciAmJgorCXRlc3RfY29uZmlnIGNvcmUubG9nYWxscmVmdXBkYXRlcyB0cnVlICYmCisJZ2l0IGluaXQgbmV3ZGlyICYmCisJZWNobyB0cnVlID5leHBlY3QgJiYKKwlnaXQgLUMgbmV3ZGlyIGNvbmZpZyAtLWJvb2wgY29yZS5sb2dhbGxyZWZ1cGRhdGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlLWluaXQgZnJvbSBhIGxpbmtlZCB3b3JrdHJlZScgJworCWdpdCBpbml0IG1haW4td29ya3RyZWUgJiYKKwkoCisJCWNkIG1haW4td29ya3RyZWUgJiYKKwkJdGVzdF9jb21taXQgZmlyc3QgJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCAuLi9saW5rZWQtd29ya3RyZWUgJiYKKwkJbXYgLmdpdC9pbmZvL2V4Y2x1ZGUgZXhwZWN0ZWQtZXhjbHVkZSAmJgorCQljcCAuZ2l0L2NvbmZpZyBleHBlY3RlZC1jb25maWcgJiYKKwkJZmluZCAuZ2l0L3dvcmt0cmVlcyAtcHJpbnQgfCBzb3J0ID5leHBlY3RlZCAmJgorCQlnaXQgLUMgLi4vbGlua2VkLXdvcmt0cmVlIGluaXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQtZXhjbHVkZSAuZ2l0L2luZm8vZXhjbHVkZSAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJZmluZCAuZ2l0L3dvcmt0cmVlcyAtcHJpbnQgfCBzb3J0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICdjb3JlLmhpZGVkb3RmaWxlcyA9IGZhbHNlJyAnCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCBjb3JlLmhpZGVkb3RmaWxlcyBmYWxzZSAmJgorCXJtIC1yZiBuZXdkaXIgJiYKKwlta2RpciBuZXdkaXIgJiYKKwkoCisJCXNhbmVfdW5zZXQgR0lUX0RJUiBHSVRfV09SS19UUkVFIEdJVF9DT05GSUcgJiYKKwkJZ2l0IC1DIG5ld2RpciBpbml0CisJKSAmJgorCSEgaXNfaGlkZGVuIG5ld2Rpci8uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ3JlZGlyZWN0IHN0ZCBoYW5kbGVzJyAnCisJR0lUX1JFRElSRUNUX1NURE9VVD1vdXRwdXQudHh0IGdpdCByZXYtcGFyc2UgLS1naXQtZGlyICYmCisJdGVzdCAuZ2l0ID0gIiQoY2F0IG91dHB1dC50eHQpIiAmJgorCXRlc3QgLXogIiQoR0lUX1JFRElSRUNUX1NURE9VVD1vZmYgZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpIiAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBcCisJCUdJVF9SRURJUkVDVF9TVERPVVQ9b3V0cHV0LnR4dCBcCisJCUdJVF9SRURJUkVDVF9TVERFUlI9IjI+JjEiIFwKKwkJZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIgLS12ZXJpZnkgcmVmcy9pbnZhbGlkICYmCisJZ3JlcCAiXlxcLmdpdFwkIiBvdXRwdXQudHh0ICYmCisJZ3JlcCAiTmVlZGVkIGEgc2luZ2xlIHJldmlzaW9uIiBvdXRwdXQudHh0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwMi1naXRmaWxlLnNoIGIvdC90MDAwMi1naXRmaWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhYTk5MDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDAyLWdpdGZpbGUuc2gKQEAgLTAsMCArMSwxMzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPScuZ2l0IGZpbGUKKworVmVyaWZ5IHRoYXQgcGx1bWJpbmcgY29tbWFuZHMgd29yayB3aGVuIC5naXQgaXMgYSBmaWxlCisnCisuIC4vdGVzdC1saWIuc2gKKworb2JqcGF0aCgpIHsKKwllY2hvICIkMSIgfCBzZWQgLWUgJ3N8XCguLlwpfFwxL3wnCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWwgc2V0dXAnICcKKwlSRUFMPSIkKHB3ZCkvLnJlYWwiICYmCisJbXYgLmdpdCAiJFJFQUwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhZCBzZXR1cDogaW52YWxpZCAuZ2l0IGZpbGUgZm9ybWF0JyAnCisJZWNobyAiZ2l0ZGlyICRSRUFMIiA+LmdpdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgMj4uZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiaW52YWxpZCBnaXRmaWxlIGZvcm1hdCIgLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYWQgc2V0dXA6IGludmFsaWQgLmdpdCBmaWxlIHBhdGgnICcKKwllY2hvICJnaXRkaXI6ICRSRUFMLm5vdCIgPi5naXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDI+LmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdCBhIGdpdCByZXBvc2l0b3J5IiAuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsIHNldHVwICsgY2hlY2sgcmV2LXBhcnNlIC0tZ2l0LWRpcicgJworCWVjaG8gImdpdGRpcjogJFJFQUwiID4uZ2l0ICYmCisJdGVzdCAiJFJFQUwiID0gIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBoYXNoLW9iamVjdCcgJworCWVjaG8gImZvbyIgPmJhciAmJgorCVNIQT0kKGNhdCBiYXIgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiJFJFQUwvb2JqZWN0cy8kKG9ianBhdGggJFNIQSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGNhdC1maWxlJyAnCisJZ2l0IGNhdC1maWxlIGJsb2IgJFNIQSA+YWN0dWFsICYmCisJdGVzdF9jbXAgYmFyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB1cGRhdGUtaW5kZXgnICcKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJFJFQUwvaW5kZXgiICYmCisJcm0gLWYgIiRSRUFML29iamVjdHMvJChvYmpwYXRoICRTSEEpIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYmFyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRSRUFML2luZGV4IiAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkUkVBTC9vYmplY3RzLyQob2JqcGF0aCAkU0hBKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgd3JpdGUtdHJlZScgJworCVNIQT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkUkVBTC9vYmplY3RzLyQob2JqcGF0aCAkU0hBKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY29tbWl0LXRyZWUnICcKKwlTSEE9JChlY2hvICJjb21taXQgYmFyIiB8IGdpdCBjb21taXQtdHJlZSAkU0hBKSAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkUkVBTC9vYmplY3RzLyQob2JqcGF0aCAkU0hBKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgcmV2LWxpc3QnICcKKwllY2hvICRTSEEgPiIkUkVBTC9IRUFEIiAmJgorCXRlc3QgIiRTSEEiID0gIiQoZ2l0IHJldi1saXN0IEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cF9naXRfZGlyIHR3aWNlIGluIHN1YmRpcicgJworCWdpdCBpbml0IHNnZCAmJgorCSgKKwkJY2Qgc2dkICYmCisJCWdpdCBjb25maWcgYWxpYXMubHNmaSBscy1maWxlcyAmJgorCQltdiAuZ2l0IC5yZWFsZ2l0ICYmCisJCWVjaG8gImdpdGRpcjogLnJlYWxnaXQiID4uZ2l0ICYmCisJCW1rZGlyIHN1YmRpciAmJgorCQljZCBzdWJkaXIgJiYKKwkJPmZvbyAmJgorCQlnaXQgYWRkIGZvbyAmJgorCQlnaXQgbHNmaSA+YWN0dWFsICYmCisJCWVjaG8gZm9vID5leHBlY3RlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VudGVyX3JlcG8gbm9uLXN0cmljdCBtb2RlJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBlbnRlcl9yZXBvICYmCisJKAorCQljZCBlbnRlcl9yZXBvICYmCisJCXRlc3RfdGljayAmJgorCQl0ZXN0X2NvbW1pdCBmb28gJiYKKwkJbXYgLmdpdCAucmVhbGdpdCAmJgorCQllY2hvICJnaXRkaXI6IC5yZWFsZ2l0IiA+LmdpdAorCSkgJiYKKwloZWFkPSQoZ2l0IC1DIGVudGVyX3JlcG8gcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGxzLXJlbW90ZSBlbnRlcl9yZXBvID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCSRoZWFkCUhFQUQKKwkkaGVhZAlyZWZzL2hlYWRzL21hc3RlcgorCSRoZWFkCXJlZnMvdGFncy9mb28KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW50ZXJfcmVwbyBsaW5rZWQgY2hlY2tvdXQnICcKKwkoCisJCWNkIGVudGVyX3JlcG8gJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCAgLi4vZm9vIHJlZnMvdGFncy9mb28KKwkpICYmCisJaGVhZD0kKGdpdCAtQyBlbnRlcl9yZXBvIHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBscy1yZW1vdGUgZm9vID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCSRoZWFkCUhFQUQKKwkkaGVhZAlyZWZzL2hlYWRzL21hc3RlcgorCSRoZWFkCXJlZnMvdGFncy9mb28KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW50ZXJfcmVwbyBzdHJpY3QgbW9kZScgJworCWhlYWQ9JChnaXQgLUMgZW50ZXJfcmVwbyByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgbHMtcmVtb3RlIC0tdXBsb2FkLXBhY2s9ImdpdCB1cGxvYWQtcGFjayAtLXN0cmljdCIgZm9vLy5naXQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJJGhlYWQJSEVBRAorCSRoZWFkCXJlZnMvaGVhZHMvbWFzdGVyCisJJGhlYWQJcmVmcy90YWdzL2ZvbworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMDMtYXR0cmlidXRlcy5zaCBiL3QvdDAwMDMtYXR0cmlidXRlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNjYwNTkzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAwMy1hdHRyaWJ1dGVzLnNoCkBAIC0wLDAgKzEsMzQyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj1naXRhdHRyaWJ1dGVzCisKKy4gLi90ZXN0LWxpYi5zaAorCithdHRyX2NoZWNrICgpIHsKKwlwYXRoPSIkMSIgZXhwZWN0PSIkMiIgZ2l0X29wdHM9IiQzIiAmJgorCisJZ2l0ICRnaXRfb3B0cyBjaGVjay1hdHRyIHRlc3QgLS0gIiRwYXRoIiA+YWN0dWFsIDI+ZXJyICYmCisJZWNobyAiJHBhdGg6IHRlc3Q6ICRleHBlY3QiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorfQorCithdHRyX2NoZWNrX3F1b3RlICgpIHsKKwlwYXRoPSIkMSIgcXVvdGVkX3BhdGg9IiQyIiBleHBlY3Q9IiQzIiAmJgorCisJZ2l0IGNoZWNrLWF0dHIgdGVzdCAtLSAiJHBhdGgiID5hY3R1YWwgJiYKKwllY2hvICJcIiRxdW90ZWRfcGF0aFwiOiB0ZXN0OiAkZXhwZWN0IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wZW4tcXVvdGVkIHBhdGhuYW1lJyAnCisJZWNobyAiXCJhIHRlc3Q9YSIgPi5naXRhdHRyaWJ1dGVzICYmCisJYXR0cl9jaGVjayBhIHVuc3BlY2lmaWVkCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciAtcCBhL2IvZCBhL2MgYiAmJgorCSgKKwkJZWNobyAiW2F0dHJdbm90ZXN0ICF0ZXN0IiAmJgorCQllY2hvICJcIiBkIFwiCXRlc3Q9ZCIgJiYKKwkJZWNobyAiIGUJdGVzdD1lIiAmJgorCQllY2hvICIgZVwiCXRlc3Q9ZSIgJiYKKwkJZWNobyAiZgl0ZXN0PWYiICYmCisJCWVjaG8gImEvaSB0ZXN0PWEvaSIgJiYKKwkJZWNobyAib25vZmYgdGVzdCAtdGVzdCIgJiYKKwkJZWNobyAib2Zmb24gLXRlc3QgdGVzdCIgJiYKKwkJZWNobyAibm8gbm90ZXN0IiAmJgorCQllY2hvICJBL2UvRiB0ZXN0PUEvZS9GIgorCSkgPi5naXRhdHRyaWJ1dGVzICYmCisJKAorCQllY2hvICJnIHRlc3Q9YS9nIiAmJgorCQllY2hvICJiL2cgdGVzdD1hL2IvZyIKKwkpID5hLy5naXRhdHRyaWJ1dGVzICYmCisJKAorCQllY2hvICJoIHRlc3Q9YS9iL2giICYmCisJCWVjaG8gImQvKiB0ZXN0PWEvYi9kLyoiICYmCisJCWVjaG8gImQveWVzIG5vdGVzdCIKKwkpID5hL2IvLmdpdGF0dHJpYnV0ZXMgJiYKKwkoCisJCWVjaG8gImdsb2JhbCB0ZXN0PWdsb2JhbCIKKwkpID4iJEhPTUUiL2dsb2JhbC1naXRhdHRyaWJ1dGVzICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0LWFsbAorCWY6IHRlc3Q6IGYKKwlhL2Y6IHRlc3Q6IGYKKwlhL2MvZjogdGVzdDogZgorCWEvZzogdGVzdDogYS9nCisJYS9iL2c6IHRlc3Q6IGEvYi9nCisJYi9nOiB0ZXN0OiB1bnNwZWNpZmllZAorCWEvYi9oOiB0ZXN0OiBhL2IvaAorCWEvYi9kL2c6IHRlc3Q6IGEvYi9kLyoKKwlvbm9mZjogdGVzdDogdW5zZXQKKwlvZmZvbjogdGVzdDogc2V0CisJbm86IG5vdGVzdDogc2V0CisJbm86IHRlc3Q6IHVuc3BlY2lmaWVkCisJYS9iL2Qvbm86IG5vdGVzdDogc2V0CisJYS9iL2Qvbm86IHRlc3Q6IGEvYi9kLyoKKwlhL2IvZC95ZXM6IG5vdGVzdDogc2V0CisJYS9iL2QveWVzOiB0ZXN0OiB1bnNwZWNpZmllZAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21tYW5kIGxpbmUgY2hlY2tzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLWF0dHIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stYXR0ciAtLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1hdHRyIHRlc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stYXR0ciB0ZXN0IC0tICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLWF0dHIgLS0gZiAmJgorCWVjaG8gImYiIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiAmJgorCWVjaG8gImYiIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiAtLSBmICYmCisJZWNobyAiZiIgfCB0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stYXR0ciAtLXN0ZGluIHRlc3QgLS0gZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1hdHRyICIiIC0tIGYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0cmlidXRlIHRlc3QnICcKKworCWF0dHJfY2hlY2sgIiBkICIgZCAmJgorCWF0dHJfY2hlY2sgZSBlICYmCisJYXR0cl9jaGVja19xdW90ZSBlXCIgZVxcXCIgZSAmJgorCisJYXR0cl9jaGVjayBmIGYgJiYKKwlhdHRyX2NoZWNrIGEvZiBmICYmCisJYXR0cl9jaGVjayBhL2MvZiBmICYmCisJYXR0cl9jaGVjayBhL2cgYS9nICYmCisJYXR0cl9jaGVjayBhL2IvZyBhL2IvZyAmJgorCWF0dHJfY2hlY2sgYi9nIHVuc3BlY2lmaWVkICYmCisJYXR0cl9jaGVjayBhL2IvaCBhL2IvaCAmJgorCWF0dHJfY2hlY2sgYS9iL2QvZyAiYS9iL2QvKiIgJiYKKwlhdHRyX2NoZWNrIG9ub2ZmIHVuc2V0ICYmCisJYXR0cl9jaGVjayBvZmZvbiBzZXQgJiYKKwlhdHRyX2NoZWNrIG5vIHVuc3BlY2lmaWVkICYmCisJYXR0cl9jaGVjayBhL2IvZC9ubyAiYS9iL2QvKiIgJiYKKwlhdHRyX2NoZWNrIGEvYi9kL3llcyB1bnNwZWNpZmllZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRyaWJ1dGUgbWF0Y2hpbmcgaXMgY2FzZSBzZW5zaXRpdmUgd2hlbiBjb3JlLmlnbm9yZWNhc2U9MCcgJworCisJYXR0cl9jaGVjayBGIHVuc3BlY2lmaWVkICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIGEvRiB1bnNwZWNpZmllZCAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJYXR0cl9jaGVjayBhL2MvRiB1bnNwZWNpZmllZCAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJYXR0cl9jaGVjayBhL0cgdW5zcGVjaWZpZWQgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCWF0dHJfY2hlY2sgYS9CL2cgYS9nICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIGEvYi9HIHVuc3BlY2lmaWVkICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIGEvYi9IIHVuc3BlY2lmaWVkICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIGEvYi9EL2cgYS9nICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIG9Ob0ZmIHVuc3BlY2lmaWVkICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIG9GZk9uIHVuc3BlY2lmaWVkICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIE5PIHVuc3BlY2lmaWVkICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIGEvYi9EL05PIHVuc3BlY2lmaWVkICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIGEvYi9kL1lFUyBhL2IvZC8qICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIGEvRS9mIGYgIi1jIGNvcmUuaWdub3JlY2FzZT0wIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dHJpYnV0ZSBtYXRjaGluZyBpcyBjYXNlIGluc2Vuc2l0aXZlIHdoZW4gY29yZS5pZ25vcmVjYXNlPTEnICcKKworCWF0dHJfY2hlY2sgRiBmICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvRiBmICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvYy9GIGYgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgYS9HIGEvZyAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL0IvZyBhL2IvZyAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL2IvRyBhL2IvZyAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL2IvSCBhL2IvaCAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL2IvRC9nICJhL2IvZC8qIiAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBvTm9GZiB1bnNldCAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBvRmZPbiBzZXQgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgTk8gdW5zcGVjaWZpZWQgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgYS9iL0QvTk8gImEvYi9kLyoiICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvYi9kL1lFUyB1bnNwZWNpZmllZCAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL0UvZiAiQS9lL0YiICItYyBjb3JlLmlnbm9yZWNhc2U9MSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENBU0VfSU5TRU5TSVRJVkVfRlMgJ2FkZGl0aW9uYWwgY2FzZSBpbnNlbnNpdGl2aXR5IHRlc3RzJyAnCisJYXR0cl9jaGVjayBhL0IvRC9nIGEvZyAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJYXR0cl9jaGVjayBBL0IvRC9OTyB1bnNwZWNpZmllZCAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJYXR0cl9jaGVjayBBL2IvaCBhL2IvaCAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL0IvRC9nICJhL2IvZC8qIiAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBBL0IvRC9OTyAiYS9iL2QvKiIgIi1jIGNvcmUuaWdub3JlY2FzZT0xIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bm5vcm1hbGl6ZWQgcGF0aHMnICcKKwlhdHRyX2NoZWNrIC4vZiBmICYmCisJYXR0cl9jaGVjayAuL2EvZyBhL2cgJiYKKwlhdHRyX2NoZWNrIGEvLi9nIGEvZyAmJgorCWF0dHJfY2hlY2sgYS9jLy4uL2IvZyBhL2IvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBwYXRocycgJworCShjZCBhICYmIGF0dHJfY2hlY2sgLi4vZiBmKSAmJgorCShjZCBhICYmIGF0dHJfY2hlY2sgZiBmKSAmJgorCShjZCBhICYmIGF0dHJfY2hlY2sgaSBhL2kpICYmCisJKGNkIGEgJiYgYXR0cl9jaGVjayBnIGEvZykgJiYKKwkoY2QgYSAmJiBhdHRyX2NoZWNrIGIvZyBhL2IvZykgJiYKKwkoY2QgYiAmJiBhdHRyX2NoZWNrIC4uL2EvZiBmKSAmJgorCShjZCBiICYmIGF0dHJfY2hlY2sgLi4vYS9nIGEvZykgJiYKKwkoY2QgYiAmJiBhdHRyX2NoZWNrIC4uL2EvYi9nIGEvYi9nKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVmaXhlcyBhcmUgbm90IGNvbmZ1c2VkIHdpdGggbGVhZGluZyBkaXJlY3RvcmllcycgJworCWF0dHJfY2hlY2sgYV9wbHVzL2cgdW5zcGVjaWZpZWQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJYS9nOiB0ZXN0OiBhL2cKKwlhX3BsdXMvZzogdGVzdDogdW5zcGVjaWZpZWQKKwlFT0YKKwlnaXQgY2hlY2stYXR0ciB0ZXN0IGEvZyBhX3BsdXMvZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JlLmF0dHJpYnV0ZXNmaWxlJyAnCisJYXR0cl9jaGVjayBnbG9iYWwgdW5zcGVjaWZpZWQgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXR0cmlidXRlc2ZpbGUgIiRIT01FL2dsb2JhbC1naXRhdHRyaWJ1dGVzIiAmJgorCWF0dHJfY2hlY2sgZ2xvYmFsIGdsb2JhbCAmJgorCWdpdCBjb25maWcgY29yZS5hdHRyaWJ1dGVzZmlsZSAifi9nbG9iYWwtZ2l0YXR0cmlidXRlcyIgJiYKKwlhdHRyX2NoZWNrIGdsb2JhbCBnbG9iYWwgJiYKKwllY2hvICJnbG9iYWwgdGVzdD1wcmVjZWRlbmNlIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisJYXR0cl9jaGVjayBnbG9iYWwgcHJlY2VkZW5jZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRyaWJ1dGUgdGVzdDogcmVhZCBwYXRocyBmcm9tIHN0ZGluJyAnCisJZ3JlcCAtdiBub3Rlc3QgPGV4cGVjdC1hbGwgPmV4cGVjdCAmJgorCXNlZCAtZSAicy86LiovLyIgPGV4cGVjdCB8IGdpdCBjaGVjay1hdHRyIC0tc3RkaW4gdGVzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRyaWJ1dGUgdGVzdDogLS1hbGwgb3B0aW9uJyAnCisJZ3JlcCAtdiB1bnNwZWNpZmllZCA8ZXhwZWN0LWFsbCB8IHNvcnQgPnNwZWNpZmllZC1hbGwgJiYKKwlzZWQgLWUgInMvOi4qLy8iIDxleHBlY3QtYWxsIHwgdW5pcSA+c3RkaW4tYWxsICYmCisJZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiAtLWFsbCA8c3RkaW4tYWxsIHwgc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgc3BlY2lmaWVkLWFsbCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0cmlidXRlIHRlc3Q6IC0tY2FjaGVkIG9wdGlvbicgJworCWdpdCBjaGVjay1hdHRyIC0tY2FjaGVkIC0tc3RkaW4gLS1hbGwgPHN0ZGluLWFsbCB8IHNvcnQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwlnaXQgYWRkIC5naXRhdHRyaWJ1dGVzIGEvLmdpdGF0dHJpYnV0ZXMgYS9iLy5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNoZWNrLWF0dHIgLS1jYWNoZWQgLS1zdGRpbiAtLWFsbCA8c3RkaW4tYWxsIHwgc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgc3BlY2lmaWVkLWFsbCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm9vdCBzdWJkaXIgYXR0cmlidXRlIHRlc3QnICcKKwlhdHRyX2NoZWNrIGEvaSBhL2kgJiYKKwlhdHRyX2NoZWNrIHN1YmRpci9hL2kgdW5zcGVjaWZpZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVnYXRpdmUgcGF0dGVybnMnICcKKwllY2hvICIhZiB0ZXN0PWJhciIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNoZWNrLWF0dHIgdGVzdCAtLSAnIiciJyFmJyInIicgMj5lcnJvcnMgJiYKKwl0ZXN0X2kxOG5ncmVwICJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCIgZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdHRlcm5zIHN0YXJ0aW5nIHdpdGggZXhjbGFtYXRpb24nICcKKwllY2hvICJcIWYgdGVzdD1mb28iID4uZ2l0YXR0cmlidXRlcyAmJgorCWF0dHJfY2hlY2sgIiFmIiBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIioqIiB0ZXN0JyAnCisJZWNobyAiKiovZiBmb289YmFyIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwljYXQgPDxcRU9GID5leHBlY3QgJiYKK2Y6IGZvbzogYmFyCithL2Y6IGZvbzogYmFyCithL2IvZjogZm9vOiBiYXIKK2EvYi9jL2Y6IGZvbzogYmFyCitFT0YKKwlnaXQgY2hlY2stYXR0ciBmb28gLS0gImYiID5hY3R1YWwgMj5lcnIgJiYKKwlnaXQgY2hlY2stYXR0ciBmb28gLS0gImEvZiIgPj5hY3R1YWwgMj4+ZXJyICYmCisJZ2l0IGNoZWNrLWF0dHIgZm9vIC0tICJhL2IvZiIgPj5hY3R1YWwgMj4+ZXJyICYmCisJZ2l0IGNoZWNrLWF0dHIgZm9vIC0tICJhL2IvYy9mIiA+PmFjdHVhbCAyPj5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciKioiIHdpdGggbm8gc2xhc2hlcyB0ZXN0JyAnCisJZWNobyAiYSoqZiBmb289YmFyIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY2hlY2stYXR0ciBmb28gLS0gImYiID5hY3R1YWwgJiYKKwljYXQgPDxcRU9GID5leHBlY3QgJiYKK2Y6IGZvbzogdW5zcGVjaWZpZWQKK2FmOiBmb286IGJhcgorYXhmOiBmb286IGJhcgorYS9mOiBmb286IHVuc3BlY2lmaWVkCithL2IvZjogZm9vOiB1bnNwZWNpZmllZAorYS9iL2MvZjogZm9vOiB1bnNwZWNpZmllZAorRU9GCisJZ2l0IGNoZWNrLWF0dHIgZm9vIC0tICJmIiA+YWN0dWFsIDI+ZXJyICYmCisJZ2l0IGNoZWNrLWF0dHIgZm9vIC0tICJhZiIgPj5hY3R1YWwgMj5lcnIgJiYKKwlnaXQgY2hlY2stYXR0ciBmb28gLS0gImF4ZiIgPj5hY3R1YWwgMj5lcnIgJiYKKwlnaXQgY2hlY2stYXR0ciBmb28gLS0gImEvZiIgPj5hY3R1YWwgMj4+ZXJyICYmCisJZ2l0IGNoZWNrLWF0dHIgZm9vIC0tICJhL2IvZiIgPj5hY3R1YWwgMj4+ZXJyICYmCisJZ2l0IGNoZWNrLWF0dHIgZm9vIC0tICJhL2IvYy9mIiA+PmFjdHVhbCAyPj5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAtLWdpdC1kaXIgYW5kIC0td29yay10cmVlJyAnCisJbWtkaXIgdW5yZWFsIHJlYWwgJiYKKwlnaXQgaW5pdCByZWFsICYmCisJZWNobyAiZmlsZSB0ZXN0PWluLXJlYWwiID5yZWFsLy5naXRhdHRyaWJ1dGVzICYmCisJKAorCQljZCB1bnJlYWwgJiYKKwkJYXR0cl9jaGVjayBmaWxlIGluLXJlYWwgIi0tZ2l0LWRpciAuLi9yZWFsLy5naXQgLS13b3JrLXRyZWUgLi4vcmVhbCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhcmUnICcKKwlnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZS5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZSByZXBvc2l0b3J5OiBjaGVjayB0aGF0IC5naXRhdHRyaWJ1dGUgaXMgaWdub3JlZCcgJworCSgKKwkJY2QgYmFyZS5naXQgJiYKKwkJKAorCQkJZWNobyAiZgl0ZXN0PWYiICYmCisJCQllY2hvICJhL2kgdGVzdD1hL2kiCisJCSkgPi5naXRhdHRyaWJ1dGVzICYmCisJCWF0dHJfY2hlY2sgZiB1bnNwZWNpZmllZCAmJgorCQlhdHRyX2NoZWNrIGEvZiB1bnNwZWNpZmllZCAmJgorCQlhdHRyX2NoZWNrIGEvYy9mIHVuc3BlY2lmaWVkICYmCisJCWF0dHJfY2hlY2sgYS9pIHVuc3BlY2lmaWVkICYmCisJCWF0dHJfY2hlY2sgc3ViZGlyL2EvaSB1bnNwZWNpZmllZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZSByZXBvc2l0b3J5OiBjaGVjayB0aGF0IC0tY2FjaGVkIGhvbm9ycyBpbmRleCcgJworCSgKKwkJY2QgYmFyZS5naXQgJiYKKwkJR0lUX0lOREVYX0ZJTEU9Li4vLmdpdC9pbmRleCBcCisJCWdpdCBjaGVjay1hdHRyIC0tY2FjaGVkIC0tc3RkaW4gLS1hbGwgPC4uL3N0ZGluLWFsbCB8CisJCXNvcnQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAuLi9zcGVjaWZpZWQtYWxsIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZSByZXBvc2l0b3J5OiB0ZXN0IGluZm8vYXR0cmlidXRlcycgJworCSgKKwkJY2QgYmFyZS5naXQgJiYKKwkJKAorCQkJZWNobyAiZgl0ZXN0PWYiICYmCisJCQllY2hvICJhL2kgdGVzdD1hL2kiCisJCSkgPmluZm8vYXR0cmlidXRlcyAmJgorCQlhdHRyX2NoZWNrIGYgZiAmJgorCQlhdHRyX2NoZWNrIGEvZiBmICYmCisJCWF0dHJfY2hlY2sgYS9jL2YgZiAmJgorCQlhdHRyX2NoZWNrIGEvaSBhL2kgJiYKKwkJYXR0cl9jaGVjayBzdWJkaXIvYS9pIHVuc3BlY2lmaWVkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaW5hcnkgbWFjcm8gZXhwYW5kZWQgYnkgLWEnICcKKwllY2hvICJmaWxlIGJpbmFyeSIgPi5naXRhdHRyaWJ1dGVzICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZpbGU6IGJpbmFyeTogc2V0CisJZmlsZTogZGlmZjogdW5zZXQKKwlmaWxlOiBtZXJnZTogdW5zZXQKKwlmaWxlOiB0ZXh0OiB1bnNldAorCUVPRgorCWdpdCBjaGVjay1hdHRyIC1hIGZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdWVyeSBiaW5hcnkgbWFjcm8gZGlyZWN0bHknICcKKwllY2hvICJmaWxlIGJpbmFyeSIgPi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyBmaWxlOiBiaW5hcnk6IHNldCA+ZXhwZWN0ICYmCisJZ2l0IGNoZWNrLWF0dHIgYmluYXJ5IGZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDA0LXVud3JpdGFibGUuc2ggYi90L3QwMDA0LXVud3JpdGFibGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTMxMzdkNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDQtdW53cml0YWJsZS5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGV0ZWN0IHVud3JpdGFibGUgcmVwb3NpdG9yeSBhbmQgZmFpbCBjb3JyZWN0bHknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnd3JpdGUtdHJlZSBzaG91bGQgbm90aWNlIHVud3JpdGFibGUgcmVwb3NpdG9yeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2htb2QgNzc1IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8iICYmCisJY2htb2QgYS13IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgd3JpdGUtdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ2NvbW1pdCBzaG91bGQgbm90aWNlIHVud3JpdGFibGUgcmVwb3NpdG9yeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2htb2QgNzc1IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8iICYmCisJY2htb2QgYS13IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ3VwZGF0ZS1pbmRleCBzaG91bGQgbm90aWNlIHVud3JpdGFibGUgcmVwb3NpdG9yeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2htb2QgNzc1IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8iICYmCisJZWNobyA2TyA+ZmlsZSAmJgorCWNobW9kIGEtdyAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnYWRkIHNob3VsZCBub3RpY2UgdW53cml0YWJsZSByZXBvc2l0b3J5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjaG1vZCA3NzUgLmdpdC9vYmplY3RzIC5naXQvb2JqZWN0cy8/PyIgJiYKKwllY2hvIGIgPmZpbGUgJiYKKwljaG1vZCBhLXcgLmdpdC9vYmplY3RzIC5naXQvb2JqZWN0cy8/PyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgZmlsZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMDUtc2lnbmFscy5zaCBiL3QvdDAwMDUtc2lnbmFscy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YzIxNGJkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAwNS1zaWduYWxzLnNoCkBAIC0wLDAgKzEsNTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzaWduYWxzIHdvcmsgYXMgd2UgZXhwZWN0JworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+ZXhwZWN0IDw8RU9GCit0aHJlZQordHdvCitvbmUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdjaGFpbiB3b3JrcycgJworCXsgdGVzdC10b29sIHNpZ2NoYWluID5hY3R1YWw7IHJldD0kPzsgfSAmJgorCXsKKwkJIyBTaWduYWwgZGVhdGggYnkgcmFpc2UoKSBvbiBXaW5kb3dzIGFjdHMgbGlrZSBleGl0KDMpLAorCQkjIHJlZ2FyZGxlc3Mgb2YgdGhlIHNpZ25hbCBudW1iZXIuIFNvIHdlIG11c3QgYWxsb3cgdGhhdAorCQkjIGFzIHdlbGwgYXMgdGhlIG5vcm1hbCBzaWduYWwgY2hlY2suCisJCXRlc3RfbWF0Y2hfc2lnbmFsIDE1ICIkcmV0IiB8fAorCQl0ZXN0ICIkcmV0IiA9IDMKKwl9ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnc2lnbmFscyBhcmUgcHJvcGFnYXRlZCB1c2luZyBzaGVsbCBjb252ZW50aW9uJyAnCisJIyB3ZSB1c2UgZXhlYyBoZXJlIHRvIGF2b2lkIGFueSBzdWItc2hlbGwgaW50ZXJwcmV0YXRpb24KKwkjIG9mIHRoZSBleGl0IGNvZGUKKwlnaXQgY29uZmlnIGFsaWFzLnNpZ3Rlcm0gIiFleGVjIHRlc3QtdG9vbCBzaWdjaGFpbiIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDE0MyBnaXQgc2lndGVybQorJworCitsYXJnZV9naXQgKCkgeworCWZvciBpIGluICQodGVzdF9zZXEgMSAxMDApCisJZG8KKwkJZ2l0IGRpZmYgLS1jYWNoZWQgLS1iaW5hcnkgfHwgcmV0dXJuCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYmxvYicgJworCXRlc3QtdG9vbCBnZW5yYW5kb20gZm9vIDE2Mzg0ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdhIGNvbnN0aXBhdGVkIGdpdCBkaWVzIHdpdGggU0lHUElQRScgJworCU9VVD0kKCAoKGxhcmdlX2dpdDsgZWNobyAkPyAxPiYzKSB8IDopIDM+JjEgKSAmJgorCXRlc3RfbWF0Y2hfc2lnbmFsIDEzICIkT1VUIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnYSBjb25zdGlwYXRlZCBnaXQgZGllcyB3aXRoIFNJR1BJUEUgZXZlbiBpZiBwYXJlbnQgaWdub3JlcyBpdCcgJworCU9VVD0kKCAoKHRyYXAgIiIgUElQRTsgbGFyZ2VfZ2l0OyBlY2hvICQ/IDE+JjMpIHwgOikgMz4mMSApICYmCisJdGVzdF9tYXRjaF9zaWduYWwgMTMgIiRPVVQiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwNi1kYXRlLnNoIGIvdC90MDAwNi1kYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc1ZWU5YTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDA2LWRhdGUuc2gKQEAgLTAsMCArMSwxNTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGRhdGUgcGFyc2luZyBhbmQgcHJpbnRpbmcnCisuIC4vdGVzdC1saWIuc2gKKworIyBhcmJpdHJhcnkgcmVmZXJlbmNlIHRpbWU6IDIwMDktMDgtMzAgMTk6MjA6MDAKK0dJVF9URVNUX0RBVEVfTk9XPTEyNTE2NjAwMDA7IGV4cG9ydCBHSVRfVEVTVF9EQVRFX05PVworCitjaGVja19yZWxhdGl2ZSgpIHsKKwl0PSQoKCRHSVRfVEVTVF9EQVRFX05PVyAtICQxKSkKKwllY2hvICIkdCAtPiAkMiIgPmV4cGVjdAorCXRlc3RfZXhwZWN0XyR7Mzotc3VjY2Vzc30gInJlbGF0aXZlIGRhdGUgKCQyKSIgIgorCXRlc3QtdG9vbCBkYXRlIHJlbGF0aXZlICR0ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorCSIKK30KKworY2hlY2tfcmVsYXRpdmUgNSAnNSBzZWNvbmRzIGFnbycKK2NoZWNrX3JlbGF0aXZlIDMwMCAnNSBtaW51dGVzIGFnbycKK2NoZWNrX3JlbGF0aXZlIDE4MDAwICc1IGhvdXJzIGFnbycKK2NoZWNrX3JlbGF0aXZlIDQzMjAwMCAnNSBkYXlzIGFnbycKK2NoZWNrX3JlbGF0aXZlIDE3MjgwMDAgJzMgd2Vla3MgYWdvJworY2hlY2tfcmVsYXRpdmUgMTMwMDAwMDAgJzUgbW9udGhzIGFnbycKK2NoZWNrX3JlbGF0aXZlIDM3NTAwMDAwICcxIHllYXIsIDIgbW9udGhzIGFnbycKK2NoZWNrX3JlbGF0aXZlIDU1MTg4MDAwICcxIHllYXIsIDkgbW9udGhzIGFnbycKK2NoZWNrX3JlbGF0aXZlIDYzMDAwMDAwMCAnMjAgeWVhcnMgYWdvJworY2hlY2tfcmVsYXRpdmUgMzE0NDk2MDAgJzEyIG1vbnRocyBhZ28nCitjaGVja19yZWxhdGl2ZSA2Mjk4NTYwMCAnMiB5ZWFycyBhZ28nCisKK2NoZWNrX3Nob3cgKCkgeworCWZvcm1hdD0kMQorCXRpbWU9JDIKKwlleHBlY3Q9JDMKKwlwcmVyZXFzPSQ0CisJem9uZT0kNQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByZXJlcXMgInNob3cgZGF0ZSAoJGZvcm1hdDokdGltZSkiICcKKwkJZWNobyAiJHRpbWUgLT4gJGV4cGVjdCIgPmV4cGVjdCAmJgorCQlUWj0ke3pvbmU6LSRUWn0gdGVzdC10b29sIGRhdGUgc2hvdzoiJGZvcm1hdCIgIiR0aW1lIiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCit9CisKKyMgYXJiaXRyYXJ5IGJ1dCBzZW5zaWJsZSB0aW1lIGZvciBleGFtcGxlcworVElNRT0nMTQ2NjAwMDAwMCArMDIwMCcKK2NoZWNrX3Nob3cgaXNvODYwMSAiJFRJTUUiICcyMDE2LTA2LTE1IDE2OjEzOjIwICswMjAwJworY2hlY2tfc2hvdyBpc284NjAxLXN0cmljdCAiJFRJTUUiICcyMDE2LTA2LTE1VDE2OjEzOjIwKzAyOjAwJworY2hlY2tfc2hvdyByZmMyODIyICIkVElNRSIgJ1dlZCwgMTUgSnVuIDIwMTYgMTY6MTM6MjAgKzAyMDAnCitjaGVja19zaG93IHNob3J0ICIkVElNRSIgJzIwMTYtMDYtMTUnCitjaGVja19zaG93IGRlZmF1bHQgIiRUSU1FIiAnV2VkIEp1biAxNSAxNjoxMzoyMCAyMDE2ICswMjAwJworY2hlY2tfc2hvdyByYXcgIiRUSU1FIiAnMTQ2NjAwMDAwMCArMDIwMCcKK2NoZWNrX3Nob3cgdW5peCAiJFRJTUUiICcxNDY2MDAwMDAwJworY2hlY2tfc2hvdyBpc28tbG9jYWwgIiRUSU1FIiAnMjAxNi0wNi0xNSAxNDoxMzoyMCArMDAwMCcKK2NoZWNrX3Nob3cgcmF3LWxvY2FsICIkVElNRSIgJzE0NjYwMDAwMDAgKzAwMDAnCitjaGVja19zaG93IHVuaXgtbG9jYWwgIiRUSU1FIiAnMTQ2NjAwMDAwMCcKKworY2hlY2tfc2hvdyAnZm9ybWF0OiV6JyAiJFRJTUUiICcrMDIwMCcKK2NoZWNrX3Nob3cgJ2Zvcm1hdC1sb2NhbDoleicgIiRUSU1FIiAnKzAwMDAnCitjaGVja19zaG93ICdmb3JtYXQ6JVonICIkVElNRSIgJycKK2NoZWNrX3Nob3cgJ2Zvcm1hdC1sb2NhbDolWicgIiRUSU1FIiAnVVRDJworY2hlY2tfc2hvdyAnZm9ybWF0OiUleicgIiRUSU1FIiAnJXonCitjaGVja19zaG93ICdmb3JtYXQtbG9jYWw6JSV6JyAiJFRJTUUiICcleicKKworY2hlY2tfc2hvdyAnZm9ybWF0OiVZLSVtLSVkICVIOiVNOiVTJyAiJFRJTUUiICcyMDE2LTA2LTE1IDE2OjEzOjIwJworY2hlY2tfc2hvdyAnZm9ybWF0LWxvY2FsOiVZLSVtLSVkICVIOiVNOiVTJyAiJFRJTUUiICcyMDE2LTA2LTE1IDA5OjEzOjIwJyAnJyBFU1Q1CisKKyMgYXJiaXRyYXJ5IHRpbWUgYWJzdXJkbHkgZmFyIGluIHRoZSBmdXR1cmUKK0ZVVFVSRT0iNTc1ODEyMjI5NiAtMDQwMCIKK2NoZWNrX3Nob3cgaXNvICAgICAgICIkRlVUVVJFIiAiMjE1Mi0wNi0xOSAxODoyNDo1NiAtMDQwMCIgVElNRV9JU182NEJJVCxUSU1FX1RfSVNfNjRCSVQKK2NoZWNrX3Nob3cgaXNvLWxvY2FsICIkRlVUVVJFIiAiMjE1Mi0wNi0xOSAyMjoyNDo1NiArMDAwMCIgVElNRV9JU182NEJJVCxUSU1FX1RfSVNfNjRCSVQKKworY2hlY2tfcGFyc2UoKSB7CisJZWNobyAiJDEgLT4gJDIiID5leHBlY3QKKwl0ZXN0X2V4cGVjdF8kezQ6LXN1Y2Nlc3N9ICJwYXJzZSBkYXRlICgkMSR7MzorIFRaPSQzfSkiICIKKwlUWj0kezM6LSRUWn0gdGVzdC10b29sIGRhdGUgcGFyc2UgJyQxJyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSIKK30KKworY2hlY2tfcGFyc2UgMjAwOCBiYWQKK2NoZWNrX3BhcnNlIDIwMDgtMDIgYmFkCitjaGVja19wYXJzZSAyMDA4LTAyLTE0IGJhZAorY2hlY2tfcGFyc2UgJzIwMDgtMDItMTQgMjA6MzA6NDUnICcyMDA4LTAyLTE0IDIwOjMwOjQ1ICswMDAwJworY2hlY2tfcGFyc2UgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTA1MDAnICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wNTAwJworY2hlY2tfcGFyc2UgJzIwMDguMDIuMTQgMjA6MzA6NDUgLTA1MDAnICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wNTAwJworY2hlY2tfcGFyc2UgJzIwMDgwMjE0VDIwMzA0NS0wNDowMCcgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTA0MDAnCitjaGVja19wYXJzZSAnMjAwODAyMTRUMjAzMDQ1IC0wNDowMCcgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTA0MDAnCitjaGVja19wYXJzZSAnMjAwODAyMTRUMjAzMDQ1LjAxOS0wNDowMCcgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTA0MDAnCitjaGVja19wYXJzZSAnMjAwOC0wMi0xNCAyMDozMDo0NS4wMTktMDQ6MDAnICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wNDAwJworY2hlY2tfcGFyc2UgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTAwMTUnICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wMDE1JworY2hlY2tfcGFyc2UgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTUnICcyMDA4LTAyLTE0IDIwOjMwOjQ1ICswMDAwJworY2hlY2tfcGFyc2UgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTU6JyAnMjAwOC0wMi0xNCAyMDozMDo0NSArMDAwMCcKK2NoZWNrX3BhcnNlICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wNScgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTA1MDAnCitjaGVja19wYXJzZSAnMjAwOC0wMi0xNCAyMDozMDo0NSAtOjMwJyAnMjAwOC0wMi0xNCAyMDozMDo0NSArMDAwMCcKK2NoZWNrX3BhcnNlICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wNTowMCcgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTA1MDAnCitjaGVja19wYXJzZSAnMjAwOC0wMi0xNCAyMDozMDo0NScgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTA1MDAnIEVTVDUKKworY2hlY2tfYXBwcm94aWRhdGUoKSB7CisJZWNobyAiJDEgLT4gJDIgKzAwMDAiID5leHBlY3QKKwl0ZXN0X2V4cGVjdF8kezM6LXN1Y2Nlc3N9ICJwYXJzZSBhcHByb3hpZGF0ZSAoJDEpIiAiCisJdGVzdC10b29sIGRhdGUgYXBwcm94aWRhdGUgJyQxJyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSIKK30KKworY2hlY2tfYXBwcm94aWRhdGUgbm93ICcyMDA5LTA4LTMwIDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzUgc2Vjb25kcyBhZ28nICcyMDA5LTA4LTMwIDE5OjE5OjU1JworY2hlY2tfYXBwcm94aWRhdGUgNS5zZWNvbmRzLmFnbyAnMjAwOS0wOC0zMCAxOToxOTo1NScKK2NoZWNrX2FwcHJveGlkYXRlIDEwLm1pbnV0ZXMuYWdvICcyMDA5LTA4LTMwIDE5OjEwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgeWVzdGVyZGF5ICcyMDA5LTA4LTI5IDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgMy5kYXlzLmFnbyAnMjAwOS0wOC0yNyAxOToyMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICcxMjozNDo1Ni4zLmRheXMuYWdvJyAnMjAwOS0wOC0yNyAxMjozNDo1NicKK2NoZWNrX2FwcHJveGlkYXRlIDMud2Vla3MuYWdvICcyMDA5LTA4LTA5IDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgMy5tb250aHMuYWdvICcyMDA5LTA1LTMwIDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgMi55ZWFycy4zLm1vbnRocy5hZ28gJzIwMDctMDUtMzAgMTk6MjA6MDAnCisKK2NoZWNrX2FwcHJveGlkYXRlICc2YW0geWVzdGVyZGF5JyAnMjAwOS0wOC0yOSAwNjowMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICc2cG0geWVzdGVyZGF5JyAnMjAwOS0wOC0yOSAxODowMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICczOjAwJyAnMjAwOS0wOC0zMCAwMzowMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICcxNTowMCcgJzIwMDktMDgtMzAgMTU6MDA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnbm9vbiB0b2RheScgJzIwMDktMDgtMzAgMTI6MDA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnbm9vbiB5ZXN0ZXJkYXknICcyMDA5LTA4LTI5IDEyOjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJ0phbnVhcnkgNXRoIG5vb24gcG0nICcyMDA5LTAxLTA1IDEyOjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzEwYW0gbm9vbicgJzIwMDktMDgtMjkgMTI6MDA6MDAnCisKK2NoZWNrX2FwcHJveGlkYXRlICdsYXN0IHR1ZXNkYXknICcyMDA5LTA4LTI1IDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJ0p1bHkgNXRoJyAnMjAwOS0wNy0wNSAxOToyMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICcwNi8wNS8yMDA5JyAnMjAwOS0wNi0wNSAxOToyMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICcwNi4wNS4yMDA5JyAnMjAwOS0wNS0wNiAxOToyMDowMCcKKworY2hlY2tfYXBwcm94aWRhdGUgJ0p1biA2LCA1QU0nICcyMDA5LTA2LTA2IDA1OjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzVBTSBKdW4gNicgJzIwMDktMDYtMDYgMDU6MDA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnNkFNLCBKdW5lIDcsIDIwMDknICcyMDA5LTA2LTA3IDA2OjAwOjAwJworCitjaGVja19hcHByb3hpZGF0ZSAnMjAwOC0xMi0wMScgJzIwMDgtMTItMDEgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnMjAwOS0xMi0wMScgJzIwMDktMTItMDEgMTk6MjA6MDAnCisKK2NoZWNrX2RhdGVfZm9ybWF0X2h1bWFuKCkgeworCXQ9JCgoJEdJVF9URVNUX0RBVEVfTk9XIC0gJDEpKQorCWVjaG8gIiR0IC0+ICQyIiA+ZXhwZWN0CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaHVtYW4gZGF0ZSAkdCIgJworCQl0ZXN0LXRvb2wgZGF0ZSBodW1hbiAkdCA+YWN0dWFsICYmCisJCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCit9CisKK2NoZWNrX2RhdGVfZm9ybWF0X2h1bWFuIDE4MDAwICI1IGhvdXJzIGFnbyIgIyA1IGhvdXJzIGFnbworY2hlY2tfZGF0ZV9mb3JtYXRfaHVtYW4gNDMyMDAwICJUdWUgQXVnIDI1IDE5OjIwIiAjIDUgZGF5cyBhZ28KK2NoZWNrX2RhdGVfZm9ybWF0X2h1bWFuIDE3MjgwMDAgIk1vbiBBdWcgMTAgMTk6MjAiICMgMyB3ZWVrcyBhZ28KK2NoZWNrX2RhdGVfZm9ybWF0X2h1bWFuIDEzMDAwMDAwICJUaHUgQXByIDIgMDg6MTMiICMgNSBtb250aHMgYWdvCitjaGVja19kYXRlX2Zvcm1hdF9odW1hbiAzMTQ0OTYwMCAiQXVnIDMxIDIwMDgiICMgMTIgbW9udGhzIGFnbworY2hlY2tfZGF0ZV9mb3JtYXRfaHVtYW4gMzc1MDAwMDAgIkp1biAyMiAyMDA4IiAjIDEgeWVhciwgMiBtb250aHMgYWdvCitjaGVja19kYXRlX2Zvcm1hdF9odW1hbiA1NTE4ODAwMCAiRGVjIDEgMjAwNyIgIyAxIHllYXIsIDkgbW9udGhzIGFnbworY2hlY2tfZGF0ZV9mb3JtYXRfaHVtYW4gNjMwMDAwMDAwICJTZXAgMTMgMTk4OSIgIyAyMCB5ZWFycyBhZ28KKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDA3LWdpdC12YXIuc2ggYi90L3QwMDA3LWdpdC12YXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODhiOWFlOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDctZ2l0LXZhci5zaApAQCAtMCwwICsxLDQ5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgc2FuaXR5IGNoZWNrcyBmb3IgZ2l0IHZhcicKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgR0lUX0FVVEhPUl9JREVOVCcgJworCXRlc3RfdGljayAmJgorCWVjaG8gIiRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiAkR0lUX0FVVEhPUl9EQVRFIiA+ZXhwZWN0ICYmCisJZ2l0IHZhciBHSVRfQVVUSE9SX0lERU5UID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCBHSVRfQ09NTUlUVEVSX0lERU5UJyAnCisJdGVzdF90aWNrICYmCisJZWNobyAiJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUiID5leHBlY3QgJiYKKwlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhRkFJTF9QUkVSRVFTLCFBVVRPSURFTlQgJ3JlcXVlc3RlZCBpZGVudGl0aWVzIGFyZSBzdHJpY3QnICcKKwkoCisJCXNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9OQU1FICYmCisJCXNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9FTUFJTCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQKKwkpCisnCisKKyMgRm9yIGdpdCB2YXIgLWwsIHdlIGNoZWNrIG9ubHkgYSByZXByZXNlbnRhdGl2ZSB2YXJpYWJsZTsKKyMgdGVzdGluZyB0aGUgd2hvbGUgb3V0cHV0IHdvdWxkIG1ha2Ugb3VyIHRlc3QgdG9vIGJyaXR0bGUgd2l0aAorIyByZXNwZWN0IHRvIHVucmVsYXRlZCBjaGFuZ2VzIGluIHRoZSB0ZXN0IHN1aXRlJ3MgZW52aXJvbm1lbnQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgdmFyIC1sIGxpc3RzIHZhcmlhYmxlcycgJworCWdpdCB2YXIgLWwgPmFjdHVhbCAmJgorCWVjaG8gIiRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiAkR0lUX0FVVEhPUl9EQVRFIiA+ZXhwZWN0ICYmCisJc2VkIC1uIHMvR0lUX0FVVEhPUl9JREVOVD0vL3AgPGFjdHVhbCA+YWN0dWFsLmF1dGhvciAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuYXV0aG9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB2YXIgLWwgbGlzdHMgY29uZmlnJyAnCisJZ2l0IHZhciAtbCA+YWN0dWFsICYmCisJZWNobyBmYWxzZSA+ZXhwZWN0ICYmCisJc2VkIC1uIHMvY29yZVxcLmJhcmU9Ly9wIDxhY3R1YWwgPmFjdHVhbC5iYXJlICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5iYXJlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgYW5kIGFza2luZyBmb3IgdmFyaWFibGVzIGFyZSBleGNsdXNpdmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdmFyIC1sIEdJVF9DT01NSVRURVJfSURFTlQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDA4LWlnbm9yZXMuc2ggYi90L3QwMDA4LWlnbm9yZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzcwYTM4OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDgtaWdub3Jlcy5zaApAQCAtMCwwICsxLDg2OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Y2hlY2staWdub3JlCisKKy4gLi90ZXN0LWxpYi5zaAorCitpbml0X3ZhcnMgKCkgeworCWdsb2JhbF9leGNsdWRlcz0iZ2xvYmFsLWV4Y2x1ZGVzIgorfQorCitlbmFibGVfZ2xvYmFsX2V4Y2x1ZGVzICgpIHsKKwlpbml0X3ZhcnMgJiYKKwlnaXQgY29uZmlnIGNvcmUuZXhjbHVkZXNmaWxlICIkZ2xvYmFsX2V4Y2x1ZGVzIgorfQorCitleHBlY3RfaW4gKCkgeworCWRlc3Q9IiRIT01FL2V4cGVjdGVkLSQxIiB0ZXh0PSIkMiIKKwlpZiB0ZXN0IC16ICIkdGV4dCIKKwl0aGVuCisJCT4iJGRlc3QiICMgYXZvaWQgbmV3bGluZQorCWVsc2UKKwkJZWNobyAiJHRleHQiID4iJGRlc3QiCisJZmkKK30KKworZXhwZWN0ICgpIHsKKwlleHBlY3RfaW4gc3Rkb3V0ICIkMSIKK30KKworZXhwZWN0X2Zyb21fc3RkaW4gKCkgeworCWNhdCA+IiRIT01FL2V4cGVjdGVkLXN0ZG91dCIKK30KKwordGVzdF9zdGRlcnIgKCkgeworCWV4cGVjdGVkPSIkMSIKKwlleHBlY3RfaW4gc3RkZXJyICIkMSIgJiYKKwl0ZXN0X2kxOG5jbXAgIiRIT01FL2V4cGVjdGVkLXN0ZGVyciIgIiRIT01FL3N0ZGVyciIKK30KKworYnJva2VuX2NfdW5xdW90ZSAoKSB7CisJIiRQRVJMX1BBVEgiIC1wZSAncy9eIi8vOyBzL1xcLy87IHMvIiQvLzsgdHIvXG4vXDAvJyAiJEAiCit9CisKK2Jyb2tlbl9jX3VucXVvdGVfdmVyYm9zZSAoKSB7CisJIiRQRVJMX1BBVEgiIC1wZSAncy8JIi8JLzsgcy9cXC8vOyBzLyIkLy87IHRyLzpcdFxuL1wwLycgIiRAIgorfQorCitzdGRlcnJfY29udGFpbnMgKCkgeworCXJlZ2V4cD0iJDEiCisJaWYgdGVzdF9pMThuZ3JlcCAiJHJlZ2V4cCIgIiRIT01FL3N0ZGVyciIKKwl0aGVuCisJCXJldHVybiAwCisJZWxzZQorCQllY2hvICJkaWRuJ3QgZmluZCAvJHJlZ2V4cC8gaW4gJEhPTUUvc3RkZXJyIgorCQljYXQgIiRIT01FL3N0ZGVyciIKKwkJcmV0dXJuIDEKKwlmaQorfQorCitzdGRlcnJfZW1wdHlfb25fc3VjY2VzcyAoKSB7CisJZXhwZWN0X2NvZGU9IiQxIgorCWlmIHRlc3QgJGV4cGVjdF9jb2RlID0gMAorCXRoZW4KKwkJdGVzdF9zdGRlcnIgIiIKKwllbHNlCisJCSMgSWYgd2UgZXhwZWN0IGZhaWx1cmUgdGhlbiBzdGRlcnIgbWlnaHQgb3IgbWlnaHQgbm90IGJlIGVtcHR5CisJCSMgZHVlIHRvIC0tcXVpZXQgLSB0aGUgY2FsbGVyIGNhbiBjaGVjayBpdHMgY29udGVudHMKKwkJcmV0dXJuIDAKKwlmaQorfQorCit0ZXN0X2NoZWNrX2lnbm9yZSAoKSB7CisJYXJncz0iJDEiIGV4cGVjdF9jb2RlPSIkezI6LTB9IiBnbG9iYWxfYXJncz0iJDMiCisKKwlpbml0X3ZhcnMgJiYKKwlybSAtZiAiJEhPTUUvc3Rkb3V0IiAiJEhPTUUvc3RkZXJyIiAiJEhPTUUvY21kIiAmJgorCWVjaG8gZ2l0ICRnbG9iYWxfYXJncyBjaGVjay1pZ25vcmUgJHF1aWV0X29wdCAkdmVyYm9zZV9vcHQgJG5vbl9tYXRjaGluZ19vcHQgJG5vX2luZGV4X29wdCAkYXJncyBcCisJCT4iJEhPTUUvY21kIiAmJgorCWVjaG8gIiRleHBlY3RfY29kZSIgPiIkSE9NRS9leHBlY3RlZC1leGl0LWNvZGUiICYmCisJdGVzdF9leHBlY3RfY29kZSAiJGV4cGVjdF9jb2RlIiBcCisJCWdpdCAkZ2xvYmFsX2FyZ3MgY2hlY2staWdub3JlICRxdWlldF9vcHQgJHZlcmJvc2Vfb3B0ICRub25fbWF0Y2hpbmdfb3B0ICRub19pbmRleF9vcHQgJGFyZ3MgXAorCQk+IiRIT01FL3N0ZG91dCIgMj4iJEhPTUUvc3RkZXJyIiAmJgorCXRlc3RfY21wICIkSE9NRS9leHBlY3RlZC1zdGRvdXQiICIkSE9NRS9zdGRvdXQiICYmCisJc3RkZXJyX2VtcHR5X29uX3N1Y2Nlc3MgIiRleHBlY3RfY29kZSIKK30KKworIyBSdW5zIHRoZSBzYW1lIGNvZGUgd2l0aCA0IGRpZmZlcmVudCBsZXZlbHMgb2Ygb3V0cHV0IHZlcmJvc2l0eToKKyMKKyMgICAxLiB3aXRoIC1xIC8gLS1xdWlldAorIyAgIDIuIHdpdGggZGVmYXVsdCB2ZXJib3NpdHkKKyMgICAzLiB3aXRoIC12IC8gLS12ZXJib3NlCisjICAgNC4gd2l0aCAtdiAvIC0tdmVyYm9zZSwgKmFuZCogLW4gLyAtLW5vbi1tYXRjaGluZworIworIyBleHBlY3Rpbmcgc3VjY2VzcyBlYWNoIHRpbWUuICBUYWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdAorIyBjaGVjay1pZ25vcmUgLS12ZXJib3NlIG91dHB1dCBpcyB0aGUgc2FtZSBhcyBub3JtYWwgb3V0cHV0IGV4Y2VwdAorIyBmb3IgdGhlIGV4dHJhIGZpcnN0IGNvbHVtbi4KKyMKKyMgQSBwYXJhbWV0ZXIgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHRlc3RzIGFyZSBydW4gd2l0aCB0aGUKKyMgbm9ybWFsIGNhc2UgKHVzaW5nIHRoZSBpbmRleCksIG9yIHdpdGggdGhlIC0tbm8taW5kZXggb3B0aW9uLgorIworIyBBcmd1bWVudHM6CisjICAgLSAob3B0aW9uYWwpIHByZXJlcXMgZm9yIHRoaXMgdGVzdCwgZS5nLiAnU1lNTElOS1MnCisjICAgLSB0ZXN0IG5hbWUKKyMgICAtIG91dHB1dCB0byBleHBlY3QgZnJvbSB0aGUgZm91cnRoIHZlcmJvc2l0eSBtb2RlICh0aGUgb3V0cHV0CisjICAgICBmcm9tIHRoZSBvdGhlciB2ZXJib3NpdHkgbW9kZXMgaXMgYXV0b21hdGljYWxseSBpbmZlcnJlZAorIyAgICAgZnJvbSB0aGlzIHZhbHVlKQorIyAgIC0gY29kZSB0byBydW4gKHNob3VsZCBpbnZva2UgdGVzdF9jaGVja19pZ25vcmUpCisjICAgLSBpbmRleCBvcHRpb246IC0taW5kZXggb3IgLS1uby1pbmRleAordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aXBsZSAoKSB7CisJcHJlcmVxPQorCWlmIHRlc3QgJCMgLWVxIDUKKwl0aGVuCisJCXByZXJlcT0kMQorCQlzaGlmdAorCWZpCisJaWYgdGVzdCAiJDQiID0gIi0taW5kZXgiCisJdGhlbgorCQlub19pbmRleF9vcHQ9CisJZWxzZQorCQlub19pbmRleF9vcHQ9JDQKKwlmaQorCXRlc3RuYW1lPSIkMSIgZXhwZWN0X2FsbD0iJDIiIGNvZGU9IiQzIgorCisJZXhwZWN0X3ZlcmJvc2U9JCggZWNobyAiJGV4cGVjdF9hbGwiIHwgZ3JlcCAtdiAnXjo6CScgKQorCWV4cGVjdD0kKCBlY2hvICIkZXhwZWN0X3ZlcmJvc2UiIHwgc2VkIC1lICdzLy4qCS8vJyApCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwcmVyZXEgIiR0ZXN0bmFtZSR7bm9faW5kZXhfb3B0Oisgd2l0aCAkbm9faW5kZXhfb3B0fSIgJworCQlleHBlY3QgIiRleHBlY3QiICYmCisJCWV2YWwgIiRjb2RlIgorCScKKworCSMgLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdoZW4gYSBzaW5nbGUgcGF0dGVybiBpcyBwYXNzZWQKKwlpZiB0ZXN0ICQoIGVjaG8gIiRleHBlY3RfYWxsIiB8IHdjIC1sICkgPSAxCisJdGhlbgorCQlmb3IgcXVpZXRfb3B0IGluICctcScgJy0tcXVpZXQnCisJCWRvCisJCQlvcHRzPSIke25vX2luZGV4X29wdDorJG5vX2luZGV4X29wdCB9JHF1aWV0X29wdCIKKwkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByZXJlcSAiJHRlc3RuYW1lJHtvcHRzOisgd2l0aCAkb3B0c30iICIKKwkJCWV4cGVjdCAnJyAmJgorCQkJJGNvZGUKKwkJIgorCQlkb25lCisJCXF1aWV0X29wdD0KKwlmaQorCisJZm9yIHZlcmJvc2Vfb3B0IGluICctdicgJy0tdmVyYm9zZScKKwlkbworCQlmb3Igbm9uX21hdGNoaW5nX29wdCBpbiAnJyAnLW4nICctLW5vbi1tYXRjaGluZycKKwkJZG8KKwkJCWlmIHRlc3QgLW4gIiRub25fbWF0Y2hpbmdfb3B0IgorCQkJdGhlbgorCQkJCW15X2V4cGVjdD0iJGV4cGVjdF9hbGwiCisJCQllbHNlCisJCQkJbXlfZXhwZWN0PSIkZXhwZWN0X3ZlcmJvc2UiCisJCQlmaQorCisJCQl0ZXN0X2NvZGU9IgorCQkJCWV4cGVjdCAnJG15X2V4cGVjdCcgJiYKKwkJCQkkY29kZQorCQkJIgorCQkJb3B0cz0iJHtub19pbmRleF9vcHQ6KyRub19pbmRleF9vcHQgfSR2ZXJib3NlX29wdCR7bm9uX21hdGNoaW5nX29wdDorICRub25fbWF0Y2hpbmdfb3B0fSIKKwkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByZXJlcSAiJHRlc3RuYW1lJHtvcHRzOisgd2l0aCAkb3B0c30iICIkdGVzdF9jb2RlIgorCQlkb25lCisJZG9uZQorCXZlcmJvc2Vfb3B0PQorCW5vbl9tYXRjaGluZ19vcHQ9CisJbm9faW5kZXhfb3B0PQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpcGxlICIkQCIgIi0taW5kZXgiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Nfbm9faW5kZXhfbXVsdGkgKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGlwbGUgIiRAIiAiLS1uby1pbmRleCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlpbml0X3ZhcnMgJiYKKwlta2RpciAtcCBhL2IvaWdub3JlZC1kaXIgYS9zdWJtb2R1bGUgYiAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKKwl0aGVuCisJCWxuIC1zIGIgYS9zeW1saW5rCisJZmkgJiYKKwkoCisJCWNkIGEvc3VibW9kdWxlICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gYSA+YSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSJjb21taXQgaW4gc3VibW9kdWxlIgorCSkgJiYKKwlnaXQgYWRkIGEvc3VibW9kdWxlICYmCisJY2F0IDw8LVxFT0YgPi5naXRpZ25vcmUgJiYKKwkJb25lCisJCWlnbm9yZWQtKgorCQl0b3AtbGV2ZWwtZGlyLworCUVPRgorCWZvciBkaXIgaW4gLiBhCisJZG8KKwkJOiA+JGRpci9ub3QtaWdub3JlZCAmJgorCQk6ID4kZGlyL2lnbm9yZWQtYW5kLXVudHJhY2tlZCAmJgorCQk6ID4kZGlyL2lnbm9yZWQtYnV0LWluLWluZGV4CisJZG9uZSAmJgorCWdpdCBhZGQgLWYgaWdub3JlZC1idXQtaW4taW5kZXggYS9pZ25vcmVkLWJ1dC1pbi1pbmRleCAmJgorCWNhdCA8PC1cRU9GID5hLy5naXRpZ25vcmUgJiYKKwkJdHdvKgorCQkqdGhyZWUKKwlFT0YKKwljYXQgPDwtXEVPRiA+YS9iLy5naXRpZ25vcmUgJiYKKwkJZm91cgorCQlmaXZlCisJCSMgdGhpcyBjb21tZW50IHNob3VsZCBhZmZlY3QgdGhlIGxpbmUgbnVtYmVycworCQlzaXgKKwkJaWdub3JlZC1kaXIvCisJCSMgYW5kIHNvIHNob3VsZCB0aGlzIGJsYW5rIGxpbmU6CisKKwkJIW9uKgorCQkhdHdvCisJRU9GCisJZWNobyAic2V2ZW4iID5hL2IvaWdub3JlZC1kaXIvLmdpdGlnbm9yZSAmJgorCXRlc3QgLW4gIiRIT01FIiAmJgorCWNhdCA8PC1cRU9GID4iJGdsb2JhbF9leGNsdWRlcyIgJiYKKwkJZ2xvYmFsb25lCisJCSFnbG9iYWx0d28KKwkJZ2xvYmFsdGhyZWUKKwlFT0YKKwljYXQgPDwtXEVPRiA+Pi5naXQvaW5mby9leGNsdWRlCisJCXBlci1yZXBvCisJRU9GCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgdGVzdCBpbnZhbGlkIGlucHV0cworCit0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICcuIGNvcm5lci1jYXNlJyAnOjoJLicgJworCXRlc3RfY2hlY2tfaWdub3JlIC4gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICdlbXB0eSBjb21tYW5kIGxpbmUnICcnICcKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiIiAxMjggJiYKKwlzdGRlcnJfY29udGFpbnMgImZhdGFsOiBubyBwYXRoIHNwZWNpZmllZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnLS1zdGRpbiB3aXRoIGVtcHR5IFNURElOJyAnJyAnCisJdGVzdF9jaGVja19pZ25vcmUgIi0tc3RkaW4iIDEgPC9kZXYvbnVsbCAmJgorCXRlc3Rfc3RkZXJyICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1xIHdpdGggbXVsdGlwbGUgYXJncycgJworCWV4cGVjdCAiIiAmJgorCXRlc3RfY2hlY2tfaWdub3JlICItcSBvbmUgdHdvIiAxMjggJiYKKwlzdGRlcnJfY29udGFpbnMgImZhdGFsOiAtLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1xdWlldCB3aXRoIG11bHRpcGxlIGFyZ3MnICcKKwlleHBlY3QgIiIgJiYKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLS1xdWlldCBvbmUgdHdvIiAxMjggJiYKKwlzdGRlcnJfY29udGFpbnMgImZhdGFsOiAtLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKKycKKworZm9yIHZlcmJvc2Vfb3B0IGluICctdicgJy0tdmVyYm9zZScKK2RvCisJZm9yIHF1aWV0X29wdCBpbiAnLXEnICctLXF1aWV0JworCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRxdWlldF9vcHQgJHZlcmJvc2Vfb3B0IiAiCisJCQlleHBlY3QgJycgJiYKKwkJCXRlc3RfY2hlY2tfaWdub3JlICckcXVpZXRfb3B0ICR2ZXJib3NlX29wdCBmb28nIDEyOCAmJgorCQkJc3RkZXJyX2NvbnRhaW5zICdmYXRhbDogY2Fubm90IGhhdmUgYm90aCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UnCisJCSIKKwlkb25lCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcXVpZXQgd2l0aCBtdWx0aXBsZSBhcmdzJyAnCisJZXhwZWN0ICIiICYmCisJdGVzdF9jaGVja19pZ25vcmUgIi0tcXVpZXQgb25lIHR3byIgMTI4ICYmCisJc3RkZXJyX2NvbnRhaW5zICJmYXRhbDogLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgJ2Vycm9uZW91cyB1c2Ugb2YgLS0nICcnICcKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLS0iIDEyOCAmJgorCXN0ZGVycl9jb250YWlucyAiZmF0YWw6IG5vIHBhdGggc3BlY2lmaWVkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICctLXN0ZGluIHdpdGggc3VwZXJmbHVvdXMgYXJnJyAnJyAnCisJdGVzdF9jaGVja19pZ25vcmUgIi0tc3RkaW4gZm9vIiAxMjggJiYKKwlzdGRlcnJfY29udGFpbnMgImZhdGFsOiBjYW5ub3Qgc3BlY2lmeSBwYXRobmFtZXMgd2l0aCAtLXN0ZGluIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICctLXN0ZGluIC16IHdpdGggc3VwZXJmbHVvdXMgYXJnJyAnJyAnCisJdGVzdF9jaGVja19pZ25vcmUgIi0tc3RkaW4gLXogZm9vIiAxMjggJiYKKwlzdGRlcnJfY29udGFpbnMgImZhdGFsOiBjYW5ub3Qgc3BlY2lmeSBwYXRobmFtZXMgd2l0aCAtLXN0ZGluIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICcteiB3aXRob3V0IC0tc3RkaW4nICcnICcKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLXoiIDEyOCAmJgorCXN0ZGVycl9jb250YWlucyAiZmF0YWw6IC16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICcteiB3aXRob3V0IC0tc3RkaW4gYW5kIHN1cGVyZmx1b3VzIGFyZycgJycgJworCXRlc3RfY2hlY2tfaWdub3JlICIteiBmb28iIDEyOCAmJgorCXN0ZGVycl9jb250YWlucyAiZmF0YWw6IC16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICduZWVkcyB3b3JrIHRyZWUnICcnICcKKwkoCisJCWNkIC5naXQgJiYKKwkJdGVzdF9jaGVja19pZ25vcmUgImZvbyIgMTI4CisJKSAmJgorCXN0ZGVycl9jb250YWlucyAiZmF0YWw6IHRoaXMgb3BlcmF0aW9uIG11c3QgYmUgcnVuIGluIGEgd29yayB0cmVlIgorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHRlc3Qgc3RhbmRhcmQgaWdub3JlcworCisjIEZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBwcmVzZW5jZSBvZiBhIGZpbGUgaW4gdGhlIHdvcmtpbmcgdHJlZQorIyBkb2VzIG5vdCBpbXBhY3QgcmVzdWx0cywgYnV0IHRoYXQgdGhlIHByZXNlbmNlIG9mIGEgZmlsZSBpbiB0aGUKKyMgaW5kZXggZG9lcyB1bmxlc3MgdGhlIC0tbm8taW5kZXggb3B0aW9uIGlzIHVzZWQuCisKK2ZvciBzdWJkaXIgaW4gJycgJ2EvJworZG8KKwlpZiB0ZXN0IC16ICIkc3ViZGlyIgorCXRoZW4KKwkJd2hlcmU9ImF0IHRvcC1sZXZlbCIKKwllbHNlCisJCXdoZXJlPSJpbiBzdWJkaXIgJHN1YmRpciIKKwlmaQorCisJdGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAibm9uLWV4aXN0ZW50IGZpbGUgJHdoZXJlIG5vdCBpZ25vcmVkIiBcCisJCSI6Ogkke3N1YmRpcn1ub24tZXhpc3RlbnQiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1ub24tZXhpc3RlbnQnIDEiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX25vX2luZGV4X211bHRpICJub24tZXhpc3RlbnQgZmlsZSAkd2hlcmUgbm90IGlnbm9yZWQiIFwKKwkJIjo6CSR7c3ViZGlyfW5vbi1leGlzdGVudCIgXAorCQkidGVzdF9jaGVja19pZ25vcmUgJyR7c3ViZGlyfW5vbi1leGlzdGVudCcgMSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgIm5vbi1leGlzdGVudCBmaWxlICR3aGVyZSBpZ25vcmVkIiBcCisJCSIuZ2l0aWdub3JlOjE6b25lCSR7c3ViZGlyfW9uZSIgXAorCQkidGVzdF9jaGVja19pZ25vcmUgJyR7c3ViZGlyfW9uZSciCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX25vX2luZGV4X211bHRpICJub24tZXhpc3RlbnQgZmlsZSAkd2hlcmUgaWdub3JlZCIgXAorCQkiLmdpdGlnbm9yZToxOm9uZQkke3N1YmRpcn1vbmUiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1vbmUnIgorCisJdGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAiZXhpc3RpbmcgdW50cmFja2VkIGZpbGUgJHdoZXJlIG5vdCBpZ25vcmVkIiBcCisJCSI6Ogkke3N1YmRpcn1ub3QtaWdub3JlZCIgXAorCQkidGVzdF9jaGVja19pZ25vcmUgJyR7c3ViZGlyfW5vdC1pZ25vcmVkJyAxIgorCisJdGVzdF9leHBlY3Rfc3VjY2Vzc19ub19pbmRleF9tdWx0aSAiZXhpc3RpbmcgdW50cmFja2VkIGZpbGUgJHdoZXJlIG5vdCBpZ25vcmVkIiBcCisJCSI6Ogkke3N1YmRpcn1ub3QtaWdub3JlZCIgXAorCQkidGVzdF9jaGVja19pZ25vcmUgJyR7c3ViZGlyfW5vdC1pZ25vcmVkJyAxIgorCisJdGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAiZXhpc3RpbmcgdHJhY2tlZCBmaWxlICR3aGVyZSBub3QgaWdub3JlZCIgXAorCQkiOjoJJHtzdWJkaXJ9aWdub3JlZC1idXQtaW4taW5kZXgiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1pZ25vcmVkLWJ1dC1pbi1pbmRleCcgMSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3Nfbm9faW5kZXhfbXVsdGkgImV4aXN0aW5nIHRyYWNrZWQgZmlsZSAkd2hlcmUgc2hvd24gYXMgaWdub3JlZCIgXAorCQkiLmdpdGlnbm9yZToyOmlnbm9yZWQtKgkke3N1YmRpcn1pZ25vcmVkLWJ1dC1pbi1pbmRleCIgXAorCQkidGVzdF9jaGVja19pZ25vcmUgJyR7c3ViZGlyfWlnbm9yZWQtYnV0LWluLWluZGV4JyIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgImV4aXN0aW5nIHVudHJhY2tlZCBmaWxlICR3aGVyZSBpZ25vcmVkIiBcCisJCSIuZ2l0aWdub3JlOjI6aWdub3JlZC0qCSR7c3ViZGlyfWlnbm9yZWQtYW5kLXVudHJhY2tlZCIgXAorCQkidGVzdF9jaGVja19pZ25vcmUgJyR7c3ViZGlyfWlnbm9yZWQtYW5kLXVudHJhY2tlZCciCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX25vX2luZGV4X211bHRpICJleGlzdGluZyB1bnRyYWNrZWQgZmlsZSAkd2hlcmUgaWdub3JlZCIgXAorCQkiLmdpdGlnbm9yZToyOmlnbm9yZWQtKgkke3N1YmRpcn1pZ25vcmVkLWFuZC11bnRyYWNrZWQiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1pZ25vcmVkLWFuZC11bnRyYWNrZWQnIgorCisJdGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAibWl4IG9mIGZpbGUgdHlwZXMgJHdoZXJlIiBcCisiOjoJJHtzdWJkaXJ9bm9uLWV4aXN0ZW50CisuZ2l0aWdub3JlOjE6b25lCSR7c3ViZGlyfW9uZQorOjoJJHtzdWJkaXJ9bm90LWlnbm9yZWQKKzo6CSR7c3ViZGlyfWlnbm9yZWQtYnV0LWluLWluZGV4CisuZ2l0aWdub3JlOjI6aWdub3JlZC0qCSR7c3ViZGlyfWlnbm9yZWQtYW5kLXVudHJhY2tlZCIgXAorCQkidGVzdF9jaGVja19pZ25vcmUgJworCQkJJHtzdWJkaXJ9bm9uLWV4aXN0ZW50CisJCQkke3N1YmRpcn1vbmUKKwkJCSR7c3ViZGlyfW5vdC1pZ25vcmVkCisJCQkke3N1YmRpcn1pZ25vcmVkLWJ1dC1pbi1pbmRleAorCQkJJHtzdWJkaXJ9aWdub3JlZC1hbmQtdW50cmFja2VkJworCQkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX25vX2luZGV4X211bHRpICJtaXggb2YgZmlsZSB0eXBlcyAkd2hlcmUiIFwKKyI6Ogkke3N1YmRpcn1ub24tZXhpc3RlbnQKKy5naXRpZ25vcmU6MTpvbmUJJHtzdWJkaXJ9b25lCis6Ogkke3N1YmRpcn1ub3QtaWdub3JlZAorLmdpdGlnbm9yZToyOmlnbm9yZWQtKgkke3N1YmRpcn1pZ25vcmVkLWJ1dC1pbi1pbmRleAorLmdpdGlnbm9yZToyOmlnbm9yZWQtKgkke3N1YmRpcn1pZ25vcmVkLWFuZC11bnRyYWNrZWQiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcKKwkJCSR7c3ViZGlyfW5vbi1leGlzdGVudAorCQkJJHtzdWJkaXJ9b25lCisJCQkke3N1YmRpcn1ub3QtaWdub3JlZAorCQkJJHtzdWJkaXJ9aWdub3JlZC1idXQtaW4taW5kZXgKKwkJCSR7c3ViZGlyfWlnbm9yZWQtYW5kLXVudHJhY2tlZCcKKwkJIgorZG9uZQorCisjIEhhdmluZyBlc3RhYmxpc2hlZCB0aGUgYWJvdmUsIGZyb20gbm93IG9uIHdlIG1vc3RseSB0ZXN0IGFnYWluc3QKKyMgZmlsZXMgd2hpY2ggZG8gbm90IGV4aXN0IGluIHRoZSB3b3JraW5nIHRyZWUgb3IgaW5kZXguCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Yi1kaXJlY3RvcnkgbG9jYWwgaWdub3JlJyAnCisJZXhwZWN0ICJhLzMtdGhyZWUiICYmCisJdGVzdF9jaGVja19pZ25vcmUgImEvMy10aHJlZSBhL3RocmVlLW5vdC10aGlzLW9uZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViLWRpcmVjdG9yeSBsb2NhbCBpZ25vcmUgd2l0aCAtLXZlcmJvc2UnICAnCisJZXhwZWN0ICJhLy5naXRpZ25vcmU6MjoqdGhyZWUJYS8zLXRocmVlIiAmJgorCXRlc3RfY2hlY2tfaWdub3JlICItLXZlcmJvc2UgYS8zLXRocmVlIGEvdGhyZWUtbm90LXRoaXMtb25lIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NhbCBpZ25vcmUgaW5zaWRlIGEgc3ViLWRpcmVjdG9yeScgJworCWV4cGVjdCAiMy10aHJlZSIgJiYKKwkoCisJCWNkIGEgJiYKKwkJdGVzdF9jaGVja19pZ25vcmUgIjMtdGhyZWUgdGhyZWUtbm90LXRoaXMtb25lIgorCSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIGlnbm9yZSBpbnNpZGUgYSBzdWItZGlyZWN0b3J5IHdpdGggLS12ZXJib3NlJyAnCisJZXhwZWN0ICJhLy5naXRpZ25vcmU6MjoqdGhyZWUJMy10aHJlZSIgJiYKKwkoCisJCWNkIGEgJiYKKwkJdGVzdF9jaGVja19pZ25vcmUgIi0tdmVyYm9zZSAzLXRocmVlIHRocmVlLW5vdC10aGlzLW9uZSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lc3RlZCBpbmNsdWRlIG9mIG5lZ2F0ZWQgcGF0dGVybicgJworCWV4cGVjdCAiIiAmJgorCXRlc3RfY2hlY2tfaWdub3JlICJhL2Ivb25lIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lc3RlZCBpbmNsdWRlIG9mIG5lZ2F0ZWQgcGF0dGVybiB3aXRoIC1xJyAnCisJZXhwZWN0ICIiICYmCisJdGVzdF9jaGVja19pZ25vcmUgIi1xIGEvYi9vbmUiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVzdGVkIGluY2x1ZGUgb2YgbmVnYXRlZCBwYXR0ZXJuIHdpdGggLXYnICcKKwlleHBlY3QgImEvYi8uZ2l0aWdub3JlOjg6IW9uKglhL2Ivb25lIiAmJgorCXRlc3RfY2hlY2tfaWdub3JlICItdiBhL2Ivb25lIiAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lc3RlZCBpbmNsdWRlIG9mIG5lZ2F0ZWQgcGF0dGVybiB3aXRoIC12IC1uJyAnCisJZXhwZWN0ICJhL2IvLmdpdGlnbm9yZTo4OiFvbioJYS9iL29uZSIgJiYKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLXYgLW4gYS9iL29uZSIgMAorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHRlc3QgaWdub3JlZCBzdWItZGlyZWN0b3JpZXMKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnaWdub3JlZCBzdWItZGlyZWN0b3J5JyBcCisJJ2EvYi8uZ2l0aWdub3JlOjU6aWdub3JlZC1kaXIvCWEvYi9pZ25vcmVkLWRpcicgJworCXRlc3RfY2hlY2tfaWdub3JlICJhL2IvaWdub3JlZC1kaXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIGZpbGVzIGluc2lkZSBpZ25vcmVkIHN1Yi1kaXJlY3RvcnknICcKKwlleHBlY3RfZnJvbV9zdGRpbiA8PC1cRU9GICYmCisJCWEvYi9pZ25vcmVkLWRpci9mb28KKwkJYS9iL2lnbm9yZWQtZGlyL3R3b29vbworCQlhL2IvaWdub3JlZC1kaXIvc2V2ZW4KKwlFT0YKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiYS9iL2lnbm9yZWQtZGlyL2ZvbyBhL2IvaWdub3JlZC1kaXIvdHdvb29vIGEvYi9pZ25vcmVkLWRpci9zZXZlbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgZmlsZXMgaW5zaWRlIGlnbm9yZWQgc3ViLWRpcmVjdG9yeSB3aXRoIC12JyAnCisJZXhwZWN0X2Zyb21fc3RkaW4gPDwtXEVPRiAmJgorCQlhL2IvLmdpdGlnbm9yZTo1Omlnbm9yZWQtZGlyLwlhL2IvaWdub3JlZC1kaXIvZm9vCisJCWEvYi8uZ2l0aWdub3JlOjU6aWdub3JlZC1kaXIvCWEvYi9pZ25vcmVkLWRpci90d29vb28KKwkJYS9iLy5naXRpZ25vcmU6NTppZ25vcmVkLWRpci8JYS9iL2lnbm9yZWQtZGlyL3NldmVuCisJRU9GCisJdGVzdF9jaGVja19pZ25vcmUgIi12IGEvYi9pZ25vcmVkLWRpci9mb28gYS9iL2lnbm9yZWQtZGlyL3R3b29vbyBhL2IvaWdub3JlZC1kaXIvc2V2ZW4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NkIHRvIGlnbm9yZWQgc3ViLWRpcmVjdG9yeScgJworCWV4cGVjdF9mcm9tX3N0ZGluIDw8LVxFT0YgJiYKKwkJZm9vCisJCXR3b29vbworCQlzZXZlbgorCQkuLi8uLi9vbmUKKwlFT0YKKwkoCisJCWNkIGEvYi9pZ25vcmVkLWRpciAmJgorCQl0ZXN0X2NoZWNrX2lnbm9yZSAiZm9vIHR3b29vbyAuLi9vbmUgc2V2ZW4gLi4vLi4vb25lIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2QgdG8gaWdub3JlZCBzdWItZGlyZWN0b3J5IHdpdGggLXYnICcKKwlleHBlY3RfZnJvbV9zdGRpbiA8PC1cRU9GICYmCisJCWEvYi8uZ2l0aWdub3JlOjU6aWdub3JlZC1kaXIvCWZvbworCQlhL2IvLmdpdGlnbm9yZTo1Omlnbm9yZWQtZGlyLwl0d29vb28KKwkJYS9iLy5naXRpZ25vcmU6ODohb24qCS4uL29uZQorCQlhL2IvLmdpdGlnbm9yZTo1Omlnbm9yZWQtZGlyLwlzZXZlbgorCQkuZ2l0aWdub3JlOjE6b25lCS4uLy4uL29uZQorCUVPRgorCSgKKwkJY2QgYS9iL2lnbm9yZWQtZGlyICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICItdiBmb28gdHdvb29vIC4uL29uZSBzZXZlbiAuLi8uLi9vbmUiCisJKQorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHRlc3QgaGFuZGxpbmcgb2Ygc3ltbGlua3MKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSBTWU1MSU5LUyAnc3ltbGluaycgJzo6CWEvc3ltbGluaycgJworCXRlc3RfY2hlY2tfaWdub3JlICJhL3N5bWxpbmsiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSBTWU1MSU5LUyAnYmV5b25kIGEgc3ltbGluaycgJycgJworCXRlc3RfY2hlY2tfaWdub3JlICJhL3N5bWxpbmsvZm9vIiAxMjggJiYKKwl0ZXN0X3N0ZGVyciAiZmF0YWw6IHBhdGhzcGVjICdcJydhL3N5bWxpbmsvZm9vJ1wnJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpIFNZTUxJTktTICdiZXlvbmQgYSBzeW1saW5rIGZyb20gc3ViZGlyZWN0b3J5JyAnJyAnCisJKAorCQljZCBhICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICJzeW1saW5rL2ZvbyIgMTI4CisJKSAmJgorCXRlc3Rfc3RkZXJyICJmYXRhbDogcGF0aHNwZWMgJ1wnJ3N5bWxpbmsvZm9vJ1wnJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHRlc3QgaGFuZGxpbmcgb2Ygc3VibW9kdWxlcworCit0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICdzdWJtb2R1bGUnICcnICcKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiYS9zdWJtb2R1bGUvb25lIiAxMjggJiYKKwl0ZXN0X3N0ZGVyciAiZmF0YWw6IFBhdGhzcGVjICdcJydhL3N1Ym1vZHVsZS9vbmUnXCcnIGlzIGluIHN1Ym1vZHVsZSAnXCcnYS9zdWJtb2R1bGUnXCcnIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICdzdWJtb2R1bGUgZnJvbSBzdWJkaXJlY3RvcnknICcnICcKKwkoCisJCWNkIGEgJiYKKwkJdGVzdF9jaGVja19pZ25vcmUgInN1Ym1vZHVsZS9vbmUiIDEyOAorCSkgJiYKKwl0ZXN0X3N0ZGVyciAiZmF0YWw6IFBhdGhzcGVjICdcJydzdWJtb2R1bGUvb25lJ1wnJyBpcyBpbiBzdWJtb2R1bGUgJ1wnJ2Evc3VibW9kdWxlJ1wnJyIKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyB0ZXN0IGhhbmRsaW5nIG9mIGdsb2JhbCBpZ25vcmUgZmlsZXMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2xvYmFsIGlnbm9yZSBub3QgeWV0IGVuYWJsZWQnICcKKwlleHBlY3RfZnJvbV9zdGRpbiA8PC1cRU9GICYmCisJCS5naXQvaW5mby9leGNsdWRlOjc6cGVyLXJlcG8JcGVyLXJlcG8KKwkJYS8uZ2l0aWdub3JlOjI6KnRocmVlCWEvZ2xvYmFsdGhyZWUKKwkJLmdpdC9pbmZvL2V4Y2x1ZGU6NzpwZXItcmVwbwlhL3Blci1yZXBvCisJRU9GCisJdGVzdF9jaGVja19pZ25vcmUgIi12IGdsb2JhbG9uZSBwZXItcmVwbyBhL2dsb2JhbHRocmVlIGEvcGVyLXJlcG8gbm90LWlnbm9yZWQgYS9nbG9iYWx0d28iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dsb2JhbCBpZ25vcmUnICcKKwllbmFibGVfZ2xvYmFsX2V4Y2x1ZGVzICYmCisJZXhwZWN0X2Zyb21fc3RkaW4gPDwtXEVPRiAmJgorCQlnbG9iYWxvbmUKKwkJcGVyLXJlcG8KKwkJZ2xvYmFsdGhyZWUKKwkJYS9nbG9iYWx0aHJlZQorCQlhL3Blci1yZXBvCisJRU9GCisJdGVzdF9jaGVja19pZ25vcmUgImdsb2JhbG9uZSBwZXItcmVwbyBnbG9iYWx0aHJlZSBhL2dsb2JhbHRocmVlIGEvcGVyLXJlcG8gbm90LWlnbm9yZWQgZ2xvYmFsdHdvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbG9iYWwgaWdub3JlIHdpdGggLXYnICcKKwllbmFibGVfZ2xvYmFsX2V4Y2x1ZGVzICYmCisJZXhwZWN0X2Zyb21fc3RkaW4gPDwtRU9GICYmCisJCSRnbG9iYWxfZXhjbHVkZXM6MTpnbG9iYWxvbmUJZ2xvYmFsb25lCisJCS5naXQvaW5mby9leGNsdWRlOjc6cGVyLXJlcG8JcGVyLXJlcG8KKwkJJGdsb2JhbF9leGNsdWRlczozOmdsb2JhbHRocmVlCWdsb2JhbHRocmVlCisJCWEvLmdpdGlnbm9yZToyOip0aHJlZQlhL2dsb2JhbHRocmVlCisJCS5naXQvaW5mby9leGNsdWRlOjc6cGVyLXJlcG8JYS9wZXItcmVwbworCQkkZ2xvYmFsX2V4Y2x1ZGVzOjI6IWdsb2JhbHR3bwlnbG9iYWx0d28KKwlFT0YKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLXYgZ2xvYmFsb25lIHBlci1yZXBvIGdsb2JhbHRocmVlIGEvZ2xvYmFsdGhyZWUgYS9wZXItcmVwbyBub3QtaWdub3JlZCBnbG9iYWx0d28iCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgdGVzdCAtLXN0ZGluCisKK2NhdCA8PC1cRU9GID5zdGRpbgorCW9uZQorCW5vdC1pZ25vcmVkCisJYS9vbmUKKwlhL25vdC1pZ25vcmVkCisJYS9iL29uCisJYS9iL29uZQorCWEvYi9vbmUgb25lCisJImEvYi9vbmUgdHdvIgorCSJhL2Ivb25lXCJ0aHJlZSIKKwlhL2Ivbm90LWlnbm9yZWQKKwlhL2IvdHdvCisJYS9iL3R3b29vCisJZ2xvYmFsdHdvCisJYS9nbG9iYWx0d28KKwlhL2IvZ2xvYmFsdHdvCisJYi9nbG9iYWx0d28KK0VPRgorY2F0IDw8LVxFT0YgPmV4cGVjdGVkLWRlZmF1bHQKKwlvbmUKKwlhL29uZQorCWEvYi90d29vbworRU9GCitjYXQgPDwtRU9GID5leHBlY3RlZC12ZXJib3NlCisJLmdpdGlnbm9yZToxOm9uZQlvbmUKKwkuZ2l0aWdub3JlOjE6b25lCWEvb25lCisJYS9iLy5naXRpZ25vcmU6ODohb24qCWEvYi9vbgorCWEvYi8uZ2l0aWdub3JlOjg6IW9uKglhL2Ivb25lCisJYS9iLy5naXRpZ25vcmU6ODohb24qCWEvYi9vbmUgb25lCisJYS9iLy5naXRpZ25vcmU6ODohb24qCWEvYi9vbmUgdHdvCisJYS9iLy5naXRpZ25vcmU6ODohb24qCSJhL2Ivb25lXFwidGhyZWUiCisJYS9iLy5naXRpZ25vcmU6OTohdHdvCWEvYi90d28KKwlhLy5naXRpZ25vcmU6MTp0d28qCWEvYi90d29vbworCSRnbG9iYWxfZXhjbHVkZXM6MjohZ2xvYmFsdHdvCWdsb2JhbHR3bworCSRnbG9iYWxfZXhjbHVkZXM6MjohZ2xvYmFsdHdvCWEvZ2xvYmFsdHdvCisJJGdsb2JhbF9leGNsdWRlczoyOiFnbG9iYWx0d28JYS9iL2dsb2JhbHR3bworCSRnbG9iYWxfZXhjbHVkZXM6MjohZ2xvYmFsdHdvCWIvZ2xvYmFsdHdvCitFT0YKKworYnJva2VuX2NfdW5xdW90ZSBzdGRpbiA+c3RkaW4wCisKK2Jyb2tlbl9jX3VucXVvdGUgZXhwZWN0ZWQtZGVmYXVsdCA+ZXhwZWN0ZWQtZGVmYXVsdDAKKworYnJva2VuX2NfdW5xdW90ZV92ZXJib3NlIGV4cGVjdGVkLXZlcmJvc2UgPmV4cGVjdGVkLXZlcmJvc2UwCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RkaW4nICcKKwlleHBlY3RfZnJvbV9zdGRpbiA8ZXhwZWN0ZWQtZGVmYXVsdCAmJgorCXRlc3RfY2hlY2tfaWdub3JlICItLXN0ZGluIiA8c3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zdGRpbiAtcScgJworCWV4cGVjdCAiIiAmJgorCXRlc3RfY2hlY2tfaWdub3JlICItcSAtLXN0ZGluIiA8c3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zdGRpbiAtdicgJworCWV4cGVjdF9mcm9tX3N0ZGluIDxleHBlY3RlZC12ZXJib3NlICYmCisJdGVzdF9jaGVja19pZ25vcmUgIi12IC0tc3RkaW4iIDxzdGRpbgorJworCitmb3Igb3B0cyBpbiAnLS1zdGRpbiAteicgJy16IC0tc3RkaW4nCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRvcHRzIiAiCisJCWV4cGVjdF9mcm9tX3N0ZGluIDxleHBlY3RlZC1kZWZhdWx0MCAmJgorCQl0ZXN0X2NoZWNrX2lnbm9yZSAnJG9wdHMnIDxzdGRpbjAKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkb3B0cyAtcSIgIgorCQlleHBlY3QgIiIgJiYKKwkJdGVzdF9jaGVja19pZ25vcmUgJy1xICRvcHRzJyA8c3RkaW4wCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG9wdHMgLXYiICIKKwkJZXhwZWN0X2Zyb21fc3RkaW4gPGV4cGVjdGVkLXZlcmJvc2UwICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICctdiAkb3B0cycgPHN0ZGluMAorCSIKK2RvbmUKKworY2F0IDw8LVxFT0YgPnN0ZGluCisJLi4vb25lCisJLi4vbm90LWlnbm9yZWQKKwlvbmUKKwlub3QtaWdub3JlZAorCWIvb24KKwliL29uZQorCWIvb25lIG9uZQorCSJiL29uZSB0d28iCisJImIvb25lXCJ0aHJlZSIKKwliL3R3bworCWIvbm90LWlnbm9yZWQKKwliL3R3b29vCisJLi4vZ2xvYmFsdHdvCisJZ2xvYmFsdHdvCisJYi9nbG9iYWx0d28KKwkuLi9iL2dsb2JhbHR3bworCWMvbm90LWlnbm9yZWQKK0VPRgorIyBOLkIuIHdlIGRlbGliZXJhdGVseSBlbmQgU1RESU4gd2l0aCBhIG5vbi1tYXRjaGluZyBwYXR0ZXJuIGluIG9yZGVyCisjIHRvIHRlc3QgdGhhdCB0aGUgZXhpdCBjb2RlIGluZGljYXRlcyB0aGF0IG9uZSBvciBtb3JlIG9mIHRoZQorIyBwcm92aWRlZCBwYXRocyBpcyBpZ25vcmVkIC0gaW4gb3RoZXIgd29yZHMsIHRoYXQgaXQgcmVwcmVzZW50cyBhbgorIyBhZ2dyZWdhdGlvbiBvZiBhbGwgdGhlIHJlc3VsdHMsIG5vdCBqdXN0IHRoZSBmaW5hbCByZXN1bHQuCisKK2NhdCA8PC1FT0YgPmV4cGVjdGVkLWFsbAorCS5naXRpZ25vcmU6MTpvbmUJLi4vb25lCisJOjoJLi4vbm90LWlnbm9yZWQKKwkuZ2l0aWdub3JlOjE6b25lCW9uZQorCTo6CW5vdC1pZ25vcmVkCisJYS9iLy5naXRpZ25vcmU6ODohb24qCWIvb24KKwlhL2IvLmdpdGlnbm9yZTo4OiFvbioJYi9vbmUKKwlhL2IvLmdpdGlnbm9yZTo4OiFvbioJYi9vbmUgb25lCisJYS9iLy5naXRpZ25vcmU6ODohb24qCWIvb25lIHR3bworCWEvYi8uZ2l0aWdub3JlOjg6IW9uKgkiYi9vbmVcXCJ0aHJlZSIKKwlhL2IvLmdpdGlnbm9yZTo5OiF0d28JYi90d28KKwk6OgliL25vdC1pZ25vcmVkCisJYS8uZ2l0aWdub3JlOjE6dHdvKgliL3R3b29vCisJJGdsb2JhbF9leGNsdWRlczoyOiFnbG9iYWx0d28JLi4vZ2xvYmFsdHdvCisJJGdsb2JhbF9leGNsdWRlczoyOiFnbG9iYWx0d28JZ2xvYmFsdHdvCisJJGdsb2JhbF9leGNsdWRlczoyOiFnbG9iYWx0d28JYi9nbG9iYWx0d28KKwkkZ2xvYmFsX2V4Y2x1ZGVzOjI6IWdsb2JhbHR3bwkuLi9iL2dsb2JhbHR3bworCTo6CWMvbm90LWlnbm9yZWQKK0VPRgorY2F0IDw8LUVPRiA+ZXhwZWN0ZWQtZGVmYXVsdAorLi4vb25lCitvbmUKK2IvdHdvb28KK0VPRgorZ3JlcCAtdiAnXjo6CScgZXhwZWN0ZWQtYWxsID5leHBlY3RlZC12ZXJib3NlCisKK2Jyb2tlbl9jX3VucXVvdGUgc3RkaW4gPnN0ZGluMAorCiticm9rZW5fY191bnF1b3RlIGV4cGVjdGVkLWRlZmF1bHQgPmV4cGVjdGVkLWRlZmF1bHQwCisKK2Jyb2tlbl9jX3VucXVvdGVfdmVyYm9zZSBleHBlY3RlZC12ZXJib3NlID5leHBlY3RlZC12ZXJib3NlMAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN0ZGluIGZyb20gc3ViZGlyZWN0b3J5JyAnCisJZXhwZWN0X2Zyb21fc3RkaW4gPGV4cGVjdGVkLWRlZmF1bHQgJiYKKwkoCisJCWNkIGEgJiYKKwkJdGVzdF9jaGVja19pZ25vcmUgIi0tc3RkaW4iIDwuLi9zdGRpbgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zdGRpbiBmcm9tIHN1YmRpcmVjdG9yeSB3aXRoIC12JyAnCisJZXhwZWN0X2Zyb21fc3RkaW4gPGV4cGVjdGVkLXZlcmJvc2UgJiYKKwkoCisJCWNkIGEgJiYKKwkJdGVzdF9jaGVja19pZ25vcmUgIi0tc3RkaW4gLXYiIDwuLi9zdGRpbgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zdGRpbiBmcm9tIHN1YmRpcmVjdG9yeSB3aXRoIC12IC1uJyAnCisJZXhwZWN0X2Zyb21fc3RkaW4gPGV4cGVjdGVkLWFsbCAmJgorCSgKKwkJY2QgYSAmJgorCQl0ZXN0X2NoZWNrX2lnbm9yZSAiLS1zdGRpbiAtdiAtbiIgPC4uL3N0ZGluCisJKQorJworCitmb3Igb3B0cyBpbiAnLS1zdGRpbiAteicgJy16IC0tc3RkaW4nCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRvcHRzIGZyb20gc3ViZGlyZWN0b3J5IiAnCisJCWV4cGVjdF9mcm9tX3N0ZGluIDxleHBlY3RlZC1kZWZhdWx0MCAmJgorCQkoCisJCQljZCBhICYmCisJCQl0ZXN0X2NoZWNrX2lnbm9yZSAiJyIkb3B0cyInIiA8Li4vc3RkaW4wCisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkb3B0cyBmcm9tIHN1YmRpcmVjdG9yeSB3aXRoIC12IiAnCisJCWV4cGVjdF9mcm9tX3N0ZGluIDxleHBlY3RlZC12ZXJib3NlMCAmJgorCQkoCisJCQljZCBhICYmCisJCQl0ZXN0X2NoZWNrX2lnbm9yZSAiJyIkb3B0cyInIC12IiA8Li4vc3RkaW4wCisJCSkKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnc3RyZWFtaW5nIHN1cHBvcnQgZm9yIC0tc3RkaW4nICcKKwlta2ZpZm8gaW4gb3V0ICYmCisJKGdpdCBjaGVjay1pZ25vcmUgLW4gLXYgLS1zdGRpbiA8aW4gPm91dCAmKSAmJgorCisJIyBXZSBjYW5ub3QganVzdCAiZWNobyA+aW4iIGJlY2F1c2UgY2hlY2staWdub3JlIHdvdWxkIGdldCBFT0YKKwkjIGFmdGVyIGVjaG8gZXhpdGVkOyBpbnN0ZWFkIHdlIG9wZW4gdGhlIGRlc2NyaXB0b3IgaW4gb3VyCisJIyBzaGVsbCwgYW5kIHRoZW4gZWNobyB0byB0aGUgZmQuIFdlIG1ha2Ugc3VyZSB0byBjbG9zZSBpdCBhdAorCSMgdGhlIGVuZCwgc28gdGhhdCB0aGUgc3VicHJvY2VzcyBkb2VzIGdldCBFT0YgYW5kIGRpZXMKKwkjIHByb3Blcmx5LgorCSMKKwkjIFNpbWlsYXJseSwgd2UgbXVzdCBrZWVwICJvdXQiIG9wZW4gc28gdGhhdCBjaGVjay1pZ25vcmUgZG9lcworCSMgbm90IGV2ZXIgZ2V0IFNJR1BJUEUgdHJ5aW5nIHRvIHdyaXRlIHRvIHVzLiBOb3Qgb25seSB3b3VsZCB0aGF0CisJIyBwcm9kdWNlIGluY29ycmVjdCByZXN1bHRzLCBidXQgdGhlbiB0aGVyZSB3b3VsZCBiZSBubyB3cml0ZXIgb24gdGhlCisJIyBvdGhlciBlbmQgb2YgdGhlIHBpcGUsIGFuZCB3ZSB3b3VsZCBwb3RlbnRpYWxseSBibG9jayBmb3JldmVyIHRyeWluZworCSMgdG8gb3BlbiBpdC4KKwlleGVjIDk+aW4gJiYKKwlleGVjIDg8b3V0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJleGVjIDk+Ji0iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJleGVjIDg8Ji0iICYmCisJZWNobyA+Jjkgb25lICYmCisJcmVhZCByZXNwb25zZSA8JjggJiYKKwllY2hvICIkcmVzcG9uc2UiIHwgZ3JlcCAiXlwuZ2l0aWdub3JlOjE6b25lCW9uZSIgJiYKKwllY2hvID4mOSB0d28gJiYKKwlyZWFkIHJlc3BvbnNlIDwmOCAmJgorCWVjaG8gIiRyZXNwb25zZSIgfCBncmVwICJeOjoJdHdvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGlzdGluZyBmaWxlIGFuZCBkaXJlY3RvcnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIG9uZSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtZGlyIHRvcC1sZXZlbC1kaXIiICYmCisJPm9uZSAmJgorCW1rZGlyIHRvcC1sZXZlbC1kaXIgJiYKKwlnaXQgY2hlY2staWdub3JlIG9uZSB0b3AtbGV2ZWwtZGlyID5hY3R1YWwgJiYKKwlncmVwIG9uZSBhY3R1YWwgJiYKKwlncmVwIHRvcC1sZXZlbC1kaXIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIGRpcmVjdG9yeSBhbmQgZmlsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gb25lIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm1kaXIgdG9wLWxldmVsLWRpciIgJiYKKwk+b25lICYmCisJbWtkaXIgdG9wLWxldmVsLWRpciAmJgorCWdpdCBjaGVjay1pZ25vcmUgdG9wLWxldmVsLWRpciBvbmUgPmFjdHVhbCAmJgorCWdyZXAgb25lIGFjdHVhbCAmJgorCWdyZXAgdG9wLWxldmVsLWRpciBhY3R1YWwKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyB0ZXN0IHdoaXRlc3BhY2UgaGFuZGxpbmcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhaWxpbmcgd2hpdGVzcGFjZSBpcyBpZ25vcmVkJyAnCisJbWtkaXIgd2hpdGVzcGFjZSAmJgorCT53aGl0ZXNwYWNlL3RyYWlsaW5nICYmCisJPndoaXRlc3BhY2UvdW50cmFja2VkICYmCisJZWNobyAid2hpdGVzcGFjZS90cmFpbGluZyAgICIgPmlnbm9yZSAmJgorCWNhdCA+ZXhwZWN0IDw8RU9GICYmCit3aGl0ZXNwYWNlL3VudHJhY2tlZAorRU9GCisJZ2l0IGxzLWZpbGVzIC1vIC1YIGlnbm9yZSB3aGl0ZXNwYWNlID5hY3R1YWwgMj5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAncXVvdGluZyBhbGxvd3MgdHJhaWxpbmcgd2hpdGVzcGFjZScgJworCXJtIC1yZiB3aGl0ZXNwYWNlICYmCisJbWtkaXIgd2hpdGVzcGFjZSAmJgorCT4id2hpdGVzcGFjZS90cmFpbGluZyAgIiAmJgorCT53aGl0ZXNwYWNlL3VudHJhY2tlZCAmJgorCWVjaG8gIndoaXRlc3BhY2UvdHJhaWxpbmdcXCBcXCAiID5pZ25vcmUgJiYKKwllY2hvIHdoaXRlc3BhY2UvdW50cmFja2VkID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLW8gLVggaWdub3JlIHdoaXRlc3BhY2UgPmFjdHVhbCAyPmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXLCFDWUdXSU4gJ2NvcnJlY3QgaGFuZGxpbmcgb2YgYmFja3NsYXNoZXMnICcKKwlybSAtcmYgd2hpdGVzcGFjZSAmJgorCW1rZGlyIHdoaXRlc3BhY2UgJiYKKwk+IndoaXRlc3BhY2UvdHJhaWxpbmcgMSAgIiAmJgorCT4id2hpdGVzcGFjZS90cmFpbGluZyAyIFxcXFwiICYmCisJPiJ3aGl0ZXNwYWNlL3RyYWlsaW5nIDMgXFxcXCIgJiYKKwk+IndoaXRlc3BhY2UvdHJhaWxpbmcgNCAgIFxcICIgJiYKKwk+IndoaXRlc3BhY2UvdHJhaWxpbmcgNSBcXCBcXCAiICYmCisJPiJ3aGl0ZXNwYWNlL3RyYWlsaW5nIDYgXFxhXFwiICYmCisJPndoaXRlc3BhY2UvdW50cmFja2VkICYmCisJc2VkIC1lICJzL1okLy8iID5pZ25vcmUgPDwtXEVPRiAmJgorCXdoaXRlc3BhY2UvdHJhaWxpbmcgMSBcICAgIFoKKwl3aGl0ZXNwYWNlL3RyYWlsaW5nIDIgXFxcXFoKKwl3aGl0ZXNwYWNlL3RyYWlsaW5nIDMgXFxcXCBaCisJd2hpdGVzcGFjZS90cmFpbGluZyA0ICAgXFxcICAgIFoKKwl3aGl0ZXNwYWNlL3RyYWlsaW5nIDUgXFwgXFxcICAgWgorCXdoaXRlc3BhY2UvdHJhaWxpbmcgNiBcXGFcXFoKKwlFT0YKKwllY2hvIHdoaXRlc3BhY2UvdW50cmFja2VkID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLW8gLVggaWdub3JlIHdoaXRlc3BhY2UgPmFjdHVhbCAyPmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8vZXhjbHVkZSB0cnVtcHMgY29yZS5leGNsdWRlc2ZpbGUnICcKKwllY2hvID4+Z2xvYmFsLWV4Y2x1ZGVzIHVzdWFsbHktaWdub3JlZCAmJgorCWVjaG8gPj4uZ2l0L2luZm8vZXhjbHVkZSAiIXVzdWFsbHktaWdub3JlZCIgJiYKKwk+dXN1YWxseS1pZ25vcmVkICYmCisJZWNobyAiPz8gdXN1YWxseS1pZ25vcmVkIiA+ZXhwZWN0ICYmCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIHVzdWFsbHktaWdub3JlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMDktcHJpby1xdWV1ZS5zaCBiL3QvdDAwMDktcHJpby1xdWV1ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOTQxYWQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAwOS1wcmlvLXF1ZXVlLnNoCkBAIC0wLDAgKzEsNjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyB0ZXN0cyBmb3IgcHJpb3JpdHkgcXVldWUgaW1wbGVtZW50YXRpb24nCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5leHBlY3QgPDwnRU9GJworMQorMgorMworNAorNQorNQorNgorNworOAorOQorMTAKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgb3JkZXJpbmcnICcKKwl0ZXN0LXRvb2wgcHJpby1xdWV1ZSAyIDYgMyAxMCA5IDUgNyA0IDUgOCAxIGR1bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworMgorMworNAorMQorNQorNgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXhlZCBwdXQgYW5kIGdldCcgJworCXRlc3QtdG9vbCBwcmlvLXF1ZXVlIDYgMiA0IGdldCA1IDMgZ2V0IGdldCAxIGR1bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworMQorMgorTlVMTAorMQorMgorTlVMTAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RpY2UgZW1wdHkgcXVldWUnICcKKwl0ZXN0LXRvb2wgcHJpby1xdWV1ZSAxIDIgZ2V0IGdldCBnZXQgMSAyIGdldCBnZXQgZ2V0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKzMKKzIKKzYKKzQKKzUKKzEKKzgKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhY2sgb3JkZXInICcKKwl0ZXN0LXRvb2wgcHJpby1xdWV1ZSBzdGFjayA4IDEgNSA0IDYgMiAzIGR1bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDEwLXJhY3ktZ2l0LnNoIGIvdC90MDAxMC1yYWN5LWdpdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NjU3YzVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAxMC1yYWN5LWdpdC5zaApAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmFjeSBHSVQnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRoaXMgdGVzdCBjYW4gZ2l2ZSBmYWxzZSBzdWNjZXNzIGlmIHlvdXIgbWFjaGluZSBpcyBzdWZmaWNpZW50bHkKKyMgc2xvdyBvciB5b3VyIHRyaWFsIGhhcHBlbmVkIHRvIGhhcHBlbiBvbiBzZWNvbmQgYm91bmRhcnkuCisKK2ZvciB0cmlhbCBpbiAwIDEgMiAzIDQKK2RvCisJcm0gLWYgLmdpdC9pbmRleAorCWVjaG8gZnJvdHogPmluZm9jb20KKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGluZm9jb20KKwllY2hvIHh5enp5ID5pbmZvY29tCisKKwlmaWxlcz0kKGdpdCBkaWZmLWZpbGVzIC1wKQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJSYWN5IEdJVCB0cmlhbCAjJHRyaWFsIHBhcnQgQSIgXAorCSd0ZXN0ICIiICE9ICIkZmlsZXMiJworCisJc2xlZXAgMQorCWVjaG8geHl6enkgPmNvcm5lcnN0b25lCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBjb3JuZXJzdG9uZQorCisJZmlsZXM9JChnaXQgZGlmZi1maWxlcyAtcCkKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkiUmFjeSBHSVQgdHJpYWwgIyR0cmlhbCBwYXJ0IEIiIFwKKwkndGVzdCAiIiAhPSAiJGZpbGVzIicKKworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMTEtaGFzaG1hcC5zaCBiL3QvdDAwMTEtaGFzaG1hcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MzQzZmZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAxMS1oYXNobWFwLnNoCkBAIC0wLDAgKzEsMjU4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBoYXNobWFwIGFuZCBzdHJpbmcgaGFzaCBmdW5jdGlvbnMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9oYXNobWFwKCkgeworCWVjaG8gIiQxIiB8IHRlc3QtdG9vbCBoYXNobWFwICQzID4gYWN0dWFsICYmCisJZWNobyAiJDIiID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXQnICcKKwordGVzdF9oYXNobWFwICJwdXQga2V5MSB2YWx1ZTEKK3B1dCBrZXkyIHZhbHVlMgorcHV0IGZvb0JhckZyb3R6IHZhbHVlMworcHV0IGZvb2JhcmZyb3R6IHZhbHVlNAorc2l6ZSIgIk5VTEwKK05VTEwKK05VTEwKK05VTEwKKzY0IDQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHV0IChjYXNlIGluc2Vuc2l0aXZlKScgJworCit0ZXN0X2hhc2htYXAgInB1dCBrZXkxIHZhbHVlMQorcHV0IGtleTIgdmFsdWUyCitwdXQgZm9vQmFyRnJvdHogdmFsdWUzCitzaXplIiAiTlVMTAorTlVMTAorTlVMTAorNjQgMyIgaWdub3JlY2FzZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2UnICcKKwordGVzdF9oYXNobWFwICJwdXQga2V5MSB2YWx1ZTEKK3B1dCBrZXkxIHZhbHVlMgorcHV0IGZvb0JhckZyb3R6IHZhbHVlMworcHV0IGZvb0JhckZyb3R6IHZhbHVlNAorc2l6ZSIgIk5VTEwKK3ZhbHVlMQorTlVMTAordmFsdWUzCis2NCAyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2UgKGNhc2UgaW5zZW5zaXRpdmUpJyAnCisKK3Rlc3RfaGFzaG1hcCAicHV0IGtleTEgdmFsdWUxCitwdXQgS2V5MSB2YWx1ZTIKK3B1dCBmb29CYXJGcm90eiB2YWx1ZTMKK3B1dCBmb29iYXJmcm90eiB2YWx1ZTQKK3NpemUiICJOVUxMCit2YWx1ZTEKK05VTEwKK3ZhbHVlMworNjQgMiIgaWdub3JlY2FzZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCcgJworCit0ZXN0X2hhc2htYXAgInB1dCBrZXkxIHZhbHVlMQorcHV0IGtleTIgdmFsdWUyCitwdXQgZm9vQmFyRnJvdHogdmFsdWUzCitwdXQgZm9vYmFyZnJvdHogdmFsdWU0CitnZXQga2V5MQorZ2V0IGtleTIKK2dldCBmb29CYXJGcm90egorZ2V0IG5vdEluTWFwIiAiTlVMTAorTlVMTAorTlVMTAorTlVMTAordmFsdWUxCit2YWx1ZTIKK3ZhbHVlMworTlVMTCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgKGNhc2UgaW5zZW5zaXRpdmUpJyAnCisKK3Rlc3RfaGFzaG1hcCAicHV0IGtleTEgdmFsdWUxCitwdXQga2V5MiB2YWx1ZTIKK3B1dCBmb29CYXJGcm90eiB2YWx1ZTMKK2dldCBLZXkxCitnZXQga2VZMgorZ2V0IGZvb2JhcmZyb3R6CitnZXQgbm90SW5NYXAiICJOVUxMCitOVUxMCitOVUxMCit2YWx1ZTEKK3ZhbHVlMgordmFsdWUzCitOVUxMIiBpZ25vcmVjYXNlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkJyAnCisKK3Rlc3RfaGFzaG1hcCAiYWRkIGtleTEgdmFsdWUxCithZGQga2V5MSB2YWx1ZTIKK2FkZCBmb29CYXJGcm90eiB2YWx1ZTMKK2FkZCBmb29CYXJGcm90eiB2YWx1ZTQKK2dldCBrZXkxCitnZXQgZm9vQmFyRnJvdHoKK2dldCBub3RJbk1hcCIgInZhbHVlMgordmFsdWUxCit2YWx1ZTQKK3ZhbHVlMworTlVMTCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgKGNhc2UgaW5zZW5zaXRpdmUpJyAnCisKK3Rlc3RfaGFzaG1hcCAiYWRkIGtleTEgdmFsdWUxCithZGQgS2V5MSB2YWx1ZTIKK2FkZCBmb29CYXJGcm90eiB2YWx1ZTMKK2FkZCBmb29iYXJmcm90eiB2YWx1ZTQKK2dldCBrZXkxCitnZXQgRm9vYmFyZnJvdHoKK2dldCBub3RJbk1hcCIgInZhbHVlMgordmFsdWUxCit2YWx1ZTQKK3ZhbHVlMworTlVMTCIgaWdub3JlY2FzZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZScgJworCit0ZXN0X2hhc2htYXAgInB1dCBrZXkxIHZhbHVlMQorcHV0IGtleTIgdmFsdWUyCitwdXQgZm9vQmFyRnJvdHogdmFsdWUzCityZW1vdmUga2V5MQorcmVtb3ZlIGtleTIKK3JlbW92ZSBub3RJbk1hcAorc2l6ZSIgIk5VTEwKK05VTEwKK05VTEwKK3ZhbHVlMQordmFsdWUyCitOVUxMCis2NCAxIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSAoY2FzZSBpbnNlbnNpdGl2ZSknICcKKwordGVzdF9oYXNobWFwICJwdXQga2V5MSB2YWx1ZTEKK3B1dCBrZXkyIHZhbHVlMgorcHV0IGZvb0JhckZyb3R6IHZhbHVlMworcmVtb3ZlIEtleTEKK3JlbW92ZSBrZVkyCityZW1vdmUgbm90SW5NYXAKK3NpemUiICJOVUxMCitOVUxMCitOVUxMCit2YWx1ZTEKK3ZhbHVlMgorTlVMTAorNjQgMSIgaWdub3JlY2FzZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2l0ZXJhdGUnICcKKwl0ZXN0LXRvb2wgaGFzaG1hcCA+YWN0dWFsLnJhdyA8PC1cRU9GICYmCisJcHV0IGtleTEgdmFsdWUxCisJcHV0IGtleTIgdmFsdWUyCisJcHV0IGZvb0JhckZyb3R6IHZhbHVlMworCWl0ZXJhdGUKKwlFT0YKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlOVUxMCisJTlVMTAorCU5VTEwKKwlmb29CYXJGcm90eiB2YWx1ZTMKKwlrZXkxIHZhbHVlMQorCWtleTIgdmFsdWUyCisJRU9GCisKKwlzb3J0IDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2l0ZXJhdGUgKGNhc2UgaW5zZW5zaXRpdmUpJyAnCisJdGVzdC10b29sIGhhc2htYXAgaWdub3JlY2FzZSA+YWN0dWFsLnJhdyA8PC1cRU9GICYmCisJcHV0IGtleTEgdmFsdWUxCisJcHV0IGtleTIgdmFsdWUyCisJcHV0IGZvb0JhckZyb3R6IHZhbHVlMworCWl0ZXJhdGUKKwlFT0YKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlOVUxMCisJTlVMTAorCU5VTEwKKwlmb29CYXJGcm90eiB2YWx1ZTMKKwlrZXkxIHZhbHVlMQorCWtleTIgdmFsdWUyCisJRU9GCisKKwlzb3J0IDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyb3cgLyBzaHJpbmsnICcKKworCXJtIC1mIGluICYmCisJcm0gLWYgZXhwZWN0ICYmCisJZm9yIG4gaW4gJCh0ZXN0X3NlcSA1MSkKKwlkbworCQllY2hvIHB1dCBrZXkkbiB2YWx1ZSRuID4+IGluICYmCisJCWVjaG8gTlVMTCA+PiBleHBlY3QKKwlkb25lICYmCisJZWNobyBzaXplID4+IGluICYmCisJZWNobyA2NCA1MSA+PiBleHBlY3QgJiYKKwllY2hvIHB1dCBrZXk1MiB2YWx1ZTUyID4+IGluICYmCisJZWNobyBOVUxMID4+IGV4cGVjdCAmJgorCWVjaG8gc2l6ZSA+PiBpbiAmJgorCWVjaG8gMjU2IDUyID4+IGV4cGVjdCAmJgorCWZvciBuIGluICQodGVzdF9zZXEgMTIpCisJZG8KKwkJZWNobyByZW1vdmUga2V5JG4gPj4gaW4gJiYKKwkJZWNobyB2YWx1ZSRuID4+IGV4cGVjdAorCWRvbmUgJiYKKwllY2hvIHNpemUgPj4gaW4gJiYKKwllY2hvIDI1NiA0MCA+PiBleHBlY3QgJiYKKwllY2hvIHJlbW92ZSBrZXk0MCA+PiBpbiAmJgorCWVjaG8gdmFsdWU0MCA+PiBleHBlY3QgJiYKKwllY2hvIHNpemUgPj4gaW4gJiYKKwllY2hvIDY0IDM5ID4+IGV4cGVjdCAmJgorCWNhdCBpbiB8IHRlc3QtdG9vbCBoYXNobWFwID4gb3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmluZyBpbnRlcm5pbmcnICcKKwordGVzdF9oYXNobWFwICJpbnRlcm4gdmFsdWUxCitpbnRlcm4gVmFsdWUxCitpbnRlcm4gdmFsdWUyCitpbnRlcm4gdmFsdWUyCisiICJ2YWx1ZTEKK1ZhbHVlMQordmFsdWUyCit2YWx1ZTIiCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDEyLWhlbHAuc2ggYi90L3QwMDEyLWhlbHAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZThlZjczMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMTItaGVscC5zaApAQCAtMCwwICsxLDg4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0naGVscCcKKworLiAuL3Rlc3QtbGliLnNoCisKK2NvbmZpZ3VyZV9oZWxwICgpIHsKKwl0ZXN0X2NvbmZpZyBoZWxwLmZvcm1hdCBodG1sICYmCisKKwkjIFVubGVzcyB0aGUgcGF0aCBoYXMgIjovLyIgaW4gaXQsIEdpdCB0cmllcyB0byBtYWtlIHN1cmUKKwkjIHRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeSBsb2NhbGx5IGV4aXN0cy4gQXZvaWQgaXQgYXMKKwkjIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGFuIGF0dGVtcHQgdG8gY29ycmVjdGx5CisJIyBpbnZva2UgYSBoZWxwIGJyb3dzZXIgaW4gdGhpcyB0ZXN0LgorCXRlc3RfY29uZmlnIGhlbHAuaHRtbHBhdGggdGVzdDovL2h0bWwgJiYKKworCSMgTmFtZSBhIGN1c3RvbSBicm93c2VyCisJdGVzdF9jb25maWcgYnJvd3Nlci50ZXN0LmNtZCAuL3Rlc3QtYnJvd3NlciAmJgorCXRlc3RfY29uZmlnIGhlbHAuYnJvd3NlciB0ZXN0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIiAnCisJIyBKdXN0IHdyaXRlIG91dCB3aGljaCBwYWdlIGdldHMgcmVxdWVzdGVkCisJd3JpdGVfc2NyaXB0IHRlc3QtYnJvd3NlciA8PC1cRU9GCisJZWNobyAiJCoiID50ZXN0LWJyb3dzZXIubG9nCisJRU9GCisnCisKKyMgbWFrZSBzdXJlIHRvIGV4ZXJjaXNlIHRoZXNlIGNvZGUgcGF0aHMsIHRoZSBvdXRwdXQgaXMgYSBiaXQgdHJpY2t5CisjIHRvIHZlcmlmeQordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgaGVscCBjb21tYW5kcycgJworCWdpdCBoZWxwID4vZGV2L251bGwgJiYKKwlnaXQgaGVscCAtYSAtLW5vLXZlcmJvc2UgPi9kZXYvbnVsbCAmJgorCWdpdCBoZWxwIC1nID4vZGV2L251bGwgJiYKKwlnaXQgaGVscCAtYSA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIndvcmtzIGZvciBjb21tYW5kcyBhbmQgZ3VpZGVzIGJ5IGRlZmF1bHQiICcKKwljb25maWd1cmVfaGVscCAmJgorCWdpdCBoZWxwIHN0YXR1cyAmJgorCWVjaG8gInRlc3Q6Ly9odG1sL2dpdC1zdGF0dXMuaHRtbCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCB0ZXN0LWJyb3dzZXIubG9nICYmCisJZ2l0IGhlbHAgcmV2aXNpb25zICYmCisJZWNobyAidGVzdDovL2h0bWwvZ2l0cmV2aXNpb25zLmh0bWwiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdGVzdC1icm93c2VyLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWV4Y2x1ZGUtZ3VpZGVzIGRvZXMgbm90IHdvcmsgZm9yIGd1aWRlcyIgJworCT50ZXN0LWJyb3dzZXIubG9nICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGhlbHAgLS1leGNsdWRlLWd1aWRlcyByZXZpc2lvbnMgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgdGVzdC1icm93c2VyLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWhlbHAgZG9lcyBub3Qgd29yayBmb3IgZ3VpZGVzIiAiCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCWdpdDogJ3JldmlzaW9ucycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmlzaW9ucyAtLWhlbHAgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgaGVscCcgJworCWdpdCBoZWxwID5oZWxwLm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIl4gICBjbG9uZSAgIiBoZWxwLm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIl4gICBhZGQgICAgIiBoZWxwLm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIl4gICBsb2cgICAgIiBoZWxwLm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIl4gICBjb21taXQgIiBoZWxwLm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIl4gICBmZXRjaCAgIiBoZWxwLm91dHB1dAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGhlbHAgLWcnICcKKwlnaXQgaGVscCAtZyA+aGVscC5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeICAgYXR0cmlidXRlcyAiIGhlbHAub3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiXiAgIGV2ZXJ5ZGF5ICAgIiBoZWxwLm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIl4gICB0dXRvcmlhbCAgICIgaGVscC5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2VuZXJhdGUgYnVpbHRpbiBsaXN0JyAnCisJZ2l0IC0tbGlzdC1jbWRzPWJ1aWx0aW5zID5idWlsdGlucworJworCit3aGlsZSByZWFkIGJ1aWx0aW4KK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGJ1aWx0aW4gY2FuIGhhbmRsZSAtaCIgJworCQl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgJGJ1aWx0aW4gLWggPm91dHB1dCAyPiYxICYmCisJCXRlc3RfaTE4bmdyZXAgdXNhZ2Ugb3V0cHV0CisJJworZG9uZSA8YnVpbHRpbnMKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDEzLXNoYTFkYy5zaCBiL3QvdDAwMTMtc2hhMWRjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxOWYzMWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDEzLXNoYTFkYy5zaApAQCAtMCwwICsxLDE5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBzaGExIGNvbGxpc2lvbiBkZXRlY3Rpb24nCisuIC4vdGVzdC1saWIuc2gKK1RFU1RfREFUQT0iJFRFU1RfRElSRUNUT1JZL3QwMDEzIgorCitpZiB0ZXN0IC16ICIkRENfU0hBMSIKK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgc2hhMSBjb2xsaXNpb24gdGVzdHMsIERDX1NIQTEgbm90IHNldCcKKwl0ZXN0X2RvbmUKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qtc2hhMSBkZXRlY3RzIHNoYXR0ZXJlZCBwZGYnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgc2hhMSA8IiRURVNUX0RBVEEvc2hhdHRlcmVkLTEucGRmIiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgY29sbGlzaW9uIGVyciAmJgorCWdyZXAgMzg3NjJjZjdmNTU5MzRiMzRkMTc5YWU2YTRjODBjYWRjY2JiN2YwYSBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDEzL3NoYXR0ZXJlZC0xLnBkZiBiL3QvdDAwMTMvc2hhdHRlcmVkLTEucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOWFhYTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDEzL3NoYXR0ZXJlZC0xLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3QwMDE0LWFsaWFzLnNoIGIvdC90MDAxNC1hbGlhcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZDNkOTE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDAxNC1hbGlhcy5zaApAQCAtMCwwICsxLDQ3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNvbW1hbmQgYWxpYXNpbmcnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXN0ZWQgYWxpYXNlcyAtIGludGVybmFsIGV4ZWN1dGlvbicgJworCWdpdCBjb25maWcgYWxpYXMubmVzdGVkLWludGVybmFsLTEgbmVzdGVkLWludGVybmFsLTIgJiYKKwlnaXQgY29uZmlnIGFsaWFzLm5lc3RlZC1pbnRlcm5hbC0yIHN0YXR1cyAmJgorCWdpdCBuZXN0ZWQtaW50ZXJuYWwtMSA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiXk9uIGJyYW5jaCAiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXN0ZWQgYWxpYXNlcyAtIG1peGVkIGV4ZWN1dGlvbicgJworCWdpdCBjb25maWcgYWxpYXMubmVzdGVkLWV4dGVybmFsLTEgbmVzdGVkLWV4dGVybmFsLTIgJiYKKwlnaXQgY29uZmlnIGFsaWFzLm5lc3RlZC1leHRlcm5hbC0yICIhZ2l0IG5lc3RlZC1leHRlcm5hbC0zIiAmJgorCWdpdCBjb25maWcgYWxpYXMubmVzdGVkLWV4dGVybmFsLTMgc3RhdHVzICYmCisJZ2l0IG5lc3RlZC1leHRlcm5hbC0xID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeT24gYnJhbmNoICIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb3BpbmcgYWxpYXNlcyAtIGludGVybmFsIGV4ZWN1dGlvbicgJworCWdpdCBjb25maWcgYWxpYXMubG9vcC1pbnRlcm5hbC0xIGxvb3AtaW50ZXJuYWwtMiAmJgorCWdpdCBjb25maWcgYWxpYXMubG9vcC1pbnRlcm5hbC0yIGxvb3AtaW50ZXJuYWwtMyAmJgorCWdpdCBjb25maWcgYWxpYXMubG9vcC1pbnRlcm5hbC0zIGxvb3AtaW50ZXJuYWwtMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb29wLWludGVybmFsLTEgMj5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeZmF0YWw6IGFsaWFzIGxvb3AgZGV0ZWN0ZWQ6IGV4cGFuc2lvbiBvZiIgb3V0cHV0CisnCisKKyMgVGhpcyB0ZXN0IGlzIGRpc2FibGVkIHVudGlsIGV4dGVybmFsIGxvb3BzIGFyZSBmaXhlZCwgYmVjYXVzZSB3b3VsZCBibG9jaworIyB0aGUgdGVzdCBzdWl0ZSBmb3IgYSBmdWxsIG1pbnV0ZS4KKyMKKyN0ZXN0X2V4cGVjdF9mYWlsdXJlICdsb29waW5nIGFsaWFzZXMgLSBtaXhlZCBleGVjdXRpb24nICcKKyMJZ2l0IGNvbmZpZyBhbGlhcy5sb29wLW1peGVkLTEgbG9vcC1taXhlZC0yICYmCisjCWdpdCBjb25maWcgYWxpYXMubG9vcC1taXhlZC0yICIhZ2l0IGxvb3AtbWl4ZWQtMSIgJiYKKyMJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvb3AtbWl4ZWQtMSAyPm91dHB1dCAmJgorIwl0ZXN0X2kxOG5ncmVwICJeZmF0YWw6IGFsaWFzIGxvb3AgZGV0ZWN0ZWQ6IGV4cGFuc2lvbiBvZiIgb3V0cHV0CisjJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW4tY29tbWFuZCBmb3JtYXRzIGVtcHR5IGFyZ3MgcHJvcGVybHknICcKKyAgICB0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RSQUNFPTEgZ2l0IGZyb3R6IGEgIiIgYiAiICIgYyAyPmFjdHVhbC5yYXcgJiYKKyAgICBzZWQgLW5lICIvcnVuX2NvbW1hbmQ6L3MvLip0cmFjZTogcnVuX2NvbW1hbmQ6IC8vcCIgYWN0dWFsLnJhdyA+YWN0dWFsICYmCisgICAgZWNobyAiZ2l0LWZyb3R6IGEgJ1wnJydcJycgYiAnXCcnICdcJycgYyIgPmV4cGVjdCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDE1LWhhc2guc2ggYi90L3QwMDE1LWhhc2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjkxZTkwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMTUtaGFzaC5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBiYXNpYyBoYXNoIGltcGxlbWVudGF0aW9uJworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBiYXNpYyBTSEEtMSBoYXNoIHZhbHVlcycgJworCXRlc3QtdG9vbCBzaGExIDwvZGV2L251bGwgPmFjdHVhbCAmJgorCWdyZXAgZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOSBhY3R1YWwgJiYKKwlwcmludGYgImEiIHwgdGVzdC10b29sIHNoYTEgPmFjdHVhbCAmJgorCWdyZXAgODZmN2U0MzdmYWE1YTdmY2UxNWQxZGRjYjllYWVhZWEzNzc2NjdiOCBhY3R1YWwgJiYKKwlwcmludGYgImFiYyIgfCB0ZXN0LXRvb2wgc2hhMSA+YWN0dWFsICYmCisJZ3JlcCBhOTk5M2UzNjQ3MDY4MTZhYmEzZTI1NzE3ODUwYzI2YzljZDBkODlkIGFjdHVhbCAmJgorCXByaW50ZiAibWVzc2FnZSBkaWdlc3QiIHwgdGVzdC10b29sIHNoYTEgPmFjdHVhbCAmJgorCWdyZXAgYzEyMjUyY2VkYThiZTg5OTRkNWZhMDI5MGE0NzIzMWMxZDE2YWFlMyBhY3R1YWwgJiYKKwlwcmludGYgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiB8IHRlc3QtdG9vbCBzaGExID5hY3R1YWwgJiYKKwlncmVwIDMyZDEwYzdiOGNmOTY1NzBjYTA0Y2UzN2YyYTE5ZDg0MjQwZDNhODkgYWN0dWFsICYmCisJcGVybCAtZSAiJHwgPSAxOyBwcmludCBxe2FhYWFhYWFhYWF9IGZvciAxLi4xMDAwMDA7IiB8IFwKKwkJdGVzdC10b29sIHNoYTEgPmFjdHVhbCAmJgorCWdyZXAgMzRhYTk3M2NkNGM0ZGFhNGY2MWVlYjJiZGJhZDI3MzE2NTM0MDE2ZiBhY3R1YWwgJiYKKwlwcmludGYgImJsb2IgMFwwIiB8IHRlc3QtdG9vbCBzaGExID5hY3R1YWwgJiYKKwlncmVwIGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgYWN0dWFsICYmCisJcHJpbnRmICJibG9iIDNcMGFiYyIgfCB0ZXN0LXRvb2wgc2hhMSA+YWN0dWFsICYmCisJZ3JlcCBmMmJhOGY4NGFiNWMxYmNlODRhN2I0NDFjYjE5NTljZmM3MDkzYjdmIGFjdHVhbCAmJgorCXByaW50ZiAidHJlZSAwXDAiIHwgdGVzdC10b29sIHNoYTEgPmFjdHVhbCAmJgorCWdyZXAgNGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBiYXNpYyBTSEEtMjU2IGhhc2ggdmFsdWVzJyAnCisJdGVzdC10b29sIHNoYTI1NiA8L2Rldi9udWxsID5hY3R1YWwgJiYKKwlncmVwIGUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUgYWN0dWFsICYmCisJcHJpbnRmICJhIiB8IHRlc3QtdG9vbCBzaGEyNTYgPmFjdHVhbCAmJgorCWdyZXAgY2E5NzgxMTJjYTFiYmRjYWZhYzIzMWIzOWEyM2RjNGRhNzg2ZWZmODE0N2M0ZTcyYjk4MDc3ODVhZmVlNDhiYiBhY3R1YWwgJiYKKwlwcmludGYgImFiYyIgfCB0ZXN0LXRvb2wgc2hhMjU2ID5hY3R1YWwgJiYKKwlncmVwIGJhNzgxNmJmOGYwMWNmZWE0MTQxNDBkZTVkYWUyMjIzYjAwMzYxYTM5NjE3N2E5Y2I0MTBmZjYxZjIwMDE1YWQgYWN0dWFsICYmCisJcHJpbnRmICJtZXNzYWdlIGRpZ2VzdCIgfCB0ZXN0LXRvb2wgc2hhMjU2ID5hY3R1YWwgJiYKKwlncmVwIGY3ODQ2ZjU1Y2YyM2UxNGVlYmVhYjViNGUxNTUwY2FkNWI1MDllMzM0OGZiYzRlZmEzYTE0MTNkMzkzY2I2NTAgYWN0dWFsICYmCisJcHJpbnRmICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIgfCB0ZXN0LXRvb2wgc2hhMjU2ID5hY3R1YWwgJiYKKwlncmVwIDcxYzQ4MGRmOTNkNmFlMmYxZWZhZDE0NDdjNjZjOTUyNWUzMTYyMThjZjUxZmM4ZDllZDgzMmYyZGFmMThiNzMgYWN0dWFsICYmCisJIyBUcnkgdG8gZXhlcmNpc2UgdGhlIGNodW5raW5nIGNvZGUgYnkgdHVybmluZyBhdXRvZmx1c2ggb24uCisJcGVybCAtZSAiJHwgPSAxOyBwcmludCBxe2FhYWFhYWFhYWF9IGZvciAxLi4xMDAwMDA7IiB8IFwKKwkJdGVzdC10b29sIHNoYTI1NiA+YWN0dWFsICYmCisJZ3JlcCBjZGM3NmU1Yzk5MTRmYjkyODFhMWM3ZTI4NGQ3M2U2N2YxODA5YTQ4YTQ5NzIwMGUwNDZkMzljY2M3MTEyY2QwIGFjdHVhbCAmJgorCXBlcmwgLWUgIiR8ID0gMTsgcHJpbnQgcXthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5en0gZm9yIDEuLjEwMDAwMDsiIHwgXAorCQl0ZXN0LXRvb2wgc2hhMjU2ID5hY3R1YWwgJiYKKwlncmVwIGU0MDZiYTMyMWNhNzEyYWQzNWE2OThiZjBhZjhkNjFmYzRkYzQwZWNhNmJkY2VhNDY5Nzk2MjcyNGNjYmRlMzUgYWN0dWFsICYmCisJcHJpbnRmICJibG9iIDBcMCIgfCB0ZXN0LXRvb2wgc2hhMjU2ID5hY3R1YWwgJiYKKwlncmVwIDQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMgYWN0dWFsICYmCisJcHJpbnRmICJibG9iIDNcMGFiYyIgfCB0ZXN0LXRvb2wgc2hhMjU2ID5hY3R1YWwgJiYKKwlncmVwIGMxY2Y2ZTQ2NTA3NzkzMGU4OGRjNTEzNjY0MWQ0MDJmNzJhMjI5ZGRkOTk2ZjYyN2Q2MGU5NjM5ZWFiYTM1YTYgYWN0dWFsICYmCisJcHJpbnRmICJ0cmVlIDBcMCIgfCB0ZXN0LXRvb2wgc2hhMjU2ID5hY3R1YWwgJiYKKwlncmVwIDZlZjE5YjQxMjI1YzUzNjlmMWMxMDRkNDVkOGQ4NWVmYTliMDU3YjUzYjE0YjRiOWI5MzlkZDc0ZGVjYzUzMjEgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAxNi1vaWRtYXAuc2ggYi90L3QwMDE2LW9pZG1hcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMWY4Mjc2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDAxNi1vaWRtYXAuc2gKQEAgLTAsMCArMSwxMTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IG9pZG1hcCcKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRoaXMgcHVycG9zZWZ1bGx5IGlzIHZlcnkgc2ltaWxhciB0byB0MDAxMS1oYXNobWFwLnNoCisKK3Rlc3Rfb2lkbWFwICgpIHsKKwllY2hvICIkMSIgfCB0ZXN0LXRvb2wgb2lkbWFwICQzID5hY3R1YWwgJiYKKwllY2hvICIkMiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHV0JyAnCisKK3Rlc3Rfb2lkbWFwICJwdXQgb25lIDEKK3B1dCB0d28gMgorcHV0IGludmFsaWRPaWQgNAorcHV0IHRocmVlIDMiICJOVUxMCitOVUxMCitVbmtub3duIG9pZDogaW52YWxpZE9pZAorTlVMTCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBsYWNlJyAnCisKK3Rlc3Rfb2lkbWFwICJwdXQgb25lIDEKK3B1dCB0d28gMgorcHV0IHRocmVlIDMKK3B1dCBpbnZhbGlkT2lkIDQKK3B1dCB0d28gZGV1eAorcHV0IG9uZSB1biIgIk5VTEwKK05VTEwKK05VTEwKK1Vua25vd24gb2lkOiBpbnZhbGlkT2lkCisyCisxIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCcgJworCit0ZXN0X29pZG1hcCAicHV0IG9uZSAxCitwdXQgdHdvIDIKK3B1dCB0aHJlZSAzCitnZXQgdHdvCitnZXQgZm91cgorZ2V0IGludmFsaWRPaWQKK2dldCBvbmUiICJOVUxMCitOVUxMCitOVUxMCisyCitOVUxMCitVbmtub3duIG9pZDogaW52YWxpZE9pZAorMSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUnICcKKwordGVzdF9vaWRtYXAgInB1dCBvbmUgMQorcHV0IHR3byAyCitwdXQgdGhyZWUgMworcmVtb3ZlIG9uZQorcmVtb3ZlIHR3bworcmVtb3ZlIGludmFsaWRPaWQKK3JlbW92ZSBmb3VyIiAiTlVMTAorTlVMTAorTlVMTAorMQorMgorVW5rbm93biBvaWQ6IGludmFsaWRPaWQKK05VTEwiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaXRlcmF0ZScgJworCXRlc3QtdG9vbCBvaWRtYXAgPmFjdHVhbC5yYXcgPDwtXEVPRiAmJgorCXB1dCBvbmUgMQorCXB1dCB0d28gMgorCXB1dCB0aHJlZSAzCisJaXRlcmF0ZQorCUVPRgorCisJIyBzb3J0ICJleHBlY3QiIHRvbyBzbyB3ZSBkbyBub3QgcmVseSBvbiB0aGUgb3JkZXIgb2YgcGFydGljdWxhciBvaWRzCisJc29ydCA+ZXhwZWN0IDw8LUVPRiAmJgorCU5VTEwKKwlOVUxMCisJTlVMTAorCSQoZ2l0IHJldi1wYXJzZSBvbmUpIDEKKwkkKGdpdCByZXYtcGFyc2UgdHdvKSAyCisJJChnaXQgcmV2LXBhcnNlIHRocmVlKSAzCisJRU9GCisKKwlzb3J0IDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAxNy1lbnYtaGVscGVyLnNoIGIvdC90MDAxNy1lbnYtaGVscGVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxZWNmNmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDE3LWVudi1oZWxwZXIuc2gKQEAgLTAsMCArMSw5OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZW52LS1oZWxwZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vudi0taGVscGVyIHVzYWdlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGVudi0taGVscGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGVudi0taGVscGVyIC0tdHlwZT11bG9uZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLWRlZmF1bHR4eXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW52LS1oZWxwZXIgYmFkIGRlZmF1bHQgdmFsdWVzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD0xeHl6IE1JU1NJTkcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZW52LS1oZWxwZXIgLS10eXBlPXVsb25nIC0tZGVmYXVsdD0xeHl6IE1JU1NJTkcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW52LS1oZWxwZXIgLS10eXBlPWJvb2wnICcKKwkjIFRlc3QgdmFyaW91cyAtLWRlZmF1bHQgYm9vbCB2YWx1ZXMKKwllY2hvIHRydWUgPmV4cGVjdGVkICYmCisJZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD0xIE1JU1NJTkcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9eWVzIE1JU1NJTkcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9dHJ1ZSBNSVNTSU5HID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwllY2hvIGZhbHNlID5leHBlY3RlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9MCBNSVNTSU5HID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PW5vIE1JU1NJTkcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9ZmFsc2UgTUlTU0lORyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwkjIE5vIG91dHB1dCB3aXRoIC0tZXhpdC1jb2RlCisJZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD10cnVlIC0tZXhpdC1jb2RlIE1JU1NJTkcgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9ZmFsc2UgLS1leGl0LWNvZGUgTUlTU0lORyA+YWN0dWFsLm91dCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZXJyICYmCisKKwkjIEV4aXN0aW5nIHZhcmlhYmxlCisJRVhJU1RTPXRydWUgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD1mYWxzZSAtLWV4aXQtY29kZSBFWElTVFMgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVyciAmJgorCXRlc3RfbXVzdF9mYWlsIFwKKwkJZW52IEVYSVNUUz1mYWxzZSBcCisJCWdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9dHJ1ZSAtLWV4aXQtY29kZSBFWElTVFMgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbnYtLWhlbHBlciAtLXR5cGU9dWxvbmcnICcKKwllY2hvIDEyMzQ1Njc4OTAgPmV4cGVjdGVkICYmCisJZ2l0IGVudi0taGVscGVyIC0tdHlwZT11bG9uZyAtLWRlZmF1bHQ9MTIzNDU2Nzg5MCBNSVNTSU5HID5hY3R1YWwub3V0IDI+YWN0dWFsLmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVyciAmJgorCisJZWNobyAwID5leHBlY3RlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9dWxvbmcgLS1kZWZhdWx0PTAgTUlTU0lORyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlnaXQgZW52LS1oZWxwZXIgLS10eXBlPXVsb25nIC0tZGVmYXVsdD0xMjM0NTY3ODkwIC0tZXhpdC1jb2RlIE1JU1NJTkcgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVyciAmJgorCisJRVhJU1RTPTEyMzQ1Njc4OTAgZ2l0IGVudi0taGVscGVyIC0tdHlwZT11bG9uZyAtLWRlZmF1bHQ9MCBFWElTVFMgLS1leGl0LWNvZGUgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVyciAmJgorCisJZWNobyAxMjM0NTY3ODkwID5leHBlY3RlZCAmJgorCUVYSVNUUz0xMjM0NTY3ODkwIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9dWxvbmcgLS1kZWZhdWx0PTAgRVhJU1RTID5hY3R1YWwub3V0IDI+YWN0dWFsLmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbnYtLWhlbHBlciByZWFkcyBjb25maWcgdGhhbmtzIHRvIHRyYWNlMicgJworCW1rZGlyIGhvbWUgJiYKKwlnaXQgY29uZmlnIC1mIGhvbWUvLmdpdGNvbmZpZyBpbmNsdWRlLnBhdGggY3ljbGUgJiYKKwlnaXQgY29uZmlnIC1mIGhvbWUvY3ljbGUgaW5jbHVkZS5wYXRoIC5naXRjb25maWcgJiYKKworCXRlc3RfbXVzdF9mYWlsIFwKKwkJZW52IEhPTUU9IiQocHdkKS9ob21lIiBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTj1mYWxzZSBcCisJCWdpdCBjb25maWcgLWwgMj5lcnIgJiYKKwlncmVwICJleGNlZWRlZCBtYXhpbXVtIGluY2x1ZGUgZGVwdGgiIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgXAorCQllbnYgSE9NRT0iJChwd2QpL2hvbWUiIEdJVF9URVNUX0dFVFRFWFRfUE9JU09OPXRydWUgXAorCQlnaXQgLUMgY3ljbGUgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PTAgLS1leGl0LWNvZGUgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04gMj5lcnIgJiYKKwlncmVwICIjIEdFVFRFWFQgUE9JU09OICMiIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMTgtYWR2aWNlLnNoIGIvdC90MDAxOC1hZHZpY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTAzNTU0ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMTgtYWR2aWNlLnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGFkdmlzZV9pZl9lbmFibGVkIGZ1bmN0aW9uYWxpdHknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZHZpY2Ugc2hvdWxkIGJlIHByaW50ZWQgd2hlbiBjb25maWcgdmFyaWFibGUgaXMgdW5zZXQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJaGludDogVGhpcyBpcyBhIHBpZWNlIG9mIGFkdmljZQorCWhpbnQ6IERpc2FibGUgdGhpcyBtZXNzYWdlIHdpdGggImdpdCBjb25maWcgYWR2aWNlLm5lc3RlZFRhZyBmYWxzZSIKKwlFT0YKKwl0ZXN0LXRvb2wgYWR2aXNlICJUaGlzIGlzIGEgcGllY2Ugb2YgYWR2aWNlIiAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkdmljZSBzaG91bGQgYmUgcHJpbnRlZCB3aGVuIGNvbmZpZyB2YXJpYWJsZSBpcyBzZXQgdG8gdHJ1ZScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwloaW50OiBUaGlzIGlzIGEgcGllY2Ugb2YgYWR2aWNlCisJaGludDogRGlzYWJsZSB0aGlzIG1lc3NhZ2Ugd2l0aCAiZ2l0IGNvbmZpZyBhZHZpY2UubmVzdGVkVGFnIGZhbHNlIgorCUVPRgorCXRlc3RfY29uZmlnIGFkdmljZS5uZXN0ZWRUYWcgdHJ1ZSAmJgorCXRlc3QtdG9vbCBhZHZpc2UgIlRoaXMgaXMgYSBwaWVjZSBvZiBhZHZpY2UiIDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWR2aWNlIHNob3VsZCBub3QgYmUgcHJpbnRlZCB3aGVuIGNvbmZpZyB2YXJpYWJsZSBpcyBzZXQgdG8gZmFsc2UnICcKKwl0ZXN0X2NvbmZpZyBhZHZpY2UubmVzdGVkVGFnIGZhbHNlICYmCisJdGVzdC10b29sIGFkdmlzZSAiVGhpcyBpcyBhIHBpZWNlIG9mIGFkdmljZSIgMj5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAxOS1qc29uLXdyaXRlci5zaCBiL3QvdDAwMTktanNvbi13cml0ZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2IwYzMzNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMTktanNvbi13cml0ZXIuc2gKQEAgLTAsMCArMSwzMzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGpzb24td3JpdGVyIEpTT04gZ2VuZXJhdGlvbicKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bml0IHRlc3Qgb2YganNvbi13cml0ZXIgcm91dGluZXMnICcKKwl0ZXN0LXRvb2wganNvbi13cml0ZXIgLXUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJpdmlhbCBvYmplY3QnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJe30KKwlFT0YKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlvYmplY3QKKwllbmQKKwlFT0YKKwl0ZXN0LXRvb2wganNvbi13cml0ZXIgPGlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyaXZpYWwgYXJyYXknICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJW10KKwlFT0YKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlhcnJheQorCWVuZAorCUVPRgorCXRlc3QtdG9vbCBqc29uLXdyaXRlciA8aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIG9iamVjdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl7ImEiOiJhYmMiLCJiIjo0MiwiYyI6My4xNCwiZCI6dHJ1ZSwiZSI6ZmFsc2UsImYiOm51bGx9CisJRU9GCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJb2JqZWN0CisJCW9iamVjdC1zdHJpbmcgYSBhYmMKKwkJb2JqZWN0LWludCBiIDQyCisJCW9iamVjdC1kb3VibGUgYyAyIDMuMTQwCisJCW9iamVjdC10cnVlIGQKKwkJb2JqZWN0LWZhbHNlIGUKKwkJb2JqZWN0LW51bGwgZgorCWVuZAorCUVPRgorCXRlc3QtdG9vbCBqc29uLXdyaXRlciA8aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIGFycmF5JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCVsiYWJjIiw0MiwzLjE0LHRydWUsZmFsc2UsbnVsbF0KKwlFT0YKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlhcnJheQorCQlhcnJheS1zdHJpbmcgYWJjCisJCWFycmF5LWludCA0MgorCQlhcnJheS1kb3VibGUgMiAzLjE0MAorCQlhcnJheS10cnVlCisJCWFycmF5LWZhbHNlCisJCWFycmF5LW51bGwKKwllbmQKKwlFT0YKKwl0ZXN0LXRvb2wganNvbi13cml0ZXIgPGlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VzY2FwZSBxdW90aW5nIHN0cmluZycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl7ImEiOiJhYmNcXGRlZiJ9CisJRU9GCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJb2JqZWN0CisJCW9iamVjdC1zdHJpbmcgYSBhYmNcZGVmCisJZW5kCisJRU9GCisJdGVzdC10b29sIGpzb24td3JpdGVyIDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlc2NhcGUgcXVvdGluZyBzdHJpbmcgMicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl7ImEiOiJhYmNcImRlZiJ9CisJRU9GCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJb2JqZWN0CisJCW9iamVjdC1zdHJpbmcgYSBhYmMiZGVmCisJZW5kCisJRU9GCisJdGVzdC10b29sIGpzb24td3JpdGVyIDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXN0ZWQgaW5saW5lIG9iamVjdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl7ImEiOiJhYmMiLCJiIjo0Miwic3ViMSI6eyJjIjozLjE0LCJkIjp0cnVlLCJzdWIyIjp7ImUiOmZhbHNlLCJmIjpudWxsfX19CisJRU9GCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJb2JqZWN0CisJCW9iamVjdC1zdHJpbmcgYSBhYmMKKwkJb2JqZWN0LWludCBiIDQyCisJCW9iamVjdC1vYmplY3Qgc3ViMQorCQkJb2JqZWN0LWRvdWJsZSBjIDIgMy4xNDAKKwkJCW9iamVjdC10cnVlIGQKKwkJCW9iamVjdC1vYmplY3Qgc3ViMgorCQkJCW9iamVjdC1mYWxzZSBlCisJCQkJb2JqZWN0LW51bGwgZgorCQkJZW5kCisJCWVuZAorCWVuZAorCUVPRgorCXRlc3QtdG9vbCBqc29uLXdyaXRlciA8aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVzdGVkIGlubGluZSBhcnJheScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlbImFiYyIsNDIsWzMuMTQsdHJ1ZSxbZmFsc2UsbnVsbF1dXQorCUVPRgorCWNhdCA+aW5wdXQgPDwtXEVPRiAmJgorCWFycmF5CisJCWFycmF5LXN0cmluZyBhYmMKKwkJYXJyYXktaW50IDQyCisJCWFycmF5LWFycmF5CisJCQlhcnJheS1kb3VibGUgMiAzLjE0MAorCQkJYXJyYXktdHJ1ZQorCQkJYXJyYXktYXJyYXkKKwkJCQlhcnJheS1mYWxzZQorCQkJCWFycmF5LW51bGwKKwkJCWVuZAorCQllbmQKKwllbmQKKwlFT0YKKwl0ZXN0LXRvb2wganNvbi13cml0ZXIgPGlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lc3RlZCBpbmxpbmUgb2JqZWN0IGFuZCBhcnJheScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl7ImEiOiJhYmMiLCJiIjo0Miwic3ViMSI6eyJjIjozLjE0LCJkIjp0cnVlLCJzdWIyIjpbZmFsc2UsbnVsbF19fQorCUVPRgorCWNhdCA+aW5wdXQgPDwtXEVPRiAmJgorCW9iamVjdAorCQlvYmplY3Qtc3RyaW5nIGEgYWJjCisJCW9iamVjdC1pbnQgYiA0MgorCQlvYmplY3Qtb2JqZWN0IHN1YjEKKwkJCW9iamVjdC1kb3VibGUgYyAyIDMuMTQwCisJCQlvYmplY3QtdHJ1ZSBkCisJCQlvYmplY3QtYXJyYXkgc3ViMgorCQkJCWFycmF5LWZhbHNlCisJCQkJYXJyYXktbnVsbAorCQkJZW5kCisJCWVuZAorCWVuZAorCUVPRgorCXRlc3QtdG9vbCBqc29uLXdyaXRlciA8aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVzdGVkIGlubGluZSBvYmplY3QgYW5kIGFycmF5IDInICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJeyJhIjoiYWJjIiwiYiI6NDIsInN1YjEiOnsiYyI6My4xNCwiZCI6dHJ1ZSwic3ViMiI6W2ZhbHNlLHsiZyI6MCwiaCI6MX0sbnVsbF19fQorCUVPRgorCWNhdCA+aW5wdXQgPDwtXEVPRiAmJgorCW9iamVjdAorCQlvYmplY3Qtc3RyaW5nIGEgYWJjCisJCW9iamVjdC1pbnQgYiA0MgorCQlvYmplY3Qtb2JqZWN0IHN1YjEKKwkJCW9iamVjdC1kb3VibGUgYyAyIDMuMTQwCisJCQlvYmplY3QtdHJ1ZSBkCisJCQlvYmplY3QtYXJyYXkgc3ViMgorCQkJCWFycmF5LWZhbHNlCisJCQkJYXJyYXktb2JqZWN0CisJCQkJCW9iamVjdC1pbnQgZyAwCisJCQkJCW9iamVjdC1pbnQgaCAxCisJCQkJZW5kCisJCQkJYXJyYXktbnVsbAorCQkJZW5kCisJCWVuZAorCWVuZAorCUVPRgorCXRlc3QtdG9vbCBqc29uLXdyaXRlciA8aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldHR5IG5lc3RlZCBpbmxpbmUgb2JqZWN0IGFuZCBhcnJheSAyJyAnCisJc2VkIC1lICJzL158Ly8iID5leHBlY3QgPDwtXEVPRiAmJgorCXx7CisJfCAgImEiOiAiYWJjIiwKKwl8ICAiYiI6IDQyLAorCXwgICJzdWIxIjogeworCXwgICAgImMiOiAzLjE0LAorCXwgICAgImQiOiB0cnVlLAorCXwgICAgInN1YjIiOiBbCisJfCAgICAgIGZhbHNlLAorCXwgICAgICB7CisJfCAgICAgICAgImciOiAwLAorCXwgICAgICAgICJoIjogMQorCXwgICAgICB9LAorCXwgICAgICBudWxsCisJfCAgICBdCisJfCAgfQorCXx9CisJRU9GCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJb2JqZWN0CisJCW9iamVjdC1zdHJpbmcgYSBhYmMKKwkJb2JqZWN0LWludCBiIDQyCisJCW9iamVjdC1vYmplY3Qgc3ViMQorCQkJb2JqZWN0LWRvdWJsZSBjIDIgMy4xNDAKKwkJCW9iamVjdC10cnVlIGQKKwkJCW9iamVjdC1hcnJheSBzdWIyCisJCQkJYXJyYXktZmFsc2UKKwkJCQlhcnJheS1vYmplY3QKKwkJCQkJb2JqZWN0LWludCBnIDAKKwkJCQkJb2JqZWN0LWludCBoIDEKKwkJCQllbmQKKwkJCQlhcnJheS1udWxsCisJCQllbmQKKwkJZW5kCisJZW5kCisJRU9GCisJdGVzdC10b29sIGpzb24td3JpdGVyIC1wIDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmxpbmUgb2JqZWN0IHdpdGggbm8gbWVtYmVycycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl7ImEiOiJhYmMiLCJlbXB0eSI6e30sImIiOjQyfQorCUVPRgorCWNhdCA+aW5wdXQgPDwtXEVPRiAmJgorCW9iamVjdAorCQlvYmplY3Qtc3RyaW5nIGEgYWJjCisJCW9iamVjdC1vYmplY3QgZW1wdHkKKwkJZW5kCisJCW9iamVjdC1pbnQgYiA0MgorCWVuZAorCUVPRgorCXRlc3QtdG9vbCBqc29uLXdyaXRlciA8aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5saW5lIGFycmF5IHdpdGggbm8gbWVtYmVycycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl7ImEiOiJhYmMiLCJlbXB0eSI6W10sImIiOjQyfQorCUVPRgorCWNhdCA+aW5wdXQgPDwtXEVPRiAmJgorCW9iamVjdAorCQlvYmplY3Qtc3RyaW5nIGEgYWJjCisJCW9iamVjdC1hcnJheSBlbXB0eQorCQllbmQKKwkJb2JqZWN0LWludCBiIDQyCisJZW5kCisJRU9GCisJdGVzdC10b29sIGpzb24td3JpdGVyIDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXJnZXIgZW1wdHkgZXhhbXBsZScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl7ImEiOiJhYmMiLCJlbXB0eSI6W3t9LHt9LHt9LFtdLHt9XSwiYiI6NDJ9CisJRU9GCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJb2JqZWN0CisJCW9iamVjdC1zdHJpbmcgYSBhYmMKKwkJb2JqZWN0LWFycmF5IGVtcHR5CisJCQlhcnJheS1vYmplY3QKKwkJCWVuZAorCQkJYXJyYXktb2JqZWN0CisJCQllbmQKKwkJCWFycmF5LW9iamVjdAorCQkJZW5kCisJCQlhcnJheS1hcnJheQorCQkJZW5kCisJCQlhcnJheS1vYmplY3QKKwkJCWVuZAorCQllbmQKKwkJb2JqZWN0LWludCBiIDQyCisJZW5kCisJRU9GCisJdGVzdC10b29sIGpzb24td3JpdGVyIDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2xhenlfcHJlcmVxIFBFUkxKU09OICcKKwlwZXJsIC1NSlNPTiAtZSAiZXhpdCAwIgorJworCisjIEFzIGEgc2FuaXR5IGNoZWNrLCBhc2sgUGVybCB0byBwYXJzZSBvdXIgZ2VuZXJhdGVkIEpTT04gYW5kIHJlY3Vyc2l2ZWx5CisjIGR1bXAgdGhlIHJlc3VsdGluZyBkYXRhIGluIHNvcnRlZCBvcmRlci4gIENvbmZpcm0gdGhhdCB0aGF0IG1hdGNoZXMgb3VyCisjIGV4cGVjdGF0aW9ucy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTEpTT04gJ3BhcnNlIEpTT04gdXNpbmcgUGVybCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlyb3dbMF0uYSBhYmMKKwlyb3dbMF0uYiA0MgorCXJvd1swXS5zdWIxIGhhc2gKKwlyb3dbMF0uc3ViMS5jIDMuMTQKKwlyb3dbMF0uc3ViMS5kIDEKKwlyb3dbMF0uc3ViMS5zdWIyIGFycmF5CisJcm93WzBdLnN1YjEuc3ViMlswXSAwCisJcm93WzBdLnN1YjEuc3ViMlsxXSBoYXNoCisJcm93WzBdLnN1YjEuc3ViMlsxXS5nIDAKKwlyb3dbMF0uc3ViMS5zdWIyWzFdLmggMQorCXJvd1swXS5zdWIxLnN1YjJbMl0gbnVsbAorCUVPRgorCWNhdCA+aW5wdXQgPDwtXEVPRiAmJgorCW9iamVjdAorCQlvYmplY3Qtc3RyaW5nIGEgYWJjCisJCW9iamVjdC1pbnQgYiA0MgorCQlvYmplY3Qtb2JqZWN0IHN1YjEKKwkJCW9iamVjdC1kb3VibGUgYyAyIDMuMTQwCisJCQlvYmplY3QtdHJ1ZSBkCisJCQlvYmplY3QtYXJyYXkgc3ViMgorCQkJCWFycmF5LWZhbHNlCisJCQkJYXJyYXktb2JqZWN0CisJCQkJCW9iamVjdC1pbnQgZyAwCisJCQkJCW9iamVjdC1pbnQgaCAxCisJCQkJZW5kCisJCQkJYXJyYXktbnVsbAorCQkJZW5kCisJCWVuZAorCWVuZAorCUVPRgorCXRlc3QtdG9vbCBqc29uLXdyaXRlciA8aW5wdXQgPm91dHB1dC5qc29uICYmCisJcGVybCAiJFRFU1RfRElSRUNUT1JZIi90MDAxOS9wYXJzZV9qc29uLnBlcmwgPG91dHB1dC5qc29uID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAxOS9wYXJzZV9qc29uLnBlcmwgYi90L3QwMDE5L3BhcnNlX2pzb24ucGVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWE4N2ZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAxOS9wYXJzZV9qc29uLnBlcmwKQEAgLTAsMCArMSw1NSBAQAorIyEvdXNyL2Jpbi9wZXJsCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEpTT047CisKK3N1YiBkdW1wX2FycmF5IHsKKyAgICBteSAoJGxhYmVsX2luLCAkYXJ5X3JlZikgPSBAXzsKKyAgICBteSBAYXJ5ID0gQCRhcnlfcmVmOworCisgICAgZm9yICggbXkgJGkgPSAwOyAkaSA8PSAkI3sgJGFyeV9yZWYgfTsgJGkrKyApCisgICAgeworCW15ICRsYWJlbCA9ICIkbGFiZWxfaW5cWyRpXF0iOworCWR1bXBfaXRlbSgkbGFiZWwsICRhcnlbJGldKTsKKyAgICB9Cit9CisKK3N1YiBkdW1wX2hhc2ggeworICAgIG15ICgkbGFiZWxfaW4sICRvYmpfcmVmKSA9IEBfOworICAgIG15ICVvYmogPSAlJG9ial9yZWY7CisKKyAgICBmb3JlYWNoIG15ICRrIChzb3J0IGtleXMgJW9iaikgeworCW15ICRsYWJlbCA9IChsZW5ndGgoJGxhYmVsX2luKSA+IDApID8gIiRsYWJlbF9pbi4kayIgOiAiJGsiOworCW15ICR2YWx1ZSA9ICRvYmp7JGt9OworCisJZHVtcF9pdGVtKCRsYWJlbCwgJHZhbHVlKTsKKyAgICB9Cit9CisKK3N1YiBkdW1wX2l0ZW0geworICAgIG15ICgkbGFiZWxfaW4sICR2YWx1ZSkgPSBAXzsKKyAgICBpZiAocmVmKCR2YWx1ZSkgZXEgJ0FSUkFZJykgeworCXByaW50ICIkbGFiZWxfaW4gYXJyYXlcbiI7CisJZHVtcF9hcnJheSgkbGFiZWxfaW4sICR2YWx1ZSk7CisgICAgfSBlbHNpZiAocmVmKCR2YWx1ZSkgZXEgJ0hBU0gnKSB7CisJcHJpbnQgIiRsYWJlbF9pbiBoYXNoXG4iOworCWR1bXBfaGFzaCgkbGFiZWxfaW4sICR2YWx1ZSk7CisgICAgfSBlbHNpZiAocmVmICR2YWx1ZSkgeworCW15ICRib29sID0gJHZhbHVlID8gMSA6IDA7CisJcHJpbnQgIiRsYWJlbF9pbiAkYm9vbFxuIjsKKyAgICB9IGVsc2lmIChkZWZpbmVkICR2YWx1ZSkgeworCXByaW50ICIkbGFiZWxfaW4gJHZhbHVlXG4iOworICAgIH0gZWxzZSB7CisJcHJpbnQgIiRsYWJlbF9pbiBudWxsXG4iOworICAgIH0KK30KKworbXkgJHJvdyA9IDA7Cit3aGlsZSAoPD4pIHsKKyAgICBteSAkZGF0YSA9IGRlY29kZV9qc29uKCAkXyApOworICAgIG15ICRsYWJlbCA9ICJyb3dbJHJvd10iOworCisgICAgZHVtcF9oYXNoKCRsYWJlbCwgJGRhdGEpOworICAgICRyb3crKzsKK30KKwpkaWZmIC0tZ2l0IGEvdC90MDAyMC1jcmxmLnNoIGIvdC90MDAyMC1jcmxmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI2M2JhNjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDIwLWNybGYuc2gKQEAgLTAsMCArMSwzOTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdDUkxGIGNvbnZlcnNpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCitoYXNfY3IoKSB7CisJdHIgJ1wwMTUnIFEgPCIkMSIgfCBncmVwIFEgPi9kZXYvbnVsbAorfQorCisjIGFkZCBvciByZW1vdmUgQ1JzIHRvIGRpc2sgZmlsZSBpbi1wbGFjZQorIyB1c2FnZTogbXVuZ2VfY3IgPGFwcGVuZHxyZW1vdmU+IDxmaWxlPgorbXVuZ2VfY3IgKCkgeworCSIkezF9X2NyIiA8IiQyIiA+dG1wICYmCisJbXYgdG1wICIkMiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UgJiYKKworCWZvciB3IGluIEhlbGxvIHdvcmxkIGhvdyBhcmUgeW91OyBkbyBlY2hvICR3OyBkb25lID5vbmUgJiYKKwlta2RpciBkaXIgJiYKKwlmb3IgdyBpbiBJIGFtIHZlcnkgdmVyeSBmaW5lIHRoYW5rIHlvdTsgZG8gZWNobyAkdzsgZG9uZSA+ZGlyL3R3byAmJgorCWZvciB3IGluIE9oIGhlcmUgaXMgTlVMUWluIHRleHQgaGVyZTsgZG8gZWNobyAkdzsgZG9uZSB8IHFfdG9fbnVsID50aHJlZSAmJgorCWdpdCBhZGQgLiAmJgorCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlvbmU9JChnaXQgcmV2LXBhcnNlIEhFQUQ6b25lKSAmJgorCWRpcj0kKGdpdCByZXYtcGFyc2UgSEVBRDpkaXIpICYmCisJdHdvPSQoZ2l0IHJldi1wYXJzZSBIRUFEOmRpci90d28pICYmCisJdGhyZWU9JChnaXQgcmV2LXBhcnNlIEhFQUQ6dGhyZWUpICYmCisKKwlmb3IgdyBpbiBTb21lIGV4dHJhIGxpbmVzIGhlcmU7IGRvIGVjaG8gJHc7IGRvbmUgPj5vbmUgJiYKKwlnaXQgZGlmZiA+cGF0Y2guZmlsZSAmJgorCXBhdGNoZWQ9JChnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8b25lKSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhZmVjcmxmOiBhdXRvY3JsZj1pbnB1dCwgYWxsIENSTEYnICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgorCWdpdCBjb25maWcgY29yZS5zYWZlY3JsZiB0cnVlICYmCisKKwlmb3IgdyBpbiBJIGFtIGFsbCBDUkxGOyBkbyBlY2hvICR3OyBkb25lIHwgYXBwZW5kX2NyID5hbGxjcmxmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBhbGxjcmxmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhZmVjcmxmOiBhdXRvY3JsZj1pbnB1dCwgbWl4ZWQgTEYvQ1JMRicgJworCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNhZmVjcmxmIHRydWUgJiYKKworCWZvciB3IGluIE9oIGhlcmUgaXMgQ1JMRlEgaW4gdGV4dDsgZG8gZWNobyAkdzsgZG9uZSB8IHFfdG9fY3IgPm1peGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBtaXhlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYWZlY3JsZjogYXV0b2NybGY9dHJ1ZSwgYWxsIExGJyAnCisKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWdpdCBjb25maWcgY29yZS5zYWZlY3JsZiB0cnVlICYmCisKKwlmb3IgdyBpbiBJIGFtIGFsbCBMRjsgZG8gZWNobyAkdzsgZG9uZSA+YWxsbGYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGFsbGxmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhZmVjcmxmOiBhdXRvY3JsZj10cnVlIG1peGVkIExGL0NSTEYnICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNhZmVjcmxmIHRydWUgJiYKKworCWZvciB3IGluIE9oIGhlcmUgaXMgQ1JMRlEgaW4gdGV4dDsgZG8gZWNobyAkdzsgZG9uZSB8IHFfdG9fY3IgPm1peGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBtaXhlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYWZlY3JsZjogcHJpbnQgd2FybmluZyBvbmx5IG9uY2UnICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgorCWdpdCBjb25maWcgY29yZS5zYWZlY3JsZiB3YXJuICYmCisKKwlmb3IgdyBpbiBJIGFtIGFsbCBMRjsgZG8gZWNobyAkdzsgZG9uZSA+ZG91Ymxld2FybiAmJgorCWdpdCBhZGQgZG91Ymxld2FybiAmJgorCWdpdCBjb21taXQgLW0gIm5vd2FybiIgJiYKKwlmb3IgdyBpbiBPaCBoZXJlIGlzIENSTEZRIGluIHRleHQ7IGRvIGVjaG8gJHc7IGRvbmUgfCBxX3RvX2NyID5kb3VibGV3YXJuICYmCisJZ2l0IGFkZCBkb3VibGV3YXJuIDI+ZXJyICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBDX0xPQ0FMRV9PVVRQVVQKKwl0aGVuCisJCXRlc3QgJChncmVwICJDUkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgTEYiIGVyciB8IHdjIC1sKSA9IDEKKwlmaQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhZmVjcmxmOiBnaXQgZGlmZiBkZW1vdGVzIHNhZmVjcmxmPXRydWUgdG8gd2FybicgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgorCWdpdCBjb25maWcgY29yZS5zYWZlY3JsZiB0cnVlICYmCisJZ2l0IGRpZmYgSEVBRAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhZmVjcmxmOiBubyB3YXJuaW5nIHdpdGggc2FmZWNybGY9ZmFsc2UnICcKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgaW5wdXQgJiYKKwlnaXQgY29uZmlnIGNvcmUuc2FmZWNybGYgZmFsc2UgJiYKKworCWZvciB3IGluIEkgYW0gYWxsIENSTEY7IGRvIGVjaG8gJHc7IGRvbmUgfCBhcHBlbmRfY3IgPmFsbGNybGYgJiYKKwlnaXQgYWRkIGFsbGNybGYgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIG9mZiBhdXRvY3JsZiwgc2FmZWNybGYsIHJlc2V0IEhFQUQnICcKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UgJiYKKwlnaXQgY29uZmlnIGNvcmUuc2FmZWNybGYgZmFsc2UgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSB3aXRoIGF1dG9jcmxmPWlucHV0JyAnCisKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgorCW11bmdlX2NyIGFwcGVuZCBvbmUgJiYKKwltdW5nZV9jciBhcHBlbmQgZGlyL3R3byAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS0gb25lIGRpci90d28gJiYKKwlkaWZmZXJzPSQoZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRCkgJiYKKwl2ZXJib3NlIHRlc3QgLXogIiRkaWZmZXJzIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSB3aXRoIGF1dG9jcmxmPXRydWUnICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwltdW5nZV9jciBhcHBlbmQgb25lICYmCisJbXVuZ2VfY3IgYXBwZW5kIGRpci90d28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tIG9uZSBkaXIvdHdvICYmCisJZGlmZmVycz0kKGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQpICYmCisJdmVyYm9zZSB0ZXN0IC16ICIkZGlmZmVycyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGF1dG9jcmxmPXRydWUnICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwltdW5nZV9jciByZW1vdmUgb25lICYmCisJbXVuZ2VfY3IgcmVtb3ZlIGRpci90d28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tIG9uZSBkaXIvdHdvICYmCisJdGVzdCAiJG9uZSIgPSAkKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDxvbmUpICYmCisJdGVzdCAiJHR3byIgPSAkKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDxkaXIvdHdvKSAmJgorCWRpZmZlcnM9JChnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEKSAmJgorCXZlcmJvc2UgdGVzdCAteiAiJGRpZmZlcnMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggYXV0b2NybGY9aW5wdXQnICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJISBoYXNfY3Igb25lICYmCisJISBoYXNfY3IgZGlyL3R3byAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS0gb25lIGRpci90d28gJiYKKwl0ZXN0ICIkb25lIiA9ICQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPG9uZSkgJiYKKwl0ZXN0ICIkdHdvIiA9ICQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPGRpci90d28pICYmCisJZGlmZmVycz0kKGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQpICYmCisJdmVyYm9zZSB0ZXN0IC16ICIkZGlmZmVycyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggKGF1dG9jcmxmPWlucHV0KScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWdpdCBhcHBseSBwYXRjaC5maWxlICYmCisJdmVyYm9zZSB0ZXN0ICIkcGF0Y2hlZCIgPSAiJChnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8b25lKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggLS1jYWNoZWQgKGF1dG9jcmxmPWlucHV0KScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWdpdCBhcHBseSAtLWNhY2hlZCBwYXRjaC5maWxlICYmCisJdmVyYm9zZSB0ZXN0ICIkcGF0Y2hlZCIgPSAkKGdpdCByZXYtcGFyc2UgOm9uZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggLS1pbmRleCAoYXV0b2NybGY9aW5wdXQpJyAnCisKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgaW5wdXQgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2guZmlsZSAmJgorCXZlcmJvc2UgdGVzdCAiJHBhdGNoZWQiID0gJChnaXQgcmV2LXBhcnNlIDpvbmUpICYmCisJdmVyYm9zZSB0ZXN0ICIkcGF0Y2hlZCIgPSAkKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDxvbmUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHBhdGNoIChhdXRvY3JsZj10cnVlKScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJZ2l0IGFwcGx5IHBhdGNoLmZpbGUgJiYKKwl2ZXJib3NlIHRlc3QgIiRwYXRjaGVkIiA9ICIkKHJlbW92ZV9jciA8b25lIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBwYXRjaCAtLWNhY2hlZCAoYXV0b2NybGY9dHJ1ZSknICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWdpdCBhcHBseSAtLWNhY2hlZCBwYXRjaC5maWxlICYmCisJdmVyYm9zZSB0ZXN0ICIkcGF0Y2hlZCIgPSAkKGdpdCByZXYtcGFyc2UgOm9uZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggLS1pbmRleCAoYXV0b2NybGY9dHJ1ZSknICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoLmZpbGUgJiYKKwl2ZXJib3NlIHRlc3QgIiRwYXRjaGVkIiA9ICQoZ2l0IHJldi1wYXJzZSA6b25lKSAmJgorCXZlcmJvc2UgdGVzdCAiJHBhdGNoZWQiID0gIiQocmVtb3ZlX2NyIDxvbmUgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRhdHRyaWJ1dGVzIHNheXMgdHdvIGlzIGJpbmFyeScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZWNobyAidHdvIC1jcmxmIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwkhIGhhc19jciBkaXIvdHdvICYmCisJdmVyYm9zZSBoYXNfY3Igb25lICYmCisJISBoYXNfY3IgdGhyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdGF0dHJpYnV0ZXMgc2F5cyB0d28gaXMgaW5wdXQnICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWVjaG8gInR3byBjcmxmPWlucHV0IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJISBoYXNfY3IgZGlyL3R3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0YXR0cmlidXRlcyBzYXlzIHR3byBhbmQgdGhyZWUgYXJlIHRleHQnICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWVjaG8gInQqIGNybGYiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwl2ZXJib3NlIGhhc19jciBkaXIvdHdvICYmCisJdmVyYm9zZSBoYXNfY3IgdGhyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4tdHJlZSAuZ2l0YXR0cmlidXRlcyAoMSknICcKKworCWVjaG8gIm9uZSAtY3JsZiIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgLmdpdGF0dHJpYnV0ZXMiICYmCisKKwlybSAtcmYgdG1wIG9uZSBkaXIgLmdpdGF0dHJpYnV0ZXMgcGF0Y2guZmlsZSB0aHJlZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwkhIGhhc19jciBvbmUgJiYKKwl2ZXJib3NlIGhhc19jciB0aHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbi10cmVlIC5naXRhdHRyaWJ1dGVzICgyKScgJworCisJcm0gLXJmIHRtcCBvbmUgZGlyIC5naXRhdHRyaWJ1dGVzIHBhdGNoLmZpbGUgdGhyZWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgSEVBRCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtZiAtcSAtdSAtYSAmJgorCisJISBoYXNfY3Igb25lICYmCisJdmVyYm9zZSBoYXNfY3IgdGhyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4tdHJlZSAuZ2l0YXR0cmlidXRlcyAoMyknICcKKworCXJtIC1yZiB0bXAgb25lIGRpciAuZ2l0YXR0cmlidXRlcyBwYXRjaC5maWxlIHRocmVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLXUgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLXUgb25lIGRpci90d28gdGhyZWUgJiYKKworCSEgaGFzX2NyIG9uZSAmJgorCXZlcmJvc2UgaGFzX2NyIHRocmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luLXRyZWUgLmdpdGF0dHJpYnV0ZXMgKDQpJyAnCisKKwlybSAtcmYgdG1wIG9uZSBkaXIgLmdpdGF0dHJpYnV0ZXMgcGF0Y2guZmlsZSB0aHJlZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCBIRUFEICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC11IG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC11IC5naXRhdHRyaWJ1dGVzICYmCisKKwkhIGhhc19jciBvbmUgJiYKKwl2ZXJib3NlIGhhc19jciB0aHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGV4aXN0aW5nIC5naXRhdHRyaWJ1dGVzJyAnCisKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb3JlLnNhZmVjcmxmICYmCisJZWNobyAiLmZpbGUyIC1jcmxmUSIgfCBxX3RvX2NyID4+IC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGFkZCAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gIi5maWxlIC1jcmxmUSIgfCBxX3RvX2NyID4+IC5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiY29udGVudHMiID4gLmZpbGUgJiYKKwlnaXQgYWRkIC5naXRhdHRyaWJ1dGVzIC5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXJ+MSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0ICIkKGdpdCBkaWZmLWZpbGVzIC0tcmF3KSIgPSAiIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdoZW4gZGVsZXRpbmcgLmdpdGF0dHJpYnV0ZXMnICcKKworCWdpdCBybSAuZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gImNvbnRlbnRzUSIgfCBxX3RvX2NyID4gLmZpbGUyICYmCisJZ2l0IGFkZCAuZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIHRoaXJkICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyfjEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJaGFzX2NyIC5maWxlMgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgLmdpdGF0dHJpYnV0ZXMgKG11c3Qgbm90IGNyYXNoKScgJworCisJZWNobyAidGhyZWUgK2NybGYiID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgZGlmZgorCisnCisjIFNvbWUgbW9yZSB0ZXN0cyBoZXJlIHRvIGFkZCBuZXcgYXV0b2NybGYgZnVuY3Rpb25hbGl0eS4KKyMgV2Ugd2FudCB0byBoYXZlIGEga25vd24gc3RhdGUgaGVyZSwgc28gc3RhcnQgYSBiaXQgZnJvbSBzY3JhdGNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgdXAgZm9yIG5ldyBhdXRvY3JsZiB0ZXN0cycgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCWdpdCBjb25maWcgY29yZS5zYWZlY3JsZiBmYWxzZSAmJgorCXJtIC1yZiAuPz8/PyogKiAmJgorCWZvciB3IGluIEkgYW0gYWxsIExGOyBkbyBlY2hvICR3OyBkb25lID5hbGxsZiAmJgorCWZvciB3IGluIE9oIGhlcmUgaXMgQ1JMRlEgaW4gdGV4dDsgZG8gZWNobyAkdzsgZG9uZSB8IHFfdG9fY3IgPm1peGVkICYmCisJZm9yIHcgaW4gSSBhbSBhbGwgQ1JMRjsgZG8gZWNobyAkdzsgZG9uZSB8IGFwcGVuZF9jciA+YWxsY3JsZiAmJgorCWdpdCBhZGQgLUEgLiAmJgorCWdpdCBjb21taXQgLW0gImFsbGxmLCBhbGxjcmxmIGFuZCBtaXhlZCBvbmx5IiAmJgorCWdpdCB0YWcgLWEgLW0gIm1lc3NhZ2UiIGF1dG9jcmxmLWNoZWNrcG9pbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwb3J0IG5vIGNoYW5nZSBhZnRlciBzZXR0aW5nIGF1dG9jcmxmJyAnCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwl0b3VjaCAqICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZXMgYXJlIGNsZWFuIGFmdGVyIGNoZWNrb3V0JyAnCisJcm0gKiAmJgorCWdpdCBjaGVja291dCAtZiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK2NyX3RvX1Ffbm9fTkwgKCkgeworICAgIHRyICdcMDE1JyBRIHwgdHIgLWQgJ1wwMTInCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xGIG9ubHkgZmlsZSBnZXRzIENSTEYgd2l0aCBhdXRvY3JsZicgJworCXRlc3QgIiQoY3JfdG9fUV9ub19OTCA8IGFsbGxmKSIgPSAiSVFhbVFhbGxRTEZRIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNaXhlZCBmaWxlIGlzIHN0aWxsIG1peGVkIHdpdGggYXV0b2NybGYnICcKKwl0ZXN0ICIkKGNyX3RvX1Ffbm9fTkwgPCBtaXhlZCkiID0gIk9oaGVyZWlzQ1JMRlFpbnRleHQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NSTEYgb25seSBmaWxlIGhhcyBDUkxGIHdpdGggYXV0b2NybGYnICcKKwl0ZXN0ICIkKGNyX3RvX1Ffbm9fTkwgPCBhbGxjcmxmKSIgPSAiSVFhbVFhbGxRQ1JMRlEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05ldyBDUkxGIGZpbGUgZ2V0cyBMRiBpbiByZXBvJyAnCisJdHIgLWQgIlwwMTUiIDwgYWxsbGYgfCBhcHBlbmRfY3IgPiBhbGxsZjIgJiYKKwlnaXQgYWRkIGFsbGxmMiAmJgorCWdpdCBjb21taXQgLW0gImFsbGxmMiBhZGRlZCIgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UgJiYKKwlybSAqICYmCisJZ2l0IGNoZWNrb3V0IC1mICYmCisJdGVzdF9jbXAgYWxsbGYgYWxsbGYyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAyMS1jb252ZXJzaW9uLnNoIGIvdC90MDAyMS1jb252ZXJzaW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRiZmZmYTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDIxLWNvbnZlcnNpb24uc2gKQEAgLTAsMCArMSw5NjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdibG9iIGNvbnZlcnNpb24gdmlhIGdpdGF0dHJpYnV0ZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitURVNUX1JPT1Q9IiRQV0QiCitQQVRIPSRURVNUX1JPT1Q6JFBBVEgKKword3JpdGVfc2NyaXB0IDw8XEVPRiAiJFRFU1RfUk9PVC9yb3QxMy5zaCIKK3RyIFwKKyAgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonIFwKKyAgJ25vcHFyc3R1dnd4eXphYmNkZWZnaGlqa2xtTk9QUVJTVFVWV1hZWkFCQ0RFRkdISUpLTE0nCitFT0YKKword3JpdGVfc2NyaXB0IHJvdDEzLWZpbHRlci5wbCAiJFBFUkxfUEFUSCIgXAorCTwiJFRFU1RfRElSRUNUT1JZIi90MDAyMS9yb3QxMy1maWx0ZXIucGwKKworZ2VuZXJhdGVfcmFuZG9tX2NoYXJhY3RlcnMgKCkgeworCUxFTj0kMQorCU5BTUU9JDIKKwl0ZXN0LXRvb2wgZ2VucmFuZG9tIHNvbWUtc2VlZCAkTEVOIHwKKwkJcGVybCAtcGUgInMvLi9jaHIoKG9yZCgkJikgJSAyNikgKyBvcmQoJ2EnKSkvc2dlIiA+IiRURVNUX1JPT1QvJE5BTUUiCit9CisKK2ZpbGVfc2l6ZSAoKSB7CisJdGVzdC10b29sIHBhdGgtdXRpbHMgZmlsZS1zaXplICIkMSIKK30KKworZmlsdGVyX2dpdCAoKSB7CisJcm0gLWYgKi5sb2cgJiYKKwlnaXQgIiRAIgorfQorCisjIENvbXBhcmUgdHdvIGZpbGVzIGFuZCBlbnN1cmUgdGhhdCBgY2xlYW5gIGFuZCBgc211ZGdlYCByZXNwZWN0aXZlbHkgYXJlCisjIGNhbGxlZCBhdCBsZWFzdCBvbmNlIGlmIHNwZWNpZmllZCBpbiB0aGUgYGV4cGVjdGAgZmlsZS4gVGhlIGFjdHVhbAorIyBpbnZvY2F0aW9uIGNvdW50IGlzIG5vdCByZWxldmFudCBiZWNhdXNlIHRoZWlyIG51bWJlciBjYW4gdmFyeS4KKyMgYy5mLiBodHRwOi8vbG9yZS5rZXJuZWwub3JnL2dpdC94bXFxc2h2MThpOGkuZnNmQGdpdHN0ZXIubXR2LmNvcnAuZ29vZ2xlLmNvbS8KK3Rlc3RfY21wX2NvdW50ICgpIHsKKwlleHBlY3Q9JDEKKwlhY3R1YWw9JDIKKwlmb3IgRklMRSBpbiAiJGV4cGVjdCIgIiRhY3R1YWwiCisJZG8KKwkJc29ydCAiJEZJTEUiIHwgdW5pcSAtYyB8CisJCXNlZCAtZSAicy9eICpbMC05XVswLTldKlsgCV0qSU46IC94IElOOiAvIiA+IiRGSUxFLnRtcCIKKwlkb25lICYmCisJdGVzdF9jbXAgIiRleHBlY3QudG1wIiAiJGFjdHVhbC50bXAiICYmCisJcm0gIiRleHBlY3QudG1wIiAiJGFjdHVhbC50bXAiCit9CisKKyMgQ29tcGFyZSB0d28gZmlsZXMgYnV0IGV4Y2x1ZGUgYWxsIGBjbGVhbmAgaW52b2NhdGlvbnMgYmVjYXVzZSBHaXQgY2FuCisjIGNhbGwgYGNsZWFuYCB6ZXJvIG9yIG1vcmUgdGltZXMuCisjIGMuZi4gaHR0cDovL2xvcmUua2VybmVsLm9yZy9naXQveG1xcXNodjE4aThpLmZzZkBnaXRzdGVyLm10di5jb3JwLmdvb2dsZS5jb20vCit0ZXN0X2NtcF9leGNsdWRlX2NsZWFuICgpIHsKKwlleHBlY3Q9JDEKKwlhY3R1YWw9JDIKKwlmb3IgRklMRSBpbiAiJGV4cGVjdCIgIiRhY3R1YWwiCisJZG8KKwkJZ3JlcCAtdiAiSU46IGNsZWFuIiAiJEZJTEUiID4iJEZJTEUudG1wIgorCWRvbmUgJiYKKwl0ZXN0X2NtcCAiJGV4cGVjdC50bXAiICIkYWN0dWFsLnRtcCIgJiYKKwlybSAiJGV4cGVjdC50bXAiICIkYWN0dWFsLnRtcCIKK30KKworIyBDaGVjayB0aGF0IHRoZSBjb250ZW50cyBvZiB0d28gZmlsZXMgYXJlIGVxdWFsIGFuZCB0aGF0IHRoZWlyIHJvdDEzIHZlcnNpb24KKyMgaXMgZXF1YWwgdG8gdGhlIGNvbW1pdHRlZCBjb250ZW50LgordGVzdF9jbXBfY29tbWl0dGVkX3JvdDEzICgpIHsKKwl0ZXN0X2NtcCAiJDEiICIkMiIgJiYKKwlyb3QxMy5zaCA8IiQxIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiA6IiQyIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgZmlsdGVyLnJvdDEzLnNtdWRnZSAuL3JvdDEzLnNoICYmCisJZ2l0IGNvbmZpZyBmaWx0ZXIucm90MTMuY2xlYW4gLi9yb3QxMy5zaCAmJgorCisJeworCSAgICBlY2hvICIqLnQgZmlsdGVyPXJvdDEzIgorCSAgICBlY2hvICIqLmkgaWRlbnQiCisJfSA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCXsKKwkgICAgZWNobyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtCisJICAgIGVjaG8gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgegorCSAgICBlY2hvICdcJyckSWQkJ1wnJworCX0gPnRlc3QgJiYKKwljYXQgdGVzdCA+dGVzdC50ICYmCisJY2F0IHRlc3QgPnRlc3QubyAmJgorCWNhdCB0ZXN0ID50ZXN0LmkgJiYKKwlnaXQgYWRkIHRlc3QgdGVzdC50IHRlc3QuaSAmJgorCXJtIC1mIHRlc3QgdGVzdC50IHRlc3QuaSAmJgorCWdpdCBjaGVja291dCAtLSB0ZXN0IHRlc3QudCB0ZXN0LmkgJiYKKworCWVjaG8gImNvbnRlbnQtdGVzdDIiID50ZXN0Mi5vICYmCisJZWNobyAiY29udGVudC10ZXN0MyAtIGZpbGVuYW1lIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIiA+InRlc3QzICdcJydzcSdcJycsXCR4PS5vIgorJworCitzY3JpcHQ9J3MvXlwkSWQ6IFwoWzAtOWEtZl0qXCkgXCQvXDEvcCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBjaGVjayAnCisKKwl0ZXN0X2NtcCB0ZXN0Lm8gdGVzdCAmJgorCXRlc3RfY21wIHRlc3QubyB0ZXN0LnQgJiYKKworCSMgaWRlbnQgc2hvdWxkIGJlIHN0cmlwcGVkIGluIHRoZSByZXBvc2l0b3J5CisJZ2l0IGRpZmYgLS1yYXcgLS1leGl0LWNvZGUgOnRlc3QgOnRlc3QuaSAmJgorCWlkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6dGVzdCkgJiYKKwllbWJlZGRlZD0kKHNlZCAtbmUgIiRzY3JpcHQiIHRlc3QuaSkgJiYKKwl0ZXN0ICJ6JGlkIiA9ICJ6JGVtYmVkZGVkIiAmJgorCisJZ2l0IGNhdC1maWxlIGJsb2IgOnRlc3QudCA+dGVzdC5yICYmCisKKwkuL3JvdDEzLnNoIDx0ZXN0Lm8gPnRlc3QudCAmJgorCXRlc3RfY21wIHRlc3QuciB0ZXN0LnQKKycKKworIyBJZiBhbiBleHBhbmRlZCBpZGVudCBldmVyIGdldHMgaW50byB0aGUgcmVwb3NpdG9yeSwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdAorIyBpdCBpcyBjb2xsYXBzZWQgYmVmb3JlIGJlaW5nIGV4cGFuZGVkIGFnYWluIG9uIGNoZWNrb3V0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIGV4cGFuZGVkX2luX3JlcG8gJworCXsKKwkJZWNobyAiRmlsZSB3aXRoIGV4cGFuZGVkIGtleXdvcmRzIgorCQllY2hvICJcJElkXCQiCisJCWVjaG8gIlwkSWQ6XCQiCisJCWVjaG8gIlwkSWQ6IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgXCQiCisJCWVjaG8gIlwkSWQ6IE5vU3BhY2VBdEVuZFwkIgorCQllY2hvICJcJElkOk5vU3BhY2VBdEZyb250IFwkIgorCQllY2hvICJcJElkOk5vU3BhY2VBdEVpdGhlckVuZFwkIgorCQllY2hvICJcJElkOiBOb1Rlcm1pbmF0aW5nU3ltYm9sIgorCQllY2hvICJcJElkOiBGb3JlaWduIENvbW1pdCBXaXRoIFNwYWNlcyBcJCIKKwl9ID5leHBhbmRlZC1rZXl3b3Jkcy4wICYmCisKKwl7CisJCWNhdCBleHBhbmRlZC1rZXl3b3Jkcy4wICYmCisJCXByaW50ZiAiXCRJZDogTm9UZXJtaW5hdGluZ1N5bWJvbEF0RU9GIgorCX0gPmV4cGFuZGVkLWtleXdvcmRzICYmCisJY2F0IGV4cGFuZGVkLWtleXdvcmRzID5leHBhbmRlZC1rZXl3b3Jkcy1jcmxmICYmCisJZ2l0IGFkZCBleHBhbmRlZC1rZXl3b3JkcyBleHBhbmRlZC1rZXl3b3Jkcy1jcmxmICYmCisJZ2l0IGNvbW1pdCAtbSAiRmlsZSB3aXRoIGtleXdvcmRzIGV4cGFuZGVkIiAmJgorCWlkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6ZXhwYW5kZWQta2V5d29yZHMpICYmCisKKwl7CisJCWVjaG8gIkZpbGUgd2l0aCBleHBhbmRlZCBrZXl3b3JkcyIKKwkJZWNobyAiXCRJZDogJGlkIFwkIgorCQllY2hvICJcJElkOiAkaWQgXCQiCisJCWVjaG8gIlwkSWQ6ICRpZCBcJCIKKwkJZWNobyAiXCRJZDogJGlkIFwkIgorCQllY2hvICJcJElkOiAkaWQgXCQiCisJCWVjaG8gIlwkSWQ6ICRpZCBcJCIKKwkJZWNobyAiXCRJZDogTm9UZXJtaW5hdGluZ1N5bWJvbCIKKwkJZWNobyAiXCRJZDogRm9yZWlnbiBDb21taXQgV2l0aCBTcGFjZXMgXCQiCisJfSA+ZXhwZWN0ZWQtb3V0cHV0LjAgJiYKKwl7CisJCWNhdCBleHBlY3RlZC1vdXRwdXQuMCAmJgorCQlwcmludGYgIlwkSWQ6IE5vVGVybWluYXRpbmdTeW1ib2xBdEVPRiIKKwl9ID5leHBlY3RlZC1vdXRwdXQgJiYKKwl7CisJCWFwcGVuZF9jciA8ZXhwZWN0ZWQtb3V0cHV0LjAgJiYKKwkJcHJpbnRmICJcJElkOiBOb1Rlcm1pbmF0aW5nU3ltYm9sQXRFT0YiCisJfSA+ZXhwZWN0ZWQtb3V0cHV0LWNybGYgJiYKKwl7CisJCWVjaG8gImV4cGFuZGVkLWtleXdvcmRzIGlkZW50IgorCQllY2hvICJleHBhbmRlZC1rZXl3b3Jkcy1jcmxmIGlkZW50IHRleHQgZW9sPWNybGYiCisJfSA+Pi5naXRhdHRyaWJ1dGVzICYmCisKKwlybSAtZiBleHBhbmRlZC1rZXl3b3JkcyBleHBhbmRlZC1rZXl3b3Jkcy1jcmxmICYmCisKKwlnaXQgY2hlY2tvdXQgLS0gZXhwYW5kZWQta2V5d29yZHMgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1vdXRwdXQgZXhwYW5kZWQta2V5d29yZHMgJiYKKworCWdpdCBjaGVja291dCAtLSBleHBhbmRlZC1rZXl3b3Jkcy1jcmxmICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtb3V0cHV0LWNybGYgZXhwYW5kZWQta2V5d29yZHMtY3JsZgorJworCisjIFRoZSB1c2Ugb2YgJWYgaW4gYSBmaWx0ZXIgZGVmaW5pdGlvbiBpcyBleHBhbmRlZCB0byB0aGUgcGF0aCB0bworIyB0aGUgZmlsZW5hbWUgYmVpbmcgc211ZGdlZCBvciBjbGVhbmVkLiAgSXQgbXVzdCBiZSBzaGVsbCBlc2NhcGVkLgorIyBGaXJzdCwgc2V0IHVwIHNvbWUgaW50ZXJlc3RpbmcgZmlsZSBuYW1lcyBhbmQgcGV0IHRoZW0gaW4KKyMgLmdpdGF0dHJpYnV0ZXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWx0ZXIgc2hlbGwtZXNjYXBlZCBmaWxlbmFtZXMnICcKKwljYXQgPmFyZ2Muc2ggPDwtRU9GICYmCisJIyEkU0hFTExfUEFUSAorCWNhdCA+L2Rldi9udWxsCisJZWNobyBhcmdjOiBcJCMgIlwkQCIKKwlFT0YKKwlub3JtYWw9bmFtZS1uby1tYWdpYyAmJgorCXNwZWNpYWw9Im5hbWUgIHdpdGggJ1wnJ3NxJ1wnJyBhbmQgXCR4IiAmJgorCWVjaG8gc29tZSB0ZXN0IHRleHQgPiIkbm9ybWFsIiAmJgorCWVjaG8gc29tZSB0ZXN0IHRleHQgPiIkc3BlY2lhbCIgJiYKKwlnaXQgYWRkICIkbm9ybWFsIiAiJHNwZWNpYWwiICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAiYWRkIGZpbGVzIiAmJgorCWVjaG8gIm5hbWUqIGZpbHRlcj1hcmdjIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCSMgZGVsZXRlIHRoZSBmaWxlcyBhbmQgY2hlY2sgdGhlbSBvdXQgYWdhaW4sIHVzaW5nIGEgc211ZGdlIGZpbHRlcgorCSMgdGhhdCB3aWxsIGNvdW50IHRoZSBhcmdzIGFuZCBlY2hvIHRoZSBjb21tYW5kLWxpbmUgYmFjayB0byB1cworCXRlc3RfY29uZmlnIGZpbHRlci5hcmdjLnNtdWRnZSAic2ggLi9hcmdjLnNoICVmIiAmJgorCXJtICIkbm9ybWFsIiAiJHNwZWNpYWwiICYmCisJZ2l0IGNoZWNrb3V0IC0tICIkbm9ybWFsIiAiJHNwZWNpYWwiICYmCisKKwkjIG1ha2Ugc3VyZSBhcmdjLnNoIGNvdW50ZWQgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmdzCisJZWNobyAiYXJnYzogMSAkbm9ybWFsIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0ICIkbm9ybWFsIiAmJgorCWVjaG8gImFyZ2M6IDEgJHNwZWNpYWwiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgIiRzcGVjaWFsIiAmJgorCisJIyBkbyB0aGUgc2FtZSB0aGluZywgYnV0IHdpdGggbW9yZSBhcmdzIGluIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbgorCXRlc3RfY29uZmlnIGZpbHRlci5hcmdjLnNtdWRnZSAic2ggLi9hcmdjLnNoICVmIC0tbXktZXh0cmEtYXJnIiAmJgorCXJtICIkbm9ybWFsIiAiJHNwZWNpYWwiICYmCisJZ2l0IGNoZWNrb3V0IC0tICIkbm9ybWFsIiAiJHNwZWNpYWwiICYmCisKKwkjIG1ha2Ugc3VyZSBhcmdjLnNoIGNvdW50ZWQgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmdzCisJZWNobyAiYXJnYzogMiAkbm9ybWFsIC0tbXktZXh0cmEtYXJnIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0ICIkbm9ybWFsIiAmJgorCWVjaG8gImFyZ2M6IDIgJHNwZWNpYWwgLS1teS1leHRyYS1hcmciID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgIiRzcGVjaWFsIiAmJgorCToKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxdWlyZWQgZmlsdGVyIHNob3VsZCBmaWx0ZXIgZGF0YScgJworCXRlc3RfY29uZmlnIGZpbHRlci5yZXF1aXJlZC5zbXVkZ2UgLi9yb3QxMy5zaCAmJgorCXRlc3RfY29uZmlnIGZpbHRlci5yZXF1aXJlZC5jbGVhbiAuL3JvdDEzLnNoICYmCisJdGVzdF9jb25maWcgZmlsdGVyLnJlcXVpcmVkLnJlcXVpcmVkIHRydWUgJiYKKworCWVjaG8gIiouciBmaWx0ZXI9cmVxdWlyZWQiID4uZ2l0YXR0cmlidXRlcyAmJgorCisJY2F0IHRlc3QubyA+dGVzdC5yICYmCisJZ2l0IGFkZCB0ZXN0LnIgJiYKKworCXJtIC1mIHRlc3QuciAmJgorCWdpdCBjaGVja291dCAtLSB0ZXN0LnIgJiYKKwl0ZXN0X2NtcCB0ZXN0Lm8gdGVzdC5yICYmCisKKwkuL3JvdDEzLnNoIDx0ZXN0Lm8gPmV4cGVjdGVkICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgOnRlc3QuciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcXVpcmVkIGZpbHRlciBzbXVkZ2UgZmFpbHVyZScgJworCXRlc3RfY29uZmlnIGZpbHRlci5mYWlsc211ZGdlLnNtdWRnZSBmYWxzZSAmJgorCXRlc3RfY29uZmlnIGZpbHRlci5mYWlsc211ZGdlLmNsZWFuIGNhdCAmJgorCXRlc3RfY29uZmlnIGZpbHRlci5mYWlsc211ZGdlLnJlcXVpcmVkIHRydWUgJiYKKworCWVjaG8gIiouZnMgZmlsdGVyPWZhaWxzbXVkZ2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCisJZWNobyB0ZXN0ID50ZXN0LmZzICYmCisJZ2l0IGFkZCB0ZXN0LmZzICYmCisJcm0gLWYgdGVzdC5mcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLSB0ZXN0LmZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcXVpcmVkIGZpbHRlciBjbGVhbiBmYWlsdXJlJyAnCisJdGVzdF9jb25maWcgZmlsdGVyLmZhaWxjbGVhbi5zbXVkZ2UgY2F0ICYmCisJdGVzdF9jb25maWcgZmlsdGVyLmZhaWxjbGVhbi5jbGVhbiBmYWxzZSAmJgorCXRlc3RfY29uZmlnIGZpbHRlci5mYWlsY2xlYW4ucmVxdWlyZWQgdHJ1ZSAmJgorCisJZWNobyAiKi5mYyBmaWx0ZXI9ZmFpbGNsZWFuIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCWVjaG8gdGVzdCA+dGVzdC5mYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgdGVzdC5mYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWx0ZXJpbmcgbGFyZ2UgaW5wdXQgdG8gc21hbGwgb3V0cHV0IHNob3VsZCB1c2UgbGl0dGxlIG1lbW9yeScgJworCXRlc3RfY29uZmlnIGZpbHRlci5kZXZudWxsLmNsZWFuICJjYXQgPi9kZXYvbnVsbCIgJiYKKwl0ZXN0X2NvbmZpZyBmaWx0ZXIuZGV2bnVsbC5yZXF1aXJlZCB0cnVlICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDMwKTsgZG8gcHJpbnRmICIlMTA0ODU3NmQiIDE7IGRvbmUgPjMwTUIgJiYKKwllY2hvICIzME1CIGZpbHRlcj1kZXZudWxsIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlHSVRfTU1BUF9MSU1JVD0xbSBHSVRfQUxMT0NfTElNSVQ9MW0gZ2l0IGFkZCAzME1CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbHRlciB0aGF0IGRvZXMgbm90IHJlYWQgaXMgZmluZScgJworCXRlc3QtdG9vbCBnZW5yYW5kb20gZm9vICQoKDEyOCAqIDEwMjQgKyAxKSkgPmJpZyAmJgorCWVjaG8gImJpZyBmaWx0ZXI9ZXBpcGUiID4uZ2l0YXR0cmlidXRlcyAmJgorCXRlc3RfY29uZmlnIGZpbHRlci5lcGlwZS5jbGVhbiAiZWNobyB4eXp6eSIgJiYKKwlnaXQgYWRkIGJpZyAmJgorCWdpdCBjYXQtZmlsZSBibG9iIDpiaWcgPmFjdHVhbCAmJgorCWVjaG8geHl6enkgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBFWFBFTlNJVkUgJ2ZpbHRlciBsYXJnZSBmaWxlJyAnCisJdGVzdF9jb25maWcgZmlsdGVyLmxhcmdlZmlsZS5zbXVkZ2UgY2F0ICYmCisJdGVzdF9jb25maWcgZmlsdGVyLmxhcmdlZmlsZS5jbGVhbiBjYXQgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMjA0OCk7IGRvIHByaW50ZiAiJTEwNDg1NzZkIiAxOyBkb25lID4yR0IgJiYKKwllY2hvICIyR0IgZmlsdGVyPWxhcmdlZmlsZSIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGFkZCAyR0IgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJcm0gLWYgMkdCICYmCisJZ2l0IGNoZWNrb3V0IC0tIDJHQiAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmlsdGVyOiBjbGVhbiBlbXB0eSBmaWxlIiAnCisJdGVzdF9jb25maWcgZmlsdGVyLmluLXJlcG8taGVhZGVyLmNsZWFuICAiZWNobyBjbGVhbmVkICYmIGNhdCIgJiYKKwl0ZXN0X2NvbmZpZyBmaWx0ZXIuaW4tcmVwby1oZWFkZXIuc211ZGdlICJzZWQgMWQiICYmCisKKwllY2hvICJlbXB0eS1pbi13b3JrdHJlZSAgICBmaWx0ZXI9aW4tcmVwby1oZWFkZXIiID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwk+ZW1wdHktaW4td29ya3RyZWUgJiYKKworCWVjaG8gY2xlYW5lZCA+ZXhwZWN0ZWQgJiYKKwlnaXQgYWRkIGVtcHR5LWluLXdvcmt0cmVlICYmCisJZ2l0IHNob3cgOmVtcHR5LWluLXdvcmt0cmVlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmlsdGVyOiBzbXVkZ2UgZW1wdHkgZmlsZSIgJworCXRlc3RfY29uZmlnIGZpbHRlci5lbXB0eS1pbi1yZXBvLmNsZWFuICJjYXQgPi9kZXYvbnVsbCIgJiYKKwl0ZXN0X2NvbmZpZyBmaWx0ZXIuZW1wdHktaW4tcmVwby5zbXVkZ2UgImVjaG8gc211ZGdlZCAmJiBjYXQiICYmCisKKwllY2hvICJlbXB0eS1pbi1yZXBvIGZpbHRlcj1lbXB0eS1pbi1yZXBvIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyBkZWFkIGRhdGEgd2Fsa2luZyA+ZW1wdHktaW4tcmVwbyAmJgorCWdpdCBhZGQgZW1wdHktaW4tcmVwbyAmJgorCisJZWNobyBzbXVkZ2VkID5leHBlY3RlZCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD1maWx0ZXJlZC0gZW1wdHktaW4tcmVwbyAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbHRlcmVkLWVtcHR5LWluLXJlcG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYWJsZSBmaWx0ZXIgd2l0aCBlbXB0eSBvdmVycmlkZScgJworCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIuZGlzYWJsZS5zbXVkZ2UgZmFsc2UgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZmlsdGVyLmRpc2FibGUuY2xlYW4gZmFsc2UgJiYKKwl0ZXN0X2NvbmZpZyBmaWx0ZXIuZGlzYWJsZS5zbXVkZ2UgZmFsc2UgJiYKKwl0ZXN0X2NvbmZpZyBmaWx0ZXIuZGlzYWJsZS5jbGVhbiBmYWxzZSAmJgorCisJZWNobyAiKi5kaXNhYmxlIGZpbHRlcj1kaXNhYmxlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCWVjaG8gdGVzdCA+dGVzdC5kaXNhYmxlICYmCisJZ2l0IC1jIGZpbHRlci5kaXNhYmxlLmNsZWFuPSBhZGQgdGVzdC5kaXNhYmxlIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCXJtIC1mIHRlc3QuZGlzYWJsZSAmJgorCWdpdCAtYyBmaWx0ZXIuZGlzYWJsZS5zbXVkZ2U9IGNoZWNrb3V0IC0tIHRlc3QuZGlzYWJsZSAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBkb2VzIG5vdCByZXVzZSB3b3JrdHJlZSBmaWxlcyB0aGF0IG5lZWQgY2xlYW5pbmcnICcKKwl0ZXN0X2NvbmZpZyBmaWx0ZXIuY291bnRlci5jbGVhbiAiZWNobyAuID4+Y291bnQ7IHNlZCBzL14vY2xlYW46LyIgJiYKKwllY2hvICJmaWxlIGZpbHRlcj1jb3VudGVyIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwl0ZXN0X2NvbW1pdCBvbmUgZmlsZSAmJgorCXRlc3RfY29tbWl0IHR3byBmaWxlICYmCisKKwk+Y291bnQgJiYKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGNvdW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncmVxdWlyZWQgcHJvY2VzcyBmaWx0ZXIgc2hvdWxkIGZpbHRlciBkYXRhJyAnCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5wcm90b2NvbC5wcm9jZXNzICJyb3QxMy1maWx0ZXIucGwgZGVidWcubG9nIGNsZWFuIHNtdWRnZSIgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZmlsdGVyLnByb3RvY29sLnJlcXVpcmVkIHRydWUgJiYKKwlybSAtcmYgcmVwbyAmJgorCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKworCQllY2hvICIqLnIgZmlsdGVyPXByb3RvY29sIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLW0gInRlc3QgY29tbWl0IDEiICYmCisJCWdpdCBicmFuY2ggZW1wdHktYnJhbmNoICYmCisKKwkJY3AgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LnIgJiYKKwkJY3AgIiRURVNUX1JPT1QvdGVzdDIubyIgdGVzdDIuciAmJgorCQlta2RpciB0ZXN0c3ViZGlyICYmCisJCWNwICIkVEVTVF9ST09UL3Rlc3QzICdcJydzcSdcJycsXCR4PS5vIiAidGVzdHN1YmRpci90ZXN0MyAnXCcnc3EnXCcnLFwkeD0uciIgJiYKKwkJPnRlc3Q0LWVtcHR5LnIgJiYKKworCQlTPSQoZmlsZV9zaXplIHRlc3QucikgJiYKKwkJUzI9JChmaWxlX3NpemUgdGVzdDIucikgJiYKKwkJUzM9JChmaWxlX3NpemUgInRlc3RzdWJkaXIvdGVzdDMgJ1wnJ3NxJ1wnJyxcJHg9LnIiKSAmJgorCQlNPSQoZ2l0IGhhc2gtb2JqZWN0IHRlc3QucikgJiYKKwkJTTI9JChnaXQgaGFzaC1vYmplY3QgdGVzdDIucikgJiYKKwkJTTM9JChnaXQgaGFzaC1vYmplY3QgInRlc3RzdWJkaXIvdGVzdDMgJ1wnJ3NxJ1wnJyxcJHg9LnIiKSAmJgorCQlFTVBUWT0kKGdpdCBoYXNoLW9iamVjdCAvZGV2L251bGwpICYmCisKKwkJZmlsdGVyX2dpdCBhZGQgLiAmJgorCQljYXQgPmV4cGVjdGVkLmxvZyA8PC1FT0YgJiYKKwkJCVNUQVJUCisJCQlpbml0IGhhbmRzaGFrZSBjb21wbGV0ZQorCQkJSU46IGNsZWFuIHRlc3QuciAkUyBbT0tdIC0tIE9VVDogJFMgLiBbT0tdCisJCQlJTjogY2xlYW4gdGVzdDIuciAkUzIgW09LXSAtLSBPVVQ6ICRTMiAuIFtPS10KKwkJCUlOOiBjbGVhbiB0ZXN0NC1lbXB0eS5yIDAgW09LXSAtLSBPVVQ6IDAgIFtPS10KKwkJCUlOOiBjbGVhbiB0ZXN0c3ViZGlyL3Rlc3QzICdcJydzcSdcJycsXCR4PS5yICRTMyBbT0tdIC0tIE9VVDogJFMzIC4gW09LXQorCQkJU1RPUAorCQlFT0YKKwkJdGVzdF9jbXBfY291bnQgZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCWdpdCBjb21taXQgLW0gInRlc3QgY29tbWl0IDIiICYmCisJCU1BU1RFUj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCQlNRVRBPSJyZWY9cmVmcy9oZWFkcy9tYXN0ZXIgdHJlZWlzaD0kTUFTVEVSIiAmJgorCQlybSAtZiB0ZXN0Mi5yICJ0ZXN0c3ViZGlyL3Rlc3QzICdcJydzcSdcJycsXCR4PS5yIiAmJgorCisJCWZpbHRlcl9naXQgY2hlY2tvdXQgLS1xdWlldCAtLW5vLXByb2dyZXNzIC4gJiYKKwkJY2F0ID5leHBlY3RlZC5sb2cgPDwtRU9GICYmCisJCQlTVEFSVAorCQkJaW5pdCBoYW5kc2hha2UgY29tcGxldGUKKwkJCUlOOiBzbXVkZ2UgdGVzdDIuciBibG9iPSRNMiAkUzIgW09LXSAtLSBPVVQ6ICRTMiAuIFtPS10KKwkJCUlOOiBzbXVkZ2UgdGVzdHN1YmRpci90ZXN0MyAnXCcnc3EnXCcnLFwkeD0uciBibG9iPSRNMyAkUzMgW09LXSAtLSBPVVQ6ICRTMyAuIFtPS10KKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCSMgTWFrZSBzdXJlIHRoYXQgdGhlIGZpbGUgYXBwZWFycyBkaXJ0eSwgc28gY2hlY2tvdXQgYmVsb3cgaGFzIHRvCisJCSMgcnVuIHRoZSBjb25maWd1cmVkIGZpbHRlci4KKwkJdG91Y2ggdGVzdC5yICYmCisJCWZpbHRlcl9naXQgY2hlY2tvdXQgLS1xdWlldCAtLW5vLXByb2dyZXNzIGVtcHR5LWJyYW5jaCAmJgorCQljYXQgPmV4cGVjdGVkLmxvZyA8PC1FT0YgJiYKKwkJCVNUQVJUCisJCQlpbml0IGhhbmRzaGFrZSBjb21wbGV0ZQorCQkJSU46IGNsZWFuIHRlc3QuciAkUyBbT0tdIC0tIE9VVDogJFMgLiBbT0tdCisJCQlTVE9QCisJCUVPRgorCQl0ZXN0X2NtcF9leGNsdWRlX2NsZWFuIGV4cGVjdGVkLmxvZyBkZWJ1Zy5sb2cgJiYKKworCQlmaWx0ZXJfZ2l0IGNoZWNrb3V0IC0tcXVpZXQgLS1uby1wcm9ncmVzcyBtYXN0ZXIgJiYKKwkJY2F0ID5leHBlY3RlZC5sb2cgPDwtRU9GICYmCisJCQlTVEFSVAorCQkJaW5pdCBoYW5kc2hha2UgY29tcGxldGUKKwkJCUlOOiBzbXVkZ2UgdGVzdC5yICRNRVRBIGJsb2I9JE0gJFMgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0Mi5yICRNRVRBIGJsb2I9JE0yICRTMiBbT0tdIC0tIE9VVDogJFMyIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0NC1lbXB0eS5yICRNRVRBIGJsb2I9JEVNUFRZIDAgW09LXSAtLSBPVVQ6IDAgIFtPS10KKwkJCUlOOiBzbXVkZ2UgdGVzdHN1YmRpci90ZXN0MyAnXCcnc3EnXCcnLFwkeD0uciAkTUVUQSBibG9iPSRNMyAkUzMgW09LXSAtLSBPVVQ6ICRTMyAuIFtPS10KKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCXRlc3RfY21wX2NvbW1pdHRlZF9yb3QxMyAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QuciAmJgorCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvdGVzdDIubyIgdGVzdDIuciAmJgorCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvdGVzdDMgJ1wnJ3NxJ1wnJyxcJHg9Lm8iICJ0ZXN0c3ViZGlyL3Rlc3QzICdcJydzcSdcJycsXCR4PS5yIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdyZXF1aXJlZCBwcm9jZXNzIGZpbHRlciBzaG91bGQgZmlsdGVyIGRhdGEgZm9yIHZhcmlvdXMgc3ViY29tbWFuZHMnICcKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZmlsdGVyLnByb3RvY29sLnByb2Nlc3MgInJvdDEzLWZpbHRlci5wbCBkZWJ1Zy5sb2cgY2xlYW4gc211ZGdlIiAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIucHJvdG9jb2wucmVxdWlyZWQgdHJ1ZSAmJgorCSgKKwkJY2QgcmVwbyAmJgorCisJCVM9JChmaWxlX3NpemUgdGVzdC5yKSAmJgorCQlTMj0kKGZpbGVfc2l6ZSB0ZXN0Mi5yKSAmJgorCQlTMz0kKGZpbGVfc2l6ZSAidGVzdHN1YmRpci90ZXN0MyAnXCcnc3EnXCcnLFwkeD0uciIpICYmCisJCU09JChnaXQgaGFzaC1vYmplY3QgdGVzdC5yKSAmJgorCQlNMj0kKGdpdCBoYXNoLW9iamVjdCB0ZXN0Mi5yKSAmJgorCQlNMz0kKGdpdCBoYXNoLW9iamVjdCAidGVzdHN1YmRpci90ZXN0MyAnXCcnc3EnXCcnLFwkeD0uciIpICYmCisJCUVNUFRZPSQoZ2l0IGhhc2gtb2JqZWN0IC9kZXYvbnVsbCkgJiYKKworCQlNQVNURVI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKworCQljcCAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3Q1LnIgJiYKKwkJZ2l0IGFkZCB0ZXN0NS5yICYmCisJCWdpdCBjb21taXQgLW0gInRlc3QgY29tbWl0IDMiICYmCisJCWdpdCBjaGVja291dCBlbXB0eS1icmFuY2ggJiYKKwkJZmlsdGVyX2dpdCByZWJhc2UgLS1vbnRvIGVtcHR5LWJyYW5jaCBtYXN0ZXJeXiBtYXN0ZXIgJiYKKwkJTUFTVEVSMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCQlNRVRBPSJyZWY9cmVmcy9oZWFkcy9tYXN0ZXIgdHJlZWlzaD0kTUFTVEVSMiIgJiYKKwkJY2F0ID5leHBlY3RlZC5sb2cgPDwtRU9GICYmCisJCQlTVEFSVAorCQkJaW5pdCBoYW5kc2hha2UgY29tcGxldGUKKwkJCUlOOiBzbXVkZ2UgdGVzdC5yICRNRVRBIGJsb2I9JE0gJFMgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0Mi5yICRNRVRBIGJsb2I9JE0yICRTMiBbT0tdIC0tIE9VVDogJFMyIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0NC1lbXB0eS5yICRNRVRBIGJsb2I9JEVNUFRZIDAgW09LXSAtLSBPVVQ6IDAgIFtPS10KKwkJCUlOOiBzbXVkZ2UgdGVzdDUuciAkTUVUQSBibG9iPSRNICRTIFtPS10gLS0gT1VUOiAkUyAuIFtPS10KKwkJCUlOOiBzbXVkZ2UgdGVzdHN1YmRpci90ZXN0MyAnXCcnc3EnXCcnLFwkeD0uciAkTUVUQSBibG9iPSRNMyAkUzMgW09LXSAtLSBPVVQ6ICRTMyAuIFtPS10KKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCWdpdCByZXNldCAtLWhhcmQgZW1wdHktYnJhbmNoICYmCisJCWZpbHRlcl9naXQgcmVzZXQgLS1oYXJkICRNQVNURVIgJiYKKwkJTUVUQT0idHJlZWlzaD0kTUFTVEVSIiAmJgorCQljYXQgPmV4cGVjdGVkLmxvZyA8PC1FT0YgJiYKKwkJCVNUQVJUCisJCQlpbml0IGhhbmRzaGFrZSBjb21wbGV0ZQorCQkJSU46IHNtdWRnZSB0ZXN0LnIgJE1FVEEgYmxvYj0kTSAkUyBbT0tdIC0tIE9VVDogJFMgLiBbT0tdCisJCQlJTjogc211ZGdlIHRlc3QyLnIgJE1FVEEgYmxvYj0kTTIgJFMyIFtPS10gLS0gT1VUOiAkUzIgLiBbT0tdCisJCQlJTjogc211ZGdlIHRlc3Q0LWVtcHR5LnIgJE1FVEEgYmxvYj0kRU1QVFkgMCBbT0tdIC0tIE9VVDogMCAgW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0c3ViZGlyL3Rlc3QzICdcJydzcSdcJycsXCR4PS5yICRNRVRBIGJsb2I9JE0zICRTMyBbT0tdIC0tIE9VVDogJFMzIC4gW09LXQorCQkJU1RPUAorCQlFT0YKKwkJdGVzdF9jbXBfZXhjbHVkZV9jbGVhbiBleHBlY3RlZC5sb2cgZGVidWcubG9nICYmCisKKwkJZ2l0IGJyYW5jaCBvbGQtbWFzdGVyICRNQVNURVIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBlbXB0eS1icmFuY2ggJiYKKwkJZmlsdGVyX2dpdCByZXNldCAtLWhhcmQgb2xkLW1hc3RlciAmJgorCQlNRVRBPSJyZWY9cmVmcy9oZWFkcy9vbGQtbWFzdGVyIHRyZWVpc2g9JE1BU1RFUiIgJiYKKwkJY2F0ID5leHBlY3RlZC5sb2cgPDwtRU9GICYmCisJCQlTVEFSVAorCQkJaW5pdCBoYW5kc2hha2UgY29tcGxldGUKKwkJCUlOOiBzbXVkZ2UgdGVzdC5yICRNRVRBIGJsb2I9JE0gJFMgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0Mi5yICRNRVRBIGJsb2I9JE0yICRTMiBbT0tdIC0tIE9VVDogJFMyIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0NC1lbXB0eS5yICRNRVRBIGJsb2I9JEVNUFRZIDAgW09LXSAtLSBPVVQ6IDAgIFtPS10KKwkJCUlOOiBzbXVkZ2UgdGVzdHN1YmRpci90ZXN0MyAnXCcnc3EnXCcnLFwkeD0uciAkTUVUQSBibG9iPSRNMyAkUzMgW09LXSAtLSBPVVQ6ICRTMyAuIFtPS10KKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCWdpdCBjaGVja291dCAtYiBtZXJnZSBlbXB0eS1icmFuY2ggJiYKKwkJZ2l0IGJyYW5jaCAtZiBtYXN0ZXIgJE1BU1RFUjIgJiYKKwkJZmlsdGVyX2dpdCBtZXJnZSBtYXN0ZXIgJiYKKwkJTUVUQT0idHJlZWlzaD0kTUFTVEVSMiIgJiYKKwkJY2F0ID5leHBlY3RlZC5sb2cgPDwtRU9GICYmCisJCQlTVEFSVAorCQkJaW5pdCBoYW5kc2hha2UgY29tcGxldGUKKwkJCUlOOiBzbXVkZ2UgdGVzdC5yICRNRVRBIGJsb2I9JE0gJFMgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0Mi5yICRNRVRBIGJsb2I9JE0yICRTMiBbT0tdIC0tIE9VVDogJFMyIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0NC1lbXB0eS5yICRNRVRBIGJsb2I9JEVNUFRZIDAgW09LXSAtLSBPVVQ6IDAgIFtPS10KKwkJCUlOOiBzbXVkZ2UgdGVzdDUuciAkTUVUQSBibG9iPSRNICRTIFtPS10gLS0gT1VUOiAkUyAuIFtPS10KKwkJCUlOOiBzbXVkZ2UgdGVzdHN1YmRpci90ZXN0MyAnXCcnc3EnXCcnLFwkeD0uciAkTUVUQSBibG9iPSRNMyAkUzMgW09LXSAtLSBPVVQ6ICRTMyAuIFtPS10KKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCWZpbHRlcl9naXQgYXJjaGl2ZSBtYXN0ZXIgPi9kZXYvbnVsbCAmJgorCQlNRVRBPSJyZWY9cmVmcy9oZWFkcy9tYXN0ZXIgdHJlZWlzaD0kTUFTVEVSMiIgJiYKKwkJY2F0ID5leHBlY3RlZC5sb2cgPDwtRU9GICYmCisJCQlTVEFSVAorCQkJaW5pdCBoYW5kc2hha2UgY29tcGxldGUKKwkJCUlOOiBzbXVkZ2UgdGVzdC5yICRNRVRBIGJsb2I9JE0gJFMgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0Mi5yICRNRVRBIGJsb2I9JE0yICRTMiBbT0tdIC0tIE9VVDogJFMyIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0NC1lbXB0eS5yICRNRVRBIGJsb2I9JEVNUFRZIDAgW09LXSAtLSBPVVQ6IDAgIFtPS10KKwkJCUlOOiBzbXVkZ2UgdGVzdDUuciAkTUVUQSBibG9iPSRNICRTIFtPS10gLS0gT1VUOiAkUyAuIFtPS10KKwkJCUlOOiBzbXVkZ2UgdGVzdHN1YmRpci90ZXN0MyAnXCcnc3EnXCcnLFwkeD0uciAkTUVUQSBibG9iPSRNMyAkUzMgW09LXSAtLSBPVVQ6ICRTMyAuIFtPS10KKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCVRSRUU9IiQoZ2l0IHJldi1wYXJzZSAkTUFTVEVSMl57dHJlZX0pIiAmJgorCQlmaWx0ZXJfZ2l0IGFyY2hpdmUgJFRSRUUgPi9kZXYvbnVsbCAmJgorCQlNRVRBPSJ0cmVlaXNoPSRUUkVFIiAmJgorCQljYXQgPmV4cGVjdGVkLmxvZyA8PC1FT0YgJiYKKwkJCVNUQVJUCisJCQlpbml0IGhhbmRzaGFrZSBjb21wbGV0ZQorCQkJSU46IHNtdWRnZSB0ZXN0LnIgJE1FVEEgYmxvYj0kTSAkUyBbT0tdIC0tIE9VVDogJFMgLiBbT0tdCisJCQlJTjogc211ZGdlIHRlc3QyLnIgJE1FVEEgYmxvYj0kTTIgJFMyIFtPS10gLS0gT1VUOiAkUzIgLiBbT0tdCisJCQlJTjogc211ZGdlIHRlc3Q0LWVtcHR5LnIgJE1FVEEgYmxvYj0kRU1QVFkgMCBbT0tdIC0tIE9VVDogMCAgW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0NS5yICRNRVRBIGJsb2I9JE0gJFMgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0c3ViZGlyL3Rlc3QzICdcJydzcSdcJycsXCR4PS5yICRNRVRBIGJsb2I9JE0zICRTMyBbT0tdIC0tIE9VVDogJFMzIC4gW09LXQorCQkJU1RPUAorCQlFT0YKKwkJdGVzdF9jbXBfZXhjbHVkZV9jbGVhbiBleHBlY3RlZC5sb2cgZGVidWcubG9nCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3JlcXVpcmVkIHByb2Nlc3MgZmlsdGVyIHRha2VzIHByZWNlZGVuY2UnICcKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZmlsdGVyLnByb3RvY29sLmNsZWFuIGZhbHNlICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5wcm90b2NvbC5wcm9jZXNzICJyb3QxMy1maWx0ZXIucGwgZGVidWcubG9nIGNsZWFuIiAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIucHJvdG9jb2wucmVxdWlyZWQgdHJ1ZSAmJgorCXJtIC1yZiByZXBvICYmCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCisJCWVjaG8gIiouciBmaWx0ZXI9cHJvdG9jb2wiID4uZ2l0YXR0cmlidXRlcyAmJgorCQljcCAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QuciAmJgorCQlTPSQoZmlsZV9zaXplIHRlc3QucikgJiYKKworCQkjIENoZWNrIHRoYXQgdGhlIHByb2Nlc3MgZmlsdGVyIGlzIGludm9rZWQgaGVyZQorCQlmaWx0ZXJfZ2l0IGFkZCAuICYmCisJCWNhdCA+ZXhwZWN0ZWQubG9nIDw8LUVPRiAmJgorCQkJU1RBUlQKKwkJCWluaXQgaGFuZHNoYWtlIGNvbXBsZXRlCisJCQlJTjogY2xlYW4gdGVzdC5yICRTIFtPS10gLS0gT1VUOiAkUyAuIFtPS10KKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2NvdW50IGV4cGVjdGVkLmxvZyBkZWJ1Zy5sb2cKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncmVxdWlyZWQgcHJvY2VzcyBmaWx0ZXIgc2hvdWxkIGJlIHVzZWQgb25seSBmb3IgImNsZWFuIiBvcGVyYXRpb24gb25seScgJworCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIucHJvdG9jb2wucHJvY2VzcyAicm90MTMtZmlsdGVyLnBsIGRlYnVnLmxvZyBjbGVhbiIgJiYKKwlybSAtcmYgcmVwbyAmJgorCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKworCQllY2hvICIqLnIgZmlsdGVyPXByb3RvY29sIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJY3AgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LnIgJiYKKwkJUz0kKGZpbGVfc2l6ZSB0ZXN0LnIpICYmCisKKwkJZmlsdGVyX2dpdCBhZGQgLiAmJgorCQljYXQgPmV4cGVjdGVkLmxvZyA8PC1FT0YgJiYKKwkJCVNUQVJUCisJCQlpbml0IGhhbmRzaGFrZSBjb21wbGV0ZQorCQkJSU46IGNsZWFuIHRlc3QuciAkUyBbT0tdIC0tIE9VVDogJFMgLiBbT0tdCisJCQlTVE9QCisJCUVPRgorCQl0ZXN0X2NtcF9jb3VudCBleHBlY3RlZC5sb2cgZGVidWcubG9nICYmCisKKwkJcm0gdGVzdC5yICYmCisKKwkJZmlsdGVyX2dpdCBjaGVja291dCAtLXF1aWV0IC0tbm8tcHJvZ3Jlc3MgLiAmJgorCQkjIElmIHRoZSBmaWx0ZXIgd291bGQgYmUgdXNlZCBmb3IgInNtdWRnZSIsIHRvbywgd2Ugd291bGQgc2VlCisJCSMgIklOOiBzbXVkZ2UgdGVzdC5yIDU3IFtPS10gLS0gT1VUOiA1NyAuIFtPS10iIGhlcmUKKwkJY2F0ID5leHBlY3RlZC5sb2cgPDwtRU9GICYmCisJCQlTVEFSVAorCQkJaW5pdCBoYW5kc2hha2UgY29tcGxldGUKKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gZXhwZWN0ZWQubG9nIGRlYnVnLmxvZworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdyZXF1aXJlZCBwcm9jZXNzIGZpbHRlciBzaG91bGQgcHJvY2VzcyBtdWx0aXBsZSBwYWNrZXRzJyAnCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5wcm90b2NvbC5wcm9jZXNzICJyb3QxMy1maWx0ZXIucGwgZGVidWcubG9nIGNsZWFuIHNtdWRnZSIgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZmlsdGVyLnByb3RvY29sLnJlcXVpcmVkIHRydWUgJiYKKworCXJtIC1yZiByZXBvICYmCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCisJCSMgR2VuZXJhdGUgZGF0YSByZXF1aXJpbmcgMSwgMiwgMyBwYWNrZXRzCisJCVM9NjU1MTYgJiYgIyBQS1RMSU5FX0RBVEFfTUFYTEVOIC0+IE1heGltYWwgc2l6ZSBvZiBhIHBhY2tldAorCQlnZW5lcmF0ZV9yYW5kb21fY2hhcmFjdGVycyAkKCgkUyAgICApKSAxcGt0XzFfXy5maWxlICYmCisJCWdlbmVyYXRlX3JhbmRvbV9jaGFyYWN0ZXJzICQoKCRTICArMSkpIDJwa3RfMSsxLmZpbGUgJiYKKwkJZ2VuZXJhdGVfcmFuZG9tX2NoYXJhY3RlcnMgJCgoJFMqMi0xKSkgMnBrdF8yLTEuZmlsZSAmJgorCQlnZW5lcmF0ZV9yYW5kb21fY2hhcmFjdGVycyAkKCgkUyoyICApKSAycGt0XzJfXy5maWxlICYmCisJCWdlbmVyYXRlX3JhbmRvbV9jaGFyYWN0ZXJzICQoKCRTKjIrMSkpIDNwa3RfMisxLmZpbGUgJiYKKworCQlmb3IgRklMRSBpbiAiJFRFU1RfUk9PVCIvKi5maWxlCisJCWRvCisJCQljcCAiJEZJTEUiIC4gJiYKKwkJCXJvdDEzLnNoIDwiJEZJTEUiID4iJEZJTEUucm90MTMiCisJCWRvbmUgJiYKKworCQllY2hvICIqLmZpbGUgZmlsdGVyPXByb3RvY29sIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJZmlsdGVyX2dpdCBhZGQgKi5maWxlIC5naXRhdHRyaWJ1dGVzICYmCisJCWNhdCA+ZXhwZWN0ZWQubG9nIDw8LUVPRiAmJgorCQkJU1RBUlQKKwkJCWluaXQgaGFuZHNoYWtlIGNvbXBsZXRlCisJCQlJTjogY2xlYW4gMXBrdF8xX18uZmlsZSAkKCgkUyAgICApKSBbT0tdIC0tIE9VVDogJCgoJFMgICAgKSkgLiBbT0tdCisJCQlJTjogY2xlYW4gMnBrdF8xKzEuZmlsZSAkKCgkUyAgKzEpKSBbT0tdIC0tIE9VVDogJCgoJFMgICsxKSkgLi4gW09LXQorCQkJSU46IGNsZWFuIDJwa3RfMi0xLmZpbGUgJCgoJFMqMi0xKSkgW09LXSAtLSBPVVQ6ICQoKCRTKjItMSkpIC4uIFtPS10KKwkJCUlOOiBjbGVhbiAycGt0XzJfXy5maWxlICQoKCRTKjIgICkpIFtPS10gLS0gT1VUOiAkKCgkUyoyICApKSAuLiBbT0tdCisJCQlJTjogY2xlYW4gM3BrdF8yKzEuZmlsZSAkKCgkUyoyKzEpKSBbT0tdIC0tIE9VVDogJCgoJFMqMisxKSkgLi4uIFtPS10KKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2NvdW50IGV4cGVjdGVkLmxvZyBkZWJ1Zy5sb2cgJiYKKworCQlNMT0iYmxvYj0kKGdpdCBoYXNoLW9iamVjdCAxcGt0XzFfXy5maWxlKSIgJiYKKwkJTTI9ImJsb2I9JChnaXQgaGFzaC1vYmplY3QgMnBrdF8xKzEuZmlsZSkiICYmCisJCU0zPSJibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IDJwa3RfMi0xLmZpbGUpIiAmJgorCQlNND0iYmxvYj0kKGdpdCBoYXNoLW9iamVjdCAycGt0XzJfXy5maWxlKSIgJiYKKwkJTTU9ImJsb2I9JChnaXQgaGFzaC1vYmplY3QgM3BrdF8yKzEuZmlsZSkiICYmCisJCXJtIC1mICouZmlsZSBkZWJ1Zy5sb2cgJiYKKworCQlmaWx0ZXJfZ2l0IGNoZWNrb3V0IC0tcXVpZXQgLS1uby1wcm9ncmVzcyAtLSAqLmZpbGUgJiYKKwkJY2F0ID5leHBlY3RlZC5sb2cgPDwtRU9GICYmCisJCQlTVEFSVAorCQkJaW5pdCBoYW5kc2hha2UgY29tcGxldGUKKwkJCUlOOiBzbXVkZ2UgMXBrdF8xX18uZmlsZSAkTTEgJCgoJFMgICAgKSkgW09LXSAtLSBPVVQ6ICQoKCRTICAgICkpIC4gW09LXQorCQkJSU46IHNtdWRnZSAycGt0XzErMS5maWxlICRNMiAkKCgkUyAgKzEpKSBbT0tdIC0tIE9VVDogJCgoJFMgICsxKSkgLi4gW09LXQorCQkJSU46IHNtdWRnZSAycGt0XzItMS5maWxlICRNMyAkKCgkUyoyLTEpKSBbT0tdIC0tIE9VVDogJCgoJFMqMi0xKSkgLi4gW09LXQorCQkJSU46IHNtdWRnZSAycGt0XzJfXy5maWxlICRNNCAkKCgkUyoyICApKSBbT0tdIC0tIE9VVDogJCgoJFMqMiAgKSkgLi4gW09LXQorCQkJSU46IHNtdWRnZSAzcGt0XzIrMS5maWxlICRNNSAkKCgkUyoyKzEpKSBbT0tdIC0tIE9VVDogJCgoJFMqMisxKSkgLi4uIFtPS10KKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCWZvciBGSUxFIGluICouZmlsZQorCQlkbworCQkJdGVzdF9jbXBfY29tbWl0dGVkX3JvdDEzICIkVEVTVF9ST09ULyRGSUxFIiAkRklMRQorCQlkb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3JlcXVpcmVkIHByb2Nlc3MgZmlsdGVyIHdpdGggY2xlYW4gZXJyb3Igc2hvdWxkIGZhaWwnICcKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZmlsdGVyLnByb3RvY29sLnByb2Nlc3MgInJvdDEzLWZpbHRlci5wbCBkZWJ1Zy5sb2cgY2xlYW4gc211ZGdlIiAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIucHJvdG9jb2wucmVxdWlyZWQgdHJ1ZSAmJgorCXJtIC1yZiByZXBvICYmCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCisJCWVjaG8gIiouciBmaWx0ZXI9cHJvdG9jb2wiID4uZ2l0YXR0cmlidXRlcyAmJgorCisJCWNwICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC5yICYmCisJCWVjaG8gInRoaXMgaXMgZ29pbmcgdG8gZmFpbCIgPmNsZWFuLXdyaXRlLWZhaWwuciAmJgorCQllY2hvICJjb250ZW50LXRlc3QzLXN1YmRpciIgPnRlc3QzLnIgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncHJvY2VzcyBmaWx0ZXIgc2hvdWxkIHJlc3RhcnQgYWZ0ZXIgdW5leHBlY3RlZCB3cml0ZSBmYWlsdXJlJyAnCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5wcm90b2NvbC5wcm9jZXNzICJyb3QxMy1maWx0ZXIucGwgZGVidWcubG9nIGNsZWFuIHNtdWRnZSIgJiYKKwlybSAtcmYgcmVwbyAmJgorCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKworCQllY2hvICIqLnIgZmlsdGVyPXByb3RvY29sIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCQljcCAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QuciAmJgorCQljcCAiJFRFU1RfUk9PVC90ZXN0Mi5vIiB0ZXN0Mi5yICYmCisJCWVjaG8gInRoaXMgaXMgZ29pbmcgdG8gZmFpbCIgPnNtdWRnZS13cml0ZS1mYWlsLm8gJiYKKwkJY3Agc211ZGdlLXdyaXRlLWZhaWwubyBzbXVkZ2Utd3JpdGUtZmFpbC5yICYmCisKKwkJUz0kKGZpbGVfc2l6ZSB0ZXN0LnIpICYmCisJCVMyPSQoZmlsZV9zaXplIHRlc3QyLnIpICYmCisJCVNGPSQoZmlsZV9zaXplIHNtdWRnZS13cml0ZS1mYWlsLnIpICYmCisJCU09JChnaXQgaGFzaC1vYmplY3QgdGVzdC5yKSAmJgorCQlNMj0kKGdpdCBoYXNoLW9iamVjdCB0ZXN0Mi5yKSAmJgorCQlNRj0kKGdpdCBoYXNoLW9iamVjdCBzbXVkZ2Utd3JpdGUtZmFpbC5yKSAmJgorCQlybSAtZiBkZWJ1Zy5sb2cgJiYKKworCQlnaXQgYWRkIC4gJiYKKwkJcm0gLWYgKi5yICYmCisKKwkJcm0gLWYgZGVidWcubG9nICYmCisJCWdpdCBjaGVja291dCAtLXF1aWV0IC0tbm8tcHJvZ3Jlc3MgLiAyPmdpdC1zdGRlcnIubG9nICYmCisKKwkJZ3JlcCAic211ZGdlIHdyaXRlIGVycm9yIGF0IiBnaXQtc3RkZXJyLmxvZyAmJgorCQl0ZXN0X2kxOG5ncmVwICJlcnJvcjogZXh0ZXJuYWwgZmlsdGVyIiBnaXQtc3RkZXJyLmxvZyAmJgorCisJCWNhdCA+ZXhwZWN0ZWQubG9nIDw8LUVPRiAmJgorCQkJU1RBUlQKKwkJCWluaXQgaGFuZHNoYWtlIGNvbXBsZXRlCisJCQlJTjogc211ZGdlIHNtdWRnZS13cml0ZS1mYWlsLnIgYmxvYj0kTUYgJFNGIFtPS10gLS0gW1dSSVRFIEZBSUxdCisJCQlTVEFSVAorCQkJaW5pdCBoYW5kc2hha2UgY29tcGxldGUKKwkJCUlOOiBzbXVkZ2UgdGVzdC5yIGJsb2I9JE0gJFMgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0Mi5yIGJsb2I9JE0yICRTMiBbT0tdIC0tIE9VVDogJFMyIC4gW09LXQorCQkJU1RPUAorCQlFT0YKKwkJdGVzdF9jbXBfZXhjbHVkZV9jbGVhbiBleHBlY3RlZC5sb2cgZGVidWcubG9nICYmCisKKwkJdGVzdF9jbXBfY29tbWl0dGVkX3JvdDEzICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC5yICYmCisJCXRlc3RfY21wX2NvbW1pdHRlZF9yb3QxMyAiJFRFU1RfUk9PVC90ZXN0Mi5vIiB0ZXN0Mi5yICYmCisKKwkJIyBTbXVkZ2UgZmFpbGVkCisJCSEgdGVzdF9jbXAgc211ZGdlLXdyaXRlLWZhaWwubyBzbXVkZ2Utd3JpdGUtZmFpbC5yICYmCisJCXJvdDEzLnNoIDxzbXVkZ2Utd3JpdGUtZmFpbC5vID5leHBlY3RlZCAmJgorCQlnaXQgY2F0LWZpbGUgYmxvYiA6c211ZGdlLXdyaXRlLWZhaWwuciA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdwcm9jZXNzIGZpbHRlciBzaG91bGQgbm90IGJlIHJlc3RhcnRlZCBpZiBpdCBzaWduYWxzIGFuIGVycm9yJyAnCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5wcm90b2NvbC5wcm9jZXNzICJyb3QxMy1maWx0ZXIucGwgZGVidWcubG9nIGNsZWFuIHNtdWRnZSIgJiYKKwlybSAtcmYgcmVwbyAmJgorCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKworCQllY2hvICIqLnIgZmlsdGVyPXByb3RvY29sIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCQljcCAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QuciAmJgorCQljcCAiJFRFU1RfUk9PVC90ZXN0Mi5vIiB0ZXN0Mi5yICYmCisJCWVjaG8gInRoaXMgd2lsbCBjYXVzZSBhbiBlcnJvciIgPmVycm9yLm8gJiYKKwkJY3AgZXJyb3IubyBlcnJvci5yICYmCisKKwkJUz0kKGZpbGVfc2l6ZSB0ZXN0LnIpICYmCisJCVMyPSQoZmlsZV9zaXplIHRlc3QyLnIpICYmCisJCVNFPSQoZmlsZV9zaXplIGVycm9yLnIpICYmCisJCU09JChnaXQgaGFzaC1vYmplY3QgdGVzdC5yKSAmJgorCQlNMj0kKGdpdCBoYXNoLW9iamVjdCB0ZXN0Mi5yKSAmJgorCQlNRT0kKGdpdCBoYXNoLW9iamVjdCBlcnJvci5yKSAmJgorCQlybSAtZiBkZWJ1Zy5sb2cgJiYKKworCQlnaXQgYWRkIC4gJiYKKwkJcm0gLWYgKi5yICYmCisKKwkJZmlsdGVyX2dpdCBjaGVja291dCAtLXF1aWV0IC0tbm8tcHJvZ3Jlc3MgLiAmJgorCQljYXQgPmV4cGVjdGVkLmxvZyA8PC1FT0YgJiYKKwkJCVNUQVJUCisJCQlpbml0IGhhbmRzaGFrZSBjb21wbGV0ZQorCQkJSU46IHNtdWRnZSBlcnJvci5yIGJsb2I9JE1FICRTRSBbT0tdIC0tIFtFUlJPUl0KKwkJCUlOOiBzbXVkZ2UgdGVzdC5yIGJsb2I9JE0gJFMgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0Mi5yIGJsb2I9JE0yICRTMiBbT0tdIC0tIE9VVDogJFMyIC4gW09LXQorCQkJU1RPUAorCQlFT0YKKwkJdGVzdF9jbXBfZXhjbHVkZV9jbGVhbiBleHBlY3RlZC5sb2cgZGVidWcubG9nICYmCisKKwkJdGVzdF9jbXBfY29tbWl0dGVkX3JvdDEzICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC5yICYmCisJCXRlc3RfY21wX2NvbW1pdHRlZF9yb3QxMyAiJFRFU1RfUk9PVC90ZXN0Mi5vIiB0ZXN0Mi5yICYmCisJCXRlc3RfY21wIGVycm9yLm8gZXJyb3IucgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdwcm9jZXNzIGZpbHRlciBhYm9ydCBzdG9wcyBwcm9jZXNzaW5nIG9mIGFsbCBmdXJ0aGVyIGZpbGVzJyAnCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5wcm90b2NvbC5wcm9jZXNzICJyb3QxMy1maWx0ZXIucGwgZGVidWcubG9nIGNsZWFuIHNtdWRnZSIgJiYKKwlybSAtcmYgcmVwbyAmJgorCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKworCQllY2hvICIqLnIgZmlsdGVyPXByb3RvY29sIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCQljcCAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QuciAmJgorCQljcCAiJFRFU1RfUk9PVC90ZXN0Mi5vIiB0ZXN0Mi5yICYmCisJCWVjaG8gImVycm9yIHRoaXMgYmxvYiBhbmQgYWxsIGZ1dHVyZSBibG9icyIgPmFib3J0Lm8gJiYKKwkJY3AgYWJvcnQubyBhYm9ydC5yICYmCisKKwkJTT0iYmxvYj0kKGdpdCBoYXNoLW9iamVjdCBhYm9ydC5yKSIgJiYKKwkJcm0gLWYgZGVidWcubG9nICYmCisJCVNBPSQoZmlsZV9zaXplIGFib3J0LnIpICYmCisKKwkJZ2l0IGFkZCAuICYmCisJCXJtIC1mICouciAmJgorCisKKwkJIyBOb3RlOiBUaGlzIHRlc3QgYXNzdW1lcyB0aGF0IEdpdCBmaWx0ZXJzIGZpbGVzIGluIGFscGhhYmV0aWNhbAorCQkjIG9yZGVyICgiYWJvcnQuciIgYmVmb3JlICJ0ZXN0LnIiKS4KKwkJZmlsdGVyX2dpdCBjaGVja291dCAtLXF1aWV0IC0tbm8tcHJvZ3Jlc3MgLiAmJgorCQljYXQgPmV4cGVjdGVkLmxvZyA8PC1FT0YgJiYKKwkJCVNUQVJUCisJCQlpbml0IGhhbmRzaGFrZSBjb21wbGV0ZQorCQkJSU46IHNtdWRnZSBhYm9ydC5yICRNICRTQSBbT0tdIC0tIFtBQk9SVF0KKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCXRlc3RfY21wICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC5yICYmCisJCXRlc3RfY21wICIkVEVTVF9ST09UL3Rlc3QyLm8iIHRlc3QyLnIgJiYKKwkJdGVzdF9jbXAgYWJvcnQubyBhYm9ydC5yCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2ludmFsaWQgcHJvY2VzcyBmaWx0ZXIgbXVzdCBmYWlsIChhbmQgbm90IGhhbmchKScgJworCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIucHJvdG9jb2wucHJvY2VzcyBjYXQgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZmlsdGVyLnByb3RvY29sLnJlcXVpcmVkIHRydWUgJiYKKwlybSAtcmYgcmVwbyAmJgorCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKworCQllY2hvICIqLnIgZmlsdGVyPXByb3RvY29sIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCQljcCAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QuciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC4gMj5naXQtc3RkZXJyLmxvZyAmJgorCQlncmVwICJleHBlY3RlZCBnaXQtZmlsdGVyLXNlcnZlciIgZ2l0LXN0ZGVyci5sb2cKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGVsYXllZCBjaGVja291dCBpbiBwcm9jZXNzIGZpbHRlcicgJworCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIuYS5wcm9jZXNzICJyb3QxMy1maWx0ZXIucGwgYS5sb2cgY2xlYW4gc211ZGdlIGRlbGF5IiAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIuYS5yZXF1aXJlZCB0cnVlICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5iLnByb2Nlc3MgInJvdDEzLWZpbHRlci5wbCBiLmxvZyBjbGVhbiBzbXVkZ2UgZGVsYXkiICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5iLnJlcXVpcmVkIHRydWUgJiYKKworCXJtIC1yZiByZXBvICYmCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvICIqLmEgZmlsdGVyPWEiID4uZ2l0YXR0cmlidXRlcyAmJgorCQllY2hvICIqLmIgZmlsdGVyPWIiID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJY3AgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LmEgJiYKKwkJY3AgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LWRlbGF5MTAuYSAmJgorCQljcCAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QtZGVsYXkxMS5hICYmCisJCWNwICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC1kZWxheTIwLmEgJiYKKwkJY3AgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LWRlbGF5MTAuYiAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAidGVzdCBjb21taXQiCisJKSAmJgorCisJUz0kKGZpbGVfc2l6ZSAiJFRFU1RfUk9PVC90ZXN0Lm8iKSAmJgorCVBNPSJyZWY9cmVmcy9oZWFkcy9tYXN0ZXIgdHJlZWlzaD0kKGdpdCAtQyByZXBvIHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICIgJiYKKwlNPSIke1BNfWJsb2I9JChnaXQgLUMgcmVwbyByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyOnRlc3QuYSkiICYmCisJY2F0ID5hLmV4cCA8PC1FT0YgJiYKKwkJU1RBUlQKKwkJaW5pdCBoYW5kc2hha2UgY29tcGxldGUKKwkJSU46IHNtdWRnZSB0ZXN0LmEgJE0gJFMgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQlJTjogc211ZGdlIHRlc3QtZGVsYXkxMC5hICRNICRTIFtPS10gLS0gW0RFTEFZRURdCisJCUlOOiBzbXVkZ2UgdGVzdC1kZWxheTExLmEgJE0gJFMgW09LXSAtLSBbREVMQVlFRF0KKwkJSU46IHNtdWRnZSB0ZXN0LWRlbGF5MjAuYSAkTSAkUyBbT0tdIC0tIFtERUxBWUVEXQorCQlJTjogbGlzdF9hdmFpbGFibGVfYmxvYnMgdGVzdC1kZWxheTEwLmEgdGVzdC1kZWxheTExLmEgW09LXQorCQlJTjogc211ZGdlIHRlc3QtZGVsYXkxMC5hICRNIDAgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQlJTjogc211ZGdlIHRlc3QtZGVsYXkxMS5hICRNIDAgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQlJTjogbGlzdF9hdmFpbGFibGVfYmxvYnMgdGVzdC1kZWxheTIwLmEgW09LXQorCQlJTjogc211ZGdlIHRlc3QtZGVsYXkyMC5hICRNIDAgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQlJTjogbGlzdF9hdmFpbGFibGVfYmxvYnMgW09LXQorCQlTVE9QCisJRU9GCisJY2F0ID5iLmV4cCA8PC1FT0YgJiYKKwkJU1RBUlQKKwkJaW5pdCBoYW5kc2hha2UgY29tcGxldGUKKwkJSU46IHNtdWRnZSB0ZXN0LWRlbGF5MTAuYiAkTSAkUyBbT0tdIC0tIFtERUxBWUVEXQorCQlJTjogbGlzdF9hdmFpbGFibGVfYmxvYnMgdGVzdC1kZWxheTEwLmIgW09LXQorCQlJTjogc211ZGdlIHRlc3QtZGVsYXkxMC5iICRNIDAgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQlJTjogbGlzdF9hdmFpbGFibGVfYmxvYnMgW09LXQorCQlTVE9QCisJRU9GCisKKwlybSAtcmYgcmVwby1jbG9uZWQgJiYKKwlmaWx0ZXJfZ2l0IGNsb25lIHJlcG8gcmVwby1jbG9uZWQgJiYKKwl0ZXN0X2NtcF9jb3VudCBhLmV4cCByZXBvLWNsb25lZC9hLmxvZyAmJgorCXRlc3RfY21wX2NvdW50IGIuZXhwIHJlcG8tY2xvbmVkL2IubG9nICYmCisKKwkoCisJCWNkIHJlcG8tY2xvbmVkICYmCisJCXRlc3RfY21wX2NvbW1pdHRlZF9yb3QxMyAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QuYSAmJgorCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LWRlbGF5MTAuYSAmJgorCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LWRlbGF5MTEuYSAmJgorCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LWRlbGF5MjAuYSAmJgorCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LWRlbGF5MTAuYiAmJgorCisJCXJtICouYSAqLmIgJiYKKwkJZmlsdGVyX2dpdCBjaGVja291dCAuICYmCisJCSMgV2UgYXJlIG5vdCBjaGVja2luZyBvdXQgYSByZWYgaGVyZSwgc28gZmlsdGVyIG91dCByZWYgbWV0YWRhdGEuCisJCXNlZCAtZSAicyEkUE0hISIgLi4vYS5leHAgPmEuZXhwLmZpbHRlcmVkICYmCisJCXNlZCAtZSAicyEkUE0hISIgLi4vYi5leHAgPmIuZXhwLmZpbHRlcmVkICYmCisJCXRlc3RfY21wX2NvdW50IGEuZXhwLmZpbHRlcmVkIGEubG9nICYmCisJCXRlc3RfY21wX2NvdW50IGIuZXhwLmZpbHRlcmVkIGIubG9nICYmCisKKwkJdGVzdF9jbXBfY29tbWl0dGVkX3JvdDEzICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC5hICYmCisJCXRlc3RfY21wX2NvbW1pdHRlZF9yb3QxMyAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QtZGVsYXkxMC5hICYmCisJCXRlc3RfY21wX2NvbW1pdHRlZF9yb3QxMyAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QtZGVsYXkxMS5hICYmCisJCXRlc3RfY21wX2NvbW1pdHRlZF9yb3QxMyAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QtZGVsYXkyMC5hICYmCisJCXRlc3RfY21wX2NvbW1pdHRlZF9yb3QxMyAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QtZGVsYXkxMC5iCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ21pc3NpbmcgZmlsZSBpbiBkZWxheWVkIGNoZWNrb3V0JyAnCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5idWcucHJvY2VzcyAicm90MTMtZmlsdGVyLnBsIGJ1Zy5sb2cgY2xlYW4gc211ZGdlIGRlbGF5IiAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIuYnVnLnJlcXVpcmVkIHRydWUgJiYKKworCXJtIC1yZiByZXBvICYmCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvICIqLmEgZmlsdGVyPWJ1ZyIgPi5naXRhdHRyaWJ1dGVzICYmCisJCWNwICIkVEVTVF9ST09UL3Rlc3QubyIgbWlzc2luZy1kZWxheS5hICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgY29tbWl0IC1tICJ0ZXN0IGNvbW1pdCIKKwkpICYmCisKKwlybSAtcmYgcmVwby1jbG9uZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgcmVwbyByZXBvLWNsb25lZCAyPmdpdC1zdGRlcnIubG9nICYmCisJZ3JlcCAiZXJyb3I6IC5taXNzaW5nLWRlbGF5XC5hLiB3YXMgbm90IGZpbHRlcmVkIHByb3Blcmx5IiBnaXQtc3RkZXJyLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2ludmFsaWQgZmlsZSBpbiBkZWxheWVkIGNoZWNrb3V0JyAnCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5idWcucHJvY2VzcyAicm90MTMtZmlsdGVyLnBsIGJ1Zy5sb2cgY2xlYW4gc211ZGdlIGRlbGF5IiAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIuYnVnLnJlcXVpcmVkIHRydWUgJiYKKworCXJtIC1yZiByZXBvICYmCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvICIqLmEgZmlsdGVyPWJ1ZyIgPi5naXRhdHRyaWJ1dGVzICYmCisJCWNwICIkVEVTVF9ST09UL3Rlc3QubyIgaW52YWxpZC1kZWxheS5hICYmCisJCWNwICIkVEVTVF9ST09UL3Rlc3QubyIgdW5maWx0ZXJlZCAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAidGVzdCBjb21taXQiCisJKSAmJgorCisJcm0gLXJmIHJlcG8tY2xvbmVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIHJlcG8gcmVwby1jbG9uZWQgMj5naXQtc3RkZXJyLmxvZyAmJgorCWdyZXAgImVycm9yOiBleHRlcm5hbCBmaWx0ZXIgLiogc2lnbmFsZWQgdGhhdCAudW5maWx0ZXJlZC4gaXMgbm93IGF2YWlsYWJsZSBhbHRob3VnaCBpdCBoYXMgbm90IGJlZW4gZGVsYXllZCBlYXJsaWVyIiBnaXQtc3RkZXJyLmxvZworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMjEvcm90MTMtZmlsdGVyLnBsIGIvdC90MDAyMS9yb3QxMy1maWx0ZXIucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzMmE4MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMjEvcm90MTMtZmlsdGVyLnBsCkBAIC0wLDAgKzEsMjMyIEBACisjCisjIEV4YW1wbGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBHaXQgZmlsdGVyIHByb3RvY29sIHZlcnNpb24gMgorIyBTZWUgRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dCwgc2VjdGlvbiAiRmlsdGVyIFByb3RvY29sIgorIworIyBUaGUgZmlyc3QgYXJndW1lbnQgZGVmaW5lcyBhIGRlYnVnIGxvZyBmaWxlIHRoYXQgdGhlIHNjcmlwdCB3cml0ZSB0by4KKyMgQWxsIHJlbWFpbmluZyBhcmd1bWVudHMgZGVmaW5lIGEgbGlzdCBvZiBzdXBwb3J0ZWQgcHJvdG9jb2wKKyMgY2FwYWJpbGl0aWVzICgiY2xlYW4iLCAic211ZGdlIiwgZXRjKS4KKyMKKyMgVGhpcyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBzcGVjaWFsIHRlc3QgY2FzZXM6CisjICgxKSBJZiBkYXRhIHdpdGggdGhlIHBhdGhuYW1lICJjbGVhbi13cml0ZS1mYWlsLnIiIGlzIHByb2Nlc3NlZCB3aXRoCisjICAgICBhICJjbGVhbiIgb3BlcmF0aW9uIHRoZW4gdGhlIHdyaXRlIG9wZXJhdGlvbiB3aWxsIGRpZS4KKyMgKDIpIElmIGRhdGEgd2l0aCB0aGUgcGF0aG5hbWUgInNtdWRnZS13cml0ZS1mYWlsLnIiIGlzIHByb2Nlc3NlZCB3aXRoCisjICAgICBhICJzbXVkZ2UiIG9wZXJhdGlvbiB0aGVuIHRoZSB3cml0ZSBvcGVyYXRpb24gd2lsbCBkaWUuCisjICgzKSBJZiBkYXRhIHdpdGggdGhlIHBhdGhuYW1lICJlcnJvci5yIiBpcyBwcm9jZXNzZWQgd2l0aCBhbnkKKyMgICAgIG9wZXJhdGlvbiB0aGVuIHRoZSBmaWx0ZXIgc2lnbmFscyB0aGF0IGl0IGNhbm5vdCBvciBkb2VzIG5vdCB3YW50CisjICAgICB0byBwcm9jZXNzIHRoZSBmaWxlLgorIyAoNCkgSWYgZGF0YSB3aXRoIHRoZSBwYXRobmFtZSAiYWJvcnQuciIgaXMgcHJvY2Vzc2VkIHdpdGggYW55CisjICAgICBvcGVyYXRpb24gdGhlbiB0aGUgZmlsdGVyIHNpZ25hbHMgdGhhdCBpdCBjYW5ub3Qgb3IgZG9lcyBub3Qgd2FudAorIyAgICAgdG8gcHJvY2VzcyB0aGUgZmlsZSBhbmQgYW55IGZpbGUgYWZ0ZXIgdGhhdCBpcyBwcm9jZXNzZWQgd2l0aCB0aGUKKyMgICAgIHNhbWUgY29tbWFuZC4KKyMgKDUpIElmIGRhdGEgd2l0aCBhIHBhdGhuYW1lIHRoYXQgaXMgYSBrZXkgaW4gdGhlIERFTEFZIGhhc2ggaXMKKyMgICAgIHJlcXVlc3RlZCAoZS5nLiAidGVzdC1kZWxheTEwLmEiKSB0aGVuIHRoZSBmaWx0ZXIgcmVzcG9uZHMgd2l0aAorIyAgICAgYSAiZGVsYXkiIHN0YXR1cyBhbmQgc2V0cyB0aGUgInJlcXVlc3RlZCIgZmllbGQgaW4gdGhlIERFTEFZIGhhc2guCisjICAgICBUaGUgZmlsdGVyIHdpbGwgc2lnbmFsIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhpcyBvYmplY3QgYWZ0ZXIKKyMgICAgICJjb3VudCIgKGZpZWxkIGluIERFTEFZIGhhc2gpICJsaXN0X2F2YWlsYWJsZV9ibG9icyIgY29tbWFuZHMuCisjICg2KSBJZiBkYXRhIHdpdGggdGhlIHBhdGhuYW1lICJtaXNzaW5nLWRlbGF5LmEiIGlzIHByb2Nlc3NlZCB0aGF0IHRoZQorIyAgICAgZmlsdGVyIHdpbGwgZHJvcCB0aGUgcGF0aCBmcm9tIHRoZSAibGlzdF9hdmFpbGFibGVfYmxvYnMiIHJlc3BvbnNlLgorIyAoNykgSWYgZGF0YSB3aXRoIHRoZSBwYXRobmFtZSAiaW52YWxpZC1kZWxheS5hIiBpcyBwcm9jZXNzZWQgdGhhdCB0aGUKKyMgICAgIGZpbHRlciB3aWxsIGFkZCB0aGUgcGF0aCAidW5maWx0ZXJlZCIgd2hpY2ggd2FzIG5vdCBkZWxheWVkIGJlZm9yZQorIyAgICAgdG8gdGhlICJsaXN0X2F2YWlsYWJsZV9ibG9icyIgcmVzcG9uc2UuCisjCisKK3VzZSA1LjAwODsKK3N1YiBnaXRwZXJsbGliIHsKKwkjIEdpdCBhc3N1bWVzIHRoYXQgYWxsIHBhdGggbGlzdHMgYXJlIFVuaXgteSBjb2xvbi1zZXBhcmF0ZWQgb25lcy4gQnV0CisJIyB3aGVuIHRoZSBHaXQgZm9yIFdpbmRvd3MgZXhlY3V0ZXMgdGhlIHRlc3Qgc3VpdGUsIGl0cyBNU1lTMiBCYXNoCisJIyBjYWxscyBnaXQuZXhlLCBhbmQgY29sb24tc2VwYXJhdGVkIHBhdGggbGlzdHMgYXJlIGNvbnZlcnRlZCBpbnRvCisJIyBXaW5kb3dzLXkgc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0cyBvZiAqV2luZG93cyogcGF0aHMgKHdoaWNoCisJIyBuYXR1cmFsbHkgY29udGFpbiBhIGNvbG9uIGFmdGVyIHRoZSBkcml2ZSBsZXR0ZXIsIHNvIHNwbGl0dGluZyBieQorCSMgY29sb25zIHNpbXBseSBkb2VzIG5vdCBjdXQgaXQpLgorCSMKKwkjIERldGVjdCBzZW1pY29sb24tc2VwYXJhdGVkIHBhdGggbGlzdCBhbmQgaGFuZGxlIHRoZW0gYXBwcm9wcmlhdGVseS4KKworCWlmICgkRU5We0dJVFBFUkxMSUJ9ID1+IC87LykgeworCQlyZXR1cm4gc3BsaXQoLzsvLCAkRU5We0dJVFBFUkxMSUJ9KTsKKwl9CisJcmV0dXJuIHNwbGl0KC86LywgJEVOVntHSVRQRVJMTElCfSk7Cit9Cit1c2UgbGliIChnaXRwZXJsbGliKCkpOwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBJTzo6RmlsZTsKK3VzZSBHaXQ6OlBhY2tldDsKKworbXkgJE1BWF9QQUNLRVRfQ09OVEVOVF9TSVpFID0gNjU1MTY7CitteSAkbG9nX2ZpbGUgICAgICAgICAgICAgICAgPSBzaGlmdCBAQVJHVjsKK215IEBjYXBhYmlsaXRpZXMgICAgICAgICAgICA9IEBBUkdWOworCitvcGVuIG15ICRkZWJ1ZywgIj4+IiwgJGxvZ19maWxlIG9yIGRpZSAiY2Fubm90IG9wZW4gbG9nIGZpbGU6ICQhIjsKKworbXkgJURFTEFZID0gKAorCSd0ZXN0LWRlbGF5MTAuYScgPT4geyAicmVxdWVzdGVkIiA9PiAwLCAiY291bnQiID0+IDEgfSwKKwkndGVzdC1kZWxheTExLmEnID0+IHsgInJlcXVlc3RlZCIgPT4gMCwgImNvdW50IiA9PiAxIH0sCisJJ3Rlc3QtZGVsYXkyMC5hJyA9PiB7ICJyZXF1ZXN0ZWQiID0+IDAsICJjb3VudCIgPT4gMiB9LAorCSd0ZXN0LWRlbGF5MTAuYicgPT4geyAicmVxdWVzdGVkIiA9PiAwLCAiY291bnQiID0+IDEgfSwKKwknbWlzc2luZy1kZWxheS5hJyA9PiB7ICJyZXF1ZXN0ZWQiID0+IDAsICJjb3VudCIgPT4gMSB9LAorCSdpbnZhbGlkLWRlbGF5LmEnID0+IHsgInJlcXVlc3RlZCIgPT4gMCwgImNvdW50IiA9PiAxIH0sCispOworCitzdWIgcm90MTMgeworCW15ICRzdHIgPSBzaGlmdDsKKwkkc3RyID1+IHkvQS1aYS16L04tWkEtTW4temEtbS87CisJcmV0dXJuICRzdHI7Cit9CisKK3ByaW50ICRkZWJ1ZyAiU1RBUlRcbiI7CiskZGVidWctPmZsdXNoKCk7CisKK3BhY2tldF9pbml0aWFsaXplKCJnaXQtZmlsdGVyIiwgMik7CisKK215ICVyZW1vdGVfY2FwcyA9IHBhY2tldF9yZWFkX2FuZF9jaGVja19jYXBhYmlsaXRpZXMoImNsZWFuIiwgInNtdWRnZSIsICJkZWxheSIpOworcGFja2V0X2NoZWNrX2FuZF93cml0ZV9jYXBhYmlsaXRpZXMoXCVyZW1vdGVfY2FwcywgQGNhcGFiaWxpdGllcyk7CisKK3ByaW50ICRkZWJ1ZyAiaW5pdCBoYW5kc2hha2UgY29tcGxldGVcbiI7CiskZGVidWctPmZsdXNoKCk7CisKK3doaWxlICgxKSB7CisJbXkgKCAkcmVzLCAkY29tbWFuZCApID0gcGFja2V0X2tleV92YWxfcmVhZCgiY29tbWFuZCIpOworCWlmICggJHJlcyA9PSAtMSApIHsKKwkJcHJpbnQgJGRlYnVnICJTVE9QXG4iOworCQlleGl0KCk7CisJfQorCXByaW50ICRkZWJ1ZyAiSU46ICRjb21tYW5kIjsKKwkkZGVidWctPmZsdXNoKCk7CisKKwlpZiAoICRjb21tYW5kIGVxICJsaXN0X2F2YWlsYWJsZV9ibG9icyIgKSB7CisJCSMgRmx1c2gKKwkJcGFja2V0X2NvbXBhcmVfbGlzdHMoWzEsICIiXSwgcGFja2V0X2Jpbl9yZWFkKCkpIHx8CisJCQlkaWUgImJhZCBsaXN0X2F2YWlsYWJsZV9ibG9icyBlbmQiOworCisJCWZvcmVhY2ggbXkgJHBhdGhuYW1lICggc29ydCBrZXlzICVERUxBWSApIHsKKwkJCWlmICggJERFTEFZeyRwYXRobmFtZX17InJlcXVlc3RlZCJ9ID49IDEgKSB7CisJCQkJJERFTEFZeyRwYXRobmFtZX17ImNvdW50In0gPSAkREVMQVl7JHBhdGhuYW1lfXsiY291bnQifSAtIDE7CisJCQkJaWYgKCAkcGF0aG5hbWUgZXEgImludmFsaWQtZGVsYXkuYSIgKSB7CisJCQkJCSMgU2VuZCBHaXQgYSBwYXRobmFtZSB0aGF0IHdhcyBub3QgZGVsYXllZCBlYXJsaWVyCisJCQkJCXBhY2tldF90eHRfd3JpdGUoInBhdGhuYW1lPXVuZmlsdGVyZWQiKTsKKwkJCQl9CisJCQkJaWYgKCAkcGF0aG5hbWUgZXEgIm1pc3NpbmctZGVsYXkuYSIgKSB7CisJCQkJCSMgRG8gbm90IHNpZ25hbCBHaXQgdGhhdCB0aGlzIGZpbGUgaXMgYXZhaWxhYmxlCisJCQkJfSBlbHNpZiAoICRERUxBWXskcGF0aG5hbWV9eyJjb3VudCJ9ID09IDAgKSB7CisJCQkJCXByaW50ICRkZWJ1ZyAiICRwYXRobmFtZSI7CisJCQkJCXBhY2tldF90eHRfd3JpdGUoInBhdGhuYW1lPSRwYXRobmFtZSIpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXBhY2tldF9mbHVzaCgpOworCisJCXByaW50ICRkZWJ1ZyAiIFtPS11cbiI7CisJCSRkZWJ1Zy0+Zmx1c2goKTsKKwkJcGFja2V0X3R4dF93cml0ZSgic3RhdHVzPXN1Y2Nlc3MiKTsKKwkJcGFja2V0X2ZsdXNoKCk7CisJfSBlbHNlIHsKKwkJbXkgKCAkcmVzLCAkcGF0aG5hbWUgKSA9IHBhY2tldF9rZXlfdmFsX3JlYWQoInBhdGhuYW1lIik7CisJCWlmICggJHJlcyA9PSAtMSApIHsKKwkJCWRpZSAidW5leHBlY3RlZCBFT0Ygd2hpbGUgZXhwZWN0aW5nIHBhdGhuYW1lIjsKKwkJfQorCQlwcmludCAkZGVidWcgIiAkcGF0aG5hbWUiOworCQkkZGVidWctPmZsdXNoKCk7CisKKwkJIyBSZWFkIHVudGlsIGZsdXNoCisJCW15ICggJGRvbmUsICRidWZmZXIgKSA9IHBhY2tldF90eHRfcmVhZCgpOworCQl3aGlsZSAoICRidWZmZXIgbmUgJycgKSB7CisJCQlpZiAoICRidWZmZXIgZXEgImNhbi1kZWxheT0xIiApIHsKKwkJCQlpZiAoIGV4aXN0cyAkREVMQVl7JHBhdGhuYW1lfSBhbmQgJERFTEFZeyRwYXRobmFtZX17InJlcXVlc3RlZCJ9ID09IDAgKSB7CisJCQkJCSRERUxBWXskcGF0aG5hbWV9eyJyZXF1ZXN0ZWQifSA9IDE7CisJCQkJfQorCQkJfSBlbHNpZiAoJGJ1ZmZlciA9fiAvXihyZWZ8dHJlZWlzaHxibG9iKT0vKSB7CisJCQkJcHJpbnQgJGRlYnVnICIgJGJ1ZmZlciI7CisJCQl9IGVsc2UgeworCQkJCSMgSW4gZ2VuZXJhbCwgZmlsdGVycyBuZWVkIHRvIGJlIGdyYWNlZnVsIGFib3V0CisJCQkJIyBuZXcgbWV0YWRhdGEsIHNpbmNlIGl0J3MgZG9jdW1lbnRlZCB0aGF0IHdlCisJCQkJIyBjYW4gcGFzcyBhbnkga2V5LXZhbHVlIHBhaXJzLCBidXQgZm9yIHRlc3RzLAorCQkJCSMgbGV0J3MgYmUgYSBsaXR0bGUgc3RyaWN0ZXIuCisJCQkJZGllICJVbmtub3duIG1lc3NhZ2UgJyRidWZmZXInIjsKKwkJCX0KKworCQkJKCAkZG9uZSwgJGJ1ZmZlciApID0gcGFja2V0X3R4dF9yZWFkKCk7CisJCX0KKwkJaWYgKCAkZG9uZSA9PSAtMSApIHsKKwkJCWRpZSAidW5leHBlY3RlZCBFT0YgYWZ0ZXIgcGF0aG5hbWUgJyRwYXRobmFtZSciOworCQl9CisKKwkJbXkgJGlucHV0ID0gIiI7CisJCXsKKwkJCWJpbm1vZGUoU1RESU4pOworCQkJbXkgJGJ1ZmZlcjsKKwkJCW15ICRkb25lID0gMDsKKwkJCXdoaWxlICggISRkb25lICkgeworCQkJCSggJGRvbmUsICRidWZmZXIgKSA9IHBhY2tldF9iaW5fcmVhZCgpOworCQkJCSRpbnB1dCAuPSAkYnVmZmVyOworCQkJfQorCQkJaWYgKCAkZG9uZSA9PSAtMSApIHsKKwkJCQlkaWUgInVuZXhwZWN0ZWQgRU9GIHdoaWxlIHJlYWRpbmcgaW5wdXQgZm9yICckcGF0aG5hbWUnIjsKKwkJCX0JCQkKKwkJCXByaW50ICRkZWJ1ZyAiICIgLiBsZW5ndGgoJGlucHV0KSAuICIgW09LXSAtLSAiOworCQkJJGRlYnVnLT5mbHVzaCgpOworCQl9CisKKwkJbXkgJG91dHB1dDsKKwkJaWYgKCBleGlzdHMgJERFTEFZeyRwYXRobmFtZX0gYW5kIGV4aXN0cyAkREVMQVl7JHBhdGhuYW1lfXsib3V0cHV0In0gKSB7CisJCQkkb3V0cHV0ID0gJERFTEFZeyRwYXRobmFtZX17Im91dHB1dCJ9CisJCX0gZWxzaWYgKCAkcGF0aG5hbWUgZXEgImVycm9yLnIiIG9yICRwYXRobmFtZSBlcSAiYWJvcnQuciIgKSB7CisJCQkkb3V0cHV0ID0gIiI7CisJCX0gZWxzaWYgKCAkY29tbWFuZCBlcSAiY2xlYW4iIGFuZCBncmVwKCAvXmNsZWFuJC8sIEBjYXBhYmlsaXRpZXMgKSApIHsKKwkJCSRvdXRwdXQgPSByb3QxMygkaW5wdXQpOworCQl9IGVsc2lmICggJGNvbW1hbmQgZXEgInNtdWRnZSIgYW5kIGdyZXAoIC9ec211ZGdlJC8sIEBjYXBhYmlsaXRpZXMgKSApIHsKKwkJCSRvdXRwdXQgPSByb3QxMygkaW5wdXQpOworCQl9IGVsc2UgeworCQkJZGllICJiYWQgY29tbWFuZCAnJGNvbW1hbmQnIjsKKwkJfQorCisJCWlmICggJHBhdGhuYW1lIGVxICJlcnJvci5yIiApIHsKKwkJCXByaW50ICRkZWJ1ZyAiW0VSUk9SXVxuIjsKKwkJCSRkZWJ1Zy0+Zmx1c2goKTsKKwkJCXBhY2tldF90eHRfd3JpdGUoInN0YXR1cz1lcnJvciIpOworCQkJcGFja2V0X2ZsdXNoKCk7CisJCX0gZWxzaWYgKCAkcGF0aG5hbWUgZXEgImFib3J0LnIiICkgeworCQkJcHJpbnQgJGRlYnVnICJbQUJPUlRdXG4iOworCQkJJGRlYnVnLT5mbHVzaCgpOworCQkJcGFja2V0X3R4dF93cml0ZSgic3RhdHVzPWFib3J0Iik7CisJCQlwYWNrZXRfZmx1c2goKTsKKwkJfSBlbHNpZiAoICRjb21tYW5kIGVxICJzbXVkZ2UiIGFuZAorCQkJZXhpc3RzICRERUxBWXskcGF0aG5hbWV9IGFuZAorCQkJJERFTEFZeyRwYXRobmFtZX17InJlcXVlc3RlZCJ9ID09IDEgKSB7CisJCQlwcmludCAkZGVidWcgIltERUxBWUVEXVxuIjsKKwkJCSRkZWJ1Zy0+Zmx1c2goKTsKKwkJCXBhY2tldF90eHRfd3JpdGUoInN0YXR1cz1kZWxheWVkIik7CisJCQlwYWNrZXRfZmx1c2goKTsKKwkJCSRERUxBWXskcGF0aG5hbWV9eyJyZXF1ZXN0ZWQifSA9IDI7CisJCQkkREVMQVl7JHBhdGhuYW1lfXsib3V0cHV0In0gPSAkb3V0cHV0OworCQl9IGVsc2UgeworCQkJcGFja2V0X3R4dF93cml0ZSgic3RhdHVzPXN1Y2Nlc3MiKTsKKwkJCXBhY2tldF9mbHVzaCgpOworCisJCQlpZiAoICRwYXRobmFtZSBlcSAiJHtjb21tYW5kfS13cml0ZS1mYWlsLnIiICkgeworCQkJCXByaW50ICRkZWJ1ZyAiW1dSSVRFIEZBSUxdXG4iOworCQkJCSRkZWJ1Zy0+Zmx1c2goKTsKKwkJCQlkaWUgIiR7Y29tbWFuZH0gd3JpdGUgZXJyb3IiOworCQkJfQorCisJCQlwcmludCAkZGVidWcgIk9VVDogIiAuIGxlbmd0aCgkb3V0cHV0KSAuICIgIjsKKwkJCSRkZWJ1Zy0+Zmx1c2goKTsKKworCQkJd2hpbGUgKCBsZW5ndGgoJG91dHB1dCkgPiAwICkgeworCQkJCW15ICRwYWNrZXQgPSBzdWJzdHIoICRvdXRwdXQsIDAsICRNQVhfUEFDS0VUX0NPTlRFTlRfU0laRSApOworCQkJCXBhY2tldF9iaW5fd3JpdGUoJHBhY2tldCk7CisJCQkJIyBkb3RzIHJlcHJlc2VudCB0aGUgbnVtYmVyIG9mIHBhY2tldHMKKwkJCQlwcmludCAkZGVidWcgIi4iOworCQkJCWlmICggbGVuZ3RoKCRvdXRwdXQpID4gJE1BWF9QQUNLRVRfQ09OVEVOVF9TSVpFICkgeworCQkJCQkkb3V0cHV0ID0gc3Vic3RyKCAkb3V0cHV0LCAkTUFYX1BBQ0tFVF9DT05URU5UX1NJWkUgKTsKKwkJCQl9IGVsc2UgeworCQkJCQkkb3V0cHV0ID0gIiI7CisJCQkJfQorCQkJfQorCQkJcGFja2V0X2ZsdXNoKCk7CisJCQlwcmludCAkZGVidWcgIiBbT0tdXG4iOworCQkJJGRlYnVnLT5mbHVzaCgpOworCQkJcGFja2V0X2ZsdXNoKCk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS90L3QwMDIyLWNybGYtcmVuYW1lLnNoIGIvdC90MDAyMi1jcmxmLXJlbmFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YWYzZmJjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAyMi1jcmxmLXJlbmFtZS5zaApAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0naWdub3JlIENSIGluIENSTEYgc2VxdWVuY2Ugd2hpbGUgY29tcHV0aW5nIHNpbWlsaWFyaXR5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwljYXQgIiRURVNUX0RJUkVDVE9SWSIvdDAwMjItY3JsZi1yZW5hbWUuc2ggPnNhbXBsZSAmJgorCWdpdCBhZGQgc2FtcGxlICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEluaXRpYWwgJiYKKworCWFwcGVuZF9jciA8IiRURVNUX0RJUkVDVE9SWSIvdDAwMjItY3JsZi1yZW5hbWUuc2ggPmVscG1hcyAmJgorCWdpdCBhZGQgZWxwbWFzICYmCisJcm0gLWYgc2FtcGxlICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFNlY29uZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLU0nICcKKworCWdpdCBkaWZmLXRyZWUgLU0gLXIgLS1uYW1lLXN0YXR1cyBIRUFEXiBIRUFEIHwKKwlzZWQgLWUgInMvUlswLTldKi9STlVNLyIgPmFjdHVhbCAmJgorCWVjaG8gIlJOVU0Jc2FtcGxlCWVscG1hcyIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMjMtY3JsZi1hbS5zaCBiL3QvdDAwMjMtY3JsZi1hbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOWJiYjkxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAyMy1jcmxmLWFtLnNoCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGFtIHdpdGggYXV0by5jcmxmJworCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5wYXRjaGZpbGUgPDxcRU9GCitGcm9tIDM4YmUxMDA3MmU0NWRkNmIwOGNlNDA4NTFlM2ZjYTYwYTMxYTM0MGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJpdXMgU3Rvcm0tT2xzZW4gPHhAeS5jb20+CitEYXRlOiBUaHUsIDIzIEF1ZyAyMDA3IDEzOjAwOjAwICswMjAwCitTdWJqZWN0OiB0ZXN0MQorCistLS0KKyBmb28gfCAxICsKKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZm9vCisKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NzE2Y2E1OTg3Y2JmOTdkNmJiNTQ5MjBiZWE2YWRkZTI0MmQ4N2U2CistLS0gL2Rldi9udWxsCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytiYXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwllY2hvIGZvbyA+YmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbScgJworCisJZ2l0IGFtIC0zIDxwYXRjaGZpbGUgJiYKKwlnaXQgZGlmZi1maWxlcyAtLW5hbWUtc3RhdHVzIC0tZXhpdC1jb2RlCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDI0LWNybGYtYXJjaGl2ZS5zaCBiL3QvdDAwMjQtY3JsZi1hcmNoaXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRlOWZhM2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDI0LWNybGYtYXJjaGl2ZS5zaApAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVzcGVjdCBjcmxmIGluIGdpdCBhcmNoaXZlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCisJcHJpbnRmICJDUkxGIGxpbmUgZW5kaW5nXHJcbkFuZCBhbm90aGVyXHJcbiIgPiBzYW1wbGUgJiYKKwlnaXQgYWRkIHNhbXBsZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBJbml0aWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFyIGFyY2hpdmUnICcKKworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciBIRUFEIHwKKwkoIG1rZGlyIHVudGFycmVkICYmIGNkIHVudGFycmVkICYmICIkVEFSIiAteGYgLSApICYmCisKKwl0ZXN0X2NtcCBzYW1wbGUgdW50YXJyZWQvc2FtcGxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAnemlwIGFyY2hpdmUnICcKKworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCBIRUFEID50ZXN0LnppcCAmJgorCisJKCBta2RpciB1bnppcHBlZCAmJiBjZCB1bnppcHBlZCAmJiAiJEdJVF9VTlpJUCIgLi4vdGVzdC56aXAgKSAmJgorCisJdGVzdF9jbXAgc2FtcGxlIHVuemlwcGVkL3NhbXBsZQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAyNS1jcmxmLXJlbm9ybWFsaXplLnNoIGIvdC90MDAyNS1jcmxmLXJlbm9ybWFsaXplLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUxMzM2M2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDI1LWNybGYtcmVub3JtYWxpemUuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0NSTEYgcmVub3JtYWxpemF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGZhbHNlICYmCisJcHJpbnRmICJMSU5FT05FXG5MSU5FVFdPXG5MSU5FVEhSRUVcbiIgPkxGLnR4dCAmJgorCXByaW50ZiAiTElORU9ORVxyXG5MSU5FVFdPXHJcbkxJTkVUSFJFRVxyXG4iID5DUkxGLnR4dCAmJgorCXByaW50ZiAiTElORU9ORVxyXG5MSU5FVFdPXG5MSU5FVEhSRUVcbiIgPkNSTEZfbWl4X0xGLnR4dCAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5vcm1hbGl6ZSBDUkxGIGluIHJlcG8nICcKKwllY2hvICIqLnR4dCB0ZXh0PWF1dG8iID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBhZGQgLS1yZW5vcm1hbGl6ZSAiKi50eHQiICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWkvbGYgdy9jcmxmIGF0dHIvdGV4dD1hdXRvIENSTEYudHh0CisJaS9sZiB3L2xmIGF0dHIvdGV4dD1hdXRvIExGLnR4dAorCWkvbGYgdy9taXhlZCBhdHRyL3RleHQ9YXV0byBDUkxGX21peF9MRi50eHQKKwlFT0YKKwlnaXQgbHMtZmlsZXMgLS1lb2wgfAorCXNlZCAtZSAicy8JLyAvZyIgLWUgInMvICAqLyAvZyIgfAorCXNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWdub3JlLWVycm9ycyBub3QgbWlzdGFrZW4gZm9yIHJlbm9ybWFsaXplJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gIioudHh0IHRleHQ9YXV0byIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGxzLWZpbGVzIC0tZW9sID5leHBlY3QgJiYKKwlnaXQgYWRkIC0taWdub3JlLWVycm9ycyAiKi50eHQiICYmCisJZ2l0IGxzLWZpbGVzIC0tZW9sID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAyNi1lb2wtY29uZmlnLnNoIGIvdC90MDAyNi1lb2wtY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM1MjAzZTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDI2LWVvbC1jb25maWcuc2gKQEAgLTAsMCArMSwxMDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdDUkxGIGNvbnZlcnNpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCitoYXNfY3IoKSB7CisJdHIgJ1wwMTUnIFEgPCIkMSIgfCBncmVwIFEgPi9kZXYvbnVsbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCisJZWNobyAib25lIHRleHQiID4gLmdpdGF0dHJpYnV0ZXMgJiYKKworCWZvciB3IGluIEhlbGxvIHdvcmxkIGhvdyBhcmUgeW91OyBkbyBlY2hvICR3OyBkb25lID5vbmUgJiYKKwlmb3IgdyBpbiBJIGFtIHZlcnkgdmVyeSBmaW5lIHRoYW5rIHlvdTsgZG8gZWNobyAkdzsgZG9uZSA+dHdvICYmCisJZ2l0IGFkZCAuICYmCisKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCW9uZT0kKGdpdCByZXYtcGFyc2UgSEVBRDpvbmUpICYmCisJdHdvPSQoZ2l0IHJldi1wYXJzZSBIRUFEOnR3bykgJiYKKworCWVjaG8gaGFwcHkuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VvbD1sZiBwdXRzIExGcyBpbiBub3JtYWxpemVkIGZpbGUnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzIHRtcCBvbmUgdHdvICYmCisJZ2l0IGNvbmZpZyBjb3JlLmVvbCBsZiAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwkhIGhhc19jciBvbmUgJiYKKwkhIGhhc19jciB0d28gJiYKKwlvbmVkaWZmPSQoZ2l0IGRpZmYgb25lKSAmJgorCXR3b2RpZmY9JChnaXQgZGlmZiB0d28pICYmCisJdGVzdCAteiAiJG9uZWRpZmYiICYmIHRlc3QgLXogIiR0d29kaWZmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlb2w9Y3JsZiBwdXRzIENSTEZzIGluIG5vcm1hbGl6ZWQgZmlsZScgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgdG1wIG9uZSB0d28gJiYKKwlnaXQgY29uZmlnIGNvcmUuZW9sIGNybGYgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJaGFzX2NyIG9uZSAmJgorCSEgaGFzX2NyIHR3byAmJgorCW9uZWRpZmY9JChnaXQgZGlmZiBvbmUpICYmCisJdHdvZGlmZj0kKGdpdCBkaWZmIHR3bykgJiYKKwl0ZXN0IC16ICIkb25lZGlmZiIgJiYgdGVzdCAteiAiJHR3b2RpZmYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9jcmxmPXRydWUgb3ZlcnJpZGVzIGVvbD1sZicgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgdG1wIG9uZSB0d28gJiYKKwlnaXQgY29uZmlnIGNvcmUuZW9sIGxmICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJaGFzX2NyIG9uZSAmJgorCWhhc19jciB0d28gJiYKKwlvbmVkaWZmPSQoZ2l0IGRpZmYgb25lKSAmJgorCXR3b2RpZmY9JChnaXQgZGlmZiB0d28pICYmCisJdGVzdCAteiAiJG9uZWRpZmYiICYmIHRlc3QgLXogIiR0d29kaWZmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvY3JsZj10cnVlIG92ZXJyaWRlcyB1bnNldCBlb2wnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzIHRtcCBvbmUgdHdvICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBjb3JlLmVvbCAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWhhc19jciBvbmUgJiYKKwloYXNfY3IgdHdvICYmCisJb25lZGlmZj0kKGdpdCBkaWZmIG9uZSkgJiYKKwl0d29kaWZmPSQoZ2l0IGRpZmYgdHdvKSAmJgorCXRlc3QgLXogIiRvbmVkaWZmIiAmJiB0ZXN0IC16ICIkdHdvZGlmZiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBOQVRJVkVfQ1JMRiAnZW9sIG5hdGl2ZSBpcyBjcmxmJyAnCisKKwlybSAtcmYgbmF0aXZlX2VvbCAmJiBta2RpciBuYXRpdmVfZW9sICYmCisJKAorCQljZCBuYXRpdmVfZW9sICYmCisJCXByaW50ZiAiKi50eHQgdGV4dFxuIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJcHJpbnRmICJvbmVcclxudHdvXHJcbnRocmVlXHJcbiIgPmZpbGVkb3MudHh0ICYmCisJCXByaW50ZiAib25lXG50d29cbnRocmVlXG4iID5maWxldW5peC50eHQgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGZhbHNlICYmCisJCWdpdCBjb25maWcgY29yZS5lb2wgbmF0aXZlICYmCisJCWdpdCBhZGQgZmlsZWRvcy50eHQgZmlsZXVuaXgudHh0ICYmCisJCWdpdCBjb21taXQgLW0gImZpcnN0IiAmJgorCQlybSBmaWxlKi50eHQgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJCWhhc19jciBmaWxlZG9zLnR4dCAmJgorCQloYXNfY3IgZmlsZXVuaXgudHh0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMjctYXV0by1jcmxmLnNoIGIvdC90MDAyNy1hdXRvLWNybGYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWZjZDU2ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMjctYXV0by1jcmxmLnNoCkBAIC0wLDAgKzEsNjE1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQ1JMRiBjb252ZXJzaW9uIGFsbCBjb21iaW5hdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb21wYXJlX2ZpbGVzICgpIHsKKwl0ciAnXDAxNVwwMDAnIFFOIDwiJDEiID4iJDEiLmV4cGVjdCAmJgorCXRyICdcMDE1XDAwMCcgUU4gPCIkMiIgfCB0ciAtZCAnWicgPiIkMiIuYWN0dWFsICYmCisJdGVzdF9jbXAgIiQxIi5leHBlY3QgIiQyIi5hY3R1YWwgJiYKKwlybSAiJDEiLmV4cGVjdCAiJDIiLmFjdHVhbAorfQorCitjb21wYXJlX3dzX2ZpbGUgKCkgeworCXBmeD0kMQorCWV4cD0kMi5leHBlY3QKKwlhY3Q9JHBmeC5hY3R1YWwuJDMKKwl0ciAnXDAxNVwwMDBhYmNkZWYwMTIzNDU2Nzg5JyBRTjAwMDAwMDAwMDAwMDAwMDAwIDwiJDIiIHwKKwkJc2VkIC1lICJzLzAwMDAqLyRaRVJPX09JRC8iID4iJGV4cCIgJiYKKwl0ciAnXDAxNVwwMDBhYmNkZWYwMTIzNDU2Nzg5JyBRTjAwMDAwMDAwMDAwMDAwMDAwIDwiJDMiIHwKKwkJc2VkIC1lICJzLzAwMDAqLyRaRVJPX09JRC8iID4iJGFjdCIgJiYKKwl0ZXN0X2NtcCAiJGV4cCIgIiRhY3QiICYmCisJcm0gIiRleHAiICIkYWN0IgorfQorCitjcmVhdGVfZ2l0YXR0cmlidXRlcyAoKSB7CisJeworCQl3aGlsZSB0ZXN0ICIkIyIgIT0gMAorCQlkbworCQkJY2FzZSAiJDEiIGluCisJCQlhdXRvKQkgZWNobyAnKi50eHQgdGV4dD1hdXRvJyA7OworCQkJaWRlbnQpIGVjaG8gJyoudHh0IGlkZW50JyA7OworCQkJdGV4dCkJIGVjaG8gJyoudHh0IHRleHQnIDs7CisJCQktdGV4dCkgZWNobyAnKi50eHQgLXRleHQnIDs7CisJCQljcmxmKSAgZWNobyAnKi50eHQgZW9sPWNybGYnIDs7CisJCQlsZikgICAgZWNobyAnKi50eHQgZW9sPWxmJyA7OworCQkJIiIpIDs7CisJCQkqKQorCQkJCWVjaG8gPiYyIGludmFsaWQgYXR0cmlidXRlOiAiJDEiCisJCQkJZXhpdCAxCisJCQkJOzsKKwkJCWVzYWMgJiYKKwkJCXNoaWZ0CisJCWRvbmUKKwl9ID4uZ2l0YXR0cmlidXRlcworfQorCisjIENyZWF0ZSAyIHNldHMgb2YgZmlsZXM6CisjIFRoZSBOTk8gZmlsZXMgYXJlICJOb3QgTk9ybWFsaXplZCBpbiB0aGUgcmVwby4gV2UgdXNlIENSTEZfbWl4X0xGIGFuZCBzdG9yZQorIyAgIGl0IHVuZGVyIGRpZmZlcmVudCBuYW1lcyBmb3IgdGhlIGRpZmZlcmVudCB0ZXN0IGNhc2VzLCBzZWUgJHtwZnh9CisjICAgRGVwZW5kaW5nIG9uIC5naXRhdHRyaWJ1dGVzIHRoZXkgYXJlIG5vcm1hbGl6ZWQgYXQgdGhlIG5leHQgY29tbWl0IChvciBub3QpCisjIFRoZSBNSVggZmlsZXMgaGF2ZSBkaWZmZXJlbnQgY29udGVudHMgaW4gdGhlIHJlcG8uCisjICAgRGVwZW5kaW5nIG9uIGl0cyBjb250ZW50cywgdGhlICJuZXcgc2FmZXIgYXV0b2NybGYiIG1heSBraWNrIGluLgorY3JlYXRlX05OT19NSVhfZmlsZXMgKCkgeworCWZvciBjcmxmIGluIGZhbHNlIHRydWUgaW5wdXQKKwlkbworCQlmb3IgYXR0ciBpbiAiIiBhdXRvIHRleHQgLXRleHQKKwkJZG8KKwkJCWZvciBhZW9sIGluICIiIGxmIGNybGYKKwkJCWRvCisJCQkJcGZ4PU5OT19hdHRyXyR7YXR0cn1fYWVvbF8ke2Flb2x9XyR7Y3JsZn0gJiYKKwkJCQljcCBDUkxGX21peF9MRiAke3BmeH1fTEYudHh0ICYmCisJCQkJY3AgQ1JMRl9taXhfTEYgJHtwZnh9X0NSTEYudHh0ICYmCisJCQkJY3AgQ1JMRl9taXhfTEYgJHtwZnh9X0NSTEZfbWl4X0xGLnR4dCAmJgorCQkJCWNwIENSTEZfbWl4X0xGICR7cGZ4fV9MRl9taXhfQ1IudHh0ICYmCisJCQkJY3AgQ1JMRl9taXhfTEYgJHtwZnh9X0NSTEZfbnVsLnR4dCAmJgorCQkJCXBmeD1NSVhfYXR0cl8ke2F0dHJ9X2Flb2xfJHthZW9sfV8ke2NybGZ9ICYmCisJCQkJY3AgTEYgICAgICAgICAgJHtwZnh9X0xGLnR4dCAmJgorCQkJCWNwIENSTEYgICAgICAgICR7cGZ4fV9DUkxGLnR4dCAmJgorCQkJCWNwIENSTEZfbWl4X0xGICR7cGZ4fV9DUkxGX21peF9MRi50eHQgJiYKKwkJCQljcCBMRl9taXhfQ1IgICAke3BmeH1fTEZfbWl4X0NSLnR4dCAmJgorCQkJCWNwIENSTEZfbnVsICAgICR7cGZ4fV9DUkxGX251bC50eHQKKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUKK30KKworY2hlY2tfd2FybmluZyAoKSB7CisJY2FzZSAiJDEiIGluCisJTEZfQ1JMRikgZWNobyAid2FybmluZzogTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIiA+IiQyIi5leHBlY3QgOzsKKwlDUkxGX0xGKSBlY2hvICJ3YXJuaW5nOiBDUkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgTEYiID4iJDIiLmV4cGVjdCA7OworCScnKQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiIkMiIuZXhwZWN0IDs7CisJKikgZWNobyA+JjIgIklsbGVnYWwgMSI6ICIkMSIgOyByZXR1cm4gZmFsc2UgOzsKKwllc2FjCisJZ3JlcCAid2lsbCBiZSByZXBsYWNlZCBieSIgIiQyIiB8IHNlZCAtZSAicy9cKC4qXCkgaW4gW14gXSokL1wxLyIgfCB1bmlxICA+IiQyIi5hY3R1YWwKKwl0ZXN0X2kxOG5jbXAgIiQyIi5leHBlY3QgIiQyIi5hY3R1YWwKK30KKworY29tbWl0X2NoZWNrX3dhcm4gKCkgeworCWNybGY9JDEKKwlhdHRyPSQyCisJbGZuYW1lPSQzCisJY3JsZm5hbWU9JDQKKwlsZm1peGNybGY9JDUKKwlsZm1peGNyPSQ2CisJY3JsZm51bD0kNworCXBmeD1jcmxmXyR7Y3JsZn1fYXR0cl8ke2F0dHJ9CisJY3JlYXRlX2dpdGF0dHJpYnV0ZXMgIiRhdHRyIiAmJgorCWZvciBmIGluIExGIENSTEYgTEZfbWl4X0NSIENSTEZfbWl4X0xGIExGX251bCBDUkxGX251bAorCWRvCisJCWZuYW1lPSR7cGZ4fV8kZi50eHQgJiYKKwkJY3AgJGYgJGZuYW1lICYmCisJCWdpdCAtYyBjb3JlLmF1dG9jcmxmPSRjcmxmIGFkZCAkZm5hbWUgMj4iJHtwZnh9XyRmLmVyciIKKwlkb25lICYmCisJZ2l0IGNvbW1pdCAtbSAiY29yZS5hdXRvY3JsZiAkY3JsZiIgJiYKKwljaGVja193YXJuaW5nICIkbGZuYW1lIiAke3BmeH1fTEYuZXJyICYmCisJY2hlY2tfd2FybmluZyAiJGNybGZuYW1lIiAke3BmeH1fQ1JMRi5lcnIgJiYKKwljaGVja193YXJuaW5nICIkbGZtaXhjcmxmIiAke3BmeH1fQ1JMRl9taXhfTEYuZXJyICYmCisJY2hlY2tfd2FybmluZyAiJGxmbWl4Y3IiICR7cGZ4fV9MRl9taXhfQ1IuZXJyICYmCisJY2hlY2tfd2FybmluZyAiJGNybGZudWwiICR7cGZ4fV9DUkxGX251bC5lcnIKK30KKworY29tbWl0X2Noa193cm5OTk8gKCkgeworCWF0dHI9JDEgOyBzaGlmdAorCWFlb2w9JDEgOyBzaGlmdAorCWNybGY9JDEgOyBzaGlmdAorCWxmd2Fybj0kMSA7IHNoaWZ0CisJY3JsZndhcm49JDEgOyBzaGlmdAorCWxmbWl4Y3JsZj0kMSA7IHNoaWZ0CisJbGZtaXhjcj0kMSA7IHNoaWZ0CisJY3JsZm51bD0kMSA7IHNoaWZ0CisJcGZ4PU5OT19hdHRyXyR7YXR0cn1fYWVvbF8ke2Flb2x9XyR7Y3JsZn0KKwkjQ29tbWl0IGZpbGVzIG9uIHRvcCBvZiBleGlzdGluZyBmaWxlCisJY3JlYXRlX2dpdGF0dHJpYnV0ZXMgIiRhdHRyIiAkYWVvbCAmJgorCWZvciBmIGluIExGIENSTEYgQ1JMRl9taXhfTEYgTEZfbWl4X0NSIENSTEZfbnVsCisJZG8KKwkJZm5hbWU9JHtwZnh9XyRmLnR4dCAmJgorCQljcCAkZiAkZm5hbWUgJiYKKwkJcHJpbnRmIFogPj4iJGZuYW1lIiAmJgorCQlnaXQgLWMgY29yZS5hdXRvY3JsZj0kY3JsZiBhZGQgJGZuYW1lIDI+IiR7cGZ4fV8kZi5lcnIiCisJZG9uZQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tbWl0IE5OTyBmaWxlcyBjcmxmPSRjcmxmIGF0dHI9JGF0dHIgTEYiICcKKwkJY2hlY2tfd2FybmluZyAiJGxmd2FybiIgJHtwZnh9X0xGLmVycgorCScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21taXQgTk5PIGZpbGVzIGF0dHI9JGF0dHIgYWVvbD0kYWVvbCBjcmxmPSRjcmxmIENSTEYiICcKKwkJY2hlY2tfd2FybmluZyAiJGNybGZ3YXJuIiAke3BmeH1fQ1JMRi5lcnIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21taXQgTk5PIGZpbGVzIGF0dHI9JGF0dHIgYWVvbD0kYWVvbCBjcmxmPSRjcmxmIENSTEZfbWl4X0xGIiAnCisJCWNoZWNrX3dhcm5pbmcgIiRsZm1peGNybGYiICR7cGZ4fV9DUkxGX21peF9MRi5lcnIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21taXQgTk5PIGZpbGVzIGF0dHI9JGF0dHIgYWVvbD0kYWVvbCBjcmxmPSRjcmxmIExGX21peF9jciIgJworCQljaGVja193YXJuaW5nICIkbGZtaXhjciIgJHtwZnh9X0xGX21peF9DUi5lcnIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21taXQgTk5PIGZpbGVzIGF0dHI9JGF0dHIgYWVvbD0kYWVvbCBjcmxmPSRjcmxmIENSTEZfbnVsIiAnCisJCWNoZWNrX3dhcm5pbmcgIiRjcmxmbnVsIiAke3BmeH1fQ1JMRl9udWwuZXJyCisJJworfQorCisjIENvbW1pdCBhIGZpbGUgd2l0aCBtaXhlZCBsaW5lIGVuZGluZ3Mgb24gdG9wIG9mIGRpZmZlcmVudCBmaWxlcworIyBpbiB0aGUgaW5kZXguIENoZWNrIGZvciB3YXJuaW5ncworY29tbWl0X01JWF9jaGt3cm4gKCkgeworCWF0dHI9JDEgOyBzaGlmdAorCWFlb2w9JDEgOyBzaGlmdAorCWNybGY9JDEgOyBzaGlmdAorCWxmd2Fybj0kMSA7IHNoaWZ0CisJY3JsZndhcm49JDEgOyBzaGlmdAorCWxmbWl4Y3JsZj0kMSA7IHNoaWZ0CisJbGZtaXhjcj0kMSA7IHNoaWZ0CisJY3JsZm51bD0kMSA7IHNoaWZ0CisJcGZ4PU1JWF9hdHRyXyR7YXR0cn1fYWVvbF8ke2Flb2x9XyR7Y3JsZn0KKwkjQ29tbWl0IGZpbGUgd2l0aCBDTFJGX21peF9MRiBvbiB0b3Agb2YgZXhpc3RpbmcgZmlsZQorCWNyZWF0ZV9naXRhdHRyaWJ1dGVzICIkYXR0ciIgJGFlb2wgJiYKKwlmb3IgZiBpbiBMRiBDUkxGIENSTEZfbWl4X0xGIExGX21peF9DUiBDUkxGX251bAorCWRvCisJCWZuYW1lPSR7cGZ4fV8kZi50eHQgJiYKKwkJY3AgQ1JMRl9taXhfTEYgJGZuYW1lICYmCisJCXByaW50ZiBaID4+IiRmbmFtZSIgJiYKKwkJZ2l0IC1jIGNvcmUuYXV0b2NybGY9JGNybGYgYWRkICRmbmFtZSAyPiIke3BmeH1fJGYuZXJyIgorCWRvbmUKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbW1pdCBmaWxlIHdpdGggbWl4ZWQgRU9MIG9udG8gTEYgY3JsZj0kY3JsZiBhdHRyPSRhdHRyIiAnCisJCWNoZWNrX3dhcm5pbmcgIiRsZndhcm4iICR7cGZ4fV9MRi5lcnIKKwknCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tbWl0IGZpbGUgd2l0aCBtaXhlZCBFT0wgb250byBDTFJGIGF0dHI9JGF0dHIgYWVvbD0kYWVvbCBjcmxmPSRjcmxmIiAnCisJCWNoZWNrX3dhcm5pbmcgIiRjcmxmd2FybiIgJHtwZnh9X0NSTEYuZXJyCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tbWl0IGZpbGUgd2l0aCBtaXhlZCBFT0wgb250byBDUkxGX21peF9MRiBhdHRyPSRhdHRyIGFlb2w9JGFlb2wgY3JsZj0kY3JsZiIgJworCQljaGVja193YXJuaW5nICIkbGZtaXhjcmxmIiAke3BmeH1fQ1JMRl9taXhfTEYuZXJyCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tbWl0IGZpbGUgd2l0aCBtaXhlZCBFT0wgb250byBMRl9taXhfY3IgYXR0cj0kYXR0ciBhZW9sPSRhZW9sIGNybGY9JGNybGYgIiAnCisJCWNoZWNrX3dhcm5pbmcgIiRsZm1peGNyIiAke3BmeH1fTEZfbWl4X0NSLmVycgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbW1pdCBmaWxlIHdpdGggbWl4ZWQgRU9MIG9udG8gQ1JMRl9udWwgYXR0cj0kYXR0ciBhZW9sPSRhZW9sIGNybGY9JGNybGYiICcKKwkJY2hlY2tfd2FybmluZyAiJGNybGZudWwiICR7cGZ4fV9DUkxGX251bC5lcnIKKwknCit9CisKKworc3RhdHNfYXNjaWkgKCkgeworCWNhc2UgIiQxIiBpbgorCUxGKQorCQllY2hvIGxmCisJCTs7CisJQ1JMRikKKwkJZWNobyBjcmxmCisJCTs7CisJQ1JMRl9taXhfTEYpCisJCWVjaG8gbWl4ZWQKKwkJOzsKKwlMRl9taXhfQ1J8Q1JMRl9udWx8TEZfbnVsfENSTEZfbWl4X0NSKQorCQllY2hvICItdGV4dCIKKwkJOzsKKwkqKQorCQllY2hvIGVycm9yX2ludmFsaWQgJDEKKwkJOzsKKwllc2FjCisKK30KKworCisjIGNvbnN0cnVjdCB0aGUgYXR0ci8gcmV0dXJuZWQgYnkgZ2l0IGxzLWZpbGVzIC0tZW9sCisjIFRha2Ugbm9uZSAoPWVtcHR5KSwgb25lIG9yIHR3byBhcmdzCisjIGNvbnZlcnQuYzogZW9sPVhYIG92ZXJyaWRlcyB0ZXh0PWF1dG8KK2F0dHJfYXNjaWkgKCkgeworCWNhc2UgJDEsJDIgaW4KKwktdGV4dCwqKSAgIGVjaG8gIi10ZXh0IiA7OworCXRleHQsKSAgICAgZWNobyAidGV4dCIgOzsKKwl0ZXh0LGxmKSAgIGVjaG8gInRleHQgZW9sPWxmIiA7OworCXRleHQsY3JsZikgZWNobyAidGV4dCBlb2w9Y3JsZiIgOzsKKwlhdXRvLCkgICAgIGVjaG8gInRleHQ9YXV0byIgOzsKKwlhdXRvLGxmKSAgIGVjaG8gInRleHQ9YXV0byBlb2w9bGYiIDs7CisJYXV0byxjcmxmKSBlY2hvICJ0ZXh0PWF1dG8gZW9sPWNybGYiIDs7CisJbGYsKSAgICAgICBlY2hvICJ0ZXh0IGVvbD1sZiIgOzsKKwljcmxmLCkgICAgIGVjaG8gInRleHQgZW9sPWNybGYiIDs7CisJLCkgZWNobyAiIiA7OworCSopIGVjaG8gaW52YWxpZF9hdHRyICIkMSwkMiIgOzsKKwllc2FjCit9CisKK2NoZWNrX2ZpbGVzX2luX3JlcG8gKCkgeworCWNybGY9JDEKKwlhdHRyPSQyCisJbGZuYW1lPSQzCisJY3JsZm5hbWU9JDQKKwlsZm1peGNybGY9JDUKKwlsZm1peGNyPSQ2CisJY3JsZm51bD0kNworCXBmeD1jcmxmXyR7Y3JsZn1fYXR0cl8ke2F0dHJ9XyAmJgorCWNvbXBhcmVfZmlsZXMgJGxmbmFtZSAke3BmeH1MRi50eHQgJiYKKwljb21wYXJlX2ZpbGVzICRjcmxmbmFtZSAke3BmeH1DUkxGLnR4dCAmJgorCWNvbXBhcmVfZmlsZXMgJGxmbWl4Y3JsZiAke3BmeH1DUkxGX21peF9MRi50eHQgJiYKKwljb21wYXJlX2ZpbGVzICRsZm1peGNyICR7cGZ4fUxGX21peF9DUi50eHQgJiYKKwljb21wYXJlX2ZpbGVzICRjcmxmbnVsICR7cGZ4fUNSTEZfbnVsLnR4dAorfQorCitjaGVja19pbl9yZXBvX05OTyAoKSB7CisJYXR0cj0kMSA7IHNoaWZ0CisJYWVvbD0kMSA7IHNoaWZ0CisJY3JsZj0kMSA7IHNoaWZ0CisJbGZuYW1lPSQxIDsgc2hpZnQKKwljcmxmbmFtZT0kMSA7IHNoaWZ0CisJbGZtaXhjcmxmPSQxIDsgc2hpZnQKKwlsZm1peGNyPSQxIDsgc2hpZnQKKwljcmxmbnVsPSQxIDsgc2hpZnQKKwlwZng9Tk5PX2F0dHJfJHthdHRyfV9hZW9sXyR7YWVvbH1fJHtjcmxmfQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBhcmVfZmlsZXMgJGxmbmFtZSAke3BmeH1fTEYudHh0IiAnCisJCWNvbXBhcmVfZmlsZXMgJGxmbmFtZSAke3BmeH1fTEYudHh0CisJJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBhcmVfZmlsZXMgJGNybGZuYW1lICR7cGZ4fV9DUkxGLnR4dCIgJworCQljb21wYXJlX2ZpbGVzICRjcmxmbmFtZSAke3BmeH1fQ1JMRi50eHQKKwknCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGFyZV9maWxlcyAkbGZtaXhjcmxmICR7cGZ4fV9DUkxGX21peF9MRi50eHQiICcKKwkJY29tcGFyZV9maWxlcyAkbGZtaXhjcmxmICR7cGZ4fV9DUkxGX21peF9MRi50eHQKKwknCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGFyZV9maWxlcyAkbGZtaXhjciAke3BmeH1fTEZfbWl4X0NSLnR4dCIgJworCQljb21wYXJlX2ZpbGVzICRsZm1peGNyICR7cGZ4fV9MRl9taXhfQ1IudHh0CisJJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBhcmVfZmlsZXMgJGNybGZudWwgJHtwZnh9X0NSTEZfbnVsLnR4dCIgJworCQljb21wYXJlX2ZpbGVzICRjcmxmbnVsICR7cGZ4fV9DUkxGX251bC50eHQKKwknCit9CisKK2NoZWNrb3V0X2ZpbGVzICgpIHsKKwlhdHRyPSQxIDsgc2hpZnQKKwlpZGVudD0kMTsgc2hpZnQKKwlhZW9sPSQxIDsgc2hpZnQKKwljcmxmPSQxIDsgc2hpZnQKKwljZW9sPSQxIDsgc2hpZnQKKwlsZm5hbWU9JDEgOyBzaGlmdAorCWNybGZuYW1lPSQxIDsgc2hpZnQKKwlsZm1peGNybGY9JDEgOyBzaGlmdAorCWxmbWl4Y3I9JDEgOyBzaGlmdAorCWNybGZudWw9JDEgOyBzaGlmdAorCWNyZWF0ZV9naXRhdHRyaWJ1dGVzICIkYXR0ciIgJGlkZW50ICRhZW9sICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmICRjcmxmICYmCisJcGZ4PWVvbF8ke2Nlb2x9X2NybGZfJHtjcmxmfV9hdHRyXyR7YXR0cn1fICYmCisJZm9yIGYgaW4gTEYgQ1JMRiBMRl9taXhfQ1IgQ1JMRl9taXhfTEYgTEZfbnVsCisJZG8KKwkJcm0gY3JsZl9mYWxzZV9hdHRyX18kZi50eHQgJiYKKwkJaWYgdGVzdCAteiAiJGNlb2wiOyB0aGVuCisJCQlnaXQgY2hlY2tvdXQgLS0gY3JsZl9mYWxzZV9hdHRyX18kZi50eHQKKwkJZWxzZQorCQkJZ2l0IC1jIGNvcmUuZW9sPSRjZW9sIGNoZWNrb3V0IC0tIGNybGZfZmFsc2VfYXR0cl9fJGYudHh0CisJCWZpCisJZG9uZQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAibHMtZmlsZXMgLS1lb2wgYXR0cj0kYXR0ciAkaWRlbnQgYWVvbD0kYWVvbCBjb3JlLmF1dG9jcmxmPSRjcmxmIGNvcmUuZW9sPSRjZW9sIiAnCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gZXhwZWN0IGFjdHVhbCIgJiYKKwkJc29ydCA8PC1FT0YgPmV4cGVjdCAmJgorCQlpL2NybGYgdy8kKHN0YXRzX2FzY2lpICRjcmxmbmFtZSkgYXR0ci8kKGF0dHJfYXNjaWkgJGF0dHIgJGFlb2wpIGNybGZfZmFsc2VfYXR0cl9fQ1JMRi50eHQKKwkJaS9taXhlZCB3LyQoc3RhdHNfYXNjaWkgJGxmbWl4Y3JsZikgYXR0ci8kKGF0dHJfYXNjaWkgJGF0dHIgJGFlb2wpIGNybGZfZmFsc2VfYXR0cl9fQ1JMRl9taXhfTEYudHh0CisJCWkvbGYgdy8kKHN0YXRzX2FzY2lpICRsZm5hbWUpIGF0dHIvJChhdHRyX2FzY2lpICRhdHRyICRhZW9sKSBjcmxmX2ZhbHNlX2F0dHJfX0xGLnR4dAorCQlpLy10ZXh0IHcvJChzdGF0c19hc2NpaSAkbGZtaXhjcikgYXR0ci8kKGF0dHJfYXNjaWkgJGF0dHIgJGFlb2wpIGNybGZfZmFsc2VfYXR0cl9fTEZfbWl4X0NSLnR4dAorCQlpLy10ZXh0IHcvJChzdGF0c19hc2NpaSAkY3JsZm51bCkgYXR0ci8kKGF0dHJfYXNjaWkgJGF0dHIgJGFlb2wpIGNybGZfZmFsc2VfYXR0cl9fQ1JMRl9udWwudHh0CisJCWkvLXRleHQgdy8kKHN0YXRzX2FzY2lpICRjcmxmbnVsKSBhdHRyLyQoYXR0cl9hc2NpaSAkYXR0ciAkYWVvbCkgY3JsZl9mYWxzZV9hdHRyX19MRl9udWwudHh0CisJCUVPRgorCQlnaXQgbHMtZmlsZXMgLS1lb2wgY3JsZl9mYWxzZV9hdHRyX18qIHwKKwkJc2VkIC1lICJzLwkvIC9nIiAtZSAicy8gICovIC9nIiB8CisJCXNvcnQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrb3V0IGF0dHI9JGF0dHIgJGlkZW50IGFlb2w9JGFlb2wgY29yZS5hdXRvY3JsZj0kY3JsZiBjb3JlLmVvbD0kY2VvbCBmaWxlPUxGIiAiCisJCWNvbXBhcmVfd3NfZmlsZSAkcGZ4ICRsZm5hbWUgICAgY3JsZl9mYWxzZV9hdHRyX19MRi50eHQKKwkiCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2tvdXQgYXR0cj0kYXR0ciAkaWRlbnQgYWVvbD0kYWVvbCBjb3JlLmF1dG9jcmxmPSRjcmxmIGNvcmUuZW9sPSRjZW9sIGZpbGU9Q1JMRiIgIgorCQljb21wYXJlX3dzX2ZpbGUgJHBmeCAkY3JsZm5hbWUgIGNybGZfZmFsc2VfYXR0cl9fQ1JMRi50eHQKKwkiCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2tvdXQgYXR0cj0kYXR0ciAkaWRlbnQgYWVvbD0kYWVvbCBjb3JlLmF1dG9jcmxmPSRjcmxmIGNvcmUuZW9sPSRjZW9sIGZpbGU9Q1JMRl9taXhfTEYiICIKKwkJY29tcGFyZV93c19maWxlICRwZnggJGxmbWl4Y3JsZiBjcmxmX2ZhbHNlX2F0dHJfX0NSTEZfbWl4X0xGLnR4dAorCSIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCBhdHRyPSRhdHRyICRpZGVudCBhZW9sPSRhZW9sIGNvcmUuYXV0b2NybGY9JGNybGYgY29yZS5lb2w9JGNlb2wgZmlsZT1MRl9taXhfQ1IiICIKKwkJY29tcGFyZV93c19maWxlICRwZnggJGxmbWl4Y3IgICBjcmxmX2ZhbHNlX2F0dHJfX0xGX21peF9DUi50eHQKKwkiCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2tvdXQgYXR0cj0kYXR0ciAkaWRlbnQgYWVvbD0kYWVvbCBjb3JlLmF1dG9jcmxmPSRjcmxmIGNvcmUuZW9sPSRjZW9sIGZpbGU9TEZfbnVsIiAiCisJCWNvbXBhcmVfd3NfZmlsZSAkcGZ4ICRjcmxmbnVsICAgY3JsZl9mYWxzZV9hdHRyX19MRl9udWwudHh0CisJIgorfQorCisjIFRlc3QgY29udHJvbCBjaGFyYWN0ZXJzCisjIE5VTCBTT0ggQ1IgRU9GPT1eWgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1lb2wgLW8gVGV4dC9CaW5hcnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIGV4cGVjdCBhY3R1YWwgVGVCaV8qIiAmJgorCVNUUlQ9QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSAmJgorCVNUUj0kU1RSVCRTVFJUJFNUUlQkU1RSVCAmJgorCXByaW50ZiAiJHtTVFJ9QkJCXDAwMSIgPlRlQmlfMTI3X1MgJiYKKwlwcmludGYgIiR7U1RSfUJCQkJcMDAxIj5UZUJpXzEyOF9TICYmCisJcHJpbnRmICIke1NUUn1CQkJcMDMyIiA+VGVCaV8xMjdfRSAmJgorCXByaW50ZiAiXDAzMiR7U1RSfUJCQiIgPlRlQmlfRV8xMjcgJiYKKwlwcmludGYgIiR7U1RSfUJCQkJcMDAwIj5UZUJpXzEyOF9OICYmCisJcHJpbnRmICIke1NUUn1CQkJcMDEyIj5UZUJpXzEyOF9MICYmCisJcHJpbnRmICIke1NUUn1CQkJcMDE1Ij5UZUJpXzEyN19DICYmCisJcHJpbnRmICIke1NUUn1CQlwwMTVcMDEyIiA+VGVCaV8xMjZfQ0wgJiYKKwlwcmludGYgIiR7U1RSfUJCXDAxNVwwMTJcMDE1IiA+VGVCaV8xMjZfQ0xDICYmCisJc29ydCA8PC1cRU9GID5leHBlY3QgJiYKKwlpLyB3Ly10ZXh0IFRlQmlfMTI3X1MKKwlpLyB3L25vbmUgVGVCaV8xMjhfUworCWkvIHcvbm9uZSBUZUJpXzEyN19FCisJaS8gdy8tdGV4dCBUZUJpX0VfMTI3CisJaS8gdy8tdGV4dCBUZUJpXzEyOF9OCisJaS8gdy9sZiBUZUJpXzEyOF9MCisJaS8gdy8tdGV4dCBUZUJpXzEyN19DCisJaS8gdy9jcmxmIFRlQmlfMTI2X0NMCisJaS8gdy8tdGV4dCBUZUJpXzEyNl9DTEMKKwlFT0YKKwlnaXQgbHMtZmlsZXMgLS1lb2wgLW8gfAorCXNlZCAtbiAtZSAiL1RlQmlfL3tzIWF0dHIvWwldKiEhZworCXMhCSEgIWcKKwlzISAgKiEgIWcKKwlwCisJfSIgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG1hc3RlcicgJworCWVjaG8gPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciAmJgorCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgLmdpdGF0dHJpYnV0ZXMiIC4gJiYKKwlwcmludGYgIlwkSWQ6IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgXCRcbkxJTkVPTkVcbkxJTkVUV09cbkxJTkVUSFJFRSIgICAgID5MRiAmJgorCXByaW50ZiAiXCRJZDogMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBcJFxyXG5MSU5FT05FXHJcbkxJTkVUV09cclxuTElORVRIUkVFIiA+Q1JMRiAmJgorCXByaW50ZiAiXCRJZDogMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBcJFxuTElORU9ORVxyXG5MSU5FVFdPXG5MSU5FVEhSRUUiICAgPkNSTEZfbWl4X0xGICYmCisJcHJpbnRmICJcJElkOiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFwkXG5MSU5FT05FXG5MSU5FVFdPXHJMSU5FVEhSRUUiICAgICA+TEZfbWl4X0NSICYmCisJcHJpbnRmICJcJElkOiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFwkXHJcbkxJTkVPTkVcclxuTElORVRXT1xyTElORVRIUkVFIiAgID5DUkxGX21peF9DUiAmJgorCXByaW50ZiAiXCRJZDogMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBcJFxyXG5MSU5FT05FUVxyXG5MSU5FVFdPXHJcbkxJTkVUSFJFRSIgfCBxX3RvX251bCA+Q1JMRl9udWwgJiYKKwlwcmludGYgIlwkSWQ6IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgXCRcbkxJTkVPTkVRXG5MSU5FVFdPXG5MSU5FVEhSRUUiIHwgcV90b19udWwgPkxGX251bCAmJgorCWNyZWF0ZV9OTk9fTUlYX2ZpbGVzICYmCisJZ2l0IC1jIGNvcmUuYXV0b2NybGY9ZmFsc2UgYWRkIE5OT18qLnR4dCBNSVhfKi50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJtaXhlZCBsaW5lIGVuZGluZ3MiICYmCisJdGVzdF90aWNrCisnCisKKworCit3YXJuX0xGX0NSTEY9IkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgQ1JMRiIKK3dhcm5fQ1JMRl9MRj0iQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIgorCisjIFdJTEMgc3RhbmRzIGZvciAiV2FybiBpZiAodGhpcyBPUykgY29udmVydHMgTEYgaW50byBDUkxGIi4KKyMgV0lDTDogV2FybiBpZiBDUkxGIGJlY29tZXMgTEYKKyMgV0FNSVg6IE1peGVkIGxpbmUgZW5kaW5nczogZWl0aGVyIENSTEYtPkxGIG9yIExGLT5DUkxGCitpZiB0ZXN0X2hhdmVfcHJlcmVxIE5BVElWRV9DUkxGCit0aGVuCisJV0lMQz1MRl9DUkxGCisJV0lDTD0KKwlXQU1JWD1MRl9DUkxGCitlbHNlCisJV0lMQz0KKwlXSUNMPUNSTEZfTEYKKwlXQU1JWD1DUkxGX0xGCitmaQorCisjICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIgICBMRiAgICAgICAgQ1JMRiAgICAgIENSTEZtaXhMRiBMRm1peENSICAgQ1JMRk5VTAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGZpbGVzIGVtcHR5IGF0dHInICcKKwljb21taXRfY2hlY2tfd2FybiBmYWxzZSAiIiAgICAgIiIgICAgICAgICIiICAgICAgICAiIiAgICAgICAgIiIgICAgICAgICIiICYmCisJY29tbWl0X2NoZWNrX3dhcm4gdHJ1ZSAgIiIgICAgICJMRl9DUkxGIiAiIiAgICAgICAgIkxGX0NSTEYiICIiICAgICAgICAiIiAmJgorCWNvbW1pdF9jaGVja193YXJuIGlucHV0ICIiICAgICAiIiAgICAgICAgIkNSTEZfTEYiICJDUkxGX0xGIiAiIiAgICAgICAgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGZpbGVzIGF0dHI9YXV0bycgJworCWNvbW1pdF9jaGVja193YXJuIGZhbHNlICJhdXRvIiAiJFdJTEMiICAgIiRXSUNMIiAgICIkV0FNSVgiICAiIiAgICAgICAgIiIgJiYKKwljb21taXRfY2hlY2tfd2FybiB0cnVlICAiYXV0byIgIkxGX0NSTEYiICIiICAgICAgICAiTEZfQ1JMRiIgIiIgICAgICAgICIiICYmCisJY29tbWl0X2NoZWNrX3dhcm4gaW5wdXQgImF1dG8iICIiICAgICAgICAiQ1JMRl9MRiIgIkNSTEZfTEYiICIiICAgICAgICAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgZmlsZXMgYXR0cj10ZXh0JyAnCisJY29tbWl0X2NoZWNrX3dhcm4gZmFsc2UgInRleHQiICIkV0lMQyIgICAiJFdJQ0wiICAgIiRXQU1JWCIgICIkV0lMQyIgICAiJFdJQ0wiICAgJiYKKwljb21taXRfY2hlY2tfd2FybiB0cnVlICAidGV4dCIgIkxGX0NSTEYiICIiICAgICAgICAiTEZfQ1JMRiIgIkxGX0NSTEYiICIiICAgICAgICAmJgorCWNvbW1pdF9jaGVja193YXJuIGlucHV0ICJ0ZXh0IiAiIiAgICAgICAgIkNSTEZfTEYiICJDUkxGX0xGIiAiIiAgICAgICAgIkNSTEZfTEYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBmaWxlcyBhdHRyPS10ZXh0JyAnCisJY29tbWl0X2NoZWNrX3dhcm4gZmFsc2UgIi10ZXh0IiAiIiAgICAgICAiIiAgICAgICAgIiIgICAgICAgICIiICAgICAgICAiIiAmJgorCWNvbW1pdF9jaGVja193YXJuIHRydWUgICItdGV4dCIgIiIgICAgICAgIiIgICAgICAgICIiICAgICAgICAiIiAgICAgICAgIiIgJiYKKwljb21taXRfY2hlY2tfd2FybiBpbnB1dCAiLXRleHQiICIiICAgICAgICIiICAgICAgICAiIiAgICAgICAgIiIgICAgICAgICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBmaWxlcyBhdHRyPWxmJyAnCisJY29tbWl0X2NoZWNrX3dhcm4gZmFsc2UgImxmIiAgICAiIiAgICAgICAiQ1JMRl9MRiIgIkNSTEZfTEYiICAiIiAgICAgICAiQ1JMRl9MRiIgJiYKKwljb21taXRfY2hlY2tfd2FybiB0cnVlICAibGYiICAgICIiICAgICAgICJDUkxGX0xGIiAiQ1JMRl9MRiIgICIiICAgICAgICJDUkxGX0xGIiAmJgorCWNvbW1pdF9jaGVja193YXJuIGlucHV0ICJsZiIgICAgIiIgICAgICAgIkNSTEZfTEYiICJDUkxGX0xGIiAgIiIgICAgICAgIkNSTEZfTEYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBmaWxlcyBhdHRyPWNybGYnICcKKwljb21taXRfY2hlY2tfd2FybiBmYWxzZSAiY3JsZiIgIkxGX0NSTEYiICIiICAgICAgICAiTEZfQ1JMRiIgIkxGX0NSTEYiICIiICYmCisJY29tbWl0X2NoZWNrX3dhcm4gdHJ1ZSAgImNybGYiICJMRl9DUkxGIiAiIiAgICAgICAgIkxGX0NSTEYiICJMRl9DUkxGIiAiIiAmJgorCWNvbW1pdF9jaGVja193YXJuIGlucHV0ICJjcmxmIiAiTEZfQ1JMRiIgIiIgICAgICAgICJMRl9DUkxGIiAiTEZfQ1JMRiIgIiIKKycKKworIyBDb21taXQgIkNSTEZtaXhMRiIgb24gdG9wIG9mIHRoZXNlIGZpbGVzIGFscmVhZHkgaW4gdGhlIHJlcG86CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXhlZCAgICAgbWl4ZWQgICAgIG1peGVkICAgICAgIG1peGVkICAgICAgIG1peGVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnRvICAgICAgb250byAgICAgIG9udG8gICAgICAgIG9udG8gICAgICAgIG9udG8KKyMgICAgICAgICAgICAgICAgIGF0dHIgICAgICAgICAgICAgICAgICAgIExGICAgICAgICBDUkxGICAgICAgQ1JMRm1peExGICAgTEZfbWl4X0NSICAgQ1JMRk5VTAorY29tbWl0X01JWF9jaGt3cm4gIiIgICAgICAiIiAgICAgIGZhbHNlICAgIiIgICAgICAgICIiICAgICAgICAiIiAgICAgICAgICAiIiAgICAgICAgICAiIgorY29tbWl0X01JWF9jaGt3cm4gIiIgICAgICAiIiAgICAgIHRydWUgICAgIkxGX0NSTEYiICIiICAgICAgICAiIiAgICAgICAgICAiTEZfQ1JMRiIgICAiTEZfQ1JMRiIKK2NvbW1pdF9NSVhfY2hrd3JuICIiICAgICAgIiIgICAgICBpbnB1dCAgICJDUkxGX0xGIiAiIiAgICAgICAgIiIgICAgICAgICAgIkNSTEZfTEYiICAgIkNSTEZfTEYiCisKK2NvbW1pdF9NSVhfY2hrd3JuICJhdXRvIiAgIiIgICAgICBmYWxzZSAgICIkV0FNSVgiICAiIiAgICAgICAgIiIgICAgICAgICAgIiRXQU1JWCIgICAgIiRXQU1JWCIKK2NvbW1pdF9NSVhfY2hrd3JuICJhdXRvIiAgIiIgICAgICB0cnVlICAgICJMRl9DUkxGIiAiIiAgICAgICAgIiIgICAgICAgICAgIkxGX0NSTEYiICAgIkxGX0NSTEYiCitjb21taXRfTUlYX2Noa3dybiAiYXV0byIgICIiICAgICAgaW5wdXQgICAiQ1JMRl9MRiIgIiIgICAgICAgICIiICAgICAgICAgICJDUkxGX0xGIiAgICJDUkxGX0xGIgorCisjICAgICAgICAgICAgICAgICBhdHRyICAgICAgICAgICAgICAgICAgICBMRiAgICAgICAgQ1JMRiAgICAgIENSTEZtaXhMRiAgIExGX21peF9DUiAgIENSTEZOVUwKK2NvbW1pdF9jaGtfd3JuTk5PICIiICAgICAgIiIgICAgICBmYWxzZSAgICIiICAgICAgICAiIiAgICAgICAgIiIgICAgICAgICAgIiIgICAgICAgICAgIiIKK2NvbW1pdF9jaGtfd3JuTk5PICIiICAgICAgIiIgICAgICB0cnVlICAgIExGX0NSTEYgICAiIiAgICAgICAgIiIgICAgICAgICAgIiIgICAgICAgICAgIiIKK2NvbW1pdF9jaGtfd3JuTk5PICIiICAgICAgIiIgICAgICBpbnB1dCAgICIiICAgICAgICAiIiAgICAgICAgIiIgICAgICAgICAgIiIgICAgICAgICAgIiIKKworY29tbWl0X2Noa193cm5OTk8gImF1dG8iICAiIiAgICAgIGZhbHNlICAgIiRXSUxDIiAgICIiICAgICAgICAiIiAgICAgICAgICAiIiAgICAgICAgICAiIgorY29tbWl0X2Noa193cm5OTk8gImF1dG8iICAiIiAgICAgIHRydWUgICAgTEZfQ1JMRiAgICIiICAgICAgICAiIiAgICAgICAgICAiIiAgICAgICAgICAiIgorY29tbWl0X2Noa193cm5OTk8gImF1dG8iICAiIiAgICAgIGlucHV0ICAgIiIgICAgICAgICIiICAgICAgICAiIiAgICAgICAgICAiIiAgICAgICAgICAiIgorZm9yIGNybGYgaW4gdHJ1ZSBmYWxzZSBpbnB1dAorZG8KKwljb21taXRfY2hrX3dybk5OTyAtdGV4dCAiIiAgICAgICRjcmxmICAgIiIgICAgICAgICIiICAgICAgICAiIiAgICAgICAgICAiIiAgICAgICAgICAiIgorCWNvbW1pdF9jaGtfd3JuTk5PIC10ZXh0IGxmICAgICAgJGNybGYgICAiIiAgICAgICAgIiIgICAgICAgICIiICAgICAgICAgICIiICAgICAgICAgICIiCisJY29tbWl0X2Noa193cm5OTk8gLXRleHQgY3JsZiAgICAkY3JsZiAgICIiICAgICAgICAiIiAgICAgICAgIiIgICAgICAgICAgIiIgICAgICAgICAgIiIKKwljb21taXRfY2hrX3dybk5OTyAiIiAgICBsZiAgICAgICRjcmxmICAgIiIgICAgICAgQ1JMRl9MRiAgICBDUkxGX0xGICAgICAgIiIgICAgICAgICBDUkxGX0xGCisJY29tbWl0X2Noa193cm5OTk8gIiIgICAgY3JsZiAgICAkY3JsZiAgIExGX0NSTEYgICAiIiAgICAgICAgTEZfQ1JMRiAgICAgTEZfQ1JMRiAgICAgIiIKKwljb21taXRfY2hrX3dybk5OTyBhdXRvICBsZiAgICAJJGNybGYgICAiIiAgICAgICAgIiIgICAgICAgICIiICAgICAgICAgICIiICAgICAgICAgICIiCisJY29tbWl0X2Noa193cm5OTk8gYXV0byAgY3JsZiAgCSRjcmxmICAgTEZfQ1JMRiAgICIiICAgICAgICAiIiAgICAgICAgICAiIiAgICAgICAgICAiIgorCWNvbW1pdF9jaGtfd3JuTk5PIHRleHQgIGxmICAgIAkkY3JsZiAgICIiICAgICAgIENSTEZfTEYgICAgQ1JMRl9MRiAgICAgIiIgICAgICAgICAgQ1JMRl9MRgorCWNvbW1pdF9jaGtfd3JuTk5PIHRleHQgIGNybGYgIAkkY3JsZiAgIExGX0NSTEYgICAiIiAgICAgICAgTEZfQ1JMRiAgICAgTEZfQ1JMRiAgICAgIiIKK2RvbmUKKworY29tbWl0X2Noa193cm5OTk8gInRleHQiICAiIiAgICAgIGZhbHNlICAgIiRXSUxDIiAgICIkV0lDTCIgICAiJFdBTUlYIiAgICAiJFdJTEMiICAgICAiJFdJQ0wiCitjb21taXRfY2hrX3dybk5OTyAidGV4dCIgICIiICAgICAgdHJ1ZSAgICBMRl9DUkxGICAgIiIgICAgICAgIExGX0NSTEYgICAgIExGX0NSTEYgICAgICIiCitjb21taXRfY2hrX3dybk5OTyAidGV4dCIgICIiICAgICAgaW5wdXQgICAiIiAgICAgICAgQ1JMRl9MRiAgIENSTEZfTEYgICAgICIiICAgICAgICAgIENSTEZfTEYKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IE5OTyBhbmQgY2xlYW51cCcgJworCWdpdCBjb21taXQgLW0gImNvbW1pdCBmaWxlcyBvbiB0b3Agb2YgTk5PIiAmJgorCXJtIC1mICoudHh0ICYmCisJZ2l0IC1jIGNvcmUuYXV0b2NybGY9ZmFsc2UgcmVzZXQgLS1oYXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBlbXB0eSBnaXRhdHRyaWJ1ZXMnICcKKwljaGVja19maWxlc19pbl9yZXBvIGZhbHNlICIiICAgICAgTEYgQ1JMRiBDUkxGX21peF9MRiBMRl9taXhfQ1IgQ1JMRl9udWwgJiYKKwljaGVja19maWxlc19pbl9yZXBvIHRydWUgICIiICAgICAgTEYgTEYgICBMRiAgICAgICAgICBMRl9taXhfQ1IgQ1JMRl9udWwgJiYKKwljaGVja19maWxlc19pbl9yZXBvIGlucHV0ICIiICAgICAgTEYgTEYgICBMRiAgICAgICAgICBMRl9taXhfQ1IgQ1JMRl9udWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IHRleHQ9YXV0bycgJworCWNoZWNrX2ZpbGVzX2luX3JlcG8gZmFsc2UgImF1dG8iICBMRiBMRiAgIExGICAgICAgICAgIExGX21peF9DUiBDUkxGX251bCAmJgorCWNoZWNrX2ZpbGVzX2luX3JlcG8gdHJ1ZSAgImF1dG8iICBMRiBMRiAgIExGICAgICAgICAgIExGX21peF9DUiBDUkxGX251bCAmJgorCWNoZWNrX2ZpbGVzX2luX3JlcG8gaW5wdXQgImF1dG8iICBMRiBMRiAgIExGICAgICAgICAgIExGX21peF9DUiBDUkxGX251bAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgdGV4dCcgJworCWNoZWNrX2ZpbGVzX2luX3JlcG8gZmFsc2UgInRleHQiICBMRiBMRiAgIExGICAgICAgICAgIExGX21peF9DUiBMRl9udWwgJiYKKwljaGVja19maWxlc19pbl9yZXBvIHRydWUgICJ0ZXh0IiAgTEYgTEYgICBMRiAgICAgICAgICBMRl9taXhfQ1IgTEZfbnVsICYmCisJY2hlY2tfZmlsZXNfaW5fcmVwbyBpbnB1dCAidGV4dCIgIExGIExGICAgTEYgICAgICAgICAgTEZfbWl4X0NSIExGX251bAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLXRleHQnICcKKwljaGVja19maWxlc19pbl9yZXBvIGZhbHNlICItdGV4dCIgTEYgQ1JMRiBDUkxGX21peF9MRiBMRl9taXhfQ1IgQ1JMRl9udWwgJiYKKwljaGVja19maWxlc19pbl9yZXBvIHRydWUgICItdGV4dCIgTEYgQ1JMRiBDUkxGX21peF9MRiBMRl9taXhfQ1IgQ1JMRl9udWwgJiYKKwljaGVja19maWxlc19pbl9yZXBvIGlucHV0ICItdGV4dCIgTEYgQ1JMRiBDUkxGX21peF9MRiBMRl9taXhfQ1IgQ1JMRl9udWwKKycKKworZm9yIGNybGYgaW4gdHJ1ZSBmYWxzZSBpbnB1dAorZG8KKwkjICAgICAgICAgICAgICAgICBhdHRyICBhZW9sICAgICAgICAgICBMRiAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgQ1JMRk5VTAorCWNoZWNrX2luX3JlcG9fTk5PICIiICAgICIiICAgICAkY3JsZiAgIExGICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICBDUkxGX251bAorCWNoZWNrX2luX3JlcG9fTk5PIC10ZXh0ICIiICAgICAkY3JsZiAgIExGICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICBDUkxGX251bAorCWNoZWNrX2luX3JlcG9fTk5PIC10ZXh0IGxmICAgICAkY3JsZiAgIExGICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICBDUkxGX251bAorCWNoZWNrX2luX3JlcG9fTk5PIC10ZXh0IGNybGYgICAkY3JsZiAgIExGICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICBDUkxGX251bAorCWNoZWNrX2luX3JlcG9fTk5PIGF1dG8gICIiICAgICAkY3JsZiAgIExGICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICBDUkxGX251bAorCWNoZWNrX2luX3JlcG9fTk5PIGF1dG8gIGxmICAgICAkY3JsZiAgIExGICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICBDUkxGX251bAorCWNoZWNrX2luX3JlcG9fTk5PIGF1dG8gIGNybGYgICAkY3JsZiAgIExGICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICBDUkxGX251bAorCWNoZWNrX2luX3JlcG9fTk5PIHRleHQgICIiICAgICAkY3JsZiAgIExGICBMRiAgICBMRiAgICAgICAgICAgTEZfbWl4X0NSICBMRl9udWwKKwljaGVja19pbl9yZXBvX05OTyB0ZXh0ICBsZiAgICAgJGNybGYgICBMRiAgTEYgICAgTEYgICAgICAgICAgIExGX21peF9DUiAgTEZfbnVsCisJY2hlY2tfaW5fcmVwb19OTk8gdGV4dCAgY3JsZiAgICRjcmxmICAgTEYgIExGICAgIExGICAgICAgICAgICBMRl9taXhfQ1IgIExGX251bAorZG9uZQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hlY2sgaG93IGZpbGVzIGluIHRoZSByZXBvIGFyZSBjaGFuZ2VkIHdoZW4gdGhleSBhcmUgY2hlY2tlZCBvdXQKKyMgSG93IHRvIHJlYWQgdGhlIHRhYmxlIGJlbG93OgorIyAtIGNoZWNrb3V0X2ZpbGVzIHdpbGwgY2hlY2sgbXVsdGlwbGUgZmlsZXMgd2l0aCBhIGNvbWJpbmF0aW9uIG9mIHNldHRpbmdzCisjICAgYW5kIGF0dHJpYnV0ZXMgKGNvcmUuYXV0b2NybGY9aW5wdXQgaXMgZm9yYmlkZGVuIHdpdGggY29yZS5lb2w9Y3JsZikKKyMKKyMgLSBwYXJhbWV0ZXIgJDEgCTogdGV4dCBpbiAuZ2l0YXR0cmlidXRzICAiIiAoZW1wdHkpIHwgYXV0byB8IHRleHQgfCAtdGV4dAorIyAtIHBhcmFtZXRlciAkMiAJOiBpZGVudCAgICAgICAgICAgICAgICAgICIiIHwgaSAoaSA9PSBpZGVudCkKKyMgLSBwYXJhbWV0ZXIgJDMgCTogZW9sIGluIC5naXRhdHRyaWJ1dHMgICAiIiAoZW1wdHkpIHwgbGYgfCBjcmxmCisjIC0gcGFyYW1ldGVyICQ0IAk6IGNvcmUuYXV0b2NybGYgICAgICAgICAgZmFsc2UgfCB0cnVlIHwgaW5wdXQKKyMgLSBwYXJhbWV0ZXIgJDUgCTogY29yZS5lb2wgICAgICAgICAgICAgICAiIiB8IGxmIHwgY3JsZiB8ICJuYXRpdmUiCisjIC0gcGFyYW1ldGVyICQ2IAk6IHJlZmVyZW5jZSBmb3IgYSBmaWxlIHdpdGggb25seSBMRiBpbiB0aGUgcmVwbworIyAtIHBhcmFtZXRlciAkNyAJOiByZWZlcmVuY2UgZm9yIGEgZmlsZSB3aXRoIG9ubHkgQ1JMRiBpbiB0aGUgcmVwbworIyAtIHBhcmFtZXRlciAkOCAJOiByZWZlcmVuY2UgZm9yIGEgZmlsZSB3aXRoIG1peGVkIExGIGFuZCBDUkxGIGluIHRoZSByZXBvCisjIC0gcGFyYW1ldGVyICQ5IAk6IHJlZmVyZW5jZSBmb3IgYSBmaWxlIHdpdGggTEYgYW5kIENSIGluIHRoZSByZXBvCisjIC0gcGFyYW1ldGVyICQxMCA6IHJlZmVyZW5jZSBmb3IgYSBmaWxlIHdpdGggQ1JMRiBhbmQgYSBOVUwgKHNob3VsZCBiZSBoYW5kbGVkIGFzIGJpbmFyeSB3aGVuIGF1dG8pCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgTkFUSVZFX0NSTEYKK3RoZW4KK01JWF9DUkxGX0xGPUNSTEYKK01JWF9MRl9DUj1DUkxGX21peF9DUgorTkw9Q1JMRgorTEZOVUw9Q1JMRl9udWwKK2Vsc2UKK01JWF9DUkxGX0xGPUNSTEZfbWl4X0xGCitNSVhfTEZfQ1I9TEZfbWl4X0NSCitOTD1MRgorTEZOVUw9TEZfbnVsCitmaQorZXhwb3J0IENSTEZfTUlYX0xGX0NSIE1JWCBOTAorCisjIFNhbWUgaGFuZGxpbmcgd2l0aCBhbmQgd2l0aG91dCBpZGVudAorZm9yIGlkIGluICIiIGlkZW50CitkbworCWZvciBjZW9sIGluIGxmIGNybGYgbmF0aXZlCisJZG8KKwkJZm9yIGNybGYgaW4gdHJ1ZSBmYWxzZSBpbnB1dAorCQlkbworCQkJIyAtdGV4dCBvdmVycmlkZXMgY29yZS5hdXRvY3JsZiBhbmQgY29yZS5lb2wKKwkJCSMgdGV4dCBhbmQgZW9sPWNybGYgb3IgZW9sPWxmIG92ZXJyaWRlIGNvcmUuYXV0b2NybGYgYW5kIGNvcmUuZW9sCisJCQljaGVja291dF9maWxlcyAtdGV4dCAiJGlkIiAiIiAgICAgIiRjcmxmIiAiJGNlb2wiICBMRiAgICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorCQkJY2hlY2tvdXRfZmlsZXMgLXRleHQgIiRpZCIgImxmIiAgICIkY3JsZiIgIiRjZW9sIiAgTEYgICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKKwkJCWNoZWNrb3V0X2ZpbGVzIC10ZXh0ICIkaWQiICJjcmxmIiAiJGNybGYiICIkY2VvbCIgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCisJCQkjIHRleHQKKwkJCWNoZWNrb3V0X2ZpbGVzIHRleHQgICIkaWQiICJsZiIgICAiJGNybGYiICIkY2VvbCIgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCisJCQljaGVja291dF9maWxlcyB0ZXh0ICAiJGlkIiAiY3JsZiIgIiRjcmxmIiAiJGNlb2wiICBDUkxGICBDUkxGICBDUkxGICAgICAgICAgQ1JMRl9taXhfQ1IgIENSTEZfbnVsCisJCQkjIGN1cnJlbnRseSB0aGUgc2FtZSBhcyB0ZXh0LCBlb2w9WFhYCisJCQljaGVja291dF9maWxlcyBhdXRvICAiJGlkIiAibGYiICAgIiRjcmxmIiAiJGNlb2wiICBMRiAgICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorCQkJY2hlY2tvdXRfZmlsZXMgYXV0byAgIiRpZCIgImNybGYiICIkY3JsZiIgIiRjZW9sIiAgQ1JMRiAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKKwkJZG9uZQorCisJCSMgY29yZS5hdXRvY3JsZiBmYWxzZSwgZGlmZmVyZW50IGNvcmUuZW9sCisJCWNoZWNrb3V0X2ZpbGVzICAgIiIgICAgIiRpZCIgIiIgICAgIGZhbHNlICAgIiRjZW9sIiAgTEYgICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKKwkJIyBjb3JlLmF1dG9jcmxmIHRydWUKKwkJY2hlY2tvdXRfZmlsZXMgICAiIiAgICAiJGlkIiAiIiAgICAgdHJ1ZSAgICAiJGNlb2wiICBDUkxGICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorCQkjIHRleHQ6IGNvcmUuYXV0b2NybGYgPSB0cnVlIG92ZXJyaWRlcyBjb3JlLmVvbAorCQljaGVja291dF9maWxlcyAgIGF1dG8gICIkaWQiICIiICAgICB0cnVlICAgICIkY2VvbCIgIENSTEYgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCisJCWNoZWNrb3V0X2ZpbGVzICAgdGV4dCAgIiRpZCIgIiIgICAgIHRydWUgICAgIiRjZW9sIiAgQ1JMRiAgQ1JMRiAgQ1JMRiAgICAgICAgIENSTEZfbWl4X0NSICBDUkxGX251bAorCQkjIHRleHQ6IGNvcmUuYXV0b2NybGYgPSBpbnB1dCBvdmVycmlkZXMgY29yZS5lb2wKKwkJY2hlY2tvdXRfZmlsZXMgICB0ZXh0ICAiJGlkIiAiIiAgICAgaW5wdXQgICAiJGNlb2wiICBMRiAgICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorCQljaGVja291dF9maWxlcyAgIGF1dG8gICIkaWQiICIiICAgICBpbnB1dCAgICIkY2VvbCIgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCisJCSMgdGV4dD1hdXRvICsgZW9sPVhYWAorCWRvbmUKKwkjIHRleHQ6IGNvcmUuYXV0b2NybGY9ZmFsc2UgdXNlcyBjb3JlLmVvbAorCWNoZWNrb3V0X2ZpbGVzICAgICB0ZXh0ICAiJGlkIiAiIiAgICAgZmFsc2UgICBjcmxmICAgICBDUkxGICBDUkxGICBDUkxGICAgICAgICAgQ1JMRl9taXhfQ1IgIENSTEZfbnVsCisJY2hlY2tvdXRfZmlsZXMgICAgIHRleHQgICIkaWQiICIiICAgICBmYWxzZSAgIGxmICAgICAgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCisJIyB0ZXh0OiBjb3JlLmF1dG9jcmxmPWZhbHNlIGFuZCBjb3JlLmVvbCB1bnNldChvciBuYXRpdmUpIHVzZXMgbmF0aXZlIGVvbAorCWNoZWNrb3V0X2ZpbGVzICAgICB0ZXh0ICAiJGlkIiAiIiAgICAgZmFsc2UgICAiIiAgICAgICAkTkwgICBDUkxGICAkTUlYX0NSTEZfTEYgJE1JWF9MRl9DUiAgICRMRk5VTAorCWNoZWNrb3V0X2ZpbGVzICAgICB0ZXh0ICAiJGlkIiAiIiAgICAgZmFsc2UgICBuYXRpdmUgICAkTkwgICBDUkxGICAkTUlYX0NSTEZfTEYgJE1JWF9MRl9DUiAgICRMRk5VTAorCSMgYXV0bzogY29yZS5hdXRvY3JsZj1mYWxzZSBhbmQgY29yZS5lb2wgdW5zZXQob3IgbmF0aXZlKSB1c2VzIG5hdGl2ZSBlb2wKKwljaGVja291dF9maWxlcyAgICAgYXV0byAgIiRpZCIgIiIgICAgIGZhbHNlICAgIiIgICAgICAgJE5MICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKKwljaGVja291dF9maWxlcyAgICAgYXV0byAgIiRpZCIgIiIgICAgIGZhbHNlICAgbmF0aXZlICAgJE5MICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKK2RvbmUKKworIyBTaG91bGQgYmUgdGhlIGxhc3QgdGVzdCBjYXNlOiByZW1vdmUgc29tZSBmaWxlcyBmcm9tIHRoZSB3b3JrdHJlZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1lb2wgLWQgLXonICcKKwlybSBjcmxmX2ZhbHNlX2F0dHJfX0NSTEYudHh0IGNybGZfZmFsc2VfYXR0cl9fQ1JMRl9taXhfTEYudHh0IGNybGZfZmFsc2VfYXR0cl9fTEYudHh0IC5naXRhdHRyaWJ1dGVzICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWkvY3JsZiB3LyBjcmxmX2ZhbHNlX2F0dHJfX0NSTEYudHh0CisJaS9sZiB3LyAuZ2l0YXR0cmlidXRlcworCWkvbGYgdy8gY3JsZl9mYWxzZV9hdHRyX19MRi50eHQKKwlpL21peGVkIHcvIGNybGZfZmFsc2VfYXR0cl9fQ1JMRl9taXhfTEYudHh0CisJRU9GCisJZ2l0IGxzLWZpbGVzIC0tZW9sIC1kIHwKKwlzZWQgLWUgInMhYXR0ci9bXgldKiEhZyIgLWUgInMvCS8gL2ciIC1lICJzLyAgKi8gL2ciIHwKKwlzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAyOC13b3JraW5nLXRyZWUtZW5jb2Rpbmcuc2ggYi90L3QwMDI4LXdvcmtpbmctdHJlZS1lbmNvZGluZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZmM0ZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDAyOC13b3JraW5nLXRyZWUtZW5jb2Rpbmcuc2gKQEAgLTAsMCArMSwzMjIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd3b3JraW5nLXRyZWUtZW5jb2RpbmcgY29udmVyc2lvbiB2aWEgZ2l0YXR0cmlidXRlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK0dJVF9UUkFDRV9XT1JLSU5HX1RSRUVfRU5DT0RJTkc9MSAmJiBleHBvcnQgR0lUX1RSQUNFX1dPUktJTkdfVFJFRV9FTkNPRElORworCit0ZXN0X2xhenlfcHJlcmVxIE5PX1VURjE2X0JPTSAnCisJdGVzdCAkKHByaW50ZiBhYmMgfCBpY29udiAtZiBVVEYtOCAtdCBVVEYtMTYgfCB3YyAtYykgPSA2CisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgTk9fVVRGMzJfQk9NICcKKwl0ZXN0ICQocHJpbnRmIGFiYyB8IGljb252IC1mIFVURi04IC10IFVURi0zMiB8IHdjIC1jKSA9IDEyCisnCisKK3dyaXRlX3V0ZjE2ICgpIHsKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIE5PX1VURjE2X0JPTQorCXRoZW4KKwkJcHJpbnRmICdcMzc2XDM3NycKKwlmaSAmJgorCWljb252IC1mIFVURi04IC10IFVURi0xNgorfQorCit3cml0ZV91dGYzMiAoKSB7CisJaWYgdGVzdF9oYXZlX3ByZXJlcSBOT19VVEYzMl9CT00KKwl0aGVuCisJCXByaW50ZiAnXDBcMFwzNzZcMzc3JworCWZpICYmCisJaWNvbnYgLWYgVVRGLTggLXQgVVRGLTMyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgZmlsZXMnICcKKwlnaXQgY29uZmlnIGNvcmUuZW9sIGxmICYmCisKKwl0ZXh0PSJoYWxsbyB0aGVyZSFcbmNhbiB5b3UgcmVhZCBtZT8iICYmCisJZWNobyAiKi51dGYxNiB0ZXh0IHdvcmtpbmctdHJlZS1lbmNvZGluZz11dGYtMTYiID4uZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gIioudXRmMTZsZWJvbSB0ZXh0IHdvcmtpbmctdHJlZS1lbmNvZGluZz1VVEYtMTZMRS1CT00iID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwlwcmludGYgIiR0ZXh0IiA+dGVzdC51dGY4LnJhdyAmJgorCXByaW50ZiAiJHRleHQiIHwgd3JpdGVfdXRmMTYgPnRlc3QudXRmMTYucmF3ICYmCisJcHJpbnRmICIkdGV4dCIgfCB3cml0ZV91dGYzMiA+dGVzdC51dGYzMi5yYXcgJiYKKwlwcmludGYgIlwzNzdcMzc2IiAgICAgICAgICAgICAgICAgICAgICAgICA+dGVzdC51dGYxNmxlYm9tLnJhdyAmJgorCXByaW50ZiAiJHRleHQiIHwgaWNvbnYgLWYgVVRGLTggLXQgVVRGLTE2TEUgPj50ZXN0LnV0ZjE2bGVib20ucmF3ICYmCisKKwkjIExpbmUgZW5kaW5nIHRlc3RzCisJcHJpbnRmICJvbmVcbnR3b1xudGhyZWVcbiIgPmxmLnV0ZjgucmF3ICYmCisJcHJpbnRmICJvbmVcclxudHdvXHJcbnRocmVlXHJcbiIgPmNybGYudXRmOC5yYXcgJiYKKworCSMgQk9NIHRlc3RzCisJcHJpbnRmICJcMGFcMGJcMGMiICAgICAgICAgICAgICAgICAgICAgICAgID5ub2JvbS51dGYxNmJlLnJhdyAmJgorCXByaW50ZiAiYVwwYlwwY1wwIiAgICAgICAgICAgICAgICAgICAgICAgICA+bm9ib20udXRmMTZsZS5yYXcgJiYKKwlwcmludGYgIlwzNzZcMzc3XDBhXDBiXDBjIiAgICAgICAgICAgICAgICAgPmJlYm9tLnV0ZjE2YmUucmF3ICYmCisJcHJpbnRmICJcMzc3XDM3NmFcMGJcMGNcMCIgICAgICAgICAgICAgICAgID5sZWJvbS51dGYxNmxlLnJhdyAmJgorCXByaW50ZiAiXDBcMFwwYVwwXDBcMGJcMFwwXDBjIiAgICAgICAgICAgICA+bm9ib20udXRmMzJiZS5yYXcgJiYKKwlwcmludGYgImFcMFwwXDBiXDBcMFwwY1wwXDBcMCIgICAgICAgICAgICAgPm5vYm9tLnV0ZjMybGUucmF3ICYmCisJcHJpbnRmICJcMFwwXDM3NlwzNzdcMFwwXDBhXDBcMFwwYlwwXDBcMGMiID5iZWJvbS51dGYzMmJlLnJhdyAmJgorCXByaW50ZiAiXDM3N1wzNzZcMFwwYVwwXDBcMGJcMFwwXDBjXDBcMFwwIiA+bGVib20udXRmMzJsZS5yYXcgJiYKKworCSMgQWRkIG9ubHkgVVRGLTE2IGZpbGUsIHdlIHdpbGwgYWRkIHRoZSBVVEYtMzIgZmlsZSBsYXRlcgorCWNwIHRlc3QudXRmMTYucmF3IHRlc3QudXRmMTYgJiYKKwljcCB0ZXN0LnV0ZjMyLnJhdyB0ZXN0LnV0ZjMyICYmCisJY3AgdGVzdC51dGYxNmxlYm9tLnJhdyB0ZXN0LnV0ZjE2bGVib20gJiYKKwlnaXQgYWRkIC5naXRhdHRyaWJ1dGVzIHRlc3QudXRmMTYgdGVzdC51dGYxNmxlYm9tICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vuc3VyZSBVVEYtOCBpcyBzdG9yZWQgaW4gR2l0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiB0ZXN0LnV0ZjE2LmdpdCIgJiYKKworCWdpdCBjYXQtZmlsZSAtcCA6dGVzdC51dGYxNiA+dGVzdC51dGYxNi5naXQgJiYKKwl0ZXN0X2NtcF9iaW4gdGVzdC51dGY4LnJhdyB0ZXN0LnV0ZjE2LmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1lbmNvZGUgdG8gVVRGLTE2IG9uIGNoZWNrb3V0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiB0ZXN0LnV0ZjE2LnJhdyIgJiYKKworCXJtIHRlc3QudXRmMTYgJiYKKwlnaXQgY2hlY2tvdXQgdGVzdC51dGYxNiAmJgorCXRlc3RfY21wX2JpbiB0ZXN0LnV0ZjE2LnJhdyB0ZXN0LnV0ZjE2CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlLWVuY29kZSB0byBVVEYtMTYtTEUtQk9NIG9uIGNoZWNrb3V0JyAnCisJcm0gdGVzdC51dGYxNmxlYm9tICYmCisJZ2l0IGNoZWNrb3V0IHRlc3QudXRmMTZsZWJvbSAmJgorCXRlc3RfY21wX2JpbiB0ZXN0LnV0ZjE2bGVib20ucmF3IHRlc3QudXRmMTZsZWJvbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayAkR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXMgc3VwcG9ydCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgdGVzdC51dGYzMi5naXQiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisKKwllY2hvICIqLnV0ZjMyIHRleHQgd29ya2luZy10cmVlLWVuY29kaW5nPXV0Zi0zMiIgPi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisJZ2l0IGFkZCB0ZXN0LnV0ZjMyICYmCisKKwlnaXQgY2F0LWZpbGUgLXAgOnRlc3QudXRmMzIgPnRlc3QudXRmMzIuZ2l0ICYmCisJdGVzdF9jbXBfYmluIHRlc3QudXRmOC5yYXcgdGVzdC51dGYzMi5naXQKKycKKworZm9yIGkgaW4gMTYgMzIKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2sgcHJvaGliaXRlZCBVVEYtJHtpfSBCT00iICcKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisKKwkJZWNobyAiKi51dGYke2l9YmUgdGV4dCB3b3JraW5nLXRyZWUtZW5jb2Rpbmc9dXRmLSR7aX1iZSIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCQllY2hvICIqLnV0ZiR7aX1sZSB0ZXh0IHdvcmtpbmctdHJlZS1lbmNvZGluZz11dGYtJHtpfUxFIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisKKwkJIyBIZXJlIHdlIGFkZCBhIFVURi0xNiAocmVzcC4gVVRGLTMyKSBmaWxlcyB3aXRoIEJPTSAoYmlnL2xpdHRsZS1lbmRpYW4pCisJCSMgYnV0IHdlIHRlbGwgR2l0IHRvIHRyZWF0IGl0IGFzIFVURi0xNkJFL1VURi0xNkxFIChyZXNwLiBVVEYtMzIpLgorCQkjIEluIHRoZXNlIGNhc2VzIHRoZSBCT00gaXMgcHJvaGliaXRlZC4KKwkJY3AgYmVib20udXRmJHtpfWJlLnJhdyBiZWJvbS51dGYke2l9YmUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBiZWJvbS51dGYke2l9YmUgMj5lcnIub3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgImZhdGFsOiBCT00gaXMgcHJvaGliaXRlZCAuKiB1dGYtJHtpfWJlIiBlcnIub3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgInVzZSBVVEYtJHtpfSBhcyB3b3JraW5nLXRyZWUtZW5jb2RpbmciIGVyci5vdXQgJiYKKworCQljcCBsZWJvbS51dGYke2l9bGUucmF3IGxlYm9tLnV0ZiR7aX1iZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGxlYm9tLnV0ZiR7aX1iZSAyPmVyci5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiZmF0YWw6IEJPTSBpcyBwcm9oaWJpdGVkIC4qIHV0Zi0ke2l9YmUiIGVyci5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAidXNlIFVURi0ke2l9IGFzIHdvcmtpbmctdHJlZS1lbmNvZGluZyIgZXJyLm91dCAmJgorCisJCWNwIGJlYm9tLnV0ZiR7aX1iZS5yYXcgYmVib20udXRmJHtpfWxlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgYmVib20udXRmJHtpfWxlIDI+ZXJyLm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJmYXRhbDogQk9NIGlzIHByb2hpYml0ZWQgLiogdXRmLSR7aX1MRSIgZXJyLm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJ1c2UgVVRGLSR7aX0gYXMgd29ya2luZy10cmVlLWVuY29kaW5nIiBlcnIub3V0ICYmCisKKwkJY3AgbGVib20udXRmJHtpfWxlLnJhdyBsZWJvbS51dGYke2l9bGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBsZWJvbS51dGYke2l9bGUgMj5lcnIub3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgImZhdGFsOiBCT00gaXMgcHJvaGliaXRlZCAuKiB1dGYtJHtpfUxFIiBlcnIub3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgInVzZSBVVEYtJHtpfSBhcyB3b3JraW5nLXRyZWUtZW5jb2RpbmciIGVyci5vdXQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjayByZXF1aXJlZCBVVEYtJHtpfSBCT00iICcKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisKKwkJZWNobyAiKi51dGYke2l9IHRleHQgd29ya2luZy10cmVlLWVuY29kaW5nPXV0Zi0ke2l9IiA+Pi5naXRhdHRyaWJ1dGVzICYmCisKKwkJY3Agbm9ib20udXRmJHtpfWJlLnJhdyBub2JvbS51dGYke2l9ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgbm9ib20udXRmJHtpfSAyPmVyci5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiZmF0YWw6IEJPTSBpcyByZXF1aXJlZCAuKiB1dGYtJHtpfSIgZXJyLm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJ1c2UgVVRGLSR7aX1CRSBvciBVVEYtJHtpfUxFIiBlcnIub3V0ICYmCisKKwkJY3Agbm9ib20udXRmJHtpfWxlLnJhdyBub2JvbS51dGYke2l9ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgbm9ib20udXRmJHtpfSAyPmVyci5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiZmF0YWw6IEJPTSBpcyByZXF1aXJlZCAuKiB1dGYtJHtpfSIgZXJyLm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJ1c2UgVVRGLSR7aX1CRSBvciBVVEYtJHtpfUxFIiBlcnIub3V0CisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZW9sIGNvbnZlcnNpb24gZm9yIFVURi0ke2l9IGVuY29kZWQgZmlsZXMgb24gY2hlY2tvdXQiICcKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBjcmxmLnV0ZiR7aX0ucmF3IGxmLnV0ZiR7aX0ucmF3IiAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRF4iICYmCisKKwkJY2F0IGxmLnV0ZjgucmF3IHwgd3JpdGVfdXRmJHtpfSA+bGYudXRmJHtpfS5yYXcgJiYKKwkJY2F0IGNybGYudXRmOC5yYXcgfCB3cml0ZV91dGYke2l9ID5jcmxmLnV0ZiR7aX0ucmF3ICYmCisJCWNwIGNybGYudXRmJHtpfS5yYXcgZW9sLnV0ZiR7aX0gJiYKKworCQljYXQgPmV4cGVjdEluZGV4TEYgPDwtRU9GICYmCisJCQlpL2xmICAgIHcvLXRleHQgYXR0ci90ZXh0ICAgICAgICAgICAgIAllb2wudXRmJHtpfQorCQlFT0YKKworCQlnaXQgYWRkIGVvbC51dGYke2l9ICYmCisJCWdpdCBjb21taXQgLW0gZW9sICYmCisKKwkJIyBVVEYtJHtpfSB3aXRoIENSTEYgKFdpbmRvd3MgbGluZSBlbmRpbmdzKQorCQlybSBlb2wudXRmJHtpfSAmJgorCQlnaXQgLWMgY29yZS5lb2w9Y3JsZiBjaGVja291dCBlb2wudXRmJHtpfSAmJgorCQl0ZXN0X2NtcF9iaW4gY3JsZi51dGYke2l9LnJhdyBlb2wudXRmJHtpfSAmJgorCisJCSMgQWx0aG91Z2ggdGhlIGZpbGUgaGFzIENSTEYgaW4gdGhlIHdvcmtpbmcgdHJlZSwKKwkJIyBlbnN1cmUgTEYgaW4gdGhlIGluZGV4CisJCWdpdCBscy1maWxlcyAtLWVvbCBlb2wudXRmJHtpfSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdEluZGV4TEYgYWN0dWFsICYmCisKKwkJIyBVVEYtJHtpfSB3aXRoIExGIChVbml4IGxpbmUgZW5kaW5ncykKKwkJcm0gZW9sLnV0ZiR7aX0gJiYKKwkJZ2l0IC1jIGNvcmUuZW9sPWxmIGNoZWNrb3V0IGVvbC51dGYke2l9ICYmCisJCXRlc3RfY21wX2JpbiBsZi51dGYke2l9LnJhdyBlb2wudXRmJHtpfSAmJgorCisJCSMgVGhlIGZpbGUgTEYgaW4gdGhlIHdvcmtpbmcgdHJlZSwgZW5zdXJlIExGIGluIHRoZSBpbmRleAorCQlnaXQgbHMtZmlsZXMgLS1lb2wgZW9sLnV0ZiR7aX0gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RJbmRleExGIGFjdHVhbAorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdW5zdXBwb3J0ZWQgZW5jb2RpbmdzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisKKwllY2hvICIqLnNldCB0ZXh0IHdvcmtpbmctdHJlZS1lbmNvZGluZyIgPi5naXRhdHRyaWJ1dGVzICYmCisJcHJpbnRmICJzZXQiID50LnNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgdC5zZXQgMj5lcnIub3V0ICYmCisJdGVzdF9pMThuZ3JlcCAidHJ1ZS9mYWxzZSBhcmUgbm8gdmFsaWQgd29ya2luZy10cmVlLWVuY29kaW5ncyIgZXJyLm91dCAmJgorCisJZWNobyAiKi51bnNldCB0ZXh0IC13b3JraW5nLXRyZWUtZW5jb2RpbmciID4uZ2l0YXR0cmlidXRlcyAmJgorCXByaW50ZiAidW5zZXQiID50LnVuc2V0ICYmCisJZ2l0IGFkZCB0LnVuc2V0ICYmCisKKwllY2hvICIqLmVtcHR5IHRleHQgd29ya2luZy10cmVlLWVuY29kaW5nPSIgPi5naXRhdHRyaWJ1dGVzICYmCisJcHJpbnRmICJlbXB0eSIgPnQuZW1wdHkgJiYKKwlnaXQgYWRkIHQuZW1wdHkgJiYKKworCWVjaG8gIiouZ2FyYmFnZSB0ZXh0IHdvcmtpbmctdHJlZS1lbmNvZGluZz1nYXJiYWdlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlwcmludGYgImdhcmJhZ2UiID50LmdhcmJhZ2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIHQuZ2FyYmFnZSAyPmVyci5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJmYWlsZWQgdG8gZW5jb2RlIiBlcnIub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIGlmIGVuY29kaW5nIHJvdW5kIHRyaXAgaXMgbm90IHRoZSBzYW1lIGR1cmluZyByZWZyZXNoJyAnCisJQkVGT1JFX1NUQVRFPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAkQkVGT1JFX1NUQVRFIiAmJgorCisJIyBBZGQgYW5kIGNvbW1pdCBhIFVURi0xNiBmaWxlIGJ1dCBza2lwIHRoZSAid29ya2luZy10cmVlLWVuY29kaW5nIgorCSMgZmlsdGVyLiBDb25zZXF1ZW50bHksIHRoZSBpbi1yZXBvIHJlcHJlc2VudGF0aW9uIGlzIFVURi0xNiBhbmQgbm90CisJIyBVVEYtOC4gVGhpcyBzaW11bGF0ZXMgYSBHaXQgdmVyc2lvbiB0aGF0IGhhcyBubyB3b3JraW5nIHRyZWUgZW5jb2RpbmcKKwkjIHN1cHBvcnQuCisJZWNobyAiKi51dGYxNmxlIHRleHQgd29ya2luZy10cmVlLWVuY29kaW5nPXV0Zi0xNmxlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJoYWxsbyIgPm5vbnNlbnNlLnV0ZjE2bGUgJiYKKwlURVNUX0hBU0g9JChnaXQgaGFzaC1vYmplY3QgLS1uby1maWx0ZXJzIC13IG5vbnNlbnNlLnV0ZjE2bGUpICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJFRFU1RfSEFTSCBub25zZW5zZS51dGYxNmxlICYmCisJQ09NTUlUPSQoZ2l0IGNvbW1pdC10cmVlIC1wICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAtbSAicGxhaW4gY29tbWl0IiAkKGdpdCB3cml0ZS10cmVlKSkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkQ09NTUlUICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgSEVBRF4gMj5lcnIub3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiZXJyb3I6IC4qIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OiIgZXJyLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBpZiBlbmNvZGluZyBnYXJiYWdlIGlzIGFscmVhZHkgaW4gR2l0JyAnCisJQkVGT1JFX1NUQVRFPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAkQkVGT1JFX1NUQVRFIiAmJgorCisJIyBTa2lwIHRoZSBVVEYtMTYgZmlsdGVyIGZvciB0aGUgYWRkZWQgZmlsZQorCSMgVGhpcyBzaW11bGF0ZXMgYSBHaXQgdmVyc2lvbiB0aGF0IGhhcyBubyBjaGVja291dEVuY29kaW5nIHN1cHBvcnQKKwljcCBub2JvbS51dGYxNmJlLnJhdyBub25zZW5zZS51dGYxNiAmJgorCVRFU1RfSEFTSD0kKGdpdCBoYXNoLW9iamVjdCAtLW5vLWZpbHRlcnMgLXcgbm9uc2Vuc2UudXRmMTYpICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJFRFU1RfSEFTSCBub25zZW5zZS51dGYxNiAmJgorCUNPTU1JVD0kKGdpdCBjb21taXQtdHJlZSAtcCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgLW0gInBsYWluIGNvbW1pdCIgJChnaXQgd3JpdGUtdHJlZSkpICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJENPTU1JVCAmJgorCisJZ2l0IGRpZmYgMj5lcnIub3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiZXJyb3I6IEJPTSBpcyByZXF1aXJlZCIgZXJyLm91dAorJworCit0ZXN0X2xhenlfcHJlcmVxIElDT05WX1NISUZUX0pJUyAnCisJaWNvbnYgLWYgVVRGLTggLXQgU0hJRlQtSklTIDwvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBJQ09OVl9TSElGVF9KSVMgJ2NoZWNrIHJvdW5kdHJpcCBlbmNvZGluZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgcm91bmR0cmlwLnNoaWZ0IHJvdW5kdHJpcC51dGYxNiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCIgJiYKKworCXRleHQ9ImhhbGxvIHRoZXJlIVxucm91bmR0cmlwIHRlc3QgaGVyZSEiICYmCisJcHJpbnRmICIkdGV4dCIgfCBpY29udiAtZiBVVEYtOCAtdCBTSElGVC1KSVMgPnJvdW5kdHJpcC5zaGlmdCAmJgorCXByaW50ZiAiJHRleHQiIHwgd3JpdGVfdXRmMTYgPnJvdW5kdHJpcC51dGYxNiAmJgorCWVjaG8gIiouc2hpZnQgdGV4dCB3b3JraW5nLXRyZWUtZW5jb2Rpbmc9U0hJRlQtSklTIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisKKwkjIFNISUZULUpJUyBlbmNvZGVkIGZpbGVzIGFyZSByb3VuZC10cmlwIGNoZWNrZWQgYnkgZGVmYXVsdC4uLgorCUdJVF9UUkFDRT0xIGdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgcm91bmR0cmlwLnNoaWZ0IDI+JjEgfAorCQlncmVwICJDaGVja2luZyByb3VuZHRyaXAgZW5jb2RpbmcgZm9yIFNISUZULUpJUyIgJiYKKwlnaXQgcmVzZXQgJiYKKworCSMgLi4uIHVubGVzcyB3ZSBvdmVyd3JpdGUgdGhlIEdpdCBjb25maWchCisJISBHSVRfVFJBQ0U9MSBnaXQgLWMgY29yZS5jaGVja1JvdW5kdHJpcEVuY29kaW5nPWdhcmJhZ2UgXAorCQlhZGQgLmdpdGF0dHJpYnV0ZXMgcm91bmR0cmlwLnNoaWZ0IDI+JjEgfAorCQlncmVwICJDaGVja2luZyByb3VuZHRyaXAgZW5jb2RpbmcgZm9yIFNISUZULUpJUyIgJiYKKwlnaXQgcmVzZXQgJiYKKworCSMgVVRGLTE2IGVuY29kZWQgZmlsZXMgc2hvdWxkIG5vdCBiZSByb3VuZC10cmlwIGNoZWNrZWQgYnkgZGVmYXVsdC4uLgorCSEgR0lUX1RSQUNFPTEgZ2l0IGFkZCByb3VuZHRyaXAudXRmMTYgMj4mMSB8CisJCWdyZXAgIkNoZWNraW5nIHJvdW5kdHJpcCBlbmNvZGluZyBmb3IgVVRGLTE2IiAmJgorCWdpdCByZXNldCAmJgorCisJIyAuLi4gdW5sZXNzIHdlIHRlbGwgR2l0IHRvIGNoZWNrIGl0IQorCUdJVF9UUkFDRT0xIGdpdCAtYyBjb3JlLmNoZWNrUm91bmR0cmlwRW5jb2Rpbmc9IlVURi0xNiwgVVRGLTMyIiBcCisJCWFkZCByb3VuZHRyaXAudXRmMTYgMj4mMSB8CisJCWdyZXAgIkNoZWNraW5nIHJvdW5kdHJpcCBlbmNvZGluZyBmb3IgdXRmLTE2IiAmJgorCWdpdCByZXNldCAmJgorCisJIyAuLi4gdW5sZXNzIHdlIHRlbGwgR2l0IHRvIGNoZWNrIGl0IQorCSMgKGhlcmUgd2UgYWxzbyBjaGVjayB0aGF0IHRoZSBjYXNpbmcgb2YgdGhlIGVuY29kaW5nIGlzIGlycmVsZXZhbnQpCisJR0lUX1RSQUNFPTEgZ2l0IC1jIGNvcmUuY2hlY2tSb3VuZHRyaXBFbmNvZGluZz0iVVRGLTMyLCB1dGYtMTYiIFwKKwkJYWRkIHJvdW5kdHJpcC51dGYxNiAyPiYxIHwKKwkJZ3JlcCAiQ2hlY2tpbmcgcm91bmR0cmlwIGVuY29kaW5nIGZvciB1dGYtMTYiICYmCisJZ2l0IHJlc2V0CisnCisKKyMgJDE6IGNoZWNrb3V0IGVuY29kaW5nCisjICQyOiB0ZXN0IHN0cmluZworIyAkMzogYmluYXJ5IHRlc3Qgc3RyaW5nIGluIGNoZWNrb3V0IGVuY29kaW5nCit0ZXN0X2NvbW1pdF91dGY4X2NoZWNrb3V0X290aGVyICgpIHsKKwllbmNvZGluZz0iJDEiCisJb3JpZ19zdHJpbmc9IiQyIgorCWV4cGVjdF9ieXRlcz0iJDMiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJDb21taXQgVVRGLTgsIGNoZWNrb3V0ICRlbmNvZGluZyIgJworCQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBIRUFEIC0tIC5naXRhdHRyaWJ1dGVzIiAmJgorCisJCXRlc3RfZXh0PSJjb21taXRfdXRmOF9jaGVja291dF8kZW5jb2RpbmciICYmCisJCXRlc3RfZmlsZT0idGVzdC4kdGVzdF9leHQiICYmCisKKwkJIyBDb21taXQgYXMgVVRGLTgKKwkJZWNobyAiKi4kdGVzdF9leHQgdGV4dCB3b3JraW5nLXRyZWUtZW5jb2Rpbmc9VVRGLTgiID4uZ2l0YXR0cmlidXRlcyAmJgorCQlwcmludGYgIiRvcmlnX3N0cmluZyIgPiR0ZXN0X2ZpbGUgJiYKKwkJZ2l0IGFkZCAkdGVzdF9maWxlICYmCisJCWdpdCBjb21taXQgLW0gIlRlc3QgZGF0YSIgJiYKKworCQkjIENoZWNrb3V0IGluIHRlc3RlZCBlbmNvZGluZworCQlybSAkdGVzdF9maWxlICYmCisJCWVjaG8gIiouJHRlc3RfZXh0IHRleHQgd29ya2luZy10cmVlLWVuY29kaW5nPSRlbmNvZGluZyIgPi5naXRhdHRyaWJ1dGVzICYmCisJCWdpdCBjaGVja291dCBIRUFEIC0tICR0ZXN0X2ZpbGUgJiYKKworCQkjIFRlc3QKKwkJcHJpbnRmICRleHBlY3RfYnl0ZXMgPiR0ZXN0X2ZpbGUucmF3ICYmCisJCXRlc3RfY21wX2JpbiAkdGVzdF9maWxlLnJhdyAkdGVzdF9maWxlCisJJworfQorCit0ZXN0X2NvbW1pdF91dGY4X2NoZWNrb3V0X290aGVyICJVVEYtOCIgICAgICAgICJUZXN0INCi0LXRgdGCIiAiXDEyNFwxNDVcMTYzXDE2NFwwNDBcMzIwXDI0MlwzMjBcMjY1XDMyMVwyMDFcMzIxXDIwMiIKK3Rlc3RfY29tbWl0X3V0ZjhfY2hlY2tvdXRfb3RoZXIgIlVURi0xNkxFIiAgICAgIlRlc3Qg0KLQtdGB0YIiICJcMTI0XDAwMFwxNDVcMDAwXDE2M1wwMDBcMTY0XDAwMFwwNDBcMDAwXDA0MlwwMDRcMDY1XDAwNFwxMDFcMDA0XDEwMlwwMDQiCit0ZXN0X2NvbW1pdF91dGY4X2NoZWNrb3V0X290aGVyICJVVEYtMTZCRSIgICAgICJUZXN0INCi0LXRgdGCIiAiXDAwMFwxMjRcMDAwXDE0NVwwMDBcMTYzXDAwMFwxNjRcMDAwXDA0MFwwMDRcMDQyXDAwNFwwNjVcMDA0XDEwMVwwMDRcMTAyIgordGVzdF9jb21taXRfdXRmOF9jaGVja291dF9vdGhlciAiVVRGLTE2TEUtQk9NIiAiVGVzdCDQotC10YHRgiIgIlwzNzdcMzc2XDEyNFwwMDBcMTQ1XDAwMFwxNjNcMDAwXDE2NFwwMDBcMDQwXDAwMFwwNDJcMDA0XDA2NVwwMDRcMTAxXDAwNFwxMDJcMDA0IgordGVzdF9jb21taXRfdXRmOF9jaGVja291dF9vdGhlciAiVVRGLTE2QkUtQk9NIiAiVGVzdCDQotC10YHRgiIgIlwzNzZcMzc3XDAwMFwxMjRcMDAwXDE0NVwwMDBcMTYzXDAwMFwxNjRcMDAwXDA0MFwwMDRcMDQyXDAwNFwwNjVcMDA0XDEwMVwwMDRcMTAyIgordGVzdF9jb21taXRfdXRmOF9jaGVja291dF9vdGhlciAiVVRGLTMyTEUiICAgICAiVGVzdCDQotC10YHRgiIgIlwxMjRcMDAwXDAwMFwwMDBcMTQ1XDAwMFwwMDBcMDAwXDE2M1wwMDBcMDAwXDAwMFwxNjRcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDA0MlwwMDRcMDAwXDAwMFwwNjVcMDA0XDAwMFwwMDBcMTAxXDAwNFwwMDBcMDAwXDEwMlwwMDRcMDAwXDAwMCIKK3Rlc3RfY29tbWl0X3V0ZjhfY2hlY2tvdXRfb3RoZXIgIlVURi0zMkJFIiAgICAgIlRlc3Qg0KLQtdGB0YIiICJcMDAwXDAwMFwwMDBcMTI0XDAwMFwwMDBcMDAwXDE0NVwwMDBcMDAwXDAwMFwxNjNcMDAwXDAwMFwwMDBcMTY0XDAwMFwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwNFwwNDJcMDAwXDAwMFwwMDRcMDY1XDAwMFwwMDBcMDA0XDEwMVwwMDBcMDAwXDAwNFwxMDIiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAyOS1jb3JlLXVuc2V0ZW52dmFycy5zaCBiL3QvdDAwMjktY29yZS11bnNldGVudnZhcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjRjZTQ2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMjktY29yZS11bnNldGVudnZhcnMuc2gKQEAgLTAsMCArMSwzMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgdGhlIFdpbmRvd3Mtb25seSBjb3JlLnVuc2V0ZW52dmFycyBzZXR0aW5nJworCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIE1JTkdXCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIFdpbmRvd3Mtc3BlY2lmaWMgdGVzdHMnCisJdGVzdF9kb25lCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIC1wICIkVFJBU0hfRElSRUNUT1JZLy5naXQvaG9va3MiICYmCisJd3JpdGVfc2NyaXB0ICIkVFJBU0hfRElSRUNUT1JZLy5naXQvaG9va3MvcHJlLWNvbW1pdCIgPDwtXEVPRgorCWVjaG8gJEhPQkJFUyA+JjIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29yZS51bnNldGVudnZhcnMgd29ya3MnICcKKwlIT0JCRVM9Q2FsdmluICYmCisJZXhwb3J0IEhPQkJFUyAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB3aXRoIDI+ZXJyICYmCisJZ3JlcCBDYWx2aW4gZXJyICYmCisJZ2l0IC1jIGNvcmUudW5zZXRlbnZ2YXJzPUZJTkRVUyxIT0JCRVMsQ0FMVklOIFwKKwkJY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gd2l0aG91dCAyPmVyciAmJgorCSEgZ3JlcCBDYWx2aW4gZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAzMC1zdHJpcHNwYWNlLnNoIGIvdC90MDAzMC1zdHJpcHNwYWNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjMjRhMGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDMwLXN0cmlwc3BhY2Uuc2gKQEAgLTAsMCArMSw0NTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQ2FybG9zIFJpY2EKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN0cmlwc3BhY2UnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0NDA9J0EgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG8nCitzNDA9JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnCitzc3M9IiRzNDAkczQwJHM0MCRzNDAkczQwJHM0MCRzNDAkczQwJHM0MCRzNDAiICMgNDAwCit0dHQ9IiR0NDAkdDQwJHQ0MCR0NDAkdDQwJHQ0MCR0NDAkdDQwJHQ0MCR0NDAiICMgNDAwCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdsb25nIGxpbmVzIHdpdGhvdXQgc3BhY2VzIHNob3VsZCBiZSB1bmNoYW5nZWQnICcKKyAgICBlY2hvICIkdHR0IiA+ZXhwZWN0ICYmCisgICAgZ2l0IHN0cmlwc3BhY2UgPGV4cGVjdCA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgZWNobyAiJHR0dCR0dHQiID5leHBlY3QgJiYKKyAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkdHR0JHR0dCR0dHQiID5leHBlY3QgJiYKKyAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkdHR0JHR0dCR0dHQkdHR0IiA+ZXhwZWN0ICYmCisgICAgZ2l0IHN0cmlwc3BhY2UgPGV4cGVjdCA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbGluZXMgd2l0aCBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBzaG91bGQgYmUgdW5jaGFuZ2VkJyAnCisgICAgZWNobyAiJHNzcyR0dHQiID5leHBlY3QgJiYKKyAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkc3NzJHNzcyR0dHQiID5leHBlY3QgJiYKKyAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkc3NzJHNzcyRzc3MkdHR0IiA+ZXhwZWN0ICYmCisgICAgZ2l0IHN0cmlwc3BhY2UgPGV4cGVjdCA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbGluZXMgd2l0aCBpbnRlcm1lZGlhdGUgc3BhY2VzIHNob3VsZCBiZSB1bmNoYW5nZWQnICcKKyAgICBlY2hvICIkdHR0JHNzcyR0dHQiID5leHBlY3QgJiYKKyAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkdHR0JHNzcyRzc3MkdHR0IiA+ZXhwZWN0ICYmCisgICAgZ2l0IHN0cmlwc3BhY2UgPGV4cGVjdCA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29uc2VjdXRpdmUgYmxhbmsgbGluZXMgc2hvdWxkIGJlIHVuaWZpZWQnICcKKyAgICBwcmludGYgIiR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuXG5cblxuXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dCR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCR0dHRcblxuXG5cblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcblxuXG5cblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuXG5cblxuXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuXG5cblxuXG4kdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcblxuJHR0dCR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0XG5cblxuXG5cbiR0dHQkdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuXHRcbiBcblxuICBcdFx0XG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dCR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCR0dHRcblx0XG4gXG5cbiAgXHRcdFxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcblx0XG4gXG5cbiAgXHRcdFxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuXHRcbiBcblxuICBcdFx0XG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuXHRcbiBcblxuICBcdFx0XG4kdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcblxuJHR0dCR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0XG5cdFxuIFxuXG4gIFx0XHRcbiR0dHQkdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdvbmx5IGNvbnNlY3V0aXZlIGJsYW5rIGxpbmVzIHNob3VsZCBiZSBjb21wbGV0ZWx5IHJlbW92ZWQnICcKKworICAgIHByaW50ZiAiXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiXG5cblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiRzc3NcbiRzc3NcbiRzc3NcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkc3NzJHNzc1xuJHNzc1xuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiXG4kc3NzXG4kc3NzJHNzc1xuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiRzc3Mkc3NzJHNzcyRzc3NcblxuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiXG4kc3NzJHNzcyRzc3Mkc3NzXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICJcblxuJHNzcyRzc3Mkc3NzJHNzc1xuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjb25zZWN1dGl2ZSBibGFuayBsaW5lcyBhdCB0aGUgYmVnaW5uaW5nIHNob3VsZCBiZSByZW1vdmVkJyAnCisgICAgcHJpbnRmICIkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICJcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICJcblxuXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dCR0dHRcbiIgPiBleHBlY3QgJiYKKyAgICBwcmludGYgIlxuXG5cbiR0dHQkdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dCR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICJcblxuXG4kdHR0JHR0dCR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dCR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICJcblxuXG4kdHR0JHR0dCR0dHQkdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuIiA+IGV4cGVjdCAmJgorCisgICAgcHJpbnRmICIkc3NzXG4kc3NzXG4kc3NzXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiXG4kc3NzXG4kc3NzJHNzc1xuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiRzc3Mkc3NzXG4kc3NzXG5cbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkc3NzJHNzcyRzc3NcblxuXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiXG4kc3NzJHNzcyRzc3NcblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIlxuXG4kc3NzJHNzcyRzc3NcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29uc2VjdXRpdmUgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBzaG91bGQgYmUgcmVtb3ZlZCcgJworICAgIHByaW50ZiAiJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuXG5cblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dFxuXG5cblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCR0dHQkdHR0XG5cblxuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dCR0dHQkdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCR0dHQkdHR0JHR0dFxuXG5cblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiIgPiBleHBlY3QgJiYKKworICAgIHByaW50ZiAiJHR0dFxuJHNzc1xuJHNzc1xuJHNzc1xuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcblxuJHNzc1xuJHNzcyRzc3NcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0XG4kc3NzJHNzc1xuJHNzc1xuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuJHNzcyRzc3Mkc3NzXG5cblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcblxuJHNzcyRzc3Mkc3NzXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0XG5cblxuJHNzcyRzc3Mkc3NzXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3RleHQgd2l0aG91dCBuZXdsaW5lIGF0IGVuZCBzaG91bGQgZW5kIHdpdGggbmV3bGluZScgJworICAgIHRlc3QgJChwcmludGYgIiR0dHQiIHwgZ2l0IHN0cmlwc3BhY2UgfCB3YyAtbCkgLWd0IDAgJiYKKyAgICB0ZXN0ICQocHJpbnRmICIkdHR0JHR0dCIgfCBnaXQgc3RyaXBzcGFjZSB8IHdjIC1sKSAtZ3QgMCAmJgorICAgIHRlc3QgJChwcmludGYgIiR0dHQkdHR0JHR0dCIgfCBnaXQgc3RyaXBzcGFjZSB8IHdjIC1sKSAtZ3QgMCAmJgorICAgIHRlc3QgJChwcmludGYgIiR0dHQkdHR0JHR0dCR0dHQiIHwgZ2l0IHN0cmlwc3BhY2UgfCB3YyAtbCkgLWd0IDAKKycKKworIyB0ZXh0IHBsdXMgc3BhY2VzIGF0IHRoZSBlbmQ6CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd0ZXh0IHBsdXMgc3BhY2VzIHdpdGhvdXQgbmV3bGluZSBhdCBlbmQgc2hvdWxkIGVuZCB3aXRoIG5ld2xpbmUnICcKKyAgICB0ZXN0ICQocHJpbnRmICIkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IHdjIC1sKSAtZ3QgMCAmJgorICAgIHRlc3QgJChwcmludGYgIiR0dHQkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IHdjIC1sKSAtZ3QgMCAmJgorICAgIHRlc3QgJChwcmludGYgIiR0dHQkdHR0JHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCB3YyAtbCkgLWd0IDAgJiYKKyAgICB0ZXN0ICQocHJpbnRmICIkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCB3YyAtbCkgLWd0IDAgJiYKKyAgICB0ZXN0ICQocHJpbnRmICIkdHR0JHR0dCRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgd2MgLWwpIC1ndCAwICYmCisgICAgdGVzdCAkKHByaW50ZiAiJHR0dCRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IHdjIC1sKSAtZ3QgMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndGV4dCBwbHVzIHNwYWNlcyB3aXRob3V0IG5ld2xpbmUgYXQgZW5kIHNob3VsZCBub3Qgc2hvdyBzcGFjZXMnICcKKyAgICAhIChwcmludGYgIiR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICAiID4vZGV2L251bGwpICYmCisgICAgISAocHJpbnRmICIkdHR0JHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgICIgPi9kZXYvbnVsbCkgJiYKKyAgICAhIChwcmludGYgIiR0dHQkdHR0JHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgICIgPi9kZXYvbnVsbCkgJiYKKyAgICAhIChwcmludGYgIiR0dHQkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAgIiA+L2Rldi9udWxsKSAmJgorICAgICEgKHByaW50ZiAiJHR0dCR0dHQkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAgIiA+L2Rldi9udWxsKSAmJgorICAgICEgKHByaW50ZiAiJHR0dCRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAgIiA+L2Rldi9udWxsKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndGV4dCBwbHVzIHNwYWNlcyB3aXRob3V0IG5ld2xpbmUgc2hvdWxkIHNob3cgdGhlIGNvcnJlY3QgbGluZXMnICcKKyAgICBwcmludGYgIiR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuIiA+ZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuIiA+ZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHNzcyRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHQkdHR0XG4iID5leHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHQkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dFxuIiA+ZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dCRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuIiA+ZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd0ZXh0IHBsdXMgc3BhY2VzIGF0IGVuZCBzaG91bGQgbm90IHNob3cgc3BhY2VzJyAnCisgICAgISAoZWNobyAiJHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgICIgPi9kZXYvbnVsbCkgJiYKKyAgICAhIChlY2hvICIkdHR0JHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgICIgPi9kZXYvbnVsbCkgJiYKKyAgICAhIChlY2hvICIkdHR0JHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICAiID4vZGV2L251bGwpICYmCisgICAgISAoZWNobyAiJHR0dCRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICAiID4vZGV2L251bGwpICYmCisgICAgISAoZWNobyAiJHR0dCR0dHQkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAgIiA+L2Rldi9udWxsKSAmJgorICAgICEgKGVjaG8gIiR0dHQkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgICIgPi9kZXYvbnVsbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3RleHQgcGx1cyBzcGFjZXMgYXQgZW5kIHNob3VsZCBiZSBjbGVhbmVkIGFuZCBuZXdsaW5lIG11c3QgcmVtYWluJyAnCisgICAgZWNobyAiJHR0dCIgPmV4cGVjdCAmJgorICAgIGVjaG8gIiR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkdHR0IiA+ZXhwZWN0ICYmCisgICAgZWNobyAiJHR0dCRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkdHR0IiA+ZXhwZWN0ICYmCisgICAgZWNobyAiJHR0dCRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgZWNobyAiJHR0dCR0dHQiID5leHBlY3QgJiYKKyAgICBlY2hvICIkdHR0JHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiR0dHQkdHR0IiA+ZXhwZWN0ICYmCisgICAgZWNobyAiJHR0dCR0dHQkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgZWNobyAiJHR0dCR0dHQkdHR0IiA+ZXhwZWN0ICYmCisgICAgZWNobyAiJHR0dCR0dHQkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIHNwYWNlcyBvbmx5OgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc3BhY2VzIHdpdGggbmV3bGluZSBhdCBlbmQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggZW1wdHkgc3RyaW5nJyAnCisgICAgZWNobyB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKyAgICBlY2hvICIkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKyAgICBlY2hvICIkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisgICAgZWNobyAiJHNzcyRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKyAgICBlY2hvICIkc3NzJHNzcyRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzcGFjZXMgd2l0aG91dCBuZXdsaW5lIGF0IGVuZCBzaG91bGQgbm90IHNob3cgc3BhY2VzJyAnCisgICAgISAocHJpbnRmICIiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgIiA+L2Rldi9udWxsKSAmJgorICAgICEgKHByaW50ZiAiJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAiID4vZGV2L251bGwpICYmCisgICAgISAocHJpbnRmICIkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAiID4vZGV2L251bGwpICYmCisgICAgISAocHJpbnRmICIkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgIiA+L2Rldi9udWxsKSAmJgorICAgICEgKHByaW50ZiAiJHNzcyRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAiID4vZGV2L251bGwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzcGFjZXMgd2l0aG91dCBuZXdsaW5lIGF0IGVuZCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBlbXB0eSBzdHJpbmcnICcKKyAgICBwcmludGYgIiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHNzcyRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29uc2VjdXRpdmUgdGV4dCBsaW5lcyBzaG91bGQgYmUgdW5jaGFuZ2VkJyAnCisgICAgcHJpbnRmICIkdHR0JHR0dFxuJHR0dFxuIiA+ZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dFxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiR0dHQkdHR0XG4kdHR0XG4iID5leHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHRcbiR0dHQkdHR0XG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuJHR0dFxuJHR0dFxuJHR0dCR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuJHR0dFxuJHR0dFxuJHR0dCR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0XG4kdHR0XG5cbiR0dHQkdHR0XG4kdHR0XG4iID5leHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHRcbiR0dHRcblxuJHR0dCR0dHRcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dFxuXG4kdHR0XG4kdHR0JHR0dFxuIiA+ZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dFxuXG4kdHR0XG4kdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiR0dHQkdHR0XG5cbiR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuJHR0dCR0dHRcblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmlwIGNvbW1lbnRzLCB0b28nICcKKwl0ZXN0ICEgLXogIiQoZWNobyAiIyBjb21tZW50IiB8IGdpdCBzdHJpcHNwYWNlKSIgJiYKKwl0ZXN0IC16ICIkKGVjaG8gIiMgY29tbWVudCIgfCBnaXQgc3RyaXBzcGFjZSAtcykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmlwIGNvbW1lbnRzIHdpdGggY2hhbmdlZCBjb21tZW50IGNoYXInICcKKwl0ZXN0ICEgLXogIiQoZWNobyAiOyBjb21tZW50IiB8IGdpdCAtYyBjb3JlLmNvbW1lbnRjaGFyPSI7IiBzdHJpcHNwYWNlKSIgJiYKKwl0ZXN0IC16ICIkKGVjaG8gIjsgY29tbWVudCIgfCBnaXQgLWMgY29yZS5jb21tZW50Y2hhcj0iOyIgc3RyaXBzcGFjZSAtcykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1jIHdpdGggc2luZ2xlIGxpbmUnICcKKwlwcmludGYgIiMgZm9vXG4iID5leHBlY3QgJiYKKwlwcmludGYgImZvbyIgfCBnaXQgc3RyaXBzcGFjZSAtYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctYyB3aXRoIHNpbmdsZSBsaW5lIGZvbGxvd2VkIGJ5IGVtcHR5IGxpbmUnICcKKwlwcmludGYgIiMgZm9vXG4jXG4iID5leHBlY3QgJiYKKwlwcmludGYgImZvb1xuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgLWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLWMgd2l0aCBuZXdsaW5lIG9ubHknICcKKwlwcmludGYgIiNcbiIgPmV4cGVjdCAmJgorCXByaW50ZiAiXG4iIHwgZ2l0IHN0cmlwc3BhY2UgLWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb21tZW50LWxpbmVzIHdpdGggc2luZ2xlIGxpbmUnICcKKwlwcmludGYgIiMgZm9vXG4iID5leHBlY3QgJiYKKwlwcmludGYgImZvbyIgfCBnaXQgc3RyaXBzcGFjZSAtYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctYyB3aXRoIGNoYW5nZWQgY29tbWVudCBjaGFyJyAnCisJcHJpbnRmICI7IGZvb1xuIiA+ZXhwZWN0ICYmCisJcHJpbnRmICJmb28iIHwgZ2l0IC1jIGNvcmUuY29tbWVudGNoYXI9IjsiIHN0cmlwc3BhY2UgLWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLWMgd2l0aCBjb21tZW50IGNoYXIgZGVmaW5lZCBpbiAuZ2l0L2NvbmZpZycgJworCXRlc3RfY29uZmlnIGNvcmUuY29tbWVudGNoYXIgPSAmJgorCXByaW50ZiAiPSBmb29cbiIgPmV4cGVjdCAmJgorCXJtIC1mciBzdWIgJiYKKwlta2RpciBzdWIgJiYKKwlwcmludGYgImZvbyIgfCBnaXQgLUMgc3ViIHN0cmlwc3BhY2UgLWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLWMgb3V0c2lkZSBnaXQgcmVwb3NpdG9yeScgJworCXByaW50ZiAiIyBmb29cbiIgPmV4cGVjdCAmJgorCXByaW50ZiAiZm9vIiB8IG5vbmdpdCBnaXQgc3RyaXBzcGFjZSAtYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdm9pZCBTUC1IVCBzZXF1ZW5jZSBpbiBjb21tZW50ZWQgbGluZScgJworCXByaW50ZiAiI1x0b25lXG4jXG4jIHR3b1xuIiA+ZXhwZWN0ICYmCisJcHJpbnRmICJcdG9uZVxuXG50d29cbiIgfCBnaXQgc3RyaXBzcGFjZSAtYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNDAtcGFyc2Utb3B0aW9ucy5zaCBiL3QvdDAwNDAtcGFyc2Utb3B0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mODE3OGVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDA0MC1wYXJzZS1vcHRpb25zLnNoCkBAIC0wLDAgKzEsNDI3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nb3VyIG93biBvcHRpb24gcGFyc2VyJworCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5leHBlY3QgPDxcRU9GCit1c2FnZTogdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgPG9wdGlvbnM+CisKKyAgICBBIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHBhcnNlLW9wdGlvbnMgQVBJLgorCisgICAgLS15ZXMgICAgICAgICAgICAgICAgIGdldCBhIGJvb2xlYW4KKyAgICAtRCwgLS1uby1kb3VidCAgICAgICAgYmVnaW5zIHdpdGggJ25vLScKKyAgICAtQiwgLS1uby1mZWFyICAgICAgICAgYmUgYnJhdmUKKyAgICAtYiwgLS1ib29sZWFuICAgICAgICAgaW5jcmVtZW50IGJ5IG9uZQorICAgIC00LCAtLW9yNCAgICAgICAgICAgICBiaXR3aXNlLW9yIGJvb2xlYW4gd2l0aCAuLi4wMTAwCisgICAgLS1uZWctb3I0ICAgICAgICAgICAgIHNhbWUgYXMgLS1uby1vcjQKKworICAgIC1pLCAtLWludGVnZXIgPG4+ICAgICBnZXQgYSBpbnRlZ2VyCisgICAgLWogPG4+ICAgICAgICAgICAgICAgIGdldCBhIGludGVnZXIsIHRvbworICAgIC1tLCAtLW1hZ25pdHVkZSA8bj4gICBnZXQgYSBtYWduaXR1ZGUKKyAgICAtLXNldDIzICAgICAgICAgICAgICAgc2V0IGludGVnZXIgdG8gMjMKKyAgICAtLW1vZGUxICAgICAgICAgICAgICAgc2V0IGludGVnZXIgdG8gMSAoY21kbW9kZSBvcHRpb24pCisgICAgLS1tb2RlMiAgICAgICAgICAgICAgIHNldCBpbnRlZ2VyIHRvIDIgKGNtZG1vZGUgb3B0aW9uKQorICAgIC1MLCAtLWxlbmd0aCA8c3RyPiAgICBnZXQgbGVuZ3RoIG9mIDxzdHI+CisgICAgLUYsIC0tZmlsZSA8ZmlsZT4gICAgIHNldCBmaWxlIHRvIDxmaWxlPgorCitTdHJpbmcgb3B0aW9ucworICAgIC1zLCAtLXN0cmluZyA8c3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgYSBzdHJpbmcKKyAgICAtLXN0cmluZzIgPHN0cj4gICAgICAgZ2V0IGFub3RoZXIgc3RyaW5nCisgICAgLS1zdCA8c3Q+ICAgICAgICAgICAgIGdldCBhbm90aGVyIHN0cmluZyAocGVydmVydCBvcmRlcmluZykKKyAgICAtbyA8c3RyPiAgICAgICAgICAgICAgZ2V0IGFub3RoZXIgc3RyaW5nCisgICAgLS1saXN0IDxzdHI+ICAgICAgICAgIGFkZCBzdHIgdG8gbGlzdAorCitNYWdpYyBhcmd1bWVudHMKKyAgICAtLXF1dXggICAgICAgICAgICAgICAgbWVhbnMgLS1xdXV4CisgICAgLU5VTSAgICAgICAgICAgICAgICAgIHNldCBpbnRlZ2VyIHRvIE5VTQorICAgICsgICAgICAgICAgICAgICAgICAgICBzYW1lIGFzIC1iCisgICAgLS1hbWJpZ3VvdXMgICAgICAgICAgIHBvc2l0aXZlIGFtYmlndWl0eQorICAgIC0tbm8tYW1iaWd1b3VzICAgICAgICBuZWdhdGl2ZSBhbWJpZ3VpdHkKKworU3RhbmRhcmQgb3B0aW9ucworICAgIC0tYWJicmV2Wz08bj5dICAgICAgICB1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcworICAgIC12LCAtLXZlcmJvc2UgICAgICAgICBiZSB2ZXJib3NlCisgICAgLW4sIC0tZHJ5LXJ1biAgICAgICAgIGRyeSBydW4KKyAgICAtcSwgLS1xdWlldCAgICAgICAgICAgYmUgcXVpZXQKKyAgICAtLWV4cGVjdCA8c3RyaW5nPiAgICAgZXhwZWN0ZWQgb3V0cHV0IGluIHRoZSB2YXJpYWJsZSBkdW1wCisKK0FsaWFzCisgICAgLUEsIC0tYWxpYXMtc291cmNlIDxzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBhIHN0cmluZworICAgIC1aLCAtLWFsaWFzLXRhcmdldCA8c3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhcyBvZiAtLWFsaWFzLXNvdXJjZQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBoZWxwJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLWggPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK212IGV4cGVjdCBleHBlY3QuZXJyCisKK2NoZWNrICgpIHsKKwl3aGF0PSIkMSIgJiYKKwlzaGlmdCAmJgorCWV4cGVjdD0iJDEiICYmCisJc2hpZnQgJiYKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWV4cGVjdD0iJHdoYXQgJGV4cGVjdCIgIiRAIgorfQorCitjaGVja191bmtub3duX2kxOG4oKSB7CisJY2FzZSAiJDEiIGluCisJLS0qKQorCQllY2hvIGVycm9yOiB1bmtub3duIG9wdGlvbiBcYCR7MSMtLX1cJyA+ZXhwZWN0IDs7CisJLSopCisJCWVjaG8gZXJyb3I6IHVua25vd24gc3dpdGNoIFxgJHsxIy19XCcgPmV4cGVjdCA7OworCWVzYWMgJiYKKwljYXQgZXhwZWN0LmVyciA+PmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBwYXJzZS1vcHRpb25zICQqID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0LmVycgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpICMxJyAnY2hlY2sgYm9vbGVhbjogMSAtLXllcycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgIzInICdjaGVjayBib29sZWFuOiAxIC0tbm8tZG91YnQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpICMzJyAnY2hlY2sgYm9vbGVhbjogMSAtRCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgIzQnICdjaGVjayBib29sZWFuOiAxIC0tbm8tZmVhcicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgIzUnICdjaGVjayBib29sZWFuOiAxIC1CJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpIGlzIGlkZW1wb3RlbnQgIzEnICdjaGVjayBib29sZWFuOiAxIC0teWVzIC0teWVzJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSBpcyBpZGVtcG90ZW50ICMyJyAnY2hlY2sgYm9vbGVhbjogMSAtREInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgbmVnYXRpb24gIzEnICdjaGVjayBib29sZWFuOiAwIC1EIC0tbm8teWVzJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSBuZWdhdGlvbiAjMicgJ2NoZWNrIGJvb2xlYW46IDAgLUQgLS1uby1uby1kb3VidCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSBubyBuZWdhdGlvbiAjMScgJ2NoZWNrX3Vua25vd25faTE4biAtLWZlYXInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpIG5vIG5lZ2F0aW9uICMyJyAnY2hlY2tfdW5rbm93bl9pMThuIC0tbm8tbm8tZmVhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSBwb3NpdGl2YXRpb24nICdjaGVjayBib29sZWFuOiAwIC1EIC0tZG91YnQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9JTlQoKSBuZWdhdGl2ZScgJ2NoZWNrIGludGVnZXI6IC0yMzQ1IC1pIC0yMzQ1JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfTUFHTklUVURFKCkgc2ltcGxlJyAnCisJY2hlY2sgbWFnbml0dWRlOiAyMzQ1Njc4IC1tIDIzNDU2NzgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX01BR05JVFVERSgpIGtpbG8nICcKKwljaGVjayBtYWduaXR1ZGU6IDIzOTYxNiAtbSAyMzRrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9NQUdOSVRVREUoKSBtZWdhJyAnCisJY2hlY2sgbWFnbml0dWRlOiAxMDQ4NTc2MDAgLW0gMTAwbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfTUFHTklUVURFKCkgZ2lnYScgJworCWNoZWNrIG1hZ25pdHVkZTogMTA3Mzc0MTgyNCAtbSAxZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfTUFHTklUVURFKCkgM2dpZ2EnICcKKwljaGVjayBtYWduaXR1ZGU6IDMyMjEyMjU0NzIgLW0gM2cKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitib29sZWFuOiAyCitpbnRlZ2VyOiAxNzI5CittYWduaXR1ZGU6IDE2Mzg0Cit0aW1lc3RhbXA6IDAKK3N0cmluZzogMTIzCithYmJyZXY6IDcKK3ZlcmJvc2U6IDIKK3F1aWV0OiAwCitkcnkgcnVuOiB5ZXMKK2ZpbGU6IHByZWZpeC9teS5maWxlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnQgb3B0aW9ucycgJworCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC1zMTIzIC1iIC1pIDE3MjkgLW0gMTZrIC1iIC12diAtbiAtRiBteS5maWxlIFwKKwk+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVycgorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2Jvb2xlYW46IDIKK2ludGVnZXI6IDE3MjkKK21hZ25pdHVkZTogMTYzODQKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAzMjEKK2FiYnJldjogMTAKK3ZlcmJvc2U6IDIKK3F1aWV0OiAwCitkcnkgcnVuOiBubworZmlsZTogcHJlZml4L2ZpLmxlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9uZyBvcHRpb25zJyAnCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1ib29sZWFuIC0taW50ZWdlciAxNzI5IC0tbWFnbml0dWRlIDE2ayBcCisJCS0tYm9vbGVhbiAtLXN0cmluZzI9MzIxIC0tdmVyYm9zZSAtLXZlcmJvc2UgLS1uby1kcnktcnVuIFwKKwkJLS1hYmJyZXY9MTAgLS1maWxlIGZpLmxlIC0tb2Jzb2xldGUgXAorCQk+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIHJlcXVpcmVkIHZhbHVlJyAnCisJdGVzdF9leHBlY3RfY29kZSAxMjkgdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLXMgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSB0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLXN0cmluZyAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI5IHRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tZmlsZQorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2Jvb2xlYW46IDEKK2ludGVnZXI6IDEzCittYWduaXR1ZGU6IDAKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAxMjMKK2FiYnJldjogNwordmVyYm9zZTogLTEKK3F1aWV0OiAwCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCithcmcgMDA6IGExCithcmcgMDE6IGIxCithcmcgMDI6IC0tYm9vbGVhbgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVybWluZ2xlZCBhcmd1bWVudHMnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyBhMSAtLXN0cmluZyAxMjMgYjEgLS1ib29sZWFuIC1qIDEzIC0tIC0tYm9vbGVhbiBcCisJCT5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorYm9vbGVhbjogMAoraW50ZWdlcjogMgorbWFnbml0dWRlOiAwCit0aW1lc3RhbXA6IDAKK3N0cmluZzogKG5vdCBzZXQpCithYmJyZXY6IDcKK3ZlcmJvc2U6IC0xCitxdWlldDogMAorZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VuYW1iaWd1b3VzbHkgYWJicmV2aWF0ZWQgb3B0aW9uJyAnCisJR0lUX1RFU1RfRElTQUxMT1dfQUJCUkVWSUFURURfT1BUSU9OUz1mYWxzZSBcCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1pbnQgMiAtLWJvb2xlYW4gLS1uby1ibyA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmFtYmlndW91c2x5IGFiYnJldmlhdGVkIG9wdGlvbiB3aXRoICI9IicgJworCUdJVF9URVNUX0RJU0FMTE9XX0FCQlJFVklBVEVEX09QVElPTlM9ZmFsc2UgXAorCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tZXhwZWN0PSJpbnRlZ2VyOiAyIiAtLWludD0yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtYmlndW91c2x5IGFiYnJldmlhdGVkIG9wdGlvbicgJworCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGVudiBHSVRfVEVTVF9ESVNBTExPV19BQkJSRVZJQVRFRF9PUFRJT05TPWZhbHNlIFwKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLXN0cmluIDEyMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24gYW1iaWd1b3VzIG9wdGlvbiAoYWZ0ZXIgdHdvIG9wdGlvbnMgaXQgYWJicmV2aWF0ZXMpJyAnCisJR0lUX1RFU1RfRElTQUxMT1dfQUJCUkVWSUFURURfT1BUSU9OUz1mYWxzZSBcCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1leHBlY3Q9InN0cmluZzogMTIzIiAtLXN0IDEyMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBbGlhcyBvcHRpb25zIGRvIG5vdCBjb250cmlidXRlIHRvIGFiYnJldmlhdGlvbicgJworCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tYWxpYXMtc291cmNlIDEyMyA+b3V0cHV0ICYmCisJZ3JlcCAiXnN0cmluZzogMTIzIiBvdXRwdXQgJiYKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWFsaWFzLXRhcmdldCAxMjMgPm91dHB1dCAmJgorCWdyZXAgIl5zdHJpbmc6IDEyMyIgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1hbGlhcyAmJgorCUdJVF9URVNUX0RJU0FMTE9XX0FCQlJFVklBVEVEX09QVElPTlM9ZmFsc2UgXAorCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tYWxpYXMgMTIzID5vdXRwdXQgJiYKKwlncmVwICJec3RyaW5nOiAxMjMiIG91dHB1dAorJworCitjYXQgPnR5cG8uZXJyIDw8XEVPRgorZXJyb3I6IGRpZCB5b3UgbWVhbiBgLS1ib29sZWFuYCAod2l0aCB0d28gZGFzaGVzKT8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgcG9zc2libGUgdHlwb3MnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtYm9vbGVhbiA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgdHlwby5lcnIgb3V0cHV0LmVycgorJworCitjYXQgPnR5cG8uZXJyIDw8XEVPRgorZXJyb3I6IGRpZCB5b3UgbWVhbiBgLS1hbWJpZ3VvdXNgICh3aXRoIHR3byBkYXNoZXMpPworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBwb3NzaWJsZSB0eXBvcycgJworCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC1hbWJpZ3VvdXMgPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIHR5cG8uZXJyIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2VlcCBzb21lIG9wdGlvbnMgYXMgYXJndW1lbnRzJyAnCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1leHBlY3Q9ImFyZyAwMDogLS1xdXV4IiAtLXF1dXgKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitDYWxsYmFjazogImZvdXIiLCAwCitib29sZWFuOiA1CitpbnRlZ2VyOiA0CittYWduaXR1ZGU6IDAKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogLTEKK3F1aWV0OiAwCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0NBTExCQUNLKCkgYW5kIE9QVF9CSVQoKSB3b3JrJyAnCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1sZW5ndGg9Zm91ciAtYiAtNCA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQ0FMTEJBQ0soKSBhbmQgY2FsbGJhY2sgZXJyb3JzIHdvcmsnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLW5vLWxlbmd0aCA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVycgorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2Jvb2xlYW46IDEKK2ludGVnZXI6IDIzCittYWduaXR1ZGU6IDAKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogLTEKK3F1aWV0OiAwCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JJVCgpIGFuZCBPUFRfU0VUX0lOVCgpIHdvcmsnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLXNldDIzIC1iYmJiYiAtLW5vLW9yNCA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfTkVHQklUKCkgYW5kIE9QVF9TRVRfSU5UKCkgd29yaycgJworCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tc2V0MjMgLWJiYmJiIC0tbmVnLW9yNCA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQklUKCkgd29ya3MnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWV4cGVjdD0iYm9vbGVhbjogNiIgLWJiIC0tb3I0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9ORUdCSVQoKSB3b3JrcycgJworCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tZXhwZWN0PSJib29sZWFuOiA2IiAtYmIgLS1uby1uZWctb3I0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9DTURNT0RFKCkgd29ya3MnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWV4cGVjdD0iaW50ZWdlcjogMSIgLS1tb2RlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQ01ETU9ERSgpIGRldGVjdHMgaW5jb21wYXRpYmlsaXR5JyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1tb2RlMSAtLW1vZGUyID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgImluY29tcGF0aWJsZSB3aXRoIC0tbW9kZSIgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQ01ETU9ERSgpIGRldGVjdHMgaW5jb21wYXRpYmlsaXR5IHdpdGggc29tZXRoaW5nIGVsc2UnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLXNldDIzIC0tbW9kZTIgPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiaW5jb21wYXRpYmxlIHdpdGggc29tZXRoaW5nIGVsc2UiIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0NPVU5UVVAoKSB3aXRoIFBBUlNFX09QVF9OT0RBU0ggd29ya3MnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWV4cGVjdD0iYm9vbGVhbjogNiIgKyArICsgKyArICsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX05VTUJFUl9DQUxMQkFDSygpIHdvcmtzJyAnCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1leHBlY3Q9ImludGVnZXI6IDEyMzQ1IiAtMTIzNDUKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitib29sZWFuOiAwCitpbnRlZ2VyOiAwCittYWduaXR1ZGU6IDAKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogLTEKK3F1aWV0OiAwCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVnYXRpb24gb2YgT1BUX05PTkVHIGZsYWdzIGlzIG5vdCBhbWJpZ3VvdXMnICcKKwlHSVRfVEVTVF9ESVNBTExPV19BQkJSRVZJQVRFRF9PUFRJT05TPWZhbHNlIFwKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLW5vLWFtYmlnID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+PmV4cGVjdCA8PFxFT0YKK2xpc3Q6IGZvbworbGlzdDogYmFyCitsaXN0OiBiYXoKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1saXN0IGtlZXBzIGxpc3Qgb2Ygc3RyaW5ncycgJworCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tbGlzdCBmb28gLS1saXN0PWJhciAtLWxpc3Q9YmF6ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tbGlzdCByZXNldHMgbGlzdCcgJworCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tbGlzdD1vdGhlciAtLWxpc3Q9aXJyZWxldmFudCAtLWxpc3Q9b3B0aW9ucyBcCisJCS0tbm8tbGlzdCAtLWxpc3Q9Zm9vIC0tbGlzdD1iYXIgLS1saXN0PWJheiA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBxdWlldCBsZXZlbHMnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWV4cGVjdD0icXVpZXQ6IDMiIC1xIC1xIC1xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIHZlcmJvc2UgbGV2ZWxzJyAnCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1leHBlY3Q9InZlcmJvc2U6IDMiIC12IC12IC12CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tcXVpZXQgc2V0cyAtLXF1aWV0IHRvIDAnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWV4cGVjdD0icXVpZXQ6IDAiIC0tbm8tcXVpZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1xdWlldCByZXNldHMgbXVsdGlwbGUgLXEgdG8gMCcgJworCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tZXhwZWN0PSJxdWlldDogMCIgLXEgLXEgLXEgLS1uby1xdWlldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmJvc2Ugc2V0cyB2ZXJib3NlIHRvIDAnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWV4cGVjdD0idmVyYm9zZTogMCIgLS1uby12ZXJib3NlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyYm9zZSByZXNldHMgbXVsdGlwbGUgdmVyYm9zZSB0byAwJyAnCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1leHBlY3Q9InZlcmJvc2U6IDAiIC12IC12IC12IC0tbm8tdmVyYm9zZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfVEVTVF9ESVNBTExPV19BQkJSRVZJQVRFRF9PUFRJT05TIHdvcmtzJyAnCisJR0lUX1RFU1RfRElTQUxMT1dfQUJCUkVWSUFURURfT1BUSU9OUz1mYWxzZSBcCisJCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0teWUgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfRElTQUxMT1dfQUJCUkVWSUFURURfT1BUSU9OUz10cnVlIFwKKwkJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS15ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWVuZC1vZi1vcHRpb25zIHRyZWF0cyByZW1haW5kZXIgYXMgYXJncycgJworCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIFwKKwkgICAgLS1leHBlY3Q9InZlcmJvc2U6IC0xIiBcCisJICAgIC0tZXhwZWN0PSJhcmcgMDA6IC0tdmVyYm9zZSIgXAorCSAgICAtLWVuZC1vZi1vcHRpb25zIC0tdmVyYm9zZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNDEtdXNhZ2Uuc2ggYi90L3QwMDQxLXVzYWdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjViOTI3YjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDQxLXVzYWdlLnNoCkBAIC0wLDAgKzEsMTA3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBjb21tYW5kcyBiZWhhdmlvciB3aGVuIGdpdmVuIGludmFsaWQgYXJndW1lbnQgdmFsdWUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAnICcKKwl0ZXN0X2NvbW1pdCAidjEuMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIC0tY29udGFpbnMgPGV4aXN0ZW50X3RhZz4nICcKKwlnaXQgdGFnIC0tY29udGFpbnMgInYxLjAiID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJZ3JlcCAidjEuMCIgYWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyAtLWNvbnRhaW5zIDxpbmV4aXN0ZW50X3RhZz4nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC0tY29udGFpbnMgIm5vdGFnIiA+YWN0dWFsIDI+YWN0dWFsLmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiZXJyb3IiIGFjdHVhbC5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgInVzYWdlIiBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyAtLW5vLWNvbnRhaW5zIDxleGlzdGVudF90YWc+JyAnCisJZ2l0IHRhZyAtLW5vLWNvbnRhaW5zICJ2MS4wIiA+YWN0dWFsIDI+YWN0dWFsLmVyciAgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWcgLS1uby1jb250YWlucyA8aW5leGlzdGVudF90YWc+JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtLW5vLWNvbnRhaW5zICJub3RhZyIgPmFjdHVhbCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yIiBhY3R1YWwuZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJ1c2FnZSIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWcgdXNhZ2UgZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC0tbm9vcHQgPmFjdHVhbCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgInVzYWdlIiBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtLWNvbnRhaW5zIDxleGlzdGVudF9jb21taXQ+JyAnCisJZ2l0IGJyYW5jaCAtLWNvbnRhaW5zICJtYXN0ZXIiID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9pMThuZ3JlcCAibWFzdGVyIiBhY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tY29udGFpbnMgPGluZXhpc3RlbnRfY29tbWl0PicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS1uby1jb250YWlucyAibm9jb21taXQiID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciIgYWN0dWFsLmVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAidXNhZ2UiIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tbm8tY29udGFpbnMgPGV4aXN0ZW50X2NvbW1pdD4nICcKKwlnaXQgYnJhbmNoIC0tbm8tY29udGFpbnMgIm1hc3RlciIgPmFjdHVhbCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLS1uby1jb250YWlucyA8aW5leGlzdGVudF9jb21taXQ+JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLW5vLWNvbnRhaW5zICJub2NvbW1pdCIgPmFjdHVhbCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yIiBhY3R1YWwuZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJ1c2FnZSIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggdXNhZ2UgZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tbm9vcHQgPmFjdHVhbCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgInVzYWdlIiBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvci1lYWNoLXJlZiAtLWNvbnRhaW5zIDxleGlzdGVudF9vYmplY3Q+JyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWNvbnRhaW5zICJtYXN0ZXIiID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBhY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yLWVhY2gtcmVmIC0tY29udGFpbnMgPGluZXhpc3RlbnRfb2JqZWN0PicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1uby1jb250YWlucyAibm9vYmplY3QiID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciIgYWN0dWFsLmVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAidXNhZ2UiIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yLWVhY2gtcmVmIC0tbm8tY29udGFpbnMgPGV4aXN0ZW50X29iamVjdD4nICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tbm8tY29udGFpbnMgIm1hc3RlciIgPmFjdHVhbCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3ItZWFjaC1yZWYgLS1uby1jb250YWlucyA8aW5leGlzdGVudF9vYmplY3Q+JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLW5vLWNvbnRhaW5zICJub29iamVjdCIgPmFjdHVhbCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yIiBhY3R1YWwuZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJ1c2FnZSIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3ItZWFjaC1yZWYgdXNhZ2UgZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tbm9vcHQgPmFjdHVhbCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgInVzYWdlIiBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA1MC1maWxlc3lzdGVtLnNoIGIvdC90MDA1MC1maWxlc3lzdGVtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwODY3M2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDUwLWZpbGVzeXN0ZW0uc2gKQEAgLTAsMCArMSwxNTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdWYXJpb3VzIGZpbGVzeXN0ZW0gaXNzdWVzJworCisuIC4vdGVzdC1saWIuc2gKKworYXVtbD0kKHByaW50ZiAnXDMwM1wyNDQnKQorYXVtbGNkaWFyPSQocHJpbnRmICdcMTQxXDMxNFwyMTAnKQorCitpZiB0ZXN0X2hhdmVfcHJlcmVxIENBU0VfSU5TRU5TSVRJVkVfRlMKK3RoZW4KKwlzYXkgIndpbGwgdGVzdCBvbiBhIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSIKKwl0ZXN0X2Nhc2U9dGVzdF9leHBlY3RfZmFpbHVyZQorZWxzZQorCXRlc3RfY2FzZT10ZXN0X2V4cGVjdF9zdWNjZXNzCitmaQorCitpZiB0ZXN0X2hhdmVfcHJlcmVxIFVURjhfTkZEX1RPX05GQwordGhlbgorCXNheSAid2lsbCB0ZXN0IG9uIGEgdW5pY29kZSBjb3JydXB0aW5nIGZpbGVzeXN0ZW0iCisJdGVzdF91bmljb2RlPXRlc3RfZXhwZWN0X2ZhaWx1cmUKK2Vsc2UKKwl0ZXN0X3VuaWNvZGU9dGVzdF9leHBlY3Rfc3VjY2VzcworZmkKKwordGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUyB8fAorCXNheSAid2lsbCB0ZXN0IG9uIGEgZmlsZXN5c3RlbSBsYWNraW5nIHN5bWJvbGljIGxpbmtzIgorCitpZiB0ZXN0X2hhdmVfcHJlcmVxIENBU0VfSU5TRU5TSVRJVkVfRlMKK3RoZW4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRldGVjdGlvbiBvZiBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0gZHVyaW5nIHJlcG8gaW5pdCIgJworCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmlnbm9yZWNhc2UpID0gdHJ1ZQorJworZWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGV0ZWN0aW9uIG9mIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSBkdXJpbmcgcmVwbyBpbml0IiAnCisJeworCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmlnbm9yZWNhc2UgPi9kZXYvbnVsbCB8fAorCQkJdGVzdCAkKGdpdCBjb25maWcgLS1ib29sIGNvcmUuaWdub3JlY2FzZSkgPSBmYWxzZQorCX0KKycKK2ZpCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKK3RoZW4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRldGVjdGlvbiBvZiBmaWxlc3lzdGVtIHcvbyBzeW1saW5rIHN1cHBvcnQgZHVyaW5nIHJlcG8gaW5pdCIgJworCXsKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5zeW1saW5rcyB8fAorCQl0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIGNvcmUuc3ltbGlua3MpIiA9IHRydWUKKwl9CisnCitlbHNlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZXRlY3Rpb24gb2YgZmlsZXN5c3RlbSB3L28gc3ltbGluayBzdXBwb3J0IGR1cmluZyByZXBvIGluaXQiICcKKwl2PSQoZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5zeW1saW5rcykgJiYKKwl0ZXN0ICIkdiIgPSBmYWxzZQorJworZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgY2FzZSB0ZXN0cyIgJworCWdpdCBjb25maWcgY29yZS5pZ25vcmVjYXNlIHRydWUgJiYKKwl0b3VjaCBjYW1lbGNhc2UgJiYKKwlnaXQgYWRkIGNhbWVsY2FzZSAmJgorCWdpdCBjb21taXQgLW0gImluaXRpYWwiICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRvcGljICYmCisJZ2l0IG12IGNhbWVsY2FzZSB0bXAgJiYKKwlnaXQgbXYgdG1wIENhbWVsQ2FzZSAmJgorCWdpdCBjb21taXQgLW0gInJlbmFtZSIgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSAoY2FzZSBjaGFuZ2UpJyAnCisJZ2l0IG12IGNhbWVsY2FzZSBDYW1lbENhc2UgJiYKKwlnaXQgY29tbWl0IC1tICJyZW5hbWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIChjYXNlIGNoYW5nZSknICcKKwlybSAtZiBDYW1lbENhc2UgJiYKKwlybSAtZiBjYW1lbGNhc2UgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlnaXQgbWVyZ2UgdG9waWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDQVNFX0lOU0VOU0lUSVZFX0ZTICdhZGQgZGlyZWN0b3J5ICh3aXRoIGRpZmZlcmVudCBjYXNlKScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCW1rZGlyIC1wIGRpcjEvZGlyMiAmJgorCWVjaG8gPmRpcjEvZGlyMi9hICYmCisJZWNobyA+ZGlyMS9kaXIyL2IgJiYKKwlnaXQgYWRkIGRpcjEvZGlyMi9hICYmCisJZ2l0IGFkZCBkaXIxL0RJUjIvYiAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJCWNhbWVsY2FzZQorCQlkaXIxL2RpcjIvYQorCQlkaXIxL2RpcjIvYgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIENBU0VfSU5TRU5TSVRJVkVfRlMgJ2FkZCAod2l0aCBkaWZmZXJlbnQgY2FzZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlybSBjYW1lbGNhc2UgJiYKKwllY2hvIDEgPkNhbWVsQ2FzZSAmJgorCWdpdCBhZGQgQ2FtZWxDYXNlICYmCisJY2FtZWw9JChnaXQgbHMtZmlsZXMgfCBncmVwIC1pIGNhbWVsY2FzZSkgJiYKKwl0ZXN0ICQoZWNobyAiJGNhbWVsIiB8IHdjIC1sKSA9IDEgJiYKKwl0ZXN0ICJ6JChnaXQgY2F0LWZpbGUgYmxvYiA6JGNhbWVsKSIgPSB6MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCB1bmljb2RlIG5vcm1hbGl6YXRpb24gdGVzdHMiICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHVuaWNvZGUgJiYKKwljZCB1bmljb2RlICYmCisJZ2l0IGNvbmZpZyBjb3JlLnByZWNvbXBvc2V1bmljb2RlIGZhbHNlICYmCisJdG91Y2ggIiRhdW1sY2RpYXIiICYmCisJZ2l0IGFkZCAiJGF1bWxjZGlhciIgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgJiYKKwlnaXQgbXYgJGF1bWxjZGlhciB0bXAgJiYKKwlnaXQgbXYgdG1wICIkYXVtbCIgJiYKKwlnaXQgY29tbWl0IC1tIHJlbmFtZSAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKworJHRlc3RfdW5pY29kZSAncmVuYW1lIChzaWxlbnQgdW5pY29kZSBub3JtYWxpemF0aW9uKScgJworCWdpdCBtdiAiJGF1bWxjZGlhciIgIiRhdW1sIiAmJgorCWdpdCBjb21taXQgLW0gcmVuYW1lCisnCisKKyR0ZXN0X3VuaWNvZGUgJ21lcmdlIChzaWxlbnQgdW5pY29kZSBub3JtYWxpemF0aW9uKScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBtZXJnZSB0b3BpYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENBU0VfSU5TRU5TSVRJVkVfRlMgJ2NoZWNrb3V0IHdpdGggbm8gcGF0aHNwZWMgYW5kIGEgY2FzZSBpbnNlbnNpdGl2ZSBmcycgJworCWdpdCBpbml0IHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKworCQk+R2l0d2ViICYmCisJCWdpdCBhZGQgR2l0d2ViICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBHaXR3ZWIiICYmCisKKwkJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHRvZG8gJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlta2RpciAtcCBnaXR3ZWIvc3ViZGlyICYmCisJCT5naXR3ZWIvc3ViZGlyL2ZpbGUgJiYKKwkJZ2l0IGFkZCBnaXR3ZWIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGdpdHdlYi9zdWJkaXIvZmlsZSIgJiYKKworCQlnaXQgY2hlY2tvdXQgbWFzdGVyCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNTEtd2luZG93cy1uYW1lZC1waXBlLnNoIGIvdC90MDA1MS13aW5kb3dzLW5hbWVkLXBpcGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTBhYzkyZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwNTEtd2luZG93cy1uYW1lZC1waXBlLnNoCkBAIC0wLDAgKzEsMTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdXaW5kb3dzIG5hbWVkIHBpcGVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBNSU5HVyAnb19hcHBlbmQgd3JpdGUgdG8gbmFtZWQgcGlwZScgJworCUdJVF9UUkFDRT0iJChwd2QpL2V4cGVjdCIgZ2l0IHN0YXR1cyA+L2Rldi9udWxsIDI+JjEgJiYKKwl7IHRlc3QtdG9vbCB3aW5kb3dzLW5hbWVkLXBpcGUgdDAwNTEgPmFjdHVhbCAyPiYxICYgfSAmJgorCXBpZD0kISAmJgorCXNsZWVwIDEgJiYKKwlHSVRfVFJBQ0U9Ly8uL3BpcGUvdDAwNTEgZ2l0IHN0YXR1cyA+L2Rldi9udWxsIDI+d2FybmluZyAmJgorCXdhaXQgJHBpZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDU1LWJleW9uZC1zeW1saW5rcy5zaCBiL3QvdDAwNTUtYmV5b25kLXN5bWxpbmtzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjNmZmNTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDU1LWJleW9uZC1zeW1saW5rcy5zaApAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndXBkYXRlLWluZGV4IGFuZCBhZGQgcmVmdXNlIHRvIGFkZCBiZXlvbmQgc3ltbGlua3MnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIHNldHVwICcKKwk+YSAmJgorCW1rZGlyIGIgJiYKKwlsbiAtcyBiIGMgJiYKKwk+Yy9kICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBhIGIvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICd1cGRhdGUtaW5kZXggLS1hZGQgYmV5b25kIHN5bWxpbmtzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBjL2QgJiYKKwkhICggZ2l0IGxzLWZpbGVzIHwgZ3JlcCBjL2QgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdhZGQgYmV5b25kIHN5bWxpbmtzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBjL2QgJiYKKwkhICggZ2l0IGxzLWZpbGVzIHwgZ3JlcCBjL2QgKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNTYtZ2l0LUMuc2ggYi90L3QwMDU2LWdpdC1DLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI2MzBlNzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDU2LWdpdC1DLnNoCkBAIC0wLDAgKzEsOTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSciLUMgPHBhdGg+IiBvcHRpb24gYW5kIGl0cyBlZmZlY3RzIG9uIG90aGVyIHBhdGgtcmVsYXRlZCBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCAtQyA8cGF0aD4iIHJ1bnMgZ2l0IGZyb20gdGhlIGRpcmVjdG9yeSA8cGF0aD4nICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGRpcjEgJiYKKwllY2hvIDEgPmRpcjEvYS50eHQgJiYKKwltc2c9ImluaXRpYWwgaW4gZGlyMSIgJiYKKwkoY2QgZGlyMSAmJiBnaXQgYWRkIGEudHh0ICYmIGdpdCBjb21taXQgLW0gIiRtc2ciKSAmJgorCWVjaG8gIiRtc2ciID5leHBlY3RlZCAmJgorCWdpdCAtQyBkaXIxIGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgLUMgPHBhdGg+IiB3aXRoIGFuIGVtcHR5IDxwYXRoPiBpcyBhIG5vLW9wJyAnCisJKAorCQlta2RpciAtcCBkaXIxL3N1YmRpciAmJgorCQljZCBkaXIxL3N1YmRpciAmJgorCQlnaXQgLUMgIiIgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXggPmFjdHVhbCAmJgorCQllY2hvIHN1YmRpci8gPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNdWx0aXBsZSAtQyBvcHRpb25zOiAiLUMgZGlyMSAtQyBkaXIyIiBpcyBlcXVpdmFsZW50IHRvICItQyBkaXIxL2RpcjIiJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBkaXIxL2RpcjIgJiYKKwllY2hvIDEgPmRpcjEvZGlyMi9iLnR4dCAmJgorCWdpdCAtQyBkaXIxL2RpcjIgYWRkIGIudHh0ICYmCisJbXNnPSJpbml0aWFsIGluIGRpcjEvZGlyMiIgJiYKKwllY2hvICIkbXNnIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgLUMgZGlyMS9kaXIyIGNvbW1pdCAtbSAiJG1zZyIgJiYKKwlnaXQgLUMgZGlyMSAtQyBkaXIyIGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0VmZmVjdCBvbiAtLWdpdC1kaXIgb3B0aW9uOiAiLUMgYyAtLWdpdC1kaXI9YS5naXQiIGlzIGVxdWl2YWxlbnQgdG8gIi0tZ2l0LWRpciBjL2EuZ2l0IicgJworCW1rZGlyIGMgJiYKKwlta2RpciBjL2EgJiYKKwlta2RpciBjL2EuZ2l0ICYmCisJKGNkIGMvYS5naXQgJiYgZ2l0IGluaXQgLS1iYXJlKSAmJgorCWVjaG8gMSA+Yy9hL2EudHh0ICYmCisJZ2l0IC0tZ2l0LWRpciBjL2EuZ2l0IC0td29yay10cmVlPWMvYSBhZGQgYS50eHQgJiYKKwlnaXQgLS1naXQtZGlyIGMvYS5naXQgLS13b3JrLXRyZWU9Yy9hIGNvbW1pdCAtbSAiaW5pdGlhbCIgJiYKKwlnaXQgLS1naXQtZGlyPWMvYS5naXQgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3RlZCAmJgorCWdpdCAtQyBjIC0tZ2l0LWRpcj1hLmdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPcmRlciBzaG91bGQgbm90IG1hdHRlcjogIi0tZ2l0LWRpcj1hLmdpdCAtQyBjIiBpcyBlcXVpdmFsZW50IHRvICItQyBjIC0tZ2l0LWRpcj1hLmdpdCInICcKKwlnaXQgLUMgYyAtLWdpdC1kaXI9YS5naXQgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3RlZCAmJgorCWdpdCAtLWdpdC1kaXI9YS5naXQgLUMgYyBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdFZmZlY3Qgb24gLS13b3JrLXRyZWUgb3B0aW9uOiAiLUMgYy9hLmdpdCAtLXdvcmstdHJlZT0uLi9hIiAgaXMgZXF1aXZhbGVudCB0byAiLS13b3JrLXRyZWU9Yy9hIC0tZ2l0LWRpcj1jL2EuZ2l0IicgJworCXJtIGMvYS9hLnR4dCAmJgorCWdpdCAtLWdpdC1kaXI9Yy9hLmdpdCAtLXdvcmstdHJlZT1jL2Egc3RhdHVzID5leHBlY3RlZCAmJgorCWdpdCAtQyBjL2EuZ2l0IC0td29yay10cmVlPS4uL2Egc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT3JkZXIgc2hvdWxkIG5vdCBtYXR0ZXI6ICItLXdvcmstdHJlZT0uLi9hIC1DIGMvYS5naXQiIGlzIGVxdWl2YWxlbnQgdG8gIi1DIGMvYS5naXQgLS13b3JrLXRyZWU9Li4vYSInICcKKwlnaXQgLUMgYy9hLmdpdCAtLXdvcmstdHJlZT0uLi9hIHN0YXR1cyA+ZXhwZWN0ZWQgJiYKKwlnaXQgLS13b3JrLXRyZWU9Li4vYSAtQyBjL2EuZ2l0IHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0VmZmVjdCBvbiAtLWdpdC1kaXIgYW5kIC0td29yay10cmVlIG9wdGlvbnMgLSAiLUMgYyAtLWdpdC1kaXI9YS5naXQgLS13b3JrLXRyZWU9YSIgaXMgZXF1aXZhbGVudCB0byAiLS1naXQtZGlyPWMvYS5naXQgLS13b3JrLXRyZWU9Yy9hIicgJworCWdpdCAtLWdpdC1kaXI9Yy9hLmdpdCAtLXdvcmstdHJlZT1jL2Egc3RhdHVzID5leHBlY3RlZCAmJgorCWdpdCAtQyBjIC0tZ2l0LWRpcj1hLmdpdCAtLXdvcmstdHJlZT1hIHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09yZGVyIHNob3VsZCBub3QgbWF0dGVyOiAiLUMgYyAtLWdpdC1kaXI9YS5naXQgLS13b3JrLXRyZWU9YSIgaXMgZXF1aXZhbGVudCB0byAiLS1naXQtZGlyPWEuZ2l0IC1DIGMgLS13b3JrLXRyZWU9YSInICcKKwlnaXQgLUMgYyAtLWdpdC1kaXI9YS5naXQgLS13b3JrLXRyZWU9YSBzdGF0dXMgPmV4cGVjdGVkICYmCisJZ2l0IC0tZ2l0LWRpcj1hLmdpdCAtQyBjIC0td29yay10cmVlPWEgc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT3JkZXIgc2hvdWxkIG5vdCBtYXR0ZXI6ICItQyBjIC0tZ2l0LWRpcj1hLmdpdCAtLXdvcmstdHJlZT1hIiBpcyBlcXVpdmFsZW50IHRvICItLWdpdC1kaXI9YS5naXQgLS13b3JrLXRyZWU9YSAtQyBjIicgJworCWdpdCAtQyBjIC0tZ2l0LWRpcj1hLmdpdCAtLXdvcmstdHJlZT1hIHN0YXR1cyA+ZXhwZWN0ZWQgJiYKKwlnaXQgLS1naXQtZGlyPWEuZ2l0IC0td29yay10cmVlPWEgLUMgYyBzdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZWxhdGl2ZSBmb2xsb3dlZCBieSBmdWxscGF0aDogIi1DIC4vaGVyZSAtQyAvdGhlcmUiIGlzIGVxdWl2YWxlbnQgdG8gIi1DIC90aGVyZSInICcKKwllY2hvICJpbml0aWFsIGluIGRpcjEvZGlyMiIgPmV4cGVjdGVkICYmCisJZ2l0IC1DIGRpcjEgLUMgIiQocHdkKS9kaXIxL2RpcjIiIGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA2MC1wYXRoLXV0aWxzLnNoIGIvdC90MDA2MC1wYXRoLXV0aWxzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2ZGI1YzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDYwLXBhdGgtdXRpbHMuc2gKQEAgLTAsMCArMSw0OTggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggRGF2aWQgUmVpc3MKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB2YXJpb3VzIHBhdGggdXRpbGl0aWVzJworCisuIC4vdGVzdC1saWIuc2gKKworbm9ybV9wYXRoKCkgeworCWV4cGVjdGVkPSQodGVzdC10b29sIHBhdGgtdXRpbHMgcHJpbnRfcGF0aCAiJDIiKQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJDMgIm5vcm1hbGl6ZSBwYXRoOiAkMSA9PiAkMiIgXAorCSJ0ZXN0IFwiXCQodGVzdC10b29sIHBhdGgtdXRpbHMgbm9ybWFsaXplX3BhdGhfY29weSAnJDEnKVwiID0gJyRleHBlY3RlZCciCit9CisKK3JlbGF0aXZlX3BhdGgoKSB7CisJZXhwZWN0ZWQ9JCh0ZXN0LXRvb2wgcGF0aC11dGlscyBwcmludF9wYXRoICIkMyIpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkNCAicmVsYXRpdmUgcGF0aDogJDEgJDIgPT4gJDMiIFwKKwkidGVzdCBcIlwkKHRlc3QtdG9vbCBwYXRoLXV0aWxzIHJlbGF0aXZlX3BhdGggJyQxJyAnJDInKVwiID0gJyRleHBlY3RlZCciCit9CisKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJ0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmw6ICQxICQyICQzID0+ICQ0IiAiCisJCWFjdHVhbD1cJChnaXQgc3VibW9kdWxlLS1oZWxwZXIgcmVzb2x2ZS1yZWxhdGl2ZS11cmwtdGVzdCAnJDEnICckMicgJyQzJykgJiYKKwkJdGVzdCBcIlwkYWN0dWFsXCIgPSAnJDQnCisJIgorfQorCit0ZXN0X2dpdF9wYXRoKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdC1wYXRoICQxICQyID0+ICQzIiAiCisJCSQxIGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCAkMiA+YWN0dWFsICYmCisJCWVjaG8gJDMgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJIgorfQorCisjIE9uIFdpbmRvd3MsIHdlIGFyZSB1c2luZyBNU1lTJ3MgYmFzaCwgd2hpY2ggbWFuZ2xlcyB0aGUgcGF0aHMuCisjIEFic29sdXRlIHBhdGhzIGFyZSBhbmNob3JlZCBhdCB0aGUgTVNZUyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LAorIyB3aGljaCBtZWFucyB0aGF0IHRoZSBwYXRoIC8gYWNjb3VudHMgZm9yIHRoaXMgbWFueSBjaGFyYWN0ZXJzOgorcm9vdG9mZj0kKHRlc3QtdG9vbCBwYXRoLXV0aWxzIG5vcm1hbGl6ZV9wYXRoX2NvcHkgLyB8IHdjIC1jKQorIyBBY2NvdW50IGZvciB0aGUgdHJhaWxpbmcgTEY6CitpZiB0ZXN0ICRyb290b2ZmID0gMjsgdGhlbgorCXJvb3RvZmY9CSMgd2UgYXJlIG9uIFVuaXgKK2Vsc2UKKwlyb290b2ZmPSQoKCRyb290b2ZmLTEpKQorCSMgSW4gTVNZUzIsIHRoZSByb290IGRpcmVjdG9yeSAiLyIgaXMgdHJhbnNsYXRlZCBpbnRvIGEgV2luZG93cworCSMgZGlyZWN0b3J5ICp3aXRoKiB0cmFpbGluZyBzbGFzaC4gTGV0J3MgdGVzdCBmb3IgdGhhdCBhbmQgYWRqdXN0CisJIyBvdXIgZXhwZWN0ZWQgbG9uZ2VzdCBhbmNlc3RvciBsZW5ndGggYWNjb3JkaW5nbHkuCisJY2FzZSAiJCh0ZXN0LXRvb2wgcGF0aC11dGlscyBwcmludF9wYXRoIC8pIiBpbgorCSovKSByb290c2xhc2g9MTs7CisJKikgcm9vdHNsYXNoPTA7OworCWVzYWMKK2ZpCisKK2FuY2VzdG9yKCkgeworCSMgV2UgZG8gc29tZSBtYXRoIHdpdGggdGhlIGV4cGVjdGVkIGFuY2VzdG9yIGxlbmd0aC4KKwlleHBlY3RlZD0kMworCWlmIHRlc3QgLW4gIiRyb290b2ZmIiAmJiB0ZXN0ICJ4JGV4cGVjdGVkIiAhPSB4LTE7IHRoZW4KKwkJZXhwZWN0ZWQ9JCgoJGV4cGVjdGVkLSRyb290c2xhc2gpKQorCQl0ZXN0ICRleHBlY3RlZCAtbHQgMCB8fAorCQlleHBlY3RlZD0kKCgkZXhwZWN0ZWQrJHJvb3RvZmYpKQorCWZpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAibG9uZ2VzdCBhbmNlc3RvcjogJDEgJDIgPT4gJGV4cGVjdGVkIiBcCisJImFjdHVhbD1cJCh0ZXN0LXRvb2wgcGF0aC11dGlscyBsb25nZXN0X2FuY2VzdG9yX2xlbmd0aCAnJDEnICckMicpICYmCisJIHRlc3QgXCJcJGFjdHVhbFwiID0gJyRleHBlY3RlZCciCit9CisKKyMgU29tZSBhYnNvbHV0ZSBwYXRoIHRlc3RzIHNob3VsZCBiZSBza2lwcGVkIG9uIFdpbmRvd3MgZHVlIHRvIHBhdGggbWFuZ2xpbmcKKyMgb24gUE9TSVgtc3R5bGUgYWJzb2x1dGUgcGF0aHMKK2Nhc2UgJCh1bmFtZSAtcykgaW4KKypNSU5HVyopCisJOzsKKypDWUdXSU4qKQorCTs7CisqKQorCXRlc3Rfc2V0X3ByZXJlcSBQT1NJWAorCTs7Citlc2FjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgYmFzZW5hbWUgJ3Rlc3QtdG9vbCBwYXRoLXV0aWxzIGJhc2VuYW1lJwordGVzdF9leHBlY3Rfc3VjY2VzcyBkaXJuYW1lICd0ZXN0LXRvb2wgcGF0aC11dGlscyBkaXJuYW1lJworCitub3JtX3BhdGggIiIgIiIKK25vcm1fcGF0aCAuICIiCitub3JtX3BhdGggLi8gIiIKK25vcm1fcGF0aCAuLy4gIiIKK25vcm1fcGF0aCAuLy4uICsrZmFpbGVkKysKK25vcm1fcGF0aCAuLi8uICsrZmFpbGVkKysKK25vcm1fcGF0aCAuLy4uLy4vLyArK2ZhaWxlZCsrCitub3JtX3BhdGggZGlyLy4uICIiCitub3JtX3BhdGggZGlyL3N1Yi8uLi8uLiAiIgorbm9ybV9wYXRoIGRpci9zdWIvLi4vLi4vLi4gKytmYWlsZWQrKworbm9ybV9wYXRoIGRpciBkaXIKK25vcm1fcGF0aCBkaXIvLyBkaXIvCitub3JtX3BhdGggLi9kaXIgZGlyCitub3JtX3BhdGggZGlyLy4gZGlyLworbm9ybV9wYXRoIGRpci8vLy4vIGRpci8KK25vcm1fcGF0aCBkaXIvL3N1Yi8uLiBkaXIvCitub3JtX3BhdGggZGlyL3N1Yi8uLi8gZGlyLworbm9ybV9wYXRoIGRpci9zdWIvLi4vLiBkaXIvCitub3JtX3BhdGggZGlyL3MxLy4uL3MyLyBkaXIvczIvCitub3JtX3BhdGggZDEvczEvLy9zMi8uLi8vLi4vczMvIGQxL3MzLworbm9ybV9wYXRoIGQxL3MxLy8uLi9zMi8uLi8uLi9kMiBkMgorbm9ybV9wYXRoIGQxLy4uLi9kMiBkMS8uLi4vZDIKK25vcm1fcGF0aCBkMS8uLi4vLi8uLi9kMiBkMS9kMgorCitub3JtX3BhdGggLyAvCitub3JtX3BhdGggLy8gLyBQT1NJWAorbm9ybV9wYXRoIC8vLyAvIFBPU0lYCitub3JtX3BhdGggLy4gLworbm9ybV9wYXRoIC8uLyAvIFBPU0lYCitub3JtX3BhdGggLy4vLi4gKytmYWlsZWQrKyBQT1NJWAorbm9ybV9wYXRoIC8uLi8uICsrZmFpbGVkKysKK25vcm1fcGF0aCAvLi8uLi8uLy8gKytmYWlsZWQrKyBQT1NJWAorbm9ybV9wYXRoIC9kaXIvLi4gLyBQT1NJWAorbm9ybV9wYXRoIC9kaXIvc3ViLy4uLy4uIC8gUE9TSVgKK25vcm1fcGF0aCAvZGlyL3N1Yi8uLi8uLi8uLiArK2ZhaWxlZCsrIFBPU0lYCitub3JtX3BhdGggL2RpciAvZGlyCitub3JtX3BhdGggL2Rpci8vIC9kaXIvCitub3JtX3BhdGggLy4vZGlyIC9kaXIKK25vcm1fcGF0aCAvZGlyLy4gL2Rpci8KK25vcm1fcGF0aCAvZGlyLy8vLi8gL2Rpci8KK25vcm1fcGF0aCAvZGlyLy9zdWIvLi4gL2Rpci8KK25vcm1fcGF0aCAvZGlyL3N1Yi8uLi8gL2Rpci8KK25vcm1fcGF0aCAvL2Rpci9zdWIvLi4vLiAvZGlyLyBQT1NJWAorbm9ybV9wYXRoIC9kaXIvczEvLi4vczIvIC9kaXIvczIvCitub3JtX3BhdGggL2QxL3MxLy8vczIvLi4vLy4uL3MzLyAvZDEvczMvCitub3JtX3BhdGggL2QxL3MxLy8uLi9zMi8uLi8uLi9kMiAvZDIKK25vcm1fcGF0aCAvZDEvLi4uL2QyIC9kMS8uLi4vZDIKK25vcm1fcGF0aCAvZDEvLi4uLy4vLi4vZDIgL2QxL2QyCisKK2FuY2VzdG9yIC8gLyAtMQorYW5jZXN0b3IgL2ZvbyAvIDAKK2FuY2VzdG9yIC9mb28gL2ZvIC0xCithbmNlc3RvciAvZm9vIC9mb28gLTEKK2FuY2VzdG9yIC9mb28gL2JhciAtMQorYW5jZXN0b3IgL2ZvbyAvZm9vL2JhciAtMQorYW5jZXN0b3IgL2ZvbyAvZm9vOi9iYXIgLTEKK2FuY2VzdG9yIC9mb28gLzovZm9vOi9iYXIgMAorYW5jZXN0b3IgL2ZvbyAvZm9vOi86L2JhciAwCithbmNlc3RvciAvZm9vIC86L2JhcjovZm9vIDAKK2FuY2VzdG9yIC9mb28vYmFyIC8gMAorYW5jZXN0b3IgL2Zvby9iYXIgL2ZvIC0xCithbmNlc3RvciAvZm9vL2JhciAvZm9vIDQKK2FuY2VzdG9yIC9mb28vYmFyIC9mb28vYmEgLTEKK2FuY2VzdG9yIC9mb28vYmFyIC86L2ZvIDAKK2FuY2VzdG9yIC9mb28vYmFyIC9mb286L2Zvby9iYSA0CithbmNlc3RvciAvZm9vL2JhciAvYmFyIC0xCithbmNlc3RvciAvZm9vL2JhciAvZm8gLTEKK2FuY2VzdG9yIC9mb28vYmFyIC9mb286L2JhciA0CithbmNlc3RvciAvZm9vL2JhciAvOi9mb286L2JhciA0CithbmNlc3RvciAvZm9vL2JhciAvZm9vOi86L2JhciA0CithbmNlc3RvciAvZm9vL2JhciAvOi9iYXI6L2ZvIDAKK2FuY2VzdG9yIC9mb28vYmFyIC86L2JhciAwCithbmNlc3RvciAvZm9vL2JhciAvZm9vIDQKK2FuY2VzdG9yIC9mb28vYmFyIC9mb286L2JhciA0CithbmNlc3RvciAvZm9vL2JhciAvYmFyIC0xCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmlwX3BhdGhfc3VmZml4JyAnCisJdGVzdCBjOi9tc3lzZ2l0ID0gJCh0ZXN0LXRvb2wgcGF0aC11dGlscyBzdHJpcF9wYXRoX3N1ZmZpeCBcCisJCWM6L21zeXNnaXQvbGliZXhlYy8vZ2l0LWNvcmUgbGliZXhlYy9naXQtY29yZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb2x1dGUgcGF0aCByZWplY3RzIHRoZSBlbXB0eSBzdHJpbmcnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgcGF0aC11dGlscyBhYnNvbHV0ZV9wYXRoICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJzxkcml2ZS1sZXR0ZXI+OlxcYWJjIGlzIGFuIGFic29sdXRlIHBhdGgnICcKKwlmb3IgbGV0dGVyIGluIDogXCIgQyBaIDEgw6QKKwlkbworCQlwYXRoPSRsZXR0ZXI6XFxhYmMgJiYKKwkJYWJzb2x1dGU9IiQodGVzdC10b29sIHBhdGgtdXRpbHMgYWJzb2x1dGVfcGF0aCAiJHBhdGgiKSIgJiYKKwkJdGVzdCAiJHBhdGgiID0gIiRhYnNvbHV0ZSIgfHwgcmV0dXJuIDEKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWwgcGF0aCByZWplY3RzIHRoZSBlbXB0eSBzdHJpbmcnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWCAncmVhbCBwYXRoIHdvcmtzIG9uIGFic29sdXRlIHBhdGhzIDEnICcKKwlub3BhdGg9ImhvcGVmdWxseS1hYnNlbnQtcGF0aCIgJiYKKwl0ZXN0ICIvIiA9ICIkKHRlc3QtdG9vbCBwYXRoLXV0aWxzIHJlYWxfcGF0aCAiLyIpIiAmJgorCXRlc3QgIi8kbm9wYXRoIiA9ICIkKHRlc3QtdG9vbCBwYXRoLXV0aWxzIHJlYWxfcGF0aCAiLyRub3BhdGgiKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhbCBwYXRoIHdvcmtzIG9uIGFic29sdXRlIHBhdGhzIDInICcKKwlub3BhdGg9ImhvcGVmdWxseS1hYnNlbnQtcGF0aCIgJiYKKwkjIEZpbmQgYW4gZXhpc3RpbmcgdG9wLWxldmVsIGRpcmVjdG9yeSBmb3IgdGhlIHJlbWFpbmluZyB0ZXN0czoKKwlkPSQocHdkIC1QIHwgc2VkIC1lICJzfF5cKFteL10qL1teL10qXCkvLip8XDF8IikgJiYKKwl0ZXN0ICIkZCIgPSAiJCh0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIiRkIikiICYmCisJdGVzdCAiJGQvJG5vcGF0aCIgPSAiJCh0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIiRkLyRub3BhdGgiKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWCAncmVhbCBwYXRoIHJlbW92ZXMgZXh0cmEgbGVhZGluZyBzbGFzaGVzJyAnCisJbm9wYXRoPSJob3BlZnVsbHktYWJzZW50LXBhdGgiICYmCisJdGVzdCAiLyIgPSAiJCh0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIi8vLyIpIiAmJgorCXRlc3QgIi8kbm9wYXRoIiA9ICIkKHRlc3QtdG9vbCBwYXRoLXV0aWxzIHJlYWxfcGF0aCAiLy8vJG5vcGF0aCIpIiAmJgorCSMgRmluZCBhbiBleGlzdGluZyB0b3AtbGV2ZWwgZGlyZWN0b3J5IGZvciB0aGUgcmVtYWluaW5nIHRlc3RzOgorCWQ9JChwd2QgLVAgfCBzZWQgLWUgInN8XlwoW14vXSovW14vXSpcKS8uKnxcMXwiKSAmJgorCXRlc3QgIiRkIiA9ICIkKHRlc3QtdG9vbCBwYXRoLXV0aWxzIHJlYWxfcGF0aCAiLy8kZCIpIiAmJgorCXRlc3QgIiRkLyRub3BhdGgiID0gIiQodGVzdC10b29sIHBhdGgtdXRpbHMgcmVhbF9wYXRoICIvLyRkLyRub3BhdGgiKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhbCBwYXRoIHJlbW92ZXMgb3RoZXIgZXh0cmEgc2xhc2hlcycgJworCW5vcGF0aD0iaG9wZWZ1bGx5LWFic2VudC1wYXRoIiAmJgorCSMgRmluZCBhbiBleGlzdGluZyB0b3AtbGV2ZWwgZGlyZWN0b3J5IGZvciB0aGUgcmVtYWluaW5nIHRlc3RzOgorCWQ9JChwd2QgLVAgfCBzZWQgLWUgInN8XlwoW14vXSovW14vXSpcKS8uKnxcMXwiKSAmJgorCXRlc3QgIiRkIiA9ICIkKHRlc3QtdG9vbCBwYXRoLXV0aWxzIHJlYWxfcGF0aCAiJGQvLy8iKSIgJiYKKwl0ZXN0ICIkZC8kbm9wYXRoIiA9ICIkKHRlc3QtdG9vbCBwYXRoLXV0aWxzIHJlYWxfcGF0aCAiJGQvLy8kbm9wYXRoIikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3JlYWwgcGF0aCB3b3JrcyBvbiBzeW1saW5rcycgJworCW1rZGlyIGZpcnN0ICYmCisJbG4gLXMgLi4vLmdpdCBmaXJzdC8uZ2l0ICYmCisJbWtkaXIgc2Vjb25kICYmCisJbG4gLXMgLi4vZmlyc3Qgc2Vjb25kL290aGVyICYmCisJbWtkaXIgdGhpcmQgJiYKKwlkaXI9IiQoY2QgLmdpdDsgcHdkIC1QKSIgJiYKKwlkaXIyPXRoaXJkLy4uL3NlY29uZC9vdGhlci8uZ2l0ICYmCisJdGVzdCAiJGRpciIgPSAiJCh0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggJGRpcjIpIiAmJgorCWZpbGU9IiRkaXIiL2luZGV4ICYmCisJdGVzdCAiJGZpbGUiID0gIiQodGVzdC10b29sIHBhdGgtdXRpbHMgcmVhbF9wYXRoICRkaXIyL2luZGV4KSIgJiYKKwliYXNlbmFtZT1ibHViICYmCisJdGVzdCAiJGRpci8kYmFzZW5hbWUiID0gIiQoY2QgLmdpdCAmJiB0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIiRiYXNlbmFtZSIpIiAmJgorCWxuIC1zIC4uL2ZpcnN0L2ZpbGUgLmdpdC9zeW1sICYmCisJc3ltPSIkKGNkIGZpcnN0OyBwd2QgLVApIi9maWxlICYmCisJdGVzdCAiJHN5bSIgPSAiJCh0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIiRkaXIyL3N5bWwiKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAncHJlZml4X3BhdGggd29ya3Mgd2l0aCBhYnNvbHV0ZSBwYXRocyB0byB3b3JrIHRyZWUgc3ltbGlua3MnICcKKwlsbiAtcyB0YXJnZXQgc3ltbGluayAmJgorCXRlc3QgIiQodGVzdC10b29sIHBhdGgtdXRpbHMgcHJlZml4X3BhdGggcHJlZml4ICIkKHB3ZCkvc3ltbGluayIpIiA9ICJzeW1saW5rIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVmaXhfcGF0aCB3b3JrcyB3aXRoIG9ubHkgYWJzb2x1dGUgcGF0aCB0byB3b3JrIHRyZWUnICcKKwllY2hvICIiID5leHBlY3RlZCAmJgorCXRlc3QtdG9vbCBwYXRoLXV0aWxzIHByZWZpeF9wYXRoIHByZWZpeCAiJChwd2QpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWZpeF9wYXRoIHJlamVjdHMgYWJzb2x1dGUgcGF0aCB0byBkaXIgd2l0aCBzYW1lIGJlZ2lubmluZyBhcyB3b3JrIHRyZWUnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgcGF0aC11dGlscyBwcmVmaXhfcGF0aCBwcmVmaXggIiQocHdkKWEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3ByZWZpeF9wYXRoIHdvcmtzIHdpdGggYWJzb2x1dGUgcGF0aCB0byBhIHN5bWxpbmsgdG8gd29yayB0cmVlIGhhdmluZyAgc2FtZSBiZWdpbm5pbmcgYXMgd29yayB0cmVlJyAnCisJZ2l0IGluaXQgcmVwbyAmJgorCWxuIC1zIHJlcG8gcmVwb2xpbmsgJiYKKwl0ZXN0ICJhIiA9ICIkKGNkIHJlcG8gJiYgdGVzdC10b29sIHBhdGgtdXRpbHMgcHJlZml4X3BhdGggcHJlZml4ICIkKHB3ZCkvLi4vcmVwb2xpbmsvYSIpIgorJworCityZWxhdGl2ZV9wYXRoIC9mb28vYS9iL2MvCS9mb28vYS9iLwljLworcmVsYXRpdmVfcGF0aCAvZm9vL2EvYi9jLwkvZm9vL2EvYgljLworcmVsYXRpdmVfcGF0aCAvZm9vL2EvL2IvL2MvCS8vL2Zvby9hL2IvLwljLwkJUE9TSVgKK3JlbGF0aXZlX3BhdGggL2Zvby9hL2IJCS9mb28vYS9iCS4vCityZWxhdGl2ZV9wYXRoIC9mb28vYS9iLwkJL2Zvby9hL2IJLi8KK3JlbGF0aXZlX3BhdGggL2Zvby9hCQkvZm9vL2EvYgkuLi8KK3JlbGF0aXZlX3BhdGggLwkJCS9mb28vYS9iLwkuLi8uLi8uLi8KK3JlbGF0aXZlX3BhdGggL2Zvby9hL2MJCS9mb28vYS9iLwkuLi9jCityZWxhdGl2ZV9wYXRoIC9mb28vYS9jCQkvZm9vL2EvYgkuLi9jCityZWxhdGl2ZV9wYXRoIC9mb28veC95CQkvZm9vL2EvYi8JLi4vLi4veC95CityZWxhdGl2ZV9wYXRoIC9mb28vYS9iCQkiPGVtcHR5PiIJL2Zvby9hL2IKK3JlbGF0aXZlX3BhdGggL2Zvby9hL2IgCQkiPG51bGw+IgkvZm9vL2EvYgorcmVsYXRpdmVfcGF0aCBmb28vYS9iL2MvCWZvby9hL2IvCWMvCityZWxhdGl2ZV9wYXRoIGZvby9hL2IvYy8JZm9vL2EvYgkJYy8KK3JlbGF0aXZlX3BhdGggZm9vL2EvYi8vYwlmb28vYS8vYgljCityZWxhdGl2ZV9wYXRoIGZvby9hL2IvCQlmb28vYS9iLwkuLworcmVsYXRpdmVfcGF0aCBmb28vYS9iLwkJZm9vL2EvYgkJLi8KK3JlbGF0aXZlX3BhdGggZm9vL2EJCWZvby9hL2IJCS4uLworcmVsYXRpdmVfcGF0aCBmb28veC95CQlmb28vYS9iCQkuLi8uLi94L3kKK3JlbGF0aXZlX3BhdGggZm9vL2EvYwkJZm9vL2EvYgkJLi4vYworcmVsYXRpdmVfcGF0aCBmb28vYS9iCQkvZm9vL3gveQlmb28vYS9iCityZWxhdGl2ZV9wYXRoIC9mb28vYS9iCQlmb28veC95CQkvZm9vL2EvYgorcmVsYXRpdmVfcGF0aCBkOi9hL2IJCUQ6L2EvYwkJLi4vYgkJTUlOR1cKK3JlbGF0aXZlX3BhdGggQzovYS9iCQlEOi9hL2MJCUM6L2EvYgkJTUlOR1cKK3JlbGF0aXZlX3BhdGggZm9vL2EvYgkJIjxlbXB0eT4iCWZvby9hL2IKK3JlbGF0aXZlX3BhdGggZm9vL2EvYiAJCSI8bnVsbD4iCWZvby9hL2IKK3JlbGF0aXZlX3BhdGggIjxlbXB0eT4iCQkvZm9vL2EvYgkuLworcmVsYXRpdmVfcGF0aCAiPGVtcHR5PiIJCSI8ZW1wdHk+IgkuLworcmVsYXRpdmVfcGF0aCAiPGVtcHR5PiIJCSI8bnVsbD4iCS4vCityZWxhdGl2ZV9wYXRoICI8bnVsbD4iCQkiPGVtcHR5PiIJLi8KK3JlbGF0aXZlX3BhdGggIjxudWxsPiIJCSI8bnVsbD4iCS4vCityZWxhdGl2ZV9wYXRoICI8bnVsbD4iCQkvZm9vL2EvYgkuLworCit0ZXN0X2dpdF9wYXRoIEE9QiAgICAgICAgICAgICAgICBpbmZvL2dyYWZ0cyAuZ2l0L2luZm8vZ3JhZnRzCit0ZXN0X2dpdF9wYXRoIEdJVF9HUkFGVF9GSUxFPWZvbyBpbmZvL2dyYWZ0cyBmb28KK3Rlc3RfZ2l0X3BhdGggR0lUX0dSQUZUX0ZJTEU9Zm9vIGluZm8vLy8vL2dyYWZ0cyBmb28KK3Rlc3RfZ2l0X3BhdGggR0lUX0lOREVYX0ZJTEU9Zm9vIGluZGV4IGZvbwordGVzdF9naXRfcGF0aCBHSVRfSU5ERVhfRklMRT1mb28gaW5kZXgvZm9vIC5naXQvaW5kZXgvZm9vCit0ZXN0X2dpdF9wYXRoIEdJVF9JTkRFWF9GSUxFPWZvbyBpbmRleDIgLmdpdC9pbmRleDIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZha2Ugb2JqZWN0cyBkaXJlY3RvcnkgZm9vJyAnbWtkaXIgZm9vJwordGVzdF9naXRfcGF0aCBHSVRfT0JKRUNUX0RJUkVDVE9SWT1mb28gb2JqZWN0cyBmb28KK3Rlc3RfZ2l0X3BhdGggR0lUX09CSkVDVF9ESVJFQ1RPUlk9Zm9vIG9iamVjdHMvZm9vIGZvby9mb28KK3Rlc3RfZ2l0X3BhdGggR0lUX09CSkVDVF9ESVJFQ1RPUlk9Zm9vIG9iamVjdHMyIC5naXQvb2JqZWN0czIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbW1vbiByZXBvc2l0b3J5JyAnZ2l0IC0tZ2l0LWRpcj1iYXIgaW5pdCcKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGluZGV4ICAgICAgICAgICAgICAgICAgICAuZ2l0L2luZGV4Cit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBpbmRleC5sb2NrICAgICAgICAgICAgICAgLmdpdC9pbmRleC5sb2NrCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBIRUFEICAgICAgICAgICAgICAgICAgICAgLmdpdC9IRUFECit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL0hFQUQgICAgICAgICAgICAgICAgLmdpdC9sb2dzL0hFQUQKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvSEVBRC5sb2NrICAgICAgICAgICAuZ2l0L2xvZ3MvSEVBRC5sb2NrCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL3JlZnMvYmlzZWN0L2ZvbyAgICAgLmdpdC9sb2dzL3JlZnMvYmlzZWN0L2ZvbwordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9yZWZzICAgICAgICAgICAgICAgIGJhci9sb2dzL3JlZnMKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvcmVmcy8gICAgICAgICAgICAgICBiYXIvbG9ncy9yZWZzLwordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9yZWZzL2Jpc2VjL2ZvbyAgICAgIGJhci9sb2dzL3JlZnMvYmlzZWMvZm9vCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL3JlZnMvYmlzZWMgICAgICAgICAgYmFyL2xvZ3MvcmVmcy9iaXNlYwordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9yZWZzL2Jpc2VjdGZvbyAgICAgIGJhci9sb2dzL3JlZnMvYmlzZWN0Zm9vCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBvYmplY3RzICAgICAgICAgICAgICAgICAgYmFyL29iamVjdHMKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIG9iamVjdHMvYmFyICAgICAgICAgICAgICBiYXIvb2JqZWN0cy9iYXIKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGluZm8vZXhjbHVkZSAgICAgICAgICAgICBiYXIvaW5mby9leGNsdWRlCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBpbmZvL2dyYWZ0cyAgICAgICAgICAgICAgYmFyL2luZm8vZ3JhZnRzCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBpbmZvL3NwYXJzZS1jaGVja291dCAgICAgLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dAordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgaW5mby8vc3BhcnNlLWNoZWNrb3V0ICAgIC5naXQvaW5mby8vc3BhcnNlLWNoZWNrb3V0Cit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciByZW1vdGVzL2JhciAgICAgICAgICAgICAgYmFyL3JlbW90ZXMvYmFyCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBicmFuY2hlcy9iYXIgICAgICAgICAgICAgYmFyL2JyYW5jaGVzL2JhcgordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9yZWZzL2hlYWRzL21hc3RlciAgIGJhci9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciByZWZzL2hlYWRzL21hc3RlciAgICAgICAgYmFyL3JlZnMvaGVhZHMvbWFzdGVyCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciByZWZzL2Jpc2VjdC9mb28gICAgICAgICAgLmdpdC9yZWZzL2Jpc2VjdC9mb28KK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGhvb2tzL21lICAgICAgICAgICAgICAgICBiYXIvaG9va3MvbWUKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGNvbmZpZyAgICAgICAgICAgICAgICAgICBiYXIvY29uZmlnCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBwYWNrZWQtcmVmcyAgICAgICAgICAgICAgYmFyL3BhY2tlZC1yZWZzCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBzaGFsbG93ICAgICAgICAgICAgICAgICAgYmFyL3NoYWxsb3cKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGNvbW1vbiAgICAgICAgICAgICAgICAgICBiYXIvY29tbW9uCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBjb21tb24vZmlsZSAgICAgICAgICAgICAgYmFyL2NvbW1vbi9maWxlCisKKyMgSW4gdGhlIHRlc3RzIGJlbG93LCAkKHB3ZCkgbXVzdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgYSBuYXRpdmUgcGF0aCBvbgorIyBXaW5kb3dzIGFuZCBhdm9pZHMgTVNZUydzIHBhdGggbWFuZ2xpbmcgKHdoaWNoIHNpbXBsaWZpZXMgImZvby8uLi9iYXIiIGFuZAorIyBzdHJpcHMgdGhlIGRvdCBmcm9tIHRyYWlsaW5nICIvLiIpLgorCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIi4uLyIgIi4uL2ZvbyIgIi4uL3N1Ym1vZHVsZSIgIi4uLy4uL3N1Ym1vZHVsZSIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiLi4vIiAiLi4vZm9vL2JhciIgIi4uL3N1Ym1vZHVsZSIgIi4uLy4uL2Zvby9zdWJtb2R1bGUiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIi4uLyIgIi4uL2Zvby9zdWJtb2R1bGUiICIuLi9zdWJtb2R1bGUiICIuLi8uLi9mb28vc3VibW9kdWxlIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIuLi8iICIuL2ZvbyIgIi4uL3N1Ym1vZHVsZSIgIi4uL3N1Ym1vZHVsZSIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiLi4vIiAiLi9mb28vYmFyIiAiLi4vc3VibW9kdWxlIiAiLi4vZm9vL3N1Ym1vZHVsZSIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiLi4vLi4vLi4vIiAiLi4vZm9vL2JhciIgIi4uL3N1Yi9hL2IvYyIgIi4uLy4uLy4uLy4uL2Zvby9zdWIvYS9iL2MiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIi4uLyIgIiQocHdkKS9hZGR0ZXN0IiAiLi4vcmVwbyIgIiQocHdkKS9yZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIuLi8iICJmb28vYmFyIiAiLi4vc3VibW9kdWxlIiAiLi4vZm9vL3N1Ym1vZHVsZSIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiLi4vIiAiZm9vIiAiLi4vc3VibW9kdWxlIiAiLi4vc3VibW9kdWxlIgorCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgIi4uL2Zvby9iYXIiICIuLi9zdWIvYS9iL2MiICIuLi9mb28vc3ViL2EvYi9jIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIuLi9mb28vYmFyIiAiLi4vc3ViL2EvYi9jLyIgIi4uL2Zvby9zdWIvYS9iL2MiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgIi4uL2Zvby9iYXIvIiAiLi4vc3ViL2EvYi9jIiAiLi4vZm9vL3N1Yi9hL2IvYyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiLi4vZm9vL2JhciIgIi4uL3N1Ym1vZHVsZSIgIi4uL2Zvby9zdWJtb2R1bGUiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgIi4uL2Zvby9zdWJtb2R1bGUiICIuLi9zdWJtb2R1bGUiICIuLi9mb28vc3VibW9kdWxlIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIuLi9mb28iICIuLi9zdWJtb2R1bGUiICIuLi9zdWJtb2R1bGUiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgIi4vZm9vL2JhciIgIi4uL3N1Ym1vZHVsZSIgImZvby9zdWJtb2R1bGUiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgIi4vZm9vIiAiLi4vc3VibW9kdWxlIiAic3VibW9kdWxlIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIvL3NvbWV3aGVyZSBlbHNlL3JlcG8iICIuLi9zdWJyZXBvIiAiLy9zb21ld2hlcmUgZWxzZS9zdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIvL3NvbWV3aGVyZSBlbHNlL3JlcG8iICIuLi8uLi9zdWJyZXBvIiAiLy9zdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIvL3NvbWV3aGVyZSBlbHNlL3JlcG8iICIuLi8uLi8uLi9zdWJyZXBvIiAiL3N1YnJlcG8iCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgIi8vc29tZXdoZXJlIGVsc2UvcmVwbyIgIi4uLy4uLy4uLy4uL3N1YnJlcG8iICJzdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIkKHB3ZCkvc3Vic3VwZXJfdXBkYXRlX3IiICIuLi9zdWJzdWJzdXBlcl91cGRhdGVfciIgIiQocHdkKS9zdWJzdWJzdXBlcl91cGRhdGVfciIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiJChwd2QpL3N1cGVyX3VwZGF0ZV9yMiIgIi4uL3N1YnN1cGVyX3VwZGF0ZV9yIiAiJChwd2QpL3N1YnN1cGVyX3VwZGF0ZV9yIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIkKHB3ZCkvLiIgIi4uLy4iICIkKHB3ZCkvLiIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiJChwd2QpIiAiLi8uIiAiJChwd2QpLy4iCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgIiQocHdkKS9hZGR0ZXN0IiAiLi4vcmVwbyIgIiQocHdkKS9yZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIkKHB3ZCkiICIuL8OlIMOkw7YiICIkKHB3ZCkvw6Ugw6TDtiIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiJChwd2QpLy4iICIuLi9zdWJtb2R1bGUiICIkKHB3ZCkvc3VibW9kdWxlIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIkKHB3ZCkvc3VibW9kdWxlIiAiLi4vc3VibW9kdWxlIiAiJChwd2QpL3N1Ym1vZHVsZSIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiJChwd2QpL2hvbWUyLy4uL3JlbW90ZSIgIi4uL2J1bmRsZTEiICIkKHB3ZCkvaG9tZTIvLi4vYnVuZGxlMSIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiJChwd2QpL3N1Ym1vZHVsZV91cGRhdGVfcmVwbyIgIi4vLiIgIiQocHdkKS9zdWJtb2R1bGVfdXBkYXRlX3JlcG8vLiIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiZmlsZTovLy90bXAvcmVwbyIgIi4uL3N1YnJlcG8iICJmaWxlOi8vL3RtcC9zdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICJmb28vYmFyIiAiLi4vc3VibW9kdWxlIiAiZm9vL3N1Ym1vZHVsZSIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiZm9vIiAiLi4vc3VibW9kdWxlIiAic3VibW9kdWxlIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICJoZWxwZXI6Oi8vaG9zdG5hbWUvcmVwbyIgIi4uL3N1YnJlcG8iICJoZWxwZXI6Oi8vaG9zdG5hbWUvc3VicmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiaGVscGVyOjovL2hvc3RuYW1lL3JlcG8iICIuLi8uLi9zdWJyZXBvIiAiaGVscGVyOjovL3N1YnJlcG8iCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgImhlbHBlcjo6Ly9ob3N0bmFtZS9yZXBvIiAiLi4vLi4vLi4vc3VicmVwbyIgImhlbHBlcjo6L3N1YnJlcG8iCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgImhlbHBlcjo6Ly9ob3N0bmFtZS9yZXBvIiAiLi4vLi4vLi4vLi4vc3VicmVwbyIgImhlbHBlcjo6c3VicmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiaGVscGVyOjovL2hvc3RuYW1lL3JlcG8iICIuLi8uLi8uLi8uLi8uLi9zdWJyZXBvIiAiaGVscGVyOnN1YnJlcG8iCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgImhlbHBlcjo6Ly9ob3N0bmFtZS9yZXBvIiAiLi4vLi4vLi4vLi4vLi4vLi4vc3VicmVwbyIgIi46c3VicmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAic3NoOi8vaG9zdG5hbWUvcmVwbyIgIi4uL3N1YnJlcG8iICJzc2g6Ly9ob3N0bmFtZS9zdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICJzc2g6Ly9ob3N0bmFtZS9yZXBvIiAiLi4vLi4vc3VicmVwbyIgInNzaDovL3N1YnJlcG8iCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgInNzaDovL2hvc3RuYW1lL3JlcG8iICIuLi8uLi8uLi9zdWJyZXBvIiAic3NoOi9zdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICJzc2g6Ly9ob3N0bmFtZS9yZXBvIiAiLi4vLi4vLi4vLi4vc3VicmVwbyIgInNzaDpzdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICJzc2g6Ly9ob3N0bmFtZS9yZXBvIiAiLi4vLi4vLi4vLi4vLi4vc3VicmVwbyIgIi46c3VicmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAic3NoOi8vaG9zdG5hbWU6MjIvcmVwbyIgIi4uL3N1YnJlcG8iICJzc2g6Ly9ob3N0bmFtZToyMi9zdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICJ1c2VyQGhvc3Q6cGF0aC90by9yZXBvIiAiLi4vc3VicmVwbyIgInVzZXJAaG9zdDpwYXRoL3RvL3N1YnJlcG8iCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgInVzZXJAaG9zdDpyZXBvIiAiLi4vc3VicmVwbyIgInVzZXJAaG9zdDpzdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICJ1c2VyQGhvc3Q6cmVwbyIgIi4uLy4uL3N1YnJlcG8iICIuOnN1YnJlcG8iCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hdGNoIC5naXRtb2R1bGVzJyAnCisJdGVzdC10b29sIHBhdGgtdXRpbHMgaXNfZG90Z2l0bW9kdWxlcyBcCisJCS5naXRtb2R1bGVzIFwKKwkJXAorCQkuZ2l0JHt1MjAwY31tb2R1bGVzIFwKKwkJXAorCQkuR2l0bW9kdWxlcyBcCisJCS5naXRtb2R1bGVTIFwKKwkJXAorCQkiLmdpdG1vZHVsZXMgIiBcCisJCSIuZ2l0bW9kdWxlcy4iIFwKKwkJIi5naXRtb2R1bGVzICAiIFwKKwkJIi5naXRtb2R1bGVzLiAiIFwKKwkJIi5naXRtb2R1bGVzIC4iIFwKKwkJIi5naXRtb2R1bGVzLi4iIFwKKwkJIi5naXRtb2R1bGVzICAgIiBcCisJCSIuZ2l0bW9kdWxlcy4gICIgXAorCQkiLmdpdG1vZHVsZXMgLiAiIFwKKwkJIi5naXRtb2R1bGVzICAuIiBcCisJCVwKKwkJIi5HaXRtb2R1bGVzICIgXAorCQkiLkdpdG1vZHVsZXMuIiBcCisJCSIuR2l0bW9kdWxlcyAgIiBcCisJCSIuR2l0bW9kdWxlcy4gIiBcCisJCSIuR2l0bW9kdWxlcyAuIiBcCisJCSIuR2l0bW9kdWxlcy4uIiBcCisJCSIuR2l0bW9kdWxlcyAgICIgXAorCQkiLkdpdG1vZHVsZXMuICAiIFwKKwkJIi5HaXRtb2R1bGVzIC4gIiBcCisJCSIuR2l0bW9kdWxlcyAgLiIgXAorCQlcCisJCUdJVE1PRH4xIFwKKwkJZ2l0bW9kfjEgXAorCQlHSVRNT0R+MiBcCisJCWdpdG1vZH4zIFwKKwkJR0lUTU9EfjQgXAorCQlcCisJCSJHSVRNT0R+MSAiIFwKKwkJImdpdG1vZH4yLiIgXAorCQkiR0lUTU9EfjMgICIgXAorCQkiZ2l0bW9kfjQuICIgXAorCQkiR0lUTU9EfjEgLiIgXAorCQkiZ2l0bW9kfjIgICAiIFwKKwkJIkdJVE1PRH4zLiAgIiBcCisJCSJnaXRtb2R+NCAuICIgXAorCQlcCisJCUdJN0VCQX4xIFwKKwkJZ2k3ZWJhfjkgXAorCQlcCisJCUdJN0VCfjEwIFwKKwkJR0k3RUJ+MTEgXAorCQlHSTdFQn45OSBcCisJCUdJN0VCfjEwIFwKKwkJR0k3RX4xMDAgXAorCQlHSTdFfjEwMSBcCisJCUdJN0V+OTk5IFwKKwkJfjEwMDAwMDAgXAorCQl+OTk5OTk5OSBcCisJCVwKKwkJLmdpdG1vZHVsZXM6XCREQVRBIFwKKwkJImdpdG1vZH40IC4gOlwkREFUQSIgXAorCQlcCisJCS0tbm90IFwKKwkJIi5naXRtb2R1bGVzIHgiICBcCisJCSIuZ2l0bW9kdWxlcyAueCIgXAorCQlcCisJCSIgLmdpdG1vZHVsZXMiIFwKKwkJXAorCQkuLmdpdG1vZHVsZXMgXAorCQlcCisJCWdpdG1vZHVsZXMgXAorCQlcCisJCS5naXRtb2R1bGUgXAorCQlcCisJCSIuZ2l0bW9kdWxlcyB4ICIgXAorCQkiLmdpdG1vZHVsZXMgLngiIFwKKwkJXAorCQlHSTdFQkF+IFwKKwkJR0k3RUJBfjAgXAorCQlHSTdFQkF+fjEgXAorCQlHSTdFQkF+WCBcCisJCUd4N0VCQX4xIFwKKwkJR0k3RUJYfjEgXAorCQlcCisJCUdJN0VCfjEgXAorCQlHSTdFQn4wMSBcCisJCUdJN0VCfjFYIFwKKwkJXAorCQkuZ2l0bW9kdWxlcyw6XCREQVRBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ2lzX3ZhbGlkX3BhdGgoKSBvbiBXaW5kb3dzJyAnCisJdGVzdC10b29sIHBhdGgtdXRpbHMgaXNfdmFsaWRfcGF0aCBcCisJCXdpbjMyIFwKKwkJIndpbjMyIHgiIFwKKwkJLi4vaGVsbG8udHh0IFwKKwkJQzpcXGdpdCBcCisJCWNvbW0gXAorCQljb25vdXQuYyBcCisJCWNvbTAuYyBcCisJCWxwdE4gXAorCQlcCisJCS0tbm90IFwKKwkJIndpbjMyICIgIFwKKwkJIndpbjMyIC94ICIgIFwKKwkJIndpbjMyLiIgIFwKKwkJIndpbjMyIC4gLiIgXAorCQkuLi4vaGVsbG8udHh0IFwKKwkJY29sb246dGVzdCBcCisJCSJBVVguYyIgXAorCQkiYWJjL2Nvbk91dFwkICAueHl6L3Rlc3QiIFwKKwkJbHB0OCBcCisJCWNvbTkuYyBcCisJCSJscHQqIiBcCisJCU51bCBcCisJCSJQUk4uL2FiYyIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDYxLXJ1bi1jb21tYW5kLnNoIGIvdC90MDA2MS1ydW4tY29tbWFuZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZDU5OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDA2MS1ydW4tY29tbWFuZC5zaApAQCAtMCwwICsxLDIzNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBJbGFyaSBMaXVzdmFhcmEKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBydW4gY29tbWFuZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+aGVsbG8tc2NyaXB0IDw8LUVPRgorCSMhJFNIRUxMX1BBVEgKKwljYXQgaGVsbG8tc2NyaXB0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBNSU5HVyAnc3VicHJvY2VzcyBpbmhlcml0cyBvbmx5IHN0ZCBoYW5kbGVzJyAnCisJdGVzdC10b29sIHJ1bi1jb21tYW5kIGluaGVyaXRlZC1oYW5kbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnRfY29tbWFuZCByZXBvcnRzIEVOT0VOVCAoc2xhc2gpJyAnCisJdGVzdC10b29sIHJ1bi1jb21tYW5kIHN0YXJ0LWNvbW1hbmQtRU5PRU5UIC4vZG9lcy1ub3QtZXhpc3QgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJcLi9kb2VzLW5vdC1leGlzdCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0X2NvbW1hbmQgcmVwb3J0cyBFTk9FTlQgKG5vIHNsYXNoKScgJworCXRlc3QtdG9vbCBydW4tY29tbWFuZCBzdGFydC1jb21tYW5kLUVOT0VOVCBkb2VzLW5vdC1leGlzdCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImRvZXMtbm90LWV4aXN0IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuX2NvbW1hbmQgY2FuIHJ1biBhIGNvbW1hbmQnICcKKwljYXQgaGVsbG8tc2NyaXB0ID5oZWxsby5zaCAmJgorCWNobW9kICt4IGhlbGxvLnNoICYmCisJdGVzdC10b29sIHJ1bi1jb21tYW5kIHJ1bi1jb21tYW5kIC4vaGVsbG8uc2ggPmFjdHVhbCAyPmVyciAmJgorCisJdGVzdF9jbXAgaGVsbG8tc2NyaXB0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKycKKworCit0ZXN0X2xhenlfcHJlcmVxIFJVTlNfQ09NTUFORFNfRlJPTV9QV0QgJworCXdyaXRlX3NjcmlwdCBydW5zLWNvbW1hbmRzLWZyb20tcHdkIDw8LVxFT0YgJiYKKwl0cnVlCisJRU9GCisJcnVucy1jb21tYW5kcy1mcm9tLXB3ZCA+L2Rldi9udWxsIDI+JjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhUlVOU19DT01NQU5EU19GUk9NX1BXRCAncnVuX2NvbW1hbmQgaXMgcmVzdHJpY3RlZCB0byBQQVRIJyAnCisJd3JpdGVfc2NyaXB0IHNob3VsZC1ub3QtcnVuIDw8LVxFT0YgJiYKKwllY2hvIHlpa2VzCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHJ1bi1jb21tYW5kIHJ1bi1jb21tYW5kIHNob3VsZC1ub3QtcnVuIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAic2hvdWxkLW5vdC1ydW4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAncnVuX2NvbW1hbmQgY2FuIHJ1biBhIHNjcmlwdCB3aXRob3V0IGEgIyEgbGluZScgJworCWNhdCA+aGVsbG8gPDwtXEVPRiAmJgorCWNhdCBoZWxsby1zY3JpcHQKKwlFT0YKKwljaG1vZCAreCBoZWxsbyAmJgorCXRlc3QtdG9vbCBydW4tY29tbWFuZCBydW4tY29tbWFuZCAuL2hlbGxvID5hY3R1YWwgMj5lcnIgJiYKKworCXRlc3RfY21wIGhlbGxvLXNjcmlwdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bl9jb21tYW5kIGRvZXMgbm90IHRyeSB0byBleGVjdXRlIGEgZGlyZWN0b3J5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgYmluMSBiaW4yIiAmJgorCW1rZGlyIC1wIGJpbjEvZ3JlZXQgYmluMiAmJgorCXdyaXRlX3NjcmlwdCBiaW4yL2dyZWV0IDw8LVxFT0YgJiYKKwljYXQgYmluMi9ncmVldAorCUVPRgorCisJUEFUSD0kUFdEL2JpbjE6JFBXRC9iaW4yOiRQQVRIIFwKKwkJdGVzdC10b29sIHJ1bi1jb21tYW5kIHJ1bi1jb21tYW5kIGdyZWV0ID5hY3R1YWwgMj5lcnIgJiYKKwl0ZXN0X2NtcCBiaW4yL2dyZWV0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ3J1bl9jb21tYW5kIHBhc3NlcyBvdmVyIG5vbi1leGVjdXRhYmxlIGZpbGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBiaW4xIGJpbjIiICYmCisJbWtkaXIgLXAgYmluMSBiaW4yICYmCisJd3JpdGVfc2NyaXB0IGJpbjEvZ3JlZXQgPDwtXEVPRiAmJgorCWNhdCBiaW4xL2dyZWV0CisJRU9GCisJY2htb2QgLXggYmluMS9ncmVldCAmJgorCXdyaXRlX3NjcmlwdCBiaW4yL2dyZWV0IDw8LVxFT0YgJiYKKwljYXQgYmluMi9ncmVldAorCUVPRgorCisJUEFUSD0kUFdEL2JpbjE6JFBXRC9iaW4yOiRQQVRIIFwKKwkJdGVzdC10b29sIHJ1bi1jb21tYW5kIHJ1bi1jb21tYW5kIGdyZWV0ID5hY3R1YWwgMj5lcnIgJiYKKwl0ZXN0X2NtcCBiaW4yL2dyZWV0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ3J1bl9jb21tYW5kIHJlcG9ydHMgRUFDQ0VTJyAnCisJY2F0IGhlbGxvLXNjcmlwdCA+aGVsbG8uc2ggJiYKKwljaG1vZCAteCBoZWxsby5zaCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBydW4tY29tbWFuZCBydW4tY29tbWFuZCAuL2hlbGxvLnNoIDI+ZXJyICYmCisKKwlncmVwICJmYXRhbDogY2Fubm90IGV4ZWMuKmhlbGxvLnNoIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICd1bnJlYWRhYmxlIGRpcmVjdG9yeSBpbiBQQVRIJyAnCisJbWtkaXIgbG9jYWwtY29tbWFuZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2htb2QgdStyd3ggbG9jYWwtY29tbWFuZCAmJiBybSAtZnIgbG9jYWwtY29tbWFuZCIgJiYKKwlnaXQgY29uZmlnIGFsaWFzLm5pdGZvbCAiIWVjaG8gZnJvdHoiICYmCisJY2htb2QgYS1yeCBsb2NhbC1jb21tYW5kICYmCisJKAorCQlQQVRIPS4vbG9jYWwtY29tbWFuZDokUEFUSCAmJgorCQlnaXQgbml0Zm9sID5hY3R1YWwKKwkpICYmCisJZWNobyBmcm90eiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PC1FT0YKK3ByZWxvYWRlZCBvdXRwdXQgb2YgYSBjaGlsZAorSGVsbG8KK1dvcmxkCitwcmVsb2FkZWQgb3V0cHV0IG9mIGEgY2hpbGQKK0hlbGxvCitXb3JsZAorcHJlbG9hZGVkIG91dHB1dCBvZiBhIGNoaWxkCitIZWxsbworV29ybGQKK3ByZWxvYWRlZCBvdXRwdXQgb2YgYSBjaGlsZAorSGVsbG8KK1dvcmxkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuX2NvbW1hbmQgcnVucyBpbiBwYXJhbGxlbCB3aXRoIG1vcmUgam9icyBhdmFpbGFibGUgdGhhbiB0YXNrcycgJworCXRlc3QtdG9vbCBydW4tY29tbWFuZCBydW4tY29tbWFuZC1wYXJhbGxlbCA1IHNoIC1jICJwcmludGYgXCIlc1xuJXNcblwiIEhlbGxvIFdvcmxkIiAyPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuX2NvbW1hbmQgcnVucyBpbiBwYXJhbGxlbCB3aXRoIGFzIG1hbnkgam9icyBhcyB0YXNrcycgJworCXRlc3QtdG9vbCBydW4tY29tbWFuZCBydW4tY29tbWFuZC1wYXJhbGxlbCA0IHNoIC1jICJwcmludGYgXCIlc1xuJXNcblwiIEhlbGxvIFdvcmxkIiAyPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuX2NvbW1hbmQgcnVucyBpbiBwYXJhbGxlbCB3aXRoIG1vcmUgdGFza3MgdGhhbiBqb2JzIGF2YWlsYWJsZScgJworCXRlc3QtdG9vbCBydW4tY29tbWFuZCBydW4tY29tbWFuZC1wYXJhbGxlbCAzIHNoIC1jICJwcmludGYgXCIlc1xuJXNcblwiIEhlbGxvIFdvcmxkIiAyPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwtRU9GCitwcmVsb2FkZWQgb3V0cHV0IG9mIGEgY2hpbGQKK2Fza2luZyBmb3IgYSBxdWljayBzdG9wCitwcmVsb2FkZWQgb3V0cHV0IG9mIGEgY2hpbGQKK2Fza2luZyBmb3IgYSBxdWljayBzdG9wCitwcmVsb2FkZWQgb3V0cHV0IG9mIGEgY2hpbGQKK2Fza2luZyBmb3IgYSBxdWljayBzdG9wCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuX2NvbW1hbmQgaXMgYXNrZWQgdG8gYWJvcnQgZ3JhY2VmdWxseScgJworCXRlc3QtdG9vbCBydW4tY29tbWFuZCBydW4tY29tbWFuZC1hYm9ydCAzIGZhbHNlIDI+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PC1FT0YKK25vIGZ1cnRoZXIgam9icyBhdmFpbGFibGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW5fY29tbWFuZCBvdXRwdXRzICcgJworCXRlc3QtdG9vbCBydW4tY29tbWFuZCBydW4tY29tbWFuZC1uby1qb2JzIDMgc2ggLWMgInByaW50ZiBcIiVzXG4lc1xuXCIgSGVsbG8gV29ybGQiIDI+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X3RyYWNlICgpIHsKKwlleHBlY3Q9IiQxIgorCXNoaWZ0CisJR0lUX1RSQUNFPTEgdGVzdC10b29sIHJ1bi1jb21tYW5kICIkQCIgcnVuLWNvbW1hbmQgdHJ1ZSAyPiYxID4vZGV2L251bGwgfCBcCisJCXNlZCAtZSAncy8uKiBydW5fY29tbWFuZDogLy8nIC1lICcvdHJhY2U6IC4qL2QnIFwKKwkJCS1lICcvUlVOVElNRV9QUkVGSVggcmVxdWVzdGVkL2QnID5hY3R1YWwgJiYKKwllY2hvICIkZXhwZWN0IHRydWUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9UUkFDRSB3aXRoIGVudmlyb25tZW50IHZhcmlhYmxlcycgJworCXRlc3RfdHJhY2UgImFiYz0xIGRlZj0yIiBlbnYgYWJjPTEgZW52IGRlZj0yICYmCisJdGVzdF90cmFjZSAiYWJjPTIiIGVudiBhYmMgZW52IGFiYz0xIGVudiBhYmM9MiAmJgorCXRlc3RfdHJhY2UgImFiYz0yIiBlbnYgYWJjIGVudiBhYmM9MiAmJgorCSgKKwkJYWJjPTEgJiYgZXhwb3J0IGFiYyAmJgorCQl0ZXN0X3RyYWNlICJkZWY9MSIgZW52IGFiYz0xIGVudiBkZWY9MQorCSkgJiYKKwkoCisJCWFiYz0xICYmIGV4cG9ydCBhYmMgJiYKKwkJdGVzdF90cmFjZSAiZGVmPTEiIGVudiBhYmMgZW52IGFiYz0xIGVudiBkZWY9MQorCSkgJiYKKwl0ZXN0X3RyYWNlICJkZWY9MSIgZW52IG5vbi1leGlzdCBlbnYgZGVmPTEgJiYKKwl0ZXN0X3RyYWNlICJhYmM9MiIgZW52IGFiYz0xIGVudiBhYmMgZW52IGFiYz0yICYmCisJKAorCQlhYmM9MSBkZWY9MiAmJiBleHBvcnQgYWJjIGRlZiAmJgorCQl0ZXN0X3RyYWNlICJ1bnNldCBhYmMgZGVmOyIgZW52IGFiYyBlbnYgZGVmCisJKSAmJgorCSgKKwkJYWJjPTEgZGVmPTIgJiYgZXhwb3J0IGFiYyBkZWYgJiYKKwkJdGVzdF90cmFjZSAidW5zZXQgZGVmOyBhYmM9MyIgZW52IGFiYyBlbnYgZGVmIGVudiBhYmM9MworCSkgJiYKKwkoCisJCWFiYz0xICYmIGV4cG9ydCBhYmMgJiYKKwkJdGVzdF90cmFjZSAidW5zZXQgYWJjOyIgZW52IGFiYz0yIGVudiBhYmMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ3ZlcmlmeSBjdXJsaWVzIGFyZSBxdW90ZWQgcHJvcGVybHknICcKKwk6IGZvcmNlIHRoZSByZXYtcGFyc2UgdGhyb3VnaCB0aGUgTVNZUzIgQmFzaCAmJgorCWdpdCAtYyBhbGlhcy5yPSIhZ2l0IHJldi1wYXJzZSIgciAtLSBhe2J9YyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS0tCisJYXtifWMKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ2NhbiBzcGF3biAuYmF0IHdpdGggYXJndlswXSBjb250YWluaW5nIHNwYWNlcycgJworCWJhdD0iJFRSQVNIX0RJUkVDVE9SWS9iYXQgd2l0aCBzcGFjZXMgaW4gbmFtZS5iYXQiICYmCisKKwkjIEV2ZXJ5IC5iYXQgaW52b2NhdGlvbiB3aWxsIGxvZyBpdHMgYXJndW1lbnRzIHRvIGZpbGUgIm91dCIKKwlybSAtZiBvdXQgJiYKKwllY2hvICJlY2hvICUqID4+b3V0IiA+IiRiYXQiICYmCisKKwkjIEFzayBnaXQgdG8gaW52b2tlIC5iYXQ7IGNsb25lIHdpbGwgZmFpbCBkdWUgdG8gZmFrZSBTU0ggaGVscGVyCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9TU0g9IiRiYXQiIGdpdCBjbG9uZSBteWhvc3Q6c3JjIHNzaC1jbG9uZSAmJgorCisJIyBTcGF3bmluZyAuYmF0IGNhbiBmYWlsIGlmIHRoZXJlIGFyZSB0d28gcXVvdGVkIGNtZC5leGUgYXJndW1lbnRzLgorCSMgLmJhdCBpdHNlbGYgaXMgZmlyc3QgKGR1ZSB0byBzcGFjZXMgaW4gbmFtZSksIHNvIGp1c3Qgb25lIG1vcmUgaXMKKwkjIG5lZWRlZCB0byB2ZXJpZnkuIEdJVF9TU0ggd2lsbCBpbnZva2UgLmJhdCBtdWx0aXBsZSB0aW1lczoKKwkjIDEpIC1HIG15aG9zdAorCSMgMikgbXlob3N0ICJnaXQtdXBsb2FkLXBhY2sgc3JjIgorCSMgRmlyc3QgaW52b2NhdGlvbiB3aWxsIGFsd2F5cyBzdWNjZWVkLiBUZXN0IHRoZSBzZWNvbmQgb25lLgorCWdyZXAgImdpdC11cGxvYWQtcGFjayIgb3V0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA2Mi1yZXZpc2lvbi13YWxraW5nLnNoIGIvdC90MDA2Mi1yZXZpc2lvbi13YWxraW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlMjE1ODYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDYyLXJldmlzaW9uLXdhbGtpbmcuc2gKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBIZWlrbyBWb2lndAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJldmlzaW9uIHdhbGtpbmcgYXBpJworCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5ydW5fdHdpY2VfZXhwZWN0ZWQgPDwtRU9GCisxc3QKKyA+IGFkZCBiCisgPiBhZGQgYQorMm5kCisgPiBhZGQgYgorID4gYWRkIGEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gYSA+IGEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgYSIgJiYKKwllY2hvIGIgPiBiICYmCisJZ2l0IGFkZCBiICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmlzaW9uIHdhbGtpbmcgY2FuIGJlIGRvbmUgdHdpY2UnICcKKwl0ZXN0LXRvb2wgcmV2aXNpb24td2Fsa2luZyBydW4tdHdpY2UgPnJ1bl90d2ljZV9hY3R1YWwgJiYKKwl0ZXN0X2NtcCBydW5fdHdpY2VfZXhwZWN0ZWQgcnVuX3R3aWNlX2FjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNjMtc3RyaW5nLWxpc3Quc2ggYi90L3QwMDYzLXN0cmluZy1saXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2ZWU5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDYzLXN0cmluZy1saXN0LnNoCkBAIC0wLDAgKzEsOTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgTWljaGFlbCBIYWdnZXJ0eQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHN0cmluZyBsaXN0IGZ1bmN0aW9uYWxpdHknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3NwbGl0ICgpIHsKKwljYXQgPmV4cGVjdGVkICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic3BsaXQgJDEgYXQgJDIsIG1heCAkMyIgIgorCQl0ZXN0LXRvb2wgc3RyaW5nLWxpc3Qgc3BsaXQgJyQxJyAnJDInICckMycgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkJdGVzdC10b29sIHN0cmluZy1saXN0IHNwbGl0X2luX3BsYWNlICckMScgJyQyJyAnJDMnID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJIgorfQorCit0ZXN0X3NwbGl0ICJmb286YmFyOmJheiIgIjoiICItMSIgPDxFT0YKKzMKK1swXTogImZvbyIKK1sxXTogImJhciIKK1syXTogImJheiIKK0VPRgorCit0ZXN0X3NwbGl0ICJmb286YmFyOmJheiIgIjoiICIwIiA8PEVPRgorMQorWzBdOiAiZm9vOmJhcjpiYXoiCitFT0YKKwordGVzdF9zcGxpdCAiZm9vOmJhcjpiYXoiICI6IiAiMSIgPDxFT0YKKzIKK1swXTogImZvbyIKK1sxXTogImJhcjpiYXoiCitFT0YKKwordGVzdF9zcGxpdCAiZm9vOmJhcjpiYXoiICI6IiAiMiIgPDxFT0YKKzMKK1swXTogImZvbyIKK1sxXTogImJhciIKK1syXTogImJheiIKK0VPRgorCit0ZXN0X3NwbGl0ICJmb286YmFyOiIgIjoiICItMSIgPDxFT0YKKzMKK1swXTogImZvbyIKK1sxXTogImJhciIKK1syXTogIiIKK0VPRgorCit0ZXN0X3NwbGl0ICIiICI6IiAiLTEiIDw8RU9GCisxCitbMF06ICIiCitFT0YKKwordGVzdF9zcGxpdCAiOiIgIjoiICItMSIgPDxFT0YKKzIKK1swXTogIiIKK1sxXTogIiIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ0ZXN0IGZpbHRlcl9zdHJpbmdfbGlzdCIgJworCXRlc3QgIngtIiA9ICJ4JCh0ZXN0LXRvb2wgc3RyaW5nLWxpc3QgZmlsdGVyIC0geSkiICYmCisJdGVzdCAieC0iID0gIngkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCBmaWx0ZXIgbm8geSkiICYmCisJdGVzdCB5ZXMgPSAiJCh0ZXN0LXRvb2wgc3RyaW5nLWxpc3QgZmlsdGVyIHllcyB5KSIgJiYKKwl0ZXN0IHllcyA9ICIkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCBmaWx0ZXIgbm86eWVzIHkpIiAmJgorCXRlc3QgeWVzID0gIiQodGVzdC10b29sIHN0cmluZy1saXN0IGZpbHRlciB5ZXM6bm8geSkiICYmCisJdGVzdCB5MTp5MiA9ICIkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCBmaWx0ZXIgeTE6eTIgeSkiICYmCisJdGVzdCB5Mjp5MSA9ICIkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCBmaWx0ZXIgeTI6eTEgeSkiICYmCisJdGVzdCAieC0iID0gIngkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCBmaWx0ZXIgeDE6eDIgeSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInRlc3QgcmVtb3ZlX2R1cGxpY2F0ZXMiICcKKwl0ZXN0ICJ4LSIgPSAieCQodGVzdC10b29sIHN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIC0pIiAmJgorCXRlc3QgIngiID0gIngkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyAiIikiICYmCisJdGVzdCBhID0gIiQodGVzdC10b29sIHN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGEpIiAmJgorCXRlc3QgYSA9ICIkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmEpIiAmJgorCXRlc3QgYSA9ICIkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmE6YTphOmEpIiAmJgorCXRlc3QgYTpiID0gIiQodGVzdC10b29sIHN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YikiICYmCisJdGVzdCBhOmIgPSAiJCh0ZXN0LXRvb2wgc3RyaW5nLWxpc3QgcmVtb3ZlX2R1cGxpY2F0ZXMgYTphOmIpIiAmJgorCXRlc3QgYTpiID0gIiQodGVzdC10b29sIHN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YjpiKSIgJiYKKwl0ZXN0IGE6YjpjID0gIiQodGVzdC10b29sIHN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YjpjKSIgJiYKKwl0ZXN0IGE6YjpjID0gIiQodGVzdC10b29sIHN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YTpiOmMpIiAmJgorCXRlc3QgYTpiOmMgPSAiJCh0ZXN0LXRvb2wgc3RyaW5nLWxpc3QgcmVtb3ZlX2R1cGxpY2F0ZXMgYTpiOmI6YykiICYmCisJdGVzdCBhOmI6YyA9ICIkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmI6YzpjKSIgJiYKKwl0ZXN0IGE6YjpjID0gIiQodGVzdC10b29sIHN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YTpiOmI6YzpjKSIgJiYKKwl0ZXN0IGE6YjpjID0gIiQodGVzdC10b29sIHN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YTphOmI6YjpiOmM6YzpjKSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDY0LXNoYTEtYXJyYXkuc2ggYi90L3QwMDY0LXNoYTEtYXJyYXkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDU2ODVhZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwNjQtc2hhMS1hcnJheS5zaApAQCAtMCwwICsxLDk5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgdGVzdHMgZm9yIHRoZSBTSEExIGFycmF5IGltcGxlbWVudGF0aW9uJworLiAuL3Rlc3QtbGliLnNoCisKK2VjaG9pZCAoKSB7CisJcHJlZml4PSIkezE6KyQxIH0iCisJc2hpZnQKKwl3aGlsZSB0ZXN0ICQjIC1ndCAwCisJZG8KKwkJZWNobyAiJHByZWZpeCRaRVJPX09JRCIgfCBzZWQgLWUgInMvMDAvJDEvZyIKKwkJc2hpZnQKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29yZGVyZWQgZW51bWVyYXRpb24nICcKKwllY2hvaWQgIiIgNDQgNTUgODggYWEgPmV4cGVjdCAmJgorCXsKKwkJZWNob2lkIGFwcGVuZCA4OCA0NCBhYSA1NSAmJgorCQllY2hvIGZvcl9lYWNoX3VuaXF1ZQorCX0gfCB0ZXN0LXRvb2wgb2lkLWFycmF5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29yZGVyZWQgZW51bWVyYXRpb24gd2l0aCBkdXBsaWNhdGUgc3VwcHJlc3Npb24nICcKKwllY2hvaWQgIiIgNDQgNTUgODggYWEgPmV4cGVjdCAmJgorCXsKKwkJZWNob2lkIGFwcGVuZCA4OCA0NCBhYSA1NSAmJgorCQllY2hvaWQgYXBwZW5kIDg4IDQ0IGFhIDU1ICYmCisJCWVjaG8gZm9yX2VhY2hfdW5pcXVlCisJfSB8IHRlc3QtdG9vbCBvaWQtYXJyYXkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9va3VwJyAnCisJeworCQllY2hvaWQgYXBwZW5kIDg4IDQ0IGFhIDU1ICYmCisJCWVjaG9pZCBsb29rdXAgNTUKKwl9IHwgdGVzdC10b29sIG9pZC1hcnJheSA+YWN0dWFsICYmCisJbj0kKGNhdCBhY3R1YWwpICYmCisJdGVzdCAiJG4iIC1lcSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb2t1cCBub24tZXhpc3RpbmcgZW50cnknICcKKwl7CisJCWVjaG9pZCBhcHBlbmQgODggNDQgYWEgNTUgJiYKKwkJZWNob2lkIGxvb2t1cCAzMworCX0gfCB0ZXN0LXRvb2wgb2lkLWFycmF5ID5hY3R1YWwgJiYKKwluPSQoY2F0IGFjdHVhbCkgJiYKKwl0ZXN0ICIkbiIgLWx0IDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9va3VwIHdpdGggZHVwbGljYXRlcycgJworCXsKKwkJZWNob2lkIGFwcGVuZCA4OCA0NCBhYSA1NSAmJgorCQllY2hvaWQgYXBwZW5kIDg4IDQ0IGFhIDU1ICYmCisJCWVjaG9pZCBsb29rdXAgNTUKKwl9IHwgdGVzdC10b29sIG9pZC1hcnJheSA+YWN0dWFsICYmCisJbj0kKGNhdCBhY3R1YWwpICYmCisJdGVzdCAiJG4iIC1nZSAyICYmCisJdGVzdCAiJG4iIC1sZSAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb2t1cCBub24tZXhpc3RpbmcgZW50cnkgd2l0aCBkdXBsaWNhdGVzJyAnCisJeworCQllY2hvaWQgYXBwZW5kIDg4IDQ0IGFhIDU1ICYmCisJCWVjaG9pZCBhcHBlbmQgODggNDQgYWEgNTUgJiYKKwkJZWNob2lkIGxvb2t1cCA2NgorCX0gfCB0ZXN0LXRvb2wgb2lkLWFycmF5ID5hY3R1YWwgJiYKKwluPSQoY2F0IGFjdHVhbCkgJiYKKwl0ZXN0ICIkbiIgLWx0IDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9va3VwIHdpdGggYWxtb3N0IGR1cGxpY2F0ZSB2YWx1ZXMnICcKKwkjIG4tMSA1cworCXJvb3Q9JChlY2hvaWQgIiIgNTUpICYmCisJcm9vdD0ke3Jvb3QlNX0gJiYKKwl7CisJCWlkMT0iJHtyb290fTUiICYmCisJCWlkMj0iJHtyb290fWYiICYmCisJCWVjaG8gImFwcGVuZCAkaWQxIiAmJgorCQllY2hvICJhcHBlbmQgJGlkMiIgJiYKKwkJZWNob2lkIGxvb2t1cCA1NQorCX0gfCB0ZXN0LXRvb2wgb2lkLWFycmF5ID5hY3R1YWwgJiYKKwluPSQoY2F0IGFjdHVhbCkgJiYKKwl0ZXN0ICIkbiIgLWVxIDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9va3VwIHdpdGggc2luZ2xlIGR1cGxpY2F0ZSB2YWx1ZScgJworCXsKKwkJZWNob2lkIGFwcGVuZCA1NSA1NSAmJgorCQllY2hvaWQgbG9va3VwIDU1CisJfSB8IHRlc3QtdG9vbCBvaWQtYXJyYXkgPmFjdHVhbCAmJgorCW49JChjYXQgYWN0dWFsKSAmJgorCXRlc3QgIiRuIiAtZ2UgMCAmJgorCXRlc3QgIiRuIiAtbGUgMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNjUtc3RyY21wLW9mZnNldC5zaCBiL3QvdDAwNjUtc3RyY21wLW9mZnNldC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MWZhNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDA2NS1zdHJjbXAtb2Zmc2V0LnNoCkBAIC0wLDAgKzEsMjEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHN0cmNtcF9vZmZzZXQgZnVuY3Rpb25hbGl0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK3doaWxlIHJlYWQgczEgczIgZXhwZWN0CitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInN0cmNtcF9vZmZzZXQoJHMxLCAkczIpIiAnCisJCWVjaG8gIiRleHBlY3QiID5leHBlY3QgJiYKKwkJdGVzdC10b29sIHN0cmNtcC1vZmZzZXQgIiRzMSIgIiRzMiIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworZG9uZSA8PC1FT0YKK2FiYyBhYmMgMCAzCithYmMgZGVmIC0xIDAKK2FiYyBhYnogLTEgMgorYWJjIGFiY2RlZiAtMSAzCitFT0YKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDY2LWRpci1pdGVyYXRvci5zaCBiL3QvdDAwNjYtZGlyLWl0ZXJhdG9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkyOTEwZTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDY2LWRpci1pdGVyYXRvci5zaApAQCAtMCwwICsxLDE0OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIGRpci1pdGVyYXRvciBmdW5jdGlvbmFsaXR5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciAtcCBkaXIgJiYKKwlta2RpciAtcCBkaXIvYS9iL2MvICYmCisJPmRpci9iICYmCisJPmRpci9jICYmCisJbWtkaXIgLXAgZGlyL2QvZS9kLyAmJgorCT5kaXIvYS9iL2MvZCAmJgorCT5kaXIvYS9lICYmCisJPmRpci9kL2UvZC9hICYmCisKKwlta2RpciAtcCBkaXIyL2EvYi9jLyAmJgorCT5kaXIyL2EvYi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlyLWl0ZXJhdG9yIHNob3VsZCBpdGVyYXRlIHRocm91Z2ggYWxsIGZpbGVzJyAnCisJY2F0ID5leHBlY3RlZC1pdGVyYXRpb24tc29ydGVkLW91dHB1dCA8PC1FT0YgJiYKKwlbZF0gKGEpIFthXSAuL2Rpci9hCisJW2RdIChhL2IpIFtiXSAuL2Rpci9hL2IKKwlbZF0gKGEvYi9jKSBbY10gLi9kaXIvYS9iL2MKKwlbZF0gKGQpIFtkXSAuL2Rpci9kCisJW2RdIChkL2UpIFtlXSAuL2Rpci9kL2UKKwlbZF0gKGQvZS9kKSBbZF0gLi9kaXIvZC9lL2QKKwlbZl0gKGEvYi9jL2QpIFtkXSAuL2Rpci9hL2IvYy9kCisJW2ZdIChhL2UpIFtlXSAuL2Rpci9hL2UKKwlbZl0gKGIpIFtiXSAuL2Rpci9iCisJW2ZdIChjKSBbY10gLi9kaXIvYworCVtmXSAoZC9lL2QvYSkgW2FdIC4vZGlyL2QvZS9kL2EKKwlFT0YKKworCXRlc3QtdG9vbCBkaXItaXRlcmF0b3IgLi9kaXIgPm91dCAmJgorCXNvcnQgb3V0ID4uL2FjdHVhbC1pdGVyYXRpb24tc29ydGVkLW91dHB1dCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQtaXRlcmF0aW9uLXNvcnRlZC1vdXRwdXQgYWN0dWFsLWl0ZXJhdGlvbi1zb3J0ZWQtb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpci1pdGVyYXRvciBzaG91bGQgbGlzdCBmaWxlcyBpbiB0aGUgY29ycmVjdCBvcmRlcicgJworCWNhdCA+ZXhwZWN0ZWQtcHJlLW9yZGVyLW91dHB1dCA8PC1FT0YgJiYKKwlbZF0gKGEpIFthXSAuL2RpcjIvYQorCVtkXSAoYS9iKSBbYl0gLi9kaXIyL2EvYgorCVtkXSAoYS9iL2MpIFtjXSAuL2RpcjIvYS9iL2MKKwlbZl0gKGEvYi9jL2QpIFtkXSAuL2RpcjIvYS9iL2MvZAorCUVPRgorCisJdGVzdC10b29sIGRpci1pdGVyYXRvciAuL2RpcjIgPmFjdHVhbC1wcmUtb3JkZXItb3V0cHV0ICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZC1wcmUtb3JkZXItb3V0cHV0IGFjdHVhbC1wcmUtb3JkZXItb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JlZ2luIHNob3VsZCBmYWlsIHVwb24gaW5leGlzdGVudCBwYXRocycgJworCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBkaXItaXRlcmF0b3IgLi9pbmV4aXN0ZW50LXBhdGggXAorCQk+YWN0dWFsLWluZXhpc3RlbnQtcGF0aC1vdXRwdXQgJiYKKwllY2hvICJkaXJfaXRlcmF0b3JfYmVnaW4gZmFpbHVyZTogRU5PRU5UIiA+ZXhwZWN0ZWQtaW5leGlzdGVudC1wYXRoLW91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWluZXhpc3RlbnQtcGF0aC1vdXRwdXQgYWN0dWFsLWluZXhpc3RlbnQtcGF0aC1vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmVnaW4gc2hvdWxkIGZhaWwgdXBvbiBub24gZGlyZWN0b3J5IHBhdGhzJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIGRpci1pdGVyYXRvciAuL2Rpci9iID5hY3R1YWwtbm9uLWRpci1vdXRwdXQgJiYKKwllY2hvICJkaXJfaXRlcmF0b3JfYmVnaW4gZmFpbHVyZTogRU5PVERJUiIgPmV4cGVjdGVkLW5vbi1kaXItb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtbm9uLWRpci1vdXRwdXQgYWN0dWFsLW5vbi1kaXItb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnYWR2YW5jZSBzaG91bGQgbm90IGZhaWwgb24gZXJyb3JzIGJ5IGRlZmF1bHQnICcKKwljYXQgPmV4cGVjdGVkLW5vLXBlcm1pc3Npb25zLW91dHB1dCA8PC1FT0YgJiYKKwlbZF0gKGEpIFthXSAuL2RpcjMvYQorCUVPRgorCisJbWtkaXIgLXAgZGlyMy9hICYmCisJPmRpcjMvYS9iICYmCisJY2htb2QgMCBkaXIzL2EgJiYKKworCXRlc3QtdG9vbCBkaXItaXRlcmF0b3IgLi9kaXIzID5hY3R1YWwtbm8tcGVybWlzc2lvbnMtb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtbm8tcGVybWlzc2lvbnMtb3V0cHV0IGFjdHVhbC1uby1wZXJtaXNzaW9ucy1vdXRwdXQgJiYKKwljaG1vZCA3NTUgZGlyMy9hICYmCisJcm0gLXJmIGRpcjMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdhZHZhbmNlIHNob3VsZCBmYWlsIG9uIGVycm9ycywgdy8gcGVkYW50aWMgZmxhZycgJworCWNhdCA+ZXhwZWN0ZWQtbm8tcGVybWlzc2lvbnMtcGVkYW50aWMtb3V0cHV0IDw8LUVPRiAmJgorCVtkXSAoYSkgW2FdIC4vZGlyMy9hCisJZGlyX2l0ZXJhdG9yX2FkdmFuY2UgZmFpbHVyZQorCUVPRgorCisJbWtkaXIgLXAgZGlyMy9hICYmCisJPmRpcjMvYS9iICYmCisJY2htb2QgMCBkaXIzL2EgJiYKKworCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBkaXItaXRlcmF0b3IgLS1wZWRhbnRpYyAuL2RpcjMgXAorCQk+YWN0dWFsLW5vLXBlcm1pc3Npb25zLXBlZGFudGljLW91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLW5vLXBlcm1pc3Npb25zLXBlZGFudGljLW91dHB1dCBcCisJCWFjdHVhbC1uby1wZXJtaXNzaW9ucy1wZWRhbnRpYy1vdXRwdXQgJiYKKwljaG1vZCA3NTUgZGlyMy9hICYmCisJcm0gLXJmIGRpcjMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc2V0dXAgZGlycyB3aXRoIHN5bWxpbmtzJyAnCisJbWtkaXIgLXAgZGlyNC9hICYmCisJbWtkaXIgLXAgZGlyNC9iL2MgJiYKKwk+ZGlyNC9hL2QgJiYKKwlsbiAtcyBkIGRpcjQvYS9lICYmCisJbG4gLXMgLi4vYiBkaXI0L2EvZiAmJgorCisJbWtkaXIgLXAgZGlyNS9hL2IgJiYKKwlta2RpciAtcCBkaXI1L2EvYyAmJgorCWxuIC1zIC4uL2MgZGlyNS9hL2IvZCAmJgorCWxuIC1zIC4uLyBkaXI1L2EvYi9lICYmCisJbG4gLXMgLi4vLi4vIGRpcjUvYS9iL2YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZGlyLWl0ZXJhdG9yIHNob3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGJ5IGRlZmF1bHQnICcKKwljYXQgPmV4cGVjdGVkLW5vLWZvbGxvdy1zb3J0ZWQtb3V0cHV0IDw8LUVPRiAmJgorCVtkXSAoYSkgW2FdIC4vZGlyNC9hCisJW2RdIChiKSBbYl0gLi9kaXI0L2IKKwlbZF0gKGIvYykgW2NdIC4vZGlyNC9iL2MKKwlbZl0gKGEvZCkgW2RdIC4vZGlyNC9hL2QKKwlbc10gKGEvZSkgW2VdIC4vZGlyNC9hL2UKKwlbc10gKGEvZikgW2ZdIC4vZGlyNC9hL2YKKwlFT0YKKworCXRlc3QtdG9vbCBkaXItaXRlcmF0b3IgLi9kaXI0ID5vdXQgJiYKKwlzb3J0IG91dCA+YWN0dWFsLW5vLWZvbGxvdy1zb3J0ZWQtb3V0cHV0ICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZC1uby1mb2xsb3ctc29ydGVkLW91dHB1dCBhY3R1YWwtbm8tZm9sbG93LXNvcnRlZC1vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZGlyLWl0ZXJhdG9yIHNob3VsZCBmb2xsb3cgc3ltbGlua3Mgdy8gZm9sbG93IGZsYWcnICcKKwljYXQgPmV4cGVjdGVkLWZvbGxvdy1zb3J0ZWQtb3V0cHV0IDw8LUVPRiAmJgorCVtkXSAoYSkgW2FdIC4vZGlyNC9hCisJW2RdIChhL2YpIFtmXSAuL2RpcjQvYS9mCisJW2RdIChhL2YvYykgW2NdIC4vZGlyNC9hL2YvYworCVtkXSAoYikgW2JdIC4vZGlyNC9iCisJW2RdIChiL2MpIFtjXSAuL2RpcjQvYi9jCisJW2ZdIChhL2QpIFtkXSAuL2RpcjQvYS9kCisJW2ZdIChhL2UpIFtlXSAuL2RpcjQvYS9lCisJRU9GCisKKwl0ZXN0LXRvb2wgZGlyLWl0ZXJhdG9yIC0tZm9sbG93LXN5bWxpbmtzIC4vZGlyNCA+b3V0ICYmCisJc29ydCBvdXQgPmFjdHVhbC1mb2xsb3ctc29ydGVkLW91dHB1dCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQtZm9sbG93LXNvcnRlZC1vdXRwdXQgYWN0dWFsLWZvbGxvdy1zb3J0ZWQtb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA2Ny1wYXJzZV9wYXRoc3BlY19maWxlLnNoIGIvdC90MDA2Ny1wYXJzZV9wYXRoc3BlY19maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdiYWI0OWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDY3LXBhcnNlX3BhdGhzcGVjX2ZpbGUuc2gKQEAgLTAsMCArMSwxMDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHBhcnNlX3BhdGhzcGVjX2ZpbGUoKScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29uZSBpdGVtIGZyb20gc3RkaW4nICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZmlsZUEudAorCUVPRgorCisJZWNobyBmaWxlQS50IHwKKwl0ZXN0LXRvb2wgcGFyc2UtcGF0aHNwZWMtZmlsZSAtLXBhdGhzcGVjLWZyb20tZmlsZT0tID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25lIGl0ZW0gZnJvbSBmaWxlJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZpbGVBLnQKKwlFT0YKKworCWVjaG8gZmlsZUEudCA+bGlzdCAmJgorCXRlc3QtdG9vbCBwYXJzZS1wYXRoc3BlYy1maWxlIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgZGVsaW1pdGVycycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmaWxlQS50CisJZmlsZUIudAorCUVPRgorCisJcHJpbnRmICJmaWxlQS50XDBmaWxlQi50XDAiIHwKKwl0ZXN0LXRvb2wgcGFyc2UtcGF0aHNwZWMtZmlsZSAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC0tcGF0aHNwZWMtZmlsZS1udWwgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMRiBkZWxpbWl0ZXJzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZpbGVBLnQKKwlmaWxlQi50CisJRU9GCisKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnRcbiIgfAorCXRlc3QtdG9vbCBwYXJzZS1wYXRoc3BlYy1maWxlIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB0cmFpbGluZyBkZWxpbWl0ZXInICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZmlsZUEudAorCWZpbGVCLnQKKwlFT0YKKworCXByaW50ZiAiZmlsZUEudFxuZmlsZUIudCIgfAorCXRlc3QtdG9vbCBwYXJzZS1wYXRoc3BlYy1maWxlIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDUkxGIGRlbGltaXRlcnMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZmlsZUEudAorCWZpbGVCLnQKKwlFT0YKKworCXByaW50ZiAiZmlsZUEudFxyXG5maWxlQi50XHJcbiIgfAorCXRlc3QtdG9vbCBwYXJzZS1wYXRoc3BlYy1maWxlIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZmlsZUEudAorCUVPRgorCisJY2F0ID5saXN0IDw8LVxFT0YgJiYKKwkiZmlsZVwxMDEudCIKKwlFT0YKKworCXRlc3QtdG9vbCBwYXJzZS1wYXRoc3BlYy1maWxlIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZpbGUtbnVsIHRha2VzIHF1b3RlcyBsaXRlcmFsbHknICcKKwkjIE5vdGU6IHRoZXJlIGlzIGFuIGV4dHJhIG5ld2xpbmUgYmVjYXVzZSAtLXBhdGhzcGVjLWZpbGUtbnVsIHRha2VzCisJIyBpbnB1dCBcbiBsaXRlcmFsbHksIHRvbworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkiZmlsZVwxMDEudCIKKworCUVPRgorCisJY2F0ID5saXN0IDw8LVxFT0YgJiYKKwkiZmlsZVwxMDEudCIKKwlFT0YKKworCXRlc3QtdG9vbCBwYXJzZS1wYXRoc3BlYy1maWxlIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1wYXRoc3BlYy1maWxlLW51bCA+YWN0dWFsICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA3MC1mdW5kYW1lbnRhbC5zaCBiL3QvdDAwNzAtZnVuZGFtZW50YWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2IxMTFhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwNzAtZnVuZGFtZW50YWwuc2gKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrIHRoYXQgdGhlIG1vc3QgYmFzaWMgZnVuY3Rpb25zIHdvcmsKKworCitWZXJpZnkgd3JhcHBlcnMgYW5kIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhcmFjdGVyIGNsYXNzZXMgKGlzc3BhY2UsIGlzYWxwaGEgZXRjLiknICcKKwl0ZXN0LXRvb2wgY3R5cGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWt0ZW1wIHRvIG5vbmV4aXN0ZW50IGRpcmVjdG9yeSBwcmludHMgZmlsZW5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgbWt0ZW1wIGRvZXNub3RleGlzdC90ZXN0WFhYWFhYIDI+ZXJyICYmCisJZ3JlcCAiZG9lc25vdGV4aXN0L3Rlc3QiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ21rdGVtcCB0byB1bndyaXRhYmxlIGRpcmVjdG9yeSBwcmludHMgZmlsZW5hbWUnICcKKwlta2RpciBjYW5ub3R3cml0ZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2htb2QgK3cgY2Fubm90d3JpdGUiICYmCisJY2htb2QgLXcgY2Fubm90d3JpdGUgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgbWt0ZW1wIGNhbm5vdHdyaXRlL3Rlc3RYWFhYWFggMj5lcnIgJiYKKwlncmVwICJjYW5ub3R3cml0ZS90ZXN0IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0X21rc3RlbXBzX21vZGUgZG9lcyBub3QgZmFpbCBpZiBmZCAwIGlzIG5vdCBvcGVuJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG1lc3NhZ2UgPCYtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGZvciBhIGJ1ZyBpbiB0aGUgcmVnZXggcm91dGluZXMnICcKKwkjIGlmIHRoaXMgdGVzdCBmYWlscywgcmUtYnVpbGQgZ2l0IHdpdGggTk9fUkVHRVg9MQorCXRlc3QtdG9vbCByZWdleCAtLWJ1ZworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwODEtbGluZS1idWZmZXIuc2ggYi90L3QwMDgxLWxpbmUtYnVmZmVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNlOTJlNmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDgxLWxpbmUtYnVmZmVyLnNoCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJUZXN0IHRoZSBzdm4gaW1wb3J0ZXIncyBpbnB1dCBoYW5kbGluZyByb3V0aW5lcy4KKworVGhlc2UgdGVzdHMgcHJvdmlkZSBzb21lIHNpbXBsZSBjaGVja3MgdGhhdCB0aGUgbGluZV9idWZmZXIgQVBJCitiZWhhdmVzIGFzIGFkdmVydGlzZWQuCisKK1doaWxlIGF0IGl0LCBjaGVjayB0aGF0IGlucHV0IG9mIG5ld2xpbmVzIGFuZCBudWxsIGJ5dGVzIGFyZSBoYW5kbGVkCitjb3JyZWN0bHkuCisiCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGVsbG8gd29ybGQnICcKKwllY2hvICI+SEVMTE8iID5leHBlY3QgJiYKKwl0ZXN0LWxpbmUtYnVmZmVyIDw8LVxFT0YgPmFjdHVhbCAmJgorCWJpbmFyeSA2CisJSEVMTE8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzAtbGVuZ3RoIHJlYWQsIHNlbmQgYWxvbmcgZ3JlZXRpbmcnICcKKwllY2hvICI+SEVMTE8iID5leHBlY3QgJiYKKwl0ZXN0LWxpbmUtYnVmZmVyIDw8LVxFT0YgPmFjdHVhbCAmJgorCWJpbmFyeSAwCisJY29weSA2CisJSEVMTE8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdyZWFkIGZyb20gZmlsZSBkZXNjcmlwdG9yJyAnCisJcm0gLWYgaW5wdXQgJiYKKwllY2hvIGhlbGxvID5leHBlY3QgJiYKKwllY2hvIGhlbGxvID5pbnB1dCAmJgorCWVjaG8gY29weSA2IHwKKwl0ZXN0LWxpbmUtYnVmZmVyICImNCIgNDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwLCBjb3B5IG51bGwgYnl0ZScgJworCWVjaG8gUSB8IHFfdG9fbnVsID5leHBlY3QgJiYKKwlxX3RvX251bCA8PC1cRU9GIHwgdGVzdC1saW5lLWJ1ZmZlciA+YWN0dWFsICYmCisJc2tpcCAyCisJUQorCWNvcHkgMgorCVEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgbnVsbCBieXRlJyAnCisJZWNobyAiPlFoZWxsb1EiIHwgcV90b19udWwgPmV4cGVjdCAmJgorCXFfdG9fbnVsIDw8LVxFT0YgfCB0ZXN0LWxpbmUtYnVmZmVyID5hY3R1YWwgJiYKKwliaW5hcnkgOAorCVFoZWxsb1EKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgcmVhZHMgYXJlIHRydW5jYXRlZCcgJworCWVjaG8gIj5mb28iID5leHBlY3QgJiYKKwl0ZXN0LWxpbmUtYnVmZmVyIDw8LVxFT0YgPmFjdHVhbCAmJgorCWJpbmFyeSA1CisJZm9vCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb25nIGNvcGllcyBhcmUgdHJ1bmNhdGVkJyAnCisJcHJpbnRmICIlc1xuIiAiPiIgZm9vID5leHBlY3QgJiYKKwl0ZXN0LWxpbmUtYnVmZmVyIDw8LVxFT0YgPmFjdHVhbCAmJgorCWJpbmFyeSAxCisKKwljb3B5IDUKKwlmb28KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgYmluYXJ5IHJlYWRzIGFyZSB0cnVuY2F0ZWQnICcKKwllY2hvICI+Zm9vIiA+ZXhwZWN0ICYmCisJdGVzdC1saW5lLWJ1ZmZlciA8PC1cRU9GID5hY3R1YWwgJiYKKwliaW5hcnkgNQorCWZvbworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDkwLWNhY2hlLXRyZWUuc2ggYi90L3QwMDkwLWNhY2hlLXRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWE2MzM2OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwOTAtY2FjaGUtdHJlZS5zaApAQCAtMCwwICsxLDI3NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IlRlc3Qgd2hldGhlciBjYWNoZS10cmVlIGlzIHByb3Blcmx5IHVwZGF0ZWQKKworVGVzdHMgd2hldGhlciB2YXJpb3VzIGNvbW1hbmRzIHByb3Blcmx5IHVwZGF0ZSBhbmQvb3IgcmV3cml0ZSB0aGUKK2NhY2hlLXRyZWUgZXh0ZW5zaW9uLgorIgorIC4gLi90ZXN0LWxpYi5zaAorCitjbXBfY2FjaGVfdHJlZSAoKSB7CisJdGVzdC10b29sIGR1bXAtY2FjaGUtdHJlZSB8IHNlZCAtZSAnLyMocmVmKS9kJyA+YWN0dWFsICYmCisJc2VkICJzLyRPSURfUkVHRVgvU0hBLyIgPGFjdHVhbCA+ZmlsdGVyZWQgJiYKKwl0ZXN0X2NtcCAiJDEiIGZpbHRlcmVkCit9CisKKyMgV2UgZG9uJ3QgYm90aGVyIHdpdGggYWN0dWFsbHkgY2hlY2tpbmcgdGhlIFNIQTE6CisjIHRlc3QtdG9vbCBkdW1wLWNhY2hlLXRyZWUgYWxyZWFkeSB2ZXJpZmllcyB0aGF0IGFsbCBleGlzdGluZyBkYXRhIGlzCisjIGNvcnJlY3QuCitnZW5lcmF0ZV9leHBlY3RlZF9jYWNoZV90cmVlX3JlYyAoKSB7CisJZGlyPSIkMSR7MTorL30iICYmCisJcGFyZW50PSIkMiIgJiYKKwkjIGxzLWZpbGVzIG1pZ2h0IGhhdmUgZm9vL2JhciwgZm9vL2Jhci9iYXosIGFuZCBmb28vYmFyL3F1dXgKKwkjIFdlIHdhbnQgdG8gY291bnQgb25seSBmb28gYmVjYXVzZSBpdCdzIHRoZSBvbmx5IGRpcmVjdCBjaGlsZAorCWdpdCBscy1maWxlcyA+ZmlsZXMgJiYKKwlzdWJ0cmVlcz0kKGdyZXAgLyBmaWxlc3xjdXQgLWQgLyAtZiAxfHVuaXEpICYmCisJc3VidHJlZV9jb3VudD0kKGVjaG8gIiRzdWJ0cmVlcyJ8YXdrIC12IGM9MCAnJDEgIT0gIiIgeysrY30gRU5EIHtwcmludCBjfScpICYmCisJZW50cmllcz0kKHdjIC1sIDxmaWxlcykgJiYKKwlwcmludGYgIlNIQSAkZGlyICglZCBlbnRyaWVzLCAlZCBzdWJ0cmVlcylcbiIgIiRlbnRyaWVzIiAiJHN1YnRyZWVfY291bnQiICYmCisJZm9yIHN1YnRyZWUgaW4gJHN1YnRyZWVzCisJZG8KKwkJY2QgIiRzdWJ0cmVlIgorCQlnZW5lcmF0ZV9leHBlY3RlZF9jYWNoZV90cmVlX3JlYyAiJGRpciRzdWJ0cmVlIiAiJGRpciIgfHwgcmV0dXJuIDEKKwkJY2QgLi4KKwlkb25lICYmCisJZGlyPSRwYXJlbnQKK30KKworZ2VuZXJhdGVfZXhwZWN0ZWRfY2FjaGVfdHJlZSAoKSB7CisJKAorCQlnZW5lcmF0ZV9leHBlY3RlZF9jYWNoZV90cmVlX3JlYworCSkKK30KKwordGVzdF9jYWNoZV90cmVlICgpIHsKKwlnZW5lcmF0ZV9leHBlY3RlZF9jYWNoZV90cmVlID5leHBlY3QgJiYKKwljbXBfY2FjaGVfdHJlZSBleHBlY3QKK30KKwordGVzdF9pbnZhbGlkX2NhY2hlX3RyZWUgKCkgeworCXByaW50ZiAiaW52YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlcyAoKVxuIiAiIiAiJEAiID5leHBlY3QgJiYKKwl0ZXN0LXRvb2wgZHVtcC1jYWNoZS10cmVlIHwKKwlzZWQgLW4gLWUgInMvWzAtOV0qIHN1YnRyZWVzLy8iIC1lICcvIyhyZWYpL2QnIC1lICcvXmludmFsaWQgL3AnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3Rfbm9fY2FjaGVfdHJlZSAoKSB7CisJOiA+ZXhwZWN0ICYmCisJY21wX2NhY2hlX3RyZWUgZXhwZWN0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWwgY29tbWl0IGhhcyBjYWNoZS10cmVlJyAnCisJdGVzdF9jb21taXQgZm9vICYmCisJdGVzdF9jYWNoZV90cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSBIRUFEIGVzdGFibGlzaGVzIGNhY2hlLXRyZWUnICcKKwlnaXQgcmVhZC10cmVlIEhFQUQgJiYKKwl0ZXN0X2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFkZCBpbnZhbGlkYXRlcyBjYWNoZS10cmVlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkOyBnaXQgcmVhZC10cmVlIEhFQUQiICYmCisJZWNobyAiSSBjaGFuZ2VkIHRoaXMgZmlsZSIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJdGVzdF9pbnZhbGlkX2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFkZCBpbiBzdWJkaXIgaW52YWxpZGF0ZXMgY2FjaGUtdHJlZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZDsgZ2l0IHJlYWQtdHJlZSBIRUFEIiAmJgorCW1rZGlyIGRpcnggJiYKKwllY2hvICJJIGNoYW5nZWQgdGhpcyBmaWxlIiA+ZGlyeC9mb28gJiYKKwlnaXQgYWRkIGRpcngvZm9vICYmCisJdGVzdF9pbnZhbGlkX2NhY2hlX3RyZWUKKycKKworY2F0ID5iZWZvcmUgPDxcRU9GCitTSEEgICgzIGVudHJpZXMsIDIgc3VidHJlZXMpCitTSEEgZGlyMS8gKDEgZW50cmllcywgMCBzdWJ0cmVlcykKK1NIQSBkaXIyLyAoMSBlbnRyaWVzLCAwIHN1YnRyZWVzKQorRU9GCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgoraW52YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIgc3VidHJlZXMpCitpbnZhbGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcjEvICgwIHN1YnRyZWVzKQorU0hBIGRpcjIvICgxIGVudHJpZXMsIDAgc3VidHJlZXMpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFkZCBpbiBzdWJkaXIgZG9lcyBub3QgaW52YWxpZGF0ZSBzaWJsaW5nIGNhY2hlLXRyZWUnICcKKwlnaXQgdGFnIG5vLWNoaWxkcmVuICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIG5vLWNoaWxkcmVuOyBnaXQgcmVhZC10cmVlIEhFQUQiICYmCisJbWtkaXIgZGlyMSBkaXIyICYmCisJdGVzdF9jb21taXQgZGlyMS9hICYmCisJdGVzdF9jb21taXQgZGlyMi9iICYmCisJZWNobyAiSSBjaGFuZ2VkIHRoaXMgZmlsZSIgPmRpcjEvYSAmJgorCWNtcF9jYWNoZV90cmVlIGJlZm9yZSAmJgorCWVjaG8gIkkgY2hhbmdlZCB0aGlzIGZpbGUiID5kaXIxL2EgJiYKKwlnaXQgYWRkIGRpcjEvYSAmJgorCWNtcF9jYWNoZV90cmVlIGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggaW52YWxpZGF0ZXMgY2FjaGUtdHJlZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZDsgZ2l0IHJlYWQtdHJlZSBIRUFEIiAmJgorCWVjaG8gIkkgY2hhbmdlZCB0aGlzIGZpbGUiID5mb28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZvbyAmJgorCXRlc3RfaW52YWxpZF9jYWNoZV90cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlLXRyZWUgZXN0YWJsaXNoZXMgY2FjaGUtdHJlZScgJworCXRlc3QtdG9vbCBzY3JhcC1jYWNoZS10cmVlICYmCisJZ2l0IHdyaXRlLXRyZWUgJiYKKwl0ZXN0X2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdC10b29sIHNjcmFwLWNhY2hlLXRyZWUgd29ya3MnICcKKwlnaXQgcmVhZC10cmVlIEhFQUQgJiYKKwl0ZXN0LXRvb2wgc2NyYXAtY2FjaGUtdHJlZSAmJgorCXRlc3Rfbm9fY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWNvbmQgY29tbWl0IGhhcyBjYWNoZS10cmVlJyAnCisJdGVzdF9jb21taXQgYmFyICYmCisJdGVzdF9jYWNoZV90cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY29tbWl0IC0taW50ZXJhY3RpdmUgZ2l2ZXMgY2FjaGUtdHJlZSBvbiBwYXJ0aWFsIGNvbW1pdCcgJworCWNhdCA8PC1cRU9UID5mb28uYyAmJgorCWludCBmb28oKQorCXsKKwkJcmV0dXJuIDQyOworCX0KKwlpbnQgYmFyKCkKKwl7CisJCXJldHVybiA0MjsKKwl9CisJRU9UCisJZ2l0IGFkZCBmb28uYyAmJgorCXRlc3RfaW52YWxpZF9jYWNoZV90cmVlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgZmlsZSIgJiYKKwl0ZXN0X2NhY2hlX3RyZWUgJiYKKwljYXQgPDwtXEVPVCA+Zm9vLmMgJiYKKwlpbnQgZm9vKCkKKwl7CisJCXJldHVybiA0MzsKKwl9CisJaW50IGJhcigpCisJeworCQlyZXR1cm4gNDQ7CisJfQorCUVPVAorCXRlc3Rfd3JpdGVfbGluZXMgcCAxICIiIHMgbiB5IHEgfAorCWdpdCBjb21taXQgLS1pbnRlcmFjdGl2ZSAtbSBmb28gJiYKKwl0ZXN0X2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjb21taXQgLXAgd2l0aCBzaHJpbmtpbmcgY2FjaGUtdHJlZScgJworCW1rZGlyIC1wIGRlZXAvdmVyeS1sb25nLXN1YmRpciAmJgorCWVjaG8gY29udGVudCA+ZGVlcC92ZXJ5LWxvbmctc3ViZGlyL2ZpbGUgJiYKKwlnaXQgYWRkIGRlZXAgJiYKKwlnaXQgY29tbWl0IC1tIGFkZCAmJgorCWdpdCBybSAtciBkZWVwICYmCisKKwliZWZvcmU9JCh3YyAtYyA8LmdpdC9pbmRleCkgJiYKKwlnaXQgY29tbWl0IC1tIGRlbGV0ZSAtcCAmJgorCWFmdGVyPSQod2MgLWMgPC5naXQvaW5kZXgpICYmCisKKwkjIGRvdWJsZSBjaGVjayB0aGF0IHRoZSBpbmRleCBzaHJhbmsKKwl0ZXN0ICRiZWZvcmUgLWd0ICRhZnRlciAmJgorCisJIyBhbmQgdGhhdCBvdXIgaW5kZXggd2FzIG5vdCBjb3JydXB0ZWQKKwlnaXQgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgaW4gY2hpbGQgZGlyIGhhcyBjYWNoZS10cmVlJyAnCisJbWtkaXIgZGlyICYmCisJPmRpci9jaGlsZC50ICYmCisJZ2l0IGFkZCBkaXIvY2hpbGQudCAmJgorCWdpdCBjb21taXQgLW0gZGlyL2NoaWxkLnQgJiYKKwl0ZXN0X2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1oYXJkIGdpdmVzIGNhY2hlLXRyZWUnICcKKwl0ZXN0LXRvb2wgc2NyYXAtY2FjaGUtdHJlZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1oYXJkIHdpdGhvdXQgaW5kZXggZ2l2ZXMgY2FjaGUtdHJlZScgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9jYWNoZV90cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGdpdmVzIGNhY2hlLXRyZWUnICcKKwlnaXQgdGFnIGN1cnJlbnQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwl0ZXN0X2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgZ2l2ZXMgY2FjaGUtdHJlZScgJworCWdpdCBjaGVja291dCBjdXJyZW50ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHByZXYgSEVBRF4gJiYKKwl0ZXN0X2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLUIgZ2l2ZXMgY2FjaGUtdHJlZScgJworCWdpdCBjaGVja291dCBjdXJyZW50ICYmCisJZ2l0IGNoZWNrb3V0IC1CIHByZXYgSEVBRF4gJiYKKwl0ZXN0X2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLS1mZi1vbmx5IG1haW50YWlucyBjYWNoZS10cmVlJyAnCisJZ2l0IGNoZWNrb3V0IGN1cnJlbnQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY2hhbmdlcyAmJgorCXRlc3RfY29tbWl0IGxsYW1hcyAmJgorCXRlc3RfY29tbWl0IHBhY2h5ZGVybSAmJgorCXRlc3RfY2FjaGVfdHJlZSAmJgorCWdpdCBjaGVja291dCBjdXJyZW50ICYmCisJdGVzdF9jYWNoZV90cmVlICYmCisJZ2l0IG1lcmdlIC0tZmYtb25seSBjaGFuZ2VzICYmCisJdGVzdF9jYWNoZV90cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG1haW50YWlucyBjYWNoZS10cmVlJyAnCisJZ2l0IGNoZWNrb3V0IGN1cnJlbnQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY2hhbmdlczIgJiYKKwl0ZXN0X2NvbW1pdCBhbHBhY2FzICYmCisJdGVzdF9jYWNoZV90cmVlICYmCisJZ2l0IGNoZWNrb3V0IGN1cnJlbnQgJiYKKwl0ZXN0X2NvbW1pdCBzdHJ1dGhpbyAmJgorCXRlc3RfY2FjaGVfdHJlZSAmJgorCWdpdCBtZXJnZSBjaGFuZ2VzMiAmJgorCXRlc3RfY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIGNvbW1pdCBnaXZlcyBjYWNoZS10cmVlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHBhcnRpYWwgbm8tY2hpbGRyZW4gJiYKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwllY2hvICJzb21lIGNoYW5nZSIgPm9uZS50ICYmCisJZ2l0IGFkZCBvbmUudCAmJgorCWVjaG8gInNvbWUgb3RoZXIgY2hhbmdlIiA+dHdvLnQgJiYKKwlnaXQgY29tbWl0IHR3by50IC1tIHBhcnRpYWwgJiYKKwl0ZXN0X2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gcGhhbnRvbSBlcnJvciB3aGVuIHN3aXRjaGluZyB0cmVlcycgJworCW1rZGlyIG5ld2RpciAmJgorCT5uZXdkaXIvb25lICYmCisJZ2l0IGFkZCBuZXdkaXIvb25lICYmCisJZ2l0IGNoZWNrb3V0IDI+ZXJyb3JzICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2hpbmcgdHJlZXMgZG9lcyBub3QgaW52YWxpZGF0ZSBzaGFyZWQgaW5kZXgnICcKKwkoCisJCXNhbmVfdW5zZXQgR0lUX1RFU1RfU1BMSVRfSU5ERVggJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLXNwbGl0LWluZGV4ICYmCisJCT5zcGxpdCAmJgorCQlnaXQgYWRkIHNwbGl0ICYmCisJCXRlc3QtdG9vbCBkdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBncmVwIC12IF5vd24gPmJlZm9yZSAmJgorCQlnaXQgY29tbWl0IC1tICJhcy1pcyIgJiYKKwkJdGVzdC10b29sIGR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IGdyZXAgLXYgXm93biA+YWZ0ZXIgJiYKKwkJdGVzdF9jbXAgYmVmb3JlIGFmdGVyCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwOTEtYnVncmVwb3J0LnNoIGIvdC90MDA5MS1idWdyZXBvcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTI2MzA0ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwOTEtYnVncmVwb3J0LnNoCkBAIC0wLDAgKzEsNzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYnVncmVwb3J0JworCisuIC4vdGVzdC1saWIuc2gKKworIyBIZWFkZXJzICJbU3lzdGVtIEluZm9dIiB3aWxsIGJlIGZvbGxvd2VkIGJ5IGEgbm9uLWVtcHR5IGxpbmUgaWYgd2UgcHV0IHNvbWUKKyMgaW5mb3JtYXRpb24gdGhlcmU7IHdlIGNhbiBtYWtlIHN1cmUgYWxsIG91ciBoZWFkZXJzIHdlcmUgZm9sbG93ZWQgYnkgc29tZQorIyBpbmZvcm1hdGlvbiB0byBjaGVjayBpZiB0aGUgY29tbWFuZCB3YXMgc3VjY2Vzc2Z1bC4KK0hFQURFUl9QQVRURVJOPSJeXFsuKlxdJCIKKworY2hlY2tfYWxsX2hlYWRlcnNfcG9wdWxhdGVkICgpIHsKKwl3aGlsZSByZWFkIC1yIGxpbmUKKwlkbworCQlpZiB0ZXN0ICIkKGdyZXAgIiRIRUFERVJfUEFUVEVSTiIgIiRsaW5lIikiCisJCXRoZW4KKwkJCWVjaG8gIiRsaW5lIgorCQkJcmVhZCAtciBuZXh0bGluZQorCQkJaWYgdGVzdCAteiAiJG5leHRsaW5lIjsgdGhlbgorCQkJCXJldHVybiAxOworCQkJZmkKKwkJZmkKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZXMgYSByZXBvcnQgd2l0aCBjb250ZW50IGluIHRoZSByaWdodCBwbGFjZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gZ2l0LWJ1Z3JlcG9ydC1jaGVjay1oZWFkZXJzLnR4dCAmJgorCWdpdCBidWdyZXBvcnQgLXMgY2hlY2staGVhZGVycyAmJgorCWNoZWNrX2FsbF9oZWFkZXJzX3BvcHVsYXRlZCA8Z2l0LWJ1Z3JlcG9ydC1jaGVjay1oZWFkZXJzLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWVzIGlmIGZpbGUgd2l0aCBzYW1lIG5hbWUgYXMgcmVwb3J0IGFscmVhZHkgZXhpc3RzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIGdpdC1idWdyZXBvcnQtZHVwbGljYXRlLnR4dCAmJgorCT4+Z2l0LWJ1Z3JlcG9ydC1kdXBsaWNhdGUudHh0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJ1Z3JlcG9ydCAtLXN1ZmZpeCBkdXBsaWNhdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vdXRwdXQtZGlyZWN0b3J5IHB1dHMgdGhlIHJlcG9ydCBpbiB0aGUgcHJvdmlkZWQgZGlyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1mciBmb28vICYmCisJZ2l0IGJ1Z3JlcG9ydCAtbyBmb28vICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZm9vL2dpdC1idWdyZXBvcnQtKgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNvcnJlY3QgYXJndW1lbnRzIGFib3J0IHdpdGggdXNhZ2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnVncmVwb3J0IC0tZmFsc2UgMj5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwIHVzYWdlIG91dHB1dCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGdpdC1idWdyZXBvcnQtKgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW5zIG91dHNpZGUgb2YgYSBnaXQgZGlyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIG5vbi1yZXBvL2dpdC1idWdyZXBvcnQtKiAmJgorCW5vbmdpdCBnaXQgYnVncmVwb3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbiBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvdXRzaWRlIG9mIGEgZ2l0IGRpcicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtZnIgZm9vL2Jhci9iYXogJiYKKwlub25naXQgZ2l0IGJ1Z3JlcG9ydCAtbyBmb28vYmFyL2JhegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRpY2F0ZXMgcG9wdWxhdGVkIGhvb2tzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIGdpdC1idWdyZXBvcnQtaG9va3MudHh0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1mciAuZ2l0L2hvb2tzICYmCisJcm0gLWZyIC5naXQvaG9va3MgJiYKKwlta2RpciAuZ2l0L2hvb2tzICYmCisJZm9yIGhvb2sgaW4gYXBwbHlwYXRjaC1tc2cgcHJlcGFyZS1jb21taXQtbXNnLnNhbXBsZQorCWRvCisJCXdyaXRlX3NjcmlwdCAiLmdpdC9ob29rcy8kaG9vayIgPDwtRU9GIHx8IHJldHVybiAxCisJCWVjaG8gImhvb2sgJGhvb2sgZXhpc3RzIgorCQlFT0YKKwlkb25lICYmCisJZ2l0IGJ1Z3JlcG9ydCAtcyBob29rcyAmJgorCWdyZXAgYXBwbHlwYXRjaC1tc2cgZ2l0LWJ1Z3JlcG9ydC1ob29rcy50eHQgJiYKKwkhIGdyZXAgcHJlcGFyZS1jb21taXQtbXNnIGdpdC1idWdyZXBvcnQtaG9va3MudHh0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA5NS1ibG9vbS5zaCBiL3QvdDAwOTUtYmxvb20uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjMyYmEyYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwOTUtYmxvb20uc2gKQEAgLTAsMCArMSwxMTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0aW5nIHRoZSB2YXJpb3VzIEJsb29tIGZpbHRlciBjb21wdXRhdGlvbnMgaW4gYmxvb20uYycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wdXRlIHVuc2VlZGVkIG11cm11cjMgaGFzaCBmb3IgZW1wdHkgc3RyaW5nJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU11cm11cjMgSGFzaCB3aXRoIHNlZWQ9MDoweDAwMDAwMDAwCisJRU9GCisJdGVzdC10b29sIGJsb29tIGdldF9tdXJtdXIzICIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXB1dGUgdW5zZWVkZWQgbXVybXVyMyBoYXNoIGZvciB0ZXN0IHN0cmluZyAxJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU11cm11cjMgSGFzaCB3aXRoIHNlZWQ9MDoweDYyN2IwYzJjCisJRU9GCisJdGVzdC10b29sIGJsb29tIGdldF9tdXJtdXIzICJIZWxsbyB3b3JsZCEiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXB1dGUgdW5zZWVkZWQgbXVybXVyMyBoYXNoIGZvciB0ZXN0IHN0cmluZyAyJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU11cm11cjMgSGFzaCB3aXRoIHNlZWQ9MDoweDJlNGZmNzIzCisJRU9GCisJdGVzdC10b29sIGJsb29tIGdldF9tdXJtdXIzICJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wdXRlIGJsb29tIGtleSBmb3IgZW1wdHkgc3RyaW5nJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUhhc2hlczoweDU2MTU4MDBjfDB4NWI5NjY1NjB8MHg2MTE3NGFiNHwweDY2OTgzMDA4fDB4NmMxOTE1NWN8MHg3MTk5ZmFiMHwweDc3MWFlMDA0fAorCUZpbHRlcl9MZW5ndGg6MgorCUZpbHRlcl9EYXRhOjExfDExfAorCUVPRgorCXRlc3QtdG9vbCBibG9vbSBnZW5lcmF0ZV9maWx0ZXIgIiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcHV0ZSBibG9vbSBrZXkgZm9yIHdoaXRlc3BhY2UnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJSGFzaGVzOjB4ZjE3ODg3NGN8MHg1ZjNkNmViNnwweGNkMDI1NjIwfDB4M2FjNzNkOGF8MHhhODhjMjRmNHwweDE2NTEwYzVlfDB4ODQxNWYzYzh8CisJRmlsdGVyX0xlbmd0aDoyCisJRmlsdGVyX0RhdGE6NTF8NTV8CisJRU9GCisJdGVzdC10b29sIGJsb29tIGdlbmVyYXRlX2ZpbHRlciAiICIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcHV0ZSBibG9vbSBrZXkgZm9yIHRlc3Qgc3RyaW5nIDEnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJSGFzaGVzOjB4YjI3MGRlOWJ8MHgxYmI2ZjI2ZXwweDg0ZmQwNjQxfDB4ZWU0MzFhMTR8MHg1Nzg5MmRlN3wweGMwY2Y0MWJhfDB4MmExNTU1OGR8CisJRmlsdGVyX0xlbmd0aDoyCisJRmlsdGVyX0RhdGE6OTJ8NmN8CisJRU9GCisJdGVzdC10b29sIGJsb29tIGdlbmVyYXRlX2ZpbHRlciAiSGVsbG8gd29ybGQhIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wdXRlIGJsb29tIGtleSBmb3IgdGVzdCBzdHJpbmcgMicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlIYXNoZXM6MHgyMGFiMzg1YnwweGY1MjM3ZmUyfDB4Yzk5YmM3Njl8MHg5ZTE0MGVmMHwweDcyOGM1Njc3fDB4NDcwNDlkZmV8MHgxYjdjZTU4NXwKKwlGaWx0ZXJfTGVuZ3RoOjIKKwlGaWx0ZXJfRGF0YTphNXw0YXwKKwlFT0YKKwl0ZXN0LXRvb2wgYmxvb20gZ2VuZXJhdGVfZmlsdGVyICJmaWxlLnR4dCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IGJsb29tIGZpbHRlcnMgZm9yIGNvbW1pdCB3aXRoIG5vIGNoYW5nZXMnICcKKwlnaXQgaW5pdCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiYzAiICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUZpbHRlcl9MZW5ndGg6MAorCUZpbHRlcl9EYXRhOgorCUVPRgorCXRlc3QtdG9vbCBibG9vbSBnZXRfZmlsdGVyX2Zvcl9jb21taXQgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IGJsb29tIGZpbHRlciBmb3IgY29tbWl0IHdpdGggMTAgY2hhbmdlcycgJworCXJtIGFjdHVhbCAmJgorCXJtIGV4cGVjdCAmJgorCW1rZGlyIHNtYWxsRGlyICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAwIDkpCisJZG8KKwkJZWNobyAkaSA+c21hbGxEaXIvJGkKKwlkb25lICYmCisJZ2l0IGFkZCBzbWFsbERpciAmJgorCWdpdCBjb21taXQgLW0gImNvbW1pdCB3aXRoIDEwIGNoYW5nZXMiICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUZpbHRlcl9MZW5ndGg6MTQKKwlGaWx0ZXJfRGF0YTowMnxiM3xjNHxhMHwzNHxlN3xmZXxlYnxjYnw0N3xmZXxhMHxlOHw3MnwKKwlFT0YKKwl0ZXN0LXRvb2wgYmxvb20gZ2V0X2ZpbHRlcl9mb3JfY29tbWl0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRVhQRU5TSVZFICdnZXQgYmxvb20gZmlsdGVyIGZvciBjb21taXQgd2l0aCA1MTMgY2hhbmdlcycgJworCXJtIGFjdHVhbCAmJgorCXJtIGV4cGVjdCAmJgorCW1rZGlyIGJpZ0RpciAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMCA1MTEpCisJZG8KKwkJZWNobyAkaSA+YmlnRGlyLyRpCisJZG9uZSAmJgorCWdpdCBhZGQgYmlnRGlyICYmCisJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IHdpdGggNTEzIGNoYW5nZXMiICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUZpbHRlcl9MZW5ndGg6MAorCUZpbHRlcl9EYXRhOgorCUVPRgorCXRlc3QtdG9vbCBibG9vbSBnZXRfZmlsdGVyX2Zvcl9jb21taXQgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMTAwLXByZXZpb3VzLnNoIGIvdC90MDEwMC1wcmV2aW91cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41OGMwYjdlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDEwMC1wcmV2aW91cy5zaApAQCAtMCwwICsxLDY4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHJldmlvdXMgYnJhbmNoIHN5bnRheCBAey1ufScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtZCBAey0xfScgJworCXRlc3RfY29tbWl0IEEgJiYKKwlnaXQgY2hlY2tvdXQgLWIganVuayAmJgorCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtZCBAey0xfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9qdW5rCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtZCBAey0xMn0gd2hlbiB0aGVyZSBpcyBub3QgZW5vdWdoIHN3aXRjaGVzIHlldCcgJworCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPW5vdyAmJgorCWdpdCBjaGVja291dCAtYiBqdW5rMiAmJgorCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtZCBAey0xMn0gJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIEB7LTF9JyAnCisJZ2l0IGNoZWNrb3V0IEEgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJZ2l0IGNoZWNrb3V0IEEgJiYKKwl0ZXN0X2NvbW1pdCBDICYmCisJdGVzdF9jb21taXQgRCAmJgorCWdpdCBicmFuY2ggLWYgbWFzdGVyIEIgJiYKKwlnaXQgYnJhbmNoIC1mIG90aGVyICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSBAey0xfSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgIk1lcmdlIGJyYW5jaCAnXCcnb3RoZXInXCcnIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBAey0xfX4xJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgQiAmJgorCWdpdCBjaGVja291dCBvdGhlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgQHstMX1+MSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YWN0dWFsICYmCisJZ3JlcCAiTWVyZ2UgYnJhbmNoICdcJydvdGhlcidcJyciIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBAey0xMDB9IGJlZm9yZSBjaGVja2luZyBvdXQgdGhhdCBtYW55IGJyYW5jaGVzIHlldCcgJworCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPW5vdyAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEIgJiYKKwlnaXQgYnJhbmNoIC1mIG90aGVyIEMgJiYKKwlnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEB7LTEwMH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1nIEB7LTF9JyAnCisJZ2l0IGNoZWNrb3V0IC1iIGxhc3RfYnJhbmNoICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5ld19icmFuY2ggJiYKKwllY2hvICJsYXN0X2JyYW5jaEB7MH0iID5leHBlY3QgJiYKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSVnZCBAey0xfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90MDEwMS1hdC1zeW50YXguc2ggYi90L3QwMTAxLWF0LXN5bnRheC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMTk5OGI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDEwMS1hdC1zeW50YXguc2gKQEAgLTAsMCArMSw0NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3ZhcmlvdXMgQHt3aGF0ZXZlcn0gc3ludGF4IHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvCisnCisKK2NoZWNrX2F0KCkgeworCWVjaG8gIiQyIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyAiJDEiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7MH0gc2hvd3MgY3VycmVudCcgJworCWNoZWNrX2F0IEB7MH0gdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7MX0gc2hvd3Mgb2xkJyAnCisJY2hlY2tfYXQgQHsxfSBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHtub3d9IHNob3dzIGN1cnJlbnQnICcKKwljaGVja19hdCBAe25vd30gdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7MjAwMS0wOS0xN30gKGJlZm9yZSB0aGUgZmlyc3QgY29tbWl0KSBzaG93cyBvbGQnICcKKwljaGVja19hdCBAezIwMDEtMDktMTd9IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWxseSBhcHByb3hpZGF0ZXMgd29yaycgJworCWNoZWNrX2F0IEB7My5ob3QuZG9ncy5vbi4yMDAxLTA5LTE3fSBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90aWNlIG1pc3NwZWxsZWQgdXBzdHJlYW0nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC0xIC0tZm9ybWF0PSVzIEB7dXNwdHJlYW19CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXBsYWluIGFib3V0IHRvdGFsIG5vbnNlbnNlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyBAe3V0dGVyLmJvZ29zaXR5fQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAxMTAtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbi5zaCBiL3QvdDAxMTAtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOTk1MjlkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDExMC11cmxtYXRjaC1ub3JtYWxpemF0aW9uLnNoCkBAIC0wLDAgKzEsMTgwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndXJsbWF0Y2ggVVJMIG5vcm1hbGl6YXRpb24nCisuIC4vdGVzdC1saWIuc2gKKworIyBUaGUgYmFzZSBuYW1lIG9mIHRoZSB0ZXN0IHVybCBmaWxlcwordHU9IiRURVNUX0RJUkVDVE9SWS90MDExMC91cmwiCisKKyMgTm90ZSB0aGF0IG9ubHkgZmlsZTogVVJMcyBzaG91bGQgYmUgYWxsb3dlZCB3aXRob3V0IGEgaG9zdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cmwgc2NoZW1lJyAnCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gIl8iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZToiICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImZpbGUiICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiZmlsZToiICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiZmlsZTovIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJmaWxlOi8vIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gIjovL2FjbWUuY28iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieF90ZXN0Oi8vYWNtZS5jbyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICItdGVzdDovL2FjbWUuY28iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiMHRlc3Q6Ly9hY21lLmNvIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gIit0ZXN0Oi8vYWNtZS5jbyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICIudGVzdDovL2FjbWUuY28iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW0lNmU6Ly8iICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gIngtVGVzdCt2MS4wOi8vYWNtZS5jbyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJBYkNkZUY6Ly94LlkiKSIgPSAiYWJjZGVmOi8veC55LyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXJsIGF1dGhvcml0eScgJworCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL3VzZXI6cGFzc0AiICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vPyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly8jIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovLy8iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vOiIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly86NTU1IiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJmaWxlOi8vdXNlcjpwYXNzQCIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiZmlsZTovLz8iICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImZpbGU6Ly8jIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJmaWxlOi8vLyIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiZmlsZTovLzoiICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiZmlsZTovLzo1NTUiICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL3VzZXI6cGFzc0Bob3N0IiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9AaG9zdCIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vJTAwQGhvc3QiICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vJSVAaG9zdCIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9ob3N0XyIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vdXNlcjpwYXNzQGhvc3QvIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9AaG9zdC8iICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL2hvc3QvIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9ob3N0P3giICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL2hvc3QjeCIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vaG9zdC9AIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9ob3N0P0B4IiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9ob3N0I0B4IiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9bOjoxXSIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vWzo6MV0vIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL2hvcyU0MS8iICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL1tpbnZhbGlkLi4uLjovIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9pbnZhbGlkLi4uLjpdLyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9pbnZhbGlkLi4uLjpbLyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9pbnZhbGlkLi4uLjpbIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cmwgcG9ydCBjaGVja3MnICcKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6IiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4eXo6Ly9xQHNvbWUuaG9zdDo0NTYvIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL3FAc29tZS5ob3N0OjAiICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6MDAwMDAwMCIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6MDAwMDAwMT8iICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL3FAc29tZS5ob3N0OjA2NTUzNSMiICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL3FAc29tZS5ob3N0OjY1NTM1IiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL3FAc29tZS5ob3N0OjY1NTM2IiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL3FAc29tZS5ob3N0Ojk5OTk5IiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL3FAc29tZS5ob3N0OjEwMDAwMCIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4eXo6Ly9xQHNvbWUuaG9zdDoxMDAwMDEiICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImh0dHA6Ly9xQHNvbWUuaG9zdDo4MCIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cHM6Ly9xQHNvbWUuaG9zdDo0NDMiICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImh0dHA6Ly9xQHNvbWUuaG9zdDo4MC8iICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImh0dHBzOi8vcUBzb21lLmhvc3Q6NDQzPyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJodHRwOi8vcUA6ODAwOCIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJodHRwOi8vOjgwODAiICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cDovLzoiICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL3FAc29tZS5ob3N0OjQ1Ni8iICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL1s6OjFdOjQ1Ni8iICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL1s6OjFdOi8iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vWzo6MV06MDAwLyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4eXo6Ly9bOjoxXTowJTMwMC8iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vWzo6MV06MHg4MC8iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vWzo6MV06NDI5NDk2NzI5Ny8iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vWzo6MV06MDMwZi8iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybCBwb3J0IG5vcm1hbGl6YXRpb24nICcKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJodHRwOi8veDo4MDAiKSIgPSAiaHR0cDovL3g6ODAwLyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJodHRwOi8veDowODAwIikiID0gImh0dHA6Ly94OjgwMC8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiaHR0cDovL3g6MDAwMDA4MDAiKSIgPSAiaHR0cDovL3g6ODAwLyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJodHRwOi8veDowNjU1MzUiKSIgPSAiaHR0cDovL3g6NjU1MzUvIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgImh0dHA6Ly94OjEiKSIgPSAiaHR0cDovL3g6MS8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiaHR0cDovL3g6ODAiKSIgPSAiaHR0cDovL3gvIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgImh0dHA6Ly94OjA4MCIpIiA9ICJodHRwOi8veC8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiaHR0cDovL3g6MDAwMDAwMDgwIikiID0gImh0dHA6Ly94LyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJodHRwczovL3g6NDQzIikiID0gImh0dHBzOi8veC8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiaHR0cHM6Ly94OjA0NDMiKSIgPSAiaHR0cHM6Ly94LyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJodHRwczovL3g6MDAwMDAwNDQzIikiID0gImh0dHBzOi8veC8iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybCBnZW5lcmFsIGVzY2FwZXMnICcKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJodHRwOi8veC55PyVmZyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJYOi8vVy8lN2UlNDFeJTNhIikiID0gIng6Ly93L35BJTVFJTNBIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIlg6Ly9XLzovPyNbXUAiKSIgPSAieDovL3cvOi8/I1tdQCIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJYOi8vVy8kJigpKissOz0iKSIgPSAieDovL3cvJCYoKSorLDs9IiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIlg6Ly9XLydcJyciKSIgPSAieDovL3cvJ1wnJyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJYOi8vVz8nXCEnIikiID0gIng6Ly93Lz8nXCEnIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAndXJsIGhpZ2gtYml0IGVzY2FwZXMnICcKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICIkKGNhdCAiJHR1LTEiKSIpIiA9ICJ4Oi8vcS8lMDElMDIlMDMlMDQlMDUlMDYlMDclMDglMEUlMEYlMTAlMTElMTIiICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiJChjYXQgIiR0dS0yIikiKSIgPSAieDovL3EvJTEzJTE0JTE1JTE2JTE3JTE4JTE5JTFCJTFDJTFEJTFFJTFGJTdGIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIiQoY2F0ICIkdHUtMyIpIikiID0gIng6Ly9xLyU4MCU4MSU4MiU4MyU4NCU4NSU4NiU4NyU4OCU4OSU4QSU4QiU4QyU4RCU4RSU4RiIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICIkKGNhdCAiJHR1LTQiKSIpIiA9ICJ4Oi8vcS8lOTAlOTElOTIlOTMlOTQlOTUlOTYlOTclOTglOTklOUElOUIlOUMlOUQlOUUlOUYiICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiJChjYXQgIiR0dS01IikiKSIgPSAieDovL3EvJUEwJUExJUEyJUEzJUE0JUE1JUE2JUE3JUE4JUE5JUFBJUFCJUFDJUFEJUFFJUFGIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIiQoY2F0ICIkdHUtNiIpIikiID0gIng6Ly9xLyVCMCVCMSVCMiVCMyVCNCVCNSVCNiVCNyVCOCVCOSVCQSVCQiVCQyVCRCVCRSVCRiIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICIkKGNhdCAiJHR1LTciKSIpIiA9ICJ4Oi8vcS8lQzAlQzElQzIlQzMlQzQlQzUlQzYlQzclQzglQzklQ0ElQ0IlQ0MlQ0QlQ0UlQ0YiICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiJChjYXQgIiR0dS04IikiKSIgPSAieDovL3EvJUQwJUQxJUQyJUQzJUQ0JUQ1JUQ2JUQ3JUQ4JUQ5JURBJURCJURDJUREJURFJURGIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIiQoY2F0ICIkdHUtOSIpIikiID0gIng6Ly9xLyVFMCVFMSVFMiVFMyVFNCVFNSVFNiVFNyVFOCVFOSVFQSVFQiVFQyVFRCVFRSVFRiIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICIkKGNhdCAiJHR1LTEwIikiKSIgPSAieDovL3EvJUYwJUYxJUYyJUYzJUY0JUY1JUY2JUY3JUY4JUY5JUZBJUZCJUZDJUZEJUZFJUZGIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cmwgdXRmLTggZXNjYXBlcycgJworCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIiQoY2F0ICIkdHUtMTEiKSIpIiA9ICJ4Oi8vcS8lQzIlODAlREYlQkYlRTAlQTAlODAlRUYlQkYlQkQlRjAlOTAlODAlODAlRjAlQUYlQkYlQkQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybCB1c2VybmFtZS9wYXNzd29yZCBlc2NhcGVzJyAnCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovLyU0MSU2MiheKTolNzArZEBmb28iKSIgPSAieDovL0FiKCU1RSk6cCtkQGZvby8iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybCBub3JtYWxpemVkIGxlbmd0aHMnICcKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1sICJIdHRwOi8vJTRkJTY1OiU0ZF4lNzBAVGhlLkhvc3QiKSIgPSAyNSAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLWwgImh0dHA6Ly8lNDE6JTQyQHgueS8lNjEvIikiID0gMTcgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1sICJodHRwOi8vQHgueS9eIikiID0gMTUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXJsIC4gYW5kIC4uIHNlZ21lbnRzJyAnCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvLiIpIiA9ICJ4Oi8veS8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvLi8iKSIgPSAieDovL3kvIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIng6Ly95L2EvLiIpIiA9ICJ4Oi8veS9hIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIng6Ly95L2EvLi8iKSIgPSAieDovL3kvYS8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvLj8iKSIgPSAieDovL3kvPyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS8uLz8iKSIgPSAieDovL3kvPyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS9hLy4/IikiID0gIng6Ly95L2E/IiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIng6Ly95L2EvLi8/IikiID0gIng6Ly95L2EvPyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS9hLy4vYi8uLi8uLy4uL2MiKSIgPSAieDovL3kvYyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS9hLy4vYi8uLi8uLi8uL2MvIikiID0gIng6Ly95L2MvIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIng6Ly95L2EvLi9iLy4uLy4vLi4vYy8uLy4vLi4vLi8uIikiID0gIng6Ly95LyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4Oi8veS9hLy4vYi8uLi8uLy4uL2MvLi8uLy4uLy4vLi4iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvYS8uLz8vLi8uLy4uIikiID0gIng6Ly95L2EvPy8uLy4vLi4iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvJTJlLyIpIiA9ICJ4Oi8veS8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvJTJFLyIpIiA9ICJ4Oi8veS8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvYS8lMmUuLyIpIiA9ICJ4Oi8veS8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvYi8uJTJFLyIpIiA9ICJ4Oi8veS8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvYy8lMmUlMkUvIikiID0gIng6Ly95LyIKKycKKworIyBodHRwOi8vQGZvbyBzcGVjaWZpZXMgYW4gZW1wdHkgdXNlciBuYW1lIGJ1dCBkb2VzIG5vdCBzcGVjaWZ5IGEgcGFzc3dvcmQKKyMgaHR0cDovL2ZvbyAgc3BlY2lmaWVzIG5laXRoZXIgYSB1c2VyIG5hbWUgbm9yIGEgcGFzc3dvcmQKKyMgU28gdGhleSBzaG91bGQgbm90IGJlIGVxdWl2YWxlbnQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybCBlcXVpdmFsZW50cycgJworCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJodHRQOi8veCIgIkh0dHA6Ly9YLyIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiSHR0cDovLyU0ZCU2NTolNGReJTcwQFRoZS5Ib3N0IiAiaFRUUDovL01lOiU0RF5wQHRoZS5IT1NUOjgwLyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJodHRwczovL0B4LnkvXiIgImh0dHBTOi8veC55OjQ0My9eIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJodHRwczovL0B4LnkvXiIgImh0dHBTOi8vQHgueTowNDQzL14iICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImh0dHBzOi8vQHgueS9eLy4uL2FiYyIgImh0dHBTOi8vQHgueTowNDQzL2FiYyIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cHM6Ly9AeC55L14vLi4iICJodHRwUzovL0B4Lnk6MDQ0My8iCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDExMC9SRUFETUUgYi90L3QwMTEwL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDRhNTBlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDExMC9SRUFETUUKQEAgLTAsMCArMSw5IEBACitUaGUgdXJsIGRhdGEgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgY29udGFpbiBVUkxzIHdpdGggY2hhcmFjdGVycworaW4gdGhlIHJhbmdlIDB4MDEtMHgxZiBhbmQgMHg3Zi0weGZmIHRvIHRlc3QgdGhlIHByb3BlciBub3JtYWxpemF0aW9uCitvZiB1bnByaW50YWJsZSBjaGFyYWN0ZXJzLgorCitBIHNlbGVjdCBmZXcgY2hhcmFjdGVycyBpbiB0aGUgMHgwMS0weDFmIHJhbmdlIGFyZSBza2lwcGVkIHRvIGhlbHAKK2F2b2lkIHByb2JsZW1zIHJ1bm5pbmcgdGhlIHRlc3QgaXRzZWxmLgorCitUaGUgdXJscyBhcmUgaW4gdGVzdCBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSByYXRoZXIgdGhhbiBiZWluZworZW1iZWRkZWQgaW4gdGhlIHRlc3Qgc2NyaXB0IGZvciBwb3J0YWJpbGl0eS4KZGlmZiAtLWdpdCBhL3QvdDAxMTAvdXJsLTEgYi90L3QwMTEwL3VybC0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOTAxOWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMTEwL3VybC0xCkBAIC0wLDAgKzEgQEAKK3g6Ly9xLwECAwQFBgcIDg8QERIKZGlmZiAtLWdpdCBhL3QvdDAxMTAvdXJsLTEwIGIvdC90MDExMC91cmwtMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5NjVkZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTEwCkBAIC0wLDAgKzEgQEAKK3g6Ly9xL/Dx8vP09fb3+Pn6+/z9/v8KZGlmZiAtLWdpdCBhL3QvdDAxMTAvdXJsLTExIGIvdC90MDExMC91cmwtMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBhNTBmMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTExCkBAIC0wLDAgKzEgQEAKK3g6Ly9xL8KA37/goIDvv73wkICA8K+/vQpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtMiBiL3QvdDAxMTAvdXJsLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMzMzRiMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTIKQEAgLTAsMCArMSBAQAoreDovL3EvExQVFhcYGRscHR4ffwpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtMyBiL3QvdDAxMTAvdXJsLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3OGM3YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTMKQEAgLTAsMCArMSBAQAoreDovL3EvgIGCg4SFhoeIiYqLjI2OjwpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtNCBiL3QvdDAxMTAvdXJsLTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIwYjE5OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTQKQEAgLTAsMCArMSBAQAoreDovL3EvkJGSk5SVlpeYmZqbnJ2enwpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtNSBiL3QvdDAxMTAvdXJsLTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjZDkyNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTUKQEAgLTAsMCArMSBAQAoreDovL3EvoKGio6SlpqeoqaqrrK2urwpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtNiBiL3QvdDAxMTAvdXJsLTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyODNhYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTYKQEAgLTAsMCArMSBAQAoreDovL3EvsLGys7S1tre4ubq7vL2+vwpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtNyBiL3QvdDAxMTAvdXJsLTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3YzEwYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTcKQEAgLTAsMCArMSBAQAoreDovL3EvwMHCw8TFxsfIycrLzM3OzwpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtOCBiL3QvdDAxMTAvdXJsLTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhMGJhOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTgKQEAgLTAsMCArMSBAQAoreDovL3Ev0NHS09TV1tfY2drb3N3e3wpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtOSBiL3QvdDAxMTAvdXJsLTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI0NGJlYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTkKQEAgLTAsMCArMSBAQAoreDovL3Ev4OHi4+Tl5ufo6err7O3u7wpkaWZmIC0tZ2l0IGEvdC90MDIwMC1nZXR0ZXh0LWJhc2ljLnNoIGIvdC90MDIwMC1nZXR0ZXh0LWJhc2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4NTNkOGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjAwLWdldHRleHQtYmFzaWMuc2gKQEAgLTAsMCArMSwxMDggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nR2V0dGV4dCBzdXBwb3J0IGZvciBHaXQnCisKKy4gLi9saWItZ2V0dGV4dC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzYW5pdHk6IFwkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FIGlzIHNldCAodG8gJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSkiICcKKyAgICB0ZXN0IC1uICIkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW5pdHk6ICRURVhURE9NQUlOIGlzIGdpdCcgJworICAgIHRlc3QgJFRFWFRET01BSU4gPSAiZ2l0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd4Z2V0dGV4dCBzYW5pdHk6IFBlcmwgXygpIHN0cmluZ3MgYXJlIG5vdCBleHRyYWN0ZWQnICcKKyAgICAhIGdyZXAgIkEgUGVybCBzdHJpbmcgeGdldHRleHQgd2lsbCBub3QgZ2V0IiAiJEdJVF9QT19QQVRIIi9pcy5wbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd4Z2V0dGV4dCBzYW5pdHk6IENvbW1lbnQgZXh0cmFjdGlvbiB3aXRoIC0tYWRkLWNvbW1lbnRzJyAnCisgICAgZ3JlcCAiVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0IiAiJFRFU1RfRElSRUNUT1JZIi90MDIwMC8qIHwgd2MgLWwgPmV4cGVjdCAmJgorICAgIGdyZXAgIlRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdCIgIiRHSVRfUE9fUEFUSCIvaXMucG8gIHwgd2MgLWwgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAneGdldHRleHQgc2FuaXR5OiBDb21tZW50IGV4dHJhY3Rpb24gd2l0aCAtLWFkZC1jb21tZW50cyBzdG9wcyBhdCBzdGF0ZW1lbnRzJyAnCisgICAgISBncmVwICJUaGlzIGlzIGEgcGhvbnkiICIkR0lUX1BPX1BBVEgiL2lzLnBvICYmCisgICAgISBncmVwICJ0aGUgYWJvdmUgY29tbWVudCIgIiRHSVRfUE9fUEFUSCIvaXMucG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUICdzYW5pdHk6ICRURVhURE9NQUlORElSIGV4aXN0cyB3aXRob3V0IE5PX0dFVFRFWFQ9WWVzUGxlYXNlJyAnCisgICAgdGVzdCAtZCAiJFRFWFRET01BSU5ESVIiICYmCisgICAgdGVzdCAiJFRFWFRET01BSU5ESVIiID0gIiRHSVRfVEVYVERPTUFJTkRJUiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUICdzYW5pdHk6IEljZWxhbmRpYyBsb2NhbGUgd2FzIGNvbXBpbGVkJyAnCisgICAgdGVzdCAtZiAiJFRFWFRET01BSU5ESVIvaXMvTENfTUVTU0FHRVMvZ2l0Lm1vIgorJworCisjIFRPRE86IFdoZW4gd2UgaGF2ZSBtb3JlIGxvY2FsZXMsIGdlbmVyYWxpemUgdGhpcyB0byB0ZXN0IHRoZW0KKyMgYWxsLiBNYXliZSB3ZSdsbCBuZWVkIGEgZGlyLT5sb2NhbGUgbWFwIGZvciB0aGF0LgordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAnc2FuaXR5OiBnZXR0ZXh0KCIiKSBtZXRhZGF0YSBpcyBPSycgJworICAgICMgUmV0dXJuIHZhbHVlIG1heSBiZSBub24temVybworICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2xvY2FsZSIgZ2V0dGV4dCAiIiA+emVyby1leHBlY3QgJiYKKyAgICBncmVwICJQcm9qZWN0LUlkLVZlcnNpb246IEdpdCIgemVyby1leHBlY3QgJiYKKyAgICBncmVwICJHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPiIgemVyby1leHBlY3QgJiYKKyAgICBncmVwICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiIHplcm8tZXhwZWN0ICYmCisgICAgZ3JlcCAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdCIgemVyby1leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAnc2FuaXR5OiBnZXR0ZXh0KHVua25vd24pIGlzIHBhc3NlZCB0aHJvdWdoJyAnCisgICAgcHJpbnRmICJUaGlzIGlzIG5vdCBhIHRyYW5zbGF0aW9uIHN0cmluZyIgID5leHBlY3QgJiYKKyAgICBnZXR0ZXh0ICJUaGlzIGlzIG5vdCBhIHRyYW5zbGF0aW9uIHN0cmluZyIgPmFjdHVhbCAmJgorICAgIGV2YWxfZ2V0dGV4dCAiVGhpcyBpcyBub3QgYSB0cmFuc2xhdGlvbiBzdHJpbmciID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgeGdldHRleHQgZnJvbSBDCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICd4Z2V0dGV4dDogQyBleHRyYWN0aW9uIG9mIF8oKSBhbmQgTl8oKSBzdHJpbmdzJyAnCisgICAgcHJpbnRmICJUSUxSQVVOOiBDIHRpbHJhdW5hc3RyZW5ndXIiID5leHBlY3QgJiYKKyAgICBwcmludGYgIlxuIiA+PmV4cGVjdCAmJgorICAgIHByaW50ZiAiU2rDoSAnXCcnZ2l0IGhlbHAgU0tJUFVOJ1wnJyB0aWwgYcOwIHNqw6EgaGrDoWxwIGZ5cmlyIHRpbHRla25hIHNraXB1bi4iID4+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICJURVNUOiBBIEMgdGVzdCBzdHJpbmciID5hY3R1YWwgJiYKKyAgICBwcmludGYgIlxuIiA+PmFjdHVhbCAmJgorICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2xvY2FsZSIgZ2V0dGV4dCAiU2VlICdcJydnaXQgaGVscCBDT01NQU5EJ1wnJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGNvbW1hbmQuIiA+PmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAneGdldHRleHQ6IEMgZXh0cmFjdGlvbiB3aXRoICVzJyAnCisgICAgcHJpbnRmICJUSUxSQVVOOiBDIHRpbHJhdW5hc3RyZW5ndXIgJSVzIiA+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICJURVNUOiBBIEMgdGVzdCBzdHJpbmcgJXMiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgeGdldHRleHQgZnJvbSBTaGVsbAordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAneGdldHRleHQ6IFNoZWxsIGV4dHJhY3Rpb24nICcKKyAgICBwcmludGYgIlRJTFJBVU46IFNrZWxqYXJ0aWxyYXVuYXN0cmVuZ3VyIiA+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICJURVNUOiBBIFNoZWxsIHRlc3Qgc3RyaW5nIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICd4Z2V0dGV4dDogU2hlbGwgZXh0cmFjdGlvbiB3aXRoICR2YXJpYWJsZScgJworICAgIHByaW50ZiAiVElMUkFVTjogU2tlbGphcnRpbHJhdW5hc3RyZW5ndXIgbWXDsCBicmV5dHVubmkgYSB2YXIgaSBhYmxlIiA+eC1leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIHZhcmlhYmxlPSJhIHZhciBpIGFibGUiIGV2YWxfZ2V0dGV4dCAiVEVTVDogQSBTaGVsbCB0ZXN0IFwkdmFyaWFibGUiID54LWFjdHVhbCAmJgorICAgIHRlc3RfY21wIHgtZXhwZWN0IHgtYWN0dWFsCisnCisKKyMgeGdldHRleHQgZnJvbSBQZXJsCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICd4Z2V0dGV4dDogUGVybCBleHRyYWN0aW9uJyAnCisgICAgcHJpbnRmICJUSUxSQVVOOiBQZXJsIHRpbHJhdW5hc3RyZW5ndXIiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IEEgUGVybCB0ZXN0IHN0cmluZyIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAneGdldHRleHQ6IFBlcmwgZXh0cmFjdGlvbiB3aXRoICVzJyAnCisgICAgcHJpbnRmICJUSUxSQVVOOiBQZXJsIHRpbHJhdW5hc3RyZW5ndXIgbWXDsCBicmV5dHVubmkgJSVzIiA+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICJURVNUOiBBIFBlcmwgdGVzdCB2YXJpYWJsZSAlcyIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAnc2FuaXR5OiBTb21lIGdldHRleHQoIiIpIGRhdGEgZm9yIHJlYWwgbG9jYWxlJyAnCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICIiID5yZWFsLWxvY2FsZSAmJgorICAgIHRlc3QgLXMgcmVhbC1sb2NhbGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMjAwL3Rlc3QuYyBiL3QvdDAyMDAvdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NGQ0NWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjAwL3Rlc3QuYwpAQCAtMCwwICsxLDIzIEBACisvKiBUaGlzIGlzIGEgcGhvbnkgQyBwcm9ncmFtIHRoYXQncyBvbmx5IGhlcmUgdG8gdGVzdCB4Z2V0dGV4dCBtZXNzYWdlIGV4dHJhY3Rpb24gKi8KKworY29uc3QgY2hhciBoZWxwW10gPQorCS8qIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LiAqLworCU5fKCJTZWUgJ2dpdCBoZWxwIENPTU1BTkQnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4iKTsKKworaW50IG1haW4odm9pZCkKK3sKKwkvKiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4gKi8KKwlwdXRzKF8oIlRFU1Q6IEEgQyB0ZXN0IHN0cmluZyIpKTsKKworCS8qIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LiAqLworCXByaW50ZihfKCJURVNUOiBBIEMgdGVzdCBzdHJpbmcgJXMiKSwgInZhcmlhYmxlIik7CisKKwkvKiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4gKi8KKwlwcmludGYoXygiVEVTVDogSGVsbG8gV29ybGQhIikpOworCisJLyogVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuICovCisJcHJpbnRmKF8oIlRFU1Q6IE9sZCBFbmdsaXNoIFJ1bmVzIikpOworCisJLyogVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuICovCisJcHJpbnRmKF8oIlRFU1Q6IOKAmHNpbmdsZeKAmSBhbmQg4oCcZG91Ymxl4oCdIHF1b3RlcyIpKTsKK30KZGlmZiAtLWdpdCBhL3QvdDAyMDAvdGVzdC5wZXJsIGIvdC90MDIwMC90ZXN0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZmYmEzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMDAvdGVzdC5wZXJsCkBAIC0wLDAgKzEsMTQgQEAKKyMgVGhpcyBpcyBhIHBob255IFBlcmwgcHJvZ3JhbSB0aGF0J3Mgb25seSBoZXJlIHRvIHRlc3QgeGdldHRleHQKKyMgbWVzc2FnZSBleHRyYWN0aW9uCisKKyMgc28gdGhlIGFib3ZlIGNvbW1lbnQgd29uJ3QgYmUgZm9sZGVkIGludG8gdGhlIG5leHQgb25lIGJ5IHhnZXR0ZXh0CisxOworCisjIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorcHJpbnQgX18oIlRFU1Q6IEEgUGVybCB0ZXN0IHN0cmluZyIpOworCisjIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorcHJpbnRmIF9fKCJURVNUOiBBIFBlcmwgdGVzdCB2YXJpYWJsZSAlcyIpLCAibW9vIjsKKworIyBUUkFOU0xBVE9SUzogSWYgeW91IHNlZSB0aGlzLCBHaXQgaGFzIGEgYnVnCitwcmludCBfIlRFU1Q6IEEgUGVybCBzdHJpbmcgeGdldHRleHQgd2lsbCBub3QgZ2V0IjsKZGlmZiAtLWdpdCBhL3QvdDAyMDAvdGVzdC5zaCBiL3QvdDAyMDAvdGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjJkNjA3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDIwMC90ZXN0LnNoCkBAIC0wLDAgKzEsMTQgQEAKKyMgVGhpcyBpcyBhIHBob255IFNoZWxsIHByb2dyYW0gdGhhdCdzIG9ubHkgaGVyZSB0byB0ZXN0IHhnZXR0ZXh0CisjIG1lc3NhZ2UgZXh0cmFjdGlvbgorCisjIHNvIHRoZSBhYm92ZSBjb21tZW50IHdvbid0IGJlIGZvbGRlZCBpbnRvIHRoZSBuZXh0IG9uZSBieSB4Z2V0dGV4dAorZWNobworCisjIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorZ2V0dGV4dCAiVEVTVDogQSBTaGVsbCB0ZXN0IHN0cmluZyIKKworIyBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4KK2V2YWxfZ2V0dGV4dCAiVEVTVDogQSBTaGVsbCB0ZXN0IFwkdmFyaWFibGUiCisKKyMgVFJBTlNMQVRPUlM6IElmIHlvdSBzZWUgdGhpcywgR2l0IGhhcyBhIGJ1ZworXygiVEVTVDogQSBTaGVsbCBzdHJpbmcgeGdldHRleHQgd29uJ3QgZ2V0IikKZGlmZiAtLWdpdCBhL3QvdDAyMDEtZ2V0dGV4dC1mYWxsYmFja3Muc2ggYi90L3QwMjAxLWdldHRleHQtZmFsbGJhY2tzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkwZGExYzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjAxLWdldHRleHQtZmFsbGJhY2tzLnNoCkBAIC0wLDAgKzEsNjcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nR2V0dGV4dCBTaGVsbCBmYWxsYmFja3MnCisKK0dJVF9JTlRFUk5BTF9HRVRURVhUX1RFU1RfRkFMTEJBQ0tTPVllc1BsZWFzZQorZXhwb3J0IEdJVF9JTlRFUk5BTF9HRVRURVhUX1RFU1RfRkFMTEJBQ0tTCisKKy4gLi9saWItZ2V0dGV4dC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzYW5pdHk6IFwkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FIGlzIHNldCAodG8gJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSkiICcKKyAgICB0ZXN0IC1uICIkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW5pdHk6ICRHSVRfSU5URVJOQUxfR0VUVEVYVF9URVNUX0ZBTExCQUNLUyBpcyBzZXQnICcKKyAgICB0ZXN0IC1uICIkR0lUX0lOVEVSTkFMX0dFVFRFWFRfVEVTVF9GQUxMQkFDS1MiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdzYW5pdHk6ICRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUiIGlzIGZhbGx0aHJvdWdoJyAnCisgICAgZWNobyBmYWxsdGhyb3VnaCA+ZXhwZWN0ICYmCisgICAgZWNobyAkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldHRleHQ6IG91ciBnZXR0ZXh0KCkgZmFsbGJhY2sgaGFzIHBhc3MtdGhyb3VnaCBzZW1hbnRpY3MnICcKKyAgICBwcmludGYgInRlc3QiID5leHBlY3QgJiYKKyAgICBnZXR0ZXh0ICJ0ZXN0IiA+YWN0dWFsICYmCisgICAgdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKKyAgICBwcmludGYgInRlc3QgbW9yZSB3b3JkcyIgPmV4cGVjdCAmJgorICAgIGdldHRleHQgInRlc3QgbW9yZSB3b3JkcyIgPmFjdHVhbCAmJgorICAgIHRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V2YWxfZ2V0dGV4dDogb3VyIGV2YWxfZ2V0dGV4dCgpIGZhbGxiYWNrIGhhcyBwYXNzLXRocm91Z2ggc2VtYW50aWNzJyAnCisgICAgcHJpbnRmICJ0ZXN0IiA+ZXhwZWN0ICYmCisgICAgZXZhbF9nZXR0ZXh0ICJ0ZXN0IiA+YWN0dWFsICYmCisgICAgdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKKyAgICBwcmludGYgInRlc3QgbW9yZSB3b3JkcyIgPmV4cGVjdCAmJgorICAgIGV2YWxfZ2V0dGV4dCAidGVzdCBtb3JlIHdvcmRzIiA+YWN0dWFsICYmCisgICAgdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXZhbF9nZXR0ZXh0OiBvdXIgZXZhbF9nZXR0ZXh0KCkgZmFsbGJhY2sgY2FuIGludGVycG9sYXRlIHZhcmlhYmxlcycgJworICAgIHByaW50ZiAidGVzdCBZZXNQbGVhc2UiID5leHBlY3QgJiYKKyAgICBHSVRfSU5URVJOQUxfR0VUVEVYVF9URVNUX0ZBTExCQUNLUz1ZZXNQbGVhc2UgZXZhbF9nZXR0ZXh0ICJ0ZXN0IFwkR0lUX0lOVEVSTkFMX0dFVFRFWFRfVEVTVF9GQUxMQkFDS1MiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdldmFsX2dldHRleHQ6IG91ciBldmFsX2dldHRleHQoKSBmYWxsYmFjayBjYW4gaW50ZXJwb2xhdGUgdmFyaWFibGVzIHdpdGggc3BhY2VzJyAnCisgICAgY21kbGluZT0iZ2l0IGFtIiAmJgorICAgIGV4cG9ydCBjbWRsaW5lICYmCisgICAgcHJpbnRmICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIGdpdCBhbSAtLXJlc29sdmVkLiIgPmV4cGVjdCAmJgorICAgIGV2YWxfZ2V0dGV4dCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcJGNtZGxpbmUgLS1yZXNvbHZlZC4iID5hY3R1YWwgJiYKKyAgICB0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdldmFsX2dldHRleHQ6IG91ciBldmFsX2dldHRleHQoKSBmYWxsYmFjayBjYW4gaW50ZXJwb2xhdGUgdmFyaWFibGVzIHdpdGggc3BhY2VzIGFuZCBxdW90ZXMnICcKKyAgICBjbWRsaW5lPSJnaXQgYW0iICYmCisgICAgZXhwb3J0IGNtZGxpbmUgJiYKKyAgICBwcmludGYgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCJnaXQgYW0gLS1yZXNvbHZlZFwiLiIgPmV4cGVjdCAmJgorICAgIGV2YWxfZ2V0dGV4dCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIlwkY21kbGluZSAtLXJlc29sdmVkXCIuIiA+YWN0dWFsICYmCisgICAgdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMjAyLWdldHRleHQtcGVybC5zaCBiL3QvdDAyMDItZ2V0dGV4dC1wZXJsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEyOWQxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjAyLWdldHRleHQtcGVybC5zaApAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1BlcmwgZ2V0dGV4dCBpbnRlcmZhY2UgKEdpdDo6STE4TiknCisKKy4gLi9saWItZ2V0dGV4dC5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTDsgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBwZXJsIGludGVyZmFjZSB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKworcGVybCAtTVRlc3Q6Ok1vcmUgLWUgMCAyPi9kZXYvbnVsbCB8fCB7CisJc2tpcF9hbGw9IlBlcmwgVGVzdDo6TW9yZSB1bmF2YWlsYWJsZSwgc2tpcHBpbmcgdGVzdCIKKwl0ZXN0X2RvbmUKK30KKworIyBUaGUgZXh0ZXJuYWwgdGVzdCB3aWxsIG91dHB1dHMgaXRzIG93biBwbGFuCit0ZXN0X2V4dGVybmFsX2hhc190YXA9MQorCit0ZXN0X2V4dGVybmFsX3dpdGhvdXRfc3RkZXJyIFwKKyAgICAnUGVybCBHaXQ6OkkxOE4gQVBJJyBcCisgICAgcGVybCAiJFRFU1RfRElSRUNUT1JZIi90MDIwMi90ZXN0LnBsCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDIwMi90ZXN0LnBsIGIvdC90MDIwMi90ZXN0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJjYmY3YjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjAyL3Rlc3QucGwKQEAgLTAsMCArMSwxMjIgQEAKKyMhL3Vzci9iaW4vcGVybAordXNlIDUuMDA4OwordXNlIGxpYiAoc3BsaXQoLzovLCAkRU5We0dJVFBFUkxMSUJ9KSk7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBPU0lYIHF3KDpsb2NhbGVfaCk7Cit1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAxMzsKK3VzZSBHaXQ6OkkxOE47CisKK215ICRoYXNfZ2V0dGV4dF9saWJyYXJ5ID0gJEdpdDo6STE4Tjo6X19IQVNfTElCUkFSWTsKKworb2soMSwgIlRlc3RpbmcgR2l0OjpJMThOIHdpdGggIiAuCisJICgkaGFzX2dldHRleHRfbGlicmFyeQorCSAgPyAoZGVmaW5lZCAkTG9jYWxlOjpNZXNzYWdlczo6VkVSU0lPTgorCQkgPyAiTG9jYWxlOjpNZXNzYWdlcyB2ZXJzaW9uICRMb2NhbGU6Ok1lc3NhZ2VzOjpWRVJTSU9OIgorCQkgIyBWZXJzaW9ucyBvZiBMb2NhbGU6Ok1lc3NhZ2VzIGJlZm9yZSAxLjE3IGRpZG4ndCBoYXZlIGEKKwkJICMgJFZFUlNJT04gdmFyaWFibGUuCisJCSA6ICJMb2NhbGU6Ok1lc3NhZ2VzIHZlcnNpb24gPDEuMTciKQorCSAgOiAiTk8gUGVybCBnZXR0ZXh0IGxpYnJhcnkiKSk7CitvaygxLCAiR2l0OjpJMThOIGlzIGxvY2F0ZWQgYXQgJElOQ3snR2l0L0kxOE4ucG0nfSIpOworCit7CisJbXkgJGV4cG9ydHMgPSBAR2l0OjpJMThOOjpFWFBPUlQ7CisJb2soJGV4cG9ydHMsICJzYW5pdHk6IEdpdDo6STE4TiBoYXMgJGV4cG9ydHMgZXhwb3J0KHMpIik7Cit9Citpc19kZWVwbHkoXEBHaXQ6OkkxOE46OkVYUE9SVCwgXEBHaXQ6OkkxOE46OkVYUE9SVF9PSywgInNhbml0eTogR2l0OjpJMThOIGV4cG9ydHMgZXZlcnl0aGluZyBieSBkZWZhdWx0Iik7CisKKyMgcHJvdG90eXBlcworeworCSMgQWRkIHByb3RvdHlwZXMgaGVyZSB3aGVuIG1vZGlmeWluZyB0aGUgcHVibGljIGludGVyZmFjZSB0byBhZGQKKwkjIG1vcmUgZ2V0dGV4dCB3cmFwcGVyIGZ1bmN0aW9ucy4KKwlteSAlcHJvdG90eXBlcyA9IChxdygKKwkJX18JJAorCQlfX24JJCQkCisJCU5fXwkkCisJKSk7CisJd2hpbGUgKG15ICgkc3ViLCAkcHJvdG8pID0gZWFjaCAlcHJvdG90eXBlcykgeworCQlpcyhwcm90b3R5cGUoXCZ7IkdpdDo6STE4Tjo6JHN1YiJ9KSwgJHByb3RvLCAic2FuaXR5OiAkc3ViIGhhcyBhICRwcm90byBwcm90b3R5cGUiKTsKKwl9Cit9CisKKyMgVGVzdCBiYXNpYyBwYXNzdGhyb3VnaCBpbiB0aGUgQyBsb2NhbGUKK3sKKwlsb2NhbCAkRU5We0xBTkdVQUdFfSA9ICdDJzsKKwlsb2NhbCAkRU5We0xDX0FMTH0gICA9ICdDJzsKKwlsb2NhbCAkRU5We0xBTkd9ICAgICA9ICdDJzsKKworCW15ICgkZ290LCAkZXhwZWN0KSA9ICgoJ1RFU1Q6IEEgUGVybCB0ZXN0IHN0cmluZycpIHggMik7CisKKwlpcyhfXygkZ290KSwgJGV4cGVjdCwgIlBhc3NpbmcgYSBzdHJpbmcgdGhyb3VnaCBfXygpIGluIHRoZSBDIGxvY2FsZSB3b3JrcyIpOworCisJbXkgKCRnb3Rfc2luZ3VsYXIsICRnb3RfcGx1cmFsLCAkZXhwZWN0X3Npbmd1bGFyLCAkZXhwZWN0X3BsdXJhbCkgPQorCQkoKCdURVNUOiAxIGZpbGUnLCAnVEVTVDogbiBmaWxlcycpIHggMik7CisKKwlpcyhfX24oJGdvdF9zaW5ndWxhciwgJGdvdF9wbHVyYWwsIDEpLCAkZXhwZWN0X3Npbmd1bGFyLAorCQkiR2V0IHNpbmd1bGFyIHN0cmluZyB0aHJvdWdoIF9fbigpIGluIEMgbG9jYWxlIik7CisJaXMoX19uKCRnb3Rfc2luZ3VsYXIsICRnb3RfcGx1cmFsLCAyKSwgJGV4cGVjdF9wbHVyYWwsCisJCSJHZXQgcGx1cmFsIHN0cmluZyB0aHJvdWdoIF9fbigpIGluIEMgbG9jYWxlIik7CisKKwlpcyhOX18oJGdvdCksICRleHBlY3QsICJQYXNzaW5nIGEgc3RyaW5nIHRocm91Z2ggTl9fKCkgaW4gdGhlIEMgbG9jYWxlIHdvcmtzIik7Cit9CisKKyMgVGVzdCBhIGJhc2ljIG1lc3NhZ2Ugb24gZGlmZmVyZW50IGxvY2FsZXMKK1NLSVA6IHsKKwl1bmxlc3MgKCRFTlZ7R0VUVEVYVF9MT0NBTEV9KSB7CisJCSMgQ2FuJ3QgcmVsaWFibHkgdGVzdCBfXygpIHdpdGggYSBub24tQyBsb2NhbGVzIGJlY2F1c2UgdGhlCisJCSMgcmVxdWlyZWQgbG9jYWxlcyBtYXkgbm90IGJlIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtLgorCQkjCisJCSMgV2UgdGVzdCBmb3IgdGhlc2UgYW55d2F5IGFzIHBhcnQgb2YgdGhlIHNoZWxsCisJCSMgdGVzdHMuIFNraXBwaW5nIHRoZXNlIGhlcmUgd2lsbCBlbGltaW5hdGUgZmFpbHVyZXMgb24gb2RkCisJCSMgcGxhdGZvcm1zIHdpdGggaW5jb21wbGV0ZSBsb2NhbGUgZGF0YS4KKworCQlza2lwICJHRVRURVhUX0xPQ0FMRSBtdXN0IGJlIHNldCBieSBsaWItZ2V0dGV4dC5zaCBmb3IgZXhoYXVzdGl2ZSBHaXQ6OkkxOE4gdGVzdHMiLCAyOworCX0KKworCSMgVGhlIGlzX0lTIFVURi04IGxvY2FsZSBwYXNzZWQgZnJvbSBsaWItZ2V0dGV4dC5zaAorCW15ICRpc19JU19sb2NhbGUgPSAkRU5We2lzX0lTX2xvY2FsZX07CisKKwlteSAkdGVzdCA9IHN1YiB7CisJCW15ICgkZ290LCAkZXhwZWN0LCAkbXNnLCAkbG9jYWxlKSA9IEBfOworCQkjIE1heWJlIHRoaXMgc3lzdGVtIGRvZXNuJ3QgaGF2ZSB0aGUgbG9jYWxlIHdlJ3JlIHRyeWluZyB0bworCQkjIHRlc3QuCisJCW15ICRsb2NhbGVfb2sgPSBzZXRsb2NhbGUoTENfQUxMLCAkbG9jYWxlKTsKKwkJaXMoX18oJGdvdCksICRleHBlY3QsICIkbXNnIGEgZ2V0dGV4dCBsaWJyYXJ5ICsgPCRsb2NhbGU+IGxvY2FsZSA8JGdvdD4gdHVybnMgaW50byA8JGV4cGVjdD4iKTsKKwl9OworCisJbXkgJGVudl9DID0gc3ViIHsKKwkJJEVOVntMQU5HVUFHRX0gPSAnQyc7CisJCSRFTlZ7TENfQUxMfSAgID0gJ0MnOworCX07CisKKwlteSAkZW52X2lzID0gc3ViIHsKKwkJJEVOVntMQU5HVUFHRX0gPSAnaXMnOworCQkkRU5We0xDX0FMTH0gICA9ICRpc19JU19sb2NhbGU7CisJfTsKKworCSMgVHJhbnNsYXRpb24ncyB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwKKwlteSAoJGdvdCwgJGV4cGVjdCkgPSAoKCdURVNUOiBBIFBlcmwgdGVzdCBzdHJpbmcnKSB4IDIpOworCisJaWYgKCRoYXNfZ2V0dGV4dF9saWJyYXJ5KSB7CisJCXsKKwkJCWxvY2FsICVFTlY7ICRlbnZfQy0+KCk7CisJCQkkdGVzdC0+KCRnb3QsICRleHBlY3QsICJXaXRoIiwgJ0MnKTsKKwkJfQorCisJCXsKKwkJCW15ICgkZ290LCAkZXhwZWN0KSA9ICgkZ290LCAnVElMUkFVTjogUGVybCB0aWxyYXVuYXN0cmVuZ3VyJyk7CisJCQlsb2NhbCAlRU5WOyAkZW52X2lzLT4oKTsKKwkJCSR0ZXN0LT4oJGdvdCwgJGV4cGVjdCwgIldpdGgiLCAkaXNfSVNfbG9jYWxlKTsKKwkJfQorCX0gZWxzZSB7CisJCXsKKwkJCWxvY2FsICVFTlY7ICRlbnZfQy0+KCk7CisJCQkkdGVzdC0+KCRnb3QsICRleHBlY3QsICJXaXRob3V0IiwgJ0MnKTsKKwkJfQorCisJCXsKKwkJCWxvY2FsICVFTlY7ICRlbnZfaXMtPigpOworCQkJJHRlc3QtPigkZ290LCAkZXhwZWN0LCAiV2l0aG91dCIsICdpcycpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvdC90MDIwMy1nZXR0ZXh0LXNldGxvY2FsZS1zYW5pdHkuc2ggYi90L3QwMjAzLWdldHRleHQtc2V0bG9jYWxlLXNhbml0eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wY2UxZjIyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDIwMy1nZXR0ZXh0LXNldGxvY2FsZS1zYW5pdHkuc2gKQEAgLTAsMCArMSwyNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSJUaGUgR2l0IEMgZnVuY3Rpb25zIGFyZW4ndCBicm9rZW4gYnkgc2V0bG9jYWxlKDMpIgorCisuIC4vbGliLWdldHRleHQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNob3cgYSBJU08tODg1OS0xIGNvbW1pdCB1bmRlciBDIGxvY2FsZScgJworCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEvODg1OS0xLnR4dCAmJgorCXRlc3RfY29tbWl0ICJpc28tYy1jb21taXQiIGlzby11bmRlci1jICYmCisJZ2l0IHNob3cgPm91dCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKwlncmVwIC1xICJpc28tYy1jb21taXQiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICdnaXQgc2hvdyBhIElTTy04ODU5LTEgY29tbWl0IHVuZGVyIGEgVVRGLTggbG9jYWxlJyAnCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS84ODU5LTEudHh0ICYmCisJdGVzdF9jb21taXQgImlzby11dGY4LWNvbW1pdCIgaXNvLXVuZGVyLXV0ZjggJiYKKwlMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdpdCBzaG93ID5vdXQgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJZ3JlcCAtcSAiaXNvLXV0ZjgtY29tbWl0IiBvdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMjA0LWdldHRleHQtcmVlbmNvZGUtc2FuaXR5LnNoIGIvdC90MDIwNC1nZXR0ZXh0LXJlZW5jb2RlLXNhbml0eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NDM3ZTUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDIwNC1nZXR0ZXh0LXJlZW5jb2RlLXNhbml0eS5zaApAQCAtMCwwICsxLDg3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249IkdldHRleHQgcmVlbmNvZGluZyBvZiBvdXIgKi5wby8qLm1vIGZpbGVzIHdvcmtzIgorCisuIC4vbGliLWdldHRleHQuc2gKKworIyBUaGUgY29uc3RhbnRzIHVzZWQgaW4gYSB0cmlja3kgb2JzZXJ2YXRpb24gZm9yIHVuZGVmaW5lZCBiZWhhdmlvdXIKK1JVTkVTPSJUSUxSQVVOOiDhmrvhm5Yg4Zqz4Zq54Zqr4ZqmIOGapuGaq+GbjyDhmrvhm5Yg4ZuS4Zqi4Zue4ZuWIOGaqeGaviDhmqbhmqvhm5cg4Zua4Zqq4Zq+4Zue4ZuWIOGavuGaqeGaseGapuGaueGbluGaquGaseGbnuGaouGblyDhmrnhm4HhmqYg4Zqm4ZqqIOGaueGbluGbpeGaqyIKK1BVTlRTPSJUSUxSQVVOOiA/PyA/Pz8/ID8/PyA/PyA/Pz8/ID8/ID8/PyA/Pz8/PyA/Pz8/Pz8/Pz8/PyA/Pz8gPz8gPz8/PyIKK01TR0tFWT0iVEVTVDogT2xkIEVuZ2xpc2ggUnVuZXMiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUgJ2dldHRleHQ6IEVtaXR0aW5nIFVURi04IGZyb20gb3VyIFVURi04ICoubW8gZmlsZXMgLyBJY2VsYW5kaWMnICcKKyAgICBwcmludGYgIlRJTFJBVU46IEhhbGzDsyBIZWltdXIhIiA+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICJURVNUOiBIZWxsbyBXb3JsZCEiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUgJ2dldHRleHQ6IEVtaXR0aW5nIFVURi04IGZyb20gb3VyIFVURi04ICoubW8gZmlsZXMgLyBSdW5lcycgJworICAgIHByaW50ZiAiJXMiICIkUlVORVMiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIiRNU0dLRVkiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9JU09fTE9DQUxFICdnZXR0ZXh0OiBFbWl0dGluZyBJU08tODg1OS0xIGZyb20gb3VyIFVURi04ICoubW8gZmlsZXMgLyBJY2VsYW5kaWMnICcKKyAgICBwcmludGYgIlRJTFJBVU46IEhhbGzDsyBIZWltdXIhIiB8IGljb252IC1mIFVURi04IC10IElTTzg4NTktMSA+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfaXNvX2xvY2FsZSIgZ2V0dGV4dCAiVEVTVDogSGVsbG8gV29ybGQhIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfSVNPX0xPQ0FMRSAnZ2V0dGV4dDogaW1wb3NzaWJsZSBJU08tODg1OS0xIG91dHB1dCcgJworCUxBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2lzb19sb2NhbGUiIGdldHRleHQgIiRNU0dLRVkiID5ydW5lcyAmJgorCWNhc2UgIiQoY2F0IHJ1bmVzKSIgaW4KKwkiJE1TR0tFWSIpCisJCXNheSAiWW91ciBzeXN0ZW0gZ2l2ZXMgYmFjayB0aGUga2V5IHRvIG1lc3NhZ2UgY2F0YWxvZyIKKwkJOzsKKwkiJFBVTlRTIikKKwkJc2F5ICJZb3VyIHN5c3RlbSByZXBsYWNlcyBhbiBpbXBvc3NpYmxlIGNoYXJhY3RlciB3aXRoID8iCisJCTs7CisJIiRSVU5FUyIpCisJCXNheSAiWW91ciBzeXN0ZW0gZ2l2ZXMgYmFjayB0aGUgcmF3IG1lc3NhZ2UgZm9yIGFuIGltcG9zc2libGUgcmVxdWVzdCIKKwkJOzsKKwkqKQorCQlzYXkgIldlIG5ldmVyIHNhdyB0aGUgZXJyb3IgYmVoYXZpb3VyIHlvdXIgc3lzdGVtIGV4aGliaXRzIgorCQlmYWxzZQorCQk7OworCWVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAnZ2V0dGV4dDogRmV0Y2hpbmcgYSBVVEYtOCBtc2dpZCAtPiBVVEYtOCcgJworICAgIHByaW50ZiAiVElMUkFVTjog4oCaZWluZmFsZGFy4oCYIG9nIOKAnnR2w7ZmYWxkYXLigJwgZ8Omc2FsYXBwaXIiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IOKAmHNpbmdsZeKAmSBhbmQg4oCcZG91Ymxl4oCdIHF1b3RlcyIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBIb3cgdGhlc2UgcXVvdGVzIGdldCB0cmFuc2xpdGVyYXRlZCBkZXBlbmRzIG9uIHRoZSBnZXR0ZXh0IGltcGxlbWVudGF0aW9uOgorIworIyAgIERlYmlhbjogICxlaW5mYWxkYXInIG9nICwsdHbDtmZhbGRhciIgW0dOVSBsaWJpbnRsXQorIyAgIEZyZWVCU0Q6IGBlaW5mYWxkYXJgIG9nICJ0dsO2ZmFsZGFyIiAgW0dOVSBsaWJpbnRsXQorIyAgIFNvbGFyaXM6ID9laW5mYWxkYXI/IG9nID90dsO2ZmFsZGFyPyAgW1NvbGFyaXMgbGliaW50bF0KKyMKKyMgSnVzdCBtYWtlIHN1cmUgdGhlIGNvbnRlbnRzIGFyZSB0cmFuc2xpdGVyYXRlZCwgYW5kIGRvbid0IHVzZSBncmVwIC1xCisjIHNvIHRoYXQgdGhlc2UgZGlmZmVyZW5jZXMgYXJlIGVtaXR0ZWQgdW5kZXIgLS12ZXJib3NlIGZvciBjdXJpb3VzCisjIGV5ZXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfSVNPX0xPQ0FMRSAnZ2V0dGV4dDogRmV0Y2hpbmcgYSBVVEYtOCBtc2dpZCAtPiBJU08tODg1OS0xJyAnCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfaXNvX2xvY2FsZSIgZ2V0dGV4dCAiVEVTVDog4oCYc2luZ2xl4oCZIGFuZCDigJxkb3VibGXigJ0gcXVvdGVzIiA+YWN0dWFsICYmCisgICAgZ3JlcCAiZWluZmFsZGFyIiBhY3R1YWwgJiYKKyAgICBncmVwICIkKGVjaG8gdHbDtmZhbGRhciB8IGljb252IC1mIFVURi04IC10IElTTzg4NTktMSkiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICdnZXR0ZXh0LmM6IGdpdCBpbml0IFVURi04IC0+IFVURi04JyAnCisgICAgcHJpbnRmICJCasOzIHRpbCB0w7NtYSBHaXQgbGluZCIgPmV4cGVjdCAmJgorICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2xvY2FsZSIgZ2l0IGluaXQgcmVwbyA+YWN0dWFsICYmCisgICAgdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgcmVwbyIgJiYKKyAgICBncmVwICJeJChjYXQgZXhwZWN0KSAiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfSVNPX0xPQ0FMRSAnZ2V0dGV4dC5jOiBnaXQgaW5pdCBVVEYtOCAtPiBJU08tODg1OS0xJyAnCisgICAgcHJpbnRmICJCasOzIHRpbCB0w7NtYSBHaXQgbGluZCIgPmV4cGVjdCAmJgorICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2lzb19sb2NhbGUiIGdpdCBpbml0IHJlcG8gPmFjdHVhbCAmJgorICAgIHRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHJlcG8iICYmCisgICAgZ3JlcCAiXiQoY2F0IGV4cGVjdCB8IGljb252IC1mIFVURi04IC10IElTTzg4NTktMSkgIiBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMjA1LWdldHRleHQtcG9pc29uLnNoIGIvdC90MDIwNS1nZXR0ZXh0LXBvaXNvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOWZhMTZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDIwNS1nZXR0ZXh0LXBvaXNvbi5zaApAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J0dldHRleHQgU2hlbGwgcG9pc29uJworCitHSVRfVEVTVF9HRVRURVhUX1BPSVNPTj10cnVlCitleHBvcnQgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04KKy4gLi9saWItZ2V0dGV4dC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW5pdHk6ICRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUiIGlzIHBvaXNvbicgJworICAgIHRlc3QgIiRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUiID0gInBvaXNvbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0dGV4dDogb3VyIGdldHRleHQoKSBmYWxsYmFjayBoYXMgcG9pc29uIHNlbWFudGljcycgJworICAgIHByaW50ZiAiIyBHRVRURVhUIFBPSVNPTiAjIiA+ZXhwZWN0ICYmCisgICAgZ2V0dGV4dCAidGVzdCIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKyAgICBwcmludGYgIiMgR0VUVEVYVCBQT0lTT04gIyIgPmV4cGVjdCAmJgorICAgIGdldHRleHQgInRlc3QgbW9yZSB3b3JkcyIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXZhbF9nZXR0ZXh0OiBvdXIgZXZhbF9nZXR0ZXh0KCkgZmFsbGJhY2sgaGFzIHBvaXNvbiBzZW1hbnRpY3MnICcKKyAgICBwcmludGYgIiMgR0VUVEVYVCBQT0lTT04gIyIgPmV4cGVjdCAmJgorICAgIGV2YWxfZ2V0dGV4dCAidGVzdCIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKyAgICBwcmludGYgIiMgR0VUVEVYVCBQT0lTT04gIyIgPmV4cGVjdCAmJgorICAgIGV2YWxfZ2V0dGV4dCAidGVzdCBtb3JlIHdvcmRzIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJnZXR0ZXh0OiBpbnZhbGlkIEdJVF9URVNUX0dFVFRFWFRfUE9JU09OIHZhbHVlIGRvZXNuJ3QgaW5maW5pdGVseSBsb29wIiAiCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX0dFVFRFWFRfUE9JU09OPXh5eiBnaXQgdmVyc2lvbiAyPmVycm9yICYmCisJZ3JlcCBcImZhdGFsOiBiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJ3h5eicgZm9yICdHSVRfVEVTVF9HRVRURVhUX1BPSVNPTic6IGludmFsaWQgdW5pdFwiIGVycm9yCisiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDIxMC10cmFjZTItbm9ybWFsLnNoIGIvdC90MDIxMC10cmFjZTItbm9ybWFsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNlNzU3NGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjEwLXRyYWNlMi1ub3JtYWwuc2gKQEAgLTAsMCArMSwxODkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHRyYWNlMiBmYWNpbGl0eSAobm9ybWFsIHRhcmdldCknCisuIC4vdGVzdC1saWIuc2gKKworIyBUdXJuIG9mZiBhbnkgaW5oZXJpdGVkIHRyYWNlMiBzZXR0aW5ncyBmb3IgdGhpcyB0ZXN0Lgorc2FuZV91bnNldCBHSVRfVFJBQ0UyIEdJVF9UUkFDRTJfUEVSRiBHSVRfVFJBQ0UyX0VWRU5UCitzYW5lX3Vuc2V0IEdJVF9UUkFDRTJfQlJJRUYKK3NhbmVfdW5zZXQgR0lUX1RSQUNFMl9DT05GSUdfUEFSQU1TCisKKyMgQWRkIHQvaGVscGVyIGRpcmVjdG9yeSB0byBQQVRIIHNvIHRoYXQgd2UgY2FuIHVzZSBhIHJlbGF0aXZlCisjIHBhdGggdG8gcnVuIG5lc3RlZCBpbnN0YW5jZXMgb2YgdGVzdC10b29sLmV4ZSAoc2VlIDAwNGNoaWxkKS4KKyMgVGhpcyBoZWxwcyB3aXRoIEhFUkVET0MgY29tcGFyaXNvbnMgbGF0ZXIuCitUVERJUj0iJEdJVF9CVUlMRF9ESVIvdC9oZWxwZXIvIiAmJiBleHBvcnQgVFRESVIKK1BBVEg9IiRUVERJUjokUEFUSCIgJiYgZXhwb3J0IFBBVEgKKworIyBXYXJuaW5nOiB1c2Ugb2YgJ3Rlc3RfY21wJyBtYXkgcnVuIHRlc3QtdG9vbC5leGUgYW5kL29yIGdpdC5leGUKKyMgV2FybmluZzogdG8gZG8gdGhlIGFjdHVhbCBkaWZmL2NvbXBhcmlzb24sIHNvIHRoZSBIRVJFRE9DcyBoZXJlCisjIFdhcm5pbmc6IG9ubHkgY292ZXIgb3VyIGFjdHVhbCBjYWxscyB0byB0ZXN0LXRvb2wgYW5kL29yIGdpdC4KKyMgV2FybmluZzogU28geW91IG1heSBzZWUgZXh0cmEgbGluZXMgaW4gYXJ0aWZhY3QgZmlsZXMgd2hlbgorIyBXYXJuaW5nOiBpbnRlcmFjdGl2ZWx5IGRlYnVnZ2luZy4KKworVj0kKGdpdCB2ZXJzaW9uIHwgc2VkIC1lICdzL15naXQgdmVyc2lvbiAvLycpICYmIGV4cG9ydCBWCisKKyMgVGhlcmUgYXJlIG11bHRpcGxlIHRyYWNlMiB0YXJnZXRzOiBub3JtYWwsIHBlcmYsIGFuZCBldmVudC4KKyMgVHJhY2UyIGV2ZW50cyB3aWxsL2NhbiBiZSB3cml0dGVuIHRvIGVhY2ggYWN0aXZlIHRhcmdldCAoc3ViamVjdAorIyB0byB3aGF0ZXZlciBmaWx0ZXJpbmcgdGhhdCB0YXJnZXQgZGVjaWRlcyB0byBkbykuCisjIFRoaXMgc2NyaXB0IHRlc3RzIHRoZSBub3JtYWwgdGFyZ2V0IGluIGlzb2xhdGlvbi4KKyMKKyMgRGVmZXIgc2V0dGluZyBHSVRfVFJBQ0UyIHVudGlsIHRoZSBhY3R1YWwgY29tbWFuZCBsaW5lIHdlIHdhbnQgdG8gdGVzdAorIyBiZWNhdXNlIGhpZGRlbiBnaXQgYW5kIHRlc3QtdG9vbCBjb21tYW5kcyBydW4gYnkgdGhlIHRlc3QgaGFybmVzcworIyBjYW4gY29udGFtaW5hdGUgb3VyIG91dHB1dC4KKworIyBFbmFibGUgImJyaWVmIiBmZWF0dXJlIHdoaWNoIHR1cm5zIG9mZiAiPGNsb2NrPiA8ZmlsZT46PGxpbmU+ICIgcHJlZml4LgorR0lUX1RSQUNFMl9CUklFRj0xICYmIGV4cG9ydCBHSVRfVFJBQ0UyX0JSSUVGCisKKyMgQmFzaWMgdGVzdHMgb2YgdGhlIHRyYWNlMiBub3JtYWwgc3RyZWFtLiAgU2luY2UgdGhpcyBzdHJlYW0gaXMgdXNlZAorIyBwcmltYXJpbHkgd2l0aCBwcmludGYtc3R5bGUgZGVidWdnaW5nL3RyYWNpbmcsIHdlIGRvIGxpbWl0ZWQgdGVzdGluZworIyBoZXJlLgorIworIyBXZSBkbyBjb25maXJtIHRoZSBmb2xsb3dpbmcgQVBJIGZlYXR1cmVzOgorIyBbXSB0aGUgJ3ZlcnNpb24gPHY+JyBldmVudAorIyBbXSB0aGUgJ3N0YXJ0IDxhcmd2PicgZXZlbnQKKyMgW10gdGhlICdjbWRfbmFtZSA8bmFtZT4nIGV2ZW50CisjIFtdIHRoZSAnZXhpdCA8dGltZT4gY29kZTo8Y29kZT4nIGV2ZW50CisjIFtdIHRoZSAnYXRleGl0IDx0aW1lPiBjb2RlOjxjb2RlPicgZXZlbnQKKyMKKyMgRmllbGRzIG9mIHRoZSBmb3JtIF9GSUVMRF8gYXJlIHRva2VucyB0aGF0IGhhdmUgYmVlbiByZXBsYWNlZCAoc3VjaAorIyBhcyB0aGUgZWxhcHNlZCB0aW1lKS4KKworIyBWZXJiIDAwMXJldHVybgorIworIyBJbXBsaWNpdCByZXR1cm4gZnJvbSBjbWRfPHZlcmI+IGZ1bmN0aW9uIHByb3BhZ2F0ZXMgPGNvZGU+LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3JtYWwgc3RyZWFtLCByZXR1cm4gY29kZSAwJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5ub3JtYWwgYWN0dWFsIGV4cGVjdCIgJiYKKwlHSVRfVFJBQ0UyPSIkKHB3ZCkvdHJhY2Uubm9ybWFsIiB0ZXN0LXRvb2wgdHJhY2UyIDAwMXJldHVybiAwICYmCisJcGVybCAiJFRFU1RfRElSRUNUT1JZL3QwMjEwL3NjcnViX25vcm1hbC5wZXJsIiA8dHJhY2Uubm9ybWFsID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJdmVyc2lvbiAkVgorCQlzdGFydCBfRVhFXyB0cmFjZTIgMDAxcmV0dXJuIDAKKwkJY21kX25hbWUgdHJhY2UyICh0cmFjZTIpCisJCWV4aXQgZWxhcHNlZDpfVElNRV8gY29kZTowCisJCWF0ZXhpdCBlbGFwc2VkOl9USU1FXyBjb2RlOjAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vcm1hbCBzdHJlYW0sIHJldHVybiBjb2RlIDEnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHRyYWNlLm5vcm1hbCBhY3R1YWwgZXhwZWN0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVFJBQ0UyPSIkKHB3ZCkvdHJhY2Uubm9ybWFsIiB0ZXN0LXRvb2wgdHJhY2UyIDAwMXJldHVybiAxICYmCisJcGVybCAiJFRFU1RfRElSRUNUT1JZL3QwMjEwL3NjcnViX25vcm1hbC5wZXJsIiA8dHJhY2Uubm9ybWFsID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJdmVyc2lvbiAkVgorCQlzdGFydCBfRVhFXyB0cmFjZTIgMDAxcmV0dXJuIDEKKwkJY21kX25hbWUgdHJhY2UyICh0cmFjZTIpCisJCWV4aXQgZWxhcHNlZDpfVElNRV8gY29kZToxCisJCWF0ZXhpdCBlbGFwc2VkOl9USU1FXyBjb2RlOjEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9tYXRpYyBmaWxlbmFtZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXIgdHJhY2VzIGFjdHVhbCBleHBlY3QiICYmCisJbWtkaXIgdHJhY2VzICYmCisJR0lUX1RSQUNFMj0iJChwd2QpL3RyYWNlcyIgdGVzdC10b29sIHRyYWNlMiAwMDFyZXR1cm4gMCAmJgorCXBlcmwgIiRURVNUX0RJUkVDVE9SWS90MDIxMC9zY3J1Yl9ub3JtYWwucGVybCIgPCIkKGxzIHRyYWNlcy8qKSIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQl2ZXJzaW9uICRWCisJCXN0YXJ0IF9FWEVfIHRyYWNlMiAwMDFyZXR1cm4gMAorCQljbWRfbmFtZSB0cmFjZTIgKHRyYWNlMikKKwkJZXhpdCBlbGFwc2VkOl9USU1FXyBjb2RlOjAKKwkJYXRleGl0IGVsYXBzZWQ6X1RJTUVfIGNvZGU6MAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBWZXJiIDAwMmV4aXQKKyMKKyMgRXhwbGljaXQgZXhpdChjb2RlKSBmcm9tIHdpdGhpbiBjbWRfPHZlcmI+IHByb3BhZ2F0ZXMgPGNvZGU+LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3JtYWwgc3RyZWFtLCBleGl0IGNvZGUgMCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gdHJhY2Uubm9ybWFsIGFjdHVhbCBleHBlY3QiICYmCisJR0lUX1RSQUNFMj0iJChwd2QpL3RyYWNlLm5vcm1hbCIgdGVzdC10b29sIHRyYWNlMiAwMDJleGl0IDAgJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkvdDAyMTAvc2NydWJfbm9ybWFsLnBlcmwiIDx0cmFjZS5ub3JtYWwgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQl2ZXJzaW9uICRWCisJCXN0YXJ0IF9FWEVfIHRyYWNlMiAwMDJleGl0IDAKKwkJY21kX25hbWUgdHJhY2UyICh0cmFjZTIpCisJCWV4aXQgZWxhcHNlZDpfVElNRV8gY29kZTowCisJCWF0ZXhpdCBlbGFwc2VkOl9USU1FXyBjb2RlOjAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vcm1hbCBzdHJlYW0sIGV4aXQgY29kZSAxJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5ub3JtYWwgYWN0dWFsIGV4cGVjdCIgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RSQUNFMj0iJChwd2QpL3RyYWNlLm5vcm1hbCIgdGVzdC10b29sIHRyYWNlMiAwMDJleGl0IDEgJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkvdDAyMTAvc2NydWJfbm9ybWFsLnBlcmwiIDx0cmFjZS5ub3JtYWwgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQl2ZXJzaW9uICRWCisJCXN0YXJ0IF9FWEVfIHRyYWNlMiAwMDJleGl0IDEKKwkJY21kX25hbWUgdHJhY2UyICh0cmFjZTIpCisJCWV4aXQgZWxhcHNlZDpfVElNRV8gY29kZToxCisJCWF0ZXhpdCBlbGFwc2VkOl9USU1FXyBjb2RlOjEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVmVyYiAwMDNlcnJvcgorIworIyBUbyB0aGUgYWJvdmUsIGFkZCBtdWx0aXBsZSAnZXJyb3IgPG1zZz4nIGV2ZW50cworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3JtYWwgc3RyZWFtLCBlcnJvciBldmVudCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gdHJhY2Uubm9ybWFsIGFjdHVhbCBleHBlY3QiICYmCisJR0lUX1RSQUNFMj0iJChwd2QpL3RyYWNlLm5vcm1hbCIgdGVzdC10b29sIHRyYWNlMiAwMDNlcnJvciAiaGVsbG8gd29ybGQiICJ0aGlzIGlzIGEgdGVzdCIgJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkvdDAyMTAvc2NydWJfbm9ybWFsLnBlcmwiIDx0cmFjZS5ub3JtYWwgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQl2ZXJzaW9uICRWCisJCXN0YXJ0IF9FWEVfIHRyYWNlMiAwMDNlcnJvciAnXCcnaGVsbG8gd29ybGQnXCcnICdcJyd0aGlzIGlzIGEgdGVzdCdcJycKKwkJY21kX25hbWUgdHJhY2UyICh0cmFjZTIpCisJCWVycm9yIGhlbGxvIHdvcmxkCisJCWVycm9yIHRoaXMgaXMgYSB0ZXN0CisJCWV4aXQgZWxhcHNlZDpfVElNRV8gY29kZTowCisJCWF0ZXhpdCBlbGFwc2VkOl9USU1FXyBjb2RlOjAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3NhbmVfdW5zZXQgR0lUX1RSQUNFMl9CUklFRgorCisjIE5vdyB0ZXN0IHdpdGhvdXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBnZXQgYWxsIFRyYWNlMiBzZXR0aW5ncworIyBmcm9tIHRoZSBnbG9iYWwgY29uZmlnLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyBnbG9iYWwgY29uZmlnLCBub3JtYWwgc3RyZWFtLCByZXR1cm4gY29kZSAwJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5ub3JtYWwgYWN0dWFsIGV4cGVjdCIgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgdHJhY2UyLm5vcm1hbEJyaWVmIDEgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgdHJhY2UyLm5vcm1hbFRhcmdldCAiJChwd2QpL3RyYWNlLm5vcm1hbCIgJiYKKwl0ZXN0LXRvb2wgdHJhY2UyIDAwMXJldHVybiAwICYmCisJcGVybCAiJFRFU1RfRElSRUNUT1JZL3QwMjEwL3NjcnViX25vcm1hbC5wZXJsIiA8dHJhY2Uubm9ybWFsID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJdmVyc2lvbiAkVgorCQlzdGFydCBfRVhFXyB0cmFjZTIgMDAxcmV0dXJuIDAKKwkJY21kX25hbWUgdHJhY2UyICh0cmFjZTIpCisJCWV4aXQgZWxhcHNlZDpfVElNRV8gY29kZTowCisJCWF0ZXhpdCBlbGFwc2VkOl9USU1FXyBjb2RlOjAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIGdsb2JhbCBjb25maWcgd2l0aCBpbmNsdWRlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5ub3JtYWwgYWN0dWFsIGV4cGVjdCByZWFsLmdpdGNvbmZpZyIgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgdHJhY2UyLm5vcm1hbEJyaWVmIDEgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgdHJhY2UyLm5vcm1hbFRhcmdldCAiJChwd2QpL3RyYWNlLm5vcm1hbCIgJiYKKwltdiAiJChwd2QpLy5naXRjb25maWciICIkKHB3ZCkvcmVhbC5naXRjb25maWciICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIGluY2x1ZGUucGF0aCAiJChwd2QpL3JlYWwuZ2l0Y29uZmlnIiAmJgorCXRlc3QtdG9vbCB0cmFjZTIgMDAxcmV0dXJuIDAgJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkvdDAyMTAvc2NydWJfbm9ybWFsLnBlcmwiIDx0cmFjZS5ub3JtYWwgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQl2ZXJzaW9uICRWCisJCXN0YXJ0IF9FWEVfIHRyYWNlMiAwMDFyZXR1cm4gMAorCQljbWRfbmFtZSB0cmFjZTIgKHRyYWNlMikKKwkJZXhpdCBlbGFwc2VkOl9USU1FXyBjb2RlOjAKKwkJYXRleGl0IGVsYXBzZWQ6X1RJTUVfIGNvZGU6MAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMjEwL3NjcnViX25vcm1hbC5wZXJsIGIvdC90MDIxMC9zY3J1Yl9ub3JtYWwucGVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjVkMWE4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDIxMC9zY3J1Yl9ub3JtYWwucGVybApAQCAtMCwwICsxLDQ4IEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgU2NydWIgdGhlIHZhcmlhYmxlIGZpZWxkcyBmcm9tIHRoZSBub3JtYWwgdHJhY2UyIG91dHB1dCB0bworIyBtYWtlIHRlc3RpbmcgZWFzaWVyLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCitteSAkZmxvYXQgPSAnWzAtOV0qXC5bMC05XSsoW2VFXVstK10/WzAtOV0rKT8nOworCisjIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgdGhlIHRyYWNlMiBkYXRhIHdhcyB3cml0dGVuIHdpdGggYmFyZQorIyB0dXJuZWQgb24gKHdoaWNoIG9taXRzIHRoZSAiPGNsb2NrPiA8ZmlsZT46PGxpbmU+IiBwcmVmaXguCisKK3doaWxlICg8PikgeworICAgICMgVmFyaW91cyBtZXNzYWdlcyBpbmNsdWRlIGFuIGVsYXBzZWQgdGltZSBpbiB0aGUgbWlkZGxlCisgICAgIyBvZiB0aGUgbWVzc2FnZS4gIFJlcGxhY2UgdGhlIHRpbWUgd2l0aCBhIHBsYWNlaG9sZGVyIHRvCisgICAgIyBzaW1wbGlmeSBvdXIgSEVSRURPQyBpbiB0aGUgdGVzdCBzY3JpcHQuCisgICAgcy9lbGFwc2VkOiRmbG9hdC9lbGFwc2VkOl9USU1FXy9nOworCisgICAgbXkgJGxpbmUgPSAkXzsKKworICAgICMgd2UgZXhwZWN0OgorICAgICMgICAgc3RhcnQgPGFyZ3YwPiBbPGFyZ3YxPiBbPGFyZ3YyPiBbLi4uXV1dCisgICAgIworICAgICMgd2hlcmUgYXJndjAgbWlnaHQgYmUgYSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoLCB3aXRoCisgICAgIyBvciB3aXRob3V0IHF1b3RlcywgYW5kIHBsYXRmb3JtIGRlcGVuZGVudC4gIFJlcGxhY2UgYXJndjAKKyAgICAjIHdpdGggYSB0b2tlbiBmb3IgSEVSRURPQyBtYXRjaGluZyBpbiB0aGUgdGVzdCBzY3JpcHQuCisKKyAgICBpZiAoJGxpbmUgPX4gbS9ec3RhcnQvKSB7CisJJGxpbmUgPX4gL15zdGFydFxzKyguKikvOworCW15ICRhcmd2ID0gJDE7CisJJGFyZ3YgPX4gbS8oXCdbXlwnXSpcJ3xbXiBdKylccysoLiopLzsKKwlteSAkYXJndl8wID0gJDE7CisJbXkgJGFyZ3ZfcmVzdCA9ICQyOworCisJcHJpbnQgInN0YXJ0IF9FWEVfICRhcmd2X3Jlc3RcbiI7CisgICAgfQorICAgIGVsc2lmICgkbGluZSA9fiBtL15jbWRfcGF0aC8pIHsKKwkjIExpa2V3aXNlLCB0aGUgJ2NtZF9wYXRoJyBtZXNzYWdlIGJyZWFrcyBvdXQgYXJndlswXS4KKwkjCisJIyBUaGlzIGxpbmUgaXMgb25seSBlbWl0dGVkIHdoZW4gUlVOVElNRV9QUkVGSVggaXMgZGVmaW5lZCwKKwkjIHNvIGp1c3Qgb21pdCBpdCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKwkjIHByaW50ICJjbWRfcGF0aCBfRVhFX1xuIjsKKyAgICB9CisgICAgZWxzZSB7CisJcHJpbnQgIiRsaW5lIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90L3QwMjExLXRyYWNlMi1wZXJmLnNoIGIvdC90MDIxMS10cmFjZTItcGVyZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZWU4ZWUzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDIxMS10cmFjZTItcGVyZi5zaApAQCAtMCwwICsxLDE3NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgdHJhY2UyIGZhY2lsaXR5IChwZXJmIHRhcmdldCknCisuIC4vdGVzdC1saWIuc2gKKworIyBUdXJuIG9mZiBhbnkgaW5oZXJpdGVkIHRyYWNlMiBzZXR0aW5ncyBmb3IgdGhpcyB0ZXN0Lgorc2FuZV91bnNldCBHSVRfVFJBQ0UyIEdJVF9UUkFDRTJfUEVSRiBHSVRfVFJBQ0UyX0VWRU5UCitzYW5lX3Vuc2V0IEdJVF9UUkFDRTJfUEVSRl9CUklFRgorc2FuZV91bnNldCBHSVRfVFJBQ0UyX0NPTkZJR19QQVJBTVMKKworIyBBZGQgdC9oZWxwZXIgZGlyZWN0b3J5IHRvIFBBVEggc28gdGhhdCB3ZSBjYW4gdXNlIGEgcmVsYXRpdmUKKyMgcGF0aCB0byBydW4gbmVzdGVkIGluc3RhbmNlcyBvZiB0ZXN0LXRvb2wuZXhlIChzZWUgMDA0Y2hpbGQpLgorIyBUaGlzIGhlbHBzIHdpdGggSEVSRURPQyBjb21wYXJpc29ucyBsYXRlci4KK1RURElSPSIkR0lUX0JVSUxEX0RJUi90L2hlbHBlci8iICYmIGV4cG9ydCBUVERJUgorUEFUSD0iJFRURElSOiRQQVRIIiAmJiBleHBvcnQgUEFUSAorCisjIFdhcm5pbmc6IHVzZSBvZiAndGVzdF9jbXAnIG1heSBydW4gdGVzdC10b29sLmV4ZSBhbmQvb3IgZ2l0LmV4ZQorIyBXYXJuaW5nOiB0byBkbyB0aGUgYWN0dWFsIGRpZmYvY29tcGFyaXNvbiwgc28gdGhlIEhFUkVET0NzIGhlcmUKKyMgV2FybmluZzogb25seSBjb3ZlciBvdXIgYWN0dWFsIGNhbGxzIHRvIHRlc3QtdG9vbCBhbmQvb3IgZ2l0LgorIyBXYXJuaW5nOiBTbyB5b3UgbWF5IHNlZSBleHRyYSBsaW5lcyBpbiBhcnRpZmFjdCBmaWxlcyB3aGVuCisjIFdhcm5pbmc6IGludGVyYWN0aXZlbHkgZGVidWdnaW5nLgorCitWPSQoZ2l0IHZlcnNpb24gfCBzZWQgLWUgJ3MvXmdpdCB2ZXJzaW9uIC8vJykgJiYgZXhwb3J0IFYKKworIyBUaGVyZSBhcmUgbXVsdGlwbGUgdHJhY2UyIHRhcmdldHM6IG5vcm1hbCwgcGVyZiwgYW5kIGV2ZW50LgorIyBUcmFjZTIgZXZlbnRzIHdpbGwvY2FuIGJlIHdyaXR0ZW4gdG8gZWFjaCBhY3RpdmUgdGFyZ2V0IChzdWJqZWN0CisjIHRvIHdoYXRldmVyIGZpbHRlcmluZyB0aGF0IHRhcmdldCBkZWNpZGVzIHRvIGRvKS4KKyMgVGVzdCBlYWNoIHRhcmdldCBpbmRlcGVuZGVudGx5LgorIworIyBEZWZlciBzZXR0aW5nIEdJVF9UUkFDRTJfUEVSRiB1bnRpbCB0aGUgYWN0dWFsIGNvbW1hbmQgd2Ugd2FudCB0bworIyB0ZXN0IGJlY2F1c2UgaGlkZGVuIGdpdCBhbmQgdGVzdC10b29sIGNvbW1hbmRzIGluIHRoZSB0ZXN0CisjIGhhcm5lc3MgY2FuIGNvbnRhbWluYXRlIG91ciBvdXRwdXQuCisKKyMgRW5hYmxlICJicmllZiIgZmVhdHVyZSB3aGljaCB0dXJucyBvZmYgdGhlIHByZWZpeDoKKyMgICAgICI8Y2xvY2s+IDxmaWxlPjo8bGluZT4gfCA8bnJfcGFyZW50cz4gfCAiCitHSVRfVFJBQ0UyX1BFUkZfQlJJRUY9MSAmJiBleHBvcnQgR0lUX1RSQUNFMl9QRVJGX0JSSUVGCisKKyMgUmVwZWF0IHNvbWUgb2YgdGhlIHQwMjEwIHRlc3RzIHVzaW5nIHRoZSBwZXJmIHRhcmdldCBzdHJlYW0gaW5zdGVhZCBvZgorIyB0aGUgbm9ybWFsIHN0cmVhbS4KKyMKKyMgVG9rZW5zIGhlcmUgb2YgdGhlIGZvcm0gX0ZJRUxEXyBoYXZlIGJlZW4gcmVwbGFjZWQgaW4gdGhlIG9ic2VydmVkIG91dHB1dC4KKworIyBWZXJiIDAwMXJldHVybgorIworIyBJbXBsaWNpdCByZXR1cm4gZnJvbSBjbWRfPHZlcmI+IGZ1bmN0aW9uIHByb3BhZ2F0ZXMgPGNvZGU+LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwZXJmIHN0cmVhbSwgcmV0dXJuIGNvZGUgMCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gdHJhY2UucGVyZiBhY3R1YWwgZXhwZWN0IiAmJgorCUdJVF9UUkFDRTJfUEVSRj0iJChwd2QpL3RyYWNlLnBlcmYiIHRlc3QtdG9vbCB0cmFjZTIgMDAxcmV0dXJuIDAgJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkvdDAyMTEvc2NydWJfcGVyZi5wZXJsIiA8dHJhY2UucGVyZiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWQwfG1haW58dmVyc2lvbnx8fHx8JFYKKwkJZDB8bWFpbnxzdGFydHx8X1RfQUJTX3x8fF9FWEVfIHRyYWNlMiAwMDFyZXR1cm4gMAorCQlkMHxtYWlufGNtZF9uYW1lfHx8fHx0cmFjZTIgKHRyYWNlMikKKwkJZDB8bWFpbnxleGl0fHxfVF9BQlNffHx8Y29kZTowCisJCWQwfG1haW58YXRleGl0fHxfVF9BQlNffHx8Y29kZTowCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwZXJmIHN0cmVhbSwgcmV0dXJuIGNvZGUgMScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gdHJhY2UucGVyZiBhY3R1YWwgZXhwZWN0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVFJBQ0UyX1BFUkY9IiQocHdkKS90cmFjZS5wZXJmIiB0ZXN0LXRvb2wgdHJhY2UyIDAwMXJldHVybiAxICYmCisJcGVybCAiJFRFU1RfRElSRUNUT1JZL3QwMjExL3NjcnViX3BlcmYucGVybCIgPHRyYWNlLnBlcmYgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQlkMHxtYWlufHZlcnNpb258fHx8fCRWCisJCWQwfG1haW58c3RhcnR8fF9UX0FCU198fHxfRVhFXyB0cmFjZTIgMDAxcmV0dXJuIDEKKwkJZDB8bWFpbnxjbWRfbmFtZXx8fHx8dHJhY2UyICh0cmFjZTIpCisJCWQwfG1haW58ZXhpdHx8X1RfQUJTX3x8fGNvZGU6MQorCQlkMHxtYWlufGF0ZXhpdHx8X1RfQUJTX3x8fGNvZGU6MQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBWZXJiIDAwM2Vycm9yCisjCisjIFRvIHRoZSBhYm92ZSwgYWRkIG11bHRpcGxlICdlcnJvciA8bXNnPicgZXZlbnRzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BlcmYgc3RyZWFtLCBlcnJvciBldmVudCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gdHJhY2UucGVyZiBhY3R1YWwgZXhwZWN0IiAmJgorCUdJVF9UUkFDRTJfUEVSRj0iJChwd2QpL3RyYWNlLnBlcmYiIHRlc3QtdG9vbCB0cmFjZTIgMDAzZXJyb3IgImhlbGxvIHdvcmxkIiAidGhpcyBpcyBhIHRlc3QiICYmCisJcGVybCAiJFRFU1RfRElSRUNUT1JZL3QwMjExL3NjcnViX3BlcmYucGVybCIgPHRyYWNlLnBlcmYgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQlkMHxtYWlufHZlcnNpb258fHx8fCRWCisJCWQwfG1haW58c3RhcnR8fF9UX0FCU198fHxfRVhFXyB0cmFjZTIgMDAzZXJyb3IgJ1wnJ2hlbGxvIHdvcmxkJ1wnJyAnXCcndGhpcyBpcyBhIHRlc3QnXCcnCisJCWQwfG1haW58Y21kX25hbWV8fHx8fHRyYWNlMiAodHJhY2UyKQorCQlkMHxtYWlufGVycm9yfHx8fHxoZWxsbyB3b3JsZAorCQlkMHxtYWlufGVycm9yfHx8fHx0aGlzIGlzIGEgdGVzdAorCQlkMHxtYWlufGV4aXR8fF9UX0FCU198fHxjb2RlOjAKKwkJZDB8bWFpbnxhdGV4aXR8fF9UX0FCU198fHxjb2RlOjAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVmVyYiAwMDRjaGlsZAorIworIyBUZXN0IG5lc3RlZCBzcGF3bmluZyBvZiBjaGlsZCBwcm9jZXNzZXMuCisjCisjIENvbmNlcHR1YWxseSwgdGhpcyBsb29rcyBsaWtlOgorIyAgICBQMTogVFQgdHJhY2UyIDAwNGNoaWxkCisjICAgIFAyOiB8LS0tIFRUIHRyYWNlMiAwMDRjaGlsZAorIyAgICBQMzogICAgICB8LS0tIFRUIHRyYWNlMiAwMDFyZXR1cm4gMAorIworIyBXaGljaCBzaG91bGQgZ2VuZXJhdGUgZXZlbnRzOgorIyAgICBQMTogdmVyc2lvbgorIyAgICBQMTogc3RhcnQKKyMgICAgUDE6IGNtZF9uYW1lCisjICAgIFAxOiBjaGlsZF9zdGFydAorIyAgICAgICAgUDI6IHZlcnNpb24KKyMgICAgICAgIFAyOiBzdGFydAorIyAgICAgICAgUDI6IGNtZF9uYW1lCisjICAgICAgICBQMjogY2hpbGRfc3RhcnQKKyMgICAgICAgICAgICBQMzogdmVyc2lvbgorIyAgICAgICAgICAgIFAzOiBzdGFydAorIyAgICAgICAgICAgIFAzOiBjbWRfbmFtZQorIyAgICAgICAgICAgIFAzOiBleGl0CisjICAgICAgICAgICAgUDM6IGF0ZXhpdAorIyAgICAgICAgUDI6IGNoaWxkX2V4aXQKKyMgICAgICAgIFAyOiBleGl0CisjICAgICAgICBQMjogYXRleGl0CisjICAgIFAxOiBjaGlsZF9leGl0CisjICAgIFAxOiBleGl0CisjICAgIFAxOiBhdGV4aXQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGVyZiBzdHJlYW0sIGNoaWxkIHByb2Nlc3NlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gdHJhY2UucGVyZiBhY3R1YWwgZXhwZWN0IiAmJgorCUdJVF9UUkFDRTJfUEVSRj0iJChwd2QpL3RyYWNlLnBlcmYiIHRlc3QtdG9vbCB0cmFjZTIgMDA0Y2hpbGQgdGVzdC10b29sIHRyYWNlMiAwMDRjaGlsZCB0ZXN0LXRvb2wgdHJhY2UyIDAwMXJldHVybiAwICYmCisJcGVybCAiJFRFU1RfRElSRUNUT1JZL3QwMjExL3NjcnViX3BlcmYucGVybCIgPHRyYWNlLnBlcmYgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQlkMHxtYWlufHZlcnNpb258fHx8fCRWCisJCWQwfG1haW58c3RhcnR8fF9UX0FCU198fHxfRVhFXyB0cmFjZTIgMDA0Y2hpbGQgdGVzdC10b29sIHRyYWNlMiAwMDRjaGlsZCB0ZXN0LXRvb2wgdHJhY2UyIDAwMXJldHVybiAwCisJCWQwfG1haW58Y21kX25hbWV8fHx8fHRyYWNlMiAodHJhY2UyKQorCQlkMHxtYWlufGNoaWxkX3N0YXJ0fHxfVF9BQlNffHx8W2NoMF0gY2xhc3M6PyBhcmd2Olt0ZXN0LXRvb2wgdHJhY2UyIDAwNGNoaWxkIHRlc3QtdG9vbCB0cmFjZTIgMDAxcmV0dXJuIDBdCisJCWQxfG1haW58dmVyc2lvbnx8fHx8JFYKKwkJZDF8bWFpbnxzdGFydHx8X1RfQUJTX3x8fF9FWEVfIHRyYWNlMiAwMDRjaGlsZCB0ZXN0LXRvb2wgdHJhY2UyIDAwMXJldHVybiAwCisJCWQxfG1haW58Y21kX25hbWV8fHx8fHRyYWNlMiAodHJhY2UyL3RyYWNlMikKKwkJZDF8bWFpbnxjaGlsZF9zdGFydHx8X1RfQUJTX3x8fFtjaDBdIGNsYXNzOj8gYXJndjpbdGVzdC10b29sIHRyYWNlMiAwMDFyZXR1cm4gMF0KKwkJZDJ8bWFpbnx2ZXJzaW9ufHx8fHwkVgorCQlkMnxtYWlufHN0YXJ0fHxfVF9BQlNffHx8X0VYRV8gdHJhY2UyIDAwMXJldHVybiAwCisJCWQyfG1haW58Y21kX25hbWV8fHx8fHRyYWNlMiAodHJhY2UyL3RyYWNlMi90cmFjZTIpCisJCWQyfG1haW58ZXhpdHx8X1RfQUJTX3x8fGNvZGU6MAorCQlkMnxtYWlufGF0ZXhpdHx8X1RfQUJTX3x8fGNvZGU6MAorCQlkMXxtYWlufGNoaWxkX2V4aXR8fF9UX0FCU198X1RfUkVMX3x8W2NoMF0gcGlkOl9QSURfIGNvZGU6MAorCQlkMXxtYWlufGV4aXR8fF9UX0FCU198fHxjb2RlOjAKKwkJZDF8bWFpbnxhdGV4aXR8fF9UX0FCU198fHxjb2RlOjAKKwkJZDB8bWFpbnxjaGlsZF9leGl0fHxfVF9BQlNffF9UX1JFTF98fFtjaDBdIHBpZDpfUElEXyBjb2RlOjAKKwkJZDB8bWFpbnxleGl0fHxfVF9BQlNffHx8Y29kZTowCisJCWQwfG1haW58YXRleGl0fHxfVF9BQlNffHx8Y29kZTowCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitzYW5lX3Vuc2V0IEdJVF9UUkFDRTJfUEVSRl9CUklFRgorCisjIE5vdyB0ZXN0IHdpdGhvdXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBnZXQgYWxsIFRyYWNlMiBzZXR0aW5ncworIyBmcm9tIHRoZSBnbG9iYWwgY29uZmlnLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyBnbG9iYWwgY29uZmlnLCBwZXJmIHN0cmVhbSwgcmV0dXJuIGNvZGUgMCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gdHJhY2UucGVyZiBhY3R1YWwgZXhwZWN0IiAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCB0cmFjZTIucGVyZkJyaWVmIDEgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgdHJhY2UyLnBlcmZUYXJnZXQgIiQocHdkKS90cmFjZS5wZXJmIiAmJgorCXRlc3QtdG9vbCB0cmFjZTIgMDAxcmV0dXJuIDAgJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkvdDAyMTEvc2NydWJfcGVyZi5wZXJsIiA8dHJhY2UucGVyZiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWQwfG1haW58dmVyc2lvbnx8fHx8JFYKKwkJZDB8bWFpbnxzdGFydHx8X1RfQUJTX3x8fF9FWEVfIHRyYWNlMiAwMDFyZXR1cm4gMAorCQlkMHxtYWlufGNtZF9uYW1lfHx8fHx0cmFjZTIgKHRyYWNlMikKKwkJZDB8bWFpbnxleGl0fHxfVF9BQlNffHx8Y29kZTowCisJCWQwfG1haW58YXRleGl0fHxfVF9BQlNffHx8Y29kZTowCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAyMTEvc2NydWJfcGVyZi5wZXJsIGIvdC90MDIxMS9zY3J1Yl9wZXJmLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUxYWY3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMTEvc2NydWJfcGVyZi5wZXJsCkBAIC0wLDAgKzEsNzYgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBTY3J1YiB0aGUgdmFyaWFibGUgZmllbGRzIGZyb20gdGhlIHBlcmYgdHJhY2UyIG91dHB1dCB0bworIyBtYWtlIHRlc3RpbmcgZWFzaWVyLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCitteSAkcXBhdGggPSAnXCdbXlwnXSpcJ3xbXiBdKic7CisKK215ICRjb2xfZGVwdGg9MDsKK215ICRjb2xfdGhyZWFkPTE7CitteSAkY29sX2V2ZW50PTI7CitteSAkY29sX3JlcG89MzsKK215ICRjb2xfdF9hYnM9NDsKK215ICRjb2xfdF9yZWw9NTsKK215ICRjb2xfY2F0ZWdvcnk9NjsKK215ICRjb2xfcmVzdD03OworCisjIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgdGhlIHRyYWNlMiBkYXRhIHdhcyB3cml0dGVuIHdpdGggYmFyZQorIyB0dXJuZWQgb24gKHdoaWNoIG9taXRzIHRoZSAiPGNsb2NrPiA8ZmlsZT46PGxpbmU+IHwgPHBhcmVudHM+IgorIyBwcmVmaXguCisKK3doaWxlICg8PikgeworICAgIG15IEB0b2tlbnMgPSBzcGxpdCAvXHwvOworCisgICAgZm9yZWFjaCBteSAkY29sIChAdG9rZW5zKSB7ICRjb2wgPX4gcy9eXHMrfFxzKyQvL2c7IH0KKworICAgIGlmICgkdG9rZW5zWyRjb2xfZXZlbnRdID1+IG0vXnN0YXJ0LykgeworCSMgVGhlICdzdGFydCcgbWVzc2FnZSBsaXN0cyB0aGUgY29udGVudHMgb2YgYXJndiBpbiAkY29sX3Jlc3QuCisJIyBPbiBzb21lIHBsYXRmb3JtcyAoV2luZG93cyksIGFyZ3ZbMF0gaXMgKnNvbWV0aW1lcyogYSBjYW5vbmljYWwKKwkjIGFic29sdXRlIHBhdGggdG8gdGhlIEVYRSByYXRoZXIgdGhhbiB0aGUgdmFsdWUgcGFzc2VkIGluIHRoZQorCSMgc2hlbGwgc2NyaXB0LiAgUmVwbGFjZSBpdCB3aXRoIGEgcGxhY2Vob2xkZXIgdG8gc2ltcGxpZnkgb3VyCisJIyBIRVJFRE9DIGluIHRoZSB0ZXN0IHNjcmlwdC4KKwlteSAkYXJndjA7CisJbXkgJGFyZ3ZSZXN0OworCSR0b2tlbnNbJGNvbF9yZXN0XSA9fiBzL14oJHFwYXRoKVxXKiguKikvX0VYRV8gJDIvOworICAgIH0KKyAgICBlbHNpZiAoJHRva2Vuc1skY29sX2V2ZW50XSA9fiBtL2NtZF9wYXRoLykgeworCSMgTGlrZXdpc2UsIHRoZSAnY21kX3BhdGgnIG1lc3NhZ2UgYnJlYWtzIG91dCBhcmd2WzBdLgorCSMKKwkjIFRoaXMgbGluZSBpcyBvbmx5IGVtaXR0ZWQgd2hlbiBSVU5USU1FX1BSRUZJWCBpcyBkZWZpbmVkLAorCSMgc28ganVzdCBvbWl0IGl0IGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorCSMgJHRva2Vuc1skY29sX3Jlc3RdID0gIl9FWEVfIjsKKwlnb3RvIFNLSVBfTElORTsKKyAgICB9CisgICAgZWxzaWYgKCR0b2tlbnNbJGNvbF9ldmVudF0gPX4gbS9jaGlsZF9leGl0LykgeworCSR0b2tlbnNbJGNvbF9yZXN0XSA9fiBzLyBwaWQ6XGQqIC8gcGlkOl9QSURfIC87CisgICAgfQorICAgIGVsc2lmICgkdG9rZW5zWyRjb2xfZXZlbnRdID1+IG0vZGF0YS8pIHsKKwlpZiAoJHRva2Vuc1skY29sX2NhdGVnb3J5XSA9fiBtL3Byb2Nlc3MvKSB7CisJICAgICMgJ2RhdGEnIGFuZCAnZGF0YV9qc29uJyBldmVudHMgY29udGFpbmluZyAncHJvY2VzcycKKwkgICAgIyBjYXRlZ29yeSBkYXRhIGFyZSBhc3N1bWVkIHRvIGJlIHBsYXRmb3JtLXNwZWNpZmljCisJICAgICMgYW5kIGhpZ2hseSB2YXJpYWJsZS4gIEp1c3Qgb21pdCB0aGVtLgorCSAgICBnb3RvIFNLSVBfTElORTsKKwl9CisgICAgfQorCisgICAgIyB0X2FicyBhbmQgdF9yZWwgYXJlIGVpdGhlciBibGFuayBvciBhIGZsb2F0LiAgUmVwbGFjZSB0aGUgZmxvYXQKKyAgICAjIHdpdGggYSBjb25zdGFudCBmb3IgbWF0Y2hpbmcgdGhlIEhFUkVET0MgaW4gdGhlIHRlc3Qgc2NyaXB0LgorICAgIGlmICgkdG9rZW5zWyRjb2xfdF9hYnNdID1+IG0vXGQvKSB7CisJJHRva2Vuc1skY29sX3RfYWJzXSA9ICJfVF9BQlNfIjsKKyAgICB9CisgICAgaWYgKCR0b2tlbnNbJGNvbF90X3JlbF0gPX4gbS9cZC8pIHsKKwkkdG9rZW5zWyRjb2xfdF9yZWxdID0gIl9UX1JFTF8iOworICAgIH0KKworICAgIG15ICRvdXQ7CisKKyAgICAkb3V0ID0gam9pbignfCcsIEB0b2tlbnMpOworICAgIHByaW50ICIkb3V0XG4iOworCisgIFNLSVBfTElORToKK30KKworCmRpZmYgLS1naXQgYS90L3QwMjEyLXRyYWNlMi1ldmVudC5zaCBiL3QvdDAyMTItdHJhY2UyLWV2ZW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1MjkxNTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjEyLXRyYWNlMi1ldmVudC5zaApAQCAtMCwwICsxLDMyNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgdHJhY2UyIGZhY2lsaXR5JworLiAuL3Rlc3QtbGliLnNoCisKKyMgVHVybiBvZmYgYW55IGluaGVyaXRlZCB0cmFjZTIgc2V0dGluZ3MgZm9yIHRoaXMgdGVzdC4KK3NhbmVfdW5zZXQgR0lUX1RSQUNFMiBHSVRfVFJBQ0UyX1BFUkYgR0lUX1RSQUNFMl9FVkVOVAorc2FuZV91bnNldCBHSVRfVFJBQ0UyX0JBUkUKK3NhbmVfdW5zZXQgR0lUX1RSQUNFMl9DT05GSUdfUEFSQU1TCisKK3BlcmwgLU1KU09OOjpQUCAtZSAwID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0X3NldF9wcmVyZXEgSlNPTl9QUAorCisjIEFkZCB0L2hlbHBlciBkaXJlY3RvcnkgdG8gUEFUSCBzbyB0aGF0IHdlIGNhbiB1c2UgYSByZWxhdGl2ZQorIyBwYXRoIHRvIHJ1biBuZXN0ZWQgaW5zdGFuY2VzIG9mIHRlc3QtdG9vbC5leGUgKHNlZSAwMDRjaGlsZCkuCisjIFRoaXMgaGVscHMgd2l0aCBIRVJFRE9DIGNvbXBhcmlzb25zIGxhdGVyLgorVFRESVI9IiRHSVRfQlVJTERfRElSL3QvaGVscGVyLyIgJiYgZXhwb3J0IFRURElSCitQQVRIPSIkVFRESVI6JFBBVEgiICYmIGV4cG9ydCBQQVRICisKKyMgV2FybmluZzogdXNlIG9mICd0ZXN0X2NtcCcgbWF5IHJ1biB0ZXN0LXRvb2wuZXhlIGFuZC9vciBnaXQuZXhlCisjIFdhcm5pbmc6IHRvIGRvIHRoZSBhY3R1YWwgZGlmZi9jb21wYXJpc29uLCBzbyB0aGUgSEVSRURPQ3MgaGVyZQorIyBXYXJuaW5nOiBvbmx5IGNvdmVyIG91ciBhY3R1YWwgY2FsbHMgdG8gdGVzdC10b29sIGFuZC9vciBnaXQuCisjIFdhcm5pbmc6IFNvIHlvdSBtYXkgc2VlIGV4dHJhIGxpbmVzIGluIGFydGlmYWN0IGZpbGVzIHdoZW4KKyMgV2FybmluZzogaW50ZXJhY3RpdmVseSBkZWJ1Z2dpbmcuCisKK1Y9JChnaXQgdmVyc2lvbiB8IHNlZCAtZSAncy9eZ2l0IHZlcnNpb24gLy8nKSAmJiBleHBvcnQgVgorCisjIFRoZXJlIGFyZSBtdWx0aXBsZSB0cmFjZTIgdGFyZ2V0czogbm9ybWFsLCBwZXJmLCBhbmQgZXZlbnQuCisjIFRyYWNlMiBldmVudHMgd2lsbC9jYW4gYmUgd3JpdHRlbiB0byBlYWNoIGFjdGl2ZSB0YXJnZXQgKHN1YmplY3QKKyMgdG8gd2hhdGV2ZXIgZmlsdGVyaW5nIHRoYXQgdGFyZ2V0IGRlY2lkZXMgdG8gZG8pLgorIyBUZXN0IGVhY2ggdGFyZ2V0IGluZGVwZW5kZW50bHkuCisjCisjIERlZmVyIHNldHRpbmcgR0lUX1RSQUNFMl9QRVJGIHVudGlsIHRoZSBhY3R1YWwgY29tbWFuZCB3ZSB3YW50IHRvCisjIHRlc3QgYmVjYXVzZSBoaWRkZW4gZ2l0IGFuZCB0ZXN0LXRvb2wgY29tbWFuZHMgaW4gdGhlIHRlc3QKKyMgaGFybmVzcyBjYW4gY29udGFtaW5hdGUgb3VyIG91dHB1dC4KKworIyBXZSBkb24ndCBib3RoZXIgcmVwZWF0aW5nIHRoZSAwMDFyZXR1cm4gYW5kIDAwMmV4aXQgdGVzdHMsIHNpbmNlIHRoZXkKKyMgaGF2ZSBjb3ZlcmFnZSBpbiB0aGUgbm9ybWFsIGFuZCBwZXJmIHRhcmdldHMuCisKKyMgVmVyYiAwMDNlcnJvcgorIworIyBUbyB0aGUgYWJvdmUsIGFkZCBtdWx0aXBsZSAnZXJyb3IgPG1zZz4nIGV2ZW50cworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEpTT05fUFAgJ2V2ZW50IHN0cmVhbSwgZXJyb3IgZXZlbnQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHRyYWNlLmV2ZW50IGFjdHVhbCBleHBlY3QiICYmCisJR0lUX1RSQUNFMl9FVkVOVD0iJChwd2QpL3RyYWNlLmV2ZW50IiB0ZXN0LXRvb2wgdHJhY2UyIDAwM2Vycm9yICJoZWxsbyB3b3JsZCIgInRoaXMgaXMgYSB0ZXN0IiAmJgorCXBlcmwgIiRURVNUX0RJUkVDVE9SWS90MDIxMi9wYXJzZV9ldmVudHMucGVybCIgPHRyYWNlLmV2ZW50ID5hY3R1YWwgJiYKKwlzZWQgLWUgInMvXnwvLyIgPmV4cGVjdCA8PC1FT0YgJiYKKwl8VkFSMSA9IHsKKwl8ICAiX1NJRDBfIjp7CisJfCAgICAiYXJndiI6WworCXwgICAgICAiX0VYRV8iLAorCXwgICAgICAidHJhY2UyIiwKKwl8ICAgICAgIjAwM2Vycm9yIiwKKwl8ICAgICAgImhlbGxvIHdvcmxkIiwKKwl8ICAgICAgInRoaXMgaXMgYSB0ZXN0IgorCXwgICAgXSwKKwl8ICAgICJlcnJvcnMiOlsKKwl8ICAgICAgIiVzIiwKKwl8ICAgICAgIiVzIgorCXwgICAgXSwKKwl8ICAgICJleGl0X2NvZGUiOjAsCisJfCAgICAiaGllcmFyY2h5IjoidHJhY2UyIiwKKwl8ICAgICJuYW1lIjoidHJhY2UyIiwKKwl8ICAgICJ2ZXJzaW9uIjoiJFYiCisJfCAgfQorCXx9OworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBWZXJiIDAwNGNoaWxkCisjCisjIFRlc3QgbmVzdGVkIHNwYXduaW5nIG9mIGNoaWxkIHByb2Nlc3Nlcy4KKyMKKyMgQ29uY2VwdHVhbGx5LCB0aGlzIGxvb2tzIGxpa2U6CisjICAgIFAxOiBUVCB0cmFjZTIgMDA0Y2hpbGQKKyMgICAgUDI6IHwtLS0gVFQgdHJhY2UyIDAwNGNoaWxkCisjICAgIFAzOiAgICAgIHwtLS0gVFQgdHJhY2UyIDAwMXJldHVybiAwCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgSlNPTl9QUCAnZXZlbnQgc3RyZWFtLCByZXR1cm4gY29kZSAwJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5ldmVudCBhY3R1YWwgZXhwZWN0IiAmJgorCUdJVF9UUkFDRTJfRVZFTlQ9IiQocHdkKS90cmFjZS5ldmVudCIgdGVzdC10b29sIHRyYWNlMiAwMDRjaGlsZCB0ZXN0LXRvb2wgdHJhY2UyIDAwNGNoaWxkIHRlc3QtdG9vbCB0cmFjZTIgMDAxcmV0dXJuIDAgJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkvdDAyMTIvcGFyc2VfZXZlbnRzLnBlcmwiIDx0cmFjZS5ldmVudCA+YWN0dWFsICYmCisJc2VkIC1lICJzL158Ly8iID5leHBlY3QgPDwtRU9GICYmCisJfFZBUjEgPSB7CisJfCAgIl9TSUQwXyI6eworCXwgICAgImFyZ3YiOlsKKwl8ICAgICAgIl9FWEVfIiwKKwl8ICAgICAgInRyYWNlMiIsCisJfCAgICAgICIwMDRjaGlsZCIsCisJfCAgICAgICJ0ZXN0LXRvb2wiLAorCXwgICAgICAidHJhY2UyIiwKKwl8ICAgICAgIjAwNGNoaWxkIiwKKwl8ICAgICAgInRlc3QtdG9vbCIsCisJfCAgICAgICJ0cmFjZTIiLAorCXwgICAgICAiMDAxcmV0dXJuIiwKKwl8ICAgICAgIjAiCisJfCAgICBdLAorCXwgICAgImNoaWxkIjp7CisJfCAgICAgICIwIjp7CisJfCAgICAgICAgImNoaWxkX2FyZ3YiOlsKKwl8ICAgICAgICAgICJfRVhFXyIsCisJfCAgICAgICAgICAidHJhY2UyIiwKKwl8ICAgICAgICAgICIwMDRjaGlsZCIsCisJfCAgICAgICAgICAidGVzdC10b29sIiwKKwl8ICAgICAgICAgICJ0cmFjZTIiLAorCXwgICAgICAgICAgIjAwMXJldHVybiIsCisJfCAgICAgICAgICAiMCIKKwl8ICAgICAgICBdLAorCXwgICAgICAgICJjaGlsZF9jbGFzcyI6Ij8iLAorCXwgICAgICAgICJjaGlsZF9jb2RlIjowLAorCXwgICAgICAgICJ1c2Vfc2hlbGwiOjAKKwl8ICAgICAgfQorCXwgICAgfSwKKwl8ICAgICJleGl0X2NvZGUiOjAsCisJfCAgICAiaGllcmFyY2h5IjoidHJhY2UyIiwKKwl8ICAgICJuYW1lIjoidHJhY2UyIiwKKwl8ICAgICJ2ZXJzaW9uIjoiJFYiCisJfCAgfSwKKwl8ICAiX1NJRDBfL19TSUQxXyI6eworCXwgICAgImFyZ3YiOlsKKwl8ICAgICAgIl9FWEVfIiwKKwl8ICAgICAgInRyYWNlMiIsCisJfCAgICAgICIwMDRjaGlsZCIsCisJfCAgICAgICJ0ZXN0LXRvb2wiLAorCXwgICAgICAidHJhY2UyIiwKKwl8ICAgICAgIjAwMXJldHVybiIsCisJfCAgICAgICIwIgorCXwgICAgXSwKKwl8ICAgICJjaGlsZCI6eworCXwgICAgICAiMCI6eworCXwgICAgICAgICJjaGlsZF9hcmd2IjpbCisJfCAgICAgICAgICAiX0VYRV8iLAorCXwgICAgICAgICAgInRyYWNlMiIsCisJfCAgICAgICAgICAiMDAxcmV0dXJuIiwKKwl8ICAgICAgICAgICIwIgorCXwgICAgICAgIF0sCisJfCAgICAgICAgImNoaWxkX2NsYXNzIjoiPyIsCisJfCAgICAgICAgImNoaWxkX2NvZGUiOjAsCisJfCAgICAgICAgInVzZV9zaGVsbCI6MAorCXwgICAgICB9CisJfCAgICB9LAorCXwgICAgImV4aXRfY29kZSI6MCwKKwl8ICAgICJoaWVyYXJjaHkiOiJ0cmFjZTIvdHJhY2UyIiwKKwl8ICAgICJuYW1lIjoidHJhY2UyIiwKKwl8ICAgICJ2ZXJzaW9uIjoiJFYiCisJfCAgfSwKKwl8ICAiX1NJRDBfL19TSUQxXy9fU0lEMl8iOnsKKwl8ICAgICJhcmd2IjpbCisJfCAgICAgICJfRVhFXyIsCisJfCAgICAgICJ0cmFjZTIiLAorCXwgICAgICAiMDAxcmV0dXJuIiwKKwl8ICAgICAgIjAiCisJfCAgICBdLAorCXwgICAgImV4aXRfY29kZSI6MCwKKwl8ICAgICJoaWVyYXJjaHkiOiJ0cmFjZTIvdHJhY2UyL3RyYWNlMiIsCisJfCAgICAibmFtZSI6InRyYWNlMiIsCisJfCAgICAidmVyc2lvbiI6IiRWIgorCXwgIH0KKwl8fTsKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVGVzdCBsaXN0aW5nIG9mIGFsbCAiaW50ZXJlc3RpbmciIGNvbmZpZyBzZXR0aW5ncy4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBKU09OX1BQICdldmVudCBzdHJlYW0sIGxpc3QgY29uZmlnJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5ldmVudCBhY3R1YWwgZXhwZWN0IiAmJgorCWdpdCBjb25maWcgLS1sb2NhbCB0MDIxMi5hYmMgMSAmJgorCWdpdCBjb25maWcgLS1sb2NhbCB0MDIxMi5kZWYgImhlbGxvIHdvcmxkIiAmJgorCUdJVF9UUkFDRTJfRVZFTlQ9IiQocHdkKS90cmFjZS5ldmVudCIgR0lUX1RSQUNFMl9DT05GSUdfUEFSQU1TPSJ0MDIxMi4qIiB0ZXN0LXRvb2wgdHJhY2UyIDAwMXJldHVybiAwICYmCisJcGVybCAiJFRFU1RfRElSRUNUT1JZL3QwMjEyL3BhcnNlX2V2ZW50cy5wZXJsIiA8dHJhY2UuZXZlbnQgPmFjdHVhbCAmJgorCXNlZCAtZSAicy9efC8vIiA+ZXhwZWN0IDw8LUVPRiAmJgorCXxWQVIxID0geworCXwgICJfU0lEMF8iOnsKKwl8ICAgICJhcmd2IjpbCisJfCAgICAgICJfRVhFXyIsCisJfCAgICAgICJ0cmFjZTIiLAorCXwgICAgICAiMDAxcmV0dXJuIiwKKwl8ICAgICAgIjAiCisJfCAgICBdLAorCXwgICAgImV4aXRfY29kZSI6MCwKKwl8ICAgICJoaWVyYXJjaHkiOiJ0cmFjZTIiLAorCXwgICAgIm5hbWUiOiJ0cmFjZTIiLAorCXwgICAgInBhcmFtcyI6WworCXwgICAgICB7CisJfCAgICAgICAgInBhcmFtIjoidDAyMTIuYWJjIiwKKwl8ICAgICAgICAidmFsdWUiOiIxIgorCXwgICAgICB9LAorCXwgICAgICB7CisJfCAgICAgICAgInBhcmFtIjoidDAyMTIuZGVmIiwKKwl8ICAgICAgICAidmFsdWUiOiJoZWxsbyB3b3JsZCIKKwl8ICAgICAgfQorCXwgICAgXSwKKwl8ICAgICJ2ZXJzaW9uIjoiJFYiCisJfCAgfQorCXx9OworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBUZXN0IGxpc3Rpbmcgb2YgYWxsICJpbnRlcmVzdGluZyIgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEpTT05fUFAgJ2V2ZW50IHN0cmVhbSwgbGlzdCBlbnYgdmFycycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gdHJhY2UuZXZlbnQgYWN0dWFsIGV4cGVjdCIgJiYKKwlHSVRfVFJBQ0UyX0VWRU5UPSIkKHB3ZCkvdHJhY2UuZXZlbnQiIFwKKwkJR0lUX1RSQUNFMl9FTlZfVkFSUz0iQV9WQVIsT1RIRVJfVkFSLE1JU1NJTkciIFwKKwkJQV9WQVI9MSBPVEhFUl9WQVI9ImhlbGxvIHdvcmxkIiB0ZXN0LXRvb2wgdHJhY2UyIDAwMXJldHVybiAwICYmCisJcGVybCAiJFRFU1RfRElSRUNUT1JZL3QwMjEyL3BhcnNlX2V2ZW50cy5wZXJsIiA8dHJhY2UuZXZlbnQgPmFjdHVhbCAmJgorCXNlZCAtZSAicy9efC8vIiA+ZXhwZWN0IDw8LUVPRiAmJgorCXxWQVIxID0geworCXwgICJfU0lEMF8iOnsKKwl8ICAgICJhcmd2IjpbCisJfCAgICAgICJfRVhFXyIsCisJfCAgICAgICJ0cmFjZTIiLAorCXwgICAgICAiMDAxcmV0dXJuIiwKKwl8ICAgICAgIjAiCisJfCAgICBdLAorCXwgICAgImV4aXRfY29kZSI6MCwKKwl8ICAgICJoaWVyYXJjaHkiOiJ0cmFjZTIiLAorCXwgICAgIm5hbWUiOiJ0cmFjZTIiLAorCXwgICAgInBhcmFtcyI6WworCXwgICAgICB7CisJfCAgICAgICAgInBhcmFtIjoiQV9WQVIiLAorCXwgICAgICAgICJ2YWx1ZSI6IjEiCisJfCAgICAgIH0sCisJfCAgICAgIHsKKwl8ICAgICAgICAicGFyYW0iOiJPVEhFUl9WQVIiLAorCXwgICAgICAgICJ2YWx1ZSI6ImhlbGxvIHdvcmxkIgorCXwgICAgICB9CisJfCAgICBdLAorCXwgICAgInZlcnNpb24iOiIkViIKKwl8ICB9CisJfH07CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEpTT05fUFAgJ2Jhc2ljIHRyYWNlMl9kYXRhJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5ldmVudCBhY3R1YWwgZXhwZWN0IiAmJgorCUdJVF9UUkFDRTJfRVZFTlQ9IiQocHdkKS90cmFjZS5ldmVudCIgdGVzdC10b29sIHRyYWNlMiAwMDZkYXRhIHRlc3RfY2F0ZWdvcnkgazEgdjEgdGVzdF9jYXRlZ29yeSBrMiB2MiAmJgorCXBlcmwgIiRURVNUX0RJUkVDVE9SWS90MDIxMi9wYXJzZV9ldmVudHMucGVybCIgPHRyYWNlLmV2ZW50ID5hY3R1YWwgJiYKKwlzZWQgLWUgInMvXnwvLyIgPmV4cGVjdCA8PC1FT0YgJiYKKwl8VkFSMSA9IHsKKwl8ICAiX1NJRDBfIjp7CisJfCAgICAiYXJndiI6WworCXwgICAgICAiX0VYRV8iLAorCXwgICAgICAidHJhY2UyIiwKKwl8ICAgICAgIjAwNmRhdGEiLAorCXwgICAgICAidGVzdF9jYXRlZ29yeSIsCisJfCAgICAgICJrMSIsCisJfCAgICAgICJ2MSIsCisJfCAgICAgICJ0ZXN0X2NhdGVnb3J5IiwKKwl8ICAgICAgImsyIiwKKwl8ICAgICAgInYyIgorCXwgICAgXSwKKwl8ICAgICJkYXRhIjp7CisJfCAgICAgICJ0ZXN0X2NhdGVnb3J5Ijp7CisJfCAgICAgICAgImsxIjoidjEiLAorCXwgICAgICAgICJrMiI6InYyIgorCXwgICAgICB9CisJfCAgICB9LAorCXwgICAgImV4aXRfY29kZSI6MCwKKwl8ICAgICJoaWVyYXJjaHkiOiJ0cmFjZTIiLAorCXwgICAgIm5hbWUiOiJ0cmFjZTIiLAorCXwgICAgInZlcnNpb24iOiIkViIKKwl8ICB9CisJfH07CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIE5vdyB0ZXN0IHdpdGhvdXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBnZXQgYWxsIFRyYWNlMiBzZXR0aW5ncworIyBmcm9tIHRoZSBnbG9iYWwgY29uZmlnLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEpTT05fUFAgJ3VzaW5nIGdsb2JhbCBjb25maWcsIGV2ZW50IHN0cmVhbSwgZXJyb3IgZXZlbnQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHRyYWNlLmV2ZW50IGFjdHVhbCBleHBlY3QiICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIHRyYWNlMi5ldmVudFRhcmdldCAiJChwd2QpL3RyYWNlLmV2ZW50IiAmJgorCXRlc3QtdG9vbCB0cmFjZTIgMDAzZXJyb3IgImhlbGxvIHdvcmxkIiAidGhpcyBpcyBhIHRlc3QiICYmCisJcGVybCAiJFRFU1RfRElSRUNUT1JZL3QwMjEyL3BhcnNlX2V2ZW50cy5wZXJsIiA8dHJhY2UuZXZlbnQgPmFjdHVhbCAmJgorCXNlZCAtZSAicy9efC8vIiA+ZXhwZWN0IDw8LUVPRiAmJgorCXxWQVIxID0geworCXwgICJfU0lEMF8iOnsKKwl8ICAgICJhcmd2IjpbCisJfCAgICAgICJfRVhFXyIsCisJfCAgICAgICJ0cmFjZTIiLAorCXwgICAgICAiMDAzZXJyb3IiLAorCXwgICAgICAiaGVsbG8gd29ybGQiLAorCXwgICAgICAidGhpcyBpcyBhIHRlc3QiCisJfCAgICBdLAorCXwgICAgImVycm9ycyI6WworCXwgICAgICAiJXMiLAorCXwgICAgICAiJXMiCisJfCAgICBdLAorCXwgICAgImV4aXRfY29kZSI6MCwKKwl8ICAgICJoaWVyYXJjaHkiOiJ0cmFjZTIiLAorCXwgICAgIm5hbWUiOiJ0cmFjZTIiLAorCXwgICAgInZlcnNpb24iOiIkViIKKwl8ICB9CisJfH07CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNjYXJkIHRyYWNlcyB3aGVuIHRoZXJlIGFyZSB0b28gbWFueSBmaWxlcycgJworCW1rZGlyIHRyYWNlX3RhcmdldF9kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yIHRyYWNlX3RhcmdldF9kaXIiICYmCisJKAorCQlHSVRfVFJBQ0UyX01BWF9GSUxFUz01ICYmCisJCWV4cG9ydCBHSVRfVFJBQ0UyX01BWF9GSUxFUyAmJgorCQljZCB0cmFjZV90YXJnZXRfZGlyICYmCisJCXRlc3Rfc2VxICRHSVRfVFJBQ0UyX01BWF9GSUxFUyA+Li4vZXhwZWN0ZWRfZmlsZW5hbWVzLnR4dCAmJgorCQl4YXJncyB0b3VjaCA8Li4vZXhwZWN0ZWRfZmlsZW5hbWVzLnR4dCAmJgorCQljZCAuLiAmJgorCQlHSVRfVFJBQ0UyX0VWRU5UPSIkKHB3ZCkvdHJhY2VfdGFyZ2V0X2RpciIgdGVzdC10b29sIHRyYWNlMiAwMDFyZXR1cm4gMAorCSkgJiYKKwllY2hvIGdpdC10cmFjZTItZGlzY2FyZCA+PmV4cGVjdGVkX2ZpbGVuYW1lcy50eHQgJiYKKwlscyB0cmFjZV90YXJnZXRfZGlyID5sc19vdXRwdXQudHh0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfZmlsZW5hbWVzLnR4dCBsc19vdXRwdXQudHh0ICYmCisJaGVhZCAtbjEgdHJhY2VfdGFyZ2V0X2Rpci9naXQtdHJhY2UyLWRpc2NhcmQgfCBncmVwIFwiZXZlbnRcIjpcInZlcnNpb25cIiAmJgorCWhlYWQgLW4yIHRyYWNlX3RhcmdldF9kaXIvZ2l0LXRyYWNlMi1kaXNjYXJkIHwgdGFpbCAtbjEgfCBncmVwIFwiZXZlbnRcIjpcInRvb19tYW55X2ZpbGVzXCIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMjEyL3BhcnNlX2V2ZW50cy5wZXJsIGIvdC90MDIxMi9wYXJzZV9ldmVudHMucGVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTg0YmI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDIxMi9wYXJzZV9ldmVudHMucGVybApAQCAtMCwwICsxLDI1MSBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIFBhcnNlIGV2ZW50IHN0cmVhbSBhbmQgY29udmVydCBpbmRpdmlkdWFsIGV2ZW50cyBpbnRvIGEgc3VtbWFyeQorIyByZWNvcmQgZm9yIHRoZSBwcm9jZXNzLgorIworIyBHaXQuZXhlIGdlbmVyYXRlcyBvbmUgb3IgbW9yZSAiZXZlbnQiIHJlY29yZHMgZm9yIGVhY2ggQVBJIG1ldGhvZCwKKyMgc3VjaCBhcyAic3RhcnQgPGFyZ3Y+IiBhbmQgImV4aXQgPGNvZGU+IiwgZHVyaW5nIHRoZSBsaWZlIG9mIHRoZSBnaXQKKyMgcHJvY2Vzcy4gIEFkZGl0aW9uYWxseSwgdGhlIGlucHV0IG1heSBjb250YWluIGludGVybGVhdmVkIGV2ZW50cworIyBmcm9tIG11bHRpcGxlIGNvbmN1cnJlbnQgZ2l0IHByb2Nlc3NlcyBhbmQvb3IgbXVsdGlwbGUgdGhyZWFkcyBmcm9tCisjIHdpdGhpbiBhIGdpdCBwcm9jZXNzLgorIworIyBBY2N1bXVsYXRlIGV2ZW50cyBmb3IgZWFjaCBwcm9jZXNzIChiYXNlZCBvbiBpdHMgdW5pcXVlIFNJRCkgaW4gYQorIyBkaWN0aW9uYXJ5IGFuZCBlbWl0IHByb2Nlc3Mgc3VtbWFyeSByZWNvcmRzLgorIworIyBDb252ZXJ0IHNvbWUgb2YgdGhlIHZhcmlhYmxlIGZpZWxkcyAoc3VjaCBhcyBlbGFwc2VkIHRpbWUpIGludG8KKyMgcGxhY2Vob2xkZXJzIChvciBvbWl0IHRoZW0pIHRvIG1ha2UgSEVSRURPQyBjb21wYXJpc29ucyBlYXNpZXIgaW4KKyMgdGhlIHRlc3Qgc2NyaXB0cy4KKyMKKyMgV2UgbWF5IGFsc28gb21pdCBmaWVsZHMgbm90IChjdXJyZW50bHkpIHVzZWZ1bCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBKU09OOjpQUDsKK3VzZSBEYXRhOjpEdW1wZXI7Cit1c2UgR2V0b3B0OjpMb25nOworCisjIFRoZSB2ZXJzaW9uIG9mIHRoZSB0cmFjZTIgZXZlbnQgdGFyZ2V0IGZvcm1hdCB0aGF0IHdlIHVuZGVyc3RhbmQuCisjIFRoaXMgaXMgcmVwb3J0ZWQgaW4gdGhlICd2ZXJzaW9uJyBldmVudCBpbiB0aGUgJ2V2dCcgZmllbGQuCisjIEl0IGNvbWVzIGZyb20gdGhlIEdJVF9UUkFDRTJfRVZFTlRfVkVSU0lPTiBtYWNybyBpbiB0cmFjZTIvdHIyX3RndF9ldmVudC5jCitteSAkZXZ0X3ZlcnNpb24gPSAnMSc7CisKK215ICRzaG93X2NoaWxkcmVuID0gMTsKK215ICRzaG93X2V4ZWMgICAgID0gMTsKK215ICRzaG93X3RocmVhZHMgID0gMTsKKworIyBBIGhhY2sgdG8gZ2VuZXJhdGUgdGVzdCBIRVJFRE9DIGRhdGEgZm9yIHBhc3RpbmcgaW50byB0aGUgdGVzdCBzY3JpcHQuCisjIFVzYWdlOgorIyAgICBjZCAidC90cmFzaCBkaXJlY3RvcnkudDAyMTItdHJhY2UyLWV2ZW50IgorIyAgICAkVFQgdHJhY2UgLi4uID50cmFjZS5ldmVudAorIyAgICBWVj0kKC4uLy4uL2dpdC5leGUgdmVyc2lvbiB8IHNlZCAtZSAncy9eZ2l0IHZlcnNpb24gLy8nKQorIyAgICBwZXJsIC4uL3QwMjEyL3BhcnNlX2V2ZW50cy5wZXJsIC0tSEVSRURPQyAtLVZFUlNJT049JFZWIDx0cmFjZS5ldmVudCA+aGVyZWRvYworIyBUaGVuIHBhc3RlIGhlcmVkb2MgaW50byB5b3VyIG5ldyB0ZXN0LgorCitteSAkZ2VuX2hlcmVkb2MgPSAwOworbXkgJGdlbl92ZXJzaW9uID0gJyc7CisKK0dldE9wdGlvbnMoImNoaWxkcmVuISIgPT4gXCRzaG93X2NoaWxkcmVuLAorCSAgICJleGVjISIgICAgID0+IFwkc2hvd19leGVjLAorCSAgICJ0aHJlYWRzISIgID0+IFwkc2hvd190aHJlYWRzLAorCSAgICJIRVJFRE9DISIgID0+IFwkZ2VuX2hlcmVkb2MsCisJICAgIlZFUlNJT049cyIgPT4gXCRnZW5fdmVyc2lvbiAgICApCisgICAgb3IgZGllKCJFcnJvciBpbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXG4iKTsKKworCisjIFNJRHMgY29udGFpbnMgdGltZXN0YW1wcyBhbmQgUElEcyBvZiB0aGUgcHJvY2VzcyBhbmQgaXRzIHBhcmVudHMuCisjIFRoaXMgbWFrZXMgaXQgZGlmZmljdWx0IHRvIG1hdGNoIHVwIGluIGEgSEVSRURPQyBpbiB0aGUgdGVzdCBzY3JpcHQuCisjIEJ1aWxkIGEgbWFwIGZyb20gYWN0dWFsIFNJRHMgdG8gcHJlZGljdGFibGUgY29uc3RhbnQgdmFsdWVzIGFuZCB5ZXQKKyMga2VlcCB0aGUgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcHMuICBGb3IgZXhhbXBsZToKKyMgey4uLiwgInNpZCI6IjE1Mzk3MDY5NTI0NTgyNzYtODY1MiIsIC4uLn0KKyMgey4uLiwgInNpZCI6IjE1Mzk3MDY5NTI0NTgyNzYtODY1Mi8xNTM5NzA2OTUyNjQ5NDkzLTE1NDUyIiwgLi4ufQorIyBiZWNvbWVzOgorIyB7Li4uLCAic2lkIjoiX1NJRDFfIiwgLi4ufQorIyB7Li4uLCAic2lkIjoiX1NJRDFfL19TSUQyXyIsIC4uLn0KK215ICRzaWRfbWFwOworbXkgJHNpZF9jb3VudCA9IDA7CisKK215ICRwcm9jZXNzZXM7CisKK3doaWxlICg8PikgeworICAgIG15ICRsaW5lID0gZGVjb2RlX2pzb24oICRfICk7CisKKyAgICBteSAkc2lkID0gIiI7CisgICAgbXkgJHNpZF9zZXAgPSAiIjsKKworICAgIG15ICRyYXdfc2lkID0gJGxpbmUtPnsnc2lkJ307CisgICAgbXkgQHJhd19zaWRfcGFydHMgPSBzcGxpdCAvXC8vLCAkcmF3X3NpZDsKKyAgICBmb3JlYWNoIG15ICRyYXdfc2lkX2sgKEByYXdfc2lkX3BhcnRzKSB7CisJaWYgKCFleGlzdHMgJHNpZF9tYXAtPnskcmF3X3NpZF9rfSkgeworCSAgICAkc2lkX21hcC0+eyRyYXdfc2lkX2t9ID0gJ19TSUQnIC4gJHNpZF9jb3VudCAuICdfJzsKKwkgICAgJHNpZF9jb3VudCsrOworCX0KKwkkc2lkID0gJHNpZCAuICRzaWRfc2VwIC4gJHNpZF9tYXAtPnskcmF3X3NpZF9rfTsKKwkkc2lkX3NlcCA9ICcvJzsKKyAgICB9CisgICAgCisgICAgbXkgJGV2ZW50ID0gJGxpbmUtPnsnZXZlbnQnfTsKKworICAgIGlmICgkZXZlbnQgZXEgJ3ZlcnNpb24nKSB7CisJJHByb2Nlc3Nlcy0+eyRzaWR9LT57J3ZlcnNpb24nfSA9ICRsaW5lLT57J2V4ZSd9OworCWlmICgkZ2VuX2hlcmVkb2MgPT0gMSAmJiAkZ2VuX3ZlcnNpb24gZXEgJGxpbmUtPnsnZXhlJ30pIHsKKwkgICAgIyBJZiB3ZSBhcmUgZ2VuZXJhdGluZyBkYXRhIEZPUiB0aGUgdGVzdCBzY3JpcHQsIHJlcGxhY2UKKwkgICAgIyB0aGUgcmVwb3J0ZWQgZ2l0LmV4ZSB2ZXJzaW9uIHdpdGggYSByZWZlcmVuY2UgdG8gYW4KKwkgICAgIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIFdoZW4gb3VyIG91dHB1dCBpcyBwYXN0ZWQgaW50bworCSAgICAjIHRoZSB0ZXN0IHNjcmlwdCwgaXQgd2lsbCB0aGVuIGJlIGV4cGFuZGVkIGluIGZ1dHVyZQorCSAgICAjIHRlc3QgcnVucyB0byB0aGUgVEhFTiBjdXJyZW50IHZlcnNpb24gb2YgZ2l0LmV4ZS4KKwkgICAgIyBXZSBhc3N1bWUgdGhhdCB0aGUgdGVzdCBzY3JpcHQgdXNlcyBlbnYgdmFyICRWLgorCSAgICAkcHJvY2Vzc2VzLT57JHNpZH0tPnsndmVyc2lvbid9ID0gIlwkViI7CisJfQorICAgIH0KKworICAgIGVsc2lmICgkZXZlbnQgZXEgJ3N0YXJ0JykgeworCSRwcm9jZXNzZXMtPnskc2lkfS0+eydhcmd2J30gPSAkbGluZS0+eydhcmd2J307CisJJHByb2Nlc3Nlcy0+eyRzaWR9LT57J2FyZ3YnfVswXSA9ICJfRVhFXyI7CisgICAgfQorCisgICAgZWxzaWYgKCRldmVudCBlcSAnZXhpdCcpIHsKKwkkcHJvY2Vzc2VzLT57JHNpZH0tPnsnZXhpdF9jb2RlJ30gPSAkbGluZS0+eydjb2RlJ307CisgICAgfQorCisgICAgZWxzaWYgKCRldmVudCBlcSAnYXRleGl0JykgeworCSRwcm9jZXNzZXMtPnskc2lkfS0+eydleGl0X2NvZGUnfSA9ICRsaW5lLT57J2NvZGUnfTsKKyAgICB9CisKKyAgICBlbHNpZiAoJGV2ZW50IGVxICdlcnJvcicpIHsKKwkjIEZvciBIRVJFRE9DIHB1cnBvc2VzLCB1c2UgdGhlIGVycm9yIG1lc3NhZ2UgZm9ybWF0IHN0cmluZyBpZgorCSMgYXZhaWxhYmxlLCByYXRoZXIgdGhhbiB0aGUgZm9ybWF0dGVkIG1lc3NhZ2UgKHdoaWNoIHByb2JhYmx5CisJIyBoYXMgYW4gYWJzb2x1dGUgcGF0aG5hbWUpLgorCWlmIChleGlzdHMgJGxpbmUtPnsnZm10J30pIHsKKwkgICAgcHVzaCggQHskcHJvY2Vzc2VzLT57JHNpZH0tPnsnZXJyb3JzJ319LCAkbGluZS0+eydmbXQnfSApOworCX0KKwllbHNpZiAoZXhpc3RzICRsaW5lLT57J21zZyd9KSB7CisJICAgIHB1c2goIEB7JHByb2Nlc3Nlcy0+eyRzaWR9LT57J2Vycm9ycyd9fSwgJGxpbmUtPnsnbXNnJ30gKTsKKwl9CisgICAgfQorCisgICAgZWxzaWYgKCRldmVudCBlcSAnY21kX3BhdGgnKSB7CisJIyMgJHByb2Nlc3Nlcy0+eyRzaWR9LT57J3BhdGgnfSA9ICRsaW5lLT57J3BhdGgnfTsKKwkjCisJIyBMaWtlIGluIHRoZSAnc3RhcnQnIGV2ZW50LCB3ZSBuZWVkIHRvIHJlcGxhY2UgdGhlIHZhbHVlIG9mCisJIyBhcmd2WzBdIHdpdGggYSB0b2tlbiBmb3IgSEVSRURPQyBwdXJwb3Nlcy4gIEhvd2V2ZXIsIHRoZQorCSMgZXZlbnQgaXMgb25seSBlbWl0dGVkIHdoZW4gUlVOVElNRV9QUkVGSVggaXMgZGVmaW5lZCwgc28KKwkjIGp1c3Qgb21pdCBpdCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKwkjICRwcm9jZXNzZXMtPnskc2lkfS0+eydwYXRoJ30gPSAiX0VYRV8iOworICAgIH0KKyAgICAKKyAgICBlbHNpZiAoJGV2ZW50IGVxICdjbWRfbmFtZScpIHsKKwkkcHJvY2Vzc2VzLT57JHNpZH0tPnsnbmFtZSd9ID0gJGxpbmUtPnsnbmFtZSd9OworCSRwcm9jZXNzZXMtPnskc2lkfS0+eydoaWVyYXJjaHknfSA9ICRsaW5lLT57J2hpZXJhcmNoeSd9OworICAgIH0KKworICAgIGVsc2lmICgkZXZlbnQgZXEgJ2FsaWFzJykgeworCSRwcm9jZXNzZXMtPnskc2lkfS0+eydhbGlhcyd9LT57J2tleSd9ID0gJGxpbmUtPnsnYWxpYXMnfTsKKwkkcHJvY2Vzc2VzLT57JHNpZH0tPnsnYWxpYXMnfS0+eydhcmd2J30gPSAkbGluZS0+eydhcmd2J307CisgICAgfQorCisgICAgZWxzaWYgKCRldmVudCBlcSAnZGVmX3BhcmFtJykgeworCW15ICRrdjsKKwkka3YtPnsncGFyYW0nfSA9ICRsaW5lLT57J3BhcmFtJ307CisJJGt2LT57J3ZhbHVlJ30gPSAkbGluZS0+eyd2YWx1ZSd9OworCXB1c2goIEB7JHByb2Nlc3Nlcy0+eyRzaWR9LT57J3BhcmFtcyd9fSwgJGt2ICk7CisgICAgfQorCisgICAgZWxzaWYgKCRldmVudCBlcSAnY2hpbGRfc3RhcnQnKSB7CisJaWYgKCRzaG93X2NoaWxkcmVuID09IDEpIHsKKwkgICAgJHByb2Nlc3Nlcy0+eyRzaWR9LT57J2NoaWxkJ30tPnskbGluZS0+eydjaGlsZF9pZCd9fS0+eydjaGlsZF9jbGFzcyd9ID0gJGxpbmUtPnsnY2hpbGRfY2xhc3MnfTsKKwkgICAgJHByb2Nlc3Nlcy0+eyRzaWR9LT57J2NoaWxkJ30tPnskbGluZS0+eydjaGlsZF9pZCd9fS0+eydjaGlsZF9hcmd2J30gPSAkbGluZS0+eydhcmd2J307CisJICAgICRwcm9jZXNzZXMtPnskc2lkfS0+eydjaGlsZCd9LT57JGxpbmUtPnsnY2hpbGRfaWQnfX0tPnsnY2hpbGRfYXJndid9WzBdID0gIl9FWEVfIjsKKwkgICAgJHByb2Nlc3Nlcy0+eyRzaWR9LT57J2NoaWxkJ30tPnskbGluZS0+eydjaGlsZF9pZCd9fS0+eyd1c2Vfc2hlbGwnfSA9ICRsaW5lLT57J3VzZV9zaGVsbCd9ID8gMSA6IDA7CisJfQorICAgIH0KKworICAgIGVsc2lmICgkZXZlbnQgZXEgJ2NoaWxkX2V4aXQnKSB7CisJaWYgKCRzaG93X2NoaWxkcmVuID09IDEpIHsKKwkgICAgJHByb2Nlc3Nlcy0+eyRzaWR9LT57J2NoaWxkJ30tPnskbGluZS0+eydjaGlsZF9pZCd9fS0+eydjaGlsZF9jb2RlJ30gPSAkbGluZS0+eydjb2RlJ307CisJfQorICAgIH0KKworICAgICMgVE9ETyBkZWNpZGUgd2hhdCBpbmZvcm1hdGlvbiB3ZSB3YW50IHRvIHRlc3QgZnJvbSB0aHJlYWQgZXZlbnRzLgorCisgICAgZWxzaWYgKCRldmVudCBlcSAndGhyZWFkX3N0YXJ0JykgeworCWlmICgkc2hvd190aHJlYWRzID09IDEpIHsKKwl9CisgICAgfQorCisgICAgZWxzaWYgKCRldmVudCBlcSAndGhyZWFkX2V4aXQnKSB7CisJaWYgKCRzaG93X3RocmVhZHMgPT0gMSkgeworCX0KKyAgICB9CisKKyAgICAjIFRPRE8gZGVjaWRlIHdoYXQgaW5mb3JtYXRpb24gd2Ugd2FudCB0byB0ZXN0IGZyb20gZXhlYyBldmVudHMuCisKKyAgICBlbHNpZiAoJGV2ZW50IGVxICdleGVjJykgeworCWlmICgkc2hvd19leGVjID09IDEpIHsKKwl9CisgICAgfQorCisgICAgZWxzaWYgKCRldmVudCBlcSAnZXhlY19yZXN1bHQnKSB7CisJaWYgKCRzaG93X2V4ZWMgPT0gMSkgeworCX0KKyAgICB9CisKKyAgICBlbHNpZiAoJGV2ZW50IGVxICdkZWZfcGFyYW0nKSB7CisJIyBBY2N1bXVsYXRlIHBhcmFtZXRlciBrZXkvdmFsdWUgcGFpcnMgYnkga2V5IHJhdGhlciB0aGFuIGluIGFuIGFycmF5CisJIyBzbyB0aGF0IHdlIGdldCBvdmVyd3JpdGUgKGxhc3Qgb25lIHdpbnMpIGVmZmVjdHMuCisJJHByb2Nlc3Nlcy0+eyRzaWR9LT57J3BhcmFtcyd9LT57JGxpbmUtPnsncGFyYW0nfX0gPSAkbGluZS0+eyd2YWx1ZSd9OworICAgIH0KKworICAgIGVsc2lmICgkZXZlbnQgZXEgJ2RlZl9yZXBvJykgeworCSMgJHByb2Nlc3Nlcy0+eyRzaWR9LT57J3JlcG9zJ30tPnskbGluZS0+eydyZXBvJ319ID0gJGxpbmUtPnsnd29ya3RyZWUnfTsKKwkkcHJvY2Vzc2VzLT57JHNpZH0tPnsncmVwb3MnfS0+eyRsaW5lLT57J3JlcG8nfX0gPSAiX1dPUktUUkVFXyI7CisgICAgfQorCisgICAgIyBBIHNlcmllcyBvZiBwb3RlbnRpYWxseSBuZXN0ZWQgYW5kIHRocmVhZGVkIHJlZ2lvbiBhbmQgZGF0YSBldmVudHMKKyAgICAjIGlzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmlsZSB3aXRoIHRoZSB0eXBlIG9mIHN1bW1hcnkgcmVjb3JkIHdlCisgICAgIyBhcmUgYnVpbGRpbmcgaW4gdGhpcyBzY3JpcHQuICBTaW5jZSB0aGV5IGFyZSBpbnRlbmRlZCBmb3IKKyAgICAjIHBlcmYtdHJhY2UtbGlrZSBhbmFseXNpcyByYXRoZXIgdGhhbiBhIHJlc3VsdCBzdW1tYXJ5LCB3ZSBpZ25vcmUKKyAgICAjIG1vc3Qgb2YgdGhlbSBoZXJlLgorCisgICAgIyBlbHNpZiAoJGV2ZW50IGVxICdyZWdpb25fZW50ZXInKSB7CisgICAgIyB9CisgICAgIyBlbHNpZiAoJGV2ZW50IGVxICdyZWdpb25fbGVhdmUnKSB7CisgICAgIyB9CisKKyAgICBlbHNpZiAoJGV2ZW50IGVxICdkYXRhJykgeworCW15ICRjYXQgPSAkbGluZS0+eydjYXRlZ29yeSd9OworCWlmICgkY2F0IGVxICd0ZXN0X2NhdGVnb3J5JykgeworCSAgICAKKwkgICAgbXkgJGtleSA9ICRsaW5lLT57J2tleSd9OworCSAgICBteSAkdmFsdWUgPSAkbGluZS0+eyd2YWx1ZSd9OworCSAgICAkcHJvY2Vzc2VzLT57JHNpZH0tPnsnZGF0YSd9LT57JGNhdH0tPnska2V5fSA9ICR2YWx1ZTsKKwl9CisgICAgfQorCisgICAgIyBUaGlzIHRyYWNlMiB0YXJnZXQgZG9lcyBub3QgZW1pdCAncHJpbnRmJyBldmVudHMuCisgICAgIworICAgICMgZWxzaWYgKCRldmVudCBlcSAncHJpbnRmJykgeworICAgICMgfQorfQorCisjIER1bXAgdGhlIHJlc3VsdGluZyBoYXNoIGludG8gc29tZXRoaW5nIHRoYXQgd2UgY2FuIGNvbXBhcmUgYWdhaW5zdAorIyBpbiB0aGUgdGVzdCBzY3JpcHQuICBUaGVzZSBvcHRpb25zIG1ha2UgRHVtcGVyIG91dHB1dCBsb29rIGEgbGl0dGxlCisjIGJpdCBsaWtlIEpTT04uICBBbHNvIGNvbnZlcnQgdmFyaWFibGUgcmVmZXJlbmNlcyBvZiB0aGUgZm9ybSAiJFZBUioiCisjIHNvIHRoYXQgdGhlIG1hdGNoaW5nIEhFUkVET0MgZG9lc24ndCBuZWVkIHRvIGVzY2FwZSBpdC4KKworJERhdGE6OkR1bXBlcjo6U29ydGtleXMgPSAxOworJERhdGE6OkR1bXBlcjo6SW5kZW50ID0gMTsKKyREYXRhOjpEdW1wZXI6OlB1cml0eSA9IDE7CiskRGF0YTo6RHVtcGVyOjpQYWlyID0gJzonOworCitteSAkb3V0ID0gRHVtcGVyKCRwcm9jZXNzZXMpOworJG91dCA9fiBzLycvIi9nOworJG91dCA9fiBzL1wkVkFSL1ZBUi9nOworCisjIEZpbmFsbHksIGlmIHdlJ3JlIHJ1bm5pbmcgdGhpcyBzY3JpcHQgdG8gZ2VuZXJhdGUgKG1hbnVhbGx5IGNvbmZpcm1lZCkKKyMgZGF0YSB0byBhZGQgdG8gdGhlIHRlc3Qgc2NyaXB0LCBndWFyZCB0aGUgaW5kZW50YXRpb24uCisKK2lmICgkZ2VuX2hlcmVkb2MgPT0gMSkgeworICAgICRvdXQgPX4gcy9eL1x0XHwvZ21zOworfQorCitwcmludCAkb3V0OwpkaWZmIC0tZ2l0IGEvdC90MDMwMC1jcmVkZW50aWFscy5zaCBiL3QvdDAzMDAtY3JlZGVudGlhbHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmMyZDc0MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAzMDAtY3JlZGVudGlhbHMuc2gKQEAgLTAsMCArMSw2OTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyBjcmVkZW50aWFsIGhlbHBlciB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItY3JlZGVudGlhbC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBoZWxwZXIgc2NyaXB0cycgJworCWNhdCA+ZHVtcCA8PC1cRU9GICYmCisJd2hvYW1pPSQoZWNobyAkMCB8IHNlZCBzLy4qZ2l0LWNyZWRlbnRpYWwtLy8pCisJZWNobyA+JjIgIiR3aG9hbWk6ICQqIgorCU9JRlM9JElGUworCUlGUz09CisJd2hpbGUgcmVhZCBrZXkgdmFsdWU7IGRvCisJCWVjaG8gPiYyICIkd2hvYW1pOiAka2V5PSR2YWx1ZSIKKwkJZXZhbCAiJGtleT0kdmFsdWUiCisJZG9uZQorCUlGUz0kT0lGUworCUVPRgorCisJd3JpdGVfc2NyaXB0IGdpdC1jcmVkZW50aWFsLXVzZWxlc3MgPDwtXEVPRiAmJgorCS4gLi9kdW1wCisJZXhpdCAwCisJRU9GCisKKwl3cml0ZV9zY3JpcHQgZ2l0LWNyZWRlbnRpYWwtcXVpdCA8PC1cRU9GICYmCisJLiAuL2R1bXAKKwllY2hvIHF1aXQ9MQorCUVPRgorCisJd3JpdGVfc2NyaXB0IGdpdC1jcmVkZW50aWFsLXZlcmJhdGltIDw8LVxFT0YgJiYKKwl1c2VyPSQxOyBzaGlmdAorCXBhc3M9JDE7IHNoaWZ0CisJLiAuL2R1bXAKKwl0ZXN0IC16ICIkdXNlciIgfHwgZWNobyB1c2VybmFtZT0kdXNlcgorCXRlc3QgLXogIiRwYXNzIiB8fCBlY2hvIHBhc3N3b3JkPSRwYXNzCisJRU9GCisKKwlQQVRIPSIkUFdEOiRQQVRIIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVkZW50aWFsX2ZpbGwgaW52b2tlcyBoZWxwZXInICcKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSBmb28gYmFyIiA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwktLQorCXByb3RvY29sPWh0dHAKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YmFyCisJLS0KKwl2ZXJiYXRpbTogZ2V0CisJdmVyYmF0aW06IHByb3RvY29sPWh0dHAKKwl2ZXJiYXRpbTogaG9zdD1leGFtcGxlLmNvbQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVkZW50aWFsX2ZpbGwgaW52b2tlcyBtdWx0aXBsZSBoZWxwZXJzJyAnCisJY2hlY2sgZmlsbCB1c2VsZXNzICJ2ZXJiYXRpbSBmb28gYmFyIiA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwktLQorCXByb3RvY29sPWh0dHAKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YmFyCisJLS0KKwl1c2VsZXNzOiBnZXQKKwl1c2VsZXNzOiBwcm90b2NvbD1odHRwCisJdXNlbGVzczogaG9zdD1leGFtcGxlLmNvbQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogcHJvdG9jb2w9aHR0cAorCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWRlbnRpYWxfZmlsbCBzdG9wcyB3aGVuIHdlIGdldCBhIGZ1bGwgcmVzcG9uc2UnICcKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSBvbmUgdHdvIiAidmVyYmF0aW0gdGhyZWUgZm91ciIgPDwtXEVPRgorCXByb3RvY29sPWh0dHAKKwlob3N0PWV4YW1wbGUuY29tCisJLS0KKwlwcm90b2NvbD1odHRwCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPW9uZQorCXBhc3N3b3JkPXR3bworCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiBwcm90b2NvbD1odHRwCisJdmVyYmF0aW06IGhvc3Q9ZXhhbXBsZS5jb20KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlZGVudGlhbF9maWxsIGNvbnRpbnVlcyB0aHJvdWdoIHBhcnRpYWwgcmVzcG9uc2UnICcKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSBvbmUgXCJcIiIgInZlcmJhdGltIHR3byB0aHJlZSIgPDwtXEVPRgorCXByb3RvY29sPWh0dHAKKwlob3N0PWV4YW1wbGUuY29tCisJLS0KKwlwcm90b2NvbD1odHRwCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPXR3bworCXBhc3N3b3JkPXRocmVlCisJLS0KKwl2ZXJiYXRpbTogZ2V0CisJdmVyYmF0aW06IHByb3RvY29sPWh0dHAKKwl2ZXJiYXRpbTogaG9zdD1leGFtcGxlLmNvbQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogcHJvdG9jb2w9aHR0cAorCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJdmVyYmF0aW06IHVzZXJuYW1lPW9uZQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVkZW50aWFsX2ZpbGwgcGFzc2VzIGFsb25nIG1ldGFkYXRhJyAnCisJY2hlY2sgZmlsbCAidmVyYmF0aW0gb25lIHR3byIgPDwtXEVPRgorCXByb3RvY29sPWZ0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPWZvby5naXQKKwktLQorCXByb3RvY29sPWZ0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPWZvby5naXQKKwl1c2VybmFtZT1vbmUKKwlwYXNzd29yZD10d28KKwktLQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogcHJvdG9jb2w9ZnRwCisJdmVyYmF0aW06IGhvc3Q9ZXhhbXBsZS5jb20KKwl2ZXJiYXRpbTogcGF0aD1mb28uZ2l0CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWRlbnRpYWxfYXBwcm92ZSBjYWxscyBhbGwgaGVscGVycycgJworCWNoZWNrIGFwcHJvdmUgdXNlbGVzcyAidmVyYmF0aW0gb25lIHR3byIgPDwtXEVPRgorCXByb3RvY29sPWh0dHAKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YmFyCisJLS0KKwktLQorCXVzZWxlc3M6IHN0b3JlCisJdXNlbGVzczogcHJvdG9jb2w9aHR0cAorCXVzZWxlc3M6IGhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VsZXNzOiB1c2VybmFtZT1mb28KKwl1c2VsZXNzOiBwYXNzd29yZD1iYXIKKwl2ZXJiYXRpbTogc3RvcmUKKwl2ZXJiYXRpbTogcHJvdG9jb2w9aHR0cAorCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJdmVyYmF0aW06IHVzZXJuYW1lPWZvbworCXZlcmJhdGltOiBwYXNzd29yZD1iYXIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGJvdGhlciBzdG9yaW5nIHBhc3N3b3JkLWxlc3MgY3JlZGVudGlhbCcgJworCWNoZWNrIGFwcHJvdmUgdXNlbGVzcyA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1mb28KKwktLQorCS0tCisJRU9GCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlZGVudGlhbF9yZWplY3QgY2FsbHMgYWxsIGhlbHBlcnMnICcKKwljaGVjayByZWplY3QgdXNlbGVzcyAidmVyYmF0aW0gb25lIHR3byIgPDwtXEVPRgorCXByb3RvY29sPWh0dHAKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YmFyCisJLS0KKwktLQorCXVzZWxlc3M6IGVyYXNlCisJdXNlbGVzczogcHJvdG9jb2w9aHR0cAorCXVzZWxlc3M6IGhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VsZXNzOiB1c2VybmFtZT1mb28KKwl1c2VsZXNzOiBwYXNzd29yZD1iYXIKKwl2ZXJiYXRpbTogZXJhc2UKKwl2ZXJiYXRpbTogcHJvdG9jb2w9aHR0cAorCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJdmVyYmF0aW06IHVzZXJuYW1lPWZvbworCXZlcmJhdGltOiBwYXNzd29yZD1iYXIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlcm5hbWVzIGNhbiBiZSBwcmVzZXJ2ZWQnICcKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSBcIlwiIHRocmVlIiA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1vbmUKKwktLQorCXByb3RvY29sPWh0dHAKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9b25lCisJcGFzc3dvcmQ9dGhyZWUKKwktLQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogcHJvdG9jb2w9aHR0cAorCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJdmVyYmF0aW06IHVzZXJuYW1lPW9uZQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2VybmFtZXMgY2FuIGJlIG92ZXJyaWRkZW4nICcKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSB0d28gdGhyZWUiIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPW9uZQorCS0tCisJcHJvdG9jb2w9aHR0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT10d28KKwlwYXNzd29yZD10aHJlZQorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiBwcm90b2NvbD1odHRwCisJdmVyYmF0aW06IGhvc3Q9ZXhhbXBsZS5jb20KKwl2ZXJiYXRpbTogdXNlcm5hbWU9b25lCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBib3RoZXIgY29tcGxldGluZyBhbHJlYWR5LWZ1bGwgY3JlZGVudGlhbCcgJworCWNoZWNrIGZpbGwgInZlcmJhdGltIHRocmVlIGZvdXIiIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPW9uZQorCXBhc3N3b3JkPXR3bworCS0tCisJcHJvdG9jb2w9aHR0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1vbmUKKwlwYXNzd29yZD10d28KKwktLQorCUVPRgorJworCisjIFdlIGNhbid0IHRlc3QgdGhlIGJhc2ljIHRlcm1pbmFsIHBhc3N3b3JkIHByb21wdCBoZXJlIGJlY2F1c2UKKyMgZ2V0cGFzcygpIHRyaWVzIHRvbyBoYXJkIHRvIGZpbmQgdGhlIHJlYWwgdGVybWluYWwuIEJ1dCBpZiBvdXIKKyMgYXNrcGFzcyBoZWxwZXIgaXMgcnVuLCB3ZSBrbm93IHRoZSBpbnRlcm5hbCBnZXRwYXNzIGlzIHdvcmtpbmcuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBoZWxwZXIgbGlzdCBmYWxscyBiYWNrIHRvIGludGVybmFsIGdldHBhc3MnICcKKwljaGVjayBmaWxsIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwCisJaG9zdD1leGFtcGxlLmNvbQorCS0tCisJcHJvdG9jb2w9aHR0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1hc2twYXNzLXVzZXJuYW1lCisJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCS0tCisJYXNrcGFzczogVXNlcm5hbWUgZm9yICdcJydodHRwOi8vZXhhbXBsZS5jb20nXCcnOgorCWFza3Bhc3M6IFBhc3N3b3JkIGZvciAnXCcnaHR0cDovL2Fza3Bhc3MtdXNlcm5hbWVAZXhhbXBsZS5jb20nXCcnOgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcm5hbCBnZXRwYXNzIGRvZXMgbm90IGFzayBmb3Iga25vd24gdXNlcm5hbWUnICcKKwljaGVjayBmaWxsIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWZvbworCS0tCisJcHJvdG9jb2w9aHR0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJLS0KKwlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHA6Ly9mb29AZXhhbXBsZS5jb20nXCcnOgorCUVPRgorJworCitIRUxQRVI9IiFmKCkgeworCQljYXQgPi9kZXYvbnVsbAorCQllY2hvIHVzZXJuYW1lPWZvbworCQllY2hvIHBhc3N3b3JkPWJhcgorCX07IGYiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNwZWN0IGNvbmZpZ3VyZWQgY3JlZGVudGlhbHMnICcKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAiJEhFTFBFUiIgJiYKKwljaGVjayBmaWxsIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwCisJaG9zdD1leGFtcGxlLmNvbQorCS0tCisJcHJvdG9jb2w9aHR0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1iYXIKKwktLQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaCBjb25maWd1cmVkIGNyZWRlbnRpYWwnICcKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmh0dHBzOi8vZXhhbXBsZS5jb20uaGVscGVyICIkSEVMUEVSIiAmJgorCWNoZWNrIGZpbGwgPDwtXEVPRgorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXBhdGg9cmVwby5naXQKKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBtYXRjaCBjb25maWd1cmVkIGNyZWRlbnRpYWwnICcKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmh0dHBzOi8vZm9vLmhlbHBlciAiJEhFTFBFUiIgJiYKKwljaGVjayBmaWxsIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9YmFyCisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9YmFyCisJdXNlcm5hbWU9YXNrcGFzcy11c2VybmFtZQorCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwktLQorCWFza3Bhc3M6IFVzZXJuYW1lIGZvciAnXCcnaHR0cHM6Ly9iYXInXCcnOgorCWFza3Bhc3M6IFBhc3N3b3JkIGZvciAnXCcnaHR0cHM6Ly9hc2twYXNzLXVzZXJuYW1lQGJhcidcJyc6CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hdGNoIG11bHRpcGxlIGNvbmZpZ3VyZWQgaGVscGVycycgJworCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICJ2ZXJiYXRpbSBcIlwiIFwiXCIiICYmCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tLmhlbHBlciAiJEhFTFBFUiIgJiYKKwljaGVjayBmaWxsIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPXJlcG8uZ2l0CisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1iYXIKKwktLQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogcHJvdG9jb2w9aHR0cHMKKwl2ZXJiYXRpbTogaG9zdD1leGFtcGxlLmNvbQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaCBtdWx0aXBsZSBjb25maWd1cmVkIGhlbHBlcnMgd2l0aCBVUkxzJyAnCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tL3JlcG8uZ2l0LmhlbHBlciAidmVyYmF0aW0gXCJcIiBcIlwiIiAmJgorCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS5oZWxwZXIgIiRIRUxQRVIiICYmCisJY2hlY2sgZmlsbCA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJcGF0aD1yZXBvLmdpdAorCS0tCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YmFyCisJLS0KKwl2ZXJiYXRpbTogZ2V0CisJdmVyYmF0aW06IHByb3RvY29sPWh0dHBzCisJdmVyYmF0aW06IGhvc3Q9ZXhhbXBsZS5jb20KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2ggcGVyY2VudC1lbmNvZGVkIHZhbHVlcycgJworCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS8lMjU2Ni5naXQuaGVscGVyICIkSEVMUEVSIiAmJgorCWNoZWNrIGZpbGwgPDwtXEVPRgorCXVybD1odHRwczovL2V4YW1wbGUuY29tLyUyNTY2LmdpdAorCS0tCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YmFyCisJLS0KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2ggcGVyY2VudC1lbmNvZGVkIFVURi04IHZhbHVlcyBpbiBwYXRoJyAnCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tLnVzZUh0dHBQYXRoIHRydWUgJiYKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmh0dHBzOi8vZXhhbXBsZS5jb20vcGVyw7ouZ2l0LmhlbHBlciAiJEhFTFBFUiIgJiYKKwljaGVjayBmaWxsIDw8LVxFT0YKKwl1cmw9aHR0cHM6Ly9leGFtcGxlLmNvbS9wZXIlQzMlQkEuZ2l0CisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPXBlcsO6LmdpdAorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hdGNoIHBlcmNlbnQtZW5jb2RlZCB2YWx1ZXMgaW4gdXNlcm5hbWUnICcKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmh0dHBzOi8vdXNlciUyZm5hbWVAZXhhbXBsZS5jb20vZm9vL2Jhci5naXQuaGVscGVyICIkSEVMUEVSIiAmJgorCWNoZWNrIGZpbGwgPDwtXEVPRgorCXVybD1odHRwczovL3VzZXIlMmZuYW1lQGV4YW1wbGUuY29tL2Zvby9iYXIuZ2l0CisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1iYXIKKwktLQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIG11bHRpcGxlIHBhdGggY29tcG9uZW50cycgJworCXRlc3RfdW5jb25maWcgY3JlZGVudGlhbC5oZWxwZXIgJiYKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmh0dHBzOi8vZXhhbXBsZS5jb20vZm9vL3JlcG8uZ2l0LmhlbHBlciAidmVyYmF0aW0gZm9vIGJhciIgJiYKKwljaGVjayBmaWxsIDw8LVxFT0YKKwl1cmw9aHR0cHM6Ly9leGFtcGxlLmNvbS9mb28vcmVwby5naXQKKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiBwcm90b2NvbD1odHRwcworCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgdXNlcm5hbWUgZnJvbSBjb25maWcnICcKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmh0dHBzOi8vZXhhbXBsZS5jb20udXNlcm5hbWUgZm9vICYmCisJY2hlY2sgZmlsbCA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJLS0KKwlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHBzOi8vZm9vQGV4YW1wbGUuY29tJ1wnJzoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9ub3JzIHVzZXJuYW1lIGZyb20gVVJMIG92ZXIgaGVscGVyIChVUkwpJyAnCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tLnVzZXJuYW1lIGJvYiAmJgorCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS5oZWxwZXIgInZlcmJhdGltIFwiXCIgYmFyIiAmJgorCWNoZWNrIGZpbGwgPDwtXEVPRgorCXVybD1odHRwczovL2FsaWNlQGV4YW1wbGUuY29tCisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1hbGljZQorCXBhc3N3b3JkPWJhcgorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiBwcm90b2NvbD1odHRwcworCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJdmVyYmF0aW06IHVzZXJuYW1lPWFsaWNlCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvbm9ycyB1c2VybmFtZSBmcm9tIFVSTCBvdmVyIGhlbHBlciAoY29tcG9uZW50cyknICcKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmh0dHBzOi8vZXhhbXBsZS5jb20udXNlcm5hbWUgYm9iICYmCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tLmhlbHBlciAidmVyYmF0aW0gXCJcIiBiYXIiICYmCisJY2hlY2sgZmlsbCA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9YWxpY2UKKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWFsaWNlCisJcGFzc3dvcmQ9YmFyCisJLS0KKwl2ZXJiYXRpbTogZ2V0CisJdmVyYmF0aW06IHByb3RvY29sPWh0dHBzCisJdmVyYmF0aW06IGhvc3Q9ZXhhbXBsZS5jb20KKwl2ZXJiYXRpbTogdXNlcm5hbWU9YWxpY2UKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFzdCBtYXRjaGluZyB1c2VybmFtZSB3aW5zJyAnCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tL3BhdGguZ2l0LnVzZXJuYW1lIGJvYiAmJgorCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS51c2VybmFtZSBhbGljZSAmJgorCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS5oZWxwZXIgInZlcmJhdGltIFwiXCIgYmFyIiAmJgorCWNoZWNrIGZpbGwgPDwtXEVPRgorCXVybD1odHRwczovL2V4YW1wbGUuY29tL3BhdGguZ2l0CisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1hbGljZQorCXBhc3N3b3JkPWJhcgorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiBwcm90b2NvbD1odHRwcworCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJdmVyYmF0aW06IHVzZXJuYW1lPWFsaWNlCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgcGF0aHMgY2FuIGJlIHBhcnQgb2YgY29udGV4dCcgJworCWNoZWNrIGZpbGwgInZlcmJhdGltIGZvbyBiYXIiIDw8LVxFT0YgJiYKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPWZvby5naXQKKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiBwcm90b2NvbD1odHRwcworCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJRU9GCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tLnVzZUh0dHBQYXRoIHRydWUgJiYKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSBmb28gYmFyIiA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJcGF0aD1mb28uZ2l0CisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPWZvby5naXQKKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1iYXIKKwktLQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogcHJvdG9jb2w9aHR0cHMKKwl2ZXJiYXRpbTogaG9zdD1leGFtcGxlLmNvbQorCXZlcmJhdGltOiBwYXRoPWZvby5naXQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29udGV4dCB1c2VzIHVybG1hdGNoJyAnCisJdGVzdF9jb25maWcgImNyZWRlbnRpYWwuaHR0cHM6Ly8qLm9yZy51c2VIdHRwUGF0aCIgdHJ1ZSAmJgorCWNoZWNrIGZpbGwgInZlcmJhdGltIGZvbyBiYXIiIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5vcmcKKwlwYXRoPWZvby5naXQKKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLm9yZworCXBhdGg9Zm9vLmdpdAorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiBwcm90b2NvbD1odHRwcworCXZlcmJhdGltOiBob3N0PWV4YW1wbGUub3JnCisJdmVyYmF0aW06IHBhdGg9Zm9vLmdpdAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoZWxwZXJzIGNhbiBhYm9ydCB0aGUgcHJvY2VzcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBcCisJCS1jIGNyZWRlbnRpYWwuaGVscGVyPXF1aXQgXAorCQktYyBjcmVkZW50aWFsLmhlbHBlcj0idmVyYmF0aW0gZm9vIGJhciIgXAorCQljcmVkZW50aWFsIGZpbGwgPnN0ZG91dCAyPnN0ZGVyciA8PC1cRU9GICYmCisJcHJvdG9jb2w9aHR0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwlFT0YKKwl0ZXN0X211c3RfYmVfZW1wdHkgc3Rkb3V0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXF1aXQ6IGdldAorCXF1aXQ6IHByb3RvY29sPWh0dHAKKwlxdWl0OiBob3N0PWV4YW1wbGUuY29tCisJZmF0YWw6IGNyZWRlbnRpYWwgaGVscGVyICdcJydxdWl0J1wnJyB0b2xkIHVzIHRvIHF1aXQKKwlFT0YKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBoZWxwZXIgc3BlYyByZXNldHMgaGVscGVyIGxpc3QnICcKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAidmVyYmF0aW0gZmlsZSBmaWxlIiAmJgorCWNoZWNrIGZpbGwgIiIgInZlcmJhdGltIGNtZGxpbmUgY21kbGluZSIgPDwtXEVPRgorCXByb3RvY29sPWh0dHAKKwlob3N0PWV4YW1wbGUuY29tCisJLS0KKwlwcm90b2NvbD1odHRwCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWNtZGxpbmUKKwlwYXNzd29yZD1jbWRsaW5lCisJLS0KKwl2ZXJiYXRpbTogZ2V0CisJdmVyYmF0aW06IHByb3RvY29sPWh0dHAKKwl2ZXJiYXRpbTogaG9zdD1leGFtcGxlLmNvbQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cmwgcGFyc2VyIHJlamVjdHMgZW1iZWRkZWQgbmV3bGluZXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY3JlZGVudGlhbCBmaWxsIDI+c3RkZXJyIDw8LVxFT0YgJiYKKwl1cmw9aHR0cHM6Ly9vbmUuZXhhbXBsZS5jb20/JTBhaG9zdD10d28uZXhhbXBsZS5jb20vCisJRU9GCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXdhcm5pbmc6IHVybCBjb250YWlucyBhIG5ld2xpbmUgaW4gaXRzIHBhdGggY29tcG9uZW50OiBodHRwczovL29uZS5leGFtcGxlLmNvbT8lMGFob3N0PXR3by5leGFtcGxlLmNvbS8KKwlmYXRhbDogY3JlZGVudGlhbCB1cmwgY2Fubm90IGJlIHBhcnNlZDogaHR0cHM6Ly9vbmUuZXhhbXBsZS5jb20/JTBhaG9zdD10d28uZXhhbXBsZS5jb20vCisJRU9GCisJdGVzdF9pMThuY21wIGV4cGVjdCBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9zdC1sZXNzIFVSTHMgYXJlIHBhcnNlZCBhcyBlbXB0eSBob3N0JyAnCisJY2hlY2sgZmlsbCAidmVyYmF0aW0gZm9vIGJhciIgPDwtXEVPRgorCXVybD1jZXJ0Oi8vL3BhdGgvdG8vY2VydC5wZW0KKwktLQorCXByb3RvY29sPWNlcnQKKwlob3N0PQorCXBhdGg9cGF0aC90by9jZXJ0LnBlbQorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiBwcm90b2NvbD1jZXJ0CisJdmVyYmF0aW06IGhvc3Q9CisJdmVyYmF0aW06IHBhdGg9cGF0aC90by9jZXJ0LnBlbQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVkZW50aWFsIHN5c3RlbSByZWZ1c2VzIHRvIHdvcmsgd2l0aCBtaXNzaW5nIGhvc3QnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY3JlZGVudGlhbCBmaWxsIDI+c3RkZXJyIDw8LVxFT0YgJiYKKwlwcm90b2NvbD1odHRwCisJRU9GCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZhdGFsOiByZWZ1c2luZyB0byB3b3JrIHdpdGggY3JlZGVudGlhbCBtaXNzaW5nIGhvc3QgZmllbGQKKwlFT0YKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVkZW50aWFsIHN5c3RlbSByZWZ1c2VzIHRvIHdvcmsgd2l0aCBtaXNzaW5nIHByb3RvY29sJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNyZWRlbnRpYWwgZmlsbCAyPnN0ZGVyciA8PC1cRU9GICYmCisJaG9zdD1leGFtcGxlLmNvbQorCUVPRgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmYXRhbDogcmVmdXNpbmcgdG8gd29yayB3aXRoIGNyZWRlbnRpYWwgbWlzc2luZyBwcm90b2NvbCBmaWVsZAorCUVPRgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgc3RkZXJyCisnCisKKyMgdXNhZ2U6IGNoZWNrX2hvc3RfYW5kX3BhdGggPHVybD4gPGV4cGVjdGVkLWhvc3Q+IDxleHBlY3RlZC1wYXRoPgorY2hlY2tfaG9zdF9hbmRfcGF0aCAoKSB7CisJIyB3ZSBhbHdheXMgcGFyc2UgdGhlIHBhdGggY29tcG9uZW50LCBidXQgd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBpdAorCSMgaXMgcGFzc2VkIHRvIHRoZSBoZWxwZXIKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLnVzZUhUVFBQYXRoIHRydWUgJiYKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSB1c2VyIHBhc3MiIDw8LUVPRgorCXVybD0kMQorCS0tCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PSQyCisJcGF0aD0kMworCXVzZXJuYW1lPXVzZXIKKwlwYXNzd29yZD1wYXNzCisJLS0KKwl2ZXJiYXRpbTogZ2V0CisJdmVyYmF0aW06IHByb3RvY29sPWh0dHBzCisJdmVyYmF0aW06IGhvc3Q9JDIKKwl2ZXJiYXRpbTogcGF0aD0kMworCUVPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cmwgcGFyc2VyIGhhbmRsZXMgYmFyZSBxdWVyeSBtYXJrZXInICcKKwljaGVja19ob3N0X2FuZF9wYXRoIGh0dHBzOi8vZXhhbXBsZS5jb20/Zm9vLmdpdCBleGFtcGxlLmNvbSA/Zm9vLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cmwgcGFyc2VyIGhhbmRsZXMgYmFyZSBmcmFnbWVudCBtYXJrZXInICcKKwljaGVja19ob3N0X2FuZF9wYXRoIGh0dHBzOi8vZXhhbXBsZS5jb20jZm9vLmdpdCBleGFtcGxlLmNvbSAiI2Zvby5naXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybCBwYXJzZXIgbm90IGNvbmZ1c2VkIGJ5IGVuY29kZWQgbWFya2VycycgJworCWNoZWNrX2hvc3RfYW5kX3BhdGggaHR0cHM6Ly9leGFtcGxlLmNvbSUyMyUzZiUyZi9mb28uZ2l0IFwKKwkJImV4YW1wbGUuY29tIz8vIiBmb28uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWRlbnRpYWwgY29uZmlnIHdpdGggcGFydGlhbCBVUkxzJyAnCisJZWNobyAiZWNobyBwYXNzd29yZD15ZXAiIHwgd3JpdGVfc2NyaXB0IGdpdC1jcmVkZW50aWFsLXllcCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgdXJsPWh0dHBzOi8vdXNlckBleGFtcGxlLmNvbS9yZXBvLmdpdCA+c3RkaW4gJiYKKwlmb3IgcGFydGlhbCBpbiBcCisJCWV4YW1wbGUuY29tIFwKKwkJdXNlckBleGFtcGxlLmNvbSBcCisJCWh0dHBzOi8vIFwKKwkJaHR0cHM6Ly9leGFtcGxlLmNvbSBcCisJCWh0dHBzOi8vZXhhbXBsZS5jb20vIFwKKwkJaHR0cHM6Ly91c2VyQGV4YW1wbGUuY29tIFwKKwkJaHR0cHM6Ly91c2VyQGV4YW1wbGUuY29tLyBcCisJCWh0dHBzOi8vZXhhbXBsZS5jb20vcmVwby5naXQgXAorCQlodHRwczovL3VzZXJAZXhhbXBsZS5jb20vcmVwby5naXQgXAorCQkvcmVwby5naXQKKwlkbworCQlnaXQgLWMgY3JlZGVudGlhbC4kcGFydGlhbC5oZWxwZXI9eWVwIFwKKwkJCWNyZWRlbnRpYWwgZmlsbCA8c3RkaW4gPnN0ZG91dCAmJgorCQlncmVwIHllcCBzdGRvdXQgfHwKKwkJcmV0dXJuIDEKKwlkb25lICYmCisKKwlmb3IgcGFydGlhbCBpbiBcCisJCWRvbnQudXNlLnRoaXMgXAorCQlodHRwOi8vIFwKKwkJL3JlcG8KKwlkbworCQlnaXQgLWMgY3JlZGVudGlhbC4kcGFydGlhbC5oZWxwZXI9eWVwIFwKKwkJCWNyZWRlbnRpYWwgZmlsbCA8c3RkaW4gPnN0ZG91dCAmJgorCQkhIGdyZXAgeWVwIHN0ZG91dCB8fAorCQlyZXR1cm4gMQorCWRvbmUgJiYKKworCWdpdCAtYyBjcmVkZW50aWFsLiRwYXJ0aWFsLmhlbHBlcj15ZXAgXAorCQktYyBjcmVkZW50aWFsLndpdGglMGFuZXdsaW5lLnVzZXJuYW1lPXVoLW9oIFwKKwkJY3JlZGVudGlhbCBmaWxsIDxzdGRpbiA+c3Rkb3V0IDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAic2tpcHBpbmcgY3JlZGVudGlhbCBsb29rdXAgZm9yIGtleSIgc3RkZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDMwMS1jcmVkZW50aWFsLWNhY2hlLnNoIGIvdC90MDMwMS1jcmVkZW50aWFsLWNhY2hlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmViZDVmYTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMzAxLWNyZWRlbnRpYWwtY2FjaGUuc2gKQEAgLTAsMCArMSwxMTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjcmVkZW50aWFsLWNhY2hlIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1jcmVkZW50aWFsLnNoCisKK3Rlc3QgLXogIiROT19VTklYX1NPQ0tFVFMiIHx8IHsKKwlza2lwX2FsbD0nc2tpcHBpbmcgY3JlZGVudGlhbC1jYWNoZSB0ZXN0cywgdW5peCBzb2NrZXRzIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCit9CisKKyMgZG9uJ3QgbGVhdmUgYSBzdGFsZSBkYWVtb24gcnVubmluZwordGVzdF9hdGV4aXQgJ2dpdCBjcmVkZW50aWFsLWNhY2hlIGV4aXQnCisKKyMgdGVzdCB0aGF0IHRoZSBkYWVtb24gd29ya3Mgd2l0aCBubyBzcGVjaWFsIHNldHVwCitoZWxwZXJfdGVzdCBjYWNoZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzb2NrZXQgZGVmYXVsdHMgdG8gfi8uY2FjaGUvZ2l0L2NyZWRlbnRpYWwvc29ja2V0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICIKKwkJZ2l0IGNyZWRlbnRpYWwtY2FjaGUgZXhpdCAmJgorCQlybWRpciAtcCAuY2FjaGUvZ2l0L2NyZWRlbnRpYWwvCisJIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICIkSE9NRS8uZ2l0LWNyZWRlbnRpYWwtY2FjaGUiICYmCisJdGVzdCAtUyAiJEhPTUUvLmNhY2hlL2dpdC9jcmVkZW50aWFsL3NvY2tldCIKKycKKworWERHX0NBQ0hFX0hPTUU9IiRIT01FL3hkZyIKK2V4cG9ydCBYREdfQ0FDSEVfSE9NRQorIyB0ZXN0IGJlaGF2aW9yIHdoZW4gWERHX0NBQ0hFX0hPTUUgaXMgc2V0CitoZWxwZXJfdGVzdCBjYWNoZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ1c2UgY3VzdG9tIFhER19DQUNIRV9IT01FIGlmIHNldCBhbmQgZGVmYXVsdCBzb2NrZXRzIGFyZSBub3QgY3JlYXRlZCIgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNyZWRlbnRpYWwtY2FjaGUgZXhpdCIgJiYKKwl0ZXN0IC1TICIkWERHX0NBQ0hFX0hPTUUvZ2l0L2NyZWRlbnRpYWwvc29ja2V0IiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICIkSE9NRS8uZ2l0LWNyZWRlbnRpYWwtY2FjaGUvc29ja2V0IiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICIkSE9NRS8uY2FjaGUvZ2l0L2NyZWRlbnRpYWwvc29ja2V0IgorJwordW5zZXQgWERHX0NBQ0hFX0hPTUUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlZGVudGlhbC1jYWNoZSAtLXNvY2tldCBvcHRpb24gb3ZlcnJpZGVzIGRlZmF1bHQgbG9jYXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIgorCQlnaXQgY3JlZGVudGlhbC1jYWNoZSBleGl0IC0tc29ja2V0IFwiXCRIT01FL2Rpci9zb2NrZXRcIiAmJgorCQlybWRpciBcIlwkSE9NRS9kaXJcIgorCSIgJiYKKwljaGVjayBhcHByb3ZlICJjYWNoZSAtLXNvY2tldCBcIlwkSE9NRS9kaXIvc29ja2V0XCIiIDw8LVxFT0YgJiYKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1zdG9yZS11c2VyCisJcGFzc3dvcmQ9c3RvcmUtcGFzcworCUVPRgorCXRlc3QgLVMgIiRIT01FL2Rpci9zb2NrZXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInVzZSBjdXN0b20gWERHX0NBQ0hFX0hPTUUgZXZlbiBpZiB4ZGcgc29ja2V0IGV4aXN0cyIgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiCisJCWdpdCBjcmVkZW50aWFsLWNhY2hlIGV4aXQgJiYKKwkJc2FuZV91bnNldCBYREdfQ0FDSEVfSE9NRQorCSIgJiYKKwljaGVjayBhcHByb3ZlIGNhY2hlIDw8LVxFT0YgJiYKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1zdG9yZS11c2VyCisJcGFzc3dvcmQ9c3RvcmUtcGFzcworCUVPRgorCXRlc3QgLVMgIiRIT01FLy5jYWNoZS9naXQvY3JlZGVudGlhbC9zb2NrZXQiICYmCisJWERHX0NBQ0hFX0hPTUU9IiRIT01FL3hkZyIgJiYKKwlleHBvcnQgWERHX0NBQ0hFX0hPTUUgJiYKKwljaGVjayBhcHByb3ZlIGNhY2hlIDw8LVxFT0YgJiYKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1zdG9yZS11c2VyCisJcGFzc3dvcmQ9c3RvcmUtcGFzcworCUVPRgorCXRlc3QgLVMgIiRYREdfQ0FDSEVfSE9NRS9naXQvY3JlZGVudGlhbC9zb2NrZXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSB1c2VyIHNvY2tldCBpZiB1c2VyIGRpcmVjdG9yeSBleGlzdHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIgorCQlnaXQgY3JlZGVudGlhbC1jYWNoZSBleGl0ICYmCisJCXJtZGlyIFwiXCRIT01FLy5naXQtY3JlZGVudGlhbC1jYWNoZS9cIgorCSIgJiYKKwlta2RpciAtcCAtbSA3MDAgIiRIT01FLy5naXQtY3JlZGVudGlhbC1jYWNoZS8iICYmCisJY2hlY2sgYXBwcm92ZSBjYWNoZSA8PC1cRU9GICYmCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9c3RvcmUtdXNlcgorCXBhc3N3b3JkPXN0b3JlLXBhc3MKKwlFT0YKKwl0ZXN0IC1TICIkSE9NRS8uZ2l0LWNyZWRlbnRpYWwtY2FjaGUvc29ja2V0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICd1c2UgdXNlciBzb2NrZXQgaWYgdXNlciBkaXJlY3RvcnkgaXMgYSBzeW1saW5rIHRvIGEgZGlyZWN0b3J5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICIKKwkJZ2l0IGNyZWRlbnRpYWwtY2FjaGUgZXhpdCAmJgorCQlybWRpciBcIlwkSE9NRS9kaXIvXCIgJiYKKwkJcm0gXCJcJEhPTUUvLmdpdC1jcmVkZW50aWFsLWNhY2hlXCIKKwkiICYmCisJbWtkaXIgLXAgLW0gNzAwICIkSE9NRS9kaXIvIiAmJgorCWxuIC1zICIkSE9NRS9kaXIiICIkSE9NRS8uZ2l0LWNyZWRlbnRpYWwtY2FjaGUiICYmCisJY2hlY2sgYXBwcm92ZSBjYWNoZSA8PC1cRU9GICYmCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9c3RvcmUtdXNlcgorCXBhc3N3b3JkPXN0b3JlLXBhc3MKKwlFT0YKKwl0ZXN0IC1TICIkSE9NRS8uZ2l0LWNyZWRlbnRpYWwtY2FjaGUvc29ja2V0IgorJworCitoZWxwZXJfdGVzdF90aW1lb3V0IGNhY2hlIC0tdGltZW91dD0xCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDMwMi1jcmVkZW50aWFsLXN0b3JlLnNoIGIvdC90MDMwMi1jcmVkZW50aWFsLXN0b3JlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcxNmJmMWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMzAyLWNyZWRlbnRpYWwtc3RvcmUuc2gKQEAgLTAsMCArMSwyMTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjcmVkZW50aWFsLXN0b3JlIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1jcmVkZW50aWFsLnNoCisKK2hlbHBlcl90ZXN0IHN0b3JlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doZW4geGRnIGZpbGUgZG9lcyBub3QgZXhpc3QsIHhkZyBmaWxlIG5vdCBjcmVhdGVkJyAnCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgIiRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzIiAmJgorCXRlc3QgLXMgIiRIT01FLy5naXQtY3JlZGVudGlhbHMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHhkZyBmaWxlJyAnCisJcm0gLWYgIiRIT01FLy5naXQtY3JlZGVudGlhbHMiICYmCisJbWtkaXIgLXAgIiRIT01FLy5jb25maWcvZ2l0IiAmJgorCT4iJEhPTUUvLmNvbmZpZy9naXQvY3JlZGVudGlhbHMiCisnCisKK2hlbHBlcl90ZXN0IHN0b3JlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doZW4geGRnIGZpbGUgZXhpc3RzLCBob21lIGZpbGUgbm90IGNyZWF0ZWQnICcKKwl0ZXN0IC1zICIkSE9NRS8uY29uZmlnL2dpdC9jcmVkZW50aWFscyIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJEhPTUUvLmdpdC1jcmVkZW50aWFscyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY3VzdG9tIHhkZyBmaWxlJyAnCisJcm0gLWYgIiRIT01FLy5naXQtY3JlZGVudGlhbHMiICYmCisJcm0gLWYgIiRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzIiAmJgorCW1rZGlyIC1wICIkSE9NRS94ZGcvZ2l0IiAmJgorCT4iJEhPTUUveGRnL2dpdC9jcmVkZW50aWFscyIKKycKKworWERHX0NPTkZJR19IT01FPSIkSE9NRS94ZGciCitleHBvcnQgWERHX0NPTkZJR19IT01FCitoZWxwZXJfdGVzdCBzdG9yZQordW5zZXQgWERHX0NPTkZJR19IT01FCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lmIGN1c3RvbSB4ZGcgZmlsZSBleGlzdHMsIGhvbWUgYW5kIHhkZyBmaWxlcyBub3QgY3JlYXRlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCIkSE9NRS94ZGcvZ2l0L2NyZWRlbnRpYWxzXCIiICYmCisJdGVzdCAtcyAiJEhPTUUveGRnL2dpdC9jcmVkZW50aWFscyIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJEhPTUUvLmdpdC1jcmVkZW50aWFscyIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJEhPTUUvLmNvbmZpZy9naXQvY3JlZGVudGlhbHMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldDogdXNlIGhvbWUgZmlsZSBpZiBib3RoIGhvbWUgYW5kIHhkZyBmaWxlcyBoYXZlIG1hdGNoZXMnICcKKwllY2hvICJodHRwczovL2hvbWUtdXNlcjpob21lLXBhc3NAZXhhbXBsZS5jb20iID4iJEhPTUUvLmdpdC1jcmVkZW50aWFscyIgJiYKKwlta2RpciAtcCAiJEhPTUUvLmNvbmZpZy9naXQiICYmCisJZWNobyAiaHR0cHM6Ly94ZGctdXNlcjp4ZGctcGFzc0BleGFtcGxlLmNvbSIgPiIkSE9NRS8uY29uZmlnL2dpdC9jcmVkZW50aWFscyIgJiYKKwljaGVjayBmaWxsIHN0b3JlIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWhvbWUtdXNlcgorCXBhc3N3b3JkPWhvbWUtcGFzcworCS0tCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldDogdXNlIHhkZyBmaWxlIGlmIGhvbWUgZmlsZSBoYXMgbm8gbWF0Y2hlcycgJworCT4iJEhPTUUvLmdpdC1jcmVkZW50aWFscyIgJiYKKwlta2RpciAtcCAiJEhPTUUvLmNvbmZpZy9naXQiICYmCisJZWNobyAiaHR0cHM6Ly94ZGctdXNlcjp4ZGctcGFzc0BleGFtcGxlLmNvbSIgPiIkSE9NRS8uY29uZmlnL2dpdC9jcmVkZW50aWFscyIgJiYKKwljaGVjayBmaWxsIHN0b3JlIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPXhkZy11c2VyCisJcGFzc3dvcmQ9eGRnLXBhc3MKKwktLQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ2dldDogdXNlIHhkZyBmaWxlIGlmIGhvbWUgZmlsZSBpcyB1bnJlYWRhYmxlJyAnCisJZWNobyAiaHR0cHM6Ly9ob21lLXVzZXI6aG9tZS1wYXNzQGV4YW1wbGUuY29tIiA+IiRIT01FLy5naXQtY3JlZGVudGlhbHMiICYmCisJY2htb2QgLXIgIiRIT01FLy5naXQtY3JlZGVudGlhbHMiICYmCisJbWtkaXIgLXAgIiRIT01FLy5jb25maWcvZ2l0IiAmJgorCWVjaG8gImh0dHBzOi8veGRnLXVzZXI6eGRnLXBhc3NAZXhhbXBsZS5jb20iID4iJEhPTUUvLmNvbmZpZy9naXQvY3JlZGVudGlhbHMiICYmCisJY2hlY2sgZmlsbCBzdG9yZSA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT14ZGctdXNlcgorCXBhc3N3b3JkPXhkZy1wYXNzCisJLS0KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RvcmU6IGlmIGJvdGggeGRnIGFuZCBob21lIGZpbGVzIGV4aXN0LCBvbmx5IHN0b3JlIGluIGhvbWUgZmlsZScgJworCT4iJEhPTUUvLmdpdC1jcmVkZW50aWFscyIgJiYKKwlta2RpciAtcCAiJEhPTUUvLmNvbmZpZy9naXQiICYmCisJPiIkSE9NRS8uY29uZmlnL2dpdC9jcmVkZW50aWFscyIgJiYKKwljaGVjayBhcHByb3ZlIHN0b3JlIDw8LVxFT0YgJiYKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1zdG9yZS11c2VyCisJcGFzc3dvcmQ9c3RvcmUtcGFzcworCUVPRgorCWVjaG8gImh0dHBzOi8vc3RvcmUtdXNlcjpzdG9yZS1wYXNzQGV4YW1wbGUuY29tIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJEhPTUUvLmdpdC1jcmVkZW50aWFscyIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgIiRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcmFzZTogZXJhc2UgbWF0Y2hpbmcgY3JlZGVudGlhbHMgZnJvbSBib3RoIHhkZyBhbmQgaG9tZSBmaWxlcycgJworCWVjaG8gImh0dHBzOi8vaG9tZS11c2VyOmhvbWUtcGFzc0BleGFtcGxlLmNvbSIgPiIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCW1rZGlyIC1wICIkSE9NRS8uY29uZmlnL2dpdCIgJiYKKwllY2hvICJodHRwczovL3hkZy11c2VyOnhkZy1wYXNzQGV4YW1wbGUuY29tIiA+IiRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzIiAmJgorCWNoZWNrIHJlamVjdCBzdG9yZSA8PC1cRU9GICYmCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJRU9GCisJdGVzdF9tdXN0X2JlX2VtcHR5ICIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSAiJEhPTUUvLmNvbmZpZy9naXQvY3JlZGVudGlhbHMiCisnCisKK2ludmFsaWRfY3JlZGVudGlhbF90ZXN0KCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdldDogaWdub3JlIGNyZWRlbnRpYWxzIHdpdGhvdXQgJDEgYXMgaW52YWxpZCIgJworCQllY2hvICIkMiIgPiIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCQljaGVjayBmaWxsIHN0b3JlIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPWFza3Bhc3MtdXNlcm5hbWUKKwkJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCQktLQorCQlhc2twYXNzOiBVc2VybmFtZSBmb3IgJ1wnJ2h0dHBzOi8vZXhhbXBsZS5jb20nXCcnOgorCQlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHBzOi8vYXNrcGFzcy11c2VybmFtZUBleGFtcGxlLmNvbSdcJyc6CisJCS0tCisJCUVPRgorCScKK30KKworaW52YWxpZF9jcmVkZW50aWFsX3Rlc3QgInNjaGVtZSIgOi8vdXNlcjpwYXNzQGV4YW1wbGUuY29tCitpbnZhbGlkX2NyZWRlbnRpYWxfdGVzdCAidmFsaWQgaG9zdC9wYXRoIiBodHRwczovL3VzZXI6cGFzc0AKK2ludmFsaWRfY3JlZGVudGlhbF90ZXN0ICJ1c2VybmFtZS9wYXNzd29yZCIgaHR0cHM6Ly9wYXNzQGV4YW1wbGUuY29tCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldDogY3JlZGVudGlhbHMgd2l0aCBET1MgbGluZSBlbmRpbmdzIGFyZSBpbnZhbGlkJyAnCisJcHJpbnRmICJodHRwczovL3VzZXI6cGFzc0BleGFtcGxlLmNvbVxyXG4iID4iJEhPTUUvLmdpdC1jcmVkZW50aWFscyIgJiYKKwljaGVjayBmaWxsIHN0b3JlIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWFza3Bhc3MtdXNlcm5hbWUKKwlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJLS0KKwlhc2twYXNzOiBVc2VybmFtZSBmb3IgJ1wnJ2h0dHBzOi8vZXhhbXBsZS5jb20nXCcnOgorCWFza3Bhc3M6IFBhc3N3b3JkIGZvciAnXCcnaHR0cHM6Ly9hc2twYXNzLXVzZXJuYW1lQGV4YW1wbGUuY29tJ1wnJzoKKwktLQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQ6IGNyZWRlbnRpYWxzIHdpdGggcGF0aCBhbmQgRE9TIGxpbmUgZW5kaW5ncyBhcmUgdmFsaWQnICcKKwlwcmludGYgImh0dHBzOi8vdXNlcjpwYXNzQGV4YW1wbGUuY29tL3JlcG8uZ2l0XHJcbiIgPiIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCWNoZWNrIGZpbGwgc3RvcmUgPDwtXEVPRgorCXVybD1odHRwczovL2V4YW1wbGUuY29tL3JlcG8uZ2l0CisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT11c2VyCisJcGFzc3dvcmQ9cGFzcworCS0tCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldDogY3JlZGVudGlhbHMgd2l0aCBET1MgbGluZSBlbmRpbmdzIGFyZSBpbnZhbGlkIGlmIHBhdGggaXMgcmVsZXZhbnQnICcKKwlwcmludGYgImh0dHBzOi8vdXNlcjpwYXNzQGV4YW1wbGUuY29tL3JlcG8uZ2l0XHJcbiIgPiIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwudXNlSHR0cFBhdGggdHJ1ZSAmJgorCWNoZWNrIGZpbGwgc3RvcmUgPDwtXEVPRgorCXVybD1odHRwczovL2V4YW1wbGUuY29tL3JlcG8uZ2l0CisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPXJlcG8uZ2l0CisJdXNlcm5hbWU9YXNrcGFzcy11c2VybmFtZQorCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwktLQorCWFza3Bhc3M6IFVzZXJuYW1lIGZvciAnXCcnaHR0cHM6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdCdcJyc6CisJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwczovL2Fza3Bhc3MtdXNlcm5hbWVAZXhhbXBsZS5jb20vcmVwby5naXQnXCcnOgorCS0tCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldDogc3RvcmUgZmlsZSBjYW4gY29udGFpbiBlbXB0eS9ib2d1cyBsaW5lcycgJworCWVjaG8gIiIgPiIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCXFfdG9fdGFiIDw8LVxDUkVERU5USUFMID4+IiRIT01FLy5naXQtY3JlZGVudGlhbHMiICYmCisJI2NvbW1lbnQKKwlRCisJaHR0cHM6Ly91c2VyOnBhc3NAZXhhbXBsZS5jb20KKwlDUkVERU5USUFMCisJY2hlY2sgZmlsbCBzdG9yZSA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT11c2VyCisJcGFzc3dvcmQ9cGFzcworCS0tCisJRU9GCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDMwMy1jcmVkZW50aWFsLWV4dGVybmFsLnNoIGIvdC90MDMwMy1jcmVkZW50aWFsLWV4dGVybmFsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwMjhmZDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMzAzLWNyZWRlbnRpYWwtZXh0ZXJuYWwuc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2V4dGVybmFsIGNyZWRlbnRpYWwgaGVscGVyIHRlc3RzCisKK1RoaXMgaXMgYSB0b29sIGZvciBhdXRob3JzIG9mIGV4dGVybmFsIGhlbHBlciB0b29scyB0byBzYW5pdHktY2hlY2sKK3RoZWlyIGhlbHBlcnMuIElmIHlvdSBoYXZlIHdyaXR0ZW4gdGhlICJnaXQtY3JlZGVudGlhbC1mb28iIGhlbHBlciwKK3lvdSBjaGVjayBpdCB3aXRoOgorCisgIG1ha2UgR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVI9Zm9vIHQwMzAzLWNyZWRlbnRpYWwtZXh0ZXJuYWwuc2gKKworVGhpcyBhc3N1bWVzIHRoYXQgeW91ciBoZWxwZXIgaXMgY2FwYWJsZSBvZiBib3RoIHN0b3JpbmcgYW5kCityZXRyaWV2aW5nIGNyZWRlbnRpYWxzIChzb21lIGhlbHBlcnMgbWF5IGJlIHJlYWQtb25seSwgYW5kIHRoZXkgd2lsbAorZmFpbCB0aGVzZSB0ZXN0cykuCisKK1BsZWFzZSBub3RlIHRoYXQgdGhlIGluZGl2aWR1YWwgdGVzdHMgZG8gbm90IHZlcmlmeSBhbGwgb2YgdGhlCitwcmVjb25kaXRpb25zIHRoZW1zZWx2ZXMsIGJ1dCByYXRoZXIgYnVpbGQgb24gZWFjaCBvdGhlci4gQSBmYWlsaW5nCit0ZXN0IG1lYW5zIHRoYXQgdGVzdHMgbGF0ZXIgaW4gdGhlIHNlcXVlbmNlIGNhbiByZXR1cm4gZmFsc2UgIk9LIgorcmVzdWx0cy4KKworSWYgeW91ciBoZWxwZXIgc3VwcG9ydHMgdGltZS1iYXNlZCBleHBpcmF0aW9uIHdpdGggYSBjb25maWd1cmFibGUKK3RpbWVvdXQsIHlvdSBjYW4gdGVzdCB0aGF0IGZlYXR1cmUgd2l0aDoKKworICBtYWtlIEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSPWZvbyBcCisgICAgICAgR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVJfVElNRU9VVD0iZm9vIC0tdGltZW91dD0xIiBcCisgICAgICAgdDAzMDMtY3JlZGVudGlhbC1leHRlcm5hbC5zaAorCitJZiB5b3VyIGhlbHBlciByZXF1aXJlcyBhZGRpdGlvbmFsIHNldHVwIGJlZm9yZSB0aGUgdGVzdHMgYXJlIHN0YXJ0ZWQsCit5b3UgY2FuIHNldCBHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUl9TRVRVUCB0byBhIHNlcXVlbmNlIG9mIHNoZWxsCitjb21tYW5kcy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1jcmVkZW50aWFsLnNoCisKK2lmIHRlc3QgLXogIiRHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUiI7IHRoZW4KKwlza2lwX2FsbD0idXNlZCB0byB0ZXN0IGV4dGVybmFsIGNyZWRlbnRpYWwgaGVscGVycyIKKwl0ZXN0X2RvbmUKK2ZpCisKK3Rlc3QgLXogIiRHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUl9TRVRVUCIgfHwKKwlldmFsICIkR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVJfU0VUVVAiCisKKyMgY2xlYW4gYmVmb3JlIHRoZSB0ZXN0IGluIGNhc2UgdGhlcmUgaXMgY3J1ZnQgbGVmdAorIyBvdmVyIGZyb20gYSBwcmV2aW91cyBydW4gdGhhdCB3b3VsZCBpbXBhY3QgcmVzdWx0cworaGVscGVyX3Rlc3RfY2xlYW4gIiRHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUiIKKworaGVscGVyX3Rlc3QgIiRHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUiIKKworaWYgdGVzdCAteiAiJEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSX1RJTUVPVVQiOyB0aGVuCisJc2F5ICIjIHNraXBwaW5nIHRpbWVvdXQgdGVzdHMgKEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSX1RJTUVPVVQgbm90IHNldCkiCitlbHNlCisJaGVscGVyX3Rlc3RfdGltZW91dCAiJEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSX1RJTUVPVVQiCitmaQorCisjIGNsZWFuIGFmdGVyd2FyZHMgc28gdGhhdCB3ZSBhcmUgZ29vZCBjaXRpemVucworIyBhbmQgZG9uJ3QgbGVhdmUgY3J1ZnQgaW4gdGhlIGhlbHBlcidzIHN0b3JhZ2UsIHdoaWNoCisjIG1pZ2h0IGJlIGxvbmctdGVybSBzeXN0ZW0gc3RvcmFnZQoraGVscGVyX3Rlc3RfY2xlYW4gIiRHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUiIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwNDEwLXBhcnRpYWwtY2xvbmUuc2ggYi90L3QwNDEwLXBhcnRpYWwtY2xvbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTM5ODhiZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDA0MTAtcGFydGlhbC1jbG9uZS5zaApAQCAtMCwwICsxLDYwMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BhcnRpYWwgY2xvbmUnCisKKy4gLi90ZXN0LWxpYi5zaAorCitkZWxldGVfb2JqZWN0ICgpIHsKKwlybSAkMS8uZ2l0L29iamVjdHMvJChlY2hvICQyIHwgc2VkIC1lICdzfF4uLnwmL3wnKQorfQorCitwYWNrX2FzX2Zyb21fcHJvbWlzb3IgKCkgeworCUhBU0g9JChnaXQgLUMgcmVwbyBwYWNrLW9iamVjdHMgLmdpdC9vYmplY3RzL3BhY2svcGFjaykgJiYKKwk+cmVwby8uZ2l0L29iamVjdHMvcGFjay9wYWNrLSRIQVNILnByb21pc29yICYmCisJZWNobyAkSEFTSAorfQorCitwcm9taXNlX2FuZF9kZWxldGUgKCkgeworCUhBU0g9JChnaXQgLUMgcmVwbyByZXYtcGFyc2UgIiQxIikgJiYKKwlnaXQgLUMgcmVwbyB0YWcgLWEgLW0gbWVzc2FnZSBteV9hbm5vdGF0ZWRfdGFnICIkSEFTSCIgJiYKKwlnaXQgLUMgcmVwbyByZXYtcGFyc2UgbXlfYW5ub3RhdGVkX3RhZyB8IHBhY2tfYXNfZnJvbV9wcm9taXNvciAmJgorCSMgdGFnIC1kIHByaW50cyBhIG1lc3NhZ2UgdG8gc3Rkb3V0LCBzbyByZWRpcmVjdCBpdAorCWdpdCAtQyByZXBvIHRhZyAtZCBteV9hbm5vdGF0ZWRfdGFnID4vZGV2L251bGwgJiYKKwlkZWxldGVfb2JqZWN0IHJlcG8gIiRIQVNIIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRlbnNpb25zLnBhcnRpYWxjbG9uZSB3aXRob3V0IGZpbHRlcicgJworCXRlc3RfY3JlYXRlX3JlcG8gc2VydmVyICYmCisJZ2l0IGNsb25lIC0tZmlsdGVyPSJibG9iOm5vbmUiICJmaWxlOi8vJChwd2QpL3NlcnZlciIgY2xpZW50ICYmCisJZ2l0IC1DIGNsaWVudCBjb25maWcgLS11bnNldCByZW1vdGUub3JpZ2luLnBhcnRpYWxjbG9uZWZpbHRlciAmJgorCWdpdCAtQyBjbGllbnQgZmV0Y2ggb3JpZ2luCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgcmVmbG9nIG9iamVjdCwgYnV0IHByb21pc2VkIGJ5IGEgY29tbWl0LCBwYXNzZXMgZnNjaycgJworCXJtIC1yZiByZXBvICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBteV9jb21taXQgJiYKKworCUE9JChnaXQgLUMgcmVwbyBjb21taXQtdHJlZSAtbSBhIEhFQURee3RyZWV9KSAmJgorCUM9JChnaXQgLUMgcmVwbyBjb21taXQtdHJlZSAtbSBjIC1wICRBIEhFQURee3RyZWV9KSAmJgorCisJIyBSZWZlcmVuY2UgJEEgb25seSBmcm9tIHJlZmxvZywgYW5kIGRlbGV0ZSBpdAorCWdpdCAtQyByZXBvIGJyYW5jaCBteV9icmFuY2ggIiRBIiAmJgorCWdpdCAtQyByZXBvIGJyYW5jaCAtZiBteV9icmFuY2ggbXlfY29tbWl0ICYmCisJZGVsZXRlX29iamVjdCByZXBvICIkQSIgJiYKKworCSMgU3RhdGUgdGhhdCB3ZSBnb3QgJEMsIHdoaWNoIHJlZmVycyB0byAkQSwgZnJvbSBwcm9taXNvcgorCXByaW50ZiAiJENcbiIgfCBwYWNrX2FzX2Zyb21fcHJvbWlzb3IgJiYKKworCSMgTm9ybWFsbHksIGl0IGZhaWxzCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHJlcG8gZnNjayAmJgorCisJIyBCdXQgd2l0aCB0aGUgZXh0ZW5zaW9uLCBpdCBzdWNjZWVkcworCWdpdCAtQyByZXBvIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDEgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgImFyYml0cmFyeSBzdHJpbmciICYmCisJZ2l0IC1DIHJlcG8gZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIHJlZmxvZyBvYmplY3QsIGJ1dCBwcm9taXNlZCBieSBhIHRhZywgcGFzc2VzIGZzY2snICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gbXlfY29tbWl0ICYmCisKKwlBPSQoZ2l0IC1DIHJlcG8gY29tbWl0LXRyZWUgLW0gYSBIRUFEXnt0cmVlfSkgJiYKKwlnaXQgLUMgcmVwbyB0YWcgLWEgLW0gZCBteV90YWdfbmFtZSAkQSAmJgorCVQ9JChnaXQgLUMgcmVwbyByZXYtcGFyc2UgbXlfdGFnX25hbWUpICYmCisJZ2l0IC1DIHJlcG8gdGFnIC1kIG15X3RhZ19uYW1lICYmCisKKwkjIFJlZmVyZW5jZSAkQSBvbmx5IGZyb20gcmVmbG9nLCBhbmQgZGVsZXRlIGl0CisJZ2l0IC1DIHJlcG8gYnJhbmNoIG15X2JyYW5jaCAiJEEiICYmCisJZ2l0IC1DIHJlcG8gYnJhbmNoIC1mIG15X2JyYW5jaCBteV9jb21taXQgJiYKKwlkZWxldGVfb2JqZWN0IHJlcG8gIiRBIiAmJgorCisJIyBTdGF0ZSB0aGF0IHdlIGdvdCAkVCwgd2hpY2ggcmVmZXJzIHRvICRBLCBmcm9tIHByb21pc29yCisJcHJpbnRmICIkVFxuIiB8IHBhY2tfYXNfZnJvbV9wcm9taXNvciAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAiYXJiaXRyYXJ5IHN0cmluZyIgJiYKKwlnaXQgLUMgcmVwbyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgcmVmbG9nIG9iamVjdCBhbG9uZSBmYWlscyBmc2NrLCBldmVuIHdpdGggZXh0ZW5zaW9uIHNldCcgJworCXJtIC1yZiByZXBvICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBteV9jb21taXQgJiYKKworCUE9JChnaXQgLUMgcmVwbyBjb21taXQtdHJlZSAtbSBhIEhFQURee3RyZWV9KSAmJgorCUI9JChnaXQgLUMgcmVwbyBjb21taXQtdHJlZSAtbSBiIEhFQURee3RyZWV9KSAmJgorCisJIyBSZWZlcmVuY2UgJEEgb25seSBmcm9tIHJlZmxvZywgYW5kIGRlbGV0ZSBpdAorCWdpdCAtQyByZXBvIGJyYW5jaCBteV9icmFuY2ggIiRBIiAmJgorCWdpdCAtQyByZXBvIGJyYW5jaCAtZiBteV9icmFuY2ggbXlfY29tbWl0ICYmCisJZGVsZXRlX29iamVjdCByZXBvICIkQSIgJiYKKworCWdpdCAtQyByZXBvIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDEgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgImFyYml0cmFyeSBzdHJpbmciICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHJlcG8gZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIHJlZiBvYmplY3QsIGJ1dCBwcm9taXNlZCwgcGFzc2VzIGZzY2snICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gbXlfY29tbWl0ICYmCisKKwlBPSQoZ2l0IC1DIHJlcG8gY29tbWl0LXRyZWUgLW0gYSBIRUFEXnt0cmVlfSkgJiYKKworCSMgUmVmZXJlbmNlICRBIG9ubHkgZnJvbSByZWYKKwlnaXQgLUMgcmVwbyBicmFuY2ggbXlfYnJhbmNoICIkQSIgJiYKKwlwcm9taXNlX2FuZF9kZWxldGUgIiRBIiAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAiYXJiaXRyYXJ5IHN0cmluZyIgJiYKKwlnaXQgLUMgcmVwbyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3Npbmcgb2JqZWN0LCBidXQgcHJvbWlzZWQsIHBhc3NlcyBmc2NrJyAnCisJcm0gLXJmIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlcG8gJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIDEgJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIDIgJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIDMgJiYKKwlnaXQgLUMgcmVwbyB0YWcgLWEgYW5ub3RhdGVkX3RhZyAtbSAiYW5ub3RhdGVkIHRhZyIgJiYKKworCUM9JChnaXQgLUMgcmVwbyByZXYtcGFyc2UgMSkgJiYKKwlUPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIDJee3RyZWV9KSAmJgorCUI9JChnaXQgaGFzaC1vYmplY3QgcmVwby8zLnQpICYmCisJQVQ9JChnaXQgLUMgcmVwbyByZXYtcGFyc2UgYW5ub3RhdGVkX3RhZykgJiYKKworCXByb21pc2VfYW5kX2RlbGV0ZSAiJEMiICYmCisJcHJvbWlzZV9hbmRfZGVsZXRlICIkVCIgJiYKKwlwcm9taXNlX2FuZF9kZWxldGUgIiRCIiAmJgorCXByb21pc2VfYW5kX2RlbGV0ZSAiJEFUIiAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAiYXJiaXRyYXJ5IHN0cmluZyIgJiYKKwlnaXQgLUMgcmVwbyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgQ0xJIG9iamVjdCwgYnV0IHByb21pc2VkLCBwYXNzZXMgZnNjaycgJworCXJtIC1yZiByZXBvICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBteV9jb21taXQgJiYKKworCUE9JChnaXQgLUMgcmVwbyBjb21taXQtdHJlZSAtbSBhIEhFQURee3RyZWV9KSAmJgorCXByb21pc2VfYW5kX2RlbGV0ZSAiJEEiICYmCisKKwlnaXQgLUMgcmVwbyBjb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiAxICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIGV4dGVuc2lvbnMucGFydGlhbGNsb25lICJhcmJpdHJhcnkgc3RyaW5nIiAmJgorCWdpdCAtQyByZXBvIGZzY2sgIiRBIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyBvZiBtaXNzaW5nIG9iamVjdHMnICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gc2VydmVyICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIGZvbyAmJgorCWdpdCAtQyBzZXJ2ZXIgcmVwYWNrIC1hIC1kIC0td3JpdGUtYml0bWFwLWluZGV4ICYmCisKKwlnaXQgY2xvbmUgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiByZXBvICYmCisJSEFTSD0kKGdpdCAtQyByZXBvIHJldi1wYXJzZSBmb28pICYmCisJcm0gLXJmIHJlcG8vLmdpdC9vYmplY3RzLyogJiYKKworCWdpdCAtQyByZXBvIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDEgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgIm9yaWdpbiIgJiYKKwlnaXQgLUMgcmVwbyBjYXQtZmlsZSAtcCAiJEhBU0giICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSAucHJvbWlzb3IgZmlsZSBpcyB3cml0dGVuLCBhbmQgY2hlY2sgdGhhdCBpdHMKKwkjIGFzc29jaWF0ZWQgcGFja2ZpbGUgY29udGFpbnMgdGhlIG9iamVjdAorCWxzIHJlcG8vLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLnByb21pc29yID5wcm9taXNvcmxpc3QgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHByb21pc29ybGlzdCAmJgorCUlEWD0kKHNlZCAicy9wcm9taXNvciQvaWR4LyIgcHJvbWlzb3JsaXN0KSAmJgorCWdpdCB2ZXJpZnktcGFjayAtLXZlcmJvc2UgIiRJRFgiID5vdXQgJiYKKwlncmVwICIkSEFTSCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIG9mIG1pc3Npbmcgb2JqZWN0cyB3b3JrcyB3aXRoIHJlZi1pbi13YW50IGVuYWJsZWQnICcKKwkjIHJlZi1pbi13YW50IHJlcXVpcmVzIHByb3RvY29sIHZlcnNpb24gMgorCWdpdCAtQyBzZXJ2ZXIgY29uZmlnIHByb3RvY29sLnZlcnNpb24gMiAmJgorCWdpdCAtQyBzZXJ2ZXIgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dyZWZpbndhbnQgMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBwcm90b2NvbC52ZXJzaW9uIDIgJiYKKworCXJtIC1yZiByZXBvLy5naXQvb2JqZWN0cy8qICYmCisJcm0gLWYgdHJhY2UgJiYKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyByZXBvIGNhdC1maWxlIC1wICIkSEFTSCIgJiYKKwlncmVwICJnaXQ8IGZldGNoPS4qcmVmLWluLXdhbnQiIHRyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIG9mIG1pc3Npbmcgb2JqZWN0cyBmcm9tIGFub3RoZXIgcHJvbWlzb3IgcmVtb3RlJyAnCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpL3NlcnZlciIgc2VydmVyMiAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlcjIgYmFyICYmCisJZ2l0IC1DIHNlcnZlcjIgcmVwYWNrIC1hIC1kIC0td3JpdGUtYml0bWFwLWluZGV4ICYmCisJSEFTSDI9JChnaXQgLUMgc2VydmVyMiByZXYtcGFyc2UgYmFyKSAmJgorCisJZ2l0IC1DIHJlcG8gcmVtb3RlIGFkZCBzZXJ2ZXIyICJmaWxlOi8vJChwd2QpL3NlcnZlcjIiICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIHJlbW90ZS5zZXJ2ZXIyLnByb21pc29yIHRydWUgJiYKKwlnaXQgLUMgcmVwbyBjYXQtZmlsZSAtcCAiJEhBU0gyIiAmJgorCisJZ2l0IC1DIHJlcG8gZmV0Y2ggc2VydmVyMiAmJgorCXJtIC1yZiByZXBvLy5naXQvb2JqZWN0cy8qICYmCisJZ2l0IC1DIHJlcG8gY2F0LWZpbGUgLXAgIiRIQVNIMiIgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIC5wcm9taXNvciBmaWxlIGlzIHdyaXR0ZW4sIGFuZCBjaGVjayB0aGF0IGl0cworCSMgYXNzb2NpYXRlZCBwYWNrZmlsZSBjb250YWlucyB0aGUgb2JqZWN0CisJbHMgcmVwby8uZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucHJvbWlzb3IgPnByb21pc29ybGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgcHJvbWlzb3JsaXN0ICYmCisJSURYPSQoc2VkICJzL3Byb21pc29yJC9pZHgvIiBwcm9taXNvcmxpc3QpICYmCisJZ2l0IHZlcmlmeS1wYWNrIC0tdmVyYm9zZSAiJElEWCIgPm91dCAmJgorCWdyZXAgIiRIQVNIMiIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIG9mIG1pc3Npbmcgb2JqZWN0cyBjb25maWd1cmVzIGEgcHJvbWlzb3IgcmVtb3RlJyAnCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpL3NlcnZlciIgc2VydmVyMyAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlcjMgYmF6ICYmCisJZ2l0IC1DIHNlcnZlcjMgcmVwYWNrIC1hIC1kIC0td3JpdGUtYml0bWFwLWluZGV4ICYmCisJSEFTSDM9JChnaXQgLUMgc2VydmVyMyByZXYtcGFyc2UgYmF6KSAmJgorCWdpdCAtQyBzZXJ2ZXIzIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKworCXJtIHJlcG8vLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLnByb21pc29yICYmCisKKwlnaXQgLUMgcmVwbyByZW1vdGUgYWRkIHNlcnZlcjMgImZpbGU6Ly8kKHB3ZCkvc2VydmVyMyIgJiYKKwlnaXQgLUMgcmVwbyBmZXRjaCAtLWZpbHRlcj0iYmxvYjpub25lIiBzZXJ2ZXIzICRIQVNIMyAmJgorCisJdGVzdF9jbXBfY29uZmlnIC1DIHJlcG8gdHJ1ZSByZW1vdGUuc2VydmVyMy5wcm9taXNvciAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGUgLnByb21pc29yIGZpbGUgaXMgd3JpdHRlbiwgYW5kIGNoZWNrIHRoYXQgaXRzCisJIyBhc3NvY2lhdGVkIHBhY2tmaWxlIGNvbnRhaW5zIHRoZSBvYmplY3QKKwlscyByZXBvLy5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wcm9taXNvciA+cHJvbWlzb3JsaXN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBwcm9taXNvcmxpc3QgJiYKKwlJRFg9JChzZWQgInMvcHJvbWlzb3IkL2lkeC8iIHByb21pc29ybGlzdCkgJiYKKwlnaXQgdmVyaWZ5LXBhY2sgLS12ZXJib3NlICIkSURYIiA+b3V0ICYmCisJZ3JlcCAiJEhBU0gzIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2hpbmcgb2YgbWlzc2luZyBibG9icyB3b3JrcycgJworCXJtIC1yZiBzZXJ2ZXIgc2VydmVyMiByZXBvICYmCisJcm0gLXJmIHNlcnZlciBzZXJ2ZXIzIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBmb28gJiYKKwlnaXQgLUMgc2VydmVyIHJlcGFjayAtYSAtZCAtLXdyaXRlLWJpdG1hcC1pbmRleCAmJgorCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpL3NlcnZlciIgcmVwbyAmJgorCWdpdCBoYXNoLW9iamVjdCByZXBvL2Zvby50ID5ibG9iaGFzaCAmJgorCXJtIC1yZiByZXBvLy5naXQvb2JqZWN0cy8qICYmCisKKwlnaXQgLUMgc2VydmVyIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAib3JpZ2luIiAmJgorCisJZ2l0IC1DIHJlcG8gY2F0LWZpbGUgLXAgJChjYXQgYmxvYmhhc2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIG9mIG1pc3NpbmcgdHJlZXMgZG9lcyBub3QgZmV0Y2ggYmxvYnMnICcKKwlybSAtcmYgc2VydmVyIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBmb28gJiYKKwlnaXQgLUMgc2VydmVyIHJlcGFjayAtYSAtZCAtLXdyaXRlLWJpdG1hcC1pbmRleCAmJgorCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpL3NlcnZlciIgcmVwbyAmJgorCWdpdCAtQyByZXBvIHJldi1wYXJzZSBmb29ee3RyZWV9ID50cmVlaGFzaCAmJgorCWdpdCBoYXNoLW9iamVjdCByZXBvL2Zvby50ID5ibG9iaGFzaCAmJgorCXJtIC1yZiByZXBvLy5naXQvb2JqZWN0cy8qICYmCisKKwlnaXQgLUMgc2VydmVyIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAib3JpZ2luIiAmJgorCWdpdCAtQyByZXBvIGNhdC1maWxlIC1wICQoY2F0IHRyZWVoYXNoKSAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGUgdHJlZSwgYnV0IG5vdCB0aGUgYmxvYiwgaXMgZmV0Y2hlZAorCWdpdCAtQyByZXBvIHJldi1saXN0IC0tb2JqZWN0cyAtLW1pc3Npbmc9cHJpbnQgJChjYXQgdHJlZWhhc2gpID5vYmplY3RzICYmCisJZ3JlcCAiXiQoY2F0IHRyZWVoYXNoKSIgb2JqZWN0cyAmJgorCWdyZXAgIl5bP10kKGNhdCBibG9iaGFzaCkiIG9iamVjdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgc3RvcHMgdHJhdmVyc2FsIGF0IG1pc3NpbmcgYW5kIHByb21pc2VkIGNvbW1pdCcgJworCXJtIC1yZiByZXBvICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBmb28gJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIGJhciAmJgorCisJRk9PPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGZvbykgJiYKKwlwcm9taXNlX2FuZF9kZWxldGUgIiRGT08iICYmCisKKwlnaXQgLUMgcmVwbyBjb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiAxICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIGV4dGVuc2lvbnMucGFydGlhbGNsb25lICJhcmJpdHJhcnkgc3RyaW5nIiAmJgorCUdJVF9URVNUX0NPTU1JVF9HUkFQSD0wIGdpdCAtQyByZXBvIC1jIGNvcmUuY29tbWl0R3JhcGg9ZmFsc2UgcmV2LWxpc3QgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgLS1vYmplY3RzIGJhciA+b3V0ICYmCisJZ3JlcCAkKGdpdCAtQyByZXBvIHJldi1wYXJzZSBiYXIpIG91dCAmJgorCSEgZ3JlcCAkRk9PIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIHRyZWUgb2JqZWN0cyB3aXRoIC0tbWlzc2luZz1hbGxvdy1wcm9taXNvciBhbmQgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMnICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gZm9vICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBiYXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIGJheiAmJgorCisJcHJvbWlzZV9hbmRfZGVsZXRlICQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGJhcl57dHJlZX0pICYmCisJcHJvbWlzZV9hbmRfZGVsZXRlICQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGZvb157dHJlZX0pICYmCisKKwlnaXQgLUMgcmVwbyBjb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiAxICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIGV4dGVuc2lvbnMucGFydGlhbGNsb25lICJhcmJpdHJhcnkgc3RyaW5nIiAmJgorCisJZ2l0IC1DIHJlcG8gcmV2LWxpc3QgLS1taXNzaW5nPWFsbG93LXByb21pc29yIC0tb2JqZWN0cyBIRUFEID5vYmpzIDI+cmV2X2xpc3RfZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHJldl9saXN0X2VyciAmJgorCSMgMyBjb21taXRzLCAzIGJsb2JzLCBhbmQgMSB0cmVlCisJdGVzdF9saW5lX2NvdW50ID0gNyBvYmpzICYmCisKKwkjIERvIHRoZSBzYW1lIGZvciAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cywgYnV0IHdpdGggYWxsIHRyZWVzIGdvbmUuCisJcHJvbWlzZV9hbmRfZGVsZXRlICQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGJhel57dHJlZX0pICYmCisJZ2l0IC1DIHJlcG8gcmV2LWxpc3QgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgLS1vYmplY3RzIEhFQUQgPm9ianMgMj5yZXZfbGlzdF9lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgcmV2X2xpc3RfZXJyICYmCisJIyAzIGNvbW1pdHMsIG5vIGJsb2JzIG9yIHRyZWVzCisJdGVzdF9saW5lX2NvdW50ID0gMyBvYmpzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3Npbmcgbm9uLXJvb3QgdHJlZSBvYmplY3QgYW5kIHJldi1saXN0JyAnCisJcm0gLXJmIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlcG8gJiYKKwlta2RpciByZXBvL2RpciAmJgorCWVjaG8gZm9vID5yZXBvL2Rpci9mb28gJiYKKwlnaXQgLUMgcmVwbyBhZGQgZGlyL2ZvbyAmJgorCWdpdCAtQyByZXBvIGNvbW1pdCAtbSAiY29tbWl0IGRpci9mb28iICYmCisKKwlwcm9taXNlX2FuZF9kZWxldGUgJChnaXQgLUMgcmVwbyByZXYtcGFyc2UgSEVBRDpkaXIpICYmCisKKwlnaXQgLUMgcmVwbyBjb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiAxICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIGV4dGVuc2lvbnMucGFydGlhbGNsb25lICJhcmJpdHJhcnkgc3RyaW5nIiAmJgorCisJZ2l0IC1DIHJlcG8gcmV2LWxpc3QgLS1taXNzaW5nPWFsbG93LWFueSAtLW9iamVjdHMgSEVBRCA+b2JqcyAyPnJldl9saXN0X2VyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSByZXZfbGlzdF9lcnIgJiYKKwkjIDEgY29tbWl0IGFuZCAxIHRyZWUKKwl0ZXN0X2xpbmVfY291bnQgPSAyIG9ianMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgc3RvcHMgdHJhdmVyc2FsIGF0IG1pc3NpbmcgYW5kIHByb21pc2VkIHRyZWUnICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gZm9vICYmCisJbWtkaXIgcmVwby9hX2RpciAmJgorCWVjaG8gc29tZXRoaW5nID5yZXBvL2FfZGlyL3NvbWV0aGluZyAmJgorCWdpdCAtQyByZXBvIGFkZCBhX2Rpci9zb21ldGhpbmcgJiYKKwlnaXQgLUMgcmVwbyBjb21taXQgLW0gYmFyICYmCisKKwkjIGZvb157dHJlZX0gKHRyZWUgcmVmZXJlbmNlZCBmcm9tIGNvbW1pdCkKKwlUUkVFPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGZvb157dHJlZX0pICYmCisKKwkjIGEgdHJlZSByZWZlcmVuY2VkIGJ5IEhFQURee3RyZWV9ICh0cmVlIHJlZmVyZW5jZWQgZnJvbSB0cmVlKQorCVRSRUUyPSQoZ2l0IC1DIHJlcG8gbHMtdHJlZSBIRUFEXnt0cmVlfSB8IGdyZXAgIiB0cmVlICIgfCBoZWFkIC0xIHwgY3V0IC1iMTMtNTIpICYmCisKKwlwcm9taXNlX2FuZF9kZWxldGUgIiRUUkVFIiAmJgorCXByb21pc2VfYW5kX2RlbGV0ZSAiJFRSRUUyIiAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAiYXJiaXRyYXJ5IHN0cmluZyIgJiYKKwlnaXQgLUMgcmVwbyByZXYtbGlzdCAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyAtLW9iamVjdHMgSEVBRCA+b3V0ICYmCisJZ3JlcCAkKGdpdCAtQyByZXBvIHJldi1wYXJzZSBmb28pIG91dCAmJgorCSEgZ3JlcCAkVFJFRSBvdXQgJiYKKwlncmVwICQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIEhFQUQpIG91dCAmJgorCSEgZ3JlcCAkVFJFRTIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IHN0b3BzIHRyYXZlcnNhbCBhdCBtaXNzaW5nIGFuZCBwcm9taXNlZCBibG9iJyAnCisJcm0gLXJmIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlcG8gJiYKKwllY2hvIHNvbWV0aGluZyA+cmVwby9zb21ldGhpbmcgJiYKKwlnaXQgLUMgcmVwbyBhZGQgc29tZXRoaW5nICYmCisJZ2l0IC1DIHJlcG8gY29tbWl0IC1tIGZvbyAmJgorCisJQkxPQj0kKGdpdCAtQyByZXBvIGhhc2gtb2JqZWN0IC13IHNvbWV0aGluZykgJiYKKwlwcm9taXNlX2FuZF9kZWxldGUgIiRCTE9CIiAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAiYXJiaXRyYXJ5IHN0cmluZyIgJiYKKwlnaXQgLUMgcmVwbyByZXYtbGlzdCAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyAtLW9iamVjdHMgSEVBRCA+b3V0ICYmCisJZ3JlcCAkKGdpdCAtQyByZXBvIHJldi1wYXJzZSBIRUFEKSBvdXQgJiYKKwkhIGdyZXAgJEJMT0Igb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IHN0b3BzIHRyYXZlcnNhbCBhdCBwcm9taXNvciBjb21taXQsIHRyZWUsIGFuZCBibG9iJyAnCisJcm0gLXJmIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlcG8gJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIGZvbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gYmFyICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBiYXogJiYKKworCUNPTU1JVD0kKGdpdCAtQyByZXBvIHJldi1wYXJzZSBmb28pICYmCisJVFJFRT0kKGdpdCAtQyByZXBvIHJldi1wYXJzZSBiYXJee3RyZWV9KSAmJgorCUJMT0I9JChnaXQgaGFzaC1vYmplY3QgcmVwby9iYXoudCkgJiYKKwlwcmludGYgIiVzXG4lc1xuJXNcbiIgJENPTU1JVCAkVFJFRSAkQkxPQiB8IHBhY2tfYXNfZnJvbV9wcm9taXNvciAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAiYXJiaXRyYXJ5IHN0cmluZyIgJiYKKwlnaXQgLUMgcmVwbyByZXYtbGlzdCAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyAtLW9iamVjdHMgSEVBRCA+b3V0ICYmCisJISBncmVwICRDT01NSVQgb3V0ICYmCisJISBncmVwICRUUkVFIG91dCAmJgorCSEgZ3JlcCAkQkxPQiBvdXQgJiYKKwlncmVwICQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGJhcikgb3V0ICAjIHNhbml0eSBjaGVjayB0aGF0IHNvbWUgd2Fsa2luZyB3YXMgZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBkaWVzIGZvciBtaXNzaW5nIG9iamVjdHMgb24gY21kIGxpbmUnICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gZm9vICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBiYXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIGJheiAmJgorCisJQ09NTUlUPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGZvbykgJiYKKwlUUkVFPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGJhcl57dHJlZX0pICYmCisJQkxPQj0kKGdpdCBoYXNoLW9iamVjdCByZXBvL2Jhei50KSAmJgorCisJcHJvbWlzZV9hbmRfZGVsZXRlICRDT01NSVQgJiYKKwlwcm9taXNlX2FuZF9kZWxldGUgJFRSRUUgJiYKKwlwcm9taXNlX2FuZF9kZWxldGUgJEJMT0IgJiYKKworCWdpdCAtQyByZXBvIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDEgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgImFyYml0cmFyeSBzdHJpbmciICYmCisKKwlmb3IgT0JKIGluICIkQ09NTUlUIiAiJFRSRUUiICIkQkxPQiI7IGRvCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyByZXBvIHJldi1saXN0IC0tb2JqZWN0cyBcCisJCQktLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyAiJE9CSiIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHJlcG8gcmV2LWxpc3QgLS1vYmplY3RzLWVkZ2UtYWdncmVzc2l2ZSBcCisJCQktLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyAiJE9CSiIgJiYKKworCQkjIERvIG5vdCBkaWUgb3IgY3Jhc2ggd2hlbiAtLWlnbm9yZS1taXNzaW5nIGlzIHBhc3NlZC4KKwkJZ2l0IC1DIHJlcG8gcmV2LWxpc3QgLS1pZ25vcmUtbWlzc2luZyAtLW9iamVjdHMgXAorCQkJLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgIiRPQkoiICYmCisJCWdpdCAtQyByZXBvIHJldi1saXN0IC0taWdub3JlLW1pc3NpbmcgLS1vYmplY3RzLWVkZ2UtYWdncmVzc2l2ZSBcCisJCQktLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyAiJE9CSiIKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbmdsZSBwcm9taXNvciByZW1vdGUgY2FuIGJlIHJlLWluaXRpYWxpemVkIGdyYWNlZnVsbHknICcKKwkjIGVuc3VyZSBvbmUgcHJvbWlzb3IgaXMgaW4gdGhlIHByb21pc29ycyBsaXN0CisJcm0gLXJmIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIG90aGVyICYmCisJZ2l0IC1DIHJlcG8gcmVtb3RlIGFkZCBmb28gImZpbGU6Ly8kKHB3ZCkvb3RoZXIiICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIHJlbW90ZS5mb28ucHJvbWlzb3IgdHJ1ZSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSBmb28gJiYKKworCSMgcmVpbml0aWFsaXplIHRoZSBwcm9taXNvcnMgbGlzdAorCWdpdCAtQyByZXBvIGZldGNoIC0tZmlsdGVyPWJsb2I6bm9uZSBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgcmVwYWNrcyBwcm9taXNvciBvYmplY3RzIHNlcGFyYXRlbHkgZnJvbSBub24tcHJvbWlzb3Igb2JqZWN0cycgJworCXJtIC1yZiByZXBvICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBvbmUgJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIHR3byAmJgorCisJVFJFRV9PTkU9JChnaXQgLUMgcmVwbyByZXYtcGFyc2Ugb25lXnt0cmVlfSkgJiYKKwlwcmludGYgIiRUUkVFX09ORVxuIiB8IHBhY2tfYXNfZnJvbV9wcm9taXNvciAmJgorCVRSRUVfVFdPPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIHR3b157dHJlZX0pICYmCisJcHJpbnRmICIkVFJFRV9UV09cbiIgfCBwYWNrX2FzX2Zyb21fcHJvbWlzb3IgJiYKKworCWdpdCAtQyByZXBvIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDEgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgImFyYml0cmFyeSBzdHJpbmciICYmCisJZ2l0IC1DIHJlcG8gZ2MgJiYKKworCSMgRW5zdXJlIHRoYXQgZXhhY3RseSBvbmUgcHJvbWlzb3IgcGFja2ZpbGUgZXhpc3RzLCBhbmQgdGhhdCBpdAorCSMgY29udGFpbnMgdGhlIHRyZWVzIGJ1dCBub3QgdGhlIGNvbW1pdHMKKwlscyByZXBvLy5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wcm9taXNvciA+cHJvbWlzb3JsaXN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBwcm9taXNvcmxpc3QgJiYKKwlQUk9NSVNPUl9QQUNLRklMRT0kKHNlZCAicy8ucHJvbWlzb3IvLnBhY2svIiA8cHJvbWlzb3JsaXN0KSAmJgorCWdpdCB2ZXJpZnktcGFjayAkUFJPTUlTT1JfUEFDS0ZJTEUgLXYgPm91dCAmJgorCWdyZXAgIiRUUkVFX09ORSIgb3V0ICYmCisJZ3JlcCAiJFRSRUVfVFdPIiBvdXQgJiYKKwkhIGdyZXAgIiQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIG9uZSkiIG91dCAmJgorCSEgZ3JlcCAiJChnaXQgLUMgcmVwbyByZXYtcGFyc2UgdHdvKSIgb3V0ICYmCisKKwkjIFJlbW92ZSB0aGUgcHJvbWlzb3IgcGFja2ZpbGUgYW5kIGFzc29jaWF0ZWQgZmlsZXMKKwlybSAkKHNlZCAicy8ucHJvbWlzb3IvLyIgPHByb21pc29ybGlzdCkuKiAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGUgc2luZ2xlIG90aGVyIHBhY2sgY29udGFpbnMgdGhlIGNvbW1pdHMsIGJ1dCBub3QgdGhlCisJIyB0cmVlcworCWxzIHJlcG8vLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLnBhY2sgPnBhY2tsaXN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBwYWNrbGlzdCAmJgorCWdpdCB2ZXJpZnktcGFjayByZXBvLy5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrIC12ID5vdXQgJiYKKwlncmVwICIkKGdpdCAtQyByZXBvIHJldi1wYXJzZSBvbmUpIiBvdXQgJiYKKwlncmVwICIkKGdpdCAtQyByZXBvIHJldi1wYXJzZSB0d28pIiBvdXQgJiYKKwkhIGdyZXAgIiRUUkVFX09ORSIgb3V0ICYmCisJISBncmVwICIkVFJFRV9UV08iIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyBkb2VzIG5vdCByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyBpZiB0aGVyZSBhcmUgbm9uZScgJworCXJtIC1yZiByZXBvICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBvbmUgJiYKKworCWdpdCAtQyByZXBvIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDEgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgImFyYml0cmFyeSBzdHJpbmciICYmCisJZ2l0IC1DIHJlcG8gZ2MgJiYKKworCSMgRW5zdXJlIHRoYXQgb25seSBvbmUgcGFjayBleGlzdHMKKwlscyByZXBvLy5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrID5wYWNrbGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgcGFja2xpc3QKKycKKworcmVwYWNrX2FuZF9jaGVjayAoKSB7CisJcm0gLXJmIHJlcG8yICYmCisJY3AgLXIgcmVwbyByZXBvMiAmJgorCWdpdCAtQyByZXBvMiByZXBhY2sgJDEgLWQgJiYKKwlnaXQgLUMgcmVwbzIgZnNjayAmJgorCisJZ2l0IC1DIHJlcG8yIGNhdC1maWxlIC1lICQyICYmCisJZ2l0IC1DIHJlcG8yIGNhdC1maWxlIC1lICQzCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayAtZCBkb2VzIG5vdCBpcnJldmVyc2libHkgZGVsZXRlIHByb21pc29yIG9iamVjdHMnICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbyAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDEgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgImFyYml0cmFyeSBzdHJpbmciICYmCisKKwlnaXQgLUMgcmVwbyBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBvbmUgJiYKKwlnaXQgLUMgcmVwbyBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0d28gJiYKKwlnaXQgLUMgcmVwbyBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0aHJlZSAmJgorCWdpdCAtQyByZXBvIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGZvdXIgJiYKKwlPTkU9JChnaXQgLUMgcmVwbyByZXYtcGFyc2UgSEVBRF5eXikgJiYKKwlUV089JChnaXQgLUMgcmVwbyByZXYtcGFyc2UgSEVBRF5eKSAmJgorCVRIUkVFPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIEhFQUReKSAmJgorCisJcHJpbnRmICIkVFdPXG4iIHwgcGFja19hc19mcm9tX3Byb21pc29yICYmCisJcHJpbnRmICIkVEhSRUVcbiIgfCBwYWNrX2FzX2Zyb21fcHJvbWlzb3IgJiYKKwlkZWxldGVfb2JqZWN0IHJlcG8gIiRPTkUiICYmCisKKwlyZXBhY2tfYW5kX2NoZWNrIC1hICIkVFdPIiAiJFRIUkVFIiAmJgorCXJlcGFja19hbmRfY2hlY2sgLUEgIiRUV08iICIkVEhSRUUiICYmCisJcmVwYWNrX2FuZF9jaGVjayAtbCAiJFRXTyIgIiRUSFJFRSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2Mgc3RvcHMgdHJhdmVyc2FsIHdoZW4gYSBtaXNzaW5nIGJ1dCBwcm9taXNlZCBvYmplY3QgaXMgcmVhY2hlZCcgJworCXJtIC1yZiByZXBvICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBteV9jb21taXQgJiYKKworCVRSRUVfSEFTSD0kKGdpdCAtQyByZXBvIHJldi1wYXJzZSBIRUFEXnt0cmVlfSkgJiYKKwlIQVNIPSQocHJvbWlzZV9hbmRfZGVsZXRlICRUUkVFX0hBU0gpICYmCisKKwlnaXQgLUMgcmVwbyBjb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiAxICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIGV4dGVuc2lvbnMucGFydGlhbGNsb25lICJhcmJpdHJhcnkgc3RyaW5nIiAmJgorCWdpdCAtQyByZXBvIGdjICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSBwcm9taXNvciBwYWNrZmlsZSBzdGlsbCBleGlzdHMsIGFuZCByZW1vdmUgaXQKKwl0ZXN0IC1lIHJlcG8vLmdpdC9vYmplY3RzL3BhY2svcGFjay0kSEFTSC5wYWNrICYmCisJcm0gcmVwby8uZ2l0L29iamVjdHMvcGFjay9wYWNrLSRIQVNILiogJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIHNpbmdsZSBvdGhlciBwYWNrIGNvbnRhaW5zIHRoZSBjb21taXQsIGJ1dCBub3QgdGhlIHRyZWUKKwlscyByZXBvLy5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrID5wYWNrbGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgcGFja2xpc3QgJiYKKwlnaXQgdmVyaWZ5LXBhY2sgcmVwby8uZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucGFjayAtdiA+b3V0ICYmCisJZ3JlcCAiJChnaXQgLUMgcmVwbyByZXYtcGFyc2UgSEVBRCkiIG91dCAmJgorCSEgZ3JlcCAiJFRSRUVfSEFTSCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBmZXRjaCB3aGVuIGNoZWNraW5nIGV4aXN0ZW5jZSBvZiB0cmVlIHdlIGNvbnN0cnVjdCBvdXJzZWx2ZXMnICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gYmFzZSAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gc2lkZTEgJiYKKwlnaXQgLUMgcmVwbyBjaGVja291dCBiYXNlICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBzaWRlMiAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAiYXJiaXRyYXJ5IHN0cmluZyIgJiYKKworCWdpdCAtQyByZXBvIGNoZXJyeS1waWNrIHNpZGUxCisnCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCitzdGFydF9odHRwZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyBvZiBtaXNzaW5nIG9iamVjdHMgZnJvbSBhbiBIVFRQIHNlcnZlcicgJworCXJtIC1yZiByZXBvICYmCisJU0VSVkVSPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3NlcnZlciIgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkU0VSVkVSIiAmJgorCXRlc3RfY29tbWl0IC1DICIkU0VSVkVSIiBmb28gJiYKKwlnaXQgLUMgIiRTRVJWRVIiIHJlcGFjayAtYSAtZCAtLXdyaXRlLWJpdG1hcC1pbmRleCAmJgorCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvc21hcnQvc2VydmVyIHJlcG8gJiYKKwlIQVNIPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGZvbykgJiYKKwlybSAtcmYgcmVwby8uZ2l0L29iamVjdHMvKiAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAib3JpZ2luIiAmJgorCWdpdCAtQyByZXBvIGNhdC1maWxlIC1wICIkSEFTSCIgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIC5wcm9taXNvciBmaWxlIGlzIHdyaXR0ZW4sIGFuZCBjaGVjayB0aGF0IGl0cworCSMgYXNzb2NpYXRlZCBwYWNrZmlsZSBjb250YWlucyB0aGUgb2JqZWN0CisJbHMgcmVwby8uZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucHJvbWlzb3IgPnByb21pc29ybGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgcHJvbWlzb3JsaXN0ICYmCisJSURYPSQoc2VkICJzL3Byb21pc29yJC9pZHgvIiBwcm9taXNvcmxpc3QpICYmCisJZ2l0IHZlcmlmeS1wYWNrIC0tdmVyYm9zZSAiJElEWCIgPm91dCAmJgorCWdyZXAgIiRIQVNIIiBvdXQKKycKKworIyBETyBOT1QgYWRkIG5vbi1odHRwZC1zcGVjaWZpYyB0ZXN0cyBoZXJlLCBiZWNhdXNlIHRoZSBsYXN0IHBhcnQgb2YgdGhpcworIyB0ZXN0IHNjcmlwdCBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gaHR0cGQgaXMgYXZhaWxhYmxlIGFuZCBlbmFibGVkLgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDA1MDAtcHJvZ3Jlc3MtZGlzcGxheS5zaCBiL3QvdDA1MDAtcHJvZ3Jlc3MtZGlzcGxheS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZWQxZGYzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDUwMC1wcm9ncmVzcy1kaXNwbGF5LnNoCkBAIC0wLDAgKzEsMzEyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHJvZ3Jlc3MgZGlzcGxheScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Nob3dfY3IgKCkgeworCXRyICdcMDE1JyBRIHwgc2VkIC1lICJzL1EvPENSPlxcJExGL2ciCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBwcm9ncmVzcyBkaXNwbGF5JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCVdvcmtpbmcgaGFyZDogMTxDUj4KKwlXb3JraW5nIGhhcmQ6IDI8Q1I+CisJV29ya2luZyBoYXJkOiA1PENSPgorCVdvcmtpbmcgaGFyZDogNSwgZG9uZS4KKwlFT0YKKworCWNhdCA+aW4gPDwtXEVPRiAmJgorCXVwZGF0ZQorCXByb2dyZXNzIDEKKwl1cGRhdGUKKwlwcm9ncmVzcyAyCisJcHJvZ3Jlc3MgMworCXByb2dyZXNzIDQKKwl1cGRhdGUKKwlwcm9ncmVzcyA1CisJRU9GCisJdGVzdC10b29sIHByb2dyZXNzICJXb3JraW5nIGhhcmQiIDxpbiAyPnN0ZGVyciAmJgorCisJc2hvd19jciA8c3RkZXJyID5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9ncmVzcyBkaXNwbGF5IHdpdGggdG90YWwnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJV29ya2luZyBoYXJkOiAgMzMlICgxLzMpPENSPgorCVdvcmtpbmcgaGFyZDogIDY2JSAoMi8zKTxDUj4KKwlXb3JraW5nIGhhcmQ6IDEwMCUgKDMvMyk8Q1I+CisJV29ya2luZyBoYXJkOiAxMDAlICgzLzMpLCBkb25lLgorCUVPRgorCisJY2F0ID5pbiA8PC1cRU9GICYmCisJcHJvZ3Jlc3MgMQorCXByb2dyZXNzIDIKKwlwcm9ncmVzcyAzCisJRU9GCisJdGVzdC10b29sIHByb2dyZXNzIC0tdG90YWw9MyAiV29ya2luZyBoYXJkIiA8aW4gMj5zdGRlcnIgJiYKKworCXNob3dfY3IgPHN0ZGVyciA+b3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvZ3Jlc3MgZGlzcGxheSBicmVha3MgbG9uZyBsaW5lcyAjMScgJworCXNlZCAtZSAicy9aJC8vIiA+ZXhwZWN0IDw8XEVPRiAmJgorV29ya2luZyBoYXJkLi4uLi4uLjIuLi4uLi4uLi4zLi4uLi4uLi4uNC4uLi4uLi4uLjUuLi4uLi4uLi42OiAgIDAlICgxMDAvMTAwMDAwKTxDUj4KK1dvcmtpbmcgaGFyZC4uLi4uLi4yLi4uLi4uLi4uMy4uLi4uLi4uLjQuLi4uLi4uLi41Li4uLi4uLi4uNjogICAxJSAoMTAwMC8xMDAwMDApPENSPgorV29ya2luZyBoYXJkLi4uLi4uLjIuLi4uLi4uLi4zLi4uLi4uLi4uNC4uLi4uLi4uLjUuLi4uLi4uLi42OiAgICAgICAgICAgICAgICAgICBaCisgICAxMCUgKDEwMDAwLzEwMDAwMCk8Q1I+CisgIDEwMCUgKDEwMDAwMC8xMDAwMDApPENSPgorICAxMDAlICgxMDAwMDAvMTAwMDAwKSwgZG9uZS4KK0VPRgorCisJY2F0ID5pbiA8PC1cRU9GICYmCisJcHJvZ3Jlc3MgMTAwCisJcHJvZ3Jlc3MgMTAwMAorCXByb2dyZXNzIDEwMDAwCisJcHJvZ3Jlc3MgMTAwMDAwCisJRU9GCisJdGVzdC10b29sIHByb2dyZXNzIC0tdG90YWw9MTAwMDAwIFwKKwkJIldvcmtpbmcgaGFyZC4uLi4uLi4yLi4uLi4uLi4uMy4uLi4uLi4uLjQuLi4uLi4uLi41Li4uLi4uLi4uNiIgXAorCQk8aW4gMj5zdGRlcnIgJiYKKworCXNob3dfY3IgPHN0ZGVyciA+b3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvZ3Jlc3MgZGlzcGxheSBicmVha3MgbG9uZyBsaW5lcyAjMicgJworCSMgTm90ZTogd2UgZG8gbm90IG5lZWQgdGhhdCBtYW55IHNwYWNlcyBhZnRlciB0aGUgdGl0bGUgdG8gY292ZXIgdXAKKwkjIHRoZSBsYXN0IGxpbmUgYmVmb3JlIGJyZWFraW5nIHRoZSBwcm9ncmVzcyBsaW5lLgorCXNlZCAtZSAicy9aJC8vIiA+ZXhwZWN0IDw8XEVPRiAmJgorV29ya2luZyBoYXJkLi4uLi4uLjIuLi4uLi4uLi4zLi4uLi4uLi4uNC4uLi4uLi4uLjUuLi4uLi4uLi42OiAgIDAlICgxLzEwMDAwMCk8Q1I+CitXb3JraW5nIGhhcmQuLi4uLi4uMi4uLi4uLi4uLjMuLi4uLi4uLi40Li4uLi4uLi4uNS4uLi4uLi4uLjY6ICAgMCUgKDIvMTAwMDAwKTxDUj4KK1dvcmtpbmcgaGFyZC4uLi4uLi4yLi4uLi4uLi4uMy4uLi4uLi4uLjQuLi4uLi4uLi41Li4uLi4uLi4uNjogICAgICAgICAgICAgICAgICAgWgorICAgMTAlICgxMDAwMC8xMDAwMDApPENSPgorICAxMDAlICgxMDAwMDAvMTAwMDAwKTxDUj4KKyAgMTAwJSAoMTAwMDAwLzEwMDAwMCksIGRvbmUuCitFT0YKKworCWNhdCA+aW4gPDwtXEVPRiAmJgorCXVwZGF0ZQorCXByb2dyZXNzIDEKKwl1cGRhdGUKKwlwcm9ncmVzcyAyCisJcHJvZ3Jlc3MgMTAwMDAKKwlwcm9ncmVzcyAxMDAwMDAKKwlFT0YKKwl0ZXN0LXRvb2wgcHJvZ3Jlc3MgLS10b3RhbD0xMDAwMDAgXAorCQkiV29ya2luZyBoYXJkLi4uLi4uLjIuLi4uLi4uLi4zLi4uLi4uLi4uNC4uLi4uLi4uLjUuLi4uLi4uLi42IiBcCisJCTxpbiAyPnN0ZGVyciAmJgorCisJc2hvd19jciA8c3RkZXJyID5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9ncmVzcyBkaXNwbGF5IGJyZWFrcyBsb25nIGxpbmVzICMzIC0gZXZlbiB0aGUgZmlyc3QgaXMgdG9vIGxvbmcnICcKKwkjIE5vdGU6IHdlIGRvIG5vdCBhY3R1YWxseSBuZWVkIGFueSBzcGFjZXMgYXQgdGhlIGVuZCBvZiB0aGUgdGl0bGUKKwkjIGxpbmUsIGJlY2F1c2UgdGhlcmUgaXMgbm8gcHJldmlvdXMgcHJvZ3Jlc3MgbGluZSB0byBjb3ZlciB1cC4KKwlzZWQgLWUgInMvWiQvLyIgPmV4cGVjdCA8PFxFT0YgJiYKK1dvcmtpbmcgaGFyZC4uLi4uLi4yLi4uLi4uLi4uMy4uLi4uLi4uLjQuLi4uLi4uLi41Li4uLi4uLi4uNjogICAgICAgICAgICAgICAgICAgWgorICAgMjUlICgyNTAwMC8xMDAwMDApPENSPgorICAgNTAlICg1MDAwMC8xMDAwMDApPENSPgorICAgNzUlICg3NTAwMC8xMDAwMDApPENSPgorICAxMDAlICgxMDAwMDAvMTAwMDAwKTxDUj4KKyAgMTAwJSAoMTAwMDAwLzEwMDAwMCksIGRvbmUuCitFT0YKKworCWNhdCA+aW4gPDwtXEVPRiAmJgorCXByb2dyZXNzIDI1MDAwCisJcHJvZ3Jlc3MgNTAwMDAKKwlwcm9ncmVzcyA3NTAwMAorCXByb2dyZXNzIDEwMDAwMAorCUVPRgorCXRlc3QtdG9vbCBwcm9ncmVzcyAtLXRvdGFsPTEwMDAwMCBcCisJCSJXb3JraW5nIGhhcmQuLi4uLi4uMi4uLi4uLi4uLjMuLi4uLi4uLi40Li4uLi4uLi4uNS4uLi4uLi4uLjYiIFwKKwkJPGluIDI+c3RkZXJyICYmCisKKwlzaG93X2NyIDxzdGRlcnIgPm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb2dyZXNzIGRpc3BsYXkgYnJlYWtzIGxvbmcgbGluZXMgIzQgLSB0aXRsZSBsaW5lIG1hdGNoZXMgdGVybWluYWwgd2lkdGgnICcKKwljYXQgPmV4cGVjdCA8PFxFT0YgJiYKK1dvcmtpbmcgaGFyZC4uLi4uLi4yLi4uLi4uLi4uMy4uLi4uLi4uLjQuLi4uLi4uLi41Li4uLi4uLi4uNi4uLi4uLi4uLjcuLi4uLi4uLi46CisgICAyNSUgKDI1MDAwLzEwMDAwMCk8Q1I+CisgICA1MCUgKDUwMDAwLzEwMDAwMCk8Q1I+CisgICA3NSUgKDc1MDAwLzEwMDAwMCk8Q1I+CisgIDEwMCUgKDEwMDAwMC8xMDAwMDApPENSPgorICAxMDAlICgxMDAwMDAvMTAwMDAwKSwgZG9uZS4KK0VPRgorCisJY2F0ID5pbiA8PC1cRU9GICYmCisJcHJvZ3Jlc3MgMjUwMDAKKwlwcm9ncmVzcyA1MDAwMAorCXByb2dyZXNzIDc1MDAwCisJcHJvZ3Jlc3MgMTAwMDAwCisJRU9GCisJdGVzdC10b29sIHByb2dyZXNzIC0tdG90YWw9MTAwMDAwIFwKKwkJIldvcmtpbmcgaGFyZC4uLi4uLi4yLi4uLi4uLi4uMy4uLi4uLi4uLjQuLi4uLi4uLi41Li4uLi4uLi4uNi4uLi4uLi4uLjcuLi4uLi4uLi4iIFwKKwkJPGluIDI+c3RkZXJyICYmCisKKwlzaG93X2NyIDxzdGRlcnIgPm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0CisnCisKKyMgUHJvZ3Jlc3MgY291bnRlciBnb2VzIGJhY2t3YXJkcywgdGhpcyBzaG91bGQgbm90IGhhcHBlbiBpbiBwcmFjdGljZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb2dyZXNzIHNob3J0ZW5zIC0gY3JhenkgY2FsbGVyJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCVdvcmtpbmcgaGFyZDogIDEwJSAoMTAwLzEwMDApPENSPgorCVdvcmtpbmcgaGFyZDogIDIwJSAoMjAwLzEwMDApPENSPgorCVdvcmtpbmcgaGFyZDogICAwJSAoMS8xMDAwKSAgPENSPgorCVdvcmtpbmcgaGFyZDogMTAwJSAoMTAwMC8xMDAwKTxDUj4KKwlXb3JraW5nIGhhcmQ6IDEwMCUgKDEwMDAvMTAwMCksIGRvbmUuCisJRU9GCisKKwljYXQgPmluIDw8LVxFT0YgJiYKKwlwcm9ncmVzcyAxMDAKKwlwcm9ncmVzcyAyMDAKKwlwcm9ncmVzcyAxCisJcHJvZ3Jlc3MgMTAwMAorCUVPRgorCXRlc3QtdG9vbCBwcm9ncmVzcyAtLXRvdGFsPTEwMDAgIldvcmtpbmcgaGFyZCIgPGluIDI+c3RkZXJyICYmCisKKwlzaG93X2NyIDxzdGRlcnIgPm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb2dyZXNzIGRpc3BsYXkgd2l0aCB0aHJvdWdocHV0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCVdvcmtpbmcgaGFyZDogMTA8Q1I+CisJV29ya2luZyBoYXJkOiAyMCwgMjAwLjAwIEtpQiB8IDEwMC4wMCBLaUIvczxDUj4KKwlXb3JraW5nIGhhcmQ6IDMwLCAzMDAuMDAgS2lCIHwgMTAwLjAwIEtpQi9zPENSPgorCVdvcmtpbmcgaGFyZDogNDAsIDQwMC4wMCBLaUIgfCAxMDAuMDAgS2lCL3M8Q1I+CisJV29ya2luZyBoYXJkOiA0MCwgNDAwLjAwIEtpQiB8IDEwMC4wMCBLaUIvcywgZG9uZS4KKwlFT0YKKworCWNhdCA+aW4gPDwtXEVPRiAmJgorCXRocm91Z2hwdXQgMTAyNDAwIDEwMDAKKwl1cGRhdGUKKwlwcm9ncmVzcyAxMAorCXRocm91Z2hwdXQgMjA0ODAwIDIwMDAKKwl1cGRhdGUKKwlwcm9ncmVzcyAyMAorCXRocm91Z2hwdXQgMzA3MjAwIDMwMDAKKwl1cGRhdGUKKwlwcm9ncmVzcyAzMAorCXRocm91Z2hwdXQgNDA5NjAwIDQwMDAKKwl1cGRhdGUKKwlwcm9ncmVzcyA0MAorCUVPRgorCXRlc3QtdG9vbCBwcm9ncmVzcyAiV29ya2luZyBoYXJkIiA8aW4gMj5zdGRlcnIgJiYKKworCXNob3dfY3IgPHN0ZGVyciA+b3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvZ3Jlc3MgZGlzcGxheSB3aXRoIHRocm91Z2hwdXQgYW5kIHRvdGFsJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCVdvcmtpbmcgaGFyZDogIDI1JSAoMTAvNDApPENSPgorCVdvcmtpbmcgaGFyZDogIDUwJSAoMjAvNDApLCAyMDAuMDAgS2lCIHwgMTAwLjAwIEtpQi9zPENSPgorCVdvcmtpbmcgaGFyZDogIDc1JSAoMzAvNDApLCAzMDAuMDAgS2lCIHwgMTAwLjAwIEtpQi9zPENSPgorCVdvcmtpbmcgaGFyZDogMTAwJSAoNDAvNDApLCA0MDAuMDAgS2lCIHwgMTAwLjAwIEtpQi9zPENSPgorCVdvcmtpbmcgaGFyZDogMTAwJSAoNDAvNDApLCA0MDAuMDAgS2lCIHwgMTAwLjAwIEtpQi9zLCBkb25lLgorCUVPRgorCisJY2F0ID5pbiA8PC1cRU9GICYmCisJdGhyb3VnaHB1dCAxMDI0MDAgMTAwMAorCXByb2dyZXNzIDEwCisJdGhyb3VnaHB1dCAyMDQ4MDAgMjAwMAorCXByb2dyZXNzIDIwCisJdGhyb3VnaHB1dCAzMDcyMDAgMzAwMAorCXByb2dyZXNzIDMwCisJdGhyb3VnaHB1dCA0MDk2MDAgNDAwMAorCXByb2dyZXNzIDQwCisJRU9GCisJdGVzdC10b29sIHByb2dyZXNzIC0tdG90YWw9NDAgIldvcmtpbmcgaGFyZCIgPGluIDI+c3RkZXJyICYmCisKKwlzaG93X2NyIDxzdGRlcnIgPm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIHVwIGFmdGVyIHRocm91Z2hwdXQgc2hvcnRlbnMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJV29ya2luZyBoYXJkOiAxPENSPgorCVdvcmtpbmcgaGFyZDogMiwgODAwLjAwIEtpQiB8IDQwMC4wMCBLaUIvczxDUj4KKwlXb3JraW5nIGhhcmQ6IDMsIDEuMTcgTWlCIHwgNDAwLjAwIEtpQi9zICA8Q1I+CisJV29ya2luZyBoYXJkOiA0LCAxLjU2IE1pQiB8IDQwMC4wMCBLaUIvczxDUj4KKwlXb3JraW5nIGhhcmQ6IDQsIDEuNTYgTWlCIHwgNDAwLjAwIEtpQi9zLCBkb25lLgorCUVPRgorCisJY2F0ID5pbiA8PC1cRU9GICYmCisJdGhyb3VnaHB1dCA0MDk2MDAgMTAwMAorCXVwZGF0ZQorCXByb2dyZXNzIDEKKwl0aHJvdWdocHV0IDgxOTIwMCAyMDAwCisJdXBkYXRlCisJcHJvZ3Jlc3MgMgorCXRocm91Z2hwdXQgMTIyODgwMCAzMDAwCisJdXBkYXRlCisJcHJvZ3Jlc3MgMworCXRocm91Z2hwdXQgMTYzODQwMCA0MDAwCisJdXBkYXRlCisJcHJvZ3Jlc3MgNAorCUVPRgorCXRlc3QtdG9vbCBwcm9ncmVzcyAiV29ya2luZyBoYXJkIiA8aW4gMj5zdGRlcnIgJiYKKworCXNob3dfY3IgPHN0ZGVyciA+b3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgdXAgYWZ0ZXIgdGhyb3VnaHB1dCBzaG9ydGVucyBhIGxvdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlXb3JraW5nIGhhcmQ6IDE8Q1I+CisJV29ya2luZyBoYXJkOiAyLCAxMDAwLjAwIEtpQiB8IDEwMDAuMDAgS2lCL3M8Q1I+CisJV29ya2luZyBoYXJkOiAzLCAzLjAwIE1pQiB8IDEuNTAgTWlCL3MgICAgICA8Q1I+CisJV29ya2luZyBoYXJkOiAzLCAzLjAwIE1pQiB8IDEwMjQuMDAgS2lCL3MsIGRvbmUuCisJRU9GCisKKwljYXQgPmluIDw8LVxFT0YgJiYKKwl0aHJvdWdocHV0IDEgMTAwMAorCXVwZGF0ZQorCXByb2dyZXNzIDEKKwl0aHJvdWdocHV0IDEwMjQwMDAgMjAwMAorCXVwZGF0ZQorCXByb2dyZXNzIDIKKwl0aHJvdWdocHV0IDMxNDU3MjggMzAwMAorCXVwZGF0ZQorCXByb2dyZXNzIDMKKwlFT0YKKwl0ZXN0LXRvb2wgcHJvZ3Jlc3MgIldvcmtpbmcgaGFyZCIgPGluIDI+c3RkZXJyICYmCisKKwlzaG93X2NyIDxzdGRlcnIgPm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb2dyZXNzIGdlbmVyYXRlcyB0cmFjZXMnICcKKwljYXQgPmluIDw8LVxFT0YgJiYKKwl0aHJvdWdocHV0IDEwMjQwMCAxMDAwCisJdXBkYXRlCisJcHJvZ3Jlc3MgMTAKKwl0aHJvdWdocHV0IDIwNDgwMCAyMDAwCisJdXBkYXRlCisJcHJvZ3Jlc3MgMjAKKwl0aHJvdWdocHV0IDMwNzIwMCAzMDAwCisJdXBkYXRlCisJcHJvZ3Jlc3MgMzAKKwl0aHJvdWdocHV0IDQwOTYwMCA0MDAwCisJdXBkYXRlCisJcHJvZ3Jlc3MgNDAKKwlFT0YKKworCUdJVF9UUkFDRTJfRVZFTlQ9IiQocHdkKS90cmFjZS5ldmVudCIgdGVzdC10b29sIHByb2dyZXNzIC0tdG90YWw9NDAgXAorCQkiV29ya2luZyBoYXJkIiA8aW4gMj5zdGRlcnIgJiYKKworCSMgdDAyMTIvcGFyc2VfZXZlbnRzLnBlcmwgaW50ZW50aW9uYWxseSBvbWl0cyByZWdpb25zIGFuZCBkYXRhLgorCWdyZXAgLWUgInJlZ2lvbl9lbnRlciIgLWUgIlwiY2F0ZWdvcnlcIjpcInByb2dyZXNzXCIiIHRyYWNlLmV2ZW50ICYmCisJZ3JlcCAtZSAicmVnaW9uX2xlYXZlIiAtZSAiXCJjYXRlZ29yeVwiOlwicHJvZ3Jlc3NcIiIgdHJhY2UuZXZlbnQgJiYKKwlncmVwICJcImtleVwiOlwidG90YWxfb2JqZWN0c1wiLFwidmFsdWVcIjpcIjQwXCIiIHRyYWNlLmV2ZW50ICYmCisJZ3JlcCAiXCJrZXlcIjpcInRvdGFsX2J5dGVzXCIsXCJ2YWx1ZVwiOlwiNDA5NjAwXCIiIHRyYWNlLmV2ZW50CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoIGIvdC90MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAxM2M1YTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDAwLXJlYWQtdHJlZS1tLTN3YXkuc2gKQEAgLTAsMCArMSw1MTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGhyZWUgd2F5IG1lcmdlIHdpdGggcmVhZC10cmVlIC1tCisKK1RoaXMgdGVzdCB0cmllcyB0aHJlZS13YXkgbWVyZ2Ugd2l0aCByZWFkLXRyZWUgLW0KKworVGhlcmUgaXMgb25lIGFuY2VzdG9yIChjYWxsZWQgTyBmb3IgT3JpZ2luYWwpIGFuZCB0d28gYnJhbmNoZXMgQQorYW5kIEIgZGVyaXZlZCBmcm9tIGl0LiAgV2Ugd2FudCB0byBkbyBhIDMtd2F5IG1lcmdlIGJldHdlZW4gQSBhbmQKK0IsIHVzaW5nIE8gYXMgdGhlIGNvbW1vbiBhbmNlc3Rvci4KKworICAgIG1lcmdlIEEgTyBCCisKK0RlY2lzaW9ucyBhcmUgbWFkZSBieSBjb21wYXJpbmcgY29udGVudHMgb2YgTywgQSBhbmQgQiBwYXRobmFtZQorYnkgcGF0aG5hbWUuICBUaGUgcmVzdWx0IGlzIGRldGVybWluZWQgYnkgdGhlIGZvbGxvd2luZyBndWlkaW5nCitwcmluY2lwbGU6CisKKyAtIElmIG9ubHkgQSBkb2VzIHNvbWV0aGluZyB0byBpdCBhbmQgQiBkb2VzIG5vdCB0b3VjaCBpdCwgdGFrZQorICAgd2hhdGV2ZXIgQSBkb2VzLgorCisgLSBJZiBvbmx5IEIgZG9lcyBzb21ldGhpbmcgdG8gaXQgYW5kIEEgZG9lcyBub3QgdG91Y2ggaXQsIHRha2UKKyAgIHdoYXRldmVyIEIgZG9lcy4KKworIC0gSWYgYm90aCBBIGFuZCBCIGRvZXMgc29tZXRoaW5nIGJ1dCBpbiB0aGUgc2FtZSB3YXksIHRha2UKKyAgIHdoYXRldmVyIHRoZXkgZG8uCisKKyAtIElmIEEgYW5kIEIgZG9lcyBzb21ldGhpbmcgYnV0IGRpZmZlcmVudCB0aGluZ3MsIHdlIG5lZWQgYQorICAgMy13YXkgbWVyZ2U6CisKKyAgIC0gV2UgY2Fubm90IGRvIGFueXRoaW5nIGFib3V0IHRoZSBmb2xsb3dpbmcgY2FzZXM6CisKKyAgICAgKiBPIGRvZXMgbm90IGhhdmUgaXQuICBBIGFuZCBCIGJvdGggbXVzdCBiZSBhZGRpbmcgdG8gdGhlCisgICAgICAgc2FtZSBwYXRoIGluZGVwZW5kZW50bHkuCisKKyAgICAgKiBBIGRlbGV0ZXMgaXQuICBCIG11c3QgYmUgbW9kaWZ5aW5nLgorCisgICAtIE90aGVyd2lzZSwgQSBhbmQgQiBhcmUgbW9kaWZ5aW5nLiAgUnVuIDMtd2F5IG1lcmdlLgorCitGaXJzdCwgdGhlIGNhc2UgbWF0cml4LgorCisgLSBWZXJ0aWNhbCBheGlzIGlzIGZvciBBJ1wnJ3MgYWN0aW9ucy4KKyAtIEhvcml6b250YWwgYXhpcyBpcyBmb3IgQidcJydzIGFjdGlvbnMuCisKKy4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBBICAgICAgICBCIHwgTm8gQWN0aW9uICB8ICAgRGVsZXRlICAgfCAgIE1vZGlmeSAgIHwgICAgQWRkICAgICB8Cit8LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLXwKK3wgTm8gQWN0aW9uICB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfAorfCAgICAgICAgICAgIHwgc2VsZWN0IE8gICB8IGRlbGV0ZSAgICAgfCBzZWxlY3QgQiAgIHwgc2VsZWN0IEIgICB8Cit8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwKK3wtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tfAorfCBEZWxldGUgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfCAqKioqKioqKioqIHwgICAgY2FuICAgICB8Cit8ICAgICAgICAgICAgfCBkZWxldGUgICAgIHwgZGVsZXRlICAgICB8IG1lcmdlICAgICAgfCAgICBub3QgICAgIHwKK3wgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICBoYXBwZW4gICAgfAorfC0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS18Cit8IE1vZGlmeSAgICAgfCAgICAgICAgICAgIHwgKioqKioqKioqKiB8ID8/Pz8/Pz8/Pz8gfCAgICBjYW4gICAgIHwKK3wgICAgICAgICAgICB8IHNlbGVjdCBBICAgfCBtZXJnZSAgICAgIHwgc2VsZWN0IEE9QiB8ICAgIG5vdCAgICAgfAorfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfCBtZXJnZSAgICAgIHwgIGhhcHBlbiAgICB8Cit8LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLXwKK3wgQWRkICAgICAgICB8ICAgICAgICAgICAgfCAgICBjYW4gICAgIHwgICAgY2FuICAgICB8ID8/Pz8/Pz8/Pz8gfAorfCAgICAgICAgICAgIHwgc2VsZWN0IEEgICB8ICAgIG5vdCAgICAgfCAgICBub3QgICAgIHwgc2VsZWN0IEE9QiB8Cit8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgIGhhcHBlbiAgICB8ICBoYXBwZW4gICAgfCBtZXJnZSAgICAgIHwKKy4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorCitJbiBhZGRpdGlvbjoKKworIFNTOiBhIHNwZWNpYWwgY2FzZSBvZiBNTSwgd2hlcmUgQSBhbmQgQiBtYWtlcyB0aGUgc2FtZSBtb2RpZmljYXRpb24uCisgTEw6IGEgc3BlY2lhbCBjYXNlIG9mIEFBLCB3aGVyZSBBIGFuZCBCIGNyZWF0ZXMgdGhlIHNhbWUgZmlsZS4KKyBUVDogYSBzcGVjaWFsIGNhc2Ugb2YgTU0sIHdoZXJlIEEgYW5kIEIgbWFrZXMgbWVyZ2VhYmxlIGNoYW5nZXMuCisgREY6IGEgc3BlY2lhbCBjYXNlLCB3aGVyZSBBIG1ha2VzIGEgZGlyZWN0b3J5IGFuZCBCIG1ha2VzIGEgZmlsZS4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYWQtdHJlZS1tLTN3YXkuc2gKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUcml2aWFsICJtYWpvcml0eSB3aGVuIDMgc3RhZ2VzIGV4aXN0IiBtZXJnZSBwbHVzICMyQUxULCAjM0FMVAorIyBhbmQgIzVBTFQgdHJpdmlhbCBtZXJnZXMuCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCisxMDA2NDQgWCAyCUFBCisxMDA2NDQgWCAzCUFBCisxMDA2NDQgWCAwCUFOCisxMDA2NDQgWCAxCURECisxMDA2NDQgWCAzCURGCisxMDA2NDQgWCAyCURGL0RGCisxMDA2NDQgWCAxCURNCisxMDA2NDQgWCAzCURNCisxMDA2NDQgWCAxCUROCisxMDA2NDQgWCAzCUROCisxMDA2NDQgWCAwCUxMCisxMDA2NDQgWCAxCU1ECisxMDA2NDQgWCAyCU1ECisxMDA2NDQgWCAxCU1NCisxMDA2NDQgWCAyCU1NCisxMDA2NDQgWCAzCU1NCisxMDA2NDQgWCAwCU1OCisxMDA2NDQgWCAwCU5BCisxMDA2NDQgWCAxCU5ECisxMDA2NDQgWCAyCU5ECisxMDA2NDQgWCAwCU5NCisxMDA2NDQgWCAwCU5OCisxMDA2NDQgWCAwCVNTCisxMDA2NDQgWCAxCVRUCisxMDA2NDQgWCAyCVRUCisxMDA2NDQgWCAzCVRUCisxMDA2NDQgWCAyCVovQUEKKzEwMDY0NCBYIDMJWi9BQQorMTAwNjQ0IFggMAlaL0FOCisxMDA2NDQgWCAxCVovREQKKzEwMDY0NCBYIDEJWi9ETQorMTAwNjQ0IFggMwlaL0RNCisxMDA2NDQgWCAxCVovRE4KKzEwMDY0NCBYIDMJWi9ETgorMTAwNjQ0IFggMQlaL01ECisxMDA2NDQgWCAyCVovTUQKKzEwMDY0NCBYIDEJWi9NTQorMTAwNjQ0IFggMglaL01NCisxMDA2NDQgWCAzCVovTU0KKzEwMDY0NCBYIDAJWi9NTgorMTAwNjQ0IFggMAlaL05BCisxMDA2NDQgWCAxCVovTkQKKzEwMDY0NCBYIDIJWi9ORAorMTAwNjQ0IFggMAlaL05NCisxMDA2NDQgWCAwCVovTk4KK0VPRgorCitjaGVja19yZXN1bHQgKCkgeworCWdpdCBscy1maWxlcyAtLXN0YWdlIHwgc2VkIC1lICdzLyAnIiRPSURfUkVHRVgiJyAvIFggLycgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50Cit9CisKKyMgVGhpcyBpcyBkb25lIG9uIGFuIGVtcHR5IHdvcmsgZGlyZWN0b3J5LCB3aGljaCBpcyB0aGUgbm9ybWFsCisjIG1lcmdlIHBlcnNvbiBiZWhhdmlvdXIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczLXdheSBtZXJnZSB3aXRoIGdpdCByZWFkLXRyZWUgLW0sIGVtcHR5IGNhY2hlJyAnCisJcm0gLWZyIFtORE1BTFRTXVtORE1BTFRTRl0gWiAmJgorCXJtIC5naXQvaW5kZXggJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisJY2hlY2tfcmVzdWx0CisnCisKKyMgVGhpcyBzdGFydHMgb3V0IHdpdGggdGhlIGZpcnN0IGhlYWQsIHdoaWNoIGlzIHRoZSBub3JtYWwKKyMgcGF0Y2ggc3VibWl0dGVyIGJlaGF2aW91ci4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzMtd2F5IG1lcmdlIHdpdGggZ2l0IHJlYWQtdHJlZSAtbSwgbWF0Y2ggSCcgJworCXJtIC1mciBbTkRNQUxUU11bTkRNQUxUU0ZdIFogJiYKKwlybSAuZ2l0L2luZGV4ICYmCisJcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZV9BICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC11IC1hICYmCisJcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorCWNoZWNrX3Jlc3VsdAorJworCis6IDw8XEVORF9PRl9DQVNFX1RBQkxFCisKK1dlIGhhdmUgc28gZmFyIHRlc3RlZCBvbmx5IGVtcHR5IGluZGV4IGFuZCBjbGVhbi1hbmQtbWF0Y2hpbmctQSBpbmRleAorY2FzZSB3aGljaCBhcmUgdHJpdmlhbC4gIE1ha2Ugc3VyZSBpbmRleCByZXF1aXJlbWVudHMgYXJlIGFsc28KK2NoZWNrZWQuCisKKyJnaXQgcmVhZC10cmVlIC1tIE8gQSBCIgorCisgICAgIE8gICAgICAgQSAgICAgICBCICAgICAgICAgcmVzdWx0ICAgICAgaW5kZXggcmVxdWlyZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDEgIG1pc3NpbmcgbWlzc2luZyBtaXNzaW5nICAgLSAgICAgICAgICAgbXVzdCBub3QgZXhpc3QuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDIgIG1pc3NpbmcgbWlzc2luZyBleGlzdHMgICAgdGFrZSBCKiAgICAgbXVzdCBtYXRjaCBCLCBpZiBleGlzdHMuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDMgIG1pc3NpbmcgZXhpc3RzICBtaXNzaW5nICAgdGFrZSBBKiAgICAgbXVzdCBtYXRjaCBBLCBpZiBleGlzdHMuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDQgIG1pc3NpbmcgZXhpc3RzICBBIT1CICAgICAgbm8gbWVyZ2UgICAgbXVzdCBtYXRjaCBBIGFuZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwLXRvLWRhdGUsIGlmIGV4aXN0cy4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgNSAgbWlzc2luZyBleGlzdHMgIEE9PUIgICAgICB0YWtlIEEgICAgICBtdXN0IG1hdGNoIEEsIGlmIGV4aXN0cy4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgNiAgZXhpc3RzICBtaXNzaW5nIG1pc3NpbmcgICByZW1vdmUgICAgICBtdXN0IG5vdCBleGlzdC4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgNyAgZXhpc3RzICBtaXNzaW5nIE8hPUIgICAgICBubyBtZXJnZSAgICBtdXN0IG5vdCBleGlzdC4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgOCAgZXhpc3RzICBtaXNzaW5nIE89PUIgICAgICByZW1vdmUgICAgICBtdXN0IG5vdCBleGlzdC4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgOSAgZXhpc3RzICBPIT1BICAgIG1pc3NpbmcgICBubyBtZXJnZSAgICBtdXN0IG1hdGNoIEEgYW5kIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAtdG8tZGF0ZSwgaWYgZXhpc3RzLgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEwICBleGlzdHMgIE89PUEgICAgbWlzc2luZyAgIG5vIG1lcmdlICAgIG11c3QgbWF0Y2ggQQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDExICBleGlzdHMgIE8hPUEgICAgTyE9QiAgICAgIG5vIG1lcmdlICAgIG11c3QgbWF0Y2ggQSBhbmQgYmUKKyAgICAgICAgICAgICAgICAgICAgIEEhPUIgICAgICAgICAgICAgICAgICB1cC10by1kYXRlLCBpZiBleGlzdHMuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMTIgIGV4aXN0cyAgTyE9QSAgICBPIT1CICAgICAgdGFrZSBBICAgICAgbXVzdCBtYXRjaCBBLCBpZiBleGlzdHMuCisgICAgICAgICAgICAgICAgICAgICBBPT1CCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMTMgIGV4aXN0cyAgTyE9QSAgICBPPT1CICAgICAgdGFrZSBBICAgICAgbXVzdCBtYXRjaCBBLCBpZiBleGlzdHMuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMTQgIGV4aXN0cyAgTz09QSAgICBPIT1CICAgICAgdGFrZSBCICAgICAgaWYgZXhpc3RzLCBtdXN0IGVpdGhlciAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCBBIGFuZCBiZSB1cC10by1kYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yICgyKSBtYXRjaCBCLgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDE1ICBleGlzdHMgIE89PUEgICAgTz09QiAgICAgIHRha2UgQiAgICAgIG11c3QgbWF0Y2ggQSBpZiBleGlzdHMuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMTYgIGV4aXN0cyAgTz09QSAgICBPPT1CICAgICAgYmFyZiAgICAgICAgbXVzdCBtYXRjaCBBIGlmIGV4aXN0cy4KKyAgICAgKm11bHRpKiBpbiBvbmUgIGluIGFub3RoZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZTogd2UgbmVlZCB0byBiZSBjYXJlZnVsIGluIGNhc2UgMiBhbmQgMy4gIFRoZSB0cmVlIEEgbWF5IGNvbnRhaW4KK0RGIChmaWxlKSB3aGVuIHRyZWUgQiByZXF1aXJlIERGIHRvIGJlIGEgZGlyZWN0b3J5IGJ5IGhhdmluZyBERi9ERgorKGZpbGUpLgorCitFTkRfT0ZfQ0FTRV9UQUJMRQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxIC0gbXVzdCBub3QgaGF2ZSBhbiBlbnRyeSBub3QgaW4gQS4nICcKKwlybSAtZiAuZ2l0L2luZGV4IFhYICYmCisJZWNobyBYWCA+WFggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIFhYICYmCisJcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyIC0gbXVzdCBtYXRjaCBCIGluICFPICYmICFBICYmIEIgY2FzZS4nICcKKwlybSAtZiAuZ2l0L2luZGV4IE5BICYmCisJY3AgLm9yaWctQi9OQSBOQSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTkEgJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzIgLSBtYXRjaGluZyBCIGFsb25lIGlzIE9LIGluICFPICYmICFBICYmIEIgY2FzZS4nICcKKwlybSAtZiAuZ2l0L2luZGV4IE5BICYmCisJY3AgLm9yaWctQi9OQSBOQSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTkEgJiYKKwllY2hvIGV4dHJhID4+TkEgJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzMgLSBtdXN0IG1hdGNoIEEgaW4gIU8gJiYgQSAmJiAhQiBjYXNlLicgJworCXJtIC1mIC5naXQvaW5kZXggQU4gJiYKKwljcCAub3JpZy1BL0FOIEFOICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBTiAmJgorCXJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IgJiYKKwljaGVja19yZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMyAtIG1hdGNoaW5nIEEgYWxvbmUgaXMgT0sgaW4gIU8gJiYgQSAmJiAhQiBjYXNlLicgJworCXJtIC1mIC5naXQvaW5kZXggQU4gJiYKKwljcCAub3JpZy1BL0FOIEFOICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBTiAmJgorCWVjaG8gZXh0cmEgPj5BTiAmJgorCXJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMyAoZmFpbCkgLSBtdXN0IG1hdGNoIEEgaW4gIU8gJiYgQSAmJiAhQiBjYXNlLicgJworCXJtIC1mIC5naXQvaW5kZXggQU4gJiYKKwljcCAub3JpZy1BL0FOIEFOICYmCisJZWNobyBleHRyYSA+PkFOICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBTiAmJgorCXJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNCAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gIU8gJiYgQSAmJiBCICYmIEEhPUIgY2FzZS4nICcKKwlybSAtZiAuZ2l0L2luZGV4IEFBICYmCisJY3AgLm9yaWctQS9BQSBBQSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQUEgJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisJY2hlY2tfcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzQgKGZhaWwpIC0gbXVzdCBtYXRjaCBhbmQgYmUgdXAtdG8tZGF0ZSBpbiAhTyAmJiBBICYmIEIgJiYgQSE9QiBjYXNlLicgJworCXJtIC1mIC5naXQvaW5kZXggQUEgJiYKKwljcCAub3JpZy1BL0FBIEFBICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBQSAmJgorCWVjaG8gZXh0cmEgPj5BQSAmJgorCXJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNCAoZmFpbCkgLSBtdXN0IG1hdGNoIGFuZCBiZSB1cC10by1kYXRlIGluICFPICYmIEEgJiYgQiAmJiBBIT1CIGNhc2UuJyAnCisJcm0gLWYgLmdpdC9pbmRleCBBQSAmJgorCWNwIC5vcmlnLUEvQUEgQUEgJiYKKwllY2hvIGV4dHJhID4+QUEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEFBICYmCisJcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc1IC0gbXVzdCBtYXRjaCBpbiAhTyAmJiBBICYmIEIgJiYgQT09QiBjYXNlLicgJworCXJtIC1mIC5naXQvaW5kZXggTEwgJiYKKwljcCAub3JpZy1BL0xMIExMICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBMTCAmJgorCXJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IgJiYKKwljaGVja19yZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNSAtIG11c3QgbWF0Y2ggaW4gIU8gJiYgQSAmJiBCICYmIEE9PUIgY2FzZS4nICcKKwlybSAtZiAuZ2l0L2luZGV4IExMICYmCisJY3AgLm9yaWctQS9MTCBMTCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTEwgJiYKKwllY2hvIGV4dHJhID4+TEwgJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisJY2hlY2tfcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzUgKGZhaWwpIC0gbXVzdCBtYXRjaCBBIGluICFPICYmIEEgJiYgQiAmJiBBPT1CIGNhc2UuJyAnCisJcm0gLWYgLmdpdC9pbmRleCBMTCAmJgorCWNwIC5vcmlnLUEvTEwgTEwgJiYKKwllY2hvIGV4dHJhID4+TEwgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIExMICYmCisJcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc2IC0gbXVzdCBub3QgZXhpc3QgaW4gTyAmJiAhQSAmJiAhQiBjYXNlJyAnCisJcm0gLWYgLmdpdC9pbmRleCBERCAmJgorCWVjaG8gREQgPkREICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBERCAmJgorCXJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNyAtIG11c3Qgbm90IGV4aXN0IGluIE8gJiYgIUEgJiYgQiAmJiBPIT1CIGNhc2UnICcKKwlybSAtZiAuZ2l0L2luZGV4IERNICYmCisJY3AgLm9yaWctQi9ETSBETSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgRE0gJiYKKwlyZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzggLSBtdXN0IG5vdCBleGlzdCBpbiBPICYmICFBICYmIEIgJiYgTz09QiBjYXNlJyAnCisJcm0gLWYgLmdpdC9pbmRleCBETiAmJgorCWNwIC5vcmlnLUIvRE4gRE4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEROICYmCisJcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc5IC0gbXVzdCBtYXRjaCBhbmQgYmUgdXAtdG8tZGF0ZSBpbiBPICYmIEEgJiYgIUIgJiYgTyE9QSBjYXNlJyAnCisJcm0gLWYgLmdpdC9pbmRleCBNRCAmJgorCWNwIC5vcmlnLUEvTUQgTUQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE1EICYmCisJcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorCWNoZWNrX3Jlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc5IChmYWlsKSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmICFCICYmIE8hPUEgY2FzZScgJworCXJtIC1mIC5naXQvaW5kZXggTUQgJiYKKwljcCAub3JpZy1BL01EIE1EICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBNRCAmJgorCWVjaG8gZXh0cmEgPj5NRCAmJgorCXJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnOSAoZmFpbCkgLSBtdXN0IG1hdGNoIGFuZCBiZSB1cC10by1kYXRlIGluIE8gJiYgQSAmJiAhQiAmJiBPIT1BIGNhc2UnICcKKwlybSAtZiAuZ2l0L2luZGV4IE1EICYmCisJY3AgLm9yaWctQS9NRCBNRCAmJgorCWVjaG8gZXh0cmEgPj5NRCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTUQgJiYKKwlyZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwIC0gbXVzdCBtYXRjaCBhbmQgYmUgdXAtdG8tZGF0ZSBpbiBPICYmIEEgJiYgIUIgJiYgTz09QSBjYXNlJyAnCisJcm0gLWYgLmdpdC9pbmRleCBORCAmJgorCWNwIC5vcmlnLUEvTkQgTkQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE5EICYmCisJcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorCWNoZWNrX3Jlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMCAoZmFpbCkgLSBtdXN0IG1hdGNoIGFuZCBiZSB1cC10by1kYXRlIGluIE8gJiYgQSAmJiAhQiAmJiBPPT1BIGNhc2UnICcKKwlybSAtZiAuZ2l0L2luZGV4IE5EICYmCisJY3AgLm9yaWctQS9ORCBORCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTkQgJiYKKwllY2hvIGV4dHJhID4+TkQgJiYKKwlyZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwIChmYWlsKSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmICFCICYmIE89PUEgY2FzZScgJworCXJtIC1mIC5naXQvaW5kZXggTkQgJiYKKwljcCAub3JpZy1BL05EIE5EICYmCisJZWNobyBleHRyYSA+Pk5EICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBORCAmJgorCXJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTEgLSBtdXN0IG1hdGNoIGFuZCBiZSB1cC10by1kYXRlIGluIE8gJiYgQSAmJiBCICYmIE8hPUEgJiYgTyE9QiAmJiBBIT1CIGNhc2UnICcKKwlybSAtZiAuZ2l0L2luZGV4IE1NICYmCisJY3AgLm9yaWctQS9NTSBNTSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTU0gJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisJY2hlY2tfcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExIChmYWlsKSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmIEIgJiYgTyE9QSAmJiBPIT1CICYmIEEhPUIgY2FzZScgJworCXJtIC1mIC5naXQvaW5kZXggTU0gJiYKKwljcCAub3JpZy1BL01NIE1NICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBNTSAmJgorCWVjaG8gZXh0cmEgPj5NTSAmJgorCXJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTEgKGZhaWwpIC0gbXVzdCBtYXRjaCBhbmQgYmUgdXAtdG8tZGF0ZSBpbiBPICYmIEEgJiYgQiAmJiBPIT1BICYmIE8hPUIgJiYgQSE9QiBjYXNlJyAnCisJcm0gLWYgLmdpdC9pbmRleCBNTSAmJgorCWNwIC5vcmlnLUEvTU0gTU0gJiYKKwllY2hvIGV4dHJhID4+TU0gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE1NICYmCisJcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMiAtIG11c3QgbWF0Y2ggQSBpbiBPICYmIEEgJiYgQiAmJiBPIT1BICYmIEE9PUIgY2FzZScgJworCXJtIC1mIC5naXQvaW5kZXggU1MgJiYKKwljcCAub3JpZy1BL1NTIFNTICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBTUyAmJgorCXJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IgJiYKKwljaGVja19yZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTIgLSBtdXN0IG1hdGNoIEEgaW4gTyAmJiBBICYmIEIgJiYgTyE9QSAmJiBBPT1CIGNhc2UnICcKKwlybSAtZiAuZ2l0L2luZGV4IFNTICYmCisJY3AgLm9yaWctQS9TUyBTUyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgU1MgJiYKKwllY2hvIGV4dHJhID4+U1MgJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisJY2hlY2tfcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEyIChmYWlsKSAtIG11c3QgbWF0Y2ggQSBpbiBPICYmIEEgJiYgQiAmJiBPIT1BICYmIEE9PUIgY2FzZScgJworCXJtIC1mIC5naXQvaW5kZXggU1MgJiYKKwljcCAub3JpZy1BL1NTIFNTICYmCisJZWNobyBleHRyYSA+PlNTICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBTUyAmJgorCXJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTMgLSBtdXN0IG1hdGNoIEEgaW4gTyAmJiBBICYmIEIgJiYgTyE9QSAmJiBPPT1CIGNhc2UnICcKKwlybSAtZiAuZ2l0L2luZGV4IE1OICYmCisJY3AgLm9yaWctQS9NTiBNTiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTU4gJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisJY2hlY2tfcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzIC0gbXVzdCBtYXRjaCBBIGluIE8gJiYgQSAmJiBCICYmIE8hPUEgJiYgTz09QiBjYXNlJyAnCisJcm0gLWYgLmdpdC9pbmRleCBNTiAmJgorCWNwIC5vcmlnLUEvTU4gTU4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE1OICYmCisJZWNobyBleHRyYSA+Pk1OICYmCisJcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorCWNoZWNrX3Jlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxNCAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmIEIgJiYgTz09QSAmJiBPIT1CIGNhc2UnICcKKwlybSAtZiAuZ2l0L2luZGV4IE5NICYmCisJY3AgLm9yaWctQS9OTSBOTSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTk0gJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisJY2hlY2tfcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzE0IC0gbWF5IG1hdGNoIEIgaW4gTyAmJiBBICYmIEIgJiYgTz09QSAmJiBPIT1CIGNhc2UnICcKKwlybSAtZiAuZ2l0L2luZGV4IE5NICYmCisJY3AgLm9yaWctQi9OTSBOTSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTk0gJiYKKwllY2hvIGV4dHJhID4+Tk0gJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisJY2hlY2tfcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzE0IChmYWlsKSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmIEIgJiYgTz09QSAmJiBPIT1CIGNhc2UnICcKKwlybSAtZiAuZ2l0L2luZGV4IE5NICYmCisJY3AgLm9yaWctQS9OTSBOTSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTk0gJiYKKwllY2hvIGV4dHJhID4+Tk0gJiYKKwlyZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzE0IChmYWlsKSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmIEIgJiYgTz09QSAmJiBPIT1CIGNhc2UnICcKKwlybSAtZiAuZ2l0L2luZGV4IE5NICYmCisJY3AgLm9yaWctQS9OTSBOTSAmJgorCWVjaG8gZXh0cmEgPj5OTSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTk0gJiYKKwlyZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzE1IC0gbXVzdCBtYXRjaCBBIGluIE8gJiYgQSAmJiBCICYmIE89PUEgJiYgTz09QiBjYXNlJyAnCisJcm0gLWYgLmdpdC9pbmRleCBOTiAmJgorCWNwIC5vcmlnLUEvTk4gTk4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE5OICYmCisJcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorCWNoZWNrX3Jlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxNSAtIG11c3QgbWF0Y2ggQSBpbiBPICYmIEEgJiYgQiAmJiBPPT1BICYmIE89PUIgY2FzZScgJworCXJtIC1mIC5naXQvaW5kZXggTk4gJiYKKwljcCAub3JpZy1BL05OIE5OICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBOTiAmJgorCWVjaG8gZXh0cmEgPj5OTiAmJgorCXJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IgJiYKKwljaGVja19yZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTUgKGZhaWwpIC0gbXVzdCBtYXRjaCBBIGluIE8gJiYgQSAmJiBCICYmIE89PUEgJiYgTz09QiBjYXNlJyAnCisJcm0gLWYgLmdpdC9pbmRleCBOTiAmJgorCWNwIC5vcmlnLUEvTk4gTk4gJiYKKwllY2hvIGV4dHJhID4+Tk4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE5OICYmCisJcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxNiAtIEEgbWF0Y2hlcyBpbiBvbmUgYW5kIEIgbWF0Y2hlcyBpbiBhbm90aGVyLicgJworCXJtIC1mIC5naXQvaW5kZXggRjE2ICYmCisJZWNobyBGMTYgPkYxNiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgRjE2ICYmCisJdHJlZTA9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwllY2hvIEUxNiA+RjE2ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBGMTYgJiYKKwl0cmVlMT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWUwICR0cmVlMSAkdHJlZTEgJHRyZWUwICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDAxLXJlYWQtdHJlZS1tLTJ3YXkuc2ggYi90L3QxMDAxLXJlYWQtdHJlZS1tLTJ3YXkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTA1N2E5NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMDEtcmVhZC10cmVlLW0tMndheS5zaApAQCAtMCwwICsxLDQxNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUd28gd2F5IG1lcmdlIHdpdGggcmVhZC10cmVlIC1tICRIICRNCisKK1RoaXMgdGVzdCB0cmllcyB0d28td2F5IG1lcmdlIChha2EgZmFzdC1mb3J3YXJkIHdpdGggY2FycnkgZm9yd2FyZCkuCisKK1RoZXJlIGlzIHRoZSBoZWFkIChjYWxsZWQgSCkgYW5kIGFub3RoZXIgY29tbWl0IChjYWxsZWQgTSksIHdoaWNoIGlzCitzaW1wbHkgYWhlYWQgb2YgSC4gIFRoZSBpbmRleCBhbmQgdGhlIHdvcmsgdHJlZSBjb250YWlucyBhIHN0YXRlIHRoYXQKK2lzIGRlcml2ZWQgZnJvbSBILCBidXQgbWF5IGFsc28gaGF2ZSBsb2NhbCBjaGFuZ2VzLiAgVGhpcyB0ZXN0IGNoZWNrcworYWxsIHRoZSBjb21iaW5hdGlvbnMgZGVzY3JpYmVkIGluIHRoZSB0d28tdHJlZSBtZXJnZSAiY2FycnkgZm9yd2FyZCIKK3J1bGVzLCBmb3VuZCBpbiA8RG9jdW1lbnRhdGlvbi9naXQgcmVhZC10cmVlLnR4dD4uCisKK0luIHRoZSB0ZXN0LCB0aGVzZSBwYXRocyBhcmUgdXNlZDoKKwlib3piYXIgIC0gaW4gSCwgc3RheXMgaW4gTSwgbW9kaWZpZWQgZnJvbSBib3piYXIgdG8gZ251c3RvCisJZnJvdHogICAtIG5vdCBpbiBIIGFkZGVkIGluIE0KKwluaXRmb2wgIC0gaW4gSCwgc3RheXMgaW4gTSB1bm1vZGlmaWVkCisJcmV6cm92ICAtIGluIEgsIGRlbGV0ZWQgaW4gTQorCXlvbWluICAgLSBub3QgaW4gSCBvciBNCisnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYWQtdHJlZS5zaAorCityZWFkX3RyZWVfdHdvd2F5ICgpIHsKKyAgICBnaXQgcmVhZC10cmVlIC1tICIkMSIgIiQyIiAmJiBnaXQgbHMtZmlsZXMgLS1zdGFnZQorfQorCitjb21wYXJlX2NoYW5nZSAoKSB7CisJc2VkIC1uID5jdXJyZW50IFwKKwkgICAgLWUgJy9eLS0tIC9kOyAvXisrKyAvZDsgL15AQCAvZDsnIFwKKwkgICAgLWUgJ3MvXlwoWy0rXVswLTddWzAtN11bMC03XVswLTddWzAtN11bMC03XVwpICciJE9JRF9SRUdFWCInIC9cMSBYIC9wJyBcCisJICAgICIkMSIKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50Cit9CisKK2NoZWNrX2NhY2hlX2F0ICgpIHsKKwljbGVhbl9pZl9lbXB0eT0kKGdpdCBkaWZmLWZpbGVzIC0tICIkMSIpCisJY2FzZSAiJGNsZWFuX2lmX2VtcHR5IiBpbgorCScnKSAgZWNobyAiJDE6IGNsZWFuIiA7OworCT8qKSAgZWNobyAiJDE6IGRpcnR5IiA7OworCWVzYWMKKwljYXNlICIkMiwkY2xlYW5faWZfZW1wdHkiIGluCisJY2xlYW4sKQkJOiAgICAgOzsKKwljbGVhbiw/KikJZmFsc2UgOzsKKwlkaXJ0eSwpCQlmYWxzZSA7OworCWRpcnR5LD8qKQk6ICAgICA7OworCWVzYWMKK30KKworY2F0ID5ib3piYXItb2xkIDw8XEVPRgorVGhpcyBpcyBhIHNhbXBsZSBmaWxlIHVzZWQgaW4gdHdvLXdheSBmYXN0LWZvcndhcmQgbWVyZ2UKK3Rlc3RzLiAgSXRzIHNlY29uZCBsaW5lIGVuZHMgd2l0aCBhIG1hZ2ljIHdvcmQgYm96YmFyCit3aGljaCB3aWxsIGJlIG1vZGlmaWVkIGJ5IHRoZSBtZXJnZWQgaGVhZCB0byBnbnVzdG8uCitJdCBoYXMgc29tZSBleHRyYSBsaW5lcyBzbyB0aGF0IGV4dGVybmFsIHRvb2xzIGNhbgorc3VjY2Vzc2Z1bGx5IG1lcmdlIGluZGVwZW5kZW50IGNoYW5nZXMgbWFkZSB0byBsYXRlcgorbGluZXMgKHN1Y2ggYXMgdGhpcyBvbmUpLCBhdm9pZGluZyBsaW5lIGNvbmZsaWN0cy4KK0VPRgorCitzZWQgLWUgJ3MvYm96YmFyL2dudXN0byAoZWFybGllciBib3piYXIpLycgYm96YmFyLW9sZCA+Ym96YmFyLW5ldworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gZnJvdHogPmZyb3R6ICYmCisJZWNobyBuaXRmb2wgPm5pdGZvbCAmJgorCWNhdCBib3piYXItb2xkID5ib3piYXIgJiYKKwllY2hvIHJlenJvdiA+cmV6cm92ICYmCisJZWNobyB5b21pbiA+eW9taW4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG5pdGZvbCBib3piYXIgcmV6cm92ICYmCisJdHJlZUg9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwllY2hvIHRyZWVIICR0cmVlSCAmJgorCWdpdCBscy10cmVlICR0cmVlSCAmJgorCisJY2F0IGJvemJhci1uZXcgPmJvemJhciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZnJvdHogYm96YmFyIC0tZm9yY2UtcmVtb3ZlIHJlenJvdiAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID5NLm91dCAmJgorCXRyZWVNPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZWNobyB0cmVlTSAkdHJlZU0gJiYKKwlnaXQgbHMtdHJlZSAkdHJlZU0gJiYKKwlnaXQgZGlmZi10cmVlICR0cmVlSCAkdHJlZU0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMSwgMiwgMyAtIG5vIGNhcnJ5IGZvcndhcmQnICcKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjEtMy5vdXQgJiYKKwl0ZXN0X2NtcCBNLm91dCAxLTMub3V0ICYmCisJY2hlY2tfY2FjaGVfYXQgYm96YmFyIGRpcnR5ICYmCisJY2hlY2tfY2FjaGVfYXQgZnJvdHogZGlydHkgJiYKKwljaGVja19jYWNoZV9hdCBuaXRmb2wgZGlydHkKKycKK2VjaG8gJysxMDA2NDQgWCAwCXlvbWluJyA+ZXhwZWN0ZWQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNCAtIGNhcnJ5IGZvcndhcmQgbG9jYWwgYWRkaXRpb24uJyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCXJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB5b21pbiAmJgorCXJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID40Lm91dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggTS5vdXQgNC5vdXQgPjRkaWZmLm91dCAmJgorCWNvbXBhcmVfY2hhbmdlIDRkaWZmLm91dCBleHBlY3RlZCAmJgorCWNoZWNrX2NhY2hlX2F0IHlvbWluIGNsZWFuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzUgLSBjYXJyeSBmb3J3YXJkIGxvY2FsIGFkZGl0aW9uLicgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorCWVjaG8geW9taW4gPnlvbWluICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB5b21pbiAmJgorCWVjaG8geW9taW4geW9taW4gPnlvbWluICYmCisJcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjUub3V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCBNLm91dCA1Lm91dCA+NWRpZmYub3V0ICYmCisJY29tcGFyZV9jaGFuZ2UgNWRpZmYub3V0IGV4cGVjdGVkICYmCisJY2hlY2tfY2FjaGVfYXQgeW9taW4gZGlydHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNiAtIGxvY2FsIGFkZGl0aW9uIGFscmVhZHkgaGFzIHRoZSBzYW1lLicgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZnJvdHogJiYKKwlyZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU0gJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+Ni5vdXQgJiYKKwl0ZXN0X2NtcCBNLm91dCA2Lm91dCAmJgorCWNoZWNrX2NhY2hlX2F0IGZyb3R6IGNsZWFuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzcgLSBsb2NhbCBhZGRpdGlvbiBhbHJlYWR5IGhhcyB0aGUgc2FtZS4nICcKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLXEgLWEgJiYKKwllY2hvIGZyb3R6ID5mcm90eiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZnJvdHogJiYKKwllY2hvIGZyb3R6IGZyb3R6ID5mcm90eiAmJgorCXJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID43Lm91dCAmJgorCXRlc3RfY21wIE0ub3V0IDcub3V0ICYmCisJY2hlY2tfY2FjaGVfYXQgZnJvdHogZGlydHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnOCAtIGNvbmZsaWN0aW5nIGFkZGl0aW9uLicgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorCWVjaG8gZnJvdHogZnJvdHogPmZyb3R6ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmcm90eiAmJgorCWlmIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc5IC0gY29uZmxpY3RpbmcgYWRkaXRpb24uJyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCXJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisJZWNobyBmcm90eiBmcm90eiA+ZnJvdHogJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZyb3R6ICYmCisJZWNobyBmcm90eiA+ZnJvdHogJiYKKwlpZiByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTAgLSBwYXRoIHJlbW92ZWQuJyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCXJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisJZWNobyByZXpyb3YgPnJlenJvdiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmV6cm92ICYmCisJcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjEwLm91dCAmJgorCXRlc3RfY21wIE0ub3V0IDEwLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMSAtIGRpcnR5IHBhdGggcmVtb3ZlZC4nICcKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLXEgLWEgJiYKKwllY2hvIHJlenJvdiA+cmV6cm92ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByZXpyb3YgJiYKKwllY2hvIHJlenJvdiByZXpyb3YgPnJlenJvdiAmJgorCWlmIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMiAtIHVubWF0Y2hpbmcgbG9jYWwgY2hhbmdlcyBiZWluZyByZW1vdmVkLicgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorCWVjaG8gcmV6cm92IHJlenJvdiA+cmV6cm92ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByZXpyb3YgJiYKKwlpZiByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTMgLSB1bm1hdGNoaW5nIGxvY2FsIGNoYW5nZXMgYmVpbmcgcmVtb3ZlZC4nICcKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLXEgLWEgJiYKKwllY2hvIHJlenJvdiByZXpyb3YgPnJlenJvdiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmV6cm92ICYmCisJZWNobyByZXpyb3YgPnJlenJvdiAmJgorCWlmIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaQorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCistMTAwNjQ0IFggMAluaXRmb2wKKysxMDA2NDQgWCAwCW5pdGZvbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzE0IC0gdW5jaGFuZ2VkIGluIHR3byBoZWFkcy4nICcKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLXEgLWEgJiYKKwllY2hvIG5pdGZvbCBuaXRmb2wgPm5pdGZvbCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbml0Zm9sICYmCisJcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjE0Lm91dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggTS5vdXQgMTQub3V0ID4xNGRpZmYub3V0ICYmCisJY29tcGFyZV9jaGFuZ2UgMTRkaWZmLm91dCBleHBlY3RlZCAmJgorCWNoZWNrX2NhY2hlX2F0IG5pdGZvbCBjbGVhbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxNSAtIHVuY2hhbmdlZCBpbiB0d28gaGVhZHMuJyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCXJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisJZWNobyBuaXRmb2wgbml0Zm9sID5uaXRmb2wgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG5pdGZvbCAmJgorCWVjaG8gbml0Zm9sIG5pdGZvbCBuaXRmb2wgPm5pdGZvbCAmJgorCXJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID4xNS5vdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IE0ub3V0IDE1Lm91dCA+MTVkaWZmLm91dCAmJgorCWNvbXBhcmVfY2hhbmdlIDE1ZGlmZi5vdXQgZXhwZWN0ZWQgJiYKKwljaGVja19jYWNoZV9hdCBuaXRmb2wgZGlydHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTYgLSBjb25mbGljdGluZyBsb2NhbCBjaGFuZ2UuJyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCXJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisJZWNobyBib3piYXIgYm96YmFyID5ib3piYXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJvemJhciAmJgorCWlmIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxNyAtIGNvbmZsaWN0aW5nIGxvY2FsIGNoYW5nZS4nICcKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLXEgLWEgJiYKKwllY2hvIGJvemJhciBib3piYXIgPmJvemJhciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYm96YmFyICYmCisJZWNobyBib3piYXIgYm96YmFyIGJvemJhciA+Ym96YmFyICYmCisJaWYgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzE4IC0gbG9jYWwgY2hhbmdlIGFscmVhZHkgaGF2aW5nIGEgZ29vZCByZXN1bHQuJyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCXJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisJY2F0IGJvemJhci1uZXcgPmJvemJhciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYm96YmFyICYmCisJcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjE4Lm91dCAmJgorCXRlc3RfY21wIE0ub3V0IDE4Lm91dCAmJgorCWNoZWNrX2NhY2hlX2F0IGJvemJhciBjbGVhbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxOSAtIGxvY2FsIGNoYW5nZSBhbHJlYWR5IGhhdmluZyBhIGdvb2QgcmVzdWx0LCBmdXJ0aGVyIG1vZGlmaWVkLicgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorCWNhdCBib3piYXItbmV3ID5ib3piYXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJvemJhciAmJgorCWVjaG8gZ251c3RvIGdudXN0byA+Ym96YmFyICYmCisJcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjE5Lm91dCAmJgorCXRlc3RfY21wIE0ub3V0IDE5Lm91dCAmJgorCWNoZWNrX2NhY2hlX2F0IGJvemJhciBkaXJ0eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyMCAtIG5vIGxvY2FsIGNoYW5nZSwgdXNlIG5ldyB0cmVlLicgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorCWNhdCBib3piYXItb2xkID5ib3piYXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJvemJhciAmJgorCXJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID4yMC5vdXQgJiYKKwl0ZXN0X2NtcCBNLm91dCAyMC5vdXQgJiYKKwljaGVja19jYWNoZV9hdCBib3piYXIgZGlydHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMjEgLSBubyBsb2NhbCBjaGFuZ2UsIGRpcnR5IGNhY2hlLicgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorCWNhdCBib3piYXItb2xkID5ib3piYXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJvemJhciAmJgorCWVjaG8gZ251c3RvIGdudXN0byA+Ym96YmFyICYmCisJaWYgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpCisnCisKKyMgVGhpcyBmYWlscyB3aXRoIHN0cmFpZ2h0IHR3by13YXkgZmFzdC1mb3J3YXJkLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnMjIgLSBsb2NhbCBjaGFuZ2UgY2FjaGUgdXBkYXRlZC4nICcKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLXEgLWEgJiYKKwlzZWQgLWUgInMvc3VjaCBhcy9TVUNIIEFTLyIgYm96YmFyLW9sZCA+Ym96YmFyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKwlpZiByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmkKKycKKworIyBBbHNvIG1ha2Ugc3VyZSB3ZSBkaWQgbm90IGJyZWFrIERGIHZzIERGL0RGIGNhc2UuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdERiB2cyBERi9ERiBjYXNlIHNldHVwLicgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwllY2hvIERGID5ERiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgREYgJiYKKwl0cmVlREY9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwllY2hvIHRyZWVERiAkdHJlZURGICYmCisJZ2l0IGxzLXRyZWUgJHRyZWVERiAmJgorCisJcm0gLWYgREYgJiYKKwlta2RpciBERiAmJgorCWVjaG8gREYvREYgPkRGL0RGICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBERiBERi9ERiAmJgorCXRyZWVERkRGPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZWNobyB0cmVlREZERiAkdHJlZURGREYgJiYKKwlnaXQgbHMtdHJlZSAkdHJlZURGREYgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+REZERi5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnREYgdnMgREYvREYgY2FzZSB0ZXN0LicgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlybSAtZnIgREYgJiYKKwllY2hvIERGID5ERiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgREYgJiYKKwlyZWFkX3RyZWVfdHdvd2F5ICR0cmVlREYgJHRyZWVERkRGICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPkRGREZjaGVjay5vdXQgJiYKKwl0ZXN0X2NtcCBERkRGLm91dCBERkRGY2hlY2sub3V0ICYmCisJY2hlY2tfY2FjaGVfYXQgREYvREYgZGlydHkgJiYKKwk6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2EvYiAodW50cmFja2VkKSB2cyBhIGNhc2Ugc2V0dXAuJyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCTogPmEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgJiYKKwl0cmVlTT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWVjaG8gdHJlZU0gJHRyZWVNICYmCisJZ2l0IGxzLXRyZWUgJHRyZWVNICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPnRyZWVNLm91dCAmJgorCisJcm0gLWYgYSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgYSAmJgorCW1rZGlyIGEgJiYKKwk6ID5hL2IgJiYKKwl0cmVlSD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWVjaG8gdHJlZUggJHRyZWVIICYmCisJZ2l0IGxzLXRyZWUgJHRyZWVICisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2EvYiAodW50cmFja2VkKSB2cyBhLCBwbHVzIGMvZCBjYXNlIHRlc3QuJyAnCisJcmVhZF90cmVlX3VfbXVzdF9mYWlsIC11IC1tICIkdHJlZUgiICIkdHJlZU0iICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgJiYKKwl0ZXN0IC1mIGEvYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgc3VwcG9ydHMgdGhlIHN1cGVyLXByZWZpeCcgJworCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQllcnJvcjogVXBkYXRpbmcgJ1wnJ2ZpY3Rpb25hbC9hJ1wnJyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiBpdAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtLXN1cGVyLXByZWZpeCBmaWN0aW9uYWwvIHJlYWQtdHJlZSAtdSAtbSAiJHRyZWVIIiAiJHRyZWVNIiAyPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYS9iIHZzIGEsIHBsdXMgYy9kIGNhc2Ugc2V0dXAuJyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCXJtIC1mciBhICYmCisJOiA+YSAmJgorCW1rZGlyIGMgJiYKKwk6ID5jL2QgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgYy9kICYmCisJdHJlZU09JChnaXQgd3JpdGUtdHJlZSkgJiYKKwllY2hvIHRyZWVNICR0cmVlTSAmJgorCWdpdCBscy10cmVlICR0cmVlTSAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID50cmVlTS5vdXQgJiYKKworCXJtIC1mIGEgJiYKKwlta2RpciBhICYmCisJOiA+YS9iICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBhIGEvYiAmJgorCXRyZWVIPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZWNobyB0cmVlSCAkdHJlZUggJiYKKwlnaXQgbHMtdHJlZSAkdHJlZUgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYS9iIHZzIGEsIHBsdXMgYy9kIGNhc2UgdGVzdC4nICcKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLXUgLW0gIiR0cmVlSCIgIiR0cmVlTSIgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSB8IHRlZSA+dHJlZU1jaGVjay5vdXQgJiYKKwl0ZXN0X2NtcCB0cmVlTS5vdXQgdHJlZU1jaGVjay5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLW0gcmVmZXJlbmNlcyB0aGUgY29ycmVjdCBtb2RpZmllZCB0cmVlJyAnCisJZWNobyA+ZmlsZS1hICYmCisJZWNobyA+ZmlsZS1iICYmCisJZ2l0IGFkZCBmaWxlLWEgZmlsZS1iICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAidGVzdCBmb3IgY29ycmVjdCBtb2RpZmllZCB0cmVlIiAmJgorCWdpdCBicmFuY2ggaW5pdGlhbC1tb2QgJiYKKwllY2hvIGIgPmZpbGUtYiAmJgorCWdpdCBjb21taXQgLWEgLW0gIkIiICYmCisJZWNobyBhID5maWxlLWEgJiYKKwlnaXQgYWRkIGZpbGUtYSAmJgorCWdpdCBscy10cmVlICQoZ2l0IHdyaXRlLXRyZWUpIGZpbGUtYSA+ZXhwZWN0ICYmCisJcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSBIRUFEIGluaXRpYWwtbW9kICYmCisJZ2l0IGxzLXRyZWUgJChnaXQgd3JpdGUtdHJlZSkgZmlsZS1hID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAwMi1yZWFkLXRyZWUtbS11LTJ3YXkuc2ggYi90L3QxMDAyLXJlYWQtdHJlZS1tLXUtMndheS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YzA1ZjVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAwMi1yZWFkLXRyZWUtbS11LTJ3YXkuc2gKQEAgLTAsMCArMSwzNDggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVHdvIHdheSBtZXJnZSB3aXRoIHJlYWQtdHJlZSAtbSAtdSAkSCAkTQorCitUaGlzIGlzIGlkZW50aWNhbCB0byB0MTAwMSwgYnV0IHVzZXMgLXUgdG8gdXBkYXRlIHRoZSB3b3JrIHRyZWUgYXMgd2VsbC4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUuc2gKKworY29tcGFyZV9jaGFuZ2UgKCkgeworCXNlZCA+Y3VycmVudCBcCisJICAgIC1lICcxey9eZGlmZiAtLWdpdCAvZDt9JyBcCisJICAgIC1lICcyey9eaW5kZXggL2Q7fScgXAorCSAgICAtZSAnL14tLS0gL2Q7IC9eKysrIC9kOyAvXkBAIC9kOycgXAorCSAgICAtZSAncy9eXCguWzAtN11bMC03XVswLTddWzAtN11bMC03XVswLTddXCkgJyIkT0lEX1JFR0VYIicgL1wxIFggLycgIiQxIgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKK30KKworY2hlY2tfY2FjaGVfYXQgKCkgeworCWNsZWFuX2lmX2VtcHR5PSQoZ2l0IGRpZmYtZmlsZXMgLS0gIiQxIikKKwljYXNlICIkY2xlYW5faWZfZW1wdHkiIGluCisJJycpICBlY2hvICIkMTogY2xlYW4iIDs7CisJPyopICBlY2hvICIkMTogZGlydHkiIDs7CisJZXNhYworCWNhc2UgIiQyLCRjbGVhbl9pZl9lbXB0eSIgaW4KKwljbGVhbiwpCQk6ICAgICA7OworCWNsZWFuLD8qKQlmYWxzZSA7OworCWRpcnR5LCkJCWZhbHNlIDs7CisJZGlydHksPyopCTogICAgIDs7CisJZXNhYworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICBzZXR1cCBcCisgICAgJ2VjaG8gZnJvdHogPmZyb3R6ICYmCisgICAgIGVjaG8gbml0Zm9sID5uaXRmb2wgJiYKKyAgICAgZWNobyBib3piYXIgPmJvemJhciAmJgorICAgICBlY2hvIHJlenJvdiA+cmV6cm92ICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbml0Zm9sIGJvemJhciByZXpyb3YgJiYKKyAgICAgdHJlZUg9JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICAgZWNobyB0cmVlSCAkdHJlZUggJiYKKyAgICAgZ2l0IGxzLXRyZWUgJHRyZWVIICYmCisKKyAgICAgZWNobyBnbnVzdG8gPmJvemJhciAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZyb3R6IGJvemJhciAtLWZvcmNlLXJlbW92ZSByZXpyb3YgJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPk0ub3V0ICYmCisgICAgIHRyZWVNPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisgICAgIGVjaG8gdHJlZU0gJHRyZWVNICYmCisgICAgIGdpdCBscy10cmVlICR0cmVlTSAmJgorICAgICBjcCBib3piYXIgYm96YmFyLk0gJiYKKyAgICAgY3AgZnJvdHogZnJvdHouTSAmJgorICAgICBjcCBuaXRmb2wgbml0Zm9sLk0gJiYKKyAgICAgZ2l0IGRpZmYtdHJlZSAkdHJlZUggJHRyZWVNJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMSwgMiwgMyAtIG5vIGNhcnJ5IGZvcndhcmQnIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlSCAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjEtMy5vdXQgJiYKKyAgICAgY21wIE0ub3V0IDEtMy5vdXQgJiYKKyAgICAgdGVzdF9jbXAgYm96YmFyLk0gYm96YmFyICYmCisgICAgIHRlc3RfY21wIGZyb3R6Lk0gZnJvdHogJiYKKyAgICAgdGVzdF9jbXAgbml0Zm9sLk0gbml0Zm9sICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IGJvemJhciBjbGVhbiAmJgorICAgICBjaGVja19jYWNoZV9hdCBmcm90eiBjbGVhbiAmJgorICAgICBjaGVja19jYWNoZV9hdCBuaXRmb2wgY2xlYW4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc0IC0gY2FycnkgZm9yd2FyZCBsb2NhbCBhZGRpdGlvbi4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyAiKzEwMDY0NCBYIDAJeW9taW4iID5leHBlY3RlZCAmJgorICAgICBlY2hvIHlvbWluID55b21pbiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHlvbWluICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID40Lm91dCAmJgorICAgICB0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGRpZmYgLVUwIC0tbm8taW5kZXggTS5vdXQgNC5vdXQgPjRkaWZmLm91dCAmJgorICAgICBjb21wYXJlX2NoYW5nZSA0ZGlmZi5vdXQgZXhwZWN0ZWQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgeW9taW4gY2xlYW4gJiYKKyAgICAgdGVzdF9jbXAgYm96YmFyLk0gYm96YmFyICYmCisgICAgIHRlc3RfY21wIGZyb3R6Lk0gZnJvdHogJiYKKyAgICAgdGVzdF9jbXAgbml0Zm9sLk0gbml0Zm9sICYmCisgICAgIGVjaG8geW9taW4gPnlvbWluMSAmJgorICAgICBkaWZmIHlvbWluIHlvbWluMSAmJgorICAgICBybSAtZiB5b21pbjEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc1IC0gY2FycnkgZm9yd2FyZCBsb2NhbCBhZGRpdGlvbi4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlSCAmJgorICAgICBlY2hvIHlvbWluID55b21pbiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHlvbWluICYmCisgICAgIGVjaG8geW9taW4geW9taW4gPnlvbWluICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID41Lm91dCAmJgorICAgICB0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGRpZmYgLVUwIC0tbm8taW5kZXggTS5vdXQgNS5vdXQgPjVkaWZmLm91dCAmJgorICAgICBjb21wYXJlX2NoYW5nZSA1ZGlmZi5vdXQgZXhwZWN0ZWQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgeW9taW4gZGlydHkgJiYKKyAgICAgdGVzdF9jbXAgYm96YmFyLk0gYm96YmFyICYmCisgICAgIHRlc3RfY21wIGZyb3R6Lk0gZnJvdHogJiYKKyAgICAgdGVzdF9jbXAgbml0Zm9sLk0gbml0Zm9sICYmCisgICAgIDogZGlydHkgaW5kZXggc2hvdWxkIGhhdmUgcHJldmVudGVkIC11IGZyb20gY2hlY2tpbmcgaXQgb3V0LiAmJgorICAgICBlY2hvIHlvbWluIHlvbWluID55b21pbjEgJiYKKyAgICAgZGlmZiB5b21pbiB5b21pbjEgJiYKKyAgICAgcm0gLWYgeW9taW4xJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnNiAtIGxvY2FsIGFkZGl0aW9uIGFscmVhZHkgaGFzIHRoZSBzYW1lLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIGZyb3R6ID5mcm90eiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID42Lm91dCAmJgorICAgICB0ZXN0X2NtcCBNLm91dCA2Lm91dCAmJgorICAgICBjaGVja19jYWNoZV9hdCBmcm90eiBjbGVhbiAmJgorICAgICB0ZXN0X2NtcCBib3piYXIuTSBib3piYXIgJiYKKyAgICAgdGVzdF9jbXAgZnJvdHouTSBmcm90eiAmJgorICAgICB0ZXN0X2NtcCBuaXRmb2wuTSBuaXRmb2wgJiYKKyAgICAgZWNobyBmcm90eiA+ZnJvdHoxICYmCisgICAgIGRpZmYgZnJvdHogZnJvdHoxICYmCisgICAgIHJtIC1mIGZyb3R6MScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzcgLSBsb2NhbCBhZGRpdGlvbiBhbHJlYWR5IGhhcyB0aGUgc2FtZS4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyBmcm90eiA+ZnJvdHogJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmcm90eiAmJgorICAgICBlY2hvIGZyb3R6IGZyb3R6ID5mcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+Ny5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgNy5vdXQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgZnJvdHogZGlydHkgJiYKKyAgICAgdGVzdF9jbXAgYm96YmFyLk0gYm96YmFyICYmCisgICAgIHRlc3RfY21wIG5pdGZvbC5NIG5pdGZvbCAmJgorICAgICA6IGRpcnR5IGluZGV4IHNob3VsZCBoYXZlIHByZXZlbnRlZCAtdSBmcm9tIGNoZWNraW5nIGl0IG91dC4gJiYKKyAgICAgZWNobyBmcm90eiBmcm90eiA+ZnJvdHoxICYmCisgICAgIGRpZmYgZnJvdHogZnJvdHoxICYmCisgICAgIHJtIC1mIGZyb3R6MScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzggLSBjb25mbGljdGluZyBhZGRpdGlvbi4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyBmcm90eiBmcm90eiA+ZnJvdHogJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmcm90eiAmJgorICAgICBpZiByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzkgLSBjb25mbGljdGluZyBhZGRpdGlvbi4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyBmcm90eiBmcm90eiA+ZnJvdHogJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmcm90eiAmJgorICAgICBlY2hvIGZyb3R6ID5mcm90eiAmJgorICAgICBpZiByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzEwIC0gcGF0aCByZW1vdmVkLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIHJlenJvdiA+cmV6cm92ICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmV6cm92ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xMC5vdXQgJiYKKyAgICAgY21wIE0ub3V0IDEwLm91dCAmJgorICAgICB0ZXN0X2NtcCBib3piYXIuTSBib3piYXIgJiYKKyAgICAgdGVzdF9jbXAgZnJvdHouTSBmcm90eiAmJgorICAgICB0ZXN0X2NtcCBuaXRmb2wuTSBuaXRmb2wKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzExIC0gZGlydHkgcGF0aCByZW1vdmVkLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIHJlenJvdiA+cmV6cm92ICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmV6cm92ICYmCisgICAgIGVjaG8gcmV6cm92IHJlenJvdiA+cmV6cm92ICYmCisgICAgIGlmIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTIgLSB1bm1hdGNoaW5nIGxvY2FsIGNoYW5nZXMgYmVpbmcgcmVtb3ZlZC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyByZXpyb3YgcmV6cm92ID5yZXpyb3YgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByZXpyb3YgJiYKKyAgICAgaWYgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlSCAkdHJlZU07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxMyAtIHVubWF0Y2hpbmcgbG9jYWwgY2hhbmdlcyBiZWluZyByZW1vdmVkLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIHJlenJvdiByZXpyb3YgPnJlenJvdiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHJlenJvdiAmJgorICAgICBlY2hvIHJlenJvdiA+cmV6cm92ICYmCisgICAgIGlmIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCistMTAwNjQ0IFggMAluaXRmb2wKKysxMDA2NDQgWCAwCW5pdGZvbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNCAtIHVuY2hhbmdlZCBpbiB0d28gaGVhZHMuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gbml0Zm9sIG5pdGZvbCA+bml0Zm9sICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbml0Zm9sICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xNC5vdXQgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLVUwIC0tbm8taW5kZXggTS5vdXQgMTQub3V0ID4xNGRpZmYub3V0ICYmCisgICAgIGNvbXBhcmVfY2hhbmdlIDE0ZGlmZi5vdXQgZXhwZWN0ZWQgJiYKKyAgICAgdGVzdF9jbXAgYm96YmFyLk0gYm96YmFyICYmCisgICAgIHRlc3RfY21wIGZyb3R6Lk0gZnJvdHogJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgbml0Zm9sIGNsZWFuICYmCisgICAgIGVjaG8gbml0Zm9sIG5pdGZvbCA+bml0Zm9sMSAmJgorICAgICBkaWZmIG5pdGZvbCBuaXRmb2wxICYmCisgICAgIHJtIC1mIG5pdGZvbDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNSAtIHVuY2hhbmdlZCBpbiB0d28gaGVhZHMuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gbml0Zm9sIG5pdGZvbCA+bml0Zm9sICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbml0Zm9sICYmCisgICAgIGVjaG8gbml0Zm9sIG5pdGZvbCBuaXRmb2wgPm5pdGZvbCAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MTUub3V0ICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC1VMCAtLW5vLWluZGV4IE0ub3V0IDE1Lm91dCA+MTVkaWZmLm91dCAmJgorICAgICBjb21wYXJlX2NoYW5nZSAxNWRpZmYub3V0IGV4cGVjdGVkICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IG5pdGZvbCBkaXJ0eSAmJgorICAgICB0ZXN0X2NtcCBib3piYXIuTSBib3piYXIgJiYKKyAgICAgdGVzdF9jbXAgZnJvdHouTSBmcm90eiAmJgorICAgICBlY2hvIG5pdGZvbCBuaXRmb2wgbml0Zm9sID5uaXRmb2wxICYmCisgICAgIGRpZmYgbml0Zm9sIG5pdGZvbDEgJiYKKyAgICAgcm0gLWYgbml0Zm9sMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE2IC0gY29uZmxpY3RpbmcgbG9jYWwgY2hhbmdlLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIGJvemJhciBib3piYXIgPmJvemJhciAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJvemJhciAmJgorICAgICBpZiByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE3IC0gY29uZmxpY3RpbmcgbG9jYWwgY2hhbmdlLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIGJvemJhciBib3piYXIgPmJvemJhciAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJvemJhciAmJgorICAgICBlY2hvIGJvemJhciBib3piYXIgYm96YmFyID5ib3piYXIgJiYKKyAgICAgaWYgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlSCAkdHJlZU07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxOCAtIGxvY2FsIGNoYW5nZSBhbHJlYWR5IGhhdmluZyBhIGdvb2QgcmVzdWx0LicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIGdudXN0byA+Ym96YmFyICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYm96YmFyICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xOC5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgMTgub3V0ICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IGJvemJhciBjbGVhbiAmJgorICAgICB0ZXN0X2NtcCBib3piYXIuTSBib3piYXIgJiYKKyAgICAgdGVzdF9jbXAgZnJvdHouTSBmcm90eiAmJgorICAgICB0ZXN0X2NtcCBuaXRmb2wuTSBuaXRmb2wKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE5IC0gbG9jYWwgY2hhbmdlIGFscmVhZHkgaGF2aW5nIGEgZ29vZCByZXN1bHQsIGZ1cnRoZXIgbW9kaWZpZWQuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gZ251c3RvID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKyAgICAgZWNobyBnbnVzdG8gZ251c3RvID5ib3piYXIgJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlSCAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjE5Lm91dCAmJgorICAgICB0ZXN0X2NtcCBNLm91dCAxOS5vdXQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgYm96YmFyIGRpcnR5ICYmCisgICAgIHRlc3RfY21wIGZyb3R6Lk0gZnJvdHogJiYKKyAgICAgdGVzdF9jbXAgbml0Zm9sLk0gbml0Zm9sICYmCisgICAgIGVjaG8gZ251c3RvIGdudXN0byA+Ym96YmFyMSAmJgorICAgICBkaWZmIGJvemJhciBib3piYXIxICYmCisgICAgIHJtIC1mIGJvemJhcjEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcyMCAtIG5vIGxvY2FsIGNoYW5nZSwgdXNlIG5ldyB0cmVlLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIGJvemJhciA+Ym96YmFyICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYm96YmFyICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4yMC5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgMjAub3V0ICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IGJvemJhciBjbGVhbiAmJgorICAgICB0ZXN0X2NtcCBib3piYXIuTSBib3piYXIgJiYKKyAgICAgdGVzdF9jbXAgZnJvdHouTSBmcm90eiAmJgorICAgICB0ZXN0X2NtcCBuaXRmb2wuTSBuaXRmb2wKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzIxIC0gbm8gbG9jYWwgY2hhbmdlLCBkaXJ0eSBjYWNoZS4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyBib3piYXIgPmJvemJhciAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJvemJhciAmJgorICAgICBlY2hvIGdudXN0byBnbnVzdG8gPmJvemJhciAmJgorICAgICBpZiByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKworIyBBbHNvIG1ha2Ugc3VyZSB3ZSBkaWQgbm90IGJyZWFrIERGIHZzIERGL0RGIGNhc2UuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnREYgdnMgREYvREYgY2FzZSBzZXR1cC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICBlY2hvIERGID5ERiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIERGICYmCisgICAgIHRyZWVERj0kKGdpdCB3cml0ZS10cmVlKSAmJgorICAgICBlY2hvIHRyZWVERiAkdHJlZURGICYmCisgICAgIGdpdCBscy10cmVlICR0cmVlREYgJiYKKworICAgICBybSAtZiBERiAmJgorICAgICBta2RpciBERiAmJgorICAgICBlY2hvIERGL0RGID5ERi9ERiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIERGIERGL0RGICYmCisgICAgIHRyZWVERkRGPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisgICAgIGVjaG8gdHJlZURGREYgJHRyZWVERkRGICYmCisgICAgIGdpdCBscy10cmVlICR0cmVlREZERiAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+REZERi5vdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdERiB2cyBERi9ERiBjYXNlIHRlc3QuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcm0gLWZyIERGICYmCisgICAgIGVjaG8gREYgPkRGICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgREYgJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlREYgJHRyZWVERkRGICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID5ERkRGY2hlY2sub3V0ICYmCisgICAgIHRlc3RfY21wIERGREYub3V0IERGREZjaGVjay5vdXQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgREYvREYgY2xlYW4nCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAwMy1yZWFkLXRyZWUtcHJlZml4LnNoIGIvdC90MTAwMy1yZWFkLXRyZWUtcHJlZml4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI2MTExY2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDAzLXJlYWQtdHJlZS1wcmVmaXguc2gKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmVhZC10cmVlIC0tcHJlZml4IHRlc3QuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGhlbGxvID5vbmUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG9uZSAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwllY2hvIHRyZWUgaXMgJHRyZWUKKycKKworZWNobyAnb25lCit0d28vb25lJyA+ZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSAtLXByZWZpeCcgJworCWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9dHdvLyAkdHJlZSAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDA0LXJlYWQtdHJlZS1tLXUtd2Yuc2ggYi90L3QxMDA0LXJlYWQtdHJlZS1tLXUtd2Yuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzEzNTc4YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMDQtcmVhZC10cmVlLW0tdS13Zi5zaApAQCAtMCwwICsxLDIzOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYWQtdHJlZSAtbSAtdSBjaGVja3Mgd29ya2luZyB0cmVlIGZpbGVzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYWQtdHJlZS5zaAorCisjIHR3by10cmVlIHRlc3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvLXdheSBzZXR1cCcgJworCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyA+ZmlsZTEgZmlsZSBvbmUgJiYKKwllY2hvID5maWxlMiBmaWxlIHR3byAmJgorCWVjaG8gPnN1YmRpci9maWxlMSBmaWxlIG9uZSBpbiBzdWJkaXJlY3RvcnkgJiYKKwllY2hvID5zdWJkaXIvZmlsZTIgZmlsZSB0d28gaW4gc3ViZGlyZWN0b3J5ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlMSBmaWxlMiBzdWJkaXIvZmlsZTEgc3ViZGlyL2ZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwlnaXQgdGFnIC1mIGJyYW5jaC1wb2ludCAmJgorCisJZWNobyBmaWxlMiBpcyBub3QgdHJhY2tlZCBvbiB0aGUgbWFzdGVyIGFueW1vcmUgJiYKKwlybSAtZiBmaWxlMiBzdWJkaXIvZmlsZTIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIGZpbGUyIHN1YmRpci9maWxlMiAmJgorCWdpdCBjb21taXQgLWEgLW0gIm1hc3RlciByZW1vdmVzIGZpbGUyIGFuZCBzdWJkaXIvZmlsZTIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3by13YXkgbm90IGNsb2JiZXJpbmcnICcKKworCWVjaG8gPmZpbGUyIG1hc3RlciBjcmVhdGVzIHVudHJhY2tlZCBmaWxlMiAmJgorCWVjaG8gPnN1YmRpci9maWxlMiBtYXN0ZXIgY3JlYXRlcyB1bnRyYWNrZWQgc3ViZGlyL2ZpbGUyICYmCisJaWYgZXJyPSQocmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IG1hc3RlciBzaWRlIDI+JjEpCisJdGhlbgorCQllY2hvIHNob3VsZCBoYXZlIGNvbXBsYWluZWQKKwkJZmFsc2UKKwllbHNlCisJCWVjaG8gImhhcHB5IHRvIHNlZSAkZXJyIgorCWZpCisnCisKK2VjaG8gZmlsZTIgPi5naXRpZ25vcmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvLXdheSB3aXRoIGluY29ycmVjdCAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeSAoMSknICcKKworCWlmIGVycj0kKHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlIG1hc3RlciBzaWRlIDI+JjEpCisJdGhlbgorCQllY2hvIHNob3VsZCBoYXZlIGNvbXBsYWluZWQKKwkJZmFsc2UKKwllbHNlCisJCWVjaG8gImhhcHB5IHRvIHNlZSAkZXJyIgorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3by13YXkgd2l0aCBpbmNvcnJlY3QgLS1leGNsdWRlLXBlci1kaXJlY3RvcnkgKDIpJyAnCisKKwlpZiBlcnI9JChyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9Zm9vIC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PS5naXRpZ25vcmUgbWFzdGVyIHNpZGUgMj4mMSkKKwl0aGVuCisJCWVjaG8gc2hvdWxkIGhhdmUgY29tcGxhaW5lZAorCQlmYWxzZQorCWVsc2UKKwkJZWNobyAiaGFwcHkgdG8gc2VlICRlcnIiCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvLXdheSBjbG9iYmVyaW5nIGEgaWdub3JlZCBmaWxlJyAnCisKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBtYXN0ZXIgc2lkZQorJworCitybSAtZiAuZ2l0aWdub3JlCisKKyMgdGhyZWUtdHJlZSB0ZXN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVlLXdheSBub3QgY29tcGxhaW5pbmcgb24gYW4gdW50cmFja2VkIHBhdGggaW4gYm90aCcgJworCisJcm0gLWYgZmlsZTIgc3ViZGlyL2ZpbGUyICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvID5maWxlMyBmaWxlIHRocmVlICYmCisJZWNobyA+c3ViZGlyL2ZpbGUzIGZpbGUgdGhyZWUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpbGUzIHN1YmRpci9maWxlMyAmJgorCWdpdCBjb21taXQgLWEgLW0gInNpZGUgYWRkcyBmaWxlMyBhbmQgcmVtb3ZlcyBmaWxlMiIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvID5maWxlMiBmaWxlIHR3byBpcyB1bnRyYWNrZWQgb24gdGhlIG1hc3RlciBzaWRlICYmCisJZWNobyA+c3ViZGlyL2ZpbGUyIGZpbGUgdHdvIGlzIHVudHJhY2tlZCBvbiB0aGUgbWFzdGVyIHNpZGUgJiYKKworCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBicmFuY2gtcG9pbnQgbWFzdGVyIHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWUtd2F5IG5vdCBjbG9iYmVyaW5nIGEgd29ya2luZyB0cmVlIGZpbGUnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBmaWxlMiBzdWJkaXIvZmlsZTIgZmlsZTMgc3ViZGlyL2ZpbGUzICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gPmZpbGUzIGZpbGUgdGhyZWUgY3JlYXRlZCBpbiBtYXN0ZXIsIHVudHJhY2tlZCAmJgorCWVjaG8gPnN1YmRpci9maWxlMyBmaWxlIHRocmVlIGNyZWF0ZWQgaW4gbWFzdGVyLCB1bnRyYWNrZWQgJiYKKwlpZiBlcnI9JChyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgYnJhbmNoLXBvaW50IG1hc3RlciBzaWRlIDI+JjEpCisJdGhlbgorCQllY2hvIHNob3VsZCBoYXZlIGNvbXBsYWluZWQKKwkJZmFsc2UKKwllbHNlCisJCWVjaG8gImhhcHB5IHRvIHNlZSAkZXJyIgorCWZpCisnCisKK2VjaG8gPi5naXRpZ25vcmUgZmlsZTMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWUtd2F5IG5vdCBjb21wbGFpbmluZyBvbiBhbiB1bnRyYWNrZWQgZmlsZScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1mIGZpbGUyIHN1YmRpci9maWxlMiBmaWxlMyBzdWJkaXIvZmlsZTMgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyA+ZmlsZTMgZmlsZSB0aHJlZSBjcmVhdGVkIGluIG1hc3RlciwgdW50cmFja2VkICYmCisJZWNobyA+c3ViZGlyL2ZpbGUzIGZpbGUgdGhyZWUgY3JlYXRlZCBpbiBtYXN0ZXIsIHVudHJhY2tlZCAmJgorCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PS5naXRpZ25vcmUgYnJhbmNoLXBvaW50IG1hc3RlciBzaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzMtd2F5IG5vdCBvdmVyd3JpdGluZyBsb2NhbCBjaGFuZ2VzIChzZXR1cCknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZS1hIGJyYW5jaC1wb2ludCAmJgorCWVjaG8gPj5maWxlMSAibmV3IGxpbmUgdG8gYmUga2VwdCBpbiB0aGUgbWVyZ2UgcmVzdWx0IiAmJgorCWdpdCBjb21taXQgLWEgLW0gInNpZGUtYSBjaGFuZ2VzIGZpbGUxIiAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlLWIgYnJhbmNoLXBvaW50ICYmCisJZWNobyA+PmZpbGUyICJuZXcgbGluZSB0byBiZSBrZXB0IGluIHRoZSBtZXJnZSByZXN1bHQiICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAic2lkZS1iIGNoYW5nZXMgZmlsZTIiICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUtYQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzMtd2F5IG5vdCBvdmVyd3JpdGluZyBsb2NhbCBjaGFuZ2VzIChvdXIgc2lkZSknICcKKworCSMgQXQgdGhpcyBwb2ludCwgZmlsZTEgZnJvbSBzaWRlLWEgc2hvdWxkIGJlIGtlcHQgYXMgc2lkZS1iCisJIyBkaWQgbm90IHRvdWNoIGl0LgorCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZWNobyA+PmZpbGUxICJsb2NhbCBjaGFuZ2VzIiAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBicmFuY2gtcG9pbnQgc2lkZS1hIHNpZGUtYiAmJgorCWdyZXAgIm5ldyBsaW5lIHRvIGJlIGtlcHQiIGZpbGUxICYmCisJZ3JlcCAibG9jYWwgY2hhbmdlcyIgZmlsZTEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczLXdheSBub3Qgb3ZlcndyaXRpbmcgbG9jYWwgY2hhbmdlcyAodGhlaXIgc2lkZSknICcKKworCSMgQXQgdGhpcyBwb2ludCwgZmlsZTIgZnJvbSBzaWRlLWIgc2hvdWxkIGJlIHRha2VuIGFzIHNpZGUtYQorCSMgZGlkIG5vdCB0b3VjaCBpdC4KKworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWVjaG8gPj5maWxlMiAibG9jYWwgY2hhbmdlcyIgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X2ZhaWwgLW0gLXUgYnJhbmNoLXBvaW50IHNpZGUtYSBzaWRlLWIgJiYKKwkhIGdyZXAgIm5ldyBsaW5lIHRvIGJlIGtlcHQiIGZpbGUyICYmCisJZ3JlcCAibG9jYWwgY2hhbmdlcyIgZmlsZTIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmdW5ueSBzeW1saW5rIGluIHdvcmsgdHJlZScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBzeW0tYiBzaWRlLWIgJiYKKwlta2RpciAtcCBhICYmCisJPmEvYiAmJgorCWdpdCBhZGQgYS9iICYmCisJZ2l0IGNvbW1pdCAtbSAic2lkZSBhZGRzIGEvYiIgJiYKKworCXJtIC1mciBhICYmCisJZ2l0IGNoZWNrb3V0IC1iIHN5bS1hIHNpZGUtYSAmJgorCW1rZGlyIC1wIGEgJiYKKwl0ZXN0X2xuX3NfYWRkIC4uL2IgYS9iICYmCisJZ2l0IGNvbW1pdCAtbSAid2UgYWRkIGEvYiIgJiYKKworCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBzeW0tYSBzeW0tYSBzeW0tYgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0FOSVRZICdmdW5ueSBzeW1saW5rIGluIHdvcmsgdHJlZSwgdW4tdW5saW5rLWFibGUnICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2htb2QgdSt3IGEgMj4vZGV2L251bGw7IHJtIC1mciBhIGIiICYmCisKKwlybSAtZnIgYSBiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZ2l0IGNoZWNrb3V0IHN5bS1hICYmCisJY2htb2QgYS13IGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVhZC10cmVlIC1tIC11IHN5bS1hIHN5bS1hIHN5bS1iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIHNldHVwJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZS1hICYmCisJcm0gLWYgc3ViZGlyL2ZpbGUyICYmCisJbWtkaXIgc3ViZGlyL2ZpbGUyICYmCisJZWNobyBxZndmcSA+c3ViZGlyL2ZpbGUyL2Fub3RoZXIgJiYKKwlnaXQgYWRkIHN1YmRpci9maWxlMi9hbm90aGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic2lkZS1hIGNoYW5nZXMgZmlsZTIgdG8gZGlyZWN0b3J5IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRicgJworCisJZ2l0IGNoZWNrb3V0IHNpZGUtYiAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBicmFuY2gtcG9pbnQgc2lkZS1iIHNpZGUtYSAmJgorCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsICYmCisJKAorCQlhPSQoZ2l0IHJldi1wYXJzZSBicmFuY2gtcG9pbnQ6c3ViZGlyL2ZpbGUyKSAmJgorCQliPSQoZ2l0IHJldi1wYXJzZSBzaWRlLWE6c3ViZGlyL2ZpbGUyL2Fub3RoZXIpICYmCisJCWVjaG8gIjEwMDY0NCAkYSAxCXN1YmRpci9maWxlMiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRhIDIJc3ViZGlyL2ZpbGUyIiAmJgorCQllY2hvICIxMDA2NDQgJGIgMwlzdWJkaXIvZmlsZTIvYW5vdGhlciIKKwkpID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIHJlc29sdmUnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZS1iICYmCisJZ2l0IG1lcmdlLXJlc29sdmUgYnJhbmNoLXBvaW50IC0tIHNpZGUtYiBzaWRlLWEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEL0YgcmVjdXJzaXZlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUtYiAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgYnJhbmNoLXBvaW50IC0tIHNpZGUtYiBzaWRlLWEKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDUtcmVhZC10cmVlLXJlc2V0LnNoIGIvdC90MTAwNS1yZWFkLXRyZWUtcmVzZXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODNiMDllMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMDUtcmVhZC10cmVlLXJlc2V0LnNoCkBAIC0wLDAgKzEsMTA2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVhZC10cmVlIC11IC0tcmVzZXQnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmVhZC10cmVlLnNoCisKKyMgdHdvLXRyZWUgdGVzdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBpbml0ICYmCisJbWtkaXIgZGYgJiYKKwllY2hvIGNvbnRlbnQgPmRmL2ZpbGUgJiYKKwlnaXQgYWRkIGRmL2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWdpdCBscy1maWxlcyA+ZXhwZWN0ICYmCisJcm0gLXJmIGRmICYmCisJZWNobyBjb250ZW50ID5kZiAmJgorCWdpdCBhZGQgZGYgJiYKKwllY2hvIGNvbnRlbnQgPm5ldyAmJgorCWdpdCBhZGQgbmV3ICYmCisJZ2l0IGNvbW1pdCAtbSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgc2hvdWxkIHdvcmsnICcKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLXUgLS1yZXNldCBIRUFEXiAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCBzaG91bGQgcmVtb3ZlIHJlbW5hbnRzIGZyb20gYSBmYWlsZWQgbWVyZ2UnICcKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IGxzLWZpbGVzIC1zID5leHBlY3QgJiYKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSA6bmV3KSAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRzaGExIDEJb2xkIiAmJgorCQllY2hvICIxMDA2NDQgJHNoYTEgMwlvbGQiCisJKSB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJPm9sZCAmJgorCWdpdCBscy1maWxlcyAtcyAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSEgdGVzdCAtZiBvbGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvLXdheSByZXNldCBzaG91bGQgcmVtb3ZlIHJlbW5hbnRzIHRvbycgJworCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmV4cGVjdCAmJgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIDpuZXcpICYmCisJKAorCQllY2hvICIxMDA2NDQgJHNoYTEgMQlvbGQiICYmCisJCWVjaG8gIjEwMDY0NCAkc2hhMSAzCW9sZCIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwk+b2xkICYmCisJZ2l0IGxzLWZpbGVzIC1zICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgSEVBRCBIRUFEICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkhIHRlc3QgLWYgb2xkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1BvcmNlbGFpbiByZXNldCBzaG91bGQgcmVtb3ZlIHJlbW5hbnRzIHRvbycgJworCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmV4cGVjdCAmJgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIDpuZXcpICYmCisJKAorCQllY2hvICIxMDA2NDQgJHNoYTEgMQlvbGQiICYmCisJCWVjaG8gIjEwMDY0NCAkc2hhMSAzCW9sZCIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwk+b2xkICYmCisJZ2l0IGxzLWZpbGVzIC1zICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJISB0ZXN0IC1mIG9sZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQb3JjZWxhaW4gY2hlY2tvdXQgLWYgc2hvdWxkIHJlbW92ZSByZW1uYW50cyB0b28nICcKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IGxzLWZpbGVzIC1zID5leHBlY3QgJiYKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSA6bmV3KSAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRzaGExIDEJb2xkIiAmJgorCQllY2hvICIxMDA2NDQgJHNoYTEgMwlvbGQiCisJKSB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJPm9sZCAmJgorCWdpdCBscy1maWxlcyAtcyAmJgorCWdpdCBjaGVja291dCAtZiAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJISB0ZXN0IC1mIG9sZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQb3JjZWxhaW4gY2hlY2tvdXQgLWYgSEVBRCBzaG91bGQgcmVtb3ZlIHJlbW5hbnRzIHRvbycgJworCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmV4cGVjdCAmJgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIDpuZXcpICYmCisJKAorCQllY2hvICIxMDA2NDQgJHNoYTEgMQlvbGQiICYmCisJCWVjaG8gIjEwMDY0NCAkc2hhMSAzCW9sZCIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwk+b2xkICYmCisJZ2l0IGxzLWZpbGVzIC1zICYmCisJZ2l0IGNoZWNrb3V0IC1mIEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSEgdGVzdCAtZiBvbGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDA2LWNhdC1maWxlLnNoIGIvdC90MTAwNi1jYXQtZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40M2M0YmUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAwNi1jYXQtZmlsZS5zaApAQCAtMCwwICsxLDU5MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjYXQtZmlsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK2VjaG9fd2l0aG91dF9uZXdsaW5lICgpIHsKKyAgICBwcmludGYgJyVzJyAiJCoiCit9CisKK3N0cmxlbiAoKSB7CisgICAgZWNob193aXRob3V0X25ld2xpbmUgIiQxIiB8IHdjIC1jIHwgc2VkIC1lICdzL14gKi8vJworfQorCittYXliZV9yZW1vdmVfdGltZXN0YW1wICgpIHsKKyAgICBpZiB0ZXN0IC16ICIkMiI7IHRoZW4KKyAgICAgICAgZWNob193aXRob3V0X25ld2xpbmUgIiQxIgorICAgIGVsc2UKKwllY2hvX3dpdGhvdXRfbmV3bGluZSAiJChwcmludGYgJyVzXG4nICIkMSIgfCBzZWQgLWUgJ3MvIFswLTldWzAtOV0qIFstK11bMC05XVswLTldWzAtOV1bMC05XSQvLycpIgorICAgIGZpCit9CisKK3J1bl90ZXN0cyAoKSB7CisgICAgdHlwZT0kMQorICAgIHNoYTE9JDIKKyAgICBzaXplPSQzCisgICAgY29udGVudD0kNAorICAgIHByZXR0eV9jb250ZW50PSQ1CisgICAgbm9fdHM9JDYKKworICAgIGJhdGNoX291dHB1dD0iJHNoYTEgJHR5cGUgJHNpemUKKyRjb250ZW50IgorCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiJHR5cGUgZXhpc3RzIiAnCisJZ2l0IGNhdC1maWxlIC1lICRzaGExCisgICAgJworCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiVHlwZSBvZiAkdHlwZSBpcyBjb3JyZWN0IiAnCisJZWNobyAkdHlwZSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIC10ICRzaGExID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisgICAgJworCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiU2l6ZSBvZiAkdHlwZSBpcyBjb3JyZWN0IiAnCisJZWNobyAkc2l6ZSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIC1zICRzaGExID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisgICAgJworCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiVHlwZSBvZiAkdHlwZSBpcyBjb3JyZWN0IHVzaW5nIC0tYWxsb3ctdW5rbm93bi10eXBlIiAnCisJZWNobyAkdHlwZSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIC10IC0tYWxsb3ctdW5rbm93bi10eXBlICRzaGExID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisgICAgJworCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiU2l6ZSBvZiAkdHlwZSBpcyBjb3JyZWN0IHVzaW5nIC0tYWxsb3ctdW5rbm93bi10eXBlIiAnCisJZWNobyAkc2l6ZSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIC1zIC0tYWxsb3ctdW5rbm93bi10eXBlICRzaGExID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisgICAgJworCisgICAgdGVzdCAteiAiJGNvbnRlbnQiIHx8CisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiQ29udGVudCBvZiAkdHlwZSBpcyBjb3JyZWN0IiAnCisJbWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJGNvbnRlbnQiICRub190cyA+ZXhwZWN0ICYmCisJbWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJChnaXQgY2F0LWZpbGUgJHR5cGUgJHNoYTEpIiAkbm9fdHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKyAgICAnCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJQcmV0dHkgY29udGVudCBvZiAkdHlwZSBpcyBjb3JyZWN0IiAnCisJbWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJHByZXR0eV9jb250ZW50IiAkbm9fdHMgPmV4cGVjdCAmJgorCW1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiQoZ2l0IGNhdC1maWxlIC1wICRzaGExKSIgJG5vX3RzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisgICAgJworCisgICAgdGVzdCAteiAiJGNvbnRlbnQiIHx8CisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1iYXRjaCBvdXRwdXQgb2YgJHR5cGUgaXMgY29ycmVjdCIgJworCW1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiRiYXRjaF9vdXRwdXQiICRub190cyA+ZXhwZWN0ICYmCisJbWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJChlY2hvICRzaGExIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gpIiAkbm9fdHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKyAgICAnCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWJhdGNoLWNoZWNrIG91dHB1dCBvZiAkdHlwZSBpcyBjb3JyZWN0IiAnCisJZWNobyAiJHNoYTEgJHR5cGUgJHNpemUiID5leHBlY3QgJiYKKwllY2hvX3dpdGhvdXRfbmV3bGluZSAkc2hhMSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisgICAgJworCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiY3VzdG9tIC0tYmF0Y2gtY2hlY2sgZm9ybWF0IiAnCisJZWNobyAiJHR5cGUgJHNoYTEiID5leHBlY3QgJiYKKwllY2hvICRzaGExIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2s9IiUob2JqZWN0dHlwZSkgJShvYmplY3RuYW1lKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKyAgICAnCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWJhdGNoLWNoZWNrIHdpdGggJShyZXN0KScgJworCWVjaG8gIiR0eXBlIHRoaXMgaXMgc29tZSBleHRyYSBjb250ZW50IiA+ZXhwZWN0ICYmCisJZWNobyAiJHNoYTEgICAgdGhpcyBpcyBzb21lIGV4dHJhIGNvbnRlbnQiIHwKKwkJZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2s9IiUob2JqZWN0dHlwZSkgJShyZXN0KSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKyAgICAnCisKKyAgICB0ZXN0IC16ICIkY29udGVudCIgfHwKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWJhdGNoIHdpdGhvdXQgdHlwZSAoJHR5cGUpIiAnCisJeworCQllY2hvICIkc2l6ZSIgJiYKKwkJbWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJGNvbnRlbnQiICRub190cworCX0gPmV4cGVjdCAmJgorCWVjaG8gJHNoYTEgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaD0iJShvYmplY3RzaXplKSIgPmFjdHVhbC5mdWxsICYmCisJbWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJChjYXQgYWN0dWFsLmZ1bGwpIiAkbm9fdHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKyAgICAnCisKKyAgICB0ZXN0IC16ICIkY29udGVudCIgfHwKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWJhdGNoIHdpdGhvdXQgc2l6ZSAoJHR5cGUpIiAnCisJeworCQllY2hvICIkdHlwZSIgJiYKKwkJbWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJGNvbnRlbnQiICRub190cworCX0gPmV4cGVjdCAmJgorCWVjaG8gJHNoYTEgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaD0iJShvYmplY3R0eXBlKSIgPmFjdHVhbC5mdWxsICYmCisJbWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJChjYXQgYWN0dWFsLmZ1bGwpIiAkbm9fdHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKyAgICAnCit9CisKK2hlbGxvX2NvbnRlbnQ9IkhlbGxvIFdvcmxkIgoraGVsbG9fc2l6ZT0kKHN0cmxlbiAiJGhlbGxvX2NvbnRlbnQiKQoraGVsbG9fc2hhMT0kKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkaGVsbG9fY29udGVudCIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAiICcKKwllY2hvX3dpdGhvdXRfbmV3bGluZSAiJGhlbGxvX2NvbnRlbnQiID4gaGVsbG8gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGhlbGxvCisnCisKK3J1bl90ZXN0cyAnYmxvYicgJGhlbGxvX3NoYTEgJGhlbGxvX3NpemUgIiRoZWxsb19jb250ZW50IiAiJGhlbGxvX2NvbnRlbnQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYmF0Y2gtY2hlY2sgd2l0aG91dCAlKHJlc3QpIGNvbnNpZGVycyB3aG9sZSBsaW5lJyAnCisJZWNobyAiJGhlbGxvX3NoYTEgYmxvYiAkaGVsbG9fc2l6ZSIgPmV4cGVjdCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTAwNjQ0ICRoZWxsb19zaGExICJ3aGl0ZSBzcGFjZSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgXCJ3aGl0ZSBzcGFjZVwiIiAmJgorCWVjaG8gIjp3aGl0ZSBzcGFjZSIgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X29pZF9pbml0CisKK3RyZWVfc2hhMT0kKGdpdCB3cml0ZS10cmVlKQordHJlZV9zaXplPSQoKCQodGVzdF9vaWQgcmF3c3opICsgMTMpKQordHJlZV9wcmV0dHlfY29udGVudD0iMTAwNjQ0IGJsb2IgJGhlbGxvX3NoYTEJaGVsbG8iCisKK3J1bl90ZXN0cyAndHJlZScgJHRyZWVfc2hhMSAkdHJlZV9zaXplICIiICIkdHJlZV9wcmV0dHlfY29udGVudCIKKworY29tbWl0X21lc3NhZ2U9IkluaXRpYWwgY29tbWl0IgorY29tbWl0X3NoYTE9JChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGNvbW1pdF9tZXNzYWdlIiB8IGdpdCBjb21taXQtdHJlZSAkdHJlZV9zaGExKQorY29tbWl0X3NpemU9JCgoJCh0ZXN0X29pZCBoZXhzeikgKyAxMzcpKQorY29tbWl0X2NvbnRlbnQ9InRyZWUgJHRyZWVfc2hhMQorYXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiAwMDAwMDAwMDAwICswMDAwCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDAwMDAwMDAwMDAgKzAwMDAKKworJGNvbW1pdF9tZXNzYWdlIgorCitydW5fdGVzdHMgJ2NvbW1pdCcgJGNvbW1pdF9zaGExICRjb21taXRfc2l6ZSAiJGNvbW1pdF9jb250ZW50IiAiJGNvbW1pdF9jb250ZW50IiAxCisKK3RhZ19oZWFkZXJfd2l0aG91dF90aW1lc3RhbXA9Im9iamVjdCAkaGVsbG9fc2hhMQordHlwZSBibG9iCit0YWcgaGVsbG90YWcKK3RhZ2dlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iCit0YWdfZGVzY3JpcHRpb249IlRoaXMgaXMgYSB0YWciCit0YWdfY29udGVudD0iJHRhZ19oZWFkZXJfd2l0aG91dF90aW1lc3RhbXAgMDAwMDAwMDAwMCArMDAwMAorCiskdGFnX2Rlc2NyaXB0aW9uIgorCit0YWdfc2hhMT0kKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkdGFnX2NvbnRlbnQiIHwgZ2l0IG1rdGFnKQordGFnX3NpemU9JChzdHJsZW4gIiR0YWdfY29udGVudCIpCisKK3J1bl90ZXN0cyAndGFnJyAkdGFnX3NoYTEgJHRhZ19zaXplICIkdGFnX2NvbnRlbnQiICIkdGFnX2NvbnRlbnQiIDEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgIlJlYWNoIGEgYmxvYiBmcm9tIGEgdGFnIHBvaW50aW5nIHRvIGl0IiBcCisgICAgInRlc3QgJyRoZWxsb19jb250ZW50JyA9IFwiXCQoZ2l0IGNhdC1maWxlIGJsb2IgJHRhZ19zaGExKVwiIgorCitmb3IgYmF0Y2ggaW4gYmF0Y2ggYmF0Y2gtY2hlY2sKK2RvCisgICAgZm9yIG9wdCBpbiB0IHMgZSBwCisgICAgZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJQYXNzaW5nIC0kb3B0IHdpdGggLS0kYmF0Y2ggZmFpbHMiICcKKwkgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC0tJGJhdGNoIC0kb3B0ICRoZWxsb19zaGExCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiUGFzc2luZyAtLSRiYXRjaCB3aXRoIC0kb3B0IGZhaWxzIiAnCisJICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtJG9wdCAtLSRiYXRjaCAkaGVsbG9fc2hhMQorCScKKyAgICBkb25lCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJQYXNzaW5nIDx0eXBlPiB3aXRoIC0tJGJhdGNoIGZhaWxzIiAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC0tJGJhdGNoIGJsb2IgJGhlbGxvX3NoYTEKKyAgICAnCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJQYXNzaW5nIC0tJGJhdGNoIHdpdGggPHR5cGU+IGZhaWxzIiAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgLS0kYmF0Y2ggJGhlbGxvX3NoYTEKKyAgICAnCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJQYXNzaW5nIHNoYTEgd2l0aCAtLSRiYXRjaCBmYWlscyIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtLSRiYXRjaCAkaGVsbG9fc2hhMQorICAgICcKK2RvbmUKKworZm9yIG9wdCBpbiB0IHMgZSBwCitkbworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlBhc3NpbmcgLSRvcHQgd2l0aCAtLWZvbGxvdy1zeW1saW5rcyBmYWlscyIgJworCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLS1mb2xsb3ctc3ltbGlua3MgLSRvcHQgJGhlbGxvX3NoYTEKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2gtY2hlY2sgZm9yIGEgbm9uLWV4aXN0ZW50IG5hbWVkIG9iamVjdCIgJworICAgIHRlc3QgImZvb2JhcjQyIG1pc3NpbmcKK2Zvb2Jhcjg0IG1pc3NpbmciID0gXAorICAgICIkKCAoIGVjaG8gZm9vYmFyNDI7IGVjaG9fd2l0aG91dF9uZXdsaW5lIGZvb2Jhcjg0OyApIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2spIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWJhdGNoLWNoZWNrIGZvciBhIG5vbi1leGlzdGVudCBoYXNoIiAnCisgICAgdGVzdCAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MiBtaXNzaW5nCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0IG1pc3NpbmciID0gXAorICAgICIkKCAoIGVjaG8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MjsKKwkgZWNob193aXRob3V0X25ld2xpbmUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NDsgKSB8CisgICAgICAgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2spIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWJhdGNoIGZvciBhbiBleGlzdGVudCBhbmQgYSBub24tZXhpc3RlbnQgaGFzaCIgJworICAgIHRlc3QgIiR0YWdfc2hhMSB0YWcgJHRhZ19zaXplCiskdGFnX2NvbnRlbnQKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgbWlzc2luZyIgPSBcCisgICAgIiQoICggZWNobyAkdGFnX3NoYTE7CisJIGVjaG9fd2l0aG91dF9uZXdsaW5lIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA7ICkgfAorICAgICAgIGdpdCBjYXQtZmlsZSAtLWJhdGNoKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1iYXRjaC1jaGVjayBmb3IgYW4gZW1wdHkgbGluZSIgJworICAgIHRlc3QgIiBtaXNzaW5nIiA9ICIkKGVjaG8gfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjaykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IC0tYmF0Y2gtY2hlY2sgbm90aWNlcyBtaXNzaW5nIG9iamVjdCcgJworCWVjaG8gIiRaRVJPX09JRCBtaXNzaW5nIiA+ZXhwZWN0ICYmCisJZWNobyAiJFpFUk9fT0lEIiB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrPSIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2JhdGNoX2lucHV0PSIkaGVsbG9fc2hhMQorJGNvbW1pdF9zaGExCiskdGFnX3NoYTEKK2RlYWRiZWVmCisKKyIKKworYmF0Y2hfb3V0cHV0PSIkaGVsbG9fc2hhMSBibG9iICRoZWxsb19zaXplCiskaGVsbG9fY29udGVudAorJGNvbW1pdF9zaGExIGNvbW1pdCAkY29tbWl0X3NpemUKKyRjb21taXRfY29udGVudAorJHRhZ19zaGExIHRhZyAkdGFnX3NpemUKKyR0YWdfY29udGVudAorZGVhZGJlZWYgbWlzc2luZworIG1pc3NpbmciCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYmF0Y2ggd2l0aCBtdWx0aXBsZSBzaGExcyBnaXZlcyBjb3JyZWN0IGZvcm1hdCcgJworCXRlc3QgIiQobWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJGJhdGNoX291dHB1dCIgMSkiID0gIiQobWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGJhdGNoX2lucHV0IiB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoKSIgMSkiCisnCisKK2JhdGNoX2NoZWNrX2lucHV0PSIkaGVsbG9fc2hhMQorJHRyZWVfc2hhMQorJGNvbW1pdF9zaGExCiskdGFnX3NoYTEKK2RlYWRiZWVmCisKKyIKKworYmF0Y2hfY2hlY2tfb3V0cHV0PSIkaGVsbG9fc2hhMSBibG9iICRoZWxsb19zaXplCiskdHJlZV9zaGExIHRyZWUgJHRyZWVfc2l6ZQorJGNvbW1pdF9zaGExIGNvbW1pdCAkY29tbWl0X3NpemUKKyR0YWdfc2hhMSB0YWcgJHRhZ19zaXplCitkZWFkYmVlZiBtaXNzaW5nCisgbWlzc2luZyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1iYXRjaC1jaGVjayB3aXRoIG11bHRpcGxlIHNoYTFzIGdpdmVzIGNvcnJlY3QgZm9ybWF0IiAnCisgICAgdGVzdCAiJGJhdGNoX2NoZWNrX291dHB1dCIgPSBcCisgICAgIiQoZWNob193aXRob3V0X25ld2xpbmUgIiRiYXRjaF9jaGVja19pbnB1dCIgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjaykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJsb2JzIHdoaWNoIGFyZSBsaWtlbHkgdG8gZGVsdGEnICcKKwl0ZXN0LXRvb2wgZ2VucmFuZG9tIGZvbyAxMDI0MCA+Zm9vICYmCisJeyBjYXQgZm9vOyBlY2hvIHBsdXM7IH0gPmZvby1wbHVzICYmCisJZ2l0IGFkZCBmb28gZm9vLXBsdXMgJiYKKwlnaXQgY29tbWl0IC1tIGZvbyAmJgorCWNhdCA+YmxvYnMgPDwtXEVPRgorCUhFQUQ6Zm9vCisJSEVBRDpmb28tcGx1cworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maXJtIHRoYXQgbmVpdGhlciBsb29zZSBibG9iIGlzIGEgZGVsdGEnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkWkVST19PSUQKKwkkWkVST19PSUQKKwlFT0YKKwlnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjaz0iJShkZWx0YWJhc2UpIiA8YmxvYnMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBUbyBhdm9pZCByZWx5aW5nIHRvbyBtdWNoIG9uIHRoZSBjdXJyZW50IGRlbHRhIGhldXJpc3RpY3MsCisjIHdlIHdpbGwgY2hlY2sgb25seSB0aGF0IG9uZSBvZiB0aGUgdHdvIG9iamVjdHMgaXMgYSBkZWx0YQorIyBhZ2FpbnN0IHRoZSBvdGhlciwgYnV0IG5vdCB0aGUgb3JkZXIuIFdlIGNhbiBkbyBzbyBieSBqdXN0CisjIGFza2luZyBmb3IgdGhlIGJhc2Ugb2YgYm90aCwgYW5kIGNoZWNraW5nIHdoZXRoZXIgZWl0aGVyCisjIHNoYTEgYXBwZWFycyBpbiB0aGUgb3V0cHV0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnJShkZWx0YWJhc2UpIHJlcG9ydHMgcGFja2VkIGRlbHRhIGJhc2VzJyAnCisJZ2l0IHJlcGFjayAtYWQgJiYKKwlnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjaz0iJShkZWx0YWJhc2UpIiA8YmxvYnMgPmFjdHVhbCAmJgorCXsKKwkJZ3JlcCAiJChnaXQgcmV2LXBhcnNlIEhFQUQ6Zm9vKSIgYWN0dWFsIHx8CisJCWdyZXAgIiQoZ2l0IHJldi1wYXJzZSBIRUFEOmZvby1wbHVzKSIgYWN0dWFsCisJfQorJworCitib2d1c190eXBlPSJib2d1cyIKK2JvZ3VzX2NvbnRlbnQ9ImJvZ3VzIgorYm9ndXNfc2l6ZT0kKHN0cmxlbiAiJGJvZ3VzX2NvbnRlbnQiKQorYm9ndXNfc2hhMT0kKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkYm9ndXNfY29udGVudCIgfCBnaXQgaGFzaC1vYmplY3QgLXQgJGJvZ3VzX3R5cGUgLS1saXRlcmFsbHkgLXcgLS1zdGRpbikKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiVHlwZSBvZiBicm9rZW4gb2JqZWN0IGlzIGNvcnJlY3QiICcKKwllY2hvICRib2d1c190eXBlID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgLXQgLS1hbGxvdy11bmtub3duLXR5cGUgJGJvZ3VzX3NoYTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiU2l6ZSBvZiBicm9rZW4gb2JqZWN0IGlzIGNvcnJlY3QiICcKKwllY2hvICRib2d1c19zaXplID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgLXMgLS1hbGxvdy11bmtub3duLXR5cGUgJGJvZ3VzX3NoYTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKK2JvZ3VzX3R5cGU9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MTIzNDY3OSIKK2JvZ3VzX2NvbnRlbnQ9ImJvZ3VzIgorYm9ndXNfc2l6ZT0kKHN0cmxlbiAiJGJvZ3VzX2NvbnRlbnQiKQorYm9ndXNfc2hhMT0kKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkYm9ndXNfY29udGVudCIgfCBnaXQgaGFzaC1vYmplY3QgLXQgJGJvZ3VzX3R5cGUgLS1saXRlcmFsbHkgLXcgLS1zdGRpbikKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiVHlwZSBvZiBicm9rZW4gb2JqZWN0IGlzIGNvcnJlY3Qgd2hlbiB0eXBlIGlzIGxhcmdlIiAnCisJZWNobyAkYm9ndXNfdHlwZSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIC10IC0tYWxsb3ctdW5rbm93bi10eXBlICRib2d1c19zaGExID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlNpemUgb2YgbGFyZ2UgYnJva2VuIG9iamVjdCBpcyBjb3JyZWN0IHdoZW4gdHlwZSBpcyBsYXJnZSIgJworCWVjaG8gJGJvZ3VzX3NpemUgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSAtcyAtLWFsbG93LXVua25vd24tdHlwZSAkYm9ndXNfc2hhMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFRlc3RzIGZvciBnaXQgY2F0LWZpbGUgLS1mb2xsb3ctc3ltbGlua3MKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXAgZm9yIHN5bWxpbmsgdGVzdHMnICcKKwllY2hvX3dpdGhvdXRfbmV3bGluZSAiJGhlbGxvX2NvbnRlbnQiID5tb3J4ICYmCisJdGVzdF9sbl9zX2FkZCBtb3J4IHNhbWUtZGlyLWxpbmsgJiYKKwl0ZXN0X2xuX3NfYWRkIGRpciBsaW5rLXRvLWRpciAmJgorCXRlc3RfbG5fc19hZGQgLi4vZmxlZW0gb3V0LW9mLXJlcG8tbGluayAmJgorCXRlc3RfbG5fc19hZGQgLi4gb3V0LW9mLXJlcG8tbGluay1kaXIgJiYKKwl0ZXN0X2xuX3NfYWRkIHNhbWUtZGlyLWxpbmsgbGluay10by1saW5rICYmCisJdGVzdF9sbl9zX2FkZCBub3BlIGJyb2tlbi1zYW1lLWRpci1saW5rICYmCisJbWtkaXIgZGlyICYmCisJdGVzdF9sbl9zX2FkZCAuLi9tb3J4IGRpci9wYXJlbnQtZGlyLWxpbmsgJiYKKwl0ZXN0X2xuX3NfYWRkIC4uIGRpci9saW5rLWRpciAmJgorCXRlc3RfbG5fc19hZGQgLi4vLi4vZXNjYXBlIGRpci9vdXQtb2YtcmVwby1saW5rICYmCisJdGVzdF9sbl9zX2FkZCAuLi8uLiBkaXIvb3V0LW9mLXJlcG8tbGluay1kaXIgJiYKKwl0ZXN0X2xuX3NfYWRkIG5vcGUgZGlyL2Jyb2tlbi1saW5rLWluLWRpciAmJgorCW1rZGlyIGRpci9zdWJkaXIgJiYKKwl0ZXN0X2xuX3NfYWRkIC4uLy4uL21vcnggZGlyL3N1YmRpci9ncmFuZHBhcmVudC1kaXItbGluayAmJgorCXRlc3RfbG5fc19hZGQgLi4vLi4vLi4vZ3JlYXQtZXNjYXBlIGRpci9zdWJkaXIvb3V0LW9mLXJlcG8tbGluayAmJgorCXRlc3RfbG5fc19hZGQgLi4vLi4vLi4gZGlyL3N1YmRpci9vdXQtb2YtcmVwby1saW5rLWRpciAmJgorCXRlc3RfbG5fc19hZGQgLi4vLi4vLi4vIGRpci9zdWJkaXIvb3V0LW9mLXJlcG8tbGluay1kaXItdHJhaWxpbmcgJiYKKwl0ZXN0X2xuX3NfYWRkIC4uL3BhcmVudC1kaXItbGluayBkaXIvc3ViZGlyL3BhcmVudC1kaXItbGluay10by1saW5rICYmCisJZWNob193aXRob3V0X25ld2xpbmUgIiRoZWxsb19jb250ZW50IiA+ZGlyL3N1YmRpci9pbmQyICYmCisJZWNob193aXRob3V0X25ld2xpbmUgIiRoZWxsb19jb250ZW50IiA+ZGlyL2luZDEgJiYKKwl0ZXN0X2xuX3NfYWRkIGRpciBkaXJsaW5rICYmCisJdGVzdF9sbl9zX2FkZCBkaXIvc3ViZGlyIHN1YmRpcmxpbmsgJiYKKwl0ZXN0X2xuX3NfYWRkIHN1YmRpci9pbmQyIGRpci9saW5rLXRvLWNoaWxkICYmCisJdGVzdF9sbl9zX2FkZCBkaXIvbGluay10by1jaGlsZCBsaW5rLXRvLWRvd24tbGluayAmJgorCXRlc3RfbG5fc19hZGQgZGlyLy4uIHVwLWRvd24gJiYKKwl0ZXN0X2xuX3NfYWRkIGRpci8uLi8gdXAtZG93bi10cmFpbGluZyAmJgorCXRlc3RfbG5fc19hZGQgZGlyLy4uL21vcnggdXAtZG93bi1maWxlICYmCisJdGVzdF9sbl9zX2FkZCBkaXIvLi4vLi4vbW9yeCB1cC11cC1kb3duLWZpbGUgJiYKKwl0ZXN0X2xuX3NfYWRkIHN1YmRpcmxpbmsvLi4vLi4vbW9yeCB1cC10d28tZG93bi1maWxlICYmCisJdGVzdF9sbl9zX2FkZCBsb29wMSBsb29wMiAmJgorCXRlc3RfbG5fc19hZGQgbG9vcDIgbG9vcDEgJiYKKwlnaXQgYWRkIG1vcnggZGlyL3N1YmRpci9pbmQyIGRpci9pbmQxICYmCisJZ2l0IGNvbW1pdCAtYW0gInRlc3QiICYmCisJZWNobyAkaGVsbG9fc2hhMSBibG9iICRoZWxsb19zaXplID5mb3VuZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyB3b3JrcyBmb3Igbm9uLWxpbmtzJyAnCisJZWNobyBIRUFEOm1vcnggfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZm91bmQgYWN0dWFsICYmCisJZWNobyBIRUFEOm5vcGUgbWlzc2luZyA+ZXhwZWN0ICYmCisJZWNobyBIRUFEOm5vcGUgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyB3b3JrcyBmb3IgaW4tcmVwbywgc2FtZS1kaXIgbGlua3MnICcKKwllY2hvIEhFQUQ6c2FtZS1kaXItbGluayB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmb3VuZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3Mgd29ya3MgZm9yIGluLXJlcG8sIGxpbmtzIHRvIGRpcnMnICcKKwllY2hvIEhFQUQ6bGluay10by1kaXIvaW5kMSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmb3VuZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyB3b3JrcyBmb3IgYnJva2VuIGluLXJlcG8sIHNhbWUtZGlyIGxpbmtzJyAnCisJZWNobyBkYW5nbGluZyAyNSA+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmJyb2tlbi1zYW1lLWRpci1saW5rID4+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmJyb2tlbi1zYW1lLWRpci1saW5rIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3Mgd29ya3MgZm9yIHNhbWUtZGlyIGxpbmtzLXRvLWxpbmtzJyAnCisJZWNobyBIRUFEOmxpbmstdG8tbGluayB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmb3VuZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3Mgd29ya3MgZm9yIHBhcmVudC1kaXIgbGlua3MnICcKKwllY2hvIEhFQUQ6ZGlyL3BhcmVudC1kaXItbGluayB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmb3VuZCBhY3R1YWwgJiYKKwllY2hvIG5vdGRpciAyOSA+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmRpci9wYXJlbnQtZGlyLWxpbmsvbm9wZSA+PmV4cGVjdCAmJgorCWVjaG8gSEVBRDpkaXIvcGFyZW50LWRpci1saW5rL25vcGUgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyB3b3JrcyBmb3IgLi4gbGlua3MnICcKKwllY2hvIGRhbmdsaW5nIDIyID5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlyL2xpbmstZGlyL25vcGUgPj5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlyL2xpbmstZGlyL25vcGUgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gSEVBRDpkaXIvbGluay1kaXIvbW9yeCB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmb3VuZCBhY3R1YWwgJiYKKwllY2hvIGRhbmdsaW5nIDI3ID5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlyL2Jyb2tlbi1saW5rLWluLWRpciA+PmV4cGVjdCAmJgorCWVjaG8gSEVBRDpkaXIvYnJva2VuLWxpbmstaW4tZGlyIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3Mgd29ya3MgZm9yIC4uLy4uIGxpbmtzJyAnCisJZWNobyBub3RkaXIgNDEgPmV4cGVjdCAmJgorCWVjaG8gSEVBRDpkaXIvc3ViZGlyL2dyYW5kcGFyZW50LWRpci1saW5rL25vcGUgPj5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlyL3N1YmRpci9ncmFuZHBhcmVudC1kaXItbGluay9ub3BlIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvIEhFQUQ6ZGlyL3N1YmRpci9ncmFuZHBhcmVudC1kaXItbGluayB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmb3VuZCBhY3R1YWwgJiYKKwllY2hvIEhFQUQ6ZGlyL3N1YmRpci9wYXJlbnQtZGlyLWxpbmstdG8tbGluayB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmb3VuZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3Mgd29ya3MgZm9yIGRpci8gbGlua3MnICcKKwllY2hvIGRhbmdsaW5nIDE3ID5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlybGluay9tb3J4ID4+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmRpcmxpbmsvbW9yeCB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyAkaGVsbG9fc2hhMSBibG9iICRoZWxsb19zaXplID5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlybGluay9pbmQxIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3Mgd29ya3MgZm9yIGRpci9zdWJkaXIgbGlua3MnICcKKwllY2hvIGRhbmdsaW5nIDIwID5leHBlY3QgJiYKKwllY2hvIEhFQUQ6c3ViZGlybGluay9tb3J4ID4+ZXhwZWN0ICYmCisJZWNobyBIRUFEOnN1YmRpcmxpbmsvbW9yeCB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyBIRUFEOnN1YmRpcmxpbmsvaW5kMiB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmb3VuZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3Mgd29ya3MgZm9yIGRpciAtPnN1YmRpciBsaW5rcycgJworCWVjaG8gbm90ZGlyIDI3ID5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlyL2xpbmstdG8tY2hpbGQvbW9yeCA+PmV4cGVjdCAmJgorCWVjaG8gSEVBRDpkaXIvbGluay10by1jaGlsZC9tb3J4IHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvIEhFQUQ6ZGlyL2xpbmstdG8tY2hpbGQgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZm91bmQgYWN0dWFsICYmCisJZWNobyBIRUFEOmxpbmstdG8tZG93bi1saW5rIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGZvdW5kIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyB3b3JrcyBmb3Igb3V0LW9mLXJlcG8gc3ltbGlua3MnICcKKwllY2hvIHN5bWxpbmsgOCA+ZXhwZWN0ICYmCisJZWNobyAuLi9mbGVlbSA+PmV4cGVjdCAmJgorCWVjaG8gSEVBRDpvdXQtb2YtcmVwby1saW5rIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvIHN5bWxpbmsgMiA+ZXhwZWN0ICYmCisJZWNobyAuLiA+PmV4cGVjdCAmJgorCWVjaG8gSEVBRDpvdXQtb2YtcmVwby1saW5rLWRpciB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzIHdvcmtzIGZvciBvdXQtb2YtcmVwbyBzeW1saW5rcyBpbiBkaXJzJyAnCisJZWNobyBzeW1saW5rIDkgPmV4cGVjdCAmJgorCWVjaG8gLi4vZXNjYXBlID4+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmRpci9vdXQtb2YtcmVwby1saW5rIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvIHN5bWxpbmsgMiA+ZXhwZWN0ICYmCisJZWNobyAuLiA+PmV4cGVjdCAmJgorCWVjaG8gSEVBRDpkaXIvb3V0LW9mLXJlcG8tbGluay1kaXIgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyB3b3JrcyBmb3Igb3V0LW9mLXJlcG8gc3ltbGlua3MgaW4gc3ViZGlycycgJworCWVjaG8gc3ltbGluayAxNSA+ZXhwZWN0ICYmCisJZWNobyAuLi9ncmVhdC1lc2NhcGUgPj5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlyL3N1YmRpci9vdXQtb2YtcmVwby1saW5rIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvIHN5bWxpbmsgMiA+ZXhwZWN0ICYmCisJZWNobyAuLiA+PmV4cGVjdCAmJgorCWVjaG8gSEVBRDpkaXIvc3ViZGlyL291dC1vZi1yZXBvLWxpbmstZGlyIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvIHN5bWxpbmsgMyA+ZXhwZWN0ICYmCisJZWNobyAuLi8gPj5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlyL3N1YmRpci9vdXQtb2YtcmVwby1saW5rLWRpci10cmFpbGluZyB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzIHdvcmtzIGZvciBzeW1saW5rcyB3aXRoIGludGVybmFsIC4uJyAnCisJZWNobyBIRUFEOiB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrID5leHBlY3QgJiYKKwllY2hvIEhFQUQ6dXAtZG93biB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyBIRUFEOnVwLWRvd24tdHJhaWxpbmcgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gSEVBRDp1cC1kb3duLWZpbGUgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZm91bmQgYWN0dWFsICYmCisJZWNobyBzeW1saW5rIDcgPmV4cGVjdCAmJgorCWVjaG8gLi4vbW9yeCA+PmV4cGVjdCAmJgorCWVjaG8gSEVBRDp1cC11cC1kb3duLWZpbGUgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gSEVBRDp1cC10d28tZG93bi1maWxlIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGZvdW5kIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rIGJyZWFrcyBsb29wcycgJworCWVjaG8gbG9vcCAxMCA+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmxvb3AxID4+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmxvb3AxIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2ggLS1mb2xsb3ctc3ltbGluayByZXR1cm5zIGNvcnJlY3Qgc2hhIGFuZCBtb2RlJyAnCisJZWNobyBIRUFEOm1vcnggfCBnaXQgY2F0LWZpbGUgLS1iYXRjaCA+ZXhwZWN0ICYmCisJZWNobyBIRUFEOm1vcnggfCBnaXQgY2F0LWZpbGUgLS1iYXRjaCAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZSAtLWJhdGNoLWFsbC1vYmplY3RzIHNob3dzIGFsbCBvYmplY3RzJyAnCisJIyBtYWtlIG5ldyByZXBvcyBzbyB3ZSBrbm93IHRoZSBmdWxsIHNldCBvZiBvYmplY3RzOyB3ZSB3aWxsCisJIyBhbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZSBzb21lIHBhY2tlZCBhbmQgc29tZSBsb29zZQorCSMgb2JqZWN0cywgc29tZSByZWZlcmVuY2VkIGFuZCBzb21lIG5vdCwgc29tZSBkdXBsaWNhdGVzLCBhbmQgdGhhdAorCSMgdGhlcmUgYXJlIHNvbWUgYXZhaWxhYmxlIG9ubHkgdmlhIGFsdGVybmF0ZXMuCisJZ2l0IGluaXQgYWxsLW9uZSAmJgorCSgKKwkJY2QgYWxsLW9uZSAmJgorCQllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLXFtIGJhc2UgJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEIEhFQURee3RyZWV9IEhFQUQ6ZmlsZSAmJgorCQlnaXQgcmVwYWNrIC1hZCAmJgorCQllY2hvIG5vdC1jbG9uZWQgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbgorCSkgPmV4cGVjdC51bnNvcnRlZCAmJgorCWdpdCBjbG9uZSAtcyBhbGwtb25lIGFsbC10d28gJiYKKwkoCisJCWNkIGFsbC10d28gJiYKKwkJZWNobyBsb2NhbC11bnJlZiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluCisJKSA+PmV4cGVjdC51bnNvcnRlZCAmJgorCWdpdCAtQyBhbGwtdHdvIHJldi1wYXJzZSBIRUFEOmZpbGUgfAorCQlnaXQgLUMgYWxsLXR3byBwYWNrLW9iamVjdHMgLmdpdC9vYmplY3RzL3BhY2svcGFjayAmJgorCXNvcnQgPGV4cGVjdC51bnNvcnRlZCA+ZXhwZWN0ICYmCisJZ2l0IC1DIGFsbC10d28gY2F0LWZpbGUgLS1iYXRjaC1hbGwtb2JqZWN0cyBcCisJCQkJLS1iYXRjaC1jaGVjaz0iJShvYmplY3RuYW1lKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBUaGUgb25seSB1c2VyLXZpc2libGUgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBvYmplY3RzIGFyZSBubyBsb25nZXIgc29ydGVkLAorIyBhbmQgdGhlIHJlc3VsdGluZyBzb3J0IG9yZGVyIGlzIHVuZGVmaW5lZC4gU28gd2UgY2FuIG9ubHkgY2hlY2sgdGhhdCBpdAorIyBwcm9kdWNlcyB0aGUgc2FtZSBvYmplY3RzIGFzIHRoZSBvcmRlcmVkIGNhc2UsIGJ1dCB0aGF0IGF0IGxlYXN0IGV4ZXJjaXNlcworIyB0aGUgY29kZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhdC1maWxlIC0tdW5vcmRlcmVkIHdvcmtzJyAnCisJZ2l0IC1DIGFsbC10d28gY2F0LWZpbGUgLS1iYXRjaC1hbGwtb2JqZWN0cyAtLXVub3JkZXJlZCBcCisJCQkJLS1iYXRjaC1jaGVjaz0iJShvYmplY3RuYW1lKSIgPmFjdHVhbC51bnNvcnRlZCAmJgorCXNvcnQgPGFjdHVhbC51bnNvcnRlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDctaGFzaC1vYmplY3Quc2ggYi90L3QxMDA3LWhhc2gtb2JqZWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY0YjM0MGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDA3LWhhc2gtb2JqZWN0LnNoCkBAIC0wLDAgKzEsMjUxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iZ2l0IGhhc2gtb2JqZWN0IgorCisuIC4vdGVzdC1saWIuc2gKKworZWNob193aXRob3V0X25ld2xpbmUoKSB7CisJcHJpbnRmICclcycgIiQqIgorfQorCit0ZXN0X2Jsb2JfZG9lc19ub3RfZXhpc3QoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxvYiBkb2VzIG5vdCBleGlzdCBpbiBkYXRhYmFzZScgIgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkMQorCSIKK30KKwordGVzdF9ibG9iX2V4aXN0cygpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iIGV4aXN0cyBpbiBkYXRhYmFzZScgIgorCQlnaXQgY2F0LWZpbGUgYmxvYiAkMQorCSIKK30KKworaGVsbG9fY29udGVudD0iSGVsbG8gV29ybGQiCitleGFtcGxlX2NvbnRlbnQ9IlRoaXMgaXMgYW4gZXhhbXBsZSIKKworc2V0dXBfcmVwbygpIHsKKwllY2hvX3dpdGhvdXRfbmV3bGluZSAiJGhlbGxvX2NvbnRlbnQiID4gaGVsbG8KKwllY2hvX3dpdGhvdXRfbmV3bGluZSAiJGV4YW1wbGVfY29udGVudCIgPiBleGFtcGxlCit9CisKK3Rlc3RfcmVwbz10ZXN0CitwdXNoX3JlcG8oKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAkdGVzdF9yZXBvCisJY2QgJHRlc3RfcmVwbworCisJc2V0dXBfcmVwbworfQorCitwb3BfcmVwbygpIHsKKwljZCAuLgorCXJtIC1yZiAkdGVzdF9yZXBvCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJc2V0dXBfcmVwbyAmJgorCXRlc3Rfb2lkX2NhY2hlIDw8LUVPRgorCWhlbGxvIHNoYTE6NWUxYzMwOWRhZTdmNDVlMGYzOWIxYmYzYWMzY2Q5ZGIxMmU3ZDY4OQorCWhlbGxvIHNoYTI1NjoxZTNiNmMwNGQyZWViMmIzZTQ1YzhhMzMwNDQ1NDA0YzBiN2NjN2IyNTdlMmIwOTcxNjdkMjZmNTIzMDA5MGM0CisKKwlleGFtcGxlIHNoYTE6ZGRkM2Y4MzZkM2UzZmJiN2FlMjg5YWE5YWU4MzUzNmY3Njk1NjM5OQorCWV4YW1wbGUgc2hhMjU2OmI0NGZlMWZlNjU1ODk4NDgyNTM3MzdkYjg1OWJkNDkwNDUzNTEwNzE5ZDc0MjRkYWFiMDNkYWYwNzY3Yjg1YWUKKwlFT0YKKycKKworIyBBcmd1bWVudCBjaGVja2luZworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJtdWx0aXBsZSAnLS1zdGRpbidzIGFyZSByZWplY3RlZCIgJworCWVjaG8gZXhhbXBsZSB8IHRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIC0tc3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiQ2FuJ3QgdXNlIC0tc3RkaW4gYW5kIC0tc3RkaW4tcGF0aHMgdG9nZXRoZXIiICcKKwllY2hvIGV4YW1wbGUgfCB0ZXN0X211c3RfZmFpbCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiAtLXN0ZGluLXBhdGhzICYmCisJZWNobyBleGFtcGxlIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4tcGF0aHMgLS1zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJDYW4ndCBwYXNzIGZpbGVuYW1lcyBhcyBhcmd1bWVudHMgd2l0aCAtLXN0ZGluLXBhdGhzIiAnCisJZWNobyBleGFtcGxlIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4tcGF0aHMgaGVsbG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiQ2FuJ3QgdXNlIC0tcGF0aCB3aXRoIC0tc3RkaW4tcGF0aHMiICcKKwllY2hvIGV4YW1wbGUgfCB0ZXN0X211c3RfZmFpbCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocyAtLXBhdGg9Zm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIkNhbid0IHVzZSAtLXBhdGggd2l0aCAtLW5vLWZpbHRlcnMiICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgaGFzaC1vYmplY3QgLS1uby1maWx0ZXJzIC0tcGF0aD1mb28KKycKKworIyBCZWhhdmlvcgorCitwdXNoX3JlcG8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFzaCBhIGZpbGUnICcKKwl0ZXN0ICIkKHRlc3Rfb2lkIGhlbGxvKSIgPSAkKGdpdCBoYXNoLW9iamVjdCBoZWxsbykKKycKKwordGVzdF9ibG9iX2RvZXNfbm90X2V4aXN0ICIkKHRlc3Rfb2lkIGhlbGxvKSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFzaCBmcm9tIHN0ZGluJyAnCisJdGVzdCAiJCh0ZXN0X29pZCBleGFtcGxlKSIgPSAkKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDwgZXhhbXBsZSkKKycKKwordGVzdF9ibG9iX2RvZXNfbm90X2V4aXN0ICIkKHRlc3Rfb2lkIGV4YW1wbGUpIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXNoIGEgZmlsZSBhbmQgd3JpdGUgdG8gZGF0YWJhc2UnICcKKwl0ZXN0ICIkKHRlc3Rfb2lkIGhlbGxvKSIgPSAkKGdpdCBoYXNoLW9iamVjdCAtdyBoZWxsbykKKycKKwordGVzdF9ibG9iX2V4aXN0cyAiJCh0ZXN0X29pZCBoZWxsbykiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBoYXNoLW9iamVjdCAtLXN0ZGluIGZpbGUxIDxmaWxlMCBmaXJzdCBvcGVyYXRlcyBvbiBmaWxlMCwgdGhlbiBmaWxlMScgJworCWVjaG8gZm9vID4gZmlsZTEgJiYKKwlvYm5hbWUwPSQoZWNobyBiYXIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwlvYm5hbWUxPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUxKSAmJgorCW9ibmFtZTBuZXc9JChlY2hvIGJhciB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIGZpbGUxIHwgc2VkIC1uIC1lIDFwKSAmJgorCW9ibmFtZTFuZXc9JChlY2hvIGJhciB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIGZpbGUxIHwgc2VkIC1uIC1lIDJwKSAmJgorCXRlc3QgIiRvYm5hbWUwIiA9ICIkb2JuYW1lMG5ldyIgJiYKKwl0ZXN0ICIkb2JuYW1lMSIgPSAiJG9ibmFtZTFuZXciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBjcmxmIHRlc3RzJyAnCisJZWNobyBmb29RIHwgdHIgUSAiXFwwMTUiID5maWxlMCAmJgorCWNwIGZpbGUwIGZpbGUxICYmCisJZWNobyAiZmlsZTAgLWNybGYiID4uZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gImZpbGUxIGNybGYiID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWZpbGUwX3NoYT0kKGdpdCBoYXNoLW9iamVjdCBmaWxlMCkgJiYKKwlmaWxlMV9zaGE9JChnaXQgaGFzaC1vYmplY3QgZmlsZTEpICYmCisJdGVzdCAiJGZpbGUwX3NoYSIgIT0gIiRmaWxlMV9zaGEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoYXQgYXBwcm9wcmlhdGUgZmlsdGVyIGlzIGludm9rZSB3aGVuIC0tcGF0aCBpcyB1c2VkJyAnCisJcGF0aDFfc2hhPSQoZ2l0IGhhc2gtb2JqZWN0IC0tcGF0aD1maWxlMSBmaWxlMCkgJiYKKwlwYXRoMF9zaGE9JChnaXQgaGFzaC1vYmplY3QgLS1wYXRoPWZpbGUwIGZpbGUxKSAmJgorCXRlc3QgIiRmaWxlMF9zaGEiID0gIiRwYXRoMF9zaGEiICYmCisJdGVzdCAiJGZpbGUxX3NoYSIgPSAiJHBhdGgxX3NoYSIgJiYKKwlwYXRoMV9zaGE9JChjYXQgZmlsZTAgfCBnaXQgaGFzaC1vYmplY3QgLS1wYXRoPWZpbGUxIC0tc3RkaW4pICYmCisJcGF0aDBfc2hhPSQoY2F0IGZpbGUxIHwgZ2l0IGhhc2gtb2JqZWN0IC0tcGF0aD1maWxlMCAtLXN0ZGluKSAmJgorCXRlc3QgIiRmaWxlMF9zaGEiID0gIiRwYXRoMF9zaGEiICYmCisJdGVzdCAiJGZpbGUxX3NoYSIgPSAiJHBhdGgxX3NoYSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0YXR0cmlidXRlcyBhbHNvIHdvcmsgaW4gYSBzdWJkaXJlY3RvcnknICcKKwlta2RpciBzdWJkaXIgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlzdWJkaXJfc2hhMD0kKGdpdCBoYXNoLW9iamVjdCAuLi9maWxlMCkgJiYKKwkJc3ViZGlyX3NoYTE9JChnaXQgaGFzaC1vYmplY3QgLi4vZmlsZTEpICYmCisJCXRlc3QgIiRmaWxlMF9zaGEiID0gIiRzdWJkaXJfc2hhMCIgJiYKKwkJdGVzdCAiJGZpbGUxX3NoYSIgPSAiJHN1YmRpcl9zaGExIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wYXRoIHdvcmtzIGluIGEgc3ViZGlyZWN0b3J5JyAnCisJKAorCQljZCBzdWJkaXIgJiYKKwkJcGF0aDFfc2hhPSQoZ2l0IGhhc2gtb2JqZWN0IC0tcGF0aD0uLi9maWxlMSAuLi9maWxlMCkgJiYKKwkJcGF0aDBfc2hhPSQoZ2l0IGhhc2gtb2JqZWN0IC0tcGF0aD0uLi9maWxlMCAuLi9maWxlMSkgJiYKKwkJdGVzdCAiJGZpbGUwX3NoYSIgPSAiJHBhdGgwX3NoYSIgJiYKKwkJdGVzdCAiJGZpbGUxX3NoYSIgPSAiJHBhdGgxX3NoYSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoYXQgLS1uby1maWx0ZXJzIG9wdGlvbiB3b3JrcycgJworCW5vZmlsdGVyc19maWxlMT0kKGdpdCBoYXNoLW9iamVjdCAtLW5vLWZpbHRlcnMgZmlsZTEpICYmCisJdGVzdCAiJGZpbGUwX3NoYSIgPSAiJG5vZmlsdGVyc19maWxlMSIgJiYKKwlub2ZpbHRlcnNfZmlsZTE9JChjYXQgZmlsZTEgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwl0ZXN0ICIkZmlsZTBfc2hhIiA9ICIkbm9maWx0ZXJzX2ZpbGUxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0aGF0IC0tbm8tZmlsdGVycyBvcHRpb24gd29ya3Mgd2l0aCAtLXN0ZGluLXBhdGhzJyAnCisJbm9maWx0ZXJzX2ZpbGUxPSQoZWNobyAiZmlsZTEiIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4tcGF0aHMgLS1uby1maWx0ZXJzKSAmJgorCXRlc3QgIiRmaWxlMF9zaGEiID0gIiRub2ZpbHRlcnNfZmlsZTEiCisnCisKK3BvcF9yZXBvCisKK2ZvciBhcmdzIGluICItdyAtLXN0ZGluIiAiLS1zdGRpbiAtdyI7IGRvCisJcHVzaF9yZXBvCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoYXNoIGZyb20gc3RkaW4gYW5kIHdyaXRlIHRvIGRhdGFiYXNlICgkYXJncykiICcKKwkJdGVzdCAiJCh0ZXN0X29pZCBleGFtcGxlKSIgPSAkKGdpdCBoYXNoLW9iamVjdCAkYXJncyA8IGV4YW1wbGUpCisJJworCisJdGVzdF9ibG9iX2V4aXN0cyAiJCh0ZXN0X29pZCBleGFtcGxlKSIKKworCXBvcF9yZXBvCitkb25lCisKK2ZpbGVuYW1lcz0iaGVsbG8KK2V4YW1wbGUiCisKK29pZHM9IiQodGVzdF9vaWQgaGVsbG8pCiskKHRlc3Rfb2lkIGV4YW1wbGUpIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJoYXNoIHR3byBmaWxlcyB3aXRoIG5hbWVzIG9uIHN0ZGluIiAnCisJdGVzdCAiJG9pZHMiID0gIiQoZWNob193aXRob3V0X25ld2xpbmUgIiRmaWxlbmFtZXMiIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4tcGF0aHMpIgorJworCitmb3IgYXJncyBpbiAiLXcgLS1zdGRpbi1wYXRocyIgIi0tc3RkaW4tcGF0aHMgLXciOyBkbworCXB1c2hfcmVwbworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGFzaCB0d28gZmlsZXMgd2l0aCBuYW1lcyBvbiBzdGRpbiBhbmQgd3JpdGUgdG8gZGF0YWJhc2UgKCRhcmdzKSIgJworCQl0ZXN0ICIkb2lkcyIgPSAiJChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGZpbGVuYW1lcyIgfCBnaXQgaGFzaC1vYmplY3QgJGFyZ3MpIgorCScKKworCXRlc3RfYmxvYl9leGlzdHMgIiQodGVzdF9vaWQgaGVsbG8pIgorCXRlc3RfYmxvYl9leGlzdHMgIiQodGVzdF9vaWQgZXhhbXBsZSkiCisKKwlwb3BfcmVwbworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0b28tc2hvcnQgdHJlZScgJworCWVjaG8gYWJjID5tYWxmb3JtZWQtdHJlZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtdCB0cmVlIG1hbGZvcm1lZC10cmVlIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAidG9vLXNob3J0IHRyZWUgb2JqZWN0IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFsZm9ybWVkIG1vZGUgaW4gdHJlZScgJworCWhleF9zaGExPSQoZWNobyBmb28gfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiAtdykgJiYKKwliaW5fc2hhMT0kKGVjaG8gJGhleF9zaGExIHwgaGV4Mm9jdCkgJiYKKwlwcmludGYgIjkxMDA2NDQgXDAkYmluX3NoYTEiID50cmVlLXdpdGgtbWFsZm9ybWVkLW1vZGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgaGFzaC1vYmplY3QgLXQgdHJlZSB0cmVlLXdpdGgtbWFsZm9ybWVkLW1vZGUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJtYWxmb3JtZWQgbW9kZSBpbiB0cmVlIGVudHJ5IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgZmlsZW5hbWUgaW4gdHJlZScgJworCWhleF9zaGExPSQoZWNobyBmb28gfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiAtdykgJiYKKwliaW5fc2hhMT0kKGVjaG8gJGhleF9zaGExIHwgaGV4Mm9jdCkgJiYKKwlwcmludGYgIjEwMDY0NCBcMCRiaW5fc2hhMSIgPnRyZWUtd2l0aC1lbXB0eS1maWxlbmFtZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtdCB0cmVlIHRyZWUtd2l0aC1lbXB0eS1maWxlbmFtZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImVtcHR5IGZpbGVuYW1lIGluIHRyZWUgZW50cnkiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JydXB0IGNvbW1pdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLS1zdGRpbiA8L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQgdGFnJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGhhc2gtb2JqZWN0IC10IHRhZyAtLXN0ZGluIDwvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFzaC1vYmplY3QgY29tcGxhaW5zIGFib3V0IGJvZ3VzIHR5cGUgbmFtZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtdCBib2d1cyAtLXN0ZGluIDwvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFzaC1vYmplY3QgY29tcGxhaW5zIGFib3V0IHRydW5jYXRlZCB0eXBlIG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgaGFzaC1vYmplY3QgLXQgYmwgLS1zdGRpbiA8L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbGl0ZXJhbGx5JyAnCisJdD0xMjM0NTY3ODkwICYmCisJZWNobyBleGFtcGxlIHwgZ2l0IGhhc2gtb2JqZWN0IC10ICR0IC0tbGl0ZXJhbGx5IC0tc3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1saXRlcmFsbHkgd2l0aCBleHRyYS1sb25nIHR5cGUnICcKKwl0PTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwICYmCisJdD0iJHQkdCR0JHQkdCR0JHQkdCR0JHQkdCR0JHQkdCR0JHQkdCR0JHQkdCR0JHQkdCR0JHQkdCR0JHQkdCR0IiAmJgorCWVjaG8gZXhhbXBsZSB8IGdpdCBoYXNoLW9iamVjdCAtdCAkdCAtLWxpdGVyYWxseSAtLXN0ZGluCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAwOC1yZWFkLXRyZWUtb3ZlcmxheS5zaCBiL3QvdDEwMDgtcmVhZC10cmVlLW92ZXJsYXkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2Y5NjAxNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMDgtcmVhZC10cmVlLW92ZXJsYXkuc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgbXVsdGktdHJlZSByZWFkLXRyZWUgd2l0aG91dCBtZXJnaW5nJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYWQtdHJlZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIG9uZSA+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCWVjaG8gdHdvID5iICYmCisJZ2l0IGFkZCBiICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBpbml0aWFsICYmCisJZWNobyB0aHJlZSA+YSAmJgorCW1rZGlyIGIgJiYKKwllY2hvIGZvdXIgPmIvYyAmJgorCWdpdCBhZGQgYi9jICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aS1yZWFkJyAnCisJcmVhZF90cmVlX211c3Rfc3VjY2VlZCBpbml0aWFsIG1hc3RlciBzaWRlICYmCisJdGVzdF93cml0ZV9saW5lcyBhIGIvYyA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3QxMDA5LXJlYWQtdHJlZS1uZXctaW5kZXguc2ggYi90L3QxMDA5LXJlYWQtdHJlZS1uZXctaW5kZXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTliM2FhNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMDktcmVhZC10cmVlLW5ldy1pbmRleC5zaApAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCByZWFkLXRyZWUgaW50byBhIGZyZXNoIGluZGV4IGZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIG9uZSA+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tZXhpc3RlbnQgaW5kZXggZmlsZScgJworCXJtIC1mIG5ldy1pbmRleCAmJgorCUdJVF9JTkRFWF9GSUxFPW5ldy1pbmRleCBnaXQgcmVhZC10cmVlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBpbmRleCBmaWxlJyAnCisJcm0gLWYgbmV3LWluZGV4ICYmCisJPiBuZXctaW5kZXggJiYKKwlHSVRfSU5ERVhfRklMRT1uZXctaW5kZXggZ2l0IHJlYWQtdHJlZSBtYXN0ZXIKKycKKwordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDEwMTAtbWt0cmVlLnNoIGIvdC90MTAxMC1ta3RyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjk0NmY4NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMTAtbWt0cmVlLnNoCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWt0cmVlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGQgaW4gYSBhLiBhMAorCWRvCisJCW1rZGlyICIkZCIgJiYgZWNobyAiJGQvb25lIiA+IiRkL29uZSIgJiYKKwkJZ2l0IGFkZCAiJGQiCisJZG9uZSAmJgorCWVjaG8gemVybyA+b25lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWluZm8tb25seSBvbmUgJiYKKwlnaXQgd3JpdGUtdHJlZSAtLW1pc3Npbmctb2sgPnRyZWUubWlzc2luZyAmJgorCWdpdCBscy10cmVlICQoY2F0IHRyZWUubWlzc2luZykgPnRvcC5taXNzaW5nICYmCisJZ2l0IGxzLXRyZWUgLXIgJChjYXQgdHJlZS5taXNzaW5nKSA+YWxsLm1pc3NpbmcgJiYKKwllY2hvIG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlnaXQgd3JpdGUtdHJlZSA+dHJlZSAmJgorCWdpdCBscy10cmVlICQoY2F0IHRyZWUpID50b3AgJiYKKwlnaXQgbHMtdHJlZSAtciAkKGNhdCB0cmVlKSA+YWxsICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtcSAtbSBvbmUgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICRIIHN1YiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLXEgLW0gdHdvICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSA+dHJlZS53aXRoc3ViICYmCisJZ2l0IGxzLXRyZWUgSEVBRCA+dG9wLndpdGhzdWIgJiYKKwlnaXQgbHMtdHJlZSAtciBIRUFEID5hbGwud2l0aHN1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIHBpcGVkIHRvIG1rdHJlZSAoMSknICcKKwlnaXQgbWt0cmVlIDx0b3AgPmFjdHVhbCAmJgorCXRlc3RfY21wIHRyZWUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgcGlwZWQgdG8gbWt0cmVlICgyKScgJworCWdpdCBta3RyZWUgPHRvcC53aXRoc3ViID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlLndpdGhzdWIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgb3V0cHV0IGluIHdyb25nIG9yZGVyIGdpdmVuIHRvIG1rdHJlZSAoMSknICcKKwlwZXJsIC1lICJwcmludCByZXZlcnNlIDw+IiA8dG9wIHwKKwlnaXQgbWt0cmVlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIG91dHB1dCBpbiB3cm9uZyBvcmRlciBnaXZlbiB0byBta3RyZWUgKDIpJyAnCisJcGVybCAtZSAicHJpbnQgcmV2ZXJzZSA8PiIgPHRvcC53aXRoc3ViIHwKKwlnaXQgbWt0cmVlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlLndpdGhzdWIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IG1pc3Npbmcgb2JqZWN0IHdpdGggLS1taXNzaW5nJyAnCisJZ2l0IG1rdHJlZSAtLW1pc3NpbmcgPHRvcC5taXNzaW5nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlLm1pc3NpbmcgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21rdHJlZSByZWZ1c2VzIHRvIHJlYWQgbHMtdHJlZSAtciBvdXRwdXQgKDEpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1rdHJlZSA8YWxsID5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWt0cmVlIHJlZnVzZXMgdG8gcmVhZCBscy10cmVlIC1yIG91dHB1dCAoMiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWt0cmVlIDxhbGwud2l0aHN1YiA+YWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAxMS1yZWFkLXRyZWUtc3BhcnNlLWNoZWNrb3V0LnNoIGIvdC90MTAxMS1yZWFkLXRyZWUtc3BhcnNlLWNoZWNrb3V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE0MGY0NTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDExLXJlYWQtdHJlZS1zcGFyc2UtY2hlY2tvdXQuc2gKQEAgLTAsMCArMSwyODMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzcGFyc2UgY2hlY2tvdXQgdGVzdHMKKworKiAodGFnOiByZW1vdmVkLCBtYXN0ZXIpIHJlbW92ZWQKK3wgRAlzdWIvYWRkZWQKKyogKEhFQUQsIHRhZzogdG9wKSBtb2RpZmllZCBhbmQgYWRkZWQKK3wgTQlpbml0LnQKK3wgQQlzdWIvYWRkZWQKKyogKHRhZzogaW5pdCkgaW5pdAorICBBCWluaXQudAorJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYWQtdHJlZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXQgJiYKKwllY2hvIG1vZGlmaWVkID4+aW5pdC50ICYmCisKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCTEwMDY0NCAkKGdpdCBoYXNoLW9iamVjdCBpbml0LnQpIDAJaW5pdC50CisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJc3ViL2FkZGVkCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJc3ViL2FkZGVkdG9vCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJc3Vic3ViL2FkZGVkCisJRU9GCisJY2F0ID5leHBlY3RlZC5zd3QgPDwtXEVPRiAmJgorCUggaW5pdC50CisJSCBzdWIvYWRkZWQKKwlIIHN1Yi9hZGRlZHRvbworCUggc3Vic3ViL2FkZGVkCisJRU9GCisKKwlta2RpciBzdWIgc3Vic3ViICYmCisJdG91Y2ggc3ViL2FkZGVkIHN1Yi9hZGRlZHRvbyBzdWJzdWIvYWRkZWQgJiYKKwlnaXQgYWRkIGluaXQudCBzdWIvYWRkZWQgc3ViL2FkZGVkdG9vIHN1YnN1Yi9hZGRlZCAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmaWVkIGFuZCBhZGRlZCIgJiYKKwlnaXQgdGFnIHRvcCAmJgorCWdpdCBybSBzdWIvYWRkZWQgJiYKKwlnaXQgY29tbWl0IC1tIHJlbW92ZWQgJiYKKwlnaXQgdGFnIHJlbW92ZWQgJiYKKwlnaXQgY2hlY2tvdXQgdG9wICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgd2l0aG91dCAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0JyAnCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJZ2l0IGxzLWZpbGVzIC10ID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3QgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB3aXRoIC5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgYnV0IGRpc2FibGVkJyAnCisJZWNobyA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBIRUFEICYmCisJZ2l0IGxzLWZpbGVzIC10ID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3QgcmVzdWx0ICYmCisJdGVzdCAtZiBpbml0LnQgJiYKKwl0ZXN0IC1mIHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgLS1uby1zcGFyc2UtY2hlY2tvdXQgd2l0aCBlbXB0eSAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IGFuZCBlbmFibGVkJyAnCisJZ2l0IGNvbmZpZyBjb3JlLnNwYXJzZWNoZWNrb3V0IHRydWUgJiYKKwllY2hvID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tbm8tc3BhcnNlLWNoZWNrb3V0IC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN3dCByZXN1bHQgJiYKKwl0ZXN0IC1mIGluaXQudCAmJgorCXRlc3QgLWYgc3ViL2FkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB3aXRoIGVtcHR5IC5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQnICcKKwlnaXQgY29uZmlnIGNvcmUuc3BhcnNlY2hlY2tvdXQgdHJ1ZSAmJgorCWVjaG8gPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPnJlc3VsdCAmJgorCWNhdCA+ZXhwZWN0ZWQuc3d0IDw8LVxFT0YgJiYKKwlTIGluaXQudAorCVMgc3ViL2FkZGVkCisJUyBzdWIvYWRkZWR0b28KKwlTIHN1YnN1Yi9hZGRlZAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkLnN3dCByZXN1bHQgJiYKKwkhIHRlc3QgLWYgaW5pdC50ICYmCisJISB0ZXN0IC1mIHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaCBkaXJlY3RvcmllcyB3aXRoIHRyYWlsaW5nIHNsYXNoJyAnCisJY2F0ID5leHBlY3RlZC5zd3Qtbm9pbml0IDw8LVxFT0YgJiYKKwlTIGluaXQudAorCUggc3ViL2FkZGVkCisJSCBzdWIvYWRkZWR0b28KKwlTIHN1YnN1Yi9hZGRlZAorCUVPRgorCisJZWNobyBzdWIvID4gLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBIRUFEICYmCisJZ2l0IGxzLWZpbGVzIC10ID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0LW5vaW5pdCByZXN1bHQgJiYKKwl0ZXN0ICEgLWYgaW5pdC50ICYmCisJdGVzdCAtZiBzdWIvYWRkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2ggZGlyZWN0b3JpZXMgd2l0aG91dCB0cmFpbGluZyBzbGFzaCcgJworCWVjaG8gc3ViID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN3dC1ub2luaXQgcmVzdWx0ICYmCisJdGVzdCAhIC1mIGluaXQudCAmJgorCXRlc3QgLWYgc3ViL2FkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hdGNoIGRpcmVjdG9yaWVzIHdpdGggbmVnYXRlZCBwYXR0ZXJucycgJworCWNhdCA+ZXhwZWN0ZWQuc3d0LW5lZ2F0aW9uIDw8XEVPRiAmJgorUyBpbml0LnQKK1Mgc3ViL2FkZGVkCitIIHN1Yi9hZGRlZHRvbworUyBzdWJzdWIvYWRkZWQKK0VPRgorCisJY2F0ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IDw8XEVPRiAmJgorc3ViCishc3ViL2FkZGVkCitFT0YKKwlnaXQgcmVhZC10cmVlIC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN3dC1uZWdhdGlvbiByZXN1bHQgJiYKKwl0ZXN0ICEgLWYgaW5pdC50ICYmCisJdGVzdCAhIC1mIHN1Yi9hZGRlZCAmJgorCXRlc3QgLWYgc3ViL2FkZGVkdG9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hdGNoIGRpcmVjdG9yaWVzIHdpdGggbmVnYXRlZCBwYXR0ZXJucyAoMiknICcKKwljYXQgPmV4cGVjdGVkLnN3dC1uZWdhdGlvbjIgPDxcRU9GICYmCitIIGluaXQudAorSCBzdWIvYWRkZWQKK1Mgc3ViL2FkZGVkdG9vCitIIHN1YnN1Yi9hZGRlZAorRU9GCisKKwljYXQgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPDxcRU9GICYmCisvKgorIXN1Ygorc3ViL2FkZGVkCitFT0YKKwlnaXQgcmVhZC10cmVlIC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN3dC1uZWdhdGlvbjIgcmVzdWx0ICYmCisJdGVzdCAtZiBpbml0LnQgJiYKKwl0ZXN0IC1mIHN1Yi9hZGRlZCAmJgorCXRlc3QgISAtZiBzdWIvYWRkZWR0b28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2ggZGlyZWN0b3J5IHBhdHRlcm4nICcKKwllY2hvICJzP2IiID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN3dC1ub2luaXQgcmVzdWx0ICYmCisJdGVzdCAhIC1mIGluaXQudCAmJgorCXRlc3QgLWYgc3ViL2FkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGFyZWEgY2hhbmdlcycgJworCWNhdCA+ZXhwZWN0ZWQuc3d0LW5vc3ViIDw8LVxFT0YgJiYKKwlIIGluaXQudAorCVMgc3ViL2FkZGVkCisJUyBzdWIvYWRkZWR0b28KKwlTIHN1YnN1Yi9hZGRlZAorCUVPRgorCisJZWNobyBpbml0LnQgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0LW5vc3ViIHJlc3VsdCAmJgorCXRlc3QgLWYgaW5pdC50ICYmCisJdGVzdCAhIC1mIHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgdXBkYXRlcyB3b3JrdHJlZSwgYWJzZW50IGNhc2UnICcKKwllY2hvIHN1Yi9hZGRlZCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgSEVBRF4gJiYKKwl0ZXN0ICEgLWYgaW5pdC50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB1cGRhdGVzIHdvcmt0cmVlLCBkaXJ0eSBjYXNlJyAnCisJZWNobyBzdWIvYWRkZWQgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgdG9wICYmCisJZWNobyBkaXJ0eSA+aW5pdC50ICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IEhFQUReICYmCisJZ3JlcCAtcSBkaXJ0eSBpbml0LnQgJiYKKwlybSBpbml0LnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIHJlbW92ZXMgd29ya3RyZWUsIGRpcnR5IGNhc2UnICcKKwllY2hvIGluaXQudCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwllY2hvIGRpcnR5ID5hZGRlZCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBIRUFEXiAmJgorCWdyZXAgLXEgZGlydHkgYWRkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIGFkZHMgdG8gd29ya3RyZWUsIGFic2VudCBjYXNlJyAnCisJZWNobyBpbml0LnQgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgcmVtb3ZlZCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtdSAtbSBIRUFEXiAmJgorCXRlc3QgISAtZiBzdWIvYWRkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIGFkZHMgdG8gd29ya3RyZWUsIGRpcnR5IGNhc2UnICcKKwllY2hvIGluaXQudCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiByZW1vdmVkICYmCisJbWtkaXIgc3ViICYmCisJZWNobyBkaXJ0eSA+c3ViL2FkZGVkICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC11IC1tIEhFQUReICYmCisJZ3JlcCAtcSBkaXJ0eSBzdWIvYWRkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggcmVtb3ZhbCBhbmQgd29ya3RyZWUgbmFycm93aW5nIGF0IHRoZSBzYW1lIHRpbWUnICcKKwllY2hvIGluaXQudCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWVjaG8gc3ViL2FkZGVkID4+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwllY2hvIGluaXQudCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCByZW1vdmVkICYmCisJZ2l0IGxzLWZpbGVzIHN1Yi9hZGRlZCA+cmVzdWx0ICYmCisJdGVzdCAhIC1mIHN1Yi9hZGRlZCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIC0tcmVzZXQgcmVtb3ZlcyBvdXRzaWRlIHdvcmt0cmVlJyAnCisJZWNobyBpbml0LnQgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgdG9wICYmCisJZ2l0IHJlc2V0IC0taGFyZCByZW1vdmVkICYmCisJZ2l0IGxzLWZpbGVzIHN1Yi9hZGRlZCA+cmVzdWx0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmludCB3YXJuaW5ncyB3aGVuIHNvbWUgd29ya3RyZWUgdXBkYXRlcyBkaXNhYmxlZCcgJworCWVjaG8gc3ViID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIGluaXQgJiYKKwlta2RpciBzdWIgJiYKKwl0b3VjaCBzdWIvYWRkZWQgc3ViL2FkZGVkdG9vICYmCisJIyBVc2UgLXEgdG8gc3VwcHJlc3MgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24iIGFuZCAiSGVhZCBpcyBub3cgYXQiIG1zZ3MKKwlnaXQgY2hlY2tvdXQgLXEgdG9wIDI+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK3dhcm5pbmc6IFRoZSBmb2xsb3dpbmcgcGF0aHMgd2VyZSBhbHJlYWR5IHByZXNlbnQgYW5kIHRodXMgbm90IHVwZGF0ZWQgZGVzcGl0ZSBzcGFyc2UgcGF0dGVybnM6CisJc3ViL2FkZGVkCisJc3ViL2FkZGVkdG9vCisKK0FmdGVyIGZpeGluZyB0aGUgYWJvdmUgcGF0aHMsIHlvdSBtYXkgd2FudCB0byBydW4gYGdpdCBzcGFyc2UtY2hlY2tvdXQgcmVhcHBseWAuCitFT0YKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGhvdXQgLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1iaXRzJyAnCisJZWNobyAiKiIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgdG9wICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgaW5pdC50ICYmCisJZWNobyBzdWIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgJiYKKwllY2hvIG1vZGlmaWVkID4+IHN1Yi9hZGRlZCAmJgorCWdpdCBjaGVja291dCAuICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgaW5pdC50ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIC0taWdub3JlLXNraXAtd29ya3RyZWUtYml0cycgJworCWVjaG8gIioiID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGluaXQudCAmJgorCWVjaG8gc3ViID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0ICYmCisJZWNobyBtb2RpZmllZCA+PiBzdWIvYWRkZWQgJiYKKwlnaXQgY2hlY2tvdXQgLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1iaXRzIC4gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBpbml0LnQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAxMi1yZWFkLXRyZWUtZGYuc2ggYi90L3QxMDEyLXJlYWQtdHJlZS1kZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41N2YwNzcwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAxMi1yZWFkLXRyZWUtZGYuc2gKQEAgLTAsMCArMSwxMDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWFkLXRyZWUgRC9GIGNvbmZsaWN0IGNvcm5lciBjYXNlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUuc2gKKworbWFrZXRyZWUgKCkgeworCSgKKwkJcm0gLWYgLmdpdC9pbmRleCAuZ2l0L2luZGV4LmxvY2sgJiYKKwkJZ2l0IGNsZWFuIC1kIC1mIC1mIC1xIC14ICYmCisJCW5hbWU9IiQxIiAmJgorCQlzaGlmdCAmJgorCQlmb3IgaXQKKwkJZG8KKwkJCXBhdGg9JChleHByICIkaXQiIDogJ1woW146XSpcKScpICYmCisJCQlta2RpciAtcCAkKGRpcm5hbWUgIiRwYXRoIikgJiYKKwkJCWVjaG8gIiRpdCIgPiIkcGF0aCIgJiYKKwkJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgIiRwYXRoIiB8fCBleGl0CisJCWRvbmUgJiYKKwkJZ2l0IHRhZyAiJG5hbWUiICQoZ2l0IHdyaXRlLXRyZWUpCisJKQorfQorCitzZXR0cmVlICgpIHsKKwlybSAtZiAuZ2l0L2luZGV4IC5naXQvaW5kZXgubG9jayAmJgorCWdpdCBjbGVhbiAtZCAtZiAtZiAtcSAteCAmJgorCWdpdCByZWFkLXRyZWUgIiQxIiAmJgorCWdpdCBjaGVja291dC1pbmRleCAtZiAtcSAtdSAtYSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCit9CisKK2NoZWNraW5kZXggKCkgeworCWdpdCBscy1maWxlcyAtcyB8CisJc2VkICJzfF5bMC03XVswLTddKiAkT0lEX1JFR0VYIFwoWzAtM11cKQl8XDEgfCIgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1ha2V0cmVlIE8tMDAwIGEvYi0yL2MvZCBhL2IvYy9kIGEveCAmJgorCW1ha2V0cmVlIEEtMDAwIGEvYi0yL2MvZCBhL2IvYy9kIGEveCAmJgorCW1ha2V0cmVlIEEtMDAxIGEvYi0yL2MvZCBhL2IvYy9kIGEvYi9jL2UgYS94ICYmCisJbWFrZXRyZWUgQi0wMDAgYS9iLTIvYy9kIGEvYiAgICAgYS94ICYmCisKKwltYWtldHJlZSBPLTAxMCB0LTAgICAgIHQvMSAgdC8yIHQ9MyAmJgorCW1ha2V0cmVlIEEtMDEwIHQtMCB0ICAgICAgICAgICAgdD0zICYmCisJbWFrZXRyZWUgQi0wMTAgICAgICAgICB0LzE6ICAgICB0PTM6ICYmCisKKwltYWtldHJlZSBPLTAyMCBkcy9kbWEvaW9hdC5jIGRzL2RtYS9pb2F0X2RjYS5jICYmCisJbWFrZXRyZWUgQS0wMjAgZHMvZG1hL2lvYXQvTWFrZWZpbGUgZHMvZG1hL2lvYXQvcmVnaXN0ZXJzLmggJiYKKwk6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzMtd2F5ICgxKScgJworCXNldHRyZWUgQS0wMDAgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgTy0wMDAgQS0wMDAgQi0wMDAgJiYKKwljaGVja2luZGV4IDw8LUVPRgorCTMgYS9iCisJMCBhL2ItMi9jL2QKKwkxIGEvYi9jL2QKKwkyIGEvYi9jL2QKKwkwIGEveAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczLXdheSAoMiknICcKKwlzZXR0cmVlIEEtMDAxICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IE8tMDAwIEEtMDAxIEItMDAwICYmCisJY2hlY2tpbmRleCA8PC1FT0YKKwkzIGEvYgorCTAgYS9iLTIvYy9kCisJMSBhL2IvYy9kCisJMiBhL2IvYy9kCisJMiBhL2IvYy9lCisJMCBhL3gKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMy13YXkgKDMpJyAnCisJc2V0dHJlZSBBLTAxMCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBPLTAxMCBBLTAxMCBCLTAxMCAmJgorCWNoZWNraW5kZXggPDwtRU9GCisJMiB0CisJMSB0LTAKKwkyIHQtMAorCTEgdC8xCisJMyB0LzEKKwkxIHQvMgorCTAgdD0zCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzItd2F5ICgxKScgJworCXNldHRyZWUgTy0wMjAgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgTy0wMjAgQS0wMjAgJiYKKwljaGVja2luZGV4IDw8LUVPRgorCTAgZHMvZG1hL2lvYXQvTWFrZWZpbGUKKwkwIGRzL2RtYS9pb2F0L3JlZ2lzdGVycy5oCisJRU9GCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAxMy1yZWFkLXRyZWUtc3VibW9kdWxlLnNoIGIvdC90MTAxMy1yZWFkLXRyZWUtc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxYTZmYWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEzLXJlYWQtdHJlZS1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSwxOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYWQtdHJlZSBjYW4gaGFuZGxlIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItc3VibW9kdWxlLXVwZGF0ZS5zaAorCitLTk9XTl9GQUlMVVJFX0RJUkVDVE9SWV9TVUJNT0RVTEVfQ09ORkxJQ1RTPTEKK0tOT1dOX0ZBSUxVUkVfU1VCTU9EVUxFX09WRVJXUklURV9JR05PUkVEX1VOVFJBQ0tFRD0xCisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaF9yZWN1cnNpbmdfd2l0aF9hcmdzICJyZWFkLXRyZWUgLXUgLW0iCisKK3Rlc3Rfc3VibW9kdWxlX2ZvcmNlZF9zd2l0Y2hfcmVjdXJzaW5nX3dpdGhfYXJncyAicmVhZC10cmVlIC11IC0tcmVzZXQiCisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0IHJlYWQtdHJlZSAtdSAtbSIKKwordGVzdF9zdWJtb2R1bGVfZm9yY2VkX3N3aXRjaCAiZ2l0IHJlYWQtdHJlZSAtdSAtLXJlc2V0IgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMTQtcmVhZC10cmVlLWNvbmZ1c2luZy5zaCBiL3QvdDEwMTQtcmVhZC10cmVlLWNvbmZ1c2luZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYTMzNzZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAxNC1yZWFkLXRyZWUtY29uZnVzaW5nLnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayB0aGF0IHJlYWQtdHJlZSByZWplY3RzIGNvbmZ1c2luZyBwYXRocycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYmFzZSB0cmVlJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJYmxvYj0kKGdpdCByZXYtcGFyc2UgSEVBRDpmaWxlKSAmJgorCXRyZWU9JChnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbmFibGUgY29yZS5wcm90ZWN0SEZTIGZvciByZWplY3Rpb24gdGVzdHMnICcKKwlnaXQgY29uZmlnIGNvcmUucHJvdGVjdEhGUyB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VuYWJsZSBjb3JlLnByb3RlY3ROVEZTIGZvciByZWplY3Rpb24gdGVzdHMnICcKKwlnaXQgY29uZmlnIGNvcmUucHJvdGVjdE5URlMgdHJ1ZQorJworCit3aGlsZSByZWFkIHBhdGggcHJldHR5OyBkbworCTogJHtwcmV0dHk6PSRwYXRofQorCWNhc2UgIiRwYXRoIiBpbgorCSpTUEFDRSkKKwkJcGF0aD0iJHtwYXRoJVNQQUNFfSAiCisJCTs7CisJZXNhYworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlamVjdCAkcHJldHR5IGF0IGVuZCBvZiBwYXRoIiAnCisJCXByaW50ZiAiMTAwNjQ0IGJsb2IgJXNcdCVzIiAiJGJsb2IiICIkcGF0aCIgPnRyZWUgJiYKKwkJYm9ndXM9JChnaXQgbWt0cmVlIDx0cmVlKSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmVhZC10cmVlICRib2d1cworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlamVjdCAkcHJldHR5IGFzIHN1YnRyZWUiICcKKwkJcHJpbnRmICIwNDAwMDAgdHJlZSAlc1x0JXMiICIkdHJlZSIgIiRwYXRoIiA+dHJlZSAmJgorCQlib2d1cz0kKGdpdCBta3RyZWUgPHRyZWUpICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgJGJvZ3VzCisJJworZG9uZSA8PC1FT0YKKy4KKy4uCisuZ2l0CisuR0lUCiske3UyMDBjfS5HaXQge3UyMDBjfS5HaXQKKy5nSSR7dTIwMGN9VCAuZ0l7dTIwMGN9VAorLkdpVCR7dTIwMGN9IC5HaVR7dTIwMGN9CitnaXR+MQorLmdpdC5TUEFDRSAuZ2l0LntzcGFjZX0KKy5cXFxcLkdJVFxcXFxmb29iYXIgYmFja3NsYXNoZXMKKy5naXRcXFxcZm9vYmFyIGJhY2tzbGFzaGVzMgorLmdpdC4uLjphbHRlcm5hdGUtc3RyZWFtCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXRmLTggcGF0aHMgYWxsb3dlZCB3aXRoIGNvcmUucHJvdGVjdEhGUyBvZmYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWFkLXRyZWUgSEVBRCIgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLnByb3RlY3RIRlMgZmFsc2UgJiYKKwlwcmludGYgIjEwMDY0NCBibG9iICVzXHQlcyIgIiRibG9iIiAiLmdpJHt1MjAwY310IiA+dHJlZSAmJgorCW9rPSQoZ2l0IG1rdHJlZSA8dHJlZSkgJiYKKwlnaXQgcmVhZC10cmVlICRvaworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMTUtcmVhZC1pbmRleC11bm1lcmdlZC5zaCBiL3QvdDEwMTUtcmVhZC1pbmRleC11bm1lcmdlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NWQyMmRhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAxNS1yZWFkLWluZGV4LXVubWVyZ2VkLnNoCkBAIC0wLDAgKzEsMTIzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB2YXJpb3VzIGNhbGxlcnMgb2YgcmVhZF9pbmRleF91bm1lcmdlZCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtb2RpZnkvZGVsZXRlICsgZGlyZWN0b3J5L2ZpbGUgY29uZmxpY3QnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGRmX3BsdXNfbW9kaWZ5X2RlbGV0ZSAmJgorCSgKKwkJY2QgZGZfcGx1c19tb2RpZnlfZGVsZXRlICYmCisKKwkJdGVzdF93cml0ZV9saW5lcyBhIGIgYyBkIGUgZiBnIGggPmxldHRlcnMgJiYKKwkJZ2l0IGFkZCBsZXR0ZXJzICYmCisJCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJCWdpdCBjaGVja291dCAtYiBtb2RpZnkgJiYKKwkJIyBUaHJvdyBpbiBsZXR0ZXJzLnR4dCBmb3Igc29ydGluZyBvcmRlciBmdW4KKwkJIyAoImxldHRlcnMudHh0IiBzb3J0cyBiZXR3ZWVuICJsZXR0ZXJzIiBhbmQgImxldHRlcnMvZmlsZSIpCisJCWVjaG8gaSA+PmxldHRlcnMgJiYKKwkJZWNobyAidmVyc2lvbiAyIiA+bGV0dGVycy50eHQgJiYKKwkJZ2l0IGFkZCBsZXR0ZXJzIGxldHRlcnMudHh0ICYmCisJCWdpdCBjb21taXQgLW0gbW9kaWZpZWQgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgZGVsZXRlIEhFQUReICYmCisJCWdpdCBybSBsZXR0ZXJzICYmCisJCW1rZGlyIGxldHRlcnMgJiYKKwkJPmxldHRlcnMvZmlsZSAmJgorCQllY2hvICJ2ZXJzaW9uIDEiID5sZXR0ZXJzLnR4dCAmJgorCQlnaXQgYWRkIGxldHRlcnMgbGV0dGVycy50eHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSBkZWxldGVkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgLS1yZXNldCBjbGVhbnMgdW5tZXJnZWQgZW50cmllcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGRmX3BsdXNfbW9kaWZ5X2RlbGV0ZSBjbGVhbiAtZiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBkZl9wbHVzX21vZGlmeV9kZWxldGUgcmVzZXQgLS1oYXJkIiAmJgorCSgKKwkJY2QgZGZfcGx1c19tb2RpZnlfZGVsZXRlICYmCisKKwkJZ2l0IGNoZWNrb3V0IGRlbGV0ZV4wICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtb2RpZnkgJiYKKworCQlnaXQgcmVhZC10cmVlIC0tcmVzZXQgSEVBRCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPmNvbmZsaWN0cyAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgY29uZmxpY3RzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPbmUgcmVzZXQgLS1oYXJkIGNsZWFucyB1bm1lcmdlZCBlbnRyaWVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGZfcGx1c19tb2RpZnlfZGVsZXRlIGNsZWFuIC1mIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGRmX3BsdXNfbW9kaWZ5X2RlbGV0ZSByZXNldCAtLWhhcmQiICYmCisJKAorCQljZCBkZl9wbHVzX21vZGlmeV9kZWxldGUgJiYKKworCQlnaXQgY2hlY2tvdXQgZGVsZXRlXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1vZGlmeSAmJgorCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFEICYmCisJCWdpdCBscy1maWxlcyAtdSA+Y29uZmxpY3RzICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBjb25mbGljdHMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpcmVjdG9yeS9maWxlIGNvbmZsaWN0ICsgc2ltcGxlIGVkaXQvZWRpdCcgJworCXRlc3RfY3JlYXRlX3JlcG8gZGZfcGx1c19lZGl0X2VkaXQgJiYKKwkoCisJCWNkIGRmX3BsdXNfZWRpdF9lZGl0ICYmCisKKwkJdGVzdF9zZXEgMSAxMCA+bnVtYmVycyAmJgorCQlnaXQgYWRkIG51bWJlcnMgJiYKKwkJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIGQtZWRpdCAmJgorCQlta2RpciBmb28gJiYKKwkJZWNobyBjb250ZW50ID5mb28vYmFyICYmCisJCWdpdCBhZGQgZm9vICYmCisJCWVjaG8gMTEgPj5udW1iZXJzICYmCisJCWdpdCBhZGQgbnVtYmVycyAmJgorCQlnaXQgY29tbWl0IC1tICJkaXJlY3RvcnkgYW5kIGVkaXQiICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIGYtZWRpdCBkLWVkaXReMSAmJgorCQllY2hvIGNvbnRlbnQgPmZvbyAmJgorCQlnaXQgYWRkIGZvbyAmJgorCQllY2hvIGVsZXZlbiA+Pm51bWJlcnMgJiYKKwkJZ2l0IGFkZCBudW1iZXJzICYmCisJCWdpdCBjb21taXQgLW0gImZpbGUgYW5kIGVkaXQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbWVyZ2UgLS1hYm9ydCBzdWNjZWVkcyBkZXNwaXRlIEQvRiBjb25mbGljdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGRmX3BsdXNfZWRpdF9lZGl0IGNsZWFuIC1mIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGRmX3BsdXNfZWRpdF9lZGl0IHJlc2V0IC0taGFyZCIgJiYKKwkoCisJCWNkIGRmX3BsdXNfZWRpdF9lZGl0ICYmCisKKwkJZ2l0IGNoZWNrb3V0IGYtZWRpdF4wICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBkLWVkaXReMCAmJgorCisJCWdpdCBtZXJnZSAtLWFib3J0ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPmNvbmZsaWN0cyAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgY29uZmxpY3RzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYW0gLS1za2lwIHN1Y2NlZWRzIGRlc3BpdGUgRC9GIGNvbmZsaWN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGZfcGx1c19lZGl0X2VkaXQgY2xlYW4gLWYiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGZfcGx1c19lZGl0X2VkaXQgcmVzZXQgLS1oYXJkIiAmJgorCSgKKwkJY2QgZGZfcGx1c19lZGl0X2VkaXQgJiYKKworCQlnaXQgY2hlY2tvdXQgZi1lZGl0XjAgJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtMSBkLWVkaXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0zIDAwMDEqLnBhdGNoICYmCisKKwkJZ2l0IGFtIC0tc2tpcCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPmNvbmZsaWN0cyAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgY29uZmxpY3RzCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMjAtc3ViZGlyZWN0b3J5LnNoIGIvdC90MTAyMC1zdWJkaXJlY3Rvcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzJkZjc1ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMjAtc3ViZGlyZWN0b3J5LnNoCkBAIC0wLDAgKzEsMTk1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1RyeSB2YXJpb3VzIGNvcmUtbGV2ZWwgY29tbWFuZHMgaW4gc3ViZGlyZWN0b3J5LgorJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYWQtdHJlZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlsb25nPSJhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHoiICYmCisJZm9yIGMgaW4gJGxvbmc7IGRvIGVjaG8gJGM7IGRvbmUgPm9uZSAmJgorCW1rZGlyIGRpciAmJgorCWZvciBjIGluIHggeSB6ICRsb25nIGEgYiBjOyBkbyBlY2hvICRjOyBkb25lID5kaXIvdHdvICYmCisJY3Agb25lIG9yaWdpbmFsLm9uZSAmJgorCWNwIGRpci90d28gb3JpZ2luYWwudHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCBhbmQgbHMtZmlsZXMnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG9uZSAmJgorCWNhc2UgIiQoZ2l0IGxzLWZpbGVzKSIgaW4KKwlvbmUpIGVjaG8gcGFzcyBvbmUgOzsKKwkqKSBlY2hvIGJhZCBvbmU7IGV4aXQgMSA7OworCWVzYWMgJiYKKwkoCisJCWNkIGRpciAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHR3byAmJgorCQljYXNlICIkKGdpdCBscy1maWxlcykiIGluCisJCXR3bykgZWNobyBwYXNzIHR3byA7OworCQkqKSBlY2hvIGJhZCB0d287IGV4aXQgMSA7OworCQllc2FjCisJKSAmJgorCWNhc2UgIiQoZ2l0IGxzLWZpbGVzKSIgaW4KKwlkaXIvdHdvIiRMRiJvbmUpIGVjaG8gcGFzcyBib3RoIDs7CisJKikgZWNobyBiYWQ7IGV4aXQgMSA7OworCWVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUnICcKKwl0d289JChnaXQgbHMtZmlsZXMgLXMgZGlyL3R3bykgJiYKKwl0d289JChleHByICIkdHdvIiA6ICJbMC03XSogXFwoWzAtOWEtZl0qXFwpIikgJiYKKwllY2hvICIkdHdvIiAmJgorCWdpdCBjYXQtZmlsZSAtcCAiJHR3byIgPmFjdHVhbCAmJgorCWNtcCBkaXIvdHdvIGFjdHVhbCAmJgorCSgKKwkJY2QgZGlyICYmCisJCWdpdCBjYXQtZmlsZSAtcCAiJHR3byIgPmFjdHVhbCAmJgorCQljbXAgdHdvIGFjdHVhbAorCSkKKycKK3JtIC1mIGFjdHVhbCBkaXIvYWN0dWFsCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMnICcKKwllY2hvIGEgPj5vbmUgJiYKKwllY2hvIGQgPj5kaXIvdHdvICYmCisJY2FzZSAiJChnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSkiIGluCisJZGlyL3R3byIkTEYib25lKSBlY2hvIHBhc3MgdG9wIDs7CisJKikgZWNobyBiYWQgdG9wOyBleGl0IDEgOzsKKwllc2FjICYmCisJIyBkaWZmIHNob3VsZCBub3Qgb21pdCBsZWFkaW5nIHBhdGhzCisJKAorCQljZCBkaXIgJiYKKwkJY2FzZSAiJChnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSkiIGluCisJCWRpci90d28iJExGIm9uZSkgZWNobyBwYXNzIHN1YmRpciA7OworCQkqKSBlY2hvIGJhZCBzdWJkaXI7IGV4aXQgMSA7OworCQllc2FjICYmCisJCWNhc2UgIiQoZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLikiIGluCisJCWRpci90d28pIGVjaG8gcGFzcyBzdWJkaXIgbGltaXRlZCA7OworCQkqKSBlY2hvIGJhZCBzdWJkaXIgbGltaXRlZDsgZXhpdCAxIDs7CisJCWVzYWMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlLXRyZWUnICcKKwl0b3A9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwllY2hvICR0b3AgJiYKKwkoCisJCWNkIGRpciAmJgorCQlzdWI9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJZWNobyAkc3ViICYmCisJCXRlc3QgInokdG9wIiA9ICJ6JHN1YiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0LWluZGV4JyAnCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC11IG9uZSAmJgorCWNtcCBvbmUgb3JpZ2luYWwub25lICYmCisJKAorCQljZCBkaXIgJiYKKwkJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC11IHR3byAmJgorCQljbXAgdHdvIC4uL29yaWdpbmFsLnR3bworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlJyAnCisJcm0gLWYgb25lIGRpci90d28gJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgIiR0cmVlIiAmJgorCWNtcCBvbmUgb3JpZ2luYWwub25lICYmCisJY21wIGRpci90d28gb3JpZ2luYWwudHdvICYmCisJKAorCQljZCBkaXIgJiYKKwkJcm0gLWYgdHdvICYmCisJCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICIkdHJlZSIgJiYKKwkJY21wIHR3byAuLi9vcmlnaW5hbC50d28gJiYKKwkJY21wIC4uL29uZSAuLi9vcmlnaW5hbC5vbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIGV4cGFuc2lvbicgJworCSgKKwkJZ2l0IGNvbmZpZyBhbGlhcy50ZXN0LXN0YXR1cy1hbGlhcyBzdGF0dXMgJiYKKwkJY2QgZGlyICYmCisJCWdpdCBzdGF0dXMgJiYKKwkJZ2l0IHRlc3Qtc3RhdHVzLWFsaWFzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnIWFsaWFzIGV4cGFuc2lvbicgJworCXB3ZCA+ZXhwZWN0ICYmCisJKAorCQlnaXQgY29uZmlnIGFsaWFzLnRlc3QtYWxpYXMtZGlyZWN0b3J5ICFwd2QgJiYKKwkJY2QgZGlyICYmCisJCWdpdCB0ZXN0LWFsaWFzLWRpcmVjdG9yeSA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX1BSRUZJWCBmb3IgIWFsaWFzJyAnCisJcHJpbnRmICJkaXIvIiA+ZXhwZWN0ICYmCisJKAorCQlnaXQgY29uZmlnIGFsaWFzLnRlc3QtYWxpYXMtZGlyZWN0b3J5ICIhc2ggLWMgXCJwcmludGYgXCRHSVRfUFJFRklYXCIiICYmCisJCWNkIGRpciAmJgorCQlnaXQgdGVzdC1hbGlhcy1kaXJlY3RvcnkgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9QUkVGSVggZm9yIGJ1aWx0LWlucycgJworCSMgVXNlIEdJVF9FWFRFUk5BTF9ESUZGIHRvIHRlc3QgdGhhdCB0aGUgImRpZmYiIGJ1aWx0LWluCisJIyByZWNlaXZlcyB0aGUgR0lUX1BSRUZJWCB2YXJpYWJsZS4KKwllY2hvICJkaXIvIiA+ZXhwZWN0ICYmCisJd3JpdGVfc2NyaXB0IGRpZmYgPDwtXEVPRiAmJgorCXByaW50ZiAiJXNcbiIgIiRHSVRfUFJFRklYIgorCUVPRgorCSgKKwkJY2QgZGlyICYmCisJCWVjaG8gImNoYW5nZSIgPnR3byAmJgorCQlHSVRfRVhURVJOQUxfRElGRj0uL2RpZmYgZ2l0IGRpZmYgPi4uL2FjdHVhbCAmJgorCQlnaXQgY2hlY2tvdXQgLS0gdHdvCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZmlsZS9yZXYgYW1iaWd1aXR5IGNoZWNrIGluc2lkZSAuZ2l0JyAnCisJZ2l0IGNvbW1pdCAtYSAtbSAxICYmCisJKAorCQljZCAuZ2l0ICYmCisJCWdpdCBzaG93IC1zIEhFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbGUvcmV2IGFtYmlndWl0eSBjaGVjayBpbnNpZGUgYSBiYXJlIHJlcG8gKGV4cGxpY2l0IEdJVF9ESVIpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgZm9vLmdpdCIgJiYKKwlnaXQgY2xvbmUgLXMgLS1iYXJlIC5naXQgZm9vLmdpdCAmJgorCSgKKwkJY2QgZm9vLmdpdCAmJgorCQkjIG9sZGVyIEdpdCBuZWVkZWQgaGVscCBieSBleHBvcnRpbmcgR0lUX0RJUj0uCisJCSMgdG8gcmVhbGl6ZSB0aGF0IGl0IGlzIGluc2lkZSBhIGJhcmUgcmVwb3NpdG9yeS4KKwkJIyBXZSBrZWVwIHRoaXMgdGVzdCBhcm91bmQgZm9yIHJlZ3Jlc3Npb24gdGVzdGluZy4KKwkJR0lUX0RJUj0uIGdpdCBzaG93IC1zIEhFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbGUvcmV2IGFtYmlndWl0eSBjaGVjayBpbnNpZGUgYSBiYXJlIHJlcG8nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBmb28uZ2l0IiAmJgorCWdpdCBjbG9uZSAtcyAtLWJhcmUgLmdpdCBmb28uZ2l0ICYmCisJKAorCQljZCBmb28uZ2l0ICYmCisJCWdpdCBzaG93IC1zIEhFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RldGVjdGlvbiBzaG91bGQgbm90IGJlIGZvb2xlZCBieSBhIHN5bWxpbmsnICcKKwlnaXQgY2xvbmUgLXMgLmdpdCBhbm90aGVyICYmCisJbG4gLXMgYW5vdGhlciB5ZXRhbm90aGVyICYmCisJKAorCQljZCB5ZXRhbm90aGVyLy5naXQgJiYKKwkJZ2l0IHNob3cgLXMgSEVBRAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDIxLXJlcmVyZS1pbi13b3JrZGlyLnNoIGIvdC90MTAyMS1yZXJlcmUtaW4td29ya2Rpci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMDFlMDcxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAyMS1yZXJlcmUtaW4td29ya2Rpci5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVyZXJlIHJ1biBpbiBhIHdvcmtkaXInCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBzZXR1cCAnCisJZ2l0IGNvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisJPndvcmxkICYmCisJZ2l0IGFkZCB3b3JsZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZWNobyBoZWxsbyA+d29ybGQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGhlbGxvICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBIRUFEXiAmJgorCWVjaG8gZ29vZGJ5ZSA+d29ybGQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGdvb2RieWUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAncmVyZXJlIGluIHdvcmtkaXInICcKKwlybSAtcmYgLmdpdC9yci1jYWNoZSAmJgorCSIkU0hFTExfUEFUSCIgIiRURVNUX0RJUkVDVE9SWS8uLi9jb250cmliL3dvcmtkaXIvZ2l0LW5ldy13b3JrZGlyIiAuIHdvcmsgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHNpZGUgJiYKKwkJZ2l0IHJlcmVyZSBzdGF0dXMgPmFjdHVhbCAmJgorCQllY2hvIHdvcmxkID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUaGlzIGZhaWxzIGJlY2F1c2Ugd2UgZG9uJ3QgcmVzb2x2ZSByZWxhdGl2ZSBzeW1saW5rIGluIG1rZGlyX2luX2dpdGRpcigpCisjIEZvciB0aGUgcHVycG9zZSBvZiBoZWxwaW5nIGNvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIgdXNlcnMsIHdlIGRvIG5vdAorIyBoYXZlIHRvIHN1cHBvcnQgcmVsYXRpdmUgc3ltbGlua3MsIGJ1dCBpdCBtaWdodCBiZSBuaWNlciB0byBtYWtlIHRoaXMgd29yaworIyB3aXRoIGEgcmVsYXRpdmUgc3ltYm9saWMgbGluayBzb21lZGF5LgordGVzdF9leHBlY3RfZmFpbHVyZSBTWU1MSU5LUyAncmVyZXJlIGluIHdvcmtkaXIgKHJlbGF0aXZlKScgJworCXJtIC1yZiAuZ2l0L3JyLWNhY2hlICYmCisJIiRTSEVMTF9QQVRIIiAiJFRFU1RfRElSRUNUT1JZLy4uL2NvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIiIC4ga3JvdyAmJgorCSgKKwkJY2Qga3JvdyAmJgorCQlybSAtZiAuZ2l0L3JyLWNhY2hlICYmCisJCWxuIC1zIC4uLy5naXQvcnItY2FjaGUgLmdpdC9yci1jYWNoZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2lkZSAmJgorCQlnaXQgcmVyZXJlIHN0YXR1cyA+YWN0dWFsICYmCisJCWVjaG8gd29ybGQgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwNTAtbGFyZ2Uuc2ggYi90L3QxMDUwLWxhcmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE4NGI0NzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDUwLWxhcmdlLnNoCkBAIC0wLDAgKzEsMjE2IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhZGRpbmcgYW5kIGNoZWNraW5nIG91dCBsYXJnZSBibG9icycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gdGVzdC1saWIuc2ggdG9nZXRoZXIgd2l0aCB0aGUKKyMgY29weSBpbiB0MDAyMSBhZnRlciBib3RoIHRvcGljcyBoYXZlIGdyYWR1YXRlZCB0byAnbWFzdGVyJy4KK2ZpbGVfc2l6ZSAoKSB7CisJdGVzdC10b29sIHBhdGgtdXRpbHMgZmlsZS1zaXplICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJIyBjbG9uZSBkb2VzIG5vdCBhbGxvdyB1cyB0byBwYXNzIGNvcmUuYmlnZmlsZXRocmVzaG9sZCB0bworCSMgbmV3IHJlcG9zLCBzbyBzZXQgY29yZS5iaWdmaWxldGhyZXNob2xkIGdsb2JhbGx5CisJZ2l0IGNvbmZpZyAtLWdsb2JhbCBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQgMjAwayAmJgorCXByaW50ZiAiJTIwMDAwMDBzIiBYID5sYXJnZTEgJiYKKwljcCBsYXJnZTEgbGFyZ2UyICYmCisJY3AgbGFyZ2UxIGxhcmdlMyAmJgorCXByaW50ZiAiJTI1MDAwMDBzIiBZID5odWdlICYmCisJR0lUX0FMTE9DX0xJTUlUPTE1MDBrICYmCisJZXhwb3J0IEdJVF9BTExPQ19MSU1JVAorJworCisjIGFkZCBhIGxhcmdlIGZpbGUgd2l0aCBkaWZmZXJlbnQgc2V0dGluZ3MKK3doaWxlIHJlYWQgZXhwZWN0IGNvbmZpZworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJhZGQgd2l0aCAkY29uZmlnIiAnCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLiogLmdpdC9pbmRleCIgJiYKKwkJZ2l0ICRjb25maWcgYWRkIGxhcmdlMSAmJgorCQlzej0kKGZpbGVfc2l6ZSAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucGFjaykgJiYKKwkJY2FzZSAiJGV4cGVjdCIgaW4KKwkJc21hbGwpIHRlc3QgIiRzeiIgLWxlIDEwMDAwMCA7OworCQlsYXJnZSkgdGVzdCAiJHN6IiAtZ2UgMTAwMDAwIDs7CisJCWVzYWMKKwknCitkb25lIDw8XEVPRgorbGFyZ2UgLWMgY29yZS5jb21wcmVzc2lvbj0wCitzbWFsbCAtYyBjb3JlLmNvbXByZXNzaW9uPTkKK2xhcmdlIC1jIGNvcmUuY29tcHJlc3Npb249MCAtYyBwYWNrLmNvbXByZXNzaW9uPTAKK2xhcmdlIC1jIGNvcmUuY29tcHJlc3Npb249OSAtYyBwYWNrLmNvbXByZXNzaW9uPTAKK3NtYWxsIC1jIGNvcmUuY29tcHJlc3Npb249MCAtYyBwYWNrLmNvbXByZXNzaW9uPTkKK3NtYWxsIC1jIGNvcmUuY29tcHJlc3Npb249OSAtYyBwYWNrLmNvbXByZXNzaW9uPTkKK2xhcmdlIC1jIHBhY2suY29tcHJlc3Npb249MAorc21hbGwgLWMgcGFjay5jb21wcmVzc2lvbj05CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGEgbGFyZ2UgZmlsZSBvciB0d28nICcKKwlnaXQgYWRkIGxhcmdlMSBodWdlIGxhcmdlMiAmJgorCSMgbWFrZSBzdXJlIHdlIGdvdCBhIHNpbmdsZSBwYWNrZmlsZSBhbmQgbm8gbG9vc2Ugb2JqZWN0cworCWJhZD0gY291bnQ9MCBpZHg9ICYmCisJZm9yIHAgaW4gLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLnBhY2sKKwlkbworCQljb3VudD0kKCggJGNvdW50ICsgMSApKQorCQlpZiB0ZXN0X3BhdGhfaXNfZmlsZSAiJHAiICYmCisJCSAgIGlkeD0ke3AlLnBhY2t9LmlkeCAmJiB0ZXN0X3BhdGhfaXNfZmlsZSAiJGlkeCIKKwkJdGhlbgorCQkJY29udGludWUKKwkJZmkKKwkJYmFkPXQKKwlkb25lICYmCisJdGVzdCAteiAiJGJhZCIgJiYKKwl0ZXN0ICRjb3VudCA9IDEgJiYKKwljbnQ9JChnaXQgc2hvdy1pbmRleCA8IiRpZHgiIHwgd2MgLWwpICYmCisJdGVzdCAkY250ID0gMiAmJgorCWZvciBsIGluIC5naXQvb2JqZWN0cy8/Py8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PworCWRvCisJCXRlc3RfcGF0aF9pc19maWxlICIkbCIgfHwgY29udGludWUKKwkJYmFkPXQKKwlkb25lICYmCisJdGVzdCAteiAiJGJhZCIgJiYKKworCSMgYXR0ZW1wdCB0byBhZGQgYW5vdGhlciBjb3B5IG9mIHRoZSBzYW1lCisJZ2l0IGFkZCBsYXJnZTMgJiYKKwliYWQ9IGNvdW50PTAgJiYKKwlmb3IgcCBpbiAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucGFjaworCWRvCisJCWNvdW50PSQoKCAkY291bnQgKyAxICkpCisJCWlmIHRlc3RfcGF0aF9pc19maWxlICIkcCIgJiYKKwkJICAgaWR4PSR7cCUucGFja30uaWR4ICYmIHRlc3RfcGF0aF9pc19maWxlICIkaWR4IgorCQl0aGVuCisJCQljb250aW51ZQorCQlmaQorCQliYWQ9dAorCWRvbmUgJiYKKwl0ZXN0IC16ICIkYmFkIiAmJgorCXRlc3QgJGNvdW50ID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBhIGxhcmdlIGZpbGUnICcKKwlsYXJnZTE9JChnaXQgcmV2LXBhcnNlIDpsYXJnZTEpICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJGxhcmdlMSBhbm90aGVyICYmCisJZ2l0IGNoZWNrb3V0IGFub3RoZXIgJiYKKwl0ZXN0X2NtcCBsYXJnZTEgYW5vdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrc2l6ZSBsaW1pdCcgJworCXRlc3RfY3JlYXRlX3JlcG8gbWlkICYmCisJKAorCQljZCBtaWQgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQgNjRrICYmCisJCWdpdCBjb25maWcgcGFjay5wYWNrc2l6ZWxpbWl0IDI1NmsgJiYKKworCQkjIG1pZDEgYW5kIG1pZDIgd2lsbCBmaXQgd2l0aGluIDI1NmsgbGltaXQgYnV0CisJCSMgYXBwZW5kaW5nIG1pZDMgd2lsbCBidXN0IHRoZSBsaW1pdCBhbmQgd2lsbAorCQkjIHJlc3VsdCBpbiBhIHNlcGFyYXRlIHBhY2tmaWxlLgorCQl0ZXN0LXRvb2wgZ2VucmFuZG9tICJhIiAkKCggNjYgKiAxMDI0ICkpID5taWQxICYmCisJCXRlc3QtdG9vbCBnZW5yYW5kb20gImIiICQoKCA4MCAqIDEwMjQgKSkgPm1pZDIgJiYKKwkJdGVzdC10b29sIGdlbnJhbmRvbSAiYyIgJCgoIDEyOCAqIDEwMjQgKSkgPm1pZDMgJiYKKwkJZ2l0IGFkZCBtaWQxIG1pZDIgbWlkMyAmJgorCisJCWNvdW50PTAgJiYKKwkJZm9yIHBpIGluIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5pZHgKKwkJZG8KKwkJCXRlc3RfcGF0aF9pc19maWxlICIkcGkiICYmIGNvdW50PSQoKCAkY291bnQgKyAxICkpCisJCWRvbmUgJiYKKwkJdGVzdCAkY291bnQgPSAyICYmCisKKwkJKAorCQkJZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPG1pZDEgJiYKKwkJCWdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDxtaWQyICYmCisJCQlnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8bWlkMworCQkpIHwKKwkJc29ydCA+ZXhwZWN0ICYmCisKKwkJZm9yIHBpIGluIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5pZHgKKwkJZG8KKwkJCWdpdCBzaG93LWluZGV4IDwiJHBpIgorCQlkb25lIHwKKwkJc2VkIC1lICJzL15bMC05XSogXChbMC05YS1mXSpcKSAuKi9cMS8iIHwKKwkJc29ydCA+YWN0dWFsICYmCisKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLXJhdycgJworCWdpdCBjb21taXQgLXEgLW0gaW5pdGlhbCAmJgorCWVjaG8gbW9kaWZpZWQgPj5sYXJnZTEgJiYKKwlnaXQgYWRkIGxhcmdlMSAmJgorCWdpdCBjb21taXQgLXEgLW0gbW9kaWZpZWQgJiYKKwlnaXQgZGlmZiAtLXJhdyBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tc3RhdCcgJworCWdpdCBkaWZmIC0tc3RhdCBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYnICcKKwlnaXQgZGlmZiBIRUFEXiBIRUFEID5hY3R1YWwgJiYKKwlncmVwICJCaW5hcnkgZmlsZXMuKmRpZmZlciIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1jYWNoZWQnICcKKwlnaXQgZGlmZiAtLWNhY2hlZCBIRUFEXiA+YWN0dWFsICYmCisJZ3JlcCAiQmluYXJ5IGZpbGVzLipkaWZmZXIiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXNoLW9iamVjdCcgJworCWdpdCBoYXNoLW9iamVjdCBsYXJnZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgYSBsYXJnZSBmaWxlJyAnCisJZ2l0IGNhdC1maWxlIGJsb2IgOmxhcmdlMSA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhdC1maWxlIGEgbGFyZ2UgZmlsZSBmcm9tIGEgdGFnJyAnCisJZ2l0IHRhZyAtbSBsYXJnZWZpbGUgbGFyZ2VmaWxldGFnIDpsYXJnZTEgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBsYXJnZWZpbGV0YWcgPi9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtc2hvdyBhIGxhcmdlIGZpbGUnICcKKwlnaXQgc2hvdyA6bGFyZ2UxID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrJyAnCisJZ2l0IGNsb25lIGZpbGU6Ly8iJChwd2QpIi8uZ2l0IGZvbyAmJgorCUdJVF9ESVI9bm9uLWV4aXN0ZW50IGdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IC0tdmVyaWZ5IGZvby8uZ2l0L29iamVjdHMvcGFjay8qLnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrJyAnCisJZ2l0IHJlcGFjayAtYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay1vYmplY3RzIHdpdGggbGFyZ2UgbG9vc2Ugb2JqZWN0JyAnCisJU0hBMT0kKGdpdCBoYXNoLW9iamVjdCBodWdlKSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gbG9vc2UgJiYKKwllY2hvICRTSEExIHwgZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCB8CisJCUdJVF9BTExPQ19MSU1JVD0wIEdJVF9ESVI9bG9vc2UvLmdpdCBnaXQgdW5wYWNrLW9iamVjdHMgJiYKKwllY2hvICRTSEExIHwgR0lUX0RJUj1sb29zZS8uZ2l0IGdpdCBwYWNrLW9iamVjdHMgcGFjayAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcGFja2VkICYmCisJbXYgcGFjay0qIHBhY2tlZC8uZ2l0L29iamVjdHMvcGFjayAmJgorCUdJVF9ESVI9cGFja2VkLy5naXQgZ2l0IGNhdC1maWxlIGJsb2IgJFNIQTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGh1Z2UgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhciBhcmNoaXZpbmcnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgSEVBRCA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ppcCBhcmNoaXZpbmcsIHN0b3JlIG9ubHknICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgLTAgSEVBRCA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ppcCBhcmNoaXZpbmcsIGRlZmxhdGUnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgSEVBRCA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgbGFyZ2UgYmxvYnMnICcKKwlnaXQgZnNjayAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDUxLWxhcmdlLWNvbnZlcnNpb24uc2ggYi90L3QxMDUxLWxhcmdlLWNvbnZlcnNpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGI3NjQwYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwNTEtbGFyZ2UtY29udmVyc2lvbi5zaApAQCAtMCwwICsxLDg2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjb252ZXJzaW9uIGZpbHRlcnMgb24gbGFyZ2UgZmlsZXMnCisuIC4vdGVzdC1saWIuc2gKKworc2V0X2F0dHIoKSB7CisJdGVzdF93aGVuX2ZpbmlzaGVkICdybSAtZiAuZ2l0YXR0cmlidXRlcycgJiYKKwllY2hvICIqICQqIiA+LmdpdGF0dHJpYnV0ZXMKK30KKworY2hlY2tfaW5wdXQoKSB7CisJZ2l0IHJlYWQtdHJlZSAtLWVtcHR5ICYmCisJZ2l0IGFkZCBzbWFsbCBsYXJnZSAmJgorCWdpdCBjYXQtZmlsZSBibG9iIDpzbWFsbCA+c21hbGwuaW5kZXggJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiA6bGFyZ2UgfCBoZWFkIC1uIDEgPmxhcmdlLmluZGV4ICYmCisJdGVzdF9jbXAgc21hbGwuaW5kZXggbGFyZ2UuaW5kZXgKK30KKworY2hlY2tfb3V0cHV0KCkgeworCXJtIC1mIHNtYWxsIGxhcmdlICYmCisJZ2l0IGNoZWNrb3V0IHNtYWxsIGxhcmdlICYmCisJaGVhZCAtbiAxIGxhcmdlID5sYXJnZS5oZWFkICYmCisJdGVzdF9jbXAgc21hbGwgbGFyZ2UuaGVhZAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBpbnB1dCB0ZXN0cycgJworCXByaW50ZiAiXCRJZDogZm9vXCRcXHJcXG4iID5zbWFsbCAmJgorCWNhdCBzbWFsbCBzbWFsbCA+bGFyZ2UgJiYKKwlnaXQgY29uZmlnIGNvcmUuYmlnZmlsZXRocmVzaG9sZCAyMCAmJgorCWdpdCBjb25maWcgZmlsdGVyLnRlc3QuY2xlYW4gInNlZCBzLy4qL0NMRUFOLyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b2NybGY9dHJ1ZSBjb252ZXJ0cyBvbiBpbnB1dCcgJworCXRlc3RfY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWNoZWNrX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VvbD1jcmxmIGNvbnZlcnRzIG9uIGlucHV0JyAnCisJc2V0X2F0dHIgZW9sPWNybGYgJiYKKwljaGVja19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZGVudCBjb252ZXJ0cyBvbiBpbnB1dCcgJworCXNldF9hdHRyIGlkZW50ICYmCisJY2hlY2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlci1kZWZpbmVkIGZpbHRlcnMgY29udmVydCBvbiBpbnB1dCcgJworCXNldF9hdHRyIGZpbHRlcj10ZXN0ICYmCisJY2hlY2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb3V0cHV0IHRlc3RzJyAnCisJZWNobyAiXCRJZFwkIiA+c21hbGwgJiYKKwljYXQgc21hbGwgc21hbGwgPmxhcmdlICYmCisJZ2l0IGFkZCBzbWFsbCBsYXJnZSAmJgorCWdpdCBjb25maWcgY29yZS5iaWdmaWxldGhyZXNob2xkIDcgJiYKKwlnaXQgY29uZmlnIGZpbHRlci50ZXN0LnNtdWRnZSAic2VkIHMvLiovU01VREdFLyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b2NybGY9dHJ1ZSBjb252ZXJ0cyBvbiBvdXRwdXQnICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwljaGVja19vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW9sPWNybGYgY29udmVydHMgb24gb3V0cHV0JyAnCisJc2V0X2F0dHIgZW9sPWNybGYgJiYKKwljaGVja19vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlci1kZWZpbmVkIGZpbHRlcnMgY29udmVydCBvbiBvdXRwdXQnICcKKwlzZXRfYXR0ciBmaWx0ZXI9dGVzdCAmJgorCWNoZWNrX291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZGVudCBjb252ZXJ0cyBvbiBvdXRwdXQnICcKKwlzZXRfYXR0ciBpZGVudCAmJgorCXJtIC1mIHNtYWxsIGxhcmdlICYmCisJZ2l0IGNoZWNrb3V0IHNtYWxsIGxhcmdlICYmCisJc2VkIC1uICJzL0lkOiAuKi9JZDogU0hBL3AiIDxzbWFsbCA+c21hbGwuY2xlYW4gJiYKKwloZWFkIC1uIDEgbGFyZ2UgPmxhcmdlLmhlYWQgJiYKKwlzZWQgLW4gInMvSWQ6IC4qL0lkOiBTSEEvcCIgPGxhcmdlLmhlYWQgPmxhcmdlLmNsZWFuICYmCisJdGVzdF9jbXAgc21hbGwuY2xlYW4gbGFyZ2UuY2xlYW4KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDYwLW9iamVjdC1jb3JydXB0aW9uLnNoIGIvdC90MTA2MC1vYmplY3QtY29ycnVwdGlvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYzg5MzcxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTA2MC1vYmplY3QtY29ycnVwdGlvbi5zaApAQCAtMCwwICsxLDE0MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NlZSBob3cgd2UgaGFuZGxlIHZhcmlvdXMgZm9ybXMgb2YgY29ycnVwdGlvbicKKy4gLi90ZXN0LWxpYi5zaAorCisjIGNvbnZlcnQgIjEyMzRhYmNkIiB0byAiLmdpdC9vYmplY3RzLzEyLzM0YWJjZCIKK29ial90b19maWxlKCkgeworCWVjaG8gIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL29iamVjdHMvJChnaXQgcmV2LXBhcnNlICIkMSIgfCBzZWQgJ3MsLi4sJi8sJykiCit9CisKKyMgQ29udmVydCBieXRlIGF0IG9mZnNldCAiJDIiIG9mIG9iamVjdCAiJDEiIGludG8gJ1wwJworY29ycnVwdF9ieXRlKCkgeworCW9ial9maWxlPSQob2JqX3RvX2ZpbGUgIiQxIikgJiYKKwljaG1vZCArdyAiJG9ial9maWxlIiAmJgorCXByaW50ZiAnXDAnIHwgZGQgb2Y9IiRvYmpfZmlsZSIgYnM9MSBzZWVrPSIkMiIgY29udj1ub3RydW5jCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvcnJ1cHQgcmVwbycgJworCWdpdCBpbml0IGJpdC1lcnJvciAmJgorCSgKKwkJY2QgYml0LWVycm9yICYmCisJCXRlc3RfY29tbWl0IGNvbnRlbnQgJiYKKwkJY29ycnVwdF9ieXRlIEhFQUQ6Y29udGVudC50IDEwCisJKSAmJgorCWdpdCBpbml0IG5vLWJpdC1lcnJvciAmJgorCSgKKwkJIyBkaXN0aW5jdCBjb21taXQgZnJvbSBiaXQtZXJyb3IsIGJ1dCBjb250YWluaW5nIGEKKwkJIyBub24tY29ycnVwdGVkIHZlcnNpb24gb2YgdGhlIHNhbWUgYmxvYgorCQljZCBuby1iaXQtZXJyb3IgJiYKKwkJdGVzdF90aWNrICYmCisJCXRlc3RfY29tbWl0IGNvbnRlbnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBtaXNzaW5nIG9iamVjdCcgJworCWdpdCBpbml0IG1pc3NpbmcgJiYKKwkoCisJCWNkIG1pc3NpbmcgJiYKKwkJdGVzdF9jb21taXQgY29udGVudCAmJgorCQlybSAtZiAiJChvYmpfdG9fZmlsZSBIRUFEOmNvbnRlbnQudCkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvIHdpdGggbWlzbmFtZWQgb2JqZWN0JyAnCisJZ2l0IGluaXQgbWlzbmFtZWQgJiYKKwkoCisJCWNkIG1pc25hbWVkICYmCisJCXRlc3RfY29tbWl0IGNvbnRlbnQgJiYKKwkJZ29vZD0kKG9ial90b19maWxlIEhFQUQ6Y29udGVudC50KSAmJgorCQlibG9iPSQoZWNobyBjb3JydXB0IHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJCWJhZD0kKG9ial90b19maWxlICRibG9iKSAmJgorCQlybSAtZiAiJGdvb2QiICYmCisJCW12ICIkYmFkIiAiJGdvb2QiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJlYW1pbmcgYSBjb3JydXB0IGJsb2IgZmFpbHMnICcKKwkoCisJCWNkIGJpdC1lcnJvciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiBIRUFEOmNvbnRlbnQudAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0dGluZyB0eXBlIG9mIGEgY29ycnVwdCBibG9iIGZhaWxzJyAnCisJKAorCQljZCBiaXQtZXJyb3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC1zIEhFQUQ6Y29udGVudC50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgLXUgZGV0ZWN0cyBiaXQtZXJyb3JzIGluIGJsb2JzJyAnCisJKAorCQljZCBiaXQtZXJyb3IgJiYKKwkJcm0gLWYgY29udGVudC50ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFECisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgLXUgZGV0ZWN0cyBtaXNzaW5nIG9iamVjdHMnICcKKwkoCisJCWNkIG1pc3NpbmcgJiYKKwkJcm0gLWYgY29udGVudC50ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFECisJKQorJworCisjIFdlIHVzZSAtLWJhcmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHRyYW5zcG9ydCBkZXRlY3RzIGl0LCBub3QgdGhlIGNoZWNrb3V0CisjIHBoYXNlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1uby1sb2NhbCAtLWJhcmUgZGV0ZWN0cyBjb3JydXB0aW9uJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1iYXJlIGJpdC1lcnJvciBjb3JydXB0LXRyYW5zcG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLW5vLWxvY2FsIC0tYmFyZSBkZXRlY3RzIG1pc3Npbmcgb2JqZWN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1iYXJlIG1pc3NpbmcgbWlzc2luZy10cmFuc3BvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1uby1sb2NhbCAtLWJhcmUgZGV0ZWN0cyBtaXNuYW1lZCBvYmplY3QnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWJhcmUgbWlzbmFtZWQgbWlzbmFtZWQtdHJhbnNwb3J0CisnCisKKyMgV2UgZG8gbm90IGV4cGVjdCAtLWxvY2FsIHRvIGRldGVjdCBjb3JydXB0aW9uIGF0IHRoZSB0cmFuc3BvcnQgbGF5ZXIsCisjIHNvIHdlIGFyZSByZWFsbHkgY2hlY2tpbmcgdGhlIGNoZWNrb3V0KCkgY29kZSBwYXRoLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1sb2NhbCBkZXRlY3RzIGNvcnJ1cHRpb24nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1sb2NhbCBiaXQtZXJyb3IgY29ycnVwdC1jaGVja291dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBkZXRlY3RlZCBkdXJpbmcgY2hlY2tvdXQgbGVhdmVzIHJlcG8gaW50YWN0JyAnCisJdGVzdF9wYXRoX2lzX2RpciBjb3JydXB0LWNoZWNrb3V0Ly5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1sb2NhbCBkZXRlY3RzIG1pc3Npbmcgb2JqZWN0cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLWxvY2FsIG1pc3NpbmcgbWlzc2luZy1jaGVja291dAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjbG9uZSAtLWxvY2FsIGRldGVjdHMgbWlzbmFtZWQgb2JqZWN0cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLWxvY2FsIG1pc25hbWVkIG1pc25hbWVkLWNoZWNrb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGludG8gY29ycnVwdGVkIHJlcG8gd2l0aCBpbmRleC1wYWNrJyAnCisJY3AgLVIgYml0LWVycm9yIGJpdC1lcnJvci1jcCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGJpdC1lcnJvci1jcCIgJiYKKwkoCisJCWNkIGJpdC1lcnJvci1jcCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgdHJhbnNmZXIudW5wYWNrTGltaXQ9MSBcCisJCQlmZXRjaCAuLi9uby1iaXQtZXJyb3IgMj5zdGRlcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAhIC1pIGNvbGxpc2lvbiBzdGRlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVybmFsIHRyZWUgb2JqZWN0cyBhcmUgbm90ICJtaXNzaW5nIicgJworCWdpdCBpbml0IG1pc3NpbmctZW1wdHkgJiYKKwkoCisJCWNkIG1pc3NpbmctZW1wdHkgJiYKKwkJZW1wdHlfdHJlZT0kKGdpdCBoYXNoLW9iamVjdCAtdCB0cmVlIC9kZXYvbnVsbCkgJiYKKwkJY29tbWl0PSQoZWNobyBmb28gfCBnaXQgY29tbWl0LXRyZWUgJGVtcHR5X3RyZWUpICYmCisJCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgJGNvbW1pdAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDkwLXNwYXJzZS1jaGVja291dC1zY29wZS5zaCBiL3QvdDEwOTAtc3BhcnNlLWNoZWNrb3V0LXNjb3BlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwY2MwMDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDkwLXNwYXJzZS1jaGVja291dC1zY29wZS5zaApAQCAtMCwwICsxLDg1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc3BhcnNlIGNoZWNrb3V0IHNjb3BlIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvICJpbml0aWFsIiA+YSAmJgorCWVjaG8gImluaXRpYWwiID5iICYmCisJZWNobyAiaW5pdGlhbCIgPmMgJiYKKwlnaXQgYWRkIGEgYiBjICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBmZWF0dXJlIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtYiBmZWF0dXJlICYmCisJZWNobyAibW9kaWZpZWQiID5iICYmCisJZWNobyAibW9kaWZpZWQiID5jICYmCisJZ2l0IGFkZCBiIGMgJiYKKwlnaXQgY29tbWl0IC1tICJtb2RpZmljYXRpb24iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BlcmZvcm0gc3BhcnNlIGNoZWNrb3V0IG9mIG1hc3RlcicgJworCWdpdCBjb25maWcgLS1sb2NhbCAtLWJvb2wgY29yZS5zcGFyc2VjaGVja291dCB0cnVlICYmCisJZWNobyAiIS8qIiA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWVjaG8gIi9hIiA+Pi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwllY2hvICIvYyIgPj4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19maWxlIGEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBmZWF0dXJlIGJyYW5jaCBpbnRvIHNwYXJzZSBjaGVja291dCBvZiBtYXN0ZXInICcKKwlnaXQgbWVyZ2UgZmVhdHVyZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYyAmJgorCXRlc3QgIiQoY2F0IGMpIiA9ICJtb2RpZmllZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV0dXJuIHRvIGZ1bGwgY2hlY2tvdXQgb2YgbWFzdGVyJyAnCisJZ2l0IGNoZWNrb3V0IGZlYXR1cmUgJiYKKwllY2hvICIvKiIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBjICYmCisJdGVzdCAiJChjYXQgYikiID0gIm1vZGlmaWVkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbiBwYXJ0aWFsIGNsb25lLCBzcGFyc2UgY2hlY2tvdXQgb25seSBmZXRjaGVzIG5lZWRlZCBibG9icycgJworCXRlc3RfY3JlYXRlX3JlcG8gc2VydmVyICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpL3NlcnZlciIgY2xpZW50ICYmCisKKwl0ZXN0X2NvbmZpZyAtQyBzZXJ2ZXIgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKwllY2hvIGEgPnNlcnZlci9hICYmCisJZWNobyBiYiA+c2VydmVyL2IgJiYKKwlta2RpciBzZXJ2ZXIvYyAmJgorCWVjaG8gY2NjID5zZXJ2ZXIvYy9jICYmCisJZ2l0IC1DIHNlcnZlciBhZGQgYSBiIGMvYyAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1tIG1lc3NhZ2UgJiYKKworCXRlc3RfY29uZmlnIC1DIGNsaWVudCBjb3JlLnNwYXJzZWNoZWNrb3V0IDEgJiYKKwl0ZXN0X2NvbmZpZyAtQyBjbGllbnQgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgb3JpZ2luICYmCisJZWNobyAiIS8qIiA+Y2xpZW50Ly5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwllY2hvICIvYSIgPj5jbGllbnQvLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCAtQyBjbGllbnQgZmV0Y2ggLS1maWx0ZXI9YmxvYjpub25lIG9yaWdpbiAmJgorCWdpdCAtQyBjbGllbnQgY2hlY2tvdXQgRkVUQ0hfSEVBRCAmJgorCisJZ2l0IC1DIGNsaWVudCByZXYtbGlzdCBIRUFEIFwKKwkJLS1xdWlldCAtLW9iamVjdHMgLS1taXNzaW5nPXByaW50ID51bnNvcnRlZF9hY3R1YWwgJiYKKwkoCisJCXByaW50ZiAiPyIgJiYKKwkJZ2l0IGhhc2gtb2JqZWN0IHNlcnZlci9iICYmCisJCXByaW50ZiAiPyIgJiYKKwkJZ2l0IGhhc2gtb2JqZWN0IHNlcnZlci9jL2MKKwkpID51bnNvcnRlZF9leHBlY3QgJiYKKwlzb3J0IHVuc29ydGVkX2FjdHVhbCA+YWN0dWFsICYmCisJc29ydCB1bnNvcnRlZF9leHBlY3QgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDkxLXNwYXJzZS1jaGVja291dC1idWlsdGluLnNoIGIvdC90MTA5MS1zcGFyc2UtY2hlY2tvdXQtYnVpbHRpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OGNkZGUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTA5MS1zcGFyc2UtY2hlY2tvdXQtYnVpbHRpbi5zaApAQCAtMCwwICsxLDYwNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NwYXJzZSBjaGVja291dCBidWlsdGluIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKworbGlzdF9maWxlcygpIHsKKwkjIERvIG5vdCByZXBsYWNlIHRoaXMgd2l0aCAnbHMgIiQxIicsIGFzICJscyIgd2l0aCBCU0QtbGluZWFnZQorCSMgZW5hYmxlcyAiLUEiIGJ5IGRlZmF1bHQgZm9yIHJvb3QgYW5kIGVuZHMgdXAgaW5jbHVkaW5nICIuZ2l0IiBhbmQKKwkjIHN1Y2ggaW4gaXRzIG91dHB1dC4gKE5vdGUsIHRob3VnaCwgdGhhdCBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlIGFzCisJIyByb290IGlzIGdlbmVyYWxseSBub3QgcmVjb21tZW5kZWQuKQorCShjZCAiJDEiICYmIHByaW50ZiAnJXNcbicgKikKK30KKworY2hlY2tfZmlsZXMoKSB7CisJbGlzdF9maWxlcyAiJDEiID5hY3R1YWwgJiYKKwlzaGlmdCAmJgorCXByaW50ZiAiJXNcbiIgJEAgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgaW5pdCByZXBvICYmCisJKAorCQljZCByZXBvICYmCisJCWVjaG8gImluaXRpYWwiID5hICYmCisJCW1rZGlyIGZvbGRlcjEgZm9sZGVyMiBkZWVwICYmCisJCW1rZGlyIGRlZXAvZGVlcGVyMSBkZWVwL2RlZXBlcjIgJiYKKwkJbWtkaXIgZGVlcC9kZWVwZXIxL2RlZXBlc3QgJiYKKwkJY3AgYSBmb2xkZXIxICYmCisJCWNwIGEgZm9sZGVyMiAmJgorCQljcCBhIGRlZXAgJiYKKwkJY3AgYSBkZWVwL2RlZXBlcjEgJiYKKwkJY3AgYSBkZWVwL2RlZXBlcjIgJiYKKwkJY3AgYSBkZWVwL2RlZXBlcjEvZGVlcGVzdCAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3BhcnNlLWNoZWNrb3V0IGxpc3QgKGVtcHR5KScgJworCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBsaXN0ID5saXN0IDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGxpc3QgJiYKKwl0ZXN0X2kxOG5ncmVwICJ0aGlzIHdvcmt0cmVlIGlzIG5vdCBzcGFyc2UgKHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBub3QgZXhpc3QpIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNwYXJzZS1jaGVja291dCBsaXN0IChwb3B1bGF0ZWQpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1mIHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWNhdCA+cmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IDw8LVxFT0YgJiYKKwkvZm9sZGVyMS8qCisJL2RlZXAvCisJKiovYQorCSEqYmluKgorCUVPRgorCWNwIHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCBleHBlY3QgJiYKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgbGlzdCA+bGlzdCAmJgorCXRlc3RfY21wIGV4cGVjdCBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCcgJworCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBpbml0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwl0ZXN0X2NtcF9jb25maWcgLUMgcmVwbyB0cnVlIGNvcmUuc3BhcnNlY2hlY2tvdXQgJiYKKwljaGVja19maWxlcyByZXBvIGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNwYXJzZS1jaGVja291dCBsaXN0IGFmdGVyIGluaXQnICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgbGlzdCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCB3aXRoIGV4aXN0aW5nIHNwYXJzZS1jaGVja291dCcgJworCWVjaG8gIipmb2xkZXIqIiA+PiByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgaW5pdCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkvKgorCSEvKi8KKwkqZm9sZGVyKgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwljaGVja19maWxlcyByZXBvIGEgZm9sZGVyMSBmb2xkZXIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tc3BhcnNlJyAnCisJZ2l0IGNsb25lIC0tc3BhcnNlICJmaWxlOi8vJChwd2QpL3JlcG8iIGNsb25lICYmCisJZ2l0IC1DIGNsb25lIHNwYXJzZS1jaGVja291dCBsaXN0ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWNoZWNrX2ZpbGVzIGNsb25lIGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IGVuYWJsZXMgY29uZmlnJyAnCisJZ2l0IGluaXQgZW1wdHktY29uZmlnICYmCisJKAorCQljZCBlbXB0eS1jb25maWcgJiYKKwkJdGVzdF9jb21taXQgdGVzdCBmaWxlICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvY29uZmlnLndvcmt0cmVlICYmCisJCWdpdCBzcGFyc2UtY2hlY2tvdXQgc2V0IG5vdGhpbmcgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9jb25maWcud29ya3RyZWUgJiYKKwkJdGVzdF9jbXBfY29uZmlnIHRydWUgY29yZS5zcGFyc2VDaGVja291dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHNwYXJzZS1jaGVja291dCB1c2luZyBidWlsdGluJyAnCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IHNldCAiLyoiICIhLyovIiAiKmZvbGRlcioiICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCSpmb2xkZXIqCisJRU9GCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IGxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJY2hlY2tfZmlsZXMgcmVwbyBhIGZvbGRlcjEgZm9sZGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgc3BhcnNlLWNoZWNrb3V0IHVzaW5nIC0tc3RkaW4nICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJL2ZvbGRlcjEvCisJL2ZvbGRlcjIvCisJRU9GCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IHNldCAtLXN0ZGluIDxleHBlY3QgJiYKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwljaGVja19maWxlcyByZXBvICJhIGZvbGRlcjEgZm9sZGVyMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHRvIHNwYXJzZS1jaGVja291dCcgJworCWNhdCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPmV4cGVjdCAmJgorCWNhdCA+YWRkIDw8LVxFT0YgJiYKKwlwYXR0ZXJuMQorCS9mb2xkZXIxLworCXBhdHRlcm4yCisJRU9GCisJY2F0IGFkZCA+PmV4cGVjdCAmJgorCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBhZGQgLS1zdGRpbiA8YWRkICYmCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IGxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJY2hlY2tfZmlsZXMgcmVwbyAiYSBmb2xkZXIxIGZvbGRlcjIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmUgbW9kZTogbWF0Y2ggcGF0dGVybnMnICcKKwlnaXQgLUMgcmVwbyBjb25maWcgLS13b3JrdHJlZSBjb3JlLnNwYXJzZUNoZWNrb3V0Q29uZSB0cnVlICYmCisJcm0gLXJmIHJlcG8vYSByZXBvL2ZvbGRlcjEgcmVwby9mb2xkZXIyICYmCisJZ2l0IC1DIHJlcG8gcmVhZC10cmVlIC1tdSBIRUFEIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJkaXNhYmxpbmcgY29uZSBwYXR0ZXJucyIgZXJyICYmCisJZ2l0IC1DIHJlcG8gcmVzZXQgLS1oYXJkICYmCisJY2hlY2tfZmlsZXMgcmVwbyBhIGZvbGRlcjEgZm9sZGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25lIG1vZGU6IHdhcm4gb24gYmFkIHBhdHRlcm4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgbXYgc3BhcnNlLWNoZWNrb3V0IHJlcG8vLmdpdC9pbmZvLyAmJgorCWNwIHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAuICYmCisJZWNobyAiIS9kZWVwL2RlZXBlci8qIiA+PnJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCAtQyByZXBvIHJlYWQtdHJlZSAtbXUgSEVBRCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BhcnNlLWNoZWNrb3V0IGRpc2FibGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBkaXNhYmxlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIC0tbGlzdCA+Y29uZmlnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBjb3JlLnNwYXJzZUNoZWNrb3V0ICYmCisJY2hlY2tfZmlsZXMgcmVwbyBhIGRlZXAgZm9sZGVyMSBmb2xkZXIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmUgbW9kZTogaW5pdCBhbmQgc2V0JyAnCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IGluaXQgLS1jb25lICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIC0tbGlzdCA+Y29uZmlnICYmCisJdGVzdF9pMThuZ3JlcCAiY29yZS5zcGFyc2VjaGVja291dGNvbmU9dHJ1ZSIgY29uZmlnICYmCisJbGlzdF9maWxlcyByZXBvID5kaXIgICYmCisJZWNobyBhID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZGlyICYmCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IHNldCBkZWVwL2RlZXBlcjEvZGVlcGVzdC8gMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJY2hlY2tfZmlsZXMgcmVwbyBhIGRlZXAgJiYKKwljaGVja19maWxlcyByZXBvL2RlZXAgYSBkZWVwZXIxICYmCisJY2hlY2tfZmlsZXMgcmVwby9kZWVwL2RlZXBlcjEgYSBkZWVwZXN0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCS9kZWVwLworCSEvZGVlcC8qLworCS9kZWVwL2RlZXBlcjEvCisJIS9kZWVwL2RlZXBlcjEvKi8KKwkvZGVlcC9kZWVwZXIxL2RlZXBlc3QvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBzZXQgLS1zdGRpbiAyPmVyciA8PC1cRU9GICYmCisJZm9sZGVyMQorCWZvbGRlcjIKKwlFT0YKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJY2hlY2tfZmlsZXMgcmVwbyBhIGZvbGRlcjEgZm9sZGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25lIG1vZGU6IGxpc3QnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZm9sZGVyMQorCWZvbGRlcjIKKwlFT0YKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IC0tc3RkaW4gPGV4cGVjdCAmJgorCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBsaXN0ID5hY3R1YWwgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25lIG1vZGU6IHNldCB3aXRoIG5lc3RlZCBmb2xkZXJzJyAnCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IHNldCBkZWVwIGRlZXAvZGVlcGVyMS9kZWVwZXN0IDI+ZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJL2RlZXAvCisJRU9GCisJdGVzdF9jbXAgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25lIG1vZGU6IGFkZCBpbmRlcGVuZGVudCBwYXRoJyAnCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IHNldCBkZWVwL2RlZXBlcjEgJiYKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgYWRkIGZvbGRlcjEgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJL2RlZXAvCisJIS9kZWVwLyovCisJL2RlZXAvZGVlcGVyMS8KKwkvZm9sZGVyMS8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJY2hlY2tfZmlsZXMgcmVwbyBhIGRlZXAgZm9sZGVyMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25lIG1vZGU6IGFkZCBzaWJsaW5nIHBhdGgnICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IGRlZXAvZGVlcGVyMSAmJgorCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBhZGQgZGVlcC9kZWVwZXIyICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCS9kZWVwLworCSEvZGVlcC8qLworCS9kZWVwL2RlZXBlcjEvCisJL2RlZXAvZGVlcGVyMi8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJY2hlY2tfZmlsZXMgcmVwbyBhIGRlZXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZSBtb2RlOiBhZGQgcGFyZW50IHBhdGgnICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IGRlZXAvZGVlcGVyMSBmb2xkZXIxICYmCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IGFkZCBkZWVwICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCS9kZWVwLworCS9mb2xkZXIxLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwljaGVja19maWxlcyByZXBvIGEgZGVlcCBmb2xkZXIxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdC11cC10by1kYXRlIGRvZXMgbm90IGJsb2NrIHJlc3Qgb2Ygc3BhcnNpZmljYXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IGRpc2FibGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IC1DIHJlcG8gcmVzZXQgLS1oYXJkICYmCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IHNldCBkZWVwICYmCisKKwllY2hvIHVwZGF0ZSA+cmVwby9kZWVwL2RlZXBlcjIvYSAmJgorCWNwIHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCBleHBlY3QgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICIhL2RlZXAvKi8iICIvZGVlcC9kZWVwZXIxLyIgPj5leHBlY3QgJiYKKworCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBzZXQgZGVlcC9kZWVwZXIxIDI+ZXJyICYmCisKKwl0ZXN0X2kxOG5ncmVwICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBub3QgdXAgdG8gZGF0ZSIgZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWNoZWNrX2ZpbGVzIHJlcG8vZGVlcCBhIGRlZXBlcjEgZGVlcGVyMiAmJgorCWNoZWNrX2ZpbGVzIHJlcG8vZGVlcC9kZWVwZXIxIGEgZGVlcGVzdCAmJgorCWNoZWNrX2ZpbGVzIHJlcG8vZGVlcC9kZWVwZXIxL2RlZXBlc3QgYSAmJgorCWNoZWNrX2ZpbGVzIHJlcG8vZGVlcC9kZWVwZXIyIGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IHRvIG9sZCBzcGFyc2UtY2hlY2tvdXQgb24gZW1wdHkgdXBkYXRlJyAnCisJZ2l0IGluaXQgZW1wdHktdGVzdCAmJgorCSgKKwkJZWNobyA+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAidGVzdCIgJiYKKwkJZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgbm90aGluZyAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICEgIlNwYXJzZSBjaGVja291dCBsZWF2ZXMgbm8gZW50cnkgb24gd29ya2luZyBkaXJlY3RvcnkiIGVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICEgIi5naXQvaW5kZXgubG9jayIgZXJyICYmCisJCWdpdCBzcGFyc2UtY2hlY2tvdXQgc2V0IGZpbGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgd2hlbiBsb2NrIGlzIHRha2VuJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yZiByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQubG9jayAmJgorCXRvdWNoIHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dC5sb2NrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IHNldCBkZWVwIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiVW5hYmxlIHRvIGNyZWF0ZSAuKlwubG9jayIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRpZ25vcmUgc2hvdWxkIG5vdCB3YXJuIGFib3V0IGNvbmUgbW9kZScgJworCWdpdCAtQyByZXBvIGNvbmZpZyAtLXdvcmt0cmVlIGNvcmUuc3BhcnNlQ2hlY2tvdXRDb25lIHRydWUgJiYKKwllY2hvICIqKi9iaW4vKiIgPnJlcG8vLmdpdGlnbm9yZSAmJgorCWdpdCAtQyByZXBvIHJlc2V0IC0taGFyZCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybnMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGFyc2UtY2hlY2tvdXQgKGluaXR8c2V0fGRpc2FibGUpIHdhcm5zIHdpdGggZGlydHkgc3RhdHVzJyAnCisJZ2l0IGNsb25lIHJlcG8gZGlydHkgJiYKKwllY2hvIGRpcnR5ID5kaXJ0eS9mb2xkZXIxL2EgJiYKKworCWdpdCAtQyBkaXJ0eSBzcGFyc2UtY2hlY2tvdXQgaW5pdCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIndhcm5pbmcuKlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIG5vdCB1cCB0byBkYXRlIiBlcnIgJiYKKworCWdpdCAtQyBkaXJ0eSBzcGFyc2UtY2hlY2tvdXQgc2V0IC9mb2xkZXIyLyogL2RlZXAvZGVlcGVyMS8qIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAid2FybmluZy4qVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgbm90IHVwIHRvIGRhdGUiIGVyciAmJgorCXRlc3RfcGF0aF9pc19maWxlIGRpcnR5L2ZvbGRlcjEvYSAmJgorCisJZ2l0IC1DIGRpcnR5IHNwYXJzZS1jaGVja291dCBkaXNhYmxlIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCisJZ2l0IC1DIGRpcnR5IHJlc2V0IC0taGFyZCAmJgorCWdpdCAtQyBkaXJ0eSBzcGFyc2UtY2hlY2tvdXQgaW5pdCAmJgorCWdpdCAtQyBkaXJ0eSBzcGFyc2UtY2hlY2tvdXQgc2V0IC9mb2xkZXIyLyogL2RlZXAvZGVlcGVyMS8qICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlydHkvZm9sZGVyMS9hICYmCisJZ2l0IC1DIGRpcnR5IHNwYXJzZS1jaGVja291dCBkaXNhYmxlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGlydHkvZm9sZGVyMS9hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwYXJzZS1jaGVja291dCAoaW5pdHxzZXR8ZGlzYWJsZSkgd2FybnMgd2l0aCB1bm1lcmdlZCBzdGF0dXMnICcKKwlnaXQgY2xvbmUgcmVwbyB1bm1lcmdlZCAmJgorCisJY2F0ID5pbnB1dCA8PC1FT0YgJiYKKwkwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAJZm9sZGVyMS9hCisJMTAwNjQ0ICQoZ2l0IC1DIHVubWVyZ2VkIHJldi1wYXJzZSBIRUFEOmZvbGRlcjEvYSkgMQlmb2xkZXIxL2EKKwlFT0YKKwlnaXQgLUMgdW5tZXJnZWQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8aW5wdXQgJiYKKworCWdpdCAtQyB1bm1lcmdlZCBzcGFyc2UtY2hlY2tvdXQgaW5pdCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIndhcm5pbmcuKlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIHVubWVyZ2VkIiBlcnIgJiYKKworCWdpdCAtQyB1bm1lcmdlZCBzcGFyc2UtY2hlY2tvdXQgc2V0IC9mb2xkZXIyLyogL2RlZXAvZGVlcGVyMS8qIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAid2FybmluZy4qVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgdW5tZXJnZWQiIGVyciAmJgorCXRlc3RfcGF0aF9pc19maWxlIGRpcnR5L2ZvbGRlcjEvYSAmJgorCisJZ2l0IC1DIHVubWVyZ2VkIHNwYXJzZS1jaGVja291dCBkaXNhYmxlIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAid2FybmluZy4qVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgdW5tZXJnZWQiIGVyciAmJgorCisJZ2l0IC1DIHVubWVyZ2VkIHJlc2V0IC0taGFyZCAmJgorCWdpdCAtQyB1bm1lcmdlZCBzcGFyc2UtY2hlY2tvdXQgaW5pdCAmJgorCWdpdCAtQyB1bm1lcmdlZCBzcGFyc2UtY2hlY2tvdXQgc2V0IC9mb2xkZXIyLyogL2RlZXAvZGVlcGVyMS8qICYmCisJZ2l0IC1DIHVubWVyZ2VkIHNwYXJzZS1jaGVja291dCBkaXNhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwYXJzZS1jaGVja291dCByZWFwcGx5JyAnCisJZ2l0IGNsb25lIHJlcG8gdHdlYWsgJiYKKworCWVjaG8gZGlydHkgPnR3ZWFrL2RlZXAvZGVlcGVyMi9hICYmCisKKwljYXQgPmlucHV0IDw8LUVPRiAmJgorCTAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAlmb2xkZXIxL2EKKwkxMDA2NDQgJChnaXQgLUMgdHdlYWsgcmV2LXBhcnNlIEhFQUQ6Zm9sZGVyMS9hKSAxCWZvbGRlcjEvYQorCUVPRgorCWdpdCAtQyB0d2VhayB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxpbnB1dCAmJgorCisJZ2l0IC1DIHR3ZWFrIHNwYXJzZS1jaGVja291dCBpbml0IC0tY29uZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIndhcm5pbmcuKlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIG5vdCB1cCB0byBkYXRlIiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJ3YXJuaW5nLipUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSB1bm1lcmdlZCIgZXJyICYmCisKKwlnaXQgLUMgdHdlYWsgc3BhcnNlLWNoZWNrb3V0IHNldCBmb2xkZXIyIGRlZXAvZGVlcGVyMSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIndhcm5pbmcuKlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIG5vdCB1cCB0byBkYXRlIiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJ3YXJuaW5nLipUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSB1bm1lcmdlZCIgZXJyICYmCisKKwlnaXQgLUMgdHdlYWsgc3BhcnNlLWNoZWNrb3V0IHJlYXBwbHkgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJ3YXJuaW5nLipUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBub3QgdXAgdG8gZGF0ZSIgZXJyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdHdlYWsvZGVlcC9kZWVwZXIyL2EgJiYKKwl0ZXN0X2kxOG5ncmVwICJ3YXJuaW5nLipUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSB1bm1lcmdlZCIgZXJyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdHdlYWsvZm9sZGVyMS9hICYmCisKKwlnaXQgLUMgdHdlYWsgY2hlY2tvdXQgSEVBRCBkZWVwL2RlZXBlcjIvYSAmJgorCWdpdCAtQyB0d2VhayBzcGFyc2UtY2hlY2tvdXQgcmVhcHBseSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAid2FybmluZy4qVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgbm90IHVwIHRvIGRhdGUiIGVyciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHR3ZWFrL2RlZXAvZGVlcGVyMi9hICYmCisJdGVzdF9pMThuZ3JlcCAid2FybmluZy4qVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgdW5tZXJnZWQiIGVyciAmJgorCXRlc3RfcGF0aF9pc19maWxlIHR3ZWFrL2ZvbGRlcjEvYSAmJgorCisJZ2l0IC1DIHR3ZWFrIGFkZCBmb2xkZXIxL2EgJiYKKwlnaXQgLUMgdHdlYWsgc3BhcnNlLWNoZWNrb3V0IHJlYXBwbHkgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdHdlYWsvZGVlcC9kZWVwZXIyL2EgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0d2Vhay9mb2xkZXIxL2EgJiYKKworCWdpdCAtQyB0d2VhayBzcGFyc2UtY2hlY2tvdXQgZGlzYWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25lIG1vZGU6IHNldCB3aXRoIGNvcmUuaWdub3JlQ2FzZT10cnVlJyAnCisJcm0gcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IGluaXQgLS1jb25lICYmCisJZ2l0IC1DIHJlcG8gLWMgY29yZS5pZ25vcmVDYXNlPXRydWUgc3BhcnNlLWNoZWNrb3V0IHNldCBmb2xkZXIxICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCS9mb2xkZXIxLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwljaGVja19maWxlcyByZXBvIGEgZm9sZGVyMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcmFjdGlvbiB3aXRoIHN1Ym1vZHVsZXMnICcKKwlnaXQgY2xvbmUgcmVwbyBzdXBlciAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJbWtkaXIgbW9kdWxlcyAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9yZXBvIG1vZHVsZXMvY2hpbGQgJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBzdWJtb2R1bGUiICYmCisJCWdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCAtLWNvbmUgJiYKKwkJZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgZm9sZGVyMQorCSkgJiYKKwljaGVja19maWxlcyBzdXBlciBhIGZvbGRlcjEgbW9kdWxlcyAmJgorCWNoZWNrX2ZpbGVzIHN1cGVyL21vZHVsZXMvY2hpbGQgYSBkZWVwIGZvbGRlcjEgZm9sZGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmZXJlbnQgc3BhcnNlLWNoZWNrb3V0cyB3aXRoIHdvcmt0cmVlcycgJworCWdpdCAtQyByZXBvIHdvcmt0cmVlIGFkZCAtLWRldGFjaCAuLi93b3JrdHJlZSAmJgorCWNoZWNrX2ZpbGVzIHdvcmt0cmVlICJhIGRlZXAgZm9sZGVyMSBmb2xkZXIyIiAmJgorCWdpdCAtQyB3b3JrdHJlZSBzcGFyc2UtY2hlY2tvdXQgaW5pdCAtLWNvbmUgJiYKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IGZvbGRlcjEgJiYKKwlnaXQgLUMgd29ya3RyZWUgc3BhcnNlLWNoZWNrb3V0IHNldCBkZWVwL2RlZXBlcjEgJiYKKwljaGVja19maWxlcyByZXBvIGEgZm9sZGVyMSAmJgorCWNoZWNrX2ZpbGVzIHdvcmt0cmVlIGEgZGVlcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXNpbmcgZmlsZW5hbWUga2VlcHMgZmlsZSBvbi1kaXNrJyAnCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IHNldCBhIGRlZXAgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJL2EvCisJL2RlZXAvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWNoZWNrX2ZpbGVzIHJlcG8gYSBkZWVwCisnCisKK2NoZWNrX3JlYWRfdHJlZV9lcnJvcnMgKCkgeworCVJFUE89JDEKKwlGSUxFUz0kMgorCUVSUk9SUz0kMworCWdpdCAtQyAkUkVQTyAtYyBjb3JlLnNwYXJzZUNoZWNrb3V0Q29uZT1mYWxzZSByZWFkLXRyZWUgLW11IEhFQUQgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJY2hlY2tfZmlsZXMgJFJFUE8gIiRGSUxFUyIgJiYKKwlnaXQgLUMgJFJFUE8gcmVhZC10cmVlIC1tdSBIRUFEIDI+ZXJyICYmCisJaWYgdGVzdCAteiAiJEVSUk9SUyIKKwl0aGVuCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKwllbHNlCisJCXRlc3RfaTE4bmdyZXAgIiRFUlJPUlMiIGVycgorCWZpICYmCisJY2hlY2tfZmlsZXMgJFJFUE8gJEZJTEVTCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdHRlcm4tY2hlY2tzOiAvQS8qKicgJworCWNhdCA+cmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IDw8LVxFT0YgJiYKKwkvKgorCSEvKi8KKwkvZm9sZGVyMS8qKgorCUVPRgorCWNoZWNrX3JlYWRfdHJlZV9lcnJvcnMgcmVwbyAiYSBmb2xkZXIxIiAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0dGVybi1jaGVja3M6IC9BLyoqL0IvJyAnCisJY2F0ID5yZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCS9kZWVwLyoqL2RlZXBlc3QKKwlFT0YKKwljaGVja19yZWFkX3RyZWVfZXJyb3JzIHJlcG8gImEgZGVlcCIgImRpc2FibGluZyBjb25lIHBhdHRlcm4gbWF0Y2hpbmciICYmCisJY2hlY2tfZmlsZXMgcmVwby9kZWVwICJkZWVwZXIxIiAmJgorCWNoZWNrX2ZpbGVzIHJlcG8vZGVlcC9kZWVwZXIxICJkZWVwZXN0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXR0ZXJuLWNoZWNrczogdG9vIHNob3J0JyAnCisJY2F0ID5yZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCS8KKwlFT0YKKwljaGVja19yZWFkX3RyZWVfZXJyb3JzIHJlcG8gImEiICJkaXNhYmxpbmcgY29uZSBwYXR0ZXJuIG1hdGNoaW5nIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0dGVybi1jaGVja3M6IG5vdCB0b28gc2hvcnQnICcKKwljYXQgPnJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJL2IvCisJRU9GCisJZ2l0IC1DIHJlcG8gcmVhZC10cmVlIC1tdSBIRUFEIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCWNoZWNrX2ZpbGVzIHJlcG8gYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXR0ZXJuLWNoZWNrczogdHJhaWxpbmcgIioiJyAnCisJY2F0ID5yZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCS9hKgorCUVPRgorCWNoZWNrX3JlYWRfdHJlZV9lcnJvcnMgcmVwbyAiYSIgImRpc2FibGluZyBjb25lIHBhdHRlcm4gbWF0Y2hpbmciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdHRlcm4tY2hlY2tzOiBzdGFydGluZyAiKiInICcKKwljYXQgPnJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJKmVlcC8KKwlFT0YKKwljaGVja19yZWFkX3RyZWVfZXJyb3JzIHJlcG8gImEgZGVlcCIgImRpc2FibGluZyBjb25lIHBhdHRlcm4gbWF0Y2hpbmciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdHRlcm4tY2hlY2tzOiBjb250YWluZWQgZ2xvYiBjaGFyYWN0ZXJzJyAnCisJZm9yIGMgaW4gIlthXSIgIlxcIiAiPyIgIioiCisJZG8KKwkJY2F0ID5yZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPDwtRU9GICYmCisJCS8qCisJCSEvKi8KKwkJc29tZXRoaW5nJGMtZWxzZS8KKwkJRU9GCisJCWNoZWNrX3JlYWRfdHJlZV9lcnJvcnMgcmVwbyAiYSIgImRpc2FibGluZyBjb25lIHBhdHRlcm4gbWF0Y2hpbmciCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEJTTEFTSFBTUEVDICdwYXR0ZXJuLWNoZWNrczogZXNjYXBlZCBjaGFyYWN0ZXJzJyAnCisJZ2l0IGNsb25lIHJlcG8gZXNjYXBlZCAmJgorCVRSRUVPSUQ9JChnaXQgLUMgZXNjYXBlZCByZXYtcGFyc2UgSEVBRDpmb2xkZXIxKSAmJgorCU5FV1RSRUU9JChnaXQgLUMgZXNjYXBlZCBta3RyZWUgPDwtRU9GCisJJChnaXQgLUMgZXNjYXBlZCBscy10cmVlIEhFQUQpCisJMDQwMDAwIHRyZWUgJFRSRUVPSUQJemJhZFxcZGlyCisJMDQwMDAwIHRyZWUgJFRSRUVPSUQJemRvZXMqZXhpc3QKKwkwNDAwMDAgdHJlZSAkVFJFRU9JRAl6Z2xvYlshYV0/CisJRU9GCisJKSAmJgorCUNPTU1JVD0kKGdpdCAtQyBlc2NhcGVkIGNvbW1pdC10cmVlICRORVdUUkVFIC1wIEhFQUQpICYmCisJZ2l0IC1DIGVzY2FwZWQgcmVzZXQgLS1oYXJkICRDT01NSVQgJiYKKwljaGVja19maWxlcyBlc2NhcGVkICJhIGRlZXAgZm9sZGVyMSBmb2xkZXIyIHpiYWRcXGRpciB6ZG9lcypleGlzdCIgemdsb2JbIWFdPyAmJgorCWdpdCAtQyBlc2NhcGVkIHNwYXJzZS1jaGVja291dCBpbml0IC0tY29uZSAmJgorCWdpdCAtQyBlc2NhcGVkIHNwYXJzZS1jaGVja291dCBzZXQgemJhZFxcZGlyL2JvZ3VzICJ6ZG9lcypub3QqZXhpc3QiICJ6ZG9lcypleGlzdCIgInpnbG9iWyFhXT8iICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCS96YmFkXFxkaXIvCisJIS96YmFkXFxkaXIvKi8KKwkvemJhZFxcZGlyL2JvZ3VzLworCS96ZG9lc1wqZXhpc3QvCisJL3pkb2VzXCpub3RcKmV4aXN0LworCS96Z2xvYlxbIWFdXD8vCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGVzY2FwZWQvLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWNoZWNrX3JlYWRfdHJlZV9lcnJvcnMgZXNjYXBlZCAiYSB6YmFkXFxkaXIgemRvZXMqZXhpc3Qgemdsb2JbIWFdPyIgJiYKKwlnaXQgLUMgZXNjYXBlZCBscy10cmVlIC1kIC0tbmFtZS1vbmx5IEhFQUQgPmxpc3QtZXhwZWN0ICYmCisJZ2l0IC1DIGVzY2FwZWQgc3BhcnNlLWNoZWNrb3V0IHNldCAtLXN0ZGluIDxsaXN0LWV4cGVjdCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkvKgorCSEvKi8KKwkvZGVlcC8KKwkvZm9sZGVyMS8KKwkvZm9sZGVyMi8KKwkvemJhZFxcZGlyLworCS96ZG9lc1wqZXhpc3QvCisJL3pnbG9iXFshYV1cPy8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgZXNjYXBlZC8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJY2hlY2tfZmlsZXMgZXNjYXBlZCAiYSBkZWVwIGZvbGRlcjEgZm9sZGVyMiB6YmFkXFxkaXIgemRvZXMqZXhpc3QiIHpnbG9iWyFhXT8gJiYKKwlnaXQgLUMgZXNjYXBlZCBzcGFyc2UtY2hlY2tvdXQgbGlzdCA+bGlzdC1hY3R1YWwgJiYKKwl0ZXN0X2NtcCBsaXN0LWV4cGVjdCBsaXN0LWFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICdjb25lIG1vZGUgcmVwbGFjZXMgYmFja3NsYXNoZXMgd2l0aCBzbGFzaGVzJyAnCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IHNldCBkZWVwXFxkZWVwZXIxICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCS9kZWVwLworCSEvZGVlcC8qLworCS9kZWVwL2RlZXBlcjEvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWNoZWNrX2ZpbGVzIHJlcG8gYSBkZWVwICYmCisJY2hlY2tfZmlsZXMgcmVwby9kZWVwIGEgZGVlcGVyMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDExMDAtY29tbWl0LXRyZWUtb3B0aW9ucy5zaCBiL3QvdDExMDAtY29tbWl0LXRyZWUtb3B0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZTY2YmE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTEwMC1jb21taXQtdHJlZS1vcHRpb25zLnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDUgUmVuZSBTY2hhcmZlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjb21taXQtdHJlZSBvcHRpb25zIHRlc3QKKworVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGdpdCBjb21taXQtdHJlZSBjYW4gY3JlYXRlIGEgc3BlY2lmaWMgY29tbWl0CitvYmplY3QgYnkgZGVmaW5pbmcgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGl0IHVuZGVyc3RhbmRzLgorCitBbHNvIG1ha2Ugc3VyZSB0aGF0IGNvbW1hbmQgbGluZSBwYXJzZXIgdW5kZXJzdGFuZHMgdGhlIG5vcm1hbAorImZsYWdzIGZpcnN0IGFuZCB0aGVuIG5vbiBmbGFnIGFyZ3VtZW50cyIgY29tbWFuZCBsaW5lLgorJworCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5leHBlY3RlZCA8PEVPRgordHJlZSAkRU1QVFlfVFJFRQorYXV0aG9yIEF1dGhvciBOYW1lIDxhdXRob3JAZW1haWw+IDExMTcxNDg0MDAgKzAwMDAKK2NvbW1pdHRlciBDb21taXR0ZXIgTmFtZSA8Y29tbWl0dGVyQGVtYWlsPiAxMTE3MTUwMjAwICswMDAwCisKK2NvbW1lbnQgdGV4dAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd0ZXN0IHByZXBhcmF0aW9uOiB3cml0ZSBlbXB0eSB0cmVlJyBcCisgICAgJ2dpdCB3cml0ZS10cmVlID50cmVlaWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjb25zdHJ1Y3QgY29tbWl0JyBcCisgICAgJ2VjaG8gY29tbWVudCB0ZXh0IHwKKyAgICAgR0lUX0FVVEhPUl9OQU1FPSJBdXRob3IgTmFtZSIgXAorICAgICBHSVRfQVVUSE9SX0VNQUlMPSJhdXRob3JAZW1haWwiIFwKKyAgICAgR0lUX0FVVEhPUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjAwIiBcCisgICAgIEdJVF9DT01NSVRURVJfTkFNRT0iQ29tbWl0dGVyIE5hbWUiIFwKKyAgICAgR0lUX0NPTU1JVFRFUl9FTUFJTD0iY29tbWl0dGVyQGVtYWlsIiBcCisgICAgIEdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzozMCIgXAorICAgICBUWj1HTVQgZ2l0IGNvbW1pdC10cmVlICQoY2F0IHRyZWVpZCkgPmNvbW1pdGlkIDI+L2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncmVhZCBjb21taXQnIFwKKyAgICAnZ2l0IGNhdC1maWxlIGNvbW1pdCAkKGNhdCBjb21taXRpZCkgPmNvbW1pdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvbXBhcmUgY29tbWl0JyBcCisgICAgJ3Rlc3RfY21wIGV4cGVjdGVkIGNvbW1pdCcKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmbGFncyBhbmQgdGhlbiBub24gZmxhZ3MnICcKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIGNvbW1lbnQgdGV4dCB8CisJZ2l0IGNvbW1pdC10cmVlICQoY2F0IHRyZWVpZCkgPmNvbW1pdGlkICYmCisJZWNobyBjb21tZW50IHRleHQgfAorCWdpdCBjb21taXQtdHJlZSAkKGNhdCB0cmVlaWQpIC1wICQoY2F0IGNvbW1pdGlkKSA+Y2hpbGRpZC0xICYmCisJZWNobyBjb21tZW50IHRleHQgfAorCWdpdCBjb21taXQtdHJlZSAtcCAkKGNhdCBjb21taXRpZCkgJChjYXQgdHJlZWlkKSA+Y2hpbGRpZC0yICYmCisJdGVzdF9jbXAgY2hpbGRpZC0xIGNoaWxkaWQtMiAmJgorCWdpdCBjb21taXQtdHJlZSAkKGNhdCB0cmVlaWQpIC1tIGZvbyA+Y2hpbGRpZC0zICYmCisJZ2l0IGNvbW1pdC10cmVlIC1tIGZvbyAkKGNhdCB0cmVlaWQpID5jaGlsZGlkLTQgJiYKKwl0ZXN0X2NtcCBjaGlsZGlkLTMgY2hpbGRpZC00CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwMC1jb25maWcuc2ggYi90L3QxMzAwLWNvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45N2ViZmUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTMwMC1jb25maWcuc2gKQEAgLTAsMCArMSwxOTE3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEpvaGFubmVzIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgY29uZmlnIGluIGRpZmZlcmVudCBzZXR0aW5ncycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFyIGRlZmF1bHQgY29uZmlnJyAnCisJcm0gLWYgLmdpdC9jb25maWcKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2NvcmVdCisJcGVuZ3VpbiA9IGxpdHRsZSBibHVlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWwnICcKKwlnaXQgY29uZmlnIGNvcmUucGVuZ3VpbiAibGl0dGxlIGJsdWUiICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tjb3JlXQorCXBlbmd1aW4gPSBsaXR0bGUgYmx1ZQorCU1vdmllID0gQmFkUGh5c2ljcworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXhlZCBjYXNlJyAnCisJZ2l0IGNvbmZpZyBDb3JlLk1vdmllIEJhZFBoeXNpY3MgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2NvcmVdCisJcGVuZ3VpbiA9IGxpdHRsZSBibHVlCisJTW92aWUgPSBCYWRQaHlzaWNzCitbQ29yZXNdCisJV2hhdEV2ZXIgPSBTZWNvbmQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltaWxhciBzZWN0aW9uJyAnCisJZ2l0IGNvbmZpZyBDb3Jlcy5XaGF0RXZlciBTZWNvbmQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2NvcmVdCisJcGVuZ3VpbiA9IGxpdHRsZSBibHVlCisJTW92aWUgPSBCYWRQaHlzaWNzCisJVVBQRVJDQVNFID0gdHJ1ZQorW0NvcmVzXQorCVdoYXRFdmVyID0gU2Vjb25kCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwcGVyY2FzZSBzZWN0aW9uJyAnCisJZ2l0IGNvbmZpZyBDT1JFLlVQUEVSQ0FTRSB0cnVlICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2Ugd2l0aCBub24tbWF0Y2gnICcKKwlnaXQgY29uZmlnIGNvcmUucGVuZ3VpbiBraW5ncGluICFibHVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2Ugd2l0aCBub24tbWF0Y2ggKGFjdHVhbGx5IG1hdGNoaW5nKScgJworCWdpdCBjb25maWcgY29yZS5wZW5ndWluICJ2ZXJ5IGJsdWUiICFraW5ncGluCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tjb3JlXQorCXBlbmd1aW4gPSB2ZXJ5IGJsdWUKKwlNb3ZpZSA9IEJhZFBoeXNpY3MKKwlVUFBFUkNBU0UgPSB0cnVlCisJcGVuZ3VpbiA9IGtpbmdwaW4KK1tDb3Jlc10KKwlXaGF0RXZlciA9IFNlY29uZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1tYXRjaCByZXN1bHQnICd0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgbWl4ZWQtY2FzZSBrZXkgYnkgY2Fub25pY2FsIG5hbWUnICcKKwl0ZXN0X2NtcF9jb25maWcgU2Vjb25kIGNvcmVzLndoYXRldmVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgbWl4ZWQtY2FzZSBrZXkgYnkgbm9uLWNhbm9uaWNhbCBuYW1lJyAnCisJdGVzdF9jbXBfY29uZmlnIFNlY29uZCBDb1JlUy5XaEF0RXZFcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJzZWN0aW9ucyBhcmUgbm90IGNhbm9uaWNhbGl6ZWQgYnkgZ2l0LWNvbmZpZycgJworCWNhdCA+Pi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwlbc2VjdGlvbi5TdWJTZWN0aW9uXQorCWtleSA9IG9uZQorCVtzZWN0aW9uICJTdWJTZWN0aW9uIl0KKwlrZXkgPSB0d28KKwlFT0YKKwl0ZXN0X2NtcF9jb25maWcgb25lIHNlY3Rpb24uc3Vic2VjdGlvbi5rZXkgJiYKKwl0ZXN0X2NtcF9jb25maWcgdHdvIHNlY3Rpb24uU3ViU2VjdGlvbi5rZXkKKycKKworY2F0ID4gLmdpdC9jb25maWcgPDxcRU9GCitbYWxwaGFdCitiYXIgPSBmb28KK1tiZXRhXQorYmF6ID0gbXVsdGlwbGUgXAorbGluZXMKK2ZvbyA9IGJhcgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc2V0IHdpdGggY29udC4gbGluZXMnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgYmV0YS5iYXoKKycKKworY2F0ID4gZXhwZWN0IDw8XEVPRgorW2FscGhhXQorYmFyID0gZm9vCitbYmV0YV0KK2ZvbyA9IGJhcgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc2V0IHdpdGggY29udC4gbGluZXMgaXMgY29ycmVjdCcgJ3Rlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZycKKworY2F0ID4gLmdpdC9jb25maWcgPDwgRU9GCitbYmV0YV0gOyBzaWxseSBjb21tZW50ICMgYW5vdGhlciBjb21tZW50Citub0luZGVudD0gc2lsbHlWYWx1ZSA7ICdub3RoZXIgc2lsbHkgY29tbWVudAorCisjIGVtcHR5IGxpbmUKKwkJOyBjb21tZW50CisJCWhhaGEgICA9ImJldGEiICMgbGFzdCBzaWxseSBjb21tZW50CitoYWhhID0gaGVsbG8KKwloYWhhID0gYmVsbG8KK1tuZXh0U2VjdGlvbl0gbm9OZXdsaW5lID0gb3VjaAorRU9GCisKK2NwIC5naXQvY29uZmlnIC5naXQvY29uZmlnMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSB1bnNldCcgJworCWdpdCBjb25maWcgLS11bnNldC1hbGwgYmV0YS5oYWhhCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKK1tuZXh0U2VjdGlvbl0gbm9OZXdsaW5lID0gb3VjaAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIHVuc2V0IGlzIGNvcnJlY3QnICcKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworY3AgLmdpdC9jb25maWcyIC5naXQvY29uZmlnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVwbGFjZS1hbGwgbWlzc2luZyB2YWx1ZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBiZXRhLmhhaGEgJiYKKwl0ZXN0X2NtcCAuZ2l0L2NvbmZpZzIgLmdpdC9jb25maWcKKycKKworcm0gLmdpdC9jb25maWcyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVwbGFjZS1hbGwnICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgYmV0YS5oYWhhIGdhbW1hCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKKwloYWhhID0gZ2FtbWEKK1tuZXh0U2VjdGlvbl0gbm9OZXdsaW5lID0gb3VjaAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbCByZXBsYWNlZCcgJworCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbYmV0YV0gOyBzaWxseSBjb21tZW50ICMgYW5vdGhlciBjb21tZW50Citub0luZGVudD0gc2lsbHlWYWx1ZSA7ICdub3RoZXIgc2lsbHkgY29tbWVudAorCisjIGVtcHR5IGxpbmUKKwkJOyBjb21tZW50CisJaGFoYSA9IGFscGhhCitbbmV4dFNlY3Rpb25dIG5vTmV3bGluZSA9IG91Y2gKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhbGx5IG1lYW4gdGVzdCcgJworCWdpdCBjb25maWcgYmV0YS5oYWhhIGFscGhhICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKKwloYWhhID0gYWxwaGEKK1tuZXh0U2VjdGlvbl0KKwlub25ld2xpbmUgPSB3b3cKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhbGx5IHJlYWxseSBtZWFuIHRlc3QnICcKKwlnaXQgY29uZmlnIG5leHRzZWN0aW9uLm5vbmV3bGluZSB3b3cgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IHZhbHVlJyAnCisJdGVzdF9jbXBfY29uZmlnIGFscGhhIGJldGEuaGFoYQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbYmV0YV0gOyBzaWxseSBjb21tZW50ICMgYW5vdGhlciBjb21tZW50Citub0luZGVudD0gc2lsbHlWYWx1ZSA7ICdub3RoZXIgc2lsbHkgY29tbWVudAorCisjIGVtcHR5IGxpbmUKKwkJOyBjb21tZW50CitbbmV4dFNlY3Rpb25dCisJbm9uZXdsaW5lID0gd293CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc2V0JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGJldGEuaGFoYSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbYmV0YV0gOyBzaWxseSBjb21tZW50ICMgYW5vdGhlciBjb21tZW50Citub0luZGVudD0gc2lsbHlWYWx1ZSA7ICdub3RoZXIgc2lsbHkgY29tbWVudAorCisjIGVtcHR5IGxpbmUKKwkJOyBjb21tZW50CitbbmV4dFNlY3Rpb25dCisJbm9uZXdsaW5lID0gd293CisJTm9OZXdMaW5lID0gd293MiBmb3IgbWUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGl2YXInICcKKwlnaXQgY29uZmlnIG5leHRzZWN0aW9uLk5vTmV3TGluZSAid293MiBmb3IgbWUiICJmb3IgbWUkIiAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tbWF0Y2gnICcKKwlnaXQgY29uZmlnIC0tZ2V0IG5leHRzZWN0aW9uLm5vbmV3bGluZSAhZm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1tYXRjaCB2YWx1ZScgJworCXRlc3RfY21wX2NvbmZpZyB3b3cgLS1nZXQgbmV4dHNlY3Rpb24ubm9uZXdsaW5lICFmb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGktdmFsdWVkIGdldCByZXR1cm5zIGZpbmFsIG9uZScgJworCXRlc3RfY21wX2NvbmZpZyAid293MiBmb3IgbWUiIC0tZ2V0IG5leHRzZWN0aW9uLm5vbmV3bGluZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aS12YWx1ZWQgZ2V0LWFsbCByZXR1cm5zIGFsbCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl3b3cKKwl3b3cyIGZvciBtZQorCUVPRgorCWdpdCBjb25maWcgLS1nZXQtYWxsIG5leHRzZWN0aW9uLm5vbmV3bGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbYmV0YV0gOyBzaWxseSBjb21tZW50ICMgYW5vdGhlciBjb21tZW50Citub0luZGVudD0gc2lsbHlWYWx1ZSA7ICdub3RoZXIgc2lsbHkgY29tbWVudAorCisjIGVtcHR5IGxpbmUKKwkJOyBjb21tZW50CitbbmV4dFNlY3Rpb25dCisJbm9uZXdsaW5lID0gd293MworCU5vTmV3TGluZSA9IHdvdzIgZm9yIG1lCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpdmFyIHJlcGxhY2UnICcKKwlnaXQgY29uZmlnIG5leHRzZWN0aW9uLm5vbmV3bGluZSAid293MyIgIndvdyQiICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtYmlndW91cyB1bnNldCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBuZXh0c2VjdGlvbi5ub25ld2xpbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCB1bnNldCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBzb21lc2VjdGlvbi5ub25ld2xpbmUKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2JldGFdIDsgc2lsbHkgY29tbWVudCAjIGFub3RoZXIgY29tbWVudAorbm9JbmRlbnQ9IHNpbGx5VmFsdWUgOyAnbm90aGVyIHNpbGx5IGNvbW1lbnQKKworIyBlbXB0eSBsaW5lCisJCTsgY29tbWVudAorW25leHRTZWN0aW9uXQorCU5vTmV3TGluZSA9IHdvdzIgZm9yIG1lCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGl2YXIgdW5zZXQnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgbmV4dHNlY3Rpb24ubm9uZXdsaW5lICJ3b3czJCIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBrZXknICd0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGludmFsLjJrZXkgYmxhYmxhJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JyZWN0IGtleScgJ2dpdCBjb25maWcgMTIzNDU2LmExMjMgOTg3JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoaWVyYXJjaGljYWwgc2VjdGlvbicgJworCWdpdCBjb25maWcgVmVyc2lvbi4xLjIuM2VYLkFscGhhIGJldGEKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2JldGFdIDsgc2lsbHkgY29tbWVudCAjIGFub3RoZXIgY29tbWVudAorbm9JbmRlbnQ9IHNpbGx5VmFsdWUgOyAnbm90aGVyIHNpbGx5IGNvbW1lbnQKKworIyBlbXB0eSBsaW5lCisJCTsgY29tbWVudAorW25leHRTZWN0aW9uXQorCU5vTmV3TGluZSA9IHdvdzIgZm9yIG1lCitbMTIzNDU2XQorCWExMjMgPSA5ODcKK1tWZXJzaW9uICIxLjIuM2VYIl0KKwlBbHBoYSA9IGJldGEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoaWVyYXJjaGljYWwgc2VjdGlvbiB2YWx1ZScgJworCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitiZXRhLm5vaW5kZW50PXNpbGx5VmFsdWUKK25leHRzZWN0aW9uLm5vbmV3bGluZT13b3cyIGZvciBtZQorMTIzNDU2LmExMjM9OTg3Cit2ZXJzaW9uLjEuMi4zZVguYWxwaGE9YmV0YQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmtpbmcgLS1saXN0JyAnCisJZ2l0IGNvbmZpZyAtLWxpc3QgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxpc3Qgd2l0aG91dCByZXBvIHByb2R1Y2VzIGVtcHR5IG91dHB1dCcgJworCWdpdCAtLWdpdC1kaXI9bm9uZXhpc3RlbnQgY29uZmlnIC0tbGlzdCA+b3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitiZXRhLm5vaW5kZW50CituZXh0c2VjdGlvbi5ub25ld2xpbmUKKzEyMzQ1Ni5hMTIzCit2ZXJzaW9uLjEuMi4zZVguYWxwaGEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5hbWUtb25seSAtLWxpc3QnICcKKwlnaXQgY29uZmlnIC0tbmFtZS1vbmx5IC0tbGlzdCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitiZXRhLm5vaW5kZW50IHNpbGx5VmFsdWUKK25leHRzZWN0aW9uLm5vbmV3bGluZSB3b3cyIGZvciBtZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ2V0LXJlZ2V4cCcgJworCWdpdCBjb25maWcgLS1nZXQtcmVnZXhwIGluID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2JldGEubm9pbmRlbnQKK25leHRzZWN0aW9uLm5vbmV3bGluZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbmFtZS1vbmx5IC0tZ2V0LXJlZ2V4cCcgJworCWdpdCBjb25maWcgLS1uYW1lLW9ubHkgLS1nZXQtcmVnZXhwIGluID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK3dvdzIgZm9yIG1lCit3b3c0IGZvciB5b3UKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFkZCcgJworCWdpdCBjb25maWcgLS1hZGQgbmV4dHNlY3Rpb24ubm9uZXdsaW5lICJ3b3c0IGZvciB5b3UiICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgbmV4dHNlY3Rpb24ubm9uZXdsaW5lID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiAuZ2l0L2NvbmZpZyA8PCBFT0YKK1tub3ZhbHVlXQorCXZhcmlhYmxlCitbZW1wdHl2YWx1ZV0KKwl2YXJpYWJsZSA9CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IHZhcmlhYmxlIHdpdGggbm8gdmFsdWUnICcKKwlnaXQgY29uZmlnIC0tZ2V0IG5vdmFsdWUudmFyaWFibGUgXiQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IHZhcmlhYmxlIHdpdGggZW1wdHkgdmFsdWUnICcKKwlnaXQgY29uZmlnIC0tZ2V0IGVtcHR5dmFsdWUudmFyaWFibGUgXiQKKycKKworZWNobyBub3ZhbHVlLnZhcmlhYmxlID4gZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldC1yZWdleHAgdmFyaWFibGUgd2l0aCBubyB2YWx1ZScgJworCWdpdCBjb25maWcgLS1nZXQtcmVnZXhwIG5vdmFsdWUgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2VjaG8gJ25vdmFsdWUudmFyaWFibGUgdHJ1ZScgPiBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0LXJlZ2V4cCAtLWJvb2wgdmFyaWFibGUgd2l0aCBubyB2YWx1ZScgJworCWdpdCBjb25maWcgLS1ib29sIC0tZ2V0LXJlZ2V4cCBub3ZhbHVlID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitlY2hvICdlbXB0eXZhbHVlLnZhcmlhYmxlICcgPiBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0LXJlZ2V4cCB2YXJpYWJsZSB3aXRoIGVtcHR5IHZhbHVlJyAnCisJZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgZW1wdHl2YWx1ZSA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworZWNobyB0cnVlID4gZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCBib29sIHZhcmlhYmxlIHdpdGggbm8gdmFsdWUnICcKKwlnaXQgY29uZmlnIC0tYm9vbCBub3ZhbHVlLnZhcmlhYmxlID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitlY2hvIGZhbHNlID4gZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCBib29sIHZhcmlhYmxlIHdpdGggZW1wdHkgdmFsdWUnICcKKwlnaXQgY29uZmlnIC0tYm9vbCBlbXB0eXZhbHVlLnZhcmlhYmxlID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBhcmd1bWVudHMsIGJ1dCBubyBjcmFzaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgPm91dHB1dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCB1c2FnZSBvdXRwdXQKKycKKworY2F0ID4gLmdpdC9jb25maWcgPDwgRU9GCitbYS5iXQorCWMgPSBkCitFT0YKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2EuYl0KKwljID0gZAorW2FdCisJeCA9IHkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgc2VjdGlvbiBpcyBwYXJ0aWFsIG1hdGNoIG9mIGFub3RoZXInICcKKwlnaXQgY29uZmlnIGEueCB5ICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1thLmJdCisJYyA9IGQKK1thXQorCXggPSB5CisJYiA9IGMKK1tiXQorCXggPSB5CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHZhcmlhYmxlIGluc2VydHMgaW50byBwcm9wZXIgc2VjdGlvbicgJworCWdpdCBjb25maWcgYi54IHkgJiYKKwlnaXQgY29uZmlnIGEuYiBjICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsdGVybmF0aXZlIC0tZmlsZSAobm9uLWV4aXN0aW5nIGZpbGUgc2hvdWxkIGZhaWwpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWZpbGUgbm9uLWV4aXN0aW5nLWNvbmZpZyAtbAorJworCitjYXQgPiBvdGhlci1jb25maWcgPDwgRU9GCitbZWluXQorCWJhaG4gPSBzdHJhc3NlCitFT0YKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorZWluLmJhaG49c3RyYXNzZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsdGVybmF0aXZlIEdJVF9DT05GSUcnICcKKwlHSVRfQ09ORklHPW90aGVyLWNvbmZpZyBnaXQgY29uZmlnIC0tbGlzdCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbHRlcm5hdGl2ZSBHSVRfQ09ORklHICgtLWZpbGUpJyAnCisJZ2l0IGNvbmZpZyAtLWZpbGUgb3RoZXItY29uZmlnIC0tbGlzdCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbHRlcm5hdGl2ZSBHSVRfQ09ORklHICgtLWZpbGU9LSknICcKKwlnaXQgY29uZmlnIC0tZmlsZSAtIC0tbGlzdCA8b3RoZXItY29uZmlnID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgYSB2YWx1ZSBpbiBzdGRpbiBpcyBhbiBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1maWxlIC0gc29tZS52YWx1ZSBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdGluZyBzdGRpbiBpcyBhbiBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1maWxlIC0gLS1lZGl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmVyIGNvbmZpZyBmcm9tIHN1YmRpcmVjdG9yeScgJworCW1rZGlyIHggJiYKKwl0ZXN0X2NtcF9jb25maWcgLUMgeCBzdHJhc3NlIC0tZ2V0IC0tZmlsZSAuLi9vdGhlci1jb25maWcgZWluLmJhaG4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmZXIgY29uZmlnIGZyb20gc3ViZGlyZWN0b3J5IHZpYSAtLWZpbGUnICcKKwl0ZXN0X2NtcF9jb25maWcgLUMgeCBzdHJhc3NlIC0tZmlsZT0uLi9vdGhlci1jb25maWcgLS1nZXQgZWluLmJhaG4KKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2Vpbl0KKwliYWhuID0gc3RyYXNzZQorW2Fud29obmVyXQorCXBhcmsgPSBhdXN3ZWlzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQgaW4gYWx0ZXJuYXRpdmUgZmlsZScgJworCWdpdCBjb25maWcgLS1maWxlPW90aGVyLWNvbmZpZyBhbndvaG5lci5wYXJrIGF1c3dlaXMgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3RoZXItY29uZmlnCisnCisKK2NhdCA+IC5naXQvY29uZmlnIDw8IEVPRgorIyBIYWxsbworCSNCZWxsbworW2JyYW5jaCAiZWlucyJdCisJeCA9IDEKK1ticmFuY2guZWluc10KKwl5ID0gMQorCVticmFuY2ggIjEgMjM0IGJsYWJsL2EiXQord2VpcmQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgc2VjdGlvbicgJworCWdpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiBicmFuY2guZWlucyBicmFuY2guendlaQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisjIEhhbGxvCisJI0JlbGxvCitbYnJhbmNoICJ6d2VpIl0KKwl4ID0gMQorW2JyYW5jaCAiendlaSJdCisJeSA9IDEKKwlbYnJhbmNoICIxIDIzNCBibGFibC9hIl0KK3dlaXJkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHN1Y2NlZWRlZCcgJworCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgbm9uLWV4aXN0aW5nIHNlY3Rpb24nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tcmVuYW1lLXNlY3Rpb24gXAorCQlicmFuY2guIndvcmxkIGRvbWluYXRpb24iIGJyYW5jaC5kcmVpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBzdWNjZWVkZWQnICcKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGFub3RoZXIgc2VjdGlvbicgJworCWdpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiBicmFuY2guIjEgMjM0IGJsYWJsL2EiIGJyYW5jaC5kcmVpCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyMgSGFsbG8KKwkjQmVsbG8KK1ticmFuY2ggInp3ZWkiXQorCXggPSAxCitbYnJhbmNoICJ6d2VpIl0KKwl5ID0gMQorW2JyYW5jaCAiZHJlaSJdCit3ZWlyZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBzdWNjZWVkZWQnICcKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworY2F0ID4+IC5naXQvY29uZmlnIDw8IEVPRgorW2JyYW5jaCAidmllciJdIHogPSAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGEgc2VjdGlvbiB3aXRoIGEgdmFyIG9uIHRoZSBzYW1lIGxpbmUnICcKKwlnaXQgY29uZmlnIC0tcmVuYW1lLXNlY3Rpb24gYnJhbmNoLnZpZXIgYnJhbmNoLnp3ZWkKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorIyBIYWxsbworCSNCZWxsbworW2JyYW5jaCAiendlaSJdCisJeCA9IDEKK1ticmFuY2ggInp3ZWkiXQorCXkgPSAxCitbYnJhbmNoICJkcmVpIl0KK3dlaXJkCitbYnJhbmNoICJ6d2VpIl0KKwl6ID0gMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBzdWNjZWVkZWQnICcKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1pbmcgZW1wdHkgc2VjdGlvbiBuYW1lIGlzIHJlamVjdGVkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIGJyYW5jaC56d2VpICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtaW5nIHRvIGJvZ3VzIHNlY3Rpb24gaXMgcmVqZWN0ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tcmVuYW1lLXNlY3Rpb24gYnJhbmNoLnp3ZWkgImJvZ3VzIG5hbWUiCisnCisKK2NhdCA+PiAuZ2l0L2NvbmZpZyA8PCBFT0YKKyAgW2JyYW5jaCAiendlaSJdIGEgPSAxIFticmFuY2ggInZpZXIiXQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBzZWN0aW9uJyAnCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIGJyYW5jaC56d2VpCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyMgSGFsbG8KKwkjQmVsbG8KK1ticmFuY2ggImRyZWkiXQord2VpcmQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWN0aW9uIHdhcyByZW1vdmVkIHByb3Blcmx5JyAnCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tnaXRjdnNdCisJZW5hYmxlZCA9IHRydWUKKwlkYm5hbWUgPSAlR2dpdGN2czIuJWEuJW0uc3FsaXRlCitbZ2l0Y3ZzICJleHQiXQorCWRibmFtZSA9ICVHZ2l0Y3ZzMS4lYS4lbS5zcWxpdGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWN0aW9uIGVuZGluZycgJworCXJtIC1mIC5naXQvY29uZmlnICYmCisJZ2l0IGNvbmZpZyBnaXRjdnMuZW5hYmxlZCB0cnVlICYmCisJZ2l0IGNvbmZpZyBnaXRjdnMuZXh0LmRibmFtZSAlR2dpdGN2czEuJWEuJW0uc3FsaXRlICYmCisJZ2l0IGNvbmZpZyBnaXRjdnMuZGJuYW1lICVHZ2l0Y3ZzMi4lYS4lbS5zcWxpdGUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIG51bWJlcnMgJworCWdpdCBjb25maWcga2lsby5ncmFtIDFrICYmCisJZ2l0IGNvbmZpZyBtZWdhLnRvbiAxbSAmJgorCWVjaG8gMTAyNCA+ZXhwZWN0ICYmCisJZWNobyAxMDQ4NTc2ID4+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWludCAtLWdldCBraWxvLmdyYW0gPmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1pbnQgLS1nZXQgbWVnYS50b24gPj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taW50IGlzIGF0IGxlYXN0IDY0IGJpdHMnICcKKwlnaXQgY29uZmlnIGdpZ2Eud2F0dHMgMTIxZyAmJgorCWVjaG8gID5leHBlY3QgJiYKKwl0ZXN0X2NtcF9jb25maWcgMTI5OTIyNzYwNzA0IC0taW50IC0tZ2V0IGdpZ2Eud2F0dHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCB1bml0JyAnCisJZ2l0IGNvbmZpZyBhbmludmFsaWQudW5pdCAiMWF1dG8iICYmCisJdGVzdF9jbXBfY29uZmlnIDFhdXRvIGFuaW52YWxpZC51bml0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWludCAtLWdldCBhbmludmFsaWQudW5pdCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAuMWF1dG8uIGZvciAuYW5pbnZhbGlkLnVuaXQuIGluIGZpbGUgLmdpdC9jb25maWc6IGludmFsaWQgdW5pdCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpbmUgbnVtYmVyIGlzIHJlcG9ydGVkIGNvcnJlY3RseScgJworCXByaW50ZiAiW2Jvb2xdXG5cdHZhclxuIiA+aW52YWxpZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgaW52YWxpZCAtLXBhdGggYm9vbC52YXIgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJsaW5lIDIiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIHN0ZGluIGNvbmZpZycgJworCWVjaG8gIlticm9rZW4iIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWxpc3QgLS1maWxlIC0gPm91dHB1dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAiYmFkIGNvbmZpZyBsaW5lIDEgaW4gc3RhbmRhcmQgaW5wdXQiIG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCit0cnVlCitmYWxzZQordHJ1ZQorZmFsc2UKK3RydWUKK2ZhbHNlCit0cnVlCitmYWxzZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgYm9vbCAnCisKKwlnaXQgY29uZmlnIGJvb2wudHJ1ZTEgMDEgJiYKKwlnaXQgY29uZmlnIGJvb2wudHJ1ZTIgLTEgJiYKKwlnaXQgY29uZmlnIGJvb2wudHJ1ZTMgWWVTICYmCisJZ2l0IGNvbmZpZyBib29sLnRydWU0IHRydWUgJiYKKwlnaXQgY29uZmlnIGJvb2wuZmFsc2UxIDAwMCAmJgorCWdpdCBjb25maWcgYm9vbC5mYWxzZTIgIiIgJiYKKwlnaXQgY29uZmlnIGJvb2wuZmFsc2UzIG5PICYmCisJZ2l0IGNvbmZpZyBib29sLmZhbHNlNCBGQUxTRSAmJgorCXJtIC1mIHJlc3VsdCAmJgorCWZvciBpIGluIDEgMiAzIDQKKwlkbworCSAgICBnaXQgY29uZmlnIC0tYm9vbCAtLWdldCBib29sLnRydWUkaSA+PnJlc3VsdAorCSAgICBnaXQgY29uZmlnIC0tYm9vbCAtLWdldCBib29sLmZhbHNlJGkgPj5yZXN1bHQKKwlkb25lICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlc3VsdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBib29sICgtLWdldCknICcKKworCWdpdCBjb25maWcgYm9vbC5ub2Jvb2wgZm9vYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQgYm9vbC5ub2Jvb2wnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgYm9vbCAoc2V0KScgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJvb2wgYm9vbC5ub2Jvb2wgZm9vYmFyJworCitjYXQgPiBleHBlY3QgPDxcRU9GCitbYm9vbF0KKwl0cnVlMSA9IHRydWUKKwl0cnVlMiA9IHRydWUKKwl0cnVlMyA9IHRydWUKKwl0cnVlNCA9IHRydWUKKwlmYWxzZTEgPSBmYWxzZQorCWZhbHNlMiA9IGZhbHNlCisJZmFsc2UzID0gZmFsc2UKKwlmYWxzZTQgPSBmYWxzZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCAtLWJvb2wnICcKKworCXJtIC1mIC5naXQvY29uZmlnICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgYm9vbC50cnVlMSAwMSAmJgorCWdpdCBjb25maWcgLS1ib29sIGJvb2wudHJ1ZTIgLTEgJiYKKwlnaXQgY29uZmlnIC0tYm9vbCBib29sLnRydWUzIFllUyAmJgorCWdpdCBjb25maWcgLS1ib29sIGJvb2wudHJ1ZTQgdHJ1ZSAmJgorCWdpdCBjb25maWcgLS1ib29sIGJvb2wuZmFsc2UxIDAwMCAmJgorCWdpdCBjb25maWcgLS1ib29sIGJvb2wuZmFsc2UyICIiICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgYm9vbC5mYWxzZTMgbk8gJiYKKwlnaXQgY29uZmlnIC0tYm9vbCBib29sLmZhbHNlNCBGQUxTRSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZycKKworY2F0ID4gZXhwZWN0IDw8XEVPRgorW2ludF0KKwl2YWwxID0gMQorCXZhbDIgPSAtMQorCXZhbDMgPSA1MjQyODgwCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IC0taW50JyAnCisKKwlybSAtZiAuZ2l0L2NvbmZpZyAmJgorCWdpdCBjb25maWcgLS1pbnQgaW50LnZhbDEgMDEgJiYKKwlnaXQgY29uZmlnIC0taW50IGludC52YWwyIC0xICYmCisJZ2l0IGNvbmZpZyAtLWludCBpbnQudmFsMyA1bSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgLS1ib29sLW9yLWludCcgJworCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtib29sXQorCXRydWUxCisJdHJ1ZTIgPSB0cnVlCisJZmFsc2UgPSBmYWxzZQorCVtpbnRdCisJaW50MSA9IDAKKwlpbnQyID0gMQorCWludDMgPSAtMQorCUVPRgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl0cnVlCisJdHJ1ZQorCWZhbHNlCisJMAorCTEKKwktMQorCUVPRgorCXsKKwkJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGJvb2wudHJ1ZTEgJiYKKwkJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGJvb2wudHJ1ZTIgJiYKKwkJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGJvb2wuZmFsc2UgJiYKKwkJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGludC5pbnQxICYmCisJCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBpbnQuaW50MiAmJgorCQlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDMKKwl9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorW2Jvb2xdCisJdHJ1ZTEgPSB0cnVlCisJZmFsc2UxID0gZmFsc2UKKwl0cnVlMiA9IHRydWUKKwlmYWxzZTIgPSBmYWxzZQorW2ludF0KKwlpbnQxID0gMAorCWludDIgPSAxCisJaW50MyA9IC0xCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IC0tYm9vbC1vci1pbnQnICcKKwlybSAtZiAuZ2l0L2NvbmZpZyAmJgorCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBib29sLnRydWUxIHRydWUgJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC5mYWxzZTEgZmFsc2UgJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC50cnVlMiB5ZXMgJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC5mYWxzZTIgbm8gJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDEgMCAmJgorCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBpbnQuaW50MiAxICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGludC5pbnQzIC0xICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorW3BhdGhdCisJaG9tZSA9IH4vCisJbm9ybWFsID0gL2Rldi9udWxsCisJdHJhaWxpbmd0aWxkZSA9IGZvb34KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnc2V0IC0tcGF0aCcgJworCXJtIC1mIC5naXQvY29uZmlnICYmCisJZ2l0IGNvbmZpZyAtLXBhdGggcGF0aC5ob21lICJ+LyIgJiYKKwlnaXQgY29uZmlnIC0tcGF0aCBwYXRoLm5vcm1hbCAiL2Rldi9udWxsIiAmJgorCWdpdCBjb25maWcgLS1wYXRoIHBhdGgudHJhaWxpbmd0aWxkZSAiZm9vfiIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcnCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXICYmIHRlc3QgIiR7SE9NRStzZXR9IgordGhlbgorCXRlc3Rfc2V0X3ByZXJlcSBIT01FVkFSCitmaQorCitjYXQgPmV4cGVjdCA8PEVPRgorJEhPTUUvCisvZGV2L251bGwKK2Zvb34KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEhPTUVWQVIgJ2dldCAtLXBhdGgnICcKKwlnaXQgY29uZmlnIC0tZ2V0IC0tcGF0aCBwYXRoLmhvbWUgPiByZXN1bHQgJiYKKwlnaXQgY29uZmlnIC0tZ2V0IC0tcGF0aCBwYXRoLm5vcm1hbCA+PiByZXN1bHQgJiYKKwlnaXQgY29uZmlnIC0tZ2V0IC0tcGF0aCBwYXRoLnRyYWlsaW5ndGlsZGUgPj4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlc3VsdAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKy9kZXYvbnVsbAorZm9vfgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdnZXQgLS1wYXRoIGNvcGVzIHdpdGggdW5zZXQgJEhPTUUnICcKKwkoCisJCXNhbmVfdW5zZXQgSE9NRSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0IC0tcGF0aCBwYXRoLmhvbWUgXAorCQkJPnJlc3VsdCAyPm1zZyAmJgorCQlnaXQgY29uZmlnIC0tZ2V0IC0tcGF0aCBwYXRoLm5vcm1hbCA+PnJlc3VsdCAmJgorCQlnaXQgY29uZmlnIC0tZ2V0IC0tcGF0aCBwYXRoLnRyYWlsaW5ndGlsZGUgPj5yZXN1bHQKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiW0ZmXWFpbGVkIHRvIGV4cGFuZC4qfi8iIG1zZyAmJgorCXRlc3RfY21wIGV4cGVjdCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IC0tcGF0aCBiYXJmcyBvbiBib29sZWFuIHZhcmlhYmxlJyAnCisJZWNobyAiW3BhdGhdYm9vbCIgPi5naXQvY29uZmlnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdldCAtLXBhdGggcGF0aC5ib29sCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAtLWV4cGlyeS1kYXRlJyAnCisJcmVsPSIzLndlZWtzLjUuZGF5cy4wMDowMCIgJiYKKwlyZWxfb3V0PSIkcmVsIC0+IiAmJgorCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtkYXRlXQorCXZhbGlkMSA9ICIzLndlZWtzLjUuZGF5cyAwMDowMCIKKwl2YWxpZDIgPSAiRnJpIEp1biA0IDE1OjQ2OjU1IDIwMTAiCisJdmFsaWQzID0gIjIwMTcvMTEvMTEgMTE6MTE6MTFQTSIKKwl2YWxpZDQgPSAiMjAxNy8xMS8xMCAwOTowODowNyBQTSIKKwl2YWxpZDUgPSAibmV2ZXIiCisJaW52YWxpZDEgPSAiYWJjIgorCUVPRgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSQodGVzdC10b29sIGRhdGUgdGltZXN0YW1wICRyZWwpCisJMTI3NTY2NjQxNQorCTE1MTA0NDE4NzEKKwkxNTEwMzQ4MDg3CisJMAorCUVPRgorCTogIndvcmsgYXJvdW5kIGhlcmVkb2MgcGFyc2luZyBidWcgZml4ZWQgaW4gZGFzaCAwLjUuNyAoaW4gZWMyYzg0ZCkiICYmCisJeworCQllY2hvICIkcmVsX291dCAkKGdpdCBjb25maWcgLS1leHBpcnktZGF0ZSBkYXRlLnZhbGlkMSkiCisJCWdpdCBjb25maWcgLS1leHBpcnktZGF0ZSBkYXRlLnZhbGlkMiAmJgorCQlnaXQgY29uZmlnIC0tZXhwaXJ5LWRhdGUgZGF0ZS52YWxpZDMgJiYKKwkJZ2l0IGNvbmZpZyAtLWV4cGlyeS1kYXRlIGRhdGUudmFsaWQ0ICYmCisJCWdpdCBjb25maWcgLS1leHBpcnktZGF0ZSBkYXRlLnZhbGlkNQorCX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZXhwaXJ5LWRhdGUgZGF0ZS5pbnZhbGlkMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgLS10eXBlPWNvbG9yJyAnCisJcm0gLmdpdC9jb25maWcgJiYKKwlnaXQgY29uZmlnIGZvby5jb2xvciAicmVkIiAmJgorCWdpdCBjb25maWcgLS1nZXQgLS10eXBlPWNvbG9yIGZvby5jb2xvciA+YWN0dWFsLnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwllY2hvICI8UkVEPiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwgRU9GCitbZm9vXQorCWNvbG9yID0gcmVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IC0tdHlwZT1jb2xvcicgJworCXJtIC5naXQvY29uZmlnICYmCisJZ2l0IGNvbmZpZyAtLXR5cGU9Y29sb3IgZm9vLmNvbG9yICJyZWQiICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAtLXR5cGU9Y29sb3IgYmFyZnMgb24gbm9uLWNvbG9yJyAnCisJZWNobyAiW2Zvb11iYXI9bm90LWEtY29sb3IiID4uZ2l0L2NvbmZpZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQgLS10eXBlPWNvbG9yIGZvby5iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IC0tdHlwZT1jb2xvciBiYXJmcyBvbiBub24tY29sb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tdHlwZT1jb2xvciBmb28uY29sb3IgIm5vdC1hLWNvbG9yIiAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiY2Fubm90IHBhcnNlIGNvbG9yIiBlcnJvcgorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbcXVvdGVdCisJbGVhZGluZyA9ICIgdGVzdCIKKwllbmRpbmcgPSAidGVzdCAiCisJc2VtaWNvbG9uID0gInRlc3Q7dGVzdCIKKwloYXNoID0gInRlc3QjdGVzdCIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGluZycgJworCXJtIC1mIC5naXQvY29uZmlnICYmCisJZ2l0IGNvbmZpZyBxdW90ZS5sZWFkaW5nICIgdGVzdCIgJiYKKwlnaXQgY29uZmlnIHF1b3RlLmVuZGluZyAidGVzdCAiICYmCisJZ2l0IGNvbmZpZyBxdW90ZS5zZW1pY29sb24gInRlc3Q7dGVzdCIgJiYKKwlnaXQgY29uZmlnIHF1b3RlLmhhc2ggInRlc3QjdGVzdCIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2V5IHdpdGggbmV3bGluZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgImtleS53aXRoCituZXdsaW5lIiAxMjMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbHVlIHdpdGggbmV3bGluZScgJ2dpdCBjb25maWcga2V5LnN1YiB2YWx1ZS53aXRoXFxcCituZXdsaW5lJworCitjYXQgPiAuZ2l0L2NvbmZpZyA8PFxFT0YKK1tzZWN0aW9uXQorCTsgY29tbWVudCBcCisJY29udGludWVkID0gY29udFwKK2ludWVkCisJbm9uY29udCAgID0gbm90IGNvbnRpbnVlZCA7IFwKKwlxdW90ZWNvbnQgPSAiY29udDtcCitpbnVlZCIKK0VPRgorCitjYXQgPiBleHBlY3QgPDxcRU9GCitzZWN0aW9uLmNvbnRpbnVlZD1jb250aW51ZWQKK3NlY3Rpb24ubm9uY29udD1ub3QgY29udGludWVkCitzZWN0aW9uLnF1b3RlY29udD1jb250O2ludWVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsdWUgY29udGludWVkIG9uIG5leHQgbGluZScgJworCWdpdCBjb25maWcgLS1saXN0ID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlc3VsdAorJworCitjYXQgPiAuZ2l0L2NvbmZpZyA8PFxFT0YKK1tzZWN0aW9uICJzdWI9c2VjdGlvbiJdCisJdmFsMSA9IGZvbz1iYXIKKwl2YWwyID0gZm9vXG5iYXIKKwl2YWwzID0gXG5cbgorCXZhbDQgPQorCXZhbDUKK0VPRgorCitjYXQgPiBleHBlY3QgPDxcRU9GCitzZWN0aW9uLnN1Yj1zZWN0aW9uLnZhbDEKK2Zvbz1iYXJRc2VjdGlvbi5zdWI9c2VjdGlvbi52YWwyCitmb28KK2JhclFzZWN0aW9uLnN1Yj1zZWN0aW9uLnZhbDMKKworCitRc2VjdGlvbi5zdWI9c2VjdGlvbi52YWw0CitRc2VjdGlvbi5zdWI9c2VjdGlvbi52YWw1UQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW51bGwgLS1saXN0JyAnCisJZ2l0IGNvbmZpZyAtLW51bGwgLS1saXN0ID5yZXN1bHQucmF3ICYmCisJbnVsX3RvX3EgPHJlc3VsdC5yYXcgPnJlc3VsdCAmJgorCWVjaG8gPj5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbnVsbCAtLWdldC1yZWdleHAnICcKKwlnaXQgY29uZmlnIC0tbnVsbCAtLWdldC1yZWdleHAgInZhbFswLTldIiA+cmVzdWx0LnJhdyAmJgorCW51bF90b19xIDxyZXN1bHQucmF3ID5yZXN1bHQgJiYKKwllY2hvID4+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbm5lciB3aGl0ZXNwYWNlIGtlcHQgdmVyYmF0aW0nICcKKwlnaXQgY29uZmlnIHNlY3Rpb24udmFsICJmb28gCSAgYmFyIiAmJgorCXRlc3RfY21wX2NvbmZpZyAiZm9vIAkgIGJhciIgc2VjdGlvbi52YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3ltbGlua2VkIGNvbmZpZ3VyYXRpb24nICcKKwlsbiAtcyBub3R5ZXQgbXljb25maWcgJiYKKwlnaXQgY29uZmlnIC0tZmlsZT1teWNvbmZpZyB0ZXN0LmZyb3R6IG5pdGZvbCAmJgorCXRlc3QgLWggbXljb25maWcgJiYKKwl0ZXN0IC1mIG5vdHlldCAmJgorCXRlc3QgInokKGdpdCBjb25maWcgLS1maWxlPW5vdHlldCB0ZXN0LmZyb3R6KSIgPSB6bml0Zm9sICYmCisJZ2l0IGNvbmZpZyAtLWZpbGU9bXljb25maWcgdGVzdC54eXp6eSByZXpyb3YgJiYKKwl0ZXN0IC1oIG15Y29uZmlnICYmCisJdGVzdCAtZiBub3R5ZXQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbml0Zm9sCisJcmV6cm92CisJRU9GCisJeworCQlnaXQgY29uZmlnIC0tZmlsZT1ub3R5ZXQgdGVzdC5mcm90eiAmJgorCQlnaXQgY29uZmlnIC0tZmlsZT1ub3R5ZXQgdGVzdC54eXp6eQorCX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uZXhpc3RlbnQgY29uZmlndXJhdGlvbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1maWxlPWRvZXNub3RleGlzdCAtLWxpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZmlsZT1kb2Vzbm90ZXhpc3QgdGVzdC54eXp6eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rIHRvIG5vbmV4aXN0ZW50IGNvbmZpZ3VyYXRpb24nICcKKwlsbiAtcyBkb2Vzbm90ZXhpc3QgbGlua3RvbmFkYSAmJgorCWxuIC1zIGxpbmt0b25hZGEgbGlua3RvbGlua3RvbmFkYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1maWxlPWxpbmt0b25hZGEgLS1saXN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWZpbGU9bGlua3RvbGlua3RvbmFkYSAtLWxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BsaXRfY21kbGluZSByZXR1cm4nICIKKwlnaXQgY29uZmlnIGFsaWFzLnNwbGl0LWNtZGxpbmUtZml4ICdlY2hvIFwiJyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzcGxpdC1jbWRsaW5lLWZpeCAmJgorCWVjaG8gZm9vID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICdpbml0aWFsIGNvbW1pdCcgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICdlY2hvIFwiJyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1jICJrZXk9dmFsdWUiIHN1cHBvcnQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJdmFsdWUKKwl2YWx1ZQorCXRydWUKKwlFT0YKKwl7CisJCWdpdCAtYyBjb3JlLm5hbWU9dmFsdWUgY29uZmlnIGNvcmUubmFtZSAmJgorCQlnaXQgLWMgZm9vLkNhbWVsQ2FzZT12YWx1ZSBjb25maWcgZm9vLmNhbWVsY2FzZSAmJgorCQlnaXQgLWMgZm9vLmZsYWcgY29uZmlnIC0tYm9vbCBmb28uZmxhZworCX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbmFtZT12YWx1ZSBjb25maWcgY29yZS5uYW1lCisnCisKKyMgV2UganVzdCBuZWVkIGEgdHlwZS1zcGVjaWZpZXIgaGVyZSB0aGF0IGNhcmVzIGFib3V0IHRoZQorIyBkaXN0aW5jdGlvbiBpbnRlcm5hbGx5IGJldHdlZW4gYSBOVUxMIGJvb2xlYW4gYW5kIGEgcmVhbAorIyBzdHJpbmcgKGJlY2F1c2UgbW9zdCBvZiBnaXQncyBpbnRlcm5hbCBwYXJzZXJzIGRvIGNhcmUpLgorIyBVc2luZyAiLS1wYXRoIiB3b3JrcywgYnV0IHdlIGRvIG5vdCBvdGhlcndpc2UgY2FyZSBhYm91dAorIyBpdHMgc2VtYW50aWNzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1jIGNhbiByZXByZXNlbnQgZW1wdHkgc3RyaW5nJyAnCisJZWNobyA+ZXhwZWN0ICYmCisJZ2l0IC1jIGZvby5lbXB0eT0gY29uZmlnIC0tcGF0aCBmb28uZW1wdHkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2V5IHNhbml0eS1jaGVja2luZycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgZm9vPWJhciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgZm9vPS5iYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGZvby5iYT1yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBmb28uMWJhciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgZm9vLiJiYQorCQkJCXoiLmJhciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLiBmYWxzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLmZvbyBmYWxzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgZm9vLiBmYWxzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLmZvby4gZmFsc2UgJiYKKwlnaXQgY29uZmlnIGZvby5iYXIgdHJ1ZSAmJgorCWdpdCBjb25maWcgZm9vLiJiYSA9eiIuYmFyIGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtYyB3b3JrcyB3aXRoIGFsaWFzZXMgb2YgYnVpbHRpbnMnICcKKwlnaXQgY29uZmlnIGFsaWFzLmNoZWNrY29uZmlnICItYyBmb28uY2hlY2s9YmFyIGNvbmZpZyBmb28uY2hlY2siICYmCisJZWNobyBiYXIgPmV4cGVjdCAmJgorCWdpdCBjaGVja2NvbmZpZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhc2VzIGNhbiBiZSBDYW1lbENhc2VkJyAnCisJdGVzdF9jb25maWcgYWxpYXMuQ2FtZWxDYXNlZCAicmV2LXBhcnNlIEhFQUQiICYmCisJZ2l0IENhbWVsQ2FzZWQgPm91dCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWMgZG9lcyBub3Qgc3BsaXQgdmFsdWVzIG9uIGVxdWFscycgJworCWVjaG8gInZhbHVlIHdpdGggPSBpbiBpdCIgPmV4cGVjdCAmJgorCWdpdCAtYyBjb3JlLmZvbz0idmFsdWUgd2l0aCA9IGluIGl0IiBjb25maWcgY29yZS5mb28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1jIGRpZXMgb24gYm9ndXMgY29uZmlnJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGNvcmUuYmFyZT1mb28gcmV2LXBhcnNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtYyBjb21wbGFpbnMgYWJvdXQgZW1wdHkga2V5JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jICI9Zm9vIiByZXYtcGFyc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1jIGNvbXBsYWlucyBhYm91dCBlbXB0eSBrZXkgYW5kIHZhbHVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jICIiIHJldi1wYXJzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBnaXQgLWMgYXBwZW5kcyBjb25maWcnICcKKwl0ZXN0X2NvbmZpZyBhbGlhcy54ICIhZ2l0IC1jIHgudHdvPTIgY29uZmlnIC0tZ2V0LXJlZ2V4cCBeeFwuKiIgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJeC5vbmUgMQorCXgudHdvIDIKKwlFT0YKKwlnaXQgLWMgeC5vbmU9MSB4ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhc3Qgb25lIHdpbnM6IHR3byBsZXZlbCB2YXJzJyAnCisKKwkjIHNlYy52YXIgYW5kIHNlYy5WQVIgYXJlIHRoZSBzYW1lIHZhcmlhYmxlLCBhcyB0aGUgZmlyc3QKKwkjIGFuZCB0aGUgbGFzdCBsZXZlbCBvZiBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZSBpcworCSMgY2FzZSBpbnNlbnNpdGl2ZS4KKworCWVjaG8gVkFMID5leHBlY3QgJiYKKworCWdpdCAtYyBzZWMudmFyPXZhbCAtYyBzZWMuVkFSPVZBTCBjb25maWcgLS1nZXQgc2VjLnZhciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCAtYyBTRUMudmFyPXZhbCAtYyBzZWMudmFyPVZBTCBjb25maWcgLS1nZXQgc2VjLnZhciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IC1jIHNlYy52YXI9dmFsIC1jIHNlYy5WQVI9VkFMIGNvbmZpZyAtLWdldCBTRUMudmFyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IC1jIFNFQy52YXI9dmFsIC1jIHNlYy52YXI9VkFMIGNvbmZpZyAtLWdldCBzZWMuVkFSID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhc3Qgb25lIHdpbnM6IHRocmVlIGxldmVsIHZhcnMnICcKKworCSMgdi5hLnIgYW5kIHYuQS5yIGFyZSBub3QgdGhlIHNhbWUgdmFyaWFibGUsIGFzIHRoZSBtaWRkbGUKKwkjIGxldmVsIG9mIGEgdGhyZWUtbGV2ZWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1lIGlzCisJIyBjYXNlIHNlbnNpdGl2ZS4KKworCWVjaG8gdmFsID5leHBlY3QgJiYKKwlnaXQgLWMgdi5hLnI9dmFsIC1jIHYuQS5yPVZBTCBjb25maWcgLS1nZXQgdi5hLnIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgLWMgdi5hLnI9dmFsIC1jIHYuQS5yPVZBTCBjb25maWcgLS1nZXQgVi5hLlIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgdi5hLnIgYW5kIFYuYS5SIGFyZSB0aGUgc2FtZSB2YXJpYWJsZSwgYXMgdGhlIGZpcnN0CisJIyBhbmQgdGhlIGxhc3QgbGV2ZWwgb2YgYSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWUgaXMKKwkjIGNhc2UgaW5zZW5zaXRpdmUuCisKKwllY2hvIFZBTCA+ZXhwZWN0ICYmCisJZ2l0IC1jIHYuYS5yPXZhbCAtYyB2LmEuUj1WQUwgY29uZmlnIC0tZ2V0IHYuYS5yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IC1jIHYuYS5yPXZhbCAtYyBWLmEucj1WQUwgY29uZmlnIC0tZ2V0IHYuYS5yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IC1jIHYuYS5yPXZhbCAtYyB2LmEuUj1WQUwgY29uZmlnIC0tZ2V0IFYuYS5SID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IC1jIHYuYS5yPXZhbCAtYyBWLmEucj1WQUwgY29uZmlnIC0tZ2V0IFYuYS5SID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29sZC1mYXNoaW9uZWQgc2V0dGluZ3MgYXJlIGNhc2UgaW5zZW5zaXRpdmUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIHRlc3RDb25maWcgdGVzdENvbmZpZ19leHBlY3QgdGVzdENvbmZpZ19hY3R1YWwiICYmCisKKwljYXQgPnRlc3RDb25maWdfYWN0dWFsIDw8LUVPRiAmJgorCVtWLkFdCisJciA9IHZhbHVlMQorCUVPRgorCXFfdG9fdGFiID50ZXN0Q29uZmlnX2V4cGVjdCA8PC1FT0YgJiYKKwlbVi5BXQorCVFyID0gdmFsdWUyCisJRU9GCisJZ2l0IGNvbmZpZyAtZiB0ZXN0Q29uZmlnX2FjdHVhbCAidi5hLnIiIHZhbHVlMiAmJgorCXRlc3RfY21wIHRlc3RDb25maWdfZXhwZWN0IHRlc3RDb25maWdfYWN0dWFsICYmCisKKwljYXQgPnRlc3RDb25maWdfYWN0dWFsIDw8LUVPRiAmJgorCVtWLkFdCisJciA9IHZhbHVlMQorCUVPRgorCXFfdG9fdGFiID50ZXN0Q29uZmlnX2V4cGVjdCA8PC1FT0YgJiYKKwlbVi5BXQorCVFSID0gdmFsdWUyCisJRU9GCisJZ2l0IGNvbmZpZyAtZiB0ZXN0Q29uZmlnX2FjdHVhbCAiVi5hLlIiIHZhbHVlMiAmJgorCXRlc3RfY21wIHRlc3RDb25maWdfZXhwZWN0IHRlc3RDb25maWdfYWN0dWFsICYmCisKKwljYXQgPnRlc3RDb25maWdfYWN0dWFsIDw8LUVPRiAmJgorCVtWLkFdCisJciA9IHZhbHVlMQorCUVPRgorCXFfdG9fdGFiID50ZXN0Q29uZmlnX2V4cGVjdCA8PC1FT0YgJiYKKwlbVi5BXQorCXIgPSB2YWx1ZTEKKwlRciA9IHZhbHVlMgorCUVPRgorCWdpdCBjb25maWcgLWYgdGVzdENvbmZpZ19hY3R1YWwgIlYuQS5yIiB2YWx1ZTIgJiYKKwl0ZXN0X2NtcCB0ZXN0Q29uZmlnX2V4cGVjdCB0ZXN0Q29uZmlnX2FjdHVhbCAmJgorCisJY2F0ID50ZXN0Q29uZmlnX2FjdHVhbCA8PC1FT0YgJiYKKwlbVi5BXQorCXIgPSB2YWx1ZTEKKwlFT0YKKwlxX3RvX3RhYiA+dGVzdENvbmZpZ19leHBlY3QgPDwtRU9GICYmCisJW1YuQV0KKwlyID0gdmFsdWUxCisJUXIgPSB2YWx1ZTIKKwlFT0YKKwlnaXQgY29uZmlnIC1mIHRlc3RDb25maWdfYWN0dWFsICJ2LkEuciIgdmFsdWUyICYmCisJdGVzdF9jbXAgdGVzdENvbmZpZ19leHBlY3QgdGVzdENvbmZpZ19hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dGluZyBkaWZmZXJlbnQgY2FzZSBzZW5zaXRpdmUgc3Vic2VjdGlvbnMgJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiB0ZXN0Q29uZmlnIHRlc3RDb25maWdfZXhwZWN0IHRlc3RDb25maWdfYWN0dWFsIiAmJgorCisJY2F0ID50ZXN0Q29uZmlnX2FjdHVhbCA8PC1FT0YgJiYKKwlbViAiQSJdCisJUiA9IHYxCisJW0sgIkUiXQorCVkgPSB2MQorCVthICJiIl0KKwljID0gdjEKKwlbZCAiZSJdCisJZiA9IHYxCisJRU9GCisJcV90b190YWIgPnRlc3RDb25maWdfZXhwZWN0IDw8LUVPRiAmJgorCVtWICJBIl0KKwlRciA9IHYyCisJW0sgIkUiXQorCVF5ID0gdjIKKwlbYSAiYiJdCisJUWMgPSB2MgorCVtkICJlIl0KKwlmID0gdjEKKwlbZCAiRSJdCisJUWYgPSB2MgorCUVPRgorCSMgZXhhY3QgbWF0Y2gKKwlnaXQgY29uZmlnIC1mIHRlc3RDb25maWdfYWN0dWFsIGEuYi5jIHYyICYmCisJIyBtYXRjaCBzZWN0aW9uIGFuZCBzdWJzZWN0aW9uLCBrZXkgaXMgY2FzZWQgZGlmZmVyZW50bHkuCisJZ2l0IGNvbmZpZyAtZiB0ZXN0Q29uZmlnX2FjdHVhbCBLLkUueSB2MiAmJgorCSMgc2VjdGlvbiBhbmQga2V5IGFyZSBtYXRjaGVkIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBzdWJzZWN0aW9uIG5lZWRzCisJIyB0byBtYXRjaDsgV2hlbiB3cml0aW5nIG91dCBuZXcgdmFsdWVzIG9ubHkgdGhlIGtleSBpcyBhZGp1c3RlZAorCWdpdCBjb25maWcgLWYgdGVzdENvbmZpZ19hY3R1YWwgdi5BLnIgdjIgJiYKKwkjIHN1YnNlY3Rpb24gaXMgbm90IG1hdGNoZWQ6CisJZ2l0IGNvbmZpZyAtZiB0ZXN0Q29uZmlnX2FjdHVhbCBkLkUuZiB2MiAmJgorCXRlc3RfY21wIHRlc3RDb25maWdfZXhwZWN0IHRlc3RDb25maWdfYWN0dWFsCisnCisKK2ZvciBWQVIgaW4gYSAuYSBhLiBhLjBiIGEuImIgYyIuIGEuImIgYyIuMGQKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ2l0IC1jICRWQVI9VkFMIHJlamVjdHMgaW52YWxpZCAnJFZBUiciICcKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jICIkVkFSPVZBTCIgY29uZmlnIC1sCisJJworZG9uZQorCitmb3IgVkFSIGluIGEuYiBhLiJiIGMiLmQKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ2l0IC1jICRWQVI9VkFMIHdvcmtzIHdpdGggdmFsaWQgJyRWQVInIiAnCisJCWVjaG8gVkFMID5leHBlY3QgJiYKKwkJZ2l0IC1jICIkVkFSPVZBTCIgY29uZmlnIC0tZ2V0ICIkVkFSIiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtYyBpcyBub3QgY29uZnVzZWQgYnkgZW1wdHkgZW52aXJvbm1lbnQnICcKKwlHSVRfQ09ORklHX1BBUkFNRVRFUlM9IiIgZ2l0IC1jIHgub25lPTEgY29uZmlnIC0tbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgYm9ndXMgR0lUX0NPTkZJR19QQVJBTUVURVJTJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWVudi5vbmUgb25lCisJZW52LnR3byB0d28KKwlFT0YKKwlHSVRfQ09ORklHX1BBUkFNRVRFUlM9IiR7U1F9ZW52Lm9uZT1vbmUke1NRfSAke1NRfWVudi50d289dHdvJHtTUX0iIFwKKwkJZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgImVudi4qIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZW52Lm9uZSBvbmUke1NRfQorCWVudi50d28gdHdvCisJRU9GCisJR0lUX0NPTkZJR19QQVJBTUVURVJTPSIke1NRfWVudi5vbmU9b25lJHtTUX1cXCRTUSRTUSRTUSAke1NRfWVudi50d289dHdvJHtTUX0iIFwKKwkJZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgImVudi4qIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZW52IFwKKwkJR0lUX0NPTkZJR19QQVJBTUVURVJTPSIke1NRfWVudi5vbmU9b25lJHtTUX1cXCRTUSAke1NRfWVudi50d289dHdvJHtTUX0iIFwKKwkJZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgImVudi4qIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29uZmlnIC0tZWRpdCB3b3JrcycgJworCWdpdCBjb25maWcgLWYgdG1wIHRlc3QudmFsdWUgbm8gJiYKKwllY2hvIHRlc3QudmFsdWU9eWVzID5leHBlY3QgJiYKKwlHSVRfRURJVE9SPSJlY2hvIFt0ZXN0XXZhbHVlPXllcyA+IiBnaXQgY29uZmlnIC1mIHRtcCAtLWVkaXQgJiYKKwlnaXQgY29uZmlnIC1mIHRtcCAtLWxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbmZpZyAtLWVkaXQgcmVzcGVjdHMgY29yZS5lZGl0b3InICcKKwlnaXQgY29uZmlnIC1mIHRtcCB0ZXN0LnZhbHVlIG5vICYmCisJZWNobyB0ZXN0LnZhbHVlPXllcyA+ZXhwZWN0ICYmCisJdGVzdF9jb25maWcgY29yZS5lZGl0b3IgImVjaG8gW3Rlc3RddmFsdWU9eWVzID4iICYmCisJZ2l0IGNvbmZpZyAtZiB0bXAgLS1lZGl0ICYmCisJZ2l0IGNvbmZpZyAtZiB0bXAgLS1saXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgbWFsZm9ybWVkIGNvbmZpZ3VyYXRpb24gZmlsZXMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhcmYgb24gc3ludGF4IGVycm9yJyAnCisJY2F0ID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJIyBicm9rZW4gc2VjdGlvbiBsaW5lCisJW3NlY3Rpb25dCisJa2V5IGdhcmJhZ2UKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0IHNlY3Rpb24ua2V5ID5hY3R1YWwgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgIiBsaW5lIDMgIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJmIG9uIGluY29tcGxldGUgc2VjdGlvbiBoZWFkZXInICcKKwljYXQgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwkjIGJyb2tlbiBzZWN0aW9uIGxpbmUKKwlbc2VjdGlvbgorCWtleSA9IHZhbHVlCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdldCBzZWN0aW9uLmtleSA+YWN0dWFsIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICIgbGluZSAyICIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZiBvbiBpbmNvbXBsZXRlIHN0cmluZycgJworCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCSMgYnJva2VuIHNlY3Rpb24gbGluZQorCVtzZWN0aW9uXQorCWtleSA9ICJ2YWx1ZSBzdHJpbmcKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0IHNlY3Rpb24ua2V5ID5hY3R1YWwgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgIiBsaW5lIDMgIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cmxtYXRjaCcgJworCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtodHRwXQorCQlzc2xWZXJpZnkKKwlbaHR0cCAiaHR0cHM6Ly93ZWFrLmV4YW1wbGUuY29tIl0KKwkJc3NsVmVyaWZ5ID0gZmFsc2UKKwkJY29va2llRmlsZSA9IC90bXAvY29va2llLnR4dAorCUVPRgorCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjb25maWcgLS1ib29sIC0tZ2V0LXVybG1hdGNoIGRvZXNudC5leGlzdCBodHRwczovL2dvb2QuZXhhbXBsZS5jb20gPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworCWVjaG8gdHJ1ZSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQtdXJsbWF0Y2ggaHR0cC5TU0x2ZXJpZnkgaHR0cHM6Ly9nb29kLmV4YW1wbGUuY29tID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvIGZhbHNlID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tYm9vbCAtLWdldC11cmxtYXRjaCBodHRwLnNzbHZlcmlmeSBodHRwczovL3dlYWsuZXhhbXBsZS5jb20gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXsKKwkJZWNobyBodHRwLmNvb2tpZWZpbGUgL3RtcC9jb29raWUudHh0ICYmCisJCWVjaG8gaHR0cC5zc2x2ZXJpZnkgZmFsc2UKKwl9ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LXVybG1hdGNoIEhUVFAgaHR0cHM6Ly93ZWFrLmV4YW1wbGUuY29tID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybG1hdGNoIGZhdm9ycyBtb3JlIHNwZWNpZmljIFVSTHMnICcKKwljYXQgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwlbaHR0cCAiaHR0cHM6Ly9leGFtcGxlLmNvbS8iXQorCQljb29raWVGaWxlID0gL3RtcC9yb290LnR4dAorCVtodHRwICJodHRwczovL2V4YW1wbGUuY29tL3N1YmRpcmVjdG9yeSJdCisJCWNvb2tpZUZpbGUgPSAvdG1wL3N1YmRpcmVjdG9yeS50eHQKKwlbaHR0cCAiaHR0cHM6Ly91c2VyQGV4YW1wbGUuY29tLyJdCisJCWNvb2tpZUZpbGUgPSAvdG1wL3VzZXIudHh0CisJW2h0dHAgImh0dHBzOi8vYXZlcnlsb25ndXNlckBleGFtcGxlLmNvbS8iXQorCQljb29raWVGaWxlID0gL3RtcC9hdmVyeWxvbmd1c2VyLnR4dAorCVtodHRwICJodHRwczovL3ByZWNlZGluZy5leGFtcGxlLmNvbSJdCisJCWNvb2tpZUZpbGUgPSAvdG1wL3ByZWNlZGluZy50eHQKKwlbaHR0cCAiaHR0cHM6Ly8qLmV4YW1wbGUuY29tIl0KKwkJY29va2llRmlsZSA9IC90bXAvd2lsZGNhcmQudHh0CisJW2h0dHAgImh0dHBzOi8vKi5leGFtcGxlLmNvbS93aWxkY2FyZHdpdGhzdWJkb21haW4iXQorCQljb29raWVGaWxlID0gL3RtcC93aWxkY2FyZHdpdGhzdWJkb21haW4udHh0CisJW2h0dHAgImh0dHBzOi8vKi5leGFtcGxlLioiXQorCQljb29raWVGaWxlID0gL3RtcC9tdWx0aXdpbGRjYXJkLnR4dAorCVtodHRwICJodHRwczovL3RyYWlsaW5nLmV4YW1wbGUuY29tIl0KKwkJY29va2llRmlsZSA9IC90bXAvdHJhaWxpbmcudHh0CisJW2h0dHAgImh0dHBzOi8vdXNlckAqLmV4YW1wbGUuY29tLyJdCisJCWNvb2tpZUZpbGUgPSAvdG1wL3dpbGRjYXJkd2l0aHVzZXIudHh0CisJW2h0dHAgImh0dHBzOi8vc3ViLmV4YW1wbGUuY29tLyJdCisJCWNvb2tpZUZpbGUgPSAvdG1wL3N1Yi50eHQKKwlFT0YKKworCWVjaG8gaHR0cC5jb29raWVmaWxlIC90bXAvcm9vdC50eHQgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2ggSFRUUCBodHRwczovL2V4YW1wbGUuY29tID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvIGh0dHAuY29va2llZmlsZSAvdG1wL3N1YmRpcmVjdG9yeS50eHQgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2ggSFRUUCBodHRwczovL2V4YW1wbGUuY29tL3N1YmRpcmVjdG9yeSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyBodHRwLmNvb2tpZWZpbGUgL3RtcC9zdWJkaXJlY3RvcnkudHh0ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LXVybG1hdGNoIEhUVFAgaHR0cHM6Ly9leGFtcGxlLmNvbS9zdWJkaXJlY3RvcnkvbmVzdGVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvIGh0dHAuY29va2llZmlsZSAvdG1wL3VzZXIudHh0ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LXVybG1hdGNoIEhUVFAgaHR0cHM6Ly91c2VyQGV4YW1wbGUuY29tLyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyBodHRwLmNvb2tpZWZpbGUgL3RtcC9zdWJkaXJlY3RvcnkudHh0ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LXVybG1hdGNoIEhUVFAgaHR0cHM6Ly9hdmVyeWxvbmd1c2VyQGV4YW1wbGUuY29tL3N1YmRpcmVjdG9yeSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyBodHRwLmNvb2tpZWZpbGUgL3RtcC9wcmVjZWRpbmcudHh0ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LXVybG1hdGNoIEhUVFAgaHR0cHM6Ly9wcmVjZWRpbmcuZXhhbXBsZS5jb20gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gaHR0cC5jb29raWVmaWxlIC90bXAvd2lsZGNhcmQudHh0ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LXVybG1hdGNoIEhUVFAgaHR0cHM6Ly93aWxkY2FyZC5leGFtcGxlLmNvbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyBodHRwLmNvb2tpZWZpbGUgL3RtcC9zdWIudHh0ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LXVybG1hdGNoIEhUVFAgaHR0cHM6Ly9zdWIuZXhhbXBsZS5jb20vd2lsZGNhcmR3aXRoc3ViZG9tYWluID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvIGh0dHAuY29va2llZmlsZSAvdG1wL3RyYWlsaW5nLnR4dCA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC11cmxtYXRjaCBIVFRQIGh0dHBzOi8vdHJhaWxpbmcuZXhhbXBsZS5jb20gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gaHR0cC5jb29raWVmaWxlIC90bXAvc3ViLnR4dCA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC11cmxtYXRjaCBIVFRQIGh0dHBzOi8vdXNlckBzdWIuZXhhbXBsZS5jb20gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gaHR0cC5jb29raWVmaWxlIC90bXAvbXVsdGl3aWxkY2FyZC50eHQgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2ggSFRUUCBodHRwczovL3dpbGRjYXJkLmV4YW1wbGUub3JnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybG1hdGNoIHdpdGggd2lsZGNhcmQnICcKKwljYXQgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwlbaHR0cF0KKwkJc3NsVmVyaWZ5CisJW2h0dHAgImh0dHBzOi8vKi5leGFtcGxlLmNvbSJdCisJCXNzbFZlcmlmeSA9IGZhbHNlCisJCWNvb2tpZUZpbGUgPSAvdG1wL2Nvb2tpZS50eHQKKwlFT0YKKworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY29uZmlnIC0tYm9vbCAtLWdldC11cmxtYXRjaCBkb2VzbnQuZXhpc3QgaHR0cHM6Ly9nb29kLmV4YW1wbGUuY29tID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwllY2hvIHRydWUgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1ib29sIC0tZ2V0LXVybG1hdGNoIGh0dHAuU1NMdmVyaWZ5IGh0dHBzOi8vZXhhbXBsZS5jb20gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gdHJ1ZSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQtdXJsbWF0Y2ggaHR0cC5TU0x2ZXJpZnkgaHR0cHM6Ly9nb29kLWV4YW1wbGUuY29tID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvIHRydWUgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1ib29sIC0tZ2V0LXVybG1hdGNoIGh0dHAuc3NsdmVyaWZ5IGh0dHBzOi8vZGVlcC5uZXN0ZWQuZXhhbXBsZS5jb20gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gZmFsc2UgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1ib29sIC0tZ2V0LXVybG1hdGNoIGh0dHAuc3NsdmVyaWZ5IGh0dHBzOi8vZ29vZC5leGFtcGxlLmNvbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJeworCQllY2hvIGh0dHAuY29va2llZmlsZSAvdG1wL2Nvb2tpZS50eHQgJiYKKwkJZWNobyBodHRwLnNzbHZlcmlmeSBmYWxzZQorCX0gPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2ggSFRUUCBodHRwczovL2dvb2QuZXhhbXBsZS5jb20gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gaHR0cC5zc2x2ZXJpZnkgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2ggSFRUUCBodHRwczovL21vcmUuZXhhbXBsZS5jb20uYXUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBnb29kIHNlY3Rpb24gaHlnaWVuZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS11bnNldCBsYXN0IGtleSByZW1vdmVzIHNlY3Rpb24gKGV4Y2VwdCBpZiBjb21tZW50ZWQpJyAnCisJY2F0ID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJIyBzb21lIGdlbmVyaWMgY29tbWVudCBvbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGl0c2VsZgorCSMgYSBjb21tZW50IHNwZWNpZmljIHRvIHRoaXMgInNlY3Rpb24iIHNlY3Rpb24uCisJW3NlY3Rpb25dCisJIyBzb21lIGludGVydmVuaW5nIGxpbmVzCisJIyB0aGF0IHNob3VsZCBhbHNvIGJlIGRyb3BwZWQKKworCWtleSA9IHZhbHVlCisJIyBwbGVhc2UgYmUgY2FyZWZ1bCB3aGVuIHlvdSB1cGRhdGUgdGhlIGFib3ZlIHZhcmlhYmxlCisJRU9GCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIyBzb21lIGdlbmVyaWMgY29tbWVudCBvbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGl0c2VsZgorCSMgYSBjb21tZW50IHNwZWNpZmljIHRvIHRoaXMgInNlY3Rpb24iIHNlY3Rpb24uCisJW3NlY3Rpb25dCisJIyBzb21lIGludGVydmVuaW5nIGxpbmVzCisJIyB0aGF0IHNob3VsZCBhbHNvIGJlIGRyb3BwZWQKKworCSMgcGxlYXNlIGJlIGNhcmVmdWwgd2hlbiB5b3UgdXBkYXRlIHRoZSBhYm92ZSB2YXJpYWJsZQorCUVPRgorCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHNlY3Rpb24ua2V5ICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnICYmCisKKwljYXQgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwlbc2VjdGlvbl0KKwlrZXkgPSB2YWx1ZQorCVtuZXh0LXNlY3Rpb25dCisJRU9GCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJW25leHQtc2VjdGlvbl0KKwlFT0YKKworCWdpdCBjb25maWcgLS11bnNldCBzZWN0aW9uLmtleSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZyAmJgorCisJcV90b190YWIgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwlbb25lXQorCVFrZXkgPSAibXVsdGlsaW5lIFwKKwlRUSMgd2l0aCBjb21tZW50IgorCVt0d29dCisJa2V5ID0gdHJ1ZQorCUVPRgorCWdpdCBjb25maWcgLS11bnNldCB0d28ua2V5ICYmCisJISBncmVwIHR3byAuZ2l0L2NvbmZpZyAmJgorCisJcV90b190YWIgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwlbb25lXQorCVFrZXkgPSAibXVsdGlsaW5lIFwKKwlRUSMgd2l0aCBjb21tZW50IgorCVtvbmVdCisJa2V5ID0gdHJ1ZQorCUVPRgorCWdpdCBjb25maWcgLS11bnNldC1hbGwgb25lLmtleSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgLmdpdC9jb25maWcgJiYKKworCXFfdG9fdGFiID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW29uZV0KKwlRa2V5ID0gdHJ1ZQorCVEjIGEgY29tbWVudCBub3QgYXQgdGhlIHN0YXJ0CisJW3R3b10KKwlRa2V5ID0gdHJ1ZQorCUVPRgorCWdpdCBjb25maWcgLS11bnNldCB0d28ua2V5ICYmCisJZ3JlcCB0d28gLmdpdC9jb25maWcgJiYKKworCXFfdG9fdGFiID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW29uZV0KKwlRa2V5ID0gbm90IFt0d28gInN1YnNlY3Rpb24iXQorCVt0d28gInN1YnNlY3Rpb24iXQorCVt0d28gInN1YnNlY3Rpb24iXQorCVFrZXkgPSB0cnVlCisJW1RXTyAic3Vic2VjdGlvbiJdCisJW29uZV0KKwlFT0YKKwlnaXQgY29uZmlnIC0tdW5zZXQgdHdvLnN1YnNlY3Rpb24ua2V5ICYmCisJdGVzdCAibm90IFt0d28gc3Vic2VjdGlvbl0iID0gIiQoZ2l0IGNvbmZpZyBvbmUua2V5KSIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tdW5zZXQtYWxsIHJlbW92ZXMgc2VjdGlvbiBpZiBlbXB0eSAmIHVuY29tbWVudGVkJyAnCisJY2F0ID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW3NlY3Rpb25dCisJa2V5ID0gdmFsdWUxCisJa2V5ID0gdmFsdWUyCisJRU9GCisKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIHNlY3Rpb24ua2V5ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRpbmcgYSBrZXkgaW50byBhbiBlbXB0eSBzZWN0aW9uIHJldXNlcyBoZWFkZXInICcKKwljYXQgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwlbc2VjdGlvbl0KKwlFT0YKKworCXFfdG9fdGFiID5leHBlY3QgPDwtXEVPRiAmJgorCVtzZWN0aW9uXQorCVFrZXkgPSB2YWx1ZQorCUVPRgorCisJZ2l0IGNvbmZpZyBzZWN0aW9uLmtleSB2YWx1ZSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxQRVJMICdwcmVzZXJ2ZXMgZXhpc3RpbmcgcGVybWlzc2lvbnMnICcKKwljaG1vZCAwNjAwIC5naXQvY29uZmlnICYmCisJZ2l0IGNvbmZpZyBpbWFwLnBhc3MgSHVudGVyMiAmJgorCXBlcmwgLWUgXAorCSAgImRpZSBxKGJhZHNldCkgaWYgKChzdGF0KHEoLmdpdC9jb25maWcpKSlbMl0gJiAwNzc3NykgIT0gMDYwMCIgJiYKKwlnaXQgY29uZmlnIC0tcmVuYW1lLXNlY3Rpb24gaW1hcCBwb3AgJiYKKwlwZXJsIC1lIFwKKwkgICJkaWUgcShiYWRyZW5hbWUpIGlmICgoc3RhdChxKC5naXQvY29uZmlnKSkpWzJdICYgMDc3NzcpICE9IDA2MDAiCisnCisKKyEgdGVzdF9oYXZlX3ByZXJlcSBNSU5HVyB8fAorSE9NRT0iJChwd2QpIiAjIGNvbnZlcnQgdG8gV2luZG93cyBwYXRoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCAtLXNob3ctb3JpZ2luIHRlc3RzJyAnCisJSU5DTFVERV9ESVI9IiRIT01FL2luY2x1ZGUiICYmCisJbWtkaXIgLXAgIiRJTkNMVURFX0RJUiIgJiYKKwljYXQgPiIkSU5DTFVERV9ESVIiL2Fic29sdXRlLmluY2x1ZGUgPDwtXEVPRiAmJgorCVt1c2VyXQorCQlhYnNvbHV0ZSA9IGluY2x1ZGUKKwlFT0YKKwljYXQgPiIkSU5DTFVERV9ESVIiL3JlbGF0aXZlLmluY2x1ZGUgPDwtXEVPRiAmJgorCVt1c2VyXQorCQlyZWxhdGl2ZSA9IGluY2x1ZGUKKwlFT0YKKwljYXQgPiIkSE9NRSIvLmdpdGNvbmZpZyA8PC1FT0YgJiYKKwlbdXNlcl0KKwkJZ2xvYmFsID0gdHJ1ZQorCQlvdmVycmlkZSA9IGdsb2JhbAorCVtpbmNsdWRlXQorCQlwYXRoID0gIiRJTkNMVURFX0RJUi9hYnNvbHV0ZS5pbmNsdWRlIgorCUVPRgorCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRgorCVt1c2VyXQorCQlsb2NhbCA9IHRydWUKKwkJb3ZlcnJpZGUgPSBsb2NhbAorCVtpbmNsdWRlXQorCQlwYXRoID0gLi4vaW5jbHVkZS9yZWxhdGl2ZS5pbmNsdWRlCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy1vcmlnaW4gd2l0aCAtLWxpc3QnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlmaWxlOiRIT01FLy5naXRjb25maWcJdXNlci5nbG9iYWw9dHJ1ZQorCWZpbGU6JEhPTUUvLmdpdGNvbmZpZwl1c2VyLm92ZXJyaWRlPWdsb2JhbAorCWZpbGU6JEhPTUUvLmdpdGNvbmZpZwlpbmNsdWRlLnBhdGg9JElOQ0xVREVfRElSL2Fic29sdXRlLmluY2x1ZGUKKwlmaWxlOiRJTkNMVURFX0RJUi9hYnNvbHV0ZS5pbmNsdWRlCXVzZXIuYWJzb2x1dGU9aW5jbHVkZQorCWZpbGU6LmdpdC9jb25maWcJdXNlci5sb2NhbD10cnVlCisJZmlsZTouZ2l0L2NvbmZpZwl1c2VyLm92ZXJyaWRlPWxvY2FsCisJZmlsZTouZ2l0L2NvbmZpZwlpbmNsdWRlLnBhdGg9Li4vaW5jbHVkZS9yZWxhdGl2ZS5pbmNsdWRlCisJZmlsZTouZ2l0Ly4uL2luY2x1ZGUvcmVsYXRpdmUuaW5jbHVkZQl1c2VyLnJlbGF0aXZlPWluY2x1ZGUKKwljb21tYW5kIGxpbmU6CXVzZXIuY21kbGluZT10cnVlCisJRU9GCisJZ2l0IC1jIHVzZXIuY21kbGluZT10cnVlIGNvbmZpZyAtLWxpc3QgLS1zaG93LW9yaWdpbiA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctb3JpZ2luIHdpdGggLS1saXN0IC0tbnVsbCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWZpbGU6JEhPTUUvLmdpdGNvbmZpZ1F1c2VyLmdsb2JhbAorCXRydWVRZmlsZTokSE9NRS8uZ2l0Y29uZmlnUXVzZXIub3ZlcnJpZGUKKwlnbG9iYWxRZmlsZTokSE9NRS8uZ2l0Y29uZmlnUWluY2x1ZGUucGF0aAorCSRJTkNMVURFX0RJUi9hYnNvbHV0ZS5pbmNsdWRlUWZpbGU6JElOQ0xVREVfRElSL2Fic29sdXRlLmluY2x1ZGVRdXNlci5hYnNvbHV0ZQorCWluY2x1ZGVRZmlsZTouZ2l0L2NvbmZpZ1F1c2VyLmxvY2FsCisJdHJ1ZVFmaWxlOi5naXQvY29uZmlnUXVzZXIub3ZlcnJpZGUKKwlsb2NhbFFmaWxlOi5naXQvY29uZmlnUWluY2x1ZGUucGF0aAorCS4uL2luY2x1ZGUvcmVsYXRpdmUuaW5jbHVkZVFmaWxlOi5naXQvLi4vaW5jbHVkZS9yZWxhdGl2ZS5pbmNsdWRlUXVzZXIucmVsYXRpdmUKKwlpbmNsdWRlUWNvbW1hbmQgbGluZTpRdXNlci5jbWRsaW5lCisJdHJ1ZVEKKwlFT0YKKwlnaXQgLWMgdXNlci5jbWRsaW5lPXRydWUgY29uZmlnIC0tbnVsbCAtLWxpc3QgLS1zaG93LW9yaWdpbiA+b3V0cHV0LnJhdyAmJgorCW51bF90b19xIDxvdXRwdXQucmF3ID5vdXRwdXQgJiYKKwkjIFRoZSBoZXJlLWRvYyBhYm92ZSBhZGRzIGEgbmV3bGluZSB0aGF0IHRoZSAtLW51bGwgb3V0cHV0IHdvdWxkIG5vdAorCSMgaW5jbHVkZS4gQWRkIGl0IGhlcmUgdG8gbWFrZSB0aGUgdHdvIGNvbXBhcmFibGUuCisJZWNobyA+Pm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG93LW9yaWdpbiB3aXRoIHNpbmdsZSBmaWxlJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZpbGU6LmdpdC9jb25maWcJdXNlci5sb2NhbD10cnVlCisJZmlsZTouZ2l0L2NvbmZpZwl1c2VyLm92ZXJyaWRlPWxvY2FsCisJZmlsZTouZ2l0L2NvbmZpZwlpbmNsdWRlLnBhdGg9Li4vaW5jbHVkZS9yZWxhdGl2ZS5pbmNsdWRlCisJRU9GCisJZ2l0IGNvbmZpZyAtLWxvY2FsIC0tbGlzdCAtLXNob3ctb3JpZ2luID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy1vcmlnaW4gd2l0aCAtLWdldC1yZWdleHAnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlmaWxlOiRIT01FLy5naXRjb25maWcJdXNlci5nbG9iYWwgdHJ1ZQorCWZpbGU6LmdpdC9jb25maWcJdXNlci5sb2NhbCB0cnVlCisJRU9GCisJZ2l0IGNvbmZpZyAtLXNob3ctb3JpZ2luIC0tZ2V0LXJlZ2V4cCAidXNlclwuW2d8bF0uKiIgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG93LW9yaWdpbiBnZXR0aW5nIGEgc2luZ2xlIGtleScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmaWxlOi5naXQvY29uZmlnCWxvY2FsCisJRU9GCisJZ2l0IGNvbmZpZyAtLXNob3ctb3JpZ2luIHVzZXIub3ZlcnJpZGUgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGN1c3RvbSBjb25maWcgZmlsZScgJworCUNVU1RPTV9DT05GSUdfRklMRT0iY3VzdG9tLmNvbmYiICYmCisJY2F0ID4iJENVU1RPTV9DT05GSUdfRklMRSIgPDwtXEVPRgorCVt1c2VyXQorCQljdXN0b20gPSB0cnVlCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdzZXQgdXAgY3VzdG9tIGNvbmZpZyBmaWxlIHdpdGggc3BlY2lhbCBuYW1lIGNoYXJhY3RlcnMnICcKKwlXRUlSRExZX05BTUVEX0ZJTEU9ImZpbGVcIiAoZHEpIGFuZCBzcGFjZXMuY29uZiIgJiYKKwljcCAiJENVU1RPTV9DT05GSUdfRklMRSIgIiRXRUlSRExZX05BTUVEX0ZJTEUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICctLXNob3ctb3JpZ2luIGVzY2FwZSBzcGVjaWFsIGZpbGUgbmFtZSBjaGFyYWN0ZXJzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZpbGU6ImZpbGVcIiAoZHEpIGFuZCBzcGFjZXMuY29uZiIJdXNlci5jdXN0b209dHJ1ZQorCUVPRgorCWdpdCBjb25maWcgLS1maWxlICIkV0VJUkRMWV9OQU1FRF9GSUxFIiAtLXNob3ctb3JpZ2luIC0tbGlzdCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctb3JpZ2luIHN0ZGluJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXN0YW5kYXJkIGlucHV0Ogl1c2VyLmN1c3RvbT10cnVlCisJRU9GCisJZ2l0IGNvbmZpZyAtLWZpbGUgLSAtLXNob3ctb3JpZ2luIC0tbGlzdCA8IiRDVVNUT01fQ09ORklHX0ZJTEUiID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy1vcmlnaW4gc3RkaW4gd2l0aCBmaWxlIGluY2x1ZGUnICcKKwljYXQgPiIkSU5DTFVERV9ESVIiL3N0ZGluLmluY2x1ZGUgPDwtRU9GICYmCisJW3VzZXJdCisJCXN0ZGluID0gaW5jbHVkZQorCUVPRgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWZpbGU6JElOQ0xVREVfRElSL3N0ZGluLmluY2x1ZGUJaW5jbHVkZQorCUVPRgorCWVjaG8gIltpbmNsdWRlXXBhdGg9XCIkSU5DTFVERV9ESVJcIi9zdGRpbi5pbmNsdWRlIiB8CisJZ2l0IGNvbmZpZyAtLXNob3ctb3JpZ2luIC0taW5jbHVkZXMgLS1maWxlIC0gdXNlci5zdGRpbiA+b3V0cHV0ICYmCisKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy1vcmlnaW4gYmxvYicgJworCWJsb2I9JChnaXQgaGFzaC1vYmplY3QgLXcgIiRDVVNUT01fQ09ORklHX0ZJTEUiKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWJsb2I6JGJsb2IJdXNlci5jdXN0b209dHJ1ZQorCUVPRgorCWdpdCBjb25maWcgLS1ibG9iPSRibG9iIC0tc2hvdy1vcmlnaW4gLS1saXN0ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy1vcmlnaW4gYmxvYiByZWYnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJYmxvYjptYXN0ZXI6Y3VzdG9tLmNvbmYJdXNlci5jdXN0b209dHJ1ZQorCUVPRgorCWdpdCBhZGQgIiRDVVNUT01fQ09ORklHX0ZJTEUiICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IGNvbmZpZyBmaWxlIiAmJgorCWdpdCBjb25maWcgLS1ibG9iPW1hc3RlcjoiJENVU1RPTV9DT05GSUdfRklMRSIgLS1zaG93LW9yaWdpbiAtLWxpc3QgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG93LXNjb3BlIHdpdGggLS1saXN0JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZ2xvYmFsCXVzZXIuZ2xvYmFsPXRydWUKKwlnbG9iYWwJdXNlci5vdmVycmlkZT1nbG9iYWwKKwlnbG9iYWwJaW5jbHVkZS5wYXRoPSRJTkNMVURFX0RJUi9hYnNvbHV0ZS5pbmNsdWRlCisJZ2xvYmFsCXVzZXIuYWJzb2x1dGU9aW5jbHVkZQorCWxvY2FsCXVzZXIubG9jYWw9dHJ1ZQorCWxvY2FsCXVzZXIub3ZlcnJpZGU9bG9jYWwKKwlsb2NhbAlpbmNsdWRlLnBhdGg9Li4vaW5jbHVkZS9yZWxhdGl2ZS5pbmNsdWRlCisJbG9jYWwJdXNlci5yZWxhdGl2ZT1pbmNsdWRlCisJY29tbWFuZAl1c2VyLmNtZGxpbmU9dHJ1ZQorCUVPRgorCWdpdCAtYyB1c2VyLmNtZGxpbmU9dHJ1ZSBjb25maWcgLS1saXN0IC0tc2hvdy1zY29wZSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnLS1zaG93LXNjb3BlIHdpdGggLS1ibG9iJyAnCisJYmxvYj0kKGdpdCBoYXNoLW9iamVjdCAtdyAiJENVU1RPTV9DT05GSUdfRklMRSIpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY29tbWFuZAl1c2VyLmN1c3RvbT10cnVlCisJRU9GCisJZ2l0IGNvbmZpZyAtLWJsb2I9JGJsb2IgLS1zaG93LXNjb3BlIC0tbGlzdCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctc2NvcGUgd2l0aCAtLWxvY2FsJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWxvY2FsCXVzZXIubG9jYWw9dHJ1ZQorCWxvY2FsCXVzZXIub3ZlcnJpZGU9bG9jYWwKKwlsb2NhbAlpbmNsdWRlLnBhdGg9Li4vaW5jbHVkZS9yZWxhdGl2ZS5pbmNsdWRlCisJRU9GCisJZ2l0IGNvbmZpZyAtLWxvY2FsIC0tbGlzdCAtLXNob3ctc2NvcGUgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG93LXNjb3BlIGdldHRpbmcgYSBzaW5nbGUgdmFsdWUnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbG9jYWwJdHJ1ZQorCUVPRgorCWdpdCBjb25maWcgLS1zaG93LXNjb3BlIC0tZ2V0IHVzZXIubG9jYWwgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG93LXNjb3BlIHdpdGggLS1zaG93LW9yaWdpbicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWdsb2JhbAlmaWxlOiRIT01FLy5naXRjb25maWcJdXNlci5nbG9iYWw9dHJ1ZQorCWdsb2JhbAlmaWxlOiRIT01FLy5naXRjb25maWcJdXNlci5vdmVycmlkZT1nbG9iYWwKKwlnbG9iYWwJZmlsZTokSE9NRS8uZ2l0Y29uZmlnCWluY2x1ZGUucGF0aD0kSU5DTFVERV9ESVIvYWJzb2x1dGUuaW5jbHVkZQorCWdsb2JhbAlmaWxlOiRJTkNMVURFX0RJUi9hYnNvbHV0ZS5pbmNsdWRlCXVzZXIuYWJzb2x1dGU9aW5jbHVkZQorCWxvY2FsCWZpbGU6LmdpdC9jb25maWcJdXNlci5sb2NhbD10cnVlCisJbG9jYWwJZmlsZTouZ2l0L2NvbmZpZwl1c2VyLm92ZXJyaWRlPWxvY2FsCisJbG9jYWwJZmlsZTouZ2l0L2NvbmZpZwlpbmNsdWRlLnBhdGg9Li4vaW5jbHVkZS9yZWxhdGl2ZS5pbmNsdWRlCisJbG9jYWwJZmlsZTouZ2l0Ly4uL2luY2x1ZGUvcmVsYXRpdmUuaW5jbHVkZQl1c2VyLnJlbGF0aXZlPWluY2x1ZGUKKwljb21tYW5kCWNvbW1hbmQgbGluZToJdXNlci5jbWRsaW5lPXRydWUKKwlFT0YKKwlnaXQgLWMgdXNlci5jbWRsaW5lPXRydWUgY29uZmlnIC0tbGlzdCAtLXNob3ctb3JpZ2luIC0tc2hvdy1zY29wZSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxvY2FsIHJlcXVpcmVzIGEgcmVwbycgJworCSMgd2UgZXhwZWN0IDEyOCB0byBlbnN1cmUgdGhhdCB3ZSBkbyBub3Qgc2ltcGx5CisJIyBmYWlsIHRvIGZpbmQgYW55dGhpbmcgYW5kIHJldHVybiBjb2RlICIxIgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IG5vbmdpdCBnaXQgY29uZmlnIC0tbG9jYWwgZm9vLmJhcgorJworCitjYXQgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKK1tjb3JlXQorZm9vID0gdHJ1ZQorbnVtYmVyID0gMTAKK2JpZyA9IDFNCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWRlbnRpY2FsIG1vZGVybiAtLXR5cGUgc3BlY2lmaWVycyBhcmUgYWxsb3dlZCcgJworCXRlc3RfY21wX2NvbmZpZyAxMDQ4NTc2IC0tdHlwZT1pbnQgLS10eXBlPWludCBjb3JlLmJpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZGVudGljYWwgbGVnYWN5IC0tdHlwZSBzcGVjaWZpZXJzIGFyZSBhbGxvd2VkJyAnCisJdGVzdF9jbXBfY29uZmlnIDEwNDg1NzYgLS1pbnQgLS1pbnQgY29yZS5iaWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWRlbnRpY2FsIG1peGVkIC0tdHlwZSBzcGVjaWZpZXJzIGFyZSBhbGxvd2VkJyAnCisJdGVzdF9jbXBfY29uZmlnIDEwNDg1NzYgLS1pbnQgLS10eXBlPWludCBjb3JlLmJpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24taWRlbnRpY2FsIG1vZGVybiAtLXR5cGUgc3BlY2lmaWVycyBhcmUgbm90IGFsbG93ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tdHlwZT1pbnQgLS10eXBlPWJvb2wgY29yZS5iaWcgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgIm9ubHkgb25lIHR5cGUgYXQgYSB0aW1lIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24taWRlbnRpY2FsIGxlZ2FjeSAtLXR5cGUgc3BlY2lmaWVycyBhcmUgbm90IGFsbG93ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0taW50IC0tYm9vbCBjb3JlLmJpZyAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAib25seSBvbmUgdHlwZSBhdCBhIHRpbWUiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1pZGVudGljYWwgbWl4ZWQgLS10eXBlIHNwZWNpZmllcnMgYXJlIG5vdCBhbGxvd2VkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLXR5cGU9aW50IC0tYm9vbCBjb3JlLmJpZyAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAib25seSBvbmUgdHlwZSBhdCBhIHRpbWUiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tdHlwZSBhbGxvd3MgdmFsaWQgdHlwZSBzcGVjaWZpZXJzJyAnCisJdGVzdF9jbXBfY29uZmlnIHRydWUgIC0tdHlwZT1ib29sIGNvcmUuZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdHlwZSB1bnNldHMgdHlwZSBzcGVjaWZpZXJzJyAnCisJdGVzdF9jbXBfY29uZmlnIDEwIC0tdHlwZT1ib29sIC0tbm8tdHlwZSBjb3JlLm51bWJlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnNldCB0eXBlIHNwZWNpZmllcnMgbWF5IGJlIHJlc2V0IHRvIGNvbmZsaWN0aW5nIG9uZXMnICcKKwl0ZXN0X2NtcF9jb25maWcgMTA0ODU3NiAtLXR5cGU9Ym9vbCAtLW5vLXR5cGUgLS10eXBlPWludCBjb3JlLmJpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXR5cGUgcmVqZWN0cyB1bmtub3duIHNwZWNpZmllcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tdHlwZT1ub25zZW5zZSBjb3JlLmZvbyAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAidW5yZWNvZ25pemVkIC0tdHlwZSBhcmd1bWVudCIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZXBsYWNlLWFsbCBkb2VzIG5vdCBpbnZlbnQgbmV3bGluZXMnICcKKwlxX3RvX3RhYiA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVthYmNda2V5CisJUWtlZXBTZWN0aW9uCisJW3h5el0KKwlRa2V5ID0gMQorCVthYmNdCisJUWtleSA9IGEKKwlFT0YKKwlxX3RvX3RhYiA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlbYWJjXQorCVFrZWVwU2VjdGlvbgorCVt4eXpdCisJUWtleSA9IDEKKwlbYWJjXQorCVFrZXkgPSBiCisJRU9GCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGFiYy5rZXkgYiAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEzMDEtc2hhcmVkLXJlcG8uc2ggYi90L3QxMzAxLXNoYXJlZC1yZXBvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJkYzg1M2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMzAxLXNoYXJlZC1yZXBvLnNoCkBAIC0wLDAgKzEsMjEyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBzaGFyZWQgcmVwb3NpdG9yeSBpbml0aWFsaXphdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgUmVtb3ZlIGEgZGVmYXVsdCBBQ0wgZnJvbSB0aGUgdGVzdCBkaXIgaWYgcG9zc2libGUuCitzZXRmYWNsIC1rIC4gMj4vZGV2L251bGwKKworIyBVc2VyIG11c3QgaGF2ZSByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSByZXBvIC0+IGZhaWx1cmUgb24gLS1zaGFyZWQ9MDQwMAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhcmVkID0gMDQwMCAoZmF1bHR5IHBlcm1pc3Npb24gdS13KScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1YiIgJiYKKwlta2RpciBzdWIgJiYgKAorCQljZCBzdWIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluaXQgLS1zaGFyZWQ9MDQwMAorCSkKKycKKworZm9yIHUgaW4gMDAyIDAyMgorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAic2hhcmVkPTEgZG9lcyBub3QgY2xlYXIgYml0cyBwcmVzZXQgYnkgdW1hc2sgJHUiICcKKwkJbWtkaXIgc3ViICYmICgKKwkJCWNkIHN1YiAmJgorCQkJdW1hc2sgJHUgJiYKKwkJCWdpdCBpbml0IC0tc2hhcmVkPTEgJiYKKwkJCXRlc3QgMSA9ICIkKGdpdCBjb25maWcgY29yZS5zaGFyZWRyZXBvc2l0b3J5KSIKKwkJKSAmJgorCQlhY3R1YWw9JChscyAtbCBzdWIvLmdpdC9IRUFEKSAmJgorCQljYXNlICIkYWN0dWFsIiBpbgorCQktcnctcnctci0tKikKKwkJCTogaGFwcHkKKwkJCTs7CisJCSopCisJCQllY2hvIE9vcHMsIC5naXQvSEVBRCBpcyBub3QgMDY2NCBidXQgJGFjdHVhbAorCQkJZmFsc2UKKwkJCTs7CisJCWVzYWMKKwknCisJcm0gLXJmIHN1YgorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFyZWQ9YWxsJyAnCisJbWtkaXIgc3ViICYmCisJY2Qgc3ViICYmCisJZ2l0IGluaXQgLS1zaGFyZWQ9YWxsICYmCisJdGVzdCAyID0gJChnaXQgY29uZmlnIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ3VwZGF0ZS1zZXJ2ZXItaW5mbyBob25vcnMgY29yZS5zaGFyZWRSZXBvc2l0b3J5JyAnCisJOiA+IGExICYmCisJZ2l0IGFkZCBhMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gYTEgJiYKKwl1bWFzayAwMjc3ICYmCisJZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyAmJgorCWFjdHVhbD0iJChscyAtbCAuZ2l0L2luZm8vcmVmcykiICYmCisJY2FzZSAiJGFjdHVhbCIgaW4KKwktci0tci0tci0tKikKKwkJOiBoYXBweQorCQk7OworCSopCisJCWVjaG8gT29wcywgLmdpdC9pbmZvL3JlZnMgaXMgbm90IDA0NDQKKwkJZmFsc2UKKwkJOzsKKwllc2FjCisnCisKK2ZvciB1IGluCTA2NjA6cnctcnctLS0tIFwKKwkJMDY0MDpydy1yLS0tLS0gXAorCQkwNjAwOnJ3LS0tLS0tLSBcCisJCTA2NjY6cnctcnctcnctIFwKKwkJMDY2NDpydy1ydy1yLS0KK2RvCisJeD0kKGV4cHIgIiR1IiA6ICIuKjpcKFtydy1dKlwpIikgJiYKKwl5PSQoZWNobyAiJHgiIHwgc2VkIC1lICJzL3cvLS9nIikgJiYKKwl1PSQoZXhwciAiJHUiIDogIlwoWzAtN10qXCkiKSAmJgorCWdpdCBjb25maWcgY29yZS5zaGFyZWRyZXBvc2l0b3J5ICIkdSIgJiYKKwl1bWFzayAwMjc3ICYmCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAic2hhcmVkID0gJHUgKCR5KSBybyIgJworCisJCXJtIC1mIC5naXQvaW5mby9yZWZzICYmCisJCWdpdCB1cGRhdGUtc2VydmVyLWluZm8gJiYKKwkJYWN0dWFsPSIkKHRlc3RfbW9kZWJpdHMgLmdpdC9pbmZvL3JlZnMpIiAmJgorCQl2ZXJib3NlIHRlc3QgIngkYWN0dWFsIiA9ICJ4LSR5IgorCisJJworCisJdW1hc2sgMDc3ICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gInNoYXJlZCA9ICR1ICgkeCkgcnciICcKKworCQlybSAtZiAuZ2l0L2luZm8vcmVmcyAmJgorCQlnaXQgdXBkYXRlLXNlcnZlci1pbmZvICYmCisJCWFjdHVhbD0iJCh0ZXN0X21vZGViaXRzIC5naXQvaW5mby9yZWZzKSIgJiYKKwkJdmVyYm9zZSB0ZXN0ICJ4JGFjdHVhbCIgPSAieC0keCIKKworCScKKworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnaW5mby9yZWZzIHJlc3BlY3RzIHVtYXNrIGluIHVuc2hhcmVkIHJlcG8nICcKKwlybSAtZiAuZ2l0L2luZm8vcmVmcyAmJgorCXRlc3RfdW5jb25maWcgY29yZS5zaGFyZWRyZXBvc2l0b3J5ICYmCisJdW1hc2sgMDAyICYmCisJZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyAmJgorCWVjaG8gIi1ydy1ydy1yLS0iID5leHBlY3QgJiYKKwl0ZXN0X21vZGViaXRzIC5naXQvaW5mby9yZWZzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdnaXQgcmVmbG9nIGV4cGlyZSBob25vcnMgY29yZS5zaGFyZWRSZXBvc2l0b3J5JyAnCisJdW1hc2sgMDc3ICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZ3JvdXAgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWFsbCAmJgorCWFjdHVhbD0iJChscyAtbCAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIpIiAmJgorCWNhc2UgIiRhY3R1YWwiIGluCisJLXJ3LXJ3LSopCisJCTogaGFwcHkKKwkJOzsKKwkqKQorCQllY2hvIE9vb3BzLCAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgaXMgbm90IDA2NjIgWyRhY3R1YWxdCisJCWZhbHNlCisJCTs7CisJZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnZm9yY2VkIG1vZGVzJyAnCisJbWtkaXIgLXAgdGVtcGxhdGVzL2hvb2tzICYmCisJZWNobyB1cGRhdGUtc2VydmVyLWluZm8gPnRlbXBsYXRlcy9ob29rcy9wb3N0LXVwZGF0ZSAmJgorCWNobW9kICt4IHRlbXBsYXRlcy9ob29rcy9wb3N0LXVwZGF0ZSAmJgorCWVjaG8gOiA+cmFuZG9tLWZpbGUgJiYKKwlta2RpciBuZXcgJiYKKwkoCisJCWNkIG5ldyAmJgorCQl1bWFzayAwMDIgJiYKKwkJZ2l0IGluaXQgLS1zaGFyZWQ9MDY2MCAtLXRlbXBsYXRlPXRlbXBsYXRlcyAmJgorCQk+ZnJvdHogJiYKKwkJZ2l0IGFkZCBmcm90eiAmJgorCQlnaXQgY29tbWl0IC1hIC1tIGluaXRpYWwgJiYKKwkJZ2l0IHJlcGFjaworCSkgJiYKKwkjIExpc3QgcmVwb3NpdG9yeSBmaWxlcyBtZWFudCB0byBiZSBwcm90ZWN0ZWQ7IG5vdGUgdGhhdAorCSMgQ09NTUlUX0VESVRNU0cgZG9lcyBub3QgbWF0dGVyLS0tMG1vZGUgaXMgbm90IGFib3V0IGEKKwkjIHJlcG9zaXRvcnkgd2l0aCBhIHdvcmsgdHJlZS4KKwlmaW5kIG5ldy8uZ2l0IC10eXBlIGYgLW5hbWUgQ09NTUlUX0VESVRNU0cgLXBydW5lIC1vIC1wcmludCB8CisJeGFyZ3MgbHMgLWxkID5hY3R1YWwgJiYKKworCSMgRXZlcnl0aGluZyBtdXN0IGJlIHVuYWNjZXNzaWJsZSB0byBvdGhlcnMKKwl0ZXN0IC16ICIkKHNlZCAtZSAiL14uLi4uLi4uLS0tL2QiIGFjdHVhbCkiICYmCisKKwkjIEFsbCBkaXJlY3RvcmllcyBtdXN0IGhhdmUgZWl0aGVyIDI3NzAgb3IgNzcwCisJdGVzdCAteiAiJChzZWQgLW4gLWUgIi9eZHJ3eHJ3W3N4XS0tLS9kIiAtZSAiL15kL3AiIGFjdHVhbCkiICYmCisKKwkjIHBvc3QtdXBkYXRlIGhvb2sgbXVzdCBiZSAwNzcwCisJdGVzdCAteiAiJChzZWQgLW4gLWUgIi9wb3N0LXVwZGF0ZS97CisJCS9eLXJ3eHJ3eC0tLS9kCisJCXAKKwl9IiBhY3R1YWwpIiAmJgorCisJIyBBbGwgZmlsZXMgaW5zaWRlIG9iamVjdHMgbXVzdCBiZSBhY2Nlc3NpYmxlIGJ5IHVzCisJdGVzdCAteiAiJChzZWQgLW4gLWUgIi9vYmplY3RzXC8veworCQkvXmQvZAorCQkvXi1yLi1yLi0tLS0vZAorCQlwCisJfSIgYWN0dWFsKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ3JlbW90ZSBpbml0IGRvZXMgbm90IHVzZSBjb25maWcgZnJvbSBjd2QnICcKKwlnaXQgY29uZmlnIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSAwNjY2ICYmCisJdW1hc2sgMDAyMiAmJgorCWdpdCBpbml0IC0tYmFyZSBjaGlsZC5naXQgJiYKKwllY2hvICItcnctci0tci0tIiA+ZXhwZWN0ICYmCisJdGVzdF9tb2RlYml0cyBjaGlsZC5naXQvY29uZmlnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdyZS1pbml0IHJlc3BlY3RzIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSAobG9jYWwpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLnNoYXJlZHJlcG9zaXRvcnkgMDY2NiAmJgorCXVtYXNrIDAwMjIgJiYKKwllY2hvIHdoYXRldmVyID50ZW1wbGF0ZXMvZm9vICYmCisJZ2l0IGluaXQgLS10ZW1wbGF0ZT10ZW1wbGF0ZXMgJiYKKwllY2hvICItcnctcnctcnctIiA+ZXhwZWN0ICYmCisJdGVzdF9tb2RlYml0cyAuZ2l0L2ZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAncmUtaW5pdCByZXNwZWN0cyBjb3JlLnNoYXJlZHJlcG9zaXRvcnkgKHJlbW90ZSknICcKKwlybSAtcmYgY2hpbGQuZ2l0ICYmCisJdW1hc2sgMDAyMiAmJgorCWdpdCBpbml0IC0tYmFyZSAtLXNoYXJlZD0wNjY2IGNoaWxkLmdpdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGNoaWxkLmdpdC9mb28gJiYKKwlnaXQgaW5pdCAtLWJhcmUgLS10ZW1wbGF0ZT10ZW1wbGF0ZXMgY2hpbGQuZ2l0ICYmCisJZWNobyAiLXJ3LXJ3LXJ3LSIgPmV4cGVjdCAmJgorCXRlc3RfbW9kZWJpdHMgY2hpbGQuZ2l0L2ZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAndGVtcGxhdGUgY2FuIHNldCBjb3JlLnNoYXJlZHJlcG9zaXRvcnknICcKKwlybSAtcmYgY2hpbGQuZ2l0ICYmCisJdW1hc2sgMDAyMiAmJgorCWdpdCBjb25maWcgY29yZS5zaGFyZWRyZXBvc2l0b3J5IDA2NjYgJiYKKwljcCAuZ2l0L2NvbmZpZyB0ZW1wbGF0ZXMvY29uZmlnICYmCisJZ2l0IGluaXQgLS1iYXJlIC0tdGVtcGxhdGU9dGVtcGxhdGVzIGNoaWxkLmdpdCAmJgorCWVjaG8gIi1ydy1ydy1ydy0iID5leHBlY3QgJiYKKwl0ZXN0X21vZGViaXRzIGNoaWxkLmdpdC9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwMi1yZXBvLXZlcnNpb24uc2ggYi90L3QxMzAyLXJlcG8tdmVyc2lvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZTRjZmYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTMwMi1yZXBvLXZlcnNpb24uc2gKQEAgLTAsMCArMSwxMTAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgTmd1eeG7hW4gVGjDoWkgTmfhu41jIER1eQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJlcG9zaXRvcnkgdmVyc2lvbiBjaGVjaycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY2F0ID50ZXN0LnBhdGNoIDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvdGVzdC50eHQgYi90ZXN0LnR4dAorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3Rlc3QudHh0CisJQEAgLTAsMCArMSBAQAorCSsxMjMKKwlFT0YKKworCXRlc3RfY3JlYXRlX3JlcG8gInRlc3QiICYmCisJdGVzdF9jcmVhdGVfcmVwbyAidGVzdDIiICYmCisJZ2l0IGNvbmZpZyAtLWZpbGU9dGVzdDIvLmdpdC9jb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiA5OQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgc2VsZWN0aW9uIG9uIG5vcm1hbCByZXBvcycgJworCWVjaG8gMCA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uID5hY3R1YWwgJiYKKwlnaXQgLUMgdGVzdCBjb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiA+YWN0dWFsMiAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgc2VsZWN0aW9uIG9uIHVuc3VwcG9ydGVkIHJlcG8nICcKKwkjIE1ha2Ugc3VyZSBpdCB3b3VsZCBzdG9wIGF0IHRlc3QyLCBub3QgdHJhc2gKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IC1DIHRlc3QyIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uID5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIG5vdCByZXF1aXJlZCBtb2RlJyAnCisJZ2l0IGFwcGx5IC0tc3RhdCB0ZXN0LnBhdGNoICYmCisJZ2l0IC1DIHRlc3QgYXBwbHkgLS1zdGF0IC4uL3Rlc3QucGF0Y2ggJiYKKwlnaXQgLUMgdGVzdDIgYXBwbHkgLS1zdGF0IC4uL3Rlc3QucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIHJlcXVpcmVkIG1vZGUnICcKKwlnaXQgYXBwbHkgLS1jaGVjayAtLWluZGV4IHRlc3QucGF0Y2ggJiYKKwlnaXQgLUMgdGVzdCBhcHBseSAtLWNoZWNrIC0taW5kZXggLi4vdGVzdC5wYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyB0ZXN0MiBhcHBseSAtLWNoZWNrIC0taW5kZXggLi4vdGVzdC5wYXRjaAorJworCitjaGVja19hbGxvdyAoKSB7CisJZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIgPmFjdHVhbCAmJgorCWVjaG8gLmdpdCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCitjaGVja19hYm9ydCAoKSB7CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIKK30KKworIyBhdm9pZCBnaXQtY29uZmlnLCBzaW5jZSBpdCBjYW5ub3QgYmUgdHJ1c3RlZCB0byBydW4KKyMgaW4gYSByZXBvc2l0b3J5IHdpdGggYSBicm9rZW4gdmVyc2lvbgorbWtjb25maWcgKCkgeworCWVjaG8gJ1tjb3JlXScgJiYKKwllY2hvICJyZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiA9ICQxIiAmJgorCXNoaWZ0ICYmCisKKwlpZiB0ZXN0ICQjIC1ndCAwOyB0aGVuCisJCWVjaG8gJ1tleHRlbnNpb25zXScgJiYKKwkJZm9yIGkgaW4gIiRAIjsgZG8KKwkJCWVjaG8gIiRpIgorCQlkb25lCisJZmkKK30KKword2hpbGUgcmVhZCBvdXRjb21lIHZlcnNpb24gZXh0ZW5zaW9uczsgZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkb3V0Y29tZSB2ZXJzaW9uPSR2ZXJzaW9uICRleHRlbnNpb25zIiAiCisJCW1rY29uZmlnICR2ZXJzaW9uICRleHRlbnNpb25zID4uZ2l0L2NvbmZpZyAmJgorCQljaGVja18ke291dGNvbWV9CisJIgorZG9uZSA8PFxFT0YKK2FsbG93IDAKK2FsbG93IDEKK2FsbG93IDEgbm9vcAorYWJvcnQgMSBuby1zdWNoLWV4dGVuc2lvbgorYWxsb3cgMCBuby1zdWNoLWV4dGVuc2lvbgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWNpb3VzLW9iamVjdHMgYWxsb3dlZCcgJworCW1rY29uZmlnIDEgcHJlY2lvdXNPYmplY3RzID4uZ2l0L2NvbmZpZyAmJgorCWNoZWNrX2FsbG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWNpb3VzLW9iamVjdHMgYmxvY2tzIGRlc3RydWN0aXZlIHJlcGFjaycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXBhY2sgLWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ290aGVyIHJlcGFja3MgYXJlIE9LJyAnCisJdGVzdF9jb21taXQgZm9vICYmCisJZ2l0IHJlcGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVjaW91cy1vYmplY3RzIGJsb2NrcyBwcnVuZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBwcnVuZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyBydW5zIHdpdGhvdXQgY29tcGxhaW50JyAnCisJZ2l0IGdjCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwMy13YWNreS1jb25maWcuc2ggYi90L3QxMzAzLXdhY2t5LWNvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMDAwZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTMwMy13YWNreS1jb25maWcuc2gKQEAgLTAsMCArMSwxMzQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHdhY2t5IGlucHV0IHRvIGdpdCBjb25maWcnCisuIC4vdGVzdC1saWIuc2gKKworIyBMZWF2aW5nIG9mZiB0aGUgbmV3bGluZSBpcyBpbnRlbnRpb25hbCEKK3NldHVwKCkgeworCShwcmludGYgIltzZWN0aW9uXVxuIiAmJgorCXByaW50ZiAiICBrZXkgPSBmb28iKSA+LmdpdC9jb25maWcKK30KKworIyAnY2hlY2sgc2VjdGlvbi5rZXkgdmFsdWUnIHZlcmlmaWVzIHRoYXQgdGhlIGVudHJ5IGZvciBzZWN0aW9uLmtleSBpcworIyAndmFsdWUnCitjaGVjaygpIHsKKwllY2hvICIkMiIgPmV4cGVjdGVkCisJZ2l0IGNvbmZpZyAtLWdldCAiJDEiID5hY3R1YWwgMj4mMQorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorfQorCisjICdjaGVjayBzZWN0aW9uLmtleSByZWdleCB2YWx1ZScgdmVyaWZpZXMgdGhhdCB0aGUgZW50cnkgZm9yCisjIHNlY3Rpb24ua2V5ICp0aGF0IG1hdGNoZXMgJ3JlZ2V4JyogaXMgJ3ZhbHVlJworY2hlY2tfcmVnZXgoKSB7CisJZWNobyAiJDMiID5leHBlY3RlZAorCWdpdCBjb25maWcgLS1nZXQgIiQxIiAiJDIiID5hY3R1YWwgMj4mMQorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZnkgc2FtZSBrZXknICcKKwlzZXR1cCAmJgorCWdpdCBjb25maWcgc2VjdGlvbi5rZXkgYmFyICYmCisJY2hlY2sgc2VjdGlvbi5rZXkgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBrZXkgaW4gc2FtZSBzZWN0aW9uJyAnCisJc2V0dXAgJiYKKwlnaXQgY29uZmlnIHNlY3Rpb24ub3RoZXIgYmFyICYmCisJY2hlY2sgc2VjdGlvbi5rZXkgZm9vICYmCisJY2hlY2sgc2VjdGlvbi5vdGhlciBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGtleSBpbiBkaWZmZXJlbnQgc2VjdGlvbicgJworCXNldHVwICYmCisJZ2l0IGNvbmZpZyBzZWN0aW9uMi5rZXkgYmFyICYmCisJY2hlY2sgc2VjdGlvbi5rZXkgZm9vICYmCisJY2hlY2sgc2VjdGlvbjIua2V5IGJhcgorJworCitTRUNUSU9OPSJ0ZXN0LnFcInNcXHNxJ3NwIGUua2V5IgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBzdXJlIGdpdCBjb25maWcgZXNjYXBlcyBzZWN0aW9uIG5hbWVzIHByb3Blcmx5JyAnCisJZ2l0IGNvbmZpZyAiJFNFQ1RJT04iIGJhciAmJgorCWNoZWNrICIkU0VDVElPTiIgYmFyCisnCisKK0xPTkdfVkFMVUU9JChwcmludGYgInglMDEwMjFkeCBhIiA3KQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGNyYXNoIG9uIHNwZWNpYWwgbG9uZyBjb25maWcgbGluZScgJworCXNldHVwICYmCisJZ2l0IGNvbmZpZyBzZWN0aW9uLmtleSAiJExPTkdfVkFMVUUiICYmCisJY2hlY2sgc2VjdGlvbi5rZXkgIiRMT05HX1ZBTFVFIgorJworCitzZXR1cF9tYW55KCkgeworCXNldHVwICYmCisJIyBUaGlzIHRpbWUgd2Ugd2FudCB0aGUgbmV3bGluZSBzbyB0aGF0IHdlIGNhbiB0YWNrIG9uIG1vcmUKKwkjIGVudHJpZXMuCisJZWNobyA+Pi5naXQvY29uZmlnICYmCisJIyBTZW1pLWVmZmljaWVudCB3YXkgb2YgY29uY2F0ZW5hdGluZyA1XjUgPSAzMTI1IGxpbmVzLiBOb3RlCisJIyB0aGF0IGJlY2F1c2UgJ3NldHVwJyBhbHJlYWR5IHB1dCBvbmUgbGluZSwgdGhpcyBtZWFucyAzMTI2CisJIyBlbnRyaWVzIGZvciBzZWN0aW9uLmtleSBpbiB0aGUgY29uZmlnIGZpbGUuCisJY2F0ID41dG8xIDw8LVxFT0YgJiYKKwkgIGtleSA9IGZvbworCSAga2V5ID0gZm9vCisJICBrZXkgPSBmb28KKwkgIGtleSA9IGZvbworCSAga2V5ID0gZm9vCisJRU9GCisJY2F0IDV0bzEgNXRvMSA1dG8xIDV0bzEgNXRvMSA+NXRvMiAmJgkgICAjIDI1CisJY2F0IDV0bzIgNXRvMiA1dG8yIDV0bzIgNXRvMiA+NXRvMyAmJgkgICAjIDEyNQorCWNhdCA1dG8zIDV0bzMgNXRvMyA1dG8zIDV0bzMgPjV0bzQgJiYJICAgIyA2MzUKKwljYXQgNXRvNCA1dG80IDV0bzQgNXRvNCA1dG80ID4+LmdpdC9jb25maWcgIyAzMTI1Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCBtYW55IGVudHJpZXMnICcKKwlzZXR1cF9tYW55ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgc2VjdGlvbi5rZXkgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMxMjYgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCBtYW55IGVudHJpZXMgYnkgcmVnZXgnICcKKwlzZXR1cF9tYW55ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInNlYy4qa2UuIiA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMzEyNiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGFuZCByZXBsYWNlIG9uZSBvZiBtYW55IGVudHJpZXMnICcKKwlzZXR1cF9tYW55ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzZWN0aW9uLmtleSBiYXIgJiYKKwljaGVja19yZWdleCBzZWN0aW9uLmtleSAiYi4qciIgYmFyICYmCisJZ2l0IGNvbmZpZyBzZWN0aW9uLmtleSBiZWVyICJiLipyIiAmJgorCWNoZWNrX3JlZ2V4IHNlY3Rpb24ua2V5ICJiLipyIiBiZWVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2UgbWFueSBlbnRyaWVzJyAnCisJc2V0dXBfbWFueSAmJgorCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBzZWN0aW9uLmtleSBiYXIgJiYKKwljaGVjayBzZWN0aW9uLmtleSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zZXQgbWFueSBlbnRyaWVzJyAnCisJc2V0dXBfbWFueSAmJgorCWdpdCBjb25maWcgLS11bnNldC1hbGwgc2VjdGlvbi5rZXkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIHNlY3Rpb24ua2V5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWRkIGFwcGVuZHMgbmV3IHZhbHVlIGFmdGVyIGV4aXN0aW5nIGVtcHR5IHZhbHVlJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCisKKwlmb29sCisJcm9sbAorCUVPRgorCWNwIC5naXQvY29uZmlnIC5naXQvY29uZmlnLm9sZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgLmdpdC9jb25maWcub2xkIC5naXQvY29uZmlnIiAmJgorCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtmb29dCisJCWJhegorCQliYXogPQorCQliYXogPSBmb29sCisJRU9GCisJZ2l0IGNvbmZpZyAtLWFkZCBmb28uYmF6IHJvbGwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCBmb28uYmF6ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwNC1kZWZhdWx0LWFjbC5zaCBiL3QvdDEzMDQtZGVmYXVsdC1hY2wuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzM1ZDNmMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEzMDQtZGVmYXVsdC1hY2wuc2gKQEAgLTAsMCArMSw2NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBNYXR0aGlldSBNb3kKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZXBvc2l0b3J5IHdpdGggZGVmYXVsdCBBQ0wnCisKKyMgQ3JlYXRlIHRoZSB0ZXN0IHJlcG8gd2l0aCByZXN0cmljdGl2ZSB1bWFzaworIyA9PiB0aGlzIG11c3QgY29tZSBiZWZvcmUgLiAuL3Rlc3QtbGliLnNoCit1bWFzayAwNzcKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgV2UgbmVlZCBhbiBhcmJpdHJhcnkgb3RoZXIgdXNlciBnaXZlIHBlcm1pc3Npb24gdG8gdXNpbmcgQUNMcy4gcm9vdAorIyBpcyBhIGdvb2QgY2FuZGlkYXRlOiBleGlzdHMgb24gYWxsIHVuaWNlcywgYW5kIGl0IGhhcyBwZXJtaXNzaW9uCisjIGFueXdheSwgc28gd2UgZG9uJ3QgY3JlYXRlIGEgc2VjdXJpdHkgaG9sZSBydW5uaW5nIHRoZSB0ZXN0c3VpdGUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyBmb3IgYSB3b3JraW5nIGFjbCBzZXR1cCcgJworCWlmIHNldGZhY2wgLW0gZDptOnJ3eCAtbSB1OnJvb3Q6cnd4IC4gJiYKKwkgICBnZXRmYWNsIC4gfCBncmVwIHVzZXI6cm9vdDpyd3ggJiYKKwkgICB0b3VjaCBzaG91bGQtaGF2ZS1yZWFkYWJsZS1hY2wgJiYKKwkgICBnZXRmYWNsIHNob3VsZC1oYXZlLXJlYWRhYmxlLWFjbCB8IGVncmVwICJtYXNrOjo/cnctIgorCXRoZW4KKwkJdGVzdF9zZXRfcHJlcmVxIFNFVEZBQ0wKKwlmaQorJworCitpZiB0ZXN0IC16ICIkTE9HTkFNRSIKK3RoZW4KKwlMT0dOQU1FPSIke1VTRVI6LSQoaWQgLXUgLW4pfSIKK2ZpCisKK2NoZWNrX3Blcm1zX2FuZF9hY2wgKCkgeworCXRlc3QgLXIgIiQxIiAmJgorCWdldGZhY2wgIiQxIiA+IGFjdHVhbCAmJgorCWdyZXAgLXEgInVzZXI6cm9vdDpyd3giIGFjdHVhbCAmJgorCWdyZXAgLXEgInVzZXI6JHtMT0dOQU1FfTpyd3giIGFjdHVhbCAmJgorCWVncmVwICJtYXNrOjo/ci0tIiBhY3R1YWwgPiAvZGV2L251bGwgMj4mMSAmJgorCWdyZXAgLXEgImdyb3VwOjotLS0iIGFjdHVhbCB8fCBmYWxzZQorfQorCitkaXJzX3RvX3NldD0iLi8gLmdpdC8gLmdpdC9vYmplY3RzLyAuZ2l0L29iamVjdHMvcGFjay8iCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0VURkFDTCAnU2V0dXAgdGVzdCByZXBvJyAnCisJc2V0ZmFjbCAtbSBkOnU6OnJ3eCxkOmc6Oi0tLSxkOm86LS0tLGQ6bTpyd3ggJGRpcnNfdG9fc2V0ICYmCisJc2V0ZmFjbCAtbSBtOnJ3eCAgICAgICAgICAgICAgICRkaXJzX3RvX3NldCAmJgorCXNldGZhY2wgLW0gdTpyb290OnJ3eCAgICAgICAgICAkZGlyc190b19zZXQgJiYKKwlzZXRmYWNsIC1tIGQ6dToiJExPR05BTUUiOnJ3eCAgJGRpcnNfdG9fc2V0ICYmCisJc2V0ZmFjbCAtbSBkOnU6cm9vdDpyd3ggICAgICAgICRkaXJzX3RvX3NldCAmJgorCisJdG91Y2ggZmlsZS50eHQgJiYKKwlnaXQgYWRkIGZpbGUudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTRVRGQUNMICdPYmplY3RzIGNyZWF0aW9uIGRvZXMgbm90IGJyZWFrIEFDTHMgd2l0aCByZXN0cmljdGl2ZSB1bWFzaycgJworCSMgU0hBMSBmb3IgZW1wdHkgYmxvYgorCWNoZWNrX3Blcm1zX2FuZF9hY2wgLmdpdC9vYmplY3RzLyQoZWNobyAkRU1QVFlfQkxPQiB8IHNlZCAtZSAicyxeXCguLlwpLFwxLywiKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNFVEZBQ0wgJ2dpdCBnYyBkb2VzIG5vdCBicmVhayBBQ0xzIHdpdGggcmVzdHJpY3RpdmUgdW1hc2snICcKKwlnaXQgZ2MgJiYKKwljaGVja19wZXJtc19hbmRfYWNsIC5naXQvb2JqZWN0cy9wYWNrLyoucGFjaworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEzMDUtY29uZmlnLWluY2x1ZGUuc2ggYi90L3QxMzA1LWNvbmZpZy1pbmNsdWRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxZTFiMjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMzA1LWNvbmZpZy1pbmNsdWRlLnNoCkBAIC0wLDAgKzEsMzYxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjb25maWcgZmlsZSBpbmNsdWRlIGRpcmVjdGl2ZXMnCisuIC4vdGVzdC1saWIuc2gKKworIyBGb3JjZSBzZXR1cF9leHBsaWNpdF9naXRfZGlyKCkgdG8gcnVuIHVudGlsIHRoZSBlbmQuIFRoaXMgaXMgbmVlZGVkCisjIGJ5IHNvbWUgdGVzdHMgdG8gbWFrZSBzdXJlIHJlYWxfcGF0aCgpIGlzIGNhbGxlZCBvbiAkR0lUX0RJUi4gVGhlCisjIGNhbGxlciBuZWVkcyB0byBtYWtlIHN1cmUgZ2l0IGNvbW1hbmRzIGFyZSBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeQorIyB0aG91Z2ggb3IgcmVhbF9wYXRoKCkgd2lsbCBub3QgYmUgY2FsbGVkLgorZm9yY2Vfc2V0dXBfZXhwbGljaXRfZ2l0X2RpcigpIHsKKyAgICBHSVRfRElSPSIkKHB3ZCkvLmdpdCIKKyAgICBHSVRfV09SS19UUkVFPSIkKHB3ZCkiCisgICAgZXhwb3J0IEdJVF9ESVIgR0lUX1dPUktfVFJFRQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNsdWRlIGZpbGUgYnkgYWJzb2x1dGUgcGF0aCcgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gXCIkKHB3ZCkvb25lXCIiID4uZ2l0Y29uZmlnICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHRlc3Qub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY2x1ZGUgZmlsZSBieSByZWxhdGl2ZSBwYXRoJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSBvbmUiID4uZ2l0Y29uZmlnICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHRlc3Qub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYWluZWQgcmVsYXRpdmUgcGF0aHMnICcKKwlta2RpciBzdWJkaXIgJiYKKwllY2hvICJbdGVzdF10aHJlZSA9IDMiID5zdWJkaXIvdGhyZWUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gdGhyZWUiID5zdWJkaXIvdHdvICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aCA9IHN1YmRpci90d28iID4uZ2l0Y29uZmlnICYmCisJZWNobyAzID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHRlc3QudGhyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jbHVkZSBwYXRocyBnZXQgdGlsZGUtZXhwYW5zaW9uJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSB+L29uZSIgPi5naXRjb25maWcgJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgdGVzdC5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jbHVkZSBvcHRpb25zIGNhbiBzdGlsbCBiZSBleGFtaW5lZCcgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gb25lIiA+LmdpdGNvbmZpZyAmJgorCWVjaG8gb25lID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIGluY2x1ZGUucGF0aCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0aW5nIGluY2x1ZGVzIG9wdGlvbiBhbmQgZXhwYW5zaW9uJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSBvbmUiID4uZ2l0Y29uZmlnICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWluY2x1ZGUucGF0aD1vbmUKKwl0ZXN0Lm9uZT0xCisJRU9GCisJZ2l0IGNvbmZpZyAtLWxpc3QgPmFjdHVhbC5mdWxsICYmCisJZ3JlcCAtdiAtZSBeY29yZSAtZSBeZXh0ZW5zaW9ucyBhY3R1YWwuZnVsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUgZmlsZSBsb29rdXAgZG9lcyBub3QgZXhwYW5kIGluY2x1ZGVzIGJ5IGRlZmF1bHQnICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aCA9IG9uZSIgPi5naXRjb25maWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRjb25maWcgdGVzdC5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2xvYmFsIHRlc3Qub25lICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0taW5jbHVkZXMgLWYgLmdpdGNvbmZpZyB0ZXN0Lm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUgZmlsZSBsaXN0IGRvZXMgbm90IGV4cGFuZCBpbmNsdWRlcyBieSBkZWZhdWx0JyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSBvbmUiID4uZ2l0Y29uZmlnICYmCisJZWNobyAiaW5jbHVkZS5wYXRoPW9uZSIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLWYgLmdpdGNvbmZpZyAtLWxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyBjb25maWcgZmlsZSBkb2VzIG5vdCBleHBhbmQgaW5jbHVkZXMnICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aCA9IG9uZSIgPi5naXRjb25maWcgJiYKKwlnaXQgY29uZmlnIHRlc3QudHdvIDIgJiYKKwllY2hvIDIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1uby1pbmNsdWRlcyB0ZXN0LnR3byA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1uby1pbmNsdWRlcyB0ZXN0Lm9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGFmZmVjdCBpbmNsdWRlcycgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gb25lIiA+LmdpdGNvbmZpZyAmJgorCWdpdCBjb25maWcgdGVzdC5vbmUgMiAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtZiBvbmUgdGVzdC5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJMQorCTIKKwlFT0YKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCB0ZXN0Lm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIGluY2x1ZGUgZmlsZXMgYXJlIGlnbm9yZWQnICcKKwljYXQgPi5naXRjb25maWcgPDwtXEVPRiAmJgorCVtpbmNsdWRlXXBhdGggPSBub24tZXhpc3RlbnQKKwlbdGVzdF12YWx1ZSA9IHllcworCUVPRgorCWVjaG8geWVzID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHRlc3QudmFsdWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb2x1dGUgaW5jbHVkZXMgZnJvbSBjb21tYW5kIGxpbmUgd29yaycgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCWdpdCAtYyBpbmNsdWRlLnBhdGg9IiQocHdkKS9vbmUiIGNvbmZpZyB0ZXN0Lm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBpbmNsdWRlcyBmcm9tIGNvbW1hbmQgbGluZSBmYWlsJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBpbmNsdWRlLnBhdGg9b25lIGNvbmZpZyB0ZXN0Lm9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYnNvbHV0ZSBpbmNsdWRlcyBmcm9tIGJsb2JzIHdvcmsnICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aD0kKHB3ZCkvb25lIiA+YmxvYiAmJgorCWJsb2I9JChnaXQgaGFzaC1vYmplY3QgLXcgYmxvYikgJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1ibG9iPSRibG9iIHRlc3Qub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbGF0aXZlIGluY2x1ZGVzIGZyb20gYmxvYnMgZmFpbCcgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoPW9uZSIgPmJsb2IgJiYKKwlibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IC13IGJsb2IpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJsb2I9JGJsb2IgdGVzdC5vbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb2x1dGUgaW5jbHVkZXMgZnJvbSBzdGRpbiB3b3JrJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aD1cIiQocHdkKS9vbmVcIiIgfAorCWdpdCBjb25maWcgLS1maWxlIC0gdGVzdC5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVsYXRpdmUgaW5jbHVkZXMgZnJvbSBzdGRpbiBsaW5lIGZhaWwnICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aD1vbmUiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZmlsZSAtIHRlc3Qub25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmRpdGlvbmFsIGluY2x1ZGUsIGJvdGggdW5hbmNob3JlZCcgJworCWdpdCBpbml0IGZvbyAmJgorCSgKKwkJY2QgZm9vICYmCisJCWVjaG8gIltpbmNsdWRlSWYgXCJnaXRkaXI6Zm9vL1wiXXBhdGg9YmFyIiA+Pi5naXQvY29uZmlnICYmCisJCWVjaG8gIlt0ZXN0XW9uZT0xIiA+LmdpdC9iYXIgJiYKKwkJZWNobyAxID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyB0ZXN0Lm9uZSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmRpdGlvbmFsIGluY2x1ZGUsICRIT01FIGV4cGFuc2lvbicgJworCSgKKwkJY2QgZm9vICYmCisJCWVjaG8gIltpbmNsdWRlSWYgXCJnaXRkaXI6fi9mb28vXCJdcGF0aD1iYXIyIiA+Pi5naXQvY29uZmlnICYmCisJCWVjaG8gIlt0ZXN0XXR3bz0yIiA+LmdpdC9iYXIyICYmCisJCWVjaG8gMiA+ZXhwZWN0ICYmCisJCWdpdCBjb25maWcgdGVzdC50d28gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25kaXRpb25hbCBpbmNsdWRlLCBmdWxsIHBhdHRlcm4nICcKKwkoCisJCWNkIGZvbyAmJgorCQllY2hvICJbaW5jbHVkZUlmIFwiZ2l0ZGlyOioqL2Zvby8qKlwiXXBhdGg9YmFyMyIgPj4uZ2l0L2NvbmZpZyAmJgorCQllY2hvICJbdGVzdF10aHJlZT0zIiA+LmdpdC9iYXIzICYmCisJCWVjaG8gMyA+ZXhwZWN0ICYmCisJCWdpdCBjb25maWcgdGVzdC50aHJlZSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmRpdGlvbmFsIGluY2x1ZGUsIHJlbGF0aXZlIHBhdGgnICcKKwllY2hvICJbaW5jbHVkZUlmIFwiZ2l0ZGlyOi4vZm9vLy5naXRcIl1wYXRoPWJhcjQiID4+LmdpdGNvbmZpZyAmJgorCWVjaG8gIlt0ZXN0XWZvdXI9NCIgPmJhcjQgJiYKKwkoCisJCWNkIGZvbyAmJgorCQllY2hvIDQgPmV4cGVjdCAmJgorCQlnaXQgY29uZmlnIHRlc3QuZm91ciA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmRpdGlvbmFsIGluY2x1ZGUsIGJvdGggdW5hbmNob3JlZCwgaWNhc2UnICcKKwkoCisJCWNkIGZvbyAmJgorCQllY2hvICJbaW5jbHVkZUlmIFwiZ2l0ZGlyL2k6Rk9PL1wiXXBhdGg9YmFyNSIgPj4uZ2l0L2NvbmZpZyAmJgorCQllY2hvICJbdGVzdF1maXZlPTUiID4uZ2l0L2JhcjUgJiYKKwkJZWNobyA1ID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyB0ZXN0LmZpdmUgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25kaXRpb25hbCBpbmNsdWRlLCBlYXJseSBjb25maWcgcmVhZGluZycgJworCSgKKwkJY2QgZm9vICYmCisJCWVjaG8gIltpbmNsdWRlSWYgXCJnaXRkaXI6Zm9vL1wiXXBhdGg9YmFyNiIgPj4uZ2l0L2NvbmZpZyAmJgorCQllY2hvICJbdGVzdF1zaXg9NiIgPi5naXQvYmFyNiAmJgorCQllY2hvIDYgPmV4cGVjdCAmJgorCQl0ZXN0LXRvb2wgY29uZmlnIHJlYWRfZWFybHlfY29uZmlnIHRlc3Quc2l4ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZGl0aW9uYWwgaW5jbHVkZSB3aXRoIC8qKi8nICcKKwlSRVBPPWZvby9iYXIvcmVwbyAmJgorCWdpdCBpbml0ICRSRVBPICYmCisJY2F0ID4+JFJFUE8vLmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtpbmNsdWRlSWYgImdpdGRpcjoqKi9mb28vKiovYmFyLyoqIl0KKwlwYXRoPWJhcjcKKwlFT0YKKwllY2hvICJbdGVzdF1zZXZlbj03IiA+JFJFUE8vLmdpdC9iYXI3ICYmCisJZWNobyA3ID5leHBlY3QgJiYKKwlnaXQgLUMgJFJFUE8gY29uZmlnIHRlc3Quc2V2ZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY29uZGl0aW9uYWwgaW5jbHVkZSwgc2V0IHVwIHN5bWxpbmtlZCAkSE9NRScgJworCW1rZGlyIHJlYWwtaG9tZSAmJgorCWxuIC1zIHJlYWwtaG9tZSBob21lICYmCisJKAorCQlIT01FPSIkVFJBU0hfRElSRUNUT1JZL2hvbWUiICYmCisJCWV4cG9ydCBIT01FICYmCisJCWNkICIkSE9NRSIgJiYKKworCQlnaXQgaW5pdCBmb28gJiYKKwkJY2QgZm9vICYmCisJCW1rZGlyIHN1YgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY29uZGl0aW9uYWwgaW5jbHVkZSwgJEhPTUUgZXhwYW5zaW9uIHdpdGggc3ltbGlua3MnICcKKwkoCisJCUhPTUU9IiRUUkFTSF9ESVJFQ1RPUlkvaG9tZSIgJiYKKwkJZXhwb3J0IEhPTUUgJiYKKwkJY2QgIiRIT01FIi9mb28gJiYKKworCQllY2hvICJbaW5jbHVkZUlmIFwiZ2l0ZGlyOn4vZm9vL1wiXXBhdGg9YmFyMiIgPj4uZ2l0L2NvbmZpZyAmJgorCQllY2hvICJbdGVzdF10d289MiIgPi5naXQvYmFyMiAmJgorCQllY2hvIDIgPmV4cGVjdCAmJgorCQlmb3JjZV9zZXR1cF9leHBsaWNpdF9naXRfZGlyICYmCisJCWdpdCAtQyBzdWIgY29uZmlnIHRlc3QudHdvID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY29uZGl0aW9uYWwgaW5jbHVkZSwgcmVsYXRpdmUgcGF0aCB3aXRoIHN5bWxpbmtzJyAnCisJZWNobyAiW2luY2x1ZGVJZiBcImdpdGRpcjouL2Zvby8uZ2l0XCJdcGF0aD1iYXI0IiA+aG9tZS8uZ2l0Y29uZmlnICYmCisJZWNobyAiW3Rlc3RdZm91cj00IiA+aG9tZS9iYXI0ICYmCisJKAorCQlIT01FPSIkVFJBU0hfRElSRUNUT1JZL2hvbWUiICYmCisJCWV4cG9ydCBIT01FICYmCisJCWNkICIkSE9NRSIvZm9vICYmCisKKwkJZWNobyA0ID5leHBlY3QgJiYKKwkJZm9yY2Vfc2V0dXBfZXhwbGljaXRfZ2l0X2RpciAmJgorCQlnaXQgLUMgc3ViIGNvbmZpZyB0ZXN0LmZvdXIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjb25kaXRpb25hbCBpbmNsdWRlLCBnaXRkaXIgbWF0Y2hpbmcgc3ltbGluaycgJworCWxuIC1zIGZvbyBiYXIgJiYKKwkoCisJCWNkIGJhciAmJgorCQllY2hvICJbaW5jbHVkZUlmIFwiZ2l0ZGlyOmJhci9cIl1wYXRoPWJhcjciID4+LmdpdC9jb25maWcgJiYKKwkJZWNobyAiW3Rlc3Rdc2V2ZW49NyIgPi5naXQvYmFyNyAmJgorCQllY2hvIDcgPmV4cGVjdCAmJgorCQlnaXQgY29uZmlnIHRlc3Quc2V2ZW4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjb25kaXRpb25hbCBpbmNsdWRlLCBnaXRkaXIgbWF0Y2hpbmcgc3ltbGluaywgaWNhc2UnICcKKwkoCisJCWNkIGJhciAmJgorCQllY2hvICJbaW5jbHVkZUlmIFwiZ2l0ZGlyL2k6QkFSL1wiXXBhdGg9YmFyOCIgPj4uZ2l0L2NvbmZpZyAmJgorCQllY2hvICJbdGVzdF1laWdodD04IiA+LmdpdC9iYXI4ICYmCisJCWVjaG8gOCA+ZXhwZWN0ICYmCisJCWdpdCBjb25maWcgdGVzdC5laWdodCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmRpdGlvbmFsIGluY2x1ZGUsIG9uYnJhbmNoJyAnCisJZWNobyAiW2luY2x1ZGVJZiBcIm9uYnJhbmNoOmZvby1icmFuY2hcIl1wYXRoPWJhcjkiID4+LmdpdC9jb25maWcgJiYKKwllY2hvICJbdGVzdF1uaW5lPTkiID4uZ2l0L2JhcjkgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyB0ZXN0Lm5pbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZm9vLWJyYW5jaCAmJgorCWVjaG8gOSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyB0ZXN0Lm5pbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZGl0aW9uYWwgaW5jbHVkZSwgb25icmFuY2gsIHdpbGRjYXJkJyAnCisJZWNobyAiW2luY2x1ZGVJZiBcIm9uYnJhbmNoOj9vby0qLyoqXCJdcGF0aD1iYXIxMCIgPj4uZ2l0L2NvbmZpZyAmJgorCWVjaG8gIlt0ZXN0XXRlbj0xMCIgPi5naXQvYmFyMTAgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbm90LWZvby1icmFuY2gvYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgdGVzdC50ZW4gJiYKKworCWVjaG8gMTAgPmV4cGVjdCAmJgorCWdpdCBjaGVja291dCAtYiBmb28tYnJhbmNoL2EvYi9jICYmCisJZ2l0IGNvbmZpZyB0ZXN0LnRlbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIG1vby1iYXIvYSAmJgorCWdpdCBjb25maWcgdGVzdC50ZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZGl0aW9uYWwgaW5jbHVkZSwgb25icmFuY2gsIGltcGxpY2l0IC8qKiBmb3IgLycgJworCWVjaG8gIltpbmNsdWRlSWYgXCJvbmJyYW5jaDpmb28tZGlyL1wiXXBhdGg9YmFyMTEiID4+LmdpdC9jb25maWcgJiYKKwllY2hvICJbdGVzdF1lbGV2ZW49MTEiID4uZ2l0L2JhcjExICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5vdC1mb28tZGlyL2EgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIHRlc3QuZWxldmVuICYmCisKKwllY2hvIDExID5leHBlY3QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZm9vLWRpci9hL2IvYyAmJgorCWdpdCBjb25maWcgdGVzdC5lbGV2ZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jbHVkZSBjeWNsZXMgYXJlIGRldGVjdGVkJyAnCisJZ2l0IGluaXQgLS1iYXJlIGN5Y2xlICYmCisJZ2l0IC1DIGN5Y2xlIGNvbmZpZyBpbmNsdWRlLnBhdGggY3ljbGUgJiYKKwlnaXQgY29uZmlnIC1mIGN5Y2xlL2N5Y2xlIGluY2x1ZGUucGF0aCBjb25maWcgJiYKKwl0ZXN0X211c3RfZmFpbCBcCisJCWVudiBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTj1mYWxzZSBcCisJCWdpdCAtQyBjeWNsZSBjb25maWcgLS1nZXQtYWxsIHRlc3QudmFsdWUgMj5zdGRlcnIgJiYKKwlncmVwICJleGNlZWRlZCBtYXhpbXVtIGluY2x1ZGUgZGVwdGgiIHN0ZGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEzMDYteGRnLWZpbGVzLnNoIGIvdC90MTMwNi14ZGctZmlsZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGQ4N2I0MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEzMDYteGRnLWZpbGVzLnNoCkBAIC0wLDAgKzEsMTk1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyIFZhbGVudGluIER1cGVycmF5LCBMdWNpZW4gS29uZywgRnJhbmNrIEpvbmFzLAorIwkJICAgICBUaG9tYXMgTmd1eSwgS2hvaSBOZ3V5ZW4KKyMJCSAgICAgR3Jlbm9ibGUgSU5QIEVuc2ltYWcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nQ29tcGF0aWJpbGl0eSB3aXRoICRYREdfQ09ORklHX0hPTUUvZ2l0LyBmaWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgY29uZmlnOiB4ZGcgZmlsZSBleGlzdHMgYW5kIH4vLmdpdGNvbmZpZyBkb2VzbidcJyd0JyAnCisJbWtkaXIgLXAgLmNvbmZpZy9naXQgJiYKKwllY2hvICJbYWxpYXNdIiA+LmNvbmZpZy9naXQvY29uZmlnICYmCisJZWNobyAiCW15YWxpYXMgPSAhZWNobyBpbl9jb25maWciID4+LmNvbmZpZy9naXQvY29uZmlnICYmCisJZWNobyBpbl9jb25maWcgPmV4cGVjdGVkICYmCisJZ2l0IG15YWxpYXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgY29uZmlnOiB4ZGcgZmlsZSBleGlzdHMgYW5kIH4vLmdpdGNvbmZpZyBleGlzdHMnICcKKwk+LmdpdGNvbmZpZyAmJgorCWVjaG8gIlthbGlhc10iID4uZ2l0Y29uZmlnICYmCisJZWNobyAiCW15YWxpYXMgPSAhZWNobyBpbl9naXRjb25maWciID4+LmdpdGNvbmZpZyAmJgorCWVjaG8gaW5fZ2l0Y29uZmlnID5leHBlY3RlZCAmJgorCWdpdCBteWFsaWFzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIHdpdGggLS1nZXQ6IHhkZyBmaWxlIGV4aXN0cyBhbmQgfi8uZ2l0Y29uZmlnIGRvZXNuJ1wnJ3QnICcKKwlybSAuZ2l0Y29uZmlnICYmCisJZWNobyAiW3VzZXJdIiA+LmNvbmZpZy9naXQvY29uZmlnICYmCisJZWNobyAiCW5hbWUgPSByZWFkX2NvbmZpZyIgPj4uY29uZmlnL2dpdC9jb25maWcgJiYKKwllY2hvIHJlYWRfY29uZmlnID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgLS1nZXQgdXNlci5uYW1lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIiRYREdfQ09ORklHX0hPTUUgb3ZlcnJpZGVzICRIT01FLy5jb25maWcvZ2l0JyAnCisJbWtkaXIgLXAgIiRIT01FIi94ZGcvZ2l0ICYmCisJZWNobyAiW3VzZXJdbmFtZSA9IGluX3hkZyIgPiIkSE9NRSIveGRnL2dpdC9jb25maWcgJiYKKwllY2hvIGluX3hkZyA+ZXhwZWN0ZWQgJiYKKwlYREdfQ09ORklHX0hPTUU9IiRIT01FIi94ZGcgZ2l0IGNvbmZpZyAtLWdldC1hbGwgdXNlci5uYW1lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZCB3aXRoIC0tZ2V0OiB4ZGcgZmlsZSBleGlzdHMgYW5kIH4vLmdpdGNvbmZpZyBleGlzdHMnICcKKwk+LmdpdGNvbmZpZyAmJgorCWVjaG8gIlt1c2VyXSIgPi5naXRjb25maWcgJiYKKwllY2hvICIJbmFtZSA9IHJlYWRfZ2l0Y29uZmlnIiA+Pi5naXRjb25maWcgJiYKKwllY2hvIHJlYWRfZ2l0Y29uZmlnID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgLS1nZXQgdXNlci5uYW1lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIHdpdGggLS1saXN0OiB4ZGcgZmlsZSBleGlzdHMgYW5kIH4vLmdpdGNvbmZpZyBkb2VzbidcJyd0JyAnCisJcm0gLmdpdGNvbmZpZyAmJgorCWVjaG8gdXNlci5uYW1lPXJlYWRfY29uZmlnID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgLS1saXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIHdpdGggLS1saXN0OiB4ZGcgZmlsZSBleGlzdHMgYW5kIH4vLmdpdGNvbmZpZyBleGlzdHMnICcKKwk+LmdpdGNvbmZpZyAmJgorCWVjaG8gIlt1c2VyXSIgPi5naXRjb25maWcgJiYKKwllY2hvICIJbmFtZSA9IHJlYWRfZ2l0Y29uZmlnIiA+Pi5naXRjb25maWcgJiYKKwllY2hvIHVzZXIubmFtZT1yZWFkX2dpdGNvbmZpZyA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIC0tbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2V0dXAnICcKKwlnaXQgaW5pdCBnaXQgJiYKKwljZCBnaXQgJiYKKwllY2hvIGZvbyA+dG9fYmVfZXhjbHVkZWQKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdFeGNsdXNpb24gb2YgYSBmaWxlIGluIHRoZSBYREcgaWdub3JlIGZpbGUnICcKKwlta2RpciAtcCAiJEhPTUUiLy5jb25maWcvZ2l0LyAmJgorCWVjaG8gdG9fYmVfZXhjbHVkZWQgPiIkSE9NRSIvLmNvbmZpZy9naXQvaWdub3JlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCB0b19iZV9leGNsdWRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICckWERHX0NPTkZJR19IT01FIG92ZXJyaWRlcyAkSE9NRS8uY29uZmlnL2dpdC9pZ25vcmUnICcKKwlta2RpciAtcCAiJEhPTUUiL3hkZy9naXQgJiYKKwllY2hvIGNvbnRlbnQgPmV4Y2x1ZGVkX2J5X3hkZ19vbmx5ICYmCisJZWNobyBleGNsdWRlZF9ieV94ZGdfb25seSA+IiRIT01FIi94ZGcvZ2l0L2lnbm9yZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYWQtdHJlZSAtLWVtcHR5IiAmJgorCShYREdfQ09ORklHX0hPTUU9IiRIT01FL3hkZyIgJiYKKwkgZXhwb3J0IFhER19DT05GSUdfSE9NRSAmJgorCSBnaXQgYWRkIHRvX2JlX2V4Y2x1ZGVkICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgZXhjbHVkZWRfYnlfeGRnX29ubHkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0V4Y2x1c2lvbiBpbiBib3RoIFhERyBhbmQgbG9jYWwgaWdub3JlIGZpbGVzJyAnCisJZWNobyB0b19iZV9leGNsdWRlZCA+LmdpdGlnbm9yZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgdG9fYmVfZXhjbHVkZWQKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdFeGNsdXNpb24gaW4gYSBub24tWERHIGdsb2JhbCBpZ25vcmUgZmlsZScgJworCXJtIC5naXRpZ25vcmUgJiYKKwllY2hvID4iJEhPTUUiLy5jb25maWcvZ2l0L2lnbm9yZSAmJgorCWVjaG8gdG9fYmVfZXhjbHVkZWQgPiIkSE9NRSIvbXlfZ2l0aWdub3JlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmV4Y2x1ZGVzZmlsZSAiJEhPTUUiL215X2dpdGlnbm9yZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgdG9fYmVfZXhjbHVkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2tpbmcgWERHIGlnbm9yZSBmaWxlIHdoZW4gSE9NRSBpcyB1bnNldCcgJworCShzYW5lX3Vuc2V0IEhPTUUgJiYKKwkgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUuZXhjbHVkZXNmaWxlICYmCisJIGdpdCBscy1maWxlcyAtLWV4Y2x1ZGUtc3RhbmRhcmQgLS1pZ25vcmVkID5hY3R1YWwpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVja2luZyBhdHRyaWJ1dGVzIGluIHRoZSBYREcgYXR0cmlidXRlcyBmaWxlJyAnCisJZWNobyBmb28gPmYgJiYKKwlnaXQgY2hlY2stYXR0ciAtYSBmID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgLWVxIDAgYWN0dWFsICYmCisJZWNobyAiZiBhdHRyX2YiID4iJEhPTUUiLy5jb25maWcvZ2l0L2F0dHJpYnV0ZXMgJiYKKwllY2hvICJmOiBhdHRyX2Y6IHNldCIgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrLWF0dHIgLWEgZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNraW5nIFhERyBhdHRyaWJ1dGVzIHdoZW4gSE9NRSBpcyB1bnNldCcgJworCShzYW5lX3Vuc2V0IEhPTUUgJiYKKwkgZ2l0IGNoZWNrLWF0dHIgLWEgZiA+YWN0dWFsKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJFhER19DT05GSUdfSE9NRSBvdmVycmlkZXMgJEhPTUUvLmNvbmZpZy9naXQvYXR0cmlidXRlcycgJworCW1rZGlyIC1wICIkSE9NRSIveGRnL2dpdCAmJgorCWVjaG8gImYgYXR0cl9mPXhkZyIgPiIkSE9NRSIveGRnL2dpdC9hdHRyaWJ1dGVzICYmCisJZWNobyAiZjogYXR0cl9mOiB4ZGciID5leHBlY3RlZCAmJgorCVhER19DT05GSUdfSE9NRT0iJEhPTUUveGRnIiBnaXQgY2hlY2stYXR0ciAtYSBmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2tpbmcgYXR0cmlidXRlcyBpbiBib3RoIFhERyBhbmQgbG9jYWwgYXR0cmlidXRlcyBmaWxlcycgJworCWVjaG8gImYgLWF0dHJfZiIgPi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiZjogYXR0cl9mOiB1bnNldCIgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrLWF0dHIgLWEgZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2tpbmcgYXR0cmlidXRlcyBpbiBhIG5vbi1YREcgZ2xvYmFsIGF0dHJpYnV0ZXMgZmlsZScgJworCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiZiBhdHRyX2Y9dGVzdCIgPiIkSE9NRSIvbXlfZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgY29yZS5hdHRyaWJ1dGVzZmlsZSAiJEhPTUUiL215X2dpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJmOiBhdHRyX2Y6IHRlc3QiID5leHBlY3RlZCAmJgorCWdpdCBjaGVjay1hdHRyIC1hIGYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlOiB4ZGcgZmlsZSBleGlzdHMgYW5kIH4vLmdpdGNvbmZpZyBkb2VzbidcJyd0JyAnCisJbWtkaXIgLXAgIiRIT01FIi8uY29uZmlnL2dpdCAmJgorCT4iJEhPTUUiLy5jb25maWcvZ2l0L2NvbmZpZyAmJgorCXJtIC1mICIkSE9NRSIvLmdpdGNvbmZpZyAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lICJ3cml0ZV9jb25maWciICYmCisJZWNobyAiW3VzZXJdIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICIJbmFtZSA9IHdyaXRlX2NvbmZpZyIgPj5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkSE9NRSIvLmNvbmZpZy9naXQvY29uZmlnCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGU6IHhkZyBmaWxlIGV4aXN0cyBhbmQgfi8uZ2l0Y29uZmlnIGV4aXN0cycgJworCT4iJEhPTUUiLy5naXRjb25maWcgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAid3JpdGVfZ2l0Y29uZmlnIiAmJgorCWVjaG8gIlt1c2VyXSIgPmV4cGVjdGVkICYmCisJZWNobyAiCW5hbWUgPSB3cml0ZV9naXRjb25maWciID4+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJEhPTUUiLy5naXRjb25maWcKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZTogfi8uY29uZmlnL2dpdC8gZXhpc3RzIGFuZCBjb25maWcgZmlsZSBkb2VzbidcJyd0JyAnCisJcm0gLWYgIiRIT01FIi8uZ2l0Y29uZmlnICYmCisJcm0gLWYgIiRIT01FIi8uY29uZmlnL2dpdC9jb25maWcgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAid3JpdGVfZ2l0Y29uZmlnIiAmJgorCWVjaG8gIlt1c2VyXSIgPmV4cGVjdGVkICYmCisJZWNobyAiCW5hbWUgPSB3cml0ZV9naXRjb25maWciID4+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJEhPTUUiLy5naXRjb25maWcKKycKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEzMDctY29uZmlnLWJsb2Iuc2ggYi90L3QxMzA3LWNvbmZpZy1ibG9iLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwMmU2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMzA3LWNvbmZpZy1ibG9iLnNoCkBAIC0wLDAgKzEsODAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzdXBwb3J0IGZvciByZWFkaW5nIGNvbmZpZyBmcm9tIGEgYmxvYicKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgY29uZmlnIGJsb2InICcKKwljYXQgPmNvbmZpZyA8PC1cRU9GICYmCisJW3NvbWVdCisJCXZhbHVlID0gMQorCUVPRgorCWdpdCBhZGQgY29uZmlnICYmCisJZ2l0IGNvbW1pdCAtbSBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdCBjb25maWcgYmxvYiBjb250ZW50cycgJworCWVjaG8gc29tZS52YWx1ZT0xID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tYmxvYj1IRUFEOmNvbmZpZyAtLWxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggdmFsdWUgZnJvbSBibG9iJyAnCisJZWNobyB0cnVlID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tYmxvYj1IRUFEOmNvbmZpZyAtLWJvb2wgc29tZS52YWx1ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkaW5nIG5vbi1leGlzdGluZyB2YWx1ZSBmcm9tIGJsb2IgaXMgYW4gZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYmxvYj1IRUFEOmNvbmZpZyBub24uZXhpc3RpbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZGluZyBmcm9tIGJsb2IgYW5kIGZpbGUgaXMgYW4gZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYmxvYj1IRUFEOmNvbmZpZyAtLXN5c3RlbSAtLWxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZGluZyBmcm9tIG1pc3NpbmcgcmVmIGlzIGFuIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJsb2I9SEVBRDpkb2Vzbm90ZXhpc3QgLS1saXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWRpbmcgZnJvbSBub24tYmxvYiBpcyBhbiBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ibG9iPUhFQUQgLS1saXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgYSB2YWx1ZSBpbiBhIGJsb2IgaXMgYW4gZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYmxvYj1IRUFEOmNvbmZpZyBzb21lLnZhbHVlIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBhIHZhbHVlIGluIGEgYmxvYiBpcyBhbiBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ibG9iPUhFQUQ6Y29uZmlnIC0tdW5zZXQgc29tZS52YWx1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0aW5nIGEgYmxvYiBpcyBhbiBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ibG9iPUhFQUQ6Y29uZmlnIC0tZWRpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJzZSBlcnJvcnMgaW4gYmxvYnMgYXJlIHByb3Blcmx5IGF0dHJpYnV0ZWQnICcKKwljYXQgPmNvbmZpZyA8PC1cRU9GICYmCisJW3NvbWVdCisJCXZhbHVlID0gIgorCUVPRgorCWdpdCBhZGQgY29uZmlnICYmCisJZ2l0IGNvbW1pdCAtbSBicm9rZW4gJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ibG9iPUhFQUQ6Y29uZmlnIHNvbWUudmFsdWUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJIRUFEOmNvbmZpZyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbiBwYXJzZSBibG9iIGVuZGluZyB3aXRoIENSJyAnCisJcHJpbnRmICJbc29tZV1rZXkgPSB2YWx1ZVxcciIgPmNvbmZpZyAmJgorCWdpdCBhZGQgY29uZmlnICYmCisJZ2l0IGNvbW1pdCAtbSBDUiAmJgorCWVjaG8gdmFsdWUgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1ibG9iPUhFQUQ6Y29uZmlnIHNvbWUua2V5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyAtLWJsb2Igb3V0c2lkZSBvZiBhIHJlcG9zaXRvcnkgaXMgYW4gZXJyb3InICcKKwlub25naXQgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJsb2I9Zm9vIC0tbGlzdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEzMDgtY29uZmlnLXNldC5zaCBiL3QvdDEzMDgtY29uZmlnLXNldC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYTUyN2UzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTMwOC1jb25maWctc2V0LnNoCkBAIC0wLDAgKzEsMjg0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgY29uZmlnLXNldCBBUEkgaW4gZGlmZmVyZW50IHNldHRpbmdzJworCisuIC4vdGVzdC1saWIuc2gKKworIyAnY2hlY2tfY29uZmlnIGdldF8qIHNlY3Rpb24ua2V5IHZhbHVlJyB2ZXJpZmllcyB0aGF0IHRoZSBlbnRyeSBmb3IKKyMgc2VjdGlvbi5rZXkgaXMgJ3ZhbHVlJworY2hlY2tfY29uZmlnICgpIHsKKwlpZiB0ZXN0ICIkMSIgPSBleHBlY3RfY29kZQorCXRoZW4KKwkJZXhwZWN0X2NvZGU9IiQyIiAmJiBzaGlmdCAmJiBzaGlmdAorCWVsc2UKKwkJZXhwZWN0X2NvZGU9MAorCWZpICYmCisJb3A9JDEga2V5PSQyICYmIHNoaWZ0ICYmIHNoaWZ0ICYmCisJaWYgdGVzdCAkIyAhPSAwCisJdGhlbgorCQlwcmludGYgIiVzXG4iICIkQCIKKwlmaSA+ZXhwZWN0ICYmCisJdGVzdF9leHBlY3RfY29kZSAkZXhwZWN0X2NvZGUgdGVzdC10b29sIGNvbmZpZyAiJG9wIiAiJGtleSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZGVmYXVsdCBjb25maWcnICcKKwljYXQgPi5naXQvY29uZmlnIDw8LVxFT0YKKwlbY2FzZV0KKwkJcGVuZ3VpbiA9IHZlcnkgYmx1ZQorCQlNb3ZpZSA9IEJhZFBoeXNpY3MKKwkJVVBQRVJDQVNFID0gdHJ1ZQorCQlNaXhlZENhc2UgPSB0cnVlCisJCW15ID0KKwkJZm9vCisJCWJheiA9IHNhbQorCVtDb3Jlc10KKwkJV2hhdEV2ZXIgPSBTZWNvbmQKKwkJYmF6ID0gYmFyCisJW2NvcmVzXQorCQliYXogPSBiYXQKKwlbQ09SRVNdCisJCWJheiA9IGJhbGwKKwlbbXkgIkZvbyBiQXIiXQorCQloaSA9IG1peGVkLWNhc2UKKwlbbXkgIkZPTyBCQVIiXQorCQloaSA9IHVwcGVyLWNhc2UKKwlbbXkgImZvbyBiYXIiXQorCQloaSA9IGxvd2VyLWNhc2UKKwlbY2FzZV0KKwkJYmF6ID0gYmF0CisJCWJheiA9IGhhc2sKKwlbbGFtYl0KKwkJY2hvcCA9IDY1CisJCWhlYWQgPSBub25lCisJW2dvYXRdCisJCWxlZ3MgPSA0CisJCWhlYWQgPSB0cnVlCisJCXNraW4gPSBmYWxzZQorCQlub3NlID0gMQorCQlob3JucworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgdmFsdWUgZm9yIGEgc2ltcGxlIGtleScgJworCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY2FzZS5wZW5ndWluICJ2ZXJ5IGJsdWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCB2YWx1ZSBmb3IgYSBrZXkgd2l0aCB2YWx1ZSBhcyBhbiBlbXB0eSBzdHJpbmcnICcKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIGNhc2UubXkgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IHZhbHVlIGZvciBhIGtleSB3aXRoIHZhbHVlIGFzIE5VTEwnICcKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIGNhc2UuZm9vICIoTlVMTCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwcGVyIGNhc2Uga2V5JyAnCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBjYXNlLlVQUEVSQ0FTRSAidHJ1ZSIgJiYKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIGNhc2UudXBwZXJjYXNlICJ0cnVlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXhlZCBjYXNlIGtleScgJworCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY2FzZS5NaXhlZENhc2UgInRydWUiICYmCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBjYXNlLk1JWEVEQ0FTRSAidHJ1ZSIgJiYKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIGNhc2UubWl4ZWRjYXNlICJ0cnVlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXkgYW5kIHZhbHVlIHdpdGggbWl4ZWQgY2FzZScgJworCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY2FzZS5Nb3ZpZSAiQmFkUGh5c2ljcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2V5IHdpdGggY2FzZSBzZW5zaXRpdmUgc3Vic2VjdGlvbicgJworCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgIm15LkZvbyBiQXIuaGkiICJtaXhlZC1jYXNlIiAmJgorCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgIm15LkZPTyBCQVIuaGkiICJ1cHBlci1jYXNlIiAmJgorCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgIm15LmZvbyBiYXIuaGkiICJsb3dlci1jYXNlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXkgd2l0aCBjYXNlIGluc2Vuc2l0aXZlIHNlY3Rpb24gaGVhZGVyJyAnCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBjb3Jlcy5iYXogImJhbGwiICYmCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBDb3Jlcy5iYXogImJhbGwiICYmCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBDT1JFUy5iYXogImJhbGwiICYmCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBjb3JlUy5iYXogImJhbGwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tleSB3aXRoIGNhc2UgaW5zZW5zaXRpdmUgc2VjdGlvbiBoZWFkZXIgJiB2YXJpYWJsZScgJworCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgQ09SRVMuQkFaICJiYWxsIiAmJgorCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY29yZXMuYmF6ICJiYWxsIiAmJgorCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY29yZXMuQmFaICJiYWxsIiAmJgorCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY09yZVMuYkF6ICJiYWxsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIHZhbHVlIHdpdGggbWlzc3BlbGxlZCBrZXknICcKKwljaGVja19jb25maWcgZXhwZWN0X2NvZGUgMSBnZXRfdmFsdWUgIm15LmZPbyBCYXIuaGkiICJWYWx1ZSBub3QgZm91bmQgZm9yIFwibXkuZk9vIEJhci5oaVwiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIHZhbHVlIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHknICcKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIGNhc2UuYmF6ICJoYXNrIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIGludGVnZXIgdmFsdWUgZm9yIGEga2V5JyAnCisJY2hlY2tfY29uZmlnIGdldF9pbnQgbGFtYi5jaG9wIDY1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgc3RyaW5nIHZhbHVlIGZvciBhIGtleScgJworCWNoZWNrX2NvbmZpZyBnZXRfc3RyaW5nIGNhc2UuYmF6IGhhc2sgJiYKKwljaGVja19jb25maWcgZXhwZWN0X2NvZGUgMSBnZXRfc3RyaW5nIGNhc2UuYmEgIlZhbHVlIG5vdCBmb3VuZCBmb3IgXCJjYXNlLmJhXCIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGxpbmUgZXJyb3Igd2hlbiBOVUxMIHN0cmluZyBpcyBxdWVyaWVkJyAnCisJdGVzdF9leHBlY3RfY29kZSAxMjggdGVzdC10b29sIGNvbmZpZyBnZXRfc3RyaW5nIGNhc2UuZm9vIDI+cmVzdWx0ICYmCisJdGVzdF9pMThuZ3JlcCAiZmF0YWw6IC4qY2FzZVwuZm9vLipcLmdpdC9jb25maWcuKmxpbmUgNyIgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgaW50ZWdlciBpZiB2YWx1ZSBpcyBub24gcGFyc2UtYWJsZScgJworCWNoZWNrX2NvbmZpZyBleHBlY3RfY29kZSAxMjggZ2V0X2ludCBsYW1iLmhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCBib29sIHZhbHVlIGZvciB0aGUgZW50ZXJlZCBrZXknICcKKwljaGVja19jb25maWcgZ2V0X2Jvb2wgZ29hdC5oZWFkIDEgJiYKKwljaGVja19jb25maWcgZ2V0X2Jvb2wgZ29hdC5za2luIDAgJiYKKwljaGVja19jb25maWcgZ2V0X2Jvb2wgZ29hdC5ub3NlIDEgJiYKKwljaGVja19jb25maWcgZ2V0X2Jvb2wgZ29hdC5ob3JucyAxICYmCisJY2hlY2tfY29uZmlnIGdldF9ib29sIGdvYXQubGVncyAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgbXVsdGlwbGUgdmFsdWVzJyAnCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZV9tdWx0aSBjYXNlLmJheiBzYW0gYmF0IGhhc2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCB2YWx1ZSBmcm9tIGEgY29uZmlnc2V0JyAnCisJY2F0ID5jb25maWcyIDw8LVxFT0YgJiYKKwlbY2FzZV0KKwkJYmF6ID0gbGFtYQorCVtteV0KKwkJbmV3ID0gc2lsaworCVtjYXNlXQorCQliYXogPSBiYWxsCisJRU9GCisJZWNobyBzaWxrID5leHBlY3QgJiYKKwl0ZXN0LXRvb2wgY29uZmlnIGNvbmZpZ3NldF9nZXRfdmFsdWUgbXkubmV3IGNvbmZpZzIgLmdpdC9jb25maWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCB2YWx1ZSB3aXRoIGhpZ2hlc3QgcHJpb3JpdHkgZnJvbSBhIGNvbmZpZ3NldCcgJworCWVjaG8gaGFzayA+ZXhwZWN0ICYmCisJdGVzdC10b29sIGNvbmZpZyBjb25maWdzZXRfZ2V0X3ZhbHVlIGNhc2UuYmF6IGNvbmZpZzIgLmdpdC9jb25maWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCB2YWx1ZV9saXN0IGZvciBhIGtleSBmcm9tIGEgY29uZmlnc2V0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWxhbWEKKwliYWxsCisJc2FtCisJYmF0CisJaGFzaworCUVPRgorCXRlc3QtdG9vbCBjb25maWcgY29uZmlnc2V0X2dldF92YWx1ZV9tdWx0aSBjYXNlLmJheiBjb25maWcyIC5naXQvY29uZmlnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb3BlciBlcnJvciBvbiBub24tZXhpc3RlbnQgZmlsZXMnICcKKwllY2hvICJFcnJvciAoLTEpIHJlYWRpbmcgY29uZmlndXJhdGlvbiBmaWxlIG5vbi1leGlzdGVudC1maWxlLiIgPmV4cGVjdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMiB0ZXN0LXRvb2wgY29uZmlnIGNvbmZpZ3NldF9nZXRfdmFsdWUgZm9vLmJhciBub24tZXhpc3RlbnQtZmlsZSAyPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvcGVyIGVycm9yIG9uIGRpcmVjdG9yeSAiZmlsZXMiJyAnCisJZWNobyAiRXJyb3IgKC0xKSByZWFkaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSBhLWRpcmVjdG9yeS4iID5leHBlY3QgJiYKKwlta2RpciBhLWRpcmVjdG9yeSAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMiB0ZXN0LXRvb2wgY29uZmlnIGNvbmZpZ3NldF9nZXRfdmFsdWUgZm9vLmJhciBhLWRpcmVjdG9yeSAyPm91dHB1dCAmJgorCWdyZXAgIl53YXJuaW5nOiIgb3V0cHV0ICYmCisJZ3JlcCAiXkVycm9yIiBvdXRwdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdwcm9wZXIgZXJyb3Igb24gbm9uLWFjY2Vzc2libGUgZmlsZXMnICcKKwljaG1vZCAtciAuZ2l0L2NvbmZpZyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2htb2QgK3IgLmdpdC9jb25maWciICYmCisJZWNobyAiRXJyb3IgKC0xKSByZWFkaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSAuZ2l0L2NvbmZpZy4iID5leHBlY3QgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDIgdGVzdC10b29sIGNvbmZpZyBjb25maWdzZXRfZ2V0X3ZhbHVlIGZvby5iYXIgLmdpdC9jb25maWcgMj5vdXRwdXQgJiYKKwlncmVwICJed2FybmluZzoiIG91dHB1dCAmJgorCWdyZXAgIl5FcnJvciIgb3V0cHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb3BlciBlcnJvciBvbiBlcnJvciBpbiBkZWZhdWx0IGNvbmZpZyBmaWxlcycgJworCWNwIC5naXQvY29uZmlnIC5naXQvY29uZmlnLm9sZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgLmdpdC9jb25maWcub2xkIC5naXQvY29uZmlnIiAmJgorCWVjaG8gIlsiID4+LmdpdC9jb25maWcgJiYKKwllY2hvICJmYXRhbDogYmFkIGNvbmZpZyBsaW5lIDM0IGluIGZpbGUgLmdpdC9jb25maWciID5leHBlY3QgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCB0ZXN0LXRvb2wgY29uZmlnIGdldF92YWx1ZSBmb28uYmFyIDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvcGVyIGVycm9yIG9uIGVycm9yIGluIGN1c3RvbSBjb25maWcgZmlsZXMnICcKKwllY2hvICJbIiA+PnN5bnRheC1lcnJvciAmJgorCWVjaG8gImZhdGFsOiBiYWQgY29uZmlnIGxpbmUgMSBpbiBmaWxlIHN5bnRheC1lcnJvciIgPmV4cGVjdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IHRlc3QtdG9vbCBjb25maWcgY29uZmlnc2V0X2dldF92YWx1ZSBmb28uYmFyIHN5bnRheC1lcnJvciAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGxpbmUgZXJyb3JzIGZvciBtYWxmb3JtZWQgdmFsdWVzJyAnCisJbXYgLmdpdC9jb25maWcgLmdpdC9jb25maWcub2xkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJtdiAuZ2l0L2NvbmZpZy5vbGQgLmdpdC9jb25maWciICYmCisJY2F0ID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW2FsaWFzXQorCQlicgorCUVPRgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBiciAyPnJlc3VsdCAmJgorCXRlc3RfaTE4bmdyZXAgIm1pc3NpbmcgdmFsdWUgZm9yIC5hbGlhc1wuYnIiIHJlc3VsdCAmJgorCXRlc3RfaTE4bmdyZXAgImZhdGFsOiAuKlwuZ2l0L2NvbmZpZyIgcmVzdWx0ICYmCisJdGVzdF9pMThuZ3JlcCAiZmF0YWw6IC4qbGluZSAyIiByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3Igb24gbW9kaWZ5aW5nIHJlcG8gY29uZmlnIHdpdGhvdXQgcmVwbycgJworCW5vbmdpdCB0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGEuYiBjIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAibm90IGluIGEgZ2l0IGRpcmVjdG9yeSIgZXJyCisnCisKK2NtZGxpbmVfY29uZmlnPSInZm9vLmJhcj1mcm9tLWNtZGxpbmUnIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaXRlcmF0aW9uIHNob3dzIGNvcnJlY3Qgb3JpZ2lucycgJworCXByaW50ZiAiW2lnbm9yZV1cblx0dGhpcyA9IHBsZWFzZVxuW2Zvb11iYXIgPSBmcm9tLXJlcG9cbiIgPi5naXQvY29uZmlnICYmCisJcHJpbnRmICJbZm9vXVxuXHRiYXIgPSBmcm9tLWhvbWVcbiIgPi5naXRjb25maWcgJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIE1JTkdXCisJdGhlbgorCQkjIFVzZSBXaW5kb3dzIHBhdGggKGkuZS4gKm5vdCogJEhPTUUpCisJCUhPTUVfR0lUQ09ORklHPSQocHdkKS8uZ2l0Y29uZmlnCisJZWxzZQorCQkjIERvIG5vdCBnZXQgZm9vbGVkIGJ5IHN5bWJvbGljIGxpbmtzLCBpLmUuICRIT01FICE9ICQocHdkKQorCQlIT01FX0dJVENPTkZJRz0kSE9NRS8uZ2l0Y29uZmlnCisJZmkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlrZXk9Zm9vLmJhcgorCXZhbHVlPWZyb20taG9tZQorCW9yaWdpbj1maWxlCisJbmFtZT0kSE9NRV9HSVRDT05GSUcKKwlsbm89MgorCXNjb3BlPWdsb2JhbAorCisJa2V5PWlnbm9yZS50aGlzCisJdmFsdWU9cGxlYXNlCisJb3JpZ2luPWZpbGUKKwluYW1lPS5naXQvY29uZmlnCisJbG5vPTIKKwlzY29wZT1sb2NhbAorCisJa2V5PWZvby5iYXIKKwl2YWx1ZT1mcm9tLXJlcG8KKwlvcmlnaW49ZmlsZQorCW5hbWU9LmdpdC9jb25maWcKKwlsbm89MworCXNjb3BlPWxvY2FsCisKKwlrZXk9Zm9vLmJhcgorCXZhbHVlPWZyb20tY21kbGluZQorCW9yaWdpbj1jb21tYW5kIGxpbmUKKwluYW1lPQorCWxubz0tMQorCXNjb3BlPWNvbW1hbmQKKwlFT0YKKwlHSVRfQ09ORklHX1BBUkFNRVRFUlM9JGNtZGxpbmVfY29uZmlnIHRlc3QtdG9vbCBjb25maWcgaXRlcmF0ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEzMDktZWFybHktY29uZmlnLnNoIGIvdC90MTMwOS1lYXJseS1jb25maWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWJiOGUxYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEzMDktZWFybHktY29uZmlnLnNoCkBAIC0wLDAgKzEsMTAyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZWFkX2Vhcmx5X2NvbmZpZygpJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZCBlYXJseSBjb25maWcnICcKKwl0ZXN0X2NvbmZpZyBlYXJseS5jb25maWcgY29ycmVjdCAmJgorCXRlc3QtdG9vbCBjb25maWcgcmVhZF9lYXJseV9jb25maWcgZWFybHkuY29uZmlnID5vdXRwdXQgJiYKKwl0ZXN0IGNvcnJlY3QgPSAiJChjYXQgb3V0cHV0KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4gYSBzdWItZGlyZWN0b3J5JyAnCisJdGVzdF9jb25maWcgZWFybHkuY29uZmlnIHN1YiAmJgorCW1rZGlyIC1wIHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCXRlc3QtdG9vbCBjb25maWcgcmVhZF9lYXJseV9jb25maWcgZWFybHkuY29uZmlnCisJKSA+b3V0cHV0ICYmCisJdGVzdCBzdWIgPSAiJChjYXQgb3V0cHV0KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2VpbGluZycgJworCXRlc3RfY29uZmlnIGVhcmx5LmNvbmZpZyBjZWlsaW5nICYmCisJbWtkaXIgLXAgc3ViICYmCisJKAorCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFBXRCIgJiYKKwkJZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTICYmCisJCWNkIHN1YiAmJgorCQl0ZXN0LXRvb2wgY29uZmlnIHJlYWRfZWFybHlfY29uZmlnIGVhcmx5LmNvbmZpZworCSkgPm91dHB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2VpbGluZyAjMicgJworCW1rZGlyIC1wIHhkZy9naXQgJiYKKwlnaXQgY29uZmlnIC1mIHhkZy9naXQvY29uZmlnIGVhcmx5LmNvbmZpZyB4ZGcgJiYKKwl0ZXN0X2NvbmZpZyBlYXJseS5jb25maWcgY2VpbGluZyAmJgorCW1rZGlyIC1wIHN1YiAmJgorCSgKKwkJWERHX0NPTkZJR19IT01FPSIkUFdEIi94ZGcgJiYKKwkJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRQV0QiICYmCisJCWV4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyBYREdfQ09ORklHX0hPTUUgJiYKKwkJY2Qgc3ViICYmCisJCXRlc3QtdG9vbCBjb25maWcgcmVhZF9lYXJseV9jb25maWcgZWFybHkuY29uZmlnCisJKSA+b3V0cHV0ICYmCisJdGVzdCB4ZGcgPSAiJChjYXQgb3V0cHV0KSIKKycKKworY21kbGluZV9jb25maWc9Iid0ZXN0LnNvdXJjZT1jbWRsaW5lJyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgY29uZmlnIGZpbGUgaW4gcmlnaHQgb3JkZXInICcKKwllY2hvICJbdGVzdF1zb3VyY2UgPSBob21lIiA+Pi5naXRjb25maWcgJiYKKwlnaXQgaW5pdCBmb28gJiYKKwkoCisJCWNkIGZvbyAmJgorCQllY2hvICJbdGVzdF1zb3VyY2UgPSByZXBvIiA+Pi5naXQvY29uZmlnICYmCisJCUdJVF9DT05GSUdfUEFSQU1FVEVSUz0kY21kbGluZV9jb25maWcgdGVzdC10b29sIGNvbmZpZyBcCisJCQlyZWFkX2Vhcmx5X2NvbmZpZyB0ZXN0LnNvdXJjZSA+YWN0dWFsICYmCisJCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlob21lCisJCXJlcG8KKwkJY21kbGluZQorCQlFT0YKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKQorJworCit0ZXN0X3dpdGhfY29uZmlnICgpIHsKKwlybSAtcmYgdGhyb3dhd2F5ICYmCisJZ2l0IGluaXQgdGhyb3dhd2F5ICYmCisJKAorCQljZCB0aHJvd2F3YXkgJiYKKwkJZWNobyAiJCoiID4uZ2l0L2NvbmZpZyAmJgorCQl0ZXN0LXRvb2wgY29uZmlnIHJlYWRfZWFybHlfY29uZmlnIGVhcmx5LmNvbmZpZworCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWdub3JlIC5naXQvIHdpdGggaW5jb21wYXRpYmxlIHJlcG9zaXRvcnkgdmVyc2lvbicgJworCXRlc3Rfd2l0aF9jb25maWcgIltjb3JlXXJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uID0gOTk5OTk5IiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIndhcm5pbmc6LiogRXhwZWN0ZWQgZ2l0IHJlcG8gdmVyc2lvbiA8PSBbMS05XSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2lnbm9yZSAuZ2l0LyB3aXRoIGludmFsaWQgcmVwb3NpdG9yeSB2ZXJzaW9uJyAnCisJdGVzdF93aXRoX2NvbmZpZyAiW2NvcmVdcmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gPSBpbnZhbGlkIgorJworCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2lnbm9yZSAuZ2l0LyB3aXRoIGludmFsaWQgY29uZmlnJyAnCisJdGVzdF93aXRoX2NvbmZpZyAiWyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWFybHkgY29uZmlnIGFuZCBvbmJyYW5jaCcgJworCWVjaG8gIlticm9rZW4iID5icm9rZW4gJiYKKwl0ZXN0X3dpdGhfY29uZmlnICJbaW5jbHVkZWlmIFwib25icmFuY2g6bWFzdGVyXCJdcGF0aD0uLi9icm9rZW4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29uYnJhbmNoIGNvbmZpZyBvdXRzaWRlIG9mIGdpdCByZXBvJyAnCisJdGVzdF9jb25maWdfZ2xvYmFsIGluY2x1ZGVJZi5vbmJyYW5jaDptYXN0ZXIucGF0aCBub24tZXhpc3RlbnQgJiYKKwlub25naXQgZ2l0IGhlbHAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMzEwLWNvbmZpZy1kZWZhdWx0LnNoIGIvdC90MTMxMC1jb25maWctZGVmYXVsdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MDQ5ZDkxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTMxMC1jb25maWctZGVmYXVsdC5zaApAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgY29uZmlnIGluIGRpZmZlcmVudCBzZXR0aW5ncyAod2l0aCAtLWRlZmF1bHQpJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlcyAtLWRlZmF1bHQgd2hlbiBlbnRyeSBtaXNzaW5nJyAnCisJZWNobyBxdXV4ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC1mIGNvbmZpZyAtLWRlZmF1bHQ9cXV1eCBjb3JlLmZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkb2VzIG5vdCB1c2UgLS1kZWZhdWx0IHdoZW4gZW50cnkgcHJlc2VudCcgJworCWVjaG8gYmFyID5leHBlY3QgJiYKKwlnaXQgLWMgY29yZS5mb289YmFyIGNvbmZpZyAtLWRlZmF1bHQ9YmF6IGNvcmUuZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nhbm9uaWNhbGl6ZXMgLS1kZWZhdWx0IHdpdGggYXBwcm9wcmlhdGUgdHlwZScgJworCWVjaG8gdHJ1ZSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtZiBjb25maWcgLS1kZWZhdWx0PXllcyAtLWJvb2wgY29yZS5mb28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGllcyB3aGVuIC0tZGVmYXVsdCBjYW5ub3QgYmUgcGFyc2VkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiBjb25maWcgLS10eXBlPWV4cGlyeS1kYXRlIC0tZGVmYXVsdD14IC0tZ2V0IFwKKwkJbm90LmEuc2VjdGlvbiAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiZmFpbGVkIHRvIGZvcm1hdCBkZWZhdWx0IGNvbmZpZyB2YWx1ZSIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG9lcyBub3QgYWxsb3cgLS1kZWZhdWx0IHdpdGhvdXQgLS1nZXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZGVmYXVsdD1xdXV4IC0tdW5zZXQgYS5zZWN0aW9uID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgIlwtXC1kZWZhdWx0IGlzIG9ubHkgYXBwbGljYWJsZSB0byIgb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTM1MC1jb25maWctaG9va3MtcGF0aC5zaCBiL3QvdDEzNTAtY29uZmlnLWhvb2tzLXBhdGguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjFmOWFlZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEzNTAtY29uZmlnLWhvb2tzLXBhdGguc2gKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIGNvcmUuaG9va3NQYXRoIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYSBwcmUtY29tbWl0IGhvb2sgaW4gY29yZS5ob29rc1BhdGgnICcKKwlta2RpciAtcCAuZ2l0L2N1c3RvbS1ob29rcyAuZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IC5naXQvY3VzdG9tLWhvb2tzL3ByZS1jb21taXQgPDwtXEVPRiAmJgorCWVjaG8gQ1VTVE9NID4+YWN0dWFsCisJRU9GCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcHJlLWNvbW1pdCA8PC1cRU9GCisJZWNobyBOT1JNQUwgPj5hY3R1YWwKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgdGhhdCB2YXJpb3VzIGZvcm1zIG9mIHNwZWNpZnlpbmcgY29yZS5ob29rc1BhdGggd29yaycgJworCXRlc3RfY29tbWl0IG5vX2N1c3RvbV9ob29rICYmCisJZ2l0IGNvbmZpZyBjb3JlLmhvb2tzUGF0aCAuZ2l0L2N1c3RvbS1ob29rcyAmJgorCXRlc3RfY29tbWl0IGhhdmVfY3VzdG9tX2hvb2sgJiYKKwlnaXQgY29uZmlnIGNvcmUuaG9va3NQYXRoIC5naXQvY3VzdG9tLWhvb2tzLyAmJgorCXRlc3RfY29tbWl0IGhhdmVfY3VzdG9tX2hvb2tfdHJhaWxpbmdfc2xhc2ggJiYKKwlnaXQgY29uZmlnIGNvcmUuaG9va3NQYXRoICIkUFdELy5naXQvY3VzdG9tLWhvb2tzIiAmJgorCXRlc3RfY29tbWl0IGhhdmVfY3VzdG9tX2hvb2tfYWJzX3BhdGggJiYKKwlnaXQgY29uZmlnIGNvcmUuaG9va3NQYXRoICIkUFdELy5naXQvY3VzdG9tLWhvb2tzLyIgJiYKKwl0ZXN0X2NvbW1pdCBoYXZlX2N1c3RvbV9ob29rX2Fic19wYXRoX3RyYWlsaW5nX3NsYXNoICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU5PUk1BTAorCUNVU1RPTQorCUNVU1RPTQorCUNVU1RPTQorCUNVU1RPTQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIGhvb2tzJyAnCisJZ2l0IGNvbmZpZyBjb3JlLmhvb2tzUGF0aCAuZ2l0L2N1c3RvbS1ob29rcyAmJgorCWdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBob29rcy9hYmMgPmFjdHVhbCAmJgorCXRlc3QgLmdpdC9jdXN0b20taG9va3MvYWJjID0gIiQoY2F0IGFjdHVhbCkiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQwMC11cGRhdGUtcmVmLnNoIGIvdC90MTQwMC11cGRhdGUtcmVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUxMTk3YWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDAwLXVwZGF0ZS1yZWYuc2gKQEAgLTAsMCArMSwxNTI5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IFNoYXduIFBlYXJjZQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdCB1cGRhdGUtcmVmIGFuZCBiYXNpYyByZWYgbG9nZ2luZycKKy4gLi90ZXN0LWxpYi5zaAorCitaPSRaRVJPX09JRAorCittPXJlZnMvaGVhZHMvbWFzdGVyCituX2Rpcj1yZWZzL2hlYWRzL2d1CituPSRuX2Rpci9maXhlcworb3V0c2lkZT1yZWZzL2ZvbworYmFyZT1iYXJlLXJlcG8KKworY3JlYXRlX3Rlc3RfY29tbWl0cyAoKQoreworCXByZng9IiQxIgorCWZvciBuYW1lIGluIEEgQiBDIEQgRSBGCisJZG8KKwkJdGVzdF90aWNrICYmCisJCVQ9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJc2hhMT0kKGVjaG8gJG5hbWUgfCBnaXQgY29tbWl0LXRyZWUgJFQpICYmCisJCWV2YWwgJHByZngkbmFtZT0kc2hhMQorCWRvbmUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJY3JlYXRlX3Rlc3RfY29tbWl0cyAiIiAmJgorCW1rZGlyICRiYXJlICYmCisJY2QgJGJhcmUgJiYKKwlnaXQgaW5pdCAtLWJhcmUgJiYKKwljcmVhdGVfdGVzdF9jb21taXRzICJiYXJlIiAmJgorCWNkIC0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlICRtIiAnCisJZ2l0IHVwZGF0ZS1yZWYgJG0gJEEgJiYKKwl0ZXN0ICRBID0gJChjYXQgLmdpdC8kbSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSAkbSB3aXRoIG9sZHZhbHVlIHZlcmlmaWNhdGlvbiIgJworCWdpdCB1cGRhdGUtcmVmICRtICRCICRBICYmCisJdGVzdCAkQiA9ICQoY2F0IC5naXQvJG0pCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmYWlsIHRvIGRlbGV0ZSAkbSB3aXRoIHN0YWxlIHJlZiIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC1kICRtICRBICYmCisJdGVzdCAkQiA9ICIkKGNhdCAuZ2l0LyRtKSIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRlbGV0ZSAkbSIgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC8kbSIgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCAkbSAkQiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvJG0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVsZXRlICRtIHdpdGhvdXQgb2xkdmFsdWUgdmVyaWZpY2F0aW9uIiAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRtIiAmJgorCWdpdCB1cGRhdGUtcmVmICRtICRBICYmCisJdGVzdCAkQSA9ICQoY2F0IC5naXQvJG0pICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgJG0gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0LyRtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZhaWwgdG8gY3JlYXRlICRuIiAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRuX2RpciIgJiYKKwl0b3VjaCAuZ2l0LyRuX2RpciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmICRuICRBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSAkbSAoYnkgSEVBRCkiICcKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICRBICYmCisJdGVzdCAkQSA9ICQoY2F0IC5naXQvJG0pCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjcmVhdGUgJG0gKGJ5IEhFQUQpIHdpdGggb2xkdmFsdWUgdmVyaWZpY2F0aW9uIiAnCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkQiAkQSAmJgorCXRlc3QgJEIgPSAkKGNhdCAuZ2l0LyRtKQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmFpbCB0byBkZWxldGUgJG0gKGJ5IEhFQUQpIHdpdGggc3RhbGUgcmVmIiAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLWQgSEVBRCAkQSAmJgorCXRlc3QgJEIgPSAkKGNhdCAuZ2l0LyRtKQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVsZXRlICRtIChieSBIRUFEKSIgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC8kbSIgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCBIRUFEICRCICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC8kbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZWxldGluZyBjdXJyZW50IGJyYW5jaCBhZGRzIG1lc3NhZ2UgdG8gSEVBRCdzIGxvZyIgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC8kbSIgJiYKKwlnaXQgdXBkYXRlLXJlZiAkbSAkQSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCAkbSAmJgorCWdpdCB1cGRhdGUtcmVmIC1tIGRlbGV0ZS0kbSAtZCAkbSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvJG0gJiYKKwlncmVwICJkZWxldGUtJG0kIiAuZ2l0L2xvZ3MvSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZWxldGluZyBieSBIRUFEIGFkZHMgbWVzc2FnZSB0byBIRUFEJ3MgbG9nIiAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRtIiAmJgorCWdpdCB1cGRhdGUtcmVmICRtICRBICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEICRtICYmCisJZ2l0IHVwZGF0ZS1yZWYgLW0gZGVsZXRlLWJ5LWhlYWQgLWQgSEVBRCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvJG0gJiYKKwlncmVwICJkZWxldGUtYnktaGVhZCQiIC5naXQvbG9ncy9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgZG9lcyBub3QgY3JlYXRlIHJlZmxvZ3MgYnkgZGVmYXVsdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgJG91dHNpZGUiICYmCisJZ2l0IHVwZGF0ZS1yZWYgJG91dHNpZGUgJEEgJiYKKwlnaXQgcmV2LXBhcnNlICRBID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRvdXRzaWRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlZmxvZyBleGlzdHMgJG91dHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiBjcmVhdGVzIHJlZmxvZ3Mgd2l0aCAtLWNyZWF0ZS1yZWZsb2cnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kICRvdXRzaWRlIiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tY3JlYXRlLXJlZmxvZyAkb3V0c2lkZSAkQSAmJgorCWdpdCByZXYtcGFyc2UgJEEgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJG91dHNpZGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyAkb3V0c2lkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGVzIG5vIHJlZmxvZyBpbiBiYXJlIHJlcG9zaXRvcnknICcKKwlnaXQgLUMgJGJhcmUgdXBkYXRlLXJlZiAkbSAkYmFyZUEgJiYKKwlnaXQgLUMgJGJhcmUgcmV2LXBhcnNlICRiYXJlQSA+ZXhwZWN0ICYmCisJZ2l0IC1DICRiYXJlIHJldi1wYXJzZSAkbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyAkYmFyZSByZWZsb2cgZXhpc3RzICRtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcmUubG9nQWxsUmVmVXBkYXRlcz10cnVlIGNyZWF0ZXMgcmVmbG9nIGluIGJhcmUgcmVwb3NpdG9yeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DICRiYXJlIGNvbmZpZyAtLXVuc2V0IGNvcmUubG9nQWxsUmVmVXBkYXRlcyAmJiBcCisJCXJtICRiYXJlL2xvZ3MvJG0iICYmCisJZ2l0IC1DICRiYXJlIGNvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgdHJ1ZSAmJgorCWdpdCAtQyAkYmFyZSB1cGRhdGUtcmVmICRtICRiYXJlQiAmJgorCWdpdCAtQyAkYmFyZSByZXYtcGFyc2UgJGJhcmVCID5leHBlY3QgJiYKKwlnaXQgLUMgJGJhcmUgcmV2LXBhcnNlICRtID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IC1DICRiYXJlIHJlZmxvZyBleGlzdHMgJG0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29yZS5sb2dBbGxSZWZVcGRhdGVzPXRydWUgZG9lcyBub3QgY3JlYXRlIHJlZmxvZyBieSBkZWZhdWx0JyAnCisJdGVzdF9jb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIHRydWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kICRvdXRzaWRlIiAmJgorCWdpdCB1cGRhdGUtcmVmICRvdXRzaWRlICRBICYmCisJZ2l0IHJldi1wYXJzZSAkQSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkb3V0c2lkZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWZsb2cgZXhpc3RzICRvdXRzaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcmUubG9nQWxsUmVmVXBkYXRlcz1hbHdheXMgY3JlYXRlcyByZWZsb2cgYnkgZGVmYXVsdCcgJworCXRlc3RfY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyBhbHdheXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kICRvdXRzaWRlIiAmJgorCWdpdCB1cGRhdGUtcmVmICRvdXRzaWRlICRBICYmCisJZ2l0IHJldi1wYXJzZSAkQSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkb3V0c2lkZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZWZsb2cgZXhpc3RzICRvdXRzaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcmUubG9nQWxsUmVmVXBkYXRlcz1hbHdheXMgY3JlYXRlcyBubyByZWZsb2cgZm9yIE9SSUdfSEVBRCcgJworCXRlc3RfY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyBhbHdheXMgJiYKKwlnaXQgdXBkYXRlLXJlZiBPUklHX0hFQUQgJEEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVmbG9nIGV4aXN0cyBPUklHX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1jcmVhdGUtcmVmbG9nIG92ZXJyaWRlcyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXM9YWx3YXlzJyAnCisJdGVzdF9jb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIHRydWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kICRvdXRzaWRlIiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tbm8tY3JlYXRlLXJlZmxvZyAkb3V0c2lkZSAkQSAmJgorCWdpdCByZXYtcGFyc2UgJEEgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJG91dHNpZGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVmbG9nIGV4aXN0cyAkb3V0c2lkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjcmVhdGUgJG0gKGJ5IEhFQUQpIiAnCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkQSAmJgorCXRlc3QgJEEgPSAkKGNhdCAuZ2l0LyRtKQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayByZWZzJyAnCisJZ2l0IHBhY2stcmVmcyAtLWFsbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAibW92ZSAkbSAoYnkgSEVBRCkiICcKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICRCICRBICYmCisJdGVzdCAkQiA9ICQoY2F0IC5naXQvJG0pCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZWxldGUgJG0gKGJ5IEhFQUQpIHNob3VsZCByZW1vdmUgYm90aCBwYWNrZWQgYW5kIGxvb3NlICRtIiAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRtIiAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIEhFQUQgJEIgJiYKKwkhIGdyZXAgIiRtIiAuZ2l0L3BhY2tlZC1yZWZzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC8kbQorJworCitjcCAtZiAuZ2l0L0hFQUQgLmdpdC9IRUFELm9yaWcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSBzeW1yZWYgd2l0aG91dCBkZXJlZmVyZW5jZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiY3AgLWYgLmdpdC9IRUFELm9yaWcgLmdpdC9IRUFEIiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tbm8tZGVyZWYgLWQgSEVBRCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGUgc3ltcmVmIHdpdGhvdXQgZGVyZWZlcmVuY2Ugd2hlbiB0aGUgcmVmZXJyZWQgcmVmIGlzIHBhY2tlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiY3AgLWYgLmdpdC9IRUFELm9yaWcgLmdpdC9IRUFEIiAmJgorCWVjaG8gZm9vID5mb28uYyAmJgorCWdpdCBhZGQgZm9vLmMgJiYKKwlnaXQgY29tbWl0IC1tIGZvbyAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgdXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1kIEhFQUQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L0hFQUQKKycKKworZ2l0IHVwZGF0ZS1yZWYgLWQgJG0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiAtZCBpcyBub3QgY29uZnVzZWQgYnkgc2VsZi1yZWZlcmVuY2UnICcKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvc2VsZiByZWZzL2hlYWRzL3NlbGYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9zZWxmIiAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9zZWxmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9zZWxmICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL3NlbGYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1kIGNhbiBkZWxldGUgc2VsZi1yZWZlcmVuY2UnICcKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvc2VsZiByZWZzL2hlYWRzL3NlbGYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9zZWxmIiAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9zZWxmICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCByZWZzL2hlYWRzL3NlbGYgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvc2VsZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC0tbm8tZGVyZWYgLWQgY2FuIGRlbGV0ZSByZWZlcmVuY2UgdG8gYmFkIHJlZicgJworCT4uZ2l0L3JlZnMvaGVhZHMvYmFkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYmFkIiAmJgorCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9yZWYtdG8tYmFkIHJlZnMvaGVhZHMvYmFkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvcmVmLXRvLWJhZCIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvcmVmLXRvLWJhZCAmJgorCWdpdCB1cGRhdGUtcmVmIC0tbm8tZGVyZWYgLWQgcmVmcy9oZWFkcy9yZWYtdG8tYmFkICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL3JlZi10by1iYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnKG5vdCkgY3JlYXRlIEhFQUQgd2l0aCBvbGQgc2hhMScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIEhFQUQgJEEgJEIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIihub3QpIHByaW9yIGNyZWF0ZWQgLmdpdC8kbSIgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC8kbSIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0LyRtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBIRUFEJyAnCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkQQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnKG5vdCkgY2hhbmdlIEhFQUQgd2l0aCB3cm9uZyBTSEExJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkQiAkWgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiKG5vdCkgY2hhbmdlZCAuZ2l0LyRtIiAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRtIiAmJgorCSEgdGVzdCAkQiA9ICQoY2F0IC5naXQvJG0pCisnCisKK3JtIC1mIC5naXQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgordGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlICRtIChsb2dnZWQgYnkgdG91Y2gpIiAnCisJdGVzdF9jb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIGZhbHNlICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjMwIiBcCisJZ2l0IHVwZGF0ZS1yZWYgLS1jcmVhdGUtcmVmbG9nIEhFQUQgJEEgLW0gIkluaXRpYWwgQ3JlYXRpb24iICYmCisJdGVzdCAkQSA9ICQoY2F0IC5naXQvJG0pCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ1cGRhdGUgJG0gKGxvZ2dlZCBieSB0b3VjaCkiICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgZmFsc2UgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjYgMjM6MzEiIFwKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICRCICRBIC1tICJTd2l0Y2giICYmCisJdGVzdCAkQiA9ICQoY2F0IC5naXQvJG0pCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXQgJG0gKGxvZ2dlZCBieSB0b3VjaCkiICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgZmFsc2UgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjYgMjM6NDEiIFwKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICRBICYmCisJdGVzdCAkQSA9ICQoY2F0IC5naXQvJG0pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGRpcmVjdG9yeSByZW1vdmFsJyAnCisJZ2l0IGJyYW5jaCBkMS9kMi9yMSBIRUFEICYmCisJZ2l0IGJyYW5jaCBkMS9yMiBIRUFEICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL2QxL2QyL3IxICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9sb2dzL3JlZnMvaGVhZHMvZDEvZDIvcjEgJiYKKwlnaXQgYnJhbmNoIC1kIGQxL2QyL3IxICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL2QxL2QyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9sb2dzL3JlZnMvaGVhZHMvZDEvZDIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvZDEvcjIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9kMS9yMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1yZWYgZW1wdHkgZGlyZWN0b3J5IHJlbW92YWwnICcKKwlnaXQgYnJhbmNoIGUxL2UyL3IxIEhFQUQgJiYKKwlnaXQgYnJhbmNoIGUxL3IyIEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQgZTEvZTIvcjEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL2UxL2UyL3IxICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9sb2dzL3JlZnMvaGVhZHMvZTEvZTIvcjEgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCBIRUFEICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL2UxL2UyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9sb2dzL3JlZnMvaGVhZHMvZTEvZTIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvZTEvcjIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9lMS9yMiAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvbG9ncy9IRUFECisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCiskWiAkQSAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDIwMCArMDAwMAlJbml0aWFsIENyZWF0aW9uCiskQSAkQiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDI2MCArMDAwMAlTd2l0Y2gKKyRCICRBICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwODYwICswMDAwCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInZlcmlmeWluZyAkbSdzIGxvZyAobG9nZ2VkIGJ5IHRvdWNoKSIgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIC5naXQvJG0gLmdpdC9sb2dzIGV4cGVjdCIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9sb2dzLyRtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSAkbSAobG9nZ2VkIGJ5IGNvbmZpZykiICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgdHJ1ZSAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzozMiIgXAorCWdpdCB1cGRhdGUtcmVmIEhFQUQgJEEgLW0gIkluaXRpYWwgQ3JlYXRpb24iICYmCisJdGVzdCAkQSA9ICQoY2F0IC5naXQvJG0pCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ1cGRhdGUgJG0gKGxvZ2dlZCBieSBjb25maWcpIiAnCisJdGVzdF9jb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIHRydWUgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjYgMjM6MzMiIFwKKwlnaXQgdXBkYXRlLXJlZiBIRUFEJyIgJEIgJEEgIictbSAiU3dpdGNoIiAmJgorCXRlc3QgJEIgPSAkKGNhdCAuZ2l0LyRtKQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0ICRtIChsb2dnZWQgYnkgY29uZmlnKSIgJworCXRlc3RfY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyB0cnVlICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjQzIiBcCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkQSAmJgorCXRlc3QgJEEgPSAkKGNhdCAuZ2l0LyRtKQorJworCitjYXQgPmV4cGVjdCA8PEVPRgorJFogJEEgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAzMjAgKzAwMDAJSW5pdGlhbCBDcmVhdGlvbgorJEEgJEIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAzODAgKzAwMDAJU3dpdGNoCiskQiAkQSAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDk4MCArMDAwMAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ2ZXJpZnlpbmcgJG0ncyBsb2cgKGxvZ2dlZCBieSBjb25maWcpIiAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRtIC5naXQvbG9ncy8kbSBleHBlY3QiICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvbG9ncy8kbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZm9yIHF1ZXJ5aW5nIHRoZSByZWZsb2cnICcKKwlnaXQgdXBkYXRlLXJlZiAkbSAkRCAmJgorCWNhdCA+LmdpdC9sb2dzLyRtIDw8LUVPRgorCSRaICRDICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMzIwIC0wNTAwCisJJEMgJEEgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAzNTAgLTA1MDAKKwkkQSAkQiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDM4MCAtMDUwMAorCSRGICRaICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwNjgwIC0wNTAwCisJJFogJEUgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTA5ODAgLTA1MDAKKwlFT0YKKycKKworZWQ9IlRodSwgMjYgTWF5IDIwMDUgMTg6MzI6MDAgLTA1MDAiCitnZD0iVGh1LCAyNiBNYXkgMjAwNSAxODozMzowMCAtMDUwMCIKK2xkPSJUaHUsIDI2IE1heSAyMDA1IDE4OjQzOjAwIC0wNTAwIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVlcnkgIm1hc3RlckB7TWF5IDI1IDIwMDV9IiAoYmVmb3JlIGhpc3RvcnkpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBvIGUiICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyQHtNYXkgMjUgMjAwNX0iID5vIDI+ZSAmJgorCWVjaG8gIiRDIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG8gJiYKKwllY2hvICJ3YXJuaW5nOiBsb2cgZm9yICdcJydtYXN0ZXInXCcnIG9ubHkgZ29lcyBiYWNrIHRvICRlZCIgPmV4cGVjdCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgZQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVlcnkgbWFzdGVyQHsyMDA1LTA1LTI1fSAoYmVmb3JlIGhpc3RvcnkpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBvIGUiICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJAezIwMDUtMDUtMjV9ID5vIDI+ZSAmJgorCWVjaG8gIiRDIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG8gJiYKKwllY2hvICJ3YXJuaW5nOiBsb2cgZm9yICdcJydtYXN0ZXInXCcnIG9ubHkgZ29lcyBiYWNrIHRvICRlZCIgPmV4cGVjdCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgZQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVlcnkgIm1hc3RlckB7TWF5IDI2IDIwMDUgMjM6MzE6NTl9IiAoMSBzZWNvbmQgYmVmb3JlIGhpc3RvcnkpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBvIGUiICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyQHtNYXkgMjYgMjAwNSAyMzozMTo1OX0iID5vIDI+ZSAmJgorCWVjaG8gIiRDIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG8gJiYKKwllY2hvICJ3YXJuaW5nOiBsb2cgZm9yICdcJydtYXN0ZXInXCcnIG9ubHkgZ29lcyBiYWNrIHRvICRlZCIgPmV4cGVjdCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgZQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVlcnkgIm1hc3RlckB7TWF5IDI2IDIwMDUgMjM6MzI6MDB9IiAoZXhhY3RseSBoaXN0b3J5IHN0YXJ0KScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbyBlIiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIm1hc3RlckB7TWF5IDI2IDIwMDUgMjM6MzI6MDB9IiA+byAyPmUgJiYKKwllY2hvICIkQyIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGUKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1F1ZXJ5ICJtYXN0ZXJAe01heSAyNiAyMDA1IDIzOjMyOjMwfSIgKGZpcnN0IG5vbi1jcmVhdGlvbiBjaGFuZ2UpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBvIGUiICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyQHtNYXkgMjYgMjAwNSAyMzozMjozMH0iID5vIDI+ZSAmJgorCWVjaG8gIiRBIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG8gJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVlcnkgIm1hc3RlckB7MjAwNS0wNS0yNiAyMzozMzowMX0iIChtaWRkbGUgb2YgaGlzdG9yeSB3aXRoIGdhcCknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIG8gZSIgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6MzM6MDF9IiA+byAyPmUgJiYKKwllY2hvICIkQiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvICYmCisJdGVzdF9pMThuZ3JlcCAtRiAid2FybmluZzogbG9nIGZvciByZWYgJG0gaGFzIGdhcCBhZnRlciAkZ2QiIGUKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1F1ZXJ5ICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6Mzg6MDB9IiAobWlkZGxlIG9mIGhpc3RvcnkpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBvIGUiICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyQHsyMDA1LTA1LTI2IDIzOjM4OjAwfSIgPm8gMj5lICYmCisJZWNobyAiJFoiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdWVyeSAibWFzdGVyQHsyMDA1LTA1LTI2IDIzOjQzOjAwfSIgKGV4YWN0IGVuZCBvZiBoaXN0b3J5KScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbyBlIiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIm1hc3RlckB7MjAwNS0wNS0yNiAyMzo0MzowMH0iID5vIDI+ZSAmJgorCWVjaG8gIiRFIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG8gJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVlcnkgIm1hc3RlckB7MjAwNS0wNS0yOH0iIChwYXN0IGVuZCBvZiBoaXN0b3J5KScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbyBlIiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIm1hc3RlckB7MjAwNS0wNS0yOH0iID5vIDI+ZSAmJgorCWVjaG8gIiREIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG8gJiYKKwl0ZXN0X2kxOG5ncmVwIC1GICJ3YXJuaW5nOiBsb2cgZm9yIHJlZiAkbSB1bmV4cGVjdGVkbHkgZW5kZWQgb24gJGxkIiBlCisnCisKK3JtIC1mIC5naXQvJG0gLmdpdC9sb2dzLyRtIGV4cGVjdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBpbml0aWFsIGZpbGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1mIE0gJiYKKwllY2hvIFRFU1QgPkYgJiYKKwlnaXQgYWRkIEYgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDUtMDUtMjYgMjM6MzAiIFwKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjYgMjM6MzAiIGdpdCBjb21taXQgLW0gYWRkIC1hICYmCisJaF9URVNUPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWVjaG8gVGhlIG90aGVyIGRheSB0aGlzIGRpZCBub3Qgd29yay4gPk0gJiYKKwllY2hvIEFuZCB0aGVuIEJvYiB0b2xkIG1lIGhvdyB0byBmaXggaXQuID4+TSAmJgorCWVjaG8gT1RIRVIgPkYgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDUtMDUtMjYgMjM6NDEiIFwKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjYgMjM6NDEiIGdpdCBjb21taXQgLUYgTSAtYSAmJgorCWhfT1RIRVI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjQ0IiBcCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjQ0IiBnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwloX0ZJWEVEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWVjaG8gTWVyZ2VkIGluaXRpYWwgY29tbWl0IGFuZCBhIGxhdGVyIGNvbW1pdC4gPk0gJiYKKwllY2hvICRoX1RFU1QgPi5naXQvTUVSR0VfSEVBRCAmJgorCUdJVF9BVVRIT1JfREFURT0iMjAwNS0wNS0yNiAyMzo0NSIgXAorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzo0NSIgZ2l0IGNvbW1pdCAtRiBNICYmCisJaF9NRVJHRUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCiskWiAkaF9URVNUICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMjAwICswMDAwCWNvbW1pdCAoaW5pdGlhbCk6IGFkZAorJGhfVEVTVCAkaF9PVEhFUiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDg2MCArMDAwMAljb21taXQ6IFRoZSBvdGhlciBkYXkgdGhpcyBkaWQgbm90IHdvcmsuCiskaF9PVEhFUiAkaF9GSVhFRCAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MTA0MCArMDAwMAljb21taXQgKGFtZW5kKTogVGhlIG90aGVyIGRheSB0aGlzIGRpZCBub3Qgd29yay4KKyRoX0ZJWEVEICRoX01FUkdFRCAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MTEwMCArMDAwMAljb21taXQgKG1lcmdlKTogTWVyZ2VkIGluaXRpYWwgY29tbWl0IGFuZCBhIGxhdGVyIGNvbW1pdC4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbW1pdCBsb2dnZWQgdXBkYXRlcycgJworCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2xvZ3MvJG0KKycKK3Vuc2V0IGhfVEVTVCBoX09USEVSIGhfRklYRUQgaF9NRVJHRUQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyOkYgKGV4cGVjdCBPVEhFUiknICcKKwl0ZXN0IE9USEVSID0gJChnaXQgY2F0LWZpbGUgYmxvYiBtYXN0ZXI6RikKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjYXQtZmlsZSBibG9iIG1hc3RlckB7MjAwNS0wNS0yNiAyMzozMH06RiAoZXhwZWN0IFRFU1QpJyAnCisJdGVzdCBURVNUID0gJChnaXQgY2F0LWZpbGUgYmxvYiAibWFzdGVyQHsyMDA1LTA1LTI2IDIzOjMwfTpGIikKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjYXQtZmlsZSBibG9iIG1hc3RlckB7MjAwNS0wNS0yNiAyMzo0Mn06RiAoZXhwZWN0IE9USEVSKScgJworCXRlc3QgT1RIRVIgPSAkKGdpdCBjYXQtZmlsZSBibG9iICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6NDJ9OkYiKQorJworCisjIFRlc3QgYWRkaW5nIGFuZCBkZWxldGluZyBwc2V1ZG9yZWZzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmVuIG9sZCB2YWx1ZSBmb3IgbWlzc2luZyBwc2V1ZG9yZWYsIGRvIG5vdCBjcmVhdGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiBQU0VVRE9SRUYgJEEgJEIgMj5lcnIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L1BTRVVET1JFRiAmJgorCXRlc3RfaTE4bmdyZXAgImNvdWxkIG5vdCByZWFkIHJlZiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBwc2V1ZG9yZWYnICcKKwlnaXQgdXBkYXRlLXJlZiBQU0VVRE9SRUYgJEEgJiYKKwl0ZXN0ICRBID0gJChjYXQgLmdpdC9QU0VVRE9SRUYpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJ3cml0ZSBwc2V1ZG9yZWYgd2l0aCBubyBvbGQgdmFsdWUgZ2l2ZW4nICcKKwlnaXQgdXBkYXRlLXJlZiBQU0VVRE9SRUYgJEIgJiYKKwl0ZXN0ICRCID0gJChjYXQgLmdpdC9QU0VVRE9SRUYpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJ3cml0ZSBwc2V1ZG9yZWYgd2l0aCBjb3JyZWN0IG9sZCB2YWx1ZScgJworCWdpdCB1cGRhdGUtcmVmIFBTRVVET1JFRiAkQyAkQiAmJgorCXRlc3QgJEMgPSAkKGNhdCAuZ2l0L1BTRVVET1JFRikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IG92ZXJ3cml0ZSBwc2V1ZG9yZWYgd2l0aCB3cm9uZyBvbGQgdmFsdWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiBQU0VVRE9SRUYgJEQgJEUgMj5lcnIgJiYKKwl0ZXN0ICRDID0gJChjYXQgLmdpdC9QU0VVRE9SRUYpICYmCisJdGVzdF9pMThuZ3JlcCAidW5leHBlY3RlZCBvYmplY3QgSUQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGUgcHNldWRvcmVmJyAnCisJZ2l0IHVwZGF0ZS1yZWYgLWQgUFNFVURPUkVGICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9QU0VVRE9SRUYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGRlbGV0ZSBwc2V1ZG9yZWYgd2l0aCB3cm9uZyBvbGQgdmFsdWUnICcKKwlnaXQgdXBkYXRlLXJlZiBQU0VVRE9SRUYgJEEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtZCBQU0VVRE9SRUYgJEIgMj5lcnIgJiYKKwl0ZXN0ICRBID0gJChjYXQgLmdpdC9QU0VVRE9SRUYpICYmCisJdGVzdF9pMThuZ3JlcCAidW5leHBlY3RlZCBvYmplY3QgSUQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGUgcHNldWRvcmVmIHdpdGggY29ycmVjdCBvbGQgdmFsdWUnICcKKwlnaXQgdXBkYXRlLXJlZiAtZCBQU0VVRE9SRUYgJEEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L1BTRVVET1JFRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcHNldWRvcmVmIHdpdGggb2xkIE9JRCB6ZXJvJyAnCisJZ2l0IHVwZGF0ZS1yZWYgUFNFVURPUkVGICRBICRaICYmCisJdGVzdCAkQSA9ICQoY2F0IC5naXQvUFNFVURPUkVGKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3Qgb3ZlcndyaXRlIHBzZXVkb3JlZiB3aXRoIG9sZCBPSUQgemVybycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgdXBkYXRlLXJlZiAtZCBQU0VVRE9SRUYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiBQU0VVRE9SRUYgJEIgJFogMj5lcnIgJiYKKwl0ZXN0ICRBID0gJChjYXQgLmdpdC9QU0VVRE9SRUYpICYmCisJdGVzdF9pMThuZ3JlcCAiYWxyZWFkeSBleGlzdHMiIGVycgorJworCisjIFRlc3QgLS1zdGRpbgorCithPXJlZnMvaGVhZHMvYQorYj1yZWZzL2hlYWRzL2IKK2M9cmVmcy9oZWFkcy9jCitFPSciIicKK0Y9JyVzXDAnCitwd3M9J3BhdGggd2l0aCBzcGFjZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdGVzdCBzZXR1cCcgJworCWVjaG8gIiRwd3MiID4iJHB3cyIgJiYKKwlnaXQgYWRkIC0tICIkcHdzIiAmJgorCWdpdCBjb21taXQgLW0gIiRwd3MiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy16IGZhaWxzIHdpdGhvdXQgLS1zdGRpbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16ICRtICRtICRtIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAidXNhZ2U6IGdpdCB1cGRhdGUtcmVmIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gd29ya3Mgd2l0aCBubyBpbnB1dCcgJworCT5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyBvbiBlbXB0eSBsaW5lJyAnCisJZWNobyAiIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBlbXB0eSBjb21tYW5kIGluIGlucHV0IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgb24gb25seSB3aGl0ZXNwYWNlJyAnCisJZWNobyAiICIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogd2hpdGVzcGFjZSBiZWZvcmUgY29tbWFuZDogICIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIG9uIGxlYWRpbmcgd2hpdGVzcGFjZScgJworCWVjaG8gIiBjcmVhdGUgJGEgJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHdoaXRlc3BhY2UgYmVmb3JlIGNvbW1hbmQ6ICBjcmVhdGUgJGEgJG0iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyBvbiB1bmtub3duIGNvbW1hbmQnICcKKwllY2hvICJ1bmtub3duICRhIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB1bmtub3duIGNvbW1hbmQ6IHVua25vd24gJGEiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyBvbiB1bmJhbGFuY2VkIHF1b3RlcycgJworCWVjaG8gImNyZWF0ZSAkYSBcIm1hc3RlciIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogYmFkbHkgcXVvdGVkIGFyZ3VtZW50OiBcXFwibWFzdGVyIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgb24gaW52YWxpZCBlc2NhcGUnICcKKwllY2hvICJjcmVhdGUgJGEgXCJtYVx6dGVyXCIiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGJhZGx5IHF1b3RlZCBhcmd1bWVudDogXFxcIm1hXFxcXHp0ZXJcXFwiIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgb24ganVuayBhZnRlciBxdW90ZWQgYXJndW1lbnQnICcKKwllY2hvICJjcmVhdGUgXCIkYVwibWFzdGVyIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB1bmV4cGVjdGVkIGNoYXJhY3RlciBhZnRlciBxdW90ZWQgYXJndW1lbnQ6IFxcXCIkYVxcXCJtYXN0ZXIiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyBjcmVhdGUgd2l0aCBubyByZWYnICcKKwllY2hvICJjcmVhdGUgIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjcmVhdGU6IG1pc3NpbmcgPHJlZj4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyBjcmVhdGUgd2l0aCBubyBuZXcgdmFsdWUnICcKKwllY2hvICJjcmVhdGUgJGEiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGNyZWF0ZSAkYTogbWlzc2luZyA8bmV3dmFsdWU+IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgY3JlYXRlIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzJyAnCisJZWNobyAiY3JlYXRlICRhICRtICRtIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjcmVhdGUgJGE6IGV4dHJhIGlucHV0OiAgJG0iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyB1cGRhdGUgd2l0aCBubyByZWYnICcKKwllY2hvICJ1cGRhdGUgIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB1cGRhdGU6IG1pc3NpbmcgPHJlZj4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyB1cGRhdGUgd2l0aCBubyBuZXcgdmFsdWUnICcKKwllY2hvICJ1cGRhdGUgJGEiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHVwZGF0ZSAkYTogbWlzc2luZyA8bmV3dmFsdWU+IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgdXBkYXRlIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzJyAnCisJZWNobyAidXBkYXRlICRhICRtICRtICRtIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB1cGRhdGUgJGE6IGV4dHJhIGlucHV0OiAgJG0iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyBkZWxldGUgd2l0aCBubyByZWYnICcKKwllY2hvICJkZWxldGUgIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBkZWxldGU6IG1pc3NpbmcgPHJlZj4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyBkZWxldGUgd2l0aCB0b28gbWFueSBhcmd1bWVudHMnICcKKwllY2hvICJkZWxldGUgJGEgJG0gJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGRlbGV0ZSAkYTogZXh0cmEgaW5wdXQ6ICAkbSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIHZlcmlmeSB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cycgJworCWVjaG8gInZlcmlmeSAkYSAkbSAkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdmVyaWZ5ICRhOiBleHRyYSBpbnB1dDogICRtIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgb3B0aW9uIHdpdGggdW5rbm93biBuYW1lJyAnCisJZWNobyAib3B0aW9uIHVua25vd24iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IG9wdGlvbiB1bmtub3duOiB1bmtub3duIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgd2l0aCBkdXBsaWNhdGUgcmVmcycgJworCWNhdCA+c3RkaW4gPDwtRU9GICYmCisJY3JlYXRlICRhICRtCisJY3JlYXRlICRiICRtCisJY3JlYXRlICRhICRtCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJmYXRhbDogbXVsdGlwbGUgdXBkYXRlcyBmb3IgcmVmICciJyInJGEnIiciJyBub3QgYWxsb3dlZCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGNyZWF0ZSByZWYgd29ya3MnICcKKwllY2hvICJjcmVhdGUgJGEgJG0iID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBkb2VzIG5vdCBjcmVhdGUgcmVmbG9ncyBieSBkZWZhdWx0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCAkb3V0c2lkZSIgJiYKKwllY2hvICJjcmVhdGUgJG91dHNpZGUgJG0iID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkb3V0c2lkZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWZsb2cgZXhpc3RzICRvdXRzaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGNyZWF0ZXMgcmVmbG9ncyB3aXRoIC0tY3JlYXRlLXJlZmxvZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgJG91dHNpZGUiICYmCisJZWNobyAiY3JlYXRlICRvdXRzaWRlICRtIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAtLWNyZWF0ZS1yZWZsb2cgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRvdXRzaWRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgJG91dHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gc3VjY2VlZHMgd2l0aCBxdW90ZWQgYXJndW1lbnQnICcKKwlnaXQgdXBkYXRlLXJlZiAtZCAkYSAmJgorCWVjaG8gImNyZWF0ZSAkYSBcIiRtXCIiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBzdWNjZWVkcyB3aXRoIGVzY2FwZWQgY2hhcmFjdGVyJyAnCisJZ2l0IHVwZGF0ZS1yZWYgLWQgJGEgJiYKKwllY2hvICJjcmVhdGUgJGEgXCJtYVxcMTYzdGVyXCIiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB1cGRhdGUgcmVmIGNyZWF0ZXMgd2l0aCB6ZXJvIG9sZCB2YWx1ZScgJworCWVjaG8gInVwZGF0ZSAkYiAkbSAkWiIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgJGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdXBkYXRlIHJlZiBjcmVhdGVzIHdpdGggZW1wdHkgb2xkIHZhbHVlJyAnCisJZWNobyAidXBkYXRlICRiICRtICRFIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gY3JlYXRlIHJlZiB3b3JrcyB3aXRoIHBhdGggd2l0aCBzcGFjZSB0byBibG9iJyAnCisJZWNobyAiY3JlYXRlIHJlZnMvYmxvYnMvcHdzIFwiJG06JHB3c1wiIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgIiRtOiRwd3MiID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvYmxvYnMvcHdzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9ibG9icy9wd3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdXBkYXRlIHJlZiBmYWlscyB3aXRoIHdyb25nIG9sZCB2YWx1ZScgJworCWVjaG8gInVwZGF0ZSAkYyAkbSAkbX4xIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjYW5ub3QgbG9jayByZWYgJyInIickYyciJyInIiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIHVwZGF0ZSByZWYgZmFpbHMgd2l0aCBiYWQgb2xkIHZhbHVlJyAnCisJZWNobyAidXBkYXRlICRjICRtIGRvZXMtbm90LWV4aXN0IiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB1cGRhdGUgJGM6IGludmFsaWQgPG9sZHZhbHVlPjogZG9lcy1ub3QtZXhpc3QiIGVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gY3JlYXRlIHJlZiBmYWlscyB3aXRoIGJhZCBuZXcgdmFsdWUnICcKKwllY2hvICJjcmVhdGUgJGMgZG9lcy1ub3QtZXhpc3QiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGNyZWF0ZSAkYzogaW52YWxpZCA8bmV3dmFsdWU+OiBkb2VzLW5vdC1leGlzdCIgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBjcmVhdGUgcmVmIGZhaWxzIHdpdGggemVybyBuZXcgdmFsdWUnICcKKwllY2hvICJjcmVhdGUgJGMgIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjcmVhdGUgJGM6IHplcm8gPG5ld3ZhbHVlPiIgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB1cGRhdGUgcmVmIHdvcmtzIHdpdGggcmlnaHQgb2xkIHZhbHVlJyAnCisJZWNobyAidXBkYXRlICRiICRtfjEgJG0iID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbX4xID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGRlbGV0ZSByZWYgZmFpbHMgd2l0aCB3cm9uZyBvbGQgdmFsdWUnICcKKwllY2hvICJkZWxldGUgJGEgJG1+MSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY2Fubm90IGxvY2sgcmVmICciJyInJGEnIiciJyIgZXJyICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBkZWxldGUgcmVmIGZhaWxzIHdpdGggemVybyBvbGQgdmFsdWUnICcKKwllY2hvICJkZWxldGUgJGEgIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBkZWxldGUgJGE6IHplcm8gPG9sZHZhbHVlPiIgZXJyICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB1cGRhdGUgc3ltcmVmIHdvcmtzIG9wdGlvbiBuby1kZXJlZicgJworCWdpdCBzeW1ib2xpYy1yZWYgVEVTVFNZTVJFRiAkYiAmJgorCWNhdCA+c3RkaW4gPDwtRU9GICYmCisJb3B0aW9uIG5vLWRlcmVmCisJdXBkYXRlIFRFU1RTWU1SRUYgJGEgJGIKKwlFT0YKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgVEVTVFNZTVJFRiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgJG1+MSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBkZWxldGUgc3ltcmVmIHdvcmtzIG9wdGlvbiBuby1kZXJlZicgJworCWdpdCBzeW1ib2xpYy1yZWYgVEVTVFNZTVJFRiAkYiAmJgorCWNhdCA+c3RkaW4gPDwtRU9GICYmCisJb3B0aW9uIG5vLWRlcmVmCisJZGVsZXRlIFRFU1RTWU1SRUYgJGIKKwlFT0YKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgVEVTVFNZTVJFRiAmJgorCWdpdCByZXYtcGFyc2UgJG1+MSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB1cGRhdGUgc3ltcmVmIHdvcmtzIGZsYWcgLS1uby1kZXJlZicgJworCWdpdCBzeW1ib2xpYy1yZWYgVEVTVFNZTVJFRk9ORSAkYiAmJgorCWdpdCBzeW1ib2xpYy1yZWYgVEVTVFNZTVJFRlRXTyAkYiAmJgorCWNhdCA+c3RkaW4gPDwtRU9GICYmCisJdXBkYXRlIFRFU1RTWU1SRUZPTkUgJGEgJGIKKwl1cGRhdGUgVEVTVFNZTVJFRlRXTyAkYSAkYgorCUVPRgorCWdpdCB1cGRhdGUtcmVmIC0tbm8tZGVyZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlIFRFU1RTWU1SRUZPTkUgVEVTVFNZTVJFRlRXTyA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgJG1+MSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBkZWxldGUgc3ltcmVmIHdvcmtzIGZsYWcgLS1uby1kZXJlZicgJworCWdpdCBzeW1ib2xpYy1yZWYgVEVTVFNZTVJFRk9ORSAkYiAmJgorCWdpdCBzeW1ib2xpYy1yZWYgVEVTVFNZTVJFRlRXTyAkYiAmJgorCWNhdCA+c3RkaW4gPDwtRU9GICYmCisJZGVsZXRlIFRFU1RTWU1SRUZPTkUgJGIKKwlkZWxldGUgVEVTVFNZTVJFRlRXTyAkYgorCUVPRgorCWdpdCB1cGRhdGUtcmVmIC0tbm8tZGVyZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIFRFU1RTWU1SRUZPTkUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIFRFU1RTWU1SRUZUV08gJiYKKwlnaXQgcmV2LXBhcnNlICRtfjEgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZGVsZXRlIHJlZiB3b3JrcyB3aXRoIHJpZ2h0IG9sZCB2YWx1ZScgJworCWVjaG8gImRlbGV0ZSAkYiAkbX4xIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdXBkYXRlL2NyZWF0ZS92ZXJpZnkgY29tYmluYXRpb24gd29ya3MnICcKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCXVwZGF0ZSAkYSAkbQorCWNyZWF0ZSAkYiAkbQorCXZlcmlmeSAkYworCUVPRgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIHZlcmlmeSBzdWNjZWVkcyBmb3IgY29ycmVjdCB2YWx1ZScgJworCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWVjaG8gInZlcmlmeSAkbSAkbSIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIHZlcmlmeSBzdWNjZWVkcyBmb3IgbWlzc2luZyByZWZlcmVuY2UnICcKKwllY2hvICJ2ZXJpZnkgcmVmcy9oZWFkcy9taXNzaW5nICRaIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgcmVmcy9oZWFkcy9taXNzaW5nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIHZlcmlmeSB0cmVhdHMgbm8gdmFsdWUgYXMgbWlzc2luZycgJworCWVjaG8gInZlcmlmeSByZWZzL2hlYWRzL21pc3NpbmciID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSByZWZzL2hlYWRzL21pc3NpbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdmVyaWZ5IGZhaWxzIGZvciB3cm9uZyB2YWx1ZScgJworCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWVjaG8gInZlcmlmeSAkbSAkbX4xIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdmVyaWZ5IGZhaWxzIGZvciBtaXN0YWtlbiBudWxsIHZhbHVlJyAnCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZWNobyAidmVyaWZ5ICRtICRaIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdmVyaWZ5IGZhaWxzIGZvciBtaXN0YWtlbiBlbXB0eSB2YWx1ZScgJworCU09JChnaXQgcmV2LXBhcnNlICRtKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgJG0gJE0iICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZWNobyAidmVyaWZ5ICRtIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdXBkYXRlIHJlZnMgd29ya3Mgd2l0aCBpZGVudGl0eSB1cGRhdGVzJyAnCisJY2F0ID5zdGRpbiA8PC1FT0YgJiYKKwl1cGRhdGUgJGEgJG0gJG0KKwl1cGRhdGUgJGIgJG0gJG0KKwl1cGRhdGUgJGMgJFogJEUKKwlFT0YKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB1cGRhdGUgcmVmcyBmYWlscyB3aXRoIHdyb25nIG9sZCB2YWx1ZScgJworCWdpdCB1cGRhdGUtcmVmICRjICRtICYmCisJY2F0ID5zdGRpbiA8PC1FT0YgJiYKKwl1cGRhdGUgJGEgJG0gJG0KKwl1cGRhdGUgJGIgJG0gJG0KKwl1cGRhdGUgJGMgICcnCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY2Fubm90IGxvY2sgcmVmICciJyInJGMnIiciJyIgZXJyICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlICRjID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGRlbGV0ZSByZWZzIHdvcmtzIHdpdGggcGFja2VkIGFuZCBsb29zZSByZWZzJyAnCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWdpdCB1cGRhdGUtcmVmICRjICRtfjEgJiYKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCWRlbGV0ZSAkYSAkbQorCXVwZGF0ZSAkYiAkWiAkbQorCXVwZGF0ZSAkYyAkRSAkbX4xCisJRU9GCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogd29ya3Mgb24gZW1wdHkgaW5wdXQnICcKKwk+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJG0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgb24gZW1wdHkgbGluZScgJworCWVjaG8gIiIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogd2hpdGVzcGFjZSBiZWZvcmUgY29tbWFuZDogIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgb24gZW1wdHkgY29tbWFuZCcgJworCXByaW50ZiAkRiAiIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBlbXB0eSBjb21tYW5kIGluIGlucHV0IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgb24gb25seSB3aGl0ZXNwYWNlJyAnCisJcHJpbnRmICRGICIgIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB3aGl0ZXNwYWNlIGJlZm9yZSBjb21tYW5kOiAgIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgb24gbGVhZGluZyB3aGl0ZXNwYWNlJyAnCisJcHJpbnRmICRGICIgY3JlYXRlICRhIiAiJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHdoaXRlc3BhY2UgYmVmb3JlIGNvbW1hbmQ6ICBjcmVhdGUgJGEiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBvbiB1bmtub3duIGNvbW1hbmQnICcKKwlwcmludGYgJEYgInVua25vd24gJGEiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHVua25vd24gY29tbWFuZDogdW5rbm93biAkYSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIGNyZWF0ZSB3aXRoIG5vIHJlZicgJworCXByaW50ZiAkRiAiY3JlYXRlICIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY3JlYXRlOiBtaXNzaW5nIDxyZWY+IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgY3JlYXRlIHdpdGggbm8gbmV3IHZhbHVlJyAnCisJcHJpbnRmICRGICJjcmVhdGUgJGEiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGNyZWF0ZSAkYTogdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgd2hlbiByZWFkaW5nIDxuZXd2YWx1ZT4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBjcmVhdGUgd2l0aCB0b28gbWFueSBhcmd1bWVudHMnICcKKwlwcmludGYgJEYgImNyZWF0ZSAkYSIgIiRtIiAiJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHVua25vd24gY29tbWFuZDogJG0iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyB1cGRhdGUgd2l0aCBubyByZWYnICcKKwlwcmludGYgJEYgInVwZGF0ZSAiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHVwZGF0ZTogbWlzc2luZyA8cmVmPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIHVwZGF0ZSB3aXRoIHRvbyBmZXcgYXJncycgJworCXByaW50ZiAkRiAidXBkYXRlICRhIiAiJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHVwZGF0ZSAkYTogdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgd2hlbiByZWFkaW5nIDxvbGR2YWx1ZT4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBlbWl0cyB3YXJuaW5nIHdpdGggZW1wdHkgbmV3IHZhbHVlJyAnCisJZ2l0IHVwZGF0ZS1yZWYgJGEgJG0gJiYKKwlwcmludGYgJEYgInVwZGF0ZSAkYSIgIiIgIiIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJ3YXJuaW5nOiB1cGRhdGUgJGE6IG1pc3NpbmcgPG5ld3ZhbHVlPiwgdHJlYXRpbmcgYXMgemVybyIgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyB1cGRhdGUgd2l0aCBubyBuZXcgdmFsdWUnICcKKwlwcmludGYgJEYgInVwZGF0ZSAkYSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdXBkYXRlICRhOiB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHJlYWRpbmcgPG5ld3ZhbHVlPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIHVwZGF0ZSB3aXRoIG5vIG9sZCB2YWx1ZScgJworCXByaW50ZiAkRiAidXBkYXRlICRhIiAiJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHVwZGF0ZSAkYTogdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgd2hlbiByZWFkaW5nIDxvbGR2YWx1ZT4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyB1cGRhdGUgd2l0aCB0b28gbWFueSBhcmd1bWVudHMnICcKKwlwcmludGYgJEYgInVwZGF0ZSAkYSIgIiRtIiAiJG0iICIkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdW5rbm93biBjb21tYW5kOiAkbSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIGRlbGV0ZSB3aXRoIG5vIHJlZicgJworCXByaW50ZiAkRiAiZGVsZXRlICIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogZGVsZXRlOiBtaXNzaW5nIDxyZWY+IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgZGVsZXRlIHdpdGggbm8gb2xkIHZhbHVlJyAnCisJcHJpbnRmICRGICJkZWxldGUgJGEiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGRlbGV0ZSAkYTogdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgd2hlbiByZWFkaW5nIDxvbGR2YWx1ZT4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBkZWxldGUgd2l0aCB0b28gbWFueSBhcmd1bWVudHMnICcKKwlwcmludGYgJEYgImRlbGV0ZSAkYSIgIiRtIiAiJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHVua25vd24gY29tbWFuZDogJG0iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyB2ZXJpZnkgd2l0aCB0b28gbWFueSBhcmd1bWVudHMnICcKKwlwcmludGYgJEYgInZlcmlmeSAkYSIgIiRtIiAiJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHVua25vd24gY29tbWFuZDogJG0iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyB2ZXJpZnkgd2l0aCBubyBvbGQgdmFsdWUnICcKKwlwcmludGYgJEYgInZlcmlmeSAkYSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdmVyaWZ5ICRhOiB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHJlYWRpbmcgPG9sZHZhbHVlPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIG9wdGlvbiB3aXRoIHVua25vd24gbmFtZScgJworCXByaW50ZiAkRiAib3B0aW9uIHVua25vd24iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IG9wdGlvbiB1bmtub3duOiB1bmtub3duIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgd2l0aCBkdXBsaWNhdGUgcmVmcycgJworCXByaW50ZiAkRiAiY3JlYXRlICRhIiAiJG0iICJjcmVhdGUgJGIiICIkbSIgImNyZWF0ZSAkYSIgIiRtIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImZhdGFsOiBtdWx0aXBsZSB1cGRhdGVzIGZvciByZWYgJyInIickYSciJyInIG5vdCBhbGxvd2VkIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogY3JlYXRlIHJlZiB3b3JrcycgJworCXByaW50ZiAkRiAiY3JlYXRlICRhIiAiJG0iID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB1cGRhdGUgcmVmIGNyZWF0ZXMgd2l0aCB6ZXJvIG9sZCB2YWx1ZScgJworCXByaW50ZiAkRiAidXBkYXRlICRiIiAiJG0iICIkWiIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgJGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogdXBkYXRlIHJlZiBjcmVhdGVzIHdpdGggZW1wdHkgb2xkIHZhbHVlJyAnCisJcHJpbnRmICRGICJ1cGRhdGUgJGIiICIkbSIgIiIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGNyZWF0ZSByZWYgd29ya3Mgd2l0aCBwYXRoIHdpdGggc3BhY2UgdG8gYmxvYicgJworCXByaW50ZiAkRiAiY3JlYXRlIHJlZnMvYmxvYnMvcHdzIiAiJG06JHB3cyIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICIkbTokcHdzIiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL2Jsb2JzL3B3cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvYmxvYnMvcHdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHVwZGF0ZSByZWYgZmFpbHMgd2l0aCB3cm9uZyBvbGQgdmFsdWUnICcKKwlwcmludGYgJEYgInVwZGF0ZSAkYyIgIiRtIiAiJG1+MSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY2Fubm90IGxvY2sgcmVmICciJyInJGMnIiciJyIgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB1cGRhdGUgcmVmIGZhaWxzIHdpdGggYmFkIG9sZCB2YWx1ZScgJworCXByaW50ZiAkRiAidXBkYXRlICRjIiAiJG0iICJkb2VzLW5vdC1leGlzdCIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdXBkYXRlICRjOiBpbnZhbGlkIDxvbGR2YWx1ZT46IGRvZXMtbm90LWV4aXN0IiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGNyZWF0ZSByZWYgZmFpbHMgd2hlbiByZWYgZXhpc3RzJyAnCisJZ2l0IHVwZGF0ZS1yZWYgJGMgJG0gJiYKKwlnaXQgcmV2LXBhcnNlICIkYyIgPmV4cGVjdCAmJgorCXByaW50ZiAkRiAiY3JlYXRlICRjIiAiJG1+MSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY2Fubm90IGxvY2sgcmVmICciJyInJGMnIiciJyIgZXJyICYmCisJZ2l0IHJldi1wYXJzZSAiJGMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGNyZWF0ZSByZWYgZmFpbHMgd2l0aCBiYWQgbmV3IHZhbHVlJyAnCisJZ2l0IHVwZGF0ZS1yZWYgLWQgIiRjIiAmJgorCXByaW50ZiAkRiAiY3JlYXRlICRjIiAiZG9lcy1ub3QtZXhpc3QiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGNyZWF0ZSAkYzogaW52YWxpZCA8bmV3dmFsdWU+OiBkb2VzLW5vdC1leGlzdCIgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBjcmVhdGUgcmVmIGZhaWxzIHdpdGggZW1wdHkgbmV3IHZhbHVlJyAnCisJcHJpbnRmICRGICJjcmVhdGUgJGMiICIiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGNyZWF0ZSAkYzogbWlzc2luZyA8bmV3dmFsdWU+IiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHVwZGF0ZSByZWYgd29ya3Mgd2l0aCByaWdodCBvbGQgdmFsdWUnICcKKwlwcmludGYgJEYgInVwZGF0ZSAkYiIgIiRtfjEiICIkbSIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtfjEgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZGVsZXRlIHJlZiBmYWlscyB3aXRoIHdyb25nIG9sZCB2YWx1ZScgJworCXByaW50ZiAkRiAiZGVsZXRlICRhIiAiJG1+MSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY2Fubm90IGxvY2sgcmVmICciJyInJGEnIiciJyIgZXJyICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBkZWxldGUgcmVmIGZhaWxzIHdpdGggemVybyBvbGQgdmFsdWUnICcKKwlwcmludGYgJEYgImRlbGV0ZSAkYSIgIiRaIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBkZWxldGUgJGE6IHplcm8gPG9sZHZhbHVlPiIgZXJyICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB1cGRhdGUgc3ltcmVmIHdvcmtzIG9wdGlvbiBuby1kZXJlZicgJworCWdpdCBzeW1ib2xpYy1yZWYgVEVTVFNZTVJFRiAkYiAmJgorCXByaW50ZiAkRiAib3B0aW9uIG5vLWRlcmVmIiAidXBkYXRlIFRFU1RTWU1SRUYiICIkYSIgIiRiIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgVEVTVFNZTVJFRiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgJG1+MSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBkZWxldGUgc3ltcmVmIHdvcmtzIG9wdGlvbiBuby1kZXJlZicgJworCWdpdCBzeW1ib2xpYy1yZWYgVEVTVFNZTVJFRiAkYiAmJgorCXByaW50ZiAkRiAib3B0aW9uIG5vLWRlcmVmIiAiZGVsZXRlIFRFU1RTWU1SRUYiICIkYiIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIFRFU1RTWU1SRUYgJiYKKwlnaXQgcmV2LXBhcnNlICRtfjEgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZGVsZXRlIHJlZiB3b3JrcyB3aXRoIHJpZ2h0IG9sZCB2YWx1ZScgJworCXByaW50ZiAkRiAiZGVsZXRlICRiIiAiJG1+MSIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHVwZGF0ZS9jcmVhdGUvdmVyaWZ5IGNvbWJpbmF0aW9uIHdvcmtzJyAnCisJcHJpbnRmICRGICJ1cGRhdGUgJGEiICIkbSIgIiIgImNyZWF0ZSAkYiIgIiRtIiAidmVyaWZ5ICRjIiAiIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB2ZXJpZnkgc3VjY2VlZHMgZm9yIGNvcnJlY3QgdmFsdWUnICcKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlwcmludGYgJEYgInZlcmlmeSAkbSIgIiRtIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogdmVyaWZ5IHN1Y2NlZWRzIGZvciBtaXNzaW5nIHJlZmVyZW5jZScgJworCXByaW50ZiAkRiAidmVyaWZ5IHJlZnMvaGVhZHMvbWlzc2luZyIgIiRaIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgcmVmcy9oZWFkcy9taXNzaW5nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHZlcmlmeSB0cmVhdHMgbm8gdmFsdWUgYXMgbWlzc2luZycgJworCXByaW50ZiAkRiAidmVyaWZ5IHJlZnMvaGVhZHMvbWlzc2luZyIgIiIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIHJlZnMvaGVhZHMvbWlzc2luZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB2ZXJpZnkgZmFpbHMgZm9yIHdyb25nIHZhbHVlJyAnCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJcHJpbnRmICRGICJ2ZXJpZnkgJG0iICIkbX4xIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogdmVyaWZ5IGZhaWxzIGZvciBtaXN0YWtlbiBudWxsIHZhbHVlJyAnCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJcHJpbnRmICRGICJ2ZXJpZnkgJG0iICIkWiIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHZlcmlmeSBmYWlscyBmb3IgbWlzdGFrZW4gZW1wdHkgdmFsdWUnICcKKwlNPSQoZ2l0IHJldi1wYXJzZSAkbSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmICRtICRNIiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCXByaW50ZiAkRiAidmVyaWZ5ICRtIiAiIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogdXBkYXRlIHJlZnMgd29ya3Mgd2l0aCBpZGVudGl0eSB1cGRhdGVzJyAnCisJcHJpbnRmICRGICJ1cGRhdGUgJGEiICIkbSIgIiRtIiAidXBkYXRlICRiIiAiJG0iICIkbSIgInVwZGF0ZSAkYyIgIiRaIiAiIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB1cGRhdGUgcmVmcyBmYWlscyB3aXRoIHdyb25nIG9sZCB2YWx1ZScgJworCWdpdCB1cGRhdGUtcmVmICRjICRtICYmCisJcHJpbnRmICRGICJ1cGRhdGUgJGEiICIkbSIgIiRtIiAidXBkYXRlICRiIiAiJG0iICIkbSIgInVwZGF0ZSAkYyIgIiRtIiAiJFoiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAnIiciJyRjJyInIiciIGVyciAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAkYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBkZWxldGUgcmVmcyB3b3JrcyB3aXRoIHBhY2tlZCBhbmQgbG9vc2UgcmVmcycgJworCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgdXBkYXRlLXJlZiAkYyAkbX4xICYmCisJcHJpbnRmICRGICJkZWxldGUgJGEiICIkbSIgInVwZGF0ZSAkYiIgIiRaIiAiJG0iICJ1cGRhdGUgJGMiICIiICIkbX4xIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlscyB3aXRoIGR1cGxpY2F0ZSBIRUFEIHVwZGF0ZScgJworCWdpdCBicmFuY2ggdGFyZ2V0MSAkQSAmJgorCWdpdCBjaGVja291dCB0YXJnZXQxICYmCisJY2F0ID5zdGRpbiA8PC1FT0YgJiYKKwl1cGRhdGUgcmVmcy9oZWFkcy90YXJnZXQxICRDCisJb3B0aW9uIG5vLWRlcmVmCisJdXBkYXRlIEhFQUQgJEIKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImZhdGFsOiBtdWx0aXBsZSB1cGRhdGVzIGZvciAnXCcnSEVBRCdcJycgKGluY2x1ZGluZyBvbmUgdmlhIGl0cyByZWZlcmVudCAucmVmcy9oZWFkcy90YXJnZXQxLikgYXJlIG5vdCBhbGxvd2VkIiBlcnIgJiYKKwllY2hvICJyZWZzL2hlYWRzL3RhcmdldDEiID5leHBlY3QgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvICIkQSIgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy90YXJnZXQxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIHdpdGggZHVwbGljYXRlIHJlZiB1cGRhdGUgdmlhIHN5bXJlZicgJworCWdpdCBicmFuY2ggdGFyZ2V0MiAkQSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9zeW1yZWYyIHJlZnMvaGVhZHMvdGFyZ2V0MiAmJgorCWNhdCA+c3RkaW4gPDwtRU9GICYmCisJdXBkYXRlIHJlZnMvaGVhZHMvdGFyZ2V0MiAkQworCXVwZGF0ZSByZWZzL2hlYWRzL3N5bXJlZjIgJEIKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImZhdGFsOiBtdWx0aXBsZSB1cGRhdGVzIGZvciAnXCcncmVmcy9oZWFkcy90YXJnZXQyJ1wnJyAoaW5jbHVkaW5nIG9uZSB2aWEgc3ltcmVmIC5yZWZzL2hlYWRzL3N5bXJlZjIuKSBhcmUgbm90IGFsbG93ZWQiIGVyciAmJgorCWVjaG8gInJlZnMvaGVhZHMvdGFyZ2V0MiIgPmV4cGVjdCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9zeW1yZWYyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyAiJEEiID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvdGFyZ2V0MiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFVMSU1JVF9GSUxFX0RFU0NSSVBUT1JTICdsYXJnZSB0cmFuc2FjdGlvbiBjcmVhdGluZyBicmFuY2hlcyBkb2VzIG5vdCBidXJzdCBvcGVuIGZpbGUgbGltaXQnICcKKygKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDMzKQorCWRvCisJCWVjaG8gImNyZWF0ZSByZWZzL2hlYWRzLyRpIEhFQUQiCisJZG9uZSA+bGFyZ2VfaW5wdXQgJiYKKwlydW5fd2l0aF9saW1pdGVkX29wZW5fZmlsZXMgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8bGFyZ2VfaW5wdXQgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIHJlZnMvaGVhZHMvMzMKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBVTElNSVRfRklMRV9ERVNDUklQVE9SUyAnbGFyZ2UgdHJhbnNhY3Rpb24gZGVsZXRpbmcgYnJhbmNoZXMgZG9lcyBub3QgYnVyc3Qgb3BlbiBmaWxlIGxpbWl0JyAnCisoCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAzMykKKwlkbworCQllY2hvICJkZWxldGUgcmVmcy9oZWFkcy8kaSBIRUFEIgorCWRvbmUgPmxhcmdlX2lucHV0ICYmCisJcnVuX3dpdGhfbGltaXRlZF9vcGVuX2ZpbGVzIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPGxhcmdlX2lucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSByZWZzL2hlYWRzLzMzCispCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhbmRsZSBwZXItd29ya3RyZWUgcmVmcyBpbiByZWZzL2Jpc2VjdCcgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiaW5pdGlhbCBjb21taXQiICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtYiBicmFuY2ggd29ya3RyZWUgJiYKKwkoCisJCWNkIHdvcmt0cmVlICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAidGVzdCBjb21taXQiICAmJgorCQlnaXQgZm9yLWVhY2gtcmVmID5mb3ItZWFjaC1yZWYub3V0ICYmCisJCSEgZ3JlcCByZWZzL2Jpc2VjdCBmb3ItZWFjaC1yZWYub3V0ICYmCisJCWdpdCB1cGRhdGUtcmVmIHJlZnMvYmlzZWN0L3NvbWV0aGluZyBIRUFEICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9iaXNlY3Qvc29tZXRoaW5nID4uLi93b3JrdHJlZS1oZWFkICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgfCBncmVwIHJlZnMvYmlzZWN0L3NvbWV0aGluZworCSkgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvYmlzZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL2Jpc2VjdC9zb21ldGhpbmcgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2Jpc2VjdC9zb21ldGhpbmcgSEVBRCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9iaXNlY3Qvc29tZXRoaW5nID5tYWluLWhlYWQgJiYKKwkhIHRlc3RfY21wIG1haW4taGVhZCB3b3JrdHJlZS1oZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYW5zYWN0aW9uIGhhbmRsZXMgZW1wdHkgY29tbWl0JyAnCisJY2F0ID5zdGRpbiA8PC1FT0YgJiYKKwlzdGFydAorCXByZXBhcmUKKwljb21taXQKKwlFT0YKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiA+YWN0dWFsICYmCisJcHJpbnRmICIlczogb2tcbiIgc3RhcnQgcHJlcGFyZSBjb21taXQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhbnNhY3Rpb24gaGFuZGxlcyBlbXB0eSBjb21taXQgd2l0aCBtaXNzaW5nIHByZXBhcmUnICcKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCXN0YXJ0CisJY29tbWl0CisJRU9GCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gPmFjdHVhbCAmJgorCXByaW50ZiAiJXM6IG9rXG4iIHN0YXJ0IGNvbW1pdCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFuc2FjdGlvbiBoYW5kbGVzIHNvbGUgY29tbWl0JyAnCisJY2F0ID5zdGRpbiA8PC1FT0YgJiYKKwljb21taXQKKwlFT0YKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiA+YWN0dWFsICYmCisJcHJpbnRmICIlczogb2tcbiIgY29tbWl0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYW5zYWN0aW9uIGhhbmRsZXMgZW1wdHkgYWJvcnQnICcKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCXN0YXJ0CisJcHJlcGFyZQorCWFib3J0CisJRU9GCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gPmFjdHVhbCAmJgorCXByaW50ZiAiJXM6IG9rXG4iIHN0YXJ0IHByZXBhcmUgYWJvcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhbnNhY3Rpb24gZXhpdHMgb24gbXVsdGlwbGUgYWJvcnRzJyAnCisJY2F0ID5zdGRpbiA8PC1FT0YgJiYKKwlhYm9ydAorCWFib3J0CisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gPmFjdHVhbCAyPmVyciAmJgorCXByaW50ZiAiJXM6IG9rXG4iIGFib3J0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ3JlcCAiZmF0YWw6IHRyYW5zYWN0aW9uIGlzIGNsb3NlZCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYW5zYWN0aW9uIGV4aXRzIG9uIHN0YXJ0IGFmdGVyIHByZXBhcmUnICcKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCXByZXBhcmUKKwlzdGFydAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyID5hY3R1YWwgJiYKKwlwcmludGYgIiVzOiBva1xuIiBwcmVwYXJlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ3JlcCAiZmF0YWw6IHByZXBhcmVkIHRyYW5zYWN0aW9ucyBjYW4gb25seSBiZSBjbG9zZWQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFuc2FjdGlvbiBoYW5kbGVzIGVtcHR5IGFib3J0IHdpdGggbWlzc2luZyBwcmVwYXJlJyAnCisJY2F0ID5zdGRpbiA8PC1FT0YgJiYKKwlzdGFydAorCWFib3J0CisJRU9GCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gPmFjdHVhbCAmJgorCXByaW50ZiAiJXM6IG9rXG4iIHN0YXJ0IGFib3J0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYW5zYWN0aW9uIGhhbmRsZXMgc29sZSBhYm9ydCcgJworCWNhdCA+c3RkaW4gPDwtRU9GICYmCisJYWJvcnQKKwlFT0YKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiA+YWN0dWFsICYmCisJcHJpbnRmICIlczogb2tcbiIgYWJvcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhbnNhY3Rpb24gY2FuIGhhbmRsZSBjb21taXQnICcKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCXN0YXJ0CisJY3JlYXRlICRhIEhFQUQKKwljb21taXQKKwlFT0YKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiA+YWN0dWFsICYmCisJcHJpbnRmICIlczogb2tcbiIgc3RhcnQgY29tbWl0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYW5zYWN0aW9uIGNhbiBoYW5kbGUgYWJvcnQnICcKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCXN0YXJ0CisJY3JlYXRlICRiIEhFQUQKKwlhYm9ydAorCUVPRgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluID5hY3R1YWwgJiYKKwlwcmludGYgIiVzOiBva1xuIiBzdGFydCBhYm9ydCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvJGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhbnNhY3Rpb24gYWJvcnRzIGJ5IGRlZmF1bHQnICcKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCXN0YXJ0CisJY3JlYXRlICRiIEhFQUQKKwlFT0YKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiA+YWN0dWFsICYmCisJcHJpbnRmICIlczogb2tcbiIgc3RhcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0LyRiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYW5zYWN0aW9uIHdpdGggcHJlcGFyZSBhYm9ydHMgYnkgZGVmYXVsdCcgJworCWNhdCA+c3RkaW4gPDwtRU9GICYmCisJc3RhcnQKKwljcmVhdGUgJGIgSEVBRAorCXByZXBhcmUKKwlFT0YKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiA+YWN0dWFsICYmCisJcHJpbnRmICIlczogb2tcbiIgc3RhcnQgcHJlcGFyZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvJGIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDAxLXN5bWJvbGljLXJlZi5zaCBiL3QvdDE0MDEtc3ltYm9saWMtcmVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE0ZWJiMGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDAxLXN5bWJvbGljLXJlZi5zaApAQCAtMCwwICsxLDE2MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIHN5bWJvbGljLXJlZiB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorCisjIElmIHRoZSB0ZXN0cyBtdW5naW5nIEhFQUQgZmFpbCwgdGhleSBjYW4gYnJlYWsgZGV0ZWN0aW9uIG9mCisjIHRoZSBnaXQgcmVwbywgbWVhbmluZyB0aGF0IGZ1cnRoZXIgdGVzdHMgd2lsbCBvcGVyYXRlIG9uCisjIHRoZSBzdXJyb3VuZGluZyBnaXQgcmVwbyBpbnN0ZWFkIG9mIHRoZSB0cmFzaCBkaXJlY3RvcnkuCityZXNldF90b19zYW5lKCkgeworCWVjaG8gcmVmOiByZWZzL2hlYWRzL2ZvbyA+LmdpdC9IRUFECit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiB3cml0ZXMgSEVBRCcgJworCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL2ZvbyAmJgorCWVjaG8gcmVmOiByZWZzL2hlYWRzL2ZvbyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1ib2xpYy1yZWYgcmVhZHMgSEVBRCcgJworCWVjaG8gcmVmcy9oZWFkcy9mb28gPmV4cGVjdCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1ib2xpYy1yZWYgcmVmdXNlcyBub24tcmVmIGZvciBIRUFEJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFEIGZvbworJworcmVzZXRfdG9fc2FuZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1ib2xpYy1yZWYgcmVmdXNlcyBiYXJlIHNoYTEnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFEICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworcmVzZXRfdG9fc2FuZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIRUFEIGNhbm5vdCBiZSByZW1vdmVkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiAtZCBIRUFECisnCisKK3Jlc2V0X3RvX3NhbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMtcmVmIGNhbiBiZSBkZWxldGVkJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBOT1RIRUFEIHJlZnMvaGVhZHMvZm9vICYmCisJZ2l0IHN5bWJvbGljLXJlZiAtZCBOT1RIRUFEICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL2ZvbyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTk9USEVBRAorJworcmVzZXRfdG9fc2FuZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1ib2xpYy1yZWYgY2FuIGRlbGV0ZSBkYW5nbGluZyBzeW1yZWYnICcKKwlnaXQgc3ltYm9saWMtcmVmIE5PVEhFQUQgcmVmcy9oZWFkcy9taXNzaW5nICYmCisJZ2l0IHN5bWJvbGljLXJlZiAtZCBOT1RIRUFEICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL21pc3NpbmcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L05PVEhFQUQKKycKK3Jlc2V0X3RvX3NhbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMtcmVmIGZhaWxzIHRvIGRlbGV0ZSBtaXNzaW5nIEZPTycgJworCWVjaG8gImZhdGFsOiBDYW5ub3QgZGVsZXRlIEZPTywgbm90IGEgc3ltYm9saWMgcmVmIiA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiAtZCBGT08gPmFjdHVhbCAyPiYxICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworcmVzZXRfdG9fc2FuZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1ib2xpYy1yZWYgZmFpbHMgdG8gZGVsZXRlIHJlYWwgcmVmJyAnCisJZWNobyAiZmF0YWw6IENhbm5vdCBkZWxldGUgcmVmcy9oZWFkcy9mb28sIG5vdCBhIHN5bWJvbGljIHJlZiIgPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgLWQgcmVmcy9oZWFkcy9mb28gPmFjdHVhbCAyPiYxICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL2ZvbyAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKK3Jlc2V0X3RvX3NhbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGxhcmdlIHJlZiBuYW1lJyAnCisJIyBtYWtlIDI1NisgY2hhcmFjdGVyIHJlZjsgc29tZSBzeXN0ZW1zIG1heSBub3QgaGFuZGxlIHRoYXQsCisJIyBzbyBiZSBnZW50bGUKKwlsb25nPTAxMjM0NTY3ODlhYmNkZWYgJiYKKwlsb25nPSRsb25nLyRsb25nLyRsb25nLyRsb25nICYmCisJbG9uZz0kbG9uZy8kbG9uZy8kbG9uZy8kbG9uZyAmJgorCWxvbmdfcmVmPXJlZnMvaGVhZHMvJGxvbmcgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0PSQoZWNobyBmb28gfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUpICYmCisJaWYgZ2l0IHVwZGF0ZS1yZWYgJGxvbmdfcmVmICRjb21taXQ7IHRoZW4KKwkJdGVzdF9zZXRfcHJlcmVxIExPTkdfUkVGCisJZWxzZQorCQllY2hvID4mMiAibG9uZyByZWZzIG5vdCBzdXBwb3J0ZWQiCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMT05HX1JFRiAnc3ltYm9saWMtcmVmIGNhbiBwb2ludCB0byBsYXJnZSByZWYgbmFtZScgJworCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCAkbG9uZ19yZWYgJiYKKwllY2hvICRsb25nX3JlZiA+ZXhwZWN0ICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTE9OR19SRUYgJ3dlIGNhbiBwYXJzZSBsb25nIHN5bWJvbGljIHJlZicgJworCWVjaG8gJGNvbW1pdCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiByZXBvcnRzIGZhaWx1cmUgaW4gZXhpdCBjb2RlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L0hFQUQubG9jayIgJiYKKwk+LmdpdC9IRUFELmxvY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy93aGF0ZXZlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1ib2xpYy1yZWYgd3JpdGVzIHJlZmxvZyBlbnRyeScgJworCWdpdCBjaGVja291dCAtYiBsb2cxICYmCisJdGVzdF9jb21taXQgb25lICYmCisJZ2l0IGNoZWNrb3V0IC1iIGxvZzIgICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG9ycGhhbiAmJgorCWdpdCBzeW1ib2xpYy1yZWYgLW0gY3JlYXRlIEhFQUQgcmVmcy9oZWFkcy9sb2cxICYmCisJZ2l0IHN5bWJvbGljLXJlZiAtbSB1cGRhdGUgSEVBRCByZWZzL2hlYWRzL2xvZzIgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJdXBkYXRlCisJY3JlYXRlCisJRU9GCisJZ2l0IGxvZyAtLWZvcm1hdD0lZ3MgLWcgLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMtcmVmIGRvZXMgbm90IGNyZWF0ZSByZWYgZC9mIGNvbmZsaWN0cycgJworCWdpdCBjaGVja291dCAtYiBkZiAmJgorCXRlc3RfY29tbWl0IGRmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL2RmL2NvbmZsaWN0IHJlZnMvaGVhZHMvZGYgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvZGYvY29uZmxpY3QgcmVmcy9oZWFkcy9kZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1ib2xpYy1yZWYgY2FuIG92ZXJ3cml0ZSBwb2ludGVyIHRvIGludmFsaWQgbmFtZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCByZXNldF90b19zYW5lICYmCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9vdXRlciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9vdXRlci9pbm5lciIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL291dGVyL2lubmVyICRoZWFkICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvdW5yZWxhdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiBjYW4gcmVzb2x2ZSBkL2YgbmFtZSAoRUlTRElSKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCByZXNldF90b19zYW5lICYmCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9vdXRlci9pbm5lciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9vdXRlciIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL291dGVyICRoZWFkICYmCisJZWNobyByZWZzL2hlYWRzL291dGVyL2lubmVyID5leHBlY3QgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMtcmVmIGNhbiByZXNvbHZlIGQvZiBuYW1lIChFTk9URElSKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCByZXNldF90b19zYW5lICYmCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9vdXRlciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9vdXRlci9pbm5lciIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL291dGVyL2lubmVyICRoZWFkICYmCisJZWNobyByZWZzL2hlYWRzL291dGVyID5leHBlY3QgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDAyLWNoZWNrLXJlZi1mb3JtYXQuc2ggYi90L3QxNDAyLWNoZWNrLXJlZi1mb3JtYXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOThlNGE4NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MDItY2hlY2stcmVmLWZvcm1hdC5zaApAQCAtMCwwICsxLDIxOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IGNoZWNrLXJlZi1mb3JtYXQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit2YWxpZF9yZWYoKSB7CisJcHJlcmVxPQorCWNhc2UgJDEgaW4KKwlbQS1aIV0qKQorCQlwcmVyZXE9JDEKKwkJc2hpZnQKKwllc2FjCisJZGVzYz0icmVmIG5hbWUgJyQxJyBpcyB2YWxpZCR7MjorIHdpdGggb3B0aW9ucyAkMn0iCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHJlcmVxICIkZGVzYyIgIgorCQlnaXQgY2hlY2stcmVmLWZvcm1hdCAkMiAnJDEnCisJIgorfQoraW52YWxpZF9yZWYoKSB7CisJcHJlcmVxPQorCWNhc2UgJDEgaW4KKwlbQS1aIV0qKQorCQlwcmVyZXE9JDEKKwkJc2hpZnQKKwllc2FjCisJZGVzYz0icmVmIG5hbWUgJyQxJyBpcyBpbnZhbGlkJHsyOisgd2l0aCBvcHRpb25zICQyfSIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwcmVyZXEgIiRkZXNjIiAiCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1yZWYtZm9ybWF0ICQyICckMScKKwkiCit9CisKK2ludmFsaWRfcmVmICcnCitpbnZhbGlkX3JlZiAhTUlOR1cgJy8nCitpbnZhbGlkX3JlZiAhTUlOR1cgJy8nIC0tYWxsb3ctb25lbGV2ZWwKK2ludmFsaWRfcmVmICFNSU5HVyAnLycgLS1ub3JtYWxpemUKK2ludmFsaWRfcmVmICFNSU5HVyAnLycgJy0tYWxsb3ctb25lbGV2ZWwgLS1ub3JtYWxpemUnCit2YWxpZF9yZWYgJ2Zvby9iYXIvYmF6JwordmFsaWRfcmVmICdmb28vYmFyL2JheicgLS1ub3JtYWxpemUKK2ludmFsaWRfcmVmICdyZWZzLy8vaGVhZHMvZm9vJwordmFsaWRfcmVmICdyZWZzLy8vaGVhZHMvZm9vJyAtLW5vcm1hbGl6ZQoraW52YWxpZF9yZWYgJ2hlYWRzL2Zvby8nCitpbnZhbGlkX3JlZiAhTUlOR1cgJy9oZWFkcy9mb28nCit2YWxpZF9yZWYgIU1JTkdXICcvaGVhZHMvZm9vJyAtLW5vcm1hbGl6ZQoraW52YWxpZF9yZWYgJy8vL2hlYWRzL2ZvbycKK3ZhbGlkX3JlZiAnLy8vaGVhZHMvZm9vJyAtLW5vcm1hbGl6ZQoraW52YWxpZF9yZWYgJy4vZm9vJworaW52YWxpZF9yZWYgJy4vZm9vL2JhcicKK2ludmFsaWRfcmVmICdmb28vLi9iYXInCitpbnZhbGlkX3JlZiAnZm9vL2Jhci8uJworaW52YWxpZF9yZWYgJy5yZWZzL2ZvbycKK2ludmFsaWRfcmVmICdyZWZzL2hlYWRzL2Zvby4nCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vLi5iYXInCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vP2JhcicKK3ZhbGlkX3JlZiAnZm9vLi9iYXInCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vLmxvY2snCitpbnZhbGlkX3JlZiAnaGVhZHMvLy9mb28ubG9jaycKK2ludmFsaWRfcmVmICdmb28ubG9jay9iYXInCitpbnZhbGlkX3JlZiAnZm9vLmxvY2svLy9iYXInCit2YWxpZF9yZWYgJ2hlYWRzL2Zvb0BiYXInCitpbnZhbGlkX3JlZiAnaGVhZHMvdkB7YXRpb24nCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vXGJhcicKK2ludmFsaWRfcmVmICIkKHByaW50ZiAnaGVhZHMvZm9vXHQnKSIKK2ludmFsaWRfcmVmICIkKHByaW50ZiAnaGVhZHMvZm9vXDE3NycpIgordmFsaWRfcmVmICIkKHByaW50ZiAnaGVhZHMvZnVcMzAzXDIzNycpIgordmFsaWRfcmVmICdoZWFkcy8qZm9vL2JhcicgLS1yZWZzcGVjLXBhdHRlcm4KK3ZhbGlkX3JlZiAnaGVhZHMvZm9vKi9iYXInIC0tcmVmc3BlYy1wYXR0ZXJuCit2YWxpZF9yZWYgJ2hlYWRzL2Yqby9iYXInIC0tcmVmc3BlYy1wYXR0ZXJuCitpbnZhbGlkX3JlZiAnaGVhZHMvZipvKi9iYXInIC0tcmVmc3BlYy1wYXR0ZXJuCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vKi9iYXIqJyAtLXJlZnNwZWMtcGF0dGVybgorCityZWY9J2ZvbycKK2ludmFsaWRfcmVmICIkcmVmIgordmFsaWRfcmVmICIkcmVmIiAtLWFsbG93LW9uZWxldmVsCitpbnZhbGlkX3JlZiAiJHJlZiIgLS1yZWZzcGVjLXBhdHRlcm4KK3ZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tYWxsb3ctb25lbGV2ZWwnCitpbnZhbGlkX3JlZiAiJHJlZiIgLS1ub3JtYWxpemUKK3ZhbGlkX3JlZiAiJHJlZiIgJy0tYWxsb3ctb25lbGV2ZWwgLS1ub3JtYWxpemUnCisKK3JlZj0nZm9vL2JhcicKK3ZhbGlkX3JlZiAiJHJlZiIKK3ZhbGlkX3JlZiAiJHJlZiIgLS1hbGxvdy1vbmVsZXZlbAordmFsaWRfcmVmICIkcmVmIiAtLXJlZnNwZWMtcGF0dGVybgordmFsaWRfcmVmICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCcKK3ZhbGlkX3JlZiAiJHJlZiIgLS1ub3JtYWxpemUKKworcmVmPSdmb28vKicKK2ludmFsaWRfcmVmICIkcmVmIgoraW52YWxpZF9yZWYgIiRyZWYiIC0tYWxsb3ctb25lbGV2ZWwKK3ZhbGlkX3JlZiAiJHJlZiIgLS1yZWZzcGVjLXBhdHRlcm4KK3ZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tYWxsb3ctb25lbGV2ZWwnCisKK3JlZj0nKi9mb28nCitpbnZhbGlkX3JlZiAiJHJlZiIKK2ludmFsaWRfcmVmICIkcmVmIiAtLWFsbG93LW9uZWxldmVsCit2YWxpZF9yZWYgIiRyZWYiIC0tcmVmc3BlYy1wYXR0ZXJuCit2YWxpZF9yZWYgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLWFsbG93LW9uZWxldmVsJworaW52YWxpZF9yZWYgIiRyZWYiIC0tbm9ybWFsaXplCit2YWxpZF9yZWYgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLW5vcm1hbGl6ZScKKworcmVmPSdmb28vKi9iYXInCitpbnZhbGlkX3JlZiAiJHJlZiIKK2ludmFsaWRfcmVmICIkcmVmIiAtLWFsbG93LW9uZWxldmVsCit2YWxpZF9yZWYgIiRyZWYiIC0tcmVmc3BlYy1wYXR0ZXJuCit2YWxpZF9yZWYgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLWFsbG93LW9uZWxldmVsJworCityZWY9JyonCitpbnZhbGlkX3JlZiAiJHJlZiIKK2ludmFsaWRfcmVmICIkcmVmIiAtLWFsbG93LW9uZWxldmVsCitpbnZhbGlkX3JlZiAiJHJlZiIgLS1yZWZzcGVjLXBhdHRlcm4KK3ZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tYWxsb3ctb25lbGV2ZWwnCisKK3JlZj0nZm9vLyovKicKK2ludmFsaWRfcmVmICIkcmVmIiAtLXJlZnNwZWMtcGF0dGVybgoraW52YWxpZF9yZWYgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLWFsbG93LW9uZWxldmVsJworCityZWY9JyovZm9vLyonCitpbnZhbGlkX3JlZiAiJHJlZiIgLS1yZWZzcGVjLXBhdHRlcm4KK2ludmFsaWRfcmVmICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCcKKworcmVmPScqLyovZm9vJworaW52YWxpZF9yZWYgIiRyZWYiIC0tcmVmc3BlYy1wYXR0ZXJuCitpbnZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tYWxsb3ctb25lbGV2ZWwnCisKK3JlZj0nL2ZvbycKK2ludmFsaWRfcmVmICFNSU5HVyAiJHJlZiIKK2ludmFsaWRfcmVmICFNSU5HVyAiJHJlZiIgLS1hbGxvdy1vbmVsZXZlbAoraW52YWxpZF9yZWYgIU1JTkdXICIkcmVmIiAtLXJlZnNwZWMtcGF0dGVybgoraW52YWxpZF9yZWYgIU1JTkdXICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCcKK2ludmFsaWRfcmVmICFNSU5HVyAiJHJlZiIgLS1ub3JtYWxpemUKK3ZhbGlkX3JlZiAhTUlOR1cgIiRyZWYiICctLWFsbG93LW9uZWxldmVsIC0tbm9ybWFsaXplJworaW52YWxpZF9yZWYgIU1JTkdXICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1ub3JtYWxpemUnCit2YWxpZF9yZWYgIU1JTkdXICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCAtLW5vcm1hbGl6ZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCBAey0xfSIgJworCVQ9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlzaGExPSQoZWNobyBBIHwgZ2l0IGNvbW1pdC10cmVlICRUKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICRzaGExICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJHNoYTEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG9yaWdpbi9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJcmVmbmFtZT0kKGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTF9KSAmJgorCXRlc3QgIiRyZWZuYW1lIiA9ICIkc2hhMSIgJiYKKwlyZWZuYW1lMj0kKGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTJ9KSAmJgorCXRlc3QgIiRyZWZuYW1lMiIgPSBtYXN0ZXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrLXJlZi1mb3JtYXQgLS1icmFuY2ggLW5hc3RlcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIC1uYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCBmcm9tIHN1YmRpcicgJworCW1rZGlyIHN1YmRpciAmJgorCisJVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXNoYTE9JChlY2hvIEEgfCBnaXQgY29tbWl0LXRyZWUgJFQpICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJHNoYTEgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAkc2hhMSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgb3JpZ2luL21hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlyZWZuYW1lPSQoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCBAey0xfQorCSkgJiYKKwl0ZXN0ICIkcmVmbmFtZSIgPSAiJHNoYTEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrLXJlZi1mb3JtYXQgLS1icmFuY2ggQHstMX0gZnJvbSBub24tcmVwbycgJworCW5vbmdpdCB0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCBAey0xfSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIG1hc3RlciBmcm9tIG5vbi1yZXBvJyAnCisJZWNobyBtYXN0ZXIgPmV4cGVjdCAmJgorCW5vbmdpdCBnaXQgY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCBtYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordmFsaWRfcmVmX25vcm1hbGl6ZWQoKSB7CisJcHJlcmVxPQorCWNhc2UgJDEgaW4KKwlbQS1aIV0qKQorCQlwcmVyZXE9JDEKKwkJc2hpZnQKKwllc2FjCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHJlcmVxICJyZWYgbmFtZSAnJDEnIHNpbXBsaWZpZXMgdG8gJyQyJyIgIgorCQlyZWZuYW1lPVwkKGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tbm9ybWFsaXplICckMScpICYmCisJCXRlc3QgXCJcJHJlZm5hbWVcIiA9ICckMicKKwkiCit9CitpbnZhbGlkX3JlZl9ub3JtYWxpemVkKCkgeworCXByZXJlcT0KKwljYXNlICQxIGluCisJW0EtWiFdKikKKwkJcHJlcmVxPSQxCisJCXNoaWZ0CisJZXNhYworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByZXJlcSAiY2hlY2stcmVmLWZvcm1hdCAtLW5vcm1hbGl6ZSByZWplY3RzICckMSciICIKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1ub3JtYWxpemUgJyQxJworCSIKK30KKwordmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2hlYWRzL2ZvbycgJ2hlYWRzL2ZvbycKK3ZhbGlkX3JlZl9ub3JtYWxpemVkICdyZWZzLy8vaGVhZHMvZm9vJyAncmVmcy9oZWFkcy9mb28nCit2YWxpZF9yZWZfbm9ybWFsaXplZCAhTUlOR1cgJy9oZWFkcy9mb28nICdoZWFkcy9mb28nCit2YWxpZF9yZWZfbm9ybWFsaXplZCAnLy8vaGVhZHMvZm9vJyAnaGVhZHMvZm9vJworaW52YWxpZF9yZWZfbm9ybWFsaXplZCAnZm9vJworaW52YWxpZF9yZWZfbm9ybWFsaXplZCAhTUlOR1cgJy9mb28nCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICdoZWFkcy9mb28vLi4vYmFyJworaW52YWxpZF9yZWZfbm9ybWFsaXplZCAnaGVhZHMvLi9mb28nCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICdoZWFkc1xmb28nCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICdoZWFkcy9mb28ubG9jaycKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2hlYWRzLy8vZm9vLmxvY2snCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICdmb28ubG9jay9iYXInCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICdmb28ubG9jay8vL2JhcicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDAzLXNob3ctcmVmLnNoIGIvdC90MTQwMy1zaG93LXJlZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZDk1NWMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTQwMy1zaG93LXJlZi5zaApAQCAtMCwwICsxLDE5NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Nob3ctcmVmJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IEEgJiYKKwlnaXQgdGFnIC1mIC1hIC1tICJhbm5vdGF0ZWQgQSIgQSAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJdGVzdF9jb21taXQgQiAmJgorCWdpdCB0YWcgLWYgLWEgLW0gImFubm90YXRlZCBCIiBCICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IEMgJiYKKwlnaXQgYnJhbmNoIEIgQV4wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3ctcmVmJyAnCisJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL0EpIHJlZnMvdGFncy9BID5leHBlY3QgJiYKKworCWdpdCBzaG93LXJlZiBBID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgc2hvdy1yZWYgdGFncy9BID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgc2hvdy1yZWYgcmVmcy90YWdzL0EgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiBEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3ctcmVmIC1xJyAnCisJZ2l0IHNob3ctcmVmIC1xIEEgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiAtcSB0YWdzL0EgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiAtcSByZWZzL3RhZ3MvQSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIC1xIEQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1yZWYgLS12ZXJpZnknICcKKwllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvQSkgcmVmcy90YWdzL0EgPmV4cGVjdCAmJgorCisJZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IHJlZnMvdGFncy9BID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgQSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IHRhZ3MvQSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IEQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1yZWYgLS12ZXJpZnkgLXEnICcKKwlnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLXEgcmVmcy90YWdzL0EgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtcSBBID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLXEgdGFncy9BID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLXEgRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93LXJlZiAtZCcgJworCXsKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL0EpIHJlZnMvdGFncy9BICYmCisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9BXjApICJyZWZzL3RhZ3MvQV57fSIKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL0MpIHJlZnMvdGFncy9DCisJfSA+ZXhwZWN0ICYmCisJZ2l0IHNob3ctcmVmIC1kIEEgQyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC1kIHRhZ3MvQSB0YWdzL0MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiAtZCByZWZzL3RhZ3MvQSByZWZzL3RhZ3MvQyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC1kIHJlZnMvdGFncy9BIHJlZnMvdGFncy9DID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcikgcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCBzaG93LXJlZiAtZCBtYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiAtZCBoZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiAtZCByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC1kIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLWQgLS12ZXJpZnkgbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLWQgLS12ZXJpZnkgaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLWQgQSBDID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLWQgdGFncy9BIHRhZ3MvQyA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3ctcmVmIC0taGVhZHMsIC0tdGFncywgLS1oZWFkLCBwYXR0ZXJuJyAnCisJZm9yIGJyYW5jaCBpbiBCIG1hc3RlciBzaWRlCisJZG8KKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy8kYnJhbmNoKSByZWZzL2hlYWRzLyRicmFuY2gKKwlkb25lID5leHBlY3QuaGVhZHMgJiYKKwlnaXQgc2hvdy1yZWYgLS1oZWFkcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmhlYWRzIGFjdHVhbCAmJgorCisJZm9yIHRhZyBpbiBBIEIgQworCWRvCisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy8kdGFnKSByZWZzL3RhZ3MvJHRhZworCWRvbmUgPmV4cGVjdC50YWdzICYmCisJZ2l0IHNob3ctcmVmIC0tdGFncyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnRhZ3MgYWN0dWFsICYmCisKKwljYXQgZXhwZWN0LmhlYWRzIGV4cGVjdC50YWdzID5leHBlY3QgJiYKKwlnaXQgc2hvdy1yZWYgLS1oZWFkcyAtLXRhZ3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXsKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRCkgSEVBRCAmJgorCQljYXQgZXhwZWN0LmhlYWRzIGV4cGVjdC50YWdzCisJfSA+ZXhwZWN0ICYmCisJZ2l0IHNob3ctcmVmIC0taGVhZHMgLS10YWdzIC0taGVhZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJeworCQllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEKSBIRUFEICYmCisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvQikgcmVmcy9oZWFkcy9CCisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9CKSByZWZzL3RhZ3MvQgorCX0gPmV4cGVjdCAmJgorCWdpdCBzaG93LXJlZiAtLWhlYWQgQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJeworCQllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEKSBIRUFEICYmCisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvQikgcmVmcy9oZWFkcy9CCisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9CKSByZWZzL3RhZ3MvQgorCQllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvQl4wKSAicmVmcy90YWdzL0Jee30iCisJfSA+ZXhwZWN0ICYmCisJZ2l0IHNob3ctcmVmIC0taGVhZCAtZCBCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3ctcmVmIC0tdmVyaWZ5IEhFQUQnICcKKwllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEKSBIRUFEID5leHBlY3QgJiYKKwlnaXQgc2hvdy1yZWYgLS12ZXJpZnkgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC1xIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1yZWYgLS12ZXJpZnkgd2l0aCBkYW5nbGluZyByZWYnICcKKwlzaGExX2ZpbGUoKSB7CisJCWVjaG8gIiQqIiB8IHNlZCAicyMuLiMuZ2l0L29iamVjdHMvJi8jIgorCX0gJiYKKworCXJlbW92ZV9vYmplY3QoKSB7CisJCWZpbGU9JChzaGExX2ZpbGUgIiQqIikgJiYKKwkJdGVzdCAtZSAiJGZpbGUiICYmCisJCXJtIC1mICIkZmlsZSIKKwl9ICYmCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBkYW5nbGluZyIgJiYKKwkoCisJCWdpdCBpbml0IGRhbmdsaW5nICYmCisJCWNkIGRhbmdsaW5nICYmCisJCXRlc3RfY29tbWl0IGRhbmdsaW5nICYmCisJCXNoYT0kKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL2RhbmdsaW5nKSAmJgorCQlyZW1vdmVfb2JqZWN0ICRzaGEgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IHJlZnMvdGFncy9kYW5nbGluZworCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDA0LXVwZGF0ZS1yZWYtZXJyb3JzLnNoIGIvdC90MTQwNC11cGRhdGUtcmVmLWVycm9ycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZDE0MmU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTQwNC11cGRhdGUtcmVmLWVycm9ycy5zaApAQCAtMCwwICsxLDYzNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IHVwZGF0ZS1yZWYgZXJyb3IgaGFuZGxpbmcnCisuIC4vdGVzdC1saWIuc2gKKworIyBDcmVhdGUgc29tZSByZWZlcmVuY2VzLCBwZXJoYXBzIHJ1biBwYWNrLXJlZnMgLS1hbGwsIHRoZW4gdHJ5IHRvCisjIGNyZWF0ZSBzb21lIG1vcmUgcmVmZXJlbmNlcy4gRW5zdXJlIHRoYXQgdGhlIHNlY29uZCBjcmVhdGlvbiBmYWlscworIyB3aXRoIHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2UuCisjIFVzYWdlOiB0ZXN0X3VwZGF0ZV9yZWplY3RlZCA8YmVmb3JlPiA8cGFjaz4gPGNyZWF0ZT4gPGVycm9yPgorIyAgIDxiZWZvcmU+IGlzIGEgd3Mtc2VwYXJhdGVkIGxpc3Qgb2YgcmVmcyB0byBjcmVhdGUgYmVmb3JlIHRoZSB0ZXN0CisjICAgPHBhY2s+ICh0cnVlIG9yIGZhbHNlKSB0ZWxscyB3aGV0aGVyIHRvIHBhY2sgdGhlIHJlZnMgYmVmb3JlIHRoZSB0ZXN0CisjICAgPGNyZWF0ZT4gaXMgYSBsaXN0IG9mIHZhcmlhYmxlcyB0byBhdHRlbXB0IGNyZWF0aW5nCisjICAgPGVycm9yPiBpcyBhIHN0cmluZyB0byBsb29rIGZvciBpbiB0aGUgc3RkZXJyIG9mIHVwZGF0ZS1yZWYuCisjIEFsbCByZWZlcmVuY2VzIGFyZSBjcmVhdGVkIGluIHRoZSBuYW1lc3BhY2Ugc3BlY2lmaWVkIGJ5IHRoZSBjdXJyZW50CisjIHZhbHVlIG9mICRwcmVmaXguCit0ZXN0X3VwZGF0ZV9yZWplY3RlZCAoKSB7CisJYmVmb3JlPSIkMSIgJiYKKwlwYWNrPSIkMiIgJiYKKwljcmVhdGU9IiQzIiAmJgorCWVycm9yPSIkNCIgJiYKKwlwcmludGYgImNyZWF0ZSAkcHJlZml4LyVzICRDXG4iICRiZWZvcmUgfAorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gJiYKKwlnaXQgZm9yLWVhY2gtcmVmICRwcmVmaXggPnVuY2hhbmdlZCAmJgorCWlmICRwYWNrCisJdGhlbgorCQlnaXQgcGFjay1yZWZzIC0tYWxsCisJZmkgJiYKKwlwcmludGYgImNyZWF0ZSAkcHJlZml4LyVzICRDXG4iICRjcmVhdGUgPmlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8aW5wdXQgMj5vdXRwdXQuZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtRiAiJGVycm9yIiBvdXRwdXQuZXJyICYmCisJZ2l0IGZvci1lYWNoLXJlZiAkcHJlZml4ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB1bmNoYW5nZWQgYWN0dWFsCit9CisKKyMgVGVzdCBhZGRpbmcgYW5kIGRlbGV0aW5nIEQvRi1jb25mbGljdGluZyByZWZlcmVuY2VzIGluIGEgc2luZ2xlCisjIHRyYW5zYWN0aW9uLgorZGZfdGVzdCgpIHsKKwlwcmVmaXg9IiQxIgorCXBhY2s9OiBzeW1hZGQ9ZmFsc2Ugc3ltZGVsPWZhbHNlIGFkZF9kZWw9ZmFsc2UgYWRkcmVmPSBkZWxyZWY9CisJc2hpZnQKKwl3aGlsZSB0ZXN0ICQjIC1ndCAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS0tcGFjaykKKwkJCXBhY2s9ImdpdCBwYWNrLXJlZnMgLS1hbGwiCisJCQlzaGlmdAorCQkJOzsKKwkJLS1zeW0tYWRkKQorCQkJIyBQZXJmb3JtIHRoZSBhZGQgdmlhIGEgc3ltYm9saWMgcmVmZXJlbmNlCisJCQlzeW1hZGQ9dHJ1ZQorCQkJc2hpZnQKKwkJCTs7CisJCS0tc3ltLWRlbCkKKwkJCSMgUGVyZm9ybSB0aGUgZGVsIHZpYSBhIHN5bWJvbGljIHJlZmVyZW5jZQorCQkJc3ltZGVsPXRydWUKKwkJCXNoaWZ0CisJCQk7OworCQktLWRlbC1hZGQpCisJCQkjIERlbGV0ZSBmaXJzdCByZWZlcmVuY2UgdGhlbiBhZGQgc2Vjb25kCisJCQlhZGRfZGVsPWZhbHNlCisJCQlkZWxyZWY9IiRwcmVmaXgvci8kMiIKKwkJCWFkZHJlZj0iJHByZWZpeC9yLyQzIgorCQkJc2hpZnQgMworCQkJOzsKKwkJLS1hZGQtZGVsKQorCQkJIyBBZGQgZmlyc3QgcmVmZXJlbmNlIHRoZW4gZGVsZXRlIHNlY29uZAorCQkJYWRkX2RlbD10cnVlCisJCQlhZGRyZWY9IiRwcmVmaXgvci8kMiIKKwkJCWRlbHJlZj0iJHByZWZpeC9yLyQzIgorCQkJc2hpZnQgMworCQkJOzsKKwkJKikKKwkJCWVjaG8gMT4mMiAiRXh0cmEgYXJncyB0byBkZl90ZXN0OiAkKiIKKwkJCXJldHVybiAxCisJCQk7OworCQllc2FjCisJZG9uZQorCWdpdCB1cGRhdGUtcmVmICIkZGVscmVmIiAkQyAmJgorCWlmICRzeW1hZGQKKwl0aGVuCisJCWFkZG5hbWU9IiRwcmVmaXgvcy9zeW1hZGQiICYmCisJCWdpdCBzeW1ib2xpYy1yZWYgIiRhZGRuYW1lIiAiJGFkZHJlZiIKKwllbHNlCisJCWFkZG5hbWU9IiRhZGRyZWYiCisJZmkgJiYKKwlpZiAkc3ltZGVsCisJdGhlbgorCQlkZWxuYW1lPSIkcHJlZml4L3Mvc3ltZGVsIiAmJgorCQlnaXQgc3ltYm9saWMtcmVmICIkZGVsbmFtZSIgIiRkZWxyZWYiCisJZWxzZQorCQlkZWxuYW1lPSIkZGVscmVmIgorCWZpICYmCisJY2F0ID5leHBlY3RlZC1lcnIgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkYWRkbmFtZSRTUTogJFNRJGRlbHJlZiRTUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFNRJGFkZHJlZiRTUQorCUVPRgorCSRwYWNrICYmCisJaWYgJGFkZF9kZWwKKwl0aGVuCisJCXByaW50ZiAiJXNcbiIgImNyZWF0ZSAkYWRkbmFtZSAkRCIgImRlbGV0ZSAkZGVsbmFtZSIKKwllbHNlCisJCXByaW50ZiAiJXNcbiIgImRlbGV0ZSAkZGVsbmFtZSIgImNyZWF0ZSAkYWRkbmFtZSAkRCIKKwlmaSA+Y29tbWFuZHMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxjb21tYW5kcyAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQtZXJyIG91dHB1dC5lcnIgJiYKKwlwcmludGYgIiVzXG4iICIkQyAkZGVscmVmIiA+ZXhwZWN0ZWQtcmVmcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUob2JqZWN0bmFtZSkgJShyZWZuYW1lKSIgJHByZWZpeC9yID5hY3R1YWwtcmVmcyAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXJlZnMgYWN0dWFsLXJlZnMKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBJbml0aWFsICYmCisJQz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gU2Vjb25kICYmCisJRD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gVGhpcmQgJiYKKwlFPSQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGlzdGluZyBsb29zZSByZWYgaXMgYSBzaW1wbGUgcHJlZml4IG9mIG5ldycgJworCisJcHJlZml4PXJlZnMvMWwgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAiYSBjIGUiIGZhbHNlICJiIGMveCBkIiBcCisJCSIkU1EkcHJlZml4L2MkU1EgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICRTUSRwcmVmaXgvYy94JFNRIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIHBhY2tlZCByZWYgaXMgYSBzaW1wbGUgcHJlZml4IG9mIG5ldycgJworCisJcHJlZml4PXJlZnMvMXAgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAiYSBjIGUiIHRydWUgImIgYy94IGQiIFwKKwkJIiRTUSRwcmVmaXgvYyRTUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFNRJHByZWZpeC9jL3gkU1EiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpc3RpbmcgbG9vc2UgcmVmIGlzIGEgZGVlcGVyIHByZWZpeCBvZiBuZXcnICcKKworCXByZWZpeD1yZWZzLzJsICYmCisJdGVzdF91cGRhdGVfcmVqZWN0ZWQgImEgYyBlIiBmYWxzZSAiYiBjL3gveSBkIiBcCisJCSIkU1EkcHJlZml4L2MkU1EgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICRTUSRwcmVmaXgvYy94L3kkU1EiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpc3RpbmcgcGFja2VkIHJlZiBpcyBhIGRlZXBlciBwcmVmaXggb2YgbmV3JyAnCisKKwlwcmVmaXg9cmVmcy8ycCAmJgorCXRlc3RfdXBkYXRlX3JlamVjdGVkICJhIGMgZSIgdHJ1ZSAiYiBjL3gveSBkIiBcCisJCSIkU1EkcHJlZml4L2MkU1EgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICRTUSRwcmVmaXgvYy94L3kkU1EiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHJlZiBpcyBhIHNpbXBsZSBwcmVmaXggb2YgZXhpc3RpbmcgbG9vc2UnICcKKworCXByZWZpeD1yZWZzLzNsICYmCisJdGVzdF91cGRhdGVfcmVqZWN0ZWQgImEgYy94IGUiIGZhbHNlICJiIGMgZCIgXAorCQkiJFNRJHByZWZpeC9jL3gkU1EgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICRTUSRwcmVmaXgvYyRTUSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgcmVmIGlzIGEgc2ltcGxlIHByZWZpeCBvZiBleGlzdGluZyBwYWNrZWQnICcKKworCXByZWZpeD1yZWZzLzNwICYmCisJdGVzdF91cGRhdGVfcmVqZWN0ZWQgImEgYy94IGUiIHRydWUgImIgYyBkIiBcCisJCSIkU1EkcHJlZml4L2MveCRTUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFNRJHByZWZpeC9jJFNRIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyByZWYgaXMgYSBkZWVwZXIgcHJlZml4IG9mIGV4aXN0aW5nIGxvb3NlJyAnCisKKwlwcmVmaXg9cmVmcy80bCAmJgorCXRlc3RfdXBkYXRlX3JlamVjdGVkICJhIGMveC95IGUiIGZhbHNlICJiIGMgZCIgXAorCQkiJFNRJHByZWZpeC9jL3gveSRTUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFNRJHByZWZpeC9jJFNRIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyByZWYgaXMgYSBkZWVwZXIgcHJlZml4IG9mIGV4aXN0aW5nIHBhY2tlZCcgJworCisJcHJlZml4PXJlZnMvNHAgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAiYSBjL3gveSBlIiB0cnVlICJiIGMgZCIgXAorCQkiJFNRJHByZWZpeC9jL3gveSRTUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFNRJHByZWZpeC9jJFNRIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29uZSBuZXcgcmVmIGlzIGEgc2ltcGxlIHByZWZpeCBvZiBhbm90aGVyJyAnCisKKwlwcmVmaXg9cmVmcy81ICYmCisJdGVzdF91cGRhdGVfcmVqZWN0ZWQgImEgZSIgZmFsc2UgImIgYyBjL3ggZCIgXAorCQkiY2Fubm90IHByb2Nlc3MgJFNRJHByZWZpeC9jJFNRIGFuZCAkU1EkcHJlZml4L2MveCRTUSBhdCB0aGUgc2FtZSB0aW1lIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGRpcmVjdG9yeSBzaG91bGQgbm90IGZvb2wgcmV2LXBhcnNlJyAnCisJcHJlZml4PXJlZnMvZS1yZXYtcGFyc2UgJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlta2RpciAtcCAuZ2l0LyRwcmVmaXgvZm9vL2Jhci9iYXogJiYKKwllY2hvICIkQyIgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSAkcHJlZml4L2ZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGRpcmVjdG9yeSBzaG91bGQgbm90IGZvb2wgZm9yLWVhY2gtcmVmJyAnCisJcHJlZml4PXJlZnMvZS1mb3ItZWFjaC1yZWYgJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgJHByZWZpeCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJbWtkaXIgLXAgLmdpdC8kcHJlZml4L2Zvby9iYXIvYmF6ICYmCisJZ2l0IGZvci1lYWNoLXJlZiAkcHJlZml4ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgZGlyZWN0b3J5IHNob3VsZCBub3QgZm9vbCBjcmVhdGUnICcKKwlwcmVmaXg9cmVmcy9lLWNyZWF0ZSAmJgorCW1rZGlyIC1wIC5naXQvJHByZWZpeC9mb28vYmFyL2JheiAmJgorCXByaW50ZiAiY3JlYXRlICVzICRDXG4iICRwcmVmaXgvZm9vIHwKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGRpcmVjdG9yeSBzaG91bGQgbm90IGZvb2wgdmVyaWZ5JyAnCisJcHJlZml4PXJlZnMvZS12ZXJpZnkgJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlta2RpciAtcCAuZ2l0LyRwcmVmaXgvZm9vL2Jhci9iYXogJiYKKwlwcmludGYgInZlcmlmeSAlcyAkQ1xuIiAkcHJlZml4L2ZvbyB8CisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBmb29sIDEtYXJnIHVwZGF0ZScgJworCXByZWZpeD1yZWZzL2UtdXBkYXRlLTEgJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlta2RpciAtcCAuZ2l0LyRwcmVmaXgvZm9vL2Jhci9iYXogJiYKKwlwcmludGYgInVwZGF0ZSAlcyAkRFxuIiAkcHJlZml4L2ZvbyB8CisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBmb29sIDItYXJnIHVwZGF0ZScgJworCXByZWZpeD1yZWZzL2UtdXBkYXRlLTIgJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlta2RpciAtcCAuZ2l0LyRwcmVmaXgvZm9vL2Jhci9iYXogJiYKKwlwcmludGYgInVwZGF0ZSAlcyAkRCAkQ1xuIiAkcHJlZml4L2ZvbyB8CisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBmb29sIDAtYXJnIGRlbGV0ZScgJworCXByZWZpeD1yZWZzL2UtZGVsZXRlLTAgJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlta2RpciAtcCAuZ2l0LyRwcmVmaXgvZm9vL2Jhci9iYXogJiYKKwlwcmludGYgImRlbGV0ZSAlc1xuIiAkcHJlZml4L2ZvbyB8CisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBmb29sIDEtYXJnIGRlbGV0ZScgJworCXByZWZpeD1yZWZzL2UtZGVsZXRlLTEgJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlta2RpciAtcCAuZ2l0LyRwcmVmaXgvZm9vL2Jhci9iYXogJiYKKwlwcmludGYgImRlbGV0ZSAlcyAkQ1xuIiAkcHJlZml4L2ZvbyB8CisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEL0YgY29uZmxpY3QgcHJldmVudHMgYWRkIGxvbmcgKyBkZWxldGUgc2hvcnQnICcKKwlkZl90ZXN0IHJlZnMvZGYtYWwtZHMgLS1hZGQtZGVsIGZvby9iYXIgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRiBjb25mbGljdCBwcmV2ZW50cyBhZGQgc2hvcnQgKyBkZWxldGUgbG9uZycgJworCWRmX3Rlc3QgcmVmcy9kZi1hcy1kbCAtLWFkZC1kZWwgZm9vIGZvby9iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIGNvbmZsaWN0IHByZXZlbnRzIGRlbGV0ZSBsb25nICsgYWRkIHNob3J0JyAnCisJZGZfdGVzdCByZWZzL2RmLWRsLWFzIC0tZGVsLWFkZCBmb28vYmFyIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEL0YgY29uZmxpY3QgcHJldmVudHMgZGVsZXRlIHNob3J0ICsgYWRkIGxvbmcnICcKKwlkZl90ZXN0IHJlZnMvZGYtZHMtYWwgLS1kZWwtYWRkIGZvbyBmb28vYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRiBjb25mbGljdCBwcmV2ZW50cyBhZGQgbG9uZyArIGRlbGV0ZSBzaG9ydCBwYWNrZWQnICcKKwlkZl90ZXN0IHJlZnMvZGYtYWwtZHNwIC0tcGFjayAtLWFkZC1kZWwgZm9vL2JhciBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIGNvbmZsaWN0IHByZXZlbnRzIGFkZCBzaG9ydCArIGRlbGV0ZSBsb25nIHBhY2tlZCcgJworCWRmX3Rlc3QgcmVmcy9kZi1hcy1kbHAgLS1wYWNrIC0tYWRkLWRlbCBmb28gZm9vL2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEL0YgY29uZmxpY3QgcHJldmVudHMgZGVsZXRlIGxvbmcgcGFja2VkICsgYWRkIHNob3J0JyAnCisJZGZfdGVzdCByZWZzL2RmLWRscC1hcyAtLXBhY2sgLS1kZWwtYWRkIGZvby9iYXIgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRiBjb25mbGljdCBwcmV2ZW50cyBkZWxldGUgc2hvcnQgcGFja2VkICsgYWRkIGxvbmcnICcKKwlkZl90ZXN0IHJlZnMvZGYtZHNwLWFsIC0tcGFjayAtLWRlbC1hZGQgZm9vIGZvby9iYXIKKycKKworIyBUcnkgc29tZSBjb21iaW5hdGlvbnMgaW52b2x2aW5nIHN5bWJvbGljIHJlZnMuLi4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIGNvbmZsaWN0IHByZXZlbnRzIGluZGlyZWN0IGFkZCBsb25nICsgZGVsZXRlIHNob3J0JyAnCisJZGZfdGVzdCByZWZzL2RmLWlhbC1kcyAtLXN5bS1hZGQgLS1hZGQtZGVsIGZvby9iYXIgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRiBjb25mbGljdCBwcmV2ZW50cyBpbmRpcmVjdCBhZGQgbG9uZyArIGluZGlyZWN0IGRlbGV0ZSBzaG9ydCcgJworCWRmX3Rlc3QgcmVmcy9kZi1pYWwtaWRzIC0tc3ltLWFkZCAtLXN5bS1kZWwgLS1hZGQtZGVsIGZvby9iYXIgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRiBjb25mbGljdCBwcmV2ZW50cyBpbmRpcmVjdCBhZGQgc2hvcnQgKyBpbmRpcmVjdCBkZWxldGUgbG9uZycgJworCWRmX3Rlc3QgcmVmcy9kZi1pYXMtaWRsIC0tc3ltLWFkZCAtLXN5bS1kZWwgLS1hZGQtZGVsIGZvbyBmb28vYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRiBjb25mbGljdCBwcmV2ZW50cyBpbmRpcmVjdCBkZWxldGUgbG9uZyArIGluZGlyZWN0IGFkZCBzaG9ydCcgJworCWRmX3Rlc3QgcmVmcy9kZi1pZGwtaWFzIC0tc3ltLWFkZCAtLXN5bS1kZWwgLS1kZWwtYWRkIGZvby9iYXIgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRiBjb25mbGljdCBwcmV2ZW50cyBpbmRpcmVjdCBhZGQgbG9uZyArIGRlbGV0ZSBzaG9ydCBwYWNrZWQnICcKKwlkZl90ZXN0IHJlZnMvZGYtaWFsLWRzcCAtLXN5bS1hZGQgLS1wYWNrIC0tYWRkLWRlbCBmb28vYmFyIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEL0YgY29uZmxpY3QgcHJldmVudHMgaW5kaXJlY3QgYWRkIGxvbmcgKyBpbmRpcmVjdCBkZWxldGUgc2hvcnQgcGFja2VkJyAnCisJZGZfdGVzdCByZWZzL2RmLWlhbC1pZHNwIC0tc3ltLWFkZCAtLXN5bS1kZWwgLS1wYWNrIC0tYWRkLWRlbCBmb28vYmFyIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEL0YgY29uZmxpY3QgcHJldmVudHMgYWRkIGxvbmcgKyBpbmRpcmVjdCBkZWxldGUgc2hvcnQgcGFja2VkJyAnCisJZGZfdGVzdCByZWZzL2RmLWFsLWlkc3AgLS1zeW0tZGVsIC0tcGFjayAtLWFkZC1kZWwgZm9vL2JhciBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIGNvbmZsaWN0IHByZXZlbnRzIGluZGlyZWN0IGRlbGV0ZSBsb25nIHBhY2tlZCArIGluZGlyZWN0IGFkZCBzaG9ydCcgJworCWRmX3Rlc3QgcmVmcy9kZi1pZGxwLWlhcyAtLXN5bS1hZGQgLS1zeW0tZGVsIC0tcGFjayAtLWRlbC1hZGQgZm9vL2JhciBmb28KKycKKworIyBUZXN0IHZhcmlvdXMgZXJyb3JzIHdoZW4gcmVhZGluZyB0aGUgb2xkIHZhbHVlcyBvZiByZWZlcmVuY2VzLi4uCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3Npbmcgb2xkIHZhbHVlIGJsb2NrcyB1cGRhdGUnICcKKwlwcmVmaXg9cmVmcy9taXNzaW5nLXVwZGF0ZSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L2ZvbyRTUTogdW5hYmxlIHRvIHJlc29sdmUgcmVmZXJlbmNlICRTUSRwcmVmaXgvZm9vJFNRCisJRU9GCisJcHJpbnRmICIlc1xuIiAidXBkYXRlICRwcmVmaXgvZm9vICRFICREIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCBvbGQgdmFsdWUgYmxvY2tzIHVwZGF0ZScgJworCXByZWZpeD1yZWZzL2luY29ycmVjdC11cGRhdGUgJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L2ZvbyRTUTogaXMgYXQgJEMgYnV0IGV4cGVjdGVkICRECisJRU9GCisJcHJpbnRmICIlc1xuIiAidXBkYXRlICRwcmVmaXgvZm9vICRFICREIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIG9sZCB2YWx1ZSBibG9ja3MgY3JlYXRlJyAnCisJcHJlZml4PXJlZnMvZXhpc3RpbmctY3JlYXRlICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFNRJHByZWZpeC9mb28kU1E6IHJlZmVyZW5jZSBhbHJlYWR5IGV4aXN0cworCUVPRgorCXByaW50ZiAiJXNcbiIgImNyZWF0ZSAkcHJlZml4L2ZvbyAkRSIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gMj5vdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNvcnJlY3Qgb2xkIHZhbHVlIGJsb2NrcyBkZWxldGUnICcKKwlwcmVmaXg9cmVmcy9pbmNvcnJlY3QtZGVsZXRlICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFNRJHByZWZpeC9mb28kU1E6IGlzIGF0ICRDIGJ1dCBleHBlY3RlZCAkRAorCUVPRgorCXByaW50ZiAiJXNcbiIgImRlbGV0ZSAkcHJlZml4L2ZvbyAkRCIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gMj5vdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIG9sZCB2YWx1ZSBibG9ja3MgaW5kaXJlY3QgdXBkYXRlJyAnCisJcHJlZml4PXJlZnMvbWlzc2luZy1pbmRpcmVjdC11cGRhdGUgJiYKKwlnaXQgc3ltYm9saWMtcmVmICRwcmVmaXgvc3ltcmVmICRwcmVmaXgvZm9vICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvc3ltcmVmJFNROiB1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJFNRJHByZWZpeC9mb28kU1EKKwlFT0YKKwlwcmludGYgIiVzXG4iICJ1cGRhdGUgJHByZWZpeC9zeW1yZWYgJEUgJEQiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IG9sZCB2YWx1ZSBibG9ja3MgaW5kaXJlY3QgdXBkYXRlJyAnCisJcHJlZml4PXJlZnMvaW5jb3JyZWN0LWluZGlyZWN0LXVwZGF0ZSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgJHByZWZpeC9zeW1yZWYgJHByZWZpeC9mb28gJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L3N5bXJlZiRTUTogaXMgYXQgJEMgYnV0IGV4cGVjdGVkICRECisJRU9GCisJcHJpbnRmICIlc1xuIiAidXBkYXRlICRwcmVmaXgvc3ltcmVmICRFICREIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIG9sZCB2YWx1ZSBibG9ja3MgaW5kaXJlY3QgY3JlYXRlJyAnCisJcHJlZml4PXJlZnMvZXhpc3RpbmctaW5kaXJlY3QtY3JlYXRlICYmCisJZ2l0IHN5bWJvbGljLXJlZiAkcHJlZml4L3N5bXJlZiAkcHJlZml4L2ZvbyAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvc3ltcmVmJFNROiByZWZlcmVuY2UgYWxyZWFkeSBleGlzdHMKKwlFT0YKKwlwcmludGYgIiVzXG4iICJjcmVhdGUgJHByZWZpeC9zeW1yZWYgJEUiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IG9sZCB2YWx1ZSBibG9ja3MgaW5kaXJlY3QgZGVsZXRlJyAnCisJcHJlZml4PXJlZnMvaW5jb3JyZWN0LWluZGlyZWN0LWRlbGV0ZSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgJHByZWZpeC9zeW1yZWYgJHByZWZpeC9mb28gJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L3N5bXJlZiRTUTogaXMgYXQgJEMgYnV0IGV4cGVjdGVkICRECisJRU9GCisJcHJpbnRmICIlc1xuIiAiZGVsZXRlICRwcmVmaXgvc3ltcmVmICREIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3Npbmcgb2xkIHZhbHVlIGJsb2NrcyBpbmRpcmVjdCBuby1kZXJlZiB1cGRhdGUnICcKKwlwcmVmaXg9cmVmcy9taXNzaW5nLW5vZGVyZWYtdXBkYXRlICYmCisJZ2l0IHN5bWJvbGljLXJlZiAkcHJlZml4L3N5bXJlZiAkcHJlZml4L2ZvbyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L3N5bXJlZiRTUTogcmVmZXJlbmNlIGlzIG1pc3NpbmcgYnV0IGV4cGVjdGVkICRECisJRU9GCisJcHJpbnRmICIlc1xuIiAib3B0aW9uIG5vLWRlcmVmIiAidXBkYXRlICRwcmVmaXgvc3ltcmVmICRFICREIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCBvbGQgdmFsdWUgYmxvY2tzIGluZGlyZWN0IG5vLWRlcmVmIHVwZGF0ZScgJworCXByZWZpeD1yZWZzL2luY29ycmVjdC1ub2RlcmVmLXVwZGF0ZSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgJHByZWZpeC9zeW1yZWYgJHByZWZpeC9mb28gJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L3N5bXJlZiRTUTogaXMgYXQgJEMgYnV0IGV4cGVjdGVkICRECisJRU9GCisJcHJpbnRmICIlc1xuIiAib3B0aW9uIG5vLWRlcmVmIiAidXBkYXRlICRwcmVmaXgvc3ltcmVmICRFICREIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIG9sZCB2YWx1ZSBibG9ja3MgaW5kaXJlY3Qgbm8tZGVyZWYgY3JlYXRlJyAnCisJcHJlZml4PXJlZnMvZXhpc3Rpbmctbm9kZXJlZi1jcmVhdGUgJiYKKwlnaXQgc3ltYm9saWMtcmVmICRwcmVmaXgvc3ltcmVmICRwcmVmaXgvZm9vICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFNRJHByZWZpeC9zeW1yZWYkU1E6IHJlZmVyZW5jZSBhbHJlYWR5IGV4aXN0cworCUVPRgorCXByaW50ZiAiJXNcbiIgIm9wdGlvbiBuby1kZXJlZiIgImNyZWF0ZSAkcHJlZml4L3N5bXJlZiAkRSIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gMj5vdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNvcnJlY3Qgb2xkIHZhbHVlIGJsb2NrcyBpbmRpcmVjdCBuby1kZXJlZiBkZWxldGUnICcKKwlwcmVmaXg9cmVmcy9pbmNvcnJlY3Qtbm9kZXJlZi1kZWxldGUgJiYKKwlnaXQgc3ltYm9saWMtcmVmICRwcmVmaXgvc3ltcmVmICRwcmVmaXgvZm9vICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFNRJHByZWZpeC9zeW1yZWYkU1E6IGlzIGF0ICRDIGJ1dCBleHBlY3RlZCAkRAorCUVPRgorCXByaW50ZiAiJXNcbiIgIm9wdGlvbiBuby1kZXJlZiIgImRlbGV0ZSAkcHJlZml4L3N5bXJlZiAkRCIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gMj5vdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tZW1wdHkgZGlyZWN0b3J5IGJsb2NrcyBjcmVhdGUnICcKKwlwcmVmaXg9cmVmcy9uZS1jcmVhdGUgJiYKKwlta2RpciAtcCAuZ2l0LyRwcmVmaXgvZm9vL2JhciAmJgorCTogPi5naXQvJHByZWZpeC9mb28vYmFyL2Jhei5sb2NrICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRwcmVmaXgvZm9vL2Jhci9iYXoubG9jayIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFNRJHByZWZpeC9mb28kU1E6IHRoZXJlIGlzIGEgbm9uLWVtcHR5IGRpcmVjdG9yeSAkU1EuZ2l0LyRwcmVmaXgvZm9vJFNRIGJsb2NraW5nIHJlZmVyZW5jZSAkU1EkcHJlZml4L2ZvbyRTUQorCUVPRgorCXByaW50ZiAiJXNcbiIgInVwZGF0ZSAkcHJlZml4L2ZvbyAkQyIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gMj5vdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmVyciAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L2ZvbyRTUTogdW5hYmxlIHRvIHJlc29sdmUgcmVmZXJlbmNlICRTUSRwcmVmaXgvZm9vJFNRCisJRU9GCisJcHJpbnRmICIlc1xuIiAidXBkYXRlICRwcmVmaXgvZm9vICREICRDIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jyb2tlbiByZWZlcmVuY2UgYmxvY2tzIGNyZWF0ZScgJworCXByZWZpeD1yZWZzL2Jyb2tlbi1jcmVhdGUgJiYKKwlta2RpciAtcCAuZ2l0LyRwcmVmaXggJiYKKwllY2hvICJnb2JibGVkaWdvb2siID4uZ2l0LyRwcmVmaXgvZm9vICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRwcmVmaXgvZm9vIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L2ZvbyRTUTogdW5hYmxlIHRvIHJlc29sdmUgcmVmZXJlbmNlICRTUSRwcmVmaXgvZm9vJFNROiByZWZlcmVuY2UgYnJva2VuCisJRU9GCisJcHJpbnRmICIlc1xuIiAidXBkYXRlICRwcmVmaXgvZm9vICRDIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvZm9vJFNROiB1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJFNRJHByZWZpeC9mb28kU1E6IHJlZmVyZW5jZSBicm9rZW4KKwlFT0YKKwlwcmludGYgIiVzXG4iICJ1cGRhdGUgJHByZWZpeC9mb28gJEQgJEMiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLWVtcHR5IGRpcmVjdG9yeSBibG9ja3MgaW5kaXJlY3QgY3JlYXRlJyAnCisJcHJlZml4PXJlZnMvbmUtaW5kaXJlY3QtY3JlYXRlICYmCisJZ2l0IHN5bWJvbGljLXJlZiAkcHJlZml4L3N5bXJlZiAkcHJlZml4L2ZvbyAmJgorCW1rZGlyIC1wIC5naXQvJHByZWZpeC9mb28vYmFyICYmCisJOiA+LmdpdC8kcHJlZml4L2Zvby9iYXIvYmF6LmxvY2sgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvJHByZWZpeC9mb28vYmFyL2Jhei5sb2NrIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L3N5bXJlZiRTUTogdGhlcmUgaXMgYSBub24tZW1wdHkgZGlyZWN0b3J5ICRTUS5naXQvJHByZWZpeC9mb28kU1EgYmxvY2tpbmcgcmVmZXJlbmNlICRTUSRwcmVmaXgvZm9vJFNRCisJRU9GCisJcHJpbnRmICIlc1xuIiAidXBkYXRlICRwcmVmaXgvc3ltcmVmICRDIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvc3ltcmVmJFNROiB1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJFNRJHByZWZpeC9mb28kU1EKKwlFT0YKKwlwcmludGYgIiVzXG4iICJ1cGRhdGUgJHByZWZpeC9zeW1yZWYgJEQgJEMiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJva2VuIHJlZmVyZW5jZSBibG9ja3MgaW5kaXJlY3QgY3JlYXRlJyAnCisJcHJlZml4PXJlZnMvYnJva2VuLWluZGlyZWN0LWNyZWF0ZSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgJHByZWZpeC9zeW1yZWYgJHByZWZpeC9mb28gJiYKKwllY2hvICJnb2JibGVkaWdvb2siID4uZ2l0LyRwcmVmaXgvZm9vICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRwcmVmaXgvZm9vIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L3N5bXJlZiRTUTogdW5hYmxlIHRvIHJlc29sdmUgcmVmZXJlbmNlICRTUSRwcmVmaXgvZm9vJFNROiByZWZlcmVuY2UgYnJva2VuCisJRU9GCisJcHJpbnRmICIlc1xuIiAidXBkYXRlICRwcmVmaXgvc3ltcmVmICRDIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvc3ltcmVmJFNROiB1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJFNRJHByZWZpeC9mb28kU1E6IHJlZmVyZW5jZSBicm9rZW4KKwlFT0YKKwlwcmludGYgIiVzXG4iICJ1cGRhdGUgJHByZWZpeC9zeW1yZWYgJEQgJEMiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gYm9ndXMgaW50ZXJtZWRpYXRlIHZhbHVlcyBkdXJpbmcgZGVsZXRlJyAnCisJcHJlZml4PXJlZnMvc2xvdy10cmFuc2FjdGlvbiAmJgorCSMgU2V0IHVwIGEgcmVmZXJlbmNlIHdpdGggZGlmZmVyaW5nIGxvb3NlIGFuZCBwYWNrZWQgdmVyc2lvbnM6CisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEQgJiYKKwlnaXQgZm9yLWVhY2gtcmVmICRwcmVmaXggPnVuY2hhbmdlZCAmJgorCSMgTm93IHRyeSB0byB1cGRhdGUgdGhlIHJlZmVyZW5jZSwgYnV0IGhvbGQgdGhlIGBwYWNrZWQtcmVmc2AgbG9jaworCSMgZm9yIGEgd2hpbGUgdG8gc2VlIHdoYXQgaGFwcGVucyB3aGlsZSB0aGUgcHJvY2VzcyBpcyBibG9ja2VkOgorCTogPi5naXQvcGFja2VkLXJlZnMubG9jayAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9wYWNrZWQtcmVmcy5sb2NrIiAmJgorCXsKKwkJIyBOb3RlOiB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaXMgaW50ZW50aW9uYWxseSBydW4gaW4gdGhlCisJCSMgYmFja2dyb3VuZC4gV2UgaW5jcmVhc2UgdGhlIHRpbWVvdXQgc28gdGhhdCBgdXBkYXRlLXJlZmAKKwkJIyBhdHRlbXB0cyB0byBhY3F1aXJlIHRoZSBgcGFja2VkLXJlZnNgIGxvY2sgZm9yIG11Y2ggbG9uZ2VyCisJCSMgdGhhbiBpdCB0YWtlcyBmb3IgdXMgdG8gZG8gdGhlIGNoZWNrIHRoZW4gZGVsZXRlIGl0OgorCQlnaXQgLWMgY29yZS5wYWNrZWRyZWZzdGltZW91dD0zMDAwMCB1cGRhdGUtcmVmIC1kICRwcmVmaXgvZm9vICYKKwl9ICYmCisJcGlkMj0kISAmJgorCSMgR2l2ZSB1cGRhdGUtcmVmIHBsZW50eSBvZiB0aW1lIHRvIGdldCB0byB0aGUgcG9pbnQgd2hlcmUgaXQgdHJpZXMKKwkjIHRvIGxvY2sgcGFja2VkLXJlZnM6CisJc2xlZXAgMSAmJgorCSMgTWFrZSBzdXJlIHRoYXQgdXBkYXRlLXJlZiBkaWQgbm90IGNvbXBsZXRlIGRlc3BpdGUgdGhlIGxvY2s6CisJa2lsbCAtMCAkcGlkMiAmJgorCSMgVmVyaWZ5IHRoYXQgdGhlIHJlZmVyZW5jZSBzdGlsbCBoYXMgaXRzIG9sZCB2YWx1ZToKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICRwcmVmaXgvZm9vIHx8IGVjaG8gdW5kZWZpbmVkKSAmJgorCWNhc2UgIiRzaGExIiBpbgorCSREKQorCQkjIFRoaXMgaXMgd2hhdCB3ZSBob3BlIGZvcjsgaXQgbWVhbnMgdGhhdCBub3RoaW5nCisJCSMgdXNlci12aXNpYmxlIGhhcyBjaGFuZ2VkIHlldC4KKwkJOiA7OworCXVuZGVmaW5lZCkKKwkJIyBUaGlzIGlzIG5vdCBjb3JyZWN0OyBpdCBtZWFucyB0aGUgZGVsZXRpb24gaGFzIGhhcHBlbmVkCisJCSMgYWxyZWFkeSBldmVuIHRob3VnaCB1cGRhdGUtcmVmIHNob3VsZCBub3QgaGF2ZSBiZWVuCisJCSMgYWJsZSB0byBhY3F1aXJlIHRoZSBsb2NrIHlldC4KKwkJZWNobyAiJHByZWZpeC9mb28gZGVsZXRlZCBwcmVtYXR1cmVseSIgJiYKKwkJYnJlYWsKKwkJOzsKKwkkQykKKwkJIyBUaGlzIHZhbHVlIHNob3VsZCBuZXZlciBiZSBzZWVuLiBQcm9iYWJseSB0aGUgbG9vc2UKKwkJIyByZWZlcmVuY2UgaGFzIGJlZW4gZGVsZXRlZCBidXQgdGhlIHBhY2tlZCByZWZlcmVuY2UKKwkJIyBpcyBzdGlsbCB0aGVyZToKKwkJZWNobyAiJHByZWZpeC9mb28gaW5jb3JyZWN0bHkgb2JzZXJ2ZWQgdG8gYmUgQyIgJiYKKwkJYnJlYWsKKwkJOzsKKwkqKQorCQkjIFdURj8KKwkJZWNobyAidW5leHBlY3RlZCB2YWx1ZSBvYnNlcnZlZCBmb3IgJHByZWZpeC9mb286ICRzaGExIiAmJgorCQlicmVhaworCQk7OworCWVzYWMgPm91dCAmJgorCXJtIC1mIC5naXQvcGFja2VkLXJlZnMubG9jayAmJgorCXdhaXQgJHBpZDIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICRwcmVmaXgvZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSBmYWlscyBjbGVhbmx5IGlmIHBhY2tlZC1yZWZzIGZpbGUgaXMgbG9ja2VkJyAnCisJcHJlZml4PXJlZnMvbG9ja2VkLXBhY2tlZC1yZWZzICYmCisJIyBTZXQgdXAgYSByZWZlcmVuY2Ugd2l0aCBkaWZmZXJpbmcgbG9vc2UgYW5kIHBhY2tlZCB2ZXJzaW9uczoKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkRCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgJHByZWZpeCA+dW5jaGFuZ2VkICYmCisJIyBOb3cgdHJ5IHRvIGRlbGV0ZSBpdCB3aGlsZSB0aGUgYHBhY2tlZC1yZWZzYCBsb2NrIGlzIGhlbGQ6CisJOiA+LmdpdC9wYWNrZWQtcmVmcy5sb2NrICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3BhY2tlZC1yZWZzLmxvY2siICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLWQgJHByZWZpeC9mb28gPm91dCAyPmVyciAmJgorCWdpdCBmb3ItZWFjaC1yZWYgJHByZWZpeCA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiVW5hYmxlIHRvIGNyZWF0ZSAkU1EuKnBhY2tlZC1yZWZzLmxvY2skU1E6ICIgZXJyICYmCisJdGVzdF9jbXAgdW5jaGFuZ2VkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGUgZmFpbHMgY2xlYW5seSBpZiBwYWNrZWQtcmVmcy5uZXcgd3JpdGUgZmFpbHMnICcKKwkjIFNldHVwIGFuZCBleHBlY3RhdGlvbnMgYXJlIHNpbWlsYXIgdG8gdGhlIHRlc3QgYWJvdmUuCisJcHJlZml4PXJlZnMvZmFpbGVkLXBhY2tlZC1yZWZzICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEQgJiYKKwlnaXQgZm9yLWVhY2gtcmVmICRwcmVmaXggPnVuY2hhbmdlZCAmJgorCSMgVGhpcyBzaG91bGQgbm90IGhhcHBlbiBpbiBwcmFjdGljZSwgYnV0IGl0IGlzIGFuIGVhc3kgd2F5IHRvIGdldCBhCisJIyByZWxpYWJsZSBlcnJvciAod2Ugb3BlbiB3aXRoIGNyZWF0ZV90ZW1wZmlsZSgpLCB3aGljaCB1c2VzIE9fRVhDTCkuCisJOiA+LmdpdC9wYWNrZWQtcmVmcy5uZXcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcGFja2VkLXJlZnMubmV3IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC1kICRwcmVmaXgvZm9vICYmCisJZ2l0IGZvci1lYWNoLXJlZiAkcHJlZml4ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB1bmNoYW5nZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQwNS1tYWluLXJlZi1zdG9yZS5zaCBiL3QvdDE0MDUtbWFpbi1yZWYtc3RvcmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzMxODk5ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MDUtbWFpbi1yZWYtc3RvcmUuc2gKQEAgLTAsMCArMSwxMjkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IG1haW4gcmVmIHN0b3JlIGFwaScKKworLiAuL3Rlc3QtbGliLnNoCisKK1JVTj0idGVzdC10b29sIHJlZi1zdG9yZSBtYWluIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrX3JlZnMoUEFDS19SRUZTX0FMTCB8IFBBQ0tfUkVGU19QUlVORSknICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwlOPWBmaW5kIC5naXQvcmVmcyAtdHlwZSBmIHwgd2MgLWxgICYmCisJdGVzdCAiJE4iICE9IDAgJiYKKwkkUlVOIHBhY2stcmVmcyAzICYmCisJTj1gZmluZCAuZ2l0L3JlZnMgLXR5cGUgZiB8IHdjIC1sYAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwZWVsX3JlZihuZXctdGFnKScgJworCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ZWQgJiYKKwlnaXQgdGFnIC1hIC1tIG5ldy10YWcgbmV3LXRhZyBIRUFEICYmCisJJFJVTiBwZWVsLXJlZiByZWZzL3RhZ3MvbmV3LXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZV9zeW1yZWYoRk9PLCByZWZzL2hlYWRzL21hc3RlciknICcKKwkkUlVOIGNyZWF0ZS1zeW1yZWYgRk9PIHJlZnMvaGVhZHMvbWFzdGVyIG5vdGhpbmcgJiYKKwllY2hvIHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3RlZCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgRk9PID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlX3JlZnMoRk9PLCByZWZzL3RhZ3MvbmV3LXRhZyknICcKKwlnaXQgcmV2LXBhcnNlIEZPTyAtLSAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy90YWdzL25ldy10YWcgLS0gJiYKKwkkUlVOIGRlbGV0ZS1yZWZzIDAgbm90aGluZyBGT08gcmVmcy90YWdzL25ldy10YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEZPTyAtLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL25ldy10YWcgLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lX3JlZnMobWFzdGVyLCBuZXctbWFzdGVyKScgJworCWdpdCByZXYtcGFyc2UgbWFzdGVyID5leHBlY3RlZCAmJgorCSRSVU4gcmVuYW1lLXJlZiByZWZzL2hlYWRzL21hc3RlciByZWZzL2hlYWRzL25ldy1tYXN0ZXIgJiYKKwlnaXQgcmV2LXBhcnNlIG5ldy1tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfY29tbWl0IHJlY3JlYXRlLW1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JfZWFjaF9yZWYocmVmcy9oZWFkcy8pJyAnCisJJFJVTiBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy8gfCBjdXQgLWQiICIgLWYgMi0gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCW1hc3RlciAweDAKKwluZXctbWFzdGVyIDB4MAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JfZWFjaF9yZWYoKSBpcyBzb3J0ZWQnICcKKwkkUlVOIGZvci1lYWNoLXJlZiByZWZzL2hlYWRzLyB8IGN1dCAtZCIgIiAtZiAyLSA+YWN0dWFsICYmCisJc29ydCBhY3R1YWwgPiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNvbHZlX3JlZihuZXctbWFzdGVyKScgJworCVNIQTE9YGdpdCByZXYtcGFyc2UgbmV3LW1hc3RlcmAgJiYKKwllY2hvICIkU0hBMSByZWZzL2hlYWRzL25ldy1tYXN0ZXIgMHgwIiA+ZXhwZWN0ZWQgJiYKKwkkUlVOIHJlc29sdmUtcmVmIHJlZnMvaGVhZHMvbmV3LW1hc3RlciAwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5X3JlZihuZXctbWFzdGVyKScgJworCSRSVU4gdmVyaWZ5LXJlZiByZWZzL2hlYWRzL25ldy1tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yX2VhY2hfcmVmbG9nKCknICcKKwkkUlVOIGZvci1lYWNoLXJlZmxvZyB8IHNvcnQgLWsyIHwgY3V0IC1kIiAiIC1mIDItID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlIRUFEIDB4MQorCXJlZnMvaGVhZHMvbWFzdGVyIDB4MAorCXJlZnMvaGVhZHMvbmV3LW1hc3RlciAweDAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yX2VhY2hfcmVmbG9nX2VudCgpJyAnCisJJFJVTiBmb3ItZWFjaC1yZWZsb2ctZW50IEhFQUQgPmFjdHVhbCAmJgorCWhlYWQgLW4xIGFjdHVhbCB8IGdyZXAgb25lICYmCisJdGFpbCAtbjIgYWN0dWFsIHwgaGVhZCAtbjEgfCBncmVwIHJlY3JlYXRlLW1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2UoKScgJworCSRSVU4gZm9yLWVhY2gtcmVmbG9nLWVudC1yZXZlcnNlIEhFQUQgPmFjdHVhbCAmJgorCWhlYWQgLW4xIGFjdHVhbCB8IGdyZXAgcmVjcmVhdGUtbWFzdGVyICYmCisJdGFpbCAtbjIgYWN0dWFsIHwgaGVhZCAtbjEgfCBncmVwIG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZsb2dfZXhpc3RzKEhFQUQpJyAnCisJJFJVTiByZWZsb2ctZXhpc3RzIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlX3JlZmxvZyhIRUFEKScgJworCSRSVU4gZGVsZXRlLXJlZmxvZyBIRUFEICYmCisJISB0ZXN0IC1mIC5naXQvbG9ncy9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZS1yZWZsb2coSEVBRCknICcKKwkkUlVOIGNyZWF0ZS1yZWZsb2cgSEVBRCAxICYmCisJdGVzdCAtZiAuZ2l0L2xvZ3MvSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGVfcmVmKHJlZnMvaGVhZHMvZm9vKScgJworCWdpdCBjaGVja291dCAtYiBmb28gJiYKKwlGT09fU0hBMT1gZ2l0IHJldi1wYXJzZSBmb29gICYmCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoICYmCisJdGVzdF9jb21taXQgYmFyLWNvbW1pdCAmJgorCWdpdCBjaGVja291dCAtYiBiYXIgJiYKKwlCQVJfU0hBMT1gZ2l0IHJldi1wYXJzZSBiYXJgICYmCisJJFJVTiB1cGRhdGUtcmVmIHVwZGF0aW5nIHJlZnMvaGVhZHMvZm9vICRCQVJfU0hBMSAkRk9PX1NIQTEgMCAmJgorCWVjaG8gJEJBUl9TSEExID5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9mb28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGVfcmVmKHJlZnMvaGVhZHMvZm9vKScgJworCVNIQTE9YGdpdCByZXYtcGFyc2UgZm9vYCAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCAmJgorCSRSVU4gZGVsZXRlLXJlZiBtc2cgcmVmcy9oZWFkcy9mb28gJFNIQTEgMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9mb28gLS0KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDA2LXN1Ym1vZHVsZS1yZWYtc3RvcmUuc2ggYi90L3QxNDA2LXN1Ym1vZHVsZS1yZWYtc3RvcmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzZiN2VmNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MDYtc3VibW9kdWxlLXJlZi1zdG9yZS5zaApAQCAtMCwwICsxLDEwMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3Qgc3VibW9kdWxlIHJlZiBzdG9yZSBhcGknCisKKy4gLi90ZXN0LWxpYi5zaAorCitSVU49InRlc3QtdG9vbCByZWYtc3RvcmUgc3VibW9kdWxlOnN1YiIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgaW5pdCBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQl0ZXN0X2NvbW1pdCBmaXJzdCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgbmV3LW1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFja19yZWZzKCkgbm90IGFsbG93ZWQnICcKKwl0ZXN0X211c3RfZmFpbCAkUlVOIHBhY2stcmVmcyAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BlZWxfcmVmKG5ldy10YWcpJyAnCisJZ2l0IC1DIHN1YiByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ZWQgJiYKKwlnaXQgLUMgc3ViIHRhZyAtYSAtbSBuZXctdGFnIG5ldy10YWcgSEVBRCAmJgorCSRSVU4gcGVlbC1yZWYgcmVmcy90YWdzL25ldy10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGVfc3ltcmVmKCkgbm90IGFsbG93ZWQnICcKKwl0ZXN0X211c3RfZmFpbCAkUlVOIGNyZWF0ZS1zeW1yZWYgRk9PIHJlZnMvaGVhZHMvbWFzdGVyIG5vdGhpbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlX3JlZnMoKSBub3QgYWxsb3dlZCcgJworCXRlc3RfbXVzdF9mYWlsICRSVU4gZGVsZXRlLXJlZnMgMCBub3RoaW5nIEZPTyByZWZzL3RhZ3MvbmV3LXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWVfcmVmcygpIG5vdCBhbGxvd2VkJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFJVTiByZW5hbWUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyIHJlZnMvaGVhZHMvbmV3LW1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JfZWFjaF9yZWYocmVmcy9oZWFkcy8pJyAnCisJJFJVTiBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy8gfCBjdXQgLWQiICIgLWYgMi0gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCW1hc3RlciAweDAKKwluZXctbWFzdGVyIDB4MAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JfZWFjaF9yZWYoKSBpcyBzb3J0ZWQnICcKKwkkUlVOIGZvci1lYWNoLXJlZiByZWZzL2hlYWRzLyB8IGN1dCAtZCIgIiAtZiAyLSA+YWN0dWFsICYmCisJc29ydCBhY3R1YWwgPiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNvbHZlX3JlZihtYXN0ZXIpJyAnCisJU0hBMT1gZ2l0IC1DIHN1YiByZXYtcGFyc2UgbWFzdGVyYCAmJgorCWVjaG8gIiRTSEExIHJlZnMvaGVhZHMvbWFzdGVyIDB4MCIgPmV4cGVjdGVkICYmCisJJFJVTiByZXNvbHZlLXJlZiByZWZzL2hlYWRzL21hc3RlciAwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5X3JlZihuZXctbWFzdGVyKScgJworCSRSVU4gdmVyaWZ5LXJlZiByZWZzL2hlYWRzL25ldy1tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yX2VhY2hfcmVmbG9nKCknICcKKwkkUlVOIGZvci1lYWNoLXJlZmxvZyB8IHNvcnQgfCBjdXQgLWQiICIgLWYgMi0gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCUhFQUQgMHgxCisJcmVmcy9oZWFkcy9tYXN0ZXIgMHgwCisJcmVmcy9oZWFkcy9uZXctbWFzdGVyIDB4MAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JfZWFjaF9yZWZsb2dfZW50KCknICcKKwkkUlVOIGZvci1lYWNoLXJlZmxvZy1lbnQgSEVBRCA+YWN0dWFsICYmCisJaGVhZCAtbjEgYWN0dWFsIHwgZ3JlcCBmaXJzdCAmJgorCXRhaWwgLW4yIGFjdHVhbCB8IGhlYWQgLW4xIHwgZ3JlcCBtYXN0ZXIudG8ubmV3CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZSgpJyAnCisJJFJVTiBmb3ItZWFjaC1yZWZsb2ctZW50LXJldmVyc2UgSEVBRCA+YWN0dWFsICYmCisJaGVhZCAtbjEgYWN0dWFsIHwgZ3JlcCBtYXN0ZXIudG8ubmV3ICYmCisJdGFpbCAtbjIgYWN0dWFsIHwgaGVhZCAtbjEgfCBncmVwIGZpcnN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZ19leGlzdHMoSEVBRCknICcKKwkkUlVOIHJlZmxvZy1leGlzdHMgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGVfcmVmbG9nKCkgbm90IGFsbG93ZWQnICcKKwl0ZXN0X211c3RfZmFpbCAkUlVOIGRlbGV0ZS1yZWZsb2cgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUtcmVmbG9nKCkgbm90IGFsbG93ZWQnICcKKwl0ZXN0X211c3RfZmFpbCAkUlVOIGNyZWF0ZS1yZWZsb2cgSEVBRCAxCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQwNy13b3JrdHJlZS1yZWYtc3RvcmUuc2ggYi90L3QxNDA3LXdvcmt0cmVlLXJlZi1zdG9yZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YTg0ODU4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTQwNy13b3JrdHJlZS1yZWYtc3RvcmUuc2gKQEAgLTAsMCArMSw4MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3Qgd29ya3RyZWUgcmVmIHN0b3JlIGFwaScKKworLiAuL3Rlc3QtbGliLnNoCisKK1JXVD0idGVzdC10b29sIHJlZi1zdG9yZSB3b3JrdHJlZTp3dCIKK1JNQUlOPSJ0ZXN0LXRvb2wgcmVmLXN0b3JlIHdvcmt0cmVlOm1haW4iCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgZmlyc3QgJiYKKwlnaXQgd29ya3RyZWUgYWRkIC1iIHd0LW1hc3RlciB3dCAmJgorCSgKKwkJY2Qgd3QgJiYKKwkJdGVzdF9jb21taXQgc2Vjb25kCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNvbHZlX3JlZig8c2hhcmVkLXJlZj4pJyAnCisJU0hBMT1gZ2l0IHJldi1wYXJzZSBtYXN0ZXJgICYmCisJZWNobyAiJFNIQTEgcmVmcy9oZWFkcy9tYXN0ZXIgMHgwIiA+ZXhwZWN0ZWQgJiYKKwkkUldUIHJlc29sdmUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyIDAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCSRSTUFJTiByZXNvbHZlLXJlZiByZWZzL2hlYWRzL21hc3RlciAwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzb2x2ZV9yZWYoPHBlci13b3JrdHJlZS1yZWY+KScgJworCVNIQTE9YGdpdCAtQyB3dCByZXYtcGFyc2UgSEVBRGAgJiYKKwllY2hvICIkU0hBMSByZWZzL2hlYWRzL3d0LW1hc3RlciAweDEiID5leHBlY3RlZCAmJgorCSRSV1QgcmVzb2x2ZS1yZWYgSEVBRCAwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCVNIQTE9YGdpdCByZXYtcGFyc2UgSEVBRGAgJiYKKwllY2hvICIkU0hBMSByZWZzL2hlYWRzL21hc3RlciAweDEiID5leHBlY3RlZCAmJgorCSRSTUFJTiByZXNvbHZlLXJlZiBIRUFEIDAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGVfc3ltcmVmKEZPTywgcmVmcy9oZWFkcy9tYXN0ZXIpJyAnCisJJFJXVCBjcmVhdGUtc3ltcmVmIEZPTyByZWZzL2hlYWRzL21hc3RlciBub3RoaW5nICYmCisJZWNobyByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ZWQgJiYKKwlnaXQgLUMgd3Qgc3ltYm9saWMtcmVmIEZPTyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwkkUk1BSU4gY3JlYXRlLXN5bXJlZiBGT08gcmVmcy9oZWFkcy93dC1tYXN0ZXIgbm90aGluZyAmJgorCWVjaG8gcmVmcy9oZWFkcy93dC1tYXN0ZXIgPmV4cGVjdGVkICYmCisJZ2l0IHN5bWJvbGljLXJlZiBGT08gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JfZWFjaF9yZWZsb2coKScgJworCWVjaG8gJFpFUk9fT0lEID4gLmdpdC9sb2dzL1BTRVVETy1NQUlOICYmCisJbWtkaXIgLXAgICAgIC5naXQvbG9ncy9yZWZzL2Jpc2VjdCAmJgorCWVjaG8gJFpFUk9fT0lEID4gLmdpdC9sb2dzL3JlZnMvYmlzZWN0L3JhbmRvbSAmJgorCisJZWNobyAkWkVST19PSUQgPiAuZ2l0L3dvcmt0cmVlcy93dC9sb2dzL1BTRVVETy1XVCAmJgorCW1rZGlyIC1wICAgICAuZ2l0L3dvcmt0cmVlcy93dC9sb2dzL3JlZnMvYmlzZWN0ICYmCisJZWNobyAkWkVST19PSUQgPiAuZ2l0L3dvcmt0cmVlcy93dC9sb2dzL3JlZnMvYmlzZWN0L3d0LXJhbmRvbSAmJgorCisJJFJXVCBmb3ItZWFjaC1yZWZsb2cgfCBjdXQgLWQiICIgLWYgMi0gfCBzb3J0ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlIRUFEIDB4MQorCVBTRVVETy1XVCAweDAKKwlyZWZzL2Jpc2VjdC93dC1yYW5kb20gMHgwCisJcmVmcy9oZWFkcy9tYXN0ZXIgMHgwCisJcmVmcy9oZWFkcy93dC1tYXN0ZXIgMHgwCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwkkUk1BSU4gZm9yLWVhY2gtcmVmbG9nIHwgY3V0IC1kIiAiIC1mIDItIHwgc29ydCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJSEVBRCAweDEKKwlQU0VVRE8tTUFJTiAweDAKKwlyZWZzL2Jpc2VjdC9yYW5kb20gMHgwCisJcmVmcy9oZWFkcy9tYXN0ZXIgMHgwCisJcmVmcy9oZWFkcy93dC1tYXN0ZXIgMHgwCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQwOC1wYWNrZWQtcmVmcy5zaCBiL3QvdDE0MDgtcGFja2VkLXJlZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWU0NGExNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MDgtcGFja2VkLXJlZnMuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BhY2tlZC1yZWZzIGVudHJpZXMgYXJlIGNvdmVyZWQgYnkgbG9vc2UgcmVmcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBvbmUgJiYKKwlvbmU9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGZvci1lYWNoLXJlZiA+YWN0dWFsICYmCisJZWNobyAiJG9uZSBjb21taXQJcmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IGZvci1lYWNoLXJlZiA+YWN0dWFsICYmCisJZWNobyAiJG9uZSBjb21taXQJcmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gYW5vdGhlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0d28gJiYKKwl0d289JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUQgYW5vdGhlciAmJgorCisJZ2l0IGZvci1lYWNoLXJlZiA+YWN0dWFsICYmCisJZWNobyAiJHR3byBjb21taXQJcmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1ub3cgLS1hbGwgJiYKKwlnaXQgcHJ1bmUgJiYKKwlnaXQgdGFnIC1tIHYxLjAgdjEuMCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZXJyb3IgZnJvbSBzdGFsZSBlbnRyeSBpbiBwYWNrZWQtcmVmcycgJworCWdpdCBkZXNjcmliZSBtYXN0ZXIgPmFjdHVhbCAyPiYxICYmCisJZWNobyAidjEuMCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDA5LWF2b2lkLXBhY2tpbmctcmVmcy5zaCBiL3QvdDE0MDktYXZvaWQtcGFja2luZy1yZWZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJlMTJmYjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDA5LWF2b2lkLXBhY2tpbmctcmVmcy5zaApAQCAtMCwwICsxLDExOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2F2b2lkIHJld3JpdGluZyBwYWNrZWQtcmVmcyB1bm5lY2Vzc2FyaWx5JworCisuIC4vdGVzdC1saWIuc2gKKworIyBBZGQgYW4gaWRlbnRpZnlpbmcgbWFyayB0byB0aGUgcGFja2VkLXJlZnMgZmlsZSBoZWFkZXIgbGluZS4gVGhpcworIyBzaG91bGRuJ3QgdXBzZXQgcmVhZGVycywgYW5kIGl0IHNob3VsZCBiZSBvbWl0dGVkIGlmIHRoZSBmaWxlIGlzCisjIGV2ZXIgcmV3cml0dGVuLgorbWFya19wYWNrZWRfcmVmcyAoKSB7CisJc2VkIC1lICJzL15cKCMuKlwpL1wxIHQxNDA5IC8iIC5naXQvcGFja2VkLXJlZnMgPi5naXQvcGFja2VkLXJlZnMubmV3ICYmCisJbXYgLmdpdC9wYWNrZWQtcmVmcy5uZXcgLmdpdC9wYWNrZWQtcmVmcworfQorCisjIFZlcmlmeSB0aGF0IHRoZSBwYWNrZWQtcmVmcyBmaWxlIGlzIHN0aWxsIG1hcmtlZC4KK2NoZWNrX3BhY2tlZF9yZWZzX21hcmtlZCAoKSB7CisJZ3JlcCAtcSAnXiMuKiB0MTQwOSAnIC5naXQvcGFja2VkLXJlZnMKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIkNvbW1pdCBBIiAmJgorCUE9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJDb21taXQgQiIgJiYKKwlCPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiQ29tbWl0IEMiICYmCisJQz0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGNyZWF0ZSBwYWNrZWQtcmVmcyBmaWxlIGdyYXR1aXRvdXNseScgJworCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcGFja2VkLXJlZnMgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2ZvbyAkQSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcGFja2VkLXJlZnMgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2ZvbyAkQiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcGFja2VkLXJlZnMgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2ZvbyAkQyAkQiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcGFja2VkLXJlZnMgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2ZvbyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcGFja2VkLXJlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdGhhdCBtYXJraW5nIHRoZSBwYWNrZWQtcmVmcyBmaWxlIHdvcmtzJyAnCisJZ2l0IGZvci1lYWNoLXJlZiA+ZXhwZWN0ZWQgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJbWFya19wYWNrZWRfcmVmcyAmJgorCWNoZWNrX3BhY2tlZF9yZWZzX21hcmtlZCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwkhIGNoZWNrX3BhY2tlZF9yZWZzX21hcmtlZCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgPmFjdHVhbDIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlYXZlIHBhY2tlZC1yZWZzIHVudG91Y2hlZCBvbiB1cGRhdGUgb2YgcGFja2VkJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9wYWNrZWQtdXBkYXRlICRBICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCW1hcmtfcGFja2VkX3JlZnMgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3BhY2tlZC11cGRhdGUgJEIgJiYKKwljaGVja19wYWNrZWRfcmVmc19tYXJrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVhdmUgcGFja2VkLXJlZnMgdW50b3VjaGVkIG9uIGNoZWNrZWQgdXBkYXRlIG9mIHBhY2tlZCcgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvcGFja2VkLWNoZWNrZWQtdXBkYXRlICRBICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCW1hcmtfcGFja2VkX3JlZnMgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3BhY2tlZC1jaGVja2VkLXVwZGF0ZSAkQiAkQSAmJgorCWNoZWNrX3BhY2tlZF9yZWZzX21hcmtlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWF2ZSBwYWNrZWQtcmVmcyB1bnRvdWNoZWQgb24gdmVyaWZ5IG9mIHBhY2tlZCcgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvcGFja2VkLXZlcmlmeSAkQSAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwltYXJrX3BhY2tlZF9yZWZzICYmCisJZWNobyAidmVyaWZ5IHJlZnMvaGVhZHMvcGFja2VkLXZlcmlmeSAkQSIgfCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluICYmCisJY2hlY2tfcGFja2VkX3JlZnNfbWFya2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RvdWNoIHBhY2tlZC1yZWZzIG9uIGRlbGV0ZSBvZiBwYWNrZWQnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3BhY2tlZC1kZWxldGUgJEEgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJbWFya19wYWNrZWRfcmVmcyAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvcGFja2VkLWRlbGV0ZSAmJgorCSEgY2hlY2tfcGFja2VkX3JlZnNfbWFya2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlYXZlIHBhY2tlZC1yZWZzIHVudG91Y2hlZCBvbiB1cGRhdGUgb2YgbG9vc2UnICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9sb29zZS11cGRhdGUgJEEgJiYKKwltYXJrX3BhY2tlZF9yZWZzICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9sb29zZS11cGRhdGUgJEIgJiYKKwljaGVja19wYWNrZWRfcmVmc19tYXJrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVhdmUgcGFja2VkLXJlZnMgdW50b3VjaGVkIG9uIGNoZWNrZWQgdXBkYXRlIG9mIGxvb3NlJyAnCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbG9vc2UtY2hlY2tlZC11cGRhdGUgJEEgJiYKKwltYXJrX3BhY2tlZF9yZWZzICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9sb29zZS1jaGVja2VkLXVwZGF0ZSAkQiAkQSAmJgorCWNoZWNrX3BhY2tlZF9yZWZzX21hcmtlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWF2ZSBwYWNrZWQtcmVmcyB1bnRvdWNoZWQgb24gdmVyaWZ5IG9mIGxvb3NlJyAnCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbG9vc2UtdmVyaWZ5ICRBICYmCisJbWFya19wYWNrZWRfcmVmcyAmJgorCWVjaG8gInZlcmlmeSByZWZzL2hlYWRzL2xvb3NlLXZlcmlmeSAkQSIgfCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluICYmCisJY2hlY2tfcGFja2VkX3JlZnNfbWFya2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlYXZlIHBhY2tlZC1yZWZzIHVudG91Y2hlZCBvbiBkZWxldGUgb2YgbG9vc2UnICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9sb29zZS1kZWxldGUgJEEgJiYKKwltYXJrX3BhY2tlZF9yZWZzICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9sb29zZS1kZWxldGUgJiYKKwljaGVja19wYWNrZWRfcmVmc19tYXJrZWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDEwLXJlZmxvZy5zaCBiL3QvdDE0MTAtcmVmbG9nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc2ZDliNzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDEwLXJlZmxvZy5zaApAQCAtMCwwICsxLDM5NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHBydW5lIGFuZCByZWZsb2cgZXhwaXJhdGlvbicKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19oYXZlICgpIHsKKwlnYWFoPSAmJgorCWZvciBOIGluICIkQCIKKwlkbworCQlldmFsICJvPVwkJE4iICYmIGdpdCBjYXQtZmlsZSAtdCAkbyB8fCB7CisJCQllY2hvIEdhYWggJE4KKwkJCWdhYWg9JE4KKwkJCWJyZWFrCisJCX0KKwlkb25lICYmCisJdGVzdCAteiAiJGdhYWgiCit9CisKK2NoZWNrX2ZzY2sgKCkgeworCWdpdCBmc2NrIC0tZnVsbCA+ZnNjay5vdXRwdXQKKwljYXNlICIkMSIgaW4KKwknJykKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGZzY2sub3V0cHV0IDs7CisJKikKKwkJdGVzdF9pMThuZ3JlcCAiJDEiIGZzY2sub3V0cHV0IDs7CisJZXNhYworfQorCitjb3JydXB0ICgpIHsKKwltdiAuZ2l0L29iamVjdHMvJCh0ZXN0X29pZF90b19wYXRoICQxKSAuZ2l0LyQxCit9CisKK3JlY292ZXIgKCkgeworCWFhPSQoZWNobyAkMSB8IGN1dCAtYyAxLTIpCisJbWtkaXIgLXAgLmdpdC9vYmplY3RzLyRhYQorCW12IC5naXQvJDEgLmdpdC9vYmplY3RzLyQodGVzdF9vaWRfdG9fcGF0aCAkMSkKK30KKworY2hlY2tfZG9udF9oYXZlICgpIHsKKwlnYWFoPSAmJgorCWZvciBOIGluICIkQCIKKwlkbworCQlldmFsICJvPVwkJE4iCisJCWdpdCBjYXQtZmlsZSAtdCAkbyAmJiB7CisJCQllY2hvIEdhYWggJE4KKwkJCWdhYWg9JE4KKwkJCWJyZWFrCisJCX0KKwlkb25lCisJdGVzdCAteiAiJGdhYWgiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3Rfb2lkX2luaXQgJiYKKwlta2RpciAtcCBBL0IgJiYKKwllY2hvIHJhdCA+QyAmJgorCWVjaG8gb3ggPkEvRCAmJgorCWVjaG8gdGlnZXIgPkEvQi9FICYmCisJZ2l0IGFkZCAuICYmCisKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSByYWJiaXQgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCUE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6QSkgJiYKKwlCPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOkEvQikgJiYKKwlDPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOkMpICYmCisJRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpBL0QpICYmCisJRT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpBL0IvRSkgJiYKKwljaGVja19mc2NrICYmCisKKwl0ZXN0X2NobW9kICt4IEMgJiYKKwlnaXQgYWRkIEMgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBkcmFnb24gJiYKKwlMPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWNoZWNrX2ZzY2sgJiYKKworCXJtIC1mIEMgQS9CL0UgJiYKKwllY2hvIHNuYWtlID5GICYmCisJZWNobyBob3JzZSA+QS9HICYmCisJZ2l0IGFkZCBGIEEvRyAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tIHNoZWVwICYmCisJRj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpGKSAmJgorCUc9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6QS9HKSAmJgorCUk9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6QSkgJiYKKwlKPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWNoZWNrX2ZzY2sgJiYKKworCXJtIC1mIEEvRyAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tIG1vbmtleSAmJgorCUs9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJY2hlY2tfZnNjayAmJgorCisJY2hlY2tfaGF2ZSBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCAmJgorCisJZ2l0IHBydW5lICYmCisKKwljaGVja19oYXZlIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMICYmCisKKwljaGVja19mc2NrICYmCisKKwlnaXQgcmVmbG9nIHJlZnMvaGVhZHMvbWFzdGVyID5vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHJld2luZCAnCisJdGVzdF90aWNrICYmIGdpdCByZXNldCAtLWhhcmQgSEVBRH4yICYmCisJdGVzdCAtZiBDICYmCisJdGVzdCAtZiBBL0IvRSAmJgorCSEgdGVzdCAtZiBGICYmCisJISB0ZXN0IC1mIEEvRyAmJgorCisJY2hlY2tfaGF2ZSBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCAmJgorCisJZ2l0IHBydW5lICYmCisKKwljaGVja19oYXZlIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMICYmCisKKwlnaXQgcmVmbG9nIHJlZnMvaGVhZHMvbWFzdGVyID5vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JydXB0IGFuZCBjaGVjaycgJworCisJY29ycnVwdCAkRiAmJgorCWNoZWNrX2ZzY2sgIm1pc3NpbmcgYmxvYiAkRiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZsb2cgZXhwaXJlIC0tZHJ5LXJ1biBzaG91bGQgbm90IHRvdWNoIHJlZmxvZycgJworCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1kcnktcnVuIFwKKwkJLS1leHBpcmU9JCgoJHRlc3RfdGljayAtIDEwMDAwKSkgXAorCQktLWV4cGlyZS11bnJlYWNoYWJsZT0kKCgkdGVzdF90aWNrIC0gMTAwMDApKSBcCisJCS0tc3RhbGUtZml4IFwKKwkJLS1hbGwgJiYKKworCWdpdCByZWZsb2cgcmVmcy9oZWFkcy9tYXN0ZXIgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgb3V0cHV0ICYmCisKKwljaGVja19mc2NrICJtaXNzaW5nIGJsb2IgJEYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBleHBpcmUnICcKKworCWdpdCByZWZsb2cgZXhwaXJlIC0tdmVyYm9zZSBcCisJCS0tZXhwaXJlPSQoKCR0ZXN0X3RpY2sgLSAxMDAwMCkpIFwKKwkJLS1leHBpcmUtdW5yZWFjaGFibGU9JCgoJHRlc3RfdGljayAtIDEwMDAwKSkgXAorCQktLXN0YWxlLWZpeCBcCisJCS0tYWxsICYmCisKKwlnaXQgcmVmbG9nIHJlZnMvaGVhZHMvbWFzdGVyID5vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIG91dHB1dCAmJgorCisJY2hlY2tfZnNjayAiZGFuZ2xpbmcgY29tbWl0ICRLIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSBhbmQgZnNjaycgJworCisJZ2l0IHBydW5lICYmCisJY2hlY2tfZnNjayAmJgorCisJY2hlY2tfaGF2ZSBBIEIgQyBEIEUgSCBMICYmCisJY2hlY2tfZG9udF9oYXZlIEYgRyBJIEogSworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY292ZXIgYW5kIGNoZWNrJyAnCisKKwlyZWNvdmVyICRGICYmCisJY2hlY2tfZnNjayAiZGFuZ2xpbmcgYmxvYiAkRiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGUnICcKKwllY2hvIDEgPiBDICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSByYXQgQyAmJgorCisJZWNobyAyID4gQyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gb3ggQyAmJgorCisJZWNobyAzID4gQyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGlnZXIgQyAmJgorCisJSEVBRF9lbnRyeV9jb3VudD0kKGdpdCByZWZsb2cgfCB3YyAtbCkgJiYKKwltYXN0ZXJfZW50cnlfY291bnQ9JChnaXQgcmVmbG9nIHNob3cgbWFzdGVyIHwgd2MgLWwpICYmCisKKwl0ZXN0ICRIRUFEX2VudHJ5X2NvdW50ID0gNSAmJgorCXRlc3QgJG1hc3Rlcl9lbnRyeV9jb3VudCA9IDUgJiYKKworCisJZ2l0IHJlZmxvZyBkZWxldGUgbWFzdGVyQHsxfSAmJgorCWdpdCByZWZsb2cgc2hvdyBtYXN0ZXIgPiBvdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAkKCgkbWFzdGVyX2VudHJ5X2NvdW50IC0gMSkpIG91dHB1dCAmJgorCXRlc3QgJEhFQURfZW50cnlfY291bnQgPSAkKGdpdCByZWZsb2cgfCB3YyAtbCkgJiYKKwkhIGdyZXAgb3ggPCBvdXRwdXQgJiYKKworCW1hc3Rlcl9lbnRyeV9jb3VudD0kKHdjIC1sIDwgb3V0cHV0KSAmJgorCisJZ2l0IHJlZmxvZyBkZWxldGUgSEVBREB7MX0gJiYKKwl0ZXN0ICQoKCRIRUFEX2VudHJ5X2NvdW50IC0xKSkgPSAkKGdpdCByZWZsb2cgfCB3YyAtbCkgJiYKKwl0ZXN0ICRtYXN0ZXJfZW50cnlfY291bnQgPSAkKGdpdCByZWZsb2cgc2hvdyBtYXN0ZXIgfCB3YyAtbCkgJiYKKworCUhFQURfZW50cnlfY291bnQ9JChnaXQgcmVmbG9nIHwgd2MgLWwpICYmCisKKwlnaXQgcmVmbG9nIGRlbGV0ZSBtYXN0ZXJAezA3LjA0LjIwMDUuMTU6MTU6MDAuLTA3MDB9ICYmCisJZ2l0IHJlZmxvZyBzaG93IG1hc3RlciA+IG91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9ICQoKCRtYXN0ZXJfZW50cnlfY291bnQgLSAxKSkgb3V0cHV0ICYmCisJISBncmVwIGRyYWdvbiA8IG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld2luZDInICcKKworCXRlc3RfdGljayAmJiBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MiAmJgorCWdpdCByZWZsb2cgcmVmcy9oZWFkcy9tYXN0ZXIgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZXhwaXJlPW5ldmVyJyAnCisKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLXZlcmJvc2UgXAorCQktLWV4cGlyZT1uZXZlciBcCisJCS0tZXhwaXJlLXVucmVhY2hhYmxlPW5ldmVyIFwKKwkJLS1hbGwgJiYKKwlnaXQgcmVmbG9nIHJlZnMvaGVhZHMvbWFzdGVyID5vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYy5yZWZsb2dleHBpcmU9bmV2ZXInICcKKwl0ZXN0X2NvbmZpZyBnYy5yZWZsb2dleHBpcmUgbmV2ZXIgJiYKKwl0ZXN0X2NvbmZpZyBnYy5yZWZsb2dleHBpcmV1bnJlYWNoYWJsZSBuZXZlciAmJgorCisJZ2l0IHJlZmxvZyBleHBpcmUgLS12ZXJib3NlIC0tYWxsID5vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA5IG91dHB1dCAmJgorCisJZ2l0IHJlZmxvZyByZWZzL2hlYWRzL21hc3RlciA+b3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gNCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MucmVmbG9nZXhwaXJlPWZhbHNlJyAnCisJdGVzdF9jb25maWcgZ2MucmVmbG9nZXhwaXJlIGZhbHNlICYmCisJdGVzdF9jb25maWcgZ2MucmVmbG9nZXhwaXJldW5yZWFjaGFibGUgZmFsc2UgJiYKKworCWdpdCByZWZsb2cgZXhwaXJlIC0tdmVyYm9zZSAtLWFsbCAmJgorCWdpdCByZWZsb2cgcmVmcy9oZWFkcy9tYXN0ZXIgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlZmxvZyBleHBpcmUgdW5rbm93biByZWZlcmVuY2UnICcKKwl0ZXN0X2NvbmZpZyBnYy5yZWZsb2dleHBpcmUgbmV2ZXIgJiYKKwl0ZXN0X2NvbmZpZyBnYy5yZWZsb2dleHBpcmV1bnJlYWNoYWJsZSBuZXZlciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlZmxvZyBleHBpcmUgbWFzdGVyQHsxMjN9IDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAicG9pbnRzIG5vd2hlcmUiIHN0ZGVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWZsb2cgZXhwaXJlIGRvZXMtbm90LWV4aXN0IDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAicG9pbnRzIG5vd2hlcmUiIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBzaG91bGQgbm90IGRlbGV0ZSBsb2cgZm9yIHBhY2tlZCByZWYnICcKKwl0ZXN0ICQoZ2l0IHJlZmxvZyBtYXN0ZXIgfCB3YyAtbCkgPSA0ICYmCisJZ2l0IGJyYW5jaCBmb28gJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IGNoZWNrb3V0IGZvbyAmJgorCXRlc3QgJChnaXQgcmVmbG9nIG1hc3RlciB8IHdjIC1sKSA9IDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhbGUgZGlycyBkbyBub3QgY2F1c2UgZC9mIGNvbmZsaWN0cyAocmVmbG9ncyBvbiknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLWQgb25lIHx8IGdpdCBicmFuY2ggLWQgb25lL3R3byIgJiYKKworCWdpdCBicmFuY2ggb25lL3R3byBtYXN0ZXIgJiYKKwllY2hvICJvbmUvdHdvQHswfSBicmFuY2g6IENyZWF0ZWQgZnJvbSBtYXN0ZXIiID5leHBlY3QgJiYKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJWdzIiBvbmUvdHdvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGJyYW5jaCAtZCBvbmUvdHdvICYmCisKKwkjIG5vdyBsb2dzL3JlZnMvaGVhZHMvb25lIGlzIGEgc3RhbGUgZGlyZWN0b3J5LCBidXQKKwkjIHdlIHNob3VsZCBtb3ZlIGl0IG91dCBvZiB0aGUgd2F5IHRvIGNyZWF0ZSAib25lIiByZWZsb2cKKwlnaXQgYnJhbmNoIG9uZSBtYXN0ZXIgJiYKKwllY2hvICJvbmVAezB9IGJyYW5jaDogQ3JlYXRlZCBmcm9tIG1hc3RlciIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9IiVnZCAlZ3MiIG9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFsZSBkaXJzIGRvIG5vdCBjYXVzZSBkL2YgY29uZmxpY3RzIChyZWZsb2dzIG9mZiknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLWQgb25lIHx8IGdpdCBicmFuY2ggLWQgb25lL3R3byIgJiYKKworCWdpdCBicmFuY2ggb25lL3R3byBtYXN0ZXIgJiYKKwllY2hvICJvbmUvdHdvQHswfSBicmFuY2g6IENyZWF0ZWQgZnJvbSBtYXN0ZXIiID5leHBlY3QgJiYKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJWdzIiBvbmUvdHdvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGJyYW5jaCAtZCBvbmUvdHdvICYmCisKKwkjIHNhbWUgYXMgYmVmb3JlLCBidXQgd2Ugb25seSBjcmVhdGUgYSByZWZsb2cgZm9yICJvbmUiIGlmCisJIyBpdCBhbHJlYWR5IGV4aXN0cywgd2hpY2ggaXQgZG9lcyBub3QKKwlnaXQgLWMgY29yZS5sb2dhbGxyZWZ1cGRhdGVzPWZhbHNlIGJyYW5jaCBvbmUgbWFzdGVyICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWdkICVncyIgb25lID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKKyMgVHJpZ2dlcmluZyB0aGUgYnVnIGRldGVjdGVkIGJ5IHRoaXMgdGVzdCByZXF1aXJlcyBhIG5ld2xpbmUgdG8gZmFsbAorIyBleGFjdGx5IEJVRlNJWi0xIGJ5dGVzIGZyb20gdGhlIGVuZCBvZiB0aGUgZmlsZS4gV2UgZG9uJ3Qga25vdworIyB3aGF0IHRoYXQgdmFsdWUgaXMsIHNpbmNlIGl0J3MgcGxhdGZvcm0gZGVwZW5kZW50LiBIb3dldmVyLCBpZgorIyB3ZSBjaG9vc2Ugc29tZSB2YWx1ZSBOLCB3ZSBhbHNvIGNhdGNoIGFueSBEIHdoaWNoIGRpdmlkZXMgTiBldmVubHkKKyMgKHNpbmNlIHdlIHdpbGwgcmVhZCBiYWNrd2FyZHMgaW4gY2h1bmtzIG9mIEQpLiBTbyB3ZSBjaG9vc2UgOEssCisjIHdoaWNoIGNhdGNoZXMgZ2xpYmMgKHdpdGggYW4gOEsgQlVGU0laKSBhbmQgKkJTRCAoMUspLgorIworIyBFYWNoIGxpbmUgaXMgMTE0IGNoYXJhY3RlcnMsIHNvIHdlIG5lZWQgNzUgdG8gc3RpbGwgaGF2ZSBhIGZldyBiZWZvcmUgdGhlCisjIGxhc3QgOEsuIFRoZSA4OS1jaGFyYWN0ZXIgcGFkZGluZyBvbiB0aGUgZmluYWwgZW50cnkgbGluZXMgdXAgb3VyCisjIG5ld2xpbmUgZXhhY3RseS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0hBMSAncGFyc2luZyByZXZlcnNlIHJlZmxvZ3MgYXQgQlVGU0laIGJvdW5kYXJpZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgcmVmbG9nc2tpcCAmJgorCXpmPSQodGVzdF9vaWQgemVyb18yKSAmJgorCWlkZW50PSJhYmMgPHh5ej4gMDAwMDAwMDAwMSArMDAwMCIgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgNzUpOyBkbworCQlwcmludGYgIiR6ZiUwMmQgJHpmJTAyZCAlc1x0IiAkaSAkKCgkaSsxKSkgIiRpZGVudCIgJiYKKwkJaWYgdGVzdCAkaSA9IDc1OyB0aGVuCisJCQlmb3IgaiBpbiAkKHRlc3Rfc2VxIDEgODkpOyBkbworCQkJCXByaW50ZiBYCisJCQlkb25lCisJCWVsc2UKKwkJCXByaW50ZiBYCisJCWZpICYmCisJCXByaW50ZiAiXG4iCisJZG9uZSA+LmdpdC9sb2dzL3JlZnMvaGVhZHMvcmVmbG9nc2tpcCAmJgorCWdpdCByZXYtcGFyc2UgcmVmbG9nc2tpcEB7NzN9ID5hY3R1YWwgJiYKKwllY2hvICR7emZ9MDMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gc2VnZmF1bHRzIGZvciByZWZsb2cgY29udGFpbmluZyBub24tY29tbWl0IHNoYTFzJyAnCisJZ2l0IHVwZGF0ZS1yZWYgLS1jcmVhdGUtcmVmbG9nIC1tICJDcmVhdGluZyByZWYiIFwKKwkJcmVmcy90ZXN0cy90cmVlLWluLXJlZmxvZyBIRUFEICYmCisJZ2l0IHVwZGF0ZS1yZWYgLW0gIkZvcmNpbmcgdHJlZSIgcmVmcy90ZXN0cy90cmVlLWluLXJlZmxvZyBIRUFEXnt0cmVlfSAmJgorCWdpdCB1cGRhdGUtcmVmIC1tICJSZXN0b3JpbmcgdG8gY29tbWl0IiByZWZzL3Rlc3RzL3RyZWUtaW4tcmVmbG9nIEhFQUQgJiYKKwlnaXQgcmVmbG9nIHJlZnMvdGVzdHMvdHJlZS1pbi1yZWZsb2cKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncmVmbG9nIHdpdGggbm9uLWNvbW1pdCBlbnRyaWVzIGRpc3BsYXlzIGFsbCBlbnRyaWVzJyAnCisJZ2l0IHJlZmxvZyByZWZzL3Rlc3RzL3RyZWUtaW4tcmVmbG9nID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZsb2cgZXhwaXJlIG9wZXJhdGVzIG9uIHN5bXJlZiBub3QgcmVmZXJyZW50JyAnCisJZ2l0IGJyYW5jaCAtLWNyZWF0ZS1yZWZsb2cgdGhlX3N5bXJlZiAmJgorCWdpdCBicmFuY2ggLS1jcmVhdGUtcmVmbG9nIHJlZmVycmVudCAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZmVycmVudCBIRUFEICYmCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL3RoZV9zeW1yZWYgcmVmcy9oZWFkcy9yZWZlcnJlbnQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9yZWZlcnJlbnQubG9jayIgJiYKKwl0b3VjaCAuZ2l0L3JlZnMvaGVhZHMvcmVmZXJyZW50LmxvY2sgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1hbGwgdGhlX3N5bXJlZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb250aW51ZSB3YWxraW5nIHBhc3Qgcm9vdCBjb21taXRzJyAnCisJZ2l0IGluaXQgb3JwaGFuYWdlICYmCisJKAorCQljZCBvcnBoYW5hZ2UgJiYKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlIRUFEQHswfSBjb21taXQgKGluaXRpYWwpOiBvcnBoYW4yLTEKKwkJSEVBREB7MX0gY29tbWl0OiBvcnBoYW4xLTIKKwkJSEVBREB7Mn0gY29tbWl0IChpbml0aWFsKTogb3JwaGFuMS0xCisJCUhFQURAezN9IGNvbW1pdCAoaW5pdGlhbCk6IGluaXRpYWwKKwkJRU9GCisJCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwkJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG9ycGhhbjEgJiYKKwkJdGVzdF9jb21taXQgb3JwaGFuMS0xICYmCisJCXRlc3RfY29tbWl0IG9ycGhhbjEtMiAmJgorCQlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gb3JwaGFuMiAmJgorCQl0ZXN0X2NvbW1pdCBvcnBoYW4yLTEgJiYKKwkJZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWdkICVncyIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBpcmUgd2l0aCBtdWx0aXBsZSB3b3JrdHJlZXMnICcKKwlnaXQgaW5pdCBtYWluLXd0ICYmCisJKAorCQljZCBtYWluLXd0ICYmCisJCXRlc3RfdGljayAmJgorCQl0ZXN0X2NvbW1pdCBmb28gJiYKKwkJZ2l0ICB3b3JrdHJlZSBhZGQgbGluay13dCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJdGVzdF9jb21taXQgLUMgbGluay13dCBmb29iYXIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCByZWZsb2cgZXhwaXJlIC0tdmVyYm9zZSAtLWFsbCAtLWV4cGlyZT0kdGVzdF90aWNrICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSAuZ2l0L3dvcmt0cmVlcy9saW5rLXd0L2xvZ3MvSEVBRAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDExLXJlZmxvZy1zaG93LnNoIGIvdC90MTQxMS1yZWZsb2ctc2hvdy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ODVkYWYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTQxMS1yZWZsb2ctc2hvdy5zaApAQCAtMCwwICsxLDE3NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcmVmbG9nIGRpc3BsYXkgcm91dGluZXMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG9uZQorJworCitjb21taXQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1JlZmxvZzogSEVBREB7MH0gKEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4pCitSZWZsb2cgbWVzc2FnZTogY29tbWl0IChpbml0aWFsKTogb25lCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtZyBzaG93cyByZWZsb2cgaGVhZGVycycgJworCWdpdCBsb2cgLWcgLTEgPnRtcCAmJgorCWdyZXAgXlJlZmxvZyA8dG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCiskY29tbWl0IEhFQURAezB9OiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25lbGluZSByZWZsb2cgZm9ybWF0JyAnCisJZ2l0IGxvZyAtZyAtMSAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmbG9nIGRlZmF1bHQgZm9ybWF0JyAnCisJZ2l0IHJlZmxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorY29tbWl0ICRjb21taXQKK1JlZmxvZzogSEVBREB7MH0gKEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4pCitSZWZsb2cgbWVzc2FnZTogY29tbWl0IChpbml0aWFsKTogb25lCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisKKyAgICBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGUgcmVmbG9nIGRlZmF1bHQgZm9ybWF0JyAnCisJZ2l0IHJlZmxvZyAtLWZvcm1hdD1zaG9ydCAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitSZWZsb2c6IEhFQURAe1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKK1JlZmxvZyBtZXNzYWdlOiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgQHtub3d9IHN5bnRheCBzaG93cyByZWZsb2cgZGF0ZSAobXVsdGlsaW5lKScgJworCWdpdCBsb2cgLWcgLTEgSEVBREB7bm93fSA+dG1wICYmCisJZ3JlcCBeUmVmbG9nIDx0bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyRjb21taXQgSEVBREB7VGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDB9OiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgQHtub3d9IHN5bnRheCBzaG93cyByZWZsb2cgZGF0ZSAob25lbGluZSknICcKKwlnaXQgbG9nIC1nIC0xIC0tb25lbGluZSBIRUFEQHtub3d9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK0hFQURAe1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwfQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyBAe25vd30gc3ludGF4IHNob3dzIHJlZmxvZyBkYXRlIChmb3JtYXQ9JWdkKScgJworCWdpdCBsb2cgLWcgLTEgLS1mb3JtYXQ9JWdkIEhFQURAe25vd30gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworUmVmbG9nOiBIRUFEQHtUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMH0gKEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4pCitSZWZsb2cgbWVzc2FnZTogY29tbWl0IChpbml0aWFsKTogb25lCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIC0tZGF0ZT0gc2hvd3MgcmVmbG9nIGRhdGUgKG11bHRpbGluZSknICcKKwlnaXQgbG9nIC1nIC0xIC0tZGF0ZT1kZWZhdWx0ID50bXAgJiYKKwlncmVwIF5SZWZsb2cgPHRtcCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorJGNvbW1pdCBIRUFEQHtUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMH06IGNvbW1pdCAoaW5pdGlhbCk6IG9uZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAtLWRhdGU9IHNob3dzIHJlZmxvZyBkYXRlIChvbmVsaW5lKScgJworCWdpdCBsb2cgLWcgLTEgLS1vbmVsaW5lIC0tZGF0ZT1kZWZhdWx0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK0hFQURAezExMTI5MTE5OTMgLTA3MDB9CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIC0tZGF0ZT0gc2hvd3MgcmVmbG9nIGRhdGUgKGZvcm1hdD0lZ2QpJyAnCisJZ2l0IGxvZyAtZyAtMSAtLWZvcm1hdD0lZ2QgLS1kYXRlPXJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitSZWZsb2c6IEhFQURAezB9IChDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+KQorUmVmbG9nIG1lc3NhZ2U6IGNvbW1pdCAoaW5pdGlhbCk6IG9uZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cuZGF0ZSBkb2VzIG5vdCBpbnZva2UgIi0tZGF0ZSIgbWFnaWMgKG11bHRpbGluZSknICcKKwl0ZXN0X2NvbmZpZyBsb2cuZGF0ZSByYXcgJiYKKwlnaXQgbG9nIC1nIC0xID50bXAgJiYKKwlncmVwIF5SZWZsb2cgPHRtcCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorJGNvbW1pdCBIRUFEQHswfTogY29tbWl0IChpbml0aWFsKTogb25lCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZy5kYXRlIGRvZXMgbm90IGludm9rZSAiLS1kYXRlIiBtYWdpYyAob25lbGluZSknICcKKwl0ZXN0X2NvbmZpZyBsb2cuZGF0ZSByYXcgJiYKKwlnaXQgbG9nIC1nIC0xIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitIRUFEQHswfQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cuZGF0ZSBkb2VzIG5vdCBpbnZva2UgIi0tZGF0ZSIgbWFnaWMgKGZvcm1hdD0lZ2QpJyAnCisJdGVzdF9jb25maWcgbG9nLmRhdGUgcmF3ICYmCisJZ2l0IGxvZyAtZyAtMSAtLWZvcm1hdD0lZ2QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworSEVBREB7MH0KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kYXRlIG1hZ2ljIGRvZXMgbm90IG92ZXJyaWRlIGV4cGxpY2l0IEB7MH0gc3ludGF4JyAnCisJZ2l0IGxvZyAtZyAtMSAtLWZvcm1hdD0lZ2QgLS1kYXRlPXJhdyBIRUFEQHswfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSByZWZsb2cgZmlsZScgJworCWdpdCBicmFuY2ggZW1wdHkgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1hbGwgcmVmcy9oZWFkcy9lbXB0eSAmJgorCisJZ2l0IGxvZyAtZyBlbXB0eSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCisjIFRoaXMgZ3VhcmRzIGFnYWluc3QgdGhlIGFsdGVybmF0aXZlIG9mIHNob3dpbmcgdGhlIGRpZmZzIHZzLiB0aGUKKyMgcmVmbG9nIGFuY2VzdG9yLiAgVGhlIHJlZmxvZyB1c2VkIGlzIGRlc2lnbmVkIHRvIGxpc3QgdGhlIGNvbW1pdHMKKyMgbW9yZSB0aGFuIG9uY2UsIHNvIGFzIHRvIGV4ZXJjaXNlIHRoZSBjb3JyZXNwb25kaW5nIGxvZ2ljLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtZyAtcCBzaG93cyBkaWZmcyB2cy4gcGFyZW50cycgJworCXRlc3RfY29tbWl0IHR3byAmJgorCWdpdCBicmFuY2ggZmxpcGZsb3AgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2ZsaXBmbG9wIC1tIGZsaXAxIEhFQUReICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9mbGlwZmxvcCAtbSBmbG9wMSBIRUFEICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9mbGlwZmxvcCAtbSBmbGlwMiBIRUFEXiAmJgorCWdpdCBsb2cgLWcgLXAgZmxpcGZsb3AgPnJlZmxvZyAmJgorCWdyZXAgLXYgXlJlZmxvZyByZWZsb2cgPmFjdHVhbCAmJgorCWdpdCBsb2cgLTEgLXAgSEVBRF4gPmxvZy5vbmUgJiYKKwlnaXQgbG9nIC0xIC1wIEhFQUQgPmxvZy50d28gJiYKKwkoCisJCWNhdCBsb2cub25lICYmIGVjaG8gJiYKKwkJY2F0IGxvZy50d28gJiYgZWNobyAmJgorCQljYXQgbG9nLm9uZSAmJiBlY2hvICYmCisJCWNhdCBsb2cudHdvCisJKSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZsb2cgZXhpc3RzIHdvcmtzJyAnCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkhIGdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvbm9uZXhpc3RlbnQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDEyLXJlZmxvZy1sb29wLnNoIGIvdC90MTQxMi1yZWZsb2ctbG9vcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYWNkODk1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTQxMi1yZWZsb2ctbG9vcC5zaApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVmbG9nIHdhbGsgc2hvd3MgcmVwZWF0ZWQgY29tbWl0cyBhZ2FpbicKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb21taXRzJyAnCisJdGVzdF90aWNrICYmCisJZWNobyBjb250ZW50ID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCWdpdCB0YWcgb25lICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwlnaXQgdGFnIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZWZsb2cgd2l0aCBhbHRlcm5hdGluZyBjb21taXRzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRvcGljICYmCisJZ2l0IHJlc2V0IG9uZSAmJgorCWdpdCByZXNldCB0d28gJiYKKwlnaXQgcmVzZXQgb25lICYmCisJZ2l0IHJlc2V0IHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZsb2cgc2hvd3MgYWxsIGVudHJpZXMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCXRvcGljQHswfSByZXNldDogbW92aW5nIHRvIHR3bworCQl0b3BpY0B7MX0gcmVzZXQ6IG1vdmluZyB0byBvbmUKKwkJdG9waWNAezJ9IHJlc2V0OiBtb3ZpbmcgdG8gdHdvCisJCXRvcGljQHszfSByZXNldDogbW92aW5nIHRvIG9uZQorCQl0b3BpY0B7NH0gYnJhbmNoOiBDcmVhdGVkIGZyb20gSEVBRAorCUVPRgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9IiVnZCAlZ3MiIHRvcGljID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQxMy1yZWZsb2ctZGV0YWNoLnNoIGIvdC90MTQxMy1yZWZsb2ctZGV0YWNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3MzA2MDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDEzLXJlZmxvZy1kZXRhY2guc2gKQEAgLTAsMCArMSw3MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcmVmbG9nIGludGVyYWN0aW9uIHdpdGggZGV0YWNoZWQgSEVBRCcKKy4gLi90ZXN0LWxpYi5zaAorCityZXNldF9zdGF0ZSAoKSB7CisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWNwIHNhdmVkX3JlZmxvZyAuZ2l0L2xvZ3MvSEVBRAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBzZWNvbmQgJiYKKwljYXQgLmdpdC9sb2dzL0hFQUQgPnNhdmVkX3JlZmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGJhc2VsaW5lICcKKwlyZXNldF9zdGF0ZSAmJgorCWdpdCByZXYtcGFyc2UgbWFzdGVyIG1hc3Rlcl4gPmV4cGVjdCAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9JUggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIHRvIGJyYW5jaCcgJworCXJlc2V0X3N0YXRlICYmCisJZ2l0IHJldi1wYXJzZSBzaWRlIG1hc3RlciBtYXN0ZXJeID5leHBlY3QgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9JUggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0YWNoIHRvIG90aGVyJyAnCisJcmVzZXRfc3RhdGUgJiYKKwlnaXQgcmV2LXBhcnNlIG1hc3RlciBzaWRlIG1hc3RlciBtYXN0ZXJeID5leHBlY3QgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9JUggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0YWNoIHRvIHNlbGYnICcKKwlyZXNldF9zdGF0ZSAmJgorCWdpdCByZXYtcGFyc2UgbWFzdGVyIG1hc3RlciBtYXN0ZXJeID5leHBlY3QgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSVIID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dGFjaCB0byBzZWxmJyAnCisJcmVzZXRfc3RhdGUgJiYKKwlnaXQgcmV2LXBhcnNlIG1hc3RlciBtYXN0ZXIgbWFzdGVyIG1hc3Rlcl4gPmV4cGVjdCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSVIID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dGFjaCB0byBvdGhlcicgJworCXJlc2V0X3N0YXRlICYmCisJZ2l0IHJldi1wYXJzZSBzaWRlIG1hc3RlciBtYXN0ZXIgbWFzdGVyXiA+ZXhwZWN0ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSVIID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQxNC1yZWZsb2ctd2Fsay5zaCBiL3QvdDE0MTQtcmVmbG9nLXdhbGsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTE4MWE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MTQtcmVmbG9nLXdhbGsuc2gKQEAgLTAsMCArMSwxMzQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd2YXJpb3VzIHRlc3RzIG9mIHJlZmxvZyB3YWxrIChsb2cgLWcpIGJlaGF2aW9yJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBzb21lIHJlZmxvZyBlbnRyaWVzJyAnCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBtYXN0ZXIgJiYKKwllY2hvIGV2aWwtbWVyZ2UtY29udGVudCA+Pm9uZS50ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLW5vLWVkaXQgLWEKKycKKworZG9fd2FsayAoKSB7CisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWdkICVncyIgIiRAIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZXhwZWN0ZWQgcmVmbG9nJyAnCisJY2F0ID5leHBlY3QuYWxsIDw8LUVPRgorCUhFQURAezB9IGNvbW1pdCAobWVyZ2UpOiBNZXJnZSBicmFuY2ggJHtTUX1tYXN0ZXIke1NRfSBpbnRvIHNpZGUKKwlIRUFEQHsxfSBjb21taXQ6IHRocmVlCisJSEVBREB7Mn0gY2hlY2tvdXQ6IG1vdmluZyBmcm9tIG1hc3RlciB0byBzaWRlCisJSEVBREB7M30gY29tbWl0OiB0d28KKwlIRUFEQHs0fSBjb21taXQgKGluaXRpYWwpOiBvbmUKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmbG9nIHdhbGsgc2hvd3MgZXhwZWN0ZWQgbG9ncycgJworCWRvX3dhbGsgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5hbGwgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBjYW4gbGltaXQgd2l0aCAtLW5vLW1lcmdlcycgJworCWdyZXAgLXYgbWVyZ2UgZXhwZWN0LmFsbCA+ZXhwZWN0ICYmCisJZG9fd2FsayAtLW5vLW1lcmdlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZsb2cgY2FuIGxpbWl0IHdpdGggcGF0aHNwZWNzJyAnCisJZ3JlcCB0d28gZXhwZWN0LmFsbCA+ZXhwZWN0ICYmCisJZG9fd2FsayAtLSB0d28udCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRoc3BlYyBsaW1pdGluZyBoYW5kbGVzIG1lcmdlcycgJworCSMgd2UgcGljayB1cDoKKwkjICAgLSB0aGUgaW5pdGlhbCBjb21taXQgb2Ygb25lCisJIyAgIC0gdGhlIGNoZWNrb3V0IGJhY2sgdG8gY29tbWl0IG9uZQorCSMgICAtIHRoZSBldmlsIG1lcmdlIHdoaWNoIHRvdWNoZWQgb25lCisJc2VkIC1uICIxcDszcDs1cCIgZXhwZWN0LmFsbCA+ZXhwZWN0ICYmCisJZG9fd2FsayAtLSBvbmUudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhcmVudHMgc2hvd3MgdHJ1ZSBwYXJlbnRzJyAnCisJIyBjb252ZXJ0IG5ld2xpbmVzIHRvIHNwYWNlcworCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUQgSEVBRF4xIEhFQUReMikgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtZyAtLXBhcmVudHMgLTEgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3YWxraW5nIG11bHRpcGxlIHJlZmxvZ3Mgc2hvd3MgYWxsJyAnCisJIyBXZSBleHBlY3QgdG8gc2VlIGFsbCBlbnRyaWVzIGZvciBhbGwgcmVmbG9ncywgYnV0IGludGVybGVhdmVkIGJ5CisJIyBkYXRlLCB3aXRoIG9yZGVyIG9uIHRoZSBjb21tYW5kIGxpbmUgYnJlYWtpbmcgdGllcy4gV2UKKwkjIGNhbiB1c2UgInNvcnQiIG9uIHRoZSBzZXBhcmF0ZSBsaXN0cyB0byBnZW5lcmF0ZSB0aGlzLAorCSMgYnV0IG5vdGUgdHdvIHRyaWNrczoKKwkjCisJIyAgIDEuIFdlIHVzZSAieyIgYXMgdGhlIGRlbGltaXRlciwgd2hpY2ggbGV0cyB1cyBza2lwIHRvIHRoZSByZWZsb2cKKwkjICAgICAgZGF0ZSBzcGVjaWZpZXIgYXMgb3VyIHNlY29uZCBmaWVsZCwgYW5kIHRoZW4gb3VyICItbiIgbnVtZXJpYworCSMgICAgICBzb3J0IGlnbm9yZXMgdGhlIGJpdHMgYWZ0ZXIgdGhlIHRpbWVzdGFtcC4KKwkjCisJIyAgIDIuIFBPU0lYIGxlYXZlcyB1bmRlZmluZWQgd2hldGhlciB0aGlzIGlzIGEgc3RhYmxlIHNvcnQgb3Igbm90LiBTbworCSMgICAgICB3ZSB1c2UgIi1rIDEiIHRvIGVuc3VyZSB0aGF0IHdlIHNlZSBIRUFEIGJlZm9yZSBtYXN0ZXIgYmVmb3JlCisJIyAgICAgIHNpZGUgd2hlbiBicmVha2luZyB0aWVzLgorCXsKKwkJZG9fd2FsayAtLWRhdGU9dW5peCBIRUFEICYmCisJCWRvX3dhbGsgLS1kYXRlPXVuaXggc2lkZSAmJgorCQlkb193YWxrIC0tZGF0ZT11bml4IG1hc3RlcgorCX0gPmV4cGVjdC5yYXcgJiYKKwlzb3J0IC10ICJ7IiAtayAybnIgLWsgMSA8ZXhwZWN0LnJhdyA+ZXhwZWN0ICYmCisJZG9fd2FsayAtLWRhdGU9dW5peCBIRUFEIG1hc3RlciBzaWRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RhdGUtbGltaXRpbmcgZG9lcyBub3QgaW50ZXJmZXJlIHdpdGggb3RoZXIgbG9ncycgJworCWRvX3dhbGsgSEVBREB7MTk3OS0wMS0wMX0gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmFsbCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWluL21heCBhZ2UgdXNlcyBlbnRyeSBkYXRlIHRvIGxpbWl0JyAnCisJIyBGbGlwIGJldHdlZW4gY29tbWl0cyBvbmUgYW5kIHR3byBzbyBlYWNoIHJlZiB1cGRhdGUgYWN0dWFsbHkKKwkjIGRvZXMgc29tZXRoaW5nIChhbmQgZG9lcyBub3QgZ2V0IG9wdGltaXplZCBvdXQpLiBXZSBrbm93CisJIyB0aGF0IHRoZSB0aW1lc3RhbXBzIG9mIHRob3NlIGNvbW1pdHMgd2lsbCBiZSBiZWZvcmUgb3VyICJtaW4iLgorCisJZ2l0IHVwZGF0ZS1yZWYgLW0gYmVmb3JlIHJlZnMvaGVhZHMvbWlubWF4IG9uZSAmJgorCisJdGVzdF90aWNrICYmCisJbWluPSR0ZXN0X3RpY2sgJiYKKwlnaXQgdXBkYXRlLXJlZiAtbSBtaW4gcmVmcy9oZWFkcy9taW5tYXggdHdvICYmCisKKwl0ZXN0X3RpY2sgJiYKKwltYXg9JHRlc3RfdGljayAmJgorCWdpdCB1cGRhdGUtcmVmIC1tIG1heCByZWZzL2hlYWRzL21pbm1heCBvbmUgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCB1cGRhdGUtcmVmIC1tIGFmdGVyIHJlZnMvaGVhZHMvbWlubWF4IHR3byAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCW1heAorCW1pbgorCUVPRgorCWdpdCBsb2cgLWcgLS1zaW5jZT0kbWluIC0tdW50aWw9JG1heCAtLWZvcm1hdD0lZ3MgbWlubWF4ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dhbGsgcHJlZmVycyByZWZsb2cgdG8gcmVmIHRpcCcgJworCWhlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJb25lPSQoZ2l0IHJldi1wYXJzZSBvbmUpICYmCisJaWRlbnQ9IiRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFIiAmJgorCWVjaG8gIiRoZWFkICRvbmUgJGlkZW50CWJyb2tlbiByZWZsb2cgZW50cnkiID4+LmdpdC9sb2dzL0hFQUQgJiYKKworCWVjaG8gJG9uZSA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0lSCAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtZyBjb21wbGFpbnMgd2hlbiB0aGVyZSBhcmUgbm8gcmVmbG9ncycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCAtZworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MTUtd29ya3RyZWUtcmVmcy5zaCBiL3QvdDE0MTUtd29ya3RyZWUtcmVmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYjJjNzU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTQxNS13b3JrdHJlZS1yZWZzLnNoCkBAIC0wLDAgKzEsMTE0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGVyLXdvcmt0cmVlIHJlZnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCB3dDEgJiYKKwl0ZXN0X2NvbW1pdCB3dDIgJiYKKwlnaXQgd29ya3RyZWUgYWRkIHd0MSB3dDEgJiYKKwlnaXQgd29ya3RyZWUgYWRkIHd0MiB3dDIgJiYKKwlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvd29ya3RyZWUvZm9vIEhFQUQgJiYKKwlnaXQgLUMgd3QxIHVwZGF0ZS1yZWYgcmVmcy93b3JrdHJlZS9mb28gSEVBRCAmJgorCWdpdCAtQyB3dDIgdXBkYXRlLXJlZiByZWZzL3dvcmt0cmVlL2ZvbyBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnMvd29ya3RyZWUgbXVzdCBub3QgYmUgcGFja2VkJyAnCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy90YWdzL3d0MSAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy93b3JrdHJlZS9mb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3dvcmt0cmVlcy93dDEvcmVmcy93b3JrdHJlZS9mb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3dvcmt0cmVlcy93dDIvcmVmcy93b3JrdHJlZS9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcy93b3JrdHJlZSBhcmUgcGVyLXdvcmt0cmVlJyAnCisJdGVzdF9jbXBfcmV2IHdvcmt0cmVlL2ZvbyBpbml0aWFsICYmCisJKCBjZCB3dDEgJiYgdGVzdF9jbXBfcmV2IHdvcmt0cmVlL2ZvbyB3dDEgKSAmJgorCSggY2Qgd3QyICYmIHRlc3RfY21wX3JldiB3b3JrdHJlZS9mb28gd3QyICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzb2x2ZSBtYWluLXdvcmt0cmVlL0hFQUQnICcKKwl0ZXN0X2NtcF9yZXYgbWFpbi13b3JrdHJlZS9IRUFEIGluaXRpYWwgJiYKKwkoIGNkIHd0MSAmJiB0ZXN0X2NtcF9yZXYgbWFpbi13b3JrdHJlZS9IRUFEIGluaXRpYWwgKSAmJgorCSggY2Qgd3QyICYmIHRlc3RfY21wX3JldiBtYWluLXdvcmt0cmVlL0hFQUQgaW5pdGlhbCApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtYmlndW91cyBtYWluLXdvcmt0cmVlL0hFQUQnICcKKwlta2RpciAtcCAuZ2l0L3JlZnMvaGVhZHMvbWFpbi13b3JrdHJlZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtZiAuZ2l0L3JlZnMvaGVhZHMvbWFpbi13b3JrdHJlZS9IRUFEICYmCisJY3AgLmdpdC9IRUFEIC5naXQvcmVmcy9oZWFkcy9tYWluLXdvcmt0cmVlL0hFQUQgJiYKKwlnaXQgcmV2LXBhcnNlIG1haW4td29ya3RyZWUvSEVBRCAyPndhcm4gJiYKKwlncmVwICJtYWluLXdvcmt0cmVlL0hFQUQuKmFtYmlndW91cyIgd2FybgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNvbHZlIHdvcmt0cmVlcy94eC9IRUFEJyAnCisJdGVzdF9jbXBfcmV2IHdvcmt0cmVlcy93dDEvSEVBRCB3dDEgJiYKKwkoIGNkIHd0MSAmJiB0ZXN0X2NtcF9yZXYgd29ya3RyZWVzL3d0MS9IRUFEIHd0MSApICYmCisJKCBjZCB3dDIgJiYgdGVzdF9jbXBfcmV2IHdvcmt0cmVlcy93dDEvSEVBRCB3dDEgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWJpZ3VvdXMgd29ya3RyZWVzL3h4L0hFQUQnICcKKwlta2RpciAtcCAuZ2l0L3JlZnMvaGVhZHMvd29ya3RyZWVzL3d0MSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtZiAuZ2l0L3JlZnMvaGVhZHMvd29ya3RyZWVzL3d0MS9IRUFEICYmCisJY3AgLmdpdC9IRUFEIC5naXQvcmVmcy9oZWFkcy93b3JrdHJlZXMvd3QxL0hFQUQgJiYKKwlnaXQgcmV2LXBhcnNlIHdvcmt0cmVlcy93dDEvSEVBRCAyPndhcm4gJiYKKwlncmVwICJ3b3JrdHJlZXMvd3QxL0hFQUQuKmFtYmlndW91cyIgd2FybgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZsb2cgb2YgbWFpbi13b3JrdHJlZS9IRUFEJyAnCisJZ2l0IHJlZmxvZyBIRUFEIHwgc2VkICJzL0hFQUQvbWFpbi13b3JrdHJlZVwvSEVBRC8iID5leHBlY3RlZCAmJgorCWdpdCByZWZsb2cgbWFpbi13b3JrdHJlZS9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgLUMgd3QxIHJlZmxvZyBtYWluLXdvcmt0cmVlL0hFQUQgPmFjdHVhbC53dDEgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwud3QxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBvZiB3b3JrdHJlZXMveHgvSEVBRCcgJworCWdpdCAtQyB3dDIgcmVmbG9nIEhFQUQgfCBzZWQgInMvSEVBRC93b3JrdHJlZXNcL3d0MlwvSEVBRC8iID5leHBlY3RlZCAmJgorCWdpdCByZWZsb2cgd29ya3RyZWVzL3d0Mi9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgLUMgd3QxIHJlZmxvZyB3b3JrdHJlZXMvd3QyL0hFQUQgPmFjdHVhbC53dDEgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwud3QxICYmCisJZ2l0IC1DIHd0MiByZWZsb2cgd29ya3RyZWVzL3d0Mi9IRUFEID5hY3R1YWwud3QyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsLnd0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3ItZWFjaC1yZWYgZnJvbSBtYWluIHJlcG8nICcKKwlta2RpciBmZXIxICYmCisJZ2l0IC1DIGZlcjEgaW5pdCByZXBvICYmCisJdGVzdF9jb21taXQgLUMgZmVyMS9yZXBvIGluaXRpYWwgJiYKKwlnaXQgLUMgZmVyMS9yZXBvIHdvcmt0cmVlIGFkZCAuLi9zZWNvbmQgJiYKKwlnaXQgLUMgZmVyMS9yZXBvIHVwZGF0ZS1yZWYgcmVmcy9iaXNlY3QvbWFpbiBIRUFEICYmCisJZ2l0IC1DIGZlcjEvcmVwbyB1cGRhdGUtcmVmIHJlZnMvcmV3cml0dGVuL21haW4gSEVBRCAmJgorCWdpdCAtQyBmZXIxL3JlcG8gdXBkYXRlLXJlZiByZWZzL3dvcmt0cmVlL21haW4gSEVBRCAmJgorCWdpdCAtQyBmZXIxL3JlcG8gZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiB8IGdyZXAgbWFpbiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJcmVmcy9iaXNlY3QvbWFpbgorCXJlZnMvcmV3cml0dGVuL21haW4KKwlyZWZzL3dvcmt0cmVlL21haW4KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yLWVhY2gtcmVmIGZyb20gbGlua2VkIHJlcG8nICcKKwlta2RpciBmZXIyICYmCisJZ2l0IC1DIGZlcjIgaW5pdCByZXBvICYmCisJdGVzdF9jb21taXQgLUMgZmVyMi9yZXBvIGluaXRpYWwgJiYKKwlnaXQgLUMgZmVyMi9yZXBvIHdvcmt0cmVlIGFkZCAuLi9zZWNvbmQgJiYKKwlnaXQgLUMgZmVyMi9zZWNvbmQgdXBkYXRlLXJlZiByZWZzL2Jpc2VjdC9zZWNvbmQgSEVBRCAmJgorCWdpdCAtQyBmZXIyL3NlY29uZCB1cGRhdGUtcmVmIHJlZnMvcmV3cml0dGVuL3NlY29uZCBIRUFEICYmCisJZ2l0IC1DIGZlcjIvc2Vjb25kIHVwZGF0ZS1yZWYgcmVmcy93b3JrdHJlZS9zZWNvbmQgSEVBRCAmJgorCWdpdCAtQyBmZXIyL3NlY29uZCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiIHwgZ3JlcCBzZWNvbmQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCXJlZnMvYmlzZWN0L3NlY29uZAorCXJlZnMvaGVhZHMvc2Vjb25kCisJcmVmcy9yZXdyaXR0ZW4vc2Vjb25kCisJcmVmcy93b3JrdHJlZS9zZWNvbmQKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDIwLWxvc3QtZm91bmQuc2ggYi90L3QxNDIwLWxvc3QtZm91bmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGM5ZTQwMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MjAtbG9zdC1mb3VuZC5zaApAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBmc2NrIC0tbG9zdC1mb3VuZCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyAwICYmCisJOiA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gMSA+IGZpbGUxICYmCisJZWNobyAyID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUxIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwllY2hvIDMgPiBmaWxlMyAmJgorCWdpdCBhZGQgZmlsZTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9zdCBhbmQgZm91bmQgc29tZXRoaW5nJyAnCisJZ2l0IHJldi1wYXJzZSBIRUFEID4gbG9zdC1jb21taXQgJiYKKwlnaXQgcmV2LXBhcnNlIDpmaWxlMyA+IGxvc3Qtb3RoZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGZzY2sgLS1sb3N0LWZvdW5kICYmCisJdGVzdCAyID0gJChscyAuZ2l0L2xvc3QtZm91bmQvKi8qIHwgd2MgLWwpICYmCisJdGVzdCAtZiAuZ2l0L2xvc3QtZm91bmQvY29tbWl0LyQoY2F0IGxvc3QtY29tbWl0KSAmJgorCXRlc3QgLWYgLmdpdC9sb3N0LWZvdW5kL290aGVyLyQoY2F0IGxvc3Qtb3RoZXIpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQzMC1iYWQtcmVmLW5hbWUuc2ggYi90L3QxNDMwLWJhZC1yZWYtbmFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNzg3OGE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTQzMC1iYWQtcmVmLW5hbWUuc2gKQEAgLTAsMCArMSwzNzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGhhbmRsaW5nIG9mIHJlZiBuYW1lcyB0aGF0IGNoZWNrLXJlZi1mb3JtYXQgcmVqZWN0cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1pbXBvcnQ6IGZhaWwgb24gaW52YWxpZCBicmFuY2ggbmFtZSAiLmJhZGJyYW5jaG5hbWUiJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L29iamVjdHMvcGFja18qIC5naXQvb2JqZWN0cy9pbmRleF8qIiAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJCWNvbW1pdCAuYmFkYnJhbmNobmFtZQorCQljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwkJZGF0YSA8PENPTU1JVAorCQljb3JydXB0CisJCUNPTU1JVAorCisJCWZyb20gcmVmcy9oZWFkcy9tYXN0ZXIKKworCUlOUFVUX0VORAorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1pbXBvcnQ6IGZhaWwgb24gaW52YWxpZCBicmFuY2ggbmFtZSAiYmFkW2JyYW5jaF1uYW1lIicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9vYmplY3RzL3BhY2tfKiAuZ2l0L29iamVjdHMvaW5kZXhfKiIgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCQljb21taXQgYmFkW2JyYW5jaF1uYW1lCisJCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCQlkYXRhIDw8Q09NTUlUCisJCWNvcnJ1cHQKKwkJQ09NTUlUCisKKwkJZnJvbSByZWZzL2hlYWRzL21hc3RlcgorCisJSU5QVVRfRU5ECisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIHNob3dzIGJhZGx5IG5hbWVkIHJlZiBhcyB3YXJuaW5nJyAnCisJY3AgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmIiAmJgorCWdpdCBicmFuY2ggPm91dHB1dCAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgcmVmcy9oZWFkcy9icm9rZW5cLlwuXC5yZWYiIGVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLWQgY2FuIGRlbGV0ZSBiYWRseSBuYW1lZCByZWYnICcKKwljcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYiICYmCisJZ2l0IGJyYW5jaCAtZCBicm9rZW4uLi5yZWYgJiYKKwlnaXQgYnJhbmNoID5vdXRwdXQgMj5lcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBlcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1EIGNhbiBkZWxldGUgYmFkbHkgbmFtZWQgcmVmJyAnCisJY3AgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmIiAmJgorCWdpdCBicmFuY2ggLUQgYnJva2VuLi4ucmVmICYmCisJZ2l0IGJyYW5jaCA+b3V0cHV0IDI+ZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtRCBjYW5ub3QgZGVsZXRlIG5vbi1yZWYgaW4gLmdpdCBkaXInICcKKwllY2hvIHByZWNpb3VzID4uZ2l0L215LXByaXZhdGUtZmlsZSAmJgorCWVjaG8gcHJlY2lvdXMgPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLUQgLi4vLi4vbXktcHJpdmF0ZS1maWxlICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvbXktcHJpdmF0ZS1maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtRCBjYW5ub3QgZGVsZXRlIHJlZiBpbiAuZ2l0IGRpcicgJworCWdpdCByZXYtcGFyc2UgSEVBRCA+LmdpdC9teS1wcml2YXRlLWZpbGUgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdCAmJgorCWdpdCBicmFuY2ggZm9vL2xlZ2l0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBmb28vLy8vLi8uLy4vLi4vLi4vLi4vbXktcHJpdmF0ZS1maWxlICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvbXktcHJpdmF0ZS1maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtRCBjYW5ub3QgZGVsZXRlIGFic29sdXRlIHBhdGgnICcKKwlnaXQgYnJhbmNoIC1mIGV4dHJhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtRCAiJChwd2QpLy5naXQvcmVmcy9oZWFkcy9leHRyYSIgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCBleHRyYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIGNhbm5vdCBjcmVhdGUgYSBiYWRseSBuYW1lZCByZWYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCBicm9rZW4uLi5yZWYgJiYKKwlnaXQgYnJhbmNoID5vdXRwdXQgMj5lcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBlcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1tIGNhbm5vdCByZW5hbWUgdG8gYSBiYWQgcmVmIG5hbWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYiICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgZ29vZHJlZiAmJgorCWdpdCBicmFuY2ggZ29vZHJlZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLW0gZ29vZHJlZiBicm9rZW4uLi5yZWYgJiYKKwl0ZXN0X2NtcF9yZXYgbWFzdGVyIGdvb2RyZWYgJiYKKwlnaXQgYnJhbmNoID5vdXRwdXQgMj5lcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBlcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnYnJhbmNoIC1tIGNhbiByZW5hbWUgZnJvbSBhIGJhZCByZWYgbmFtZScgJworCWNwIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiIgJiYKKwlnaXQgYnJhbmNoIC1tIGJyb2tlbi4uLnJlZiByZW5hbWVkICYmCisJdGVzdF9jbXBfcmV2IG1hc3RlciByZW5hbWVkICYmCisJZ2l0IGJyYW5jaCA+b3V0cHV0IDI+ZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggY2Fubm90IGNyZWF0ZSBhIGJhZGx5IG5hbWVkIHJlZicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAiZmlsZTovLyQocHdkKSIgSEVBRDpyZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCWdpdCBicmFuY2ggPm91dHB1dCAyPmVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIGVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIENfTE9DQUxFX09VVFBVVCAncHVzaCAtLW1pcnJvciBjYW4gZGVsZXRlIGJhZGx5IG5hbWVkIHJlZicgJworCXRvcD0kKHB3ZCkgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwlnaXQgaW5pdCBkZXN0ICYmCisKKwkoCisJCWNkIHNyYyAmJgorCQl0ZXN0X2NvbW1pdCBvbmUKKwkpICYmCisJKAorCQljZCBkZXN0ICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggJiYKKwkJY3AgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmCisJKSAmJgorCWdpdCAtQyBzcmMgcHVzaCAtLW1pcnJvciAiZmlsZTovLyR0b3AvZGVzdCIgJiYKKwlnaXQgLUMgZGVzdCBicmFuY2ggPm91dHB1dCAyPmVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIGVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2Ugc2tpcHMgc3ltcmVmIHBvaW50aW5nIHRvIGJyb2tlbiBuYW1lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmIiAmJgorCWdpdCBicmFuY2ggc2hhZG93IG9uZSAmJgorCWNwIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCXByaW50ZiAicmVmOiByZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZlxuIiA+LmdpdC9yZWZzL3RhZ3Mvc2hhZG93ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvdGFncy9zaGFkb3ciICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBvbmUgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc2hhZG93ID5hY3R1YWwgMj5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiaWdub3JpbmcgZGFuZ2xpbmcgc3ltcmVmIHJlZnMvdGFncy9zaGFkb3ciIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3ItZWFjaC1yZWYgZW1pdHMgd2FybmluZ3MgZm9yIGJyb2tlbiBuYW1lcycgJworCWNwIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiIgJiYKKwlwcmludGYgInJlZjogcmVmcy9oZWFkcy9icm9rZW4uLi5yZWZcbiIgPi5naXQvcmVmcy9oZWFkcy9iYWRuYW1lICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYmFkbmFtZSIgJiYKKwlwcmludGYgInJlZjogcmVmcy9oZWFkcy9tYXN0ZXJcbiIgPi5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5zeW1yZWYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5zeW1yZWYiICYmCisJZ2l0IGZvci1lYWNoLXJlZiA+b3V0cHV0IDI+ZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgb3V0cHV0ICYmCisJISBncmVwIC1lICJiYWRuYW1lIiBvdXRwdXQgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnN5bXJlZiIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgcmVmcy9oZWFkcy9icm9rZW5cLlwuXC5yZWYiIGVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiaWdub3JpbmcgYnJva2VuIHJlZiByZWZzL2hlYWRzL2JhZG5hbWUiIGVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgcmVmcy9oZWFkcy9icm9rZW5cLlwuXC5zeW1yZWYiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLWQgY2FuIGRlbGV0ZSBicm9rZW4gbmFtZScgJworCWNwIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiIgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yICYmCisJZ2l0IGJyYW5jaCA+b3V0cHV0IDI+ZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtZCBjYW4gZGVsZXRlIGJyb2tlbiBuYW1lJyAnCisJY3AgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmIiAmJgorCWdpdCBicmFuY2ggLWQgYnJva2VuLi4ucmVmID5vdXRwdXQgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgIkRlbGV0ZWQgYnJhbmNoIGJyb2tlbi4uLnJlZiAod2FzIGJyb2tlbikiIG91dHB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvciAmJgorCWdpdCBicmFuY2ggPm91dHB1dCAyPmVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIGVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC0tbm8tZGVyZWYgLWQgY2FuIGRlbGV0ZSBzeW1yZWYgdG8gYnJva2VuIG5hbWUnICcKKwljcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYiICYmCisJcHJpbnRmICJyZWY6IHJlZnMvaGVhZHMvYnJva2VuLi4ucmVmXG4iID4uZ2l0L3JlZnMvaGVhZHMvYmFkbmFtZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2JhZG5hbWUiICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCByZWZzL2hlYWRzL2JhZG5hbWUgPm91dHB1dCAyPmVycm9yICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL2JhZG5hbWUgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtZCBjYW4gZGVsZXRlIHN5bXJlZiB0byBicm9rZW4gbmFtZScgJworCWNwIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiIgJiYKKwlwcmludGYgInJlZjogcmVmcy9oZWFkcy9icm9rZW4uLi5yZWZcbiIgPi5naXQvcmVmcy9oZWFkcy9iYWRuYW1lICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYmFkbmFtZSIgJiYKKwlnaXQgYnJhbmNoIC1kIGJhZG5hbWUgPm91dHB1dCAyPmVycm9yICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL2JhZG5hbWUgJiYKKwl0ZXN0X2kxOG5ncmVwICJEZWxldGVkIGJyYW5jaCBiYWRuYW1lICh3YXMgcmVmcy9oZWFkcy9icm9rZW5cLlwuXC5yZWYpIiBvdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1kIGNhbiBkZWxldGUgZGFuZ2xpbmcgc3ltcmVmIHRvIGJyb2tlbiBuYW1lJyAnCisJcHJpbnRmICJyZWY6IHJlZnMvaGVhZHMvYnJva2VuLi4ucmVmXG4iID4uZ2l0L3JlZnMvaGVhZHMvYmFkbmFtZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2JhZG5hbWUiICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCByZWZzL2hlYWRzL2JhZG5hbWUgPm91dHB1dCAyPmVycm9yICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL2JhZG5hbWUgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtZCBjYW4gZGVsZXRlIGRhbmdsaW5nIHN5bXJlZiB0byBicm9rZW4gbmFtZScgJworCXByaW50ZiAicmVmOiByZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZlxuIiA+LmdpdC9yZWZzL2hlYWRzL2JhZG5hbWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9iYWRuYW1lIiAmJgorCWdpdCBicmFuY2ggLWQgYmFkbmFtZSA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvYmFkbmFtZSAmJgorCXRlc3RfaTE4bmdyZXAgIkRlbGV0ZWQgYnJhbmNoIGJhZG5hbWUgKHdhcyByZWZzL2hlYWRzL2Jyb2tlblwuXC5cLnJlZikiIG91dHB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC1kIGNhbiBkZWxldGUgYnJva2VuIG5hbWUgdGhyb3VnaCBzeW1yZWYnICcKKwljcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYiICYmCisJcHJpbnRmICJyZWY6IHJlZnMvaGVhZHMvYnJva2VuLi4ucmVmXG4iID4uZ2l0L3JlZnMvaGVhZHMvYmFkbmFtZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2JhZG5hbWUiICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9iYWRuYW1lID5vdXRwdXQgMj5lcnJvciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCBjYW4gZGVsZXRlIHN5bXJlZiB3aXRoIGJyb2tlbiBuYW1lJyAnCisJcHJpbnRmICJyZWY6IHJlZnMvaGVhZHMvbWFzdGVyXG4iID4uZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4uc3ltcmVmICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4uc3ltcmVmIiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tbm8tZGVyZWYgLWQgcmVmcy9oZWFkcy9icm9rZW4uLi5zeW1yZWYgPm91dHB1dCAyPmVycm9yICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnN5bXJlZiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1kIGNhbiBkZWxldGUgc3ltcmVmIHdpdGggYnJva2VuIG5hbWUnICcKKwlwcmludGYgInJlZjogcmVmcy9oZWFkcy9tYXN0ZXJcbiIgPi5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5zeW1yZWYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5zeW1yZWYiICYmCisJZ2l0IGJyYW5jaCAtZCBicm9rZW4uLi5zeW1yZWYgPm91dHB1dCAyPmVycm9yICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnN5bXJlZiAmJgorCXRlc3RfaTE4bmdyZXAgIkRlbGV0ZWQgYnJhbmNoIGJyb2tlbi4uLnN5bXJlZiAod2FzIHJlZnMvaGVhZHMvbWFzdGVyKSIgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCBjYW4gZGVsZXRlIGRhbmdsaW5nIHN5bXJlZiB3aXRoIGJyb2tlbiBuYW1lJyAnCisJcHJpbnRmICJyZWY6IHJlZnMvaGVhZHMvaWRvbm90ZXhpc3RcbiIgPi5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5zeW1yZWYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5zeW1yZWYiICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCByZWZzL2hlYWRzL2Jyb2tlbi4uLnN5bXJlZiA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4uc3ltcmVmICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLWQgY2FuIGRlbGV0ZSBkYW5nbGluZyBzeW1yZWYgd2l0aCBicm9rZW4gbmFtZScgJworCXByaW50ZiAicmVmOiByZWZzL2hlYWRzL2lkb25vdGV4aXN0XG4iID4uZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4uc3ltcmVmICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4uc3ltcmVmIiAmJgorCWdpdCBicmFuY2ggLWQgYnJva2VuLi4uc3ltcmVmID5vdXRwdXQgMj5lcnJvciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5zeW1yZWYgJiYKKwl0ZXN0X2kxOG5ncmVwICJEZWxldGVkIGJyYW5jaCBicm9rZW4uLi5zeW1yZWYgKHdhcyByZWZzL2hlYWRzL2lkb25vdGV4aXN0KSIgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLWQgY2Fubm90IGRlbGV0ZSBub24tcmVmIGluIC5naXQgZGlyJyAnCisJZWNobyBwcmVjaW91cyA+LmdpdC9teS1wcml2YXRlLWZpbGUgJiYKKwllY2hvIHByZWNpb3VzID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtZCBteS1wcml2YXRlLWZpbGUgPm91dHB1dCAyPmVycm9yICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgLWUgInJlZnVzaW5nIHRvIHVwZGF0ZSByZWYgd2l0aCBiYWQgbmFtZSIgZXJyb3IgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9teS1wcml2YXRlLWZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiAtZCBjYW5ub3QgZGVsZXRlIGFic29sdXRlIHBhdGgnICcKKwlnaXQgYnJhbmNoIC1mIGV4dHJhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLWQgIiQocHdkKS8uZ2l0L3JlZnMvaGVhZHMvZXh0cmEiICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgZXh0cmEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiAtLXN0ZGluIGZhaWxzIGNyZWF0ZSB3aXRoIGJhZCByZWYgbmFtZScgJworCWVjaG8gImNyZWF0ZSB+YSByZWZzL2hlYWRzL21hc3RlciIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogaW52YWxpZCByZWYgZm9ybWF0OiB+YSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLS1zdGRpbiBmYWlscyB1cGRhdGUgd2l0aCBiYWQgcmVmIG5hbWUnICcKKwllY2hvICJ1cGRhdGUgfmEgcmVmcy9oZWFkcy9tYXN0ZXIiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGludmFsaWQgcmVmIGZvcm1hdDogfmEiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC0tc3RkaW4gZmFpbHMgZGVsZXRlIHdpdGggYmFkIHJlZiBuYW1lJyAnCisJZWNobyAiZGVsZXRlIH5hIHJlZnMvaGVhZHMvbWFzdGVyIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBpbnZhbGlkIHJlZiBmb3JtYXQ6IH5hIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiAtLXN0ZGluIC16IGZhaWxzIGNyZWF0ZSB3aXRoIGJhZCByZWYgbmFtZScgJworCXByaW50ZiAiJXNcMCIgImNyZWF0ZSB+YSAiIHJlZnMvaGVhZHMvbWFzdGVyID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGludmFsaWQgcmVmIGZvcm1hdDogfmEgIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiAtLXN0ZGluIC16IGZhaWxzIHVwZGF0ZSB3aXRoIGJhZCByZWYgbmFtZScgJworCXByaW50ZiAiJXNcMCIgInVwZGF0ZSB+YSIgcmVmcy9oZWFkcy9tYXN0ZXIgIiIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogaW52YWxpZCByZWYgZm9ybWF0OiB+YSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLS1zdGRpbiAteiBmYWlscyBkZWxldGUgd2l0aCBiYWQgcmVmIG5hbWUnICcKKwlwcmludGYgIiVzXDAiICJkZWxldGUgfmEiIHJlZnMvaGVhZHMvbWFzdGVyID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGludmFsaWQgcmVmIGZvcm1hdDogfmEiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggcmVqZWN0cyBIRUFEIGFzIGEgYnJhbmNoIG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIEhFQUQgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIHJlamVjdHMgSEVBRCBhcyBhIGJyYW5jaCBuYW1lJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC1CIEhFQUQgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgY2FuIG9wZXJhdGUgb24gcmVmcy9oZWFkcy9IRUFEJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9IRUFEIEhFQUReICYmCisJZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvSEVBRCAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiByZWZzL2hlYWRzL0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1kIGNhbiByZW1vdmUgcmVmcy9oZWFkcy9IRUFEJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9IRUFEIEhFQUReICYmCisJZ2l0IGJyYW5jaCAtZCBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLW0gY2FuIHJlbmFtZSByZWZzL2hlYWRzL0hFQUQnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL0hFQUQgSEVBRF4gJiYKKwlnaXQgYnJhbmNoIC1tIEhFQUQgdGFpbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiByZWZzL2hlYWRzL0hFQUQgJiYKKwlnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy90YWlsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtZCBjYW4gcmVtb3ZlIHJlZnMvaGVhZHMvLWRhc2gnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzLy1kYXNoIEhFQUReICYmCisJZ2l0IGJyYW5jaCAtZCAtLSAtZGFzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiByZWZzL2hlYWRzLy1kYXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtbSBjYW4gcmVuYW1lIHJlZnMvaGVhZHMvLWRhc2gnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzLy1kYXNoIEhFQUReICYmCisJZ2l0IGJyYW5jaCAtbSAtLSAtZGFzaCBkYXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvLWRhc2ggJiYKKwlnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy9kYXNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQ1MC1mc2NrLnNoIGIvdC90MTQ1MC1mc2NrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxYTZlMzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDUwLWZzY2suc2gKQEAgLTAsMCArMSw4NTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgZnNjayByYW5kb20gY29sbGVjdGlvbiBvZiB0ZXN0cworCisqIChIRUFEKSBCCisqIChtYXN0ZXIpIEEKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3Rfb2lkX2luaXQgJiYKKwlnaXQgY29uZmlnIGdjLmF1dG8gMCAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU08tODg1OS0xICYmCisJdGVzdF9jb21taXQgQSBmaWxlQSBvbmUgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgaTE4bi5jb21taXRlbmNvZGluZyAmJgorCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwl0ZXN0X2NvbW1pdCBCIGZpbGVCIHR3byAmJgorCWdpdCB0YWcgLWQgQSBCICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9bm93IC0tYWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb3NlIG9iamVjdHMgYm9ycm93ZWQgZnJvbSBhbHRlcm5hdGUgYXJlIG5vdCBtaXNzaW5nJyAnCisJbWtkaXIgYW5vdGhlciAmJgorCSgKKwkJY2QgYW5vdGhlciAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIC4uLy4uLy4uLy5naXQvb2JqZWN0cyA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCQl0ZXN0X2NvbW1pdCBDIGZpbGVDIG9uZSAmJgorCQlnaXQgZnNjayAtLW5vLWRhbmdsaW5nID4uLi9hY3R1YWwgMj4mMQorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0hFQUQgaXMgcGFydCBvZiByZWZzLCB2YWxpZCBvYmplY3RzIGFwcGVhciB2YWxpZCcgJworCWdpdCBmc2NrID5hY3R1YWwgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKworIyBDb3JydXB0aW9uIHRlc3RzIGZvbGxvdy4gIE1ha2Ugc3VyZSB0byByZW1vdmUgYWxsIHRyYWNlcyBvZiB0aGUKKyMgc3BlY2lmaWMgY29ycnVwdGlvbiB5b3UgdGVzdCBhZnRlcndhcmRzLCBsZXN0IGEgbGF0ZXIgdGVzdCB0cmlwIG92ZXIKKyMgaXQuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBoZWxwZXJzIGZvciBjb3JydXB0aW9uIHRlc3RzJyAnCisJc2hhMV9maWxlKCkgeworCQlyZW1haW5kZXI9JHsxIz8/fSAmJgorCQlmaXJzdHR3bz0kezElJHJlbWFpbmRlcn0gJiYKKwkJZWNobyAiLmdpdC9vYmplY3RzLyRmaXJzdHR3by8kcmVtYWluZGVyIgorCX0gJiYKKworCXJlbW92ZV9vYmplY3QoKSB7CisJCXJtICIkKHNoYTFfZmlsZSAiJDEiKSIKKwl9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29iamVjdCB3aXRoIGJhZCBzaGExJyAnCisJc2hhPSQoZWNobyBibG9iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJb2xkPSQodGVzdF9vaWRfdG9fcGF0aCAiJHNoYSIpICYmCisJbmV3PSQoZGlybmFtZSAkb2xkKS8kKHRlc3Rfb2lkIGZmXzIpICYmCisJc2hhPSIkKGRpcm5hbWUgJG5ldykkKGJhc2VuYW1lICRuZXcpIiAmJgorCW12IC5naXQvb2JqZWN0cy8kb2xkIC5naXQvb2JqZWN0cy8kbmV3ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRzaGEiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJHNoYSBmb28gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWFkLXRyZWUgLXUgLS1yZXNldCBIRUFEIiAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHRyZWUiICYmCisJY210PSQoZWNobyBib2d1cyB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJGNtdCIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2JvZ3VzICRjbXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvYm9ndXMiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIiRzaGEuKmNvcnJ1cHQiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggcG9pbnRpbmcgdG8gbm9uLWNvbW1pdCcgJworCWdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0gPi5naXQvcmVmcy9oZWFkcy9pbnZhbGlkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2ludmFsaWQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3QgYSBjb21taXQiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIRUFEIGxpbmsgcG9pbnRpbmcgYXQgYSBmdW5ueSBvYmplY3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIm12IC5naXQvU0FWRURfSEVBRCAuZ2l0L0hFQUQiICYmCisJbXYgLmdpdC9IRUFEIC5naXQvU0FWRURfSEVBRCAmJgorCWVjaG8gJFpFUk9fT0lEID4uZ2l0L0hFQUQgJiYKKwkjIGF2b2lkIGNvcnJ1cHQvYnJva2VuIEhFQUQgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHJlcG8gZGlzY292ZXJ5CisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9ESVI9LmdpdCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgImRldGFjaGVkIEhFQUQgcG9pbnRzIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSEVBRCBsaW5rIHBvaW50aW5nIGF0IGEgZnVubnkgcGxhY2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIm12IC5naXQvU0FWRURfSEVBRCAuZ2l0L0hFQUQiICYmCisJbXYgLmdpdC9IRUFEIC5naXQvU0FWRURfSEVBRCAmJgorCWVjaG8gInJlZjogcmVmcy9mdW5ueS9wbGFjZSIgPi5naXQvSEVBRCAmJgorCSMgYXZvaWQgY29ycnVwdC9icm9rZW4gSEVBRCBmcm9tIGludGVyZmVyaW5nIHdpdGggcmVwbyBkaXNjb3ZlcnkKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX0RJUj0uZ2l0IGdpdCBmc2NrIDI+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiSEVBRCBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIRUFEIGxpbmsgcG9pbnRpbmcgYXQgYSBmdW5ueSBvYmplY3QgKGZyb20gZGlmZmVyZW50IHd0KScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgLmdpdC9TQVZFRF9IRUFEIC5naXQvSEVBRCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiAuZ2l0L3dvcmt0cmVlcyB3dCIgJiYKKwlnaXQgd29ya3RyZWUgYWRkIHd0ICYmCisJbXYgLmdpdC9IRUFEIC5naXQvU0FWRURfSEVBRCAmJgorCWVjaG8gJFpFUk9fT0lEID4uZ2l0L0hFQUQgJiYKKwkjIGF2b2lkIGNvcnJ1cHQvYnJva2VuIEhFQUQgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHJlcG8gZGlzY292ZXJ5CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHd0IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtYWluLXdvcmt0cmVlL0hFQUQ6IGRldGFjaGVkIEhFQUQgcG9pbnRzIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3RoZXIgd29ya3RyZWUgSEVBRCBsaW5rIHBvaW50aW5nIGF0IGEgZnVubnkgb2JqZWN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgLmdpdC93b3JrdHJlZXMgb3RoZXIiICYmCisJZ2l0IHdvcmt0cmVlIGFkZCBvdGhlciAmJgorCWVjaG8gJFpFUk9fT0lEID4uZ2l0L3dvcmt0cmVlcy9vdGhlci9IRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJ3b3JrdHJlZXMvb3RoZXIvSEVBRDogZGV0YWNoZWQgSEVBRCBwb2ludHMiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdGhlciB3b3JrdHJlZSBIRUFEIGxpbmsgcG9pbnRpbmcgYXQgbWlzc2luZyBvYmplY3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiAuZ2l0L3dvcmt0cmVlcyBvdGhlciIgJiYKKwlnaXQgd29ya3RyZWUgYWRkIG90aGVyICYmCisJZWNobyAiQ29udGVudHMgbWlzc2luZyBmcm9tIHJlcG8iIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPi5naXQvd29ya3RyZWVzL290aGVyL0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIndvcmt0cmVlcy9vdGhlci9IRUFEOiBpbnZhbGlkIHNoYTEgcG9pbnRlciIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ290aGVyIHdvcmt0cmVlIEhFQUQgbGluayBwb2ludGluZyBhdCBhIGZ1bm55IHBsYWNlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgLmdpdC93b3JrdHJlZXMgb3RoZXIiICYmCisJZ2l0IHdvcmt0cmVlIGFkZCBvdGhlciAmJgorCWVjaG8gInJlZjogcmVmcy9mdW5ueS9wbGFjZSIgPi5naXQvd29ya3RyZWVzL290aGVyL0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIndvcmt0cmVlcy9vdGhlci9IRUFEIHBvaW50cyB0byBzb21ldGhpbmcgc3RyYW5nZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB3aXRoIG11bHRpcGxlIHNpZ25hdHVyZXMgaXMgb2theScgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YmFzaXMgJiYKKwljYXQgPnNpZ3MgPDwtRU9GICYmCisJZ3Bnc2lnIC0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tCisJICBWR2hwY3lCcGN5QnViM1FnY21WaGJHeDVJR0VnYzJsbmJtRjBkWEpsTGc9PQorCSAgLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tCisJZ3Bnc2lnLXNoYTI1NiAtLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLQorCSAgVkdocGN5QnBjeUJ1YjNRZ2NtVmhiR3g1SUdFZ2MybG5ibUYwZFhKbExnPT0KKwkgIC0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQorCUVPRgorCXNlZCAtZSAiL15jb21taXR0ZXIvcSIgYmFzaXMgPm9rYXkgJiYKKwljYXQgc2lncyA+Pm9rYXkgJiYKKwllY2hvID4+b2theSAmJgorCXNlZCAtZSAiMSwvXiQvZCIgYmFzaXMgPj5va2F5ICYmCisJY2F0IG9rYXkgJiYKKwluZXc9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IC0tc3RkaW4gPG9rYXkpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRuZXciICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9ib2d1cyAiJG5ldyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvYm9ndXMiICYmCisJZ2l0IGZzY2sgMj5vdXQgJiYKKwljYXQgb3V0ICYmCisJISBncmVwICJjb21taXQgJG5ldyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtYWlsIHdpdGhvdXQgQCBpcyBva2F5JyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5iYXNpcyAmJgorCXNlZCAicy9AL0FULyIgYmFzaXMgPm9rYXkgJiYKKwluZXc9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IC0tc3RkaW4gPG9rYXkpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRuZXciICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9ib2d1cyAiJG5ldyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvYm9ndXMiICYmCisJZ2l0IGZzY2sgMj5vdXQgJiYKKwkhIGdyZXAgImNvbW1pdCAkbmV3IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1haWwgd2l0aCBlbWJlZGRlZCA+IGlzIG5vdCBva2F5JyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5iYXNpcyAmJgorCXNlZCAicy9AW2Etel0vJj4vIiBiYXNpcyA+YmFkLWVtYWlsICYmCisJbmV3PSQoZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluIDxiYWQtZW1haWwpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRuZXciICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9ib2d1cyAiJG5ldyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvYm9ndXMiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciBpbiBjb21taXQgJG5ldyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgPCBlbWFpbCBkZWxpbWl0ZXIgaXMgcmVwb3J0ZWQgbmljZWx5JyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5iYXNpcyAmJgorCXNlZCAicy88Ly8iIGJhc2lzID5iYWQtZW1haWwtMiAmJgorCW5ldz0kKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgLS1zdGRpbiA8YmFkLWVtYWlsLTIpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRuZXciICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9ib2d1cyAiJG5ldyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvYm9ndXMiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciBpbiBjb21taXQgJG5ldy4qIC0gYmFkIG5hbWUiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIGVtYWlsIGlzIHJlcG9ydGVkIG5pY2VseScgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YmFzaXMgJiYKKwlzZWQgInMvW2Etel0qIDxbXj5dKj4vLyIgYmFzaXMgPmJhZC1lbWFpbC0zICYmCisJbmV3PSQoZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluIDxiYWQtZW1haWwtMykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJG5ldyIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2JvZ3VzICIkbmV3IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yIGluIGNvbW1pdCAkbmV3LiogLSBtaXNzaW5nIGVtYWlsIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnPiBpbiBuYW1lIGlzIHJlcG9ydGVkJyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5iYXNpcyAmJgorCXNlZCAicy8gPC8+IDwvIiBiYXNpcyA+YmFkLWVtYWlsLTQgJiYKKwluZXc9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IC0tc3RkaW4gPGJhZC1lbWFpbC00KSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkbmV3IiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgIiRuZXciICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2JvZ3VzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiZXJyb3IgaW4gY29tbWl0ICRuZXciIG91dAorJworCisjIGRhdGUgaXMgMl42NCArIDEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVnZXIgb3ZlcmZsb3cgaW4gdGltZXN0YW1wcyBpcyByZXBvcnRlZCcgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YmFzaXMgJiYKKwlzZWQgInMvXlxcKGF1dGhvciAuKj5cXCkgWzAtOV0qL1xcMSAxODQ0Njc0NDA3MzcwOTU1MTYxNy8iIFwKKwkJPGJhc2lzID5iYWQtdGltZXN0YW1wICYmCisJbmV3PSQoZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluIDxiYWQtdGltZXN0YW1wKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkbmV3IiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgIiRuZXciICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2JvZ3VzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiZXJyb3IgaW4gY29tbWl0ICRuZXcuKmludGVnZXIgb3ZlcmZsb3ciIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgd2l0aCBOVUwgaW4gaGVhZGVyJyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5iYXNpcyAmJgorCXNlZCAicy9hdXRob3IgLi9hdXRob3IgUS8iIDxiYXNpcyB8IHFfdG9fbnVsID5jb21taXQtTlVMLWhlYWRlciAmJgorCW5ldz0kKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgLS1zdGRpbiA8Y29tbWl0LU5VTC1oZWFkZXIpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRuZXciICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9ib2d1cyAiJG5ldyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvYm9ndXMiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciBpbiBjb21taXQgJG5ldy4qdW50ZXJtaW5hdGVkIGhlYWRlcjogTlVMIGF0IG9mZnNldCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWUgb2JqZWN0IHdpdGggZHVwbGljYXRlIGVudHJpZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImZvciBpIGluIFwkVDsgZG8gcmVtb3ZlX29iamVjdCBcJGk7IGRvbmUiICYmCisJVD0kKAorCQlHSVRfSU5ERVhfRklMRT10ZXN0LWluZGV4ICYmCisJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCQlybSAtZiB0ZXN0LWluZGV4ICYmCisJCT54ICYmCisJCWdpdCBhZGQgeCAmJgorCQlnaXQgcmV2LXBhcnNlIDp4ICYmCisJCVQ9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJZWNobyAkVCAmJgorCQkoCisJCQlnaXQgY2F0LWZpbGUgdHJlZSAkVCAmJgorCQkJZ2l0IGNhdC1maWxlIHRyZWUgJFQKKwkJKSB8CisJCWdpdCBoYXNoLW9iamVjdCAtdyAtdCB0cmVlIC0tc3RkaW4KKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciBpbiB0cmVlIC4qY29udGFpbnMgZHVwbGljYXRlIGZpbGUgZW50cmllcyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWUgb2JqZWN0IHdpdGggZHVibGljYXRlIG5hbWVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0IFwkYmxvYiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgXCR0cmVlIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCBcJGJhZHRyZWUiICYmCisJYmxvYj0kKGVjaG8gYmxvYiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCXByaW50ZiAiMTAwNjQ0IGJsb2IgJXNcdCVzXG4iICRibG9iIHguMiA+dHJlZSAmJgorCXRyZWU9JChnaXQgbWt0cmVlIDx0cmVlKSAmJgorCXByaW50ZiAiMTAwNjQ0IGJsb2IgJXNcdCVzXG4iICRibG9iIHguMSA+YmFkdHJlZSAmJgorCXByaW50ZiAiMTAwNjQ0IGJsb2IgJXNcdCVzXG4iICRibG9iIHggPj5iYWR0cmVlICYmCisJcHJpbnRmICIwNDAwMDAgdHJlZSAlc1x0JXNcbiIgJHRyZWUgeCA+PmJhZHRyZWUgJiYKKwliYWR0cmVlPSQoZ2l0IG1rdHJlZSA8YmFkdHJlZSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIiRiYWR0cmVlIiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciBpbiB0cmVlIC4qY29udGFpbnMgZHVwbGljYXRlIGZpbGUgZW50cmllcyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VucGFyc2VhYmxlIHRyZWUgb2JqZWN0JyAnCisJdGVzdF9vaWRfY2FjaGUgPDwtXEVPRiAmJgorCWp1bmsgc2hhMTp0d2VudHktYnl0ZXMtb2YtanVuaworCWp1bmsgc2hhMjU2OnR3ZW50eS1ieXRlcy1vZi1qdW5rLXR3ZWx2ZS1tb3JlCisJRU9GCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvd3JvbmciICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0IFwkdHJlZV9zaGExIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCBcJGNvbW1pdF9zaGExIiAmJgorCWp1bms9JCh0ZXN0X29pZCBqdW5rKSAmJgorCXRyZWVfc2hhMT0kKHByaW50ZiAiMTAwNjQ0IFwwJGp1bmsiIHwgZ2l0IGhhc2gtb2JqZWN0IC10IHRyZWUgLS1zdGRpbiAtdyAtLWxpdGVyYWxseSkgJiYKKwljb21taXRfc2hhMT0kKGdpdCBjb21taXQtdHJlZSAkdHJlZV9zaGExKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvd3JvbmcgJGNvbW1pdF9zaGExICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvcjogZW1wdHkgZmlsZW5hbWUgaW4gdHJlZSBlbnRyeSIgb3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiJHRyZWVfc2hhMSIgb3V0ICYmCisJdGVzdF9pMThuZ3JlcCAhICJmYXRhbDogZW1wdHkgZmlsZW5hbWUgaW4gdHJlZSBlbnRyeSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWUgZW50cnkgd2l0aCB0eXBlIG1pc21hdGNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0IFwkYmxvYiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgXCR0cmVlIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCBcJGNvbW1pdCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvdHlwZV9taXNtYXRjaCIgJiYKKwlibG9iPSQoZWNobyBibG9iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJYmxvYl9iaW49JChlY2hvICRibG9iIHwgaGV4Mm9jdCkgJiYKKwl0cmVlPSQoCisJCXByaW50ZiAiNDAwMDAgZGlyXDAke2Jsb2JfYmlufTEwMDY0NCBmaWxlXDAke2Jsb2JfYmlufSIgfAorCQlnaXQgaGFzaC1vYmplY3QgLXQgdHJlZSAtLXN0ZGluIC13IC0tbGl0ZXJhbGx5CisJKSAmJgorCWNvbW1pdD0kKGdpdCBjb21taXQtdHJlZSAkdHJlZSkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3R5cGVfbWlzbWF0Y2ggJGNvbW1pdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrID5vdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgImlzIGEgYmxvYiwgbm90IGEgdHJlZSIgb3V0ICYmCisJdGVzdF9pMThuZ3JlcCAhICJkYW5nbGluZyBibG9iIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIHBvaW50aW5nIHRvIG5vbmV4aXN0ZW50JyAnCisJYmFkb2lkPSQodGVzdF9vaWQgZGVhZGJlZWYpICYmCisJY2F0ID5pbnZhbGlkLXRhZyA8PC1FT0YgJiYKKwlvYmplY3QgJGJhZG9pZAorCXR5cGUgY29tbWl0CisJdGFnIGludmFsaWQKKwl0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIzNDU2Nzg5MCAtMDAwMAorCisJVGhpcyBpcyBhbiBpbnZhbGlkIHRhZy4KKwlFT0YKKworCXRhZz0kKGdpdCBoYXNoLW9iamVjdCAtdCB0YWcgLXcgLS1zdGRpbiA8aW52YWxpZC10YWcpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICR0YWciICYmCisJZWNobyAkdGFnID4uZ2l0L3JlZnMvdGFncy9pbnZhbGlkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL3RhZ3MvaW52YWxpZCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAtLXRhZ3MgPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgImJyb2tlbiBsaW5rIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIHBvaW50aW5nIHRvIHNvbWV0aGluZyBlbHNlIHRoYW4gaXRzIHR5cGUnICcKKwlzaGE9JChlY2hvIGJsb2IgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHNoYSIgJiYKKwljYXQgPndyb25nLXRhZyA8PC1FT0YgJiYKKwlvYmplY3QgJHNoYQorCXR5cGUgY29tbWl0CisJdGFnIHdyb25nCisJdGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+IDEyMzQ1Njc4OTAgLTAwMDAKKworCVRoaXMgaXMgYW4gaW52YWxpZCB0YWcuCisJRU9GCisKKwl0YWc9JChnaXQgaGFzaC1vYmplY3QgLXQgdGFnIC13IC0tc3RkaW4gPHdyb25nLXRhZykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHRhZyIgJiYKKwllY2hvICR0YWcgPi5naXQvcmVmcy90YWdzL3dyb25nICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL3RhZ3Mvd3JvbmciICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS10YWdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyB3aXRoIGluY29ycmVjdCB0YWcgbmFtZSAmIG1pc3NpbmcgdGFnZ2VyJyAnCisJc2hhPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+d3JvbmctdGFnIDw8LUVPRiAmJgorCW9iamVjdCAkc2hhCisJdHlwZSBjb21taXQKKwl0YWcgd3JvbmcgbmFtZSBmb3JtYXQKKworCVRoaXMgaXMgYW4gaW52YWxpZCB0YWcuCisJRU9GCisKKwl0YWc9JChnaXQgaGFzaC1vYmplY3QgLXQgdGFnIC13IC0tc3RkaW4gPHdyb25nLXRhZykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHRhZyIgJiYKKwllY2hvICR0YWcgPi5naXQvcmVmcy90YWdzL3dyb25nICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL3RhZ3Mvd3JvbmciICYmCisJZ2l0IGZzY2sgLS10YWdzIDI+b3V0ICYmCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwl3YXJuaW5nIGluIHRhZyAkdGFnOiBiYWRUYWdOYW1lOiBpbnZhbGlkICdcJyd0YWcnXCcnIG5hbWU6IHdyb25nIG5hbWUgZm9ybWF0CisJd2FybmluZyBpbiB0YWcgJHRhZzogbWlzc2luZ1RhZ2dlckVudHJ5OiBpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICdcJyd0YWdnZXInXCcnIGxpbmUKKwlFT0YKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWcgd2l0aCBiYWQgdGFnZ2VyJyAnCisJc2hhPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+d3JvbmctdGFnIDw8LUVPRiAmJgorCW9iamVjdCAkc2hhCisJdHlwZSBjb21taXQKKwl0YWcgbm90LXF1aXRlLXdyb25nCisJdGFnZ2VyIEJhZCBUYWdnZXIgTmFtZQorCisJVGhpcyBpcyBhbiBpbnZhbGlkIHRhZy4KKwlFT0YKKworCXRhZz0kKGdpdCBoYXNoLW9iamVjdCAtLWxpdGVyYWxseSAtdCB0YWcgLXcgLS1zdGRpbiA8d3JvbmctdGFnKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkdGFnIiAmJgorCWVjaG8gJHRhZyA+LmdpdC9yZWZzL3RhZ3Mvd3JvbmcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvdGFncy93cm9uZyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAtLXRhZ3MgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciBpbiB0YWcgLio6IGludmFsaWQgYXV0aG9yL2NvbW1pdHRlciIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyB3aXRoIE5VTCBpbiBoZWFkZXInICcKKwlzaGE9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJcV90b19udWwgPnRhZy1OVUwtaGVhZGVyIDw8LUVPRiAmJgorCW9iamVjdCAkc2hhCisJdHlwZSBjb21taXQKKwl0YWcgY29udGFpbnMtUS1pbi1oZWFkZXIKKwl0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIzNDU2Nzg5MCAtMDAwMAorCisJVGhpcyBpcyBhbiBpbnZhbGlkIHRhZy4KKwlFT0YKKworCXRhZz0kKGdpdCBoYXNoLW9iamVjdCAtLWxpdGVyYWxseSAtdCB0YWcgLXcgLS1zdGRpbiA8dGFnLU5VTC1oZWFkZXIpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICR0YWciICYmCisJZWNobyAkdGFnID4uZ2l0L3JlZnMvdGFncy93cm9uZyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy90YWdzL3dyb25nIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIC0tdGFncyAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yIGluIHRhZyAkdGFnLip1bnRlcm1pbmF0ZWQgaGVhZGVyOiBOVUwgYXQgb2Zmc2V0IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW5lZCB1cCcgJworCWdpdCBmc2NrID5hY3R1YWwgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS12ZXJpZnktb2JqZWN0cycgJworCWdpdCByZXYtbGlzdCAtLXZlcmlmeS1vYmplY3RzIC0tYWxsID4vZGV2L251bGwgMj5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tdmVyaWZ5LW9iamVjdHMgd2l0aCBiYWQgc2hhMScgJworCXNoYT0kKGVjaG8gYmxvYiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCW9sZD0kKHRlc3Rfb2lkX3RvX3BhdGggJHNoYSkgJiYKKwluZXc9JChkaXJuYW1lICRvbGQpLyQodGVzdF9vaWQgZmZfMikgJiYKKwlzaGE9IiQoZGlybmFtZSAkbmV3KSQoYmFzZW5hbWUgJG5ldykiICYmCisJbXYgLmdpdC9vYmplY3RzLyRvbGQgLmdpdC9vYmplY3RzLyRuZXcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHNoYSIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkc2hhIGZvbyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYWQtdHJlZSAtdSAtLXJlc2V0IEhFQUQiICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkdHJlZSIgJiYKKwljbXQ9JChlY2hvIGJvZ3VzIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkY210IiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgJGNtdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKworCXRlc3RfbWlnaHRfZmFpbCBnaXQgcmV2LWxpc3QgLS12ZXJpZnktb2JqZWN0cyByZWZzL2hlYWRzL2JvZ3VzID4vZGV2L251bGwgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICJlcnJvcjogaGFzaCBtaXNtYXRjaCAkKGRpcm5hbWUgJG5ldykkKHRlc3Rfb2lkIGZmXzIpIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yY2UgZnNjayB0byBpZ25vcmUgZG91YmxlIGF1dGhvcicgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YmFzaXMgJiYKKwlzZWQgInMvXmF1dGhvciAuKi8mLCYvIiA8YmFzaXMgfCB0ciAsIFxcbiA+bXVsdGlwbGUtYXV0aG9ycyAmJgorCW5ldz0kKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgLS1zdGRpbiA8bXVsdGlwbGUtYXV0aG9ycykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJG5ldyIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2JvZ3VzICIkbmV3IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAmJgorCWdpdCAtYyBmc2NrLm11bHRpcGxlQXV0aG9ycz1pZ25vcmUgZnNjaworJworCitfYno9J1wwJworX2J6b2lkPSQocHJpbnRmICRaRVJPX09JRCB8IHNlZCAtZSAncy8wMC9cXDAvZycpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgbm90aWNlcyBibG9iIGVudHJ5IHBvaW50aW5nIHRvIG51bGwgc2hhMScgJworCShnaXQgaW5pdCBudWxsLWJsb2IgJiYKKwkgY2QgbnVsbC1ibG9iICYmCisJIHNoYT0kKHByaW50ZiAiMTAwNjQ0IGZpbGUkX2J6JF9iem9pZCIgfAorCSAgICAgICBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiAtdCB0cmVlKSAmJgorCSAgZ2l0IGZzY2sgMj5vdXQgJiYKKwkgIHRlc3RfaTE4bmdyZXAgIndhcm5pbmcuKm51bGwgc2hhMSIgb3V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIG5vdGljZXMgc3VibW9kdWxlIGVudHJ5IHBvaW50aW5nIHRvIG51bGwgc2hhMScgJworCShnaXQgaW5pdCBudWxsLWNvbW1pdCAmJgorCSBjZCBudWxsLWNvbW1pdCAmJgorCSBzaGE9JChwcmludGYgIjE2MDAwMCBzdWJtb2R1bGUkX2J6JF9iem9pZCIgfAorCSAgICAgICBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiAtdCB0cmVlKSAmJgorCSAgZ2l0IGZzY2sgMj5vdXQgJiYKKwkgIHRlc3RfaTE4bmdyZXAgIndhcm5pbmcuKm51bGwgc2hhMSIgb3V0CisJKQorJworCit3aGlsZSByZWFkIG5hbWUgcGF0aCBwcmV0dHk7IGRvCisJd2hpbGUgcmVhZCBtb2RlIHR5cGU7IGRvCisJCTogJHtwcmV0dHk6PSRwYXRofQorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmc2NrIG5vdGljZXMgJHByZXR0eSBhcyAkdHlwZSIgJworCQkoCisJCQlnaXQgaW5pdCAkbmFtZS0kdHlwZSAmJgorCQkJY2QgJG5hbWUtJHR5cGUgJiYKKwkJCWdpdCBjb25maWcgY29yZS5wcm90ZWN0TlRGUyBmYWxzZSAmJgorCQkJZWNobyBjb250ZW50ID5maWxlICYmCisJCQlnaXQgYWRkIGZpbGUgJiYKKwkJCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCQkJYmxvYj0kKGdpdCByZXYtcGFyc2UgOmZpbGUpICYmCisJCQl0cmVlPSQoZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSkgJiYKKwkJCXZhbHVlPSQoZXZhbCAiZWNobyBcJCR0eXBlIikgJiYKKwkJCXByaW50ZiAiJG1vZGUgJHR5cGUgJXNcdCVzIiAiJHZhbHVlIiAiJHBhdGgiID5iYWQgJiYKKwkJCWJhZF90cmVlPSQoZ2l0IG1rdHJlZSA8YmFkKSAmJgorCQkJZ2l0IGZzY2sgMj5vdXQgJiYKKwkJCXRlc3RfaTE4bmdyZXAgIndhcm5pbmcuKnRyZWUgJGJhZF90cmVlIiBvdXQKKwkJKScKKwlkb25lIDw8LVxFT0YKKwkxMDA2NDQgYmxvYgorCTA0MDAwMCB0cmVlCisJRU9GCitkb25lIDw8LUVPRgorZG90IC4KK2RvdGRvdCAuLgorZG90Z2l0IC5naXQKK2RvdGdpdC1jYXNlIC5HSVQKK2RvdGdpdC11bmljb2RlIC5nSSR7dTIwMGN9VCAuZ0l7dTIwMGN9VAorZG90Z2l0LWNhc2UyIC5HaXQKK2dpdC10aWxkZTEgZ2l0fjEKK2RvdGdpdGRvdCAuZ2l0LgorZG90LWJhY2tzbGFzaC1jYXNlIC5cXFxcLkdJVFxcXFxmb29iYXIKK2RvdGdpdC1jYXNlLWJhY2tzbGFzaCAuZ2l0XFxcXGZvb2JhcgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgYWxsb3dzIC7Fh2l0JyAnCisJKAorCQlnaXQgaW5pdCBub3QtZG90Z2l0ICYmCisJCWNkIG5vdC1kb3RnaXQgJiYKKwkJZWNobyBjb250ZW50ID5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwkJYmxvYj0kKGdpdCByZXYtcGFyc2UgOmZpbGUpICYmCisJCXByaW50ZiAiMTAwNjQ0IGJsb2IgJGJsb2JcdC5cXDMwNVxcMjA3aXQiID50cmVlICYmCisJCXRyZWU9JChnaXQgbWt0cmVlIDx0cmVlKSAmJgorCQlnaXQgZnNjayAyPmVyciAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTlVMIGluIGNvbW1pdCcgJworCXJtIC1mciBudWwtaW4tY29tbWl0ICYmCisJZ2l0IGluaXQgbnVsLWluLWNvbW1pdCAmJgorCSgKKwkJY2QgbnVsLWluLWNvbW1pdCAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImluaXRpYWwgY29tbWl0UU5VTCBhZnRlciBtZXNzYWdlIiAmJgorCQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPm9yaWdpbmFsICYmCisJCXFfdG9fbnVsIDxvcmlnaW5hbCA+bXVuZ2VkICYmCisJCWdpdCBoYXNoLW9iamVjdCAtdyAtdCBjb21taXQgLS1zdGRpbiA8bXVuZ2VkID5uYW1lICYmCisJCWdpdCBicmFuY2ggYmFkICQoY2F0IG5hbWUpICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGZzY2subnVsSW5Db21taXQ9ZXJyb3IgZnNjayAyPndhcm4uMSAmJgorCQl0ZXN0X2kxOG5ncmVwIG51bEluQ29tbWl0IHdhcm4uMSAmJgorCQlnaXQgZnNjayAyPndhcm4uMiAmJgorCQl0ZXN0X2kxOG5ncmVwIG51bEluQ29tbWl0IHdhcm4uMgorCSkKKycKKworIyBjcmVhdGUgYSBzdGF0aWMgdGVzdCByZXBvIHdoaWNoIGlzIGJyb2tlbiBieSBvbWl0dGluZworIyBvbmUgcGFydGljdWxhciBvYmplY3QgKCQxLCB3aGljaCBpcyBsb29rZWQgdXAgdmlhIHJldi1wYXJzZQorIyBpbiB0aGUgbmV3IHJlcG9zaXRvcnkpLgorY3JlYXRlX3JlcG9fbWlzc2luZyAoKSB7CisJcm0gLXJmIG1pc3NpbmcgJiYKKwlnaXQgaW5pdCBtaXNzaW5nICYmCisJKAorCQljZCBtaXNzaW5nICYmCisJCWdpdCBjb21taXQgLW0gb25lIC0tYWxsb3ctZW1wdHkgJiYKKwkJbWtkaXIgc3ViZGlyICYmCisJCWVjaG8gY29udGVudCA+c3ViZGlyL2ZpbGUgJiYKKwkJZ2l0IGFkZCBzdWJkaXIvZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIHR3byAmJgorCQl1bnJlbGF0ZWQ9JChlY2hvIHVucmVsYXRlZCB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIC13KSAmJgorCQlnaXQgdGFnIC1tIGZvbyB0YWcgJHVucmVsYXRlZCAmJgorCQlzaGExPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDEiKSAmJgorCQlwYXRoPSQoZWNobyAkc2hhMSB8IHNlZCAnc3wuLnwmL3wnKSAmJgorCQlybSAuZ2l0L29iamVjdHMvJHBhdGgKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgbm90aWNlcyBtaXNzaW5nIGJsb2InICcKKwljcmVhdGVfcmVwb19taXNzaW5nIEhFQUQ6c3ViZGlyL2ZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgbWlzc2luZyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgbm90aWNlcyBtaXNzaW5nIHN1YnRyZWUnICcKKwljcmVhdGVfcmVwb19taXNzaW5nIEhFQUQ6c3ViZGlyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIG1pc3NpbmcgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIG5vdGljZXMgbWlzc2luZyByb290IHRyZWUnICcKKwljcmVhdGVfcmVwb19taXNzaW5nIEhFQURee3RyZWV9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIG1pc3NpbmcgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIG5vdGljZXMgbWlzc2luZyBwYXJlbnQnICcKKwljcmVhdGVfcmVwb19taXNzaW5nIEhFQUReICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIG1pc3NpbmcgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIG5vdGljZXMgbWlzc2luZyB0YWdnZWQgb2JqZWN0JyAnCisJY3JlYXRlX3JlcG9fbWlzc2luZyB0YWdee2Jsb2J9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIG1pc3NpbmcgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIG5vdGljZXMgcmVmIHBvaW50aW5nIHRvIG1pc3NpbmcgY29tbWl0JyAnCisJY3JlYXRlX3JlcG9fbWlzc2luZyBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIG1pc3NpbmcgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIG5vdGljZXMgcmVmIHBvaW50aW5nIHRvIG1pc3NpbmcgdGFnJyAnCisJY3JlYXRlX3JlcG9fbWlzc2luZyB0YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgbWlzc2luZyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgLS1jb25uZWN0aXZpdHktb25seScgJworCXJtIC1yZiBjb25uZWN0aXZpdHktb25seSAmJgorCWdpdCBpbml0IGNvbm5lY3Rpdml0eS1vbmx5ICYmCisJKAorCQljZCBjb25uZWN0aXZpdHktb25seSAmJgorCQl0b3VjaCBlbXB0eSAmJgorCQlnaXQgYWRkIGVtcHR5ICYmCisJCXRlc3RfY29tbWl0IGVtcHR5ICYmCisKKwkJIyBEcm9wIHRoZSBpbmRleCBub3c7IHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0IHdlCisJCSMgcmVjdXJzaXZlbHkgbm90aWNlIHRoZSBicm9rZW4gb2JqZWN0cworCQkjIGJlY2F1c2UgdGhleSBhcmUgcmVhY2hhYmxlIGZyb20gcmVmcywgbm90IGJlY2F1c2UKKwkJIyB0aGV5IGFyZSBpbiB0aGUgaW5kZXguCisJCXJtIC1mIC5naXQvaW5kZXggJiYKKworCQkjIGNvcnJ1cHQgdGhlIGJsb2IsIGJ1dCBpbiBhIHdheSB0aGF0IHdlIGNhbiBzdGlsbCBpZGVudGlmeQorCQkjIGl0cyB0eXBlLiBUaGF0IGxldHMgdXMgc2VlIHRoYXQgLS1jb25uZWN0aXZpdHktb25seSBpcworCQkjIG5vdCBhY3R1YWxseSBsb29raW5nIGF0IHRoZSBjb250ZW50cywgYnV0IGxlYXZlcyBpdAorCQkjIGZyZWUgdG8gZXhhbWluZSB0aGUgdHlwZSBpZiBpdCBjaG9vc2VzLgorCQllbXB0eT0uZ2l0L29iamVjdHMvJCh0ZXN0X29pZF90b19wYXRoICRFTVBUWV9CTE9CKSAmJgorCQlibG9iPSQoZWNobyB1bnJlbGF0ZWQgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwkJbXYgLWYgJChzaGExX2ZpbGUgJGJsb2IpICRlbXB0eSAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIC0tc3RyaWN0ICYmCisJCWdpdCBmc2NrIC0tc3RyaWN0IC0tY29ubmVjdGl2aXR5LW9ubHkgJiYKKwkJdHJlZT0kKGdpdCByZXYtcGFyc2UgSEVBRDopICYmCisJCXN1ZmZpeD0ke3RyZWUjPz99ICYmCisJCXRyZWU9LmdpdC9vYmplY3RzLyR7dHJlZSUkc3VmZml4fS8kc3VmZml4ICYmCisJCXJtIC1mICR0cmVlICYmCisJCWVjaG8gaW52YWxpZCA+JHRyZWUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS1zdHJpY3QgLS1jb25uZWN0aXZpdHktb25seQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayAtLWNvbm5lY3Rpdml0eS1vbmx5IHdpdGggZXhwbGljaXQgaGVhZCcgJworCXJtIC1yZiBjb25uZWN0aXZpdHktb25seSAmJgorCWdpdCBpbml0IGNvbm5lY3Rpdml0eS1vbmx5ICYmCisJKAorCQljZCBjb25uZWN0aXZpdHktb25seSAmJgorCQl0ZXN0X2NvbW1pdCBmb28gJiYKKwkJcm0gLWYgLmdpdC9pbmRleCAmJgorCQl0cmVlPSQoZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSkgJiYKKwkJcmVtb3ZlX29iamVjdCAkKGdpdCByZXYtcGFyc2UgSEVBRDpmb28udCkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS1jb25uZWN0aXZpdHktb25seSAkdHJlZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayAtLW5hbWUtb2JqZWN0cycgJworCXJtIC1yZiBuYW1lLW9iamVjdHMgJiYKKwlnaXQgaW5pdCBuYW1lLW9iamVjdHMgJiYKKwkoCisJCWNkIG5hbWUtb2JqZWN0cyAmJgorCQl0ZXN0X2NvbW1pdCBqdWxpdXMgY2Flc2FyLnQgJiYKKwkJdGVzdF9jb21taXQgYXVndXN0dXMgJiYKKwkJdGVzdF9jb21taXQgY2Flc2FyICYmCisJCXJlbW92ZV9vYmplY3QgJChnaXQgcmV2LXBhcnNlIGp1bGl1czpjYWVzYXIudCkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS1uYW1lLW9iamVjdHMgPm91dCAmJgorCQl0cmVlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBqdWxpdXM6KSAmJgorCQl0ZXN0X2kxOG5ncmVwICIkdHJlZSAocmVmcy90YWdzL2p1bGl1czoiIG91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWx0ZXJuYXRlIG9iamVjdHMgYXJlIGNvcnJlY3RseSBibGFtZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBhbHQuZ2l0IC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiICYmCisJbmFtZT0kKHRlc3Rfb2lkIG51bWVyaWMpICYmCisJcGF0aD0kKHRlc3Rfb2lkX3RvX3BhdGggIiRuYW1lIikgJiYKKwlnaXQgaW5pdCAtLWJhcmUgYWx0LmdpdCAmJgorCWVjaG8gIi4uLy4uL2FsdC5naXQvb2JqZWN0cyIgPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwlta2RpciBhbHQuZ2l0L29iamVjdHMvJChkaXJuYW1lICRwYXRoKSAmJgorCT5hbHQuZ2l0L29iamVjdHMvJChkaXJuYW1lICRwYXRoKS8kKGJhc2VuYW1lICRwYXRoKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrID5vdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgYWx0LmdpdCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBlcnJvcnMgaW4gcGFja2VkIG9iamVjdHMnICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmJhc2lzICYmCisJc2VkICJzLzwvb25lLyIgYmFzaXMgPm9uZSAmJgorCXNlZCAicy88L2Zvby8iIGJhc2lzID50d28gJiYKKwlvbmU9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IG9uZSkgJiYKKwl0d289JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IHR3bykgJiYKKwlwYWNrPSQoCisJCXsKKwkJCWVjaG8gJG9uZSAmJgorCQkJZWNobyAkdHdvCisJCX0gfCBnaXQgcGFjay1vYmplY3RzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2sKKwkpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSRwYWNrLioiICYmCisJcmVtb3ZlX29iamVjdCAkb25lICYmCisJcmVtb3ZlX29iamVjdCAkdHdvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciBpbiBjb21taXQgJG9uZS4qIC0gYmFkIG5hbWUiIG91dCAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yIGluIGNvbW1pdCAkdHdvLiogLSBiYWQgbmFtZSIgb3V0ICYmCisJISBncmVwIGNvcnJ1cHQgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgZmFpbHMgb24gY29ycnVwdCBwYWNrZmlsZScgJworCWhzaD0kKGdpdCBjb21taXQtdHJlZSAtbSBteWNvbW1pdCBIRUFEXnt0cmVlfSkgJiYKKwlwYWNrPSQoZWNobyAkaHNoIHwgZ2l0IHBhY2stb2JqZWN0cyAuZ2l0L29iamVjdHMvcGFjay9wYWNrKSAmJgorCisJIyBDb3JydXB0IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBmaXJzdCBvYmplY3QuIChJdCBjb250YWlucyAzIHR5cGUgYml0cywKKwkjIGF0IGxlYXN0IG9uZSBvZiB3aGljaCBpcyBub3QgemVybywgc28gc2V0dGluZyB0aGUgZmlyc3QgYnl0ZSB0byAwIGlzCisJIyBzdWZmaWNpZW50LikKKwljaG1vZCBhK3cgLmdpdC9vYmplY3RzL3BhY2svcGFjay0kcGFjay5wYWNrICYmCisJcHJpbnRmICdcMCcgfCBkZCBvZj0uZ2l0L29iamVjdHMvcGFjay9wYWNrLSRwYWNrLnBhY2sgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz0xMiAmJgorCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSRwYWNrLioiICYmCisJcmVtb3ZlX29iamVjdCAkaHNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJjaGVja3N1bSBtaXNtYXRjaCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgZmluZHMgcHJvYmxlbXMgaW4gZHVwbGljYXRlIGxvb3NlIG9iamVjdHMnICcKKwlybSAtcmYgYnJva2VuLWR1cGxpY2F0ZSAmJgorCWdpdCBpbml0IGJyb2tlbi1kdXBsaWNhdGUgJiYKKwkoCisJCWNkIGJyb2tlbi1kdXBsaWNhdGUgJiYKKwkJdGVzdF9jb21taXQgZHVwbGljYXRlICYmCisJCSMgbm8gIi1kIiBoZXJlLCBzbyB3ZSBlbmQgdXAgd2l0aCBkdXBsaWNhdGVzCisJCWdpdCByZXBhY2sgJiYKKwkJIyBub3cgY29ycnVwdCB0aGUgbG9vc2UgY29weQorCQlmaWxlPSQoc2hhMV9maWxlICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiKSAmJgorCQlybSAiJGZpbGUiICYmCisJCWVjaG8gYnJva2VuID4iJGZpbGUiICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGRldGVjdHMgdHJhaWxpbmcgbG9vc2UgZ2FyYmFnZSAoY29tbWl0KScgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YmFzaXMgJiYKKwllY2hvIGJ1bXAtY29tbWl0LXNoYTEgPj5iYXNpcyAmJgorCWNvbW1pdD0kKGdpdCBoYXNoLW9iamVjdCAtdyAtdCBjb21taXQgYmFzaXMpICYmCisJZmlsZT0kKHNoYTFfZmlsZSAkY29tbWl0KSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkY29tbWl0IiAmJgorCWNobW9kICt3ICIkZmlsZSIgJiYKKwllY2hvIGdhcmJhZ2UgPj4iJGZpbGUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJnYXJiYWdlLiokY29tbWl0IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBkZXRlY3RzIHRyYWlsaW5nIGxvb3NlIGdhcmJhZ2UgKGxhcmdlIGJsb2IpJyAnCisJYmxvYj0kKGVjaG8gdHJhaWxpbmcgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlmaWxlPSQoc2hhMV9maWxlICRibG9iKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkYmxvYiIgJiYKKwljaG1vZCArdyAiJGZpbGUiICYmCisJZWNobyBnYXJiYWdlID4+IiRmaWxlIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQ9NSBmc2NrIDI+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiZ2FyYmFnZS4qJGJsb2IiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGRldGVjdHMgdHJ1bmNhdGVkIGxvb3NlIG9iamVjdCcgJworCSMgbWFrZSBpdCBiaWcgZW5vdWdoIHRoYXQgd2Uga25vdyB3ZSB3aWxsIHRydW5jYXRlIGluIHRoZSBkYXRhCisJIyBwb3J0aW9uLCBub3QgdGhlIGhlYWRlcgorCXRlc3QtdG9vbCBnZW5yYW5kb20gdHJ1bmNhdGUgNDA5NiA+ZmlsZSAmJgorCWJsb2I9JChnaXQgaGFzaC1vYmplY3QgLXcgZmlsZSkgJiYKKwlmaWxlPSQoc2hhMV9maWxlICRibG9iKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkYmxvYiIgJiYKKwl0ZXN0X2NvcHlfYnl0ZXMgMTAyNCA8IiRmaWxlIiA+dG1wICYmCisJcm0gIiRmaWxlIiAmJgorCW12IC1mIHRtcCAiJGZpbGUiICYmCisKKwkjIGNoZWNrIGJvdGggcmVndWxhciBhbmQgc3RyZWFtaW5nIGNvZGUgcGF0aHMKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgY29ycnVwdC4qJGJsb2Igb3V0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgY29yZS5iaWdmaWxldGhyZXNob2xkPTEyOCBmc2NrIDI+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCBjb3JydXB0LiokYmxvYiBvdXQKKycKKworIyBmb3IgZWFjaCBvZiB0eXBlLCB3ZSBoYXZlIG9uZSB2ZXJzaW9uIHdoaWNoIGlzIHJlZmVyZW5jZWQgYnkgYW5vdGhlciBvYmplY3QKKyMgKGFuZCBzbyB3aGlsZSB1bnJlYWNoYWJsZSwgbm90IGRhbmdsaW5nKSwgYW5kIGFub3RoZXIgdmFyaWFudCB3aGljaCByZWFsbHkgaXMKKyMgZGFuZ2xpbmcuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZGFuZ2xpbmctb2JqZWN0IHJlcG9zaXRvcnknICcKKwlnaXQgaW5pdCBkYW5nbGluZyAmJgorCSgKKwkJY2QgZGFuZ2xpbmcgJiYKKwkJYmxvYj0kKGVjaG8gbm90LWRhbmdsaW5nIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJCWRibG9iPSQoZWNobyBkYW5nbGluZyB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCQl0cmVlPSQocHJpbnRmICIxMDA2NDQgYmxvYiAlc1x0JXNcbiIgJGJsb2Igb25lIHwgZ2l0IG1rdHJlZSkgJiYKKwkJZHRyZWU9JChwcmludGYgIjEwMDY0NCBibG9iICVzXHQlc1xuIiAkYmxvYiB0d28gfCBnaXQgbWt0cmVlKSAmJgorCQljb21taXQ9JChnaXQgY29tbWl0LXRyZWUgJHRyZWUpICYmCisJCWRjb21taXQ9JChnaXQgY29tbWl0LXRyZWUgLXAgJGNvbW1pdCAkdHJlZSkgJiYKKworCQljYXQgPmV4cGVjdCA8PC1FT0YKKwkJZGFuZ2xpbmcgYmxvYiAkZGJsb2IKKwkJZGFuZ2xpbmcgY29tbWl0ICRkY29tbWl0CisJCWRhbmdsaW5nIHRyZWUgJGR0cmVlCisJCUVPRgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBub3RpY2VzIGRhbmdsaW5nIG9iamVjdHMnICcKKwkoCisJCWNkIGRhbmdsaW5nICYmCisJCWdpdCBmc2NrID5hY3R1YWwgJiYKKwkJIyB0aGUgb3V0cHV0IG9yZGVyIGlzIG5vbi1kZXRlcm1pbmlzdGljLCBhcyBpdCBjb21lcyBmcm9tIGEgaGFzaAorCQlzb3J0IDxhY3R1YWwgPmFjdHVhbC5zb3J0ZWQgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwuc29ydGVkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIC0tY29ubmVjdGl2aXR5LW9ubHkgbm90aWNlcyBkYW5nbGluZyBvYmplY3RzJyAnCisJKAorCQljZCBkYW5nbGluZyAmJgorCQlnaXQgZnNjayAtLWNvbm5lY3Rpdml0eS1vbmx5ID5hY3R1YWwgJiYKKwkJIyB0aGUgb3V0cHV0IG9yZGVyIGlzIG5vbi1kZXRlcm1pbmlzdGljLCBhcyBpdCBjb21lcyBmcm9tIGEgaGFzaAorCQlzb3J0IDxhY3R1YWwgPmFjdHVhbC5zb3J0ZWQgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwuc29ydGVkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrICRuYW1lIG5vdGljZXMgYm9ndXMgJG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayBib2d1cyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrICRaRVJPX09JRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdib2d1cyBoZWFkIGRvZXMgbm90IGZhbGxiYWNrIHRvIGFsbCBoZWFkcycgJworCSMgc2V0IHVwIGEgY2FzZSB0aGF0IHdpbGwgY2F1c2UgYSByZWFjaGFiaWxpdHkgY29tcGxhaW50CisJZWNobyB0by1iZS1kZWxldGVkID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWJsb2I9JChnaXQgcmV2LXBhcnNlIDpmb28pICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcm0gLS1jYWNoZWQgZm9vIiAmJgorCXJlbW92ZV9vYmplY3QgJGJsb2IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAkWkVST19PSUQgPm91dCAyPiYxICYmCisJISBncmVwICRibG9iIG91dAorJworCisjIENvcnJ1cHQgdGhlIGNoZWNrc3VtIG9uIHRoZSBpbmRleC4KKyMgQWRkIDEgdG8gdGhlIGxhc3QgYnl0ZSBpbiB0aGUgU0hBLgorY29ycnVwdF9pbmRleF9jaGVja3N1bSAoKSB7CisgICAgcGVybCAtdyAtZSAnCisJdXNlIEZjbnRsICI6c2VlayI7CisJb3BlbiBteSAkZmgsICIrPCIsICIuZ2l0L2luZGV4IiBvciBkaWUgIm9wZW46ICQhIjsKKwliaW5tb2RlICRmaDsKKwlzZWVrICRmaCwgLTEsIFNFRUtfRU5EIG9yIGRpZSAic2VlazogJCEiOworCXJlYWQgJGZoLCBteSAkaW5fYnl0ZSwgMSBvciBkaWUgInJlYWQ6ICQhIjsKKworCSRpbl92YWx1ZSA9IHVucGFjaygiQyIsICRpbl9ieXRlKTsKKwkkb3V0X3ZhbHVlID0gKCRpbl92YWx1ZSArIDEpICYgMjU1OworCisJJG91dF9ieXRlID0gcGFjaygiQyIsICRvdXRfdmFsdWUpOworCisJc2VlayAkZmgsIC0xLCBTRUVLX0VORCBvciBkaWUgInNlZWs6ICQhIjsKKwlwcmludCAkZmggJG91dF9ieXRlOworCWNsb3NlICRmaCBvciBkaWUgImNsb3NlOiAkISI7CisgICAgJworfQorCisjIENvcnJ1cHQgdGhlIGNoZWNrc3VtIG9uIHRoZSBpbmRleCBhbmQgdGhlbgorIyB2ZXJpZnkgdGhhdCBvbmx5IGZzY2sgbm90aWNlcy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBjb3JydXB0IGluZGV4IGZpbGUgaW4gZnNjaycgJworCWNwIC5naXQvaW5kZXggLmdpdC9pbmRleC5iYWNrdXAgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIm12IC5naXQvaW5kZXguYmFja3VwIC5naXQvaW5kZXgiICYmCisJY29ycnVwdF9pbmRleF9jaGVja3N1bSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIC0tY2FjaGUgMj5lcnJvcnMgJiYKKwl0ZXN0X2kxOG5ncmVwICJiYWQgaW5kZXggZmlsZSIgZXJyb3JzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUwMC1yZXYtcGFyc2Uuc2ggYi90L3QxNTAwLXJldi1wYXJzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MDMwMTliCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTUwMC1yZXYtcGFyc2Uuc2gKQEAgLTAsMCArMSwxODkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCByZXYtcGFyc2UnCisuIC4vdGVzdC1saWIuc2gKKworIyB1c2FnZTogW29wdGlvbnNdIGxhYmVsIGlzLWJhcmUgaXMtaW5zaWRlLWdpdCBpcy1pbnNpZGUtd29yayBwcmVmaXggZ2l0LWRpciBhYnNvbHV0ZS1naXQtZGlyCit0ZXN0X3Jldl9wYXJzZSAoKSB7CisJZD0KKwliYXJlPQorCWdpdGRpcj0KKwl3aGlsZSA6CisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1DKSBkPSIkMiI7IHNoaWZ0OyBzaGlmdCA7OworCQktYikgY2FzZSAiJDIiIGluCisJCSAgICBbdGZ1XSopIGJhcmU9IiQyIjsgc2hpZnQ7IHNoaWZ0IDs7CisJCSAgICAqKSBlcnJvciAidGVzdF9yZXZfcGFyc2U6IGJvZ3VzIGNvcmUuYmFyZSB2YWx1ZSAnJDInIiA7OworCQkgICAgZXNhYyA7OworCQktZykgZ2l0ZGlyPSIkMiI7IHNoaWZ0OyBzaGlmdCA7OworCQktKikgZXJyb3IgInRlc3RfcmV2X3BhcnNlOiB1bnJlY29nbml6ZWQgb3B0aW9uICckMSciIDs7CisJCSopIGJyZWFrIDs7CisJCWVzYWMKKwlkb25lCisKKwluYW1lPSQxCisJc2hpZnQKKworCWZvciBvIGluIC0taXMtYmFyZS1yZXBvc2l0b3J5IFwKKwkJIC0taXMtaW5zaWRlLWdpdC1kaXIgXAorCQkgLS1pcy1pbnNpZGUtd29yay10cmVlIFwKKwkJIC0tc2hvdy1wcmVmaXggXAorCQkgLS1naXQtZGlyIFwKKwkJIC0tYWJzb2x1dGUtZ2l0LWRpcgorCWRvCisJCXRlc3QgJCMgLWVxIDAgJiYgYnJlYWsKKwkJZXhwZWN0PSIkMSIKKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWU6ICRvIiAnCisJCQlpZiB0ZXN0IC1uICIkZ2l0ZGlyIgorCQkJdGhlbgorCQkJCXRlc3Rfd2hlbl9maW5pc2hlZCAidW5zZXQgR0lUX0RJUiIgJiYKKwkJCQlHSVRfRElSPSIkZ2l0ZGlyIiAmJgorCQkJCWV4cG9ydCBHSVRfRElSCisJCQlmaSAmJgorCisJCQljYXNlICIkYmFyZSIgaW4KKwkJCXQqKSB0ZXN0X2NvbmZpZyAke2Q6Ky1DfSAke2Q6KyIkZCJ9IGNvcmUuYmFyZSB0cnVlIDs7CisJCQlmKikgdGVzdF9jb25maWcgJHtkOistQ30gJHtkOisiJGQifSBjb3JlLmJhcmUgZmFsc2UgOzsKKwkJCXUqKSB0ZXN0X3VuY29uZmlnICR7ZDorLUN9ICR7ZDorIiRkIn0gY29yZS5iYXJlIDs7CisJCQllc2FjICYmCisKKwkJCWVjaG8gIiRleHBlY3QiID5leHBlY3QgJiYKKwkJCWdpdCAke2Q6Ky1DfSAke2Q6KyIkZCJ9IHJldi1wYXJzZSAkbyA+YWN0dWFsICYmCisJCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJCScKKwkJc2hpZnQKKwlkb25lCit9CisKK1JPT1Q9JChwd2QpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9vaWRfaW5pdCAmJgorCW1rZGlyIC1wIHN1Yi9kaXIgd29yayAmJgorCWNwIC1SIC5naXQgcmVwby5naXQKKycKKwordGVzdF9yZXZfcGFyc2UgdG9wbGV2ZWwgZmFsc2UgZmFsc2UgdHJ1ZSAnJyAuZ2l0ICIkUk9PVC8uZ2l0IgorCit0ZXN0X3Jldl9wYXJzZSAtQyAuZ2l0IC5naXQvIGZhbHNlIHRydWUgZmFsc2UgJycgLiAiJFJPT1QvLmdpdCIKK3Rlc3RfcmV2X3BhcnNlIC1DIC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvIGZhbHNlIHRydWUgZmFsc2UgJycgIiRST09ULy5naXQiICIkUk9PVC8uZ2l0IgorCit0ZXN0X3Jldl9wYXJzZSAtQyBzdWIvZGlyIHN1YmRpcmVjdG9yeSBmYWxzZSBmYWxzZSB0cnVlIHN1Yi9kaXIvICIkUk9PVC8uZ2l0IiAiJFJPT1QvLmdpdCIKKwordGVzdF9yZXZfcGFyc2UgLWIgdCAnY29yZS5iYXJlID0gdHJ1ZScgdHJ1ZSBmYWxzZSBmYWxzZQorCit0ZXN0X3Jldl9wYXJzZSAtYiB1ICdjb3JlLmJhcmUgdW5kZWZpbmVkJyBmYWxzZSBmYWxzZSB0cnVlCisKKwordGVzdF9yZXZfcGFyc2UgLUMgd29yayAtZyAuLi8uZ2l0IC1iIGYgJ0dJVF9ESVI9Li4vLmdpdCwgY29yZS5iYXJlID0gZmFsc2UnIGZhbHNlIGZhbHNlIHRydWUgJycgIi4uLy5naXQiICIkUk9PVC8uZ2l0IgorCit0ZXN0X3Jldl9wYXJzZSAtQyB3b3JrIC1nIC4uLy5naXQgLWIgdCAnR0lUX0RJUj0uLi8uZ2l0LCBjb3JlLmJhcmUgPSB0cnVlJyB0cnVlIGZhbHNlIGZhbHNlICcnCisKK3Rlc3RfcmV2X3BhcnNlIC1DIHdvcmsgLWcgLi4vLmdpdCAtYiB1ICdHSVRfRElSPS4uLy5naXQsIGNvcmUuYmFyZSB1bmRlZmluZWQnIGZhbHNlIGZhbHNlIHRydWUgJycKKworCit0ZXN0X3Jldl9wYXJzZSAtQyB3b3JrIC1nIC4uL3JlcG8uZ2l0IC1iIGYgJ0dJVF9ESVI9Li4vcmVwby5naXQsIGNvcmUuYmFyZSA9IGZhbHNlJyBmYWxzZSBmYWxzZSB0cnVlICcnICIuLi9yZXBvLmdpdCIgIiRST09UL3JlcG8uZ2l0IgorCit0ZXN0X3Jldl9wYXJzZSAtQyB3b3JrIC1nIC4uL3JlcG8uZ2l0IC1iIHQgJ0dJVF9ESVI9Li4vcmVwby5naXQsIGNvcmUuYmFyZSA9IHRydWUnIHRydWUgZmFsc2UgZmFsc2UgJycKKwordGVzdF9yZXZfcGFyc2UgLUMgd29yayAtZyAuLi9yZXBvLmdpdCAtYiB1ICdHSVRfRElSPS4uL3JlcG8uZ2l0LCBjb3JlLmJhcmUgdW5kZWZpbmVkJyBmYWxzZSBmYWxzZSB0cnVlICcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1jb21tb24tZGlyIGZyb20gd29ya3RyZWUgcm9vdCcgJworCWVjaG8gLmdpdCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAtLWdpdC1jb21tb24tZGlyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1jb21tb24tZGlyIGluc2lkZSBzdWItZGlyJyAnCisJbWtkaXIgLXAgcGF0aC90by9jaGlsZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHBhdGgiICYmCisJZWNobyAiJChnaXQgLUMgcGF0aC90by9jaGlsZCByZXYtcGFyc2UgLS1zaG93LWNkdXApLmdpdCIgPmV4cGVjdCAmJgorCWdpdCAtQyBwYXRoL3RvL2NoaWxkIHJldi1wYXJzZSAtLWdpdC1jb21tb24tZGlyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1wYXRoIGZyb20gd29ya3RyZWUgcm9vdCcgJworCWVjaG8gLmdpdC9vYmplY3RzID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIC0tZ2l0LXBhdGggb2JqZWN0cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtcGF0aCBpbnNpZGUgc3ViLWRpcicgJworCW1rZGlyIC1wIHBhdGgvdG8vY2hpbGQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBwYXRoIiAmJgorCWVjaG8gIiQoZ2l0IC1DIHBhdGgvdG8vY2hpbGQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwKS5naXQvb2JqZWN0cyIgPmV4cGVjdCAmJgorCWdpdCAtQyBwYXRoL3RvL2NoaWxkIHJldi1wYXJzZSAtLWdpdC1wYXRoIG9iamVjdHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0taXMtc2hhbGxvdy1yZXBvc2l0b3J5IGluIHNoYWxsb3cgcmVwbycgJworCXRlc3RfY29tbWl0IHRlc3RfY29tbWl0ICYmCisJZWNobyB0cnVlID5leHBlY3QgJiYKKwlnaXQgY2xvbmUgLS1kZXB0aCAxIC0tbm8tbG9jYWwgLiBzaGFsbG93ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc2hhbGxvdyIgJiYKKwlnaXQgLUMgc2hhbGxvdyByZXYtcGFyc2UgLS1pcy1zaGFsbG93LXJlcG9zaXRvcnkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0taXMtc2hhbGxvdy1yZXBvc2l0b3J5IGluIG5vbi1zaGFsbG93IHJlcG8nICcKKwllY2hvIGZhbHNlID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIC0taXMtc2hhbGxvdy1yZXBvc2l0b3J5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLXNob3ctb2JqZWN0LWZvcm1hdCBpbiByZXBvJyAnCisJZWNobyAiJCh0ZXN0X29pZCBhbGdvKSIgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLS1zaG93LW9iamVjdC1mb3JtYXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc2hvdy1vYmplY3QtZm9ybWF0PXN0b3JhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc2hvdy1vYmplY3QtZm9ybWF0PWlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAtLXNob3ctb2JqZWN0LWZvcm1hdD1vdXRwdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tc2hvdy1vYmplY3QtZm9ybWF0PXNxdWVhbWlzaC1vc3NpZnJhZ2UgMj5lcnIgJiYKKwlncmVwICJ1bmtub3duIG1vZGUgZm9yIC0tc2hvdy1vYmplY3QtZm9ybWF0OiBzcXVlYW1pc2gtb3NzaWZyYWdlIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG93LXRvcGxldmVsIGZyb20gc3ViZGlyIG9mIHdvcmtpbmcgdHJlZScgJworCXB3ZCA+ZXhwZWN0ICYmCisJZ2l0IC1DIHN1Yi9kaXIgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctdG9wbGV2ZWwgZnJvbSBpbnNpZGUgLmdpdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyAuZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyB0aGUgc3VwZXJwcm9qZWN0IGNvcnJlY3RseScgJworCWdpdCByZXYtcGFyc2UgLS1zaG93LXN1cGVycHJvamVjdC13b3JraW5nLXRyZWUgPm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKKworCXRlc3RfY3JlYXRlX3JlcG8gc3VwZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdXBlciB0ZXN0X2NvbW1pdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gc3ViICYmCisJdGVzdF9jb21taXQgLUMgc3ViIHRlc3RfY29tbWl0ICYmCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZSBhZGQgLi4vc3ViIGRpci9zdWIgJiYKKwllY2hvICQocHdkKS9zdXBlciA+ZXhwZWN0ICAmJgorCWdpdCAtQyBzdXBlci9kaXIvc3ViIHJldi1wYXJzZSAtLXNob3ctc3VwZXJwcm9qZWN0LXdvcmtpbmctdHJlZSA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dCAmJgorCisJdGVzdF9jb21taXQgLUMgc3VwZXIgc3VibW9kdWxlX2FkZCAmJgorCWdpdCAtQyBzdXBlciBjaGVja291dCAtYiBicmFuY2gxICYmCisJZ2l0IC1DIHN1cGVyL2Rpci9zdWIgY2hlY2tvdXQgLWIgYnJhbmNoMSAmJgorCXRlc3RfY29tbWl0IC1DIHN1cGVyL2Rpci9zdWIgYnJhbmNoMV9jb21taXQgJiYKKwlnaXQgLUMgc3VwZXIgYWRkIGRpci9zdWIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdXBlciBicmFuY2gxX2NvbW1pdCAmJgorCWdpdCAtQyBzdXBlciBjaGVja291dCAtYiBicmFuY2gyIG1hc3RlciAmJgorCWdpdCAtQyBzdXBlci9kaXIvc3ViIGNoZWNrb3V0IC1iIGJyYW5jaDIgbWFzdGVyICYmCisJdGVzdF9jb21taXQgLUMgc3VwZXIvZGlyL3N1YiBicmFuY2gyX2NvbW1pdCAmJgorCWdpdCAtQyBzdXBlciBhZGQgZGlyL3N1YiAmJgorCXRlc3RfY29tbWl0IC1DIHN1cGVyIGJyYW5jaDJfY29tbWl0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1cGVyIG1lcmdlIGJyYW5jaDEgJiYKKworCWdpdCAtQyBzdXBlci9kaXIvc3ViIHJldi1wYXJzZSAtLXNob3ctc3VwZXJwcm9qZWN0LXdvcmtpbmctdHJlZSA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDEtd29yay10cmVlLnNoIGIvdC90MTUwMS13b3JrLXRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjc1NTU4MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDEtd29yay10cmVlLnNoCkBAIC0wLDAgKzEsNDQ2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBzZXBhcmF0ZSB3b3JrIHRyZWUnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlFTVBUWV9UUkVFPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJRU1QVFlfQkxPQj0kKGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC0tc3RkaW4gPC9kZXYvbnVsbCkgJiYKKwlDSEFOR0VEX0JMT0I9JChlY2hvIGNoYW5nZWQgfCBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtLXN0ZGluKSAmJgorCUVNUFRZX0JMT0I3PSQoZWNobyAkRU1QVFlfQkxPQiB8IHNlZCAicy9cKC4uLi4uLi5cKS4qL1wxLyIpICYmCisJQ0hBTkdFRF9CTE9CNz0kKGVjaG8gJENIQU5HRURfQkxPQiB8IHNlZCAicy9cKC4uLi4uLi5cKS4qL1wxLyIpICYmCisKKwlta2RpciAtcCB3b3JrL3N1Yi9kaXIgJiYKKwlta2RpciAtcCB3b3JrMiAmJgorCW12IC5naXQgcmVwby5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGhlbHBlciBmb3IgdGVzdGluZyByZXYtcGFyc2UnICcKKwl0ZXN0X3Jldl9wYXJzZSgpIHsKKwkJZWNobyAkMSA+ZXhwZWN0ZWQuYmFyZSAmJgorCQllY2hvICQyID5leHBlY3RlZC5pbnNpZGUtZ2l0ICYmCisJCWVjaG8gJDMgPmV4cGVjdGVkLmluc2lkZS13b3JrdHJlZSAmJgorCQlpZiB0ZXN0ICQjIC1nZSA0CisJCXRoZW4KKwkJCWVjaG8gJDQgPmV4cGVjdGVkLnByZWZpeAorCQlmaSAmJgorCisJCWdpdCByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnkgPmFjdHVhbC5iYXJlICYmCisJCWdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtZ2l0LWRpciA+YWN0dWFsLmluc2lkZS1naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWUgPmFjdHVhbC5pbnNpZGUtd29ya3RyZWUgJiYKKwkJaWYgdGVzdCAkIyAtZ2UgNAorCQl0aGVuCisJCQlnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXggPmFjdHVhbC5wcmVmaXgKKwkJZmkgJiYKKworCQl0ZXN0X2NtcCBleHBlY3RlZC5iYXJlIGFjdHVhbC5iYXJlICYmCisJCXRlc3RfY21wIGV4cGVjdGVkLmluc2lkZS1naXQgYWN0dWFsLmluc2lkZS1naXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQuaW5zaWRlLXdvcmt0cmVlIGFjdHVhbC5pbnNpZGUtd29ya3RyZWUgJiYKKwkJaWYgdGVzdCAkIyAtZ2UgNAorCQl0aGVuCisJCQkjIHJldi1wYXJzZSAtLXNob3ctcHJlZml4IHNob3VsZCBvdXRwdXQKKwkJCSMgYSBzaW5nbGUgbmV3bGluZSB3aGVuIGF0IHRoZSB0b3Agb2YgdGhlIHdvcmsgdHJlZSwKKwkJCSMgYnV0IHdlIHRlc3QgZm9yIHRoYXQgc2VwYXJhdGVseS4KKwkJCXRlc3QgLXogIiQ0IiAmJiB0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLnByZWZpeCB8fAorCQkJdGVzdF9jbXAgZXhwZWN0ZWQucHJlZml4IGFjdHVhbC5wcmVmaXgKKwkJZmkKKwl9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBjb3JlLndvcmt0cmVlID0gcmVsYXRpdmUgcGF0aCcgJworCXNhbmVfdW5zZXQgR0lUX1dPUktfVFJFRSAmJgorCUdJVF9ESVI9cmVwby5naXQgJiYKKwlHSVRfQ09ORklHPSIkKHB3ZCkiLyRHSVRfRElSL2NvbmZpZyAmJgorCWV4cG9ydCBHSVRfRElSIEdJVF9DT05GSUcgJiYKKwlnaXQgY29uZmlnIGNvcmUud29ya3RyZWUgLi4vd29yaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRzaWRlJyAnCisJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5zaWRlIHdvcmsgdHJlZScgJworCSgKKwkJY2Qgd29yayAmJgorCQlHSVRfRElSPS4uL3JlcG8uZ2l0ICYmCisJCUdJVF9DT05GSUc9IiQocHdkKSIvJEdJVF9ESVIvY29uZmlnICYmCisJCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIHRydWUgIiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IHByZWZpeCBpcyBhY3R1YWxseSB3cml0dGVuIG91dCcgJworCWVjaG8gPmV4cGVjdGVkICYmCisJKAorCQljZCB3b3JrICYmCisJCUdJVF9ESVI9Li4vcmVwby5naXQgJiYKKwkJR0lUX0NPTkZJRz0iJChwd2QpIi8kR0lUX0RJUi9jb25maWcgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4ID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpciBvZiB3b3JrIHRyZWUnICcKKwkoCisJCWNkIHdvcmsvc3ViL2RpciAmJgorCQlHSVRfRElSPS4uLy4uLy4uL3JlcG8uZ2l0ICYmCisJCUdJVF9DT05GSUc9IiQocHdkKSIvJEdJVF9ESVIvY29uZmlnICYmCisJCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIHRydWUgc3ViL2Rpci8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBjb3JlLndvcmt0cmVlID0gYWJzb2x1dGUgcGF0aCcgJworCXNhbmVfdW5zZXQgR0lUX1dPUktfVFJFRSAmJgorCUdJVF9ESVI9JChwd2QpL3JlcG8uZ2l0ICYmCisJR0lUX0NPTkZJRz0kR0lUX0RJUi9jb25maWcgJiYKKwlleHBvcnQgR0lUX0RJUiBHSVRfQ09ORklHICYmCisJZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlICIkKHB3ZCkvd29yayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0c2lkZScgJworCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIGZhbHNlICYmCisJKAorCQljZCB3b3JrMiAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSBmYWxzZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5zaWRlIHdvcmsgdHJlZScgJworCSgKKwkJY2Qgd29yayAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSB0cnVlICIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgb2Ygd29yayB0cmVlJyAnCisJKAorCQljZCB3b3JrL3N1Yi9kaXIgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgdHJ1ZSBzdWIvZGlyLworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IEdJVF9XT1JLX1RSRUU9cmVsYXRpdmUgKG92ZXJyaWRlIGNvcmUud29ya3RyZWUpJyAnCisJR0lUX0RJUj0kKHB3ZCkvcmVwby5naXQgJiYKKwlHSVRfQ09ORklHPSRHSVRfRElSL2NvbmZpZyAmJgorCWdpdCBjb25maWcgY29yZS53b3JrdHJlZSBub24tZXhpc3RlbnQgJiYKKwlHSVRfV09SS19UUkVFPXdvcmsgJiYKKwlleHBvcnQgR0lUX0RJUiBHSVRfQ09ORklHIEdJVF9XT1JLX1RSRUUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0c2lkZScgJworCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIGZhbHNlICYmCisJKAorCQljZCB3b3JrMiAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSBmYWxzZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5zaWRlIHdvcmsgdHJlZScgJworCSgKKwkJY2Qgd29yayAmJgorCQlHSVRfV09SS19UUkVFPS4gJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgdHJ1ZSAiIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIG9mIHdvcmsgdHJlZScgJworCSgKKwkJY2Qgd29yay9zdWIvZGlyICYmCisJCUdJVF9XT1JLX1RSRUU9Li4vLi4gJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgdHJ1ZSBzdWIvZGlyLworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IEdJVF9XT1JLX1RSRUU9YWJzb2x1dGUsIGJlbG93IGdpdCBkaXInICcKKwltdiB3b3JrIHJlcG8uZ2l0L3dvcmsgJiYKKwltdiB3b3JrMiByZXBvLmdpdC93b3JrMiAmJgorCUdJVF9ESVI9JChwd2QpL3JlcG8uZ2l0ICYmCisJR0lUX0NPTkZJRz0kR0lUX0RJUi9jb25maWcgJiYKKwlHSVRfV09SS19UUkVFPSQocHdkKS9yZXBvLmdpdC93b3JrICYmCisJZXhwb3J0IEdJVF9ESVIgR0lUX0NPTkZJRyBHSVRfV09SS19UUkVFCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291dHNpZGUnICcKKwllY2hvIG91dHNpZGUgJiYKKwl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSBmYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbiByZXBvLmdpdCcgJworCSgKKwkJY2QgcmVwby5naXQgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgdHJ1ZSBmYWxzZQorCSkgJiYKKwkoCisJCWNkIHJlcG8uZ2l0L29iamVjdHMgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgdHJ1ZSBmYWxzZQorCSkgJiYKKwkoCisJCWNkIHJlcG8uZ2l0L3dvcmsyICYmCisJCXRlc3RfcmV2X3BhcnNlIGZhbHNlIHRydWUgZmFsc2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luc2lkZSB3b3JrIHRyZWUnICcKKwkoCisJCWNkIHJlcG8uZ2l0L3dvcmsgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgdHJ1ZSB0cnVlICIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgb2Ygd29yayB0cmVlJyAnCisJKAorCQljZCByZXBvLmdpdC93b3JrL3N1Yi9kaXIgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgdHJ1ZSB0cnVlIHN1Yi9kaXIvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIHdvcmsgdHJlZSBmcm9tIHJlcG8nICcKKwllY2hvIHN1Yi9kaXIvdW50cmFja2VkID5leHBlY3RlZCAmJgorCWNhdCA8PC1cRU9GID5yZXBvLmdpdC93b3JrLy5naXRpZ25vcmUgJiYKKwlleHBlY3RlZC4qCisJYWN0dWFsLioKKwkuZ2l0aWdub3JlCisJRU9GCisJPnJlcG8uZ2l0L3dvcmsvc3ViL2Rpci91bnRyYWNrZWQgJiYKKwkoCisJCWNkIHJlcG8uZ2l0ICYmCisJCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGUtc3RhbmRhcmQgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCB3b3JrIHRyZWUgZnJvbSB3b3JrIHRyZWUnICcKKwllY2hvIHN1Yi9kaXIvdHJhY2tlZCA+ZXhwZWN0ZWQgJiYKKwk+cmVwby5naXQvd29yay9zdWIvZGlyL3RyYWNrZWQgJiYKKwkoCisJCWNkIHJlcG8uZ2l0L3dvcmsvc3ViL2RpciAmJgorCQlnaXQgLS1naXQtZGlyPS4uLy4uLy4uIGFkZCB0cmFja2VkCisJKSAmJgorCSgKKwkJY2QgcmVwby5naXQgJiYKKwkJZ2l0IGxzLWZpbGVzID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19nZW50bHkoKSBncm9rcyByZWxhdGl2ZSBHSVRfRElSICYgR0lUX1dPUktfVFJFRScgJworCSgKKwkJY2QgcmVwby5naXQvd29yay9zdWIvZGlyICYmCisJCUdJVF9ESVI9Li4vLi4vLi4gJiYKKwkJR0lUX1dPUktfVFJFRT0uLi8uLiAmJgorCQlHSVRfUEFHRVI9ICYmCisJCWV4cG9ydCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgR0lUX1BBR0VSICYmCisKKwkJZ2l0IGRpZmYgLS1leGl0LWNvZGUgdHJhY2tlZCAmJgorCQllY2hvIGNoYW5nZWQgPnRyYWNrZWQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1leGl0LWNvZGUgdHJhY2tlZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCByZXNwZWN0cyB3b3JrIHRyZWUgdW5kZXIgLmdpdCBkaXInICcKKwljYXQgPmRpZmYtaW5kZXgtY2FjaGVkLmV4cGVjdGVkIDw8LUVPRiAmJgorCTowMDAwMDAgMTAwNjQ0ICRaRVJPX09JRCAkRU1QVFlfQkxPQiBBCXN1Yi9kaXIvdHJhY2tlZAorCUVPRgorCWNhdCA+ZGlmZi1pbmRleC5leHBlY3RlZCA8PC1FT0YgJiYKKwk6MDAwMDAwIDEwMDY0NCAkWkVST19PSUQgJFpFUk9fT0lEIEEJc3ViL2Rpci90cmFja2VkCisJRU9GCisKKwkoCisJCUdJVF9ESVI9cmVwby5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT1yZXBvLmdpdC93b3JrICYmCisJCWV4cG9ydCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgJiYKKwkJZ2l0IGRpZmYtaW5kZXggJEVNUFRZX1RSRUUgPmRpZmYtaW5kZXguYWN0dWFsICYmCisJCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkICRFTVBUWV9UUkVFID5kaWZmLWluZGV4LWNhY2hlZC5hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZGlmZi1pbmRleC5leHBlY3RlZCBkaWZmLWluZGV4LmFjdHVhbCAmJgorCXRlc3RfY21wIGRpZmYtaW5kZXgtY2FjaGVkLmV4cGVjdGVkIGRpZmYtaW5kZXgtY2FjaGVkLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIHJlc3BlY3RzIHdvcmsgdHJlZSB1bmRlciAuZ2l0IGRpcicgJworCWNhdCA+ZGlmZi1maWxlcy5leHBlY3RlZCA8PC1FT0YgJiYKKwk6MTAwNjQ0IDEwMDY0NCAkRU1QVFlfQkxPQiAkWkVST19PSUQgTQlzdWIvZGlyL3RyYWNrZWQKKwlFT0YKKworCSgKKwkJR0lUX0RJUj1yZXBvLmdpdCAmJgorCQlHSVRfV09SS19UUkVFPXJlcG8uZ2l0L3dvcmsgJiYKKwkJZXhwb3J0IEdJVF9ESVIgR0lUX1dPUktfVFJFRSAmJgorCQlnaXQgZGlmZi1maWxlcyA+ZGlmZi1maWxlcy5hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZGlmZi1maWxlcy5leHBlY3RlZCBkaWZmLWZpbGVzLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiByZXNwZWN0cyB3b3JrIHRyZWUgdW5kZXIgLmdpdCBkaXInICcKKwljYXQgPmRpZmYtVFJFRS5leHBlY3RlZCA8PC1FT0YgJiYKKwlkaWZmIC0tZ2l0IGEvc3ViL2Rpci90cmFja2VkIGIvc3ViL2Rpci90cmFja2VkCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi4kQ0hBTkdFRF9CTE9CNworCS0tLSAvZGV2L251bGwKKwkrKysgYi9zdWIvZGlyL3RyYWNrZWQKKwlAQCAtMCwwICsxIEBACisJK2NoYW5nZWQKKwlFT0YKKwljYXQgPmRpZmYtVFJFRS1jYWNoZWQuZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL3N1Yi9kaXIvdHJhY2tlZCBiL3N1Yi9kaXIvdHJhY2tlZAorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uJEVNUFRZX0JMT0I3CisJRU9GCisJY2F0ID5kaWZmLUZJTEVTLmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9zdWIvZGlyL3RyYWNrZWQgYi9zdWIvZGlyL3RyYWNrZWQKKwlpbmRleCAkRU1QVFlfQkxPQjcuLiRDSEFOR0VEX0JMT0I3IDEwMDY0NAorCS0tLSBhL3N1Yi9kaXIvdHJhY2tlZAorCSsrKyBiL3N1Yi9kaXIvdHJhY2tlZAorCUBAIC0wLDAgKzEgQEAKKwkrY2hhbmdlZAorCUVPRgorCisJKAorCQlHSVRfRElSPXJlcG8uZ2l0ICYmCisJCUdJVF9XT1JLX1RSRUU9cmVwby5naXQvd29yayAmJgorCQlleHBvcnQgR0lUX0RJUiBHSVRfV09SS19UUkVFICYmCisJCWdpdCBkaWZmICRFTVBUWV9UUkVFID5kaWZmLVRSRUUuYWN0dWFsICYmCisJCWdpdCBkaWZmIC0tY2FjaGVkICRFTVBUWV9UUkVFID5kaWZmLVRSRUUtY2FjaGVkLmFjdHVhbCAmJgorCQlnaXQgZGlmZiA+ZGlmZi1GSUxFUy5hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZGlmZi1UUkVFLmV4cGVjdGVkIGRpZmYtVFJFRS5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBkaWZmLVRSRUUtY2FjaGVkLmV4cGVjdGVkIGRpZmYtVFJFRS1jYWNoZWQuYWN0dWFsICYmCisJdGVzdF9jbXAgZGlmZi1GSUxFUy5leHBlY3RlZCBkaWZmLUZJTEVTLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCcgJworCWVjaG8gZGlyL3RyYWNrZWQgPmV4cGVjdGVkLmdyZXAgJiYKKwkoCisJCWNkIHJlcG8uZ2l0L3dvcmsvc3ViICYmCisJCUdJVF9ESVI9Li4vLi4gJiYKKwkJR0lUX1dPUktfVFJFRT0uLiAmJgorCQlleHBvcnQgR0lUX0RJUiBHSVRfV09SS19UUkVFICYmCisJCWdpdCBncmVwIC1sIGNoYW5nZWQgPi4uLy4uLy4uL2FjdHVhbC5ncmVwCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkLmdyZXAgYWN0dWFsLmdyZXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbW1pdCcgJworCSgKKwkJY2QgcmVwby5naXQgJiYKKwkJR0lUX0RJUj0uIEdJVF9XT1JLX1RSRUU9d29yayBnaXQgY29tbWl0IC1hIC1tIGRvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fic29sdXRlIHBhdGhzcGVjIHNob3VsZCBmYWlsIGdyYWNlZnVsbHknICcKKwkoCisJCWNkIHJlcG8uZ2l0ICYmCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53b3JrdHJlZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIEhFQUQgLS0gL2hvbWUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2VfcmVsYXRpdmVfcGF0aCBoYW5kbGVzIGRvdWJsZSBzbGFzaGVzIGluIEdJVF9ESVInICcKKwk+ZHVtbXlfZmlsZSAmJgorCWVjaG8gZ2l0IC0tZ2l0LWRpcj0iJChwd2QpLy9yZXBvLmdpdCIgLS13b3JrLXRyZWU9IiQocHdkKSIgYWRkIGR1bW15X2ZpbGUgJiYKKwlnaXQgLS1naXQtZGlyPSIkKHB3ZCkvL3JlcG8uZ2l0IiAtLXdvcmstdHJlZT0iJChwd2QpIiBhZGQgZHVtbXlfZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSAkR0lUX1dPUktfVFJFRSBhbmQgZ2l0IHN1YnByb2Nlc3NlcycgJworCUdJVF9ESVI9cmVwby5naXQgR0lUX1dPUktfVFJFRT1yZXBvLmdpdC93b3JrIFwKKwl0ZXN0LXRvb2wgc3VicHJvY2VzcyAtLXNldHVwLXdvcmstdHJlZSByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsID5hY3R1YWwgJiYKKwllY2hvICIkKHB3ZCkvcmVwby5naXQvd29yayIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ011bHRpLXdvcmt0cmVlIHNldHVwJyAnCisJbWtkaXIgd29yayAmJgorCW1rZGlyIC1wIHJlcG8uZ2l0L3JlcG9zL2ZvbyAmJgorCWNwIHJlcG8uZ2l0L0hFQUQgcmVwby5naXQvaW5kZXggcmVwby5naXQvcmVwb3MvZm9vICYmCisJeyBjcCByZXBvLmdpdC9zaGFyZWRpbmRleC4qIHJlcG8uZ2l0L3JlcG9zL2ZvbyB8fCA6OyB9ICYmCisJc2FuZV91bnNldCBHSVRfRElSIEdJVF9DT05GSUcgR0lUX1dPUktfVFJFRQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRElSIHNldCAoMSknICcKKwllY2hvICJnaXRkaXI6IHJlcG8uZ2l0L3JlcG9zL2ZvbyIgPmdpdGZpbGUgJiYKKwllY2hvIC4uLy4uID5yZXBvLmdpdC9yZXBvcy9mb28vY29tbW9uZGlyICYmCisJKAorCQljZCB3b3JrICYmCisJCUdJVF9ESVI9Li4vZ2l0ZmlsZSBnaXQgcmV2LXBhcnNlIC0tZ2l0LWNvbW1vbi1kaXIgPmFjdHVhbCAmJgorCQl0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIiRUUkFTSF9ESVJFQ1RPUlkvcmVwby5naXQiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0RJUiBzZXQgKDIpJyAnCisJZWNobyAiZ2l0ZGlyOiByZXBvLmdpdC9yZXBvcy9mb28iID5naXRmaWxlICYmCisJZWNobyAiJChwd2QpL3JlcG8uZ2l0IiA+cmVwby5naXQvcmVwb3MvZm9vL2NvbW1vbmRpciAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlHSVRfRElSPS4uL2dpdGZpbGUgZ2l0IHJldi1wYXJzZSAtLWdpdC1jb21tb24tZGlyID5hY3R1YWwgJiYKKwkJdGVzdC10b29sIHBhdGgtdXRpbHMgcmVhbF9wYXRoICIkVFJBU0hfRElSRUNUT1JZL3JlcG8uZ2l0IiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0F1dG8gZGlzY292ZXJ5JyAnCisJZWNobyAiZ2l0ZGlyOiByZXBvLmdpdC9yZXBvcy9mb28iID4uZ2l0ICYmCisJZWNobyAuLi8uLiA+cmVwby5naXQvcmVwb3MvZm9vL2NvbW1vbmRpciAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgcmV2LXBhcnNlIC0tZ2l0LWNvbW1vbi1kaXIgPmFjdHVhbCAmJgorCQl0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIiRUUkFTSF9ESVJFQ1RPUlkvcmVwby5naXQiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQllY2hvIGhhaGEgPmRhdGExICYmCisJCWdpdCBhZGQgZGF0YTEgJiYKKwkJZ2l0IGxzLWZpbGVzIC0tZnVsbC1uYW1lIDovIHwgZ3JlcCBkYXRhMSA+YWN0dWFsICYmCisJCWVjaG8gd29yay9kYXRhMSA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyRHSVRfRElSL2NvbW1vbiBvdmVycmlkZXMgY29yZS53b3JrdHJlZScgJworCW1rZGlyIGVsc2V3aGVyZSAmJgorCWdpdCAtLWdpdC1kaXI9cmVwby5naXQgY29uZmlnIGNvcmUud29ya3RyZWUgIiRUUkFTSF9ESVJFQ1RPUlkvZWxzZXdoZXJlIiAmJgorCWVjaG8gImdpdGRpcjogcmVwby5naXQvcmVwb3MvZm9vIiA+LmdpdCAmJgorCWVjaG8gLi4vLi4gPnJlcG8uZ2l0L3JlcG9zL2Zvby9jb21tb25kaXIgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLWdpdC1jb21tb24tZGlyID5hY3R1YWwgJiYKKwkJdGVzdC10b29sIHBhdGgtdXRpbHMgcmVhbF9wYXRoICIkVFJBU0hfRElSRUNUT1JZL3JlcG8uZ2l0IiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJZWNobyBoYWhhID5kYXRhMiAmJgorCQlnaXQgYWRkIGRhdGEyICYmCisJCWdpdCBscy1maWxlcyAtLWZ1bGwtbmFtZSA6LyB8IGdyZXAgZGF0YTIgPmFjdHVhbCAmJgorCQllY2hvIHdvcmsvZGF0YTIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICckR0lUX1dPUktfVFJFRSBvdmVycmlkZXMgJEdJVF9ESVIvY29tbW9uJyAnCisJZWNobyAiZ2l0ZGlyOiByZXBvLmdpdC9yZXBvcy9mb28iID4uZ2l0ICYmCisJZWNobyAuLi8uLiA+cmVwby5naXQvcmVwb3MvZm9vL2NvbW1vbmRpciAmJgorCSgKKwkJY2Qgd29yayAmJgorCQllY2hvIGhhaGEgPmRhdGEzICYmCisJCWdpdCAtLWdpdC1kaXI9Li4vLmdpdCAtLXdvcmstdHJlZT0uIGFkZCBkYXRhMyAmJgorCQlnaXQgbHMtZmlsZXMgLS1mdWxsLW5hbWUgLS0gOi8gfCBncmVwIGRhdGEzID5hY3R1YWwgJiYKKwkJZWNobyBkYXRhMyA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIG91dCBncmFjZWZ1bGx5IG9uIGludmFsaWQgJEdJVF9XT1JLX1RSRUUnICcKKwkoCisJCUdJVF9XT1JLX1RSRUU9Ly5pbnZhbGlkL3dvcmsvdHJlZSAmJgorCQlleHBvcnQgR0lUX1dPUktfVFJFRSAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgcmV2LXBhcnNlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZzIHdvcmsgd2l0aCByZWxhdGl2ZSBnaXRkaXIgYW5kIHdvcmsgdHJlZScgJworCWdpdCBpbml0IHJlbGF0aXZlICYmCisJZ2l0IC1DIHJlbGF0aXZlIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG9uZSAmJgorCWdpdCAtQyByZWxhdGl2ZSBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0d28gJiYKKworCUdJVF9ESVI9cmVsYXRpdmUvLmdpdCBHSVRfV09SS19UUkVFPXJlbGF0aXZlIGdpdCByZXNldCBIRUFEXiAmJgorCisJZ2l0IC1DIHJlbGF0aXZlIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZWNobyBvbmUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTAyLXJldi1wYXJzZS1wYXJzZW9wdC5zaCBiL3QvdDE1MDItcmV2LXBhcnNlLXBhcnNlb3B0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE4NTlhYmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTAyLXJldi1wYXJzZS1wYXJzZW9wdC5zaApAQCAtMCwwICsxLDI4NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0JworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9wdGlvbnNwZWMnICcKKwlzZWQgLWUgInMvXnwvLyIgPm9wdGlvbnNwZWMgPDxcRU9GCit8c29tZS1jb21tYW5kIFtvcHRpb25zXSA8YXJncz4uLi4KK3wKK3xzb21lLWNvbW1hbmQgZG9lcyBmb28gYW5kIGJhciEKK3wtLQorfGgsaGVscCAgICBzaG93IHRoZSBoZWxwCit8Cit8Zm9vICAgICAgIHNvbWUgbmlmdHkgb3B0aW9uIC0tZm9vCit8YmFyPSAgICAgIHNvbWUgY29vbCBvcHRpb24gLS1iYXIgd2l0aCBhbiBhcmd1bWVudAorfGIsYmF6ICAgICBhIHNob3J0IGFuZCBsb25nIG9wdGlvbgorfAorfCBBbiBvcHRpb24gZ3JvdXAgSGVhZGVyCit8Qz8gICAgICAgIG9wdGlvbiBDIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnQKK3xkLGRhdGE/ICAgc2hvcnQgYW5kIGxvbmcgb3B0aW9uIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnQKK3wKK3wgQXJndW1lbnQgaGludHMKK3xCPWFyZyAgICAgc2hvcnQgb3B0aW9uIHJlcXVpcmVkIGFyZ3VtZW50Cit8YmFyMj1hcmcgIGxvbmcgb3B0aW9uIHJlcXVpcmVkIGFyZ3VtZW50Cit8ZSxmdXo9d2l0aC1zcGFjZSAgc2hvcnQgYW5kIGxvbmcgb3B0aW9uIHJlcXVpcmVkIGFyZ3VtZW50Cit8cz9zb21lICAgIHNob3J0IG9wdGlvbiBvcHRpb25hbCBhcmd1bWVudAorfGxvbmc/ZGF0YSBsb25nIG9wdGlvbiBvcHRpb25hbCBhcmd1bWVudAorfGcsZmx1Zj9wYXRoICAgICBzaG9ydCBhbmQgbG9uZyBvcHRpb24gb3B0aW9uYWwgYXJndW1lbnQKK3xsb25nZXN0PXZlcnktbG9uZy1hcmd1bWVudC1oaW50ICBhIHZlcnkgbG9uZyBhcmd1bWVudCBoaW50Cit8cGFpcj1rZXk9dmFsdWUgIHdpdGggYW4gZXF1YWxzIHNpZ24gaW4gdGhlIGhpbnQKK3xhc3dpdGNoIGhlbHAgdGU9dCBjb250YWlucz8gZmwqZyBjaGFyYWN0ZXJzIWAKK3xic3dpdGNoPWhpbnQJIGhpbnQgaGFzIHRyYWlsaW5nIHRhYiBjaGFyYWN0ZXIKK3xjc3dpdGNoCSBzd2l0Y2ggaGFzIHRyYWlsaW5nIHRhYiBjaGFyYWN0ZXIKK3xzaG9ydC1oaW50PWEgICAgd2l0aCBhIG9uZSBzeW1ib2wgaGludAorfAorfEV4dHJhcworfGV4dHJhMSAgICBsaW5lIGFib3ZlIHVzZWQgdG8gY2F1c2UgYSBzZWdmYXVsdCBidXQgbm8gbG9uZ2VyIGRvZXMKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvcHRpb25zcGVjLW5vLXN3aXRjaGVzJyAnCisJc2VkIC1lICJzL158Ly8iID5vcHRpb25zcGVjX25vX3N3aXRjaGVzIDw8XEVPRgorfHNvbWUtY29tbWFuZCBbb3B0aW9uc10gPGFyZ3M+Li4uCit8Cit8c29tZS1jb21tYW5kIGRvZXMgZm9vIGFuZCBiYXIhCit8LS0KK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvcHRpb25zcGVjLW9ubHktaGlkZGVuLXN3aXRjaGVzJyAnCisJc2VkIC1lICJzL158Ly8iID5vcHRpb25zcGVjX29ubHlfaGlkZGVuX3N3aXRjaGVzIDw8XEVPRgorfHNvbWUtY29tbWFuZCBbb3B0aW9uc10gPGFyZ3M+Li4uCit8Cit8c29tZS1jb21tYW5kIGRvZXMgZm9vIGFuZCBiYXIhCit8LS0KK3xoaWRkZW4xKiBBIGhpZGRlbiBzd2l0Y2gKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgaGVscCBvdXRwdXQnICcKKwlzZWQgLWUgInMvXnwvLyIgPmV4cGVjdCA8PFxFTkRfRVhQRUNUICYmCit8Y2F0IDw8XEVPRgorfHVzYWdlOiBzb21lLWNvbW1hbmQgW29wdGlvbnNdIDxhcmdzPi4uLgorfAorfCAgICBzb21lLWNvbW1hbmQgZG9lcyBmb28gYW5kIGJhciEKK3wKK3wgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhlIGhlbHAKK3wgICAgLS1mb28gICAgICAgICAgICAgICAgIHNvbWUgbmlmdHkgb3B0aW9uIC0tZm9vCit8ICAgIC0tYmFyIC4uLiAgICAgICAgICAgICBzb21lIGNvb2wgb3B0aW9uIC0tYmFyIHdpdGggYW4gYXJndW1lbnQKK3wgICAgLWIsIC0tYmF6ICAgICAgICAgICAgIGEgc2hvcnQgYW5kIGxvbmcgb3B0aW9uCit8Cit8QW4gb3B0aW9uIGdyb3VwIEhlYWRlcgorfCAgICAtQ1suLi5dICAgICAgICAgICAgICAgb3B0aW9uIEMgd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudAorfCAgICAtZCwgLS1kYXRhWz0uLi5dICAgICAgc2hvcnQgYW5kIGxvbmcgb3B0aW9uIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnQKK3wKK3xBcmd1bWVudCBoaW50cworfCAgICAtQiA8YXJnPiAgICAgICAgICAgICAgc2hvcnQgb3B0aW9uIHJlcXVpcmVkIGFyZ3VtZW50Cit8ICAgIC0tYmFyMiA8YXJnPiAgICAgICAgICBsb25nIG9wdGlvbiByZXF1aXJlZCBhcmd1bWVudAorfCAgICAtZSwgLS1mdXogPHdpdGgtc3BhY2U+Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBhbmQgbG9uZyBvcHRpb24gcmVxdWlyZWQgYXJndW1lbnQKK3wgICAgLXNbPHNvbWU+XSAgICAgICAgICAgIHNob3J0IG9wdGlvbiBvcHRpb25hbCBhcmd1bWVudAorfCAgICAtLWxvbmdbPTxkYXRhPl0gICAgICAgbG9uZyBvcHRpb24gb3B0aW9uYWwgYXJndW1lbnQKK3wgICAgLWcsIC0tZmx1Zls9PHBhdGg+XSAgIHNob3J0IGFuZCBsb25nIG9wdGlvbiBvcHRpb25hbCBhcmd1bWVudAorfCAgICAtLWxvbmdlc3QgPHZlcnktbG9uZy1hcmd1bWVudC1oaW50PgorfCAgICAgICAgICAgICAgICAgICAgICAgICAgYSB2ZXJ5IGxvbmcgYXJndW1lbnQgaGludAorfCAgICAtLXBhaXIgPGtleT12YWx1ZT4gICAgd2l0aCBhbiBlcXVhbHMgc2lnbiBpbiB0aGUgaGludAorfCAgICAtLWFzd2l0Y2ggICAgICAgICAgICAgaGVscCB0ZT10IGNvbnRhaW5zPyBmbCpnIGNoYXJhY3RlcnMhYAorfCAgICAtLWJzd2l0Y2ggPGhpbnQ+ICAgICAgaGludCBoYXMgdHJhaWxpbmcgdGFiIGNoYXJhY3RlcgorfCAgICAtLWNzd2l0Y2ggICAgICAgICAgICAgc3dpdGNoIGhhcyB0cmFpbGluZyB0YWIgY2hhcmFjdGVyCit8ICAgIC0tc2hvcnQtaGludCA8YT4gICAgICB3aXRoIGEgb25lIHN5bWJvbCBoaW50Cit8Cit8RXh0cmFzCit8ICAgIC0tZXh0cmExICAgICAgICAgICAgICBsaW5lIGFib3ZlIHVzZWQgdG8gY2F1c2UgYSBzZWdmYXVsdCBidXQgbm8gbG9uZ2VyIGRvZXMKK3wKK3xFT0YKK0VORF9FWFBFQ1QKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gLWggPiBvdXRwdXQgPCBvcHRpb25zcGVjICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IGhlbHAgb3V0cHV0IG5vIHN3aXRjaGVzJyAnCisJc2VkIC1lICJzL158Ly8iID5leHBlY3QgPDxcRU5EX0VYUEVDVCAmJgorfGNhdCA8PFxFT0YKK3x1c2FnZTogc29tZS1jb21tYW5kIFtvcHRpb25zXSA8YXJncz4uLi4KK3wKK3wgICAgc29tZS1jb21tYW5kIGRvZXMgZm9vIGFuZCBiYXIhCit8Cit8RU9GCitFTkRfRVhQRUNUCisJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tIC1oID4gb3V0cHV0IDwgb3B0aW9uc3BlY19ub19zd2l0Y2hlcyAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCBoZWxwIG91dHB1dCBoaWRkZW4gc3dpdGNoZXMnICcKKwlzZWQgLWUgInMvXnwvLyIgPmV4cGVjdCA8PFxFTkRfRVhQRUNUICYmCit8Y2F0IDw8XEVPRgorfHVzYWdlOiBzb21lLWNvbW1hbmQgW29wdGlvbnNdIDxhcmdzPi4uLgorfAorfCAgICBzb21lLWNvbW1hbmQgZG9lcyBmb28gYW5kIGJhciEKK3wKK3xFT0YKK0VORF9FWFBFQ1QKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gLWggPiBvdXRwdXQgPCBvcHRpb25zcGVjX29ubHlfaGlkZGVuX3N3aXRjaGVzICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IGhlbHAtYWxsIG91dHB1dCBoaWRkZW4gc3dpdGNoZXMnICcKKwlzZWQgLWUgInMvXnwvLyIgPmV4cGVjdCA8PFxFTkRfRVhQRUNUICYmCit8Y2F0IDw8XEVPRgorfHVzYWdlOiBzb21lLWNvbW1hbmQgW29wdGlvbnNdIDxhcmdzPi4uLgorfAorfCAgICBzb21lLWNvbW1hbmQgZG9lcyBmb28gYW5kIGJhciEKK3wKK3wgICAgLS1oaWRkZW4xICAgICAgICAgICAgIEEgaGlkZGVuIHN3aXRjaAorfAorfEVPRgorRU5EX0VYUEVDVAorCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtLWhlbHAtYWxsID4gb3V0cHV0IDwgb3B0aW9uc3BlY19vbmx5X2hpZGRlbl9zd2l0Y2hlcyAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCBpbnZhbGlkIHN3aXRjaCBoZWxwIG91dHB1dCcgJworCXNlZCAtZSAicy9efC8vIiA+ZXhwZWN0IDw8XEVORF9FWFBFQ1QgJiYKK3xlcnJvcjogdW5rbm93biBvcHRpb24gYGRvZXMtbm90LWV4aXN0J1wnJworfHVzYWdlOiBzb21lLWNvbW1hbmQgW29wdGlvbnNdIDxhcmdzPi4uLgorfAorfCAgICBzb21lLWNvbW1hbmQgZG9lcyBmb28gYW5kIGJhciEKK3wKK3wgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhlIGhlbHAKK3wgICAgLS1mb28gICAgICAgICAgICAgICAgIHNvbWUgbmlmdHkgb3B0aW9uIC0tZm9vCit8ICAgIC0tYmFyIC4uLiAgICAgICAgICAgICBzb21lIGNvb2wgb3B0aW9uIC0tYmFyIHdpdGggYW4gYXJndW1lbnQKK3wgICAgLWIsIC0tYmF6ICAgICAgICAgICAgIGEgc2hvcnQgYW5kIGxvbmcgb3B0aW9uCit8Cit8QW4gb3B0aW9uIGdyb3VwIEhlYWRlcgorfCAgICAtQ1suLi5dICAgICAgICAgICAgICAgb3B0aW9uIEMgd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudAorfCAgICAtZCwgLS1kYXRhWz0uLi5dICAgICAgc2hvcnQgYW5kIGxvbmcgb3B0aW9uIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnQKK3wKK3xBcmd1bWVudCBoaW50cworfCAgICAtQiA8YXJnPiAgICAgICAgICAgICAgc2hvcnQgb3B0aW9uIHJlcXVpcmVkIGFyZ3VtZW50Cit8ICAgIC0tYmFyMiA8YXJnPiAgICAgICAgICBsb25nIG9wdGlvbiByZXF1aXJlZCBhcmd1bWVudAorfCAgICAtZSwgLS1mdXogPHdpdGgtc3BhY2U+Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBhbmQgbG9uZyBvcHRpb24gcmVxdWlyZWQgYXJndW1lbnQKK3wgICAgLXNbPHNvbWU+XSAgICAgICAgICAgIHNob3J0IG9wdGlvbiBvcHRpb25hbCBhcmd1bWVudAorfCAgICAtLWxvbmdbPTxkYXRhPl0gICAgICAgbG9uZyBvcHRpb24gb3B0aW9uYWwgYXJndW1lbnQKK3wgICAgLWcsIC0tZmx1Zls9PHBhdGg+XSAgIHNob3J0IGFuZCBsb25nIG9wdGlvbiBvcHRpb25hbCBhcmd1bWVudAorfCAgICAtLWxvbmdlc3QgPHZlcnktbG9uZy1hcmd1bWVudC1oaW50PgorfCAgICAgICAgICAgICAgICAgICAgICAgICAgYSB2ZXJ5IGxvbmcgYXJndW1lbnQgaGludAorfCAgICAtLXBhaXIgPGtleT12YWx1ZT4gICAgd2l0aCBhbiBlcXVhbHMgc2lnbiBpbiB0aGUgaGludAorfCAgICAtLWFzd2l0Y2ggICAgICAgICAgICAgaGVscCB0ZT10IGNvbnRhaW5zPyBmbCpnIGNoYXJhY3RlcnMhYAorfCAgICAtLWJzd2l0Y2ggPGhpbnQ+ICAgICAgaGludCBoYXMgdHJhaWxpbmcgdGFiIGNoYXJhY3RlcgorfCAgICAtLWNzd2l0Y2ggICAgICAgICAgICAgc3dpdGNoIGhhcyB0cmFpbGluZyB0YWIgY2hhcmFjdGVyCit8ICAgIC0tc2hvcnQtaGludCA8YT4gICAgICB3aXRoIGEgb25lIHN5bWJvbCBoaW50Cit8Cit8RXh0cmFzCit8ICAgIC0tZXh0cmExICAgICAgICAgICAgICBsaW5lIGFib3ZlIHVzZWQgdG8gY2F1c2UgYSBzZWdmYXVsdCBidXQgbm8gbG9uZ2VyIGRvZXMKK3wKK0VORF9FWFBFQ1QKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gLS1kb2VzLW5vdC1leGlzdCAxPi9kZXYvbnVsbCAyPm91dHB1dCA8IG9wdGlvbnNwZWMgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3QuMScgIgorCWNhdCA+IGV4cGVjdCA8PEVPRgorc2V0IC0tIC0tZm9vIC0tYmFyICdoYW0nIC1iIC0tYXN3aXRjaCAtLSAnYXJnJworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCcgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtLWZvbyAtLWJhcj1oYW0gLS1iYXogLS1hc3dpdGNoIGFyZyA8IG9wdGlvbnNwZWMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCB3aXRoIG1peGVkIG9wdGlvbnMgYW5kIGFyZ3VtZW50cycgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtLWZvbyBhcmcgLS1iYXI9aGFtIC0tYmF6IC0tYXN3aXRjaCA8IG9wdGlvbnNwZWMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdC4yJyAiCisJY2F0ID4gZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1mb28gLS0gJ2FyZycgJy0tYmFyPWhhbScKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgd2l0aCAtLScgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtLWZvbyAtLSBhcmcgLS1iYXI9aGFtIDwgb3B0aW9uc3BlYyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IC0tc3RvcC1hdC1ub24tb3B0aW9uJyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tc3RvcC1hdC1ub24tb3B0aW9uIC0tIC0tZm9vIGFyZyAtLWJhcj1oYW0gPCBvcHRpb25zcGVjID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3QuMycgIgorCWNhdCA+IGV4cGVjdCA8PEVPRgorc2V0IC0tIC0tZm9vIC0tICctLScgJ2FyZycgJy0tYmFyPWhhbScKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgLS1rZWVwLWRhc2hkYXNoJyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0ta2VlcC1kYXNoZGFzaCAtLSAtLWZvbyAtLSBhcmcgLS1iYXI9aGFtIDwgb3B0aW9uc3BlYyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0LjQnICIKKwljYXQgPmV4cGVjdCA8PEVPRgorc2V0IC0tIC0tZm9vIC0tICctLScgJ2FyZycgJy0tc3BhbT1oYW0nCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IC0ta2VlcC1kYXNoZGFzaCAtLXN0b3AtYXQtbm9uLW9wdGlvbiB3aXRoIC0tJyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0ta2VlcC1kYXNoZGFzaCAtLXN0b3AtYXQtbm9uLW9wdGlvbiAtLSAtLWZvbyAtLSBhcmcgLS1zcGFtPWhhbSA8b3B0aW9uc3BlYyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3QuNScgIgorCWNhdCA+IGV4cGVjdCA8PEVPRgorc2V0IC0tIC0tZm9vIC0tICdhcmcnICctLXNwYW09aGFtJworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCAtLWtlZXAtZGFzaGRhc2ggLS1zdG9wLWF0LW5vbi1vcHRpb24gd2l0aG91dCAtLScgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLWtlZXAtZGFzaGRhc2ggLS1zdG9wLWF0LW5vbi1vcHRpb24gLS0gLS1mb28gYXJnIC0tc3BhbT1oYW0gPG9wdGlvbnNwZWMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0LjYnICIKKwljYXQgPiBleHBlY3QgPDxFT0YKK3NldCAtLSAtLWZvbyAtLWJhcj0neicgLS1iYXogLUMnWicgLS1kYXRhPSdBJyAtLSAnYXJnJworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCAtLXN0dWNrLWxvbmcnICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1zdHVjay1sb25nIC0tIC0tZm9vIC0tYmFyPXogLWIgYXJnIC1DWiAtZEEgPG9wdGlvbnNwZWMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0LjcnICIKKwljYXQgPiBleHBlY3QgPDxFT0YKK3NldCAtLSAtLWRhdGE9JycgLUMgLS1iYXogLS0gJ2FyZycKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgLS1zdHVjay1sb25nIGFuZCBlbXB0eSBvcHRpb25hbCBhcmd1bWVudCcgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLXN0dWNrLWxvbmcgLS0gLS1kYXRhPSBhcmcgLUMgLWIgPG9wdGlvbnNwZWMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0LjgnICIKKwljYXQgPiBleHBlY3QgPDxFT0YKK3NldCAtLSAtLWRhdGEgLS1iYXogLS0gJ2FyZycKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgLS1zdHVjay1sb25nIGFuZCBsb25nIG9wdGlvbiB3aXRoIHVuc2V0IG9wdGlvbmFsIGFyZ3VtZW50JyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tc3R1Y2stbG9uZyAtLSAtLWRhdGEgYXJnIC1iIDxvcHRpb25zcGVjID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCAtLXN0dWNrLWxvbmcgYW5kIHNob3J0IG9wdGlvbiB3aXRoIHVuc2V0IG9wdGlvbmFsIGFyZ3VtZW50JyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tc3R1Y2stbG9uZyAtLSAtZCBhcmcgLWIgPG9wdGlvbnNwZWMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTAzLXJldi1wYXJzZS12ZXJpZnkuc2ggYi90L3QxNTAzLXJldi1wYXJzZS12ZXJpZnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDkyZWRmZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDMtcmV2LXBhcnNlLXZlcmlmeS5zaApAQCAtMCwwICsxLDE0NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBDaHJpc3RpYW4gQ291ZGVyCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCByZXYtcGFyc2UgLS12ZXJpZnknCisKK2V4ZWMgPC9kZXYvbnVsbAorCisuIC4vdGVzdC1saWIuc2gKKworYWRkX2xpbmVfaW50b19maWxlKCkKK3sKKyAgICBfbGluZT0kMQorICAgIF9maWxlPSQyCisKKyAgICBpZiBbIC1mICIkX2ZpbGUiIF07IHRoZW4KKyAgICAgICAgZWNobyAiJF9saW5lIiA+PiAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIE1TRz0iQWRkIDwkX2xpbmU+IGludG8gPCRfZmlsZT4uIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiJF9saW5lIiA+ICRfZmlsZSB8fCByZXR1cm4gJD8KKyAgICAgICAgZ2l0IGFkZCAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIE1TRz0iQ3JlYXRlIGZpbGUgPCRfZmlsZT4gd2l0aCA8JF9saW5lPiBpbnNpZGUuIgorICAgIGZpCisKKyAgICB0ZXN0X3RpY2sKKyAgICBnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiRNU0ciICRfZmlsZQorfQorCitIQVNIMT0KK0hBU0gyPQorSEFTSDM9CitIQVNIND0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGJhc2ljIHJlcG8gd2l0aCAxIGZpbGUgKGhlbGxvKSBhbmQgNCBjb21taXRzJyAnCisJYWRkX2xpbmVfaW50b19maWxlICIxOiBIZWxsbyBXb3JsZCIgaGVsbG8gJiYKKwlIQVNIMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjI6IEEgbmV3IGRheSBmb3IgZ2l0IiBoZWxsbyAmJgorCUhBU0gyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiMzogQW5vdGhlciBuZXcgZGF5IGZvciBnaXQiIGhlbGxvICYmCisJSEFTSDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJYWRkX2xpbmVfaW50b19maWxlICI0OiBDaWFvIGZvciBub3ciIGhlbGxvICYmCisJSEFTSDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmtzIHdpdGggb25lIGdvb2QgcmV2JyAnCisJcmV2X2hhc2gxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkSEFTSDEpICYmCisJdGVzdCAiJHJldl9oYXNoMSIgPSAiJEhBU0gxIiAmJgorCXJldl9oYXNoMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJEhBU0gyKSAmJgorCXRlc3QgIiRyZXZfaGFzaDIiID0gIiRIQVNIMiIgJiYKKwlyZXZfaGFzaDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRIQVNIMykgJiYKKwl0ZXN0ICIkcmV2X2hhc2gzIiA9ICIkSEFTSDMiICYmCisJcmV2X2hhc2g0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkSEFTSDQpICYmCisJdGVzdCAiJHJldl9oYXNoNCIgPSAiJEhBU0g0IiAmJgorCXJldl9tYXN0ZXI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkcmV2X21hc3RlciIgPSAiJEhBU0g0IiAmJgorCXJldl9oZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRyZXZfaGVhZCIgPSAiJEhBU0g0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlscyB3aXRoIGFueSBiYWQgcmV2IG9yIG1hbnkgZ29vZCByZXZzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAyPmVycm9yICYmCisJZ3JlcCAic2luZ2xlIHJldmlzaW9uIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZm9vIDI+ZXJyb3IgJiYKKwlncmVwICJzaW5nbGUgcmV2aXNpb24iIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIGJhciAyPmVycm9yICYmCisJZ3JlcCAic2luZ2xlIHJldmlzaW9uIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYmF6IEhFQUQgMj5lcnJvciAmJgorCWdyZXAgInNpbmdsZSByZXZpc2lvbiIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRIQVNIMiBIRUFEIDI+ZXJyb3IgJiYKKwlncmVwICJzaW5nbGUgcmV2aXNpb24iIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIHNpbGVudGx5IHdoZW4gdXNpbmcgLXEnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgMj5lcnJvciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgZm9vIDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIEhFQUQgYmFyIDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcXVpZXQgLS12ZXJpZnkgYmF6IEhFQUQgMj5lcnJvciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgJEhBU0gyIEhFQUQgMj5lcnJvciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlscyBzaWxlbnRseSB3aGVuIHVzaW5nIC1xIHdpdGggZGVsZXRlZCByZWZsb2dzJyAnCisJcmVmPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCB1cGRhdGUtcmVmIC0tY3JlYXRlLXJlZmxvZyAtbSAibWVzc2FnZSBmb3IgcmVmcy90ZXN0IiByZWZzL3Rlc3QgIiRyZWYiICYmCisJZ2l0IHJlZmxvZyBkZWxldGUgLS11cGRhdGVyZWYgLS1yZXdyaXRlIHJlZnMvdGVzdEB7MH0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IHJlZnMvdGVzdEB7MH0gPmVycm9yIDI+JjEgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgc2lsZW50bHkgd2hlbiB1c2luZyAtcSB3aXRoIG5vdCBlbm91Z2ggcmVmbG9ncycgJworCXJlZj0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgdXBkYXRlLXJlZiAtLWNyZWF0ZS1yZWZsb2cgLW0gIm1lc3NhZ2UgZm9yIHJlZnMvdGVzdDIiIHJlZnMvdGVzdDIgIiRyZWYiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSByZWZzL3Rlc3QyQHs5OTl9ID5lcnJvciAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Y2NlZWRzIHNpbGVudGx5IHdpdGggLXEgYW5kIHJlZmxvZ3MgdGhhdCBkbyBub3QgZ28gZmFyIGJhY2sgZW5vdWdoIGluIHRpbWUnICcKKwlyZWY9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1jcmVhdGUtcmVmbG9nIC1tICJtZXNzYWdlIGZvciByZWZzL3Rlc3QzIiByZWZzL3Rlc3QzICIkcmVmIiAmJgorCWdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgcmVmcy90ZXN0M0B7MS55ZWFyLmFnb30gPmFjdHVhbCAyPmVycm9yICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yICYmCisJZWNobyAiJHJlZiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gc3Rkb3V0IG91dHB1dCBvbiBlcnJvcicgJworCXRlc3QgLXogIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSkiICYmCisJdGVzdCAteiAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGZvbykiICYmCisJdGVzdCAteiAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJheiBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCBiYXIpIiAmJgorCXRlc3QgLXogIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkSEFTSDIgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAtLWRlZmF1bHQnICcKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tZGVmYXVsdCBtYXN0ZXIgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tZGVmYXVsdCBtYXN0ZXIgSEVBRCAmJgorCWdpdCByZXYtcGFyc2UgLS1kZWZhdWx0IG1hc3RlciAtLXZlcmlmeSAmJgorCWdpdCByZXYtcGFyc2UgLS1kZWZhdWx0IG1hc3RlciAtLXZlcmlmeSBIRUFEICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIC0tZGVmYXVsdCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGZvbyAtLWRlZmF1bHQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLWRlZmF1bHQgSEVBRCAtLXZlcmlmeSBiYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tZGVmYXVsdCBIRUFEIGJheiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1kZWZhdWx0IGZvbyAtLXZlcmlmeSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1kZWZhdWx0IGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXN0ZXJAe259IGZvciB2YXJpb3VzIG4nICcKKwlOPSQoZ2l0IHJlZmxvZyB8IHdjIC1sKSAmJgorCU5tMT0kKCgkTi0xKSkgJiYKKwlOcDE9JCgoJE4rMSkpICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJAezB9ICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJAezF9ICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJAeyRObTF9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJAeyROfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyQHskTnAxfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdyZWYgcmVzb2x1dGlvbiBub3QgY29uZnVzZWQgYnkgYnJva2VuIHN5bWxpbmtzJyAnCisJbG4gLXMgZG9lcy1ub3QtZXhpc3QgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYnJva2VuCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUwNC1jZWlsaW5nLWRpcnMuc2ggYi90L3QxNTA0LWNlaWxpbmctZGlycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZDUxNjE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTUwNC1jZWlsaW5nLWRpcnMuc2gKQEAgLTAsMCArMSwxODEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfcHJlZml4KCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiQxIiBcCisJInRlc3QgJyQyJyA9IFwiXCQoZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4KVwiIgorfQorCit0ZXN0X2ZhaWwoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJDE6IHByZWZpeCIgJworCQl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgKKwknCit9CisKK1RSQVNIX1JPT1Q9IiRQV0QiCitST09UX1BBUkVOVD0kKGRpcm5hbWUgIiRUUkFTSF9ST09UIikKKworCit1bnNldCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUwordGVzdF9wcmVmaXggbm9fY2VpbCAiIgorCitleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiIKK3Rlc3RfcHJlZml4IGNlaWxfZW1wdHkgIiIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRST09UX1BBUkVOVCIKK3Rlc3RfcHJlZml4IGNlaWxfYXRfcGFyZW50ICIiCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkUk9PVF9QQVJFTlQvIgordGVzdF9wcmVmaXggY2VpbF9hdF9wYXJlbnRfc2xhc2ggIiIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UIgordGVzdF9wcmVmaXggY2VpbF9hdF90cmFzaCAiIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1QvIgordGVzdF9wcmVmaXggY2VpbF9hdF90cmFzaF9zbGFzaCAiIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViIgordGVzdF9wcmVmaXggY2VpbF9hdF9zdWIgIiIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1Yi8iCit0ZXN0X3ByZWZpeCBjZWlsX2F0X3N1Yl9zbGFzaCAiIgorCitpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCit0aGVuCisJbG4gLXMgc3ViIHRvcAorZmkKKworbWtkaXIgLXAgc3ViL2RpciB8fCBleGl0IDEKK2NkIHN1Yi9kaXIgfHwgZXhpdCAxCisKK3Vuc2V0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTCit0ZXN0X3ByZWZpeCBzdWJkaXJfbm9fY2VpbCAic3ViL2Rpci8iCisKK2V4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUworCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iIgordGVzdF9wcmVmaXggc3ViZGlyX2NlaWxfZW1wdHkgInN1Yi9kaXIvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1QiCit0ZXN0X2ZhaWwgc3ViZGlyX2NlaWxfYXRfdHJhc2gKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09ULyIKK3Rlc3RfZmFpbCBzdWJkaXJfY2VpbF9hdF90cmFzaF9zbGFzaAorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViIgordGVzdF9mYWlsIHN1YmRpcl9jZWlsX2F0X3N1YgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViLyIKK3Rlc3RfZmFpbCBzdWJkaXJfY2VpbF9hdF9zdWJfc2xhc2gKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwordGhlbgorCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC90b3AiCisJdGVzdF9mYWlsIHN1YmRpcl9jZWlsX2F0X3RvcAorCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC90b3AvIgorCXRlc3RfZmFpbCBzdWJkaXJfY2VpbF9hdF90b3Bfc2xhc2gKKworCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSI6JFRSQVNIX1JPT1QvdG9wIgorCXRlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3RvcF9ub19yZXNvbHZlICJzdWIvZGlyLyIKKwlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iOiRUUkFTSF9ST09UL3RvcC8iCisJdGVzdF9wcmVmaXggc3ViZGlyX2NlaWxfYXRfdG9wX3NsYXNoX25vX3Jlc29sdmUgInN1Yi9kaXIvIgorZmkKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1Yi9kaXIiCit0ZXN0X3ByZWZpeCBzdWJkaXJfY2VpbF9hdF9zdWJkaXIgInN1Yi9kaXIvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViL2Rpci8iCit0ZXN0X3ByZWZpeCBzdWJkaXJfY2VpbF9hdF9zdWJkaXJfc2xhc2ggInN1Yi9kaXIvIgorCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdSIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1ICJzdWIvZGlyLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1LyIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1X3NsYXNoICJzdWIvZGlyLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1Yi9kaSIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1Yl9kaSAic3ViL2Rpci8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWIvZGkiCit0ZXN0X3ByZWZpeCBzdWJkaXJfY2VpbF9hdF9zdWJfZGlfc2xhc2ggInN1Yi9kaXIvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViZGkiCit0ZXN0X3ByZWZpeCBzdWJkaXJfY2VpbF9hdF9zdWJkaSAic3ViL2Rpci8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWJkaSIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1YmRpX3NsYXNoICJzdWIvZGlyLyIKKworCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iL2ZvbzokVFJBU0hfUk9PVC9zdWIiCit0ZXN0X2ZhaWwgc2Vjb25kX29mX3R3bworCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViOi9iYXIiCit0ZXN0X2ZhaWwgZmlyc3Rfb2ZfdHdvCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIvZm9vOiRUUkFTSF9ST09UL3N1YjovYmFyIgordGVzdF9mYWlsIHNlY29uZF9vZl90aHJlZQorCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWIiCitHSVRfRElSPS4uLy4uLy5naXQKK2V4cG9ydCBHSVRfRElSCit0ZXN0X3ByZWZpeCBnaXRfZGlyX3NwZWNpZmllZCAiIgordW5zZXQgR0lUX0RJUgorCisKK2NkIC4uLy4uIHx8IGV4aXQgMQorbWtkaXIgLXAgcy9kIHx8IGV4aXQgMQorY2Qgcy9kIHx8IGV4aXQgMQorCit1bnNldCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUwordGVzdF9wcmVmaXggc2Rfbm9fY2VpbCAicy9kLyIKKworZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIiCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2VtcHR5ICJzL2QvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1QiCit0ZXN0X2ZhaWwgc2RfY2VpbF9hdF90cmFzaAorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1QvIgordGVzdF9mYWlsIHNkX2NlaWxfYXRfdHJhc2hfc2xhc2gKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3MiCit0ZXN0X2ZhaWwgc2RfY2VpbF9hdF9zCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zLyIKK3Rlc3RfZmFpbCBzZF9jZWlsX2F0X3Nfc2xhc2gKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3MvZCIKK3Rlc3RfcHJlZml4IHNkX2NlaWxfYXRfc2QgInMvZC8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zL2QvIgordGVzdF9wcmVmaXggc2RfY2VpbF9hdF9zZF9zbGFzaCAicy9kLyIKKworCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3UiCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2F0X3N1ICJzL2QvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3UvIgordGVzdF9wcmVmaXggc2RfY2VpbF9hdF9zdV9zbGFzaCAicy9kLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3MvZGkiCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2F0X3NfZGkgInMvZC8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zL2RpIgordGVzdF9wcmVmaXggc2RfY2VpbF9hdF9zX2RpX3NsYXNoICJzL2QvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc2RpIgordGVzdF9wcmVmaXggc2RfY2VpbF9hdF9zZGkgInMvZC8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zZGkiCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2F0X3NkaV9zbGFzaCAicy9kLyIKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDUtcmV2LXBhcnNlLWxhc3Quc2ggYi90L3QxNTA1LXJldi1wYXJzZS1sYXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ5NjllZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA1LXJldi1wYXJzZS1sYXN0LnNoCkBAIC0wLDAgKzEsNjEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IEB7LU59IHN5bnRheCcKKworLiAuL3Rlc3QtbGliLnNoCisKKworbWFrZV9jb21taXQgKCkgeworCWVjaG8gIiQxIiA+ICIkMSIgJiYKKwlnaXQgYWRkICIkMSIgJiYKKwlnaXQgY29tbWl0IC1tICIkMSIKK30KKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJbWFrZV9jb21taXQgMSAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCW1ha2VfY29tbWl0IDIgJiYKKwltYWtlX2NvbW1pdCAzICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwltYWtlX2NvbW1pdCA0ICYmCisJZ2l0IG1lcmdlIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKworJworCisjIDEgLS0gMiAtLSAzIG1hc3RlcgorIyAgXCAgICAgICAgIFwKKyMgICBcICAgICAgICAgXAorIyAgICAtLS0gNCAtLS0gNSBzaWRlCisjCisjIGFuZCAnc2lkZScgc2hvdWxkIGJlIHRoZSBsYXN0IGJyYW5jaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAey0xfSB3b3JrcycgJworCXRlc3RfY21wX3JldiBzaWRlIEB7LTF9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7LTF9fjIgd29ya3MnICcKKwl0ZXN0X2NtcF9yZXYgc2lkZX4yIEB7LTF9fjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHstMX1eMiB3b3JrcycgJworCXRlc3RfY21wX3JldiBzaWRlXjIgQHstMX1eMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAey0xfUB7MX0gd29ya3MnICcKKwl0ZXN0X2NtcF9yZXYgc2lkZUB7MX0gQHstMX1AezF9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7LTJ9IHdvcmtzJyAnCisJdGVzdF9jbXBfcmV2IG1hc3RlciBAey0yfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAey0zfSBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgQHstM30KKycKKwordGVzdF9kb25lCisKKwpkaWZmIC0tZ2l0IGEvdC90MTUwNi1yZXYtcGFyc2UtZGlhZ25vc2lzLnNoIGIvdC90MTUwNi1yZXYtcGFyc2UtZGlhZ25vc2lzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUyZWRjYmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA2LXJldi1wYXJzZS1kaWFnbm9zaXMuc2gKQEAgLTAsMCArMSwyMzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCByZXYtcGFyc2UgZGlhZ25vc2lzIGZvciBpbnZhbGlkIGFyZ3VtZW50JworCitleGVjIDwvZGV2L251bGwKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZGlkX3lvdV9tZWFuICgpCit7CisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogcGF0aCAnJDIkMycgJDQsIGJ1dCBub3QgJHs1Oi0kU1EkMyRTUX0KKwloaW50OiBEaWQgeW91IG1lYW4gJyQxOiQyJDMnJHsyOisgYWthICRTUSQxOi4vJDMkU1F9PworCUVPRgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBlcnJvcgorfQorCitIQVNIX2ZpbGU9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBiYXNpYyByZXBvJyAnCisJZWNobyBvbmUgPiBmaWxlLnR4dCAmJgorCW1rZGlyIHN1YmRpciAmJgorCWVjaG8gdHdvID4gc3ViZGlyL2ZpbGUudHh0ICYmCisJZWNobyB0aHJlZSA+IHN1YmRpci9maWxlMi50eHQgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGluaXQgJiYKKwllY2hvIGZvdXIgPiBpbmRleC1vbmx5LnR4dCAmJgorCWdpdCBhZGQgaW5kZXgtb25seS50eHQgJiYKKwllY2hvIGZpdmUgPiBkaXNrLW9ubHkudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgZmlsZSBvYmplY3RzJyAnCisJSEFTSF9maWxlPSQoZ2l0IHJldi1wYXJzZSBIRUFEOmZpbGUudHh0KSAmJgorCWdpdCByZXYtcGFyc2UgSEVBRDpzdWJkaXIvZmlsZS50eHQgJiYKKwlnaXQgcmV2LXBhcnNlIDppbmRleC1vbmx5LnR4dCAmJgorCShjZCBzdWJkaXIgJiYKKwkgZ2l0IHJldi1wYXJzZSBIRUFEOnN1YmRpci9maWxlMi50eHQgJiYKKwkgdGVzdCAkSEFTSF9maWxlID0gJChnaXQgcmV2LXBhcnNlIEhFQUQ6ZmlsZS50eHQpICYmCisJIHRlc3QgJEhBU0hfZmlsZSA9ICQoZ2l0IHJldi1wYXJzZSA6ZmlsZS50eHQpICYmCisJIHRlc3QgJEhBU0hfZmlsZSA9ICQoZ2l0IHJldi1wYXJzZSA6MDpmaWxlLnR4dCkgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JyZWN0IHJlbGF0aXZlIGZpbGUgb2JqZWN0cyAoMCknICcKKwlnaXQgcmV2LXBhcnNlIDpmaWxlLnR4dCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIDouL2ZpbGUudHh0ID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQgJiYKKwlnaXQgcmV2LXBhcnNlIDowOi4vZmlsZS50eHQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JyZWN0IHJlbGF0aXZlIGZpbGUgb2JqZWN0cyAoMSknICcKKwlnaXQgcmV2LXBhcnNlIEhFQUQ6ZmlsZS50eHQgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEOi4vZmlsZS50eHQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JyZWN0IHJlbGF0aXZlIGZpbGUgb2JqZWN0cyAoMiknICcKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQ6Li4vZmlsZS50eHQgPnJlc3VsdCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3RlZCByZXN1bHQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgcmVsYXRpdmUgZmlsZSBvYmplY3RzICgzKScgJworCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRDouLi9zdWJkaXIvLi4vZmlsZS50eHQgPnJlc3VsdCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3RlZCByZXN1bHQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgcmVsYXRpdmUgZmlsZSBvYmplY3RzICg0KScgJworCWdpdCByZXYtcGFyc2UgSEVBRDpzdWJkaXIvZmlsZS50eHQgPmV4cGVjdGVkICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEOi4vZmlsZS50eHQgPnJlc3VsdCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3RlZCByZXN1bHQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgcmVsYXRpdmUgZmlsZSBvYmplY3RzICg1KScgJworCWdpdCByZXYtcGFyc2UgOnN1YmRpci9maWxlLnR4dCA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgcmV2LXBhcnNlIDouL2ZpbGUudHh0ID5yZXN1bHQgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0ZWQgcmVzdWx0ICYmCisJCWdpdCByZXYtcGFyc2UgOjA6Li9maWxlLnR4dCA+cmVzdWx0ICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIHJlc3VsdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCByZWxhdGl2ZSBmaWxlIG9iamVjdHMgKDYpJyAnCisJZ2l0IHJldi1wYXJzZSA6ZmlsZS50eHQgPmV4cGVjdGVkICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHJldi1wYXJzZSA6Li4vZmlsZS50eHQgPnJlc3VsdCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3RlZCByZXN1bHQgJiYKKwkJZ2l0IHJldi1wYXJzZSA6MDouLi9maWxlLnR4dCA+cmVzdWx0ICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIHJlc3VsdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IHJldmlzaW9uIGlkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBmb29iYXI6ZmlsZS50eHQgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImludmFsaWQgb2JqZWN0IG5hbWUgLmZvb2Jhci4iIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBmb29iYXIgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgInVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS4iIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCBmaWxlIGluIHNoYTE6cGF0aCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDpub3RoaW5nLnR4dCAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAicGF0aCAubm90aGluZy50eHQuIGRvZXMgbm90IGV4aXN0IGluIC5IRUFELiIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6aW5kZXgtb25seS50eHQgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgInBhdGggLmluZGV4LW9ubHkudHh0LiBleGlzdHMgb24gZGlzaywgYnV0IG5vdCBpbiAuSEVBRC4iIGVycm9yICYmCisJKGNkIHN1YmRpciAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6ZmlsZTIudHh0IDI+ZXJyb3IgJiYKKwkgdGVzdF9kaWRfeW91X21lYW4gSEVBRCBzdWJkaXIvIGZpbGUyLnR4dCBleGlzdHMgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNvcnJlY3QgZmlsZSBpbiA6cGF0aCBhbmQgOk46cGF0aCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOm5vdGhpbmcudHh0IDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJwYXRoIC5ub3RoaW5nLnR4dC4gZG9lcyBub3QgZXhpc3QgKG5laXRoZXIgb24gZGlzayBub3IgaW4gdGhlIGluZGV4KSIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDoxOm5vdGhpbmcudHh0IDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJwYXRoIC5ub3RoaW5nLnR4dC4gZG9lcyBub3QgZXhpc3QgKG5laXRoZXIgb24gZGlzayBub3IgaW4gdGhlIGluZGV4KSIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDoxOmZpbGUudHh0IDI+ZXJyb3IgJiYKKwl0ZXN0X2RpZF95b3VfbWVhbiAiOjAiICIiIGZpbGUudHh0ICJpcyBpbiB0aGUgaW5kZXgiICJhdCBzdGFnZSAxIiAmJgorCShjZCBzdWJkaXIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6MTpmaWxlLnR4dCAyPmVycm9yICYmCisJIHRlc3RfZGlkX3lvdV9tZWFuICI6MCIgIiIgZmlsZS50eHQgImlzIGluIHRoZSBpbmRleCIgImF0IHN0YWdlIDEiICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOmZpbGUyLnR4dCAyPmVycm9yICYmCisJIHRlc3RfZGlkX3lvdV9tZWFuICI6MCIgc3ViZGlyLyBmaWxlMi50eHQgImlzIGluIHRoZSBpbmRleCIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6MjpmaWxlMi50eHQgMj5lcnJvciAmJgorCSB0ZXN0X2RpZF95b3VfbWVhbiA6MCBzdWJkaXIvIGZpbGUyLnR4dCAiaXMgaW4gdGhlIGluZGV4IikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDpkaXNrLW9ubHkudHh0IDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJwYXRoIC5kaXNrLW9ubHkudHh0LiBleGlzdHMgb24gZGlzaywgYnV0IG5vdCBpbiB0aGUgaW5kZXgiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgQHtufSByZWZlcmVuY2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIG1hc3RlckB7OTk5OTl9ID5vdXRwdXQgMj5lcnJvciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJsb2cgZm9yIFteIF0qIG9ubHkgaGFzIFswLTldWzAtOV0qIGVudHJpZXMiIGVycm9yICAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyQHs5OTk5OX0gPm91dHB1dCAyPmVycm9yICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgImxvZyBmb3IgW14gXSogb25seSBoYXMgWzAtOV1bMC05XSogZW50cmllcyIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVsYXRpdmUgcGF0aCBub3QgZm91bmQnICcKKwkoCisJCWNkIHN1YmRpciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6Li9ub25leGlzdGVudC50eHQgMj5lcnJvciAmJgorCQl0ZXN0X2kxOG5ncmVwIHN1YmRpci9ub25leGlzdGVudC50eHQgZXJyb3IKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbGF0aXZlIHBhdGggb3V0c2lkZSB3b3JrdHJlZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDouLi9maWxlLnR4dCA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAib3V0c2lkZSByZXBvc2l0b3J5IiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBwYXRoIHdoZW4gY3dkIGlzIG91dHNpZGUgd29ya3RyZWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLS1naXQtZGlyPS5naXQgLS13b3JrLXRyZWU9c3ViZGlyIHJldi1wYXJzZSBIRUFEOi4vZmlsZS50eHQgPm91dHB1dCAyPmVycm9yICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgInJlbGF0aXZlIHBhdGggc3ludGF4IGNhbi50IGJlIHVzZWQgb3V0c2lkZSB3b3JraW5nIHRyZWUiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzxjb21taXQ+OmZpbGUgY29ycmVjdGx5IGRpYWdub3NlZCBhZnRlciBhIHBhdGhuYW1lJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBmaWxlLnR4dCBIRUFEOmZpbGUudHh0IDE+YWN0dWFsIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICEgImV4aXN0cyBvbiBkaXNrIiBlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgIm5vIHN1Y2ggcGF0aCBpbiB0aGUgd29ya2luZyB0cmVlIiBlcnJvciAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmaWxlLnR4dAorCUhFQUQ6ZmlsZS50eHQKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvdGRvdCBpcyBub3QgYW4gZW1wdHkgc2V0JyAnCisJKCBIPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJiBlY2hvICRIICYmIGVjaG8gXiRIICkgPmV4cGVjdCAmJgorCisJZ2l0IHJldi1wYXJzZSBIRUFELi4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCByZXYtcGFyc2UgLi5IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvIC4uID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIC4uID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FyZyBiZWZvcmUgZGFzaGRhc2ggbXVzdCBiZSBhIHJldmlzaW9uIChtaXNzaW5nKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgZm9vYmFyIC0tIDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiYmFkIHJldmlzaW9uIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXJnIGJlZm9yZSBkYXNoZGFzaCBtdXN0IGJlIGEgcmV2aXNpb24gKGZpbGUpJyAnCisJPmZvb2JhciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgZm9vYmFyIC0tIDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiYmFkIHJldmlzaW9uIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXJnIGJlZm9yZSBkYXNoZGFzaCBtdXN0IGJlIGEgcmV2aXNpb24gKGFtYmlndW91cyknICcKKwk+Zm9vYmFyICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9mb29iYXIgSEVBRCAmJgorCXsKKwkJIyB3ZSBkbyBub3Qgd2FudCB0byB1c2UgcmV2LXBhcnNlIGhlcmUsIGJlY2F1c2UKKwkJIyB3ZSBhcmUgdGVzdGluZyBpdAorCQljYXQgLmdpdC9yZWZzL2hlYWRzL2Zvb2JhciAmJgorCQlwcmludGYgIiVzXG4iIC0tCisJfSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBmb29iYXIgLS0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IE50aCBwYXJlbnQgaWYgTiBpcyB0b28gaGlnaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRF4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IE50aCBhbmNlc3RvciBpZiBOIGlzIHRvbyBoaWdoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEfjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRoc3BlY3Mgd2l0aCB3aWxkY2FyZHMgYXJlIG5vdCBhbWJpZ3VvdXMnICcKKwllY2hvICIqLmMiID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICIqLmMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhY2tzbGFzaCBkb2VzIG5vdCB0cmlnZ2VyIHdpbGRjYXJkIHJ1bGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlICJmb29cXGJhciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXNjYXBlZCBjaGFyIGRvZXMgbm90IHRyaWdnZXIgd2lsZGNhcmQgcnVsZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgImZvb1xcKmJhciIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTA3LXJldi1wYXJzZS11cHN0cmVhbS5zaCBiL3QvdDE1MDctcmV2LXBhcnNlLXVwc3RyZWFtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmYzBkOTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA3LXJldi1wYXJzZS11cHN0cmVhbS5zaApAQCAtMCwwICsxLDI2OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgPGJyYW5jaD5Ae3Vwc3RyZWFtfSBzeW50YXgnCisKKy4gLi90ZXN0LWxpYi5zaAorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwl0ZXN0X2NvbW1pdCAxICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCAyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjbG9uZSAuIGNsb25lICYmCisJdGVzdF9jb21taXQgMyAmJgorCShjZCBjbG9uZSAmJgorCSB0ZXN0X2NvbW1pdCA0ICYmCisJIGdpdCBicmFuY2ggLS10cmFjayBteS1zaWRlIG9yaWdpbi9zaWRlICYmCisJIGdpdCBicmFuY2ggLS10cmFjayBsb2NhbC1tYXN0ZXIgbWFzdGVyICYmCisJIGdpdCBicmFuY2ggLS10cmFjayBmdW5Abnkgb3JpZ2luL3NpZGUgJiYKKwkgZ2l0IGJyYW5jaCAtLXRyYWNrIEBmdW5ueSBvcmlnaW4vc2lkZSAmJgorCSBnaXQgYnJhbmNoIC0tdHJhY2sgZnVubnlAIG9yaWdpbi9zaWRlICYmCisJIGdpdCByZW1vdGUgYWRkIC10IG1hc3RlciBtYXN0ZXItb25seSAuLiAmJgorCSBnaXQgZmV0Y2ggbWFzdGVyLW9ubHkgJiYKKwkgZ2l0IGJyYW5jaCBiYWQtdXBzdHJlYW0gJiYKKwkgZ2l0IGNvbmZpZyBicmFuY2guYmFkLXVwc3RyZWFtLnJlbW90ZSBtYXN0ZXItb25seSAmJgorCSBnaXQgY29uZmlnIGJyYW5jaC5iYWQtdXBzdHJlYW0ubWVyZ2UgcmVmcy9oZWFkcy9zaWRlCisJKQorJworCitjb21taXRfc3ViamVjdCAoKSB7CisJKGNkIGNsb25lICYmCisJIGdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMgIiRAIikKK30KKworZXJyb3JfbWVzc2FnZSAoKSB7CisJKGNkIGNsb25lICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRAIiAyPi4uL2Vycm9yKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3Vwc3RyZWFtfSByZXNvbHZlcyB0byBjb3JyZWN0IGZ1bGwgbmFtZScgJworCWVjaG8gcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCAtQyBjbG9uZSByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgQHt1cHN0cmVhbX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgLUMgY2xvbmUgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIEB7VVBTVFJFQU19ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IC1DIGNsb25lIHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBAe1VwU1RSZWFtfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3V9IHJlc29sdmVzIHRvIGNvcnJlY3QgZnVsbCBuYW1lJyAnCisJZWNobyByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IC1DIGNsb25lIHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBAe3V9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IC1DIGNsb25lIHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBAe1V9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ215LXNpZGVAe3Vwc3RyZWFtfSByZXNvbHZlcyB0byBjb3JyZWN0IGZ1bGwgbmFtZScgJworCWVjaG8gcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlID5leHBlY3QgJiYKKwlnaXQgLUMgY2xvbmUgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIG15LXNpZGVAe3V9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vwc3RyZWFtIG9mIGJyYW5jaCB3aXRoIEAgaW4gbWlkZGxlJyAnCisJZ2l0IC1DIGNsb25lIHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBmdW5AbnlAe3V9ID5hY3R1YWwgJiYKKwllY2hvIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCAtQyBjbG9uZSByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgZnVuQG55QHtVfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cHN0cmVhbSBvZiBicmFuY2ggd2l0aCBAIGF0IHN0YXJ0JyAnCisJZ2l0IC1DIGNsb25lIHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBAZnVubnlAe3V9ID5hY3R1YWwgJiYKKwllY2hvIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cHN0cmVhbSBvZiBicmFuY2ggd2l0aCBAIGF0IGVuZCcgJworCWdpdCAtQyBjbG9uZSByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgZnVubnlAQHt1fSA+YWN0dWFsICYmCisJZWNobyByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcy9oZWFkcy9teS1zaWRlQHt1cHN0cmVhbX0gZG9lcyBub3QgcmVzb2x2ZSB0byBteS1zaWRle3Vwc3RyZWFtfScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBjbG9uZSByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgcmVmcy9oZWFkcy9teS1zaWRlQHt1cHN0cmVhbX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXktc2lkZUB7dX0gcmVzb2x2ZXMgdG8gY29ycmVjdCBjb21taXQnICcKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCXRlc3RfY29tbWl0IDUgJiYKKwkoY2QgY2xvbmUgJiYgZ2l0IGZldGNoKSAmJgorCWVjaG8gMiA+ZXhwZWN0ICYmCisJY29tbWl0X3N1YmplY3QgbXktc2lkZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gNSA+ZXhwZWN0ICYmCisJY29tbWl0X3N1YmplY3QgbXktc2lkZUB7dX0gPmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QtdHJhY2tpbmdAe3V9IGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGNsb25lIHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBub24tdHJhY2tpbmdAe3V9ICYmCisJKGNkIGNsb25lICYmIGdpdCBjaGVja291dCAtLW5vLXRyYWNrIC1iIG5vbi10cmFja2luZykgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgY2xvbmUgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIG5vbi10cmFja2luZ0B7dX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnPGJyYW5jaD5Ae3V9QHsxfSByZXNvbHZlcyBjb3JyZWN0bHknICcKKwl0ZXN0X2NvbW1pdCA2ICYmCisJKGNkIGNsb25lICYmIGdpdCBmZXRjaCkgJiYKKwllY2hvIDUgPmV4cGVjdCAmJgorCWNvbW1pdF9zdWJqZWN0IG15LXNpZGVAe3V9QHsxfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWNvbW1pdF9zdWJqZWN0IG15LXNpZGVAe1V9QHsxfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3V9IHdpdGhvdXQgc3BlY2lmeWluZyBicmFuY2ggZmFpbHMgb24gYSBkZXRhY2hlZCBIRUFEJyAnCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgQHt1fSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgQHtVfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiBuZXcgbXktc2lkZUB7dX0gZm9ya3MgZnJvbSB0aGUgc2FtZScgJworKAorCWNkIGNsb25lICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5ldyBteS1zaWRlQHt1fSAmJgorCWdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgbXktc2lkZUB7dX0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgbmV3QHt1fSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBteS1zaWRlQHt1fSByZWNvcmRzIHRoZSBjb3JyZWN0IG5hbWUnICcKKygKKwljZCBjbG9uZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBuZXcgJiYKKwlnaXQgYnJhbmNoIC10IG5ldyBteS1zaWRlQHt1fSAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIG5ld0B7dX0gJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwllY2hvICJNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICR7U1F9b3JpZ2luL3NpZGUke1NRfSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1kIG90aGVyQHt1fScgJworCWdpdCBjaGVja291dCAtdCAtYiBvdGhlciBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1kIEB7dX0gJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG90aGVyQHt1fScgJworCWdpdCBicmFuY2ggLWYgbWFzdGVyIEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQgLXQgLWIgYW5vdGhlciBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgQHt1fSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJZWNobyByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2hAe3V9IHdvcmtzIHdoZW4gdHJhY2tpbmcgYSBsb2NhbCBicmFuY2gnICcKKwllY2hvIHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgLUMgY2xvbmUgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIGxvY2FsLW1hc3RlckB7dX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoQHt1fSBlcnJvciBtZXNzYWdlIHdoZW4gbm8gdXBzdHJlYW0nICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlmYXRhbDogbm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICR7U1F9bm9uLXRyYWNraW5nJHtTUX0KKwlFT0YKKwllcnJvcl9tZXNzYWdlIG5vbi10cmFja2luZ0B7dX0gJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7dX0gZXJyb3IgbWVzc2FnZSB3aGVuIG5vIHVwc3RyZWFtJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZmF0YWw6IG5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAke1NRfW1hc3RlciR7U1F9CisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBAe3V9IDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoQHt1fSBlcnJvciBtZXNzYWdlIHdpdGggbWlzc3BlbHQgYnJhbmNoJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZmF0YWw6IG5vIHN1Y2ggYnJhbmNoOiAke1NRfW5vLXN1Y2gtYnJhbmNoJHtTUX0KKwlFT0YKKwllcnJvcl9tZXNzYWdlIG5vLXN1Y2gtYnJhbmNoQHt1fSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHt1fSBlcnJvciBtZXNzYWdlIHdoZW4gbm90IG9uIGEgYnJhbmNoJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZmF0YWw6IEhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2gKKwlFT0YKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBAe3V9IDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoQHt1fSBlcnJvciBtZXNzYWdlIGlmIHVwc3RyZWFtIGJyYW5jaCBub3QgZmV0Y2hlZCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWZhdGFsOiB1cHN0cmVhbSBicmFuY2ggJHtTUX1yZWZzL2hlYWRzL3NpZGUke1NRfSBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaAorCUVPRgorCWVycm9yX21lc3NhZ2UgYmFkLXVwc3RyZWFtQHt1fSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCB3b3JrcyB3aGVuIHRyYWNraW5nIGEgbG9jYWwgYnJhbmNoJyAnCisoCisJY2QgY2xvbmUgJiYKKwlnaXQgY2hlY2tvdXQgbG9jYWwtbWFzdGVyICYmCisJZ2l0IHB1bGwKKykKKycKKworIyBtYWtlcyBzZW5zZSBpZiB0aGUgcHJldmlvdXMgb25lIHN1Y2NlZWRlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHt1fSB3b3JrcyB3aGVuIHRyYWNraW5nIGEgbG9jYWwgYnJhbmNoJyAnCisJZWNobyByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IC1DIGNsb25lIHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBAe3V9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtZyBvdGhlckB7dX0nICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY29tbWl0ICRjb21taXQKKwlSZWZsb2c6IG1hc3RlckB7MH0gKEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4pCisJUmVmbG9nIG1lc3NhZ2U6IGJyYW5jaDogQ3JlYXRlZCBmcm9tIEhFQUQKKwlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJRGF0ZTogICBUaHUgQXByIDcgMTU6MTU6MTMgMjAwNSAtMDcwMAorCisJICAgIDMKKwlFT0YKKwlnaXQgbG9nIC0xIC1nIG90aGVyQHt1fSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLWcgb3RoZXJAe3V9QHtub3d9JyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWNvbW1pdCAkY29tbWl0CisJUmVmbG9nOiBtYXN0ZXJAe1RodSBBcHIgNyAxNToxNzoxMyAyMDA1IC0wNzAwfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKKwlSZWZsb2cgbWVzc2FnZTogYnJhbmNoOiBDcmVhdGVkIGZyb20gSEVBRAorCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwlEYXRlOiAgIFRodSBBcHIgNyAxNToxNToxMyAyMDA1IC0wNzAwCisKKwkgICAgMworCUVPRgorCWdpdCBsb2cgLTEgLWcgb3RoZXJAe3V9QHtub3d9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7cmVmbG9nfS1wYXJzaW5nIGRvZXMgbm90IGxvb2sgYmV5b25kIGNvbG9uJyAnCisJZWNobyBjb250ZW50ID5Ae3llc3RlcmRheX0gJiYKKwlnaXQgYWRkIEB7eWVzdGVyZGF5fSAmJgorCWdpdCBjb21taXQgLW0gImZ1bm55IHJlZmxvZyBmaWxlIiAmJgorCWdpdCBoYXNoLW9iamVjdCBAe3llc3RlcmRheX0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRDpAe3llc3RlcmRheX0gPmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3Vwc3RyZWFtfS1wYXJzaW5nIGRvZXMgbm90IGxvb2sgYmV5b25kIGNvbG9uJyAnCisJZWNobyBjb250ZW50ID5Ae3Vwc3RyZWFtfSAmJgorCWdpdCBhZGQgQHt1cHN0cmVhbX0gJiYKKwlnaXQgY29tbWl0IC1tICJmdW5ueSB1cHN0cmVhbSBmaWxlIiAmJgorCWdpdCBoYXNoLW9iamVjdCBAe3Vwc3RyZWFtfSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEOkB7dXBzdHJlYW19ID5hY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTA4LWF0LWNvbWJpbmF0aW9ucy5zaCBiL3QvdDE1MDgtYXQtY29tYmluYXRpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRhOTk2NGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA4LWF0LWNvbWJpbmF0aW9ucy5zaApAQCAtMCwwICsxLDEwMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgdmFyaW91cyBAe1h9IHN5bnRheCBjb21iaW5hdGlvbnMgdG9nZXRoZXInCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2soKSB7CisJdGVzdF9leHBlY3RfJHs0Oi1zdWNjZXNzfSAiJDEgPSAkMyIgIgorCQllY2hvICckMycgPmV4cGVjdCAmJgorCQlpZiB0ZXN0ICckMicgPSAnY29tbWl0JworCQl0aGVuCisJCQlnaXQgbG9nIC0xIC0tZm9ybWF0PSVzICckMScgPmFjdHVhbAorCQllbGlmIHRlc3QgJyQyJyA9ICdyZWYnCisJCXRoZW4KKwkJCWdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgJyQxJyA+YWN0dWFsCisJCWVsc2UKKwkJCWdpdCBjYXQtZmlsZSAtcCAnJDEnID5hY3R1YWwKKwkJZmkgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSIKK30KKworbm9uc2Vuc2UoKSB7CisJdGVzdF9leHBlY3RfJHsyOi1zdWNjZXNzfSAiJDEgaXMgbm9uc2Vuc2ljYWwiICIKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAnJDEnCisJIgorfQorCitmYWlsKCkgeworCSIkQCIgZmFpbHVyZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IG1hc3Rlci1vbmUgJiYKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItdHdvICYmCisJZ2l0IGNoZWNrb3V0IC1iIHVwc3RyZWFtLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0IHVwc3RyZWFtLW9uZSAmJgorCXRlc3RfY29tbWl0IHVwc3RyZWFtLXR3byAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXCisJdGhlbgorCQlnaXQgY2hlY2tvdXQgLWIgQC9hdC10ZXN0CisJZmkgJiYKKwlnaXQgY2hlY2tvdXQgLWIgQEAvYXQtdGVzdCAmJgorCWdpdCBjaGVja291dCAtYiBAYXQtdGVzdCAmJgorCWdpdCBjaGVja291dCAtYiBvbGQtYnJhbmNoICYmCisJdGVzdF9jb21taXQgb2xkLW9uZSAmJgorCXRlc3RfY29tbWl0IG9sZC10d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV3LWJyYW5jaCAmJgorCXRlc3RfY29tbWl0IG5ldy1vbmUgJiYKKwl0ZXN0X2NvbW1pdCBuZXctdHdvICYmCisJZ2l0IGJyYW5jaCAtdSBtYXN0ZXIgb2xkLWJyYW5jaCAmJgorCWdpdCBicmFuY2ggLXUgdXBzdHJlYW0tYnJhbmNoIG5ldy1icmFuY2gKKycKKworY2hlY2sgSEVBRCByZWYgcmVmcy9oZWFkcy9uZXctYnJhbmNoCitjaGVjayAiQHsxfSIgY29tbWl0IG5ldy1vbmUKK2NoZWNrICJIRUFEQHsxfSIgY29tbWl0IG5ldy1vbmUKK2NoZWNrICJAe25vd30iIGNvbW1pdCBuZXctdHdvCitjaGVjayAiSEVBREB7bm93fSIgY29tbWl0IG5ldy10d28KK2NoZWNrICJAey0xfSIgcmVmIHJlZnMvaGVhZHMvb2xkLWJyYW5jaAorY2hlY2sgIkB7LTF9QHswfSIgY29tbWl0IG9sZC10d28KK2NoZWNrICJAey0xfUB7MX0iIGNvbW1pdCBvbGQtb25lCitjaGVjayAiQHt1fSIgcmVmIHJlZnMvaGVhZHMvdXBzdHJlYW0tYnJhbmNoCitjaGVjayAiSEVBREB7dX0iIHJlZiByZWZzL2hlYWRzL3Vwc3RyZWFtLWJyYW5jaAorY2hlY2sgIkB7dX1AezF9IiBjb21taXQgdXBzdHJlYW0tb25lCitjaGVjayAiQHstMX1Ae3V9IiByZWYgcmVmcy9oZWFkcy9tYXN0ZXIKK2NoZWNrICJAey0xfUB7dX1AezF9IiBjb21taXQgbWFzdGVyLW9uZQorY2hlY2sgIkAiIGNvbW1pdCBuZXctdHdvCitjaGVjayAiQEB7dX0iIHJlZiByZWZzL2hlYWRzL3Vwc3RyZWFtLWJyYW5jaAorY2hlY2sgIkBAL2F0LXRlc3QiIHJlZiByZWZzL2hlYWRzL0BAL2F0LXRlc3QKK3Rlc3RfaGF2ZV9wcmVyZXEgTUlOR1cgfHwKK2NoZWNrICJAL2F0LXRlc3QiIHJlZiByZWZzL2hlYWRzL0AvYXQtdGVzdAorY2hlY2sgIkBhdC10ZXN0IiByZWYgcmVmcy9oZWFkcy9AYXQtdGVzdAorbm9uc2Vuc2UgIkB7dX1Aey0xfSIKK25vbnNlbnNlICJAezB9QHswfSIKK25vbnNlbnNlICJAezF9QHt1fSIKK25vbnNlbnNlICJIRUFEQHstMX0iCitub25zZW5zZSAiQHstMX1Aey0xfSIKKworIyBAe059IHZlcnN1cyBIRUFEQHtOfQorCitjaGVjayAiSEVBREB7M30iIGNvbW1pdCBvbGQtdHdvCitub25zZW5zZSAiQHszfSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIHRvIG9sZC1icmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgb2xkLWJyYW5jaAorJworCitjaGVjayBIRUFEIHJlZiByZWZzL2hlYWRzL29sZC1icmFuY2gKK2NoZWNrICJIRUFEQHsxfSIgY29tbWl0IG5ldy10d28KK2NoZWNrICJAezF9IiBjb21taXQgb2xkLW9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcGF0aCB3aXRoIEAnICcKKwllY2hvIGNvbnRlbnQgPm5vcm1hbCAmJgorCWVjaG8gY29udGVudCA+ZnVuQG55ICYmCisJZ2l0IGFkZCBub3JtYWwgZnVuQG55ICYmCisJZ2l0IGNvbW1pdCAtbSAiZnVubnkgcGF0aCIKKycKKworY2hlY2sgIkA6bm9ybWFsIiBibG9iIGNvbnRlbnQKK2NoZWNrICJAOmZ1bkBueSIgYmxvYiBjb250ZW50CisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUwOS1yb290LXdvcmstdHJlZS5zaCBiL3QvdDE1MDktcm9vdC13b3JrLXRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmQyZjdhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDktcm9vdC13b3JrLXRyZWUuc2gKQEAgLTAsMCArMSwyNTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IEdpdCB3aGVuIGdpdCByZXBvc2l0b3J5IGlzIGxvY2F0ZWQgYXQgcm9vdAorCitUaGlzIHRlc3QgcmVxdWlyZXMgd3JpdGUgYWNjZXNzIGluIHJvb3QuIERvIG5vdCBib3RoZXIgaWYgeW91IGRvIG5vdAoraGF2ZSBhIHRocm93YXdheSBjaHJvb3Qgb3IgVk0uCisKK1NjcmlwdCB0MTUwOS9wcmVwYXJlLWNocm9vdC5zaCBtYXkgaGVscCB5b3Ugc2V0dXAgY2hyb290LCB0aGVuIHlvdQorY2FuIGNocm9vdCBpbiBhbmQgZXhlY3V0ZSB0aGlzIHRlc3QgZnJvbSB0aGVyZS4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfY21wX3ZhbCgpIHsKKwllY2hvICIkMSIgPiBleHBlY3RlZAorCWVjaG8gIiQyIiA+IHJlc3VsdAorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorfQorCit0ZXN0X3ZhcnMoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJDE6IGdpdGRpciIgJworCQl0ZXN0X2NtcF92YWwgIiciJDIiJyIgIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpIgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiQxOiB3b3JrdHJlZSIgJworCQl0ZXN0X2NtcF92YWwgIiciJDMiJyIgIiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpIgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiQxOiBwcmVmaXgiICcKKwkJdGVzdF9jbXBfdmFsICInIiQ0IiciICIkKGdpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeCkiCisJJworfQorCit0ZXN0X2Zvb2Jhcl9yb290KCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCByZWxhdGl2ZScgJworCQl0ZXN0IC16ICIkKGNkIC8gJiYgZ2l0IGxzLWZpbGVzKSIgJiYKKwkJZ2l0IGFkZCBmb28vZm9vbWUgJiYKKwkJZ2l0IGFkZCBmb28vYmFyL2Jhcm1lICYmCisJCWdpdCBhZGQgbWUgJiYKKwkJKCBjZCAvICYmIGdpdCBscy1maWxlcyAtLXN0YWdlICkgPiByZXN1bHQgJiYKKwkJdGVzdF9jbXAgL2xzLmV4cGVjdGVkIHJlc3VsdCAmJgorCQlybSAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvaW5kZXgiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGFic29sdXRlJyAnCisJCXRlc3QgLXogIiQoY2QgLyAmJiBnaXQgbHMtZmlsZXMpIiAmJgorCQlnaXQgYWRkIC9mb28vZm9vbWUgJiYKKwkJZ2l0IGFkZCAvZm9vL2Jhci9iYXJtZSAmJgorCQlnaXQgYWRkIC9tZSAmJgorCQkoIGNkIC8gJiYgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgKSA+IHJlc3VsdCAmJgorCQl0ZXN0X2NtcCAvbHMuZXhwZWN0ZWQgcmVzdWx0ICYmCisJCXJtICIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9pbmRleCIKKwknCisKK30KKwordGVzdF9mb29iYXJfZm9vKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCByZWxhdGl2ZScgJworCQl0ZXN0IC16ICIkKGNkIC8gJiYgZ2l0IGxzLWZpbGVzKSIgJiYKKwkJZ2l0IGFkZCBmb29tZSAmJgorCQlnaXQgYWRkIGJhci9iYXJtZSAmJgorCQlnaXQgYWRkIC4uL21lICYmCisJCSggY2QgLyAmJiBnaXQgbHMtZmlsZXMgLS1zdGFnZSApID4gcmVzdWx0ICYmCisJCXRlc3RfY21wIC9scy5leHBlY3RlZCByZXN1bHQgJiYKKwkJcm0gIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL2luZGV4IgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhYnNvbHV0ZScgJworCQl0ZXN0IC16ICIkKGNkIC8gJiYgZ2l0IGxzLWZpbGVzKSIgJiYKKwkJZ2l0IGFkZCAvZm9vL2Zvb21lICYmCisJCWdpdCBhZGQgL2Zvby9iYXIvYmFybWUgJiYKKwkJZ2l0IGFkZCAvbWUgJiYKKwkJKCBjZCAvICYmIGdpdCBscy1maWxlcyAtLXN0YWdlICkgPiByZXN1bHQgJiYKKwkJdGVzdF9jbXAgL2xzLmV4cGVjdGVkIHJlc3VsdCAmJgorCQlybSAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvaW5kZXgiCisJJworfQorCit0ZXN0X2Zvb2Jhcl9mb29iYXIoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHJlbGF0aXZlJyAnCisJCXRlc3QgLXogIiQoY2QgLyAmJiBnaXQgbHMtZmlsZXMpIiAmJgorCQlnaXQgYWRkIC4uL2Zvb21lICYmCisJCWdpdCBhZGQgYmFybWUgJiYKKwkJZ2l0IGFkZCAuLi8uLi9tZSAmJgorCQkoIGNkIC8gJiYgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgKSA+IHJlc3VsdCAmJgorCQl0ZXN0X2NtcCAvbHMuZXhwZWN0ZWQgcmVzdWx0ICYmCisJCXJtICIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9pbmRleCIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYWJzb2x1dGUnICcKKwkJdGVzdCAteiAiJChjZCAvICYmIGdpdCBscy1maWxlcykiICYmCisJCWdpdCBhZGQgL2Zvby9mb29tZSAmJgorCQlnaXQgYWRkIC9mb28vYmFyL2Jhcm1lICYmCisJCWdpdCBhZGQgL21lICYmCisJCSggY2QgLyAmJiBnaXQgbHMtZmlsZXMgLS1zdGFnZSApID4gcmVzdWx0ICYmCisJCXRlc3RfY21wIC9scy5leHBlY3RlZCByZXN1bHQgJiYKKwkJcm0gIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL2luZGV4IgorCScKK30KKworaWYgISB0ZXN0IC13IC8KK3RoZW4KKwlza2lwX2FsbD0iVGVzdCByZXF1aXJpbmcgd3JpdGFibGUgLyBza2lwcGVkLiBSZWFkIHRoaXMgdGVzdCBpZiB5b3Ugd2FudCB0byBydW4gaXQiCisJdGVzdF9kb25lCitmaQorCitpZiAgdGVzdCAtZSAvcmVmcyB8fCB0ZXN0IC1lIC9vYmplY3RzIHx8IHRlc3QgLWUgL2luZm8gfHwgdGVzdCAtZSAvaG9va3MgfHwKKyAgICB0ZXN0IC1lIC8uZ2l0IHx8IHRlc3QgLWUgL2ZvbyB8fCB0ZXN0IC1lIC9tZQordGhlbgorCXNraXBfYWxsPSJTa2lwIHRlc3QgdGhhdCBjbG9iYmVycyBleGlzdGluZyBmaWxlcyBpbiAvIgorCXRlc3RfZG9uZQorZmkKKworaWYgWyAiJElLTk9XV0hBVElBTURPSU5HIiAhPSAiWUVTIiBdOyB0aGVuCisJc2tpcF9hbGw9IllvdSBtdXN0IHNldCBlbnYgdmFyIElLTk9XV0hBVElBTURPSU5HPVlFUyBpbiBvcmRlciB0byBydW4gdGhpcyB0ZXN0IgorCXRlc3RfZG9uZQorZmkKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIE5PVF9ST09UCit0aGVuCisJc2tpcF9hbGw9Ik5vIHlvdSBjYW4ndCBydW4gdGhpcyBhcyByb290IgorCXRlc3RfZG9uZQorZmkKKworT05FX1NIQTE9ZDAwNDkxZmQ3ZTViYjZmYTI4YzUxN2EwYmIzMmI4YjUwNjUzOWQ0ZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXJtIC1yZiAvZm9vICYmCisJbWtkaXIgL2ZvbyAmJgorCW1rZGlyIC9mb28vYmFyICYmCisJZWNobyAxID4gL2Zvby9mb29tZSAmJgorCWVjaG8gMSA+IC9mb28vYmFyL2Jhcm1lICYmCisJZWNobyAxID4gL21lCisnCisKK3NheSAiR0lUX0RJUiBhYnNvbHV0ZSwgR0lUX1dPUktfVFJFRSBzZXQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC8nICdjZCAvJworCitjYXQgPmxzLmV4cGVjdGVkIDw8RU9GCisxMDA2NDQgJE9ORV9TSEExIDAJZm9vL2Jhci9iYXJtZQorMTAwNjQ0ICRPTkVfU0hBMSAwCWZvby9mb29tZQorMTAwNjQ0ICRPTkVfU0hBMSAwCW1lCitFT0YKKworR0lUX0RJUj0iJFRSQVNIX0RJUkVDVE9SWS8uZ2l0IiAmJiBleHBvcnQgR0lUX0RJUgorR0lUX1dPUktfVFJFRT0vICYmIGV4cG9ydCBHSVRfV09SS19UUkVFCisKK3Rlc3RfdmFycyAnYWJzIGdpdGRpciwgcm9vdCcgIiRHSVRfRElSIiAiLyIgIiIKK3Rlc3RfZm9vYmFyX3Jvb3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gL2ZvbycgJ2NkIC9mb28nCisKK3Rlc3RfdmFycyAnYWJzIGdpdGRpciwgZm9vJyAiJEdJVF9ESVIiICIvIiAiZm9vLyIKK3Rlc3RfZm9vYmFyX2ZvbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbyB0byAvZm9vL2JhcicgJ2NkIC9mb28vYmFyJworCit0ZXN0X3ZhcnMgJ2FicyBnaXRkaXIsIGZvby9iYXInICIkR0lUX0RJUiIgIi8iICJmb28vYmFyLyIKK3Rlc3RfZm9vYmFyX2Zvb2JhcgorCitzYXkgIkdJVF9ESVIgcmVsYXRpdmUsIEdJVF9XT1JLX1RSRUUgc2V0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbyB0byAvJyAnY2QgLycKKworR0lUX0RJUj0iJChlY2hvICRUUkFTSF9ESVJFQ1RPUll8c2VkICdzLF4vLCwnKS8uZ2l0IiAmJiBleHBvcnQgR0lUX0RJUgorR0lUX1dPUktfVFJFRT0vICYmIGV4cG9ydCBHSVRfV09SS19UUkVFCisKK3Rlc3RfdmFycyAncmVsIGdpdGRpciwgcm9vdCcgIiRHSVRfRElSIiAiLyIgIiIKK3Rlc3RfZm9vYmFyX3Jvb3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gL2ZvbycgJ2NkIC9mb28nCisKK0dJVF9ESVI9Ii4uLyRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgJiYgZXhwb3J0IEdJVF9ESVIKK0dJVF9XT1JLX1RSRUU9LyAmJiBleHBvcnQgR0lUX1dPUktfVFJFRQorCit0ZXN0X3ZhcnMgJ3JlbCBnaXRkaXIsIGZvbycgIiRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgIi8iICJmb28vIgordGVzdF9mb29iYXJfZm9vCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC9mb28vYmFyJyAnY2QgL2Zvby9iYXInCisKK0dJVF9ESVI9Ii4uLy4uLyRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgJiYgZXhwb3J0IEdJVF9ESVIKK0dJVF9XT1JLX1RSRUU9LyAmJiBleHBvcnQgR0lUX1dPUktfVFJFRQorCit0ZXN0X3ZhcnMgJ3JlbCBnaXRkaXIsIGZvby9iYXInICIkVFJBU0hfRElSRUNUT1JZLy5naXQiICIvIiAiZm9vL2Jhci8iCit0ZXN0X2Zvb2Jhcl9mb29iYXIKKworc2F5ICJHSVRfRElSIHJlbGF0aXZlLCBHSVRfV09SS19UUkVFIHJlbGF0aXZlIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbyB0byAvJyAnY2QgLycKKworR0lUX0RJUj0iJChlY2hvICRUUkFTSF9ESVJFQ1RPUll8c2VkICdzLF4vLCwnKS8uZ2l0IiAmJiBleHBvcnQgR0lUX0RJUgorR0lUX1dPUktfVFJFRT0uICYmIGV4cG9ydCBHSVRfV09SS19UUkVFCisKK3Rlc3RfdmFycyAncmVsIGdpdGRpciwgcm9vdCcgIiRHSVRfRElSIiAiLyIgIiIKK3Rlc3RfZm9vYmFyX3Jvb3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gLycgJ2NkIC9mb28nCisKK0dJVF9ESVI9Ii4uLyRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgJiYgZXhwb3J0IEdJVF9ESVIKK0dJVF9XT1JLX1RSRUU9Li4gJiYgZXhwb3J0IEdJVF9XT1JLX1RSRUUKKwordGVzdF92YXJzICdyZWwgZ2l0ZGlyLCBmb28nICIkVFJBU0hfRElSRUNUT1JZLy5naXQiICIvIiAiZm9vLyIKK3Rlc3RfZm9vYmFyX2ZvbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbyB0byAvZm9vL2JhcicgJ2NkIC9mb28vYmFyJworCitHSVRfRElSPSIuLi8uLi8kVFJBU0hfRElSRUNUT1JZLy5naXQiICYmIGV4cG9ydCBHSVRfRElSCitHSVRfV09SS19UUkVFPS4uLy4uICYmIGV4cG9ydCBHSVRfV09SS19UUkVFCisKK3Rlc3RfdmFycyAncmVsIGdpdGRpciwgZm9vL2JhcicgIiRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgIi8iICJmb28vYmFyLyIKK3Rlc3RfZm9vYmFyX2Zvb2JhcgorCitzYXkgIi5naXQgYXQgcm9vdCIKKwordW5zZXQgR0lUX0RJUgordW5zZXQgR0lUX1dPUktfVFJFRQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbyB0byAvJyAnY2QgLycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJcm0gLXJmIC8uZ2l0ICYmCisJZWNobyAiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gLy5naXQvIiA+IGV4cGVjdGVkICYmCisJZ2l0IGluaXQgPiByZXN1bHQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfdmFycyAnYXV0byBnaXRkaXIsIHJvb3QnICIuZ2l0IiAiLyIgIiIKK3Rlc3RfZm9vYmFyX3Jvb3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gL2ZvbycgJ2NkIC9mb28nCit0ZXN0X3ZhcnMgJ2F1dG8gZ2l0ZGlyLCBmb28nICIvLmdpdCIgIi8iICJmb28vIgordGVzdF9mb29iYXJfZm9vCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC9mb28vYmFyJyAnY2QgL2Zvby9iYXInCit0ZXN0X3ZhcnMgJ2F1dG8gZ2l0ZGlyLCBmb28vYmFyJyAiLy5naXQiICIvIiAiZm9vL2Jhci8iCit0ZXN0X2Zvb2Jhcl9mb29iYXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCcgJ3JtIC1yZiAvLmdpdCcKKworc2F5ICJhdXRvIGJhcmUgZ2l0ZGlyIgorCisjIERFU1RST1lZWVlZISEhISEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJcm0gLXJmIC9yZWZzIC9vYmplY3RzIC9pbmZvIC9ob29rcyAmJgorCXJtIC1mIC9leHBlY3RlZCAvbHMuZXhwZWN0ZWQgL21lIC9yZXN1bHQgJiYKKwljZCAvICYmCisJZWNobyAiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gLyIgPiBleHBlY3RlZCAmJgorCWdpdCBpbml0IC0tYmFyZSA+IHJlc3VsdCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF92YXJzICdhdXRvIGdpdGRpciwgcm9vdCcgIi4iICIiICIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC9mb28nICdjZCAvZm9vJworCit0ZXN0X3ZhcnMgJ2F1dG8gZ2l0ZGlyLCByb290JyAiLyIgIiIgIiIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTA5L2V4Y2x1ZGVzIGIvdC90MTUwOS9leGNsdWRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGQyMWQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTUwOS9leGNsdWRlcwpAQCAtMCwwICsxLDE0IEBACisqLm8KKyp+CisqLmJhaworKi5jCisqLmgKKy5naXQKK2NvbnRyaWIKK0RvY3VtZW50YXRpb24KK2dpdC1ndWkKK2dpdGstZ2l0CitnaXR3ZWIKK3QvdDQwMTMKK3QvdDUxMDAKK3QvdDU1MTUKZGlmZiAtLWdpdCBhL3QvdDE1MDkvcHJlcGFyZS1jaHJvb3Quc2ggYi90L3QxNTA5L3ByZXBhcmUtY2hyb290LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZkNDdlMmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA5L3ByZXBhcmUtY2hyb290LnNoCkBAIC0wLDAgKzEsNTggQEAKKyMhL2Jpbi9zaAorCitkaWUoKSB7CisJZWNobyA+JjIgIiRAIgorCWV4aXQgMQorfQorCit4bWtkaXIoKSB7CisJd2hpbGUgWyAtbiAiJDEiIF07IGRvCisJCVsgLWQgIiQxIiBdIHx8IG1rZGlyICIkMSIgfHwgZGllICJVbmFibGUgdG8gbWtkaXIgJDEiCisJCXNoaWZ0CisJZG9uZQorfQorCitSPSIkMSIKKworWyAiJChpZCAtdSkiIC1lcSAwIF0gJiYgZGllICJUaGlzIHNjcmlwdCBzaG91bGQgbm90IGJlIHJ1biBhcyByb290LCB3aGF0IGlmIGl0IGRvZXMgcm0gLXJmIC8/IgorWyAtbiAiJFIiIF0gfHwgZGllICJ1c2FnZTogcHJlcGFyZS1jaHJvb3Quc2ggPHJvb3Q+IgorWyAteCBnaXQgXSB8fCBkaWUgIlRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIGV4ZWN1dGVkIGF0IGdpdCBzb3VyY2UgY29kZSdzIHRvcCBkaXJlY3RvcnkiCitpZiBbIC14IC9iaW4vYnVzeWJveCBdOyB0aGVuCisJQkI9L2Jpbi9idXN5Ym94CitlbGlmIFsgLXggL3Vzci9iaW4vYnVzeWJveCBdOyB0aGVuCisJQkI9L3Vzci9iaW4vYnVzeWJveAorZWxzZQorCWRpZSAiWW91IG5lZWQgYnVzeWJveCIKK2ZpCisKK3hta2RpciAiJFIiICIkUi9iaW4iICIkUi9ldGMiICIkUi9saWIiICIkUi9kZXYiCit0b3VjaCAiJFIvZGV2L251bGwiCitlY2hvICJyb290Ong6MDowOnJvb3Q6LzovYmluL3NoIiA+ICIkUi9ldGMvcGFzc3dkIgorZWNobyAiJChpZCAtbnUpOng6JChpZCAtdSk6JChpZCAtZyk6OiQocHdkKS90Oi9iaW4vc2giID4+ICIkUi9ldGMvcGFzc3dkIgorZWNobyAicm9vdDo6MDpyb290IiA+ICIkUi9ldGMvZ3JvdXAiCitlY2hvICIkKGlkIC1uZyk6OiQoaWQgLWcpOiQoaWQgLW51KSIgPj4gIiRSL2V0Yy9ncm91cCIKKworWyAteCAiJFIkQkIiIF0gfHwgY3AgJEJCICIkUi9iaW4vYnVzeWJveCIKK2ZvciBjbWQgaW4gc2ggc3UgbHMgZXhwciB0ciBiYXNlbmFtZSBybSBta2RpciBtdiBpZCB1bmFtZSBkaXJuYW1lIGNhdCB0cnVlIHNlZCBkaWZmOyBkbworCWxuIC1mIC1zIC9iaW4vYnVzeWJveCAiJFIvYmluLyRjbWQiCitkb25lCisKK21rZGlyIC1wICIkUiQocHdkKSIKK3JzeW5jIC0tZXhjbHVkZS1mcm9tIHQvdDE1MDkvZXhjbHVkZXMgLUhhIC4gIiRSJChwd2QpIgorIyBGYWtlIHBlcmwgdG8gcmVkdWNlIGRlcGVuZGVuY3ksIHQxNTA5IGRvZXMgbm90IHVzZSBwZXJsLCBidXQgc29tZQorIyBlbnYgbWlnaHQgc2xpcCB0aHJvdWdoLCBzZWUgdGVzdC1saWIuc2gsIHVuc2V0LipQRVJMX1BBVEgKK3NlZCAnc3xeUEVSTF9QQVRIPS4qfFBFUkxfUEFUSD0vYmluL3RydWV8JyBHSVQtQlVJTEQtT1BUSU9OUyA+ICIkUiQocHdkKS9HSVQtQlVJTEQtT1BUSU9OUyIKK2ZvciBjbWQgaW4gZ2l0ICRCQjtkbyAKKwlsZGQgJGNtZCB8IGdyZXAgJy8nIHwgc2VkICdzLC4qXHNcKC9bXiBdKlwpLiosXDEsJyB8IHdoaWxlIHJlYWQgaTsgZG8KKwkJbWtkaXIgLXAgIiRSJChkaXJuYW1lICRpKSIKKwkJY3AgIiRpIiAiJFIvJGkiCisJZG9uZQorZG9uZQorY2F0IDw8RU9GCitBbGwgaXMgc2V0IHVwIGluICRSLCBleGVjdXRlIHQxNTA5IHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworc3VkbyBjaHJvb3QgJFIgL2Jpbi9zdSAtICQoaWQgLW51KQorSUtOT1dXSEFUSUFNRE9JTkc9WUVTIC4vdDE1MDktcm9vdC13b3JrdHJlZS5zaCAtdiAtaQorCitXaGVuIHlvdSBhcmUgZG9uZSwgc2ltcGx5IGRlbGV0ZSAkUiB0byBjbGVhbiB1cAorRU9GCmRpZmYgLS1naXQgYS90L3QxNTEwLXJlcG8tc2V0dXAuc2ggYi90L3QxNTEwLXJlcG8tc2V0dXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTk3NDQ1NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MTAtcmVwby1zZXR1cC5zaApAQCAtMCwwICsxLDgwNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IlRlc3RzIG9mIGN3ZC9wcmVmaXgvd29ya3RyZWUvZ2l0ZGlyIHNldHVwIGluIGFsbCBjYXNlcworCitBIGZldyBydWxlcyBmb3IgcmVwbyBzZXR1cDoKKworMS4gR0lUX0RJUiBpcyByZWxhdGl2ZSB0byB1c2VyJ3MgY3dkLiAtLWdpdC1kaXIgaXMgZXF1aXZhbGVudCB0bworICAgR0lUX0RJUi4KKworMi4gLmdpdCBmaWxlIGlzIHJlbGF0aXZlIHRvIHBhcmVudCBkaXJlY3RvcnkuIC5naXQgZmlsZSBpcyBiYXNpY2FsbHkKKyAgIHN5bWxpbmsgaW4gZGlzZ3Vpc2UuIFRoZSBkaXJlY3Rvcnkgd2hlcmUgLmdpdCBmaWxlIHBvaW50cyB0byB3aWxsCisgICBiZWNvbWUgbmV3IGdpdF9kaXIuCisKKzMuIGNvcmUud29ya3RyZWUgaXMgcmVsYXRpdmUgdG8gZ2l0X2Rpci4KKworNC4gR0lUX1dPUktfVFJFRSBpcyByZWxhdGl2ZSB0byB1c2VyJ3MgY3dkLiAtLXdvcmstdHJlZSBpcworICAgZXF1aXZhbGVudCB0byBHSVRfV09SS19UUkVFLgorCis1LiBHSVRfV09SS19UUkVFL2NvcmUud29ya3RyZWUgd2FzIG9yaWdpbmFsbHkgbWVhbnQgdG8gd29yayBvbmx5IGlmCisgICBHSVRfRElSIGlzIHNldCwgYnV0IGVhcmxpZXIgZ2l0IGRpZG4ndCBlbmZvcmNlIGl0LCBhbmQgc29tZSBzY3JpcHRzCisgICBkZXBlbmQgb24gdGhlIGltcGxlbWVudGF0aW9uIHRoYXQgaGFwcGVuZWQgdG8gZmlyc3QgZGlzY292ZXIgLmdpdCBieQorICAgZ29pbmcgdXAgZnJvbSB0aGUgdXNlcnMgJGN3ZCBhbmQgdGhlbiB1c2luZyB0aGUgc3BlY2lmaWVkIHdvcmtpbmcgdHJlZQorICAgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFueSByZWxhdGlvbiB0byB3aGVyZSAuZ2l0IHdhcyBmb3VuZCBpbi4gIFRoaXMKKyAgIGhpc3RvcmljYWwgYmVoYXZpb3VyIG11c3QgYmUga2VwdC4KKworNi4gRWZmZWN0aXZlIEdJVF9XT1JLX1RSRUUgb3ZlcnJpZGVzIGNvcmUud29ya3RyZWUgYW5kIGNvcmUuYmFyZQorCis3LiBFZmZlY3RpdmUgY29yZS53b3JrdHJlZSBjb25mbGljdHMgd2l0aCBjb3JlLmJhcmUKKworOC4gSWYgR0lUX0RJUiBpcyBzZXQgYnV0IG5laXRoZXIgd29ya3RyZWUgbm9yIGJhcmUgc2V0dGluZyBpcyBnaXZlbiwKKyAgIG9yaWdpbmFsIGN3ZCBiZWNvbWVzIHdvcmt0cmVlLgorCis5LiBJZiAuZ2l0IGRpc2NvdmVyeSBpcyBkb25lIGluc2lkZSBhIHJlcG8sIHRoZSByZXBvIGJlY29tZXMgYSBiYXJlCisgICByZXBvLiAuZ2l0IGRpc2NvdmVyeSBpcyBwZXJmb3JtZWQgaWYgR0lUX0RJUiBpcyBub3Qgc2V0LgorCisxMC4gSWYgbm8gd29ya3RyZWUgaXMgYXZhaWxhYmxlLCBjd2QgcmVtYWlucyB1bmNoYW5nZWQsIHByZWZpeCBpcworICAgIE5VTEwuCisKKzExLiBXaGVuIHVzZXIncyBjd2QgaXMgb3V0c2lkZSB3b3JrdHJlZSwgY3dkIHJlbWFpbnMgdW5jaGFuZ2VkLAorICAgIHByZWZpeCBpcyBOVUxMLgorIgorCisjIFRoaXMgdGVzdCBoZWF2aWx5IHJlbGllcyBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igb2YgbmVzdGVkIGZ1bmN0aW9uIGNhbGxzLgordGVzdF91bnRyYWNlYWJsZT1VbmZvcnR1bmF0ZWx5WWVzCisKKy4gLi90ZXN0LWxpYi5zaAorCitoZXJlPSQocHdkKQorCit0ZXN0X3JlcG8gKCkgeworCSgKKwkJY2QgIiQxIiAmJgorCQlpZiB0ZXN0IC1uICIkMiIKKwkJdGhlbgorCQkJR0lUX0RJUj0iJDIiICYmCisJCQlleHBvcnQgR0lUX0RJUgorCQlmaSAmJgorCQlpZiB0ZXN0IC1uICIkMyIKKwkJdGhlbgorCQkJR0lUX1dPUktfVFJFRT0iJDMiICYmCisJCQlleHBvcnQgR0lUX1dPUktfVFJFRQorCQlmaSAmJgorCQlybSAtZiB0cmFjZSAmJgorCQlHSVRfVFJBQ0VfU0VUVVA9IiQocHdkKS90cmFjZSIgZ2l0IHN5bWJvbGljLXJlZiBIRUFEID4vZGV2L251bGwgJiYKKwkJZ3JlcCAnXnNldHVwOiAnIHRyYWNlID5yZXN1bHQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisJKQorfQorCittYXliZV9jb25maWcgKCkgeworCWZpbGU9JDEgdmFyPSQyIHZhbHVlPSQzICYmCisJaWYgdGVzdCAiJHZhbHVlIiAhPSB1bnNldAorCXRoZW4KKwkJZ2l0IGNvbmZpZyAtLWZpbGU9IiRmaWxlIiAiJHZhciIgIiR2YWx1ZSIKKwlmaQorfQorCitzZXR1cF9yZXBvICgpIHsKKwluYW1lPSQxIHdvcmt0cmVlY2ZnPSQyIGdpdGZpbGU9JDMgYmFyZWNmZz0kNCAmJgorCXNhbmVfdW5zZXQgR0lUX0RJUiBHSVRfV09SS19UUkVFICYmCisKKwlnaXQgaW5pdCAiJG5hbWUiICYmCisJbWF5YmVfY29uZmlnICIkbmFtZS8uZ2l0L2NvbmZpZyIgY29yZS53b3JrdHJlZSAiJHdvcmt0cmVlY2ZnIiAmJgorCW1heWJlX2NvbmZpZyAiJG5hbWUvLmdpdC9jb25maWciIGNvcmUuYmFyZSAiJGJhcmVjZmciICYmCisJbWtkaXIgLXAgIiRuYW1lL3N1Yi9zdWIiICYmCisKKwlpZiB0ZXN0ICIke2dpdGZpbGU6K3NldH0iCisJdGhlbgorCQltdiAiJG5hbWUvLmdpdCIgIiRuYW1lLmdpdCIgJiYKKwkJZWNobyAiZ2l0ZGlyOiAuLi8kbmFtZS5naXQiID4iJG5hbWUvLmdpdCIKKwlmaQorfQorCittYXliZV9zZXQgKCkgeworCXZhcj0kMSB2YWx1ZT0kMiAmJgorCWlmIHRlc3QgIiR2YWx1ZSIgIT0gdW5zZXQKKwl0aGVuCisJCWV2YWwgIiR2YXI9XCR2YWx1ZSIgJiYKKwkJZXhwb3J0ICR2YXIKKwlmaQorfQorCitzZXR1cF9lbnYgKCkgeworCXdvcmt0cmVlbnY9JDEgZ2l0ZGlyZW52PSQyICYmCisJc2FuZV91bnNldCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgJiYKKwltYXliZV9zZXQgR0lUX0RJUiAiJGdpdGRpcmVudiIgJiYKKwltYXliZV9zZXQgR0lUX1dPUktfVFJFRSAiJHdvcmt0cmVlZW52IgorfQorCitleHBlY3QgKCkgeworCWNhdCA+IiQxL2V4cGVjdGVkIiA8PC1FT0YKKwlzZXR1cDogZ2l0X2RpcjogJDIKKwlzZXR1cDogZ2l0X2NvbW1vbl9kaXI6ICQyCisJc2V0dXA6IHdvcmt0cmVlOiAkMworCXNldHVwOiBjd2Q6ICQ0CisJc2V0dXA6IHByZWZpeDogJDUKKwlFT0YKK30KKwordHJ5X2Nhc2UgKCkgeworCW5hbWU9JDEgd29ya3RyZWVlbnY9JDIgZ2l0ZGlyZW52PSQzICYmCisJc2V0dXBfZW52ICIkd29ya3RyZWVlbnYiICIkZ2l0ZGlyZW52IiAmJgorCWV4cGVjdCAiJG5hbWUiICIkNCIgIiQ1IiAiJDYiICIkNyIgJiYKKwl0ZXN0X3JlcG8gIiRuYW1lIgorfQorCitydW5fd3RfdGVzdHMgKCkgeworCU49JDEgZ2l0ZmlsZT0kMgorCisJYWJzZ2l0PSIkaGVyZS8kTi8uZ2l0IgorCWRvdGdpdD0uZ2l0CisJZG90ZG90Z2l0PS4uLy4uLy5naXQKKworCWlmIHRlc3QgIiRnaXRmaWxlIgorCXRoZW4KKwkJYWJzZ2l0PSIkaGVyZS8kTi5naXQiCisJCWRvdGdpdD0kYWJzZ2l0IGRvdGRvdGdpdD0kYWJzZ2l0CisJZmkKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiMkTjogZXhwbGljaXQgR0lUX1dPUktfVFJFRSBhbmQgR0lUX0RJUiBhdCB0b3BsZXZlbCIgJworCQl0cnlfY2FzZSAkTiAiJGhlcmUvJE4iIC5naXQgXAorCQkJIiRkb3RnaXQiICIkaGVyZS8kTiIgIiRoZXJlLyROIiAiKG51bGwpIiAmJgorCQl0cnlfY2FzZSAkTiAuIC5naXQgXAorCQkJIiRkb3RnaXQiICIkaGVyZS8kTiIgIiRoZXJlLyROIiAiKG51bGwpIiAmJgorCQl0cnlfY2FzZSAkTiAiJGhlcmUvJE4iICIkaGVyZS8kTi8uZ2l0IiBcCisJCQkiJGFic2dpdCIgIiRoZXJlLyROIiAiJGhlcmUvJE4iICIobnVsbCkiICYmCisJCXRyeV9jYXNlICROIC4gIiRoZXJlLyROLy5naXQiIFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUvJE4iICIkaGVyZS8kTiIgIihudWxsKSIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIjJE46IGV4cGxpY2l0IEdJVF9XT1JLX1RSRUUgYW5kIEdJVF9ESVIgaW4gc3ViZGlyIiAnCisJCXRyeV9jYXNlICROL3N1Yi9zdWIgIiRoZXJlLyROIiAuLi8uLi8uZ2l0IFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUvJE4iICIkaGVyZS8kTiIgc3ViL3N1Yi8gJiYKKwkJdHJ5X2Nhc2UgJE4vc3ViL3N1YiAuLi8uLiAuLi8uLi8uZ2l0IFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUvJE4iICIkaGVyZS8kTiIgc3ViL3N1Yi8gJiYKKwkJdHJ5X2Nhc2UgJE4vc3ViL3N1YiAiJGhlcmUvJE4iICIkaGVyZS8kTi8uZ2l0IiBcCisJCQkiJGFic2dpdCIgIiRoZXJlLyROIiAiJGhlcmUvJE4iIHN1Yi9zdWIvICYmCisJCXRyeV9jYXNlICROL3N1Yi9zdWIgLi4vLi4gIiRoZXJlLyROLy5naXQiIFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUvJE4iICIkaGVyZS8kTiIgc3ViL3N1Yi8KKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIjJE46IGV4cGxpY2l0IEdJVF9XT1JLX1RSRUUgZnJvbSBwYXJlbnQgb2Ygd29ya3RyZWUiICcKKwkJdHJ5X2Nhc2UgJE4gIiRoZXJlLyROL3d0IiAuZ2l0IFwKKwkJCSIkZG90Z2l0IiAiJGhlcmUvJE4vd3QiICIkaGVyZS8kTiIgIihudWxsKSIgJiYKKwkJdHJ5X2Nhc2UgJE4gd3QgLmdpdCBcCisJCQkiJGRvdGdpdCIgIiRoZXJlLyROL3d0IiAiJGhlcmUvJE4iICIobnVsbCkiICYmCisJCXRyeV9jYXNlICROIHd0ICIkaGVyZS8kTi8uZ2l0IiBcCisJCQkiJGFic2dpdCIgIiRoZXJlLyROL3d0IiAiJGhlcmUvJE4iICIobnVsbCkiICYmCisJCXRyeV9jYXNlICROICIkaGVyZS8kTi93dCIgIiRoZXJlLyROLy5naXQiIFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUvJE4vd3QiICIkaGVyZS8kTiIgIihudWxsKSIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIjJE46IGV4cGxpY2l0IEdJVF9XT1JLX1RSRUUgZnJvbSBuZXBoZXcgb2Ygd29ya3RyZWUiICcKKwkJdHJ5X2Nhc2UgJE4vc3ViL3N1YiAiJGhlcmUvJE4vd3QiIC4uLy4uLy5naXQgXAorCQkJIiRkb3Rkb3RnaXQiICIkaGVyZS8kTi93dCIgIiRoZXJlLyROL3N1Yi9zdWIiICIobnVsbCkiICYmCisJCXRyeV9jYXNlICROL3N1Yi9zdWIgLi4vLi4vd3QgLi4vLi4vLmdpdCBcCisJCQkiJGRvdGRvdGdpdCIgIiRoZXJlLyROL3d0IiAiJGhlcmUvJE4vc3ViL3N1YiIgIihudWxsKSIgJiYKKwkJdHJ5X2Nhc2UgJE4vc3ViL3N1YiAuLi8uLi93dCAiJGhlcmUvJE4vLmdpdCIgXAorCQkJIiRhYnNnaXQiICIkaGVyZS8kTi93dCIgIiRoZXJlLyROL3N1Yi9zdWIiICIobnVsbCkiICYmCisJCXRyeV9jYXNlICROL3N1Yi9zdWIgIiRoZXJlLyROL3d0IiAiJGhlcmUvJE4vLmdpdCIgXAorCQkJIiRhYnNnaXQiICIkaGVyZS8kTi93dCIgIiRoZXJlLyROL3N1Yi9zdWIiICIobnVsbCkiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiIyROOiBjaGRpcl90b190b3BsZXZlbCB1c2VzIHdvcmt0cmVlLCBub3QgZ2l0IGRpciIgJworCQl0cnlfY2FzZSAkTiAiJGhlcmUiIC5naXQgXAorCQkJIiRhYnNnaXQiICIkaGVyZSIgIiRoZXJlIiAkTi8gJiYKKwkJdHJ5X2Nhc2UgJE4gLi4gLmdpdCBcCisJCQkiJGFic2dpdCIgIiRoZXJlIiAiJGhlcmUiICROLyAmJgorCQl0cnlfY2FzZSAkTiAuLiAiJGhlcmUvJE4vLmdpdCIgXAorCQkJIiRhYnNnaXQiICIkaGVyZSIgIiRoZXJlIiAkTi8gJiYKKwkJdHJ5X2Nhc2UgJE4gIiRoZXJlIiAiJGhlcmUvJE4vLmdpdCIgXAorCQkJIiRhYnNnaXQiICIkaGVyZSIgIiRoZXJlIiAkTi8KKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIjJE46IGNoZGlyX3RvX3RvcGxldmVsIHVzZXMgd29ya3RyZWUgKGZyb20gc3ViZGlyKSIgJworCQl0cnlfY2FzZSAkTi9zdWIvc3ViICIkaGVyZSIgLi4vLi4vLmdpdCBcCisJCQkiJGFic2dpdCIgIiRoZXJlIiAiJGhlcmUiICROL3N1Yi9zdWIvICYmCisJCXRyeV9jYXNlICROL3N1Yi9zdWIgLi4vLi4vLi4gLi4vLi4vLmdpdCBcCisJCQkiJGFic2dpdCIgIiRoZXJlIiAiJGhlcmUiICROL3N1Yi9zdWIvICYmCisJCXRyeV9jYXNlICROL3N1Yi9zdWIgLi4vLi4vLi4vICIkaGVyZS8kTi8uZ2l0IiBcCisJCQkiJGFic2dpdCIgIiRoZXJlIiAiJGhlcmUiICROL3N1Yi9zdWIvICYmCisJCXRyeV9jYXNlICROL3N1Yi9zdWIgIiRoZXJlIiAiJGhlcmUvJE4vLmdpdCIgXAorCQkJIiRhYnNnaXQiICIkaGVyZSIgIiRoZXJlIiAkTi9zdWIvc3ViLworCScKK30KKworIyB0cnlfcmVwbyAjYyBHSVRfV09SS19UUkVFIEdJVF9ESVIgY29yZS53b3JrdHJlZSAuZ2l0ZmlsZT8gY29yZS5iYXJlIFwKKyMJKGdpdCBkaXIpICh3b3JrIHRyZWUpIChjd2QpIChwcmVmaXgpIFwJPC0tIGF0IHRvcGxldmVsCisjCShnaXQgZGlyKSAod29yayB0cmVlKSAoY3dkKSAocHJlZml4KQk8LS0gZnJvbSBzdWJkaXIKK3RyeV9yZXBvICgpIHsKKwluYW1lPSQxIHdvcmt0cmVlZW52PSQyIGdpdGRpcmVudj0kMyAmJgorCXNldHVwX3JlcG8gIiRuYW1lIiAiJDQiICIkNSIgIiQ2IiAmJgorCXNoaWZ0IDYgJiYKKwl0cnlfY2FzZSAiJG5hbWUiICIkd29ya3RyZWVlbnYiICIkZ2l0ZGlyZW52IiBcCisJCSIkMSIgIiQyIiAiJDMiICIkNCIgJiYKKwlzaGlmdCA0ICYmCisJY2FzZSAiJGdpdGRpcmVudiIgaW4KKwkvKiB8ID86LyogfCB1bnNldCkgOzsKKwkqKQorCQlnaXRkaXJlbnY9Li4vJGdpdGRpcmVudiA7OworCWVzYWMgJiYKKwl0cnlfY2FzZSAiJG5hbWUvc3ViIiAiJHdvcmt0cmVlZW52IiAiJGdpdGRpcmVudiIgXAorCQkiJDEiICIkMiIgIiQzIiAiJDQiCit9CisKKyMgQml0IDAgPSBHSVRfV09SS19UUkVFCisjIEJpdCAxID0gR0lUX0RJUgorIyBCaXQgMiA9IGNvcmUud29ya3RyZWUKKyMgQml0IDMgPSAuZ2l0IGlzIGEgZmlsZQorIyBCaXQgNCA9IGJhcmUgcmVwbworIyBDYXNlIyA9IGVuY29kaW5nIG9mIHRoZSBhYm92ZSA1IGJpdHMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzA6IG5vbmJhcmUgcmVwbywgbm8gZXhwbGljaXQgY29uZmlndXJhdGlvbicgJworCXRyeV9yZXBvIDAgdW5zZXQgdW5zZXQgdW5zZXQgIiIgdW5zZXQgXAorCQkuZ2l0ICIkaGVyZS8wIiAiJGhlcmUvMCIgIihudWxsKSIgXAorCQkuZ2l0ICIkaGVyZS8wIiAiJGhlcmUvMCIgc3ViLyAyPm1lc3NhZ2UgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTogR0lUX1dPUktfVFJFRSB3aXRob3V0IGV4cGxpY2l0IEdJVF9ESVIgaXMgYWNjZXB0ZWQnICcKKwl0cnlfcmVwbyAxICIkaGVyZSIgdW5zZXQgdW5zZXQgIiIgdW5zZXQgXAorCQkiJGhlcmUvMS8uZ2l0IiAiJGhlcmUiICIkaGVyZSIgMS8gXAorCQkiJGhlcmUvMS8uZ2l0IiAiJGhlcmUiICIkaGVyZSIgMS9zdWIvIDI+bWVzc2FnZSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyOiB3b3JrdHJlZSBkZWZhdWx0cyB0byBjd2Qgd2l0aCBleHBsaWNpdCBHSVRfRElSJyAnCisJdHJ5X3JlcG8gMiB1bnNldCAiJGhlcmUvMi8uZ2l0IiB1bnNldCAiIiB1bnNldCBcCisJCSIkaGVyZS8yLy5naXQiICIkaGVyZS8yIiAiJGhlcmUvMiIgIihudWxsKSIgXAorCQkiJGhlcmUvMi8uZ2l0IiAiJGhlcmUvMi9zdWIiICIkaGVyZS8yL3N1YiIgIihudWxsKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzJiOiByZWxhdGl2ZSBHSVRfRElSJyAnCisJdHJ5X3JlcG8gMmIgdW5zZXQgIi5naXQiIHVuc2V0ICIiIHVuc2V0IFwKKwkJIi5naXQiICIkaGVyZS8yYiIgIiRoZXJlLzJiIiAiKG51bGwpIiBcCisJCSIuLi8uZ2l0IiAiJGhlcmUvMmIvc3ViIiAiJGhlcmUvMmIvc3ViIiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMzogc2V0dXAnICcKKwlzZXR1cF9yZXBvIDMgdW5zZXQgIiIgdW5zZXQgJiYKKwlta2RpciAtcCAzL3N1Yi9zdWIgMy93dC9zdWIKKycKK3J1bl93dF90ZXN0cyAzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyM0OiBjb3JlLndvcmt0cmVlIHdpdGhvdXQgR0lUX0RJUiBzZXQgaXMgYWNjZXB0ZWQnICcKKwlzZXR1cF9yZXBvIDQgLi4vc3ViICIiIHVuc2V0ICYmCisJbWtkaXIgLXAgNC9zdWIgc3ViICYmCisJdHJ5X2Nhc2UgNCB1bnNldCB1bnNldCBcCisJCS5naXQgIiRoZXJlLzQvc3ViIiAiJGhlcmUvNCIgIihudWxsKSIgXAorCQkiJGhlcmUvNC8uZ2l0IiAiJGhlcmUvNC9zdWIiICIkaGVyZS80L3N1YiIgIihudWxsKSIgMj5tZXNzYWdlICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzU6IGNvcmUud29ya3RyZWUgKyBHSVRfV09SS19UUkVFIGlzIGFjY2VwdGVkJyAnCisJIyBvcjogeW91IGNhbm5vdCBpbnRpbWlkYXRlIGF3YXkgdGhlIGxhY2sgb2YgR0lUX0RJUiBzZXR0aW5nCisJdHJ5X3JlcG8gNSAiJGhlcmUiIHVuc2V0ICIkaGVyZS81IiAiIiB1bnNldCBcCisJCSIkaGVyZS81Ly5naXQiICIkaGVyZSIgIiRoZXJlIiA1LyBcCisJCSIkaGVyZS81Ly5naXQiICIkaGVyZSIgIiRoZXJlIiA1L3N1Yi8gMj5tZXNzYWdlICYmCisJdHJ5X3JlcG8gNWEgLi4gdW5zZXQgIiRoZXJlLzVhIiAiIiB1bnNldCBcCisJCSIkaGVyZS81YS8uZ2l0IiAiJGhlcmUiICIkaGVyZSIgNWEvIFwKKwkJIiRoZXJlLzVhLy5naXQiICIkaGVyZS81YSIgIiRoZXJlLzVhIiBzdWIvICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzY6IHNldHRpbmcgR0lUX0RJUiBicmluZ3MgY29yZS53b3JrdHJlZSB0byBsaWZlJyAnCisJc2V0dXBfcmVwbyA2ICIkaGVyZS82IiAiIiB1bnNldCAmJgorCXRyeV9jYXNlIDYgdW5zZXQgLmdpdCBcCisJCS5naXQgIiRoZXJlLzYiICIkaGVyZS82IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDYgdW5zZXQgIiRoZXJlLzYvLmdpdCIgXAorCQkiJGhlcmUvNi8uZ2l0IiAiJGhlcmUvNiIgIiRoZXJlLzYiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgNi9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkiJGhlcmUvNi8uZ2l0IiAiJGhlcmUvNiIgIiRoZXJlLzYiIHN1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgNi9zdWIvc3ViIHVuc2V0ICIkaGVyZS82Ly5naXQiIFwKKwkJIiRoZXJlLzYvLmdpdCIgIiRoZXJlLzYiICIkaGVyZS82IiBzdWIvc3ViLworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjNmI6IEdJVF9ESVIgc2V0LCBjb3JlLndvcmt0cmVlIHJlbGF0aXZlJyAnCisJc2V0dXBfcmVwbyA2YiAuLiAiIiB1bnNldCAmJgorCXRyeV9jYXNlIDZiIHVuc2V0IC5naXQgXAorCQkuZ2l0ICIkaGVyZS82YiIgIiRoZXJlLzZiIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDZiIHVuc2V0ICIkaGVyZS82Yi8uZ2l0IiBcCisJCSIkaGVyZS82Yi8uZ2l0IiAiJGhlcmUvNmIiICIkaGVyZS82YiIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSA2Yi9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkiJGhlcmUvNmIvLmdpdCIgIiRoZXJlLzZiIiAiJGhlcmUvNmIiIHN1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgNmIvc3ViL3N1YiB1bnNldCAiJGhlcmUvNmIvLmdpdCIgXAorCQkiJGhlcmUvNmIvLmdpdCIgIiRoZXJlLzZiIiAiJGhlcmUvNmIiIHN1Yi9zdWIvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyM2YzogR0lUX0RJUiBzZXQsIGNvcmUud29ya3RyZWU9Li4vd3QgKGFic29sdXRlKScgJworCXNldHVwX3JlcG8gNmMgIiRoZXJlLzZjL3d0IiAiIiB1bnNldCAmJgorCW1rZGlyIC1wIDZjL3d0L3N1YiAmJgorCisJdHJ5X2Nhc2UgNmMgdW5zZXQgLmdpdCBcCisJCS5naXQgIiRoZXJlLzZjL3d0IiAiJGhlcmUvNmMiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgNmMgdW5zZXQgIiRoZXJlLzZjLy5naXQiIFwKKwkJIiRoZXJlLzZjLy5naXQiICIkaGVyZS82Yy93dCIgIiRoZXJlLzZjIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDZjL3N1Yi9zdWIgdW5zZXQgLi4vLi4vLmdpdCBcCisJCS4uLy4uLy5naXQgIiRoZXJlLzZjL3d0IiAiJGhlcmUvNmMvc3ViL3N1YiIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSA2Yy9zdWIvc3ViIHVuc2V0ICIkaGVyZS82Yy8uZ2l0IiBcCisJCSIkaGVyZS82Yy8uZ2l0IiAiJGhlcmUvNmMvd3QiICIkaGVyZS82Yy9zdWIvc3ViIiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjNmQ6IEdJVF9ESVIgc2V0LCBjb3JlLndvcmt0cmVlPS4uL3d0IChyZWxhdGl2ZSknICcKKwlzZXR1cF9yZXBvIDZkICIkaGVyZS82ZC93dCIgIiIgdW5zZXQgJiYKKwlta2RpciAtcCA2ZC93dC9zdWIgJiYKKworCXRyeV9jYXNlIDZkIHVuc2V0IC5naXQgXAorCQkuZ2l0ICIkaGVyZS82ZC93dCIgIiRoZXJlLzZkIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDZkIHVuc2V0ICIkaGVyZS82ZC8uZ2l0IiBcCisJCSIkaGVyZS82ZC8uZ2l0IiAiJGhlcmUvNmQvd3QiICIkaGVyZS82ZCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSA2ZC9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkuLi8uLi8uZ2l0ICIkaGVyZS82ZC93dCIgIiRoZXJlLzZkL3N1Yi9zdWIiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgNmQvc3ViL3N1YiB1bnNldCAiJGhlcmUvNmQvLmdpdCIgXAorCQkiJGhlcmUvNmQvLmdpdCIgIiRoZXJlLzZkL3d0IiAiJGhlcmUvNmQvc3ViL3N1YiIgIihudWxsKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzZlOiBHSVRfRElSIHNldCwgY29yZS53b3JrdHJlZT0uLi8uLiAoYWJzb2x1dGUpJyAnCisJc2V0dXBfcmVwbyA2ZSAiJGhlcmUiICIiIHVuc2V0ICYmCisJdHJ5X2Nhc2UgNmUgdW5zZXQgLmdpdCBcCisJCSIkaGVyZS82ZS8uZ2l0IiAiJGhlcmUiICIkaGVyZSIgNmUvICYmCisJdHJ5X2Nhc2UgNmUgdW5zZXQgIiRoZXJlLzZlLy5naXQiIFwKKwkJIiRoZXJlLzZlLy5naXQiICIkaGVyZSIgIiRoZXJlIiA2ZS8gJiYKKwl0cnlfY2FzZSA2ZS9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkiJGhlcmUvNmUvLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDZlL3N1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgNmUvc3ViL3N1YiB1bnNldCAiJGhlcmUvNmUvLmdpdCIgXAorCQkiJGhlcmUvNmUvLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDZlL3N1Yi9zdWIvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyM2ZjogR0lUX0RJUiBzZXQsIGNvcmUud29ya3RyZWU9Li4vLi4gKHJlbGF0aXZlKScgJworCXNldHVwX3JlcG8gNmYgLi4vLi4vICIiIHVuc2V0ICYmCisJdHJ5X2Nhc2UgNmYgdW5zZXQgLmdpdCBcCisJCSIkaGVyZS82Zi8uZ2l0IiAiJGhlcmUiICIkaGVyZSIgNmYvICYmCisJdHJ5X2Nhc2UgNmYgdW5zZXQgIiRoZXJlLzZmLy5naXQiIFwKKwkJIiRoZXJlLzZmLy5naXQiICIkaGVyZSIgIiRoZXJlIiA2Zi8gJiYKKwl0cnlfY2FzZSA2Zi9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkiJGhlcmUvNmYvLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDZmL3N1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgNmYvc3ViL3N1YiB1bnNldCAiJGhlcmUvNmYvLmdpdCIgXAorCQkiJGhlcmUvNmYvLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDZmL3N1Yi9zdWIvCisnCisKKyMgY2FzZSAjNzogR0lUX1dPUktfVFJFRSBvdmVycmlkZXMgY29yZS53b3JrdHJlZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyM3OiBzZXR1cCcgJworCXNldHVwX3JlcG8gNyBub24tZXhpc3RlbnQgIiIgdW5zZXQgJiYKKwlta2RpciAtcCA3L3N1Yi9zdWIgNy93dC9zdWIKKycKK3J1bl93dF90ZXN0cyA3CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyM4OiBnaXRmaWxlLCBlYXN5IGNhc2UnICcKKwl0cnlfcmVwbyA4IHVuc2V0IHVuc2V0IHVuc2V0IGdpdGZpbGUgdW5zZXQgXAorCQkiJGhlcmUvOC5naXQiICIkaGVyZS84IiAiJGhlcmUvOCIgIihudWxsKSIgXAorCQkiJGhlcmUvOC5naXQiICIkaGVyZS84IiAiJGhlcmUvOCIgc3ViLworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjOTogR0lUX1dPUktfVFJFRSBhY2NlcHRlZCB3aXRoIGdpdGZpbGUnICcKKwlta2RpciAtcCA5L3d0ICYmCisJdHJ5X3JlcG8gOSB3dCB1bnNldCB1bnNldCBnaXRmaWxlIHVuc2V0IFwKKwkJIiRoZXJlLzkuZ2l0IiAiJGhlcmUvOS93dCIgIiRoZXJlLzkiICIobnVsbCkiIFwKKwkJIiRoZXJlLzkuZ2l0IiAiJGhlcmUvOS9zdWIvd3QiICIkaGVyZS85L3N1YiIgIihudWxsKSIgMj5tZXNzYWdlICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzEwOiBHSVRfRElSIGNhbiBwb2ludCB0byBnaXRmaWxlJyAnCisJdHJ5X3JlcG8gMTAgdW5zZXQgIiRoZXJlLzEwLy5naXQiIHVuc2V0IGdpdGZpbGUgdW5zZXQgXAorCQkiJGhlcmUvMTAuZ2l0IiAiJGhlcmUvMTAiICIkaGVyZS8xMCIgIihudWxsKSIgXAorCQkiJGhlcmUvMTAuZ2l0IiAiJGhlcmUvMTAvc3ViIiAiJGhlcmUvMTAvc3ViIiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTBiOiByZWxhdGl2ZSBHSVRfRElSIGNhbiBwb2ludCB0byBnaXRmaWxlJyAnCisJdHJ5X3JlcG8gMTBiIHVuc2V0IC5naXQgdW5zZXQgZ2l0ZmlsZSB1bnNldCBcCisJCSIkaGVyZS8xMGIuZ2l0IiAiJGhlcmUvMTBiIiAiJGhlcmUvMTBiIiAiKG51bGwpIiBcCisJCSIkaGVyZS8xMGIuZ2l0IiAiJGhlcmUvMTBiL3N1YiIgIiRoZXJlLzEwYi9zdWIiICIobnVsbCkiCisnCisKKyMgY2FzZSAjMTE6IEdJVF9XT1JLX1RSRUUgd29ya3MsIGdpdGZpbGUgY2FzZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxMTogc2V0dXAnICcKKwlzZXR1cF9yZXBvIDExIHVuc2V0IGdpdGZpbGUgdW5zZXQgJiYKKwlta2RpciAtcCAxMS9zdWIvc3ViIDExL3d0L3N1YgorJworcnVuX3d0X3Rlc3RzIDExIGdpdGZpbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzEyOiBjb3JlLndvcmt0cmVlIHdpdGggZ2l0ZmlsZSBpcyBhY2NlcHRlZCcgJworCXRyeV9yZXBvIDEyIHVuc2V0IHVuc2V0ICIkaGVyZS8xMiIgZ2l0ZmlsZSB1bnNldCBcCisJCSIkaGVyZS8xMi5naXQiICIkaGVyZS8xMiIgIiRoZXJlLzEyIiAiKG51bGwpIiBcCisJCSIkaGVyZS8xMi5naXQiICIkaGVyZS8xMiIgIiRoZXJlLzEyIiBzdWIvIDI+bWVzc2FnZSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxMzogY29yZS53b3JrdHJlZStHSVRfV09SS19UUkVFIGFjY2VwdGVkICh3aXRoIGdpdGZpbGUpJyAnCisJIyBvcjogeW91IGNhbm5vdCBpbnRpbWlkYXRlIGF3YXkgdGhlIGxhY2sgb2YgR0lUX0RJUiBzZXR0aW5nCisJdHJ5X3JlcG8gMTMgbm9uLWV4aXN0ZW50LXRvbyB1bnNldCBub24tZXhpc3RlbnQgZ2l0ZmlsZSB1bnNldCBcCisJCSIkaGVyZS8xMy5naXQiICIkaGVyZS8xMy9ub24tZXhpc3RlbnQtdG9vIiAiJGhlcmUvMTMiICIobnVsbCkiIFwKKwkJIiRoZXJlLzEzLmdpdCIgIiRoZXJlLzEzL3N1Yi9ub24tZXhpc3RlbnQtdG9vIiAiJGhlcmUvMTMvc3ViIiAiKG51bGwpIiAyPm1lc3NhZ2UgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgbWVzc2FnZQorJworCisjIGNhc2UgIzE0LgorIyBJZiB0aGlzIHdlcmUgbW9yZSB0YWJsZS1kcml2ZW4sIGl0IGNvdWxkIHNoYXJlIGNvZGUgd2l0aCBjYXNlICM2LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTQ6IGNvcmUud29ya3RyZWUgd2l0aCBHSVRfRElSIHBvaW50aW5nIHRvIGdpdGZpbGUnICcKKwlzZXR1cF9yZXBvIDE0ICIkaGVyZS8xNCIgZ2l0ZmlsZSB1bnNldCAmJgorCXRyeV9jYXNlIDE0IHVuc2V0IC5naXQgXAorCQkiJGhlcmUvMTQuZ2l0IiAiJGhlcmUvMTQiICIkaGVyZS8xNCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNCB1bnNldCAiJGhlcmUvMTQvLmdpdCIgXAorCQkiJGhlcmUvMTQuZ2l0IiAiJGhlcmUvMTQiICIkaGVyZS8xNCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNC9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkiJGhlcmUvMTQuZ2l0IiAiJGhlcmUvMTQiICIkaGVyZS8xNCIgc3ViL3N1Yi8gJiYKKwl0cnlfY2FzZSAxNC9zdWIvc3ViIHVuc2V0ICIkaGVyZS8xNC8uZ2l0IiBcCisJCSIkaGVyZS8xNC5naXQiICIkaGVyZS8xNCIgIiRoZXJlLzE0IiBzdWIvc3ViLyAmJgorCisJc2V0dXBfcmVwbyAxNGMgIiRoZXJlLzE0Yy93dCIgZ2l0ZmlsZSB1bnNldCAmJgorCW1rZGlyIC1wIDE0Yy93dC9zdWIgJiYKKworCXRyeV9jYXNlIDE0YyB1bnNldCAuZ2l0IFwKKwkJIiRoZXJlLzE0Yy5naXQiICIkaGVyZS8xNGMvd3QiICIkaGVyZS8xNGMiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTRjIHVuc2V0ICIkaGVyZS8xNGMvLmdpdCIgXAorCQkiJGhlcmUvMTRjLmdpdCIgIiRoZXJlLzE0Yy93dCIgIiRoZXJlLzE0YyIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNGMvc3ViL3N1YiB1bnNldCAuLi8uLi8uZ2l0IFwKKwkJIiRoZXJlLzE0Yy5naXQiICIkaGVyZS8xNGMvd3QiICIkaGVyZS8xNGMvc3ViL3N1YiIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNGMvc3ViL3N1YiB1bnNldCAiJGhlcmUvMTRjLy5naXQiIFwKKwkJIiRoZXJlLzE0Yy5naXQiICIkaGVyZS8xNGMvd3QiICIkaGVyZS8xNGMvc3ViL3N1YiIgIihudWxsKSIgJiYKKworCXNldHVwX3JlcG8gMTRkICIkaGVyZS8xNGQvd3QiIGdpdGZpbGUgdW5zZXQgJiYKKwlta2RpciAtcCAxNGQvd3Qvc3ViICYmCisKKwl0cnlfY2FzZSAxNGQgdW5zZXQgLmdpdCBcCisJCSIkaGVyZS8xNGQuZ2l0IiAiJGhlcmUvMTRkL3d0IiAiJGhlcmUvMTRkIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDE0ZCB1bnNldCAiJGhlcmUvMTRkLy5naXQiIFwKKwkJIiRoZXJlLzE0ZC5naXQiICIkaGVyZS8xNGQvd3QiICIkaGVyZS8xNGQiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTRkL3N1Yi9zdWIgdW5zZXQgLi4vLi4vLmdpdCBcCisJCSIkaGVyZS8xNGQuZ2l0IiAiJGhlcmUvMTRkL3d0IiAiJGhlcmUvMTRkL3N1Yi9zdWIiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTRkL3N1Yi9zdWIgdW5zZXQgIiRoZXJlLzE0ZC8uZ2l0IiBcCisJCSIkaGVyZS8xNGQuZ2l0IiAiJGhlcmUvMTRkL3d0IiAiJGhlcmUvMTRkL3N1Yi9zdWIiICIobnVsbCkiICYmCisKKwlzZXR1cF9yZXBvIDE0ZSAiJGhlcmUiIGdpdGZpbGUgdW5zZXQgJiYKKwl0cnlfY2FzZSAxNGUgdW5zZXQgLmdpdCBcCisJCSIkaGVyZS8xNGUuZ2l0IiAiJGhlcmUiICIkaGVyZSIgMTRlLyAmJgorCXRyeV9jYXNlIDE0ZSB1bnNldCAiJGhlcmUvMTRlLy5naXQiIFwKKwkJIiRoZXJlLzE0ZS5naXQiICIkaGVyZSIgIiRoZXJlIiAxNGUvICYmCisJdHJ5X2Nhc2UgMTRlL3N1Yi9zdWIgdW5zZXQgLi4vLi4vLmdpdCBcCisJCSIkaGVyZS8xNGUuZ2l0IiAiJGhlcmUiICIkaGVyZSIgMTRlL3N1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgMTRlL3N1Yi9zdWIgdW5zZXQgIiRoZXJlLzE0ZS8uZ2l0IiBcCisJCSIkaGVyZS8xNGUuZ2l0IiAiJGhlcmUiICIkaGVyZSIgMTRlL3N1Yi9zdWIvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxNGI6IGNvcmUud29ya3RyZWUgaXMgcmVsYXRpdmUgdG8gYWN0dWFsIGdpdCBkaXInICcKKwlzZXR1cF9yZXBvIDE0YiAuLi8xNGIgZ2l0ZmlsZSB1bnNldCAmJgorCXRyeV9jYXNlIDE0YiB1bnNldCAuZ2l0IFwKKwkJIiRoZXJlLzE0Yi5naXQiICIkaGVyZS8xNGIiICIkaGVyZS8xNGIiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTRiIHVuc2V0ICIkaGVyZS8xNGIvLmdpdCIgXAorCQkiJGhlcmUvMTRiLmdpdCIgIiRoZXJlLzE0YiIgIiRoZXJlLzE0YiIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNGIvc3ViL3N1YiB1bnNldCAuLi8uLi8uZ2l0IFwKKwkJIiRoZXJlLzE0Yi5naXQiICIkaGVyZS8xNGIiICIkaGVyZS8xNGIiIHN1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgMTRiL3N1Yi9zdWIgdW5zZXQgIiRoZXJlLzE0Yi8uZ2l0IiBcCisJCSIkaGVyZS8xNGIuZ2l0IiAiJGhlcmUvMTRiIiAiJGhlcmUvMTRiIiBzdWIvc3ViLyAmJgorCisJc2V0dXBfcmVwbyAxNGYgLi4vIGdpdGZpbGUgdW5zZXQgJiYKKwl0cnlfY2FzZSAxNGYgdW5zZXQgLmdpdCBcCisJCSIkaGVyZS8xNGYuZ2l0IiAiJGhlcmUiICIkaGVyZSIgMTRmLyAmJgorCXRyeV9jYXNlIDE0ZiB1bnNldCAiJGhlcmUvMTRmLy5naXQiIFwKKwkJIiRoZXJlLzE0Zi5naXQiICIkaGVyZSIgIiRoZXJlIiAxNGYvICYmCisJdHJ5X2Nhc2UgMTRmL3N1Yi9zdWIgdW5zZXQgLi4vLi4vLmdpdCBcCisJCSIkaGVyZS8xNGYuZ2l0IiAiJGhlcmUiICIkaGVyZSIgMTRmL3N1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgMTRmL3N1Yi9zdWIgdW5zZXQgIiRoZXJlLzE0Zi8uZ2l0IiBcCisJCSIkaGVyZS8xNGYuZ2l0IiAiJGhlcmUiICIkaGVyZSIgMTRmL3N1Yi9zdWIvCisnCisKKyMgY2FzZSAjMTU6IEdJVF9XT1JLX1RSRUUgb3ZlcnJpZGVzIGNvcmUud29ya3RyZWUgKGdpdGZpbGUgY2FzZSkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTU6IHNldHVwJyAnCisJc2V0dXBfcmVwbyAxNSBub24tZXhpc3RlbnQgZ2l0ZmlsZSB1bnNldCAmJgorCW1rZGlyIC1wIDE1L3N1Yi9zdWIgMTUvd3Qvc3ViCisnCitydW5fd3RfdGVzdHMgMTUgZ2l0ZmlsZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTZhOiBpbXBsaWNpdGx5IGJhcmUgcmVwbyAoY3dkIGluc2lkZSAuZ2l0IGRpciknICcKKwlzZXR1cF9yZXBvIDE2YSB1bnNldCAiIiB1bnNldCAmJgorCW1rZGlyIC1wIDE2YS8uZ2l0L3d0L3N1YiAmJgorCisJdHJ5X2Nhc2UgMTZhLy5naXQgdW5zZXQgdW5zZXQgXAorCQkuICIobnVsbCkiICIkaGVyZS8xNmEvLmdpdCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNmEvLmdpdC93dCB1bnNldCB1bnNldCBcCisJCSIkaGVyZS8xNmEvLmdpdCIgIihudWxsKSIgIiRoZXJlLzE2YS8uZ2l0L3d0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDE2YS8uZ2l0L3d0L3N1YiB1bnNldCB1bnNldCBcCisJCSIkaGVyZS8xNmEvLmdpdCIgIihudWxsKSIgIiRoZXJlLzE2YS8uZ2l0L3d0L3N1YiIgIihudWxsKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzE2YjogYmFyZSAuZ2l0IChjd2QgaW5zaWRlIC5naXQgZGlyKScgJworCXNldHVwX3JlcG8gMTZiIHVuc2V0ICIiIHRydWUgJiYKKwlta2RpciAtcCAxNmIvLmdpdC93dC9zdWIgJiYKKworCXRyeV9jYXNlIDE2Yi8uZ2l0IHVuc2V0IHVuc2V0IFwKKwkJLiAiKG51bGwpIiAiJGhlcmUvMTZiLy5naXQiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTZiLy5naXQvd3QgdW5zZXQgdW5zZXQgXAorCQkiJGhlcmUvMTZiLy5naXQiICIobnVsbCkiICIkaGVyZS8xNmIvLmdpdC93dCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNmIvLmdpdC93dC9zdWIgdW5zZXQgdW5zZXQgXAorCQkiJGhlcmUvMTZiLy5naXQiICIobnVsbCkiICIkaGVyZS8xNmIvLmdpdC93dC9zdWIiICIobnVsbCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxNmM6IGJhcmUgLmdpdCBoYXMgbm8gd29ya3RyZWUnICcKKwl0cnlfcmVwbyAxNmMgdW5zZXQgdW5zZXQgdW5zZXQgIiIgdHJ1ZSBcCisJCS5naXQgIihudWxsKSIgIiRoZXJlLzE2YyIgIihudWxsKSIgXAorCQkiJGhlcmUvMTZjLy5naXQiICIobnVsbCkiICIkaGVyZS8xNmMvc3ViIiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTZkOiBiYXJlbmVzcyBwcmVzZXJ2ZWQgYWNyb3NzIGFsaWFzJyAnCisJc2V0dXBfcmVwbyAxNmQgdW5zZXQgIiIgdW5zZXQgJiYKKwkoCisJCWNkIDE2ZC8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGF0dXMgJiYKKwkJZ2l0IGNvbmZpZyBhbGlhcy5zdCBzdGF0dXMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTZlOiBiYXJlbmVzcyBwcmVzZXJ2ZWQgYnkgLS1iYXJlJyAnCisJc2V0dXBfcmVwbyAxNmUgdW5zZXQgIiIgdW5zZXQgJiYKKwkoCisJCWNkIDE2ZS8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGF0dXMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tYmFyZSBzdGF0dXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxNzogR0lUX1dPUktfVFJFRSB3aXRob3V0IGV4cGxpY2l0IEdJVF9ESVIgaXMgYWNjZXB0ZWQgKGJhcmUgY2FzZSknICcKKwkjIEp1c3QgbGlrZSAjMTYuCisJc2V0dXBfcmVwbyAxN2EgdW5zZXQgIiIgdHJ1ZSAmJgorCXNldHVwX3JlcG8gMTdiIHVuc2V0ICIiIHRydWUgJiYKKwlta2RpciAtcCAxN2EvLmdpdC93dC9zdWIgJiYKKwlta2RpciAtcCAxN2IvLmdpdC93dC9zdWIgJiYKKworCXRyeV9jYXNlIDE3YS8uZ2l0ICIkaGVyZS8xN2EiIHVuc2V0IFwKKwkJIiRoZXJlLzE3YS8uZ2l0IiAiJGhlcmUvMTdhIiAiJGhlcmUvMTdhIiAuZ2l0LyBcCisJCTI+bWVzc2FnZSAmJgorCXRyeV9jYXNlIDE3YS8uZ2l0L3d0ICIkaGVyZS8xN2EiIHVuc2V0IFwKKwkJIiRoZXJlLzE3YS8uZ2l0IiAiJGhlcmUvMTdhIiAiJGhlcmUvMTdhIiAuZ2l0L3d0LyAmJgorCXRyeV9jYXNlIDE3YS8uZ2l0L3d0L3N1YiAiJGhlcmUvMTdhIiB1bnNldCBcCisJCSIkaGVyZS8xN2EvLmdpdCIgIiRoZXJlLzE3YSIgIiRoZXJlLzE3YSIgLmdpdC93dC9zdWIvICYmCisKKwl0cnlfY2FzZSAxN2IvLmdpdCAiJGhlcmUvMTdiIiB1bnNldCBcCisJCSIkaGVyZS8xN2IvLmdpdCIgIiRoZXJlLzE3YiIgIiRoZXJlLzE3YiIgLmdpdC8gJiYKKwl0cnlfY2FzZSAxN2IvLmdpdC93dCAiJGhlcmUvMTdiIiB1bnNldCBcCisJCSIkaGVyZS8xN2IvLmdpdCIgIiRoZXJlLzE3YiIgIiRoZXJlLzE3YiIgLmdpdC93dC8gJiYKKwl0cnlfY2FzZSAxN2IvLmdpdC93dC9zdWIgIiRoZXJlLzE3YiIgdW5zZXQgXAorCQkiJGhlcmUvMTdiLy5naXQiICIkaGVyZS8xN2IiICIkaGVyZS8xN2IiIC5naXQvd3Qvc3ViLyAmJgorCisJdHJ5X3JlcG8gMTdjICIkaGVyZS8xN2MiIHVuc2V0IHVuc2V0ICIiIHRydWUgXAorCQkuZ2l0ICIkaGVyZS8xN2MiICIkaGVyZS8xN2MiICIobnVsbCkiIFwKKwkJIiRoZXJlLzE3Yy8uZ2l0IiAiJGhlcmUvMTdjIiAiJGhlcmUvMTdjIiBzdWIvIDI+bWVzc2FnZSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxODogYmFyZSAuZ2l0IG5hbWVkIGJ5IEdJVF9ESVIgaGFzIG5vIHdvcmt0cmVlJyAnCisJdHJ5X3JlcG8gMTggdW5zZXQgLmdpdCB1bnNldCAiIiB0cnVlIFwKKwkJLmdpdCAiKG51bGwpIiAiJGhlcmUvMTgiICIobnVsbCkiIFwKKwkJLi4vLmdpdCAiKG51bGwpIiAiJGhlcmUvMTgvc3ViIiAiKG51bGwpIiAmJgorCXRyeV9yZXBvIDE4YiB1bnNldCAiJGhlcmUvMThiLy5naXQiIHVuc2V0ICIiIHRydWUgXAorCQkiJGhlcmUvMThiLy5naXQiICIobnVsbCkiICIkaGVyZS8xOGIiICIobnVsbCkiIFwKKwkJIiRoZXJlLzE4Yi8uZ2l0IiAiKG51bGwpIiAiJGhlcmUvMThiL3N1YiIgIihudWxsKSIKKycKKworIyBDYXNlICMxOTogR0lUX0RJUiArIEdJVF9XT1JLX1RSRUUgc3VwcHJlc3NlcyBiYXJlbmVzcy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxOTogc2V0dXAnICcKKwlzZXR1cF9yZXBvIDE5IHVuc2V0ICIiIHRydWUgJiYKKwlta2RpciAtcCAxOS9zdWIvc3ViIDE5L3d0L3N1YgorJworcnVuX3d0X3Rlc3RzIDE5CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyMGE6IGNvcmUud29ya3RyZWUgd2l0aG91dCBHSVRfRElSIGFjY2VwdGVkIChpbnNpZGUgLmdpdCknICcKKwkjIFVubGlrZSBjYXNlICMxNmEuCisJc2V0dXBfcmVwbyAyMGEgIiRoZXJlLzIwYSIgIiIgdW5zZXQgJiYKKwlta2RpciAtcCAyMGEvLmdpdC93dC9zdWIgJiYKKwl0cnlfY2FzZSAyMGEvLmdpdCB1bnNldCB1bnNldCBcCisJCSIkaGVyZS8yMGEvLmdpdCIgIiRoZXJlLzIwYSIgIiRoZXJlLzIwYSIgLmdpdC8gMj5tZXNzYWdlICYmCisJdHJ5X2Nhc2UgMjBhLy5naXQvd3QgdW5zZXQgdW5zZXQgXAorCQkiJGhlcmUvMjBhLy5naXQiICIkaGVyZS8yMGEiICIkaGVyZS8yMGEiIC5naXQvd3QvICYmCisJdHJ5X2Nhc2UgMjBhLy5naXQvd3Qvc3ViIHVuc2V0IHVuc2V0IFwKKwkJIiRoZXJlLzIwYS8uZ2l0IiAiJGhlcmUvMjBhIiAiJGhlcmUvMjBhIiAuZ2l0L3d0L3N1Yi8gJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjBiL2M6IGNvcmUud29ya3RyZWUgYW5kIGNvcmUuYmFyZSBjb25mbGljdCcgJworCXNldHVwX3JlcG8gMjBiIG5vbi1leGlzdGVudCAiIiB0cnVlICYmCisJbWtkaXIgLXAgMjBiLy5naXQvd3Qvc3ViICYmCisJKAorCQljZCAyMGIvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3RhdHVzID4vZGV2L251bGwKKwkpIDI+bWVzc2FnZSAmJgorCWdyZXAgImNvcmUuYmFyZSBhbmQgY29yZS53b3JrdHJlZSIgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjBkOiBjb3JlLndvcmt0cmVlIGFuZCBjb3JlLmJhcmUgT0sgd2hlbiB3b3JraW5nIHRyZWUgbm90IG5lZWRlZCcgJworCXNldHVwX3JlcG8gMjBkIG5vbi1leGlzdGVudCAiIiB0cnVlICYmCisJbWtkaXIgLXAgMjBkLy5naXQvd3Qvc3ViICYmCisJKAorCQljZCAyMGQvLmdpdCAmJgorCQlnaXQgY29uZmlnIGZvby5iYXIgdmFsdWUKKwkpCisnCisKKyMgQ2FzZSAjMjE6IGNvcmUud29ya3RyZWUvR0lUX1dPUktfVFJFRSBvdmVycmlkZXMgY29yZS5iYXJlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjE6IHNldHVwLCBjb3JlLndvcmt0cmVlIHdhcm5zIGJlZm9yZSBvdmVycmlkaW5nIGNvcmUuYmFyZScgJworCXNldHVwX3JlcG8gMjEgbm9uLWV4aXN0ZW50ICIiIHVuc2V0ICYmCisJbWtkaXIgLXAgMjEvLmdpdC93dC9zdWIgJiYKKwkoCisJCWNkIDIxLy5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT0iJGhlcmUvMjEiICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFICYmCisJCWdpdCBzdGF0dXMgPi9kZXYvbnVsbAorCSkgMj5tZXNzYWdlICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG1lc3NhZ2UKKworJworcnVuX3d0X3Rlc3RzIDIxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyMmE6IGNvcmUud29ya3RyZWUgPSBHSVRfRElSID0gLmdpdCBkaXInICcKKwkjIGxpa2UgY2FzZSAjNi4KKworCXNldHVwX3JlcG8gMjJhICIkaGVyZS8yMmEvLmdpdCIgIiIgdW5zZXQgJiYKKwlzZXR1cF9yZXBvIDIyYWIgLiAiIiB1bnNldCAmJgorCW1rZGlyIC1wIDIyYS8uZ2l0L3N1YiAyMmEvc3ViICYmCisJbWtkaXIgLXAgMjJhYi8uZ2l0L3N1YiAyMmFiL3N1YiAmJgorCXRyeV9jYXNlIDIyYS8uZ2l0IHVuc2V0IC4gXAorCQkuICIkaGVyZS8yMmEvLmdpdCIgIiRoZXJlLzIyYS8uZ2l0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDIyYS8uZ2l0IHVuc2V0ICIkaGVyZS8yMmEvLmdpdCIgXAorCQkiJGhlcmUvMjJhLy5naXQiICIkaGVyZS8yMmEvLmdpdCIgIiRoZXJlLzIyYS8uZ2l0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDIyYS8uZ2l0L3N1YiB1bnNldCAuLiBcCisJCSIkaGVyZS8yMmEvLmdpdCIgIiRoZXJlLzIyYS8uZ2l0IiAiJGhlcmUvMjJhLy5naXQiIHN1Yi8gJiYKKwl0cnlfY2FzZSAyMmEvLmdpdC9zdWIgdW5zZXQgIiRoZXJlLzIyYS8uZ2l0IiBcCisJCSIkaGVyZS8yMmEvLmdpdCIgIiRoZXJlLzIyYS8uZ2l0IiAiJGhlcmUvMjJhLy5naXQiIHN1Yi8gJiYKKworCXRyeV9jYXNlIDIyYWIvLmdpdCB1bnNldCAuIFwKKwkJLiAiJGhlcmUvMjJhYi8uZ2l0IiAiJGhlcmUvMjJhYi8uZ2l0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDIyYWIvLmdpdCB1bnNldCAiJGhlcmUvMjJhYi8uZ2l0IiBcCisJCSIkaGVyZS8yMmFiLy5naXQiICIkaGVyZS8yMmFiLy5naXQiICIkaGVyZS8yMmFiLy5naXQiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMjJhYi8uZ2l0L3N1YiB1bnNldCAuLiBcCisJCSIkaGVyZS8yMmFiLy5naXQiICIkaGVyZS8yMmFiLy5naXQiICIkaGVyZS8yMmFiLy5naXQiIHN1Yi8gJiYKKwl0cnlfY2FzZSAyMmFiLy5naXQgdW5zZXQgIiRoZXJlLzIyYWIvLmdpdCIgXAorCQkiJGhlcmUvMjJhYi8uZ2l0IiAiJGhlcmUvMjJhYi8uZ2l0IiAiJGhlcmUvMjJhYi8uZ2l0IiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjJiOiBjb3JlLndvcmt0cmVlIGNoaWxkIG9mIC5naXQsIEdJVF9ESVI9LmdpdCcgJworCXNldHVwX3JlcG8gMjJiICIkaGVyZS8yMmIvLmdpdC93dCIgIiIgdW5zZXQgJiYKKwlzZXR1cF9yZXBvIDIyYmIgd3QgIiIgdW5zZXQgJiYKKwlta2RpciAtcCAyMmIvLmdpdC9zdWIgMjJiL3N1YiAyMmIvLmdpdC93dC9zdWIgMjJiL3d0L3N1YiAmJgorCW1rZGlyIC1wIDIyYmIvLmdpdC9zdWIgMjJiYi9zdWIgMjJiYi8uZ2l0L3d0IDIyYmIvd3QgJiYKKworCXRyeV9jYXNlIDIyYi8uZ2l0IHVuc2V0IC4gXAorCQkuICIkaGVyZS8yMmIvLmdpdC93dCIgIiRoZXJlLzIyYi8uZ2l0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDIyYi8uZ2l0IHVuc2V0ICIkaGVyZS8yMmIvLmdpdCIgXAorCQkiJGhlcmUvMjJiLy5naXQiICIkaGVyZS8yMmIvLmdpdC93dCIgIiRoZXJlLzIyYi8uZ2l0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDIyYi8uZ2l0L3N1YiB1bnNldCAuLiBcCisJCS4uICIkaGVyZS8yMmIvLmdpdC93dCIgIiRoZXJlLzIyYi8uZ2l0L3N1YiIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAyMmIvLmdpdC9zdWIgdW5zZXQgIiRoZXJlLzIyYi8uZ2l0IiBcCisJCSIkaGVyZS8yMmIvLmdpdCIgIiRoZXJlLzIyYi8uZ2l0L3d0IiAiJGhlcmUvMjJiLy5naXQvc3ViIiAiKG51bGwpIiAmJgorCisJdHJ5X2Nhc2UgMjJiYi8uZ2l0IHVuc2V0IC4gXAorCQkuICIkaGVyZS8yMmJiLy5naXQvd3QiICIkaGVyZS8yMmJiLy5naXQiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMjJiYi8uZ2l0IHVuc2V0ICIkaGVyZS8yMmJiLy5naXQiIFwKKwkJIiRoZXJlLzIyYmIvLmdpdCIgIiRoZXJlLzIyYmIvLmdpdC93dCIgIiRoZXJlLzIyYmIvLmdpdCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAyMmJiLy5naXQvc3ViIHVuc2V0IC4uIFwKKwkJLi4gIiRoZXJlLzIyYmIvLmdpdC93dCIgIiRoZXJlLzIyYmIvLmdpdC9zdWIiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMjJiYi8uZ2l0L3N1YiB1bnNldCAiJGhlcmUvMjJiYi8uZ2l0IiBcCisJCSIkaGVyZS8yMmJiLy5naXQiICIkaGVyZS8yMmJiLy5naXQvd3QiICIkaGVyZS8yMmJiLy5naXQvc3ViIiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjJjOiBjb3JlLndvcmt0cmVlID0gLmdpdC8uLiwgR0lUX0RJUj0uZ2l0JyAnCisJc2V0dXBfcmVwbyAyMmMgIiRoZXJlLzIyYyIgIiIgdW5zZXQgJiYKKwlzZXR1cF9yZXBvIDIyY2IgLi4gIiIgdW5zZXQgJiYKKwlta2RpciAtcCAyMmMvLmdpdC9zdWIgMjJjL3N1YiAmJgorCW1rZGlyIC1wIDIyY2IvLmdpdC9zdWIgMjJjYi9zdWIgJiYKKworCXRyeV9jYXNlIDIyYy8uZ2l0IHVuc2V0IC4gXAorCQkiJGhlcmUvMjJjLy5naXQiICIkaGVyZS8yMmMiICIkaGVyZS8yMmMiIC5naXQvICYmCisJdHJ5X2Nhc2UgMjJjLy5naXQgdW5zZXQgIiRoZXJlLzIyYy8uZ2l0IiBcCisJCSIkaGVyZS8yMmMvLmdpdCIgIiRoZXJlLzIyYyIgIiRoZXJlLzIyYyIgLmdpdC8gJiYKKwl0cnlfY2FzZSAyMmMvLmdpdC9zdWIgdW5zZXQgLi4gXAorCQkiJGhlcmUvMjJjLy5naXQiICIkaGVyZS8yMmMiICIkaGVyZS8yMmMiIC5naXQvc3ViLyAmJgorCXRyeV9jYXNlIDIyYy8uZ2l0L3N1YiB1bnNldCAiJGhlcmUvMjJjLy5naXQiIFwKKwkJIiRoZXJlLzIyYy8uZ2l0IiAiJGhlcmUvMjJjIiAiJGhlcmUvMjJjIiAuZ2l0L3N1Yi8gJiYKKworCXRyeV9jYXNlIDIyY2IvLmdpdCB1bnNldCAuIFwKKwkJIiRoZXJlLzIyY2IvLmdpdCIgIiRoZXJlLzIyY2IiICIkaGVyZS8yMmNiIiAuZ2l0LyAmJgorCXRyeV9jYXNlIDIyY2IvLmdpdCB1bnNldCAiJGhlcmUvMjJjYi8uZ2l0IiBcCisJCSIkaGVyZS8yMmNiLy5naXQiICIkaGVyZS8yMmNiIiAiJGhlcmUvMjJjYiIgLmdpdC8gJiYKKwl0cnlfY2FzZSAyMmNiLy5naXQvc3ViIHVuc2V0IC4uIFwKKwkJIiRoZXJlLzIyY2IvLmdpdCIgIiRoZXJlLzIyY2IiICIkaGVyZS8yMmNiIiAuZ2l0L3N1Yi8gJiYKKwl0cnlfY2FzZSAyMmNiLy5naXQvc3ViIHVuc2V0ICIkaGVyZS8yMmNiLy5naXQiIFwKKwkJIiRoZXJlLzIyY2IvLmdpdCIgIiRoZXJlLzIyY2IiICIkaGVyZS8yMmNiIiAuZ2l0L3N1Yi8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzIyLjI6IGNvcmUud29ya3RyZWUgYW5kIGNvcmUuYmFyZSBjb25mbGljdCcgJworCXNldHVwX3JlcG8gMjIgIiRoZXJlLzIyIiAiIiB0cnVlICYmCisJKAorCQljZCAyMi8uZ2l0ICYmCisJCUdJVF9ESVI9LiAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3RhdHVzIDI+cmVzdWx0CisJKSAmJgorCSgKKwkJY2QgMjIgJiYKKwkJR0lUX0RJUj0uZ2l0ICYmCisJCWV4cG9ydCBHSVRfRElSICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGF0dXMgMj5yZXN1bHQKKwkpICYmCisJZ3JlcCAiY29yZS5iYXJlIGFuZCBjb3JlLndvcmt0cmVlIiAyMi8uZ2l0L3Jlc3VsdCAmJgorCWdyZXAgImNvcmUuYmFyZSBhbmQgY29yZS53b3JrdHJlZSIgMjIvcmVzdWx0CisnCisKKyMgQ2FzZSAjMjM6IEdJVF9ESVIgKyBHSVRfV09SS19UUkVFKCtjb3JlLndvcmt0cmVlKSBzdXBwcmVzc2VzIGJhcmVuZXNzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzIzOiBzZXR1cCcgJworCXNldHVwX3JlcG8gMjMgbm9uLWV4aXN0ZW50ICIiIHRydWUgJiYKKwlta2RpciAtcCAyMy9zdWIvc3ViIDIzL3d0L3N1YgorJworcnVuX3d0X3Rlc3RzIDIzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyNDogYmFyZSByZXBvIGhhcyBubyB3b3JrdHJlZSAoZ2l0ZmlsZSBjYXNlKScgJworCXRyeV9yZXBvIDI0IHVuc2V0IHVuc2V0IHVuc2V0IGdpdGZpbGUgdHJ1ZSBcCisJCSIkaGVyZS8yNC5naXQiICIobnVsbCkiICIkaGVyZS8yNCIgIihudWxsKSIgXAorCQkiJGhlcmUvMjQuZ2l0IiAiKG51bGwpIiAiJGhlcmUvMjQvc3ViIiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjU6IEdJVF9XT1JLX1RSRUUgYWNjZXB0ZWQgaWYgR0lUX0RJUiB1bnNldCAoYmFyZSBnaXRmaWxlIGNhc2UpJyAnCisJdHJ5X3JlcG8gMjUgIiRoZXJlLzI1IiB1bnNldCB1bnNldCBnaXRmaWxlIHRydWUgXAorCQkiJGhlcmUvMjUuZ2l0IiAiJGhlcmUvMjUiICIkaGVyZS8yNSIgIihudWxsKSIgIFwKKwkJIiRoZXJlLzI1LmdpdCIgIiRoZXJlLzI1IiAiJGhlcmUvMjUiICJzdWIvIiAyPm1lc3NhZ2UgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjY6IGJhcmUgcmVwbyBoYXMgbm8gd29ya3RyZWUgKEdJVF9ESVIgLT4gZ2l0ZmlsZSBjYXNlKScgJworCXRyeV9yZXBvIDI2IHVuc2V0ICIkaGVyZS8yNi8uZ2l0IiB1bnNldCBnaXRmaWxlIHRydWUgXAorCQkiJGhlcmUvMjYuZ2l0IiAiKG51bGwpIiAiJGhlcmUvMjYiICIobnVsbCkiIFwKKwkJIiRoZXJlLzI2LmdpdCIgIihudWxsKSIgIiRoZXJlLzI2L3N1YiIgIihudWxsKSIgJiYKKwl0cnlfcmVwbyAyNmIgdW5zZXQgLmdpdCB1bnNldCBnaXRmaWxlIHRydWUgXAorCQkiJGhlcmUvMjZiLmdpdCIgIihudWxsKSIgIiRoZXJlLzI2YiIgIihudWxsKSIgXAorCQkiJGhlcmUvMjZiLmdpdCIgIihudWxsKSIgIiRoZXJlLzI2Yi9zdWIiICIobnVsbCkiCisnCisKKyMgQ2FzZSAjMjc6IEdJVF9ESVIgKyBHSVRfV09SS19UUkVFIHN1cHByZXNzZXMgYmFyZW5lc3MgKHdpdGggZ2l0ZmlsZSkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjc6IHNldHVwJyAnCisJc2V0dXBfcmVwbyAyNyB1bnNldCBnaXRmaWxlIHRydWUgJiYKKwlta2RpciAtcCAyNy9zdWIvc3ViIDI3L3d0L3N1YgorJworcnVuX3d0X3Rlc3RzIDI3IGdpdGZpbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzI4OiBjb3JlLndvcmt0cmVlIGFuZCBjb3JlLmJhcmUgY29uZmxpY3QgKGdpdGZpbGUgY2FzZSknICcKKwlzZXR1cF9yZXBvIDI4ICIkaGVyZS8yOCIgZ2l0ZmlsZSB0cnVlICYmCisJKAorCQljZCAyOCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3RhdHVzCisJKSAyPm1lc3NhZ2UgJiYKKwlncmVwICJjb3JlLmJhcmUgYW5kIGNvcmUud29ya3RyZWUiIG1lc3NhZ2UKKycKKworIyBDYXNlICMyOTogR0lUX1dPUktfVFJFRSgrY29yZS53b3JrdHJlZSkgb3ZlcnJpZGVzIGNvcmUuYmFyZSAoZ2l0ZmlsZSBjYXNlKS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyOTogc2V0dXAnICcKKwlzZXR1cF9yZXBvIDI5IG5vbi1leGlzdGVudCBnaXRmaWxlIHRydWUgJiYKKwlta2RpciAtcCAyOS9zdWIvc3ViIDI5L3d0L3N1YiAmJgorCSgKKwkJY2QgMjkgJiYKKwkJR0lUX1dPUktfVFJFRT0iJGhlcmUvMjkiICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFICYmCisJCWdpdCBzdGF0dXMKKwkpIDI+bWVzc2FnZSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBtZXNzYWdlCisnCitydW5fd3RfdGVzdHMgMjkgZ2l0ZmlsZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMzA6IGNvcmUud29ya3RyZWUgYW5kIGNvcmUuYmFyZSBjb25mbGljdCAoZ2l0ZmlsZSB2ZXJzaW9uKScgJworCSMgSnVzdCBsaWtlIGNhc2UgIzIyLgorCXNldHVwX3JlcG8gMzAgIiRoZXJlLzMwIiBnaXRmaWxlIHRydWUgJiYKKwkoCisJCWNkIDMwICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfRElSPS5naXQgZ2l0IHN0YXR1cyAyPnJlc3VsdAorCSkgJiYKKwlncmVwICJjb3JlLmJhcmUgYW5kIGNvcmUud29ya3RyZWUiIDMwL3Jlc3VsdAorJworCisjIENhc2UgIzMxOiBHSVRfRElSICsgR0lUX1dPUktfVFJFRSgrY29yZS53b3JrdHJlZSkgc3VwcHJlc3NlcworIyBiYXJlbmVzcyAoZ2l0ZmlsZSB2ZXJzaW9uKS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMzMTogc2V0dXAnICcKKwlzZXR1cF9yZXBvIDMxIG5vbi1leGlzdGVudCBnaXRmaWxlIHRydWUgJiYKKwlta2RpciAtcCAzMS9zdWIvc3ViIDMxL3d0L3N1YgorJworcnVuX3d0X3Rlc3RzIDMxIGdpdGZpbGUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTExLXJldi1wYXJzZS1jYXJldC5zaCBiL3QvdDE1MTEtcmV2LXBhcnNlLWNhcmV0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUwYTQ5YTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTExLXJldi1wYXJzZS1jYXJldC5zaApAQCAtMCwwICsxLDEzMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3RzIGZvciByZWZee3N0dWZmfScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBibG9iID5hLWJsb2IgJiYKKwlnaXQgdGFnIC1hIC1tIGJsb2IgYmxvYi10YWcgJChnaXQgaGFzaC1vYmplY3QgLXcgYS1ibG9iKSAmJgorCW1rZGlyIGEtdHJlZSAmJgorCWVjaG8gbW9yZWJsb2JzID5hLXRyZWUvYW5vdGhlci1ibG9iICYmCisJZ2l0IGFkZCAuICYmCisJVFJFRV9TSEExPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZ2l0IHRhZyAtYSAtbSB0cmVlIHRyZWUtdGFnICIkVFJFRV9TSEExIiAmJgorCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCWdpdCB0YWcgLWEgLW0gY29tbWl0IGNvbW1pdC10YWcgJiYKKwlnaXQgYnJhbmNoIHJlZiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIG1vZGlmaWVkID4+YS1ibG9iICYmCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBjb21taXQgLW0gTW9kaWZpZWQgJiYKKwlnaXQgYnJhbmNoIG1vZHJlZiAmJgorCWVjaG8gY2hhbmdlZCEgPj5hLWJsb2IgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IGNvbW1pdCAtbSAhRXhwICYmCisJZ2l0IGJyYW5jaCBleHByZWYgJiYKKwllY2hvIGNoYW5nZWQgPj5hLWJsb2IgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IGNvbW1pdCAtbSBDaGFuZ2VkICYmCisJZWNobyBjaGFuZ2VkLWFnYWluID4+YS1ibG9iICYmCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBjb21taXQgLW0gQ2hhbmdlZC1hZ2FpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZee25vbi1leGlzdGVudH0nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZl57bm9uLWV4aXN0ZW50fQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZee30nICcKKwlnaXQgcmV2LXBhcnNlIHJlZiA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZl57fSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBjb21taXQtdGFnXnt9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmXntjb21taXR9JyAnCisJZ2l0IHJldi1wYXJzZSByZWYgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSByZWZee2NvbW1pdH0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgY29tbWl0LXRhZ157Y29tbWl0fSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSB0cmVlLXRhZ157Y29tbWl0fSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgYmxvYi10YWdee2NvbW1pdH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmXnt0cmVlfScgJworCWVjaG8gJFRSRUVfU0hBMSA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZl57dHJlZX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgY29tbWl0LXRhZ157dHJlZX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgdHJlZS10YWdee3RyZWV9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIGJsb2ItdGFnXnt0cmVlfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZee3RhZ30nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQURee3RhZ30gJiYKKwlnaXQgcmV2LXBhcnNlIGNvbW1pdC10YWcgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSBjb21taXQtdGFnXnt0YWd9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmXnsvLn0nICcKKwlnaXQgcmV2LXBhcnNlIG1hc3RlciA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIG1hc3Rlcl57Ly59ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmXnsvbm9uLWV4aXN0ZW50fScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWFzdGVyXnsvbm9uLWV4aXN0ZW50fQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZeey9Jbml0aWFsfScgJworCWdpdCByZXYtcGFyc2UgcmVmID5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgbWFzdGVyXnsvSW5pdGlhbH0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZeey8hRXhwfScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWFzdGVyXnsvIUV4cH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmXnsvIX0nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIG1hc3Rlcl57LyF9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZl57LyEhRXhwfScgJworCWdpdCByZXYtcGFyc2UgZXhwcmVmID5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgbWFzdGVyXnsvISFFeHB9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmXnsvIS19JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBtYXN0ZXJeey8hLX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmXnsvIS0ufScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWFzdGVyXnsvIS0ufQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZeey8hLW5vbi1leGlzdGVudH0nICcKKwlnaXQgcmV2LXBhcnNlIG1hc3RlciA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIG1hc3Rlcl57LyEtbm9uLWV4aXN0ZW50fSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZl57LyEtQ2hhbmdlZH0nICcKKwlnaXQgcmV2LXBhcnNlIGV4cHJlZiA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIG1hc3Rlcl57LyEtQ2hhbmdlZH0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZeey8hLSFFeHB9JyAnCisJZ2l0IHJldi1wYXJzZSBtb2RyZWYgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSBleHByZWZeey8hLSFFeHB9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTEyLXJldi1wYXJzZS1kaXNhbWJpZ3VhdGlvbi5zaCBiL3QvdDE1MTItcmV2LXBhcnNlLWRpc2FtYmlndWF0aW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE4ZmE2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTEyLXJldi1wYXJzZS1kaXNhbWJpZ3VhdGlvbi5zaApAQCAtMCwwICsxLDQwMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J29iamVjdCBuYW1lIGRpc2FtYmlndWF0aW9uCisKK0NyZWF0ZSBibG9icywgdHJlZXMsIGNvbW1pdHMgYW5kIGEgdGFnIHRoYXQgYWxsIHNoYXJlIHRoZSBzYW1lCitwcmVmaXgsIGFuZCBtYWtlIHN1cmUgImdpdCByZXYtcGFyc2UiIGNhbiB0YWtlIGFkdmFudGFnZSBvZgordHlwZSBpbmZvcm1hdGlvbiB0byBkaXNhbWJpZ3VhdGUgc2hvcnQgb2JqZWN0IG5hbWVzIHRoYXQgYXJlCitub3QgbmVjZXNzYXJpbHkgdW5pcXVlLgorCitUaGUgZmluYWwgaGlzdG9yeSB1c2VkIGluIHRoZSB0ZXN0IGhhcyBmaXZlIGNvbW1pdHMsIHdpdGggdGhlIGJvdHRvbQorb25lIHRhZ2dlZCBhcyB2MS4wLjAuICBUaGV5IGFsbCBoYXZlIG9uZSByZWd1bGFyIGZpbGUgZWFjaC4KKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgIC4tLS0tLS0tYjN3ZXR0dmktLS0tIGFkMnVlZSAgICAgfAorICB8ICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgIHwKKyAgfCAgYTJvbnN4YnZqLS0tY3p5OGY3M3QtLWlvaWxleTVvICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworJworCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFNIQTEKK3RoZW4KKwlza2lwX2FsbD0nbm90IHVzaW5nIFNIQS0xIGZvciBvYmplY3RzJworCXRlc3RfZG9uZQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxvYiBhbmQgdHJlZScgJworCXRlc3RfdGljayAmJgorCSgKKwkJZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOQorCQlkbworCQkJZWNobyAkaQorCQlkb25lICYmCisJCWVjaG8gJiYKKwkJZWNobyBiMXJ3enljMworCSkgPmEwYmxncXNqYyAmJgorCisJIyBjcmVhdGUgb25lIGJsb2IgMDAwMDAwMDAwMGIzNgorCWdpdCBhZGQgYTBibGdxc2pjICYmCisKKwkjIGNyZWF0ZSBvbmUgdHJlZSAwMDAwMDAwMDAwY2RjCisJZ2l0IHdyaXRlLXRyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2FybiBhbWJpZ3VpdHkgd2hlbiBubyBjYW5kaWRhdGUgbWF0Y2hlcyB0eXBlIGhpbnQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMF57Y29tbWl0fSAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgInNob3J0IFNIQTEgMDAwMDAwMDAwIGlzIGFtYmlndW91cyIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0ZSB0cmVlLWlzaCcgJworCSMgZmVlZCB0cmVlLWlzaCBpbiBhbiB1bmFtYmlndW91cyB3YXkKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMDBjZGM6YTBibGdxc2pjICYmCisKKwkjIGFtYmlndW91cyBhdCB0aGUgb2JqZWN0IG5hbWUgbGV2ZWwsIGJ1dCB0aGVyZSBpcyBvbmx5IG9uZQorCSMgc3VjaCB0cmVlLWlzaCAodGhlIG90aGVyIGlzIGEgYmxvYikKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMDphMGJsZ3FzamMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRlIGJsb2InICcKKwlzZWQgLWUgInMvfCQvLyIgPnBhdGNoIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9mcm90eiBiL2Zyb3R6CisJaW5kZXggMDAwMDAwMDAwLi5mZmZmZmYgMTAwNjQ0CisJLS0tIGEvZnJvdHoKKwkrKysgYi9mcm90egorCUBAIC0xMCwzICsxMCw0IEBACisJIDkKKwkgfAorCSBiMXJ3enljMworCStpcndyeQorCUVPRgorCSgKKwkJR0lUX0lOREVYX0ZJTEU9ZnJvdHogJiYKKwkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJCWdpdCBhcHBseSAtLWJ1aWxkLWZha2UtYW5jZXN0b3IgZnJvdHogcGF0Y2ggJiYKKwkJZ2l0IGNhdC1maWxlIGJsb2IgOmZyb3R6ID5hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgYTBibGdxc2pjIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhbWJpZ3VhdGUgdHJlZScgJworCWNvbW1pdD0kKGVjaG8gImQ3eG0iIHwgZ2l0IGNvbW1pdC10cmVlIDAwMDAwMDAwMCkgJiYKKwkjIHRoaXMgY29tbWl0IGlzIGZmZmZmMmUgYW5kIG5vdCBhbWJpZ3VvdXMgd2l0aCB0aGUgMDAwMDAqIG9iamVjdHMKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSAkY29tbWl0Xnt0cmVlfSkgPSAkKGdpdCByZXYtcGFyc2UgMDAwMDAwMDAwMGNkYykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlyc3QgY29tbWl0JyAnCisJIyBjcmVhdGUgb25lIGNvbW1pdCAwMDAwMDAwMDAwZTRmCisJZ2l0IGNvbW1pdCAtbSBhMm9uc3hidmoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRlIGNvbW1pdC1pc2gnICcKKwkjIGZlZWQgY29tbWl0LWlzaCBpbiBhbiB1bmFtYmlndW91cyB3YXkKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMDBlNGZee2NvbW1pdH0gJiYKKworCSMgYW1iaWd1b3VzIGF0IHRoZSBvYmplY3QgbmFtZSBsZXZlbCwgYnV0IHRoZXJlIGlzIG9ubHkgb25lCisJIyBzdWNoIGNvbW1pdCAodGhlIG90aGVycyBhcmUgdHJlZSBhbmQgYmxvYikKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMF57Y29tbWl0fSAmJgorCisJIyBsaWtld2lzZQorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgMDAwMDAwMDAwXjAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRlIGNvbW1pdCcgJworCWNvbW1pdD0kKGVjaG8gImhvYXhqIiB8IGdpdCBjb21taXQtdHJlZSAwMDAwMDAwMDAwY2RjIC1wIDAwMDAwMDAwMCkgJiYKKwkjIHRoaXMgY29tbWl0IGlzIGZmZmZmZmQ4IGFuZCBub3QgYW1iaWd1b3VzIHdpdGggdGhlIDAwMDAwKiBvYmplY3RzCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgJGNvbW1pdF4pID0gJChnaXQgcmV2LXBhcnNlIDAwMDAwMDAwMDBlNGYpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBuYW1lMS4ubmFtZTIgdGFrZXMgb25seSBjb21taXQtaXNoZXMgb24gYm90aCBlbmRzJyAnCisJIyBUaGVzZSBhcmUgdW5kZXJzcGVjaWZpZWQgZnJvbSB0aGUgcHJlZml4LWxlbmd0aCBwb2ludCBvZiB2aWV3CisJIyB0byBkaXNhbWJpZ3VhdGUgdGhlIGNvbW1pdCB3aXRoIG90aGVyIG9iamVjdHMsIGJ1dCB0aGVyZSBpcyBvbmx5CisJIyBvbmUgY29tbWl0IHRoYXQgaGFzIDAwMDAwKiBwcmVmaXggYXQgdGhpcyBwb2ludC4KKwlnaXQgbG9nIDAwMDAwMDAwMC4uMDAwMDAwMDAwICYmCisJZ2l0IGxvZyAuLjAwMDAwMDAwMCAmJgorCWdpdCBsb2cgMDAwMDAwMDAwLi4gJiYKKwlnaXQgbG9nIDAwMDAwMDAwMC4uLjAwMDAwMDAwMCAmJgorCWdpdCBsb2cgLi4uMDAwMDAwMDAwICYmCisJZ2l0IGxvZyAwMDAwMDAwMDAuLi4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIG5hbWUxLi5uYW1lMiB0YWtlcyBvbmx5IGNvbW1pdC1pc2hlcyBvbiBib3RoIGVuZHMnICcKKwkjIExpa2V3aXNlLgorCWdpdCByZXYtcGFyc2UgMDAwMDAwMDAwLi4wMDAwMDAwMDAgJiYKKwlnaXQgcmV2LXBhcnNlIC4uMDAwMDAwMDAwICYmCisJZ2l0IHJldi1wYXJzZSAwMDAwMDAwMDAuLgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIHRha2VzIG9ubHkgY29tbWl0LWlzaCcgJworCSMgTGlrZXdpc2UuCisJZ2l0IGxvZyAwMDAwMDAwMDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlc2V0IHRha2VzIG9ubHkgY29tbWl0LWlzaCcgJworCSMgTGlrZXdpc2UuCisJZ2l0IHJlc2V0IDAwMDAwMDAwMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXJzdCB0YWcnICcKKwkjIGNyZWF0ZSBvbmUgdGFnIDAwMDAwMDAwMDBmOGYKKwlnaXQgdGFnIC1hIC1tIGo3Y3A4M3VtIHYxLjAuMAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd0d28gc2VtaS1hbWJpZ3VvdXMgY29tbWl0LWlzaCcgJworCSMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIHRhZyAwMDAwMDAwMDAwZjhmIHRoYXQgcG9pbnRzCisJIyBhdCBhIGNvbW1pdCAwMDAwMDAwMDAwZTRmLCBhbmQgYSB0cmVlIGFuZCBhIGJsb2IgdGhhdAorCSMgc2hhcmUgMDAwMDAwMDAwMCBwcmVmaXggd2l0aCB0aGVzZSB0YWcgYW5kIGNvbW1pdC4KKwkjCisJIyBPbmNlIHRoZSBwYXJzZXIgYmVjb21lcyB1bHRyYS1zbWFydCwgaXQgY291bGQgbm90aWNlIHRoYXQKKwkjIDAwMDAwMDAwMDAgYmVmb3JlIF57Y29tbWl0fSBuYW1lIG1hbnkgZGlmZmVyZW50IG9iamVjdHMsIGJ1dAorCSMgdGhhdCBvbmx5IHR3byAoSEVBRCBhbmQgdjEuMC4wIHRhZykgY2FuIGJlIHBlZWxlZCB0byBjb21taXQsCisJIyBhbmQgdGhhdCBwZWVsaW5nIHRoZW0gZG93biB0byBjb21taXQgeWllbGQgdGhlIHNhbWUgY29tbWl0CisJIyB3aXRob3V0IGFtYmlndWl0eS4KKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMDBee2NvbW1pdH0gJiYKKworCSMgbGlrZXdpc2UKKwlnaXQgbG9nIDAwMDAwMDAwMDAuLjAwMDAwMDAwMDAgJiYKKwlnaXQgbG9nIC4uMDAwMDAwMDAwMCAmJgorCWdpdCBsb2cgMDAwMDAwMDAwMC4uICYmCisJZ2l0IGxvZyAwMDAwMDAwMDAwLi4uMDAwMDAwMDAwMCAmJgorCWdpdCBsb2cgLi4uMDAwMDAwMDAwMCAmJgorCWdpdCBsb2cgMDAwMDAwMDAwMC4uLgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd0aHJlZSBzZW1pLWFtYmlndW91cyB0cmVlLWlzaCcgJworCSMgTGlrZXdpc2UgZm9yIHRyZWUtaXNoLiAgSEVBRCwgdjEuMC4wIGFuZCBIRUFEXnt0cmVlfSBzaGFyZQorCSMgdGhlIHByZWZpeCBidXQgcGVlbGluZyB0aGVtIHRvIHRyZWUgeWllbGRzIHRoZSBzYW1lIHRoaW5nCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAwMDAwMDAwMDAwXnt0cmVlfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJzZSBkZXNjcmliZSBuYW1lJyAnCisJIyBmZWVkIGFuIHVuYW1iaWd1b3VzIGRlc2NyaWJlIG5hbWUKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHYxLjAuMC0wLWcwMDAwMDAwMDAwZTRmICYmCisKKwkjIGFtYmlndW91cyBhdCB0aGUgb2JqZWN0IG5hbWUgbGV2ZWwsIGJ1dCB0aGVyZSBpcyBvbmx5IG9uZQorCSMgc3VjaCBjb21taXQgKG90aGVycyBhcmUgYmxvYiwgdHJlZSBhbmQgdGFnKQorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdjEuMC4wLTAtZzAwMDAwMDAwMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3JlIGhpc3RvcnknICcKKwkjIGNvbW1pdCAwMDAwMDAwMDAwMDQzCisJZ2l0IG12IGEwYmxncXNqYyBkMTJjcjNoOHQgJiYKKwllY2hvIGg2MnhzamV1ID4+ZDEyY3IzaDh0ICYmCisJZ2l0IGFkZCBkMTJjcjNoOHQgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gY3p5OGY3M3QgJiYKKworCSMgY29tbWl0IDAwMDAwMDAwMDA4ZWMKKwlnaXQgbXYgZDEyY3IzaDh0IGowMDBqbXB6biAmJgorCWVjaG8gajA4YmVrZnZ0ID4+ajAwMGptcHpuICYmCisJZ2l0IGFkZCBqMDAwam1wem4gJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW9pbGV5NW8gJiYKKworCSMgY29tbWl0IDAwMDAwMDAwMDViMAorCWdpdCBjaGVja291dCB2MS4wLjBeMCAmJgorCWdpdCBtdiBhMGJsZ3FzamMgZjU1MThud3UgJiYKKworCWZvciBpIGluIGg2MnhzamV1IGowOGJla2Z2dCBrZzd4ZmxobQorCWRvCisJCWVjaG8gJGkKKwlkb25lID4+ZjU1MThud3UgJiYKKwlnaXQgYWRkIGY1NTE4bnd1ICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGIzd2V0dHZpICYmCisJc2lkZT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCSMgY29tbWl0IDAwMDAwMDAwMDA2NgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCSMgSWYgeW91IHVzZSByZWN1cnNpdmUsIG1lcmdlIHdpbGwgZmFpbCBhbmQgeW91IHdpbGwgbmVlZCB0bworCSMgY2xlYW4gdXAgYTBibGdxc2pjIGFzIHdlbGwuICBJZiB5b3UgdXNlIHJlc29sdmUsIG1lcmdlIHdpbGwKKwkjIHN1Y2NlZWQuCisJdGVzdF9taWdodF9mYWlsIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtcyByZWN1cnNpdmUgJHNpZGUgJiYKKwlnaXQgcm0gLWYgZjU1MThud3UgajAwMGptcHpuICYmCisKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJtIC1mIGEwYmxncXNqYyAmJgorCSgKKwkJZ2l0IGNhdC1maWxlIGJsb2IgJHNpZGU6ZjU1MThud3UgJiYKKwkJZWNobyBqM2wwaTlzNgorCSkgPmFiMmdzODc5ICYmCisJZ2l0IGFkZCBhYjJnczg3OSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBhZDJ1ZWUKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdwYXJzZSBkZXNjcmliZSBuYW1lIHRha2luZyBhZHZhbnRhZ2Ugb2YgZ2VuZXJhdGlvbicgJworCSMgYW1iaWd1b3VzIGF0IHRoZSBvYmplY3QgbmFtZSBsZXZlbCwgYnV0IHRoZXJlIGlzIG9ubHkgb25lCisJIyBzdWNoIGNvbW1pdCBhdCBnZW5lcmF0aW9uIDAKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHYxLjAuMC0wLWcwMDAwMDAwMDAgJiYKKworCSMgbGlrZXdpc2UgZm9yIGdlbmVyYXRpb24gMiBhbmQgNAorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdjEuMC4wLTItZzAwMDAwMDAwMCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdjEuMC4wLTQtZzAwMDAwMDAwMAorJworCisjIE5vdGU6IGJlY2F1c2UgcmV2LXBhcnNlIGRvZXMgbm90IGV2ZW4gdHJ5IHRvIGRpc2FtYmlndWF0ZSBiYXNlZCBvbgorIyB0aGUgZ2VuZXJhdGlvbiBudW1iZXIsIHRoaXMgdGVzdCBjdXJyZW50bHkgc3VjY2VlZHMgZm9yIGEgd3JvbmcKKyMgcmVhc29uLiAgV2hlbiBpdCBsZWFybnMgdG8gdXNlIHRoZSBnZW5lcmF0aW9uIG51bWJlciwgdGhlIHByZXZpb3VzCisjIHRlc3Qgc2hvdWxkIHN1Y2NlZWQsIGFuZCBhbHNvIHRoaXMgdGVzdCBzaG91bGQgZmFpbCBiZWNhdXNlIHRoZQorIyBkZXNjcmliZSBuYW1lIHVzZWQgaW4gdGhlIHRlc3Qgd2l0aCBnZW5lcmF0aW9uIG51bWJlciBjYW4gbmFtZSB0d28KKyMgY29tbWl0cy4gIE1ha2Ugc3VyZSB0aGF0IHN1Y2ggYSBmdXR1cmUgZW5oYW5jZW1lbnQgZG9lcyBub3QgcmFuZG9tbHkKKyMgcGljayBvbmUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJzZSBkZXNjcmliZSBuYW1lIG5vdCBpZ25vcmluZyBhbWJpZ3VpdHknICcKKwkjIGFtYmlndW91cyBhdCB0aGUgb2JqZWN0IG5hbWUgbGV2ZWwsIGFuZCB0aGVyZSBhcmUgdHdvIHN1Y2gKKwkjIGNvbW1pdHMgYXQgZ2VuZXJhdGlvbiAxCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB2MS4wLjAtMS1nMDAwMDAwMDAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtYmlndW91cyBjb21taXQtaXNoJyAnCisJIyBOb3cgdGhlcmUgYXJlIG1hbnkgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggdGhlCisJIyBjb21tb24gcHJlZml4LCBub25lIG9mIHRoZXNlIHNob3VsZCBwaWNrIG9uZSBhdAorCSMgcmFuZG9tLiAgVGhleSBhbGwgc2hvdWxkIHJlc3VsdCBpbiBhbWJpZ3VpdHkgZXJyb3JzLgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgMDAwMDAwMDBee2NvbW1pdH0gJiYKKworCSMgbGlrZXdpc2UKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIDAwMDAwMDAwMC4uMDAwMDAwMDAwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAuLjAwMDAwMDAwMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgMDAwMDAwMDAwLi4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIDAwMDAwMDAwMC4uLjAwMDAwMDAwMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLi4uMDAwMDAwMDAwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAwMDAwMDAwMDAuLi4KKycKKworIyBUaGVyZSBhcmUgdGhyZWUgb2JqZWN0cyB3aXRoIHRoaXMgcHJlZml4OiBhIGJsb2IsIGEgdHJlZSwgYW5kIGEgdGFnLiBXZSBrbm93CisjIHRoZSBibG9iIHdpbGwgbm90IHBhc3MgYXMgYSB0cmVlaXNoLCBidXQgdGhlIHRyZWUgYW5kIHRhZyBzaG91bGQgKGFuZCB0aHVzCisjIGNhdXNlIGFuIGVycm9yKS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtYmlndW91cyB0YWdzIHBlZWwgdG8gdHJlZWlzaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgMDAwMDAwMDAwMGZee3RyZWV9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWRpc2FtYmlndWF0ZScgJworCSMgVGhlIHRlc3QgY3JlYXRlcyAxNiBvYmplY3RzIHRoYXQgc2hhcmUgdGhlIHByZWZpeCBhbmQgdHdvCisJIyBjb21taXRzIGNyZWF0ZWQgYnkgY29tbWl0LXRyZWUgaW4gZWFybGllciB0ZXN0cyBzaGFyZSBhCisJIyBkaWZmZXJlbnQgcHJlZml4LgorCWdpdCByZXYtcGFyc2UgLS1kaXNhbWJpZ3VhdGU9MDAwMDAwMDAwID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxNiBhY3R1YWwgJiYKKwl0ZXN0ICIkKHNlZCAtZSAicy9eXCguLi4uLi4uLi5cKS4qL1wxLyIgYWN0dWFsIHwgc29ydCAtdSkiID0gMDAwMDAwMDAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWRpc2FtYmlndWF0ZSBkcm9wcyBkdXBsaWNhdGVzJyAnCisJZ2l0IHJldi1wYXJzZSAtLWRpc2FtYmlndWF0ZT0wMDAwMDAwMDAgPmV4cGVjdCAmJgorCWdpdCBwYWNrLW9iamVjdHMgLmdpdC9vYmplY3RzL3BhY2svcGFjayA8ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAtLWRpc2FtYmlndWF0ZT0wMDAwMDAwMDAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1iaWd1b3VzIDQwLWhleCByZWYnICcKKwlUUkVFPSQoZ2l0IG1rdHJlZSA8L2Rldi9udWxsKSAmJgorCVJFRj0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlWQUw9JChnaXQgY29tbWl0LXRyZWUgJFRSRUUgPC9kZXYvbnVsbCkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzLyRSRUYgJFZBTCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlICRSRUYgMj5lcnIpID0gJFJFRiAmJgorCWdyZXAgInJlZm5hbWUuKiR7UkVGfS4qYW1iaWd1b3VzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1iaWd1b3VzIHNob3J0IHNoYTEgcmVmJyAnCisJVFJFRT0kKGdpdCBta3RyZWUgPC9kZXYvbnVsbCkgJiYKKwlSRUY9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlWQUw9JChnaXQgY29tbWl0LXRyZWUgJFRSRUUgPC9kZXYvbnVsbCkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzLyRSRUYgJFZBTCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlICRSRUYgMj5lcnIpID0gJFZBTCAmJgorCWdyZXAgInJlZm5hbWUuKiR7UkVGfS4qYW1iaWd1b3VzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2FtYmlndWl0eSBlcnJvcnMgYXJlIG5vdCByZXBlYXRlZCAocmF3KScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgMDAwMDAgMj5zdGRlcnIgJiYKKwlncmVwICJpcyBhbWJpZ3VvdXMiIHN0ZGVyciA+ZXJyb3JzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBlcnJvcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2FtYmlndWl0eSBlcnJvcnMgYXJlIG5vdCByZXBlYXRlZCAodHJlZWlzaCknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDAwMDAwOmZvbyAyPnN0ZGVyciAmJgorCWdyZXAgImlzIGFtYmlndW91cyIgc3RkZXJyID5lcnJvcnMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnYW1iaWd1aXR5IGVycm9ycyBhcmUgbm90IHJlcGVhdGVkIChwZWVsKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgMDAwMDBee2NvbW1pdH0gMj5zdGRlcnIgJiYKKwlncmVwICJpcyBhbWJpZ3VvdXMiIHN0ZGVyciA+ZXJyb3JzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBlcnJvcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2FtYmlndWl0eSBoaW50cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgMDAwMDAwMDAwIDI+c3RkZXJyICYmCisJZ3JlcCBeaGludDogc3RkZXJyID5oaW50cyAmJgorCSMgMTYgY2FuZGlkYXRlcywgcGx1cyBvbmUgaW50cm8gbGluZQorCXRlc3RfbGluZV9jb3VudCA9IDE3IGhpbnRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdhbWJpZ3VpdHkgaGludHMgcmVzcGVjdCB0eXBlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAwMDAwMDAwMDBee2NvbW1pdH0gMj5zdGRlcnIgJiYKKwlncmVwIF5oaW50OiBzdGRlcnIgPmhpbnRzICYmCisJIyA1IGNvbW1pdHMsIDEgdGFnICh3aGljaCBpcyBhIGNvbW1pdHRpc2gpLCBwbHVzIGludHJvIGxpbmUKKwl0ZXN0X2xpbmVfY291bnQgPSA3IGhpbnRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdmYWlsZWQgdHlwZS1zZWxlY3RvciBzdGlsbCBzaG93cyBoaW50JyAnCisJIyB0aGVzZSB0d28gYmxvYnMgc2hhcmUgdGhlIHNhbWUgcHJlZml4ICJlZTNkIiwgYnV0IG5laXRoZXIKKwkjIHdpbGwgcGFzcyBmb3IgYSBjb21taXQKKwllY2hvIDg1MSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIC13ICYmCisJZWNobyA4NzIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiAtdyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgZWUzZF57Y29tbWl0fSAyPnN0ZGVyciAmJgorCWdyZXAgXmhpbnQ6IHN0ZGVyciA+aGludHMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGhpbnRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcmUuZGlzYW1iaWd1YXRlIGNvbmZpZyBjYW4gcHJlZmVyIHR5cGVzJyAnCisJIyBhbWJpZ3VvdXMgYmV0d2VlbiB0cmVlIGFuZCB0YWcKKwlzaGExPTAwMDAwMDAwMDBmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAkc2hhMSAmJgorCWdpdCByZXYtcGFyc2UgJHNoYTFee2NvbW1pdH0gJiYKKwlnaXQgLWMgY29yZS5kaXNhbWJpZ3VhdGU9Y29tbWl0dGlzaCByZXYtcGFyc2UgJHNoYTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29yZS5kaXNhbWJpZ3VhdGUgZG9lcyBub3Qgb3ZlcnJpZGUgY29udGV4dCcgJworCSMgdHJlZWlzaCBhbWJpZ3VvdXMgYmV0d2VlbiB0YWcgYW5kIHRyZWUKKwl0ZXN0X211c3RfZmFpbCBcCisJCWdpdCAtYyBjb3JlLmRpc2FtYmlndWF0ZT1jb21taXR0aXNoIHJldi1wYXJzZSAkc2hhMV57dHJlZX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2FtYmlndW91cyBjb21taXRzIGFyZSBwcmludGVkIGJ5IHR5cGUgZmlyc3QsIHRoZW4gaGFzaCBvcmRlcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgMDAwMCAyPnN0ZGVyciAmJgorCWdyZXAgXmhpbnQ6IHN0ZGVyciA+aGludHMgJiYKKwlncmVwIDAwMDAgaGludHMgPm9iamVjdHMgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwl0YWcKKwljb21taXQKKwl0cmVlCisJYmxvYgorCUVPRgorCWF3ayAie3ByaW50IFwkM30iIDxvYmplY3RzID5vYmplY3RzLnR5cGVzICYmCisJdW5pcSA8b2JqZWN0cy50eXBlcyA+b2JqZWN0cy50eXBlcy51bmlxICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JqZWN0cy50eXBlcy51bmlxICYmCisJZm9yIHR5cGUgaW4gdGFnIGNvbW1pdCB0cmVlIGJsb2IKKwlkbworCQlncmVwICR0eXBlIG9iamVjdHMgPiR0eXBlLm9iamVjdHMgJiYKKwkJc29ydCAkdHlwZS5vYmplY3RzID4kdHlwZS5vYmplY3RzLnNvcnRlZCAmJgorCQl0ZXN0X2NtcCAkdHlwZS5vYmplY3RzLnNvcnRlZCAkdHlwZS5vYmplY3RzCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZSAtLWJhdGNoIGFuZCAtLWJhdGNoLWNoZWNrIHNob3cgYW1iaWd1b3VzJyAnCisJZWNobyAiMDAwMCBhbWJpZ3VvdXMiID5leHBlY3QgJiYKKwllY2hvIDAwMDAgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayA+YWN0dWFsIDI+ZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgaGludDogZXJyICYmCisJZWNobyAwMDAwIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2ggPmFjdHVhbCAyPmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwIGhpbnQ6IGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MTMtcmV2LXBhcnNlLXByZWZpeC5zaCBiL3QvdDE1MTMtcmV2LXBhcnNlLXByZWZpeC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44N2VjM2FlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTUxMy1yZXYtcGFyc2UtcHJlZml4LnNoCkBAIC0wLDAgKzEsOTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyBmb3IgcmV2LXBhcnNlIC0tcHJlZml4JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciAtcCBzdWIxL3N1YjIgJiYKKwllY2hvIHRvcCA+dG9wICYmCisJZWNobyBmaWxlMSA+c3ViMS9maWxlMSAmJgorCWVjaG8gZmlsZTIgPnN1YjEvc3ViMi9maWxlMiAmJgorCWdpdCBhZGQgdG9wIHN1YjEvZmlsZTEgc3ViMS9zdWIyL2ZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSBjb21taXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgcHJlZml4IC0tIGZpbGUnICcKKwlnaXQgcmV2LXBhcnNlIC0tcHJlZml4ICIiIC0tIHRvcCBzdWIxL2ZpbGUxID5hY3R1YWwgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwktLQorCXRvcAorCXN1YjEvZmlsZTEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWQgcHJlZml4IC0tIGZpbGUnICcKKwlnaXQgcmV2LXBhcnNlIC0tcHJlZml4IHN1YjEvIC0tIGZpbGUxIHN1YjIvZmlsZTIgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCS0tCisJc3ViMS9maWxlMQorCXN1YjEvc3ViMi9maWxlMgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZCBwcmVmaXggLS0gLi4vZmlsZScgJworCWdpdCByZXYtcGFyc2UgLS1wcmVmaXggc3ViMS8gLS0gLi4vdG9wIHN1YjIvZmlsZTIgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCS0tCisJc3ViMS8uLi90b3AKKwlzdWIxL3N1YjIvZmlsZTIKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgcHJlZml4IEhFQUQ6Li9wYXRoJyAnCisJZ2l0IHJldi1wYXJzZSAtLXByZWZpeCAiIiBIRUFEOi4vdG9wID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQ6dG9wID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZCBwcmVmaXggSEVBRDouL3BhdGgnICcKKwlnaXQgcmV2LXBhcnNlIC0tcHJlZml4IHN1YjEvIEhFQUQ6Li9maWxlMSA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEOnN1YjEvZmlsZTEgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkIHByZWZpeCBIRUFEOi4uL3BhdGgnICcKKwlnaXQgcmV2LXBhcnNlIC0tcHJlZml4IHN1YjEvIEhFQUQ6Li4vdG9wID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQ6dG9wID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVmaXggaWdub3JlZCB3aXRoIEhFQUQ6dG9wJyAnCisJZ2l0IHJldi1wYXJzZSAtLXByZWZpeCBzdWIxLyBIRUFEOnRvcCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEOnRvcCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRlIHBhdGggd2l0aCB2YWxpZCBwcmVmaXgnICcKKwlnaXQgcmV2LXBhcnNlIC0tcHJlZml4IHN1YjEvIGZpbGUxID5hY3R1YWwgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlzdWIxL2ZpbGUxCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgYW5kIHJlZnMgd2l0aCBwcmVmaXgnICcKKwlnaXQgcmV2LXBhcnNlIC0tcHJlZml4IHN1YjEvIG1hc3RlciBmaWxlMSA+YWN0dWFsICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwkkKGdpdCByZXYtcGFyc2UgbWFzdGVyKQorCXN1YjEvZmlsZTEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvLWxldmVscyBkZWVwJyAnCisJZ2l0IHJldi1wYXJzZSAtLXByZWZpeCBzdWIxL3N1YjIvIC0tIGZpbGUyID5hY3R1YWwgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwktLQorCXN1YjEvc3ViMi9maWxlMgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MTQtcmV2LXBhcnNlLXB1c2guc2ggYi90L3QxNTE0LXJldi1wYXJzZS1wdXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc4OGNjOTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTE0LXJldi1wYXJzZS1wdXNoLnNoCkBAIC0wLDAgKzEsNzMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IDxicmFuY2g+QHtwdXNofSBzeW50YXgnCisuIC4vdGVzdC1saWIuc2gKKworcmVzb2x2ZSAoKSB7CisJZWNobyAiJDIiID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lICIkMSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgaW5pdCAtLWJhcmUgcGFyZW50LmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBvdGhlci5naXQgJiYKKwlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gcGFyZW50LmdpdCAmJgorCWdpdCByZW1vdGUgYWRkIG90aGVyIG90aGVyLmdpdCAmJgorCXRlc3RfY29tbWl0IGJhc2UgJiYKKwlnaXQgcHVzaCBvcmlnaW4gSEVBRCAmJgorCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89b3JpZ2luL21hc3RlciBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgdG9waWMgb3JpZ2luL21hc3RlciAmJgorCWdpdCBwdXNoIG9yaWdpbiB0b3BpYyAmJgorCWdpdCBwdXNoIG90aGVyIHRvcGljCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7cHVzaH0gd2l0aCBkZWZhdWx0PW5vdGhpbmcnICcKKwl0ZXN0X2NvbmZpZyBwdXNoLmRlZmF1bHQgbm90aGluZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWFzdGVyQHtwdXNofSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWFzdGVyQHtQVVNIfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWFzdGVyQHtQdVNIfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3B1c2h9IHdpdGggZGVmYXVsdD1zaW1wbGUnICcKKwl0ZXN0X2NvbmZpZyBwdXNoLmRlZmF1bHQgc2ltcGxlICYmCisJcmVzb2x2ZSBtYXN0ZXJAe3B1c2h9IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJcmVzb2x2ZSBtYXN0ZXJAe1BVU0h9IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJcmVzb2x2ZSBtYXN0ZXJAe3BVU2h9IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyaWFuZ3VsYXIgQHtwdXNofSBmYWlscyB3aXRoIGRlZmF1bHQ9c2ltcGxlJyAnCisJdGVzdF9jb25maWcgcHVzaC5kZWZhdWx0IHNpbXBsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgdG9waWNAe3B1c2h9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7cHVzaH0gd2l0aCBkZWZhdWx0PWN1cnJlbnQnICcKKwl0ZXN0X2NvbmZpZyBwdXNoLmRlZmF1bHQgY3VycmVudCAmJgorCXJlc29sdmUgdG9waWNAe3B1c2h9IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdG9waWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHtwdXNofSB3aXRoIGRlZmF1bHQ9bWF0Y2hpbmcnICcKKwl0ZXN0X2NvbmZpZyBwdXNoLmRlZmF1bHQgbWF0Y2hpbmcgJiYKKwlyZXNvbHZlIHRvcGljQHtwdXNofSByZWZzL3JlbW90ZXMvb3JpZ2luL3RvcGljCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7cHVzaH0gd2l0aCBwdXNocmVtb3RlIGRlZmluZWQnICcKKwl0ZXN0X2NvbmZpZyBwdXNoLmRlZmF1bHQgY3VycmVudCAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC50b3BpYy5wdXNocmVtb3RlIG90aGVyICYmCisJcmVzb2x2ZSB0b3BpY0B7cHVzaH0gcmVmcy9yZW1vdGVzL290aGVyL3RvcGljCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7cHVzaH0gd2l0aCBwdXNoIHJlZnNwZWNzJyAnCisJdGVzdF9jb25maWcgcHVzaC5kZWZhdWx0IG5vdGhpbmcgJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUub3JpZ2luLnB1c2ggcmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvbWFnaWMvKiAmJgorCWdpdCBwdXNoICYmCisJcmVzb2x2ZSB0b3BpY0B7cHVzaH0gcmVmcy9yZW1vdGVzL29yaWdpbi9tYWdpYy90b3BpYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNvbHZpbmcgQHtwdXNofSBmYWlscyB3aXRoIGEgZGV0YWNoZWQgSEVBRCcgJworCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgQHtwdXNofQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MTUtcmV2LXBhcnNlLW91dHNpZGUtcmVwby5zaCBiL3QvdDE1MTUtcmV2LXBhcnNlLW91dHNpZGUtcmVwby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZWMyOTcxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTUxNS1yZXYtcGFyc2Utb3V0c2lkZS1yZXBvLnNoCkBAIC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayB0aGF0IGNlcnRhaW4gcmV2LXBhcnNlIG9wdGlvbnMgd29yayBvdXRzaWRlIHJlcG8nCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIG5vbi1yZXBvIGRpcmVjdG9yeScgJworCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSQocHdkKSAmJgorCWV4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyAmJgorCW1rZGlyIG5vbi1yZXBvICYmCisJY2Qgbm9uLXJlcG8gJiYKKwkjIGNvbmZpcm0gdGhhdCBnaXQgZG9lcyBub3QgZmluZCBhIHJlcG8KKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcgorJworCisjIFJhdGhlciB0aGFuIGRpcmVjdGx5IHRlc3QgdGhlIG91dHB1dCBvZiBzcS1xdW90ZSBkaXJlY3RseSwKKyMgbWFrZSBzdXJlIHRoZSBzaGVsbCBjYW4gcmVhZCBiYWNrIGEgdHJpY2t5IGNhc2UsIHNpbmNlCisjIHRoYXQncyB3aGF0IHdlIHJlYWxseSBjYXJlIGFib3V0IGFueXdheS4KK3RyaWNreT0icmVhbGx5IHRyaWNreSB3aXRoIFxcIGFuZCBcIiBhbmQgJyIKK2R1bXBfYXJncyAoKSB7CisJZm9yIGkgaW4gIiRAIjsgZG8KKwkJZWNobyAiYXJnOiAkaSIKKwlkb25lCit9Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1zcS1xdW90ZScgJworCWR1bXBfYXJncyAiJHRyaWNreSIgZWFzeSA+ZXhwZWN0ICYmCisJZXZhbCAiZHVtcF9hcmdzICQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkdHJpY2t5IiBlYXN5KSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tbG9jYWwtZW52LXZhcnMnICcKKwlnaXQgcmV2LXBhcnNlIC0tbG9jYWwtZW52LXZhcnMgPmFjdHVhbCAmJgorCSMgd2UgZG8gbm90IHdhbnQgdG8gZGVwZW5kIG9uIHRoZSBjb21wbGV0ZSBsaXN0IGhlcmUsCisJIyBzbyBqdXN0IGxvb2sgZm9yIHNvbWV0aGluZyBwbGF1c2libGUKKwlncmVwIF5HSVRfRElSIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXInICcKKwlnaXQgaW5pdCAtLXNlcGFyYXRlLWdpdC1kaXIgcmVwbyBkaXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIC4gJiYKKwllY2hvICIkKHB3ZCkvcmVwbyIgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgZGlyLy5naXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNjAwLWluZGV4LnNoIGIvdC90MTYwMC1pbmRleC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iN2MzMWFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTYwMC1pbmRleC5zaApAQCAtMCwwICsxLDEwMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2luZGV4IGZpbGUgc3BlY2lmaWMgdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gMSA+YQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdib2d1cyBHSVRfSU5ERVhfVkVSU0lPTiBpc3N1ZXMgd2FybmluZycgJworCSgKKwkJcm0gLWYgLmdpdC9pbmRleCAmJgorCQlHSVRfSU5ERVhfVkVSU0lPTj0yYm9ndXMgJiYKKwkJZXhwb3J0IEdJVF9JTkRFWF9WRVJTSU9OICYmCisJCWdpdCBhZGQgYSAyPiYxIHwgc2VkICJzL1swLTldLy8iID5hY3R1YWwuZXJyICYmCisJCXNlZCAtZSAicy8gWiQvIC8iIDw8LVxFT0YgPmV4cGVjdC5lcnIgJiYKKwkJCXdhcm5pbmc6IEdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLgorCQkJVXNpbmcgdmVyc2lvbiBaCisJCUVPRgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXQgb2YgYm91bmRzIEdJVF9JTkRFWF9WRVJTSU9OIGlzc3VlcyB3YXJuaW5nJyAnCisJKAorCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCUdJVF9JTkRFWF9WRVJTSU9OPTEgJiYKKwkJZXhwb3J0IEdJVF9JTkRFWF9WRVJTSU9OICYmCisJCWdpdCBhZGQgYSAyPiYxIHwgc2VkICJzL1swLTldLy8iID5hY3R1YWwuZXJyICYmCisJCXNlZCAtZSAicy8gWiQvIC8iIDw8LVxFT0YgPmV4cGVjdC5lcnIgJiYKKwkJCXdhcm5pbmc6IEdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLgorCQkJVXNpbmcgdmVyc2lvbiBaCisJCUVPRgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB3YXJuaW5nIHdpdGggYm9ndXMgR0lUX0lOREVYX1ZFUlNJT04gYW5kIGV4aXN0aW5nIGluZGV4JyAnCisJKAorCQlHSVRfSU5ERVhfVkVSU0lPTj0xICYmCisJCWV4cG9ydCBHSVRfSU5ERVhfVkVSU0lPTiAmJgorCQlnaXQgYWRkIGEgMj5hY3R1YWwuZXJyICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXQgb2YgYm91bmRzIGluZGV4LnZlcnNpb24gaXNzdWVzIHdhcm5pbmcnICcKKwkoCisJCXNhbmVfdW5zZXQgR0lUX0lOREVYX1ZFUlNJT04gJiYKKwkJcm0gLWYgLmdpdC9pbmRleCAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGluZGV4LnZlcnNpb24gMSAmJgorCQlnaXQgYWRkIGEgMj4mMSB8IHNlZCAicy9bMC05XS8vIiA+YWN0dWFsLmVyciAmJgorCQlzZWQgLWUgInMvIFokLyAvIiA8PC1cRU9GID5leHBlY3QuZXJyICYmCisJCQl3YXJuaW5nOiBpbmRleC52ZXJzaW9uIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLgorCQkJVXNpbmcgdmVyc2lvbiBaCisJCUVPRgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisJKQorJworCit0ZXN0X2luZGV4X3ZlcnNpb24gKCkgeworCUlOREVYX1ZFUlNJT05fQ09ORklHPSQxICYmCisJRkVBVFVSRV9NQU5ZX0ZJTEVTPSQyICYmCisJRU5WX1ZBUl9WRVJTSU9OPSQzCisJRVhQRUNURURfT1VUUFVUX1ZFUlNJT049JDQgJiYKKwkoCisJCXJtIC1mIC5naXQvaW5kZXggJiYKKwkJcm0gLWYgLmdpdC9jb25maWcgJiYKKwkJaWYgdGVzdCAiJElOREVYX1ZFUlNJT05fQ09ORklHIiAtbmUgMAorCQl0aGVuCisJCQlnaXQgY29uZmlnIC0tYWRkIGluZGV4LnZlcnNpb24gJElOREVYX1ZFUlNJT05fQ09ORklHCisJCWZpICYmCisJCWdpdCBjb25maWcgLS1hZGQgZmVhdHVyZS5tYW55RmlsZXMgJEZFQVRVUkVfTUFOWV9GSUxFUworCQlpZiB0ZXN0ICIkRU5WX1ZBUl9WRVJTSU9OIiAtbmUgMAorCQl0aGVuCisJCQlHSVRfSU5ERVhfVkVSU0lPTj0kRU5WX1ZBUl9WRVJTSU9OICYmCisJCQlleHBvcnQgR0lUX0lOREVYX1ZFUlNJT04KKwkJZWxzZQorCQkJdW5zZXQgR0lUX0lOREVYX1ZFUlNJT04KKwkJZmkgJiYKKwkJZ2l0IGFkZCBhIDI+JjEgJiYKKwkJZWNobyAkRVhQRUNURURfT1VUUFVUX1ZFUlNJT04gPmV4cGVjdCAmJgorCQl0ZXN0LXRvb2wgaW5kZXgtdmVyc2lvbiA8LmdpdC9pbmRleCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4IHZlcnNpb24gY29uZmlnIHByZWNlZGVuY2UnICcKKwl0ZXN0X2luZGV4X3ZlcnNpb24gMCBmYWxzZSAwIDIgJiYKKwl0ZXN0X2luZGV4X3ZlcnNpb24gMiBmYWxzZSAwIDIgJiYKKwl0ZXN0X2luZGV4X3ZlcnNpb24gMyBmYWxzZSAwIDIgJiYKKwl0ZXN0X2luZGV4X3ZlcnNpb24gNCBmYWxzZSAwIDQgJiYKKwl0ZXN0X2luZGV4X3ZlcnNpb24gMiBmYWxzZSA0IDQgJiYKKwl0ZXN0X2luZGV4X3ZlcnNpb24gMiB0cnVlIDAgMiAmJgorCXRlc3RfaW5kZXhfdmVyc2lvbiAwIHRydWUgMCA0ICYmCisJdGVzdF9pbmRleF92ZXJzaW9uIDAgdHJ1ZSAyIDIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNjAxLWluZGV4LWJvZ3VzLnNoIGIvdC90MTYwMS1pbmRleC1ib2d1cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MTcxZjFlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTYwMS1pbmRleC1ib2d1cy5zaApAQCAtMCwwICsxLDIyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBoYW5kbGluZyBvZiBib2d1cyBpbmRleCBlbnRyaWVzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSB0cmVlIHdpdGggbnVsbCBzaGExJyAnCisJdHJlZT0kKHByaW50ZiAiMTYwMDAwIGNvbW1pdCAkWkVST19PSURcXHRicm9rZW5cXG4iIHwgZ2l0IG1rdHJlZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIHJlZnVzZXMgdG8gcmVhZCBudWxsIHNoYTEnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVhZC10cmVlICR0cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9BTExPV19OVUxMX1NIQTEgb3ZlcnJpZGVzIHJlZnVzYWwnICcKKwlHSVRfQUxMT1dfTlVMTF9TSEExPTEgZ2l0IHJlYWQtdHJlZSAkdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgd3JpdGUtdHJlZSByZWZ1c2VzIHRvIHdyaXRlIG51bGwgc2hhMScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3cml0ZS10cmVlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTcwMC1zcGxpdC1pbmRleC5zaCBiL3QvdDE3MDAtc3BsaXQtaW5kZXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTJhNTU2OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE3MDAtc3BsaXQtaW5kZXguc2gKQEAgLTAsMCArMSw1MTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzcGxpdCBpbmRleCBtb2RlIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKworIyBXZSBuZWVkIHRvdGFsIGNvbnRyb2wgb2YgaW5kZXggc3BsaXR0aW5nIGhlcmUKK3NhbmVfdW5zZXQgR0lUX1RFU1RfU1BMSVRfSU5ERVgKKworIyBUZXN0aW5nIGEgaGFyZCBjb2RlZCBTSEEgYWdhaW5zdCBhbiBpbmRleCB3aXRoIGFuIGV4dGVuc2lvbgorIyB0aGF0IGNhbiB2YXJ5IGZyb20gcnVuIHRvIHJ1biBpcyBwcm9ibGVtYXRpYyBzbyB3ZSBkaXNhYmxlCisjIHRob3NlIGV4dGVuc2lvbnMuCitzYW5lX3Vuc2V0IEdJVF9URVNUX0ZTTU9OSVRPUgorc2FuZV91bnNldCBHSVRfVEVTVF9JTkRFWF9USFJFQURTCisKKyMgQ3JlYXRlIGEgZmlsZSBuYW1lZCBhcyAkMSB3aXRoIGNvbnRlbnQgcmVhZCBmcm9tIHN0ZGluLgorIyBTZXQgdGhlIGZpbGUncyBtdGltZSB0byBhIGZldyBzZWNvbmRzIGluIHRoZSBwYXN0IHRvIGF2b2lkIHJhY3kgc2l0dWF0aW9ucy4KK2NyZWF0ZV9ub25fcmFjeV9maWxlICgpIHsKKwljYXQgPiIkMSIgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9LTUgIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3Rfb2lkX2NhY2hlIDw8LUVPRgorCW93bl92MyBzaGExOjgyOTliMGJjZDFhYzM2NGU1ZjFkNzc2OGVmYjYyZmEyZGE3OWEzMzkKKwlvd25fdjMgc2hhMjU2OjM4YTZkMjkyNWUzZWNlZWMzM2FkN2IzNGNiZmY0ZTAwODZjYWEwZGFmMjhmMzFlNTFmNWJkOTRiNGE3YWY4NmIKKworCWJhc2VfdjMgc2hhMTozOWQ4OTAxMzllZTUzNTZjN2VmNTcyMjE2Y2ViY2QyN2FhNDFmOWRmCisJYmFzZV92MyBzaGEyNTY6YzliYWVhZGY5MDUxMTJiZjZjMTdhZWZiZDdkMDIyNjdhZmQ3MGRlZDYxM2MzMGNhZmVkMmQ0MGNiNTA2ZTFlZAorCisJb3duX3Y0IHNoYTE6NDMyZWY0YjYzZjMyMTkzOTg0ZjMzOTQzMWZkNTBjYTc5NjQ5MzU2OQorCW93bl92NCBzaGEyNTY6NjczOGFjNjMxOWMyNWI2OTRhZmE3YmNjMzEzZGViMTgyZDFhNTliNjhiZjdhNDdiNDI5NmRlODM0NzhjMDQyMAorCisJYmFzZV92NCBzaGExOjUwODg1MWE3ZjBkZmE4NjkxZTlmNjljN2YwNTU4NjUzODkwMTI0OTEKKwliYXNlX3Y0IHNoYTI1NjozMTc3ZDRhZGZkZDRiNjkwNGY3ZTkyMWQ5MWQ3MTVhNDcxYzBkZGU3Y2Y2YTRiYmE1NzQ5MjdmMDJiNjk5NTA4CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VuYWJsZSBzcGxpdCBpbmRleCcgJworCWdpdCBjb25maWcgc3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIDEwMCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1zcGxpdC1pbmRleCAmJgorCXRlc3QtdG9vbCBkdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggPmFjdHVhbCAmJgorCWluZGV4dmVyc2lvbj0kKHRlc3QtdG9vbCBpbmRleC12ZXJzaW9uIDwuZ2l0L2luZGV4KSAmJgorCisJIyBORUVEU1dPUks6IFN0b3AgaGFyZC1jb2RpbmcgY2hlY2tzdW1zLgorCWlmIHRlc3QgIiRpbmRleHZlcnNpb24iID0gIjQiCisJdGhlbgorCQlvd249JCh0ZXN0X29pZCBvd25fdjQpCisJCWJhc2U9JCh0ZXN0X29pZCBiYXNlX3Y0KQorCWVsc2UKKwkJb3duPSQodGVzdF9vaWQgb3duX3YzKQorCQliYXNlPSQodGVzdF9vaWQgYmFzZV92MykKKwlmaSAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJb3duICRvd24KKwliYXNlICRiYXNlCisJcmVwbGFjZW1lbnRzOgorCWRlbGV0aW9uczoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBvbmUgZmlsZScgJworCWNyZWF0ZV9ub25fcmFjeV9maWxlIG9uZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgb25lICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmxzLWZpbGVzLmFjdHVhbCAmJgorCWNhdCA+bHMtZmlsZXMuZXhwZWN0IDw8LUVPRiAmJgorCTEwMDY0NCAkRU1QVFlfQkxPQiAwCW9uZQorCUVPRgorCXRlc3RfY21wIGxzLWZpbGVzLmV4cGVjdCBscy1maWxlcy5hY3R1YWwgJiYKKworCXRlc3QtdG9vbCBkdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgIi9eb3duL2QiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwliYXNlICRiYXNlCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJb25lCisJcmVwbGFjZW1lbnRzOgorCWRlbGV0aW9uczoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FibGUgc3BsaXQgaW5kZXgnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tc3BsaXQtaW5kZXggJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+bHMtZmlsZXMuYWN0dWFsICYmCisJY2F0ID5scy1maWxlcy5leHBlY3QgPDwtRU9GICYmCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJb25lCisJRU9GCisJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLmFjdHVhbCAmJgorCisJQkFTRT0kKHRlc3QtdG9vbCBkdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgLW4gInMvXm93bi9iYXNlL3AiKSAmJgorCXRlc3QtdG9vbCBkdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgIi9eb3duL2QiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlub3QgYSBzcGxpdCBpbmRleAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5hYmxlIHNwbGl0IGluZGV4IGFnYWluLCAib25lIiBub3cgYmVsb25ncyB0byBiYXNlIGluZGV4IicgJworCWdpdCB1cGRhdGUtaW5kZXggLS1zcGxpdC1pbmRleCAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID5scy1maWxlcy5hY3R1YWwgJiYKKwljYXQgPmxzLWZpbGVzLmV4cGVjdCA8PC1FT0YgJiYKKwkxMDA2NDQgJEVNUFRZX0JMT0IgMAlvbmUKKwlFT0YKKwl0ZXN0X2NtcCBscy1maWxlcy5leHBlY3QgbHMtZmlsZXMuYWN0dWFsICYmCisKKwl0ZXN0LXRvb2wgZHVtcC1zcGxpdC1pbmRleCAuZ2l0L2luZGV4IHwgc2VkICIvXm93bi9kIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJEJBU0UKKwlyZXBsYWNlbWVudHM6CisJZGVsZXRpb25zOgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZ5IG9yaWdpbmFsIGZpbGUsIGJhc2UgaW5kZXggdW50b3VjaGVkJyAnCisJZWNobyBtb2RpZmllZCB8IGNyZWF0ZV9ub25fcmFjeV9maWxlIG9uZSAmJgorCWZpbGUxX2Jsb2I9JChnaXQgaGFzaC1vYmplY3Qgb25lKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggb25lICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmxzLWZpbGVzLmFjdHVhbCAmJgorCWNhdCA+bHMtZmlsZXMuZXhwZWN0IDw8LUVPRiAmJgorCTEwMDY0NCAkZmlsZTFfYmxvYiAwCW9uZQorCUVPRgorCXRlc3RfY21wIGxzLWZpbGVzLmV4cGVjdCBscy1maWxlcy5hY3R1YWwgJiYKKworCXRlc3QtdG9vbCBkdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgIi9eb3duL2QiID5hY3R1YWwgJiYKKwlxX3RvX3RhYiA+ZXhwZWN0IDw8LUVPRiAmJgorCSRCQVNFCisJMTAwNjQ0ICRmaWxlMV9ibG9iIDBRCisJcmVwbGFjZW1lbnRzOiAwCisJZGVsZXRpb25zOgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGFub3RoZXIgZmlsZSwgd2hpY2ggc3RheXMgaW5kZXgnICcKKwljcmVhdGVfbm9uX3JhY3lfZmlsZSB0d28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHR3byAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID5scy1maWxlcy5hY3R1YWwgJiYKKwljYXQgPmxzLWZpbGVzLmV4cGVjdCA8PC1FT0YgJiYKKwkxMDA2NDQgJGZpbGUxX2Jsb2IgMAlvbmUKKwkxMDA2NDQgJEVNUFRZX0JMT0IgMAl0d28KKwlFT0YKKwl0ZXN0X2NtcCBscy1maWxlcy5leHBlY3QgbHMtZmlsZXMuYWN0dWFsICYmCisKKwl0ZXN0LXRvb2wgZHVtcC1zcGxpdC1pbmRleCAuZ2l0L2luZGV4IHwgc2VkICIvXm93bi9kIiA+YWN0dWFsICYmCisJcV90b190YWIgPmV4cGVjdCA8PC1FT0YgJiYKKwkkQkFTRQorCTEwMDY0NCAkZmlsZTFfYmxvYiAwUQorCTEwMDY0NCAkRU1QVFlfQkxPQiAwCXR3bworCXJlcGxhY2VtZW50czogMAorCWRlbGV0aW9uczoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBmaWxlIG5vdCBpbiBiYXNlIGluZGV4JyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSB0d28gJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+bHMtZmlsZXMuYWN0dWFsICYmCisJY2F0ID5scy1maWxlcy5leHBlY3QgPDwtRU9GICYmCisJMTAwNjQ0ICRmaWxlMV9ibG9iIDAJb25lCisJRU9GCisJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLmFjdHVhbCAmJgorCisJdGVzdC10b29sIGR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IHNlZCAiL15vd24vZCIgPmFjdHVhbCAmJgorCXFfdG9fdGFiID5leHBlY3QgPDwtRU9GICYmCisJJEJBU0UKKwkxMDA2NDQgJGZpbGUxX2Jsb2IgMFEKKwlyZXBsYWNlbWVudHM6IDAKKwlkZWxldGlvbnM6CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgZmlsZSBpbiBiYXNlIGluZGV4JyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSBvbmUgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+bHMtZmlsZXMuYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGxzLWZpbGVzLmFjdHVhbCAmJgorCisJdGVzdC10b29sIGR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IHNlZCAiL15vd24vZCIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSRCQVNFCisJcmVwbGFjZW1lbnRzOgorCWRlbGV0aW9uczogMAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG9yaWdpbmFsIGZpbGUgYmFjaycgJworCWNyZWF0ZV9ub25fcmFjeV9maWxlIG9uZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgb25lICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmxzLWZpbGVzLmFjdHVhbCAmJgorCWNhdCA+bHMtZmlsZXMuZXhwZWN0IDw8LUVPRiAmJgorCTEwMDY0NCAkRU1QVFlfQkxPQiAwCW9uZQorCUVPRgorCXRlc3RfY21wIGxzLWZpbGVzLmV4cGVjdCBscy1maWxlcy5hY3R1YWwgJiYKKworCXRlc3QtdG9vbCBkdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgIi9eb3duL2QiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkQkFTRQorCTEwMDY0NCAkRU1QVFlfQkxPQiAwCW9uZQorCXJlcGxhY2VtZW50czoKKwlkZWxldGlvbnM6IDAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBuZXcgZmlsZScgJworCWNyZWF0ZV9ub25fcmFjeV9maWxlIHR3byAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgdHdvICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTEwMDY0NCAkRU1QVFlfQkxPQiAwCW9uZQorCTEwMDY0NCAkRU1QVFlfQkxPQiAwCXR3bworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5pZnkgaW5kZXgsIHR3byBmaWxlcyByZW1haW4nICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tc3BsaXQtaW5kZXggJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+bHMtZmlsZXMuYWN0dWFsICYmCisJY2F0ID5scy1maWxlcy5leHBlY3QgPDwtRU9GICYmCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJb25lCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJdHdvCisJRU9GCisJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLmFjdHVhbCAmJgorCisJdGVzdC10b29sIGR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IHNlZCAiL15vd24vZCIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCW5vdCBhIHNwbGl0IGluZGV4CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1zaGFyZWQtaW5kZXgtcGF0aCcgJworCXRlc3RfY3JlYXRlX3JlcG8gc3BsaXQtaW5kZXggJiYKKwkoCisJCWNkIHNwbGl0LWluZGV4ICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1zcGxpdC1pbmRleCAmJgorCQllY2hvIC5naXQvc2hhcmVkaW5kZXgqID5leHBlY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXNoYXJlZC1pbmRleC1wYXRoID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlta2RpciBzdWJkaXJlY3RvcnkgJiYKKwkJY2Qgc3ViZGlyZWN0b3J5ICYmCisJCWVjaG8gLi4vLmdpdC9zaGFyZWRpbmRleCogPmV4cGVjdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tc2hhcmVkLWluZGV4LXBhdGggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgY29yZS5zcGxpdEluZGV4IGNvbmZpZyB2YXJpYWJsZSB0byB0cnVlJyAnCisJZ2l0IGNvbmZpZyBjb3JlLnNwbGl0SW5kZXggdHJ1ZSAmJgorCWNyZWF0ZV9ub25fcmFjeV9maWxlIHRocmVlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB0aHJlZSAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID5scy1maWxlcy5hY3R1YWwgJiYKKwljYXQgPmxzLWZpbGVzLmV4cGVjdCA8PC1FT0YgJiYKKwkxMDA2NDQgJEVNUFRZX0JMT0IgMAlvbmUKKwkxMDA2NDQgJEVNUFRZX0JMT0IgMAl0aHJlZQorCTEwMDY0NCAkRU1QVFlfQkxPQiAwCXR3bworCUVPRgorCXRlc3RfY21wIGxzLWZpbGVzLmV4cGVjdCBscy1maWxlcy5hY3R1YWwgJiYKKwlCQVNFPSQodGVzdC10b29sIGR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IGdyZXAgIl5iYXNlIikgJiYKKwl0ZXN0LXRvb2wgZHVtcC1zcGxpdC1pbmRleCAuZ2l0L2luZGV4IHwgc2VkICIvXm93bi9kIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJEJBU0UKKwlyZXBsYWNlbWVudHM6CisJZGVsZXRpb25zOgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IGNvcmUuc3BsaXRJbmRleCBjb25maWcgdmFyaWFibGUgdG8gZmFsc2UnICcKKwlnaXQgY29uZmlnIGNvcmUuc3BsaXRJbmRleCBmYWxzZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgdGhyZWUgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+bHMtZmlsZXMuYWN0dWFsICYmCisJY2F0ID5scy1maWxlcy5leHBlY3QgPDwtRU9GICYmCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJb25lCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJdHdvCisJRU9GCisJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLmFjdHVhbCAmJgorCXRlc3QtdG9vbCBkdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgIi9eb3duL2QiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlub3QgYSBzcGxpdCBpbmRleAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IGNvcmUuc3BsaXRJbmRleCBjb25maWcgdmFyaWFibGUgYmFjayB0byB0cnVlJyAnCisJZ2l0IGNvbmZpZyBjb3JlLnNwbGl0SW5kZXggdHJ1ZSAmJgorCWNyZWF0ZV9ub25fcmFjeV9maWxlIHRocmVlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB0aHJlZSAmJgorCUJBU0U9JCh0ZXN0LXRvb2wgZHVtcC1zcGxpdC1pbmRleCAuZ2l0L2luZGV4IHwgZ3JlcCAiXmJhc2UiKSAmJgorCXRlc3QtdG9vbCBkdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgIi9eb3duL2QiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkQkFTRQorCXJlcGxhY2VtZW50czoKKwlkZWxldGlvbnM6CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWNyZWF0ZV9ub25fcmFjeV9maWxlIGZvdXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZvdXIgJiYKKwl0ZXN0LXRvb2wgZHVtcC1zcGxpdC1pbmRleCAuZ2l0L2luZGV4IHwgc2VkICIvXm93bi9kIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJEJBU0UKKwkxMDA2NDQgJEVNUFRZX0JMT0IgMAlmb3VyCisJcmVwbGFjZW1lbnRzOgorCWRlbGV0aW9uczoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGJlaGF2aW9yIHdpdGggc3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIHVuc2V0JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSAmJgorCWNyZWF0ZV9ub25fcmFjeV9maWxlIGZpdmUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpdmUgJiYKKwlCQVNFPSQodGVzdC10b29sIGR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IGdyZXAgIl5iYXNlIikgJiYKKwl0ZXN0LXRvb2wgZHVtcC1zcGxpdC1pbmRleCAuZ2l0L2luZGV4IHwgc2VkICIvXm93bi9kIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJEJBU0UKKwlyZXBsYWNlbWVudHM6CisJZGVsZXRpb25zOgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwljcmVhdGVfbm9uX3JhY3lfZmlsZSBzaXggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHNpeCAmJgorCXRlc3QtdG9vbCBkdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgIi9eb3duL2QiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkQkFTRQorCTEwMDY0NCAkRU1QVFlfQkxPQiAwCXNpeAorCXJlcGxhY2VtZW50czoKKwlkZWxldGlvbnM6CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2Ugc2V0IHRvIDAnICcKKwlnaXQgY29uZmlnIHNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSAwICYmCisJY3JlYXRlX25vbl9yYWN5X2ZpbGUgc2V2ZW4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHNldmVuICYmCisJQkFTRT0kKHRlc3QtdG9vbCBkdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBncmVwICJeYmFzZSIpICYmCisJdGVzdC10b29sIGR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IHNlZCAiL15vd24vZCIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSRCQVNFCisJcmVwbGFjZW1lbnRzOgorCWRlbGV0aW9uczoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJY3JlYXRlX25vbl9yYWN5X2ZpbGUgZWlnaHQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGVpZ2h0ICYmCisJQkFTRT0kKHRlc3QtdG9vbCBkdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBncmVwICJeYmFzZSIpICYmCisJdGVzdC10b29sIGR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IHNlZCAiL15vd24vZCIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSRCQVNFCisJcmVwbGFjZW1lbnRzOgorCWRlbGV0aW9uczoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYXJlZCBpbmRleCBmaWxlcyBleHBpcmUgYWZ0ZXIgMiB3ZWVrcyBieSBkZWZhdWx0JyAnCisJY3JlYXRlX25vbl9yYWN5X2ZpbGUgdGVuICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB0ZW4gJiYKKwl0ZXN0ICQobHMgLmdpdC9zaGFyZWRpbmRleC4qIHwgd2MgLWwpIC1ndCAyICYmCisJanVzdF91bmRlcl8yX3dlZWtzX2Fnbz0kKCg1LTE0Kjg2NDAwKSkgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9JGp1c3RfdW5kZXJfMl93ZWVrc19hZ28gLmdpdC9zaGFyZWRpbmRleC4qICYmCisJY3JlYXRlX25vbl9yYWN5X2ZpbGUgZWxldmVuICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBlbGV2ZW4gJiYKKwl0ZXN0ICQobHMgLmdpdC9zaGFyZWRpbmRleC4qIHwgd2MgLWwpIC1ndCAyICYmCisJanVzdF9vdmVyXzJfd2Vla3NfYWdvPSQoKC0xLTE0Kjg2NDAwKSkgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9JGp1c3Rfb3Zlcl8yX3dlZWtzX2FnbyAuZ2l0L3NoYXJlZGluZGV4LiogJiYKKwljcmVhdGVfbm9uX3JhY3lfZmlsZSB0d2VsdmUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHR3ZWx2ZSAmJgorCXRlc3QgJChscyAuZ2l0L3NoYXJlZGluZGV4LiogfCB3YyAtbCkgLWxlIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BsaXRJbmRleC5zaGFyZWRJbmRleEV4cGlyZSBzZXQgdG8gMTYgZGF5cycgJworCWdpdCBjb25maWcgc3BsaXRJbmRleC5zaGFyZWRJbmRleEV4cGlyZSAiMTYuZGF5cy5hZ28iICYmCisJdGVzdC10b29sIGNobXRpbWUgPSRqdXN0X292ZXJfMl93ZWVrc19hZ28gLmdpdC9zaGFyZWRpbmRleC4qICYmCisJY3JlYXRlX25vbl9yYWN5X2ZpbGUgdGhpcnRlZW4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRoaXJ0ZWVuICYmCisJdGVzdCAkKGxzIC5naXQvc2hhcmVkaW5kZXguKiB8IHdjIC1sKSAtZ3QgMiAmJgorCWp1c3Rfb3Zlcl8xNl9kYXlzX2Fnbz0kKCgtMS0xNio4NjQwMCkpICYmCisJdGVzdC10b29sIGNobXRpbWUgPSRqdXN0X292ZXJfMTZfZGF5c19hZ28gLmdpdC9zaGFyZWRpbmRleC4qICYmCisJY3JlYXRlX25vbl9yYWN5X2ZpbGUgZm91cnRlZW4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZvdXJ0ZWVuICYmCisJdGVzdCAkKGxzIC5naXQvc2hhcmVkaW5kZXguKiB8IHdjIC1sKSAtbGUgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzcGxpdEluZGV4LnNoYXJlZEluZGV4RXhwaXJlIHNldCB0byAibmV2ZXIiIGFuZCAibm93IicgJworCWdpdCBjb25maWcgc3BsaXRJbmRleC5zaGFyZWRJbmRleEV4cGlyZSBuZXZlciAmJgorCWp1c3RfMTBfeWVhcnNfYWdvPSQoKC0zNjUqMTAqODY0MDApKSAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0kanVzdF8xMF95ZWFyc19hZ28gLmdpdC9zaGFyZWRpbmRleC4qICYmCisJY3JlYXRlX25vbl9yYWN5X2ZpbGUgZmlmdGVlbiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlmdGVlbiAmJgorCXRlc3QgJChscyAuZ2l0L3NoYXJlZGluZGV4LiogfCB3YyAtbCkgLWd0IDIgJiYKKwlnaXQgY29uZmlnIHNwbGl0SW5kZXguc2hhcmVkSW5kZXhFeHBpcmUgbm93ICYmCisJanVzdF8xX3NlY29uZF9hZ289LTEgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9JGp1c3RfMV9zZWNvbmRfYWdvIC5naXQvc2hhcmVkaW5kZXguKiAmJgorCWNyZWF0ZV9ub25fcmFjeV9maWxlIHNpeHRlZW4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHNpeHRlZW4gJiYKKwl0ZXN0ICQobHMgLmdpdC9zaGFyZWRpbmRleC4qIHwgd2MgLWwpIC1sZSAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdzYW1lIG1vZGUgZm9yIGluZGV4ICYgc3BsaXQgaW5kZXgnICcKKwlnaXQgaW5pdCBzYW1lLW1vZGUgJiYKKwkoCisJCWNkIHNhbWUtbW9kZSAmJgorCQl0ZXN0X2NvbW1pdCBBICYmCisJCXRlc3RfbW9kZWJpdHMgLmdpdC9pbmRleCA+aW5kZXhfbW9kZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSAmJgorCQlnaXQgLWMgY29yZS5zcGxpdEluZGV4PXRydWUgc3RhdHVzICYmCisJCXNoYXJlZD0kKGxzIC5naXQvc2hhcmVkaW5kZXguKikgJiYKKwkJY2FzZSAiJHNoYXJlZCIgaW4KKwkJKiIgIiopCisJCQkjIHdlIGhhdmUgbW9yZSB0aGFuIG9uZT8/PworCQkJZmFsc2UgOzsKKwkJKikKKwkJCXRlc3RfbW9kZWJpdHMgIiRzaGFyZWQiID5zcGxpdF9pbmRleF9tb2RlICYmCisJCQl0ZXN0X2NtcCBpbmRleF9tb2RlIHNwbGl0X2luZGV4X21vZGUgOzsKKwkJZXNhYworCSkKKycKKword2hpbGUgcmVhZCAtciBtb2RlIG1vZGViaXRzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICJzcGxpdCBpbmRleCByZXNwZWN0cyBjb3JlLnNoYXJlZHJlcG9zaXRvcnkgJG1vZGUiICcKKwkJIyBSZW1vdmUgZXhpc3Rpbmcgc2hhcmVkIGluZGV4IGZpbGVzCisJCWdpdCBjb25maWcgY29yZS5zcGxpdEluZGV4IGZhbHNlICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgb25lICYmCisJCXJtIC1mIC5naXQvc2hhcmVkaW5kZXguKiAmJgorCQkjIENyZWF0ZSBvbmUgbmV3IHNoYXJlZCBpbmRleCBmaWxlCisJCWdpdCBjb25maWcgY29yZS5zaGFyZWRyZXBvc2l0b3J5ICIkbW9kZSIgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLnNwbGl0SW5kZXggdHJ1ZSAmJgorCQljcmVhdGVfbm9uX3JhY3lfZmlsZSBvbmUgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBvbmUgJiYKKwkJZWNobyAiJG1vZGViaXRzIiA+ZXhwZWN0ICYmCisJCXRlc3RfbW9kZWJpdHMgLmdpdC9pbmRleCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJc2hhcmVkPSQobHMgLmdpdC9zaGFyZWRpbmRleC4qKSAmJgorCQljYXNlICIkc2hhcmVkIiBpbgorCQkqIiAiKikKKwkJCSMgd2UgaGF2ZSBtb3JlIHRoYW4gb25lPz8/CisJCQlmYWxzZSA7OworCQkqKQorCQkJdGVzdF9tb2RlYml0cyAiJHNoYXJlZCIgPmFjdHVhbCAmJgorCQkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCA7OworCQllc2FjCisJJworZG9uZSA8PFxFT0YKKzA2NjYgLXJ3LXJ3LXJ3LQorMDY0MiAtcnctci0tLXctCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdncmFjZWZ1bCBoYW5kbGluZyB3aGVuIHNwbGl0dGluZyBpbmRleCBpcyBub3QgYWxsb3dlZCcgJworCXRlc3RfY3JlYXRlX3JlcG8gcm8gJiYKKwkoCisJCWNkIHJvICYmCisJCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLXNwbGl0LWluZGV4ICYmCisJCXRlc3QgLWYgLmdpdC9zaGFyZWRpbmRleC4qCisJKSAmJgorCWNwIHJvLy5naXQvaW5kZXggbmV3LWluZGV4ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjaG1vZCB1K3cgcm8vLmdpdCIgJiYKKwljaG1vZCB1LXcgcm8vLmdpdCAmJgorCUdJVF9JTkRFWF9GSUxFPSIkKHB3ZCkvbmV3LWluZGV4IiBnaXQgLUMgcm8gdXBkYXRlLWluZGV4IC0tc3BsaXQtaW5kZXggJiYKKwljaG1vZCB1K3cgcm8vLmdpdCAmJgorCXJtIHJvLy5naXQvc2hhcmVkaW5kZXguKiAmJgorCUdJVF9JTkRFWF9GSUxFPW5ldy1pbmRleCBnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCWVjaG8gaW5pdGlhbC50ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0aW5nIHNwbGl0IGluZGV4IHdpdGggbnVsbCBzaGExIGRvZXMgbm90IHdyaXRlIGNhY2hlIHRyZWUnICcKKwlnaXQgY29uZmlnIGNvcmUuc3BsaXRJbmRleCB0cnVlICYmCisJZ2l0IGNvbmZpZyBzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgMCAmJgorCWdpdCBjb21taXQgLW0gImNvbW1pdCIgJiYKKwl7CisJCWdpdCBscy10cmVlIEhFQUQgJiYKKwkJcHJpbnRmICIxNjAwMDAgY29tbWl0ICRaRVJPX09JRFxcdGJyb2tlblxcbiIKKwl9ID5icm9rZW4tdHJlZSAmJgorCWVjaG8gImFkZCBicm9rZW4gZW50cnkiID5tc2cgJiYKKworCXRyZWU9JChnaXQgbWt0cmVlIDxicm9rZW4tdHJlZSkgJiYKKwl0ZXN0X3RpY2sgJiYKKwljb21taXQ9JChnaXQgY29tbWl0LXRyZWUgJHRyZWUgLXAgSEVBRCA8bXNnKSAmJgorCWdpdCB1cGRhdGUtcmVmIEhFQUQgIiRjb21taXQiICYmCisJR0lUX0FMTE9XX05VTExfU0hBMT0xIGdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgdGVzdC10b29sIGR1bXAtY2FjaGUtdHJlZSA+Y2FjaGUtdHJlZS5vdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGNhY2hlLXRyZWUub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCByZWZyZXNoIG51bGwgYmFzZSBpbmRleCcgJworCXRlc3RfY3JlYXRlX3JlcG8gbWVyZ2UgJiYKKwkoCisJCWNkIG1lcmdlICYmCisJCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHNpZGUtYnJhbmNoICYmCisJCXRlc3RfY29tbWl0IGV4dHJhICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLXNwbGl0LWluZGV4ICYmCisJCXRlc3RfY29tbWl0IG1vcmUgJiYKKwkJIyBtdXN0IG5vdCB3cml0ZSBhIG5ldyBzaGFyZWluZGV4LCBvciB3ZSB3b250IGNhdGNoIHRoZSBwcm9ibGVtCisJCWdpdCAtYyBzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2U9MTAwIG1lcmdlIC0tbm8tZWRpdCBzaWRlLWJyYW5jaCAyPmVyciAmJgorCQkjIGkuZS4gZG8gbm90IGV4cGVjdCB3YXJuaW5ncyBsaWtlCisJCSMgY291bGQgbm90IGZyZXNoZW4gc2hhcmVkIGluZGV4IC4uLi9zaGFyZWluZGV4LjAwMDAwLi4uCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTcwMS1yYWN5LXNwbGl0LWluZGV4LnNoIGIvdC90MTcwMS1yYWN5LXNwbGl0LWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkYzIyMWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNzAxLXJhY3ktc3BsaXQtaW5kZXguc2gKQEAgLTAsMCArMSwyMTQgQEAKKyMhL2Jpbi9zaAorCisjIFRoaXMgdGVzdCBjYW4gZ2l2ZSBmYWxzZSBzdWNjZXNzIGlmIHlvdXIgbWFjaGluZSBpcyBzdWZmaWNpZW50bHkKKyMgc2xvdyBvciBhbGwgdHJpYWxzIGhhcHBlbmVkIHRvIGhhcHBlbiBvbiBzZWNvbmQgYm91bmRhcmllcy4KKwordGVzdF9kZXNjcmlwdGlvbj0ncmFjeSBzcGxpdCBpbmRleCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJIyBPbmx5IHNwbGl0IHRoZSBpbmRleCB3aGVuIHRoZSB0ZXN0IGV4cGxpY2l0bHkgc2F5cyBzby4KKwlzYW5lX3Vuc2V0IEdJVF9URVNUX1NQTElUX0lOREVYICYmCisJZ2l0IGNvbmZpZyBzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgMTAwICYmCisKKwllY2hvICJjYWNoZWQgY29udGVudCIgPnJhY3ktZmlsZSAmJgorCWdpdCBhZGQgcmFjeS1maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwllY2hvIHNvbWV0aGluZyA+b3RoZXItZmlsZSAmJgorCSMgTm8gcmFjaW5lc3Mgd2l0aCB0aGlzIGZpbGUuCisJdGVzdC10b29sIGNobXRpbWUgPS0yMCBvdGhlci1maWxlICYmCisKKwllY2hvICIrY2FjaGVkIGNvbnRlbnQiID5leHBlY3QKKycKKworY2hlY2tfY2FjaGVkX2RpZmYgKCkgeworCWdpdCBkaWZmLWluZGV4IC0tcGF0Y2ggLS1jYWNoZWQgJEVNUFRZX1RSRUUgcmFjeS1maWxlID5kaWZmICYmCisJdGFpbCAtMSBkaWZmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3RyaWFscz0iMCAxIDIgMyA0IgorZm9yIHRyaWFsIGluICR0cmlhbHMKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic3BsaXQgdGhlIGluZGV4IHdoaWxlIGFkZGluZyBhIHJhY2lseSBjbGVhbiBmaWxlICMkdHJpYWwiICcKKwkJcm0gLWYgLmdpdC9pbmRleCAuZ2l0L3NoYXJlZGluZGV4LiogJiYKKworCQkjIFRoZSBuZXh0IHRocmVlIGNvbW1hbmRzIG11c3QgYmUgcnVuIHdpdGhpbiB0aGUgc2FtZQorCQkjIHNlY29uZCAoc28gYm90aCB3cml0ZXMgdG8gcmFjeS1maWxlIHJlc3VsdCBpbiB0aGUgc2FtZQorCQkjIG10aW1lKSB0byBjcmVhdGUgdGhlIGludGVyZXN0aW5nIHJhY3kgc2l0dWF0aW9uLgorCQllY2hvICJjYWNoZWQgY29udGVudCIgPnJhY3ktZmlsZSAmJgorCisJCSMgVXBkYXRlIGFuZCBzcGxpdCB0aGUgaW5kZXguICBUaGUgY2FjaGUgZW50cnkgb2YKKwkJIyByYWN5LWZpbGUgd2lsbCBiZSBzdG9yZWQgb25seSBpbiB0aGUgc2hhcmVkIGluZGV4LgorCQlnaXQgdXBkYXRlLWluZGV4IC0tc3BsaXQtaW5kZXggLS1hZGQgcmFjeS1maWxlICYmCisKKwkJIyBGaWxlIHNpemUgbXVzdCBzdGF5IHRoZSBzYW1lLgorCQllY2hvICJkaXJ0eSB3b3JrdHJlZSIgPnJhY3ktZmlsZSAmJgorCisJCSMgU3Vic2VxdWVudCBnaXQgY29tbWFuZHMgc2hvdWxkIG5vdGljZSB0aGF0IHJhY3ktZmlsZQorCQkjIGFuZCB0aGUgc3BsaXQgaW5kZXggaGF2ZSB0aGUgc2FtZSBtdGltZSwgYW5kIGNoZWNrCisJCSMgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgdG8gc2VlIGlmIGl0IGlzIGFjdHVhbGx5CisJCSMgY2xlYW4uCisJCWNoZWNrX2NhY2hlZF9kaWZmCisJJworZG9uZQorCitmb3IgdHJpYWwgaW4gJHRyaWFscworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJhZGQgYSByYWNpbHkgY2xlYW4gZmlsZSB0byBhbiBhbHJlYWR5IHNwbGl0IGluZGV4ICMkdHJpYWwiICcKKwkJcm0gLWYgLmdpdC9pbmRleCAuZ2l0L3NoYXJlZGluZGV4LiogJiYKKworCQlnaXQgdXBkYXRlLWluZGV4IC0tc3BsaXQtaW5kZXggJiYKKworCQkjIFRoZSBuZXh0IHRocmVlIGNvbW1hbmRzIG11c3QgYmUgcnVuIHdpdGhpbiB0aGUgc2FtZQorCQkjIHNlY29uZC4KKwkJZWNobyAiY2FjaGVkIGNvbnRlbnQiID5yYWN5LWZpbGUgJiYKKworCQkjIFVwZGF0ZSB0aGUgc3BsaXQgaW5kZXguICBUaGUgY2FjaGUgZW50cnkgb2YgcmFjeS1maWxlCisJCSMgd2lsbCBiZSBzdG9yZWQgb25seSBpbiB0aGUgc3BsaXQgaW5kZXguCisJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmFjeS1maWxlICYmCisKKwkJIyBGaWxlIHNpemUgbXVzdCBzdGF5IHRoZSBzYW1lLgorCQllY2hvICJkaXJ0eSB3b3JrdHJlZSIgPnJhY3ktZmlsZSAmJgorCisJCSMgU3Vic2VxdWVudCBnaXQgY29tbWFuZHMgc2hvdWxkIG5vdGljZSB0aGF0IHJhY3ktZmlsZQorCQkjIGFuZCB0aGUgc3BsaXQgaW5kZXggaGF2ZSB0aGUgc2FtZSBtdGltZSwgYW5kIGNoZWNrCisJCSMgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgdG8gc2VlIGlmIGl0IGlzIGFjdHVhbGx5CisJCSMgY2xlYW4uCisJCWNoZWNrX2NhY2hlZF9kaWZmCisJJworZG9uZQorCitmb3IgdHJpYWwgaW4gJHRyaWFscworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJzcGxpdCB0aGUgaW5kZXggd2hlbiB0aGUgaW5kZXggY29udGFpbnMgYSByYWNpbHkgY2xlYW4gY2FjaGUgZW50cnkgIyR0cmlhbCIgJworCQlybSAtZiAuZ2l0L2luZGV4IC5naXQvc2hhcmVkaW5kZXguKiAmJgorCisJCSMgVGhlIG5leHQgdGhyZWUgY29tbWFuZHMgbXVzdCBiZSBydW4gd2l0aGluIHRoZSBzYW1lCisJCSMgc2Vjb25kLgorCQllY2hvICJjYWNoZWQgY29udGVudCIgPnJhY3ktZmlsZSAmJgorCisJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmFjeS1maWxlICYmCisKKwkJIyBGaWxlIHNpemUgbXVzdCBzdGF5IHRoZSBzYW1lLgorCQllY2hvICJkaXJ0eSB3b3JrdHJlZSIgPnJhY3ktZmlsZSAmJgorCisJCSMgTm93IHdhaXQgYSBiaXQgdG8gZW5zdXJlIHRoYXQgdGhlIHNwbGl0IGluZGV4IHdyaXR0ZW4KKwkJIyBiZWxvdyB3aWxsIGdldCBhIG1vcmUgcmVjZW50IG10aW1lIHRoYW4gcmFjeS1maWxlLgorCQlzbGVlcCAxICYmCisKKwkJIyBVcGRhdGUgYW5kIHNwbGl0IHRoZSBpbmRleCB3aGVuIHRoZSBpbmRleCBjb250YWlucworCQkjIHRoZSByYWNpbHkgY2xlYW4gY2FjaGUgZW50cnkgb2YgcmFjeS1maWxlLgorCQkjIEEgY29ycmVzcG9uZGluZyByZXBsYWNlbWVudCBjYWNoZSBlbnRyeSB3aXRoIHNtdWRnZWQKKwkJIyBzdGF0IGRhdGEgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBuZXcgc3BsaXQgaW5kZXguCisJCWdpdCB1cGRhdGUtaW5kZXggLS1zcGxpdC1pbmRleCAtLWFkZCBvdGhlci1maWxlICYmCisKKwkJIyBTdWJzZXF1ZW50IGdpdCBjb21tYW5kcyBzaG91bGQgbm90aWNlIHRoZSBzbXVkZ2VkCisJCSMgc3RhdCBkYXRhIGluIHRoZSByZXBsYWNlbWVudCBjYWNoZSBlbnRyeSBhbmQgdGhhdCBpdAorCQkjIGRvZXNudCBtYXRjaCB3aXRoIHRoZSBmaWxlIHRoZSB3b3JrdHJlZS4KKwkJY2hlY2tfY2FjaGVkX2RpZmYKKwknCitkb25lCisKK2ZvciB0cmlhbCBpbiAkdHJpYWxzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInVwZGF0ZSB0aGUgc3BsaXQgaW5kZXggd2hlbiBpdCBjb250YWlucyBhIG5ldyByYWNpbHkgY2xlYW4gY2FjaGUgZW50cnkgIyR0cmlhbCIgJworCQlybSAtZiAuZ2l0L2luZGV4IC5naXQvc2hhcmVkaW5kZXguKiAmJgorCisJCWdpdCB1cGRhdGUtaW5kZXggLS1zcGxpdC1pbmRleCAmJgorCisJCSMgVGhlIG5leHQgdGhyZWUgY29tbWFuZHMgbXVzdCBiZSBydW4gd2l0aGluIHRoZSBzYW1lCisJCSMgc2Vjb25kLgorCQllY2hvICJjYWNoZWQgY29udGVudCIgPnJhY3ktZmlsZSAmJgorCisJCSMgVXBkYXRlIHRoZSBzcGxpdCBpbmRleC4gIFRoZSBjYWNoZSBlbnRyeSBvZiByYWN5LWZpbGUKKwkJIyB3aWxsIGJlIHN0b3JlZCBvbmx5IGluIHRoZSBzcGxpdCBpbmRleC4KKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByYWN5LWZpbGUgJiYKKworCQkjIEZpbGUgc2l6ZSBtdXN0IHN0YXkgdGhlIHNhbWUuCisJCWVjaG8gImRpcnR5IHdvcmt0cmVlIiA+cmFjeS1maWxlICYmCisKKwkJIyBOb3cgd2FpdCBhIGJpdCB0byBlbnN1cmUgdGhhdCB0aGUgc3BsaXQgaW5kZXggd3JpdHRlbgorCQkjIGJlbG93IHdpbGwgZ2V0IGEgbW9yZSByZWNlbnQgbXRpbWUgdGhhbiByYWN5LWZpbGUuCisJCXNsZWVwIDEgJiYKKworCQkjIFVwZGF0ZSB0aGUgc3BsaXQgaW5kZXggd2hlbiB0aGUgcmFjaWx5IGNsZWFuIGNhY2hlCisJCSMgZW50cnkgb2YgcmFjeS1maWxlIGlzIG9ubHkgc3RvcmVkIGluIHRoZSBzcGxpdCBpbmRleC4KKwkJIyBBbiB1cGRhdGVkIGNhY2hlIGVudHJ5IHdpdGggc211ZGdlZCBzdGF0IGRhdGEgc2hvdWxkCisJCSMgYmUgYWRkZWQgdG8gdGhlIG5ldyBzcGxpdCBpbmRleC4KKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBvdGhlci1maWxlICYmCisKKwkJIyBTdWJzZXF1ZW50IGdpdCBjb21tYW5kcyBzaG91bGQgbm90aWNlIHRoZSBzbXVkZ2VkCisJCSMgc3RhdCBkYXRhLgorCQljaGVja19jYWNoZWRfZGlmZgorCScKK2RvbmUKKworZm9yIHRyaWFsIGluICR0cmlhbHMKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAidXBkYXRlIHRoZSBzcGxpdCBpbmRleCB3aGVuIGEgcmFjaWx5IGNsZWFuIGNhY2hlIGVudHJ5IGlzIHN0b3JlZCBvbmx5IGluIHRoZSBzaGFyZWQgaW5kZXggIyR0cmlhbCIgJworCQlybSAtZiAuZ2l0L2luZGV4IC5naXQvc2hhcmVkaW5kZXguKiAmJgorCisJCSMgVGhlIG5leHQgdGhyZWUgY29tbWFuZHMgbXVzdCBiZSBydW4gd2l0aGluIHRoZSBzYW1lCisJCSMgc2Vjb25kLgorCQllY2hvICJjYWNoZWQgY29udGVudCIgPnJhY3ktZmlsZSAmJgorCisJCSMgVXBkYXRlIGFuZCBzcGxpdCB0aGUgaW5kZXguICBUaGUgY2FjaGUgZW50cnkgb2YKKwkJIyByYWN5LWZpbGUgd2lsbCBiZSBzdG9yZWQgb25seSBpbiB0aGUgc2hhcmVkIGluZGV4LgorCQlnaXQgdXBkYXRlLWluZGV4IC0tc3BsaXQtaW5kZXggLS1hZGQgcmFjeS1maWxlICYmCisKKwkJIyBGaWxlIHNpemUgbXVzdCBzdGF5IHRoZSBzYW1lLgorCQllY2hvICJkaXJ0eSB3b3JrdHJlZSIgPnJhY3ktZmlsZSAmJgorCisJCSMgTm93IHdhaXQgYSBiaXQgdG8gZW5zdXJlIHRoYXQgdGhlIHNwbGl0IGluZGV4IHdyaXR0ZW4KKwkJIyBiZWxvdyB3aWxsIGdldCBhIG1vcmUgcmVjZW50IG10aW1lIHRoYW4gcmFjeS1maWxlLgorCQlzbGVlcCAxICYmCisKKwkJIyBVcGRhdGUgdGhlIHNwbGl0IGluZGV4IHdoZW4gdGhlIHJhY2lseSBjbGVhbiBjYWNoZQorCQkjIGVudHJ5IG9mIHJhY3ktZmlsZSBpcyBvbmx5IHN0b3JlZCBpbiB0aGUgc2hhcmVkIGluZGV4LgorCQkjIEEgY29ycmVzcG9uZGluZyByZXBsYWNlbWVudCBjYWNoZSBlbnRyeSB3aXRoIHNtdWRnZWQKKwkJIyBzdGF0IGRhdGEgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBuZXcgc3BsaXQgaW5kZXguCisJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgb3RoZXItZmlsZSAmJgorCisJCSMgU3Vic2VxdWVudCBnaXQgY29tbWFuZHMgc2hvdWxkIG5vdGljZSB0aGUgc211ZGdlZAorCQkjIHN0YXQgZGF0YS4KKwkJY2hlY2tfY2FjaGVkX2RpZmYKKwknCitkb25lCisKK2ZvciB0cmlhbCBpbiAkdHJpYWxzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInVwZGF0ZSB0aGUgc3BsaXQgaW5kZXggYWZ0ZXIgdW5wYWNrIHRyZWVzKCkgY29waWVkIGEgcmFjaWx5IGNsZWFuIGNhY2hlIGVudHJ5IGZyb20gdGhlIHNoYXJlZCBpbmRleCAjJHRyaWFsIiAnCisJCXJtIC1mIC5naXQvaW5kZXggLmdpdC9zaGFyZWRpbmRleC4qICYmCisKKwkJIyBUaGUgbmV4dCB0aHJlZSBjb21tYW5kcyBtdXN0IGJlIHJ1biB3aXRoaW4gdGhlIHNhbWUKKwkJIyBzZWNvbmQuCisJCWVjaG8gImNhY2hlZCBjb250ZW50IiA+cmFjeS1maWxlICYmCisKKwkJIyBVcGRhdGUgYW5kIHNwbGl0IHRoZSBpbmRleC4gIFRoZSBjYWNoZSBlbnRyeSBvZgorCQkjIHJhY3ktZmlsZSB3aWxsIGJlIHN0b3JlZCBvbmx5IGluIHRoZSBzaGFyZWQgaW5kZXguCisJCWdpdCB1cGRhdGUtaW5kZXggLS1zcGxpdC1pbmRleCAtLWFkZCByYWN5LWZpbGUgJiYKKworCQkjIEZpbGUgc2l6ZSBtdXN0IHN0YXkgdGhlIHNhbWUuCisJCWVjaG8gImRpcnR5IHdvcmt0cmVlIiA+cmFjeS1maWxlICYmCisKKwkJIyBOb3cgd2FpdCBhIGJpdCB0byBlbnN1cmUgdGhhdCB0aGUgc3BsaXQgaW5kZXggd3JpdHRlbgorCQkjIGJlbG93IHdpbGwgZ2V0IGEgbW9yZSByZWNlbnQgbXRpbWUgdGhhbiByYWN5LWZpbGUuCisJCXNsZWVwIDEgJiYKKworCQkjIFVwZGF0ZSB0aGUgc3BsaXQgaW5kZXggYWZ0ZXIgdW5wYWNrX3RyZWVzKCkgY29waWVkIHRoZQorCQkjIHJhY2lseSBjbGVhbiBjYWNoZSBlbnRyeSBvZiByYWN5LWZpbGUgZnJvbSB0aGUgc2hhcmVkCisJCSMgaW5kZXguICBBIGNvcnJlc3BvbmRpbmcgcmVwbGFjZW1lbnQgY2FjaGUgZW50cnkKKwkJIyB3aXRoIHNtdWRnZWQgc3RhdCBkYXRhIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgbmV3CisJCSMgc3BsaXQgaW5kZXguCisJCWdpdCByZWFkLXRyZWUgLW0gSEVBRCAmJgorCisJCSMgU3Vic2VxdWVudCBnaXQgY29tbWFuZHMgc2hvdWxkIG5vdGljZSB0aGUgc211ZGdlZAorCQkjIHN0YXQgZGF0YS4KKwkJY2hlY2tfY2FjaGVkX2RpZmYKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAwMC1jb25mbGljdC13aGVuLWNoZWNraW5nLWZpbGVzLW91dC5zaCBiL3QvdDIwMDAtY29uZmxpY3Qtd2hlbi1jaGVja2luZy1maWxlcy1vdXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjE4NjE2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMDAtY29uZmxpY3Qtd2hlbi1jaGVja2luZy1maWxlcy1vdXQuc2gKQEAgLTAsMCArMSwxMzUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNvbmZsaWN0cyB3aGVuIGNoZWNraW5nIGZpbGVzIG91dCB0ZXN0LicKKworIyBUaGUgZmlyc3QgdGVzdCByZWdpc3RlcnMgdGhlIGZvbGxvd2luZyBmaWxlc3lzdGVtIHN0cnVjdHVyZSBpbiB0aGUKKyMgY2FjaGU6CisjCisjICAgICBwYXRoMCAgICAgICAtIGEgZmlsZQorIyAgICAgcGF0aDEvZmlsZTEgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyMKKyMgQW5kIHRoZW4gdHJpZXMgdG8gY2hlY2tvdXQgaW4gYSB3b3JrIHRyZWUgdGhhdCBoYXMgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgIHBhdGgwL2ZpbGUwIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisjICAgICBwYXRoMSAgICAgICAtIGEgZmlsZQorIworIyBUaGUgZ2l0IGNoZWNrb3V0LWluZGV4IGNvbW1hbmQgc2hvdWxkIGZhaWwgd2hlbiBhdHRlbXB0aW5nIHRvIGNoZWNrb3V0CisjIHBhdGgwLCBmaW5kaW5nIGl0IGlzIG9jY3VwaWVkIGJ5IGEgZGlyZWN0b3J5LCBhbmQgcGF0aDEvZmlsZTEsIGZpbmRpbmcKKyMgcGF0aDEgaXMgb2NjdXBpZWQgYnkgYSBub24tZGlyZWN0b3J5LiAgV2l0aCAiLWYiIGZsYWcsIGl0IHNob3VsZCByZW1vdmUKKyMgdGhlIGNvbmZsaWN0aW5nIHBhdGhzIGFuZCBzdWNjZWVkLgorCisuIC4vdGVzdC1saWIuc2gKKworc2hvd19maWxlcygpIHsKKwkjIHNob3cgZmlsZXN5c3RlbSBmaWxlcywganVzdCBbLWRsXSBmb3IgdHlwZSBhbmQgbmFtZQorCWZpbmQgcGF0aD8gLWxzIHwKKwlzZWQgLWUgJ3MvXlswLTldKiAqIFswLTldKiAqIFwoWy1iY2RsXVwpW14gXSogKlswLTldKiAqW14gXSogKlteIF0qICpbMC05XSogW0EtWl1bYS16XVthLXpdIFswLTldWzAtOV0gW14gXSogL2ZzOiBcMSAvJworCSMgd2hhdCdzIGluIHRoZSBjYWNoZSwganVzdCBtb2RlIGFuZCBuYW1lCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgfAorCXNlZCAtZSAncy9eXChbMC05XSpcKSBbMC05YS1mXSogWzAtM10gL2NhOiBcMSAvJworCSMgd2hhdCdzIGluIHRoZSB0cmVlLCBqdXN0IG1vZGUgYW5kIG5hbWUuCisJZ2l0IGxzLXRyZWUgLXIgIiQxIiB8CisJc2VkIC1lICdzL15cKFswLTldKlwpCVteIF0qCVswLTlhLWZdKgkvdHI6IFwxIC8nCit9CisKK2RhdGUgPnBhdGgwCitta2RpciBwYXRoMQorZGF0ZSA+cGF0aDEvZmlsZTEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgdmFyaW91cyBwYXRocy4nIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMCBwYXRoMS9maWxlMScKKworcm0gLWZyIHBhdGgwIHBhdGgxCitta2RpciBwYXRoMAorZGF0ZSA+cGF0aDAvZmlsZTAKK2RhdGUgPnBhdGgxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgY2hlY2tvdXQtaW5kZXggd2l0aG91dCAtZiBzaG91bGQgZmFpbCBvbiBjb25mbGljdGluZyB3b3JrIHRyZWUuJyBcCisgICAgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dC1pbmRleCAtYScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBjaGVja291dC1pbmRleCB3aXRoIC1mIHNob3VsZCBzdWNjZWVkLicgXAorICAgICdnaXQgY2hlY2tvdXQtaW5kZXggLWYgLWEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgY2hlY2tvdXQtaW5kZXggY29uZmxpY3RpbmcgcGF0aHMuJyBcCisgICAgJ3Rlc3QgLWYgcGF0aDAgJiYgdGVzdCAtZCBwYXRoMSAmJiB0ZXN0IC1mIHBhdGgxL2ZpbGUxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjaGVja291dC1pbmRleCAtZiB0d2ljZSB3aXRoIC0tcHJlZml4JyAnCisJbWtkaXIgLXAgdGFyL2dldCAmJgorCWxuIC1zIHRhci9nZXQgdGhlcmUgJiYKKwllY2hvIGZpcnN0ICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1hIC1mIC0tcHJlZml4PXRoZXJlLyAmJgorCWVjaG8gc2Vjb25kICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1hIC1mIC0tcHJlZml4PXRoZXJlLworJworCisjIFRoZSBzZWNvbmQgdGVzdCByZWdpc3RlcnMgdGhlIGZvbGxvd2luZyBmaWxlc3lzdGVtIHN0cnVjdHVyZSBpbiB0aGUgY2FjaGU6CisjCisjICAgICBwYXRoMi9maWxlMAktIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorIyAgICAgcGF0aDMvZmlsZTEgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyMKKyMgYW5kIGF0dGVtcHRzIHRvIGNoZWNrIGl0IG91dCB3aGVuIHRoZSB3b3JrIHRyZWUgaGFzOgorIworIyAgICAgcGF0aDIvZmlsZTAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyMgICAgIHBhdGgzICAgICAgIC0gYSBzeW1saW5rIHBvaW50aW5nIGF0ICJwYXRoMiIKKyMKKyMgQ2hlY2tvdXQgY2FjaGUgc2hvdWxkIGZhaWwgdG8gZXh0cmFjdCBwYXRoMy9maWxlMSBiZWNhdXNlIHRoZSBsZWFkaW5nCisjIHBhdGggcGF0aDMgaXMgb2NjdXBpZWQgYnkgYSBub24tZGlyZWN0b3J5LiAgV2l0aCAiLWYiIGl0IHNob3VsZCByZW1vdmUKKyMgdGhlIHN5bWxpbmsgcGF0aDMgYW5kIGNyZWF0ZSBkaXJlY3RvcnkgcGF0aDMgYW5kIGZpbGUgcGF0aDMvZmlsZTEuCisKK21rZGlyIHBhdGgyCitkYXRlID5wYXRoMi9maWxlMAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDIvZmlsZTAnIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMi9maWxlMCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd3cml0aW5nIHRyZWUgb3V0IHdpdGggZ2l0IHdyaXRlLXRyZWUnIFwKKyAgICAndHJlZTE9JChnaXQgd3JpdGUtdHJlZSknCit0ZXN0X2RlYnVnICdzaG93X2ZpbGVzICR0cmVlMScKKworbWtkaXIgcGF0aDMKK2RhdGUgPnBhdGgzL2ZpbGUxCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMy9maWxlMScgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgzL2ZpbGUxJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3dyaXRpbmcgdHJlZSBvdXQgd2l0aCBnaXQgd3JpdGUtdHJlZScgXAorICAgICd0cmVlMj0kKGdpdCB3cml0ZS10cmVlKScKK3Rlc3RfZGVidWcgJ3Nob3dfZmlsZXMgJHRyZWUyJworCitybSAtZnIgcGF0aDMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdyZWFkIHByZXZpb3VzbHkgd3JpdHRlbiB0cmVlIGFuZCBjaGVja291dC4nIFwKKyAgICAnZ2l0IHJlYWQtdHJlZSAtbSAkdHJlZTEgJiYgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1hJwordGVzdF9kZWJ1ZyAnc2hvd19maWxlcyAkdHJlZTEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhZGQgYSBzeW1saW5rJyBcCisgICAgJ3Rlc3RfbG5fc19hZGQgcGF0aDIgcGF0aDMnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnd3JpdGluZyB0cmVlIG91dCB3aXRoIGdpdCB3cml0ZS10cmVlJyBcCisgICAgJ3RyZWUzPSQoZ2l0IHdyaXRlLXRyZWUpJwordGVzdF9kZWJ1ZyAnc2hvd19maWxlcyAkdHJlZTMnCisKKyMgTW9ydGVuIHNheXMgIkdvdCB0aGF0PyIgaGVyZS4KKyMgVGVzdCBiZWdpbnMuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdyZWFkIHByZXZpb3VzbHkgd3JpdHRlbiB0cmVlIGFuZCBjaGVja291dC4nIFwKKyAgICAnZ2l0IHJlYWQtdHJlZSAkdHJlZTIgJiYgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1hJwordGVzdF9kZWJ1ZyAnc2hvd19maWxlcyAkdHJlZTInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyBvdXQgY29uZmxpY3RpbmcgcGF0aCB3aXRoIC1mJyBcCisgICAgJ3Rlc3QgISAtaCBwYXRoMiAmJiB0ZXN0IC1kIHBhdGgyICYmCisgICAgIHRlc3QgISAtaCBwYXRoMyAmJiB0ZXN0IC1kIHBhdGgzICYmCisgICAgIHRlc3QgISAtaCBwYXRoMi9maWxlMCAmJiB0ZXN0IC1mIHBhdGgyL2ZpbGUwICYmCisgICAgIHRlc3QgISAtaCBwYXRoMy9maWxlMSAmJiB0ZXN0IC1mIHBhdGgzL2ZpbGUxJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMDItY2hlY2tvdXQtY2FjaGUtdS5zaCBiL3QvdDIwMDItY2hlY2tvdXQtY2FjaGUtdS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MDM2MWM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAwMi1jaGVja291dC1jYWNoZS11LnNoCkBAIC0wLDAgKzEsMzMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNoZWNrb3V0LWluZGV4IC11IHRlc3QuCisKK1dpdGggLXUgZmxhZywgZ2l0IGNoZWNrb3V0LWluZGV4IGludGVybmFsbHkgcnVucyB0aGUgZXF1aXZhbGVudCBvZgorZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggb24gdGhlIGNoZWNrZWQgb3V0IGVudHJ5LicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ3ByZXBhcmF0aW9uJyAnCitlY2hvIGZyb3R6ID5wYXRoMCAmJgorZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMCAmJgordD0kKGdpdCB3cml0ZS10cmVlKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisnd2l0aG91dCAtdSwgZ2l0IGNoZWNrb3V0LWluZGV4IHNtdWRnZXMgc3RhdCBpbmZvcm1hdGlvbi4nICcKK3JtIC1mIHBhdGgwICYmCitnaXQgcmVhZC10cmVlICR0ICYmCitnaXQgY2hlY2tvdXQtaW5kZXggLWYgLWEgJiYKK3Rlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyd3aXRoIC11LCBnaXQgY2hlY2tvdXQtaW5kZXggcGlja3MgdXAgc3RhdCBpbmZvcm1hdGlvbiBmcm9tIG5ldyBmaWxlcy4nICcKK3JtIC1mIHBhdGgwICYmCitnaXQgcmVhZC10cmVlICR0ICYmCitnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLWEgJiYKK2dpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMDMtY2hlY2tvdXQtY2FjaGUtbWtkaXIuc2ggYi90L3QyMDAzLWNoZWNrb3V0LWNhY2hlLW1rZGlyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmMTYzY2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDAzLWNoZWNrb3V0LWNhY2hlLW1rZGlyLnNoCkBAIC0wLDAgKzEsMTE5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dC1pbmRleCAtLXByZWZpeCB0ZXN0LgorCitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IC0tcHJlZml4IG9wdGlvbiB3b3JrcyBhcyBhZHZlcnRpc2VkLCBhbmQKK2Fsc28gdmVyaWZpZXMgdGhhdCBzdWNoIGxlYWRpbmcgcGF0aCBtYXkgY29udGFpbiBzeW1saW5rcywgdW5saWtlCit0aGUgR0lUIGNvbnRyb2xsZWQgcGF0aHMuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIHBhdGgxICYmCisJZWNobyBmcm90eiA+cGF0aDAgJiYKKwllY2hvIHJlenJvdiA+cGF0aDEvZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwIHBhdGgxL2ZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2hhdmUgc3ltbGluayBpbiBwbGFjZSB3aGVyZSBkaXIgaXMgZXhwZWN0ZWQuJyAnCisJcm0gLWZyIHBhdGgwIHBhdGgxICYmCisJbWtkaXIgcGF0aDIgJiYKKwlsbiAtcyBwYXRoMiBwYXRoMSAmJgorCWdpdCBjaGVja291dC1pbmRleCAtZiAtYSAmJgorCXRlc3QgISAtaCBwYXRoMSAmJiB0ZXN0IC1kIHBhdGgxICYmCisJdGVzdCAtZiBwYXRoMS9maWxlMSAmJiB0ZXN0ICEgLWYgcGF0aDIvZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIC0tcHJlZml4PXBhdGgyLycgJworCXJtIC1mciBwYXRoMCBwYXRoMSBwYXRoMiAmJgorCW1rZGlyIHBhdGgyICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PXBhdGgyLyAtZiAtYSAmJgorCXRlc3QgLWYgcGF0aDIvcGF0aDAgJiYKKwl0ZXN0IC1mIHBhdGgyL3BhdGgxL2ZpbGUxICYmCisJdGVzdCAhIC1mIHBhdGgwICYmCisJdGVzdCAhIC1mIHBhdGgxL2ZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAtLXByZWZpeD10bXAtJyAnCisJcm0gLWZyIHBhdGgwIHBhdGgxIHBhdGgyIHRtcCogJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLS1wcmVmaXg9dG1wLSAtZiAtYSAmJgorCXRlc3QgLWYgdG1wLXBhdGgwICYmCisJdGVzdCAtZiB0bXAtcGF0aDEvZmlsZTEgJiYKKwl0ZXN0ICEgLWYgcGF0aDAgJiYKKwl0ZXN0ICEgLWYgcGF0aDEvZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIC0tcHJlZml4PXRtcC0gYnV0IHdpdGggYSBjb25mbGljdGluZyBmaWxlIGFuZCBkaXInICcKKwlybSAtZnIgcGF0aDAgcGF0aDEgcGF0aDIgdG1wKiAmJgorCWVjaG8gbml0Zm9sID50bXAtcGF0aDEgJiYKKwlta2RpciB0bXAtcGF0aDAgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLS1wcmVmaXg9dG1wLSAtZiAtYSAmJgorCXRlc3QgLWYgdG1wLXBhdGgwICYmCisJdGVzdCAtZiB0bXAtcGF0aDEvZmlsZTEgJiYKKwl0ZXN0ICEgLWYgcGF0aDAgJiYKKwl0ZXN0ICEgLWYgcGF0aDEvZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAndXNlIC0tcHJlZml4PXRtcC9vcmFyeS8gd2hlcmUgdG1wIGlzIGEgc3ltbGluaycgJworCXJtIC1mciBwYXRoMCBwYXRoMSBwYXRoMiB0bXAqICYmCisJbWtkaXIgdG1wMSB0bXAxL29yYXJ5ICYmCisJbG4gLXMgdG1wMSB0bXAgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLS1wcmVmaXg9dG1wL29yYXJ5LyAtZiAtYSAmJgorCXRlc3QgLWQgdG1wMS9vcmFyeSAmJgorCXRlc3QgLWYgdG1wMS9vcmFyeS9wYXRoMCAmJgorCXRlc3QgLWYgdG1wMS9vcmFyeS9wYXRoMS9maWxlMSAmJgorCXRlc3QgLWggdG1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3VzZSAtLXByZWZpeD10bXAvb3JhcnktIHdoZXJlIHRtcCBpcyBhIHN5bWxpbmsnICcKKwlybSAtZnIgcGF0aDAgcGF0aDEgcGF0aDIgdG1wKiAmJgorCW1rZGlyIHRtcDEgJiYKKwlsbiAtcyB0bXAxIHRtcCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD10bXAvb3JhcnktIC1mIC1hICYmCisJdGVzdCAtZiB0bXAxL29yYXJ5LXBhdGgwICYmCisJdGVzdCAtZiB0bXAxL29yYXJ5LXBhdGgxL2ZpbGUxICYmCisJdGVzdCAtaCB0bXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAndXNlIC0tcHJlZml4PXRtcC0gd2hlcmUgdG1wLXBhdGgxIGlzIGEgc3ltbGluaycgJworCXJtIC1mciBwYXRoMCBwYXRoMSBwYXRoMiB0bXAqICYmCisJbWtkaXIgdG1wMSAmJgorCWxuIC1zIHRtcDEgdG1wLXBhdGgxICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PXRtcC0gLWYgLWEgJiYKKwl0ZXN0IC1mIHRtcC1wYXRoMCAmJgorCXRlc3QgISAtaCB0bXAtcGF0aDEgJiYKKwl0ZXN0IC1kIHRtcC1wYXRoMSAmJgorCXRlc3QgLWYgdG1wLXBhdGgxL2ZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGZpbHRlciBmcm9tIHdvcmtpbmcgdHJlZSAuZ2l0YXR0cmlidXRlcyB3aXRoIC0tcHJlZml4JyAnCisJcm0gLWZyIHBhdGgwIHBhdGgxIHBhdGgyIHRtcCogJiYKKwlta2RpciBwYXRoMSAmJgorCW1rZGlyIHRtcCAmJgorCWdpdCBjb25maWcgZmlsdGVyLnJlcGxhY2UtYWxsLnNtdWRnZSAic2VkIC1lIHMvLi8sL2ciICYmCisJZ2l0IGNvbmZpZyBmaWx0ZXIucmVwbGFjZS1hbGwuY2xlYW4gY2F0ICYmCisJZ2l0IGNvbmZpZyBmaWx0ZXIucmVwbGFjZS1hbGwucmVxdWlyZWQgdHJ1ZSAmJgorCWVjaG8gImZpbGUxIGZpbHRlcj1yZXBsYWNlLWFsbCIgPnBhdGgxLy5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PXRtcC8gLWYgLWEgJiYKKwllY2hvIGZyb3R6ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHRtcC9wYXRoMCAmJgorCWVjaG8gLCwsLCwsID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHRtcC9wYXRoMS9maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBDUkxGIGZpbHRlciBmcm9tIHdvcmtpbmcgdHJlZSAuZ2l0YXR0cmlidXRlcyB3aXRoIC0tcHJlZml4JyAnCisJcm0gLWZyIHBhdGgwIHBhdGgxIHBhdGgyIHRtcCogJiYKKwlta2RpciBwYXRoMSAmJgorCW1rZGlyIHRtcCAmJgorCWVjaG8gImZpbGUxIGVvbD1jcmxmIiA+cGF0aDEvLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLS1wcmVmaXg9dG1wLyAtZiAtYSAmJgorCWVjaG8gcmV6cm92USA+ZXhwZWN0ZWQgJiYKKwl0ciBcXDAxNSBRIDx0bXAvcGF0aDEvZmlsZTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMDQtY2hlY2tvdXQtY2FjaGUtdGVtcC5zaCBiL3QvdDIwMDQtY2hlY2tvdXQtY2FjaGUtdGVtcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMTJhZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAwNC1jaGVja291dC1jYWNoZS10ZW1wLnNoCkBAIC0wLDAgKzEsMjIxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IFNoYXduIFBlYXJjZQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2hlY2tvdXQtaW5kZXggLS10ZW1wIHRlc3QuCisKK1dpdGggLS10ZW1wIGZsYWcsIGdpdCBjaGVja291dC1pbmRleCB3cml0ZXMgdG8gdGVtcG9yYXJ5IG1lcmdlIGZpbGVzCityYXRoZXIgdGhhbiB0aGUgdHJhY2tlZCBwYXRoLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgYXN1YmRpciAmJgorCWVjaG8gdHJlZTFwYXRoMCA+cGF0aDAgJiYKKwllY2hvIHRyZWUxcGF0aDEgPnBhdGgxICYmCisJZWNobyB0cmVlMXBhdGgzID5wYXRoMyAmJgorCWVjaG8gdHJlZTFwYXRoNCA+cGF0aDQgJiYKKwllY2hvIHRyZWUxYXN1YmRpci9wYXRoNSA+YXN1YmRpci9wYXRoNSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDAgcGF0aDEgcGF0aDMgcGF0aDQgYXN1YmRpci9wYXRoNSAmJgorCXQxPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJcm0gLWYgcGF0aCogLm1lcmdlXyogYWN0dWFsIC5naXQvaW5kZXggJiYKKwllY2hvIHRyZWUycGF0aDAgPnBhdGgwICYmCisJZWNobyB0cmVlMnBhdGgxID5wYXRoMSAmJgorCWVjaG8gdHJlZTJwYXRoMiA+cGF0aDIgJiYKKwllY2hvIHRyZWUycGF0aDQgPnBhdGg0ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMCBwYXRoMSBwYXRoMiBwYXRoNCAmJgorCXQyPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJcm0gLWYgcGF0aCogLm1lcmdlXyogYWN0dWFsIC5naXQvaW5kZXggJiYKKwllY2hvIHRyZWUycGF0aDAgPnBhdGgwICYmCisJZWNobyB0cmVlM3BhdGgxID5wYXRoMSAmJgorCWVjaG8gdHJlZTNwYXRoMiA+cGF0aDIgJiYKKwllY2hvIHRyZWUzcGF0aDMgPnBhdGgzICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMCBwYXRoMSBwYXRoMiBwYXRoMyAmJgorCXQzPSQoZ2l0IHdyaXRlLXRyZWUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9uZSBzdGFnZSAwIHRvIHRlbXBvcmFyeSBmaWxlJyAnCisJcm0gLWYgcGF0aCogLm1lcmdlXyogYWN0dWFsIC5naXQvaW5kZXggJiYKKwlnaXQgcmVhZC10cmVlICR0MSAmJgorCWdpdCBjaGVja291dC1pbmRleCAtLXRlbXAgLS0gcGF0aDEgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCisJdGVzdCAkKGN1dCAiLWQJIiAtZjIgYWN0dWFsKSA9IHBhdGgxICYmCisJcD0kKGN1dCAiLWQJIiAtZjEgYWN0dWFsKSAmJgorCXRlc3QgLWYgJHAgJiYKKwl0ZXN0ICQoY2F0ICRwKSA9IHRyZWUxcGF0aDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgYWxsIHN0YWdlIDAgdG8gdGVtcG9yYXJ5IGZpbGVzJyAnCisJcm0gLWYgcGF0aCogLm1lcmdlXyogYWN0dWFsIC5naXQvaW5kZXggJiYKKwlnaXQgcmVhZC10cmVlICR0MSAmJgorCWdpdCBjaGVja291dC1pbmRleCAtYSAtLXRlbXAgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsICYmCisJZm9yIGYgaW4gcGF0aDAgcGF0aDEgcGF0aDMgcGF0aDQgYXN1YmRpci9wYXRoNQorCWRvCisJCXRlc3QgJChncmVwICRmIGFjdHVhbCB8IGN1dCAiLWQJIiAtZjIpID0gJGYgJiYKKwkJcD0kKGdyZXAgJGYgYWN0dWFsIHwgY3V0ICItZAkiIC1mMSkgJiYKKwkJdGVzdCAtZiAkcCAmJgorCQl0ZXN0ICQoY2F0ICRwKSA9IHRyZWUxJGYKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDMtd2F5IG1lcmdlJyAnCisJcm0gLWYgcGF0aCogLm1lcmdlXyogYWN0dWFsIC5naXQvaW5kZXggJiYKKwlnaXQgcmVhZC10cmVlIC1tICR0MSAkdDIgJHQzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9uZSBzdGFnZSAyIHRvIHRlbXBvcmFyeSBmaWxlJyAnCisJcm0gLWYgcGF0aCogLm1lcmdlXyogYWN0dWFsICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC0tc3RhZ2U9MiAtLXRlbXAgLS0gcGF0aDEgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCisJdGVzdCAkKGN1dCAiLWQJIiAtZjIgYWN0dWFsKSA9IHBhdGgxICYmCisJcD0kKGN1dCAiLWQJIiAtZjEgYWN0dWFsKSAmJgorCXRlc3QgLWYgJHAgJiYKKwl0ZXN0ICQoY2F0ICRwKSA9IHRyZWUycGF0aDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgYWxsIHN0YWdlIDIgdG8gdGVtcG9yYXJ5IGZpbGVzJyAnCisJcm0gLWYgcGF0aCogLm1lcmdlXyogYWN0dWFsICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC0tYWxsIC0tc3RhZ2U9MiAtLXRlbXAgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJZm9yIGYgaW4gcGF0aDEgcGF0aDIgcGF0aDQKKwlkbworCQl0ZXN0ICQoZ3JlcCAkZiBhY3R1YWwgfCBjdXQgIi1kCSIgLWYyKSA9ICRmICYmCisJCXA9JChncmVwICRmIGFjdHVhbCB8IGN1dCAiLWQJIiAtZjEpICYmCisJCXRlc3QgLWYgJHAgJiYKKwkJdGVzdCAkKGNhdCAkcCkgPSB0cmVlMiRmCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBhbGwgc3RhZ2VzL29uZSBmaWxlIHRvIG5vdGhpbmcnICcKKwlybSAtZiBwYXRoKiAubWVyZ2VfKiBhY3R1YWwgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLS1zdGFnZT1hbGwgLS10ZW1wIC0tIHBhdGgwID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBhbGwgc3RhZ2VzL29uZSBmaWxlIHRvIHRlbXBvcmFyeSBmaWxlcycgJworCXJtIC1mIHBhdGgqIC5tZXJnZV8qIGFjdHVhbCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtLXN0YWdlPWFsbCAtLXRlbXAgLS0gcGF0aDEgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCisJdGVzdCAkKGN1dCAiLWQJIiAtZjIgYWN0dWFsKSA9IHBhdGgxICYmCisJY3V0ICItZAkiIC1mMSBhY3R1YWwgfCAocmVhZCBzMSBzMiBzMyAmJgorCXRlc3QgLWYgJHMxICYmCisJdGVzdCAtZiAkczIgJiYKKwl0ZXN0IC1mICRzMyAmJgorCXRlc3QgJChjYXQgJHMxKSA9IHRyZWUxcGF0aDEgJiYKKwl0ZXN0ICQoY2F0ICRzMikgPSB0cmVlMnBhdGgxICYmCisJdGVzdCAkKGNhdCAkczMpID0gdHJlZTNwYXRoMSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgc29tZSBzdGFnZXMvb25lIGZpbGUgdG8gdGVtcG9yYXJ5IGZpbGVzJyAnCisJcm0gLWYgcGF0aCogLm1lcmdlXyogYWN0dWFsICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC0tc3RhZ2U9YWxsIC0tdGVtcCAtLSBwYXRoMiA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKKwl0ZXN0ICQoY3V0ICItZAkiIC1mMiBhY3R1YWwpID0gcGF0aDIgJiYKKwljdXQgIi1kCSIgLWYxIGFjdHVhbCB8IChyZWFkIHMxIHMyIHMzICYmCisJdGVzdCAkczEgPSAuICYmCisJdGVzdCAtZiAkczIgJiYKKwl0ZXN0IC1mICRzMyAmJgorCXRlc3QgJChjYXQgJHMyKSA9IHRyZWUycGF0aDIgJiYKKwl0ZXN0ICQoY2F0ICRzMykgPSB0cmVlM3BhdGgyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBhbGwgc3RhZ2VzL2FsbCBmaWxlcyB0byB0ZW1wb3JhcnkgZmlsZXMnICcKKwlybSAtZiBwYXRoKiAubWVyZ2VfKiBhY3R1YWwgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLWEgLS1zdGFnZT1hbGwgLS10ZW1wID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLSBwYXRoMDogbm8gZW50cnknICcKKwl0ZXN0IHgkKGdyZXAgcGF0aDAgYWN0dWFsIHwgY3V0ICItZAkiIC1mMikgPSB4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tIHBhdGgxOiBhbGwgMyBzdGFnZXMnICcKKwl0ZXN0ICQoZ3JlcCBwYXRoMSBhY3R1YWwgfCBjdXQgIi1kCSIgLWYyKSA9IHBhdGgxICYmCisJZ3JlcCBwYXRoMSBhY3R1YWwgfCBjdXQgIi1kCSIgLWYxIHwgKHJlYWQgczEgczIgczMgJiYKKwl0ZXN0IC1mICRzMSAmJgorCXRlc3QgLWYgJHMyICYmCisJdGVzdCAtZiAkczMgJiYKKwl0ZXN0ICQoY2F0ICRzMSkgPSB0cmVlMXBhdGgxICYmCisJdGVzdCAkKGNhdCAkczIpID0gdHJlZTJwYXRoMSAmJgorCXRlc3QgJChjYXQgJHMzKSA9IHRyZWUzcGF0aDEpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tIHBhdGgyOiBubyBzdGFnZSAxLCBoYXZlIHN0YWdlIDIgYW5kIDMnICcKKwl0ZXN0ICQoZ3JlcCBwYXRoMiBhY3R1YWwgfCBjdXQgIi1kCSIgLWYyKSA9IHBhdGgyICYmCisJZ3JlcCBwYXRoMiBhY3R1YWwgfCBjdXQgIi1kCSIgLWYxIHwgKHJlYWQgczEgczIgczMgJiYKKwl0ZXN0ICRzMSA9IC4gJiYKKwl0ZXN0IC1mICRzMiAmJgorCXRlc3QgLWYgJHMzICYmCisJdGVzdCAkKGNhdCAkczIpID0gdHJlZTJwYXRoMiAmJgorCXRlc3QgJChjYXQgJHMzKSA9IHRyZWUzcGF0aDIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tIHBhdGgzOiBubyBzdGFnZSAyLCBoYXZlIHN0YWdlIDEgYW5kIDMnICcKKwl0ZXN0ICQoZ3JlcCBwYXRoMyBhY3R1YWwgfCBjdXQgIi1kCSIgLWYyKSA9IHBhdGgzICYmCisJZ3JlcCBwYXRoMyBhY3R1YWwgfCBjdXQgIi1kCSIgLWYxIHwgKHJlYWQgczEgczIgczMgJiYKKwl0ZXN0IC1mICRzMSAmJgorCXRlc3QgJHMyID0gLiAmJgorCXRlc3QgLWYgJHMzICYmCisJdGVzdCAkKGNhdCAkczEpID0gdHJlZTFwYXRoMyAmJgorCXRlc3QgJChjYXQgJHMzKSA9IHRyZWUzcGF0aDMpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tIHBhdGg0OiBubyBzdGFnZSAzLCBoYXZlIHN0YWdlIDEgYW5kIDMnICcKKwl0ZXN0ICQoZ3JlcCBwYXRoNCBhY3R1YWwgfCBjdXQgIi1kCSIgLWYyKSA9IHBhdGg0ICYmCisJZ3JlcCBwYXRoNCBhY3R1YWwgfCBjdXQgIi1kCSIgLWYxIHwgKHJlYWQgczEgczIgczMgJiYKKwl0ZXN0IC1mICRzMSAmJgorCXRlc3QgLWYgJHMyICYmCisJdGVzdCAkczMgPSAuICYmCisJdGVzdCAkKGNhdCAkczEpID0gdHJlZTFwYXRoNCAmJgorCXRlc3QgJChjYXQgJHMyKSA9IHRyZWUycGF0aDQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tIGFzdWJkaXIvcGF0aDU6IG5vIHN0YWdlIDIgYW5kIDMgaGF2ZSBzdGFnZSAxJyAnCisJdGVzdCAkKGdyZXAgYXN1YmRpci9wYXRoNSBhY3R1YWwgfCBjdXQgIi1kCSIgLWYyKSA9IGFzdWJkaXIvcGF0aDUgJiYKKwlncmVwIGFzdWJkaXIvcGF0aDUgYWN0dWFsIHwgY3V0ICItZAkiIC1mMSB8IChyZWFkIHMxIHMyIHMzICYmCisJdGVzdCAtZiAkczEgJiYKKwl0ZXN0ICRzMiA9IC4gJiYKKwl0ZXN0ICRzMyA9IC4gJiYKKwl0ZXN0ICQoY2F0ICRzMSkgPSB0cmVlMWFzdWJkaXIvcGF0aDUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tdGVtcCB3aXRoaW4gc3ViZGlyJyAnCisJKAorCQljZCBhc3ViZGlyICYmCisJCWdpdCBjaGVja291dC1pbmRleCAtYSAtLXN0YWdlPWFsbCA+YWN0dWFsICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCisJCXRlc3QgJChncmVwIHBhdGg1IGFjdHVhbCB8IGN1dCAiLWQJIiAtZjIpID0gcGF0aDUgJiYKKwkJZ3JlcCBwYXRoNSBhY3R1YWwgfCBjdXQgIi1kCSIgLWYxIHwgKHJlYWQgczEgczIgczMgJiYKKwkJdGVzdCAtZiAuLi8kczEgJiYKKwkJdGVzdCAkczIgPSAuICYmCisJCXRlc3QgJHMzID0gLiAmJgorCQl0ZXN0ICQoY2F0IC4uLyRzMSkgPSB0cmVlMWFzdWJkaXIvcGF0aDUpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLXRlbXAgc3ltbGluaycgJworCXJtIC1mIHBhdGgqIC5tZXJnZV8qIGFjdHVhbCAuZ2l0L2luZGV4ICYmCisJdGVzdF9sbl9zX2FkZCBwYXRoNyBwYXRoNiAmJgorCWdpdCBjaGVja291dC1pbmRleCAtLXRlbXAgLWEgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCisJdGVzdCAkKGN1dCAiLWQJIiAtZjIgYWN0dWFsKSA9IHBhdGg2ICYmCisJcD0kKGN1dCAiLWQJIiAtZjEgYWN0dWFsKSAmJgorCXRlc3QgLWYgJHAgJiYKKwl0ZXN0ICQoY2F0ICRwKSA9IHBhdGg3CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtaXQgd2VsbC1mb3JtZWQgcmVsYXRpdmUgcGF0aCcgJworCXJtIC1mIHBhdGgqIC5tZXJnZV8qIGFjdHVhbCAuZ2l0L2luZGV4ICYmCisJPnBhdGgwMTIzNDU2Nzg5ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMDEyMzQ1Njc4OSAmJgorCSgKKwkJY2QgYXN1YmRpciAmJgorCQlnaXQgY2hlY2tvdXQtaW5kZXggLS10ZW1wIC0tIC4uL3BhdGgwMTIzNDU2Nzg5ID5hY3R1YWwgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKKwkJdGVzdCAkKGN1dCAiLWQJIiAtZjIgYWN0dWFsKSA9IC4uL3BhdGgwMTIzNDU2Nzg5CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMDUtY2hlY2tvdXQtaW5kZXgtc3ltbGlua3Muc2ggYi90L3QyMDA1LWNoZWNrb3V0LWluZGV4LXN5bWxpbmtzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlmYTU2MTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDA1LWNoZWNrb3V0LWluZGV4LXN5bWxpbmtzLnNoCkBAIC0wLDAgKzEsMjggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgU2l4dAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2hlY2tvdXQtaW5kZXggb24gZmlsZXN5c3RlbSB3L28gc3ltbGlua3MgdGVzdC4KKworVGhpcyB0ZXN0cyB0aGF0IGdpdCBjaGVja291dC1pbmRleCBjcmVhdGVzIGEgc3ltYm9saWMgbGluayBhcyBhIHBsYWluCitmaWxlIGlmIGNvcmUuc3ltbGlua3MgaXMgZmFsc2UuJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisncHJlcGFyYXRpb24nICcKK2dpdCBjb25maWcgY29yZS5zeW1saW5rcyBmYWxzZSAmJgorbD0kKHByaW50ZiBmaWxlIHwgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgLS1zdGRpbikgJiYKK2VjaG8gIjEyMDAwMCAkbAlzeW1saW5rIiB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyd0aGUgY2hlY2tlZC1vdXQgc3ltbGluayBtdXN0IGJlIGEgZmlsZScgJworZ2l0IGNoZWNrb3V0LWluZGV4IHN5bWxpbmsgJiYKK3Rlc3QgLWYgc3ltbGluaycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisndGhlIGZpbGUgbXVzdCBiZSB0aGUgYmxvYiB3ZSBhZGRlZCBkdXJpbmcgdGhlIHNldHVwJyAnCit0ZXN0ICIkKGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIHN5bWxpbmspIiA9ICRsJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMDYtY2hlY2tvdXQtaW5kZXgtYmFzaWMuc2ggYi90L3QyMDA2LWNoZWNrb3V0LWluZGV4LWJhc2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU3Y2JkZmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDA2LWNoZWNrb3V0LWluZGV4LWJhc2ljLnNoCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyBjaGVja291dC1pbmRleCB0ZXN0cworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQtaW5kZXggLS1nb2JibGVkZWdvb2snICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgY2hlY2tvdXQtaW5kZXggLS1nb2JibGVkZWdvb2sgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0LWluZGV4IC1oIGluIGJyb2tlbiByZXBvc2l0b3J5JyAnCisJbWtkaXIgYnJva2VuICYmCisJKAorCQljZCBicm9rZW4gJiYKKwkJZ2l0IGluaXQgJiYKKwkJPi5naXQvaW5kZXggJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IGNoZWNrb3V0LWluZGV4IC1oID51c2FnZSAyPiYxCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlIiBicm9rZW4vdXNhZ2UKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDA3LWNoZWNrb3V0LXN5bWxpbmsuc2ggYi90L3QyMDA3LWNoZWNrb3V0LXN5bWxpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmM5YWFkNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMDctY2hlY2tvdXQtc3ltbGluay5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEp1bmlvIEMgSGFtYW5vCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dCB0byBzd2l0Y2ggYmV0d2VlbiBicmFuY2hlcyB3aXRoIHN5bWxpbms8LT5kaXInCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCW1rZGlyIGZyb3R6ICYmCisJZWNobyBoZWxsbyA+ZnJvdHovZmlsZnJlICYmCisJZ2l0IGFkZCBmcm90ei9maWxmcmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJtYXN0ZXIgaGFzIGZpbGUgZnJvdHovZmlsZnJlIiAmJgorCisJZ2l0IGJyYW5jaCBzaWRlICYmCisKKwllY2hvIGdvb2RieWUgPm5pdGZvbCAmJgorCWdpdCBhZGQgbml0Zm9sICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAibWFzdGVyIGFkZHMgZmlsZSBuaXRmb2wiICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCisJZ2l0IHJtIC0tY2FjaGVkIGZyb3R6L2ZpbGZyZSAmJgorCW12IGZyb3R6IHh5enp5ICYmCisJdGVzdF9sbl9zX2FkZCB4eXp6eSBmcm90eiAmJgorCWdpdCBhZGQgeHl6enkvZmlsZnJlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic2lkZSBtb3ZlcyBmcm90ei8gdG8geHl6enkvIGFuZCBhZGRzIGZyb3R6LT54eXp6eS8iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIGZyb20gc3ltbGluayB0byBkaXInICcKKworCWdpdCBjaGVja291dCBtYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZW1vdmUgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzICYgc3dpdGNoIHRvIG1hc3RlcicgJworCXJtIC1mciBmcm90eiB4eXp6eSBuaXRmb2wgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCBmcm9tIGRpciB0byBzeW1saW5rJyAnCisKKwlnaXQgY2hlY2tvdXQgc2lkZQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAwOC1jaGVja291dC1zdWJkaXIuc2ggYi90L3QyMDA4LWNoZWNrb3V0LXN1YmRpci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYWRiOTQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAwOC1jaGVja291dC1zdWJkaXIuc2gKQEAgLTAsMCArMSw4MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBEYXZpZCBTeW1vbmRzCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dCBmcm9tIHN1YmRpcmVjdG9yaWVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwllY2hvICJiYXNlIiA+IGZpbGUwICYmCisJZ2l0IGFkZCBmaWxlMCAmJgorCW1rZGlyIGRpcjEgJiYKKwllY2hvICJoZWxsbyIgPiBkaXIxL2ZpbGUxICYmCisJZ2l0IGFkZCBkaXIxL2ZpbGUxICYmCisJbWtkaXIgZGlyMiAmJgorCWVjaG8gImJvbmpvdXIiID4gZGlyMi9maWxlMiAmJgorCWdpdCBhZGQgZGlyMi9maWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInBvcHVsYXRlIHRyZWUiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIGFuZCByZXN0b3JlIHdpdGggcmVsYXRpdmUgcGF0aCcgJworCisJKAorCQljZCBkaXIxICYmCisJCXJtIC4uL2ZpbGUwICYmCisJCWdpdCBjaGVja291dCBIRUFEIC0tIC4uL2ZpbGUwICYmCisJCXRlc3QgImJhc2UiID0gIiQoY2F0IC4uL2ZpbGUwKSIgJiYKKwkJcm0gLi4vZGlyMi9maWxlMiAmJgorCQlnaXQgY2hlY2tvdXQgSEVBRCAtLSAuLi9kaXIyL2ZpbGUyICYmCisJCXRlc3QgImJvbmpvdXIiID0gIiQoY2F0IC4uL2RpcjIvZmlsZTIpIiAmJgorCQlybSAuLi9maWxlMCAuL2ZpbGUxICYmCisJCWdpdCBjaGVja291dCBIRUFEIC0tIC4uICYmCisJCXRlc3QgImJhc2UiID0gIiQoY2F0IC4uL2ZpbGUwKSIgJiYKKwkJdGVzdCAiaGVsbG8iID0gIiQoY2F0IGZpbGUxKSIKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2l0aCBlbXB0eSBwcmVmaXgnICcKKworCXJtIGZpbGUwICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gZmlsZTAgJiYKKwl0ZXN0ICJiYXNlIiA9ICIkKGNhdCBmaWxlMCkiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2l0aCBzaW1wbGUgcHJlZml4JyAnCisKKwlybSBkaXIxL2ZpbGUxICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gZGlyMSAmJgorCXRlc3QgImhlbGxvIiA9ICIkKGNhdCBkaXIxL2ZpbGUxKSIgJiYKKwlybSBkaXIxL2ZpbGUxICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gZGlyMS9maWxlMSAmJgorCXRlc3QgImhlbGxvIiA9ICIkKGNhdCBkaXIxL2ZpbGUxKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGNvbXBsZXggcmVsYXRpdmUgcGF0aCcgJworCSgKKwkJY2QgZGlyMSAmJgorCQlybSBmaWxlMSAmJgorCQlnaXQgY2hlY2tvdXQgSEVBRCAtLSAuLi9kaXIxLy4uL2RpcjEvZmlsZTEgJiYKKwkJdGVzdCAiaGVsbG8iID0gIiQoY2F0IGZpbGUxKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbGF0aXZlIHBhdGggb3V0c2lkZSB0cmVlIHNob3VsZCBmYWlsJyBcCisJJ3Rlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBIRUFEIC0tIC4uLy4uL01ha2VmaWxlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNvcnJlY3QgcmVsYXRpdmUgcGF0aCB0byBmaWxlIHNob3VsZCBmYWlsICgxKScgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgSEVBRCAtLSAuLi9maWxlMCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IHJlbGF0aXZlIHBhdGggc2hvdWxkIGZhaWwgKDIpJyBcCisJJyggY2QgZGlyMSAmJiB0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgSEVBRCAtLSAuL2ZpbGUwICknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCByZWxhdGl2ZSBwYXRoIHNob3VsZCBmYWlsICgzKScgXAorCScoIGNkIGRpcjEgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IEhFQUQgLS0gLi4vLi4vZmlsZTAgKScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDA5LWNoZWNrb3V0LXN0YXRpbmZvLnNoIGIvdC90MjAwOS1jaGVja291dC1zdGF0aW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mM2MyMTUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAwOS1jaGVja291dC1zdGF0aW5mby5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgc2hvdWxkIGxlYXZlIGNsZWFuIHN0YXQgaW5mbycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwllY2hvIGhlbGxvID53b3JsZCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgd29ybGQgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwllY2hvIGdvb2RieWUgPndvcmxkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB3b3JsZCAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIHN3aXRjaGluZycgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3QgIiQoZ2l0IGRpZmYtZmlsZXMgLS1yYXcpIiA9ICIiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLXJhdykiID0gIiIgJiYKKworCWdpdCBjaGVja291dCBzaWRlICYmCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLXJhdykiID0gIiIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0ICIkKGdpdCBkaWZmLWZpbGVzIC0tcmF3KSIgPSAiIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGggY2hlY2tvdXQnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0ICIkKGdpdCBkaWZmLWZpbGVzIC0tcmF3KSIgPSAiIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciB3b3JsZCAmJgorCXRlc3QgIiQoZ2l0IGRpZmYtZmlsZXMgLS1yYXcpIiA9ICIiICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSB3b3JsZCAmJgorCXRlc3QgIiQoZ2l0IGRpZmYtZmlsZXMgLS1yYXcpIiA9ICIiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyIHdvcmxkICYmCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLXJhdykiID0gIiIKKworJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90MjAxMC1jaGVja291dC1hbWJpZ3VvdXMuc2ggYi90L3QyMDEwLWNoZWNrb3V0LWFtYmlndW91cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZTQ3ZmUwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAxMC1jaGVja291dC1hbWJpZ3VvdXMuc2gKQEAgLTAsMCArMSw2NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0IGFuZCBwYXRoc3BlY3MvcmVmc3BlY3MgYW1iaWd1aXRpZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gaGVsbG8gPndvcmxkICYmCisJZWNobyBoZWxsbyA+YWxsICYmCisJZ2l0IGFkZCBhbGwgd29ybGQgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHdvcmxkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmVyZW5jZSBtdXN0IGJlIGEgdHJlZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAkKGdpdCBoYXNoLW9iamVjdCAuL2FsbCkgLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIHN3aXRjaGluZycgJworCXRlc3QgInJlZnMvaGVhZHMvbWFzdGVyIiA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiICYmCisJZ2l0IGNoZWNrb3V0IHdvcmxkIC0tICYmCisJdGVzdCAicmVmcy9oZWFkcy93b3JsZCIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3b3JsZCBmcm9tIHRoZSBpbmRleCcgJworCWVjaG8gYnllID4gd29ybGQgJiYKKwlnaXQgY2hlY2tvdXQgLS0gd29ybGQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAtLXF1aWV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbiBhbWJpZ3VvdXMgY2FsbCcgJworCWdpdCBjaGVja291dCBhbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgdGhlIG1vc3QgY29tbW9uIGNhc2UnICcKKwlnaXQgY2hlY2tvdXQgd29ybGQgJiYKKwl0ZXN0ICJyZWZzL2hlYWRzL3dvcmxkIiA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGFtYmlndWl0eScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCB3b3JsZCBhbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgYW1iaWd1aXR5IGluIHN1YmRpcicgJworCW1rZGlyIHN1YiAmJgorCSMgbm90IGFtYmlndW91cyBiZWNhdXNlIHN1Yi93b3JsZCBkb2VzIG5vdCBleGlzdAorCWdpdCAtQyBzdWIgY2hlY2tvdXQgd29ybGQgLi4vYWxsICYmCisJZWNobyBoZWxsbyA+c3ViL3dvcmxkICYmCisJIyBhbWJpZ3VvdXMgYmVjYXVzZSBzdWIvd29ybGQgZG9lcyBleGlzdAorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdWIgY2hlY2tvdXQgd29ybGQgLi4vYWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0ZSBjaGVja2luZyBvdXQgZnJvbSBhIHRyZWUtaXNoJyAnCisJZWNobyBieWUgPiB3b3JsZCAmJgorCWdpdCBjaGVja291dCB3b3JsZCAtLSB3b3JsZCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIC0tcXVpZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWNjdXJhdGUgZXJyb3IgbWVzc2FnZSB3aXRoIG1vcmUgdGhhbiBvbmUgcmVmJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IEhFQUQgbWFzdGVyIC0tIDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAyIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIm9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsIDIgZ2l2ZW4iIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMTEtY2hlY2tvdXQtaW52YWxpZC1oZWFkLnNoIGIvdC90MjAxMS1jaGVja291dC1pbnZhbGlkLWhlYWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGU4ZDU2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMTEtY2hlY2tvdXQtaW52YWxpZC1oZWFkLnNoCkBAIC0wLDAgKzEsNjEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCBzd2l0Y2hpbmcgYXdheSBmcm9tIGFuIGludmFsaWQgYnJhbmNoJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGhlbGxvID53b3JsZCAmJgorCWdpdCBhZGQgd29ybGQgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgc2hvdWxkIG5vdCBzdGFydCBicmFuY2ggZnJvbSBhIHRyZWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLWIgbmV3YnJhbmNoIG1hc3Rlcl57dHJlZX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgbWFzdGVyIGZyb20gaW52YWxpZCBIRUFEJyAnCisJZWNobyAkWkVST19PSUQgPi5naXQvSEVBRCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgbm90aWNlcyBmYWlsdXJlIHRvIGxvY2sgSEVBRCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9IRUFELmxvY2siICYmCisJPi5naXQvSEVBRC5sb2NrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC1iIG90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSByZWYgZGlyZWN0b3J5L2ZpbGUgY29uZmxpY3Qgc2NlbmFyaW8nICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL291dGVyL2lubmVyIG1hc3RlciAmJgorCisJIyBkbyBub3QgcmVseSBvbiBzeW1ib2xpYy1yZWYgdG8gZ2V0IGEga25vd24gc3RhdGUsCisJIyBhcyBpdCBtYXkgdXNlIHRoZSBzYW1lIGNvZGUgd2UgYXJlIHRlc3RpbmcKKwlyZXNldF90b19kZiAoKSB7CisJCWVjaG8gInJlZjogcmVmcy9oZWFkcy9vdXRlciIgPi5naXQvSEVBRAorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgYXdheSBmcm9tIGQvZiBIRUFEICh1bnBhY2tlZCwgdG8gYnJhbmNoKScgJworCXJlc2V0X3RvX2RmICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBhd2F5IGZyb20gZC9mIEhFQUQgKHVucGFja2VkLCB0byBkZXRhY2hlZCknICcKKwlyZXNldF90b19kZiAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayByZWZzJyAnCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGF3YXkgZnJvbSBkL2YgSEVBRCAocGFja2VkLCB0byBicmFuY2gpJyAnCisJcmVzZXRfdG9fZGYgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGF3YXkgZnJvbSBkL2YgSEVBRCAocGFja2VkLCB0byBkZXRhY2hlZCknICcKKwlyZXNldF90b19kZiAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCBtYXN0ZXIKKycKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAxMi1jaGVja291dC1sYXN0LnNoIGIvdC90MjAxMi1jaGVja291dC1sYXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3YmE4YzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDEyLWNoZWNrb3V0LWxhc3Quc2gKQEAgLTAsMCArMSwxNTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCBjYW4gc3dpdGNoIHRvIGxhc3QgYnJhbmNoIGFuZCBtZXJnZSBiYXNlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGhlbGxvID53b3JsZCAmJgorCWdpdCBhZGQgd29ybGQgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIG90aGVyICYmCisJZWNobyAiaGVsbG8gYWdhaW4iID4+d29ybGQgJiYKKwlnaXQgYWRkIHdvcmxkICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IC0iIGRvZXMgbm90IHdvcmsgaW5pdGlhbGx5JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlyc3QgYnJhbmNoIHN3aXRjaCcgJworCWdpdCBjaGVja291dCBvdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgLSIgc3dpdGNoZXMgYmFjaycgJworCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvbWFzdGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgLSIgc3dpdGNoZXMgZm9ydGgnICcKKwlnaXQgY2hlY2tvdXQgLSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL290aGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRhY2ggSEVBRCcgJworCWdpdCBjaGVja291dCAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IC0iIGF0dGFjaGVzIGFnYWluJyAnCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJ6cmVmcy9oZWFkcy9vdGhlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IC0iIGRldGFjaGVzIGFnYWluJyAnCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwl0ZXN0ICJ6JChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICJ6JChnaXQgcmV2LXBhcnNlIG90aGVyKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9yZSBzd2l0Y2hlcycgJworCWZvciBpIGluIDE2IDE1IDE0IDEzIDEyIDExIDEwIDkgOCA3IDYgNSA0IDMgMiAxCisJZG8KKwkJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCRpCisJZG9uZQorJworCittb3JlX3N3aXRjaGVzICgpIHsKKwlmb3IgaSBpbiAxNiAxNSAxNCAxMyAxMiAxMSAxMCA5IDggNyA2IDUgNCAzIDIgMQorCWRvCisJCWdpdCBjaGVja291dCBicmFuY2gkaQorCWRvbmUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIHRvIHRoZSBsYXN0JyAnCisJbW9yZV9zd2l0Y2hlcyAmJgorCWdpdCBjaGVja291dCBAey0xfSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL2JyYW5jaDIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCB0byBzZWNvbmQgZnJvbSB0aGUgbGFzdCcgJworCW1vcmVfc3dpdGNoZXMgJiYKKwlnaXQgY2hlY2tvdXQgQHstMn0gJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJ6cmVmcy9oZWFkcy9icmFuY2gzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggdG8gdGhpcmQgZnJvbSB0aGUgbGFzdCcgJworCW1vcmVfc3dpdGNoZXMgJiYKKwlnaXQgY2hlY2tvdXQgQHstM30gJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJ6cmVmcy9oZWFkcy9icmFuY2g0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggdG8gZm91cnRoIGZyb20gdGhlIGxhc3QnICcKKwltb3JlX3N3aXRjaGVzICYmCisJZ2l0IGNoZWNrb3V0IEB7LTR9ICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvYnJhbmNoNSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIHRvIHR3ZWxmdGggZnJvbSB0aGUgbGFzdCcgJworCW1vcmVfc3dpdGNoZXMgJiYKKwlnaXQgY2hlY2tvdXQgQHstMTJ9ICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvYnJhbmNoMTMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGJhc2UgdGVzdCBzZXR1cCcgJworCWdpdCBjaGVja291dCAtYiBhbm90aGVyIG90aGVyICYmCisJZWNobyAiaGVsbG8gYWdhaW4iID4+d29ybGQgJiYKKwlnaXQgYWRkIHdvcmxkICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbm90aGVyLi4ubWFzdGVyJyAnCisJZ2l0IGNoZWNrb3V0IGFub3RoZXIgJiYKKwlnaXQgY2hlY2tvdXQgYW5vdGhlci4uLm1hc3RlciAmJgorCXRlc3QgInokKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiID0gInokKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyXikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uLm1hc3RlcicgJworCWdpdCBjaGVja291dCBhbm90aGVyICYmCisJZ2l0IGNoZWNrb3V0IC4uLm1hc3RlciAmJgorCXRlc3QgInokKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiID0gInokKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyXikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hc3Rlci4uLicgJworCWdpdCBjaGVja291dCBhbm90aGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlci4uLiAmJgorCXRlc3QgInokKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiID0gInokKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyXikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJjaGVja291dCAtIiB3b3JrcyBhZnRlciBhIHJlYmFzZSBBJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCBvdGhlciAmJgorCWdpdCByZWJhc2UgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJ6cmVmcy9oZWFkcy9tYXN0ZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJjaGVja291dCAtIiB3b3JrcyBhZnRlciBhIHJlYmFzZSBBIEInICcKKwlnaXQgYnJhbmNoIG1vb2RsZSBtYXN0ZXJ+MSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwlnaXQgcmViYXNlIG1hc3RlciBtb29kbGUgJiYKKwlnaXQgY2hlY2tvdXQgLSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL21hc3RlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IC0iIHdvcmtzIGFmdGVyIGEgcmViYXNlIC1pIEEnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyICYmCisJZ2l0IHJlYmFzZSAtaSBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL21hc3RlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IC0iIHdvcmtzIGFmdGVyIGEgcmViYXNlIC1pIEEgQicgJworCWdpdCBicmFuY2ggZm9vZGxlIG1hc3Rlcn4xICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCBvdGhlciAmJgorCWdpdCByZWJhc2UgbWFzdGVyIGZvb2RsZSAmJgorCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvbWFzdGVyIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMTMtY2hlY2tvdXQtc3VibW9kdWxlLnNoIGIvdC90MjAxMy1jaGVja291dC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGY4NmI1ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMTMtY2hlY2tvdXQtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsNzUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCBjYW4gaGFuZGxlIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItc3VibW9kdWxlLXVwZGF0ZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIHN1Ym1vZHVsZSAmJgorCShjZCBzdWJtb2R1bGUgJiYKKwkgZ2l0IGluaXQgJiYKKwkgdGVzdF9jb21taXQgZmlyc3QpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHN1cGVycHJvamVjdCAmJgorCShjZCBzdWJtb2R1bGUgJiYKKwkgdGVzdF9jb21taXQgc2Vjb25kKSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB1cGRhdGVkLnN1cGVycHJvamVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcicmVzZXQgPHN1Ym1vZHVsZT4iIHVwZGF0ZXMgdGhlIGluZGV4JyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEICYmCisJZ2l0IHJlc2V0IEhFQUReIHN1Ym1vZHVsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgcmVzZXQgc3VibW9kdWxlICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgPHN1Ym1vZHVsZT4iIHVwZGF0ZXMgdGhlIGluZGV4IG9ubHknICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gc3VibW9kdWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCBjaGVja291dCBIRUFEIHN1Ym1vZHVsZSAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IDxzdWJtb2R1bGU+IiBob25vcnMgZGlmZi5pZ25vcmVTdWJtb2R1bGVzJyAnCisJZ2l0IGNvbmZpZyBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMgZGlydHkgJiYKKwllY2hvIHg+IHN1Ym1vZHVsZS91bnRyYWNrZWQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCA+YWN0dWFsIDI+JjEgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJjaGVja291dCA8c3VibW9kdWxlPiIgaG9ub3JzIHN1Ym1vZHVsZS4qLmlnbm9yZSBmcm9tIC5naXRtb2R1bGVzJyAnCisJZ2l0IGNvbmZpZyBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMgbm9uZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZS5wYXRoIHN1Ym1vZHVsZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZS5pZ25vcmUgdW50cmFja2VkICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgPmFjdHVhbCAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgPHN1Ym1vZHVsZT4iIGhvbm9ycyBzdWJtb2R1bGUuKi5pZ25vcmUgZnJvbSAuZ2l0L2NvbmZpZycgJworCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS5wYXRoIHN1Ym1vZHVsZSAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS5pZ25vcmUgYWxsICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgPmFjdHVhbCAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCitLTk9XTl9GQUlMVVJFX0RJUkVDVE9SWV9TVUJNT0RVTEVfQ09ORkxJQ1RTPTEKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaF9yZWN1cnNpbmdfd2l0aF9hcmdzICJjaGVja291dCIKKwordGVzdF9zdWJtb2R1bGVfZm9yY2VkX3N3aXRjaF9yZWN1cnNpbmdfd2l0aF9hcmdzICJjaGVja291dCAtZiIKKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXQgY2hlY2tvdXQiCisKK3Rlc3Rfc3VibW9kdWxlX2ZvcmNlZF9zd2l0Y2ggImdpdCBjaGVja291dCAtZiIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDE0LWNoZWNrb3V0LXN3aXRjaC5zaCBiL3QvdDIwMTQtY2hlY2tvdXQtc3dpdGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjZmIxNDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDE0LWNoZWNrb3V0LXN3aXRjaC5zaApAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nUGV0ZXIgTWFjTWlsbGFuJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gSGVsbG8gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIFYxICYmCisJZWNobyBIZWxsbyB3b3JsZCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjaGVja291dCAtYiBvdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBhbGwgY2hhbmdlcyBhcmUgc3RhZ2VkJyAnCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2Vjb25kIGNvbW1pdCcgJworCWdpdCBjb21taXQgLW0gVjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2snICcKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLWV4aXQtY29kZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMTUtY2hlY2tvdXQtdW5ib3JuLnNoIGIvdC90MjAxNS1jaGVja291dC11bmJvcm4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzdiZGNlZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMTUtY2hlY2tvdXQtdW5ib3JuLnNoCkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCBmcm9tIHVuYm9ybiBicmFuY2gnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBwYXJlbnQgJiYKKwkoY2QgcGFyZW50ICYmCisJIGdpdCBpbml0ICYmCisJIGVjaG8gY29udGVudCA+ZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSBiYXNlCisJKSAmJgorCWdpdCBmZXRjaCBwYXJlbnQgbWFzdGVyOm9yaWdpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBmcm9tIHVuYm9ybiBwcmVzZXJ2ZXMgdW50cmFja2VkIGZpbGVzJyAnCisJZWNobyBwcmVjaW91cyA+ZXhwZWN0ICYmCisJZWNobyBwcmVjaW91cyA+ZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtYiBuZXcgb3JpZ2luICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgZnJvbSB1bmJvcm4gcHJlc2VydmVzIGluZGV4IGNvbnRlbnRzJyAnCisJZWNobyBwcmVjaW91cyA+ZXhwZWN0ICYmCisJZWNobyBwcmVjaW91cyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtYiBuZXcgb3JpZ2luICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwlnaXQgc2hvdyA6ZmlsZSA+ZmlsZSAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGZyb20gdW5ib3JuIG1lcmdlcyBpZGVudGljYWwgaW5kZXggY29udGVudHMnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV3IG9yaWdpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyBvdXQgYW5vdGhlciBicmFuY2ggZnJvbSB1bmJvcm4gc3RhdGUnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3cm9vdCAmJgorCWdpdCBjaGVja291dCAtYiBhbm90aGVybmFtZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSByZWZzL2hlYWRzL25ld3Jvb3QgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCWVjaG8gcmVmcy9oZWFkcy9hbm90aGVybmFtZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyBvdXQgaW4gYSBuZXdseSBjcmVhdGVkIHJlcG8nICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGVtcHR5ICYmCisJKAorCQljZCBlbXB0eSAmJgorCQlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmV4cGVjdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDE2LWNoZWNrb3V0LXBhdGNoLnNoIGIvdC90MjAxNi1jaGVja291dC1wYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40N2FlYjBiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAxNi1jaGVja291dC1wYXRjaC5zaApAQCAtMCwwICsxLDExNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dCAtLXBhdGNoJworCisuIC4vbGliLXBhdGNoLW1vZGUuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCcgJworCW1rZGlyIGRpciAmJgorCWVjaG8gcGFyZW50ID4gZGlyL2ZvbyAmJgorCWVjaG8gZHVtbXkgPiBiYXIgJiYKKwlnaXQgYWRkIGJhciBkaXIvZm9vICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9jb21taXQgc2Vjb25kIGRpci9mb28gaGVhZCAmJgorCXNldF9hbmRfc2F2ZV9zdGF0ZSBiYXIgYmFyX3dvcmsgYmFyX2luZGV4ICYmCisJc2F2ZV9oZWFkCisnCisKKyMgbm90ZTogYmFyIHNvcnRzIGJlZm9yZSBkaXIvZm9vLCBzbyB0aGUgZmlyc3QgJ24nIGlzIGFsd2F5cyB0byBza2lwICdiYXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2F5aW5nICJuIiBkb2VzIG5vdGhpbmcnICcKKwlzZXRfYW5kX3NhdmVfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIG4gbiB8IGdpdCBjaGVja291dCAtcCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgZGlyL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCBjaGVja291dCAtcCcgJworCXRlc3Rfd3JpdGVfbGluZXMgbiB5IHwgZ2l0IGNoZWNrb3V0IC1wICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGhlYWQgaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCBjaGVja291dCAtcCB3aXRoIHN0YWdlZCBjaGFuZ2VzJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBpbmRleCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgbiB5IHwgZ2l0IGNoZWNrb3V0IC1wICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGluZGV4IGluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IGNoZWNrb3V0IC1wIEhFQUQgd2l0aCBOTyBzdGFnZWQgY2hhbmdlczogYWJvcnQnICcKKwlzZXRfYW5kX3NhdmVfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIG4geSBuIHwgZ2l0IGNoZWNrb3V0IC1wIEhFQUQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGRpci9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgY2hlY2tvdXQgLXAgSEVBRCB3aXRoIE5PIHN0YWdlZCBjaGFuZ2VzOiBhcHBseScgJworCXRlc3Rfd3JpdGVfbGluZXMgbiB5IHkgfCBnaXQgY2hlY2tvdXQgLXAgSEVBRCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgY2hlY2tvdXQgLXAgSEVBRCB3aXRoIGNoYW5nZSBhbHJlYWR5IHN0YWdlZCcgJworCXNldF9zdGF0ZSBkaXIvZm9vIGluZGV4IGluZGV4ICYmCisJIyB0aGUgdGhpcmQgbiBpcyB0byBnZXQgb3V0IGluIGNhc2UgaXQgbWlzdGFrZW5seSBkb2VzIG5vdCBhcHBseQorCXRlc3Rfd3JpdGVfbGluZXMgbiB5IG4gfCBnaXQgY2hlY2tvdXQgLXAgSEVBRCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgY2hlY2tvdXQgLXAgSEVBRF4nICcKKwkjIHRoZSB0aGlyZCBuIGlzIHRvIGdldCBvdXQgaW4gY2FzZSBpdCBtaXN0YWtlbmx5IGRvZXMgbm90IGFwcGx5CisJdGVzdF93cml0ZV9saW5lcyBuIHkgbiB8IGdpdCBjaGVja291dCAtcCBIRUFEXiAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBwYXJlbnQgcGFyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IGNoZWNrb3V0IC1wIGhhbmRsZXMgZGVsZXRpb24nICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4ICYmCisJcm0gZGlyL2ZvbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgbiB5IHwgZ2l0IGNoZWNrb3V0IC1wICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGluZGV4IGluZGV4CisnCisKKyMgVGhlIGlkZWEgaW4gdGhlIHJlc3QgaXMgdGhhdCBiYXIgc29ydHMgZmlyc3QsIHNvIHdlIGFsd2F5cyBzYXkgJ3knCisjIGZpcnN0IGFuZCBpZiB0aGUgcGF0aCBsaW1pdGVyIGZhaWxzIGl0J2xsIGFwcGx5IHRvIGJhciBpbnN0ZWFkIG9mCisjIGRpci9mb28uICBUaGVyZSdzIGFsd2F5cyBhbiBleHRyYSAnbicgdG8gcmVqZWN0IGVkaXRzIHRvIGRpci9mb28gaW4KKyMgdGhlIGZhaWx1cmUgY2FzZSAoYW5kIHRodXMgZ2V0IG91dCBvZiB0aGUgbG9vcCkuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncGF0aCBsaW1pdGluZyB3b3JrczogZGlyJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJdGVzdF93cml0ZV9saW5lcyB5IG4gfCBnaXQgY2hlY2tvdXQgLXAgZGlyICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGhlYWQgaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3BhdGggbGltaXRpbmcgd29ya3M6IC0tIGRpcicgJworCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgeSBuIHwgZ2l0IGNoZWNrb3V0IC1wIC0tIGRpciAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdwYXRoIGxpbWl0aW5nIHdvcmtzOiBIRUFEXiAtLSBkaXInICcKKwkjIHRoZSB0aGlyZCBuIGlzIHRvIGdldCBvdXQgaW4gY2FzZSBpdCBtaXN0YWtlbmx5IGRvZXMgbm90IGFwcGx5CisJdGVzdF93cml0ZV9saW5lcyB5IG4gbiB8IGdpdCBjaGVja291dCAtcCBIRUFEXiAtLSBkaXIgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gcGFyZW50IHBhcmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3BhdGggbGltaXRpbmcgd29ya3M6IGZvbyBpbnNpZGUgZGlyJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJIyB0aGUgdGhpcmQgbiBpcyB0byBnZXQgb3V0IGluIGNhc2UgaXQgbWlzdGFrZW5seSBkb2VzIG5vdCBhcHBseQorCXRlc3Rfd3JpdGVfbGluZXMgeSBuIG4gfCAoY2QgZGlyICYmIGdpdCBjaGVja291dCAtcCBmb28pICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGhlYWQgaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ25vbmUgb2YgdGhpcyBtb3ZlZCBIRUFEJyAnCisJdmVyaWZ5X3NhdmVkX2hlYWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDE3LWNoZWNrb3V0LW9ycGhhbi5zaCBiL3QvdDIwMTctY2hlY2tvdXQtb3JwaGFuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1NWYyNzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDE3LWNoZWNrb3V0LW9ycGhhbi5zaApAQCAtMCwwICsxLDEyNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBFcmljayBNYXR0b3MKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNoZWNrb3V0IC0tb3JwaGFuCisKK01haW4gVGVzdHMgZm9yIC0tb3JwaGFuIGZ1bmN0aW9uYWxpdHkuJworCisuIC4vdGVzdC1saWIuc2gKKworVEVTVF9GSUxFPWZvbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXR1cCcgJworCWVjaG8gIkluaXRpYWwiID4iJFRFU1RfRklMRSIgJiYKKwlnaXQgYWRkICIkVEVTVF9GSUxFIiAmJgorCWdpdCBjb21taXQgLW0gIkZpcnN0IENvbW1pdCIgJiYKKwl0ZXN0X3RpY2sgJiYKKwllY2hvICJTdGF0ZSAxIiA+PiIkVEVTVF9GSUxFIiAmJgorCWdpdCBhZGQgIiRURVNUX0ZJTEUiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIENvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gY3JlYXRlcyBhIG5ldyBvcnBoYW4gYnJhbmNoIGZyb20gSEVBRCcgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiBhbHBoYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCAmJgorCXRlc3QgInJlZnMvaGVhZHMvYWxwaGEiID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJUaGlyZCBDb21taXQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXiAmJgorCWdpdCBkaWZmLXRyZWUgLS1xdWlldCBtYXN0ZXIgYWxwaGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gY3JlYXRlcyBhIG5ldyBvcnBoYW4gYnJhbmNoIGZyb20gPHN0YXJ0X3BvaW50PicgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gYmV0YSBtYXN0ZXJeICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEICYmCisJdGVzdCAicmVmcy9oZWFkcy9iZXRhIiA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiRm91cnRoIENvbW1pdCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReICYmCisJZ2l0IGRpZmYtdHJlZSAtLXF1aWV0IG1hc3Rlcl4gYmV0YQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ycGhhbiBtdXN0IGJlIHJlamVjdGVkIHdpdGggLWInICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ldyAtYiBuZXdlciAmJgorCXRlc3QgcmVmcy9oZWFkcy9tYXN0ZXIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ycGhhbiBtdXN0IGJlIHJlamVjdGVkIHdpdGggLXQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ldyAtdCBtYXN0ZXIgJiYKKwl0ZXN0IHJlZnMvaGVhZHMvbWFzdGVyID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gaWdub3JlcyBicmFuY2guYXV0b3NldHVwbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgYWx3YXlzICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGdhbW1hICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIGJyYW5jaC5nYW1tYS5tZXJnZSkiICYmCisJdGVzdCByZWZzL2hlYWRzL2dhbW1hID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tb3JwaGFuIG1ha2VzIHJlZmxvZyBieSBkZWZhdWx0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gZGVsdGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGRlbHRhQHswfSAmJgorCWdpdCBjb21taXQgLW0gRGVsdGEgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGRlbHRhQHswfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ycGhhbiBkb2VzIG5vdCBtYWtlIHJlZmxvZyB3aGVuIGNvcmUubG9nQWxsUmVmVXBkYXRlcyA9IGZhbHNlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIGZhbHNlICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGVwc2lsb24gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGVwc2lsb25AezB9ICYmCisJZ2l0IGNvbW1pdCAtbSBFcHNpbG9uICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBlcHNpbG9uQHswfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ycGhhbiB3aXRoIC1sIG1ha2VzIHJlZmxvZyB3aGVuIGNvcmUubG9nQWxsUmVmVXBkYXRlcyA9IGZhbHNlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtbCAtLW9ycGhhbiB6ZXRhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB6ZXRhQHswfSAmJgorCWdpdCBjb21taXQgLW0gWmV0YSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgemV0YUB7MH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l2aW5nIHVwIC0tb3JwaGFuIG5vdCBjb21taXR0ZWQgd2hlbiAtbCBhbmQgY29yZS5sb2dBbGxSZWZVcGRhdGVzID0gZmFsc2UgZGVsZXRlcyByZWZsb2cnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1sIC0tb3JwaGFuIGV0YSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZXRhQHswfSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGV0YUB7MH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gaXMgcmVqZWN0ZWQgd2l0aCBhbiBleGlzdGluZyBuYW1lJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLW9ycGhhbiBtYXN0ZXIgJiYKKwl0ZXN0IHJlZnMvaGVhZHMvbWFzdGVyID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gcmVmdXNlcyB0byBzd2l0Y2ggaWYgYSBtZXJnZSBpcyBuZWVkZWQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gbG9jYWwgPj4iJFRFU1RfRklMRSIgJiYKKwljYXQgIiRURVNUX0ZJTEUiID4iJFRFU1RfRklMRS5zYXZlZCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3IG1hc3Rlcl4gJiYKKwl0ZXN0IHJlZnMvaGVhZHMvbWFzdGVyID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgJiYKKwl0ZXN0X2NtcCAiJFRFU1RfRklMRSIgIiRURVNUX0ZJTEUuc2F2ZWQiICYmCisJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEICYmCisJZ2l0IHJlc2V0IC0taGFyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3QgLS1kZXRhY2ggb24gYW4gdW5ib3JuIGJyYW5jaCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tZGV0YWNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAxOC1jaGVja291dC1icmFuY2guc2ggYi90L3QyMDE4LWNoZWNrb3V0LWJyYW5jaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMTU4MzE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAxOC1jaGVja291dC1icmFuY2guc2gKQEAgLTAsMCArMSwyNjMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCcKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgQXJndW1lbnRzOiBbIV0gPGJyYW5jaD4gPG9pZD4gWzxjaGVja291dCBvcHRpb25zPl0KKyMKKyMgUnVucyAiZ2l0IGNoZWNrb3V0IiB0byBzd2l0Y2ggdG8gPGJyYW5jaD4sIHRlc3RpbmcgdGhhdAorIworIyAgIDEpIHdlIGFyZSBvbiB0aGUgc3BlY2lmaWVkIGJyYW5jaCwgPGJyYW5jaD47CisjICAgMikgSEVBRCBpcyA8b2lkPjsgaWYgPG9pZD4gaXMgbm90IHNwZWNpZmllZCwgdGhlIG9sZCBIRUFEIGlzIHVzZWQuCisjCisjIElmIDxjaGVja291dCBvcHRpb25zPiBpcyBub3Qgc3BlY2lmaWVkLCAiZ2l0IGNoZWNrb3V0IiBpcyBydW4gd2l0aCAtYi4KKyMKKyMgSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGAhYCwgImdpdCBjaGVja291dCIgaXMgZXhwZWN0ZWQgdG8gZmFpbCB3aGVuCisjIGl0IGlzIHJ1bi4KK2RvX2NoZWNrb3V0ICgpIHsKKwlzaG91bGRfZmFpbD0gJiYKKwlpZiB0ZXN0ICJ4JDEiID0gInghIgorCXRoZW4KKwkJc2hvdWxkX2ZhaWw9eWVzICYmCisJCXNoaWZ0CisJZmkgJiYKKwlleHBfYnJhbmNoPSQxICYmCisJZXhwX3JlZj0icmVmcy9oZWFkcy8kZXhwX2JyYW5jaCIgJiYKKworCSMgaWYgPG9pZD4gaXMgbm90IHNwZWNpZmllZCwgdXNlIEhFQUQuCisJZXhwX29pZD0kezI6LSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKX0gJiYKKworCSMgZGVmYXVsdCBvcHRpb25zIGZvciBnaXQgY2hlY2tvdXQ6IC1iCisJaWYgdGVzdCAteiAiJDMiCisJdGhlbgorCQlvcHRzPSItYiIKKwllbHNlCisJCW9wdHM9IiQzIgorCWZpCisKKwlpZiB0ZXN0IC1uICIkc2hvdWxkX2ZhaWwiCisJdGhlbgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgJG9wdHMgJGV4cF9icmFuY2ggJGV4cF9vaWQKKwllbHNlCisJCWdpdCBjaGVja291dCAkb3B0cyAkZXhwX2JyYW5jaCAkZXhwX29pZCAmJgorCQllY2hvICIkZXhwX3JlZiIgPnJlZi5leHBlY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBIRUFEID5yZWYuYWN0dWFsICYmCisJCXRlc3RfY21wIHJlZi5leHBlY3QgcmVmLmFjdHVhbCAmJgorCQllY2hvICIkZXhwX29pZCIgPm9pZC5leHBlY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5vaWQuYWN0dWFsICYmCisJCXRlc3RfY21wIG9pZC5leHBlY3Qgb2lkLmFjdHVhbAorCWZpCit9CisKK3Rlc3RfZGlydHlfdW5tZXJnZWFibGUgKCkgeworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLWV4aXQtY29kZQorfQorCit0ZXN0X2RpcnR5X3VubWVyZ2VhYmxlX2Rpc2NhcmRzX2NoYW5nZXMgKCkgeworCWdpdCBkaWZmIC0tZXhpdC1jb2RlCit9CisKK3NldHVwX2RpcnR5X3VubWVyZ2VhYmxlICgpIHsKKwllY2hvID4+ZmlsZTEgY2hhbmdlMgorfQorCit0ZXN0X2RpcnR5X21lcmdlYWJsZSAoKSB7CisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tY2FjaGVkIC0tZXhpdC1jb2RlCit9CisKK3Rlc3RfZGlydHlfbWVyZ2VhYmxlX2Rpc2NhcmRzX2NoYW5nZXMgKCkgeworCWdpdCBkaWZmIC0tY2FjaGVkIC0tZXhpdC1jb2RlCit9CisKK3NldHVwX2RpcnR5X21lcmdlYWJsZSAoKSB7CisJZWNobyA+ZmlsZTIgZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdGlhbCBmaWxlMSAmJgorCUhFQUQxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCisJdGVzdF9jb21taXQgY2hhbmdlMSBmaWxlMSAmJgorCUhFQUQyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCisJZ2l0IGJyYW5jaCAtbSBicmFuY2gxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIHRvIGEgbmV3IGJyYW5jaCwgc2V0IHRvIEhFQUQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIgorCQlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBicmFuY2gyIiAmJgorCWRvX2NoZWNrb3V0IGJyYW5jaDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgdG8gYSBtZXJnZSBiYXNlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICIKKwkJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKwkJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgYnJhbmNoMiIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBicmFuY2gxLi4uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIHRvIGEgbmV3IGJyYW5jaCwgc2V0IHRvIGFuIGV4cGxpY2l0IHJlZicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiCisJCWdpdCBjaGVja291dCBicmFuY2gxICYmCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGJyYW5jaDIiICYmCisJZG9fY2hlY2tvdXQgYnJhbmNoMiAkSEVBRDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgdG8gYSBuZXcgYnJhbmNoIHdpdGggdW5tZXJnZWFibGUgY2hhbmdlcyBmYWlscycgJworCXNldHVwX2RpcnR5X3VubWVyZ2VhYmxlICYmCisJZG9fY2hlY2tvdXQgISBicmFuY2gyICRIRUFEMSAmJgorCXRlc3RfZGlydHlfdW5tZXJnZWFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWYgLWIgdG8gYSBuZXcgYnJhbmNoIHdpdGggdW5tZXJnZWFibGUgY2hhbmdlcyBkaXNjYXJkcyBjaGFuZ2VzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICIKKwkJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKwkJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgYnJhbmNoMiIgJiYKKworCSMgc3RpbGwgZGlydHkgYW5kIG9uIGJyYW5jaDEKKwlkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAiLWYgLWIiICYmCisJdGVzdF9kaXJ0eV91bm1lcmdlYWJsZV9kaXNjYXJkc19jaGFuZ2VzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIHRvIGEgbmV3IGJyYW5jaCBwcmVzZXJ2ZXMgbWVyZ2VhYmxlIGNoYW5nZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCBicmFuY2gxICYmCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGJyYW5jaDIiICYmCisKKwlzZXR1cF9kaXJ0eV9tZXJnZWFibGUgJiYKKwlkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAmJgorCXRlc3RfZGlydHlfbWVyZ2VhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1mIC1iIHRvIGEgbmV3IGJyYW5jaCB3aXRoIG1lcmdlYWJsZSBjaGFuZ2VzIGRpc2NhcmRzIGNoYW5nZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJc2V0dXBfZGlydHlfbWVyZ2VhYmxlICYmCisJZG9fY2hlY2tvdXQgYnJhbmNoMiAkSEVBRDEgIi1mIC1iIiAmJgorCXRlc3RfZGlydHlfbWVyZ2VhYmxlX2Rpc2NhcmRzX2NoYW5nZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIGZhaWxzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCWRvX2NoZWNrb3V0ICEgYnJhbmNoMiAkSEVBRDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgdG8gQHstMX0gZmFpbHMgd2l0aCB0aGUgcmlnaHQgYnJhbmNoIG5hbWUnICcKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCWdpdCBjaGVja291dCBicmFuY2gyICYmCisJZWNobyAgPmV4cGVjdCAiZmF0YWw6IEEgYnJhbmNoIG5hbWVkICdcJydicmFuY2gxJ1wnJyBhbHJlYWR5IGV4aXN0cy4iICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC1iIEB7LTF9IDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLUIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIHJlc2V0cyBicmFuY2ggdG8gSEVBRCcgJworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisKKwlkb19jaGVja291dCBicmFuY2gyICIiIC1CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1CIHRvIGEgbWVyZ2UgYmFzZScgJworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisKKwlnaXQgY2hlY2tvdXQgLUIgYnJhbmNoMiBicmFuY2gxLi4uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1CIHRvIGFuIGV4aXN0aW5nIGJyYW5jaCBmcm9tIGRldGFjaGVkIEhFQUQgcmVzZXRzIGJyYW5jaCB0byBIRUFEJyAnCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgY2hlY2tvdXQgIiRoZWFkIiAmJgorCisJZG9fY2hlY2tvdXQgYnJhbmNoMiAiIiAtQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtQiB0byBhbiBleGlzdGluZyBicmFuY2ggd2l0aCBhbiBleHBsaWNpdCByZWYgcmVzZXRzIGJyYW5jaCB0byB0aGF0IHJlZicgJworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisKKwlkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAtQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtQiB0byBhbiBleGlzdGluZyBicmFuY2ggd2l0aCB1bm1lcmdlYWJsZSBjaGFuZ2VzIGZhaWxzJyAnCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKworCXNldHVwX2RpcnR5X3VubWVyZ2VhYmxlICYmCisJZG9fY2hlY2tvdXQgISBicmFuY2gyICRIRUFEMSAtQiAmJgorCXRlc3RfZGlydHlfdW5tZXJnZWFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWYgLUIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIHdpdGggdW5tZXJnZWFibGUgY2hhbmdlcyBkaXNjYXJkcyBjaGFuZ2VzJyAnCisJIyBzdGlsbCBkaXJ0eSBhbmQgb24gYnJhbmNoMQorCWRvX2NoZWNrb3V0IGJyYW5jaDIgJEhFQUQxICItZiAtQiIgJiYKKwl0ZXN0X2RpcnR5X3VubWVyZ2VhYmxlX2Rpc2NhcmRzX2NoYW5nZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLUIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIHByZXNlcnZlcyBtZXJnZWFibGUgY2hhbmdlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKworCXNldHVwX2RpcnR5X21lcmdlYWJsZSAmJgorCWRvX2NoZWNrb3V0IGJyYW5jaDIgJEhFQUQxIC1CICYmCisJdGVzdF9kaXJ0eV9tZXJnZWFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWYgLUIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIHdpdGggbWVyZ2VhYmxlIGNoYW5nZXMgZGlzY2FyZHMgY2hhbmdlcycgJworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisKKwlzZXR1cF9kaXJ0eV9tZXJnZWFibGUgJiYKKwlkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAiLWYgLUIiICYmCisJdGVzdF9kaXJ0eV9tZXJnZWFibGVfZGlzY2FyZHNfY2hhbmdlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiA8ZGVzY3JpYmU+JyAnCisJZ2l0IHRhZyAtZiAtbSAiRmlyc3QgY29tbWl0IiBpbml0aWFsIGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWYgY2hhbmdlMSAmJgorCW5hbWU9JChnaXQgZGVzY3JpYmUpICYmCisJZ2l0IGNoZWNrb3V0IC1iICRuYW1lICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgY2hhbmdlMSAmJgorCWVjaG8gInJlZnMvaGVhZHMvJG5hbWUiID5leHBlY3QgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLUIgdG8gdGhlIGN1cnJlbnQgYnJhbmNoIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKwlnaXQgY2hlY2tvdXQgLUIgYnJhbmNoMS1zY3JhdGNoICYmCisKKwlzZXR1cF9kaXJ0eV9tZXJnZWFibGUgJiYKKwlnaXQgY2hlY2tvdXQgLUIgYnJhbmNoMS1zY3JhdGNoIGluaXRpYWwgJiYKKwl0ZXN0X2RpcnR5X21lcmdlYWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiBhZnRlciBjbG9uZSAtLW5vLWNoZWNrb3V0IGRvZXMgYSBjaGVja291dCBvZiBIRUFEJyAnCisJZ2l0IGluaXQgc3JjICYmCisJdGVzdF9jb21taXQgLUMgc3JjIGEgJiYKKwlyZXY9IiQoZ2l0IC1DIHNyYyByZXYtcGFyc2UgSEVBRCkiICYmCisJZ2l0IGNsb25lIC0tbm8tY2hlY2tvdXQgc3JjIGRlc3QgJiYKKwlnaXQgLUMgZGVzdCBjaGVja291dCAiJHJldiIgLWIgYnJhbmNoICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGVzdC9hLnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgdG8gYSBuZXcgYnJhbmNoIHByZXNlcnZlcyBtZXJnZWFibGUgY2hhbmdlcyBkZXNwaXRlIHNwYXJzZS1jaGVja291dCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IGJyYW5jaDEtc2NyYXRjaCAmJgorCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBicmFuY2gzICYmCisJCWdpdCBjb25maWcgY29yZS5zcGFyc2VDaGVja291dCBmYWxzZSAmJgorCQlybSAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IiAmJgorCisJdGVzdF9jb21taXQgZmlsZTIgJiYKKworCWVjaG8gc3R1ZmYgPj5maWxlMSAmJgorCWVjaG8gZmlsZTIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY29uZmlnIGNvcmUuc3BhcnNlQ2hlY2tvdXQgdHJ1ZSAmJgorCisJQ1VSSEVBRD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlkb19jaGVja291dCBicmFuY2gzICRDVVJIRUFEICYmCisKKwllY2hvIGZpbGUxID5leHBlY3QgJiYKKwlnaXQgZGlmZiAtLW5hbWUtb25seSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMTktY2hlY2tvdXQtYW1iaWd1b3VzLXJlZi5zaCBiL3QvdDIwMTktY2hlY2tvdXQtYW1iaWd1b3VzLXJlZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iOTlkNTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAxOS1jaGVja291dC1hbWJpZ3VvdXMtcmVmLnNoCkBAIC0wLDAgKzEsNTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCBoYW5kbGluZyBvZiBhbWJpZ3VvdXMgKGJyYW5jaC90YWcpIHJlZnMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYW1iaWd1b3VzIHJlZnMnICcKKwl0ZXN0X2NvbW1pdCBicmFuY2ggZmlsZSAmJgorCWdpdCBicmFuY2ggYW1iaWd1aXR5ICYmCisJZ2l0IGJyYW5jaCB2YWd1ZW5lc3MgJiYKKwl0ZXN0X2NvbW1pdCB0YWcgZmlsZSAmJgorCWdpdCB0YWcgYW1iaWd1aXR5ICYmCisJZ2l0IHRhZyB2YWd1ZW5lc3MgSEVBRDpmaWxlICYmCisJdGVzdF9jb21taXQgb3RoZXIgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBhbWJpZ3VvdXMgcmVmIHN1Y2NlZWRzJyAnCisJZ2l0IGNoZWNrb3V0IGFtYmlndWl0eSA+c3Rkb3V0IDI+c3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHByb2R1Y2VzIGFtYmlndWl0eSB3YXJuaW5nJyAnCisJZ3JlcCAid2FybmluZy4qYW1iaWd1b3VzIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgY2hvb3NlcyBicmFuY2ggb3ZlciB0YWcnICcKKwllY2hvIHJlZnMvaGVhZHMvYW1iaWd1aXR5ID5leHBlY3QgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgcmVwb3J0cyBzd2l0Y2ggdG8gYnJhbmNoJyAnCisJdGVzdF9pMThuZ3JlcCAiU3dpdGNoZWQgdG8gYnJhbmNoIiBzdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIl5IRUFEIGlzIG5vdyBhdCIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHZhZ3VlIHJlZiBzdWNjZWVkcycgJworCWdpdCBjaGVja291dCB2YWd1ZW5lc3MgPnN0ZG91dCAyPnN0ZGVyciAmJgorCXRlc3Rfc2V0X3ByZXJlcSBWQUdVRU5FU1NfU1VDQ0VTUworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFZBR1VFTkVTU19TVUNDRVNTICdjaGVja291dCBwcm9kdWNlcyBhbWJpZ3VpdHkgd2FybmluZycgJworCWdyZXAgIndhcm5pbmcuKmFtYmlndW91cyIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVkFHVUVORVNTX1NVQ0NFU1MgJ2NoZWNrb3V0IGNob29zZXMgYnJhbmNoIG92ZXIgdGFnJyAnCisJZWNobyByZWZzL2hlYWRzL3ZhZ3VlbmVzcyA+ZXhwZWN0ICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVkFHVUVORVNTX1NVQ0NFU1MgJ2NoZWNrb3V0IHJlcG9ydHMgc3dpdGNoIHRvIGJyYW5jaCcgJworCXRlc3RfaTE4bmdyZXAgIlN3aXRjaGVkIHRvIGJyYW5jaCIgc3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJeSEVBRCBpcyBub3cgYXQiIHN0ZGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMjAtY2hlY2tvdXQtZGV0YWNoLnNoIGIvdC90MjAyMC1jaGVja291dC1kZXRhY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjc0OGRiOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMjAtY2hlY2tvdXQtZGV0YWNoLnNoCkBAIC0wLDAgKzEsMzMyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgaW50byBkZXRhY2hlZCBIRUFEIHN0YXRlJworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX2RldGFjaGVkICgpIHsKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQgPi9kZXYvbnVsbAorfQorCitjaGVja19ub3RfZGV0YWNoZWQgKCkgeworCWdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCA+L2Rldi9udWxsCit9CisKK1BSRVZfSEVBRF9ERVNDPSdQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcycKK2NoZWNrX29ycGhhbl93YXJuaW5nKCkgeworCXRlc3RfaTE4bmdyZXAgInlvdSBhcmUgbGVhdmluZyAkMiBiZWhpbmQiICIkMSIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIiRQUkVWX0hFQURfREVTQyIgIiQxIgorfQorY2hlY2tfbm9fb3JwaGFuX3dhcm5pbmcoKSB7CisJdGVzdF9pMThuZ3JlcCAhICJ5b3UgYXJlIGxlYXZpbmcgLiogY29tbWl0LipiZWhpbmQiICIkMSIgJiYKKwl0ZXN0X2kxOG5ncmVwICIkUFJFVl9IRUFEX0RFU0MiICIkMSIKK30KKworcmVzZXQgKCkgeworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwljaGVja19ub3RfZGV0YWNoZWQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJiBnaXQgdGFnIC1kIHRocmVlICYmCisJdGVzdF9jb21taXQgZm91ciAmJiBnaXQgdGFnIC1kIGZvdXIgJiYKKwlnaXQgYnJhbmNoIGJyYW5jaCAmJgorCWdpdCB0YWcgdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGJyYW5jaCBkb2VzIG5vdCBkZXRhY2gnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCBicmFuY2ggJiYKKwljaGVja19ub3RfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdGFnIGRldGFjaGVzJyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgdGFnICYmCisJY2hlY2tfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgYnJhbmNoIGJ5IGZ1bGwgbmFtZSBkZXRhY2hlcycgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IHJlZnMvaGVhZHMvYnJhbmNoICYmCisJY2hlY2tfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgbm9uLXJlZiBkZXRhY2hlcycgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaF4gJiYKKwljaGVja19kZXRhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCByZWZeMCBkZXRhY2hlcycgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaF4wICYmCisJY2hlY2tfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1kZXRhY2ggZGV0YWNoZXMnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCBicmFuY2ggJiYKKwljaGVja19kZXRhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLWRldGFjaCB3aXRob3V0IGJyYW5jaCBuYW1lJyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggJiYKKwljaGVja19kZXRhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLWRldGFjaCBlcnJvcnMgb3V0IGZvciBub24tY29tbWl0JyAnCisJcmVzZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1kZXRhY2ggb25lXnt0cmVlfSAmJgorCWNoZWNrX25vdF9kZXRhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLWRldGFjaCBlcnJvcnMgb3V0IGZvciBleHRyYSBhcmd1bWVudCcgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLWRldGFjaCB0YWcgb25lLnQgJiYKKwljaGVja19ub3RfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1kZXRhY2hlZCBhbmQgLWIgYXJlIGluY29tcGF0aWJsZScgJworCXJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIC1iIG5ld2JyYW5jaCB0YWcgJiYKKwljaGVja19ub3RfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1kZXRhY2ggbW92ZXMgSEVBRCcgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCB0d28gJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdhcm5zIG9uIG9ycGhhbiBjb21taXRzJyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggdHdvICYmCisJZWNobyBjb250ZW50ID5vcnBoYW4gJiYKKwlnaXQgYWRkIG9ycGhhbiAmJgorCWdpdCBjb21taXQgLWEgLW0gb3JwaGFuMSAmJgorCWVjaG8gbmV3IGNvbnRlbnQgPm9ycGhhbiAmJgorCWdpdCBjb21taXQgLWEgLW0gb3JwaGFuMiAmJgorCW9ycGhhbjI9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAyPnN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3YXJucyBvbiBvcnBoYW4gY29tbWl0czogb3V0cHV0JyAnCisJY2hlY2tfb3JwaGFuX3dhcm5pbmcgc3RkZXJyICIyIGNvbW1pdHMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdhcm5zIG9ycGhhbmluZyAxIG9mIDIgY29tbWl0cycgJworCWdpdCBjaGVja291dCAiJG9ycGhhbjIiICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReIDI+c3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdhcm5zIG9ycGhhbmluZyAxIG9mIDIgY29tbWl0czogb3V0cHV0JyAnCisJY2hlY2tfb3JwaGFuX3dhcm5pbmcgc3RkZXJyICIxIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgZG9lcyBub3Qgd2FybiBsZWF2aW5nIHJlZiB0aXAnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyIDI+c3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGRvZXMgbm90IHdhcm4gbGVhdmluZyByZWYgdGlwJyAnCisJY2hlY2tfbm9fb3JwaGFuX3dhcm5pbmcgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGRvZXMgbm90IHdhcm4gbGVhdmluZyByZWFjaGFibGUgY29tbWl0JyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggSEVBRF4gJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyIDI+c3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGRvZXMgbm90IHdhcm4gbGVhdmluZyByZWFjaGFibGUgY29tbWl0JyAnCisJY2hlY2tfbm9fb3JwaGFuX3dhcm5pbmcgc3RkZXJyCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1lvdXIgYnJhbmNoIGlzIGJlaGluZCAnbWFzdGVyJyBieSAxIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC4KKyAgKHVzZSAiZ2l0IHB1bGwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaCkKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhY2tpbmcgY291bnQgaXMgYWNjdXJhdGUgYWZ0ZXIgb3JwaGFuIGNoZWNrJyAnCisJcmVzZXQgJiYKKwlnaXQgYnJhbmNoIGNoaWxkIG1hc3Rlcl4gJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5jaGlsZC5yZW1vdGUgLiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmNoaWxkLm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IGNoaWxkXiAmJgorCWdpdCBjaGVja291dCBjaGlsZCA+c3Rkb3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gYWR2aWNlIGdpdmVuIGZvciBleHBsaWNpdCBkZXRhY2hlZCBoZWFkIHN0YXRlJyAnCisJIyBiYXNlbGluZQorCXRlc3RfY29uZmlnIGFkdmljZS5kZXRhY2hlZEhlYWQgdHJ1ZSAmJgorCWdpdCBjaGVja291dCBjaGlsZCAmJiBnaXQgY2hlY2tvdXQgSEVBRF4wID5leHBlY3QuYWR2aWNlIDI+JjEgJiYKKwl0ZXN0X2NvbmZpZyBhZHZpY2UuZGV0YWNoZWRIZWFkIGZhbHNlICYmCisJZ2l0IGNoZWNrb3V0IGNoaWxkICYmIGdpdCBjaGVja291dCBIRUFEXjAgPmV4cGVjdC5uby1hZHZpY2UgMj4mMSAmJgorCXRlc3RfdW5jb25maWcgYWR2aWNlLmRldGFjaGVkSGVhZCAmJgorCSMgd2l0aG91dCBjb25maWd1cmF0aW9uLCB0aGUgYWR2aWNlLiogdmFyaWFibGVzIGRlZmF1bHQgdG8gdHJ1ZQorCWdpdCBjaGVja291dCBjaGlsZCAmJiBnaXQgY2hlY2tvdXQgSEVBRF4wID5hY3R1YWwgMj4mMSAmJgorCXRlc3RfY21wIGV4cGVjdC5hZHZpY2UgYWN0dWFsICYmCisKKwkjIHdpdGggZXhwbGljaXQgLS1kZXRhY2gKKwkjIG5vIGNvbmZpZ3VyYXRpb24KKwl0ZXN0X3VuY29uZmlnIGFkdmljZS5kZXRhY2hlZEhlYWQgJiYKKwlnaXQgY2hlY2tvdXQgY2hpbGQgJiYgZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIEhFQUReMCA+YWN0dWFsIDI+JjEgJiYKKwl0ZXN0X2NtcCBleHBlY3Qubm8tYWR2aWNlIGFjdHVhbCAmJgorCisJIyBleHBsaWNpdGx5IGRlY2xpbmUgYWR2aWNlCisJdGVzdF9jb25maWcgYWR2aWNlLmRldGFjaGVkSGVhZCBmYWxzZSAmJgorCWdpdCBjaGVja291dCBjaGlsZCAmJiBnaXQgY2hlY2tvdXQgLS1kZXRhY2ggSEVBRF4wID5hY3R1YWwgMj4mMSAmJgorCXRlc3RfY21wIGV4cGVjdC5uby1hZHZpY2UgYWN0dWFsCisnCisKKyMgRGV0YWNoZWQgSEVBRCB0ZXN0cyBmb3IgR0lUX1BSSU5UX1NIQTFfRUxMSVBTSVMgKG5ldyBmb3JtYXQpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmliZV9kZXRhY2hlZF9oZWFkIHByaW50cyBubyBTSEEtMSBlbGxpcHNpcyB3aGVuIG5vdCBhc2tlZCB0bycgIgorCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0PTEyIG1hc3Rlcl4pICYmCisJY29tbWl0Mj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydD0xMiBtYXN0ZXJ+MikgJiYKKwljb21taXQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0PTEyIG1hc3Rlcn4zKSAmJgorCisJIyBUaGUgZmlyc3QgZGV0YWNoIG9wZXJhdGlvbiBpcyBtb3JlIGNoYXR0eSB0aGFuIHRoZSBmb2xsb3dpbmcgb25lcy4KKwljYXQgPjFzdF9kZXRhY2ggPDwtRU9GICYmCisJTm90ZTogc3dpdGNoaW5nIHRvICdIRUFEXicuCisKKwlZb3UgYXJlIGluICdkZXRhY2hlZCBIRUFEJyBzdGF0ZS4gWW91IGNhbiBsb29rIGFyb3VuZCwgbWFrZSBleHBlcmltZW50YWwKKwljaGFuZ2VzIGFuZCBjb21taXQgdGhlbSwgYW5kIHlvdSBjYW4gZGlzY2FyZCBhbnkgY29tbWl0cyB5b3UgbWFrZSBpbiB0aGlzCisJc3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHN3aXRjaGluZyBiYWNrIHRvIGEgYnJhbmNoLgorCisJSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCB0byByZXRhaW4gY29tbWl0cyB5b3UgY3JlYXRlLCB5b3UgbWF5CisJZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWMgd2l0aCB0aGUgc3dpdGNoIGNvbW1hbmQuIEV4YW1wbGU6CisKKwkgIGdpdCBzd2l0Y2ggLWMgPG5ldy1icmFuY2gtbmFtZT4KKworCU9yIHVuZG8gdGhpcyBvcGVyYXRpb24gd2l0aDoKKworCSAgZ2l0IHN3aXRjaCAtCisKKwlUdXJuIG9mZiB0aGlzIGFkdmljZSBieSBzZXR0aW5nIGNvbmZpZyB2YXJpYWJsZSBhZHZpY2UuZGV0YWNoZWRIZWFkIHRvIGZhbHNlCisKKwlIRUFEIGlzIG5vdyBhdCBcJGNvbW1pdCB0aHJlZQorCUVPRgorCisJIyBUaGUgcmVtYWluaW5nIG9uZXMganVzdCBzaG93IGluZm8gYWJvdXQgcHJldmlvdXMgYW5kIGN1cnJlbnQgSEVBRHMuCisJY2F0ID4ybmRfZGV0YWNoIDw8LUVPRiAmJgorCVByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIFwkY29tbWl0IHRocmVlCisJSEVBRCBpcyBub3cgYXQgXCRjb21taXQyIHR3bworCUVPRgorCisJY2F0ID4zcmRfZGV0YWNoIDw8LUVPRiAmJgorCVByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIFwkY29tbWl0MiB0d28KKwlIRUFEIGlzIG5vdyBhdCBcJGNvbW1pdDMgb25lCisJRU9GCisKKwlyZXNldCAmJgorCWNoZWNrX25vdF9kZXRhY2hlZCAmJgorCisJIyBWYXJpb3VzIHdheXMgb2YgKm5vdCogYXNraW5nIGZvciBlbGxpcHNlcworCisJc2FuZV91bnNldCBHSVRfUFJJTlRfU0hBMV9FTExJUFNJUyAmJgorCWdpdCAtYyAnY29yZS5hYmJyZXY9MTInIGNoZWNrb3V0IEhFQUReID5hY3R1YWwgMj4mMSAmJgorCWNoZWNrX2RldGFjaGVkICYmCisJdGVzdF9pMThuY21wIDFzdF9kZXRhY2ggYWN0dWFsICYmCisKKwlHSVRfUFJJTlRfU0hBMV9FTExJUFNJUz0ibm8iIGdpdCAtYyAnY29yZS5hYmJyZXY9MTInIGNoZWNrb3V0IEhFQUReID5hY3R1YWwgMj4mMSAmJgorCWNoZWNrX2RldGFjaGVkICYmCisJdGVzdF9pMThuY21wIDJuZF9kZXRhY2ggYWN0dWFsICYmCisKKwlHSVRfUFJJTlRfU0hBMV9FTExJUFNJUz0gZ2l0IC1jICdjb3JlLmFiYnJldj0xMicgY2hlY2tvdXQgSEVBRF4gPmFjdHVhbCAyPiYxICYmCisJY2hlY2tfZGV0YWNoZWQgJiYKKwl0ZXN0X2kxOG5jbXAgM3JkX2RldGFjaCBhY3R1YWwgJiYKKworCXNhbmVfdW5zZXQgR0lUX1BSSU5UX1NIQTFfRUxMSVBTSVMgJiYKKworCSMgV2Ugb25seSBoYXZlIGZvdXIgY29tbWl0cywgYnV0IHdlIGNhbiByZS11c2UgdGhlbQorCXJlc2V0ICYmCisJY2hlY2tfbm90X2RldGFjaGVkICYmCisKKwkjIE1ha2Ugbm8gbWVudGlvbiBvZiB0aGUgZW52IHZhciBhdCBhbGwKKwlnaXQgLWMgJ2NvcmUuYWJicmV2PTEyJyBjaGVja291dCBIRUFEXiA+YWN0dWFsIDI+JjEgJiYKKwljaGVja19kZXRhY2hlZCAmJgorCXRlc3RfaTE4bmNtcCAxc3RfZGV0YWNoIGFjdHVhbCAmJgorCisJR0lUX1BSSU5UX1NIQTFfRUxMSVBTSVM9J25vcGUnICYmCisJZ2l0IC1jICdjb3JlLmFiYnJldj0xMicgY2hlY2tvdXQgSEVBRF4gPmFjdHVhbCAyPiYxICYmCisJY2hlY2tfZGV0YWNoZWQgJiYKKwl0ZXN0X2kxOG5jbXAgMm5kX2RldGFjaCBhY3R1YWwgJiYKKworCUdJVF9QUklOVF9TSEExX0VMTElQU0lTPW5laW4gJiYKKwlnaXQgLWMgJ2NvcmUuYWJicmV2PTEyJyBjaGVja291dCBIRUFEXiA+YWN0dWFsIDI+JjEgJiYKKwljaGVja19kZXRhY2hlZCAmJgorCXRlc3RfaTE4bmNtcCAzcmRfZGV0YWNoIGFjdHVhbCAmJgorCisJdHJ1ZQorIgorCisjIERldGFjaGVkIEhFQUQgdGVzdHMgZm9yIEdJVF9QUklOVF9TSEExX0VMTElQU0lTIChvbGQgZm9ybWF0KQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVzY3JpYmVfZGV0YWNoZWRfaGVhZCBkb2VzIHByaW50IFNIQS0xIGVsbGlwc2lzIHdoZW4gYXNrZWQgdG8nICIKKworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydD0xMiBtYXN0ZXJeKSAmJgorCWNvbW1pdDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9MTIgbWFzdGVyfjIpICYmCisJY29tbWl0Mz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydD0xMiBtYXN0ZXJ+MykgJiYKKworCSMgVGhlIGZpcnN0IGRldGFjaCBvcGVyYXRpb24gaXMgbW9yZSBjaGF0dHkgdGhhbiB0aGUgZm9sbG93aW5nIG9uZXMuCisJY2F0ID4xc3RfZGV0YWNoIDw8LUVPRiAmJgorCU5vdGU6IHN3aXRjaGluZyB0byAnSEVBRF4nLgorCisJWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsCisJY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpcworCXN0YXRlIHdpdGhvdXQgaW1wYWN0aW5nIGFueSBicmFuY2hlcyBieSBzd2l0Y2hpbmcgYmFjayB0byBhIGJyYW5jaC4KKworCUlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gcmV0YWluIGNvbW1pdHMgeW91IGNyZWF0ZSwgeW91IG1heQorCWRvIHNvIChub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1jIHdpdGggdGhlIHN3aXRjaCBjb21tYW5kLiBFeGFtcGxlOgorCisJICBnaXQgc3dpdGNoIC1jIDxuZXctYnJhbmNoLW5hbWU+CisKKwlPciB1bmRvIHRoaXMgb3BlcmF0aW9uIHdpdGg6CisKKwkgIGdpdCBzd2l0Y2ggLQorCisJVHVybiBvZmYgdGhpcyBhZHZpY2UgYnkgc2V0dGluZyBjb25maWcgdmFyaWFibGUgYWR2aWNlLmRldGFjaGVkSGVhZCB0byBmYWxzZQorCisJSEVBRCBpcyBub3cgYXQgXCRjb21taXQuLi4gdGhyZWUKKwlFT0YKKworCSMgVGhlIHJlbWFpbmluZyBvbmVzIGp1c3Qgc2hvdyBpbmZvIGFib3V0IHByZXZpb3VzIGFuZCBjdXJyZW50IEhFQURzLgorCWNhdCA+Mm5kX2RldGFjaCA8PC1FT0YgJiYKKwlQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyBcJGNvbW1pdC4uLiB0aHJlZQorCUhFQUQgaXMgbm93IGF0IFwkY29tbWl0Mi4uLiB0d28KKwlFT0YKKworCWNhdCA+M3JkX2RldGFjaCA8PC1FT0YgJiYKKwlQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyBcJGNvbW1pdDIuLi4gdHdvCisJSEVBRCBpcyBub3cgYXQgXCRjb21taXQzLi4uIG9uZQorCUVPRgorCisJcmVzZXQgJiYKKwljaGVja19ub3RfZGV0YWNoZWQgJiYKKworCSMgVmFyaW91cyB3YXlzIG9mIGFza2luZyBmb3IgZWxsaXBzZXMuLi4KKwkjIFRoZSB1c2VyIGNhbiBqdXN0IHVzZSBhbnkga2luZCBvZiBxdW90aW5nIChpbmNsdWRpbmcgbm9uZSkuCisKKwlHSVRfUFJJTlRfU0hBMV9FTExJUFNJUz15ZXMgZ2l0IC1jICdjb3JlLmFiYnJldj0xMicgY2hlY2tvdXQgSEVBRF4gPmFjdHVhbCAyPiYxICYmCisJY2hlY2tfZGV0YWNoZWQgJiYKKwl0ZXN0X2kxOG5jbXAgMXN0X2RldGFjaCBhY3R1YWwgJiYKKworCUdJVF9QUklOVF9TSEExX0VMTElQU0lTPVllcyBnaXQgLWMgJ2NvcmUuYWJicmV2PTEyJyBjaGVja291dCBIRUFEXiA+YWN0dWFsIDI+JjEgJiYKKwljaGVja19kZXRhY2hlZCAmJgorCXRlc3RfaTE4bmNtcCAybmRfZGV0YWNoIGFjdHVhbCAmJgorCisJR0lUX1BSSU5UX1NIQTFfRUxMSVBTSVM9WUVTIGdpdCAtYyAnY29yZS5hYmJyZXY9MTInIGNoZWNrb3V0IEhFQUReID5hY3R1YWwgMj4mMSAmJgorCWNoZWNrX2RldGFjaGVkICYmCisJdGVzdF9pMThuY21wIDNyZF9kZXRhY2ggYWN0dWFsICYmCisKKwl0cnVlCisiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAyMS1jaGVja291dC1vdmVyd3JpdGUuc2ggYi90L3QyMDIxLWNoZWNrb3V0LW92ZXJ3cml0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMmFkYTdkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAyMS1jaGVja291dC1vdmVyd3JpdGUuc2gKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0IG11c3Qgbm90IG92ZXJ3cml0ZSBhbiB1bnRyYWNrZWQgb2JqZWN0cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJbWtkaXIgLXAgYS9iL2MgJiYKKwk+YS9iL2MvZCAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwlnaXQgdGFnIHN0YXJ0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBhIGNvbW1pdCB3aGVyZSBkaXIgYS9iIGNoYW5nZWQgdG8gZmlsZScgJworCisJZ2l0IGNoZWNrb3V0IC1iIGZpbGUgJiYKKwlybSAtcmYgYS9iICYmCisJPmEvYiAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJkaXIgdG8gZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgY29tbWl0IHdpdGggZGlyIG11c3Qgbm90IHJlbW92ZSB1bnRyYWNrZWQgYS9iJyAnCisKKwlnaXQgcm0gLS1jYWNoZWQgYS9iICYmCisJZ2l0IGNvbW1pdCAtbSAidW4tdHJhY2sgdGhlIGZpbGUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IHN0YXJ0ICYmCisJdGVzdCAtZiBhL2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGEgY29tbWl0IHdoZXJlIGRpciBhL2IgY2hhbmdlZCB0byBzeW1saW5rJyAnCisKKwlybSAtcmYgYS9iICYmCSMgY2xlYW51cCBpZiBwcmV2aW91cyB0ZXN0IGZhaWxlZAorCWdpdCBjaGVja291dCAtZiAtYiBzeW1saW5rIHN0YXJ0ICYmCisJcm0gLXJmIGEvYiAmJgorCWdpdCBhZGQgLUEgJiYKKwl0ZXN0X2xuX3NfYWRkIGZvbyBhL2IgJiYKKwlnaXQgY29tbWl0IC1tICJkaXIgdG8gc3ltbGluayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgY29tbWl0IHdpdGggZGlyIG11c3Qgbm90IHJlbW92ZSB1bnRyYWNrZWQgYS9iJyAnCisKKwlnaXQgcm0gLS1jYWNoZWQgYS9iICYmCisJZ2l0IGNvbW1pdCAtbSAidW4tdHJhY2sgdGhlIHN5bWxpbmsiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IHN0YXJ0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3RoZSBzeW1saW5rIHJlbWFpbmVkJyAnCisKKwl0ZXN0IC1oIGEvYgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMjItY2hlY2tvdXQtcGF0aHMuc2ggYi90L3QyMDIyLWNoZWNrb3V0LXBhdGhzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4NDRhZmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDIyLWNoZWNrb3V0LXBhdGhzLnNoCkBAIC0wLDAgKzEsOTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCAkdHJlZSAtLSAkcGF0aHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgZGlyICYmCisJPmRpci9tYXN0ZXIgJiYKKwllY2hvIGNvbW1vbiA+ZGlyL2NvbW1vbiAmJgorCWdpdCBhZGQgZGlyL21hc3RlciBkaXIvY29tbW9uICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIm1hc3RlciBoYXMgZGlyL21hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV4dCAmJgorCWdpdCBtdiBkaXIvbWFzdGVyIGRpci9uZXh0MCAmJgorCWVjaG8gbmV4dCA+ZGlyL25leHQxICYmCisJZ2l0IGFkZCBkaXIgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAibmV4dCBoYXMgZGlyL25leHQgYnV0IG5vdCBkaXIvbWFzdGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyBvdXQgcGF0aHMgb3V0IG9mIGEgdHJlZSBkb2VzIG5vdCBjbG9iYmVyIHVucmVsYXRlZCBwYXRocycgJworCWdpdCBjaGVja291dCBuZXh0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIGRpci9uZXh0MCAmJgorCWNhdCBkaXIvY29tbW9uID5leHBlY3QuY29tbW9uICYmCisJZWNobyBtb2RpZmllZCA+ZXhwZWN0Lm5leHQxICYmCisJY2F0IGV4cGVjdC5uZXh0MSA+ZGlyL25leHQxICYmCisJZWNobyB1bnRyYWNrZWQgPmV4cGVjdC5uZXh0MiAmJgorCWNhdCBleHBlY3QubmV4dDIgPmRpci9uZXh0MiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciBkaXIgJiYKKworCXRlc3RfY21wIGV4cGVjdC5jb21tb24gZGlyL2NvbW1vbiAmJgorCXRlc3RfcGF0aF9pc19maWxlIGRpci9tYXN0ZXIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXIgZGlyL21hc3RlciAmJgorCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlyL25leHQwICYmCisJdGVzdF9jbXAgZXhwZWN0Lm5leHQxIGRpci9uZXh0MSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGRpci9uZXh0MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZGlyL25leHQyICYmCisJdGVzdF9jbXAgZXhwZWN0Lm5leHQyIGRpci9uZXh0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgdG91Y2ggdW5tZXJnZWQgZW50cmllcyBtYXRjaGluZyAkcGF0aCBidXQgbm90IGluICR0cmVlJyAnCisJZ2l0IGNoZWNrb3V0IG5leHQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwljYXQgZGlyL2NvbW1vbiA+ZXhwZWN0LmNvbW1vbiAmJgorCUVNUFRZX1NIQTE9JChnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiA8L2Rldi9udWxsKSAmJgorCWdpdCBybSBkaXIvbmV4dDAgJiYKKwljYXQgPmV4cGVjdC5uZXh0MCA8PC1FT0YgJiYKKwkxMDA2NDQgJEVNUFRZX1NIQTEgMQlkaXIvbmV4dDAKKwkxMDA2NDQgJEVNUFRZX1NIQTEgMglkaXIvbmV4dDAKKwlFT0YKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8ZXhwZWN0Lm5leHQwICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyIGRpciAmJgorCisJdGVzdF9jbXAgZXhwZWN0LmNvbW1vbiBkaXIvY29tbW9uICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyL21hc3RlciAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlciBkaXIvbWFzdGVyICYmCisJZ2l0IGxzLWZpbGVzIC1zIGRpci9uZXh0MCA+YWN0dWFsLm5leHQwICYmCisJdGVzdF9jbXAgZXhwZWN0Lm5leHQwIGFjdHVhbC5uZXh0MAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgdG91Y2ggZmlsZXMgdGhhdCBhcmUgYWxyZWFkeSB1cC10by1kYXRlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gb25lID5maWxlMSAmJgorCWVjaG8gdHdvID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwllY2hvIG1vZGlmaWVkID5maWxlMSAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0xMDAwMDAwMDAwIGZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2ggJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCAtLSBmaWxlMSBmaWxlMiAmJgorCWVjaG8gb25lID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTEgJiYKKwllY2hvICIxMDAwMDAwMDAwIiA+ZXhwZWN0ICYmCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgZmlsZTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgSEVBRCBhZGRzIGRlbGV0ZWQgaW50ZW50LXRvLWFkZCBmaWxlIGJhY2sgdG8gaW5kZXgnICcKKwllY2hvICJub25lbXB0eSIgPm5vbmVtcHR5ICYmCisJPmVtcHR5ICYmCisJZ2l0IGFkZCBub25lbXB0eSBlbXB0eSAmJgorCWdpdCBjb21taXQgLW0gImNyZWF0ZSBmaWxlcyB0byBiZSBkZWxldGVkIiAmJgorCWdpdCBybSAtLWNhY2hlZCBub25lbXB0eSBlbXB0eSAmJgorCWdpdCBhZGQgLU4gbm9uZW1wdHkgZW1wdHkgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCBub25lbXB0eSBlbXB0eSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAyMy1jaGVja291dC1tLnNoIGIvdC90MjAyMy1jaGVja291dC1tLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZjYTNmODUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDIzLWNoZWNrb3V0LW0uc2gKQEAgLTAsMCArMSw3MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0IC1tIC0tIDxjb25mbGljdGVkIHBhdGg+CisKK0Vuc3VyZXMgdGhhdCBjaGVja291dCAtbSBvbiBhIHJlc29sdmVkIGZpbGUgcmVzdG9yZXMgdGhlIGNvbmZsaWN0ZWQgZmlsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfdGljayAmJgorCXRlc3RfY29tbWl0IGJvdGgudHh0IGJvdGgudHh0IGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHRvcGljICYmCisJdGVzdF9jb21taXQgbW9kaWZpZWRfaW5fbWFzdGVyIGJvdGgudHh0IGluX21hc3RlciAmJgorCXRlc3RfY29tbWl0IGFkZGVkX2luX21hc3RlciBlYWNoLnR4dCBpbl9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwl0ZXN0X2NvbW1pdCBtb2RpZmllZF9pbl90b3BpYyBib3RoLnR4dCBpbl90b3BpYyAmJgorCXRlc3RfY29tbWl0IGFkZGVkX2luX3RvcGljIGVhY2gudHh0IGluX3RvcGljCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtZXJnZSBtYXN0ZXInICcKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyCisnCisKK2NsZWFuX2JyYW5jaG5hbWVzICgpIHsKKwkjIFJlbW92ZSBicmFuY2ggbmFtZXMgYWZ0ZXIgY29uZmxpY3QgbGluZXMKKwlzZWQgJ3MvXlwoWzw+XVx7NSxcfVwpIC4qJC9cMS8nCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1tIHJlc3RvcmVzIDItd2F5IGNvbmZsaWN0ZWQrcmVzb2x2ZWQgZmlsZScgJworCWNwIGVhY2gudHh0IGVhY2gudHh0LmNvbmZsaWN0ZWQgJiYKKwllY2hvIHJlc29sdmVkID5lYWNoLnR4dCAmJgorCWdpdCBhZGQgZWFjaC50eHQgJiYKKwlnaXQgY2hlY2tvdXQgLW0gLS0gZWFjaC50eHQgJiYKKwljbGVhbl9icmFuY2huYW1lcyA8ZWFjaC50eHQgPmVhY2gudHh0LmNsZWFuZWQgJiYKKwljbGVhbl9icmFuY2huYW1lcyA8ZWFjaC50eHQuY29uZmxpY3RlZCA+ZWFjaC50eHQuY29uZmxpY3RlZC5jbGVhbmVkICYmCisJdGVzdF9jbXAgZWFjaC50eHQuY29uZmxpY3RlZC5jbGVhbmVkIGVhY2gudHh0LmNsZWFuZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLW0gcmVzdG9yZXMgMy13YXkgY29uZmxpY3RlZCtyZXNvbHZlZCBmaWxlJyAnCisJY3AgYm90aC50eHQgYm90aC50eHQuY29uZmxpY3RlZCAmJgorCWVjaG8gcmVzb2x2ZWQgPmJvdGgudHh0ICYmCisJZ2l0IGFkZCBib3RoLnR4dCAmJgorCWdpdCBjaGVja291dCAtbSAtLSBib3RoLnR4dCAmJgorCWNsZWFuX2JyYW5jaG5hbWVzIDxib3RoLnR4dCA+Ym90aC50eHQuY2xlYW5lZCAmJgorCWNsZWFuX2JyYW5jaG5hbWVzIDxib3RoLnR4dC5jb25mbGljdGVkID5ib3RoLnR4dC5jb25mbGljdGVkLmNsZWFuZWQgJiYKKwl0ZXN0X2NtcCBib3RoLnR4dC5jb25mbGljdGVkLmNsZWFuZWQgYm90aC50eHQuY2xlYW5lZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JjZSBjaGVja291dCBhIGNvbmZsaWN0IGZpbGUgY3JlYXRlcyBzdGFnZSB6ZXJvIGVudHJ5JyAnCisJZ2l0IGluaXQgY28tZm9yY2UgJiYKKwkoCisJCWNkIGNvLWZvcmNlICYmCisJCWVjaG8gYSA+YSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtYW1hICYmCisJCUFfT0JKPSQoZ2l0IHJldi1wYXJzZSA6YSkgJiYKKwkJZ2l0IGJyYW5jaCB0b3BpYyAmJgorCQllY2hvIGIgPmEgJiYKKwkJZ2l0IGNvbW1pdCAtYW1iICYmCisJCUJfT0JKPSQoZ2l0IHJldi1wYXJzZSA6YSkgJiYKKwkJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJCWVjaG8gYyA+YSAmJgorCQlDX09CSj0kKGdpdCBoYXNoLW9iamVjdCBhKSAmJgorCQlnaXQgY2hlY2tvdXQgLW0gbWFzdGVyICYmCisJCXRlc3RfY21wX3JldiA6MTphICRBX09CSiAmJgorCQl0ZXN0X2NtcF9yZXYgOjI6YSAkQl9PQkogJiYKKwkJdGVzdF9jbXBfcmV2IDozOmEgJENfT0JKICYmCisJCWdpdCBjaGVja291dCAtZiB0b3BpYyAmJgorCQl0ZXN0X2NtcF9yZXYgOjA6YSAkQV9PQkoKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAyNC1jaGVja291dC1kd2ltLnNoIGIvdC90MjAyNC1jaGVja291dC1kd2ltLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFjY2ZhOWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDI0LWNoZWNrb3V0LWR3aW0uc2gKQEAgLTAsMCArMSwzMzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCA8YnJhbmNoPgorCitFbnN1cmVzIHRoYXQgY2hlY2tvdXQgb24gYW4gdW5ib3JuIGJyYW5jaCBkb2VzIHdoYXQgdGhlIHVzZXIgZXhwZWN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgSXMgdGhlIGN1cnJlbnQgYnJhbmNoICJyZWZzL2hlYWRzLyQxIj8KK3Rlc3RfYnJhbmNoICgpIHsKKwlwcmludGYgIiVzXG4iICJyZWZzL2hlYWRzLyQxIiA+ZXhwZWN0LkhFQUQgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbC5IRUFEICYmCisJdGVzdF9jbXAgZXhwZWN0LkhFQUQgYWN0dWFsLkhFQUQKK30KKworIyBJcyBicmFuY2ggInJlZnMvaGVhZHMvJDEiIHNldCB0byBwdWxsIGZyb20gIiQyLyQzIj8KK3Rlc3RfYnJhbmNoX3Vwc3RyZWFtICgpIHsKKwlwcmludGYgIiVzXG4iICIkMiIgInJlZnMvaGVhZHMvJDMiID5leHBlY3QudXBzdHJlYW0gJiYKKwl7CisJCWdpdCBjb25maWcgImJyYW5jaC4kMS5yZW1vdGUiICYmCisJCWdpdCBjb25maWcgImJyYW5jaC4kMS5tZXJnZSIKKwl9ID5hY3R1YWwudXBzdHJlYW0gJiYKKwl0ZXN0X2NtcCBleHBlY3QudXBzdHJlYW0gYWN0dWFsLnVwc3RyZWFtCit9CisKK3N0YXR1c191bm9faXNfY2xlYW4gKCkgeworCWdpdCBzdGF0dXMgLXVubyAtLXBvcmNlbGFpbiA+c3RhdHVzLmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBzdGF0dXMuYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgbXlfbWFzdGVyICYmCisJZ2l0IGluaXQgcmVwb19hICYmCisJKAorCQljZCByZXBvX2EgJiYKKwkJdGVzdF9jb21taXQgYV9tYXN0ZXIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGZvbyAmJgorCQl0ZXN0X2NvbW1pdCBhX2ZvbyAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYmFyICYmCisJCXRlc3RfY29tbWl0IGFfYmFyICYmCisJCWdpdCBjaGVja291dCAtYiBhbWJpZ3VvdXNfYnJhbmNoX2FuZF9maWxlICYmCisJCXRlc3RfY29tbWl0IGFfYW1iaWd1b3VzX2JyYW5jaF9hbmRfZmlsZQorCSkgJiYKKwlnaXQgaW5pdCByZXBvX2IgJiYKKwkoCisJCWNkIHJlcG9fYiAmJgorCQl0ZXN0X2NvbW1pdCBiX21hc3RlciAmJgorCQlnaXQgY2hlY2tvdXQgLWIgZm9vICYmCisJCXRlc3RfY29tbWl0IGJfZm9vICYmCisJCWdpdCBjaGVja291dCAtYiBiYXogJiYKKwkJdGVzdF9jb21taXQgYl9iYXogJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGFtYmlndW91c19icmFuY2hfYW5kX2ZpbGUgJiYKKwkJdGVzdF9jb21taXQgYl9hbWJpZ3VvdXNfYnJhbmNoX2FuZF9maWxlCisJKSAmJgorCWdpdCByZW1vdGUgYWRkIHJlcG9fYSByZXBvX2EgJiYKKwlnaXQgcmVtb3RlIGFkZCByZXBvX2IgcmVwb19iICYmCisJZ2l0IGNvbmZpZyByZW1vdGUucmVwb19iLmZldGNoIFwKKwkJIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL290aGVyX2IvKiIgJiYKKwlnaXQgZmV0Y2ggLS1hbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb2Ygbm9uLWV4aXN0aW5nIGJyYW5jaCBmYWlscycgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCB4eXp6eSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IHh5enp5ICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy94eXp6eSAmJgorCXRlc3RfYnJhbmNoIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvZiBicmFuY2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIGZhaWxzICMxJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGZvbyAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IGZvbyAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvZm9vICYmCisJdGVzdF9icmFuY2ggbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doZW4gYXJnIG1hdGNoZXMgbXVsdGlwbGUgcmVtb3RlcywgZG8gbm90IGZhbGxiYWNrIHRvIGludGVycHJldGluZyBhcyBwYXRoc3BlYycgJworCSMgY3JlYXRlIGEgZmlsZSB3aXRoIG5hbWUgbWF0Y2hpbmcgcmVtb3RlIGJyYW5jaCBuYW1lCisJZ2l0IGNoZWNrb3V0IC1iIHRfYW1iaWd1b3VzX2JyYW5jaF9hbmRfZmlsZSAmJgorCT5hbWJpZ3VvdXNfYnJhbmNoX2FuZF9maWxlICYmCisJZ2l0IGFkZCBhbWJpZ3VvdXNfYnJhbmNoX2FuZF9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYW1iaWd1b3VzX2JyYW5jaF9hbmRfZmlsZSIgJiYKKworCSMgbW9kaWZ5IGZpbGUgdG8gdmVyaWZ5IHRoYXQgaXQgd2lsbCBub3QgYmUgdG91Y2hlZCBieSBjaGVja291dAorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC0tIGFtYmlndW91c19icmFuY2hfYW5kX2ZpbGUiICYmCisJZWNobyAiZmlsZSBjb250ZW50cyIgPmFtYmlndW91c19icmFuY2hfYW5kX2ZpbGUgJiYKKwljcCBhbWJpZ3VvdXNfYnJhbmNoX2FuZF9maWxlIGV4cGVjdCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IGFtYmlndW91c19icmFuY2hfYW5kX2ZpbGUgMj5lcnIgJiYKKworCXRlc3RfaTE4bmdyZXAgIm1hdGNoZWQgbXVsdGlwbGUgKDIpIHJlbW90ZSB0cmFja2luZyBicmFuY2hlcyIgZXJyICYmCisKKwkjIGZpbGUgbXVzdCBub3QgYmUgYWx0ZXJlZAorCXRlc3RfY21wIGV4cGVjdCBhbWJpZ3VvdXNfYnJhbmNoX2FuZF9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIGJyYW5jaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMgZmFpbHMgd2l0aCBhZHZpY2UnICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgZm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IGZvbyAyPnN0ZGVyciAmJgorCXRlc3RfYnJhbmNoIG1hc3RlciAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X2kxOG5ncmVwICJeaGludDogIiBzdGRlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgYWR2aWNlLmNoZWNrb3V0QW1iaWd1b3VzUmVtb3RlQnJhbmNoTmFtZT1mYWxzZSBcCisJCWNoZWNrb3V0IGZvbyAyPnN0ZGVyciAmJgorCXRlc3RfYnJhbmNoIG1hc3RlciAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X2kxOG5ncmVwICEgIl5oaW50OiAiIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NoZWNrb3V0IC1wIHdpdGggbXVsdGlwbGUgcmVtb3RlcyBkb2VzIG5vdCBwcmludCBhZHZpY2UnICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgZm9vICYmCisKKwlnaXQgY2hlY2tvdXQgLXAgZm9vIDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJeaGludDogIiBzdGRlcnIgJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIGJyYW5jaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMgc3VjY2VlZHMgd2l0aCBjaGVja291dC5kZWZhdWx0UmVtb3RlICMxJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBmb28gJiYKKworCWdpdCAtYyBjaGVja291dC5kZWZhdWx0UmVtb3RlPXJlcG9fYSBjaGVja291dCBmb28gJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9icmFuY2ggZm9vICYmCisJdGVzdF9jbXBfcmV2IHJlbW90ZXMvcmVwb19hL2ZvbyBIRUFEICYmCisJdGVzdF9icmFuY2hfdXBzdHJlYW0gZm9vIHJlcG9fYSBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb2YgYnJhbmNoIGZyb20gYSBzaW5nbGUgcmVtb3RlIHN1Y2NlZWRzICMxJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGJhciAmJgorCisJZ2l0IGNoZWNrb3V0IGJhciAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X2JyYW5jaCBiYXIgJiYKKwl0ZXN0X2NtcF9yZXYgcmVtb3Rlcy9yZXBvX2EvYmFyIEhFQUQgJiYKKwl0ZXN0X2JyYW5jaF91cHN0cmVhbSBiYXIgcmVwb19hIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvZiBicmFuY2ggZnJvbSBhIHNpbmdsZSByZW1vdGUgc3VjY2VlZHMgIzInICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgYmF6ICYmCisKKwlnaXQgY2hlY2tvdXQgYmF6ICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCXRlc3RfYnJhbmNoIGJheiAmJgorCXRlc3RfY21wX3JldiByZW1vdGVzL290aGVyX2IvYmF6IEhFQUQgJiYKKwl0ZXN0X2JyYW5jaF91cHN0cmVhbSBiYXogcmVwb19iIGJhegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLWd1ZXNzIHN1cHByZXNzZXMgYnJhbmNoIGF1dG8tdml2aWZpY2F0aW9uJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBiYXIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLW5vLWd1ZXNzIGJhciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9iYXIgJiYKKwl0ZXN0X2JyYW5jaCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbW9yZSByZW1vdGVzIHdpdGggdW5jb252ZW50aW9uYWwgcmVmc3BlY3MnICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCWdpdCBpbml0IHJlcG9fYyAmJgorCSgKKwkJY2QgcmVwb19jICYmCisJCXRlc3RfY29tbWl0IGNfbWFzdGVyICYmCisJCWdpdCBjaGVja291dCAtYiBiYXIgJiYKKwkJdGVzdF9jb21taXQgY19iYXIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHNwYW0gJiYKKwkJdGVzdF9jb21taXQgY19zcGFtCisJKSAmJgorCWdpdCBpbml0IHJlcG9fZCAmJgorCSgKKwkJY2QgcmVwb19kICYmCisJCXRlc3RfY29tbWl0IGRfbWFzdGVyICYmCisJCWdpdCBjaGVja291dCAtYiBiYXogJiYKKwkJdGVzdF9jb21taXQgZF9iYXogJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGVnZ3MgJiYKKwkJdGVzdF9jb21taXQgZF9lZ2dzCisJKSAmJgorCWdpdCByZW1vdGUgYWRkIHJlcG9fYyByZXBvX2MgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5yZXBvX2MuZmV0Y2ggXAorCQkiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvZXh0cmFfZGlyL3JlcG9fYy9leHRyYV9kaXIvKiIgJiYKKwlnaXQgcmVtb3RlIGFkZCByZXBvX2QgcmVwb19kICYmCisJZ2l0IGNvbmZpZyByZW1vdGUucmVwb19kLmZldGNoIFwKKwkJIityZWZzL2hlYWRzLyo6cmVmcy9yZXBvX2QvKiIgJiYKKwlnaXQgZmV0Y2ggLS1hbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb2YgYnJhbmNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyBmYWlscyAjMicgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgYmFyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgYmFyICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9iYXIgJiYKKwl0ZXN0X2JyYW5jaCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb2YgYnJhbmNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyBmYWlscyAjMycgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgYmF6ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgYmF6ICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9iYXogJiYKKwl0ZXN0X2JyYW5jaCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb2YgYnJhbmNoIGZyb20gYSBzaW5nbGUgcmVtb3RlIHN1Y2NlZWRzICMzJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBzcGFtICYmCisKKwlnaXQgY2hlY2tvdXQgc3BhbSAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X2JyYW5jaCBzcGFtICYmCisJdGVzdF9jbXBfcmV2IHJlZnMvcmVtb3Rlcy9leHRyYV9kaXIvcmVwb19jL2V4dHJhX2Rpci9zcGFtIEhFQUQgJiYKKwl0ZXN0X2JyYW5jaF91cHN0cmVhbSBzcGFtIHJlcG9fYyBzcGFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIGJyYW5jaCBmcm9tIGEgc2luZ2xlIHJlbW90ZSBzdWNjZWVkcyAjNCcgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgZWdncyAmJgorCisJZ2l0IGNoZWNrb3V0IGVnZ3MgJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9icmFuY2ggZWdncyAmJgorCXRlc3RfY21wX3JldiByZWZzL3JlcG9fZC9lZ2dzIEhFQUQgJiYKKwl0ZXN0X2JyYW5jaF91cHN0cmVhbSBlZ2dzIHJlcG9fZCBlZ2dzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIGJyYW5jaCB3aXRoIGEgZmlsZSBoYXZpbmcgdGhlIHNhbWUgbmFtZSBmYWlscycgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgc3BhbSAmJgorCisJPnNwYW0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgc3BhbSAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvc3BhbSAmJgorCXRlc3RfYnJhbmNoIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvZiBicmFuY2ggd2l0aCBhIGZpbGUgaW4gc3ViZGlyIGhhdmluZyB0aGUgc2FtZSBuYW1lIGZhaWxzJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBzcGFtICYmCisKKwk+c3BhbSAmJgorCW1rZGlyIHN1YiAmJgorCW12IHNwYW0gc3ViL3NwYW0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc3ViIGNoZWNrb3V0IHNwYW0gJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3NwYW0gJiYKKwl0ZXN0X2JyYW5jaCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgPGJyYW5jaD4gLS0gc3VjY2VlZHMsIGV2ZW4gaWYgYSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBleGlzdHMnICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIHNwYW0gJiYKKworCT5zcGFtICYmCisJZ2l0IGNoZWNrb3V0IHNwYW0gLS0gJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9icmFuY2ggc3BhbSAmJgorCXRlc3RfY21wX3JldiByZWZzL3JlbW90ZXMvZXh0cmFfZGlyL3JlcG9fYy9leHRyYV9kaXIvc3BhbSBIRUFEICYmCisJdGVzdF9icmFuY2hfdXBzdHJlYW0gc3BhbSByZXBvX2Mgc3BhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb29zZWx5IGRlZmluZWQgbG9jYWwgYmFzZSBicmFuY2ggaXMgcmVwb3J0ZWQgY29ycmVjdGx5JyAnCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCWdpdCBicmFuY2ggc3RyaWN0ICYmCisJZ2l0IGJyYW5jaCBsb29zZSAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiYSBiaXQgbW9yZSIgJiYKKworCXRlc3RfY29uZmlnIGJyYW5jaC5zdHJpY3QucmVtb3RlIC4gJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubG9vc2UucmVtb3RlIC4gJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2guc3RyaWN0Lm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdF9jb25maWcgYnJhbmNoLmxvb3NlLm1lcmdlIG1hc3RlciAmJgorCisJZ2l0IGNoZWNrb3V0IHN0cmljdCB8IHNlZCAtZSAicy9zdHJpY3QvQlJBTkNITkFNRS9nIiA+ZXhwZWN0ICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCWdpdCBjaGVja291dCBsb29zZSB8IHNlZCAtZSAicy9sb29zZS9CUkFOQ0hOQU1FL2ciID5hY3R1YWwgJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdCB3aGVuIGFyZyBjb3VsZCBiZSBwYXJ0IG9mIGR3aW0gYnJhbmNoJyAnCisJZ2l0IHJlbW90ZSBhZGQgZm9vIGZpbGU6Ly9ub24tZXhpc3RlbnQtcGxhY2UgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvZm9vL2R3aW0tYXJnIEhFQUQgJiYKKwllY2hvIGZvbyA+ZHdpbS1hcmcgJiYKKwlnaXQgYWRkIGR3aW0tYXJnICYmCisJZWNobyBiYXIgPmR3aW0tYXJnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IGR3aW0tYXJnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL2R3aW0tYXJnIC0tICYmCisJZ3JlcCBiYXIgZHdpbS1hcmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRlIGR3aW0gYnJhbmNoIGFuZCBjaGVja291dCBwYXRoICgxKScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9mb28vZHdpbS1hcmcxIEhFQUQgJiYKKwllY2hvIGZvbyA+ZHdpbS1hcmcxICYmCisJZ2l0IGFkZCBkd2ltLWFyZzEgJiYKKwllY2hvIGJhciA+ZHdpbS1hcmcxICYmCisJZ2l0IGNoZWNrb3V0IC0tIGR3aW0tYXJnMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9kd2ltLWFyZzEgLS0gJiYKKwlncmVwIGZvbyBkd2ltLWFyZzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRlIGR3aW0gYnJhbmNoIGFuZCBjaGVja291dCBwYXRoICgyKScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9mb28vZHdpbS1hcmcyIEhFQUQgJiYKKwllY2hvIGZvbyA+ZHdpbS1hcmcyICYmCisJZ2l0IGFkZCBkd2ltLWFyZzIgJiYKKwllY2hvIGJhciA+ZHdpbS1hcmcyICYmCisJZ2l0IGNoZWNrb3V0IGR3aW0tYXJnMiAtLSAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9kd2ltLWFyZzIgLS0gJiYKKwlncmVwIGJhciBkd2ltLWFyZzIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDI1LWNoZWNrb3V0LW5vLW92ZXJsYXkuc2ggYi90L3QyMDI1LWNoZWNrb3V0LW5vLW92ZXJsYXkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzYzMzBjYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMjUtY2hlY2tvdXQtbm8tb3ZlcmxheS5zaApAQCAtMCwwICsxLDQ3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgLS1uby1vdmVybGF5IDx0cmVlLWlzaD4gLS0gPHBhdGhzcGVjPicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJpbml0aWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLW5vLW92ZXJsYXkgZGVsZXRlcyBmaWxlcyBub3QgaW4gPHRyZWUtaXNoPicgJworCT5maWxlICYmCisJbWtkaXIgZGlyICYmCisJPmRpci9maWxlMSAmJgorCWdpdCBhZGQgZmlsZSBkaXIvZmlsZTEgJiYKKwlnaXQgY2hlY2tvdXQgLS1uby1vdmVybGF5IEhFQUQgLS0gZmlsZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIvZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1uby1vdmVybGF5IHJlbW92aW5nIGxhc3QgZmlsZSBmcm9tIGRpcmVjdG9yeScgJworCWdpdCBjaGVja291dCAtLW5vLW92ZXJsYXkgSEVBRCAtLSBkaXIvZmlsZTEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLXAgLS1vdmVybGF5IGlzIGRpc2FsbG93ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLXAgLS1vdmVybGF5IEhFQUQgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJmYXRhbDogLXAgYW5kIC0tb3ZlcmxheSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1vdmVybGF5IC0tdGhlaXJzIHdpdGggRC9GIGNvbmZsaWN0IGRlbGV0ZXMgZmlsZScgJworCXRlc3RfY29tbWl0IGZpbGUxIGZpbGUxICYmCisJdGVzdF9jb21taXQgZmlsZTIgZmlsZTIgJiYKKwlnaXQgcm0gLS1jYWNoZWQgZmlsZTEgJiYKKwllY2hvIDEyMzQgPmZpbGUxICYmCisJRjE9JChnaXQgcmV2LXBhcnNlIEhFQUQ6ZmlsZTEpICYmCisJRjI9JChnaXQgcmV2LXBhcnNlIEhFQUQ6ZmlsZTIpICYmCisJeworCQllY2hvICIxMDA2NDQgJEYxIDEJZmlsZTEiICYmCisJCWVjaG8gIjEwMDY0NCAkRjIgMglmaWxlMSIKKwl9IHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCWdpdCBjaGVja291dCAtLXRoZWlycyAtLW5vLW92ZXJsYXkgLS0gZmlsZTEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMjYtY2hlY2tvdXQtcGF0aHNwZWMtZmlsZS5zaCBiL3QvdDIwMjYtY2hlY2tvdXQtcGF0aHNwZWMtZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40M2QzMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAyNi1jaGVja291dC1wYXRoc3BlYy1maWxlLnNoCkBAIC0wLDAgKzEsMTYzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgLS1wYXRoc3BlYy1mcm9tLWZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3RpY2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgZmlsZTAgJiYKKworCWVjaG8gMSA+ZmlsZUEudCAmJgorCWVjaG8gMSA+ZmlsZUIudCAmJgorCWVjaG8gMSA+ZmlsZUMudCAmJgorCWVjaG8gMSA+ZmlsZUQudCAmJgorCWdpdCBhZGQgZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudCAmJgorCWdpdCBjb21taXQgLW0gImZpbGVzIDEiICYmCisKKwllY2hvIDIgPmZpbGVBLnQgJiYKKwllY2hvIDIgPmZpbGVCLnQgJiYKKwllY2hvIDIgPmZpbGVDLnQgJiYKKwllY2hvIDIgPmZpbGVELnQgJiYKKwlnaXQgYWRkIGZpbGVBLnQgZmlsZUIudCBmaWxlQy50IGZpbGVELnQgJiYKKwlnaXQgY29tbWl0IC1tICJmaWxlcyAyIiAmJgorCisJZ2l0IHRhZyBjaGVja3BvaW50CisnCisKK3Jlc3RvcmVfY2hlY2twb2ludCAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCBjaGVja3BvaW50Cit9CisKK3ZlcmlmeV9leHBlY3QgKCkgeworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS11bnRyYWNrZWQtZmlsZXM9bm8gLS0gZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBmcm9tIHN0ZGluJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwllY2hvIGZpbGVBLnQgfCBnaXQgY2hlY2tvdXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSBIRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlNICBmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBmcm9tIGZpbGUnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWVjaG8gZmlsZUEudCA+bGlzdCAmJgorCWdpdCBjaGVja291dCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IEhFQUReMSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU0gIGZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTCBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcMGZpbGVCLnRcMCIgfCBnaXQgY2hlY2tvdXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtLXBhdGhzcGVjLWZpbGUtbnVsIEhFQUReMSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU0gIGZpbGVBLnQKKwlNICBmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMRiBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnRcbiIgfCBnaXQgY2hlY2tvdXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSBIRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlNICBmaWxlQS50CisJTSAgZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gdHJhaWxpbmcgZGVsaW1pdGVyJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnQiIHwgZ2l0IGNoZWNrb3V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gSEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJTSAgZmlsZUEudAorCU0gIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NSTEYgZGVsaW1pdGVycycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XHJcbmZpbGVCLnRcclxuIiB8IGdpdCBjaGVja291dCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIEhFQUReMSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU0gIGZpbGVBLnQKKwlNICBmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWNhdCA+bGlzdCA8PC1cRU9GICYmCisJImZpbGVcMTAxLnQiCisJRU9GCisKKwlnaXQgY2hlY2tvdXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCBIRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlNICBmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMgbm90IGNvbXBhdGlibGUgd2l0aCAtLXBhdGhzcGVjLWZpbGUtbnVsJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwljYXQgPmxpc3QgPDwtXEVPRiAmJgorCSJmaWxlXDEwMS50IgorCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1wYXRoc3BlYy1maWxlLW51bCBIRUFEXjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25seSB0b3VjaGVzIHdoYXQgd2FzIGxpc3RlZCcgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQi50XG5maWxlQy50XG4iIHwgZ2l0IGNoZWNrb3V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gSEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJTSAgZmlsZUIudAorCU0gIGZpbGVDLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIGNvbmRpdGlvbnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKwllY2hvIGZpbGVBLnQgPmxpc3QgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tZGV0YWNoIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1kZXRhY2giIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1wYXRjaCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS0gZmlsZUEudCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1wYXRoc3BlYy1maWxlLW51bCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWlyZXMgLS1wYXRoc3BlYy1mcm9tLWZpbGUiIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMzAtdW5yZXNvbHZlLWluZm8uc2ggYi90L3QyMDMwLXVucmVzb2x2ZS1pbmZvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMwOTE5OWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDMwLXVucmVzb2x2ZS1pbmZvLnNoCkBAIC0wLDAgKzEsMTk1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndW5kb2luZyByZXNvbHV0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfcmVzb2x2ZV91bmRvICgpIHsKKwltc2c9JDEKKwlzaGlmdAorCXdoaWxlIGNhc2UgJCMgaW4KKwkwKQlicmVhayA7OworCTF8MnwzKQlkaWUgIkJ1ZyBpbiBjaGVjay1yZXNvbHZlLXVuZG8gdGVzdCIgOzsKKwllc2FjCisJZG8KKwkJcGF0aD0kMQorCQlzaGlmdAorCQlmb3Igc3RhZ2UgaW4gMSAyIDMKKwkJZG8KKwkJCXNoYTE9JDEKKwkJCXNoaWZ0CisJCQljYXNlICIkc2hhMSIgaW4KKwkJCScnKSBjb250aW51ZSA7OworCQkJZXNhYworCQkJc2hhMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRzaGExIikKKwkJCXByaW50ZiAiMTAwNjQ0ICVzICVzXHQlc1xuIiAkc2hhMSAkc3RhZ2UgJHBhdGgKKwkJZG9uZQorCWRvbmUgPiIkbXNnLmV4cGVjdCIgJiYKKwlnaXQgbHMtZmlsZXMgLS1yZXNvbHZlLXVuZG8gPiIkbXNnLmFjdHVhbCIgJiYKKwl0ZXN0X2NtcCAiJG1zZy5leHBlY3QiICIkbXNnLmFjdHVhbCIKK30KKworcHJpbWVfcmVzb2x2ZV91bmRvICgpIHsKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHNlY29uZF4wICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRoaXJkXjAgJiYKKwllY2hvIG1lcmdlIGRvZXMgbm90IGxlYXZlIGFueXRoaW5nICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIGVtcHR5ICYmCisJZWNobyBkaWZmZXJlbnQgPmZpL2xlICYmCisJZ2l0IGFkZCBmaS9sZSAmJgorCWVjaG8gcmVzb2x2aW5nIHJlY29yZHMgJiYKKwljaGVja19yZXNvbHZlX3VuZG8gcmVjb3JkZWQgZmkvbGUgaW5pdGlhbDpmaS9sZSBzZWNvbmQ6ZmkvbGUgdGhpcmQ6ZmkvbGUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgZmkgJiYKKwlwcmludGYgImFcMGEiID5iaW5hcnkgJiYKKwlnaXQgYWRkIGJpbmFyeSAmJgorCXRlc3RfY29tbWl0IGluaXRpYWwgZmkvbGUgZmlyc3QgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwlnaXQgYnJhbmNoIGFub3RoZXIgJiYKKwlwcmludGYgImFcMGIiID5iaW5hcnkgJiYKKwlnaXQgYWRkIGJpbmFyeSAmJgorCXRlc3RfY29tbWl0IHNlY29uZCBmaS9sZSBzZWNvbmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCXRlc3RfY29tbWl0IHRoaXJkIGZpL2xlIHRoaXJkICYmCisJZ2l0IGJyYW5jaCBhZGQtYWRkICYmCisJZ2l0IGNoZWNrb3V0IGFub3RoZXIgJiYKKwl0ZXN0X2NvbW1pdCBmb3VydGggZmkvbGUgZm91cnRoICYmCisJZ2l0IGNoZWNrb3V0IGFkZC1hZGQgJiYKKwl0ZXN0X2NvbW1pdCBmaWZ0aCBhZGQtZGlmZmVyZW50bHkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCByZWNvcmRzIHN3aXRjaCBjbGVhcnMnICcKKwlwcmltZV9yZXNvbHZlX3VuZG8gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG1lcmdlZCAmJgorCWVjaG8gY29tbWl0dGluZyBrZWVwcyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBrZXB0IGZpL2xlIGluaXRpYWw6ZmkvbGUgc2Vjb25kOmZpL2xlIHRoaXJkOmZpL2xlICYmCisJZ2l0IGNoZWNrb3V0IHNlY29uZF4wICYmCisJZWNobyBzd2l0Y2hpbmcgY2xlYXJzICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIGNsZWFyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gcmVjb3JkcyByZXNldCBjbGVhcnMnICcKKwlwcmltZV9yZXNvbHZlX3VuZG8gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG1lcmdlZCAmJgorCWVjaG8gY29tbWl0dGluZyBrZWVwcyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBrZXB0IGZpL2xlIGluaXRpYWw6ZmkvbGUgc2Vjb25kOmZpL2xlIHRoaXJkOmZpL2xlICYmCisKKwllY2hvIG1lcmdlIGNsZWFycyB1cGZyb250ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZvdXJ0aF4wICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIG51a2VkICYmCisKKwlnaXQgcm0gLWYgZmkvbGUgJiYKKwllY2hvIHJlc29sdmluZyByZWNvcmRzICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIHJlY29yZGVkIGZpL2xlIGluaXRpYWw6ZmkvbGUgSEVBRDpmaS9sZSBmb3VydGg6ZmkvbGUgJiYKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIHJlc2V0dGluZyBkaXNjYXJkcyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBkaXNjYXJkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGx1bWJpbmcgY2xlYXJzJyAnCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBtZXJnZWQgJiYKKwllY2hvIGNvbW1pdHRpbmcga2VlcHMgJiYKKwljaGVja19yZXNvbHZlX3VuZG8ga2VwdCBmaS9sZSBpbml0aWFsOmZpL2xlIHNlY29uZDpmaS9sZSB0aGlyZDpmaS9sZSAmJgorCisJZWNobyBwbHVtYmluZyBjbGVhciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1jbGVhci1yZXNvbHZlLXVuZG8gJiYKKwljaGVja19yZXNvbHZlX3VuZG8gY2xlYXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcmVjb3JkcyBjaGVja291dCAtbSB1bmRvZXMnICcKKwlwcmltZV9yZXNvbHZlX3VuZG8gJiYKKwlnaXQgZGlmZiBIRUFEICYmCisJZ2l0IGNoZWNrb3V0IC0tY29uZmxpY3Q9bWVyZ2UgZmkvbGUgJiYKKwllY2hvIGNoZWNrb3V0IHVzZWQgdGhlIHJlY29yZCBhbmQgcmVtb3ZlZCBpdCAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyByZW1vdmVkICYmCisJZWNobyB0aGUgaW5kZXggYW5kIHRoZSB3b3JrIHRyZWUgaXMgdW5tZXJnZWQgYWdhaW4gJiYKKwlnaXQgZGlmZiA+YWN0dWFsICYmCisJZ3JlcCAiXisrPDw8PDw8PCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VubWVyZ2Ugd2l0aCBwbHVtYmluZycgJworCXByaW1lX3Jlc29sdmVfdW5kbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS11bnJlc29sdmUgZmkvbGUgJiYKKwlnaXQgbHMtZmlsZXMgLXUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZSBhbmQgcmVyZXJlIGZvcmdldCcgJworCW1rZGlyIC5naXQvcnItY2FjaGUgJiYKKwlwcmltZV9yZXNvbHZlX3VuZG8gJiYKKwllY2hvIHJlY29yZCB0aGUgcmVzb2x1dGlvbiAmJgorCWdpdCByZXJlcmUgJiYKKwlyZXJlcmVfaWQ9JChjZCAuZ2l0L3JyLWNhY2hlICYmIGVjaG8gKi9wb3N0aW1hZ2UpICYmCisJcmVyZXJlX2lkPSR7cmVyZXJlX2lkJS9wb3N0aW1hZ2V9ICYmCisJdGVzdCAtZiAuZ2l0L3JyLWNhY2hlLyRyZXJlcmVfaWQvcG9zdGltYWdlICYmCisJZ2l0IGNoZWNrb3V0IC1tIGZpL2xlICYmCisJZWNobyByZXN1cnJlY3QgdGhlIGNvbmZsaWN0ICYmCisJZ3JlcCAiXj09PT09PT0iIGZpL2xlICYmCisJZWNobyByZXJlc29sdmUgdGhlIGNvbmZsaWN0ICYmCisJZ2l0IHJlcmVyZSAmJgorCXRlc3QgInokKGNhdCBmaS9sZSkiID0gemRpZmZlcmVudCAmJgorCWVjaG8gcmVnaXN0ZXIgdGhlIHJlc29sdXRpb24gYWdhaW4gJiYKKwlnaXQgYWRkIGZpL2xlICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIGtlcHQgZmkvbGUgaW5pdGlhbDpmaS9sZSBzZWNvbmQ6ZmkvbGUgdGhpcmQ6ZmkvbGUgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJZ2l0IHJlcmVyZSBmb3JnZXQgZmkvbGUgJiYKKwkhIHRlc3QgLWYgLmdpdC9yci1jYWNoZS8kcmVyZXJlX2lkL3Bvc3RpbWFnZSAmJgorCXRyICJcMCIgIlxuIiA8LmdpdC9NRVJHRV9SUiA+YWN0dWFsICYmCisJZWNobyAiJHJlcmVyZV9pZAlmaS9sZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIGFuZCByZXJlcmUgZm9yZ2V0IChzdWJkaXJlY3RvcnkpJyAnCisJcm0gLWZyIC5naXQvcnItY2FjaGUgJiYKKwlta2RpciAuZ2l0L3JyLWNhY2hlICYmCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJZWNobyByZWNvcmQgdGhlIHJlc29sdXRpb24gJiYKKwkoY2QgZmkgJiYgZ2l0IHJlcmVyZSkgJiYKKwlyZXJlcmVfaWQ9JChjZCAuZ2l0L3JyLWNhY2hlICYmIGVjaG8gKi9wb3N0aW1hZ2UpICYmCisJcmVyZXJlX2lkPSR7cmVyZXJlX2lkJS9wb3N0aW1hZ2V9ICYmCisJdGVzdCAtZiAuZ2l0L3JyLWNhY2hlLyRyZXJlcmVfaWQvcG9zdGltYWdlICYmCisJKGNkIGZpICYmIGdpdCBjaGVja291dCAtbSBsZSkgJiYKKwllY2hvIHJlc3VycmVjdCB0aGUgY29uZmxpY3QgJiYKKwlncmVwICJePT09PT09PSIgZmkvbGUgJiYKKwllY2hvIHJlcmVzb2x2ZSB0aGUgY29uZmxpY3QgJiYKKwkoY2QgZmkgJiYgZ2l0IHJlcmVyZSkgJiYKKwl0ZXN0ICJ6JChjYXQgZmkvbGUpIiA9IHpkaWZmZXJlbnQgJiYKKwllY2hvIHJlZ2lzdGVyIHRoZSByZXNvbHV0aW9uIGFnYWluICYmCisJKGNkIGZpICYmIGdpdCBhZGQgbGUpICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIGtlcHQgZmkvbGUgaW5pdGlhbDpmaS9sZSBzZWNvbmQ6ZmkvbGUgdGhpcmQ6ZmkvbGUgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJKGNkIGZpICYmIGdpdCByZXJlcmUgZm9yZ2V0IGxlKSAmJgorCSEgdGVzdCAtZiAuZ2l0L3JyLWNhY2hlLyRyZXJlcmVfaWQvcG9zdGltYWdlICYmCisJdHIgIlwwIiAiXG4iIDwuZ2l0L01FUkdFX1JSID5hY3R1YWwgJiYKKwllY2hvICIkcmVyZXJlX2lkCWZpL2xlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgZm9yZ2V0IChiaW5hcnkpJyAnCisJZ2l0IGNoZWNrb3V0IC1mIHNpZGUgJiYKKwlwcmludGYgImFcMGMiID5iaW5hcnkgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGJpbmFyeSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzZWNvbmQgJiYKKwlnaXQgcmVyZXJlIGZvcmdldCBiaW5hcnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIGZvcmdldCAoYWRkLWFkZCBjb25mbGljdCknICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZWNobyBtYXN0ZXIgPmFkZC1kaWZmZXJlbnRseSAmJgorCWdpdCBhZGQgYWRkLWRpZmZlcmVudGx5ICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGRpZmZlcmVudGx5IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmaWZ0aCAmJgorCWdpdCByZXJlcmUgZm9yZ2V0IGFkZC1kaWZmZXJlbnRseSAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIm5vIHJlbWVtYmVyZWQiIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwNTAtZ2l0LWRpci1yZWxhdGl2ZS5zaCBiL3QvdDIwNTAtZ2l0LWRpci1yZWxhdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMWY0NjU5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjA1MC1naXQtZGlyLXJlbGF0aXZlLnNoCkBAIC0wLDAgKzEsNTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayBwcm9ibGVtcyB3aXRoIHJlbGF0aXZlIEdJVF9ESVIKKworVGhpcyB0ZXN0IGNyZWF0ZXMgYSB3b3JraW5nIHRyZWUgc3RhdGUgd2l0aCBhIGZpbGUgYW5kIHN1YmRpcjoKKworICB0b3AgKGNvbW1pdHRlZCBzZXZlcmFsIHRpbWVzKQorICBzdWJkaXIgKGEgc3ViZGlyZWN0b3J5KQorCitJdCBjcmVhdGVzIGEgY29tbWl0LWhvb2sgYW5kIHRlc3RzIGl0LCB0aGVuIG1vdmVzIC5naXQKK2ludG8gdGhlIHN1YmRpciB3aGlsZSBrZWVwaW5nIHRoZSB3b3JrdHJlZSBsb2NhdGlvbiwKK2FuZCB0cmllcyBjb21taXRzIGZyb20gdGhlIHRvcCBhbmQgdGhlIHN1YmRpciwgY2hlY2tpbmcKK3RoYXQgdGhlIGNvbW1pdC1ob29rIHN0aWxsIGdldHMgY2FsbGVkLicKKworLiAuL3Rlc3QtbGliLnNoCisKK0NPTU1JVF9GSUxFPSIkKHB3ZCkvb3V0cHV0IgorZXhwb3J0IENPTU1JVF9GSUxFCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NldHRpbmcgdXAgcG9zdC1jb21taXQgaG9vaycgJworbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorZWNobyA+LmdpdC9ob29rcy9wb3N0LWNvbW1pdCAiIyEvYmluL3NoCit0b3VjaCBcIlwke0NPTU1JVF9GSUxFfVwiCitlY2hvIFBvc3QgY29tbWl0IGhvb2sgd2FzIGNhbGxlZC4iICYmCitjaG1vZCAreCAuZ2l0L2hvb2tzL3Bvc3QtY29tbWl0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LWNvbW1pdCBob29rIHVzZWQgb3JkaW5hcmlseScgJworZWNobyBpbml0aWFsID50b3AgJiYKK2dpdCBhZGQgdG9wICYmCitnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKK3Rlc3QgLXIgIiR7Q09NTUlUX0ZJTEV9IgorJworCitybSAtcmYgIiR7Q09NTUlUX0ZJTEV9IgorbWtkaXIgc3ViZGlyCittdiAuZ2l0IHN1YmRpcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LWNvbW1pdC1ob29rIGNyZWF0ZWQgYW5kIHVzZWQgZnJvbSB0b3AgZGlyJyAnCitlY2hvIGNoYW5nZWQgPnRvcCAmJgorZ2l0IC0tZ2l0LWRpciBzdWJkaXIvLmdpdCBhZGQgdG9wICYmCitnaXQgLS1naXQtZGlyIHN1YmRpci8uZ2l0IGNvbW1pdCAtbSB0b3Bjb21taXQgJiYKK3Rlc3QgLXIgIiR7Q09NTUlUX0ZJTEV9IgorJworCitybSAtcmYgIiR7Q09NTUlUX0ZJTEV9IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LWNvbW1pdC1ob29rIGZyb20gc3ViIGRpcicgJworZWNobyBjaGFuZ2VkIGFnYWluID50b3AgJiYKK2NkIHN1YmRpciAmJgorZ2l0IC0tZ2l0LWRpciAuZ2l0IC0td29yay10cmVlIC4uIGFkZCAuLi90b3AgJiYKK2dpdCAtLWdpdC1kaXIgLmdpdCAtLXdvcmstdHJlZSAuLiBjb21taXQgLW0gc3ViY29tbWl0ICYmCit0ZXN0IC1yICIke0NPTU1JVF9GSUxFfSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDYwLXN3aXRjaC5zaCBiL3QvdDIwNjAtc3dpdGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5ZWZhMjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDYwLXN3aXRjaC5zaApAQCAtMCwwICsxLDk2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc3dpdGNoIGJhc2ljIGZ1bmN0aW9uYWxpdHknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGZpcnN0ICYmCisJZ2l0IGJyYW5jaCBmaXJzdC1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCBzZWNvbmQgJiYKKwl0ZXN0X2NvbW1pdCB0aGlyZCAmJgorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiBub2hvc3Q6L25vcGF0aCAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vZm9vIGZpcnN0LWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggYnJhbmNoIG5vIGFyZ3VtZW50cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzd2l0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIGJyYW5jaCcgJworCWdpdCBzd2l0Y2ggZmlyc3QtYnJhbmNoICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc2Vjb25kLnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIGFuZCBkZXRhY2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHN3aXRjaCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3dpdGNoIG1hc3Rlcl57Y29tbWl0fSAmJgorCWdpdCBzd2l0Y2ggLS1kZXRhY2ggbWFzdGVyXntjb21taXR9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCBhbmQgZGV0YWNoIGN1cnJlbnQgYnJhbmNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBzd2l0Y2ggbWFzdGVyICYmCisJZ2l0IHN3aXRjaCBtYXN0ZXIgJiYKKwlnaXQgc3dpdGNoIC0tZGV0YWNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCBhbmQgY3JlYXRlIGJyYW5jaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgc3dpdGNoIG1hc3RlciAmJgorCWdpdCBzd2l0Y2ggLWMgdGVtcCBtYXN0ZXJeICYmCisJdGVzdF9jbXBfcmV2IG1hc3Rlcl4gcmVmcy9oZWFkcy90ZW1wICYmCisJZWNobyByZWZzL2hlYWRzL3RlbXAgPmV4cGVjdGVkLWJyYW5jaCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsLWJyYW5jaCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWJyYW5jaCBhY3R1YWwtYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmNlIGNyZWF0ZSBicmFuY2ggZnJvbSBIRUFEJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBzd2l0Y2ggbWFzdGVyICYmCisJZ2l0IHN3aXRjaCAtLWRldGFjaCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3dpdGNoIC1jIHRlbXAgJiYKKwlnaXQgc3dpdGNoIC1DIHRlbXAgJiYKKwl0ZXN0X2NtcF9yZXYgbWFzdGVyIHJlZnMvaGVhZHMvdGVtcCAmJgorCWVjaG8gcmVmcy9oZWFkcy90ZW1wID5leHBlY3RlZC1icmFuY2ggJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbC1icmFuY2ggJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1icmFuY2ggYWN0dWFsLWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgb3JwaGFuIGJyYW5jaCBmcm9tIGVtcHR5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBzd2l0Y2ggbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN3aXRjaCAtLW9ycGhhbiBuZXctb3JwaGFuIEhFQUQgJiYKKwlnaXQgc3dpdGNoIC0tb3JwaGFuIG5ldy1vcnBoYW4gJiYKKwl0ZXN0X2NvbW1pdCBvcnBoYW4gJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvaGVhZHMvbmV3LW9ycGhhbiA+Y29tbWl0ICYmCisJISBncmVwIF5wYXJlbnQgY29tbWl0ICYmCisJZ2l0IGxzLWZpbGVzID50cmFja2VkLWZpbGVzICYmCisJZWNobyBvcnBoYW4udCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCB0cmFja2VkLWZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaGluZyBpZ25vcmVzIGZpbGUgb2Ygc2FtZSBicmFuY2ggbmFtZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgc3dpdGNoIG1hc3RlciAmJgorCTogPmZpcnN0LWJyYW5jaCAmJgorCWdpdCBzd2l0Y2ggZmlyc3QtYnJhbmNoICYmCisJZWNobyByZWZzL2hlYWRzL2ZpcnN0LWJyYW5jaCA+ZXhwZWN0ZWQgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdndWVzcyBhbmQgY3JlYXRlIGJyYW5jaCAnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHN3aXRjaCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3dpdGNoIC0tbm8tZ3Vlc3MgZm9vICYmCisJZ2l0IHN3aXRjaCBmb28gJiYKKwllY2hvIHJlZnMvaGVhZHMvZm9vID5leHBlY3RlZCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBzd2l0Y2hpbmcgd2hlbiBzb21ldGhpbmcgaXMgaW4gcHJvZ3Jlc3MnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJIyBmYWtlIGEgbWVyZ2UtaW4tcHJvZ3Jlc3MKKwljcCAuZ2l0L0hFQUQgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN3aXRjaCAtZCBAXgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwNzAtcmVzdG9yZS5zaCBiL3QvdDIwNzAtcmVzdG9yZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OWU1YTE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjA3MC1yZXN0b3JlLnNoCkBAIC0wLDAgKzEsMTM3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVzdG9yZSBiYXNpYyBmdW5jdGlvbmFsaXR5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBmaXJzdCAmJgorCWVjaG8gZmlyc3QtYW5kLWEtaGFsZiA+PmZpcnN0LnQgJiYKKwlnaXQgYWRkIGZpcnN0LnQgJiYKKwl0ZXN0X2NvbW1pdCBzZWNvbmQgJiYKKwllY2hvIG9uZSA+b25lICYmCisJZWNobyB0d28gPnR3byAmJgorCWVjaG8gdW50cmFja2VkID51bnRyYWNrZWQgJiYKKwllY2hvIGlnbm9yZWQgPmlnbm9yZWQgJiYKKwllY2hvIC9pZ25vcmVkID4uZ2l0aWdub3JlICYmCisJZ2l0IGFkZCBvbmUgdHdvIC5naXRpZ25vcmUgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL29uZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdG9yZSB3aXRob3V0IHBhdGhzcGVjIGlzIG5vdCBvaycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXN0b3JlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc3RvcmUgLS1zb3VyY2U9Zmlyc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdG9yZSBhIGZpbGUsIGlnbm9yaW5nIGJyYW5jaCBvZiBzYW1lIG5hbWUnICcKKwljYXQgb25lID5leHBlY3RlZCAmJgorCWVjaG8gZGlydHkgPj5vbmUgJiYKKwlnaXQgcmVzdG9yZSBvbmUgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdG9yZSBhIGZpbGUgb24gd29ya3RyZWUgZnJvbSBhbm90aGVyIHJlZicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgZmlyc3Q6Li9maXJzdC50ID5leHBlY3RlZCAmJgorCWdpdCByZXN0b3JlIC0tc291cmNlPWZpcnN0IGZpcnN0LnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaXJzdC50ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRDouL2ZpcnN0LnQgPmV4cGVjdGVkICYmCisJZ2l0IHNob3cgOmZpcnN0LnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0b3JlIGEgZmlsZSBpbiB0aGUgaW5kZXggZnJvbSBhbm90aGVyIHJlZicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgZmlyc3Q6Li9maXJzdC50ID5leHBlY3RlZCAmJgorCWdpdCByZXN0b3JlIC0tc291cmNlPWZpcnN0IC0tc3RhZ2VkIGZpcnN0LnQgJiYKKwlnaXQgc2hvdyA6Zmlyc3QudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRDouL2ZpcnN0LnQgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlyc3QudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0b3JlIGEgZmlsZSBpbiBib3RoIHRoZSBpbmRleCBhbmQgd29ya3RyZWUgZnJvbSBhbm90aGVyIHJlZicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgZmlyc3Q6Li9maXJzdC50ID5leHBlY3RlZCAmJgorCWdpdCByZXN0b3JlIC0tc291cmNlPWZpcnN0IC0tc3RhZ2VkIC0td29ya3RyZWUgZmlyc3QudCAmJgorCWdpdCBzaG93IDpmaXJzdC50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaXJzdC50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RvcmUgLS1zdGFnZWQgdXNlcyBIRUFEIGFzIHNvdXJjZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgOi4vZmlyc3QudCA+ZXhwZWN0ZWQgJiYKKwllY2hvIGluZGV4LWRpcnR5ID4+Zmlyc3QudCAmJgorCWdpdCBhZGQgZmlyc3QudCAmJgorCWdpdCByZXN0b3JlIC0tc3RhZ2VkIGZpcnN0LnQgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiA6Li9maXJzdC50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdG9yZSAtLXdvcmt0cmVlIC0tc3RhZ2VkIHVzZXMgSEVBRCBhcyBzb3VyY2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzaG93IEhFQUQ6Li9maXJzdC50ID5leHBlY3RlZCAmJgorCWVjaG8gZGlydHkgPj5maXJzdC50ICYmCisJZ2l0IGFkZCBmaXJzdC50ICYmCisJZ2l0IHJlc3RvcmUgLS13b3JrdHJlZSAtLXN0YWdlZCBmaXJzdC50ICYmCisJZ2l0IHNob3cgOi4vZmlyc3QudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlyc3QudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0b3JlIC0taWdub3JlLXVubWVyZ2VkIGlnbm9yZXMgdW5tZXJnZWQgZW50cmllcycgJworCWdpdCBpbml0IHVubWVyZ2VkICYmCisJKAorCQljZCB1bm1lcmdlZCAmJgorCQllY2hvIG9uZSA+dW5tZXJnZWQgJiYKKwkJZWNobyBvbmUgPmNvbW1vbiAmJgorCQlnaXQgYWRkIHVubWVyZ2VkIGNvbW1vbiAmJgorCQlnaXQgY29tbWl0IC1tIGNvbW1vbiAmJgorCQlnaXQgc3dpdGNoIC1jIGZpcnN0ICYmCisJCWVjaG8gZmlyc3QgPnVubWVyZ2VkICYmCisJCWdpdCBjb21taXQgLWFtIGZpcnN0ICYmCisJCWdpdCBzd2l0Y2ggLWMgc2Vjb25kIG1hc3RlciAmJgorCQllY2hvIHNlY29uZCA+dW5tZXJnZWQgJiYKKwkJZ2l0IGNvbW1pdCAtYW0gc2Vjb25kICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmaXJzdCAmJgorCisJCWVjaG8gZGlydHkgPj5jb21tb24gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc3RvcmUgLiAmJgorCisJCWdpdCByZXN0b3JlIC0taWdub3JlLXVubWVyZ2VkIC0tcXVpZXQgLiA+b3V0cHV0IDI+JjEgJiYKKwkJZ2l0IGRpZmYgY29tbW9uID5kaWZmLW91dHB1dCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBkaWZmLW91dHB1dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdG9yZSAtLXN0YWdlZCBhZGRzIGRlbGV0ZWQgaW50ZW50LXRvLWFkZCBmaWxlIGJhY2sgdG8gaW5kZXgnICcKKwllY2hvICJub25lbXB0eSIgPm5vbmVtcHR5ICYmCisJPmVtcHR5ICYmCisJZ2l0IGFkZCBub25lbXB0eSBlbXB0eSAmJgorCWdpdCBjb21taXQgLW0gImNyZWF0ZSBmaWxlcyB0byBiZSBkZWxldGVkIiAmJgorCWdpdCBybSAtLWNhY2hlZCBub25lbXB0eSBlbXB0eSAmJgorCWdpdCBhZGQgLU4gbm9uZW1wdHkgZW1wdHkgJiYKKwlnaXQgcmVzdG9yZSAtLXN0YWdlZCBub25lbXB0eSBlbXB0eSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RvcmUgLS1zdGFnZWQgaW52YWxpZGF0ZXMgY2FjaGUgdHJlZSBmb3IgZGVsZXRpb25zJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCByZXNldCAtLWhhcmQgJiYKKwk+bmV3MSAmJgorCT5uZXcyICYmCisJZ2l0IGFkZCBuZXcxIG5ldzIgJiYKKworCSMgSXQgaXMgaW1wb3J0YW50IHRvIGNvbW1pdCBhbmQgdGhlbiByZXNldCBoZXJlLCBzbyB0aGF0IHRoZSBpbmRleAorCSMgY29udGFpbnMgYSB2YWxpZCBjYWNoZS10cmVlIGZvciB0aGUgImJvdGgiIHRyZWUuCisJZ2l0IGNvbW1pdCAtbSBib3RoICYmCisJZ2l0IHJlc2V0IC0tc29mdCBIRUFEXiAmJgorCisJZ2l0IHJlc3RvcmUgLS1zdGFnZWQgbmV3MSAmJgorCWdpdCBjb21taXQgLW0gImp1c3QgbmV3MiIgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQ6bmV3MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDpuZXcxCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjA3MS1yZXN0b3JlLXBhdGNoLnNoIGIvdC90MjA3MS1yZXN0b3JlLXBhdGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4YjI0NzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDcxLXJlc3RvcmUtcGF0Y2guc2gKQEAgLTAsMCArMSwxMTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmVzdG9yZSAtLXBhdGNoJworCisuIC4vbGliLXBhdGNoLW1vZGUuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCcgJworCW1rZGlyIGRpciAmJgorCWVjaG8gcGFyZW50ID5kaXIvZm9vICYmCisJZWNobyBkdW1teSA+YmFyICYmCisJZ2l0IGFkZCBiYXIgZGlyL2ZvbyAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfY29tbWl0IHNlY29uZCBkaXIvZm9vIGhlYWQgJiYKKwlzZXRfYW5kX3NhdmVfc3RhdGUgYmFyIGJhcl93b3JrIGJhcl9pbmRleCAmJgorCXNhdmVfaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3Jlc3RvcmUgLXAgd2l0aG91dCBwYXRoc3BlYyBpcyBmaW5lJyAnCisJZWNobyBxID5jbWQgJiYKKwlnaXQgcmVzdG9yZSAtcCA8Y21kCisnCisKKyMgbm90ZTogYmFyIHNvcnRzIGJlZm9yZSBkaXIvZm9vLCBzbyB0aGUgZmlyc3QgJ24nIGlzIGFsd2F5cyB0byBza2lwICdiYXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2F5aW5nICJuIiBkb2VzIG5vdGhpbmcnICcKKwlzZXRfYW5kX3NhdmVfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIG4gbiB8IGdpdCByZXN0b3JlIC1wICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBkaXIvZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc3RvcmUgLXAnICcKKwlzZXRfYW5kX3NhdmVfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIG4geSB8IGdpdCByZXN0b3JlIC1wICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGhlYWQgaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCByZXN0b3JlIC1wIHdpdGggc3RhZ2VkIGNoYW5nZXMnICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4ICYmCisJdGVzdF93cml0ZV9saW5lcyBuIHkgfCBnaXQgcmVzdG9yZSAtcCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBpbmRleCBpbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCByZXN0b3JlIC1wIC0tc291cmNlPUhFQUQnICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4ICYmCisJIyB0aGUgdGhpcmQgbiBpcyB0byBnZXQgb3V0IGluIGNhc2UgaXQgbWlzdGFrZW5seSBkb2VzIG5vdCBhcHBseQorCXRlc3Rfd3JpdGVfbGluZXMgbiB5IG4gfCBnaXQgcmVzdG9yZSAtcCAtLXNvdXJjZT1IRUFEICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGhlYWQgaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzdG9yZSAtcCAtLXNvdXJjZT1IRUFEXicgJworCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaW5kZXggJiYKKwkjIHRoZSB0aGlyZCBuIGlzIHRvIGdldCBvdXQgaW4gY2FzZSBpdCBtaXN0YWtlbmx5IGRvZXMgbm90IGFwcGx5CisJdGVzdF93cml0ZV9saW5lcyBuIHkgbiB8IGdpdCByZXN0b3JlIC1wIC0tc291cmNlPUhFQUReICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHBhcmVudCBpbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCByZXN0b3JlIC1wIGhhbmRsZXMgZGVsZXRpb24nICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4ICYmCisJcm0gZGlyL2ZvbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgbiB5IHwgZ2l0IHJlc3RvcmUgLXAgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaW5kZXggaW5kZXgKKycKKworIyBUaGUgaWRlYSBpbiB0aGUgcmVzdCBpcyB0aGF0IGJhciBzb3J0cyBmaXJzdCwgc28gd2UgYWx3YXlzIHNheSAneScKKyMgZmlyc3QgYW5kIGlmIHRoZSBwYXRoIGxpbWl0ZXIgZmFpbHMgaXQnbGwgYXBwbHkgdG8gYmFyIGluc3RlYWQgb2YKKyMgZGlyL2Zvby4gIFRoZXJlJ3MgYWx3YXlzIGFuIGV4dHJhICduJyB0byByZWplY3QgZWRpdHMgdG8gZGlyL2ZvbyBpbgorIyB0aGUgZmFpbHVyZSBjYXNlIChhbmQgdGh1cyBnZXQgb3V0IG9mIHRoZSBsb29wKS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdwYXRoIGxpbWl0aW5nIHdvcmtzOiBkaXInICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHkgbiB8IGdpdCByZXN0b3JlIC1wIGRpciAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdwYXRoIGxpbWl0aW5nIHdvcmtzOiAtLSBkaXInICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHkgbiB8IGdpdCByZXN0b3JlIC1wIC0tIGRpciAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdwYXRoIGxpbWl0aW5nIHdvcmtzOiBIRUFEXiAtLSBkaXInICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwkjIHRoZSB0aGlyZCBuIGlzIHRvIGdldCBvdXQgaW4gY2FzZSBpdCBtaXN0YWtlbmx5IGRvZXMgbm90IGFwcGx5CisJdGVzdF93cml0ZV9saW5lcyB5IG4gbiB8IGdpdCByZXN0b3JlIC1wIC0tc291cmNlPUhFQUReIC0tIGRpciAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBwYXJlbnQgaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3BhdGggbGltaXRpbmcgd29ya3M6IGZvbyBpbnNpZGUgZGlyJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJIyB0aGUgdGhpcmQgbiBpcyB0byBnZXQgb3V0IGluIGNhc2UgaXQgbWlzdGFrZW5seSBkb2VzIG5vdCBhcHBseQorCXRlc3Rfd3JpdGVfbGluZXMgeSBuIG4gfCAoY2QgZGlyICYmIGdpdCByZXN0b3JlIC1wIGZvbykgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBoZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnbm9uZSBvZiB0aGlzIG1vdmVkIEhFQUQnICcKKwl2ZXJpZnlfc2F2ZWRfaGVhZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwNzItcmVzdG9yZS1wYXRoc3BlYy1maWxlLnNoIGIvdC90MjA3Mi1yZXN0b3JlLXBhdGhzcGVjLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGQ0Nzk0NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwNzItcmVzdG9yZS1wYXRoc3BlYy1maWxlLnNoCkBAIC0wLDAgKzEsMTY0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVzdG9yZSAtLXBhdGhzcGVjLWZyb20tZmlsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfdGljaworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBmaWxlMCAmJgorCisJZWNobyAxID5maWxlQS50ICYmCisJZWNobyAxID5maWxlQi50ICYmCisJZWNobyAxID5maWxlQy50ICYmCisJZWNobyAxID5maWxlRC50ICYmCisJZ2l0IGFkZCBmaWxlQS50IGZpbGVCLnQgZmlsZUMudCBmaWxlRC50ICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlsZXMgMSIgJiYKKworCWVjaG8gMiA+ZmlsZUEudCAmJgorCWVjaG8gMiA+ZmlsZUIudCAmJgorCWVjaG8gMiA+ZmlsZUMudCAmJgorCWVjaG8gMiA+ZmlsZUQudCAmJgorCWdpdCBhZGQgZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudCAmJgorCWdpdCBjb21taXQgLW0gImZpbGVzIDIiICYmCisKKwlnaXQgdGFnIGNoZWNrcG9pbnQKKycKKworcmVzdG9yZV9jaGVja3BvaW50ICgpIHsKKwlnaXQgcmVzZXQgLS1oYXJkIGNoZWNrcG9pbnQKK30KKwordmVyaWZ5X2V4cGVjdCAoKSB7CisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLXVudHJhY2tlZC1maWxlcz1ubyAtLSBmaWxlQS50IGZpbGVCLnQgZmlsZUMudCBmaWxlRC50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcGF0aHNwZWMtZnJvbS1maWxlIGZyb20gc3RkaW4nICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWVjaG8gZmlsZUEudCB8IGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1zb3VyY2U9SEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZmlsZUEudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wYXRoc3BlYy1mcm9tLWZpbGUgZnJvbSBmaWxlJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwllY2hvIGZpbGVBLnQgPmxpc3QgJiYKKwlnaXQgcmVzdG9yZSAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tc291cmNlPUhFQUReMSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBNIGZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTCBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcMGZpbGVCLnRcMCIgfCBnaXQgcmVzdG9yZSAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC0tcGF0aHNwZWMtZmlsZS1udWwgLS1zb3VyY2U9SEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZmlsZUEudAorCSBNIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xGIGRlbGltaXRlcnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUEudFxuZmlsZUIudFxuIiB8IGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1zb3VyY2U9SEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZmlsZUEudAorCSBNIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHRyYWlsaW5nIGRlbGltaXRlcicgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XG5maWxlQi50IiB8IGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1zb3VyY2U9SEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZmlsZUEudAorCSBNIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NSTEYgZGVsaW1pdGVycycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XHJcbmZpbGVCLnRcclxuIiB8IGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1zb3VyY2U9SEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZmlsZUEudAorCSBNIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJY2F0ID5saXN0IDw8LVxFT0YgJiYKKwkiZmlsZVwxMDEudCIKKwlFT0YKKworCWdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1zb3VyY2U9SEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZmlsZUEudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGVzIG5vdCBjb21wYXRpYmxlIHdpdGggLS1wYXRoc3BlYy1maWxlLW51bCcgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJY2F0ID5saXN0IDw8LVxFT0YgJiYKKwkiZmlsZVwxMDEudCIKKwlFT0YKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1wYXRoc3BlYy1maWxlLW51bCAtLXNvdXJjZT1IRUFEXjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25seSB0b3VjaGVzIHdoYXQgd2FzIGxpc3RlZCcgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQi50XG5maWxlQy50XG4iIHwgZ2l0IHJlc3RvcmUgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtLXNvdXJjZT1IRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgTSBmaWxlQi50CisJIE0gZmlsZUMudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3IgY29uZGl0aW9ucycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCWVjaG8gZmlsZUEudCA+bGlzdCAmJgorCT5lbXB0eV9saXN0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzdG9yZSAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tcGF0Y2ggLS1zb3VyY2U9SEVBRF4xIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1wYXRjaCIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzdG9yZSAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tc291cmNlPUhFQUReMSAtLSBmaWxlQS50IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZmlsZS1udWwgLS1zb3VyY2U9SEVBRF4xIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzdG9yZSAtLXBhdGhzcGVjLWZyb20tZmlsZT1lbXB0eV9saXN0IC0tc291cmNlPUhFQUReMSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgInlvdSBtdXN0IHNwZWNpZnkgcGF0aChzKSB0byByZXN0b3JlIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMTAwLXVwZGF0ZS1jYWNoZS1iYWRwYXRoLnNoIGIvdC90MjEwMC11cGRhdGUtY2FjaGUtYmFkcGF0aC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZGYzZmRkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjEwMC11cGRhdGUtY2FjaGUtYmFkcGF0aC5zaApAQCAtMCwwICsxLDYxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCB1cGRhdGUtaW5kZXggbm9uc2Vuc2UtcGF0aCB0ZXN0LgorCitUaGlzIHRlc3QgY3JlYXRlcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUgY2FjaGU6CisKKyAgICBwYXRoMCAgICAgICAtIGEgZmlsZQorICAgIHBhdGgxICAgICAgIC0gYSBzeW1saW5rCisgICAgcGF0aDIvZmlsZTIgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMy9maWxlMyAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorCithbmQgdHJpZXMgdG8gZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB0aGUgZm9sbG93aW5nOgorCisgICAgcGF0aDAvZmlsZTAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMS9maWxlMSAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgyICAgICAgIC0gYSBmaWxlCisgICAgcGF0aDMgICAgICAgLSBhIHN5bWxpbmsKKworQWxsIG9mIHRoZSBhdHRlbXB0cyBzaG91bGQgZmFpbC4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK21rZGlyIHBhdGgyIHBhdGgzCitkYXRlID5wYXRoMAoraWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwordGhlbgorCWxuIC1zIHh5enp5IHBhdGgxCitlbHNlCisJZGF0ZSA+IHBhdGgxCitmaQorZGF0ZSA+cGF0aDIvZmlsZTIKK2RhdGUgPnBhdGgzL2ZpbGUzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRvIGFkZCB2YXJpb3VzIHBhdGhzLicgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIHBhdGgwIHBhdGgxIHBhdGgyL2ZpbGUyIHBhdGgzL2ZpbGUzJworCitybSAtZnIgcGF0aD8KKworbWtkaXIgcGF0aDAgcGF0aDEKK2RhdGUgPnBhdGgyCitpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCit0aGVuCisJbG4gLXMgZnJvdHogcGF0aDMKK2Vsc2UKKwlkYXRlID4gcGF0aDMKK2ZpCitkYXRlID5wYXRoMC9maWxlMAorZGF0ZSA+cGF0aDEvZmlsZTEKKworZm9yIHAgaW4gcGF0aDAvZmlsZTAgcGF0aDEvZmlsZTEgcGF0aDIgcGF0aDMKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJICAgICJnaXQgdXBkYXRlLWluZGV4IHRvIGFkZCBjb25mbGljdGluZyBwYXRoICRwIHNob3VsZCBmYWlsLiIgXAorCSAgICAidGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLSAkcCIKK2RvbmUKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjEwMS11cGRhdGUtaW5kZXgtcmV1cGRhdGUuc2ggYi90L3QyMTAxLXVwZGF0ZS1pbmRleC1yZXVwZGF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YzMyZDQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjEwMS11cGRhdGUtaW5kZXgtcmV1cGRhdGUuc2gKQEAgLTAsMCArMSw5MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgdXBkYXRlLWluZGV4IC0tYWdhaW4gdGVzdC4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtLWFkZCcgJworCWVjaG8gaGVsbG8gd29ybGQgPmZpbGUxICYmCisJZWNobyBnb29kYnllIHBlb3BsZSA+ZmlsZTIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpbGUxIGZpbGUyICYmCisJZ2l0IGxzLWZpbGVzIC1zID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkxMDA2NDQgJChnaXQgaGFzaC1vYmplY3QgZmlsZTEpIDAJZmlsZTEKKwkxMDA2NDQgJChnaXQgaGFzaC1vYmplY3QgZmlsZTIpIDAJZmlsZTIKKwlFT0YKKwljbXAgY3VycmVudCBleHBlY3RlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1hZ2FpbicgJworCXJtIC1mIGZpbGUxICYmCisJZWNobyBoZWxsbyBldmVyeWJvZHkgPmZpbGUyICYmCisJaWYgZ2l0IHVwZGF0ZS1pbmRleCAtLWFnYWluCisJdGhlbgorCQllY2hvIHNob3VsZCBoYXZlIHJlZnVzZWQgdG8gcmVtb3ZlIGZpbGUxCisJCWV4aXQgMQorCWVsc2UKKwkJZWNobyBoYXBweSAtIGZhaWxlZCBhcyBleHBlY3RlZAorCWZpICYmCisJZ2l0IGxzLWZpbGVzIC1zID5jdXJyZW50ICYmCisJY21wIGN1cnJlbnQgZXhwZWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0tYWdhaW4nICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0tYWdhaW4gJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCTEwMDY0NCAkKGdpdCBoYXNoLW9iamVjdCBmaWxlMikgMAlmaWxlMgorCUVPRgorCWNtcCBjdXJyZW50IGV4cGVjdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpcnN0IGNvbW1pdCcgJ2dpdCBjb21taXQgLW0gaW5pdGlhbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IGFnYWluJyAnCisJbWtkaXIgLXAgZGlyMSAmJgorCWVjaG8gaGVsbG8gd29ybGQgPmRpcjEvZmlsZTMgJiYKKwllY2hvIGdvb2RieWUgcGVvcGxlID5maWxlMiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZTIgZGlyMS9maWxlMyAmJgorCWVjaG8gaGVsbG8gZXZlcnlib2R5ID5maWxlMiAmJgorCWVjaG8gaGFwcHkgPmRpcjEvZmlsZTMgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWdhaW4gJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCTEwMDY0NCAkKGdpdCBoYXNoLW9iamVjdCBkaXIxL2ZpbGUzKSAwCWRpcjEvZmlsZTMKKwkxMDA2NDQgJChnaXQgaGFzaC1vYmplY3QgZmlsZTIpIDAJZmlsZTIKKwlFT0YKKwljbXAgY3VycmVudCBleHBlY3RlZAorJworCitmaWxlMj0kKGdpdCBoYXNoLW9iamVjdCBmaWxlMikKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtLXVwZGF0ZSBmcm9tIHN1YmRpcicgJworCWVjaG8gbm90IHNvIGhhcHB5ID5maWxlMiAmJgorCShjZCBkaXIxICYmCisJY2F0IC4uL2ZpbGUyID5maWxlMyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZ2FpbgorCSkgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCTEwMDY0NCAkKGdpdCBoYXNoLW9iamVjdCBkaXIxL2ZpbGUzKSAwCWRpcjEvZmlsZTMKKwkxMDA2NDQgJGZpbGUyIDAJZmlsZTIKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtLXVwZGF0ZSB3aXRoIHBhdGhzcGVjJyAnCisJZWNobyB2ZXJ5IGhhcHB5ID5maWxlMiAmJgorCWNhdCBmaWxlMiA+ZGlyMS9maWxlMyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZ2FpbiBkaXIxLyAmJgorCWdpdCBscy1maWxlcyAtcyA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJMTAwNjQ0ICQoZ2l0IGhhc2gtb2JqZWN0IGRpcjEvZmlsZTMpIDAJZGlyMS9maWxlMworCTEwMDY0NCAkZmlsZTIgMAlmaWxlMgorCUVPRgorCWNtcCBjdXJyZW50IGV4cGVjdGVkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjEwMi11cGRhdGUtaW5kZXgtc3ltbGlua3Muc2ggYi90L3QyMTAyLXVwZGF0ZS1pbmRleC1zeW1saW5rcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMmYyYzczCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjEwMi11cGRhdGUtaW5kZXgtc3ltbGlua3Muc2gKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBTaXh0CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCB1cGRhdGUtaW5kZXggb24gZmlsZXN5c3RlbSB3L28gc3ltbGlua3MgdGVzdC4KKworVGhpcyB0ZXN0cyB0aGF0IGdpdCB1cGRhdGUtaW5kZXgga2VlcHMgdGhlIHN5bWJvbGljIGxpbmsgcHJvcGVydHkKK2V2ZW4gaWYgYSBwbGFpbiBmaWxlIGlzIGluIHRoZSB3b3JraW5nIHRyZWUgaWYgY29yZS5zeW1saW5rcyBpcyBmYWxzZS4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKydwcmVwYXJhdGlvbicgJworZ2l0IGNvbmZpZyBjb3JlLnN5bWxpbmtzIGZhbHNlICYmCitsPSQocHJpbnRmIGZpbGUgfCBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyAtLXN0ZGluKSAmJgorZWNobyAiMTIwMDAwICRsCXN5bWxpbmsiIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ21vZGlmeSB0aGUgc3ltYm9saWMgbGluaycgJworcHJpbnRmIG5ldy1maWxlID4gc3ltbGluayAmJgorZ2l0IHVwZGF0ZS1pbmRleCBzeW1saW5rJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyd0aGUgaW5kZXggZW50cnkgbXVzdCBzdGlsbCBiZSBhIHN5bWJvbGljIGxpbmsnICcKK2Nhc2UgIiQoZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgLS1jYWNoZWQgc3ltbGluaykiIGluCisxMjAwMDAiICIqc3ltbGluaykgZWNobyBwYXNzOzsKKyopIGVjaG8gZmFpbDsgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgLS1jYWNoZWQgc3ltbGluazsgKGV4aXQgMSk7OworZXNhYycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMTAzLXVwZGF0ZS1pbmRleC1pZ25vcmUtbWlzc2luZy5zaCBiL3QvdDIxMDMtdXBkYXRlLWluZGV4LWlnbm9yZS1taXNzaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAxMTRmMDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTAzLXVwZGF0ZS1pbmRleC1pZ25vcmUtbWlzc2luZy5zaApAQCAtMCwwICsxLDg5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndXBkYXRlLWluZGV4IHdpdGggb3B0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgYmFzaWNzICcKKwk+b25lICYmCisJPnR3byAmJgorCT50aHJlZSAmJgorCisJIyBuZWVkIC0tYWRkIHdoZW4gYWRkaW5nCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCBvbmUgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcykiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBvbmUgJiYKKwl0ZXN0IHpvbmUgPSAieiQoZ2l0IGxzLWZpbGVzKSIgJiYKKworCSMgdXBkYXRlLWluZGV4IGlzIGF0b21pYworCWVjaG8gMSA+b25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCBvbmUgdHdvICYmCisJZWNobyAiTQlvbmUiID5leHBlY3QgJiYKKwlnaXQgZGlmZi1maWxlcyAtLW5hbWUtc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG9uZSB0d28gdGhyZWUgJiYKKwlmb3IgaSBpbiBvbmUgdGhyZWUgdHdvOyBkbyBlY2hvICRpOyBkb25lID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXRlc3RfdGljayAmJgorCSgKKwkJdGVzdF9jcmVhdGVfcmVwbyB4eXp6eSAmJgorCQljZCB4eXp6eSAmJgorCQk+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3ViIGluaXRpYWwiCisJKSAmJgorCWdpdCBhZGQgeHl6enkgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1taXNzaW5nIC0tcmVmcmVzaCcgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWVjaG8gMiA+b25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwllY2hvIDEgPm9uZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJcm0gLWYgdHdvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLW1pc3NpbmcgLS1yZWZyZXNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS11bm1lcmdlZCAtLXJlZnJlc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlpbmZvPSQoZ2l0IGxzLWZpbGVzIC1zIG9uZSB8IHNlZCAtZSAicy8gMAkvIDEJLyIpICYmCisJZ2l0IHJtIC0tY2FjaGVkIG9uZSAmJgorCWVjaG8gIiRpbmZvIiB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tdW5tZXJnZWQgLS1yZWZyZXNoICYmCisJZWNobyAyID50d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tdW5tZXJnZWQgLS1yZWZyZXNoID5hY3R1YWwgJiYKKwlncmVwIHR3byBhY3R1YWwgJiYKKwkhIGdyZXAgb25lIGFjdHVhbCAmJgorCSEgZ3JlcCB0aHJlZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtc3VibW9kdWxlcyAtLXJlZnJlc2ggKDEpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJcm0gLWYgdHdvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaCAoMiknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCWNkIHh5enp5ICYmCisJCWdpdCBjb21taXQgLW0gInN1YiBzZWNvbmQiIC0tYWxsb3ctZW1wdHkKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLW1pc3NpbmcgLS1yZWZyZXNoICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDQtdXBkYXRlLWluZGV4LXNraXAtd29ya3RyZWUuc2ggYi90L3QyMTA0LXVwZGF0ZS1pbmRleC1za2lwLXdvcmt0cmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlMmU3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTA0LXVwZGF0ZS1pbmRleC1za2lwLXdvcmt0cmVlLnNoCkBAIC0wLDAgKzEsNjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggTmd1eeG7hW4gVGjDoWkgTmfhu41jIER1eQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdza2lwLXdvcmt0cmVlIGJpdCB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKworc2FuZV91bnNldCBHSVRfVEVTVF9TUExJVF9JTkRFWAorCit0ZXN0X3NldF9pbmRleF92ZXJzaW9uIDMKKworY2F0ID5leHBlY3QuZnVsbCA8PEVPRgorSCAxCitIIDIKK0ggc3ViLzEKK0ggc3ViLzIKK0VPRgorCitjYXQgPmV4cGVjdC5za2lwIDw8RU9GCitTIDEKK0ggMgorUyBzdWIvMQorSCBzdWIvMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgc3ViICYmCisJdG91Y2ggLi8xIC4vMiBzdWIvMSBzdWIvMiAmJgorCWdpdCBhZGQgMSAyIHN1Yi8xIHN1Yi8yICYmCisJZ2l0IGxzLWZpbGVzIC10IHwgdGVzdF9jbXAgZXhwZWN0LmZ1bGwgLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleCBpcyBhdCB2ZXJzaW9uIDInICcKKwl0ZXN0ICIkKHRlc3QtdG9vbCBpbmRleC12ZXJzaW9uIDwgLmdpdC9pbmRleCkiID0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMSBzdWIvMSAmJgorCWdpdCBscy1maWxlcyAtdCB8IHRlc3RfY21wIGV4cGVjdC5za2lwIC0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggaXMgYXQgdmVyc2lvbiAzIGFmdGVyIGhhdmluZyBzb21lIHNraXAtd29ya3RyZWUgZW50cmllcycgJworCXRlc3QgIiQodGVzdC10b29sIGluZGV4LXZlcnNpb24gPCAuZ2l0L2luZGV4KSIgPSAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC10JyAnCisJZ2l0IGxzLWZpbGVzIC10IHwgdGVzdF9jbXAgZXhwZWN0LnNraXAgLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1uby1za2lwLXdvcmt0cmVlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLXNraXAtd29ya3RyZWUgMSBzdWIvMSAmJgorCWdpdCBscy1maWxlcyAtdCB8IHRlc3RfY21wIGV4cGVjdC5mdWxsIC0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggdmVyc2lvbiBpcyBiYWNrIHRvIDIgd2hlbiB0aGVyZSBpcyBubyBza2lwLXdvcmt0cmVlIGVudHJ5JyAnCisJdGVzdCAiJCh0ZXN0LXRvb2wgaW5kZXgtdmVyc2lvbiA8IC5naXQvaW5kZXgpIiA9IDIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMTA1LXVwZGF0ZS1pbmRleC1naXRmaWxlLnNoIGIvdC90MjEwNS11cGRhdGUtaW5kZXgtZ2l0ZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hN2YzZDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjEwNS11cGRhdGUtaW5kZXgtZ2l0ZmlsZS5zaApAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEJyYWQgS2luZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgdXBkYXRlLWluZGV4IGZvciBnaXRsaW5rIHRvIC5naXQgZmlsZS4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB3aXRoIGFic29sdXRlIC5naXQgZmlsZScgJworCW1rZGlyIHN1YjEgJiYKKwkoY2Qgc3ViMSAmJgorCSBnaXQgaW5pdCAmJgorCSBSRUFMPSIkKHB3ZCkvLnJlYWwiICYmCisJIG12IC5naXQgIiRSRUFMIiAmJgorCSBlY2hvICJnaXRkaXI6ICRSRUFMIiA+LmdpdCAmJgorCSB0ZXN0X2NvbW1pdCBmaXJzdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGdpdGxpbmsgdG8gYWJzb2x1dGUgLmdpdCBmaWxlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLSBzdWIxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB3aXRoIHJlbGF0aXZlIC5naXQgZmlsZScgJworCW1rZGlyIHN1YjIgJiYKKwkoY2Qgc3ViMiAmJgorCSBnaXQgaW5pdCAmJgorCSBtdiAuZ2l0IC5yZWFsICYmCisJIGVjaG8gImdpdGRpcjogLnJlYWwiID4uZ2l0ICYmCisJIHRlc3RfY29tbWl0IGZpcnN0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZ2l0bGluayB0byByZWxhdGl2ZSAuZ2l0IGZpbGUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIHN1YjIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMTA2LXVwZGF0ZS1pbmRleC1hc3N1bWUtdW5jaGFuZ2VkLnNoIGIvdC90MjEwNi11cGRhdGUtaW5kZXgtYXNzdW1lLXVuY2hhbmdlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OWQ4NThjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjEwNi11cGRhdGUtaW5kZXgtYXNzdW1lLXVuY2hhbmdlZC5zaApAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHVwZGF0ZS1pbmRleCAtLWFzc3VtZS11bmNoYW5nZWQgdGVzdC4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyBcCisJJzogPmZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCSBnaXQgYnJhbmNoIG90aGVyICYmCisJIGVjaG8gdXBzdHJlYW0gPmZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLW0gdXBzdHJlYW0nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBzd2l0Y2ggYnJhbmNoZXMgd2l0aCBkaXJ0eSBmaWxlJyBcCisJJ2dpdCByZXNldCAtLWhhcmQgJiYKKwkgZ2l0IGNoZWNrb3V0IG90aGVyICYmCisJIGVjaG8gZGlydCA+ZmlsZSAmJgorCSBnaXQgdXBkYXRlLWluZGV4IC0tYXNzdW1lLXVuY2hhbmdlZCBmaWxlICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBtYXN0ZXInCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjEwNy11cGRhdGUtaW5kZXgtYmFzaWMuc2ggYi90L3QyMTA3LXVwZGF0ZS1pbmRleC1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMzBiN2NhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjEwNy11cGRhdGUtaW5kZXgtYmFzaWMuc2gKQEAgLTAsMCArMSw5NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIHVwZGF0ZS1pbmRleCB0ZXN0cworCitUZXN0cyBmb3IgY29tbWFuZC1saW5lIHBhcnNpbmcgYW5kIGJhc2ljIG9wZXJhdGlvbi4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtLW5vbnNlbnNlIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLW5vbnNlbnNlIDI+bXNnICYmCisJdGVzdCAtcyBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tbm9uc2Vuc2UgZHVtcHMgdXNhZ2UnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgdXBkYXRlLWluZGV4IC0tbm9uc2Vuc2UgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZTogZ2l0IHVwZGF0ZS1pbmRleCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtaCB3aXRoIGNvcnJ1cHQgaW5kZXgnICcKKwlta2RpciBicm9rZW4gJiYKKwkoCisJCWNkIGJyb2tlbiAmJgorCQlnaXQgaW5pdCAmJgorCQk+LmdpdC9pbmRleCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgdXBkYXRlLWluZGV4IC1oID51c2FnZSAyPiYxCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlOiBnaXQgdXBkYXRlLWluZGV4IiBicm9rZW4vdXNhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jYWNoZWluZm8gY29tcGxhaW5zIG9mIG1pc3NpbmcgYXJndW1lbnRzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNhY2hlaW5mbyBkb2VzIG5vdCBhY2NlcHQgYmxvYiBudWxsIHNoYTEnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgcmV2LXBhcnNlIDpmaWxlID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDEwMDY0NCAkWkVST19PSUQgZmlsZSAmJgorCWdpdCByZXYtcGFyc2UgOmZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jYWNoZWluZm8gZG9lcyBub3QgYWNjZXB0IGdpdGxpbmsgbnVsbCBzaGExJyAnCisJZ2l0IGluaXQgc3VibW9kdWxlICYmCisJKGNkIHN1Ym1vZHVsZSAmJiB0ZXN0X2NvbW1pdCBmb28pICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgcmV2LXBhcnNlIDpzdWJtb2R1bGUgPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICRaRVJPX09JRCBzdWJtb2R1bGUgJiYKKwlnaXQgcmV2LXBhcnNlIDpzdWJtb2R1bGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jYWNoZWluZm8gbW9kZSxzaGExLHBhdGggKG5ldyBzeW50YXgpJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gPGZpbGUgPmV4cGVjdCAmJgorCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgIiQoY2F0IGV4cGVjdCkiIGZpbGUgJiYKKwlnaXQgcmV2LXBhcnNlIDpmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvICIxMDA2NDQsJChjYXQgZXhwZWN0KSxlbGlmIiAmJgorCWdpdCByZXYtcGFyc2UgOmVsaWYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmxvY2sgZmlsZXMgY2xlYW5lZCB1cCcgJworCW1rZGlyIGNsZWFudXAgJiYKKwkoCisJY2QgY2xlYW51cCAmJgorCW1rZGlyIHdvcmt0cmVlICYmCisJZ2l0IGluaXQgcmVwbyAmJgorCWNkIHJlcG8gJiYKKwlnaXQgY29uZmlnIGNvcmUud29ya3RyZWUgLi4vLi4vd29ya3RyZWUgJiYKKwkjIC0tcmVmcmVzaCB0cmlnZ2VycyBsYXRlIHNldHVwX3dvcmtfdHJlZSwKKwkjIGFjdGl2ZV9jYWNoZV9jaGFuZ2VkIGlzIHplcm8sIHJvbGxiYWNrX2xvY2tfZmlsZSBmYWlscworCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJISB0ZXN0IC1mIC5naXQvaW5kZXgubG9jaworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaG1vZD0reCBhbmQgY2htb2Q9LXggaW4gdGhlIHNhbWUgYXJndW1lbnQgbGlzdCcgJworCT5BICYmCisJPkIgJiYKKwlnaXQgYWRkIEEgQiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1jaG1vZD0reCBBIC0tY2htb2Q9LXggQiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTEwMDc1NSAkRU1QVFlfQkxPQiAwCUEKKwkxMDA2NDQgJEVNUFRZX0JMT0IgMAlCCisJRU9GCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgQSBCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjIwMC1hZGQtdXBkYXRlLnNoIGIvdC90MjIwMC1hZGQtdXBkYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY3NjRiN2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMjAwLWFkZC11cGRhdGUuc2gKQEAgLTAsMCArMSwxODUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYWRkIC11CisKK1RoaXMgdGVzdCBjcmVhdGVzIGEgd29ya2luZyB0cmVlIHN0YXRlIHdpdGggdGhyZWUgZmlsZXM6CisKKyAgdG9wIChwcmV2aW91c2x5IGNvbW1pdHRlZCwgbW9kaWZpZWQpCisgIGRpci9zdWIgKHByZXZpb3VzbHkgY29tbWl0dGVkLCBtb2RpZmllZCkKKyAgZGlyL290aGVyICh1bnRyYWNrZWQpCisKK2FuZCBpc3N1ZXMgYSBnaXQgYWRkIC11IHdpdGggcGF0aCBsaW1pdGluZyBvbiAiZGlyIiB0byBhZGQKK29ubHkgdGhlIHVwZGF0ZXMgdG8gZGlyL3N1Yi4KKworQWxzbyB0ZXN0ZWQgYXJlICJnaXQgYWRkIC11IiB3aXRob3V0IGxpbWl0aW5nLCBhbmQgImdpdCBhZGQgLXUiCit3aXRob3V0IGNvbnRlbnRzIGNoYW5nZXMsIGFuZCBvdGhlciBjb25kaXRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBpbml0aWFsID5jaGVjayAmJgorCWVjaG8gaW5pdGlhbCA+dG9wICYmCisJZWNobyBpbml0aWFsID5mb28gJiYKKwlta2RpciBkaXIxIGRpcjIgJiYKKwllY2hvIGluaXRpYWwgPmRpcjEvc3ViMSAmJgorCWVjaG8gaW5pdGlhbCA+ZGlyMS9zdWIyICYmCisJZWNobyBpbml0aWFsID5kaXIyL3N1YjMgJiYKKwlnaXQgYWRkIGNoZWNrIGRpcjEgZGlyMiB0b3AgZm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwllY2hvIGNoYW5nZWQgPmNoZWNrICYmCisJZWNobyBjaGFuZ2VkID50b3AgJiYKKwllY2hvIGNoYW5nZWQgPmRpcjIvc3ViMyAmJgorCXJtIC1mIGRpcjEvc3ViMSAmJgorCWVjaG8gb3RoZXIgPmRpcjIvb3RoZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyB1cGRhdGUgJworCWdpdCBhZGQgLXUgZGlyMSBkaXIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBub3RpY2VkIGEgcmVtb3ZhbCcgJworCXRlc3QgIiQoZ2l0IGxzLWZpbGVzIGRpcjEvc3ViMSkiID0gIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHRvdWNoZWQgY29ycmVjdCBwYXRoJyAnCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLW5hbWUtc3RhdHVzIGRpcjIvc3ViMykiID0gIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGRpZCBub3QgdG91Y2ggb3RoZXIgdHJhY2tlZCBmaWxlcycgJworCXRlc3QgIiQoZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLXN0YXR1cyBjaGVjaykiID0gIk0JY2hlY2siICYmCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLW5hbWUtc3RhdHVzIHRvcCkiID0gIk0JdG9wIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZGlkIG5vdCB0b3VjaCB1bnRyYWNrZWQgZmlsZXMnICcKKwl0ZXN0ICIkKGdpdCBscy1maWxlcyBkaXIyL290aGVyKSIgPSAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYWNoZSB0cmVlIGhhcyBub3QgYmVlbiBjb3JydXB0ZWQnICcKKworCWdpdCBscy1maWxlcyAtcyB8CisJc2VkIC1lICJzLyAwCS8JLyIgPmV4cGVjdCAmJgorCWdpdCBscy10cmVlIC1yICQoZ2l0IHdyaXRlLXRyZWUpIHwKKwlzZWQgLWUgInMvIGJsb2IgLyAvIiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGZyb20gYSBzdWJkaXJlY3RvcnknICcKKwkoCisJCWNkIGRpcjEgJiYKKwkJZWNobyBtb3JlID5zdWIyICYmCisJCWdpdCBhZGQgLXUgc3ViMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIGdldHMgbm90aWNlZCcgJworCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLW5hbWUtc3RhdHVzIGRpcjEpIiA9ICIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLXF1YWxpZmllZCB1cGRhdGUgaW4gc3ViZGlyIHVwZGF0ZXMgZnJvbSB0aGUgcm9vdCcgJworCSgKKwkJY2QgZGlyMSAmJgorCQllY2hvIGV2ZW4gbW9yZSA+PnN1YjIgJiYKKwkJZ2l0IC0tbGl0ZXJhbC1wYXRoc3BlY3MgYWRkIC11ICYmCisJCWVjaG8gZXZlbiBtb3JlID4+c3ViMiAmJgorCQlnaXQgYWRkIC11CisJKSAmJgorCWdpdCBkaWZmLWZpbGVzIC0tbmFtZS1vbmx5ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2UgYSBmaWxlIHdpdGggYSBzeW1saW5rJyAnCisKKwlybSBmb28gJiYKKwl0ZXN0X2xuX3NfYWRkIHRvcCBmb28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZXZlcnl0aGluZyBjaGFuZ2VkJyAnCisKKwlnaXQgYWRkIC11ICYmCisJdGVzdCAteiAiJChnaXQgZGlmZi1maWxlcykiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndG91Y2ggYW5kIHRoZW4gYWRkIC11JyAnCisKKwl0b3VjaCBjaGVjayAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmLWZpbGVzKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0b3VjaCBhbmQgdGhlbiBhZGQgZXhwbGljaXRseScgJworCisJdG91Y2ggY2hlY2sgJiYKKwlnaXQgYWRkIGNoZWNrICYmCisJdGVzdCAteiAiJChnaXQgZGlmZi1maWxlcykiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC1uIC11IHNob3VsZCBub3QgYWRkIGJ1dCBqdXN0IHJlcG9ydCcgJworCisJKAorCQllY2hvICJhZGQgJ1wnJ2NoZWNrJ1wnJyIgJiYKKwkJZWNobyAicmVtb3ZlICdcJyd0b3AnXCcnIgorCSkgPmV4cGVjdCAmJgorCWJlZm9yZT0kKGdpdCBscy1maWxlcyAtcyBjaGVjayB0b3ApICYmCisJZWNobyBjaGFuZ2VkID4+Y2hlY2sgJiYKKwlybSAtZiB0b3AgJiYKKwlnaXQgYWRkIC1uIC11ID5hY3R1YWwgJiYKKwlhZnRlcj0kKGdpdCBscy1maWxlcyAtcyBjaGVjayB0b3ApICYmCisKKwl0ZXN0ICIkYmVmb3JlIiA9ICIkYWZ0ZXIiICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLXUgcmVzb2x2ZXMgdW5tZXJnZWQgcGF0aHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJb25lPSQoZWNobyAxIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJdHdvPSQoZWNobyAyIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJdGhyZWU9JChlY2hvIDMgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwl7CisJCWZvciBwYXRoIGluIHBhdGgxIHBhdGgyCisJCWRvCisJCQllY2hvICIxMDA2NDQgJG9uZSAxCSRwYXRoIgorCQkJZWNobyAiMTAwNjQ0ICR0d28gMgkkcGF0aCIKKwkJCWVjaG8gIjEwMDY0NCAkdGhyZWUgMwkkcGF0aCIKKwkJZG9uZQorCQllY2hvICIxMDA2NDQgJG9uZSAxCXBhdGgzIgorCQllY2hvICIxMDA2NDQgJG9uZSAxCXBhdGg0IgorCQllY2hvICIxMDA2NDQgJG9uZSAzCXBhdGg1IgorCQllY2hvICIxMDA2NDQgJG9uZSAzCXBhdGg2IgorCX0gfAorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJZWNobyAzID5wYXRoMSAmJgorCWVjaG8gMiA+cGF0aDMgJiYKKwllY2hvIDIgPnBhdGg1ICYmCisKKwkjIEZhaWwgdG8gZXhwbGljaXRseSByZXNvbHZlIHJlbW92ZWQgcGF0aHMgd2l0aCAiZ2l0IGFkZCIKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tbm8tYWxsIHBhdGg0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLW5vLWFsbCBwYXRoNiAmJgorCisJIyAiYWRkIC11IiBzaG91bGQgbm90aWNlIHJlbW92YWxzIG5vIG1hdHRlciB3aGF0IHN0YWdlcworCSMgdGhlIGluZGV4IGVudHJpZXMgYXJlIGluLgorCWdpdCBhZGQgLXUgJiYKKwlnaXQgbHMtZmlsZXMgLXMgcGF0aDEgcGF0aDIgcGF0aDMgcGF0aDQgcGF0aDUgcGF0aDYgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiMTAwNjQ0ICR0aHJlZSAwCXBhdGgxIgorCQllY2hvICIxMDA2NDQgJHR3byAwCXBhdGgzIgorCQllY2hvICIxMDA2NDQgJHR3byAwCXBhdGg1IgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCAtdSBub24tZXhpc3RlbnQiIHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtdSBub24tZXhpc3RlbnQgJiYKKwkhIChnaXQgbHMtZmlsZXMgfCBncmVwICJub24tZXhpc3RlbnQiKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIyMDEtYWRkLXVwZGF0ZS10eXBlY2hhbmdlLnNoIGIvdC90MjIwMS1hZGQtdXBkYXRlLXR5cGVjaGFuZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTRlZWMwYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIyMDEtYWRkLXVwZGF0ZS10eXBlY2hhbmdlLnNoCkBAIC0wLDAgKzEsMTQ4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbW9yZSBnaXQgYWRkIC11JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJPnh5enp5ICYmCisJX2VtcHR5PSQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPHh5enp5KSAmJgorCT55b21pbiAmJgorCT5jYXNrbHkgJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTOyB0aGVuCisJCWxuIC1zIGZyb3R6IG5pdGZvbCAmJgorCQlUX2xldHRlcj1UCisJZWxzZQorCQlwcmludGYgJXMgZnJvdHogPiBuaXRmb2wgJiYKKwkJVF9sZXR0ZXI9TQorCWZpICYmCisJbWtkaXIgcmV6cm92ICYmCisJPnJlenJvdi9ib3piYXIgJiYKKwlnaXQgYWRkIGNhc2tseSB4eXp6eSB5b21pbiBuaXRmb2wgcmV6cm92L2JvemJhciAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBtb2RpZnkgJworCXJtIC1mIHh5enp5IHlvbWluIG5pdGZvbCBjYXNrbHkgJiYKKwkjIGNhc2tseSBkaXNhcHBlYXJzIChub3QgYSBzdWJtb2R1bGUpCisJbWtkaXIgY2Fza2x5ICYmCisJIyBuaXRmb2wgY2hhbmdlcyBmcm9tIHN5bWxpbmsgdG8gcmVndWxhcgorCT5uaXRmb2wgJiYKKwkjIHJlenJvdi9ib3piYXIgZGlzYXBwZWFycworCXJtIC1mciByZXpyb3YgJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTOyB0aGVuCisJCWxuIC1zIHh5enp5IHJlenJvdgorCWVsc2UKKwkJcHJpbnRmICVzIHh5enp5ID4gcmV6cm92CisJZmkgJiYKKwkjIHh5enp5IGRpc2FwcGVhcnMgKG5vdCBhIHN1Ym1vZHVsZSkKKwlta2RpciB4eXp6eSAmJgorCWVjaG8gZ251c3RvID54eXp6eS9ib3piYXIgJiYKKwkjIHlvbWluIGdldHMgcmVwbGFjZWQgd2l0aCBhIHN1Ym1vZHVsZQorCW1rZGlyIHlvbWluICYmCisJPnlvbWluL3lvbWluICYmCisJKAorCQljZCB5b21pbiAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgYWRkIHlvbWluICYmCisJCWdpdCBjb21taXQgLW0gInN1YiBpbml0aWFsIgorCSkgJiYKKwl5b21pbj0kKEdJVF9ESVI9eW9taW4vLmdpdCBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJIyB5b25rIGlzIGFkZGVkIGFuZCB0aGVuIHR1cm5lZCBpbnRvIGEgc3VibW9kdWxlCisJIyB0aGlzIHNob3VsZCBhcHBlYXIgYXMgVCBpbiBkaWZmLWZpbGVzIGFuZCBhcyBBIGluIGRpZmYtaW5kZXgKKwk+eW9uayAmJgorCWdpdCBhZGQgeW9uayAmJgorCXJtIC1mIHlvbmsgJiYKKwlta2RpciB5b25rICYmCisJPnlvbmsveW9uayAmJgorCSgKKwkJY2QgeW9uayAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgYWRkIHlvbmsgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3ViIGluaXRpYWwiCisJKSAmJgorCXlvbms9JChHSVRfRElSPXlvbmsvLmdpdCBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJIyB6aWZtaWEgaXMgYWRkZWQgYW5kIHRoZW4gcmVtb3ZlZAorCSMgdGhpcyBzaG91bGQgYXBwZWFyIGluIGRpZmYtZmlsZXMgYnV0IG5vdCBpbiBkaWZmLWluZGV4LgorCT56aWZtaWEgJiYKKwlnaXQgYWRkIHppZm1pYSAmJgorCXJtIC1mIHppZm1pYSAmJgorCW1rZGlyIHppZm1pYSAmJgorCXsKKwkJZ2l0IGxzLXRyZWUgLXIgSEVBRCB8CisJCXNlZCAtZSAicy9eLzovIiAtZSAiCisJCQkvCWNhc2tseS97CisJCQkJcy8JY2Fza2x5LyAkWkVST19PSUQgRCYvCisJCQkJcy9ibG9iLzAwMDAwMC8KKwkJCX0KKwkJCS8Jbml0Zm9sL3sKKwkJCQlzLwluaXRmb2wvICRaRVJPX09JRCAkVF9sZXR0ZXImLworCQkJCXMvYmxvYi8xMDA2NDQvCisJCQl9CisJCQkvCXJlenJvdi5ib3piYXIveworCQkJCXMvCXJlenJvdi5ib3piYXIvICRaRVJPX09JRCBEJi8KKwkJCQlzL2Jsb2IvMDAwMDAwLworCQkJfQorCQkJLwl4eXp6eS97CisJCQkJcy8JeHl6enkvICRaRVJPX09JRCBEJi8KKwkJCQlzL2Jsb2IvMDAwMDAwLworCQkJfQorCQkJLwl5b21pbi97CisJCQkgICAgcy8JeW9taW4vICRaRVJPX09JRCBUJi8KKwkJCQlzL2Jsb2IvMTYwMDAwLworCQkJfQorCQkiCisJfSA+ZXhwZWN0ICYmCisJeworCQljYXQgZXhwZWN0CisJCWVjaG8gIjoxMDA2NDQgMTYwMDAwICRfZW1wdHkgJFpFUk9fT0lEIFQJeW9uayIKKwkJZWNobyAiOjEwMDY0NCAwMDAwMDAgJF9lbXB0eSAkWkVST19PSUQgRAl6aWZtaWEiCisJfSA+ZXhwZWN0LWZpbGVzICYmCisJeworCQljYXQgZXhwZWN0CisJCWVjaG8gIjowMDAwMDAgMTYwMDAwICRaRVJPX09JRCAkWkVST19PSUQgQQl5b25rIgorCX0gPmV4cGVjdC1pbmRleCAmJgorCXsKKwkJZWNobyAiMTAwNjQ0ICRfZW1wdHkgMAluaXRmb2wiCisJCWVjaG8gIjE2MDAwMCAkeW9taW4gMAl5b21pbiIKKwkJZWNobyAiMTYwMDAwICR5b25rIDAJeW9uayIKKwl9ID5leHBlY3QtZmluYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBkaWZmLWZpbGVzICcKKwlnaXQgZGlmZi1maWxlcyAtLXJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWZpbGVzIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGRpZmYtaW5kZXggJworCWdpdCBkaWZmLWluZGV4IC0tcmF3IEhFQUQgLS0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1pbmRleCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC11JyAnCisJcm0gLWYgIi5naXQvc2F2ZWQtaW5kZXgiICYmCisJY3AgLXAgIi5naXQvaW5kZXgiICIuZ2l0L3NhdmVkLWluZGV4IiAmJgorCWdpdCBhZGQgLXUgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1maW5hbCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC1hJyAnCisJaWYgdGVzdCAtZiAiLmdpdC9zYXZlZC1pbmRleCIKKwl0aGVuCisJCXJtIC1mICIuZ2l0L2luZGV4IiAmJgorCQltdiAiLmdpdC9zYXZlZC1pbmRleCIgIi5naXQvaW5kZXgiCisJZmkgJiYKKwlnaXQgY29tbWl0IC1tICJzZWNvbmQiIC1hICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtZmluYWwgYWN0dWFsICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCByZWFkLXRyZWUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWZpbmFsIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIyMDItYWRkLWFkZHJlbW92ZS5zaCBiL3QvdDIyMDItYWRkLWFkZHJlbW92ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZWU2NTkwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjIwMi1hZGQtYWRkcmVtb3ZlLnNoCkBAIC0wLDAgKzEsNTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYWRkIC0tYWxsJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJKAorCQllY2hvIC5naXRpZ25vcmUgJiYKKwkJZWNobyB3aWxsLXJlbW92ZQorCSkgPmV4cGVjdCAmJgorCSgKKwkJZWNobyBhY3R1YWwgJiYKKwkJZWNobyBleHBlY3QgJiYKKwkJZWNobyBpZ25vcmVkCisJKSA+LmdpdGlnbm9yZSAmJgorCWdpdCAtLWxpdGVyYWwtcGF0aHNwZWNzIGFkZCAtLWFsbCAmJgorCT53aWxsLXJlbW92ZSAmJgorCWdpdCBhZGQgLS1hbGwgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLWFsbCcgJworCSgKKwkJZWNobyAuZ2l0aWdub3JlICYmCisJCWVjaG8gbm90LWlnbm9yZWQgJiYKKwkJZWNobyAiTQkuZ2l0aWdub3JlIiAmJgorCQllY2hvICJBCW5vdC1pZ25vcmVkIiAmJgorCQllY2hvICJECXdpbGwtcmVtb3ZlIgorCSkgPmV4cGVjdCAmJgorCT5pZ25vcmVkICYmCisJPm5vdC1pZ25vcmVkICYmCisJZWNobyBtb2RpZmljYXRpb24gPj4uZ2l0aWdub3JlICYmCisJcm0gLWYgd2lsbC1yZW1vdmUgJiYKKwlnaXQgYWRkIC0tYWxsICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCWdpdCBkaWZmLWluZGV4IC0tbmFtZS1zdGF0dXMgLS1jYWNoZWQgSEVBRCA+PmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSnVzdCAiZ2l0IGFkZCIgaXMgYSBuby1vcCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvID53aWxsLXJlbW92ZSAmJgorCT53aWxsLW5vdC1iZS1hZGRlZCAmJgorCWdpdCBhZGQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLW5hbWUtc3RhdHVzIC0tY2FjaGVkIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMjAzLWFkZC1pbnRlbnQuc2ggYi90L3QyMjAzLWFkZC1pbnRlbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWJiZThkYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIyMDMtYWRkLWludGVudC5zaApAQCAtMCwwICsxLDI3OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0ludGVudCB0byBhZGQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlbnQgdG8gYWRkJyAnCisJdGVzdF9jb21taXQgMSAmJgorCWdpdCBybSAxLnQgJiYKKwllY2hvIGhlbGxvID4xLnQgJiYKKwllY2hvIGhlbGxvID5maWxlICYmCisJZWNobyBoZWxsbyA+ZWxpZiAmJgorCWdpdCBhZGQgLU4gZmlsZSAmJgorCWdpdCBhZGQgZWxpZiAmJgorCWdpdCBhZGQgLU4gMS50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdGF0dXMnICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIHwgZ3JlcCAtdiBhY3R1YWwgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlEQSAxLnQKKwlBICBlbGlmCisJIEEgZmlsZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN0YXR1cyB3aXRoIHBvcmNlbGFpbiB2MicgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgfCBncmVwIC12ICJePyIgPmFjdHVhbCAmJgorCW5hbTE9JChlY2hvIDEgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwluYW0yPSQoZ2l0IGhhc2gtb2JqZWN0IGVsaWYpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJMSBEQSBOLi4uIDEwMDY0NCAwMDAwMDAgMTAwNjQ0ICRuYW0xICRaRVJPX09JRCAxLnQKKwkxIEEuIE4uLi4gMDAwMDAwIDEwMDY0NCAxMDA2NDQgJFpFUk9fT0lEICRuYW0yIGVsaWYKKwkxIC5BIE4uLi4gMDAwMDAwIDAwMDAwMCAxMDA2NDQgJFpFUk9fT0lEICRaRVJPX09JRCBmaWxlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayByZXN1bHQgb2YgImFkZCAtTiInICcKKwlnaXQgbHMtZmlsZXMgLXMgZmlsZSA+YWN0dWFsICYmCisJZW1wdHk9JChnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8L2Rldi9udWxsKSAmJgorCWVjaG8gIjEwMDY0NCAkZW1wdHkgMAlmaWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlbnQgdG8gYWRkIGlzIGp1c3QgYW4gb3JkaW5hcnkgZW1wdHkgYmxvYicgJworCWdpdCBhZGQgLXUgJiYKKwlnaXQgbHMtZmlsZXMgLXMgZmlsZSA+YWN0dWFsICYmCisJZ2l0IGxzLWZpbGVzIC1zIGVsaWYgfCBzZWQgLWUgInMvZWxpZi9maWxlLyIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZW50IHRvIGFkZCBkb2VzIG5vdCBjbG9iYmVyIGV4aXN0aW5nIHBhdGhzJyAnCisJZ2l0IGFkZCAtTiBmaWxlIGVsaWYgJiYKKwllbXB0eT0kKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDwvZGV2L251bGwpICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkhIGdyZXAgIiRlbXB0eSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ktdC1hIGVudHJ5IGlzIHNpbXBseSBpZ25vcmVkJyAnCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBpbml0aWFsICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZWNobyB4eXp6eSA+cmV6cm92ICYmCisJZWNobyBmcm90eiA+bml0Zm9sICYmCisJZ2l0IGFkZCByZXpyb3YgJiYKKwlnaXQgYWRkIC1OIG5pdGZvbCAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJdGVzdCAkKGdpdCBscy10cmVlIEhFQUQgLS0gbml0Zm9sIHwgd2MgLWwpID0gMCAmJgorCXRlc3QgJChnaXQgZGlmZiAtLW5hbWUtb25seSBIRUFEIC0tIG5pdGZvbCB8IHdjIC1sKSA9IDEgJiYKKwl0ZXN0ICQoZ2l0IGRpZmYgLS1uYW1lLW9ubHkgLS0gbml0Zm9sIHwgd2MgLWwpID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW4gY29tbWl0IHdpdGggYW4gdW5yZWxhdGVkIGktdC1hIGVudHJ5IGluIGluZGV4JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gYm96YmFyID5yZXpyb3YgJiYKKwllY2hvIGZyb3R6ID5uaXRmb2wgJiYKKwlnaXQgYWRkIHJlenJvdiAmJgorCWdpdCBhZGQgLU4gbml0Zm9sICYmCisJZ2l0IGNvbW1pdCAtbSBwYXJ0aWFsIHJlenJvdgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW4gImNvbW1pdCAtYSIgd2l0aCBhbiBpLXQtYSBlbnRyeScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk6ID5uaXRmb2wgJiYKKwlnaXQgYWRkIC1OIG5pdGZvbCAmJgorCWdpdCBjb21taXQgLWEgLW0gYWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhY2hlLXRyZWUgaW52YWxpZGF0ZXMgaS10LWEgcGF0aHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJbWtkaXIgZGlyICYmCisJOiA+ZGlyL2ZvbyAmJgorCWdpdCBhZGQgZGlyL2ZvbyAmJgorCWdpdCBjb21taXQgLW0gZm9vICYmCisKKwk6ID5kaXIvYmFyICYmCisJZ2l0IGFkZCAtTiBkaXIvYmFyICYmCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgPmFjdHVhbCAmJgorCWVjaG8gZGlyL2JhciA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHdyaXRlLXRyZWUgPi9kZXYvbnVsbCAmJgorCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgPmFjdHVhbCAmJgorCWVjaG8gZGlyL2JhciA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYWNoZS10cmVlIGRvZXMgbm90IGlnbm9yZSBkaXIgdGhhdCBoYXMgaS10LWEgZW50cmllcycgJworCWdpdCBpbml0IGl0YS1pbi1kaXIgJiYKKwkoCisJCWNkIGl0YS1pbi1kaXIgJiYKKwkJbWtkaXIgMiAmJgorCQlmb3IgZiBpbiAxIDIvMSAyLzIgMworCQlkbworCQkJZWNobyAiJGYiID4iJGYiCisJCWRvbmUgJiYKKwkJZ2l0IGFkZCAxIDIvMiAzICYmCisJCWdpdCBhZGQgLU4gMi8xICYmCisJCWdpdCBjb21taXQgLW0gY29tbWl0dGVkICYmCisJCWdpdCBscy10cmVlIC1yIEhFQUQgPmFjdHVhbCAmJgorCQlncmVwIDIvMiBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhY2hlLXRyZWUgZG9lcyBza2lwIGRpciB0aGF0IGJlY29tZXMgZW1wdHknICcKKwlybSAtZnIgaXRhLWluLWRpciAmJgorCWdpdCBpbml0IGl0YS1pbi1kaXIgJiYKKwkoCisJCWNkIGl0YS1pbi1kaXIgJiYKKwkJbWtkaXIgLXAgMS8yLzMgJiYKKwkJZWNobyA0ID4xLzIvMy80ICYmCisJCWdpdCBhZGQgLU4gMS8yLzMvNCAmJgorCQlnaXQgd3JpdGUtdHJlZSA+YWN0dWFsICYmCisJCWVjaG8gJEVNUFRZX1RSRUUgPmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0OiBpdGEgZW50cmllcyBpZ25vcmVkIGluIGVtcHR5IGluaXRpYWwgY29tbWl0IGNoZWNrJyAnCisJZ2l0IGluaXQgZW1wdHktaW5pdGlhbC1jb21taXQgJiYKKwkoCisJCWNkIGVtcHR5LWluaXRpYWwtY29tbWl0ICYmCisJCTogPm9uZSAmJgorCQlnaXQgYWRkIC1OIG9uZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIG5vdGhpbmctbmV3LWhlcmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdDogaXRhIGVudHJpZXMgaWdub3JlZCBpbiBlbXB0eSBjb21taXQgY2hlY2snICcKKwlnaXQgaW5pdCBlbXB0eS1zdWJzZXF1ZW50LWNvbW1pdCAmJgorCSgKKwkJY2QgZW1wdHktc3Vic2VxdWVudC1jb21taXQgJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCTogPnR3byAmJgorCQlnaXQgYWRkIC1OIHR3byAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIG5vdGhpbmctbmV3LWhlcmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBkZXRlY3Rpb24gZmluZHMgdGhlIHJpZ2h0IG5hbWVzJyAnCisJZ2l0IGluaXQgcmVuYW1lLWRldGVjdGlvbiAmJgorCSgKKwkJY2QgcmVuYW1lLWRldGVjdGlvbiAmJgorCQllY2hvIGNvbnRlbnRzID5maXJzdCAmJgorCQlnaXQgYWRkIGZpcnN0ICYmCisJCWdpdCBjb21taXQgLW0gZmlyc3QgJiYKKwkJbXYgZmlyc3QgdGhpcmQgJiYKKwkJZ2l0IGFkZCAtTiB0aGlyZCAmJgorCisJCWdpdCBzdGF0dXMgfCBncmVwIC12ICJePyIgPmFjdHVhbC4xICYmCisJCXRlc3RfaTE4bmdyZXAgInJlbmFtZWQ6ICpmaXJzdCAtPiB0aGlyZCIgYWN0dWFsLjEgJiYKKworCQlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIHwgZ3JlcCAtdiAiXj8iID5hY3R1YWwuMiAmJgorCQljYXQgPmV4cGVjdGVkLjIgPDwtXEVPRiAmJgorCQkgUiBmaXJzdCAtPiB0aGlyZAorCQlFT0YKKwkJdGVzdF9jbXAgZXhwZWN0ZWQuMiBhY3R1YWwuMiAmJgorCisJCWhhc2g9JChnaXQgaGFzaC1vYmplY3QgdGhpcmQpICYmCisJCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgfCBncmVwIC12ICJePyIgPmFjdHVhbC4zICYmCisJCWNhdCA+ZXhwZWN0ZWQuMyA8PC1FT0YgJiYKKwkJMiAuUiBOLi4uIDEwMDY0NCAxMDA2NDQgMTAwNjQ0ICRoYXNoICRoYXNoIFIxMDAgdGhpcmQJZmlyc3QKKwkJRU9GCisJCXRlc3RfY21wIGV4cGVjdGVkLjMgYWN0dWFsLjMgJiYKKworCQlnaXQgZGlmZiAtLXN0YXQgPmFjdHVhbC40ICYmCisJCWNhdCA+ZXhwZWN0ZWQuNCA8PC1FT0YgJiYKKwkJIGZpcnN0ID0+IHRoaXJkIHwgMAorCQkgMSBmaWxlIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKwkJRU9GCisJCXRlc3RfY21wIGV4cGVjdGVkLjQgYWN0dWFsLjQgJiYKKworCQlnaXQgZGlmZiAtLWNhY2hlZCAtLXN0YXQgPmFjdHVhbC41ICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuNQorCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkb3VibGUgcmVuYW1lIGRldGVjdGlvbiBpbiBzdGF0dXMnICcKKwlnaXQgaW5pdCByZW5hbWUtZGV0ZWN0aW9uLTIgJiYKKwkoCisJCWNkIHJlbmFtZS1kZXRlY3Rpb24tMiAmJgorCQllY2hvIGNvbnRlbnRzID5maXJzdCAmJgorCQlnaXQgYWRkIGZpcnN0ICYmCisJCWdpdCBjb21taXQgLW0gZmlyc3QgJiYKKwkJZ2l0IG12IGZpcnN0IHNlY29uZCAmJgorCQltdiBzZWNvbmQgdGhpcmQgJiYKKwkJZ2l0IGFkZCAtTiB0aGlyZCAmJgorCisJCWdpdCBzdGF0dXMgfCBncmVwIC12ICJePyIgPmFjdHVhbC4xICYmCisJCXRlc3RfaTE4bmdyZXAgInJlbmFtZWQ6ICpmaXJzdCAtPiBzZWNvbmQiIGFjdHVhbC4xICYmCisJCXRlc3RfaTE4bmdyZXAgInJlbmFtZWQ6ICpzZWNvbmQgLT4gdGhpcmQiIGFjdHVhbC4xICYmCisKKwkJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiB8IGdyZXAgLXYgIl4/IiA+YWN0dWFsLjIgJiYKKwkJY2F0ID5leHBlY3RlZC4yIDw8LVxFT0YgJiYKKwkJUiAgZmlyc3QgLT4gc2Vjb25kCisJCSBSIHNlY29uZCAtPiB0aGlyZAorCQlFT0YKKwkJdGVzdF9jbXAgZXhwZWN0ZWQuMiBhY3R1YWwuMiAmJgorCisJCWhhc2g9JChnaXQgaGFzaC1vYmplY3QgdGhpcmQpICYmCisJCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgfCBncmVwIC12ICJePyIgPmFjdHVhbC4zICYmCisJCWNhdCA+ZXhwZWN0ZWQuMyA8PC1FT0YgJiYKKwkJMiBSLiBOLi4uIDEwMDY0NCAxMDA2NDQgMTAwNjQ0ICRoYXNoICRoYXNoIFIxMDAgc2Vjb25kCWZpcnN0CisJCTIgLlIgTi4uLiAxMDA2NDQgMTAwNjQ0IDEwMDY0NCAkaGFzaCAkaGFzaCBSMTAwIHRoaXJkCXNlY29uZAorCQlFT0YKKwkJdGVzdF9jbXAgZXhwZWN0ZWQuMyBhY3R1YWwuMworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlcy9kaWZmLWNhY2hlZCBzaG93cyBpdGEgYXMgbmV3L25vdC1uZXcgZmlsZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBuZXcgPm5ldy1pdGEgJiYKKwlnaXQgYWRkIC1OIG5ldy1pdGEgJiYKKwlnaXQgZGlmZiAtLXN1bW1hcnkgPmFjdHVhbCAmJgorCWVjaG8gIiBjcmVhdGUgbW9kZSAxMDA2NDQgbmV3LWl0YSIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1zdW1tYXJ5ID5hY3R1YWwyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbDIKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZGlmZiBIRUFEIiBpbmNsdWRlcyBpdGEgYXMgbmV3IGZpbGVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gbmV3ID5uZXctaXRhICYmCisJb2lkPSQoZ2l0IGhhc2gtb2JqZWN0IG5ldy1pdGEpICYmCisJb2lkPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRvaWQpICYmCisJZ2l0IGFkZCAtTiBuZXctaXRhICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlkaWZmIC0tZ2l0IGEvbmV3LWl0YSBiL25ldy1pdGEKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLiRvaWQKKwktLS0gL2Rldi9udWxsCisJKysrIGIvbmV3LWl0YQorCUBAIC0wLDAgKzEgQEAKKwkrbmV3CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0taW50ZW50LXRvLWFkZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIG5ldyA+bmV3LWl0YSAmJgorCWdpdCBhZGQgLU4gbmV3LWl0YSAmJgorCWdpdCBkaWZmID5leHBlY3RlZCAmJgorCWdyZXAgIm5ldyBmaWxlIiBleHBlY3RlZCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgYXBwbHkgLS1pbnRlbnQtdG8tYWRkIGV4cGVjdGVkICYmCisJZ2l0IGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIyMDQtYWRkLWlnbm9yZWQuc2ggYi90L3QyMjA0LWFkZC1pZ25vcmVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJlMDczNjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMjA0LWFkZC1pZ25vcmVkLnNoCkBAIC0wLDAgKzEsOTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXZpbmcgaWdub3JlZCBwYXRocyB0byBnaXQgYWRkJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgc3ViIGRpciBkaXIvc3ViICYmCisJZWNobyBzdWIgPi5naXRpZ25vcmUgJiYKKwllY2hvIGlnbiA+Pi5naXRpZ25vcmUgJiYKKwlmb3IgcCBpbiAuIHN1YiBkaXIgZGlyL3N1YgorCWRvCisJCT4iJHAvaWduIiAmJgorCQk+IiRwL2ZpbGUiIHx8IGV4aXQgMQorCWRvbmUKKycKKworZm9yIGkgaW4gZmlsZSBkaXIvZmlsZSBkaXIgJ2QqJworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJubyBjb21wbGFpbnRzIGZvciB1bmlnbm9yZWQgJGkiICcKKwkJcm0gLWYgLmdpdC9pbmRleCAmJgorCQlnaXQgYWRkICIkaSIgJiYKKwkJZ2l0IGxzLWZpbGVzICIkaSIgPm91dCAmJgorCQl0ZXN0IC1zIG91dAorCScKK2RvbmUKKworZm9yIGkgaW4gaWduIGRpci9pZ24gZGlyL3N1YiBkaXIvc3ViLyppZ24gc3ViL2ZpbGUgc3ViIHN1Yi8qCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBsYWludHMgZm9yIGlnbm9yZWQgJGkiICcKKwkJcm0gLWYgLmdpdC9pbmRleCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgYWRkICIkaSIgMj5lcnIgJiYKKwkJZ2l0IGxzLWZpbGVzICIkaSIgPm91dCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgb3V0CisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSBvdXRwdXQiICcKKwkJdGVzdF9pMThuZ3JlcCAtZSAiVXNlIC1mIGlmIiBlcnIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21wbGFpbnRzIGZvciBpZ25vcmVkICRpIHdpdGggdW5pZ25vcmVkIGZpbGUiICcKKwkJcm0gLWYgLmdpdC9pbmRleCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgYWRkICIkaSIgZmlsZSAyPmVyciAmJgorCQlnaXQgbHMtZmlsZXMgIiRpIiA+b3V0ICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQKKwknCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSB3aXRoIHVuaWdub3JlZCBmaWxlIG91dHB1dCIgJworCQl0ZXN0X2kxOG5ncmVwIC1lICJVc2UgLWYgaWYiIGVycgorCScKK2RvbmUKKworZm9yIGkgaW4gc3ViIHN1Yi8qCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBsYWludHMgZm9yIGlnbm9yZWQgJGkgaW4gZGlyIiAnCisJCXJtIC1mIC5naXQvaW5kZXggJiYKKwkJKAorCQkJY2QgZGlyICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgYWRkICIkaSIgMj5lcnIgJiYKKwkJCWdpdCBscy1maWxlcyAiJGkiID5vdXQgJiYKKwkJCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQKKwkJKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBsYWludHMgZm9yIGlnbm9yZWQgJGkgaW4gZGlyIG91dHB1dCIgJworCQkoCisJCQljZCBkaXIgJiYKKwkJCXRlc3RfaTE4bmdyZXAgLWUgIlVzZSAtZiBpZiIgZXJyCisJCSkKKwknCitkb25lCisKK2ZvciBpIGluIGlnbiBmaWxlCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBsYWludHMgZm9yIGlnbm9yZWQgJGkgaW4gc3ViIiAnCisJCXJtIC1mIC5naXQvaW5kZXggJiYKKwkJKAorCQkJY2Qgc3ViICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgYWRkICIkaSIgMj5lcnIgJiYKKwkJCWdpdCBscy1maWxlcyAiJGkiID5vdXQgJiYKKwkJCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQKKwkJKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBsYWludHMgZm9yIGlnbm9yZWQgJGkgaW4gc3ViIG91dHB1dCIgJworCQkoCisJCQljZCBzdWIgJiYKKwkJCXRlc3RfaTE4bmdyZXAgLWUgIlVzZSAtZiBpZiIgZXJyCisJCSkKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjMwMC1jZC10by10b3BsZXZlbC5zaCBiL3QvdDIzMDAtY2QtdG8tdG9wbGV2ZWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzhkZTZkOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIzMDAtY2QtdG8tdG9wbGV2ZWwuc2gKQEAgLTAsMCArMSw0NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NkX3RvX3RvcGxldmVsJworCisuIC4vdGVzdC1saWIuc2gKKworRVhFQ19QQVRIPSIkKGdpdCAtLWV4ZWMtcGF0aCkiCit0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVyB8fAorY2FzZSAiJEVYRUNfUEFUSCIgaW4KK1tBLVphLXpdOi8qKQorCUVYRUNfUEFUSD0iLyR7RVhFQ19QQVRIJSU6Kn0ke0VYRUNfUEFUSCM/On0iCisJOzsKK2VzYWMKKwordGVzdF9jZF90b190b3BsZXZlbCAoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkMyAiJDIiICcKKwkJKAorCQkJY2QgJyInJDEnIicgJiYKKwkJCVBBVEg9IiRFWEVDX1BBVEg6JFBBVEgiICYmCisJCQkuIGdpdC1zaC1zZXR1cCAmJgorCQkJY2RfdG9fdG9wbGV2ZWwgJiYKKwkJCVsgIiQocHdkIC1QKSIgPSAiJFRPUExFVkVMIiBdCisJCSkKKwknCit9CisKK1RPUExFVkVMPSIkKHB3ZCAtUCkvcmVwbyIKK21rZGlyIC1wIHJlcG8vc3ViL2RpcgorbXYgLmdpdCByZXBvLworU1VCRElSRUNUT1JZX09LPTEKKwordGVzdF9jZF90b190b3BsZXZlbCByZXBvICdhdCBwaHlzaWNhbCByb290JworCit0ZXN0X2NkX3RvX3RvcGxldmVsIHJlcG8vc3ViL2RpciAnYXQgcGh5c2ljYWwgc3ViZGlyJworCitsbiAtcyByZXBvIHN5bXJlcG8gMj4vZGV2L251bGwKK3Rlc3RfY2RfdG9fdG9wbGV2ZWwgc3ltcmVwbyAnYXQgc3ltYm9saWMgcm9vdCcgU1lNTElOS1MKKworbG4gLXMgcmVwby9zdWIvZGlyIHN1YmRpci1saW5rIDI+L2Rldi9udWxsCit0ZXN0X2NkX3RvX3RvcGxldmVsIHN1YmRpci1saW5rICdhdCBzeW1ib2xpYyBzdWJkaXInIFNZTUxJTktTCisKK2NkIHJlcG8KK2xuIC1zIHN1Yi9kaXIgaW50ZXJuYWwtbGluayAyPi9kZXYvbnVsbAordGVzdF9jZF90b190b3BsZXZlbCBpbnRlcm5hbC1saW5rICdhdCBpbnRlcm5hbCBzeW1ib2xpYyBzdWJkaXInIFNZTUxJTktTCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjQwMC13b3JrdHJlZS1hZGQuc2ggYi90L3QyNDAwLXdvcmt0cmVlLWFkZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YTc0OTU0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjQwMC13b3JrdHJlZS1hZGQuc2gKQEAgLTAsMCArMSw2MjMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCB3b3JrdHJlZSBhZGQnCisKKy4gLi90ZXN0LWxpYi5zaAorCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIGFuIGV4aXN0aW5nIHdvcmt0cmVlJyAnCisJbWtkaXIgLXAgZXhpc3Rpbmcvc3VidHJlZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggZXhpc3RpbmcgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIGFuIGV4aXN0aW5nIGVtcHR5IHdvcmt0cmVlJyAnCisJbWtkaXIgZXhpc3RpbmdfZW1wdHkgJiYKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIGV4aXN0aW5nX2VtcHR5IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB1c2luZyBzaG9ydGhhbmQgLSBmYWlscyB3aGVuIG5vIHByZXZpb3VzIGJyYW5jaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBhZGQgZXhpc3Rpbmdfc2hvcnQgLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB1c2luZyAtIHNob3J0aGFuZCcgJworCWdpdCBjaGVja291dCAtYiBuZXdicmFuY2ggJiYKKwllY2hvIGhlbGxvID5teXdvcmxkICYmCisJZ2l0IGFkZCBteXdvcmxkICYmCisJZ2l0IGNvbW1pdCAtbSBteXdvcmxkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCB3b3JrdHJlZSBhZGQgc2hvcnQtaGFuZCAtICYmCisJZWNobyByZWZzL2hlYWRzL25ld2JyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IC1DIHNob3J0LWhhbmQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgcmVmdXNlcyB0byBjaGVja291dCBsb2NrZWQgYnJhbmNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCB6ZXJlIG1hc3RlciAmJgorCSEgdGVzdCAtZCB6ZXJlICYmCisJISB0ZXN0IC1kIC5naXQvd29ya3RyZWVzL3plcmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgb3V0IHBhdGhzIG5vdCBjb21wbGFpbmluZyBhYm91dCBsaW5rZWQgY2hlY2tvdXRzJyAnCisJKAorCWNkIGV4aXN0aW5nX2VtcHR5ICYmCisJZWNobyBkaXJ0eSA+PmluaXQudCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgLS0gaW5pdC50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB3b3JrdHJlZScgJworCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBoZXJlIG1hc3RlciAmJgorCSgKKwkJY2QgaGVyZSAmJgorCQl0ZXN0X2NtcCAuLi9pbml0LnQgaW5pdC50ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3QgYWN0dWFsICYmCisJCWdpdCBmc2NrCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB3b3JrdHJlZSB3aXRoIGxvY2snICcKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdCAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggLS1sb2NrIGhlcmUtd2l0aC1sb2NrIG1hc3RlciAmJgorCXRlc3QgLWYgLmdpdC93b3JrdHJlZXMvaGVyZS13aXRoLWxvY2svbG9ja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHdvcmt0cmVlIGZyb20gYSBzdWJkaXInICcKKwkoCisJCW1rZGlyIHN1YiAmJgorCQljZCBzdWIgJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBoZXJlIG1hc3RlciAmJgorCQljZCBoZXJlICYmCisJCXRlc3RfY21wIC4uLy4uL2luaXQudCBpbml0LnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIGZyb20gYSBsaW5rZWQgY2hlY2tvdXQnICcKKwkoCisJCWNkIGhlcmUgJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBuZXN0ZWQtaGVyZSBtYXN0ZXIgJiYKKwkJY2QgbmVzdGVkLWhlcmUgJiYKKwkJZ2l0IGZzY2sKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHdvcmt0cmVlIGNyZWF0aW5nIG5ldyBicmFuY2gnICcKKwlnaXQgd29ya3RyZWUgYWRkIC1iIG5ld21hc3RlciB0aGVyZSBtYXN0ZXIgJiYKKwkoCisJCWNkIHRoZXJlICYmCisJCXRlc3RfY21wIC4uL2luaXQudCBpbml0LnQgJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwkJZWNobyByZWZzL2hlYWRzL25ld21hc3RlciA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJZ2l0IGZzY2sKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZSB0aGUgc2FtZSBicmFuY2ggaXMgYWxyZWFkeSBjaGVja2VkIG91dCcgJworCSgKKwkJY2QgaGVyZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgbmV3bWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkaWUgdGhlIHNhbWUgYnJhbmNoIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgKHN5bWxpbmspJyAnCisJaGVhZD0kKGdpdCAtQyB0aGVyZSByZXYtcGFyc2UgLS1naXQtcGF0aCBIRUFEKSAmJgorCXJlZj0kKGdpdCAtQyB0aGVyZSBzeW1ib2xpYy1yZWYgSEVBRCkgJiYKKwlybSAiJGhlYWQiICYmCisJbG4gLXMgIiRyZWYiICIkaGVhZCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgaGVyZSBjaGVja291dCBuZXdtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IGRpZSB0aGUgc2FtZSBicmFuY2ggaXMgYWxyZWFkeSBjaGVja2VkIG91dCcgJworCSgKKwkJY2QgaGVyZSAmJgorCQlnaXQgd29ya3RyZWUgYWRkIC0tZm9yY2UgYW5vdGhlcm5ld21hc3RlciBuZXdtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBkaWUgb24gcmUtY2hlY2tpbmcgb3V0IGN1cnJlbnQgYnJhbmNoJyAnCisJKAorCQljZCB0aGVyZSAmJgorCQlnaXQgY2hlY2tvdXQgbmV3bWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiBmcm9tIGEgYmFyZSByZXBvJyAnCisJKAorCQlnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZSAmJgorCQljZCBiYXJlICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgLWIgYmFyZS1tYXN0ZXIgLi4vdGhlcmUyIG1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgZnJvbSBhIGJhcmUgcmVwbyB3aXRob3V0ICJhZGQiJyAnCisJKAorCQljZCBiYXJlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIGRlZmF1bHQgYnJhbmNoIG9mIGEgYmFyZSByZXBvJyAnCisJKAorCQlnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZTIgJiYKKwkJY2QgYmFyZTIgJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCAuLi90aGVyZTMgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGdyYWZ0cycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAuZ2l0L2luZm8vZ3JhZnRzICYmCisJdGVzdF9jb21taXQgYWJjICYmCisJU0hBMT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X2NvbW1pdCBkZWYgJiYKKwl0ZXN0X2NvbW1pdCB4eXogJiYKKwllY2hvICIkKGdpdCByZXYtcGFyc2UgSEVBRCkgJFNIQTEiID4uZ2l0L2luZm8vZ3JhZnRzICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJeHl6CisJYWJjCisJRU9GCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBncmFmdGVkIG1hc3RlciAmJgorCWdpdCAtLWdpdC1kaXI9Z3JhZnRlZC8uZ2l0IGxvZyAtLWZvcm1hdD0lcyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIGZyb20gcmVsYXRpdmUgSEVBRCcgJworCXRlc3RfY29tbWl0IGEgJiYKKwl0ZXN0X2NvbW1pdCBiICYmCisJdGVzdF9jb21taXQgYyAmJgorCWdpdCByZXYtcGFyc2UgSEVBRH4xID5leHBlY3RlZCAmJgorCWdpdCB3b3JrdHJlZSBhZGQgcmVsaGVhZCBIRUFEfjEgJiYKKwlnaXQgLUMgcmVsaGVhZCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQgLWIiIHdpdGggPGJyYW5jaD4gb21pdHRlZCcgJworCWdpdCB3b3JrdHJlZSBhZGQgLWIgYnVyYmxlIGZsb3JuayAmJgorCXRlc3RfY21wX3JldiBIRUFEIGJ1cmJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIC0tZGV0YWNoIiB3aXRoIDxicmFuY2g+IG9taXR0ZWQnICcKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIGZpc2hob29rICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3RlZCAmJgorCWdpdCAtQyBmaXNoaG9vayByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGZpc2hob29rIHN5bWJvbGljLXJlZiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHdpdGggPGJyYW5jaD4gb21pdHRlZCcgJworCWdpdCB3b3JrdHJlZSBhZGQgd2lmZmxlL2JhdCAmJgorCXRlc3RfY21wX3JldiBIRUFEIGJhdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiBjaGVja3Mgb3V0IGV4aXN0aW5nIGJyYW5jaCBvZiBkd2ltZCBuYW1lJyAnCisJZ2l0IGJyYW5jaCBkd2ltIEhFQUR+MSAmJgorCWdpdCB3b3JrdHJlZSBhZGQgZHdpbSAmJgorCXRlc3RfY21wX3JldiBIRUFEfjEgZHdpbSAmJgorCSgKKwkJY2QgZHdpbSAmJgorCQl0ZXN0X2NtcF9yZXYgSEVBRCBkd2ltCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIDxwYXRoPiIgZHdpbSBmYWlscyB3aXRoIGNoZWNrZWQgb3V0IGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtYiB0ZXN0LWJyYW5jaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBhZGQgdGVzdC1icmFuY2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXN0LWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIC0tZm9yY2UiIHdpdGggZXhpc3RpbmcgZHdpbWQgbmFtZSBkb2VzbnQgZGllJyAnCisJZ2l0IGNoZWNrb3V0IHRlc3QtYnJhbmNoICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWZvcmNlIHRlc3QtYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIG5vIGF1dG8tdml2aWZ5IHdpdGggLS1kZXRhY2ggYW5kIDxicmFuY2g+IG9taXR0ZWQnICcKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIG1pc2gvbWFzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWFzaCAtLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBtaXNoL21hc2ggc3ltYm9saWMtcmVmIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgLWIvLUIgbXV0dWFsbHkgZXhjbHVzaXZlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCAtYiBwb29kbGUgLUIgcG9vZGxlIGJhbWJvbyBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgLWIvLS1kZXRhY2ggbXV0dWFsbHkgZXhjbHVzaXZlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCAtYiBwb29kbGUgLS1kZXRhY2ggYmFtYm9vIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiAtQi8tLWRldGFjaCBtdXR1YWxseSBleGNsdXNpdmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgYWRkIC1CIHBvb2RsZSAtLWRldGFjaCBiYW1ib28gbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQgLUIiIGZhaWxzIGlmIHRoZSBicmFuY2ggaXMgY2hlY2tlZCBvdXQnICcKKwlnaXQgcmV2LXBhcnNlIG5ld21hc3RlciA+YmVmb3JlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCAtQiBuZXdtYXN0ZXIgYmFtYm9vIG1hc3RlciAmJgorCWdpdCByZXYtcGFyc2UgbmV3bWFzdGVyID5hZnRlciAmJgorCXRlc3RfY21wIGJlZm9yZSBhZnRlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLUInICcKKwlnaXQgd29ya3RyZWUgYWRkIC1CIHBvb2RsZSBiYW1ib28yIG1hc3Rlcl4gJiYKKwlnaXQgLUMgYmFtYm9vMiBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJZWNobyByZWZzL2hlYWRzL3Bvb2RsZSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcF9yZXYgbWFzdGVyXiBwb29kbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC0tcXVpZXQnICcKKwlnaXQgd29ya3RyZWUgYWRkIC0tcXVpZXQgYW5vdGhlci13b3JrdHJlZSBtYXN0ZXIgMj5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIGNsb25lIGZyb20gbGlua2VkIGNoZWNrb3V0JyAnCisJZ2l0IGNsb25lIC0tbG9jYWwgaGVyZSBoZXJlLWNsb25lICYmCisJKCBjZCBoZXJlLWNsb25lICYmIGdpdCBmc2NrICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgY2xvbmUgLS1zaGFyZWQgZnJvbSBsaW5rZWQgY2hlY2tvdXQnICcKKwlnaXQgLUMgYmFyZSB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggLi4vYmFyZXRyZWUgJiYKKwlnaXQgY2xvbmUgLS1sb2NhbCAtLXNoYXJlZCBiYXJldHJlZSBiYXJlLWNsb25lICYmCisJZ3JlcCAvYmFyZS8gYmFyZS1jbG9uZS8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHdvcmt0cmVlIHdpdGggLS1uby1jaGVja291dCcgJworCWdpdCB3b3JrdHJlZSBhZGQgLS1uby1jaGVja291dCAtYiBzd2FtcCBzd2FtcCAmJgorCSEgdGVzdCAtZSBzd2FtcC9pbml0LnQgJiYKKwlnaXQgLUMgc3dhbXAgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9jbXAgaW5pdC50IHN3YW1wL2luaXQudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB3b3JrdHJlZSB3aXRoIC0tY2hlY2tvdXQnICcKKwlnaXQgd29ya3RyZWUgYWRkIC0tY2hlY2tvdXQgLWIgc3dtYXAyIHN3YW1wMiAmJgorCXRlc3RfY21wIGluaXQudCBzd2FtcDIvaW5pdC50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1dCBhIHdvcmt0cmVlIHVuZGVyIHJlYmFzZScgJworCWdpdCB3b3JrdHJlZSBhZGQgdW5kZXItcmViYXNlICYmCisJKAorCQljZCB1bmRlci1yZWJhc2UgJiYKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCQlnaXQgd29ya3RyZWUgbGlzdCB8IGdyZXAgInVuZGVyLXJlYmFzZS4qZGV0YWNoZWQgSEVBRCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhIHdvcmt0cmVlLCBjaGVja2luZyBvdXQgYSByZWJhc2VkIGJyYW5jaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBhZGQgbmV3LXJlYmFzZSB1bmRlci1yZWJhc2UgJiYKKwkhIHRlc3QgLWQgbmV3LXJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyBvdXQgYSByZWJhc2VkIGJyYW5jaCBmcm9tIGFub3RoZXIgd29ya3RyZWUnICcKKwlnaXQgd29ya3RyZWUgYWRkIG5ldy1wbGFjZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBuZXctcGxhY2UgY2hlY2tvdXQgdW5kZXItcmViYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBhbGxvdyB0byBkZWxldGUgYSBicmFuY2ggdW5kZXIgcmViYXNlJyAnCisJKAorCQljZCB1bmRlci1yZWJhc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtRCB1bmRlci1yZWJhc2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBhIGJyYW5jaCB1bmRlciByZWJhc2Ugbm90IGFsbG93ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1NIHVuZGVyLXJlYmFzZSByZWJhc2Utd2l0aC1uZXctbmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBvdXQgZnJvbSBjdXJyZW50IHdvcmt0cmVlIGJyYW5jaCBvaycgJworCSgKKwkJY2QgdW5kZXItcmViYXNlICYmCisJCWdpdCBjaGVja291dCB1bmRlci1yZWJhc2UgJiYKKwkJZ2l0IGNoZWNrb3V0IC0gJiYKKwkJZ2l0IHJlYmFzZSAtLWFib3J0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBhIGJyYW5jaCB1bmRlciBiaXNlY3QnICcKKwlnaXQgd29ya3RyZWUgYWRkIHVuZGVyLWJpc2VjdCAmJgorCSgKKwkJY2QgdW5kZXItYmlzZWN0ICYmCisJCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwkJZ2l0IGJpc2VjdCBiYWQgJiYKKwkJZ2l0IGJpc2VjdCBnb29kIEhFQUR+MiAmJgorCQlnaXQgd29ya3RyZWUgbGlzdCB8IGdyZXAgInVuZGVyLWJpc2VjdC4qZGV0YWNoZWQgSEVBRCIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCBuZXctYmlzZWN0IHVuZGVyLWJpc2VjdCAmJgorCQkhIHRlc3QgLWQgbmV3LWJpc2VjdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGEgYnJhbmNoIHVuZGVyIGJpc2VjdCBub3QgYWxsb3dlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLU0gdW5kZXItYmlzZWN0IGJpc2VjdC13aXRoLW5ldy1uYW1lCisnCisjIElzIGJyYW5jaCAicmVmcy9oZWFkcy8kMSIgc2V0IHRvIHB1bGwgZnJvbSAiJDIvJDMiPwordGVzdF9icmFuY2hfdXBzdHJlYW0gKCkgeworCXByaW50ZiAiJXNcbiIgIiQyIiAicmVmcy9oZWFkcy8kMyIgPmV4cGVjdC51cHN0cmVhbSAmJgorCXsKKwkJZ2l0IGNvbmZpZyAiYnJhbmNoLiQxLnJlbW90ZSIgJiYKKwkJZ2l0IGNvbmZpZyAiYnJhbmNoLiQxLm1lcmdlIgorCX0gPmFjdHVhbC51cHN0cmVhbSAmJgorCXRlc3RfY21wIGV4cGVjdC51cHN0cmVhbSBhY3R1YWwudXBzdHJlYW0KK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS10cmFjayBzZXRzIHVwIHRyYWNraW5nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yZiB0cmFjayAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLS10cmFjayAtYiB0cmFjayB0cmFjayBtYXN0ZXIgJiYKKwl0ZXN0X2JyYW5jaF91cHN0cmVhbSB0cmFjayAuIG1hc3RlcgorJworCisjIHNldHVwIHJlbW90ZSByZXBvc2l0b3J5ICQxIGFuZCByZXBvc2l0b3J5ICQyIHdpdGggJDEgc2V0IHVwIGFzCisjIHJlbW90ZS4gIFRoZSByZW1vdGUgaGFzIHR3byBicmFuY2hlcywgbWFzdGVyIGFuZCBmb28uCitzZXR1cF9yZW1vdGVfcmVwbyAoKSB7CisJZ2l0IGluaXQgJDEgJiYKKwkoCisJCWNkICQxICYmCisJCXRlc3RfY29tbWl0ICQxX21hc3RlciAmJgorCQlnaXQgY2hlY2tvdXQgLWIgZm9vICYmCisJCXRlc3RfY29tbWl0IHVwc3RyZWFtX2ZvbworCSkgJiYKKwlnaXQgaW5pdCAkMiAmJgorCSgKKwkJY2QgJDIgJiYKKwkJdGVzdF9jb21taXQgJDJfbWFzdGVyICYmCisJCWdpdCByZW1vdGUgYWRkICQxIC4uLyQxICYmCisJCWdpdCBjb25maWcgcmVtb3RlLiQxLmZldGNoIFwKKwkJCSJyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzLyQxLyoiICYmCisJCWdpdCBmZXRjaCAtLWFsbAorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby10cmFjayBhdm9pZHMgc2V0dGluZyB1cCB0cmFja2luZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtcmYgcmVwb191cHN0cmVhbSByZXBvX2xvY2FsIGZvbyAmJgorCXNldHVwX3JlbW90ZV9yZXBvIHJlcG9fdXBzdHJlYW0gcmVwb19sb2NhbCAmJgorCSgKKwkJY2QgcmVwb19sb2NhbCAmJgorCQlnaXQgd29ya3RyZWUgYWRkIC0tbm8tdHJhY2sgLWIgZm9vIC4uL2ZvbyByZXBvX3Vwc3RyZWFtL2ZvbworCSkgJiYKKwkoCisJCWNkIGZvbyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnICJicmFuY2guZm9vLnJlbW90ZSIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAiYnJhbmNoLmZvby5tZXJnZSIgJiYKKwkJdGVzdF9jbXBfcmV2IHJlZnMvcmVtb3Rlcy9yZXBvX3Vwc3RyZWFtL2ZvbyByZWZzL2hlYWRzL2ZvbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgPHBhdGg+IDxub24tZXhpc3RlbnQtYnJhbmNoPiBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBhZGQgZm9vIG5vbi1leGlzdGVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiA8cGF0aD4gPGJyYW5jaD4gZHdpbXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIHJlcG9fdXBzdHJlYW0gcmVwb19kd2ltIGZvbyAmJgorCXNldHVwX3JlbW90ZV9yZXBvIHJlcG9fdXBzdHJlYW0gcmVwb19kd2ltICYmCisJZ2l0IGluaXQgcmVwb19kd2ltICYmCisJKAorCQljZCByZXBvX2R3aW0gJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCAuLi9mb28gZm9vCisJKSAmJgorCSgKKwkJY2QgZm9vICYmCisJCXRlc3RfYnJhbmNoX3Vwc3RyZWFtIGZvbyByZXBvX3Vwc3RyZWFtIGZvbyAmJgorCQl0ZXN0X2NtcF9yZXYgcmVmcy9yZW1vdGVzL3JlcG9fdXBzdHJlYW0vZm9vIHJlZnMvaGVhZHMvZm9vCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiA8cGF0aD4gPGJyYW5jaD4gZHdpbXMgd2l0aCBjaGVja291dC5kZWZhdWx0UmVtb3RlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yZiByZXBvX3Vwc3RyZWFtIHJlcG9fZHdpbSBmb28gJiYKKwlzZXR1cF9yZW1vdGVfcmVwbyByZXBvX3Vwc3RyZWFtIHJlcG9fZHdpbSAmJgorCWdpdCBpbml0IHJlcG9fZHdpbSAmJgorCSgKKwkJY2QgcmVwb19kd2ltICYmCisJCWdpdCByZW1vdGUgYWRkIHJlcG9fdXBzdHJlYW0yIC4uL3JlcG9fdXBzdHJlYW0gJiYKKwkJZ2l0IGZldGNoIHJlcG9fdXBzdHJlYW0yICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBhZGQgLi4vZm9vIGZvbyAmJgorCQlnaXQgLWMgY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1yZXBvX3Vwc3RyZWFtIHdvcmt0cmVlIGFkZCAuLi9mb28gZm9vICYmCisJCWdpdCBzdGF0dXMgLXVubyAtLXBvcmNlbGFpbiA+c3RhdHVzLmFjdHVhbCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgc3RhdHVzLmFjdHVhbAorCSkgJiYKKwkoCisJCWNkIGZvbyAmJgorCQl0ZXN0X2JyYW5jaF91cHN0cmVhbSBmb28gcmVwb191cHN0cmVhbSBmb28gJiYKKwkJdGVzdF9jbXBfcmV2IHJlZnMvcmVtb3Rlcy9yZXBvX3Vwc3RyZWFtL2ZvbyByZWZzL2hlYWRzL2ZvbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHdvcmt0cmVlIGFkZCBkb2VzIG5vdCBtYXRjaCByZW1vdGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIHJlcG9fYSByZXBvX2IgZm9vICYmCisJc2V0dXBfcmVtb3RlX3JlcG8gcmVwb19hIHJlcG9fYiAmJgorCSgKKwkJY2QgcmVwb19iICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgLi4vZm9vCisJKSAmJgorCSgKKwkJY2QgZm9vICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgImJyYW5jaC5mb28ucmVtb3RlIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnICJicmFuY2guZm9vLm1lcmdlIiAmJgorCQl0ZXN0X2NtcF9yZXYgISByZWZzL3JlbW90ZXMvcmVwb19hL2ZvbyByZWZzL2hlYWRzL2ZvbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHdvcmt0cmVlIGFkZCAtLWd1ZXNzLXJlbW90ZSBzZXRzIHVwIHRyYWNraW5nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yZiByZXBvX2EgcmVwb19iIGZvbyAmJgorCXNldHVwX3JlbW90ZV9yZXBvIHJlcG9fYSByZXBvX2IgJiYKKwkoCisJCWNkIHJlcG9fYiAmJgorCQlnaXQgd29ya3RyZWUgYWRkIC0tZ3Vlc3MtcmVtb3RlIC4uL2ZvbworCSkgJiYKKwkoCisJCWNkIGZvbyAmJgorCQl0ZXN0X2JyYW5jaF91cHN0cmVhbSBmb28gcmVwb19hIGZvbyAmJgorCQl0ZXN0X2NtcF9yZXYgcmVmcy9yZW1vdGVzL3JlcG9fYS9mb28gcmVmcy9oZWFkcy9mb28KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB3b3JrdHJlZSBhZGQgd2l0aCB3b3JrdHJlZS5ndWVzc1JlbW90ZSBzZXRzIHVwIHRyYWNraW5nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yZiByZXBvX2EgcmVwb19iIGZvbyAmJgorCXNldHVwX3JlbW90ZV9yZXBvIHJlcG9fYSByZXBvX2IgJiYKKwkoCisJCWNkIHJlcG9fYiAmJgorCQlnaXQgY29uZmlnIHdvcmt0cmVlLmd1ZXNzUmVtb3RlIHRydWUgJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCAuLi9mb28KKwkpICYmCisJKAorCQljZCBmb28gJiYKKwkJdGVzdF9icmFuY2hfdXBzdHJlYW0gZm9vIHJlcG9fYSBmb28gJiYKKwkJdGVzdF9jbXBfcmV2IHJlZnMvcmVtb3Rlcy9yZXBvX2EvZm9vIHJlZnMvaGVhZHMvZm9vCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgd29ya3RyZWUgLS1uby1ndWVzcy1yZW1vdGUgb3B0aW9uIG92ZXJyaWRlcyBjb25maWcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIHJlcG9fYSByZXBvX2IgZm9vICYmCisJc2V0dXBfcmVtb3RlX3JlcG8gcmVwb19hIHJlcG9fYiAmJgorCSgKKwkJY2QgcmVwb19iICYmCisJCWdpdCBjb25maWcgd29ya3RyZWUuZ3Vlc3NSZW1vdGUgdHJ1ZSAmJgorCQlnaXQgd29ya3RyZWUgYWRkIC0tbm8tZ3Vlc3MtcmVtb3RlIC4uL2ZvbworCSkgJiYKKwkoCisJCWNkIGZvbyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnICJicmFuY2guZm9vLnJlbW90ZSIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAiYnJhbmNoLmZvby5tZXJnZSIgJiYKKwkJdGVzdF9jbXBfcmV2ICEgcmVmcy9yZW1vdGVzL3JlcG9fYS9mb28gcmVmcy9oZWFkcy9mb28KKwkpCisnCisKK3Bvc3RfY2hlY2tvdXRfaG9vayAoKSB7CisJZ2l0ZGlyPSR7MTotLmdpdH0KKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mICRnaXRkaXIvaG9va3MvcG9zdC1jaGVja291dCIgJiYKKwlta2RpciAtcCAkZ2l0ZGlyL2hvb2tzICYmCisJd3JpdGVfc2NyaXB0ICRnaXRkaXIvaG9va3MvcG9zdC1jaGVja291dCA8PC1cRU9GCisJeworCQllY2hvICQqCisJCWdpdCByZXYtcGFyc2UgLS1naXQtZGlyIC0tc2hvdy10b3BsZXZlbAorCX0gPmhvb2suYWN0dWFsCisJRU9GCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIGludm9rZXMgcG9zdC1jaGVja291dCBob29rIChicmFuY2gpJyAnCisJcG9zdF9jaGVja291dF9ob29rICYmCisJeworCQllY2hvICRaRVJPX09JRCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgMSAmJgorCQllY2hvICQocHdkKS8uZ2l0L3dvcmt0cmVlcy9ndW1ieSAmJgorCQllY2hvICQocHdkKS9ndW1ieQorCX0gPmhvb2suZXhwZWN0ICYmCisJZ2l0IHdvcmt0cmVlIGFkZCBndW1ieSAmJgorCXRlc3RfY21wIGhvb2suZXhwZWN0IGd1bWJ5L2hvb2suYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIGludm9rZXMgcG9zdC1jaGVja291dCBob29rIChkZXRhY2hlZCknICcKKwlwb3N0X2NoZWNrb3V0X2hvb2sgJiYKKwl7CisJCWVjaG8gJFpFUk9fT0lEICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAxICYmCisJCWVjaG8gJChwd2QpLy5naXQvd29ya3RyZWVzL2dydW1weSAmJgorCQllY2hvICQocHdkKS9ncnVtcHkKKwl9ID5ob29rLmV4cGVjdCAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggZ3J1bXB5ICYmCisJdGVzdF9jbXAgaG9vay5leHBlY3QgZ3J1bXB5L2hvb2suYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQgLS1uby1jaGVja291dCIgc3VwcHJlc3NlcyBwb3N0LWNoZWNrb3V0IGhvb2snICcKKwlwb3N0X2NoZWNrb3V0X2hvb2sgJiYKKwlybSAtZiBob29rLmFjdHVhbCAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLS1uby1jaGVja291dCBnbG9vcHkgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBnbG9vcHkvaG9vay5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgaW4gb3RoZXIgd29ya3RyZWUgaW52b2tlcyBwb3N0LWNoZWNrb3V0IGhvb2snICcKKwlwb3N0X2NoZWNrb3V0X2hvb2sgJiYKKwl7CisJCWVjaG8gJFpFUk9fT0lEICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAxICYmCisJCWVjaG8gJChwd2QpLy5naXQvd29ya3RyZWVzL2d1cHB5ICYmCisJCWVjaG8gJChwd2QpL2d1cHB5CisJfSA+aG9vay5leHBlY3QgJiYKKwlnaXQgLUMgZ2xvb3B5IHdvcmt0cmVlIGFkZCAtLWRldGFjaCAuLi9ndXBweSAmJgorCXRlc3RfY21wIGhvb2suZXhwZWN0IGd1cHB5L2hvb2suYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIGluIGJhcmUgcmVwbyBpbnZva2VzIHBvc3QtY2hlY2tvdXQgaG9vaycgJworCXJtIC1yZiBiYXJlICYmCisJZ2l0IGNsb25lIC0tYmFyZSAuIGJhcmUgJiYKKwl7CisJCWVjaG8gJFpFUk9fT0lEICQoZ2l0IC0tZ2l0LWRpcj1iYXJlIHJldi1wYXJzZSBIRUFEKSAxICYmCisJCWVjaG8gJChwd2QpL2JhcmUvd29ya3RyZWVzL2dvb3p5ICYmCisJCWVjaG8gJChwd2QpL2dvb3p5CisJfSA+aG9vay5leHBlY3QgJiYKKwlwb3N0X2NoZWNrb3V0X2hvb2sgYmFyZSAmJgorCWdpdCAtQyBiYXJlIHdvcmt0cmVlIGFkZCAtLWRldGFjaCAuLi9nb296eSAmJgorCXRlc3RfY21wIGhvb2suZXhwZWN0IGdvb3p5L2hvb2suYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIGFuIGV4aXN0aW5nIGJ1dCBtaXNzaW5nIHdvcmt0cmVlJyAnCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBwbmV1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBwbmV1ICYmCisJcm0gLWZyIHBuZXUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIHBuZXUgJiYKKwlnaXQgd29ya3RyZWUgYWRkIC0tZm9yY2UgLS1kZXRhY2ggcG5ldQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiBhbiBleGlzdGluZyBsb2NrZWQgYnV0IG1pc3Npbmcgd29ya3RyZWUnICcKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIGdub28gJiYKKwlnaXQgd29ya3RyZWUgbG9jayBnbm9vICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgd29ya3RyZWUgdW5sb2NrIGdub28gfHwgOiIgJiYKKwlybSAtZnIgZ25vbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggZ25vbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBhZGQgLS1mb3JjZSAtLWRldGFjaCBnbm9vICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWZvcmNlIC0tZm9yY2UgLS1kZXRhY2ggZ25vbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiBub3QgdHJpcHBlZCB1cCBieSBtYWdpYyB3b3JrdHJlZSBtYXRjaGluZyInICcKKwkjIGlmIHdvcmt0cmVlICJzdWIxL2JhciIgZXhpc3RzLCAiZ2l0IHdvcmt0cmVlIGFkZCBiYXIiIGluIGRpc3RpbmN0CisJIyBkaXJlY3RvcnkgYHN1YjJgIHNob3VsZCBub3QgbWlzdGFrZW5seSBjb21wbGFpbiB0aGF0IGBiYXJgIGlzIGFuCisJIyBhbHJlYWR5LXJlZ2lzdGVyZWQgd29ya3RyZWUKKwlta2RpciBzdWIxIHN1YjIgJiYKKwlnaXQgLUMgc3ViMSAtLWdpdC1kaXI9Li4vLmdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggYm96byAmJgorCWdpdCAtQyBzdWIyIC0tZ2l0LWRpcj0uLi8uZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBib3pvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRlVOTllOQU1FUyAnc2FuaXRpemUgZ2VuZXJhdGVkIHdvcmt0cmVlIG5hbWUnICcKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoICIuICB3ZWlyZCouLj8ubG9jay5sb2NrIiAmJgorCXRlc3QgLWQgLmdpdC93b3JrdHJlZXMvLS0td2VpcmQtLi0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgc2hvdWxkIG5vdCBmYWlsIGJlY2F1c2Ugb2YgYW5vdGhlciBiYWQgd29ya3RyZWUnICcKKwlnaXQgaW5pdCBhZGQtZmFpbCAmJgorCSgKKwkJY2QgYWRkLWZhaWwgJiYKKwkJdGVzdF9jb21taXQgZmlyc3QgJiYKKwkJbWtkaXIgc3ViICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgc3ViL3RvLWJlLWRlbGV0ZWQgJiYKKwkJcm0gLXJmIHN1YiAmJgorCQlnaXQgd29ya3RyZWUgYWRkIHNlY29uZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgd2l0aCB1bmluaXRpYWxpemVkIHN1Ym1vZHVsZSwgd2l0aCBzdWJtb2R1bGUucmVjdXJzZSB1bnNldCcgJworCXRlc3RfY3JlYXRlX3JlcG8gc3VibW9kdWxlICYmCisJdGVzdF9jb21taXQgLUMgc3VibW9kdWxlIGZpcnN0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyBwcm9qZWN0ICYmCisJZ2l0IC1DIHByb2plY3Qgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgJiYKKwlnaXQgLUMgcHJvamVjdCBhZGQgc3VibW9kdWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IC1DIHByb2plY3QgY29tbWl0IC1tIGFkZF9zdWIgJiYKKwlnaXQgY2xvbmUgcHJvamVjdCBwcm9qZWN0LWNsb25lICYmCisJZ2l0IC1DIHByb2plY3QtY2xvbmUgd29ya3RyZWUgYWRkIC4uL3Byb2plY3QtMgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgd2l0aCB1bmluaXRpYWxpemVkIHN1Ym1vZHVsZSwgd2l0aCBzdWJtb2R1bGUucmVjdXJzZSBzZXQnICcKKwlnaXQgLUMgcHJvamVjdC1jbG9uZSAtYyBzdWJtb2R1bGUucmVjdXJzZSB3b3JrdHJlZSBhZGQgLi4vcHJvamVjdC0zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHdpdGggaW5pdGlhbGl6ZWQgc3VibW9kdWxlLCB3aXRoIHN1Ym1vZHVsZS5yZWN1cnNlIHVuc2V0JyAnCisJZ2l0IC1DIHByb2plY3QtY2xvbmUgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwlnaXQgLUMgcHJvamVjdC1jbG9uZSB3b3JrdHJlZSBhZGQgLi4vcHJvamVjdC00CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHdpdGggaW5pdGlhbGl6ZWQgc3VibW9kdWxlLCB3aXRoIHN1Ym1vZHVsZS5yZWN1cnNlIHNldCcgJworCWdpdCAtQyBwcm9qZWN0LWNsb25lIC1jIHN1Ym1vZHVsZS5yZWN1cnNlIHdvcmt0cmVlIGFkZCAuLi9wcm9qZWN0LTUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyNDAxLXdvcmt0cmVlLXBydW5lLnNoIGIvdC90MjQwMS13b3JrdHJlZS1wcnVuZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iN2Q2ZDVkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjQwMS13b3JrdHJlZS1wcnVuZS5zaApAQCAtMCwwICsxLDk1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHJ1bmUgJEdJVF9ESVIvd29ya3RyZWVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBpbml0aWFsaXplICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JrdHJlZSBwcnVuZSBvbiBub3JtYWwgcmVwbycgJworCWdpdCB3b3JrdHJlZSBwcnVuZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBwcnVuZSBhYmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgZmlsZXMgaW5zaWRlICRHSVRfRElSL3dvcmt0cmVlcycgJworCW1rZGlyIC5naXQvd29ya3RyZWVzICYmCisJOiA+LmdpdC93b3JrdHJlZXMvYWJjICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lIC0tdmVyYm9zZSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK1JlbW92aW5nIHdvcmt0cmVlcy9hYmM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeQorRU9GCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkhIHRlc3QgLWYgLmdpdC93b3JrdHJlZXMvYWJjICYmCisJISB0ZXN0IC1kIC5naXQvd29ya3RyZWVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIGRpcmVjdG9yaWVzIHdpdGhvdXQgZ2l0ZGlyJyAnCisJbWtkaXIgLXAgLmdpdC93b3JrdHJlZXMvZGVmL2FiYyAmJgorCTogPi5naXQvd29ya3RyZWVzL2RlZi9kZWYgJiYKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorUmVtb3Zpbmcgd29ya3RyZWVzL2RlZjogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QKK0VPRgorCWdpdCB3b3JrdHJlZSBwcnVuZSAtLXZlcmJvc2UgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsICYmCisJISB0ZXN0IC1kIC5naXQvd29ya3RyZWVzL2RlZiAmJgorCSEgdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNBTklUWSAncHJ1bmUgZGlyZWN0b3JpZXMgd2l0aCB1bnJlYWRhYmxlIGdpdGRpcicgJworCW1rZGlyIC1wIC5naXQvd29ya3RyZWVzL2RlZi9hYmMgJiYKKwk6ID4uZ2l0L3dvcmt0cmVlcy9kZWYvZGVmICYmCisJOiA+LmdpdC93b3JrdHJlZXMvZGVmL2dpdGRpciAmJgorCWNobW9kIHUtciAuZ2l0L3dvcmt0cmVlcy9kZWYvZ2l0ZGlyICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lIC0tdmVyYm9zZSA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiUmVtb3Zpbmcgd29ya3RyZWVzL2RlZjogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUiIGFjdHVhbCAmJgorCSEgdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcy9kZWYgJiYKKwkhIHRlc3QgLWQgLmdpdC93b3JrdHJlZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgZGlyZWN0b3JpZXMgd2l0aCBpbnZhbGlkIGdpdGRpcicgJworCW1rZGlyIC1wIC5naXQvd29ya3RyZWVzL2RlZi9hYmMgJiYKKwk6ID4uZ2l0L3dvcmt0cmVlcy9kZWYvZGVmICYmCisJOiA+LmdpdC93b3JrdHJlZXMvZGVmL2dpdGRpciAmJgorCWdpdCB3b3JrdHJlZSBwcnVuZSAtLXZlcmJvc2UgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIlJlbW92aW5nIHdvcmt0cmVlcy9kZWY6IGludmFsaWQgZ2l0ZGlyIGZpbGUiIGFjdHVhbCAmJgorCSEgdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcy9kZWYgJiYKKwkhIHRlc3QgLWQgLmdpdC93b3JrdHJlZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgZGlyZWN0b3JpZXMgd2l0aCBnaXRkaXIgcG9pbnRpbmcgdG8gbm93aGVyZScgJworCW1rZGlyIC1wIC5naXQvd29ya3RyZWVzL2RlZi9hYmMgJiYKKwk6ID4uZ2l0L3dvcmt0cmVlcy9kZWYvZGVmICYmCisJZWNobyAiJChwd2QpIi9ub3doZXJlID4uZ2l0L3dvcmt0cmVlcy9kZWYvZ2l0ZGlyICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lIC0tdmVyYm9zZSA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiUmVtb3Zpbmcgd29ya3RyZWVzL2RlZjogZ2l0ZGlyIGZpbGUgcG9pbnRzIHRvIG5vbi1leGlzdGVudCBsb2NhdGlvbiIgYWN0dWFsICYmCisJISB0ZXN0IC1kIC5naXQvd29ya3RyZWVzL2RlZiAmJgorCSEgdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QgcHJ1bmUgbG9ja2VkIGNoZWNrb3V0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yIC5naXQvd29ya3RyZWVzICYmCisJbWtkaXIgLXAgLmdpdC93b3JrdHJlZXMvZ2hpICYmCisJOiA+LmdpdC93b3JrdHJlZXMvZ2hpL2xvY2tlZCAmJgorCWdpdCB3b3JrdHJlZSBwcnVuZSAmJgorCXRlc3QgLWQgLmdpdC93b3JrdHJlZXMvZ2hpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBwcnVuZSByZWNlbnQgY2hlY2tvdXRzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yIC5naXQvd29ya3RyZWVzICYmCisJZ2l0IHdvcmt0cmVlIGFkZCBqbG0gSEVBRCAmJgorCXRlc3QgLWQgLmdpdC93b3JrdHJlZXMvamxtICYmCisJcm0gLXJmIGpsbSAmJgorCWdpdCB3b3JrdHJlZSBwcnVuZSAtLXZlcmJvc2UgLS1leHBpcmU9Mi5kYXlzLmFnbyAmJgorCXRlc3QgLWQgLmdpdC93b3JrdHJlZXMvamxtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBwcnVuZSBwcm9wZXIgY2hlY2tvdXRzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yIC5naXQvd29ya3RyZWVzICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCAiJFBXRC9ub3AiIG1hc3RlciAmJgorCWdpdCB3b3JrdHJlZSBwcnVuZSAmJgorCXRlc3QgLWQgLmdpdC93b3JrdHJlZXMvbm9wCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjQwMi13b3JrdHJlZS1saXN0LnNoIGIvdC90MjQwMi13b3JrdHJlZS1saXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUyNTg1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyNDAyLXdvcmt0cmVlLWxpc3Quc2gKQEAgLTAsMCArMSwxNjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCB3b3JrdHJlZSBsaXN0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdpdC1jb21tb24tZGlyIG9uIG1haW4gd29ya3RyZWUnICcKKwlnaXQgcmV2LXBhcnNlIC0tZ2l0LWNvbW1vbi1kaXIgPmFjdHVhbCAmJgorCWVjaG8gLmdpdCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlta2RpciBzdWIgJiYKKwlnaXQgLUMgc3ViIHJldi1wYXJzZSAtLWdpdC1jb21tb24tZGlyID5hY3R1YWwyICYmCisJZWNobyAuLi8uZ2l0ID5leHBlY3RlZDIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDIgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1naXQtcGF0aCBvYmplY3RzIGxpbmtlZCB3b3JrdHJlZScgJworCWVjaG8gIiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpLy5naXQvb2JqZWN0cyIgPmV4cGVjdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGxpbmtlZC10cmVlIGFjdHVhbCBleHBlY3QgJiYgZ2l0IHdvcmt0cmVlIHBydW5lIiAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggbGlua2VkLXRyZWUgbWFzdGVyICYmCisJZ2l0IC1DIGxpbmtlZC10cmVlIHJldi1wYXJzZSAtLWdpdC1wYXRoIG9iamVjdHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImxpc3QiIGFsbCB3b3JrdHJlZXMgZnJvbSBtYWluJyAnCisJZWNobyAiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkgJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgWyQoZ2l0IHN5bWJvbGljLXJlZiAtLXNob3J0IEhFQUQpXSIgPmV4cGVjdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGhlcmUgb3V0IGFjdHVhbCBleHBlY3QgJiYgZ2l0IHdvcmt0cmVlIHBydW5lIiAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggaGVyZSBtYXN0ZXIgJiYKKwllY2hvICIkKGdpdCAtQyBoZXJlIHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpIChkZXRhY2hlZCBIRUFEKSIgPj5leHBlY3QgJiYKKwlnaXQgd29ya3RyZWUgbGlzdCA+b3V0ICYmCisJc2VkICJzLyAgKi8gL2ciIDxvdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImxpc3QiIGFsbCB3b3JrdHJlZXMgZnJvbSBsaW5rZWQnICcKKwllY2hvICIkKGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSBbJChnaXQgc3ltYm9saWMtcmVmIC0tc2hvcnQgSEVBRCldIiA+ZXhwZWN0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgaGVyZSBvdXQgYWN0dWFsIGV4cGVjdCAmJiBnaXQgd29ya3RyZWUgcHJ1bmUiICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBoZXJlIG1hc3RlciAmJgorCWVjaG8gIiQoZ2l0IC1DIGhlcmUgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkgJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgKGRldGFjaGVkIEhFQUQpIiA+PmV4cGVjdCAmJgorCWdpdCAtQyBoZXJlIHdvcmt0cmVlIGxpc3QgPm91dCAmJgorCXNlZCAicy8gICovIC9nIiA8b3V0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJsaXN0IiBhbGwgd29ya3RyZWVzIC0tcG9yY2VsYWluJyAnCisJZWNobyAid29ya3RyZWUgJChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkiID5leHBlY3QgJiYKKwllY2hvICJIRUFEICQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPj5leHBlY3QgJiYKKwllY2hvICJicmFuY2ggJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA+PmV4cGVjdCAmJgorCWVjaG8gPj5leHBlY3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBoZXJlIGFjdHVhbCBleHBlY3QgJiYgZ2l0IHdvcmt0cmVlIHBydW5lIiAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggaGVyZSBtYXN0ZXIgJiYKKwllY2hvICJ3b3JrdHJlZSAkKGdpdCAtQyBoZXJlIHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpIiA+PmV4cGVjdCAmJgorCWVjaG8gIkhFQUQgJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA+PmV4cGVjdCAmJgorCWVjaG8gImRldGFjaGVkIiA+PmV4cGVjdCAmJgorCWVjaG8gPj5leHBlY3QgJiYKKwlnaXQgd29ya3RyZWUgbGlzdCAtLXBvcmNlbGFpbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJlIHJlcG8gc2V0dXAnICcKKwlnaXQgaW5pdCAtLWJhcmUgYmFyZTEgJiYKKwllY2hvICJkYXRhIiA+ZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSJGaWxlMTogYWRkIGRhdGEiICYmCisJZ2l0IHB1c2ggYmFyZTEgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcibGlzdCIgYWxsIHdvcmt0cmVlcyBmcm9tIGJhcmUgbWFpbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHRoZXJlIG91dCBhY3R1YWwgZXhwZWN0ICYmIGdpdCAtQyBiYXJlMSB3b3JrdHJlZSBwcnVuZSIgJiYKKwlnaXQgLUMgYmFyZTEgd29ya3RyZWUgYWRkIC0tZGV0YWNoIC4uL3RoZXJlIG1hc3RlciAmJgorCWVjaG8gIiQocHdkKS9iYXJlMSAoYmFyZSkiID5leHBlY3QgJiYKKwllY2hvICIkKGdpdCAtQyB0aGVyZSByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSAkKGdpdCAtQyB0aGVyZSByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAoZGV0YWNoZWQgSEVBRCkiID4+ZXhwZWN0ICYmCisJZ2l0IC1DIGJhcmUxIHdvcmt0cmVlIGxpc3QgPm91dCAmJgorCXNlZCAicy8gICovIC9nIiA8b3V0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJsaXN0IiBhbGwgd29ya3RyZWVzIC0tcG9yY2VsYWluIGZyb20gYmFyZSBtYWluJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgdGhlcmUgYWN0dWFsIGV4cGVjdCAmJiBnaXQgLUMgYmFyZTEgd29ya3RyZWUgcHJ1bmUiICYmCisJZ2l0IC1DIGJhcmUxIHdvcmt0cmVlIGFkZCAtLWRldGFjaCAuLi90aGVyZSBtYXN0ZXIgJiYKKwllY2hvICJ3b3JrdHJlZSAkKHB3ZCkvYmFyZTEiID5leHBlY3QgJiYKKwllY2hvICJiYXJlIiA+PmV4cGVjdCAmJgorCWVjaG8gPj5leHBlY3QgJiYKKwllY2hvICJ3b3JrdHJlZSAkKGdpdCAtQyB0aGVyZSByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSIgPj5leHBlY3QgJiYKKwllY2hvICJIRUFEICQoZ2l0IC1DIHRoZXJlIHJldi1wYXJzZSBIRUFEKSIgPj5leHBlY3QgJiYKKwllY2hvICJkZXRhY2hlZCIgPj5leHBlY3QgJiYKKwllY2hvID4+ZXhwZWN0ICYmCisJZ2l0IC1DIGJhcmUxIHdvcmt0cmVlIGxpc3QgLS1wb3JjZWxhaW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImxpc3QiIGFsbCB3b3JrdHJlZXMgZnJvbSBsaW5rZWQgd2l0aCBhIGJhcmUgbWFpbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHRoZXJlIG91dCBhY3R1YWwgZXhwZWN0ICYmIGdpdCAtQyBiYXJlMSB3b3JrdHJlZSBwcnVuZSIgJiYKKwlnaXQgLUMgYmFyZTEgd29ya3RyZWUgYWRkIC0tZGV0YWNoIC4uL3RoZXJlIG1hc3RlciAmJgorCWVjaG8gIiQocHdkKS9iYXJlMSAoYmFyZSkiID5leHBlY3QgJiYKKwllY2hvICIkKGdpdCAtQyB0aGVyZSByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSAkKGdpdCAtQyB0aGVyZSByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAoZGV0YWNoZWQgSEVBRCkiID4+ZXhwZWN0ICYmCisJZ2l0IC1DIHRoZXJlIHdvcmt0cmVlIGxpc3QgPm91dCAmJgorCXNlZCAicy8gICovIC9nIiA8b3V0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhcmUgcmVwbyBjbGVhbnVwJyAnCisJcm0gLXJmIGJhcmUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jyb2tlbiBtYWluIHdvcmt0cmVlIHN0aWxsIGF0IHRoZSB0b3AnICcKKwlnaXQgaW5pdCBicm9rZW4tbWFpbiAmJgorCSgKKwkJY2QgYnJva2VuLW1haW4gJiYKKwkJdGVzdF9jb21taXQgbmV3ICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgbGlua2VkICYmCisJCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJCXdvcmt0cmVlICQocHdkKQorCQlIRUFEICRaRVJPX09JRAorCisJCUVPRgorCQljZCBsaW5rZWQgJiYKKwkJZWNobyAid29ya3RyZWUgJChwd2QpIiA+ZXhwZWN0ZWQgJiYKKwkJZWNobyAicmVmOiAuYnJva2VuIiA+Li4vLmdpdC9IRUFEICYmCisJCWdpdCB3b3JrdHJlZSBsaXN0IC0tcG9yY2VsYWluID5vdXQgJiYKKwkJaGVhZCAtbiAzIG91dCA+YWN0dWFsICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIGFjdHVhbCAmJgorCQlnaXQgd29ya3RyZWUgbGlzdCA+b3V0ICYmCisJCWhlYWQgLW4gMSBvdXQgPmFjdHVhbC4yICYmCisJCWdyZXAgLUYgIihlcnJvcikiIGFjdHVhbC4yCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaW5rZWQgd29ya3RyZWVzIGFyZSBzb3J0ZWQnICcKKwlta2RpciBzb3J0ZWQgJiYKKwlnaXQgaW5pdCBzb3J0ZWQvbWFpbiAmJgorCSgKKwkJY2Qgc29ydGVkL21haW4gJiYKKwkJdGVzdF90aWNrICYmCisJCXRlc3RfY29tbWl0IG5ldyAmJgorCQlnaXQgd29ya3RyZWUgYWRkIC4uL2ZpcnN0ICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgLi4vc2Vjb25kICYmCisJCWdpdCB3b3JrdHJlZSBsaXN0IC0tcG9yY2VsYWluID5vdXQgJiYKKwkJZ3JlcCBed29ya3RyZWUgb3V0ID5hY3R1YWwKKwkpICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwl3b3JrdHJlZSAkKHB3ZCkvc29ydGVkL21haW4KKwl3b3JrdHJlZSAkKHB3ZCkvc29ydGVkL2ZpcnN0CisJd29ya3RyZWUgJChwd2QpL3NvcnRlZC9zZWNvbmQKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBzb3J0ZWQvbWFpbi9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd29ya3RyZWUgcGF0aCB3aGVuIGNhbGxlZCBpbiAuZ2l0IGRpcmVjdG9yeScgJworCWdpdCB3b3JrdHJlZSBsaXN0ID5saXN0MSAmJgorCWdpdCAtQyAuZ2l0IHdvcmt0cmVlIGxpc3QgPmxpc3QyICYmCisJdGVzdF9jbXAgbGlzdDEgbGlzdDIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyNDAzLXdvcmt0cmVlLW1vdmUuc2ggYi90L3QyNDAzLXdvcmt0cmVlLW1vdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTM5ZDE4ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDI0MDMtd29ya3RyZWUtbW92ZS5zaApAQCAtMCwwICsxLDIyNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHdvcmt0cmVlIG1vdmUsIHJlbW92ZSwgbG9jayBhbmQgdW5sb2NrJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0ICYmCisJZ2l0IHdvcmt0cmVlIGFkZCBzb3VyY2UgJiYKKwlnaXQgd29ya3RyZWUgbGlzdCAtLXBvcmNlbGFpbiA+b3V0ICYmCisJZ3JlcCAiXndvcmt0cmVlIiBvdXQgPmFjdHVhbCAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdGVkICYmCisJd29ya3RyZWUgJChwd2QpCisJd29ya3RyZWUgJChwd2QpL3NvdXJjZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NrIG1haW4gd29ya3RyZWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgbG9jayAuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2sgbGlua2VkIHdvcmt0cmVlJyAnCisJZ2l0IHdvcmt0cmVlIGxvY2sgLS1yZWFzb24gaGFoYWhhIHNvdXJjZSAmJgorCWVjaG8gaGFoYWhhID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIC5naXQvd29ya3RyZWVzL3NvdXJjZS9sb2NrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jayBsaW5rZWQgd29ya3RyZWUgZnJvbSBhbm90aGVyIHdvcmt0cmVlJyAnCisJcm0gLmdpdC93b3JrdHJlZXMvc291cmNlL2xvY2tlZCAmJgorCWdpdCB3b3JrdHJlZSBhZGQgZWxzZXdoZXJlICYmCisJZ2l0IC1DIGVsc2V3aGVyZSB3b3JrdHJlZSBsb2NrIC0tcmVhc29uIGhhaGFoYSAuLi9zb3VyY2UgJiYKKwllY2hvIGhhaGFoYSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAuZ2l0L3dvcmt0cmVlcy9zb3VyY2UvbG9ja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2sgd29ya3RyZWUgdHdpY2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgbG9jayBzb3VyY2UgJiYKKwllY2hvIGhhaGFoYSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAuZ2l0L3dvcmt0cmVlcy9zb3VyY2UvbG9ja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2sgd29ya3RyZWUgdHdpY2UgKGZyb20gdGhlIGxvY2tlZCB3b3JrdHJlZSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc291cmNlIHdvcmt0cmVlIGxvY2sgLiAmJgorCWVjaG8gaGFoYWhhID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIC5naXQvd29ya3RyZWVzL3NvdXJjZS9sb2NrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5sb2NrIG1haW4gd29ya3RyZWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgdW5sb2NrIC4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5sb2NrIGxpbmtlZCB3b3JrdHJlZScgJworCWdpdCB3b3JrdHJlZSB1bmxvY2sgc291cmNlICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC93b3JrdHJlZXMvc291cmNlL2xvY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmxvY2sgd29ya3RyZWUgdHdpY2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgdW5sb2NrIHNvdXJjZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvd29ya3RyZWVzL3NvdXJjZS9sb2NrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSBub24td29ya3RyZWUnICcKKwlta2RpciBhYmMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgbW92ZSBhYmMgZGVmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmUgbG9ja2VkIHdvcmt0cmVlJyAnCisJZ2l0IHdvcmt0cmVlIGxvY2sgc291cmNlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgd29ya3RyZWUgdW5sb2NrIHNvdXJjZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgbW92ZSBzb3VyY2UgZGVzdGluYXRpb24KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSB3b3JrdHJlZScgJworCWdpdCB3b3JrdHJlZSBtb3ZlIHNvdXJjZSBkZXN0aW5hdGlvbiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHNvdXJjZSAmJgorCWdpdCB3b3JrdHJlZSBsaXN0IC0tcG9yY2VsYWluID5vdXQgJiYKKwlncmVwICJed29ya3RyZWUuKi9kZXN0aW5hdGlvbiQiIG91dCAmJgorCSEgZ3JlcCAiXndvcmt0cmVlLiovc291cmNlJCIgb3V0ICYmCisJZ2l0IC1DIGRlc3RpbmF0aW9uIGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsMiAmJgorCWVjaG8gaW5pdCA+ZXhwZWN0ZWQyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQyIGFjdHVhbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSBtYWluIHdvcmt0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIG1vdmUgLiBkZWYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSB3b3JrdHJlZSB0byBhbm90aGVyIGRpcicgJworCW1rZGlyIHNvbWUtZGlyICYmCisJZ2l0IHdvcmt0cmVlIG1vdmUgZGVzdGluYXRpb24gc29tZS1kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB3b3JrdHJlZSBtb3ZlIHNvbWUtZGlyL2Rlc3RpbmF0aW9uIGRlc3RpbmF0aW9uIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGRlc3RpbmF0aW9uICYmCisJZ2l0IHdvcmt0cmVlIGxpc3QgLS1wb3JjZWxhaW4gPm91dCAmJgorCWdyZXAgIl53b3JrdHJlZS4qL3NvbWUtZGlyL2Rlc3RpbmF0aW9uJCIgb3V0ICYmCisJZ2l0IC1DIHNvbWUtZGlyL2Rlc3RpbmF0aW9uIGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsMiAmJgorCWVjaG8gaW5pdCA+ZXhwZWN0ZWQyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQyIGFjdHVhbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSBsb2NrZWQgd29ya3RyZWUgKGZvcmNlKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiCisJCWdpdCB3b3JrdHJlZSB1bmxvY2sgZmx1bXAgfHwgOgorCQlnaXQgd29ya3RyZWUgcmVtb3ZlIGZsdW1wIHx8IDoKKwkJZ2l0IHdvcmt0cmVlIHVubG9jayBwbG9vZiB8fCA6CisJCWdpdCB3b3JrdHJlZSByZW1vdmUgcGxvb2YgfHwgOgorCQkiICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBmbHVtcCAmJgorCWdpdCB3b3JrdHJlZSBsb2NrIGZsdW1wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIG1vdmUgZmx1bXAgcGxvb2YiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIG1vdmUgLS1mb3JjZSBmbHVtcCBwbG9vZiIgJiYKKwlnaXQgd29ya3RyZWUgbW92ZSAtLWZvcmNlIC0tZm9yY2UgZmx1bXAgcGxvb2YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSBhIHJlcG8gd2l0aCB1bmluaXRpYWxpemVkIHN1Ym1vZHVsZScgJworCWdpdCBpbml0IHdpdGhzdWIgJiYKKwkoCisJCWNkIHdpdGhzdWIgJiYKKwkJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiJFBXRCIvLmdpdCBzdWIgJiYKKwkJZ2l0IGNvbW1pdCAtbSB3aXRoc3ViICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgc2Vjb25kIEhFQUQgJiYKKwkJZ2l0IHdvcmt0cmVlIG1vdmUgc2Vjb25kIHRoaXJkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QgbW92ZSBhIHJlcG8gd2l0aCBpbml0aWFsaXplZCBzdWJtb2R1bGUnICcKKwkoCisJCWNkIHdpdGhzdWIgJiYKKwkJZ2l0IC1DIHRoaXJkIHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIG1vdmUgdGhpcmQgZm9ydGgKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBtYWluIHdvcmt0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIHJlbW92ZSAuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBsb2NrZWQgd29ya3RyZWUnICcKKwlnaXQgd29ya3RyZWUgbG9jayBkZXN0aW5hdGlvbiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHdvcmt0cmVlIHVubG9jayBkZXN0aW5hdGlvbiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgcmVtb3ZlIGRlc3RpbmF0aW9uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSB3b3JrdHJlZSB3aXRoIGRpcnR5IHRyYWNrZWQgZmlsZScgJworCWVjaG8gZGlydHkgPj5kZXN0aW5hdGlvbi9pbml0LnQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBkZXN0aW5hdGlvbiBjaGVja291dCBpbml0LnQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIHJlbW92ZSBkZXN0aW5hdGlvbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgd29ya3RyZWUgd2l0aCB1bnRyYWNrZWQgZmlsZScgJworCTogPmRlc3RpbmF0aW9uL3VudHJhY2tlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSByZW1vdmUgZGVzdGluYXRpb24KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yY2UgcmVtb3ZlIHdvcmt0cmVlIHdpdGggdW50cmFja2VkIGZpbGUnICcKKwlnaXQgd29ya3RyZWUgcmVtb3ZlIC0tZm9yY2UgZGVzdGluYXRpb24gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkZXN0aW5hdGlvbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgbWlzc2luZyB3b3JrdHJlZScgJworCWdpdCB3b3JrdHJlZSBhZGQgdG8tYmUtZ29uZSAmJgorCXRlc3QgLWQgLmdpdC93b3JrdHJlZXMvdG8tYmUtZ29uZSAmJgorCW12IHRvLWJlLWdvbmUgZ29uZSAmJgorCWdpdCB3b3JrdHJlZSByZW1vdmUgdG8tYmUtZ29uZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvd29ya3RyZWVzL3RvLWJlLWdvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTk9UIHJlbW92ZSBtaXNzaW5nLWJ1dC1sb2NrZWQgd29ya3RyZWUnICcKKwlnaXQgd29ya3RyZWUgYWRkIGdvbmUtYnV0LWxvY2tlZCAmJgorCWdpdCB3b3JrdHJlZSBsb2NrIGdvbmUtYnV0LWxvY2tlZCAmJgorCXRlc3QgLWQgLmdpdC93b3JrdHJlZXMvZ29uZS1idXQtbG9ja2VkICYmCisJbXYgZ29uZS1idXQtbG9ja2VkIHJlYWxseS1nb25lLW5vdyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSByZW1vdmUgZ29uZS1idXQtbG9ja2VkICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3dvcmt0cmVlcy9nb25lLWJ1dC1sb2NrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvcGVyIGVycm9yIHdoZW4gd29ya3RyZWUgbm90IGZvdW5kJyAnCisJZm9yIGkgaW4gbm9vZGxlIG5vb2RsZS9ib3JrCisJZG8KKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGxvY2sgJGkgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAibm90IGEgd29ya2luZyB0cmVlIiBlcnIgfHwgcmV0dXJuIDEKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBsb2NrZWQgd29ya3RyZWUgKGZvcmNlKScgJworCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggZ3VtYnkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB3b3JrdHJlZSByZW1vdmUgZ3VtYnkgfHwgOiIgJiYKKwlnaXQgd29ya3RyZWUgbG9jayBndW1ieSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHdvcmt0cmVlIHVubG9jayBndW1ieSB8fCA6IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSByZW1vdmUgZ3VtYnkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgcmVtb3ZlIC0tZm9yY2UgZ3VtYnkgJiYKKwlnaXQgd29ya3RyZWUgcmVtb3ZlIC0tZm9yY2UgLS1mb3JjZSBndW1ieQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgY2xlYW5zIHVwIC5naXQvd29ya3RyZWVzIHdoZW4gZW1wdHknICcKKwlnaXQgaW5pdCBtb29nICYmCisJKAorCQljZCBtb29nICYmCisJCXRlc3RfY29tbWl0IGJpbSAmJgorCQlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIGdvb20gJiYKKwkJdGVzdF9wYXRoX2V4aXN0cyAuZ2l0L3dvcmt0cmVlcyAmJgorCQlnaXQgd29ya3RyZWUgcmVtb3ZlIGdvb20gJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC93b3JrdHJlZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBhIHJlcG8gd2l0aCB1bmluaXRpYWxpemVkIHN1Ym1vZHVsZScgJworCSgKKwkJY2Qgd2l0aHN1YiAmJgorCQlnaXQgd29ya3RyZWUgYWRkIHRvLXJlbW92ZSBIRUFEICYmCisJCWdpdCB3b3JrdHJlZSByZW1vdmUgdG8tcmVtb3ZlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QgcmVtb3ZlIGEgcmVwbyB3aXRoIGluaXRpYWxpemVkIHN1Ym1vZHVsZScgJworCSgKKwkJY2Qgd2l0aHN1YiAmJgorCQlnaXQgd29ya3RyZWUgYWRkIHRvLXJlbW92ZSBIRUFEICYmCisJCWdpdCAtQyB0by1yZW1vdmUgc3VibW9kdWxlIHVwZGF0ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgcmVtb3ZlIHRvLXJlbW92ZQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyNDA0LXdvcmt0cmVlLWNvbmZpZy5zaCBiL3QvdDI0MDQtd29ya3RyZWUtY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4NjEyMWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyNDA0LXdvcmt0cmVlLWNvbmZpZy5zaApAQCAtMCwwICsxLDc5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iY29uZmlnIGZpbGUgaW4gbXVsdGkgd29ya3RyZWUiCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IHN0YXJ0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyAtLXdvcmt0cmVlIGluIHNpbmdsZSB3b3JrdHJlZScgJworCWdpdCBjb25maWcgLS13b3JrdHJlZSBmb28uYmFyIHRydWUgJiYKKwl0ZXN0X2NtcF9jb25maWcgdHJ1ZSBmb28uYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB3b3JrdHJlZXMnICcKKwlnaXQgd29ya3RyZWUgYWRkIHd0MSAmJgorCWdpdCB3b3JrdHJlZSBhZGQgd3QyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyAtLXdvcmt0cmVlIHdpdGhvdXQgZXh0ZW5zaW9uJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLXdvcmt0cmVlIGZvby5iYXIgZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5hYmxlIHdvcmt0cmVlQ29uZmlnIGV4dGVuc2lvbicgJworCWdpdCBjb25maWcgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyB0cnVlICYmCisJdGVzdF9jbXBfY29uZmlnIHRydWUgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgaXMgc2hhcmVkIGFzIGJlZm9yZScgJworCWdpdCBjb25maWcgdGhpcy5pcyBzaGFyZWQgJiYKKwl0ZXN0X2NtcF9jb25maWcgc2hhcmVkIHRoaXMuaXMgJiYKKwl0ZXN0X2NtcF9jb25maWcgLUMgd3QxIHNoYXJlZCB0aGlzLmlzICYmCisJdGVzdF9jbXBfY29uZmlnIC1DIHd0MiBzaGFyZWQgdGhpcy5pcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgaXMgc2hhcmVkIChzZXQgZnJvbSBhbm90aGVyIHdvcmt0cmVlKScgJworCWdpdCAtQyB3dDEgY29uZmlnIHRoYXQuaXMgYWxzby1zaGFyZWQgJiYKKwl0ZXN0X2NtcF9jb25maWcgYWxzby1zaGFyZWQgdGhhdC5pcyAmJgorCXRlc3RfY21wX2NvbmZpZyAtQyB3dDEgYWxzby1zaGFyZWQgdGhhdC5pcyAmJgorCXRlc3RfY21wX2NvbmZpZyAtQyB3dDIgYWxzby1zaGFyZWQgdGhhdC5pcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgcHJpdmF0ZSB0byBtYWluIHdvcmt0cmVlJyAnCisJZ2l0IGNvbmZpZyAtLXdvcmt0cmVlIHRoaXMuaXMgZm9yLW1haW4gJiYKKwl0ZXN0X2NtcF9jb25maWcgZm9yLW1haW4gdGhpcy5pcyAmJgorCXRlc3RfY21wX2NvbmZpZyAtQyB3dDEgc2hhcmVkIHRoaXMuaXMgJiYKKwl0ZXN0X2NtcF9jb25maWcgLUMgd3QyIHNoYXJlZCB0aGlzLmlzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyBwcml2YXRlIHRvIGxpbmtlZCB3b3JrdHJlZScgJworCWdpdCAtQyB3dDEgY29uZmlnIC0td29ya3RyZWUgdGhpcy5pcyBmb3Itd3QxICYmCisJdGVzdF9jbXBfY29uZmlnIGZvci1tYWluIHRoaXMuaXMgJiYKKwl0ZXN0X2NtcF9jb25maWcgLUMgd3QxIGZvci13dDEgdGhpcy5pcyAmJgorCXRlc3RfY21wX2NvbmZpZyAtQyB3dDIgc2hhcmVkIHRoaXMuaXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29yZS5iYXJlIG5vIGxvbmdlciBmb3IgbWFpbiBvbmx5JyAnCisJdGVzdF9jb25maWcgY29yZS5iYXJlIHRydWUgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnkpIiA9IHRydWUgJiYKKwl0ZXN0ICIkKGdpdCAtQyB3dDEgcmV2LXBhcnNlIC0taXMtYmFyZS1yZXBvc2l0b3J5KSIgPSB0cnVlICYmCisJdGVzdCAiJChnaXQgLUMgd3QyIHJldi1wYXJzZSAtLWlzLWJhcmUtcmVwb3NpdG9yeSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwZXItd29ya3RyZWUgY29yZS5iYXJlIGlzIHBpY2tlZCB1cCcgJworCWdpdCAtQyB3dDEgY29uZmlnIC0td29ya3RyZWUgY29yZS5iYXJlIHRydWUgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnkpIiA9IGZhbHNlICYmCisJdGVzdCAiJChnaXQgLUMgd3QxIHJldi1wYXJzZSAtLWlzLWJhcmUtcmVwb3NpdG9yeSkiID0gdHJ1ZSAmJgorCXRlc3QgIiQoZ2l0IC1DIHd0MiByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnkpIiA9IGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZy53b3JrdHJlZSBubyBsb25nZXIgcmVhZCB3aXRob3V0IGV4dGVuc2lvbicgJworCWdpdCBjb25maWcgLS11bnNldCBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnICYmCisJdGVzdF9jbXBfY29uZmlnIHNoYXJlZCB0aGlzLmlzICYmCisJdGVzdF9jbXBfY29uZmlnIC1DIHd0MSBzaGFyZWQgdGhpcy5pcyAmJgorCXRlc3RfY21wX2NvbmZpZyAtQyB3dDIgc2hhcmVkIHRoaXMuaXMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyNDA1LXdvcmt0cmVlLXN1Ym1vZHVsZS5zaCBiL3QvdDI0MDUtd29ya3RyZWUtc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUxYjJiZmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyNDA1LXdvcmt0cmVlLXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQ29tYmluYXRpb24gb2Ygc3VibW9kdWxlcyBhbmQgbXVsdGlwbGUgd29ya3RyZWVzJworCisuIC4vdGVzdC1saWIuc2gKKworYmFzZV9wYXRoPSQocHdkIC1QKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogY3JlYXRlIG9yaWdpbiByZXBvcycgICcKKwlnaXQgaW5pdCBvcmlnaW4vc3ViICYmCisJdGVzdF9jb21taXQgLUMgb3JpZ2luL3N1YiBmaWxlMSAmJgorCWdpdCBpbml0IG9yaWdpbi9tYWluICYmCisJdGVzdF9jb21taXQgLUMgb3JpZ2luL21haW4gZmlyc3QgJiYKKwlnaXQgLUMgb3JpZ2luL21haW4gc3VibW9kdWxlIGFkZCAuLi9zdWIgJiYKKwlnaXQgLUMgb3JpZ2luL21haW4gY29tbWl0IC1tICJhZGQgc3ViIiAmJgorCXRlc3RfY29tbWl0IC1DIG9yaWdpbi9zdWIgImZpbGUxIHVwZGF0ZWQiIGZpbGUxIGZpbGUxdXBkYXRlZCBmaWxlMXVwZGF0ZWQgJiYKKwlnaXQgLUMgb3JpZ2luL21haW4vc3ViIHB1bGwgJiYKKwlnaXQgLUMgb3JpZ2luL21haW4gYWRkIHN1YiAmJgorCWdpdCAtQyBvcmlnaW4vbWFpbiBjb21taXQgLW0gInN1YiB1cGRhdGVkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogY2xvbmUgc3VwZXJwcm9qZWN0IHRvIGNyZWF0ZSBtYWluIHdvcmt0cmVlJyAnCisJZ2l0IGNsb25lIC0tcmVjdXJzaXZlICIkYmFzZV9wYXRoL29yaWdpbi9tYWluIiBtYWluCisnCisKK3JldjFfaGFzaF9tYWluPSQoZ2l0IC0tZ2l0LWRpcj1vcmlnaW4vbWFpbi8uZ2l0IHNob3cgLS1wcmV0dHk9Zm9ybWF0OiVoIC1xICJIRUFEfjEiKQorcmV2MV9oYXNoX3N1Yj0kKGdpdCAtLWdpdC1kaXI9b3JpZ2luL3N1Yi8uZ2l0IHNob3cgLS1wcmV0dHk9Zm9ybWF0OiVoIC1xICJIRUFEfjEiKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3VwZXJwcm9qZWN0IHdvcmt0cmVlJyAnCisJZ2l0IC1DIG1haW4gd29ya3RyZWUgYWRkICIkYmFzZV9wYXRoL3dvcmt0cmVlIiAiJHJldjFfaGFzaF9tYWluIgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdzdWJtb2R1bGUgaXMgY2hlY2tlZCBvdXQganVzdCBhZnRlciB3b3JrdHJlZSBhZGQnICcKKwlnaXQgLUMgd29ya3RyZWUgZGlmZiAtLXN1Ym1vZHVsZSBtYXN0ZXIiXiEiID5vdXQgJiYKKwlncmVwICJmaWxlMSB1cGRhdGVkIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHN1cGVycHJvamVjdCB3b3JrdHJlZSBhbmQgaW5pdGlhbGl6ZSBzdWJtb2R1bGVzJyAnCisJZ2l0IC1DIG1haW4gd29ya3RyZWUgYWRkICIkYmFzZV9wYXRoL3dvcmt0cmVlLXN1Ym1vZHVsZS11cGRhdGUiICIkcmV2MV9oYXNoX21haW4iICYmCisJZ2l0IC1DIHdvcmt0cmVlLXN1Ym1vZHVsZS11cGRhdGUgc3VibW9kdWxlIHVwZGF0ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaXMgY2hlY2tlZCBvdXQganVzdCBhZnRlciBzdWJtb2R1bGUgdXBkYXRlIGluIGxpbmtlZCB3b3JrdHJlZScgJworCWdpdCAtQyB3b3JrdHJlZS1zdWJtb2R1bGUtdXBkYXRlIGRpZmYgLS1zdWJtb2R1bGUgbWFzdGVyIl4hIiA+b3V0ICYmCisJZ3JlcCAiZmlsZTEgdXBkYXRlZCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzdXBlcnByb2plY3Qgd29ya3RyZWUgYW5kIG1hbnVhbGx5IGFkZCBzdWJtb2R1bGUgd29ya3RyZWUnICcKKwlnaXQgLUMgbWFpbiB3b3JrdHJlZSBhZGQgIiRiYXNlX3BhdGgvbGlua2VkX3N1Ym1vZHVsZSIgIiRyZXYxX2hhc2hfbWFpbiIgJiYKKwlnaXQgLUMgbWFpbi9zdWIgd29ya3RyZWUgYWRkICIkYmFzZV9wYXRoL2xpbmtlZF9zdWJtb2R1bGUvc3ViIiAiJHJldjFfaGFzaF9zdWIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpcyBjaGVja2VkIG91dCBhZnRlciBtYW51YWxseSBhZGRpbmcgc3VibW9kdWxlIHdvcmt0cmVlJyAnCisJZ2l0IC1DIGxpbmtlZF9zdWJtb2R1bGUgZGlmZiAtLXN1Ym1vZHVsZSBtYXN0ZXIiXiEiID5vdXQgJiYKKwlncmVwICJmaWxlMSB1cGRhdGVkIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgdXNlcyAkR0lUX0RJUiBmb3Igc3VibW9kdWxlcyBpbiBhIGxpbmtlZCB3b3JrdHJlZScgJworCWdpdCAtQyBtYWluIHdvcmt0cmVlIGFkZCAiJGJhc2VfcGF0aC9jaGVja291dC1yZWN1cnNlIiAtLWRldGFjaCAgJiYKKwlnaXQgLUMgY2hlY2tvdXQtcmVjdXJzZSBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCWVjaG8gImdpdGRpcjogLi4vLi4vbWFpbi8uZ2l0L3dvcmt0cmVlcy9jaGVja291dC1yZWN1cnNlL21vZHVsZXMvc3ViIiA+ZXhwZWN0LWdpdGZpbGUgJiYKKwljYXQgY2hlY2tvdXQtcmVjdXJzZS9zdWIvLmdpdCA+YWN0dWFsLWdpdGZpbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3QtZ2l0ZmlsZSBhY3R1YWwtZ2l0ZmlsZSAmJgorCWdpdCAtQyBtYWluL3N1YiByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0LWhlYWQtbWFpbiAmJgorCWdpdCAtQyBjaGVja291dC1yZWN1cnNlIGNoZWNrb3V0IC0tcmVjdXJzZS1zdWJtb2R1bGVzIEhFQUR+MSAmJgorCWNhdCBjaGVja291dC1yZWN1cnNlL3N1Yi8uZ2l0ID5hY3R1YWwtZ2l0ZmlsZSAmJgorCWdpdCAtQyBtYWluL3N1YiByZXYtcGFyc2UgSEVBRCA+YWN0dWFsLWhlYWQtbWFpbiAmJgorCXRlc3RfY21wIGV4cGVjdC1naXRmaWxlIGFjdHVhbC1naXRmaWxlICYmCisJdGVzdF9jbXAgZXhwZWN0LWhlYWQtbWFpbiBhY3R1YWwtaGVhZC1tYWluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcmUud29ya3RyZWUgaXMgcmVtb3ZlZCBpbiAkR0lUX0RJUi9tb2R1bGVzLzxuYW1lPi9jb25maWcsIG5vdCBpbiAkR0lUX0NPTU1PTl9ESVIvbW9kdWxlcy88bmFtZT4vY29uZmlnJyAnCisJZWNobyAiLi4vLi4vLi4vc3ViIiA+ZXhwZWN0LW1haW4gJiYKKwlnaXQgLUMgbWFpbi9zdWIgY29uZmlnIC0tZ2V0IGNvcmUud29ya3RyZWUgPmFjdHVhbC1tYWluICYmCisJdGVzdF9jbXAgZXhwZWN0LW1haW4gYWN0dWFsLW1haW4gJiYKKwllY2hvICIuLi8uLi8uLi8uLi8uLi8uLi9jaGVja291dC1yZWN1cnNlL3N1YiIgPmV4cGVjdC1saW5rZWQgJiYKKwlnaXQgLUMgY2hlY2tvdXQtcmVjdXJzZS9zdWIgY29uZmlnIC0tZ2V0IGNvcmUud29ya3RyZWUgPmFjdHVhbC1saW5rZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QtbGlua2VkIGFjdHVhbC1saW5rZWQgJiYKKwlnaXQgLUMgY2hlY2tvdXQtcmVjdXJzZSBjaGVja291dCAtLXJlY3Vyc2Utc3VibW9kdWxlcyBmaXJzdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgLUMgbWFpbi8uZ2l0L3dvcmt0cmVlcy9jaGVja291dC1yZWN1cnNlL21vZHVsZXMvc3ViIGNvbmZpZyAtLWdldCBjb3JlLndvcmt0cmVlID5saW5rZWQtY29uZmlnICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGxpbmtlZC1jb25maWcgJiYKKwlnaXQgLUMgbWFpbi9zdWIgY29uZmlnIC0tZ2V0IGNvcmUud29ya3RyZWUgPmFjdHVhbC1tYWluICYmCisJdGVzdF9jbXAgZXhwZWN0LW1haW4gYWN0dWFsLW1haW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zZXR0aW5nIGNvcmUud29ya3RyZWUgZG9lcyBub3QgcHJldmVudCBydW5uaW5nIGNvbW1hbmRzIGRpcmVjdGx5IGFnYWluc3QgdGhlIHN1Ym1vZHVsZSByZXBvc2l0b3J5JyAnCisJZ2l0IC1DIG1haW4vLmdpdC93b3JrdHJlZXMvY2hlY2tvdXQtcmVjdXJzZS9tb2R1bGVzL3N1YiBsb2cKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDAwLWxzLWZpbGVzLW90aGVycy5zaCBiL3QvdDMwMDAtbHMtZmlsZXMtb3RoZXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmZGZiMTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDAwLWxzLWZpbGVzLW90aGVycy5zaApAQCAtMCwwICsxLDIxNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyB0ZXN0cyBmb3IgbHMtZmlsZXMgLS1vdGhlcnMKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIHdpdGggdGhlIGZvbGxvd2luZyBvbiB0aGUKK2ZpbGVzeXN0ZW0uCisKKyAgICBwYXRoMCAgICAgICAtIGEgZmlsZQorICAgIHBhdGgxCS0gYSBzeW1saW5rCisgICAgcGF0aDIvZmlsZTIgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMy1qdW5rICAtIGEgZmlsZSB0byBjb25mdXNlIHRoaW5ncworICAgIHBhdGgzL2ZpbGUzIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDQgICAgICAgLSBhbiBlbXB0eSBkaXJlY3RvcnkKKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAnICcKKwlkYXRlID5wYXRoMCAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKKwl0aGVuCisJCWxuIC1zIHh5enp5IHBhdGgxCisJZWxzZQorCQlkYXRlID5wYXRoMQorCWZpICYmCisJbWtkaXIgcGF0aDIgcGF0aDMgcGF0aDQgJiYKKwlkYXRlID5wYXRoMi9maWxlMiAmJgorCWRhdGUgPnBhdGgyLWp1bmsgJiYKKwlkYXRlID5wYXRoMy9maWxlMyAmJgorCWRhdGUgPnBhdGgzLWp1bmsgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgzLWp1bmsgcGF0aDMvZmlsZTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGV4cGVjdGVkIG91dHB1dCcgJworCWNhdCA+ZXhwZWN0ZWQxIDw8LVxFT0YgJiYKKwlleHBlY3RlZDEKKwlleHBlY3RlZDIKKwlleHBlY3RlZDMKKwlvdXRwdXQKKwlwYXRoMAorCXBhdGgxCisJcGF0aDItanVuaworCXBhdGgyL2ZpbGUyCisJRU9GCisKKwlzZWQgLWUgInN8cGF0aDIvZmlsZTJ8cGF0aDIvfCIgPGV4cGVjdGVkMSA+ZXhwZWN0ZWQyICYmCisJY3AgZXhwZWN0ZWQyIGV4cGVjdGVkMyAmJgorCWVjaG8gcGF0aDQvID4+ZXhwZWN0ZWQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC0tb3RoZXJzJyAnCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDEgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC0tb3RoZXJzIC0tZGlyZWN0b3J5JyAnCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZGlyZWN0b3J5ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tZW1wdHktZGlyZWN0b3J5IGhpZGVzIGVtcHR5IGRpcmVjdG9yeScgJworCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWRpcmVjdG9yeSAtLW5vLWVtcHR5LWRpcmVjdG9yeSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQzIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtLW90aGVycyBoYW5kbGVzIG5vbi1zdWJtb2R1bGUgLmdpdCcgJworCW1rZGlyIG5vdC1hLXN1Ym1vZHVsZSAmJgorCWVjaG8gZm9vID5ub3QtYS1zdWJtb2R1bGUvLmdpdCAmJgorCWdpdCBscy1maWxlcyAtbyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQxIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdscy1maWxlcyAtLW90aGVycyB3aXRoIHN5bWxpbmtlZCBzdWJtb2R1bGUnICcKKwlnaXQgaW5pdCBzdXBlciAmJgorCWdpdCBpbml0IHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCT5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tIHN1YiAmJgorCQlnaXQgcGFjay1yZWZzIC0tYWxsCisJKSAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJIiRTSEVMTF9QQVRIIiAiJFRFU1RfRElSRUNUT1JZLy4uL2NvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIiIC4uL3N1YiBzdWIgJiYKKwkJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZS1zdGFuZGFyZCA+Li4vYWN0dWFsCisJKSAmJgorCWVjaG8gc3ViLyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBuZXN0ZWQgcGF0aHNwZWMgc2VhcmNoJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBuZXN0ZWQgJiYKKwkoCisJCWNkIG5lc3RlZCAmJgorCisJCW1rZGlyIC1wIHBhcnRpYWxseV90cmFja2VkL3VudHJhY2tlZF9kaXIgJiYKKwkJPiBwYXJ0aWFsbHlfdHJhY2tlZC9jb250ZW50ICYmCisJCT4gcGFydGlhbGx5X3RyYWNrZWQvdW50cmFja2VkX2Rpci9maWxlICYmCisKKwkJbWtkaXIgLXAgdW50cmFja2VkL2RlZXAgJiYKKwkJPiB1bnRyYWNrZWQvZGVlcC9wYXRoICYmCisJCT4gdW50cmFja2VkL2RlZXAvZm9vLmMgJiYKKworCQlnaXQgYWRkIHBhcnRpYWxseV90cmFja2VkL2NvbnRlbnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC1vIC0tZGlyZWN0b3J5IHdpdGggc2luZ2xlIGRlZXAgZGlyIHBhdGhzcGVjJyAnCisJKAorCQljZCBuZXN0ZWQgJiYKKworCQlnaXQgbHMtZmlsZXMgLW8gLS1kaXJlY3RvcnkgdW50cmFja2VkL2RlZXAvID5hY3R1YWwgJiYKKworCQljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJdW50cmFja2VkL2RlZXAvCisJCUVPRgorCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC1vIC0tZGlyZWN0b3J5IHdpdGggbXVsdGlwbGUgZGlyIHBhdGhzcGVjcycgJworCSgKKwkJY2QgbmVzdGVkICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1vIC0tZGlyZWN0b3J5IHBhcnRpYWxseV90cmFja2VkLyB1bnRyYWNrZWQvID5hY3R1YWwgJiYKKworCQljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJcGFydGlhbGx5X3RyYWNrZWQvdW50cmFja2VkX2Rpci8KKwkJdW50cmFja2VkLworCQlFT0YKKworCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtbyAtLWRpcmVjdG9yeSB3aXRoIG1peCBkaXIvZmlsZSBwYXRoc3BlY3MnICcKKwkoCisJCWNkIG5lc3RlZCAmJgorCisJCWdpdCBscy1maWxlcyAtbyAtLWRpcmVjdG9yeSBwYXJ0aWFsbHlfdHJhY2tlZC8gdW50cmFja2VkL2RlZXAvcGF0aCA+YWN0dWFsICYmCisKKwkJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCXBhcnRpYWxseV90cmFja2VkL3VudHJhY2tlZF9kaXIvCisJCXVudHJhY2tlZC9kZWVwL3BhdGgKKwkJRU9GCisKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1vIC0tZGlyZWN0b3J5IHdpdGggZ2xvYiBmaWxldHlwZSBtYXRjaCcgJworCSgKKwkJY2QgbmVzdGVkICYmCisKKwkJIyBnbG9icyBraW5kYSBkZWZlYXQgLS1kaXJlY3RvcnksIGJ1dCBvbmx5IGZvciB0aGF0IHBhdGhzcGVjCisJCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWRpcmVjdG9yeSBwYXJ0aWFsbHlfdHJhY2tlZCAidW50cmFja2VkLyouYyIgPmFjdHVhbCAmJgorCisJCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQlwYXJ0aWFsbHlfdHJhY2tlZC91bnRyYWNrZWRfZGlyLworCQl1bnRyYWNrZWQvZGVlcC9mb28uYworCQlFT0YKKworCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtLW8gLS1kaXJlY3Rvcnkgd2l0aCBtaXggb2YgdHJhY2tlZCBzdGF0ZXMnICcKKwkoCisJCWNkIG5lc3RlZCAmJgorCisJCSMgZ2xvYnMga2luZGEgZGVmZWF0IC0tZGlyZWN0b3J5LCBidXQgb25seSBmb3IgdGhhdCBwYXRoc3BlYworCQlnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1kaXJlY3RvcnkgcGFydGlhbGx5X3RyYWNrZWQvICJ1bnRyYWNrZWQvPyoiID5hY3R1YWwgJiYKKworCQljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJcGFydGlhbGx5X3RyYWNrZWQvdW50cmFja2VkX2Rpci8KKwkJdW50cmFja2VkL2RlZXAvCisJCUVPRgorCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC0tbyAtLWRpcmVjdG9yeSB3aXRoIGdsb2IgZmlsZXR5cGUgbWF0Y2ggb25seScgJworCSgKKwkJY2QgbmVzdGVkICYmCisKKwkJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZGlyZWN0b3J5ICJ1bnRyYWNrZWQvKi5jIiA+YWN0dWFsICYmCisKKwkJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCXVudHJhY2tlZC9kZWVwL2Zvby5jCisJCUVPRgorCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC0tbyAtLWRpcmVjdG9yeSB0byBnZXQgaW1tZWRpYXRlIHBhdGhzIHVuZGVyIG9uZSBkaXIgb25seScgJworCSgKKwkJY2QgbmVzdGVkICYmCisKKwkJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZGlyZWN0b3J5ICJ1bnRyYWNrZWQvPyoiID5hY3R1YWwgJiYKKworCQljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJdW50cmFja2VkL2RlZXAvCisJCUVPRgorCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwMS1scy1maWxlcy1vdGhlcnMtZXhjbHVkZS5zaCBiL3QvdDMwMDEtbHMtZmlsZXMtb3RoZXJzLWV4Y2x1ZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWVjN2NiNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMDEtbHMtZmlsZXMtb3RoZXJzLWV4Y2x1ZGUuc2gKQEAgLTAsMCArMSwzMDEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZQorCitUaGlzIHRlc3QgcnVucyBnaXQgbHMtZmlsZXMgLS1vdGhlcnMgYW5kIHRlc3RzIC0tZXhjbHVkZSBwYXR0ZXJucy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3JtIC1mciBvbmUgdGhyZWUKK2ZvciBkaXIgaW4gLiBvbmUgb25lL3R3byB0aHJlZQorZG8KKyAgbWtkaXIgLXAgJGRpciAmJgorICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDgKKyAgZG8KKyAgICA+JGRpci9hLiRpCisgIGRvbmUKK2RvbmUKKz4iI2lnbm9yZTEiCis+IiNpZ25vcmUyIgorPiIjaGlkZGVuIgorCitjYXQgPmV4cGVjdCA8PEVPRgorYS4yCithLjQKK2EuNQorYS44CitvbmUvYS4zCitvbmUvYS40CitvbmUvYS41CitvbmUvYS43CitvbmUvdHdvL2EuMgorb25lL3R3by9hLjMKK29uZS90d28vYS41CitvbmUvdHdvL2EuNworb25lL3R3by9hLjgKK3RocmVlL2EuMgordGhyZWUvYS4zCit0aHJlZS9hLjQKK3RocmVlL2EuNQordGhyZWUvYS44CitFT0YKKworZWNobyAnLmdpdGlnbm9yZQorXCNpZ25vcmUxCitcI2lnbm9yZTIqCitcI2hpZCpuCitvdXRwdXQKK2V4cGVjdAorLmdpdGlnbm9yZQorKi43CishKi44JyA+LmdpdC9pZ25vcmUKKworZWNobyAnKi4xCisvKi4zCishKi42JyA+LmdpdGlnbm9yZQorZWNobyAnKi4yCit0d28vKi40CishKi43CisqLjgnID5vbmUvLmdpdGlnbm9yZQorZWNobyAnISouMgorISouOCcgPm9uZS90d28vLmdpdGlnbm9yZQorCithbGxpZ25vcmVzPScuZ2l0aWdub3JlIG9uZS8uZ2l0aWdub3JlIG9uZS90d28vLmdpdGlnbm9yZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyB3aXRoIHZhcmlvdXMgZXhjbHVkZSBvcHRpb25zLicgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgXAorICAgICAgIC0tZXhjbHVkZT1cKi42IFwKKyAgICAgICAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlIFwKKyAgICAgICAtLWV4Y2x1ZGUtZnJvbT0uZ2l0L2lnbm9yZSBcCisgICAgICAgPm91dHB1dCAmJgorICAgICB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0JworCisjIFRlc3QgXHJcbiAoTVNET1MtbGlrZSBzeXN0ZW1zKQorcHJpbnRmICcqLjFcclxuLyouM1xyXG4hKi42XHJcbicgPi5naXRpZ25vcmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyB3aXRoIFxyXG4gbGluZSBlbmRpbmdzLicgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgXAorICAgICAgIC0tZXhjbHVkZT1cKi42IFwKKyAgICAgICAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlIFwKKyAgICAgICAtLWV4Y2x1ZGUtZnJvbT0uZ2l0L2lnbm9yZSBcCisgICAgICAgPm91dHB1dCAmJgorICAgICB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBza2lwLXdvcmt0cmVlIGdpdGlnbm9yZScgJworCWdpdCBhZGQgJGFsbGlnbm9yZXMgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAkYWxsaWdub3JlcyAmJgorCXJtICRhbGxpZ25vcmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgd2l0aCB2YXJpb3VzIGV4Y2x1ZGUgb3B0aW9ucy4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIFwKKyAgICAgICAtLWV4Y2x1ZGU9XCouNiBcCisgICAgICAgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBcCisgICAgICAgLS1leGNsdWRlLWZyb209LmdpdC9pZ25vcmUgXAorICAgICAgID5vdXRwdXQgJiYKKyAgICAgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdG9yZSBnaXRpZ25vcmUnICcKKwlnaXQgY2hlY2tvdXQgLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1iaXRzICRhbGxpZ25vcmVzICYmCisJcm0gLmdpdC9pbmRleAorJworCitjYXQgPiBleGNsdWRlcy1maWxlIDw8XEVPRgorKi5bMS04XQorZSoKK1wjKgorRU9GCisKK2dpdCBjb25maWcgY29yZS5leGNsdWRlc0ZpbGUgZXhjbHVkZXMtZmlsZQorCitnaXQgLWMgc3RhdHVzLmRpc3BsYXlDb21tZW50UHJlZml4PXRydWUgc3RhdHVzIHwgZ3JlcCAiXiMJIiA+IG91dHB1dAorCitjYXQgPiBleHBlY3QgPDwgRU9GCisjCS5naXRpZ25vcmUKKyMJYS42CisjCW9uZS8KKyMJb3V0cHV0CisjCXRocmVlLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdGF0dXMgaG9ub3JzIGNvcmUuZXhjbHVkZXNmaWxlJyBcCisJJ3Rlc3RfY21wIGV4cGVjdCBvdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWlsaW5nIHNsYXNoIGluIGV4Y2x1ZGUgYWxsb3dzIGRpcmVjdG9yeSBtYXRjaCgxKScgJworCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZT1vbmUvID5vdXRwdXQgJiYKKwlpZiBncmVwICJeb25lLyIgb3V0cHV0CisJdGhlbgorCQllY2hvIE9vb3BzCisJCWZhbHNlCisJZWxzZQorCQk6IGhhcHB5CisJZmkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFpbGluZyBzbGFzaCBpbiBleGNsdWRlIGFsbG93cyBkaXJlY3RvcnkgbWF0Y2ggKDIpJyAnCisKKwlnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1leGNsdWRlPW9uZS90d28vID5vdXRwdXQgJiYKKwlpZiBncmVwICJeb25lL3R3by8iIG91dHB1dAorCXRoZW4KKwkJZWNobyBPb29wcworCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhaWxpbmcgc2xhc2ggaW4gZXhjbHVkZSBmb3JjZXMgZGlyZWN0b3J5IG1hdGNoICgxKScgJworCisJPnR3byAmJgorCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGU9dHdvLyA+b3V0cHV0ICYmCisJZ3JlcCAiXnR3byIgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhaWxpbmcgc2xhc2ggaW4gZXhjbHVkZSBmb3JjZXMgZGlyZWN0b3J5IG1hdGNoICgyKScgJworCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZT1vbmUvYS4xLyA+b3V0cHV0ICYmCisJZ3JlcCAiXm9uZS9hLjEiIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lZ2F0ZWQgZXhjbHVkZSBtYXRjaGVzIGNhbiBvdmVycmlkZSBwcmV2aW91cyBvbmVzJyAnCisKKwlnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1leGNsdWRlPSJhLioiIC0tZXhjbHVkZT0iIWEuMSIgPm91dHB1dCAmJgorCWdyZXAgIl5hLjEiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGNsdWRlZCBkaXJlY3Rvcnkgb3ZlcnJpZGVzIGNvbnRlbnQgcGF0dGVybnMnICcKKworCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGU9Im9uZSIgLS1leGNsdWRlPSIhb25lL2EuMSIgPm91dHB1dCAmJgorCWlmIGdyZXAgIl5vbmUvYS4xIiBvdXRwdXQKKwl0aGVuCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVnYXRlZCBkaXJlY3RvcnkgZG9lc24nXCcndCBhZmZlY3QgY29udGVudCBwYXR0ZXJucycgJworCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZT0iIW9uZSIgLS1leGNsdWRlPSJvbmUvYS4xIiA+b3V0cHV0ICYmCisJaWYgZ3JlcCAiXm9uZS9hLjEiIG91dHB1dAorCXRoZW4KKwkJZmFsc2UKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXJlY3RvcnkgaWdub3JlIChzZXR1cCknICcKKwlta2RpciAtcCB0b3AvbDEvbDIgJiYKKwkoCisJCWNkIHRvcCAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIC8uZ2l0aWdub3JlID4uZ2l0aWdub3JlICYmCisJCWVjaG8gbDEgPj4uZ2l0aWdub3JlICYmCisJCWVjaG8gbDIgPmwxLy5naXRpZ25vcmUgJiYKKwkJPmwxL2wyL2wxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXJlY3RvcnkgaWdub3JlICh0b3BsZXZlbCknICcKKwkoCisJCWNkIHRvcCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gLS1leGNsdWRlLXN0YW5kYXJkCisJKSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXJlY3RvcnkgaWdub3JlIChsMS9sMiknICcKKwkoCisJCWNkIHRvcC9sMS9sMiAmJgorCQlnaXQgbHMtZmlsZXMgLW8gLS1leGNsdWRlLXN0YW5kYXJkCisJKSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXJlY3RvcnkgaWdub3JlIChsMSknICcKKwkoCisJCWNkIHRvcC9sMSAmJgorCQlnaXQgbHMtZmlsZXMgLW8gLS1leGNsdWRlLXN0YW5kYXJkCisJKSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93L2hpZGUgZW1wdHkgaWdub3JlZCBkaXJlY3RvcnkgKHNldHVwKScgJworCXJtIHRvcC9sMS9sMi9sMSAmJgorCXJtIHRvcC9sMS8uZ2l0aWdub3JlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgZW1wdHkgaWdub3JlZCBkaXJlY3Rvcnkgd2l0aCAtLWRpcmVjdG9yeScgJworCSgKKwkJY2QgdG9wICYmCisJCWdpdCBscy1maWxlcyAtbyAtaSAtLWV4Y2x1ZGUgbDEgLS1kaXJlY3RvcnkKKwkpID5hY3R1YWwgJiYKKwllY2hvIGwxLyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoaWRlIGVtcHR5IGlnbm9yZWQgZGlyZWN0b3J5IHdpdGggLS1uby1lbXB0eS1kaXJlY3RvcnknICcKKwkoCisJCWNkIHRvcCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gLWkgLS1leGNsdWRlIGwxIC0tZGlyZWN0b3J5IC0tbm8tZW1wdHktZGlyZWN0b3J5CisJKSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93L2hpZGUgZW1wdHkgaWdub3JlZCBzdWItZGlyZWN0b3J5IChzZXR1cCknICcKKwk+IHRvcC9sMS90cmFja2VkICYmCisJKAorCQljZCB0b3AgJiYKKwkJZ2l0IGFkZCAtZiBsMS90cmFja2VkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IGVtcHR5IGlnbm9yZWQgc3ViLWRpcmVjdG9yeSB3aXRoIC0tZGlyZWN0b3J5JyAnCisJKAorCQljZCB0b3AgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vIC1pIC0tZXhjbHVkZSBsMSAtLWRpcmVjdG9yeQorCSkgPmFjdHVhbCAmJgorCWVjaG8gbDEvbDIvID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hpZGUgZW1wdHkgaWdub3JlZCBzdWItZGlyZWN0b3J5IHdpdGggLS1uby1lbXB0eS1kaXJlY3RvcnknICcKKwkoCisJCWNkIHRvcCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gLWkgLS1leGNsdWRlIGwxIC0tZGlyZWN0b3J5IC0tbm8tZW1wdHktZGlyZWN0b3J5CisJKSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXR0ZXJuIG1hdGNoZXMgcHJlZml4IGNvbXBsZXRlbHknICcKKwlnaXQgbHMtZmlsZXMgLWkgLW8gLS1leGNsdWRlICIvdGhyZWUvYS4zW2FiY10iID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIHdpdGggIioqIiBwYXR0ZXJucycgJworCWNhdCA8PFxFT0YgPmV4cGVjdCAmJgorYS4xCitvbmUvYS4xCitvbmUvdHdvL2EuMQordGhyZWUvYS4xCitFT0YKKwlnaXQgbHMtZmlsZXMgLW8gLWkgLS1leGNsdWRlICIqKi9hLjEiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgd2l0aCAiKioiIHBhdHRlcm5zIGFuZCBubyBzbGFzaGVzJyAnCisJZ2l0IGxzLWZpbGVzIC1vIC1pIC0tZXhjbHVkZSAib25lKiphLjEiID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwMi1scy1maWxlcy1kYXNocGF0aC5zaCBiL3QvdDMwMDItbHMtZmlsZXMtZGFzaHBhdGguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODcwNGIwNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMDItbHMtZmlsZXMtZGFzaHBhdGguc2gKQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbHMtZmlsZXMgdGVzdCAoLS0gdG8gdGVybWluYXRlIHRoZSBwYXRoIGxpc3QpLgorCitUaGlzIHRlc3QgcnVucyBnaXQgbHMtZmlsZXMgLS1vdGhlcnMgd2l0aCB0aGUgZm9sbG93aW5nIG9uIHRoZQorZmlsZXN5c3RlbS4KKworICAgIHBhdGgwICAgICAgIC0gYSBmaWxlCisgICAgLWZvbwktIGEgZmlsZSB3aXRoIGEgZnVubnkgbmFtZS4KKyAgICAtLQkJLSBhbm90aGVyIGZpbGUgd2l0aCBhIGZ1bm55IG5hbWUuCisnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJc2V0dXAgXAorCSdlY2hvIGZyb3R6ID5wYXRoMCAmJgorCWVjaG8gZnJvdHogPi4vLWZvbyAmJgorCWVjaG8gZnJvdHogPi4vLS0nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgd2l0aG91dCBwYXRoIHJlc3RyaWN0aW9uLicgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgPm91dHB1dCAmJgorICAgICB0ZXN0X2NtcCBvdXRwdXQgLSA8PEVPRgorLS0KKy1mb28KK291dHB1dAorcGF0aDAKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIHdpdGggcGF0aCByZXN0cmljdGlvbi4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIHBhdGgwID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBvdXRwdXQgLSA8PEVPRgorcGF0aDAKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIHdpdGggcGF0aCByZXN0cmljdGlvbiB3aXRoIC0tLicgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS0gcGF0aDAgPm91dHB1dCAmJgorCXRlc3RfY21wIG91dHB1dCAtIDw8RU9GCitwYXRoMAorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgd2l0aCBwYXRoIHJlc3RyaWN0aW9uIHdpdGggLS0gLS0uJyBcCisgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyAtLSAtLSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IC0gPDxFT0YKKy0tCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBscy1maWxlcyB3aXRoIG5vIHBhdGggcmVzdHJpY3Rpb24uJyBcCisgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyAtLSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IC0gPDxFT0YKKy0tCistZm9vCitvdXRwdXQKK3BhdGgwCitFT0YKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDAzLWxzLWZpbGVzLWV4Y2x1ZGUuc2ggYi90L3QzMDAzLWxzLWZpbGVzLWV4Y2x1ZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDVlYzMzMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMDMtbHMtZmlsZXMtZXhjbHVkZS5zaApAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbHMtZmlsZXMgLS1leGNsdWRlIGRvZXMgbm90IGFmZmVjdCBpbmRleCBmaWxlcycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcmVwbyB3aXRoIGZpbGUnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGZpbGUgJiYKKwllY2hvIG1vZGlmaWNhdGlvbiA+ZmlsZQorJworCitjaGVja19vdXRwdXQoKSB7Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICJscy1maWxlcyBvdXRwdXQgY29udGFpbnMgZmlsZSAoJDEpIiAiCisJZWNobyAnJDInID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLS1leGNsdWRlLXN0YW5kYXJkIC0tJDEgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKyIKK30KKworY2hlY2tfYWxsX291dHB1dCgpIHsKKwljaGVja19vdXRwdXQgJ2NhY2hlZCcgJ2ZpbGUnCisJY2hlY2tfb3V0cHV0ICdtb2RpZmllZCcgJ2ZpbGUnCit9CisKK2NoZWNrX2FsbF9vdXRwdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBmaWxlIHRvIGdpdGlnbm9yZScgJworCWVjaG8gZmlsZSA+LmdpdGlnbm9yZQorJworY2hlY2tfYWxsX291dHB1dAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtaSBsaXN0cyBvbmx5IHRyYWNrZWQtYnV0LWlnbm9yZWQgZmlsZXMnICcKKwllY2hvIGNvbnRlbnQgPm90aGVyLWZpbGUgJiYKKwlnaXQgYWRkIG90aGVyLWZpbGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyAtaSAtLWV4Y2x1ZGUtc3RhbmRhcmQgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDA0LWxzLWZpbGVzLWJhc2ljLnNoIGIvdC90MzAwNC1scy1maWxlcy1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZmQ1YTFmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzAwNC1scy1maWxlcy1iYXNpYy5zaApAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgbHMtZmlsZXMgdGVzdHMKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLWZpbGVzIHdpdGggdmFyaW91cyB1bnVzdWFsIG9yIG1hbGZvcm1lZAorY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIGluIGVtcHR5IHJlcG9zaXRvcnknICcKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgd2l0aCBub25leGlzdGVudCBwYXRoJyAnCisJZ2l0IGxzLWZpbGVzIGRvZXNub3RleGlzdCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyB3aXRoIG5vbnNlbnNlIG9wdGlvbicgJworCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBscy1maWxlcyAtLW5vbnNlbnNlIDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiW1V1XXNhZ2U6IGdpdCBscy1maWxlcyIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC1oIGluIGNvcnJ1cHQgcmVwb3NpdG9yeScgJworCW1rZGlyIGJyb2tlbiAmJgorCSgKKwkJY2QgYnJva2VuICYmCisJCWdpdCBpbml0ICYmCisJCT4uZ2l0L2luZGV4ICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBscy1maWxlcyAtaCA+dXNhZ2UgMj4mMQorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZTogZ2l0IGxzLWZpbGVzICIgYnJva2VuL3VzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2xzLWZpbGVzIHdpdGggYWJzb2x1dGUgcGF0aHMgdG8gc3ltbGlua3MnICcKKwlta2RpciBzdWJzICYmCisJbG4gLXMgbm9zdWNoIGxpbmsgJiYKKwlsbiAtcyAuLi9ub3N1Y2ggc3Vicy9saW5rICYmCisJZ2l0IGFkZCBsaW5rIHN1YnMvbGluayAmJgorCWdpdCBscy1maWxlcyAtcyBsaW5rIHN1YnMvbGluayA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1zICIkKHB3ZCkvbGluayIgIiQocHdkKS9zdWJzL2xpbmsiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkoCisJCWNkIHN1YnMgJiYKKwkJZ2l0IGxzLWZpbGVzIC1zIGxpbmsgPi4uL2V4cGVjdCAmJgorCQlnaXQgbHMtZmlsZXMgLXMgIiQocHdkKS9saW5rIiA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDA1LWxzLWZpbGVzLXJlbGF0aXZlLnNoIGIvdC90MzAwNS1scy1maWxlcy1yZWxhdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZWM2OWE4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzAwNS1scy1maWxlcy1yZWxhdGl2ZS5zaApAQCAtMCwwICsxLDY4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbHMtZmlsZXMgdGVzdHMgd2l0aCByZWxhdGl2ZSBwYXRocworCitUaGlzIHRlc3QgcnVucyBnaXQgbHMtZmlsZXMgd2l0aCB2YXJpb3VzIHJlbGF0aXZlIHBhdGggYXJndW1lbnRzLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZScgJworCTogPm5ldmVyLW1pbmQtbWUgJiYKKwlnaXQgYWRkIG5ldmVyLW1pbmQtbWUgJiYKKwlta2RpciB0b3AgJiYKKwkoCisJCWNkIHRvcCAmJgorCQlta2RpciBzdWIgJiYKKwkJeD0ieCB4YSB4YmMgeGRlZiB4Z2hpaiB4a2xtbm8iICYmCisJCXk9JChlY2hvICIkeCIgfCB0ciB4IHkpICYmCisJCXRvdWNoICR4ICYmCisJCXRvdWNoICR5ICYmCisJCWNkIHN1YiAmJgorCQlnaXQgYWRkIC4uL3gqCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyB3aXRoIG1peGVkIGxldmVscycgJworCSgKKwkJY2QgdG9wL3N1YiAmJgorCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJLi4vLi4vbmV2ZXItbWluZC1tZQorCQkuLi94CisJCUVPRgorCQlnaXQgbHMtZmlsZXMgJChjYXQgZXhwZWN0KSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC1jJyAnCisJKAorCQljZCB0b3Avc3ViICYmCisJCWZvciBmIGluIC4uL3kqCisJCWRvCisJCQllY2hvICJlcnJvcjogcGF0aHNwZWMgJFNRJGYkU1EgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQiCisJCWRvbmUgPmV4cGVjdC5lcnIgJiYKKwkJZWNobyAiRGlkIHlvdSBmb3JnZXQgdG8gJHtTUX1naXQgYWRkJHtTUX0/IiA+PmV4cGVjdC5lcnIgJiYKKwkJbHMgLi4veCogPmV4cGVjdC5vdXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC1jIC0tZXJyb3ItdW5tYXRjaCAuLi9beHldKiA+YWN0dWFsLm91dCAyPmFjdHVhbC5lcnIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0Lm91dCBhY3R1YWwub3V0ICYmCisJCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC1vJyAnCisJKAorCQljZCB0b3Avc3ViICYmCisJCWZvciBmIGluIC4uL3gqCisJCWRvCisJCQllY2hvICJlcnJvcjogcGF0aHNwZWMgJFNRJGYkU1EgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQiCisJCWRvbmUgPmV4cGVjdC5lcnIgJiYKKwkJZWNobyAiRGlkIHlvdSBmb3JnZXQgdG8gJHtTUX1naXQgYWRkJHtTUX0/IiA+PmV4cGVjdC5lcnIgJiYKKwkJbHMgLi4veSogPmV4cGVjdC5vdXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC1vIC0tZXJyb3ItdW5tYXRjaCAuLi9beHldKiA+YWN0dWFsLm91dCAyPmFjdHVhbC5lcnIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0Lm91dCBhY3R1YWwub3V0ICYmCisJCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwNi1scy1maWxlcy1sb25nLnNoIGIvdC90MzAwNi1scy1maWxlcy1sb25nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUxMDljM2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDA2LWxzLWZpbGVzLWxvbmcuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J292ZXJseSBsb25nIHBhdGhzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXA9ZmlsZWZpbGVmaWxlZmlsZWZpbGVmaWxlZmlsZWZpbGUgJiYKKwlwPSRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCRwICYmCisJcD0kcCRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCAmJgorCisJcGF0aF9hPSR7cH1fYSAmJgorCXBhdGhfej0ke3B9X3ogJiYKKworCWJsb2JfYT0kKGVjaG8gZnJvdHogfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlibG9iX3o9JChlY2hvIG5pdGZvbCB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCisJcGF0PSIxMDA2NDQgJXMgMFx0JXNcbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3Zlcmx5LWxvbmcgcGF0aCBieSBpdHNlbGYgaXMgbm90IGEgcHJvYmxlbScgJworCXByaW50ZiAiJHBhdCIgIiRibG9iX2EiICIkcGF0aF9hIiB8CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWluZGV4LWluZm8gJiYKKwllY2hvICIkcGF0aF9hIiA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJseS1sb25nIHBhdGggZG9lcyBub3QgcmVwbGFjZSBhbm90aGVyIGJ5IG1pc3Rha2UnICcKKwlwcmludGYgIiRwYXQiICIkYmxvYl9hIiAiJHBhdGhfYSIgIiRibG9iX3oiICIkcGF0aF96IiB8CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWluZGV4LWluZm8gJiYKKwkoCisJCWVjaG8gIiRwYXRoX2EiICYmCisJCWVjaG8gIiRwYXRoX3oiCisJKSA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwNy1scy1maWxlcy1yZWN1cnNlLXN1Ym1vZHVsZXMuc2ggYi90L3QzMDA3LWxzLWZpbGVzLXJlY3Vyc2Utc3VibW9kdWxlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YTA4MDAwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzAwNy1scy1maWxlcy1yZWN1cnNlLXN1Ym1vZHVsZXMuc2gKQEAgLTAsMCArMSwyOTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGxzLWZpbGVzIHJlY3Vyc2Utc3VibW9kdWxlcyBmZWF0dXJlCisKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGUgcmVjdXJzZS1zdWJtb2R1bGVzIGZlYXR1cmUgY29ycmVjdGx5IGxpc3RzIGZpbGVzIGZyb20KK3N1Ym1vZHVsZXMuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCBzdWJtb2R1bGVzJyAnCisJZWNobyBhID5hICYmCisJbWtkaXIgYiAmJgorCWVjaG8gYiA+Yi9iICYmCisJZ2l0IGFkZCBhIGIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgYSBhbmQgYiIgJiYKKwlnaXQgaW5pdCBzdWJtb2R1bGUgJiYKKwllY2hvIGMgPnN1Ym1vZHVsZS9jICYmCisJZ2l0IC1DIHN1Ym1vZHVsZSBhZGQgYyAmJgorCWdpdCAtQyBzdWJtb2R1bGUgY29tbWl0IC1tICJhZGQgYyIgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuL3N1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIHN1Ym1vZHVsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgY29ycmVjdGx5IG91dHB1dHMgZmlsZXMgaW4gc3VibW9kdWxlJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS5naXRtb2R1bGVzCisJYQorCWIvYgorCXN1Ym1vZHVsZS9jCisJRU9GCisKKwlnaXQgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgY29ycmVjdGx5IG91dHB1dHMgZmlsZXMgaW4gc3VibW9kdWxlIHdpdGggLXonICcKKwlsZl90b19udWwgPmV4cGVjdCA8PC1cRU9GICYmCisJLmdpdG1vZHVsZXMKKwlhCisJYi9iCisJc3VibW9kdWxlL2MKKwlFT0YKKworCWdpdCBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyAteiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyBkb2VzIG5vdCBvdXRwdXQgZmlsZXMgbm90IGFkZGVkIHRvIGEgcmVwbycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkuZ2l0bW9kdWxlcworCWEKKwliL2IKKwlzdWJtb2R1bGUvYworCUVPRgorCisJZWNobyBhID5ub3RfYWRkZWQgJiYKKwllY2hvIGIgPmIvbm90X2FkZGVkICYmCisJZWNobyBjID5zdWJtb2R1bGUvbm90X2FkZGVkICYmCisJZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIHJlY3Vyc2VzIG1vcmUgdGhhbiAxIGxldmVsJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS5naXRtb2R1bGVzCisJYQorCWIvYgorCXN1Ym1vZHVsZS8uZ2l0bW9kdWxlcworCXN1Ym1vZHVsZS9jCisJc3VibW9kdWxlL3N1YnN1Yi9kCisJRU9GCisKKwlnaXQgaW5pdCBzdWJtb2R1bGUvc3Vic3ViICYmCisJZWNobyBkID5zdWJtb2R1bGUvc3Vic3ViL2QgJiYKKwlnaXQgLUMgc3VibW9kdWxlL3N1YnN1YiBhZGQgZCAmJgorCWdpdCAtQyBzdWJtb2R1bGUvc3Vic3ViIGNvbW1pdCAtbSAiYWRkIGQiICYmCisJZ2l0IC1DIHN1Ym1vZHVsZSBzdWJtb2R1bGUgYWRkIC4vc3Vic3ViICYmCisJZ2l0IC1DIHN1Ym1vZHVsZSBjb21taXQgLW0gImFkZGVkIHN1YnN1YiIgJiYKKwlnaXQgc3VibW9kdWxlIGFic29yYmdpdGRpcnMgJiYKKwlnaXQgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgd29ya3Mgd2l0aCBHSVRfRElSJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS5naXRtb2R1bGVzCisJYworCXN1YnN1Yi9kCisJRU9GCisKKwlnaXQgLS1naXQtZGlyPXN1Ym1vZHVsZS8uZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVjdXJzZS1zdWJtb2R1bGVzIGFuZCBwYXRoc3BlY3Mgc2V0dXAnICcKKwllY2hvIGUgPnN1Ym1vZHVsZS9zdWJzdWIvZS50eHQgJiYKKwlnaXQgLUMgc3VibW9kdWxlL3N1YnN1YiBhZGQgZS50eHQgJiYKKwlnaXQgLUMgc3VibW9kdWxlL3N1YnN1YiBjb21taXQgLW0gImFkZGluZyBlLnR4dCIgJiYKKwllY2hvIGYgPnN1Ym1vZHVsZS9mLlRYVCAmJgorCWVjaG8gZyA+c3VibW9kdWxlL2cudHh0ICYmCisJZ2l0IC1DIHN1Ym1vZHVsZSBhZGQgZi5UWFQgZy50eHQgJiYKKwlnaXQgLUMgc3VibW9kdWxlIGNvbW1pdCAtbSAiYWRkIGYgYW5kIGciICYmCisJZWNobyBoID5oLnR4dCAmJgorCW1rZGlyIHNpYiAmJgorCWVjaG8gc2liID5zaWIvZmlsZSAmJgorCWdpdCBhZGQgaC50eHQgc2liL2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgaCBhbmQgc2liL2ZpbGUiICYmCisJZ2l0IGluaXQgc3ViICYmCisJZWNobyBzdWIgPnN1Yi9maWxlICYmCisJZ2l0IC1DIHN1YiBhZGQgZmlsZSAmJgorCWdpdCAtQyBzdWIgY29tbWl0IC1tICJhZGQgZmlsZSIgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuL3N1YiAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIHN1YiIgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkuZ2l0bW9kdWxlcworCWEKKwliL2IKKwloLnR4dAorCXNpYi9maWxlCisJc3ViL2ZpbGUKKwlzdWJtb2R1bGUvLmdpdG1vZHVsZXMKKwlzdWJtb2R1bGUvYworCXN1Ym1vZHVsZS9mLlRYVAorCXN1Ym1vZHVsZS9nLnR4dAorCXN1Ym1vZHVsZS9zdWJzdWIvZAorCXN1Ym1vZHVsZS9zdWJzdWIvZS50eHQKKwlFT0YKKworCWdpdCBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyAiKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5hY3RpdmUgc3VibW9kdWxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tYm9vbCBzdWJtb2R1bGUuc3VibW9kdWxlLmFjdGl2ZSB0cnVlIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1Ym1vZHVsZSBjb25maWcgLS1ib29sIHN1Ym1vZHVsZS5zdWJzdWIuYWN0aXZlIHRydWUiICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgc3VibW9kdWxlLnN1Ym1vZHVsZS5hY3RpdmUgImZhbHNlIiAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS5naXRtb2R1bGVzCisJYQorCWIvYgorCWgudHh0CisJc2liL2ZpbGUKKwlzdWIvZmlsZQorCXN1Ym1vZHVsZQorCUVPRgorCisJZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgY29uZmlnIC0tYm9vbCBzdWJtb2R1bGUuc3VibW9kdWxlLmFjdGl2ZSAidHJ1ZSIgJiYKKwlnaXQgLUMgc3VibW9kdWxlIGNvbmZpZyAtLWJvb2wgc3VibW9kdWxlLnN1YnN1Yi5hY3RpdmUgImZhbHNlIiAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS5naXRtb2R1bGVzCisJYQorCWIvYgorCWgudHh0CisJc2liL2ZpbGUKKwlzdWIvZmlsZQorCXN1Ym1vZHVsZS8uZ2l0bW9kdWxlcworCXN1Ym1vZHVsZS9jCisJc3VibW9kdWxlL2YuVFhUCisJc3VibW9kdWxlL2cudHh0CisJc3VibW9kdWxlL3N1YnN1YgorCUVPRgorCisJZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVjdXJzZS1zdWJtb2R1bGVzIGFuZCBwYXRoc3BlY3MnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJaC50eHQKKwlzdWJtb2R1bGUvZy50eHQKKwlzdWJtb2R1bGUvc3Vic3ViL2UudHh0CisJRU9GCisKKwlnaXQgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgIioudHh0IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlY3Vyc2Utc3VibW9kdWxlcyBhbmQgcGF0aHNwZWNzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWgudHh0CisJc3VibW9kdWxlL2YuVFhUCisJc3VibW9kdWxlL2cudHh0CisJc3VibW9kdWxlL3N1YnN1Yi9lLnR4dAorCUVPRgorCisJZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzICI6KGljYXNlKSoudHh0IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlY3Vyc2Utc3VibW9kdWxlcyBhbmQgcGF0aHNwZWNzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWgudHh0CisJc3VibW9kdWxlL2YuVFhUCisJc3VibW9kdWxlL2cudHh0CisJRU9GCisKKwlnaXQgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgIjooaWNhc2UpKi50eHQiICI6KGV4Y2x1ZGUpc3VibW9kdWxlL3N1YnN1Yi8qIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlY3Vyc2Utc3VibW9kdWxlcyBhbmQgcGF0aHNwZWNzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXN1Yi9maWxlCisJRU9GCisKKwlnaXQgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgInN1YiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgInN1Yi8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzICJzdWIvZmlsZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgInN1Ki9maWxlIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyAic3U/L2ZpbGUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVjdXJzZS1zdWJtb2R1bGVzIGFuZCBwYXRoc3BlY3MnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJc2liL2ZpbGUKKwlzdWIvZmlsZQorCUVPRgorCisJZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzICJzPz8vZmlsZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgInM/Pz9maWxlIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyAicypmaWxlIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlY3Vyc2Utc3VibW9kdWxlcyBhbmQgcmVsYXRpdmUgcGF0aHMnICcKKwkjIEZyb20gc3ViZGlyCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWIKKwlFT0YKKwlnaXQgLUMgYiBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBSZWxhdGl2ZSBwYXRoIHRvIHRvcAorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkuLi8uZ2l0bW9kdWxlcworCS4uL2EKKwliCisJLi4vaC50eHQKKwkuLi9zaWIvZmlsZQorCS4uL3N1Yi9maWxlCisJLi4vc3VibW9kdWxlLy5naXRtb2R1bGVzCisJLi4vc3VibW9kdWxlL2MKKwkuLi9zdWJtb2R1bGUvZi5UWFQKKwkuLi9zdWJtb2R1bGUvZy50eHQKKwkuLi9zdWJtb2R1bGUvc3Vic3ViL2QKKwkuLi9zdWJtb2R1bGUvc3Vic3ViL2UudHh0CisJRU9GCisJZ2l0IC1DIGIgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS0gLi4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgUmVsYXRpdmUgcGF0aCB0byBzdWJtb2R1bGUKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLi4vc3VibW9kdWxlLy5naXRtb2R1bGVzCisJLi4vc3VibW9kdWxlL2MKKwkuLi9zdWJtb2R1bGUvZi5UWFQKKwkuLi9zdWJtb2R1bGUvZy50eHQKKwkuLi9zdWJtb2R1bGUvc3Vic3ViL2QKKwkuLi9zdWJtb2R1bGUvc3Vic3ViL2UudHh0CisJRU9GCisJZ2l0IC1DIGIgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS0gLi4vc3VibW9kdWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVjdXJzZS1zdWJtb2R1bGVzIGRvZXMgbm90IHN1cHBvcnQgLS1lcnJvci11bm1hdGNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tZXJyb3ItdW5tYXRjaCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImRvZXMgbm90IHN1cHBvcnQgLS1lcnJvci11bm1hdGNoIiBhY3R1YWwKKycKKwordGVzdF9pbmNvbXBhdGlibGVfd2l0aF9yZWN1cnNlX3N1Ym1vZHVsZXMgKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tcmVjdXJzZS1zdWJtb2R1bGVzIGFuZCAkMSBhcmUgaW5jb21wYXRpYmxlIiAiCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyAkMSAyPmFjdHVhbCAmJgorCQl0ZXN0X2kxOG5ncmVwICd1bnN1cHBvcnRlZCBtb2RlJyBhY3R1YWwKKwkiCit9CisKK3Rlc3RfaW5jb21wYXRpYmxlX3dpdGhfcmVjdXJzZV9zdWJtb2R1bGVzIC0tZGVsZXRlZAordGVzdF9pbmNvbXBhdGlibGVfd2l0aF9yZWN1cnNlX3N1Ym1vZHVsZXMgLS1tb2RpZmllZAordGVzdF9pbmNvbXBhdGlibGVfd2l0aF9yZWN1cnNlX3N1Ym1vZHVsZXMgLS1vdGhlcnMKK3Rlc3RfaW5jb21wYXRpYmxlX3dpdGhfcmVjdXJzZV9zdWJtb2R1bGVzIC0tc3RhZ2UKK3Rlc3RfaW5jb21wYXRpYmxlX3dpdGhfcmVjdXJzZV9zdWJtb2R1bGVzIC0ta2lsbGVkCit0ZXN0X2luY29tcGF0aWJsZV93aXRoX3JlY3Vyc2Vfc3VibW9kdWxlcyAtLXVubWVyZ2VkCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwOC1scy1maWxlcy1sYXp5LWluaXQtbmFtZS1oYXNoLnNoIGIvdC90MzAwOC1scy1maWxlcy1sYXp5LWluaXQtbmFtZS1oYXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg1ZjM3MDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDA4LWxzLWZpbGVzLWxhenktaW5pdC1uYW1lLWhhc2guc2gKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIGxhenkgaW5pdCBuYW1lIGhhc2ggd2l0aCB2YXJpb3VzIGZvbGRlciBzdHJ1Y3R1cmVzJworCisuIC4vdGVzdC1saWIuc2gKKworaWYgdGVzdCAxIC1lcSAkKHRlc3QtdG9vbCBvbmxpbmUtY3B1cykKK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgbGF6eS1pbml0IHRlc3RzLCBzaW5nbGUgY3B1JworCXRlc3RfZG9uZQorZmkKKworTEFaWV9USFJFQURfQ09TVD0yMDAwCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGJ1ZmZlciBvdmVyZmxvdyBpbiBsYXp5X2luaXRfbmFtZV9oYXNoJyAnCisJKAorCSAgICB0ZXN0X3NlcSAkTEFaWV9USFJFQURfQ09TVCB8IHNlZCAicy9eL2FfLyIgJiYKKwkgICAgZWNobyBiL2IvYiAmJgorCSAgICB0ZXN0X3NlcSAkTEFaWV9USFJFQURfQ09TVCB8IHNlZCAicy9eL2NfLyIgJiYKKwkgICAgdGVzdF9zZXEgNTAgfCBzZWQgInMvXi9kXy8iIHwgdHIgIlxuIiAiLyIgJiYgZWNobyBkCisJKSB8CisJc2VkICJzL14vMTAwNjQ0ICRFTVBUWV9CTE9CCS8iIHwKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCXRlc3QtdG9vbCBsYXp5LWluaXQtbmFtZS1oYXNoIC1tCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwOS1scy1maWxlcy1vdGhlcnMtbm9uc3VibW9kdWxlLnNoIGIvdC90MzAwOS1scy1maWxlcy1vdGhlcnMtbm9uc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2M2YzNDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDA5LWxzLWZpbGVzLW90aGVycy1ub25zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSw1MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIHdpdGggbm9uLXN1Ym1vZHVsZSByZXBvc2l0b3JpZXMKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIHdpdGggdGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWU6CisKKyAgICBub25yZXBvLW5vLWZpbGVzLworICAgICAgcGxhaW4gZGlyZWN0b3J5IHdpdGggbm8gZmlsZXMKKyAgICBub25yZXBvLXVudHJhY2tlZC1maWxlLworICAgICAgcGxhaW4gZGlyZWN0b3J5IHdpdGggYW4gdW50cmFja2VkIGZpbGUKKyAgICByZXBvLW5vLWNvbW1pdC1uby1maWxlcy8KKyAgICAgIGdpdCByZXBvc2l0b3J5IHdpdGhvdXQgYSBjb21taXQgb3IgYSBmaWxlCisgICAgcmVwby1uby1jb21taXQtdW50cmFja2VkLWZpbGUvCisgICAgICBnaXQgcmVwb3NpdG9yeSB3aXRob3V0IGEgY29tbWl0IGJ1dCB3aXRoIGFuIHVudHJhY2tlZCBmaWxlCisgICAgcmVwby13aXRoLWNvbW1pdC1uby1maWxlcy8KKyAgICAgIGdpdCByZXBvc2l0b3J5IHdpdGggYSBjb21taXQgYW5kIG5vIHVudHJhY2tlZCBmaWxlcworICAgIHJlcG8td2l0aC1jb21taXQtdW50cmFja2VkLWZpbGUvCisgICAgICBnaXQgcmVwb3NpdG9yeSB3aXRoIGEgY29tbWl0IGFuZCBhbiB1bnRyYWNrZWQgZmlsZQorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGRpcmVjdG9yaWVzJyAnCisJbWtkaXIgbm9ucmVwby1uby1maWxlcy8gJiYKKwlta2RpciBub25yZXBvLXVudHJhY2tlZC1maWxlICYmCisJOiA+bm9ucmVwby11bnRyYWNrZWQtZmlsZS91bnRyYWNrZWQgJiYKKwlnaXQgaW5pdCByZXBvLW5vLWNvbW1pdC1uby1maWxlcyAmJgorCWdpdCBpbml0IHJlcG8tbm8tY29tbWl0LXVudHJhY2tlZC1maWxlICYmCisJOiA+cmVwby1uby1jb21taXQtdW50cmFja2VkLWZpbGUvdW50cmFja2VkICYmCisJZ2l0IGluaXQgcmVwby13aXRoLWNvbW1pdC1uby1maWxlcyAmJgorCWdpdCAtQyByZXBvLXdpdGgtY29tbWl0LW5vLWZpbGVzIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tbXNnICYmCisJZ2l0IGluaXQgcmVwby13aXRoLWNvbW1pdC11bnRyYWNrZWQtZmlsZSAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8td2l0aC1jb21taXQtdW50cmFja2VkLWZpbGUgbXNnICYmCisJOiA+cmVwby13aXRoLWNvbW1pdC11bnRyYWNrZWQtZmlsZS91bnRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1vdGhlcnMgaGFuZGxlcyB1bnRyYWNrZWQgZ2l0IHJlcG9zaXRvcmllcycgJworCWdpdCBscy1maWxlcyAtbyA+b3V0cHV0ICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJbm9ucmVwby11bnRyYWNrZWQtZmlsZS91bnRyYWNrZWQKKwlvdXRwdXQKKwlyZXBvLW5vLWNvbW1pdC1uby1maWxlcy8KKwlyZXBvLW5vLWNvbW1pdC11bnRyYWNrZWQtZmlsZS8KKwlyZXBvLXdpdGgtY29tbWl0LW5vLWZpbGVzLworCXJlcG8td2l0aC1jb21taXQtdW50cmFja2VkLWZpbGUvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMTAtbHMtZmlsZXMta2lsbGVkLW1vZGlmaWVkLnNoIGIvdC90MzAxMC1scy1maWxlcy1raWxsZWQtbW9kaWZpZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTgwZTE1OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMTAtbHMtZmlsZXMta2lsbGVkLW1vZGlmaWVkLnNoCkBAIC0wLDAgKzEsMTI2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBscy1maWxlcyAtayBhbmQgLW0gZmxhZ3MgdGVzdC4KKworVGhpcyB0ZXN0IHByZXBhcmVzIHRoZSBmb2xsb3dpbmcgaW4gdGhlIGNhY2hlOgorCisgICAgcGF0aDAgICAgICAgLSBhIGZpbGUKKyAgICBwYXRoMSAgICAgICAtIGEgc3ltbGluaworICAgIHBhdGgyL2ZpbGUyIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDMvZmlsZTMgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoeC9qdSAgICAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHN1Ym1vZDEvCS0gYSBzdWJtb2R1bGUKKyAgICBzdWJtb2QyLwktIGFub3RoZXIgc3VibW9kdWxlCisKK2FuZCB0aGUgZm9sbG93aW5nIG9uIHRoZSBmaWxlc3lzdGVtOgorCisgICAgcGF0aDAvZmlsZTAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMS9maWxlMSAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgyICAgICAgIC0gYSBmaWxlCisgICAgcGF0aDMgICAgICAgLSBhIHN5bWxpbmsKKyAgICBwYXRoNAktIGEgZmlsZQorICAgIHBhdGg1CS0gYSBzeW1saW5rCisgICAgcGF0aDYvZmlsZTYgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoeC9qdS9uayAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeSB0byBiZSBraWxsZWQKKyAgICBzdWJtb2QxLwktIGEgc3VibW9kdWxlIChtb2RpZmllZCBmcm9tIHRoZSBjYWNoZSkKKyAgICBzdWJtb2QyLwktIGEgc3VibW9kdWxlIChtYXRjaGVzIHRoZSBjYWNoZSkKKworZ2l0IGxzLWZpbGVzIC1rIHNob3VsZCByZXBvcnQgdGhhdCBleGlzdGluZyBmaWxlc3lzdGVtIG9iamVjdHMKK3BhdGgwLyosIHBhdGgxLyosIHBhdGgyIGFuZCBwYXRoMyB0byBiZSBraWxsZWQuCisKK0Fsc28gZm9yIG1vZGlmaWNhdGlvbiB0ZXN0LCB0aGUgY2FjaGUgYW5kIHdvcmtpbmcgdHJlZSBoYXZlOgorCisgICAgcGF0aDcgICAgICAgLSBhbiBlbXB0eSBmaWxlLCBtb2RpZmllZCB0byBhIG5vbi1lbXB0eSBmaWxlLgorICAgIHBhdGg4ICAgICAgIC0gYSBub24tZW1wdHkgZmlsZSwgbW9kaWZpZWQgdG8gYW4gZW1wdHkgZmlsZS4KKyAgICBwYXRoOQktIGFuIGVtcHR5IGZpbGUsIGNhY2hlIGRpcnRpZWQuCisgICAgcGF0aDEwCS0gYSBub24tZW1wdHkgZmlsZSwgY2FjaGUgZGlydGllZC4KKworV2Ugc2hvdWxkIHJlcG9ydCBwYXRoMCwgcGF0aDEsIHBhdGgyL2ZpbGUyLCBwYXRoMy9maWxlMywgcGF0aDcgYW5kIHBhdGg4Cittb2RpZmllZCB3aXRob3V0IHJlcG9ydGluZyBwYXRoOSBhbmQgcGF0aDEwLiAgc3VibW9kMSBpcyBhbHNvIG1vZGlmaWVkLgorJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgdG8gYWRkIHZhcmlvdXMgcGF0aHMuJyAnCisJZGF0ZSA+cGF0aDAgJiYKKwl0ZXN0X2xuX3NfYWRkIHh5enp5IHBhdGgxICYmCisJbWtkaXIgcGF0aDIgcGF0aDMgcGF0aHggJiYKKwlkYXRlID5wYXRoMi9maWxlMiAmJgorCWRhdGUgPnBhdGgzL2ZpbGUzICYmCisJPnBhdGh4L2p1ICYmCisJOiA+cGF0aDcgJiYKKwlkYXRlID5wYXRoOCAmJgorCTogPnBhdGg5ICYmCisJZGF0ZSA+cGF0aDEwICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLSBwYXRoMCBwYXRoPy9maWxlPyBwYXRoeC9qdSBwYXRoNyBwYXRoOCBwYXRoOSBwYXRoMTAgJiYKKwlnaXQgaW5pdCBzdWJtb2QxICYmCisJZ2l0IC1DIHN1Ym1vZDEgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImVtcHR5IDEiICYmCisJZ2l0IGluaXQgc3VibW9kMiAmJgorCWdpdCAtQyBzdWJtb2QyIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJlbXB0eSAyIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgc3VibW9kWzEyXSAmJgorCSgKKwkJY2Qgc3VibW9kMSAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImVtcHR5IDEgKHVwZGF0ZWQpIgorCSkgJiYKKwlybSAtZnIgcGF0aD8JIyBsZWF2ZSBwYXRoMTAgYWxvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC1rIHRvIHNob3cga2lsbGVkIGZpbGVzLicgJworCWRhdGUgPnBhdGgyICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUworCXRoZW4KKwkJbG4gLXMgZnJvdHogcGF0aDMgJiYKKwkJbG4gLXMgbml0Zm9sIHBhdGg1CisJZWxzZQorCQlkYXRlID5wYXRoMyAmJgorCQlkYXRlID5wYXRoNQorCWZpICYmCisJbWtkaXIgLXAgcGF0aDAgcGF0aDEgcGF0aDYgcGF0aHgvanUgJiYKKwlkYXRlID5wYXRoMC9maWxlMCAmJgorCWRhdGUgPnBhdGgxL2ZpbGUxICYmCisJZGF0ZSA+cGF0aDYvZmlsZTYgJiYKKwlkYXRlID5wYXRoNyAmJgorCTogPnBhdGg4ICYmCisJOiA+cGF0aDkgJiYKKwl0b3VjaCBwYXRoMTAgJiYKKwk+cGF0aHgvanUvbmsgJiYKKwljYXQgPi5leHBlY3RlZCA8PC1cRU9GCisJcGF0aDAvZmlsZTAKKwlwYXRoMS9maWxlMQorCXBhdGgyCisJcGF0aDMKKwlwYXRoeC9qdS9uaworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLWsgb3V0cHV0ICh3L28gaWNhc2UpJyAnCisJZ2l0IGxzLWZpbGVzIC1rID4ub3V0cHV0ICYmCisJdGVzdF9jbXAgLmV4cGVjdGVkIC5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC1rIG91dHB1dCAody8gaWNhc2UpJyAnCisJZ2l0IC1jIGNvcmUuaWdub3JlY2FzZT10cnVlIGxzLWZpbGVzIC1rID4ub3V0cHV0ICYmCisJdGVzdF9jbXAgLmV4cGVjdGVkIC5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC1tIHRvIHNob3cgbW9kaWZpZWQgZmlsZXMuJyAnCisJZ2l0IGxzLWZpbGVzIC1tID4ub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIGdpdCBscy1maWxlcyAtbSBvdXRwdXQuJyAnCisJY2F0ID4uZXhwZWN0ZWQgPDwtXEVPRiAmJgorCXBhdGgwCisJcGF0aDEKKwlwYXRoMi9maWxlMgorCXBhdGgzL2ZpbGUzCisJcGF0aDcKKwlwYXRoOAorCXBhdGh4L2p1CisJc3VibW9kMQorCUVPRgorCXRlc3RfY21wIC5leHBlY3RlZCAub3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAxMS1jb21tb24tcHJlZml4ZXMtYW5kLWRpcmVjdG9yeS10cmF2ZXJzYWwuc2ggYi90L3QzMDExLWNvbW1vbi1wcmVmaXhlcy1hbmQtZGlyZWN0b3J5LXRyYXZlcnNhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZGE1YjJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzAxMS1jb21tb24tcHJlZml4ZXMtYW5kLWRpcmVjdG9yeS10cmF2ZXJzYWwuc2gKQEAgLTAsMCArMSwyMDkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaXJlY3RvcnkgdHJhdmVyc2FsIGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdpdGggY29tbW9uIHByZWZpeGVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBoZWxsbyAmJgorCisJPmVtcHR5ICYmCisJbWtkaXIgdW50cmFja2VkX2RpciAmJgorCT51bnRyYWNrZWRfZGlyL2VtcHR5ICYmCisJZ2l0IGluaXQgdW50cmFja2VkX3JlcG8gJiYKKwk+dW50cmFja2VkX3JlcG8vZW1wdHkgJiYKKworCWNhdCA8PC1FT0YgPi5naXRpZ25vcmUgJiYKKwlpZ25vcmVkCisJYW5faWdub3JlZF9kaXIvCisJRU9GCisJbWtkaXIgYW5faWdub3JlZF9kaXIgJiYKKwlta2RpciBhbl91bnRyYWNrZWRfZGlyICYmCisJPmFuX2lnbm9yZWRfZGlyL2lnbm9yZWQgJiYKKwk+YW5faWdub3JlZF9kaXIvdW50cmFja2VkICYmCisJPmFuX3VudHJhY2tlZF9kaXIvaWdub3JlZCAmJgorCT5hbl91bnRyYWNrZWRfZGlyL3VudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLW8gc2hvd3MgdGhlIHJpZ2h0IGVudHJpZXMnICcKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkuZ2l0aWdub3JlCisJYWN0dWFsCisJYW5faWdub3JlZF9kaXIvaWdub3JlZAorCWFuX2lnbm9yZWRfZGlyL3VudHJhY2tlZAorCWFuX3VudHJhY2tlZF9kaXIvaWdub3JlZAorCWFuX3VudHJhY2tlZF9kaXIvdW50cmFja2VkCisJZW1wdHkKKwlleHBlY3QKKwl1bnRyYWNrZWRfZGlyL2VtcHR5CisJdW50cmFja2VkX3JlcG8vCisJRU9GCisJZ2l0IGxzLWZpbGVzIC1vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtbyAtLWV4Y2x1ZGUtc3RhbmRhcmQgc2hvd3MgdGhlIHJpZ2h0IGVudHJpZXMnICcKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkuZ2l0aWdub3JlCisJYWN0dWFsCisJYW5fdW50cmFja2VkX2Rpci91bnRyYWNrZWQKKwllbXB0eQorCWV4cGVjdAorCXVudHJhY2tlZF9kaXIvZW1wdHkKKwl1bnRyYWNrZWRfcmVwby8KKwlFT0YKKwlnaXQgbHMtZmlsZXMgLW8gLS1leGNsdWRlLXN0YW5kYXJkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtbyB1bnRyYWNrZWRfZGlyIHJlY3Vyc2VzJyAnCisJZWNobyB1bnRyYWNrZWRfZGlyL2VtcHR5ID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLW8gdW50cmFja2VkX2RpciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLW8gdW50cmFja2VkX2Rpci8gcmVjdXJzZXMnICcKKwllY2hvIHVudHJhY2tlZF9kaXIvZW1wdHkgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyAtbyB1bnRyYWNrZWRfZGlyLyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLW8gLS1kaXJlY3RvcnkgdW50cmFja2VkX2RpciBkb2VzIG5vdCByZWN1cnNlJyAnCisJZWNobyB1bnRyYWNrZWRfZGlyLyA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1vIC0tZGlyZWN0b3J5IHVudHJhY2tlZF9kaXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC1vIC0tZGlyZWN0b3J5IHVudHJhY2tlZF9kaXIvIGRvZXMgbm90IHJlY3Vyc2UnICcKKwllY2hvIHVudHJhY2tlZF9kaXIvID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLW8gLS1kaXJlY3RvcnkgdW50cmFja2VkX2Rpci8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC1vIHVudHJhY2tlZF9yZXBvIGRvZXMgbm90IHJlY3Vyc2UnICcKKwllY2hvIHVudHJhY2tlZF9yZXBvLyA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1vIHVudHJhY2tlZF9yZXBvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtbyB1bnRyYWNrZWRfcmVwby8gZG9lcyBub3QgcmVjdXJzZScgJworCWVjaG8gdW50cmFja2VkX3JlcG8vID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLW8gdW50cmFja2VkX3JlcG8vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtbyB1bnRyYWNrZWRfZGlyIHVudHJhY2tlZF9yZXBvIHJlY3Vyc2VzIGludG8gdW50cmFja2VkX2RpciBvbmx5JyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJdW50cmFja2VkX2Rpci9lbXB0eQorCXVudHJhY2tlZF9yZXBvLworCUVPRgorCWdpdCBscy1maWxlcyAtbyB1bnRyYWNrZWRfZGlyIHVudHJhY2tlZF9yZXBvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtbyB1bnRyYWNrZWRfZGlyLyB1bnRyYWNrZWRfcmVwby8gcmVjdXJzZXMgaW50byB1bnRyYWNrZWRfZGlyIG9ubHknICcKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwl1bnRyYWNrZWRfZGlyL2VtcHR5CisJdW50cmFja2VkX3JlcG8vCisJRU9GCisJZ2l0IGxzLWZpbGVzIC1vIHVudHJhY2tlZF9kaXIvIHVudHJhY2tlZF9yZXBvLyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLW8gLS1kaXJlY3RvcnkgdW50cmFja2VkX2RpciB1bnRyYWNrZWRfcmVwbyBkb2VzIG5vdCByZWN1cnNlJyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJdW50cmFja2VkX2Rpci8KKwl1bnRyYWNrZWRfcmVwby8KKwlFT0YKKwlnaXQgbHMtZmlsZXMgLW8gLS1kaXJlY3RvcnkgdW50cmFja2VkX2RpciB1bnRyYWNrZWRfcmVwbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLW8gLS1kaXJlY3RvcnkgdW50cmFja2VkX2Rpci8gdW50cmFja2VkX3JlcG8vIGRvZXMgbm90IHJlY3Vyc2UnICcKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwl1bnRyYWNrZWRfZGlyLworCXVudHJhY2tlZF9yZXBvLworCUVPRgorCWdpdCBscy1maWxlcyAtbyAtLWRpcmVjdG9yeSB1bnRyYWNrZWRfZGlyLyB1bnRyYWNrZWRfcmVwby8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC1vIC5naXQgc2hvd3Mgbm90aGluZycgJworCWdpdCBscy1maWxlcyAtbyAuZ2l0ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtbyAuZ2l0LyBzaG93cyBub3RoaW5nJyAnCisJZ2l0IGxzLWZpbGVzIC1vIC5naXQvID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRlVOTllOQU1FUyAnZ2l0IGxzLWZpbGVzIC1vIHVudHJhY2tlZF8qIHJlY3Vyc2VzIGFwcHJvcHJpYXRlbHknICcKKwlta2RpciAidW50cmFja2VkXyoiICYmCisJPiJ1bnRyYWNrZWRfKi9lbXB0eSIgJiYKKworCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCXVudHJhY2tlZF8qL2VtcHR5CisJdW50cmFja2VkX2Rpci9lbXB0eQorCXVudHJhY2tlZF9yZXBvLworCUVPRgorCWdpdCBscy1maWxlcyAtbyAidW50cmFja2VkXyoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgSXQgdHVybnMgb3V0IGZpbGxfZGlyZWN0b3J5IHJldHVybnMgdGhlIHJpZ2h0IHBhdGhzLCBidXQgbHMtZmlsZXMnIHBvc3QtY2FsbAorIyBmaWx0ZXJpbmcgaW4gc2hvd19kaXJfZW50cnkoKSB2aWEgY2FsbGluZyBkaXJfcGF0aF9tYXRjaCgpIHdoaWNoIGVuZHMgdXAKKyMgaW4gZ2l0X2ZubWF0Y2goKSBoYXMgbG9naWMgZm9yIFBBVEhTUEVDX09ORVNUQVIgdGhhdCBhc3N1bWVzIHRoZSBwYXRoc3BlYworIyBtdXN0IG1hdGNoIHRoZSBmdWxsIHBhdGg7IGl0IGRvZXNuJ3QgY2hlY2sgaXQgZm9yIG1hdGNoaW5nIGEgbGVhZGluZworIyBkaXJlY3RvcnkuCit0ZXN0X2V4cGVjdF9mYWlsdXJlIEZVTk5ZTkFNRVMgJ2dpdCBscy1maWxlcyAtbyB1bnRyYWNrZWRfKi8gcmVjdXJzZXMgYXBwcm9wcmlhdGVseScgJworCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCXVudHJhY2tlZF8qL2VtcHR5CisJdW50cmFja2VkX2Rpci9lbXB0eQorCXVudHJhY2tlZF9yZXBvLworCUVPRgorCWdpdCBscy1maWxlcyAtbyAidW50cmFja2VkXyovIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZVTk5ZTkFNRVMgJ2dpdCBscy1maWxlcyAtbyAtLWRpcmVjdG9yeSB1bnRyYWNrZWRfKiBkb2VzIG5vdCByZWN1cnNlJyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJdW50cmFja2VkXyovCisJdW50cmFja2VkX2Rpci8KKwl1bnRyYWNrZWRfcmVwby8KKwlFT0YKKwlnaXQgbHMtZmlsZXMgLW8gLS1kaXJlY3RvcnkgInVudHJhY2tlZF8qIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZVTk5ZTkFNRVMgJ2dpdCBscy1maWxlcyAtbyAtLWRpcmVjdG9yeSB1bnRyYWNrZWRfKi8gZG9lcyBub3QgcmVjdXJzZScgJworCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCXVudHJhY2tlZF8qLworCXVudHJhY2tlZF9kaXIvCisJdW50cmFja2VkX3JlcG8vCisJRU9GCisJZ2l0IGxzLWZpbGVzIC1vIC0tZGlyZWN0b3J5ICJ1bnRyYWNrZWRfKi8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtbyBjb25zaXN0ZW50IGJldHdlZW4gb25lIG9yIHR3byBkaXJzJyAnCisJZ2l0IGxzLWZpbGVzIC1vIC0tZXhjbHVkZS1zdGFuZGFyZCBhbl9pZ25vcmVkX2Rpci8gYW5fdW50cmFja2VkX2Rpci8gPnRtcCAmJgorCSEgZ3JlcCBeYW5faWdub3JlZF9kaXIvIHRtcCA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1vIC0tZXhjbHVkZS1zdGFuZGFyZCBhbl9pZ25vcmVkX2Rpci8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBscy1maWxlcyBkb2Vzbid0IGhhdmUgYSB3YXkgdG8gcmVxdWVzdCBzaG93aW5nIGJvdGggdW50cmFja2VkIGFuZCBpZ25vcmVkCisjIGZpbGVzIGF0IHRoZSBzYW1lIHRpbWUsIHNvIHVzZSBgZ2l0IHN0YXR1cyAtLWlnbm9yZWRgCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3RhdHVzIC0taWdub3JlZCBzaG93cyBzYW1lIGZpbGVzIHVuZGVyIGRpciB3aXRoIG9yIHdpdGhvdXQgcGF0aHNwZWMnICcKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwk/PyBhbl91bnRyYWNrZWRfZGlyLworCSEhIGFuX3VudHJhY2tlZF9kaXIvaWdub3JlZAorCUVPRgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkID5vdXRwdXQgJiYKKwlncmVwIGFuX3VudHJhY2tlZF9kaXIgb3V0cHV0ID5leHBlY3QgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCBhbl91bnRyYWNrZWRfZGlyLyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMjAtbHMtZmlsZXMtZXJyb3ItdW5tYXRjaC5zaCBiL3QvdDMwMjAtbHMtZmlsZXMtZXJyb3ItdW5tYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMjRlNzNiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzAyMC1scy1maWxlcy1lcnJvci11bm1hdGNoLnNoCkBAIC0wLDAgKzEsMjggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgQ2FybCBELiBXb3J0aAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbHMtZmlsZXMgdGVzdCBmb3IgLS1lcnJvci11bm1hdGNoIG9wdGlvbgorCitUaGlzIHRlc3QgcnVucyBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkKK3JldHVybnMgYW4gZXJyb3Igd2hlbiBhIG5vbi1leGlzdGVudCBwYXRoIGlzIHByb3ZpZGVkIG9uIHRoZSBjb21tYW5kCitsaW5lLgorJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdG91Y2ggZm9vIGJhciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZm9vIGJhciAmJgorCWdpdCBjb21taXQgLW0gImFkZCBmb28gYmFyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBzaG91bGQgZmFpbCB3aXRoIHVubWF0Y2hlZCBwYXRoLicgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbyBiYXItZG9lcy1ub3QtbWF0Y2gnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIHNob3VsZCBzdWNjZWVkIHdpdGggbWF0Y2hlZCBwYXRocy4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBmb28gYmFyJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMzAtbWVyZ2UtcmVjdXJzaXZlLnNoIGIvdC90MzAzMC1tZXJnZS1yZWN1cnNpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDQ4ZDIxMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMzAtbWVyZ2UtcmVjdXJzaXZlLnNoCkBAIC0wLDAgKzEsNzcwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UtcmVjdXJzaXZlIGJhY2tlbmQgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDEnICcKKworCWVjaG8gaGVsbG8gPmEgJiYKKwlvMD0kKGdpdCBoYXNoLW9iamVjdCBhKSAmJgorCWNwIGEgYiAmJgorCWNwIGEgYyAmJgorCW1rZGlyIGQgJiYKKwljcCBhIGQvZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGFkZCBhIGIgYyBkL2UgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwljMD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwlnaXQgYnJhbmNoIGRmLTEgJiYKKwlnaXQgYnJhbmNoIGRmLTIgJiYKKwlnaXQgYnJhbmNoIGRmLTMgJiYKKwlnaXQgYnJhbmNoIHJlbW92ZSAmJgorCWdpdCBicmFuY2ggc3VibW9kICYmCisJZ2l0IGJyYW5jaCBjb3B5ICYmCisJZ2l0IGJyYW5jaCByZW5hbWUgJiYKKwlnaXQgYnJhbmNoIHJlbmFtZS1sbiAmJgorCisJZWNobyBoZWxsbyA+PmEgJiYKKwljcCBhIGQvZSAmJgorCW8xPSQoZ2l0IGhhc2gtb2JqZWN0IGEpICYmCisKKwlnaXQgYWRkIGEgZC9lICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJtYXN0ZXIgbW9kaWZpZXMgYSBhbmQgZC9lIiAmJgorCWMxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCAmJiBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzEJYSIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzEJZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDInICcKKworCXJtIC1yZiBbYWJjZF0gJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCAmJiBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwllY2hvIGdvb2RieWUgPj5hICYmCisJbzI9JChnaXQgaGFzaC1vYmplY3QgYSkgJiYKKworCWdpdCBhZGQgYSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic2lkZSBtb2RpZmllcyBhIiAmJgorCWMyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCAmJiBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzIJYSIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG8yIDAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDMnICcKKworCXJtIC1yZiBbYWJjZF0gJiYKKwlnaXQgY2hlY2tvdXQgZGYtMSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCAmJiBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlybSAtZiBiICYmIG1rZGlyIGIgJiYgZWNobyBkZi0xID5iL2MgJiYgZ2l0IGFkZCBiL2MgJiYKKwlvMz0kKGdpdCBoYXNoLW9iamVjdCBiL2MpICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJkZi0xIG1ha2VzIGIvYyIgJiYKKwljMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgJiYgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWEiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMwliL2MiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMyAwCWIvYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgNCcgJworCisJcm0gLXJmIFthYmNkXSAmJgorCWdpdCBjaGVja291dCBkZi0yICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEICYmIGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlhIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCXJtIC1mIGEgJiYgbWtkaXIgYSAmJiBlY2hvIGRmLTIgPmEvYyAmJiBnaXQgYWRkIGEvYyAmJgorCW80PSQoZ2l0IGhhc2gtb2JqZWN0IGEvYykgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImRmLTIgbWFrZXMgYS9jIiAmJgorCWM0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCAmJiBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzQJYS9jIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiICYmCisJCWVjaG8gIjEwMDY0NCAkbzQgMAlhL2MiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCA1JyAnCisKKwlybSAtcmYgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IHJlbW92ZSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCAmJiBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlybSAtZiBiICYmCisJZWNobyByZW1vdmUtY29uZmxpY3QgPmEgJiYKKworCWdpdCBhZGQgYSAmJgorCWdpdCBybSBiICYmCisJbzU9JChnaXQgaGFzaC1vYmplY3QgYSkgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInJlbW92ZSByZW1vdmVzIGIgYW5kIG1vZGlmaWVzIGEiICYmCisJYzU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEICYmIGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvNQlhIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWQvZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvNSAwCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgNicgJworCisJcm0gLXJmIFthYmNkXSAmJgorCWdpdCBjaGVja291dCBkZi0zICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEICYmIGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlhIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCXJtIC1mciBkICYmIGVjaG8gZGYtMyA+ZCAmJiBnaXQgYWRkIGQgJiYKKwlvNj0kKGdpdCBoYXNoLW9iamVjdCBkKSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZGYtMyBtYWtlcyBkIiAmJgorCWM2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCAmJiBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzYJZCIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvNiAwCWQiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgNycgJworCisJZ2l0IGNoZWNrb3V0IHN1Ym1vZCAmJgorCWdpdCBybSBkL2UgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJyZW1vdmUgZC9lIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICRjMSBkICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAibWFrZSBkLyBhIHN1Ym1vZHVsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgOCcgJworCWdpdCBjaGVja291dCByZW5hbWUgJiYKKwlnaXQgbXYgYSBlICYmCisJZ2l0IGFkZCBlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIGEtPmUiICYmCisJYzc9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0IHJlbmFtZS1sbiAmJgorCWdpdCBtdiBhIGUgJiYKKwl0ZXN0X2xuX3NfYWRkIGUgYSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInJlbmFtZSBhLT5lLCBzeW1saW5rIGEtPmUiICYmCisJb2xuPSQocHJpbnRmIGUgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgOScgJworCWdpdCBjaGVja291dCBjb3B5ICYmCisJY3AgYSBlICYmCisJZ2l0IGFkZCBlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiY29weSBhLT5lIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgc2ltcGxlJyAnCisKKwlybSAtZnIgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzIiICYmCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAiJGMwIiAtLSAiJGMyIiAiJGMxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgcmVzdWx0JyAnCisKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMCAxCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzIgMglhIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDMJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBpZiB0aGUgaW5kZXggaGFzIHVucmVzb2x2ZWQgZW50cmllcycgJworCisJcm0gLWZyIFthYmNkXSAmJgorCWdpdCBjaGVja291dCAtZiAiJGMxIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlICIkYzUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlICIkYzUiIDI+IG91dCAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzIiBvdXQgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlICIkYzUiIDI+IG91dCAmJgorCXRlc3RfaTE4bmdyZXAgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSIgb3V0ICYmCisJcm0gLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlICIkYzUiIDI+IG91dCAmJgorCXRlc3RfaTE4bmdyZXAgIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOiIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSByZW1vdmUgY29uZmxpY3QnICcKKworCXJtIC1mciBbYWJjZF0gJiYKKwlnaXQgY2hlY2tvdXQgLWYgIiRjMSIgJiYKKworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzEiICIkYzUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSByZW1vdmUgY29uZmxpY3QnICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8wIDEJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAyCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzUgMwlhIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2Ygc2ltcGxlJyAnCisJcm0gLWZyIFthYmNkXSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgIiRjMSIgJiYKKworCWdpdCBtZXJnZS1yZWN1cnNpdmUgIiRjMCIgLS0gIiRjMSIgIiRjMyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIHJlc3VsdCcgJworCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhIiAmJgorCQllY2hvICIxMDA2NDQgJG8zIDAJYi9jIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QnICcKKworCXJtIC1mciBbYWJjZF0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzEiICYmCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAiJGMwIiAtLSAiJGMxIiAiJGM0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgZC9mIGNvbmZsaWN0IHJlc3VsdCcgJworCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzAgMQlhIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDIJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvNCAwCWEvYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIGQvZiBjb25mbGljdCB0aGUgb3RoZXIgd2F5JyAnCisKKwlybSAtZnIgW2FiY2RdICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtZiAiJGM0IiAmJgorCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBtZXJnZS1yZWN1cnNpdmUgIiRjMCIgLS0gIiRjNCIgIiRjMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIGQvZiBjb25mbGljdCByZXN1bHQgdGhlIG90aGVyIHdheScgJworCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzAgMQlhIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDMJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvNCAwCWEvYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIGQvZiBjb25mbGljdCcgJworCisJcm0gLWZyIFthYmNkXSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgIiRjMSIgJiYKKworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzEiICIkYzYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QgcmVzdWx0JyAnCisKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvNiAzCWQiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMQlkL2UiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMglkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgZC9mIGNvbmZsaWN0JyAnCisKKwlybSAtZnIgW2FiY2RdICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtZiAiJGM2IiAmJgorCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBtZXJnZS1yZWN1cnNpdmUgIiRjMCIgLS0gIiRjNiIgIiRjMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIGQvZiBjb25mbGljdCByZXN1bHQnICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8xIDAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG82IDIJZCIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAxCWQvZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAzCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RpciBpbiB3b3JraW5nIHRyZWUgd2l0aCBzeW1saW5rIGFuY2VzdG9yIGRvZXMgbm90IHByb2R1Y2UgZC9mIGNvbmZsaWN0JyAnCisJZ2l0IGluaXQgc3ltICYmCisJKAorCQljZCBzeW0gJiYKKwkJbG4gLXMgLiBmb28gJiYKKwkJbWtkaXIgYmFyICYmCisJCT5iYXIvZmlsZSAmJgorCQlnaXQgYWRkIGZvbyBiYXIvZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tICJmb28gc3ltbGluayIgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMSAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImVtcHR5IGNvbW1pdCIgJiYKKworCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBybSBmb28gJiYKKwkJbWtkaXIgZm9vICYmCisJCT5mb28vYmFyICYmCisJCWdpdCBhZGQgZm9vL2JhciAmJgorCQlnaXQgY29tbWl0IC1tICJyZXBsYWNlIGZvbyBzeW1saW5rIHdpdGggcmVhbCBmb28gZGlyIGFuZCBmb28vYmFyIGZpbGUiICYmCisKKwkJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKworCQlnaXQgY2hlcnJ5LXBpY2sgbWFzdGVyICYmCisJCXRlc3RfcGF0aF9pc19kaXIgZm9vICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZvby9iYXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IGFuZCAzLXdheSBtZXJnZScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAiJGMyIiAmJgorCWdpdCByZWFkLXRyZWUgLW0gIiRjMCIgIiRjMiIgIiRjMSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCBhbmQgYmluZCBtZXJnZScgJworCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgcmVhZC10cmVlIC0tcHJlZml4PU0vIG1hc3RlciAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8xIDAJTS9hIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJTS9iIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJTS9jIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJTS9kL2UiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9YTEvIG1hc3RlciAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8xIDAJTS9hIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJTS9iIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJTS9jIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJTS9kL2UiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJYTEvYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWExL2IiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhMS9jIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJYTEvZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9ei8gbWFzdGVyICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlNL2EiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlNL2IiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlNL2MiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlNL2QvZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhMS9hIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYTEvYiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWExL2MiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhMS9kL2UiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCXovYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCXovYiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCXovYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCXovZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIHcvIGVtcHR5IHdvcmsgdHJlZSAtIG91cnMgaGFzIHJlbmFtZScgJworCSgKKwkJR0lUX1dPUktfVFJFRT0iJFBXRC9vdXJzLWhhcy1yZW5hbWUtd29yayIgJiYKKwkJZXhwb3J0IEdJVF9XT1JLX1RSRUUgJiYKKwkJR0lUX0lOREVYX0ZJTEU9IiRQV0Qvb3Vycy1oYXMtcmVuYW1lLWluZGV4IiAmJgorCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKKwkJbWtkaXIgIiRHSVRfV09SS19UUkVFIiAmJgorCQlnaXQgcmVhZC10cmVlIC1pIC1tICRjNyAyPmFjdHVhbC1lcnIgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC1lcnIgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1taXNzaW5nIC0tcmVmcmVzaCAyPmFjdHVhbC1lcnIgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC1lcnIgJiYKKwkJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAkYzAgLS0gJGM3ICRjMyAyPmFjdHVhbC1lcnIgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC1lcnIgJiYKKwkJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwtZmlsZXMgMj5hY3R1YWwtZXJyICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwtZXJyCisJKSAmJgorCWNhdCA+ZXhwZWN0ZWQtZmlsZXMgPDwtRU9GICYmCisJMTAwNjQ0ICRvMyAwCWIvYworCTEwMDY0NCAkbzAgMAljCisJMTAwNjQ0ICRvMCAwCWQvZQorCTEwMDY0NCAkbzAgMAllCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQtZmlsZXMgYWN0dWFsLWZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSB3LyBlbXB0eSB3b3JrIHRyZWUgLSB0aGVpcnMgaGFzIHJlbmFtZScgJworCSgKKwkJR0lUX1dPUktfVFJFRT0iJFBXRC90aGVpcnMtaGFzLXJlbmFtZS13b3JrIiAmJgorCQlleHBvcnQgR0lUX1dPUktfVFJFRSAmJgorCQlHSVRfSU5ERVhfRklMRT0iJFBXRC90aGVpcnMtaGFzLXJlbmFtZS1pbmRleCIgJiYKKwkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJCW1rZGlyICIkR0lUX1dPUktfVFJFRSIgJiYKKwkJZ2l0IHJlYWQtdHJlZSAtaSAtbSAkYzMgMj5hY3R1YWwtZXJyICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwtZXJyICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2ggMj5hY3R1YWwtZXJyICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwtZXJyICYmCisJCWdpdCBtZXJnZS1yZWN1cnNpdmUgJGMwIC0tICRjMyAkYzcgMj5hY3R1YWwtZXJyICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwtZXJyICYmCisJCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsLWZpbGVzIDI+YWN0dWFsLWVyciAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLWVycgorCSkgJiYKKwljYXQgPmV4cGVjdGVkLWZpbGVzIDw8LUVPRiAmJgorCTEwMDY0NCAkbzMgMAliL2MKKwkxMDA2NDQgJG8wIDAJYworCTEwMDY0NCAkbzAgMAlkL2UKKwkxMDA2NDQgJG8wIDAJZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkLWZpbGVzIGFjdHVhbC1maWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSByZW1vdmVzIGVtcHR5IGRpcmVjdG9yaWVzJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBybSAmJgorCWdpdCBybSBkL2UgJiYKKwlnaXQgY29tbWl0IC1tcmVtb3ZlZC1kL2UgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBybSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIHNpbXBsZSB3L3N1Ym1vZHVsZScgJworCisJZ2l0IGNoZWNrb3V0IHN1Ym1vZCAmJgorCWdpdCBtZXJnZSByZW1vdmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIHNpbXBsZSB3L3N1Ym1vZHVsZSByZXN1bHQnICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG81IDAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiICYmCisJCWVjaG8gIjE2MDAwMCAkYzEgMAlkIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBjb3B5IHZzLiByZW5hbWUnICcKKwlnaXQgY2hlY2tvdXQgLWYgY29weSAmJgorCWdpdCBtZXJnZSByZW5hbWUgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgJiYgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdtZXJnZS1yZWN1cnNpdmUgcmVuYW1lIHZzLiByZW5hbWUvc3ltbGluaycgJworCisJZ2l0IGNoZWNrb3V0IC1mIHJlbmFtZSAmJgorCWdpdCBtZXJnZSByZW5hbWUtbG4gJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgJiYgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTIwMDAwIGJsb2IgJG9sbglhIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAllIiAmJgorCQllY2hvICIxMjAwMDAgJG9sbiAwCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWUiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2luZyB3aXRoIHRyaXBsZSByZW5hbWUgYWNyb3NzIEQvRiBjb25mbGljdCcgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCWdpdCBjaGVja291dCAtYiBtYWluICYmCisJZ2l0IHJtIC1yZiAuICYmCisKKwllY2hvICJqdXN0IGEgZmlsZSIgPnN1YjEgJiYKKwlta2RpciAtcCBzdWIyICYmCisJZWNobyBjb250ZW50MSA+c3ViMi9maWxlMSAmJgorCWVjaG8gY29udGVudDIgPnN1YjIvZmlsZTIgJiYKKwllY2hvIGNvbnRlbnQzID5zdWIyL2ZpbGUzICYmCisJbWtkaXIgc2ltcGxlICYmCisJZWNobyBiYXNlID5zaW1wbGUvYmFyICYmCisJZ2l0IGFkZCAtQSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyICYmCisJZWNobyBtb3JlID4+c2ltcGxlL2JhciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gY2hhbmdlc2ltcGxlZmlsZSAmJgorCisJZ2l0IGNoZWNrb3V0IG1haW4gJiYKKwlnaXQgcm0gc3ViMSAmJgorCWdpdCBtdiBzdWIyIHN1YjEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGNoYW5nZWZpbGV0b2RpciAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIG90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSByZW1lbWJlcnMgdGhlIG5hbWVzIG9mIGFsbCBiYXNlIHRyZWVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisKKwkjIG1ha2UgdGhlIGluZGV4IG1hdGNoICRjMSBzbyB0aGF0IG1lcmdlLXJlY3Vyc2l2ZSBiZWxvdyBkb2VzIG5vdAorCSMgZmFpbCBlYXJseQorCWdpdCBkaWZmIC0tYmluYXJ5IEhFQUQgJGMxIC0tIHwgZ2l0IGFwcGx5IC0tY2FjaGVkICYmCisKKwkjIG1vcmUgdHJlZXMgdGhhbiBzdGF0aWMgc2xvdHMgdXNlZCBieSBvaWRfdG9faGV4KCkKKwlmb3IgY29tbWl0IGluICRjMCAkYzIgJGM0ICRjNSAkYzYgJGM3CisJZG8KKwkJZ2l0IHJldi1wYXJzZSAiJGNvbW1pdF57dHJlZX0iCisJZG9uZSA+dHJlZXMgJiYKKworCSMgaWdub3JlIHRoZSByZXR1cm4gY29kZTsgaXQgb25seSBmYWlscyBiZWNhdXNlIHRoZSBpbnB1dCBpcyB3ZWlyZC4uLgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS52ZXJib3NpdHk9NSBtZXJnZS1yZWN1cnNpdmUgJChjYXQgdHJlZXMpIC0tICRjMSAkYzMgPm91dCAmJgorCisJIyAuLi5idXQgbWFrZSBzdXJlIGl0IGZhaWxzIGluIHRoZSBleHBlY3RlZCB3YXkKKwl0ZXN0X2kxOG5ncmVwIENPTkZMSUNULipyZW5hbWUvcmVuYW1lIG91dCAmJgorCisJIyBtZXJnZS1yZWN1cnNpdmUgcHJpbnRzIGluIHJldmVyc2Ugb3JkZXIsIGJ1dCB3ZSBkbyBub3QgY2FyZQorCXNvcnQgPHRyZWVzID5leHBlY3QgJiYKKwlzZWQgLW4gInMvXnZpcnR1YWwgLy9wIiBvdXQgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBpbnRlcm5hbCBtZXJnZSByZXNvbHZlcyB0byB0aGUgc2FtZW5lc3MnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKworCSMgV2UgYXJlIGdvaW5nIHRvIGNyZWF0ZSBhIGhpc3RvcnkgbGVhZGluZyB0byB0d28gY3Jpc3MtY3Jvc3MKKwkjIGJyYW5jaGVzIEEgYW5kIEIuICBUaGUgY29tbW9uIGFuY2VzdG9yIGF0IHRoZSBib3R0b20sIE8wLAorCSMgaGFzIHR3byBjaGlsZCBjb21taXRzIE8xIGFuZCBPMiwgYm90aCBvZiB3aGljaCB3aWxsIGJlIG1lcmdlCisJIyBiYXNlIGJldHdlZW4gQSBhbmQgQiwgbGlrZSBzbzoKKwkjCisJIyAgICAgICBPMS0tLUEKKwkjICAgICAgLyAgXCAvCisJIyAgICBPMCAgICAuCisJIyAgICAgIFwgIC8gXAorCSMgICAgICAgTzItLS1CCisJIworCSMgVGhlIHJlY2VudGx5IGFkZGVkICJjaGVjayB0byBzZWUgaWYgdGhlIGluZGV4IGlzIGRpZmZlcmVudCBmcm9tCisJIyB0aGUgdHJlZSBpbnRvIHdoaWNoIHNvbWV0aGluZyBlbHNlIGlzIGdldHRpbmcgbWVyZ2VkIiBjaGVjayBtdXN0CisJIyBOT1Qga2ljayBpbiB3aGVuIGFuIGlubmVyIG1lcmdlIGJldHdlZW4gTzEgYW5kIE8yIGlzIG1hZGUuICBCb3RoCisJIyBPMSBhbmQgTzIgaGFwcGVuIHRvIGhhdmUgdGhlIHNhbWUgdHJlZSBhcyBPMCBpbiB0aGlzIHRlc3QgdG8KKwkjIHRyaWdnZXIgdGhlIGJ1Zy0tLXdoZXRoZXIgdGhlIGlubmVyIG1lcmdlIGlzIG1hZGUgYnkgbWVyZ2luZyBPMgorCSMgaW50byBPMSBvciBPMSBpbnRvIE8yLCB0aGVpciBjb21tb24gYW5jZXN0b3IgTzAgYW5kIHRoZSBicmFuY2gKKwkjIGJlaW5nIG1lcmdlZCBoYXZlIHRoZSBzYW1lIHRyZWUuICBXZSBzaG91bGQgbm90IHRyaWdnZXIgdGhlICJpcworCSMgdGhlIGluZGV4IGRpcnR5PyIgY2hlY2sgaW4gdGhpcyBjYXNlLgorCisJZWNobyAiemVybyIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJPMCIgJiYKKwlPMD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiTzEiICYmCisJTzE9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICRPMCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiTzIiICYmCisJTzI9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyAkTzEgJiYKKwlCPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCAkTzEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyAkTzIgJiYKKwlBPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJZ2l0IG1lcmdlICRCCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAzMS1tZXJnZS1jcmlzY3Jvc3Muc2ggYi90L3QzMDMxLW1lcmdlLWNyaXNjcm9zcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zODI0NzU2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzAzMS1tZXJnZS1jcmlzY3Jvc3Muc2gKQEAgLTAsMCArMSw5NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlLXJlY3Vyc2l2ZSBiYWNrZW5kIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjICAgICAgICAgQSAgICAgIDwtIGNyZWF0ZSBzb21lIGZpbGVzCisjICAgICAgICAvIFwKKyMgICAgICAgQiAgIEMgICAgPC0gY2F1c2UgcmVuYW1lL2RlbGV0ZSBjb25mbGljdHMgYmV0d2VlbiBCIGFuZCBDCisjICAgICAgLyAgICAgXAorIyAgICAgfFwgICAgIC98CisjICAgICB8IEQgICBFIHwKKyMgICAgIHwgIFwgLyAgfAorIyAgICAgfCAgIFggICB8CisjICAgICB8ICAvIFwgIHwKKyMgICAgIHwgLyAgIFwgfAorIyAgICAgfC8gICAgIFx8CisjICAgICBGICAgICAgIEcgIDwtIG1lcmdlIEUgaW50byBCLCBEIGludG8gQworIyAgICAgIFwgICAgIC8KKyMgICAgICAgXCAgIC8KKyMgICAgICAgIFwgLworIyAgICAgICAgIEggICAgICA8LSByZWN1cnNpdmUgbWVyZ2UgY3Jhc2hlcworIworCisjIGluaXRpYWxpemUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBjcmlzcy1jcm9zcyBoaXN0b3J5JyAnCisJbWtkaXIgZGF0YSAmJgorCisJIyBjcmVhdGUgYSBidW5jaCBvZiBmaWxlcworCW49MSAmJgorCXdoaWxlIHRlc3QgJG4gLWxlIDEwCisJZG8KKwkJZWNobyAkbiA+IGRhdGEvJG4gJiYKKwkJbj0kKCgkbisxKSkgfHwKKwkJcmV0dXJuIDEKKwlkb25lICYmCisKKwkjIGNoZWNrIHRoZW0gaW4KKwlnaXQgYWRkIGRhdGEgJiYKKwlnaXQgY29tbWl0IC1tIEEgJiYKKwlnaXQgYnJhbmNoIEEgJiYKKworCSMgYSBmaWxlIGluIG9uZSBicmFuY2gKKwlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJZ2l0IHJtIGRhdGEvOSAmJgorCWdpdCBhZGQgZGF0YSAmJgorCWdpdCBjb21taXQgLW0gQiAmJgorCisJIyB3aXRoIGEgYnJhbmNoIG9mZiBvZiBpdAorCWdpdCBicmFuY2ggRCAmJgorCisJIyBwdXQgc29tZSBjb21taXRzIG9uIEQKKwlnaXQgY2hlY2tvdXQgRCAmJgorCWVjaG8gdGVzdEQgPiBkYXRhL3Rlc3REICYmCisJZ2l0IGFkZCBkYXRhICYmCisJZ2l0IGNvbW1pdCAtbSBEICYmCisKKwkjIGJhY2sgdXAgdG8gdGhlIHRvcCwgY3JlYXRlIGFub3RoZXIgYnJhbmNoIGFuZCBjYXVzZQorCSMgYSByZW5hbWUgY29uZmxpY3Qgd2l0aCB0aGUgZmlsZSB3ZSBkZWxldGVkIGVhcmxpZXIKKwlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJZ2l0IG12IGRhdGEvOSBkYXRhL25ldy05ICYmCisJZ2l0IGFkZCBkYXRhICYmCisJZ2l0IGNvbW1pdCAtbSBDICYmCisKKwkjIHdpdGggYSBicmFuY2ggb2ZmIG9mIGl0CisJZ2l0IGJyYW5jaCBFICYmCisKKwkjIHB1dCBhIGNvbW1pdCBvbiBFCisJZ2l0IGNoZWNrb3V0IEUgJiYKKwllY2hvIHRlc3RFID4gZGF0YS90ZXN0RSAmJgorCWdpdCBhZGQgZGF0YSAmJgorCWdpdCBjb21taXQgLW0gRSAmJgorCisJIyBub3csIG1lcmdlIEUgaW50byBCCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRSAmJgorCSMgZm9yY2UtcmVzb2x2ZQorCWdpdCBhZGQgZGF0YSAmJgorCWdpdCBjb21taXQgLW0gRiAmJgorCWdpdCBicmFuY2ggRiAmJgorCisJIyBhbmQgbWVyZ2UgRCBpbnRvIEMKKwlnaXQgY2hlY2tvdXQgQyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBEICYmCisJIyBmb3JjZS1yZXNvbHZlCisJZ2l0IGFkZCBkYXRhICYmCisJZ2l0IGNvbW1pdCAtbSBHICYmCisJZ2l0IGJyYW5jaCBHCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY3Vyc2l2ZSBtZXJnZSBiZXR3ZWVuIEYgYW5kIEcgZG9lcyBub3QgY2F1c2Ugc2VnZmF1bHQnICcKKwlnaXQgbWVyZ2UgRgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMzItbWVyZ2UtcmVjdXJzaXZlLXNwYWNlLW9wdGlvbnMuc2ggYi90L3QzMDMyLW1lcmdlLXJlY3Vyc2l2ZS1zcGFjZS1vcHRpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1NjE4MGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDMyLW1lcmdlLXJlY3Vyc2l2ZS1zcGFjZS1vcHRpb25zLnNoCkBAIC0wLDAgKzEsMjA3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UtcmVjdXJzaXZlIHNwYWNlIG9wdGlvbnMKKworKiBbbWFzdGVyXSBDbGFyaWZ5CisgISBbcmVtb3RlXSBSZW1vdmUgY3J1ZnQKKy0tCisgKyBbcmVtb3RlXSBSZW1vdmUgY3J1ZnQKKyogIFttYXN0ZXJdIENsYXJpZnkKKyorIFtyZW1vdGVeXSBJbml0aWFsIHJldmlzaW9uCisqICAgb2sgMTogc2V0dXAKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfaGF2ZV9wcmVyZXEgU0VEX1NUUklQU19DUiAmJiBTRURfT1BUSU9OUz0tYgoraWYgdGVzdF9oYXZlX3ByZXJlcSBHUkVQX1NUUklQU19DUgordGhlbgorCUdSRVBfT1BUSU9OUz0tVQorCWV4cG9ydCBHUkVQX09QVElPTlMKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY29uZmxpY3RfaHVua3MgKCkgeworCQlzZWQgJFNFRF9PUFRJT05TIC1uIC1lICIKKwkJCS9ePDw8PC8gYiBjb25mbGljdAorCQkJYgorCQkJOiBjb25mbGljdAorCQkJcAorCQkJL14+Pj4+LyBiCisJCQluCisJCQliIGNvbmZsaWN0CisJCSIgIiRAIgorCX0gJiYKKworCWNhdCA8PC1cRU9GID50ZXh0LnR4dCAmJgorCSAgICBIb3BlLCBoZSBzYXlzLCBjaGVyaXNoZXMgdGhlIHNvdWwgb2YgaGltIHdobyBsaXZlcyBpbgorCSAgICBqdXN0aWNlIGFuZCBob2xpbmVzcyBhbmQgaXMgdGhlIG51cnNlIG9mIGhpcyBhZ2UgYW5kIHRoZQorCSAgICBjb21wYW5pb24gb2YgaGlzIGpvdXJuZXk7LS1ob3BlIHdoaWNoIGlzIG1pZ2h0aWVzdCB0byBzd2F5CisJICAgIHRoZSByZXN0bGVzcyBzb3VsIG9mIG1hbi4KKworCUhvdyBhZG1pcmFibGUgYXJlIGhpcyB3b3JkcyEgIEFuZCB0aGUgZ3JlYXQgYmxlc3Npbmcgb2YgcmljaGVzLCBJIGRvCisJbm90IHNheSB0byBldmVyeSBtYW4sIGJ1dCB0byBhIGdvb2QgbWFuLCBpcywgdGhhdCBoZSBoYXMgaGFkIG5vCisJb2NjYXNpb24gdG8gZGVjZWl2ZSBvciB0byBkZWZyYXVkIG90aGVycywgZWl0aGVyIGludGVudGlvbmFsbHkgb3IKKwl1bmludGVudGlvbmFsbHk7IGFuZCB3aGVuIGhlIGRlcGFydHMgdG8gdGhlIHdvcmxkIGJlbG93IGhlIGlzIG5vdCBpbgorCWFueSBhcHByZWhlbnNpb24gYWJvdXQgb2ZmZXJpbmdzIGR1ZSB0byB0aGUgZ29kcyBvciBkZWJ0cyB3aGljaCBoZSBvd2VzCisJdG8gbWVuLiAgTm93IHRvIHRoaXMgcGVhY2Ugb2YgbWluZCB0aGUgcG9zc2Vzc2lvbiBvZiB3ZWFsdGggZ3JlYXRseQorCWNvbnRyaWJ1dGVzOyBhbmQgdGhlcmVmb3JlIEkgc2F5LCB0aGF0LCBzZXR0aW5nIG9uZSB0aGluZyBhZ2FpbnN0CisJYW5vdGhlciwgb2YgdGhlIG1hbnkgYWR2YW50YWdlcyB3aGljaCB3ZWFsdGggaGFzIHRvIGdpdmUsIHRvIGEgbWFuIG9mCisJc2Vuc2UgdGhpcyBpcyBpbiBteSBvcGluaW9uIHRoZSBncmVhdGVzdC4KKworCVdlbGwgc2FpZCwgQ2VwaGFsdXMsIEkgcmVwbGllZDsgYnV0IGFzIGNvbmNlcm5pbmcganVzdGljZSwgd2hhdCBpcworCWl0Py0tdG8gc3BlYWsgdGhlIHRydXRoIGFuZCB0byBwYXkgeW91ciBkZWJ0cy0tbm8gbW9yZSB0aGFuIHRoaXM/ICBBbmQKKwlldmVuIHRvIHRoaXMgYXJlIHRoZXJlIG5vdCBleGNlcHRpb25zPyAgU3VwcG9zZSB0aGF0IGEgZnJpZW5kIHdoZW4gaW4KKwloaXMgcmlnaHQgbWluZCBoYXMgZGVwb3NpdGVkIGFybXMgd2l0aCBtZSBhbmQgaGUgYXNrcyBmb3IgdGhlbSB3aGVuIGhlCisJaXMgbm90IGluIGhpcyByaWdodCBtaW5kLCBvdWdodCBJIHRvIGdpdmUgdGhlbSBiYWNrIHRvIGhpbT8gIE5vIG9uZQorCXdvdWxkIHNheSB0aGF0IEkgb3VnaHQgb3IgdGhhdCBJIHNob3VsZCBiZSByaWdodCBpbiBkb2luZyBzbywgYW55IG1vcmUKKwl0aGFuIHRoZXkgd291bGQgc2F5IHRoYXQgSSBvdWdodCBhbHdheXMgdG8gc3BlYWsgdGhlIHRydXRoIHRvIG9uZSB3aG8KKwlpcyBpbiBoaXMgY29uZGl0aW9uLgorCisJWW91IGFyZSBxdWl0ZSByaWdodCwgaGUgcmVwbGllZC4KKworCUJ1dCB0aGVuLCBJIHNhaWQsIHNwZWFraW5nIHRoZSB0cnV0aCBhbmQgcGF5aW5nIHlvdXIgZGVidHMgaXMgbm90IGEKKwljb3JyZWN0IGRlZmluaXRpb24gb2YganVzdGljZS4KKworCUNFUEhBTFVTIC0gU09DUkFURVMgLSBQT0xFTUFSQ0hVUworCisJUXVpdGUgY29ycmVjdCwgU29jcmF0ZXMsIGlmIFNpbW9uaWRlcyBpcyB0byBiZSBiZWxpZXZlZCwgc2FpZAorCVBvbGVtYXJjaHVzIGludGVycG9zaW5nLgorCisJSSBmZWFyLCBzYWlkIENlcGhhbHVzLCB0aGF0IEkgbXVzdCBnbyBub3csIGZvciBJIGhhdmUgdG8gbG9vayBhZnRlciB0aGUKKwlzYWNyaWZpY2VzLCBhbmQgSSBoYW5kIG92ZXIgdGhlIGFyZ3VtZW50IHRvIFBvbGVtYXJjaHVzIGFuZCB0aGUgY29tcGFueS4KKwlFT0YKKwlnaXQgYWRkIHRleHQudHh0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCByZXZpc2lvbiIgJiYKKworCWdpdCBjaGVja291dCAtYiByZW1vdGUgJiYKKwlzZWQgLWUgIgorCQkJcy9cLiAgL1wuIC9nCisJCQlzL1s/XSAgLz8gL2cKKwkJCXMvICAgIC8JL2cKKwkJCXMvLS0vLS0tL2cKKwkJCXMvYnV0IGFzIGNvbmNlcm5pbmcvYnV0IGFzIGNvbiBjZXJuaW5nLworCQkJL0NFUEhBTFVTIC0gU09DUkFURVMgLSBQT0xFTUFSQ0hVUy8gZAorCQkiIHRleHQudHh0ID50ZXh0LnR4dCsgJiYKKwltdiB0ZXh0LnR4dCsgdGV4dC50eHQgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJSZW1vdmUgY3J1ZnQiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJc2VkIC1lICIKKwkJCXMvXChub3QgaW4gaGlzIHJpZ2h0IG1pbmRcKSxcKC4qXCkvXDE7XDJRLworCQkJcy9RdWl0ZSBjb3JyZWN0XCguKlwpL0l0IGlzIHRvbyBjb3JyZWN0XDFRLworCQkJcy91bmludGVudGlvbmFsbHkvdW4gaW50ZW50aW9uYWxseS8KKwkJCS91biBpbnRlbnRpb25hbGx5LyBzLyQvUS8KKwkJCXMvUG9sZW1hcmNodXMgaW50ZXJwb3NpbmcuL1BvbGVtYXJjaHVzLCBpbnRlcnBvc2luZy5RLworCQkJL2p1c3RpY2UgYW5kIGhvbGluZXNzLyBzLyQvUS8KKwkJCS9wYXkgeW91ciBkZWJ0cy8gcy8kL1EvCisJCSIgdGV4dC50eHQgfCBxX3RvX2NyID50ZXh0LnR4dCsgJiYKKwltdiB0ZXh0LnR4dCsgdGV4dC50eHQgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJDbGFyaWZ5IiAmJgorCWdpdCBzaG93LWJyYW5jaCAtLWFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduYWl2ZSBtZXJnZSBmYWlscycgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSBIRUFEXiAtLSBIRUFEIHJlbW90ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ3JlcCAiPDw8PDw8IiB0ZXh0LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zcGFjZS1jaGFuZ2UgbWFrZXMgbWVyZ2Ugc3VjY2VlZCcgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgSEVBRF4gLS0gSEVBRCByZW1vdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmFpdmUgY2hlcnJ5LXBpY2sgZmFpbHMnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLW5vLWNvbW1pdCByZW1vdGUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayByZW1vdGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdyZXAgIjw8PDw8PCIgdGV4dC50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLVhpZ25vcmUtc3BhY2UtY2hhbmdlIG1ha2VzIGNoZXJyeS1waWNrIHN1Y2NlZWQnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBjaGVycnktcGljayAtLW5vLWNvbW1pdCAtWGlnbm9yZS1zcGFjZS1jaGFuZ2UgcmVtb3RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXNwYWNlLWNoYW5nZTogb3VyIHcvcy1vbmx5IGNoYW5nZSB3aW5zJyAnCisJcV90b19jciA8PC1cRU9GID5leHBlY3RlZCAmJgorCSAgICBqdXN0aWNlIGFuZCBob2xpbmVzcyBhbmQgaXMgdGhlIG51cnNlIG9mIGhpcyBhZ2UgYW5kIHRoZVEKKwlFT0YKKworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgSEVBRF4gLS0gSEVBRCByZW1vdGUgJiYKKwlncmVwICJqdXN0aWNlIGFuZCBob2xpbmVzcyIgdGV4dC50eHQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zcGFjZS1jaGFuZ2U6IHRoZWlyIHJlYWwgY2hhbmdlIHdpbnMgb3ZlciB3L3MnICcKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlpdD8tLS10byBzcGVhayB0aGUgdHJ1dGggYW5kIHRvIHBheSB5b3VyIGRlYnRzLS0tbm8gbW9yZSB0aGFuIHRoaXM/IEFuZAorCUVPRgorCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlIC0taWdub3JlLXNwYWNlLWNoYW5nZSBIRUFEXiAtLSBIRUFEIHJlbW90ZSAmJgorCWdyZXAgInBheSB5b3VyIGRlYnRzIiB0ZXh0LnR4dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXNwYWNlLWNoYW5nZTogZG9lcyBub3QgaWdub3JlIG5ldyBzcGFjZXMnICcKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQxICYmCisJV2VsbCBzYWlkLCBDZXBoYWx1cywgSSByZXBsaWVkOyBidXQgYXMgY29uIGNlcm5pbmcganVzdGljZSwgd2hhdCBpcworCUVPRgorCXFfdG9fY3IgPDwtXEVPRiA+ZXhwZWN0ZWQyICYmCisJdW4gaW50ZW50aW9uYWxseTsgYW5kIHdoZW4gaGUgZGVwYXJ0cyB0byB0aGUgd29ybGQgYmVsb3cgaGUgaXMgbm90IGluUQorCUVPRgorCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlIC0taWdub3JlLXNwYWNlLWNoYW5nZSBIRUFEXiAtLSBIRUFEIHJlbW90ZSAmJgorCWdyZXAgIldlbGwgc2FpZCIgdGV4dC50eHQgPmFjdHVhbDEgJiYKKwlncmVwICJ3aGVuIGhlIGRlcGFydHMiIHRleHQudHh0ID5hY3R1YWwyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQxIGFjdHVhbDEgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDIgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1hbGwtc3BhY2UgZHJvcHMgdGhlaXIgbmV3IHNwYWNlcycgJworCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCVdlbGwgc2FpZCwgQ2VwaGFsdXMsIEkgcmVwbGllZDsgYnV0IGFzIGNvbmNlcm5pbmcganVzdGljZSwgd2hhdCBpcworCUVPRgorCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlIC0taWdub3JlLWFsbC1zcGFjZSBIRUFEXiAtLSBIRUFEIHJlbW90ZSAmJgorCWdyZXAgIldlbGwgc2FpZCIgdGV4dC50eHQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1hbGwtc3BhY2Uga2VlcHMgb3VyIG5ldyBzcGFjZXMnICcKKwlxX3RvX2NyIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJdW4gaW50ZW50aW9uYWxseTsgYW5kIHdoZW4gaGUgZGVwYXJ0cyB0byB0aGUgd29ybGQgYmVsb3cgaGUgaXMgbm90IGluUQorCUVPRgorCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlIC0taWdub3JlLWFsbC1zcGFjZSBIRUFEXiAtLSBIRUFEIHJlbW90ZSAmJgorCWdyZXAgIndoZW4gaGUgZGVwYXJ0cyIgdGV4dC50eHQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zcGFjZS1hdC1lb2wnICcKKwlxX3RvX2NyIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJPDw8PDw8PCBIRUFECisJaXMgbm90IGluIGhpcyByaWdodCBtaW5kOyBvdWdodCBJIHRvIGdpdmUgdGhlbSBiYWNrIHRvIGhpbT8gIE5vIG9uZVEKKwk9PT09PT09CisJaXMgbm90IGluIGhpcyByaWdodCBtaW5kLCBvdWdodCBJIHRvIGdpdmUgdGhlbSBiYWNrIHRvIGhpbT8gTm8gb25lCisJPj4+Pj4+PiByZW1vdGUKKwlFT0YKKworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgXAorCQkJCQkJIEhFQUReIC0tIEhFQUQgcmVtb3RlICYmCisJY29uZmxpY3RfaHVua3MgdGV4dC50eHQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMzMtbWVyZ2UtdG9wbGV2ZWwuc2ggYi90L3QzMDMzLW1lcmdlLXRvcGxldmVsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyOWMyODQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDMzLW1lcmdlLXRvcGxldmVsLnNoCkBAIC0wLDAgKzEsMTc0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nImdpdCBtZXJnZSIgdG9wLWxldmVsIGZyb250ZW5kJworCisuIC4vdGVzdC1saWIuc2gKKwordDMwMzNfcmVzZXQgKCkgeworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgdHdvICYmCisJZ2l0IGJyYW5jaCAtZiBsZWZ0IHRocmVlICYmCisJZ2l0IGJyYW5jaCAtZiByaWdodCBmb3VyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCWdpdCBicmFuY2ggbGVmdCAmJgorCWdpdCBicmFuY2ggcmlnaHQgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgbGVmdCAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmCisJZ2l0IGNoZWNrb3V0IHJpZ2h0ICYmCisJdGVzdF9jb21taXQgZm91ciAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBuZXdyb290ICYmCisJdGVzdF9jb21taXQgZml2ZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKworIyBMb2NhbCBicmFuY2hlcworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBhbiBvY3RvcHVzIGludG8gdm9pZCcgJworCXQzMDMzX3Jlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHRlc3QgJiYKKwlnaXQgcm0gLWZyIC4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbGVmdCByaWdodCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYW4gb2N0b3B1cywgZmFzdC1mb3J3YXJkIChmZiknICcKKwl0MzAzM19yZXNldCAmJgorCWdpdCByZXNldCAtLWhhcmQgb25lICYmCisJZ2l0IG1lcmdlIGxlZnQgcmlnaHQgJiYKKwkjIG9uZSBpcyBhbmNlc3RvciBvZiB0aHJlZSAobGVmdCkgYW5kIGZvdXIgKHJpZ2h0KQorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF4zICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgSEVBRF4yIHwgc29ydCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSB0aHJlZSBmb3VyIHwgc29ydCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvY3RvcHVzLCBub24tZmFzdC1mb3J3YXJkIChmZiknICcKKwl0MzAzM19yZXNldCAmJgorCWdpdCByZXNldCAtLWhhcmQgb25lICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgbGVmdCByaWdodCAmJgorCSMgb25lIGlzIGFuY2VzdG9yIG9mIHRocmVlIChsZWZ0KSBhbmQgZm91ciAocmlnaHQpCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXjQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSBIRUFEXjIgSEVBRF4zIHwgc29ydCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBvbmUgdGhyZWUgZm91ciB8IHNvcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb2N0b3B1cywgZmFzdC1mb3J3YXJkIChkb2VzIG5vdCBmZiknICcKKwl0MzAzM19yZXNldCAmJgorCWdpdCBtZXJnZSBsZWZ0IHJpZ2h0ICYmCisJIyB0d28gKG1hc3RlcikgaXMgbm90IGFuIGFuY2VzdG9yIG9mIHRocmVlIChsZWZ0KSBhbmQgZm91ciAocmlnaHQpCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXjQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSBIRUFEXjIgSEVBRF4zIHwgc29ydCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSB0d28gdGhyZWUgZm91ciB8IHNvcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb2N0b3B1cywgbm9uLWZhc3QtZm9yd2FyZCcgJworCXQzMDMzX3Jlc2V0ICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgbGVmdCByaWdodCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF40ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgSEVBRF4yIEhFQUReMyB8IHNvcnQgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgdHdvIHRocmVlIGZvdXIgfCBzb3J0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVGhlIHNhbWUgc2V0IHdpdGggRkVUQ0hfSEVBRAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBGRVRDSF9IRUFEIG9jdG9wdXMgaW50byB2b2lkJyAnCisJdDMwMzNfcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gdGVzdCAmJgorCWdpdCBybSAtZnIgLiAmJgorCWdpdCBmZXRjaCAuIGxlZnQgcmlnaHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRkVUQ0hfSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgRkVUQ0hfSEVBRCBvY3RvcHVzIGZhc3QtZm9yd2FyZCAoZmYpJyAnCisJdDMwMzNfcmVzZXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG9uZSAmJgorCWdpdCBmZXRjaCAuIGxlZnQgcmlnaHQgJiYKKwlnaXQgbWVyZ2UgRkVUQ0hfSEVBRCAmJgorCSMgb25lIGlzIGFuY2VzdG9yIG9mIHRocmVlIChsZWZ0KSBhbmQgZm91ciAocmlnaHQpCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXjMgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSBIRUFEXjIgfCBzb3J0ID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIHRocmVlIGZvdXIgfCBzb3J0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIEZFVENIX0hFQUQgb2N0b3B1cyBub24tZmFzdC1mb3J3YXJkIChmZiknICcKKwl0MzAzM19yZXNldCAmJgorCWdpdCByZXNldCAtLWhhcmQgb25lICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIEZFVENIX0hFQUQgJiYKKwkjIG9uZSBpcyBhbmNlc3RvciBvZiB0aHJlZSAobGVmdCkgYW5kIGZvdXIgKHJpZ2h0KQorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF40ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgSEVBRF4yIEhFQUReMyB8IHNvcnQgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2Ugb25lIHRocmVlIGZvdXIgfCBzb3J0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIEZFVENIX0hFQUQgb2N0b3B1cyBmYXN0LWZvcndhcmQgKGRvZXMgbm90IGZmKScgJworCXQzMDMzX3Jlc2V0ICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCWdpdCBtZXJnZSBGRVRDSF9IRUFEICYmCisJIyB0d28gKG1hc3RlcikgaXMgbm90IGFuIGFuY2VzdG9yIG9mIHRocmVlIChsZWZ0KSBhbmQgZm91ciAocmlnaHQpCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXjQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSBIRUFEXjIgSEVBRF4zIHwgc29ydCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSB0d28gdGhyZWUgZm91ciB8IHNvcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgRkVUQ0hfSEVBRCBvY3RvcHVzIG5vbi1mYXN0LWZvcndhcmQnICcKKwl0MzAzM19yZXNldCAmJgorCWdpdCBmZXRjaCAuIGxlZnQgcmlnaHQgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiBGRVRDSF9IRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXjQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSBIRUFEXjIgSEVBRF4zIHwgc29ydCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSB0d28gdGhyZWUgZm91ciB8IHNvcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyB0d28tcHJvamVjdCBtZXJnZQordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNlIHR3by1wcm9qZWN0IG1lcmdlIGJ5IGRlZmF1bHQnICcKKwl0MzAzM19yZXNldCAmJgorCWdpdCByZXNldCAtLWhhcmQgZm91ciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmaXZlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzZSB0d28tcHJvamVjdCBtZXJnZSBieSBkZWZhdWx0LCBxdWl0IGJlZm9yZSAtLWF1dG9zdGFzaCBoYXBwZW5zJyAnCisJdDMwMzNfcmVzZXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZvdXIgJiYKKwllY2hvIGNoYW5nZSA+Pm9uZS50ICYmCisJZ2l0IGRpZmYgPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWF1dG9zdGFzaCBmaXZlIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJzdGFzaCIgZXJyICYmCisJZ2l0IGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvLXByb2plY3QgbWVyZ2Ugd2l0aCAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMnICcKKwl0MzAzM19yZXNldCAmJgorCWdpdCByZXNldCAtLWhhcmQgZm91ciAmJgorCWdpdCBtZXJnZSAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgZml2ZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpdmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvLXByb2plY3QgbWVyZ2Ugd2l0aCAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgd2l0aCAtLWF1dG9zdGFzaCcgJworCXQzMDMzX3Jlc2V0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmb3VyICYmCisJZWNobyBjaGFuZ2UgPj5vbmUudCAmJgorCWdpdCBkaWZmIG9uZS50ID5leHBlY3QgJiYKKwlnaXQgbWVyZ2UgLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIC0tYXV0b3N0YXNoIGZpdmUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJBcHBsaWVkIGF1dG9zdGFzaC4iIGVyciAmJgorCWdpdCBkaWZmIG9uZS50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAzNC1tZXJnZS1yZWN1cnNpdmUtcmVuYW1lLW9wdGlvbnMuc2ggYi90L3QzMDM0LW1lcmdlLXJlY3Vyc2l2ZS1yZW5hbWUtb3B0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZDlmYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzAzNC1tZXJnZS1yZWN1cnNpdmUtcmVuYW1lLW9wdGlvbnMuc2gKQEAgLTAsMCArMSwzMzAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnZS1yZWN1cnNpdmUgcmVuYW1lIG9wdGlvbnMKKworVGVzdCByZW5hbWUgZGV0ZWN0aW9uIGJ5IGV4YW1pbmluZyByZW5hbWUvZGVsZXRlIGNvbmZsaWN0cy4KKworKiAoSEVBRCAtPiByZW5hbWUpIHJlbmFtZQorfCAqIChtYXN0ZXIpIGRlbGV0ZQorfC8KKyogYmFzZQorCitnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIGJhc2UgbWFzdGVyCitECTAtb2xkCitECTEtb2xkCitECTItb2xkCitECTMtb2xkCisKK2dpdCBkaWZmIC0tbmFtZS1zdGF0dXMgLU0wMSBiYXNlIHJlbmFtZQorUjAyNSAgICAwLW9sZCAgIDAtbmV3CitSMDUwICAgIDEtb2xkICAgMS1uZXcKK1IwNzUgICAgMi1vbGQgICAyLW5ldworUjEwMCAgICAzLW9sZCAgIDMtbmV3CisKK0FjdHVhbCBzaW1pbGFyaXR5IGluZGljZXMgYXJlIHBhcnNlZCBmcm9tIGRpZmYgb3V0cHV0LiBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQKK3RoZXkgYXJlIHJvdW5kZWQgZG93biAoc2VlLCBlLmcuLCBEb2N1bWVudGF0aW9uL2RpZmYtZ2VuZXJhdGUtcGF0Y2gudHh0LCB3aGljaAorbWVudGlvbnMgdGhpcyBpbiBhIGRpZmZlcmVudCBjb250ZXh0KS4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK2dldF9leHBlY3RlZF9zdGFnZXMgKCkgeworCWdpdCBjaGVja291dCByZW5hbWUgLS0gJDEtbmV3ICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgJDEtbmV3ID5leHBlY3RlZC1zdGFnZXMtdW5kZXRlY3RlZC0kMSAmJgorCXNlZCAicy8gMAkvIDIJLyIgPGV4cGVjdGVkLXN0YWdlcy11bmRldGVjdGVkLSQxIFwKKwkJPmV4cGVjdGVkLXN0YWdlcy1kZXRlY3RlZC0kMSAmJgorCWdpdCByZWFkLXRyZWUgLXUgLS1yZXNldCBIRUFECit9CisKK3JlbmFtZV9kZXRlY3RlZCAoKSB7CisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgJDEtb2xkICQxLW5ldyA+c3RhZ2VzLWFjdHVhbC0kMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXN0YWdlcy1kZXRlY3RlZC0kMSBzdGFnZXMtYWN0dWFsLSQxCit9CisKK3JlbmFtZV91bmRldGVjdGVkICgpIHsKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSAkMS1vbGQgJDEtbmV3ID5zdGFnZXMtYWN0dWFsLSQxICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtc3RhZ2VzLXVuZGV0ZWN0ZWQtJDEgc3RhZ2VzLWFjdHVhbC0kMQorfQorCitjaGVja19jb21tb24gKCkgeworCWdpdCBscy1maWxlcyAtLXN0YWdlID5zdGFnZXMtYWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNCBzdGFnZXMtYWN0dWFsCit9CisKK2NoZWNrX3RocmVzaG9sZF8wICgpIHsKKwljaGVja19jb21tb24gJiYKKwlyZW5hbWVfZGV0ZWN0ZWQgMCAmJgorCXJlbmFtZV9kZXRlY3RlZCAxICYmCisJcmVuYW1lX2RldGVjdGVkIDIgJiYKKwlyZW5hbWVfZGV0ZWN0ZWQgMworfQorCitjaGVja190aHJlc2hvbGRfMSAoKSB7CisJY2hlY2tfY29tbW9uICYmCisJcmVuYW1lX3VuZGV0ZWN0ZWQgMCAmJgorCXJlbmFtZV9kZXRlY3RlZCAxICYmCisJcmVuYW1lX2RldGVjdGVkIDIgJiYKKwlyZW5hbWVfZGV0ZWN0ZWQgMworfQorCitjaGVja190aHJlc2hvbGRfMiAoKSB7CisJY2hlY2tfY29tbW9uICYmCisJcmVuYW1lX3VuZGV0ZWN0ZWQgMCAmJgorCXJlbmFtZV91bmRldGVjdGVkIDEgJiYKKwlyZW5hbWVfZGV0ZWN0ZWQgMiAmJgorCXJlbmFtZV9kZXRlY3RlZCAzCit9CisKK2NoZWNrX2V4YWN0X3JlbmFtZXMgKCkgeworCWNoZWNrX2NvbW1vbiAmJgorCXJlbmFtZV91bmRldGVjdGVkIDAgJiYKKwlyZW5hbWVfdW5kZXRlY3RlZCAxICYmCisJcmVuYW1lX3VuZGV0ZWN0ZWQgMiAmJgorCXJlbmFtZV9kZXRlY3RlZCAzCit9CisKK2NoZWNrX25vX3JlbmFtZXMgKCkgeworCWNoZWNrX2NvbW1vbiAmJgorCXJlbmFtZV91bmRldGVjdGVkIDAgJiYKKwlyZW5hbWVfdW5kZXRlY3RlZCAxICYmCisJcmVuYW1lX3VuZGV0ZWN0ZWQgMiAmJgorCXJlbmFtZV91bmRldGVjdGVkIDMKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwbycgJworCWNhdCA8PC1cRU9GID4zLW9sZCAmJgorCTMzYQorCTMzYgorCTMzYworCTMzZAorCUVPRgorCXNlZCBzLzMzLzIyLyA8My1vbGQgPjItb2xkICYmCisJc2VkIHMvMzMvMTEvIDwzLW9sZCA+MS1vbGQgJiYKKwlzZWQgcy8zMy8wMC8gPDMtb2xkID4wLW9sZCAmJgorCWdpdCBhZGQgWzAtM10tb2xkICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJZ2l0IHJtIFswLTNdLW9sZCAmJgorCWdpdCBjb21taXQgLW0gZGVsZXRlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlbmFtZSBIRUFEXiAmJgorCWNwIDMtb2xkIDMtbmV3ICYmCisJc2VkIDEsMXMvLi94LyA8Mi1vbGQgPjItbmV3ICYmCisJc2VkIDEsMnMvLi94LyA8MS1vbGQgPjEtbmV3ICYmCisJc2VkIDEsM3MvLi94LyA8MC1vbGQgPjAtbmV3ICYmCisJZ2l0IGFkZCBbMC0zXS1uZXcgJiYKKwlnaXQgcm0gWzAtM10tb2xkICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWUgJiYKKwlnZXRfZXhwZWN0ZWRfc3RhZ2VzIDAgJiYKKwlnZXRfZXhwZWN0ZWRfc3RhZ2VzIDEgJiYKKwlnZXRfZXhwZWN0ZWRfc3RhZ2VzIDIgJiYKKwlnZXRfZXhwZWN0ZWRfc3RhZ2VzIDMgJiYKKwljaGVja181MD0iZmFsc2UiICYmCisJdGFpbD0iSEVBRF4gLS0gSEVBRCBtYXN0ZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRocmVzaG9sZHMnICcKKwlnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIC1NMDEgSEVBRF4gSEVBRCA+ZGlmZi1vdXRwdXQgJiYKKwl0ZXN0X2RlYnVnICJjYXQgZGlmZi1vdXRwdXQiICYmCisJdGVzdF9saW5lX2NvdW50ID0gNCBkaWZmLW91dHB1dCAmJgorCWdyZXAgIlJbMC05XVswLTldWzAtOV0JXChbMC0zXVwpLW9sZAlcMS1uZXciIGRpZmYtb3V0cHV0IFwKKwkJPmdyZXAtb3V0cHV0ICYmCisJdGVzdF9jbXAgZGlmZi1vdXRwdXQgZ3JlcC1vdXRwdXQgJiYKKwl0aDA9JChzZWQgLW4gInMvUlwoLi4uXCkJMC1vbGQJMC1uZXcvXDEvcCIgPGRpZmYtb3V0cHV0KSAmJgorCXRoMT0kKHNlZCAtbiAicy9SXCguLi5cKQkxLW9sZAkxLW5ldy9cMS9wIiA8ZGlmZi1vdXRwdXQpICYmCisJdGgyPSQoc2VkIC1uICJzL1JcKC4uLlwpCTItb2xkCTItbmV3L1wxL3AiIDxkaWZmLW91dHB1dCkgJiYKKwl0aDM9JChzZWQgLW4gInMvUlwoLi4uXCkJMy1vbGQJMy1uZXcvXDEvcCIgPGRpZmYtb3V0cHV0KSAmJgorCXRlc3QgIiR0aDAiIC1sdCAiJHRoMSIgJiYKKwl0ZXN0ICIkdGgxIiAtbHQgIiR0aDIiICYmCisJdGVzdCAiJHRoMiIgLWx0ICIkdGgzIiAmJgorCXRlc3QgIiR0aDMiID0gMTAwICYmCisJaWYgdGVzdCA1MCAtbGUgIiR0aDAiCisJdGhlbgorCQljaGVja181MD1jaGVja190aHJlc2hvbGRfMAorCWVsaWYgdGVzdCA1MCAtbGUgIiR0aDEiCisJdGhlbgorCQljaGVja181MD1jaGVja190aHJlc2hvbGRfMQorCWVsaWYgdGVzdCA1MCAtbGUgIiR0aDIiCisJdGhlbgorCQljaGVja181MD1jaGVja190aHJlc2hvbGRfMgorCWZpICYmCisJdGgwPSIkdGgwJSIgJiYKKwl0aDE9IiR0aDElIiAmJgorCXRoMj0iJHRoMiUiICYmCisJdGgzPSIkdGgzJSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXNzdW1wdGlvbiBmb3IgdGVzdHM6IHJlbmFtZSBkZXRlY3Rpb24gd2l0aCBkaWZmJyAnCisJZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyAtTSR0aDAgLS1kaWZmLWZpbHRlcj1SIEhFQUReIEhFQUQgXAorCQk+ZGlmZi1vdXRwdXQtMCAmJgorCWdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgLU0kdGgxIC0tZGlmZi1maWx0ZXI9UiBIRUFEXiBIRUFEIFwKKwkJPmRpZmYtb3V0cHV0LTEgJiYKKwlnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIC1NJHRoMiAtLWRpZmYtZmlsdGVyPVIgSEVBRF4gSEVBRCBcCisJCT5kaWZmLW91dHB1dC0yICYmCisJZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyAtTTEwMCUgLS1kaWZmLWZpbHRlcj1SIEhFQUReIEhFQUQgXAorCQk+ZGlmZi1vdXRwdXQtMyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgZGlmZi1vdXRwdXQtMCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgZGlmZi1vdXRwdXQtMSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgZGlmZi1vdXRwdXQtMiAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgZGlmZi1vdXRwdXQtMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWZhdWx0IHNpbWlsYXJpdHkgdGhyZXNob2xkIGlzIDUwJScgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAkdGFpbCAmJgorCSRjaGVja181MAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb3cgcmVuYW1lIHRocmVzaG9sZCcgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWZpbmQtcmVuYW1lcz0kdGgwICR0YWlsICYmCisJY2hlY2tfdGhyZXNob2xkXzAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVkaXVtIHJlbmFtZSB0aHJlc2hvbGQnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgLS1maW5kLXJlbmFtZXM9JHRoMSAkdGFpbCAmJgorCWNoZWNrX3RocmVzaG9sZF8xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hpZ2ggcmVuYW1lIHRocmVzaG9sZCcgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWZpbmQtcmVuYW1lcz0kdGgyICR0YWlsICYmCisJY2hlY2tfdGhyZXNob2xkXzIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhhY3QgcmVuYW1lcyBvbmx5JyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tZmluZC1yZW5hbWVzPTEwMCUgJHRhaWwgJiYKKwljaGVja19leGFjdF9yZW5hbWVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSB0aHJlc2hvbGQgaXMgdHJ1bmNhdGVkJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tZmluZC1yZW5hbWVzPTIwMCUgJHRhaWwgJiYKKwljaGVja19leGFjdF9yZW5hbWVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FibGVkIHJlbmFtZSBkZXRlY3Rpb24nICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgLS1uby1yZW5hbWVzICR0YWlsICYmCisJY2hlY2tfbm9fcmVuYW1lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXN0IHdpbnMgaW4gLS1maW5kLXJlbmFtZXM9PG0+IC0tZmluZC1yZW5hbWVzPTxuPicgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSBcCisJCS0tZmluZC1yZW5hbWVzPSR0aDAgLS1maW5kLXJlbmFtZXM9JHRoMiAkdGFpbCAmJgorCWNoZWNrX3RocmVzaG9sZF8yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZmluZC1yZW5hbWVzIHJlc2V0cyB0aHJlc2hvbGQnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgXAorCQktLWZpbmQtcmVuYW1lcz0kdGgwIC0tZmluZC1yZW5hbWVzICR0YWlsICYmCisJJGNoZWNrXzUwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhc3Qgd2lucyBpbiAtLW5vLXJlbmFtZXMgLS1maW5kLXJlbmFtZXMnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgLS1uby1yZW5hbWVzIC0tZmluZC1yZW5hbWVzICR0YWlsICYmCisJJGNoZWNrXzUwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhc3Qgd2lucyBpbiAtLWZpbmQtcmVuYW1lcyAtLW5vLXJlbmFtZXMnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgLS1maW5kLXJlbmFtZXMgLS1uby1yZW5hbWVzICR0YWlsICYmCisJY2hlY2tfbm9fcmVuYW1lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhc3N1bXB0aW9uIGZvciBmdXJ0aGVyIHRlc3RzOiB0cml2aWFsIG1lcmdlIHN1Y2NlZWRzJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlIEhFQUQgLS0gSEVBRCBIRUFEICYmCisJZ2l0IGRpZmYgLS1xdWlldCAtLWNhY2hlZCAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgLS1maW5kLXJlbmFtZXM9JHRoMCBIRUFEIC0tIEhFQUQgSEVBRCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgLS1jYWNoZWQgJiYKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tZmluZC1yZW5hbWVzPSR0aDIgSEVBRCAtLSBIRUFEIEhFQUQgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IC0tY2FjaGVkICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWZpbmQtcmVuYW1lcz0xMDAlIEhFQUQgLS0gSEVBRCBIRUFEICYmCisJZ2l0IGRpZmYgLS1xdWlldCAtLWNhY2hlZCAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgLS1uby1yZW5hbWVzIEhFQUQgLS0gSEVBRCBIRUFEICYmCisJZ2l0IGRpZmYgLS1xdWlldCAtLWNhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWZpbmQtcmVuYW1lcyByZWplY3RzIG5lZ2F0aXZlIGFyZ3VtZW50JyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tZmluZC1yZW5hbWVzPS0yNSBcCisJCUhFQUQgLS0gSEVBRCBIRUFEICYmCisJZ2l0IGRpZmYgLS1xdWlldCAtLWNhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWZpbmQtcmVuYW1lcyByZWplY3RzIG5vbi1udW1iZXJzJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tZmluZC1yZW5hbWVzPTB4ZiBcCisJCUhFQUQgLS0gSEVBRCBIRUFEICYmCisJZ2l0IGRpZmYgLS1xdWlldCAtLWNhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUtdGhyZXNob2xkPTxuPiBpcyBhIHN5bm9ueW0gZm9yIGZpbmQtcmVuYW1lcz08bj4nICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgLS1yZW5hbWUtdGhyZXNob2xkPSR0aDAgJHRhaWwgJiYKKwljaGVja190aHJlc2hvbGRfMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXN0IHdpbnMgaW4gLS1uby1yZW5hbWVzIC0tcmVuYW1lLXRocmVzaG9sZD08bj4nICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgLS1uby1yZW5hbWVzIC0tcmVuYW1lLXRocmVzaG9sZD0kdGgwICR0YWlsICYmCisJY2hlY2tfdGhyZXNob2xkXzAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFzdCB3aW5zIGluIC0tcmVuYW1lLXRocmVzaG9sZD08bj4gLS1uby1yZW5hbWVzJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tcmVuYW1lLXRocmVzaG9sZD0kdGgwIC0tbm8tcmVuYW1lcyAkdGFpbCAmJgorCWNoZWNrX25vX3JlbmFtZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZW5hbWUtdGhyZXNob2xkPTxuPiByZWplY3RzIG5lZ2F0aXZlIGFyZ3VtZW50JyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tcmVuYW1lLXRocmVzaG9sZD0tMjUgXAorCQlIRUFEIC0tIEhFQUQgSEVBRCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgLS1jYWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZW5hbWUtdGhyZXNob2xkPTxuPiByZWplY3RzIG5vbi1udW1iZXJzJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tcmVuYW1lLXRocmVzaG9sZD0weGYgXAorCQlIRUFEIC0tIEhFQUQgSEVBRCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgLS1jYWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFzdCB3aW5zIGluIC0tcmVuYW1lLXRocmVzaG9sZD08bT4gLS1maW5kLXJlbmFtZXM9PG4+JyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtcmVjdXJzaXZlIFwKKwkJLS1yZW5hbWUtdGhyZXNob2xkPSR0aDAgLS1maW5kLXJlbmFtZXM9JHRoMiAkdGFpbCAmJgorCWNoZWNrX3RocmVzaG9sZF8yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhc3Qgd2lucyBpbiAtLWZpbmQtcmVuYW1lcz08bT4gLS1yZW5hbWUtdGhyZXNob2xkPTxuPicgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSBcCisJCS0tZmluZC1yZW5hbWVzPSR0aDIgLS1yZW5hbWUtdGhyZXNob2xkPSR0aDAgJHRhaWwgJiYKKwljaGVja190aHJlc2hvbGRfMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS5yZW5hbWVzIGRpc2FibGVzIHJlbmFtZSBkZXRlY3Rpb24nICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCAtYyBtZXJnZS5yZW5hbWVzPWZhbHNlIG1lcmdlLXJlY3Vyc2l2ZSAkdGFpbCAmJgorCWNoZWNrX25vX3JlbmFtZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UucmVuYW1lcyBkZWZhdWx0cyB0byBkaWZmLnJlbmFtZXMnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCAtYyBkaWZmLnJlbmFtZXM9ZmFsc2UgbWVyZ2UtcmVjdXJzaXZlICR0YWlsICYmCisJY2hlY2tfbm9fcmVuYW1lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS5yZW5hbWVzIG92ZXJyaWRlcyBkaWZmLnJlbmFtZXMnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBkaWZmLnJlbmFtZXM9ZmFsc2UgLWMgbWVyZ2UucmVuYW1lcz10cnVlIG1lcmdlLXJlY3Vyc2l2ZSAkdGFpbCAmJgorCSRjaGVja181MAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMzUtbWVyZ2Utc3BhcnNlLnNoIGIvdC90MzAzNS1tZXJnZS1zcGFyc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzQ1NjJlMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMzUtbWVyZ2Utc3BhcnNlLnNoCkBAIC0wLDAgKzEsNTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnZSB3aXRoIHNwYXJzZSBmaWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgdGVzdF9maWxlICRmaWxlbmFtZSAkY29udGVudAordGVzdF9maWxlICgpIHsKKwllY2hvICIkMiIgPiAiJDEiICYmCisJZ2l0IGFkZCAiJDEiCit9CisKKyMgdGVzdF9jb21taXRfdGhpcyAkbWVzc2FnZV9hbmRfdGFnCit0ZXN0X2NvbW1pdF90aGlzICgpIHsKKwlnaXQgY29tbWl0IC1tICIkMSIgJiYKKwlnaXQgdGFnICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2ZpbGUgY2hlY2tlZC1vdXQgaW5pdCAmJgorCXRlc3RfZmlsZSBtb2RpZnlfZGVsZXRlIG1vZGlmeV9kZWxldGVfaW5pdCAmJgorCXRlc3RfY29tbWl0X3RoaXMgaW5pdCAmJgorCXRlc3RfZmlsZSBtb2RpZnlfZGVsZXRlIG1vZGlmeV9kZWxldGVfdGhlaXJzICYmCisJdGVzdF9jb21taXRfdGhpcyB0aGVpcnMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXQgJiYKKwlnaXQgcm0gbW9kaWZ5X2RlbGV0ZSAmJgorCXRlc3RfY29tbWl0X3RoaXMgb3VycyAmJgorCWdpdCBjb25maWcgY29yZS5zcGFyc2VDaGVja291dCB0cnVlICYmCisJZWNobyAiL2NoZWNrZWQtb3V0IiA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGhlaXJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0taGFyZCB3b3JrcyBhZnRlciB0aGUgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzIHJlc2V0IHByb3Blcmx5JyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLSBtb2RpZnlfZGVsZXRlID5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbW9kaWZ5X2RlbGV0ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogY29uZmxpY3QgYmFjaycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0aGVpcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTWVyZ2UgYWJvcnQgd29ya3MgYWZ0ZXIgdGhlIGNvbmZsaWN0JyAnCisJZ2l0IG1lcmdlIC0tYWJvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaXMgYWJvcnRlZCBwcm9wZXJseScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS0gbW9kaWZ5X2RlbGV0ZSA+b3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG1vZGlmeV9kZWxldGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDQwLXN1YnByb2plY3RzLWJhc2ljLnNoIGIvdC90MzA0MC1zdWJwcm9qZWN0cy1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iODFlYjVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzA0MC1zdWJwcm9qZWN0cy1iYXNpYy5zaApAQCAtMCwwICsxLDg1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQmFzaWMgc3VicHJvamVjdCBmdW5jdGlvbmFsaXR5JworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBjcmVhdGUgc3VwZXJwcm9qZWN0JyAnCisJOiA+TWFrZWZpbGUgJiYKKwlnaXQgYWRkIE1ha2VmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiU3VwZXJwcm9qZWN0IGNyZWF0ZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBjcmVhdGUgc3VicHJvamVjdHMnICcKKwlta2RpciBzdWIxICYmCisJKCBjZCBzdWIxICYmIGdpdCBpbml0ICYmIDogPk1ha2VmaWxlICYmIGdpdCBhZGQgKiAmJgorCWdpdCBjb21taXQgLXEgLW0gInN1YnByb2plY3QgMSIgKSAmJgorCW1rZGlyIHN1YjIgJiYKKwkoIGNkIHN1YjIgJiYgZ2l0IGluaXQgJiYgOiA+TWFrZWZpbGUgJiYgZ2l0IGFkZCAqICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAic3VicHJvamVjdCAyIiApICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBzdWIxICYmCisJZ2l0IGFkZCBzdWIyICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAic3VicHJvamVjdHMgYWRkZWQiICYmCisJR0lUX1BSSU5UX1NIQTFfRUxMSVBTSVM9InllcyIgZ2l0IGRpZmYtdHJlZSAtLWFiYnJldj01IEhFQUReIEhFQUQgfGN1dCAtZCIgIiAtZi0zLDUtID5jdXJyZW50ICYmCisJZ2l0IGJyYW5jaCBzYXZlIEhFQUQgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwk6MDAwMDAwIDE2MDAwMCAwMDAwMC4uLiBBCXN1YjEKKwk6MDAwMDAwIDE2MDAwMCAwMDAwMC4uLiBBCXN1YjIKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGZzY2sgaWdub3JlcyB0aGUgc3VicHJvamVjdHMnICcKKwlnaXQgZnNjayAtLWZ1bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgY29tbWl0IGluIGEgc3VicHJvamVjdCBkZXRlY3RlZCcgJworCSggY2Qgc3ViMSAmJgorCWVjaG8gImFsbDoiID4+TWFrZWZpbGUgJiYKKwllY2hvICIJdHJ1ZSIgPj5NYWtlZmlsZSAmJgorCWdpdCBjb21taXQgLXEgLWEgLW0gIm1ha2UgYWxsIiApICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGEgY2hhbmdlZCBzdWJwcm9qZWN0IEhFQUQgY2FuIGJlIGNvbW1pdHRlZCcgJworCWdpdCBjb21taXQgLXEgLWEgLW0gInN1YjEgY2hhbmdlZCIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtdHJlZSAtLWV4aXQtY29kZSBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGRpZmYtaW5kZXggd29ya3MgZm9yIHN1YnByb2plY3QgZWxlbWVudHMnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgLS1jYWNoZWQgc2F2ZSAtLSBzdWIxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGRpZmYtdHJlZSB3b3JrcyBmb3Igc3VicHJvamVjdCBlbGVtZW50cycgJworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZi10cmVlIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQgLS0gc3ViMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiBnaXQgZGlmZiB3b3JrcyBmb3Igc3VicHJvamVjdCBlbGVtZW50cycgJworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGNsb25lIHdvcmtzJyAnCisJZ2l0IGxzLWZpbGVzIC1zID5leHBlY3RlZCAmJgorCWdpdCBjbG9uZSAtbCAtcyAuIGNsb25lZCAmJgorCSggY2QgY2xvbmVkICYmIGdpdCBscy1maWxlcyAtcyApID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmluZyBhbmQgYWRkaW5nIHN1YnByb2plY3QnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIC0tIHN1YjIgJiYKKwltdiBzdWIyIHN1YjMgJiYKKwlnaXQgYWRkIHN1YjMgJiYKKwlnaXQgY29tbWl0IC1xIC1tICJyZW5hbWluZyBhIHN1YnByb2plY3QiICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC1NIC0tbmFtZS1zdGF0dXMgLS1leGl0LWNvZGUgSEVBRF4gSEVBRAorJworCisjIHRoZSBpbmRleCBtdXN0IGNvbnRhaW4gdGhlIG9iamVjdCBuYW1lIHRoZSBIRUFEIG9mIHRoZQorIyBzdWJwcm9qZWN0IHN1YjEgd2FzIGF0IHRoZSBwb2ludCAic2F2ZSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGluIHN1cGVycHJvamVjdCcgJworCWdpdCBjaGVja291dCBzYXZlICYmCisJZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgLS1yYXcgLS1jYWNoZWQgc2F2ZSAtLSBzdWIxCisnCisKKyMganVzdCBpbnRlcmVzdGluZyB3aGF0IGhhcHBlbmVkLi4uCisjIGdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgLU0gc2F2ZSBtYXN0ZXIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDUwLXN1YnByb2plY3RzLWZldGNoLnNoIGIvdC90MzA1MC1zdWJwcm9qZWN0cy1mZXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMWYwOWFiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzA1MC1zdWJwcm9qZWN0cy1mZXRjaC5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZmV0Y2hpbmcgYW5kIHB1c2hpbmcgcHJvamVjdCB3aXRoIHN1YnByb2plY3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X3RpY2sgJiYKKwlta2RpciAtcCBzdWIgJiYgKAorCQljZCBzdWIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJPnN1YmZpbGUgJiYKKwkJZ2l0IGFkZCBzdWJmaWxlICYmCisJCWdpdCBjb21taXQgLW0gInN1YnByb2plY3QgY29tbWl0ICMxIgorCSkgJiYKKwk+bWFpbmZpbGUgJiYKKwlnaXQgYWRkIHN1YiBtYWluZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInN1cGVycHJvamVjdCBjb21taXQgIzEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgY2xvbmUgJworCWdpdCBjbG9uZSAiZmlsZTovLyQocHdkKS8uZ2l0IiBjbG9uZWQgJiYKKwkoZ2l0IHJldi1wYXJzZSBIRUFEICYmIGdpdCBscy1maWxlcyAtcykgPmV4cGVjdGVkICYmCisJKAorCQljZCBjbG9uZWQgJiYKKwkJKGdpdCByZXYtcGFyc2UgSEVBRCAmJiBnaXQgbHMtZmlsZXMgLXMpID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgYWR2YW5jZSAnCisJZWNobyBtb3JlID5tYWluZmlsZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgc3ViICYmCisJbXYgc3ViLy5naXQgc3ViLy5naXQtZGlzYWJsZWQgJiYKKwlnaXQgYWRkIHN1Yi9zdWJmaWxlIG1haW5maWxlICYmCisJbXYgc3ViLy5naXQtZGlzYWJsZWQgc3ViLy5naXQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzdXBlcnByb2plY3QgY29tbWl0ICMyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGZldGNoICcKKwkoZ2l0IHJldi1wYXJzZSBIRUFEICYmIGdpdCBscy1maWxlcyAtcykgPmV4cGVjdGVkICYmCisJKAorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IHB1bGwgJiYKKwkJKGdpdCByZXYtcGFyc2UgSEVBRCAmJiBnaXQgbHMtZmlsZXMgLXMpID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzA2MC1scy1maWxlcy13aXRoLXRyZWUuc2ggYi90L3QzMDYwLWxzLWZpbGVzLXdpdGgtdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MmVkNjY1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzA2MC1scy1maWxlcy13aXRoLXRyZWUuc2gKQEAgLTAsMCArMSw2MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBDYXJsIEQuIFdvcnRoCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBscy1maWxlcyB0ZXN0ICgtLXdpdGgtdHJlZSkuCisKK1RoaXMgdGVzdCBydW5zIGdpdCBscy1maWxlcyAtLXdpdGgtdHJlZSBhbmQgaW4gcGFydGljdWxhciBpbgorYSBzY2VuYXJpbyBrbm93biB0byB0cmlnZ2VyIGEgY3Jhc2ggd2l0aCBzb21lIHZlcnNpb25zIG9mIGdpdC4KKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCSMgVGhlIGJ1ZyB3ZSBhcmUgZXhlcmNpc2luZyByZXF1aXJlcyBhIGZhaXIgbnVtYmVyIG9mIGVudHJpZXMKKwkjIGluIGEgc3ViLWRpcmVjdG9yeSBzbyB0aGF0IGFkZF9pbmRleF9lbnRyeSB3aWxsIHRyaWdnZXIgYQorCSMgcmVhbGxvYy4KKworCWVjaG8gZmlsZSA+ZXhwZWN0ZWQgJiYKKwlta2RpciBzdWIgJiYKKwlmb3IgbiBpbiAwIDEgMiAzIDQgNQorCWRvCisJCWZvciBtIGluIDAgMSAyIDMgNCA1IDYgNyA4IDkKKwkJZG8KKwkJCW51bT0wMCRuJG0gJiYKKwkJCT5zdWIvZmlsZS0kbnVtICYmCisJCQllY2hvIGZpbGUtJG51bSA+PmV4cGVjdGVkIHx8CisJCQlyZXR1cm4gMQorCQlkb25lCisJZG9uZSAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gImFkZCBhIGJ1bmNoIG9mIGZpbGVzIiAmJgorCisJIyBXZSByZW1vdmUgdGhlbSBhbGwgc28gdGhhdCB3ZSB3aWxsIGhhdmUgc29tZXRoaW5nIHRvIGFkZAorCSMgYmFjayB3aXRoIC0td2l0aC10cmVlIGFuZCBzbyB0aGF0IHdlIHdpbGwgZGVmaW5pdGVseSBiZQorCSMgdW5kZXIgdGhlIHJlYWxsb2Mgc2l6ZSB0byB0cmlnZ2VyIHRoZSBidWcuCisJcm0gLXJmIHN1YiAmJgorCWdpdCBjb21taXQgLWEgLW0gInJlbW92ZSB0aGVtIGFsbCIgJiYKKworCSMgVGhlIGJ1ZyBhbHNvIHJlcXVpcmVzIHNvbWUgZW50cnkgYmVmb3JlIG91ciBkaXJlY3Rvcnkgc28gdGhhdAorCSMgcHJ1bmVfcGF0aCB3aWxsIG1vZGlmeSB0aGVfaW5kZXguY2FjaGUKKworCW1rZGlyIGFfZGlyZWN0b3J5X3RoYXRfc29ydHNfYmVmb3JlX3N1YiAmJgorCT5hX2RpcmVjdG9yeV90aGF0X3NvcnRzX2JlZm9yZV9zdWIvZmlsZSAmJgorCW1rZGlyIHN1YiAmJgorCT5zdWIvZmlsZSAmJgorCWdpdCBhZGQgLgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLS13aXRoLXRyZWUgc2hvdWxkIHN1Y2NlZWQgZnJvbSBzdWJkaXInICcKKwkjIFdlIGhhdmUgdG8gcnVuIGZyb20gYSBzdWItZGlyZWN0b3J5IHRvIHRyaWdnZXIgcHJ1bmVfcGF0aAorCSMgVGhlbiB3ZSBmaW5hbGx5IGdldCB0byBydW4gb3VyIC0td2l0aC10cmVlIHRlc3QKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgbHMtZmlsZXMgLS13aXRoLXRyZWU9SEVBRH4xID4uLi9vdXRwdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgLS13aXRoLXRyZWUgc2hvdWxkIGFkZCBlbnRyaWVzIGZyb20gbmFtZWQgdHJlZS4nIFwKKyAgICAndGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0JworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwNzAtd2lsZG1hdGNoLnNoIGIvdC90MzA3MC13aWxkbWF0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODkxZDRkNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwNzAtd2lsZG1hdGNoLnNoCkBAIC0wLDAgKzEsNDMzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nd2lsZG1hdGNoIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKworc2hvdWxkX2NyZWF0ZV90ZXN0X2ZpbGUoKSB7CisJZmlsZT0kMQorCisJY2FzZSAkZmlsZSBpbgorCSMgYHRvdWNoIC5gIHdpbGwgc3VjY2VlZCBidXQgb2J2aW91c2x5IG5vdCBkbyB3aGF0IHdlIGludGVuZAorCSMgaGVyZS4KKwkiLiIpCisJCXJldHVybiAxCisJCTs7CisJIyBXZSBjYW5ub3QgY3JlYXRlIGEgZmlsZSB3aXRoIGFuIGVtcHR5IGZpbGVuYW1lLgorCSIiKQorCQlyZXR1cm4gMQorCQk7OworCSMgVGhlIHRlc3RzIHRoYXQgYXJlIHRlc3RpbmcgdGhhdCBlLmcuIGZvby8vYmFyIGlzIG1hdGNoZWQgYnkKKwkjIGZvby8qL2JhciBjYW4ndCBiZSB0ZXN0ZWQgb24gZmlsZXN5c3RlbXMgc2luY2UgdGhlcmUncyBubworCSMgd2F5IHdlJ3JlIGdldHRpbmcgYSBkb3VibGUgc2xhc2guCisJKi8vKikKKwkJcmV0dXJuIDEKKwkJOzsKKwkjIFdoZW4gdGVzdGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGZvby9iYXIgYW5kIGZvby9iYXIvIHdlCisJIyBjYW4ndCB0ZXN0IHRoZSBsYXR0ZXIuCisJKi8pCisJCXJldHVybiAxCisJCTs7CisJIyBPbiBXaW5kb3dzLCBcIGluIHBhdGhzIGlzIHNpbGVudGx5IGNvbnZlcnRlZCB0byAvLCB3aGljaAorCSMgd291bGQgcmVzdWx0IGluIHRoZSAidG91Y2giIGJlbG93IHdvcmtpbmcsIGJ1dCB0aGUgdGVzdAorCSMgaXRzZWxmIGZhaWxpbmcuIFNlZSA2ZmQxMTA2YWE0ICgidDM3MDA6IFNraXAgYSB0ZXN0IHdpdGgKKwkjIGJhY2tzbGFzaGVzIGluIHBhdGhzcGVjIiwgMjAwOS0wMy0xMykgZm9yIHByaW9yIGFydCBhbmQKKwkjIGRldGFpbHMuCisJKlxcKikKKwkJaWYgISB0ZXN0X2hhdmVfcHJlcmVxIEJTTEFTSFBTUEVDCisJCXRoZW4KKwkJCXJldHVybiAxCisJCWZpCisJCSMgTk9URTogVGhlIDs7JiBiYXNoIGV4dGVuc2lvbiBpcyBub3QgcG9ydGFibGUsIHNvCisJCSMgdGhpcyB0ZXN0IG5lZWRzIHRvIGJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4KKwkJIyBsaXN0LgorCQkjCisJCSMgSWYgd2Ugd2FudCB0byBhZGQgbW9yZSBjb25kaXRpb25hbCByZXR1cm5zIHdlIGVpdGhlcgorCQkjIG5lZWQgYSBuZXcgY2FzZSBzdGF0ZW1lbnQsIG9yIHR1cm4gdGhpcyB3aG9sZSB0aGluZworCQkjIGludG8gYSBzZXJpZXMgb2YgImlmIiB0ZXN0cy4KKwkJOzsKKwllc2FjCisKKworCSMgT24gV2luZG93cyBwcm9wZXIgKGkuZS4gbm90IEN5Z3dpbikgbWFueSBmaWxlIG5hbWVzIHdoaWNoCisJIyB1bmRlciBDeWd3aW4gd291bGQgYmUgZW11bGF0ZWQgZG9uJ3Qgd29yay4KKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIE1JTkdXCisJdGhlbgorCQljYXNlICRmaWxlIGluCisJCSIgIikKKwkJCSMgRmlsZXMgY2FsbGVkICIgIiBhcmUgZm9yYmlkZGVuIG9uIFdpbmRvd3MKKwkJCXJldHVybiAxCisJCQk7OworCQkqXDwqfCpcPip8KjoqfCpcIip8Klx8KnwqXD8qfCpcKiopCisJCQkjIEZpbGVzIHdpdGggdmFyaW91cyBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlbid0CisJCQkjIGFsbG93ZWQgb24gV2luZG93cy4gU291cmNlZCBmcm9tCisJCQkjIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zMTk3NjA2MAorCQkJcmV0dXJuIDEKKwkJCTs7CisJCWVzYWMKKwlmaQorCisJcmV0dXJuIDAKK30KKworbWF0Y2hfd2l0aF9mdW5jdGlvbigpIHsKKwl0ZXh0PSQxCisJcGF0dGVybj0kMgorCW1hdGNoX2V4cGVjdD0kMworCW1hdGNoX2Z1bmN0aW9uPSQ0CisKKwlpZiB0ZXN0ICIkbWF0Y2hfZXhwZWN0IiA9IDEKKwl0aGVuCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRtYXRjaF9mdW5jdGlvbjogbWF0Y2ggJyR0ZXh0JyAnJHBhdHRlcm4nIiAiCisJCQl0ZXN0LXRvb2wgd2lsZG1hdGNoICRtYXRjaF9mdW5jdGlvbiAnJHRleHQnICckcGF0dGVybicKKwkJIgorCWVsaWYgdGVzdCAiJG1hdGNoX2V4cGVjdCIgPSAwCisJdGhlbgorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbWF0Y2hfZnVuY3Rpb246IG5vIG1hdGNoICckdGV4dCcgJyRwYXR0ZXJuJyIgIgorCQkJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHdpbGRtYXRjaCAkbWF0Y2hfZnVuY3Rpb24gJyR0ZXh0JyAnJHBhdHRlcm4nCisJCSIKKwllbHNlCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlBBTklDOiBUZXN0IGZyYW1ld29yayBlcnJvci4gVW5rbm93biBtYXRjaGVzIHZhbHVlICRtYXRjaF9leHBlY3QiICdmYWxzZScKKwlmaQorCit9CisKK21hdGNoX3dpdGhfbHNfZmlsZXMoKSB7CisJdGV4dD0kMQorCXBhdHRlcm49JDIKKwltYXRjaF9leHBlY3Q9JDMKKwltYXRjaF9mdW5jdGlvbj0kNAorCWxzX2ZpbGVzX2FyZ3M9JDUKKworCW1hdGNoX3N0ZG91dF9zdGRlcnJfY21wPSIKKwkJdHIgLWQgJ1wwJyA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZXJyICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwiCisKKwlpZiB0ZXN0ICIkbWF0Y2hfZXhwZWN0IiA9ICdFJworCXRoZW4KKwkJaWYgdGVzdCAtZSAuZ2l0L2NyZWF0ZWRfdGVzdF9maWxlCisJCXRoZW4KKwkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgRVhQRU5TSVZFX09OX1dJTkRPV1MgIiRtYXRjaF9mdW5jdGlvbiAodmlhIGxzLWZpbGVzKTogbWF0Y2ggZGllcyBvbiAnJHBhdHRlcm4nICckdGV4dCciICIKKwkJCQlwcmludGYgJyVzJyAnJHRleHQnID5leHBlY3QgJiYKKwkJCQl0ZXN0X211c3RfZmFpbCBnaXQkbHNfZmlsZXNfYXJncyBscy1maWxlcyAteiAtLSAnJHBhdHRlcm4nCisJCQkiCisJCWVsc2UKKwkJCXRlc3RfZXhwZWN0X2ZhaWx1cmUgRVhQRU5TSVZFX09OX1dJTkRPV1MgIiRtYXRjaF9mdW5jdGlvbiAodmlhIGxzLWZpbGVzKTogbWF0Y2ggc2tpcCAnJHBhdHRlcm4nICckdGV4dCciICdmYWxzZScKKwkJZmkKKwllbGlmIHRlc3QgIiRtYXRjaF9leHBlY3QiID0gMQorCXRoZW4KKwkJaWYgdGVzdCAtZSAuZ2l0L2NyZWF0ZWRfdGVzdF9maWxlCisJCXRoZW4KKwkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgRVhQRU5TSVZFX09OX1dJTkRPV1MgIiRtYXRjaF9mdW5jdGlvbiAodmlhIGxzLWZpbGVzKTogbWF0Y2ggJyRwYXR0ZXJuJyAnJHRleHQnIiAiCisJCQkJcHJpbnRmICclcycgJyR0ZXh0JyA+ZXhwZWN0ICYmCisJCQkJZ2l0JGxzX2ZpbGVzX2FyZ3MgbHMtZmlsZXMgLXogLS0gJyRwYXR0ZXJuJyA+YWN0dWFsLnJhdyAyPmFjdHVhbC5lcnIgJiYKKwkJCQkkbWF0Y2hfc3Rkb3V0X3N0ZGVycl9jbXAKKwkJCSIKKwkJZWxzZQorCQkJdGVzdF9leHBlY3RfZmFpbHVyZSBFWFBFTlNJVkVfT05fV0lORE9XUyAiJG1hdGNoX2Z1bmN0aW9uICh2aWEgbHMtZmlsZXMpOiBtYXRjaCBza2lwICckcGF0dGVybicgJyR0ZXh0JyIgJ2ZhbHNlJworCQlmaQorCWVsaWYgdGVzdCAiJG1hdGNoX2V4cGVjdCIgPSAwCisJdGhlbgorCQlpZiB0ZXN0IC1lIC5naXQvY3JlYXRlZF90ZXN0X2ZpbGUKKwkJdGhlbgorCQkJdGVzdF9leHBlY3Rfc3VjY2VzcyBFWFBFTlNJVkVfT05fV0lORE9XUyAiJG1hdGNoX2Z1bmN0aW9uICh2aWEgbHMtZmlsZXMpOiBubyBtYXRjaCAnJHBhdHRlcm4nICckdGV4dCciICIKKwkJCQk+ZXhwZWN0ICYmCisJCQkJZ2l0JGxzX2ZpbGVzX2FyZ3MgbHMtZmlsZXMgLXogLS0gJyRwYXR0ZXJuJyA+YWN0dWFsLnJhdyAyPmFjdHVhbC5lcnIgJiYKKwkJCQkkbWF0Y2hfc3Rkb3V0X3N0ZGVycl9jbXAKKwkJCSIKKwkJZWxzZQorCQkJdGVzdF9leHBlY3RfZmFpbHVyZSBFWFBFTlNJVkVfT05fV0lORE9XUyAiJG1hdGNoX2Z1bmN0aW9uICh2aWEgbHMtZmlsZXMpOiBubyBtYXRjaCBza2lwICckcGF0dGVybicgJyR0ZXh0JyIgJ2ZhbHNlJworCQlmaQorCWVsc2UKKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAiUEFOSUM6IFRlc3QgZnJhbWV3b3JrIGVycm9yLiBVbmtub3duIG1hdGNoZXMgdmFsdWUgJG1hdGNoX2V4cGVjdCIgJ2ZhbHNlJworCWZpCit9CisKK21hdGNoKCkgeworCWlmIHRlc3QgIiQjIiA9IDYKKwl0aGVuCisJCSMgV2hlbiB0ZXN0LXRvb2wgd2lsZG1hdGNoIGFuZCBnaXQgbHMtZmlsZXMgcHJvZHVjZSB0aGUgc2FtZQorCQkjIHJlc3VsdC4KKwkJbWF0Y2hfZ2xvYj0kMQorCQltYXRjaF9maWxlX2dsb2I9JG1hdGNoX2dsb2IKKwkJbWF0Y2hfaWdsb2I9JDIKKwkJbWF0Y2hfZmlsZV9pZ2xvYj0kbWF0Y2hfaWdsb2IKKwkJbWF0Y2hfcGF0aG1hdGNoPSQzCisJCW1hdGNoX2ZpbGVfcGF0aG1hdGNoPSRtYXRjaF9wYXRobWF0Y2gKKwkJbWF0Y2hfcGF0aG1hdGNoaT0kNAorCQltYXRjaF9maWxlX3BhdGhtYXRjaGk9JG1hdGNoX3BhdGhtYXRjaGkKKwkJdGV4dD0kNQorCQlwYXR0ZXJuPSQ2CisJZWxpZiB0ZXN0ICIkIyIgPSAxMAorCXRoZW4KKwkJbWF0Y2hfZ2xvYj0kMQorCQltYXRjaF9pZ2xvYj0kMgorCQltYXRjaF9wYXRobWF0Y2g9JDMKKwkJbWF0Y2hfcGF0aG1hdGNoaT0kNAorCQltYXRjaF9maWxlX2dsb2I9JDUKKwkJbWF0Y2hfZmlsZV9pZ2xvYj0kNgorCQltYXRjaF9maWxlX3BhdGhtYXRjaD0kNworCQltYXRjaF9maWxlX3BhdGhtYXRjaGk9JDgKKwkJdGV4dD0kOQorCQlwYXR0ZXJuPSR7MTB9CisJZmkKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgRVhQRU5TSVZFX09OX1dJTkRPV1MgJ2NsZWFudXAgYWZ0ZXIgcHJldmlvdXMgZmlsZSB0ZXN0JyAnCisJCWlmIHRlc3QgLWUgLmdpdC9jcmVhdGVkX3Rlc3RfZmlsZQorCQl0aGVuCisJCQlnaXQgcmVzZXQgJiYKKwkJCWdpdCBjbGVhbiAtZGYKKwkJZmkKKwknCisKKwlwcmludGYgJyVzJyAiJHRleHQiID4uZ2l0L2V4cGVjdGVkX3Rlc3RfZmlsZQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBFWFBFTlNJVkVfT05fV0lORE9XUyAic2V0dXAgbWF0Y2ggZmlsZSB0ZXN0IGZvciAkdGV4dCIgJworCQlmaWxlPSQoY2F0IC5naXQvZXhwZWN0ZWRfdGVzdF9maWxlKSAmJgorCQlpZiBzaG91bGRfY3JlYXRlX3Rlc3RfZmlsZSAiJGZpbGUiCisJCXRoZW4KKwkJCWRpcnM9JHtmaWxlJS8qfQorCQkJaWYgdGVzdCAiJGZpbGUiICE9ICIkZGlycyIKKwkJCXRoZW4KKwkJCQlta2RpciAtcCAtLSAiJGRpcnMiICYmCisJCQkJdG91Y2ggLS0gIi4vJHRleHQiCisJCQllbHNlCisJCQkJdG91Y2ggLS0gIi4vJGZpbGUiCisJCQlmaSAmJgorCQkJZ2l0IGFkZCAtQSAmJgorCQkJcHJpbnRmICIlcyIgIiRmaWxlIiA+LmdpdC9jcmVhdGVkX3Rlc3RfZmlsZQorCQllbGlmIHRlc3QgLWUgLmdpdC9jcmVhdGVkX3Rlc3RfZmlsZQorCQl0aGVuCisJCQlybSAuZ2l0L2NyZWF0ZWRfdGVzdF9maWxlCisJCWZpCisJJworCisJIyAkMTogQ2FzZSBzZW5zaXRpdmUgZ2xvYiBtYXRjaDogdGVzdC10b29sIHdpbGRtYXRjaCAmIGxzLWZpbGVzCisJbWF0Y2hfd2l0aF9mdW5jdGlvbiAiJHRleHQiICIkcGF0dGVybiIgJG1hdGNoX2dsb2IgIndpbGRtYXRjaCIKKwltYXRjaF93aXRoX2xzX2ZpbGVzICIkdGV4dCIgIiRwYXR0ZXJuIiAkbWF0Y2hfZmlsZV9nbG9iICJ3aWxkbWF0Y2giICIgLS1nbG9iLXBhdGhzcGVjcyIKKworCSMgJDI6IENhc2UgaW5zZW5zaXRpdmUgZ2xvYiBtYXRjaDogdGVzdC10b29sIHdpbGRtYXRjaCAmIGxzLWZpbGVzCisJbWF0Y2hfd2l0aF9mdW5jdGlvbiAiJHRleHQiICIkcGF0dGVybiIgJG1hdGNoX2lnbG9iICJpd2lsZG1hdGNoIgorCW1hdGNoX3dpdGhfbHNfZmlsZXMgIiR0ZXh0IiAiJHBhdHRlcm4iICRtYXRjaF9maWxlX2lnbG9iICJpd2lsZG1hdGNoIiAiIC0tZ2xvYi1wYXRoc3BlY3MgLS1pY2FzZS1wYXRoc3BlY3MiCisKKwkjICQzOiBDYXNlIHNlbnNpdGl2ZSBwYXRoIG1hdGNoOiB0ZXN0LXRvb2wgd2lsZG1hdGNoICYgbHMtZmlsZXMKKwltYXRjaF93aXRoX2Z1bmN0aW9uICIkdGV4dCIgIiRwYXR0ZXJuIiAkbWF0Y2hfcGF0aG1hdGNoICJwYXRobWF0Y2giCisJbWF0Y2hfd2l0aF9sc19maWxlcyAiJHRleHQiICIkcGF0dGVybiIgJG1hdGNoX2ZpbGVfcGF0aG1hdGNoICJwYXRobWF0Y2giICIiCisKKwkjICQ0OiBDYXNlIGluc2Vuc2l0aXZlIHBhdGggbWF0Y2g6IHRlc3QtdG9vbCB3aWxkbWF0Y2ggJiBscy1maWxlcworCW1hdGNoX3dpdGhfZnVuY3Rpb24gIiR0ZXh0IiAiJHBhdHRlcm4iICRtYXRjaF9wYXRobWF0Y2hpICJpcGF0aG1hdGNoIgorCW1hdGNoX3dpdGhfbHNfZmlsZXMgIiR0ZXh0IiAiJHBhdHRlcm4iICRtYXRjaF9maWxlX3BhdGhtYXRjaGkgImlwYXRobWF0Y2giICIgLS1pY2FzZS1wYXRoc3BlY3MiCit9CisKKyMgQmFzaWMgd2lsZG1hdGNoIGZlYXR1cmVzCittYXRjaCAxIDEgMSAxIGZvbyBmb28KK21hdGNoIDAgMCAwIDAgZm9vIGJhcgorbWF0Y2ggMSAxIDEgMSAnJyAiIgorbWF0Y2ggMSAxIDEgMSBmb28gJz8/PycKK21hdGNoIDAgMCAwIDAgZm9vICc/PycKK21hdGNoIDEgMSAxIDEgZm9vICcqJworbWF0Y2ggMSAxIDEgMSBmb28gJ2YqJworbWF0Y2ggMCAwIDAgMCBmb28gJypmJworbWF0Y2ggMSAxIDEgMSBmb28gJypmb28qJworbWF0Y2ggMSAxIDEgMSBmb29iYXIgJypvYiphKnIqJworbWF0Y2ggMSAxIDEgMSBhYWFhYWFhYmFiYWJhYiAnKmFiJworbWF0Y2ggMSAxIDEgMSAnZm9vKicgJ2Zvb1wqJworbWF0Y2ggMCAwIDAgMCBmb29iYXIgJ2Zvb1wqYmFyJworbWF0Y2ggMSAxIDEgMSAnZlxvbycgJ2ZcXG9vJworbWF0Y2ggMSAxIDEgMSBiYWxsICcqW2FsXT8nCittYXRjaCAwIDAgMCAwIHRlbiAnW3Rlbl0nCittYXRjaCAxIDEgMSAxIHRlbiAnKipbIXRlXScKK21hdGNoIDAgMCAwIDAgdGVuICcqKlshdGVuXScKK21hdGNoIDEgMSAxIDEgdGVuICd0W2EtZ11uJworbWF0Y2ggMCAwIDAgMCB0ZW4gJ3RbIWEtZ11uJworbWF0Y2ggMSAxIDEgMSB0b24gJ3RbIWEtZ11uJworbWF0Y2ggMSAxIDEgMSB0b24gJ3RbXmEtZ11uJworbWF0Y2ggMSAxIDEgMSAnYV1iJyAnYVtdXWInCittYXRjaCAxIDEgMSAxIGEtYiAnYVtdLV1iJworbWF0Y2ggMSAxIDEgMSAnYV1iJyAnYVtdLV1iJworbWF0Y2ggMCAwIDAgMCBhYWIgJ2FbXS1dYicKK21hdGNoIDEgMSAxIDEgYWFiICdhW11hLV1iJworbWF0Y2ggMSAxIDEgMSAnXScgJ10nCisKKyMgRXh0ZW5kZWQgc2xhc2gtbWF0Y2hpbmcgZmVhdHVyZXMKK21hdGNoIDAgMCAxIDEgJ2Zvby9iYXovYmFyJyAnZm9vKmJhcicKK21hdGNoIDAgMCAxIDEgJ2Zvby9iYXovYmFyJyAnZm9vKipiYXInCittYXRjaCAxIDEgMSAxICdmb29iYXpiYXInICdmb28qKmJhcicKK21hdGNoIDEgMSAxIDEgJ2Zvby9iYXovYmFyJyAnZm9vLyoqL2JhcicKK21hdGNoIDEgMSAwIDAgJ2Zvby9iYXovYmFyJyAnZm9vLyoqLyoqL2JhcicKK21hdGNoIDEgMSAxIDEgJ2Zvby9iL2Evei9iYXInICdmb28vKiovYmFyJworbWF0Y2ggMSAxIDEgMSAnZm9vL2IvYS96L2JhcicgJ2Zvby8qKi8qKi9iYXInCittYXRjaCAxIDEgMCAwICdmb28vYmFyJyAnZm9vLyoqL2JhcicKK21hdGNoIDEgMSAwIDAgJ2Zvby9iYXInICdmb28vKiovKiovYmFyJworbWF0Y2ggMCAwIDEgMSAnZm9vL2JhcicgJ2Zvbz9iYXInCittYXRjaCAwIDAgMSAxICdmb28vYmFyJyAnZm9vWy9dYmFyJworbWF0Y2ggMCAwIDEgMSAnZm9vL2JhcicgJ2Zvb1teYS16XWJhcicKK21hdGNoIDAgMCAxIDEgJ2Zvby9iYXInICdmW15laXVdW15laXVdW15laXVdW15laXVdW15laXVdcicKK21hdGNoIDEgMSAxIDEgJ2Zvby1iYXInICdmW15laXVdW15laXVdW15laXVdW15laXVdW15laXVdcicKK21hdGNoIDEgMSAwIDAgJ2ZvbycgJyoqL2ZvbycKK21hdGNoIDEgMSAxIDEgJ1hYWC9mb28nICcqKi9mb28nCittYXRjaCAxIDEgMSAxICdiYXIvYmF6L2ZvbycgJyoqL2ZvbycKK21hdGNoIDAgMCAxIDEgJ2Jhci9iYXovZm9vJyAnKi9mb28nCittYXRjaCAwIDAgMSAxICdmb28vYmFyL2JheicgJyoqL2JhcionCittYXRjaCAxIDEgMSAxICdkZWVwL2Zvby9iYXIvYmF6JyAnKiovYmFyLyonCittYXRjaCAwIDAgMSAxICdkZWVwL2Zvby9iYXIvYmF6LycgJyoqL2Jhci8qJworbWF0Y2ggMSAxIDEgMSAnZGVlcC9mb28vYmFyL2Jhei8nICcqKi9iYXIvKionCittYXRjaCAwIDAgMCAwICdkZWVwL2Zvby9iYXInICcqKi9iYXIvKicKK21hdGNoIDEgMSAxIDEgJ2RlZXAvZm9vL2Jhci8nICcqKi9iYXIvKionCittYXRjaCAwIDAgMSAxICdmb28vYmFyL2JheicgJyoqL2JhcioqJworbWF0Y2ggMSAxIDEgMSAnZm9vL2Jhci9iYXoveCcgJyovYmFyLyoqJworbWF0Y2ggMCAwIDEgMSAnZGVlcC9mb28vYmFyL2Jhei94JyAnKi9iYXIvKionCittYXRjaCAxIDEgMSAxICdkZWVwL2Zvby9iYXIvYmF6L3gnICcqKi9iYXIvKi8qJworCisjIFZhcmlvdXMgYWRkaXRpb25hbCB0ZXN0cworbWF0Y2ggMCAwIDAgMCAnYWNydCcgJ2FbYy1jXXN0JworbWF0Y2ggMSAxIDEgMSAnYWNydCcgJ2FbYy1jXXJ0JworbWF0Y2ggMCAwIDAgMCAnXScgJ1shXS1dJworbWF0Y2ggMSAxIDEgMSAnYScgJ1shXS1dJworbWF0Y2ggMCAwIDAgMCAnJyAnXCcKK21hdGNoIDAgMCAwIDAgXAorICAgICAgMSAxIDEgMSAnXCcgJ1wnCittYXRjaCAwIDAgMCAwICdYWFgvXCcgJyovXCcKK21hdGNoIDEgMSAxIDEgJ1hYWC9cJyAnKi9cXCcKK21hdGNoIDEgMSAxIDEgJ2ZvbycgJ2ZvbycKK21hdGNoIDEgMSAxIDEgJ0Bmb28nICdAZm9vJworbWF0Y2ggMCAwIDAgMCAnZm9vJyAnQGZvbycKK21hdGNoIDEgMSAxIDEgJ1thYl0nICdcW2FiXScKK21hdGNoIDEgMSAxIDEgJ1thYl0nICdbW11hYl0nCittYXRjaCAxIDEgMSAxICdbYWJdJyAnW1s6XWFiXScKK21hdGNoIDAgMCAwIDAgJ1thYl0nICdbWzo6XWFiXScKK21hdGNoIDEgMSAxIDEgJ1thYl0nICdbWzpkaWdpdF1hYl0nCittYXRjaCAxIDEgMSAxICdbYWJdJyAnW1xbOl1hYl0nCittYXRjaCAxIDEgMSAxICc/YT9iJyAnXD8/XD9iJworbWF0Y2ggMSAxIDEgMSAnYWJjJyAnXGFcYlxjJworbWF0Y2ggMCAwIDAgMCBcCisgICAgICBFIEUgRSBFICdmb28nICcnCittYXRjaCAxIDEgMSAxICdmb28vYmFyL2Jhei90bycgJyoqL3Rbb10nCisKKyMgQ2hhcmFjdGVyIGNsYXNzIHRlc3RzCittYXRjaCAxIDEgMSAxICdhMUInICdbWzphbHBoYTpdXVtbOmRpZ2l0Ol1dW1s6dXBwZXI6XV0nCittYXRjaCAwIDEgMCAxICdhJyAnW1s6ZGlnaXQ6XVs6dXBwZXI6XVs6c3BhY2U6XV0nCittYXRjaCAxIDEgMSAxICdBJyAnW1s6ZGlnaXQ6XVs6dXBwZXI6XVs6c3BhY2U6XV0nCittYXRjaCAxIDEgMSAxICcxJyAnW1s6ZGlnaXQ6XVs6dXBwZXI6XVs6c3BhY2U6XV0nCittYXRjaCAwIDAgMCAwICcxJyAnW1s6ZGlnaXQ6XVs6dXBwZXI6XVs6c3BhY2k6XV0nCittYXRjaCAxIDEgMSAxICcgJyAnW1s6ZGlnaXQ6XVs6dXBwZXI6XVs6c3BhY2U6XV0nCittYXRjaCAwIDAgMCAwICcuJyAnW1s6ZGlnaXQ6XVs6dXBwZXI6XVs6c3BhY2U6XV0nCittYXRjaCAxIDEgMSAxICcuJyAnW1s6ZGlnaXQ6XVs6cHVuY3Q6XVs6c3BhY2U6XV0nCittYXRjaCAxIDEgMSAxICc1JyAnW1s6eGRpZ2l0Ol1dJworbWF0Y2ggMSAxIDEgMSAnZicgJ1tbOnhkaWdpdDpdXScKK21hdGNoIDEgMSAxIDEgJ0QnICdbWzp4ZGlnaXQ6XV0nCittYXRjaCAxIDEgMSAxICdfJyAnW1s6YWxudW06XVs6YWxwaGE6XVs6Ymxhbms6XVs6Y250cmw6XVs6ZGlnaXQ6XVs6Z3JhcGg6XVs6bG93ZXI6XVs6cHJpbnQ6XVs6cHVuY3Q6XVs6c3BhY2U6XVs6dXBwZXI6XVs6eGRpZ2l0Ol1dJworbWF0Y2ggMSAxIDEgMSAnLicgJ1teWzphbG51bTpdWzphbHBoYTpdWzpibGFuazpdWzpjbnRybDpdWzpkaWdpdDpdWzpsb3dlcjpdWzpzcGFjZTpdWzp1cHBlcjpdWzp4ZGlnaXQ6XV0nCittYXRjaCAxIDEgMSAxICc1JyAnW2EtY1s6ZGlnaXQ6XXgtel0nCittYXRjaCAxIDEgMSAxICdiJyAnW2EtY1s6ZGlnaXQ6XXgtel0nCittYXRjaCAxIDEgMSAxICd5JyAnW2EtY1s6ZGlnaXQ6XXgtel0nCittYXRjaCAwIDAgMCAwICdxJyAnW2EtY1s6ZGlnaXQ6XXgtel0nCisKKyMgQWRkaXRpb25hbCB0ZXN0cywgaW5jbHVkaW5nIHNvbWUgbWFsZm9ybWVkIHdpbGRtYXRjaCBwYXR0ZXJucworbWF0Y2ggMSAxIDEgMSAnXScgJ1tcXC1eXScKK21hdGNoIDAgMCAwIDAgJ1snICdbXFwtXl0nCittYXRjaCAxIDEgMSAxICctJyAnW1wtX10nCittYXRjaCAxIDEgMSAxICddJyAnW1xdXScKK21hdGNoIDAgMCAwIDAgJ1xdJyAnW1xdXScKK21hdGNoIDAgMCAwIDAgJ1wnICdbXF1dJworbWF0Y2ggMCAwIDAgMCAnYWInICdhW11iJworbWF0Y2ggMCAwIDAgMCBcCisgICAgICAxIDEgMSAxICdhW11iJyAnYVtdYicKK21hdGNoIDAgMCAwIDAgXAorICAgICAgMSAxIDEgMSAnYWJbJyAnYWJbJworbWF0Y2ggMCAwIDAgMCAnYWInICdbIScKK21hdGNoIDAgMCAwIDAgJ2FiJyAnWy0nCittYXRjaCAxIDEgMSAxICctJyAnWy1dJworbWF0Y2ggMCAwIDAgMCAnLScgJ1thLScKK21hdGNoIDAgMCAwIDAgJy0nICdbIWEtJworbWF0Y2ggMSAxIDEgMSAnLScgJ1stLUFdJworbWF0Y2ggMSAxIDEgMSAnNScgJ1stLUFdJworbWF0Y2ggMSAxIDEgMSAnICcgJ1sgLS1dJworbWF0Y2ggMSAxIDEgMSAnJCcgJ1sgLS1dJworbWF0Y2ggMSAxIDEgMSAnLScgJ1sgLS1dJworbWF0Y2ggMCAwIDAgMCAnMCcgJ1sgLS1dJworbWF0Y2ggMSAxIDEgMSAnLScgJ1stLS1dJworbWF0Y2ggMSAxIDEgMSAnLScgJ1stLS0tLS1dJworbWF0Y2ggMCAwIDAgMCAnaicgJ1thLWUtbl0nCittYXRjaCAxIDEgMSAxICctJyAnW2EtZS1uXScKK21hdGNoIDEgMSAxIDEgJ2EnICdbIS0tLS0tLV0nCittYXRjaCAwIDAgMCAwICdbJyAnW10tYV0nCittYXRjaCAxIDEgMSAxICdeJyAnW10tYV0nCittYXRjaCAwIDAgMCAwICdeJyAnWyFdLWFdJworbWF0Y2ggMSAxIDEgMSAnWycgJ1shXS1hXScKK21hdGNoIDEgMSAxIDEgJ14nICdbYV5iY10nCittYXRjaCAxIDEgMSAxICctYl0nICdbYS1dYl0nCittYXRjaCAwIDAgMCAwICdcJyAnW1xdJworbWF0Y2ggMSAxIDEgMSAnXCcgJ1tcXF0nCittYXRjaCAwIDAgMCAwICdcJyAnWyFcXF0nCittYXRjaCAxIDEgMSAxICdHJyAnW0EtXFxdJworbWF0Y2ggMCAwIDAgMCAnYWFhYmJiJyAnYiphJworbWF0Y2ggMCAwIDAgMCAnYWFiY2FhJyAnKmJhKicKK21hdGNoIDEgMSAxIDEgJywnICdbLF0nCittYXRjaCAxIDEgMSAxICcsJyAnW1xcLF0nCittYXRjaCAxIDEgMSAxICdcJyAnW1xcLF0nCittYXRjaCAxIDEgMSAxICctJyAnWywtLl0nCittYXRjaCAwIDAgMCAwICcrJyAnWywtLl0nCittYXRjaCAwIDAgMCAwICctLl0nICdbLC0uXScKK21hdGNoIDEgMSAxIDEgJzInICdbXDEtXDNdJworbWF0Y2ggMSAxIDEgMSAnMycgJ1tcMS1cM10nCittYXRjaCAwIDAgMCAwICc0JyAnW1wxLVwzXScKK21hdGNoIDEgMSAxIDEgJ1wnICdbWy1cXV0nCittYXRjaCAxIDEgMSAxICdbJyAnW1stXF1dJworbWF0Y2ggMSAxIDEgMSAnXScgJ1tbLVxdXScKK21hdGNoIDAgMCAwIDAgJy0nICdbWy1cXV0nCisKKyMgVGVzdCByZWN1cnNpb24KK21hdGNoIDEgMSAxIDEgJy1hZG9iZS1jb3VyaWVyLWJvbGQtby1ub3JtYWwtLTEyLTEyMC03NS03NS1tLTcwLWlzbzg4NTktMScgJy0qLSotKi0qLSotKi0xMi0qLSotKi1tLSotKi0qJworbWF0Y2ggMCAwIDAgMCAnLWFkb2JlLWNvdXJpZXItYm9sZC1vLW5vcm1hbC0tMTItMTIwLTc1LTc1LVgtNzAtaXNvODg1OS0xJyAnLSotKi0qLSotKi0qLTEyLSotKi0qLW0tKi0qLSonCittYXRjaCAwIDAgMCAwICctYWRvYmUtY291cmllci1ib2xkLW8tbm9ybWFsLS0xMi0xMjAtNzUtNzUtLy03MC1pc284ODU5LTEnICctKi0qLSotKi0qLSotMTItKi0qLSotbS0qLSotKicKK21hdGNoIDEgMSAxIDEgJ1hYWC9hZG9iZS9jb3VyaWVyL2JvbGQvby9ub3JtYWwvLzEyLzEyMC83NS83NS9tLzcwL2lzbzg4NTkvMScgJ1hYWC8qLyovKi8qLyovKi8xMi8qLyovKi9tLyovKi8qJworbWF0Y2ggMCAwIDAgMCAnWFhYL2Fkb2JlL2NvdXJpZXIvYm9sZC9vL25vcm1hbC8vMTIvMTIwLzc1Lzc1L1gvNzAvaXNvODg1OS8xJyAnWFhYLyovKi8qLyovKi8qLzEyLyovKi8qL20vKi8qLyonCittYXRjaCAxIDEgMSAxICdhYmNkL2FiY2RlZmcvYWJjZGVmZ2hpamsvYWJjZGVmZ2hpamtsbW5vcC50eHQnICcqKi8qYSpiKmcqbip0JworbWF0Y2ggMCAwIDAgMCAnYWJjZC9hYmNkZWZnL2FiY2RlZmdoaWprL2FiY2RlZmdoaWprbG1ub3AudHh0eicgJyoqLyphKmIqZypuKnQnCittYXRjaCAwIDAgMCAwIGZvbyAnKi8qLyonCittYXRjaCAwIDAgMCAwIGZvby9iYXIgJyovKi8qJworbWF0Y2ggMSAxIDEgMSBmb28vYmJhL2FyciAnKi8qLyonCittYXRjaCAwIDAgMSAxIGZvby9iYi9hYS9yciAnKi8qLyonCittYXRjaCAxIDEgMSAxIGZvby9iYi9hYS9yciAnKiovKiovKionCittYXRjaCAxIDEgMSAxIGFiY1hkZWZYZ2hpICcqWCppJworbWF0Y2ggMCAwIDEgMSBhYi9jWGQvZWZYZy9oaSAnKlgqaScKK21hdGNoIDEgMSAxIDEgYWIvY1hkL2VmWGcvaGkgJyovKlgqLyovKmknCittYXRjaCAxIDEgMSAxIGFiL2NYZC9lZlhnL2hpICcqKi8qWCovKiovKmknCisKKyMgRXh0cmEgcGF0aG1hdGNoIHRlc3RzCittYXRjaCAwIDAgMCAwIGZvbyBmbworbWF0Y2ggMSAxIDEgMSBmb28vYmFyIGZvby9iYXIKK21hdGNoIDEgMSAxIDEgZm9vL2JhciAnZm9vLyonCittYXRjaCAwIDAgMSAxIGZvby9iYmEvYXJyICdmb28vKicKK21hdGNoIDEgMSAxIDEgZm9vL2JiYS9hcnIgJ2Zvby8qKicKK21hdGNoIDAgMCAxIDEgZm9vL2JiYS9hcnIgJ2ZvbyonCittYXRjaCAwIDAgMSAxIFwKKyAgICAgIDEgMSAxIDEgZm9vL2JiYS9hcnIgJ2ZvbyoqJworbWF0Y2ggMCAwIDEgMSBmb28vYmJhL2FyciAnZm9vLyphcnInCittYXRjaCAwIDAgMSAxIGZvby9iYmEvYXJyICdmb28vKiphcnInCittYXRjaCAwIDAgMCAwIGZvby9iYmEvYXJyICdmb28vKnonCittYXRjaCAwIDAgMCAwIGZvby9iYmEvYXJyICdmb28vKip6JworbWF0Y2ggMCAwIDEgMSBmb28vYmFyICdmb28/YmFyJworbWF0Y2ggMCAwIDEgMSBmb28vYmFyICdmb29bL11iYXInCittYXRjaCAwIDAgMSAxIGZvby9iYXIgJ2Zvb1teYS16XWJhcicKK21hdGNoIDAgMCAxIDEgYWIvY1hkL2VmWGcvaGkgJypYZyppJworCisjIEV4dHJhIGNhc2Utc2Vuc2l0aXZpdHkgdGVzdHMKK21hdGNoIDAgMSAwIDEgJ2EnICdbQS1aXScKK21hdGNoIDEgMSAxIDEgJ0EnICdbQS1aXScKK21hdGNoIDAgMSAwIDEgJ0EnICdbYS16XScKK21hdGNoIDEgMSAxIDEgJ2EnICdbYS16XScKK21hdGNoIDAgMSAwIDEgJ2EnICdbWzp1cHBlcjpdXScKK21hdGNoIDEgMSAxIDEgJ0EnICdbWzp1cHBlcjpdXScKK21hdGNoIDAgMSAwIDEgJ0EnICdbWzpsb3dlcjpdXScKK21hdGNoIDEgMSAxIDEgJ2EnICdbWzpsb3dlcjpdXScKK21hdGNoIDAgMSAwIDEgJ0EnICdbQi1aYV0nCittYXRjaCAxIDEgMSAxICdhJyAnW0ItWmFdJworbWF0Y2ggMCAxIDAgMSAnQScgJ1tCLWFdJworbWF0Y2ggMSAxIDEgMSAnYScgJ1tCLWFdJworbWF0Y2ggMCAxIDAgMSAneicgJ1taLXldJworbWF0Y2ggMSAxIDEgMSAnWicgJ1taLXldJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaCBiL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xOGJhZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCkBAIC0wLDAgKzEsMTY1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBscy10cmVlIHRlc3QuCisKK1RoaXMgdGVzdCBydW5zIGdpdCBscy10cmVlIHdpdGggdGhlIGZvbGxvd2luZyBpbiBhIHRyZWUuCisKKyAgICBwYXRoMCAgICAgICAtIGEgZmlsZQorICAgIHBhdGgxCS0gYSBzeW1saW5rCisgICAgcGF0aDIvZm9vICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMi9iYXpibyAtIGEgc3ltbGluayBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgyL2Jhei9iIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5CisKK1RoZSBuZXcgcGF0aCByZXN0cmljdGlvbiBjb2RlIHNob3VsZCBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIHBhdGgyIGFuZAorcGF0aDIvYmF6LiAgQWxzbyBwYXRoMC8gc2hvdWxkIHNub3cgbm90aGluZy4KKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2V0dXAnIFwKKyAgICAnbWtkaXIgcGF0aDIgcGF0aDIvYmF6ICYmCisgICAgIGVjaG8gSGkgPnBhdGgwICYmCisgICAgIHRlc3RfbG5fc19hZGQgcGF0aDAgcGF0aDEgJiYKKyAgICAgdGVzdF9sbl9zX2FkZCAuLi9wYXRoMSBwYXRoMi9iYXpibyAmJgorICAgICBlY2hvIExvID5wYXRoMi9mb28gJiYKKyAgICAgZWNobyBNaSA+cGF0aDIvYmF6L2IgJiYKKyAgICAgZmluZCBwYXRoPyBcKCAtdHlwZSBmIC1vIC10eXBlIGwgXCkgLXByaW50IHwKKyAgICAgeGFyZ3MgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAmJgorICAgICB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisgICAgIGVjaG8gJHRyZWUnCisKK3Rlc3Rfb3V0cHV0ICgpIHsKKyAgICBzZWQgLWUgInMvICRPSURfUkVHRVgJLyBYCS8iIDxjdXJyZW50ID5jaGVjaworICAgIHRlc3RfY21wIGV4cGVjdGVkIGNoZWNrCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIHBsYWluJyBcCisgICAgJ2dpdCBscy10cmVlICR0cmVlID5jdXJyZW50ICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCXBhdGgwCisxMjAwMDAgYmxvYiBYCXBhdGgxCiswNDAwMDAgdHJlZSBYCXBhdGgyCitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIHJlY3Vyc2l2ZScgXAorICAgICdnaXQgbHMtdHJlZSAtciAkdHJlZSA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAlwYXRoMAorMTIwMDAwIGJsb2IgWAlwYXRoMQorMTAwNjQ0IGJsb2IgWAlwYXRoMi9iYXovYgorMTIwMDAwIGJsb2IgWAlwYXRoMi9iYXpibworMTAwNjQ0IGJsb2IgWAlwYXRoMi9mb28KK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgcmVjdXJzaXZlIHdpdGggLXQnIFwKKyAgICAnZ2l0IGxzLXRyZWUgLXIgLXQgJHRyZWUgPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJcGF0aDAKKzEyMDAwMCBibG9iIFgJcGF0aDEKKzA0MDAwMCB0cmVlIFgJcGF0aDIKKzA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CisxMDA2NDQgYmxvYiBYCXBhdGgyL2Jhei9iCisxMjAwMDAgYmxvYiBYCXBhdGgyL2JhemJvCisxMDA2NDQgYmxvYiBYCXBhdGgyL2ZvbworRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSByZWN1cnNpdmUgd2l0aCAtZCcgXAorICAgICdnaXQgbHMtdHJlZSAtciAtZCAkdHJlZSA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMDQwMDAwIHRyZWUgWAlwYXRoMgorMDQwMDAwIHRyZWUgWAlwYXRoMi9iYXoKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgZmlsdGVyZWQgd2l0aCBwYXRoJyBcCisgICAgJ2dpdCBscy10cmVlICR0cmVlIHBhdGggPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKworCisjIGl0IHVzZWQgdG8gYmUgcGF0aDEgYW5kIHRoZW4gcGF0aDAsIGJ1dCB3aXRoIHBhdGhzcGVjIHNlbWFudGljcworIyB0aGV5IGFyZSBzaG93biBpbiBjYW5vbmljYWwgb3JkZXIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgxIHBhdGgwJyBcCisgICAgJ2dpdCBscy10cmVlICR0cmVlIHBhdGgxIHBhdGgwID5jdXJyZW50ICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCXBhdGgwCisxMjAwMDAgYmxvYiBYCXBhdGgxCitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIGZpbHRlcmVkIHdpdGggcGF0aDAvJyBcCisgICAgJ2dpdCBscy10cmVlICR0cmVlIHBhdGgwLyA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCisjIEl0IHVzZWQgdG8gc2hvdyBwYXRoMiBhbmQgaXRzIGltbWVkaWF0ZSBjaGlsZHJlbiBidXQKKyMgd2l0aCBwYXRoc3BlYyBzZW1hbnRpY3MgaXQgc2hvd3Mgb25seSBwYXRoMgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgZmlsdGVyZWQgd2l0aCBwYXRoMicgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMiA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMDQwMDAwIHRyZWUgWAlwYXRoMgorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCisjIC4uLiBhbmQgcGF0aDIvIHNob3dzIHRoZSBjaGlsZHJlbi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIGZpbHRlcmVkIHdpdGggcGF0aDIvJyBcCisgICAgJ2dpdCBscy10cmVlICR0cmVlIHBhdGgyLyA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMDQwMDAwIHRyZWUgWAlwYXRoMi9iYXoKKzEyMDAwMCBibG9iIFgJcGF0aDIvYmF6Ym8KKzEwMDY0NCBibG9iIFgJcGF0aDIvZm9vCitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKKyMgVGhlIHNhbWUgY2hhbmdlIC0tIGV4YWN0IG1hdGNoIGRvZXMgbm90IHNob3cgY2hpbGRyZW4gb2YKKyMgcGF0aDIvYmF6Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgyL2JheicgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMi9iYXogPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIGZpbHRlcmVkIHdpdGggcGF0aDIvYmFrJyBcCisgICAgJ2dpdCBscy10cmVlICR0cmVlIHBhdGgyL2JhayA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSAtdCBmaWx0ZXJlZCB3aXRoIHBhdGgyL2JhaycgXAorICAgICdnaXQgbHMtdHJlZSAtdCAkdHJlZSBwYXRoMi9iYWsgPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzA0MDAwMCB0cmVlIFgJcGF0aDIKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgd2l0aCBvbmUgcGF0aCBhIHByZWZpeCBvZiB0aGUgb3RoZXInIFwKKyAgICAnZ2l0IGxzLXRyZWUgJHRyZWUgcGF0aDIvYmF6IHBhdGgyL2JhemJvID5jdXJyZW50ICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCiswNDAwMDAgdHJlZSBYCXBhdGgyL2JhegorMTIwMDAwIGJsb2IgWAlwYXRoMi9iYXpibworRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMxMDEtbHMtdHJlZS1kaXJuYW1lLnNoIGIvdC90MzEwMS1scy10cmVlLWRpcm5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTJiZjMxMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMxMDEtbHMtdHJlZS1kaXJuYW1lLnNoCkBAIC0wLDAgKzEsMjI5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjIENvcHlyaWdodCAoYykgMjAwNSBSb2JlcnQgRml0enNpbW9ucworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbHMtdHJlZSBkaXJlY3RvcnkgYW5kIGZpbGVuYW1lcyBoYW5kbGluZy4KKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLXRyZWUgd2l0aCB0aGUgZm9sbG93aW5nIGluIGEgdHJlZS4KKworICAgIDEudHh0ICAgICAgICAgICAgICAtIGEgZmlsZQorICAgIDIudHh0ICAgICAgICAgICAgICAtIGEgZmlsZQorICAgIHBhdGgwL2EvYi9jLzEudHh0ICAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgxL2IvYy8xLnR4dCAgICAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgyLzEudHh0ICAgICAgICAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgzLzEudHh0ICAgICAgICAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgzLzIudHh0ICAgICAgICAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorCitUZXN0IHRoZSBoYW5kbGluZyBvZiBtdWx0aXBsZSBkaXJlY3RvcmllcyB3aGljaCBoYXZlIG1hdGNoaW5nIGZpbGUKK2VudHJpZXMuICBBbHNvIHRlc3Qgb2RkIGZpbGVuYW1lIGFuZCBtaXNzaW5nIGVudHJpZXMgaGFuZGxpbmcuCisnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIDExMSA+MS50eHQgJiYKKwllY2hvIDIyMiA+Mi50eHQgJiYKKwlta2RpciBwYXRoMCBwYXRoMC9hIHBhdGgwL2EvYiBwYXRoMC9hL2IvYyAmJgorCWVjaG8gMTExID5wYXRoMC9hL2IvYy8xLnR4dCAmJgorCW1rZGlyIHBhdGgxIHBhdGgxL2IgcGF0aDEvYi9jICYmCisJZWNobyAxMTEgPnBhdGgxL2IvYy8xLnR4dCAmJgorCW1rZGlyIHBhdGgyICYmCisJZWNobyAxMTEgPnBhdGgyLzEudHh0ICYmCisJbWtkaXIgcGF0aDMgJiYKKwllY2hvIDExMSA+cGF0aDMvMS50eHQgJiYKKwllY2hvIDIyMiA+cGF0aDMvMi50eHQgJiYKKwlmaW5kICoudHh0IHBhdGgqIFwoIC10eXBlIGYgLW8gLXR5cGUgbCBcKSAtcHJpbnQgfAorCXhhcmdzIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZWNobyAkdHJlZQorJworCit0ZXN0X291dHB1dCAoKSB7CisJc2VkIC1lICJzLyAkT0lEX1JFR0VYCS8gWAkvIiA8Y3VycmVudCA+Y2hlY2sgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjaGVjaworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIHBsYWluJyAnCisJZ2l0IGxzLXRyZWUgJHRyZWUgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAkyLnR4dAorMDQwMDAwIHRyZWUgWAlwYXRoMAorMDQwMDAwIHRyZWUgWAlwYXRoMQorMDQwMDAwIHRyZWUgWAlwYXRoMgorMDQwMDAwIHRyZWUgWAlwYXRoMworRU9GCisJdGVzdF9vdXRwdXQKKycKKworIyBSZWN1cnNpdmUgZG9lcyBub3Qgc2hvdyB0cmVlIG5vZGVzIGFueW1vcmUuLi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgcmVjdXJzaXZlJyAnCisJZ2l0IGxzLXRyZWUgLXIgJHRyZWUgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAkyLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMC9hL2IvYy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMS9iL2MvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDIvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMi50eHQKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmlsdGVyIDEudHh0JyAnCisJZ2l0IGxzLXRyZWUgJHRyZWUgMS50eHQgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorRU9GCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBmaWx0ZXIgcGF0aDEvYi9jLzEudHh0JyAnCisJZ2l0IGxzLXRyZWUgJHRyZWUgcGF0aDEvYi9jLzEudHh0ID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJcGF0aDEvYi9jLzEudHh0CitFT0YKKwl0ZXN0X291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIGZpbHRlciBhbGwgMS50eHQgZmlsZXMnICcKKwlnaXQgbHMtdHJlZSAkdHJlZSAxLnR4dCBwYXRoMC9hL2IvYy8xLnR4dCBcCisJCXBhdGgxL2IvYy8xLnR4dCBwYXRoMi8xLnR4dCBwYXRoMy8xLnR4dCA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCTEudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgwL2EvYi9jLzEudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgxL2IvYy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMi8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMy8xLnR4dAorRU9GCisJdGVzdF9vdXRwdXQKKycKKworIyBJIGFtIG5vdCBzbyBzdXJlIGFib3V0IHRoaXMgb25lIGFmdGVyIGxzLXRyZWUgZG9pbmcgcGF0aHNwZWMgbWF0Y2guCisjIEhhdmluZyBib3RoIHBhdGgwL2EgYW5kIHBhdGgwL2EvYi9jIG1ha2VzIHBhdGgwL2EgcmVkdW5kYW50LCBhbmQKKyMgaXQgYmVoYXZlcyBhcyBpZiBwYXRoMC9hL2IvYywgcGF0aDEvYi9jLCBwYXRoMiBhbmQgcGF0aDMgYXJlIHNwZWNpZmllZC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmlsdGVyIGRpcmVjdG9yaWVzJyAnCisJZ2l0IGxzLXRyZWUgJHRyZWUgcGF0aDMgcGF0aDIgcGF0aDAvYS9iL2MgcGF0aDEvYi9jIHBhdGgwL2EgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMDQwMDAwIHRyZWUgWAlwYXRoMC9hL2IvYworMDQwMDAwIHRyZWUgWAlwYXRoMS9iL2MKKzA0MDAwMCB0cmVlIFgJcGF0aDIKKzA0MDAwMCB0cmVlIFgJcGF0aDMKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKKyMgQWdhaW4sIGR1cGxpY2F0ZXMgYXJlIGZpbHRlcmVkIGF3YXkgc28gdGhpcyBpcyBlcXVpdmFsZW50IHRvCisjIGhhdmluZyAxLnR4dCBhbmQgcGF0aDMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmlsdGVyIG9kZCBuYW1lcycgJworCWdpdCBscy10cmVlICR0cmVlIDEudHh0IC4vMS50eHQgLi8vMS50eHQgXAorCQlwYXRoMy8xLnR4dCBwYXRoMy8uLzEudHh0IHBhdGgzIHBhdGgzLy8gPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMy8yLnR4dAorRU9GCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBmaWx0ZXIgbWlzc2luZyBmaWxlcyBhbmQgZXh0cmEgc2xhc2hlcycgJworCWdpdCBscy10cmVlICR0cmVlIDEudHh0LyBhYmMudHh0IFwKKwkJcGF0aDMvLzIzLnR4dCBwYXRoMy8yLnR4dC8vLyA+Y3VycmVudCAmJgorCT5leHBlY3RlZCAmJgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmlsdGVyIGlzIGxlYWRpbmcgcGF0aCBtYXRjaCcgJworCWdpdCBscy10cmVlICR0cmVlIHBhIHBhdGgzL2EgPmN1cnJlbnQgJiYKKwk+ZXhwZWN0ZWQgJiYKKwl0ZXN0X291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIC0tZnVsbC1uYW1lJyAnCisJKAorCQljZCBwYXRoMCAmJgorCQlnaXQgbHMtdHJlZSAtLWZ1bGwtbmFtZSAkdHJlZSBhCisJKSA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCiswNDAwMDAgdHJlZSBYCXBhdGgwL2EKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgLS1mdWxsLXRyZWUnICcKKwkoCisJCWNkIHBhdGgxL2IvYyAmJgorCQlnaXQgbHMtdHJlZSAtLWZ1bGwtdHJlZSAkdHJlZQorCSkgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAkyLnR4dAorMDQwMDAwIHRyZWUgWAlwYXRoMAorMDQwMDAwIHRyZWUgWAlwYXRoMQorMDQwMDAwIHRyZWUgWAlwYXRoMgorMDQwMDAwIHRyZWUgWAlwYXRoMworRU9GCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSAtLWZ1bGwtdHJlZSAtcicgJworCSgKKwkJY2QgcGF0aDMvICYmCisJCWdpdCBscy10cmVlIC0tZnVsbC10cmVlIC1yICR0cmVlCisJKSA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCTEudHh0CisxMDA2NDQgYmxvYiBYCTIudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgwL2EvYi9jLzEudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgxL2IvYy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMi8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMy8yLnR4dAorRU9GCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSAtLWFiYnJldj01JyAnCisJZ2l0IGxzLXRyZWUgLS1hYmJyZXY9NSAkdHJlZSA+Y3VycmVudCAmJgorCXNlZCAtZSAicy8gJF94MDVbMC05YS1mXSoJLyBYCS8iIDxjdXJyZW50ID5jaGVjayAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCTEudHh0CisxMDA2NDQgYmxvYiBYCTIudHh0CiswNDAwMDAgdHJlZSBYCXBhdGgwCiswNDAwMDAgdHJlZSBYCXBhdGgxCiswNDAwMDAgdHJlZSBYCXBhdGgyCiswNDAwMDAgdHJlZSBYCXBhdGgzCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBjaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIC0tbmFtZS1vbmx5JyAnCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgJHRyZWUgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMS50eHQKKzIudHh0CitwYXRoMAorcGF0aDEKK3BhdGgyCitwYXRoMworRU9GCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSAtLW5hbWUtb25seSAtcicgJworCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IC1yICR0cmVlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEudHh0CisyLnR4dAorcGF0aDAvYS9iL2MvMS50eHQKK3BhdGgxL2IvYy8xLnR4dAorcGF0aDIvMS50eHQKK3BhdGgzLzEudHh0CitwYXRoMy8yLnR4dAorRU9GCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMTAyLWxzLXRyZWUtd2lsZGNhcmRzLnNoIGIvdC90MzEwMi1scy10cmVlLXdpbGRjYXJkcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZTE2YzZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzEwMi1scy10cmVlLXdpbGRjYXJkcy5zaApAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbHMtdHJlZSB3aXRoKG91dCkgZ2xvYnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIGEgYWEgImFbYV0iICYmCisJdG91Y2ggYS9vbmUgYWEvdHdvICJhW2FdL3RocmVlIiAmJgorCWdpdCBhZGQgYS9vbmUgYWEvdHdvICJhW2FdL3RocmVlIiAmJgorCWdpdCBjb21taXQgLW0gdGVzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIGFbYV0gbWF0Y2hlcyBsaXRlcmFsbHknICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkxMDA2NDQgYmxvYiAkRU1QVFlfQkxPQglhW2FdL3RocmVlCisJRU9GCisJZ2l0IGxzLXRyZWUgLXIgSEVBRCAiYVthXSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBvdXRzaWRlIHByZWZpeCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTEwMDY0NCBibG9iICRFTVBUWV9CTE9CCS4uL2FbYV0vdGhyZWUKKwlFT0YKKwkoIGNkIGFhICYmIGdpdCBscy10cmVlIC1yIEhFQUQgIi4uL2FbYV0iICkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbHMtdHJlZSBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBuZWdhdGVkIHBhdGhzcGVjJyAnCisJZ2l0IGxzLWZpbGVzICI6KGV4Y2x1ZGUpYSIgImEqIiA+ZXhwZWN0ICYmCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgLXIgSEVBRCAiOihleGNsdWRlKWEiICJhKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMTAzLWxzLXRyZWUtbWlzYy5zaCBiL3QvdDMxMDMtbHMtdHJlZS1taXNjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE0NTIwOTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMTAzLWxzLXRyZWUtbWlzYy5zaApAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nCitNaXNjZWxsYW5lb3VzIHRlc3RzIGZvciBnaXQgbHMtdHJlZS4KKworCSAgICAgIDEuIGdpdCBscy10cmVlIGZhaWxzIGluIHByZXNlbmNlIG9mIHRyZWUgZGFtYWdlLgorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIGEgJiYKKwl0b3VjaCBhL29uZSAmJgorCWdpdCBhZGQgYS9vbmUgJiYKKwlnaXQgY29tbWl0IC1tIHRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBmYWlscyB3aXRoIG5vbi16ZXJvIGV4aXQgY29kZSBvbiBicm9rZW4gdHJlZScgJworCXRyZWU9JChnaXQgcmV2LXBhcnNlIEhFQUQ6YSkgJiYKKwlybSAtZiAuZ2l0L29iamVjdHMvJChlY2hvICR0cmVlIHwgc2VkIC1lICJzLF5cKC4uXCksXDEvLCIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLXRyZWUgLXIgSEVBRAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMyMDAtYnJhbmNoLnNoIGIvdC90MzIwMC1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDExYTcwYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMyMDAtYnJhbmNoLnNoCkBAIC0wLDAgKzEsMTM5MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBBbW9zIFdhdGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYnJhbmNoIGFzc29ydGVkIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGEgdHJpdmlhbCByZXBvc2l0b3J5JyAnCisJZWNobyBIZWxsbyA+QSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQSAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0LiIgJiYKKwllY2hvIFdvcmxkID4+QSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQSAmJgorCWdpdCBjb21taXQgLW0gIlNlY29uZCBjb21taXQuIiAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLS1oZWxwIHNob3VsZCBub3QgaGF2ZSBjcmVhdGVkIGEgYm9ndXMgYnJhbmNoJyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLS1tYW4gLS1oZWxwIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzLy0taGVscAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLWggaW4gYnJva2VuIHJlcG9zaXRvcnknICcKKwlta2RpciBicm9rZW4gJiYKKwkoCisJCWNkIGJyb2tlbiAmJgorCQlnaXQgaW5pdCAmJgorCQk+LmdpdC9yZWZzL2hlYWRzL21hc3RlciAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgYnJhbmNoIC1oID51c2FnZSAyPiYxCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlIiBicm9rZW4vdXNhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBhYmMgc2hvdWxkIGNyZWF0ZSBhIGJyYW5jaCcgJworCWdpdCBicmFuY2ggYWJjICYmIHRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9hYmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBhL2IvYyBzaG91bGQgY3JlYXRlIGEgYnJhbmNoJyAnCisJZ2l0IGJyYW5jaCBhL2IvYyAmJiB0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvYS9iL2MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBtYiBtYXN0ZXIuLi4gc2hvdWxkIGNyZWF0ZSBhIGJyYW5jaCcgJworCWdpdCBicmFuY2ggbWIgbWFzdGVyLi4uICYmIHRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9tYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIEhFQUQgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIEhFQUQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyRaRVJPX09JRCAkSEVBRCAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDIwMCArMDAwMAlicmFuY2g6IENyZWF0ZWQgZnJvbSBtYXN0ZXIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWNyZWF0ZS1yZWZsb2cgZC9lL2Ygc2hvdWxkIGNyZWF0ZSBhIGJyYW5jaCBhbmQgYSBsb2cnICcKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjYgMjM6MzAiIFwKKwlnaXQgLWMgY29yZS5sb2dhbGxyZWZ1cGRhdGVzPWZhbHNlIGJyYW5jaCAtLWNyZWF0ZS1yZWZsb2cgZC9lL2YgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvZC9lL2YgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9kL2UvZiAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9kL2UvZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1kIGQvZS9mIHNob3VsZCBkZWxldGUgYSBicmFuY2ggYW5kIGEgbG9nJyAnCisJZ2l0IGJyYW5jaCAtZCBkL2UvZiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy9kL2UvZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvZC9lL2YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBqL2sgc2hvdWxkIHdvcmsgYWZ0ZXIgYnJhbmNoIGogaGFzIGJlZW4gZGVsZXRlZCcgJworCWdpdCBicmFuY2ggaiAmJgorCWdpdCBicmFuY2ggLWQgaiAmJgorCWdpdCBicmFuY2ggai9rCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggbCBzaG91bGQgd29yayBhZnRlciBicmFuY2ggbC9tIGhhcyBiZWVuIGRlbGV0ZWQnICcKKwlnaXQgYnJhbmNoIGwvbSAmJgorCWdpdCBicmFuY2ggLWQgbC9tICYmCisJZ2l0IGJyYW5jaCBsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gZHVtcHMgdXNhZ2UnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgYnJhbmNoIC1tIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1tIG0gYnJva2VuX3N5bXJlZiBzaG91bGQgd29yaycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGJyYW5jaCAtRCBicm9rZW5fc3ltcmVmIiAmJgorCWdpdCBicmFuY2ggLS1jcmVhdGUtcmVmbG9nIG0gJiYKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvYnJva2VuX3N5bXJlZiByZWZzL2hlYWRzL2lfYW1fYnJva2VuICYmCisJZ2l0IGJyYW5jaCAtbSBtIGJyb2tlbl9zeW1yZWYgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2Jyb2tlbl9zeW1yZWYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2lfYW1fYnJva2VuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gbSBtL20gc2hvdWxkIHdvcmsnICcKKwlnaXQgYnJhbmNoIC0tY3JlYXRlLXJlZmxvZyBtICYmCisJZ2l0IGJyYW5jaCAtbSBtIG0vbSAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvbS9tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gbi9uIG4gc2hvdWxkIHdvcmsnICcKKwlnaXQgYnJhbmNoIC0tY3JlYXRlLXJlZmxvZyBuL24gJiYKKwlnaXQgYnJhbmNoIC1tIG4vbiBuICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9uCisnCisKKyMgVGhlIHRvcG1vc3QgZW50cnkgaW4gcmVmbG9nIGZvciBicmFuY2ggYmJiIGlzIGFib3V0IGJyYW5jaCBjcmVhdGlvbi4KKyMgSGVuY2UsIHdlIGNvbXBhcmUgYmJiQHsxfSAoaW5zdGVhZCBvZiBiYmJAezB9KSB3aXRoIGFhYUB7MH0uCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gYmJiIHNob3VsZCByZW5hbWUgY2hlY2tlZCBvdXQgYnJhbmNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBicmFuY2ggLUQgYmJiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYWFhICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJhIG5ldyBjb21taXQiICYmCisJZ2l0IHJldi1wYXJzZSBhYWFAezB9ID5leHBlY3QgJiYKKwlnaXQgYnJhbmNoIC1tIGJiYiAmJgorCWdpdCByZXYtcGFyc2UgYmJiQHsxfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJZWNobyByZWZzL2hlYWRzL2JiYiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWluZyBjaGVja2VkIG91dCBicmFuY2ggd29ya3Mgd2l0aCBkL2YgY29uZmxpY3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLUQgZm9vL2JhciB8fCBnaXQgYnJhbmNoIC1EIGZvbyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBmb28gJiYKKwlnaXQgYnJhbmNoIC1tIGZvby9iYXIgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCWVjaG8gcmVmcy9oZWFkcy9mb28vYmFyID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gby9vIG8gc2hvdWxkIGZhaWwgd2hlbiBvL3AgZXhpc3RzJyAnCisJZ2l0IGJyYW5jaCBvL28gJiYKKwlnaXQgYnJhbmNoIG8vcCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLW0gby9vIG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtbSBvL3Egby9wIHNob3VsZCBmYWlsIHdoZW4gby9wIGV4aXN0cycgJworCWdpdCBicmFuY2ggby9xICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtbSBvL3Egby9wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLU0gby9xIG8vcCBzaG91bGQgd29yayB3aGVuIG8vcCBleGlzdHMnICcKKwlnaXQgYnJhbmNoIC1NIG8vcSBvL3AKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtbSAtZiBvL3Egby9wIHNob3VsZCB3b3JrIHdoZW4gby9wIGV4aXN0cycgJworCWdpdCBicmFuY2ggby9xICYmCisJZ2l0IGJyYW5jaCAtbSAtZiBvL3Egby9wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gcSByL3Egc2hvdWxkIGZhaWwgd2hlbiByIGV4aXN0cycgJworCWdpdCBicmFuY2ggcSAmJgorCWdpdCBicmFuY2ggciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLW0gcSByL3EKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtTSBmb28gYmFyIHNob3VsZCBmYWlsIHdoZW4gYmFyIGlzIGNoZWNrZWQgb3V0JyAnCisJZ2l0IGJyYW5jaCBiYXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtTSBiYXIgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLU0gYmF6IGJhbSBzaG91bGQgc3VjY2VlZCB3aGVuIGJheiBpcyBjaGVja2VkIG91dCcgJworCWdpdCBjaGVja291dCAtYiBiYXogJiYKKwlnaXQgYnJhbmNoIGJhbSAmJgorCWdpdCBicmFuY2ggLU0gYmF6IGJhbSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKSA9IGJhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1NIGJheiBiYW0gc2hvdWxkIGFkZCBlbnRyaWVzIHRvIC5naXQvbG9ncy9IRUFEJyAnCisJbXNnPSJCcmFuY2g6IHJlbmFtZWQgcmVmcy9oZWFkcy9iYXogdG8gcmVmcy9oZWFkcy9iYW0iICYmCisJZ3JlcCAiIDBcezQwXH0uKiRtc2ckIiAuZ2l0L2xvZ3MvSEVBRCAmJgorCWdyZXAgIl4wXHs0MFx9LiokbXNnJCIgLmdpdC9sb2dzL0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtTSBzaG91bGQgbGVhdmUgb3JwaGFuZWQgSEVBRCBhbG9uZScgJworCWdpdCBpbml0IG9ycGhhbiAmJgorCSgKKwkJY2Qgb3JwaGFuICYmCisJCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwkJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGxvbmVseSAmJgorCQlncmVwIGxvbmVseSAuZ2l0L0hFQUQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWQvbG9uZWx5ICYmCisJCWdpdCBicmFuY2ggLU0gbWFzdGVyIG1pc3RyZXNzICYmCisJCWdyZXAgbG9uZWx5IC5naXQvSEVBRAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdWx0aW5nIHJlZmxvZyBjYW4gYmUgc2hvd24gYnkgbG9nIC1nJyAnCisJb2lkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCUhFQURAezB9ICRvaWQgJG1zZworCUhFQURAezJ9ICRvaWQgY2hlY2tvdXQ6IG1vdmluZyBmcm9tIGZvbyB0byBiYXoKKwlFT0YKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJUggJWdzIiAtMiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLU0gYmF6IGJhbSBzaG91bGQgc3VjY2VlZCB3aGVuIGJheiBpcyBjaGVja2VkIG91dCBhcyBsaW5rZWQgd29ya2luZyB0cmVlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLWIgYmF6IGJhemRpciAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLWYgYmF6ZGlyMiBiYXogJiYKKwlnaXQgYnJhbmNoIC1NIGJheiBiYW0gJiYKKwl0ZXN0ICQoZ2l0IC1DIGJhemRpciByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQpID0gYmFtICYmCisJdGVzdCAkKGdpdCAtQyBiYXpkaXIyIHJldi1wYXJzZSAtLWFiYnJldi1yZWYgSEVBRCkgPSBiYW0gJiYKKwlybSAtciBiYXpkaXIgYmF6ZGlyMiAmJgorCWdpdCB3b3JrdHJlZSBwcnVuZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1NIGJheiBiYW0gc2hvdWxkIHN1Y2NlZWQgd2l0aGluIGEgd29ya3RyZWUgaW4gd2hpY2ggYmF6IGlzIGNoZWNrZWQgb3V0JyAnCisJZ2l0IGNoZWNrb3V0IC1iIGJheiAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLWYgYmF6ZGlyIGJheiAmJgorCSgKKwkJY2QgYmF6ZGlyICYmCisJCWdpdCBicmFuY2ggLU0gYmF6IGJhbSAmJgorCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSAtLWFiYnJldi1yZWYgSEVBRCkgPSBiYW0KKwkpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQpID0gYmFtICYmCisJcm0gLXIgYmF6ZGlyICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLU0gbWFzdGVyIHNob3VsZCB3b3JrIHdoZW4gbWFzdGVyIGlzIGNoZWNrZWQgb3V0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLU0gbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLU0gbWFzdGVyIG1hc3RlciBzaG91bGQgd29yayB3aGVuIG1hc3RlciBpcyBjaGVja2VkIG91dCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1NIG1hc3RlciBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtTSBtYXN0ZXIyIG1hc3RlcjIgc2hvdWxkIHdvcmsgd2hlbiBtYXN0ZXIgaXMgY2hlY2tlZCBvdXQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCBtYXN0ZXIyICYmCisJZ2l0IGJyYW5jaCAtTSBtYXN0ZXIyIG1hc3RlcjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtdiAtZCB0IHNob3VsZCB3b3JrJyAnCisJZ2l0IGJyYW5jaCB0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3QgJiYKKwlnaXQgYnJhbmNoIC12IC1kIHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC12IC1tIHQgcyBzaG91bGQgd29yaycgJworCWdpdCBicmFuY2ggdCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy90ICYmCisJZ2l0IGJyYW5jaCAtdiAtbSB0IHMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvdCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9zICYmCisJZ2l0IGJyYW5jaCAtZCBzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gLWQgdCBzIHNob3VsZCBmYWlsJyAnCisJZ2l0IGJyYW5jaCB0ICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1tIC1kIHQgcyAmJgorCWdpdCBicmFuY2ggLWQgdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy90CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLS1saXN0IC1kIHQgc2hvdWxkIGZhaWwnICcKKwlnaXQgYnJhbmNoIHQgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS1saXN0IC1kIHQgJiYKKwlnaXQgYnJhbmNoIC1kIHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBjaGVja2VkLW91dCBicmFuY2ggZnJvbSByZXBvIHRoYXQgaXMgYSBzdWJtb2R1bGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiByZXBvMSByZXBvMiIgJiYKKworCWdpdCBpbml0IHJlcG8xICYmCisJZ2l0IGluaXQgcmVwbzEvc3ViICYmCisJdGVzdF9jb21taXQgLUMgcmVwbzEvc3ViIHggJiYKKwlnaXQgLUMgcmVwbzEgc3VibW9kdWxlIGFkZCAuL3N1YiAmJgorCWdpdCAtQyByZXBvMSBjb21taXQgLW0gImFkZGluZyBzdWIiICYmCisKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgcmVwbzEgcmVwbzIgJiYKKwlnaXQgLUMgcmVwbzIvc3ViIGNoZWNrb3V0IC1iIHdvcmsgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgcmVwbzIvc3ViIGJyYW5jaCAtRCB3b3JrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhcmUgbWFpbiB3b3JrdHJlZSBoYXMgSEVBRCBhdCBicmFuY2ggZGVsZXRlZCBieSBzZWNvbmRhcnkgd29ya3RyZWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBub25iYXJlIGJhc2Ugc2Vjb25kYXJ5IiAmJgorCisJZ2l0IGluaXQgbm9uYmFyZSAmJgorCXRlc3RfY29tbWl0IC1DIG5vbmJhcmUgeCAmJgorCWdpdCBjbG9uZSAtLWJhcmUgbm9uYmFyZSBiYXJlICYmCisJZ2l0IC1DIGJhcmUgd29ya3RyZWUgYWRkIC0tZGV0YWNoIC4uL3NlY29uZGFyeSBtYXN0ZXIgJiYKKwlnaXQgLUMgc2Vjb25kYXJ5IGJyYW5jaCAtRCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWxpc3QgLXYgd2l0aCAtLWFiYnJldicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGJyYW5jaCAtRCB0IiAmJgorCWdpdCBicmFuY2ggdCAmJgorCWdpdCBicmFuY2ggLXYgLS1saXN0IHQgPmFjdHVhbC5kZWZhdWx0ICYmCisJZ2l0IGJyYW5jaCAtdiAtLWxpc3QgLS1hYmJyZXYgdCA+YWN0dWFsLmFiYnJldiAmJgorCXRlc3RfY21wIGFjdHVhbC5kZWZhdWx0IGFjdHVhbC5hYmJyZXYgJiYKKworCWdpdCBicmFuY2ggLXYgLS1saXN0IC0tbm8tYWJicmV2IHQgPmFjdHVhbC5ub2FiYnJldiAmJgorCWdpdCBicmFuY2ggLXYgLS1saXN0IC0tYWJicmV2PTAgdCA+YWN0dWFsLjBhYmJyZXYgJiYKKwl0ZXN0X2NtcCBhY3R1YWwubm9hYmJyZXYgYWN0dWFsLjBhYmJyZXYgJiYKKworCWdpdCBicmFuY2ggLXYgLS1saXN0IC0tYWJicmV2PTM2IHQgPmFjdHVhbC4zNmFiYnJldiAmJgorCSMgaG93IG1hbnkgaGV4ZGlnaXRzIGFyZSB1c2VkPworCXJlYWQgbmFtZSBvYmpkZWZhdWx0IHJlc3QgPGFjdHVhbC5hYmJyZXYgJiYKKwlyZWFkIG5hbWUgb2JqMzYgcmVzdCA8YWN0dWFsLjM2YWJicmV2ICYmCisJb2JqZnVsbD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdCkgJiYKKworCSMgYXJlIHdlIHJlYWxseSBnZXR0aW5nIGFiYnJldmlhdGlvbnM/CisJdGVzdCAiJG9iajM2IiAhPSAiJG9iamRlZmF1bHQiICYmCisJZXhwciAiJG9iajM2IiA6ICIkb2JqZGVmYXVsdCIgPi9kZXYvbnVsbCAmJgorCXRlc3QgIiRvYmpmdWxsIiAhPSAiJG9iajM2IiAmJgorCWV4cHIgIiRvYmpmdWxsIiA6ICIkb2JqMzYiID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0tY29sdW1uJyAnCisJQ09MVU1OUz04MSBnaXQgYnJhbmNoIC0tY29sdW1uPWNvbHVtbiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKyAgYS9iL2MgICAgIGJhbSAgICAgICBmb28gICAgICAgbCAgICAgICAqIG1hc3RlciAgICBtYiAgICAgICAgby9vICAgICAgIHEKKyAgYWJjICAgICAgIGJhciAgICAgICBqL2sgICAgICAgbS9tICAgICAgIG1hc3RlcjIgICBuICAgICAgICAgby9wICAgICAgIHIKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0tY29sdW1uIHdpdGggYW4gZXh0cmVtZWx5IGxvbmcgYnJhbmNoIG5hbWUnICcKKwlsb25nPXRoaXMvaXMvYS9wYXJ0L29mL2xvbmcvYnJhbmNoL25hbWUgJiYKKwlsb25nPXokbG9uZy8kbG9uZy8kbG9uZy8kbG9uZyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGJyYW5jaCAtZCAkbG9uZyIgJiYKKwlnaXQgYnJhbmNoICRsb25nICYmCisJQ09MVU1OUz04MCBnaXQgYnJhbmNoIC0tY29sdW1uPWNvbHVtbiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorICBhL2IvYworICBhYmMKKyAgYmFtCisgIGJhcgorICBmb28KKyAgai9rCisgIGwKKyAgbS9tCisqIG1hc3RlcgorICBtYXN0ZXIyCisgIG1iCisgIG4KKyAgby9vCisgIG8vcAorICBxCisgIHIKKyAgJGxvbmcKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIHdpdGggY29sdW1uLionICcKKwlnaXQgY29uZmlnIGNvbHVtbi51aSBjb2x1bW4gJiYKKwlnaXQgY29uZmlnIGNvbHVtbi5icmFuY2ggImRlbnNlIiAmJgorCUNPTFVNTlM9ODAgZ2l0IGJyYW5jaCA+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbHVtbi5icmFuY2ggJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29sdW1uLnVpICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKyAgYS9iL2MgICBiYW0gICBmb28gICBsICAgKiBtYXN0ZXIgICAgbWIgICBvL28gICBxCisgIGFiYyAgICAgYmFyICAgai9rICAgbS9tICAgbWFzdGVyMiAgIG4gICAgby9wICAgcgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLS1jb2x1bW4gLXYgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tY29sdW1uIC12CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLXYgd2l0aCBjb2x1bW4udWkgaWdub3JlZCcgJworCWdpdCBjb25maWcgY29sdW1uLnVpIGNvbHVtbiAmJgorCUNPTFVNTlM9ODAgZ2l0IGJyYW5jaCAtdiB8IGN1dCAtYyAtMTAgfCBzZWQgInMvICokLy8iID5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29sdW1uLnVpICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKyAgYS9iL2MKKyAgYWJjCisgIGJhbQorICBiYXIKKyAgZm9vCisgIGovaworICBsCisgIG0vbQorKiBtYXN0ZXIKKyAgbWFzdGVyMgorICBtYgorICBuCisgIG8vbworICBvL3AKKyAgcQorICByCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworbXYgLmdpdC9jb25maWcgLmdpdC9jb25maWctc2F2ZWQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtbSBxIHEyIHdpdGhvdXQgY29uZmlnIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IGJyYW5jaCAtbSBxIHEyICYmCisJZ2l0IGJyYW5jaCAtbSBxMiBxCisnCisKK212IC5naXQvY29uZmlnLXNhdmVkIC5naXQvY29uZmlnCisKK2dpdCBjb25maWcgYnJhbmNoLnMvcy5kdW1teSBIZWxsbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1tIHMvcyBzIHNob3VsZCB3b3JrIHdoZW4gcy90IGlzIGRlbGV0ZWQnICcKKwlnaXQgYnJhbmNoIC0tY3JlYXRlLXJlZmxvZyBzL3MgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL3MvcyAmJgorCWdpdCBicmFuY2ggLS1jcmVhdGUtcmVmbG9nIHMvdCAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvcy90ICYmCisJZ2l0IGJyYW5jaCAtZCBzL3QgJiYKKwlnaXQgYnJhbmNoIC1tIHMvcyBzICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyBpbmZvcm1hdGlvbiB3YXMgcmVuYW1lZCwgdG9vJyAnCisJdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLnMuZHVtbXkpID0gSGVsbG8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGJyYW5jaC5zL3MuZHVtbXkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtbSBjb3JyZWN0bHkgcmVuYW1lcyBtdWx0aXBsZSBjb25maWcgc2VjdGlvbnMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNvdXJjZSBtYXN0ZXIgJiYKKworCSMgQXNzZXJ0IHRoYXQgYSBjb25maWcgZmlsZSB3aXRoIG11bHRpcGxlIGNvbmZpZyBzZWN0aW9ucyBoYXMKKwkjIHRob3NlIHNlY3Rpb25zIHByZXNlcnZlZC4uLgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlicmFuY2guZGVzdC5rZXkxPXZhbHVlMQorCXNvbWUuZ2FyLmI9YWdlCisJYnJhbmNoLmRlc3Qua2V5Mj12YWx1ZTIKKwlFT0YKKwljYXQgPmNvbmZpZy5icmFuY2ggPDxcRU9GICYmCis7OyBOb3RlIHRoZSBsYWNrIG9mIC1cRU9GIGFib3ZlICYgbWl4ZWQgaW5kZW50aW5nIGhlcmUuIFRoaXMgaXMKKzs7IGludGVudGlvbmFsLCB3ZSBhcmUgYWxzbyB0ZXN0aW5nIHRoYXQgdGhlIGZvcm1hdHRpbmcgb2YgY29waWVkCis7OyBzZWN0aW9ucyBpcyBwcmVzZXJ2ZWQuCisKKzs7IENvbW1lbnQgZm9yIHNvdXJjZS4gVGFicworW2JyYW5jaCAic291cmNlIl0KKwk7OyBDb21tZW50IGZvciB0aGUgc291cmNlIHZhbHVlCisJa2V5MSA9IHZhbHVlMQorOzsgQ29tbWVudCBmb3Igc29tZS5nYXIuIFNwYWNlcworW3NvbWUgImdhciJdCisgICAgOzsgQ29tbWVudCBmb3IgdGhlIHNvbWUuZ2FyIHZhbHVlCisgICAgYiA9IGFnZQorOzsgQ29tbWVudCBmb3Igc291cmNlLCBhZ2Fpbi4gTWl4ZWQgdGFicy9zcGFjZXMuCitbYnJhbmNoICJzb3VyY2UiXQorICAgIDs7IENvbW1lbnQgZm9yIHRoZSBzb3VyY2UgdmFsdWUsIGFnYWluCisJa2V5MiA9IHZhbHVlMgorRU9GCisJY2F0IGNvbmZpZy5icmFuY2ggPj4uZ2l0L2NvbmZpZyAmJgorCWdpdCBicmFuY2ggLW0gc291cmNlIGRlc3QgJiYKKwlnaXQgY29uZmlnIC1mIC5naXQvY29uZmlnIC1sIHwgZ3JlcCAtRiAtZSBzb3VyY2UgLWUgZGVzdCAtZSBzb21lLmdhciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyAuLi5hbmQgdGhhdCB0aGUgY29tbWVudHMgZm9yIHRob3NlIHNlY3Rpb25zIGFyZSBhbHNvCisJIyBwcmVzZXJ2ZWQuCisJY2F0IGNvbmZpZy5icmFuY2ggfCBzZWQgInMvXCJzb3VyY2VcIi9cImRlc3RcIi8iID5leHBlY3QgJiYKKwlzZWQgLW4gLWUgIi9Ob3RlIHRoZSBsYWNrLyxcJHAiIC5naXQvY29uZmlnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLWMgZHVtcHMgdXNhZ2UnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgYnJhbmNoIC1jIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0tY29weSBkdW1wcyB1c2FnZScgJworCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBicmFuY2ggLS1jb3B5IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1jIGQgZSBzaG91bGQgd29yaycgJworCWdpdCBicmFuY2ggLS1jcmVhdGUtcmVmbG9nIGQgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2QgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5kLmR1bW15IEhlbGxvICYmCisJZ2l0IGJyYW5jaCAtYyBkIGUgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2QgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2UgJiYKKwllY2hvIEhlbGxvID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5lLmR1bW15ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyBIZWxsbyA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBicmFuY2guZC5kdW1teSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0tY29weSBpcyBhIHN5bm9ueW0gZm9yIC1jJyAnCisJZ2l0IGJyYW5jaCAtLWNyZWF0ZS1yZWZsb2cgY29weSAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvY29weSAmJgorCWdpdCBjb25maWcgYnJhbmNoLmNvcHkuZHVtbXkgSGVsbG8gJiYKKwlnaXQgYnJhbmNoIC0tY29weSBjb3B5IGNvcHktdG8gJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2NvcHkgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2NvcHktdG8gJiYKKwllY2hvIEhlbGxvID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5jb3B5LmR1bW15ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyBIZWxsbyA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBicmFuY2guY29weS10by5kdW1teSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1jIGVlIGVmIHNob3VsZCBjb3B5IGVlIHRvIGNyZWF0ZSBicmFuY2ggZWYnICcKKwlnaXQgY2hlY2tvdXQgLWIgZWUgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2VlICYmCisJZ2l0IGNvbmZpZyBicmFuY2guZWUuZHVtbXkgSGVsbG8gJiYKKwlnaXQgYnJhbmNoIC1jIGVlIGVmICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9lZSAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvZWYgJiYKKwl0ZXN0ICQoZ2l0IGNvbmZpZyBicmFuY2guZWUuZHVtbXkpID0gSGVsbG8gJiYKKwl0ZXN0ICQoZ2l0IGNvbmZpZyBicmFuY2guZWYuZHVtbXkpID0gSGVsbG8gJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSAtLWFiYnJldi1yZWYgSEVBRCkgPSBlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1jIGYvZiBnL2cgc2hvdWxkIHdvcmsnICcKKwlnaXQgYnJhbmNoIC0tY3JlYXRlLXJlZmxvZyBmL2YgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2YvZiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmYvZi5kdW1teSBIZWxsbyAmJgorCWdpdCBicmFuY2ggLWMgZi9mIGcvZyAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvZi9mICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9nL2cgJiYKKwl0ZXN0ICQoZ2l0IGNvbmZpZyBicmFuY2guZi9mLmR1bW15KSA9IEhlbGxvICYmCisJdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLmcvZy5kdW1teSkgPSBIZWxsbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1jIG0yIG0yIHNob3VsZCB3b3JrJyAnCisJZ2l0IGJyYW5jaCAtLWNyZWF0ZS1yZWZsb2cgbTIgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL20yICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubTIuZHVtbXkgSGVsbG8gJiYKKwlnaXQgYnJhbmNoIC1jIG0yIG0yICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9tMiAmJgorCXRlc3QgJChnaXQgY29uZmlnIGJyYW5jaC5tMi5kdW1teSkgPSBIZWxsbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1jIHp6IHp6L3p6IHNob3VsZCBmYWlsJyAnCisJZ2l0IGJyYW5jaCAtLWNyZWF0ZS1yZWZsb2cgenogJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL3p6ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtYyB6eiB6ei96egorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1jIGIvYiBiIHNob3VsZCBmYWlsJyAnCisJZ2l0IGJyYW5jaCAtLWNyZWF0ZS1yZWZsb2cgYi9iICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtYyBiL2IgYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1DIG8vcSBvL3Agc2hvdWxkIHdvcmsgd2hlbiBvL3AgZXhpc3RzJyAnCisJZ2l0IGJyYW5jaCAtLWNyZWF0ZS1yZWZsb2cgby9xICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9vL3EgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL28vcCAmJgorCWdpdCBicmFuY2ggLUMgby9xIG8vcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1jIC1mIG8vcSBvL3Agc2hvdWxkIHdvcmsgd2hlbiBvL3AgZXhpc3RzJyAnCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9vL3EgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL28vcCAmJgorCWdpdCBicmFuY2ggLWMgLWYgby9xIG8vcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1jIHFxIHJyL3FxIHNob3VsZCBmYWlsIHdoZW4gcnIgZXhpc3RzJyAnCisJZ2l0IGJyYW5jaCBxcSAmJgorCWdpdCBicmFuY2ggcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1jIHFxIHJyL3FxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLUMgYjEgYjIgc2hvdWxkIGZhaWwgd2hlbiBiMiBpcyBjaGVja2VkIG91dCcgJworCWdpdCBicmFuY2ggYjEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1DIGIxIGIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLUMgYzEgYzIgc2hvdWxkIHN1Y2NlZWQgd2hlbiBjMSBpcyBjaGVja2VkIG91dCcgJworCWdpdCBjaGVja291dCAtYiBjMSAmJgorCWdpdCBicmFuY2ggYzIgJiYKKwlnaXQgYnJhbmNoIC1DIGMxIGMyICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQpID0gYzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtQyBjMSBjMiBzaG91bGQgbmV2ZXIgdG91Y2ggSEVBRCcgJworCW1zZz0iQnJhbmNoOiBjb3BpZWQgcmVmcy9oZWFkcy9jMSB0byByZWZzL2hlYWRzL2MyIiAmJgorCSEgZ3JlcCAiJG1zZyQiIC5naXQvbG9ncy9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLUMgbWFzdGVyIHNob3VsZCB3b3JrIHdoZW4gbWFzdGVyIGlzIGNoZWNrZWQgb3V0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUMgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLUMgbWFzdGVyIG1hc3RlciBzaG91bGQgd29yayB3aGVuIG1hc3RlciBpcyBjaGVja2VkIG91dCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1DIG1hc3RlciBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtQyBtYXN0ZXI1IG1hc3RlcjUgc2hvdWxkIHdvcmsgd2hlbiBtYXN0ZXIgaXMgY2hlY2tlZCBvdXQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCBtYXN0ZXI1ICYmCisJZ2l0IGJyYW5jaCAtQyBtYXN0ZXI1IG1hc3RlcjUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtQyBhYiBjZCBzaG91bGQgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZyBmb3IgY2QnICcKKwlnaXQgYnJhbmNoIC0tY3JlYXRlLXJlZmxvZyBjZCAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvY2QgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5jZC5kdW1teSBDRCAmJgorCWdpdCBicmFuY2ggLS1jcmVhdGUtcmVmbG9nIGFiICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9hYiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmFiLmR1bW15IEFCICYmCisJZ2l0IGJyYW5jaCAtQyBhYiBjZCAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvYWIgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2NkICYmCisJdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLmFiLmR1bW15KSA9IEFCICYmCisJdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLmNkLmR1bW15KSA9IEFCCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLWMgY29ycmVjdGx5IGNvcGllcyBtdWx0aXBsZSBjb25maWcgc2VjdGlvbnMnICcKKwlGT089MSAmJgorCWV4cG9ydCBGT08gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNvdXJjZTIgbWFzdGVyICYmCisKKwkjIEFzc2VydCB0aGF0IGEgY29uZmlnIGZpbGUgd2l0aCBtdWx0aXBsZSBjb25maWcgc2VjdGlvbnMgaGFzCisJIyB0aG9zZSBzZWN0aW9ucyBwcmVzZXJ2ZWQuLi4KKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJYnJhbmNoLnNvdXJjZTIua2V5MT12YWx1ZTEKKwlicmFuY2guZGVzdDIua2V5MT12YWx1ZTEKKwltb3JlLmdhci5iPWFnZQorCWJyYW5jaC5zb3VyY2UyLmtleTI9dmFsdWUyCisJYnJhbmNoLmRlc3QyLmtleTI9dmFsdWUyCisJRU9GCisJY2F0ID5jb25maWcuYnJhbmNoIDw8XEVPRiAmJgorOzsgTm90ZSB0aGUgbGFjayBvZiAtXEVPRiBhYm92ZSAmIG1peGVkIGluZGVudGluZyBoZXJlLiBUaGlzIGlzCis7OyBpbnRlbnRpb25hbCwgd2UgYXJlIGFsc28gdGVzdGluZyB0aGF0IHRoZSBmb3JtYXR0aW5nIG9mIGNvcGllZAorOzsgc2VjdGlvbnMgaXMgcHJlc2VydmVkLgorCis7OyBDb21tZW50IGZvciBzb3VyY2UyLiBUYWJzCitbYnJhbmNoICJzb3VyY2UyIl0KKwk7OyBDb21tZW50IGZvciB0aGUgc291cmNlMiB2YWx1ZQorCWtleTEgPSB2YWx1ZTEKKzs7IENvbW1lbnQgZm9yIG1vcmUuZ2FyLiBTcGFjZXMKK1ttb3JlICJnYXIiXQorICAgIDs7IENvbW1lbnQgZm9yIHRoZSBtb3JlLmdhciB2YWx1ZQorICAgIGIgPSBhZ2UKKzs7IENvbW1lbnQgZm9yIHNvdXJjZTIsIGFnYWluLiBNaXhlZCB0YWJzL3NwYWNlcy4KK1ticmFuY2ggInNvdXJjZTIiXQorICAgIDs7IENvbW1lbnQgZm9yIHRoZSBzb3VyY2UyIHZhbHVlLCBhZ2FpbgorCWtleTIgPSB2YWx1ZTIKK0VPRgorCWNhdCBjb25maWcuYnJhbmNoID4+LmdpdC9jb25maWcgJiYKKwlnaXQgYnJhbmNoIC1jIHNvdXJjZTIgZGVzdDIgJiYKKwlnaXQgY29uZmlnIC1mIC5naXQvY29uZmlnIC1sIHwgZ3JlcCAtRiAtZSBzb3VyY2UyIC1lIGRlc3QyIC1lIG1vcmUuZ2FyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIC4uLmFuZCB0aGF0IHRoZSBjb21tZW50cyBhbmQgZm9ybWF0dGluZyBmb3IgdGhvc2Ugc2VjdGlvbnMKKwkjIGlzIGFsc28gcHJlc2VydmVkLgorCWNhdCA+ZXhwZWN0IDw8XEVPRiAmJgorOzsgQ29tbWVudCBmb3Igc291cmNlMi4gVGFicworW2JyYW5jaCAic291cmNlMiJdCisJOzsgQ29tbWVudCBmb3IgdGhlIHNvdXJjZTIgdmFsdWUKKwlrZXkxID0gdmFsdWUxCis7OyBDb21tZW50IGZvciBtb3JlLmdhci4gU3BhY2VzCitbYnJhbmNoICJkZXN0MiJdCisJOzsgQ29tbWVudCBmb3IgdGhlIHNvdXJjZTIgdmFsdWUKKwlrZXkxID0gdmFsdWUxCis7OyBDb21tZW50IGZvciBtb3JlLmdhci4gU3BhY2VzCitbbW9yZSAiZ2FyIl0KKyAgICA7OyBDb21tZW50IGZvciB0aGUgbW9yZS5nYXIgdmFsdWUKKyAgICBiID0gYWdlCis7OyBDb21tZW50IGZvciBzb3VyY2UyLCBhZ2Fpbi4gTWl4ZWQgdGFicy9zcGFjZXMuCitbYnJhbmNoICJzb3VyY2UyIl0KKyAgICA7OyBDb21tZW50IGZvciB0aGUgc291cmNlMiB2YWx1ZSwgYWdhaW4KKwlrZXkyID0gdmFsdWUyCitbYnJhbmNoICJkZXN0MiJdCisgICAgOzsgQ29tbWVudCBmb3IgdGhlIHNvdXJjZTIgdmFsdWUsIGFnYWluCisJa2V5MiA9IHZhbHVlMgorRU9GCisJc2VkIC1uIC1lICIvQ29tbWVudCBmb3Igc291cmNlMi8sXCRwIiAuZ2l0L2NvbmZpZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBhIHN5bXJlZicgJworCWdpdCBicmFuY2ggdGFyZ2V0ICYmCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL3N5bXJlZiByZWZzL2hlYWRzL3RhcmdldCAmJgorCWVjaG8gIkRlbGV0ZWQgYnJhbmNoIHN5bXJlZiAod2FzIHJlZnMvaGVhZHMvdGFyZ2V0KS4iID5leHBlY3QgJiYKKwlnaXQgYnJhbmNoIC1kIHN5bXJlZiA+YWN0dWFsICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL3RhcmdldCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy9zeW1yZWYgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBhIGRhbmdsaW5nIHN5bXJlZicgJworCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9kYW5nbGluZy1zeW1yZWYgbm93aGVyZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9kYW5nbGluZy1zeW1yZWYgJiYKKwllY2hvICJEZWxldGVkIGJyYW5jaCBkYW5nbGluZy1zeW1yZWYgKHdhcyBub3doZXJlKS4iID5leHBlY3QgJiYKKwlnaXQgYnJhbmNoIC1kIGRhbmdsaW5nLXN5bXJlZiA+YWN0dWFsICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL2RhbmdsaW5nLXN5bXJlZiAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0aW5nIGEgc2VsZi1yZWZlcmVudGlhbCBzeW1yZWYnICcKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvc2VsZi1yZWZlcmVuY2UgcmVmcy9oZWFkcy9zZWxmLXJlZmVyZW5jZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9zZWxmLXJlZmVyZW5jZSAmJgorCWVjaG8gIkRlbGV0ZWQgYnJhbmNoIHNlbGYtcmVmZXJlbmNlICh3YXMgcmVmcy9oZWFkcy9zZWxmLXJlZmVyZW5jZSkuIiA+ZXhwZWN0ICYmCisJZ2l0IGJyYW5jaCAtZCBzZWxmLXJlZmVyZW5jZSA+YWN0dWFsICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL3NlbGYtcmVmZXJlbmNlICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1pbmcgYSBzeW1yZWYgaXMgbm90IGFsbG93ZWQnICcKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvbWFzdGVyMiByZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLW0gbWFzdGVyMiBtYXN0ZXIzICYmCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL21hc3RlcjIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL21hc3RlcjMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZ2l0IGJyYW5jaCAtbSB1IHYgc2hvdWxkIGZhaWwgd2hlbiB0aGUgcmVmbG9nIGZvciB1IGlzIGEgc3ltbGluaycgJworCWdpdCBicmFuY2ggLS1jcmVhdGUtcmVmbG9nIHUgJiYKKwltdiAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy91IHJlYWwtdSAmJgorCWxuIC1zIHJlYWwtdSAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy91ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtbSB1IHYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0cmFja2luZyBzZXR1cCB2aWEgLS10cmFjaycgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXkxIGxvY2FsL21hc3RlciAmJgorCXRlc3QgJChnaXQgY29uZmlnIGJyYW5jaC5teTEucmVtb3RlKSA9IGxvY2FsICYmCisJdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLm15MS5tZXJnZSkgPSByZWZzL2hlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRyYWNraW5nIHNldHVwIChub24td2lsZGNhcmQsIG1hdGNoaW5nKScgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15NCBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICQoZ2l0IGNvbmZpZyBicmFuY2gubXk0LnJlbW90ZSkgPSBsb2NhbCAmJgorCXRlc3QgJChnaXQgY29uZmlnIGJyYW5jaC5teTQubWVyZ2UpID0gcmVmcy9oZWFkcy9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhY2tpbmcgc2V0dXAgZmFpbHMgb24gbm9uLW1hdGNoaW5nIHJlZnNwZWMnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy9zOnJlZnMvcmVtb3Rlcy9sb2NhbC9zICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXRyYWNrIG15NSBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGJyYW5jaC5teTUucmVtb3RlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gubXk1Lm1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdHJhY2tpbmcgc2V0dXAgdmlhIGNvbmZpZycgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIHRydWUgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCBteTMgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLm15My5yZW1vdGUpID0gbG9jYWwgJiYKKwl0ZXN0ICQoZ2l0IGNvbmZpZyBicmFuY2gubXkzLm1lcmdlKSA9IHJlZnMvaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgb3ZlcnJpZGluZyB0cmFja2luZyBzZXR1cCB2aWEgLS1uby10cmFjaycgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIHRydWUgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15MiBsb2NhbC9tYXN0ZXIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBmYWxzZSAmJgorCSEgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTIucmVtb3RlKSIgPSBsb2NhbCAmJgorCSEgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTIubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHRyYWNraW5nIHdpdGhvdXQgLmZldGNoIGVudHJpZXMnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSB0cnVlICYmCisJZ2l0IGJyYW5jaCBteTYgcyAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIGZhbHNlICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIGJyYW5jaC5teTYucmVtb3RlKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLm15Ni5tZXJnZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdHJhY2tpbmcgc2V0dXAgdmlhIC0tdHJhY2sgYnV0IGRlZXBlcicgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvby9vIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXk3IGxvY2FsL28vbyAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXk3LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15Ny5tZXJnZSkiID0gcmVmcy9oZWFkcy9vL28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkZWxldGluZyBicmFuY2ggZGVsZXRlcyBicmFuY2ggY29uZmlnJyAnCisJZ2l0IGJyYW5jaCAtZCBteTcgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLm15Ny5yZW1vdGUpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyBicmFuY2gubXk3Lm1lcmdlKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkZWxldGluZyBicmFuY2ggd2l0aG91dCBjb25maWcnICcKKwlnaXQgYnJhbmNoIG15NyBzICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgbXk3IHwgY3V0IC1jIDEtNykgJiYKKwllY2hvICJEZWxldGVkIGJyYW5jaCBteTcgKHdhcyAkc2hhMSkuIiA+ZXhwZWN0ICYmCisJZ2l0IGJyYW5jaCAtZCBteTcgPmFjdHVhbCAyPiYxICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRpbmcgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaCBmYWlscycgJworCWdpdCB3b3JrdHJlZSBhZGQgLWIgbXk3IG15NyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBteTcgYnJhbmNoIC1kIG15NyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLWQgbXk3ICYmCisJcm0gLXIgbXk3ICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS10cmFjayB3aXRob3V0IC5mZXRjaCBlbnRyaWVzJyAnCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15OCAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXk4LnJlbW90ZSkiICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTgubWVyZ2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggZnJvbSBub24tYnJhbmNoIEhFQUQgdy9hdXRvc2V0dXBtZXJnZT1hbHdheXMnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBhbHdheXMgJiYKKwlnaXQgYnJhbmNoIG15OSBIRUFEXiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCBmcm9tIG5vbi1icmFuY2ggSEVBRCB3Ly0tdHJhY2sgY2F1c2VzIGZhaWx1cmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tdHJhY2sgbXkxMCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggZnJvbSB0YWcgdy8tLXRyYWNrIGNhdXNlcyBmYWlsdXJlJyAnCisJZ2l0IHRhZyBmb29iYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tdHJhY2sgbXkxMSBmb29iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0tdG8gZmFpbHMgb24gbXVsdGlwbGUgYnJhbmNoZXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIG1hc3RlciBhIGIgYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNldC11cHN0cmVhbS10byBmYWlscyBvbiBkZXRhY2hlZCBIRUFEJyAnCisJZ2l0IGNoZWNrb3V0IEhFQURee30gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2V0LXVwc3RyZWFtLXRvIGZhaWxzIG9uIGEgbWlzc2luZyBkc3QgYnJhbmNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBtYXN0ZXIgZG9lcy1ub3QtZXhpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0tdG8gZmFpbHMgb24gYSBtaXNzaW5nIHNyYyBicmFuY2gnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIGRvZXMtbm90LWV4aXN0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNldC11cHN0cmVhbS10byBmYWlscyBvbiBhIG5vbi1yZWYnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIEhFQURee30KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0tdG8gZmFpbHMgb24gbG9ja2VkIGNvbmZpZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9jb25maWcubG9jayIgJiYKKwk+LmdpdC9jb25maWcubG9jayAmJgorCWdpdCBicmFuY2ggbG9ja2VkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBsb2NrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIC0tc2V0LXVwc3RyZWFtLXRvIG1vZGlmeSBIRUFEJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgZm9vICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSBmb28gJiYKKwlnaXQgYnJhbmNoIG15MTIgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIG15MTIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUpIiA9ICIuIiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlKSIgPSAicmVmcy9oZWFkcy9teTEyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgLS1zZXQtdXBzdHJlYW0tdG8gbW9kaWZ5IGEgcGFydGljdWxhciBicmFuY2gnICcKKwlnaXQgYnJhbmNoIG15MTMgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIG1hc3RlciBteTEzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW0gbXkxMyIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15MTMucmVtb3RlKSIgPSAiLiIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15MTMubWVyZ2UpIiA9ICJyZWZzL2hlYWRzL21hc3RlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS11bnNldC11cHN0cmVhbSBzaG91bGQgZmFpbCBpZiBnaXZlbiBhIG5vbi1leGlzdGVudCBicmFuY2gnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW0gaS1kb250LWV4aXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tdW5zZXQtdXBzdHJlYW0gc2hvdWxkIGZhaWwgaWYgY29uZmlnIGlzIGxvY2tlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9jb25maWcubG9jayIgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIGxvY2tlZCAmJgorCT4uZ2l0L2NvbmZpZy5sb2NrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS11bnNldC11cHN0cmVhbSBvbiBIRUFEJyAnCisJZ2l0IGJyYW5jaCBteTE0ICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgZm9vICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSBmb28gJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIG15MTQgJiYKKwlnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlICYmCisJIyBmYWlsIGZvciBhIGJyYW5jaCB3aXRob3V0IHVwc3RyZWFtIHNldAorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXVuc2V0LXVwc3RyZWFtIHNob3VsZCBmYWlsIG9uIG11bHRpcGxlIGJyYW5jaGVzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtIGEgYiBjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tdW5zZXQtdXBzdHJlYW0gc2hvdWxkIGZhaWwgb24gZGV0YWNoZWQgSEVBRCcgJworCWdpdCBjaGVja291dCBIRUFEXnt9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtICYmCisJZ2l0IGNoZWNrb3V0IC0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXVuc2V0LXVwc3RyZWFtIG9uIGEgcGFydGljdWxhciBicmFuY2gnICcKKwlnaXQgYnJhbmNoIG15MTUgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIG1hc3RlciBteTE0ICYmCisJZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtIG15MTQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGJyYW5jaC5teTE0LnJlbW90ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgYnJhbmNoLm15MTQubWVyZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYWJsZWQgb3B0aW9uIC0tc2V0LXVwc3RyZWFtIGZhaWxzJyAnCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbSBvcmlnaW4vbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2V0LXVwc3RyZWFtLXRvIG5vdGljZXMgYW4gZXJyb3IgdG8gc2V0IGJyYW5jaCBhcyBvd24gdXBzdHJlYW0nICcKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIHJlZnMvaGVhZHMvbXkxMyBteTEzIDI+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJd2FybmluZzogTm90IHNldHRpbmcgYnJhbmNoIG15MTMgYXMgaXRzIG93biB1cHN0cmVhbS4KKwlFT0YKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNvbmZpZyBicmFuY2gubXkxMy5yZW1vdGUgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNvbmZpZyBicmFuY2gubXkxMy5tZXJnZSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworIyBLZWVwIHRoaXMgdGVzdCBsYXN0LCBhcyBpdCBjaGFuZ2VzIHRoZSBjdXJyZW50IGJyYW5jaAorY2F0ID5leHBlY3QgPDxFT0YKKyRaRVJPX09JRCAkSEVBRCAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDIwMCArMDAwMAlicmFuY2g6IENyZWF0ZWQgZnJvbSBtYXN0ZXIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNoZWNrb3V0IC1iIGcvaC9pIC1sIHNob3VsZCBjcmVhdGUgYSBicmFuY2ggYW5kIGEgbG9nJyAnCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjMwIiBcCisJZ2l0IGNoZWNrb3V0IC1iIGcvaC9pIC1sIG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9nL2gvaSAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvbG9ncy9yZWZzL2hlYWRzL2cvaC9pICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvbG9ncy9yZWZzL2hlYWRzL2cvaC9pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIG1ha2VzIHJlZmxvZyBieSBkZWZhdWx0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYWxwaGEgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGFscGhhQHswfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiBkb2VzIG5vdCBtYWtlIHJlZmxvZyB3aGVuIGNvcmUubG9nQWxsUmVmVXBkYXRlcyA9IGZhbHNlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIGZhbHNlICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJldGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJldGFAezB9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIHdpdGggLWwgbWFrZXMgcmVmbG9nIHdoZW4gY29yZS5sb2dBbGxSZWZVcGRhdGVzID0gZmFsc2UnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1sYiBnYW1tYSAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGdhbW1hQHswfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdm9pZCBhbWJpZ3VvdXMgdHJhY2snICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSB0cnVlICYmCisJZ2l0IGNvbmZpZyByZW1vdGUuYW1iaTEudXJsIGxhbGFsYSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmFtYmkxLmZldGNoIHJlZnMvaGVhZHMvbGFsYWxhOnJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IGNvbmZpZyByZW1vdGUuYW1iaTIudXJsIGxpbGlsaSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmFtYmkyLmZldGNoIHJlZnMvaGVhZHMvbGlsaWxpOnJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCBhbGwxIG1hc3RlciAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyBicmFuY2guYWxsMS5tZXJnZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBsb2NhbCBvbiBhIHRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgbG9jYWwgJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9vIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIG15YmFzZSAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXIxIG15YmFzZSAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMS5yZW1vdGUpIiA9IC4gJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjEubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbXliYXNlICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIxLnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgYWx3YXlzIG9uIGEgdHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBhbHdheXMgJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9vIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIG15YmFzZTIgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXlyMiBteWJhc2UgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjIucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIyLm1lcmdlKSIgPSByZWZzL2hlYWRzL215YmFzZSAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMi5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHJlbW90ZSBvbiBhIHRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgcmVtb3RlICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbyB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCBteWJhc2UzICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjMgbXliYXNlMiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMy5yZW1vdGUpIiA9IC4gJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjMubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbXliYXNlMiAmJgorCSEgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIzLnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbmV2ZXIgb24gYSB0cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIG5ldmVyICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbyB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCBteWJhc2U0ICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjQgbXliYXNlMiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNC5yZW1vdGUpIiA9IC4gJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjQubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbXliYXNlMiAmJgorCSEgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI0LnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbG9jYWwgb24gYSB0cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBsb2NhbCAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjUgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI1LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjUubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJISB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjUucmViYXNlKSIgPSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBuZXZlciBvbiBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIG5ldmVyICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXlyNiBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjYucmVtb3RlKSIgPSBsb2NhbCAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNi5tZXJnZSkiID0gcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNi5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHJlbW90ZSBvbiBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjcgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI3LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjcubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI3LnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgYWx3YXlzIG9uIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgcmVtb3RlICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXlyOCBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjgucmVtb3RlKSIgPSBsb2NhbCAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyOC5tZXJnZSkiID0gcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjgucmViYXNlKSIgPSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSB1bmNvbmZpZ3VyZWQgb24gYSB0cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXlyOSBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjkucmVtb3RlKSIgPSBsb2NhbCAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyOS5tZXJnZSkiID0gcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXI5LnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgdW5jb25maWd1cmVkIG9uIGEgdHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL28gfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggbXliYXNlMTAgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXlyMTAgbXliYXNlMiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTAucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIxMC5tZXJnZSkiID0gcmVmcy9oZWFkcy9teWJhc2UyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTAucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSB1bmNvbmZpZ3VyZWQgb24gdW50cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTEgbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjExLnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjExLm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTEucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSB1bmNvbmZpZ3VyZWQgb24gdW50cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjEyIGxvY2FsL21hc3RlciAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEyLnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEyLm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTIucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBuZXZlciBvbiBhbiB1bnRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIG5ldmVyICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIxMyBteWJhc2UyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTMucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTMubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMy5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGxvY2FsIG9uIGFuIHVudHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgbG9jYWwgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjE0IG15YmFzZTIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNC5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNC5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE0LnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgcmVtb3RlIG9uIGFuIHVudHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgcmVtb3RlICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIxNSBteWJhc2UyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTUucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTUubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNS5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGFsd2F5cyBvbiBhbiB1bnRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIGFsd2F5cyAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTYgbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE2LnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE2Lm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTYucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBuZXZlciBvbiBhbiB1bnRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBuZXZlciAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTcgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTcucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTcubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNy5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGxvY2FsIG9uIGFuIHVudHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIGxvY2FsICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIxOCBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxOC5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxOC5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE4LnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgcmVtb3RlIG9uIGFuIHVudHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTkgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTkucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTkubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxOS5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGFsd2F5cyBvbiBhbiB1bnRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBhbHdheXMgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjIwIGxvY2FsL21hc3RlciAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjIwLnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjIwLm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMjAucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBhbHdheXMgb24gZGV0YWNoZWQgSEVBRCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIGFsd2F5cyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCWdpdCBicmFuY2ggbXkxMSAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyBicmFuY2gubXkxMS5yZW1vdGUpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyBicmFuY2gubXkxMS5tZXJnZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBtaXNjb25maWd1cmVkIGF1dG9zZXR1cHJlYmFzZSAoYmFkIHZhbHVlKScgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBnYXJiYWdlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgbWlzY29uZmlndXJlZCBhdXRvc2V0dXByZWJhc2UgKG5vIHZhbHVlKScgJworCWdpdCBjb25maWcgLS11bnNldCBicmFuY2guYXV0b3NldHVwcmViYXNlICYmCisJZWNobyAiW2JyYW5jaF0gYXV0b3NldHVwcmViYXNlIiA+Pi5naXQvY29uZmlnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAmJgorCWdpdCBjb25maWcgLS11bnNldCBicmFuY2guYXV0b3NldHVwcmViYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dGVtcHQgdG8gZGVsZXRlIGEgYnJhbmNoIHdpdGhvdXQgYmFzZSBhbmQgdW5tZXJnZWQgdG8gSEVBRCcgJworCWdpdCBjaGVja291dCBteTkgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgYnJhbmNoLm15OC5tZXJnZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLWQgbXk4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dGVtcHQgdG8gZGVsZXRlIGEgYnJhbmNoIG1lcmdlZCB0byBpdHMgYmFzZScgJworCSMgd2UgYXJlIG9uIG15OSB3aGljaCBpcyB0aGUgaW5pdGlhbCBjb21taXQ7IHRyYWRpdGlvbmFsbHkKKwkjIHdlIHdvdWxkIG5vdCBoYXZlIGFsbG93ZWQgZGVsZXRpbmcgbXk4IHRoYXQgaXMgbm90IG1lcmdlZAorCSMgdG8gbXk5LCBidXQgaXQgaXMgc2V0IHRvIHRyYWNrIG1hc3RlciB0aGF0IGFscmVhZHkgaGFzIG15OAorCWdpdCBjb25maWcgYnJhbmNoLm15OC5tZXJnZSByZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCBicmFuY2ggLWQgbXk4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dGVtcHQgdG8gZGVsZXRlIGEgYnJhbmNoIG1lcmdlZCB0byBpdHMgYmFzZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIFRoaXJkID4+QSAmJgorCWdpdCBjb21taXQgLW0gIlRoaXJkIGNvbW1pdCIgQSAmJgorCWdpdCBicmFuY2ggLXQgbXkxMCBteTkgJiYKKwlnaXQgYnJhbmNoIC1mIG15MTAgSEVBRF4gJiYKKwkjIHdlIGFyZSBvbiBtYXN0ZXIgd2hpY2ggaXMgYXQgdGhlIHRoaXJkIGNvbW1pdCwgYW5kIG15MTAKKwkjIGlzIGJlaGluZCB1cywgc28gdHJhZGl0aW9uYWxseSB3ZSB3b3VsZCBoYXZlIGFsbG93ZWQgZGVsZXRpbmcKKwkjIGl0OyBidXQgbXkxMCBpcyBzZXQgdG8gdHJhY2sgbXk5IHRoYXQgaXMgZnVydGhlciBiZWhpbmQuCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtZCBteTEwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAtLWVkaXQtZGVzY3JpcHRpb24nICcKKwl3cml0ZV9zY3JpcHQgZWRpdG9yIDw8LVxFT0YgJiYKKwkJZWNobyAiTmV3IGNvbnRlbnRzIiA+IiQxIgorCUVPRgorCUVESVRPUj0uL2VkaXRvciBnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiAmJgorCQl3cml0ZV9zY3JpcHQgZWRpdG9yIDw8LVxFT0YgJiYKKwkJZ2l0IHN0cmlwc3BhY2UgLXMgPCIkMSIgPiJFRElUT1JfT1VUUFVUIgorCUVPRgorCUVESVRPUj0uL2VkaXRvciBnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiAmJgorCWVjaG8gIk5ldyBjb250ZW50cyIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBFRElUT1JfT1VUUFVUCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCB0eXBvIGluIGJyYW5jaCBuYW1lIHdoZW4gdXNpbmcgLS1lZGl0LWRlc2NyaXB0aW9uJyAnCisJd3JpdGVfc2NyaXB0IGVkaXRvciA8PC1cRU9GICYmCisJCWVjaG8gIk5ldyBjb250ZW50cyIgPiIkMSIKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBlbnYgRURJVE9SPS4vZWRpdG9yIGdpdCBicmFuY2ggLS1lZGl0LWRlc2NyaXB0aW9uIG5vLXN1Y2gtYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzZSAtLWVkaXQtZGVzY3JpcHRpb24gb24gdW5ib3JuIGJyYW5jaCBmb3Igbm93JyAnCisJd3JpdGVfc2NyaXB0IGVkaXRvciA8PC1cRU9GICYmCisJCWVjaG8gIk5ldyBjb250ZW50cyIgPiIkMSIKKwlFT0YKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gdW5ib3JuICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEVESVRPUj0uL2VkaXRvciBnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1lcmdlZCBjYXRjaGVzIGludmFsaWQgb2JqZWN0IG5hbWVzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLW1lcmdlZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWVyZ2VkIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8tbWVyZ2VkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLW1lcmdlZCBIRUFEIC0tbm8tbWVyZ2VkIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1saXN0IGR1cmluZyByZWJhc2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlc2V0X3JlYmFzZSIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJRkFLRV9MSU5FUz0iMSBlZGl0IDIiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MiAmJgorCWdpdCBicmFuY2ggLS1saXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJyZWJhc2luZyBtYXN0ZXIiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxpc3QgZHVyaW5nIHJlYmFzZSBmcm9tIGRldGFjaGVkIEhFQUQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlc2V0X3JlYmFzZSAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCW9pZD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCUZBS0VfTElORVM9IjEgZWRpdCAyIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjIgJiYKKwlnaXQgYnJhbmNoIC0tbGlzdCA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAicmViYXNpbmcgZGV0YWNoZWQgSEVBRCAkb2lkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhY2tpbmcgd2l0aCB1bmV4cGVjdGVkIC5mZXRjaCByZWZzcGVjJyAnCisJcm0gLXJmIGEgYiBjIGQgJiYKKwlnaXQgaW5pdCBhICYmCisJKAorCQljZCBhICYmCisJCXRlc3RfY29tbWl0IGEKKwkpICYmCisJZ2l0IGluaXQgYiAmJgorCSgKKwkJY2QgYiAmJgorCQl0ZXN0X2NvbW1pdCBiCisJKSAmJgorCWdpdCBpbml0IGMgJiYKKwkoCisJCWNkIGMgJiYKKwkJdGVzdF9jb21taXQgYyAmJgorCQlnaXQgcmVtb3RlIGFkZCBhIC4uL2EgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgYiAuLi9iICYmCisJCWdpdCBmZXRjaCAtLWFsbAorCSkgJiYKKwlnaXQgaW5pdCBkICYmCisJKAorCQljZCBkICYmCisJCWdpdCByZW1vdGUgYWRkIGMgLi4vYyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5jLmZldGNoICIrcmVmcy9yZW1vdGVzLyo6cmVmcy9yZW1vdGVzLyoiICYmCisJCWdpdCBmZXRjaCBjICYmCisJCWdpdCBicmFuY2ggLS10cmFjayBsb2NhbC9hL21hc3RlciByZW1vdGVzL2EvbWFzdGVyICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubG9jYWwvYS9tYXN0ZXIucmVtb3RlKSIgPSAiYyIgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5sb2NhbC9hL21hc3Rlci5tZXJnZSkiID0gInJlZnMvcmVtb3Rlcy9hL21hc3RlciIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBhID5leHBlY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBsb2NhbC9hL21hc3RlciA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZ3VyZWQgY29tbWl0dGVyZGF0ZSBzb3J0JyAnCisJZ2l0IGluaXQgc29ydCAmJgorCSgKKwkJY2Qgc29ydCAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5zb3J0IGNvbW1pdHRlcmRhdGUgJiYKKwkJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYSAmJgorCQl0ZXN0X2NvbW1pdCBhICYmCisJCWdpdCBjaGVja291dCAtYiBjICYmCisJCXRlc3RfY29tbWl0IGMgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGIgJiYKKwkJdGVzdF9jb21taXQgYiAmJgorCQlnaXQgYnJhbmNoID5hY3R1YWwgJiYKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQkgIG1hc3RlcgorCQkgIGEKKwkJICBjCisJCSogYgorCQlFT0YKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW9uIG92ZXJyaWRlIGNvbmZpZ3VyZWQgc29ydCcgJworCSgKKwkJY2Qgc29ydCAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5zb3J0IGNvbW1pdHRlcmRhdGUgJiYKKwkJZ2l0IGJyYW5jaCAtLXNvcnQ9cmVmbmFtZSA+YWN0dWFsICYmCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJICBhCisJCSogYgorCQkgIGMKKwkJICBtYXN0ZXIKKwkJRU9GCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgc29ydCBwYXJhbWV0ZXIgaW4gY29uZmlndXJhdGlvbicgJworCSgKKwkJY2Qgc29ydCAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5zb3J0ICJ2Om5vdHZhbGlkIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMyMDEtYnJhbmNoLWNvbnRhaW5zLnNoIGIvdC90MzIwMS1icmFuY2gtY29udGFpbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDAyNTFjOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMyMDEtYnJhbmNoLWNvbnRhaW5zLnNoCkBAIC0wLDAgKzEsMjE0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYnJhbmNoIC0tY29udGFpbnMgPGNvbW1pdD4sIC0tbm8tY29udGFpbnMgPGNvbW1pdD4gLS1tZXJnZWQsIGFuZCAtLW5vLW1lcmdlZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKworCWVjaG8gMSA+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gInNlY29uZCBvbiBtYXN0ZXIiICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWVjaG8gMSA+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gInNlY29uZCBvbiBzaWRlIiAmJgorCisJZ2l0IG1lcmdlIG1hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtLWNvbnRhaW5zPW1hc3RlcicgJworCisJZ2l0IGJyYW5jaCAtLWNvbnRhaW5zPW1hc3RlciA+YWN0dWFsICYmCisJeworCQllY2hvICIgIG1hc3RlciIgJiYgZWNobyAiKiBzaWRlIgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLS1jb250YWlucyBtYXN0ZXInICcKKworCWdpdCBicmFuY2ggLS1jb250YWlucyBtYXN0ZXIgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiICBtYXN0ZXIiICYmIGVjaG8gIiogc2lkZSIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tbm8tY29udGFpbnM9bWFzdGVyJyAnCisKKwlnaXQgYnJhbmNoIC0tbm8tY29udGFpbnM9bWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tbm8tY29udGFpbnMgbWFzdGVyJyAnCisKKwlnaXQgYnJhbmNoIC0tbm8tY29udGFpbnMgbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tY29udGFpbnM9c2lkZScgJworCisJZ2l0IGJyYW5jaCAtLWNvbnRhaW5zPXNpZGUgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiKiBzaWRlIgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLS1uby1jb250YWlucz1zaWRlJyAnCisKKwlnaXQgYnJhbmNoIC0tbm8tY29udGFpbnM9c2lkZSA+YWN0dWFsICYmCisJeworCQllY2hvICIgIG1hc3RlciIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tY29udGFpbnMgd2l0aCBwYXR0ZXJuIGltcGxpZXMgLS1saXN0JyAnCisKKwlnaXQgYnJhbmNoIC0tY29udGFpbnM9bWFzdGVyIG1hc3RlciA+YWN0dWFsICYmCisJeworCQllY2hvICIgIG1hc3RlciIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tbm8tY29udGFpbnMgd2l0aCBwYXR0ZXJuIGltcGxpZXMgLS1saXN0JyAnCisKKwlnaXQgYnJhbmNoIC0tbm8tY29udGFpbnM9bWFzdGVyIG1hc3RlciA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZGU6IGJyYW5jaCAtLW1lcmdlZCcgJworCisJZ2l0IGJyYW5jaCAtLW1lcmdlZCA+YWN0dWFsICYmCisJeworCQllY2hvICIgIG1hc3RlciIgJiYKKwkJZWNobyAiKiBzaWRlIgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLS1tZXJnZWQgd2l0aCBwYXR0ZXJuIGltcGxpZXMgLS1saXN0JyAnCisKKwlnaXQgYnJhbmNoIC0tbWVyZ2VkPXNpZGUgbWFzdGVyID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIiAgbWFzdGVyIgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWRlOiBicmFuY2ggLS1uby1tZXJnZWQnICcKKworCWdpdCBicmFuY2ggLS1uby1tZXJnZWQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXN0ZXI6IGJyYW5jaCAtLW1lcmdlZCcgJworCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLS1tZXJnZWQgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiKiBtYXN0ZXIiCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hc3RlcjogYnJhbmNoIC0tbm8tbWVyZ2VkJyAnCisKKwlnaXQgYnJhbmNoIC0tbm8tbWVyZ2VkID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIiAgc2lkZSIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tbm8tbWVyZ2VkIHdpdGggcGF0dGVybiBpbXBsaWVzIC0tbGlzdCcgJworCisJZ2l0IGJyYW5jaCAtLW5vLW1lcmdlZD1tYXN0ZXIgbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wbGljaXQgLS1saXN0IGNvbmZsaWN0cyB3aXRoIG1vZGlmaWNhdGlvbiBvcHRpb25zJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tY29udGFpbnM9bWFzdGVyIC1kICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLWNvbnRhaW5zPW1hc3RlciAtbSBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tbm8tY29udGFpbnM9bWFzdGVyIC1kICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLW5vLWNvbnRhaW5zPW1hc3RlciAtbSBmb28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBc3NlcnQgdGhhdCAtLWNvbnRhaW5zIG9ubHkgd29ya3Mgb24gY29tbWl0cywgbm90IHRyZWVzICYgYmxvYnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tY29udGFpbnMgbWFzdGVyXnt0cmVlfSAmJgorCWJsb2I9JChnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiA8PC1cRU9GCisJU29tZSBibG9iCisJRU9GCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS1jb250YWlucyAkYmxvYiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS1uby1jb250YWlucyAkYmxvYgorJworCisjIFdlIHdhbnQgdG8gc2V0IHVwIGEgY2FzZSB3aGVyZSB0aGUgd2FsayBmb3IgdGhlIHRyYWNraW5nIGluZm8KKyMgb2Ygb25lIGJyYW5jaCBjcm9zc2VzIHRoZSB0aXAgb2YgYW5vdGhlciBicmFuY2ggKGFuZCBtYWtlIHN1cmUKKyMgdGhhdCB0aGUgbGF0dGVyIHdhbGsgZG9lcyBub3QgbWVzcyB1cCBvdXIgZmxhZyB0byBzZWUgaWYgaXQgd2FzCisjIG1lcmdlZCkuCisjCisjIEhlcmUgInRvcGljIiB0cmFja3MgIm1hc3RlciIgd2l0aCBvbmUgZXh0cmEgY29tbWl0LCBhbmQgInp6eiIgcG9pbnRzIHRvIHRoZQorIyBzYW1lIHRpcCBhcyBtYXN0ZXIgVGhlIG5hbWUgInp6eiIgbXVzdCBjb21lIGFscGhhYmV0aWNhbGx5IGFmdGVyICJ0b3BpYyIKKyMgYXMgd2UgcHJvY2VzcyB0aGVtIGluIHRoYXQgb3JkZXIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLS1tZXJnZWQgd2l0aCAtLXZlcmJvc2UnICcKKwlnaXQgYnJhbmNoIC0tdHJhY2sgdG9waWMgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCB6enogdG9waWMgJiYKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwl0ZXN0X2NvbW1pdCBmb28gJiYKKwlnaXQgYnJhbmNoIC0tbWVyZ2VkIHRvcGljID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJICBtYXN0ZXIKKwkqIHRvcGljCisJICB6enoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGJyYW5jaCAtLXZlcmJvc2UgLS1tZXJnZWQgdG9waWMgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSAgbWFzdGVyICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IG1hc3Rlcikgc2Vjb25kIG9uIG1hc3RlcgorCSogdG9waWMgICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHRvcGljICkgW2FoZWFkIDFdIGZvbworCSAgenp6ICAgICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHp6eiAgICkgc2Vjb25kIG9uIG1hc3RlcgorCUVPRgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtLWNvbnRhaW5zIGNvbWJpbmVkIHdpdGggLS1uby1jb250YWlucycgJworCWdpdCBicmFuY2ggLS1jb250YWlucyB6enogLS1uby1jb250YWlucyB0b3BpYyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSAgbWFzdGVyCisJICBzaWRlCisJICB6enoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjAyLXNob3ctYnJhbmNoLW9jdG9wdXMuc2ggYi90L3QzMjAyLXNob3ctYnJhbmNoLW9jdG9wdXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmFkZjQ3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMyMDItc2hvdy1icmFuY2gtb2N0b3B1cy5zaApAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBzaG93LWJyYW5jaCB3aXRoIG1vcmUgdGhhbiA4IGhlYWRzJworCisuIC4vdGVzdC1saWIuc2gKKworbnVtYmVycz0iMSAyIDMgNCA1IDYgNyA4IDkgMTAiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwk+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCWZvciBpIGluICRudW1iZXJzCisJZG8KKwkJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCRpIG1hc3RlciAmJgorCQk+IGZpbGUkaSAmJgorCQlnaXQgYWRkIGZpbGUkaSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSBicmFuY2gkaSB8fCByZXR1cm4gMQorCWRvbmUKKworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCishIFticmFuY2gxXSBicmFuY2gxCisgISBbYnJhbmNoMl0gYnJhbmNoMgorICAhIFticmFuY2gzXSBicmFuY2gzCisgICAhIFticmFuY2g0XSBicmFuY2g0CisgICAgISBbYnJhbmNoNV0gYnJhbmNoNQorICAgICAhIFticmFuY2g2XSBicmFuY2g2CisgICAgICAhIFticmFuY2g3XSBicmFuY2g3CisgICAgICAgISBbYnJhbmNoOF0gYnJhbmNoOAorICAgICAgICAhIFticmFuY2g5XSBicmFuY2g5CisgICAgICAgICAqIFticmFuY2gxMF0gYnJhbmNoMTAKKy0tLS0tLS0tLS0KKyAgICAgICAgICogW2JyYW5jaDEwXSBicmFuY2gxMAorICAgICAgICArICBbYnJhbmNoOV0gYnJhbmNoOQorICAgICAgICsgICBbYnJhbmNoOF0gYnJhbmNoOAorICAgICAgKyAgICBbYnJhbmNoN10gYnJhbmNoNworICAgICArICAgICBbYnJhbmNoNl0gYnJhbmNoNgorICAgICsgICAgICBbYnJhbmNoNV0gYnJhbmNoNQorICAgKyAgICAgICBbYnJhbmNoNF0gYnJhbmNoNAorICArICAgICAgICBbYnJhbmNoM10gYnJhbmNoMworICsgICAgICAgICBbYnJhbmNoMl0gYnJhbmNoMgorKyAgICAgICAgICBbYnJhbmNoMV0gYnJhbmNoMQorKysrKysrKysrKiBbYnJhbmNoMTBeXSBpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1icmFuY2ggd2l0aCBtb3JlIHRoYW4gOCBicmFuY2hlcycgJworCisJZ2l0IHNob3ctYnJhbmNoICQoZm9yIGkgaW4gJG51bWJlcnM7IGRvIGVjaG8gYnJhbmNoJGk7IGRvbmUpID4gb3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3ctYnJhbmNoIHdpdGggc2hvd2JyYW5jaC5kZWZhdWx0JyAnCisJZm9yIGkgaW4gJG51bWJlcnM7IGRvCisJCWdpdCBjb25maWcgLS1hZGQgc2hvd2JyYW5jaC5kZWZhdWx0IGJyYW5jaCRpCisJZG9uZSAmJgorCWdpdCBzaG93LWJyYW5jaCA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMyMDMtYnJhbmNoLW91dHB1dC5zaCBiL3QvdDMyMDMtYnJhbmNoLW91dHB1dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MTgxOGI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzIwMy1icmFuY2gtb3V0cHV0LnNoCkBAIC0wLDAgKzEsMzUxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGJyYW5jaCBkaXNwbGF5IHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGNvbW1pdHMnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGJyYW5jaGVzJyAnCisJZ2l0IGJyYW5jaCBicmFuY2gtb25lICYmCisJZ2l0IGJyYW5jaCBicmFuY2gtdHdvIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgcmVtb3RlIGJyYW5jaGVzJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2gtb25lIGJyYW5jaC1vbmUgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaC10d28gYnJhbmNoLXR3byAmJgorCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIHJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoLW9uZQorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCisgIGJyYW5jaC1vbmUKKyAgYnJhbmNoLXR3bworKiBtYXN0ZXIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBzaG93cyBsb2NhbCBicmFuY2hlcycgJworCWdpdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWxpc3Qgc2hvd3MgbG9jYWwgYnJhbmNoZXMnICcKKwlnaXQgYnJhbmNoIC0tbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCisgIGJyYW5jaC1vbmUKKyAgYnJhbmNoLXR3bworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0tbGlzdCBwYXR0ZXJuIHNob3dzIG1hdGNoaW5nIGxvY2FsIGJyYW5jaGVzJyAnCisJZ2l0IGJyYW5jaCAtLWxpc3QgYnJhbmNoKiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCisgIG9yaWdpbi9IRUFEIC0+IG9yaWdpbi9icmFuY2gtb25lCisgIG9yaWdpbi9icmFuY2gtb25lCisgIG9yaWdpbi9icmFuY2gtdHdvCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLXIgc2hvd3MgcmVtb3RlIGJyYW5jaGVzJyAnCisJZ2l0IGJyYW5jaCAtciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCisgIGJyYW5jaC1vbmUKKyAgYnJhbmNoLXR3bworKiBtYXN0ZXIKKyAgcmVtb3Rlcy9vcmlnaW4vSEVBRCAtPiBvcmlnaW4vYnJhbmNoLW9uZQorICByZW1vdGVzL29yaWdpbi9icmFuY2gtb25lCisgIHJlbW90ZXMvb3JpZ2luL2JyYW5jaC10d28KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtYSBzaG93cyBsb2NhbCBhbmQgcmVtb3RlIGJyYW5jaGVzJyAnCisJZ2l0IGJyYW5jaCAtYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCit0d28KK29uZQordHdvCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLXYgc2hvd3MgYnJhbmNoIHN1bW1hcmllcycgJworCWdpdCBicmFuY2ggLXYgPnRtcCAmJgorCWF3ayAie3ByaW50IFwkTkZ9IiA8dG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK3R3bworb25lCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLS1saXN0IC12IHBhdHRlcm4gc2hvd3MgYnJhbmNoIHN1bW1hcmllcycgJworCWdpdCBicmFuY2ggLS1saXN0IC12IGJyYW5jaCogPnRtcCAmJgorCWF3ayAie3ByaW50IFwkTkZ9IiA8dG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0taWdub3JlLWNhc2UgLS1saXN0IC12IHBhdHRlcm4gc2hvd3MgYnJhbmNoIHN1bW1hcmllcycgJworCWdpdCBicmFuY2ggLS1saXN0IC0taWdub3JlLWNhc2UgLXYgQlJBTkNIKiA+dG1wICYmCisJYXdrICJ7cHJpbnQgXCRORn0iIDx0bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtdiBwYXR0ZXJuIGRvZXMgbm90IHNob3cgYnJhbmNoIHN1bW1hcmllcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLXYgYnJhbmNoKgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIGAtLXNob3ctY3VycmVudGAgc2hvd3MgY3VycmVudCBicmFuY2gnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJYnJhbmNoLXR3bworCUVPRgorCWdpdCBjaGVja291dCBicmFuY2gtdHdvICYmCisJZ2l0IGJyYW5jaCAtLXNob3ctY3VycmVudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIGAtLXNob3ctY3VycmVudGAgaXMgc2lsZW50IHdoZW4gZGV0YWNoZWQgSEVBRCcgJworCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwlnaXQgYnJhbmNoIC0tc2hvdy1jdXJyZW50ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggYC0tc2hvdy1jdXJyZW50YCB3b3JrcyBwcm9wZXJseSB3aGVuIHRhZyBleGlzdHMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJYnJhbmNoLWFuZC10YWctbmFtZQorCUVPRgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiCisJCWdpdCBjaGVja291dCBicmFuY2gtb25lCisJCWdpdCBicmFuY2ggLUQgYnJhbmNoLWFuZC10YWctbmFtZQorCSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoLWFuZC10YWctbmFtZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHRhZyAtZCBicmFuY2gtYW5kLXRhZy1uYW1lIiAmJgorCWdpdCB0YWcgYnJhbmNoLWFuZC10YWctbmFtZSAmJgorCWdpdCBicmFuY2ggLS1zaG93LWN1cnJlbnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBgLS1zaG93LWN1cnJlbnRgIHdvcmtzIHByb3Blcmx5IHdpdGggd29ya3RyZWVzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWJyYW5jaC1vbmUKKwlicmFuY2gtdHdvCisJRU9GCisJZ2l0IGNoZWNrb3V0IGJyYW5jaC1vbmUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIgorCQlnaXQgd29ya3RyZWUgcmVtb3ZlIHdvcmt0cmVlX2RpcgorCSIgJiYKKwlnaXQgd29ya3RyZWUgYWRkIHdvcmt0cmVlX2RpciBicmFuY2gtdHdvICYmCisJeworCQlnaXQgYnJhbmNoIC0tc2hvdy1jdXJyZW50ICYmCisJCWdpdCAtQyB3b3JrdHJlZV9kaXIgYnJhbmNoIC0tc2hvdy1jdXJyZW50CisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIHNob3dzIGRldGFjaGVkIEhFQUQgcHJvcGVybHknICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorKiAoSEVBRCBkZXRhY2hlZCBhdCAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXjApKQorICBicmFuY2gtb25lCisgIGJyYW5jaC10d28KKyAgbWFzdGVyCitFT0YKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJZ2l0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBzaG93cyBkZXRhY2hlZCBIRUFEIHByb3Blcmx5IGFmdGVyIGNoZWNrb3V0IC0tZGV0YWNoJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWNhdCA+ZXhwZWN0IDw8RU9GICYmCisqIChIRUFEIGRldGFjaGVkIGF0ICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReMCkpCisgIGJyYW5jaC1vbmUKKyAgYnJhbmNoLXR3bworICBtYXN0ZXIKK0VPRgorCWdpdCBjaGVja291dCAtLWRldGFjaCAmJgorCWdpdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggc2hvd3MgZGV0YWNoZWQgSEVBRCBwcm9wZXJseSBhZnRlciBtb3ZpbmcnICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorKiAoSEVBRCBkZXRhY2hlZCBmcm9tICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpKQorICBicmFuY2gtb25lCisgIGJyYW5jaC10d28KKyAgbWFzdGVyCitFT0YKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReMSAmJgorCWdpdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggc2hvd3MgZGV0YWNoZWQgSEVBRCBwcm9wZXJseSBmcm9tIHRhZycgJworCWNhdCA+ZXhwZWN0IDw8RU9GICYmCisqIChIRUFEIGRldGFjaGVkIGF0IGZyb210YWcpCisgIGJyYW5jaC1vbmUKKyAgYnJhbmNoLXR3bworICBtYXN0ZXIKK0VPRgorCWdpdCB0YWcgZnJvbXRhZyBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgZnJvbXRhZyAmJgorCWdpdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggc2hvd3MgZGV0YWNoZWQgSEVBRCBwcm9wZXJseSBhZnRlciBtb3ZpbmcgZnJvbSB0YWcnICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorKiAoSEVBRCBkZXRhY2hlZCBmcm9tIGZyb210YWcpCisgIGJyYW5jaC1vbmUKKyAgYnJhbmNoLXR3bworICBtYXN0ZXIKK0VPRgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4xICYmCisJZ2l0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBgLS1zb3J0YCBvcHRpb24nICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJKiAoSEVBRCBkZXRhY2hlZCBmcm9tIGZyb210YWcpCisJICBicmFuY2gtdHdvCisJICBicmFuY2gtb25lCisJICBtYXN0ZXIKKwlFT0YKKwlnaXQgYnJhbmNoIC0tc29ydD1vYmplY3RzaXplID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0tcG9pbnRzLWF0IG9wdGlvbicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgIGJyYW5jaC1vbmUKKwkgIG1hc3RlcgorCUVPRgorCWdpdCBicmFuY2ggLS1wb2ludHMtYXQ9YnJhbmNoLW9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWJpZ3VvdXMgYnJhbmNoL3RhZyBub3QgbWFya2VkJyAnCisJZ2l0IHRhZyBhbWJpZ3VvdXMgJiYKKwlnaXQgYnJhbmNoIGFtYmlndW91cyAmJgorCWVjaG8gIiAgYW1iaWd1b3VzIiA+ZXhwZWN0ICYmCisJZ2l0IGJyYW5jaCAtLWxpc3QgYW1iaWd1b3VzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsLWJyYW5jaCBzeW1yZWZzIHNob3J0ZW5lZCBwcm9wZXJseScgJworCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9yZWYtdG8tYnJhbmNoIHJlZnMvaGVhZHMvYnJhbmNoLW9uZSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9yZWYtdG8tcmVtb3RlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoLW9uZSAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgIHJlZi10by1icmFuY2ggLT4gYnJhbmNoLW9uZQorCSAgcmVmLXRvLXJlbW90ZSAtPiBvcmlnaW4vYnJhbmNoLW9uZQorCUVPRgorCWdpdCBicmFuY2ggPmFjdHVhbC5yYXcgJiYKKwlncmVwIHJlZi10byA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzb3J0IGJyYW5jaGVzLCBpZ25vcmUgY2FzZScgJworCSgKKwkJZ2l0IGluaXQgc29ydC1pY2FzZSAmJgorCQljZCBzb3J0LWljYXNlICYmCisJCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwkJZ2l0IGJyYW5jaCBicmFuY2gtb25lICYmCisJCWdpdCBicmFuY2ggQlJBTkNILXR3byAmJgorCQlnaXQgYnJhbmNoIC0tbGlzdCB8IGF3ayAie3ByaW50IFwkTkZ9IiA+YWN0dWFsICYmCisJCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCUkFOQ0gtdHdvCisJCWJyYW5jaC1vbmUKKwkJbWFzdGVyCisJCUVPRgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkJZ2l0IGJyYW5jaCAtLWxpc3QgLWkgfCBhd2sgIntwcmludCBcJE5GfSIgPmFjdHVhbCAmJgorCQljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJYnJhbmNoLW9uZQorCQlCUkFOQ0gtdHdvCisJCW1hc3RlcgorCQlFT0YKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0tZm9ybWF0IG9wdGlvbicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlSZWZuYW1lIGlzIChIRUFEIGRldGFjaGVkIGZyb20gZnJvbXRhZykKKwlSZWZuYW1lIGlzIHJlZnMvaGVhZHMvYW1iaWd1b3VzCisJUmVmbmFtZSBpcyByZWZzL2hlYWRzL2JyYW5jaC1vbmUKKwlSZWZuYW1lIGlzIHJlZnMvaGVhZHMvYnJhbmNoLXR3bworCVJlZm5hbWUgaXMgcmVmcy9oZWFkcy9tYXN0ZXIKKwlSZWZuYW1lIGlzIHJlZnMvaGVhZHMvcmVmLXRvLWJyYW5jaAorCVJlZm5hbWUgaXMgcmVmcy9oZWFkcy9yZWYtdG8tcmVtb3RlCisJRU9GCisJZ2l0IGJyYW5jaCAtLWZvcm1hdD0iUmVmbmFtZSBpcyAlKHJlZm5hbWUpIiA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd29ya3RyZWUgY29sb3JzIGNvcnJlY3QnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkqIDxHUkVFTj4oSEVBRCBkZXRhY2hlZCBmcm9tIGZyb210YWcpPFJFU0VUPgorCSAgYW1iaWd1b3VzPFJFU0VUPgorCSAgYnJhbmNoLW9uZTxSRVNFVD4KKwkrIDxDWUFOPmJyYW5jaC10d288UkVTRVQ+CisJICBtYXN0ZXI8UkVTRVQ+CisJICByZWYtdG8tYnJhbmNoPFJFU0VUPiAtPiBicmFuY2gtb25lCisJICByZWYtdG8tcmVtb3RlPFJFU0VUPiAtPiBvcmlnaW4vYnJhbmNoLW9uZQorCUVPRgorCWdpdCB3b3JrdHJlZSBhZGQgd29ya3RyZWVfZGlyIGJyYW5jaC10d28gJiYKKwlnaXQgYnJhbmNoIC0tY29sb3IgPmFjdHVhbC5yYXcgJiYKKwlybSAtciB3b3JrdHJlZV9kaXIgJiYKKwlnaXQgd29ya3RyZWUgcHJ1bmUgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0IHVwIGNvbG9yIHRlc3RzIiAnCisJZWNobyAiPFJFRD5tYXN0ZXI8UkVTRVQ+IiA+ZXhwZWN0LmNvbG9yICYmCisJZWNobyAibWFzdGVyIiA+ZXhwZWN0LmJhcmUgJiYKKwljb2xvcl9hcmdzPSItLWZvcm1hdD0lKGNvbG9yOnJlZCklKHJlZm5hbWU6c2hvcnQpIC0tbGlzdCBtYXN0ZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUoY29sb3IpIG9taXR0ZWQgd2l0aG91dCB0dHknICcKKwlURVJNPXZ0MTAwIGdpdCBicmFuY2ggJGNvbG9yX2FyZ3MgPmFjdHVhbC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmJhcmUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICclKGNvbG9yKSBwcmVzZW50IHdpdGggdHR5JyAnCisJdGVzdF90ZXJtaW5hbCBnaXQgYnJhbmNoICRjb2xvcl9hcmdzID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5jb2xvciBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb2xvciBvdmVycmlkZXMgYXV0by1jb2xvcicgJworCWdpdCBicmFuY2ggLS1jb2xvciAkY29sb3JfYXJncyA+YWN0dWFsLnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuY29sb3IgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmJvc2Ugb3V0cHV0IGxpc3RzIHdvcmt0cmVlIHBhdGgnICcKKwlvbmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwl0d289JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgbWFzdGVyKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSogKEhFQUQgZGV0YWNoZWQgZnJvbSBmcm9tdGFnKSAkb25lIG9uZQorCSAgYW1iaWd1b3VzICAgICAgICAgICAgICAgICAgICAkb25lIG9uZQorCSAgYnJhbmNoLW9uZSAgICAgICAgICAgICAgICAgICAkdHdvIHR3bworCSsgYnJhbmNoLXR3byAgICAgICAgICAgICAgICAgICAkb25lICgkKHB3ZCkvd29ya3RyZWVfZGlyKSBvbmUKKwkgIG1hc3RlciAgICAgICAgICAgICAgICAgICAgICAgJHR3byB0d28KKwkgIHJlZi10by1icmFuY2ggICAgICAgICAgICAgICAgJHR3byB0d28KKwkgIHJlZi10by1yZW1vdGUgICAgICAgICAgICAgICAgJHR3byB0d28KKwlFT0YKKwlnaXQgd29ya3RyZWUgYWRkIHdvcmt0cmVlX2RpciBicmFuY2gtdHdvICYmCisJZ2l0IGJyYW5jaCAtdnYgPmFjdHVhbCAmJgorCXJtIC1yIHdvcmt0cmVlX2RpciAmJgorCWdpdCB3b3JrdHJlZSBwcnVuZSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIwNC1icmFuY2gtbmFtZS1pbnRlcnByZXRhdGlvbi5zaCBiL3QvdDMyMDQtYnJhbmNoLW5hbWUtaW50ZXJwcmV0YXRpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjk4ZDljYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMyMDQtYnJhbmNoLW5hbWUtaW50ZXJwcmV0YXRpb24uc2gKQEAgLTAsMCArMSwxMzMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdpbnRlcnByZXRpbmcgZXhvdGljIGJyYW5jaCBuYW1lIGFyZ3VtZW50cworCitCcmFuY2ggbmFtZSBhcmd1bWVudHMgYXJlIHVzdWFsbHkgbmFtZXMgd2hpY2ggYXJlIHRha2VuIHRvIGJlIGluc2lkZSBvZgorcmVmcy9oZWFkcy8sIGJ1dCB3ZSBpbnRlcnByZXQgc29tZSBtYWdpYyBzeW50YXggbGlrZSBAey0xfSwgQHt1cHN0cmVhbX0sIGV0Yy4KK1RoaXMgc2NyaXB0IGFpbXMgdG8gY2hlY2sgdGhlIGJlaGF2aW9yIG9mIHRob3NlIGNvcm5lciBjYXNlcy4KKycKKy4gLi90ZXN0LWxpYi5zaAorCitleHBlY3RfYnJhbmNoKCkgeworCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgIiQxIiA+YWN0dWFsICYmCisJZWNobyAiJDIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK2V4cGVjdF9kZWxldGVkKCkgeworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgcmVwbycgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiBmb28uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBicmFuY2ggdmlhIEB7LTF9JyAnCisJZ2l0IGJyYW5jaCBwcmV2aW91cyBvbmUgJiYKKworCWdpdCBjaGVja291dCBwcmV2aW91cyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCWdpdCBicmFuY2ggLWYgQHstMX0gdHdvICYmCisJZXhwZWN0X2JyYW5jaCBwcmV2aW91cyB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGJyYW5jaCB2aWEgbG9jYWwgQHt1cHN0cmVhbX0nICcKKwlnaXQgYnJhbmNoIGxvY2FsIG9uZSAmJgorCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89bG9jYWwgJiYKKworCWdpdCBicmFuY2ggLWYgQHt1cHN0cmVhbX0gdHdvICYmCisJZXhwZWN0X2JyYW5jaCBsb2NhbCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYWxsb3cgdXBkYXRpbmcgYnJhbmNoIHZpYSByZW1vdGUgQHt1cHN0cmVhbX0nICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL3JlbW90ZSBvbmUgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPW9yaWdpbi9yZW1vdGUgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLWYgQHt1cHN0cmVhbX0gdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBicmFuY2ggd2l0aCBwc2V1ZG8tcXVhbGlmaWVkIG5hbWUnICcKKwlnaXQgYnJhbmNoIHJlZnMvaGVhZHMvcXVhbGlmaWVkIHR3byAmJgorCWV4cGVjdF9icmFuY2ggcmVmcy9oZWFkcy9yZWZzL2hlYWRzL3F1YWxpZmllZCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlIGJyYW5jaCB2aWEgQHstMX0nICcKKwlnaXQgYnJhbmNoIHByZXZpb3VzLWRlbCAmJgorCisJZ2l0IGNoZWNrb3V0IHByZXZpb3VzLWRlbCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCWdpdCBicmFuY2ggLUQgQHstMX0gJiYKKwlleHBlY3RfZGVsZXRlZCBwcmV2aW91cy1kZWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlIGJyYW5jaCB2aWEgbG9jYWwgQHt1cHN0cmVhbX0nICcKKwlnaXQgYnJhbmNoIGxvY2FsLWRlbCAmJgorCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89bG9jYWwtZGVsICYmCisKKwlnaXQgYnJhbmNoIC1EIEB7dXBzdHJlYW19ICYmCisJZXhwZWN0X2RlbGV0ZWQgbG9jYWwtZGVsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSBicmFuY2ggdmlhIHJlbW90ZSBAe3Vwc3RyZWFtfScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vcmVtb3RlLWRlbCB0d28gJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPW9yaWdpbi9yZW1vdGUtZGVsICYmCisKKwlnaXQgYnJhbmNoIC1yIC1EIEB7dXBzdHJlYW19ICYmCisJZXhwZWN0X2RlbGV0ZWQgb3JpZ2luL3JlbW90ZS1kZWwKKycKKworIyBOb3RlIHRoYXQgd2UgY3JlYXRlIHR3byBvZGRseSBuYW1lZCBsb2NhbCBicmFuY2hlcyBoZXJlLiBXZSB3YW50IHRvIG1ha2UKKyMgc3VyZSB0aGF0IHdlIGRvIG5vdCBhY2NpZGVudGFsbHkgZGVsZXRlIGVpdGhlciBvZiB0aGVtLCBldmVuIGlmCisjIHNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKCkgdHdlYWtzIHRoZSBuYW1lIHRvIGF2b2lkIGFtYmlndWl0eS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSBAe3Vwc3RyZWFtfSBleHBhbnNpb24gbWF0Y2hlcyAtciBvcHRpb24nICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL3JlbW90ZS1kZWwgdHdvICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz1vcmlnaW4vcmVtb3RlLWRlbCAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvb3JpZ2luL3JlbW90ZS1kZWwgdHdvICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9yZW1vdGVzL29yaWdpbi9yZW1vdGUtZGVsIHR3byAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBAe3Vwc3RyZWFtfSAmJgorCWV4cGVjdF9icmFuY2ggcmVmcy9oZWFkcy9vcmlnaW4vcmVtb3RlLWRlbCB0d28gJiYKKwlleHBlY3RfYnJhbmNoIHJlZnMvaGVhZHMvcmVtb3Rlcy9vcmlnaW4vcmVtb3RlLWRlbCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYWxsb3cgZGVsZXRpbmcgcmVtb3RlIGJyYW5jaCB2aWEgQHstMX0nICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL3ByZXZpb3VzIG9uZSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIG9yaWdpbi9wcmV2aW91cyB0d28gJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1yIC1EIEB7LTF9ICYmCisJZXhwZWN0X2JyYW5jaCByZWZzL3JlbW90ZXMvb3JpZ2luL3ByZXZpb3VzIG9uZSAmJgorCWV4cGVjdF9icmFuY2ggcmVmcy9oZWFkcy9vcmlnaW4vcHJldmlvdXMgdHdvCisnCisKKyMgVGhlIHRoaW5nIHdlIGFyZSB0ZXN0aW5nIGhlcmUgaXMgdGhhdCAiQCIgaXMgdGhlIHJlYWwgYnJhbmNoIHJlZnMvaGVhZHMvQCwKKyMgYW5kIG5vdCByZWZzL2hlYWRzL0hFQUQuIFRoZXNlIHRlc3RzIHNob3VsZCBub3QgaW1wbHkgdGhhdCByZWZzL2hlYWRzL0AgaXMgYQorIyBzYW5lIHRoaW5nLCBidXQgaXQgX2lzXyB0ZWNobmljYWxseSBhbGxvd2VkIGZvciBub3cuIElmIHdlIGRpc2FsbG93IGl0LCB0aGVzZQorIyBjYW4gYmUgc3dpdGNoZWQgdG8gdGVzdF9tdXN0X2ZhaWwuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYnJhbmNoIG5hbWVkICJAIicgJworCWdpdCBicmFuY2ggLWYgQCBvbmUgJiYKKwlleHBlY3RfYnJhbmNoIHJlZnMvaGVhZHMvQCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlIGJyYW5jaCBuYW1lZCAiQCInICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL0AgdHdvICYmCisJZ2l0IGJyYW5jaCAtRCBAICYmCisJZXhwZWN0X2RlbGV0ZWQgcmVmcy9oZWFkcy9ACisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGRvZXMgbm90IHRyZWF0IHJlbW90ZSBAe3Vwc3RyZWFtfSBhcyBhIGJyYW5jaCcgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vY2hlY2tvdXQgb25lICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz1vcmlnaW4vY2hlY2tvdXQgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL29yaWdpbi9jaGVja291dCB0d28gJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3JlbW90ZXMvb3JpZ2luL2NoZWNrb3V0IHR3byAmJgorCisJZ2l0IGNoZWNrb3V0IEB7dXBzdHJlYW19ICYmCisJZXhwZWN0X2JyYW5jaCBIRUFEIG9uZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMyMDUtYnJhbmNoLWNvbG9yLnNoIGIvdC90MzIwNS1icmFuY2gtY29sb3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGYxZTE2YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMyMDUtYnJhbmNoLWNvbG9yLnNoCkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyBicmFuY2ggb3V0cHV0IGNvbG9yaW5nJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBzb21lIHNhbXBsZSBicmFuY2hlcycgJworCXRlc3RfY29tbWl0IGZvbyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIEhFQUQgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL290aGVyIEhFQUQKKycKKworIyBjaG9vc2Ugbm9uLWRlZmF1bHQgY29sb3JzIHRvIG1ha2Ugc3VyZSBjb25maWcKKyMgaXMgdGFraW5nIGVmZmVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHNvbWUgY29sb3IgY29uZmlnJyAnCisJZ2l0IGNvbmZpZyBjb2xvci5icmFuY2gubG9jYWwgYmx1ZSAmJgorCWdpdCBjb25maWcgY29sb3IuYnJhbmNoLnJlbW90ZSB5ZWxsb3cgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmJyYW5jaC5jdXJyZW50IGN5YW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVndWxhciBvdXRwdXQgc2hvd3MgY29sb3JzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSogPENZQU4+bWFzdGVyPFJFU0VUPgorCSAgPEJMVUU+b3RoZXI8UkVTRVQ+CisJICA8WUVMTE9XPnJlbW90ZXMvb3JpZ2luL21hc3RlcjxSRVNFVD4KKwlFT0YKKwlnaXQgYnJhbmNoIC0tY29sb3IgLWEgPmFjdHVhbC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJib3NlIG91dHB1dCBzaG93cyBjb2xvcnMnICcKKwlvaWQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkqIDxDWUFOPm1hc3RlciAgICAgICAgICAgICAgIDxSRVNFVD4gJG9pZCBmb28KKwkgIDxCTFVFPm90aGVyICAgICAgICAgICAgICAgIDxSRVNFVD4gJG9pZCBmb28KKwkgIDxZRUxMT1c+cmVtb3Rlcy9vcmlnaW4vbWFzdGVyPFJFU0VUPiAkb2lkIGZvbworCUVPRgorCWdpdCBicmFuY2ggLS1jb2xvciAtdiAtYSA+YWN0dWFsLnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIwNi1yYW5nZS1kaWZmLnNoIGIvdC90MzIwNi1yYW5nZS1kaWZmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUwMjRjZmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMjA2LXJhbmdlLWRpZmYuc2gKQEAgLTAsMCArMSw3MjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyYW5nZS1kaWZmIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKworIyBOb3RlIHRoYXQgYmVjYXVzZSBvZiB0aGUgcmFuZ2UtZGlmZidzIGhldXJpc3RpY3MsIHRlc3RfY29tbWl0IGRvZXMgbW9yZQorIyBoYXJtIHRoYW4gZ29vZC4gIFdlIG5lZWQgc29tZSByZWFsIGhpc3RvcnkuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGZhc3QtaW1wb3J0IDwiJFRFU1RfRElSRUNUT1JZIi90MzIwNi9oaXN0b3J5LmV4cG9ydCAmJgorCXRlc3Rfb2lkX2NhY2hlIDw8LVxFT0YKKwkjIHRvcGljCisJdDEgc2hhMTo0ZGU0NTdkCisJdDIgc2hhMTpmY2NjZTIyCisJdDMgc2hhMToxNDdlNjRlCisJdDQgc2hhMTphNjNlOTkyCisJdDEgc2hhMjU2OmI4OWY4YjkKKwl0MiBzaGEyNTY6NWYxMmFhZAorCXQzIHNoYTI1NjplYThiMjczCisJdDQgc2hhMjU2OjE0YjczMzYKKworCSMgdW5tb2RpZmllZAorCXUxIHNoYTE6MzViOWIyNQorCXUyIHNoYTE6ZGUzNDVhYgorCXUzIHNoYTE6OWFmNjY1NAorCXU0IHNoYTE6MjkwMWY3NworCXUxIHNoYTI1NjplMzczMWJlCisJdTIgc2hhMjU2OjE0ZmFkZjgKKwl1MyBzaGEyNTY6NzM2YzRiYworCXU0IHNoYTI1Njo2NzNlNzdkCisKKwkjIHJlb3JkZXJlZAorCXIxIHNoYTE6YWNhMTc3YQorCXIyIHNoYTE6MTRhZDYyOQorCXIzIHNoYTE6ZWU1ODIwOAorCXI0IHNoYTE6MzA3YjI3YQorCXIxIHNoYTI1NjpmNTlkM2FhCisJcjIgc2hhMjU2OmZiMjYxYTgKKwlyMyBzaGEyNTY6Y2IyNjQ5YgorCXI0IHNoYTI1Njo5NTg1NzdlCisKKwkjIHJlbW92ZWQgKGRlbGV0ZWQpCisJZDEgc2hhMTo3NjU3MTU5CisJZDIgc2hhMTo0M2Q4NGQzCisJZDMgc2hhMTphNzQwMzk2CisJZDEgc2hhMjU2OmUzMTI1MTMKKwlkMiBzaGEyNTY6ZWIxOTI1OAorCWQzIHNoYTI1NjoxY2NiM2MxCisKKwkjIGFkZGVkCisJYTEgc2hhMToyNzE2MDIyCisJYTIgc2hhMTpiNjJhY2NkCisJYTMgc2hhMTpkZjQ2Y2ZhCisJYTQgc2hhMTozZTY0NTQ4CisJYTUgc2hhMToxMmI0MDYzCisJYTEgc2hhMjU2OmQ3MjRmNGQKKwlhMiBzaGEyNTY6MWRlNzc2MgorCWEzIHNoYTI1NjplMTU5NDMxCisJYTQgc2hhMjU2OmIzZTQ4M2MKKwlhNSBzaGEyNTY6OTA4NjZhNworCisJIyByZWJhc2VkCisJYjEgc2hhMTpjYzljNDQzCisJYjIgc2hhMTpjNWQ5NjQxCisJYjMgc2hhMToyOGNjMmI2CisJYjQgc2hhMTo1NjI4YWI3CisJYjUgc2hhMTphMzFiMTJlCisJYjEgc2hhMjU2OmExYTg3MTcKKwliMiBzaGEyNTY6MjBhNTg2MgorCWIzIHNoYTI1Njo1ODcxNzJhCisJYjQgc2hhMjU2OjI3MjFjNWQKKwliNSBzaGEyNTY6N2I1Nzg2NAorCisJIyBjaGFuZ2VkCisJYzEgc2hhMTphNGIzMzMzCisJYzIgc2hhMTpmNTFkMzcwCisJYzMgc2hhMTowNTU5NTU2CisJYzQgc2hhMTpkOTY2YzVjCisJYzEgc2hhMjU2OmY4YzJiOWQKKwljMiBzaGEyNTY6M2ZiNjMxOAorCWMzIHNoYTI1NjoxNjhhYjY4CisJYzQgc2hhMjU2OjM1MjY1MzkKKworCSMgY2hhbmdlZC1tZXNzYWdlCisJbTEgc2hhMTpmNjg2MDI0CisJbTIgc2hhMTo0YWIwNjdkCisJbTMgc2hhMTpiOWNiOTU2CisJbTQgc2hhMTo4YWRkNWYxCisJbTEgc2hhMjU2OjMxZTYyODEKKwltMiBzaGEyNTY6YTA2YmYxYgorCW0zIHNoYTI1Njo4MmRjNjU0CisJbTQgc2hhMjU2OjQ4NDcwYzUKKworCSMgcmVuYW1lZAorCW4xIHNoYTE6ZjI1OGQ3NQorCW4yIHNoYTE6MDE3YjYyZAorCW4zIHNoYTE6M2NlN2FmNgorCW40IHNoYTE6MWU2MjI2YgorCW4xIHNoYTI1NjphZDUyMTE0CisJbjIgc2hhMjU2OjNiNTRjOGYKKwluMyBzaGEyNTY6M2IwYTY0NAorCW40IHNoYTI1NjplNDYxNjUzCisKKwkjIG1vZGUgY2hhbmdlCisJbzEgc2hhMTo0ZDM5Y2IzCisJbzIgc2hhMToyNmMxMDdmCisJbzMgc2hhMTo0YzFlMGY1CisJbzEgc2hhMjU2OmQwZGQ1OTgKKwlvMiBzaGEyNTY6YzRhMjc5ZQorCW8zIHNoYTI1Njo3ODQ1OWQ3CisKKwkjIGFkZGVkIGFuZCByZW1vdmVkCisJczEgc2hhMTowOTZiMWJhCisJczIgc2hhMTpkOTJlNjk4CisJczMgc2hhMTo5YTFkYjRkCisJczQgc2hhMTpmZWEzYjVjCisJczEgc2hhMjU2OmE3ZjkxMzQKKwlzMiBzaGEyNTY6YjRjMjU4MAorCXMzIHNoYTI1NjoxZDYyYWEyCisJczQgc2hhMjU2OjQ4MTYwZTgKKworCSMgRW1wdHkgZGVsaW1pdGVyIChpbmNsdWRlZCBzbyBsaW5lcyBtYXRjaCBuZWF0bHkpCisJX18gc2hhMTotLS0tLS0tCisJX18gc2hhMjU2Oi0tLS0tLS0KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIEEuLkIgQS4uQyAodW5tb2RpZmllZCknICcKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIG1hc3Rlci4udG9waWMgbWFzdGVyLi51bm1vZGlmaWVkIFwKKwkJPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIHUxKSBzLzUvQS8KKwkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCB1Mikgcy80L0EvCisJMzogICQodGVzdF9vaWQgdDMpID0gMzogICQodGVzdF9vaWQgdTMpIHMvMTEvQi8KKwk0OiAgJCh0ZXN0X29pZCB0NCkgPSA0OiAgJCh0ZXN0X29pZCB1NCkgcy8xMi9CLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIEIuLi5DICh1bm1vZGlmaWVkKScgJworCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgdG9waWMuLi51bm1vZGlmaWVkID5hY3R1YWwgJiYKKwkjIHNhbWUgImV4cGVjdCIgYXMgYWJvdmUKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBBIEIgQyAodW5tb2RpZmllZCknICcKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIG1hc3RlciB0b3BpYyB1bm1vZGlmaWVkID5hY3R1YWwgJiYKKwkjIHNhbWUgImV4cGVjdCIgYXMgYWJvdmUKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyaXZpYWwgcmVvcmRlcmluZycgJworCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgbWFzdGVyIHRvcGljIHJlb3JkZXJlZCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgcjEpIHMvNS9BLworCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDI6ICAkKHRlc3Rfb2lkIHIyKSBzLzExL0IvCisJNDogICQodGVzdF9vaWQgdDQpID0gMzogICQodGVzdF9vaWQgcjMpIHMvMTIvQi8KKwkyOiAgJCh0ZXN0X29pZCB0MikgPSA0OiAgJCh0ZXN0X29pZCByNCkgcy80L0EvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmVkIGEgY29tbWl0JyAnCisJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciBtYXN0ZXIgdG9waWMgcmVtb3ZlZCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgZDEpIHMvNS9BLworCTI6ICAkKHRlc3Rfb2lkIHQyKSA8IC06ICAkKHRlc3Rfb2lkIF9fKSBzLzQvQS8KKwkzOiAgJCh0ZXN0X29pZCB0MykgPSAyOiAgJCh0ZXN0X29pZCBkMikgcy8xMS9CLworCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDM6ICAkKHRlc3Rfb2lkIGQzKSBzLzEyL0IvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRlZCBhIGNvbW1pdCcgJworCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgbWFzdGVyIHRvcGljIGFkZGVkID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBhMSkgcy81L0EvCisJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgYTIpIHMvNC9BLworCS06ICAkKHRlc3Rfb2lkIF9fKSA+IDM6ICAkKHRlc3Rfb2lkIGEzKSBzLzYvQS8KKwkzOiAgJCh0ZXN0X29pZCB0MykgPSA0OiAgJCh0ZXN0X29pZCBhNCkgcy8xMS9CLworCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDU6ICAkKHRlc3Rfb2lkIGE1KSBzLzEyL0IvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgYmFzZSwgQSBCIEMnICcKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIG1hc3RlciB0b3BpYyByZWJhc2VkID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBiMSkgcy81L0EvCisJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgYjIpIHMvNC9BLworCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDM6ICAkKHRlc3Rfb2lkIGIzKSBzLzExL0IvCisJNDogICQodGVzdF9vaWQgdDQpID0gNDogICQodGVzdF9vaWQgYjQpIHMvMTIvQi8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyBiYXNlLCBCLi4uQycgJworCSMgdGhpcyBzeW50YXggaW5jbHVkZXMgdGhlIGNvbW1pdHMgZnJvbSBtYXN0ZXIhCisJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciB0b3BpYy4uLnJlYmFzZWQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCS06ICAkKHRlc3Rfb2lkIF9fKSA+IDE6ICAkKHRlc3Rfb2lkIGI1KSB1bnJlbGF0ZWQKKwkxOiAgJCh0ZXN0X29pZCB0MSkgPSAyOiAgJCh0ZXN0X29pZCBiMSkgcy81L0EvCisJMjogICQodGVzdF9vaWQgdDIpID0gMzogICQodGVzdF9vaWQgYjIpIHMvNC9BLworCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDQ6ICAkKHRlc3Rfb2lkIGIzKSBzLzExL0IvCisJNDogICQodGVzdF9vaWQgdDQpID0gNTogICQodGVzdF9vaWQgYjQpIHMvMTIvQi8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZWQgY29tbWl0JyAnCisJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciB0b3BpYy4uLmNoYW5nZWQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIGMxKSBzLzUvQS8KKwkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCBjMikgcy80L0EvCisJMzogICQodGVzdF9vaWQgdDMpICEgMzogICQodGVzdF9vaWQgYzMpIHMvMTEvQi8KKwkgICAgQEAgZmlsZTogQQorCSAgICAgIDkKKwkgICAgICAxMAorCSAgICAgLTExCisJICAgIC0rQgorCSAgICArK0JCCisJICAgICAgMTIKKwkgICAgICAxMworCSAgICAgIDE0CisJNDogICQodGVzdF9vaWQgdDQpICEgNDogICQodGVzdF9vaWQgYzQpIHMvMTIvQi8KKwkgICAgQEAgZmlsZQorCSAgICAgQEAgZmlsZTogQQorCSAgICAgIDkKKwkgICAgICAxMAorCSAgICAtIEIKKwkgICAgKyBCQgorCSAgICAgLTEyCisJICAgICArQgorCSAgICAgIDEzCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2VkIGNvbW1pdCB3aXRoIC0tbm8tcGF0Y2ggZGlmZiBvcHRpb24nICcKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tbm8tcGF0Y2ggdG9waWMuLi5jaGFuZ2VkID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBjMSkgcy81L0EvCisJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgYzIpIHMvNC9BLworCTM6ICAkKHRlc3Rfb2lkIHQzKSAhIDM6ICAkKHRlc3Rfb2lkIGMzKSBzLzExL0IvCisJNDogICQodGVzdF9vaWQgdDQpICEgNDogICQodGVzdF9vaWQgYzQpIHMvMTIvQi8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZWQgY29tbWl0IHdpdGggLS1zdGF0IGRpZmYgb3B0aW9uJyAnCisJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciAtLXN0YXQgdG9waWMuLi5jaGFuZ2VkID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBjMSkgcy81L0EvCisJICAgICBhID0+IGIgfCAwCisJICAgICAxIGZpbGUgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIGMyKSBzLzQvQS8KKwkgICAgIGEgPT4gYiB8IDAKKwkgICAgIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisJMzogICQodGVzdF9vaWQgdDMpICEgMzogICQodGVzdF9vaWQgYzMpIHMvMTEvQi8KKwkgICAgIGEgPT4gYiB8IDAKKwkgICAgIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisJNDogICQodGVzdF9vaWQgdDQpICEgNDogICQodGVzdF9vaWQgYzQpIHMvMTIvQi8KKwkgICAgIGEgPT4gYiB8IDAKKwkgICAgIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2VkIGNvbW1pdCB3aXRoIHNtIGNvbmZpZycgJworCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgLS1zdWJtb2R1bGU9bG9nIHRvcGljLi4uY2hhbmdlZCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgYzEpIHMvNS9BLworCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIGMyKSBzLzQvQS8KKwkzOiAgJCh0ZXN0X29pZCB0MykgISAzOiAgJCh0ZXN0X29pZCBjMykgcy8xMS9CLworCSAgICBAQCBmaWxlOiBBCisJICAgICAgOQorCSAgICAgIDEwCisJICAgICAtMTEKKwkgICAgLStCCisJICAgICsrQkIKKwkgICAgICAxMgorCSAgICAgIDEzCisJICAgICAgMTQKKwk0OiAgJCh0ZXN0X29pZCB0NCkgISA0OiAgJCh0ZXN0X29pZCBjNCkgcy8xMi9CLworCSAgICBAQCBmaWxlCisJICAgICBAQCBmaWxlOiBBCisJICAgICAgOQorCSAgICAgIDEwCisJICAgIC0gQgorCSAgICArIEJCCisJICAgICAtMTIKKwkgICAgICtCCisJICAgICAgMTMKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZWQgZmlsZScgJworCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgLS1zdWJtb2R1bGU9bG9nIHRvcGljLi4ucmVuYW1lZC1maWxlID5hY3R1YWwgJiYKKwlzZWQgcy9aL1wgL2cgPmV4cGVjdCA8PC1FT0YgJiYKKwkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBuMSkgcy81L0EvCisJMjogICQodGVzdF9vaWQgdDIpICEgMjogICQodGVzdF9vaWQgbjIpIHMvNC9BLworCSAgICBAQCBNZXRhZGF0YQorCSAgICBaQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+CisJICAgIFoKKwkgICAgWiAjIyBDb21taXQgbWVzc2FnZSAjIworCSAgICAtICAgIHMvNC9BLworCSAgICArICAgIHMvNC9BLyArIHJlbmFtZSBmaWxlCisJICAgIFoKKwkgICAgLSAjIyBmaWxlICMjCisJICAgICsgIyMgZmlsZSA9PiByZW5hbWVkLWZpbGUgIyMKKwkgICAgWkBACisJICAgIFogMQorCSAgICBaIDIKKwkzOiAgJCh0ZXN0X29pZCB0MykgISAzOiAgJCh0ZXN0X29pZCBuMykgcy8xMS9CLworCSAgICBAQCBNZXRhZGF0YQorCSAgICBaICMjIENvbW1pdCBtZXNzYWdlICMjCisJICAgIFogICAgcy8xMS9CLworCSAgICBaCisJICAgIC0gIyMgZmlsZSAjIworCSAgICAtQEAgZmlsZTogQQorCSAgICArICMjIHJlbmFtZWQtZmlsZSAjIworCSAgICArQEAgcmVuYW1lZC1maWxlOiBBCisJICAgIFogOAorCSAgICBaIDkKKwkgICAgWiAxMAorCTQ6ICAkKHRlc3Rfb2lkIHQ0KSAhIDQ6ICAkKHRlc3Rfb2lkIG40KSBzLzEyL0IvCisJICAgIEBAIE1ldGFkYXRhCisJICAgIFogIyMgQ29tbWl0IG1lc3NhZ2UgIyMKKwkgICAgWiAgICBzLzEyL0IvCisJICAgIFoKKwkgICAgLSAjIyBmaWxlICMjCisJICAgIC1AQCBmaWxlOiBBCisJICAgICsgIyMgcmVuYW1lZC1maWxlICMjCisJICAgICtAQCByZW5hbWVkLWZpbGU6IEEKKwkgICAgWiA5CisJICAgIFogMTAKKwkgICAgWiBCCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIHdpdGggbW9kZSBvbmx5IGNoYW5nZScgJworCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgLS1zdWJtb2R1bGU9bG9nIHRvcGljLi4ubW9kZS1vbmx5LWNoYW5nZSA+YWN0dWFsICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDIpICEgMTogICQodGVzdF9vaWQgbzEpIHMvNC9BLworCSAgICBAQCBNZXRhZGF0YQorCSAgICBaQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+CisJICAgIFoKKwkgICAgWiAjIyBDb21taXQgbWVzc2FnZSAjIworCSAgICAtICAgIHMvNC9BLworCSAgICArICAgIHMvNC9BLyArIGFkZCBvdGhlci1maWxlCisJICAgIFoKKwkgICAgWiAjIyBmaWxlICMjCisJICAgIFpAQAorCSAgICBAQCBmaWxlCisJICAgIFogQQorCSAgICBaIDYKKwkgICAgWiA3CisJICAgICsKKwkgICAgKyAjIyBvdGhlci1maWxlIChuZXcpICMjCisJMjogICQodGVzdF9vaWQgdDMpICEgMjogICQodGVzdF9vaWQgbzIpIHMvMTEvQi8KKwkgICAgQEAgTWV0YWRhdGEKKwkgICAgWkF1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPgorCSAgICBaCisJICAgIFogIyMgQ29tbWl0IG1lc3NhZ2UgIyMKKwkgICAgLSAgICBzLzExL0IvCisJICAgICsgICAgcy8xMS9CLyArIG1vZGUgY2hhbmdlIG90aGVyLWZpbGUKKwkgICAgWgorCSAgICBaICMjIGZpbGUgIyMKKwkgICAgWkBAIGZpbGU6IEEKKwkgICAgQEAgZmlsZTogQQorCSAgICBaIDEyCisJICAgIFogMTMKKwkgICAgWiAxNAorCSAgICArCisJICAgICsgIyMgb3RoZXItZmlsZSAobW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSkgIyMKKwkzOiAgJCh0ZXN0X29pZCB0NCkgPSAzOiAgJCh0ZXN0X29pZCBvMykgcy8xMi9CLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBhZGRlZCBhbmQgbGF0ZXIgcmVtb3ZlZCcgJworCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgLS1zdWJtb2R1bGU9bG9nIHRvcGljLi4uYWRkZWQtcmVtb3ZlZCA+YWN0dWFsICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgczEpIHMvNS9BLworCTI6ICAkKHRlc3Rfb2lkIHQyKSAhIDI6ICAkKHRlc3Rfb2lkIHMyKSBzLzQvQS8KKwkgICAgQEAgTWV0YWRhdGEKKwkgICAgWkF1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPgorCSAgICBaCisJICAgIFogIyMgQ29tbWl0IG1lc3NhZ2UgIyMKKwkgICAgLSAgICBzLzQvQS8KKwkgICAgKyAgICBzLzQvQS8gKyBuZXctZmlsZQorCSAgICBaCisJICAgIFogIyMgZmlsZSAjIworCSAgICBaQEAKKwkgICAgQEAgZmlsZQorCSAgICBaIEEKKwkgICAgWiA2CisJICAgIFogNworCSAgICArCisJICAgICsgIyMgbmV3LWZpbGUgKG5ldykgIyMKKwkzOiAgJCh0ZXN0X29pZCB0MykgISAzOiAgJCh0ZXN0X29pZCBzMykgcy8xMS9CLworCSAgICBAQCBNZXRhZGF0YQorCSAgICBaQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+CisJICAgIFoKKwkgICAgWiAjIyBDb21taXQgbWVzc2FnZSAjIworCSAgICAtICAgIHMvMTEvQi8KKwkgICAgKyAgICBzLzExL0IvICsgcmVtb3ZlIGZpbGUKKwkgICAgWgorCSAgICBaICMjIGZpbGUgIyMKKwkgICAgWkBAIGZpbGU6IEEKKwkgICAgQEAgZmlsZTogQQorCSAgICBaIDEyCisJICAgIFogMTMKKwkgICAgWiAxNAorCSAgICArCisJICAgICsgIyMgbmV3LWZpbGUgKGRlbGV0ZWQpICMjCisJNDogICQodGVzdF9vaWQgdDQpID0gNDogICQodGVzdF9vaWQgczQpIHMvMTIvQi8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNvbW1pdHMgb24gb25lIHNpZGUnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gIm5ldyBtZXNzYWdlIiAmJgorCWdpdCByYW5nZS1kaWZmIG1hc3RlciBIRUFEQHsxfSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZWQgbWVzc2FnZScgJworCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgdG9waWMuLi5jaGFuZ2VkLW1lc3NhZ2UgPmFjdHVhbCAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgorCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIG0xKSBzLzUvQS8KKwkyOiAgJCh0ZXN0X29pZCB0MikgISAyOiAgJCh0ZXN0X29pZCBtMikgcy80L0EvCisJICAgIEBAIE1ldGFkYXRhCisJICAgIFogIyMgQ29tbWl0IG1lc3NhZ2UgIyMKKwkgICAgWiAgICBzLzQvQS8KKwkgICAgWgorCSAgICArICAgIEFsc28gYSBzaWxseSBjb21tZW50IGhlcmUhCisJICAgICsKKwkgICAgWiAjIyBmaWxlICMjCisJICAgIFpAQAorCSAgICBaIDEKKwkzOiAgJCh0ZXN0X29pZCB0MykgPSAzOiAgJCh0ZXN0X29pZCBtMykgcy8xMS9CLworCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDQ6ICAkKHRlc3Rfb2lkIG00KSBzLzEyL0IvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkdWFsLWNvbG9yaW5nJyAnCisJc2VkIC1lICJzfF46fHwiID5leHBlY3QgPDwtRU9GICYmCisJOjxZRUxMT1c+MTogICQodGVzdF9vaWQgYzEpID0gMTogICQodGVzdF9vaWQgbTEpIHMvNS9BLzxSRVNFVD4KKwk6PFJFRD4yOiAgJCh0ZXN0X29pZCBjMikgPFJFU0VUPjxZRUxMT1c+ITxSRVNFVD48R1JFRU4+IDI6ICAkKHRlc3Rfb2lkIG0yKTxSRVNFVD48WUVMTE9XPiBzLzQvQS88UkVTRVQ+CisJOiAgICA8UkVWRVJTRT48Q1lBTj5AQDxSRVNFVD4gPFJFU0VUPk1ldGFkYXRhPFJFU0VUPgorCTogICAgICAjIyBDb21taXQgbWVzc2FnZSAjIzxSRVNFVD4KKwk6ICAgICAgICAgcy80L0EvPFJFU0VUPgorCTogICAgIDxSRVNFVD4KKwk6ICAgIDxSRVZFUlNFPjxHUkVFTj4rPFJFU0VUPjxCT0xEPiAgICBBbHNvIGEgc2lsbHkgY29tbWVudCBoZXJlITxSRVNFVD4KKwk6ICAgIDxSRVZFUlNFPjxHUkVFTj4rPFJFU0VUPgorCTogICAgICAjIyBmaWxlICMjPFJFU0VUPgorCTogICAgPENZQU4+IEBAPFJFU0VUPgorCTogICAgICAxPFJFU0VUPgorCTo8UkVEPjM6ICAkKHRlc3Rfb2lkIGMzKSA8UkVTRVQ+PFlFTExPVz4hPFJFU0VUPjxHUkVFTj4gMzogICQodGVzdF9vaWQgbTMpPFJFU0VUPjxZRUxMT1c+IHMvMTEvQi88UkVTRVQ+CisJOiAgICA8UkVWRVJTRT48Q1lBTj5AQDxSRVNFVD4gPFJFU0VUPmZpbGU6IEE8UkVTRVQ+CisJOiAgICAgIDk8UkVTRVQ+CisJOiAgICAgIDEwPFJFU0VUPgorCTogICAgPFJFRD4gLTExPFJFU0VUPgorCTogICAgPFJFVkVSU0U+PFJFRD4tPFJFU0VUPjxGQUlOVDtHUkVFTj4rQkI8UkVTRVQ+CisJOiAgICA8UkVWRVJTRT48R1JFRU4+KzxSRVNFVD48Qk9MRDtHUkVFTj4rQjxSRVNFVD4KKwk6ICAgICAgMTI8UkVTRVQ+CisJOiAgICAgIDEzPFJFU0VUPgorCTogICAgICAxNDxSRVNFVD4KKwk6PFJFRD40OiAgJCh0ZXN0X29pZCBjNCkgPFJFU0VUPjxZRUxMT1c+ITxSRVNFVD48R1JFRU4+IDQ6ICAkKHRlc3Rfb2lkIG00KTxSRVNFVD48WUVMTE9XPiBzLzEyL0IvPFJFU0VUPgorCTogICAgPFJFVkVSU0U+PENZQU4+QEA8UkVTRVQ+IDxSRVNFVD5maWxlPFJFU0VUPgorCTogICAgPENZQU4+IEBAIGZpbGU6IEE8UkVTRVQ+CisJOiAgICAgIDk8UkVTRVQ+CisJOiAgICAgIDEwPFJFU0VUPgorCTogICAgPFJFVkVSU0U+PFJFRD4tPFJFU0VUPjxGQUlOVD4gQkI8UkVTRVQ+CisJOiAgICA8UkVWRVJTRT48R1JFRU4+KzxSRVNFVD48Qk9MRD4gQjxSRVNFVD4KKwk6ICAgIDxSRUQ+IC0xMjxSRVNFVD4KKwk6ICAgIDxHUkVFTj4gK0I8UkVTRVQ+CisJOiAgICAgIDEzPFJFU0VUPgorCUVPRgorCWdpdCByYW5nZS1kaWZmIGNoYW5nZWQuLi5jaGFuZ2VkLW1lc3NhZ2UgLS1jb2xvciAtLWR1YWwtY29sb3IgPmFjdHVhbC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA+YWN0dWFsIDxhY3R1YWwucmF3ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitmb3IgcHJldiBpbiB0b3BpYyBtYXN0ZXIuLnRvcGljCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZvcm1hdC1wYXRjaCAtLXJhbmdlLWRpZmY9JHByZXYiICcKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtLXJhbmdlLWRpZmY9JHByZXYgXAorCQkJbWFzdGVyLi51bm1vZGlmaWVkID5hY3R1YWwgJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAwMDA/LSoiICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsICYmCisJCXRlc3RfaTE4bmdyZXAgIl5SYW5nZS1kaWZmOiQiIDAwMDAtKiAmJgorCQlncmVwICI9IDE6IC4qIHMvNS9BIiAwMDAwLSogJiYKKwkJZ3JlcCAiPSAyOiAuKiBzLzQvQSIgMDAwMC0qICYmCisJCWdyZXAgIj0gMzogLiogcy8xMS9CIiAwMDAwLSogJiYKKwkJZ3JlcCAiPSA0OiAuKiBzLzEyL0IiIDAwMDAtKgorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tcmFuZ2UtZGlmZiBhcyBjb21tZW50YXJ5JyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXJhbmdlLWRpZmY9SEVBRH4xIEhFQUR+MSA+YWN0dWFsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAwMDAxLSoiICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJeUmFuZ2UtZGlmZjokIiAwMDAxLSogJiYKKwlncmVwICI+IDE6IC4qIG5ldyBtZXNzYWdlIiAwMDAxLSoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmFuZ2UtZGlmZiBvdmVycmlkZXMgZGlmZi5ub3ByZWZpeCBpbnRlcm5hbGx5JyAnCisJZ2l0IC1jIGRpZmYubm9wcmVmaXg9dHJ1ZSByYW5nZS1kaWZmIEhFQUReLi4uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIHdpdGggbW9kaWZpZWQgZm9ybWF0LnByZXR0eSB3aXRoIHN1ZmZpeCcgJworCWdpdCAtYyBmb3JtYXQucHJldHR5PSJmb3JtYXQ6Y29tbWl0ICVIJWQlbiIgcmFuZ2UtZGlmZiBcCisJCW1hc3Rlci4udG9waWMgbWFzdGVyLi51bm1vZGlmaWVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIHdpdGggbW9kaWZpZWQgZm9ybWF0LnByZXR0eSB3aXRob3V0ICJjb21taXQgIicgJworCWdpdCAtYyBmb3JtYXQucHJldHR5PSJmb3JtYXQ6JUglbiIgcmFuZ2UtZGlmZiBcCisJCW1hc3Rlci4udG9waWMgbWFzdGVyLi51bm1vZGlmaWVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JhbmdlLWRpZmYgY29tcGFyZXMgbm90ZXMgYnkgZGVmYXVsdCcgJworCWdpdCBub3RlcyBhZGQgLW0gInRvcGljIG5vdGUiIHRvcGljICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAidW5tb2RpZmllZCBub3RlIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgbWFzdGVyLi50b3BpYyBtYXN0ZXIuLnVubW9kaWZpZWQgXAorCQk+YWN0dWFsICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgdTEpIHMvNS9BLworCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIHUyKSBzLzQvQS8KKwkzOiAgJCh0ZXN0X29pZCB0MykgPSAzOiAgJCh0ZXN0X29pZCB1Mykgcy8xMS9CLworCTQ6ICAkKHRlc3Rfb2lkIHQ0KSAhIDQ6ICAkKHRlc3Rfb2lkIHU0KSBzLzEyL0IvCisJICAgIEBAIENvbW1pdCBtZXNzYWdlCisJICAgIFoKKwkgICAgWgorCSAgICBaICMjIE5vdGVzICMjCisJICAgIC0gICAgdG9waWMgbm90ZQorCSAgICArICAgIHVubW9kaWZpZWQgbm90ZQorCSAgICBaCisJICAgIFogIyMgZmlsZSAjIworCSAgICBaQEAgZmlsZTogQQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmFuZ2UtZGlmZiB3aXRoIC0tbm8tbm90ZXMnICcKKwlnaXQgbm90ZXMgYWRkIC1tICJ0b3BpYyBub3RlIiB0b3BpYyAmJgorCWdpdCBub3RlcyBhZGQgLW0gInVubW9kaWZpZWQgbm90ZSIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tbm8tbm90ZXMgbWFzdGVyLi50b3BpYyBtYXN0ZXIuLnVubW9kaWZpZWQgXAorCQk+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgdTEpIHMvNS9BLworCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIHUyKSBzLzQvQS8KKwkzOiAgJCh0ZXN0X29pZCB0MykgPSAzOiAgJCh0ZXN0X29pZCB1Mykgcy8xMS9CLworCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDQ6ICAkKHRlc3Rfb2lkIHU0KSBzLzEyL0IvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYW5nZS1kaWZmIHdpdGggbXVsdGlwbGUgLS1ub3RlcycgJworCWdpdCBub3RlcyAtLXJlZj1ub3RlMSBhZGQgLW0gInRvcGljIG5vdGUxIiB0b3BpYyAmJgorCWdpdCBub3RlcyAtLXJlZj1ub3RlMSBhZGQgLW0gInVubW9kaWZpZWQgbm90ZTEiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIC0tcmVmPW5vdGUxIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IG5vdGVzIC0tcmVmPW5vdGUyIGFkZCAtbSAidG9waWMgbm90ZTIiIHRvcGljICYmCisJZ2l0IG5vdGVzIC0tcmVmPW5vdGUyIGFkZCAtbSAidW5tb2RpZmllZCBub3RlMiIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgLS1yZWY9bm90ZTIgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tbm90ZXM9bm90ZTEgLS1ub3Rlcz1ub3RlMiBtYXN0ZXIuLnRvcGljIG1hc3Rlci4udW5tb2RpZmllZCBcCisJCT5hY3R1YWwgJiYKKwlzZWQgcy9aL1wgL2cgPmV4cGVjdCA8PC1FT0YgJiYKKwkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCB1MSkgcy81L0EvCisJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgdTIpIHMvNC9BLworCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDM6ICAkKHRlc3Rfb2lkIHUzKSBzLzExL0IvCisJNDogICQodGVzdF9vaWQgdDQpICEgNDogICQodGVzdF9vaWQgdTQpIHMvMTIvQi8KKwkgICAgQEAgQ29tbWl0IG1lc3NhZ2UKKwkgICAgWgorCSAgICBaCisJICAgIFogIyMgTm90ZXMgKG5vdGUxKSAjIworCSAgICAtICAgIHRvcGljIG5vdGUxCisJICAgICsgICAgdW5tb2RpZmllZCBub3RlMQorCSAgICBaCisJICAgIFoKKwkgICAgWiAjIyBOb3RlcyAobm90ZTIpICMjCisJICAgIC0gICAgdG9waWMgbm90ZTIKKwkgICAgKyAgICB1bm1vZGlmaWVkIG5vdGUyCisJICAgIFoKKwkgICAgWiAjIyBmaWxlICMjCisJICAgIFpAQCBmaWxlOiBBCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1yYW5nZS1kaWZmIGRvZXMgbm90IGNvbXBhcmUgbm90ZXMgYnkgZGVmYXVsdCcgJworCWdpdCBub3RlcyBhZGQgLW0gInRvcGljIG5vdGUiIHRvcGljICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAidW5tb2RpZmllZCBub3RlIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLS1yYW5nZS1kaWZmPSRwcmV2IFwKKwkJbWFzdGVyLi51bm1vZGlmaWVkID5hY3R1YWwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIDAwMD8tKiIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIl5SYW5nZS1kaWZmOiQiIDAwMDAtKiAmJgorCWdyZXAgIj0gMTogLiogcy81L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMjogLiogcy80L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMzogLiogcy8xMS9CIiAwMDAwLSogJiYKKwlncmVwICI9IDQ6IC4qIHMvMTIvQiIgMDAwMC0qICYmCisJISBncmVwICJOb3RlcyIgMDAwMC0qICYmCisJISBncmVwICJub3RlIiAwMDAwLSoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tcmFuZ2UtZGlmZiB3aXRoIC0tbm8tbm90ZXMnICcKKwlnaXQgbm90ZXMgYWRkIC1tICJ0b3BpYyBub3RlIiB0b3BpYyAmJgorCWdpdCBub3RlcyBhZGQgLW0gInVubW9kaWZpZWQgbm90ZSIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm8tbm90ZXMgLS1jb3Zlci1sZXR0ZXIgLS1yYW5nZS1kaWZmPSRwcmV2IFwKKwkJbWFzdGVyLi51bm1vZGlmaWVkID5hY3R1YWwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIDAwMD8tKiIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIl5SYW5nZS1kaWZmOiQiIDAwMDAtKiAmJgorCWdyZXAgIj0gMTogLiogcy81L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMjogLiogcy80L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMzogLiogcy8xMS9CIiAwMDAwLSogJiYKKwlncmVwICI9IDQ6IC4qIHMvMTIvQiIgMDAwMC0qICYmCisJISBncmVwICJOb3RlcyIgMDAwMC0qICYmCisJISBncmVwICJub3RlIiAwMDAwLSoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tcmFuZ2UtZGlmZiB3aXRoIC0tbm90ZXMnICcKKwlnaXQgbm90ZXMgYWRkIC1tICJ0b3BpYyBub3RlIiB0b3BpYyAmJgorCWdpdCBub3RlcyBhZGQgLW0gInVubW9kaWZpZWQgbm90ZSIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm90ZXMgLS1jb3Zlci1sZXR0ZXIgLS1yYW5nZS1kaWZmPSRwcmV2IFwKKwkJbWFzdGVyLi51bm1vZGlmaWVkID5hY3R1YWwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIDAwMD8tKiIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIl5SYW5nZS1kaWZmOiQiIDAwMDAtKiAmJgorCWdyZXAgIj0gMTogLiogcy81L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMjogLiogcy80L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMzogLiogcy8xMS9CIiAwMDAwLSogJiYKKwlncmVwICIhIDQ6IC4qIHMvMTIvQiIgMDAwMC0qICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCisJICAgIEBAIENvbW1pdCBtZXNzYWdlCisJICAgIFoKKwkgICAgWgorCSAgICBaICMjIE5vdGVzICMjCisJICAgIC0gICAgdG9waWMgbm90ZQorCSAgICArICAgIHVubW9kaWZpZWQgbm90ZQorCSAgICBaCisJICAgIFogIyMgZmlsZSAjIworCSAgICBaQEAgZmlsZTogQQorCUVPRgorCXNlZCAiL0BAIENvbW1pdCBtZXNzYWdlLywvQEAgZmlsZTogQS8hZCIgMDAwMC0qID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXJhbmdlLWRpZmYgd2l0aCBmb3JtYXQubm90ZXMgY29uZmlnJyAnCisJZ2l0IG5vdGVzIGFkZCAtbSAidG9waWMgbm90ZSIgdG9waWMgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJdGVzdF9jb25maWcgZm9ybWF0Lm5vdGVzIHRydWUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0tcmFuZ2UtZGlmZj0kcHJldiBcCisJCW1hc3Rlci4udW5tb2RpZmllZCA+YWN0dWFsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAwMDA/LSoiICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJeUmFuZ2UtZGlmZjokIiAwMDAwLSogJiYKKwlncmVwICI9IDE6IC4qIHMvNS9BIiAwMDAwLSogJiYKKwlncmVwICI9IDI6IC4qIHMvNC9BIiAwMDAwLSogJiYKKwlncmVwICI9IDM6IC4qIHMvMTEvQiIgMDAwMC0qICYmCisJZ3JlcCAiISA0OiAuKiBzLzEyL0IiIDAwMDAtKiAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgorCSAgICBAQCBDb21taXQgbWVzc2FnZQorCSAgICBaCisJICAgIFoKKwkgICAgWiAjIyBOb3RlcyAjIworCSAgICAtICAgIHRvcGljIG5vdGUKKwkgICAgKyAgICB1bm1vZGlmaWVkIG5vdGUKKwkgICAgWgorCSAgICBaICMjIGZpbGUgIyMKKwkgICAgWkBAIGZpbGU6IEEKKwlFT0YKKwlzZWQgIi9AQCBDb21taXQgbWVzc2FnZS8sL0BAIGZpbGU6IEEvIWQiIDAwMDAtKiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1yYW5nZS1kaWZmIHdpdGggbXVsdGlwbGUgbm90ZXMnICcKKwlnaXQgbm90ZXMgLS1yZWY9bm90ZTEgYWRkIC1tICJ0b3BpYyBub3RlMSIgdG9waWMgJiYKKwlnaXQgbm90ZXMgLS1yZWY9bm90ZTEgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUxIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyAtLXJlZj1ub3RlMSByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCWdpdCBub3RlcyAtLXJlZj1ub3RlMiBhZGQgLW0gInRvcGljIG5vdGUyIiB0b3BpYyAmJgorCWdpdCBub3RlcyAtLXJlZj1ub3RlMiBhZGQgLW0gInVubW9kaWZpZWQgbm90ZTIiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIC0tcmVmPW5vdGUyIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vdGVzPW5vdGUxIC0tbm90ZXM9bm90ZTIgLS1jb3Zlci1sZXR0ZXIgLS1yYW5nZS1kaWZmPSRwcmV2IFwKKwkJbWFzdGVyLi51bm1vZGlmaWVkID5hY3R1YWwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIDAwMD8tKiIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIl5SYW5nZS1kaWZmOiQiIDAwMDAtKiAmJgorCWdyZXAgIj0gMTogLiogcy81L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMjogLiogcy80L0EiIDAwMDAtKiAmJgorCWdyZXAgIj0gMzogLiogcy8xMS9CIiAwMDAwLSogJiYKKwlncmVwICIhIDQ6IC4qIHMvMTIvQiIgMDAwMC0qICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCisJICAgIEBAIENvbW1pdCBtZXNzYWdlCisJICAgIFoKKwkgICAgWgorCSAgICBaICMjIE5vdGVzIChub3RlMSkgIyMKKwkgICAgLSAgICB0b3BpYyBub3RlMQorCSAgICArICAgIHVubW9kaWZpZWQgbm90ZTEKKwkgICAgWgorCSAgICBaCisJICAgIFogIyMgTm90ZXMgKG5vdGUyKSAjIworCSAgICAtICAgIHRvcGljIG5vdGUyCisJICAgICsgICAgdW5tb2RpZmllZCBub3RlMgorCSAgICBaCisJICAgIFogIyMgZmlsZSAjIworCSAgICBaQEAgZmlsZTogQQorCUVPRgorCXNlZCAiL0BAIENvbW1pdCBtZXNzYWdlLywvQEAgZmlsZTogQS8hZCIgMDAwMC0qID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIwNi9oaXN0b3J5LmV4cG9ydCBiL3QvdDMyMDYvaGlzdG9yeS5leHBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4MDhlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMyMDYvaGlzdG9yeS5leHBvcnQKQEAgLTAsMCArMSw3MDkgQEAKK2Jsb2IKK21hcmsgOjEKK2RhdGEgNTEKKzEKKzIKKzMKKzQKKzUKKzYKKzcKKzgKKzkKKzEwCisxMQorMTIKKzEzCisxNAorMTUKKzE2CisxNworMTgKKzE5CisyMAorCityZXNldCByZWZzL2hlYWRzL3JlbmFtZWQtZmlsZQorY29tbWl0IHJlZnMvaGVhZHMvcmVuYW1lZC1maWxlCittYXJrIDoyCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDI0OTIxICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg0NzI0ICswMjAwCitkYXRhIDgKK2luaXRpYWwKK00gMTAwNjQ0IDoxIGZpbGUKKworYmxvYgorbWFyayA6MworZGF0YSA1MQorMQorMgorMworNAorQQorNgorNworOAorOQorMTAKKzExCisxMgorMTMKKzE0CisxNQorMTYKKzE3CisxOAorMTkKKzIwCisKK2NvbW1pdCByZWZzL2hlYWRzL21vZGUtb25seS1jaGFuZ2UKK21hcmsgOjQKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMTQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMTQgKzAyMDAKK2RhdGEgNworcy81L0EvCitmcm9tIDoyCitNIDEwMDY0NCA6MyBmaWxlCisKK2Jsb2IKK21hcmsgOjUKK2RhdGEgNTEKKzEKKzIKKzMKK0EKK0EKKzYKKzcKKzgKKzkKKzEwCisxMQorMTIKKzEzCisxNAorMTUKKzE2CisxNworMTgKKzE5CisyMAorCitjb21taXQgcmVmcy9oZWFkcy90b3BpYworbWFyayA6NgorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAyNCArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAyNCArMDIwMAorZGF0YSA3CitzLzQvQS8KK2Zyb20gOjQKK00gMTAwNjQ0IDo1IGZpbGUKKworYmxvYgorbWFyayA6NworZGF0YSA1MAorMQorMgorMworQQorQQorNgorNworOAorOQorMTAKK0IKKzEyCisxMworMTQKKzE1CisxNgorMTcKKzE4CisxOQorMjAKKworY29tbWl0IHJlZnMvaGVhZHMvdG9waWMKK21hcmsgOjgKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMzYgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMzYgKzAyMDAKK2RhdGEgOAorcy8xMS9CLworZnJvbSA6NgorTSAxMDA2NDQgOjcgZmlsZQorCitibG9iCittYXJrIDo5CitkYXRhIDQ5CisxCisyCiszCitBCitBCis2Cis3Cis4Cis5CisxMAorQgorQgorMTMKKzE0CisxNQorMTYKKzE3CisxOAorMTkKKzIwCisKK2NvbW1pdCByZWZzL2hlYWRzL3RvcGljCittYXJrIDoxMAorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTA0NCArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTA0NCArMDIwMAorZGF0YSA4CitzLzEyL0IvCitmcm9tIDo4CitNIDEwMDY0NCA6OSBmaWxlCisKK2Jsb2IKK21hcmsgOjExCitkYXRhIDEwCit1bnJlbGF0ZWQKKworY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCittYXJrIDoxMgorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTEyNyArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTEyNyArMDIwMAorZGF0YSAxMAordW5yZWxhdGVkCitmcm9tIDoyCitNIDEwMDY0NCA6MTEgb3RoZXJmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3JlYmFzZWQKK21hcmsgOjEzCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDE0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MTM3ICswMjAwCitkYXRhIDcKK3MvNS9BLworZnJvbSA6MTIKK00gMTAwNjQ0IDozIGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvcmViYXNlZAorbWFyayA6MTQKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMjQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUxMzggKzAyMDAKK2RhdGEgNworcy80L0EvCitmcm9tIDoxMworTSAxMDA2NDQgOjUgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9yZWJhc2VkCittYXJrIDoxNQorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAzNiArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTEzOCArMDIwMAorZGF0YSA4CitzLzExL0IvCitmcm9tIDoxNAorTSAxMDA2NDQgOjcgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9yZWJhc2VkCittYXJrIDoxNgorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTA0NCArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTEzOCArMDIwMAorZGF0YSA4CitzLzEyL0IvCitmcm9tIDoxNQorTSAxMDA2NDQgOjkgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9hZGRlZAorbWFyayA6MTcKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMTQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUzNDEgKzAyMDAKK2RhdGEgNworcy81L0EvCitmcm9tIDoyCitNIDEwMDY0NCA6MyBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL2FkZGVkCittYXJrIDoxOAorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAyNCArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTM0MSArMDIwMAorZGF0YSA3CitzLzQvQS8KK2Zyb20gOjE3CitNIDEwMDY0NCA6NSBmaWxlCisKK2Jsb2IKK21hcmsgOjE5CitkYXRhIDUxCisxCisyCiszCitBCitBCitBCis3Cis4Cis5CisxMAorMTEKKzEyCisxMworMTQKKzE1CisxNgorMTcKKzE4CisxOQorMjAKKworY29tbWl0IHJlZnMvaGVhZHMvYWRkZWQKK21hcmsgOjIwCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MTg2ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MzQxICswMjAwCitkYXRhIDcKK3MvNi9BLworZnJvbSA6MTgKK00gMTAwNjQ0IDoxOSBmaWxlCisKK2Jsb2IKK21hcmsgOjIxCitkYXRhIDUwCisxCisyCiszCitBCitBCitBCis3Cis4Cis5CisxMAorQgorMTIKKzEzCisxNAorMTUKKzE2CisxNworMTgKKzE5CisyMAorCitjb21taXQgcmVmcy9oZWFkcy9hZGRlZAorbWFyayA6MjIKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMzYgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUzNDEgKzAyMDAKK2RhdGEgOAorcy8xMS9CLworZnJvbSA6MjAKK00gMTAwNjQ0IDoyMSBmaWxlCisKK2Jsb2IKK21hcmsgOjIzCitkYXRhIDQ5CisxCisyCiszCitBCitBCitBCis3Cis4Cis5CisxMAorQgorQgorMTMKKzE0CisxNQorMTYKKzE3CisxOAorMTkKKzIwCisKK2NvbW1pdCByZWZzL2hlYWRzL2FkZGVkCittYXJrIDoyNAorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTA0NCArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTM0MSArMDIwMAorZGF0YSA4CitzLzEyL0IvCitmcm9tIDoyMgorTSAxMDA2NDQgOjIzIGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvcmVvcmRlcmVkCittYXJrIDoyNQorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAxNCArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTM1MCArMDIwMAorZGF0YSA3CitzLzUvQS8KK2Zyb20gOjIKK00gMTAwNjQ0IDozIGZpbGUKKworYmxvYgorbWFyayA6MjYKK2RhdGEgNTAKKzEKKzIKKzMKKzQKK0EKKzYKKzcKKzgKKzkKKzEwCitCCisxMgorMTMKKzE0CisxNQorMTYKKzE3CisxOAorMTkKKzIwCisKK2NvbW1pdCByZWZzL2hlYWRzL3Jlb3JkZXJlZAorbWFyayA6MjcKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMzYgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUzNTAgKzAyMDAKK2RhdGEgOAorcy8xMS9CLworZnJvbSA6MjUKK00gMTAwNjQ0IDoyNiBmaWxlCisKK2Jsb2IKK21hcmsgOjI4CitkYXRhIDQ5CisxCisyCiszCis0CitBCis2Cis3Cis4Cis5CisxMAorQgorQgorMTMKKzE0CisxNQorMTYKKzE3CisxOAorMTkKKzIwCisKK2NvbW1pdCByZWZzL2hlYWRzL3Jlb3JkZXJlZAorbWFyayA6MjkKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwNDQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUzNTAgKzAyMDAKK2RhdGEgOAorcy8xMi9CLworZnJvbSA6MjcKK00gMTAwNjQ0IDoyOCBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3Jlb3JkZXJlZAorbWFyayA6MzAKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMjQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUzNTAgKzAyMDAKK2RhdGEgNworcy80L0EvCitmcm9tIDoyOQorTSAxMDA2NDQgOjkgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9jaGFuZ2VkCittYXJrIDozMQorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAxNCArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTUwNyArMDIwMAorZGF0YSA3CitzLzUvQS8KK2Zyb20gOjIKK00gMTAwNjQ0IDozIGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvY2hhbmdlZAorbWFyayA6MzIKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMjQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODU1MDcgKzAyMDAKK2RhdGEgNworcy80L0EvCitmcm9tIDozMQorTSAxMDA2NDQgOjUgZmlsZQorCitibG9iCittYXJrIDozMworZGF0YSA1MQorMQorMgorMworQQorQQorNgorNworOAorOQorMTAKK0JCCisxMgorMTMKKzE0CisxNQorMTYKKzE3CisxOAorMTkKKzIwCisKK2NvbW1pdCByZWZzL2hlYWRzL2NoYW5nZWQKK21hcmsgOjM0CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDM2ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1NTA3ICswMjAwCitkYXRhIDgKK3MvMTEvQi8KK2Zyb20gOjMyCitNIDEwMDY0NCA6MzMgZmlsZQorCitibG9iCittYXJrIDozNQorZGF0YSA1MAorMQorMgorMworQQorQQorNgorNworOAorOQorMTAKK0JCCitCCisxMworMTQKKzE1CisxNgorMTcKKzE4CisxOQorMjAKKworY29tbWl0IHJlZnMvaGVhZHMvY2hhbmdlZAorbWFyayA6MzYKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwNDQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODU1MDcgKzAyMDAKK2RhdGEgOAorcy8xMi9CLworZnJvbSA6MzQKK00gMTAwNjQ0IDozNSBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL2NoYW5nZWQtbWVzc2FnZQorbWFyayA6MzcKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMTQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODU1MzAgKzAyMDAKK2RhdGEgNworcy81L0EvCitmcm9tIDoyCitNIDEwMDY0NCA6MyBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL2NoYW5nZWQtbWVzc2FnZQorbWFyayA6MzgKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMjQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODU1MzAgKzAyMDAKK2RhdGEgMzUKK3MvNC9BLworCitBbHNvIGEgc2lsbHkgY29tbWVudCBoZXJlIQorZnJvbSA6MzcKK00gMTAwNjQ0IDo1IGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvY2hhbmdlZC1tZXNzYWdlCittYXJrIDozOQorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAzNiArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTUzNiArMDIwMAorZGF0YSA4CitzLzExL0IvCitmcm9tIDozOAorTSAxMDA2NDQgOjcgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9jaGFuZ2VkLW1lc3NhZ2UKK21hcmsgOjQwCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDQ0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1NTM2ICswMjAwCitkYXRhIDgKK3MvMTIvQi8KK2Zyb20gOjM5CitNIDEwMDY0NCA6OSBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3VubW9kaWZpZWQKK21hcmsgOjQxCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDE0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1NjMxICswMjAwCitkYXRhIDcKK3MvNS9BLworZnJvbSA6MgorTSAxMDA2NDQgOjMgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy91bm1vZGlmaWVkCittYXJrIDo0MgorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAyNCArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTYzMSArMDIwMAorZGF0YSA3CitzLzQvQS8KK2Zyb20gOjQxCitNIDEwMDY0NCA6NSBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3VubW9kaWZpZWQKK21hcmsgOjQzCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDM2ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1NjMyICswMjAwCitkYXRhIDgKK3MvMTEvQi8KK2Zyb20gOjQyCitNIDEwMDY0NCA6NyBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3VubW9kaWZpZWQKK21hcmsgOjQ0CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDQ0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1NjMyICswMjAwCitkYXRhIDgKK3MvMTIvQi8KK2Zyb20gOjQzCitNIDEwMDY0NCA6OSBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3JlbW92ZWQKK21hcmsgOjQ1CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDE0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg2MDYxICswMjAwCitkYXRhIDcKK3MvNS9BLworZnJvbSA6MgorTSAxMDA2NDQgOjMgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9yZW1vdmVkCittYXJrIDo0NgorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAzNiArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NjA2MSArMDIwMAorZGF0YSA4CitzLzExL0IvCitmcm9tIDo0NQorTSAxMDA2NDQgOjI2IGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvcmVtb3ZlZAorbWFyayA6NDcKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwNDQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODYwNjEgKzAyMDAKK2RhdGEgOAorcy8xMi9CLworZnJvbSA6NDYKK00gMTAwNjQ0IDoyOCBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL2FkZGVkLXJlbW92ZWQKK21hcmsgOjQ4CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDE0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIEd1bW1lcmVyIDx0Lmd1bW1lcmVyQGdtYWlsLmNvbT4gMTU1NjU3NDE1MSArMDEwMAorZGF0YSA3CitzLzUvQS8KK2Zyb20gOjIKK00gMTAwNjQ0IDozIGZpbGUKKworYmxvYgorbWFyayA6NDkKK2RhdGEgMAorCitjb21taXQgcmVmcy9oZWFkcy9hZGRlZC1yZW1vdmVkCittYXJrIDo1MAorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAyNCArMDIwMAorY29tbWl0dGVyIFRob21hcyBHdW1tZXJlciA8dC5ndW1tZXJlckBnbWFpbC5jb20+IDE1NTY1NzQxNzcgKzAxMDAKK2RhdGEgMTgKK3MvNC9BLyArIG5ldy1maWxlCitmcm9tIDo0OAorTSAxMDA2NDQgOjUgZmlsZQorTSAxMDA2NDQgOjQ5IG5ldy1maWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL2FkZGVkLXJlbW92ZWQKK21hcmsgOjUxCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDM2ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIEd1bW1lcmVyIDx0Lmd1bW1lcmVyQGdtYWlsLmNvbT4gMTU1NjU3NDE3NyArMDEwMAorZGF0YSAyMgorcy8xMS9CLyArIHJlbW92ZSBmaWxlCitmcm9tIDo1MAorTSAxMDA2NDQgOjcgZmlsZQorRCBuZXctZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9hZGRlZC1yZW1vdmVkCittYXJrIDo1MgorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTA0NCArMDIwMAorY29tbWl0dGVyIFRob21hcyBHdW1tZXJlciA8dC5ndW1tZXJlckBnbWFpbC5jb20+IDE1NTY1NzQxNzcgKzAxMDAKK2RhdGEgOAorcy8xMi9CLworZnJvbSA6NTEKK00gMTAwNjQ0IDo5IGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvcmVuYW1lZC1maWxlCittYXJrIDo1MworYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAxNCArMDIwMAorY29tbWl0dGVyIFRob21hcyBHdW1tZXJlciA8dC5ndW1tZXJlckBnbWFpbC5jb20+IDE1NTY1NzQzMDkgKzAxMDAKK2RhdGEgNworcy81L0EvCitmcm9tIDoyCitNIDEwMDY0NCA6MyBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3JlbmFtZWQtZmlsZQorbWFyayA6NTQKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMjQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgR3VtbWVyZXIgPHQuZ3VtbWVyZXJAZ21haWwuY29tPiAxNTU2NTc0MzEyICswMTAwCitkYXRhIDIxCitzLzQvQS8gKyByZW5hbWUgZmlsZQorZnJvbSA6NTMKK0QgZmlsZQorTSAxMDA2NDQgOjUgcmVuYW1lZC1maWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3JlbmFtZWQtZmlsZQorbWFyayA6NTUKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMzYgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgR3VtbWVyZXIgPHQuZ3VtbWVyZXJAZ21haWwuY29tPiAxNTU2NTc0MzE5ICswMTAwCitkYXRhIDgKK3MvMTEvQi8KK2Zyb20gOjU0CitNIDEwMDY0NCA6NyByZW5hbWVkLWZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvcmVuYW1lZC1maWxlCittYXJrIDo1NgorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTA0NCArMDIwMAorY29tbWl0dGVyIFRob21hcyBHdW1tZXJlciA8dC5ndW1tZXJlckBnbWFpbC5jb20+IDE1NTY1NzQzMTkgKzAxMDAKK2RhdGEgOAorcy8xMi9CLworZnJvbSA6NTUKK00gMTAwNjQ0IDo5IHJlbmFtZWQtZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9tb2RlLW9ubHktY2hhbmdlCittYXJrIDo1NworYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAyNCArMDIwMAorY29tbWl0dGVyIFRob21hcyBHdW1tZXJlciA8dC5ndW1tZXJlckBnbWFpbC5jb20+IDE1NzA0NzM3NjcgKzAxMDAKK2RhdGEgMjQKK3MvNC9BLyArIGFkZCBvdGhlci1maWxlCitmcm9tIDo0CitNIDEwMDY0NCA6NSBmaWxlCitNIDEwMDY0NCA6NDkgb3RoZXItZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9tb2RlLW9ubHktY2hhbmdlCittYXJrIDo1OAorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAzNiArMDIwMAorY29tbWl0dGVyIFRob21hcyBHdW1tZXJlciA8dC5ndW1tZXJlckBnbWFpbC5jb20+IDE1NzA0NzM3NjggKzAxMDAKK2RhdGEgMzMKK3MvMTEvQi8gKyBtb2RlIGNoYW5nZSBvdGhlci1maWxlCitmcm9tIDo1NworTSAxMDA2NDQgOjcgZmlsZQorTSAxMDA3NTUgOjQ5IG90aGVyLWZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvbW9kZS1vbmx5LWNoYW5nZQorbWFyayA6NTkKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwNDQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgR3VtbWVyZXIgPHQuZ3VtbWVyZXJAZ21haWwuY29tPiAxNTcwNDczNzY4ICswMTAwCitkYXRhIDgKK3MvMTIvQi8KK2Zyb20gOjU4CitNIDEwMDY0NCA6OSBmaWxlCisKZGlmZiAtLWdpdCBhL3QvdDMyMTAtcGFjay1yZWZzLnNoIGIvdC90MzIxMC1wYWNrLXJlZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjQxYjJhZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMyMTAtcGFjay1yZWZzLnNoCkBAIC0wLDAgKzEsMjU2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEFtb3MgV2F0ZXJsYW5kCisjIENvcHlyaWdodCAoYykgMjAwNiBDaHJpc3RpYW4gQ291ZGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwYWNrLXJlZnMgc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIGJyYW5jaCBzZW1hbnRpYworCitUaGlzIHRlc3QgcnVucyBnaXQgcGFjay1yZWZzIGFuZCBnaXQgc2hvdy1yZWYgYW5kIGNoZWNrcyB0aGF0IHRoZSBicmFuY2gKK3NlbWFudGljIGlzIHN0aWxsIHRoZSBzYW1lLgorJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VuYWJsZSByZWZsb2dzJyAnCisJZ2l0IGNvbmZpZyBjb3JlLmxvZ2FsbHJlZnVwZGF0ZXMgdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSBhIHRyaXZpYWwgcmVwb3NpdG9yeScgXAorICAgICdlY2hvIEhlbGxvID4gQSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEEgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQuIiAmJgorICAgICBIRUFEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKScKKworU0hBMT0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NlZSBpZiBnaXQgc2hvdy1yZWYgd29ya3MgYXMgZXhwZWN0ZWQnIFwKKyAgICAnZ2l0IGJyYW5jaCBhICYmCisgICAgIFNIQTE9JChjYXQgLmdpdC9yZWZzL2hlYWRzL2EpICYmCisgICAgIGVjaG8gIiRTSEExIHJlZnMvaGVhZHMvYSIgPmV4cGVjdCAmJgorICAgICBnaXQgc2hvdy1yZWYgYSA+cmVzdWx0ICYmCisgICAgIHRlc3RfY21wIGV4cGVjdCByZXN1bHQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzZWUgaWYgYSBicmFuY2ggc3RpbGwgZXhpc3RzIHdoZW4gcGFja2VkJyBcCisgICAgJ2dpdCBicmFuY2ggYiAmJgorICAgICBnaXQgcGFjay1yZWZzIC0tYWxsICYmCisgICAgIHJtIC1mIC5naXQvcmVmcy9oZWFkcy9iICYmCisgICAgIGVjaG8gIiRTSEExIHJlZnMvaGVhZHMvYiIgPmV4cGVjdCAmJgorICAgICBnaXQgc2hvdy1yZWYgYiA+cmVzdWx0ICYmCisgICAgIHRlc3RfY21wIGV4cGVjdCByZXN1bHQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggYy9kIHNob3VsZCBiYXJmIGlmIGJyYW5jaCBjIGV4aXN0cycgJworICAgICBnaXQgYnJhbmNoIGMgJiYKKyAgICAgZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorICAgICBybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYyAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIGMvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2VlIGlmIGEgYnJhbmNoIHN0aWxsIGV4aXN0cyBhZnRlciBnaXQgcGFjay1yZWZzIC0tcHJ1bmUnIFwKKyAgICAnZ2l0IGJyYW5jaCBlICYmCisgICAgIGdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorICAgICBlY2hvICIkU0hBMSByZWZzL2hlYWRzL2UiID5leHBlY3QgJiYKKyAgICAgZ2l0IHNob3ctcmVmIGUgPnJlc3VsdCAmJgorICAgICB0ZXN0X2NtcCBleHBlY3QgcmVzdWx0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWUgaWYgZ2l0IHBhY2stcmVmcyAtLXBydW5lIHJlbW92ZSByZWYgZmlsZXMnICcKKyAgICAgZ2l0IGJyYW5jaCBmICYmCisgICAgIGdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorICAgICAhIHRlc3QgLWYgLmdpdC9yZWZzL2hlYWRzL2YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VlIGlmIGdpdCBwYWNrLXJlZnMgLS1wcnVuZSByZW1vdmVzIGVtcHR5IGRpcnMnICcKKyAgICAgZ2l0IGJyYW5jaCByL3MvdCAmJgorICAgICBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKyAgICAgISB0ZXN0IC1lIC5naXQvcmVmcy9oZWFkcy9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYnJhbmNoIGcgc2hvdWxkIHdvcmsgd2hlbiBnaXQgYnJhbmNoIGcvaCBoYXMgYmVlbiBkZWxldGVkJyBcCisgICAgJ2dpdCBicmFuY2ggZy9oICYmCisgICAgIGdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorICAgICBnaXQgYnJhbmNoIC1kIGcvaCAmJgorICAgICBnaXQgYnJhbmNoIGcgJiYKKyAgICAgZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorICAgICBnaXQgYnJhbmNoIC1kIGcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggaS9qL2sgc2hvdWxkIGJhcmYgaWYgYnJhbmNoIGkgZXhpc3RzJyAnCisgICAgIGdpdCBicmFuY2ggaSAmJgorICAgICBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCBpL2ovaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndGVzdCBnaXQgYnJhbmNoIGsgYWZ0ZXIgYnJhbmNoIGsvbC9tIGFuZCBrL2xtIGhhdmUgYmVlbiBkZWxldGVkJyBcCisgICAgJ2dpdCBicmFuY2ggay9sICYmCisgICAgIGdpdCBicmFuY2ggay9sbSAmJgorICAgICBnaXQgYnJhbmNoIC1kIGsvbCAmJgorICAgICBnaXQgYnJhbmNoIGsvbC9tICYmCisgICAgIGdpdCBicmFuY2ggLWQgay9sL20gJiYKKyAgICAgZ2l0IGJyYW5jaCAtZCBrL2xtICYmCisgICAgIGdpdCBicmFuY2ggaycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3Rlc3QgZ2l0IGJyYW5jaCBuIGFmdGVyIHNvbWUgYnJhbmNoIGRlbGV0aW9uIGFuZCBwcnVuaW5nJyBcCisgICAgJ2dpdCBicmFuY2ggbi9vICYmCisgICAgIGdpdCBicmFuY2ggbi9vcCAmJgorICAgICBnaXQgYnJhbmNoIC1kIG4vbyAmJgorICAgICBnaXQgYnJhbmNoIG4vby9wICYmCisgICAgIGdpdCBicmFuY2ggLWQgbi9vcCAmJgorICAgICBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKyAgICAgZ2l0IGJyYW5jaCAtZCBuL28vcCAmJgorICAgICBnaXQgYnJhbmNoIG4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdzZWUgaWYgdXAtdG8tZGF0ZSBwYWNrZWQgcmVmcyBhcmUgcHJlc2VydmVkJyBcCisJJ2dpdCBicmFuY2ggcSAmJgorCSBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwkgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9xIHJlZnMvaGVhZHMvcSAmJgorCSAhIHRlc3QgLWYgLmdpdC9yZWZzL2hlYWRzL3EnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2ssIHBydW5lIGFuZCByZXBhY2snICcKKwlnaXQgdGFnIGZvbyAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorCWdpdCBzaG93LXJlZiA+YWxsLW9mLXRoZW0gJiYKKwlnaXQgcGFjay1yZWZzICYmCisJZ2l0IHNob3ctcmVmID5hZ2FpbiAmJgorCXRlc3RfY21wIGFsbC1vZi10aGVtIGFnYWluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGxpY2l0IHBhY2stcmVmcyB3aXRoIGRhbmdsaW5nIHBhY2tlZCByZWZlcmVuY2UnICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gInNvb24gdG8gYmUgZ2FyYmFnZS1jb2xsZWN0ZWQiICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1hbGwgLS1hbGwgJiYKKwlnaXQgcHJ1bmUgLS1leHBpcmU9YWxsICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAyPnJlc3VsdCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlIHJlZiB3aXRoIGRhbmdsaW5nIHBhY2tlZCB2ZXJzaW9uJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGxhbWIgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImZ1dHVyZSBnYXJiYWdlIiAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPWFsbCAtLWFsbCAmJgorCWdpdCBwcnVuZSAtLWV4cGlyZT1hbGwgJiYKKwlnaXQgYnJhbmNoIC1kIGxhbWIgMj5yZXN1bHQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSByZWYgd2hpbGUgYW5vdGhlciBkYW5nbGluZyBwYWNrZWQgcmVmJyAnCisJZ2l0IGJyYW5jaCBsYW1iICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJmdXR1cmUgZ2FyYmFnZSIgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPWFsbCAtLWFsbCAmJgorCWdpdCBwcnVuZSAtLWV4cGlyZT1hbGwgJiYKKwlnaXQgYnJhbmNoIC1kIGxhbWIgMj5yZXN1bHQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgcmVmIGRpcmVjdGx5IGJlbG93IHJlZnMvJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy90b3AgSEVBRCAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorCWdyZXAgcmVmcy90b3AgLmdpdC9wYWNrZWQtcmVmcyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy90b3AKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IHBhY2sgcmVmIGluIHJlZnMvYmlzZWN0JyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9iaXNlY3QvbG9jYWwgSEVBRCAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorCSEgZ3JlcCByZWZzL2Jpc2VjdC9sb2NhbCAuZ2l0L3BhY2tlZC1yZWZzID4vZGV2L251bGwgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvYmlzZWN0L2xvY2FsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FibGUgcmVmbG9ncycgJworCWdpdCBjb25maWcgY29yZS5sb2dhbGxyZWZ1cGRhdGVzIGZhbHNlICYmCisJcm0gLXJmIC5naXQvbG9ncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcGFja2VkIGZvby9iYXIvYmF6IGJyYW5jaCcgJworCWdpdCBicmFuY2ggZm9vL2Jhci9iYXogJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvZm9vL2Jhci9iYXogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2Zvby9iYXIvYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGljZSBkL2YgY29uZmxpY3Qgd2l0aCBleGlzdGluZyBkaXJlY3RvcnknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIGZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggZm9vL2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGlzdGluZyBkaXJlY3RvcnkgcmVwb3J0cyBjb25jcmV0ZSByZWYnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIGZvbyAyPnN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgcmVmcy9oZWFkcy9mb28vYmFyL2JheiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90aWNlIGQvZiBjb25mbGljdCB3aXRoIGV4aXN0aW5nIHJlZicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggZm9vL2Jhci9iYXovZXh0cmEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIGZvby9iYXIvYmF6L2xvdHMvb2YvZXh0cmEvY29tcG9uZW50cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgcGFja2VkLXJlZnMgd2l0aCB1bnRlcm1pbmF0ZWQgbGluZScgJworCWNwIC5naXQvcGFja2VkLXJlZnMgLmdpdC9wYWNrZWQtcmVmcy5iYWsgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIm12IC5naXQvcGFja2VkLXJlZnMuYmFrIC5naXQvcGFja2VkLXJlZnMiICYmCisJcHJpbnRmICIlcyIgIiRIRUFEIHJlZnMvenp6enoiID4+LmdpdC9wYWNrZWQtcmVmcyAmJgorCWVjaG8gImZhdGFsOiB1bnRlcm1pbmF0ZWQgbGluZSBpbiAuZ2l0L3BhY2tlZC1yZWZzOiAkSEVBRCByZWZzL3p6enp6IiA+ZXhwZWN0ZWRfZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiA+b3V0IDI+ZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfZXJyIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgcGFja2VkLXJlZnMgY29udGFpbmluZyBqdW5rJyAnCisJY3AgLmdpdC9wYWNrZWQtcmVmcyAuZ2l0L3BhY2tlZC1yZWZzLmJhayAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgLmdpdC9wYWNrZWQtcmVmcy5iYWsgLmdpdC9wYWNrZWQtcmVmcyIgJiYKKwlwcmludGYgIiVzXG4iICJib2d1cyBjb250ZW50IiA+Pi5naXQvcGFja2VkLXJlZnMgJiYKKwllY2hvICJmYXRhbDogdW5leHBlY3RlZCBsaW5lIGluIC5naXQvcGFja2VkLXJlZnM6IGJvZ3VzIGNvbnRlbnQiID5leHBlY3RlZF9lcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmID5vdXQgMj5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9lcnIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdCBwYWNrZWQtcmVmcyB3aXRoIGEgc2hvcnQgU0hBLTEnICcKKwljcCAuZ2l0L3BhY2tlZC1yZWZzIC5naXQvcGFja2VkLXJlZnMuYmFrICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJtdiAuZ2l0L3BhY2tlZC1yZWZzLmJhayAuZ2l0L3BhY2tlZC1yZWZzIiAmJgorCXByaW50ZiAiJS43cyAlc1xuIiAkSEVBRCByZWZzL3p6enp6ID4+LmdpdC9wYWNrZWQtcmVmcyAmJgorCXByaW50ZiAiZmF0YWw6IHVuZXhwZWN0ZWQgbGluZSBpbiAuZ2l0L3BhY2tlZC1yZWZzOiAlLjdzICVzXG4iICRIRUFEIHJlZnMvenp6enogPmV4cGVjdGVkX2VyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgPm91dCAyPmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkX2VyciBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGltZW91dCBpZiBwYWNrZWQtcmVmcy5sb2NrIGV4aXN0cycgJworCUxPQ0s9LmdpdC9wYWNrZWQtcmVmcy5sb2NrICYmCisJPiIkTE9DSyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mICRMT0NLIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXRyeSBhY3F1aXJpbmcgcGFja2VkLXJlZnMubG9jaycgJworCUxPQ0s9LmdpdC9wYWNrZWQtcmVmcy5sb2NrICYmCisJPiIkTE9DSyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIndhaXQgJiYgcm0gLWYgJExPQ0siICYmCisJeworCQkoIHNsZWVwIDEgJiYgcm0gLWYgJExPQ0sgKSAmCisJfSAmJgorCWdpdCAtYyBjb3JlLnBhY2tlZHJlZnN0aW1lb3V0PTMwMDAgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAncGFjayBzeW1saW5rZWQgcGFja2VkLXJlZnMnICcKKwkjIEZpcnN0IG1ha2Ugc3VyZSB0aGF0IHN5bWxpbmtpbmcgd29ya3Mgd2hlbiByZWFkaW5nOgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbG9zc3kgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgZm9yLWVhY2gtcmVmID5hbGwtcmVmcy1iZWZvcmUgJiYKKwltdiAuZ2l0L3BhY2tlZC1yZWZzIC5naXQvbXktZGV2aWFudC1wYWNrZWQtcmVmcyAmJgorCWxuIC1zIG15LWRldmlhbnQtcGFja2VkLXJlZnMgLmdpdC9wYWNrZWQtcmVmcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgPmFsbC1yZWZzLWxpbmtlZCAmJgorCXRlc3RfY21wIGFsbC1yZWZzLWJlZm9yZSBhbGwtcmVmcy1saW5rZWQgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwlnaXQgZm9yLWVhY2gtcmVmID5hbGwtcmVmcy1wYWNrZWQgJiYKKwl0ZXN0X2NtcCBhbGwtcmVmcy1iZWZvcmUgYWxsLXJlZnMtcGFja2VkICYmCisJdGVzdCAtaCAuZ2l0L3BhY2tlZC1yZWZzICYmCisJdGVzdCAiJChyZWFkbGluayAuZ2l0L3BhY2tlZC1yZWZzKSIgPSAibXktZGV2aWFudC1wYWNrZWQtcmVmcyIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjExLXBlZWwtcmVmLnNoIGIvdC90MzIxMS1wZWVsLXJlZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjdjYWNhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzIxMS1wZWVsLXJlZi5zaApAQCAtMCwwICsxLDczIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdHMgZm9yIHRoZSBwZWVsX3JlZiBvcHRpbWl6YXRpb24gb2YgcGFja2VkLXJlZnMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGFubm90YXRlZCB0YWcgaW4gcmVmcy90YWdzJyAnCisJdGVzdF9jb21taXQgYmFzZSAmJgorCWdpdCB0YWcgLW0gYW5ub3RhdGVkIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYW5ub3RhdGVkIHRhZyBvdXRzaWRlIG9mIHJlZnMvdGFncycgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvb3V0c2lkZS9mb28gcmVmcy90YWdzL2ZvbworJworCisjIFRoaXMgbWF0Y2hlcyBzaG93LXJlZidzIG91dHB1dAorcHJpbnRfcmVmKCkgeworCWVjaG8gIiQoZ2l0IHJldi1wYXJzZSAiJDEiKSAkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGV4cGVjdGVkIHNob3ctcmVmIG91dHB1dCcgJworCXsKKwkJcHJpbnRfcmVmICJyZWZzL2hlYWRzL21hc3RlciIgJiYKKwkJcHJpbnRfcmVmICJyZWZzL291dHNpZGUvZm9vIiAmJgorCQlwcmludF9yZWYgInJlZnMvb3V0c2lkZS9mb29ee30iICYmCisJCXByaW50X3JlZiAicmVmcy90YWdzL2Jhc2UiICYmCisJCXByaW50X3JlZiAicmVmcy90YWdzL2ZvbyIgJiYKKwkJcHJpbnRfcmVmICJyZWZzL3RhZ3MvZm9vXnt9IgorCX0gPmV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZzIGFyZSBwZWVsZWQgb3V0c2lkZSBvZiByZWZzL3RhZ3MgKGxvb3NlKScgJworCWdpdCBzaG93LXJlZiAtZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZzIGFyZSBwZWVsZWQgb3V0c2lkZSBvZiByZWZzL3RhZ3MgKHBhY2tlZCknICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHNob3ctcmVmIC1kID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBvbGQtc3R5bGUgcGFjay1yZWZzIHdpdGhvdXQgZnVsbHktcGVlbGVkJyAnCisJIyBHaXQgbm8gbG9uZ2VyIHdyaXRlcyB3aXRob3V0IGZ1bGx5LXBlZWxlZCwgc28gd2UganVzdCB3cml0ZSBvdXIgb3duCisJIyBmcm9tIHNjcmF0Y2g7IHdlIGNvdWxkIGFsc28gbXVuZ2UgdGhlIGV4aXN0aW5nIGZpbGUgdG8gcmVtb3ZlIHRoZQorCSMgZnVsbHktcGVlbGVkIGJpdHMsIGJ1dCB0aGF0IHNlZW1zIGV2ZW4gbW9yZSBwcm9uZSB0byBmYWlsdXJlLAorCSMgZXNwZWNpYWxseSBpZiB0aGUgZm9ybWF0IGV2ZXIgY2hhbmdlcyBhZ2Fpbi4gQXQgbGVhc3QgdGhpcyB3YXkgd2UKKwkjIGtub3cgd2UgYXJlIGVtdWxhdGluZyBleGFjdGx5IHdoYXQgYW4gb2xkZXIgZ2l0IHdvdWxkIGhhdmUgd3JpdHRlbi4KKwl7CisJCWVjaG8gIiMgcGFjay1yZWZzIHdpdGg6IHBlZWxlZCAiICYmCisJCXByaW50X3JlZiAicmVmcy9oZWFkcy9tYXN0ZXIiICYmCisJCXByaW50X3JlZiAicmVmcy9vdXRzaWRlL2ZvbyIgJiYKKwkJcHJpbnRfcmVmICJyZWZzL3RhZ3MvYmFzZSIgJiYKKwkJcHJpbnRfcmVmICJyZWZzL3RhZ3MvZm9vIiAmJgorCQllY2hvICJeJChnaXQgcmV2LXBhcnNlICJyZWZzL3RhZ3MvZm9vXnt9IikiCisJfSA+dG1wICYmCisJbXYgdG1wIC5naXQvcGFja2VkLXJlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcyBhcmUgcGVlbGVkIG91dHNpZGUgb2YgcmVmcy90YWdzIChvbGQgcGFja2VkKScgJworCWdpdCBzaG93LXJlZiAtZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwZWVsZWQgcmVmcyBzdXJ2aXZlIGRlbGV0aW9uIG9mIHBhY2tlZCByZWYnICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJY3AgLmdpdC9wYWNrZWQtcmVmcyBmdWxseS1wZWVsZWQgJiYKKwlnaXQgYnJhbmNoIHlhZGRhICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWdpdCBicmFuY2ggLWQgeWFkZGEgJiYKKwl0ZXN0X2NtcCBmdWxseS1wZWVsZWQgLmdpdC9wYWNrZWQtcmVmcworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDAtZnVubnktbmFtZXMuc2ggYi90L3QzMzAwLWZ1bm55LW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA0ZGUwM2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzAwLWZ1bm55LW5hbWVzLnNoCkBAIC0wLDAgKzEsMjE3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1BhdGhuYW1lcyB3aXRoIGZ1bm55IGNoYXJhY3RlcnMuCisKK1RoaXMgdGVzdCB0cmllcyBwYXRobmFtZXMgd2l0aCBmdW5ueSBjaGFyYWN0ZXJzIGluIHRoZSB3b3JraW5nCit0cmVlLCBpbmRleCwgYW5kIHRyZWUgb2JqZWN0cy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK0hUPScJJworCit0ZXN0X2hhdmVfcHJlcmVxIE1JTkdXIHx8CitlY2hvIDI+L2Rldi9udWxsID4gIk5hbWUgd2l0aCBhbiR7SFR9SFQiCitpZiAhIHRlc3QgLWYgIk5hbWUgd2l0aCBhbiR7SFR9SFQiCit0aGVuCisJIyBzaW5jZSBGQVQvTlRGUyBkb2VzIG5vdCBhbGxvdyB0YWJzIGluIGZpbGVuYW1lcywgc2tpcCB0aGlzIHRlc3QKKwlza2lwX2FsbD0nWW91ciBmaWxlc3lzdGVtIGRvZXMgbm90IGFsbG93IHRhYnMgaW4gZmlsZW5hbWVzJworCXRlc3RfZG9uZQorZmkKKworcDA9J25vLWZ1bm55JworcDE9J3RhYnMJLCIgKGRxKSBhbmQgc3BhY2VzJworcDI9J2p1c3Qgc3BhY2UnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY2F0ID4iJHAwIiA8PC1cRU9GICYmCisJMS4gQSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBjYXQsIG9vcHMgZG9nLgorCTIuIEEgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgY2F0LCBvb3BzIGRvZy4KKwkzLiBBIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGNhdCwgb29wcyBkb2cuCisJRU9GCisKKwl7IGNhdCAiJHAwIiA+IiRwMSIgfHwgOjsgfSAmJgorCXsgZWNobyAiRm9vIEJhciBCYXoiID4iJHAyIiB8fCA6OyB9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBwb3B1bGF0ZSBpbmRleCBhbmQgdHJlZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgIiRwMCIgIiRwMiIgJiYKKwl0MD0kKGdpdCB3cml0ZS10cmVlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyBwcmludHMgc3BhY2UgaW4gZmlsZW5hbWUgdmVyYmF0aW0nICcKKwlwcmludGYgIiVzXG4iICJqdXN0IHNwYWNlIiBuby1mdW5ueSA+ZXhwZWN0ZWQgJiYKKwlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBhZGQgZnVubnkgZmlsZW5hbWUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkICIkcDEiICYmCisJdDE9JChnaXQgd3JpdGUtdHJlZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJanVzdCBzcGFjZQorCW5vLWZ1bm55CisJInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGxzLWZpbGVzID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAteiBkb2VzIG5vdCBxdW90ZSBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWp1c3Qgc3BhY2UKKwluby1mdW5ueQorCXRhYnMJLCIgKGRxKSBhbmQgc3BhY2VzCisJRU9GCisJZ2l0IGxzLWZpbGVzIC16ID5scy1maWxlcy56ICYmCisJcGVybCAtcGUgInkvXDAwMC9cMDEyLyIgPGxzLWZpbGVzLnogPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJanVzdCBzcGFjZQorCW5vLWZ1bm55CisJInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGxzLXRyZWUgLXIgJHQxID5scy10cmVlICYmCisJc2VkIC1lICJzL15bXgldKgkvLyIgPGxzLXRyZWUgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggLS1uYW1lLXN0YXR1cyBxdW90ZXMgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlBCSJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBkaWZmLWluZGV4IC0tbmFtZS1zdGF0dXMgJHQwID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLS1uYW1lLXN0YXR1cyBxdW90ZXMgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlBCSJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBkaWZmLXRyZWUgLS1uYW1lLXN0YXR1cyAkdDAgJHQxID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IC16IGRvZXMgbm90IHF1b3RlIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJQQorCXRhYnMJLCIgKGRxKSBhbmQgc3BhY2VzCisJRU9GCisJZ2l0IGRpZmYtaW5kZXggLXogLS1uYW1lLXN0YXR1cyAkdDAgPmRpZmYtaW5kZXgueiAmJgorCXBlcmwgLXBlICJ5L1wwMDAvXDAxMi8iIDxkaWZmLWluZGV4LnogPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSAteiBkb2VzIG5vdCBxdW90ZSBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCUEKKwl0YWJzCSwiIChkcSkgYW5kIHNwYWNlcworCUVPRgorCWdpdCBkaWZmLXRyZWUgLXogLS1uYW1lLXN0YXR1cyAkdDAgJHQxID5kaWZmLXRyZWUueiAmJgorCXBlcmwgLXBlIHkvXFwwMDAvXFwwMTIvIDxkaWZmLXRyZWUueiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCUNOVU0Jbm8tZnVubnkJInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGRpZmYtdHJlZSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtLW5hbWUtc3RhdHVzICR0MCAkdDEgPm91dCAmJgorCXNlZCAtZSAicy9eQ1swLTldKi9DTlVNLyIgPG91dCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IHJlbW92ZSB1bmZ1bm55IGluZGV4IGVudHJ5JyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSAiJHAwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLU0gcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJUk5VTQluby1mdW5ueQkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtTSAtLW5hbWUtc3RhdHVzICR0MCA+b3V0ICYmCisJc2VkIC1lICJzL15SWzAtOV0qL1JOVU0vIiA8b3V0ID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IC1NIC1wIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWRpZmYgLS1naXQgYS9uby1mdW5ueSAiYi90YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCXNpbWlsYXJpdHkgaW5kZXggTlVNJQorCXJlbmFtZSBmcm9tIG5vLWZ1bm55CisJcmVuYW1lIHRvICJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBkaWZmLWluZGV4IC1NIC1wICR0MCA+ZGlmZiAmJgorCXNlZCAtZSAicy9pbmRleCBbMC05XSolL2luZGV4IE5VTSUvIiA8ZGlmZiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IG1vZGUgY2hhbmdlJyAnCisJY2htb2QgK3ggIiRwMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCAtTSAtcCB3aXRoIG1vZGUgY2hhbmdlIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWRpZmYgLS1naXQgYS9uby1mdW5ueSAiYi90YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCW9sZCBtb2RlIDEwMDY0NAorCW5ldyBtb2RlIDEwMDc1NQorCXNpbWlsYXJpdHkgaW5kZXggTlVNJQorCXJlbmFtZSBmcm9tIG5vLWZ1bm55CisJcmVuYW1lIHRvICJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBkaWZmLWluZGV4IC1NIC1wICR0MCA+ZGlmZiAmJgorCXNlZCAtZSAicy9pbmRleCBbMC05XSolL2luZGV4IE5VTSUvIiA8ZGlmZiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnN0YXQgZm9yIHJlbmFtZSBxdW90ZXMgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkgInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisJRU9GCisJZ2l0IGRpZmYtaW5kZXggLU0gLXAgJHQwID5kaWZmICYmCisJZ2l0IGFwcGx5IC0tc3RhdCA8ZGlmZiA+ZGlmZnN0YXQgJiYKKwlzZWQgLWUgInMvfC4qLy8iIC1lICJzLyAqXCQvLyIgPGRpZmZzdGF0ID5jdXJyZW50ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbnVtc3RhdCBmb3IgcmVuYW1lIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTAJMAkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtTSAtcCAkdDAgPmRpZmYgJiYKKwlnaXQgYXBwbHkgLS1udW1zdGF0IDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdudW1zdGF0IHdpdGhvdXQgLU0gcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJMAkzCW5vLWZ1bm55CisJMwkwCSJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBkaWZmLWluZGV4IC1wICR0MCA+ZGlmZiAmJgorCWdpdCBhcHBseSAtLW51bXN0YXQgPGRpZmYgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ251bXN0YXQgZm9yIG5vbi1naXQgcmVuYW1lIGRpZmYgcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJMAkzCW5vLWZ1bm55CisJMwkwCSJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBkaWZmLWluZGV4IC1wICR0MCA+Z2l0LWRpZmYgJiYKKwlzZWQgLW5lICIvXlstK0BdL3AiIDxnaXQtZGlmZiA+ZGlmZiAmJgorCWdpdCBhcHBseSAtLW51bXN0YXQgPGRpZmYgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwMS1ub3Rlcy5zaCBiL3QvdDMzMDEtbm90ZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGY0MzMwMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDEtbm90ZXMuc2gKQEAgLTAsMCArMSwxMzgwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBjb21taXQgbm90ZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit3cml0ZV9zY3JpcHQgZmFrZV9lZGl0b3IgPDxcRU9GCitlY2hvICIkTVNHIiA+IiQxIgorZWNobyAiJE1TRyIgPiYyCitFT0YKK0dJVF9FRElUT1I9Li9mYWtlX2VkaXRvcgorZXhwb3J0IEdJVF9FRElUT1IKKworaW5kZW50PSIgICAgIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3QgYW5ub3RhdGUgbm9uLWV4aXN0aW5nIEhFQUQnICcKKwl0ZXN0X211c3RfZmFpbCBlbnYgTVNHPTMgZ2l0IG5vdGVzIGFkZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IDFzdCAmJgorCXRlc3RfY29tbWl0IDJuZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZWVkIHZhbGlkIG5vdGVzIHJlZicgJworCXRlc3RfbXVzdF9mYWlsIGVudiBNU0c9MSBHSVRfTk9URVNfUkVGPS8gZ2l0IG5vdGVzIHNob3cgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgTVNHPTIgR0lUX05PVEVTX1JFRj0vIGdpdCBub3RlcyBzaG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzaW5nIHRvIGFkZCBub3RlcyBpbiByZWZzL2hlYWRzLycgJworCXRlc3RfbXVzdF9mYWlsIGVudiBNU0c9MSBHSVRfTk9URVNfUkVGPXJlZnMvaGVhZHMvYm9ndXMgZ2l0IG5vdGVzIGFkZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2luZyB0byBlZGl0IG5vdGVzIGluIHJlZnMvcmVtb3Rlcy8nICcKKwl0ZXN0X211c3RfZmFpbCBlbnYgTVNHPTEgR0lUX05PVEVTX1JFRj1yZWZzL2hlYWRzL2JvZ3VzIGdpdCBub3RlcyBlZGl0CisnCisKKyMgMSBpbmRpY2F0ZXMgY2F1Z2h0IGdyYWNlZnVsbHkgYnkgZGllLCAxMjggbWVhbnMgZ2l0LXNob3cgYmFya2VkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYW5kbGUgZW1wdHkgbm90ZXMgZ3JhY2VmdWxseScgJworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgbm90ZXMgc2hvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IG5vbi1leGlzdGVudCBub3RlcyBlbnRyeSB3aXRoICVOJyAnCisJdGVzdF93cml0ZV9saW5lcyBBIEIgPmV4cGVjdCAmJgorCWdpdCBzaG93IC1zIC0tZm9ybWF0PSJBJW4lTkIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlcycgJworCU1TRz1iNCBnaXQgbm90ZXMgYWRkICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9OT1RFU19FRElUTVNHICYmCisJZ2l0IGxzLXRyZWUgLXIgcmVmcy9ub3Rlcy9jb21taXRzID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbCAmJgorCWVjaG8gYjQgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHNob3cgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IG5vdGVzIGVudHJ5IHdpdGggJU4nICcKKwl0ZXN0X3dyaXRlX2xpbmVzIEEgYjQgQiA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgLXMgLS1mb3JtYXQ9IkElbiVOQiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHJlZmxvZyBlbnRyeScgJworCXJlZj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRyZWYgcmVmcy9ub3Rlcy9jb21taXRzQHswfTogbm90ZXM6IE5vdGVzIGFkZGVkIGJ5ICdcJydnaXQgbm90ZXMgYWRkJ1wnJworCUVPRgorCWdpdCByZWZsb2cgc2hvdyByZWZzL25vdGVzL2NvbW1pdHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdCBleGlzdGluZyBub3RlcycgJworCU1TRz1iMyBnaXQgbm90ZXMgZWRpdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTk9URVNfRURJVE1TRyAmJgorCWdpdCBscy10cmVlIC1yIHJlZnMvbm90ZXMvY29tbWl0cyA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKKwllY2hvIGIzID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBzaG93IEhFQUReICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBub3RlcyBmcm9tIHRyZWVpc2gnICcKKwllY2hvIGIzID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgLS1yZWYgY29tbWl0c157dHJlZX0gc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyBiNCA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIC0tcmVmIGNvbW1pdHNAezF9IHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IGVkaXQgbm90ZXMgZnJvbSBub24tcmVmJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIC0tcmVmIGNvbW1pdHNee3RyZWV9IGVkaXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgLS1yZWYgY29tbWl0c0B7MX0gZWRpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3QgImdpdCBub3RlcyBhZGQgLW0iIHdoZXJlIG5vdGVzIGFscmVhZHkgZXhpc3RzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGFkZCAtbSAiYjIiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9OT1RFU19FRElUTVNHICYmCisJZ2l0IGxzLXRyZWUgLXIgcmVmcy9ub3Rlcy9jb21taXRzID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbCAmJgorCWVjaG8gYjMgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHNob3cgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW4gb3ZlcndyaXRlIGV4aXN0aW5nIG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGFkZCAtZiAtbSInICcKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJiMSIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L05PVEVTX0VESVRNU0cgJiYKKwlnaXQgbHMtdHJlZSAtciByZWZzL25vdGVzL2NvbW1pdHMgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCisJZWNobyBiMSA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgc2hvdyBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB3L25vIG9wdGlvbnMgb24gZXhpc3Rpbmcgbm90ZSBtb3JwaHMgaW50byBlZGl0JyAnCisJTVNHPWIyIGdpdCBub3RlcyBhZGQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L05PVEVTX0VESVRNU0cgJiYKKwlnaXQgbHMtdHJlZSAtciByZWZzL25vdGVzL2NvbW1pdHMgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCisJZWNobyBiMiA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgc2hvdyBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbiBvdmVyd3JpdGUgZXhpc3Rpbmcgbm90ZSB3aXRoICJnaXQgbm90ZXMgYWRkIC1mIicgJworCU1TRz1iMSBnaXQgbm90ZXMgYWRkIC1mICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9OT1RFU19FRElUTVNHICYmCisJZ2l0IGxzLXRyZWUgLXIgcmVmcy9ub3Rlcy9jb21taXRzID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbCAmJgorCWVjaG8gYjEgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHNob3cgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IG5vdGVzJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE0OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0ybmQKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9YjEKKwlFT0YKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdHMgJiYKKwkhIGdyZXAgYjEgY29tbWl0cyAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBtdWx0aS1saW5lIG5vdGVzJyAnCisJdGVzdF9jb21taXQgM3JkICYmCisJTVNHPSJiMyR7TEZ9YzNjM2MzYzMke0xGfWQzZDNkMyIgZ2l0IG5vdGVzIGFkZCAmJgorCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdC1tdWx0aWxpbmUgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MTU6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTNyZAorCisJCU5vdGVzOgorCQkke2luZGVudH1iMworCQkke2luZGVudH1jM2MzYzNjMworCQkke2luZGVudH1kM2QzZDMKKworCUVPRgorCWNhdCBleHBlY3QgPj5leHBlY3QtbXVsdGlsaW5lICYmCisJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LW11bHRpbGluZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyAtRiBub3RlcycgJworCXRlc3RfY29tbWl0IDR0aCAmJgorCWVjaG8gInh5enp5IiA+bm90ZTUgJiYKKwlnaXQgbm90ZXMgYWRkIC1GIG5vdGU1ICYmCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0LUYgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MTY6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTR0aAorCisJCU5vdGVzOgorCQkke2luZGVudH14eXp6eQorCisJRU9GCisJY2F0IGV4cGVjdC1tdWx0aWxpbmUgPj5leHBlY3QtRiAmJgorCWdpdCBsb2cgLTMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1GIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZS1hZGRpbmcgLUYgbm90ZXMgd2l0aG91dCAtZiBmYWlscycgJworCWVjaG8gInp5eHh5IiA+bm90ZTUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgYWRkIC1GIG5vdGU1ICYmCisJZ2l0IGxvZyAtMyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LUYgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1wcmV0dHk9cmF3IGRvZXMgbm90IHNob3cgbm90ZXMnICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdHJlZT0kKGdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0pICYmCisJcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJdHJlZSAkdHJlZQorCQlwYXJlbnQgJHBhcmVudAorCQlhdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTExMjkxMjE3MyAtMDcwMAorCQljb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTEyOTEyMTczIC0wNzAwCisKKwkJJHtpbmRlbnR9NHRoCisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLXNob3ctbm90ZXMnICcKKwljYXQgPj5leHBlY3QgPDwtRU9GICYmCisKKwlOb3RlczoKKwkke2luZGVudH14eXp6eQorCUVPRgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9cmF3IC0tc2hvdy1ub3RlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tbm8tbm90ZXMnICcKKwlnaXQgbG9nIC0xIC0tbm8tbm90ZXMgPmFjdHVhbCAmJgorCSEgZ3JlcCB4eXp6eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZvcm1hdC1wYXRjaCBkb2VzIG5vdCBzaG93IG5vdGVzJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+YWN0dWFsICYmCisJISBncmVwIHh5enp5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZm9ybWF0LXBhdGNoIC0tc2hvdy1ub3RlcyBkb2VzIHNob3cgbm90ZXMnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc2hvdy1ub3RlcyAtMSAtLXN0ZG91dCA+YWN0dWFsICYmCisJZ3JlcCB4eXp6eSBhY3R1YWwKKycKKworZm9yIHByZXR0eSBpbiBcCisJIiIgLS1wcmV0dHkgLS1wcmV0dHk9cmF3IC0tcHJldHR5PXNob3J0IC0tcHJldHR5PW1lZGl1bSBcCisJLS1wcmV0dHk9ZnVsbCAtLXByZXR0eT1mdWxsZXIgLS1wcmV0dHk9Zm9ybWF0OiVzIC0tb25lbGluZQorZG8KKwljYXNlICIkcHJldHR5IiBpbgorCSIiKSBwPSBub3Q9IG5lZ2F0ZT0iIiA7OworCT8qKSBwPSIkcHJldHR5IiBub3Q9IiBub3QiIG5lZ2F0ZT0iISIgOzsKKwllc2FjCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ2l0IHNob3cgJHByZXR0eSBkb2VzJG5vdCBzaG93IG5vdGVzIiAnCisJCWdpdCBzaG93ICRwID5hY3R1YWwgJiYKKwkJZXZhbCAiJG5lZ2F0ZSBncmVwIHh5enp5IGFjdHVhbCIKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGFsdGVybmF0ZSBub3RlcyByZWYnICcKKwlnaXQgbm90ZXMgLS1yZWY9YWx0ZXJuYXRlIGFkZCAtbSBhbHRlcm5hdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLW5vdGVzIHNob3dzIGRlZmF1bHQgbm90ZXMnICcKKwlnaXQgbG9nIC0xIC0tbm90ZXMgPmFjdHVhbCAmJgorCWdyZXAgeHl6enkgYWN0dWFsICYmCisJISBncmVwIGFsdGVybmF0ZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLW5vdGVzPVggc2hvd3Mgb25seSBYJyAnCisJZ2l0IGxvZyAtMSAtLW5vdGVzPWFsdGVybmF0ZSA+YWN0dWFsICYmCisJISBncmVwIHh5enp5IGFjdHVhbCAmJgorCWdyZXAgYWx0ZXJuYXRlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tbm90ZXMgLS1ub3Rlcz1YIHNob3dzIGJvdGgnICcKKwlnaXQgbG9nIC0xIC0tbm90ZXMgLS1ub3Rlcz1hbHRlcm5hdGUgPmFjdHVhbCAmJgorCWdyZXAgeHl6enkgYWN0dWFsICYmCisJZ3JlcCBhbHRlcm5hdGUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1uby1ub3RlcyByZXNldHMgZGVmYXVsdCBzdGF0ZScgJworCWdpdCBsb2cgLTEgLS1ub3RlcyAtLW5vdGVzPWFsdGVybmF0ZSBcCisJCS0tbm8tbm90ZXMgLS1ub3Rlcz1hbHRlcm5hdGUgXAorCQk+YWN0dWFsICYmCisJISBncmVwIHh5enp5IGFjdHVhbCAmJgorCWdyZXAgYWx0ZXJuYXRlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tbm8tbm90ZXMgcmVzZXRzIHJlZiBsaXN0JyAnCisJZ2l0IGxvZyAtMSAtLW5vdGVzIC0tbm90ZXM9YWx0ZXJuYXRlIFwKKwkJLS1uby1ub3RlcyAtLW5vdGVzIFwKKwkJPmFjdHVhbCAmJgorCWdyZXAgeHl6enkgYWN0dWFsICYmCisJISBncmVwIGFsdGVybmF0ZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyAtbSBub3RlcycgJworCXRlc3RfY29tbWl0IDV0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gc3BhbSAtbSAiZm9vJHtMRn1iYXIke0xGfWJheiIgJiYKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QtbSA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxNzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fXNwYW0KKwkJJHtpbmRlbnR9CisJCSR7aW5kZW50fWZvbworCQkke2luZGVudH1iYXIKKwkJJHtpbmRlbnR9YmF6CisKKwlFT0YKKwljYXQgZXhwZWN0LUYgPj5leHBlY3QtbSAmJgorCWdpdCBsb2cgLTQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1tIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgbm90ZSB3aXRoIGFkZCAtZiAtRiAvZGV2L251bGwnICcKKwlnaXQgbm90ZXMgYWRkIC1mIC1GIC9kZXYvbnVsbCAmJgorCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdC1ybS1GIDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE3OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH01dGgKKworCUVPRgorCWNhdCBleHBlY3QtRiA+PmV4cGVjdC1ybS1GICYmCisJZ2l0IGxvZyAtNCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LXJtLUYgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGNyZWF0ZSBlbXB0eSBub3RlIHdpdGggLW0gIiInICcKKwlnaXQgbm90ZXMgYWRkIC1tICIiICYmCisJZ2l0IGxvZyAtNCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LXJtLUYgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5vdGUgd2l0aCBjb21iaW5hdGlvbiBvZiAtbSBhbmQgLUYnICcKKwljYXQgPmV4cGVjdC1jb21iaW5lX21fYW5kX0YgPDwtRU9GICYmCisJCWZvbworCisJCXh5enp5CisKKwkJYmFyCisKKwkJenl4eHkKKworCQliYXoKKwlFT0YKKwllY2hvICJ4eXp6eSIgPm5vdGVfYSAmJgorCWVjaG8gInp5eHh5IiA+bm90ZV9iICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiZm9vIiAtRiBub3RlX2EgLW0gImJhciIgLUYgbm90ZV9iIC1tICJiYXoiICYmCisJZ2l0IG5vdGVzIHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1jb21iaW5lX21fYW5kX0YgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBub3RlIHdpdGggImdpdCBub3RlcyByZW1vdmUiJyAnCisJZ2l0IG5vdGVzIHJlbW92ZSBIRUFEXiAmJgorCWdpdCBub3RlcyByZW1vdmUgJiYKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwljYXQgPmV4cGVjdC1ybS1yZW1vdmUgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MTc6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTV0aAorCisJCWNvbW1pdCAkcGFyZW50CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MTY6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTR0aAorCisJRU9GCisJY2F0IGV4cGVjdC1tdWx0aWxpbmUgPj5leHBlY3Qtcm0tcmVtb3ZlICYmCisJZ2l0IGxvZyAtNCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LXJtLXJlbW92ZSBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmluZyBub24tZXhpc3Rpbmcgbm90ZSBzaG91bGQgbm90IGNyZWF0ZSBuZXcgY29tbWl0JyAnCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMgPmJlZm9yZV9jb21taXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgcmVtb3ZlIEhFQUReICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMgPmFmdGVyX2NvbW1pdCAmJgorCXRlc3RfY21wIGJlZm9yZV9jb21taXQgYWZ0ZXJfY29tbWl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92aW5nIG1vcmUgdGhhbiBvbmUnICcKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvY29tbWl0cykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvY29tbWl0cyAkYmVmb3JlIiAmJgorCisJIyBXZSBoYXZlIG9ubHkgdHdvIC0tIGFkZCBhbm90aGVyIGFuZCBtYWtlIHN1cmUgaXQgc3RheXMKKwlnaXQgbm90ZXMgYWRkIC1tICJleHRyYSIgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEID5hZnRlci1yZW1vdmFsLWV4cGVjdCAmJgorCWdpdCBub3RlcyByZW1vdmUgSEVBRF5eIEhFQUReXl4gJiYKKwlnaXQgbm90ZXMgbGlzdCB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGFmdGVyLXJlbW92YWwtZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmluZyBpcyBhdG9taWMnICcKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvY29tbWl0cykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvY29tbWl0cyAkYmVmb3JlIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyByZW1vdmUgSEVBRF5eIEhFQUReXl4gSEVBRF4gJiYKKwlhZnRlcj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzKSAmJgorCXRlc3QgIiRiZWZvcmUiID0gIiRhZnRlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3Zpbmcgd2l0aCAtLWlnbm9yZS1taXNzaW5nJyAnCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL2NvbW1pdHMgJGJlZm9yZSIgJiYKKworCSMgV2UgaGF2ZSBvbmx5IHR3byAtLSBhZGQgYW5vdGhlciBhbmQgbWFrZSBzdXJlIGl0IHN0YXlzCisJZ2l0IG5vdGVzIGFkZCAtbSAiZXh0cmEiICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWZ0ZXItcmVtb3ZhbC1leHBlY3QgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIC0taWdub3JlLW1pc3NpbmcgSEVBRF5eIEhFQUReXl4gSEVBRF4gJiYKKwlnaXQgbm90ZXMgbGlzdCB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGFmdGVyLXJlbW92YWwtZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmluZyB3aXRoIC0taWdub3JlLW1pc3NpbmcgYnV0IGJvZ3VzIHJlZicgJworCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9jb21taXRzICRiZWZvcmUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHJlbW92ZSAtLWlnbm9yZS1taXNzaW5nIEhFQUReXiBIRUFEXl5eIE5PLVNVQ0gtQ09NTUlUICYmCisJYWZ0ZXI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvY29tbWl0cykgJiYKKwl0ZXN0ICIkYmVmb3JlIiA9ICIkYWZ0ZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSByZWFkcyBmcm9tIC0tc3RkaW4nICcKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvY29tbWl0cykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvY29tbWl0cyAkYmVmb3JlIiAmJgorCisJIyBXZSBoYXZlIG9ubHkgdHdvIC0tIGFkZCBhbm90aGVyIGFuZCBtYWtlIHN1cmUgaXQgc3RheXMKKwlnaXQgbm90ZXMgYWRkIC1tICJleHRyYSIgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEID5hZnRlci1yZW1vdmFsLWV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF5eIEhFQUReXl4gPmlucHV0ICYmCisJZ2l0IG5vdGVzIHJlbW92ZSAtLXN0ZGluIDxpbnB1dCAmJgorCWdpdCBub3RlcyBsaXN0IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgYWZ0ZXItcmVtb3ZhbC1leHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSAtLXN0ZGluIGlzIGFsc28gYXRvbWljJyAnCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL2NvbW1pdHMgJGJlZm9yZSIgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReXiBIRUFEXl5eIEhFQUReID5pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyByZW1vdmUgLS1zdGRpbiA8aW5wdXQgJiYKKwlhZnRlcj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzKSAmJgorCXRlc3QgIiRiZWZvcmUiID0gIiRhZnRlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3Zpbmcgd2l0aCAtLXN0ZGluIC0taWdub3JlLW1pc3NpbmcnICcKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvY29tbWl0cykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvY29tbWl0cyAkYmVmb3JlIiAmJgorCisJIyBXZSBoYXZlIG9ubHkgdHdvIC0tIGFkZCBhbm90aGVyIGFuZCBtYWtlIHN1cmUgaXQgc3RheXMKKwlnaXQgbm90ZXMgYWRkIC1tICJleHRyYSIgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEID5hZnRlci1yZW1vdmFsLWV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF5eIEhFQUReXl4gSEVBRF4gPmlucHV0ICYmCisJZ2l0IG5vdGVzIHJlbW92ZSAtLWlnbm9yZS1taXNzaW5nIC0tc3RkaW4gPGlucHV0ICYmCisJZ2l0IG5vdGVzIGxpc3QgfCBzZWQgLWUgInMvIC4qLy8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBhZnRlci1yZW1vdmFsLWV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdCBub3RlcyB3aXRoICJnaXQgbm90ZXMgbGlzdCInICcKKwljb21taXRfMj0kKGdpdCByZXYtcGFyc2UgMm5kKSAmJgorCWNvbW1pdF8zPSQoZ2l0IHJldi1wYXJzZSAzcmQpICYmCisJbm90ZV8yPSQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL2NvbW1pdHM6JGNvbW1pdF8yKSAmJgorCW5vdGVfMz0kKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9jb21taXRzOiRjb21taXRfMykgJiYKKwlzb3J0IC10IiAiIC1rMiA+ZXhwZWN0IDw8LUVPRiAmJgorCQkkbm90ZV8yICRjb21taXRfMgorCQkkbm90ZV8zICRjb21taXRfMworCUVPRgorCWdpdCBub3RlcyBsaXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3Qgbm90ZXMgd2l0aCAiZ2l0IG5vdGVzIicgJworCWdpdCBub3RlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0IHNwZWNpZmljIG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGxpc3QgPG9iamVjdD4iJyAnCisJZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL2NvbW1pdHM6JGNvbW1pdF8zID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEXl4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdGluZyBub24tZXhpc3Rpbmcgbm90ZXMgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbGlzdCBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGVuZCB0byBleGlzdGluZyBub3RlIHdpdGggImdpdCBub3RlcyBhcHBlbmQiJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCUluaXRpYWwgc2V0IG9mIG5vdGVzCisKKwkJTW9yZSBub3RlcyBhcHBlbmRlZCB3aXRoIGdpdCBub3RlcyBhcHBlbmQKKwlFT0YKKwlnaXQgbm90ZXMgYWRkIC1tICJJbml0aWFsIHNldCBvZiBub3RlcyIgJiYKKwlnaXQgbm90ZXMgYXBwZW5kIC1tICJNb3JlIG5vdGVzIGFwcGVuZGVkIHdpdGggZ2l0IG5vdGVzIGFwcGVuZCIgJiYKKwlnaXQgbm90ZXMgc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IG5vdGVzIGxpc3QiIGRvZXMgbm90IGV4cGFuZCB0byAiZ2l0IG5vdGVzIGxpc3QgSEVBRCInICcKKwljb21taXRfNT0kKGdpdCByZXYtcGFyc2UgNXRoKSAmJgorCW5vdGVfNT0kKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9jb21taXRzOiRjb21taXRfNSkgJiYKKwlzb3J0IC10IiAiIC1rMiA+ZXhwZWN0X2xpc3QgPDwtRU9GICYmCisJCSRub3RlXzIgJGNvbW1pdF8yCisJCSRub3RlXzMgJGNvbW1pdF8zCisJCSRub3RlXzUgJGNvbW1pdF81CisJRU9GCisJZ2l0IG5vdGVzIGxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF9saXN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBlbmRpbmcgZW1wdHkgc3RyaW5nIGRvZXMgbm90IGNoYW5nZSBleGlzdGluZyBub3RlJyAnCisJZ2l0IG5vdGVzIGFwcGVuZCAtbSAiIiAmJgorCWdpdCBub3RlcyBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBhcHBlbmQgPT0gYWRkIHdoZW4gdGhlcmUgaXMgbm8gZXhpc3Rpbmcgbm90ZScgJworCWdpdCBub3RlcyByZW1vdmUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBsaXN0IEhFQUQgJiYKKwlnaXQgbm90ZXMgYXBwZW5kIC1tICJJbml0aWFsIHNldCBvZiBub3RlcyR7TEZ9JHtMRn1Nb3JlIG5vdGVzIGFwcGVuZGVkIHdpdGggZ2l0IG5vdGVzIGFwcGVuZCIgJiYKKwlnaXQgbm90ZXMgc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBlbmRpbmcgZW1wdHkgc3RyaW5nIHRvIG5vbi1leGlzdGluZyBub3RlIGRvZXMgbm90IGNyZWF0ZSBub3RlJyAnCisJZ2l0IG5vdGVzIHJlbW92ZSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGxpc3QgSEVBRCAmJgorCWdpdCBub3RlcyBhcHBlbmQgLW0gIiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbGlzdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBvdGhlciBub3RlIG9uIGEgZGlmZmVyZW50IG5vdGVzIHJlZiAoc2V0dXApJyAnCisJdGVzdF9jb21taXQgNnRoICYmCisJR0lUX05PVEVTX1JFRj0icmVmcy9ub3Rlcy9vdGhlciIgZ2l0IG5vdGVzIGFkZCAtbSAib3RoZXIgbm90ZSIgJiYKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3Qtbm90LW90aGVyIDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE4OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH02dGgKKwlFT0YKKwljcCBleHBlY3Qtbm90LW90aGVyIGV4cGVjdC1vdGhlciAmJgorCWNhdCA+PmV4cGVjdC1vdGhlciA8PC1FT0YKKworCQlOb3RlcyAob3RoZXIpOgorCQkke2luZGVudH1vdGhlciBub3RlCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0RvIG5vdCBzaG93IG5vdGUgb24gb3RoZXIgcmVmIGJ5IGRlZmF1bHQnICcKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtbm90LW90aGVyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEbyBzaG93IG5vdGUgd2hlbiByZWYgaXMgZ2l2ZW4gaW4gR0lUX05PVEVTX1JFRicgJworCUdJVF9OT1RFU19SRUY9InJlZnMvbm90ZXMvb3RoZXIiIGdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1vdGhlciBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRG8gc2hvdyBub3RlIHdoZW4gcmVmIGlzIGdpdmVuIGluIGNvcmUubm90ZXNSZWYgY29uZmlnJyAnCisJdGVzdF9jb25maWcgY29yZS5ub3Rlc1JlZiAicmVmcy9ub3Rlcy9vdGhlciIgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtb3RoZXIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0RvIG5vdCBzaG93IG5vdGUgd2hlbiBjb3JlLm5vdGVzUmVmIGlzIG92ZXJyaWRkZW4nICcKKwl0ZXN0X2NvbmZpZyBjb3JlLm5vdGVzUmVmICJyZWZzL25vdGVzL290aGVyIiAmJgorCUdJVF9OT1RFU19SRUY9InJlZnMvbm90ZXMvd3JvbmciIGdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ub3Qtb3RoZXIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Nob3cgYWxsIG5vdGVzIHdoZW4gbm90ZXMuZGlzcGxheVJlZj1yZWZzL25vdGVzLyonICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwljYXQgPmV4cGVjdC1ib3RoIDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE4OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH02dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9b3JkZXIgdGVzdAorCisJCU5vdGVzIChvdGhlcik6CisJCSR7aW5kZW50fW90aGVyIG5vdGUKKworCQljb21taXQgJHBhcmVudAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE3OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH01dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9cmVwbGFjZW1lbnQgZm9yIGRlbGV0ZWQgbm90ZQorCUVPRgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9jb21taXRzIGdpdCBub3RlcyBhZGQgXAorCQktbSJyZXBsYWNlbWVudCBmb3IgZGVsZXRlZCBub3RlIiBIRUFEXiAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9jb21taXRzIGdpdCBub3RlcyBhZGQgLW0ib3JkZXIgdGVzdCIgJiYKKwl0ZXN0X3VuY29uZmlnIGNvcmUubm90ZXNSZWYgJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5kaXNwbGF5UmVmICJyZWZzL25vdGVzLyoiICYmCisJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWJvdGggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcmUubm90ZXNSZWYgaXMgaW1wbGljaXRseSBpbiBub3Rlcy5kaXNwbGF5UmVmJyAnCisJdGVzdF9jb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL2NvbW1pdHMgJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5kaXNwbGF5UmVmIHJlZnMvbm90ZXMvb3RoZXIgJiYKKwlnaXQgbG9nIC0yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtYm90aCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90ZXMuZGlzcGxheVJlZiBjYW4gYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UnICcKKwl0ZXN0X3VuY29uZmlnIGNvcmUubm90ZXNSZWYgJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5kaXNwbGF5UmVmIHJlZnMvbm90ZXMvY29tbWl0cyAmJgorCWdpdCBjb25maWcgLS1hZGQgbm90ZXMuZGlzcGxheVJlZiByZWZzL25vdGVzL290aGVyICYmCisJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWJvdGggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzLmRpc3BsYXlSZWYgcmVzcGVjdHMgb3JkZXInICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QtYm90aC1yZXZlcnNlZCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxODoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NnRoCisKKwkJTm90ZXMgKG90aGVyKToKKwkJJHtpbmRlbnR9b3RoZXIgbm90ZQorCisJCU5vdGVzOgorCQkke2luZGVudH1vcmRlciB0ZXN0CisJRU9GCisJdGVzdF9jb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL290aGVyICYmCisJdGVzdF9jb25maWcgbm90ZXMuZGlzcGxheVJlZiByZWZzL25vdGVzL2NvbW1pdHMgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtYm90aC1yZXZlcnNlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX05PVEVTX0RJU1BMQVlfUkVGIHdvcmtzJyAnCisJR0lUX05PVEVTX0RJU1BMQVlfUkVGPXJlZnMvbm90ZXMvY29tbWl0czpyZWZzL25vdGVzL290aGVyIFwKKwkJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWJvdGggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9OT1RFU19ESVNQTEFZX1JFRiBvdmVycmlkZXMgY29uZmlnJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJY2F0ID5leHBlY3Qtbm9uZSA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxODoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NnRoCisKKwkJY29tbWl0ICRwYXJlbnQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxNzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NXRoCisJRU9GCisJdGVzdF9jb25maWcgbm90ZXMuZGlzcGxheVJlZiAicmVmcy9ub3Rlcy8qIiAmJgorCUdJVF9OT1RFU19SRUY9IEdJVF9OT1RFU19ESVNQTEFZX1JFRj0gZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LW5vbmUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy1ub3Rlcz0qIGFkZHMgdG8gR0lUX05PVEVTX0RJU1BMQVlfUkVGJyAnCisJR0lUX05PVEVTX1JFRj0gR0lUX05PVEVTX0RJU1BMQVlfUkVGPSBnaXQgbG9nIC0tc2hvdy1ub3Rlcz0qIC0yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtYm90aCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1zdGFuZGFyZC1ub3RlcycgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdC1jb21taXRzIDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE4OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH02dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9b3JkZXIgdGVzdAorCUVPRgorCWdpdCBsb2cgLS1uby1zdGFuZGFyZC1ub3RlcyAtLXNob3ctbm90ZXM9Y29tbWl0cyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWNvbW1pdHMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RhbmRhcmQtbm90ZXMnICcKKwl0ZXN0X2NvbmZpZyBub3Rlcy5kaXNwbGF5UmVmICJyZWZzL25vdGVzLyoiICYmCisJZ2l0IGxvZyAtLW5vLXN0YW5kYXJkLW5vdGVzIC0tc2hvdy1ub3Rlcz1jb21taXRzIFwKKwkJLS1zdGFuZGFyZC1ub3RlcyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWJvdGggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy1ub3Rlcz1yZWYgYWNjdW11bGF0ZXMnICcKKwlnaXQgbG9nIC0tc2hvdy1ub3Rlcz1vdGhlciAtLXNob3ctbm90ZXM9Y29tbWl0cyBcCisJCSAtLW5vLXN0YW5kYXJkLW5vdGVzIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtYm90aC1yZXZlcnNlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWxsb3cgbm90ZXMgb24gbm9uLWNvbW1pdHMgKHRyZWVzLCBibG9icywgdGFncyknICcKKwl0ZXN0X2NvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvb3RoZXIgJiYKKwllY2hvICJOb3RlIG9uIGEgdHJlZSIgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGUgb24gYSB0cmVlIiBIRUFEOiAmJgorCWdpdCBub3RlcyBzaG93IEhFQUQ6ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyAiTm90ZSBvbiBhIGJsb2IiID5leHBlY3QgJiYKKwlnaXQgbHMtdHJlZSAtLW5hbWUtb25seSBIRUFEID5maWxlcyAmJgorCWZpbGVuYW1lPSQoaGVhZCAtbjEgZmlsZXMpICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiTm90ZSBvbiBhIGJsb2IiIEhFQUQ6JGZpbGVuYW1lICYmCisJZ2l0IG5vdGVzIHNob3cgSEVBRDokZmlsZW5hbWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvICJOb3RlIG9uIGEgdGFnIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtYSAtbSAiVGhpcyBpcyBhbiBhbm5vdGF0ZWQgdGFnIiBmb29iYXIgSEVBRF4gJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlIG9uIGEgdGFnIiBmb29iYXIgJiYKKwlnaXQgbm90ZXMgc2hvdyBmb29iYXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5vdGUgZnJvbSBvdGhlciBub3RlIHdpdGggImdpdCBub3RlcyBhZGQgLUMiJyAnCisJdGVzdF9jb21taXQgN3RoICYmCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE5OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH03dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9b3JkZXIgdGVzdAorCUVPRgorCW5vdGU9JChnaXQgbm90ZXMgbGlzdCBIRUFEXikgJiYKKwlnaXQgbm90ZXMgYWRkIC1DICRub3RlICYmCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUReID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlIGZyb20gbm9uLWV4aXN0aW5nIG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGFkZCAtQyIgZmFpbHMnICcKKwl0ZXN0X2NvbW1pdCA4dGggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgYWRkIC1DIGRlYWRiZWVmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGxpc3QgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZSBmcm9tIG5vbi1ibG9iIHdpdGggImdpdCBub3RlcyBhZGQgLUMiIGZhaWxzJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRyZWU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6KSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBhZGQgLUMgJGNvbW1pdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBhZGQgLUMgJHRyZWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbGlzdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlIGZyb20gYmxvYiB3aXRoICJnaXQgbm90ZXMgYWRkIC1DIiByZXVzZXMgYmxvYiBpZCcgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyMDoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9OHRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fVRoaXMgaXMgYSBibG9iIG9iamVjdAorCUVPRgorCWVjaG8gIlRoaXMgaXMgYSBibG9iIG9iamVjdCIgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiA+YmxvYiAmJgorCWdpdCBub3RlcyBhZGQgLUMgJChjYXQgYmxvYikgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgYmxvYiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5vdGUgZnJvbSBvdGhlciBub3RlIHdpdGggImdpdCBub3RlcyBhZGQgLWMiJyAnCisJdGVzdF9jb21taXQgOXRoICYmCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjIxOjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH05dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQorCUVPRgorCW5vdGU9JChnaXQgbm90ZXMgbGlzdCBIRUFEXl4pICYmCisJTVNHPSJ5ZXQgYW5vdGhlciBub3RlIiBnaXQgbm90ZXMgYWRkIC1jICRub3RlICYmCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZSBmcm9tIG5vbi1leGlzdGluZyBub3RlIHdpdGggImdpdCBub3RlcyBhZGQgLWMiIGZhaWxzJyAnCisJdGVzdF9jb21taXQgMTB0aCAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBNU0c9InlldCBhbm90aGVyIG5vdGUiIGdpdCBub3RlcyBhZGQgLWMgZGVhZGJlZWYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbGlzdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGVuZCB0byBub3RlIGZyb20gb3RoZXIgbm90ZSB3aXRoICJnaXQgbm90ZXMgYXBwZW5kIC1DIicgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MjE6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTl0aAorCisJCU5vdGVzOgorCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCisJCSR7aW5kZW50fQorCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCisJRU9GCisJbm90ZT0kKGdpdCBub3RlcyBsaXN0IEhFQUReKSAmJgorCWdpdCBub3RlcyBhcHBlbmQgLUMgJG5vdGUgSEVBRF4gJiYKKwlnaXQgbG9nIC0xIEhFQUReID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlIGZyb20gb3RoZXIgbm90ZSB3aXRoICJnaXQgbm90ZXMgYXBwZW5kIC1jIicgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyMjoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTB0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1vdGhlciBub3RlCisJRU9GCisJbm90ZT0kKGdpdCBub3RlcyBsaXN0IEhFQUReKSAmJgorCU1TRz0ib3RoZXIgbm90ZSIgZ2l0IG5vdGVzIGFwcGVuZCAtYyAkbm90ZSAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwZW5kIHRvIG5vdGUgZnJvbSBvdGhlciBub3RlIHdpdGggImdpdCBub3RlcyBhcHBlbmQgLWMiJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjIyOjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xMHRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fW90aGVyIG5vdGUKKwkJJHtpbmRlbnR9CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKwlFT0YKKwlub3RlPSQoZ2l0IG5vdGVzIGxpc3QgSEVBRCkgJiYKKwlNU0c9InlldCBhbm90aGVyIG5vdGUiIGdpdCBub3RlcyBhcHBlbmQgLWMgJG5vdGUgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgbm90ZSB3aXRoICJnaXQgbm90ZXMgY29weSInICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIDR0aCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxNjoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NHRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fVRoaXMgaXMgYSBibG9iIG9iamVjdAorCUVPRgorCWdpdCBub3RlcyBjb3B5IDh0aCA0dGggJiYKKwlnaXQgbG9nIDNyZC4uNHRoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IG5vdGVzIGxpc3QgNHRoID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgbGlzdCA4dGggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29weSBub3RlIHdpdGggImdpdCBub3RlcyBjb3B5IiB3aXRoIGRlZmF1bHQnICcKKwl0ZXN0X2NvbW1pdCAxMXRoICYmCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjIzOjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xMXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fW90aGVyIG5vdGUKKwkJJHtpbmRlbnR9CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKwlFT0YKKwlnaXQgbm90ZXMgY29weSBIRUFEXiAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEXiA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV2ZW50IG92ZXJ3cml0ZSB3aXRoICJnaXQgbm90ZXMgY29weSInICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgY29weSBIRUFEfjIgSEVBRCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjIzOjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xMXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fW90aGVyIG5vdGUKKwkJJHtpbmRlbnR9CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKwlFT0YKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRF4gPmV4cGVjdCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgb3ZlcndyaXRlIHdpdGggImdpdCBub3RlcyBjb3B5IC1mIicgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyMzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTF0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1UaGlzIGlzIGEgYmxvYiBvYmplY3QKKwlFT0YKKwlnaXQgbm90ZXMgY29weSAtZiBIRUFEfjMgSEVBRCAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEfjMgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgb3ZlcndyaXRlIHdpdGggImdpdCBub3RlcyBjb3B5IC1mIiB3aXRoIGRlZmF1bHQnICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MjM6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTExdGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQorCQkke2luZGVudH0KKwkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQorCUVPRgorCWdpdCBub3RlcyBjb3B5IC1mIEhFQUR+MiAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEfjIgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IGNvcHkgbm90ZSBmcm9tIG9iamVjdCB3aXRob3V0IG5vdGVzJyAnCisJdGVzdF9jb21taXQgMTJ0aCAmJgorCXRlc3RfY29tbWl0IDEzdGggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgY29weSBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IC0tc3RkaW4nICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyNToxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTN0aAorCisJCU5vdGVzOgorCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCisJCSR7aW5kZW50fQorCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCisKKwkJY29tbWl0ICRwYXJlbnQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyNDoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTJ0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1vdGhlciBub3RlCisJCSR7aW5kZW50fQorCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCisJRU9GCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID4+Y29weSAmJgorCWdpdCBub3RlcyBjb3B5IC0tc3RkaW4gPGNvcHkgJiYKKwlnaXQgbG9nIC0yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRH4yID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRH4zID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEXiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlICh1bmNvbmZpZ3VyZWQpJyAnCisJdGVzdF9jb21taXQgMTR0aCAmJgorCXRlc3RfY29tbWl0IDE1dGggJiYKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyNzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTV0aAorCisJCWNvbW1pdCAkcGFyZW50CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MjY6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTE0dGgKKwlFT0YKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+Y29weSAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUR+MikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPj5jb3B5ICYmCisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKKwlnaXQgbG9nIC0yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGUgKGVuYWJsZWQpJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6Mjc6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTE1dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQorCQkke2luZGVudH0KKwkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQorCisJCWNvbW1pdCAkcGFyZW50CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MjY6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTE0dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9b3RoZXIgbm90ZQorCQkke2luZGVudH0KKwkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQorCUVPRgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIG92ZXJ3cml0ZSAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+Y29weSAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUR+MikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPj5jb3B5ICYmCisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKKwlnaXQgbG9nIC0yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGUgKGRpc2FibGVkKScgJworCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGUuYmFyIGZhbHNlICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+Y29weSAmJgorCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9YmFyIDxjb3B5ICYmCisJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlIChvdmVyd3JpdGUpJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjI3OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xNXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fWEgZnJlc2ggbm90ZQorCUVPRgorCWdpdCBub3RlcyBhZGQgLWYgLW0iYSBmcmVzaCBub3RlIiBIRUFEXiAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIG92ZXJ3cml0ZSAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZSAoaWdub3JlKScgJworCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIGlnbm9yZSAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZSAoYXBwZW5kKScgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyNzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTV0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1hIGZyZXNoIG5vdGUKKwkJJHtpbmRlbnR9CisJCSR7aW5kZW50fWFub3RoZXIgZnJlc2ggbm90ZQorCUVPRgorCWdpdCBub3RlcyBhZGQgLWYgLW0iYW5vdGhlciBmcmVzaCBub3RlIiBIRUFEXiAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIGNvbmNhdGVuYXRlICYmCisJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZVJlZiAicmVmcy9ub3Rlcy8qIiAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+Y29weSAmJgorCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vIDxjb3B5ICYmCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlIChhcHBlbmQgdHdvIHRvIG9uZSknICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6Mjc6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTE1dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9YSBmcmVzaCBub3RlCisJCSR7aW5kZW50fQorCQkke2luZGVudH1hbm90aGVyIGZyZXNoIG5vdGUKKwkJJHtpbmRlbnR9CisJCSR7aW5kZW50fWFwcGVuZCAxCisJCSR7aW5kZW50fQorCQkke2luZGVudH1hcHBlbmQgMgorCUVPRgorCWdpdCBub3RlcyBhZGQgLWYgLW0iYXBwZW5kIDEiIEhFQUReICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSJhcHBlbmQgMiIgSEVBRF5eICYmCisJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZU1vZGUgY29uY2F0ZW5hdGUgJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRF5eKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+PmNvcHkgJiYKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZSAoYXBwZW5kIGVtcHR5KScgJworCWdpdCBub3RlcyByZW1vdmUgSEVBRF4gJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBjb25jYXRlbmF0ZSAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX05PVEVTX1JFV1JJVEVfTU9ERSB3b3JrcycgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyNzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTV0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1yZXBsYWNlbWVudCBub3RlIDEKKwlFT0YKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBjb25jYXRlbmF0ZSAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tInJlcGxhY2VtZW50IG5vdGUgMSIgSEVBRF4gJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlHSVRfTk9URVNfUkVXUklURV9NT0RFPW92ZXJ3cml0ZSBnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX05PVEVTX1JFV1JJVEVfUkVGIHdvcmtzJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjI3OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xNXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fXJlcGxhY2VtZW50IG5vdGUgMgorCUVPRgorCWdpdCBub3RlcyBhZGQgLWYgLW0icmVwbGFjZW1lbnQgbm90ZSAyIiBIRUFEXiAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIG92ZXJ3cml0ZSAmJgorCXRlc3RfdW5jb25maWcgbm90ZXMucmV3cml0ZVJlZiAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+Y29weSAmJgorCUdJVF9OT1RFU19SRVdSSVRFX1JFRj1yZWZzL25vdGVzL2NvbW1pdHM6cmVmcy9ub3Rlcy9vdGhlciBcCisJCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vIDxjb3B5ICYmCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfTk9URVNfUkVXUklURV9SRUYgb3ZlcnJpZGVzIGNvbmZpZycgJworCWdpdCBub3RlcyBhZGQgLWYgLW0icmVwbGFjZW1lbnQgbm90ZSAzIiBIRUFEXiAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIG92ZXJ3cml0ZSAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgcmVmcy9ub3Rlcy9vdGhlciAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+Y29weSAmJgorCUdJVF9OT1RFU19SRVdSSVRFX1JFRj1yZWZzL25vdGVzL2NvbW1pdHMgXAorCQlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCWdyZXAgInJlcGxhY2VtZW50IG5vdGUgMyIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IGRpYWdub3NlcyB0b28gbWFueSBvciB0b28gZmV3IHBhcmFtZXRlcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgY29weSAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAidG9vIGZldyBwYXJhbWV0ZXJzIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBjb3B5IG9uZSB0d28gdGhyZWUgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgInRvbyBtYW55IHBhcmFtZXRlcnMiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBnZXQtcmVmIGV4cGFuZHMgcmVmcy9oZWFkcy9tYXN0ZXIgdG8gcmVmcy9ub3Rlcy9yZWZzL2hlYWRzL21hc3RlcicgJworCXRlc3RfdW5jb25maWcgY29yZS5ub3Rlc1JlZiAmJgorCXNhbmVfdW5zZXQgR0lUX05PVEVTX1JFRiAmJgorCWVjaG8gcmVmcy9ub3Rlcy9yZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIC0tcmVmPXJlZnMvaGVhZHMvbWFzdGVyIGdldC1yZWYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGdldC1yZWYgKG5vIG92ZXJyaWRlcyknICcKKwl0ZXN0X3VuY29uZmlnIGNvcmUubm90ZXNSZWYgJiYKKwlzYW5lX3Vuc2V0IEdJVF9OT1RFU19SRUYgJiYKKwllY2hvIHJlZnMvbm90ZXMvY29tbWl0cyA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGdldC1yZWYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGdldC1yZWYgKGNvcmUubm90ZXNSZWYpJyAnCisJdGVzdF9jb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL2ZvbyAmJgorCWVjaG8gcmVmcy9ub3Rlcy9mb28gPmV4cGVjdCAmJgorCWdpdCBub3RlcyBnZXQtcmVmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBnZXQtcmVmIChHSVRfTk9URVNfUkVGKScgJworCWVjaG8gcmVmcy9ub3Rlcy9iYXIgPmV4cGVjdCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9iYXIgZ2l0IG5vdGVzIGdldC1yZWYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGdldC1yZWYgKC0tcmVmKScgJworCWVjaG8gcmVmcy9ub3Rlcy9iYXogPmV4cGVjdCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9iYXIgZ2l0IG5vdGVzIC0tcmVmPWJheiBnZXQtcmVmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3Rpbmcgb2YgZW1wdHkgbm90ZXMnICcKKwl0ZXN0X3VuY29uZmlnIGNvcmUubm90ZXNSZWYgJiYKKwl0ZXN0X2NvbW1pdCAxNnRoICYmCisJZW1wdHlfYmxvYj0kKGdpdCBoYXNoLW9iamVjdCAtdyAvZGV2L251bGwpICYmCisJZWNobyAiJGVtcHR5X2Jsb2IiID5leHBlY3RfZW1wdHkKKycKKword2hpbGUgcmVhZCBjbWQKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJ2dpdCBub3RlcyAkY21kJyByZW1vdmVzIGVtcHR5IG5vdGUiICIKKwkJdGVzdF9taWdodF9mYWlsIGdpdCBub3RlcyByZW1vdmUgSEVBRCAmJgorCQlNU0c9IGdpdCBub3RlcyAkY21kICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBsaXN0IEhFQUQKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICInZ2l0IG5vdGVzICRjbWQgLS1hbGxvdy1lbXB0eScgc3RvcmVzIGVtcHR5IG5vdGUiICIKKwkJdGVzdF9taWdodF9mYWlsIGdpdCBub3RlcyByZW1vdmUgSEVBRCAmJgorCQlNU0c9IGdpdCBub3RlcyAkY21kIC0tYWxsb3ctZW1wdHkgJiYKKwkJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdF9lbXB0eSBhY3R1YWwKKwkiCitkb25lIDw8XEVPRgorYWRkCithZGQgLUYgL2Rldi9udWxsCithZGQgLW0gIiIKK2FkZCAtYyAiJGVtcHR5X2Jsb2IiCithZGQgLUMgIiRlbXB0eV9ibG9iIgorYXBwZW5kCithcHBlbmQgLUYgL2Rldi9udWxsCithcHBlbmQgLW0gIiIKK2FwcGVuZCAtYyAiJGVtcHR5X2Jsb2IiCithcHBlbmQgLUMgIiRlbXB0eV9ibG9iIgorZWRpdAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IG5vdGVzIGFyZSBkaXNwbGF5ZWQgYnkgZ2l0IGxvZycgJworCXRlc3RfY29tbWl0IDE3dGggJiYKKwlnaXQgbG9nIC0xID5leHBlY3QgJiYKKwljYXQgPj5leHBlY3QgPDwtRU9GICYmCisKKwkJTm90ZXM6CisJRU9GCisJZ2l0IG5vdGVzIGFkZCAtQyAiJGVtcHR5X2Jsb2IiIC0tYWxsb3ctZW1wdHkgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwMi1ub3Rlcy1pbmRleC1leHBlbnNpdmUuc2ggYi90L3QzMzAyLW5vdGVzLWluZGV4LWV4cGVuc2l2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MjE3YzVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzMwMi1ub3Rlcy1pbmRleC1leHBlbnNpdmUuc2gKQEAgLTAsMCArMSwxMzQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGNvbW1pdCBub3RlcyBpbmRleCAoZXhwZW5zaXZlISknCisKKy4gLi90ZXN0LWxpYi5zaAorCitjcmVhdGVfcmVwbyAoKSB7CisJbnVtYmVyX29mX2NvbW1pdHM9JDEKKwlucj0wCisJdGVzdCAtZCAuZ2l0IHx8IHsKKwlnaXQgaW5pdCAmJgorCSgKKwkJd2hpbGUgdGVzdCAkbnIgLWx0ICRudW1iZXJfb2ZfY29tbWl0cworCQlkbworCQkJbnI9JCgoJG5yKzEpKQorCQkJbWFyaz0kKCgkbnIrJG5yKSkKKwkJCW5vdGVtYXJrPSQoKCRtYXJrKzEpKQorCQkJdGVzdF90aWNrICYmCisJCQljYXQgPDwtSU5QVVRfRU5EICYmCisJCQljb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJCW1hcmsgOiRtYXJrCisJCQljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwkJCWRhdGEgPDxDT01NSVQKKwkJCWNvbW1pdCAjJG5yCisJCQlDT01NSVQKKworCQkJTSA2NDQgaW5saW5lIGZpbGUKKwkJCWRhdGEgPDxFT0YKKwkJCWZpbGUgaW4gY29tbWl0ICMkbnIKKwkJCUVPRgorCisJCQlibG9iCisJCQltYXJrIDokbm90ZW1hcmsKKwkJCWRhdGEgPDxFT0YKKwkJCW5vdGUgZm9yIGNvbW1pdCAjJG5yCisJCQlFT0YKKworCQkJSU5QVVRfRU5ECisJCQllY2hvICJOIDokbm90ZW1hcmsgOiRtYXJrIiA+Pm5vdGVfY29tbWl0CisJCWRvbmUgJiYKKwkJdGVzdF90aWNrICYmCisJCWNhdCA8PC1JTlBVVF9FTkQgJiYKKwkJY29tbWl0IHJlZnMvbm90ZXMvY29tbWl0cworCQljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwkJZGF0YSA8PENPTU1JVAorCQlub3RlcworCQlDT01NSVQKKworCQlJTlBVVF9FTkQKKworCQljYXQgbm90ZV9jb21taXQKKwkpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1xdWlldCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL2NvbW1pdHMKKwl9Cit9CisKK3Rlc3Rfbm90ZXMgKCkgeworCWNvdW50PSQxICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvY29tbWl0cyAmJgorCWdpdCBsb2cgfCBncmVwICJeICAgICIgPm91dHB1dCAmJgorCWk9JGNvdW50ICYmCisJd2hpbGUgdGVzdCAkaSAtZ3QgMAorCWRvCisJCWVjaG8gIiAgICBjb21taXQgIyRpIiAmJgorCQllY2hvICIgICAgbm90ZSBmb3IgY29tbWl0ICMkaSIgJiYKKwkJaT0kKCgkaS0xKSkKKwlkb25lID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0Cit9CisKK3dyaXRlX3NjcmlwdCB0aW1lX25vdGVzIDw8XEVPRgorCW1vZGU9JDEKKwlpPTEKKwl3aGlsZSB0ZXN0ICRpIC1sdCAkMgorCWRvCisJCWNhc2UgJDEgaW4KKwkJbm8tbm90ZXMpCisJCQlHSVRfTk9URVNfUkVGPW5vbi1leGlzdGluZworCQkJZXhwb3J0IEdJVF9OT1RFU19SRUYKKwkJCTs7CisJCW5vdGVzKQorCQkJdW5zZXQgR0lUX05PVEVTX1JFRgorCQkJOzsKKwkJZXNhYworCQlnaXQgbG9nCisJCWk9JCgoJGkrMSkpCisJZG9uZSA+L2Rldi9udWxsCitFT0YKKwordGltZV9ub3RlcyAoKSB7CisJZm9yIG1vZGUgaW4gbm8tbm90ZXMgbm90ZXMKKwlkbworCQllY2hvICRtb2RlCisJCS91c3IvYmluL3RpbWUgLi4vdGltZV9ub3RlcyAkbW9kZSAkMQorCWRvbmUKK30KKworZG9fdGVzdHMgKCkgeworCWNvdW50PSQxIHByPSR7Mi19CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwciAic2V0dXAgJGNvdW50IiAnCisJCW1rZGlyICIkY291bnQiICYmCisJCSgKKwkJCWNkICIkY291bnQiICYmCisJCQljcmVhdGVfcmVwbyAiJGNvdW50IgorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHIgJ25vdGVzIHdvcmsnICcKKwkJKAorCQkJY2QgIiRjb3VudCIgJiYKKwkJCXRlc3Rfbm90ZXMgIiRjb3VudCIKKwkJKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlVTUl9CSU5fVElNRSR7cHI6KywkcHJ9IiAnbm90ZXMgdGltaW5nIHdpdGggL3Vzci9iaW4vdGltZScgJworCQkoCisJCQljZCAiJGNvdW50IiAmJgorCQkJdGltZV9ub3RlcyAxMDAKKwkJKQorCScKK30KKworZG9fdGVzdHMgMTAKK2ZvciBjb3VudCBpbiAxMDAgMTAwMCAxMDAwMAorZG8KKwlkb190ZXN0cyAiJGNvdW50IiBFWFBFTlNJVkUKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMzAzLW5vdGVzLXN1YnRyZWVzLnNoIGIvdC90MzMwMy1ub3Rlcy1zdWJ0cmVlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MDRhZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzMwMy1ub3Rlcy1zdWJ0cmVlcy5zaApAQCAtMCwwICsxLDE5NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY29tbWl0IG5vdGVzIG9yZ2FuaXplZCBpbiBzdWJ0cmVlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK251bWJlcl9vZl9jb21taXRzPTEwMAorCitzdGFydF9ub3RlX2NvbW1pdCAoKSB7CisJdGVzdF90aWNrICYmCisJY2F0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy9jb21taXRzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK25vdGVzCitDT01NSVQKKworZnJvbSByZWZzL25vdGVzL2NvbW1pdHNeMAorZGVsZXRlYWxsCitJTlBVVF9FTkQKKworfQorCit2ZXJpZnlfbm90ZXMgKCkgeworCWdpdCBsb2cgfCBncmVwICJeICAgICIgPiBvdXRwdXQgJiYKKwlpPSRudW1iZXJfb2ZfY29tbWl0cyAmJgorCXdoaWxlIFsgJGkgLWd0IDAgXTsgZG8KKwkJZWNobyAiICAgIGNvbW1pdCAjJGkiICYmCisJCWVjaG8gIiAgICBub3RlIGZvciBjb21taXQgIyRpIiAmJgorCQlpPSQoKCRpLTEpKTsKKwlkb25lID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cDogY3JlYXRlICRudW1iZXJfb2ZfY29tbWl0cyBjb21taXRzIiAnCisKKwkoCisJCW5yPTAgJiYKKwkJd2hpbGUgWyAkbnIgLWx0ICRudW1iZXJfb2ZfY29tbWl0cyBdOyBkbworCQkJbnI9JCgoJG5yKzEpKSAmJgorCQkJdGVzdF90aWNrICYmCisJCQljYXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXQgIyRucgorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmaWxlCitkYXRhIDw8RU9GCitmaWxlIGluIGNvbW1pdCAjJG5yCitFT0YKKworSU5QVVRfRU5ECisKKwkJZG9uZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJY2F0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy9jb21taXRzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK25vIG5vdGVzCitDT01NSVQKKworZGVsZXRlYWxsCisKK0lOUFVUX0VORAorCisJKSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tcXVpZXQgJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9jb21taXRzCisnCisKK3Rlc3Rfc2hhMV9iYXNlZCAoKSB7CisJKAorCQlzdGFydF9ub3RlX2NvbW1pdCAmJgorCQlucj0kbnVtYmVyX29mX2NvbW1pdHMgJiYKKwkJZ2l0IHJldi1saXN0IHJlZnMvaGVhZHMvbWFzdGVyIHwKKwkJd2hpbGUgcmVhZCBzaGExOyBkbworCQkJbm90ZV9wYXRoPSQoZWNobyAiJHNoYTEiIHwgc2VkICIkMSIpCisJCQljYXQgPDxJTlBVVF9FTkQgJiYKK00gMTAwNjQ0IGlubGluZSAkbm90ZV9wYXRoCitkYXRhIDw8RU9GCitub3RlIGZvciBjb21taXQgIyRucgorRU9GCisKK0lOUFVUX0VORAorCisJCQlucj0kKCgkbnItMSkpCisJCWRvbmUKKwkpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1xdWlldAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG5vdGVzIGluIDIvMzgtZmFub3V0JyAndGVzdF9zaGExX2Jhc2VkICJzfF4uLnwmL3wiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vdGVzIGluIDIvMzgtZmFub3V0JyAndmVyaWZ5X25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG5vdGVzIGluIDIvMi8zNi1mYW5vdXQnICd0ZXN0X3NoYTFfYmFzZWQgInN8XlwoLi5cKVwoLi5cKXxcMS9cMi98IicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBub3RlcyBpbiAyLzIvMzYtZmFub3V0JyAndmVyaWZ5X25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG5vdGVzIGluIDIvMi8yLzM0LWZhbm91dCcgJ3Rlc3Rfc2hhMV9iYXNlZCAic3xeXCguLlwpXCguLlwpXCguLlwpfFwxL1wyL1wzL3wiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vdGVzIGluIDIvMi8yLzM0LWZhbm91dCcgJ3ZlcmlmeV9ub3RlcycKKwordGVzdF9zYW1lX25vdGVzICgpIHsKKwkoCisJCXN0YXJ0X25vdGVfY29tbWl0ICYmCisJCW5yPSRudW1iZXJfb2ZfY29tbWl0cyAmJgorCQlnaXQgcmV2LWxpc3QgcmVmcy9oZWFkcy9tYXN0ZXIgfAorCQl3aGlsZSByZWFkIHNoYTE7IGRvCisJCQlmaXJzdF9ub3RlX3BhdGg9JChlY2hvICIkc2hhMSIgfCBzZWQgIiQxIikKKwkJCXNlY29uZF9ub3RlX3BhdGg9JChlY2hvICIkc2hhMSIgfCBzZWQgIiQyIikKKwkJCWNhdCA8PElOUFVUX0VORCAmJgorTSAxMDA2NDQgaW5saW5lICRzZWNvbmRfbm90ZV9wYXRoCitkYXRhIDw8RU9GCitub3RlIGZvciBjb21taXQgIyRucgorRU9GCisKK00gMTAwNjQ0IGlubGluZSAkZmlyc3Rfbm90ZV9wYXRoCitkYXRhIDw8RU9GCitub3RlIGZvciBjb21taXQgIyRucgorRU9GCisKK0lOUFVUX0VORAorCisJCQlucj0kKCgkbnItMSkpCisJCWRvbmUKKwkpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1xdWlldAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNhbWUgbm90ZXMgaW4gbm8gZmFub3V0IGFuZCAyLzM4LWZhbm91dCcgJ3Rlc3Rfc2FtZV9ub3RlcyAic3xeLi58Ji98IiAiIicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzYW1lIG5vdGVzIGluIG5vIGZhbm91dCBhbmQgMi8zOC1mYW5vdXQnICd2ZXJpZnlfbm90ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc2FtZSBub3RlcyBpbiBubyBmYW5vdXQgYW5kIDIvMi8zNi1mYW5vdXQnICd0ZXN0X3NhbWVfbm90ZXMgInN8XlwoLi5cKVwoLi5cKXxcMS9cMi98IiAiIicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzYW1lIG5vdGVzIGluIG5vIGZhbm91dCBhbmQgMi8yLzM2LWZhbm91dCcgJ3ZlcmlmeV9ub3RlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzYW1lIG5vdGVzIGluIDIvMzgtZmFub3V0IGFuZCAyLzIvMzYtZmFub3V0JyAndGVzdF9zYW1lX25vdGVzICJzfF5cKC4uXClcKC4uXCl8XDEvXDIvfCIgInN8Xi4ufCYvfCInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgc2FtZSBub3RlcyBpbiAyLzM4LWZhbm91dCBhbmQgMi8yLzM2LWZhbm91dCcgJ3ZlcmlmeV9ub3RlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzYW1lIG5vdGVzIGluIDIvMi8yLzM0LWZhbm91dCBhbmQgMi8yLzM2LWZhbm91dCcgJ3Rlc3Rfc2FtZV9ub3RlcyAic3xeXCguLlwpXCguLlwpfFwxL1wyL3wiICJzfF5cKC4uXClcKC4uXClcKC4uXCl8XDEvXDIvXDMvfCInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgc2FtZSBub3RlcyBpbiAyLzIvMi8zNC1mYW5vdXQgYW5kIDIvMi8zNi1mYW5vdXQnICd2ZXJpZnlfbm90ZXMnCisKK3Rlc3RfY29uY2F0ZW5hdGVkX25vdGVzICgpIHsKKwkoCisJCXN0YXJ0X25vdGVfY29tbWl0ICYmCisJCW5yPSRudW1iZXJfb2ZfY29tbWl0cyAmJgorCQlnaXQgcmV2LWxpc3QgcmVmcy9oZWFkcy9tYXN0ZXIgfAorCQl3aGlsZSByZWFkIHNoYTE7IGRvCisJCQlmaXJzdF9ub3RlX3BhdGg9JChlY2hvICIkc2hhMSIgfCBzZWQgIiQxIikKKwkJCXNlY29uZF9ub3RlX3BhdGg9JChlY2hvICIkc2hhMSIgfCBzZWQgIiQyIikKKwkJCWNhdCA8PElOUFVUX0VORCAmJgorTSAxMDA2NDQgaW5saW5lICRzZWNvbmRfbm90ZV9wYXRoCitkYXRhIDw8RU9GCitzZWNvbmQgbm90ZSBmb3IgY29tbWl0ICMkbnIKK0VPRgorCitNIDEwMDY0NCBpbmxpbmUgJGZpcnN0X25vdGVfcGF0aAorZGF0YSA8PEVPRgorZmlyc3Qgbm90ZSBmb3IgY29tbWl0ICMkbnIKK0VPRgorCitJTlBVVF9FTkQKKworCQkJbnI9JCgoJG5yLTEpKQorCQlkb25lCisJKSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tcXVpZXQKK30KKwordmVyaWZ5X2NvbmNhdGVuYXRlZF9ub3RlcyAoKSB7CisJZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IG91dHB1dCAmJgorCWk9JG51bWJlcl9vZl9jb21taXRzICYmCisJd2hpbGUgWyAkaSAtZ3QgMCBdOyBkbworCQllY2hvICIgICAgY29tbWl0ICMkaSIgJiYKKwkJZWNobyAiICAgIGZpcnN0IG5vdGUgZm9yIGNvbW1pdCAjJGkiICYmCisJCWVjaG8gIiAgICAiICYmCisJCWVjaG8gIiAgICBzZWNvbmQgbm90ZSBmb3IgY29tbWl0ICMkaSIgJiYKKwkJaT0kKCgkaS0xKSk7CisJZG9uZSA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBub3RlcyBpbiBubyBmYW5vdXQgY29uY2F0ZW5hdGVkIHdpdGggMi8zOC1mYW5vdXQnICd0ZXN0X2NvbmNhdGVuYXRlZF9ub3RlcyAic3xeLi58Ji98IiAiIicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBub3RlcyBpbiBubyBmYW5vdXQgY29uY2F0ZW5hdGVkIHdpdGggMi8zOC1mYW5vdXQnICd2ZXJpZnlfY29uY2F0ZW5hdGVkX25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG5vdGVzIGluIG5vIGZhbm91dCBjb25jYXRlbmF0ZWQgd2l0aCAyLzIvMzYtZmFub3V0JyAndGVzdF9jb25jYXRlbmF0ZWRfbm90ZXMgInN8XlwoLi5cKVwoLi5cKXxcMS9cMi98IiAiIicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBub3RlcyBpbiBubyBmYW5vdXQgY29uY2F0ZW5hdGVkIHdpdGggMi8yLzM2LWZhbm91dCcgJ3ZlcmlmeV9jb25jYXRlbmF0ZWRfbm90ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgbm90ZXMgaW4gMi8zOC1mYW5vdXQgY29uY2F0ZW5hdGVkIHdpdGggMi8yLzM2LWZhbm91dCcgJ3Rlc3RfY29uY2F0ZW5hdGVkX25vdGVzICJzfF5cKC4uXClcKC4uXCl8XDEvXDIvfCIgInN8Xi4ufCYvfCInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm90ZXMgaW4gMi8zOC1mYW5vdXQgY29uY2F0ZW5hdGVkIHdpdGggMi8yLzM2LWZhbm91dCcgJ3ZlcmlmeV9jb25jYXRlbmF0ZWRfbm90ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgbm90ZXMgaW4gMi8yLzM2LWZhbm91dCBjb25jYXRlbmF0ZWQgd2l0aCAyLzIvMi8zNC1mYW5vdXQnICd0ZXN0X2NvbmNhdGVuYXRlZF9ub3RlcyAic3xeXCguLlwpXCguLlwpXCguLlwpfFwxL1wyL1wzL3wiICJzfF5cKC4uXClcKC4uXCl8XDEvXDIvfCInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm90ZXMgaW4gMi8yLzM2LWZhbm91dCBjb25jYXRlbmF0ZWQgd2l0aCAyLzIvMi8zNC1mYW5vdXQnICd2ZXJpZnlfY29uY2F0ZW5hdGVkX25vdGVzJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDQtbm90ZXMtbWl4ZWQuc2ggYi90L3QzMzA0LW5vdGVzLW1peGVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3MDllOGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzA0LW5vdGVzLW1peGVkLnNoCkBAIC0wLDAgKzEsMjA2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBub3RlcyB0cmVlcyB0aGF0IGFsc28gY29udGFpbiBub24tbm90ZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitudW1iZXJfb2ZfY29tbWl0cz0xMDAKKworc3RhcnRfbm90ZV9jb21taXQgKCkgeworCXRlc3RfdGljayAmJgorCWNhdCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvY29tbWl0cworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitub3RlcworQ09NTUlUCisKK2Zyb20gcmVmcy9ub3Rlcy9jb21taXRzXjAKK2RlbGV0ZWFsbAorSU5QVVRfRU5ECisKK30KKwordmVyaWZ5X25vdGVzICgpIHsKKwlnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gb3V0cHV0ICYmCisJaT0kbnVtYmVyX29mX2NvbW1pdHMgJiYKKwl3aGlsZSBbICRpIC1ndCAwIF07IGRvCisJCWVjaG8gIiAgICBjb21taXQgIyRpIiAmJgorCQllY2hvICIgICAgbm90ZSBmb3IgY29tbWl0ICMkaSIgJiYKKwkJaT0kKCgkaS0xKSk7CisJZG9uZSA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXA6IGNyZWF0ZSBhIGNvdXBsZSBvZiBjb21taXRzIiAnCisKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPDxJTlBVVF9FTkQgPmlucHV0ICYmCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29tbWl0ICMxCitDT01NSVQKKworTSA2NDQgaW5saW5lIGZpbGUKK2RhdGEgPDxFT0YKK2ZpbGUgaW4gY29tbWl0ICMxCitFT0YKKworSU5QVVRfRU5ECisKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPDxJTlBVVF9FTkQgPj5pbnB1dCAmJgorY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvbW1pdCAjMgorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmaWxlCitkYXRhIDw8RU9GCitmaWxlIGluIGNvbW1pdCAjMgorRU9GCisKK0lOUFVUX0VORAorCWdpdCBmYXN0LWltcG9ydCAtLXF1aWV0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjcmVhdGUgYSBub3RlcyB0cmVlIHdpdGggYm90aCBub3RlcyBhbmQgbm9uLW5vdGVzIiAnCisKKwljb21taXQxPSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3Rlcl4pICYmCisJY29tbWl0Mj0kKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdF90aWNrICYmCisJY2F0IDw8SU5QVVRfRU5EID5pbnB1dCAmJgorY29tbWl0IHJlZnMvbm90ZXMvY29tbWl0cworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitub3RlcyBjb21taXQgIzEKK0NPTU1JVAorCitOIGlubGluZSAkY29tbWl0MQorZGF0YSA8PEVPRgorbm90ZSBmb3IgY29tbWl0ICMxCitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDIKK2RhdGEgPDxFT0YKK25vdGUgZm9yIGNvbW1pdCAjMgorRU9GCisKK0lOUFVUX0VORAorCXRlc3RfdGljayAmJgorCWNhdCA8PElOUFVUX0VORCA+PmlucHV0ICYmCitjb21taXQgcmVmcy9ub3Rlcy9jb21taXRzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK25vdGVzIGNvbW1pdCAjMgorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmb29iYXIvbm9uLW5vdGUudHh0CitkYXRhIDw8RU9GCitBIG5vbi1ub3RlIGluIGEgbm90ZXMgdHJlZQorRU9GCisKK04gaW5saW5lICRjb21taXQyCitkYXRhIDw8RU9GCitlZGl0ZWQgbm90ZSBmb3IgY29tbWl0ICMyCitFT0YKKworSU5QVVRfRU5ECisJdGVzdF90aWNrICYmCisJY2F0IDw8SU5QVVRfRU5EID4+aW5wdXQgJiYKK2NvbW1pdCByZWZzL25vdGVzL2NvbW1pdHMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm90ZXMgY29tbWl0ICMzCitDT01NSVQKKworTiBpbmxpbmUgJGNvbW1pdDEKK2RhdGEgPDxFT0YKK2VkaXRlZCBub3RlIGZvciBjb21taXQgIzEKK0VPRgorCitNIDY0NCBpbmxpbmUgZGVhZGJlZWYKK2RhdGEgPDxFT0YKK25vbi1ub3RlIHdpdGggU0hBMS1saWtlIG5hbWUKK0VPRgorCitNIDY0NCBpbmxpbmUgZGUvYWRiZWVmCitkYXRhIDw8RU9GCithbm90aGVyIG5vbi1ub3RlIHdpdGggU0hBMS1saWtlIG5hbWUKK0VPRgorCitNIDY0NCBpbmxpbmUgZGUvYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWYKK2RhdGEgPDxFT0YKK1RoaXMgaXMgYWN0dWFsbHkgYSB2YWxpZCBub3RlLCBhbGJlaXQgdG8gYSBub24tZXhpc3Rpbmcgb2JqZWN0LgorSXQgaXMgbmVlZGVkIGluIG9yZGVyIHRvIHRyaWdnZXIgdGhlICJtaXNoYW5kbGluZyIgb2YgdGhlIGRlYWQvYmVlZiBub24tbm90ZS4KK0VPRgorCitNIDY0NCBpbmxpbmUgZGVhZC9iZWVmCitkYXRhIDw8RU9GCit5ZXQgYW5vdGhlciBub24tbm90ZSB3aXRoIFNIQTEtbGlrZSBuYW1lCitFT0YKKworSU5QVVRfRU5ECisJZ2l0IGZhc3QtaW1wb3J0IC0tcXVpZXQgPGlucHV0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvY29tbWl0cworJworCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBjb21taXQgIzIKKyAgICBlZGl0ZWQgbm90ZSBmb3IgY29tbWl0ICMyCisgICAgY29tbWl0ICMxCisgICAgZWRpdGVkIG5vdGUgZm9yIGNvbW1pdCAjMQorRVhQRUNUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ2ZXJpZnkgY29udGVudHMgb2Ygbm90ZXMiICcKKworCWdpdCBsb2cgfCBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0X25uMSA8PEVYUEVDVF9FTkQKK0Egbm9uLW5vdGUgaW4gYSBub3RlcyB0cmVlCitFWFBFQ1RfRU5ECitjYXQgPmV4cGVjdF9ubjIgPDxFWFBFQ1RfRU5ECitub24tbm90ZSB3aXRoIFNIQTEtbGlrZSBuYW1lCitFWFBFQ1RfRU5ECitjYXQgPmV4cGVjdF9ubjMgPDxFWFBFQ1RfRU5ECithbm90aGVyIG5vbi1ub3RlIHdpdGggU0hBMS1saWtlIG5hbWUKK0VYUEVDVF9FTkQKK2NhdCA+ZXhwZWN0X25uNCA8PEVYUEVDVF9FTkQKK3lldCBhbm90aGVyIG5vbi1ub3RlIHdpdGggU0hBMS1saWtlIG5hbWUKK0VYUEVDVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidmVyaWZ5IGNvbnRlbnRzIG9mIG5vbi1ub3RlcyIgJworCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvY29tbWl0czpmb29iYXIvbm9uLW5vdGUudHh0ID4gYWN0dWFsX25uMSAmJgorCXRlc3RfY21wIGV4cGVjdF9ubjEgYWN0dWFsX25uMSAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2NvbW1pdHM6ZGVhZGJlZWYgPiBhY3R1YWxfbm4yICYmCisJdGVzdF9jbXAgZXhwZWN0X25uMiBhY3R1YWxfbm4yICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvY29tbWl0czpkZS9hZGJlZWYgPiBhY3R1YWxfbm4zICYmCisJdGVzdF9jbXAgZXhwZWN0X25uMyBhY3R1YWxfbm4zICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvY29tbWl0czpkZWFkL2JlZWYgPiBhY3R1YWxfbm40ICYmCisJdGVzdF9jbXAgZXhwZWN0X25uNCBhY3R1YWxfbm40CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdC1ub3RlcyBwcmVzZXJ2ZXMgbm9uLW5vdGVzIiAnCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJmb28gYmFyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ2ZXJpZnkgY29udGVudHMgb2Ygbm9uLW5vdGVzIGFmdGVyIGdpdC1ub3RlcyIgJworCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvY29tbWl0czpmb29iYXIvbm9uLW5vdGUudHh0ID4gYWN0dWFsX25uMSAmJgorCXRlc3RfY21wIGV4cGVjdF9ubjEgYWN0dWFsX25uMSAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2NvbW1pdHM6ZGVhZGJlZWYgPiBhY3R1YWxfbm4yICYmCisJdGVzdF9jbXAgZXhwZWN0X25uMiBhY3R1YWxfbm4yICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvY29tbWl0czpkZS9hZGJlZWYgPiBhY3R1YWxfbm4zICYmCisJdGVzdF9jbXAgZXhwZWN0X25uMyBhY3R1YWxfbm4zICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvY29tbWl0czpkZWFkL2JlZWYgPiBhY3R1YWxfbm40ICYmCisJdGVzdF9jbXAgZXhwZWN0X25uNCBhY3R1YWxfbm40CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwNS1ub3Rlcy1mYW5vdXQuc2ggYi90L3QzMzA1LW5vdGVzLWZhbm91dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjQ3NTNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzMwNS1ub3Rlcy1mYW5vdXQuc2gKQEAgLTAsMCArMSwxMzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoYXQgYWRkaW5nL3JlbW92aW5nIG1hbnkgbm90ZXMgdHJpZ2dlcnMgYXV0b21hdGljIGZhbm91dCByZXN0cnVjdHVyaW5nJworCisuIC4vdGVzdC1saWIuc2gKKworcGF0aF9oYXNfZmFub3V0KCkgeworCXBhdGg9JDEgJiYKKwlmYW5vdXQ9JDIgJiYKKwlhZnRlcl9sYXN0X3NsYXNoPSQoKDQwIC0gJGZhbm91dCAqIDIpKSAmJgorCWVjaG8gJHBhdGggfCBncmVwIC1xICJeXChbMC05YS1mXVx7Mlx9L1wpXHskZmFub3V0XH1bMC05YS1mXVx7JGFmdGVyX2xhc3Rfc2xhc2hcfSQiCit9CisKK3RvdWNoZWRfb25lX25vdGVfd2l0aF9mYW5vdXQoKSB7CisJbm90ZXNfY29tbWl0PSQxICYmCisJbW9kaWZpY2F0aW9uPSQyICYmICAjICdBJyBmb3IgYWRkaXRpb24sICdEJyBmb3IgZGVsZXRpb24KKwlmYW5vdXQ9JDMgJiYKKwlkaWZmPSQoZ2l0IGRpZmYtdHJlZSAtLW5vLWNvbW1pdC1pZCAtLW5hbWUtc3RhdHVzIC0tcm9vdCAtciAkbm90ZXNfY29tbWl0KSAmJgorCXBhdGg9JChlY2hvICRkaWZmIHwgc2VkIC1lICJzL14kbW9kaWZpY2F0aW9uW1x0IF0vLyIpICYmCisJcGF0aF9oYXNfZmFub3V0ICIkcGF0aCIgJGZhbm91dDsKK30KKworYWxsX25vdGVzX2hhdmVfZmFub3V0KCkgeworCW5vdGVzX2NvbW1pdD0kMSAmJgorCWZhbm91dD0kMiAmJgorCWdpdCBscy10cmVlIC1yIC0tbmFtZS1vbmx5ICRub3Rlc19jb21taXQgMj4vZGV2L251bGwgfAorCXdoaWxlIHJlYWQgcGF0aAorCWRvCisJCXBhdGhfaGFzX2Zhbm91dCAkcGF0aCAkZmFub3V0IHx8IHJldHVybiAxCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d2VhayB0ZXN0IGVudmlyb25tZW50JyAnCisJZ2l0IGNoZWNrb3V0IC1iIG5vbmRldGVybWluaXNtICYmCisJdGVzdF9jb21taXQgQSAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiB3aXRoX25vdGVzOworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBtYW55IG5vdGVzIHdpdGggZ2l0LW5vdGVzJyAnCisJbnVtX25vdGVzPTMwMCAmJgorCWk9MCAmJgorCXdoaWxlIHRlc3QgJGkgLWx0ICRudW1fbm90ZXMKKwlkbworCQlpPSQoKCRpICsgMSkpICYmCisJCXRlc3RfdGljayAmJgorCQllY2hvICJmaWxlIGZvciBjb21taXQgIyRpIiA+IGZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLXEgLW0gImNvbW1pdCAjJGkiICYmCisJCWdpdCBub3RlcyBhZGQgLW0gIm5vdGUgIyRpIiB8fCByZXR1cm4gMQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFueSBub3RlcyBjcmVhdGVkIGNvcnJlY3RseSB3aXRoIGdpdC1ub3RlcycgJworCWdpdCBsb2cgfCBncmVwICJeICAgICIgPiBvdXRwdXQgJiYKKwlpPSRudW1fbm90ZXMgJiYKKwl3aGlsZSB0ZXN0ICRpIC1ndCAwCisJZG8KKwkJZWNobyAiICAgIGNvbW1pdCAjJGkiICYmCisJCWVjaG8gIiAgICBub3RlICMkaSIgJiYKKwkJaT0kKCgkaSAtIDEpKTsKKwlkb25lID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFibGUgZmFub3V0IDAgaXMgZm9sbG93ZWQgYnkgc3RhYmxlIGZhbm91dCAxJyAnCisJaT0kbnVtX25vdGVzICYmCisJZmFub3V0PTAgJiYKKwl3aGlsZSB0ZXN0ICRpIC1ndCAwCisJZG8KKwkJaT0kKCgkaSAtIDEpKSAmJgorCQlpZiB0b3VjaGVkX29uZV9ub3RlX3dpdGhfZmFub3V0IHJlZnMvbm90ZXMvY29tbWl0c34kaSBBICRmYW5vdXQKKwkJdGhlbgorCQkJY29udGludWUKKwkJZWxpZiB0ZXN0ICRmYW5vdXQgLWVxIDAKKwkJdGhlbgorCQkJZmFub3V0PTEgJiYKKwkJCWlmIGFsbF9ub3Rlc19oYXZlX2Zhbm91dCByZWZzL25vdGVzL2NvbW1pdHN+JGkgJGZhbm91dAorCQkJdGhlbgorCQkJCWVjaG8gIkZhbm91dCAwIC0+IDEgYXQgcmVmcy9ub3Rlcy9jb21taXRzfiRpIiAmJgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQlmaSAmJgorCQllY2hvICJGYWlsZWQgZmFub3V0PSRmYW5vdXQgY2hlY2sgYXQgcmVmcy9ub3Rlcy9jb21taXRzfiRpIiAmJgorCQlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSByZWZzL25vdGVzL2NvbW1pdHN+JGkgJiYKKwkJcmV0dXJuIDEKKwlkb25lICYmCisJYWxsX25vdGVzX2hhdmVfZmFub3V0IHJlZnMvbm90ZXMvY29tbWl0cyAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0aW5nIG1vc3Qgbm90ZXMgd2l0aCBnaXQtbm90ZXMnICcKKwlyZW1vdmVfbm90ZXM9Mjg1ICYmCisJaT0wICYmCisJZ2l0IHJldi1saXN0IEhFQUQgfAorCXdoaWxlIHRlc3QgJGkgLWx0ICRyZW1vdmVfbm90ZXMgJiYgcmVhZCBzaGExCisJZG8KKwkJaT0kKCgkaSArIDEpKSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IG5vdGVzIHJlbW92ZSAiJHNoYTEiIDI+L2Rldi9udWxsIHx8IHJldHVybiAxCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3N0IG5vdGVzIGRlbGV0ZWQgY29ycmVjdGx5IHdpdGggZ2l0LW5vdGVzJyAnCisJZ2l0IGxvZyBIRUFEfiRyZW1vdmVfbm90ZXMgfCBncmVwICJeICAgICIgPiBvdXRwdXQgJiYKKwlpPSQoKCRudW1fbm90ZXMgLSAkcmVtb3ZlX25vdGVzKSkgJiYKKwl3aGlsZSB0ZXN0ICRpIC1ndCAwCisJZG8KKwkJZWNobyAiICAgIGNvbW1pdCAjJGkiICYmCisJCWVjaG8gIiAgICBub3RlICMkaSIgJiYKKwkJaT0kKCgkaSAtIDEpKTsKKwlkb25lID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFibGUgZmFub3V0IDEgaXMgZm9sbG93ZWQgYnkgc3RhYmxlIGZhbm91dCAwJyAnCisJaT0kcmVtb3ZlX25vdGVzICYmCisJZmFub3V0PTEgJiYKKwl3aGlsZSB0ZXN0ICRpIC1ndCAwCisJZG8KKwkJaT0kKCgkaSAtIDEpKSAmJgorCQlpZiB0b3VjaGVkX29uZV9ub3RlX3dpdGhfZmFub3V0IHJlZnMvbm90ZXMvY29tbWl0c34kaSBEICRmYW5vdXQKKwkJdGhlbgorCQkJY29udGludWUKKwkJZWxpZiB0ZXN0ICRmYW5vdXQgLWVxIDEKKwkJdGhlbgorCQkJZmFub3V0PTAgJiYKKwkJCWlmIGFsbF9ub3Rlc19oYXZlX2Zhbm91dCByZWZzL25vdGVzL2NvbW1pdHN+JGkgJGZhbm91dAorCQkJdGhlbgorCQkJCWVjaG8gIkZhbm91dCAxIC0+IDAgYXQgcmVmcy9ub3Rlcy9jb21taXRzfiRpIiAmJgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQlmaSAmJgorCQllY2hvICJGYWlsZWQgZmFub3V0PSRmYW5vdXQgY2hlY2sgYXQgcmVmcy9ub3Rlcy9jb21taXRzfiRpIiAmJgorCQlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSByZWZzL25vdGVzL2NvbW1pdHN+JGkgJiYKKwkJcmV0dXJuIDEKKwlkb25lICYmCisJYWxsX25vdGVzX2hhdmVfZmFub3V0IHJlZnMvbm90ZXMvY29tbWl0cyAwCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwNi1ub3Rlcy1wcnVuZS5zaCBiL3QvdDMzMDYtbm90ZXMtcHJ1bmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGY0MTAyZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDYtbm90ZXMtcHJ1bmUuc2gKQEAgLTAsMCArMSwxMzggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdCBub3RlcyBwcnVuZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBjcmVhdGUgYSBmZXcgY29tbWl0cyB3aXRoIG5vdGVzJyAnCisKKwk6ID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAxc3QgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlICMxIiAmJgorCWZpcnN0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCTogPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIDJuZCAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGUgIzIiICYmCisJc2Vjb25kPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCTogPiBmaWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIDNyZCAmJgorCXRoaXJkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCUNPTU1JVF9GSUxFPSQoZWNobyAkdGhpcmQgfCBzZWQgInMhXi4uIS5naXQvb2JqZWN0cy8mLyEiKSAmJgorCXRlc3QgLWYgJENPTU1JVF9GSUxFICYmCisJdGVzdC10b29sIGNobXRpbWUgPSswICRDT01NSVRfRklMRSAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGUgIzMiCisnCisKK2NhdCA+IGV4cGVjdCA8PEVORF9PRl9MT0cKK2NvbW1pdCAkdGhpcmQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjE1OjEzIDIwMDUgLTA3MDAKKworICAgIDNyZAorCitOb3RlczoKKyAgICBOb3RlICMzCisKK2NvbW1pdCAkc2Vjb25kCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToxNDoxMyAyMDA1IC0wNzAwCisKKyAgICAybmQKKworTm90ZXM6CisgICAgTm90ZSAjMgorCitjb21taXQgJGZpcnN0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwCisKKyAgICAxc3QKKworTm90ZXM6CisgICAgTm90ZSAjMQorRU5EX09GX0xPRworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgY29tbWl0cyBhbmQgbm90ZXMnICcKKworCWdpdCBsb2cgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBzb21lIGNvbW1pdHMnICcKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRH4xICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9bm93IEhFQUQgJiYKKwlnaXQgZ2MgLS1wcnVuZT1ub3cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgY29tbWl0cyBhcmUgZ29uZScgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC1wICR0aGlyZCAmJgorCWdpdCBjYXQtZmlsZSAtcCAkc2Vjb25kICYmCisJZ2l0IGNhdC1maWxlIC1wICRmaXJzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCBub3RlcyBhcmUgc3RpbGwgcHJlc2VudCcgJworCisJZ2l0IG5vdGVzIHNob3cgJHRoaXJkICYmCisJZ2l0IG5vdGVzIHNob3cgJHNlY29uZCAmJgorCWdpdCBub3RlcyBzaG93ICRmaXJzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSAtbiBkb2VzIG5vdCByZW1vdmUgbm90ZXMnICcKKworCWdpdCBub3RlcyBsaXN0ID4gZXhwZWN0ICYmCisJZ2l0IG5vdGVzIHBydW5lIC1uICYmCisJZ2l0IG5vdGVzIGxpc3QgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLW4gbGlzdHMgcHJ1bmFibGUgbm90ZXMnICcKKworCWVjaG8gJHRoaXJkID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgcHJ1bmUgLW4gPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgbm90ZXMnICcKKworCWdpdCBub3RlcyBwcnVuZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCBub3RlcyBhcmUgZ29uZScgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgJHRoaXJkICYmCisJZ2l0IG5vdGVzIHNob3cgJHNlY29uZCAmJgorCWdpdCBub3RlcyBzaG93ICRmaXJzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgc29tZSBjb21taXRzJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MSAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPW5vdyBIRUFEICYmCisJZ2l0IGdjIC0tcHJ1bmU9bm93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIC12IG5vdGVzJyAnCisKKwllY2hvICRzZWNvbmQgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBwcnVuZSAtdiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgbm90ZXMgYXJlIGdvbmUnICcKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93ICR0aGlyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93ICRzZWNvbmQgJiYKKwlnaXQgbm90ZXMgc2hvdyAkZmlyc3QKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMzA3LW5vdGVzLW1hbi5zaCBiL3QvdDMzMDctbm90ZXMtbWFuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFhYTM2NmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzA3LW5vdGVzLW1hbi5zaApAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nRXhhbXBsZXMgZnJvbSB0aGUgZ2l0LW5vdGVzIG1hbiBwYWdlCisKK01ha2Ugc3VyZSB0aGUgbWFudWFsIGlzIG5vdCBmdWxsIG9mIGxpZXMuJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBBICYmCisJdGVzdF9jb21taXQgQiAmJgorCXRlc3RfY29tbWl0IEMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhhbXBsZSAxOiBub3RlcyB0byBhZGQgYW4gQWNrZWQtYnkgbGluZScgJworCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwkgICAgQgorCisJTm90ZXM6CisJICAgIEFja2VkLWJ5OiBBIEMgS2VyIDxhY2tlckBleGFtcGxlLmNvbT4KKwlFT0YKKwlnaXQgbm90ZXMgYWRkIC1tICJBY2tlZC1ieTogQSBDIEtlciA8YWNrZXJAZXhhbXBsZS5jb20+IiBCICYmCisJZ2l0IHNob3cgLXMgQl57Y29tbWl0fSA+bG9nICYmCisJdGFpbCAtbiA0IGxvZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGFtcGxlIDI6IGJpbmFyeSBub3RlcycgJworCWNwICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTEucG5nIC4gJiYKKwlnaXQgY2hlY2tvdXQgQiAmJgorCWJsb2I9JChnaXQgaGFzaC1vYmplY3QgLXcgdGVzdC1iaW5hcnktMS5wbmcpICYmCisJZ2l0IG5vdGVzIC0tcmVmPWxvZ28gYWRkIC1DICIkYmxvYiIgJiYKKwlnaXQgbm90ZXMgLS1yZWY9bG9nbyBjb3B5IEIgQyAmJgorCWdpdCBub3RlcyAtLXJlZj1sb2dvIHNob3cgQyA+YWN0dWFsICYmCisJdGVzdF9jbXAgdGVzdC1iaW5hcnktMS5wbmcgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwOC1ub3Rlcy1tZXJnZS5zaCBiL3QvdDMzMDgtbm90ZXMtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzkwZTI5MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDgtbm90ZXMtbWVyZ2Uuc2gKQEAgLTAsMCArMSwzOTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgSm9oYW4gSGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IG1lcmdpbmcgb2Ygbm90ZXMgdHJlZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCAxc3QgJiYKKwl0ZXN0X2NvbW1pdCAybmQgJiYKKwl0ZXN0X2NvbW1pdCAzcmQgJiYKKwl0ZXN0X2NvbW1pdCA0dGggJiYKKwl0ZXN0X2NvbW1pdCA1dGggJiYKKwkjIENyZWF0ZSBub3RlcyBvbiA0IGZpcnN0IGNvbW1pdHMKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiTm90ZXMgb24gMXN0IGNvbW1pdCIgMXN0ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiTm90ZXMgb24gMm5kIGNvbW1pdCIgMm5kICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiTm90ZXMgb24gM3JkIGNvbW1pdCIgM3JkICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiTm90ZXMgb24gNHRoIGNvbW1pdCIgNHRoICYmCisJIyBDb3B5IG5vdGVzIHRvIHJlbW90ZS1ub3RlcworCWdpdCBmZXRjaCAuIHJlZnMvbm90ZXMvKjpyZWZzL3JlbW90ZS1ub3Rlcy9vcmlnaW4vKiAmJgorCisJdGVzdF9vaWRfaW5pdCAmJgorCXRlc3Rfb2lkX2NhY2hlIDw8LUVPRgorCWhhc2g0YSBzaGExOjVlOTNkMjQwODRkMzJlMWNiNjFmNzA3MDUwNWI5ZDI1MzBjY2E5ODcKKwloYXNoM2Egc2hhMTo4MzY2NzMxZWVlZTUzNzg3ZDJiZGY4ZmMxZWZmN2Q5NDc1N2U4ZGEwCisJaGFzaDJhIHNoYTE6ZWVkZTg5MDY0Y2Q0MjQ0MTU5MGQ2YWZlYzZjMzdiMzIxYWRhMzM4OQorCWhhc2gxYSBzaGExOmRhYTU1ZmZhZDZjYjk5YmY2NDIyNjUzMjE0N2ZmY2FmNWNlOGJkZDEKKwloYXNoNWIgc2hhMTowZjJlZmJkMDAyNjJmMmZkNDFkZmFlMzNkZjg3NjU2MThlZWFjZDk5CisJaGFzaDRiIHNoYTE6ZGVjMjUwMmRhYzNlYTE2MTU0M2Y3MTkzMDA0NGRlZmY5M2ZhOTQ1YworCWhhc2gzYiBzaGExOjQwNjljZGIzOTlmZDQ1NDYzZWM2ZWVmOGUwNTFhMTZhMDM1OTJkOTEKKwloYXNoMmMgc2hhMTpkMDAwZDMwZTZkZGNmY2UzYTgxMjJjNDAzMjI2YTJjZTJmZDA0ZDlkCisJaGFzaDFjIHNoYTE6NDNhZGQ2YmQwYzhjMGJjODcxYWM3OTkxZTBmNTU3M2NmYmEyNzgwNAorCWhhc2g0ZCBzaGExOjFmMjU3YTNhOTAzMjg1NTdjNDUyZjA4MTdkNmNjNTBjODlkMzE1ZDQKKwloYXNoM2Qgc2hhMTowNWE0OTI3OTUxYmNlZjM0N2Y1MTQ4NjU3NWI4NzhiMmI2MDEzN2YyCisKKwloYXNoNGEgc2hhMjU2OmVlZjg3NmJlMWQzMmFjMmUyZTQyMjQwZTA0MjkzMjVjZWMxMTZlNTVlODhjYjI5Njk4OTlmYWM2OTVhYTc2MmYKKwloYXNoM2Egc2hhMjU2OmNmN2NkMWJjMDkxZDdiYTQxNjZhODZkZjg2NDExMGU0MjA4N2NkODkzYTVhZTk2YmM1MGQ2MzdlMDI5MDkzOWQKKwloYXNoMmEgc2hhMjU2OjIxZGRkZTdlYmNlMmMyODUyMTM4OThjYjA0ZGVjYTBmZDMyMDk2MTBjZjdhYWY4MjIyZTRlMmY0NTI2MmZhZTIKKwloYXNoMWEgc2hhMjU2OmY5ZmUwZWRhMTZjNjAyNzczMmVkOWQ0Mjk1Njg5YTAzYWJkMTZmODkzYmU2OWIzZGNiZjQwMzdkZGIxOTE5MjEKKwloYXNoNWIgc2hhMjU2OjIwMDQ2ZjIyNDQ1Nzc3OTdhOWUzZDNmNzkwZWE5ZWNhNGQ4YTZiYWZiMmE1NTcwYmNiMGUwM2FhMDJjZTEwMGIKKwloYXNoNGIgc2hhMjU2OmY5MDU2M2QxMzRjNjFhOTViYjg4YWZiZDQ1ZDQ4Y2NjOWU5MTljNjJhYTZmYmZjZDQ4MzMwMmIzZTRkOGRiY2IKKwloYXNoM2Igc2hhMjU2Ojk4OGYyYWNhOWYyZDg3ZTkzZTZhNzMxOTdjMmJiOTk1NjBjYzQ0YTJmOTJkMTg2NTM5NjhmOTU2ZjAxMjIxZTAKKwloYXNoMmMgc2hhMjU2Ojg0MTUzYjc3N2I0ZDQyODI3YTc1NmM2NTc4ZGNkYjU5ZDhhZTVkMTM2MGI4NzRmYjM3YzQzMDE1MGM4MjVjMjYKKwloYXNoMWMgc2hhMjU2OjliZWIyYmM0ZWVmNzJlNGM0MDg3YmUxNjhhMjA1NzNlMzRkOTkzZDlhYjE4ODMwNTVmMjNlMzIyYWZhMDY1NjcKKwloYXNoNGQgc2hhMjU2OjMyZGUzOWRjMDZlNjc5YTdhYmIyZDRhNTVlZGU3NzA5YjMxMjQzNDBhNGE5MGFhMzA1OTcxYjFjNzJhYzMxOWQKKwloYXNoM2Qgc2hhMjU2OmZhNzNiMjBlNDFjYmI3NTQxYzRjODFkMTUzNTAxNjEzMWRiZmJlYjA1YmY2YTcxZjYxMTVlOWNhZDMxYzdhZjUKKwlFT0YKKycKKworY29tbWl0X3NoYTE9JChnaXQgcmV2LXBhcnNlIDFzdF57Y29tbWl0fSkKK2NvbW1pdF9zaGEyPSQoZ2l0IHJldi1wYXJzZSAybmRee2NvbW1pdH0pCitjb21taXRfc2hhMz0kKGdpdCByZXYtcGFyc2UgM3JkXntjb21taXR9KQorY29tbWl0X3NoYTQ9JChnaXQgcmV2LXBhcnNlIDR0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGE1PSQoZ2l0IHJldi1wYXJzZSA1dGhee2NvbW1pdH0pCisKK3ZlcmlmeV9ub3RlcyAoKSB7CisJbm90ZXNfcmVmPSIkMSIKKwlnaXQgLWMgY29yZS5ub3Rlc1JlZj0icmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiBub3RlcyB8CisJCXNvcnQgPiJvdXRwdXRfbm90ZXNfJG5vdGVzX3JlZiIgJiYKKwl0ZXN0X2NtcCAiZXhwZWN0X25vdGVzXyRub3Rlc19yZWYiICJvdXRwdXRfbm90ZXNfJG5vdGVzX3JlZiIgJiYKKwlnaXQgLWMgY29yZS5ub3Rlc1JlZj0icmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiBsb2cgLS1mb3JtYXQ9IiVIICVzJW4lTiIgXAorCQk+Im91dHB1dF9sb2dfJG5vdGVzX3JlZiIgJiYKKwl0ZXN0X2NtcCAiZXhwZWN0X2xvZ18kbm90ZXNfcmVmIiAib3V0cHV0X2xvZ18kbm90ZXNfcmVmIgorfQorCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeAorJCh0ZXN0X29pZCBoYXNoNGEpICRjb21taXRfc2hhNAorJCh0ZXN0X29pZCBoYXNoM2EpICRjb21taXRfc2hhMworJCh0ZXN0X29pZCBoYXNoMmEpICRjb21taXRfc2hhMgorJCh0ZXN0X29pZCBoYXNoMWEpICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ194IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKK05vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAorTm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCitOb3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK05vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBpbml0aWFsIG5vdGVzICh4KScgJworCXZlcmlmeV9ub3RlcyB4CisnCisKK2NwIGV4cGVjdF9ub3Rlc194IGV4cGVjdF9ub3Rlc195CitjcCBleHBlY3Rfbm90ZXNfeCBleHBlY3Rfbm90ZXNfdgorY3AgZXhwZWN0X2xvZ194IGV4cGVjdF9sb2dfeQorY3AgZXhwZWN0X2xvZ194IGV4cGVjdF9sb2dfdgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIHRvIG1lcmdlIGVtcHR5IG5vdGVzIHJlZiBpbnRvIGVtcHR5IG5vdGVzIHJlZiAoeiA9PiB5KScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyAiY29yZS5ub3Rlc1JlZj1yZWZzL25vdGVzL3kiIG5vdGVzIG1lcmdlIHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCB0byBtZXJnZSBpbnRvIHZhcmlvdXMgbm9uLW5vdGVzIHJlZnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgImNvcmUubm90ZXNSZWY9cmVmcy9ub3RlcyIgbm90ZXMgbWVyZ2UgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyAiY29yZS5ub3Rlc1JlZj1yZWZzL25vdGVzLyIgbm90ZXMgbWVyZ2UgeCAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvZGlyL2ZvbyBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jICJjb3JlLm5vdGVzUmVmPXJlZnMvbm90ZXMvZGlyIiBub3RlcyBtZXJnZSB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jICJjb3JlLm5vdGVzUmVmPXJlZnMvbm90ZXMvZGlyLyIgbm90ZXMgbWVyZ2UgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyAiY29yZS5ub3Rlc1JlZj1yZWZzL2hlYWRzL21hc3RlciIgbm90ZXMgbWVyZ2UgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyAiY29yZS5ub3Rlc1JlZj1yZWZzL25vdGVzL3k6IiBub3RlcyBtZXJnZSB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jICJjb3JlLm5vdGVzUmVmPXJlZnMvbm90ZXMveTpmb28iIG5vdGVzIG1lcmdlIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgImNvcmUubm90ZXNSZWY9cmVmcy9ub3Rlcy9mb29ee2JhciIgbm90ZXMgbWVyZ2UgeAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBub24tbm90ZXMgcmVmIGludG8gZW1wdHkgbm90ZXMgcmVmIChyZW1vdGUtbm90ZXMvb3JpZ2luL3ggPT4gdiknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy92ICYmCisJZ2l0IG5vdGVzIG1lcmdlIHJlZnMvcmVtb3RlLW5vdGVzL29yaWdpbi94ICYmCisJdmVyaWZ5X25vdGVzIHYgJiYKKwkjIHJlZnMvcmVtb3RlLW5vdGVzL29yaWdpbi94IGFuZCB2IHNob3VsZCBwb2ludCB0byB0aGUgc2FtZSBub3RlcyBjb21taXQKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGUtbm90ZXMvb3JpZ2luL3gpIiA9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy92KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugbm90ZXMgaW50byBlbXB0eSBub3RlcyByZWYgKHggPT4geSknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy95ICYmCisJZ2l0IG5vdGVzIG1lcmdlIHggJiYKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCSMgeCBhbmQgeSBzaG91bGQgcG9pbnQgdG8gdGhlIHNhbWUgbm90ZXMgY29tbWl0CisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveCkiID0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBlbXB0eSBub3RlcyByZWYgKHogPT4geSknICcKKwlnaXQgbm90ZXMgbWVyZ2UgeiAmJgorCSMgeSBzaG91bGQgbm90IGNoYW5nZSAoc3RpbGwgPT0geCkKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy94KSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBub3RlcyBvbiBvdGhlciBub3RlcyByZWYgKHkpJyAnCisJIyBOb3QgdG91Y2hpbmcgbm90ZXMgdG8gMXN0IGNvbW1pdAorCWdpdCBub3RlcyByZW1vdmUgMm5kICYmCisJZ2l0IG5vdGVzIGFwcGVuZCAtbSAiTW9yZSBub3RlcyBvbiAzcmQgY29tbWl0IiAzcmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJOZXcgbm90ZXMgb24gNHRoIGNvbW1pdCIgNHRoICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiTm90ZXMgb24gNXRoIGNvbW1pdCIgNXRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHByZXZpb3VzIG5vdGVzIGNvbW1pdCAoeV4gPT4geSkgPT4gTm8tb3AnICcKKwlwcmVfc3RhdGU9IiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kpIiAmJgorCWdpdCBub3RlcyBtZXJnZSB5XiAmJgorCSMgeSBzaG91bGQgbm90IG1vdmUKKwl0ZXN0ICIkcHJlX3N0YXRlIiA9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95KSIKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3kKKyQodGVzdF9vaWQgaGFzaDViKSAkY29tbWl0X3NoYTUKKyQodGVzdF9vaWQgaGFzaDRiKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDNiKSAkY29tbWl0X3NoYTMKKyQodGVzdF9vaWQgaGFzaDFhKSAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeSA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorTm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCitOZXcgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCitOb3RlcyBvbiAzcmQgY29tbWl0CisKK01vcmUgbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCisKKyRjb21taXRfc2hhMSAxc3QKK05vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBjaGFuZ2VkIG5vdGVzIG9uIG90aGVyIG5vdGVzIHJlZiAoeSknICcKKwl2ZXJpZnlfbm90ZXMgeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdW5jaGFuZ2VkIG5vdGVzIG9uIG9yaWdpbmFsIG5vdGVzIHJlZiAoeCknICcKKwl2ZXJpZnlfbm90ZXMgeAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvcmlnaW5hbCBub3RlcyAoeCkgaW50byBjaGFuZ2VkIG5vdGVzICh5KSA9PiBOby1vcCcgJworCWdpdCBub3RlcyBtZXJnZSAtdnZ2IHggJiYKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyB4CisnCisKK2NwIGV4cGVjdF9ub3Rlc195IGV4cGVjdF9ub3Rlc194CitjcCBleHBlY3RfbG9nX3kgZXhwZWN0X2xvZ194CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGNoYW5nZWQgKHkpIGludG8gb3JpZ2luYWwgKHgpID0+IEZhc3QtZm9yd2FyZCcgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ggJiYKKwlnaXQgbm90ZXMgbWVyZ2UgeSAmJgorCXZlcmlmeV9ub3RlcyB4ICYmCisJdmVyaWZ5X25vdGVzIHkgJiYKKwkjIHggYW5kIHkgc2hvdWxkIHBvaW50IHRvIHNhbWUgdGhlIG5vdGVzIGNvbW1pdAorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3gpIiA9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZW1wdHkgbm90ZXMgcmVmICh6ID0+IHkpJyAnCisJIyBQcmVwYXJlIGVtcHR5IChidXQgdmFsaWQpIG5vdGVzIHJlZiAoeikKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy96ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiZm9vIiAmJgorCWdpdCBub3RlcyByZW1vdmUgJiYKKwlnaXQgbm90ZXMgPm91dHB1dF9ub3Rlc196ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dF9ub3Rlc196ICYmCisJIyBEbyB0aGUgbWVyZ2UgKHogPT4geSkKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy95ICYmCisJZ2l0IG5vdGVzIG1lcmdlIHogJiYKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCSMgeSBzaG91bGQgbm8gbG9uZ2VyIHBvaW50IHRvIHRoZSBzYW1lIG5vdGVzIGNvbW1pdCBhcyB4CisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveCkiICE9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95KSIKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3kKKyQodGVzdF9vaWQgaGFzaDViKSAkY29tbWl0X3NoYTUKKyQodGVzdF9vaWQgaGFzaDRiKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDNiKSAkY29tbWl0X3NoYTMKKyQodGVzdF9vaWQgaGFzaDJjKSAkY29tbWl0X3NoYTIKKyQodGVzdF9vaWQgaGFzaDFjKSAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeSA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorTm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCitOZXcgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCitOb3RlcyBvbiAzcmQgY29tbWl0CisKK01vcmUgbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCitOZXcgbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0CitOb3RlcyBvbiAxc3QgY29tbWl0CisKK01vcmUgbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIG5vdGVzIG9uIG90aGVyIG5vdGVzIHJlZiAoeSknICcKKwkjIEFwcGVuZCB0byAxc3QgY29tbWl0IG5vdGVzCisJZ2l0IG5vdGVzIGFwcGVuZCAtbSAiTW9yZSBub3RlcyBvbiAxc3QgY29tbWl0IiAxc3QgJiYKKwkjIEFkZCBuZXcgbm90ZXMgdG8gMm5kIGNvbW1pdAorCWdpdCBub3RlcyBhZGQgLW0gIk5ldyBub3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwl2ZXJpZnlfbm90ZXMgeQorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeAorJCh0ZXN0X29pZCBoYXNoNWIpICRjb21taXRfc2hhNQorJCh0ZXN0X29pZCBoYXNoNGQpICRjb21taXRfc2hhNAorJCh0ZXN0X29pZCBoYXNoMWEpICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ194IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCitOb3RlcyBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKK05ldyBub3RlcyBvbiA0dGggY29tbWl0CisKK01vcmUgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCisKKyRjb21taXRfc2hhMiAybmQKKworJGNvbW1pdF9zaGExIDFzdAorTm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIG5vdGVzIG9uIG5vdGVzIHJlZiAoeCknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIHJlbW92ZSAzcmQgJiYKKwlnaXQgbm90ZXMgYXBwZW5kIC1tICJNb3JlIG5vdGVzIG9uIDR0aCBjb21taXQiIDR0aCAmJgorCXZlcmlmeV9ub3RlcyB4CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc194CiskKHRlc3Rfb2lkIGhhc2g1YikgJGNvbW1pdF9zaGE1CiskKHRlc3Rfb2lkIGhhc2g0ZCkgJGNvbW1pdF9zaGE0CiskKHRlc3Rfb2lkIGhhc2gyYykgJGNvbW1pdF9zaGEyCiskKHRlc3Rfb2lkIGhhc2gxYykgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ggPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKK05vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAorTmV3IG5vdGVzIG9uIDR0aCBjb21taXQKKworTW9yZSBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKKworJGNvbW1pdF9zaGEyIDJuZAorTmV3IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorTm90ZXMgb24gMXN0IGNvbW1pdAorCitNb3JlIG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHkgaW50byB4ID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCBub3RlcyBtZXJnZSB5ICYmCisJdmVyaWZ5X25vdGVzIHggJiYKKwl2ZXJpZnlfbm90ZXMgeQorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfdworJCh0ZXN0X29pZCBoYXNoM2QpICRjb21taXRfc2hhMworJCh0ZXN0X29pZCBoYXNoMmMpICRjb21taXRfc2hhMgorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ193IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKKworJGNvbW1pdF9zaGEzIDNyZAorTmV3IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAorTmV3IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5vdGVzIG9uIG5ldywgc2VwYXJhdGUgbm90ZXMgcmVmICh3KScgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3cgJiYKKwkjIEFkZCBzYW1lIG5vdGUgYXMgcmVmcy9ub3Rlcy95IG9uIDJuZCBjb21taXQKKwlnaXQgbm90ZXMgYWRkIC1tICJOZXcgbm90ZXMgb24gMm5kIGNvbW1pdCIgMm5kICYmCisJIyBBZGQgbmV3IG5vdGUgb24gM3JkIGNvbW1pdCAobm9uLWNvbmZsaWN0aW5nKQorCWdpdCBub3RlcyBhZGQgLW0gIk5ldyBub3RlcyBvbiAzcmQgY29tbWl0IiAzcmQgJiYKKwkjIFZlcmlmeSBzdGF0ZSBvZiBub3RlcyBvbiBuZXcsIHNlcGFyYXRlIG5vdGVzIHJlZiAodykKKwl2ZXJpZnlfbm90ZXMgdworJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeAorJCh0ZXN0X29pZCBoYXNoNWIpICRjb21taXRfc2hhNQorJCh0ZXN0X29pZCBoYXNoNGQpICRjb21taXRfc2hhNAorJCh0ZXN0X29pZCBoYXNoM2QpICRjb21taXRfc2hhMworJCh0ZXN0X29pZCBoYXNoMmMpICRjb21taXRfc2hhMgorJCh0ZXN0X29pZCBoYXNoMWMpICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ194IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCitOb3RlcyBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKK05ldyBub3RlcyBvbiA0dGggY29tbWl0CisKK01vcmUgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCitOZXcgbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCitOZXcgbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0CitOb3RlcyBvbiAxc3QgY29tbWl0CisKK01vcmUgbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgdyBpbnRvIHggPT4gTm9uLWNvbmZsaWN0aW5nIGhpc3RvcnktbGVzcyBtZXJnZScgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ggJiYKKwlnaXQgbm90ZXMgbWVyZ2UgdyAmJgorCSMgVmVyaWZ5IG5ldyBzdGF0ZSBvZiBub3RlcyBvbiBvdGhlciBub3RlcyByZWYgKHgpCisJdmVyaWZ5X25vdGVzIHggJiYKKwkjIEFsc28gdmVyaWZ5IHRoYXQgbm90aGluZyBjaGFuZ2VkIG9uIG90aGVyIG5vdGVzIHJlZnMgKHkgYW5kIHcpCisJdmVyaWZ5X25vdGVzIHkgJiYKKwl2ZXJpZnlfbm90ZXMgdworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDktbm90ZXMtbWVyZ2UtYXV0by1yZXNvbHZlLnNoIGIvdC90MzMwOS1ub3Rlcy1tZXJnZS1hdXRvLXJlc29sdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTQxZDNlNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDktbm90ZXMtbWVyZ2UtYXV0by1yZXNvbHZlLnNoCkBAIC0wLDAgKzEsNzg2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEpvaGFuIEhlcmxhbmQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBub3RlcyBtZXJnaW5nIHdpdGggYXV0by1yZXNvbHZpbmcgc3RyYXRlZ2llcycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgU2V0IHVwIGEgbm90ZXMgbWVyZ2Ugc2NlbmFyaW8gd2l0aCBhbGwga2luZHMgb2YgcG90ZW50aWFsIGNvbmZsaWN0cwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29tbWl0cycgJworCXRlc3RfY29tbWl0IDFzdCAmJgorCXRlc3RfY29tbWl0IDJuZCAmJgorCXRlc3RfY29tbWl0IDNyZCAmJgorCXRlc3RfY29tbWl0IDR0aCAmJgorCXRlc3RfY29tbWl0IDV0aCAmJgorCXRlc3RfY29tbWl0IDZ0aCAmJgorCXRlc3RfY29tbWl0IDd0aCAmJgorCXRlc3RfY29tbWl0IDh0aCAmJgorCXRlc3RfY29tbWl0IDl0aCAmJgorCXRlc3RfY29tbWl0IDEwdGggJiYKKwl0ZXN0X2NvbW1pdCAxMXRoICYmCisJdGVzdF9jb21taXQgMTJ0aCAmJgorCXRlc3RfY29tbWl0IDEzdGggJiYKKwl0ZXN0X2NvbW1pdCAxNHRoICYmCisJdGVzdF9jb21taXQgMTV0aCAmJgorCisJdGVzdF9vaWRfY2FjaGUgPDwtRU9GCisJaGFzaDE1YSBzaGExOjQ1N2E4NWQ2YzgxNGVhMjA4NTUwZjE1ZmNjNDhmODA0YWM4ZGMwMjMKKwloYXNoMTRhIHNoYTE6YjBjOTViOTU0MzAxZDY5ZGEyYmMzNzIzZjRjYjE2ODBkMzU1OTM3YworCWhhc2gxM2Egc2hhMTo1ZDMwMjE2YTEyOWVlZmZhOTdkOTY5NGZmZThjNzQzMTdhNTYwMzE1CisJaGFzaDEyYSBzaGExOmRkMTYxYmMxNDk0NzBmZDg5MGRkNGFiNTJhNGNiZDc5YmJkMThjMzYKKwloYXNoMTFhIHNoYTE6N2FiYmM0NTEyNmQ2ODAzMzZmYjI0Mjk0ZjAxM2E3Y2RmYTNlZDU0NQorCWhhc2gxMGEgc2hhMTpiOGQwM2UxNzNmNjdmNjUwNWE3NmY2ZTAwY2Y5MzQ0MDIwMGRkOWJlCisJaGFzaDA5YSBzaGExOjIwYzYxM2M4MzUwMTFjNDhhNWFiZTI5MTcwYTI0MDJjYTYzNTQ5MTAKKwloYXNoMDhhIHNoYTE6YTNkYWY4YTFlNGU1ZGMzNDA5YTMwM2FkODQ4MWQ1N2JmZWE3ZjVkNgorCWhhc2gwN2Egc2hhMTo4OTcwMDMzMjJiNTNiYzZjYTA5OGU5MzI0ZWU1MDgzNjIzNDdlNzM0CisJaGFzaDA2YSBzaGExOjExZDk3ZmRlYmZhNWNlZWU1NDBhM2RhMDdiY2U2ZmEwMjIyYmMwODIKKwloYXNoMTViIHNoYTE6NjhiODYzMGQyNTUxNjAyOGJlZDg2MjcxOTg1NWIzZDY3NjhkNzgzMworCWhhc2gxNGIgc2hhMTo1ZGU3ZWE3YWQ0ZjQ3ZTdmZjkxOTg5ZmI4MjIzNDYzNDczMGY3NWRmCisJaGFzaDEzYiBzaGExOjNhNjMxZmRiNmY0MWIwNWI1NWQ4ZjRiYWYyMDcyOGJhOGY2ZmNjYmMKKwloYXNoMTJiIHNoYTE6YTY2MDU1ZmE4MmY3YTAzZmUwYzAyYTZhYmEzMjg3YTg1YWJmN2M2MgorCWhhc2gwNWIgc2hhMToxNTQ1MDhjN2EwYmNhZDgyYjZmZTRiNDcyYmM0YzI2YjNiZjA4MjViCisJaGFzaDA0YiBzaGExOmUyYmZkMDZhMzdkZDIwMzE2ODRhNTlhNmUyYjAzM2UyMTIyMzljNzgKKwloYXNoMDNiIHNoYTE6NTc3MmY0MjQwOGMwZGQ2ZjA5N2E3Y2EyZDI0ZGUwZTc4ZDFjNDZiMQorCWhhc2gxNWMgc2hhMTo5YjRiMmM2MWYwNjE1NDEyZGEzYzEwZjk4ZmY4NWI1N2MwNGVjNzY1CisJaGFzaDExYyBzaGExOjdlM2M1MzUwM2EzZGI4ZGQ5OTZjYjYyZTM3YzY2ZTA3MGI0NGI1NGQKKwloYXNoMDhjIHNoYTE6ODUxZTE2Mzg3ODRhODg0YzdkZDI2YzVkNDFmMzM0MGY2Mzg3NDEzYQorCWhhc2gwNWMgc2hhMTo5OWZjMzRhZGZjNDAwYjk1YzY3YjAxMzExNWUzN2UzMWFhOWE2ZDIzCisJaGFzaDAyYyBzaGExOjI4M2I0ODIxOWFlZTlhNDEwNWY2Y2FiMzM3ZTc4OTA2NWM4MmMyYjkKKwloYXNoMTVkIHNoYTE6N2M0ZTU0NmVmZDBmZTkzOWY4NzZiZWIyNjJlY2UwMjc5Nzg4MGI1NAorCWhhc2gwNWQgc2hhMTo2Yzg0MWNjMzZlYTQ5NjAyNzI5MDk2N2NhOTZiZDJiZWY1NGRiYjQ3CisJaGFzaDE1ZSBzaGExOmQ2ODIxMDdiOGJmN2E3YWVhMWU1MzdhOGQ1Y2I2YTEyYjYwMTM1ZjEKKwloYXNoMDVlIHNoYTE6MzU3YjZjYTE0YzdhZmQ1OWI3ZjhiOGFhYWE2YjhiNzIzNzcxMTM1YgorCWhhc2gxNWYgc2hhMTo2YmU5MDI0MGI1ZjU0NTk0MjAzZTI1ZDlmMmY2NGI3NTY3MTc1YWVlCisJaGFzaDA1ZiBzaGExOjY2MDMxMWQ3Zjc4ZGM1M2RiMTJhYzM3M2E0M2ZjYTc0NjUzODFhN2UKKworCWhhc2gxNWEgc2hhMjU2OjQ1YjE1NThlNWMxYjc1ZjU3MDAxMGZhNDhhYWE2N2JiMjI4OWZjZDQzMWIzNGFkODFjYjRjOGI5NWY0Zjg3MmEKKwloYXNoMTRhIHNoYTI1Njo2ZTdhZjE3OWVhNGRkMjhhZmRjODNhZTY5MTJiYTAwOThjZGVmZjc2NGIyNmE4Yjc1MGIxNTdkZDgxNzQ5MDkyCisJaGFzaDEzYSBzaGEyNTY6NzM1MzA4OTk2MWJhZjU1NTM4OGUxYmFjNjhjNjdjOGVhOTRiMDhjY2JkOTc1MzIyMDFjZjdmNjc5MDcwMzA1MgorCWhhc2gxMmEgc2hhMjU2OjU4NjNlNDUyMTY4OWVlMTg3OWNlYWIzYjM4ZDM5ZTkzYWI1YjUxZWM3MGFhZjZhOTZhZDM4OGZiZGVkZmEyNWUKKwloYXNoMTFhIHNoYTI1Njo4MmEwZWMwMzM4YjRlY2Y4YjQ0MzA0YmFkZjRhZDM4ZDc0NjlkYzQxODI3ZjM4ZDdiYTZjNDJlM2JhZTNlZTk4CisJaGFzaDEwYSBzaGEyNTY6ZTg0ZjI1NjRlOTJkZTk3OTJjOTNiOGQxOTcyNjJjNzM1ZDdjY2IxZGU2MDI1Y2VmODc1OWFmOGY2YzMzMDhlYgorCWhhc2gwOWEgc2hhMjU2OjRkZDA3NzY0YmNlYzY5NmYxOTVjMGVhNzFhZTg5ZTE3NDg3NjQwM2FmMTYzN2U0NjQyYjhmNDQ1M2ZkMjMwMjgKKwloYXNoMDhhIHNoYTI1NjowMjEzMmM0NTQ2Y2Q4OGExZDBhYTU4NTRkZDU1ZGExMjA5MjdmNzkwNGJhMTZhZmUzNmZlMDNlOTFhNjIyMDY3CisJaGFzaDA3YSBzaGEyNTY6MzY5YmFmN2QwMGM2NzIwZWZkYzEwMjczNDkzNTU1Zjk0MzA1MWY4NGE0NzA2ZmIyNGNhZWIzNTNmYTQ3ODlkYgorCWhhc2gwNmEgc2hhMjU2OjUyZDMyYzEwMzUzNTgzYjJkOTZhNTg0OWIxZjFmNDNjODAxOGU3NmYzZThlZjFiMGQ0NmViNWNmZjdjZGVmYWYKKwloYXNoMTViIHNoYTI1NjozNDVlNjY2MGIzNDVmYTE3NDczOGEzMWE3YTU5NDIzYzM5NGJkZjQxNDgwNGUyMDBiYzUxMGM2NWQ5NzFhZTk2CisJaGFzaDE0YiBzaGEyNTY6NzY1M2E2NTk2MDIxYzUyZTQwNWNiYTk3OWVlYTE1YTcyOTk5M2U3MTAyYjlhNjFiYTQ2NjdlMzRmMGVhZDRhMQorCWhhc2gxM2Igc2hhMjU2OjBmMjAyYTBiNmI5NjkwZGUyMzQ5YzE3M2RmZDc2NmEzN2U4Mjc0NGY2MWMxNGYxYzM4OTMwNmYxZDY5ZjQ3MGIKKwloYXNoMTJiIHNoYTI1NjplYjAwZjIxOWMwMjYxMzZlYTY1MzViMTZmZjhlYzNlZmE1MTBlNmJmNTAwOThjYTA0MWUxYTJhMWQ0Yjc5ODQwCisJaGFzaDA1YiBzaGEyNTY6OTkzYjIyOTBjZDBjMjRjMjdjODQ5ZDk5ZjE5MDRmM2I1OTBmNzdhZjBmNTM5OTMyNzM0YWQwNTY3OWFjNWEyZgorCWhhc2gwNGIgc2hhMjU2OmM3ZmJhMGQ2MTA0OTE3ZmJmMzUyNThmNDBiOWZhNGZjNjk3Y2ZhOTkyZGVlY2QxNTcwYTNiMDhkMGE1NTg3YTkKKwloYXNoMDNiIHNoYTI1Njo3Mjg3YTJkNzhhMzc2NmMxODFiMDhkZjM4OTUxZDc4NGIwOGI3MmE0NGY1NzFlZDZkODU1YmQwYmUyMmM3MGY2CisJaGFzaDE1YyBzaGEyNTY6NjIzMTY2NjBhMjJiZjk3ODU3ZGM0YTE2NzA5ZWM0ZDkzYTIyNGU4YzlmMzdkNjYxZWY5MTc1MWUxZjRjNDE2NgorCWhhc2gxMWMgc2hhMjU2OjUxYzM3NjNkZTliMDgzMDkzNzBhZGM1MDM2ZDU4ZGViYjMzMTk4MGU3MzA5NzkwMjk1N2M0NDQ2MDI1NTFkYWEKKwloYXNoMDhjIHNoYTI1NjoyMmNmMWZhMjk1OTk4OThhNzIxOGM1MTEzNWQ2NmVkODVkMjJhYWQ1ODRmNzdkYjMzMDVkZWRjZTRjM2Q0Nzk4CisJaGFzaDA1YyBzaGEyNTY6MjUwOGZkODZkYjk4MGYwNTA4ODkzYTFjMTU3MWJkZjNiMmVlMTEzZGMyNWRkYjFhM2EyZmI5NGJkNmNkMGQ1OAorCWhhc2gwMmMgc2hhMjU2OjYzYmI1MjdlMGI0ZTFjOGUxZGQwZDU0ZGQ3NzhjYTdjMzcxODY4OWZkNmUzN2M0NzMwNDRjZmJjZjFjYWNmZGIKKwloYXNoMTVkIHNoYTI1Njo2NjdhY2I0ZTJkNWY4ZGYxNWU1YWVhNDUwNmRmZDE2ZDI1YmM3ZmVjYTcwZmRiMGQ5NjVhNzIyMmY5ODNiYjg4CisJaGFzaDA1ZCBzaGEyNTY6MDllNmI1YTZmZTY2NmM0YTAyNzY3NGI2NjExYTI1NGI3ZDI1MjhjZDIxMWM2YjUyODhkMWI0ZGI2Yzc0MWRmYQorCWhhc2gxNWUgc2hhMjU2OmU4Y2JmNTJmNmZjYWRjNmRlM2M3NzYxZTY0YTg5ZTlmZTM4ZDE5YTAzZDNlMjhlZjZjYTg1OTZkOTNmYzRmM2EKKwloYXNoMDVlIHNoYTI1NjpjZGIxZTE5ZjdiYTE1MzlmOTVhZjUxYTU3ZWRlYjg4YTdlY2M5N2QzYzJmNTJkYThjNGM4NmFmMzA4NTk1NjA3CisJaGFzaDE1ZiBzaGEyNTY6MjljMTRjYjkyZGE0NDhhOTIzOTYzYjhhNDM5OTQyNjhiMTljMmU1NzkxM2RlNzNmMzY2NzQyMWZkMmMwZWVlYworCWhhc2gwNWYgc2hhMjU2OjE0YTZlNjQxYjJjMGE5ZjM5OGViYWM2YjRkMzRhZmE1ZWZlYTRjNTJkMjYzMTM4MmY0NWY4ZjY2MjI2NjkwM2IKKwlFT0YKKycKKworY29tbWl0X3NoYTE9JChnaXQgcmV2LXBhcnNlIDFzdF57Y29tbWl0fSkKK2NvbW1pdF9zaGEyPSQoZ2l0IHJldi1wYXJzZSAybmRee2NvbW1pdH0pCitjb21taXRfc2hhMz0kKGdpdCByZXYtcGFyc2UgM3JkXntjb21taXR9KQorY29tbWl0X3NoYTQ9JChnaXQgcmV2LXBhcnNlIDR0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGE1PSQoZ2l0IHJldi1wYXJzZSA1dGhee2NvbW1pdH0pCitjb21taXRfc2hhNj0kKGdpdCByZXYtcGFyc2UgNnRoXntjb21taXR9KQorY29tbWl0X3NoYTc9JChnaXQgcmV2LXBhcnNlIDd0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGE4PSQoZ2l0IHJldi1wYXJzZSA4dGhee2NvbW1pdH0pCitjb21taXRfc2hhOT0kKGdpdCByZXYtcGFyc2UgOXRoXntjb21taXR9KQorY29tbWl0X3NoYTEwPSQoZ2l0IHJldi1wYXJzZSAxMHRoXntjb21taXR9KQorY29tbWl0X3NoYTExPSQoZ2l0IHJldi1wYXJzZSAxMXRoXntjb21taXR9KQorY29tbWl0X3NoYTEyPSQoZ2l0IHJldi1wYXJzZSAxMnRoXntjb21taXR9KQorY29tbWl0X3NoYTEzPSQoZ2l0IHJldi1wYXJzZSAxM3RoXntjb21taXR9KQorY29tbWl0X3NoYTE0PSQoZ2l0IHJldi1wYXJzZSAxNHRoXntjb21taXR9KQorY29tbWl0X3NoYTE1PSQoZ2l0IHJldi1wYXJzZSAxNXRoXntjb21taXR9KQorCit2ZXJpZnlfbm90ZXMgKCkgeworCW5vdGVzX3JlZj0iJDEiCisJc3VmZml4PSIkMiIKKwlnaXQgLWMgY29yZS5ub3Rlc1JlZj0icmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiBub3RlcyB8CisJCXNvcnQgPiJvdXRwdXRfbm90ZXNfJHN1ZmZpeCIgJiYKKwl0ZXN0X2NtcCAiZXhwZWN0X25vdGVzXyRzdWZmaXgiICJvdXRwdXRfbm90ZXNfJHN1ZmZpeCIgJiYKKwlnaXQgLWMgY29yZS5ub3Rlc1JlZj0icmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiBsb2cgLS1mb3JtYXQ9IiVIICVzJW4lTiIgXAorCQk+Im91dHB1dF9sb2dfJHN1ZmZpeCIgJiYKKwl0ZXN0X2NtcCAiZXhwZWN0X2xvZ18kc3VmZml4IiAib3V0cHV0X2xvZ18kc3VmZml4IgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtZXJnZSBiYXNlICh4KScgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDZ0aCBjb21taXQiIDZ0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gN3RoIGNvbW1pdCIgN3RoICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiA4dGggY29tbWl0IiA4dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDl0aCBjb21taXQiIDl0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gMTB0aCBjb21taXQiIDEwdGggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDExdGggY29tbWl0IiAxMXRoICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAxMnRoIGNvbW1pdCIgMTJ0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gMTN0aCBjb21taXQiIDEzdGggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDE0dGggY29tbWl0IiAxNHRoICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAxNXRoIGNvbW1pdCIgMTV0aAorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeAorJCh0ZXN0X29pZCBoYXNoMTVhKSAkY29tbWl0X3NoYTE1CiskKHRlc3Rfb2lkIGhhc2gxNGEpICRjb21taXRfc2hhMTQKKyQodGVzdF9vaWQgaGFzaDEzYSkgJGNvbW1pdF9zaGExMworJCh0ZXN0X29pZCBoYXNoMTJhKSAkY29tbWl0X3NoYTEyCiskKHRlc3Rfb2lkIGhhc2gxMWEpICRjb21taXRfc2hhMTEKKyQodGVzdF9vaWQgaGFzaDEwYSkgJGNvbW1pdF9zaGExMAorJCh0ZXN0X29pZCBoYXNoMDlhKSAkY29tbWl0X3NoYTkKKyQodGVzdF9vaWQgaGFzaDA4YSkgJGNvbW1pdF9zaGE4CiskKHRlc3Rfb2lkIGhhc2gwN2EpICRjb21taXRfc2hhNworJCh0ZXN0X29pZCBoYXNoMDZhKSAkY29tbWl0X3NoYTYKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeCA8PEVPRgorJGNvbW1pdF9zaGExNSAxNXRoCit4IG5vdGVzIG9uIDE1dGggY29tbWl0CisKKyRjb21taXRfc2hhMTQgMTR0aAoreCBub3RlcyBvbiAxNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEzIDEzdGgKK3ggbm90ZXMgb24gMTN0aCBjb21taXQKKworJGNvbW1pdF9zaGExMiAxMnRoCit4IG5vdGVzIG9uIDEydGggY29tbWl0CisKKyRjb21taXRfc2hhMTEgMTF0aAoreCBub3RlcyBvbiAxMXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEwIDEwdGgKK3ggbm90ZXMgb24gMTB0aCBjb21taXQKKworJGNvbW1pdF9zaGE5IDl0aAoreCBub3RlcyBvbiA5dGggY29tbWl0CisKKyRjb21taXRfc2hhOCA4dGgKK3ggbm90ZXMgb24gOHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTcgN3RoCit4IG5vdGVzIG9uIDd0aCBjb21taXQKKworJGNvbW1pdF9zaGE2IDZ0aAoreCBub3RlcyBvbiA2dGggY29tbWl0CisKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAorCiskY29tbWl0X3NoYTMgM3JkCisKKyRjb21taXRfc2hhMiAybmQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHN0YXRlIG9mIG1lcmdlIGJhc2UgKHgpJyAndmVyaWZ5X25vdGVzIHggeCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbG9jYWwgYnJhbmNoICh5KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveSByZWZzL25vdGVzL3ggJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy95ICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiAzcmQgY29tbWl0IiAzcmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDR0aCBjb21taXQiIDR0aCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInkgbm90ZXMgb24gNXRoIGNvbW1pdCIgNXRoICYmCisJZ2l0IG5vdGVzIHJlbW92ZSA2dGggJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIDd0aCAmJgorCWdpdCBub3RlcyByZW1vdmUgOHRoICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiAxMnRoIGNvbW1pdCIgMTJ0aCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInkgbm90ZXMgb24gMTN0aCBjb21taXQiIDEzdGggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDE0dGggY29tbWl0IiAxNHRoICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiAxNXRoIGNvbW1pdCIgMTV0aAorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeQorJCh0ZXN0X29pZCBoYXNoMTViKSAkY29tbWl0X3NoYTE1CiskKHRlc3Rfb2lkIGhhc2gxNGIpICRjb21taXRfc2hhMTQKKyQodGVzdF9vaWQgaGFzaDEzYikgJGNvbW1pdF9zaGExMworJCh0ZXN0X29pZCBoYXNoMTJiKSAkY29tbWl0X3NoYTEyCiskKHRlc3Rfb2lkIGhhc2gxMWEpICRjb21taXRfc2hhMTEKKyQodGVzdF9vaWQgaGFzaDEwYSkgJGNvbW1pdF9zaGExMAorJCh0ZXN0X29pZCBoYXNoMDlhKSAkY29tbWl0X3NoYTkKKyQodGVzdF9vaWQgaGFzaDA1YikgJGNvbW1pdF9zaGE1CiskKHRlc3Rfb2lkIGhhc2gwNGIpICRjb21taXRfc2hhNAorJCh0ZXN0X29pZCBoYXNoMDNiKSAkY29tbWl0X3NoYTMKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeSA8PEVPRgorJGNvbW1pdF9zaGExNSAxNXRoCit5IG5vdGVzIG9uIDE1dGggY29tbWl0CisKKyRjb21taXRfc2hhMTQgMTR0aAoreSBub3RlcyBvbiAxNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEzIDEzdGgKK3kgbm90ZXMgb24gMTN0aCBjb21taXQKKworJGNvbW1pdF9zaGExMiAxMnRoCit5IG5vdGVzIG9uIDEydGggY29tbWl0CisKKyRjb21taXRfc2hhMTEgMTF0aAoreCBub3RlcyBvbiAxMXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEwIDEwdGgKK3ggbm90ZXMgb24gMTB0aCBjb21taXQKKworJGNvbW1pdF9zaGE5IDl0aAoreCBub3RlcyBvbiA5dGggY29tbWl0CisKKyRjb21taXRfc2hhOCA4dGgKKworJGNvbW1pdF9zaGE3IDd0aAorCiskY29tbWl0X3NoYTYgNnRoCisKKyRjb21taXRfc2hhNSA1dGgKK3kgbm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreSBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHN0YXRlIG9mIGxvY2FsIGJyYW5jaCAoeSknICd2ZXJpZnlfbm90ZXMgeSB5JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW1vdGUgYnJhbmNoICh6KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveiByZWZzL25vdGVzL3ggJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy96ICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieiBub3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDR0aCBjb21taXQiIDR0aCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInogbm90ZXMgb24gNXRoIGNvbW1pdCIgNXRoICYmCisJZ2l0IG5vdGVzIHJlbW92ZSA2dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ6IG5vdGVzIG9uIDh0aCBjb21taXQiIDh0aCAmJgorCWdpdCBub3RlcyByZW1vdmUgOXRoICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieiBub3RlcyBvbiAxMXRoIGNvbW1pdCIgMTF0aCAmJgorCWdpdCBub3RlcyByZW1vdmUgMTJ0aCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInkgbm90ZXMgb24gMTR0aCBjb21taXQiIDE0dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ6IG5vdGVzIG9uIDE1dGggY29tbWl0IiAxNXRoCisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc196CiskKHRlc3Rfb2lkIGhhc2gxNWMpICRjb21taXRfc2hhMTUKKyQodGVzdF9vaWQgaGFzaDE0YikgJGNvbW1pdF9zaGExNAorJCh0ZXN0X29pZCBoYXNoMTNhKSAkY29tbWl0X3NoYTEzCiskKHRlc3Rfb2lkIGhhc2gxMWMpICRjb21taXRfc2hhMTEKKyQodGVzdF9vaWQgaGFzaDEwYSkgJGNvbW1pdF9zaGExMAorJCh0ZXN0X29pZCBoYXNoMDhjKSAkY29tbWl0X3NoYTgKKyQodGVzdF9vaWQgaGFzaDA3YSkgJGNvbW1pdF9zaGE3CiskKHRlc3Rfb2lkIGhhc2gwNWMpICRjb21taXRfc2hhNQorJCh0ZXN0X29pZCBoYXNoMDRiKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDAyYykgJGNvbW1pdF9zaGEyCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ogPDxFT0YKKyRjb21taXRfc2hhMTUgMTV0aAoreiBub3RlcyBvbiAxNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTE0IDE0dGgKK3kgbm90ZXMgb24gMTR0aCBjb21taXQKKworJGNvbW1pdF9zaGExMyAxM3RoCit4IG5vdGVzIG9uIDEzdGggY29tbWl0CisKKyRjb21taXRfc2hhMTIgMTJ0aAorCiskY29tbWl0X3NoYTExIDExdGgKK3ogbm90ZXMgb24gMTF0aCBjb21taXQKKworJGNvbW1pdF9zaGExMCAxMHRoCit4IG5vdGVzIG9uIDEwdGggY29tbWl0CisKKyRjb21taXRfc2hhOSA5dGgKKworJGNvbW1pdF9zaGE4IDh0aAoreiBub3RlcyBvbiA4dGggY29tbWl0CisKKyRjb21taXRfc2hhNyA3dGgKK3ggbm90ZXMgb24gN3RoIGNvbW1pdAorCiskY29tbWl0X3NoYTYgNnRoCisKKyRjb21taXRfc2hhNSA1dGgKK3ogbm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAorCiskY29tbWl0X3NoYTIgMm5kCit6IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHN0YXRlIG9mIHJlbW90ZSBicmFuY2ggKHopJyAndmVyaWZ5X25vdGVzIHogeicKKworIyBBdCB0aGlzIHBvaW50LCBiZWZvcmUgbWVyZ2luZyB6IGludG8geSwgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHN0YXR1czoKKyMKKyMgY29tbWl0IHwgYmFzZS94ICB8IGxvY2FsL3kgfCByZW1vdGUveiB8IGRpZmYgZnJvbSB4IHRvIHkveiAgICAgICAgIHwgcmVzdWx0CisjIC0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLQorIyAxc3QgICAgfCBbbm9uZV0gIHwgW25vbmVdICB8IFtub25lXSAgIHwgdW5jaGFuZ2VkIC8gdW5jaGFuZ2VkICAgICAgfCBbbm9uZV0KKyMgMm5kICAgIHwgW25vbmVdICB8IFtub25lXSAgfCAyODNiNDgyICB8IHVuY2hhbmdlZCAvIGFkZGVkICAgICAgICAgIHwgMjgzYjQ4MgorIyAzcmQgICAgfCBbbm9uZV0gIHwgNTc3MmY0MiB8IFtub25lXSAgIHwgYWRkZWQgICAgIC8gdW5jaGFuZ2VkICAgICAgfCA1NzcyZjQyCisjIDR0aCAgICB8IFtub25lXSAgfCBlMmJmZDA2IHwgZTJiZmQwNiAgfCBhZGRlZCAgICAgLyBhZGRlZCAoc2FtZSkgICB8IGUyYmZkMDYKKyMgNXRoICAgIHwgW25vbmVdICB8IDE1NDUwOGMgfCA5OWZjMzRhICB8IGFkZGVkICAgICAvIGFkZGVkIChkaWZmKSAgIHwgPz8/CisjIDZ0aCAgICB8IDExZDk3ZmQgfCBbbm9uZV0gIHwgW25vbmVdICAgfCByZW1vdmVkICAgLyByZW1vdmVkICAgICAgICB8IFtub25lXQorIyA3dGggICAgfCA4OTcwMDMzIHwgW25vbmVdICB8IDg5NzAwMzMgIHwgcmVtb3ZlZCAgIC8gdW5jaGFuZ2VkICAgICAgfCBbbm9uZV0KKyMgOHRoICAgIHwgYTNkYWY4YSB8IFtub25lXSAgfCA4NTFlMTYzICB8IHJlbW92ZWQgICAvIGNoYW5nZWQgICAgICAgIHwgPz8/CisjIDl0aCAgICB8IDIwYzYxM2MgfCAyMGM2MTNjIHwgW25vbmVdICAgfCB1bmNoYW5nZWQgLyByZW1vdmVkICAgICAgICB8IFtub25lXQorIyAxMHRoICAgfCBiOGQwM2UxIHwgYjhkMDNlMSB8IGI4ZDAzZTEgIHwgdW5jaGFuZ2VkIC8gdW5jaGFuZ2VkICAgICAgfCBiOGQwM2UxCisjIDExdGggICB8IDdhYmJjNDUgfCA3YWJiYzQ1IHwgN2UzYzUzNSAgfCB1bmNoYW5nZWQgLyBjaGFuZ2VkICAgICAgICB8IDdlM2M1MzUKKyMgMTJ0aCAgIHwgZGQxNjFiYyB8IGE2NjA1NWYgfCBbbm9uZV0gICB8IGNoYW5nZWQgICAvIHJlbW92ZWQgICAgICAgIHwgPz8/CisjIDEzdGggICB8IDVkMzAyMTYgfCAzYTYzMWZkIHwgNWQzMDIxNiAgfCBjaGFuZ2VkICAgLyB1bmNoYW5nZWQgICAgICB8IDNhNjMxZmQKKyMgMTR0aCAgIHwgYjBjOTViOSB8IDVkZTdlYTcgfCA1ZGU3ZWE3ICB8IGNoYW5nZWQgICAvIGNoYW5nZWQgKHNhbWUpIHwgNWRlN2VhNworIyAxNXRoICAgfCA0NTdhODVkIHwgNjhiODYzMCB8IDliNGIyYzYgIHwgY2hhbmdlZCAgIC8gY2hhbmdlZCAoZGlmZikgfCA/Pz8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIHkgd2l0aCBpbnZhbGlkIHN0cmF0ZWd5ID0+IEZhaWwvTm8gY2hhbmdlcycgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3kgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgLS1zdHJhdGVneT1mb28geiAmJgorCSMgVmVyaWZ5IG5vIGNoYW5nZXMgKHkpCisJdmVyaWZ5X25vdGVzIHkgeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8geSB3aXRoIGludmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24gPT4gRmFpbC9ObyBjaGFuZ2VzJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBub3Rlcy5tZXJnZVN0cmF0ZWd5PSJmb28iIG5vdGVzIG1lcmdlIHogJiYKKwkjIFZlcmlmeSBubyBjaGFuZ2VzICh5KQorCXZlcmlmeV9ub3RlcyB5IHkKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX291cnMKKyQodGVzdF9vaWQgaGFzaDE1YikgJGNvbW1pdF9zaGExNQorJCh0ZXN0X29pZCBoYXNoMTRiKSAkY29tbWl0X3NoYTE0CiskKHRlc3Rfb2lkIGhhc2gxM2IpICRjb21taXRfc2hhMTMKKyQodGVzdF9vaWQgaGFzaDEyYikgJGNvbW1pdF9zaGExMgorJCh0ZXN0X29pZCBoYXNoMTFjKSAkY29tbWl0X3NoYTExCiskKHRlc3Rfb2lkIGhhc2gxMGEpICRjb21taXRfc2hhMTAKKyQodGVzdF9vaWQgaGFzaDA1YikgJGNvbW1pdF9zaGE1CiskKHRlc3Rfb2lkIGhhc2gwNGIpICRjb21taXRfc2hhNAorJCh0ZXN0X29pZCBoYXNoMDNiKSAkY29tbWl0X3NoYTMKKyQodGVzdF9vaWQgaGFzaDAyYykgJGNvbW1pdF9zaGEyCitFT0YKKworY2F0ID5leHBlY3RfbG9nX291cnMgPDxFT0YKKyRjb21taXRfc2hhMTUgMTV0aAoreSBub3RlcyBvbiAxNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTE0IDE0dGgKK3kgbm90ZXMgb24gMTR0aCBjb21taXQKKworJGNvbW1pdF9zaGExMyAxM3RoCit5IG5vdGVzIG9uIDEzdGggY29tbWl0CisKKyRjb21taXRfc2hhMTIgMTJ0aAoreSBub3RlcyBvbiAxMnRoIGNvbW1pdAorCiskY29tbWl0X3NoYTExIDExdGgKK3ogbm90ZXMgb24gMTF0aCBjb21taXQKKworJGNvbW1pdF9zaGExMCAxMHRoCit4IG5vdGVzIG9uIDEwdGggY29tbWl0CisKKyRjb21taXRfc2hhOSA5dGgKKworJGNvbW1pdF9zaGE4IDh0aAorCiskY29tbWl0X3NoYTcgN3RoCisKKyRjb21taXRfc2hhNiA2dGgKKworJGNvbW1pdF9zaGE1IDV0aAoreSBub3RlcyBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKK3kgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCit5IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggIm91cnMiIHN0cmF0ZWd5ID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCBub3RlcyBtZXJnZSAtLXN0cmF0ZWd5PW91cnMgeiAmJgorCXZlcmlmeV9ub3RlcyB5IG91cnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgdG8gcHJlLW1lcmdlIHN0YXRlICh5KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveSByZWZzL25vdGVzL3leMSAmJgorCSMgVmVyaWZ5IHByZS1tZXJnZSBzdGF0ZQorCXZlcmlmeV9ub3RlcyB5IHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIHkgd2l0aCAib3VycyIgY29uZmlndXJhdGlvbiBvcHRpb24gPT4gTm9uLWNvbmZsaWN0aW5nIDMtd2F5IG1lcmdlJyAnCisJZ2l0IC1jIG5vdGVzLm1lcmdlU3RyYXRlZ3k9Im91cnMiIG5vdGVzIG1lcmdlIHogJiYKKwl2ZXJpZnlfbm90ZXMgeSBvdXJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy95XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggIm91cnMiIHBlci1yZWYgY29uZmlndXJhdGlvbiBvcHRpb24gPT4gTm9uLWNvbmZsaWN0aW5nIDMtd2F5IG1lcmdlJyAnCisJZ2l0IC1jIG5vdGVzLnkubWVyZ2VTdHJhdGVneT0ib3VycyIgbm90ZXMgbWVyZ2UgeiAmJgorCXZlcmlmeV9ub3RlcyB5IG91cnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgdG8gcHJlLW1lcmdlIHN0YXRlICh5KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveSByZWZzL25vdGVzL3leMSAmJgorCSMgVmVyaWZ5IHByZS1tZXJnZSBzdGF0ZQorCXZlcmlmeV9ub3RlcyB5IHkKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3RoZWlycworJCh0ZXN0X29pZCBoYXNoMTVjKSAkY29tbWl0X3NoYTE1CiskKHRlc3Rfb2lkIGhhc2gxNGIpICRjb21taXRfc2hhMTQKKyQodGVzdF9vaWQgaGFzaDEzYikgJGNvbW1pdF9zaGExMworJCh0ZXN0X29pZCBoYXNoMTFjKSAkY29tbWl0X3NoYTExCiskKHRlc3Rfb2lkIGhhc2gxMGEpICRjb21taXRfc2hhMTAKKyQodGVzdF9vaWQgaGFzaDA4YykgJGNvbW1pdF9zaGE4CiskKHRlc3Rfb2lkIGhhc2gwNWMpICRjb21taXRfc2hhNQorJCh0ZXN0X29pZCBoYXNoMDRiKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDAzYikgJGNvbW1pdF9zaGEzCiskKHRlc3Rfb2lkIGhhc2gwMmMpICRjb21taXRfc2hhMgorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ190aGVpcnMgPDxFT0YKKyRjb21taXRfc2hhMTUgMTV0aAoreiBub3RlcyBvbiAxNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTE0IDE0dGgKK3kgbm90ZXMgb24gMTR0aCBjb21taXQKKworJGNvbW1pdF9zaGExMyAxM3RoCit5IG5vdGVzIG9uIDEzdGggY29tbWl0CisKKyRjb21taXRfc2hhMTIgMTJ0aAorCiskY29tbWl0X3NoYTExIDExdGgKK3ogbm90ZXMgb24gMTF0aCBjb21taXQKKworJGNvbW1pdF9zaGExMCAxMHRoCit4IG5vdGVzIG9uIDEwdGggY29tbWl0CisKKyRjb21taXRfc2hhOSA5dGgKKworJGNvbW1pdF9zaGE4IDh0aAoreiBub3RlcyBvbiA4dGggY29tbWl0CisKKyRjb21taXRfc2hhNyA3dGgKKworJGNvbW1pdF9zaGE2IDZ0aAorCiskY29tbWl0X3NoYTUgNXRoCit6IG5vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAoreSBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK3kgbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCit6IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIHkgd2l0aCAidGhlaXJzIiBzdHJhdGVneSA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgbm90ZXMgbWVyZ2UgLS1zdHJhdGVneT10aGVpcnMgeiAmJgorCXZlcmlmeV9ub3RlcyB5IHRoZWlycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB0byBwcmUtbWVyZ2Ugc3RhdGUgKHkpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy95IHJlZnMvbm90ZXMveV4xICYmCisJIyBWZXJpZnkgcHJlLW1lcmdlIHN0YXRlCisJdmVyaWZ5X25vdGVzIHkgeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8geSB3aXRoICJ0aGVpcnMiIHN0cmF0ZWd5IG92ZXJyaWRpbmcgY29uZmlndXJhdGlvbiBvcHRpb24gIm91cnMiID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCAtYyBub3Rlcy5tZXJnZVN0cmF0ZWd5PSJvdXJzIiBub3RlcyBtZXJnZSAtLXN0cmF0ZWd5PXRoZWlycyB6ICYmCisJdmVyaWZ5X25vdGVzIHkgdGhlaXJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy95XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc191bmlvbgorJCh0ZXN0X29pZCBoYXNoMTVkKSAkY29tbWl0X3NoYTE1CiskKHRlc3Rfb2lkIGhhc2gxNGIpICRjb21taXRfc2hhMTQKKyQodGVzdF9vaWQgaGFzaDEzYikgJGNvbW1pdF9zaGExMworJCh0ZXN0X29pZCBoYXNoMTJiKSAkY29tbWl0X3NoYTEyCiskKHRlc3Rfb2lkIGhhc2gxMWMpICRjb21taXRfc2hhMTEKKyQodGVzdF9vaWQgaGFzaDEwYSkgJGNvbW1pdF9zaGExMAorJCh0ZXN0X29pZCBoYXNoMDhjKSAkY29tbWl0X3NoYTgKKyQodGVzdF9vaWQgaGFzaDA1ZCkgJGNvbW1pdF9zaGE1CiskKHRlc3Rfb2lkIGhhc2gwNGIpICRjb21taXRfc2hhNAorJCh0ZXN0X29pZCBoYXNoMDNiKSAkY29tbWl0X3NoYTMKKyQodGVzdF9vaWQgaGFzaDAyYykgJGNvbW1pdF9zaGEyCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3VuaW9uIDw8RU9GCiskY29tbWl0X3NoYTE1IDE1dGgKK3kgbm90ZXMgb24gMTV0aCBjb21taXQKKworeiBub3RlcyBvbiAxNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTE0IDE0dGgKK3kgbm90ZXMgb24gMTR0aCBjb21taXQKKworJGNvbW1pdF9zaGExMyAxM3RoCit5IG5vdGVzIG9uIDEzdGggY29tbWl0CisKKyRjb21taXRfc2hhMTIgMTJ0aAoreSBub3RlcyBvbiAxMnRoIGNvbW1pdAorCiskY29tbWl0X3NoYTExIDExdGgKK3ogbm90ZXMgb24gMTF0aCBjb21taXQKKworJGNvbW1pdF9zaGExMCAxMHRoCit4IG5vdGVzIG9uIDEwdGggY29tbWl0CisKKyRjb21taXRfc2hhOSA5dGgKKworJGNvbW1pdF9zaGE4IDh0aAoreiBub3RlcyBvbiA4dGggY29tbWl0CisKKyRjb21taXRfc2hhNyA3dGgKKworJGNvbW1pdF9zaGE2IDZ0aAorCiskY29tbWl0X3NoYTUgNXRoCit5IG5vdGVzIG9uIDV0aCBjb21taXQKKworeiBub3RlcyBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKK3kgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCit5IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggInVuaW9uIiBzdHJhdGVneSA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgbm90ZXMgbWVyZ2UgLS1zdHJhdGVneT11bmlvbiB6ICYmCisJdmVyaWZ5X25vdGVzIHkgdW5pb24KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgdG8gcHJlLW1lcmdlIHN0YXRlICh5KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveSByZWZzL25vdGVzL3leMSAmJgorCSMgVmVyaWZ5IHByZS1tZXJnZSBzdGF0ZQorCXZlcmlmeV9ub3RlcyB5IHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIHkgd2l0aCAidW5pb24iIHN0cmF0ZWd5IG92ZXJyaWRpbmcgcGVyLXJlZiBjb25maWd1cmF0aW9uID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCAtYyBub3Rlcy55Lm1lcmdlU3RyYXRlZ3k9InRoZWlycyIgbm90ZXMgbWVyZ2UgLS1zdHJhdGVneT11bmlvbiB6ICYmCisJdmVyaWZ5X25vdGVzIHkgdW5pb24KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgdG8gcHJlLW1lcmdlIHN0YXRlICh5KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveSByZWZzL25vdGVzL3leMSAmJgorCSMgVmVyaWZ5IHByZS1tZXJnZSBzdGF0ZQorCXZlcmlmeV9ub3RlcyB5IHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIHkgd2l0aCAidW5pb24iIHBlci1yZWYgb3ZlcnJpZGluZyBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gPT4gTm9uLWNvbmZsaWN0aW5nIDMtd2F5IG1lcmdlJyAnCisJZ2l0IC1jIG5vdGVzLnkubWVyZ2VTdHJhdGVneT0idW5pb24iIC1jIG5vdGVzLm1lcmdlU3RyYXRlZ3k9InRoZWlycyIgbm90ZXMgbWVyZ2UgeiAmJgorCXZlcmlmeV9ub3RlcyB5IHVuaW9uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy95XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggIm1hbnVhbCIgcGVyLXJlZiBvbmx5IGNoZWNrcyBzcGVjaWZpYyByZWYgY29uZmlndXJhdGlvbiA9PiBDb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBub3Rlcy56Lm1lcmdlU3RyYXRlZ3k9InVuaW9uIiBub3RlcyBtZXJnZSB6ICYmCisJZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgJiYKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc191bmlvbjIKKyQodGVzdF9vaWQgaGFzaDE1ZSkgJGNvbW1pdF9zaGExNQorJCh0ZXN0X29pZCBoYXNoMTRiKSAkY29tbWl0X3NoYTE0CiskKHRlc3Rfb2lkIGhhc2gxM2IpICRjb21taXRfc2hhMTMKKyQodGVzdF9vaWQgaGFzaDEyYikgJGNvbW1pdF9zaGExMgorJCh0ZXN0X29pZCBoYXNoMTFjKSAkY29tbWl0X3NoYTExCiskKHRlc3Rfb2lkIGhhc2gxMGEpICRjb21taXRfc2hhMTAKKyQodGVzdF9vaWQgaGFzaDA4YykgJGNvbW1pdF9zaGE4CiskKHRlc3Rfb2lkIGhhc2gwNWUpICRjb21taXRfc2hhNQorJCh0ZXN0X29pZCBoYXNoMDRiKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDAzYikgJGNvbW1pdF9zaGEzCiskKHRlc3Rfb2lkIGhhc2gwMmMpICRjb21taXRfc2hhMgorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ191bmlvbjIgPDxFT0YKKyRjb21taXRfc2hhMTUgMTV0aAoreiBub3RlcyBvbiAxNXRoIGNvbW1pdAorCit5IG5vdGVzIG9uIDE1dGggY29tbWl0CisKKyRjb21taXRfc2hhMTQgMTR0aAoreSBub3RlcyBvbiAxNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEzIDEzdGgKK3kgbm90ZXMgb24gMTN0aCBjb21taXQKKworJGNvbW1pdF9zaGExMiAxMnRoCit5IG5vdGVzIG9uIDEydGggY29tbWl0CisKKyRjb21taXRfc2hhMTEgMTF0aAoreiBub3RlcyBvbiAxMXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEwIDEwdGgKK3ggbm90ZXMgb24gMTB0aCBjb21taXQKKworJGNvbW1pdF9zaGE5IDl0aAorCiskY29tbWl0X3NoYTggOHRoCit6IG5vdGVzIG9uIDh0aCBjb21taXQKKworJGNvbW1pdF9zaGE3IDd0aAorCiskY29tbWl0X3NoYTYgNnRoCisKKyRjb21taXRfc2hhNSA1dGgKK3ogbm90ZXMgb24gNXRoIGNvbW1pdAorCit5IG5vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAoreSBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK3kgbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCit6IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeSBpbnRvIHogd2l0aCAidW5pb24iIHN0cmF0ZWd5ID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ogJiYKKwlnaXQgbm90ZXMgbWVyZ2UgLS1zdHJhdGVneT11bmlvbiB5ICYmCisJdmVyaWZ5X25vdGVzIHogdW5pb24yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeiknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3ogcmVmcy9ub3Rlcy96XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeiB6CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc19jYXRfc29ydF91bmlxCiskKHRlc3Rfb2lkIGhhc2gxNWYpICRjb21taXRfc2hhMTUKKyQodGVzdF9vaWQgaGFzaDE0YikgJGNvbW1pdF9zaGExNAorJCh0ZXN0X29pZCBoYXNoMTNiKSAkY29tbWl0X3NoYTEzCiskKHRlc3Rfb2lkIGhhc2gxMmIpICRjb21taXRfc2hhMTIKKyQodGVzdF9vaWQgaGFzaDExYykgJGNvbW1pdF9zaGExMQorJCh0ZXN0X29pZCBoYXNoMTBhKSAkY29tbWl0X3NoYTEwCiskKHRlc3Rfb2lkIGhhc2gwOGMpICRjb21taXRfc2hhOAorJCh0ZXN0X29pZCBoYXNoMDVmKSAkY29tbWl0X3NoYTUKKyQodGVzdF9vaWQgaGFzaDA0YikgJGNvbW1pdF9zaGE0CiskKHRlc3Rfb2lkIGhhc2gwM2IpICRjb21taXRfc2hhMworJCh0ZXN0X29pZCBoYXNoMDJjKSAkY29tbWl0X3NoYTIKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfY2F0X3NvcnRfdW5pcSA8PEVPRgorJGNvbW1pdF9zaGExNSAxNXRoCit5IG5vdGVzIG9uIDE1dGggY29tbWl0Cit6IG5vdGVzIG9uIDE1dGggY29tbWl0CisKKyRjb21taXRfc2hhMTQgMTR0aAoreSBub3RlcyBvbiAxNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEzIDEzdGgKK3kgbm90ZXMgb24gMTN0aCBjb21taXQKKworJGNvbW1pdF9zaGExMiAxMnRoCit5IG5vdGVzIG9uIDEydGggY29tbWl0CisKKyRjb21taXRfc2hhMTEgMTF0aAoreiBub3RlcyBvbiAxMXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTEwIDEwdGgKK3ggbm90ZXMgb24gMTB0aCBjb21taXQKKworJGNvbW1pdF9zaGE5IDl0aAorCiskY29tbWl0X3NoYTggOHRoCit6IG5vdGVzIG9uIDh0aCBjb21taXQKKworJGNvbW1pdF9zaGE3IDd0aAorCiskY29tbWl0X3NoYTYgNnRoCisKKyRjb21taXRfc2hhNSA1dGgKK3kgbm90ZXMgb24gNXRoIGNvbW1pdAoreiBub3RlcyBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKK3kgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCit5IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHkgaW50byB6IHdpdGggImNhdF9zb3J0X3VuaXEiIHN0cmF0ZWd5ID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCBub3RlcyBtZXJnZSAtLXN0cmF0ZWd5PWNhdF9zb3J0X3VuaXEgeSAmJgorCXZlcmlmeV9ub3RlcyB6IGNhdF9zb3J0X3VuaXEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgdG8gcHJlLW1lcmdlIHN0YXRlICh6KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveiByZWZzL25vdGVzL3peMSAmJgorCSMgVmVyaWZ5IHByZS1tZXJnZSBzdGF0ZQorCXZlcmlmeV9ub3RlcyB6IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeSBpbnRvIHogd2l0aCAiY2F0X3NvcnRfdW5pcSIgc3RyYXRlZ3kgY29uZmlndXJhdGlvbiBvcHRpb24gPT4gTm9uLWNvbmZsaWN0aW5nIDMtd2F5IG1lcmdlJyAnCisJZ2l0IC1jIG5vdGVzLm1lcmdlU3RyYXRlZ3k9ImNhdF9zb3J0X3VuaXEiIG5vdGVzIG1lcmdlIHkgJiYKKwl2ZXJpZnlfbm90ZXMgeiBjYXRfc29ydF91bmlxCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMxMC1ub3Rlcy1tZXJnZS1tYW51YWwtcmVzb2x2ZS5zaCBiL3QvdDMzMTAtbm90ZXMtbWVyZ2UtbWFudWFsLXJlc29sdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDNkNzJlMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMTAtbm90ZXMtbWVyZ2UtbWFudWFsLXJlc29sdmUuc2gKQEAgLTAsMCArMSw2MTcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgSm9oYW4gSGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IG5vdGVzIG1lcmdpbmcgd2l0aCBtYW51YWwgY29uZmxpY3QgcmVzb2x1dGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgU2V0IHVwIGEgbm90ZXMgbWVyZ2Ugc2NlbmFyaW8gd2l0aCBkaWZmZXJlbnQga2luZHMgb2YgY29uZmxpY3RzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb21taXRzJyAnCisJdGVzdF9jb21taXQgMXN0ICYmCisJdGVzdF9jb21taXQgMm5kICYmCisJdGVzdF9jb21taXQgM3JkICYmCisJdGVzdF9jb21taXQgNHRoICYmCisJdGVzdF9jb21taXQgNXRoICYmCisKKwl0ZXN0X29pZF9jYWNoZSA8PC1FT0YKKwloYXNoMDRhIHNoYTE6NmU4ZTNmZWJjYTNjMmJiODk2NzA0MzM1Y2M0ZDBjMzRjYjJmODcxNQorCWhhc2gwM2Egc2hhMTplNTM4OGMxMDg2MDQ1NmVlNjA2NzMwMjUzNDVmZTJlMTUzZWI4Y2Y4CisJaGFzaDAyYSBzaGExOmNlZWZhNjc0ODczNjcwZTdlY2QxMzE4MTRkOTA5NzIzY2NlMmI2NjkKKwloYXNoMDRiIHNoYTE6ZTJiZmQwNmEzN2RkMjAzMTY4NGE1OWE2ZTJiMDMzZTIxMjIzOWM3OAorCWhhc2gwM2Igc2hhMTo1NzcyZjQyNDA4YzBkZDZmMDk3YTdjYTJkMjRkZTBlNzhkMWM0NmIxCisJaGFzaDAxYiBzaGExOmIwYTYwMjFlYzAwNmQwN2U4MGU5YjIwZWM5YjQ0NGNiZDlkNTYwZDMKKwloYXNoMDRjIHNoYTE6Y2ZmNTljNzkzYzIwYmI0OWE0ZTAxYmMwNmZiMDZiYWQ2NDJlMGQ1NAorCWhhc2gwMmMgc2hhMToyODNiNDgyMTlhZWU5YTQxMDVmNmNhYjMzN2U3ODkwNjVjODJjMmI5CisJaGFzaDAxYyBzaGExOjBhODFkYTg5NTYzNDZlMTliY2IyN2E5MDZmMDRhZjMyN2UwM2UzMWIKKwloYXNoMDRkIHNoYTE6MDA0OTRhZGVjZjJkOTYzNWEwMmZhNDMxMzA4ZDY3OTkzZjg1Mzk2OAorCWhhc2gwMWUgc2hhMTpmNzVkMWRmODhjYmZlNDI1OGQ0OTg1MmYyNmNmYzgzZjJhZDQ0OTRiCisJaGFzaDA0ZiBzaGExOjAyMWZhYTIwZTkzMWZiNDg5ODZmZmM2MjgyYjRiYjA1NTUzYWM5NDYKKwloYXNoMDFmIHNoYTE6MGE1OWU3ODdlNmQ2ODhhYTYzMDllNTZlOGMxYjg5NDMxYTBmYzFjMQorCWhhc2gwNWcgc2hhMTozMDRkZmI0MzI1Y2YyNDMwMjViOTk1NzQ4NmViNjA1YTliNTFjMTk5CisKKwloYXNoMDRhCXNoYTI1NjpmMThhOTM1ZTY1ODY2MzQ1MDk4YjNiNzU0MDcxZGJmOWYzYWEzNTIwZWIyN2E3YjAzNmIyNzhjNWUyZjFlZDdlCisJaGFzaDAzYQlzaGEyNTY6NzEzMDM1ZGM5NDA2N2E2NGU1ZmE2ZTRlMTgyMWI3YzNiZGU0OWE3N2M3Y2IzZjgwZWFhZGVmYTFjYTQxYjNkMgorCWhhc2gwMmEJc2hhMjU2OmYxNjBhNjdlMDQ4YjZmYTc1YmVjMzk1MjE4NDE1NDA0NTA3NjY5MmNmNWRjY2QzZGEyMWUzZmQzNGI3YTNmMGYKKwloYXNoMDRiIHNoYTI1NjpjN2ZiYTBkNjEwNDkxN2ZiZjM1MjU4ZjQwYjlmYTRmYzY5N2NmYTk5MmRlZWNkMTU3MGEzYjA4ZDBhNTU4N2E5CisJaGFzaDAzYiBzaGEyNTY6NzI4N2EyZDc4YTM3NjZjMTgxYjA4ZGYzODk1MWQ3ODRiMDhiNzJhNDRmNTcxZWQ2ZDg1NWJkMGJlMjJjNzBmNgorCWhhc2gwMWIgc2hhMjU2OmRhOTZjZjc3OGMxNWQwYTJiYjc2Zjk4YjJhNjJmNmM5YzAxNzMwZmE3MDMwZThmMDhlZjAxOTEwNDhlN2Q2MjAKKwloYXNoMDRjIHNoYTI1NjpjYjYxNWQyZGVmNGI4MzRkNWY1NWIyMzUxZGY5N2RjOTJiZWU0ZjUwMDlkMjg1MjAxNDI3ZjM0OTA4MWM4YWNhCisJaGFzaDAyYyBzaGEyNTY6NjNiYjUyN2UwYjRlMWM4ZTFkZDBkNTRkZDc3OGNhN2MzNzE4Njg5ZmQ2ZTM3YzQ3MzA0NGNmYmNmMWNhY2ZkYgorCWhhc2gwMWMgc2hhMjU2OjViODcyMzdhYzFmYmFlMDI0NjI1NmZlZDlmOWExZjA3N2M0MTQwZmI3ZTY0NDQ5MjVmOGRiZmE1YWU0MDZjZDgKKwloYXNoMDRkIHNoYTI1NjplZWRkYzlmOWY2Y2IzZDZiMzliODYxNjU5ODUzZjEwODkxZGMzNzNlMGI2ZWVjYjA5ZTAzZTM5YjZjZTY0NzE0CisJaGFzaDAxZSBzaGEyNTY6MTA4ZjUyMWIxYTc0YzJlNmQwYjUyYTRlZGE4N2UwOTE2MmJmODQ3ZjdkMTkwY2ZjZTQ5NmVlMWFmMGIyOWE1YQorCWhhc2gwNGYgc2hhMjU2OjkwMWFjZGEwNDU0NTAyYjNiYmQyODFmMTMwYzQxOWU2YzhkZTc4YWZjZjcyYThkZWY4ZDQ1YWQzMTQ2MmJjZTQKKwloYXNoMDFmIHNoYTI1NjphMmQ5OWQxYjhiZjIzYzhhZjdkOWQ5MTM2ODQ1NGFkYzExMGRmZDVjYzA2OGE0Y2ViYjQ4NmVlOGY1YTFlMTZjCisJaGFzaDA1ZyBzaGEyNTY6NGZlZjAxNWIwMWRhOGVmZTkyOWE2OGUzYmI5YjhmYmFkODFmNTM5OTVmMDk3YmVmZThlYmM5M2YxMmFiOThlYworCUVPRgorJworCitjb21taXRfc2hhMT0kKGdpdCByZXYtcGFyc2UgMXN0Xntjb21taXR9KQorY29tbWl0X3NoYTI9JChnaXQgcmV2LXBhcnNlIDJuZF57Y29tbWl0fSkKK2NvbW1pdF9zaGEzPSQoZ2l0IHJldi1wYXJzZSAzcmRee2NvbW1pdH0pCitjb21taXRfc2hhND0kKGdpdCByZXYtcGFyc2UgNHRoXntjb21taXR9KQorY29tbWl0X3NoYTU9JChnaXQgcmV2LXBhcnNlIDV0aF57Y29tbWl0fSkKKwordmVyaWZ5X25vdGVzICgpIHsKKwlub3Rlc19yZWY9IiQxIgorCWdpdCAtYyBjb3JlLm5vdGVzUmVmPSJyZWZzL25vdGVzLyRub3Rlc19yZWYiIG5vdGVzIHwKKwkJc29ydCA+Im91dHB1dF9ub3Rlc18kbm90ZXNfcmVmIiAmJgorCXRlc3RfY21wICJleHBlY3Rfbm90ZXNfJG5vdGVzX3JlZiIgIm91dHB1dF9ub3Rlc18kbm90ZXNfcmVmIiAmJgorCWdpdCAtYyBjb3JlLm5vdGVzUmVmPSJyZWZzL25vdGVzLyRub3Rlc19yZWYiIGxvZyAtLWZvcm1hdD0iJUggJXMlbiVOIiBcCisJCT4ib3V0cHV0X2xvZ18kbm90ZXNfcmVmIiAmJgorCXRlc3RfY21wICJleHBlY3RfbG9nXyRub3Rlc19yZWYiICJvdXRwdXRfbG9nXyRub3Rlc19yZWYiCit9CisKK25vdGVzX21lcmdlX2ZpbGVzX2dvbmUgKCkgeworCSMgTm8gLmdpdC9OT1RFU19NRVJHRV8qIGZpbGVzIGxlZnQKKwl7IGxzIC5naXQvTk9URVNfTUVSR0VfKiA+b3V0cHV0IHx8IDo7IH0gJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0Cit9CisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc194CiskKHRlc3Rfb2lkIGhhc2gwNGEpICRjb21taXRfc2hhNAorJCh0ZXN0X29pZCBoYXNoMDNhKSAkY29tbWl0X3NoYTMKKyQodGVzdF9vaWQgaGFzaDAyYSkgJGNvbW1pdF9zaGEyCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ggPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAoreCBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK3ggbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCit4IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbWVyZ2UgYmFzZSAoeCknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDNyZCBjb21taXQiIDNyZCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gNHRoIGNvbW1pdCIgNHRoICYmCisJdmVyaWZ5X25vdGVzIHgKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3kKKyQodGVzdF9vaWQgaGFzaDA0YikgJGNvbW1pdF9zaGE0CiskKHRlc3Rfb2lkIGhhc2gwM2IpICRjb21taXRfc2hhMworJCh0ZXN0X29pZCBoYXNoMDFiKSAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeSA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreSBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKKworJGNvbW1pdF9zaGExIDFzdAoreSBub3RlcyBvbiAxc3QgY29tbWl0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBsb2NhbCBicmFuY2ggKHkpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy95IHJlZnMvbm90ZXMveCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3kgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDFzdCBjb21taXQiIDFzdCAmJgorCWdpdCBub3RlcyByZW1vdmUgMm5kICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiAzcmQgY29tbWl0IiAzcmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDR0aCBjb21taXQiIDR0aCAmJgorCXZlcmlmeV9ub3RlcyB5CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc196CiskKHRlc3Rfb2lkIGhhc2gwNGMpICRjb21taXRfc2hhNAorJCh0ZXN0X29pZCBoYXNoMDJjKSAkY29tbWl0X3NoYTIKKyQodGVzdF9vaWQgaGFzaDAxYykgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ogPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAoreiBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK3ogbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVtb3RlIGJyYW5jaCAoeiknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3ogcmVmcy9ub3Rlcy94ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveiAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInogbm90ZXMgb24gMXN0IGNvbW1pdCIgMXN0ICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieiBub3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIDNyZCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInogbm90ZXMgb24gNHRoIGNvbW1pdCIgNHRoICYmCisJdmVyaWZ5X25vdGVzIHoKKycKKworIyBBdCB0aGlzIHBvaW50LCBiZWZvcmUgbWVyZ2luZyB6IGludG8geSwgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHN0YXR1czoKKyMKKyMgY29tbWl0IHwgYmFzZS94ICB8IGxvY2FsL3kgfCByZW1vdGUveiB8IGRpZmYgZnJvbSB4IHRvIHkvegorIyAtLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMXN0ICAgIHwgW25vbmVdICB8IGIwYTYwMjEgfCAwYTgxZGE4ICB8IGFkZGVkICAgICAvIGFkZGVkIChkaWZmKQorIyAybmQgICAgfCBjZWVmYTY3IHwgW25vbmVdICB8IDI4M2I0ODIgIHwgcmVtb3ZlZCAgIC8gY2hhbmdlZAorIyAzcmQgICAgfCBlNTM4OGMxIHwgNTc3MmY0MiB8IFtub25lXSAgIHwgY2hhbmdlZCAgIC8gcmVtb3ZlZAorIyA0dGggICAgfCA2ZThlM2ZlIHwgZTJiZmQwNiB8IGNmZjU5YzcgIHwgY2hhbmdlZCAgIC8gY2hhbmdlZCAoZGlmZikKKyMgNXRoICAgIHwgW25vbmVdICB8IFtub25lXSAgfCBbbm9uZV0gICB8IFtub25lXQorCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3RfY29uZmxpY3RzCiskY29tbWl0X3NoYTEKKyRjb21taXRfc2hhMgorJGNvbW1pdF9zaGEzCiskY29tbWl0X3NoYTQKK0VPRgorCitjYXQgPmV4cGVjdF9jb25mbGljdF8kY29tbWl0X3NoYTEgPDxFT0YKKzw8PDw8PDwgcmVmcy9ub3Rlcy9tCit5IG5vdGVzIG9uIDFzdCBjb21taXQKKz09PT09PT0KK3ogbm90ZXMgb24gMXN0IGNvbW1pdAorPj4+Pj4+PiByZWZzL25vdGVzL3oKK0VPRgorCitjYXQgPmV4cGVjdF9jb25mbGljdF8kY29tbWl0X3NoYTIgPDxFT0YKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorRU9GCisKK2NhdCA+ZXhwZWN0X2NvbmZsaWN0XyRjb21taXRfc2hhMyA8PEVPRgoreSBub3RlcyBvbiAzcmQgY29tbWl0CitFT0YKKworY2F0ID5leHBlY3RfY29uZmxpY3RfJGNvbW1pdF9zaGE0IDw8RU9GCis8PDw8PDw8IHJlZnMvbm90ZXMvbQoreSBub3RlcyBvbiA0dGggY29tbWl0Cis9PT09PT09Cit6IG5vdGVzIG9uIDR0aCBjb21taXQKKz4+Pj4+Pj4gcmVmcy9ub3Rlcy96CitFT0YKKworY3AgZXhwZWN0X25vdGVzX3kgZXhwZWN0X25vdGVzX20KK2NwIGV4cGVjdF9sb2dfeSBleHBlY3RfbG9nX20KKworZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kgPiBwcmVfbWVyZ2VfeQorZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3ogPiBwcmVfbWVyZ2VfegorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8gbSAoPT0geSkgd2l0aCBkZWZhdWx0ICgibWFudWFsIikgcmVzb2x2ZXIgPT4gQ29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy95ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvbSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6ID5vdXRwdXQgMj4mMSAmJgorCSMgT3V0cHV0IHNob3VsZCBwb2ludCB0byB3aGVyZSB0byByZXNvbHZlIGNvbmZsaWN0cworCXRlc3RfaTE4bmdyZXAgIlxcLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSIgb3V0cHV0ICYmCisJIyBJbnNwZWN0IG1lcmdlIGNvbmZsaWN0cworCWxzIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUgPm91dHB1dF9jb25mbGljdHMgJiYKKwl0ZXN0X2NtcCBleHBlY3RfY29uZmxpY3RzIG91dHB1dF9jb25mbGljdHMgJiYKKwkoIGZvciBmIGluICQoY2F0IGV4cGVjdF9jb25mbGljdHMpOyBkbworCQl0ZXN0X2NtcCAiZXhwZWN0X2NvbmZsaWN0XyRmIiAiLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kZiIgfHwKKwkJZXhpdCAxCisJZG9uZSApICYmCisJIyBWZXJpZnkgdGhhdCBjdXJyZW50IG5vdGVzIHRyZWUgKHByZS1tZXJnZSkgaGFzIG5vdCBjaGFuZ2VkIChtID09IHkpCisJdmVyaWZ5X25vdGVzIHkgJiYKKwl2ZXJpZnlfbm90ZXMgbSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL20pIiA9ICIkKGNhdCBwcmVfbWVyZ2VfeSkiCisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc196CiskKHRlc3Rfb2lkIGhhc2gwNGQpICRjb21taXRfc2hhNAorJCh0ZXN0X29pZCBoYXNoMDJjKSAkY29tbWl0X3NoYTIKKyQodGVzdF9vaWQgaGFzaDAxYykgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ogPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAoreiBub3RlcyBvbiA0dGggY29tbWl0CisKK01vcmUgeiBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK3ogbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIG5vdGVzIGluIHonICcKKwlnaXQgbm90ZXMgLS1yZWYgeiBhcHBlbmQgLW0gIk1vcmUgeiBub3RlcyBvbiA0dGggY29tbWl0IiA0dGggJiYKKwl2ZXJpZnlfbm90ZXMgegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3QgZG8gbWVyZ2Ugdy9jb25mbGljdHMgd2hlbiBwcmV2aW91cyBtZXJnZSBpcyB1bmZpbmlzaGVkJyAnCisJdGVzdCAtZCAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIHogPm91dHB1dCAyPiYxICYmCisJIyBPdXRwdXQgc2hvdWxkIGluZGljYXRlIHdoYXQgaXMgd3JvbmcKKwl0ZXN0X2kxOG5ncmVwIC1xICJcXC5naXQvTk9URVNfTUVSR0VfXFwqIGV4aXN0cyIgb3V0cHV0CisnCisKKyMgU2V0dXAgbm9uLWNvbmZsaWN0aW5nIG1lcmdlIGJldHdlZW4geCBhbmQgbmV3IG5vdGVzIHJlZiB3CisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc193CiskKHRlc3Rfb2lkIGhhc2gwMmEpICRjb21taXRfc2hhMgorJCh0ZXN0X29pZCBoYXNoMDFlKSAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfdyA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorCiskY29tbWl0X3NoYTQgNHRoCisKKyRjb21taXRfc2hhMyAzcmQKKworJGNvbW1pdF9zaGEyIDJuZAoreCBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK3cgbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdW5yZWxhdGVkIG5vdGVzIHJlZiAodyknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy93ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAidyBub3RlcyBvbiAxc3QgY29tbWl0IiAxc3QgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDJuZCBjb21taXQiIDJuZCAmJgorCXZlcmlmeV9ub3RlcyB3CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc193CiskKHRlc3Rfb2lkIGhhc2gwNGEpICRjb21taXRfc2hhNAorJCh0ZXN0X29pZCBoYXNoMDNhKSAkY29tbWl0X3NoYTMKKyQodGVzdF9vaWQgaGFzaDAyYSkgJGNvbW1pdF9zaGEyCiskKHRlc3Rfb2lkIGhhc2gwMWUpICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ193IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKK3ggbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCit4IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAoreCBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK3cgbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FuIGRvIG1lcmdlIHdpdGhvdXQgY29uZmxpY3RzIGV2ZW4gaWYgcHJldmlvdXMgbWVyZ2UgaXMgdW5maW5pc2hlZCAoeCA9PiB3KScgJworCXRlc3QgLWQgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSAmJgorCWdpdCBub3RlcyBtZXJnZSB4ICYmCisJdmVyaWZ5X25vdGVzIHcgJiYKKwkjIFZlcmlmeSB0aGF0IG90aGVyIG5vdGVzIHJlZnMgaGFzIG5vdCBjaGFuZ2VkICh4IGFuZCB5KQorCXZlcmlmeV9ub3RlcyB4ICYmCisJdmVyaWZ5X25vdGVzIHkKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX20KKyQodGVzdF9vaWQgaGFzaDA0ZikgJGNvbW1pdF9zaGE0CiskKHRlc3Rfb2lkIGhhc2gwM2IpICRjb21taXRfc2hhMworJCh0ZXN0X29pZCBoYXNoMDJjKSAkY29tbWl0X3NoYTIKKyQodGVzdF9vaWQgaGFzaDAxZikgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX20gPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAoreSBhbmQgeiBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK3kgbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCit6IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAoreSBhbmQgeiBub3RlcyBvbiAxc3QgY29tbWl0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgYWxsb3cgbWl4aW5nIC0tY29tbWl0IGFuZCAtLWFib3J0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IC0tYWJvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGFsbG93IG1peGluZyAtLWNvbW1pdCBhbmQgLS1zdHJhdGVneScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCAtLXN0cmF0ZWd5IHRoZWlycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgYWxsb3cgbWl4aW5nIC0tYWJvcnQgYW5kIC0tc3RyYXRlZ3knICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCAtLXN0cmF0ZWd5IHRoZWlycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5hbGl6ZSBjb25mbGljdGluZyBtZXJnZSAoeiA9PiBtKScgJworCSMgUmVzb2x2ZSBjb25mbGljdHMgYW5kIGZpbmFsaXplIG1lcmdlCisJY2F0ID4uZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhMSA8PEVPRiAmJgoreSBhbmQgeiBub3RlcyBvbiAxc3QgY29tbWl0CitFT0YKKwljYXQgPi5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGE0IDw8RU9GICYmCit5IGFuZCB6IG5vdGVzIG9uIDR0aCBjb21taXQKK0VPRgorCWdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCAmJgorCW5vdGVzX21lcmdlX2ZpbGVzX2dvbmUgJiYKKwkjIE1lcmdlIGNvbW1pdCBoYXMgcHJlLW1lcmdlIHkgYW5kIHByZS1tZXJnZSB6IGFzIHBhcmVudHMKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tXjEpIiA9ICIkKGNhdCBwcmVfbWVyZ2VfeSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbV4yKSIgPSAiJChjYXQgcHJlX21lcmdlX3opIiAmJgorCSMgTWVyZ2UgY29tbWl0IG1lbnRpb25zIHRoZSBub3RlcyByZWZzIG1lcmdlZAorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JUIgcmVmcy9ub3Rlcy9tID4gbWVyZ2VfY29tbWl0X21zZyAmJgorCWdyZXAgLXEgcmVmcy9ub3Rlcy9tIG1lcmdlX2NvbW1pdF9tc2cgJiYKKwlncmVwIC1xIHJlZnMvbm90ZXMveiBtZXJnZV9jb21taXRfbXNnICYmCisJIyBNZXJnZSBjb21taXQgbWVudGlvbnMgY29uZmxpY3Rpbmcgbm90ZXMKKwlncmVwIC1xICJDb25mbGljdHMiIG1lcmdlX2NvbW1pdF9tc2cgJiYKKwkoIGZvciBzaGExIGluICQoY2F0IGV4cGVjdF9jb25mbGljdHMpOyBkbworCQlncmVwIC1xICIkc2hhMSIgbWVyZ2VfY29tbWl0X21zZyB8fAorCQlleGl0IDEKKwlkb25lICkgJiYKKwkjIFZlcmlmeSBjb250ZW50cyBvZiBtZXJnZSByZXN1bHQKKwl2ZXJpZnlfbm90ZXMgbSAmJgorCSMgVmVyaWZ5IHRoYXQgb3RoZXIgbm90ZXMgcmVmcyBoYXMgbm90IGNoYW5nZWQgKHcsIHgsIHkgYW5kIHopCisJdmVyaWZ5X25vdGVzIHcgJiYKKwl2ZXJpZnlfbm90ZXMgeCAmJgorCXZlcmlmeV9ub3RlcyB5ICYmCisJdmVyaWZ5X25vdGVzIHoKKycKKworY2F0ID5leHBlY3RfY29uZmxpY3RfJGNvbW1pdF9zaGE0IDw8RU9GCis8PDw8PDw8IHJlZnMvbm90ZXMvbQoreSBub3RlcyBvbiA0dGggY29tbWl0Cis9PT09PT09Cit6IG5vdGVzIG9uIDR0aCBjb21taXQKKworTW9yZSB6IG5vdGVzIG9uIDR0aCBjb21taXQKKz4+Pj4+Pj4gcmVmcy9ub3Rlcy96CitFT0YKKworY3AgZXhwZWN0X25vdGVzX3kgZXhwZWN0X25vdGVzX20KK2NwIGV4cGVjdF9sb2dfeSBleHBlY3RfbG9nX20KKworZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kgPiBwcmVfbWVyZ2VfeQorZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3ogPiBwcmVfbWVyZ2VfegorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRvIG1lcmdlIG9mIHogaW50byBtICg9PSB5KSB3aXRoIGRlZmF1bHQgKCJtYW51YWwiKSByZXNvbHZlciA9PiBDb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3kgJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9tICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIHogPm91dHB1dCAyPiYxICYmCisJIyBPdXRwdXQgc2hvdWxkIHBvaW50IHRvIHdoZXJlIHRvIHJlc29sdmUgY29uZmxpY3RzCisJdGVzdF9pMThuZ3JlcCAiXFwuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIiBvdXRwdXQgJiYKKwkjIEluc3BlY3QgbWVyZ2UgY29uZmxpY3RzCisJbHMgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSA+b3V0cHV0X2NvbmZsaWN0cyAmJgorCXRlc3RfY21wIGV4cGVjdF9jb25mbGljdHMgb3V0cHV0X2NvbmZsaWN0cyAmJgorCSggZm9yIGYgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCXRlc3RfY21wICJleHBlY3RfY29uZmxpY3RfJGYiICIuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRmIiB8fAorCQlleGl0IDEKKwlkb25lICkgJiYKKwkjIFZlcmlmeSB0aGF0IGN1cnJlbnQgbm90ZXMgdHJlZSAocHJlLW1lcmdlKSBoYXMgbm90IGNoYW5nZWQgKG0gPT0geSkKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyBtICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnQgbm90ZXMgbWVyZ2UnICcKKwlnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCAmJgorCW5vdGVzX21lcmdlX2ZpbGVzX2dvbmUgJiYKKwkjIG0gaGFzIG5vdCBtb3ZlZCAoc3RpbGwgPT0geSkKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgPSAiJChjYXQgcHJlX21lcmdlX3kpIiAmJgorCSMgVmVyaWZ5IHRoYXQgb3RoZXIgbm90ZXMgcmVmcyBoYXMgbm90IGNoYW5nZWQgKHcsIHgsIHkgYW5kIHopCisJdmVyaWZ5X25vdGVzIHcgJiYKKwl2ZXJpZnlfbm90ZXMgeCAmJgorCXZlcmlmeV9ub3RlcyB5ICYmCisJdmVyaWZ5X25vdGVzIHoKKycKKworZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kgPiBwcmVfbWVyZ2VfeQorZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3ogPiBwcmVfbWVyZ2VfegorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRvIG1lcmdlIG9mIHogaW50byBtICg9PSB5KSB3aXRoIGRlZmF1bHQgKCJtYW51YWwiKSByZXNvbHZlciA9PiBDb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6ID5vdXRwdXQgMj4mMSAmJgorCSMgT3V0cHV0IHNob3VsZCBwb2ludCB0byB3aGVyZSB0byByZXNvbHZlIGNvbmZsaWN0cworCXRlc3RfaTE4bmdyZXAgIlxcLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSIgb3V0cHV0ICYmCisJIyBJbnNwZWN0IG1lcmdlIGNvbmZsaWN0cworCWxzIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUgPm91dHB1dF9jb25mbGljdHMgJiYKKwl0ZXN0X2NtcCBleHBlY3RfY29uZmxpY3RzIG91dHB1dF9jb25mbGljdHMgJiYKKwkoIGZvciBmIGluICQoY2F0IGV4cGVjdF9jb25mbGljdHMpOyBkbworCQl0ZXN0X2NtcCAiZXhwZWN0X2NvbmZsaWN0XyRmIiAiLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kZiIgfHwKKwkJZXhpdCAxCisJZG9uZSApICYmCisJIyBWZXJpZnkgdGhhdCBjdXJyZW50IG5vdGVzIHRyZWUgKHByZS1tZXJnZSkgaGFzIG5vdCBjaGFuZ2VkIChtID09IHkpCisJdmVyaWZ5X25vdGVzIHkgJiYKKwl2ZXJpZnlfbm90ZXMgbSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL20pIiA9ICIkKGNhdCBwcmVfbWVyZ2VfeSkiCisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc19tCiskKHRlc3Rfb2lkIGhhc2gwNWcpICRjb21taXRfc2hhNQorJCh0ZXN0X29pZCBoYXNoMDJjKSAkY29tbWl0X3NoYTIKKyQodGVzdF9vaWQgaGFzaDAxZikgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX20gPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKK25ldyBub3RlIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAorCiskY29tbWl0X3NoYTMgM3JkCisKKyRjb21taXRfc2hhMiAybmQKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0Cit5IGFuZCB6IG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCArIHJlbW92ZSBub3RlcyBpbiBmaW5hbGl6ZWQgbWVyZ2UgKHogPT4gbSknICcKKwkjIFJlc29sdmUgb25lIGNvbmZsaWN0CisJY2F0ID4uZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhMSA8PEVPRiAmJgoreSBhbmQgeiBub3RlcyBvbiAxc3QgY29tbWl0CitFT0YKKwkjIFJlbW92ZSBhbm90aGVyIGNvbmZsaWN0CisJcm0gLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTQgJiYKKwkjIFJlbW92ZSBhIEQvRiBjb25mbGljdAorCXJtIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGEzICYmCisJIyBBZGQgYSBuZXcgbm90ZQorCWVjaG8gIm5ldyBub3RlIG9uIDV0aCBjb21taXQiID4gLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTUgJiYKKwkjIEZpbmFsaXplIG1lcmdlCisJZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0ICYmCisJbm90ZXNfbWVyZ2VfZmlsZXNfZ29uZSAmJgorCSMgTWVyZ2UgY29tbWl0IGhhcyBwcmUtbWVyZ2UgeSBhbmQgcHJlLW1lcmdlIHogYXMgcGFyZW50cworCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL21eMSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tXjIpIiA9ICIkKGNhdCBwcmVfbWVyZ2VfeikiICYmCisJIyBNZXJnZSBjb21taXQgbWVudGlvbnMgdGhlIG5vdGVzIHJlZnMgbWVyZ2VkCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lQiByZWZzL25vdGVzL20gPiBtZXJnZV9jb21taXRfbXNnICYmCisJZ3JlcCAtcSByZWZzL25vdGVzL20gbWVyZ2VfY29tbWl0X21zZyAmJgorCWdyZXAgLXEgcmVmcy9ub3Rlcy96IG1lcmdlX2NvbW1pdF9tc2cgJiYKKwkjIE1lcmdlIGNvbW1pdCBtZW50aW9ucyBjb25mbGljdGluZyBub3RlcworCWdyZXAgLXEgIkNvbmZsaWN0cyIgbWVyZ2VfY29tbWl0X21zZyAmJgorCSggZm9yIHNoYTEgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCWdyZXAgLXEgIiRzaGExIiBtZXJnZV9jb21taXRfbXNnIHx8CisJCWV4aXQgMQorCWRvbmUgKSAmJgorCSMgVmVyaWZ5IGNvbnRlbnRzIG9mIG1lcmdlIHJlc3VsdAorCXZlcmlmeV9ub3RlcyBtICYmCisJIyBWZXJpZnkgdGhhdCBvdGhlciBub3RlcyByZWZzIGhhcyBub3QgY2hhbmdlZCAodywgeCwgeSBhbmQgeikKKwl2ZXJpZnlfbm90ZXMgdyAmJgorCXZlcmlmeV9ub3RlcyB4ICYmCisJdmVyaWZ5X25vdGVzIHkgJiYKKwl2ZXJpZnlfbm90ZXMgegorJworCitjcCBleHBlY3Rfbm90ZXNfeSBleHBlY3Rfbm90ZXNfbQorY3AgZXhwZWN0X2xvZ195IGV4cGVjdF9sb2dfbQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRvIG1lcmdlIG9mIHogaW50byBtICg9PSB5KSB3aXRoIGRlZmF1bHQgKCJtYW51YWwiKSByZXNvbHZlciA9PiBDb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3kgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeiA+b3V0cHV0IDI+JjEgJiYKKwkjIE91dHB1dCBzaG91bGQgcG9pbnQgdG8gd2hlcmUgdG8gcmVzb2x2ZSBjb25mbGljdHMKKwl0ZXN0X2kxOG5ncmVwICJcXC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUiIG91dHB1dCAmJgorCSMgSW5zcGVjdCBtZXJnZSBjb25mbGljdHMKKwlscyAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFID5vdXRwdXRfY29uZmxpY3RzICYmCisJdGVzdF9jbXAgZXhwZWN0X2NvbmZsaWN0cyBvdXRwdXRfY29uZmxpY3RzICYmCisJKCBmb3IgZiBpbiAkKGNhdCBleHBlY3RfY29uZmxpY3RzKTsgZG8KKwkJdGVzdF9jbXAgImV4cGVjdF9jb25mbGljdF8kZiIgIi5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGYiIHx8CisJCWV4aXQgMQorCWRvbmUgKSAmJgorCSMgVmVyaWZ5IHRoYXQgY3VycmVudCBub3RlcyB0cmVlIChwcmUtbWVyZ2UpIGhhcyBub3QgY2hhbmdlZCAobSA9PSB5KQorCXZlcmlmeV9ub3RlcyB5ICYmCisJdmVyaWZ5X25vdGVzIG0gJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgPSAiJChjYXQgcHJlX21lcmdlX3kpIgorJworCitjcCBleHBlY3Rfbm90ZXNfdyBleHBlY3Rfbm90ZXNfbQorY3AgZXhwZWN0X2xvZ193IGV4cGVjdF9sb2dfbQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCBub3RlcyByZWYgbSB0byBzb21ld2hlcmUgZWxzZSAodyknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy93ICYmCisJdmVyaWZ5X25vdGVzIG0gJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvdykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgdG8gZmluYWxpemUgY29uZmxpY3RpbmcgbWVyZ2UgaWYgdW5kZXJseWluZyByZWYgaGFzIG1vdmVkIGluIHRoZSBtZWFudGltZSAobSAhPSBOT1RFU19NRVJHRV9QQVJUSUFMXjEpJyAnCisJIyBSZXNvbHZlIGNvbmZsaWN0cworCWNhdCA+LmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTEgPDxFT0YgJiYKK3kgYW5kIHogbm90ZXMgb24gMXN0IGNvbW1pdAorRU9GCisJY2F0ID4uZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhNCA8PEVPRiAmJgoreSBhbmQgeiBub3RlcyBvbiA0dGggY29tbWl0CitFT0YKKwkjIEZhaWwgdG8gZmluYWxpemUgbWVyZ2UKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgPm91dHB1dCAyPiYxICYmCisJIyAuZ2l0L05PVEVTX01FUkdFXyogbXVzdCByZW1haW4KKwl0ZXN0IC1mIC5naXQvTk9URVNfTUVSR0VfUEFSVElBTCAmJgorCXRlc3QgLWYgLmdpdC9OT1RFU19NRVJHRV9SRUYgJiYKKwl0ZXN0IC1mIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGExICYmCisJdGVzdCAtZiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhMiAmJgorCXRlc3QgLWYgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTMgJiYKKwl0ZXN0IC1mIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGE0ICYmCisJIyBSZWZzIGFyZSB1bmNoYW5nZWQKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvdykiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSkiID0gIiQoZ2l0IHJldi1wYXJzZSBOT1RFU19NRVJHRV9QQVJUSUFMXjEpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL20pIiAhPSAiJChnaXQgcmV2LXBhcnNlIE5PVEVTX01FUkdFX1BBUlRJQUxeMSkiICYmCisJIyBNZW50aW9uIHJlZnMvbm90ZXMvbSwgYW5kIGl0cyBjdXJyZW50IGFuZCBleHBlY3RlZCB2YWx1ZSBpbiBvdXRwdXQKKwl0ZXN0X2kxOG5ncmVwIC1xICJyZWZzL25vdGVzL20iIG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgLXEgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL20pIiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICIkKGdpdCByZXYtcGFyc2UgTk9URVNfTUVSR0VfUEFSVElBTF4xKSIgb3V0cHV0ICYmCisJIyBWZXJpZnkgdGhhdCBvdGhlciBub3RlcyByZWZzIGhhcyBub3QgY2hhbmdlZCAodywgeCwgeSBhbmQgeikKKwl2ZXJpZnlfbm90ZXMgdyAmJgorCXZlcmlmeV9ub3RlcyB4ICYmCisJdmVyaWZ5X25vdGVzIHkgJiYKKwl2ZXJpZnlfbm90ZXMgegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNvbHZlIHNpdHVhdGlvbiBieSBhYm9ydGluZyB0aGUgbm90ZXMgbWVyZ2UnICcKKwlnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCAmJgorCW5vdGVzX21lcmdlX2ZpbGVzX2dvbmUgJiYKKwkjIG0gaGFzIG5vdCBtb3ZlZCAoc3RpbGwgPT0gdykKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvdykiICYmCisJIyBWZXJpZnkgdGhhdCBvdGhlciBub3RlcyByZWZzIGhhcyBub3QgY2hhbmdlZCAodywgeCwgeSBhbmQgeikKKwl2ZXJpZnlfbm90ZXMgdyAmJgorCXZlcmlmeV9ub3RlcyB4ICYmCisJdmVyaWZ5X25vdGVzIHkgJiYKKwl2ZXJpZnlfbm90ZXMgegorJworCitjYXQgPmV4cGVjdF9ub3RlcyA8PEVPRgorZm9vCitiYXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggY3dkIGJlZm9yZSBjb21taXR0aW5nIG5vdGVzIG1lcmdlJyAnCisJZ2l0IG5vdGVzIGFkZCAtbSBmb28gSEVBRCAmJgorCWdpdCBub3RlcyAtLXJlZj1vdGhlciBhZGQgLW0gYmFyIEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgcmVmcy9ub3Rlcy9vdGhlciAmJgorCSgKKwkJY2QgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSAmJgorCQllY2hvICJmb28iID4gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCWVjaG8gImJhciIgPj4gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCWdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdAorCSkgJiYKKwlnaXQgbm90ZXMgc2hvdyBIRUFEID4gYWN0dWFsX25vdGVzICYmCisJdGVzdF9jbXAgZXhwZWN0X25vdGVzIGFjdHVhbF9ub3RlcworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMTEtbm90ZXMtbWVyZ2UtZmFub3V0LnNoIGIvdC90MzMxMS1ub3Rlcy1tZXJnZS1mYW5vdXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWI2NzU0MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMTEtbm90ZXMtbWVyZ2UtZmFub3V0LnNoCkBAIC0wLDAgKzEsNDQ2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEpvaGFuIEhlcmxhbmQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBub3RlcyBtZXJnaW5nIGF0IHZhcmlvdXMgZmFub3V0IGxldmVscycKKworLiAuL3Rlc3QtbGliLnNoCisKK3ZlcmlmeV9ub3RlcyAoKSB7CisJbm90ZXNfcmVmPSIkMSIKKwljb21taXQ9IiQyIgorCWlmIHRlc3QgLWYgImV4cGVjdF9ub3Rlc18kbm90ZXNfcmVmIgorCXRoZW4KKwkJZ2l0IC1jIGNvcmUubm90ZXNSZWY9InJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgbm90ZXMgfAorCQkJc29ydCA+Im91dHB1dF9ub3Rlc18kbm90ZXNfcmVmIiAmJgorCQl0ZXN0X2NtcCAiZXhwZWN0X25vdGVzXyRub3Rlc19yZWYiICJvdXRwdXRfbm90ZXNfJG5vdGVzX3JlZiIgfHwKKwkJCXJldHVybiAxCisJZmkgJiYKKwlnaXQgLWMgY29yZS5ub3Rlc1JlZj0icmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiBsb2cgLS1mb3JtYXQ9IiVIICVzJW4lTiIgXAorCQkiJGNvbW1pdCIgPiJvdXRwdXRfbG9nXyRub3Rlc19yZWYiICYmCisJdGVzdF9jbXAgImV4cGVjdF9sb2dfJG5vdGVzX3JlZiIgIm91dHB1dF9sb2dfJG5vdGVzX3JlZiIKK30KKwordmVyaWZ5X2Zhbm91dCAoKSB7CisJbm90ZXNfcmVmPSIkMSIKKwkjIEV4cGVjdCBlbnRpcmUgbm90ZXMgdHJlZSB0byBoYXZlIGEgZmFub3V0ID09IDEKKwlnaXQgcmV2LXBhcnNlIC0tcXVpZXQgLS12ZXJpZnkgInJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgPi9kZXYvbnVsbCAmJgorCWdpdCBscy10cmVlIC1yIC0tbmFtZS1vbmx5ICJyZWZzL25vdGVzLyRub3Rlc19yZWYiIHwKKwl3aGlsZSByZWFkIHBhdGgKKwlkbworCQllY2hvICIkcGF0aCIgfCBncmVwICJeLi4vWzAtOWEtZl0qJCIgfHwgeworCQkJZWNobyAiSW52YWxpZCBwYXRoIFwiJHBhdGhcIiIgJiYKKwkJCXJldHVybiAxOworCQl9CisJZG9uZQorfQorCit2ZXJpZnlfbm9fZmFub3V0ICgpIHsKKwlub3Rlc19yZWY9IiQxIgorCSMgRXhwZWN0IGVudGlyZSBub3RlcyB0cmVlIHRvIGhhdmUgYSBmYW5vdXQgPT0gMAorCWdpdCByZXYtcGFyc2UgLS1xdWlldCAtLXZlcmlmeSAicmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiA+L2Rldi9udWxsICYmCisJZ2l0IGxzLXRyZWUgLXIgLS1uYW1lLW9ubHkgInJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgfAorCXdoaWxlIHJlYWQgcGF0aAorCWRvCisJCWVjaG8gIiRwYXRoIiB8IGdyZXAgLXYgIl4uLi8uKiIgfHwgeworCQkJZWNobyAiSW52YWxpZCBwYXRoIFwiJHBhdGhcIiIgJiYKKwkJCXJldHVybiAxOworCQl9CisJZG9uZQorfQorCisjIFNldCB1cCBhIG5vdGVzIG1lcmdlIHNjZW5hcmlvIHdpdGggZGlmZmVyZW50IGtpbmRzIG9mIGNvbmZsaWN0cwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYSBmZXcgaW5pdGlhbCBjb21taXRzIHdpdGggbm90ZXMgKG5vdGVzIHJlZjogeCknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1CisJZG8KKwkJdGVzdF9jb21taXQgImNvbW1pdCRpIiA+L2Rldi9udWxsICYmCisJCWdpdCBub3RlcyBhZGQgLW0gIm5vdGVzIGZvciBjb21taXQkaSIgfHwgcmV0dXJuIDEKKwlkb25lICYmCisKKwlnaXQgbG9nIC0tZm9ybWF0PW9uZWxpbmUgJiYKKworCXRlc3Rfb2lkX2NhY2hlIDw8LUVPRgorCWhhc2gwNWEgc2hhMTphZWQ5MTE1NWM3YTcyYzIxODhlNzgxZmRmNDBlMGYzNzYxYjI5OWRiCisJaGFzaDA0YSBzaGExOjk5ZmFiMjY4ZjlkN2VlN2IwMTFlMDkxYTQzNmM3OGRlZjhlZWVlNjkKKwloYXNoMDNhIHNoYTE6OTUzYzIwYWUyNmM3YWEwYjQyOGMyMDY5M2ZlMzhiYzY4N2Y5ZDFhOQorCWhhc2gwMmEgc2hhMTo2MzU4Nzk2MTMxYjg5MTZlYWEyZGRlNjkwMjY0Mjk0MmExY2IzN2UxCisJaGFzaDAxYSBzaGExOmIwMmQ0NTljMzJmMGU2OGYyZmUwOTgxMDMzYmIzNGYzODc3NmJhNDcKKwloYXNoMDNiIHNoYTE6OWY1MDZlZTcwZTIwMzc5ZDdmNzgyMDRjNzdiMzM0ZjQzZDc3NDEwZAorCWhhc2gwMmIgc2hhMToyM2E0N2Q2ZWE3ZDU4OTg5NWZhZjgwMDc1MjA1NDgxOGUxZTc2MjdiCisKKwloYXNoMDVhIHNoYTI1NjozYWFlNWQyNjYxOWQ5NmRiYTkzNzk1ZjY2MzI1NzE2ZTRjYmM0ODY4ODRmOTVhNmFkZWU4ZmIwNjE1YTc2ZDEyCisJaGFzaDA0YSBzaGEyNTY6MDdlNDNkZDNkODlmZTYzNGQzMjUyZTI1M2I0MjZhYWNjNzI4NWE5OTVkY2RiY2Y5NGFjMjg0MDYwYTExMjJjZgorCWhhc2gwM2Egc2hhMjU2OjI2ZmI1MmVhYTdmNDg2NmJmNzM1MjU0NTg3YmU3YjMxMjA5ZWMxMGU1MjU5MTJmZmQ4ZThiYTU0OWJhODkyZmYKKwloYXNoMDJhIHNoYTI1NjpiNTdlYmRmMjM2MzRlNzUwZGNiYzRiOWEzNzk5MWQ3MGY5MDgzMGQ1NjhhMGU0NTI5Y2U5ZGUwYTNmOGQ2MDVjCisJaGFzaDAxYSBzaGEyNTY6Mzc3OTAzYjE1NzJiZDUxMTcwODdhNTUxOGZjYjEwMTFiNTA1M2NjY2JjNTllM2M3YzgyM2E4NjE1MjA0MTczYgorCWhhc2gwM2Igc2hhMjU2OjA0ZTdiMzkyZmRhN2MxODViZmExN2M5MTc5YjU2ZGI3MzJlZGMyZGMyYjNiZjg4NzMwOGRjYWFiYjcxNzI3MGQKKwloYXNoMDJiIHNoYTI1Njo2NjA5OWFhYWVjNDlhNDg1ZWQ5OTBhY2FkZDlhOWI4MTIzMmVhNTkyMDc5OTY0MTEzZDhmNTgxZmY2OWVmNTBiCisJRU9GCisnCisKK2NvbW1pdF9zaGExPSQoZ2l0IHJldi1wYXJzZSBjb21taXQxXntjb21taXR9KQorY29tbWl0X3NoYTI9JChnaXQgcmV2LXBhcnNlIGNvbW1pdDJee2NvbW1pdH0pCitjb21taXRfc2hhMz0kKGdpdCByZXYtcGFyc2UgY29tbWl0M157Y29tbWl0fSkKK2NvbW1pdF9zaGE0PSQoZ2l0IHJldi1wYXJzZSBjb21taXQ0Xntjb21taXR9KQorY29tbWl0X3NoYTU9JChnaXQgcmV2LXBhcnNlIGNvbW1pdDVee2NvbW1pdH0pCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc194CiskKHRlc3Rfb2lkIGhhc2gwNWEpICRjb21taXRfc2hhNQorJCh0ZXN0X29pZCBoYXNoMDRhKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDAzYSkgJGNvbW1pdF9zaGEzCiskKHRlc3Rfb2lkIGhhc2gwMmEpICRjb21taXRfc2hhMgorJCh0ZXN0X29pZCBoYXNoMDFhKSAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeCA8PEVPRgorJGNvbW1pdF9zaGE1IGNvbW1pdDUKK25vdGVzIGZvciBjb21taXQ1CisKKyRjb21taXRfc2hhNCBjb21taXQ0Citub3RlcyBmb3IgY29tbWl0NAorCiskY29tbWl0X3NoYTMgY29tbWl0Mworbm90ZXMgZm9yIGNvbW1pdDMKKworJGNvbW1pdF9zaGEyIGNvbW1pdDIKK25vdGVzIGZvciBjb21taXQyCisKKyRjb21taXRfc2hhMSBjb21taXQxCitub3RlcyBmb3IgY29tbWl0MQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FuaXR5IGNoZWNrICh4KScgJworCXZlcmlmeV9ub3RlcyB4IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm9fZmFub3V0IHgKKycKKworbnVtPTMwMAorCitjcCBleHBlY3RfbG9nX3ggZXhwZWN0X2xvZ195CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0FkZCBhIGZldyBodW5kcmVkIGNvbW1pdHMgdy9ub3RlcyB0byB0cmlnZ2VyIGZhbm91dCAoeCAtPiB5KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveSByZWZzL25vdGVzL3ggJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy95ICYmCisJdGVzdF9jb21taXRfYnVsayAtLXN0YXJ0PTYgLS1pZD1jb21taXQgJCgobnVtIC0gNSkpICYmCisJaT0wICYmCisJd2hpbGUgdGVzdCAkaSAtbHQgJCgobnVtIC0gNSkpCisJZG8KKwkJZ2l0IG5vdGVzIGFkZCAtbSAibm90ZXMgZm9yIGNvbW1pdCRpIiBIRUFEfiRpIHx8IHJldHVybiAxCisJCWk9JCgoaSArIDEpKQorCWRvbmUgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95KSIgIT0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3gpIiAmJgorCSMgRXhwZWN0ZWQgbnVtYmVyIG9mIGNvbW1pdHMgYW5kIG5vdGVzCisJdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIHwgd2MgLWwpID0gJG51bSAmJgorCXRlc3QgJChnaXQgbm90ZXMgbGlzdCB8IHdjIC1sKSA9ICRudW0gJiYKKwkjIDUgZmlyc3Qgbm90ZXMgdW5jaGFuZ2VkCisJdmVyaWZ5X25vdGVzIHkgY29tbWl0NQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RlcyB0cmVlIGhhcyBmYW5vdXQgKHkpJyAndmVyaWZ5X2Zhbm91dCB5JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOby1vcCBtZXJnZSAoYWxyZWFkeSBpbmNsdWRlZCkgKHggPT4geSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy95ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvbSAmJgorCWdpdCBub3RlcyBtZXJnZSB4ICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGYXN0LWZvcndhcmQgbWVyZ2UgKHkgPT4geCknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIG1lcmdlIHkgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSkiCisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc196CiskKHRlc3Rfb2lkIGhhc2gwM2IpICRjb21taXRfc2hhMworJCh0ZXN0X29pZCBoYXNoMDJiKSAkY29tbWl0X3NoYTIKKyQodGVzdF9vaWQgaGFzaDAxYSkgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ogPDxFT0YKKyRjb21taXRfc2hhNSBjb21taXQ1CisKKyRjb21taXRfc2hhNCBjb21taXQ0CisKKyRjb21taXRfc2hhMyBjb21taXQzCitub3RlcyBmb3IgY29tbWl0MworCithcHBlbmRlZCBub3RlcyBmb3IgY29tbWl0MworCiskY29tbWl0X3NoYTIgY29tbWl0MgorbmV3IG5vdGVzIGZvciBjb21taXQyCisKKyRjb21taXRfc2hhMSBjb21taXQxCitub3RlcyBmb3IgY29tbWl0MQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIHNvbWUgb2YgdGhlIGluaXRpYWwgNSBub3RlcyAoeCAtPiB6KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveiByZWZzL25vdGVzL3ggJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy96ICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAibmV3IG5vdGVzIGZvciBjb21taXQyIiBjb21taXQyICYmCisJZ2l0IG5vdGVzIGFwcGVuZCAtbSAiYXBwZW5kZWQgbm90ZXMgZm9yIGNvbW1pdDMiIGNvbW1pdDMgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIGNvbW1pdDQgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeiBjb21taXQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzIHRyZWUgaGFzIG5vIGZhbm91dCAoeiknICd2ZXJpZnlfbm9fZmFub3V0IHonCisKK2NwIGV4cGVjdF9sb2dfeiBleHBlY3RfbG9nX20KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2Vzc2Z1bCBtZXJnZSB3aXRob3V0IGNvbmZsaWN0cyAoeSA9PiB6KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3ogJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9tICYmCisJZ2l0IG5vdGVzIG1lcmdlIHkgJiYKKwl2ZXJpZnlfbm90ZXMgbSBjb21taXQ1ICYmCisJIyB4L3kveiB1bmNoYW5nZWQKKwl2ZXJpZnlfbm90ZXMgeCBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHkgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB6IGNvbW1pdDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90ZXMgdHJlZSBzdGlsbCBoYXMgZmFub3V0IGFmdGVyIG1lcmdlIChtKScgJ3ZlcmlmeV9mYW5vdXQgbScKKworY2F0ID5leHBlY3RfbG9nX3cgPDxFT0YKKyRjb21taXRfc2hhNSBjb21taXQ1CisKKyRjb21taXRfc2hhNCBjb21taXQ0CitvdGhlciBub3RlcyBmb3IgY29tbWl0NAorCiskY29tbWl0X3NoYTMgY29tbWl0Mworb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDMKKworJGNvbW1pdF9zaGEyIGNvbW1pdDIKK25vdGVzIGZvciBjb21taXQyCisKKyRjb21taXRfc2hhMSBjb21taXQxCitvdGhlciBub3RlcyBmb3IgY29tbWl0MQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50cm9kdWNlIGNvbmZsaWN0aW5nIGNoYW5nZXMgKHkgLT4gdyknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3cgcmVmcy9ub3Rlcy95ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvdyAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gIm90aGVyIG5vdGVzIGZvciBjb21taXQxIiBjb21taXQxICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAib3RoZXIgbm90ZXMgZm9yIGNvbW1pdDMiIGNvbW1pdDMgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJvdGhlciBub3RlcyBmb3IgY29tbWl0NCIgY29tbWl0NCAmJgorCWdpdCBub3RlcyByZW1vdmUgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB3IGNvbW1pdDUKKycKKworY2F0ID5leHBlY3RfbG9nX20gPDxFT0YKKyRjb21taXRfc2hhNSBjb21taXQ1CisKKyRjb21taXRfc2hhNCBjb21taXQ0CitvdGhlciBub3RlcyBmb3IgY29tbWl0NAorCiskY29tbWl0X3NoYTMgY29tbWl0Mworb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDMKKworJGNvbW1pdF9zaGEyIGNvbW1pdDIKK25ldyBub3RlcyBmb3IgY29tbWl0MgorCiskY29tbWl0X3NoYTEgY29tbWl0MQorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDEKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Y2Nlc3NmdWwgbWVyZ2UgdXNpbmcgIm91cnMiIHN0cmF0ZWd5ICh6ID0+IHcpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMvdyAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL20gJiYKKwlnaXQgbm90ZXMgbWVyZ2UgLXMgb3VycyB6ICYmCisJdmVyaWZ5X25vdGVzIG0gY29tbWl0NSAmJgorCSMgdy94L3kveiB1bmNoYW5nZWQKKwl2ZXJpZnlfbm90ZXMgdyBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHggY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB5IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeiBjb21taXQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzIHRyZWUgc3RpbGwgaGFzIGZhbm91dCBhZnRlciBtZXJnZSAobSknICd2ZXJpZnlfZmFub3V0IG0nCisKK2NhdCA+ZXhwZWN0X2xvZ19tIDw8RU9GCiskY29tbWl0X3NoYTUgY29tbWl0NQorCiskY29tbWl0X3NoYTQgY29tbWl0NAorCiskY29tbWl0X3NoYTMgY29tbWl0Mworbm90ZXMgZm9yIGNvbW1pdDMKKworYXBwZW5kZWQgbm90ZXMgZm9yIGNvbW1pdDMKKworJGNvbW1pdF9zaGEyIGNvbW1pdDIKK25ldyBub3RlcyBmb3IgY29tbWl0MgorCiskY29tbWl0X3NoYTEgY29tbWl0MQorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDEKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Y2Nlc3NmdWwgbWVyZ2UgdXNpbmcgInRoZWlycyIgc3RyYXRlZ3kgKHogPT4gdyknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy93ICYmCisJZ2l0IG5vdGVzIG1lcmdlIC1zIHRoZWlycyB6ICYmCisJdmVyaWZ5X25vdGVzIG0gY29tbWl0NSAmJgorCSMgdy94L3kveiB1bmNoYW5nZWQKKwl2ZXJpZnlfbm90ZXMgdyBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHggY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB5IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeiBjb21taXQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzIHRyZWUgc3RpbGwgaGFzIGZhbm91dCBhZnRlciBtZXJnZSAobSknICd2ZXJpZnlfZmFub3V0IG0nCisKK2NhdCA+ZXhwZWN0X2xvZ19tIDw8RU9GCiskY29tbWl0X3NoYTUgY29tbWl0NQorCiskY29tbWl0X3NoYTQgY29tbWl0NAorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDQKKworJGNvbW1pdF9zaGEzIGNvbW1pdDMKK290aGVyIG5vdGVzIGZvciBjb21taXQzCisKK25vdGVzIGZvciBjb21taXQzCisKK2FwcGVuZGVkIG5vdGVzIGZvciBjb21taXQzCisKKyRjb21taXRfc2hhMiBjb21taXQyCituZXcgbm90ZXMgZm9yIGNvbW1pdDIKKworJGNvbW1pdF9zaGExIGNvbW1pdDEKK290aGVyIG5vdGVzIGZvciBjb21taXQxCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzZnVsIG1lcmdlIHVzaW5nICJ1bmlvbiIgc3RyYXRlZ3kgKHogPT4gdyknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy93ICYmCisJZ2l0IG5vdGVzIG1lcmdlIC1zIHVuaW9uIHogJiYKKwl2ZXJpZnlfbm90ZXMgbSBjb21taXQ1ICYmCisJIyB3L3gveS96IHVuY2hhbmdlZAorCXZlcmlmeV9ub3RlcyB3IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeCBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHkgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB6IGNvbW1pdDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90ZXMgdHJlZSBzdGlsbCBoYXMgZmFub3V0IGFmdGVyIG1lcmdlIChtKScgJ3ZlcmlmeV9mYW5vdXQgbScKKworY2F0ID5leHBlY3RfbG9nX20gPDxFT0YKKyRjb21taXRfc2hhNSBjb21taXQ1CisKKyRjb21taXRfc2hhNCBjb21taXQ0CitvdGhlciBub3RlcyBmb3IgY29tbWl0NAorCiskY29tbWl0X3NoYTMgY29tbWl0MworYXBwZW5kZWQgbm90ZXMgZm9yIGNvbW1pdDMKK25vdGVzIGZvciBjb21taXQzCitvdGhlciBub3RlcyBmb3IgY29tbWl0MworCiskY29tbWl0X3NoYTIgY29tbWl0MgorbmV3IG5vdGVzIGZvciBjb21taXQyCisKKyRjb21taXRfc2hhMSBjb21taXQxCitvdGhlciBub3RlcyBmb3IgY29tbWl0MQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2Vzc2Z1bCBtZXJnZSB1c2luZyAiY2F0X3NvcnRfdW5pcSIgc3RyYXRlZ3kgKHogPT4gdyknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy93ICYmCisJZ2l0IG5vdGVzIG1lcmdlIC1zIGNhdF9zb3J0X3VuaXEgeiAmJgorCXZlcmlmeV9ub3RlcyBtIGNvbW1pdDUgJiYKKwkjIHcveC95L3ogdW5jaGFuZ2VkCisJdmVyaWZ5X25vdGVzIHcgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB4IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeSBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHogY29tbWl0NQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RlcyB0cmVlIHN0aWxsIGhhcyBmYW5vdXQgYWZ0ZXIgbWVyZ2UgKG0pJyAndmVyaWZ5X2Zhbm91dCBtJworCisjIFdlJ3JlIG1lcmdpbmcgeiBpbnRvIHcuIEhlcmUgYXJlIHRoZSBjb25mbGljdHMgd2UgZXhwZWN0OgorIworIyBjb21taXQgfCB4IC0+IHcgICAgfCB4IC0+IHogICAgfCBjb25mbGljdD8KKyMgLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tCisjIDEgICAgICB8IGNoYW5nZWQgICB8IHVuY2hhbmdlZCB8IG5vLCB1c2UgdworIyAyICAgICAgfCB1bmNoYW5nZWQgfCBjaGFuZ2VkICAgfCBubywgdXNlIHoKKyMgMyAgICAgIHwgY2hhbmdlZCAgIHwgY2hhbmdlZCAgIHwgeWVzICh3LCB0aGVuIHogaW4gY29uZmxpY3QgbWFya2VycykKKyMgNCAgICAgIHwgY2hhbmdlZCAgIHwgZGVsZXRlZCAgIHwgeWVzICh3KQorIyA1ICAgICAgfCBkZWxldGVkICAgfCBkZWxldGVkICAgfCBubywgZGVsZXRlZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlscyB0byBtZXJnZSB1c2luZyAibWFudWFsIiBzdHJhdGVneSAoeiA9PiB3KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3cgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RlcyB0cmVlIHN0aWxsIGhhcyBmYW5vdXQgYWZ0ZXIgbWVyZ2UgKG0pJyAndmVyaWZ5X2Zhbm91dCBtJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3RfY29uZmxpY3RzCiskY29tbWl0X3NoYTMKKyRjb21taXRfc2hhNAorRU9GCisKK2NhdCA+ZXhwZWN0X2NvbmZsaWN0XyRjb21taXRfc2hhMyA8PEVPRgorPDw8PDw8PCByZWZzL25vdGVzL20KK290aGVyIG5vdGVzIGZvciBjb21taXQzCis9PT09PT09Citub3RlcyBmb3IgY29tbWl0MworCithcHBlbmRlZCBub3RlcyBmb3IgY29tbWl0MworPj4+Pj4+PiByZWZzL25vdGVzL3oKK0VPRgorCitjYXQgPmV4cGVjdF9jb25mbGljdF8kY29tbWl0X3NoYTQgPDxFT0YKK290aGVyIG5vdGVzIGZvciBjb21taXQ0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGNvbmZsaWN0IGVudHJpZXMgKHdpdGggbm8gZmFub3V0KScgJworCWxzIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUgPm91dHB1dF9jb25mbGljdHMgJiYKKwl0ZXN0X2NtcCBleHBlY3RfY29uZmxpY3RzIG91dHB1dF9jb25mbGljdHMgJiYKKwkoIGZvciBmIGluICQoY2F0IGV4cGVjdF9jb25mbGljdHMpOyBkbworCQl0ZXN0X2NtcCAiZXhwZWN0X2NvbmZsaWN0XyRmIiAiLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kZiIgfHwKKwkJZXhpdCAxCisJZG9uZSApICYmCisJIyBWZXJpZnkgdGhhdCBjdXJyZW50IG5vdGVzIHRyZWUgKHByZS1tZXJnZSkgaGFzIG5vdCBjaGFuZ2VkIChtID09IHcpCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3cpIgorJworCitjYXQgPmV4cGVjdF9sb2dfbSA8PEVPRgorJGNvbW1pdF9zaGE1IGNvbW1pdDUKKworJGNvbW1pdF9zaGE0IGNvbW1pdDQKK290aGVyIG5vdGVzIGZvciBjb21taXQ0CisKKyRjb21taXRfc2hhMyBjb21taXQzCitvdGhlciBub3RlcyBmb3IgY29tbWl0MworCithcHBlbmRlZCBub3RlcyBmb3IgY29tbWl0MworCiskY29tbWl0X3NoYTIgY29tbWl0MgorbmV3IG5vdGVzIGZvciBjb21taXQyCisKKyRjb21taXRfc2hhMSBjb21taXQxCitvdGhlciBub3RlcyBmb3IgY29tbWl0MQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzb2x2ZSBhbmQgZmluYWxpemUgbWVyZ2UgKHogPT4gdyknICcKKwljYXQgPi5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGEzIDw8RU9GICYmCitvdGhlciBub3RlcyBmb3IgY29tbWl0MworCithcHBlbmRlZCBub3RlcyBmb3IgY29tbWl0MworRU9GCisJZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0ICYmCisJdmVyaWZ5X25vdGVzIG0gY29tbWl0NSAmJgorCSMgdy94L3kveiB1bmNoYW5nZWQKKwl2ZXJpZnlfbm90ZXMgdyBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHggY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB5IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeiBjb21taXQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzIHRyZWUgc3RpbGwgaGFzIGZhbm91dCBhZnRlciBtZXJnZSAobSknICd2ZXJpZnlfZmFub3V0IG0nCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMyMC1ub3Rlcy1tZXJnZS13b3JrdHJlZXMuc2ggYi90L3QzMzIwLW5vdGVzLW1lcmdlLXdvcmt0cmVlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MjNmZGJkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzMyMC1ub3Rlcy1tZXJnZS13b3JrdHJlZXMuc2gKQEAgLTAsMCArMSw3MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxNSBUd2l0dGVyLCBJbmMKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBtZXJnaW5nIG9mIG5vdGVzIHRyZWVzIGluIG11bHRpcGxlIHdvcmt0cmVlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbW1pdCcgJworCXRlc3RfY29tbWl0IHRhbnRydW0KKycKKworY29tbWl0X3RhbnRydW09JChnaXQgcmV2LXBhcnNlIHRhbnRydW1ee2NvbW1pdH0pCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG5vdGVzIHJlZiAoeCknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiB0YW50cnVtIiB0YW50cnVtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGxvY2FsIGJyYW5jaCAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveSAmJgorCWdpdCBub3RlcyByZW1vdmUgdGFudHJ1bQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW1vdGUgYnJhbmNoICh6KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveiByZWZzL25vdGVzL3ggJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy96ICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAiY29uZmxpY3Rpbmcgbm90ZXMgb24gdGFudHJ1bSIgdGFudHJ1bQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZnkgbm90ZXMgcmVmIG91cnNlbHZlcyAoeCknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAibW9yZSBjb25mbGljdGluZyBub3RlcyBvbiB0YW50cnVtIiB0YW50cnVtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBzb21lIG5ldyB3b3JrdHJlZXMnICcKKwlnaXQgd29ya3RyZWUgYWRkIC1iIG5ld2JyYW5jaCB3b3JrdHJlZSBtYXN0ZXIgJiYKKwlnaXQgd29ya3RyZWUgYWRkIC1iIG5ld2JyYW5jaDIgd29ya3RyZWUyIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8geSBmYWlscyBhbmQgc2V0cyBOT1RFU19NRVJHRV9SRUYnICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy95ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIHogJiYKKwllY2hvICJyZWY6IHJlZnMvbm90ZXMveSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L05PVEVTX01FUkdFX1JFRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8geSB3aGlsZSBtaWQtbWVyZ2UgaW4gYW5vdGhlciB3b3JrZGlyIGZhaWxzJyAnCisJKAorCQljZCB3b3JrdHJlZSAmJgorCQlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy95ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgImEgbm90ZXMgbWVyZ2UgaW50byByZWZzL25vdGVzL3kgaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBhdCIgZXJyCisJKSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvd29ya3RyZWVzL3dvcmt0cmVlL05PVEVTX01FUkdFX1JFRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8geCB3aGlsZSBtaWQtbWVyZ2Ugb24geSBzdWNjZWVkcycgJworCSgKKwkJY2Qgd29ya3RyZWUyICYmCisJCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ggJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIHogPm91dCAyPiYxICYmCisJCXRlc3RfaTE4bmdyZXAgIkF1dG9tYXRpYyBub3RlcyBtZXJnZSBmYWlsZWQiIG91dCAmJgorCQlncmVwIC12ICJBIG5vdGVzIG1lcmdlIGludG8gcmVmcy9ub3Rlcy94IGlzIGFscmVhZHkgaW4tcHJvZ3Jlc3MgaW4iIG91dAorCSkgJiYKKwllY2hvICJyZWY6IHJlZnMvbm90ZXMveCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L3dvcmt0cmVlcy93b3JrdHJlZTIvTk9URVNfTUVSR0VfUkVGCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwMC1yZWJhc2Uuc2ggYi90L3QzNDAwLXJlYmFzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MGQyOTc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQwMC1yZWJhc2Uuc2gKQEAgLTAsMCArMSw0MjIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgQW1vcyBXYXRlcmxhbmQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSBhc3NvcnRlZCB0ZXN0cworCitUaGlzIHRlc3QgcnVucyBnaXQgcmViYXNlIGFuZCBjaGVja3MgdGhhdCB0aGUgYXV0aG9yIGluZm9ybWF0aW9uIGlzIG5vdCBsb3N0CithbW9uZyBvdGhlciB0aGluZ3MuCisnCisuIC4vdGVzdC1saWIuc2gKKworR0lUX0FVVEhPUl9OQU1FPWF1dGhvckBuYW1lCitHSVRfQVVUSE9SX0VNQUlMPWJvZ3VzQGVtYWlsQGFkZHJlc3MKK2V4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHJlcG9zaXRvcnkgd2l0aCB0b3BpYyBicmFuY2hlcycgJworCWdpdCBjb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIHRydWUgJiYKKwllY2hvIEZpcnN0ID5BICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIEEuIiAmJgorCWdpdCBjaGVja291dCAtYiBmb3JjZS0zd2F5ICYmCisJZWNobyBEdW1teSA+WSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgWSAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBZLiIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZmlsZW1vdmUgJiYKKwlnaXQgcmVzZXQgLS1zb2Z0IG1hc3RlciAmJgorCW1rZGlyIEQgJiYKKwlnaXQgbXYgQSBEL0EgJiYKKwlnaXQgY29tbWl0IC1tICJNb3ZlIEEuIiAmJgorCWdpdCBjaGVja291dCAtYiBteS10b3BpYy1icmFuY2ggbWFzdGVyICYmCisJZWNobyBTZWNvbmQgPkIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEIgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgQi4iICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWVjaG8gVGhpcmQgPj5BICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBBICYmCisJZ2l0IGNvbW1pdCAtbSAiTW9kaWZ5IEEuIiAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIG15LXRvcGljLWJyYW5jaCAmJgorCWVjaG8gU2lkZSA+PkMgJiYKKwlnaXQgYWRkIEMgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgQyIgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbXktdG9waWMtYnJhbmNoICYmCisJZ2l0IHRhZyB0b3BpYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugb24gZGlydHkgd29ya3RyZWUnICcKKwllY2hvIGRpcnR5ID4+QSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBvbiBkaXJ0eSBjYWNoZScgJworCWdpdCBhZGQgQSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhZ2FpbnN0IG1hc3RlcicgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCWdpdCByZWJhc2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBzZXRzIE9SSUdfSEVBRCB0byBwcmUtcmViYXNlIHN0YXRlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG9yaWctaGVhZCB0b3BpYyAmJgorCXByZT0iJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAmJgorCWdpdCByZWJhc2UgbWFzdGVyICYmCisJdGVzdF9jbXBfcmV2ICIkcHJlIiBPUklHX0hFQUQgJiYKKwl0ZXN0X2NtcF9yZXYgISAiJHByZSIgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UsIHdpdGggPG9udG8+IGFuZCA8dXBzdHJlYW0+IHNwZWNpZmllZCBhcyA6L3F1dXhlcnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLUQgdG9yZWJhc2UiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRvcmViYXNlIG15LXRvcGljLWJyYW5jaF4gJiYKKwl1cHN0cmVhbT0kKGdpdCByZXYtcGFyc2UgIjovQWRkIEIiKSAmJgorCW9udG89JChnaXQgcmV2LXBhcnNlICI6L0FkZCBBIikgJiYKKwlnaXQgcmViYXNlIC0tb250byAkb250byAkdXBzdHJlYW0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG15LXRvcGljLWJyYW5jaF4gJiYKKwlnaXQgcmViYXNlIC0tb250byAiOi9BZGQgQSIgIjovQWRkIEIiICYmCisJZ2l0IGNoZWNrb3V0IG15LXRvcGljLWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGUgcmViYXNlIG9wZXJhdGlvbiBzaG91bGQgbm90IGhhdmUgZGVzdHJveWVkIGF1dGhvciBpbmZvcm1hdGlvbicgJworCSEgKGdpdCBsb2cgfCBncmVwICJBdXRob3I6IiB8IGdyZXAgIjw+IikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhlIHJlYmFzZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGRlc3Ryb3llZCBhdXRob3IgaW5mb3JtYXRpb24gKDIpJyAiCisJZ2l0IGxvZyAtMSB8CisJZ3JlcCAnQXV0aG9yOiAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4nCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0hFQUQgd2FzIGRldGFjaGVkIGR1cmluZyByZWJhc2UnICcKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEQHsxfSkgIT0gJChnaXQgcmV2LXBhcnNlIG15LXRvcGljLWJyYW5jaEB7MX0pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBmcm9tIGFtYmlndW91cyBicmFuY2ggbmFtZScgJworCWdpdCBjaGVja291dCAtYiB0b3BpYyBzaWRlICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIG9mZiBvZiB0aGUgcHJldmlvdXMgYnJhbmNoIHVzaW5nICItIicgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwlnaXQgcmViYXNlIEB7LTF9ID5leHBlY3QubWVzc2FnZXMgJiYKKwlnaXQgbWVyZ2UtYmFzZSBtYXN0ZXIgSEVBRCA+ZXhwZWN0LmZvcmtwb2ludCAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWdpdCByZWJhc2UgLSA+YWN0dWFsLm1lc3NhZ2VzICYmCisJZ2l0IG1lcmdlLWJhc2UgbWFzdGVyIEhFQUQgPmFjdHVhbC5mb3JrcG9pbnQgJiYKKworCXRlc3RfY21wIGV4cGVjdC5mb3JrcG9pbnQgYWN0dWFsLmZvcmtwb2ludCAmJgorCSMgdGhlIG5leHQgb25lIGlzIGR1YmlvdXMtLS13ZSBtYXkgd2FudCB0byBzYXkgIi0iLAorCSMgaW5zdGVhZCBvZiBAey0xfSwgaW4gdGhlIG1lc3NhZ2UKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0Lm1lc3NhZ2VzIGFjdHVhbC5tZXNzYWdlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYSBzaW5nbGUgbW9kZSBjaGFuZ2UnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCB0b3BpYyAmJgorCWVjaG8gMSA+WCAmJgorCWdpdCBhZGQgWCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gcHJlcGFyZSAmJgorCWdpdCBjaGVja291dCAtYiBtb2RlY2hhbmdlIEhFQUReICYmCisJZWNobyAxID5YICYmCisJZ2l0IGFkZCBYICYmCisJdGVzdF9jaG1vZCAreCBBICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBtb2RlY2hhbmdlICYmCisJR0lUX1RSQUNFPTEgZ2l0IHJlYmFzZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGlzIG5vdCBicm9rZW4gYnkgZGlmZi5yZW5hbWVzJyAnCisJdGVzdF9jb25maWcgZGlmZi5yZW5hbWVzIGNvcGllcyAmJgorCWdpdCBjaGVja291dCBmaWxlbW92ZSAmJgorCUdJVF9UUkFDRT0xIGdpdCByZWJhc2UgZm9yY2UtM3dheQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogcmVjb3ZlcicgJworCXRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1vZGVjaGFuZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2hvdyB2ZXJib3NlIGVycm9yIHdoZW4gSEVBRCBjb3VsZCBub3QgYmUgZGV0YWNoZWQnICcKKwk+QiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgQiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIHRvcGljIDI+b3V0cHV0LmVyciA+b3V0cHV0Lm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDoiIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIEIgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIHdoZW4gdXBzdHJlYW0gYXJnIGlzIG1pc3NpbmcgYW5kIG5vdCBvbiBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgd2hlbiB1cHN0cmVhbSBhcmcgaXMgbWlzc2luZyBhbmQgbm90IGNvbmZpZ3VyZWQnICcKKwlnaXQgY2hlY2tvdXQgLWIgbm8tY29uZmlnIHRvcGljICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugd29ya3Mgd2l0aCBmb3JtYXQudXNlQXV0b0Jhc2UnICcKKwl0ZXN0X2NvbmZpZyBmb3JtYXQudXNlQXV0b0Jhc2UgdHJ1ZSAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCWdpdCByZWJhc2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgdG8gY29tbW9uIGJhc2UgaW4gQHt1cHN0cmVhbX1zIHJlZmxvZyBpZiBubyB1cHN0cmVhbSBhcmcgKC0tbWVyZ2UpJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGRlZmF1bHQtYmFzZSBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZGVmYXVsdCB0b3BpYyAmJgorCWdpdCBjb25maWcgYnJhbmNoLmRlZmF1bHQucmVtb3RlIC4gJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5kZWZhdWx0Lm1lcmdlIHJlZnMvaGVhZHMvZGVmYXVsdC1iYXNlICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBkZWZhdWx0LWJhc2UgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgZGVmYXVsdH4xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGNoZWNrb3V0IGRlZmF1bHQtYmFzZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgY2hlY2tvdXQgZGVmYXVsdCAmJgorCWdpdCByZWJhc2UgLS1tZXJnZSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZGVmYXVsdC1iYXNlID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIGRlZmF1bHR+MSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWZhdWx0IHRvIGNvbW1vbiBiYXNlIGluIEB7dXBzdHJlYW19cyByZWZsb2cgaWYgbm8gdXBzdHJlYW0gYXJnICgtLWFwcGx5KScgJworCWdpdCBjaGVja291dCAtQiBkZWZhdWx0LWJhc2UgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1CIGRlZmF1bHQgdG9waWMgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5kZWZhdWx0LnJlbW90ZSAuICYmCisJZ2l0IGNvbmZpZyBicmFuY2guZGVmYXVsdC5tZXJnZSByZWZzL2hlYWRzL2RlZmF1bHQtYmFzZSAmJgorCWdpdCByZWJhc2UgLS1hcHBseSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZGVmYXVsdC1iYXNlID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIGRlZmF1bHR+MSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjaGVja291dCBkZWZhdWx0LWJhc2UgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGNoZWNrb3V0IGRlZmF1bHQgJiYKKwlnaXQgcmViYXNlIC0tYXBwbHkgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGRlZmF1bHQtYmFzZSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBkZWZhdWx0fjEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2tlZCBjb21taXRzIGFuZCBmb3JrLXBvaW50IHdvcmsgdG9nZXRoZXInICcKKwlnaXQgY2hlY2tvdXQgZGVmYXVsdC1iYXNlICYmCisJZWNobyBBbWVuZGVkID5BICYmCisJZ2l0IGNvbW1pdCAtYSAtLW5vLWVkaXQgLS1hbWVuZCAmJgorCXRlc3RfY29tbWl0IEIgQiAmJgorCXRlc3RfY29tbWl0IG5ld19CIEIgIk5ldyBCIiAmJgorCXRlc3RfY29tbWl0IEMgQyAmJgorCWdpdCBjaGVja291dCBkZWZhdWx0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBkZWZhdWx0LWJhc2VAezR9ICYmCisJdGVzdF9jb21taXQgRCBEICYmCisJZ2l0IGNoZXJyeS1waWNrIC0yIGRlZmF1bHQtYmFzZV4gJiYKKwl0ZXN0X2NvbW1pdCBmaW5hbF9CIEIgIkZpbmFsIEIiICYmCisJZ2l0IHJlYmFzZSAmJgorCWVjaG8gQW1lbmRlZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IEEgJiYKKwllY2hvICJGaW5hbCBCIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IEIgJiYKKwllY2hvIEMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBDICYmCisJZWNobyBEID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1hcHBseSAtcSBpcyBxdWlldCcgJworCWdpdCBjaGVja291dCAtYiBxdWlldCB0b3BpYyAmJgorCWdpdCByZWJhc2UgLS1hcHBseSAtcSBtYXN0ZXIgPm91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIC1xIGlzIHF1aWV0JyAnCisJZ2l0IGNoZWNrb3V0IC1CIHF1aWV0IHRvcGljICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIC1xIG1hc3RlciA+b3V0cHV0Lm91dCAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmViYXNlIGEgY29tbWl0IHRoYXQgc3ByaW5rbGVzIENScyBpbicgJworCSgKKwkJZWNobyAiT25lIiAmJgorCQllY2hvICJUd29RIiAmJgorCQllY2hvICJUaHJlZSIgJiYKKwkJZWNobyAiRlF1ciIgJiYKKwkJZWNobyAiRml2ZSIKKwkpIHwgcV90b19jciA+Q1IgJiYKKwlnaXQgYWRkIENSICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiQSBmaWxlIHdpdGggYSBsaW5lIHdpdGggQ1IiICYmCisJZ2l0IHRhZyBmaWxlLXdpdGgtY3IgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJZ2l0IHJlYmFzZSAtLW9udG8gSEVBRF5eIEhFQUReICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmlsZS13aXRoLWNyOkNSIEhFQUQ6Q1IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGNhbiBjb3B5IG5vdGVzJyAnCisJZ2l0IGNvbmZpZyBub3Rlcy5yZXdyaXRlLnJlYmFzZSB0cnVlICYmCisJZ2l0IGNvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCisJdGVzdF9jb21taXQgbjEgJiYKKwl0ZXN0X2NvbW1pdCBuMiAmJgorCXRlc3RfY29tbWl0IG4zICYmCisJZ2l0IG5vdGVzIGFkZCAtbSJhIG5vdGUiIG4zICYmCisJZ2l0IHJlYmFzZSAtLW9udG8gbjEgbjIgJiYKKwl0ZXN0ICJhIG5vdGUiID0gIiQoZ2l0IG5vdGVzIHNob3cgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtbSBjYW4gY29weSBub3RlcycgJworCWdpdCByZXNldCAtLWhhcmQgbjMgJiYKKwlnaXQgcmViYXNlIC1tIC0tb250byBuMSBuMiAmJgorCXRlc3QgImEgbm90ZSIgPSAiJChnaXQgbm90ZXMgc2hvdyBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGNvbW1pdCB3aXRoIGFuIGFuY2llbnQgdGltZXN0YW1wJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJPm9sZC5vbmUgJiYgZ2l0IGFkZCBvbGQub25lICYmIHRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1kYXRlPSJAMTIzNDUgKzA0MDAiIC1tICJPbGQgb25lIiAmJgorCT5vbGQudHdvICYmIGdpdCBhZGQgb2xkLnR3byAmJiB0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tZGF0ZT0iQDIzNDU2ICswNTAwIiAtbSAiT2xkIHR3byIgJiYKKwk+b2xkLnRocmVlICYmIGdpdCBhZGQgb2xkLnRocmVlICYmIHRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1kYXRlPSJAMzQ1NjcgKzA2MDAiIC1tICJPbGQgdGhyZWUiICYmCisKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReXiA+YWN0dWFsICYmCisJZ3JlcCAiYXV0aG9yIC4qIDEyMzQ1ICswNDAwJCIgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiA+YWN0dWFsICYmCisJZ3JlcCAiYXV0aG9yIC4qIDIzNDU2ICswNTAwJCIgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5hY3R1YWwgJiYKKwlncmVwICJhdXRob3IgLiogMzQ1NjcgKzA2MDAkIiBhY3R1YWwgJiYKKworCWdpdCByZWJhc2UgLS1vbnRvIEhFQUReXiBIRUFEXiAmJgorCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5hY3R1YWwgJiYKKwlncmVwICJhdXRob3IgLiogMzQ1NjcgKzA2MDAkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHdpdGggIkZyb20gIiBsaW5lIGluIGNvbW1pdCBtZXNzYWdlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHByZXNlcnZlLWZyb20gbWFzdGVyfjEgJiYKKwljYXQgPkZyb21fLm1zZyA8PEVPRiAmJgorU29tZWJvZHkgZW1iZWRkZWQgYW4gbWJveCBpbiBhIGNvbW1pdCBtZXNzYWdlCisKK1RoaXMgaXMgZnJvbSBzby1hbmQtc286CisKK0Zyb20gYUBiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9obiBEb2UgPG5vYm9keUBleGFtcGxlLmNvbT4KK0RhdGU6IFNhdCwgMTEgTm92IDIwMTcgMDA6MDA6MDAgKzAwMDAKK1N1YmplY3Q6IG5vdCB0aGlzIG1lc3NhZ2UKKworc29tZXRoaW5nCitFT0YKKwk+RnJvbV8gJiYKKwlnaXQgYWRkIEZyb21fICYmCisJZ2l0IGNvbW1pdCAtRiBGcm9tXy5tc2cgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5vdXQgJiYKKwl0ZXN0X2NtcCBGcm9tXy5tc2cgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWFwcGx5IGFuZCAtLXNob3ctY3VycmVudC1wYXRjaCcgJworCXRlc3RfY3JlYXRlX3JlcG8gY29uZmxpY3QtYXBwbHkgJiYKKwkoCisJCWNkIGNvbmZsaWN0LWFwcGx5ICYmCisJCXRlc3RfY29tbWl0IGluaXQgJiYKKwkJZWNobyBvbmUgPj5pbml0LnQgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBvbmUgJiYKKwkJZWNobyB0d28gPj5pbml0LnQgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSB0d28gJiYKKwkJZ2l0IHRhZyB0d28gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFwcGx5IC1mIC0tb250byBpbml0IEhFQUReICYmCisJCUdJVF9UUkFDRT0xIGdpdCByZWJhc2UgLS1zaG93LWN1cnJlbnQtcGF0Y2ggPi9kZXYvbnVsbCAyPnN0ZGVyciAmJgorCQlncmVwICJzaG93LiokKGdpdCByZXYtcGFyc2UgdHdvKSIgc3RkZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1hcHBseSBhbmQgLmdpdGF0dHJpYnV0ZXMnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGF0dHJpYnV0ZXMgJiYKKwkoCisJCWNkIGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9jb21taXQgaW5pdCAmJgorCQlnaXQgY29uZmlnIGZpbHRlci50ZXN0LmNsZWFuICJzZWQgLWUgJ1wnJ3Mvc211ZGdlZC9jbGVhbi9nJ1wnJyIgJiYKKwkJZ2l0IGNvbmZpZyBmaWx0ZXIudGVzdC5zbXVkZ2UgInNlZCAtZSAnXCcncy9jbGVhbi9zbXVkZ2VkL2cnXCcnIiAmJgorCisJCXRlc3RfY29tbWl0IHNlY29uZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdGVzdCBIRUFEXiAmJgorCisJCWVjaG8gIioudHh0IGZpbHRlcj10ZXN0IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJZ2l0IGFkZCAuZ2l0YXR0cmlidXRlcyAmJgorCQl0ZXN0X2NvbW1pdCB0aGlyZCAmJgorCisJCWVjaG8gIlRoaXMgdGV4dCBpcyBzbXVkZ2VkLiIgPmEudHh0ICYmCisJCWdpdCBhZGQgYS50eHQgJiYKKwkJdGVzdF9jb21taXQgZm91cnRoICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlbW92YWwgSEVBRF4gJiYKKwkJZ2l0IHJtIC5naXRhdHRyaWJ1dGVzICYmCisJCWdpdCBhZGQgLXUgJiYKKwkJdGVzdF9jb21taXQgZmlmdGggJiYKKwkJZ2l0IGNoZXJyeS1waWNrIHRlc3QgJiYKKworCQlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCQlnaXQgcmViYXNlIG1hc3RlciAmJgorCQlncmVwICJzbXVkZ2VkIiBhLnR4dCAmJgorCisJCWdpdCBjaGVja291dCByZW1vdmFsICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKwkJZ3JlcCAiY2xlYW4iIGEudHh0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UtLW1lcmdlLnNoIGFuZCAtLXNob3ctY3VycmVudC1wYXRjaCcgJworCXRlc3RfY3JlYXRlX3JlcG8gY29uZmxpY3QtbWVyZ2UgJiYKKwkoCisJCWNkIGNvbmZsaWN0LW1lcmdlICYmCisJCXRlc3RfY29tbWl0IGluaXQgJiYKKwkJZWNobyBvbmUgPj5pbml0LnQgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBvbmUgJiYKKwkJZWNobyB0d28gPj5pbml0LnQgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSB0d28gJiYKKwkJZ2l0IHRhZyB0d28gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW1lcmdlIC0tb250byBpbml0IEhFQUReICYmCisJCWdpdCByZWJhc2UgLS1zaG93LWN1cnJlbnQtcGF0Y2ggPmFjdHVhbC5wYXRjaCAmJgorCQlHSVRfVFJBQ0U9MSBnaXQgcmViYXNlIC0tc2hvdy1jdXJyZW50LXBhdGNoID4vZGV2L251bGwgMj5zdGRlcnIgJiYKKwkJZ3JlcCAic2hvdy4qUkVCQVNFX0hFQUQiIHN0ZGVyciAmJgorCQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgUkVCQVNFX0hFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgdHdvKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtYyByZWJhc2UudXNlQnVpbHRpbj1mYWxzZSB3YXJuaW5nJyAnCisJZXhwZWN0ZWQ9InJlYmFzZS51c2VCdWlsdGluIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCIgJiYKKworCSMgT25seSB3YXJuIHdoZW4gdGhlIGxlZ2FjeSByZWJhc2UgaXMgcmVxdWVzdGVkLi4uCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHJlYmFzZS51c2VCdWlsdGluPWZhbHNlIHJlYmFzZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIiRleHBlY3RlZCIgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX1JFQkFTRV9VU0VfQlVJTFRJTj1mYWxzZSBnaXQgcmViYXNlIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiJGV4cGVjdGVkIiBlcnIgJiYKKworCSMgLi4ubm90IHdoZW4gd2Ugd291bGQgaGF2ZSB1c2VkIHRoZSBidWlsdC1pbiBhbnl3YXkKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgcmViYXNlLnVzZUJ1aWx0aW49dHJ1ZSByZWJhc2UgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX1JFQkFTRV9VU0VfQlVJTFRJTj10cnVlIGdpdCByZWJhc2UgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCB0byBicmFuY2ggY2hlY2tlZCBvdXQgaGVyZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmViYXNlIG1hc3RlciBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIHRvIGJyYW5jaCBub3QgY2hlY2tlZCBvdXQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCBvdGhlciAmJgorCWdpdCByZWJhc2UgbWFzdGVyIG90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzZSB0byBzd2l0Y2ggdG8gYnJhbmNoIGNoZWNrZWQgb3V0IGVsc2V3aGVyZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgd29ya3RyZWUgYWRkIHd0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHd0IHJlYmFzZSBtYXN0ZXIgbWFzdGVyIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiYWxyZWFkeSBjaGVja2VkIG91dCIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwMS1yZWJhc2UtYW5kLWFtLXJlbmFtZS5zaCBiL3QvdDM0MDEtcmViYXNlLWFuZC1hbS1yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjE4YmFlOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MDEtcmViYXNlLWFuZC1hbS1yZW5hbWUuc2gKQEAgLTAsMCArMSwyMTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlICsgZGlyZWN0b3J5IHJlbmFtZSB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGVzdGNhc2Ugd2hlcmUgZGlyZWN0b3J5IHJlbmFtZSBzaG91bGQgYmUgZGV0ZWN0ZWQnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGRpci1yZW5hbWUgJiYKKwkoCisJCWNkIGRpci1yZW5hbWUgJiYKKworCQlta2RpciB4ICYmCisJCXRlc3Rfc2VxICAxIDEwID54L2EgJiYKKwkJdGVzdF9zZXEgMTEgMjAgPngvYiAmJgorCQl0ZXN0X3NlcSAyMSAzMCA+eC9jICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgYSBiIGMgZCBlIGYgZyBoIGkgPmwgJiYKKwkJZ2l0IGFkZCB4IGwgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB4IHkgJiYKKwkJZ2l0IG12IGwgbGV0dGVycyAmJgorCQlnaXQgY29tbWl0IC1tICJSZW5hbWUgeCB0byB5LCBsIHRvIGxldHRlcnMiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZWNobyBqID4+bCAmJgorCQl0ZXN0X3NlcSAzMSA0MCA+eC9kICYmCisJCWdpdCBhZGQgbCB4L2QgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTW9kaWZ5IGwsIGFkZCB4L2QiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1pbnRlcmFjdGl2ZTogZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3RlZCcgJworCSgKKwkJY2QgZGlyLXJlbmFtZSAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKworCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSIgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSByZWJhc2UgLS1pbnRlcmFjdGl2ZSBBICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNSBvdXQgJiYKKworCQl0ZXN0X3BhdGhfaXNfZmlsZSB5L2QgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgeC9kCisJKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdyZWJhc2UgLS1hcHBseTogZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3RlZCcgJworCSgKKwkJY2QgZGlyLXJlbmFtZSAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIHJlYmFzZSAtLWFwcGx5IEEgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IG91dCAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIHkvZCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB4L2QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlOiBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGVkJyAnCisJKAorCQljZCBkaXItcmVuYW1lICYmCisKKwkJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgcmViYXNlIC0tbWVyZ2UgQSAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgb3V0ICYmCisKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgeS9kICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHgvZAorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnYW06IGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0ZWQnICcKKwkoCisJCWNkIGRpci1yZW5hbWUgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtMSBCICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBhbSAtLTN3YXkgMDAwMSoucGF0Y2ggJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IG91dCAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIHkvZCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB4L2QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3RjYXNlIHdoZXJlIGRpcmVjdG9yeSByZW5hbWUgc2hvdWxkIE5PVCBiZSBkZXRlY3RlZCcgJworCXRlc3RfY3JlYXRlX3JlcG8gbm8tZGlyLXJlbmFtZSAmJgorCSgKKwkJY2Qgbm8tZGlyLXJlbmFtZSAmJgorCisJCW1rZGlyIHggJiYKKwkJdGVzdF9zZXEgIDEgMTAgPngvYSAmJgorCQl0ZXN0X3NlcSAxMSAyMCA+eC9iICYmCisJCXRlc3Rfc2VxIDIxIDMwID54L2MgJiYKKwkJZWNobyBvcmlnaW5hbCA+cHJvamVjdF9pbmZvICYmCisJCWdpdCBhZGQgeCBwcm9qZWN0X2luZm8gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWVjaG8gdjIgPnByb2plY3RfaW5mbyAmJgorCQlnaXQgYWRkIHByb2plY3RfaW5mbyAmJgorCQlnaXQgY29tbWl0IC1tICJNb2RpZnkgcHJvamVjdF9pbmZvIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCW1rZGlyIHkgJiYKKwkJZ2l0IG12IHgvYyB5L2MgJiYKKwkJZWNobyB2MSA+cHJvamVjdF9pbmZvICYmCisJCWdpdCBhZGQgcHJvamVjdF9pbmZvICYmCisJCWdpdCBjb21taXQgLW0gIlJlbmFtZSB4L2MgdG8geS9jLCBtb2RpZnkgcHJvamVjdF9pbmZvIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0taW50ZXJhY3RpdmU6IE5PIGRpcmVjdG9yeSByZW5hbWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBuby1kaXItcmVuYW1lIHJlYmFzZSAtLWFib3J0IiAmJgorCSgKKwkJY2Qgbm8tZGlyLXJlbmFtZSAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKworCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEiIGdpdCByZWJhc2UgLS1pbnRlcmFjdGl2ZSBBICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBvdXQgJiYKKworCQl0ZXN0X3BhdGhfaXNfZmlsZSB4L2EgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgeC9iICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHgvYworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIChhbSk6IE5PIGRpcmVjdG9yeSByZW5hbWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBuby1kaXItcmVuYW1lIHJlYmFzZSAtLWFib3J0IiAmJgorCSgKKwkJY2Qgbm8tZGlyLXJlbmFtZSAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKworCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSBBICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBvdXQgJiYKKworCQl0ZXN0X3BhdGhfaXNfZmlsZSB4L2EgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgeC9iICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHgvYworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2U6IE5PIGRpcmVjdG9yeSByZW5hbWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBuby1kaXItcmVuYW1lIHJlYmFzZSAtLWFib3J0IiAmJgorCSgKKwkJY2Qgbm8tZGlyLXJlbmFtZSAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKworCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW1lcmdlIEEgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IG91dCAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIHgvYSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB4L2IgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgeC9jCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbTogTk8gZGlyZWN0b3J5IHJlbmFtZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIG5vLWRpci1yZW5hbWUgYW0gLS1hYm9ydCIgJiYKKwkoCisJCWNkIG5vLWRpci1yZW5hbWUgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtMSBCICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0tM3dheSAwMDAxKi5wYXRjaCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDYgb3V0ICYmCisKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgeC9hICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHgvYiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB4L2MKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwMi1yZWJhc2UtbWVyZ2Uuc2ggYi90L3QzNDAyLXJlYmFzZS1tZXJnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZTAzMjcxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQwMi1yZWJhc2UtbWVyZ2Uuc2gKQEAgLTAsMCArMSwyNDIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLW1lcmdlIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCitUPSJBIHF1aWNrIGJyb3duIGZveAoranVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuIgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZWNobyAiJGkgJFQiCitkb25lID5vcmlnaW5hbAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgYWRkIG9yaWdpbmFsICYmCisJZ2l0IGNvbW1pdCAtbSJpbml0aWFsIiAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCWVjaG8gIjExICRUIiA+Pm9yaWdpbmFsICYmCisJZ2l0IGNvbW1pdCAtYSAtbSJtYXN0ZXIgdXBkYXRlcyBhIGJpdC4iICYmCisKKwllY2hvICIxMiAkVCIgPj5vcmlnaW5hbCAmJgorCWdpdCBjb21taXQgLWEgLW0ibWFzdGVyIHVwZGF0ZXMgYSBiaXQgbW9yZS4iICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCShlY2hvICIwICRUIiAmJiBjYXQgb3JpZ2luYWwpID5yZW5hbWVkICYmCisJZ2l0IGFkZCByZW5hbWVkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSBvcmlnaW5hbCAmJgorCWdpdCBjb21taXQgLWEgLW0ic2lkZSByZW5hbWVzIGFuZCBlZGl0cy4iICYmCisKKwl0ciAiW2Etel0iICJbQS1aXSIgPG9yaWdpbmFsID5uZXdmaWxlICYmCisJZ2l0IGFkZCBuZXdmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSJzaWRlIGVkaXRzIGZ1cnRoZXIuIiAmJgorCWdpdCBicmFuY2ggc2Vjb25kLXNpZGUgJiYKKworCXRyICJbYS1tXSIgIltBLU1dIiA8b3JpZ2luYWwgPm5ld2ZpbGUgJiYKKwlybSAtZiBvcmlnaW5hbCAmJgorCWdpdCBjb21taXQgLWEgLW0ic2lkZSBlZGl0cyBvbmNlIGFnYWluLiIgJiYKKworCWdpdCBicmFuY2ggdGVzdC1yZWJhc2Ugc2lkZSAmJgorCWdpdCBicmFuY2ggdGVzdC1yZWJhc2UtcGljayBzaWRlICYmCisJZ2l0IGJyYW5jaCB0ZXN0LXJlZmVyZW5jZS1waWNrIHNpZGUgJiYKKwlnaXQgYnJhbmNoIHRlc3QtY29uZmxpY3RzIHNpZGUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdC1tZXJnZSBzaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmVyZW5jZSBtZXJnZScgJworCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgLW0gInJlZmVyZW5jZSBtZXJnZSIgbWFzdGVyCisnCisKK1BSRV9SRUJBU0U9JChnaXQgcmV2LXBhcnNlIHRlc3QtcmViYXNlKQordGVzdF9leHBlY3Rfc3VjY2VzcyByZWJhc2UgJworCWdpdCBjaGVja291dCB0ZXN0LXJlYmFzZSAmJgorCUdJVF9UUkFDRT0xIGdpdCByZWJhc2UgLS1tZXJnZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdC1yZWJhc2VAezF9IGlzIHByZSByZWJhc2UnICcKKwl0ZXN0ICRQUkVfUkVCQVNFID0gJChnaXQgcmV2LXBhcnNlIHRlc3QtcmViYXNlQHsxfSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYW5kIHJlYmFzZSBzaG91bGQgbWF0Y2gnICcKKwlnaXQgZGlmZi10cmVlIC1yIHRlc3QtcmViYXNlIHRlc3QtbWVyZ2UgPmRpZmZlcmVuY2UgJiYKKwlpZiB0ZXN0IC1zIGRpZmZlcmVuY2UKKwl0aGVuCisJCWNhdCBkaWZmZXJlbmNlCisJCShleGl0IDEpCisJZWxzZQorCQllY2hvIGhhcHB5CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHRoZSBvdGhlciB3YXknICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCByZWJhc2UgLS1tZXJnZSBzaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtWHRoZWlycycgJworCWdpdCBjaGVja291dCAtYiBjb25mbGljdGluZyBtYXN0ZXJ+MiAmJgorCWVjaG8gIkFCICRUIiA+PiBvcmlnaW5hbCAmJgorCWdpdCBjb21taXQgLW1jb25mbGljdGluZyBvcmlnaW5hbCAmJgorCWdpdCByZWJhc2UgLVh0aGVpcnMgbWFzdGVyICYmCisJZ3JlcCBBQiBvcmlnaW5hbCAmJgorCSEgZ3JlcCAxMSBvcmlnaW5hbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLVh0aGVpcnMgZnJvbSBvcnBoYW4nICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gb3JwaGFuLWNvbmZsaWN0aW5nIG1hc3Rlcn4yICYmCisJZWNobyAiQUIgJFQiID4+IG9yaWdpbmFsICYmCisJZ2l0IGNvbW1pdCAtbW9ycGhhbi1jb25mbGljdGluZyBvcmlnaW5hbCAmJgorCWdpdCByZWJhc2UgLVh0aGVpcnMgbWFzdGVyICYmCisJZ3JlcCBBQiBvcmlnaW5hbCAmJgorCSEgZ3JlcCAxMSBvcmlnaW5hbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBhbmQgcmViYXNlIHNob3VsZCBtYXRjaCcgJworCWdpdCBkaWZmLXRyZWUgLXIgdGVzdC1yZWJhc2UgdGVzdC1tZXJnZSA+ZGlmZmVyZW5jZSAmJgorCWlmIHRlc3QgLXMgZGlmZmVyZW5jZQorCXRoZW4KKwkJY2F0IGRpZmZlcmVuY2UKKwkJKGV4aXQgMSkKKwllbHNlCisJCWVjaG8gaGFwcHkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwaWNraW5nIHJlYmFzZScgJworCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgLS1tZXJnZSAtLW9udG8gbWFzdGVyIHNpZGVeXiAmJgorCW1iPSQoZ2l0IG1lcmdlLWJhc2UgbWFzdGVyIEhFQUQpICYmCisJaWYgdGVzdCAiJG1iIiA9ICIkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSIKKwl0aGVuCisJCWVjaG8gaGFwcHkKKwllbHNlCisJCWdpdCBzaG93LWJyYW5jaAorCQkoZXhpdCAxKQorCWZpICYmCisJZj0kKGdpdCBkaWZmLXRyZWUgLS1uYW1lLW9ubHkgSEVBRF4gSEVBRCkgJiYKKwlnPSQoZ2l0IGRpZmYtdHJlZSAtLW5hbWUtb25seSBIRUFEXl4gSEVBRF4pICYmCisJY2FzZSAiJGYsJGciIGluCisJbmV3ZmlsZSxuZXdmaWxlKQorCQllY2hvIGhhcHB5IDs7CisJKikKKwkJZWNobyAiJGYiCisJCWVjaG8gIiRnIgorCQkoZXhpdCAxKQorCWVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1zIGZ1bm55IC1Yb3B0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgdGVzdC1iaW4gZnVubnkud2FzLnJ1biIgJiYKKwlta2RpciB0ZXN0LWJpbiAmJgorCWNhdCA+dGVzdC1iaW4vZ2l0LW1lcmdlLWZ1bm55IDw8LUVPRiAmJgorCSMhJFNIRUxMX1BBVEgKKwljYXNlICJcJDEiIGluIC0tb3B0KSA7OyAqKSBleGl0IDIgOzsgZXNhYworCXNoaWZ0ICYmCisJPmZ1bm55Lndhcy5ydW4gJiYKKwlleGVjIGdpdCBtZXJnZS1yZWN1cnNpdmUgIlwkQCIKKwlFT0YKKwljaG1vZCAreCB0ZXN0LWJpbi9naXQtbWVyZ2UtZnVubnkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QtZnVubnkgbWFzdGVyXiAmJgorCXRlc3RfY29tbWl0IGZ1bm55ICYmCisJKAorCQlQQVRIPS4vdGVzdC1iaW46JFBBVEggJiYKKwkJZ2l0IHJlYmFzZSAtcyBmdW5ueSAtWG9wdCBtYXN0ZXIKKwkpICYmCisJdGVzdCAtZiBmdW5ueS53YXMucnVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXNraXAgd29ya3Mgd2l0aCB0d28gY29uZmxpY3RzIGluIGEgcm93JyAnCisJZ2l0IGNoZWNrb3V0IHNlY29uZC1zaWRlICAmJgorCXRyICJbQS1aXSIgIlthLXpdIiA8bmV3ZmlsZSA+dG1wICYmCisJbXYgdG1wIG5ld2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tImVkaXQgY29uZmxpY3Rpbmcgd2l0aCBzaWRlIiAmJgorCXRyICJbZC1mXSIgIltELUZdIiA8bmV3ZmlsZSA+dG1wICYmCisJbXYgdG1wIG5ld2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tImFub3RoZXIgZWRpdCBjb25mbGljdGluZyB3aXRoIHNpZGUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW1lcmdlIHRlc3QtY29uZmxpY3RzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXNraXAgJiYKKwlnaXQgcmViYXNlIC0tc2tpcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYXBwbHktY2hlcnJ5LXBpY2tzJyAnCisJZ2l0IGluaXQgcmVwbyAmJgorCisJIyBPKDEtMTApIC0tIE8oMS0xMSkgLS0gTygwLTEwKSBtYXN0ZXIKKwkjICAgICAgICBcCisJIyAgICAgICAgIC0tIE8oMS0xMSkgLS0gTygxLTEyKSBvdGhlcmJyYW5jaAorCisJcHJpbnRmICJMaW5lICVkXG4iICQodGVzdF9zZXEgMSAxMCkgPnJlcG8vZmlsZS50eHQgJiYKKwlnaXQgLUMgcmVwbyBhZGQgZmlsZS50eHQgJiYKKwlnaXQgLUMgcmVwbyBjb21taXQgLW0gImJhc2UgY29tbWl0IiAmJgorCisJcHJpbnRmICJMaW5lICVkXG4iICQodGVzdF9zZXEgMSAxMSkgPnJlcG8vZmlsZS50eHQgJiYKKwlnaXQgLUMgcmVwbyBjb21taXQgLWEgLW0gImFkZCAxMSIgJiYKKworCXByaW50ZiAiTGluZSAlZFxuIiAkKHRlc3Rfc2VxIDAgMTApID5yZXBvL2ZpbGUudHh0ICYmCisJZ2l0IC1DIHJlcG8gY29tbWl0IC1hIC1tICJhZGQgMCBkZWxldGUgMTEiICYmCisKKwlnaXQgLUMgcmVwbyBjaGVja291dCAtYiBvdGhlcmJyYW5jaCBIRUFEXl4gJiYKKwlwcmludGYgIkxpbmUgJWRcbiIgJCh0ZXN0X3NlcSAxIDExKSA+cmVwby9maWxlLnR4dCAmJgorCWdpdCAtQyByZXBvIGNvbW1pdCAtYSAtbSAiYWRkIDExIGluIGFub3RoZXIgYnJhbmNoIiAmJgorCisJcHJpbnRmICJMaW5lICVkXG4iICQodGVzdF9zZXEgMSAxMikgPnJlcG8vZmlsZS50eHQgJiYKKwlnaXQgLUMgcmVwbyBjb21taXQgLWEgLW0gImFkZCAxMiBpbiBhbm90aGVyIGJyYW5jaCIgJiYKKworCSMgUmVndWxhciByZWJhc2UgZmFpbHMsIGJlY2F1c2UgdGhlIDEtMTEgY29tbWl0IGlzIGRlZHVwbGljYXRlZAorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyByZXBvIHJlYmFzZSAtLW1lcmdlIG1hc3RlciAyPiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvcjogY291bGQgbm90IGFwcGx5LiphZGQgMTIgaW4gYW5vdGhlciBicmFuY2giIGVyciAmJgorCWdpdCAtQyByZXBvIHJlYmFzZSAtLWFib3J0ICYmCisKKwkjIFdpdGggLS1yZWFwcGx5LWNoZXJyeS1waWNrcywgaXQgd29ya3MKKwlnaXQgLUMgcmVwbyByZWJhc2UgLS1tZXJnZSAtLXJlYXBwbHktY2hlcnJ5LXBpY2tzIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYXBwbHktY2hlcnJ5LXBpY2tzIHJlZnJhaW5zIGZyb20gcmVhZGluZyB1bm5lZWRlZCBibG9icycgJworCWdpdCBpbml0IHNlcnZlciAmJgorCisJIyBPKDEtMTApIC0tIE8oMS0xMSkgLS0gTygxLTEyKSBtYXN0ZXIKKwkjICAgICAgICBcCisJIyAgICAgICAgIC0tIE8oMC0xMCkgb3RoZXJicmFuY2gKKworCXByaW50ZiAiTGluZSAlZFxuIiAkKHRlc3Rfc2VxIDEgMTApID5zZXJ2ZXIvZmlsZS50eHQgJiYKKwlnaXQgLUMgc2VydmVyIGFkZCBmaWxlLnR4dCAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1tICJtZXJnZSBiYXNlIiAmJgorCisJcHJpbnRmICJMaW5lICVkXG4iICQodGVzdF9zZXEgMSAxMSkgPnNlcnZlci9maWxlLnR4dCAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1hIC1tICJhZGQgMTEiICYmCisKKwlwcmludGYgIkxpbmUgJWRcbiIgJCh0ZXN0X3NlcSAxIDEyKSA+c2VydmVyL2ZpbGUudHh0ICYmCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLWEgLW0gImFkZCAxMiIgJiYKKworCWdpdCAtQyBzZXJ2ZXIgY2hlY2tvdXQgLWIgb3RoZXJicmFuY2ggSEVBRF5eICYmCisJcHJpbnRmICJMaW5lICVkXG4iICQodGVzdF9zZXEgMCAxMCkgPnNlcnZlci9maWxlLnR4dCAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1hIC1tICJhZGQgMCIgJiYKKworCXRlc3RfY29uZmlnIC1DIHNlcnZlciB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwl0ZXN0X2NvbmZpZyAtQyBzZXJ2ZXIgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCisJZ2l0IGNsb25lIC0tZmlsdGVyPWJsb2I6bm9uZSAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudCAmJgorCWdpdCAtQyBjbGllbnQgY2hlY2tvdXQgb3JpZ2luL21hc3RlciAmJgorCWdpdCAtQyBjbGllbnQgY2hlY2tvdXQgb3JpZ2luL290aGVyYnJhbmNoICYmCisKKwkjIFNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGUgYmxvYnMgZnJvbSB0aGUgbWVyZ2UgYmFzZSBhbmQgImFkZAorCSMgMTEiIGFyZSBtaXNzaW5nCisJZ2l0IC1DIGNsaWVudCByZXYtbGlzdCAtLW9iamVjdHMgLS1hbGwgLS1taXNzaW5nPXByaW50ID5taXNzaW5nX2xpc3QgJiYKKwlNRVJHRV9CQVNFX0JMT0I9JChnaXQgLUMgc2VydmVyIHJldi1wYXJzZSBtYXN0ZXJeXjpmaWxlLnR4dCkgJiYKKwlBRERfMTFfQkxPQj0kKGdpdCAtQyBzZXJ2ZXIgcmV2LXBhcnNlIG1hc3Rlcl46ZmlsZS50eHQpICYmCisJZ3JlcCAiWz9dJE1FUkdFX0JBU0VfQkxPQiIgbWlzc2luZ19saXN0ICYmCisJZ3JlcCAiWz9dJEFERF8xMV9CTE9CIiBtaXNzaW5nX2xpc3QgJiYKKworCWdpdCAtQyBjbGllbnQgcmViYXNlIC0tbWVyZ2UgLS1yZWFwcGx5LWNoZXJyeS1waWNrcyBvcmlnaW4vbWFzdGVyICYmCisKKwkjIFRoZSBibG9iIGZyb20gdGhlIG1lcmdlIGJhc2UgaGFkIHRvIGJlIGZldGNoZWQsIGJ1dCBub3QgImFkZCAxMSIKKwlnaXQgLUMgY2xpZW50IHJldi1saXN0IC0tb2JqZWN0cyAtLWFsbCAtLW1pc3Npbmc9cHJpbnQgPm1pc3NpbmdfbGlzdCAmJgorCSEgZ3JlcCAiWz9dJE1FUkdFX0JBU0VfQkxPQiIgbWlzc2luZ19saXN0ICYmCisJZ3JlcCAiWz9dJEFERF8xMV9CTE9CIiBtaXNzaW5nX2xpc3QKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDAzLXJlYmFzZS1za2lwLnNoIGIvdC90MzQwMy1yZWJhc2Utc2tpcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOTI3Nzc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQwMy1yZWJhc2Utc2tpcC5zaApAQCAtMCwwICsxLDE5MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLW1lcmdlIC0tc2tpcCB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCisjIHdlIGFzc3VtZSB0aGUgZGVmYXVsdCBnaXQgYW0gLTMgLS1za2lwIHN0cmF0ZWd5IGlzIHRlc3RlZCBpbmRlcGVuZGVudGx5CisjIGFuZCBhbHdheXMgd29ya3MgOikKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+IGhlbGxvICYmCisJZ2l0IGFkZCBoZWxsbyAmJgorCWdpdCBjb21taXQgLW0gImhlbGxvIiAmJgorCWdpdCBicmFuY2ggc2tpcC1yZWZlcmVuY2UgJiYKKworCWVjaG8gd29ybGQgPj4gaGVsbG8gJiYKKwlnaXQgY29tbWl0IC1hIC1tICJoZWxsbyB3b3JsZCIgJiYKKwllY2hvIGdvb2RieWUgPj4gaGVsbG8gJiYKKwlnaXQgY29tbWl0IC1hIC1tICJnb29kYnllIiAmJgorCWdpdCB0YWcgZ29vZGJ5ZSAmJgorCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJldmVydGVkLWdvb2RieWUgJiYKKwlnaXQgdGFnIHJldmVydGVkLWdvb2RieWUgJiYKKwlnaXQgY2hlY2tvdXQgZ29vZGJ5ZSAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0iQW5vdGhlciBBdXRob3IiIFwKKwkJR0lUX0FVVEhPUl9FTUFJTD0iYW5vdGhlci5hdXRob3JAZXhhbXBsZS5jb20iIFwKKwkJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tbm8tZWRpdCAtbSBhbWVuZGVkLWdvb2RieWUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIGFtZW5kZWQtZ29vZGJ5ZSAmJgorCisJZ2l0IGNoZWNrb3V0IC1mIHNraXAtcmVmZXJlbmNlICYmCisJZWNobyBtb28gPiBoZWxsbyAmJgorCWdpdCBjb21taXQgLWEgLW0gIndlIHNob3VsZCBza2lwIHRoaXMiICYmCisJZWNobyBtb28gPiBjb3cgJiYKKwlnaXQgYWRkIGNvdyAmJgorCWdpdCBjb21taXQgLW0gInRoaXMgc2hvdWxkIG5vdCBiZSBza2lwcGVkIiAmJgorCWdpdCBicmFuY2ggcHJlLXJlYmFzZSBza2lwLXJlZmVyZW5jZSAmJgorCWdpdCBicmFuY2ggc2tpcC1tZXJnZSBza2lwLXJlZmVyZW5jZQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHdpdGggZ2l0IGFtIC0zIChkZWZhdWx0KScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXNraXAgY2FuIG5vdCBiZSB1c2VkIHdpdGggb3RoZXIgb3B0aW9ucycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXYgLS1za2lwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXNraXAgLXYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tc2tpcCB3aXRoIGFtIC0zJyAnCisJZ2l0IHJlYmFzZSAtLXNraXAKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBtb3ZlcyBiYWNrIHRvIHNraXAtcmVmZXJlbmNlJyAnCisJdGVzdCByZWZzL2hlYWRzL3NraXAtcmVmZXJlbmNlID0gJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpICYmCisJZ2l0IGJyYW5jaCBwb3N0LXJlYmFzZSAmJgorCWdpdCByZXNldCAtLWhhcmQgcHJlLXJlYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgbWFzdGVyICYmCisJZWNobyAiaGVsbG8iID4gaGVsbG8gJiYKKwlnaXQgYWRkIGhlbGxvICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCByZWZzL2hlYWRzL3NraXAtcmVmZXJlbmNlID0gJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCBwb3N0LXJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBza2lwLW1lcmdlJyAnZ2l0IGNoZWNrb3V0IC1mIHNraXAtbWVyZ2UnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3aXRoIC0tbWVyZ2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tbWVyZ2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXNraXAgd2l0aCAtLW1lcmdlJyAnCisJZ2l0IHJlYmFzZSAtLXNraXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYW5kIHJlZmVyZW5jZSB0cmVlcyBlcXVhbCcgJworCXRlc3QgLXogIiQoZ2l0IGRpZmYtdHJlZSBza2lwLW1lcmdlIHNraXAtcmVmZXJlbmNlKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZWQgYmFjayB0byBicmFuY2ggY29ycmVjdGx5JyAnCisJdGVzdCByZWZzL2hlYWRzL3NraXAtbWVyZ2UgPSAkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkKKycKKwordGVzdF9kZWJ1ZyAnZ2l0ayAtLWFsbCAmIHNsZWVwIDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgYWR2aWNlIHVwb24gcGlja2luZyBlbXB0eSBjb21taXQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tb250byBnb29kYnllIFwKKwkJYW1lbmRlZC1nb29kYnllXiBhbWVuZGVkLWdvb2RieWUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJwcmV2aW91cyBjaGVycnktcGljayBpcyBub3cgZW1wdHkiIGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImdpdCByZWJhc2UgLS1za2lwIiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0ICYmCisJdGVzdF9pMThuZ3JlcCAiZ2l0IHJlYmFzZSAtLXNraXAiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JyZWN0IGF1dGhvcnNoaXAgd2hlbiBjb21taXR0aW5nIGVtcHR5IHBpY2snICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tb250byBnb29kYnllIFwKKwkJYW1lbmRlZC1nb29kYnllXiBhbWVuZGVkLWdvb2RieWUgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgJiYKKwlnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDoiJWFuIDwlYWU+JW4lYWQlQiIgLTEgYW1lbmRlZC1nb29kYnllID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDoiJWFuIDwlYWU+JW4lYWQlQiIgLTEgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JyZWN0IGFkdmljZSB1cG9uIHJld29yZGluZyBlbXB0eSBjb21taXQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0icmV3b3JkIDEiIGdpdCByZWJhc2UgLWkgXAorCQkJLS1vbnRvIGdvb2RieWUgYW1lbmRlZC1nb29kYnllXiBhbWVuZGVkLWdvb2RieWUgMj5lcnIKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAicHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5IiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJnaXQgcmViYXNlIC0tc2tpcCIgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAmJgorCXRlc3RfaTE4bmdyZXAgImdpdCByZWJhc2UgLS1za2lwIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCBhZHZpY2UgdXBvbiBlZGl0aW5nIGVtcHR5IGNvbW1pdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgXAorCQkJLS1vbnRvIGdvb2RieWUgYW1lbmRlZC1nb29kYnllXiBhbWVuZGVkLWdvb2RieWUgMj5lcnIKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAicHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5IiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJnaXQgcmViYXNlIC0tc2tpcCIgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAmJgorCXRlc3RfaTE4bmdyZXAgImdpdCByZWJhc2UgLS1za2lwIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCBhZHZpY2UgdXBvbiBjaGVycnktcGlja2luZyBhbiBlbXB0eSBjb21taXQgZHVyaW5nIGEgcmViYXNlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZXhlY19naXRfY2hlcnJ5LXBpY2tfYW1lbmRlZC1nb29kYnllIiBcCisJCQlnaXQgcmViYXNlIC1pIGdvb2RieWVeIGdvb2RieWUgMj5lcnIKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAicHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5IiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwIiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgYWR2aWNlIHVwb24gbXVsdGkgY2hlcnJ5LXBpY2sgcGlja2luZyBhbiBlbXB0eSBjb21taXQgZHVyaW5nIGEgcmViYXNlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZXhlY19naXRfY2hlcnJ5LXBpY2tfZ29vZGJ5ZV9hbWVuZGVkLWdvb2RieWUiIFwKKwkJCWdpdCByZWJhc2UgLWkgZ29vZGJ5ZV5eIGdvb2RieWUgMj5lcnIKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAicHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5IiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwIiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpeHVwIHRoYXQgZW1wdGllcyBjb21taXQgZmFpbHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBmaXh1cCAyIiBnaXQgcmViYXNlIC1pIFwKKwkJCWdvb2RieWVeIHJldmVydGVkLWdvb2RieWUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NxdWFzaCB0aGF0IGVtcHRpZXMgY29tbWl0IGZhaWxzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgc3F1YXNoIDIiIGdpdCByZWJhc2UgLWkgXAorCQkJZ29vZGJ5ZV4gcmV2ZXJ0ZWQtZ29vZGJ5ZQorCSkKKycKKworIyBNdXN0IGJlIHRoZSBsYXN0IHRlc3QgaW4gdGhpcyBmaWxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICckRURJVE9SIGFuZCBmcmllbmRzIGFyZSB1bmNoYW5nZWQnICcKKwl0ZXN0X2VkaXRvcl91bmNoYW5nZWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaCBiL3QvdDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRhN2QyMWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaApAQCAtMCwwICsxLDE3NjggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIGludGVyYWN0aXZlCisKK1RoaXMgdGVzdCBydW5zIGdpdCByZWJhc2UgImludGVyYWN0aXZlbHkiLCBieSBmYWtpbmcgYW4gZWRpdCwgYW5kIHZlcmlmaWVzCit0aGF0IHRoZSByZXN1bHQgc3RpbGwgbWFrZXMgc2Vuc2UuCisKK0luaXRpYWwgc2V0dXA6CisKKyAgICAgb25lIC0gdHdvIC0gdGhyZWUgLSBmb3VyIChjb25mbGljdC1icmFuY2gpCisgICAvCisgQSAtIEIgLSBDIC0gRCAtIEUgICAgICAgICAgICAobWFzdGVyKQorIHwgXAorIHwgICBGIC0gRyAtIEggICAgICAgICAgICAgICAgKGJyYW5jaDEpCisgfCAgICAgXAorIHxcICAgICAgSSAgICAgICAgICAgICAgICAgICAgKGJyYW5jaDIpCisgfCBcCisgfCAgIEogLSBLIC0gTCAtIE0gICAgICAgICAgICAobm8tY29uZmxpY3QtYnJhbmNoKQorICBcCisgICAgTiAtIE8gLSBQICAgICAgICAgICAgICAgICAobm8tZmYtYnJhbmNoKQorCisgd2hlcmUgQSwgQiwgRCBhbmQgRyBhbGwgdG91Y2ggZmlsZTEsIGFuZCBvbmUsIHR3bywgdGhyZWUsIGZvdXIgYWxsCisgdG91Y2ggZmlsZSAiY29uZmxpY3QiLgorJworLiAuL3Rlc3QtbGliLnNoCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IEEgZmlsZTEgJiYKKwl0ZXN0X2NvbW1pdCBCIGZpbGUxICYmCisJdGVzdF9jb21taXQgQyBmaWxlMiAmJgorCXRlc3RfY29tbWl0IEQgZmlsZTEgJiYKKwl0ZXN0X2NvbW1pdCBFIGZpbGUzICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDEgQSAmJgorCXRlc3RfY29tbWl0IEYgZmlsZTQgJiYKKwl0ZXN0X2NvbW1pdCBHIGZpbGUxICYmCisJdGVzdF9jb21taXQgSCBmaWxlNSAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gyIEYgJiYKKwl0ZXN0X2NvbW1pdCBJIGZpbGU2ICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0LWJyYW5jaCBBICYmCisJdGVzdF9jb21taXQgb25lIGNvbmZsaWN0ICYmCisJdGVzdF9jb21taXQgdHdvIGNvbmZsaWN0ICYmCisJdGVzdF9jb21taXQgdGhyZWUgY29uZmxpY3QgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyIGNvbmZsaWN0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5vLWNvbmZsaWN0LWJyYW5jaCBBICYmCisJdGVzdF9jb21taXQgSiBmaWxlSiAmJgorCXRlc3RfY29tbWl0IEsgZmlsZUsgJiYKKwl0ZXN0X2NvbW1pdCBMIGZpbGVMICYmCisJdGVzdF9jb21taXQgTSBmaWxlTSAmJgorCWdpdCBjaGVja291dCAtYiBuby1mZi1icmFuY2ggQSAmJgorCXRlc3RfY29tbWl0IE4gZmlsZU4gJiYKKwl0ZXN0X2NvbW1pdCBPIGZpbGVPICYmCisJdGVzdF9jb21taXQgUCBmaWxlUAorJworCisjICJleGVjIiBjb21tYW5kcyBhcmUgcnVuIHdpdGggdGhlIHVzZXIgc2hlbGwgYnkgZGVmYXVsdCwgYnV0IHRoaXMgbWF5CisjIGJlIG5vbi1QT1NJWC4gRm9yIGV4YW1wbGUsIGlmIFNIRUxMPXpzaCB0aGVuICI+ZmlsZSIgZG9lc24ndCB3b3JrCisjIHRvIGNyZWF0ZSBhIGZpbGUuIFVuc2V0dGluZyBTSEVMTCBhdm9pZHMgc3VjaCBub24tcG9ydGFibGUgYmVoYXZpb3IKKyMgaW4gdGVzdHMuIEl0IG11c3QgYmUgZXhwb3J0ZWQgZm9yIGl0IHRvIHRha2UgZWZmZWN0IHdoZXJlIG5lZWRlZC4KK1NIRUxMPQorZXhwb3J0IFNIRUxMCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWtlZXAtZW1wdHknICcKKwlnaXQgY2hlY2tvdXQgLWIgZW1wdHlicmFuY2ggbWFzdGVyICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJlbXB0eSIgJiYKKwlnaXQgcmViYXNlIC0ta2VlcC1lbXB0eSAtaSBIRUFEfjIgJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHdpdGggZW1wdHkgdG9kbyBsaXN0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWVycm9yOiBub3RoaW5nIHRvIGRvCisJRU9GCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IiMiIFwKKwkJCWdpdCByZWJhc2UgLWkgSEVBRF4gPm91dHB1dCAyPiYxCisJKSAmJgorCXRhaWwgLW4gMSBvdXRwdXQgPmFjdHVhbCAmJiAgIyBJZ25vcmUgb3V0cHV0IGFib3V0IGNoYW5naW5nIHRvZG8gbGlzdAorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSB3aXRoIHRoZSBleGVjIGNvbW1hbmQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJKAorCXNldF9mYWtlX2VkaXRvciAmJgorCUZBS0VfTElORVM9IjEgZXhlY18+dG91Y2gtb25lCisJCTIgZXhlY18+dG91Y2gtdHdvIGV4ZWNfZmFsc2UgZXhlY18+dG91Y2gtdGhyZWUKKwkJMyA0IGV4ZWNfPlwidG91Y2gtZmlsZV9fbmFtZV93aXRoX3NwYWNlc1wiO18+dG91Y2gtYWZ0ZXItc2VtaWNvbG9uIDUiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIEEKKwkpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdG91Y2gtb25lICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdG91Y2gtdHdvICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdG91Y2gtdGhyZWUgIiAoc2hvdWxkIGhhdmUgc3RvcHBlZCBiZWZvcmUpIiAmJgorCXRlc3RfY21wX3JldiBDIEhFQUQgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0b3VjaC10aHJlZSAmJgorCXRlc3RfcGF0aF9pc19maWxlICJ0b3VjaC1maWxlICBuYW1lIHdpdGggc3BhY2VzIiAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRvdWNoLWFmdGVyLXNlbWljb2xvbiAmJgorCXRlc3RfY21wX3JldiBtYXN0ZXIgSEVBRCAmJgorCXJtIC1mIHRvdWNoLSoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHdpdGggdGhlIGV4ZWMgY29tbWFuZCBydW5zIGZyb20gdHJlZSByb290JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCW1rZGlyIHN1YmRpciAmJiAoY2Qgc3ViZGlyICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9MSU5FUz0iMSBleGVjXz50b3VjaC1zdWJkaXIiIFwKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEXgorCSkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0b3VjaC1zdWJkaXIgJiYKKwlybSAtZnIgc3ViZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSB3aXRoIGV4ZWMgYWxsb3dzIGdpdCBjb21tYW5kcyBpbiBzdWJkaXJzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3ViZGlyIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IHx8OiIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJbWtkaXIgc3ViZGlyICYmIChjZCBzdWJkaXIgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlGQUtFX0xJTkVTPSIxIHhfY2Rfc3ViZGlyXyYmX2dpdF9yZXYtcGFyc2VfLS1pcy1pbnNpZGUtd29yay10cmVlIiBcCisJCWdpdCByZWJhc2UgLWkgSEVBRF4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBzZXRzIHdvcmsgdHJlZSBwcm9wZXJseScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1YmRpciIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJbWtkaXIgc3ViZGlyICYmCisJZ2l0IHJlYmFzZSAteCAiKGNkIHN1YmRpciAmJiBnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkiIEhFQUReIFwKKwkJPmFjdHVhbCAmJgorCSEgZ3JlcCAiL3N1YmRpciQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgd2l0aCB0aGUgZXhlYyBjb21tYW5kIGNoZWNrcyB0cmVlIGNsZWFubmVzcycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iZXhlY19lY2hvX2Zvb18+ZmlsZTEgMSIgXAorCQkJZ2l0IHJlYmFzZSAtaSBIRUFEXgorCSkgJiYKKwl0ZXN0X2NtcF9yZXYgbWFzdGVyXiBIRUFEICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLXggd2l0aCBlbXB0eSBjb21tYW5kIGZhaWxzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQgfHw6IiAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBnaXQgcmViYXNlIC14ICIiIEAgMj5hY3R1YWwgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICJlcnJvcjogZW1wdHkgZXhlYyBjb21tYW5kIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IGdpdCByZWJhc2UgLXggIiAiIEAgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAteCB3aXRoIG5ld2xpbmUgaW4gY29tbWFuZCBmYWlscycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IHx8OiIgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgZ2l0IHJlYmFzZSAteCAiYSR7TEZ9YiIgQCAyPmFjdHVhbCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgImVycm9yOiBleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIiBcCisJCQkgPmV4cGVjdGVkICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgd2l0aCBleGVjIG9mIGluZXhpc3RlbnQgY29tbWFuZCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iZXhlY190aGlzLWNvbW1hbmQtZG9lcy1ub3QtZXhpc3QgMSIgXAorCQkJZ2l0IHJlYmFzZSAtaSBIRUFEXiA+YWN0dWFsIDI+JjEKKwkpICYmCisJISBncmVwICJNYXliZSBnaXQtcmViYXNlIGlzIGJyb2tlbiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcGxpY2l0IGludGVyYWN0aXZlIHJlYmFzZSBkb2VzIG5vdCBpbnZva2Ugc2VxdWVuY2UgZWRpdG9yJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQgfHw6IiAmJgorCUdJVF9TRVFVRU5DRV9FRElUT1I9ImVjaG8gYmFkID4iIGdpdCByZWJhc2UgLXgiZWNobyBvbmUiIEBeCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNoYW5nZXMgYXJlIGEgbm9wJyAnCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDIgJiYKKwlnaXQgcmViYXNlIC1pIEYgJiYKKwl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkiID0gInJlZnMvaGVhZHMvYnJhbmNoMiIgJiYKKwl0ZXN0X2NtcF9yZXYgSSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdGhlIFticmFuY2hdIG9wdGlvbicgJworCWdpdCBjaGVja291dCAtYiBkZWFkLWVuZCAmJgorCWdpdCBybSBmaWxlNiAmJgorCWdpdCBjb21taXQgLW0gInN0b3AgaGVyZSIgJiYKKwlnaXQgcmViYXNlIC1pIEYgYnJhbmNoMiAmJgorCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSIgPSAicmVmcy9oZWFkcy9icmFuY2gyIiAmJgorCXRlc3RfY21wX3JldiBJIGJyYW5jaDIgJiYKKwl0ZXN0X2NtcF9yZXYgSSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1vbnRvIDxicmFuY2g+JyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3Qtb250byBicmFuY2gyICYmCisJZ2l0IHJlYmFzZSAtaSAtLW9udG8gYnJhbmNoMSBGICYmCisJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIiA9ICJyZWZzL2hlYWRzL3Rlc3Qtb250byIgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4gYnJhbmNoMSAmJgorCXRlc3RfY21wX3JldiBJIGJyYW5jaDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIG9uIHRvcCBvZiBhIG5vbi1jb25mbGljdGluZyBjb21taXQnICcKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCWdpdCB0YWcgb3JpZ2luYWwtYnJhbmNoMSAmJgorCWdpdCByZWJhc2UgLWkgYnJhbmNoMiAmJgorCXRlc3QgZmlsZTYgPSAkKGdpdCBkaWZmIC0tbmFtZS1vbmx5IG9yaWdpbmFsLWJyYW5jaDEpICYmCisJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIiA9ICJyZWZzL2hlYWRzL2JyYW5jaDEiICYmCisJdGVzdF9jbXBfcmV2IEkgYnJhbmNoMiAmJgorCXRlc3RfY21wX3JldiBJIEhFQUR+MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZsb2cgZm9yIHRoZSBicmFuY2ggc2hvd3Mgc3RhdGUgYmVmb3JlIHJlYmFzZScgJworCXRlc3RfY21wX3JldiBicmFuY2gxQHsxfSBvcmlnaW5hbC1icmFuY2gxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBmb3IgdGhlIGJyYW5jaCBzaG93cyBjb3JyZWN0IGZpbmlzaCBtZXNzYWdlJyAnCisJcHJpbnRmICJyZWJhc2UgKGZpbmlzaCk6IHJlZnMvaGVhZHMvYnJhbmNoMSBvbnRvICVzXG4iIFwKKwkJIiQoZ2l0IHJldi1wYXJzZSBicmFuY2gyKSIgPmV4cGVjdGVkICYmCisJZ2l0IGxvZyAtZyAtLXByZXR0eT0lZ3MgLTEgcmVmcy9oZWFkcy9icmFuY2gxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhjaGFuZ2UgdHdvIGNvbW1pdHMnICcKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgSEVBRH4yCisJKSAmJgorCXRlc3QgSCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgRyA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCisJYmxvYjE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF46ZmlsZTEpICYmCisJYmxvYjI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDpmaWxlMSkgJiYKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RvcCBvbiBjb25mbGljdGluZyBwaWNrJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKKwlpbmRleCAkYmxvYjEuLiRibG9iMiAxMDA2NDQKKwktLS0gYS9maWxlMQorCSsrKyBiL2ZpbGUxCisJQEAgLTEgKzEgQEAKKwktQQorCStHCisJRU9GCisJY2F0ID5leHBlY3QyIDw8LUVPRiAmJgorCTw8PDw8PDwgSEVBRAorCUQKKwk9PT09PT09CisJRworCT4+Pj4+Pj4gJGNvbW1pdC4uLiBHCisJRU9GCisJZ2l0IHRhZyBuZXctYnJhbmNoMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgbWFzdGVyICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUR+MykiID0gIiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpIiAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L3JlYmFzZS1tZXJnZS9wYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdDIgZmlsZTEgJiYKKwl0ZXN0ICIkKGdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgfAorCQlzZWQgLW4gLWUgIi9eVS9zL15VW15hLXpdKi8vcCIpIiA9IGZpbGUxICYmCisJdGVzdCA0ID0gJChncmVwIC12ICJeIyIgPCAuZ2l0L3JlYmFzZS1tZXJnZS9kb25lIHwgd2MgLWwpICYmCisJdGVzdCAwID0gJChncmVwIC1jICJeW14jXSIgPCAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgY29uZmxpY3RlZCBwYXRjaCcgJworCUdJVF9UUkFDRT0xIGdpdCByZWJhc2UgLS1zaG93LWN1cnJlbnQtcGF0Y2ggPi9kZXYvbnVsbCAyPnN0ZGVyciAmJgorCWdyZXAgInNob3cuKlJFQkFTRV9IRUFEIiBzdGRlcnIgJiYKKwkjIHRoZSBvcmlnaW5hbCBzdG9wcGVkLXNoYTEgaXMgYWJicmV2aWF0ZWQKKwlzdG9wcGVkX3NoYTE9IiQoZ2l0IHJldi1wYXJzZSAkKGNhdCAiLmdpdC9yZWJhc2UtbWVyZ2Uvc3RvcHBlZC1zaGEiKSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIFJFQkFTRV9IRUFEKSIgPSAiJHN0b3BwZWRfc2hhMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnQnICcKKwlnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwl0ZXN0X2NtcF9yZXYgbmV3LWJyYW5jaDEgSEVBRCAmJgorCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSIgPSAicmVmcy9oZWFkcy9icmFuY2gxIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLW1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fib3J0IHdpdGggZXJyb3Igd2hlbiBuZXcgYmFzZSBjYW5ub3QgYmUgY2hlY2tlZCBvdXQnICcKKwlnaXQgcm0gLS1jYWNoZWQgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tICJyZW1vdmUgZmlsZSBpbiBiYXNlIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgbWFzdGVyID4gb3V0cHV0IDI+JjEgJiYKKwl0ZXN0X2kxOG5ncmVwICJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6IiBcCisJCW91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgImZpbGUxIiBvdXRwdXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1tZXJnZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV0YWluIGF1dGhvcnNoaXAnICcKKwllY2hvIEEgPiBmaWxlNyAmJgorCWdpdCBhZGQgZmlsZTcgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9IlR3ZXJwIFNub2ciIGdpdCBjb21taXQgLW0gImRpZmZlcmVudCBhdXRob3IiICYmCisJZ2l0IHRhZyB0d2VycCAmJgorCWdpdCByZWJhc2UgLWkgLS1vbnRvIG1hc3RlciBIRUFEXiAmJgorCWdpdCBzaG93IEhFQUQgfCBncmVwICJeQXV0aG9yOiBUd2VycCBTbm9nIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXRhaW4gYXV0aG9yc2hpcCB3LyBjb25mbGljdHMnICcKKwlvR0lUX0FVVEhPUl9OQU1FPSRHSVRfQVVUSE9SX05BTUUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIkdJVF9BVVRIT1JfTkFNRT1cJG9HSVRfQVVUSE9SX05BTUUiICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIHR3ZXJwICYmCisJdGVzdF9jb21taXQgYSBjb25mbGljdCBhIGNvbmZsaWN0LWEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHR3ZXJwICYmCisKKwlHSVRfQVVUSE9SX05BTUU9QXR0cmlidXRlTWUgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9OQU1FICYmCisJdGVzdF9jb21taXQgYiBjb25mbGljdCBiIGNvbmZsaWN0LWIgJiYKKwlHSVRfQVVUSE9SX05BTUU9JG9HSVRfQVVUSE9SX05BTUUgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgY29uZmxpY3QtYSAmJgorCWVjaG8gcmVzb2x2ZWQgPmNvbmZsaWN0ICYmCisJZ2l0IGFkZCBjb25mbGljdCAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3RfY21wX3JldiBjb25mbGljdC1hXjAgSEVBRF4gJiYKKwlnaXQgc2hvdyA+b3V0ICYmCisJZ3JlcCBBdHRyaWJ1dGVNZSBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3F1YXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCB0d2VycCAmJgorCWVjaG8gQiA+IGZpbGU3ICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPSJOaXRmb2wiIGdpdCBjb21taXQgLW0gIm5pdGZvbCIgZmlsZTcgJiYKKwllY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIFwKKwkJCWdpdCByZWJhc2UgLWkgLS1vbnRvIG1hc3RlciBIRUFEfjIKKwkpICYmCisJdGVzdCBCID0gJChjYXQgZmlsZTcpICYmCisJdGVzdF9jbXBfcmV2IEhFQUReIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXRhaW4gYXV0aG9yc2hpcCB3aGVuIHNxdWFzaGluZycgJworCWdpdCBzaG93IEhFQUQgfCBncmVwICJeQXV0aG9yOiBUd2VycCBTbm9nIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QICctcCBoYW5kbGVzICJubyBjaGFuZ2VzIiBncmFjZWZ1bGx5JyAnCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgcmViYXNlIC1pIC1wIEhFQUReICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0tICYmCisJdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFJFQkFTRV9QICdleGNoYW5nZSB0d28gY29tbWl0cyB3aXRoIC1wJyAnCisJZ2l0IGNoZWNrb3V0IEggJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgLXAgSEVBRH4yCisJKSAmJgorCXRlc3QgSCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgRyA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVCQVNFX1AgJ3ByZXNlcnZlIG1lcmdlcyB3aXRoIC1wJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRvLWJlLXByZXNlcnZlZCBtYXN0ZXJeICYmCisJOiA+IHVucmVsYXRlZC1maWxlICYmCisJZ2l0IGFkZCB1bnJlbGF0ZWQtZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInVucmVsYXRlZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYW5vdGhlci1icmFuY2ggbWFzdGVyICYmCisJZWNobyBCID4gZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEogZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgdG8tYmUtcHJlc2VydmVkICYmCisJZWNobyBDID4gZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEsgZmlsZTEgJiYKKwllY2hvIEQgPiBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gTDEgZmlsZTEgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwllY2hvIDEgPiB1bnJlbGF0ZWQtZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gTDIgdW5yZWxhdGVkLWZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgYW5vdGhlci1icmFuY2ggJiYKKwllY2hvIEUgPiBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gTSBmaWxlMSAmJgorCWdpdCBjaGVja291dCAtYiB0by1iZS1yZWJhc2VkICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtaSAtcCAtLW9udG8gYnJhbmNoMSBtYXN0ZXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgLS0gJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRH42IGJyYW5jaDEgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRH40XjIgdG8tYmUtcHJlc2VydmVkICYmCisJdGVzdF9jbXBfcmV2IEhFQUReXjJeIEhFQUReXl4gJiYKKwl0ZXN0ICQoZ2l0IHNob3cgSEVBRH41OmZpbGUxKSA9IEIgJiYKKwl0ZXN0ICQoZ2l0IHNob3cgSEVBRH4zOmZpbGUxKSA9IEMgJiYKKwl0ZXN0ICQoZ2l0IHNob3cgSEVBRDpmaWxlMSkgPSBFICYmCisJdGVzdCAkKGdpdCBzaG93IEhFQUQ6dW5yZWxhdGVkLWZpbGUpID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QICdlZGl0IGFuY2VzdG9yIHdpdGggLXAnICcKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIDIgZWRpdCAzIDQiIGdpdCByZWJhc2UgLWkgLXAgSEVBRH4zCisJKSAmJgorCWVjaG8gMiA+IHVucmVsYXRlZC1maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBMMi1tb2RpZmllZCAtLWFtZW5kIHVucmVsYXRlZC1maWxlICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0tICYmCisJdGVzdCAkKGdpdCBzaG93IEhFQUQ6dW5yZWxhdGVkLWZpbGUpID0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIHRyaWVzIHRvIGNvbW1pdCcgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1vbnRvIG5ldy1icmFuY2gxIEhFQUReICYmCisJCWVjaG8gcmVzb2x2ZWQgPiBmaWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9ImNob3VldHRlISIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCXRlc3RfY21wX3JldiBIRUFEXiBuZXctYnJhbmNoMSAmJgorCWdpdCBzaG93IEhFQUQgfCBncmVwIGNob3VldHRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmJvc2UgZmxhZyBpcyBoZWVkZWQsIGV2ZW4gYWZ0ZXIgLS1jb250aW51ZScgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyQHsxfSAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXYgLWkgLS1vbnRvIG5ldy1icmFuY2gxIEhFQUReICYmCisJZWNobyByZXNvbHZlZCA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSA+IG91dHB1dCAmJgorCWdyZXAgIl4gZmlsZTEgfCAyICstJCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdtdWx0aS1zcXVhc2ggb25seSBmaXJlcyB1cCBlZGl0b3Igb25jZScgJworCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgXAorCQkJRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiBzcXVhc2ggMyBzcXVhc2ggNCIgXAorCQkJRVhQRUNUX0hFQURFUl9DT1VOVD00IFwKKwkJCWdpdCByZWJhc2UgLWkgJGJhc2UKKwkpICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IHwgZ3JlcCBPTkNFIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdtdWx0aS1maXh1cCBkb2VzIG5vdCBmaXJlIHVwIGVkaXRvcicgJworCWdpdCBjaGVja291dCAtYiBtdWx0aS1maXh1cCBFICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfQ09NTUlUX0FNRU5EPSJORVZFUiIgXAorCQkJRkFLRV9MSU5FUz0iMSBmaXh1cCAyIGZpeHVwIDMgZml4dXAgNCIgXAorCQkJZ2l0IHJlYmFzZSAtaSAkYmFzZQorCSkgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3QgMCA9ICQoZ2l0IHNob3cgfCBncmVwIE5FVkVSIHwgd2MgLWwpICYmCisJZ2l0IGNoZWNrb3V0IEB7LTF9ICYmCisJZ2l0IGJyYW5jaCAtRCBtdWx0aS1maXh1cAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSB1c2VkIGFmdGVyIGNvbmZsaWN0JyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0LWZpeHVwIGNvbmZsaWN0LWJyYW5jaCAmJgorCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBmaXh1cCAzIGZpeHVwIDQiIFwKKwkJCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwkJZWNobyB0aHJlZSA+IGNvbmZsaWN0ICYmCisJCWdpdCBhZGQgY29uZmxpY3QgJiYKKwkJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBcCisJCQlnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IHwgZ3JlcCBPTkNFIHwgd2MgLWwpICYmCisJZ2l0IGNoZWNrb3V0IEB7LTF9ICYmCisJZ2l0IGJyYW5jaCAtRCBjb25mbGljdC1maXh1cAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSByZXRhaW5lZCBhZnRlciBjb25mbGljdCcgJworCWdpdCBjaGVja291dCAtYiBjb25mbGljdC1zcXVhc2ggY29uZmxpY3QtYnJhbmNoICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGZpeHVwIDMgc3F1YXNoIDQiIFwKKwkJCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwkJZWNobyB0aHJlZSA+IGNvbmZsaWN0ICYmCisJCWdpdCBhZGQgY29uZmxpY3QgJiYKKwkJRkFLRV9DT01NSVRfQU1FTkQ9IlRXSUNFIiBFWFBFQ1RfSEVBREVSX0NPVU5UPTIgXAorCQkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdGVzdCAyID0gJChnaXQgc2hvdyB8IGdyZXAgVFdJQ0UgfCB3YyAtbCkgJiYKKwlnaXQgY2hlY2tvdXQgQHstMX0gJiYKKwlnaXQgYnJhbmNoIC1EIGNvbmZsaWN0LXNxdWFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnc3F1YXNoIGFuZCBmaXh1cCBnZW5lcmF0ZSBjb3JyZWN0IGxvZyBtZXNzYWdlcycgJworCWNhdCA+ZXhwZWN0LXNxdWFzaC1maXh1cCA8PC1cRU9GICYmCisJQgorCisJRAorCisJT05DRQorCUVPRgorCWdpdCBjaGVja291dCAtYiBzcXVhc2gtZml4dXAgRSAmJgorCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgXAorCQkJRkFLRV9MSU5FUz0iMSBmaXh1cCAyIHNxdWFzaCAzIGZpeHVwIDQiIFwKKwkJCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCisJCQlnaXQgcmViYXNlIC1pICRiYXNlCisJKSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAxLC9eXCQvZCA+IGFjdHVhbC1zcXVhc2gtZml4dXAgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtc3F1YXNoLWZpeHVwIGFjdHVhbC1zcXVhc2gtZml4dXAgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQURAezJ9IHwKKwkJZ3JlcCAiXiMgVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDMgY29tbWl0c1wuIiAgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQURAezN9IHwKKwkJZ3JlcCAiXiMgVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0c1wuIiAgJiYKKwlnaXQgY2hlY2tvdXQgQHstMX0gJiYKKwlnaXQgYnJhbmNoIC1EIHNxdWFzaC1maXh1cAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnc3F1YXNoIGlnbm9yZXMgY29tbWVudHMnICcKKwlnaXQgY2hlY2tvdXQgLWIgc2tpcC1jb21tZW50cyBFICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBcCisJCQlGQUtFX0xJTkVTPSIjIDEgIyBzcXVhc2ggMiAjIHNxdWFzaCAzICMgc3F1YXNoIDQgIyIgXAorCQkJRVhQRUNUX0hFQURFUl9DT1VOVD00IFwKKwkJCWdpdCByZWJhc2UgLWkgJGJhc2UKKwkpICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IHwgZ3JlcCBPTkNFIHwgd2MgLWwpICYmCisJZ2l0IGNoZWNrb3V0IEB7LTF9ICYmCisJZ2l0IGJyYW5jaCAtRCBza2lwLWNvbW1lbnRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdzcXVhc2ggaWdub3JlcyBibGFuayBsaW5lcycgJworCWdpdCBjaGVja291dCAtYiBza2lwLWJsYW5rLWxpbmVzIEUgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIFwKKwkJCUZBS0VfTElORVM9Ij4gMSA+IHNxdWFzaCAyID4gc3F1YXNoIDMgPiBzcXVhc2ggNCA+IiBcCisJCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAorCQkJZ2l0IHJlYmFzZSAtaSAkYmFzZQorCSkgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgfCBncmVwIE9OQ0UgfCB3YyAtbCkgJiYKKwlnaXQgY2hlY2tvdXQgQHstMX0gJiYKKwlnaXQgYnJhbmNoIC1EIHNraXAtYmxhbmstbGluZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3F1YXNoIHdvcmtzIGFzIGV4cGVjdGVkJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHNxdWFzaC13b3JrcyBuby1jb25mbGljdC1icmFuY2ggJiYKKwlvbmU9JChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIHMgMyAyIiBFWFBFQ1RfSEVBREVSX0NPVU5UPTIgZ2l0IHJlYmFzZSAtaSBIRUFEfjMKKwkpICYmCisJdGVzdCAkb25lID0gJChnaXQgcmV2LXBhcnNlIEhFQUR+MikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgc3F1YXNoIHdvcmtzIGFzIGV4cGVjdGVkJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGludGVycnVwdGVkLXNxdWFzaCBjb25mbGljdC1icmFuY2ggJiYKKwlvbmU9JChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBzcXVhc2ggMyAyIiBcCisJCQlnaXQgcmViYXNlIC1pIEhFQUR+MworCSkgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIG9uZSB0d28gZm91ciA+IGNvbmZsaWN0ICYmCisJZ2l0IGFkZCBjb25mbGljdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gcmVzb2x2ZWQgPiBjb25mbGljdCAmJgorCWdpdCBhZGQgY29uZmxpY3QgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0ICRvbmUgPSAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBzcXVhc2ggd29ya3MgYXMgZXhwZWN0ZWQgKGNhc2UgMiknICcKKwlnaXQgY2hlY2tvdXQgLWIgaW50ZXJydXB0ZWQtc3F1YXNoMiBjb25mbGljdC1icmFuY2ggJiYKKwlvbmU9JChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMyBzcXVhc2ggMSAyIiBcCisJCQlnaXQgcmViYXNlIC1pIEhFQUR+MworCSkgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIG9uZSBmb3VyID4gY29uZmxpY3QgJiYKKwlnaXQgYWRkIGNvbmZsaWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdF93cml0ZV9saW5lcyBvbmUgdHdvIGZvdXIgPiBjb25mbGljdCAmJgorCWdpdCBhZGQgY29uZmxpY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHJlc29sdmVkID4gY29uZmxpY3QgJiYKKwlnaXQgYWRkIGNvbmZsaWN0ICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAkb25lID0gJChnaXQgcmV2LXBhcnNlIEhFQUR+MikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSB0cmllcyB0byBjb21taXQsIGV2ZW4gZm9yICJlZGl0IicgJworCWVjaG8gdW5yZWxhdGVkID4gZmlsZTcgJiYKKwlnaXQgYWRkIGZpbGU3ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAidW5yZWxhdGVkIGNoYW5nZSIgJiYKKwlwYXJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCQllY2hvIGVkaXRlZCA+IGZpbGU3ICYmCisJCWdpdCBhZGQgZmlsZTcgJiYKKwkJRkFLRV9DT01NSVRfTUVTU0FHRT0iY2hvdWV0dGUhIiBnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCisJdGVzdCBlZGl0ZWQgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZTcpICYmCisJZ2l0IHNob3cgSEVBRCB8IGdyZXAgY2hvdWV0dGUgJiYKKwl0ZXN0ICRwYXJlbnQgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fib3J0ZWQgLS1jb250aW51ZSBkb2VzIG5vdCBzcXVhc2ggY29tbWl0cyBhZnRlciAiZWRpdCInICcKKwlvbGQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF90aWNrICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCisJCWVjaG8gImVkaXRlZCBhZ2FpbiIgPiBmaWxlNyAmJgorCQlnaXQgYWRkIGZpbGU3ICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0NPTU1JVF9NRVNTQUdFPSIgIiBnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCisJdGVzdCAkb2xkID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHJlYmFzZSAtLWFib3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8tYW1lbmQgb25seSBlZGl0ZWQgY29tbWl0cyBhZnRlciAiZWRpdCInICcKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwkJZWNobyAiZWRpdGVkIGFnYWluIiA+IGZpbGU3ICYmCisJCWdpdCBhZGQgZmlsZTcgJiYKKwkJRkFLRV9DT01NSVRfTUVTU0FHRT0iZWRpdGVkIGZpbGU3IGFnYWluIiBnaXQgY29tbWl0ICYmCisJCWVjaG8gImFuZCBhZ2FpbiIgPiBmaWxlNyAmJgorCQlnaXQgYWRkIGZpbGU3ICYmCisJCXRlc3RfdGljayAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9DT01NSVRfTUVTU0FHRT0iYW5kIGFnYWluIiBcCisJCQlnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCisJZ2l0IHJlYmFzZSAtLWFib3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuIGVycm9yIGFmdGVyIGZhaWxlZCAiZXhlYyInICcKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCB8fCA6IiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGV4ZWNfZmFsc2UiIGdpdCByZWJhc2UgLWkgSEVBRF4KKwkpICYmCisJZWNobyAiZWRpdGVkIGFnYWluIiA+IGZpbGU3ICYmCisJZ2l0IGFkZCBmaWxlNyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAieW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhIGRldGFjaGVkIEhFQUQnICcKKwlncmFuZHBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAmJgorCWdpdCBjaGVja291dCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgSEVBRH4yCisJKSAmJgorCXRlc3QgJGdyYW5kcGFyZW50ID0gJChnaXQgcmV2LXBhcnNlIEhFQUR+MikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGEgY29tbWl0IHZpb2xhdGluZyBwcmUtY29tbWl0JyAnCisKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcHJlLWNvbW1pdCA8PC1cRU9GICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCAtLWNoZWNrKSIKKwlFT0YKKwllY2hvICJtb25kZSEgIiA+PiBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gZG9lc250LXZlcmlmeSBmaWxlMSAmJgorCWdpdCBjb21taXQgLW0gZG9lc250LXZlcmlmeSAtLW5vLXZlcmlmeSBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9MiBnaXQgcmViYXNlIC1pIEhFQUR+MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHdpdGggYSBmaWxlIG5hbWVkIEhFQUQgaW4gd29ya3RyZWUnICcKKworCXJtIC1mciAuZ2l0L2hvb2tzICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gzIEEgJiYKKworCSgKKwkJR0lUX0FVVEhPUl9OQU1FPSJTcXVhc2hlZCBBd2F5IiAmJgorCQlleHBvcnQgR0lUX0FVVEhPUl9OQU1FICYmCisJCT5IRUFEICYmCisJCWdpdCBhZGQgSEVBRCAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgaGVhZCIgJiYKKwkJPkJPRFkgJiYKKwkJZ2l0IGFkZCBCT0RZICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCBib2R5IgorCSkgJiYKKworCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgc3F1YXNoIDIiIGdpdCByZWJhc2UgLWkgQHstMX0KKwkpICYmCisJdGVzdCAiJChnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JWFuKSIgPSAiU3F1YXNoZWQgQXdheSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyAibm9vcCIgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGNoZXJyeS1waWNrJyAnCisKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoNCBIRUFEICYmCisJR0lUX0VESVRPUj06IGdpdCBjb21taXQgLS1hbWVuZCBcCisJCS0tYXV0aG9yPSJTb21lYm9keSBlbHNlIDxzb21lYm9keUBlbHNlLmNvbT4iICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMykgIT0gJChnaXQgcmV2LXBhcnNlIGJyYW5jaDQpICYmCisJZ2l0IHJlYmFzZSAtaSBicmFuY2gzICYmCisJdGVzdF9jbXBfcmV2IGJyYW5jaDMgYnJhbmNoNAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSByZWJhc2Ugc2V0dXAnICcKKwlnaXQgY2hlY2tvdXQgQSAmJgorCW1rZGlyIHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmIGdpdCBpbml0ICYmID5lbGlmICYmCisJCWdpdCBhZGQgZWxpZiAmJiBnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgaW5pdGlhbCIKKwkpICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgc3ViICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiT25lIiAmJgorCWVjaG8gMiA+ZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJUd28iICYmCisJKAorCQljZCBzdWIgJiYgZWNobyAzID5lbGlmICYmCisJCWdpdCBjb21taXQgLWEgLW0gInN1Ym1vZHVsZSBzZWNvbmQiCisJKSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIlRocmVlIGNoYW5nZXMgc3VibW9kdWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgcmViYXNlIC1pJyAnCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiAzIiBnaXQgcmViYXNlIC1pIEEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb25mbGljdCBzZXR1cCcgJworCWdpdCB0YWcgc3VibW9kdWxlLWJhc2UgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwkoCisJCWNkIHN1YiAmJiBnaXQgY2hlY2tvdXQgSEVBRF4gJiYgZWNobyA0ID5lbGlmICYmCisJCWdpdCBhZGQgZWxpZiAmJiBnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgY29uZmxpY3QiCisJKSAmJgorCWdpdCBhZGQgc3ViICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29uZmxpY3QgaW4gc3VibW9kdWxlIiAmJgorCWdpdCB0YWcgc3VibW9kdWxlLXRvcGljCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBjb250aW51ZSB3aXRoIG9ubHkgc3VibW9kdWxlIHN0YWdlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgc3VibW9kdWxlLWJhc2UgJiYKKwlnaXQgYWRkIHN1YiAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIHN1Ym1vZHVsZS1iYXNlKSAhPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIGNvbnRpbnVlIHdpdGggdW5zdGFnZWQgc3VibW9kdWxlJyAnCisJZ2l0IGNoZWNrb3V0IHN1Ym1vZHVsZS10b3BpYyAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIHN1Ym1vZHVsZS1iYXNlICYmCisJZ2l0IHJlc2V0ICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdF9jbXBfcmV2IHN1Ym1vZHVsZS1iYXNlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXZvaWQgdW5uZWNlc3NhcnkgcmVzZXQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0xMjM0NTY3ODkgZmlsZTMgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjQgJiYKKwl0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJTVRJTUU9JCh0ZXN0LXRvb2wgY2htdGltZSAtLWdldCBmaWxlMykgJiYKKwl0ZXN0IDEyMzQ1Njc4OSA9ICRNVElNRQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdvcmQnICcKKwlnaXQgY2hlY2tvdXQgLWIgcmV3b3JkLWJyYW5jaCBtYXN0ZXIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIDIgMyByZXdvcmQgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iRSBjaGFuZ2VkIiBcCisJCQlnaXQgcmViYXNlIC1pIEEgJiYKKwkJZ2l0IHNob3cgSEVBRCB8IGdyZXAgIkUgY2hhbmdlZCIgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAhPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJdGVzdF9jbXBfcmV2IG1hc3Rlcl4gSEVBRF4gJiYKKwkJRkFLRV9MSU5FUz0iMSAyIHJld29yZCAzIDQiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkQgY2hhbmdlZCIgXAorCQkJZ2l0IHJlYmFzZSAtaSBBICYmCisJCWdpdCBzaG93IEhFQUReIHwgZ3JlcCAiRCBjaGFuZ2VkIiAmJgorCQlGQUtFX0xJTkVTPSJyZXdvcmQgMSAyIDMgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iQiBjaGFuZ2VkIiBcCisJCQlnaXQgcmViYXNlIC1pIEEgJiYKKwkJZ2l0IHNob3cgSEVBRH4zIHwgZ3JlcCAiQiBjaGFuZ2VkIiAmJgorCQlGQUtFX0xJTkVTPSIxIHIgMiBwaWNrIDMgcCA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJDIGNoYW5nZWQiIFwKKwkJCWdpdCByZWJhc2UgLWkgQQorCSkgJiYKKwlnaXQgc2hvdyBIRUFEfjIgfCBncmVwICJDIGNoYW5nZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBjYW4gY29weSBub3RlcycgJworCWdpdCBjb25maWcgbm90ZXMucmV3cml0ZS5yZWJhc2UgdHJ1ZSAmJgorCWdpdCBjb25maWcgbm90ZXMucmV3cml0ZVJlZiAicmVmcy9ub3Rlcy8qIiAmJgorCXRlc3RfY29tbWl0IG4xICYmCisJdGVzdF9jb21taXQgbjIgJiYKKwl0ZXN0X2NvbW1pdCBuMyAmJgorCWdpdCBub3RlcyBhZGQgLW0iYSBub3RlIiBuMyAmJgorCWdpdCByZWJhc2UgLWkgLS1vbnRvIG4xIG4yICYmCisJdGVzdCAiYSBub3RlIiA9ICIkKGdpdCBub3RlcyBzaG93IEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY2FuIGNvcHkgbm90ZXMgb3ZlciBhIGZpeHVwJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWFuIGVhcmxpZXIgbm90ZQorCisJYSBub3RlCisJRU9GCisJZ2l0IHJlc2V0IC0taGFyZCBuMyAmJgorCWdpdCBub3RlcyBhZGQgLW0iYW4gZWFybGllciBub3RlIiBuMiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUdJVF9OT1RFU19SRVdSSVRFX01PREU9Y29uY2F0ZW5hdGUgRkFLRV9MSU5FUz0iMSBmIDIiIFwKKwkJCWdpdCByZWJhc2UgLWkgbjEKKwkpICYmCisJZ2l0IG5vdGVzIHNob3cgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3aGlsZSBkZXRhY2hpbmcgSEVBRCcgJworCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCAmJgorCWdyYW5kcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICYmCisJdGVzdF90aWNrICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC1pIEhFQUR+MiBIRUFEXjAKKwkpICYmCisJdGVzdCAkZ3JhbmRwYXJlbnQgPSAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRAorJworCit0ZXN0X3RpY2sgIyBFbnN1cmUgdGhhdCB0aGUgcmViYXNlZCBjb21taXRzIGdldCBhIGRpZmZlcmVudCB0aW1lc3RhbXAuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbHdheXMgY2hlcnJ5LXBpY2sgd2l0aCAtLW5vLWZmJyAnCisJZ2l0IGNoZWNrb3V0IG5vLWZmLWJyYW5jaCAmJgorCWdpdCB0YWcgb3JpZ2luYWwtbm8tZmYtYnJhbmNoICYmCisJZ2l0IHJlYmFzZSAtaSAtLW5vLWZmIEEgJiYKKwlmb3IgcCBpbiAwIDEgMgorCWRvCisJCXRlc3QgISAkKGdpdCByZXYtcGFyc2UgSEVBRH4kcCkgPSAkKGdpdCByZXYtcGFyc2Ugb3JpZ2luYWwtbm8tZmYtYnJhbmNofiRwKSAmJgorCQlnaXQgZGlmZiBIRUFEfiRwIG9yaWdpbmFsLW5vLWZmLWJyYW5jaH4kcCA+IG91dCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgb3V0CisJZG9uZSAmJgorCXRlc3RfY21wX3JldiBIRUFEfjMgb3JpZ2luYWwtbm8tZmYtYnJhbmNofjMgJiYKKwlnaXQgZGlmZiBIRUFEfjMgb3JpZ2luYWwtbm8tZmYtYnJhbmNofjMgPiBvdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBjb21taXRzIHdpdGggZnVubnkgbWVzc2FnZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgZnVubnkgQSAmJgorCWVjaG8gPj5maWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gImVuZCB3aXRoIHNsYXNoXFwiICYmCisJZWNobyA+PmZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAic29tZXRoaW5nIChcMDAwKSB0aGF0IGxvb2tzIGxpa2Ugb2N0YWwiICYmCisJZWNobyA+PmZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAic29tZXRoaW5nIChcbikgdGhhdCBsb29rcyBsaWtlIGEgbmV3bGluZSIgJiYKKwllY2hvID4+ZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJhbm90aGVyIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlLWkgaGlzdG9yeSB3aXRoIGZ1bm55IG1lc3NhZ2VzJyAnCisJZ2l0IHJldi1saXN0IEEuLmZ1bm55ID5leHBlY3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIDIgMyA0IiBnaXQgcmViYXNlIC1pIEEKKwkpICYmCisJZ2l0IHJldi1saXN0IEEuLiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGZvciByZWJhc2UgLWkgLS1leGVjJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBleGVjdXRlICYmCisJdGVzdF9jb21taXQgb25lX2V4ZWMgbWFpbi50eHQgb25lX2V4ZWMgJiYKKwl0ZXN0X2NvbW1pdCB0d29fZXhlYyBtYWluLnR4dCB0d29fZXhlYyAmJgorCXRlc3RfY29tbWl0IHRocmVlX2V4ZWMgbWFpbi50eHQgdGhyZWVfZXhlYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW5uaW5nICJnaXQgcmViYXNlIC1pIC0tZXhlYyBnaXQgc2hvdyBIRUFEIicgJworCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCWdpdCByZWJhc2UgLWkgLS1leGVjICJnaXQgc2hvdyBIRUFEIiBIRUFEfjIgPmFjdHVhbCAmJgorCQlGQUtFX0xJTkVTPSIxIGV4ZWNfZ2l0X3Nob3dfSEVBRCAyIGV4ZWNfZ2l0X3Nob3dfSEVBRCIgJiYKKwkJZXhwb3J0IEZBS0VfTElORVMgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEfjIgPmV4cGVjdAorCSkgJiYKKwlzZWQgLWUgIjEsOWQiIGV4cGVjdCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVubmluZyAiZ2l0IHJlYmFzZSAtLWV4ZWMgZ2l0IHNob3cgSEVBRCAtaSInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlnaXQgcmViYXNlIC0tZXhlYyAiZ2l0IHNob3cgSEVBRCIgLWkgSEVBRH4yID5hY3R1YWwgJiYKKwkJRkFLRV9MSU5FUz0iMSBleGVjX2dpdF9zaG93X0hFQUQgMiBleGVjX2dpdF9zaG93X0hFQUQiICYmCisJCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJCWdpdCByZWJhc2UgLWkgSEVBRH4yID5leHBlY3QKKwkpICYmCisJc2VkIC1lICIxLDlkIiBleHBlY3QgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bm5pbmcgImdpdCByZWJhc2UgLWl4IGdpdCBzaG93IEhFQUQiJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBleGVjdXRlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJZ2l0IHJlYmFzZSAtaXggImdpdCBzaG93IEhFQUQiIEhFQUR+MiA+YWN0dWFsICYmCisJCUZBS0VfTElORVM9IjEgZXhlY19naXRfc2hvd19IRUFEIDIgZXhlY19naXRfc2hvd19IRUFEIiAmJgorCQlleHBvcnQgRkFLRV9MSU5FUyAmJgorCQlnaXQgcmViYXNlIC1pIEhFQUR+MiA+ZXhwZWN0CisJKSAmJgorCXNlZCAtZSAiMSw5ZCIgZXhwZWN0ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaXggd2l0aCBzZXZlcmFsIDxDTUQ+JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBleGVjdXRlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJZ2l0IHJlYmFzZSAtaXggImdpdCBzaG93IEhFQUQ7IHB3ZCIgSEVBRH4yID5hY3R1YWwgJiYKKwkJRkFLRV9MSU5FUz0iMSBleGVjX2dpdF9zaG93X0hFQUQ7X3B3ZCAyIGV4ZWNfZ2l0X3Nob3dfSEVBRDtfcHdkIiAmJgorCQlleHBvcnQgRkFLRV9MSU5FUyAmJgorCQlnaXQgcmViYXNlIC1pIEhFQUR+MiA+ZXhwZWN0CisJKSAmJgorCXNlZCAtZSAiMSw5ZCIgZXhwZWN0ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWl4IHdpdGggc2V2ZXJhbCBpbnN0YW5jZXMgb2YgLS1leGVjJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBleGVjdXRlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIC0tZXhlYyAicHdkIiBIRUFEfjIgPmFjdHVhbCAmJgorCQlGQUtFX0xJTkVTPSIxIGV4ZWNfZ2l0X3Nob3dfSEVBRCBleGVjX3B3ZCAyCisJCQkJZXhlY19naXRfc2hvd19IRUFEIGV4ZWNfcHdkIiAmJgorCQlleHBvcnQgRkFLRV9MSU5FUyAmJgorCQlnaXQgcmViYXNlIC1pIEhFQUR+MiA+ZXhwZWN0CisJKSAmJgorCXNlZCAtZSAiMSwxMWQiIGV4cGVjdCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ3JlYmFzZSAtaXggd2l0aCAtLWF1dG9zcXVhc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYXV0b3NxdWFzaCAmJgorCWVjaG8gc2Vjb25kID5zZWNvbmQudHh0ICYmCisJZ2l0IGFkZCBzZWNvbmQudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiZml4dXAhIHR3b19leGVjIiAmJgorCWVjaG8gYmlzID5iaXMudHh0ICYmCisJZ2l0IGFkZCBiaXMudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiZml4dXAhIHR3b19leGVjIiAmJgorCWdpdCBjaGVja291dCAtYiBhdXRvc3F1YXNoX2FjdHVhbCAmJgorCWdpdCByZWJhc2UgLWkgLS1leGVjICJnaXQgc2hvdyBIRUFEIiAtLWF1dG9zcXVhc2ggSEVBRH40ID5hY3R1YWwgJiYKKwlnaXQgY2hlY2tvdXQgYXV0b3NxdWFzaCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCWdpdCBjaGVja291dCAtYiBhdXRvc3F1YXNoX2V4cGVjdGVkICYmCisJCUZBS0VfTElORVM9IjEgZml4dXAgMyBmaXh1cCA0IGV4ZWNfZ2l0X3Nob3dfSEVBRCAyIGV4ZWNfZ2l0X3Nob3dfSEVBRCIgJiYKKwkJZXhwb3J0IEZBS0VfTElORVMgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEfjQgPmV4cGVjdAorCSkgJiYKKwlzZWQgLWUgIjEsMTNkIiBleHBlY3QgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWV4ZWMgd29ya3Mgd2l0aG91dCAtaSAnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKKwlybSAtcmYgZXhlY19vdXRwdXQgJiYKKwlFRElUT1I9ImVjaG8gPmludm9rZWRfZWRpdG9yIiBnaXQgcmViYXNlIC0tZXhlYyAiZWNobyBhIGxpbmUgPj5leGVjX291dHB1dCIgIEhFQUR+MiAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgICJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCIgYWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBleGVjX291dHB1dCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGludm9rZWRfZWRpdG9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLWV4ZWMgd2l0aG91dCA8Q01EPicgJworCWdpdCByZXNldCAtLWhhcmQgZXhlY3V0ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1leGVjIDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAicmVxdWlyZXMgYSB2YWx1ZSIgYWN0dWFsICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHJlLW9yZGVyIGFuZCBkcm9wIGNvbW1pdHMnICcKKwlnaXQgY2hlY2tvdXQgRSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjMgMSAyIDUiIGdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgorCXRlc3QgRSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdCBCID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdCBBID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReXiB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgQyA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXl5eIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdCAwID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReXl4gfCBncmVwIC1jIF5wYXJlbnRcICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCByZXRhaW4gcm9vdCBjb21taXQgYXV0aG9yIGFuZCBtZXNzYWdlJyAnCisJZ2l0IGNoZWNrb3V0IEEgJiYKKwllY2hvIEIgPmZpbGU3ICYmCisJZ2l0IGFkZCBmaWxlNyAmJgorCUdJVF9BVVRIT1JfTkFNRT0iVHdlcnAgU25vZyIgZ2l0IGNvbW1pdCAtbSAiZGlmZmVyZW50IGF1dGhvciIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIyIiBnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIC1xICJeYXV0aG9yIFR3ZXJwIFNub2ciICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAtcSAiXmRpZmZlcmVudCBhdXRob3IkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHRlbXBvcmFyeSBzZW50aW5lbCBjb21taXQnICcKKwlnaXQgY2hlY2tvdXQgQiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIyIiBnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwICJedHJlZSAkRU1QVFlfVFJFRSIgJiYKKwlnaXQgcmViYXNlIC0tYWJvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCBmaXh1cCByb290IGNvbW1pdCcgJworCWdpdCBjaGVja291dCBCICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSBmaXh1cCAyIiBnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKKwl0ZXN0IEEgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgQiA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlMSkgJiYKKwl0ZXN0IDAgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgLWMgXnBhcmVudFwgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHJld29yZCBvcmlnaW5hbCByb290IGNvbW1pdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmV3b3JkLW9yaWdpbmFsLXJvb3QtYnJhbmNoIG1hc3RlciAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9InJld29yZCAxIDIiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkEgY2hhbmdlZCIgXAorCQkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QKKwkpICYmCisJZ2l0IHNob3cgSEVBRF4gfCBncmVwICJBIGNoYW5nZWQiICYmCisJdGVzdCAteiAiJChnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcCBIRUFEXikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgcmV3b3JkIG5ldyByb290IGNvbW1pdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmV3b3JkLW5vdy1yb290LWJyYW5jaCBtYXN0ZXIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJyZXdvcmQgMyAxIiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJDIGNoYW5nZWQiIFwKKwkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QKKwkpICYmCisJZ2l0IHNob3cgSEVBRF4gfCBncmVwICJDIGNoYW5nZWQiICYmCisJdGVzdCAteiAiJChnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcCBIRUFEXikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3Qgd2hlbiByb290IGhhcyB1bnRyYWNrZWQgZmlsZSBjb25mbGljdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVzZXRfcmViYXNlIiAmJgorCWdpdCBjaGVja291dCAtYiBmYWlsaW5nLXJvb3QtcGljayBBICYmCisJZWNobyB4ID5maWxlMiAmJgorCWdpdCBybSBmaWxlMSAmJgorCWdpdCBjb21taXQgLW0gInJlbW92ZSBmaWxlIDEgYWRkIGZpbGUgMiIgJiYKKwllY2hvIHogPmZpbGUxICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QKKwkpICYmCisJcm0gZmlsZTEgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1mb3JtYXQ9JUIpIiA9ICJyZW1vdmUgZmlsZSAxIGFkZCBmaWxlIDIiICYmCisJdGVzdCAiJChnaXQgcmV2LWxpc3QgLS1jb3VudCBIRUFEKSIgPSAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgcmV3b3JkIHJvb3Qgd2hlbiByb290IGhhcyB1bnRyYWNrZWQgZmlsZSBjb25mbGljdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVzZXRfcmViYXNlIiAmJgorCWVjaG8gej5maWxlMSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSJyZXdvcmQgMSAyIiBcCisJCQlGQUtFX0NPTU1JVF9NRVNTQUdFPSJNb2RpZmllZCBBIiBnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCQlybSBmaWxlMSAmJgorCQlGQUtFX0NPTU1JVF9NRVNTQUdFPSJSZXdvcmRlZCBBIiBnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCisJdGVzdCAiJChnaXQgbG9nIC0xIC0tZm9ybWF0PSVCIEhFQUReKSIgPSAiUmV3b3JkZWQgQSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtbGlzdCAtLWNvdW50IEhFQUQpIiA9IDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ3JlYmFzZSAtLWVkaXQtdG9kbyBkb2VzIG5vdCB3b3JrIG9uIG5vbi1pbnRlcmFjdGl2ZSByZWJhc2UnICcKKwlnaXQgY2hlY2tvdXQgcmV3b3JkLW9yaWdpbmFsLXJvb3QtYnJhbmNoICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBjb25mbGljdC1icmFuY2ggJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1mIC0tYXBwbHkgLS1vbnRvIEhFQUR+MiBIRUFEfiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tZWRpdC10b2RvCisJKSAmJgorCWdpdCByZWJhc2UgLS1hYm9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1lZGl0LXRvZG8gY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRvZG8nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG5vLWNvbmZsaWN0LWJyYW5jaF4wICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIDIgMyIgZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwkJRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC0tZWRpdC10b2RvICYmCisJCWdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKKwl0ZXN0IE0gPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkgJiYKKwl0ZXN0IEwgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgcHJvZHVjZXMgcmVhZGFibGUgcmVmbG9nJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBicmFuY2ggLWYgYnJhbmNoLXJlZmxvZy10ZXN0IEggJiYKKwlnaXQgcmViYXNlIC1pIC0tb250byBJIEYgYnJhbmNoLXJlZmxvZy10ZXN0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXJlYmFzZSAoZmluaXNoKTogcmV0dXJuaW5nIHRvIHJlZnMvaGVhZHMvYnJhbmNoLXJlZmxvZy10ZXN0CisJcmViYXNlIChwaWNrKTogSAorCXJlYmFzZSAocGljayk6IEcKKwlyZWJhc2UgKHN0YXJ0KTogY2hlY2tvdXQgSQorCUVPRgorCWdpdCByZWZsb2cgLW40IEhFQUQgfAorCXNlZCAicy9bXjpdKjogLy8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSByZXNwZWN0cyBjb3JlLmNvbW1lbnRjaGFyJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBFXjAgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLmNvbW1lbnRjaGFyICJcXCIgJiYKKwl3cml0ZV9zY3JpcHQgcmVtb3ZlLWFsbC1idXQtZmlyc3Quc2ggPDwtXEVPRiAmJgorCXNlZCAtZSAiMixcJHMvXi9cXFxcLyIgIiQxIiA+IiQxLnRtcCIgJiYKKwltdiAiJDEudG1wIiAiJDEiCisJRU9GCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9yZW1vdmUtYWxsLWJ1dC1maXJzdC5zaCIgJiYKKwkJZ2l0IHJlYmFzZSAtaSBCCisJKSAmJgorCXRlc3QgQiA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgcmVzcGVjdHMgY29yZS5jb21tZW50Y2hhcj1hdXRvJyAnCisJdGVzdF9jb25maWcgY29yZS5jb21tZW50Y2hhciBhdXRvICYmCisJd3JpdGVfc2NyaXB0IGNvcHktZWRpdC1zY3JpcHQuc2ggPDwtXEVPRiAmJgorCWNwICIkMSIgZWRpdC1zY3JpcHQKKwlFT0YKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCB8fCA6IiAmJgorCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvY29weS1lZGl0LXNjcmlwdC5zaCIgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEXgorCSkgJiYKKwl0ZXN0IC16ICIkKGdyZXAgLXZlICJeIyIgLWUgIl5cJCIgLWUgIl5waWNrIiBlZGl0LXNjcmlwdCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSwgd2l0aCA8b250bz4gYW5kIDx1cHN0cmVhbT4gc3BlY2lmaWVkIGFzIDovcXV1eGVyeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGJyYW5jaCAtRCB0b3JlYmFzZSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdG9yZWJhc2UgYnJhbmNoMSAmJgorCXVwc3RyZWFtPSQoZ2l0IHJldi1wYXJzZSAiOi9KIikgJiYKKwlvbnRvPSQoZ2l0IHJldi1wYXJzZSAiOi9BIikgJiYKKwlnaXQgcmViYXNlIC0tb250byAkb250byAkdXBzdHJlYW0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGJyYW5jaDEgJiYKKwlnaXQgcmViYXNlIC0tb250byAiOi9BIiAiOi9KIiAmJgorCWdpdCBjaGVja291dCBicmFuY2gxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSB3aXRoIC0tc3RyYXRlZ3kgYW5kIC1YJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0LW1lcmdlLXVzZS10aGVpcnMgY29uZmxpY3QtYnJhbmNoICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWVjaG8gZml2ZSA+Y29uZmxpY3QgJiYKKwllY2hvIFogPmZpbGUxICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAib25lIGZpbGUgY29uZmxpY3QiICYmCisJRURJVE9SPXRydWUgZ2l0IHJlYmFzZSAtaSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSAtWG91cnMgY29uZmxpY3QtYnJhbmNoICYmCisJdGVzdCAkKGdpdCBzaG93IGNvbmZsaWN0LWJyYW5jaDpjb25mbGljdCkgPSAkKGNhdCBjb25mbGljdCkgJiYKKwl0ZXN0ICQoY2F0IGZpbGUxKSA9IFoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgcmViYXNlIC1pIHdpdGggLS1zdHJhdGVneSBhbmQgLVgnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QtbWVyZ2UtdXNlLXRoZWlycy1pbnRlcnJ1cHRlZCBjb25mbGljdC1icmFuY2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJPmJyZWFrcG9pbnQgJiYKKwlnaXQgYWRkIGJyZWFrcG9pbnQgJiYKKwlnaXQgY29tbWl0IC1tICJicmVha3BvaW50IGZvciBpbnRlcmFjdGl2ZSBtb2RlIiAmJgorCWVjaG8gZml2ZSA+Y29uZmxpY3QgJiYKKwllY2hvIFogPmZpbGUxICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAib25lIGZpbGUgY29uZmxpY3QiICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIDIiIGdpdCByZWJhc2UgLWkgLS1zdHJhdGVneT1yZWN1cnNpdmUgXAorCQkJLVhvdXJzIGNvbmZsaWN0LWJyYW5jaAorCSkgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0ICQoZ2l0IHNob3cgY29uZmxpY3QtYnJhbmNoOmNvbmZsaWN0KSA9ICQoY2F0IGNvbmZsaWN0KSAmJgorCXRlc3QgJChjYXQgZmlsZTEpID0gWgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgZXJyb3Igb24gY29tbWl0cyB3aXRoIFwgaW4gbWVzc2FnZScgJworCWN1cnJlbnRfaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydDsgZ2l0IHJlc2V0IC0taGFyZCAkY3VycmVudF9oZWFkOyBybSAtZiBlcnJvciIgJiYKKwl0ZXN0X2NvbW1pdCBUTy1SRU1PVkUgd2lsbC1jb25mbGljdCBvbGQtY29udGVudCAmJgorCXRlc3RfY29tbWl0ICJcdGVtcCIgd2lsbC1jb25mbGljdCBuZXctY29udGVudCBkdW1teSAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBFRElUT1I9dHJ1ZSBnaXQgcmViYXNlIC1pIEhFQUReIC0tb250byBIRUFEXl4gMj5lcnJvciAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBncmVwICAiCWVtcCIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTSEExICdzaG9ydCBTSEEtMSBzZXR1cCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gY29sbGlkZSAmJgorCWdpdCBybSAtcmYgLiAmJgorCSgKKwl1bnNldCB0ZXN0X3RpY2sgJiYKKwl0ZXN0X2NvbW1pdCBjb2xsaWRlMSBjb2xsaWRlICYmCisJdGVzdF9jb21taXQgLS1ub3RpY2sgY29sbGlkZTIgY29sbGlkZSAmJgorCXRlc3RfY29tbWl0IC0tbm90aWNrIGNvbGxpZGUzIGNvbGxpZGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0hBMSAnc2hvcnQgU0hBLTEgY29sbGlkZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVzZXRfcmViYXNlICYmIGdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IGNvbGxpZGUgJiYKKwljb2xsaWRpbmdfc2hhMT02YmNkYTM3ICYmCisJdGVzdCAkY29sbGlkaW5nX3NoYTEgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQgfCBjdXQgLWMgMS03KSIgJiYKKwkoCisJCXVuc2V0IHRlc3RfdGljayAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9ImNvbGxpZGUyIGFjNGYyZWUiIFwKKwkJRkFLRV9MSU5FUz0icmV3b3JkIDEgYnJlYWsgMiIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIgJiYKKwkJdGVzdCAkY29sbGlkaW5nX3NoYTEgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQgfCBjdXQgLWMgMS03KSIgJiYKKwkJZ3JlcCAiXnBpY2sgJGNvbGxpZGluZ19zaGExICIgXAorCQkJLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvLnRtcCAmJgorCQlncmVwICJecGljayBbMC05YS1mXVx7NDBcfSIgXAorCQkJLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvICYmCisJCWdyZXAgIl5waWNrIFswLTlhLWZdXHs0MFx9IiBcCisJCQkuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8uYmFja3VwICYmCisJCWdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKKwljb2xsaWRlMj0iJChnaXQgcmV2LXBhcnNlIEhFQUR+MSB8IGN1dCAtYyAxLTQpIiAmJgorCWNvbGxpZGUzPSIkKGdpdCByZXYtcGFyc2UgY29sbGlkZTMgfCBjdXQgLWMgMS00KSIgJiYKKwl0ZXN0ICIkY29sbGlkZTIiID0gIiRjb2xsaWRlMyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzcGVjdCBjb3JlLmFiYnJldicgJworCWdpdCBjb25maWcgY29yZS5hYmJyZXYgMTIgJiYKKwkoCisJCXNldF9jYXRfdG9kb19lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBIRUFEfjQgPnRvZG8tbGlzdAorCSkgJiYKKwl0ZXN0IDQgPSAkKGdyZXAgLWMgInBpY2sgWzAtOWEtZl1cezEyLFx9IiB0b2RvLWxpc3QpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RvZG8gY291bnQnICcKKwl3cml0ZV9zY3JpcHQgZHVtcC1yYXcuc2ggPDwtXEVPRiAmJgorCQljYXQgIiQxIgorCUVPRgorCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvZHVtcC1yYXcuc2giICYmCisJCWdpdCByZWJhc2UgLWkgSEVBRH40ID5hY3R1YWwKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiXiMgUmViYXNlIC4uKiBvbnRvIC4uKiAoWzAtOV0iIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY29tbWl0cyB0aGF0IG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZXMgKHBpY2spJyAnCisJZ2l0IGNoZWNrb3V0IC0tZm9yY2UgYnJhbmNoMiAmJgorCWdpdCBjbGVhbiAtZiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgMSAyIiBnaXQgcmViYXNlIC1pIEEKKwkpICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgRiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGU2ICYmCisJPmZpbGU2ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgRiAmJgorCXJtIGZpbGU2ICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgSQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY29tbWl0cyB0aGF0IG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZXMgKHNxdWFzaCknICcKKwlnaXQgY2hlY2tvdXQgLS1mb3JjZSBicmFuY2gyICYmCisJZ2l0IGNsZWFuIC1mICYmCisJZ2l0IHRhZyBvcmlnaW5hbC1icmFuY2gyICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIHNxdWFzaCAyIiBnaXQgcmViYXNlIC1pIEEKKwkpICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgRiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGU2ICYmCisJPmZpbGU2ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgRiAmJgorCXJtIGZpbGU2ICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSA9IEkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbmFsLWJyYW5jaDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIGNvbW1pdHMgdGhhdCBvdmVyd3JpdGUgdW50cmFja2VkIGZpbGVzIChubyBmZiknICcKKwlnaXQgY2hlY2tvdXQgLS1mb3JjZSBicmFuY2gyICYmCisJZ2l0IGNsZWFuIC1mICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIDIiIGdpdCByZWJhc2UgLWkgLS1uby1mZiBBCisJKSAmJgorCXRlc3QgJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgPSBGICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTYgJiYKKwk+ZmlsZTYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApID0gRiAmJgorCXJtIGZpbGU2ICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSA9IEkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tY29udGludWUgcmVtb3ZlcyBDSEVSUllfUElDS19IRUFEJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvbW1pdC10by1za2lwICYmCisJZm9yIGRvdWJsZSBpbiBYIDMgMQorCWRvCisJCXRlc3Rfc2VxIDUgfCBzZWQgInMvJGRvdWJsZS8mJi8iID5zZXEgJiYKKwkJZ2l0IGFkZCBzZXEgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gc2VxLSRkb3VibGUKKwlkb25lICYmCisJZ2l0IHRhZyBzZXEtb250byAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRH4yICYmCisJZ2l0IGNoZXJyeS1waWNrIHNlcS1vbnRvICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IGdpdCByZWJhc2UgLWkgc2VxLW9udG8KKwkpICYmCisJdGVzdCAtZCAuZ2l0L3JlYmFzZS1tZXJnZSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlcS1vbnRvICYmCisJdGVzdCAhIC1kIC5naXQvcmViYXNlLW1lcmdlICYmCisJdGVzdCAhIC1mIC5naXQvQ0hFUlJZX1BJQ0tfSEVBRAorJworCityZWJhc2Vfc2V0dXBfYW5kX2NsZWFuICgpIHsKKwl0ZXN0X3doZW5fZmluaXNoZWQgIgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EICQxICYmCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQKKwkiICYmCisJZ2l0IGNoZWNrb3V0IC1iICQxICR7MjotbWFzdGVyfQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkcm9wJyAnCisJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBkcm9wLXRlc3QgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIGRyb3AgMiAzIGQgNCA1IiBnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKKwl0ZXN0IEUgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgQyA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgQSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXl4gfCBzZWQgLW5lIFwkcCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHJlc3BlY3RzIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrID0gaWdub3JlJyAnCisJdGVzdF9jb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgaWdub3JlICYmCisJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBtaXNzaW5nLWNvbW1pdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgMiAzIDQiIGdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsCisJKSAmJgorCXRlc3QgRCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdF9pMThuZ3JlcCBcCisJCSJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCByZWZzL2hlYWRzL21pc3NpbmctY29tbWl0IiBcCisJCWFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgcmVzcGVjdHMgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgPSB3YXJuJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJV2FybmluZzogc29tZSBjb21taXRzIG1heSBoYXZlIGJlZW4gZHJvcHBlZCBhY2NpZGVudGFsbHkuCisJRHJvcHBlZCBjb21taXRzIChuZXdlciB0byBvbGRlcik6CisJIC0gJChnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQgLTEgbWFzdGVyKQorCVRvIGF2b2lkIHRoaXMgbWVzc2FnZSwgdXNlICJkcm9wIiB0byBleHBsaWNpdGx5IHJlbW92ZSBhIGNvbW1pdC4KKwlFT0YKKwl0ZXN0X2NvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayB3YXJuICYmCisJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBtaXNzaW5nLWNvbW1pdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgMiAzIDQiIGdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsLjIKKwkpICYmCisJaGVhZCAtbjQgYWN0dWFsLjIgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdCBEID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHJlc3BlY3RzIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrID0gZXJyb3InICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS4KKwlEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKToKKwkgLSAkKGdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCAtMSBtYXN0ZXIpCisJIC0gJChnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQgLTEgbWFzdGVyfjIpCisJVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgImRyb3AiIHRvIGV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LgorCisJVXNlICdcJydnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJ1wnJyB0byBjaGFuZ2UgdGhlIGxldmVsIG9mIHdhcm5pbmdzLgorCVRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci4KKworCVlvdSBjYW4gZml4IHRoaXMgd2l0aCAnXCcnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbydcJycgYW5kIHRoZW4gcnVuICdcJydnaXQgcmViYXNlIC0tY29udGludWUnXCcnLgorCU9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdcJydnaXQgcmViYXNlIC0tYWJvcnQnXCcnLgorCUVPRgorCXRlc3RfY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrIGVycm9yICYmCisJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBtaXNzaW5nLWNvbW1pdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIDIgNCIgXAorCQkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJY3AgLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvLmJhY2t1cCBcCisJCQkuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8gJiYKKwkJRkFLRV9MSU5FUz0iMSAyIGRyb3AgMyA0IGRyb3AgNSIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbworCSkgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0IEQgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgQiA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1lZGl0LXRvZG8gcmVzcGVjdHMgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgPSBpZ25vcmUnICcKKwl0ZXN0X2NvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayBpZ25vcmUgJiYKKwlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIG1pc3NpbmctY29tbWl0ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iYnJlYWsgMSAyIDMgNCA1IiBnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCQlGQUtFX0xJTkVTPSIxIDIgMyA0IiBnaXQgcmViYXNlIC0tZWRpdC10b2RvICYmCisJCWdpdCByZWJhc2UgLS1jb250aW51ZSAyPmFjdHVhbAorCSkgJiYKKwl0ZXN0IEQgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3RfaTE4bmdyZXAgXAorCQkiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgcmVmcy9oZWFkcy9taXNzaW5nLWNvbW1pdCIgXAorCQlhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tZWRpdC10b2RvIHJlc3BlY3RzIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrID0gd2FybicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWVycm9yOiBpbnZhbGlkIGxpbmUgMTogYmFkY21kICQoZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0IC0xIG1hc3Rlcn40KQorCVdhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LgorCURyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOgorCSAtICQoZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0IC0xIG1hc3RlcikKKwkgLSAkKGdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCAtMSBtYXN0ZXJ+NCkKKwlUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSAiZHJvcCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuCisJRU9GCisJaGVhZCAtbjQgZXhwZWN0ID5leHBlY3QuMiAmJgorCXRhaWwgLW4xIGV4cGVjdCA+PmV4cGVjdC4yICYmCisJdGFpbCAtbjQgZXhwZWN0LjIgPmV4cGVjdC4zICYmCisJdGVzdF9jb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgd2FybiAmJgorCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gbWlzc2luZy1jb21taXQgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iYmFkIDEgMiAzIDQgNSIgXAorCQkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKKwkJY3AgLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvLmJhY2t1cCBvcmlnICYmCisJCUZBS0VfTElORVM9IjIgMyA0IiBnaXQgcmViYXNlIC0tZWRpdC10b2RvIDI+YWN0dWFsLjIgJiYKKwkJaGVhZCAtbjYgYWN0dWFsLjIgPmFjdHVhbCAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQljcCBvcmlnIC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyAmJgorCQlGQUtFX0xJTkVTPSIxIDIgMyA0IiBnaXQgcmViYXNlIC0tZWRpdC10b2RvIDI+YWN0dWFsLjIgJiYKKwkJaGVhZCAtbjQgYWN0dWFsLjIgPmFjdHVhbCAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0LjMgYWN0dWFsICYmCisJCWdpdCByZWJhc2UgLS1jb250aW51ZSAyPmFjdHVhbAorCSkgJiYKKwl0ZXN0IEQgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3RfaTE4bmdyZXAgXAorCQkiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgcmVmcy9oZWFkcy9taXNzaW5nLWNvbW1pdCIgXAorCQlhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tZWRpdC10b2RvIHJlc3BlY3RzIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrID0gZXJyb3InICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwllcnJvcjogaW52YWxpZCBsaW5lIDE6IGJhZGNtZCAkKGdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCAtMSBtYXN0ZXJ+NCkKKwlXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS4KKwlEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKToKKwkgLSAkKGdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCAtMSBtYXN0ZXIpCisJIC0gJChnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQgLTEgbWFzdGVyfjQpCisJVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgImRyb3AiIHRvIGV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LgorCisJVXNlICdcJydnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJ1wnJyB0byBjaGFuZ2UgdGhlIGxldmVsIG9mIHdhcm5pbmdzLgorCVRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci4KKworCVlvdSBjYW4gZml4IHRoaXMgd2l0aCAnXCcnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbydcJycgYW5kIHRoZW4gcnVuICdcJydnaXQgcmViYXNlIC0tY29udGludWUnXCcnLgorCU9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdcJydnaXQgcmViYXNlIC0tYWJvcnQnXCcnLgorCUVPRgorCXRhaWwgLW4xMSBleHBlY3QgPmV4cGVjdC4yICYmCisJaGVhZCAtbjMgZXhwZWN0LjIgPmV4cGVjdC4zICYmCisJdGFpbCAtbjcgZXhwZWN0LjIgPj5leHBlY3QuMyAmJgorCXRlc3RfY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrIGVycm9yICYmCisJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBtaXNzaW5nLWNvbW1pdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSJiYWQgMSAyIDMgNCA1IiBcCisJCQlnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCQljcCAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8uYmFja3VwIG9yaWcgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjIgMyA0IiBcCisJCQlnaXQgcmViYXNlIC0tZWRpdC10b2RvIDI+YWN0dWFsICYmCisJCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAyPmFjdHVhbCAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0LjIgYWN0dWFsICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8gJiYKKwkJY3Agb3JpZyAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiAzIDQiIFwKKwkJCWdpdCByZWJhc2UgLS1lZGl0LXRvZG8gMj5hY3R1YWwgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdC4zIGFjdHVhbCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgMj5hY3R1YWwgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdC4zIGFjdHVhbCAmJgorCQljcCBvcmlnIC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyAmJgorCQlGQUtFX0xJTkVTPSIxIDIgMyA0IGRyb3AgNSIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAmJgorCQlnaXQgcmViYXNlIC0tY29udGludWUgMj5hY3R1YWwKKwkpICYmCisJdGVzdCBEID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgJiYKKwl0ZXN0X2kxOG5ncmVwIFwKKwkJIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkIHJlZnMvaGVhZHMvbWlzc2luZy1jb21taXQiIFwKKwkJYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrID0gZXJyb3IgYWZ0ZXIgcmVzb2x2aW5nIGNvbmZsaWN0cycgJworCXRlc3RfY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrIGVycm9yICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZHJvcCAxIGJyZWFrIDIgMyA0IiBnaXQgcmViYXNlIC1pIEEgRQorCSkgJiYKKwlnaXQgcmViYXNlIC0tZWRpdC10b2RvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyB4ID5maWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgPSBlcnJvciB3aGVuIGVkaXRpbmcgZm9yIGEgc2Vjb25kIHRpbWUnICcKKwl0ZXN0X2NvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayBlcnJvciAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgYnJlYWsgMiAzIiBnaXQgcmViYXNlIC1pIEEgRCAmJgorCQljcCAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8gdG9kbyAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0yIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8gJiYKKwkJR0lUX1NFUVVFTkNFX0VESVRPUj0iY3AgdG9kbyIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAmJgorCQlnaXQgcmViYXNlIC0tY29udGludWUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3BlY3RzIHJlYmFzZS5hYmJyZXZpYXRlQ29tbWFuZHMgd2l0aCBmaXh1cCwgc3F1YXNoIGFuZCBleGVjJyAnCisJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBhYmJyZXZjbWQgJiYKKwl0ZXN0X2NvbW1pdCAiZmlyc3QiIGZpbGUxLnR4dCAiZmlyc3QgbGluZSIgZmlyc3QgJiYKKwl0ZXN0X2NvbW1pdCAic2Vjb25kIiBmaWxlMS50eHQgImFub3RoZXIgbGluZSIgc2Vjb25kICYmCisJdGVzdF9jb21taXQgImZpeHVwISBmaXJzdCIgZmlsZTIudHh0ICJmaXJzdCBsaW5lIGFnYWluIiBmaXJzdF9maXh1cCAmJgorCXRlc3RfY29tbWl0ICJzcXVhc2ghIHNlY29uZCIgZmlsZTEudHh0ICJhbm90aGVyIGxpbmUgaGVyZSIgc2Vjb25kX3NxdWFzaCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJcCAkKGdpdCByZXYtbGlzdCAtLWFiYnJldi1jb21taXQgLTEgZmlyc3QpIGZpcnN0CisJZiAkKGdpdCByZXYtbGlzdCAtLWFiYnJldi1jb21taXQgLTEgZmlyc3RfZml4dXApIGZpeHVwISBmaXJzdAorCXggZ2l0IHNob3cgSEVBRAorCXAgJChnaXQgcmV2LWxpc3QgLS1hYmJyZXYtY29tbWl0IC0xIHNlY29uZCkgc2Vjb25kCisJcyAkKGdpdCByZXYtbGlzdCAtLWFiYnJldi1jb21taXQgLTEgc2Vjb25kX3NxdWFzaCkgc3F1YXNoISBzZWNvbmQKKwl4IGdpdCBzaG93IEhFQUQKKwlFT0YKKwlnaXQgY2hlY2tvdXQgYWJicmV2Y21kICYmCisJdGVzdF9jb25maWcgcmViYXNlLmFiYnJldmlhdGVDb21tYW5kcyB0cnVlICYmCisJKAorCQlzZXRfY2F0X3RvZG9fZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1leGVjICJnaXQgc2hvdyBIRUFEIiBcCisJCQktLWF1dG9zcXVhc2ggbWFzdGVyID5hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXRpYyBjaGVjayBvZiBiYWQgY29tbWFuZCcgJworCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gYmFkLWNtZCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIDIgMyBiYWQgNCA1IiBcCisJCWdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsICYmCisJCXRlc3RfaTE4bmdyZXAgImJhZGNtZCAkKGdpdCByZXYtbGlzdCAtLW9uZWxpbmUgLTEgbWFzdGVyfjEpIiBcCisJCQkJYWN0dWFsICYmCisJCXRlc3RfaTE4bmdyZXAgIllvdSBjYW4gZml4IHRoaXMgd2l0aCAuZ2l0IHJlYmFzZSAtLWVkaXQtdG9kby4uIiBcCisJCQkJYWN0dWFsICYmCisJCUZBS0VfTElORVM9IjEgMiAzIGRyb3AgNCA1IiBnaXQgcmViYXNlIC0tZWRpdC10b2RvCisJKSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgRSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdCBDID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1uZSBcJHApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhYnMgYW5kIHNwYWNlcyBhcmUgYWNjZXB0ZWQgaW4gdGhlIHRvZG9saXN0JyAnCisJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBpbmRlbnRlZC1jb21tZW50ICYmCisJd3JpdGVfc2NyaXB0IGFkZC1pbmRlbnQuc2ggPDwtXEVPRiAmJgorCSgKKwkJIyBUdXJuIHNpbmdsZSBzcGFjZXMgaW50byBzcGFjZS90YWIgbWl4CisJCXNlZCAiMXMvIC8JL2c7IDJzLyAvICAvZzsgM3MvIC8gCS9nIiAiJDEiCisJCXByaW50ZiAiXG5cdCMgY29tbWVudFxuICNtb3JlXG5cdCAjIGNvbW1lbnRcbiIKKwkpID4iJDEubmV3IgorCW12ICIkMS5uZXciICIkMSIKKwlFT0YKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2FkZC1pbmRlbnQuc2giICYmCisJCWdpdCByZWJhc2UgLWkgSEVBRF5eXgorCSkgJiYKKwl0ZXN0IEUgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0aWMgY2hlY2sgb2YgYmFkIFNIQS0xJyAnCisJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBiYWQtc2hhICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiBlZGl0IGZha2VzaGEgMyA0IDUgIyIgXAorCQkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwgJiYKKwkJCXRlc3RfaTE4bmdyZXAgImVkaXQgWFhYWFhYWCBGYWxzZSBjb21taXQiIGFjdHVhbCAmJgorCQkJdGVzdF9pMThuZ3JlcCAiWW91IGNhbiBmaXggdGhpcyB3aXRoIC5naXQgcmViYXNlIC0tZWRpdC10b2RvLi4iIFwKKwkJCQkJYWN0dWFsICYmCisJCUZBS0VfTElORVM9IjEgMiA0IDUgNiIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbworCSkgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0IEUgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0b3Igc2F2ZXMgYXMgQ1IvTEYnICcKKwlnaXQgY2hlY2tvdXQgLWIgd2l0aC1jcmxmICYmCisJd3JpdGVfc2NyaXB0IGFkZC1jcnMuc2ggPDwtXEVPRiAmJgorCXNlZCAtZSAicy9cJC9RLyIgPCIkMSIgfCB0ciBRICJcXDAxNSIgPiIkMSIubmV3ICYmCisJbXYgLWYgIiQxIi5uZXcgIiQxIgorCUVPRgorCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvYWRkLWNycy5zaCIgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEXgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tZ3BnLXNpZ249PGtleS1pZD4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIC0tZ3BnLXNpZ249IlwiUyBJIEduZXJcIiIgXAorCQkJSEVBRF4gPm91dCAyPmVycgorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICIkU1EtU1wiUyBJIEduZXJcIiRTUSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLWdwZy1zaWduPTxrZXktaWQ+IG92ZXJyaWRlcyBjb21taXQuZ3BnU2lnbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwl0ZXN0X2NvbmZpZyBjb21taXQuZ3Bnc2lnbiB0cnVlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIC0tZ3BnLXNpZ249IlwiUyBJIEduZXJcIiIgXAorCQkJSEVBRF4gPm91dCAyPmVycgorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICIkU1EtU1wiUyBJIEduZXJcIiRTUSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkIGF1dGhvciBoZWFkZXIgYWZ0ZXIgLS1yb290IHN3YXAnICcKKwlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIGF1dGhvci1oZWFkZXIgbm8tY29uZmxpY3QtYnJhbmNoICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tYXV0aG9yPSJBdSAke1NRfXRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4iIC0tbm8tZWRpdCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgXmF1dGhvciA+ZXhwZWN0ZWQgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSI1IDEiIGdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBncmVwIF5hdXRob3IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZCBhdXRob3IgaGVhZGVyIHdoZW4gYXV0aG9yIGNvbnRhaW5zIHNpbmdsZSBxdW90ZScgJworCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gYXV0aG9yLWhlYWRlciBuby1jb25mbGljdC1icmFuY2ggJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1hdXRob3I9IkF1ICR7U1F9dGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiIgLS1uby1lZGl0ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCBeYXV0aG9yID5leHBlY3RlZCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjIiIGdpdCByZWJhc2UgLWkgSEVBRH4yCisJKSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgXmF1dGhvciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtY29tbWl0IGhvb2sgaXMgY2FsbGVkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L2hvb2tzL3Bvc3QtY29tbWl0IiAmJgorCT5hY3R1YWwgJiYKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcG9zdC1jb21taXQgPDwtXEVPUyAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+PmFjdHVhbAorCUVPUworCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgNCAxIHJld29yZCAyIGZpeHVwIDMiIGdpdCByZWJhc2UgLWkgQSBFICYmCisJCWVjaG8geD5maWxlMyAmJgorCQlnaXQgYWRkIGZpbGUzICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9ZWRpdGVkIGdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQURAezV9IEhFQURAezR9IEhFQURAezN9IEhFQURAezJ9IEhFQURAezF9IEhFQUQgXAorCQk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JyZWN0IGVycm9yIG1lc3NhZ2UgZm9yIHBhcnRpYWwgY29tbWl0IGFmdGVyIGVtcHR5IHBpY2snICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIyIDEgMSIgJiYKKwkJZXhwb3J0IEZBS0VfTElORVMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBBIEQKKwkpICYmCisJZWNobyB4ID5maWxlMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgZmlsZTEgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCBlcnJvciBtZXNzYWdlIGZvciBjb21taXQgLS1hbWVuZCBhZnRlciBlbXB0eSBwaWNrJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSAxIiAmJgorCQlleHBvcnQgRkFLRV9MSU5FUyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIEEgRAorCSkgJiYKKwllY2hvIHg+ZmlsZTEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1hIC0tYW1lbmQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJtaWRkbGUgb2YgYSByZWJhc2UgLS0gY2Fubm90IGFtZW5kLiIgZXJyCisnCisKKyMgVGhpcyBtdXN0IGJlIHRoZSBsYXN0IHRlc3QgaW4gdGhpcyBmaWxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICckRURJVE9SIGFuZCBmcmllbmRzIGFyZSB1bmNoYW5nZWQnICcKKwl0ZXN0X2VkaXRvcl91bmNoYW5nZWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDA1LXJlYmFzZS1tYWxmb3JtZWQuc2ggYi90L3QzNDA1LXJlYmFzZS1tYWxmb3JtZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODYwZTYzZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MDUtcmViYXNlLW1hbGZvcm1lZC5zaApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmViYXNlIHNob3VsZCBoYW5kbGUgYXJiaXRyYXJ5IGdpdCBtZXNzYWdlJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCitjYXQgPkYgPDxcRU9GCitUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb21taXQgbG9nIG1lc3NhZ2UKK3RoYXQgZG9lcyBub3QgIGNvbmZvcm0gdG8gZ2l0IGNvbW1pdCBjb252ZW50aW9uLgorCitJdCBoYXMgdHdvIHBhcmFncmFwaHMsIGJ1dCBpdHMgZmlyc3QgcGFyYWdyYXBoIGlzIG5vdCBmcmllbmRseQordG8gb25lbGluZSBzdW1tYXJ5IGZvcm1hdC4KK0VPRgorCitjYXQgPkcgPDxcRU9GCitjb21taXQgbG9nIG1lc3NhZ2UgY29udGFpbmluZyBhIGRpZmYKK0VPRgorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPmZpbGUxICYmCisJPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMSBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0IiAmJgorCWdpdCBicmFuY2ggZGlmZi1pbi1tZXNzYWdlICYmCisJZ2l0IGJyYW5jaCBlbXB0eS1tZXNzYWdlLW1lcmdlICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbXVsdGktbGluZS1zdWJqZWN0ICYmCisJY2F0IEYgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLUYgRiAmJgorCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPkYwICYmCisKKwlnaXQgY2hlY2tvdXQgZGlmZi1pbi1tZXNzYWdlICYmCisJZWNobyAiY29tbWl0IGxvZyBtZXNzYWdlIGNvbnRhaW5pbmcgYSBkaWZmIiA+RyAmJgorCWVjaG8gIiIgPj5HICYmCisJY2F0IEcgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID4+RyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLUYgRyAmJgorCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPkcwICYmCisKKwlnaXQgY2hlY2tvdXQgZW1wdHktbWVzc2FnZS1tZXJnZSAmJgorCWVjaG8gZmlsZTMgPmZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC1tICIiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwllY2hvIE9uZSA+ZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGNvbW1pdCB3aXRoIG11bHRpLWxpbmUgc3ViamVjdCcgJworCisJZ2l0IHJlYmFzZSBtYXN0ZXIgbXVsdGktbGluZS1zdWJqZWN0ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPkYxICYmCisKKwl0ZXN0X2NtcCBGMCBGMSAmJgorCXRlc3RfY21wIEYgRjAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGNvbW1pdCB3aXRoIGRpZmYgaW4gbWVzc2FnZScgJworCWdpdCByZWJhc2UgbWFzdGVyIGRpZmYtaW4tbWVzc2FnZSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXiQvZCIgPkcxICYmCisJdGVzdF9jbXAgRzAgRzEgJiYKKwl0ZXN0X2NtcCBHIEcwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtbSBjb21taXQgd2l0aCBlbXB0eSBtZXNzYWdlJyAnCisJZ2l0IHJlYmFzZSAtbSBtYXN0ZXIgZW1wdHktbWVzc2FnZS1tZXJnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY29tbWl0IHdpdGggZW1wdHkgbWVzc2FnZScgJworCWdpdCBjaGVja291dCBkaWZmLWluLW1lc3NhZ2UgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9DT01NSVRfTUVTU0FHRT0iICIgRkFLRV9MSU5FUz0icmV3b3JkIDEiIFwKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEXgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDYtcmViYXNlLW1lc3NhZ2Uuc2ggYi90L3QzNDA2LXJlYmFzZS1tZXNzYWdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkyN2E0ZjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDA2LXJlYmFzZS1tZXNzYWdlLnNoCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVzc2FnZXMgZnJvbSByZWJhc2Ugb3BlcmF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBPIGZpbGVPICYmCisJdGVzdF9jb21taXQgWCBmaWxlWCAmJgorCXRlc3RfY29tbWl0IEEgZmlsZUEgJiYKKwl0ZXN0X2NvbW1pdCBCIGZpbGVCICYmCisJdGVzdF9jb21taXQgWSBmaWxlWSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHRvcGljIE8gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgQSBCICYmCisJdGVzdF9jb21taXQgWiBmaWxlWiAmJgorCWdpdCB0YWcgc3RhcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1tJyAnCisJZ2l0IHJlYmFzZSAtbSBtYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGFnYWluc3QgbWFzdGVyIHR3aWNlJyAnCisJZ2l0IHJlYmFzZSAtLWFwcGx5IG1hc3RlciA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiQ3VycmVudCBicmFuY2ggdG9waWMgaXMgdXAgdG8gZGF0ZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhZ2FpbnN0IG1hc3RlciB0d2ljZSB3aXRoIC0tZm9yY2UnICcKKwlnaXQgcmViYXNlIC0tZm9yY2UtcmViYXNlIC0tYXBwbHkgbWFzdGVyID5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJDdXJyZW50IGJyYW5jaCB0b3BpYyBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGFnYWluc3QgbWFzdGVyIHR3aWNlIGZyb20gYW5vdGhlciBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgdG9waWNeICYmCisJZ2l0IHJlYmFzZSAtLWFwcGx5IG1hc3RlciB0b3BpYyA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiQ3VycmVudCBicmFuY2ggdG9waWMgaXMgdXAgdG8gZGF0ZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBmYXN0LWZvcndhcmQgdG8gbWFzdGVyJyAnCisJZ2l0IGNoZWNrb3V0IHRvcGljXiAmJgorCWdpdCByZWJhc2UgLS1hcHBseSB0b3BpYyA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiRmFzdC1mb3J3YXJkZWQgSEVBRCB0byB0b3BpYyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXN0YXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHN0YXJ0ICYmCisgICAgICAgIGdpdCByZWJhc2UgLS1zdGF0IG1hc3RlciA+ZGlmZnN0YXQudHh0ICYmCisgICAgICAgIGdyZXAgIl4gZmlsZVggfCAgKjEgKyQiIGRpZmZzdGF0LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugdy9jb25maWcgcmViYXNlLnN0YXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHN0YXJ0ICYmCisgICAgICAgIGdpdCBjb25maWcgcmViYXNlLnN0YXQgdHJ1ZSAmJgorICAgICAgICBnaXQgcmViYXNlIG1hc3RlciA+ZGlmZnN0YXQudHh0ICYmCisgICAgICAgIGdyZXAgIl4gZmlsZVggfCAgKjEgKyQiIGRpZmZzdGF0LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLW4gb3ZlcnJpZGVzIGNvbmZpZyByZWJhc2Uuc3RhdCBjb25maWcnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHN0YXJ0ICYmCisgICAgICAgIGdpdCBjb25maWcgcmViYXNlLnN0YXQgdHJ1ZSAmJgorICAgICAgICBnaXQgcmViYXNlIC1uIG1hc3RlciA+ZGlmZnN0YXQudHh0ICYmCisgICAgICAgICEgZ3JlcCAiXiBmaWxlWCB8ICAqMSArJCIgZGlmZnN0YXQudHh0CisnCisKKyMgT3V0cHV0IHRvIHN0ZGVycjoKKyMKKyMgICAgICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdDogaW52YWxpZC1yZWYiCisjCisjIE5FRURTV09SSzogVGhpcyAiZ3JlcCIgaXMgZmluZSBpbiByZWFsIG5vbi1DIGxvY2FsZXMsIGJ1dAorIyBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTiBwb2lzb25zIHRoZSByZWZuYW1lIGFsb25nIHdpdGggdGhlIGVuY2xvc2luZworIyBlcnJvciBtZXNzYWdlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tb250byBvdXRwdXRzIHRoZSBpbnZhbGlkIHJlZicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1vbnRvIGludmFsaWQtcmVmIEhFQUQgSEVBRCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImludmFsaWQtcmVmIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3Igb3V0IGVhcmx5IHVwb24gLUM8bj4gb3IgLS13aGl0ZXNwYWNlPTxiYWQ+JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtQ25vdC1hLW51bWJlciBIRUFEIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAibnVtZXJpY2FsIHZhbHVlIiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0td2hpdGVzcGFjZT1iYWQgSEVBRCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIkludmFsaWQgd2hpdGVzcGFjZSBvcHRpb24iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfUkVGTE9HX0FDVElPTicgJworCWdpdCBjaGVja291dCBzdGFydCAmJgorCXRlc3RfY29tbWl0IHJlZmxvZy1vbnRvICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlZmxvZy10b3BpYyBzdGFydCAmJgorCXRlc3RfY29tbWl0IHJlZmxvZy10by1yZWJhc2UgJiYKKworCWdpdCByZWJhc2UgcmVmbG9nLW9udG8gJiYKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSVncyAtMyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXJlYmFzZSAoZmluaXNoKTogcmV0dXJuaW5nIHRvIHJlZnMvaGVhZHMvcmVmbG9nLXRvcGljCisJcmViYXNlIChwaWNrKTogcmVmbG9nLXRvLXJlYmFzZQorCXJlYmFzZSAoc3RhcnQpOiBjaGVja291dCByZWZsb2ctb250bworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBjaGVja291dCAtYiByZWZsb2ctcHJlZml4IHJlZmxvZy10by1yZWJhc2UgJiYKKwlHSVRfUkVGTE9HX0FDVElPTj1jaGFuZ2UtdGhlLXJlZmxvZyBnaXQgcmViYXNlIHJlZmxvZy1vbnRvICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0lZ3MgLTMgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwljaGFuZ2UtdGhlLXJlZmxvZyAoZmluaXNoKTogcmV0dXJuaW5nIHRvIHJlZnMvaGVhZHMvcmVmbG9nLXByZWZpeAorCWNoYW5nZS10aGUtcmVmbG9nIChwaWNrKTogcmVmbG9nLXRvLXJlYmFzZQorCWNoYW5nZS10aGUtcmVmbG9nIChzdGFydCk6IGNoZWNrb3V0IHJlZmxvZy1vbnRvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgb250byB1bnJlbGF0ZWQgaGlzdG9yeScgJworCWdpdCBpbml0IHVucmVsYXRlZCAmJgorCXRlc3RfY29tbWl0IC1DIHVucmVsYXRlZCAxICYmCisJZ2l0IC1DIHVucmVsYXRlZCByZW1vdGUgYWRkIC1mIG9yaWdpbiAiJFBXRCIgJiYKKwlnaXQgLUMgdW5yZWxhdGVkIGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz1vcmlnaW4vbWFzdGVyICYmCisJZ2l0IC1DIHVucmVsYXRlZCAtYyBjb3JlLmVkaXRvcj10cnVlIHJlYmFzZSAtaSAtdiAtLXN0YXQgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIkNoYW5nZXMgdG8gIiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICI1IGZpbGVzIGNoYW5nZWQiIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDctcmViYXNlLWFib3J0LnNoIGIvdC90MzQwNy1yZWJhc2UtYWJvcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTdlZmVhMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MDctcmViYXNlLWFib3J0LnNoCkBAIC0wLDAgKzEsMTI2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLWFib3J0IHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKworIyMjIFRlc3QgdGhhdCB3ZSBoYW5kbGUgc3BhY2UgY2hhcmFjdGVycyBwcm9wZXJseQord29ya19kaXI9IiQocHdkKS90ZXN0IGRpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgLXAgIiR3b3JrX2RpciIgJiYKKwljZCAiJHdvcmtfZGlyIiAmJgorCWdpdCBpbml0ICYmCisJZWNobyBhID4gYSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gYSAmJgorCWdpdCBicmFuY2ggdG8tcmViYXNlICYmCisKKwllY2hvIGIgPiBhICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBiICYmCisJZWNobyBjID4gYSAmJgorCWdpdCBjb21taXQgLWEgLW0gYyAmJgorCisJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgorCWVjaG8gZCA+IGEgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJtZXJnZSBzaG91bGQgZmFpbCBvbiB0aGlzIiAmJgorCWVjaG8gZSA+IGEgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJtZXJnZSBzaG91bGQgZmFpbCBvbiB0aGlzLCB0b28iICYmCisJZ2l0IGJyYW5jaCBwcmUtcmViYXNlCisnCisKK3Rlc3RyZWJhc2UoKSB7CisJdHlwZT0kMQorCWRvdGVzdD0kMgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGUgLS1hYm9ydCIgJworCQljZCAiJHdvcmtfZGlyIiAmJgorCQkjIENsZWFuIHVwIHRoZSBzdGF0ZSBmcm9tIHRoZSBwcmV2aW91cyBvbmUKKwkJZ2l0IHJlc2V0IC0taGFyZCBwcmUtcmViYXNlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSBtYXN0ZXIgJiYKKwkJdGVzdF9wYXRoX2lzX2RpciAiJGRvdGVzdCIgJiYKKwkJZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIHRvLXJlYmFzZSkgPSAkKGdpdCByZXYtcGFyc2UgcHJlLXJlYmFzZSkgJiYKKwkJdGVzdCAhIC1kICIkZG90ZXN0IgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlIC0tYWJvcnQgYWZ0ZXIgLS1za2lwIiAnCisJCWNkICIkd29ya19kaXIiICYmCisJCSMgQ2xlYW4gdXAgdGhlIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIG9uZQorCQlnaXQgcmVzZXQgLS1oYXJkIHByZS1yZWJhc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSR0eXBlIG1hc3RlciAmJgorCQl0ZXN0X3BhdGhfaXNfZGlyICIkZG90ZXN0IiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tc2tpcCAmJgorCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICYmCisJCWdpdCByZWJhc2UgLS1hYm9ydCAmJgorCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSB0by1yZWJhc2UpID0gJChnaXQgcmV2LXBhcnNlIHByZS1yZWJhc2UpICYmCisJCXRlc3QgISAtZCAiJGRvdGVzdCIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZSAtLWFib3J0IGFmdGVyIC0tY29udGludWUiICcKKwkJY2QgIiR3b3JrX2RpciIgJiYKKwkJIyBDbGVhbiB1cCB0aGUgc3RhdGUgZnJvbSB0aGUgcHJldmlvdXMgb25lCisJCWdpdCByZXNldCAtLWhhcmQgcHJlLXJlYmFzZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgbWFzdGVyICYmCisJCXRlc3RfcGF0aF9pc19kaXIgIiRkb3Rlc3QiICYmCisJCWVjaG8gYyA+IGEgJiYKKwkJZWNobyBkID4+IGEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAhPSAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgorCQlnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgdG8tcmViYXNlKSA9ICQoZ2l0IHJldi1wYXJzZSBwcmUtcmViYXNlKSAmJgorCQl0ZXN0ICEgLWQgIiRkb3Rlc3QiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGUgLS1hYm9ydCBkb2VzIG5vdCB1cGRhdGUgcmVmbG9nIiAnCisJCWNkICIkd29ya19kaXIiICYmCisJCSMgQ2xlYW4gdXAgdGhlIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIG9uZQorCQlnaXQgcmVzZXQgLS1oYXJkIHByZS1yZWJhc2UgJiYKKwkJZ2l0IHJlZmxvZyBzaG93IHRvLXJlYmFzZSA+IHJlZmxvZ19iZWZvcmUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSR0eXBlIG1hc3RlciAmJgorCQlnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwkJZ2l0IHJlZmxvZyBzaG93IHRvLXJlYmFzZSA+IHJlZmxvZ19hZnRlciAmJgorCQl0ZXN0X2NtcCByZWZsb2dfYmVmb3JlIHJlZmxvZ19hZnRlciAmJgorCQlybSByZWZsb2dfYmVmb3JlIHJlZmxvZ19hZnRlcgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWFib3J0IGNhbiBub3QgYmUgdXNlZCB3aXRoIG90aGVyIG9wdGlvbnMnICcKKwkJY2QgIiR3b3JrX2RpciIgJiYKKwkJIyBDbGVhbiB1cCB0aGUgc3RhdGUgZnJvbSB0aGUgcHJldmlvdXMgb25lCisJCWdpdCByZXNldCAtLWhhcmQgcHJlLXJlYmFzZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgbWFzdGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXYgLS1hYm9ydCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQgLXYgJiYKKwkJZ2l0IHJlYmFzZSAtLWFib3J0CisJJworfQorCit0ZXN0cmViYXNlICIgLS1hcHBseSIgLmdpdC9yZWJhc2UtYXBwbHkKK3Rlc3RyZWJhc2UgIiAtLW1lcmdlIiAuZ2l0L3JlYmFzZS1tZXJnZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1hcHBseSAtLXF1aXQnICcKKwljZCAiJHdvcmtfZGlyIiAmJgorCSMgQ2xlYW4gdXAgdGhlIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIG9uZQorCWdpdCByZXNldCAtLWhhcmQgcHJlLXJlYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1hcHBseSBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJaGVhZF9iZWZvcmU9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHJlYmFzZSAtLXF1aXQgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSA9ICRoZWFkX2JlZm9yZSAmJgorCXRlc3QgISAtZCAuZ2l0L3JlYmFzZS1hcHBseQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSAtLXF1aXQnICcKKwljZCAiJHdvcmtfZGlyIiAmJgorCSMgQ2xlYW4gdXAgdGhlIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIG9uZQorCWdpdCByZXNldCAtLWhhcmQgcHJlLXJlYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1tZXJnZSBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLW1lcmdlICYmCisJaGVhZF9iZWZvcmU9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHJlYmFzZSAtLXF1aXQgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSA9ICRoZWFkX2JlZm9yZSAmJgorCXRlc3QgISAtZCAuZ2l0L3JlYmFzZS1tZXJnZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDgtcmViYXNlLW11bHRpLWxpbmUuc2ggYi90L3QzNDA4LXJlYmFzZS1tdWx0aS1saW5lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQyYmQ3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDA4LXJlYmFzZS1tdWx0aS1saW5lLnNoCkBAIC0wLDAgKzEsNjUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWJhc2luZyBhIGNvbW1pdCB3aXRoIG11bHRpLWxpbmUgZmlyc3QgcGFyYWdyYXBoLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCWVjaG8gaGVsbG8gPmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJBIHNhbXBsZSBjb21taXQgbG9nIG1lc3NhZ2UgdGhhdCBoYXMgYSBsb25nCitzdW1tYXJ5IHRoYXQgc3BpbGxzIG92ZXIgbXVsdGlwbGUgbGluZXMuCisKK0J1dCBvdGhlcndpc2Ugd2l0aCBhIHNhbmUgZGVzY3JpcHRpb24uIiAmJgorCisJZ2l0IGJyYW5jaCBzaWRlICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJPmVsaWYgJiYKKwlnaXQgYWRkIGVsaWYgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUyICYmCisJPmFmaWxlICYmCisJZ2l0IGFkZCBhZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQgJiYKKwllY2hvIGhlbGxvID5hZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gZm91cnRoICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUtbWVyZ2UgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReXiAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIC1tICJBIG1lcmdlIGNvbW1pdCBsb2cgbWVzc2FnZSB0aGF0IGhhcyBhIGxvbmcKK3N1bW1hcnkgdGhhdCBzcGlsbHMgb3ZlciBtdWx0aXBsZSBsaW5lcy4KKworQnV0IG90aGVyd2lzZSB3aXRoIGEgc2FuZSBkZXNjcmlwdGlvbi4iIHNpZGUyICYmCisJZ2l0IGJyYW5jaCBzaWRlLW1lcmdlLW9yaWdpbmFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgcmViYXNlICcKKworCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+YWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBzaWRlQHsxfSB8IHNlZCAtZSAiMSwvXlwkL2QiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVCQVNFX1AgcmViYXNlcCAnCisKKwlnaXQgY2hlY2tvdXQgc2lkZS1tZXJnZSAmJgorCWdpdCByZWJhc2UgLXAgc2lkZSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID5hY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHNpZGUtbWVyZ2Utb3JpZ2luYWwgfCBzZWQgLWUgIjEsL15cJC9kIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwOS1yZWJhc2UtcHJlc2VydmUtbWVyZ2VzLnNoIGIvdC90MzQwOS1yZWJhc2UtcHJlc2VydmUtbWVyZ2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiMzQwZjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDA5LXJlYmFzZS1wcmVzZXJ2ZS1tZXJnZXMuc2gKQEAgLTAsMCArMSwxMjcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQoQykgMjAwOCBTdGVwaGVuIEhhYmVybWFubiAmIEFuZHJlYXMgRXJpY3Nzb24KKyMKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLXAgc2hvdWxkIHByZXNlcnZlIG1lcmdlcworCitSdW4gImdpdCByZWJhc2UgLXAiIGFuZCBjaGVjayB0aGF0IG1lcmdlcyBhcmUgcHJvcGVybHkgY2FycmllZCBhbG9uZworJworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBSRUJBU0VfUDsgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBnaXQgcmViYXNlIC1wIHRlc3RzLCBhcyBhc2tlZCBmb3InCisJdGVzdF9kb25lCitmaQorCitHSVRfQVVUSE9SX0VNQUlMPWJvZ3VzX2VtYWlsX2FkZHJlc3MKK2V4cG9ydCBHSVRfQVVUSE9SX0VNQUlMCisKKyMgQ2xvbmUgMiAoY29uZmxpY3RpbmcgbWVyZ2UpOgorIworIyBBMS0tQTItLUIzICAgPC0tIG9yaWdpbi9tYXN0ZXIKKyMgIFwgICAgICAgXAorIyAgIEIxLS0tLS0tTSAgPC0tIHRvcGljCisjICAgIFwKKyMgICAgIEIyICAgICAgIDwtLSBvcmlnaW4vdG9waWMKKyMKKyMgQ2xvbmUgMyAobm8tZmYgbWVyZ2UpOgorIworIyBBMS0tQTItLUIzICAgPC0tIG9yaWdpbi9tYXN0ZXIKKyMgIFwKKyMgICBCMS0tLS0tLU0gIDwtLSB0b3BpYworIyAgICBcICAgICAvCisjICAgICBcLS1BMyAgICA8LS0gdG9waWMyCisjICAgICAgXAorIyAgICAgICBCMiAgICAgPC0tIG9yaWdpbi90b3BpYworIworIyBDbG9uZSA0IChzYW1lIGFzIENsb25lIDMpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBtZXJnZS1wcmVzZXJ2aW5nIHJlYmFzZScgXAorCSdlY2hvIEZpcnN0ID4gQSAmJgorCWdpdCBhZGQgQSAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBBMSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgJiYKKwllY2hvIFNlY29uZCA+IEIgJiYKKwlnaXQgYWRkIEIgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgQjEiICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWVjaG8gVGhpcmQgPj4gQSAmJgorCWdpdCBjb21taXQgLWEgLW0gIk1vZGlmeSBBMiIgJiYKKwllY2hvIEZpZnRoID4gQiAmJgorCWdpdCBhZGQgQiAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBkaWZmZXJlbnQgQiIgJiYKKworCWdpdCBjbG9uZSAuLy4gY2xvbmUyICYmCisJKAorCQljZCBjbG9uZTIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHRvcGljIG9yaWdpbi90b3BpYyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugb3JpZ2luL21hc3RlciAmJgorCQllY2hvIFJlc29sdmVkID5CICYmCisJCWdpdCBhZGQgQiAmJgorCQlnaXQgY29tbWl0IC1tICJNZXJnZSBvcmlnaW4vbWFzdGVyIGludG8gdG9waWMiCisJKSAmJgorCisJZ2l0IGNsb25lIC4vLiBjbG9uZTMgJiYKKwkoCisJCWNkIGNsb25lMyAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdG9waWMyIG9yaWdpbi90b3BpYyAmJgorCQllY2hvIFNpeHRoID4gQSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJNb2RpZnkgQTMiICYmCisJCWdpdCBjaGVja291dCAtYiB0b3BpYyBvcmlnaW4vdG9waWMgJiYKKwkJZ2l0IG1lcmdlIC0tbm8tZmYgdG9waWMyCisJKSAmJgorCisJZ2l0IGNsb25lIC4vLiBjbG9uZTQgJiYKKwkoCisJCWNkIGNsb25lNCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdG9waWMyIG9yaWdpbi90b3BpYyAmJgorCQllY2hvIFNpeHRoID4gQSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJNb2RpZnkgQTMiICYmCisJCWdpdCBjaGVja291dCAtYiB0b3BpYyBvcmlnaW4vdG9waWMgJiYKKwkJZ2l0IG1lcmdlIC0tbm8tZmYgdG9waWMyCisJKSAmJgorCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJZWNobyBGb3VydGggPj4gQiAmJgorCWdpdCBjb21taXQgLWEgLW0gIk1vZGlmeSBCMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSB3b3JrcyBhZnRlciBhIGNvbmZsaWN0JyAnCisJKAorCWNkIGNsb25lMiAmJgorCWdpdCBmZXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXAgb3JpZ2luL3RvcGljICYmCisJdGVzdCAyID0gJChnaXQgbHMtZmlsZXMgQiB8IHdjIC1sKSAmJgorCWVjaG8gUmVzb2x2ZWQgYWdhaW4gPiBCICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ3JlcCAiXkBAQCAiIC5naXQvcmViYXNlLW1lcmdlL3BhdGNoICYmCisJZ2l0IGFkZCBCICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAxID0gJChnaXQgcmV2LWxpc3QgLS1hbGwgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgIk1vZGlmeSBBIiB8IHdjIC1sKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHJldi1saXN0IC0tYWxsIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICJBZGQgZGlmZmVyZW50IiB8IHdjIC1sKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHJldi1saXN0IC0tYWxsIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICJNZXJnZSBvcmlnaW4iIHwgd2MgLWwpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLXAgcHJlc2VydmVzIG5vLWZmIG1lcmdlcycgJworCSgKKwljZCBjbG9uZTMgJiYKKwlnaXQgZmV0Y2ggJiYKKwlnaXQgcmViYXNlIC1wIG9yaWdpbi90b3BpYyAmJgorCXRlc3QgMyA9ICQoZ2l0IHJldi1saXN0IC0tYWxsIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICJNb2RpZnkgQSIgfCB3YyAtbCkgJiYKKwl0ZXN0IDEgPSAkKGdpdCByZXYtbGlzdCAtLWFsbCAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAiTWVyZ2UgYnJhbmNoIiB8IHdjIC1sKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1wIGlnbm9yZXMgbWVyZ2UubG9nIGNvbmZpZycgJworCSgKKwljZCBjbG9uZTQgJiYKKwlnaXQgZmV0Y2ggJiYKKwlnaXQgLWMgbWVyZ2UubG9nPTEgcmViYXNlIC1wIG9yaWdpbi90b3BpYyAmJgorCWVjaG8gPmV4cGVjdGVkICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWIiIC0xID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDEwLXJlYmFzZS1wcmVzZXJ2ZS1kcm9wcGVkLW1lcmdlcy5zaCBiL3QvdDM0MTAtcmViYXNlLXByZXNlcnZlLWRyb3BwZWQtbWVyZ2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJlMjk4NjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDEwLXJlYmFzZS1wcmVzZXJ2ZS1kcm9wcGVkLW1lcmdlcy5zaApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IFN0ZXBoZW4gSGFiZXJtYW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSBwcmVzZXJ2ZSBtZXJnZXMKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IHJlYmFzZSB3aXRoIHByZXNlcnZlIG1lcmdlcyBhbmQgZW5zdXJlcyBjb21taXRzCitkcm9wcGVkIGJ5IHRoZSAtLWNoZXJyeS1waWNrIGZsYWcgaGF2ZSB0aGVpciBjaGlsZHJlbnMgcGFyZW50cworcmV3cml0dGVuLgorJworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBSRUJBU0VfUDsgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBnaXQgcmViYXNlIC1wIHRlc3RzLCBhcyBhc2tlZCBmb3InCisJdGVzdF9kb25lCitmaQorCisjIHNldCB1cCB0d28gYnJhbmNoZXMgbGlrZSB0aGlzOgorIworIyBBIC0gQiAtIEMgLSBEIC0gRQorIyAgIFwKKyMgICAgIEYgLSBHIC0gSAorIyAgICAgICBcCisjICAgICAgICAgSQorIworIyB3aGVyZSBCLCBEIGFuZCBHIHRvdWNoIHRoZSBzYW1lIGZpbGUuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgQSBmaWxlMSAmJgorCXRlc3RfY29tbWl0IEIgZmlsZTEgMSAmJgorCXRlc3RfY29tbWl0IEMgZmlsZTIgJiYKKwl0ZXN0X2NvbW1pdCBEIGZpbGUxIDIgJiYKKwl0ZXN0X2NvbW1pdCBFIGZpbGUzICYmCisJZ2l0IGNoZWNrb3V0IEEgJiYKKwl0ZXN0X2NvbW1pdCBGIGZpbGU0ICYmCisJdGVzdF9jb21taXQgRyBmaWxlMSAzICYmCisJdGVzdF9jb21taXQgSCBmaWxlNSAmJgorCWdpdCBjaGVja291dCBGICYmCisJdGVzdF9jb21taXQgSSBmaWxlNgorJworCisjIEEgLSBCIC0gQyAtIEQgLSBFCisjICAgXCAgICAgICAgICAgICBcIFwKKyMgICAgIEYgLSBHIC0gSCAtLSBMIFwgICAgICAgIC0tPiAgIEwKKyMgICAgICAgXCAgICAgICAgICAgIHwgICAgICAgICAgICAgICBcCisjICAgICAgICAgSSAtLSBHMiAtLSBKIC0tIEsgICAgICAgICAgIEkgLS0gSworIyBHMiA9IHNhbWUgY2hhbmdlcyBhcyBHCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwIHNhbWUtcmVzb2x1dGlvbiBtZXJnZXMgd2l0aCAtcCcgJworCWdpdCBjaGVja291dCBIICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEUgJiYKKwl0ZXN0X2NvbW1pdCBMIGZpbGUxIDIzICYmCisJZ2l0IGNoZWNrb3V0IEkgJiYKKwl0ZXN0X2NvbW1pdCBHMiBmaWxlMSAzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEUgJiYKKwl0ZXN0X2NvbW1pdCBKIGZpbGUxIDIzICYmCisJdGVzdF9jb21taXQgSyBmaWxlNyBmaWxlNyAmJgorCWdpdCByZWJhc2UgLWkgLXAgTCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReXikgPSAkKGdpdCByZXYtcGFyc2UgTCkgJiYKKwl0ZXN0ICIyMyIgPSAiJChjYXQgZmlsZTEpIiAmJgorCXRlc3QgIkkiID0gIiQoY2F0IGZpbGU2KSIgJiYKKwl0ZXN0ICJmaWxlNyIgPSAiJChjYXQgZmlsZTcpIgorJworCisjIEEgLSBCIC0gQyAtIEQgLSBFCisjICAgXCAgICAgICAgICAgICBcIFwKKyMgICAgIEYgLSBHIC0gSCAtLSBMMiBcICAgICAgICAtLT4gICBMMgorIyAgICAgICBcICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgXAorIyAgICAgICAgIEkgLS0gRzMgLS0tIEoyIC0tIEsyICAgICAgICAgICBJIC0tIEczIC0tIEsyCisjIEcyID0gZGlmZmVyZW50IGNoYW5nZXMgYXMgRwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2VlcCBkaWZmZXJlbnQtcmVzb2x1dGlvbiBtZXJnZXMgd2l0aCAtcCcgJworCWdpdCBjaGVja291dCBIICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEUgJiYKKwl0ZXN0X2NvbW1pdCBMMiBmaWxlMSAyMyAmJgorCWdpdCBjaGVja291dCBJICYmCisJdGVzdF9jb21taXQgRzMgZmlsZTEgNCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBFICYmCisJdGVzdF9jb21taXQgSjIgZmlsZTEgMjQgJiYKKwl0ZXN0X2NvbW1pdCBLMiBmaWxlNyBmaWxlNyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLXAgTDIgJiYKKwllY2hvIDIzNCA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReXl4pID0gJChnaXQgcmV2LXBhcnNlIEwyKSAmJgorCXRlc3QgIjIzNCIgPSAiJChjYXQgZmlsZTEpIiAmJgorCXRlc3QgIkkiID0gIiQoY2F0IGZpbGU2KSIgJiYKKwl0ZXN0ICJmaWxlNyIgPSAiJChjYXQgZmlsZTcpIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTEtcmViYXNlLXByZXNlcnZlLWFyb3VuZC1tZXJnZXMuc2ggYi90L3QzNDExLXJlYmFzZS1wcmVzZXJ2ZS1hcm91bmQtbWVyZ2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZiNDVlN2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDExLXJlYmFzZS1wcmVzZXJ2ZS1hcm91bmQtbWVyZ2VzLnNoCkBAIC0wLDAgKzEsODAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggU3RlcGhlbiBIYWJlcm1hbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIHByZXNlcnZlIG1lcmdlcworCitUaGlzIHRlc3QgcnVucyBnaXQgcmViYXNlIHdpdGggLXAgYW5kIHRyaWVzIHRvIHNxdWFzaCBhIGNvbW1pdCBmcm9tIGFmdGVyCithIG1lcmdlIHRvIGJlZm9yZSB0aGUgbWVyZ2UuCisnCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFJFQkFTRV9QOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCByZWJhc2UgLXAgdGVzdHMsIGFzIGFza2VkIGZvcicKKwl0ZXN0X2RvbmUKK2ZpCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCitzZXRfZmFrZV9lZGl0b3IKKworIyBzZXQgdXAgdHdvIGJyYW5jaGVzIGxpa2UgdGhpczoKKyMKKyMgQTEgLSBCMSAtIEQxIC0gRTEgLSBGMQorIyAgICAgICBcICAgICAgICAvCisjICAgICAgICAtLSBDMSAtLQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IEExICYmCisJdGVzdF9jb21taXQgQjEgJiYKKwl0ZXN0X2NvbW1pdCBDMSAmJgorCWdpdCByZXNldCAtLWhhcmQgQjEgJiYKKwl0ZXN0X2NvbW1pdCBEMSAmJgorCXRlc3RfbWVyZ2UgRTEgQzEgJiYKKwl0ZXN0X2NvbW1pdCBGMQorJworCisjIFNob3VsZCByZXN1bHQgaW46CisjCisjIEExIC0gQjEgLSBEMiAtIEUyCisjICAgICAgIFwgICAgICAgIC8KKyMgICAgICAgIC0tIEMxIC0tCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcXVhc2ggRjEgaW50byBEMScgJworCUZBS0VfTElORVM9IjEgc3F1YXNoIDQgMiAzIiBnaXQgcmViYXNlIC1pIC1wIEIxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMikiID0gIiQoZ2l0IHJldi1wYXJzZSBDMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUR+MikiID0gIiQoZ2l0IHJldi1wYXJzZSBCMSkiICYmCisJZ2l0IHRhZyBFMgorJworCisjIFN0YXJ0IHdpdGg6CisjCisjIEExIC0gQjEgLSBEMiAtIEUyCisjICBcCisjICAgRzEgLS0tLSBMMSAtLS0tIE0xCisjICAgIFwgICAgICAgICAgICAgLworIyAgICAgSDEgLS0gSjEgLS0gSzEKKyMgICAgICBcICAgICAgICAgLworIyAgICAgICAgLS0gSTEgLS0KKyMKKyMgQW5kIHJlYmFzZSBHMS4uTTEgb250byBFMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgdHdvIGxldmVscyBvZiBtZXJnZScgJworCWdpdCBjaGVja291dCBBMSAmJgorCXRlc3RfY29tbWl0IEcxICYmCisJdGVzdF9jb21taXQgSDEgJiYKKwl0ZXN0X2NvbW1pdCBJMSAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gzIEgxICYmCisJdGVzdF9jb21taXQgSjEgJiYKKwl0ZXN0X21lcmdlIEsxIEkxICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDIgRzEgJiYKKwl0ZXN0X2NvbW1pdCBMMSAmJgorCXRlc3RfbWVyZ2UgTTEgSzEgJiYKKwlHSVRfRURJVE9SPTogZ2l0IHJlYmFzZSAtaSAtcCBFMiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpIiA9ICIkKGdpdCByZXYtcGFyc2UgRTIpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yXjJ+MikiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMl4xXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yXjJeMSkiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQxMi1yZWJhc2Utcm9vdC5zaCBiL3QvdDM0MTItcmViYXNlLXJvb3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjE2MzJhOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTItcmViYXNlLXJvb3Quc2gKQEAgLTAsMCArMSwyODEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIC0tcm9vdAorCitUZXN0cyBpZiBnaXQgcmViYXNlIC0tcm9vdCAtLW9udG8gPG5ld3BhcmVudD4gY2FuIHJlYmFzZSB0aGUgcm9vdCBjb21taXQuCisnCisuIC4vdGVzdC1saWIuc2gKKworbG9nX3dpdGhfbmFtZXMgKCkgeworCWdpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgLS1wYXJlbnRzIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiBIRUFEIHwKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9cmVmcy9oZWFkcy8kMQorfQorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgcmVwb3NpdG9yeScgJworCXRlc3RfY29tbWl0IDEgQSAmJgorCXRlc3RfY29tbWl0IDIgQSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL290aGVyICYmCisJcm0gLmdpdC9pbmRleCAmJgorCXRlc3RfY29tbWl0IDMgQiAmJgorCXRlc3RfY29tbWl0IDFiIEEgMSAmJgorCXRlc3RfY29tbWl0IDQgQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1yb290IGZhaWxzIHdpdGggdG9vIG1hbnkgYXJncycgJworCWdpdCBjaGVja291dCAtQiBmYWlsIG90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW9udG8gbWFzdGVyIC0tcm9vdCBmYWlsIGZhaWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcHJlLXJlYmFzZSBob29rJyAnCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCWNhdCA+LmdpdC9ob29rcy9wcmUtcmViYXNlIDw8RU9GICYmCisjISRTSEVMTF9QQVRICitlY2hvICJcJDEsXCQyIiA+LmdpdC9QUkUtUkVCQVNFLUlOUFVUCitFT0YKKwljaG1vZCAreCAuZ2l0L2hvb2tzL3ByZS1yZWJhc2UKKycKK2NhdCA+IGV4cGVjdCA8PEVPRgorNAorMworMgorMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXJvb3QgLS1vbnRvIDxuZXdiYXNlPicgJworCWdpdCBjaGVja291dCAtYiB3b3JrIG90aGVyICYmCisJZ2l0IHJlYmFzZSAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDoiJXMiID4gcmViYXNlZCAmJgorCXRlc3RfY21wIGV4cGVjdCByZWJhc2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgZ290IGNvcnJlY3QgaW5wdXQgKDEpJyAnCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gei0tcm9vdCwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tcm9vdCAtLW9udG8gPG5ld2Jhc2U+IDxicmFuY2g+JyAnCisJZ2l0IGJyYW5jaCB3b3JrMiBvdGhlciAmJgorCWdpdCByZWJhc2UgLS1yb290IC0tb250byBtYXN0ZXIgd29yazIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6IiVzIiA+IHJlYmFzZWQyICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlYmFzZWQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgZ290IGNvcnJlY3QgaW5wdXQgKDIpJyAnCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gei0tcm9vdCx3b3JrMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IC0tb250byA8bmV3YmFzZT4nICcKKwlnaXQgY2hlY2tvdXQgLWIgd29yazMgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC1pIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlcyIgPiByZWJhc2VkMyAmJgorCXRlc3RfY21wIGV4cGVjdCByZWJhc2VkMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGdvdCBjb3JyZWN0IGlucHV0ICgzKScgJworCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHotLXJvb3QsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgLS1vbnRvIDxuZXdiYXNlPiA8YnJhbmNoPicgJworCWdpdCBicmFuY2ggd29yazQgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC1pIC0tcm9vdCAtLW9udG8gbWFzdGVyIHdvcms0ICYmCisJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlcyIgPiByZWJhc2VkNCAmJgorCXRlc3RfY21wIGV4cGVjdCByZWJhc2VkNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGdvdCBjb3JyZWN0IGlucHV0ICg0KScgJworCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHotLXJvb3Qsd29yazQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRUJBU0VfUCAncmViYXNlIC1pIC1wIHdpdGggbGluZWFyIGhpc3RvcnknICcKKwlnaXQgY2hlY2tvdXQgLWIgd29yazUgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC1pIC1wIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlcyIgPiByZWJhc2VkNSAmJgorCXRlc3RfY21wIGV4cGVjdCByZWJhc2VkNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QICdwcmUtcmViYXNlIGdvdCBjb3JyZWN0IGlucHV0ICg1KScgJworCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHotLXJvb3QsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBtZXJnZSBoaXN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IG90aGVyXiAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJdGVzdF9jb21taXQgNSBDICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyICYmCisJZ2l0IG1lcmdlIHNpZGUKKycKKworY2F0ID4gZXhwZWN0LXNpZGUgPDwnRU9GJworY29tbWl0IHdvcms2IHdvcms2fjEgd29yazZeMgorTWVyZ2UgYnJhbmNoICdzaWRlJyBpbnRvIG90aGVyCitjb21taXQgd29yazZeMiB3b3JrNn4yCis1Citjb21taXQgd29yazZ+MSB3b3JrNn4yCis0Citjb21taXQgd29yazZ+MiB3b3JrNn4zCiszCitjb21taXQgd29yazZ+MyB3b3JrNn40CisyCitjb21taXQgd29yazZ+NAorMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVCQVNFX1AgJ3JlYmFzZSAtaSAtcCB3aXRoIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHdvcms2IG90aGVyICYmCisJZ2l0IHJlYmFzZSAtaSAtcCAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCWxvZ193aXRoX25hbWVzIHdvcms2ID4gcmViYXNlZDYgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtc2lkZSByZWJhc2VkNgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgc2Vjb25kIHJvb3QgYW5kIG1lcmdlJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvdGhpcmQgJiYKKwlybSAuZ2l0L2luZGV4ICYmCisJcm0gQSBCIEMgJiYKKwl0ZXN0X2NvbW1pdCA2IEQgJiYKKwlnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwlnaXQgbWVyZ2UgLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIHRoaXJkCisnCisKK2NhdCA+IGV4cGVjdC10aGlyZCA8PCdFT0YnCitjb21taXQgd29yazcgd29yazd+MSB3b3JrN14yCitNZXJnZSBicmFuY2ggJ3RoaXJkJyBpbnRvIG90aGVyCitjb21taXQgd29yazdeMiB3b3JrN340Cis2Citjb21taXQgd29yazd+MSB3b3JrN34yIHdvcms3fjFeMgorTWVyZ2UgYnJhbmNoICdzaWRlJyBpbnRvIG90aGVyCitjb21taXQgd29yazd+MV4yIHdvcms3fjMKKzUKK2NvbW1pdCB3b3JrN34yIHdvcms3fjMKKzQKK2NvbW1pdCB3b3JrN34zIHdvcms3fjQKKzMKK2NvbW1pdCB3b3JrN340IHdvcms3fjUKKzIKK2NvbW1pdCB3b3JrN341CisxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRUJBU0VfUCAncmViYXNlIC1pIC1wIHdpdGggdHdvIHJvb3RzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHdvcms3IG90aGVyICYmCisJZ2l0IHJlYmFzZSAtaSAtcCAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCWxvZ193aXRoX25hbWVzIHdvcms3ID4gcmViYXNlZDcgJiYKKwl0ZXN0X2NtcCBleHBlY3QtdGhpcmQgcmViYXNlZDcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcHJlLXJlYmFzZSBob29rIHRoYXQgZmFpbHMnICcKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJY2F0ID4uZ2l0L2hvb2tzL3ByZS1yZWJhc2UgPDxFT0YgJiYKKyMhJFNIRUxMX1BBVEgKK2ZhbHNlCitFT0YKKwljaG1vZCAreCAuZ2l0L2hvb2tzL3ByZS1yZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIHN0b3BzIHJlYmFzZScgJworCWdpdCBjaGVja291dCAtYiBzdG9wczEgb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSB6cmVmcy9oZWFkcy9zdG9wczEgJiYKKwl0ZXN0IDAgPSAkKGdpdCByZXYtbGlzdCBvdGhlci4uLnN0b3BzMSB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgc3RvcHMgcmViYXNlIC1pJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHN0b3BzMiBvdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9IHpyZWZzL2hlYWRzL3N0b3BzMiAmJgorCXRlc3QgMCA9ICQoZ2l0IHJldi1saXN0IG90aGVyLi4uc3RvcHMyIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBwcmUtcmViYXNlIGhvb2snICcKKwlybSAtZiAuZ2l0L2hvb2tzL3ByZS1yZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGEgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBjb25mbGljdCA+IEIgJiYKKwlnaXQgYWRkIEIgJiYKKwlnaXQgY29tbWl0IC1tIGNvbmZsaWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXJvb3Qgd2l0aCBjb25mbGljdCAoZmlyc3QgcGFydCknICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QxIG90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCWdpdCBscy1maWxlcyAtdSB8IGdyZXAgIkIkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXggdGhlIGNvbmZsaWN0JyAnCisJZWNobyAzID4gQiAmJgorCWdpdCBhZGQgQgorJworCitjYXQgPiBleHBlY3QtY29uZmxpY3QgPDxFT0YKKzYKKzUKKzQKKzMKK2NvbmZsaWN0CisyCisxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tcm9vdCB3aXRoIGNvbmZsaWN0IChzZWNvbmQgcGFydCknICcKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6IiVzIiA+IGNvbmZsaWN0MSAmJgorCXRlc3RfY21wIGV4cGVjdC1jb25mbGljdCBjb25mbGljdDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCB3aXRoIGNvbmZsaWN0IChmaXJzdCBwYXJ0KScgJworCWdpdCBjaGVja291dCAtYiBjb25mbGljdDIgb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJZ2l0IGxzLWZpbGVzIC11IHwgZ3JlcCAiQiQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpeCB0aGUgY29uZmxpY3QnICcKKwllY2hvIDMgPiBCICYmCisJZ2l0IGFkZCBCCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3Qgd2l0aCBjb25mbGljdCAoc2Vjb25kIHBhcnQpJyAnCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlcyIgPiBjb25mbGljdDIgJiYKKwl0ZXN0X2NtcCBleHBlY3QtY29uZmxpY3QgY29uZmxpY3QyCisnCisKK2NhdCA+ZXhwZWN0LWNvbmZsaWN0LXAgPDxcRU9GCitjb21taXQgY29uZmxpY3QzIGNvbmZsaWN0M34xIGNvbmZsaWN0M14yCitNZXJnZSBicmFuY2ggJ3RoaXJkJyBpbnRvIG90aGVyCitjb21taXQgY29uZmxpY3QzXjIgY29uZmxpY3QzfjQKKzYKK2NvbW1pdCBjb25mbGljdDN+MSBjb25mbGljdDN+MiBjb25mbGljdDN+MV4yCitNZXJnZSBicmFuY2ggJ3NpZGUnIGludG8gb3RoZXIKK2NvbW1pdCBjb25mbGljdDN+MV4yIGNvbmZsaWN0M34zCis1Citjb21taXQgY29uZmxpY3QzfjIgY29uZmxpY3QzfjMKKzQKK2NvbW1pdCBjb25mbGljdDN+MyBjb25mbGljdDN+NAorMworY29tbWl0IGNvbmZsaWN0M340IGNvbmZsaWN0M341Citjb25mbGljdAorY29tbWl0IGNvbmZsaWN0M341IGNvbmZsaWN0M342CisyCitjb21taXQgY29uZmxpY3QzfjYKKzEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QICdyZWJhc2UgLWkgLXAgLS1yb290IHdpdGggY29uZmxpY3QgKGZpcnN0IHBhcnQpJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0MyBvdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLXAgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXUgfCBncmVwICJCJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZml4IHRoZSBjb25mbGljdCcgJworCWVjaG8gMyA+IEIgJiYKKwlnaXQgYWRkIEIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRUJBU0VfUCAncmViYXNlIC1pIC1wIC0tcm9vdCB3aXRoIGNvbmZsaWN0IChzZWNvbmQgcGFydCknICcKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlsb2dfd2l0aF9uYW1lcyBjb25mbGljdDMgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdC1jb25mbGljdC1wIG91dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTMtcmViYXNlLWhvb2suc2ggYi90L3QzNDEzLXJlYmFzZS1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI2ODMzZTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDEzLXJlYmFzZS1ob29rLnNoCkBAIC0wLDAgKzEsMTQyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSB3aXRoIGl0cyBob29rKHMpJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gZ29vZGJ5ZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwllY2hvIHdvcmxkID5naXQgJiYKKwlnaXQgYWRkIGdpdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2lkZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0IC0tZ3JhcGggLS1hbGwgJiYKKwlnaXQgYnJhbmNoIHRlc3Qgc2lkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UnICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgbWFzdGVyICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJRURJVE9SPXRydWUgZ2l0IHJlYmFzZSAtaSBtYXN0ZXIgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcHJlLXJlYmFzZSBob29rJyAnCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCWNhdCA+LmdpdC9ob29rcy9wcmUtcmViYXNlIDw8RU9GICYmCisjISRTSEVMTF9QQVRICitlY2hvICJcJDEsXCQyIiA+LmdpdC9QUkUtUkVCQVNFLUlOUFVUCitFT0YKKwljaG1vZCAreCAuZ2l0L2hvb2tzL3ByZS1yZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIGdldHMgY29ycmVjdCBpbnB1dCAoMSknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgbWFzdGVyICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkICYmCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gem1hc3RlciwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgZ2V0cyBjb3JyZWN0IGlucHV0ICgyKScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgdGVzdCAmJgorCXRlc3QgInokKGNhdCBnaXQpIiA9IHp3b3JsZCAmJgorCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHptYXN0ZXIsdGVzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgZ2V0cyBjb3JyZWN0IGlucHV0ICgzKScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZWJhc2UgbWFzdGVyIHRlc3QgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQgJiYKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6bWFzdGVyLHRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIGdldHMgY29ycmVjdCBpbnB1dCAoNCknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCUVESVRPUj10cnVlIGdpdCByZWJhc2UgLWkgbWFzdGVyICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkICYmCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gem1hc3RlciwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgZ2V0cyBjb3JyZWN0IGlucHV0ICg1KScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJRURJVE9SPXRydWUgZ2l0IHJlYmFzZSAtaSBtYXN0ZXIgdGVzdCAmJgorCXRlc3QgInokKGNhdCBnaXQpIiA9IHp3b3JsZCAmJgorCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHptYXN0ZXIsdGVzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgZ2V0cyBjb3JyZWN0IGlucHV0ICg2KScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCUVESVRPUj10cnVlIGdpdCByZWJhc2UgLWkgbWFzdGVyIHRlc3QgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQgJiYKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6bWFzdGVyLHRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcHJlLXJlYmFzZSBob29rIHRoYXQgZmFpbHMnICcKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJY2F0ID4uZ2l0L2hvb2tzL3ByZS1yZWJhc2UgPDxFT0YgJiYKKyMhJFNIRUxMX1BBVEgKK2ZhbHNlCitFT0YKKwljaG1vZCAreCAuZ2l0L2hvb2tzL3ByZS1yZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIHN0b3BzIHJlYmFzZSAoMSknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSB6cmVmcy9oZWFkcy90ZXN0ICYmCisJdGVzdCAwID0gJChnaXQgcmV2LWxpc3QgSEVBRC4uLnNpZGUgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIHN0b3BzIHJlYmFzZSAoMiknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBFRElUT1I9OiBnaXQgcmViYXNlIC1pIG1hc3RlciAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0genJlZnMvaGVhZHMvdGVzdCAmJgorCXRlc3QgMCA9ICQoZ2l0IHJldi1saXN0IEhFQUQuLi5zaWRlIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW5vLXZlcmlmeSBvdmVycmlkZXMgcHJlLXJlYmFzZSAoMSknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgLS1uby12ZXJpZnkgbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSB6cmVmcy9oZWFkcy90ZXN0ICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW5vLXZlcmlmeSBvdmVycmlkZXMgcHJlLXJlYmFzZSAoMiknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCUVESVRPUj10cnVlIGdpdCByZWJhc2UgLS1uby12ZXJpZnkgLWkgbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSB6cmVmcy9oZWFkcy90ZXN0ICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQxNC1yZWJhc2UtcHJlc2VydmUtb250by5zaCBiL3QvdDM0MTQtcmViYXNlLXByZXNlcnZlLW9udG8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzJlMDRiNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTQtcmViYXNlLXByZXNlcnZlLW9udG8uc2gKQEAgLTAsMCArMSw4NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBHcmVnIFByaWNlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLXAgc2hvdWxkIHJlc3BlY3QgLS1vbnRvCisKK0luIGEgcmViYXNlIHdpdGggLS1vbnRvLCB3ZSBzaG91bGQgcmV3cml0ZSBhbGwgdGhlIGNvbW1pdHMgdGhhdAorYXJlbiciJyIndCBvbiB0b3Agb2YgJE9OVE8sIGV2ZW4gaWYgdGhleSBhcmUgb24gdG9wIG9mICRVUFNUUkVBTS4KKycKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUkVCQVNFX1A7IHRoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0IHJlYmFzZSAtcCB0ZXN0cywgYXMgYXNrZWQgZm9yJworCXRlc3RfZG9uZQorZmkKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKKyMgU2V0IHVwIGJyYW5jaGVzIGxpa2UgdGhpczoKKyMgQTEtLS1CMS0tLUUxLS0tRjEtLS1HMQorIyAgXCAgICBcICAgICAgICAgICAgIC8KKyMgICBcICAgIFwtLUMxLS0tRDEtLS8KKyMgICAgSDEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBBMSAmJgorCXRlc3RfY29tbWl0IEIxICYmCisJdGVzdF9jb21taXQgQzEgJiYKKwl0ZXN0X2NvbW1pdCBEMSAmJgorCWdpdCByZXNldCAtLWhhcmQgQjEgJiYKKwl0ZXN0X2NvbW1pdCBFMSAmJgorCXRlc3RfY29tbWl0IEYxICYmCisJdGVzdF9tZXJnZSBHMSBEMSAmJgorCWdpdCByZXNldCAtLWhhcmQgQTEgJiYKKwl0ZXN0X2NvbW1pdCBIMQorJworCisjIE5vdyByZWJhc2UgbWVyZ2UgRzEgZnJvbSBib3RoIGJyYW5jaGVzJyBiYXNlIEIxLCBib3RoIHNob3VsZCBtb3ZlOgorIyBBMS0tLUIxLS0tRTEtLS1GMS0tLUcxCisjICBcICAgIFwgICAgICAgICAgICAgLworIyAgIFwgICAgXC0tQzEtLS1EMS0tLworIyAgICBcCisjICAgICBIMS0tLUUyLS0tRjItLS1HMgorIyAgICAgIFwgICAgICAgICAgICAgLworIyAgICAgICBcLS1DMi0tLUQyLS0vCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBmcm9tIEIxIG9udG8gSDEnICcKKwlnaXQgY2hlY2tvdXQgRzEgJiYKKwlnaXQgcmViYXNlIC1wIC0tb250byBIMSBCMSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjFeMV4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIEgxKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yXjFeMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIMSkiCisnCisKKyMgT24gdGhlIG90aGVyIGhhbmQgaWYgcmViYXNlIGZyb20gRTEgd2hpY2ggaXMgd2l0aGluIG9uZSBicmFuY2gsCisjIHRoZW4gdGhlIG90aGVyIGJyYW5jaCBzdGF5czoKKyMgQTEtLS1CMS0tLUUxLS0tRjEtLS1HMQorIyAgXCAgICBcICAgICAgICAgICAgIC8KKyMgICBcICAgIFwtLUMxLS0tRDEtLS8KKyMgICAgXCAgICAgICAgICAgICBcCisjICAgICBIMS0tLS0tRjMtLS0tLUczCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBmcm9tIEUxIG9udG8gSDEnICcKKwlnaXQgY2hlY2tvdXQgRzEgJiYKKwlnaXQgcmViYXNlIC1wIC0tb250byBIMSBFMSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjFeMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMikiID0gIiQoZ2l0IHJldi1wYXJzZSBEMSkiCisnCisKKyMgQW5kIHRoZSBzYW1lIGlmIHdlIHJlYmFzZSBmcm9tIGEgY29tbWl0IGluIHRoZSBzZWNvbmQtcGFyZW50IGJyYW5jaC4KKyMgQTEtLS1CMS0tLUUxLS0tRjEtLS0tRzEKKyMgIFwgICAgXCAgICAgICAgICBcICAgLworIyAgIFwgICAgXC0tQzEtLS1EMS1cLS8KKyMgICAgXCAgICAgICAgICAgICAgIFwKKyMgICAgIEgxLS0tLS0tRDMtLS0tLS1HNAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgZnJvbSBDMSBvbnRvIEgxJyAnCisJZ2l0IGNoZWNrb3V0IEcxICYmCisJZ2l0IHJldi1saXN0IC0tZmlyc3QtcGFyZW50IC0tcHJldHR5PW9uZWxpbmUgQzEuLkcxICYmCisJZ2l0IHJlYmFzZSAtcCAtLW9udG8gSDEgQzEgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSDEpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgRjEpIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTUtcmViYXNlLWF1dG9zcXVhc2guc2ggYi90L3QzNDE1LXJlYmFzZS1hdXRvc3F1YXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdiYWI2MDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDE1LXJlYmFzZS1hdXRvc3F1YXNoLnNoCkBAIC0wLDAgKzEsNDQzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXV0byBzcXVhc2gnCisKKy4gLi90ZXN0LWxpYi5zaAorCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyAwID5maWxlMCAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IiAmJgorCWVjaG8gMCA+ZmlsZTEgJiYKKwllY2hvIDIgPmZpbGUyICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlyc3QgY29tbWl0IiAmJgorCWdpdCB0YWcgZmlyc3QtY29tbWl0ICYmCisJZWNobyAzID5maWxlMyAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNlY29uZCBjb21taXQiICYmCisJZ2l0IHRhZyBiYXNlCisnCisKK3Rlc3RfYXV0b19maXh1cCAoKSB7CisJbm9fc3F1YXNoPSAmJgorCWlmIHRlc3QgIngkMSIgPSAneCEnCisJdGhlbgorCQlub19zcXVhc2g9dHJ1ZQorCQlzaGlmdAorCWZpICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImZpeHVwISBmaXJzdCIgJiYKKworCWdpdCB0YWcgJDEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlICQyIC1pIEhFQUReXl4gJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJaWYgdGVzdCAtbiAiJG5vX3NxdWFzaCIKKwl0aGVuCisJCXRlc3RfbGluZV9jb3VudCA9IDQgYWN0dWFsCisJZWxzZQorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbCAmJgorCQlnaXQgZGlmZiAtLWV4aXQtY29kZSAkMSAmJgorCQllY2hvIDEgPmV4cGVjdCAmJgorCQlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlMSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiA+Y29tbWl0ICYmCisJCWdyZXAgZmlyc3QgY29tbWl0ID5hY3R1YWwgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwKKwlmaQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIGZpeHVwIChvcHRpb24pJyAnCisJdGVzdF9hdXRvX2ZpeHVwIGZpbmFsLWZpeHVwLW9wdGlvbiAtLWF1dG9zcXVhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0byBmaXh1cCAoY29uZmlnKScgJworCWdpdCBjb25maWcgcmViYXNlLmF1dG9zcXVhc2ggdHJ1ZSAmJgorCXRlc3RfYXV0b19maXh1cCBmaW5hbC1maXh1cC1jb25maWctdHJ1ZSAmJgorCXRlc3RfYXV0b19maXh1cCAhIGZpeHVwLWNvbmZpZy10cnVlLW5vIC0tbm8tYXV0b3NxdWFzaCAmJgorCWdpdCBjb25maWcgcmViYXNlLmF1dG9zcXVhc2ggZmFsc2UgJiYKKwl0ZXN0X2F1dG9fZml4dXAgISBmaW5hbC1maXh1cC1jb25maWctZmFsc2UKKycKKwordGVzdF9hdXRvX3NxdWFzaCAoKSB7CisJbm9fc3F1YXNoPSAmJgorCWlmIHRlc3QgIngkMSIgPSAneCEnCisJdGhlbgorCQlub19zcXVhc2g9dHJ1ZQorCQlzaGlmdAorCWZpICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNxdWFzaCEgZmlyc3QiICYmCisKKwlnaXQgdGFnICQxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAkMiAtaSBIRUFEXl5eICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCWlmIHRlc3QgLW4gIiRub19zcXVhc2giCisJdGhlbgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IGFjdHVhbAorCWVsc2UKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwgJiYKKwkJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJDEgJiYKKwkJZWNobyAxID5leHBlY3QgJiYKKwkJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF46ZmlsZTEgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gPmNvbW1pdCAmJgorCQlncmVwIGZpcnN0IGNvbW1pdCA+YWN0dWFsICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgYWN0dWFsCisJZmkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0byBzcXVhc2ggKG9wdGlvbiknICcKKwl0ZXN0X2F1dG9fc3F1YXNoIGZpbmFsLXNxdWFzaCAtLWF1dG9zcXVhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0byBzcXVhc2ggKGNvbmZpZyknICcKKwlnaXQgY29uZmlnIHJlYmFzZS5hdXRvc3F1YXNoIHRydWUgJiYKKwl0ZXN0X2F1dG9fc3F1YXNoIGZpbmFsLXNxdWFzaC1jb25maWctdHJ1ZSAmJgorCXRlc3RfYXV0b19zcXVhc2ggISBzcXVhc2gtY29uZmlnLXRydWUtbm8gLS1uby1hdXRvc3F1YXNoICYmCisJZ2l0IGNvbmZpZyByZWJhc2UuYXV0b3NxdWFzaCBmYWxzZSAmJgorCXRlc3RfYXV0b19zcXVhc2ggISBmaW5hbC1zcXVhc2gtY29uZmlnLWZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NwZWxsZWQgYXV0byBzcXVhc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNxdWFzaCEgZm9yc3QiICYmCisJZ2l0IHRhZyBmaW5hbC1taXNzcXVhc2ggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEXl5eICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmluYWwtbWlzc3F1YXNoICYmCisJZ2l0IHJldi1saXN0IGZpbmFsLW1pc3NxdWFzaC4uLkhFQUQgPmxpc3QgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIHNxdWFzaCB0aGF0IG1hdGNoZXMgMiBjb21taXRzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJZWNobyA0ID5maWxlNCAmJgorCWdpdCBhZGQgZmlsZTQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJmaXJzdCBuZXcgY29tbWl0IiAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3F1YXNoISBmaXJzdCIgJiYKKwlnaXQgdGFnIGZpbmFsLW11bHRpc3F1YXNoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRH40ICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmluYWwtbXVsdGlzcXVhc2ggJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIEhFQUReXjpmaWxlMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF5eID5jb21taXQgJiYKKwlncmVwIGZpcnN0IGNvbW1pdCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdCAmJgorCWdyZXAgZmlyc3QgY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIHNxdWFzaCB0aGF0IG1hdGNoZXMgYSBjb21taXQgYWZ0ZXIgdGhlIHNxdWFzaCcgJworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3F1YXNoISB0aGlyZCIgJiYKKwllY2hvIDQgPmZpbGU0ICYmCisJZ2l0IGFkZCBmaWxlNCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInRoaXJkIGNvbW1pdCIgJiYKKwlnaXQgdGFnIGZpbmFsLXByZXNxdWFzaCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLS1hdXRvc3F1YXNoIC1pIEhFQUR+NCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbmFsLXByZXNxdWFzaCAmJgorCWVjaG8gMCA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF5eOmZpbGUxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+Y29tbWl0ICYmCisJZ3JlcCB0aGlyZCBjb21taXQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiA+Y29tbWl0ICYmCisJZ3JlcCB0aGlyZCBjb21taXQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIHNxdWFzaCB0aGF0IG1hdGNoZXMgYSBzaGExJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlvaWQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICYmCisJZ2l0IGNvbW1pdCAtbSAic3F1YXNoISAkb2lkIiAmJgorCWdpdCB0YWcgZmluYWwtc2hhc3F1YXNoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXiAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbmFsLXNoYXNxdWFzaCAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF46ZmlsZTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReID5jb21taXQgJiYKKwlncmVwIHNxdWFzaCBjb21taXQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gc3F1YXNoIHRoYXQgbWF0Y2hlcyBsb25nZXIgc2hhMScgJworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJb2lkPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0PTExIEhFQUReKSAmJgorCWdpdCBjb21taXQgLW0gInNxdWFzaCEgJG9pZCIgJiYKKwlnaXQgdGFnIGZpbmFsLWxvbmdzaGFzcXVhc2ggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEXl5eICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmluYWwtbG9uZ3NoYXNxdWFzaCAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF46ZmlsZTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReID5jb21taXQgJiYKKwlncmVwIHNxdWFzaCBjb21taXQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsCisnCisKK3Rlc3RfYXV0b19jb21taXRfZmxhZ3MgKCkgeworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLSQxIGZpcnN0LWNvbW1pdCAmJgorCWdpdCB0YWcgZmluYWwtY29tbWl0LSQxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXiAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbmFsLWNvbW1pdC0kMSAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF46ZmlsZTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReID5jb21taXQgJiYKKwlncmVwIGZpcnN0IGNvbW1pdCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gJDIgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSBjb21taXQgLS1maXh1cCcgJworCXRlc3RfYXV0b19jb21taXRfZmxhZ3MgZml4dXAgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgY29tbWl0IC0tc3F1YXNoJyAnCisJdGVzdF9hdXRvX2NvbW1pdF9mbGFncyBzcXVhc2ggMgorJworCit0ZXN0X2F1dG9fZml4dXBfZml4dXAgKCkgeworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiJDEhIGZpcnN0IiAmJgorCWVjaG8gMiA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiJDEhICQyISBmaXJzdCIgJiYKKwlnaXQgdGFnICJmaW5hbC0kMS0kMiIgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCXNldF9jYXRfdG9kb19lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXl4gPmFjdHVhbCAmJgorCQloZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJCXBhcmVudDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICYmCisJCXBhcmVudDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF5eKSAmJgorCQlwYXJlbnQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReXl4pICYmCisJCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJCXBpY2sgJHBhcmVudDMgZmlyc3QgY29tbWl0CisJCSQxICRwYXJlbnQxICQxISBmaXJzdAorCQkkMSAkaGVhZCAkMSEgJDIhIGZpcnN0CisJCXBpY2sgJHBhcmVudDIgc2Vjb25kIGNvbW1pdAorCQlFT0YKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKSAmJgorCWdpdCByZWJhc2UgLS1hdXRvc3F1YXNoIC1pIEhFQUReXl5eICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgImZpbmFsLSQxLSQyIiAmJgorCWVjaG8gMiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF46ZmlsZTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReID5jb21taXQgJiYKKwlncmVwIGZpcnN0IGNvbW1pdCA+YWN0dWFsICYmCisJaWYgdGVzdCAiJDEiID0gImZpeHVwIgorCXRoZW4KKwkJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwKKwllbGlmIHRlc3QgIiQxIiA9ICJzcXVhc2giCisJdGhlbgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbAorCWVsc2UKKwkJZmFsc2UKKwlmaQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnZml4dXAhIGZpeHVwIScgJworCXRlc3RfYXV0b19maXh1cF9maXh1cCBmaXh1cCBmaXh1cAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnZml4dXAhIHNxdWFzaCEnICcKKwl0ZXN0X2F1dG9fZml4dXBfZml4dXAgZml4dXAgc3F1YXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdzcXVhc2ghIHNxdWFzaCEnICcKKwl0ZXN0X2F1dG9fZml4dXBfZml4dXAgc3F1YXNoIHNxdWFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnc3F1YXNoISBmaXh1cCEnICcKKwl0ZXN0X2F1dG9fZml4dXBfZml4dXAgc3F1YXNoIGZpeHVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdhdXRvc3F1YXNoIHdpdGggY3VzdG9tIGluc3QgZm9ybWF0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJZ2l0IGNvbmZpZyAtLWFkZCByZWJhc2UuaW5zdHJ1Y3Rpb25Gb3JtYXQgIlslYW4gQCAlYXJdICVzIiAgJiYKKwllY2hvIDIgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCW9pZD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXikgJiYKKwlnaXQgY29tbWl0IC1tICJzcXVhc2ghICRvaWQiICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlzdWJqZWN0PSQoZ2l0IGxvZyAtbiAxIC0tZm9ybWF0PSVzIEhFQUR+MikgJiYKKwlnaXQgY29tbWl0IC1tICJzcXVhc2ghICRzdWJqZWN0IiAmJgorCWdpdCB0YWcgZmluYWwtc3F1YXNoLWluc3RGbXQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEfjQgJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBmaW5hbC1zcXVhc2gtaW5zdEZtdCAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF46ZmlsZTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReID5jb21taXQgJiYKKwlncmVwIHNxdWFzaCBjb21taXQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zcXVhc2ggd2l0aCBlbXB0eSBjdXN0b20gaW5zdHJ1Y3Rpb25Gb3JtYXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwl0ZXN0X2NvbW1pdCBlbXB0eS1pbnN0cnVjdGlvbkZvcm1hdC10ZXN0ICYmCisJKAorCQlzZXRfY2F0X3RvZG9fZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyByZWJhc2UuaW5zdHJ1Y3Rpb25Gb3JtYXQ9IFwKKwkJCXJlYmFzZSAtLWF1dG9zcXVhc2ggIC0tZm9yY2UtcmViYXNlIC1pIEhFQUReID5hY3R1YWwgJiYKKwkJZ2l0IGxvZyAtMSAtLWZvcm1hdD0icGljayAlaCAlcyIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCitzZXRfYmFja3VwX2VkaXRvciAoKSB7CisJd3JpdGVfc2NyaXB0IGJhY2t1cC1lZGl0b3Iuc2ggPDwtXEVPRgorCWNwICIkMSIgLmdpdC9iYWNrdXAtIiQoYmFzZW5hbWUgIiQxIikiCisJRU9GCisJdGVzdF9zZXRfZWRpdG9yICIkUFdEL2JhY2t1cC1lZGl0b3Iuc2giCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zcXVhc2ggd2l0aCBtdWx0aXBsZSBlbXB0eSBwYXRjaGVzJyAnCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJlbXB0eSIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImVtcHR5MiIgJiYKKwl0ZXN0X3RpY2sgJiYKKwk+Zml4dXAgJiYKKwlnaXQgYWRkIGZpeHVwICYmCisJZ2l0IGNvbW1pdCAtLWZpeHVwIEhFQUReXiAmJgorCSgKKwkJc2V0X2JhY2t1cF9lZGl0b3IgJiYKKwkJR0lUX1VTRV9SRUJBU0VfSEVMUEVSPWZhbHNlIFwKKwkJZ2l0IHJlYmFzZSAtaSAtLWZvcmNlLXJlYmFzZSAtLWF1dG9zcXVhc2ggSEVBRH40ICYmCisJCWdyZXAgZW1wdHkyIC5naXQvYmFja3VwLWdpdC1yZWJhc2UtdG9kbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXh0cmEgc3BhY2VzIGFmdGVyIGZpeHVwIScgJworCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF9jb21taXQgdG8tZml4dXAgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImZpeHVwISAgdG8tZml4dXAiICYmCisJZ2l0IHJlYmFzZSAtaSAtLWF1dG9zcXVhc2ggLS1rZWVwLWVtcHR5IEhFQUR+MiAmJgorCXBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdGVzdCAkYmFzZSA9ICRwYXJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JhcHBlZCBvcmlnaW5hbCBzdWJqZWN0JyAnCisJaWYgdGVzdCAtZCAuZ2l0L3JlYmFzZS1tZXJnZTsgdGhlbiBnaXQgcmViYXNlIC0tYWJvcnQ7IGZpICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICJ3cmFwcGVkIHN1YmplY3QiID53cmFwcGVkICYmCisJZ2l0IGFkZCB3cmFwcGVkICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICIkKHByaW50ZiAiVG9cbmZpeHVwIikiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJmaXh1cCEgVG8gZml4dXAiICYmCisJZ2l0IHJlYmFzZSAtaSAtLWF1dG9zcXVhc2ggLS1rZWVwLWVtcHR5IEhFQUR+MiAmJgorCXBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdGVzdCAkYmFzZSA9ICRwYXJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnQgbGFzdCBzcXVhc2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNvbWUtc3F1YXNoZXMgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZmlyc3QgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1zcXVhc2ggSEVBRCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBzZWNvbmQgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1zcXVhc2ggSEVBRCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGNvcmUuZWRpdG9yPSJncmVwIC1xIF5waWNrIiBcCisJCXJlYmFzZSAta2kgLS1hdXRvc3F1YXNoIEhFQUR+NCAmJgorCTogZG8gbm90IGZpbmlzaCB0aGUgc3F1YXNoLCBidXQgcmVzb2x2ZSBpdCBtYW51YWxseSAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLWFtZW5kIC1tIGVkaXRlZC1maXJzdCAmJgorCWdpdCByZWJhc2UgLS1za2lwICYmCisJZ2l0IHNob3cgPmFjdHVhbCAmJgorCSEgZ3JlcCBmaXJzdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZml4dXAgYSBmaXh1cCcgJworCWVjaG8gMHRvLWZpeHVwID5maWxlMCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInRvLWZpeHVwIiBmaWxlMCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1zcXVhc2ggSEVBRCAtbSBYIC0tYWxsb3ctZW1wdHkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tc3F1YXNoIEhFQUReIC1tIFkgLS1hbGxvdy1lbXB0eSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNxdWFzaCEgJChnaXQgcmV2LXBhcnNlIEhFQUReKSIgLW0gWiAtLWFsbG93LWVtcHR5ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3F1YXNoISAkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgLW0gVyAtLWFsbG93LWVtcHR5ICYmCisJZ2l0IHJlYmFzZSAta2kgLS1hdXRvc3F1YXNoIEhFQUR+NSAmJgorCXRlc3QgWFpXWSA9ICQoZ2l0IHNob3cgfCB0ciAtY2QgVy1aKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTYtcmViYXNlLW9udG8tdGhyZWVkb3RzLnNoIGIvdC90MzQxNi1yZWJhc2Utb250by10aHJlZWRvdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWMyNTQ4NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTYtcmViYXNlLW9udG8tdGhyZWVkb3RzLnNoCkBAIC0wLDAgKzEsMTYyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLW9udG8gQS4uLkInCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1yZWJhc2Uuc2giCisKKyMgUmViYXNlIG9ubHkgdGhlIHRpcCBjb21taXQgb2YgInRvcGljIiBvbiBtZXJnZSBiYXNlIGJldHdlZW4gIm1hc3RlciIKKyMgYW5kICJ0b3BpYyIuICBDYW5ub3QgZG8gdGhpcyBmb3IgInNpZGUiIHdpdGggIm1hc3RlciIgYmVjYXVzZSB0aGVyZQorIyBpcyBubyBzaW5nbGUgbWVyZ2UgYmFzZS4KKyMKKyMKKyMJICAgIEYtLS1HIHRvcGljICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHJworIwkgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLworIyBBLS0tQi0tLUMtLS1ELS0tRSBtYXN0ZXIgICAgICAtLT4gICAgICAgQS0tLUItLS1DLS0tRC0tLUUKKyMgICAgICBcICAgXCAvCisjCVwgICB4CisjCSBcIC8gXAorIwkgIEgtLS1JLS0tSi0tLUsgc2lkZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBBICYmCisJdGVzdF9jb21taXQgQiAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCXRlc3RfY29tbWl0IEMgJiYKKwlnaXQgYnJhbmNoIHRvcGljICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCBIICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSBIICYmCisJZ2l0IHRhZyBEICYmCisJdGVzdF9jb21taXQgRSAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCXRlc3RfY29tbWl0IEYgJiYKKwl0ZXN0X2NvbW1pdCBHICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgQyAmJgorCWdpdCB0YWcgSSAmJgorCXRlc3RfY29tbWl0IEogJiYKKwl0ZXN0X2NvbW1pdCBLCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW9udG8gbWFzdGVyLi4udG9waWMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJZ2l0IHJlc2V0IC0taGFyZCBHICYmCisKKwlnaXQgcmViYXNlIC0tb250byBtYXN0ZXIuLi50b3BpYyBGICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgQ14wID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW9udG8gbWFzdGVyLi4uJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCWdpdCByZXNldCAtLWhhcmQgRyAmJgorCisJZ2l0IHJlYmFzZSAtLW9udG8gbWFzdGVyLi4uIEYgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBDXjAgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tb250byBtYXN0ZXIuLi5zaWRlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBLICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tb250byBtYXN0ZXIuLi5zaWRlIEoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tb250byBtYXN0ZXIuLi50b3BpYycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEcgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlFWFBFQ1RfQ09VTlQ9MSBnaXQgcmViYXNlIC1pIC0tb250byBtYXN0ZXIuLi50b3BpYyBGICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgQ14wID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLW9udG8gbWFzdGVyLi4uJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCWdpdCByZXNldCAtLWhhcmQgRyAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCUVYUEVDVF9DT1VOVD0xIGdpdCByZWJhc2UgLWkgLS1vbnRvIG1hc3Rlci4uLiBGICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgQ14wID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLW9udG8gbWFzdGVyLi4uc2lkZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSyAmJgorCisJc2V0X2Zha2VfZWRpdG9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLW9udG8gbWFzdGVyLi4uc2lkZSBKCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWtlZXAtYmFzZSAtLW9udG8gaW5jb21wYXRpYmxlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWtlZXAtYmFzZSAtLW9udG8gbWFzdGVyLi4uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWtlZXAtYmFzZSAtLXJvb3QgaW5jb21wYXRpYmxlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWtlZXAtYmFzZSAtLXJvb3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0ta2VlcC1iYXNlIG1hc3RlciBmcm9tIHRvcGljJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCWdpdCByZXNldCAtLWhhcmQgRyAmJgorCisJZ2l0IHJlYmFzZSAtLWtlZXAtYmFzZSBtYXN0ZXIgJiYKKwlnaXQgcmV2LXBhcnNlIEMgPmJhc2UuZXhwZWN0ICYmCisJZ2l0IG1lcmdlLWJhc2UgbWFzdGVyIEhFQUQgPmJhc2UuYWN0dWFsICYmCisJdGVzdF9jbXAgYmFzZS5leHBlY3QgYmFzZS5hY3R1YWwgJiYKKworCWdpdCByZXYtcGFyc2UgSEVBRH4yID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIENeMCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1rZWVwLWJhc2UgbWFzdGVyIGZyb20gc2lkZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSyAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWtlZXAtYmFzZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0ta2VlcC1iYXNlIG1hc3RlciBmcm9tIHRvcGljJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCWdpdCByZXNldCAtLWhhcmQgRyAmJgorCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRVhQRUNUX0NPVU5UPTIgZ2l0IHJlYmFzZSAtaSAtLWtlZXAtYmFzZSBtYXN0ZXIgJiYKKwlnaXQgcmV2LXBhcnNlIEMgPmJhc2UuZXhwZWN0ICYmCisJZ2l0IG1lcmdlLWJhc2UgbWFzdGVyIEhFQUQgPmJhc2UuYWN0dWFsICYmCisJdGVzdF9jbXAgYmFzZS5leHBlY3QgYmFzZS5hY3R1YWwgJiYKKworCWdpdCByZXYtcGFyc2UgSEVBRH4yID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIENeMCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1rZWVwLWJhc2UgbWFzdGVyIGZyb20gc2lkZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSyAmJgorCisJc2V0X2Zha2VfZWRpdG9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLWtlZXAtYmFzZSBtYXN0ZXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDE3LXJlYmFzZS13aGl0ZXNwYWNlLWZpeC5zaCBiL3QvdDM0MTctcmViYXNlLXdoaXRlc3BhY2UtZml4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk0NmU5MmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDE3LXJlYmFzZS13aGl0ZXNwYWNlLWZpeC5zaApAQCAtMCwwICsxLDEyNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS13aGl0ZXNwYWNlPWZpeAorCitUaGlzIHRlc3QgcnVucyBnaXQgcmViYXNlIC0td2hpdGVzcGFjZT1maXggYW5kIG1ha2Ugc3VyZSB0aGF0IGl0IHdvcmtzLgorJworCisuIC4vdGVzdC1saWIuc2gKKworIyBwcmVwYXJlIGluaXRpYWwgcmV2aXNpb24gb2YgImZpbGUiIHdpdGggYSBibGFuayBsaW5lIGF0IHRoZSBlbmQKK2NhdCA+ZmlsZSA8PEVPRgorYQorYgorYworCitFT0YKKworIyBleHBlY3RlZCBjb250ZW50cyBpbiAiZmlsZSIgYWZ0ZXIgcmViYXNlCitjYXQgPmV4cGVjdC1maXJzdCA8PEVPRgorYQorYgorYworRU9GCisKKyMgcHJlcGFyZSBzZWNvbmQgcmV2aXNpb24gb2YgImZpbGUiCitjYXQgPnNlY29uZCA8PEVPRgorYQorYgorYworCitkCitlCitmCisKKworCisKK0VPRgorCisjIGV4cGVjdGVkIGNvbnRlbnRzIGluIHNlY29uZCByZXZpc2lvbiBhZnRlciByZWJhc2UKK2NhdCA+ZXhwZWN0LXNlY29uZCA8PEVPRgorYQorYgorYworCitkCitlCitmCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgbGluZSBhdCBlbmQgb2YgZmlsZTsgZXh0ZW5kIGF0IGVuZCBvZiBmaWxlJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJJbml0aWFsIGVtcHR5IGNvbW1pdCIgJiYKKwlnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBmaXJzdCAmJgorCW12IHNlY29uZCBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJZ2l0IHJlYmFzZSAtLXdoaXRlc3BhY2U9Zml4IEhFQUReXiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUReOmZpbGUgZXhwZWN0LWZpcnN0ICYmCisJdGVzdF9jbXAgZXhwZWN0LXNlY29uZCBmaWxlCisnCisKKyMgcHJlcGFyZSB0aGlyZCByZXZpc2lvbiBvZiAiZmlsZSIKK3NlZCAtZSdzL1ovLycgPnRoaXJkIDw8RU9GCithCitiCitjCisKK2QKK2UKK2YKKyAgICBaCisgWgoraAoraQoragoraworbAorRU9GCisKK3NlZCAtZSdzLyAvL2cnIDx0aGlyZCA+ZXhwZWN0LXRoaXJkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3byBibGFua3MgbGluZSBhdCBlbmQgb2YgZmlsZTsgZXh0ZW5kIGF0IGVuZCBvZiBmaWxlJyAnCisJY3AgdGhpcmQgZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCWdpdCByZWJhc2UgLS13aGl0ZXNwYWNlPWZpeCBIRUFEXl4gJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEXjpmaWxlIGV4cGVjdC1zZWNvbmQgJiYKKwl0ZXN0X2NtcCBleHBlY3QtdGhpcmQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lLCBidXQgZG8gbm90IHJlbW92ZSB0cmFpbGluZyBzcGFjZXMnICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiLWJsYW5rLWF0LWVvbCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJY3AgdGhpcmQgZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCWdpdCByZWJhc2UgLS13aGl0ZXNwYWNlPWZpeCBIRUFEXl4gJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEXjpmaWxlIGV4cGVjdC1zZWNvbmQgJiYKKwl0ZXN0X2NtcCBmaWxlIHRoaXJkCisnCisKK3NlZCAtZSdzL1ovLycgPmJlZ2lubmluZyA8PEVPRgorYQorCQkgICAgWgorICAgICAgIFoKK0VPRgorCitjYXQgPmV4cGVjdC1iZWdpbm5pbmcgPDxFT0YKK2EKKworCisxCisyCiszCis0Cis1CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXQgYmVnaW5uaW5nIG9mIGZpbGUnICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiYmxhbmstYXQtZW9sIiAmJgorCWNwIGJlZ2lubmluZyBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBiZWdpbm5pbmcgZmlsZSAmJgorCWZvciBpIGluIDEgMiAzIDQgNTsgZG8KKwkJZWNobyAkaQorCWRvbmUgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLW0gbW9yZSBmaWxlICYmCisJZ2l0IHJlYmFzZSAtLXdoaXRlc3BhY2U9Zml4IEhFQUReXiAmJgorCXRlc3RfY21wIGV4cGVjdC1iZWdpbm5pbmcgZmlsZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTgtcmViYXNlLWNvbnRpbnVlLnNoIGIvdC90MzQxOC1yZWJhc2UtY29udGludWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2EyZGE5NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTgtcmViYXNlLWNvbnRpbnVlLnNoCkBAIC0wLDAgKzEsMjkwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3NldF9mYWtlX2VkaXRvcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0ICJjb21taXQtbmV3LWZpbGUtRjEiIEYxIDEgJiYKKwl0ZXN0X2NvbW1pdCAiY29tbWl0LW5ldy1maWxlLUYyIiBGMiAyICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCAiY29tbWl0LW5ldy1maWxlLUYyLW9uLXRvcGljLWJyYW5jaCIgRjIgMjIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJhY3RpdmUgcmViYXNlIC0tY29udGludWUgd29ya3Mgd2l0aCB0b3VjaGVkIGZpbGUnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9LTYwIEYxICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1pbnRlcmFjdGl2ZSByZWJhc2UgLS1jb250aW51ZSB3b3JrcyB3aXRoIHRvdWNoZWQgZmlsZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS0qICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1vbnRvIG1hc3RlciBtYXN0ZXIgdG9waWMgJiYKKwllY2hvICJSZXNvbHZlZCIgPkYyICYmCisJZ2l0IGFkZCBGMiAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0tNjAgRjEgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tY29udGludWUgY2FuIG5vdCBiZSB1c2VkIHdpdGggb3RoZXIgb3B0aW9ucycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXYgLS1jb250aW51ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAtdgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1jb250aW51ZSByZW1lbWJlcnMgbWVyZ2Ugc3RyYXRlZ3kgYW5kIG9wdGlvbnMnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgY29tbWl0LW5ldy1maWxlLUYyLW9uLXRvcGljLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0ICJjb21taXQtbmV3LWZpbGUtRjMtb24tdG9waWMtYnJhbmNoIiBGMyAzMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIHRlc3QtYmluIGZ1bm55Lndhcy5ydW4iICYmCisJbWtkaXIgdGVzdC1iaW4gJiYKKwljYXQgPnRlc3QtYmluL2dpdC1tZXJnZS1mdW5ueSA8PC1FT0YgJiYKKwkjISRTSEVMTF9QQVRICisJY2FzZSAiXCQxIiBpbiAtLW9wdCkgOzsgKikgZXhpdCAyIDs7IGVzYWMKKwlzaGlmdCAmJgorCT5mdW5ueS53YXMucnVuICYmCisJZXhlYyBnaXQgbWVyZ2UtcmVjdXJzaXZlICJcJEAiCisJRU9GCisJY2htb2QgK3ggdGVzdC1iaW4vZ2l0LW1lcmdlLWZ1bm55ICYmCisJKAorCQlQQVRIPS4vdGVzdC1iaW46JFBBVEggJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtcyBmdW5ueSAtWG9wdCBtYXN0ZXIgdG9waWMKKwkpICYmCisJdGVzdCAtZiBmdW5ueS53YXMucnVuICYmCisJcm0gZnVubnkud2FzLnJ1biAmJgorCWVjaG8gIlJlc29sdmVkIiA+RjIgJiYKKwlnaXQgYWRkIEYyICYmCisJKAorCQlQQVRIPS4vdGVzdC1iaW46JFBBVEggJiYKKwkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCXRlc3QgLWYgZnVubnkud2FzLnJ1bgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1jb250aW51ZSBoYW5kbGVzIG1lcmdlIHN0cmF0ZWd5IGFuZCBvcHRpb25zJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLSogJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdC1uZXctZmlsZS1GMi1vbi10b3BpYy1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCAiY29tbWl0LW5ldy1maWxlLUYzLW9uLXRvcGljLWJyYW5jaC1mb3ItZGFzaC1pIiBGMyAzMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIHRlc3QtYmluIGZ1bm55Lndhcy5ydW4gZnVubnkuYXJncyIgJiYKKwlta2RpciB0ZXN0LWJpbiAmJgorCWNhdCA+dGVzdC1iaW4vZ2l0LW1lcmdlLWZ1bm55IDw8LUVPRiAmJgorCSMhJFNIRUxMX1BBVEgKKwllY2hvICJcJEAiID4+ZnVubnkuYXJncworCWNhc2UgIlwkMSIgaW4gLS1vcHQpIDs7ICopIGV4aXQgMiA7OyBlc2FjCisJY2FzZSAiXCQyIiBpbiAtLWZvbykgOzsgKikgZXhpdCAyIDs7IGVzYWMKKwljYXNlICJcJDQiIGluIC0tKSA7OyAqKSBleGl0IDIgOzsgZXNhYworCXNoaWZ0IDIgJiYKKwk+ZnVubnkud2FzLnJ1biAmJgorCWV4ZWMgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAiXCRAIgorCUVPRgorCWNobW9kICt4IHRlc3QtYmluL2dpdC1tZXJnZS1mdW5ueSAmJgorCSgKKwkJUEFUSD0uL3Rlc3QtYmluOiRQQVRIICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLXMgZnVubnkgLVhvcHQgLVhmb28gbWFzdGVyIHRvcGljCisJKSAmJgorCXRlc3QgLWYgZnVubnkud2FzLnJ1biAmJgorCXJtIGZ1bm55Lndhcy5ydW4gJiYKKwllY2hvICJSZXNvbHZlZCIgPkYyICYmCisJZ2l0IGFkZCBGMiAmJgorCSgKKwkJUEFUSD0uL3Rlc3QtYmluOiRQQVRIICYmCisJCWdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKKwl0ZXN0IC1mIGZ1bm55Lndhcy5ydW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRUJBU0VfUCAncmViYXNlIHBhc3NlcyBtZXJnZSBzdHJhdGVneSBvcHRpb25zIGNvcnJlY3RseScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS0qICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXQtbmV3LWZpbGUtRjMtb24tdG9waWMtYnJhbmNoICYmCisJdGVzdF9jb21taXQgdGhlaXJzLXRvLW1lcmdlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3RfY29tbWl0IHNvbWUtY29tbWl0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgdGhlaXJzLXRvLW1lcmdlICYmCisJRkFLRV9MSU5FUz0iMSBlZGl0IDIgMyIgZ2l0IHJlYmFzZSAtaSAtZiAtcCAtbSBcCisJCS1zIHJlY3Vyc2l2ZSAtLXN0cmF0ZWd5LW9wdGlvbj10aGVpcnMgSEVBRH4yICYmCisJdGVzdF9jb21taXQgZm9yY2UtY2hhbmdlICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtciBwYXNzZXMgbWVyZ2Ugc3RyYXRlZ3kgb3B0aW9ucyBjb3JyZWN0bHknICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgY29tbWl0LW5ldy1maWxlLUYzLW9uLXRvcGljLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0IG1lcmdlLXRoZWlycyAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCBzb21lLW90aGVyLWNvbW1pdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIG1lcmdlLXRoZWlycyAmJgorCUZBS0VfTElORVM9IjEgMyBlZGl0IDQgNSA3IDggOSIgZ2l0IHJlYmFzZSAtaSAtZiAtciAtbSBcCisJCS1zIHJlY3Vyc2l2ZSAtLXN0cmF0ZWd5LW9wdGlvbj10aGVpcnMgSEVBRH4yICYmCisJdGVzdF9jb21taXQgZm9yY2UtY2hhbmdlLW91cnMgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1za2lwIGFmdGVyIGZhaWxlZCBmaXh1cCBjbGVhbnMgY29tbWl0IG1lc3NhZ2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHdpdGgtY29uZmxpY3RpbmctZml4dXAgJiYKKwl0ZXN0X2NvbW1pdCB3YW50cy1maXh1cCAmJgorCXRlc3RfY29tbWl0ICJmaXh1cCEgd2FudHMtZml4dXAiIHdhbnRzLWZpeHVwLnQgMSB3YW50cy1maXh1cC0xICYmCisJdGVzdF9jb21taXQgImZpeHVwISB3YW50cy1maXh1cCIgd2FudHMtZml4dXAudCAyIHdhbnRzLWZpeHVwLTIgJiYKKwl0ZXN0X2NvbW1pdCAiZml4dXAhIHdhbnRzLWZpeHVwIiB3YW50cy1maXh1cC50IDMgd2FudHMtZml4dXAtMyAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGZpeHVwIDIgc3F1YXNoIDQiIFwKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEfjQgJiYKKworCTogbm93IHRoZXJlIGlzIGEgY29uZmxpY3QsIGFuZCBjb21tZW50cyBpbiB0aGUgY29tbWl0IG1lc3NhZ2UgJiYKKwlnaXQgc2hvdyBIRUFEID5vdXQgJiYKKwlncmVwICJmaXh1cCEgd2FudHMtZml4dXAiIG91dCAmJgorCisJOiBza2lwIGFuZCBjb250aW51ZSAmJgorCWVjaG8gImNwIFwiXCQxXCIgLmdpdC9jb3B5LnR4dCIgfCB3cml0ZV9zY3JpcHQgY29weS1lZGl0b3Iuc2ggJiYKKwkodGVzdF9zZXRfZWRpdG9yICIkUFdEL2NvcHktZWRpdG9yLnNoIiAmJiBnaXQgcmViYXNlIC0tc2tpcCkgJiYKKworCTogdGhlIHVzZXIgc2hvdWxkIG5vdCBoYXZlIGhhZCB0byBlZGl0IHRoZSBjb21taXQgbWVzc2FnZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvY29weS50eHQgJiYKKworCTogbm93IHRoZSBjb21tZW50cyBpbiB0aGUgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkIHVwICYmCisJZ2l0IHNob3cgSEVBRCA+b3V0ICYmCisJISBncmVwICJmaXh1cCEgd2FudHMtZml4dXAiIG91dCAmJgorCisJOiBub3csIGxldCB1cyBlbnN1cmUgdGhhdCAic3F1YXNoIiBpcyBoYW5kbGVkIGNvcnJlY3RseSAmJgorCWdpdCByZXNldCAtLWhhcmQgd2FudHMtZml4dXAtMyAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIHNxdWFzaCA0IHNxdWFzaCAyIHNxdWFzaCA0IiBcCisJCWdpdCByZWJhc2UgLWkgSEVBRH40ICYmCisKKwk6IHRoZSBmaXJzdCBzcXVhc2ggZmFpbGVkLCBidXQgdGhlcmUgYXJlIHR3byBtb3JlIGluIHRoZSBjaGFpbiAmJgorCSh0ZXN0X3NldF9lZGl0b3IgIiRQV0QvY29weS1lZGl0b3Iuc2giICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1za2lwKSAmJgorCisJOiBub3QgdGhlIGZpbmFsIHNxdWFzaCwgbm8gbmVlZCB0byBlZGl0IHRoZSBjb21taXQgbWVzc2FnZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvY29weS50eHQgJiYKKworCTogVGhlIGZpcnN0IHNxdWFzaCB3YXMgc2tpcHBlZCwgdGhlcmVmb3JlOiAmJgorCWdpdCBzaG93IEhFQUQgPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIiMgVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cyIgb3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiIyBUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjMjoiIG91dCAmJgorCisJKHRlc3Rfc2V0X2VkaXRvciAiJFBXRC9jb3B5LWVkaXRvci5zaCIgJiYgZ2l0IHJlYmFzZSAtLXNraXApICYmCisJZ2l0IHNob3cgSEVBRCA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAhICIjIFRoaXMgaXMgYSBjb21iaW5hdGlvbiIgb3V0ICYmCisKKwk6IEZpbmFsIHNxdWFzaCBmYWlsZWQsIGJ1dCB0aGVyZSB3YXMgc3RpbGwgYSBzcXVhc2ggJiYKKwl0ZXN0X2kxOG5ncmVwICIjIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHMiIC5naXQvY29weS50eHQgJiYKKwl0ZXN0X2kxOG5ncmVwICIjIFRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMyOiIgLmdpdC9jb3B5LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXJlcmUgZGF0YWJhc2UnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgY29tbWl0LW5ldy1maWxlLUYzLW9uLXRvcGljLWJyYW5jaCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCAiY29tbWl0LW5ldy1maWxlLUYzIiBGMyAzICYmCisJdGVzdF9jb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvdG9waWMgY29tbWl0LW5ldy1maWxlLUYzLW9uLXRvcGljLWJyYW5jaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLW0gbWFzdGVyIHRvcGljICYmCisJZWNobyAiUmVzb2x2ZWQiID5GMiAmJgorCWNwIEYyIGV4cGVjdGVkLUYyICYmCisJZ2l0IGFkZCBGMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gIlJlc29sdmVkIiA+RjMgJiYKKwljcCBGMyBleHBlY3RlZC1GMyAmJgorCWdpdCBhZGQgRjMgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHRvcGljQHsxfQorJworCitwcmVwYXJlICgpIHsKKwlybSAtZnIgLmdpdC9yZWJhc2UtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgY29tbWl0LW5ldy1maWxlLUYzLW9uLXRvcGljLWJyYW5jaCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlCit9CisKK3Rlc3RfcmVyZXJlX2F1dG91cGRhdGUgKCkgeworCWFjdGlvbj0kMSAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAkYWN0aW9uIC0tY29udGludWUgcmVtZW1iZXJzIC0tcmVyZXJlLWF1dG91cGRhdGUiICcKKwkJcHJlcGFyZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlICRhY3Rpb24gLS1yZXJlcmUtYXV0b3VwZGF0ZSBtYXN0ZXIgdG9waWMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQtRjIgRjIgJiYKKwkJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQtRjMgRjMgJiYKKwkJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCQlnaXQgcmViYXNlIC0tY29udGludWUKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgJGFjdGlvbiAtLWNvbnRpbnVlIGhvbm9ycyByZXJlcmUuYXV0b1VwZGF0ZSIgJworCQlwcmVwYXJlICYmCisJCXRlc3RfY29uZmlnIHJlcmVyZS5hdXRvdXBkYXRlIHRydWUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAkYWN0aW9uIG1hc3RlciB0b3BpYyAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZC1GMiBGMiAmJgorCQlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZC1GMyBGMyAmJgorCQlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJCWdpdCByZWJhc2UgLS1jb250aW51ZQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAkYWN0aW9uIC0tY29udGludWUgcmVtZW1iZXJzIC0tbm8tcmVyZXJlLWF1dG91cGRhdGUiICcKKwkJcHJlcGFyZSAmJgorCQl0ZXN0X2NvbmZpZyByZXJlcmUuYXV0b3VwZGF0ZSB0cnVlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgJGFjdGlvbiAtLW5vLXJlcmVyZS1hdXRvdXBkYXRlIG1hc3RlciB0b3BpYyAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZC1GMiBGMiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJCWdpdCBhZGQgRjIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJCXRlc3RfY21wIGV4cGVjdGVkLUYzIEYzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwkJZ2l0IGFkZCBGMyAmJgorCQlnaXQgcmViYXNlIC0tY29udGludWUKKwknCit9CisKK3Rlc3RfcmVyZXJlX2F1dG91cGRhdGUKK3Rlc3RfcmVyZXJlX2F1dG91cGRhdGUgLW0KK0dJVF9TRVFVRU5DRV9FRElUT1I9OiAmJiBleHBvcnQgR0lUX1NFUVVFTkNFX0VESVRPUgordGVzdF9yZXJlcmVfYXV0b3VwZGF0ZSAtaQordGVzdF9oYXZlX3ByZXJlcSAhUkVCQVNFX1AgfHwgdGVzdF9yZXJlcmVfYXV0b3VwZGF0ZSAtLXByZXNlcnZlLW1lcmdlcwordW5zZXQgR0lUX1NFUVVFTkNFX0VESVRPUgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGUgdG9kbyBjb21tYW5kICJicmVhayIgd29ya3MnICcKKwlybSAtZiBleGVjZWQgJiYKKwlGQUtFX0xJTkVTPSJicmVhayBiIGV4ZWNfPmV4ZWNlZCIgZ2l0IHJlYmFzZSAtaSBIRUFEICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZXhlY2VkICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZXhlY2VkICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZXhlY2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXggZmFsc2UgLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIEhFQUReICYmCisJZ3JlcCAiXmV4ZWMgZmFsc2UiIC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyAmJgorCWdpdCByZWJhc2UgLS1hYm9ydCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyByZWJhc2UucmVzY2hlZHVsZUZhaWxlZEV4ZWM9dHJ1ZSBcCisJCXJlYmFzZSAteCBmYWxzZSBIRUFEXiAyPmVyciAmJgorCWdyZXAgIl5leGVjIGZhbHNlIiAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8gJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXMgYmVlbiByZXNjaGVkdWxlZCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZS5yZXNjaGVkdWxlZmFpbGVkZXhlYyBvbmx5IGFmZmVjdHMgYHJlYmFzZSAtaWAnICcKKwl0ZXN0X2NvbmZpZyByZWJhc2UucmVzY2hlZHVsZWZhaWxlZGV4ZWMgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXggZmFsc2UgSEVBRF4gJiYKKwlncmVwICJeZXhlYyBmYWxzZSIgLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvICYmCisJZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJZ2l0IHJlYmFzZSBIRUFEXgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTktcmViYXNlLXBhdGNoLWlkLnNoIGIvdC90MzQxOS1yZWJhc2UtcGF0Y2gtaWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWYzMmZhYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTktcmViYXNlLXBhdGNoLWlkLnNoCkBAIC0wLDAgKzEsNzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIC0gdGVzdCBwYXRjaCBpZCBjb21wdXRhdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK3NjcmFtYmxlICgpIHsKKwlpPTAKKwl3aGlsZSByZWFkIHgKKwlkbworCQlpZiB0ZXN0ICRpIC1uZSAwCisJCXRoZW4KKwkJCWVjaG8gIiR4IgorCQlmaQorCQlpPSQoKCgkaSsxKSAlIDEwKSkKKwlkb25lIDwiJDEiID4iJDEubmV3IgorCW12IC1mICIkMS5uZXciICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgcm9vdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogNTAwIGxpbmVzJyAnCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY2hlY2tvdXQgLXEgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCByb290ICYmCisJdGVzdF9zZXEgNTAwID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtcSAtbSBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCAtZiBvdGhlciAmJgorCisJc2NyYW1ibGUgZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLXEgLW0gImNoYW5nZSBiaWcgZmlsZSIgJiYKKworCWdpdCBjaGVja291dCAtcSBvdGhlciAmJgorCTogPm5ld2ZpbGUgJiYKKwlnaXQgYWRkIG5ld2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1xIC1tICJhZGQgc21hbGwgZmlsZSIgJiYKKworCWdpdCBjaGVycnktcGljayBtYXN0ZXIgPi9kZXYvbnVsbCAyPiYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGF0dHJpYnV0ZXMnICcKKwllY2hvICJmaWxlIGJpbmFyeSIgPi5naXRhdHRyaWJ1dGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCB1cHN0cmVhbSBwYXRjaCcgJworCWdpdCBjaGVja291dCAtcSBtYXN0ZXIgJiYKKwlzY3JhbWJsZSBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAiY2hhbmdlIGJpZyBmaWxlIGFnYWluIiAmJgorCWdpdCBjaGVja291dCAtcSBvdGhlcl57fSAmJgorCWdpdCByZWJhc2UgbWFzdGVyICYmCisJZ2l0IHJldi1saXN0IG1hc3Rlci4uLkhFQUR+ID5yZXZzICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHJldnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGRyb3AgcGF0Y2gnICcKKwlnaXQgYnJhbmNoIC1mIHNxdWFzaGVkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtcSAtZiBzcXVhc2hlZCAmJgorCWdpdCByZXNldCAtcSAtLXNvZnQgSEVBRH4yICYmCisJZ2l0IGNvbW1pdCAtcSAtbSBzcXVhc2hlZCAmJgorCWdpdCBjaGVja291dCAtcSBvdGhlcl57fSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2Ugc3F1YXNoZWQgJiYKKwlnaXQgcmViYXNlIC0tcXVpdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MjAtcmViYXNlLWF1dG9zdGFzaC5zaCBiL3QvdDM0MjAtcmViYXNlLWF1dG9zdGFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYTMzMTczCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQyMC1yZWJhc2UtYXV0b3N0YXNoLnNoCkBAIC0wLDAgKzEsMzMzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzIFJhbWt1bWFyIFJhbWFjaGFuZHJhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS1hdXRvc3Rhc2ggdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsby13b3JsZCA+ZmlsZTAgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZmVhdHVyZS1icmFuY2ggJiYKKwllY2hvIGFub3RoZXItaGVsbG8gPmZpbGUxICYmCisJZWNobyBnb29kYnllID5maWxlMiAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNlY29uZCBjb21taXQiICYmCisJZWNobyBmaW5hbC1nb29kYnllID5maWxlMyAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInRoaXJkIGNvbW1pdCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdW5yZWxhdGVkLW9udG8tYnJhbmNoIG1hc3RlciAmJgorCWVjaG8gdW5yZWxhdGVkID5maWxlNCAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInVucmVsYXRlZCBjb21taXQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlbGF0ZWQtb250by1icmFuY2ggbWFzdGVyICYmCisJZWNobyBjb25mbGljdGluZy1jaGFuZ2UgPmZpbGUyICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicmVsYXRlZCBjb21taXQiICYmCisJcmVtb3ZlX3Byb2dyZXNzX3JlPSIkKHByaW50ZiAicy8uKlxcci8vIikiCisnCisKK2NyZWF0ZV9leHBlY3RlZF9zdWNjZXNzX2FwcGx5ICgpIHsKKwljYXQgPmV4cGVjdGVkIDw8LUVPRgorCSQoZ3JlcCAiXkNyZWF0ZWQgYXV0b3N0YXNoOiBbMC05YS1mXVswLTlhLWZdKlwkIiBhY3R1YWwpCisJRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uCisJQXBwbHlpbmc6IHNlY29uZCBjb21taXQKKwlBcHBseWluZzogdGhpcmQgY29tbWl0CisJQXBwbGllZCBhdXRvc3Rhc2guCisJRU9GCit9CisKK2NyZWF0ZV9leHBlY3RlZF9zdWNjZXNzX21lcmdlICgpIHsKKwlxX3RvX2NyID5leHBlY3RlZCA8PC1FT0YKKwkkKGdyZXAgIl5DcmVhdGVkIGF1dG9zdGFzaDogWzAtOWEtZl1bMC05YS1mXSpcJCIgYWN0dWFsKQorCUFwcGxpZWQgYXV0b3N0YXNoLgorCVN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkIHJlZnMvaGVhZHMvcmViYXNlZC1mZWF0dXJlLWJyYW5jaC4KKwlFT0YKK30KKworY3JlYXRlX2V4cGVjdGVkX2ZhaWx1cmVfYXBwbHkgKCkgeworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GCisJJChncmVwICJeQ3JlYXRlZCBhdXRvc3Rhc2g6IFswLTlhLWZdWzAtOWEtZl0qXCQiIGFjdHVhbCkKKwlGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi4KKwlBcHBseWluZzogc2Vjb25kIGNvbW1pdAorCUFwcGx5aW5nOiB0aGlyZCBjb21taXQKKwlBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLgorCVlvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guCisJWW91IGNhbiBydW4gImdpdCBzdGFzaCBwb3AiIG9yICJnaXQgc3Rhc2ggZHJvcCIgYXQgYW55IHRpbWUuCisJRU9GCit9CisKK2NyZWF0ZV9leHBlY3RlZF9mYWlsdXJlX21lcmdlICgpIHsKKwljYXQgPmV4cGVjdGVkIDw8LUVPRgorCSQoZ3JlcCAiXkNyZWF0ZWQgYXV0b3N0YXNoOiBbMC05YS1mXVswLTlhLWZdKlwkIiBhY3R1YWwpCisJQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy4KKwlZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLgorCVlvdSBjYW4gcnVuICJnaXQgc3Rhc2ggcG9wIiBvciAiZ2l0IHN0YXNoIGRyb3AiIGF0IGFueSB0aW1lLgorCVN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkIHJlZnMvaGVhZHMvcmViYXNlZC1mZWF0dXJlLWJyYW5jaC4KKwlFT0YKK30KKwordGVzdHJlYmFzZSAoKSB7CisJdHlwZT0kMQorCWRvdGVzdD0kMgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGU6IGRpcnR5IHdvcmt0cmVlLCAtLW5vLWF1dG9zdGFzaCIgJworCQl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaCAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgY2hlY2tvdXQgZmVhdHVyZS1icmFuY2ggJiYKKwkJZWNobyBkaXJ0eSA+PmZpbGUzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSAtLW5vLWF1dG9zdGFzaCB1bnJlbGF0ZWQtb250by1icmFuY2gKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZTogZGlydHkgd29ya3RyZWUsIG5vbi1jb25mbGljdGluZyByZWJhc2UiICcKKwkJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggZmVhdHVyZS1icmFuY2ggJiYKKwkJZWNobyBkaXJ0eSA+PmZpbGUzICYmCisJCWdpdCByZWJhc2UkdHlwZSB1bnJlbGF0ZWQtb250by1icmFuY2ggPmFjdHVhbCAyPiYxICYmCisJCWdyZXAgdW5yZWxhdGVkIGZpbGU0ICYmCisJCWdyZXAgZGlydHkgZmlsZTMgJiYKKwkJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGUgLS1hdXRvc3Rhc2g6IGNoZWNrIG91dHB1dCIgJworCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCXN1ZmZpeD0ke3R5cGUjXCAtLX0gJiYgc3VmZml4PSR7c3VmZml4Oi1hcHBseX0gJiYKKwkJaWYgdGVzdCAke3N1ZmZpeH0gPSAiaW50ZXJhY3RpdmUiOyB0aGVuCisJCQlzdWZmaXg9bWVyZ2UKKwkJZmkgJiYKKwkJY3JlYXRlX2V4cGVjdGVkX3N1Y2Nlc3NfJHN1ZmZpeCAmJgorCQlzZWQgIiRyZW1vdmVfcHJvZ3Jlc3NfcmUiIDxhY3R1YWwgPmFjdHVhbDIgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbDIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZTogZGlydHkgaW5kZXgsIG5vbi1jb25mbGljdGluZyByZWJhc2UiICcKKwkJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggZmVhdHVyZS1icmFuY2ggJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBicmFuY2ggLUQgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCAmJgorCQllY2hvIGRpcnR5ID4+ZmlsZTMgJiYKKwkJZ2l0IGFkZCBmaWxlMyAmJgorCQlnaXQgcmViYXNlJHR5cGUgdW5yZWxhdGVkLW9udG8tYnJhbmNoICYmCisJCWdyZXAgdW5yZWxhdGVkIGZpbGU0ICYmCisJCWdyZXAgZGlydHkgZmlsZTMgJiYKKwkJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGU6IGNvbmZsaWN0aW5nIHJlYmFzZSIgJworCQl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaCAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCWVjaG8gZGlydHkgPj5maWxlMyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgcmVsYXRlZC1vbnRvLWJyYW5jaCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAkZG90ZXN0L2F1dG9zdGFzaCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQlybSAtcmYgJGRvdGVzdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCBmZWF0dXJlLWJyYW5jaAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlOiAtLWNvbnRpbnVlIiAnCisJCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCAtYiByZWJhc2VkLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNoICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1EIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggJiYKKwkJZWNobyBkaXJ0eSA+PmZpbGUzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSByZWxhdGVkLW9udG8tYnJhbmNoICYmCisJCXRlc3RfcGF0aF9pc19maWxlICRkb3Rlc3QvYXV0b3N0YXNoICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCWVjaG8gImNvbmZsaWN0aW5nLXBsdXMtZ29vZGJ5ZSIgPmZpbGUyICYmCisJCWdpdCBhZGQgZmlsZTIgJiYKKwkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICRkb3Rlc3QvYXV0b3N0YXNoICYmCisJCWdyZXAgZGlydHkgZmlsZTMgJiYKKwkJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGU6IC0tc2tpcCIgJworCQl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaCAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCWVjaG8gZGlydHkgPj5maWxlMyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgcmVsYXRlZC1vbnRvLWJyYW5jaCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAkZG90ZXN0L2F1dG9zdGFzaCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQlnaXQgcmViYXNlIC0tc2tpcCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkZG90ZXN0L2F1dG9zdGFzaCAmJgorCQlncmVwIGRpcnR5IGZpbGUzICYmCisJCWdpdCBjaGVja291dCBmZWF0dXJlLWJyYW5jaAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlOiAtLWFib3J0IiAnCisJCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCAtYiByZWJhc2VkLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNoICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1EIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggJiYKKwkJZWNobyBkaXJ0eSA+PmZpbGUzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSByZWxhdGVkLW9udG8tYnJhbmNoICYmCisJCXRlc3RfcGF0aF9pc19maWxlICRkb3Rlc3QvYXV0b3N0YXNoICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCWdpdCByZWJhc2UgLS1hYm9ydCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkZG90ZXN0L2F1dG9zdGFzaCAmJgorCQlncmVwIGRpcnR5IGZpbGUzICYmCisJCWdpdCBjaGVja291dCBmZWF0dXJlLWJyYW5jaAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlOiAtLXF1aXQiICcKKwkJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggZmVhdHVyZS1icmFuY2ggJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBicmFuY2ggLUQgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCAmJgorCQllY2hvIGRpcnR5ID4+ZmlsZTMgJiYKKwkJZ2l0IGRpZmYgPmV4cGVjdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgcmVsYXRlZC1vbnRvLWJyYW5jaCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAkZG90ZXN0L2F1dG9zdGFzaCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQlnaXQgcmViYXNlIC0tcXVpdCAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHN0YXNoIGRyb3AgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgJGRvdGVzdC9hdXRvc3Rhc2ggJiYKKwkJISBncmVwIGRpcnR5IGZpbGUzICYmCisJCWdpdCBzdGFzaCBzaG93IC1wID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCBmZWF0dXJlLWJyYW5jaAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlOiBub24tY29uZmxpY3RpbmcgcmViYXNlLCBjb25mbGljdGluZyBzdGFzaCIgJworCQl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaCAmJgorCQllY2hvIGRpcnR5ID5maWxlNCAmJgorCQlnaXQgYWRkIGZpbGU0ICYmCisJCWdpdCByZWJhc2UkdHlwZSB1bnJlbGF0ZWQtb250by1icmFuY2ggPmFjdHVhbCAyPiYxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICRkb3Rlc3QgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlncmVwIHVucmVsYXRlZCBmaWxlNCAmJgorCQkhIGdyZXAgZGlydHkgZmlsZTQgJiYKKwkJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoICYmCisJCWdpdCBzdGFzaCBwb3AgJiYKKwkJZ3JlcCBkaXJ0eSBmaWxlNAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlOiBjaGVjayBvdXRwdXQgd2l0aCBjb25mbGljdGluZyBzdGFzaCIgJworCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCXN1ZmZpeD0ke3R5cGUjXCAtLX0gJiYgc3VmZml4PSR7c3VmZml4Oi1hcHBseX0gJiYKKwkJaWYgdGVzdCAke3N1ZmZpeH0gPSAiaW50ZXJhY3RpdmUiOyB0aGVuCisJCQlzdWZmaXg9bWVyZ2UKKwkJZmkgJiYKKwkJY3JlYXRlX2V4cGVjdGVkX2ZhaWx1cmVfJHN1ZmZpeCAmJgorCQlzZWQgIiRyZW1vdmVfcHJvZ3Jlc3NfcmUiIDxhY3R1YWwgPmFjdHVhbDIgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbDIKKwknCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZTogZmFzdC1mb3J3YXJkIHJlYmFzZSIgJworCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYmVoaW5kLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNofjEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCBiZWhpbmQtZmVhdHVyZS1icmFuY2ggJiYKKwllY2hvIGRpcnR5ID4+ZmlsZTEgJiYKKwlnaXQgcmViYXNlIGZlYXR1cmUtYnJhbmNoICYmCisJZ3JlcCBkaXJ0eSBmaWxlMSAmJgorCWdpdCBjaGVja291dCBmZWF0dXJlLWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2U6IG5vb3AgcmViYXNlIiAnCisJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBzYW1lLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNoICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBicmFuY2ggLUQgc2FtZS1mZWF0dXJlLWJyYW5jaCAmJgorCWVjaG8gZGlydHkgPj5maWxlMSAmJgorCWdpdCByZWJhc2UgZmVhdHVyZS1icmFuY2ggJiYKKwlncmVwIGRpcnR5IGZpbGUxICYmCisJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoCisnCisKK3Rlc3RyZWJhc2UgIiAtLWFwcGx5IiAuZ2l0L3JlYmFzZS1hcHBseQordGVzdHJlYmFzZSAiIC0tbWVyZ2UiIC5naXQvcmViYXNlLW1lcmdlCit0ZXN0cmViYXNlICIgLS1pbnRlcmFjdGl2ZSIgLmdpdC9yZWJhc2UtbWVyZ2UKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnQgcmViYXNlIC1pIHdpdGggLS1hdXRvc3Rhc2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZWNobyB1bmNvbW1pdHRlZC1jb250ZW50ID5maWxlMCAmJgorCSgKKwkJd3JpdGVfc2NyaXB0IGFib3J0LWVkaXRvci5zaCA8PC1cRU9GICYmCisJCQllY2hvID4iJDEiCisJCUVPRgorCQl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9hYm9ydC1lZGl0b3Iuc2giICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1hdXRvc3Rhc2ggSEVBRF4gJiYKKwkJcm0gLWYgYWJvcnQtZWRpdG9yLnNoCisJKSAmJgorCWVjaG8gdW5jb21taXR0ZWQtY29udGVudCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0b3JlIGF1dG9zdGFzaCBvbiBlZGl0b3IgZmFpbHVyZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwllY2hvIHVuY29tbWl0dGVkLWNvbnRlbnQgPmZpbGUwICYmCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgImZhbHNlIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tYXV0b3N0YXNoIEhFQUReCisJKSAmJgorCWVjaG8gdW5jb21taXR0ZWQtY29udGVudCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc3Rhc2ggaXMgc2F2ZWQgb24gZWRpdG9yIGZhaWx1cmUgd2l0aCBjb25mbGljdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwllY2hvIHVuY29tbWl0dGVkLWNvbnRlbnQgPmZpbGUwICYmCisJKAorCQl3cml0ZV9zY3JpcHQgYWJvcnQtZWRpdG9yLnNoIDw8LVxFT0YgJiYKKwkJCWVjaG8gY29uZmxpY3RpbmctY29udGVudCA+ZmlsZTAKKwkJCWV4aXQgMQorCQlFT0YKKwkJdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvYWJvcnQtZWRpdG9yLnNoIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tYXV0b3N0YXNoIEhFQUReICYmCisJCXJtIC1mIGFib3J0LWVkaXRvci5zaAorCSkgJiYKKwllY2hvIGNvbmZsaWN0aW5nLWNvbnRlbnQgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZTAgJiYKKwlnaXQgY2hlY2tvdXQgZmlsZTAgJiYKKwlnaXQgc3Rhc2ggcG9wICYmCisJZWNobyB1bmNvbW1pdHRlZC1jb250ZW50ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zdGFzaCB3aXRoIGRpcnR5IHN1Ym1vZHVsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgd2l0aC1zdWJtb2R1bGUgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuLyBzdWIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGFkZC1zdWJtb2R1bGUgJiYKKwllY2hvIGNoYW5nZWQgPnN1Yi9maWxlMCAmJgorCWdpdCByZWJhc2UgLWkgLS1hdXRvc3Rhc2ggSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggaXMgbGVmdCBhbG9uZSB3aGVuIHBvc3NpYmxlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHVuY2hhbmdlZC1icmFuY2ggJiYKKwllY2hvIGNoYW5nZWQgPmZpbGUwICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zdGFzaCB1bmNoYW5nZWQtYnJhbmNoICYmCisJdGVzdCBjaGFuZ2VkID0gIiQoY2F0IGZpbGUwKSIgJiYKKwl0ZXN0IHVuY2hhbmdlZC1icmFuY2ggPSAiJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV2ZXIgY2hhbmdlIGFjdGl2ZSBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgLWIgbm90LXRoZS1mZWF0dXJlLWJyYW5jaCB1bnJlbGF0ZWQtb250by1icmFuY2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwllY2hvIGNoYW5nZWQgPmZpbGUwICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zdGFzaCBub3QtdGhlLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNoICYmCisJdGVzdF9jbXBfcmV2IG5vdC10aGUtZmVhdHVyZS1icmFuY2ggdW5yZWxhdGVkLW9udG8tYnJhbmNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQyMS1yZWJhc2UtdG9wb2xvZ3ktbGluZWFyLnNoIGIvdC90MzQyMS1yZWJhc2UtdG9wb2xvZ3ktbGluZWFyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRhOTIwNGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDIxLXJlYmFzZS10b3BvbG9neS1saW5lYXIuc2gKQEAgLTAsMCArMSwzNzggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyByZWJhc2UgdG9wb2xvZ3kgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCisjIGEtLS1iLS0tYworIyAgICAgIFwKKyMgICAgICAgZC0tLWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgYSAmJgorCXRlc3RfY29tbWl0IGIgJiYKKwl0ZXN0X2NvbW1pdCBjICYmCisJZ2l0IGNoZWNrb3V0IGIgJiYKKwl0ZXN0X2NvbW1pdCBkICYmCisJdGVzdF9jb21taXQgZQorJworCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAic2ltcGxlIHJlYmFzZSAkKiIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBjIGUgJiYKKwkJdGVzdF9jbXBfcmV2IGMgSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGUnIGMuLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9oYXZlX3ByZXJlcSAhUkVCQVNFX1AgfHwgdGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYnJhbmNoZXMgYW5kIHJlbW90ZSB0cmFja2luZycgJworCWdpdCB0YWcgLWwgPnRhZ3MgJiYKKwlmb3IgdGFnIGluICQoY2F0IHRhZ3MpCisJZG8KKwkJZ2l0IGJyYW5jaCBicmFuY2gtJHRhZyAkdGFnIHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiAiZmlsZTovLyRQV0QiICYmCisJZ2l0IGZldGNoIG9yaWdpbgorJworCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIGlzIG5vLW9wIGlmIHVwc3RyZWFtIGlzIGFuIGFuY2VzdG9yIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGIgZSAmJgorCQl0ZXN0X2NtcF9yZXYgZSBIRUFECisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC1mIHJld3JpdGVzIGV2ZW4gaWYgdXBzdHJlYW0gaXMgYW4gYW5jZXN0b3IiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLWYgYiBlICYmCisJCXRlc3RfY21wX3JldiAhIGUgSEVBRCAmJgorCQl0ZXN0X2NtcF9yZXYgYiBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2QgZScgYi4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1mb3JrLXBvaW50Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfaGF2ZV9wcmVyZXEgIVJFQkFTRV9QIHx8IHRlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLWYgcmV3cml0ZXMgZXZlbiBpZiByZW1vdGUgdXBzdHJlYW0gaXMgYW4gYW5jZXN0b3IiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLWYgYnJhbmNoLWIgYnJhbmNoLWUgJiYKKwkJdGVzdF9jbXBfcmV2ICEgYnJhbmNoLWUgb3JpZ2luL2JyYW5jaC1lICYmCisJCXRlc3RfY21wX3JldiBicmFuY2gtYiBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2QgZScgYnJhbmNoLWIuLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tZm9yay1wb2ludAordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIGZhc3QtZm9yd2FyZHMgZnJvbSBhbmNlc3RvciBvZiB1cHN0cmVhbSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBlIGIgJiYKKwkJdGVzdF9jbXBfcmV2IGUgSEVBRAorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tZm9yay1wb2ludAordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCisjICAgICAgIGYKKyMgICAgICAvCisjIGEtLS1iLS0tYy0tLWctLS1oCisjICAgICAgXAorIyAgICAgICBkLS0tZ3AtLWkKKyMKKyMgZ3AgPSBjaGVycnktcGlja2VkIGcKKyMgaCA9IHJldmVydGVkIGcKKyMKKyMgUmV2ZXJ0ZWQgcGF0Y2hlcyBhcmUgdGhlcmUgZm9yIHRlc3RzIHRvIGJlIGFibGUgdG8gY2hlY2sgaWYgYSBjb21taXQKKyMgdGhhdCBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZSBhcyBhbm90aGVyIGNvbW1pdCBpcworIyBkcm9wcGVkLiBXaXRob3V0IHJldmVydGVkIGNvbW1pdHMsIHdlIGNvdWxkIGdldCBmYWxzZSBwb3NpdGl2ZXMKKyMgYmVjYXVzZSBhcHBseWluZyB0aGUgcGF0Y2ggc3VjY2VlZHMsIGJ1dCBzaW1wbHkgcmVzdWx0cyBpbiBubworIyBjaGFuZ2VzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb2YgbGluZWFyIGhpc3RvcnkgZm9yIHJhbmdlIHNlbGVjdGlvbiB0ZXN0cycgJworCWdpdCBjaGVja291dCBjICYmCisJdGVzdF9jb21taXQgZyAmJgorCXJldmVydCBoIGcgJiYKKwlnaXQgY2hlY2tvdXQgZCAmJgorCWNoZXJyeV9waWNrIGdwIGcgJiYKKwl0ZXN0X2NvbW1pdCBpICYmCisJZ2l0IGNoZWNrb3V0IGIgJiYKKwl0ZXN0X2NvbW1pdCBmCisnCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogZHJvcHMgcGF0Y2hlcyBpbiB1cHN0cmVhbSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBoIGkgJiYKKwkJdGVzdF9jbXBfcmV2IGggSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGknIGguLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9oYXZlX3ByZXJlcSAhUkVCQVNFX1AgfHwgdGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiBjYW4gZHJvcCBsYXN0IHBhdGNoIGlmIGluIHVwc3RyZWFtIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGggZ3AgJiYKKwkJdGVzdF9jbXBfcmV2IGggSEVBRF4gJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2QnIGguLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9oYXZlX3ByZXJlcSAhUkVCQVNFX1AgfHwgdGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiAtLW9udG8gZHJvcHMgcGF0Y2hlcyBpbiB1cHN0cmVhbSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiAtLW9udG8gZiBoIGkgJiYKKwkJdGVzdF9jbXBfcmV2IGYgSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGknIGYuLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9oYXZlX3ByZXJlcSAhUkVCQVNFX1AgfHwgdGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiAtLW9udG8gZG9lcyBub3QgZHJvcCBwYXRjaGVzIGluIG9udG8iICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLS1vbnRvIGggZiBpICYmCisJCXRlc3RfY21wX3JldiBoIEhFQUR+MyAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnZCBncCBpJyBoLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtLWFwcGx5Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfaGF2ZV9wcmVyZXEgIVJFQkFTRV9QIHx8IHRlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1wCisKKyMgYS0tLWItLS1jLS0taiEKKyMgICAgICBcCisjICAgICAgIGQtLS1rIS0tbAorIworIyAhID0gZW1wdHkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9mIGxpbmVhciBoaXN0b3J5IGZvciBlbXB0eSBjb21taXQgdGVzdHMnICcKKwlnaXQgY2hlY2tvdXQgYyAmJgorCW1ha2VfZW1wdHkgaiAmJgorCWdpdCBjaGVja291dCBkICYmCisJbWFrZV9lbXB0eSBrICYmCisJdGVzdF9jb21taXQgbAorJworCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIGtlZXBzIGJlZ2luLWVtcHR5IGNvbW1pdHMiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogaiBsICYmCisJCXRlc3RfY21wX3JldiBjIEhFQUR+NCAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnaiBkIGsgbCcgYy4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIGZhaWx1cmUgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC0tbm8ta2VlcC1lbXB0eSBkcm9wcyBiZWdpbi1lbXB0eSBjb21taXRzIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIC0tbm8ta2VlcC1lbXB0eSBjIGwgJiYKKwkJdGVzdF9jbXBfcmV2IGMgSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGwnIGMuLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9oYXZlX3ByZXJlcSAhUkVCQVNFX1AgfHwgdGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiAtLWtlZXAtZW1wdHkga2VlcHMgZW1wdHkgZXZlbiBpZiBhbHJlYWR5IGluIHVwc3RyZWFtIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIC0ta2VlcC1lbXB0eSBqIGwgJiYKKwkJdGVzdF9jbXBfcmV2IGogSEVBRH4zICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGsgbCcgai4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1yZWJhc2UtbWVyZ2VzCisKKyMgICAgICAgbQorIyAgICAgIC8KKyMgYS0tLWItLS1jLS0tZworIworIyB4LS0teS0tLWJwCisjCisjIGJwID0gY2hlcnJ5LXBpY2tlZCBiCisjIG0gPSByZXZlcnRlZCBiCisjCisjIFJldmVydGVkIHBhdGNoZXMgYXJlIHRoZXJlIGZvciB0ZXN0cyB0byBiZSBhYmxlIHRvIGNoZWNrIGlmIGEgY29tbWl0CisjIHRoYXQgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2UgYXMgYW5vdGhlciBjb21taXQgaXMKKyMgZHJvcHBlZC4gV2l0aG91dCByZXZlcnRlZCBjb21taXRzLCB3ZSBjb3VsZCBnZXQgZmFsc2UgcG9zaXRpdmVzCisjIGJlY2F1c2UgYXBwbHlpbmcgdGhlIHBhdGNoIHN1Y2NlZWRzLCBidXQgc2ltcGx5IHJlc3VsdHMgaW4gbm8KKyMgY2hhbmdlcy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9mIGxpbmVhciBoaXN0b3J5IGZvciB0ZXN0IGludm9sdmluZyByb290JyAnCisJZ2l0IGNoZWNrb3V0IGIgJiYKKwlyZXZlcnQgbSBiICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGRpc2pvaW50ICYmCisJZ2l0IHJtIC1yZiAuICYmCisJdGVzdF9jb21taXQgeCAmJgorCXRlc3RfY29tbWl0IHkgJiYKKwljaGVycnlfcGljayBicCBiCisnCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLS1vbnRvIC0tcm9vdCIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiAtLW9udG8gYyAtLXJvb3QgeSAmJgorCQl0ZXN0X2NtcF9yZXYgYyBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ3ggeScgYy4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIHdpdGhvdXQgLS1vbnRvIC0tcm9vdCB3aXRoIGRpc2pvaW50IGhpc3RvcnkiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogYyB5ICYmCisJCXRlc3RfY21wX3JldiBjIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAneCB5JyBjLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtLWFwcGx5Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfaGF2ZV9wcmVyZXEgIVJFQkFTRV9QIHx8IHRlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLS1vbnRvIC0tcm9vdCBkcm9wcyBwYXRjaCBpbiBvbnRvIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIC0tb250byBtIC0tcm9vdCBicCAmJgorCQl0ZXN0X2NtcF9yZXYgbSBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ3ggeScgbS4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC0tb250byAtLXJvb3Qgd2l0aCBtZXJnZS1iYXNlIGRvZXMgbm90IGdvIHRvIHJvb3QiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLS1vbnRvIG0gLS1yb290IGcgJiYKKwkJdGVzdF9jbXBfcmV2IG0gSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdjIGcnIG0uLgorCSIKK30KKwordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIHdpdGhvdXQgLS1vbnRvIC0tcm9vdCB3aXRoIGRpc2pvaW50IGhpc3RvcnkgZHJvcHMgcGF0Y2ggaW4gb250byIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBtIGJwICYmCisJCXRlc3RfY21wX3JldiBtIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAneCB5JyBtLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtLWFwcGx5Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfaGF2ZV9wcmVyZXEgIVJFQkFTRV9QIHx8IHRlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLS1yb290IG9uIGxpbmVhciBoaXN0b3J5IGlzIGEgbm8tb3AiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLS1yb290IGMgJiYKKwkJdGVzdF9jbXBfcmV2IGMgSEVBRAorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICcnCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfaGF2ZV9wcmVyZXEgIVJFQkFTRV9QIHx8IHRlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLWYgLS1yb290IG9uIGxpbmVhciBoaXN0b3J5IGNhdXNlcyByZS13cml0ZSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiAtZiAtLXJvb3QgYyAmJgorCQl0ZXN0X2NtcF9yZXYgISBhIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnYSBiIGMnIEhFQUQKKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnJwordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MjItcmViYXNlLWluY29tcGF0aWJsZS1vcHRpb25zLnNoIGIvdC90MzQyMi1yZWJhc2UtaW5jb21wYXRpYmxlLW9wdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTBlNzk2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MjItcmViYXNlLWluY29tcGF0aWJsZS1vcHRpb25zLnNoCkBAIC0wLDAgKzEsNzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGlmIHJlYmFzZSBkZXRlY3RzIGFuZCBhYm9ydHMgb24gaW5jb21wYXRpYmxlIG9wdGlvbnMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X3NlcSAyIDkgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSBvcmlnICYmCisKKwlnaXQgYnJhbmNoIEEgJiYKKwlnaXQgYnJhbmNoIEIgJiYKKworCWdpdCBjaGVja291dCBBICYmCisJdGVzdF9zZXEgMSA5ID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gQSAmJgorCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwllY2hvICJxIHFmb28oKTsiIHwgcV90b190YWIgPj5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gQgorJworCisjCisjIFJlYmFzZSBoYXMgbG90cyBvZiB1c2VmdWwgb3B0aW9ucyBsaWtlIC0td2hpdGVwc2FjZT1maXgsIHdoaWNoIGFyZQorIyBhY3R1YWxseSBhbGwgYnVpbHQgaW4gdGVybXMgb2YgZmxhZ3MgdG8gZ2l0LWFtLiAgU2luY2UgbmVpdGhlcgorIyAtLW1lcmdlIG5vciAtLWludGVyYWN0aXZlIChub3IgYW55IG9wdGlvbnMgdGhhdCBpbXBseSB0aG9zZSB0d28pIHVzZQorIyBnaXQtYW0sIHVzaW5nIHRoZW0gdG9nZXRoZXIgd2lsbCByZXN1bHQgaW4gZmxhZ3MgbGlrZSAtLXdoaXRlc3BhY2U9Zml4CisjIGJlaW5nIGlnbm9yZWQuICBNYWtlIHN1cmUgcmViYXNlIHdhcm5zIHRoZSB1c2VyIGFuZCBhYm9ydHMgaW5zdGVhZC4KKyMKKwordGVzdF9yZWJhc2VfYW1fb25seSAoKSB7CisJb3B0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkb3B0IGluY29tcGF0aWJsZSB3aXRoIC0tbWVyZ2UiICIKKwkJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlICRvcHQgLS1tZXJnZSBBCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG9wdCBpbmNvbXBhdGlibGUgd2l0aCAtLXN0cmF0ZWd5PW91cnMiICIKKwkJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlICRvcHQgLS1zdHJhdGVneT1vdXJzIEEKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkb3B0IGluY29tcGF0aWJsZSB3aXRoIC0tc3RyYXRlZ3ktb3B0aW9uPW91cnMiICIKKwkJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlICRvcHQgLS1zdHJhdGVneS1vcHRpb249b3VycyBBCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG9wdCBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlIiAiCisJCWdpdCBjaGVja291dCBCXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAkb3B0IC0taW50ZXJhY3RpdmUgQQorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRvcHQgaW5jb21wYXRpYmxlIHdpdGggLS1leGVjIiAiCisJCWdpdCBjaGVja291dCBCXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAkb3B0IC0tZXhlYyAndHJ1ZScgQQorCSIKKworfQorCit0ZXN0X3JlYmFzZV9hbV9vbmx5IC0td2hpdGVzcGFjZT1maXgKK3Rlc3RfcmViYXNlX2FtX29ubHkgLS1pZ25vcmUtd2hpdGVzcGFjZQordGVzdF9yZWJhc2VfYW1fb25seSAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlCit0ZXN0X3JlYmFzZV9hbV9vbmx5IC1DNAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QICctLXByZXNlcnZlLW1lcmdlcyBpbmNvbXBhdGlibGUgd2l0aCAtLXNpZ25vZmYnICcKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyAtLXNpZ25vZmYgQQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QIFwKKwknLS1wcmVzZXJ2ZS1tZXJnZXMgaW5jb21wYXRpYmxlIHdpdGggLS1yZWJhc2UtbWVyZ2VzJyAnCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgLS1yZWJhc2UtbWVyZ2VzIEEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDIzLXJlYmFzZS1yZXdvcmQuc2ggYi90L3QzNDIzLXJlYmFzZS1yZXdvcmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjk2Mzc1MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MjMtcmViYXNlLXJld29yZC5zaApAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSBpbnRlcmFjdGl2ZSB3aXRoIHJld29yZGluZycKKworLiAuL3Rlc3QtbGliLnNoCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IG1hc3RlciBmaWxlLTEgdGVzdCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHN0dWZmICYmCisKKwl0ZXN0X2NvbW1pdCBmZWF0dXJlX2EgZmlsZS0yIGFhYSAmJgorCXRlc3RfY29tbWl0IGZlYXR1cmVfYiBmaWxlLTIgZGRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld29yZCB3aXRob3V0IGlzc3VlcyBmdW5jdGlvbnMgYXMgaW50ZW5kZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlc2V0X3JlYmFzZSIgJiYKKworCWdpdCBjaGVja291dCBzdHVmZl4wICYmCisKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlGQUtFX0xJTkVTPSJwaWNrIDEgcmV3b3JkIDIiIEZBS0VfQ09NTUlUX01FU1NBR0U9ImZlYXR1cmVfYl9yZXdvcmRlZCIgXAorCQlnaXQgcmViYXNlIC1pIC12IG1hc3RlciAmJgorCisJdGVzdCAiJChnaXQgbG9nIC0xIC0tZm9ybWF0PSVCKSIgPSAiZmVhdHVyZV9iX3Jld29yZGVkIiAmJgorCXRlc3QgJChnaXQgcmV2LWxpc3QgLS1jb3VudCBIRUFEKSA9IDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3b3JkIGFmdGVyIGEgY29uZmxpY3QgcHJlc2VydmVzIGNvbW1pdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVzZXRfcmViYXNlIiAmJgorCisJZ2l0IGNoZWNrb3V0IHN0dWZmXjAgJiYKKworCXNldF9mYWtlX2VkaXRvciAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSJyZXdvcmQgMiIgXAorCQlnaXQgcmViYXNlIC1pIC12IG1hc3RlciAmJgorCisJZ2l0IGNoZWNrb3V0IC0tdGhlaXJzIGZpbGUtMiAmJgorCWdpdCBhZGQgZmlsZS0yICYmCisJRkFLRV9DT01NSVRfTUVTU0FHRT0iZmVhdHVyZV9iX3Jld29yZGVkIiBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKworCXRlc3QgIiQoZ2l0IGxvZyAtMSAtLWZvcm1hdD0lQikiID0gImZlYXR1cmVfYl9yZXdvcmRlZCIgJiYKKwl0ZXN0ICQoZ2l0IHJldi1saXN0IC0tY291bnQgSEVBRCkgPSAyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQyNC1yZWJhc2UtZW1wdHkuc2ggYi90L3QzNDI0LXJlYmFzZS1lbXB0eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZTEwNDVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQyNC1yZWJhc2UtZW1wdHkuc2gKQEAgLTAsMCArMSwxNzAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIG9mIGNvbW1pdHMgdGhhdCBzdGFydCBvciBiZWNvbWUgZW1wdHknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0IHJlcG9zaXRvcnknICcKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgOCA5IDEwID5udW1iZXJzICYmCisJdGVzdF93cml0ZV9saW5lcyBBIEIgQyBEIEUgRiBHIEggSSBKID5sZXR0ZXJzICYmCisJZ2l0IGFkZCBudW1iZXJzIGxldHRlcnMgJiYKKwlnaXQgY29tbWl0IC1tIEEgJiYKKworCWdpdCBicmFuY2ggdXBzdHJlYW0gJiYKKwlnaXQgYnJhbmNoIGxvY2FsbW9kcyAmJgorCisJZ2l0IGNoZWNrb3V0IHVwc3RyZWFtICYmCisJdGVzdF93cml0ZV9saW5lcyBBIEIgQyBEIEUgPmxldHRlcnMgJiYKKwlnaXQgYWRkIGxldHRlcnMgJiYKKwlnaXQgY29tbWl0IC1tIEIgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCBmaXZlIDYgNyA4IDkgdGVuID5udW1iZXJzICYmCisJZ2l0IGFkZCBudW1iZXJzICYmCisJZ2l0IGNvbW1pdCAtbSBDICYmCisKKwlnaXQgY2hlY2tvdXQgbG9jYWxtb2RzICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IGZpdmUgNiA3IDggOSAxMCA+bnVtYmVycyAmJgorCWdpdCBhZGQgbnVtYmVycyAmJgorCWdpdCBjb21taXQgLW0gQzIgJiYKKworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBEICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEEgQiBDIEQgRSA+bGV0dGVycyAmJgorCWdpdCBhZGQgbGV0dGVycyAmJgorCWdpdCBjb21taXQgLW0gIkZpdmUgbGV0dGVycyBvdWdodCB0byBiZSBlbm91Z2ggZm9yIGFueWJvZHkiCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3JlYmFzZSAoYXBwbHktYmFja2VuZCknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlnaXQgY2hlY2tvdXQgLUIgdGVzdGluZyBsb2NhbG1vZHMgJiYKKwkjIHJlYmFzZSAoLS1hcHBseSkgc2hvdWxkIG5vdCBkcm9wIGNvbW1pdHMgdGhhdCBzdGFydCBlbXB0eQorCWdpdCByZWJhc2UgLS1hcHBseSB1cHN0cmVhbSAmJgorCisJdGVzdF93cml0ZV9saW5lcyBEIEMgQiBBID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIC0tZW1wdHk9ZHJvcCcgJworCWdpdCBjaGVja291dCAtQiB0ZXN0aW5nIGxvY2FsbW9kcyAmJgorCWdpdCByZWJhc2UgLS1tZXJnZSAtLWVtcHR5PWRyb3AgdXBzdHJlYW0gJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgRCBDIEIgQSA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSB1c2VzIGRlZmF1bHQgb2YgLS1lbXB0eT1kcm9wJyAnCisJZ2l0IGNoZWNrb3V0IC1CIHRlc3RpbmcgbG9jYWxtb2RzICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIHVwc3RyZWFtICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEQgQyBCIEEgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2UgLS1lbXB0eT1rZWVwJyAnCisJZ2l0IGNoZWNrb3V0IC1CIHRlc3RpbmcgbG9jYWxtb2RzICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIC0tZW1wdHk9a2VlcCB1cHN0cmVhbSAmJgorCisJdGVzdF93cml0ZV9saW5lcyBEIEMyIEMgQiBBID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIC0tZW1wdHk9YXNrJyAnCisJZ2l0IGNoZWNrb3V0IC1CIHRlc3RpbmcgbG9jYWxtb2RzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW1lcmdlIC0tZW1wdHk9YXNrIHVwc3RyZWFtICYmCisKKwlnaXQgcmViYXNlIC0tc2tpcCAmJgorCisJdGVzdF93cml0ZV9saW5lcyBEIEMgQiBBID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWludGVyYWN0aXZlIC0tZW1wdHk9ZHJvcCcgJworCWdpdCBjaGVja291dCAtQiB0ZXN0aW5nIGxvY2FsbW9kcyAmJgorCWdpdCByZWJhc2UgLS1pbnRlcmFjdGl2ZSAtLWVtcHR5PWRyb3AgdXBzdHJlYW0gJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgRCBDIEIgQSA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1pbnRlcmFjdGl2ZSAtLWVtcHR5PWtlZXAnICcKKwlnaXQgY2hlY2tvdXQgLUIgdGVzdGluZyBsb2NhbG1vZHMgJiYKKwlnaXQgcmViYXNlIC0taW50ZXJhY3RpdmUgLS1lbXB0eT1rZWVwIHVwc3RyZWFtICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEQgQzIgQyBCIEEgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0taW50ZXJhY3RpdmUgLS1lbXB0eT1hc2snICcKKwlnaXQgY2hlY2tvdXQgLUIgdGVzdGluZyBsb2NhbG1vZHMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0taW50ZXJhY3RpdmUgLS1lbXB0eT1hc2sgdXBzdHJlYW0gJiYKKworCWdpdCByZWJhc2UgLS1za2lwICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEQgQyBCIEEgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0taW50ZXJhY3RpdmUgdXNlcyBkZWZhdWx0IG9mIC0tZW1wdHk9YXNrJyAnCisJZ2l0IGNoZWNrb3V0IC1CIHRlc3RpbmcgbG9jYWxtb2RzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWludGVyYWN0aXZlIHVwc3RyZWFtICYmCisKKwlnaXQgcmViYXNlIC0tc2tpcCAmJgorCisJdGVzdF93cml0ZV9saW5lcyBEIEMgQiBBID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIC0tZW1wdHk9ZHJvcCAtLWtlZXAtZW1wdHknICcKKwlnaXQgY2hlY2tvdXQgLUIgdGVzdGluZyBsb2NhbG1vZHMgJiYKKwlnaXQgcmViYXNlIC0tbWVyZ2UgLS1lbXB0eT1kcm9wIC0ta2VlcC1lbXB0eSB1cHN0cmVhbSAmJgorCisJdGVzdF93cml0ZV9saW5lcyBEIEMgQiBBID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIC0tZW1wdHk9ZHJvcCAtLW5vLWtlZXAtZW1wdHknICcKKwlnaXQgY2hlY2tvdXQgLUIgdGVzdGluZyBsb2NhbG1vZHMgJiYKKwlnaXQgcmViYXNlIC0tbWVyZ2UgLS1lbXB0eT1kcm9wIC0tbm8ta2VlcC1lbXB0eSB1cHN0cmVhbSAmJgorCisJdGVzdF93cml0ZV9saW5lcyBDIEIgQSA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSAtLWVtcHR5PWtlZXAgLS1rZWVwLWVtcHR5JyAnCisJZ2l0IGNoZWNrb3V0IC1CIHRlc3RpbmcgbG9jYWxtb2RzICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIC0tZW1wdHk9a2VlcCAtLWtlZXAtZW1wdHkgdXBzdHJlYW0gJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgRCBDMiBDIEIgQSA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSAtLWVtcHR5PWtlZXAgLS1uby1rZWVwLWVtcHR5JyAnCisJZ2l0IGNoZWNrb3V0IC1CIHRlc3RpbmcgbG9jYWxtb2RzICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIC0tZW1wdHk9a2VlcCAtLW5vLWtlZXAtZW1wdHkgdXBzdHJlYW0gJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgQzIgQyBCIEEgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2UgZG9lcyBub3QgbGVhdmUgc3RhdGUgbGF5aW5nIGFyb3VuZCcgJworCWdpdCBjaGVja291dCAtQiB0ZXN0aW5nIGxvY2FsbW9kc34yICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIHVwc3RyZWFtICYmCisKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L0NIRVJSWV9QSUNLX0hFQUQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX01TRworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MjUtcmViYXNlLXRvcG9sb2d5LW1lcmdlcy5zaCBiL3QvdDM0MjUtcmViYXNlLXRvcG9sb2d5LW1lcmdlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNDJmYWE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQyNS1yZWJhc2UtdG9wb2xvZ3ktbWVyZ2VzLnNoCkBAIC0wLDAgKzEsMjYwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmViYXNlIHRvcG9sb2d5IHRlc3RzIHdpdGggbWVyZ2VzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKwordGVzdF9yZXZpc2lvbl9zdWJqZWN0cyAoKSB7CisJZXhwZWN0ZWQ9IiQxIgorCXNoaWZ0CisJc2V0IC0tICQoZ2l0IGxvZyAtLWZvcm1hdD0lcyAtLW5vLXdhbGs9dW5zb3J0ZWQgIiRAIikKKwl0ZXN0ICIkZXhwZWN0ZWQiID0gIiQqIgorfQorCisjIGEtLS1iLS0tLS0tLS0tLS1jCisjICAgICAgXCAgICAgICAgICAgXAorIyAgICAgICBkLS0tLS0tLWUgICBcCisjICAgICAgICBcICAgICAgIFwgICBcCisjICAgICAgICAgbi0tLW8tLS13LS0tdgorIyAgICAgICAgICAgICAgXAorIyAgICAgICAgICAgICAgIHoKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9mIG5vbi1saW5lYXItaGlzdG9yeScgJworCXRlc3RfY29tbWl0IGEgJiYKKwl0ZXN0X2NvbW1pdCBiICYmCisJdGVzdF9jb21taXQgYyAmJgorCWdpdCBjaGVja291dCBiICYmCisJdGVzdF9jb21taXQgZCAmJgorCXRlc3RfY29tbWl0IGUgJiYKKworCWdpdCBjaGVja291dCBjICYmCisJdGVzdF9jb21taXQgZyAmJgorCXJldmVydCBoIGcgJiYKKwlnaXQgY2hlY2tvdXQgZCAmJgorCWNoZXJyeV9waWNrIGdwIGcgJiYKKwl0ZXN0X2NvbW1pdCBpICYmCisJZ2l0IGNoZWNrb3V0IGIgJiYKKwl0ZXN0X2NvbW1pdCBmICYmCisKKwlnaXQgY2hlY2tvdXQgZCAmJgorCXRlc3RfY29tbWl0IG4gJiYKKwl0ZXN0X2NvbW1pdCBvICYmCisJdGVzdF9tZXJnZSB3IGUgJiYKKwl0ZXN0X21lcmdlIHYgYyAmJgorCWdpdCBjaGVja291dCBvICYmCisJdGVzdF9jb21taXQgegorJworCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIGFmdGVyIG1lcmdlIGZyb20gdXBzdHJlYW0iICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogZSB3ICYmCisJCXRlc3RfY21wX3JldiBlIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnbiBvJyBlLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtLWFwcGx5Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCWV4cGVjdGVkPSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogb2Ygbm9uLWxpbmVhciBoaXN0b3J5IGlzIGxpbmVhcml6ZWQgaW4gcGxhY2UiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogZCB3ICYmCisJCXRlc3RfY21wX3JldiBkIEhFQUR+MyAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAiXCciJGV4cGVjdGVkIlwnIiBkLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnbiBvIGUnIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICduIG8gZScgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICduIG8gZScgLWkKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCWV4cGVjdGVkPSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogb2Ygbm9uLWxpbmVhciBoaXN0b3J5IGlzIGxpbmVhcml6ZWQgdXBzdHJlYW0iICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogYyB3ICYmCisJCXRlc3RfY21wX3JldiBjIEhFQUR+NCAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAiXCciJGV4cGVjdGVkIlwnIiBjLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnZCBuIG8gZScgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJ2QgbiBvIGUnIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnZCBuIG8gZScgLWkKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCWV4cGVjdGVkPSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogb2Ygbm9uLWxpbmVhciBoaXN0b3J5IHdpdGggbWVyZ2VzIGFmdGVyIHVwc3RyZWFtIG1lcmdlIGlzIGxpbmVhcml6ZWQiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogYyB2ICYmCisJCXRlc3RfY21wX3JldiBjIEhFQUR+NCAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAiXCciJGV4cGVjdGVkIlwnIiBjLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnZCBuIG8gZScgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJ2QgbiBvIGUnIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnZCBuIG8gZScgLWkKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFJFQkFTRV9QOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCByZWJhc2UgLXAgdGVzdHMsIGFzIGFza2VkIGZvcicKKwl0ZXN0X2RvbmUKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCBpcyBuby1vcCBpbiBub24tbGluZWFyIGhpc3RvcnkiICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIGQgdyAmJgorCXRlc3RfY21wX3JldiB3IEhFQUQKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC1wIGlzIG5vLW9wIHdoZW4gYmFzZSBpbnNpZGUgc2Vjb25kIHBhcmVudCIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgZSB3ICYmCisJdGVzdF9jbXBfcmV2IHcgSEVBRAorIgorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICJyZWJhc2UgLXAgLS1yb290IG9uIG5vbi1saW5lYXIgaGlzdG9yeSBpcyBhIG5vLW9wIiAiCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtcCAtLXJvb3QgdyAmJgorCXRlc3RfY21wX3JldiB3IEhFQUQKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC1wIHJlLWNyZWF0ZXMgbWVyZ2UgZnJvbSBzaWRlIGJyYW5jaCIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgeiB3ICYmCisJdGVzdF9jbXBfcmV2IHogSEVBRF4gJiYKKwl0ZXN0X2NtcF9yZXYgd14yIEhFQUReMgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgLXAgcmUtY3JlYXRlcyBpbnRlcm5hbCBtZXJnZSIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgYyB3ICYmCisJdGVzdF9jbXBfcmV2IGMgSEVBRH40ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMl4gSEVBRH4zICYmCisJdGVzdF9yZXZpc2lvbl9zdWJqZWN0cyAnZCBuIGUgbyB3JyBIRUFEfjMgSEVBRH4yIEhFQUReMiBIRUFEXiBIRUFECisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCBjYW4gcmUtY3JlYXRlIHR3byBicmFuY2hlcyBvbiBvbnRvIiAiCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtcCAtLW9udG8gYyBkIHcgJiYKKwl0ZXN0X2NtcF9yZXYgYyBIRUFEfjMgJiYKKwl0ZXN0X2NtcF9yZXYgYyBIRUFEXjJeICYmCisJdGVzdF9yZXZpc2lvbl9zdWJqZWN0cyAnbiBlIG8gdycgSEVBRH4yIEhFQUReMiBIRUFEXiBIRUFECisiCisKKyMgICAgICAgZgorIyAgICAgIC8KKyMgYS0tLWItLS1jLS0tZy0tLWgKKyMgICAgICBcCisjICAgICAgIGQtLS1ncC0taQorIyAgICAgICAgXCAgICAgICBcCisjICAgICAgICAgZS0tLS0tLS11CisjCisjIGdwID0gY2hlcnJ5LXBpY2tlZCBnCisjIGggPSByZXZlcnRlZCBnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvZiBub24tbGluZWFyLWhpc3RvcnkgZm9yIHBhdGNoLWVxdWl2YWxlbmNlIHRlc3RzJyAnCisJZ2l0IGNoZWNrb3V0IGUgJiYKKwl0ZXN0X21lcmdlIHUgaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgLXAgcmUtY3JlYXRlcyBoaXN0b3J5IGFyb3VuZCBkcm9wcGVkIGNvbW1pdCBtYXRjaGluZyB1cHN0cmVhbSIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgaCB1ICYmCisJdGVzdF9jbXBfcmV2IGggSEVBRH4zICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMl4gSEVBRH4yICYmCisJdGVzdF9yZXZpc2lvbl9zdWJqZWN0cyAnZCBpIGUgdScgSEVBRH4yIEhFQUReMiBIRUFEXiBIRUFECisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCAtLW9udG8gaW4gbWVyZ2VkIGhpc3RvcnkgZHJvcHMgcGF0Y2hlcyBpbiB1cHN0cmVhbSIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgLS1vbnRvIGYgaCB1ICYmCisJdGVzdF9jbXBfcmV2IGYgSEVBRH4zICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMl4gSEVBRH4yICYmCisJdGVzdF9yZXZpc2lvbl9zdWJqZWN0cyAnZCBpIGUgdScgSEVBRH4yIEhFQUReMiBIRUFEXiBIRUFECisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCAtLW9udG8gaW4gbWVyZ2VkIGhpc3RvcnkgZG9lcyBub3QgZHJvcCBwYXRjaGVzIGluIG9udG8iICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIC0tb250byBoIGYgdSAmJgorCXRlc3RfY21wX3JldiBoIEhFQUR+MyAmJgorCXRlc3RfY21wX3JldiBIRUFEXjJ+MiBIRUFEfjIgJiYKKwl0ZXN0X3JldmlzaW9uX3N1YmplY3RzICdkIGdwIGkgZSB1JyBIRUFEfjIgSEVBRF4yXiBIRUFEXjIgSEVBRF4gSEVBRAorIgorCisjIGEtLS1iLS0tYy0tLWctLS1oCisjICAgICAgXAorIyAgICAgICBkLS0tZ3AtLXMKKyMgICAgICAgIFwgICBcIC8KKyMgICAgICAgICBcICAgWAorIyAgICAgICAgICBcIC8gXAorIyAgICAgICAgICAgZS0tLXQKKyMKKyMgZ3AgPSBjaGVycnktcGlja2VkIGcKKyMgaCA9IHJldmVydGVkIGcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9mIG5vbi1saW5lYXItaGlzdG9yeSBmb3IgZHJvcHBpbmcgd2hvbGUgc2lkZScgJworCWdpdCBjaGVja291dCBncCAmJgorCXRlc3RfbWVyZ2UgcyBlICYmCisJZ2l0IGNoZWNrb3V0IGUgJiYKKwl0ZXN0X21lcmdlIHQgZ3AKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAicmViYXNlIC1wIGRyb3BzIG1lcmdlIGNvbW1pdCB3aGVuIGVudGlyZSBmaXJzdC1wYXJlbnQgc2lkZSBpcyBkcm9wcGVkIiAiCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtcCBoIHMgJiYKKwl0ZXN0X2NtcF9yZXYgaCBIRUFEfjIgJiYKKwl0ZXN0X2xpbmVhcl9yYW5nZSAnZCBlJyBoLi4KKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC1wIGRyb3BzIG1lcmdlIGNvbW1pdCB3aGVuIGVudGlyZSBzZWNvbmQtcGFyZW50IHNpZGUgaXMgZHJvcHBlZCIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgaCB0ICYmCisJdGVzdF9jbXBfcmV2IGggSEVBRH4yICYmCisJdGVzdF9saW5lYXJfcmFuZ2UgJ2QgZScgaC4uCisiCisKKyMgYS0tLWItLS1jCisjICAgICAgXAorIyAgICAgICBkLS0tZQorIyAgICAgICAgXCAgIFwKKyMgICAgICAgICBuLS0tcgorIyAgICAgICAgICBcCisjICAgICAgICAgICBvCisjCisjIHIgPSB0cmVlLXNhbWUgd2l0aCBuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvZiBub24tbGluZWFyLWhpc3RvcnkgZm9yIGVtcHR5IGNvbW1pdHMnICcKKwlnaXQgY2hlY2tvdXQgbiAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBlICYmCisJZ2l0IHJlc2V0IG4gLiAmJgorCWdpdCBjb21taXQgLW0gciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2xlYW4gLWYgJiYKKwlnaXQgdGFnIHIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC1wIHJlLWNyZWF0ZXMgZW1wdHkgaW50ZXJuYWwgbWVyZ2UgY29tbWl0IiAiCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtcCBjIHIgJiYKKwl0ZXN0X2NtcF9yZXYgYyBIRUFEfjMgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4yXiBIRUFEfjIgJiYKKwl0ZXN0X3JldmlzaW9uX3N1YmplY3RzICdkIGUgbiByJyBIRUFEfjIgSEVBRF4yIEhFQUReIEhFQUQKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC1wIHJlLWNyZWF0ZXMgZW1wdHkgbWVyZ2UgY29tbWl0IiAiCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtcCBvIHIgJiYKKwl0ZXN0X2NtcF9yZXYgZSBIRUFEXjIgJiYKKwl0ZXN0X2NtcF9yZXYgbyBIRUFEXiAmJgorCXRlc3RfcmV2aXNpb25fc3ViamVjdHMgJ3InIEhFQUQKKyIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDI2LXJlYmFzZS1zdWJtb2R1bGUuc2ggYi90L3QzNDI2LXJlYmFzZS1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTJiYmEwNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MjYtcmViYXNlLXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmViYXNlIGNhbiBoYW5kbGUgc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKworZ2l0X3JlYmFzZSAoKSB7CisJZ2l0IHN0YXR1cyAtc3UgPmV4cGVjdCAmJgorCWxzIC0xcFIgKiA+PmV4cGVjdCAmJgorCWdpdCBjaGVja291dCAtYiBvdXJzIEhFQUQgJiYKKwllY2hvIHggPj5maWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tIGFkZF94ICYmCisJZ2l0IHJldmVydCBIRUFEICYmCisJZ2l0IHN0YXR1cyAtc3UgPmFjdHVhbCAmJgorCWxzIC0xcFIgKiA+PmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmViYXNlICIkMSIKK30KKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXRfcmViYXNlIgorCitnaXRfcmViYXNlX2ludGVyYWN0aXZlICgpIHsKKwlnaXQgc3RhdHVzIC1zdSA+ZXhwZWN0ICYmCisJbHMgLTFwUiAqID4+ZXhwZWN0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIG91cnMgSEVBRCAmJgorCWVjaG8geCA+PmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWdpdCBjb21taXQgLW0gYWRkX3ggJiYKKwlnaXQgcmV2ZXJ0IEhFQUQgJiYKKwlnaXQgc3RhdHVzIC1zdSA+YWN0dWFsICYmCisJbHMgLTFwUiAqID4+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCWVjaG8gImZha2UtZWRpdG9yLnNoIiA+LmdpdC9pbmZvL2V4Y2x1ZGUgJiYKKwlnaXQgcmViYXNlIC1pICIkMSIKK30KKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXRfcmViYXNlX2ludGVyYWN0aXZlIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgaW50ZXJhY3RpdmUgaWdub3JlcyBtb2RpZmllZCBzdWJtb2R1bGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXIgc3ViIiAmJgorCWdpdCBpbml0IHN1YiAmJgorCWdpdCAtQyBzdWIgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIkluaXRpYWwgY29tbWl0IiAmJgorCWdpdCBpbml0IHN1cGVyICYmCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZSBhZGQgLi4vc3ViICYmCisJZ2l0IC1DIHN1cGVyIGNvbmZpZyBzdWJtb2R1bGUuc3ViLmlnbm9yZSBkaXJ0eSAmJgorCT5zdXBlci9mb28gJiYKKwlnaXQgLUMgc3VwZXIgYWRkIGZvbyAmJgorCWdpdCAtQyBzdXBlciBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0IiAmJgorCXRlc3RfY29tbWl0IC1DIHN1cGVyIGEgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdXBlciBiICYmCisJdGVzdF9jb21taXQgLUMgc3VwZXIvc3ViIGMgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlnaXQgLUMgc3VwZXIgcmViYXNlIC1pIEhFQUReXgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MjctcmViYXNlLXN1YnRyZWUuc2ggYi90L3QzNDI3LXJlYmFzZS1zdWJ0cmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc5ZTQzYTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDI3LXJlYmFzZS1zdWJ0cmVlLnNoCkBAIC0wLDAgKzEsMTEwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSB0ZXN0cyBmb3IgLVhzdWJ0cmVlCisKK1RoaXMgdGVzdCBydW5zIGdpdCByZWJhc2UgYW5kIHRlc3RzIHRoZSBzdWJ0cmVlIHN0cmF0ZWd5LgorJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKworY29tbWl0X21lc3NhZ2UoKSB7CisJZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JXMgLTEgIiQxIgorfQorCisjIFRoZXJlIGFyZSBhIGZldyBidWdzIGluIHRoZSByZWJhc2Ugd2l0aCByZWdhcmRzIHRvIHRoZSBzdWJ0cmVlIHN0cmF0ZWd5LCBhbmQKKyMgdGhpcyB0ZXN0IHNjcmlwdCB0cmllcyB0byBkb2N1bWVudCB0aGVtLiAgRmlyc3QsIHRoZSBmb2xsb3dpbmcgY29tbWl0IGhpc3RvcnkKKyMgaXMgZ2VuZXJhdGVkICh0aGUgb25lbGluZXMgYXJlIHNob3duLCB0aW1lIGZsb3dzIGZyb20gbGVmdCB0byByaWdodCk6CisjCisjIG1hc3RlcjEgLSBtYXN0ZXIyIC0gbWFzdGVyMworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIyBSRUFETUUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBZGQgc3VicHJvamVjdCBtYXN0ZXIgLSBtYXN0ZXI0IC0gZmlsZXNfc3VidHJlZS9tYXN0ZXI1CisjCisjIFdoZXJlIHRoZSBtZXJnZSBtb3ZlcyB0aGUgZmlsZXMgbWFzdGVyWzEyM10udCBpbnRvIHRoZSBzdWJkaXJlY3RvcnkKKyMgZmlsZXNfc3VidHJlZS8gYW5kIG1hc3RlcjQgYXMgd2VsbCBhcyBmaWxlc19zdWJ0cmVlL21hc3RlcjUgYWRkIGZpbGVzIHRvIHRoYXQKKyMgZGlyZWN0b3J5IGRpcmVjdGx5LgorIworIyBUaGVuLCBpbiBzdWJzZXF1ZW50IHRlc3QgY2FzZXMsIGBnaXQgZmlsdGVyLWJyYW5jaGAgaXMgdXNlZCB0byBkaXN0aWxsIGp1c3QKKyMgdGhlIGNvbW1pdHMgdGhhdCB0b3VjaCBmaWxlc19zdWJ0cmVlLy4gVG8gZ2l2ZSBpdCBhIGZpbmFsIHByZS1yZWJhc2UgdG91Y2gsCisjIGFuIGVtcHR5IGNvbW1pdCBpcyBhZGRlZCBvbiB0b3AuIFRoZSBwcmUtcmViYXNlIGNvbW1pdCBoaXN0b3J5IGxvb2tzIGxpa2UKKyMgdGhpczoKKyMKKyMgQWRkIHN1YnByb2plY3QgbWFzdGVyIC0gbWFzdGVyNCAtIGZpbGVzX3N1YnRyZWUvbWFzdGVyNSAtIEVtcHR5IGNvbW1pdAorIworIyB3aGVyZSB0aGUgcm9vdCBjb21taXQgYWRkcyB0aHJlZSBmaWxlczogbWFzdGVyMS50LCBtYXN0ZXIyLnQgYW5kIG1hc3RlcjMudC4KKyMKKyMgVGhpcyBjb21taXQgaGlzdG9yeSBpcyB0aGVuIHJlYmFzZWQgb250byBgbWFzdGVyM2Agd2l0aCB0aGUKKyMgYC1Yc3VidHJlZT1maWxlc19zdWJ0cmVlYCBvcHRpb24gaW4gdGhyZWUgZGlmZmVyZW50IHdheXM6CisjCisjIDEuIHVzaW5nIGAtLXByZXNlcnZlLW1lcmdlc2AKKyMgMi4gdXNpbmcgYC0tcHJlc2VydmUtbWVyZ2VzYCBhbmQgLS1rZWVwLWVtcHR5CisjIDMuIHdpdGhvdXQgc3BlY2lmeWluZyBhIHJlYmFzZSBiYWNrZW5kCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgUkVBRE1FICYmCisKKwlnaXQgaW5pdCBmaWxlcyAmJgorCXRlc3RfY29tbWl0IC1DIGZpbGVzIG1hc3RlcjEgJiYKKwl0ZXN0X2NvbW1pdCAtQyBmaWxlcyBtYXN0ZXIyICYmCisJdGVzdF9jb21taXQgLUMgZmlsZXMgbWFzdGVyMyAmJgorCisJOiBwZXJmb3JtIHN1YnRyZWUgbWVyZ2UgaW50byBmaWxlc19zdWJ0cmVlLyAmJgorCWdpdCBmZXRjaCBmaWxlcyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL2ZpbGVzLW1hc3RlciAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIC0tbm8tY29tbWl0IC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyBcCisJCWZpbGVzLW1hc3RlciAmJgorCWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9ZmlsZXNfc3VidHJlZSAtdSBmaWxlcy1tYXN0ZXIgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgc3VicHJvamVjdCBtYXN0ZXIiICYmCisKKwk6IGFkZCB0d28gZXh0cmEgY29tbWl0cyB0byByZWJhc2UgJiYKKwl0ZXN0X2NvbW1pdCAtQyBmaWxlc19zdWJ0cmVlIG1hc3RlcjQgJiYKKwl0ZXN0X2NvbW1pdCBmaWxlc19zdWJ0cmVlL21hc3RlcjUgJiYKKworCWdpdCBjaGVja291dCAtYiB0by1yZWJhc2UgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1uby1kYXRhIEhFQUQgLS0gZmlsZXNfc3VidHJlZS8gfAorCQlzZWQgLWUgInMlXChbMC05YS1mXVx7NDBcfSBcKWZpbGVzX3N1YnRyZWUvJVwxJSIgfAorCQlnaXQgZmFzdC1pbXBvcnQgLS1mb3JjZSAtLXF1aWV0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjb21taXQgLW0gIkVtcHR5IGNvbW1pdCIgLS1hbGxvdy1lbXB0eQorJworCisjIEZBSUxVUkU6IERvZXMgbm90IHByZXNlcnZlIG1hc3RlcjQuCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFJFQkFTRV9QICdSZWJhc2UgLVhzdWJ0cmVlIC0tcHJlc2VydmUtbWVyZ2VzIC0tb250byBjb21taXQnICcKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmViYXNlLXByZXNlcnZlLW1lcmdlcyB0by1yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1Yc3VidHJlZT1maWxlc19zdWJ0cmVlIC0tcHJlc2VydmUtbWVyZ2VzIC0tb250byBmaWxlcy1tYXN0ZXIgbWFzdGVyICYmCisJdmVyYm9zZSB0ZXN0ICIkKGNvbW1pdF9tZXNzYWdlIEhFQUR+KSIgPSAibWFzdGVyNCIgJiYKKwl2ZXJib3NlIHRlc3QgIiQoY29tbWl0X21lc3NhZ2UgSEVBRCkiID0gImZpbGVzX3N1YnRyZWUvbWFzdGVyNSIKKycKKworIyBGQUlMVVJFOiBEb2VzIG5vdCBwcmVzZXJ2ZSBtYXN0ZXI0LgordGVzdF9leHBlY3RfZmFpbHVyZSBSRUJBU0VfUCAnUmViYXNlIC1Yc3VidHJlZSAtLWtlZXAtZW1wdHkgLS1wcmVzZXJ2ZS1tZXJnZXMgLS1vbnRvIGNvbW1pdCcgJworCXJlc2V0X3JlYmFzZSAmJgorCWdpdCBjaGVja291dCAtYiByZWJhc2Uta2VlcC1lbXB0eSB0by1yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1Yc3VidHJlZT1maWxlc19zdWJ0cmVlIC0ta2VlcC1lbXB0eSAtLXByZXNlcnZlLW1lcmdlcyAtLW9udG8gZmlsZXMtbWFzdGVyIG1hc3RlciAmJgorCXZlcmJvc2UgdGVzdCAiJChjb21taXRfbWVzc2FnZSBIRUFEfjIpIiA9ICJtYXN0ZXI0IiAmJgorCXZlcmJvc2UgdGVzdCAiJChjb21taXRfbWVzc2FnZSBIRUFEfikiID0gImZpbGVzX3N1YnRyZWUvbWFzdGVyNSIgJiYKKwl2ZXJib3NlIHRlc3QgIiQoY29tbWl0X21lc3NhZ2UgSEVBRCkiID0gIkVtcHR5IGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmViYXNlIC1Yc3VidHJlZSAtLWVtcHR5PWFzayAtLW9udG8gY29tbWl0JyAnCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZS1vbnRvIHRvLXJlYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLVhzdWJ0cmVlPWZpbGVzX3N1YnRyZWUgLS1lbXB0eT1hc2sgLS1vbnRvIGZpbGVzLW1hc3RlciBtYXN0ZXIgJiYKKwk6IGZpcnN0IHBpY2sgcmVzdWx0cyBpbiBubyBjaGFuZ2VzICYmCisJZ2l0IHJlYmFzZSAtLXNraXAgJiYKKwl2ZXJib3NlIHRlc3QgIiQoY29tbWl0X21lc3NhZ2UgSEVBRH4yKSIgPSAibWFzdGVyNCIgJiYKKwl2ZXJib3NlIHRlc3QgIiQoY29tbWl0X21lc3NhZ2UgSEVBRH4pIiA9ICJmaWxlc19zdWJ0cmVlL21hc3RlcjUiICYmCisJdmVyYm9zZSB0ZXN0ICIkKGNvbW1pdF9tZXNzYWdlIEhFQUQpIiA9ICJFbXB0eSBjb21taXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlYmFzZSAtWHN1YnRyZWUgLS1lbXB0eT1hc2sgLS1yZWJhc2UtbWVyZ2VzIC0tb250byBjb21taXQnICcKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmViYXNlLW1lcmdlcy1vbnRvIHRvLXJlYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLVhzdWJ0cmVlPWZpbGVzX3N1YnRyZWUgLS1lbXB0eT1hc2sgLS1yZWJhc2UtbWVyZ2VzIC0tb250byBmaWxlcy1tYXN0ZXIgLS1yb290ICYmCisJOiBmaXJzdCBwaWNrIHJlc3VsdHMgaW4gbm8gY2hhbmdlcyAmJgorCWdpdCByZWJhc2UgLS1za2lwICYmCisJdmVyYm9zZSB0ZXN0ICIkKGNvbW1pdF9tZXNzYWdlIEhFQUR+MikiID0gIm1hc3RlcjQiICYmCisJdmVyYm9zZSB0ZXN0ICIkKGNvbW1pdF9tZXNzYWdlIEhFQUR+KSIgPSAiZmlsZXNfc3VidHJlZS9tYXN0ZXI1IiAmJgorCXZlcmJvc2UgdGVzdCAiJChjb21taXRfbWVzc2FnZSBIRUFEKSIgPSAiRW1wdHkgY29tbWl0IgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MjgtcmViYXNlLXNpZ25vZmYuc2ggYi90L3QzNDI4LXJlYmFzZS1zaWdub2ZmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2OTkzYjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDI4LXJlYmFzZS1zaWdub2ZmLnNoCkBAIC0wLDAgKzEsODQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIC0tc2lnbm9mZgorCitUaGlzIHRlc3QgcnVucyBnaXQgcmViYXNlIC0tc2lnbm9mZiBhbmQgbWFrZSBzdXJlIHRoYXQgaXQgd29ya3MuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIEEgc2ltcGxlIGZpbGUgdG8gY29tbWl0CitjYXQgPmZpbGUgPDxFT0YKK2EKK0VPRgorCisjIEV4cGVjdGVkIGNvbW1pdCBtZXNzYWdlIGZvciBpbml0aWFsIGNvbW1pdCBhZnRlciByZWJhc2UgLS1zaWdub2ZmCitjYXQgPmV4cGVjdGVkLWluaXRpYWwtc2lnbmVkIDw8RU9GCitJbml0aWFsIGVtcHR5IGNvbW1pdAorCitTaWduZWQtb2ZmLWJ5OiAkKGdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8IHNlZCAtZSAicy8+LiovPi8iKQorRU9GCisKKyMgRXhwZWN0ZWQgY29tbWl0IG1lc3NhZ2UgYWZ0ZXIgcmViYXNlIC0tc2lnbm9mZgorY2F0ID5leHBlY3RlZC1zaWduZWQgPDxFT0YKK2ZpcnN0CisKK1NpZ25lZC1vZmYtYnk6ICQoZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UIHwgc2VkIC1lICJzLz4uKi8+LyIpCitFT0YKKworIyBFeHBlY3RlZCBjb21taXQgbWVzc2FnZSBhZnRlciByZWJhc2Ugd2l0aG91dCAtLXNpZ25vZmYgKG9yIHdpdGggLS1uby1zaWdub2ZmKQorY2F0ID5leHBlY3RlZC11bnNpZ25lZCA8PEVPRgorZmlyc3QKK0VPRgorCisKKyMgV2UgY29uZmlndXJlIGFuIGFsaWFzIHRvIGRvIHRoZSByZWJhc2UgLS1zaWdub2ZmIHNvIHRoYXQKKyMgb24gdGhlIG5leHQgc3VidGVzdCB3ZSBjYW4gc2hvdyB0aGF0IC0tbm8tc2lnbm9mZiBvdmVycmlkZXMgdGhlIGFsaWFzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1zaWdub2ZmIGFkZHMgYSBzaWduLW9mZiBsaW5lJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJJbml0aWFsIGVtcHR5IGNvbW1pdCIgJiYKKwlnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBmaXJzdCAmJgorCWdpdCBjb25maWcgYWxpYXMucmJzICJyZWJhc2UgLS1zaWdub2ZmIiAmJgorCWdpdCByYnMgSEVBRF4gJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXNpZ25lZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbm8tc2lnbm9mZiBkb2VzIG5vdCBhZGQgYSBzaWduLW9mZiBsaW5lJyAnCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJmaXJzdCIgJiYKKwlnaXQgcmJzIC0tbm8tc2lnbm9mZiBIRUFEXiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtdW5zaWduZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWV4ZWMgLS1zaWdub2ZmIGFkZHMgYSBzaWduLW9mZiBsaW5lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBleGVjIiAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZmlyc3QiICYmCisJZ2l0IHJlYmFzZSAtLWV4ZWMgInRvdWNoIGV4ZWMiIC0tc2lnbm9mZiBIRUFEXiAmJgorCXRlc3RfcGF0aF9pc19maWxlIGV4ZWMgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtc2lnbmVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1yb290IC0tc2lnbm9mZiBhZGRzIGEgc2lnbi1vZmYgbGluZScgJworCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZmlyc3QiICYmCisJZ2l0IHJlYmFzZSAtLXJvb3QgLS1rZWVwLWVtcHR5IC0tc2lnbm9mZiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLWUgIjEsL15cJC9kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtaW5pdGlhbC1zaWduZWQgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXNpZ25lZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tc2lnbm9mZiBmYWlscycgJworCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZmlyc3QiICYmCisJZ2l0IHJlYmFzZSAtaSAtLXNpZ25vZmYgSEVBRF4gJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtc2lnbmVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLW0gLS1zaWdub2ZmIGZhaWxzJyAnCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJmaXJzdCIgJiYKKwlnaXQgcmViYXNlIC1tIC0tc2lnbm9mZiBIRUFEXiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1zaWduZWQgYWN0dWFsCisnCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MjktcmViYXNlLWVkaXQtdG9kby5zaCBiL3QvdDM0MjktcmViYXNlLWVkaXQtdG9kby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MDI0ZDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQyOS1yZWJhc2UtZWRpdC10b2RvLnNoCkBAIC0wLDAgKzEsODUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWJhc2Ugc2hvdWxkIHJlcmVhZCB0aGUgdG9kbyBmaWxlIGlmIGFuIGV4ZWMgbW9kaWZpZXMgaXQnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgZmlyc3QgZmlsZSAmJgorCXRlc3RfY29tbWl0IHNlY29uZCBmaWxlICYmCisJdGVzdF9jb21taXQgdGhpcmQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgZXhlYyBtb2RpZmllcyByZWJhc2UtdG9kbycgJworCXRvZG89LmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvICYmCisJZ2l0IHJlYmFzZSBIRUFEIC14ICJlY2hvIGV4ZWMgdG91Y2ggRiA+PiR0b2RvIiAmJgorCXRlc3QgLWUgRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb29zZSBvYmplY3QgY2FjaGUgdnMgcmUtcmVhZGluZyB0b2RvIGxpc3QnICcKKwlHSVRfUkVCQVNFX1RPRE89LmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvICYmCisJZXhwb3J0IEdJVF9SRUJBU0VfVE9ETyAmJgorCXdyaXRlX3NjcmlwdCBhcHBlbmQtdG9kby5zaCA8PC1cRU9TICYmCisJIyBGb3IgdmFsdWVzIDUgYW5kIDYsIHRoaXMgeWllbGRzIFNIQS0xcyB3aXRoIHRoZSBzYW1lIGZpcnN0IHR3byBkaWdpdHMKKwllY2hvICJwaWNrICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IFwKKwkJJChwcmludGYgIiVzXFxuIiBcCisJCQkidHJlZSAkRU1QVFlfVFJFRSIgXAorCQkJImF1dGhvciBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUub3JnPiAkMSArMDAwMCIgXAorCQkJImNvbW1pdHRlciBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUub3JnPiAkMSArMDAwMCIgXAorCQkJIiIgXAorCQkJIiQxIiB8CisJCSAgZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluKSkiID4+JEdJVF9SRUJBU0VfVE9ETworCisJc2hpZnQKKwl0ZXN0IC16ICIkKiIgfHwKKwllY2hvICJleGVjICQwICQqIiA+PiRHSVRfUkVCQVNFX1RPRE8KKwlFT1MKKworCWdpdCByZWJhc2UgSEVBRCAteCAiLi9hcHBlbmQtdG9kby5zaCA1IDYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RvZG8gaXMgcmUtcmVhZCBhZnRlciByZXdvcmQgYW5kIHNxdWFzaCcgJworCXdyaXRlX3NjcmlwdCByZXdvcmQtZWRpdG9yLnNoIDw8LVxFT1MgJiYKKwlHSVRfU0VRVUVOQ0VfRURJVE9SPSJlY2hvIFwiZXhlYyBlY2hvICQoY2F0IGZpbGUpID4+YWN0dWFsXCIgPj4iIFwKKwkJZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbworCUVPUworCisJdGVzdF93cml0ZV9saW5lcyBmaXJzdCB0aGlyZCA+ZXhwZWN0ZWQgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlHSVRfU0VRVUVOQ0VfRURJVE9SPSIkRURJVE9SIiBGQUtFX0xJTkVTPSJyZXdvcmQgMSBzcXVhc2ggMiBmaXh1cCAzIiBcCisJCUdJVF9FRElUT1I9Li9yZXdvcmQtZWRpdG9yLnNoIGdpdCByZWJhc2UgLWkgLS1yb290IHRoaXJkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlLXJlYWRpbmcgdG9kbyBkb2VzbnQgaW50ZXJmZXJlIHdpdGggcmV2ZXJ0IC0tZWRpdCcgJworCWdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKworCWdpdCByZXZlcnQgLS1lZGl0IHRoaXJkIHNlY29uZCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCVJldmVydCAic2Vjb25kIgorCVJldmVydCAidGhpcmQiCisJdGhpcmQKKwlzZWNvbmQKKwlmaXJzdAorCUVPRgorCWdpdCBsb2cgLS1mb3JtYXQ9IiVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1yZWFkaW5nIHRvZG8gZG9lc250IGludGVyZmVyZSB3aXRoIGNoZXJyeS1waWNrIC0tZWRpdCcgJworCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKworCWdpdCBjaGVycnktcGljayAtLWVkaXQgc2Vjb25kIHRoaXJkICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJdGhpcmQKKwlzZWNvbmQKKwlmaXJzdAorCUVPRgorCWdpdCBsb2cgLS1mb3JtYXQ9IiVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MzAtcmViYXNlLW1lcmdlcy5zaCBiL3QvdDM0MzAtcmViYXNlLW1lcmdlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMWJjM2UyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQzMC1yZWJhc2UtbWVyZ2VzLnNoCkBAIC0wLDAgKzEsNDk3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE4IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtaSAtLXJlYmFzZS1tZXJnZXMKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IHJlYmFzZSAiaW50ZXJhY3RpdmVseSIsIHJldGFpbmluZyB0aGUgYnJhbmNoIHN0cnVjdHVyZSBieQorcmVjcmVhdGluZyBtZXJnZSBjb21taXRzLgorCitJbml0aWFsIHNldHVwOgorCisgICAgLS0gQiAtLSAgICAgICAgICAgICAgICAgICAoZmlyc3QpCisgICAvICAgICAgIFwKKyBBIC0gQyAtIEQgLSBFIC0gSCAgICAgICAgICAgIChtYXN0ZXIpCisgICBcICAgIFwgICAgICAgLworICAgIFwgICAgRiAtIEcgICAgICAgICAgICAgICAgKHNlY29uZCkKKyAgICAgXAorICAgICAgQ29uZmxpY3RpbmctRworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWxvZy1ncmFwaC5zaAorCit0ZXN0X2NtcF9ncmFwaCAoKSB7CisJY2F0ID5leHBlY3QgJiYKKwlsaWJfdGVzdF9jbXBfZ3JhcGggLS1ib3VuZGFyeSAtLWZvcm1hdD0lcyAiJEAiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJd3JpdGVfc2NyaXB0IHJlcGxhY2UtZWRpdG9yLnNoIDw8LVxFT0YgJiYKKwltdiAiJDEiICIkKGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBPUklHSU5BTC1UT0RPKSIKKwljcCBzY3JpcHQtZnJvbS1zY3JhdGNoICIkMSIKKwlFT0YKKworCXRlc3RfY29tbWl0IEEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZmlyc3QgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJYj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBDICYmCisJYz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCXRlc3RfY29tbWl0IEQgJiYKKwlkPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IEIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEUgJiYKKwlnaXQgdGFnIC1tIEUgRSAmJgorCWU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2Vjb25kIEMgJiYKKwl0ZXN0X2NvbW1pdCBGICYmCisJZj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCXRlc3RfY29tbWl0IEcgJiYKKwlnPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBHICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBIICYmCisJaD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWdpdCB0YWcgLW0gSCBIICYmCisJZ2l0IGNoZWNrb3V0IEEgJiYKKwl0ZXN0X2NvbW1pdCBjb25mbGljdGluZy1HIEcudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgY29tcGxldGVseSBkaWZmZXJlbnQgc3RydWN0dXJlJyAnCisJY2F0ID5zY3JpcHQtZnJvbS1zY3JhdGNoIDw8LVxFT0YgJiYKKwlsYWJlbCBvbnRvCisKKwkjIG9uZWJyYW5jaAorCXBpY2sgRworCXBpY2sgRAorCWxhYmVsIG9uZWJyYW5jaAorCisJIyBzZWNvbmQKKwlyZXNldCBvbnRvCisJcGljayBCCisJbGFiZWwgc2Vjb25kCisKKwlyZXNldCBvbnRvCisJbWVyZ2UgLUMgSCBzZWNvbmQKKwltZXJnZSBvbmVicmFuY2ggIyBNZXJnZSB0aGUgdG9waWMgYnJhbmNoICdcJydvbmVicmFuY2gnXCcnCisJRU9GCisJdGVzdF9jb25maWcgc2VxdWVuY2UuZWRpdG9yIFwiIiRQV0QiL3JlcGxhY2UtZWRpdG9yLnNoXCIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC1pIC1yIEEgbWFzdGVyICYmCisJdGVzdF9jbXBfZ3JhcGggPDwtXEVPRgorCSogICBNZXJnZSB0aGUgdG9waWMgYnJhbmNoICdcJydvbmVicmFuY2gnXCcnCisJfFwKKwl8ICogRAorCXwgKiBHCisJKiB8ICAgSAorCXxcIFwKKwl8IHwvCisJfC98CisJfCAqIEIKKwl8LworCSogQQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZW5lcmF0ZSBjb3JyZWN0IHRvZG8gbGlzdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWxhYmVsIG9udG8KKworCXJlc2V0IG9udG8KKwlwaWNrICRiIEIKKwlsYWJlbCBFCisKKwlyZXNldCBvbnRvCisJcGljayAkYyBDCisJbGFiZWwgYnJhbmNoLXBvaW50CisJcGljayAkZiBGCisJcGljayAkZyBHCisJbGFiZWwgSAorCisJcmVzZXQgYnJhbmNoLXBvaW50ICMgQworCXBpY2sgJGQgRAorCW1lcmdlIC1DICRlIEUgIyBFCisJbWVyZ2UgLUMgJGggSCAjIEgKKworCUVPRgorCisJZ3JlcCAtdiAiXiMiIDwuZ2l0L09SSUdJTkFMLVRPRE8gPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYHJlc2V0YCByZWZ1c2VzIHRvIG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgcmVmdXNlLXRvLXJlc2V0ICYmCisJdGVzdF9jb21taXQgZG9udC1vdmVyd3JpdGUtdW50cmFja2VkICYmCisJZ2l0IGNoZWNrb3V0IEB7LTF9ICYmCisJOiA+ZG9udC1vdmVyd3JpdGUtdW50cmFja2VkLnQgJiYKKwllY2hvICJyZXNldCByZWZzL3RhZ3MvZG9udC1vdmVyd3JpdGUtdW50cmFja2VkIiA+c2NyaXB0LWZyb20tc2NyYXRjaCAmJgorCXRlc3RfY29uZmlnIHNlcXVlbmNlLmVkaXRvciBcIiIkUFdEIi9yZXBsYWNlLWVkaXRvci5zaFwiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaXIgSEVBRCAmJgorCWdpdCByZWJhc2UgLS1hYm9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgYG1lcmdlIC1DYCB3cml0ZXMgcGF0Y2ggKG1heSBiZSByZXNjaGVkdWxlZCwgdG9vKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3RpbmctbWVyZ2UgQSAmJgorCisJOiBmYWlsIGJlY2F1c2Ugb2YgY29uZmxpY3RpbmcgdW50cmFja2VkIGZpbGUgJiYKKwk+Ry50ICYmCisJZWNobyAibWVyZ2UgLUMgSCBHIiA+c2NyaXB0LWZyb20tc2NyYXRjaCAmJgorCXRlc3RfY29uZmlnIHNlcXVlbmNlLmVkaXRvciBcIiIkUFdEIi9yZXBsYWNlLWVkaXRvci5zaFwiICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaXIgSEVBRCAmJgorCWdyZXAgIl5tZXJnZSAtQyAuKiBHJCIgLmdpdC9yZWJhc2UtbWVyZ2UvZG9uZSAmJgorCWdyZXAgIl5tZXJnZSAtQyAuKiBHJCIgLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWJhc2UtbWVyZ2UvcGF0Y2ggJiYKKworCTogZmFpbCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0ICYmCisJcm0gRy50IC5naXQvcmViYXNlLW1lcmdlL3BhdGNoICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjb25mbGljdGluZy1HICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJISBncmVwICJebWVyZ2UgLUMgLiogRyQiIC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmViYXNlLW1lcmdlL3BhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBgbWVyZ2UgPGJyYW5jaD5gIGRvZXMgbm90IGNyYXNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCWdpdCBjaGVja291dCBjb25mbGljdGluZy1HICYmCisKKwllY2hvICJtZXJnZSBHIiA+c2NyaXB0LWZyb20tc2NyYXRjaCAmJgorCXRlc3RfY29uZmlnIHNlcXVlbmNlLmVkaXRvciBcIiIkUFdEIi9yZXBsYWNlLWVkaXRvci5zaFwiICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaXIgSEVBRCAmJgorCSEgZ3JlcCAiXm1lcmdlIEckIiAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8gJiYKKwlncmVwICJeTWVyZ2UgYnJhbmNoICR7U1F9RyR7U1F9JCIgLmdpdC9yZWJhc2UtbWVyZ2UvbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWZvcndhcmQgbWVyZ2UgLWMgc3RpbGwgcmV3b3JkcycgJworCWdpdCBjaGVja291dCAtYiBmYXN0LWZvcndhcmQtbWVyZ2UtYyBIICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9DT01NSVRfTUVTU0FHRT1lZGl0ZWQgXAorCQkJR0lUX1NFUVVFTkNFX0VESVRPUj0iZWNobyBtZXJnZSAtYyBIIEcgPiIgXAorCQkJZ2l0IHJlYmFzZSAtaXIgQF4KKwkpICYmCisJZWNobyBlZGl0ZWQgPmV4cGVjdGVkICYmCisJZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JUIgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGEgYnJhbmNoIHRpcCB0aGF0IHdhcyBjaGVycnktcGlja2VkIGFscmVhZHknICcKKwlnaXQgY2hlY2tvdXQgLWIgYWxyZWFkeS11cHN0cmVhbSBtYXN0ZXIgJiYKKwliYXNlPSIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisKKwl0ZXN0X2NvbW1pdCBBMSAmJgorCXRlc3RfY29tbWl0IEEyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAkYmFzZSAmJgorCXRlc3RfY29tbWl0IEIxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1tICJNZXJnZSBicmFuY2ggQSIgQTIgJiYKKworCWdpdCBjaGVja291dCAtYiB1cHN0cmVhbS13aXRoLWEyICRiYXNlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIEEyICYmCisKKwlnaXQgY2hlY2tvdXQgYWxyZWFkeS11cHN0cmVhbSAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLWkgLXIgdXBzdHJlYW0td2l0aC1hMiAmJgorCXRlc3RfY21wX2dyYXBoIHVwc3RyZWFtLXdpdGgtYTIuLiA8PC1cRU9GCisJKiAgIE1lcmdlIGJyYW5jaCBBCisJfFwKKwl8ICogQTEKKwkqIHwgQjEKKwl8LworCW8gQTIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IHJlYmFzZSBjb3VzaW5zIHVubGVzcyBhc2tlZCBmb3InICcKKwlnaXQgY2hlY2tvdXQgLWIgY291c2lucyBtYXN0ZXIgJiYKKwliZWZvcmU9IiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC1yIEhFQUReICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgJGJlZm9yZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLS1yZWJhc2UtbWVyZ2VzPXJlYmFzZS1jb3VzaW5zIEhFQUReICYmCisJdGVzdF9jbXBfZ3JhcGggSEVBRF4uLiA8PC1cRU9GCisJKiAgIE1lcmdlIHRoZSB0b3BpYyBicmFuY2ggJ1wnJ29uZWJyYW5jaCdcJycKKwl8XAorCXwgKiBECisJfCAqIEcKKwl8LworCW8gSAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZzL3Jld3JpdHRlbi8qIGlzIHdvcmt0cmVlLWxvY2FsJyAnCisJZ2l0IHdvcmt0cmVlIGFkZCB3dCAmJgorCWNhdCA+d3Qvc2NyaXB0LWZyb20tc2NyYXRjaCA8PC1cRU9GICYmCisJbGFiZWwgeHl6CisJZXhlYyBHSVRfRElSPS4uLy5naXQgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3Jld3JpdHRlbi94eXogPmEgfHwgOgorCWV4ZWMgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3Jld3JpdHRlbi94eXogPmIKKwlFT0YKKworCXRlc3RfY29uZmlnIC1DIHd0IHNlcXVlbmNlLmVkaXRvciBcIiIkUFdEIi9yZXBsYWNlLWVkaXRvci5zaFwiICYmCisJZ2l0IC1DIHd0IHJlYmFzZSAtaSBIRUFEICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHd0L2EgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCAiJChjYXQgd3QvYikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWJvcnQgY2xlYW5zIHVwIHJlZnMvcmV3cml0dGVuJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGFib3J0LWNsZWFucy1yZWZzLXJld3JpdHRlbiBIICYmCisJR0lUX1NFUVVFTkNFX0VESVRPUj0iZWNobyBicmVhayA+PiIgZ2l0IHJlYmFzZSAtaXIgQF4gJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmV3cml0dGVuL29udG8gJiYKKwlnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmV3cml0dGVuL29udG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1xdWl0IGNsZWFucyB1cCByZWZzL3Jld3JpdHRlbicgJworCWdpdCBjaGVja291dCAtYiBxdWl0LWNsZWFucy1yZWZzLXJld3JpdHRlbiBIICYmCisJR0lUX1NFUVVFTkNFX0VESVRPUj0iZWNobyBicmVhayA+PiIgZ2l0IHJlYmFzZSAtaXIgQF4gJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmV3cml0dGVuL29udG8gJiYKKwlnaXQgcmViYXNlIC0tcXVpdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZXdyaXR0ZW4vb250bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LXJld3JpdGUgaG9vayBhbmQgZml4dXBzIHdvcmsgZm9yIG1lcmdlcycgJworCWdpdCBjaGVja291dCAtYiBwb3N0LXJld3JpdGUgSCAmJgorCXRlc3RfY29tbWl0IHNhbWUxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3RfY29tbWl0IHNhbWUyICYmCisJZ2l0IG1lcmdlIC1tICJ0byBmaXggdXAiIHNhbWUxICYmCisJZWNobyBzYW1lIG9sZCBzYW1lIG9sZCA+c2FtZTIudCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1maXh1cCBIRUFEIHNhbWUyLnQgJiYKKwlmaXh1cD0iJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLmdpdC9ob29rcy9wb3N0LXJld3JpdGUiICYmCisJZWNobyAiY2F0ID5hY3R1YWwiIHwgd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcG9zdC1yZXdyaXRlICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC1pIC0tYXV0b3NxdWFzaCAtciBIRUFEXl5eICYmCisJcHJpbnRmICIlcyAlc1xuJXMgJXNcbiVzICVzXG4lcyAlc1xuIiA+ZXhwZWN0ICQoZ2l0IHJldi1wYXJzZSBcCisJCSRmaXh1cF5eMiBIRUFEXjIgXAorCQkkZml4dXBeXiBIRUFEXiBcCisJCSRmaXh1cF4gSEVBRCBcCisJCSRmaXh1cCBIRUFEKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNlIHRvIG1lcmdlIGFuY2VzdG9ycyBvZiBIRUFEJyAnCisJZWNobyAibWVyZ2UgSEVBRF4iID5zY3JpcHQtZnJvbS1zY3JhdGNoICYmCisJdGVzdF9jb25maWcgLUMgd3Qgc2VxdWVuY2UuZWRpdG9yIFwiIiRQV0QiL3JlcGxhY2UtZWRpdG9yLnNoXCIgJiYKKwliZWZvcmU9IiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUQgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCAkYmVmb3JlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jvb3QgY29tbWl0cycgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiB1bnJlbGF0ZWQgJiYKKwkoR0lUX0FVVEhPUl9OQU1FPSJQYXJzbmlwIiBHSVRfQVVUSE9SX0VNQUlMPSJyb290QGV4YW1wbGUuY29tIiBcCisJIHRlc3RfY29tbWl0IHNlY29uZC1yb290KSAmJgorCXRlc3RfY29tbWl0IHRoaXJkLXJvb3QgJiYKKwljYXQgPnNjcmlwdC1mcm9tLXNjcmF0Y2ggPDwtXEVPRiAmJgorCXBpY2sgdGhpcmQtcm9vdAorCWxhYmVsIGZpcnN0LWJyYW5jaAorCXJlc2V0IFtuZXcgcm9vdF0KKwlwaWNrIHNlY29uZC1yb290CisJbWVyZ2UgZmlyc3QtYnJhbmNoICMgTWVyZ2UgdGhlIDNyZCByb290CisJRU9GCisJdGVzdF9jb25maWcgc2VxdWVuY2UuZWRpdG9yIFwiIiRQV0QiL3JlcGxhY2UtZWRpdG9yLnNoXCIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC1pIC0tZm9yY2UtcmViYXNlIC0tcm9vdCAtciAmJgorCXRlc3QgIlBhcnNuaXAiID0gIiQoZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JWFuIEhFQUReKSIgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBzZWNvbmQtcm9vdF4wKSAhPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2Ugc2Vjb25kLXJvb3Q6c2Vjb25kLXJvb3QudCkgPSBcCisJCSQoZ2l0IHJldi1wYXJzZSBIRUFEXjpzZWNvbmQtcm9vdC50KSAmJgorCXRlc3RfY21wX2dyYXBoIEhFQUQgPDwtXEVPRiAmJgorCSogICBNZXJnZSB0aGUgM3JkIHJvb3QKKwl8XAorCXwgKiB0aGlyZC1yb290CisJKiBzZWNvbmQtcm9vdAorCUVPRgorCisJOiBmYXN0IGZvcndhcmQgaWYgcG9zc2libGUgJiYKKwliZWZvcmU9IiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IHNlcXVlbmNlLmVkaXRvciAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLWkgLS1yb290IC1yICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgJGJlZm9yZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhICJtZXJnZSIgaW50byBhIHJvb3QgY29tbWl0IGlzIGEgZmFzdC1mb3J3YXJkJyAnCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPnNjcmlwdC1mcm9tLXNjcmF0Y2ggPDwtRU9GICYmCisJcmVzZXQgW25ldyByb290XQorCW1lcmdlICRoZWFkCisJRU9GCisJdGVzdF9jb25maWcgc2VxdWVuY2UuZWRpdG9yIFwiIiRQV0QiL3JlcGxhY2UtZWRpdG9yLnNoXCIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC1pIC1yIEhFQUReICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgJGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQSByb290IGNvbW1pdCBjYW4gYmUgYSBjb3VzaW4sIHRyZWF0IGl0IHRoYXQgd2F5JyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGtobnVtICYmCisJdGVzdF9jb21taXQgeWFtYSAmJgorCWdpdCBjaGVja291dCAtYiBhc2hlcmFoIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IHNoYW1rYXQgJiYKKwlnaXQgbWVyZ2UgLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIGtobnVtICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtZiAtciBIRUFEXiAmJgorCXRlc3RfY21wX3JldiAhIEhFQUReMiBraG51bSAmJgorCXRlc3RfY21wX2dyYXBoIEhFQUReLi4gPDwtXEVPRiAmJgorCSogICBNZXJnZSBicmFuY2ggJ1wnJ2tobnVtJ1wnJyBpbnRvIGFzaGVyYWgKKwl8XAorCXwgKiB5YW1hCisJbyBzaGFta2F0CisJRU9GCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtLXJlYmFzZS1tZXJnZXM9cmViYXNlLWNvdXNpbnMgSEVBRF4gJiYKKwl0ZXN0X2NtcF9ncmFwaCBIRUFEXi4uIDw8LVxFT0YKKwkqICAgTWVyZ2UgYnJhbmNoICdcJydraG51bSdcJycgaW50byBhc2hlcmFoCisJfFwKKwl8ICogeWFtYQorCXwvCisJbyBzaGFta2F0CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhYmVscyB0aGF0IGFyZSBvYmplY3QgSURzIGFyZSByZXdyaXR0ZW4nICcKKwlnaXQgY2hlY2tvdXQgLWIgdGhpcmQgQiAmJgorCXRlc3RfY29tbWl0IEkgJiYKKwl0aGlyZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbGFiZWxzIG1hc3RlciAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCB0aGlyZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIGNvbW1pdCAnXCcnJHRoaXJkJ1wnJyBpbnRvIGxhYmVscyIgJiYKKwllY2hvIG5vb3AgPnNjcmlwdC1mcm9tLXNjcmF0Y2ggJiYKKwl0ZXN0X2NvbmZpZyBzZXF1ZW5jZS5lZGl0b3IgXCIiJFBXRCIvcmVwbGFjZS1lZGl0b3Iuc2hcIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLWkgLXIgQSAmJgorCWdyZXAgIl5sYWJlbCAkdGhpcmQtIiAuZ2l0L09SSUdJTkFMLVRPRE8gJiYKKwkhIGdyZXAgIl5sYWJlbCAkdGhpcmQkIiAuZ2l0L09SSUdJTkFMLVRPRE8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb2N0b3B1cyBtZXJnZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgdGhyZWUgJiYKKwl0ZXN0X2NvbW1pdCBiZWZvcmUtb2N0b3B1cyAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHR3byBIRUFEXiAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCWdpdCBjaGVja291dCAtYiBvbmUgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoR0lUX0FVVEhPUl9OQU1FPSJIYW5rIiBHSVRfQVVUSE9SX0VNQUlMPSJoYW5rQHNlYS53b3JsZCIgXAorCSBnaXQgbWVyZ2UgLW0gIlTDvG50ZW5mw7xzY2giIHR3byB0aHJlZSkgJiYKKworCTogZmFzdCBmb3J3YXJkIGlmIHBvc3NpYmxlICYmCisJYmVmb3JlPSIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtaSAtciBIRUFEXl4gJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCAkYmVmb3JlICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC1pIC0tZm9yY2UtcmViYXNlIC1yIEhFQUReXiAmJgorCXRlc3QgIkhhbmsiID0gIiQoZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JWFuIEhFQUQpIiAmJgorCXRlc3QgIiRiZWZvcmUiICE9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3RfY21wX2dyYXBoIEhFQUReXi4uIDw8LVxFT0YKKwkqLS4gICBUw7xudGVuZsO8c2NoCisJfFwgXAorCXwgfCAqIHRocmVlCisJfCAqIHwgdHdvCisJfCB8LworCSogLyBvbmUKKwl8LworCW8gYmVmb3JlLW9jdG9wdXMKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCAtLWF1dG9zcXVhc2ggYW5kIC0tZXhlYycgJworCWdpdCBjaGVja291dCAtYiB3aXRoLWV4ZWMgSCAmJgorCWVjaG8gQm9vaCA+Qi50ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWZpeHVwIEIgQi50ICYmCisJd3JpdGVfc2NyaXB0IHNob3cuc2ggPDwtXEVPRiAmJgorCXN1YmplY3Q9IiQoZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JXMgSEVBRCkiCisJY29udGVudD0iJChnaXQgZGlmZiBIRUFEXiEgfCB0YWlsIC1uIDEpIgorCWVjaG8gIiRzdWJqZWN0OiAkY29udGVudCIKKwlFT0YKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC1pciAtLWF1dG9zcXVhc2ggLS1leGVjIC4vc2hvdy5zaCBBID5hY3R1YWwgJiYKKwlncmVwICJCOiArQm9vaCIgYWN0dWFsICYmCisJZ3JlcCAiRTogK0Jvb2giIGFjdHVhbCAmJgorCWdyZXAgIkc6ICtHIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSBhZnRlciByZXNvbHZpbmcgY29uZmxpY3RzIGFmdGVyIGEgbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgLWIgYWxyZWFkeS1oYXMtZyBFICYmCisJZ2l0IGNoZXJyeS1waWNrIEUuLkcgJiYKKwl0ZXN0X2NvbW1pdCBIMiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0cy1pbi1tZXJnZSBIICYmCisJdGVzdF9jb21taXQgSDIgSDIudCBjb25mbGljdHMgSDItY29uZmxpY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1yIGFscmVhZHktaGFzLWcgJiYKKwlncmVwIGNvbmZsaWN0cyBIMi50ICYmCisJZWNobyByZXNvbHZlZCA+SDIudCAmJgorCWdpdCBhZGQgLXUgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReMiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZS1tZXJnZXMgd2l0aCBzdHJhdGVnaWVzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHdpdGgtYS1zdHJhdGVneSBGICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1tICJNZXJnZSBjb25mbGljdGluZy1HIiBjb25mbGljdGluZy1HICYmCisKKwk6IGZpcnN0LCB0ZXN0IHdpdGggYSBtZXJnZSBzdHJhdGVneSBvcHRpb24gJiYKKwlnaXQgcmViYXNlIC1pciAtWHRoZWlycyBHICYmCisJZWNobyBjb25mbGljdGluZy1HID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgRy50ICYmCisKKwk6IG5vdywgdHJ5IHdpdGggYSBtZXJnZSBzdHJhdGVneSBvdGhlciB0aGFuIHJlY3Vyc2l2ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgQHsxfSAmJgorCXdyaXRlX3NjcmlwdCBnaXQtbWVyZ2Utb3ZlcnJpZGUgPDwtXEVPRiAmJgorCWVjaG8gb3ZlcnJpZGRlbiQxID4+Ry50CisJZ2l0IGFkZCBHLnQKKwlFT0YKKwlQQVRIPSIkUFdEOiRQQVRIIiBnaXQgcmViYXNlIC1pciAtcyBvdmVycmlkZSAtWHhvcHQgRyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgRyBvdmVycmlkZGVuLS14b3B0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgRy50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlLW1lcmdlcyB3aXRoIGNvbW1pdCB0aGF0IGNhbiBnZW5lcmF0ZSBiYWQgY2hhcmFjdGVycyBmb3IgZmlsZW5hbWUnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29sb24taW4tbGFiZWwgRSAmJgorCWdpdCBtZXJnZSAtbSAiY29sb246IHRoaXMgc2hvdWxkIHdvcmsiIEcgJiYKKwlnaXQgcmViYXNlIC0tcmViYXNlLW1lcmdlcyAtLWZvcmNlLXJlYmFzZSBFCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlLW1lcmdlcyB3aXRoIG1lc3NhZ2UgbWF0Y2hlZCB3aXRoIG9udG8gbGFiZWwnICcKKwlnaXQgY2hlY2tvdXQgLWIgb250by1sYWJlbCBFICYmCisJZ2l0IG1lcmdlIC1tIG9udG8gRyAmJgorCWdpdCByZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIC0tZm9yY2UtcmViYXNlIEUgJiYKKwl0ZXN0X2NtcF9ncmFwaCA8PC1cRU9GCisJKiAgIG9udG8KKwl8XAorCXwgKiBHCisJfCAqIEYKKwkqIHwgICBFCisJfFwgXAorCXwgKiB8IEIKKwkqIHwgfCBECisJfCB8LworCXwvfAorCSogfCBDCisJfC8KKwkqIEEKKwlFT0YKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDMxLXJlYmFzZS1mb3JrLXBvaW50LnNoIGIvdC90MzQzMS1yZWJhc2UtZm9yay1wb2ludC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNzI1NjI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQzMS1yZWJhc2UtZm9yay1wb2ludC5zaApAQCAtMCwwICsxLDc3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE5IERlbnRvbiBMaXUKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLWZvcmstcG9pbnQgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgQS0tLUItLS1ELS0tRSAgICAobWFzdGVyKQorIyAgICAgIFwKKyMgICAgICAgQyotLS1GLS0tRyAoc2lkZSkKKyMKKyMgQyB3YXMgZm9ybWVybHkgcGFydCBvZiBtYXN0ZXIgYnV0IG1hc3RlciB3YXMgcmV3b3VuZCB0byByZW1vdmUgQworIwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgQSAmJgorCXRlc3RfY29tbWl0IEIgJiYKKwl0ZXN0X2NvbW1pdCBDICYmCisJZ2l0IGJyYW5jaCAtdCBzaWRlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3RfY29tbWl0IEQgJiYKKwl0ZXN0X2NvbW1pdCBFICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCBGICYmCisJdGVzdF9jb21taXQgRworJworCit0ZXN0X3JlYmFzZSAoKSB7CisJZXhwZWN0ZWQ9IiQxIiAmJgorCXNoaWZ0ICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ2l0IHJlYmFzZSAkKiIgIgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCByZXNldCAtLWhhcmQgRSAmJgorCQlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEcgJiYKKwkJZ2l0IHJlYmFzZSAkKiAmJgorCQl0ZXN0X3dyaXRlX2xpbmVzICRleHBlY3RlZCA+ZXhwZWN0ICYmCisJCWdpdCBsb2cgLS1wcmV0dHk9JXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJIgorfQorCit0ZXN0X3JlYmFzZSAnRyBGIEUgRCBCIEEnCit0ZXN0X3JlYmFzZSAnRyBGIEQgQiBBJyAtLW9udG8gRAordGVzdF9yZWJhc2UgJ0cgRiBCIEEnIC0ta2VlcC1iYXNlCit0ZXN0X3JlYmFzZSAnRyBGIEMgRSBEIEIgQScgLS1uby1mb3JrLXBvaW50Cit0ZXN0X3JlYmFzZSAnRyBGIEMgRCBCIEEnIC0tbm8tZm9yay1wb2ludCAtLW9udG8gRAordGVzdF9yZWJhc2UgJ0cgRiBDIEIgQScgLS1uby1mb3JrLXBvaW50IC0ta2VlcC1iYXNlCisKK3Rlc3RfcmViYXNlICdHIEYgRSBEIEIgQScgLS1mb3JrLXBvaW50IHJlZnMvaGVhZHMvbWFzdGVyCit0ZXN0X3JlYmFzZSAnRyBGIEUgRCBCIEEnIC0tZm9yay1wb2ludCBtYXN0ZXIKKwordGVzdF9yZWJhc2UgJ0cgRiBEIEIgQScgLS1mb3JrLXBvaW50IC0tb250byBEIHJlZnMvaGVhZHMvbWFzdGVyCit0ZXN0X3JlYmFzZSAnRyBGIEQgQiBBJyAtLWZvcmstcG9pbnQgLS1vbnRvIEQgbWFzdGVyCisKK3Rlc3RfcmViYXNlICdHIEYgQiBBJyAtLWZvcmstcG9pbnQgLS1rZWVwLWJhc2UgcmVmcy9oZWFkcy9tYXN0ZXIKK3Rlc3RfcmViYXNlICdHIEYgQiBBJyAtLWZvcmstcG9pbnQgLS1rZWVwLWJhc2UgbWFzdGVyCisKK3Rlc3RfcmViYXNlICdHIEYgQyBFIEQgQiBBJyByZWZzL2hlYWRzL21hc3RlcgordGVzdF9yZWJhc2UgJ0cgRiBDIEUgRCBCIEEnIG1hc3RlcgorCit0ZXN0X3JlYmFzZSAnRyBGIEMgRCBCIEEnIC0tb250byBEIHJlZnMvaGVhZHMvbWFzdGVyCit0ZXN0X3JlYmFzZSAnRyBGIEMgRCBCIEEnIC0tb250byBEIG1hc3RlcgorCit0ZXN0X3JlYmFzZSAnRyBGIEMgQiBBJyAtLWtlZXAtYmFzZSByZWZzL2hlYWRzL21hc3RlcgordGVzdF9yZWJhc2UgJ0cgRiBDIEIgQScgLS1rZWVwLWJhc2UgbWFzdGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLS1mb3JrLXBvaW50IHdpdGggYW1iaWdvdXMgcmVmbmFtZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgb25lICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgdGFnIG9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1mb3JrLXBvaW50IC0tb250byBEIG9uZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MzItcmViYXNlLWZhc3QtZm9yd2FyZC5zaCBiL3QvdDM0MzItcmViYXNlLWZhc3QtZm9yd2FyZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZjA0NTJjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQzMi1yZWJhc2UtZmFzdC1mb3J3YXJkLnNoCkBAIC0wLDAgKzEsMTM3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE5IERlbnRvbiBMaXUKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZW5zdXJlIHJlYmFzZSBmYXN0LWZvcndhcmRzIGNvbW1pdHMgd2hlbiBwb3NzaWJsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IEEgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJdGVzdF9jb21taXQgQyAmJgorCXRlc3RfY29tbWl0IEQgJiYKKwlnaXQgY2hlY2tvdXQgLXQgLWIgc2lkZQorJworCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgKCkgeworCXN0YXR1c19uPSIkMSIgJiYKKwlzaGlmdCAmJgorCXdoYXRfbj0iJDEiICYmCisJc2hpZnQgJiYKKwljbXBfbj0iJDEiICYmCisJc2hpZnQgJiYKKwlzdGF0dXNfZj0iJDEiICYmCisJc2hpZnQgJiYKKwl3aGF0X2Y9IiQxIiAmJgorCXNoaWZ0ICYmCisJY21wX2Y9IiQxIiAmJgorCXNoaWZ0ICYmCisJdGVzdF9yZWJhc2Vfc2FtZV9oZWFkXyAkc3RhdHVzX24gJHdoYXRfbiAkY21wX24gMCAiIC0tYXBwbHkiICIkKiIgJiYKKwl0ZXN0X3JlYmFzZV9zYW1lX2hlYWRfICRzdGF0dXNfZiAkd2hhdF9mICRjbXBfZiAwICIgLS1hcHBseSAtLW5vLWZmIiAiJCoiCisJdGVzdF9yZWJhc2Vfc2FtZV9oZWFkXyAkc3RhdHVzX24gJHdoYXRfbiAkY21wX24gMCAiIC0tbWVyZ2UiICIkKiIgJiYKKwl0ZXN0X3JlYmFzZV9zYW1lX2hlYWRfICRzdGF0dXNfZiAkd2hhdF9mICRjbXBfZiAwICIgLS1tZXJnZSAtLW5vLWZmIiAiJCoiCisJdGVzdF9yZWJhc2Vfc2FtZV9oZWFkXyAkc3RhdHVzX24gJHdoYXRfbiAkY21wX24gMSAiIC0tbWVyZ2UiICIkKiIgJiYKKwl0ZXN0X3JlYmFzZV9zYW1lX2hlYWRfICRzdGF0dXNfZiAkd2hhdF9mICRjbXBfZiAxICIgLS1tZXJnZSAtLW5vLWZmIiAiJCoiCit9CisKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZF8gKCkgeworCXN0YXR1cz0iJDEiICYmCisJc2hpZnQgJiYKKwl3aGF0PSIkMSIgJiYKKwlzaGlmdCAmJgorCWNtcD0iJDEiICYmCisJc2hpZnQgJiYKKwlhYmJyZXZpYXRlPSIkMSIgJiYKKwlzaGlmdCAmJgorCWZsYWc9IiQxIgorCXNoaWZ0ICYmCisJaWYgdGVzdCAkYWJicmV2aWF0ZSAtZXEgMQorCXRoZW4KKwkJbXNnPSJnaXQgcmViYXNlJGZsYWcgJCogKHJlYmFzZS5hYmJyZXZpYXRlQ29tbWFuZHMgPSB0cnVlKSB3aXRoICRjaGFuZ2VzIGlzICR3aGF0IHdpdGggJGNtcCBIRUFEIgorCWVsc2UKKwkJbXNnPSJnaXQgcmViYXNlJGZsYWcgJCogd2l0aCAkY2hhbmdlcyBpcyAkd2hhdCB3aXRoICRjbXAgSEVBRCIKKwlmaSAmJgorCXRlc3RfZXhwZWN0XyRzdGF0dXMgIiRtc2ciICIKKwkJaWYgdGVzdCAkYWJicmV2aWF0ZSAtZXEgMQorCQl0aGVuCisJCQl0ZXN0X2NvbmZpZyByZWJhc2UuYWJicmV2aWF0ZUNvbW1hbmRzIHRydWUKKwkJZmkgJiYKKwkJb2xkaGVhZD1cJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAnZ2l0IHJlc2V0IC0taGFyZCBcJG9sZGhlYWQnICYmCisJCWNwIC5naXQvbG9ncy9IRUFEIGV4cGVjdCAmJgorCQlnaXQgcmViYXNlJGZsYWcgJCogPnN0ZG91dCAmJgorCQlpZiB0ZXN0ICR3aGF0ID0gd29yaworCQl0aGVuCisJCQlvbGQ9XCQod2MgLWwgPGV4cGVjdCkgJiYKKwkJCXRlc3RfbGluZV9jb3VudCAnLWd0JyBcJG9sZCAuZ2l0L2xvZ3MvSEVBRAorCQllbGlmIHRlc3QgJHdoYXQgPSBub29wCisJCXRoZW4KKwkJCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2xvZ3MvSEVBRAorCQlmaSAmJgorCQluZXdoZWFkPVwkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJaWYgdGVzdCAkY21wID0gc2FtZQorCQl0aGVuCisJCQl0ZXN0X2NtcF9yZXYgXCRvbGRoZWFkIFwkbmV3aGVhZAorCQllbGlmIHRlc3QgJGNtcCA9IGRpZmYKKwkJdGhlbgorCQkJdGVzdF9jbXBfcmV2ICEgXCRvbGRoZWFkIFwkbmV3aGVhZAorCQlmaQorCSIKK30KKworY2hhbmdlcz0nbm8gY2hhbmdlcycKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgc2FtZQordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBzYW1lIG1hc3RlcgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBkaWZmIC0tb250byBCIEIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgZGlmZiAtLW9udG8gQi4uLiBCCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIHNhbWUgLS1vbnRvIG1hc3Rlci4uLiBtYXN0ZXIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgc2FtZSAtLWtlZXAtYmFzZSBtYXN0ZXIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgc2FtZSAtLWtlZXAtYmFzZQordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBzYW1lIC0tbm8tZm9yay1wb2ludAordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBzYW1lIC0ta2VlcC1iYXNlIC0tbm8tZm9yay1wb2ludAordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBzYW1lIC0tZm9yay1wb2ludCBtYXN0ZXIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgZGlmZiAtLWZvcmstcG9pbnQgLS1vbnRvIEIgQgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBkaWZmIC0tZm9yay1wb2ludCAtLW9udG8gQi4uLiBCCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIHNhbWUgLS1mb3JrLXBvaW50IC0tb250byBtYXN0ZXIuLi4gbWFzdGVyCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIHNhbWUgLS1rZWVwLWJhc2UgLS1rZWVwLWJhc2UgbWFzdGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB3b3JrIHNhbWUgdG8gc2lkZScgJworCXRlc3RfY29tbWl0IEUKKycKKworY2hhbmdlcz0nb3VyIGNoYW5nZXMnCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIHNhbWUKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgc2FtZSBtYXN0ZXIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgZGlmZiAtLW9udG8gQiBCCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIGRpZmYgLS1vbnRvIEIuLi4gQgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBzYW1lIC0tb250byBtYXN0ZXIuLi4gbWFzdGVyCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIHNhbWUgLS1rZWVwLWJhc2UgbWFzdGVyCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIHNhbWUgLS1rZWVwLWJhc2UKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgc2FtZSAtLW5vLWZvcmstcG9pbnQKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgc2FtZSAtLWtlZXAtYmFzZSAtLW5vLWZvcmstcG9pbnQKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgc2FtZSAtLWZvcmstcG9pbnQgbWFzdGVyCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIGRpZmYgLS1mb3JrLXBvaW50IC0tb250byBCIEIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgZGlmZiAtLWZvcmstcG9pbnQgLS1vbnRvIEIuLi4gQgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBzYW1lIC0tZm9yay1wb2ludCAtLW9udG8gbWFzdGVyLi4uIG1hc3RlcgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBzYW1lIC0tZm9yay1wb2ludCAtLWtlZXAtYmFzZSBtYXN0ZXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHdvcmsgc2FtZSB0byB1cHN0cmVhbScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBGICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUKKycKKworY2hhbmdlcz0nb3VyIGFuZCB0aGVpciBjaGFuZ2VzJwordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBkaWZmIC0tb250byBCIEIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgZGlmZiAtLW9udG8gQi4uLiBCCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIGRpZmYgLS1vbnRvIG1hc3Rlci4uLiBtYXN0ZXIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgZGlmZiAtLWtlZXAtYmFzZSBtYXN0ZXIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgZGlmZiAtLWtlZXAtYmFzZQordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIGZhaWx1cmUgd29yayBzYW1lIHN1Y2Nlc3Mgd29yayBkaWZmIC0tZm9yay1wb2ludCAtLW9udG8gQiBCCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgZmFpbHVyZSB3b3JrIHNhbWUgc3VjY2VzcyB3b3JrIGRpZmYgLS1mb3JrLXBvaW50IC0tb250byBCLi4uIEIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgZGlmZiAtLWZvcmstcG9pbnQgLS1vbnRvIG1hc3Rlci4uLiBtYXN0ZXIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgZGlmZiAtLWZvcmstcG9pbnQgLS1rZWVwLWJhc2UgbWFzdGVyCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQzMy1yZWJhc2UtYWNyb3NzLW1vZGUtY2hhbmdlLnNoIGIvdC90MzQzMy1yZWJhc2UtYWNyb3NzLW1vZGUtY2hhbmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1ZGY5NjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDMzLXJlYmFzZS1hY3Jvc3MtbW9kZS1jaGFuZ2Uuc2gKQEAgLTAsMCArMSw0OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgYWNyb3NzIG1vZGUgY2hhbmdlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBEUyAmJgorCT5EUy93aGF0ZXZlciAmJgorCWdpdCBhZGQgRFMgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKworCWdpdCBicmFuY2ggc2lkZTEgJiYKKwlnaXQgYnJhbmNoIHNpZGUyICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZTEgJiYKKwlnaXQgcm0gLXJmIERTICYmCisJdGVzdF9sbl9zX2FkZCB1bnJlbGF0ZWQgRFMgJiYKKwlnaXQgY29tbWl0IC1tIHNpZGUxICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZTIgJiYKKwk+dW5yZWxhdGVkICYmCisJZ2l0IGFkZCB1bnJlbGF0ZWQgJiYKKwlnaXQgY29tbWl0IC1tIGNvbW1pdDEgJiYKKworCWVjaG8gPj51bnJlbGF0ZWQgJiYKKwlnaXQgY29tbWl0IC1hbSBjb21taXQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBjaGFuZ2VzIHdpdGggdGhlIGFwcGx5IGJhY2tlbmQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCB8fCB0cnVlIiAmJgorCWdpdCBjaGVja291dCAtYiBhcHBseS1iYWNrZW5kIHNpZGUyICYmCisJZ2l0IHJlYmFzZSBzaWRlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgY2hhbmdlcyB3aXRoIHRoZSBtZXJnZSBiYWNrZW5kJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQgfHwgdHJ1ZSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWVyZ2UtYmFja2VuZCBzaWRlMiAmJgorCWdpdCByZWJhc2UgLW0gc2lkZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGNoYW5nZXMgd2l0aCB0aGUgbWVyZ2UgYmFja2VuZCB3aXRoIGEgZGVsYXknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCB8fCB0cnVlIiAmJgorCWdpdCBjaGVja291dCAtYiBtZXJnZS1kZWxheS1iYWNrZW5kIHNpZGUyICYmCisJZ2l0IHJlYmFzZSAtbSAtLWV4ZWMgInNsZWVwIDEiIHNpZGUxCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQzNC1yZWJhc2UtaTE4bi5zaCBiL3QvdDM0MzQtcmViYXNlLWkxOG4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzdjODM1YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MzQtcmViYXNlLWkxOG4uc2gKQEAgLTAsMCArMSw4NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxOSBEb2FuIFRyYW4gQ29uZyBEYW5oCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYmFzZSB3aXRoIGNoYW5naW5nIGVuY29kaW5nCisKK0luaXRpYWwgc2V0dXA6CisKKzEgLSAyICAgICAgICAgICAgICBtYXN0ZXIKKyBcCisgIDMgLSA0ICAgICAgICAgICAgZmlyc3QKKyAgIFwKKyAgICA1IC0gNiAgICAgICAgICBzZWNvbmQKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK2NvbXBhcmVfbXNnICgpIHsKKwlpY29udiAtZiAiJDIiIC10ICIkMyIgIiRURVNUX0RJUkVDVE9SWS90MzQzNC8kMSIgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+cmF3ICYmCisJc2VkICIxLC9eJC9kIiByYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgb25lICYmCisJZ2l0IGJyYW5jaCBmaXJzdCAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCWdpdCBzd2l0Y2ggZmlyc3QgJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCWdpdCBicmFuY2ggc2Vjb25kICYmCisJdGVzdF9jb21taXQgZm91ciAmJgorCWdpdCBzd2l0Y2ggc2Vjb25kICYmCisJdGVzdF9jb21taXQgZml2ZSAmJgorCXRlc3RfY29tbWl0IHNpeAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIHVwZGF0ZSBlbmNvZGluZyBldWNKUCB0byBVVEYtOCcgJworCWdpdCBzd2l0Y2ggLWMgbWVyZ2UtZXVjSlAtVVRGLTggZmlyc3QgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgZXVjSlAgJiYKKwlnaXQgbWVyZ2UgLUYgIiRURVNUX0RJUkVDVE9SWS90MzQzNC9ldWNKUC50eHQiIHNlY29uZCAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCWdpdCByZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIG1hc3RlciAmJgorCWNvbXBhcmVfbXNnIGV1Y0pQLnR4dCBldWNKUCBVVEYtOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIHVwZGF0ZSBlbmNvZGluZyBldWNKUCB0byBJU08tMjAyMi1KUCcgJworCWdpdCBzd2l0Y2ggLWMgbWVyZ2UtZXVjSlAtSVNPLTIwMjItSlAgZmlyc3QgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgZXVjSlAgJiYKKwlnaXQgbWVyZ2UgLUYgIiRURVNUX0RJUkVDVE9SWS90MzQzNC9ldWNKUC50eHQiIHNlY29uZCAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU08tMjAyMi1KUCAmJgorCWdpdCByZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIG1hc3RlciAmJgorCWNvbXBhcmVfbXNnIGV1Y0pQLnR4dCBldWNKUCBJU08tMjAyMi1KUAorJworCit0ZXN0X3JlYmFzZV9jb250aW51ZV91cGRhdGVfZW5jb2RlICgpIHsKKwlvbGQ9JDEKKwluZXc9JDIKKwltc2dmaWxlPSQzCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC0tY29udGludWUgdXBkYXRlIGZyb20gJG9sZCB0byAkbmV3IiAnCisJCShnaXQgcmViYXNlIC0tYWJvcnQgfHwgOiBhYm9ydCBjdXJyZW50IGdpdC1yZWJhc2UgZmFpbHVyZSkgJiYKKwkJZ2l0IHN3aXRjaCAtYyBjb25mbGljdC0kb2xkLSRuZXcgb25lICYmCisJCWVjaG8gZm9yLWNvbmZsaWN0ID50d28udCAmJgorCQlnaXQgYWRkIHR3by50ICYmCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkb2xkICYmCisJCWdpdCBjb21taXQgLUYgIiRURVNUX0RJUkVDVE9SWS90MzQzNC8kbXNnZmlsZSIgJiYKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICRuZXcgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtbSBtYXN0ZXIgJiYKKwkJdGVzdCAtZiAuZ2l0L3JlYmFzZS1tZXJnZS9tZXNzYWdlICYmCisJCWdpdCBzdHJpcHNwYWNlIDwuZ2l0L3JlYmFzZS1tZXJnZS9tZXNzYWdlID50d28udCAmJgorCQlnaXQgYWRkIHR3by50ICYmCisJCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCQljb21wYXJlX21zZyAkbXNnZmlsZSAkb2xkICRuZXcgJiYKKwkJOiBnaXQtY29tbWl0IGFzc3VtZSBpbnZhbGlkIHV0Zi04IGlzIGxhdGluMSAmJgorCQl0ZXN0X2NtcCBleHBlY3QgdHdvLnQKKwknCit9CisKK3Rlc3RfcmViYXNlX2NvbnRpbnVlX3VwZGF0ZV9lbmNvZGUgSVNPLTg4NTktMSBVVEYtOCBJU084ODU5LTEudHh0Cit0ZXN0X3JlYmFzZV9jb250aW51ZV91cGRhdGVfZW5jb2RlIGV1Y0pQIFVURi04IGV1Y0pQLnR4dAordGVzdF9yZWJhc2VfY29udGludWVfdXBkYXRlX2VuY29kZSBldWNKUCBJU08tMjAyMi1KUCBldWNKUC50eHQKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDM0L0lTTzg4NTktMS50eHQgYi90L3QzNDM0L0lTTzg4NTktMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiZWYwZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MzQvSVNPODg1OS0xLnR4dApAQCAtMCwwICsxLDMgQEAKK8TL0c/WCisKK8Fi52ToZmcKZGlmZiAtLWdpdCBhL3QvdDM0MzQvZXVjSlAudHh0IGIvdC90MzQzNC9ldWNKUC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2ZjJhYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MzQvZXVjSlAudHh0CkBAIC0wLDAgKzEsNCBAQAorpM+k7KTSpNuk1QorCiukt6TGpKSk66TOpKyhoqSkpOukzqTHoaMKK9/Ayc2k26TspNek6qTdpOyk3qTTpLCk6qTtpNihowpkaWZmIC0tZ2l0IGEvdC90MzQzNS1yZWJhc2UtZ3BnLXNpZ24uc2ggYi90L3QzNDM1LXJlYmFzZS1ncGctc2lnbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNDdjNTljCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQzNS1yZWJhc2UtZ3BnLXNpZ24uc2gKQEAgLTAsMCArMSw3MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAyMCBEb2FuIFRyYW4gQ29uZyBEYW5oCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgcmViYXNlIC0tW25vLV1ncGctc2lnbicKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLXJlYmFzZS5zaCIKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItZ3BnLnNoIgorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgR1BHCit0aGVuCisJc2tpcF9hbGw9J3NraXAgYWxsIHRlc3QgcmViYXNlIC0tW25vLV1ncGctc2lnbiwgZ3BnIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorCit0ZXN0X3JlYmFzZV9ncGdfc2lnbiAoKSB7CisJbG9jYWwgbXVzdF9mYWlsPSB3aWxsPXdpbGwgZmFrZV9lZGl0b3I9CisJaWYgdGVzdCAieCQxIiA9ICJ4ISIKKwl0aGVuCisJCW11c3RfZmFpbD10ZXN0X211c3RfZmFpbAorCQl3aWxsPSJ3b24ndCIKKwkJc2hpZnQKKwlmaQorCWNvbmY9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAkKiB3aXRoIGNvbW1pdC5ncGdzaWduPSRjb25mICR3aWxsIHNpZ24gY29tbWl0IiAiCisJCWdpdCByZXNldCB0d28gJiYKKwkJZ2l0IGNvbmZpZyBjb21taXQuZ3Bnc2lnbiAkY29uZiAmJgorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0nciAxIHAgMicgZ2l0IHJlYmFzZSAtLWZvcmNlLXJlYmFzZSAtLXJvb3QgJCogJiYKKwkJJG11c3RfZmFpbCBnaXQgdmVyaWZ5LWNvbW1pdCBIRUFEXiAmJgorCQkkbXVzdF9mYWlsIGdpdCB2ZXJpZnktY29tbWl0IEhFQUQKKwkiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS1jb21taXQgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktY29tbWl0IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBtZXJnZSBjb21taXQnICcKKwl0ZXN0X2NvbW1pdCBmb3JrLXBvaW50ICYmCisJZ2l0IHN3aXRjaCAtYyBzaWRlICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwlnaXQgc3dpdGNoIG1hc3RlciAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIHNpZGUgJiYKKwlnaXQgdGFnIG1lcmdlZAorJworCit0ZXN0X3JlYmFzZV9ncGdfc2lnbiAhIGZhbHNlCit0ZXN0X3JlYmFzZV9ncGdfc2lnbiAgIHRydWUKK3Rlc3RfcmViYXNlX2dwZ19zaWduICEgdHJ1ZSAgLS1uby1ncGctc2lnbgordGVzdF9yZWJhc2VfZ3BnX3NpZ24gISB0cnVlICAtLWdwZy1zaWduIC0tbm8tZ3BnLXNpZ24KK3Rlc3RfcmViYXNlX2dwZ19zaWduICAgZmFsc2UgLS1uby1ncGctc2lnbiAtLWdwZy1zaWduCit0ZXN0X3JlYmFzZV9ncGdfc2lnbiAgIHRydWUgIC1pCit0ZXN0X3JlYmFzZV9ncGdfc2lnbiAhIHRydWUgIC1pIC0tbm8tZ3BnLXNpZ24KK3Rlc3RfcmViYXNlX2dwZ19zaWduICEgdHJ1ZSAgLWkgLS1ncGctc2lnbiAtLW5vLWdwZy1zaWduCit0ZXN0X3JlYmFzZV9ncGdfc2lnbiAgIGZhbHNlIC1pIC0tbm8tZ3BnLXNpZ24gLS1ncGctc2lnbgorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdyZWJhc2UgLXAgLS1uby1ncGctc2lnbiBvdmVycmlkZSBjb21taXQuZ3Bnc2lnbicgJworCWdpdCByZXNldCAtLWhhcmQgbWVyZ2VkICYmCisJZ2l0IGNvbmZpZyBjb21taXQuZ3Bnc2lnbiB0cnVlICYmCisJZ2l0IHJlYmFzZSAtcCAtLW5vLWdwZy1zaWduIC0tb250bz1vbmUgZm9yay1wb2ludCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdmVyaWZ5LWNvbW1pdCBIRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUwMC1jaGVycnkuc2ggYi90L3QzNTAwLWNoZXJyeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMDM4ZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzUwMC1jaGVycnkuc2gKQEAgLTAsMCArMSw1OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBZYW5uIERpcnNvbiwgYmFzZWQgb24gdDM0MDAgYnkgQW1vcyBXYXRlcmxhbmQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNoZXJyeSBzaG91bGQgZGV0ZWN0IHBhdGNoZXMgaW50ZWdyYXRlZCB1cHN0cmVhbQorCitUaGlzIHRlc3QgY2hlcnJ5LXBpY2tzIG9uZSBsb2NhbCBjaGFuZ2Ugb2YgdHdvIGludG8gbWFzdGVyIGJyYW5jaCwgYW5kCitjaGVja3MgdGhhdCBnaXQgY2hlcnJ5IG9ubHkgcmV0dXJucyB0aGUgc2Vjb25kIHBhdGNoIGluIHRoZSBsb2NhbCBicmFuY2gKKycKKy4gLi90ZXN0LWxpYi5zaAorCitHSVRfQVVUSE9SX0VNQUlMPWJvZ3VzX2VtYWlsX2FkZHJlc3MKK2V4cG9ydCBHSVRfQVVUSE9SX0VNQUlMCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIHJlcG9zaXRvcnkgd2l0aCB0b3BpYyBicmFuY2gsIGFuZCBjaGVjayBjaGVycnkgZmluZHMgdGhlIDIgcGF0Y2hlcyBmcm9tIHRoZXJlJyBcCisgICAgJ2VjaG8gRmlyc3QgPiBBICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQSAmJgorICAgICB0ZXN0X3RpY2sgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiQWRkIEEuIiAmJgorCisgICAgIGdpdCBjaGVja291dCAtYiBteS10b3BpYy1icmFuY2ggJiYKKworICAgICBlY2hvIFNlY29uZCA+IEIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBCICYmCisgICAgIHRlc3RfdGljayAmJgorICAgICBnaXQgY29tbWl0IC1tICJBZGQgQi4iICYmCisKKyAgICAgZWNobyBBbm90aGVyU2Vjb25kID4gQyAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEMgJiYKKyAgICAgdGVzdF90aWNrICYmCisgICAgIGdpdCBjb21taXQgLW0gIkFkZCBDLiIgJiYKKworICAgICBnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisgICAgIHJtIC1mIEIgQyAmJgorCisgICAgIGVjaG8gVGhpcmQgPj4gQSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IEEgJiYKKyAgICAgdGVzdF90aWNrICYmCisgICAgIGdpdCBjb21taXQgLW0gIk1vZGlmeSBBLiIgJiYKKworICAgICBleHByICIkKGVjaG8gJChnaXQgY2hlcnJ5IG1hc3RlciBteS10b3BpYy1icmFuY2gpICkiIDogIisgW14gXSogKyAuKiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrIHRoYXQgY2hlcnJ5IHdpdGggbGltaXQgcmV0dXJucyBvbmx5IHRoZSB0b3AgcGF0Y2gnXAorICAgICdleHByICIkKGVjaG8gJChnaXQgY2hlcnJ5IG1hc3RlciBteS10b3BpYy1icmFuY2ggbXktdG9waWMtYnJhbmNoXjEpICkiIDogIisgW14gXSoiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVycnktcGljayBvbmUgb2YgdGhlIDIgcGF0Y2hlcywgYW5kIGNoZWNrIGNoZXJyeSByZWNvZ25pemVkIG9uZSBhbmQgb25seSBvbmUgYXMgbmV3JyBcCisgICAgJ2dpdCBjaGVycnktcGljayBteS10b3BpYy1icmFuY2heMCAmJgorICAgICBlY2hvICQoZ2l0IGNoZXJyeSBtYXN0ZXIgbXktdG9waWMtYnJhbmNoKSAmJgorICAgICBleHByICIkKGVjaG8gJChnaXQgY2hlcnJ5IG1hc3RlciBteS10b3BpYy1icmFuY2gpICkiIDogIisgW14gXSogLSAuKiIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTAxLXJldmVydC1jaGVycnktcGljay5zaCBiL3QvdDM1MDEtcmV2ZXJ0LWNoZXJyeS1waWNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdjMWRhMjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTAxLXJldmVydC1jaGVycnktcGljay5zaApAQCAtMCwwICsxLDE1OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2hlcnJ5LXBpY2sgYW5kIHJldmVydCB3aXRoIHJlbmFtZXMKKworICAtLQorICAgKyByZW5hbWUyOiByZW5hbWVzIG9vcHMgdG8gb3BvcworICArICByZW5hbWUxOiByZW5hbWVzIG9vcHMgdG8gc3BvbworICArICBhZGRlZDogICBhZGRzIGV4dHJhIGxpbmUgdG8gb29wcworICArKyBpbml0aWFsOiBoYXMgbGluZXMgaW4gb29wcworCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWZvciBsIGluIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvCisJZG8KKwkJZWNobyAkbCRsJGwkbCRsJGwkbCRsJGwKKwlkb25lID5vb3BzICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYWRkIG9vcHMgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gIkFkZCBleHRyYSBsaW5lIGF0IHRoZSBlbmQiID4+b29wcyAmJgorCWdpdCBjb21taXQgLWEgLW0gYWRkZWQgJiYKKwlnaXQgdGFnIGFkZGVkICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbXYgb29wcyBzcG9vICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWUxICYmCisJZ2l0IHRhZyByZW5hbWUxICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBpbml0aWFsICYmCisJZ2l0IG12IG9vcHMgb3BvcyAmJgorCWdpdCBjb21taXQgLW0gcmVuYW1lMiAmJgorCWdpdCB0YWcgcmVuYW1lMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtLW5vbnNlbnNlJyAnCisKKwlwb3M9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLW5vbnNlbnNlIDI+bXNnICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRCAiJHBvcyIgJiYKKwl0ZXN0X2kxOG5ncmVwICdbVXVdc2FnZTonIG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgLS1ub25zZW5zZScgJworCisJcG9zPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IC0tbm9uc2Vuc2UgMj5tc2cgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEICIkcG9zIiAmJgorCXRlc3RfaTE4bmdyZXAgJ1tVdV1zYWdlOicgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGFmdGVyIHJlbmFtaW5nIGJyYW5jaCcgJworCisJZ2l0IGNoZWNrb3V0IHJlbmFtZTIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgYWRkZWQgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgPSAkKGdpdCByZXYtcGFyc2UgcmVuYW1lMikgJiYKKwl0ZXN0IC1mIG9wb3MgJiYKKwlncmVwICJBZGQgZXh0cmEgbGluZSBhdCB0aGUgZW5kIiBvcG9zICYmCisJZ2l0IHJlZmxvZyAtMSB8IGdyZXAgY2hlcnJ5LXBpY2sKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgYWZ0ZXIgcmVuYW1pbmcgYnJhbmNoJyAnCisKKwlnaXQgY2hlY2tvdXQgcmVuYW1lMSAmJgorCWdpdCByZXZlcnQgYWRkZWQgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgPSAkKGdpdCByZXYtcGFyc2UgcmVuYW1lMSkgJiYKKwl0ZXN0IC1mIHNwb28gJiYKKwkhIGdyZXAgIkFkZCBleHRyYSBsaW5lIGF0IHRoZSBlbmQiIHNwb28gJiYKKwlnaXQgcmVmbG9nIC0xIHwgZ3JlcCByZXZlcnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBvbiBzdGF0LWRpcnR5IHdvcmtpbmcgdHJlZScgJworCWdpdCBjbG9uZSAuIGNvcHkgJiYKKwkoCisJCWNkIGNvcHkgJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJdGVzdC10b29sIGNobXRpbWUgKzQwIG9vcHMgJiYKKwkJZ2l0IGNoZXJyeS1waWNrIGFkZGVkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgZm9yYmlkZGVuIG9uIGRpcnR5IHdvcmtpbmcgdHJlZScgJworCisJZWNobyBjb250ZW50ID5leHRyYV9maWxlICYmCisJZ2l0IGFkZCBleHRyYV9maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBIRUFEIDI+ZXJyb3JzICYmCisJdGVzdF9pMThuZ3JlcCAieW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIgZXJyb3JzCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgb24gdW5ib3JuIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiB1bmJvcm4gJiYKKwlnaXQgcm0gLS1jYWNoZWQgLXIgLiAmJgorCXJtIC1yZiAqICYmCisJZ2l0IGNoZXJyeS1waWNrIGluaXRpYWwgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IGluaXRpYWwgJiYKKwl0ZXN0X2NtcF9yZXYgISBpbml0aWFsIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgIi0iIHRvIHBpY2sgZnJvbSBwcmV2aW91cyBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgdW5ib3JuICYmCisJdGVzdF9jb21taXQgdG8tcGljayBhY3R1YWwgY29udGVudCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLSAmJgorCWVjaG8gY29udGVudCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAiLSIgaXMgbWVhbmluZ2xlc3Mgd2l0aG91dCBjaGVja291dCcgJworCXRlc3RfY3JlYXRlX3JlcG8gYWZyZXNoICYmCisJKAorCQljZCBhZnJlc2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgIi0iIHdvcmtzIHdpdGggYXJndW1lbnRzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUtYnJhbmNoICYmCisJdGVzdF9jb21taXQgY2hhbmdlIGFjdHVhbCBjaGFuZ2UgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZXJyeS1waWNrIC1zIC0gJiYKKwllY2hvICJTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCBeU2lnbmVkLW9mZi1ieTogPnNpZ25vZmYgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc2lnbm9mZiAmJgorCWVjaG8gY2hhbmdlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIHdvcmtzIHdpdGggZGlydHkgcmVuYW1lZCBmaWxlJyAnCisJdGVzdF9jb21taXQgdG8tcmVuYW1lICYmCisJZ2l0IGNoZWNrb3V0IC1iIHVucmVsYXRlZCAmJgorCXRlc3RfY29tbWl0IHVucmVsYXRlZCAmJgorCWdpdCBjaGVja291dCBAey0xfSAmJgorCWdpdCBtdiB0by1yZW5hbWUudCByZW5hbWVkICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWVkICYmCisJZWNobyBtb2RpZmllZCA+cmVuYW1lZCAmJgorCWdpdCBjaGVycnktcGljayByZWZzL2hlYWRzL3VucmVsYXRlZCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDowOnJlbmFtZWQpID0gJChnaXQgcmV2LXBhcnNlIEhFQUR+Mjp0by1yZW5hbWUudCkgJiYKKwlncmVwIC1xICJebW9kaWZpZWQkIiByZW5hbWVkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUwMi1jaGVycnktcGljay1tZXJnZS5zaCBiL3QvdDM1MDItY2hlcnJ5LXBpY2stbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGI2MzVhMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDItY2hlcnJ5LXBpY2stbWVyZ2Uuc2gKQEAgLTAsMCArMSwxMzIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVycnkgcGlja2luZyBhbmQgcmV2ZXJ0aW5nIGEgbWVyZ2UKKworCQliLS0tYworCSAgICAgICAvICAgLworCWluaXRpYWwtLS1hCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPkEgJiYKKwk+QiAmJgorCWdpdCBhZGQgQSBCICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCIgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwllY2hvIG5ldyBsaW5lID5BICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgdG8gQSIgQSAmJgorCWdpdCB0YWcgYSAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZWNobyBuZXcgbGluZSA+QiAmJgorCWdpdCBjb21taXQgLW0gImFkZCBsaW5lIHRvIEIiIEIgJiYKKwlnaXQgdGFnIGIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIHNpZGUgJiYKKwlnaXQgdGFnIGMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtbSBjb21wbGFpbnMgb2YgYm9ndXMgbnVtYmVycycgJworCSMgZXhwZWN0IDEyOSBoZXJlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gY2FzZXMgd2hlcmUKKwkjIHRoZXJlIHdhcyBub3RoaW5nIHRvIGNoZXJyeS1waWNrCisJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IGNoZXJyeS1waWNrIC1tICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IGNoZXJyeS1waWNrIC1tIGZvbyBiICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IGNoZXJyeS1waWNrIC1tIC0xIGIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgY2hlcnJ5LXBpY2sgLW0gMCBiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGV4cGxpY2l0IGZpcnN0IHBhcmVudCBvZiBhIG5vbi1tZXJnZScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBhXjAgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLW0gMSBiICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYyAtLQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIGEgbWVyZ2Ugd2l0aG91dCAtbSBzaG91bGQgZmFpbCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBhXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgYyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGEgLS0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnkgcGljayBhIG1lcmdlICgxKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBhXjAgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLW0gMSBjICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIGEgbWVyZ2UgKDIpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJeMCAmJgorCWdpdCBjaGVycnktcGljayAtbSAyIGMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgYSBtZXJnZSByZWxhdGl2ZSB0byBub25leGlzdGVudCBwYXJlbnQgc2hvdWxkIGZhaWwnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC1tIDMgYworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBleHBsaWNpdCBmaXJzdCBwYXJlbnQgb2YgYSBub24tbWVyZ2UnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgY14wICYmCisJZ2l0IHJldmVydCAtbSAxIGIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBhIC0tCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IGEgbWVyZ2Ugd2l0aG91dCAtbSBzaG91bGQgZmFpbCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBjXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IGMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IGEgbWVyZ2UgKDEpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGNeMCAmJgorCWdpdCByZXZlcnQgLW0gMSBjICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYSAtLQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBhIG1lcmdlICgyKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBjXjAgJiYKKwlnaXQgcmV2ZXJ0IC1tIDIgYyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGIgLS0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgYSBtZXJnZSByZWxhdGl2ZSB0byBub25leGlzdGVudCBwYXJlbnQgc2hvdWxkIGZhaWwnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgY14wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCAtbSAzIGMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTAzLWNoZXJyeS1waWNrLXJvb3Quc2ggYi90L3QzNTAzLWNoZXJyeS1waWNrLXJvb3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTI3ZjM5ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDMtY2hlcnJ5LXBpY2stcm9vdC5zaApAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjaGVycnktcGlja2luZyAoYW5kIHJldmVydGluZykgYSByb290IGNvbW1pdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZWNobyBmaXJzdCA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImZpcnN0IiAmJgorCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvc2Vjb25kICYmCisJcm0gLmdpdC9pbmRleCBmaWxlMSAmJgorCWVjaG8gc2Vjb25kID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIiAmJgorCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvdGhpcmQgJiYKKwlybSAuZ2l0L2luZGV4IGZpbGUyICYmCisJZWNobyB0aGlyZCA+IGZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInRoaXJkIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgcm9vdCBjb21taXQnICcKKworCWdpdCBjaGVja291dCBzZWNvbmReMCAmJgorCWdpdCBjaGVycnktcGljayBtYXN0ZXIgJiYKKwllY2hvIGZpcnN0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgYSByb290IGNvbW1pdCcgJworCisJZ2l0IHJldmVydCBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgcm9vdCBjb21taXQgd2l0aCBhbiBleHRlcm5hbCBzdHJhdGVneScgJworCisJZ2l0IGNoZXJyeS1waWNrIC0tc3RyYXRlZ3k9cmVzb2x2ZSBtYXN0ZXIgJiYKKwllY2hvIGZpcnN0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgYSByb290IGNvbW1pdCB3aXRoIGFuIGV4dGVybmFsIHN0cmF0ZWd5JyAnCisKKwlnaXQgcmV2ZXJ0IC0tc3RyYXRlZ3k9cmVzb2x2ZSBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIHR3byByb290IGNvbW1pdHMnICcKKworCWVjaG8gZmlyc3QgPmV4cGVjdC5maWxlMSAmJgorCWVjaG8gc2Vjb25kID5leHBlY3QuZmlsZTIgJiYKKwllY2hvIHRoaXJkID5leHBlY3QuZmlsZTMgJiYKKworCWdpdCBjaGVja291dCBzZWNvbmReMCAmJgorCWdpdCBjaGVycnktcGljayBtYXN0ZXIgdGhpcmQgJiYKKworCXRlc3RfY21wIGV4cGVjdC5maWxlMSBmaWxlMSAmJgorCXRlc3RfY21wIGV4cGVjdC5maWxlMiBmaWxlMiAmJgorCXRlc3RfY21wIGV4cGVjdC5maWxlMyBmaWxlMyAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF5eICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXl5eCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTA0LWNoZXJyeS1waWNrLXJlcmVyZS5zaCBiL3QvdDM1MDQtY2hlcnJ5LXBpY2stcmVyZXJlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgwYTBkMDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTA0LWNoZXJyeS1waWNrLXJlcmVyZS5zaApAQCAtMCwwICsxLDEwMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZXJyeS1waWNrIHNob3VsZCByZXJlcmUgZm9yIGNvbmZsaWN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IGZvbyAmJgorCXRlc3RfY29tbWl0IGZvby1tYXN0ZXIgZm9vICYmCisJdGVzdF9jb21taXQgYmFyLW1hc3RlciBiYXIgJiYKKworCWdpdCBjaGVja291dCAtYiBkZXYgZm9vICYmCisJdGVzdF9jb21taXQgZm9vLWRldiBmb28gJiYKKwl0ZXN0X2NvbW1pdCBiYXItZGV2IGJhciAmJgorCWdpdCBjb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdGluZyBtZXJnZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZml4dXAnICcKKwllY2hvIGZvby1yZXNvbHZlZCA+Zm9vICYmCisJZWNobyBiYXItcmVzb2x2ZWQgPmJhciAmJgorCWdpdCBjb21taXQgLWFtIHJlc29sdmVkICYmCisJY3AgZm9vIGZvby1leHBlY3QgJiYKKwljcCBiYXIgYmFyLWV4cGVjdCAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgY29uZmxpY3Qgd2l0aCAtLXJlcmVyZS1hdXRvdXBkYXRlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tcmVyZXJlLWF1dG91cGRhdGUgZm9vLi5iYXItbWFzdGVyICYmCisJdGVzdF9jbXAgZm9vLWV4cGVjdCBmb28gJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwl0ZXN0X2NtcCBiYXItZXhwZWN0IGJhciAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgYmFyLWRldgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBjb25mbGljdCByZXBzZWN0cyByZXJlcmUuYXV0b1VwZGF0ZScgJworCXRlc3RfY29uZmlnIHJlcmVyZS5hdXRvVXBkYXRlIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgZm9vLi5iYXItbWFzdGVyICYmCisJdGVzdF9jbXAgZm9vLWV4cGVjdCBmb28gJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwl0ZXN0X2NtcCBiYXItZXhwZWN0IGJhciAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgYmFyLWRldgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBjb25mbGljdCB3aXRoIC0tbm8tcmVyZXJlLWF1dG91cGRhdGUnICcKKwl0ZXN0X2NvbmZpZyByZXJlcmUuYXV0b1VwZGF0ZSB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tbm8tcmVyZXJlLWF1dG91cGRhdGUgZm9vLi5iYXItbWFzdGVyICYmCisJdGVzdF9jbXAgZm9vLWV4cGVjdCBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGFkZCBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCXRlc3RfY21wIGJhci1leHBlY3QgYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCBhZGQgYmFyICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGJhci1kZXYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLS1jb250aW51ZSByZWplY3RzIC0tcmVyZXJlLWF1dG91cGRhdGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1yZXJlcmUtYXV0b3VwZGF0ZSBmb28uLmJhci1tYXN0ZXIgJiYKKwl0ZXN0X2NtcCBmb28tZXhwZWN0IGZvbyAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAtLXJlcmVyZS1hdXRvdXBkYXRlID5hY3R1YWwgMj4mMSAmJgorCWVjaG8gImZhdGFsOiBjaGVycnktcGljazogLS1yZXJlcmUtYXV0b3VwZGF0ZSBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tY29udGludWUiID5leHBlY3QgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlIC0tbm8tcmVyZXJlLWF1dG91cGRhdGUgPmFjdHVhbCAyPiYxICYmCisJZWNobyAiZmF0YWw6IGNoZXJyeS1waWNrOiAtLW5vLXJlcmVyZS1hdXRvdXBkYXRlIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1jb250aW51ZSIgPmV4cGVjdCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLS1yZXJlcmUtYXV0b3VwZGF0ZSBtb3JlIHRoYW4gb25jZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLXJlcmVyZS1hdXRvdXBkYXRlIC0tcmVyZXJlLWF1dG91cGRhdGUgZm9vLi5iYXItbWFzdGVyICYmCisJdGVzdF9jbXAgZm9vLWV4cGVjdCBmb28gJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1yZXJlcmUtYXV0b3VwZGF0ZSAtLW5vLXJlcmVyZS1hdXRvdXBkYXRlIC0tcmVyZXJlLWF1dG91cGRhdGUgZm9vLi5iYXItbWFzdGVyICYmCisJdGVzdF9jbXAgZm9vLWV4cGVjdCBmb28gJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1yZXJlcmUtYXV0b3VwZGF0ZSAtLW5vLXJlcmVyZS1hdXRvdXBkYXRlIGZvby4uYmFyLW1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBjb25mbGljdCB3aXRob3V0IHJlcmVyZScgJworCXRlc3RfY29uZmlnIHJlcmVyZS5lbmFibGVkIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGZvby1tYXN0ZXIgJiYKKwlncmVwID09PT09IGZvbyAmJgorCWdyZXAgZm9vLWRldiBmb28gJiYKKwlncmVwIGZvby1tYXN0ZXIgZm9vCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUwNS1jaGVycnktcGljay1lbXB0eS5zaCBiL3QvdDM1MDUtY2hlcnJ5LXBpY2stZW1wdHkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWY5MTFiYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDUtY2hlcnJ5LXBpY2stZW1wdHkuc2gKQEAgLTAsMCArMSw5OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2hlcnJ5LXBpY2tpbmcgYW4gZW1wdHkgY29tbWl0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwllY2hvIGZpcnN0ID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlyc3QiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgZW1wdHktbWVzc2FnZS1icmFuY2ggJiYKKwllY2hvIHRoaXJkID4+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC1tICIiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGVtcHR5LWNoYW5nZS1icmFuY2ggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImVtcHR5IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGFuIGVtcHR5IGNvbW1pdCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGVtcHR5LWNoYW5nZS1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggbG9ja2ZpbGUgd2FzIHJlbW92ZWQnICcKKwl0ZXN0ICEgLWYgLmdpdC9pbmRleC5sb2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgY29tbWl0IHdpdGggYW4gZW1wdHkgbWVzc2FnZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBlbXB0eS1tZXNzYWdlLWJyYW5jaH4xIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgZW1wdHktbWVzc2FnZS1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggbG9ja2ZpbGUgd2FzIHJlbW92ZWQnICcKKwl0ZXN0ICEgLWYgLmdpdC9pbmRleC5sb2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgY29tbWl0IHdpdGggYW4gZW1wdHkgbWVzc2FnZSB3aXRoIC0tYWxsb3ctZW1wdHktbWVzc2FnZScgJworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIGVtcHR5LW1lc3NhZ2UtYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIGFuIGVtcHR5IG5vbi1mZiBjb21taXQgd2l0aG91dCAtLWFsbG93LWVtcHR5JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gZm91cnRoID4+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSAiZm91cnRoIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBlbXB0eS1jaGFuZ2UtYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIGFuIGVtcHR5IG5vbi1mZiBjb21taXQgd2l0aCAtLWFsbG93LWVtcHR5JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVycnktcGljayAtLWFsbG93LWVtcHR5IGVtcHR5LWNoYW5nZS1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgd2l0aCAtLWtlZXAtcmVkdW5kYW50LWNvbW1pdHMnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZXJyeS1waWNrIC0ta2VlcC1yZWR1bmRhbnQtY29tbWl0cyBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBhIGNvbW1pdCB0aGF0IGJlY29tZXMgbm8tb3AgKHByZXApJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggZm9yayAmJgorCWVjaG8gZm9vID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZmlsZTIgb24gbWFzdGVyIiAmJgorCisJZ2l0IGNoZWNrb3V0IGZvcmsgJiYKKwllY2hvIGZvbyA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGZpbGUyIG9uIHRoZSBzaWRlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBhIG5vLW9wIHdpdGhvdXQgLS1rZWVwLXJlZHVuZGFudCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZm9ya14wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBhIG5vLW9wIHdpdGggLS1rZWVwLXJlZHVuZGFudCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZm9ya14wICYmCisJZ2l0IGNoZXJyeS1waWNrIC0ta2VlcC1yZWR1bmRhbnQtY29tbWl0cyBtYXN0ZXIgJiYKKwlnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZWNobyAiYWRkIGZpbGUyIG9uIG1hc3RlciIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTA2LWNoZXJyeS1waWNrLWZmLnNoIGIvdC90MzUwNi1jaGVycnktcGljay1mZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZDVhZGJjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzUwNi1jaGVycnktcGljay1mZi5zaApAQCAtMCwwICsxLDEyMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2hlcnJ5LXBpY2tpbmcgd2l0aCAtLWZmIG9wdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gZmlyc3QgPiBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJmaXJzdCIgJiYKKwlnaXQgdGFnIGZpcnN0ICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgb3RoZXIgJiYKKwllY2hvIHNlY29uZCA+PiBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzZWNvbmQiICYmCisJZ2l0IHRhZyBzZWNvbmQgJiYKKwl0ZXN0X29pZF9jYWNoZSA8PC1FT0YKKwljcF9mZiBzaGExOjFkZjE5MmNkOGJjNThhMmIyNzVkODQyY2VkZTRkMjIxYWQ5MDAwZDEKKwljcF9mZiBzaGEyNTY6ZTcwZDZiN2ZjMDY0YmRkYjUxNmI4ZDUxMmM5MDU3MDk0Yjk2Y2U2ZmYwOGUxMjA4MGFjYzRmZTdmMWQ2MGExZAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayB1c2luZyAtLWZmIGZhc3QgZm9yd2FyZHMnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayAtLWZmIHNlY29uZCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHNlY29uZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIG5vdCB1c2luZyAtLWZmIGRvZXMgbm90IGZhc3QgZm9yd2FyZHMnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayBzZWNvbmQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICE9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc2Vjb25kKSIKKycKKworIworIyBXZSBzZXR1cCB0aGUgZm9sbG93aW5nIGdyYXBoOgorIworIwkgICAgICBCLS0tQworIwkgICAgIC8gICAvCisjCWZpcnN0LS0tQQorIworIyAoVGhpcyBoYXMgYmVlbiB0YWtlbiBmcm9tIHQzNTAyLWNoZXJyeS1waWNrLW1lcmdlLnNoKQorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugc2V0dXAnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCWVjaG8gbmV3IGxpbmUgPkEgJiYKKwlnaXQgYWRkIEEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbGluZSB0byBBIiBBICYmCisJZ2l0IHRhZyBBICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgZmlyc3QgJiYKKwllY2hvIG5ldyBsaW5lID5CICYmCisJZ2l0IGFkZCBCICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgdG8gQiIgQiAmJgorCWdpdCB0YWcgQiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2Ugc2lkZSAmJgorCWdpdCB0YWcgQyAmJgorCWdpdCBjaGVja291dCAtYiBuZXcgQQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBleHBsaWNpdCBmaXJzdCBwYXJlbnQgb2YgYSBub24tbWVyZ2Ugd2l0aCAtLWZmJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBBIC0tICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tZmYgLW0gMSBCICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgQyAtLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnkgcGljayBhIG1lcmdlIHdpdGggLS1mZiBidXQgd2l0aG91dCAtbSBzaG91bGQgZmFpbCcgJworCWdpdCByZXNldCAtLWhhcmQgQSAtLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLWZmIEMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBBIC0tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIHdpdGggLS1mZiBhIG1lcmdlICgxKScgJworCWdpdCByZXNldCAtLWhhcmQgQSAtLSAmJgorCWdpdCBjaGVycnktcGljayAtLWZmIC1tIDEgQyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEMgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgd2l0aCAtLWZmIGEgbWVyZ2UgKDIpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBCIC0tICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tZmYgLW0gMiBDICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgQyAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEMpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnkgcGljayBhIG1lcmdlIHJlbGF0aXZlIHRvIG5vbmV4aXN0ZW50IHBhcmVudCB3aXRoIC0tZmYgc2hvdWxkIGZhaWwnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEIgLS0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1mZiAtbSAzIEMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgYSByb290IGNvbW1pdCB3aXRoIC0tZmYnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0IC0tICYmCisJZ2l0IHJtIGZpbGUxICYmCisJZWNobyBmaXJzdCA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJmaWxlMiIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1mZiBmaXJzdCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgPSAiJCh0ZXN0X29pZCBjcF9mZikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tZmYgb24gdW5ib3JuIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiB1bmJvcm4gJiYKKwlnaXQgcm0gLS1jYWNoZWQgLXIgLiAmJgorCXJtIC1yZiAqICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tZmYgZmlyc3QgJiYKKwl0ZXN0X2NtcF9yZXYgZmlyc3QgSEVBRAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MDctY2hlcnJ5LXBpY2stY29uZmxpY3Quc2ggYi90L3QzNTA3LWNoZXJyeS1waWNrLWNvbmZsaWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc1MmJjNDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTA3LWNoZXJyeS1waWNrLWNvbmZsaWN0LnNoCkBAIC0wLDAgKzEsNTgwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjaGVycnktcGljayBhbmQgcmV2ZXJ0IHdpdGggY29uZmxpY3RzCisKKyAgLQorICArIHBpY2tlZDogcmV3cml0ZXMgZm9vIHRvIGMKKyAgKyBiYXNlOiByZXdyaXRlcyBmb28gdG8gYgorICArIGluaXRpYWw6IHdyaXRlcyBmb28gYXMgYSwgdW5yZWxhdGVkIGFzIHVucmVsYXRlZAorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitwcmlzdGluZV9kZXRhY2ggKCkgeworCWdpdCBjaGVja291dCAtZiAiJDFeMCIgJiYKKwlnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQgSEVBRCAmJgorCWdpdCBjbGVhbiAtZCAtZiAtZiAtcSAteAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWVjaG8gdW5yZWxhdGVkID51bnJlbGF0ZWQgJiYKKwlnaXQgYWRkIHVucmVsYXRlZCAmJgorCXRlc3RfY29tbWl0IGluaXRpYWwgZm9vIGEgJiYKKwl0ZXN0X2NvbW1pdCBiYXNlIGZvbyBiICYmCisJdGVzdF9jb21taXQgcGlja2VkIGZvbyBjICYmCisJdGVzdF9jb21taXQgLS1zaWdub2ZmIHBpY2tlZC1zaWduZWQgZm9vIGQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0IHJlZHVuZGFudC1waWNrIGZvbyBjIHJlZHVuZGFudCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgJiYKKwlnaXQgdGFnIGVtcHR5ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjb25maWcgYWR2aWNlLmRldGFjaGVkaGVhZCBmYWxzZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjaGVycnktcGljayBkb2VzIG5vdCBhZHZhbmNlIEhFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJbmV3aGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCXRlc3QgIiRoZWFkIiA9ICIkbmV3aGVhZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWR2aWNlIGZyb20gZmFpbGVkIGNoZXJyeS1waWNrJyAiCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKworCXBpY2tlZD1cJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcGlja2VkKSAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdGVkICYmCisJZXJyb3I6IGNvdWxkIG5vdCBhcHBseSBcJHBpY2tlZC4uLiBwaWNrZWQKKwloaW50OiBhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzCisJaGludDogd2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nCisJaGludDogYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAyPmFjdHVhbCAmJgorCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZHZpY2UgZnJvbSBmYWlsZWQgY2hlcnJ5LXBpY2sgLS1uby1jb21taXQnICIKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCisJcGlja2VkPVwkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBwaWNrZWQpICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwllcnJvcjogY291bGQgbm90IGFwcGx5IFwkcGlja2VkLi4uIHBpY2tlZAorCWhpbnQ6IGFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHMKKwloaW50OiB3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPicKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1uby1jb21taXQgcGlja2VkIDI+YWN0dWFsICYmCisKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjaGVycnktcGljayBzZXRzIENIRVJSWV9QSUNLX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKwl0ZXN0X2NtcF9yZXYgcGlja2VkIENIRVJSWV9QSUNLX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2Vzc2Z1bCBjaGVycnktcGljayBkb2VzIG5vdCBzZXQgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZ2l0IGNoZXJyeS1waWNrIGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLS1uby1jb21taXQgZG9lcyBub3Qgc2V0IENIRVJSWV9QSUNLX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayAtLW5vLWNvbW1pdCBiYXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIHcvZGlydHkgdHJlZSBkb2VzIG5vdCBzZXQgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZWNobyBmb28gPmZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBiYXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjaGVycnktcGljayAtLXN0cmF0ZWd5PXJlc29sdmUgdy9kaXJ0eSB0cmVlIGRvZXMgbm90IHNldCBDSEVSUllfUElDS19IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwllY2hvIGZvbyA+Zm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tc3RyYXRlZ3k9cmVzb2x2ZSBiYXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9DSEVSUllfUElDS19IRUxQIHN1cHByZXNzZXMgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJKAorCQlHSVRfQ0hFUlJZX1BJQ0tfSEVMUD0iYW5kIHRoZW4gZG8gc29tZXRoaW5nIGVsc2UiICYmCisJCWV4cG9ydCBHSVRfQ0hFUlJZX1BJQ0tfSEVMUCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmVzZXQgY2xlYXJzIENIRVJSWV9QSUNLX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCWdpdCByZXNldCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjb21taXQgZG9lcyBub3QgY2xlYXIgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAmJgorCisJdGVzdF9jbXBfcmV2IHBpY2tlZCBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbmNlbGxlZCBjb21taXQgZG9lcyBub3QgY2xlYXIgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJZWNobyByZXNvbHZlZCA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtcSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQgJiYKKwkoCisJCUdJVF9FRElUT1I9ZmFsc2UgJiYKKwkJZXhwb3J0IEdJVF9FRElUT1IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdAorCSkgJiYKKworCXRlc3RfY21wX3JldiBwaWNrZWQgQ0hFUlJZX1BJQ0tfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzZnVsIGNvbW1pdCBjbGVhcnMgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJZWNobyByZXNvbHZlZCA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBjb21taXQgb2YgY2hlcnJ5LXBpY2sgZmFpbHMnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCWVjaG8gcmVzb2x2ZWQgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCBmb28gMj5lcnIgJiYKKworCXRlc3RfaTE4bmdyZXAgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLWFtZW5kIG9mIGNoZXJyeS1waWNrIGZhaWxzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKwllY2hvIHJlc29sdmVkID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1hbWVuZCAyPmVyciAmJgorCisJdGVzdF9pMThuZ3JlcCAiaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzZnVsIGZpbmFsIGNvbW1pdCBjbGVhcnMgY2hlcnJ5LXBpY2sgc3RhdGUnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGJhc2UgcGlja2VkLXNpZ25lZCAmJgorCWVjaG8gcmVzb2x2ZWQgPmZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvc2VxdWVuY2VyL3RvZG8gJiYKKwlnaXQgY29tbWl0IC1hICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgYWZ0ZXIgZmluYWwgcGljayBjbGVhcnMgY2hlcnJ5LXBpY2sgc3RhdGUnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGJhc2UgcGlja2VkLXNpZ25lZCAmJgorCWVjaG8gcmVzb2x2ZWQgPmZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvc2VxdWVuY2VyL3RvZG8gJiYKKwlnaXQgcmVzZXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgY2hlcnJ5LXBpY2sgcHJvZHVjZXMgZGlydHkgaW5kZXgnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLXEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjaGVycnktcGljayByZWdpc3RlcnMgcGFydGljaXBhbnRzIGluIGluZGV4JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl7CisJCWdpdCBjaGVja291dCBiYXNlIC0tIGZvbyAmJgorCQlnaXQgbHMtZmlsZXMgLS1zdGFnZSBmb28gJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgLS0gZm9vICYmCisJCWdpdCBscy1maWxlcyAtLXN0YWdlIGZvbyAmJgorCQlnaXQgY2hlY2tvdXQgcGlja2VkIC0tIGZvbyAmJgorCQlnaXQgbHMtZmlsZXMgLS1zdGFnZSBmb28KKwl9ID5zdGFnZXMgJiYKKwlzZWQgIgorCQkxIHMvIDAJLyAxCS8KKwkJMiBzLyAwCS8gMgkvCisJCTMgcy8gMAkvIDMJLworCSIgc3RhZ2VzID5leHBlY3RlZCAmJgorCWdpdCByZWFkLXRyZWUgLXUgLS1yZXNldCBIRUFEICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgLS11bm1lcmdlZCA+YWN0dWFsICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoZXJyeS1waWNrIGNvbmZsaWN0LCBlbnN1cmUgY29tbWl0LmNsZWFudXAgPSBzY2lzc29ycyBwbGFjZXMgc2Npc3NvcnMgbGluZSBwcm9wZXJseScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZ2l0IGNvbmZpZyBjb21taXQuY2xlYW51cCBzY2lzc29ycyAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdGVkICYmCisJCXBpY2tlZAorCisJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkjIERvIG5vdCBtb2RpZnkgb3IgcmVtb3ZlIHRoZSBsaW5lIGFib3ZlLgorCQkjIEV2ZXJ5dGhpbmcgYmVsb3cgaXQgd2lsbCBiZSBpZ25vcmVkLgorCQkjCisJCSMgQ29uZmxpY3RzOgorCQkjCWZvbworCQlFT0YKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKworCXRlc3RfaTE4bmNtcCBleHBlY3RlZCAuZ2l0L01FUkdFX01TRworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY2hlcnJ5LXBpY2sgY29uZmxpY3QsIGVuc3VyZSBjbGVhbnVwPXNjaXNzb3JzIHBsYWNlcyBzY2lzc29ycyBsaW5lIHByb3Blcmx5JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29tbWl0LmNsZWFudXAgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCQlwaWNrZWQKKworCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJIyBEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS4KKwkJIyBFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4KKwkJIworCQkjIENvbmZsaWN0czoKKwkJIwlmb28KKwkJRU9GCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1jbGVhbnVwPXNjaXNzb3JzIHBpY2tlZCAmJgorCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIC5naXQvTUVSR0VfTVNHCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjaGVycnktcGljayBkZXNjcmliZXMgY29uZmxpY3QgaW4gd29yayB0cmVlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCTw8PDw8PDwgSEVBRAorCWEKKwk9PT09PT09CisJYworCT4+Pj4+Pj4gb2JqaWQgcGlja2VkCisJRU9GCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisKKwlzZWQgInMvW2EtZjAtOV0qXC5cLlwuL29iamlkLyIgZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZjMgLW0gc3R5bGUnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjb25maWcgbWVyZ2UuY29uZmxpY3RzdHlsZSBkaWZmMyAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdGVkICYmCisJPDw8PDw8PCBIRUFECisJYQorCXx8fHx8fHwgcGFyZW50IG9mIG9iamlkIHBpY2tlZAorCWIKKwk9PT09PT09CisJYworCT4+Pj4+Pj4gb2JqaWQgcGlja2VkCisJRU9GCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisKKwlzZWQgInMvW2EtZjAtOV0qXC5cLlwuL29iamlkLyIgZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IGFsc28gaGFuZGxlcyBjb25mbGljdHMgc2FuZWx5JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IG1lcmdlLmNvbmZsaWN0c3R5bGUgJiYKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdGVkICYmCisJPDw8PDw8PCBIRUFECisJYQorCT09PT09PT0KKwliCisJPj4+Pj4+PiBwYXJlbnQgb2Ygb2JqaWQgcGlja2VkCisJRU9GCisJeworCQlnaXQgY2hlY2tvdXQgcGlja2VkIC0tIGZvbyAmJgorCQlnaXQgbHMtZmlsZXMgLS1zdGFnZSBmb28gJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgLS0gZm9vICYmCisJCWdpdCBscy1maWxlcyAtLXN0YWdlIGZvbyAmJgorCQlnaXQgY2hlY2tvdXQgYmFzZSAtLSBmb28gJiYKKwkJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgZm9vCisJfSA+c3RhZ2VzICYmCisJc2VkICIKKwkJMSBzLyAwCS8gMQkvCisJCTIgcy8gMAkvIDIJLworCQkzIHMvIDAJLyAzCS8KKwkiIHN0YWdlcyA+ZXhwZWN0ZWQtc3RhZ2VzICYmCisJZ2l0IHJlYWQtdHJlZSAtdSAtLXJlc2V0IEhFQUQgJiYKKworCWhlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBwaWNrZWQgJiYKKwluZXdoZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlIC0tdW5tZXJnZWQgPmFjdHVhbC1zdGFnZXMgJiYKKworCXRlc3QgIiRoZWFkIiA9ICIkbmV3aGVhZCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtcSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1zdGFnZXMgYWN0dWFsLXN0YWdlcyAmJgorCXNlZCAicy9bYS1mMC05XSpcLlwuXC4vb2JqaWQvIiBmb28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgcmV2ZXJ0IHNldHMgUkVWRVJUX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgcGlja2VkICYmCisJdGVzdF9jbXBfcmV2IHBpY2tlZCBSRVZFUlRfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzZnVsIHJldmVydCBkb2VzIG5vdCBzZXQgUkVWRVJUX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggYmFzZSAmJgorCWdpdCByZXZlcnQgYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgUkVWRVJUX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IC0tbm8tY29tbWl0IHNldHMgUkVWRVJUX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggYmFzZSAmJgorCWdpdCByZXZlcnQgLS1uby1jb21taXQgYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCXRlc3RfY21wX3JldiBiYXNlIFJFVkVSVF9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCB3L2RpcnR5IHRyZWUgZG9lcyBub3Qgc2V0IFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGJhc2UgJiYKKwllY2hvIGZvbyA+Zm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBiYXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBSRVZFUlRfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfQ0hFUlJZX1BJQ0tfSEVMUCBkb2VzIG5vdCBzdXBwcmVzcyBSRVZFUlRfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJKAorCQlHSVRfQ0hFUlJZX1BJQ0tfSEVMUD0iYW5kIHRoZW4gZG8gc29tZXRoaW5nIGVsc2UiICYmCisJCUdJVF9SRVZFUlRfSEVMUD0iYW5kIHRoZW4gZG8gc29tZXRoaW5nIGVsc2UsIGFnYWluIiAmJgorCQlleHBvcnQgR0lUX0NIRVJSWV9QSUNLX0hFTFAgR0lUX1JFVkVSVF9IRUxQICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgcGlja2VkCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCXRlc3RfY21wX3JldiBwaWNrZWQgUkVWRVJUX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlc2V0IGNsZWFycyBSRVZFUlRfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBwaWNrZWQgJiYKKwlnaXQgcmVzZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFJFVkVSVF9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjb21taXQgZG9lcyBub3QgY2xlYXIgUkVWRVJUX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgcGlja2VkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAmJgorCXRlc3RfY21wX3JldiBwaWNrZWQgUkVWRVJUX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2Vzc2Z1bCBmaW5hbCBjb21taXQgY2xlYXJzIHJldmVydCBzdGF0ZScgJworCXByaXN0aW5lX2RldGFjaCBwaWNrZWQtc2lnbmVkICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IHBpY2tlZC1zaWduZWQgYmFzZSAmJgorCWVjaG8gcmVzb2x2ZWQgPmZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvc2VxdWVuY2VyL3RvZG8gJiYKKwlnaXQgY29tbWl0IC1hICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgYWZ0ZXIgZmluYWwgcGljayBjbGVhcnMgcmV2ZXJ0IHN0YXRlJyAnCisJcHJpc3RpbmVfZGV0YWNoIHBpY2tlZC1zaWduZWQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgcGlja2VkLXNpZ25lZCBiYXNlICYmCisJZWNobyByZXNvbHZlZCA+Zm9vICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9zZXF1ZW5jZXIvdG9kbyAmJgorCWdpdCByZXNldCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBjb25mbGljdCwgZGlmZjMgLW0gc3R5bGUnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjb25maWcgbWVyZ2UuY29uZmxpY3RzdHlsZSBkaWZmMyAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdGVkICYmCisJPDw8PDw8PCBIRUFECisJYQorCXx8fHx8fHwgb2JqaWQgcGlja2VkCisJYworCT09PT09PT0KKwliCisJPj4+Pj4+PiBwYXJlbnQgb2Ygb2JqaWQgcGlja2VkCisJRU9GCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IHBpY2tlZCAmJgorCisJc2VkICJzL1thLWYwLTldKlwuXC5cLi9vYmppZC8iIGZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdyZXZlcnQgY29uZmxpY3QsIGVuc3VyZSBjb21taXQuY2xlYW51cCA9IHNjaXNzb3JzIHBsYWNlcyBzY2lzc29ycyBsaW5lIHByb3Blcmx5JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY29uZmlnIGNvbW1pdC5jbGVhbnVwIHNjaXNzb3JzICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkJUmV2ZXJ0ICJwaWNrZWQiCisKKwkJVGhpcyByZXZlcnRzIGNvbW1pdCBPQkpJRC4KKworCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJIyBEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS4KKwkJIyBFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4KKwkJIworCQkjIENvbmZsaWN0czoKKwkJIwlmb28KKwkJRU9GCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IHBpY2tlZCAmJgorCisJc2VkICJzLyRPSURfUkVHRVgvT0JKSUQvIiAuZ2l0L01FUkdFX01TRyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncmV2ZXJ0IGNvbmZsaWN0LCBlbnN1cmUgY2xlYW51cD1zY2lzc29ycyBwbGFjZXMgc2Npc3NvcnMgbGluZSBwcm9wZXJseScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbW1pdC5jbGVhbnVwICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkJUmV2ZXJ0ICJwaWNrZWQiCisKKwkJVGhpcyByZXZlcnRzIGNvbW1pdCBPQkpJRC4KKworCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJIyBEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS4KKwkJIyBFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4KKwkJIworCQkjIENvbmZsaWN0czoKKwkJIwlmb28KKwkJRU9GCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IC0tY2xlYW51cD1zY2lzc29ycyBwaWNrZWQgJiYKKworCXNlZCAicy8kT0lEX1JFR0VYL09CSklELyIgLmdpdC9NRVJHRV9NU0cgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNoZXJyeS1waWNrIGRvZXMgbm90IGZvcmdldCAtcycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC1zIHBpY2tlZCAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIlNpZ25lZC1vZmYtYnkiIC5naXQvTUVSR0VfTVNHCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBhZnRlciBmYWlsZWQgY2hlcnJ5LXBpY2sgZG9lcyBub3QgYWRkIGR1cGxpY2F0ZWQgLXMnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtcyBwaWNrZWQtc2lnbmVkICYmCisJZ2l0IGNvbW1pdCAtYSAtcyAmJgorCXRlc3QgJChnaXQgc2hvdyAtcyA+dG1wICYmIGdyZXAgLWMgIlNpZ25lZC1vZmYtYnkiIHRtcCAmJiBybSB0bXApID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgYWZ0ZXIgZmFpbGVkIGNoZXJyeS1waWNrIGFkZHMgLXMgYXQgdGhlIHJpZ2h0IHBsYWNlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisKKwlnaXQgY29tbWl0IC1hIC1zICYmCisKKwkjIERvIFMtby1iIGFuZCBDb25mbGljdHMgYXBwZWFyIGluIHRoZSByaWdodCBvcmRlcj8KKwljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCSMgQ29uZmxpY3RzOgorCUVPRgorCWdyZXAgLWUgIl4jIENvbmZsaWN0czoiIC1lICdeU2lnbmVkLW9mZi1ieScgLmdpdC9DT01NSVRfRURJVE1TRyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJcGlja2VkCisKKwlTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJRU9GCisKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1hbWVuZCAtcyBwbGFjZXMgdGhlIHNpZ24tb2ZmIGF0IHRoZSByaWdodCBwbGFjZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCisJIyBlbXVsYXRlIG9sZC1zdHlsZSBjb25mbGljdHMgYmxvY2sKKwltdiAuZ2l0L01FUkdFX01TRyAuZ2l0L01FUkdFX01TRysgJiYKKwlzZWQgLWUgIi9eIyBDb25mbGljdHM6LyxcJHMvXiMgKi8vIiAuZ2l0L01FUkdFX01TRysgPi5naXQvTUVSR0VfTVNHICYmCisKKwlnaXQgY29tbWl0IC1hICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1zICYmCisKKwkjIERvIFMtby1iIGFuZCBDb25mbGljdHMgYXBwZWFyIGluIHRoZSByaWdodCBvcmRlcj8KKwljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCUNvbmZsaWN0czoKKwlFT0YKKwlncmVwIC1lICJeQ29uZmxpY3RzOiIgLWUgJ15TaWduZWQtb2ZmLWJ5JyAuZ2l0L0NPTU1JVF9FRElUTVNHID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIHByZXNlcnZlcyBzcGFyc2UtY2hlY2tvdXQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfY29uZmlnIGNvcmUuc3BhcnNlQ2hlY2tvdXQgdHJ1ZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiCisJCWVjaG8gXCIvKlwiID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0CisJCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFECisJCXJtIC5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQiICYmCisJZWNobyAvdW5yZWxhdGVkID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLVhvdXJzIHBpY2tlZD5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tY29udGludWUgcmVtZW1iZXJzIC0ta2VlcC1yZWR1bmRhbnQtY29tbWl0cycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgfHwgOiIgJiYKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLWtlZXAtcmVkdW5kYW50LWNvbW1pdHMgcGlja2VkIHJlZHVuZGFudCAmJgorCWVjaG8gYyA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtLWNvbnRpbnVlIHJlbWVtYmVycyAtLWFsbG93LWVtcHR5IGFuZCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVycnktcGljayAtLWFib3J0IHx8IDoiICYmCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1hbGxvdy1lbXB0eSAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgXAorCQkJCSAgICAgICBwaWNrZWQgZW1wdHkgJiYKKwllY2hvIGMgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTA4LWNoZXJyeS1waWNrLW1hbnktY29tbWl0cy5zaCBiL3QvdDM1MDgtY2hlcnJ5LXBpY2stbWFueS1jb21taXRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIzMDcwYTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTA4LWNoZXJyeS1waWNrLW1hbnktY29tbWl0cy5zaApAQCAtMCwwICsxLDE5NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2hlcnJ5LXBpY2tpbmcgbWFueSBjb21taXRzJworCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfaGVhZF9kaWZmZXJzX2Zyb20oKSB7CisJdGVzdF9jbXBfcmV2ICEgSEVBRCAiJDEiCit9CisKK2NoZWNrX2hlYWRfZXF1YWxzKCkgeworCXRlc3RfY21wX3JldiBIRUFEICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBmaXJzdCA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImZpcnN0IiAmJgorCWdpdCB0YWcgZmlyc3QgJiYKKworCWdpdCBjaGVja291dCAtYiBvdGhlciAmJgorCWZvciB2YWwgaW4gc2Vjb25kIHRoaXJkIGZvdXJ0aAorCWRvCisJCWVjaG8gJHZhbCA+PiBmaWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICIkdmFsIiAmJgorCQlnaXQgdGFnICR2YWwKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGZpcnN0Li5mb3VydGggd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayBmaXJzdC4uZm91cnRoICYmCisJZ2l0IGRpZmYgLS1xdWlldCBvdGhlciAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCBvdGhlciAmJgorCWNoZWNrX2hlYWRfZGlmZmVyc19mcm9tIGZvdXJ0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayB0aHJlZSBvbmUgdHdvIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIGZpcnN0ICYmCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCWdpdCBjaGVycnktcGljayB0aHJlZSBvbmUgdHdvICYmCisJZ2l0IGRpZmYgLS1xdWlldCB0aHJlZSAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCB0aHJlZSAmJgorCXRlc3QgIiQoZ2l0IGxvZyAtLXJldmVyc2UgLS1mb3JtYXQ9JXMgZmlyc3QuLikiID0gInRocmVlCitvbmUKK3R3byIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgdGhyZWUgb25lIHR3bzogZmFpbHMnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayB0aHJlZSBvbmUgdHdvOgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRwdXQgdG8ga2VlcCB1c2VyIGVudGVydGFpbmVkIGR1cmluZyBtdWx0aS1waWNrJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJW21hc3RlciBPQkpJRF0gc2Vjb25kCisJIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkgRGF0ZTogVGh1IEFwciA3IDE1OjE0OjEzIDIwMDUgLTA3MDAKKwkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisJW21hc3RlciBPQkpJRF0gdGhpcmQKKwkgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCSBEYXRlOiBUaHUgQXByIDcgMTU6MTU6MTMgMjAwNSAtMDcwMAorCSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKwlbbWFzdGVyIE9CSklEXSBmb3VydGgKKwkgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCSBEYXRlOiBUaHUgQXByIDcgMTU6MTY6MTMgMjAwNSAtMDcwMAorCSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKwlFT0YKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIGZpcnN0Li5mb3VydGggPmFjdHVhbCAmJgorCXNlZCAtZSAicy8kX3gwNVswLTlhLWZdWzAtOWEtZl0vT0JKSUQvIiA8YWN0dWFsID5hY3R1YWwuZnV6enkgJiYKKwl0ZXN0X2xpbmVfY291bnQgLWdlIDMgYWN0dWFsLmZ1enp5ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbC5mdXp6eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtLXN0cmF0ZWd5IHJlc29sdmUgZmlyc3QuLmZvdXJ0aCB3b3JrcycgJworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tc3RyYXRlZ3kgcmVzb2x2ZSBmaXJzdC4uZm91cnRoICYmCisJZ2l0IGRpZmYgLS1xdWlldCBvdGhlciAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCBvdGhlciAmJgorCWNoZWNrX2hlYWRfZGlmZmVyc19mcm9tIGZvdXJ0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRwdXQgZHVyaW5nIG11bHRpLXBpY2sgaW5kaWNhdGVzIG1lcmdlIHN0cmF0ZWd5JyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJVHJ5aW5nIHNpbXBsZSBtZXJnZS4KKwlbbWFzdGVyIE9CSklEXSBzZWNvbmQKKwkgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCSBEYXRlOiBUaHUgQXByIDcgMTU6MTQ6MTMgMjAwNSAtMDcwMAorCSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKwlUcnlpbmcgc2ltcGxlIG1lcmdlLgorCVttYXN0ZXIgT0JKSURdIHRoaXJkCisJIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkgRGF0ZTogVGh1IEFwciA3IDE1OjE1OjEzIDIwMDUgLTA3MDAKKwkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisJVHJ5aW5nIHNpbXBsZSBtZXJnZS4KKwlbbWFzdGVyIE9CSklEXSBmb3VydGgKKwkgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCSBEYXRlOiBUaHUgQXByIDcgMTU6MTY6MTMgMjAwNSAtMDcwMAorCSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKwlFT0YKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tc3RyYXRlZ3kgcmVzb2x2ZSBmaXJzdC4uZm91cnRoID5hY3R1YWwgJiYKKwlzZWQgLWUgInMvJF94MDVbMC05YS1mXVswLTlhLWZdL09CSklELyIgPGFjdHVhbCA+YWN0dWFsLmZ1enp5ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbC5mdXp6eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtLWZmIGZpcnN0Li5mb3VydGggd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayAtLWZmIGZpcnN0Li5mb3VydGggJiYKKwlnaXQgZGlmZiAtLXF1aWV0IG90aGVyICYmCisJZ2l0IGRpZmYgLS1xdWlldCBIRUFEIG90aGVyICYmCisJY2hlY2tfaGVhZF9lcXVhbHMgZm91cnRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC1uIGZpcnN0Li5mb3VydGggd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayAtbiBmaXJzdC4uZm91cnRoICYmCisJZ2l0IGRpZmYgLS1xdWlldCBvdGhlciAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQgb3RoZXIgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IEhFQUQgZmlyc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IGZpcnN0Li5mb3VydGggd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmb3VydGggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmV2ZXJ0IGZpcnN0Li5mb3VydGggJiYKKwlnaXQgZGlmZiAtLXF1aWV0IGZpcnN0ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1xdWlldCBmaXJzdCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCBmaXJzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgXmZpcnN0IGZvdXJ0aCB3b3JrcycgJworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZvdXJ0aCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZXZlcnQgXmZpcnN0IGZvdXJ0aCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgZmlyc3QgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0IGZpcnN0ICYmCisJZ2l0IGRpZmYgLS1xdWlldCBIRUFEIGZpcnN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBmb3VydGggZm91cnRofjEgZm91cnRofjIgd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmb3VydGggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmV2ZXJ0IGZvdXJ0aCBmb3VydGh+MSBmb3VydGh+MiAmJgorCWdpdCBkaWZmIC0tcXVpZXQgZmlyc3QgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0IGZpcnN0ICYmCisJZ2l0IGRpZmYgLS1xdWlldCBIRUFEIGZpcnN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0zIGZvdXJ0aCB3b3JrcycgJworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIC0zIGZvdXJ0aCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgb3RoZXIgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IEhFQUQgb3RoZXIgJiYKKwljaGVja19oZWFkX2RpZmZlcnNfZnJvbSBmb3VydGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLS1zdGRpbiB3b3JrcycgJworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSBmaXJzdC4uZm91cnRoIHwgZ2l0IGNoZXJyeS1waWNrIC0tc3RkaW4gJiYKKwlnaXQgZGlmZiAtLXF1aWV0IG90aGVyICYmCisJZ2l0IGRpZmYgLS1xdWlldCBIRUFEIG90aGVyICYmCisJY2hlY2tfaGVhZF9kaWZmZXJzX2Zyb20gZm91cnRoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUwOS1jaGVycnktcGljay1tZXJnZS1kZi5zaCBiL3QvdDM1MDktY2hlcnJ5LXBpY2stbWVyZ2UtZGYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWU1YjM5NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDktY2hlcnJ5LXBpY2stbWVyZ2UtZGYuc2gKQEAgLTAsMCArMSwxMDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGNoZXJyeS1waWNrIHdpdGggZGlyZWN0b3J5L2ZpbGUgY29uZmxpY3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0luaXRpYWxpemUgcmVwb3NpdG9yeScgJworCW1rZGlyIGEgJiYKKwk+YS9mICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NldHVwIHJlbmFtZSBhY3Jvc3MgcGF0aHMgZWFjaCBiZWxvdyBEL0YgY29uZmxpY3RzJyAnCisJbWtkaXIgYiAmJgorCXRlc3RfbG5fc19hZGQgLi4vYSBiL2EgJiYKKwlnaXQgY29tbWl0IC1tIGIgJiYKKworCWdpdCBjaGVja291dCAtYiBicmFuY2ggJiYKKwlybSBiL2EgJiYKKwlnaXQgbXYgYSBiL2EgJiYKKwl0ZXN0X2xuX3NfYWRkIGIvYSBhICYmCisJZ2l0IGNvbW1pdCAtbSBzd2FwICYmCisKKwk+ZjEgJiYKKwlnaXQgYWRkIGYxICYmCisJZ2l0IGNvbW1pdCAtbSBmMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVycnktcGljayBzdWNjZWVkcyB3aXRoIHJlbmFtZSBhY3Jvc3MgRC9GIGNvbmZsaWN0cycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NldHVwIHJlbmFtZSB3aXRoIGZpbGUgb24gb25lIHNpZGUgbWF0Y2hpbmcgZGlyZWN0b3J5IG5hbWUgb24gb3RoZXInICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmljay10ZXN0Y2FzZSAmJgorCWdpdCBybSAtcmYgLiAmJgorCisJPmVtcHR5ICYmCisJZ2l0IGFkZCBlbXB0eSAmJgorCWdpdCBjb21taXQgLW0gIkVtcHR5IGZpbGUiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2ltcGxlICYmCisJbXYgZW1wdHkgZmlsZSAmJgorCW1rZGlyIGVtcHR5ICYmCisJbXYgZmlsZSBlbXB0eSAmJgorCWdpdCBhZGQgZW1wdHkvZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIkVtcHR5IGZpbGUgdW5kZXIgZW1wdHkgZGlyIiAmJgorCisJZWNobyBjb250ZW50ID5uZXdmaWxlICYmCisJZ2l0IGFkZCBuZXdmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiTmV3IGZpbGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZXJyeS1waWNrIHN1Y2NlZWRzIHdpdGggd2FzX2FfZGlyL2ZpbGUgLT4gd2FzX2FfZGlyIChyZXNvbHZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLXEgbmljay10ZXN0Y2FzZV4wICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tc3RyYXRlZ3k9cmVzb2x2ZSBzaW1wbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlcnJ5LXBpY2sgc3VjY2VlZHMgd2l0aCB3YXNfYV9kaXIvZmlsZSAtPiB3YXNfYV9kaXIgKHJlY3Vyc2l2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1xIG5pY2stdGVzdGNhc2VeMCAmJgorCWdpdCBjaGVycnktcGljayAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSBzaW1wbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2V0dXAgcmVuYW1lIHdpdGggZmlsZSBvbiBvbmUgc2lkZSBtYXRjaGluZyBkaWZmZXJlbnQgZGlybmFtZSBvbiBvdGhlcicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbWVyZ2VtZSAmJgorCWdpdCBybSAtcmYgLiAmJgorCisJbWtkaXIgc3ViICYmCisJbWtkaXIgb3RoZXJzdWIgJiYKKwllY2hvIGNvbnRlbnQgPiBzdWIvZmlsZSAmJgorCWVjaG8gZm9vID4gb3RoZXJzdWIvd2hhdGV2ZXIgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbW9uIGNvbW1pdCIgJiYKKworCWdpdCBybSAtcmYgb3RoZXJzdWIgJiYKKwlnaXQgbXYgc3ViL2ZpbGUgb3RoZXJzdWIgJiYKKwlnaXQgY29tbWl0IC1tICJDb21taXQgdG8gbWVyZ2UiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbmV3aGVhZCBtZXJnZW1lfjEgJiYKKwk+aW5kZXBlbmRlbnQtY2hhbmdlICYmCisJZ2l0IGFkZCBpbmRlcGVuZGVudC1jaGFuZ2UgJiYKKwlnaXQgY29tbWl0IC1tICJDb21wbGV0ZWx5IHVucmVsYXRlZCBjaGFuZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZXJyeS1waWNrIHdpdGggcmVuYW1lIHRvIGRpZmZlcmVudCBEL0YgY29uZmxpY3Qgc3VjY2VlZHMgKHJlc29sdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtcSBuZXdoZWFkXjAgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1zdHJhdGVneT1yZXNvbHZlIG1lcmdlbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlcnJ5LXBpY2sgd2l0aCByZW5hbWUgdG8gZGlmZmVyZW50IEQvRiBjb25mbGljdCBzdWNjZWVkcyAocmVjdXJzaXZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLXEgbmV3aGVhZF4wICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIG1lcmdlbWUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTEwLWNoZXJyeS1waWNrLXNlcXVlbmNlLnNoIGIvdC90MzUxMC1jaGVycnktcGljay1zZXF1ZW5jZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41Yjk0ZmRhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzUxMC1jaGVycnktcGljay1zZXF1ZW5jZS5zaApAQCAtMCwwICsxLDY2MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY2hlcnJ5LXBpY2sgY29udGludWF0aW9uIGZlYXR1cmVzCisKKyArICBjb25mbGljdGluZzogcmV3cml0ZXMgdW5yZWxhdGVkIHRvIGNvbmZsaWN0aW5nCisgICsgeWV0YW5vdGhlcnBpY2s6IHJld3JpdGVzIGZvbyB0byBlCisgICsgYW5vdGhlcnBpY2s6IHJld3JpdGVzIGZvbyB0byBkCisgICsgcGlja2VkOiByZXdyaXRlcyBmb28gdG8gYworICArIHVucmVsYXRlZHBpY2s6IHJld3JpdGVzIHVucmVsYXRlZCB0byByZWFsbHl1bnJlbGF0ZWQKKyAgKyBiYXNlOiByZXdyaXRlcyBmb28gdG8gYgorICArIGluaXRpYWw6IHdyaXRlcyBmb28gYXMgYSwgdW5yZWxhdGVkIGFzIHVucmVsYXRlZAorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFJlcGVhdCBmaXJzdCBtYXRjaCAxMCB0aW1lcworX3IxMD0nXDFcMVwxXDFcMVwxXDFcMVwxXDEnCisKK3ByaXN0aW5lX2RldGFjaCAoKSB7CisJZ2l0IGNoZXJyeS1waWNrIC0tcXVpdCAmJgorCWdpdCBjaGVja291dCAtZiAiJDFeMCIgJiYKKwlnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQgSEVBRCAmJgorCWdpdCBjbGVhbiAtZCAtZiAtZiAtcSAteAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29uZmlnIGFkdmljZS5kZXRhY2hlZGhlYWQgZmFsc2UgJiYKKwllY2hvIHVucmVsYXRlZCA+dW5yZWxhdGVkICYmCisJZ2l0IGFkZCB1bnJlbGF0ZWQgJiYKKwl0ZXN0X2NvbW1pdCBpbml0aWFsIGZvbyBhICYmCisJdGVzdF9jb21taXQgYmFzZSBmb28gYiAmJgorCXRlc3RfY29tbWl0IHVucmVsYXRlZHBpY2sgdW5yZWxhdGVkIHJlYWxseXVucmVsYXRlZCAmJgorCXRlc3RfY29tbWl0IHBpY2tlZCBmb28gYyAmJgorCXRlc3RfY29tbWl0IGFub3RoZXJwaWNrIGZvbyBkICYmCisJdGVzdF9jb21taXQgeWV0YW5vdGhlcnBpY2sgZm9vIGUgJiYKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0IGNvbmZsaWN0aW5nIHVucmVsYXRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBwZXJzaXN0cyBkYXRhIG9uIGZhaWx1cmUnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgLXMgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvc2VxdWVuY2VyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9zZXF1ZW5jZXIvaGVhZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvc2VxdWVuY2VyL3RvZG8gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3NlcXVlbmNlci9vcHRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIG1pZC1jaGVycnktcGljay1zZXF1ZW5jZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJdGVzdF9jbXBfcmV2IHBpY2tlZCBDSEVSUllfUElDS19IRUFEICYmCisJIyAib29wcywgSSBmb3Jnb3QgdGhhdCB0aGVzZSBwYXRjaGVzIHJlbHkgb24gdGhlIGNoYW5nZSBmcm9tIGJhc2UiCisJZ2l0IGNoZWNrb3V0IEhFQUQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIGJhc2UgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBhbm90aGVycGljaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBwZXJzaXN0cyBvcHRzIGNvcnJlY3RseScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJIyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc2Vzc2lvbiB0byBjaGVycnktcGljayBhIHNlcXVlbmNlCisJIyBnZXRzIGludGVycnVwdGVkLCB1c2UgYSBoaWdoLWVub3VnaCBudW1iZXIgdGhhdCBpcyBsYXJnZXIKKwkjIHRoYW4gdGhlIG51bWJlciBvZiBwYXJlbnRzIG9mIGFueSBjb21taXQgd2UgaGF2ZSBjcmVhdGVkCisJbWFpbmxpbmU9NCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayAtcyAtbSAkbWFpbmxpbmUgLS1zdHJhdGVneT1yZWN1cnNpdmUgLVggcGF0aWVuY2UgLVggb3VycyBpbml0aWFsLi5hbm90aGVycGljayAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9zZXF1ZW5jZXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3NlcXVlbmNlci9oZWFkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9zZXF1ZW5jZXIvdG9kbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvc2VxdWVuY2VyL29wdHMgJiYKKwllY2hvICJ0cnVlIiA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWZpbGU9LmdpdC9zZXF1ZW5jZXIvb3B0cyAtLWdldC1hbGwgb3B0aW9ucy5zaWdub2ZmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyAiJG1haW5saW5lIiA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWZpbGU9LmdpdC9zZXF1ZW5jZXIvb3B0cyAtLWdldC1hbGwgb3B0aW9ucy5tYWlubGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gInJlY3Vyc2l2ZSIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1maWxlPS5naXQvc2VxdWVuY2VyL29wdHMgLS1nZXQtYWxsIG9wdGlvbnMuc3RyYXRlZ3kgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcGF0aWVuY2UKKwlvdXJzCisJRU9GCisJZ2l0IGNvbmZpZyAtLWZpbGU9LmdpdC9zZXF1ZW5jZXIvb3B0cyAtLWdldC1hbGwgb3B0aW9ucy5zdHJhdGVneS1vcHRpb24gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgY2xlYW5zIHVwIHNlcXVlbmNlciBzdGF0ZSB1cG9uIHN1Y2Nlc3MnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayBpbml0aWFsLi5waWNrZWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtLXNraXAgcmVxdWlyZXMgY2hlcnJ5LXBpY2sgaW4gcHJvZ3Jlc3MnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLXNraXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IC0tc2tpcCByZXF1aXJlcyByZXZlcnQgaW4gcHJvZ3Jlc3MnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgLS1za2lwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tc2tpcCB0byBza2lwIGNvbW1pdCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGFub3RoZXJwaWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCAtLXNraXAgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1za2lwICYmCisJdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvQ0hFUlJZX1BJQ0tfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgLS1za2lwIHRvIHNraXAgY29tbWl0JyAnCisJcHJpc3RpbmVfZGV0YWNoIGFub3RoZXJwaWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBhbm90aGVycGlja34xICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCAmJgorCWdpdCByZXZlcnQgLS1za2lwICYmCisJdGVzdF9jbXBfcmV2IGFub3RoZXJwaWNrIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2tpcCAiZW1wdHkiIGNvbW1pdCcgJworCXByaXN0aW5lX2RldGFjaCBwaWNrZWQgJiYKKwl0ZXN0X2NvbW1pdCBkdW1teSBmb28gZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBhbm90aGVycGljayAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImdpdCBjaGVycnktcGljayAtLXNraXAiIGVyciAmJgorCWdpdCBjaGVycnktcGljayAtLXNraXAgJiYKKwl0ZXN0X2NtcF9yZXYgZHVtbXkgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwIGEgY29tbWl0IGFuZCBjaGVjayBpZiByZXN0IG9mIHNlcXVlbmNlIGlzIGNvcnJlY3QnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWVjaG8gZSA+ZXhwZWN0ICYmCisJY2F0ID5leHBlY3QubG9nIDw8LUVPRiAmJgorCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQlmb28KKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JZm9vCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCXVucmVsYXRlZAorCU9CSklECisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlmb28KKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCXVucmVsYXRlZAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBiYXNlLi55ZXRhbm90aGVycGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLXNraXAgJiYKKwllY2hvIGQgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1zdGRpbiB8CisJCXNlZCAicy8kT0lEX1JFR0VYL09CSklEL2ciCisJfSA+YWN0dWFsLmxvZyAmJgorCXRlc3RfY21wIGV4cGVjdCBmb28gJiYKKwl0ZXN0X2NtcCBleHBlY3QubG9nIGFjdHVhbC5sb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgYWR2aWNlIHdoZW4gd2UgbW92ZSBIRUFEIGJ5IGNvbW1pdHRpbmcnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWVycm9yOiB0aGVyZSBpcyBub3RoaW5nIHRvIHNraXAKKwloaW50OiBoYXZlIHlvdSBjb21taXR0ZWQgYWxyZWFkeT8KKwloaW50OiB0cnkgImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlIgorCWZhdGFsOiBjaGVycnktcGljayBmYWlsZWQKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4ueWV0YW5vdGhlcnBpY2sgJiYKKwllY2hvIGMgPmZvbyAmJgorCWdpdCBjb21taXQgLWEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L0NIRVJSWV9QSUNLX0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwIDI+YWR2aWNlICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhZHZpY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VsZWN0aXZlbHkgYWR2aXNlIC0tc2tpcCB3aGlsZSBsYXVuY2hpbmcgYW5vdGhlciBzZXF1ZW5jZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZXJyb3I6IGNoZXJyeS1waWNrIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MKKwloaW50OiB0cnkgImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQgfCAtLXF1aXQpIgorCWZhdGFsOiBjaGVycnktcGljayBmYWlsZWQKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkLi55ZXRhbm90aGVycGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQuLnlldGFub3RoZXJwaWNrIDI+YWR2aWNlICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhZHZpY2UgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwllcnJvcjogY2hlcnJ5LXBpY2sgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcworCWhpbnQ6IHRyeSAiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tcXVpdCkiCisJZmF0YWw6IGNoZXJyeS1waWNrIGZhaWxlZAorCUVPRgorCWdpdCByZXNldCAtLW1lcmdlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZC4ueWV0YW5vdGhlcnBpY2sgMj5hZHZpY2UgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFkdmljZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBza2lwcGluZyBjb21taXQgYnV0IG5vdCBhYm9ydCBmb3IgYSBuZXcgaGlzdG9yeScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZXJyb3I6IGNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuCisJZmF0YWw6IGNoZXJyeS1waWNrIGZhaWxlZAorCUVPRgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBuZXdfZGlzY29ubmVjdGVkICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBhbm90aGVycGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLWFib3J0IDI+YWR2aWNlICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWR2aWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IHNraXBwaW5nIHN0b3BwZWQgY2hlcnJ5LXBpY2sgYmVjYXVzZSBvZiB1bnRyYWNrZWQgZmlsZSBtb2RpZmljYXRpb25zJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgcm0gLS1jYWNoZWQgdW5yZWxhdGVkICYmCisJZ2l0IGNvbW1pdCAtbSAidW50cmFjayB1bnJlbGF0ZWQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGluaXRpYWwgYmFzZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCWdpdCBjaGVycnktcGljayAtLXNraXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1xdWl0IGRvZXMgbm90IGNvbXBsYWluIHdoZW4gbm8gY2hlcnJ5LXBpY2sgaXMgaW4gcHJvZ3Jlc3MnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayAtLXF1aXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYm9ydCByZXF1aXJlcyBjaGVycnktcGljayBpbiBwcm9ncmVzcycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1xdWl0IGNsZWFucyB1cCBzZXF1ZW5jZXIgc3RhdGUnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4ucGlja2VkICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tcXVpdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9DSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcXVpdCBrZWVwcyBIRUFEIGFuZCBjb25mbGljdGVkIGluZGV4IGludGFjdCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQl1bnJlbGF0ZWQKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZm9vCisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQl1bnJlbGF0ZWQKKwlFT0YKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLnBpY2tlZCAmJgorCWdpdCBjaGVycnktcGljayAtLXF1aXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tc3RkaW4gfAorCQlzZWQgInMvJE9JRF9SRUdFWC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYm9ydCB0byBjYW5jZWwgbXVsdGlwbGUgY2hlcnJ5LXBpY2snICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9DSEVSUllfUElDS19IRUFEICYmCisJdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFib3J0IHRvIGNhbmNlbCBzaW5nbGUgY2hlcnJ5LXBpY2snICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYm9ydCBkb2VzIG5vdCB1bnNhZmVseSBjaGFuZ2UgSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCBhbm90aGVycGljayAmJgorCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgYW5vdGhlcnBpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCIgYWN0dWFsICYmCisJdGVzdF9jbXBfcmV2IGJhc2UgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtLWFib3J0IHRvIGNhbmNlbCBtdWx0aXBsZSByZXZlcnQnICcKKwlwcmlzdGluZV9kZXRhY2ggYW5vdGhlcnBpY2sgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHJldmVydCBiYXNlLi5waWNrZWQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9DSEVSUllfUElDS19IRUFEICYmCisJdGVzdF9jbXBfcmV2IGFub3RoZXJwaWNrIEhFQUQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IC0tYWJvcnQgd29ya3MsIHRvbycgJworCXByaXN0aW5lX2RldGFjaCBhbm90aGVycGljayAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcmV2ZXJ0IGJhc2UuLnBpY2tlZCAmJgorCWdpdCByZXZlcnQgLS1hYm9ydCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJdGVzdF9jbXBfcmV2IGFub3RoZXJwaWNrIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYm9ydCB0byBjYW5jZWwgc2luZ2xlIHJldmVydCcgJworCXByaXN0aW5lX2RldGFjaCBhbm90aGVycGljayAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcmV2ZXJ0IHBpY2tlZCAmJgorCWdpdCByZXZlcnQgLS1hYm9ydCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJdGVzdF9jbXBfcmV2IGFub3RoZXJwaWNrIEhFQUQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYm9ydCBrZWVwcyB1bnJlbGF0ZWQgY2hhbmdlLCBlYXN5IGNhc2UnICcKKwlwcmlzdGluZV9kZXRhY2ggdW5yZWxhdGVkcGljayAmJgorCWVjaG8gY2hhbmdlZCA+ZXhwZWN0ICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBwaWNrZWQuLnlldGFub3RoZXJwaWNrICYmCisJZWNobyBjaGFuZ2VkID51bnJlbGF0ZWQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCAmJgorCXRlc3RfY21wIGV4cGVjdCB1bnJlbGF0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYm9ydCByZWZ1c2VzIHRvIGNsb2JiZXIgdW5yZWxhdGVkIGNoYW5nZSwgaGFyZGVyIGNhc2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWVjaG8gY2hhbmdlZCA+ZXhwZWN0ICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBiYXNlLi5hbm90aGVycGljayAmJgorCWVjaG8gY2hhbmdlZCA+dW5yZWxhdGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdW5yZWxhdGVkICYmCisJZ2l0IHJldi1saXN0IEhFQUQgPmxvZyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgbG9nICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWdpdCBjaGVja291dCB1bnJlbGF0ZWQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgc3RpbGwgd3JpdGVzIHNlcXVlbmNlciBzdGF0ZSB3aGVuIG9uZSBjb21taXQgaXMgbGVmdCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBiYXNlLi5waWNrZWQgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvc2VxdWVuY2VyICYmCisJZWNobyAicmVzb2x2ZWQiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1zdGRpbiB8CisJCXNlZCAicy8kT0lEX1JFR0VYL09CSklEL2ciCisJfSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQlmb28KKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JdW5yZWxhdGVkCisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWZvbworCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJdW5yZWxhdGVkCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFib3J0IGFmdGVyIGxhc3QgY29tbWl0IGluIHNlcXVlbmNlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLnBpY2tlZCAmJgorCWdpdCBjaGVycnktcGljayAtLWFib3J0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L0NIRVJSWV9QSUNLX0hFQUQgJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGRvZXMgbm90IGltcGxpY2l0bHkgc3RvbXAgYW4gZXhpc3Rpbmcgb3BlcmF0aW9uJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLmdpdC9zZXF1ZW5jZXIgPmV4cGVjdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayB1bnJlbGF0ZWRwaWNrICYmCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLmdpdC9zZXF1ZW5jZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSBjb21wbGFpbnMgd2hlbiBubyBjaGVycnktcGljayBpcyBpbiBwcm9ncmVzcycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSBjb21wbGFpbnMgd2hlbiB0aGVyZSBhcmUgdW5yZXNvbHZlZCBjb25mbGljdHMnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIG9mIHNpbmdsZSBjaGVycnktcGljaycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZWNobyBjID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJZWNobyBjID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgZm9vICYmCisJdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRF4gJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgb2Ygc2luZ2xlIHJldmVydCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZWNobyByZXNvbHZlZCA+ZXhwZWN0ICYmCisJZWNobyAiUmV2ZXJ0IFwicGlja2VkXCIiID5leHBlY3QubXNnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBwaWNrZWQgJiYKKwllY2hvIHJlc29sdmVkID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEICYmCisJdGVzdF9jbXAgZXhwZWN0IGZvbyAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUReICYmCisJZ2l0IGRpZmYtdHJlZSAtcyAtLXByZXR0eT10Zm9ybWF0OiVzIEhFQUQgPm1zZyAmJgorCXRlc3RfY21wIGV4cGVjdC5tc2cgbXNnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBSRVZFUlRfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIGFmdGVyIHJlc29sdmluZyBjb25mbGljdHMnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWVjaG8gZCA+ZXhwZWN0ICYmCisJY2F0ID5leHBlY3QubG9nIDw8LVxFT0YgJiYKKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JZm9vCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCWZvbworCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQl1bnJlbGF0ZWQKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZm9vCisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQl1bnJlbGF0ZWQKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvIGMgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1zdGRpbiB8CisJCXNlZCAicy8kT0lEX1JFR0VYL09CSklEL2ciCisJfSA+YWN0dWFsLmxvZyAmJgorCXRlc3RfY21wIGV4cGVjdCBmb28gJiYKKwl0ZXN0X2NtcCBleHBlY3QubG9nIGFjdHVhbC5sb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSBhZnRlciByZXNvbHZpbmcgY29uZmxpY3RzIGFuZCBjb21taXR0aW5nJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyAiYyIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1zdGRpbiB8CisJCXNlZCAicy8kT0lEX1JFR0VYL09CSklEL2ciCisJfSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQlmb28KKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JZm9vCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCXVucmVsYXRlZAorCU9CSklECisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlmb28KKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCXVucmVsYXRlZAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSBhc2tzIGZvciBoZWxwIGFmdGVyIHJlc29sdmluZyBwYXRjaCB0byBuaWwnICcKKwlwcmlzdGluZV9kZXRhY2ggY29uZmxpY3RpbmcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgaW5pdGlhbC4ucGlja2VkICYmCisKKwl0ZXN0X2NtcF9yZXYgdW5yZWxhdGVkcGljayBDSEVSUllfUElDS19IRUFEICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gdW5yZWxhdGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgMj5tc2cgJiYKKwl0ZXN0X2kxOG5ncmVwICJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5IiBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IGFkdmljZSBhbmQgc2tpcCBuaWwgcGF0Y2gnICcKKwlwcmlzdGluZV9kZXRhY2ggY29uZmxpY3RpbmcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgaW5pdGlhbC4ucGlja2VkICYmCisKKwlnaXQgY2hlY2tvdXQgSEVBRCAtLSB1bnJlbGF0ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCWdpdCByZXNldCAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisKKwlnaXQgcmV2LWxpc3QgaW5pdGlhbC4uSEVBRCA+Y29tbWl0cyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgY29tbWl0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIHJlc3BlY3RzIG9wdHMnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgLXggYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvICJjIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YW5vdGhlcnBpY2tfbXNnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEfjEgPnBpY2tlZF9tc2cgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUR+MiA+dW5yZWxhdGVkcGlja19tc2cgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUR+MyA+aW5pdGlhbF9tc2cgJiYKKwkhIGdyZXAgImNoZXJyeSBwaWNrZWQgZnJvbSIgaW5pdGlhbF9tc2cgJiYKKwlncmVwICJjaGVycnkgcGlja2VkIGZyb20iIHVucmVsYXRlZHBpY2tfbXNnICYmCisJZ3JlcCAiY2hlcnJ5IHBpY2tlZCBmcm9tIiBwaWNrZWRfbXNnICYmCisJZ3JlcCAiY2hlcnJ5IHBpY2tlZCBmcm9tIiBhbm90aGVycGlja19tc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSBvZiBzaW5nbGUtcGljayByZXNwZWN0cyAteCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC14IHBpY2tlZCAmJgorCWVjaG8gYyA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5tc2cgJiYKKwlncmVwICJjaGVycnkgcGlja2VkIGZyb20iIG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIHJlc3BlY3RzIC14IGluIGZpcnN0IGNvbW1pdCBpbiBtdWx0aS1waWNrJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLXggcGlja2VkIGFub3RoZXJwaWNrICYmCisJZWNobyBjID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReID5tc2cgJiYKKwlwaWNrZWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHBpY2tlZCkgJiYKKwlncmVwICJjaGVycnkgcGlja2VkIGZyb20uKiRwaWNrZWQiIG1zZworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICctLXNpZ25vZmYgaXMgYXV0b21hdGljYWxseSBwcm9wYWdhdGVkIHRvIHJlc29sdmVkIGNvbmZsaWN0JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIC0tc2lnbm9mZiBiYXNlLi5hbm90aGVycGljayAmJgorCWVjaG8gImMiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5hbm90aGVycGlja19tc2cgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUR+MSA+cGlja2VkX21zZyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRH4yID51bnJlbGF0ZWRwaWNrX21zZyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRH4zID5pbml0aWFsX21zZyAmJgorCSEgZ3JlcCAiU2lnbmVkLW9mZi1ieToiIGluaXRpYWxfbXNnICYmCisJZ3JlcCAiU2lnbmVkLW9mZi1ieToiIHVucmVsYXRlZHBpY2tfbXNnICYmCisJISBncmVwICJTaWduZWQtb2ZmLWJ5OiIgcGlja2VkX21zZyAmJgorCWdyZXAgIlNpZ25lZC1vZmYtYnk6IiBhbm90aGVycGlja19tc2cKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnLS1zaWdub2ZmIGRyb3BwZWQgZm9yIGltcGxpY2l0IGNvbW1pdCBvZiByZXNvbHV0aW9uLCBtdWx0aS1waWNrIGNhc2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtcyBwaWNrZWQgYW5vdGhlcnBpY2sgJiYKKwllY2hvIGMgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKworCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEXl4gJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReID5tc2cgJiYKKwkhIGdyZXAgU2lnbmVkLW9mZi1ieTogbXNnCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3NpZ24tb2ZmIG5lZWRzIHRvIGJlIHJlYWZmaXJtZWQgYWZ0ZXIgY29uZmxpY3QgcmVzb2x1dGlvbiwgc2luZ2xlLXBpY2sgY2FzZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC1zIHBpY2tlZCAmJgorCWVjaG8gYyA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRCAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUReICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5tc2cgJiYKKwkhIGdyZXAgU2lnbmVkLW9mZi1ieTogbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hbGZvcm1lZCBpbnN0cnVjdGlvbiBzaGVldCAxJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyAicmVzb2x2ZWQiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgJiYKKwlzZWQgInMvcGljayAvcGljay8iIC5naXQvc2VxdWVuY2VyL3RvZG8gPm5ld19zaGVldCAmJgorCWNwIG5ld19zaGVldCAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFsZm9ybWVkIGluc3RydWN0aW9uIHNoZWV0IDInICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvICJyZXNvbHZlZCIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAmJgorCXNlZCAicy9waWNrL3JldmVydC8iIC5naXQvc2VxdWVuY2VyL3RvZG8gPm5ld19zaGVldCAmJgorCWNwIG5ld19zaGVldCAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgY29tbWl0IHNldCAobm8gY29tbWl0cyB0byB3YWxrKScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgY29tbWl0IHNldCAoY3VsbGVkIGR1cmluZyB3YWxrKScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGNoZXJyeS1waWNrIC0yIC0tYXV0aG9yPW5vLnN1Y2guYXV0aG9yIGJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFsZm9ybWVkIGluc3RydWN0aW9uIHNoZWV0IDMnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvICJyZXNvbHZlZCIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAmJgorCXNlZCAicy9waWNrIFwoWzAtOWEtZl0qXCkvcGljayAkX3IxMC8iIC5naXQvc2VxdWVuY2VyL3RvZG8gPm5ld19zaGVldCAmJgorCWNwIG5ld19zaGVldCAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5zdHJ1Y3Rpb24gc2hlZXQsIGZhdC1maW5nZXJzIHZlcnNpb24nICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvICJjIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisJc2VkICJzL3BpY2sgXChbMC05YS1mXSpcKS9waWNrIAkgXDEgCS8iIC5naXQvc2VxdWVuY2VyL3RvZG8gPm5ld19zaGVldCAmJgorCWNwIG5ld19zaGVldCAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGRlc2NyaXB0aW9ucyBpbiBpbnNuIHNoZWV0IGFyZSBvcHRpb25hbCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBiYXNlLi5hbm90aGVycGljayAmJgorCWVjaG8gImMiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgJiYKKwljdXQgLWQiICIgLWYxLDIgLmdpdC9zZXF1ZW5jZXIvdG9kbyA+bmV3X3NoZWV0ICYmCisJY3AgbmV3X3NoZWV0IC5naXQvc2VxdWVuY2VyL3RvZG8gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJZ2l0IHJldi1saXN0IEhFQUQgPmNvbW1pdHMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IGNvbW1pdHMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTExLWNoZXJyeS1waWNrLXguc2ggYi90L3QzNTExLWNoZXJyeS1waWNrLXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODRhNTg3ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MTEtY2hlcnJ5LXBpY2steC5zaApAQCAtMCwwICsxLDMyMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY2hlcnJ5LXBpY2sgLXggYW5kIC1zJworCisuIC4vdGVzdC1saWIuc2gKKworcHJpc3RpbmVfZGV0YWNoICgpIHsKKwlnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0ICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkMV4wIiAmJgorCWdpdCByZWFkLXRyZWUgLXUgLS1yZXNldCBIRUFEICYmCisJZ2l0IGNsZWFuIC1kIC1mIC1mIC1xIC14Cit9CisKK21lc2dfb25lX2xpbmU9J2Jhc2U6IGNvbW1pdCBtZXNzYWdlJworCittZXNnX25vX2Zvb3Rlcj0iJG1lc2dfb25lX2xpbmUKKworT25lV29yZEJvZHlUaGF0c05vdEEtUy1vLUIiCisKK21lc2dfd2l0aF9mb290ZXI9IiRtZXNnX25vX2Zvb3RlcgorCitTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KK1NpZ25lZC1vZmYtYnk6IEEuVS4gVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorU2lnbmVkLW9mZi1ieTogQi5VLiBUaG9yIDxidXRob3JAZXhhbXBsZS5jb20+IgorCittZXNnX2Jyb2tlbl9mb290ZXI9IiRtZXNnX25vX2Zvb3RlcgorCitUaGlzIGlzIG5vdCByZWNvZ25pemVkIGFzIGEgZm9vdGVyIGJlY2F1c2UgTXlmb290ZXIgaXMgbm90IGEgcmVjb2duaXplZCB0b2tlbi4KK015Zm9vdGVyOiBBLlUuIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4iCisKK21lc2dfd2l0aF9mb290ZXJfc29iPSIkbWVzZ193aXRoX2Zvb3RlcgorU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IgorCittZXNnX3dpdGhfY2hlcnJ5X2Zvb3Rlcj0iJG1lc2dfd2l0aF9mb290ZXJfc29iCisoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5KQorVGVzdGVkLWJ5OiBDLlUuIFRob3IgPGN1dGhvckBleGFtcGxlLmNvbT4iCisKK21lc2dfdW5jbGVhbj0iJG1lc2dfb25lX2xpbmUKKworCitsZWFkaW5nIGVtcHR5IGxpbmVzCisKKworY29uc2VjdXRpdmUgZW1wdHkgbGluZXMKKworIyBoYXNoIHRhZyBjb21tZW50CisKK3RyYWlsaW5nIGVtcHR5IGxpbmVzCisKKworIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29uZmlnIGFkdmljZS5kZXRhY2hlZGhlYWQgZmFsc2UgJiYKKwllY2hvIHVucmVsYXRlZCA+dW5yZWxhdGVkICYmCisJZ2l0IGFkZCB1bnJlbGF0ZWQgJiYKKwl0ZXN0X2NvbW1pdCBpbml0aWFsIGZvbyBhICYmCisJdGVzdF9jb21taXQgIiRtZXNnX29uZV9saW5lIiBmb28gYiBtZXNnLW9uZS1saW5lICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgIiRtZXNnX25vX2Zvb3RlciIgZm9vIGIgbWVzZy1uby1mb290ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiJG1lc2dfYnJva2VuX2Zvb3RlciIgZm9vIGIgbWVzZy1icm9rZW4tZm9vdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgIiRtZXNnX3dpdGhfZm9vdGVyIiBmb28gYiBtZXNnLXdpdGgtZm9vdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgIiRtZXNnX3dpdGhfZm9vdGVyX3NvYiIgZm9vIGIgbWVzZy13aXRoLWZvb3Rlci1zb2IgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiJG1lc2dfd2l0aF9jaGVycnlfZm9vdGVyIiBmb28gYiBtZXNnLXdpdGgtY2hlcnJ5LWZvb3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29uZmlnIGNvbW1pdC5jbGVhbnVwIHZlcmJhdGltICYmCisJdGVzdF9jb21taXQgIiRtZXNnX3VuY2xlYW4iIGZvbyBiIG1lc2ctdW5jbGVhbiAmJgorCXRlc3RfdW5jb25maWcgY29tbWl0LmNsZWFudXAgJiYKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0IGNvbmZsaWN0aW5nIHVucmVsYXRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAteCBpbnNlcnRzIGJsYW5rIGxpbmUgYWZ0ZXIgb25lIGxpbmUgc3ViamVjdCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgbWVzZy1vbmUtbGluZV4wKSAmJgorCWdpdCBjaGVycnktcGljayAteCBtZXNnLW9uZS1saW5lICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX29uZV9saW5lCisKKwkJKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgJHNoYTEpCisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXMgaW5zZXJ0cyBibGFuayBsaW5lIGFmdGVyIG9uZSBsaW5lIHN1YmplY3QnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayAtcyBtZXNnLW9uZS1saW5lICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX29uZV9saW5lCisKKwkJU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXMgaW5zZXJ0cyBibGFuayBsaW5lIGFmdGVyIG5vbi1jb25mb3JtaW5nIGZvb3RlcicgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZ2l0IGNoZXJyeS1waWNrIC1zIG1lc2ctYnJva2VuLWZvb3RlciAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkbWVzZ19icm9rZW5fZm9vdGVyCisKKwkJU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXMgcmVjb2duaXplcyB0cmFpbGVyIGNvbmZpZycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZ2l0IC1jICJ0cmFpbGVyLk15Zm9vdGVyLmlmZXhpc3RzPWFkZCIgY2hlcnJ5LXBpY2sgLXMgbWVzZy1icm9rZW4tZm9vdGVyICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX2Jyb2tlbl9mb290ZXIKKwkJU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXggaW5zZXJ0cyBibGFuayBsaW5lIHdoZW4gY29uZm9ybWluZyBmb290ZXIgbm90IGZvdW5kJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSBtZXNnLW5vLWZvb3Rlcl4wKSAmJgorCWdpdCBjaGVycnktcGljayAteCBtZXNnLW5vLWZvb3RlciAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkbWVzZ19ub19mb290ZXIKKworCQkoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAkc2hhMSkKKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtcyBpbnNlcnRzIGJsYW5rIGxpbmUgd2hlbiBjb25mb3JtaW5nIGZvb3RlciBub3QgZm91bmQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayAtcyBtZXNnLW5vLWZvb3RlciAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkbWVzZ19ub19mb290ZXIKKworCQlTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAteCAtcyBpbnNlcnRzIGJsYW5rIGxpbmUgd2hlbiBjb25mb3JtaW5nIGZvb3RlciBub3QgZm91bmQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIG1lc2ctbm8tZm9vdGVyXjApICYmCisJZ2l0IGNoZXJyeS1waWNrIC14IC1zIG1lc2ctbm8tZm9vdGVyICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX25vX2Zvb3RlcgorCisJCShjaGVycnkgcGlja2VkIGZyb20gY29tbWl0ICRzaGExKQorCQlTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtcyBhZGRzIHNvYiB3aGVuIGxhc3Qgc29iIGRvZXNudCBtYXRjaCBjb21taXR0ZXInICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayAtcyBtZXNnLXdpdGgtZm9vdGVyICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX3dpdGhfZm9vdGVyCisJCVNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCUVPRgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC14IC1zIGFkZHMgc29iIHdoZW4gbGFzdCBzb2IgZG9lc250IG1hdGNoIGNvbW1pdHRlcicgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgbWVzZy13aXRoLWZvb3Rlcl4wKSAmJgorCWdpdCBjaGVycnktcGljayAteCAtcyBtZXNnLXdpdGgtZm9vdGVyICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX3dpdGhfZm9vdGVyCisJCShjaGVycnkgcGlja2VkIGZyb20gY29tbWl0ICRzaGExKQorCQlTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtcyByZWZyYWlucyBmcm9tIGFkZGluZyBkdXBsaWNhdGUgdHJhaWxpbmcgc29iJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXMgbWVzZy13aXRoLWZvb3Rlci1zb2IgJiYKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJJG1lc2dfd2l0aF9mb290ZXJfc29iCisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXggLXMgYWRkcyBzb2IgZXZlbiB3aGVuIHRyYWlsaW5nIHNvYiBleGlzdHMgZm9yIGNvbW1pdHRlcicgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgbWVzZy13aXRoLWZvb3Rlci1zb2JeMCkgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXggLXMgbWVzZy13aXRoLWZvb3Rlci1zb2IgJiYKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJJG1lc2dfd2l0aF9mb290ZXJfc29iCisJCShjaGVycnkgcGlja2VkIGZyb20gY29tbWl0ICRzaGExKQorCQlTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAteCBoYW5kbGVzIGNvbW1pdHMgd2l0aCBubyBOTCBhdCBlbmQgb2YgbWVzc2FnZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJcHJpbnRmICJ0aXRsZVxuXG5TaWduZWQtb2ZmLWJ5OiBBIDxhQGV4YW1wbGUuY29tPiIgPm1zZyAmJgorCXNoYTE9JChnaXQgY29tbWl0LXRyZWUgLXAgaW5pdGlhbCBtZXNnLXdpdGgtZm9vdGVyXnt0cmVlfSA8bXNnKSAmJgorCWdpdCBjaGVycnktcGljayAteCAkc2hhMSAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKworCXByaW50ZiAiXG4oY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAlcylcbiIgJHNoYTEgPj5tc2cgJiYKKwl0ZXN0X2NtcCBtc2cgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC14IGhhbmRsZXMgY29tbWl0cyB3aXRoIG5vIGZvb3RlciBhbmQgbm8gTkwgYXQgZW5kIG9mIG1lc3NhZ2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXByaW50ZiAidGl0bGVcblxubm90IGEgZm9vdGVyIiA+bXNnICYmCisJc2hhMT0kKGdpdCBjb21taXQtdHJlZSAtcCBpbml0aWFsIG1lc2ctd2l0aC1mb290ZXJee3RyZWV9IDxtc2cpICYmCisJZ2l0IGNoZXJyeS1waWNrIC14ICRzaGExICYmCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCisJcHJpbnRmICJcblxuKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgJXMpXG4iICRzaGExID4+bXNnICYmCisJdGVzdF9jbXAgbXNnIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtcyBoYW5kbGVzIGNvbW1pdHMgd2l0aCBubyBOTCBhdCBlbmQgb2YgbWVzc2FnZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJcHJpbnRmICJ0aXRsZVxuXG5TaWduZWQtb2ZmLWJ5OiBBIDxhQGV4YW1wbGUuY29tPiIgPm1zZyAmJgorCXNoYTE9JChnaXQgY29tbWl0LXRyZWUgLXAgaW5pdGlhbCBtZXNnLXdpdGgtZm9vdGVyXnt0cmVlfSA8bXNnKSAmJgorCWdpdCBjaGVycnktcGljayAtcyAkc2hhMSAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKworCXByaW50ZiAiXG5TaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD5cbiIgPj5tc2cgJiYKKwl0ZXN0X2NtcCBtc2cgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC1zIGhhbmRsZXMgY29tbWl0cyB3aXRoIG5vIGZvb3RlciBhbmQgbm8gTkwgYXQgZW5kIG9mIG1lc3NhZ2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXByaW50ZiAidGl0bGVcblxubm90IGEgZm9vdGVyIiA+bXNnICYmCisJc2hhMT0kKGdpdCBjb21taXQtdHJlZSAtcCBpbml0aWFsIG1lc2ctd2l0aC1mb290ZXJee3RyZWV9IDxtc2cpICYmCisJZ2l0IGNoZXJyeS1waWNrIC1zICRzaGExICYmCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCisJcHJpbnRmICJcblxuU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+XG4iID4+bXNnICYmCisJdGVzdF9jbXAgbXNnIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAteCB0cmVhdHMgIihjaGVycnkgcGlja2VkIGZyb20uLi4iIGxpbmUgYXMgcGFydCBvZiBmb290ZXInICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIG1lc2ctd2l0aC1jaGVycnktZm9vdGVyXjApICYmCisJZ2l0IGNoZXJyeS1waWNrIC14IG1lc2ctd2l0aC1jaGVycnktZm9vdGVyICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX3dpdGhfY2hlcnJ5X2Zvb3RlcgorCQkoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAkc2hhMSkKKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtcyB0cmVhdHMgIihjaGVycnkgcGlja2VkIGZyb20uLi4iIGxpbmUgYXMgcGFydCBvZiBmb290ZXInICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayAtcyBtZXNnLXdpdGgtY2hlcnJ5LWZvb3RlciAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkbWVzZ193aXRoX2NoZXJyeV9mb290ZXIKKwkJU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXggLXMgdHJlYXRzICIoY2hlcnJ5IHBpY2tlZCBmcm9tLi4uIiBsaW5lIGFzIHBhcnQgb2YgZm9vdGVyJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSBtZXNnLXdpdGgtY2hlcnJ5LWZvb3Rlcl4wKSAmJgorCWdpdCBjaGVycnktcGljayAteCAtcyBtZXNnLXdpdGgtY2hlcnJ5LWZvb3RlciAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkbWVzZ193aXRoX2NoZXJyeV9mb290ZXIKKwkJKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgJHNoYTEpCisJCVNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCUVPRgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIHByZXNlcnZlcyBjb21taXQgbWVzc2FnZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJcHJpbnRmICIkbWVzZ191bmNsZWFuIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgbWVzZy11bmNsZWFuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGNoZXJyeS1waWNrIG1lc2ctdW5jbGVhbiAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC14IGNsZWFucyBjb21taXQgbWVzc2FnZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZ2l0IGNoZXJyeS1waWNrIC14IG1lc2ctdW5jbGVhbiAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwlwcmludGYgIiVzXG4oY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAlcylcbiIgXAorCQkiJG1lc2dfdW5jbGVhbiIgJChnaXQgcmV2LXBhcnNlIG1lc2ctdW5jbGVhbikgfAorCQkJZ2l0IHN0cmlwc3BhY2UgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXggcmVzcGVjdHMgY29tbWl0LmNsZWFudXAnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCAtYyBjb21taXQuY2xlYW51cD1zdHJpcCBjaGVycnktcGljayAteCBtZXNnLXVuY2xlYW4gJiYKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJcHJpbnRmICIlc1xuKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgJXMpXG4iIFwKKwkJIiRtZXNnX3VuY2xlYW4iICQoZ2l0IHJldi1wYXJzZSBtZXNnLXVuY2xlYW4pIHwKKwkJCWdpdCBzdHJpcHNwYWNlIC1zID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUxMi1jaGVycnktcGljay1zdWJtb2R1bGUuc2ggYi90L3QzNTEyLWNoZXJyeS1waWNrLXN1Ym1vZHVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZDc4Mjg3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzUxMi1jaGVycnktcGljay1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSw0OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZXJyeS1waWNrIGNhbiBoYW5kbGUgc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCisKK0tOT1dOX0ZBSUxVUkVfTk9GRl9NRVJHRV9ET0VTTlRfQ1JFQVRFX0VNUFRZX1NVQk1PRFVMRV9ESVI9MQorS05PV05fRkFJTFVSRV9OT0ZGX01FUkdFX0FUVEVNUFRTX1RPX01FUkdFX1JFTU9WRURfU1VCTU9EVUxFX0ZJTEVTPTEKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0IGNoZXJyeS1waWNrIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnJlbGF0ZWQgc3VibW9kdWxlL2ZpbGUgY29uZmxpY3QgaXMgaWdub3JlZCcgJworCXRlc3RfY3JlYXRlX3JlcG8gc3ViICYmCisKKwl0b3VjaCBzdWIvZmlsZSAmJgorCWdpdCAtQyBzdWIgYWRkIGZpbGUgJiYKKwlnaXQgLUMgc3ViIGNvbW1pdCAtbSAiYWRkIGEgZmlsZSBpbiBhIHN1Ym1vZHVsZSIgJiYKKworCXRlc3RfY3JlYXRlX3JlcG8gYV9yZXBvICYmCisJKAorCQljZCBhX3JlcG8gJiYKKwkJPmFfZmlsZSAmJgorCQlnaXQgYWRkIGFfZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgYSBmaWxlIiAmJgorCisJCWdpdCBicmFuY2ggdGVzdCAmJgorCQlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCisJCW1rZGlyIHN1YiAmJgorCQk+c3ViL2NvbnRlbnQgJiYKKwkJZ2l0IGFkZCBzdWIvY29udGVudCAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgYSByZWd1bGFyIGZvbGRlciB3aXRoIG5hbWUgc3ViIiAmJgorCisJCWVjaG8gIjEyMyIgPmFfZmlsZSAmJgorCQlnaXQgYWRkIGFfZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tICJtb2RpZnkgYSBmaWxlIiAmJgorCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWIgc3ViICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1YiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgYSBzdWJtb2R1bGUgaW5mbyBmb2xkZXIgd2l0aCBuYW1lIHN1YiIgJiYKKworCQlnaXQgY2hlcnJ5LXBpY2sgdGVzdAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTEzLXJldmVydC1zdWJtb2R1bGUuc2ggYi90L3QzNTEzLXJldmVydC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWUzOWZjZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MTMtcmV2ZXJ0LXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmV2ZXJ0IGNhbiBoYW5kbGUgc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCisKKyMgQ3JlYXRlIGEgcmV2ZXJ0IHRoYXQgbW92ZXMgZnJvbSBIRUFEIChpbmNsdWRpbmcgYW55IHRlc3QgbW9kaWZpY2F0aW9ucyB0bworIyB0aGUgd29yayB0cmVlKSB0byAkMSBieSBmaXJzdCBjaGVja2luZyBvdXQgJDEgYW5kIHJldmVydGluZyBpdC4gUmV2ZXJ0aW5nCisjIHRoZSByZXZlcnQgaXMgdGhlIHRyYW5zaXRpb24gd2UgdGVzdCBmb3IuIFdlIHRhciB0aGUgY3VycmVudCB3b3JrIHRyZWUKKyMgZmlyc3Qgc28gd2UgY2FuIHJlc3RvcmUgdGhlIHdvcmsgdHJlZSB0ZXN0IHNldHVwIGFmdGVyIGRvaW5nIHRoZSBjaGVja291dAorIyBhbmQgcmV2ZXJ0LiAgV2UgdGVzdCBoZXJlIHRoYXQgdGhlIHJlc3RvcmVkIHdvcmsgdHJlZSBjb250ZW50IGlzIGlkZW50aWNhbAorIyB0byB0aGF0IGF0IHRoZSBiZWdpbm5pbmcuIFRoZSBsYXN0IHJldmVydCBpcyB0aGVuIHRlc3RlZCBieSB0aGUgZnJhbWV3b3JrLgorZ2l0X3JldmVydCAoKSB7CisJZ2l0IHN0YXR1cyAtc3UgPmV4cGVjdCAmJgorCWxzIC0xcFIgKiA+PmV4cGVjdCAmJgorCXRhciBjZiAiJFRSQVNIX0RJUkVDVE9SWS90bXAudGFyIiAqICYmCisJZ2l0IGNoZWNrb3V0ICIkMSIgJiYKKwlnaXQgcmV2ZXJ0IEhFQUQgJiYKKwlybSAtcmYgKiAmJgorCXRhciB4ZiAiJFRSQVNIX0RJUkVDVE9SWS90bXAudGFyIiAmJgorCWdpdCBzdGF0dXMgLXN1ID5hY3R1YWwgJiYKKwlscyAtMXBSICogPj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJldmVydCBIRUFECit9CisKK0tOT1dOX0ZBSUxVUkVfTk9GRl9NRVJHRV9ET0VTTlRfQ1JFQVRFX0VNUFRZX1NVQk1PRFVMRV9ESVI9MQordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXRfcmV2ZXJ0IgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MTQtY2hlcnJ5LXBpY2stcmV2ZXJ0LWdwZy5zaCBiL3QvdDM1MTQtY2hlcnJ5LXBpY2stcmV2ZXJ0LWdwZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YjJlMjUwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzUxNC1jaGVycnktcGljay1yZXZlcnQtZ3BnLnNoCkBAIC0wLDAgKzEsODYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMjAgRG9hbiBUcmFuIENvbmcgRGFuaAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHtjaGVycnktcGljayxyZXZlcnR9IC0tW25vLV1ncGctc2lnbicKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLWdwZy5zaCIKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIEdQRwordGhlbgorCXNraXBfYWxsPSdza2lwIGFsbCB0ZXN0IHtjaGVycnktcGljayxyZXZlcnR9IC0tW25vLV1ncGctc2lnbiwgZ3BnIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorCit0ZXN0X2dwZ19zaWduICgpIHsKKwlsb2NhbCBtdXN0X2ZhaWw9IHdpbGw9d2lsbCBmYWtlX2VkaXRvcj0KKwlpZiB0ZXN0ICJ4JDEiID0gInghIgorCXRoZW4KKwkJbXVzdF9mYWlsPXRlc3RfbXVzdF9mYWlsCisJCXdpbGw9Indvbid0IgorCQlzaGlmdAorCWZpCisJY29uZj0kMQorCWNtZD0kMgorCWNtaXQ9JDMKKwlzaGlmdCAzCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAkKiAkY21pdCB3aXRoIGNvbW1pdC5ncGdzaWduPSRjb25mICR3aWxsIHNpZ24gY29tbWl0IiAiCisJCWdpdCByZXNldCAtLWhhcmQgdGlwICYmCisJCWdpdCBjb25maWcgY29tbWl0LmdwZ3NpZ24gJGNvbmYgJiYKKwkJZ2l0ICRjbWQgJCogJGNtaXQgJiYKKwkJZ2l0IHJldi1saXN0IHRpcC4uID5yZXYtbGlzdCAmJgorCQkkbXVzdF9mYWlsIGdpdCB2ZXJpZnktY29tbWl0IFwkKGNhdCByZXYtbGlzdCkKKwkiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgb25lICYmCisJZ2l0IHN3aXRjaCAtYyBzaWRlICYmCisJdGVzdF9jb21taXQgc2lkZTEgJiYKKwl0ZXN0X2NvbW1pdCBzaWRlMiAmJgorCWdpdCBzd2l0Y2ggLSAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmCisJdGVzdF9jb21taXQgdGlwCisnCisKK3Rlc3RfZ3BnX3NpZ24gISBmYWxzZSBjaGVycnktcGljayAgIHNpZGUKK3Rlc3RfZ3BnX3NpZ24gISBmYWxzZSBjaGVycnktcGljayAuLnNpZGUKK3Rlc3RfZ3BnX3NpZ24gICB0cnVlICBjaGVycnktcGljayAgIHNpZGUKK3Rlc3RfZ3BnX3NpZ24gICB0cnVlICBjaGVycnktcGljayAuLnNpZGUKK3Rlc3RfZ3BnX3NpZ24gISB0cnVlICBjaGVycnktcGljayAgIHNpZGUgLS1uby1ncGctc2lnbgordGVzdF9ncGdfc2lnbiAhIHRydWUgIGNoZXJyeS1waWNrIC4uc2lkZSAtLW5vLWdwZy1zaWduCit0ZXN0X2dwZ19zaWduICEgdHJ1ZSAgY2hlcnJ5LXBpY2sgICBzaWRlIC0tZ3BnLXNpZ24gLS1uby1ncGctc2lnbgordGVzdF9ncGdfc2lnbiAhIHRydWUgIGNoZXJyeS1waWNrIC4uc2lkZSAtLWdwZy1zaWduIC0tbm8tZ3BnLXNpZ24KK3Rlc3RfZ3BnX3NpZ24gICBmYWxzZSBjaGVycnktcGljayAgIHNpZGUgLS1uby1ncGctc2lnbiAtLWdwZy1zaWduCit0ZXN0X2dwZ19zaWduICAgZmFsc2UgY2hlcnJ5LXBpY2sgLi5zaWRlIC0tbm8tZ3BnLXNpZ24gLS1ncGctc2lnbgordGVzdF9ncGdfc2lnbiAgIHRydWUgIGNoZXJyeS1waWNrICAgc2lkZSAtLWVkaXQKK3Rlc3RfZ3BnX3NpZ24gICB0cnVlICBjaGVycnktcGljayAuLnNpZGUgLS1lZGl0Cit0ZXN0X2dwZ19zaWduICEgdHJ1ZSAgY2hlcnJ5LXBpY2sgICBzaWRlIC0tZWRpdCAtLW5vLWdwZy1zaWduCit0ZXN0X2dwZ19zaWduICEgdHJ1ZSAgY2hlcnJ5LXBpY2sgLi5zaWRlIC0tZWRpdCAtLW5vLWdwZy1zaWduCit0ZXN0X2dwZ19zaWduICEgdHJ1ZSAgY2hlcnJ5LXBpY2sgICBzaWRlIC0tZWRpdCAtLWdwZy1zaWduIC0tbm8tZ3BnLXNpZ24KK3Rlc3RfZ3BnX3NpZ24gISB0cnVlICBjaGVycnktcGljayAuLnNpZGUgLS1lZGl0IC0tZ3BnLXNpZ24gLS1uby1ncGctc2lnbgordGVzdF9ncGdfc2lnbiAgIGZhbHNlIGNoZXJyeS1waWNrICAgc2lkZSAtLWVkaXQgLS1uby1ncGctc2lnbiAtLWdwZy1zaWduCit0ZXN0X2dwZ19zaWduICAgZmFsc2UgY2hlcnJ5LXBpY2sgLi5zaWRlIC0tZWRpdCAtLW5vLWdwZy1zaWduIC0tZ3BnLXNpZ24KKwordGVzdF9ncGdfc2lnbiAhIGZhbHNlIHJldmVydCBIRUFEICAtLWVkaXQKK3Rlc3RfZ3BnX3NpZ24gISBmYWxzZSByZXZlcnQgdHdvLi4gLS1lZGl0Cit0ZXN0X2dwZ19zaWduICAgdHJ1ZSAgcmV2ZXJ0IEhFQUQgIC0tZWRpdAordGVzdF9ncGdfc2lnbiAgIHRydWUgIHJldmVydCB0d28uLiAtLWVkaXQKK3Rlc3RfZ3BnX3NpZ24gISB0cnVlICByZXZlcnQgSEVBRCAgLS1lZGl0IC0tbm8tZ3BnLXNpZ24KK3Rlc3RfZ3BnX3NpZ24gISB0cnVlICByZXZlcnQgdHdvLi4gLS1lZGl0IC0tbm8tZ3BnLXNpZ24KK3Rlc3RfZ3BnX3NpZ24gISB0cnVlICByZXZlcnQgSEVBRCAgLS1lZGl0IC0tZ3BnLXNpZ24gLS1uby1ncGctc2lnbgordGVzdF9ncGdfc2lnbiAhIHRydWUgIHJldmVydCB0d28uLiAtLWVkaXQgLS1ncGctc2lnbiAtLW5vLWdwZy1zaWduCit0ZXN0X2dwZ19zaWduICAgZmFsc2UgcmV2ZXJ0IEhFQUQgIC0tZWRpdCAtLW5vLWdwZy1zaWduIC0tZ3BnLXNpZ24KK3Rlc3RfZ3BnX3NpZ24gICBmYWxzZSByZXZlcnQgdHdvLi4gLS1lZGl0IC0tbm8tZ3BnLXNpZ24gLS1ncGctc2lnbgordGVzdF9ncGdfc2lnbiAgIHRydWUgIHJldmVydCBIRUFEICAtLW5vLWVkaXQKK3Rlc3RfZ3BnX3NpZ24gICB0cnVlICByZXZlcnQgdHdvLi4gLS1uby1lZGl0Cit0ZXN0X2dwZ19zaWduICEgdHJ1ZSAgcmV2ZXJ0IEhFQUQgIC0tbm8tZWRpdCAtLW5vLWdwZy1zaWduCit0ZXN0X2dwZ19zaWduICEgdHJ1ZSAgcmV2ZXJ0IHR3by4uIC0tbm8tZWRpdCAtLW5vLWdwZy1zaWduCit0ZXN0X2dwZ19zaWduICEgdHJ1ZSAgcmV2ZXJ0IEhFQUQgIC0tbm8tZWRpdCAtLWdwZy1zaWduIC0tbm8tZ3BnLXNpZ24KK3Rlc3RfZ3BnX3NpZ24gISB0cnVlICByZXZlcnQgdHdvLi4gLS1uby1lZGl0IC0tZ3BnLXNpZ24gLS1uby1ncGctc2lnbgordGVzdF9ncGdfc2lnbiAgIGZhbHNlIHJldmVydCBIRUFEICAtLW5vLWVkaXQgLS1uby1ncGctc2lnbiAtLWdwZy1zaWduCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzYwMC1ybS5zaCBiL3QvdDM2MDAtcm0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjJjMDE2OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM2MDAtcm0uc2gKQEAgLTAsMCArMSw4OTYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgQ2FybCBELiBXb3J0aAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IG9mIHRoZSB2YXJpb3VzIG9wdGlvbnMgdG8gZ2l0IHJtLicKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgU2V0dXAgc29tZSBmaWxlcyB0byBiZSByZW1vdmVkLCBzb21lIHdpdGggZnVubnkgY2hhcmFjdGVycwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSW5pdGlhbGl6ZSB0ZXN0IGRpcmVjdG9yeScgJworCXRvdWNoIC0tIGZvbyBiYXIgYmF6ICJzcGFjZSBlbWJlZGRlZCIgLXEgJiYKKwlnaXQgYWRkIC0tIGZvbyBiYXIgYmF6ICJzcGFjZSBlbWJlZGRlZCIgLXEgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbm9ybWFsIGZpbGVzIgorJworCitpZiB0ZXN0X2hhdmVfcHJlcmVxICFGVU5OWU5BTUVTCit0aGVuCisJc2F5ICdZb3VyIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWxsb3cgdGFicyBpbiBmaWxlbmFtZXMuJworZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGVU5OWU5BTUVTICdhZGQgZmlsZXMgd2l0aCBmdW5ueSBuYW1lcycgJworCXRvdWNoIC0tICJ0YWIJZW1iZWRkZWQiICJuZXdsaW5lJHtMRn1lbWJlZGRlZCIgJiYKKwlnaXQgYWRkIC0tICJ0YWIJZW1iZWRkZWQiICJuZXdsaW5lJHtMRn1lbWJlZGRlZCIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZmlsZXMgd2l0aCB0YWJzIGFuZCBuZXdsaW5lcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUHJlLWNoZWNrIHRoYXQgZm9vIGV4aXN0cyBhbmQgaXMgaW4gaW5kZXggYmVmb3JlIGdpdCBybSBmb28nICcKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28gJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUZXN0IHRoYXQgZ2l0IHJtIGZvbyBzdWNjZWVkcycgJworCWdpdCBybSAtLWNhY2hlZCBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGVzdCB0aGF0IGdpdCBybSAtLWNhY2hlZCBmb28gc3VjY2VlZHMgaWYgdGhlIGluZGV4IG1hdGNoZXMgdGhlIGZpbGUnICcKKwllY2hvIGNvbnRlbnQgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJtIC0tY2FjaGVkIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUZXN0IHRoYXQgZ2l0IHJtIC0tY2FjaGVkIGZvbyBzdWNjZWVkcyBpZiB0aGUgaW5kZXggbWF0Y2hlcyB0aGUgZmlsZScgJworCWVjaG8gY29udGVudCA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tIGZvbyAmJgorCWVjaG8gIm90aGVyIGNvbnRlbnQiID5mb28gJiYKKwlnaXQgcm0gLS1jYWNoZWQgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Rlc3QgdGhhdCBnaXQgcm0gLS1jYWNoZWQgZm9vIGZhaWxzIGlmIHRoZSBpbmRleCBtYXRjaGVzIG5laXRoZXIgdGhlIGZpbGUgbm9yIEhFQUQnICcKKwllY2hvIGNvbnRlbnQgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSBmb28gLS1hbGxvdy1lbXB0eSAmJgorCWVjaG8gIm90aGVyIGNvbnRlbnQiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWVjaG8gInlldCBhbm90aGVyIGNvbnRlbnQiID5mb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gLS1jYWNoZWQgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Rlc3QgdGhhdCBnaXQgcm0gLS1jYWNoZWQgLWYgZm9vIHdvcmtzIGluIGNhc2Ugd2hlcmUgLS1jYWNoZWQgb25seSBkaWQgbm90JyAnCisJZWNobyBjb250ZW50ID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gZm9vIC0tYWxsb3ctZW1wdHkgJiYKKwllY2hvICJvdGhlciBjb250ZW50IiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwllY2hvICJ5ZXQgYW5vdGhlciBjb250ZW50IiA+Zm9vICYmCisJZ2l0IHJtIC0tY2FjaGVkIC1mIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQb3N0LWNoZWNrIHRoYXQgZm9vIGV4aXN0cyBidXQgaXMgbm90IGluIGluZGV4IGFmdGVyIGdpdCBybSBmb28nICcKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQcmUtY2hlY2sgdGhhdCBiYXIgZXhpc3RzIGFuZCBpcyBpbiBpbmRleCBiZWZvcmUgImdpdCBybSBiYXIiJyAnCisJdGVzdF9wYXRoX2lzX2ZpbGUgYmFyICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGVzdCB0aGF0ICJnaXQgcm0gYmFyIiBzdWNjZWVkcycgJworCWdpdCBybSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUG9zdC1jaGVjayB0aGF0IGJhciBkb2VzIG5vdCBleGlzdCBhbmQgaXMgbm90IGluIGluZGV4IGFmdGVyICJnaXQgcm0gLWYgYmFyIicgJworCXRlc3RfcGF0aF9pc19taXNzaW5nIGJhciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Rlc3QgdGhhdCAiZ2l0IHJtIC0tIC1xIiBzdWNjZWVkcyAocmVtb3ZlIGEgZmlsZSB0aGF0IGxvb2tzIGxpa2UgYW4gb3B0aW9uKScgJworCWdpdCBybSAtLSAtcQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZVTk5ZTkFNRVMgJ1Rlc3QgdGhhdCAiZ2l0IHJtIC1mIiBzdWNjZWVkcyB3aXRoIGVtYmVkZGVkIHNwYWNlLCB0YWIsIG9yIG5ld2xpbmUgY2hhcmFjdGVycy4nICcKKwlnaXQgcm0gLWYgInNwYWNlIGVtYmVkZGVkIiAidGFiCWVtYmVkZGVkIiAibmV3bGluZSR7TEZ9ZW1iZWRkZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0FOSVRZICdUZXN0IHRoYXQgImdpdCBybSAtZiIgZmFpbHMgaWYgaXRzIHJtIGZhaWxzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjaG1vZCA3NzUgLiIgJiYKKwljaG1vZCBhLXcgLiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSAtZiBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnV2hlbiB0aGUgcm0gaW4gImdpdCBybSAtZiIgZmFpbHMsIGl0IHNob3VsZCBub3QgcmVtb3ZlIHRoZSBmaWxlIGZyb20gdGhlIGluZGV4JyAnCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVtb3ZlIG5vbmV4aXN0ZW50IGZpbGUgd2l0aCAtLWlnbm9yZS11bm1hdGNoJyAnCisJZ2l0IHJtIC0taWdub3JlLXVubWF0Y2ggbm9uZXhpc3RlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInJtIiBjb21tYW5kIHByaW50ZWQnICcKKwllY2hvIGZyb3R6ID50ZXN0LWZpbGUgJiYKKwlnaXQgYWRkIHRlc3QtZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBmaWxlIGZvciBybSB0ZXN0IiAmJgorCWdpdCBybSB0ZXN0LWZpbGUgPnJtLW91dHB1dC5yYXcgJiYKKwlncmVwICJecm0gIiBybS1vdXRwdXQucmF3ID5ybS1vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHJtLW91dHB1dCAmJgorCXJtIC1mIHRlc3QtZmlsZSBybS1vdXRwdXQucmF3IHJtLW91dHB1dCAmJgorCWdpdCBjb21taXQgLW0gInJlbW92ZSBmaWxlIGZyb20gcm0gdGVzdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInJtIiBjb21tYW5kIHN1cHByZXNzZWQgd2l0aCAtLXF1aWV0JyAnCisJZWNobyBmcm90eiA+dGVzdC1maWxlICYmCisJZ2l0IGFkZCB0ZXN0LWZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZmlsZSBmb3Igcm0gLS1xdWlldCB0ZXN0IiAmJgorCWdpdCBybSAtLXF1aWV0IHRlc3QtZmlsZSA+cm0tb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHJtLW91dHB1dCAmJgorCXJtIC1mIHRlc3QtZmlsZSBybS1vdXRwdXQgJiYKKwlnaXQgY29tbWl0IC1tICJyZW1vdmUgZmlsZSBmcm9tIHJtIC0tcXVpZXQgdGVzdCIKKycKKworIyBOb3csIGZhaWx1cmUgY2FzZXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZS1hZGQgZm9vIGFuZCBiYXonICcKKwlnaXQgYWRkIGZvbyBiYXogJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbyBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTW9kaWZ5IGZvbyAtLSBybSBzaG91bGQgcmVmdXNlJyAnCisJZWNobyA+PmZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBmb28gYmF6ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZm9vICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYmF6ICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBmb28gYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01vZGlmaWVkIGZvbyAtLSBybSAtZiBzaG91bGQgd29yaycgJworCWdpdCBybSAtZiBmb28gYmF6ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZm9vICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYmF6ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZS1hZGQgZm9vIGFuZCBiYXogZm9yIEhFQUQgdGVzdHMnICcKKwllY2hvIGZyb3R6ID5mb28gJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCAtLSBiYXogJiYKKwlnaXQgYWRkIGZvbyBiYXogJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbyBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9vIGlzIGRpZmZlcmVudCBpbiBpbmRleCBmcm9tIEhFQUQgLS0gcm0gc2hvdWxkIHJlZnVzZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBmb28gYmF6ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZm9vICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYmF6ICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBmb28gYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1dCB3aXRoIC1mIGl0IHNob3VsZCB3b3JrLicgJworCWdpdCBybSAtZiBmb28gYmF6ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZm9vICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYmF6ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGJhegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2UgdG8gcmVtb3ZlIGNhY2hlZCBlbXB0eSBmaWxlIHdpdGggbW9kaWZpY2F0aW9ucycgJworCT5lbXB0eSAmJgorCWdpdCBhZGQgZW1wdHkgJiYKKwllY2hvIGNvbnRlbnQgPmVtcHR5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIC0tY2FjaGVkIGVtcHR5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBpbnRlbnQtdG8tYWRkIGZpbGUgd2l0aG91dCAtLWZvcmNlJyAnCisJZWNobyBjb250ZW50ID5pbnRlbnQtdG8tYWRkICYmCisJZ2l0IGFkZCAtTiBpbnRlbnQtdG8tYWRkICYmCisJZ2l0IHJtIC0tY2FjaGVkIGludGVudC10by1hZGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVjdXJzaXZlIHRlc3Qgc2V0dXAnICcKKwlta2RpciAtcCBmcm90eiAmJgorCWVjaG8gcWZ3ZnEgPmZyb3R6L25pdGZvbCAmJgorCWdpdCBhZGQgZnJvdHogJiYKKwlnaXQgY29tbWl0IC1tICJzdWJkaXIgdGVzdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVjdXJzaXZlIHdpdGhvdXQgLXIgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gZnJvdHogJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIGZyb3R6ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZnJvdHovbml0Zm9sCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlY3Vyc2l2ZSB3aXRoIC1yIGJ1dCBkaXJ0eScgJworCWVjaG8gcWZ3ZnEgPj5mcm90ei9uaXRmb2wgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gLXIgZnJvdHogJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIGZyb3R6ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZnJvdHovbml0Zm9sCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlY3Vyc2l2ZSB3aXRoIC1yIC1mJyAnCisJZ2l0IHJtIC1mIC1yIGZyb3R6ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZnJvdHovbml0Zm9sICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZnJvdHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVtb3ZlIG5vbmV4aXN0ZW50IGZpbGUgcmV0dXJucyBub256ZXJvIGV4aXQgc3RhdHVzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIG5vbmV4aXN0ZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NhbGwgInJtIiBmcm9tIG91dHNpZGUgdGhlIHdvcmsgdHJlZScgJworCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBzb21ldGhpbmcgPnNvbWVmaWxlICYmCisJCWdpdCBhZGQgc29tZWZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgZmlsZSIgJiYKKwkJKAorCQkJY2QgLi4gJiYKKwkJCWdpdCAtLWdpdC1kaXI9cmVwby8uZ2l0IC0td29yay10cmVlPXJlcG8gcm0gc29tZWZpbGUKKwkJKSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIHNvbWVmaWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZyZXNoIGluZGV4IGJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyB1cC10by1kYXRlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC04NjQwMCBmcm90ei9uaXRmb2wgJiYKKwlnaXQgcm0gZnJvdHovbml0Zm9sICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZnJvdHovbml0Zm9sCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nob2tpbmcgImdpdCBybSIgc2hvdWxkIG5vdCBsZXQgaXQgZGllIHdpdGggY3J1ZnQnICcKKwl0ZXN0X29pZF9pbml0ICYmCisJZ2l0IHJlc2V0IC1xIC0taGFyZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9pbmRleC5sb2NrICYmIGdpdCByZXNldCAtcSAtLWhhcmQiICYmCisJaT0wICYmCisJaGFzaD0kKHRlc3Rfb2lkIGRlYWRiZWVmKSAmJgorCXdoaWxlIHRlc3QgJGkgLWx0IDEyMDAwCisJZG8KKwkJZWNobyAiMTAwNjQ0ICRoYXNoIDAJc29tZS1maWxlLSRpIgorCQlpPSQoKCAkaSArIDEgKSkKKwlkb25lIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwkjIGdpdCBjb21tYW5kIGlzIGludGVudGlvbmFsbHkgcGxhY2VkIHVwc3RyZWFtIG9mIHBpcGUgdG8gaW5kdWNlIFNJR1BJUEUKKwlnaXQgcm0gLW4gInNvbWUtZmlsZS0qIiB8IDogJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L2luZGV4LmxvY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVzb2x2aW5nIGJ5IHJlbW92YWwgaXMgbm90IGEgd2FybmluZy13b3J0aHkgZXZlbnQnICcKKwlnaXQgcmVzZXQgLXEgLS1oYXJkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L2luZGV4LmxvY2sgbXNnICYmIGdpdCByZXNldCAtcSAtLWhhcmQiICYmCisJYmxvYj0kKGVjaG8gYmxvYiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCWZvciBzdGFnZSBpbiAxIDIgMworCWRvCisJCWVjaG8gIjEwMDY0NCAkYmxvYiAkc3RhZ2UJYmxvYiIKKwlkb25lIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlnaXQgcm0gYmxvYiA+bXNnIDI+JjEgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIm5lZWRzIG1lcmdlIiBtc2cgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLXMgLS1lcnJvci11bm1hdGNoIGJsb2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gcmVtb3ZlcyBzdWJkaXJlY3RvcmllcyByZWN1cnNpdmVseScgJworCW1rZGlyIC1wIGRpci9zdWJkaXIvc3Vic3ViZGlyICYmCisJZWNobyBjb250ZW50ID5kaXIvc3ViZGlyL3N1YnN1YmRpci9maWxlICYmCisJZ2l0IGFkZCBkaXIvc3ViZGlyL3N1YnN1YmRpci9maWxlICYmCisJZ2l0IHJtIC1mIGRpci9zdWJkaXIvc3Vic3ViZGlyL2ZpbGUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkaXIKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK00gIC5naXRtb2R1bGVzCitEICBzdWJtb2QKK0VPRgorCitjYXQgPmV4cGVjdC5tb2RpZmllZCA8PEVPRgorIE0gc3VibW9kCitFT0YKKworY2F0ID5leHBlY3QubW9kaWZpZWRfaW5zaWRlIDw8RU9GCisgbSBzdWJtb2QKK0VPRgorCitjYXQgPmV4cGVjdC5tb2RpZmllZF91bnRyYWNrZWQgPDxFT0YKKyA/IHN1Ym1vZAorRU9GCisKK2NhdCA+ZXhwZWN0LmNhY2hlZCA8PEVPRgorRCAgc3VibW9kCitFT0YKKworY2F0ID5leHBlY3QuYm90aF9kZWxldGVkPDxFT0YKK0QgIC5naXRtb2R1bGVzCitEICBzdWJtb2QKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSByZW1vdmVzIGVtcHR5IHN1Ym1vZHVsZXMgZnJvbSB3b3JrIHRyZWUnICcKKwlta2RpciBzdWJtb2QgJiYKKwloYXNoPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICIkaGFzaCIgc3VibW9kICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnVybCAuLy4gJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIucGF0aCBzdWJtb2QgJiYKKwlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIHN1Ym1vZHVsZSIgJiYKKwlnaXQgcm0gc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VibW9kICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi51cmwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIucGF0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSByZW1vdmVzIHJlbW92ZWQgc3VibW9kdWxlIGZyb20gaW5kZXggYW5kIC5naXRtb2R1bGVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJcm0gLXJmIHN1Ym1vZCAmJgorCWdpdCBybSBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnVybCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHJlbW92ZXMgd29yayB0cmVlIG9mIHVubW9kaWZpZWQgc3VibW9kdWxlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCBybSBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnVybCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHJlbW92ZXMgYSBzdWJtb2R1bGUgd2l0aCBhIHRyYWlsaW5nIC8nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgcm0gc3VibW9kLyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gZmFpbHMgd2hlbiBnaXZlbiBhIGZpbGUgd2l0aCBhIHRyYWlsaW5nIC8nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gZW1wdHkvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHN1Y2NlZWRzIHdoZW4gZ2l2ZW4gYSBkaXJlY3Rvcnkgd2l0aCBhIHRyYWlsaW5nIC8nICcKKwlnaXQgcm0gLXIgZnJvdHovCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgcG9wdWxhdGVkIHN1Ym1vZHVsZSB3aXRoIGRpZmZlcmVudCBIRUFEIGZhaWxzIHVubGVzcyBmb3JjZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgLUMgc3VibW9kIGNoZWNrb3V0IEhFQUReICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19kaXIgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QubW9kaWZpZWQgYWN0dWFsICYmCisJZ2l0IHJtIC1mIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gLS1jYWNoZWQgbGVhdmVzIHdvcmsgdHJlZSBvZiBwb3B1bGF0ZWQgc3VibW9kdWxlcyBhbmQgLmdpdG1vZHVsZXMgYWxvbmUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgcm0gLS1jYWNoZWQgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2RpciBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmNhY2hlZCBhY3R1YWwgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gLS1kcnktcnVuIGRvZXMgbm90IHRvdWNoIHRoZSBzdWJtb2R1bGUgb3IgLmdpdG1vZHVsZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgcm0gLW4gc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VibW9kLy5naXQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIGRvZXMgbm90IGNvbXBsYWluIHdoZW4gbm8gLmdpdG1vZHVsZXMgZmlsZSBpcyBmb3VuZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCBybSAuZ2l0bW9kdWxlcyAmJgorCWdpdCBybSBzdWJtb2QgPmFjdHVhbCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVyciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm90aF9kZWxldGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSB3aWxsIGVycm9yIG91dCBvbiBhIG1vZGlmaWVkIC5naXRtb2R1bGVzIGZpbGUgdW5sZXNzIHN0YWdlZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgZm9vLmJhciB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIHN1Ym1vZCA+YWN0dWFsIDI+YWN0dWFsLmVyciAmJgorCXRlc3RfZmlsZV9ub3RfZW1wdHkgYWN0dWFsLmVyciAmJgorCXRlc3RfcGF0aF9pc19kaXIgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VibW9kLy5naXQgJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0IC0tIHN1Ym1vZCAmJgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwlnaXQgcm0gc3VibW9kID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gd2lsbCBub3QgZXJyb3Igb3V0IG9uIC5naXRtb2R1bGVzIGZpbGUgd2l0aCB6ZXJvIHN0YXQgZGF0YScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCByZWFkLXRyZWUgSEVBRCAmJgorCWdpdCBybSBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gaXNzdWVzIGEgd2FybmluZyB3aGVuIHNlY3Rpb24gaXMgbm90IGZvdW5kIGluIC5naXRtb2R1bGVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWIgJiYKKwlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJZWNobyAid2FybmluZzogQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPXN1Ym1vZCIgPmV4cGVjdC5lcnIgJiYKKwlnaXQgcm0gc3VibW9kID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVyciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgcG9wdWxhdGVkIHN1Ym1vZHVsZSB3aXRoIG1vZGlmaWNhdGlvbnMgZmFpbHMgdW5sZXNzIGZvcmNlZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWVjaG8gWCA+c3VibW9kL2VtcHR5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19kaXIgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QubW9kaWZpZWRfaW5zaWRlIGFjdHVhbCAmJgorCWdpdCBybSAtZiBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgcG9wdWxhdGVkIHN1Ym1vZHVsZSB3aXRoIHVudHJhY2tlZCBmaWxlcyBmYWlscyB1bmxlc3MgZm9yY2VkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZWNobyBYID5zdWJtb2QvdW50cmFja2VkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19kaXIgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QubW9kaWZpZWRfdW50cmFja2VkIGFjdHVhbCAmJgorCWdpdCBybSAtZiBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN1Ym1vZHVsZSBjb25mbGljdCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gxICYmCisJZWNobyAxID5uaXRmb2wgJiYKKwlnaXQgYWRkIG5pdGZvbCAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIG5pdGZvbCAxIiAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gyIG1hc3RlciAmJgorCWVjaG8gMiA+bml0Zm9sICYmCisJZ2l0IGFkZCBuaXRmb2wgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCBuaXRmb2wgMiIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QxIG1hc3RlciAmJgorCWdpdCAtQyBzdWJtb2QgZmV0Y2ggJiYKKwlnaXQgLUMgc3VibW9kIGNoZWNrb3V0IGJyYW5jaDEgJiYKKwlnaXQgYWRkIHN1Ym1vZCAmJgorCWdpdCBjb21taXQgLW0gInN1Ym1vZCAxIiAmJgorCWdpdCBjaGVja291dCAtYiBjb25mbGljdDIgbWFzdGVyICYmCisJZ2l0IC1DIHN1Ym1vZCBjaGVja291dCBicmFuY2gyICYmCisJZ2l0IGFkZCBzdWJtb2QgJiYKKwlnaXQgY29tbWl0IC1tICJzdWJtb2QgMiIKKycKKworY2F0ID5leHBlY3QuY29uZmxpY3QgPDxFT0YKK1VVIHN1Ym1vZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHJlbW92ZXMgd29yayB0cmVlIG9mIHVubW9kaWZpZWQgY29uZmxpY3RlZCBzdWJtb2R1bGUnICcKKwlnaXQgY2hlY2tvdXQgY29uZmxpY3QxICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0MiAmJgorCWdpdCBybSBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgY29uZmxpY3RlZCBwb3B1bGF0ZWQgc3VibW9kdWxlIHdpdGggZGlmZmVyZW50IEhFQUQgZmFpbHMgdW5sZXNzIGZvcmNlZCcgJworCWdpdCBjaGVja291dCBjb25mbGljdDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgLUMgc3VibW9kIGNoZWNrb3V0IEhFQUReICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmNvbmZsaWN0IGFjdHVhbCAmJgorCWdpdCBybSAtZiBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnVybCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgY29uZmxpY3RlZCBwb3B1bGF0ZWQgc3VibW9kdWxlIHdpdGggbW9kaWZpY2F0aW9ucyBmYWlscyB1bmxlc3MgZm9yY2VkJyAnCisJZ2l0IGNoZWNrb3V0IGNvbmZsaWN0MSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWVjaG8gWCA+c3VibW9kL2VtcHR5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmNvbmZsaWN0IGFjdHVhbCAmJgorCWdpdCBybSAtZiBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnVybCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgY29uZmxpY3RlZCBwb3B1bGF0ZWQgc3VibW9kdWxlIHdpdGggdW50cmFja2VkIGZpbGVzIGZhaWxzIHVubGVzcyBmb3JjZWQnICcKKwlnaXQgY2hlY2tvdXQgY29uZmxpY3QxICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZWNobyBYID5zdWJtb2QvdW50cmFja2VkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmNvbmZsaWN0IGFjdHVhbCAmJgorCWdpdCBybSAtZiBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgY29uZmxpY3RlZCBwb3B1bGF0ZWQgc3VibW9kdWxlIHdpdGggYSAuZ2l0IGRpcmVjdG9yeSBmYWlscyBldmVuIHdoZW4gZm9yY2VkJyAnCisJZ2l0IGNoZWNrb3V0IGNvbmZsaWN0MSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSgKKwkJY2Qgc3VibW9kICYmCisJCXJtIC5naXQgJiYKKwkJY3AgLVIgLi4vLmdpdC9tb2R1bGVzL3N1YiAuZ2l0ICYmCisJCUdJVF9XT1JLX1RSRUU9LiBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53b3JrdHJlZQorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3QyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19kaXIgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2RpciBzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5jb25mbGljdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gLWYgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2RpciBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmNvbmZsaWN0IGFjdHVhbCAmJgorCWdpdCBtZXJnZSAtLWFib3J0ICYmCisJcm0gLXJmIHN1Ym1vZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBvZiBhIGNvbmZsaWN0ZWQgdW5wb3B1bGF0ZWQgc3VibW9kdWxlIHN1Y2NlZWRzJyAnCisJZ2l0IGNoZWNrb3V0IGNvbmZsaWN0MSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3QyICYmCisJZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgYSBwb3B1bGF0ZWQgc3VibW9kdWxlIHdpdGggYSAuZ2l0IGRpcmVjdG9yeSBtaWdyYXRlcyBnaXQgZGlyJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSgKKwkJY2Qgc3VibW9kICYmCisJCXJtIC5naXQgJiYKKwkJY3AgLVIgLi4vLmdpdC9tb2R1bGVzL3N1YiAuZ2l0ICYmCisJCUdJVF9XT1JLX1RSRUU9LiBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53b3JrdHJlZSAmJgorCQlybSAtciAuLi8uZ2l0L21vZHVsZXMvc3ViCisJKSAmJgorCWdpdCBybSBzdWJtb2QgMj5vdXRwdXQuZXJyICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2ZpbGVfbm90X2VtcHR5IGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgTWlncmF0aW5nIG91dHB1dC5lcnIKKycKKworY2F0ID5leHBlY3QuZGVlcG1vZGlmaWVkIDw8RU9GCisgTSBzdWJtb2Qvc3Vic3VibW9kCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3Vic3VibW9kdWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJKAorCQljZCBzdWJtb2QgJiYKKwkJaGFzaD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxNjAwMDAgIiRoYXNoIiBzdWJzdWJtb2QgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnVybCAuLi8uICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoIHN1YnN1Ym1vZCAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc3Vic3VibW9kdWxlIiAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJzdWJtb2QKKwkpICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiYWRkZWQgZGVlcCBzdWJtb2R1bGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHJlY3Vyc2l2ZWx5IHJlbW92ZXMgd29yayB0cmVlIG9mIHVubW9kaWZpZWQgc3VibW9kdWxlcycgJworCWdpdCBybSBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgcG9wdWxhdGVkIG5lc3RlZCBzdWJtb2R1bGUgd2l0aCBkaWZmZXJlbnQgbmVzdGVkIEhFQUQgZmFpbHMgdW5sZXNzIGZvcmNlZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSAmJgorCWdpdCAtQyBzdWJtb2Qvc3Vic3VibW9kIGNoZWNrb3V0IEhFQUReICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19kaXIgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QubW9kaWZpZWRfaW5zaWRlIGFjdHVhbCAmJgorCWdpdCBybSAtZiBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgcG9wdWxhdGVkIG5lc3RlZCBzdWJtb2R1bGUgd2l0aCBuZXN0ZWQgbW9kaWZpY2F0aW9ucyBmYWlscyB1bmxlc3MgZm9yY2VkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlICYmCisJZWNobyBYID5zdWJtb2Qvc3Vic3VibW9kL2VtcHR5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19kaXIgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QubW9kaWZpZWRfaW5zaWRlIGFjdHVhbCAmJgorCWdpdCBybSAtZiBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgcG9wdWxhdGVkIG5lc3RlZCBzdWJtb2R1bGUgd2l0aCBuZXN0ZWQgdW50cmFja2VkIGZpbGVzIGZhaWxzIHVubGVzcyBmb3JjZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWN1cnNpdmUgJiYKKwllY2hvIFggPnN1Ym1vZC9zdWJzdWJtb2QvdW50cmFja2VkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19kaXIgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QubW9kaWZpZWRfdW50cmFja2VkIGFjdHVhbCAmJgorCWdpdCBybSAtZiBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJtIGFic29yYnMgc3VibW9kdWxlJ3MgbmVzdGVkIC5naXQgZGlyZWN0b3J5IiAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlICYmCisJKAorCQljZCBzdWJtb2Qvc3Vic3VibW9kICYmCisJCXJtIC5naXQgJiYKKwkJbXYgLi4vLi4vLmdpdC9tb2R1bGVzL3N1Yi9tb2R1bGVzL3N1YiAuZ2l0ICYmCisJCUdJVF9XT1JLX1RSRUU9LiBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53b3JrdHJlZQorCSkgJiYKKwlnaXQgcm0gc3VibW9kIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZC9zdWJzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfZmlsZV9ub3RfZW1wdHkgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCBNaWdyYXRpbmcgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyBvdXQgYSBjb21taXQgYWZ0ZXIgc3VibW9kdWxlIHJlbW92YWwgbmVlZHMgbWFudWFsIHVwZGF0ZXMnICcKKwlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgcmVtb3ZhbCIgc3VibW9kIC5naXRtb2R1bGVzICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgY2hlY2tvdXQgLXEgSEVBRF4gJiYKKwlnaXQgY2hlY2tvdXQgLXEgbWFzdGVyIDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiXndhcm5pbmc6IHVuYWJsZSB0byBybWRpciAnXCcnc3VibW9kJ1wnJzoiIGFjdHVhbCAmJgorCWdpdCBzdGF0dXMgLXMgc3VibW9kID5hY3R1YWwgJiYKKwllY2hvICI/PyBzdWJtb2QvIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlybSAtcmYgc3VibW9kICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBvZiBkL2Ygd2hlbiBkIGhhcyBiZWNvbWUgYSBub24tZGlyZWN0b3J5JyAnCisJcm0gLXJmIGQgJiYKKwlta2RpciBkICYmCisJPmQvZiAmJgorCWdpdCBhZGQgZCAmJgorCXJtIC1yZiBkICYmCisJPmQgJiYKKwlnaXQgcm0gZC9mICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6ZC9mICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdybSBvZiBkL2Ygd2hlbiBkIGhhcyBiZWNvbWUgYSBkYW5nbGluZyBzeW1saW5rJyAnCisJcm0gLXJmIGQgJiYKKwlta2RpciBkICYmCisJPmQvZiAmJgorCWdpdCBhZGQgZCAmJgorCXJtIC1yZiBkICYmCisJbG4gLXMgbm9uZXhpc3RlbnQgZCAmJgorCWdpdCBybSBkL2YgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDpkL2YgJiYKKwl0ZXN0IC1oIGQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGZpbGUgd2hlbiBpdCBoYXMgYmVjb21lIGEgZGlyZWN0b3J5JyAnCisJcm0gLXJmIGQgJiYKKwk+ZCAmJgorCWdpdCBhZGQgZCAmJgorCXJtIC1mIGQgJiYKKwlta2RpciBkICYmCisJPmQvZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBkICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6ZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGQvZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdybSBhY3Jvc3MgYSBzeW1saW5rZWQgbGVhZGluZyBwYXRoIChubyBpbmRleCknICcKKwlybSAtcmYgZCBlICYmCisJbWtkaXIgZSAmJgorCWVjaG8gY29udGVudCA+ZS9mICYmCisJbG4gLXMgZSBkICYmCisJZ2l0IGFkZCAtQSBlIGQgJiYKKwlnaXQgY29tbWl0IC1tICJzeW1saW5rIGQgdG8gZSwgZS9mIGV4aXN0cyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gZC9mICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6ZCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgOmUvZiAmJgorCXRlc3QgLWggZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGUvZgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFNZTUxJTktTICdybSBhY3Jvc3MgYSBzeW1saW5rZWQgbGVhZGluZyBwYXRoICh3LyBpbmRleCknICcKKwlybSAtcmYgZCBlICYmCisJbWtkaXIgZCAmJgorCWVjaG8gY29udGVudCA+ZC9mICYmCisJZ2l0IGFkZCAtQSBlIGQgJiYKKwlnaXQgY29tbWl0IC1tICJkL2YgZXhpc3RzIiAmJgorCW12IGQgZSAmJgorCWxuIC1zIGUgZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBkL2YgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDpkL2YgJiYKKwl0ZXN0IC1oIGQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBlL2YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHRlc3Rpbmcgcm0gbWVzc2FnZXMnICcKKwk+YmFyLnR4dCAmJgorCT5mb28udHh0ICYmCisJZ2l0IGFkZCBiYXIudHh0IGZvby50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gZmlsZXMgd2l0aCBkaWZmZXJlbnQgc3RhZ2VkIGNvbnRlbnQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZXJyb3I6IHRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZQorCWZpbGUgYW5kIHRoZSBIRUFEOgorCSAgICBiYXIudHh0CisJICAgIGZvby50eHQKKwkodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpCisJRU9GCisJZWNobyBjb250ZW50MSA+Zm9vLnR4dCAmJgorCWVjaG8gY29udGVudDEgPmJhci50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gZm9vLnR4dCBiYXIudHh0IDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gZmlsZXMgd2l0aCBkaWZmZXJlbnQgc3RhZ2VkIGNvbnRlbnQgd2l0aG91dCBoaW50cycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwllcnJvcjogdGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlCisJZmlsZSBhbmQgdGhlIEhFQUQ6CisJICAgIGJhci50eHQKKwkgICAgZm9vLnR4dAorCUVPRgorCWVjaG8gY29udGVudDIgPmZvby50eHQgJiYKKwllY2hvIGNvbnRlbnQyID5iYXIudHh0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGFkdmljZS5ybWhpbnRzPWZhbHNlIHJtIGZvby50eHQgYmFyLnR4dCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIGZpbGUgd2l0aCBsb2NhbCBtb2RpZmljYXRpb24nICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZXJyb3I6IHRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoKKwkgICAgZm9vLnR4dAorCSh1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkKKwlFT0YKKwlnaXQgY29tbWl0IC1tICJ0ZXN0aW5nIHJtIDMiICYmCisJZWNobyBjb250ZW50MyA+Zm9vLnR4dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBmb28udHh0IDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gZmlsZSB3aXRoIGxvY2FsIG1vZGlmaWNhdGlvbiB3aXRob3V0IGhpbnRzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWVycm9yOiB0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnM6CisJICAgIGJhci50eHQKKwlFT0YKKwllY2hvIGNvbnRlbnQ0ID5iYXIudHh0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGFkdmljZS5ybWhpbnRzPWZhbHNlIHJtIGJhci50eHQgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBmaWxlIHdpdGggY2hhbmdlcyBpbiB0aGUgaW5kZXgnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZXJyb3I6IHRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OgorCSAgICBmb28udHh0CisJKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKQorCUVPRgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNvbnRlbnQ1ID5mb28udHh0ICYmCisJZ2l0IGFkZCBmb28udHh0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIGZvby50eHQgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBmaWxlIHdpdGggY2hhbmdlcyBpbiB0aGUgaW5kZXggd2l0aG91dCBoaW50cycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwllcnJvcjogdGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6CisJICAgIGZvby50eHQKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgYWR2aWNlLnJtaGludHM9ZmFsc2Ugcm0gZm9vLnR4dCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIGZpbGVzIHdpdGggdHdvIGRpZmZlcmVudCBlcnJvcnMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZXJyb3I6IHRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGUKKwlmaWxlIGFuZCB0aGUgSEVBRDoKKwkgICAgZm9vMS50eHQKKwkodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpCisJZXJyb3I6IHRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OgorCSAgICBiYXIxLnR4dAorCSh1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkKKwlFT0YKKwllY2hvIGNvbnRlbnQgPmZvbzEudHh0ICYmCisJZ2l0IGFkZCBmb28xLnR4dCAmJgorCWVjaG8gY29udGVudDYgPmZvbzEudHh0ICYmCisJZWNobyBjb250ZW50NiA+YmFyMS50eHQgJiYKKwlnaXQgYWRkIGJhcjEudHh0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIGJhcjEudHh0IGZvbzEudHh0IDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gZW1wdHkgc3RyaW5nIHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIC1yZiAiIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM2MDEtcm0tcGF0aHNwZWMtZmlsZS5zaCBiL3QvdDM2MDEtcm0tcGF0aHNwZWMtZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZGUyMWY4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzYwMS1ybS1wYXRoc3BlYy1maWxlLnNoCkBAIC0wLDAgKzEsNzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdybSAtLXBhdGhzcGVjLWZyb20tZmlsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfdGljaworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIEEgPmZpbGVBLnQgJiYKKwllY2hvIEIgPmZpbGVCLnQgJiYKKwllY2hvIEMgPmZpbGVDLnQgJiYKKwllY2hvIEQgPmZpbGVELnQgJiYKKwlnaXQgYWRkIGZpbGVBLnQgZmlsZUIudCBmaWxlQy50IGZpbGVELnQgJiYKKwlnaXQgY29tbWl0IC1tICJmaWxlcyIgJiYKKworCWdpdCB0YWcgY2hlY2twb2ludAorJworCityZXN0b3JlX2NoZWNrcG9pbnQgKCkgeworCWdpdCByZXNldCAtLWhhcmQgY2hlY2twb2ludAorfQorCit2ZXJpZnlfZXhwZWN0ICgpIHsKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0tdW50cmFja2VkLWZpbGVzPW5vIC0tIGZpbGVBLnQgZmlsZUIudCBmaWxlQy50IGZpbGVELnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlc3QnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlEICBmaWxlQS50CisJRU9GCisKKwllY2hvIGZpbGVBLnQgfCBnaXQgcm0gLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAmJgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wYXRoc3BlYy1maWxlLW51bCcgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUQgIGZpbGVBLnQKKwlEICBmaWxlQi50CisJRU9GCisKKwlwcmludGYgImZpbGVBLnRcMGZpbGVCLnRcMCIgfCBnaXQgcm0gLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtLXBhdGhzcGVjLWZpbGUtbnVsICYmCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmx5IHRvdWNoZXMgd2hhdCB3YXMgbGlzdGVkJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJRCAgZmlsZUIudAorCUQgIGZpbGVDLnQKKwlFT0YKKworCXByaW50ZiAiZmlsZUIudFxuZmlsZUMudFxuIiB8IGdpdCBybSAtLXBhdGhzcGVjLWZyb20tZmlsZT0tICYmCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBjb25kaXRpb25zJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisJZWNobyBmaWxlQS50ID5saXN0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtLSBmaWxlQS50IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBybSAtLXBhdGhzcGVjLWZpbGUtbnVsIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIgZXJyICYmCisKKwk+ZW1wdHlfbGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSAtLXBhdGhzcGVjLWZyb20tZmlsZT1lbXB0eV9saXN0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiTm8gcGF0aHNwZWMgd2FzIGdpdmVuLiBXaGljaCBmaWxlcyBzaG91bGQgSSByZW1vdmU/IiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNzAwLWFkZC5zaCBiL3QvdDM3MDAtYWRkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3ZDRiYTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNzAwLWFkZC5zaApAQCAtMCwwICsxLDQyNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBDYXJsIEQuIFdvcnRoCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgb2YgZ2l0IGFkZCwgaW5jbHVkaW5nIHRoZSAtLSBvcHRpb24uJworCisuIC4vdGVzdC1saWIuc2gKKworIyBUZXN0IHRoZSBmaWxlIG1vZGUgIiQxIiBvZiB0aGUgZmlsZSAiJDIiIGluIHRoZSBpbmRleC4KK3Rlc3RfbW9kZV9pbl9pbmRleCAoKSB7CisJY2FzZSAiJChnaXQgbHMtZmlsZXMgLXMgIiQyIikiIGluCisJIiQxICIqIgkkMiIpCisJCWVjaG8gcGFzcworCQk7OworCSopCisJCWVjaG8gZmFpbAorCQlnaXQgbHMtZmlsZXMgLXMgIiQyIgorCQlyZXR1cm4gMQorCQk7OworCWVzYWMKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1Rlc3Qgb2YgZ2l0IGFkZCcgXAorICAgICd0b3VjaCBmb28gJiYgZ2l0IGFkZCBmb28nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdQb3N0LWNoZWNrIHRoYXQgZm9vIGlzIGluIHRoZSBpbmRleCcgXAorICAgICdnaXQgbHMtZmlsZXMgZm9vIHwgZ3JlcCBmb28nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdUZXN0IHRoYXQgImdpdCBhZGQgLS0gLXEiIHdvcmtzJyBcCisgICAgJ3RvdWNoIC0tIC1xICYmIGdpdCBhZGQgLS0gLXEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdnaXQgYWRkOiBUZXN0IHRoYXQgZXhlY3V0YWJsZSBiaXQgaXMgbm90IHVzZWQgaWYgY29yZS5maWxlbW9kZT0wJyBcCisJJ2dpdCBjb25maWcgY29yZS5maWxlbW9kZSAwICYmCisJIGVjaG8gZm9vID54Zm9vMSAmJgorCSBjaG1vZCA3NTUgeGZvbzEgJiYKKwkgZ2l0IGFkZCB4Zm9vMSAmJgorCSB0ZXN0X21vZGVfaW5faW5kZXggMTAwNjQ0IHhmb28xJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkOiBmaWxlbW9kZT0wIHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIGJ5IHN5bWxpbmsnICcKKwlybSAtZiB4Zm9vMSAmJgorCXRlc3RfbG5fc19hZGQgZm9vIHhmb28xICYmCisJdGVzdF9tb2RlX2luX2luZGV4IDEyMDAwMCB4Zm9vMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZDogVGVzdCB0aGF0IGV4ZWN1dGFibGUgYml0IGlzIG5vdCB1c2VkLi4uJyBcCisJJ2dpdCBjb25maWcgY29yZS5maWxlbW9kZSAwICYmCisJIGVjaG8gZm9vID54Zm9vMiAmJgorCSBjaG1vZCA3NTUgeGZvbzIgJiYKKwkgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB4Zm9vMiAmJgorCSB0ZXN0X21vZGVfaW5faW5kZXggMTAwNjQ0IHhmb28yJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkOiBmaWxlbW9kZT0wIHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIGJ5IHN5bWxpbmsnICcKKwlybSAtZiB4Zm9vMiAmJgorCXRlc3RfbG5fc19hZGQgZm9vIHhmb28yICYmCisJdGVzdF9tb2RlX2luX2luZGV4IDEyMDAwMCB4Zm9vMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZDogVGVzdCB0aGF0IGV4ZWN1dGFibGUgYml0IGlzIG5vdCB1c2VkLi4uJyBcCisJJ2dpdCBjb25maWcgY29yZS5maWxlbW9kZSAwICYmCisJIHRlc3RfbG5fc19hZGQgeGZvbzIgeGZvbzMgJiYJIyBydW5zIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQKKwkgdGVzdF9tb2RlX2luX2luZGV4IDEyMDAwMCB4Zm9vMycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdGlnbm9yZSB0ZXN0IHNldHVwJyAnCisJZWNobyAiKi5pZyIgPi5naXRpZ25vcmUgJiYKKwlta2RpciBjLmlmIGQuaWcgJiYKKwk+YS5pZyAmJiA+Yi5pZiAmJgorCT5jLmlmL2MuaWYgJiYgPmMuaWYvYy5pZyAmJgorCT5kLmlnL2QuaWYgJiYgPmQuaWcvZC5pZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0aWdub3JlIGlzIGhvbm9yZWQnICcKKwlnaXQgYWRkIC4gJiYKKwkhIChnaXQgbHMtZmlsZXMgfCBncmVwICJcXC5pZyIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIG91dCB3aGVuIGF0dGVtcHRpbmcgdG8gYWRkIGlnbm9yZWQgb25lcyB3aXRob3V0IC1mJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBhLj8/ICYmCisJISAoZ2l0IGxzLWZpbGVzIHwgZ3JlcCAiXFwuaWciKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBvdXQgd2hlbiBhdHRlbXB0aW5nIHRvIGFkZCBpZ25vcmVkIG9uZXMgd2l0aG91dCAtZicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgZC4/PyAmJgorCSEgKGdpdCBscy1maWxlcyB8IGdyZXAgIlxcLmlnIikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3Igb3V0IHdoZW4gYXR0ZW1wdGluZyB0byBhZGQgaWdub3JlZCBvbmVzIGJ1dCBhZGQgb3RoZXJzJyAnCisJdG91Y2ggYS5pZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgYS4/PyAmJgorCSEgKGdpdCBscy1maWxlcyB8IGdyZXAgIlxcLmlnIikgJiYKKwkoZ2l0IGxzLWZpbGVzIHwgZ3JlcCBhLmlmKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgaWdub3JlZCBvbmVzIHdpdGggLWYnICcKKwlnaXQgYWRkIC1mIGEuPz8gJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGEuaWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGlnbm9yZWQgb25lcyB3aXRoIC1mJyAnCisJZ2l0IGFkZCAtZiBkLj8/LyogJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGQuaWcvZC5pZiBkLmlnL2QuaWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGlnbm9yZWQgb25lcyB3aXRoIC1mJyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgLWYgZC4/PyAmJgorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZC5pZy9kLmlmIGQuaWcvZC5pZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0aWdub3JlIHdpdGggc3ViZGlyZWN0b3J5JyAnCisKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJbWtkaXIgLXAgc3ViL2RpciAmJgorCWVjaG8gIiFkaXIvYS4qIiA+c3ViLy5naXRpZ25vcmUgJiYKKwk+c3ViL2EuaWcgJiYKKwk+c3ViL2Rpci9hLmlnICYmCisJZ2l0IGFkZCBzdWIvZGlyICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBzdWIvZGlyL2EuaWcgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJKAorCQljZCBzdWIvZGlyICYmCisJCWdpdCBhZGQgLgorCSkgJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIHN1Yi9kaXIvYS5pZworJworCitta2RpciAxIDEvMiAxLzMKK3RvdWNoIDEvMi9hIDEvMy9iIDEvMi9jCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBjb3JyZWN0IHByZWZpeCBkZXRlY3Rpb24nICcKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCAxLzIvYSAxLzMvYiAxLzIvYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIHdpdGggZmlsZW1vZGU9MCwgc3ltbGlua3M9MCwgYW5kIHVubWVyZ2VkIGVudHJpZXMnICcKKwlmb3IgcyBpbiAxIDIgMworCWRvCisJCWVjaG8gJHMgPiBzdGFnZSRzCisJCWVjaG8gIjEwMDc1NSAkKGdpdCBoYXNoLW9iamVjdCAtdyBzdGFnZSRzKSAkcwlmaWxlIgorCQllY2hvICIxMjAwMDAgJChwcmludGYgJHMgfCBnaXQgaGFzaC1vYmplY3QgLXcgLXQgYmxvYiAtLXN0ZGluKSAkcwlzeW1saW5rIgorCWRvbmUgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWdpdCBjb25maWcgY29yZS5maWxlbW9kZSAwICYmCisJZ2l0IGNvbmZpZyBjb3JlLnN5bWxpbmtzIDAgJiYKKwllY2hvIG5ldyA+IGZpbGUgJiYKKwllY2hvIG5ldyA+IHN5bWxpbmsgJiYKKwlnaXQgYWRkIGZpbGUgc3ltbGluayAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlIHwgZ3JlcCAiXjEwMDc1NSAuKiAwCWZpbGUkIiAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlIHwgZ3JlcCAiXjEyMDAwMCAuKiAwCXN5bWxpbmskIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIHdpdGggZmlsZW1vZGU9MCwgc3ltbGlua3M9MCBwcmVmZXJzIHN0YWdlIDIgb3ZlciBzdGFnZSAxJyAnCisJZ2l0IHJtIC0tY2FjaGVkIC1mIGZpbGUgc3ltbGluayAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICQoZ2l0IGhhc2gtb2JqZWN0IC13IHN0YWdlMSkgMQlmaWxlIiAmJgorCQllY2hvICIxMDA3NTUgJChnaXQgaGFzaC1vYmplY3QgLXcgc3RhZ2UyKSAyCWZpbGUiICYmCisJCWVjaG8gIjEwMDY0NCAkKHByaW50ZiAxIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC10IGJsb2IgLS1zdGRpbikgMQlzeW1saW5rIiAmJgorCQllY2hvICIxMjAwMDAgJChwcmludGYgMiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtdCBibG9iIC0tc3RkaW4pIDIJc3ltbGluayIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlnaXQgY29uZmlnIGNvcmUuZmlsZW1vZGUgMCAmJgorCWdpdCBjb25maWcgY29yZS5zeW1saW5rcyAwICYmCisJZWNobyBuZXcgPiBmaWxlICYmCisJZWNobyBuZXcgPiBzeW1saW5rICYmCisJZ2l0IGFkZCBmaWxlIHN5bWxpbmsgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSB8IGdyZXAgIl4xMDA3NTUgLiogMAlmaWxlJCIgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSB8IGdyZXAgIl4xMjAwMDAgLiogMAlzeW1saW5rJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLXJlZnJlc2gnICcKKwk+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLWEgLW0gImNvbW1pdCBhbGwiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZi1pbmRleCBIRUFEIC0tIGZvbykiICYmCisJZ2l0IHJlYWQtdHJlZSBIRUFEICYmCisJY2FzZSAiJChnaXQgZGlmZi1pbmRleCBIRUFEIC0tIGZvbykiIGluCisJOjEwMDY0NCIgIioiTQlmb28iKSBlY2hvIHBhc3M7OworCSopIGVjaG8gZmFpbDsgKGV4aXQgMSk7OworCWVzYWMgJiYKKwlnaXQgYWRkIC0tcmVmcmVzaCAtLSBmb28gJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmLWluZGV4IEhFQUQgLS0gZm9vKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLXJlZnJlc2ggd2l0aCBwYXRoc3BlYycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvID5mb28gJiYgZWNobyA+YmFyICYmIGVjaG8gPmJheiAmJgorCWdpdCBhZGQgZm9vIGJhciBiYXogJiYgSD0kKGdpdCByZXYtcGFyc2UgOmZvbykgJiYgZ2l0IHJtIC1mIGZvbyAmJgorCWVjaG8gIjEwMDY0NCAkSCAzCWZvbyIgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC02MCBiYXIgYmF6ICYmCisJZ2l0IGFkZCAtLXJlZnJlc2ggYmFyID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwlnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSA+YWN0dWFsICYmCisJISBncmVwIGJhciBhY3R1YWwgJiYKKwlncmVwIGJheiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdnaXQgYWRkIHNob3VsZCBmYWlsIGF0b21pY2FsbHkgdXBvbiBhbiB1bnJlYWRhYmxlIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZGF0ZSA+Zm9vMSAmJgorCWRhdGUgPmZvbzIgJiYKKwljaG1vZCAwIGZvbzIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tdmVyYm9zZSAuICYmCisJISAoIGdpdCBscy1maWxlcyBmb28xIHwgZ3JlcCBmb28xICkKKycKKworcm0gLWYgZm9vMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ2dpdCBhZGQgLS1pZ25vcmUtZXJyb3JzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWRhdGUgPmZvbzEgJiYKKwlkYXRlID5mb28yICYmCisJY2htb2QgMCBmb28yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLXZlcmJvc2UgLS1pZ25vcmUtZXJyb3JzIC4gJiYKKwlnaXQgbHMtZmlsZXMgZm9vMSB8IGdyZXAgZm9vMQorJworCitybSAtZiBmb28yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnZ2l0IGFkZCAoYWRkLmlnbm9yZS1lcnJvcnMpJyAnCisJZ2l0IGNvbmZpZyBhZGQuaWdub3JlLWVycm9ycyAxICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWRhdGUgPmZvbzEgJiYKKwlkYXRlID5mb28yICYmCisJY2htb2QgMCBmb28yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLXZlcmJvc2UgLiAmJgorCWdpdCBscy1maWxlcyBmb28xIHwgZ3JlcCBmb28xCisnCitybSAtZiBmb28yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnZ2l0IGFkZCAoYWRkLmlnbm9yZS1lcnJvcnMgPSBmYWxzZSknICcKKwlnaXQgY29uZmlnIGFkZC5pZ25vcmUtZXJyb3JzIDAgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZGF0ZSA+Zm9vMSAmJgorCWRhdGUgPmZvbzIgJiYKKwljaG1vZCAwIGZvbzIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tdmVyYm9zZSAuICYmCisJISAoIGdpdCBscy1maWxlcyBmb28xIHwgZ3JlcCBmb28xICkKKycKK3JtIC1mIGZvbzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICctLW5vLWlnbm9yZS1lcnJvcnMgb3ZlcnJpZGVzIGNvbmZpZycgJworICAgICAgIGdpdCBjb25maWcgYWRkLmlnbm9yZS1lcnJvcnMgMSAmJgorICAgICAgIGdpdCByZXNldCAtLWhhcmQgJiYKKyAgICAgICBkYXRlID5mb28xICYmCisgICAgICAgZGF0ZSA+Zm9vMiAmJgorICAgICAgIGNobW9kIDAgZm9vMiAmJgorICAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS12ZXJib3NlIC0tbm8taWdub3JlLWVycm9ycyAuICYmCisgICAgICAgISAoIGdpdCBscy1maWxlcyBmb28xIHwgZ3JlcCBmb28xICkgJiYKKyAgICAgICBnaXQgY29uZmlnIGFkZC5pZ25vcmUtZXJyb3JzIDAKKycKK3JtIC1mIGZvbzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBCU0xBU0hQU1BFQyAiZ2l0IGFkZCAnZm9cXFtvdVxcXWJhcicgaWdub3JlcyBmb29iYXIiICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdG91Y2ggZm9cW291XF1iYXIgZm9vYmFyICYmCisJZ2l0IGFkZCAnXCcnZm9cW291XF1iYXInXCcnICYmCisJZ2l0IGxzLWZpbGVzIGZvXFtvdVxdYmFyIHwgZmdyZXAgZm9cW291XF1iYXIgJiYKKwkhICggZ2l0IGxzLWZpbGVzIGZvb2JhciB8IGdyZXAgZm9vYmFyICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCB0byByZXNvbHZlIGNvbmZsaWN0cyBvbiBvdGhlcndpc2UgaWdub3JlZCBwYXRoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCUg9JChnaXQgcmV2LXBhcnNlIDoxLzIvYSkgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkSCAxCXRyYWNrLXRoaXMiICYmCisJCWVjaG8gIjEwMDY0NCAkSCAzCXRyYWNrLXRoaXMiCisJKSB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJZWNobyB0cmFjay10aGlzID4+LmdpdGlnbm9yZSAmJgorCWVjaG8gcmVzb2x2ZWQgPnRyYWNrLXRoaXMgJiYKKwlnaXQgYWRkIHRyYWNrLXRoaXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCBub24tZXhpc3RlbnQiIHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBub24tZXhpc3RlbnQgJiYKKwkhIChnaXQgbHMtZmlsZXMgfCBncmVwICJub24tZXhpc3RlbnQiKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIC1BIG9uIGVtcHR5IHJlcG8gZG9lcyBub3QgZXJyb3Igb3V0JyAnCisJcm0gLWZyIGVtcHR5ICYmCisJZ2l0IGluaXQgZW1wdHkgJiYKKwkoCisJCWNkIGVtcHR5ICYmCisJCWdpdCBhZGQgLUEgLiAmJgorCQlnaXQgYWRkIC1BCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGFkZCAuIiBpbiBlbXB0eSByZXBvJyAnCisJcm0gLWZyIGVtcHR5ICYmCisJZ2l0IGluaXQgZW1wdHkgJiYKKwkoCisJCWNkIGVtcHR5ICYmCisJCWdpdCBhZGQgLgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3Igb24gYSByZXBvc2l0b3J5IHdpdGggbm8gY29tbWl0cycgJworCXJtIC1mciBlbXB0eSAmJgorCWdpdCBpbml0IGVtcHR5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBlbXB0eSA+YWN0dWFsIDI+JjEgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwllcnJvcjogJyInZW1wdHkvJyInIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQKKwlmYXRhbDogYWRkaW5nIGZpbGVzIGZhaWxlZAorCUVPRgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgLS1kcnktcnVuIG9mIGV4aXN0aW5nIGNoYW5nZWQgZmlsZScgIgorCWVjaG8gbmV3ID4+dHJhY2stdGhpcyAmJgorCWdpdCBhZGQgLS1kcnktcnVuIHRyYWNrLXRoaXMgPmFjdHVhbCAyPiYxICYmCisJZWNobyBcImFkZCAndHJhY2stdGhpcydcIiB8IHRlc3RfY21wIC0gYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgLS1kcnktcnVuIG9mIG5vbi1leGlzdGluZyBmaWxlJyAiCisJZWNobyBpZ25vcmVkLWZpbGUgPj4uZ2l0aWdub3JlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLWRyeS1ydW4gdHJhY2stdGhpcyBpZ25vcmVkLWZpbGUgPmFjdHVhbCAyPiYxCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgLS1kcnktcnVuIG9mIGFuIGV4aXN0aW5nIGZpbGUgb3V0cHV0JyAiCisJZWNobyBcImZhdGFsOiBwYXRoc3BlYyAnaWdub3JlZC1maWxlJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlc1wiID5leHBlY3QgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorIgorCitjYXQgPmV4cGVjdC5lcnIgPDxcRU9GCitUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6CitpZ25vcmVkLWZpbGUKK2hpbnQ6IFVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uCitoaW50OiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZworaGludDogImdpdCBjb25maWcgYWR2aWNlLmFkZElnbm9yZWRGaWxlIGZhbHNlIgorRU9GCitjYXQgPmV4cGVjdC5vdXQgPDxcRU9GCithZGQgJ3RyYWNrLXRoaXMnCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLWRyeS1ydW4gLS1pZ25vcmUtbWlzc2luZyBvZiBub24tZXhpc3RpbmcgZmlsZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS1kcnktcnVuIC0taWdub3JlLW1pc3NpbmcgdHJhY2stdGhpcyBpZ25vcmVkLWZpbGUgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgLS1kcnktcnVuIC0taWdub3JlLW1pc3Npbmcgb2Ygbm9uLWV4aXN0aW5nIGZpbGUgb3V0cHV0JyAnCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCBlbXB0eSBzdHJpbmcgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgLS1jaG1vZD1bKy1deCBzdGFnZXMgY29ycmVjdGx5JyAnCisJcm0gLWYgZm9vMSAmJgorCWVjaG8gZm9vID5mb28xICYmCisJZ2l0IGFkZCAtLWNobW9kPSt4IGZvbzEgJiYKKwl0ZXN0X21vZGVfaW5faW5kZXggMTAwNzU1IGZvbzEgJiYKKwlnaXQgYWRkIC0tY2htb2Q9LXggZm9vMSAmJgorCXRlc3RfbW9kZV9pbl9pbmRleCAxMDA2NDQgZm9vMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTWU1MSU5LUyAnZ2l0IGFkZCAtLWNobW9kPSt4IHdpdGggc3ltbGlua3MnICcKKwlnaXQgY29uZmlnIGNvcmUuZmlsZW1vZGUgMSAmJgorCWdpdCBjb25maWcgY29yZS5zeW1saW5rcyAxICYmCisJcm0gLWYgZm9vMiAmJgorCWVjaG8gZm9vID5mb28yICYmCisJZ2l0IGFkZCAtLWNobW9kPSt4IGZvbzIgJiYKKwl0ZXN0X21vZGVfaW5faW5kZXggMTAwNzU1IGZvbzIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLWNobW9kPVsrLV14IGNoYW5nZXMgaW5kZXggd2l0aCBhbHJlYWR5IGFkZGVkIGZpbGUnICcKKwlybSAtZiBmb28zIHhmb28zICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID5mb28zICYmCisJZ2l0IGFkZCBmb28zICYmCisJZ2l0IGFkZCAtLWNobW9kPSt4IGZvbzMgJiYKKwl0ZXN0X21vZGVfaW5faW5kZXggMTAwNzU1IGZvbzMgJiYKKwllY2hvIGZvbyA+eGZvbzMgJiYKKwljaG1vZCA3NTUgeGZvbzMgJiYKKwlnaXQgYWRkIHhmb28zICYmCisJZ2l0IGFkZCAtLWNobW9kPS14IHhmb28zICYmCisJdGVzdF9tb2RlX2luX2luZGV4IDEwMDY0NCB4Zm9vMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnZ2l0IGFkZCAtLWNobW9kPVsrLV14IGRvZXMgbm90IGNoYW5nZSB0aGUgd29ya2luZyB0cmVlJyAnCisJZWNobyBmb28gPmZvbzQgJiYKKwlnaXQgYWRkIGZvbzQgJiYKKwlnaXQgYWRkIC0tY2htb2Q9K3ggZm9vNCAmJgorCSEgdGVzdCAteCBmb280CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbGUgc3RhdHVzIGNoYW5nZSBpZiBubyBwYXRoc3BlYyBpcyBnaXZlbicgJworCT5mb281ICYmCisJPmZvbzYgJiYKKwlnaXQgYWRkIGZvbzUgZm9vNiAmJgorCWdpdCBhZGQgLS1jaG1vZD0reCAmJgorCXRlc3RfbW9kZV9pbl9pbmRleCAxMDA2NDQgZm9vNSAmJgorCXRlc3RfbW9kZV9pbl9pbmRleCAxMDA2NDQgZm9vNgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBmaWxlIHN0YXR1cyBjaGFuZ2UgaWYgbm8gcGF0aHNwZWMgaXMgZ2l2ZW4gaW4gc3ViZGlyJyAnCisJbWtkaXIgLXAgc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJPnN1Yi1mb28xICYmCisJCT5zdWItZm9vMiAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGFkZCAtLWNobW9kPSt4ICYmCisJCXRlc3RfbW9kZV9pbl9pbmRleCAxMDA2NDQgc3ViLWZvbzEgJiYKKwkJdGVzdF9tb2RlX2luX2luZGV4IDEwMDY0NCBzdWItZm9vMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsIHN0YXR1c2VzIGNoYW5nZWQgaW4gZm9sZGVyIGlmIC4gaXMgZ2l2ZW4nICcKKwlybSAtZnIgZW1wdHkgJiYKKwlnaXQgYWRkIC0tY2htb2Q9K3ggLiAmJgorCXRlc3QgJChnaXQgbHMtZmlsZXMgLS1zdGFnZSB8IGdyZXAgXjEwMDY0NCB8IHdjIC1sKSAtZXEgMCAmJgorCWdpdCBhZGQgLS1jaG1vZD0teCAuICYmCisJdGVzdCAkKGdpdCBscy1maWxlcyAtLXN0YWdlIHwgZ3JlcCBeMTAwNzU1IHwgd2MgLWwpIC1lcSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ0FTRV9JTlNFTlNJVElWRV9GUyAncGF0aCBpcyBjYXNlLWluc2Vuc2l0aXZlJyAnCisJcGF0aD0iJChwd2QpL0JMVUIiICYmCisJdG91Y2ggIiRwYXRoIiAmJgorCWRvd25jYXNlZD0iJChlY2hvICIkcGF0aCIgfCB0ciBBLVogYS16KSIgJiYKKwlnaXQgYWRkICIkZG93bmNhc2VkIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM3MDEtYWRkLWludGVyYWN0aXZlLnNoIGIvdC90MzcwMS1hZGQtaW50ZXJhY3RpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjNkOGJiNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM3MDEtYWRkLWludGVyYWN0aXZlLnNoCkBAIC0wLDAgKzEsODEzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYWRkIC1pIGJhc2ljIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTAordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBhZGQgLWkgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKK2RpZmZfY21wICgpIHsKKwlmb3IgeAorCWRvCisJCXNlZCAgLWUgJy9eaW5kZXgvcy9bMC05YS1mXSpbMS05YS1mXVswLTlhLWZdKlwuXC4vMTIzNDU2Ny4uLycgXAorCQkgICAgIC1lICcvXmluZGV4L3MvXC5cLlswLTlhLWZdKlsxLTlhLWZdWzAtOWEtZl0qLy4uOWFiY2RlZi8nIFwKKwkJICAgICAtZSAnL15pbmRleC9zLyAwMCpcLlwuLyAwMDAwMDAwLi4vJyBcCisJCSAgICAgLWUgJy9eaW5kZXgvcy9cLlwuMDAqJC8uLjAwMDAwMDAvJyBcCisJCSAgICAgLWUgJy9eaW5kZXgvcy9cLlwuMDAqIC8uLjAwMDAwMDAgLycgXAorCQkgICAgICIkeCIgPiIkeC5maWx0ZXJlZCIKKwlkb25lCisJdGVzdF9jbXAgIiQxLmZpbHRlcmVkIiAiJDIuZmlsdGVyZWQiCit9CisKKyMgVGhpcyBmdW5jdGlvbiB1c2VzIGEgdHJpY2sgdG8gbWFuaXB1bGF0ZSB0aGUgaW50ZXJhY3RpdmUgYWRkIHRvIHVzZSBjb2xvcjoKKyMgdGhlIGB3YW50X2NvbG9yKClgIGZ1bmN0aW9uIHNwZWNpYWwtY2FzZXMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHBhZ2VyIHdhcworIyBzcGF3bmVkIGFuZCBHaXQgbm93IHdhbnRzIHRvIG91dHB1dCBjb2xvcmVkIHRleHQ6IHRvIGRldGVjdCB0aGF0IHNpdHVhdGlvbiwKKyMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBHSVRfUEFHRVJfSU5fVVNFYCBpcyBzZXQuIEhvd2V2ZXIsIGNvbG9yIGlzCisjIHN1cHByZXNzZWQgZGVzcGl0ZSB0aGF0IGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHRoZSBgVEVSTWAgdmFyaWFibGUKKyMgaW5kaWNhdGVzIGEgZHVtYiB0ZXJtaW5hbCwgc28gd2Ugc2V0IHRoYXQgdmFyaWFibGUsIHRvby4KKworZm9yY2VfY29sb3IgKCkgeworCWVudiBHSVRfUEFHRVJfSU5fVVNFPXRydWUgVEVSTT12dDEwMCAiJEAiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIChpbml0aWFsKScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gbW9yZSA+PmZpbGUgJiYKKwllY2hvIGxpbmVzID4+ZmlsZQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdvcmtzIChpbml0aWFsKScgJworCWdpdCBhZGQgLWkgPC9kZXYvbnVsbCA+b3V0cHV0ICYmCisJZ3JlcCAiKzEvLTAgKisyLy0wIGZpbGUiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3RlZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRgorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uZDk1ZjNhZAorCS0tLSAvZGV2L251bGwKKwkrKysgYi9maWxlCisJQEAgLTAsMCArMSBAQAorCStjb250ZW50CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgd29ya3MgKGluaXRpYWwpJyAnCisJdGVzdF93cml0ZV9saW5lcyBkIDEgfCBnaXQgYWRkIC1pID5vdXRwdXQgJiYKKwlzZWQgLW5lICIvbmV3IGZpbGUvLC9jb250ZW50L3AiIDxvdXRwdXQgPmRpZmYgJiYKKwlkaWZmX2NtcCBleHBlY3RlZCBkaWZmCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgd29ya3MgKGluaXRpYWwpJyAnCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF93cml0ZV9saW5lcyByIDEgfCBnaXQgYWRkIC1pICYmCisJZ2l0IGxzLWZpbGVzID5vdXRwdXQgJiYKKwkhIGdyZXAgLiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHVudHJhY2tlZCAobXVsdGlwbGUpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgJiYgcm0gWzEtOV0iICYmCisJdG91Y2ggJCh0ZXN0X3NlcSA5KSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgYSAiMi01IDgtIiB8IGdpdCBhZGQgLWkgLS0gWzEtOV0gJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDIgMyA0IDUgOCA5ID5leHBlY3RlZCAmJgorCWdpdCBscy1maWxlcyBbMS05XSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIChjb21taXQpJyAnCisJZWNobyBiYXNlbGluZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gY29tbWl0ICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gbW9yZSA+PmZpbGUgJiYKKwllY2hvIGxpbmVzID4+ZmlsZQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdvcmtzIChjb21taXQpJyAnCisJZ2l0IGFkZCAtaSA8L2Rldi9udWxsID5vdXRwdXQgJiYKKwlncmVwICIrMS8tMCAqKzIvLTAgZmlsZSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdGVkJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GCisJaW5kZXggMTgwYjQ3Yy4uYjZmMmMwOCAxMDA2NDQKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAIC0xICsxLDIgQEAKKwkgYmFzZWxpbmUKKwkrY29udGVudAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIHdvcmtzIChjb21taXQpJyAnCisJdGVzdF93cml0ZV9saW5lcyBkIDEgfCBnaXQgYWRkIC1pID5vdXRwdXQgJiYKKwlzZWQgLW5lICIvXmluZGV4LywvY29udGVudC9wIiA8b3V0cHV0ID5kaWZmICYmCisJZGlmZl9jbXAgZXhwZWN0ZWQgZGlmZgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IHdvcmtzIChjb21taXQpJyAnCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF93cml0ZV9saW5lcyByIDEgfCBnaXQgYWRkIC1pICYmCisJZ2l0IGFkZCAtaSA8L2Rldi9udWxsID5vdXRwdXQgJiYKKwlncmVwICJ1bmNoYW5nZWQgKiszLy0wIGZpbGUiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3RlZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkdW1teSBlZGl0IHdvcmtzJyAnCisJdGVzdF9zZXRfZWRpdG9yIDogJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGUgYSB8IGdpdCBhZGQgLXAgJiYKKwlnaXQgZGlmZiA+IGRpZmYgJiYKKwlkaWZmX2NtcCBleHBlY3RlZCBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHBhdGNoJyAnCisJY2F0ID5wYXRjaCA8PC1cRU9GCisJQEAgLTEsMSArMSw0IEBACisJIHRoaXMKKwkrcGF0Y2gKKwktZG9lcyBub3QKKwkgYXBwbHkKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZmFrZSBlZGl0b3InICcKKwl3cml0ZV9zY3JpcHQgImZha2VfZWRpdG9yLnNoIiA8PC1cRU9GICYmCisJbXYgLWYgIiQxIiBvbGRwYXRjaCAmJgorCW12IC1mIHBhdGNoICIkMSIKKwlFT0YKKwl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9mYWtlX2VkaXRvci5zaCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFkIGVkaXQgcmVqZWN0ZWQnICcKKwlnaXQgcmVzZXQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGUgbiBkIHwgZ2l0IGFkZCAtcCA+b3V0cHV0ICYmCisJZ3JlcCAiaHVuayBkb2VzIG5vdCBhcHBseSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHBhdGNoJyAnCisJY2F0ID5wYXRjaCA8PC1cRU9GCisJdGhpcyBwYXRjaAorCWlzIGdhcmJhZ2UKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2FyYmFnZSBlZGl0IHJlamVjdGVkJyAnCisJZ2l0IHJlc2V0ICYmCisJdGVzdF93cml0ZV9saW5lcyBlIG4gZCB8IGdpdCBhZGQgLXAgPm91dHB1dCAmJgorCWdyZXAgImh1bmsgZG9lcyBub3QgYXBwbHkiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBwYXRjaCcgJworCWNhdCA+cGF0Y2ggPDwtXEVPRgorCUBAIC0xLDAgKzEsMCBAQAorCSBiYXNlbGluZQorCStjb250ZW50CisJK25ld2NvbnRlbnQKKwkrbGluZXMKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0ZWQnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YKKwlkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKKwlpbmRleCBiNWRkNmM5Li5mOTEwYWU5IDEwMDY0NAorCS0tLSBhL2ZpbGUKKwkrKysgYi9maWxlCisJQEAgLTEsNCArMSw0IEBACisJIGJhc2VsaW5lCisJIGNvbnRlbnQKKwktbmV3Y29udGVudAorCSttb3JlCisJIGxpbmVzCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWwgZWRpdCB3b3JrcycgJworCXRlc3Rfd3JpdGVfbGluZXMgZSBuIGQgfCBnaXQgYWRkIC1wICYmCisJZ2l0IGRpZmYgPm91dHB1dCAmJgorCWRpZmZfY21wIGV4cGVjdGVkIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmaWxlJyAnCisJdGVzdF93cml0ZV9saW5lcyBhICIiIGIgIiIgYyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgYSAiIiBkICIiIGMgPmZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcGF0Y2gnICcKKwlTUD0iICIgJiYKKwlOVUxMPSIiICYmCisJY2F0ID5wYXRjaCA8PC1FT0YKKwlAQCAtMSw0ICsxLDQgQEAKKwkgYQorCSROVUxMCisJLWIKKwkrZgorCSRTUAorCWMKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0ZWQnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRgorCWRpZmYgLS1naXQgYS9maWxlIGIvZmlsZQorCWluZGV4IGI1ZGQ2YzkuLmY5MTBhZTkgMTAwNjQ0CisJLS0tIGEvZmlsZQorCSsrKyBiL2ZpbGUKKwlAQCAtMSw1ICsxLDUgQEAKKwkgYQorCSRTUAorCS1mCisJK2QKKwkkU1AKKwkgYworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0IGNhbiBzdHJpcCBzcGFjZXMgZnJvbSBlbXB0eSBjb250ZXh0IGxpbmVzJyAnCisJdGVzdF93cml0ZV9saW5lcyBlIG4gcSB8IGdpdCBhZGQgLXAgMj5lcnJvciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvciAmJgorCWdpdCBkaWZmID5vdXRwdXQgJiYKKwlkaWZmX2NtcCBleHBlY3RlZCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2tpcCBmaWxlcyBzaW1pbGFybHkgYXMgY29tbWl0IC1hJyAnCisJZ2l0IHJlc2V0ICYmCisJZWNobyBmaWxlID4uZ2l0aWdub3JlICYmCisJZWNobyBjaGFuZ2VkID5maWxlICYmCisJZWNobyB5IHwgZ2l0IGFkZCAtcCBmaWxlICYmCisJZ2l0IGRpZmYgPm91dHB1dCAmJgorCWdpdCByZXNldCAmJgorCWdpdCBjb21taXQgLWFtIGNvbW1pdCAmJgorCWdpdCBkaWZmID5leHBlY3RlZCAmJgorCWRpZmZfY21wIGV4cGVjdGVkIG91dHB1dCAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKycKK3JtIC1mIC5naXRpZ25vcmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAncGF0Y2ggZG9lcyBub3QgYWZmZWN0IG1vZGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWNobW9kICt4IGZpbGUgJiYKKwlwcmludGYgIm5cXG55XFxuIiB8IGdpdCBhZGQgLXAgJiYKKwlnaXQgc2hvdyA6ZmlsZSB8IGdyZXAgY29udGVudCAmJgorCWdpdCBkaWZmIGZpbGUgfCBncmVwICJuZXcgbW9kZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnc3RhZ2UgbW9kZSBidXQgbm90IGh1bmsnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWNobW9kICt4IGZpbGUgJiYKKwlwcmludGYgInlcXG5uXFxuIiB8IGdpdCBhZGQgLXAgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCBmaWxlIHwgZ3JlcCAibmV3IG1vZGUiICYmCisJZ2l0IGRpZmYgICAgICAgICAgZmlsZSB8IGdyZXAgIitjb250ZW50IgorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgJ3N0YWdlIG1vZGUgYW5kIGh1bmsnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWNobW9kICt4IGZpbGUgJiYKKwlwcmludGYgInlcXG55XFxuIiB8IGdpdCBhZGQgLXAgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCBmaWxlIHwgZ3JlcCAibmV3IG1vZGUiICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgZmlsZSB8IGdyZXAgIitjb250ZW50IiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgZmlsZSkiCisnCisKKyMgZW5kIG9mIHRlc3RzIGRpc2FibGVkIHdoZW4gZmlsZW1vZGUgaXMgbm90IHVzYWJsZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmZXJlbnQgcHJvbXB0cyBmb3IgbW9kZSBjaGFuZ2UvZGVsZXRlZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk+ZmlsZSAmJgorCT5kZWxldGVkICYmCisJZ2l0IGFkZCAtLWNobW9kPSt4IGZpbGUgZGVsZXRlZCAmJgorCWVjaG8gY2hhbmdlZCA+ZmlsZSAmJgorCXJtIGRlbGV0ZWQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIG4gbiBuIHwKKwlnaXQgLWMgY29yZS5maWxlbW9kZT10cnVlIGFkZCAtcCA+YWN0dWFsICYmCisJc2VkIC1uICJzL15cKChbMC05L10qKSBTdGFnZSAuKj9cKS4qL1wxL3AiIGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSgxLzEpIFN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQsP10/CisJKDEvMikgU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCxqLEosZywvLD9dPworCSgyLzIpIFN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkLEssZywvLGUsP10/CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JyZWN0IG1lc3NhZ2Ugd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhZGQgLXAgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJObyBjaGFuZ2VzIiBlcnIgJiYKKwlwcmludGYgIlxcMDEyMyIgPmJpbmFyeSAmJgorCWdpdCBhZGQgYmluYXJ5ICYmCisJcHJpbnRmICJcXDBhYmMiID5iaW5hcnkgJiYKKwlnaXQgYWRkIC1wIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGFnYWluJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfY2htb2QgK3ggZmlsZSAmJgorCWVjaG8gY29udGVudCA+PmZpbGUKKycKKworIyBXcml0ZSB0aGUgcGF0Y2ggZmlsZSB3aXRoIGEgbmV3IGxpbmUgYXQgdGhlIHRvcCBhbmQgYm90dG9tCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBwYXRjaCcgJworCWNhdCA+cGF0Y2ggPDwtXEVPRgorCWluZGV4IDE4MGI0N2MuLmI2ZjJjMDggMTAwNjQ0CisJLS0tIGEvZmlsZQorCSsrKyBiL2ZpbGUKKwlAQCAtMSwyICsxLDQgQEAKKwkrZmlyc3RsaW5lCisJIGJhc2VsaW5lCisJIGNvbnRlbnQKKwkrbGFzdGxpbmUKKwlcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwlFT0YKKycKKworIyBFeHBlY3RlZCBvdXRwdXQsIGRpZmYgaXMgc2ltaWxhciB0byB0aGUgcGF0Y2ggYnV0IHcvIGRpZmYgYXQgdGhlIHRvcAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0ZWQnICcKKwllY2hvIGRpZmYgLS1naXQgYS9maWxlIGIvZmlsZSA+ZXhwZWN0ZWQgJiYKKwljYXQgcGF0Y2ggfHNlZCAiL15pbmRleC9zLyAxMDA2NDQvIDEwMDc1NS8iID4+ZXhwZWN0ZWQgJiYKKwljYXQgPmV4cGVjdGVkLW91dHB1dCA8PC1cRU9GCisJLS0tIGEvZmlsZQorCSsrKyBiL2ZpbGUKKwlAQCAtMSwyICsxLDQgQEAKKwkrZmlyc3RsaW5lCisJIGJhc2VsaW5lCisJIGNvbnRlbnQKKwkrbGFzdGxpbmUKKwlcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwlAQCAtMSwyICsxLDMgQEAKKwkrZmlyc3RsaW5lCisJIGJhc2VsaW5lCisJIGNvbnRlbnQKKwlAQCAtMSwyICsyLDMgQEAKKwkgYmFzZWxpbmUKKwkgY29udGVudAorCStsYXN0bGluZQorCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCUVPRgorJworCisjIFRlc3Qgc3BsaXR0aW5nIHRoZSBmaXJzdCBwYXRjaCwgdGhlbiBhZGRpbmcgYm90aAordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2FkZCBmaXJzdCBsaW5lIHdvcmtzJyAnCisJZ2l0IGNvbW1pdCAtYW0gImNsZWFyIGxvY2FsIGNoYW5nZXMiICYmCisJZ2l0IGFwcGx5IHBhdGNoICYmCisJcHJpbnRmICIlc1xuIiBzIHkgeSB8IGdpdCBhZGQgLXAgZmlsZSAyPmVycm9yIHwKKwkJc2VkIC1uIC1lICJzL14oWzEtMl1cL1sxLTJdKSBTdGFnZSB0aGlzIGh1bmtbXkBdKlwoQEAgLipcKS9cMS8iIFwKKwkJICAgICAgIC1lICIvXlstK0AgXFxcXF0iL3AgID5vdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+ZGlmZiAmJgorCWRpZmZfY21wIGV4cGVjdGVkIGRpZmYgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1vdXRwdXQgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdGVkJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GCisJZGlmZiAtLWdpdCBhL25vbi1lbXB0eSBiL25vbi1lbXB0eQorCWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IGQ5NWYzYWQuLjAwMDAwMDAKKwktLS0gYS9ub24tZW1wdHkKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS1jb250ZW50CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0aW5nIGEgbm9uLWVtcHR5IGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBjb250ZW50ID5ub24tZW1wdHkgJiYKKwlnaXQgYWRkIG5vbi1lbXB0eSAmJgorCWdpdCBjb21taXQgLW0gbm9uLWVtcHR5ICYmCisJcm0gbm9uLWVtcHR5ICYmCisJZWNobyB5IHwgZ2l0IGFkZCAtcCBub24tZW1wdHkgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+ZGlmZiAmJgorCWRpZmZfY21wIGV4cGVjdGVkIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0ZWQnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YKKwlkaWZmIC0tZ2l0IGEvZW1wdHkgYi9lbXB0eQorCWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IGU2OWRlMjkuLjAwMDAwMDAKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRpbmcgYW4gZW1wdHkgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk+IGVtcHR5ICYmCisJZ2l0IGFkZCBlbXB0eSAmJgorCWdpdCBjb21taXQgLW0gZW1wdHkgJiYKKwlybSBlbXB0eSAmJgorCWVjaG8geSB8IGdpdCBhZGQgLXAgZW1wdHkgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+ZGlmZiAmJgorCWRpZmZfY21wIGV4cGVjdGVkIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgaHVuayBzZXR1cCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEwIDIwIDMwIDQwIDUwIDYwID50ZXN0ICYmCisJZ2l0IGFkZCB0ZXN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0ZXN0ICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIDEwIDE1IDIwIDIxIDIyIDIzIDI0IDMwIDQwIDUwIDYwID50ZXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvdG8gaHVuaycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IiAmJgorCXRyIF8gIiAiID5leHBlY3QgPDwtRU9GICYmCisJKDIvMikgU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQsSyxnLC8sZSw/XT8gKyAxOiAgLTEsMiArMSwzICAgICAgICAgICsxNQorCV8gMjogIC0yLDQgKzMsOCAgICAgICAgICArMjEKKwlnbyB0byB3aGljaCBodW5rPyBAQCAtMSwyICsxLDMgQEAKKwlfMTAKKwkrMTUKKwlfMjAKKwkoMS8yKSBTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCxqLEosZywvLGUsP10/XworCUVPRgorCXRlc3Rfd3JpdGVfbGluZXMgcyB5IGcgMSB8IGdpdCBhZGQgLXAgPmFjdHVhbCAmJgorCXRhaWwgLW4gNyA8YWN0dWFsID5hY3R1YWwudHJpbW1lZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwudHJpbW1lZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduYXZpZ2F0ZSB0byBodW5rIHZpYSByZWdleCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IiAmJgorCXRyIF8gIiAiID5leHBlY3QgPDwtRU9GICYmCisJKDIvMikgU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQsSyxnLC8sZSw/XT8gQEAgLTEsMiArMSwzIEBACisJXzEwCisJKzE1CisJXzIwCisJKDEvMikgU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQsaixKLGcsLyxlLD9dP18KKwlFT0YKKwl0ZXN0X3dyaXRlX2xpbmVzIHMgeSAvMSwyIHwgZ2l0IGFkZCAtcCA+YWN0dWFsICYmCisJdGFpbCAtbiA1IDxhY3R1YWwgPmFjdHVhbC50cmltbWVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC50cmltbWVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwbGl0IGh1bmsgImFkZCAtcCAoZWRpdCkiJyAnCisJIyBTcGxpdCwgc2F5IEVkaXQgYW5kIGRvIG5vdGhpbmcuICBUaGVuOgorCSMKKwkjIDEuIEJyb2tlbiB2ZXJzaW9uIHJlc3VsdHMgaW4gYSBwYXRjaCB0aGF0IGRvZXMgbm90IGFwcGx5IGFuZAorCSMgb25seSB0YWtlcyBbeS9uXSAoZWRpdCBhZ2Fpbikgc28gdGhlIGZpcnN0IHEgaXMgZGlzY2FyZGVkCisJIyBhbmQgdGhlbiBuIGF0dGVtcHRzIHRvIGRpc2NhcmQgdGhlIGVkaXQuIFJlcGVhdCBxIGVub3VnaAorCSMgdGltZXMgdG8gZ2V0IG91dC4KKwkjCisJIyAyLiBDb3JyZWN0IHZlcnNpb24gYXBwbGllcyB0aGUgKG5vdCllZGl0ZWQgdmVyc2lvbiwgYW5kIGFza3MKKwkjICAgIGFib3V0IHRoZSBuZXh0IGh1bmssIGFnYWluc3Qgd2hpY2ggd2Ugc2F5IHEgYW5kIHByb2dyYW0KKwkjICAgIGV4aXRzLgorCXByaW50ZiAiJXNcbiIgcyBlICAgICBxIG4gcSBxIHwKKwlFRElUT1I9OiBnaXQgYWRkIC1wICYmCisJZ2l0IGRpZmYgPmFjdHVhbCAmJgorCSEgZ3JlcCAiXisxNSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3NwbGl0IGh1bmsgImFkZCAtcCAobm8sIHllcywgZWRpdCkiJyAnCisJdGVzdF93cml0ZV9saW5lcyA1IDEwIDIwIDIxIDMwIDMxIDQwIDUwIDYwID50ZXN0ICYmCisJZ2l0IHJlc2V0ICYmCisJIyB0ZXN0IHNlcXVlbmNlIGlzIHMocGxpdCksIG4obyksIHkoZXMpLCBlKGRpdCkKKwkjIHEgbiBxIHEgaXMgdGhlcmUgdG8gbWFrZSBzdXJlIHdlIGV4aXQgYXQgdGhlIGVuZC4KKwlwcmludGYgIiVzXG4iIHMgbiB5IGUgICBxIG4gcSBxIHwKKwlFRElUT1I9OiBnaXQgYWRkIC1wIDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IgJiYKKwlnaXQgZGlmZiA+YWN0dWFsICYmCisJISBncmVwICJeKzMxIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgaHVuayB3aXRoIGluY29tcGxldGUgbGluZSBhdCBlbmQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcHJpbnRmICJtaXNzaW5nIExGIiA+PnRlc3QgJiYKKwlnaXQgYWRkIHRlc3QgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGJlZm9yZSAxMCAyMCAzMCA0MCA1MCA2MCA3MCA+dGVzdCAmJgorCWdpdCBncmVwIC0tY2FjaGVkIG1pc3NpbmcgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHMgbiB5IHEgfCBnaXQgYWRkIC1wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1jYWNoZWQgbWlzc2luZyAmJgorCWdpdCBncmVwIGJlZm9yZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC0tY2FjaGVkIGJlZm9yZQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdlZGl0LCBhZGRpbmcgbGluZXMgdG8gdGhlIGZpcnN0IGh1bmsnICcKKwl0ZXN0X3dyaXRlX2xpbmVzIDEwIDExIDIwIDMwIDQwIDUwIDUxIDYwID50ZXN0ICYmCisJZ2l0IHJlc2V0ICYmCisJdHIgXyAiICIgPnBhdGNoIDw8LUVPRiAmJgorCUBAIC0xLDUgKzEsNiBAQAorCV8xMAorCSsxMQorCSsxMgorCV8yMAorCSsyMQorCSsyMgorCV8zMAorCUVPRgorCSMgdGVzdCBzZXF1ZW5jZSBpcyBzKHBsaXQpLCBlKGRpdCksIG4obykKKwkjIHEgbiBxIHEgaXMgdGhlcmUgdG8gbWFrZSBzdXJlIHdlIGV4aXQgYXQgdGhlIGVuZC4KKwlwcmludGYgIiVzXG4iIHMgZSBuICAgcSBuIHEgcSB8CisJRURJVE9SPS4vZmFrZV9lZGl0b3Iuc2ggZ2l0IGFkZCAtcCAyPmVycm9yICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPmFjdHVhbCAmJgorCWdyZXAgIl4rMjIiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaCBtb2RlIGlnbm9yZXMgdW5tZXJnZWQgZW50cmllcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X2NvbW1pdCBjb25mbGljdCAmJgorCXRlc3RfY29tbWl0IG5vbi1jb25mbGljdCAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJdGVzdF9jb21taXQgc2lkZSBjb25mbGljdC50ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG1hc3RlciBjb25mbGljdC50ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHNpZGUgJiYKKwllY2hvIGNoYW5nZWQgPm5vbi1jb25mbGljdC50ICYmCisJZWNobyB5IHwgZ2l0IGFkZCAtcCA+b3V0cHV0ICYmCisJISBncmVwIGEvY29uZmxpY3QudCBvdXRwdXQgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkqIFVubWVyZ2VkIHBhdGggY29uZmxpY3QudAorCWRpZmYgLS1naXQgYS9ub24tY29uZmxpY3QudCBiL25vbi1jb25mbGljdC50CisJaW5kZXggZjc2NjIyMS4uNWVhMmVkNCAxMDA2NDQKKwktLS0gYS9ub24tY29uZmxpY3QudAorCSsrKyBiL25vbi1jb25mbGljdC50CisJQEAgLTEgKzEgQEAKKwktbm9uLWNvbmZsaWN0CisJK2NoYW5nZWQKKwlFT0YKKwlnaXQgZGlmZiAtLWNhY2hlZCA+ZGlmZiAmJgorCWRpZmZfY21wIGV4cGVjdGVkIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnMgY2FuIGJlIGNvbG9yaXplZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWVjaG8gY29udGVudCA+dGVzdCAmJgorCXByaW50ZiB5ID55ICYmCisJZm9yY2VfY29sb3IgZ2l0IGFkZCAtcCA+b3V0cHV0IDI+JjEgPHkgJiYKKworCSMgV2UgZG8gbm90IHdhbnQgdG8gZGVwZW5kIG9uIHRoZSBleGFjdCBjb2xvcmluZyBzY2hlbWUKKwkjIGdpdCB1c2VzIGZvciBkaWZmcywgc28ganVzdCBjaGVjayB0aGF0IHdlIHNhdyBzb21lIGtpbmQgb2YgY29sb3IuCisJZ3JlcCAiJChwcmludGYgIlxcMDMzIikiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb2xvcml6ZWQgZGlmZnMgcmVzcGVjdCBkaWZmLndzRXJyb3JIaWdobGlnaHQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwllY2hvICJvbGQgIiA+dGVzdCAmJgorCWdpdCBhZGQgdGVzdCAmJgorCWVjaG8gIm5ldyAiID50ZXN0ICYmCisKKwlwcmludGYgeSA+eSAmJgorCWZvcmNlX2NvbG9yIGdpdCAtYyBkaWZmLndzRXJyb3JIaWdobGlnaHQ9YWxsIGFkZCAtcCA+b3V0cHV0LnJhdyAyPiYxIDx5ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPG91dHB1dC5yYXcgPm91dHB1dCAmJgorCWdyZXAgIm9sZDwiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmRmlsdGVyIGZpbHRlcnMgZGlmZicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWVjaG8gY29udGVudCA+dGVzdCAmJgorCXRlc3RfY29uZmlnIGludGVyYWN0aXZlLmRpZmZGaWx0ZXIgInNlZCBzL14vZm9vOi8iICYmCisJcHJpbnRmIHkgPnkgJiYKKwlmb3JjZV9jb2xvciBnaXQgYWRkIC1wID5vdXRwdXQgMj4mMSA8eSAmJgorCisJIyBhdm9pZCBkZXBlbmRpbmcgb24gdGhlIGV4YWN0IGNvbG9yaW5nIG9yIGNvbnRlbnQgb2YgdGhlIHByb21wdHMsCisJIyBhbmQganVzdCBtYWtlIHN1cmUgd2Ugc2F3IG91ciBkaWZmIHByZWZpeGVkCisJZ3JlcCBmb286Lipjb250ZW50IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgYm9ndXMgZGlmZkZpbHRlciBvdXRwdXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwllY2hvIGNvbnRlbnQgPnRlc3QgJiYKKwl0ZXN0X2NvbmZpZyBpbnRlcmFjdGl2ZS5kaWZmRmlsdGVyICJzZWQgMWQiICYmCisJcHJpbnRmIHkgPnkgJiYKKwl0ZXN0X211c3RfZmFpbCBmb3JjZV9jb2xvciBnaXQgYWRkIC1wIDx5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuYWxnb3JpdGhtIGlzIHBhc3NlZCB0byBgZ2l0IGRpZmYtZmlsZXNgJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvIGNoYW5nZWQgPmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZGlmZi5hbGdvcml0aG09Ym9ndXMgYWRkIC1wIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZXJyb3I6IG9wdGlvbiBkaWZmLWFsZ29yaXRobSBhY2NlcHRzICIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoLW1vZGUgdmlhIC1pIHByb21wdHMgZm9yIGZpbGVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZWNobyBvbmUgPmZpbGUgJiYKKwllY2hvIHR3byA+dGVzdCAmJgorCWdpdCBhZGQgLWkgPDwtXEVPRiAmJgorCXBhdGNoCisJdGVzdAorCisJeQorCXF1aXQKKwlFT0YKKworCWVjaG8gdGVzdCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLW9ubHkgPmFjdHVhbCAmJgorCWRpZmZfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC1wIGhhbmRsZXMgZ2xvYnMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwlta2RpciAtcCBzdWJkaXIgJiYKKwllY2hvIGJhc2UgPm9uZS5jICYmCisJZWNobyBiYXNlID5zdWJkaXIvdHdvLmMgJiYKKwlnaXQgYWRkICIqLmMiICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisKKwllY2hvIGNoYW5nZSA+b25lLmMgJiYKKwllY2hvIGNoYW5nZSA+c3ViZGlyL3R3by5jICYmCisJZ2l0IGFkZCAtcCAiKi5jIiA8PC1cRU9GICYmCisJeQorCXkKKwlFT0YKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlvbmUuYworCXN1YmRpci90d28uYworCUVPRgorCWdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtcCBoYW5kbGVzIHJlbGF0aXZlIHBhdGhzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZWNobyBiYXNlID5yZWxwYXRoLmMgJiYKKwlnaXQgYWRkICIqLmMiICYmCisJZ2l0IGNvbW1pdCAtbSByZWxwYXRoICYmCisKKwllY2hvIGNoYW5nZSA+cmVscGF0aC5jICYmCisJbWtkaXIgLXAgc3ViZGlyICYmCisJZ2l0IC1DIHN1YmRpciBhZGQgLXAgLi4gMj5lcnJvciA8PC1cRU9GICYmCisJeQorCUVPRgorCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVscGF0aC5jCisJRU9GCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLW9ubHkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC1wIGRvZXMgbm90IGV4cGFuZCBhcmd1bWVudCBsaXN0cycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWVjaG8gY29udGVudCA+bm90LWNoYW5nZWQgJiYKKwlnaXQgYWRkIG5vdC1jaGFuZ2VkICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIG5vdC1jaGFuZ2VkIGZpbGUiICYmCisKKwllY2hvIGNoYW5nZSA+ZmlsZSAmJgorCUdJVF9UUkFDRT0kKHB3ZCkvdHJhY2Uub3V0IGdpdCBhZGQgLXAgLiA8PC1cRU9GICYmCisJeQorCUVPRgorCisJIyB3ZSBrbm93IHRoYXQgImZpbGUiIG11c3QgYmUgbWVudGlvbmVkIHNpbmNlIHdlIGFjdHVhbGx5CisJIyB1cGRhdGUgaXQsIGJ1dCB3ZSB3YW50IHRvIGJlIHN1cmUgdGhhdCBvdXIgIi4iIHBhdGhzcGVjCisJIyB3YXMgbm90IGV4cGFuZGVkIGludG8gdGhlIGFyZ3VtZW50IGxpc3Qgb2YgYW55IGNvbW1hbmQuCisJIyBTbyBsb29rIG9ubHkgZm9yICJub3QtY2hhbmdlZCIuCisJISBncmVwIC1FICJedHJhY2U6IChidWlsdC1pbnxleGVjfHJ1bl9jb21tYW5kKTogLipub3QtY2hhbmdlZCIgdHJhY2Uub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h1bmstZWRpdGluZyBoYW5kbGVzIGN1c3RvbSBjb21tZW50IGNoYXInICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBjaGFuZ2UgPj5maWxlICYmCisJdGVzdF9jb25maWcgY29yZS5jb21tZW50Q2hhciAiXCQiICYmCisJZWNobyBlIHwgR0lUX0VESVRPUj10cnVlIGdpdCBhZGQgLXAgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLXAgd29ya3MgZXZlbiB3aXRoIGNvbG9yLnVpPWFsd2F5cycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNoYW5nZSA+PmZpbGUgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci51aSBhbHdheXMgJiYKKwllY2hvIHkgfCBnaXQgYWRkIC1wICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtb25seSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkaWZmZXJlbnQga2luZHMgb2YgZGlydHkgc3VibW9kdWxlcycgJworCXRlc3RfY3JlYXRlX3JlcG8gZm9yLXN1Ym1vZHVsZXMgJiYKKwkoCisJCWNkIGZvci1zdWJtb2R1bGVzICYmCisJCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwkJdGVzdF9jcmVhdGVfcmVwbyBkaXJ0eS1oZWFkICYmCisJCSgKKwkJCWNkIGRpcnR5LWhlYWQgJiYKKwkJCXRlc3RfY29tbWl0IGluaXRpYWwKKwkJKSAmJgorCQljcCAtUiBkaXJ0eS1oZWFkIGRpcnR5LW90aGVyd2lzZSAmJgorCQljcCAtUiBkaXJ0eS1oZWFkIGRpcnR5LWJvdGgtd2F5cyAmJgorCQlnaXQgYWRkIGRpcnR5LWhlYWQgJiYKKwkJZ2l0IGFkZCBkaXJ0eS1vdGhlcndpc2UgZGlydHktYm90aC13YXlzICYmCisJCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJCWNkIGRpcnR5LWhlYWQgJiYKKwkJdGVzdF9jb21taXQgdXBkYXRlZCAmJgorCQljZCAuLi9kaXJ0eS1ib3RoLXdheXMgJiYKKwkJdGVzdF9jb21taXQgdXBkYXRlZCAmJgorCQllY2hvIGRpcnR5ID4+aW5pdGlhbCAmJgorCQk6ID51bnRyYWNrZWQgJiYKKwkJY2QgLi4vZGlydHktb3RoZXJ3aXNlICYmCisJCWVjaG8gZGlydHkgPj5pbml0aWFsICYmCisJCTogPnVudHJhY2tlZAorCSkgJiYKKwlnaXQgLUMgZm9yLXN1Ym1vZHVsZXMgZGlmZi1maWxlcyAtLW5hbWUtb25seSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJZGlydHktYm90aC13YXlzCisJZGlydHktaGVhZAorCWRpcnR5LW90aGVyd2lzZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCAtQyBmb3Itc3VibW9kdWxlcyBkaWZmLWZpbGVzIC0tbmFtZS1vbmx5IC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWRpcnR5LWJvdGgtd2F5cworCWRpcnR5LWhlYWQKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGlnbm9yZXMgZGlydHkgc3VibW9kdWxlcyAoZXhjZXB0IEhFQUQpJyAnCisJZ2l0IC1DIGZvci1zdWJtb2R1bGVzIGFkZCAtaSA8L2Rldi9udWxsID5vdXRwdXQgJiYKKwlncmVwIGRpcnR5LWhlYWQgb3V0cHV0ICYmCisJZ3JlcCBkaXJ0eS1ib3RoLXdheXMgb3V0cHV0ICYmCisJISBncmVwIGRpcnR5LW90aGVyd2lzZSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHBhdGhvbG9naWNhbCBjb250ZXh0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgYSBhIGEgYSBhIGEgYSBhIGEgYSBhID5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBhICYmCisJdGVzdF93cml0ZV9saW5lcyBjIGIgYSBhIGEgYSBhIGEgYSBiIGEgYSBhIGEgPmEgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICAgICBhIGEgYSBhIGEgYSBhIGIgYSBhIGEgYSA+ZXhwZWN0ZWQtMSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgICBiIGEgYSBhIGEgYSBhIGEgYiBhIGEgYSBhID5leHBlY3RlZC0yICYmCisJIyBjaGVjayBlZGl0aW5nIGNhbiBjb3BlIHdpdGggbWlzc2luZyBoZWFkZXIgYW5kIGRlbGV0ZWQgY29udGV4dCBsaW5lcworCSMgYXMgd2VsbCBhcyBjaGFuZ2VzIHRvIG90aGVyIGxpbmVzCisJdGVzdF93cml0ZV9saW5lcyArYiAiIGEiID5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLXAgd29ya3Mgd2l0aCBwYXRob2xvZ2ljYWwgY29udGV4dCBsaW5lcycgJworCWdpdCByZXNldCAmJgorCXByaW50ZiAiJXNcbiIgbiB5IHwKKwlnaXQgYWRkIC1wICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgOmEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLTEgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtcCBwYXRjaCBlZGl0aW5nIHdvcmtzIHdpdGggcGF0aG9sb2dpY2FsIGNvbnRleHQgbGluZXMnICcKKwlnaXQgcmVzZXQgJiYKKwkjIG4gcSBxIGJlbG93IGlzIGluIGNhc2UgZWRpdCBmYWlscworCXByaW50ZiAiJXNcbiIgZSB5ICAgIG4gcSBxIHwKKwlnaXQgYWRkIC1wICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgOmEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLTIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1wIHdvcmtzIHdpdGggcGF0aG9sb2dpY2FsIGNvbnRleHQgbGluZXMnICcKKwl0ZXN0X3dyaXRlX2xpbmVzIGEgYSBhIGEgYSBhID5hICYmCisJZ2l0IGFkZCBhICYmCisJdGVzdF93cml0ZV9saW5lcyBhIGIgYSBiIGEgYiBhIGIgYSBiIGEgPmEgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHMgbiBuIHkgcSB8IGdpdCBjaGVja291dCAtcCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgYSBiIGEgYiBhIGEgYiBhIGIgYSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBoZWxwIGZyb20gYWRkLS1oZWxwZXInICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisKKwk8Qk9MRD4qKiogQ29tbWFuZHMgKioqPFJFU0VUPgorCSAgMTogPEJPTEQ7QkxVRT5zPFJFU0VUPnRhdHVzCSAgMjogPEJPTEQ7QkxVRT51PFJFU0VUPnBkYXRlCSAgMzogPEJPTEQ7QkxVRT5yPFJFU0VUPmV2ZXJ0CSAgNDogPEJPTEQ7QkxVRT5hPFJFU0VUPmRkIHVudHJhY2tlZAorCSAgNTogPEJPTEQ7QkxVRT5wPFJFU0VUPmF0Y2gJICA2OiA8Qk9MRDtCTFVFPmQ8UkVTRVQ+aWZmCSAgNzogPEJPTEQ7QkxVRT5xPFJFU0VUPnVpdAkgIDg6IDxCT0xEO0JMVUU+aDxSRVNFVD5lbHAKKwk8Qk9MRDtCTFVFPldoYXQgbm93PFJFU0VUPj4gPEJPTEQ7UkVEPnN0YXR1cyAgICAgICAgLSBzaG93IHBhdGhzIHdpdGggY2hhbmdlczxSRVNFVD4KKwk8Qk9MRDtSRUQ+dXBkYXRlICAgICAgICAtIGFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlczxSRVNFVD4KKwk8Qk9MRDtSRUQ+cmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uPFJFU0VUPgorCTxCT0xEO1JFRD5wYXRjaCAgICAgICAgIC0gcGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5PFJFU0VUPgorCTxCT0xEO1JFRD5kaWZmICAgICAgICAgIC0gdmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXg8UkVTRVQ+CisJPEJPTEQ7UkVEPmFkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXM8UkVTRVQ+CisJPEJPTEQ+KioqIENvbW1hbmRzICoqKjxSRVNFVD4KKwkgIDE6IDxCT0xEO0JMVUU+czxSRVNFVD50YXR1cwkgIDI6IDxCT0xEO0JMVUU+dTxSRVNFVD5wZGF0ZQkgIDM6IDxCT0xEO0JMVUU+cjxSRVNFVD5ldmVydAkgIDQ6IDxCT0xEO0JMVUU+YTxSRVNFVD5kZCB1bnRyYWNrZWQKKwkgIDU6IDxCT0xEO0JMVUU+cDxSRVNFVD5hdGNoCSAgNjogPEJPTEQ7QkxVRT5kPFJFU0VUPmlmZgkgIDc6IDxCT0xEO0JMVUU+cTxSRVNFVD51aXQJICA4OiA8Qk9MRDtCTFVFPmg8UkVTRVQ+ZWxwCisJPEJPTEQ7QkxVRT5XaGF0IG5vdzxSRVNFVD4+JFNQCisJQnllLgorCUVPRgorCXRlc3Rfd3JpdGVfbGluZXMgaCB8IGZvcmNlX2NvbG9yIGdpdCBhZGQgLWkgPmFjdHVhbC5jb2xvcmVkICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5jb2xvcmVkID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM3MDItYWRkLWVkaXQuc2ggYi90L3QzNzAyLWFkZC1lZGl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjNjc2NjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNzAyLWFkZC1lZGl0LnNoCkBAIC0wLDAgKzEsMTI3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nYWRkIC1lIGJhc2ljIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKKworY2F0ID4gZmlsZSA8PCBFT0YKK0xPLCBwcmFpc2Ugb2YgdGhlIHByb3dlc3Mgb2YgcGVvcGxlLWtpbmdzCitvZiBzcGVhci1hcm1lZCBEYW5lcywgaW4gZGF5cyBsb25nIHNwZWQsCit3ZSBoYXZlIGhlYXJkLCBhbmQgd2hhdCBob25vciB0aGUgYXRoZWxpbmdzIHdvbiEKK09mdCBTY3lsZCB0aGUgU2NlZmluZyBmcm9tIHNxdWFkcm9uZWQgZm9lcywKK2Zyb20gbWFueSBhIHRyaWJlLCB0aGUgbWVhZC1iZW5jaCB0b3JlLAorYXdpbmcgdGhlIGVhcmxzLiBTaW5jZSBlcnN0IGhlIGxheQorZnJpZW5kbGVzcywgYSBmb3VuZGxpbmcsIGZhdGUgcmVwYWlkIGhpbToKK2ZvciBoZSB3YXhlZCB1bmRlciB3ZWxraW4sIGluIHdlYWx0aCBoZSB0aHJvdmUsCit0aWxsIGJlZm9yZSBoaW0gdGhlIGZvbGssIGJvdGggZmFyIGFuZCBuZWFyLAord2hvIGhvdXNlIGJ5IHRoZSB3aGFsZS1wYXRoLCBoZWFyZCBoaXMgbWFuZGF0ZSwKK2dhdmUgaGltIGdpZnRzOiAgYSBnb29kIGtpbmcgaGUhCitFT0YKKworY2F0ID4gc2Vjb25kLXBhcnQgPDwgRU9GCitUbyBoaW0gYW4gaGVpciB3YXMgYWZ0ZXJ3YXJkIGJvcm4sCithIHNvbiBpbiBoaXMgaGFsbHMsIHdob20gaGVhdmVuIHNlbnQKK3RvIGZhdm9yIHRoZSBmb2xrLCBmZWVsaW5nIHRoZWlyIHdvZQordGhhdCBlcnN0IHRoZXkgaGFkIGxhY2tlZCBhbiBlYXJsIGZvciBsZWFkZXIKK3NvIGxvbmcgYSB3aGlsZTsgdGhlIExvcmQgZW5kb3dlZCBoaW0sCit0aGUgV2llbGRlciBvZiBXb25kZXIsIHdpdGggd29ybGQncyByZW5vd24uCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCBmaWxlCisKKycKKworY2F0ID4gZXhwZWN0ZWQtcGF0Y2ggPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xLDExICsxLDYgQEAKKy1MTywgcHJhaXNlIG9mIHRoZSBwcm93ZXNzIG9mIHBlb3BsZS1raW5ncworLW9mIHNwZWFyLWFybWVkIERhbmVzLCBpbiBkYXlzIGxvbmcgc3BlZCwKKy13ZSBoYXZlIGhlYXJkLCBhbmQgd2hhdCBob25vciB0aGUgYXRoZWxpbmdzIHdvbiEKKy1PZnQgU2N5bGQgdGhlIFNjZWZpbmcgZnJvbSBzcXVhZHJvbmVkIGZvZXMsCistZnJvbSBtYW55IGEgdHJpYmUsIHRoZSBtZWFkLWJlbmNoIHRvcmUsCistYXdpbmcgdGhlIGVhcmxzLiBTaW5jZSBlcnN0IGhlIGxheQorLWZyaWVuZGxlc3MsIGEgZm91bmRsaW5nLCBmYXRlIHJlcGFpZCBoaW06CistZm9yIGhlIHdheGVkIHVuZGVyIHdlbGtpbiwgaW4gd2VhbHRoIGhlIHRocm92ZSwKKy10aWxsIGJlZm9yZSBoaW0gdGhlIGZvbGssIGJvdGggZmFyIGFuZCBuZWFyLAorLXdobyBob3VzZSBieSB0aGUgd2hhbGUtcGF0aCwgaGVhcmQgaGlzIG1hbmRhdGUsCistZ2F2ZSBoaW0gZ2lmdHM6ICBhIGdvb2Qga2luZyBoZSEKKytUbyBoaW0gYW4gaGVpciB3YXMgYWZ0ZXJ3YXJkIGJvcm4sCisrYSBzb24gaW4gaGlzIGhhbGxzLCB3aG9tIGhlYXZlbiBzZW50CisrdG8gZmF2b3IgdGhlIGZvbGssIGZlZWxpbmcgdGhlaXIgd29lCisrdGhhdCBlcnN0IHRoZXkgaGFkIGxhY2tlZCBhbiBlYXJsIGZvciBsZWFkZXIKKytzbyBsb25nIGEgd2hpbGU7IHRoZSBMb3JkIGVuZG93ZWQgaGltLAorK3RoZSBXaWVsZGVyIG9mIFdvbmRlciwgd2l0aCB3b3JsZCdzIHJlbm93bi4KK0VPRgorCitjYXQgPiBwYXRjaCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggYjk4MzRiNS4uZWY2ZTk0YyAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0zLDEgKzMsMzMzIEBAIG9mIHNwZWFyLWFybWVkIERhbmVzLCBpbiBkYXlzIGxvbmcgc3BlZCwKKyB3ZSBoYXZlIGhlYXJkLCBhbmQgd2hhdCBob25vciB0aGUgYXRoZWxpbmdzIHdvbiEKKysKKyBPZnQgU2N5bGQgdGhlIFNjZWZpbmcgZnJvbSBzcXVhZHJvbmVkIGZvZXMsCitAQCAtMiw3ICsxLDUgQEAgYXdpbmcgdGhlIGVhcmxzLiBTaW5jZSBlcnN0IGhlIGxheQorIGZyaWVuZGxlc3MsIGEgZm91bmRsaW5nLCBmYXRlIHJlcGFpZCBoaW06CisrCisgZm9yIGhlIHdheGVkIHVuZGVyIHdlbGtpbiwgaW4gd2VhbHRoIGhlIHRocm92ZSwKK0VPRgorCitjYXQgPiBleHBlY3RlZCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQorLS0tIGEvZmlsZQorKysrIGIvZmlsZQorQEAgLTEsMTAgKzEsMTIgQEAKKyBMTywgcHJhaXNlIG9mIHRoZSBwcm93ZXNzIG9mIHBlb3BsZS1raW5ncworIG9mIHNwZWFyLWFybWVkIERhbmVzLCBpbiBkYXlzIGxvbmcgc3BlZCwKKyB3ZSBoYXZlIGhlYXJkLCBhbmQgd2hhdCBob25vciB0aGUgYXRoZWxpbmdzIHdvbiEKKysKKyBPZnQgU2N5bGQgdGhlIFNjZWZpbmcgZnJvbSBzcXVhZHJvbmVkIGZvZXMsCisgZnJvbSBtYW55IGEgdHJpYmUsIHRoZSBtZWFkLWJlbmNoIHRvcmUsCisgYXdpbmcgdGhlIGVhcmxzLiBTaW5jZSBlcnN0IGhlIGxheQorIGZyaWVuZGxlc3MsIGEgZm91bmRsaW5nLCBmYXRlIHJlcGFpZCBoaW06CisrCisgZm9yIGhlIHdheGVkIHVuZGVyIHdlbGtpbiwgaW4gd2VhbHRoIGhlIHRocm92ZSwKKyB0aWxsIGJlZm9yZSBoaW0gdGhlIGZvbGssIGJvdGggZmFyIGFuZCBuZWFyLAorIHdobyBob3VzZSBieSB0aGUgd2hhbGUtcGF0aCwgaGVhcmQgaGlzIG1hbmRhdGUsCitFT0YKKworZWNobyAiIyEkU0hFTExfUEFUSCIgPmZha2UtZWRpdG9yLnNoCitjYXQgPj4gZmFrZS1lZGl0b3Iuc2ggPDxcRU9GCitlZ3JlcCAtdiAnXmluZGV4JyAiJDEiID5vcmlnLXBhdGNoICYmCittdiAtZiBwYXRjaCAiJDEiCitFT0YKKwordGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvZmFrZS1lZGl0b3Iuc2giCitjaG1vZCBhK3ggZmFrZS1lZGl0b3Iuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC1lJyAnCisKKwljcCBzZWNvbmQtcGFydCBmaWxlICYmCisJZ2l0IGFkZCAtZSAmJgorCXRlc3RfY21wIHNlY29uZC1wYXJ0IGZpbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1wYXRjaCBvcmlnLXBhdGNoICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPmFjdHVhbCAmJgorCWdyZXAgLXYgaW5kZXggYWN0dWFsID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLWUgbm90aWNlcyBlZGl0b3IgZmFpbHVyZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNoYW5nZSA+PmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX0VESVRPUj1mYWxzZSBnaXQgYWRkIC1lICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwMy1hZGQtbWFnaWMtcGF0aHNwZWMuc2ggYi90L3QzNzAzLWFkZC1tYWdpYy1wYXRoc3BlYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZWY1MjVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzcwMy1hZGQtbWFnaWMtcGF0aHNwZWMuc2gKQEAgLTAsMCArMSw1OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21hZ2ljIHBhdGhzcGVjIHRlc3RzIHVzaW5nIGdpdC1hZGQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIHN1YiBhbm90aGVyc3ViICYmCisJOiA+c3ViL2ZvbyAmJgorCTogPmFub3RoZXJzdWIvZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCA6LycgIgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJYWRkICdhbm90aGVyc3ViL2ZvbycKKwlhZGQgJ2V4cGVjdGVkJworCWFkZCAnc3ViL2FjdHVhbCcKKwlhZGQgJ3N1Yi9mb28nCisJRU9GCisJKGNkIHN1YiAmJiBnaXQgYWRkIC1uIDovID5hY3R1YWwpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgc3ViL2FjdHVhbAorIgorCitjYXQgPmV4cGVjdGVkIDw8RU9GCithZGQgJ2Fub3RoZXJzdWIvZm9vJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCA6L2Fub3RoZXJzdWInICcKKwkoY2Qgc3ViICYmIGdpdCBhZGQgLW4gOi9hbm90aGVyc3ViID5hY3R1YWwpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgc3ViL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgOi9ub24tZXhpc3RlbnQnICcKKwkoY2Qgc3ViICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLW4gOi9ub24tZXhpc3RlbnQpCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2FkZCAnc3ViL2ZvbycKK0VPRgorCitpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVyAmJiBta2RpciAiOiIgMj4vZGV2L251bGwKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgQ09MT05fRElSCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENPTE9OX0RJUiAnYSBmaWxlIHdpdGggdGhlIHNhbWUgKGxvbmcpIG1hZ2ljIG5hbWUgZXhpc3RzJyAnCisJOiA+IjooaWNhc2UpaGEiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtbiAiOihpY2FzZSloYSIgJiYKKwlnaXQgYWRkIC1uICIuLzooaWNhc2UpaGEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ09MT05fRElSICdhIGZpbGUgd2l0aCB0aGUgc2FtZSAoc2hvcnQpIG1hZ2ljIG5hbWUgZXhpc3RzJyAnCisJOiA+IjovYmFyIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLW4gOi9iYXIgJiYKKwlnaXQgYWRkIC1uICIuLzovYmFyIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM3MDQtYWRkLXBhdGhzcGVjLWZpbGUuc2ggYi90L3QzNzA0LWFkZC1wYXRoc3BlYy1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllMzVjMWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNzA0LWFkZC1wYXRoc3BlYy1maWxlLnNoCkBAIC0wLDAgKzEsMTU5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF90aWNrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IGZpbGUwICYmCisJZWNobyBBID5maWxlQS50ICYmCisJZWNobyBCID5maWxlQi50ICYmCisJZWNobyBDID5maWxlQy50ICYmCisJZWNobyBEID5maWxlRC50CisnCisKK3Jlc3RvcmVfY2hlY2twb2ludCAoKSB7CisJZ2l0IHJlc2V0Cit9CisKK3ZlcmlmeV9leHBlY3QgKCkgeworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS11bnRyYWNrZWQtZmlsZXM9bm8gLS0gZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBmcm9tIHN0ZGluJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwllY2hvIGZpbGVBLnQgfCBnaXQgYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBICBmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBmcm9tIGZpbGUnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWVjaG8gZmlsZUEudCA+bGlzdCAmJgorCWdpdCBhZGQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEgIGZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTCBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcMGZpbGVCLnRcMCIgfCBnaXQgYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1wYXRoc3BlYy1maWxlLW51bCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEgIGZpbGVBLnQKKwlBICBmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMRiBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnRcbiIgfCBnaXQgYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBICBmaWxlQS50CisJQSAgZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gdHJhaWxpbmcgZGVsaW1pdGVyJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnQiIHwgZ2l0IGFkZCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQSAgZmlsZUEudAorCUEgIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NSTEYgZGVsaW1pdGVycycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XHJcbmZpbGVCLnRcclxuIiB8IGdpdCBhZGQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEgIGZpbGVBLnQKKwlBICBmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWNhdCA+bGlzdCA8PC1cRU9GICYmCisJImZpbGVcMTAxLnQiCisJRU9GCisKKwlnaXQgYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBICBmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMgbm90IGNvbXBhdGlibGUgd2l0aCAtLXBhdGhzcGVjLWZpbGUtbnVsJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwljYXQgPmxpc3QgPDwtXEVPRiAmJgorCSJmaWxlXDEwMS50IgorCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tcGF0aHNwZWMtZmlsZS1udWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25seSB0b3VjaGVzIHdoYXQgd2FzIGxpc3RlZCcgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQi50XG5maWxlQy50XG4iIHwgZ2l0IGFkZCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQSAgZmlsZUIudAorCUEgIGZpbGVDLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIGNvbmRpdGlvbnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKwllY2hvIGZpbGVBLnQgPmxpc3QgJiYKKwk+ZW1wdHlfbGlzdCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0taW50ZXJhY3RpdmUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tcGF0Y2ggMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tZWRpdCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZWRpdCIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS0gZmlsZUEudCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tcGF0aHNwZWMtZmlsZS1udWwgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIiBlcnIgJiYKKworCSMgVGhpcyBjYXNlIHN1Y2NlZWRzLCBidXQgc3RpbGwgcHJpbnRzIHRvIHN0ZGVycgorCWdpdCBhZGQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9ZW1wdHlfbGlzdCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLiIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzgwMC1ta3RhZy5zaCBiL3QvdDM4MDAtbWt0YWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjRkY2M1ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM4MDAtbWt0YWcuc2gKQEAgLTAsMCArMSwzNjYgQEAKKyMhL2Jpbi9zaAorIworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWt0YWc6IHRhZyBvYmplY3QgdmVyaWZ5IHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBjaGVjayB0aGUgdGFnLnNpZyBmaWxlLCBleHBlY3RpbmcgdmVyaWZ5X3RhZygpIHRvIGZhaWwsCisjIGFuZCBjaGVja2luZyB0aGF0IHRoZSBlcnJvciBtZXNzYWdlIG1hdGNoZXMgdGhlIHBhdHRlcm4KKyMgZ2l2ZW4gaW4gdGhlIGV4cGVjdC5wYXQgZmlsZS4KKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgKCkgeworCWV4cGVjdD0iJDIiCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJDEiICcKKwkJKCB0ZXN0X211c3RfZmFpbCBnaXQgbWt0YWcgPHRhZy5zaWcgMj5tZXNzYWdlICkgJiYKKwkJZ3JlcCAiJGV4cGVjdCIgbWVzc2FnZQorCScKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmlyc3QgY3JlYXRlIGEgY29tbWl0LCBzbyB3ZSBoYXZlIGEgdmFsaWQgb2JqZWN0L3R5cGUKKyMgZm9yIHRoZSB0YWcuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3Rfb2lkX2luaXQgJiYKKwllY2hvIEhlbGxvID5BICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICAxLiBsZW5ndGggY2hlY2sKKworY2F0ID50YWcuc2lnIDw8RU9GCit0b28gc2hvcnQgZm9yIGEgdGFnCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ1RhZyBvYmplY3QgbGVuZ3RoIGNoZWNrJyBcCisJJ15lcnJvcjogLipzaXplIHdyb25nLiokJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIDIuIG9iamVjdCBsaW5lIGxhYmVsIGNoZWNrCisKK2NhdCA+dGFnLnNpZyA8PEVPRgoreHh4eHh4IDEzOWU5YjMzOTg2YjFjMjY3MGZmZjUyYzUwNjc2MDMxMTdiM2U4OTUKK3R5cGUgdGFnCit0YWcgbXl0YWcKK3RhZ2dlciAuIDw+IDAgKzAwMDAKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICcib2JqZWN0IiBsaW5lIGxhYmVsIGNoZWNrJyAnXmVycm9yOiBjaGFyMDogLioib2JqZWN0ICIkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIDMuIG9iamVjdCBsaW5lIFNIQTEgY2hlY2sKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3Qgeno5ZTliMzM5ODZiMWMyNjcwZmZmNTJjNTA2NzYwMzExN2IzZTg5NQordHlwZSB0YWcKK3RhZyBteXRhZwordGFnZ2VyIC4gPD4gMCArMDAwMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJyJvYmplY3QiIGxpbmUgU0hBMSBjaGVjaycgJ15lcnJvcjogY2hhcjc6IC4qU0hBMSBoYXNoJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICA0LiB0eXBlIGxpbmUgbGFiZWwgY2hlY2sKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3h4eHggdGFnCit0YWcgbXl0YWcKK3RhZ2dlciAuIDw+IDAgKzAwMDAKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICcidHlwZSIgbGluZSBsYWJlbCBjaGVjaycgJ15lcnJvcjogY2hhci4qOiAuKiJcXG50eXBlICIkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIDUuIHR5cGUgbGluZSBlb2wgY2hlY2sKKworZWNobyAib2JqZWN0ICRoZWFkIiA+dGFnLnNpZworcHJpbnRmICJ0eXBlIHRhZ3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3MiID4+dGFnLnNpZworCitjaGVja192ZXJpZnlfZmFpbHVyZSAnInR5cGUiIGxpbmUgZW9sIGNoZWNrJyAnXmVycm9yOiBjaGFyLio6IC4qIlxcbiIkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIDYuIHRhZyBsaW5lIGxhYmVsIGNoZWNrICMxCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIHRhZworeHh4IG15dGFnCit0YWdnZXIgLiA8PiAwICswMDAwCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnInRhZyIgbGluZSBsYWJlbCBjaGVjayAjMScgXAorCSdeZXJyb3I6IGNoYXIuKjogbm8gInRhZyAiIGZvdW5kJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICA3LiB0YWcgbGluZSBsYWJlbCBjaGVjayAjMgorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSB0YWdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cKK3RhZworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICcidGFnIiBsaW5lIGxhYmVsIGNoZWNrICMyJyBcCisJJ15lcnJvcjogY2hhci4qOiBubyAidGFnICIgZm91bmQkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIDguIHR5cGUgbGluZSB0eXBlLW5hbWUgbGVuZ3RoIGNoZWNrCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIHRhZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZwordGFnIG15dGFnCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJyJ0eXBlIiBsaW5lIHR5cGUtbmFtZSBsZW5ndGggY2hlY2snIFwKKwknXmVycm9yOiBjaGFyLio6IHR5cGUgdG9vIGxvbmckJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIDkuIHZlcmlmeSBvYmplY3QgKFNIQTEvdHlwZSkgY2hlY2sKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJCh0ZXN0X29pZCBkZWFkYmVlZikKK3R5cGUgdGFnZ2dnCit0YWcgbXl0YWcKK3RhZ2dlciAuIDw+IDAgKzAwMDAKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICd2ZXJpZnkgb2JqZWN0IChTSEExL3R5cGUpIGNoZWNrJyBcCisJJ15lcnJvcjogY2hhcjc6IGNvdWxkIG5vdCB2ZXJpZnkgb2JqZWN0LiokJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTAuIHZlcmlmeSB0YWctbmFtZSBjaGVjaworCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteQl0YWcKK3RhZ2dlciAuIDw+IDAgKzAwMDAKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICd2ZXJpZnkgdGFnLW5hbWUgY2hlY2snIFwKKwknXmVycm9yOiBjaGFyLio6IGNvdWxkIG5vdCB2ZXJpZnkgdGFnIG5hbWUkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTEuIHRhZ2dlciBsaW5lIGxhYmVsIGNoZWNrICMxCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCisKK1RoaXMgaXMgZmlsbGVyCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJyJ0YWdnZXIiIGxpbmUgbGFiZWwgY2hlY2sgIzEnIFwKKwknXmVycm9yOiBjaGFyLio6IGNvdWxkIG5vdCBmaW5kICJ0YWdnZXIgIiQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAxMi4gdGFnZ2VyIGxpbmUgbGFiZWwgY2hlY2sgIzIKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlcgorCitUaGlzIGlzIGZpbGxlcgorRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICcidGFnZ2VyIiBsaW5lIGxhYmVsIGNoZWNrICMyJyBcCisJJ15lcnJvcjogY2hhci4qOiBjb3VsZCBub3QgZmluZCAidGFnZ2VyICIkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTMuIGRpc2FsbG93IG1pc3NpbmcgdGFnIGF1dGhvciBuYW1lCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgIDw+IDAgKzAwMDAKKworVGhpcyBpcyBmaWxsZXIKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGlzYWxsb3cgbWlzc2luZyB0YWcgYXV0aG9yIG5hbWUnIFwKKwknXmVycm9yOiBjaGFyLio6IG1pc3NpbmcgdGFnZ2VyIG5hbWUkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTQuIGRpc2FsbG93IG1pc3NpbmcgdGFnIGF1dGhvciBuYW1lCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPAorID4gMCArMDAwMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2Rpc2FsbG93IG1hbGZvcm1lZCB0YWdnZXInIFwKKwknXmVycm9yOiBjaGFyLio6IG1hbGZvcm1lZCB0YWdnZXIgZmllbGQkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTUuIGFsbG93IGVtcHR5IHRhZyBlbWFpbAorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDw+IDAgKzAwMDAKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhbGxvdyBlbXB0eSB0YWcgZW1haWwnIFwKKyAgICAnZ2l0IG1rdGFnIDx0YWcuc2lnID4uZ2l0L3JlZnMvdGFncy9teXRhZyAyPm1lc3NhZ2UnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAxNi4gZGlzYWxsb3cgc3BhY2VzIGluIHRhZyBlbWFpbAorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDx0YWcgZ2VyQGV4YW1wbGUuY29tPiAwICswMDAwCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGlzYWxsb3cgc3BhY2VzIGluIHRhZyBlbWFpbCcgXAorCSdeZXJyb3I6IGNoYXIuKjogbWFsZm9ybWVkIHRhZ2dlciBmaWVsZCQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAxNy4gZGlzYWxsb3cgbWlzc2luZyB0YWcgdGltZXN0YW1wCisKK3RyICdfJyAnICcgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+X18KKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICdkaXNhbGxvdyBtaXNzaW5nIHRhZyB0aW1lc3RhbXAnIFwKKwknXmVycm9yOiBjaGFyLio6IG1pc3NpbmcgdGFnIHRpbWVzdGFtcCQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAxOC4gZGV0ZWN0IGludmFsaWQgdGFnIHRpbWVzdGFtcDEKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPiBUdWUgTWFyIDI1IDE1OjQ3OjQ0IDIwMDgKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICdkZXRlY3QgaW52YWxpZCB0YWcgdGltZXN0YW1wMScgXAorCSdeZXJyb3I6IGNoYXIuKjogbWlzc2luZyB0YWcgdGltZXN0YW1wJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDE5LiBkZXRlY3QgaW52YWxpZCB0YWcgdGltZXN0YW1wMgorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+IDIwMDgtMDMtMzFUMTI6MjA6MTUtMDUwMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2RldGVjdCBpbnZhbGlkIHRhZyB0aW1lc3RhbXAyJyBcCisJJ15lcnJvcjogY2hhci4qOiBtYWxmb3JtZWQgdGFnIHRpbWVzdGFtcCQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAyMC4gZGV0ZWN0IGludmFsaWQgdGFnIHRpbWV6b25lMQorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+IDEyMDY0NzgyMzMgR01UCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGV0ZWN0IGludmFsaWQgdGFnIHRpbWV6b25lMScgXAorCSdeZXJyb3I6IGNoYXIuKjogbWFsZm9ybWVkIHRhZyB0aW1lem9uZSQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAyMS4gZGV0ZWN0IGludmFsaWQgdGFnIHRpbWV6b25lMgorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+IDEyMDY0NzgyMzMgKyAgMzAKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICdkZXRlY3QgaW52YWxpZCB0YWcgdGltZXpvbmUyJyBcCisJJ15lcnJvcjogY2hhci4qOiBtYWxmb3JtZWQgdGFnIHRpbWV6b25lJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDIyLiBkZXRlY3QgaW52YWxpZCB0YWcgdGltZXpvbmUzCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIwNjQ3ODIzMyAtMTQzMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2RldGVjdCBpbnZhbGlkIHRhZyB0aW1lem9uZTMnIFwKKwknXmVycm9yOiBjaGFyLio6IG1hbGZvcm1lZCB0YWcgdGltZXpvbmUkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMjMuIGRldGVjdCBpbnZhbGlkIGhlYWRlciBlbnRyeQorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+IDEyMDY0NzgyMzMgLTA1MDAKK3RoaXMgbGluZSBzaG91bGQgbm90IGJlIGhlcmUKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICdkZXRlY3QgaW52YWxpZCBoZWFkZXIgZW50cnknIFwKKwknXmVycm9yOiBjaGFyLio6IHRyYWlsaW5nIGdhcmJhZ2UgaW4gdGFnIGhlYWRlciQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAyNC4gY3JlYXRlIHZhbGlkIHRhZworCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+IDEyMDY0NzgyMzMgLTA1MDAKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGUgdmFsaWQgdGFnJyBcCisgICAgJ2dpdCBta3RhZyA8dGFnLnNpZyA+LmdpdC9yZWZzL3RhZ3MvbXl0YWcgMj5tZXNzYWdlJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMjUuIGNoZWNrIG15dGFnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVjayBteXRhZycgXAorICAgICdnaXQgdGFnIC1sIHwgZ3JlcCBteXRhZycKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDAtaTE4bi1jb21taXQuc2ggYi90L3QzOTAwLWkxOG4tY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQyNzdhOWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAwLWkxOG4tY29tbWl0LnNoCkBAIC0wLDAgKzEsMjQ0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2NvbW1pdCBhbmQgbG9nIG91dHB1dCBlbmNvZGluZ3MnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb21wYXJlX3dpdGggKCkgeworCWdpdCBzaG93IC1zICQxIHwgc2VkIC1lICcxLC9eJC9kJyAtZSAncy9eICAgIC8vJyA+Y3VycmVudCAmJgorCWNhc2UgIiQzIiBpbgorCScnKQorCQl0ZXN0X2NtcCAiJDIiIGN1cnJlbnQgOzsKKwk/KikKKwkJaWNvbnYgLWYgIiQzIiAtdCBVVEYtOCA+Y3VycmVudC51dGY4IDxjdXJyZW50ICYmCisJCWljb252IC1mICIkMyIgLXQgVVRGLTggPmV4cGVjdC51dGY4IDwiJDIiICYmCisJCXRlc3RfY21wIGV4cGVjdC51dGY4IGN1cnJlbnQudXRmOAorCQk7OworCWVzYWMKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJOiA+RiAmJgorCWdpdCBhZGQgRiAmJgorCVQ9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlDPSQoZ2l0IGNvbW1pdC10cmVlICRUIDwiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8xLVVURi04LnR4dCkgJiYKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICRDICYmCisJZ2l0IHRhZyBDMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBlbmNvZGluZyBoZWFkZXIgZm9yIGJhc2UgY2FzZScgJworCUU9JChnaXQgY2F0LWZpbGUgY29tbWl0IEMwIHwgc2VkIC1uZSAicy9eZW5jb2RpbmcgLy9wIikgJiYKKwl0ZXN0IHogPSAieiRFIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdVVEYtMTYgcmVmdXNlZCBiZWNhdXNlIG9mIE5VTHMnICcKKwllY2hvIFVURi0xNiA+RiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLWEgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvVVRGLTE2LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdVVEYtOCBpbnZhbGlkIGNoYXJhY3RlcnMgcmVmdXNlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCJcJEhPTUUvc3RkZXJyXCIgXCJcJEhPTUUvaW52YWxpZFwiIiAmJgorCWVjaG8gIlVURi04IGNoYXJhY3RlcnMiID5GICYmCisJcHJpbnRmICJDb21taXQgbWVzc2FnZVxuXG5JbnZhbGlkIHN1cnJvZ2F0ZTpcMzU1XDI0MFwyMDBcbiIgXAorCQk+IiRIT01FL2ludmFsaWQiICYmCisJZ2l0IGNvbW1pdCAtYSAtRiAiJEhPTUUvaW52YWxpZCIgMj4iJEhPTUUiL3N0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImRpZCBub3QgY29uZm9ybSIgIiRIT01FIi9zdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVVRGLTggb3Zlcmxvbmcgc2VxdWVuY2VzIHJlamVjdGVkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIlwkSE9NRS9zdGRlcnJcIiBcIlwkSE9NRS9pbnZhbGlkXCIiICYmCisJcm0gLWYgIiRIT01FL3N0ZGVyciIgIiRIT01FL2ludmFsaWQiICYmCisJZWNobyAiVVRGLTggb3ZlcmxvbmciID5GICYmCisJcHJpbnRmICJcMzQwXDIwMlwyNTFvbW1pdCBtZXNzYWdlXG5cblRoaXMgaXMgbm90IGEgc3BhY2U6XDMwMFwyNDBcbiIgXAorCQk+IiRIT01FL2ludmFsaWQiICYmCisJZ2l0IGNvbW1pdCAtYSAtRiAiJEhPTUUvaW52YWxpZCIgMj4iJEhPTUUiL3N0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImRpZCBub3QgY29uZm9ybSIgIiRIT01FIi9zdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVVRGLTggbm9uLWNoYXJhY3RlcnMgcmVmdXNlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCJcJEhPTUUvc3RkZXJyXCIgXCJcJEhPTUUvaW52YWxpZFwiIiAmJgorCWVjaG8gIlVURi04IG5vbi1jaGFyYWN0ZXIgMSIgPkYgJiYKKwlwcmludGYgIkNvbW1pdCBtZXNzYWdlXG5cbk5vbi1jaGFyYWN0ZXI6XDM2NFwyMTdcMjc3XDI3NlxuIiBcCisJCT4iJEhPTUUvaW52YWxpZCIgJiYKKwlnaXQgY29tbWl0IC1hIC1GICIkSE9NRS9pbnZhbGlkIiAyPiIkSE9NRSIvc3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZGlkIG5vdCBjb25mb3JtIiAiJEhPTUUiL3N0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdVVEYtOCBub24tY2hhcmFjdGVycyByZWZ1c2VkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIlwkSE9NRS9zdGRlcnJcIiBcIlwkSE9NRS9pbnZhbGlkXCIiICYmCisJZWNobyAiVVRGLTggbm9uLWNoYXJhY3RlciAyLiIgPkYgJiYKKwlwcmludGYgIkNvbW1pdCBtZXNzYWdlXG5cbk5vbi1jaGFyYWN0ZXI6XDM1N1wyNjdcMjIwXG4iIFwKKwkJPiIkSE9NRS9pbnZhbGlkIiAmJgorCWdpdCBjb21taXQgLWEgLUYgIiRIT01FL2ludmFsaWQiIDI+IiRIT01FIi9zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJkaWQgbm90IGNvbmZvcm0iICIkSE9NRSIvc3RkZXJyCisnCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBzZXR1cCIgJworCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJEggJiYKKwkJZ2l0IGNoZWNrb3V0IC1iICRIIEMwICYmCisJCWVjaG8gJEggPkYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtRiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8kSC50eHQKKwknCitkb25lCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjayBlbmNvZGluZyBoZWFkZXIgZm9yICRIIiAnCisJCUU9JChnaXQgY2F0LWZpbGUgY29tbWl0ICckSCcgfCBzZWQgLW5lICJzL15lbmNvZGluZyAvL3AiKSAmJgorCQl0ZXN0ICJ6JEUiID0gInonJEgnIgorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnIHRvIHJlbW92ZSBjdXN0b21pemF0aW9uJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJaWYgWj0kKGdpdCBjb25maWcgLS1nZXQtYWxsIGkxOG4uY29tbWl0ZW5jb2RpbmcpCisJdGhlbgorCQllY2hvIE9vcHMsIHNob3VsZCBoYXZlIGZhaWxlZC4KKwkJZmFsc2UKKwllbHNlCisJCXRlc3QgeiA9ICJ6JFoiCisJZmkgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSVNPODg1OS0xIHNob3VsZCBiZSBzaG93biBpbiBVVEYtOCBub3cnICcKKwljb21wYXJlX3dpdGggSVNPODg1OS0xICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0CisnCisKK2ZvciBIIGluIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiBVVEYtOCBub3ciICcKKwkJY29tcGFyZV93aXRoICckSCcgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMi1VVEYtOC50eHQKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyB0byBhZGQgY3VzdG9taXphdGlvbicgJworCWdpdCBjb25maWcgLS11bnNldC1hbGwgaTE4bi5jb21taXRlbmNvZGluZyAmJgorCWlmIFo9JChnaXQgY29uZmlnIC0tZ2V0LWFsbCBpMThuLmNvbW1pdGVuY29kaW5nKQorCXRoZW4KKwkJZWNobyBPb3BzLCBzaG91bGQgaGF2ZSBmYWlsZWQuCisJCWZhbHNlCisJZWxzZQorCQl0ZXN0IHogPSAieiRaIgorCWZpCisnCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBzaG91bGQgYmUgc2hvd24gaW4gaXRzZWxmIG5vdyIgJworCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJyRIJyAmJgorCQljb21wYXJlX3dpdGggJyRIJyAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8nJEgnLnR4dAorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnIHRvIHR3ZWFrIGN1c3RvbWl6YXRpb24nICcKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSVNPODg1OS0xIHNob3VsZCBiZSBzaG93biBpbiBVVEYtOCBub3cnICcKKwljb21wYXJlX3dpdGggSVNPODg1OS0xICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0CisnCisKK2ZvciBIIGluIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiBVVEYtOCBub3ciICcKKwkJY29tcGFyZV93aXRoICckSCcgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMi1VVEYtOC50eHQKKwknCitkb25lCisKK2ZvciBKIGluIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCWlmIHRlc3QgIiRKIiA9IElTTy0yMDIyLUpQCisJdGhlbgorCQlJQ09OVj0kSgorCWVsc2UKKwkJSUNPTlY9CisJZmkKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgJEoKKwlmb3IgSCBpbiBldWNKUCBJU08tMjAyMi1KUAorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiAkSiBub3ciICcKKwkJCWNvbXBhcmVfd2l0aCAnJEgnICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyckSicudHh0ICRJQ09OVgorCQknCisJZG9uZQorZG9uZQorCitmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAgSVNPLTIwMjItSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiTm8gY29udmVyc2lvbiB3aXRoICRIIiAnCisJCWNvbXBhcmVfd2l0aCAiLS1lbmNvZGluZz1ub25lICckSCciICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyckSCcudHh0CisJJworZG9uZQorCit0ZXN0X2NvbW1pdF9hdXRvc3F1YXNoX2ZsYWdzICgpIHsKKwlIPSQxCisJZmxhZz0kMgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbW1pdCAtLSRmbGFnIHdpdGggJEggZW5jb2RpbmciICcKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICRIICYmCisJCWdpdCBjaGVja291dCAtYiAkSC0kZmxhZyBDMCAmJgorCQllY2hvICRIID4+RiAmJgorCQlnaXQgY29tbWl0IC1hIC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRILnR4dCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZWNobyBpbnRlcm1lZGlhdGUgc3R1ZmYgPj5HICYmCisJCWdpdCBhZGQgRyAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJpbnRlcm1lZGlhdGUgY29tbWl0IiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZWNobyAkSCAkZmxhZyA+PkYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtLSRmbGFnIEhFQUR+MSAmJgorCQlFPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCAnJEgtJGZsYWcnIHwKKwkJCXNlZCAtbmUgInMvXmVuY29kaW5nIC8vcCIpICYmCisJCXRlc3QgInokRSIgPSAieiRIIiAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwkJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsCisJJworfQorCit0ZXN0X2NvbW1pdF9hdXRvc3F1YXNoX2ZsYWdzIGV1Y0pQIGZpeHVwCisKK3Rlc3RfY29tbWl0X2F1dG9zcXVhc2hfZmxhZ3MgSVNPLTIwMjItSlAgc3F1YXNoCisKK3Rlc3RfY29tbWl0X2F1dG9zcXVhc2hfbXVsdGlfZW5jb2RpbmcgKCkgeworCWZsYWc9JDEKKwlvbGQ9JDIKKwluZXc9JDMKKwltc2c9JDQKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21taXQgLS0kZmxhZyBpbnRvICRvbGQgZnJvbSAkbmV3IiAnCisJCWdpdCBjaGVja291dCAtYiAkZmxhZy0kb2xkLSRuZXcgQzAgJiYKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICRvbGQgJiYKKwkJZWNobyAkb2xkID4+RiAmJgorCQlnaXQgY29tbWl0IC1hIC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRtc2cgJiYKKwkJdGVzdF90aWNrICYmCisJCWVjaG8gaW50ZXJtZWRpYXRlIHN0dWZmID4+RyAmJgorCQlnaXQgYWRkIEcgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiaW50ZXJtZWRpYXRlIGNvbW1pdCIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkbmV3ICYmCisJCWVjaG8gJG5ldy0kZmxhZyA+PkYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtLSRmbGFnIEhFQUReICYmCisJCWdpdCByZWJhc2UgLS1hdXRvc3F1YXNoIC1pIEhFQUReXl4gJiYKKwkJZ2l0IHJldi1saXN0IEhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbCAmJgorCQlpY29udiAtZiAkb2xkIC10IFVURi04ICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRtc2cgPmV4cGVjdCAmJgorCQlpZiB0ZXN0ICRmbGFnID0gc3F1YXNoOyB0aGVuCisJCQlzdWJqZWN0PSIkKGhlYWQgLTEgZXhwZWN0KSIgJiYKKwkJCXByaW50ZiAiXG5zcXVhc2ghICVzXG4iICIkc3ViamVjdCIgPj5leHBlY3QKKwkJZmkgJiYKKwkJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiA+cmF3ICYmCisJCShzZWQgIjEsL14kL2QiIHJhdyB8IGljb252IC1mICRuZXcgLXQgdXRmLTgpID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKK30KKwordGVzdF9jb21taXRfYXV0b3NxdWFzaF9tdWx0aV9lbmNvZGluZyBmaXh1cCBVVEYtOCBJU08tODg1OS0xIDEtVVRGLTgudHh0Cit0ZXN0X2NvbW1pdF9hdXRvc3F1YXNoX211bHRpX2VuY29kaW5nIHNxdWFzaCBJU08tODg1OS0xIFVURi04IElTTzg4NTktMS50eHQKK3Rlc3RfY29tbWl0X2F1dG9zcXVhc2hfbXVsdGlfZW5jb2Rpbmcgc3F1YXNoIGV1Y0pQIElTTy0yMDIyLUpQIGV1Y0pQLnR4dAordGVzdF9jb21taXRfYXV0b3NxdWFzaF9tdWx0aV9lbmNvZGluZyBmaXh1cCBJU08tMjAyMi1KUCBVVEYtOCBJU08tMjAyMi1KUC50eHQKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTAwLzEtVVRGLTgudHh0IGIvdC90MzkwMC8xLVVURi04LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTMxZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMC8xLVVURi04LnR4dApAQCAtMCwwICsxLDMgQEAKK8OEw4vDkcOPw5YKKworw4Fiw6dkw6hmZwpkaWZmIC0tZ2l0IGEvdC90MzkwMC8yLVVURi04LnR4dCBiL3QvdDM5MDAvMi1VVEYtOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNmNGY4ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDAvMi1VVEYtOC50eHQKQEAgLTAsMCArMSw0IEBACivjga/jgozjgbLjgbvjgbUKKwor44GX44Gm44GE44KL44Gu44GM44CB44GE44KL44Gu44Gn44CCCivmv7HmtZzjgbvjgozjgbfjgorjgb3jgozjgb7jgbPjgZDjgorjgo3jgbjjgIIKZGlmZiAtLWdpdCBhL3QvdDM5MDAvSVNPLTIwMjItSlAudHh0IGIvdC90MzkwMC9JU08tMjAyMi1KUC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiNTMzMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDAvSVNPLTIwMjItSlAudHh0CkBAIC0wLDAgKzEsNCBAQAorGyRCJE8kbCRSJFskVRsoQgorCisbJEIkNyRGJCQkayROJCwhIiQkJGskTiRHISMbKEIKKxskQl9ASU0kWyRsJFckaiRdJGwkXiRTJDAkaiRtJFghIxsoQgpkaWZmIC0tZ2l0IGEvdC90MzkwMC9JU084ODU5LTEudHh0IGIvdC90MzkwMC9JU084ODU5LTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYmVmMGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAwL0lTTzg4NTktMS50eHQKQEAgLTAsMCArMSwzIEBACivEy9HP1gorCivBYudk6GZnCmRpZmYgLS1naXQgYS90L3QzOTAwL1VURi0xNi50eHQgYi90L3QzOTAwL1VURi0xNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI1N2YwNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDAvVVRGLTE2LnR4dApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3QzOTAwL2V1Y0pQLnR4dCBiL3QvdDM5MDAvZXVjSlAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NmYyYWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAwL2V1Y0pQLnR4dApAQCAtMCwwICsxLDQgQEAKK6TPpOyk0qTbpNUKKworpLekxqSkpOukzqSsoaKkpKTrpM6kx6GjCivfwMnNpNuk7KTXpOqk3aTspN6k06SwpOqk7aTYoaMKZGlmZiAtLWdpdCBhL3QvdDM5MDEtaTE4bi1wYXRjaC5zaCBiL3QvdDM5MDEtaTE4bi1wYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MjNlYjAxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMS1pMThuLXBhdGNoLnNoCkBAIC0wLDAgKzEsMzE2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2kxOG4gc2V0dGluZ3MgYW5kIGZvcm1hdC1wYXRjaCB8IGFtIHBpcGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19lbmNvZGluZyAoKSB7CisJIyBNYWtlIHN1cmUgY2hhcmFjdGVycyBhcmUgbm90IGNvcnJ1cHRlZAorCWNudD0iJDEiIGhlYWRlcj0iJDIiIGk9MSBqPTAKKwl3aGlsZSB0ZXN0ICIkaSIgLWxlICRjbnQKKwlkbworCQlnaXQgZm9ybWF0LXBhdGNoIC0tZW5jb2Rpbmc9VVRGLTggLS1zdGRvdXQgSEVBRH4kaS4uSEVBRH4kaiB8CisJCWdyZXAgIl5Gcm9tOiA9P1VURi04P3E/PUMzPTgxPUMzPUE5PUMzPUFEPTIwPUMzPUIzPUMzPUJBPz0iICYmCisJCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRH4kaiB8CisJCWNhc2UgIiRoZWFkZXIiIGluCisJCTg4NTkpCisJCQlncmVwICJeZW5jb2RpbmcgSVNPODg1OS0xIiA7OworCQkqKQorCQkJZ3JlcCAiXmVuY29kaW5nIElTTzg4NTktMSI7IHRlc3QgIiQ/IiAhPSAwIDs7CisJCWVzYWMgfHwgcmV0dXJuIDEKKwkJaj0kaQorCQlpPSQoKCRpKzEpKQorCWRvbmUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCisKKwkjIHVzZSBVVEYtOCBpbiBhdXRob3IgYW5kIGNvbW1pdHRlciBuYW1lIHRvIG1hdGNoIHRoZQorCSMgaTE4bi5jb21taXRlbmNvZGluZyBzZXR0aW5ncworCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEvdXRmOC50eHQgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gIiRHSVRfQVVUSE9SX05BTUUiID5taW5lICYmCisJZ2l0IGFkZCBtaW5lICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAiSW5pdGlhbCBjb21taXQiICYmCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIEhlbGxvIHdvcmxkID5taW5lICYmCisJZ2l0IGFkZCBtaW5lICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAiU2Vjb25kIG9uIG1haW4iICYmCisKKwkjIHRoZSBmaXJzdCBjb21taXQgb24gdGhlIHNpZGUgYnJhbmNoIGlzIFVURi04CisJdGVzdF90aWNrICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgbWFzdGVyXiAmJgorCWVjaG8gQW5vdGhlciBmaWxlID55b3VycyAmJgorCWdpdCBhZGQgeW91cnMgJiYKKwlnaXQgY29tbWl0IC1zIC1tICJTZWNvbmQgb24gc2lkZSIgJiYKKworCWlmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXCisJdGhlbgorCQkjIHRoZSBzZWNvbmQgb25lIG9uIHRoZSBzaWRlIGJyYW5jaCBpcyBJU08tODg1OS0xCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwkJIyB1c2UgYXV0aG9yIGFuZCBjb21taXR0ZXIgbmFtZSBpbiBJU08tODg1OS0xIHRvIG1hdGNoIGl0LgorCQkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLzg4NTktMS50eHQKKwlmaSAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gWWV0IGFub3RoZXIgPnRoZWlycyAmJgorCWdpdCBhZGQgdGhlaXJzICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAiVGhpcmQgb24gc2lkZSIgJiYKKworCSMgQmFjayB0byBkZWZhdWx0CisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBvdXRwdXQgKElTTy04ODU5LTEpJyAnCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgorCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLkhFQUReID5vdXQtbDEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IEhFQUReID5vdXQtbDIgJiYKKwlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMSIgb3V0LWwxICYmCisJZ3JlcCAiXkZyb206ID0/SVNPODg1OS0xP3E/PUMxPUU5PUVEPTIwPUYzPUZBPz0iIG91dC1sMSAmJgorCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPODg1OS0xIiBvdXQtbDIgJiYKKwlncmVwICJeRnJvbTogPT9JU084ODU5LTE/cT89QzE9RTk9RUQ9MjA9RjM9RkE/PSIgb3V0LWwyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBvdXRwdXQgKFVURi04KScgJworCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOCAmJgorCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLkhFQUReID5vdXQtdTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IEhFQUReID5vdXQtdTIgJiYKKwlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04IiBvdXQtdTEgJiYKKwlncmVwICJeRnJvbTogPT9VVEYtOD9xPz1DMz04MT1DMz1BOT1DMz1BRD0yMD1DMz1CMz1DMz1CQT89IiBvdXQtdTEgJiYKKwlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04IiBvdXQtdTIgJiYKKwlncmVwICJeRnJvbTogPT9VVEYtOD9xPz1DMz04MT1DMz1BOT1DMz1BRD0yMD1DMz1CMz1DMz1CQT89IiBvdXQtdTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIChVL1UpJyAnCisJIyBXZSB3YW50IHRoZSByZXN1bHQgb2YgcmViYXNlIGluIFVURi04CisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCisKKwkjIFRoZSB0ZXN0IGlzIGFib3V0IGxvZ291dHB1dGVuY29kaW5nIG5vdCBhZmZlY3RpbmcgdGhlCisJIyBmaW5hbCBvdXRjb21lIC0tIGl0IGlzIHVzZWQgaW50ZXJuYWxseSB0byBnZW5lcmF0ZSB0aGUKKwkjIHBhdGNoIGFuZCB0aGUgbG9nLgorCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCisKKwkjIFRoZSByZXN1bHQgd2lsbCBiZSBjb21taXR0ZWQgYnkgR0lUX0NPTU1JVFRFUl9OQU1FIC0tCisJIyB3ZSB3YW50IFVURi04IGVuY29kZWQgbmFtZS4KKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxL3V0ZjgudHh0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCisJY2hlY2tfZW5jb2RpbmcgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKFUvTCknICcKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS91dGY4LnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ3JlYmFzZSAoTC9MKScgJworCSMgSW4gdGhpcyB0ZXN0IHdlIHdhbnQgSVNPLTg4NTktMSBlbmNvZGVkIGNvbW1pdHMgYXMgdGhlIHJlc3VsdAorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS84ODU5LTEudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCisJY2hlY2tfZW5jb2RpbmcgMiA4ODU5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdyZWJhc2UgKEwvVSknICcKKwkjIFRoaXMgaXMgcGF0aG9sb2dpY2FsIC0tIHVzZSBVVEYtOCBhcyBpbnRlcm1lZGlhdGUgZm9ybQorCSMgdG8gZ2V0IElTTy04ODU5LTEgcmVzdWx0cy4KKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS84ODU5LTEudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCisJY2hlY2tfZW5jb2RpbmcgMiA4ODU5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrKFUvVSknICcKKwkjIEJvdGggdGhlIGNvbW1pdGVuY29kaW5nIGFuZCBsb2dvdXRwdXRlbmNvZGluZyBpcyBzZXQgdG8gVVRGLTguCisKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxL3V0ZjgudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVycnktcGljayBzaWRlXiAmJgorCWdpdCBjaGVycnktcGljayBzaWRlICYmCisJZ2l0IHJldmVydCBIRUFEICYmCisKKwljaGVja19lbmNvZGluZyAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdjaGVycnktcGljayhML0wpJyAnCisJIyBCb3RoIHRoZSBjb21taXRlbmNvZGluZyBhbmQgbG9nb3V0cHV0ZW5jb2RpbmcgaXMgc2V0IHRvIElTTy04ODU5LTEKKworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS84ODU5LTEudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVycnktcGljayBzaWRlXiAmJgorCWdpdCBjaGVycnktcGljayBzaWRlICYmCisJZ2l0IHJldmVydCBIRUFEICYmCisKKwljaGVja19lbmNvZGluZyAzIDg4NTkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2soVS9MKScgJworCSMgQ29tbWl0ZW5jb2RpbmcgaXMgc2V0IHRvIFVURi04IGJ1dCBsb2dvdXRwdXRlbmNvZGluZyBpcyBJU08tODg1OS0xCisKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS91dGY4LnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgc2lkZV4gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgc2lkZSAmJgorCWdpdCByZXZlcnQgSEVBRCAmJgorCisJY2hlY2tfZW5jb2RpbmcgMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnY2hlcnJ5LXBpY2soTC9VKScgJworCSMgQWdhaW4sIHRoZSBjb21taXRlbmNvZGluZyBpcyBzZXQgdG8gSVNPLTg4NTktMSBidXQKKwkjIGxvZ291dHB1dGVuY29kaW5nIGlzIHNldCB0byBVVEYtOC4KKworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLzg4NTktMS50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZXJyeS1waWNrIHNpZGVeICYmCisJZ2l0IGNoZXJyeS1waWNrIHNpZGUgJiYKKwlnaXQgcmV2ZXJ0IEhFQUQgJiYKKworCWNoZWNrX2VuY29kaW5nIDMgODg1OQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSAoVS9VKScgJworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOCAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEvdXRmOC50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgLS1tZXJnZSBtYXN0ZXIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2UgKFUvTCknICcKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS91dGY4LnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIG1hc3RlciAmJgorCisJY2hlY2tfZW5jb2RpbmcgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSAoTC9MKScgJworCSMgSW4gdGhpcyB0ZXN0IHdlIHdhbnQgSVNPLTg4NTktMSBlbmNvZGVkIGNvbW1pdHMgYXMgdGhlIHJlc3VsdAorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS84ODU5LTEudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIC0tbWVyZ2UgbWFzdGVyICYmCisKKwljaGVja19lbmNvZGluZyAyIDg4NTkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2UgKEwvVSknICcKKwkjIFRoaXMgaXMgcGF0aG9sb2dpY2FsIC0tIHVzZSBVVEYtOCBhcyBpbnRlcm1lZGlhdGUgZm9ybQorCSMgdG8gZ2V0IElTTy04ODU5LTEgcmVzdWx0cy4KKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS84ODU5LTEudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIC0tbWVyZ2UgbWFzdGVyICYmCisKKwljaGVja19lbmNvZGluZyAyIDg4NTkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gKFUvVSknICcKKwkjIEFwcGx5IFVURi04IHBhdGNoZXMgd2l0aCBVVEYtOCBjb21taXRlbmNvZGluZworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEvdXRmOC50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGFtIG91dC11MSBvdXQtdTIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ2FtIChML0wpJyAnCisJIyBBcHBseSBJU08tODg1OS0xIHBhdGNoZXMgd2l0aCBJU08tODg1OS0xIGNvbW1pdGVuY29kaW5nCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEvODg1OS0xLnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgYW0gb3V0LWwxIG91dC1sMiAmJgorCisJY2hlY2tfZW5jb2RpbmcgMiA4ODU5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIChVL0wpJyAnCisJIyBBcHBseSBJU08tODg1OS0xIHBhdGNoZXMgd2l0aCBVVEYtOCBjb21taXRlbmNvZGluZworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEvdXRmOC50eHQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCisJIyBhbSBzcGVjaWZpZXMgLS11dGY4IGJ5IGRlZmF1bHQuCisJZ2l0IGFtIG91dC1sMSBvdXQtbDIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1uby11dGY4IChVL0wpJyAnCisJIyBBcHBseSBJU08tODg1OS0xIHBhdGNoZXMgd2l0aCBVVEYtOCBjb21taXRlbmNvZGluZworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEvdXRmOC50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGFtIC0tbm8tdXRmOCBvdXQtbDEgb3V0LWwyIDI+ZXJyICYmCisKKwkjIGNvbW1pdC10cmVlIHdpbGwgd2FybiB0aGF0IHRoZSBjb21taXQgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIHZhbGlkIFVURi04CisJIyBhcyBtYWlsaW5mbyBkaWQgbm90IGNvbnZlcnQgaXQKKwl0ZXN0X2kxOG5ncmVwICJkaWQgbm90IGNvbmZvcm0iIGVyciAmJgorCisJY2hlY2tfZW5jb2RpbmcgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnYW0gKEwvVSknICcKKwkjIEFwcGx5IFVURi04IHBhdGNoZXMgd2l0aCBJU08tODg1OS0xIGNvbW1pdGVuY29kaW5nCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEvODg1OS0xLnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwkjIG1haWxpbmZvIHdpbGwgcmUtY29kZSB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gdGhlIGNoYXJzZXQgc3BlY2lmaWVkIGJ5CisJIyBpMThuLmNvbW1pdGVuY29kaW5nCisJZ2l0IGFtIG91dC11MSBvdXQtdTIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIgODg1OQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDEvODg1OS0xLnR4dCBiL3QvdDM5MDEvODg1OS0xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOGMyMWE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMS84ODU5LTEudHh0CkBAIC0wLDAgKzEsNCBAQAorOiB0byBiZSBzb3VyY2VkIGluIHQzOTAxIC0tIHRoaXMgaXMgbGF0aW4tMQorR0lUX0FVVEhPUl9OQU1FPSLB6e0g8/oiICYmCitHSVRfQ09NTUlUVEVSX05BTUU9JEdJVF9BVVRIT1JfTkFNRSAmJgorZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQ09NTUlUVEVSX05BTUUKZGlmZiAtLWdpdCBhL3QvdDM5MDEvdXRmOC50eHQgYi90L3QzOTAxL3V0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVmNTIwNWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAxL3V0ZjgudHh0CkBAIC0wLDAgKzEsNCBAQAorOiB0byBiZSBzb3VyY2VkIGluIHQzOTAxIC0tIHRoaXMgaXMgdXRmOAorR0lUX0FVVEhPUl9OQU1FPSLDgcOpw60gw7PDuiIgJiYKK0dJVF9DT01NSVRURVJfTkFNRT0kR0lUX0FVVEhPUl9OQU1FICYmCitleHBvcnQgR0lUX0FVVEhPUl9OQU1FIEdJVF9DT01NSVRURVJfTkFNRQpkaWZmIC0tZ2l0IGEvdC90MzkwMi1xdW90ZWQuc2ggYi90L3QzOTAyLXF1b3RlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNTI4MDA4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMi1xdW90ZWQuc2gKQEAgLTAsMCArMSwxNTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ncXVvdGVkIG91dHB1dCcKKworLiAuL3Rlc3QtbGliLnNoCisKK0ZOPSfmv7Hph44nCitHTj0n57SUJworSFQ9JwknCitEUT0nIicKKwordGVzdF9oYXZlX3ByZXJlcSBNSU5HVyB8fAorZWNobyBmb28gMj4vZGV2L251bGwgPiAiTmFtZSBhbmQgYW4ke0hUfUhUIgoraWYgISB0ZXN0IC1mICJOYW1lIGFuZCBhbiR7SFR9SFQiCit0aGVuCisJIyBGQVQvTlRGUyBkb2VzIG5vdCBhbGxvdyB0YWJzIGluIGZpbGVuYW1lcworCXNraXBfYWxsPSdZb3VyIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWxsb3cgdGFicyBpbiBmaWxlbmFtZXMnCisJdGVzdF9kb25lCitmaQorCitmb3JfZWFjaF9uYW1lICgpIHsKKwlmb3IgbmFtZSBpbiBcCisJICAgIE5hbWUgIk5hbWUgYW5kIGEke0xGfUxGIiAiTmFtZSBhbmQgYW4ke0hUfUhUIiAiTmFtZSR7RFF9IiBcCisJICAgICIkRk4kSFQkR04iICIkRk4kTEYkR04iICIkRk4gJEdOIiAiJEZOJEdOIiAiJEZOJERRJEdOIiBcCisJICAgICJXaXRoIFNQIGluIGl0IiAiJEZOL2ZpbGUiCisJZG8KKwkJZXZhbCAiJDEiCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJbWtkaXIgIiRGTiIgJiYKKwlmb3JfZWFjaF9uYW1lICJlY2hvIGluaXRpYWwgPlwiXCRuYW1lXCIiICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtcSAtbSBJbml0aWFsICYmCisKKwlmb3JfZWFjaF9uYW1lICJlY2hvIHNlY29uZCA+XCJcJG5hbWVcIiIgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFNlY29uZCAmJgorCisJZm9yX2VhY2hfbmFtZSAiZWNobyBtb2RpZmllZCA+XCJcJG5hbWVcIiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3RlZCBmaWxlcycgJworY2F0ID5leHBlY3QucXVvdGVkIDw8XEVPRiAmJgorTmFtZQorIk5hbWUgYW5kIGFcbkxGIgorIk5hbWUgYW5kIGFuXHRIVCIKKyJOYW1lXCIiCitXaXRoIFNQIGluIGl0CisiXDM0NlwyNzdcMjYxXDM1MVwyMDdcMjE2XHRcMzQ3XDI2NFwyMjQiCisiXDM0NlwyNzdcMjYxXDM1MVwyMDdcMjE2XG5cMzQ3XDI2NFwyMjQiCisiXDM0NlwyNzdcMjYxXDM1MVwyMDdcMjE2IFwzNDdcMjY0XDIyNCIKKyJcMzQ2XDI3N1wyNjFcMzUxXDIwN1wyMTZcIlwzNDdcMjY0XDIyNCIKKyJcMzQ2XDI3N1wyNjFcMzUxXDIwN1wyMTYvZmlsZSIKKyJcMzQ2XDI3N1wyNjFcMzUxXDIwN1wyMTZcMzQ3XDI2NFwyMjQiCitFT0YKKworY2F0ID5leHBlY3QucmF3IDw8XEVPRgorTmFtZQorIk5hbWUgYW5kIGFcbkxGIgorIk5hbWUgYW5kIGFuXHRIVCIKKyJOYW1lXCIiCitXaXRoIFNQIGluIGl0Cisi5r+x6YeOXHTntJQiCisi5r+x6YeOXG7ntJQiCivmv7Hph44g57SUCisi5r+x6YeOXCLntJQiCivmv7Hph44vZmlsZQor5r+x6YeO57SUCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGxzLWZpbGVzJyAnCisKKwlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYgdGVzdF9jbXAgZXhwZWN0LnF1b3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGRpZmYtZmlsZXMnICcKKworCWdpdCBkaWZmIC0tbmFtZS1vbmx5ID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LnF1b3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGRpZmYtaW5kZXgnICcKKworCWdpdCBkaWZmIC0tbmFtZS1vbmx5IEhFQUQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QucXVvdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gZGlmZi10cmVlJyAnCisKKwlnaXQgZGlmZiAtLW5hbWUtb25seSBIRUFEXiBIRUFEID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LnF1b3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGxzLXRyZWUnICcKKworCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IC1yIEhFQUQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QucXVvdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR0aW5nIGNvcmUucXVvdGVwYXRoJyAnCisKKwlnaXQgY29uZmlnIC0tYm9vbCBjb3JlLnF1b3RlcGF0aCBmYWxzZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGZ1bGx5IHF1b3RlZCBvdXRwdXQgZnJvbSBscy1maWxlcycgJworCisJZ2l0IGxzLWZpbGVzID5jdXJyZW50ICYmIHRlc3RfY21wIGV4cGVjdC5yYXcgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGZ1bGx5IHF1b3RlZCBvdXRwdXQgZnJvbSBkaWZmLWZpbGVzJyAnCisKKwlnaXQgZGlmZiAtLW5hbWUtb25seSA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5yYXcgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGZ1bGx5IHF1b3RlZCBvdXRwdXQgZnJvbSBkaWZmLWluZGV4JyAnCisKKwlnaXQgZGlmZiAtLW5hbWUtb25seSBIRUFEID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LnJhdyBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGRpZmYtdHJlZScgJworCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgSEVBRF4gSEVBRCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5yYXcgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGZ1bGx5IHF1b3RlZCBvdXRwdXQgZnJvbSBscy10cmVlJyAnCisKKwlnaXQgbHMtdHJlZSAtLW5hbWUtb25seSAtciBIRUFEID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LnJhdyBjdXJyZW50CisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTAzLXN0YXNoLnNoIGIvdC90MzkwMy1zdGFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZjdjYTk4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMy1zdGFzaC5zaApAQCAtMCwwICsxLDEzMDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRSBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IHN0YXNoJworCisuIC4vdGVzdC1saWIuc2gKKworZGlmZl9jbXAgKCkgeworCWZvciBpIGluICIkMSIgIiQyIgorCWRvCisJCXNlZCAtZSAncy9eaW5kZXggMDAwMDAwMFwuXC5bMC05YS1mXSovaW5kZXggMDAwMDAwMC4uMTIzNDU2Ny8nIFwKKwkJLWUgJ3MvXmluZGV4IFswLTlhLWZdKlwuXC5bMC05YS1mXSovaW5kZXggMTIzNDU2Ny4uODlhYmNkZS8nIFwKKwkJLWUgJ3MvXmluZGV4IFswLTlhLWZdKixbMC05YS1mXSpcLlwuWzAtOWEtZl0qL2luZGV4IDEyMzQ1NjcsNzY1NDMyMS4uODlhYmNkZS8nIFwKKwkJIiRpIiA+IiRpLmNvbXBhcmUiIHx8IHJldHVybiAxCisJZG9uZSAmJgorCXRlc3RfY21wICIkMS5jb21wYXJlIiAiJDIuY29tcGFyZSIgJiYKKwlybSAtZiAiJDEuY29tcGFyZSIgIiQyLmNvbXBhcmUiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNvbWUgZGlydHkgd29ya2luZyBkaXJlY3RvcnknICcKKwllY2hvIDEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvIHVucmVsYXRlZCA+b3RoZXItZmlsZSAmJgorCWdpdCBhZGQgb3RoZXItZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gMiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gMyA+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBzdGFzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLXF1aWV0IEhFQUQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggMGNmYmYwOC4uMDA3NTBlZCAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xICsxIEBACistMgorKzMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJlbnRzIG9mIHN0YXNoJyAnCisJdGVzdCAkKGdpdCByZXYtcGFyc2Ugc3Rhc2heKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBkaWZmIHN0YXNoXjIuLnN0YXNoID5vdXRwdXQgJiYKKwlkaWZmX2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5aW5nIGJvZ3VzIHN0YXNoIGRvZXMgbm90aGluZycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBhcHBseSBzdGFzaEB7MX0gJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGRvZXMgbm90IG5lZWQgY2xlYW4gd29ya2luZyBkaXJlY3RvcnknICcKKwllY2hvIDQgPm90aGVyLWZpbGUgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwllY2hvIDMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGRvZXMgbm90IGNsb2JiZXIgd29ya2luZyBkaXJlY3RvcnkgY2hhbmdlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIDQgPmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggYXBwbHkgJiYKKwllY2hvIDQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHN0YXNoZWQgY2hhbmdlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIDUgPm90aGVyLWZpbGUgJiYKKwlnaXQgYWRkIG90aGVyLWZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG90aGVyLWZpbGUgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl0ZXN0IDMgPSAkKGNhdCBmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgOmZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyBIRUFEOmZpbGUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHN0YXNoZWQgY2hhbmdlcyAoaW5jbHVkaW5nIGluZGV4KScgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwllY2hvIDYgPm90aGVyLWZpbGUgJiYKKwlnaXQgYWRkIG90aGVyLWZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG90aGVyLWZpbGUgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgLS1pbmRleCAmJgorCXRlc3QgMyA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAyID0gJChnaXQgc2hvdyA6ZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zdGFzaGluZyBpbiBhIHN1YmRpcmVjdG9yeScgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCW1rZGlyIHN1YmRpciAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCBzdGFzaCBhcHBseQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggZHJvcCBjb21wbGFpbnMgb2YgZXh0cmEgb3B0aW9ucycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBkcm9wIC0tZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Ryb3AgdG9wIHN0YXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdGFzaCBsaXN0ID5leHBlY3RlZCAmJgorCWVjaG8gNyA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCWdpdCBzdGFzaCBkcm9wICYmCisJZ2l0IHN0YXNoIGxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgMyA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyA6ZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHJvcCBtaWRkbGUgc3Rhc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyA4ID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJZWNobyA5ID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIGRyb3Agc3Rhc2hAezF9ICYmCisJdGVzdCAyID0gJChnaXQgc3Rhc2ggbGlzdCB8IHdjIC1sKSAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgOSA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyA6ZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIGRyb3AgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl0ZXN0IDMgPSAkKGNhdCBmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgOmZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyBIRUFEOmZpbGUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Ryb3AgbWlkZGxlIHN0YXNoIGJ5IGluZGV4JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gOCA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCWVjaG8gOSA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCWdpdCBzdGFzaCBkcm9wIDEgJiYKKwl0ZXN0IDIgPSAkKGdpdCBzdGFzaCBsaXN0IHwgd2MgLWwpICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJdGVzdCA5ID0gJChjYXQgZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IDpmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlKSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3Rhc2ggZHJvcCAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgMyA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyA6ZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggcG9wJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwl0ZXN0IDMgPSAkKGNhdCBmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgOmZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyBIRUFEOmZpbGUpICYmCisJdGVzdCAwID0gJChnaXQgc3Rhc2ggbGlzdCB8IHdjIC1sKQorJworCitjYXQgPmV4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xZmU5MTJjCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSBAQAorK2JhcjIKK0VPRgorCitjYXQgPmV4cGVjdDEgPDxFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggMjU3Y2M1Ni4uNTcxNmNhNSAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xICsxIEBACistZm9vCisrYmFyCitFT0YKKworY2F0ID5leHBlY3QyIDw8RU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IDc2MDE4MDcuLjU3MTZjYTUgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSArMSBAQAorLWJhegorK2JhcgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xZmU5MTJjCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSBAQAorK2JhcjIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBicmFuY2gnICcKKwllY2hvIGZvbyA+ZmlsZSAmJgorCWdpdCBjb21taXQgZmlsZSAtbSBmaXJzdCAmJgorCWVjaG8gYmFyID5maWxlICYmCisJZWNobyBiYXIyID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgc3Rhc2ggJiYKKwllY2hvIGJheiA+ZmlsZSAmJgorCWdpdCBjb21taXQgZmlsZSAtbSBzZWNvbmQgJiYKKwlnaXQgc3Rhc2ggYnJhbmNoIHN0YXNoYnJhbmNoICYmCisJdGVzdCByZWZzL2hlYWRzL3N0YXNoYnJhbmNoID0gJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgbWFzdGVyXikgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+b3V0cHV0ICYmCisJZGlmZl9jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBkaWZmID5vdXRwdXQgJiYKKwlkaWZmX2NtcCBleHBlY3QxIG91dHB1dCAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gYWx0ZXJuYXRlXCBzZWNvbmQgJiYKKwlnaXQgZGlmZiBtYXN0ZXIuLnN0YXNoYnJhbmNoID5vdXRwdXQgJiYKKwlkaWZmX2NtcCBvdXRwdXQgZXhwZWN0MiAmJgorCXRlc3QgMCA9ICQoZ2l0IHN0YXNoIGxpc3QgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLXEgaXMgcXVpZXQnICcKKwllY2hvIGZvbyA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCWdpdCBzdGFzaCBhcHBseSAtcSA+b3V0cHV0Lm91dCAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2F2ZSAtcSBpcyBxdWlldCcgJworCWdpdCBzdGFzaCBzYXZlIC0tcXVpZXQgPm91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BvcCAtcSB3b3JrcyBhbmQgaXMgcXVpZXQnICcKKwlnaXQgc3Rhc2ggcG9wIC1xID5vdXRwdXQub3V0IDI+JjEgJiYKKwllY2hvIGJhciA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgOmZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3AgLXEgLS1pbmRleCB3b3JrcyBhbmQgaXMgcXVpZXQnICcKKwllY2hvIGZvbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBzdGFzaCBzYXZlIC0tcXVpZXQgJiYKKwlnaXQgc3Rhc2ggcG9wIC1xIC0taW5kZXggPm91dHB1dC5vdXQgMj4mMSAmJgorCWdpdCBkaWZmLWZpbGVzIGZpbGUyID5maWxlMi5kaWZmICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGZpbGUyLmRpZmYgJiYKKwl0ZXN0IGZvbyA9ICIkKGdpdCBzaG93IDpmaWxlKSIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkcm9wIC1xIGlzIHF1aWV0JyAnCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIGRyb3AgLXEgPm91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC1rJyAnCisJZWNobyBiYXIzID5maWxlICYmCisJZWNobyBiYXI0ID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgc3Rhc2ggLWsgJiYKKwl0ZXN0IGJhcixiYXI0ID0gJChjYXQgZmlsZSksJChjYXQgZmlsZTIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC0tbm8ta2VlcC1pbmRleCcgJworCWVjaG8gYmFyMzMgPmZpbGUgJiYKKwllY2hvIGJhcjQ0ID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgc3Rhc2ggLS1uby1rZWVwLWluZGV4ICYmCisJdGVzdCBiYXIsYmFyMiA9ICQoY2F0IGZpbGUpLCQoY2F0IGZpbGUyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkb250IGFzc3VtZSBwdXNoIHdpdGggbm9uLW9wdGlvbiBhcmdzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIC1xIGRyb3AgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICJzdWJjb21tYW5kIHdhc24nXCcndCBzcGVjaWZpZWQ7ICdcJydwdXNoJ1wnJyBjYW4nXCcndCBiZSBhc3N1bWVkIGR1ZSB0byB1bmV4cGVjdGVkIHRva2VuICdcJydkcm9wJ1wnJyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC0taW52YWxpZC1vcHRpb24nICcKKwllY2hvIGJhcjUgPmZpbGUgJiYKKwllY2hvIGJhcjYgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCAtLWludmFsaWQtb3B0aW9uICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHNhdmUgLS1pbnZhbGlkLW9wdGlvbiAmJgorCXRlc3QgYmFyNSxiYXI2ID0gJChjYXQgZmlsZSksJChjYXQgZmlsZTIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIGFuIGFkZGVkIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBuZXcgPmZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCWdpdCBzdGFzaCBzYXZlICJhZGRlZCBmaWxlIiAmJgorCSEgdGVzdCAtciBmaWxlMyAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgbmV3ID0gIiQoY2F0IGZpbGUzKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLS1pbnRlbnQtdG8tYWRkIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBuZXcgPmZpbGU0ICYmCisJZ2l0IGFkZCAtLWludGVudC10by1hZGQgZmlsZTQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBybSAtZiBmaWxlNCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggcm0gdGhlbiByZWNyZWF0ZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcm0gZmlsZSAmJgorCWVjaG8gYmFyNyA+ZmlsZSAmJgorCWdpdCBzdGFzaCBzYXZlICJybSB0aGVuIHJlY3JlYXRlIiAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIiAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgYmFyNyA9ICIkKGNhdCBmaWxlKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggcm0gYW5kIGlnbm9yZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcm0gZmlsZSAmJgorCWVjaG8gZmlsZSA+LmdpdGlnbm9yZSAmJgorCWdpdCBzdGFzaCBzYXZlICJybSBhbmQgaWdub3JlIiAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIiAmJgorCXRlc3QgZmlsZSA9ICIkKGNhdCAuZ2l0aWdub3JlKSIgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwkhIHRlc3QgLXIgZmlsZSAmJgorCXRlc3QgZmlsZSA9ICIkKGNhdCAuZ2l0aWdub3JlKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggcm0gYW5kIGlnbm9yZSAoc3RhZ2UgLmdpdGlnbm9yZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHJtIGZpbGUgJiYKKwllY2hvIGZpbGUgPi5naXRpZ25vcmUgJiYKKwlnaXQgYWRkIC5naXRpZ25vcmUgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAicm0gYW5kIGlnbm9yZSAoc3RhZ2UgLmdpdGlnbm9yZSkiICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiICYmCisJISB0ZXN0IC1yIC5naXRpZ25vcmUgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwkhIHRlc3QgLXIgZmlsZSAmJgorCXRlc3QgZmlsZSA9ICIkKGNhdCAuZ2l0aWdub3JlKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3Rhc2ggZmlsZSB0byBzeW1saW5rJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIGZpbGUgJiYKKwlsbiAtcyBmaWxlMiBmaWxlICYmCisJZ2l0IHN0YXNoIHNhdmUgImZpbGUgdG8gc3ltbGluayIgJiYKKwl0ZXN0IC1mIGZpbGUgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwljYXNlICIkKGxzIC1sIGZpbGUpIiBpbiAqIiBmaWxlIC0+IGZpbGUyIikgOjs7ICopIGZhbHNlOzsgZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzdGFzaCBmaWxlIHRvIHN5bWxpbmsgKHN0YWdlIHJtKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcm0gZmlsZSAmJgorCWxuIC1zIGZpbGUyIGZpbGUgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAiZmlsZSB0byBzeW1saW5rIChzdGFnZSBybSkiICYmCisJdGVzdCAtZiBmaWxlICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJY2FzZSAiJChscyAtbCBmaWxlKSIgaW4gKiIgZmlsZSAtPiBmaWxlMiIpIDo7OyAqKSBmYWxzZTs7IGVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3Rhc2ggZmlsZSB0byBzeW1saW5rIChmdWxsIHN0YWdlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSBmaWxlICYmCisJbG4gLXMgZmlsZTIgZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBzdGFzaCBzYXZlICJmaWxlIHRvIHN5bWxpbmsgKGZ1bGwgc3RhZ2UpIiAmJgorCXRlc3QgLWYgZmlsZSAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIiAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCWNhc2UgIiQobHMgLWwgZmlsZSkiIGluICoiIGZpbGUgLT4gZmlsZTIiKSA6OzsgKikgZmFsc2U7OyBlc2FjCisnCisKKyMgVGhpcyB0ZXN0IGNyZWF0ZXMgYSBjb21taXQgd2l0aCBhIHN5bWxpbmsgdXNlZCBmb3IgdGhlIGZvbGxvd2luZyB0ZXN0cworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzeW1saW5rIHRvIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9sbl9zX2FkZCBmaWxlIGZpbGVsaW5rICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIHN5bWxpbmsiICYmCisJcm0gZmlsZWxpbmsgJiYKKwljcCBmaWxlIGZpbGVsaW5rICYmCisJZ2l0IHN0YXNoIHNhdmUgInN5bWxpbmsgdG8gZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAndGhpcyBtdXN0IGhhdmUgcmUtY3JlYXRlZCB0aGUgc3ltbGluaycgJworCXRlc3QgLWggZmlsZWxpbmsgJiYKKwljYXNlICIkKGxzIC1sIGZpbGVsaW5rKSIgaW4gKiIgZmlsZWxpbmsgLT4gZmlsZSIpIDo7OyAqKSBmYWxzZTs7IGVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zdGFzaCBtdXN0IHJlLWNyZWF0ZSB0aGUgZmlsZScgJworCWdpdCBzdGFzaCBhcHBseSAmJgorCSEgdGVzdCAtaCBmaWxlbGluayAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzeW1saW5rIHRvIGZpbGUgKHN0YWdlIHJtKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcm0gZmlsZWxpbmsgJiYKKwljcCBmaWxlIGZpbGVsaW5rICYmCisJZ2l0IHN0YXNoIHNhdmUgInN5bWxpbmsgdG8gZmlsZSAoc3RhZ2Ugcm0pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICd0aGlzIG11c3QgaGF2ZSByZS1jcmVhdGVkIHRoZSBzeW1saW5rJyAnCisJdGVzdCAtaCBmaWxlbGluayAmJgorCWNhc2UgIiQobHMgLWwgZmlsZWxpbmspIiBpbiAqIiBmaWxlbGluayAtPiBmaWxlIikgOjs7ICopIGZhbHNlOzsgZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnN0YXNoIG11c3QgcmUtY3JlYXRlIHRoZSBmaWxlJyAnCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJISB0ZXN0IC1oIGZpbGVsaW5rICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHN5bWxpbmsgdG8gZmlsZSAoZnVsbCBzdGFnZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gZmlsZWxpbmsgJiYKKwljcCBmaWxlIGZpbGVsaW5rICYmCisJZ2l0IGFkZCBmaWxlbGluayAmJgorCWdpdCBzdGFzaCBzYXZlICJzeW1saW5rIHRvIGZpbGUgKGZ1bGwgc3RhZ2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICd0aGlzIG11c3QgaGF2ZSByZS1jcmVhdGVkIHRoZSBzeW1saW5rJyAnCisJdGVzdCAtaCBmaWxlbGluayAmJgorCWNhc2UgIiQobHMgLWwgZmlsZWxpbmspIiBpbiAqIiBmaWxlbGluayAtPiBmaWxlIikgOjs7ICopIGZhbHNlOzsgZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnN0YXNoIG11c3QgcmUtY3JlYXRlIHRoZSBmaWxlJyAnCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJISB0ZXN0IC1oIGZpbGVsaW5rICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3N0YXNoIGRpcmVjdG9yeSB0byBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCW1rZGlyIGRpciAmJgorCWVjaG8gZm9vID5kaXIvZmlsZSAmJgorCWdpdCBhZGQgZGlyL2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgZmlsZSBpbiBkaXIiICYmCisJcm0gLWZyIGRpciAmJgorCWVjaG8gYmFyID5kaXIgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAiZGlyZWN0b3J5IHRvIGZpbGUiICYmCisJdGVzdCAtZCBkaXIgJiYKKwl0ZXN0IGZvbyA9ICIkKGNhdCBkaXIvZmlsZSkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGFwcGx5ICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZGlyKSIgJiYKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3N0YXNoIGZpbGUgdG8gZGlyZWN0b3J5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIGZpbGUgJiYKKwlta2RpciBmaWxlICYmCisJZWNobyBmb28gPmZpbGUvZmlsZSAmJgorCWdpdCBzdGFzaCBzYXZlICJmaWxlIHRvIGRpcmVjdG9yeSIgJiYKKwl0ZXN0IC1mIGZpbGUgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl0ZXN0IC1mIGZpbGUvZmlsZSAmJgorCXRlc3QgZm9vID0gIiQoY2F0IGZpbGUvZmlsZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmluZyB0b28gbWFueSByZWYgYXJndW1lbnRzIGRvZXMgbm90IG1vZGlmeSBmaWxlcycgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEIiAmJgorCWVjaG8gZm9vID5maWxlMiAmJgorCWdpdCBzdGFzaCAmJgorCWVjaG8gYmFyID5maWxlMiAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0xMjM0NTY3ODkgZmlsZTIgJiYKKwlmb3IgdHlwZSBpbiBhcHBseSBwb3AgImJyYW5jaCBzdGFzaC1icmFuY2giCisJZG8KKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoICR0eXBlIHN0YXNoQHswfSBzdGFzaEB7MX0gMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiVG9vIG1hbnkgcmV2aXNpb25zIiBlcnIgJiYKKwkJdGVzdCAxMjM0NTY3ODkgPSAkKHRlc3QtdG9vbCBjaG10aW1lIC1nIGZpbGUyKSB8fCByZXR1cm4gMQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHJvcDogdG9vIG1hbnkgYXJndW1lbnRzIGVycm9ycyBvdXQgKGRvZXMgbm90aGluZyknICcKKwlnaXQgc3Rhc2ggbGlzdCA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGRyb3Agc3Rhc2hAezB9IHN0YXNoQHsxfSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIlRvbyBtYW55IHJldmlzaW9ucyIgZXJyICYmCisJZ2l0IHN0YXNoIGxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdzogdG9vIG1hbnkgYXJndW1lbnRzIGVycm9ycyBvdXQgKGRvZXMgbm90aGluZyknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggc2hvdyBzdGFzaEB7MH0gc3Rhc2hAezF9IDI+ZXJyIDE+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiVG9vIG1hbnkgcmV2aXNpb25zIiBlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIGNyZWF0ZSAtIG5vIGNoYW5nZXMnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIGNyZWF0ZSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBicmFuY2ggLSBubyBzdGFzaGVzIG9uIHN0YWNrLCBzdGFzaC1saWtlIGFyZ3VtZW50JyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+ZmlsZSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIGJyYW5jaCBzdGFzaC1icmFuY2ggJHtTVEFTSF9JRH0gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCBzdGFzaC1icmFuY2giICYmCisJdGVzdCAkKGdpdCBscy1maWxlcyAtLW1vZGlmaWVkIHwgd2MgLWwpIC1lcSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIGJyYW5jaCAtIHN0YXNoZXMgb24gc3RhY2ssIHN0YXNoLWxpa2UgYXJndW1lbnQnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPj5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgc3Rhc2ggZHJvcCIgJiYKKwllY2hvIGJhciA+PmZpbGUgJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdGFzaCBicmFuY2ggc3Rhc2gtYnJhbmNoICR7U1RBU0hfSUR9ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUQgc3Rhc2gtYnJhbmNoIiAmJgorCXRlc3QgJChnaXQgbHMtZmlsZXMgLS1tb2RpZmllZCB8IHdjIC1sKSAtZXEgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBicmFuY2ggY29tcGxhaW5zIHdpdGggbm8gYXJndW1lbnRzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGJyYW5jaCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNob3cgZm9ybWF0IGRlZmF1bHRzIHRvIC0tc3RhdCcgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEIiAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGZvbyA+PmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBzdGFzaCBkcm9wIiAmJgorCWVjaG8gYmFyID4+ZmlsZSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkgZmlsZSB8IDEgKworCSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKwlFT0YKKwlnaXQgc3Rhc2ggc2hvdyAke1NUQVNIX0lEfSA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzaG93IC0gc3Rhc2hlcyBvbiBzdGFjaywgc3Rhc2gtbGlrZSBhcmd1bWVudCcgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEIiAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGZvbyA+PmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBzdGFzaCBkcm9wIiAmJgorCWVjaG8gYmFyID4+ZmlsZSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyAiMQkwCWZpbGUiID5leHBlY3RlZCAmJgorCWdpdCBzdGFzaCBzaG93IC0tbnVtc3RhdCAke1NUQVNIX0lEfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNob3cgLXAgLSBzdGFzaGVzIG9uIHN0YWNrLCBzdGFzaC1saWtlIGFyZ3VtZW50JyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHN0YXNoIGRyb3AiICYmCisJZWNobyBiYXIgPj5maWxlICYmCisJU1RBU0hfSUQ9JChnaXQgc3Rhc2ggY3JlYXRlKSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9maWxlIGIvZmlsZQorCWluZGV4IDc2MDE4MDcuLjkzNWZiZDMgMTAwNjQ0CisJLS0tIGEvZmlsZQorCSsrKyBiL2ZpbGUKKwlAQCAtMSArMSwyIEBACisJIGJhegorCStiYXIKKwlFT0YKKwlnaXQgc3Rhc2ggc2hvdyAtcCAke1NUQVNIX0lEfSA+YWN0dWFsICYmCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNob3cgLSBubyBzdGFzaGVzIG9uIHN0YWNrLCBzdGFzaC1saWtlIGFyZ3VtZW50JyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+ZmlsZSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyAiMQkwCWZpbGUiID5leHBlY3RlZCAmJgorCWdpdCBzdGFzaCBzaG93IC0tbnVtc3RhdCAke1NUQVNIX0lEfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNob3cgLXAgLSBubyBzdGFzaGVzIG9uIHN0YWNrLCBzdGFzaC1saWtlIGFyZ3VtZW50JyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+ZmlsZSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKKwlpbmRleCA3NjAxODA3Li43MWI1MmM0IDEwMDY0NAorCS0tLSBhL2ZpbGUKKwkrKysgYi9maWxlCisJQEAgLTEgKzEsMiBAQAorCSBiYXoKKwkrZm9vCisJRU9GCisJZ2l0IHN0YXNoIHNob3cgLXAgJHtTVEFTSF9JRH0gPmFjdHVhbCAmJgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzaG93IC0tcGF0aWVuY2Ugc2hvd3MgZGlmZicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGZvbyA+PmZpbGUgJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCisJaW5kZXggNzYwMTgwNy4uNzFiNTJjNCAxMDA2NDQKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAIC0xICsxLDIgQEAKKwkgYmF6CisJK2ZvbworCUVPRgorCWdpdCBzdGFzaCBzaG93IC0tcGF0aWVuY2UgJHtTVEFTSF9JRH0gPmFjdHVhbCAmJgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkcm9wOiBmYWlsIGVhcmx5IGlmIHNwZWNpZmllZCBzdGFzaCBpcyBub3QgYSBzdGFzaCByZWYnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCAmJiBnaXQgc3Rhc2ggY2xlYXIiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJZWNobyBiYXIgPmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggZHJvcCAkKGdpdCByZXYtcGFyc2Ugc3Rhc2hAezB9KSAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9wOiBmYWlsIGVhcmx5IGlmIHNwZWNpZmllZCBzdGFzaCBpcyBub3QgYSBzdGFzaCByZWYnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCAmJiBnaXQgc3Rhc2ggY2xlYXIiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJZWNobyBiYXIgPmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggcG9wICQoZ2l0IHJldi1wYXJzZSBzdGFzaEB7MH0pICYmCisJZ2l0IHN0YXNoIHBvcCAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIiAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWYgd2l0aCBub24tZXhpc3RlbnQgcmVmbG9nJyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJZWNobyBiYXI1ID5maWxlICYmCisJZWNobyBiYXI2ID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcXVpZXQgLS12ZXJpZnkgZG9lcy1ub3QtZXhpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggZHJvcCBkb2VzLW5vdC1leGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBkcm9wIGRvZXMtbm90LWV4aXN0QHswfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBwb3AgZG9lcy1ub3QtZXhpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggcG9wIGRvZXMtbm90LWV4aXN0QHswfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBhcHBseSBkb2VzLW5vdC1leGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBhcHBseSBkb2VzLW5vdC1leGlzdEB7MH0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggc2hvdyBkb2VzLW5vdC1leGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBzaG93IGRvZXMtbm90LWV4aXN0QHswfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBicmFuY2ggdG1wIGRvZXMtbm90LWV4aXN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGJyYW5jaCB0bXAgZG9lcy1ub3QtZXhpc3RAezB9ICYmCisJZ2l0IHN0YXNoIGRyb3AKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCByZWYgb2YgdGhlIGZvcm0gc3Rhc2hAe259LCBuID49IE4nICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggZHJvcCBzdGFzaEB7MH0gJiYKKwllY2hvIGJhcjUgPmZpbGUgJiYKKwllY2hvIGJhcjYgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBkcm9wIHN0YXNoQHsxfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBwb3Agc3Rhc2hAezF9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGFwcGx5IHN0YXNoQHsxfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBzaG93IHN0YXNoQHsxfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBicmFuY2ggdG1wIHN0YXNoQHsxfSAmJgorCWdpdCBzdGFzaCBkcm9wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgcmVmIG9mIHRoZSBmb3JtICJuIiwgbiA+PSBOJyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGRyb3AgMCAmJgorCWVjaG8gYmFyNSA+ZmlsZSAmJgorCWVjaG8gYmFyNiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGRyb3AgMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBwb3AgMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBhcHBseSAxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHNob3cgMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBicmFuY2ggdG1wIDEgJiYKKwlnaXQgc3Rhc2ggZHJvcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZCByZWYgb2YgdGhlIGZvcm0gIm4iLCBuIDwgTicgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCWVjaG8gYmFyNSA+ZmlsZSAmJgorCWVjaG8gYmFyNiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIHNob3cgMCAmJgorCWdpdCBzdGFzaCBicmFuY2ggdG1wIDAgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIGFwcGx5IDAgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIHBvcCAwICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIGRyb3AgMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBkcm9wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaDogZG8gbm90IGRyb3AgdGhlIHN0YXNoIGlmIHRoZSBicmFuY2ggZXhpc3RzJyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJZWNobyBmb28gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvIGJhciA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBicmFuY2ggbWFzdGVyIHN0YXNoQHswfSAmJgorCWdpdCByZXYtcGFyc2Ugc3Rhc2hAezB9IC0tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaDogc2hvdWxkIG5vdCBkcm9wIHRoZSBzdGFzaCBpZiB0aGUgYXBwbHkgZmFpbHMnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwlnaXQgcmVzZXQgSEVBRH4xIC0taGFyZCAmJgorCWVjaG8gZm9vID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyBiYXIgPmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwllY2hvIGJheiA+ZmlsZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggYnJhbmNoIG5ld19icmFuY2ggc3Rhc2hAezB9ICYmCisJZ2l0IHJldi1wYXJzZSBzdGFzaEB7MH0gLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHk6IHNob3cgc2FtZSBzdGF0dXMgYXMgZ2l0IHN0YXR1cyAocmVsYXRpdmUgdG8gLi8pJyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJZWNobyAxID5zdWJkaXIvc3ViZmlsZTEgJiYKKwllY2hvIDIgPnN1YmRpci9zdWJmaWxlMiAmJgorCWdpdCBhZGQgc3ViZGlyL3N1YmZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSBzdWJkaXIgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQllY2hvIHggPnN1YmZpbGUxICYmCisJCWVjaG8geCA+Li4vZmlsZSAmJgorCQlnaXQgc3RhdHVzID4uLi9leHBlY3QgJiYKKwkJZ2l0IHN0YXNoICYmCisJCXNhbmVfdW5zZXQgR0lUX01FUkdFX1ZFUkJPU0lUWSAmJgorCQlnaXQgc3Rhc2ggYXBwbHkKKwkpIHwKKwlzZWQgLWUgMWQgPmFjdHVhbCAmJiAjIGRyb3AgIlNhdmVkLi4uIgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitkaWZmIC0tZ2l0IGEvSEVBRCBiL0hFQUQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mZTBjYmVlCistLS0gL2Rldi9udWxsCisrKysgYi9IRUFECitAQCAtMCwwICsxIEBACisrZmlsZS1ub3QtYS1yZWYKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCB3aGVyZSB3b3JraW5nIGRpcmVjdG9yeSBjb250YWlucyAiSEVBRCIgZmlsZScgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGZpbGUtbm90LWEtcmVmID5IRUFEICYmCisJZ2l0IGFkZCBIRUFEICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tcXVpZXQgSEVBRCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzdGFzaF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJZ2l0IGRpZmYgc3Rhc2heLi5zdGFzaCA+b3V0cHV0ICYmCisJZGlmZl9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdG9yZSBjYWxsZWQgd2l0aCBpbnZhbGlkIGNvbW1pdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBzdG9yZSBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RvcmUgdXBkYXRlcyBzdGFzaCByZWYgYW5kIHJlZmxvZycgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIHF1dXggPmJhenp5ICYmCisJZ2l0IGFkZCBiYXp6eSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYmF6enkgJiYKKwlnaXQgc3Rhc2ggc3RvcmUgLW0gcXV1eGVyeSAkU1RBU0hfSUQgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBzdGFzaCkgPSAkU1RBU0hfSUQgJiYKKwlnaXQgcmVmbG9nIC0tZm9ybWF0PSVIIHN0YXNofCBncmVwICRTVEFTSF9JRCAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwlncmVwIHF1dXggYmF6enkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFuZGxlIHN0YXNoIHNwZWNpZmljYXRpb24gd2l0aCBzcGFjZXMnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwllY2hvIHBpZyA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXN0YW1wPSQoZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWNkIiAtMSByZWZzL3N0YXNoKSAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gY293ID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIGFwcGx5ICJzdGFzaEB7JHN0YW1wfSIgJiYKKwlncmVwIHBpZyBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN0YXNoIHdpdGggaW5kZXggYW5kIHdvcmt0cmVlIGNoYW5nZXMnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBpbmRleCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gd29ya2luZyA+ZmlsZSAmJgorCWdpdCBzdGFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBsaXN0IGltcGxpZXMgLS1maXJzdC1wYXJlbnQgLW0nICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlzdGFzaEB7MH0KKworCWRpZmYgLS1naXQgYS9maWxlIGIvZmlsZQorCWluZGV4IDI1N2NjNTYuLmQyNmIzM2QgMTAwNjQ0CisJLS0tIGEvZmlsZQorCSsrKyBiL2ZpbGUKKwlAQCAtMSArMSBAQAorCS1mb28KKwkrd29ya2luZworCUVPRgorCWdpdCBzdGFzaCBsaXN0IC0tZm9ybWF0PSVnZCAtcCA+YWN0dWFsICYmCisJZGlmZl9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBsaXN0IC0tY2Mgc2hvd3MgY29tYmluZWQgZGlmZicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlzdGFzaEB7MH0KKworCWRpZmYgLS1jYyBmaWxlCisJaW5kZXggMjU3Y2M1Niw5MDE1YTdhLi5kMjZiMzNkCisJLS0tIGEvZmlsZQorCSsrKyBiL2ZpbGUKKwlAQEAgLTEsMSAtMSwxICsxLDEgQEBACisJLSBmb28KKwkgLWluZGV4CisJKyt3b3JraW5nCisJRU9GCisJZ2l0IHN0YXNoIGxpc3QgLS1mb3JtYXQ9JWdkIC1wIC0tY2MgPmFjdHVhbCAmJgorCWRpZmZfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggaXMgbm90IGNvbmZ1c2VkIGJ5IHBhcnRpYWwgcmVuYW1lcycgJworCW12IGZpbGUgcmVuYW1lZCAmJgorCWdpdCBhZGQgcmVuYW1lZCAmJgorCWdpdCBzdGFzaCAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3RfcGF0aF9pc19maWxlIHJlbmFtZWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLW0gc2hvd3MgcmlnaHQgbWVzc2FnZScgJworCT5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBzdGFzaCBwdXNoIC1tICJ0ZXN0IG1lc3NhZ2UiICYmCisJZWNobyAic3Rhc2hAezB9OiBPbiBtYXN0ZXI6IHRlc3QgbWVzc2FnZSIgPmV4cGVjdCAmJgorCWdpdCBzdGFzaCBsaXN0IC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLW0gYWxzbyB3b3JrcyB3aXRob3V0IHNwYWNlJyAnCisJPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHN0YXNoIHB1c2ggLW0idW5zcGFjZWQgdGVzdCBtZXNzYWdlIiAmJgorCWVjaG8gInN0YXNoQHswfTogT24gbWFzdGVyOiB1bnNwYWNlZCB0ZXN0IG1lc3NhZ2UiID5leHBlY3QgJiYKKwlnaXQgc3Rhc2ggbGlzdCAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdG9yZSAtbSBmb28gc2hvd3MgcmlnaHQgbWVzc2FnZScgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIHF1dXggPmJhenp5ICYmCisJZ2l0IGFkZCBiYXp6eSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgc3Rhc2ggc3RvcmUgLW0gInN0b3JlIG0iICRTVEFTSF9JRCAmJgorCWVjaG8gInN0YXNoQHswfTogc3RvcmUgbSIgPmV4cGVjdCAmJgorCWdpdCBzdGFzaCBsaXN0IC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0b3JlIC1tZm9vIHNob3dzIHJpZ2h0IG1lc3NhZ2UnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBxdXV4ID5iYXp6eSAmJgorCWdpdCBhZGQgYmF6enkgJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUpICYmCisJZ2l0IHN0YXNoIHN0b3JlIC1tInN0b3JlIG1mb28iICRTVEFTSF9JRCAmJgorCWVjaG8gInN0YXNoQHswfTogc3RvcmUgbWZvbyIgPmV4cGVjdCAmJgorCWdpdCBzdGFzaCBsaXN0IC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0b3JlIC0tbWVzc2FnZT1mb28gc2hvd3MgcmlnaHQgbWVzc2FnZScgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIHF1dXggPmJhenp5ICYmCisJZ2l0IGFkZCBiYXp6eSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgc3Rhc2ggc3RvcmUgLS1tZXNzYWdlPSJzdG9yZSBtZXNzYWdlPWZvbyIgJFNUQVNIX0lEICYmCisJZWNobyAic3Rhc2hAezB9OiBzdG9yZSBtZXNzYWdlPWZvbyIgPmV4cGVjdCAmJgorCWdpdCBzdGFzaCBsaXN0IC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0b3JlIC0tbWVzc2FnZSBmb28gc2hvd3MgcmlnaHQgbWVzc2FnZScgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIHF1dXggPmJhenp5ICYmCisJZ2l0IGFkZCBiYXp6eSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgc3Rhc2ggc3RvcmUgLS1tZXNzYWdlICJzdG9yZSBtZXNzYWdlIGZvbyIgJFNUQVNIX0lEICYmCisJZWNobyAic3Rhc2hAezB9OiBzdG9yZSBtZXNzYWdlIGZvbyIgPmV4cGVjdCAmJgorCWdpdCBzdGFzaCBsaXN0IC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLW1mb28gdXNlcyByaWdodCBtZXNzYWdlJyAnCisJPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHN0YXNoIHB1c2ggLW0idGVzdCBtZm9vIiAmJgorCWVjaG8gInN0YXNoQHswfTogT24gbWFzdGVyOiB0ZXN0IG1mb28iID5leHBlY3QgJiYKKwlnaXQgc3Rhc2ggbGlzdCAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tbWVzc2FnZSBmb28gaXMgc3lub255bSBmb3IgLW1mb28nICcKKwk+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgc3Rhc2ggcHVzaCAtLW1lc3NhZ2UgInRlc3QgbWVzc2FnZSBmb28iICYmCisJZWNobyAic3Rhc2hAezB9OiBPbiBtYXN0ZXI6IHRlc3QgbWVzc2FnZSBmb28iID5leHBlY3QgJiYKKwlnaXQgc3Rhc2ggbGlzdCAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tbWVzc2FnZT1mb28gaXMgc3lub255bSBmb3IgLW1mb28nICcKKwk+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgc3Rhc2ggcHVzaCAtLW1lc3NhZ2U9InRlc3QgbWVzc2FnZT1mb28iICYmCisJZWNobyAic3Rhc2hAezB9OiBPbiBtYXN0ZXI6IHRlc3QgbWVzc2FnZT1mb28iID5leHBlY3QgJiYKKwlnaXQgc3Rhc2ggbGlzdCAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC1tIHNob3dzIHJpZ2h0IG1lc3NhZ2UnICcKKwk+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgc3Rhc2ggcHVzaCAtbSAidGVzdCBtIGZvbyIgJiYKKwllY2hvICJzdGFzaEB7MH06IE9uIG1hc3RlcjogdGVzdCBtIGZvbyIgPmV4cGVjdCAmJgorCWdpdCBzdGFzaCBsaXN0IC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBzdG9yZXMgY29ycmVjdCBtZXNzYWdlJyAnCisJPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJU1RBU0hfSUQ9JChnaXQgc3Rhc2ggY3JlYXRlICJjcmVhdGUgdGVzdCBtZXNzYWdlIikgJiYKKwllY2hvICJPbiBtYXN0ZXI6IGNyZWF0ZSB0ZXN0IG1lc3NhZ2UiID5leHBlY3QgJiYKKwlnaXQgc2hvdyAtLXByZXR0eT0lcyAtcyAke1NUQVNIX0lEfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgd2l0aCBtdWx0aXBsZSBhcmd1bWVudHMgZm9yIHRoZSBtZXNzYWdlJyAnCisJPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJU1RBU0hfSUQ9JChnaXQgc3Rhc2ggY3JlYXRlIHRlc3QgdW50cmFja2VkKSAmJgorCWVjaG8gIk9uIG1hc3RlcjogdGVzdCB1bnRyYWNrZWQiID5leHBlY3QgJiYKKwlnaXQgc2hvdyAtLXByZXR0eT0lcyAtcyAke1NUQVNIX0lEfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgaW4gYSBkZXRhY2hlZCBzdGF0ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRH4xICYmCisJPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJU1RBU0hfSUQ9JChnaXQgc3Rhc2ggY3JlYXRlKSAmJgorCUhFQURfSUQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvICJXSVAgb24gKG5vIGJyYW5jaCk6ICR7SEVBRF9JRH0gaW5pdGlhbCIgPmV4cGVjdCAmJgorCWdpdCBzaG93IC0tcHJldHR5PSVzIC1zICR7U1RBU0hfSUR9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC0tIDxwYXRoc3BlYz4gc3Rhc2hlcyBhbmQgcmVzdG9yZXMgdGhlIGZpbGUnICcKKwk+Zm9vICYmCisJPmJhciAmJgorCWdpdCBhZGQgZm9vIGJhciAmJgorCWdpdCBzdGFzaCBwdXNoIC0tIGZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIGJhciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZvbyAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLS0gPHBhdGhzcGVjPiBzdGFzaGVzIGluIHN1YmRpcmVjdG9yeScgJworCW1rZGlyIHN1YiAmJgorCT5mb28gJiYKKwk+YmFyICYmCisJZ2l0IGFkZCBmb28gYmFyICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IHN0YXNoIHB1c2ggLS0gLi4vZm9vCisJKSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGJhciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZvbyAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggd2l0aCBtdWx0aXBsZSBwYXRoc3BlYyBhcmd1bWVudHMnICcKKwk+Zm9vICYmCisJPmJhciAmJgorCT5leHRyYSAmJgorCWdpdCBhZGQgZm9vIGJhciBleHRyYSAmJgorCWdpdCBzdGFzaCBwdXNoIC0tIGZvbyBiYXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiYXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBleHRyYSAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBiYXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBleHRyYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCB3aXRoIGZpbGUgaW5jbHVkaW5nICRJRlMgY2hhcmFjdGVyJyAnCisJPiJmb28gYmFyIiAmJgorCT5mb28gJiYKKwk+YmFyICYmCisJZ2l0IGFkZCBmb28qICYmCisJZ2l0IHN0YXNoIHB1c2ggLS0gImZvbyBiKiIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiZm9vIGJhciIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBiYXIgJiYKKwlnaXQgc3Rhc2ggcG9wICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgImZvbyBiYXIiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZm9vICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHdpdGggcGF0aHNwZWMgbWF0Y2hpbmcgbXVsdGlwbGUgcGF0aHMnICcKKyAgICAgICBlY2hvIG9yaWdpbmFsID5maWxlICYmCisgICAgICAgZWNobyBvcmlnaW5hbCA+b3RoZXItZmlsZSAmJgorICAgICAgIGdpdCBjb21taXQgLW0gInR3byIgZmlsZSBvdGhlci1maWxlICYmCisgICAgICAgZWNobyBtb2RpZmllZCA+ZmlsZSAmJgorICAgICAgIGVjaG8gbW9kaWZpZWQgPm90aGVyLWZpbGUgJiYKKyAgICAgICBnaXQgc3Rhc2ggcHVzaCAtLSAiKmZpbGUiICYmCisgICAgICAgZWNobyBvcmlnaW5hbCA+ZXhwZWN0ICYmCisgICAgICAgdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKyAgICAgICB0ZXN0X2NtcCBleHBlY3Qgb3RoZXItZmlsZSAmJgorICAgICAgIGdpdCBzdGFzaCBwb3AgJiYKKyAgICAgICBlY2hvIG1vZGlmaWVkID5leHBlY3QgJiYKKyAgICAgICB0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorICAgICAgIHRlc3RfY21wIGV4cGVjdCBvdGhlci1maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHB1c2ggLXAgd2l0aCBwYXRoc3BlYyBzaG93cyBubyBjaGFuZ2VzIG9ubHkgb25jZScgJworCT5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gInRtcCIgJiYKKwlnaXQgc3Rhc2ggcHVzaCAtcCBmb28gPmFjdHVhbCAmJgorCWVjaG8gIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIgPmV4cGVjdCAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRH4gJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIDxwYXRoc3BlYz46IHNob3cgbm8gY2hhbmdlcyB3aGVuIHRoZXJlIGFyZSBub25lJyAnCisJPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAidG1wIiAmJgorCWdpdCBzdGFzaCBwdXNoIGZvbyA+YWN0dWFsICYmCisJZWNobyAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIiA+ZXhwZWN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfiAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2g6IDxwYXRoc3BlYz4gbm90IGluIHRoZSByZXBvc2l0b3J5IGVycm9ycyBvdXQnICcKKwk+dW50cmFja2VkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHB1c2ggdW50cmFja2VkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2g6IC1xIGlzIHF1aWV0IHdpdGggY2hhbmdlcycgJworCT5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBzdGFzaCBwdXNoIC1xID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaDogLXEgaXMgcXVpZXQgd2l0aCBubyBjaGFuZ2VzJyAnCisJZ2l0IHN0YXNoIHB1c2ggLXEgPm91dHB1dCAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoOiAtcSBpcyBxdWlldCBldmVuIGlmIHRoZXJlIGlzIG5vIGluaXRpYWwgY29tbWl0JyAnCisJZ2l0IGluaXQgZm9vX2RpciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtcmYgZm9vX2RpciAmJgorCSgKKwkJY2QgZm9vX2RpciAmJgorCQk+YmFyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBwdXNoIC1xID5vdXRwdXQgMj4mMSAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnRyYWNrZWQgZmlsZXMgYXJlIGxlZnQgaW4gcGxhY2Ugd2hlbiAtdSBpcyBub3QgZ2l2ZW4nICcKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCT51bnRyYWNrZWQgJiYKKwlnaXQgc3Rhc2ggcHVzaCBmaWxlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHdpdGhvdXQgdmVyYiB3aXRoIHBhdGhzcGVjJyAnCisJPiJmb28gYmFyIiAmJgorCT5mb28gJiYKKwk+YmFyICYmCisJZ2l0IGFkZCBmb28qICYmCisJZ2l0IHN0YXNoIC0tICJmb28gYioiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgImZvbyBiYXIiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZm9vICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYmFyICYmCisJZ2l0IHN0YXNoIHBvcCAmJgorCXRlc3RfcGF0aF9pc19maWxlICJmb28gYmFyIiAmJgorCXRlc3RfcGF0aF9pc19maWxlIGZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCAtayAtLSA8cGF0aHNwZWM+IGxlYXZlcyB1bnN0YWdlZCBmaWxlcyBpbnRhY3QnICcKKwlnaXQgcmVzZXQgJiYKKwk+Zm9vICYmCisJPmJhciAmJgorCWdpdCBhZGQgZm9vIGJhciAmJgorCWdpdCBjb21taXQgLW0gInRlc3QiICYmCisJZWNobyAiZm9vIiA+Zm9vICYmCisJZWNobyAiYmFyIiA+YmFyICYmCisJZ2l0IHN0YXNoIC1rIC0tIGZvbyAmJgorCXRlc3QgIiIsYmFyID0gJChjYXQgZm9vKSwkKGNhdCBiYXIpICYmCisJZ2l0IHN0YXNoIHBvcCAmJgorCXRlc3QgZm9vLGJhciA9ICQoY2F0IGZvbyksJChjYXQgYmFyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCAtLSA8c3ViZGlyPiBsZWF2ZXMgdW50cmFja2VkIGZpbGVzIGluIHN1YmRpciBpbnRhY3QnICcKKwlnaXQgcmVzZXQgJiYKKwk+c3ViZGlyL3VudHJhY2tlZCAmJgorCT5zdWJkaXIvdHJhY2tlZDEgJiYKKwk+c3ViZGlyL3RyYWNrZWQyICYmCisJZ2l0IGFkZCBzdWJkaXIvdHJhY2tlZCogJiYKKwlnaXQgc3Rhc2ggLS0gc3ViZGlyLyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1YmRpci90cmFja2VkMSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1YmRpci90cmFja2VkMiAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1YmRpci91bnRyYWNrZWQgJiYKKwlnaXQgc3Rhc2ggcG9wICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3ViZGlyL3RyYWNrZWQxICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3ViZGlyL3RyYWNrZWQyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3ViZGlyL3VudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCAtLSA8c3ViZGlyPiB3b3JrcyB3aXRoIGJpbmFyeSBmaWxlcycgJworCWdpdCByZXNldCAmJgorCT5zdWJkaXIvdW50cmFja2VkICYmCisJPnN1YmRpci90cmFja2VkICYmCisJY3AgIiRURVNUX0RJUkVDVE9SWSIvdGVzdC1iaW5hcnktMS5wbmcgc3ViZGlyL3RyYWNrZWQtYmluYXJ5ICYmCisJZ2l0IGFkZCBzdWJkaXIvdHJhY2tlZCogJiYKKwlnaXQgc3Rhc2ggLS0gc3ViZGlyLyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1YmRpci90cmFja2VkICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3ViZGlyL3RyYWNrZWQtYmluYXJ5ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3ViZGlyL3VudHJhY2tlZCAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWJkaXIvdHJhY2tlZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1YmRpci90cmFja2VkLWJpbmFyeSAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1YmRpci91bnRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggd2l0aCB1c2VyLm5hbWUgYW5kIHVzZXIuZW1haWwgc2V0IHdvcmtzJyAnCisJdGVzdF9jb25maWcgdXNlci5uYW1lICJBIFUgVGhvciIgJiYKKwl0ZXN0X2NvbmZpZyB1c2VyLmVtYWlsICJhLnVAdGhvciIgJiYKKwlnaXQgc3Rhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggd29ya3Mgd2hlbiB1c2VyLm5hbWUgYW5kIHVzZXIuZW1haWwgYXJlIG5vdCBzZXQnICcKKwlnaXQgcmVzZXQgJiYKKwk+MSAmJgorCWdpdCBhZGQgMSAmJgorCWVjaG8gIiRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiIgPmV4cGVjdCAmJgorCWdpdCBzdGFzaCAmJgorCWdpdCBzaG93IC1zIC0tZm9ybWF0PSIlYW4gPCVhZT4iIHJlZnMvc3Rhc2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwk+MiAmJgorCWdpdCBhZGQgMiAmJgorCXRlc3RfY29uZmlnIHVzZXIudXNlY29uZmlnb25seSB0cnVlICYmCisJdGVzdF9jb25maWcgc3Rhc2gudXNlYnVpbHRpbiB0cnVlICYmCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9BVVRIT1JfTkFNRSAmJgorCQlzYW5lX3Vuc2V0IEdJVF9BVVRIT1JfRU1BSUwgJiYKKwkJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX05BTUUgJiYKKwkJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX0VNQUlMICYmCisJCXRlc3RfdW5jb25maWcgdXNlci5lbWFpbCAmJgorCQl0ZXN0X3VuY29uZmlnIHVzZXIubmFtZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tICJzaG91bGQgZmFpbCIgJiYKKwkJZWNobyAiZ2l0IHN0YXNoIDxnaXRAc3Rhc2g+IiA+ZXhwZWN0ICYmCisJCT4yICYmCisJCWdpdCBzdGFzaCAmJgorCQlnaXQgc2hvdyAtcyAtLWZvcm1hdD0iJWFuIDwlYWU+IiByZWZzL3N0YXNoID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLS1rZWVwLWluZGV4IHdpdGggZmlsZSBkZWxldGVkIGluIGluZGV4IGRvZXMgbm90IHJlc3VycmVjdCBpdCBvbiBkaXNrJyAnCisJdGVzdF9jb21taXQgdG8tcmVtb3ZlIHRvLXJlbW92ZSAmJgorCWdpdCBybSB0by1yZW1vdmUgJiYKKwlnaXQgc3Rhc2ggLS1rZWVwLWluZGV4ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdG8tcmVtb3ZlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIGFwcGx5IHNob3VsZCBzdWNjZWVkIHdpdGggdW5tb2RpZmllZCBmaWxlJyAnCisJZWNobyBiYXNlID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisKKwkjIG5vdyBzdGFzaCBhIG1vZGlmaWNhdGlvbgorCWVjaG8gbW9kaWZpZWQgPmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKworCSMgbWFrZSB0aGUgZmlsZSBzdGF0IGRpcnR5CisJY3AgZmlsZSBvdGhlciAmJgorCW12IG90aGVyIGZpbGUgJiYKKworCWdpdCBzdGFzaCBhcHBseQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBoYW5kbGVzIHNraXAtd29ya3RyZWUgZW50cmllcyBuaWNlbHknICcKKwl0ZXN0X2NvbW1pdCBBICYmCisJZWNobyBjaGFuZ2VkID5BLnQgJiYKKwlnaXQgYWRkIEEudCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIEEudCAmJgorCXJtIEEudCAmJgorCWdpdCBzdGFzaCAmJgorCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3N0YXNoOkEudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCAtYyBzdGFzaC51c2VCdWlsdGluPWZhbHNlIHdhcm5pbmcgJyAnCisJZXhwZWN0ZWQ9InN0YXNoLnVzZUJ1aWx0aW4gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkIiAmJgorCisJZ2l0IC1jIHN0YXNoLnVzZUJ1aWx0aW49ZmFsc2Ugc3Rhc2ggMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICIkZXhwZWN0ZWQiIGVyciAmJgorCWVudiBHSVRfVEVTVF9TVEFTSF9VU0VfQlVJTFRJTj1mYWxzZSBnaXQgc3Rhc2ggMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICIkZXhwZWN0ZWQiIGVyciAmJgorCisJZ2l0IC1jIHN0YXNoLnVzZUJ1aWx0aW49dHJ1ZSBzdGFzaCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKwllbnYgR0lUX1RFU1RfU1RBU0hfVVNFX0JVSUxUSU49dHJ1ZSBnaXQgc3Rhc2ggMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkwNC1zdGFzaC1wYXRjaC5zaCBiL3QvdDM5MDQtc3Rhc2gtcGF0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWNjZmUzOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDQtc3Rhc2gtcGF0Y2guc2gKQEAgLTAsMCArMSwxMTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzdGFzaCAtcCcKKy4gLi9saWItcGF0Y2gtbW9kZS5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTAordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBzdGFzaCAtcCB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBkaXIgJiYKKwllY2hvIHBhcmVudCA+IGRpci9mb28gJiYKKwllY2hvIGR1bW15ID4gYmFyICYmCisJZWNobyBjb21taXR0ZWQgPiBIRUFEICYmCisJZ2l0IGFkZCBiYXIgZGlyL2ZvbyBIRUFEICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9jb21taXQgc2Vjb25kIGRpci9mb28gaGVhZCAmJgorCWVjaG8gaW5kZXggPiBkaXIvZm9vICYmCisJZ2l0IGFkZCBkaXIvZm9vICYmCisJc2V0X2FuZF9zYXZlX3N0YXRlIGJhciBiYXJfd29yayBiYXJfaW5kZXggJiYKKwlzYXZlX2hlYWQKKycKKworIyBub3RlOiBvcmRlciBvZiBmaWxlcyB3aXRoIHVuc3RhZ2VkIGNoYW5nZXM6IEhFQUQgYmFyIGRpci9mb28KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2F5aW5nICJuIiBkb2VzIG5vdGhpbmcnICcKKwlzZXRfc3RhdGUgSEVBRCBIRUFEZmlsZV93b3JrIEhFQURmaWxlX2luZGV4ICYmCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBpbmRleCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgbiBuIG4gfCB0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggc2F2ZSAtcCAmJgorCXZlcmlmeV9zdGF0ZSBIRUFEIEhFQURmaWxlX3dvcmsgSEVBRGZpbGVfaW5kZXggJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBpbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3Rhc2ggLXAnICcKKwl0ZXN0X3dyaXRlX2xpbmVzIHkgbiB5IHwgZ2l0IHN0YXNoIHNhdmUgLXAgJiYKKwl2ZXJpZnlfc3RhdGUgSEVBRCBjb21taXR0ZWQgSEVBRGZpbGVfaW5kZXggJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBpbmRleCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl2ZXJpZnlfc3RhdGUgSEVBRCBIRUFEZmlsZV93b3JrIGNvbW1pdHRlZCAmJgorCXZlcmlmeV9zdGF0ZSBiYXIgZHVtbXkgZHVtbXkgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN0YXNoIC1wIC0tbm8ta2VlcC1pbmRleCcgJworCXNldF9zdGF0ZSBIRUFEIEhFQURmaWxlX3dvcmsgSEVBRGZpbGVfaW5kZXggJiYKKwlzZXRfc3RhdGUgYmFyIGJhcl93b3JrIGJhcl9pbmRleCAmJgorCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaW5kZXggJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHkgbiB5IHwgZ2l0IHN0YXNoIHNhdmUgLXAgLS1uby1rZWVwLWluZGV4ICYmCisJdmVyaWZ5X3N0YXRlIEhFQUQgY29tbWl0dGVkIGNvbW1pdHRlZCAmJgorCXZlcmlmeV9zdGF0ZSBiYXIgYmFyX3dvcmsgZHVtbXkgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIGFwcGx5IC0taW5kZXggJiYKKwl2ZXJpZnlfc3RhdGUgSEVBRCBIRUFEZmlsZV93b3JrIEhFQURmaWxlX2luZGV4ICYmCisJdmVyaWZ5X3N0YXRlIGJhciBkdW1teSBiYXJfaW5kZXggJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdGFzaCAtLW5vLWtlZXAtaW5kZXggLXAnICcKKwlzZXRfc3RhdGUgSEVBRCBIRUFEZmlsZV93b3JrIEhFQURmaWxlX2luZGV4ICYmCisJc2V0X3N0YXRlIGJhciBiYXJfd29yayBiYXJfaW5kZXggJiYKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4ICYmCisJdGVzdF93cml0ZV9saW5lcyB5IG4geSB8IGdpdCBzdGFzaCBzYXZlIC0tbm8ta2VlcC1pbmRleCAtcCAmJgorCXZlcmlmeV9zdGF0ZSBIRUFEIGNvbW1pdHRlZCBjb21taXR0ZWQgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQgJiYKKwl2ZXJpZnlfc3RhdGUgYmFyIGJhcl93b3JrIGR1bW15ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdGFzaCBhcHBseSAtLWluZGV4ICYmCisJdmVyaWZ5X3N0YXRlIEhFQUQgSEVBRGZpbGVfd29yayBIRUFEZmlsZV9pbmRleCAmJgorCXZlcmlmeV9zdGF0ZSBiYXIgZHVtbXkgYmFyX2luZGV4ICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBpbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCAtcCAtLW5vLWtlZXAtaW5kZXggLS0gPHBhdGhzcGVjPiBkb2VzIG5vdCB1bnN0YWdlIG90aGVyIGZpbGVzJyAnCisJc2V0X3N0YXRlIEhFQUQgSEVBRGZpbGVfd29yayBIRUFEZmlsZV9pbmRleCAmJgorCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaW5kZXggJiYKKwllY2hvIHkgfCBnaXQgc3Rhc2ggcHVzaCAtcCAtLW5vLWtlZXAtaW5kZXggLS0gSEVBRCAmJgorCXZlcmlmeV9zdGF0ZSBIRUFEIGNvbW1pdHRlZCBjb21taXR0ZWQgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbmUgb2YgdGhpcyBtb3ZlZCBIRUFEJyAnCisJdmVyaWZ5X3NhdmVkX2hlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLXAgd2l0aCBzcGxpdCBodW5rJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNhdCA+dGVzdCA8PC1cRU9GICYmCisJYWFhCisJYmJiCisJY2NjCisJRU9GCisJZ2l0IGFkZCB0ZXN0ICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIgJiYKKwljYXQgPnRlc3QgPDwtXEVPRiAmJgorCWFhYQorCWFkZGVkIGxpbmUgMQorCWJiYgorCWFkZGVkIGxpbmUgMgorCWNjYworCUVPRgorCXByaW50ZiAiJXNcbiIgcyBuIHkgcSB8CisJZ2l0IHN0YXNoIC1wIDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IgJiYKKwlncmVwICJhZGRlZCBsaW5lIDEiIHRlc3QgJiYKKwkhIGdyZXAgImFkZGVkIGxpbmUgMiIgdGVzdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDUtc3Rhc2gtaW5jbHVkZS11bnRyYWNrZWQuc2ggYi90L3QzOTA1LXN0YXNoLWluY2x1ZGUtdW50cmFja2VkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwNzVjN2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTA1LXN0YXNoLWluY2x1ZGUtdW50cmFja2VkLnNoCkBAIC0wLDAgKzEsMjkyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIERhdmlkIENhbGR3ZWxsCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IHN0YXNoIC0taW5jbHVkZS11bnRyYWNrZWQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC0taW5jbHVkZS11bnRyYWNrZWQgc29tZSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeScgJworCWVjaG8gMSA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvIDIgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAzID4gZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gMSA+IGZpbGUyICYmCisJZWNobyAxID4gSEVBRCAmJgorCW1rZGlyIHVudHJhY2tlZCAmJgorCWVjaG8gdW50cmFja2VkID51bnRyYWNrZWQvdW50cmFja2VkICYmCisJZ2l0IHN0YXNoIC0taW5jbHVkZS11bnRyYWNrZWQgJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFECisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorPz8gYWN0dWFsCis/PyBleHBlY3QKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC0taW5jbHVkZS11bnRyYWNrZWQgY2xlYW5lZCB0aGUgdW50cmFja2VkIGZpbGVzJyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0cmFja2VkPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZWNobyAxIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pKQordW50cmFja2VkPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZWNobyB1bnRyYWNrZWQgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikpCitjYXQgPiBleHBlY3QuZGlmZiA8PEVPRgorZGlmZiAtLWdpdCBhL0hFQUQgYi9IRUFECituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uJHRyYWNrZWQKKy0tLSAvZGV2L251bGwKKysrKyBiL0hFQUQKK0BAIC0wLDAgKzEgQEAKKysxCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLiR0cmFja2VkCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSBAQAorKzEKK2RpZmYgLS1naXQgYS91bnRyYWNrZWQvdW50cmFja2VkIGIvdW50cmFja2VkL3VudHJhY2tlZAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLiR1bnRyYWNrZWQKKy0tLSAvZGV2L251bGwKKysrKyBiL3VudHJhY2tlZC91bnRyYWNrZWQKK0BAIC0wLDAgKzEgQEAKKyt1bnRyYWNrZWQKK0VPRgorY2F0ID4gZXhwZWN0LmxzdHJlZSA8PEVPRgorSEVBRAorZmlsZTIKK3VudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1pbmNsdWRlLXVudHJhY2tlZCBzdGFzaGVkIHRoZSB1bnRyYWNrZWQgZmlsZXMnICcKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHVudHJhY2tlZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIEhFQUQgJiYKKwlnaXQgZGlmZiBIRUFEIHN0YXNoXjMgLS0gSEVBRCBmaWxlMiB1bnRyYWNrZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5kaWZmIGFjdHVhbCAmJgorCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHN0YXNoXjM6ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QubHN0cmVlIGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2F2ZSAtLXBhdGNoIC0taW5jbHVkZS11bnRyYWNrZWQgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggLS1wYXRjaCAtLWluY2x1ZGUtdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1wYXRjaCAtLWFsbCBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCAtLXBhdGNoIC0tYWxsCisnCisKK2dpdCBjbGVhbiAtLWZvcmNlIC0tcXVpZXQKKworY2F0ID4gZXhwZWN0IDw8RU9GCisgTSBmaWxlCis/PyBIRUFECis/PyBhY3R1YWwKKz8/IGV4cGVjdAorPz8gZmlsZTIKKz8/IHVudHJhY2tlZC8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBwb3AgYWZ0ZXIgc2F2ZSAtLWluY2x1ZGUtdW50cmFja2VkIGxlYXZlcyBmaWxlcyB1bnRyYWNrZWQgYWdhaW4nICcKKwlnaXQgc3Rhc2ggcG9wICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3QgIjEiID0gIiQoY2F0IGZpbGUyKSIgJiYKKwl0ZXN0IHVudHJhY2tlZCA9ICIkKGNhdCB1bnRyYWNrZWQvdW50cmFja2VkKSIKKycKKworZ2l0IGNsZWFuIC0tZm9yY2UgLS1xdWlldCAtZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC11IGRpcnR5IGluZGV4JyAnCisJZWNobyA0ID4gZmlsZTMgJiYKKwlnaXQgYWRkIGZpbGUzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHN0YXNoIC11CisnCisKK2Jsb2I9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChlY2hvIDQgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikpCitjYXQgPiBleHBlY3QgPDxFT0YKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uJGJsb2IKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxIEBACisrNAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1pbmNsdWRlLXVudHJhY2tlZCBkaXJ0eSBpbmRleCBnb3Qgc3Rhc2hlZCcgJworCWdpdCBzdGFzaCBwb3AgLS1pbmRleCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2dpdCByZXNldCA+IC9kZXYvbnVsbAorCisjIE11c3QgZGlyZWN0IG91dHB1dCBzb21ld2hlcmUgd2hlcmUgaXQgd29uJ3QgYmUgY29uc2lkZXJlZCBhbiB1bnRyYWNrZWQgZmlsZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2F2ZSAtLWluY2x1ZGUtdW50cmFja2VkIC1xIGlzIHF1aWV0JyAnCisJZWNobyAxID4gZmlsZTUgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAtLWluY2x1ZGUtdW50cmFja2VkIC0tcXVpZXQgPiAuZ2l0L3N0YXNoLW91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgLmdpdC9zdGFzaC1vdXRwdXQub3V0ICYmCisJcm0gLWYgLmdpdC9zdGFzaC1vdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1pbmNsdWRlLXVudHJhY2tlZCByZW1vdmVkIGZpbGVzJyAnCisJcm0gLWYgZmlsZSAmJgorCWdpdCBzdGFzaCBzYXZlIC0taW5jbHVkZS11bnRyYWNrZWQgJiYKKwllY2hvIDEgPiBleHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCitybSAtZiBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2F2ZSAtLWluY2x1ZGUtdW50cmFja2VkIHJlbW92ZWQgZmlsZXMgZ290IHN0YXNoZWQnICcKKwlnaXQgc3Rhc2ggcG9wICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZQorJworCitjYXQgPiAuZ2l0aWdub3JlIDw8RU9GCisuZ2l0aWdub3JlCitpZ25vcmVkCitpZ25vcmVkLmQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2F2ZSAtLWluY2x1ZGUtdW50cmFja2VkIHJlc3BlY3RzIC5naXRpZ25vcmUnICcKKwllY2hvIGlnbm9yZWQgPiBpZ25vcmVkICYmCisJbWtkaXIgaWdub3JlZC5kICYmCisJZWNobyBpZ25vcmVkID5pZ25vcmVkLmQvdW50cmFja2VkICYmCisJZ2l0IHN0YXNoIC11ICYmCisJdGVzdCAtcyBpZ25vcmVkICYmCisJdGVzdCAtcyBpZ25vcmVkLmQvdW50cmFja2VkICYmCisJdGVzdCAtcyAuZ2l0aWdub3JlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLXUgY2FuIHN0YXNoIHdpdGggb25seSB1bnRyYWNrZWQgZmlsZXMgZGlmZmVyZW50JyAnCisJZWNobyA0ID4gZmlsZTQgJiYKKwlnaXQgc3Rhc2ggLXUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC0tYWxsIGRvZXMgbm90IHJlc3BlY3QgLmdpdGlnbm9yZScgJworCWdpdCBzdGFzaCAtYSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGlnbm9yZWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBpZ25vcmVkLmQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0aWdub3JlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1hbGwgaXMgc3Rhc2ggcG9wcGFibGUnICcKKwlnaXQgc3Rhc2ggcG9wICYmCisJdGVzdCAtcyBpZ25vcmVkICYmCisJdGVzdCAtcyBpZ25vcmVkLmQvdW50cmFja2VkICYmCisJdGVzdCAtcyAuZ2l0aWdub3JlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHB1c2ggLS1pbmNsdWRlLXVudHJhY2tlZCB3aXRoIHBhdGhzcGVjJyAnCisJPmZvbyAmJgorCT5iYXIgJiYKKwlnaXQgc3Rhc2ggcHVzaCAtLWluY2x1ZGUtdW50cmFja2VkIC0tIGZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIGJhciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZvbyAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBiYXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggcHVzaCB3aXRoICRJRlMgY2hhcmFjdGVyJyAnCisJPiJmb28gYmFyIiAmJgorCT5mb28gJiYKKwk+YmFyICYmCisJZ2l0IGFkZCBmb28qICYmCisJZ2l0IHN0YXNoIHB1c2ggLS1pbmNsdWRlLXVudHJhY2tlZCAtLSAiZm9vIGIqIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICJmb28gYmFyIiAmJgorCXRlc3RfcGF0aF9pc19maWxlIGZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIGJhciAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiZm9vIGJhciIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBiYXIKKycKKworY2F0ID4gLmdpdGlnbm9yZSA8PEVPRgoraWdub3JlZAoraWdub3JlZC5kLyoKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBwcmV2aW91c2x5IGlnbm9yZWQgZmlsZScgJworCWdpdCByZXNldCBIRUFEICYmCisJZ2l0IGFkZCAuZ2l0aWdub3JlICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIC5naXRpZ25vcmUiICYmCisJPmlnbm9yZWQuZC9mb28gJiYKKwllY2hvICIhaWdub3JlZC5kL2ZvbyIgPj4gLmdpdGlnbm9yZSAmJgorCWdpdCBzdGFzaCBzYXZlIC0taW5jbHVkZS11bnRyYWNrZWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBpZ25vcmVkLmQvZm9vICYmCisJZ2l0IHN0YXNoIHBvcCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGlnbm9yZWQuZC9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLXUgLS0gPHVudHJhY2tlZD4gZG9lc250IHByaW50IGVycm9yJyAnCisJPnVudHJhY2tlZCAmJgorCWdpdCBzdGFzaCBwdXNoIC11IC0tIHVudHJhY2tlZCAyPmFjdHVhbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHVudHJhY2tlZCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC11IC0tIDx1bnRyYWNrZWQ+IGxlYXZlcyByZXN0IG9mIHdvcmtpbmcgdHJlZSBpbiBwbGFjZScgJworCT50cmFja2VkICYmCisJZ2l0IGFkZCB0cmFja2VkICYmCisJPnVudHJhY2tlZCAmJgorCWdpdCBzdGFzaCBwdXNoIC11IC0tIHVudHJhY2tlZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHVudHJhY2tlZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLXUgLS0gPHRyYWNrZWQ+IDx1bnRyYWNrZWQ+IGNsZWFycyBjaGFuZ2VzIGluIGJvdGgnICcKKwk+dHJhY2tlZCAmJgorCWdpdCBhZGQgdHJhY2tlZCAmJgorCT51bnRyYWNrZWQgJiYKKwlnaXQgc3Rhc2ggcHVzaCAtdSAtLSB0cmFja2VkIHVudHJhY2tlZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRyYWNrZWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB1bnRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLS1hbGwgLS0gPGlnbm9yZWQ+IHN0YXNoZXMgaWdub3JlZCBmaWxlJyAnCisJPmlnbm9yZWQuZC9iYXIgJiYKKwlnaXQgc3Rhc2ggcHVzaCAtLWFsbCAtLSBpZ25vcmVkLmQvYmFyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgaWdub3JlZC5kL2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCAtLWFsbCAtLSA8dHJhY2tlZD4gPGlnbm9yZWQ+IGNsZWFycyBjaGFuZ2VzIGluIGJvdGgnICcKKwk+dHJhY2tlZCAmJgorCWdpdCBhZGQgdHJhY2tlZCAmJgorCT5pZ25vcmVkLmQvYmFyICYmCisJZ2l0IHN0YXNoIHB1c2ggLS1hbGwgLS0gdHJhY2tlZCBpZ25vcmVkLmQvYmFyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdHJhY2tlZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGlnbm9yZWQuZC9iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLXUgLS0gPGlnbm9yZWQ+IGxlYXZlcyBpZ25vcmVkIGZpbGUgYWxvbmUnICcKKwk+aWdub3JlZC5kL2JhciAmJgorCWdpdCBzdGFzaCBwdXNoIC11IC0tIGlnbm9yZWQuZC9iYXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBpZ25vcmVkLmQvYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC11IC0tIDxub24tZXhpc3RlbnQ+IHNob3dzIG5vIGNoYW5nZXMgd2hlbiB0aGVyZSBhcmUgbm9uZScgJworCWdpdCBzdGFzaCBwdXNoIC11IC0tIG5vbi1leGlzdGVudCA+YWN0dWFsICYmCisJZWNobyAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIiA+ZXhwZWN0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLXUgd2l0aCBnbG9icycgJworCT51bnRyYWNrZWQudHh0ICYmCisJZ2l0IHN0YXNoIC11IC0tICI6KGdsb2IpKiovKi50eHQiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdW50cmFja2VkLnR4dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDYtc3Rhc2gtc3VibW9kdWxlLnNoIGIvdC90MzkwNi1zdGFzaC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjkzZDFkNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDYtc3Rhc2gtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsNjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzdGFzaCBjYW4gaGFuZGxlIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItc3VibW9kdWxlLXVwZGF0ZS5zaAorCitnaXRfc3Rhc2ggKCkgeworCWdpdCBzdGF0dXMgLXN1ID5leHBlY3QgJiYKKwlscyAtMXBSICogPj5leHBlY3QgJiYKKwlnaXQgcmVhZC10cmVlIC11IC1tICIkMSIgJiYKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgc3RhdHVzIC1zdSA+YWN0dWFsICYmCisJbHMgLTFwUiAqID4+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBzdGFzaCBhcHBseQorfQorCitLTk9XTl9GQUlMVVJFX1NUQVNIX0RPRVNfSUdOT1JFX1NVQk1PRFVMRV9DSEFOR0VTPTEKK0tOT1dOX0ZBSUxVUkVfQ0hFUlJZX1BJQ0tfU0VFU19FTVBUWV9DT01NSVQ9MQorS05PV05fRkFJTFVSRV9OT0ZGX01FUkdFX0RPRVNOVF9DUkVBVEVfRU1QVFlfU1VCTU9EVUxFX0RJUj0xCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdF9zdGFzaCIKKworc2V0dXBfYmFzaWMgKCkgeworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG1haW4gc3ViIiAmJgorCWdpdCBpbml0IHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCXRlc3RfY29tbWl0IHN1Yl9maWxlCisJKSAmJgorCWdpdCBpbml0IG1haW4gJiYKKwkoCisJCWNkIG1haW4gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3ViICYmCisJCXRlc3RfY29tbWl0IG1haW5fZmlsZQorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggcHVzaCB3aXRoIHN1Ym1vZHVsZS5yZWN1cnNlPXRydWUgcHJlc2VydmVzIGRpcnR5IHN1Ym1vZHVsZSB3b3JrdHJlZScgJworCXNldHVwX2Jhc2ljICYmCisJKAorCQljZCBtYWluICYmCisJCWdpdCBjb25maWcgc3VibW9kdWxlLnJlY3Vyc2UgdHJ1ZSAmJgorCQllY2hvICJ4IiA+bWFpbl9maWxlLnQgJiYKKwkJZWNobyAieSIgPnN1Yi9zdWJfZmlsZS50ICYmCisJCWdpdCBzdGFzaCBwdXNoICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdWIgZGlmZiAtLXF1aWV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBwdXNoIGFuZCBwb3Agd2l0aCBzdWJtb2R1bGUucmVjdXJzZT10cnVlIHByZXNlcnZlcyBkaXJ0eSBzdWJtb2R1bGUgd29ya3RyZWUnICcKKwlzZXR1cF9iYXNpYyAmJgorCSgKKwkJY2QgbWFpbiAmJgorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS5yZWN1cnNlIHRydWUgJiYKKwkJZWNobyAieCIgPm1haW5fZmlsZS50ICYmCisJCWVjaG8gInkiID5zdWIvc3ViX2ZpbGUudCAmJgorCQlnaXQgc3Rhc2ggcHVzaCAmJgorCQlnaXQgc3Rhc2ggcG9wICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdWIgZGlmZiAtLXF1aWV0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDctc3Rhc2gtc2hvdy1jb25maWcuc2ggYi90L3QzOTA3LXN0YXNoLXNob3ctY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwOTE0YmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTA3LXN0YXNoLXNob3ctY29uZmlnLnNoCkBAIC0wLDAgKzEsODMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdCBzdGFzaCBzaG93IGNvbmZpZ3VyYXRpb24uJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBmaWxlCisnCisKKyMgdGFrZXMgdGhyZWUgcGFyYW1ldGVyczoKKyMgMS4gdGhlIHN0YXNoLnNob3dTdGF0IHZhbHVlIChvciAiPHVuc2V0PiIpCisjIDIuIHRoZSBzdGFzaC5zaG93UGF0Y2ggdmFsdWUgKG9yICI8dW5zZXQ+IikKKyMgMy4gdGhlIGRpZmYgb3B0aW9ucyBvZiB0aGUgZXhwZWN0ZWQgb3V0cHV0IChvciBub3RoaW5nIGZvciBubyBvdXRwdXQpCit0ZXN0X3N0YXRfYW5kX3BhdGNoICgpIHsKKwlpZiB0ZXN0ICI8dW5zZXQ+IiA9ICIkMSIKKwl0aGVuCisJCXRlc3RfdW5jb25maWcgc3Rhc2guc2hvd1N0YXQKKwllbHNlCisJCXRlc3RfY29uZmlnIHN0YXNoLnNob3dTdGF0ICIkMSIKKwlmaSAmJgorCisJaWYgdGVzdCAiPHVuc2V0PiIgPSAiJDIiCisJdGhlbgorCQl0ZXN0X3VuY29uZmlnIHN0YXNoLnNob3dQYXRjaAorCWVsc2UKKwkJdGVzdF9jb25maWcgc3Rhc2guc2hvd1BhdGNoICIkMiIKKwlmaSAmJgorCisJc2hpZnQgMiAmJgorCWVjaG8gMiA+ZmlsZS50ICYmCisJaWYgdGVzdCAkIyAhPSAwCisJdGhlbgorCQlnaXQgZGlmZiAiJEAiID5leHBlY3QKKwlmaSAmJgorCWdpdCBzdGFzaCAmJgorCWdpdCBzdGFzaCBzaG93ID5hY3R1YWwgJiYKKworCWlmIHRlc3QgJCMgPSAwCisJdGhlbgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisJZWxzZQorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJZmkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd1N0YXQgdW5zZXQgc2hvd1BhdGNoIHVuc2V0JyAnCisJdGVzdF9zdGF0X2FuZF9wYXRjaCAiPHVuc2V0PiIgIjx1bnNldD4iIC0tc3RhdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93U3RhdCB1bnNldCBzaG93UGF0Y2ggZmFsc2UnICcKKwl0ZXN0X3N0YXRfYW5kX3BhdGNoICI8dW5zZXQ+IiBmYWxzZSAtLXN0YXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd1N0YXQgdW5zZXQgc2hvd1BhdGNoIHRydWUnICcKKwl0ZXN0X3N0YXRfYW5kX3BhdGNoICI8dW5zZXQ+IiB0cnVlIC0tc3RhdCAtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93U3RhdCBmYWxzZSBzaG93UGF0Y2ggdW5zZXQnICcKKwl0ZXN0X3N0YXRfYW5kX3BhdGNoIGZhbHNlICI8dW5zZXQ+IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93U3RhdCBmYWxzZSBzaG93UGF0Y2ggZmFsc2UnICcKKwl0ZXN0X3N0YXRfYW5kX3BhdGNoIGZhbHNlIGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dTdGF0IGZhbHNlIHNob3dQYXRjaCB0cnVlJyAnCisJdGVzdF9zdGF0X2FuZF9wYXRjaCBmYWxzZSB0cnVlIC1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dTdGF0IHRydWUgc2hvd1BhdGNoIHVuc2V0JyAnCisJdGVzdF9zdGF0X2FuZF9wYXRjaCB0cnVlICI8dW5zZXQ+IiAtLXN0YXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd1N0YXQgdHJ1ZSBzaG93UGF0Y2ggZmFsc2UnICcKKwl0ZXN0X3N0YXRfYW5kX3BhdGNoIHRydWUgZmFsc2UgLS1zdGF0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dTdGF0IHRydWUgc2hvd1BhdGNoIHRydWUnICcKKwl0ZXN0X3N0YXRfYW5kX3BhdGNoIHRydWUgdHJ1ZSAtLXN0YXQgLXAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTA4LXN0YXNoLWluLXdvcmt0cmVlLnNoIGIvdC90MzkwOC1zdGFzaC1pbi13b3JrdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYjJiMzY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwOC1zdGFzaC1pbi13b3JrdHJlZS5zaApAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE5IEpvaGFubmVzIEUgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdCBzdGFzaCBpbiBhIHdvcmt0cmVlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0aWFsICYmCisJZ2l0IHdvcmt0cmVlIGFkZCB3dCAmJgorCXRlc3RfY29tbWl0IC1DIHd0IGluLXdvcmt0cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGluIHN1YmRpcmVjdG9yeScgJworCW1rZGlyIHd0L3N1YmRpciAmJgorCSgKKwkJY2Qgd3Qvc3ViZGlyICYmCisJCWVjaG8gbW9kaWZpZWQgPi4uL2luaXRpYWwudCAmJgorCQlnaXQgc3Rhc2ggJiYKKwkJZ2l0IHN0YXNoIGFwcGx5ID5vdXQKKwkpICYmCisJZ3JlcCAiXC5cLlwvaW5pdGlhbFwudCIgd3Qvc3ViZGlyL291dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDktc3Rhc2gtcGF0aHNwZWMtZmlsZS5zaCBiL3QvdDM5MDktc3Rhc2gtcGF0aHNwZWMtZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NWUwNTBjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwOS1zdGFzaC1wYXRoc3BlYy1maWxlLnNoCkBAIC0wLDAgKzEsMTAwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc3Rhc2ggLS1wYXRoc3BlYy1mcm9tLWZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3RpY2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJPmZpbGVBLnQgJiYKKwk+ZmlsZUIudCAmJgorCT5maWxlQy50ICYmCisJPmZpbGVELnQgJiYKKwlnaXQgYWRkIGZpbGVBLnQgZmlsZUIudCBmaWxlQy50IGZpbGVELnQgJiYKKwlnaXQgY29tbWl0IC1tICJGaWxlcyIgJiYKKworCWdpdCB0YWcgY2hlY2twb2ludAorJworCityZXN0b3JlX2NoZWNrcG9pbnQgKCkgeworCWdpdCByZXNldCAtLWhhcmQgY2hlY2twb2ludAorfQorCit2ZXJpZnlfZXhwZWN0ICgpIHsKKwlnaXQgc3Rhc2ggc2hvdyAtLW5hbWUtc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZXN0JyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwkjIE1vcmUgZmlsZXMgYXJlIHdyaXR0ZW4gdG8gbWFrZSBzdXJlIHRoYXQgZ2l0IGRpZG50IGlnbm9yZQorCSMgLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHN0YXNoaW5nIGV2ZXJ5dGhpbmcKKwllY2hvIEEgPmZpbGVBLnQgJiYKKwllY2hvIEIgPmZpbGVCLnQgJiYKKwllY2hvIEMgPmZpbGVDLnQgJiYKKwllY2hvIEQgPmZpbGVELnQgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlNCWZpbGVBLnQKKwlFT0YKKworCWVjaG8gZmlsZUEudCB8IGdpdCBzdGFzaCBwdXNoIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gJiYKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcGF0aHNwZWMtZmlsZS1udWwnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCSMgTW9yZSBmaWxlcyBhcmUgd3JpdHRlbiB0byBtYWtlIHN1cmUgdGhhdCBnaXQgZGlkbnQgaWdub3JlCisJIyAtLXBhdGhzcGVjLWZyb20tZmlsZSwgc3Rhc2hpbmcgZXZlcnl0aGluZworCWVjaG8gQSA+ZmlsZUEudCAmJgorCWVjaG8gQiA+ZmlsZUIudCAmJgorCWVjaG8gQyA+ZmlsZUMudCAmJgorCWVjaG8gRCA+ZmlsZUQudCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU0JZmlsZUEudAorCU0JZmlsZUIudAorCUVPRgorCisJcHJpbnRmICJmaWxlQS50XDBmaWxlQi50XDAiIHwgZ2l0IHN0YXNoIHB1c2ggLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtLXBhdGhzcGVjLWZpbGUtbnVsICYmCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmx5IHRvdWNoZXMgd2hhdCB3YXMgbGlzdGVkJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwkjIE1vcmUgZmlsZXMgYXJlIHdyaXR0ZW4gdG8gbWFrZSBzdXJlIHRoYXQgZ2l0IGRpZG50IGlnbm9yZQorCSMgLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHN0YXNoaW5nIGV2ZXJ5dGhpbmcKKwllY2hvIEEgPmZpbGVBLnQgJiYKKwllY2hvIEIgPmZpbGVCLnQgJiYKKwllY2hvIEMgPmZpbGVDLnQgJiYKKwllY2hvIEQgPmZpbGVELnQgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlNCWZpbGVCLnQKKwlNCWZpbGVDLnQKKwlFT0YKKworCXByaW50ZiAiZmlsZUIudFxuZmlsZUMudFxuIiB8IGdpdCBzdGFzaCBwdXNoIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gJiYKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIGNvbmRpdGlvbnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKwllY2hvIEEgPmZpbGVBLnQgJiYKKwllY2hvIGZpbGVBLnQgPmxpc3QgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBwdXNoIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1wYXRjaCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHB1c2ggLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtLSBmaWxlQS50IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBwdXNoIC0tcGF0aHNwZWMtZmlsZS1udWwgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTEwLW1hYy1vcy1wcmVjb21wb3NlLnNoIGIvdC90MzkxMC1tYWMtb3MtcHJlY29tcG9zZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NGNlMTllCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzkxMC1tYWMtb3MtcHJlY29tcG9zZS5zaApAQCAtMCwwICsxLDIwNCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBUb3JzdGVuIELDtmdlcnNoYXVzZW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndXRmLTggZGVjb21wb3NlZCAobmZkKSBjb252ZXJ0ZWQgdG8gcHJlY29tcG9zZWQgKG5mYyknCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgVVRGOF9ORkRfVE9fTkZDCit0aGVuCisJc2tpcF9hbGw9ImZpbGVzeXN0ZW0gZG9lcyBub3QgY29ycnVwdCB1dGYtOCIKKwl0ZXN0X2RvbmUKK2ZpCisKKyMgY3JlYXRlIHV0Zi04IHZhcmlhYmxlcworQWRpYXJuZmM9JChwcmludGYgJ1wzMDNcMjA0JykKK0FkaWFybmZkPSQocHJpbnRmICdBXDMxNFwyMTAnKQorCitPZGlhcm5mYz0kKHByaW50ZiAnXDMwM1wyMjYnKQorT2RpYXJuZmQ9JChwcmludGYgJ09cMzE0XDIxMCcpCitBRWxpZ2F0dT0kKHByaW50ZiAnXDMwM1wyMDYnKQorSW52YWxpZHU9JChwcmludGYgJ1wzMDNcMzc3JykKKworCisjQ3JlYXRlIGEgc3RyaW5nIHdpdGggMjU1IGJ5dGVzIChkZWNvbXBvc2VkKQorQWxvbmdkPSRBZGlhcm5mZCRBZGlhcm5mZCRBZGlhcm5mZCRBZGlhcm5mZCRBZGlhcm5mZCRBZGlhcm5mZCRBZGlhcm5mZCAjMjEgQnl0ZQorQWxvbmdkPSRBbG9uZ2QkQWxvbmdkJEFsb25nZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjNjMgQnl0ZQorQWxvbmdkPSRBbG9uZ2QkQWxvbmdkJEFsb25nZCRBbG9uZ2QkQWRpYXJuZmQgICAgICAgICAgICAgICAgICAgICAgICAgICAjMjU1IEJ5dGUKKworI0NyZWF0ZSBhIHN0cmluZyB3aXRoIDI1NCBieXRlcyAocHJlY29tcG9zZWQpCitBbG9uZ2M9JEFFbGlnYXR1JEFFbGlnYXR1JEFFbGlnYXR1JEFFbGlnYXR1JEFFbGlnYXR1ICMxMCBCeXRlCitBbG9uZ2M9JEFsb25nYyRBbG9uZ2MkQWxvbmdjJEFsb25nYyRBbG9uZ2MgICAgICAgICAgICM1MCBCeXRlCitBbG9uZ2M9JEFsb25nYyRBbG9uZ2MkQWxvbmdjJEFsb25nYyRBbG9uZ2MgICAgICAgICAgICMyNTAgQnl0ZQorQWxvbmdjPSRBbG9uZ2MkQUVsaWdhdHUkQUVsaWdhdHUgICAgICAgICAgICAgICAgICAgICAjMjU0IEJ5dGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGV0ZWN0IGlmIG5mZCBuZWVkZWQiICcKKwlwcmVjb21wb3NldW5pY29kZT0kKGdpdCBjb25maWcgY29yZS5wcmVjb21wb3NldW5pY29kZSkgJiYKKwl0ZXN0ICIkcHJlY29tcG9zZXVuaWNvZGUiID0gdHJ1ZSAmJgorCWdpdCBjb25maWcgY29yZS5wcmVjb21wb3NldW5pY29kZSB0cnVlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCIgJworCT54ICYmCisJZ2l0IGFkZCB4ICYmCisJZ2l0IGNvbW1pdCAtbSAiMXN0IGNvbW1pdCIgJiYKKwlnaXQgcm0geCAmJgorCWdpdCBjb21taXQgLW0gInJtIHgiCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCBjYXNlIG1hYyIgJworCWdpdCBjaGVja291dCAtYiBtYWNfb3MKKycKKyMgVGhpcyB3aWxsIHRlc3QgbmZkMm5mYyBpbiBnaXQgZGlmZgordGVzdF9leHBlY3Rfc3VjY2VzcyAiZ2l0IGRpZmYgZi5BZGlhciIgJworCXRvdWNoIGYuJEFkaWFybmZjICYmCisJZ2l0IGFkZCBmLiRBZGlhcm5mYyAmJgorCWVjaG8gZi5BZGlhcm5mYyA+Zi4kQWRpYXJuZmMgJiYKKwlnaXQgZGlmZiBmLiRBZGlhcm5mZCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYgZi4kQWRpYXJuZmMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmVzZXQgSEVBRCBmLkFkaWFybmZjICYmCisJcm0gZi4kQWRpYXJuZmMgZXhwZWN0IGFjdHVhbAorJworIyBUaGlzIHdpbGwgdGVzdCBuZmQybmZjIGluIGdpdCBkaWZmLWZpbGVzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQgZGlmZi1maWxlcyBmLkFkaWFyIiAnCisJdG91Y2ggZi4kQWRpYXJuZmMgJiYKKwlnaXQgYWRkIGYuJEFkaWFybmZjICYmCisJZWNobyBmLkFkaWFybmZjID5mLiRBZGlhcm5mYyAmJgorCWdpdCBkaWZmLWZpbGVzIGYuJEFkaWFybmZkID5leHBlY3QgJiYKKwlnaXQgZGlmZi1maWxlcyBmLiRBZGlhcm5mYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXNldCBIRUFEIGYuQWRpYXJuZmMgJiYKKwlybSBmLiRBZGlhcm5mYyBleHBlY3QgYWN0dWFsCisnCisjIFRoaXMgd2lsbCB0ZXN0IG5mZDJuZmMgaW4gZ2l0IGRpZmYtaW5kZXgKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCBkaWZmLWluZGV4IGYuQWRpYXIiICcKKwl0b3VjaCBmLiRBZGlhcm5mYyAmJgorCWdpdCBhZGQgZi4kQWRpYXJuZmMgJiYKKwllY2hvIGYuQWRpYXJuZmMgPmYuJEFkaWFybmZjICYmCisJZ2l0IGRpZmYtaW5kZXggSEVBRCBmLiRBZGlhcm5mZCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYtaW5kZXggSEVBRCBmLiRBZGlhcm5mYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXNldCBIRUFEIGYuQWRpYXJuZmMgJiYKKwlybSBmLiRBZGlhcm5mYyBleHBlY3QgYWN0dWFsCisnCisjIFRoaXMgd2lsbCB0ZXN0IG5mZDJuZmMgaW4gcmVhZGRpcigpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJhZGQgZmlsZSBBZGlhcm5mYyIgJworCWVjaG8gZi5BZGlhcm5mYyA+Zi4kQWRpYXJuZmMgJiYKKwlnaXQgYWRkIGYuJEFkaWFybmZjICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGYuJEFkaWFybmZjIgorJworIyBUaGlzIHdpbGwgdGVzdCBuZmQybmZjIGluIGdpdCBkaWZmLXRyZWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCBkaWZmLXRyZWUgZi5BZGlhciIgJworCWVjaG8gZi5BZGlhcm5mYyA+PmYuJEFkaWFybmZjICYmCisJZ2l0IGRpZmYtdHJlZSBIRUFEIGYuJEFkaWFybmZkID5leHBlY3QgJiYKKwlnaXQgZGlmZi10cmVlIEhFQUQgZi4kQWRpYXJuZmMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgY2hlY2tvdXQgZi4kQWRpYXJuZmMgJiYKKwlybSBleHBlY3QgYWN0dWFsCisnCisjIFRoaXMgd2lsbCB0ZXN0IG5mZDJuZmMgaW4gZ2l0IHN0YWdlKCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInN0YWdlIGZpbGUgZC5BZGlhcm5mZC9mLkFkaWFybmZkIiAnCisJbWtkaXIgZC4kQWRpYXJuZmQgJiYKKwllY2hvIGQuJEFkaWFybmZkL2YuJEFkaWFybmZkID5kLiRBZGlhcm5mZC9mLiRBZGlhcm5mZCAmJgorCWdpdCBzdGFnZSBkLiRBZGlhcm5mZC9mLiRBZGlhcm5mZCAmJgorCWdpdCBjb21taXQgLW0gImFkZCBkLiRBZGlhcm5mZC9mLiRBZGlhcm5mZCIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImFkZCBsaW5rIEFkaWFybmZjIiAnCisJbG4gLXMgZC4kQWRpYXJuZmQvZi4kQWRpYXJuZmQgbC4kQWRpYXJuZmMgJiYKKwlnaXQgYWRkIGwuJEFkaWFybmZjICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGwuQWRpYXJuZmMiCisnCisjIFRoaXMgd2lsbCB0ZXN0IGdpdCBsb2cKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCBsb2cgZi5BZGlhciIgJworCWdpdCBsb2cgZi4kQWRpYXJuZmMgPiBmLkFkaWFybmZjLmxvZyAmJgorCWdpdCBsb2cgZi4kQWRpYXJuZmQgPiBmLkFkaWFybmZkLmxvZyAmJgorCXRlc3QgLXMgZi5BZGlhcm5mYy5sb2cgJiYKKwl0ZXN0IC1zIGYuQWRpYXJuZmQubG9nICYmCisJdGVzdF9jbXAgZi5BZGlhcm5mYy5sb2cgZi5BZGlhcm5mZC5sb2cgJiYKKwlybSBmLkFkaWFybmZjLmxvZyBmLkFkaWFybmZkLmxvZworJworIyBUaGlzIHdpbGwgdGVzdCBnaXQgbHMtZmlsZXMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCBsc2ZpbGVzIGYuQWRpYXIiICcKKwlnaXQgbHMtZmlsZXMgZi4kQWRpYXJuZmMgPiBmLkFkaWFybmZjLmxvZyAmJgorCWdpdCBscy1maWxlcyBmLiRBZGlhcm5mZCA+IGYuQWRpYXJuZmQubG9nICYmCisJdGVzdCAtcyBmLkFkaWFybmZjLmxvZyAmJgorCXRlc3QgLXMgZi5BZGlhcm5mZC5sb2cgJiYKKwl0ZXN0X2NtcCBmLkFkaWFybmZjLmxvZyBmLkFkaWFybmZkLmxvZyAmJgorCXJtIGYuQWRpYXJuZmMubG9nIGYuQWRpYXJuZmQubG9nCisnCisjIFRoaXMgd2lsbCB0ZXN0IGdpdCBtdgordGVzdF9leHBlY3Rfc3VjY2VzcyAiZ2l0IG12IiAnCisJZ2l0IG12IGYuJEFkaWFybmZkIGYuJE9kaWFybmZjICYmCisJZ2l0IG12IGQuJEFkaWFybmZkIGQuJE9kaWFybmZjICYmCisJZ2l0IG12IGwuJEFkaWFybmZkIGwuJE9kaWFybmZjICYmCisJZ2l0IGNvbW1pdCAtbSAibXYgQWRpYXJuZmQgT2RpYXJuZmMiCisnCisjIEZpbGVzIGNhbiBiZSBjaGVja2VkIG91dCBhcyBuZmMKKyMgQW5kIHRoZSBsaW5rIGhhcyBiZWVuIGNvcnJlY3RlZCBmcm9tIG5mZCB0byBuZmMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCBjaGVja291dCBuZmMiICcKKwlybSBmLiRPZGlhcm5mYyAmJgorCWdpdCBjaGVja291dCBmLiRPZGlhcm5mYworJworIyBNYWtlIGl0IHBvc3NpYmxlIHRvIGNoZWNrb3V0IGZpbGVzIHdpdGggdGhlaXIgTkZEIG5hbWVzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQgY2hlY2tvdXQgZmlsZSBuZmQiICcKKwlybSAtZiBmLiogJiYKKwlnaXQgY2hlY2tvdXQgZi4kT2RpYXJuZmQKKycKKyMgTWFrZSBpdCBwb3NzaWJsZSB0byBjaGVja291dCBsaW5rcyB3aXRoIHRoZWlyIE5GRCBuYW1lcwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZ2l0IGNoZWNrb3V0IGxpbmsgbmZkIiAnCisJcm0gbC4qICYmCisJZ2l0IGNoZWNrb3V0IGwuJE9kaWFybmZkCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCBjYXNlIG1hYzIiICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBtYWNfb3NfMgorJworIyBUaGlzIHdpbGwgdGVzdCBuZmQybmZjIGluIGdpdCBjb21taXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbW1pdCBmaWxlIGQyLkFkaWFybmZkL2YuQWRpYXJuZmQiICcKKwlta2RpciBkMi4kQWRpYXJuZmQgJiYKKwllY2hvIGQyLiRBZGlhcm5mZC9mLiRBZGlhcm5mZCA+ZDIuJEFkaWFybmZkL2YuJEFkaWFybmZkICYmCisJZ2l0IGFkZCBkMi4kQWRpYXJuZmQvZi4kQWRpYXJuZmQgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZDIuJEFkaWFybmZkL2YuJEFkaWFybmZkIiAtLSBkMi4kQWRpYXJuZmQvZi4kQWRpYXJuZmQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIGZvciBsb25nIGRlY29tcG9zZWQgZmlsZW5hbWUiICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBtYWNfb3NfbG9uZ19uZmRfZm4KKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIkFkZCBsb25nIGRlY29tcG9zZWQgZmlsZW5hbWUiICcKKwllY2hvIGxvbmdkID4kQWxvbmdkICYmCisJZ2l0IGFkZCAqICYmCisJZ2l0IGNvbW1pdCAtbSAiTG9uZyBmaWxlbmFtZSIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIGZvciBsb25nIHByZWNvbXBvc2VkIGZpbGVuYW1lIiAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFjX29zX2xvbmdfbmZjX2ZuCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJBZGQgbG9uZyBwcmVjb21wb3NlZCBmaWxlbmFtZSIgJworCWVjaG8gbG9uZ2MgPiRBbG9uZ2MgJiYKKwlnaXQgYWRkICogJiYKKwlnaXQgY29tbWl0IC1tICJMb25nIGZpbGVuYW1lIgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdoYW5kbGUgZXhpc3RpbmcgZGVjb21wb3NlZCBmaWxlbmFtZXMnICcKKwllY2hvIGNvbnRlbnQgPiJ2ZXJiYXRpbS4kQWRpYXJuZmQiICYmCisJZ2l0IC1jIGNvcmUucHJlY29tcG9zZXVuaWNvZGU9ZmFsc2UgYWRkICJ2ZXJiYXRpbS4kQWRpYXJuZmQiICYmCisJZ2l0IGNvbW1pdCAtbSAiZXhpc3RpbmcgZGVjb21wb3NlZCBmaWxlIiAmJgorCWdpdCBscy1maWxlcyAtLWV4Y2x1ZGUtc3RhbmRhcmQgLW8gInZlcmJhdGltKiIgPnVudHJhY2tlZCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB1bnRyYWNrZWQKKycKKworIyBUZXN0IGlmIHRoZSBnbG9iYWwgY29yZS5wcmVjb21wb3NldW5pY29kZSBzdG9wcyBhdXRvc2Vuc2luZworIyBNdXN0IGJlIHRoZSBsYXN0IHRlc3QgY2FzZQordGVzdF9leHBlY3Rfc3VjY2VzcyAicmVzcGVjdCBnaXQgY29uZmlnIC0tZ2xvYmFsIGNvcmUucHJlY29tcG9zZXVuaWNvZGUiICcKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIGNvcmUucHJlY29tcG9zZXVuaWNvZGUgdHJ1ZSAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKwlwcmVjb21wb3NldW5pY29kZT0kKGdpdCBjb25maWcgY29yZS5wcmVjb21wb3NldW5pY29kZSkgJiYKKwl0ZXN0ICIkcHJlY29tcG9zZXVuaWNvZGUiID0gInRydWUiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwMC1kaWZmLWZvcm1hdC5zaCBiL3QvdDQwMDAtZGlmZi1mb3JtYXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTUxMTZhNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMDAtZGlmZi1mb3JtYXQuc2gKQEAgLTAsMCArMSw5MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGJ1aWx0LWluIGRpZmYgb3V0cHV0IGVuZ2luZS4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCisKK2VjaG8gPnBhdGgwICdMaW5lIDEKK0xpbmUgMgorbGluZSAzJworY2F0IHBhdGgwID5wYXRoMQorY2htb2QgK3ggcGF0aDEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tYWRkIHR3byBmaWxlcyB3aXRoIGFuZCB3aXRob3V0ICt4LicgJworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDAgcGF0aDEKKycKKworbXYgcGF0aDAgcGF0aDAtCitzZWQgLWUgJ3MvbGluZS9MaW5lLycgPHBhdGgwLSA+cGF0aDAKK2NobW9kICt4IHBhdGgwCitybSAtZiBwYXRoMQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtZmlsZXMgLXAgYWZ0ZXIgZWRpdGluZyB3b3JrIHRyZWUuJyAnCisJZ2l0IGRpZmYtZmlsZXMgLXAgPmFjdHVhbAorJworCisjIHRoYXQncyBhcyBmYXIgYXMgaXQgY29tZXMKK2lmIFsgIiQoZ2l0IGNvbmZpZyAtLWdldCBjb3JlLmZpbGVtb2RlKSIgPSBmYWxzZSBdCit0aGVuCisJc2F5ICdmaWxlbW9kZSBkaXNhYmxlZCBvbiB0aGUgZmlsZXN5c3RlbScKKwl0ZXN0X2RvbmUKK2ZpCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitkaWZmIC0tZ2l0IGEvcGF0aDAgYi9wYXRoMAorb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKKy0tLSBhL3BhdGgwCisrKysgYi9wYXRoMAorQEAgLTEsMyArMSwzIEBACisgTGluZSAxCisgTGluZSAyCistbGluZSAzCisrTGluZSAzCitkaWZmIC0tZ2l0IGEvcGF0aDEgYi9wYXRoMQorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CistLS0gYS9wYXRoMQorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistTGluZSAxCistTGluZSAyCistbGluZSAzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgZ2l0IGRpZmYtZmlsZXMgLXAgb3V0cHV0LicgJworCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtZmlsZXMgLXMgYWZ0ZXIgZWRpdGluZyB3b3JrIHRyZWUnICcKKwlnaXQgZGlmZi1maWxlcyAtcyA+YWN0dWFsIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtZmlsZXMgLS1uby1wYXRjaCBhcyBzeW5vbnltIGZvciAtcycgJworCWdpdCBkaWZmLWZpbGVzIC0tbm8tcGF0Y2ggPmFjdHVhbCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWZpbGVzIC0tbm8tcGF0Y2ggLS1wYXRjaCBzaG93cyB0aGUgcGF0Y2gnICcKKwlnaXQgZGlmZi1maWxlcyAtLW5vLXBhdGNoIC0tcGF0Y2ggPmFjdHVhbCAmJgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtZmlsZXMgLS1uby1wYXRjaCAtLXBhdGNoLXdpdGgtcmF3IHNob3dzIHRoZSBwYXRjaCBhbmQgcmF3IGRhdGEnICcKKwlnaXQgZGlmZi1maWxlcyAtLW5vLXBhdGNoIC0tcGF0Y2gtd2l0aC1yYXcgPmFjdHVhbCAmJgorCWdyZXAgLXEgIl46MTAwNjQ0IDEwMDc1NSAuKiAkWkVST19PSUQgTQlwYXRoMFwkIiBhY3R1YWwgJiYKKwl0YWlsIC1uICs0IGFjdHVhbCA+YWN0dWFsLXBhdGNoICYmCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGFjdHVhbC1wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1maWxlcyAtLXBhdGNoIC0tbm8tcGF0Y2ggZG9lcyBub3Qgc2hvdyB0aGUgcGF0Y2gnICcKKwlnaXQgZGlmZi1maWxlcyAtLXBhdGNoIC0tbm8tcGF0Y2ggPmFjdHVhbCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwMS1kaWZmLXJlbmFtZS5zaCBiL3QvdDQwMDEtZGlmZi1yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzE2NDg2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMDEtZGlmZi1yZW5hbWUuc2gKQEAgLTAsMCArMSwyNjUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZW5hbWUgZGV0ZWN0aW9uIGluIGRpZmYgZW5naW5lLgorCisnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgPnBhdGgwIDw8LVxFT0YgJiYKKwlMaW5lIDEKKwlMaW5lIDIKKwlMaW5lIDMKKwlMaW5lIDQKKwlMaW5lIDUKKwlMaW5lIDYKKwlMaW5lIDcKKwlMaW5lIDgKKwlMaW5lIDkKKwlMaW5lIDEwCisJbGluZSAxMQorCUxpbmUgMTIKKwlMaW5lIDEzCisJTGluZSAxNAorCUxpbmUgMTUKKwlFT0YKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvcGF0aDAgYi9wYXRoMQorCXJlbmFtZSBmcm9tIHBhdGgwCisJcmVuYW1lIHRvIHBhdGgxCisJLS0tIGEvcGF0aDAKKwkrKysgYi9wYXRoMQorCUBAIC04LDcgKzgsNyBAQCBMaW5lIDcKKwkgTGluZSA4CisJIExpbmUgOQorCSBMaW5lIDEwCisJLWxpbmUgMTEKKwkrTGluZSAxMQorCSBMaW5lIDEyCisJIExpbmUgMTMKKwkgTGluZSAxNAorCUVPRgorCWNhdCA+bm8tcmVuYW1lIDw8LVxFT0YKKwlkaWZmIC0tZ2l0IGEvcGF0aDAgYi9wYXRoMAorCWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IGZkYmVjNDQuLjAwMDAwMDAKKwktLS0gYS9wYXRoMAorCSsrKyAvZGV2L251bGwKKwlAQCAtMSwxNSArMCwwIEBACisJLUxpbmUgMQorCS1MaW5lIDIKKwktTGluZSAzCisJLUxpbmUgNAorCS1MaW5lIDUKKwktTGluZSA2CisJLUxpbmUgNworCS1MaW5lIDgKKwktTGluZSA5CisJLUxpbmUgMTAKKwktbGluZSAxMQorCS1MaW5lIDEyCisJLUxpbmUgMTMKKwktTGluZSAxNAorCS1MaW5lIDE1CisJZGlmZiAtLWdpdCBhL3BhdGgxIGIvcGF0aDEKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLjc1MmM1MGUKKwktLS0gL2Rldi9udWxsCisJKysrIGIvcGF0aDEKKwlAQCAtMCwwICsxLDE1IEBACisJK0xpbmUgMQorCStMaW5lIDIKKwkrTGluZSAzCisJK0xpbmUgNAorCStMaW5lIDUKKwkrTGluZSA2CisJK0xpbmUgNworCStMaW5lIDgKKwkrTGluZSA5CisJK0xpbmUgMTAKKwkrTGluZSAxMQorCStMaW5lIDEyCisJK0xpbmUgMTMKKwkrTGluZSAxNAorCStMaW5lIDE1CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd1cGRhdGUtaW5kZXggLS1hZGQgYSBmaWxlLicgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnd3JpdGUgdGhhdCB0cmVlLicgXAorICAgICd0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmIGVjaG8gJHRyZWUnCisKK3NlZCAtZSAncy9saW5lL0xpbmUvJyA8cGF0aDAgPnBhdGgxCitybSAtZiBwYXRoMAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3JlbmFtZWQgYW5kIGVkaXRlZCB0aGUgZmlsZS4nIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBwYXRoMCBwYXRoMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBkaWZmLWluZGV4IC1wIC1NIGFmdGVyIHJlbmFtZSBhbmQgZWRpdGluZy4nIFwKKyAgICAnZ2l0IGRpZmYtaW5kZXggLXAgLU0gJHRyZWUgPmN1cnJlbnQnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIHRoZSBvdXRwdXQuJyBcCisgICAgJ2NvbXBhcmVfZGlmZl9wYXRjaCBjdXJyZW50IGV4cGVjdGVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRpZmYucmVuYW1lcz10cnVlJyAnCisJZ2l0IC1jIGRpZmYucmVuYW1lcz10cnVlIGRpZmYgLS1jYWNoZWQgJHRyZWUgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggY3VycmVudCBleHBlY3RlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRpZmYucmVuYW1lcz1mYWxzZScgJworCWdpdCAtYyBkaWZmLnJlbmFtZXM9ZmFsc2UgZGlmZiAtLWNhY2hlZCAkdHJlZSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9wYXRjaCBjdXJyZW50IG5vLXJlbmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRpZmYucmVuYW1lcyB1bnNldCcgJworCWdpdCBkaWZmIC0tY2FjaGVkICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3BhdGNoIGN1cnJlbnQgZXhwZWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmF2b3VyIHNhbWUgYmFzZW5hbWVzIG92ZXIgZGlmZmVyZW50IG9uZXMnICcKKwljcCBwYXRoMSBhbm90aGVyLXBhdGggJiYKKwlnaXQgYWRkIGFub3RoZXItcGF0aCAmJgorCWdpdCBjb21taXQgLW0gMSAmJgorCWdpdCBybSBwYXRoMSAmJgorCW1rZGlyIHN1YmRpciAmJgorCWdpdCBtdiBhbm90aGVyLXBhdGggc3ViZGlyL3BhdGgxICYmCisJZ2l0IHN0YXR1cyA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAicmVuYW1lZDogLipwYXRoMSAtPiBzdWJkaXIvcGF0aDEiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRpZmYucmVuYW1lcz10cnVlIGZvciBnaXQgc3RhdHVzJyAnCisJZ2l0IC1jIGRpZmYucmVuYW1lcz10cnVlIHN0YXR1cyA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAicmVuYW1lZDogLipwYXRoMSAtPiBzdWJkaXIvcGF0aDEiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRpZmYucmVuYW1lcz1mYWxzZSBmb3IgZ2l0IHN0YXR1cycgJworCWdpdCAtYyBkaWZmLnJlbmFtZXM9ZmFsc2Ugc3RhdHVzID5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICEgInJlbmFtZWQ6IC4qcGF0aDEgLT4gc3ViZGlyL3BhdGgxIiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJuZXcgZmlsZTogLipzdWJkaXIvcGF0aDEiIG91dCAmJgorCXRlc3RfaTE4bmdyZXAgImRlbGV0ZWQ6IC4qW14vXXBhdGgxIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmF2b3VyIHNhbWUgYmFzZW5hbWVzIGV2ZW4gd2l0aCBtaW5vciBkaWZmZXJlbmNlcycgJworCWdpdCBzaG93IEhFQUQ6cGF0aDEgfCBzZWQgInMvMTUvMTYvIiA+IHN1YmRpci9wYXRoMSAmJgorCWdpdCBzdGF0dXMgPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgInJlbmFtZWQ6IC4qcGF0aDEgLT4gc3ViZGlyL3BhdGgxIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvIGZpbGVzIHdpdGggc2FtZSBiYXNlbmFtZSBhbmQgc2FtZSBjb250ZW50JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCW1rZGlyIC1wIGRpci9BIGRpci9CICYmCisJY3AgcGF0aDEgZGlyL0EvZmlsZSAmJgorCWNwIHBhdGgxIGRpci9CL2ZpbGUgJiYKKwlnaXQgYWRkIGRpciAmJgorCWdpdCBjb21taXQgLW0gMiAmJgorCWdpdCBtdiBkaXIgb3RoZXItZGlyICYmCisJZ2l0IHN0YXR1cyA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAicmVuYW1lZDogLipkaXIvQS9maWxlIC0+IG90aGVyLWRpci9BL2ZpbGUiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgbWFueSByZW5hbWUgc291cmNlIGNhbmRpZGF0ZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsKKwlkbworCQlmb3IgaiBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OworCQlkbworCQkJZWNobyAiJGkkaiIgPiJwYXRoJGkkaiIKKwkJZG9uZQorCWRvbmUgJiYKKwlnaXQgYWRkICJwYXRoPz8iICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiaHVuZHJlZCIgJiYKKwkoY2F0IHBhdGgxICYmIGVjaG8gbmV3KSA+bmV3LXBhdGggJiYKKwllY2hvIG9sZCA+PnBhdGgxICYmCisJZ2l0IGFkZCBuZXctcGF0aCBwYXRoMSAmJgorCWdpdCBkaWZmIC1sIDQgLUMgLUMgLS1jYWNoZWQgLS1uYW1lLXN0YXR1cyA+YWN0dWFsIDI+YWN0dWFsLmVyciAmJgorCXNlZCAtZSAicy9eXChbQ01dXClbMC05XSoJL1wxCS8iIGFjdHVhbCA+YWN0dWFsLm11bmdlZCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCUMJcGF0aDEJbmV3LXBhdGgKKwlNCXBhdGgxCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5tdW5nZWQgJiYKKwlncmVwIHdhcm5pbmcgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgcHJldHR5IHByaW50IHdpdGggbm90aGluZyBpbiBjb21tb24nICcKKwlta2RpciAtcCBhL2IvICYmCisJOiA+YS9iL2MgJiYKKwlnaXQgYWRkIGEvYi9jICYmCisJZ2l0IGNvbW1pdCAtbSAiY3JlYXRlIGEvYi9jIiAmJgorCW1rZGlyIC1wIGMvYi8gJiYKKwlnaXQgbXYgYS9iL2MgYy9iL2EgJiYKKwlnaXQgY29tbWl0IC1tICJhL2IvYyAtPiBjL2IvYSIgJiYKKwlnaXQgZGlmZiAtTSAtLXN1bW1hcnkgSEVBRF4gSEVBRCA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiIGEvYi9jID0+IGMvYi9hICIgb3V0cHV0ICYmCisJZ2l0IGRpZmYgLU0gLS1zdGF0IEhFQUReIEhFQUQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIiBhL2IvYyA9PiBjL2IvYSAiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgcHJldHR5IHByaW50IHdpdGggY29tbW9uIHByZWZpeCcgJworCW1rZGlyIC1wIGMvZCAmJgorCWdpdCBtdiBjL2IvYSBjL2QvZSAmJgorCWdpdCBjb21taXQgLW0gImMvYi9hIC0+IGMvZC9lIiAmJgorCWdpdCBkaWZmIC1NIC0tc3VtbWFyeSBIRUFEXiBIRUFEID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICIgYy97Yi9hID0+IGQvZX0gIiBvdXRwdXQgJiYKKwlnaXQgZGlmZiAtTSAtLXN0YXQgSEVBRF4gSEVBRCA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiIGMve2IvYSA9PiBkL2V9ICIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBwcmV0dHkgcHJpbnQgd2l0aCBjb21tb24gc3VmZml4JyAnCisJbWtkaXIgZCAmJgorCWdpdCBtdiBjL2QvZSBkL2UgJiYKKwlnaXQgY29tbWl0IC1tICJjL2QvZSAtPiBkL2UiICYmCisJZ2l0IGRpZmYgLU0gLS1zdW1tYXJ5IEhFQUReIEhFQUQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIiB7Yy9kID0+IGR9L2UgIiBvdXRwdXQgJiYKKwlnaXQgZGlmZiAtTSAtLXN0YXQgSEVBRF4gSEVBRCA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiIHtjL2QgPT4gZH0vZSAiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgcHJldHR5IHByaW50IHdpdGggY29tbW9uIHByZWZpeCBhbmQgc3VmZml4JyAnCisJbWtkaXIgZC9mICYmCisJZ2l0IG12IGQvZSBkL2YvZSAmJgorCWdpdCBjb21taXQgLW0gImQvZSAtPiBkL2YvZSIgJiYKKwlnaXQgZGlmZiAtTSAtLXN1bW1hcnkgSEVBRF4gSEVBRCA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiIGQveyA9PiBmfS9lICIgb3V0cHV0ICYmCisJZ2l0IGRpZmYgLU0gLS1zdGF0IEhFQUReIEhFQUQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIiBkL3sgPT4gZn0vZSAiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgcHJldHR5IHByaW50IGNvbW1vbiBwcmVmaXggYW5kIHN1ZmZpeCBvdmVybGFwJyAnCisJbWtkaXIgZC9mL2YgJiYKKwlnaXQgbXYgZC9mL2UgZC9mL2YvZSAmJgorCWdpdCBjb21taXQgLW0gImQvZi9lIGQvZi9mL2UiICYmCisJZ2l0IGRpZmYgLU0gLS1zdW1tYXJ5IEhFQUReIEhFQUQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIiBkL2YveyA9PiBmfS9lICIgb3V0cHV0ICYmCisJZ2l0IGRpZmYgLU0gLS1zdGF0IEhFQUReIEhFQUQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIiBkL2YveyA9PiBmfS9lICIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSAtbDAgZGVmYXVsdHMgdG8gYSBiaWcgcmVuYW1lIGxpbWl0LCBub3QgemVybycgJworCXRlc3Rfd3JpdGVfbGluZXMgbGluZTEgbGluZTIgbGluZTMgPm15ZmlsZSAmJgorCWdpdCBhZGQgbXlmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSB4ICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIGxpbmUxIGxpbmUyIGxpbmU0ID5teW90aGVyZmlsZSAmJgorCWdpdCBybSBteWZpbGUgJiYKKwlnaXQgYWRkIG15b3RoZXJmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSB4ICYmCisKKwlnaXQgZGlmZi10cmVlIC1NIC1sMCBIRUFEIEhFQUReID5hY3R1YWwgJiYKKwkjIFZlcmlmeSB0aGF0IGEgcmVuYW1lIGZyb20gbXlvdGhlcmZpbGUgdG8gbXlmaWxlIHdhcyBkZXRlY3RlZAorCWdyZXAgIm15b3RoZXJmaWxlLipteWZpbGUiIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDItZGlmZi1iYXNpYy5zaCBiL3QvdDQwMDItZGlmZi1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYmNkZDEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAwMi1kaWZmLWJhc2ljLnNoCkBAIC0wLDAgKzEsNDE1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZGlmZiByYXctb3V0cHV0LgorCisnCisuIC4vdGVzdC1saWIuc2gKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmVhZC10cmVlLW0tM3dheS5zaAorCit0ZXN0X29pZF9pbml0CisKK3Rlc3Rfb2lkX2NhY2hlIDw8XEVPRgorYWFfMSBzaGExOmNjYmE3MmFkMzg4OGEzNTIwYjM5ZWZjZjc4MGI5ZWU2NDE2NzUzNWQKK2FhXzEgc2hhMjU2OjlmZWJmYmYxODE5NzgxOWIyNzM1YzQ1MjkxZjEzODUyNWQyNDc2ZDU5NDcwZjk4MjM5NjQ3NTQ0NTg2YmE0MDMKKworYWFfMiBzaGExOjZhYTJiNTMzNWIxNjQzMWEwZWY3MWU1YzBhMjhiZTY5MTgzY2Y2YTIKK2FhXzIgc2hhMjU2OjZlYWEzNDM3ZGU4M2YxNDVhNGFhYTZiYTM1NTMwMzA3NWFkZTU0N2IxMjhlYzZhMmNkMDBhODFmZjdjZTdhNTYKKworYW5fMSBzaGExOjdlNDI2ZmIwNzk0NzlmZDY3ZjZkODFmOTg0ZTRlYzY0OWE0NGJjMjUKK2FuXzEgc2hhMjU2OjhmOTJhMGJlYzk5ZTM5OWEzOGUzYmQwZTFiZjE5ZmJmMTIxZTAxNjBlZmIyOWI4NTdkZjc5ZDQzOWYxYzQ1MzYKKworZGRfMSBzaGExOmJjYzY4ZWY5OTcwMTc0NjZkNWM5MDk0YmNmNzY5MjI5NWY1ODhjOWEKK2RkXzEgc2hhMjU2OjA3ZTE3NDI4YjAwNjM5Yjg1NDg1ZDJiMDEwODNkMjE5ZTJmM2UzYmE4NTc5ZTljYTQ0ZTljYzhkZDU1NGQ5NTIKKworZGZfMSBzaGExOjZkNTBmNjVkM2JkYWI5MWM2MzQ0NDI5NGQzOGYwOGFlZmYzMjhlNDIKK2RmXzEgc2hhMjU2OmUzNjdjZWNjMjdlOWJmNTQ1MWIxYzY1ODI4Y2IyMTkzOGQzNmE1ZjhlMzljMWIwM2FkNjUwOWNjMzZiYjhlOWQKKworZGZfMiBzaGExOjcxNDIwYWI4MWUyNTQxNDVkMjZkNmZjMGNkZGVlNjRjMWFjZDQ3ODcKK2RmXzIgc2hhMjU2OjBmMGE4NmQxMDM0N2ZmNjkyMWQwM2EzYzk1NDY3OWYzZjFkMTRmYTNkNWNkODJmNTdiMzJjMDk3NTVmM2E0N2QKKworZGZkMSBzaGExOjY4YTZkOGI5MWRhMTEwNDVjZjRhYTNhNWFiOWYyYTc4MWM3MDEyNDkKK2RmZDEgc2hhMjU2OmYzYmQzMjY1YjAyYjY5NzhjZTg2NDkwZDhhZDAyNmM1NzM2MzljOTc0YjNkZTFkOWZhZjMwZDhkNWE3N2QzZDUKKworZG1fMSBzaGExOjE0MWMxZjE2NDIzMjhlNGJjNDZhN2Q4MDFhNzFkYTM5MmU2Njc5MWUKK2RtXzEgc2hhMjU2OmM4OWY4NjU2ZTdiOTRlMjFlZTVmYmFmMGUyMTQ5YmJmNzgzYzUxZWRiZTJjZTExMDM0OWNhYzEzMDU5ZWU3ZWQKKworZG1fMiBzaGExOjNjNGQ4ZGU1ZmJhZDA4NTcyYmFiOGUxMGVlZjhkYmIyNjRjZjAyMzEKK2RtXzIgc2hhMjU2OjgzYTU3MmUzN2UwYzk0MDg2Mjk0ZGFlMmNlY2M0M2Q5MTMxYWZkNmY2YzkwNmU0OTVjNzg5NzIyMzBiNTQ5ODgKKworZG5fMSBzaGExOjM1YWJkZTE1MDZkZGY4MDY1NzJmZjRkNDA3YmQwNjg4NWQwZjhlZTkKK2RuXzEgc2hhMjU2Ojc3NWQ1ODUyNTgyMDcwZTYyMGJlNjMzMjdiZmE1MTVmYWI4ZjcxYzdhYzNlNGYwYzNjZDYyNjdiNDM3N2JhMjgKKworbGxfMiBzaGExOjFkNDExMjJlYmRkN2E2NDBmMjlkM2M5Y2M0ZjlkNzAwOTQzNzQ3NjIKK2xsXzIgc2hhMjU2Ojc5MTdiNDk0OGE4ODNjZmVkMGE3N2QzZDVhNjI1ZGM4NTc3ZDZkZGNjM2M2YzNiYmM1NmM0ZDQyMjZhMjI0NmQKKworbWRfMSBzaGExOjAzZjI0YzhjNDcwMGJhYmNjZmQyOGI2NTRlN2U4ZWFjNDAyYWQ2Y2QKK21kXzEgc2hhMjU2OmZjOWYzMDM2OWI5Nzg1OTVhZDY4NWJhMTFjYTlhMTdkZTBhZjE2ZDc5Y2Q0YjYyOTk3NWY0ZjE1OTAwMzM5MDIKKworbWRfMiBzaGExOjEwM2Q5Zjg5YjUwYjlhYWQwMzA1NGI1NzliZTVlN2FhNjY1ZjJkNTcKK21kXzIgc2hhMjU2OmZjNzhlYzc1Mjc1NjI4NzYyZmU1MjA0NzlhNmIyMzk4ZGVjMjk1Y2U3YWFiY2IxZDE1ZTU5NjNjN2I0ZTkzMTcKKworbW1fMSBzaGExOmIyNTg1MDhhZmI3Y2ViNDQ5OTgxYmQ5ZDYzZDJkM2U5NzFiZjhkMzQKK21tXzEgc2hhMjU2OmE0Yjc4NDdkMjI4ZTkwMGUzMDAwMjg1ZTI0MGMyMGZkOTZmOWRkNDFjZTE0NDUzMDVmNmVhZGExMjZkNGEwNGEKKworbW1fMiBzaGExOmI0MzFiMjcyZDgyOWZmM2FhNGQxYTUwODVmNDM5NGFiNGQzMzA1YjYKK21tXzIgc2hhMjU2OjNmOGI4M2VhMzZhYWNmNjg5YmNmMWExMjkwYTlhOGVkMzQxNTY0ZDMyNjgyZWE2Zjc2ZmVhOWE5NzkxODY3ODIKKworbW1fMyBzaGExOjE5OTg5ZDQ1NTlhYWU0MTdmZWRlZTI0MGNjZjJiYTMxNWVhNGRjMmIKK21tXzMgc2hhMjU2OjcxYjNiZmM1NzQ3YWMwMzNmZmY5ZWEwYWIzOWVlNDUzYTNhZjI5Njk4OTBlNzVkNmVmNTQ3Yjg3NTQ0ZTI2ODEKKworbW5fMSBzaGExOmJkMDg0YjBjMjdjN2I2Y2MzNGYxMWQ2ZDA1MDlhMjliZTNjYWY5NzAKK21uXzEgc2hhMjU2OjQ3YTY3NDUwNTgzZDdhMzI5ZWIwMWE3YzRiYTY0NDk0NWFmNzJjMGVkMmM3Yzk1ZWI1YTAwZDZlNDZkNGQ0ODMKKworbW5fMiBzaGExOmE3MTZkNThkZTRhNTcwZTAwMzhmNWMzMDdiZDhkYjM0ZGFlYTAyMWYKK21uXzIgc2hhMjU2OmY5NTEwNGMxZWJlMjdhY2I4NGJhYzI1YTdiZTk4YzcxZjZiOGQzMDU0YjIxZjM1N2E1YmUwYzUyNGFkOTdlMDgKKworbm1fMSBzaGExOmM4ZjI1NzgxZThmMTc5MmUzZTQwYjc0MjI1ZTIwNTUzMDQxYjUyMjYKK25tXzEgc2hhMjU2OjA5YmFkZGM3YWZhYTYyZTYyZTE1MmMyM2M5YzNhYjk0YmYxNWEzODk0MDMxZTIyN2U5YmU3ZmU2OGUxZjRlNDkKKworbm1fMiBzaGExOmNkYjlhOGMzZGE1NzE1MDJhYzMwMjI1ZTljMTdiZWNjYjgzODc5ODMKK25tXzIgc2hhMjU2OjU4YjUyMjc5NTZhYzJkMmEwOGQwZWZhNTEzYzBhZTM3NDMwOTQ4YjE2NzkxZWEzODY5YTEzMDhkYmYwNTUzNmQKKworbmFfMSBzaGExOjE1ODg1ODgxZWE2OTExNTM1MWMwOWIzODM3MWYwMzQ4YTNmYjhjNjcKK25hXzEgc2hhMjU2OjE4ZTRmZGQxNjcwY2Q3OTY4ZWUyM2QzNWJmZDI5ZTU0MThkNTZmYjE5MGM4NDAwOTRjMWM1N2NlZWUwYWFkOGYKKworbmRfMSBzaGExOmE0ZTE3OWU0MjkxZTU1MzZhNWUxYzgyZTA5MTA1Mjc3MmQyYzVhOTMKK25kXzEgc2hhMjU2OjA3ZGFjOWIwMWQwMDk1NmVhMGM2NWJkOTkzZDdkZTQ4NjRhZWVmMmVkM2NiYjEyNTVkOWYxZDk0OWZjZDZkZjYKKworc3NfMSBzaGExOjQwYzk1OWY5ODRjOGI4OWEyYjAyNTIwZDE3ZjAwZDcxN2YwMjQzOTcKK3NzXzEgc2hhMjU2OjUwZmMxYjVkZjc0ZDk5MTBkYjJmOTI3MDk5MzQ4NDIzNWYxNWI2OWI3NWIwMWJjZmI1M2UwNTkyODlkMTRhZjkKKworc3NfMiBzaGExOjJhYzU0N2FlOTYxNGEwMGQxYjI4Mjc1ZGU2MDgxMzFmN2EwZTI1OWYKK3NzXzIgc2hhMjU2OmE5MGYwMmU2MDQ0ZjE0OTdkMTNkYjU4N2QyMmFiMTJmOTAxNTBhN2QxZTA4NGFmY2Y5NjA2NWZhYjM1YWUyYmMKKwordHRfMSBzaGExOjRhYzEzNDU4ODk5YWI5MDhlZjNiMTEyOGZhMzc4ZGFlZmM4OGQzNTYKK3R0XzEgc2hhMjU2OmM1MzExM2M3ZGQ1MDYwZTg2YjViMjUxNDI4YmQwNThmNjcyNmY2NjI3M2M2YTI0YmZmMWM2MWEwNGY0OThkZDMKKwordHRfMiBzaGExOjRjODZmOWE4NWZiYzVlNjgwNGVlMmUxN2E3OTc1MzhmYmU3ODViY2EKK3R0XzIgc2hhMjU2OjA3NzVmMmEyOTYxMjlhN2NmMjg2MmI0NmJjMGU4OGMxNGQ1OTNmMjc3M2EzZTNmYjFjNTE5M2RiNmY1YTdlNzcKKwordHRfMyBzaGExOmM0ZTRhMTIyMzFiOWZhNzlhMDA1M2NiNjA3N2ZjYjIxYmI1YjEzNWEKK3R0XzMgc2hhMjU2OjQ3ODYwZjkzY2RkMjExZjk2NDQzZTA1NjBmMjFjNTdhYjZjMmY0YjBhYzI3ZmYwMzY1MWEzNTJlNTNmZTg0ODQKKworel9fMSBzaGExOjdkNjcwZmRjZGI5OTI5ZjZjN2RhYzE5NmZmNzg2ODljZDFjNTY2YTEKK3pfXzEgc2hhMjU2OjQ0ZDBmMzdhZmY1ZTUxY2ZjZmRkMTEzNGM5M2E2NDE5YmNjYTdiOTk2NGY3OTJmZmNkNWY5YjRmY2JhMWVlNjMKKworel9fMiBzaGExOjVlNWYyMjA3MmJiMzlmNmUxMmNmNjYzYTU3Y2I2MzRjNzZlZWZiNDkKK3pfXzIgc2hhMjU2OmQyOWRlMTYyMTEzMTkwZmVkMTA0ZWI1ZjAxMDgyMGNlZjRlMzE1Zjg5YjkzMjZlODQ5N2Y3MjE5ZmI3Mzc4OTQKKworel9fMyBzaGExOjFiYTUyMzk1NWQ1MTYwNjgxYWY2NWNiNzc2NDExZjU3NGMxZTgxNTUKK3pfXzMgc2hhMjU2OjA3NDIyZDc3MmIwNzc5NGFiNDM2OWE1NjQ4ZTYxNzcxOWY4OWMyZDIyMTJjYmVhYjA1ZDk3MjE0YjY0NzE2MzYKKworemFhMSBzaGExOjhhY2I4ZTk3NTBlM2Y2NDRiZjMyM2ZjZjNkMzM4ODQ5ZGIxMDZjNzcKK3phYTEgc2hhMjU2OmU3OWIwMjkyODJjOGFiZWMyZDlmM2Y3ZmFjZWFmMmExNDA1ZTAyZDFmMzY4ZTY2NDUwYWU2NmNmNWI2OGQxZjQKKworemFhMiBzaGExOjZjMGI5OTI4NmQwYmNlNTUxYWM0YTdiM2RmZjhiNzA2ZWRmZjM3MTUKK3phYTIgc2hhMjU2OmM4MmJkNzhjM2U2OWVhMTc5NmU2YjFhN2EzYmE0NWJiMTA2YzUwZTgxOTI5NjQ3NWI4NjIxMjNkM2Y1Y2M1YTAKKworemFuMSBzaGExOjA4NzQ5NDI2MjA4NGNlZmVlN2VkNDg0ZDIwYzhkYzA1ODA3OTEyNzIKK3phbjEgc2hhMjU2OjRiMTU5ZWIzODA0ZDA1NTk5MDIzZGQwNzRmNzcxZDA2ZDAyODcwZjRhYjI0YTcxNjVhZGQ4YWMzZDcwM2I4ZDMKKworemRkMSBzaGExOjg3OTAwN2VmYWU2MjRkMmIxMzA3MjE0YjI0YTk1NmYwYThkNjg2YTgKK3pkZDEgc2hhMjU2OmVlY2ZkZDRkODA5MmRkMDM2M2ZiNmQ0NTQ4YjU0YzZhZmM4OTgyYzNlZDliMzRlMzkzZjFkNmE5MjFkOGVhYTMKKworemRtMSBzaGExOjliNTQxYjIyNzVjMDZlM2E3YjEzZjI4YmFkZjUyOTRlMmFlNjNkZjQKK3pkbTEgc2hhMjU2OmFiMTM2ZTg4ZTE5YTg0M2M0YmY3NzEzZDIwOTBkNWEyMTg2YmExNmE2YTgwZGFjYzEyZWVkZGQyNTZhOGU1NTYKKworemRtMiBzaGExOmQ3NzM3MWQxNTgxN2ZjYWE1N2VlZWMyN2Y3NzBjNTA1YmE5NzRlYzEKK3pkbTIgc2hhMjU2OjFjMWE1ZjU3MzYzZjQ2YTE1ZDk1Y2U4NTI3YjNjMmMxNThkODhkMTY4NTNiNGFjYmY4MWJkMjBmZDJjODlhNDYKKworemRuMSBzaGExOmJlYjVkMzhjNTUyODNkMjgwNjg1ZWEyMWEwZTUwY2ZjYzBjYTA2NGEKK3pkbjEgc2hhMjU2OjBmMGVjYTY2MTgzNjE3YjBhYTVhZDc0YjI1NjU0MDMyOWY4NDE0NzA5MjJjYTY3NjAyNjNjOTk2ZDgyNWViMTgKKworem1kMSBzaGExOmQ0MWZkYTQxYjdlYzRkZTQ2YjQzY2I3ZWE0MmE0NTAwMWFlMzkzZDUKK3ptZDEgc2hhMjU2OjFlZDMyZDQ4MTg1MmVkZGYzMWEwY2UxMjY1MmEwYWQxNGJmNWI3YTg0MjY2N2I1ZGJiMGI1MGYzNWJmMWM4MGEKKworem1kMiBzaGExOmE3OWFjM2JlOTM3NzYzOWUxYzdkMWVkZjFhZTFiM2E1ZjBjY2Q4YTkKK3ptZDIgc2hhMjU2OmIyMzhkYTIxMWI0MDRmODkxN2RmMmQ5YzZmNzAzMDUzNWU5MDRiMjE4NjEzMTAwN2EzYzI5MmVjNjkwMmY5MzMKKworem1tMSBzaGExOjRjYTIyYmFlMjUyN2QzZDllMTY3NjQ5OGEwZmJhM2IzNTViZDEyNzgKK3ptbTEgc2hhMjU2OjA3MmIxZDg1YjVmMzRmYWJjOTlkZmE0NjAwOGM1NDE4ZGY2ODMwMmQzZTMxNzQzMDAwNmY0OWIzMmQyNDQyMjYKKworem1tMiBzaGExOjYxNDIyYmE5YzJjODczNDE2MDYxYTg4Y2Q0MGE1OWEzNWI1NzY0NzQKK3ptbTIgc2hhMjU2OjgxZGQ1ZDJiM2M1Y2RhMTZmZWY1NTIyNTZhZWQ0ZTJlYTA4MDJhODQ1MGEwOGYzMDhhOTIxNDIxMTJmZjZkZGEKKworem1tMyBzaGExOjY5N2FhZDc3MTVhMWU3MzA2Y2E3NjI5MGEzZGQ0MjA4ZmJhZWRkZmEKK3ptbTMgc2hhMjU2OjhiMTBmYWI0OWU5YmUzNDE0YWE1ZTlhOTNkMGU0NmY5NTY5MDUzNDQwMTM4YTdjMTlhNWViNTUzNmQ4ZTk1YmYKKworem1uMSBzaGExOmIxNmQ3YjI1Yjg2OWYyYmViMTI0ZWZhNTM0NjdkOGExNTUwYWQ2OTQKK3ptbjEgc2hhMjU2OjYwOWU0Zjc1ZDEyOTVlODQ0YzgyNmZlZWJhMjEzYWNiMGI2Y2ZjNjA5YWRmZThmZjcwNWIxOWUzODI5YWUzZTkKKworem1uMiBzaGExOmE1YzU0NGMyMWNmY2IwN2ViODBhNGQ4OWE1YjdkMTU3MDAwMmVkZmQKK3ptbjIgc2hhMjU2OmQ2ZDAzZWRmMmRjMWEzYjI2N2E4MjA1ZGU1ZjQxYTJmZjRiMDNkZWY4YzdhZTAyMDUyYjU0M2ZiMDlkNTg5ZmMKKworem5hMSBzaGExOmQxMjk3OWMyMmZmZjY5YzU5Y2E5NDA5ZTdhOGZlM2VlMjVlYWVlODAKK3puYTEgc2hhMjU2OmIzN2I4MGU3ODllOGVhMzJhYTMyM2YwMDQ2MjhmMDIwMTNmNjMyMTI0YjAyODJjN2ZlMDBhMTI3ZDNjNjRjM2MKKworem5kMSBzaGExOmExODM5M2M2MzZiOThlOWJkNzI5NmI4YjQzN2VhNDk5MmI3MjQ0MGMKK3puZDEgc2hhMjU2OmFmOTJhMjJlZWU4YzM4NDEwYTBjOWQyYjUxMzVhMTBhZWIwNTJjYmM3Y2Y2NzU1NDFlZDlhNjdiZmNhZjdjZjkKKworem5tMSBzaGExOjNmZGJlMTdmZDAxMzMwM2EyZTk4MWUxY2ExYzZjZDZlNzI3ODkwODcKK3pubTEgc2hhMjU2OmY3NWFlYWEwYzExZTc2OTE4ZTM4MWMxMDVmMDc1MjkzMmM2MTUwZTk0MWZlYzU2NWQyNGZhMzEwOThhMTNkYzEKKworem5tMiBzaGExOjdlMDlkNmEzYTE0YmQ2MzA5MTNlOGM3NTY5M2NlYTMyMTU3YjYwNmQKK3pubTIgc2hhMjU2OjkzOGQ3M2NmYmFhMWM5MDJhODRmYjViM2FmZDk3MzZhYTA1OTAzNjdmYjliZDU5YzZjNGQwNzJjZTcwZmNkNmQKK0VPRgorCitjYXQgPi50ZXN0LXBsYWluLU9BIDw8RU9GCis6MDAwMDAwIDEwMDY0NCAkKHRlc3Rfb2lkIHplcm8pICQodGVzdF9vaWQgYWFfMSkgQQlBQQorOjAwMDAwMCAxMDA2NDQgJCh0ZXN0X29pZCB6ZXJvKSAkKHRlc3Rfb2lkIGFuXzEpIEEJQU4KKzoxMDA2NDQgMDAwMDAwICQodGVzdF9vaWQgZGRfMSkgJCh0ZXN0X29pZCB6ZXJvKSBECURECis6MDAwMDAwIDA0MDAwMCAkKHRlc3Rfb2lkIHplcm8pICQodGVzdF9vaWQgZGZfMSkgQQlERgorOjEwMDY0NCAwMDAwMDAgJCh0ZXN0X29pZCBkbV8xKSAkKHRlc3Rfb2lkIHplcm8pIEQJRE0KKzoxMDA2NDQgMDAwMDAwICQodGVzdF9vaWQgZG5fMSkgJCh0ZXN0X29pZCB6ZXJvKSBECUROCis6MDAwMDAwIDEwMDY0NCAkKHRlc3Rfb2lkIHplcm8pICQodGVzdF9vaWQgbGxfMikgQQlMTAorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCBtZF8xKSAkKHRlc3Rfb2lkIG1kXzIpIE0JTUQKKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgbW1fMSkgJCh0ZXN0X29pZCBtbV8yKSBNCU1NCis6MTAwNjQ0IDEwMDY0NCAkKHRlc3Rfb2lkIG1uXzEpICQodGVzdF9vaWQgbW5fMikgTQlNTgorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCBzc18xKSAkKHRlc3Rfb2lkIHNzXzIpIE0JU1MKKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgdHRfMSkgJCh0ZXN0X29pZCB0dF8yKSBNCVRUCis6MDQwMDAwIDA0MDAwMCAkKHRlc3Rfb2lkIHpfXzEpICQodGVzdF9vaWQgel9fMikgTQlaCitFT0YKKworY2F0ID4udGVzdC1yZWN1cnNpdmUtT0EgPDxFT0YKKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCBhYV8xKSBBCUFBCis6MDAwMDAwIDEwMDY0NCAkKHRlc3Rfb2lkIHplcm8pICQodGVzdF9vaWQgYW5fMSkgQQlBTgorOjEwMDY0NCAwMDAwMDAgJCh0ZXN0X29pZCBkZF8xKSAkKHRlc3Rfb2lkIHplcm8pIEQJREQKKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCBkZmQxKSBBCURGL0RGCis6MTAwNjQ0IDAwMDAwMCAkKHRlc3Rfb2lkIGRtXzEpICQodGVzdF9vaWQgemVybykgRAlETQorOjEwMDY0NCAwMDAwMDAgJCh0ZXN0X29pZCBkbl8xKSAkKHRlc3Rfb2lkIHplcm8pIEQJRE4KKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCBsbF8yKSBBCUxMCis6MTAwNjQ0IDEwMDY0NCAkKHRlc3Rfb2lkIG1kXzEpICQodGVzdF9vaWQgbWRfMikgTQlNRAorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCBtbV8xKSAkKHRlc3Rfb2lkIG1tXzIpIE0JTU0KKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgbW5fMSkgJCh0ZXN0X29pZCBtbl8yKSBNCU1OCis6MTAwNjQ0IDEwMDY0NCAkKHRlc3Rfb2lkIHNzXzEpICQodGVzdF9vaWQgc3NfMikgTQlTUworOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCB0dF8xKSAkKHRlc3Rfb2lkIHR0XzIpIE0JVFQKKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCB6YWExKSBBCVovQUEKKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCB6YW4xKSBBCVovQU4KKzoxMDA2NDQgMDAwMDAwICQodGVzdF9vaWQgemRkMSkgJCh0ZXN0X29pZCB6ZXJvKSBECVovREQKKzoxMDA2NDQgMDAwMDAwICQodGVzdF9vaWQgemRtMSkgJCh0ZXN0X29pZCB6ZXJvKSBECVovRE0KKzoxMDA2NDQgMDAwMDAwICQodGVzdF9vaWQgemRuMSkgJCh0ZXN0X29pZCB6ZXJvKSBECVovRE4KKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgem1kMSkgJCh0ZXN0X29pZCB6bWQyKSBNCVovTUQKKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgem1tMSkgJCh0ZXN0X29pZCB6bW0yKSBNCVovTU0KKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgem1uMSkgJCh0ZXN0X29pZCB6bW4yKSBNCVovTU4KK0VPRgorY2F0ID4udGVzdC1wbGFpbi1PQiA8PEVPRgorOjAwMDAwMCAxMDA2NDQgJCh0ZXN0X29pZCB6ZXJvKSAkKHRlc3Rfb2lkIGFhXzIpIEEJQUEKKzoxMDA2NDQgMDAwMDAwICQodGVzdF9vaWQgZGRfMSkgJCh0ZXN0X29pZCB6ZXJvKSBECURECis6MDAwMDAwIDEwMDY0NCAkKHRlc3Rfb2lkIHplcm8pICQodGVzdF9vaWQgZGZfMikgQQlERgorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCBkbV8xKSAkKHRlc3Rfb2lkIGRtXzIpIE0JRE0KKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCBsbF8yKSBBCUxMCis6MTAwNjQ0IDAwMDAwMCAkKHRlc3Rfb2lkIG1kXzEpICQodGVzdF9vaWQgemVybykgRAlNRAorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCBtbV8xKSAkKHRlc3Rfb2lkIG1tXzMpIE0JTU0KKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCBuYV8xKSBBCU5BCis6MTAwNjQ0IDAwMDAwMCAkKHRlc3Rfb2lkIG5kXzEpICQodGVzdF9vaWQgemVybykgRAlORAorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCBubV8xKSAkKHRlc3Rfb2lkIG5tXzIpIE0JTk0KKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgc3NfMSkgJCh0ZXN0X29pZCBzc18yKSBNCVNTCis6MTAwNjQ0IDEwMDY0NCAkKHRlc3Rfb2lkIHR0XzEpICQodGVzdF9vaWQgdHRfMykgTQlUVAorOjA0MDAwMCAwNDAwMDAgJCh0ZXN0X29pZCB6X18xKSAkKHRlc3Rfb2lkIHpfXzMpIE0JWgorRU9GCitjYXQgPi50ZXN0LXJlY3Vyc2l2ZS1PQiA8PEVPRgorOjAwMDAwMCAxMDA2NDQgJCh0ZXN0X29pZCB6ZXJvKSAkKHRlc3Rfb2lkIGFhXzIpIEEJQUEKKzoxMDA2NDQgMDAwMDAwICQodGVzdF9vaWQgZGRfMSkgJCh0ZXN0X29pZCB6ZXJvKSBECURECis6MDAwMDAwIDEwMDY0NCAkKHRlc3Rfb2lkIHplcm8pICQodGVzdF9vaWQgZGZfMikgQQlERgorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCBkbV8xKSAkKHRlc3Rfb2lkIGRtXzIpIE0JRE0KKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCBsbF8yKSBBCUxMCis6MTAwNjQ0IDAwMDAwMCAkKHRlc3Rfb2lkIG1kXzEpICQodGVzdF9vaWQgemVybykgRAlNRAorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCBtbV8xKSAkKHRlc3Rfb2lkIG1tXzMpIE0JTU0KKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCBuYV8xKSBBCU5BCis6MTAwNjQ0IDAwMDAwMCAkKHRlc3Rfb2lkIG5kXzEpICQodGVzdF9vaWQgemVybykgRAlORAorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCBubV8xKSAkKHRlc3Rfb2lkIG5tXzIpIE0JTk0KKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgc3NfMSkgJCh0ZXN0X29pZCBzc18yKSBNCVNTCis6MTAwNjQ0IDEwMDY0NCAkKHRlc3Rfb2lkIHR0XzEpICQodGVzdF9vaWQgdHRfMykgTQlUVAorOjAwMDAwMCAxMDA2NDQgJCh0ZXN0X29pZCB6ZXJvKSAkKHRlc3Rfb2lkIHphYTIpIEEJWi9BQQorOjEwMDY0NCAwMDAwMDAgJCh0ZXN0X29pZCB6ZGQxKSAkKHRlc3Rfb2lkIHplcm8pIEQJWi9ERAorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCB6ZG0xKSAkKHRlc3Rfb2lkIHpkbTIpIE0JWi9ETQorOjEwMDY0NCAwMDAwMDAgJCh0ZXN0X29pZCB6bWQxKSAkKHRlc3Rfb2lkIHplcm8pIEQJWi9NRAorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCB6bW0xKSAkKHRlc3Rfb2lkIHptbTMpIE0JWi9NTQorOjAwMDAwMCAxMDA2NDQgJCh0ZXN0X29pZCB6ZXJvKSAkKHRlc3Rfb2lkIHpuYTEpIEEJWi9OQQorOjEwMDY0NCAwMDAwMDAgJCh0ZXN0X29pZCB6bmQxKSAkKHRlc3Rfb2lkIHplcm8pIEQJWi9ORAorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCB6bm0xKSAkKHRlc3Rfb2lkIHpubTIpIE0JWi9OTQorRU9GCitjYXQgPi50ZXN0LXBsYWluLUFCIDw8RU9GCis6MTAwNjQ0IDEwMDY0NCAkKHRlc3Rfb2lkIGFhXzEpICQodGVzdF9vaWQgYWFfMikgTQlBQQorOjEwMDY0NCAwMDAwMDAgJCh0ZXN0X29pZCBhbl8xKSAkKHRlc3Rfb2lkIHplcm8pIEQJQU4KKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCBkZl8yKSBBCURGCis6MDQwMDAwIDAwMDAwMCAkKHRlc3Rfb2lkIGRmXzEpICQodGVzdF9vaWQgemVybykgRAlERgorOjAwMDAwMCAxMDA2NDQgJCh0ZXN0X29pZCB6ZXJvKSAkKHRlc3Rfb2lkIGRtXzIpIEEJRE0KKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCBkbl8xKSBBCUROCis6MTAwNjQ0IDAwMDAwMCAkKHRlc3Rfb2lkIG1kXzIpICQodGVzdF9vaWQgemVybykgRAlNRAorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCBtbV8yKSAkKHRlc3Rfb2lkIG1tXzMpIE0JTU0KKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgbW5fMikgJCh0ZXN0X29pZCBtbl8xKSBNCU1OCis6MDAwMDAwIDEwMDY0NCAkKHRlc3Rfb2lkIHplcm8pICQodGVzdF9vaWQgbmFfMSkgQQlOQQorOjEwMDY0NCAwMDAwMDAgJCh0ZXN0X29pZCBuZF8xKSAkKHRlc3Rfb2lkIHplcm8pIEQJTkQKKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgbm1fMSkgJCh0ZXN0X29pZCBubV8yKSBNCU5NCis6MTAwNjQ0IDEwMDY0NCAkKHRlc3Rfb2lkIHR0XzIpICQodGVzdF9vaWQgdHRfMykgTQlUVAorOjA0MDAwMCAwNDAwMDAgJCh0ZXN0X29pZCB6X18yKSAkKHRlc3Rfb2lkIHpfXzMpIE0JWgorRU9GCitjYXQgPi50ZXN0LXJlY3Vyc2l2ZS1BQiA8PEVPRgorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCBhYV8xKSAkKHRlc3Rfb2lkIGFhXzIpIE0JQUEKKzoxMDA2NDQgMDAwMDAwICQodGVzdF9vaWQgYW5fMSkgJCh0ZXN0X29pZCB6ZXJvKSBECUFOCis6MDAwMDAwIDEwMDY0NCAkKHRlc3Rfb2lkIHplcm8pICQodGVzdF9vaWQgZGZfMikgQQlERgorOjEwMDY0NCAwMDAwMDAgJCh0ZXN0X29pZCBkZmQxKSAkKHRlc3Rfb2lkIHplcm8pIEQJREYvREYKKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCBkbV8yKSBBCURNCis6MDAwMDAwIDEwMDY0NCAkKHRlc3Rfb2lkIHplcm8pICQodGVzdF9vaWQgZG5fMSkgQQlETgorOjEwMDY0NCAwMDAwMDAgJCh0ZXN0X29pZCBtZF8yKSAkKHRlc3Rfb2lkIHplcm8pIEQJTUQKKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgbW1fMikgJCh0ZXN0X29pZCBtbV8zKSBNCU1NCis6MTAwNjQ0IDEwMDY0NCAkKHRlc3Rfb2lkIG1uXzIpICQodGVzdF9vaWQgbW5fMSkgTQlNTgorOjAwMDAwMCAxMDA2NDQgJCh0ZXN0X29pZCB6ZXJvKSAkKHRlc3Rfb2lkIG5hXzEpIEEJTkEKKzoxMDA2NDQgMDAwMDAwICQodGVzdF9vaWQgbmRfMSkgJCh0ZXN0X29pZCB6ZXJvKSBECU5ECis6MTAwNjQ0IDEwMDY0NCAkKHRlc3Rfb2lkIG5tXzEpICQodGVzdF9vaWQgbm1fMikgTQlOTQorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCB0dF8yKSAkKHRlc3Rfb2lkIHR0XzMpIE0JVFQKKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgemFhMSkgJCh0ZXN0X29pZCB6YWEyKSBNCVovQUEKKzoxMDA2NDQgMDAwMDAwICQodGVzdF9vaWQgemFuMSkgJCh0ZXN0X29pZCB6ZXJvKSBECVovQU4KKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCB6ZG0yKSBBCVovRE0KKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCB6ZG4xKSBBCVovRE4KKzoxMDA2NDQgMDAwMDAwICQodGVzdF9vaWQgem1kMikgJCh0ZXN0X29pZCB6ZXJvKSBECVovTUQKKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgem1tMikgJCh0ZXN0X29pZCB6bW0zKSBNCVovTU0KKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgem1uMikgJCh0ZXN0X29pZCB6bW4xKSBNCVovTU4KKzowMDAwMDAgMTAwNjQ0ICQodGVzdF9vaWQgemVybykgJCh0ZXN0X29pZCB6bmExKSBBCVovTkEKKzoxMDA2NDQgMDAwMDAwICQodGVzdF9vaWQgem5kMSkgJCh0ZXN0X29pZCB6ZXJvKSBECVovTkQKKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgem5tMSkgJCh0ZXN0X29pZCB6bm0yKSBNCVovTk0KK0VPRgorCitjbXBfZGlmZl9maWxlc19vdXRwdXQgKCkgeworICAgICMgZGlmZi1maWxlcyBuZXZlciByZXBvcnRzIGFkZGl0aW9ucy4gIEFsc28gaXQgZG9lcyBub3QgZmlsbCBpbiB0aGUKKyAgICAjIG9iamVjdCBJRCBmb3IgdGhlIGNoYW5nZWQgZmlsZXMgYmVjYXVzZSBpdCB3YW50cyB5b3UgdG8gbG9vayBhdCB0aGUKKyAgICAjIGZpbGVzeXN0ZW0uCisgICAgc2VkIDwiJDIiID4udGVzdC10bXAgXAorCS1lICcvXjowMDAwMDAgL2Q7cy8nJE9JRF9SRUdFWCdcKCBbTUNSTkRVXVswLTldKlwpCS8nJFpFUk9fT0lEJ1wxCS8nICYmCisgICAgdGVzdF9jbXAgIiQxIiAudGVzdC10bXAKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYtdHJlZSBvZiBrbm93biB0cmVlcy4nIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAkdHJlZV9PICR0cmVlX0EgPi50ZXN0LWEgJiYKKyAgICAgY21wIC1zIC50ZXN0LWEgLnRlc3QtcGxhaW4tT0EnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgb2Yga25vd24gdHJlZXMuJyBcCisgICAgJ2dpdCBkaWZmLXRyZWUgLXIgJHRyZWVfTyAkdHJlZV9BID4udGVzdC1hICYmCisgICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LXJlY3Vyc2l2ZS1PQScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYtdHJlZSBvZiBrbm93biB0cmVlcy4nIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAkdHJlZV9PICR0cmVlX0IgPi50ZXN0LWEgJiYKKyAgICAgY21wIC1zIC50ZXN0LWEgLnRlc3QtcGxhaW4tT0InCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgb2Yga25vd24gdHJlZXMuJyBcCisgICAgJ2dpdCBkaWZmLXRyZWUgLXIgJHRyZWVfTyAkdHJlZV9CID4udGVzdC1hICYmCisgICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LXJlY3Vyc2l2ZS1PQicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYtdHJlZSBvZiBrbm93biB0cmVlcy4nIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAkdHJlZV9BICR0cmVlX0IgPi50ZXN0LWEgJiYKKyAgICAgY21wIC1zIC50ZXN0LWEgLnRlc3QtcGxhaW4tQUInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgb2Yga25vd24gdHJlZXMuJyBcCisgICAgJ2dpdCBkaWZmLXRyZWUgLXIgJHRyZWVfQSAkdHJlZV9CID4udGVzdC1hICYmCisgICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LXJlY3Vyc2l2ZS1BQicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYtdHJlZSAtLXN0ZGluIG9mIGtub3duIHRyZWVzLicgXAorICAgICdlY2hvICR0cmVlX0EgJHRyZWVfQiB8IGdpdCBkaWZmLXRyZWUgLS1zdGRpbiA+IC50ZXN0LWEgJiYKKyAgICAgZWNobyAkdHJlZV9BICR0cmVlX0IgPiAudGVzdC1wbGFpbi1BQnggJiYKKyAgICAgY2F0IC50ZXN0LXBsYWluLUFCID4+IC50ZXN0LXBsYWluLUFCeCAmJgorICAgICBjbXAgLXMgLnRlc3QtYSAudGVzdC1wbGFpbi1BQngnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgLS1zdGRpbiBvZiBrbm93biB0cmVlcy4nIFwKKyAgICAnZWNobyAkdHJlZV9BICR0cmVlX0IgfCBnaXQgZGlmZi10cmVlIC1yIC0tc3RkaW4gPiAudGVzdC1hICYmCisgICAgIGVjaG8gJHRyZWVfQSAkdHJlZV9CID4gLnRlc3QtcmVjdXJzaXZlLUFCeCAmJgorICAgICBjYXQgLnRlc3QtcmVjdXJzaXZlLUFCID4+IC50ZXN0LXJlY3Vyc2l2ZS1BQnggJiYKKyAgICAgY21wIC1zIC50ZXN0LWEgLnRlc3QtcmVjdXJzaXZlLUFCeCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYtY2FjaGUgTyB3aXRoIEEgaW4gY2FjaGUnIFwKKyAgICAnZ2l0IHJlYWQtdHJlZSAkdHJlZV9BICYmCisgICAgIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlX08gPi50ZXN0LWEgJiYKKyAgICAgY21wIC1zIC50ZXN0LWEgLnRlc3QtcmVjdXJzaXZlLU9BJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZGlmZi1jYWNoZSBPIHdpdGggQiBpbiBjYWNoZScgXAorICAgICdnaXQgcmVhZC10cmVlICR0cmVlX0IgJiYKKyAgICAgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJHRyZWVfTyA+LnRlc3QtYSAmJgorICAgICBjbXAgLXMgLnRlc3QtYSAudGVzdC1yZWN1cnNpdmUtT0InCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLWNhY2hlIEEgd2l0aCBCIGluIGNhY2hlJyBcCisgICAgJ2dpdCByZWFkLXRyZWUgJHRyZWVfQiAmJgorICAgICBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkdHJlZV9BID4udGVzdC1hICYmCisgICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LXJlY3Vyc2l2ZS1BQicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYtZmlsZXMgd2l0aCBPIGluIGNhY2hlIGFuZCBBIGNoZWNrZWQgb3V0JyBcCisgICAgJ3JtIC1mciBaIFtBLVpdW0EtWl0gJiYKKyAgICAgZ2l0IHJlYWQtdHJlZSAkdHJlZV9BICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtZiAtYSAmJgorICAgICBnaXQgcmVhZC10cmVlIC0tcmVzZXQgJHRyZWVfTyAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtcSAmJgorICAgICBnaXQgZGlmZi1maWxlcyA+LnRlc3QtYSAmJgorICAgICBjbXBfZGlmZl9maWxlc19vdXRwdXQgLnRlc3QtYSAudGVzdC1yZWN1cnNpdmUtT0EnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLWZpbGVzIHdpdGggTyBpbiBjYWNoZSBhbmQgQiBjaGVja2VkIG91dCcgXAorICAgICdybSAtZnIgWiBbQS1aXVtBLVpdICYmCisgICAgIGdpdCByZWFkLXRyZWUgJHRyZWVfQiAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLWYgLWEgJiYKKyAgICAgZ2l0IHJlYWQtdHJlZSAtLXJlc2V0ICR0cmVlX08gJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLXEgJiYKKyAgICAgZ2l0IGRpZmYtZmlsZXMgPi50ZXN0LWEgJiYKKyAgICAgY21wX2RpZmZfZmlsZXNfb3V0cHV0IC50ZXN0LWEgLnRlc3QtcmVjdXJzaXZlLU9CJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZGlmZi1maWxlcyB3aXRoIEEgaW4gY2FjaGUgYW5kIEIgY2hlY2tlZCBvdXQnIFwKKyAgICAncm0gLWZyIFogW0EtWl1bQS1aXSAmJgorICAgICBnaXQgcmVhZC10cmVlICR0cmVlX0IgJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1hICYmCisgICAgIGdpdCByZWFkLXRyZWUgLS1yZXNldCAkdHJlZV9BICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC1xICYmCisgICAgIGdpdCBkaWZmLWZpbGVzID4udGVzdC1hICYmCisgICAgIGNtcF9kaWZmX2ZpbGVzX291dHB1dCAudGVzdC1hIC50ZXN0LXJlY3Vyc2l2ZS1BQicKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOb3cgd2UgaGF2ZSBlc3RhYmxpc2hlZCB0aGUgYmFzZWxpbmUsIHdlIGRvIG5vdCBoYXZlIHRvCisjIHJlbHkgb24gaW5kaXZpZHVhbCBvYmplY3QgSUQgdmFsdWVzIHRoYXQgbXVjaC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYtdHJlZSBPIEEgPT0gZGlmZi10cmVlIC1SIEEgTycgXAorICAgICdnaXQgZGlmZi10cmVlICR0cmVlX08gJHRyZWVfQSA+LnRlc3QtYSAmJgorICAgIGdpdCBkaWZmLXRyZWUgLVIgJHRyZWVfQSAkdHJlZV9PID4udGVzdC1iICYmCisgICAgY21wIC1zIC50ZXN0LWEgLnRlc3QtYicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYtdHJlZSAtciBPIEEgPT0gZGlmZi10cmVlIC1yIC1SIEEgTycgXAorICAgICdnaXQgZGlmZi10cmVlIC1yICR0cmVlX08gJHRyZWVfQSA+LnRlc3QtYSAmJgorICAgIGdpdCBkaWZmLXRyZWUgLXIgLVIgJHRyZWVfQSAkdHJlZV9PID4udGVzdC1iICYmCisgICAgY21wIC1zIC50ZXN0LWEgLnRlc3QtYicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYtdHJlZSBCIEEgPT0gZGlmZi10cmVlIC1SIEEgQicgXAorICAgICdnaXQgZGlmZi10cmVlICR0cmVlX0IgJHRyZWVfQSA+LnRlc3QtYSAmJgorICAgIGdpdCBkaWZmLXRyZWUgLVIgJHRyZWVfQSAkdHJlZV9CID4udGVzdC1iICYmCisgICAgY21wIC1zIC50ZXN0LWEgLnRlc3QtYicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYtdHJlZSAtciBCIEEgPT0gZGlmZi10cmVlIC1yIC1SIEEgQicgXAorICAgICdnaXQgZGlmZi10cmVlIC1yICR0cmVlX0IgJHRyZWVfQSA+LnRlc3QtYSAmJgorICAgIGdpdCBkaWZmLXRyZWUgLXIgLVIgJHRyZWVfQSAkdHJlZV9CID4udGVzdC1iICYmCisgICAgY21wIC1zIC50ZXN0LWEgLnRlc3QtYicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYgY2FuIHJlYWQgZnJvbSBzdGRpbicgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IC0tIE1OIC0gPCBOTiB8CisgICAgICAgIGdyZXAgLXYgIl5pbmRleCIgfCBzZWQgInMjLy0jL05OIyIgPi50ZXN0LWEgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IC0tIE1OIE5OIHwKKyAgICAgICAgZ3JlcCAtdiAiXmluZGV4IiA+LnRlc3QtYiAmJgorICAgIHRlc3RfY21wIC50ZXN0LWEgLnRlc3QtYicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDAzLWRpZmYtcmVuYW1lLTEuc2ggYi90L3Q0MDAzLWRpZmYtcmVuYW1lLTEuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGYyYWNjYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMDMtZGlmZi1yZW5hbWUtMS5zaApAQCAtMCwwICsxLDEyOCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdNb3JlIHJlbmFtZSBkZXRlY3Rpb24KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoIDsjIHRlc3QtbGliIGNoZGlyJ3MgaW50byB0cmFzaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSByZWZlcmVuY2UgdHJlZScgXAorICAgICdjYXQgIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIvQ09QWUlORyA+Q09QWUlORyAmJgorICAgICBlY2hvIGZyb3R6ID5yZXpyb3YgJiYKKyAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIENPUFlJTkcgcmV6cm92ICYmCisgICAgdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorICAgIGVjaG8gJHRyZWUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIHdvcmsgdHJlZScgXAorICAgICdzZWQgLWUgJ3MvSE9XRVZFUi9Ib3dldmVyLycgPENPUFlJTkcgPkNPUFlJTkcuMSAmJgorICAgIHNlZCAtZSAncy9HUEwvRy5QLkwvZycgPENPUFlJTkcgPkNPUFlJTkcuMiAmJgorICAgIHJtIC1mIENPUFlJTkcgJiYKKyAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIENPUFlJTkcgQ09QWUlORy4/JworCisjIHRyZWUgaGFzIENPUFlJTkcgYW5kIHJlenJvdi4gIHdvcmsgdHJlZSBoYXMgQ09QWUlORy4xIGFuZCBDT1BZSU5HLjIsCisjIGJvdGggYXJlIHNsaWdodGx5IGVkaXRlZCwgYW5kIHVuY2hhbmdlZCByZXpyb3YuICBTbyB3ZSBzYXkgeW91CisjIGNvcHktYW5kLWVkaXQgb25lLCBhbmQgcmVuYW1lLWFuZC1lZGl0IHRoZSBvdGhlci4gIFdlIGRvIG5vdCBzYXkKKyMgYW55dGhpbmcgYWJvdXQgcmV6cm92LgorCitHSVRfRElGRl9PUFRTPS0tdW5pZmllZD0wIGdpdCBkaWZmLWluZGV4IC1DIC1wICR0cmVlID5jdXJyZW50CitjYXQgPmV4cGVjdGVkIDw8XEVPRgorZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HLjEKK2NvcHkgZnJvbSBDT1BZSU5HCitjb3B5IHRvIENPUFlJTkcuMQorLS0tIGEvQ09QWUlORworKysrIGIvQ09QWUlORy4xCitAQCAtNiArNiBAQAorLSBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKKysgSG93ZXZlciwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gR1BMdjMgaWYgdGhhdCBzZWVtcyBsaWtlCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcuMgorcmVuYW1lIGZyb20gQ09QWUlORworcmVuYW1lIHRvIENPUFlJTkcuMgorLS0tIGEvQ09QWUlORworKysrIGIvQ09QWUlORy4yCitAQCAtMiArMiBAQAorLSBOb3RlIHRoYXQgdGhlIG9ubHkgdmFsaWQgdmVyc2lvbiBvZiB0aGUgR1BMIGFzIGZhciBhcyB0aGlzIHByb2plY3QKKysgTm90ZSB0aGF0IHRoZSBvbmx5IHZhbGlkIHZlcnNpb24gb2YgdGhlIEcuUC5MIGFzIGZhciBhcyB0aGlzIHByb2plY3QKK0BAIC02ICs2IEBACistIEhPV0VWRVIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQorKyBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHLlAuTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQorQEAgLTEyICsxMiBAQAorLQlUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Miwgb3IgYSBsYXRlciB2ZXJzaW9uCisrCVRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgRy5QLkwgdjIsIG9yIGEgbGF0ZXIgdmVyc2lvbgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2YWxpZGF0ZSBvdXRwdXQgZnJvbSByZW5hbWUvY29weSBkZXRlY3Rpb24gKCMxKScgXAorICAgICdjb21wYXJlX2RpZmZfcGF0Y2ggY3VycmVudCBleHBlY3RlZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgd29yayB0cmVlIGFnYWluJyBcCisgICAgJ212IENPUFlJTkcuMiBDT1BZSU5HICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgQ09QWUlORyBDT1BZSU5HLjEgQ09QWUlORy4yJworCisjIHRyZWUgaGFzIENPUFlJTkcgYW5kIHJlenJvdi4gIHdvcmsgdHJlZSBoYXMgQ09QWUlORyBhbmQgQ09QWUlORy4xLAorIyBib3RoIGFyZSBzbGlnaHRseSBlZGl0ZWQsIGFuZCB1bmNoYW5nZWQgcmV6cm92LiAgU28gd2Ugc2F5IHlvdQorIyBlZGl0ZWQgb25lLCBhbmQgY29weS1hbmQtZWRpdCB0aGUgb3RoZXIuICBXZSBkbyBub3Qgc2F5CisjIGFueXRoaW5nIGFib3V0IHJlenJvdi4KKworR0lUX0RJRkZfT1BUUz0tLXVuaWZpZWQ9MCBnaXQgZGlmZi1pbmRleCAtQyAtcCAkdHJlZSA+Y3VycmVudAorY2F0ID5leHBlY3RlZCA8PFxFT0YKK2RpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORworLS0tIGEvQ09QWUlORworKysrIGIvQ09QWUlORworQEAgLTIgKzIgQEAKKy0gTm90ZSB0aGF0IHRoZSBvbmx5IHZhbGlkIHZlcnNpb24gb2YgdGhlIEdQTCBhcyBmYXIgYXMgdGhpcyBwcm9qZWN0CisrIE5vdGUgdGhhdCB0aGUgb25seSB2YWxpZCB2ZXJzaW9uIG9mIHRoZSBHLlAuTCBhcyBmYXIgYXMgdGhpcyBwcm9qZWN0CitAQCAtNiArNiBAQAorLSBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKKysgSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gRy5QLkx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKK0BAIC0xMiArMTIgQEAKKy0JVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIsIG9yIGEgbGF0ZXIgdmVyc2lvbgorKwlUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEcuUC5MIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KK2RpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORy4xCitjb3B5IGZyb20gQ09QWUlORworY29weSB0byBDT1BZSU5HLjEKKy0tLSBhL0NPUFlJTkcKKysrKyBiL0NPUFlJTkcuMQorQEAgLTYgKzYgQEAKKy0gSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gR1BMdjMgaWYgdGhhdCBzZWVtcyBsaWtlCisrIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2YWxpZGF0ZSBvdXRwdXQgZnJvbSByZW5hbWUvY29weSBkZXRlY3Rpb24gKCMyKScgXAorICAgICdjb21wYXJlX2RpZmZfcGF0Y2ggY3VycmVudCBleHBlY3RlZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgd29yayB0cmVlIG9uY2UgYWdhaW4nIFwKKyAgICAnY2F0ICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliL0NPUFlJTkcgPkNPUFlJTkcgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBDT1BZSU5HIENPUFlJTkcuMScKKworIyB0cmVlIGhhcyBDT1BZSU5HIGFuZCByZXpyb3YuICB3b3JrIHRyZWUgaGFzIENPUFlJTkcgYW5kIENPUFlJTkcuMSwKKyMgYnV0IENPUFlJTkcgaXMgbm90IGVkaXRlZC4gIFdlIHNheSB5b3UgY29weS1hbmQtZWRpdCBDT1BZSU5HLjE7IHRoaXMKKyMgaXMgb25seSBwb3NzaWJsZSBiZWNhdXNlIC1DIG1vZGUgbm93IHJlcG9ydHMgdGhlIHVubW9kaWZpZWQgZmlsZSB0bworIyB0aGUgZGlmZi1jb3JlLiAgVW5jaGFuZ2VkIHJlenJvdiwgYWx0aG91Z2ggYmVpbmcgZmVkIHRvCisjIGdpdCBkaWZmLWluZGV4IGFzIHdlbGwsIHNob3VsZCBub3QgYmUgbWVudGlvbmVkLgorCitHSVRfRElGRl9PUFRTPS0tdW5pZmllZD0wIFwKKyAgICBnaXQgZGlmZi1pbmRleCAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtcCAkdHJlZSA+Y3VycmVudAorY2F0ID5leHBlY3RlZCA8PFxFT0YKK2RpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORy4xCitjb3B5IGZyb20gQ09QWUlORworY29weSB0byBDT1BZSU5HLjEKKy0tLSBhL0NPUFlJTkcKKysrKyBiL0NPUFlJTkcuMQorQEAgLTYgKzYgQEAKKy0gSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gR1BMdjMgaWYgdGhhdCBzZWVtcyBsaWtlCisrIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2YWxpZGF0ZSBvdXRwdXQgZnJvbSByZW5hbWUvY29weSBkZXRlY3Rpb24gKCMzKScgXAorICAgICdjb21wYXJlX2RpZmZfcGF0Y2ggY3VycmVudCBleHBlY3RlZCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDA0LWRpZmYtcmVuYW1lLXN5bWxpbmsuc2ggYi90L3Q0MDA0LWRpZmYtcmVuYW1lLXN5bWxpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmU1NjJjOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMDQtZGlmZi1yZW5hbWUtc3ltbGluay5zaApAQCAtMCwwICsxLDY5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J01vcmUgcmVuYW1lIGRldGVjdGlvbiB0ZXN0cy4KKworVGhlIHJlbmFtZSBkZXRlY3Rpb24gbG9naWMgc2hvdWxkIGJlIGFibGUgdG8gZGV0ZWN0IHB1cmUgcmVuYW1lIG9yCitjb3B5IG9mIHN5bWJvbGljIGxpbmtzLCBidXQgc2hvdWxkIG5vdCBwcm9kdWNlIHJlbmFtZS9jb3B5IGZvbGxvd2VkCitieSBhbiBlZGl0IGZvciB0aGVtLgorJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgXAorICAgICdwcmVwYXJlIHJlZmVyZW5jZSB0cmVlJyBcCisgICAgJ2VjaG8geHl6enkgfCB0ciAtZCAnXFxcXCcwMTIgPnlvbWluICYmCisgICAgIGxuIC1zIHh5enp5IGZyb3R6ICYmCisgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmcm90eiB5b21pbiAmJgorICAgIHRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICBlY2hvICR0cmVlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIFwKKyAgICAncHJlcGFyZSB3b3JrIHRyZWUnIFwKKyAgICAnbXYgZnJvdHogcmV6cm92ICYmCisgICAgIHJtIC1mIHlvbWluICYmCisgICAgIGxuIC1zIHh5enp5IG5pdGZvbCAmJgorICAgICBsbiAtcyB4enp6eSBib3piYXIgJiYKKyAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIGZyb3R6IHJlenJvdiBuaXRmb2wgYm96YmFyIHlvbWluJworCisjIHRyZWUgaGFzIGZyb3R6IHBvaW50aW5nIGF0IHh5enp5LCBhbmQgeW9taW4gdGhhdCBjb250YWlucyB4eXp6eSB0bworIyBjb25mdXNlIHRoaW5ncy4gIHdvcmsgdHJlZSBoYXMgcmV6cm92ICh4eXp6eSkgbml0Zm9sICh4eXp6eSkgYW5kCisjIGJvemJhciAoeHp6enkpLgorIyByZXpyb3YgYW5kIG5pdGZvbCBhcmUgcmVuYW1lL2NvcHkgb2YgZnJvdHogYW5kIGJvemJhciBzaG91bGQgYmUKKyMgYSBuZXcgY3JlYXRpb24uCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3NldHVwIGRpZmYgb3V0cHV0JyAiCisgICAgR0lUX0RJRkZfT1BUUz0tLXVuaWZpZWQ9MCBnaXQgZGlmZi1pbmRleCAtQyAtcCAkdHJlZSA+Y3VycmVudCAmJgorICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GCitkaWZmIC0tZ2l0IGEvYm96YmFyIGIvYm96YmFyCituZXcgZmlsZSBtb2RlIDEyMDAwMAorLS0tIC9kZXYvbnVsbAorKysrIGIvYm96YmFyCitAQCAtMCwwICsxIEBACisreHp6enkKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL2Zyb3R6IGIvbml0Zm9sCitzaW1pbGFyaXR5IGluZGV4IDEwMCUKK2NvcHkgZnJvbSBmcm90egorY29weSB0byBuaXRmb2wKK2RpZmYgLS1naXQgYS9mcm90eiBiL3JlenJvdgorc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBmcm90egorcmVuYW1lIHRvIHJlenJvdgorZGlmZiAtLWdpdCBhL3lvbWluIGIveW9taW4KK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorLS0tIGEveW9taW4KKysrKyAvZGV2L251bGwKK0BAIC0xICswLDAgQEAKKy14eXp6eQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCisgICAgJ3ZhbGlkYXRlIGRpZmYgb3V0cHV0JyBcCisgICAgJ2NvbXBhcmVfZGlmZl9wYXRjaCBjdXJyZW50IGV4cGVjdGVkJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDUtZGlmZi1yZW5hbWUtMi5zaCBiL3QvdDQwMDUtZGlmZi1yZW5hbWUtMi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNTQyZDI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAwNS1kaWZmLXJlbmFtZS0yLnNoCkBAIC0wLDAgKzEsNzcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nU2FtZSByZW5hbWUgZGV0ZWN0aW9uIGFzIHQ0MDAzIGJ1dCB0ZXN0aW5nIGRpZmYtcmF3LicKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoIDsjIHRlc3QtbGliIGNoZGlyJ3MgaW50byB0cmFzaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZWZlcmVuY2UgdHJlZScgJworCWNhdCAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi9DT1BZSU5HID5DT1BZSU5HICYmCisJZWNobyBmcm90eiA+cmV6cm92ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBDT1BZSU5HIHJlenJvdiAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwllY2hvICR0cmVlICYmCisJc2VkIC1lICdzL0hPV0VWRVIvSG93ZXZlci8nIDxDT1BZSU5HID5DT1BZSU5HLjEgJiYKKwlzZWQgLWUgJ3MvR1BML0cuUC5ML2cnIDxDT1BZSU5HID5DT1BZSU5HLjIgJiYKKwlvcmlnb2lkPSQoZ2l0IGhhc2gtb2JqZWN0IENPUFlJTkcpICYmCisJb2lkMT0kKGdpdCBoYXNoLW9iamVjdCBDT1BZSU5HLjEpICYmCisJb2lkMj0kKGdpdCBoYXNoLW9iamVjdCBDT1BZSU5HLjIpCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdHJlZSBoYXMgQ09QWUlORyBhbmQgcmV6cm92LiAgd29yayB0cmVlIGhhcyBDT1BZSU5HLjEgYW5kIENPUFlJTkcuMiwKKyMgYm90aCBhcmUgc2xpZ2h0bHkgZWRpdGVkLCBhbmQgdW5jaGFuZ2VkIHJlenJvdi4gIFdlIHNheSBDT1BZSU5HLjEKKyMgYW5kIENPUFlJTkcuMiBhcmUgYmFzZWQgb24gQ09QWUlORywgYW5kIGRvIG5vdCBzYXkgYW55dGhpbmcgYWJvdXQKKyMgcmV6cm92LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBvdXRwdXQgZnJvbSByZW5hbWUvY29weSBkZXRlY3Rpb24gKCMxKScgJworCXJtIC1mIENPUFlJTkcgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIENPUFlJTkcgQ09QWUlORy4/ICYmCisKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCToxMDA2NDQgMTAwNjQ0ICRvcmlnb2lkICRvaWQxIEMxMjM0CUNPUFlJTkcJQ09QWUlORy4xCisJOjEwMDY0NCAxMDA2NDQgJG9yaWdvaWQgJG9pZDIgUjEyMzQJQ09QWUlORwlDT1BZSU5HLjIKKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtQyAkdHJlZSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0ZWQgY3VycmVudAorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHRyZWUgaGFzIENPUFlJTkcgYW5kIHJlenJvdi4gIHdvcmsgdHJlZSBoYXMgQ09QWUlORyBhbmQgQ09QWUlORy4xLAorIyBib3RoIGFyZSBzbGlnaHRseSBlZGl0ZWQsIGFuZCB1bmNoYW5nZWQgcmV6cm92LiAgV2Ugc2F5IENPUFlJTkcuMQorIyBpcyBiYXNlZCBvbiBDT1BZSU5HIGFuZCBDT1BZSU5HIGlzIHN0aWxsIHRoZXJlLCBhbmQgZG8gbm90IHNheSBhbnl0aGluZworIyBhYm91dCByZXpyb3YuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIG91dHB1dCBmcm9tIHJlbmFtZS9jb3B5IGRldGVjdGlvbiAoIzIpJyAnCisJbXYgQ09QWUlORy4yIENPUFlJTkcgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIENPUFlJTkcgQ09QWUlORy4xIENPUFlJTkcuMiAmJgorCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwk6MTAwNjQ0IDEwMDY0NCAkb3JpZ29pZCAkb2lkMiBNCUNPUFlJTkcKKwk6MTAwNjQ0IDEwMDY0NCAkb3JpZ29pZCAkb2lkMSBDMTIzNAlDT1BZSU5HCUNPUFlJTkcuMQorCUVPRgorCWdpdCBkaWZmLWluZGV4IC1DICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdHJlZSBoYXMgQ09QWUlORyBhbmQgcmV6cm92LiAgd29yayB0cmVlIGhhcyB0aGUgc2FtZSBDT1BZSU5HIGFuZAorIyBjb3B5LWVkaXRlZCBDT1BZSU5HLjEsIGFuZCB1bmNoYW5nZWQgcmV6cm92LiAgV2Ugc2hvdWxkIG5vdCBzYXkKKyMgYW55dGhpbmcgYWJvdXQgcmV6cm92IG9yIENPUFlJTkcsIHNpbmNlIHRoZSByZXZpc2VkIGFnYWluIGRpZmYtcmF3CisjIG5vd3MgaG93IHRvIHNheSBDb3B5LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBvdXRwdXQgZnJvbSByZW5hbWUvY29weSBkZXRlY3Rpb24gKCMzKScgJworCWNhdCAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi9DT1BZSU5HID5DT1BZSU5HICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBDT1BZSU5HIENPUFlJTkcuMSAmJgorCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwk6MTAwNjQ0IDEwMDY0NCAkb3JpZ29pZCAkb2lkMSBDMTIzNAlDT1BZSU5HCUNPUFlJTkcuMQorCUVPRgorCWdpdCBkaWZmLWluZGV4IC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwNi1kaWZmLW1vZGUuc2ggYi90L3Q0MDA2LWRpZmYtbW9kZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMzQ4OWFmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAwNi1kaWZmLW1vZGUuc2gKQEAgLTAsMCArMSw2OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IG1vZGUgY2hhbmdlIGRpZmZzLgorCisnCisuIC4vdGVzdC1saWIuc2gKKworc2VkX3NjcmlwdD0ncy9cKDoxMDA2NDQgMTAwNzU1XCkgXCgnIiRPSURfUkVHRVgiJ1wpIFwyIC9cMSBYIFggLycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGZyb3R6ID5yZXpyb3YgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHJlenJvdiAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwllY2hvICR0cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NobW9kJyAnCisJdGVzdF9jaG1vZCAreCByZXpyb3YgJiYKKwlnaXQgZGlmZi1pbmRleCAkdHJlZSA+Y3VycmVudCAmJgorCXNlZCAtZSAiJHNlZF9zY3JpcHQiIDxjdXJyZW50ID5jaGVjayAmJgorCWVjaG8gIjoxMDA2NDQgMTAwNzU1IFggWCBNCXJlenJvdiIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBiaW5hcnkgZmlsZScgJworCWdpdCBjb21taXQgLW0gcmV6cm92ICYmCisJcHJpbnRmICJcMDBcMDFcMDJcMDNcMDRcMDVcMDYiID5iaW5iaW4gJiYKKwlnaXQgYWRkIGJpbmJpbiAmJgorCWdpdCBjb21taXQgLW0gYmluYmluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RhdCBvdXRwdXQgYWZ0ZXIgdGV4dCBjaG1vZCcgJworCXRlc3RfY2htb2QgLXggcmV6cm92ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSByZXpyb3YgfCAwCisJIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisJRU9GCisJZ2l0IGRpZmYgSEVBRCAtLXN0YXQgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvcnRzdGF0IG91dHB1dCBhZnRlciB0ZXh0IGNobW9kJyAnCisJdGFpbCAtbiAxIDxleHBlY3QgPmV4cGVjdC5zaG9ydCAmJgorCWdpdCBkaWZmIEhFQUQgLS1zaG9ydHN0YXQgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Quc2hvcnQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RhdCBvdXRwdXQgYWZ0ZXIgYmluYXJ5IGNobW9kJyAnCisJdGVzdF9jaG1vZCAreCBiaW5iaW4gJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkgYmluYmluIHwgQmluCisJIHJlenJvdiB8ICAgMAorCSAyIGZpbGVzIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKwlFT0YKKwlnaXQgZGlmZiBIRUFEIC0tc3RhdCA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG9ydHN0YXQgb3V0cHV0IGFmdGVyIGJpbmFyeSBjaG1vZCcgJworCXRhaWwgLW4gMSA8ZXhwZWN0ID5leHBlY3Quc2hvcnQgJiYKKwlnaXQgZGlmZiBIRUFEIC0tc2hvcnRzdGF0ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LnNob3J0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDctcmVuYW1lLTMuc2ggYi90L3Q0MDA3LXJlbmFtZS0zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxODdiN2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDA3LXJlbmFtZS0zLnNoCkBAIC0wLDAgKzEsOTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nUmVuYW1lIGludGVyYWN0aW9uIHdpdGggcGF0aHNwZWMuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaCA7IyB0ZXN0LWxpYiBjaGRpcidzIGludG8gdHJhc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSByZWZlcmVuY2UgdHJlZScgJworCW1rZGlyIHBhdGgwIHBhdGgxICYmCisJY3AgIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIvQ09QWUlORyBwYXRoMC9DT1BZSU5HICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMC9DT1BZSU5HICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWVjaG8gJHRyZWUKKycKKworYmxvYj0kKGdpdCBoYXNoLW9iamVjdCAiJFRFU1RfRElSRUNUT1JZL2RpZmYtbGliL0NPUFlJTkciKQordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSB3b3JrIHRyZWUnICcKKwljcCBwYXRoMC9DT1BZSU5HIHBhdGgxL0NPUFlJTkcgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIHBhdGgwL0NPUFlJTkcgcGF0aDEvQ09QWUlORworJworCisjIEluIHRoZSB0cmVlLCB0aGVyZSBpcyBvbmx5IHBhdGgwL0NPUFlJTkcuICBJbiB0aGUgY2FjaGUsIHBhdGgwIGFuZAorIyBwYXRoMSBib3RoIGhhdmUgQ09QWUlORyBhbmQgdGhlIGxhdHRlciBpcyBhIGNvcHkgb2YgcGF0aDAvQ09QWUlORy4KKyMgQ29tcGFyaW5nIHRoZSBmdWxsIHRyZWUgd2l0aCBjYWNoZSBzaG91bGQgdGVsbCB1cyBzby4KKworY2F0ID5leHBlY3RlZCA8PEVPRgorOjEwMDY0NCAxMDA2NDQgJGJsb2IgJGJsb2IgQzEwMAlwYXRoMC9DT1BZSU5HCXBhdGgxL0NPUFlJTkcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IGRldGVjdGlvbicgJworCWdpdCBkaWZmLWluZGV4IC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgZGV0ZWN0aW9uLCBjYWNoZWQnICcKKwlnaXQgZGlmZi1pbmRleCAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtLWNhY2hlZCAkdHJlZSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZAorJworCisjIEluIHRoZSB0cmVlLCB0aGVyZSBpcyBvbmx5IHBhdGgwL0NPUFlJTkcuICBJbiB0aGUgY2FjaGUsIHBhdGgwIGFuZAorIyBwYXRoMSBib3RoIGhhdmUgQ09QWUlORyBhbmQgdGhlIGxhdHRlciBpcyBhIGNvcHkgb2YgcGF0aDAvQ09QWUlORy4KKyMgSG93ZXZlciB3aGVuIHdlIHNheSB3ZSBjYXJlIG9ubHkgYWJvdXQgcGF0aDEsIHdlIHNob3VsZCBqdXN0IHNlZQorIyBwYXRoMS9DT1BZSU5HIHN1ZGRlbmx5IGFwcGVhcmluZyBmcm9tIG5vd2hlcmUsIG5vdCBkZXRlY3RlZCBhcworIyBhIGNvcHkgZnJvbSBwYXRoMC9DT1BZSU5HLgorCitjYXQgPmV4cGVjdGVkIDw8RU9GCis6MDAwMDAwIDEwMDY0NCAkWkVST19PSUQgJGJsb2IgQQlwYXRoMS9DT1BZSU5HCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29weSwgbGltaXRlZCB0byBhIHN1YnRyZWUnICcKKwlnaXQgZGlmZi1pbmRleCAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAkdHJlZSBwYXRoMSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d2VhayB3b3JrIHRyZWUnICcKKwlybSAtZiBwYXRoMC9DT1BZSU5HICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBwYXRoMC9DT1BZSU5HCisnCisjIEluIHRoZSB0cmVlLCB0aGVyZSBpcyBvbmx5IHBhdGgwL0NPUFlJTkcuICBJbiB0aGUgY2FjaGUsIHBhdGgwIGRvZXMKKyMgbm90IGhhdmUgQ09QWUlORyBhbnltb3JlIGFuZCBwYXRoMSBoYXMgQ09QWUlORyB3aGljaCBpcyBhIGNvcHkgb2YKKyMgcGF0aDAvQ09QWUlORy4gIFNob3dpbmcgdGhlIGZ1bGwgdHJlZSB3aXRoIGNhY2hlIHNob3VsZCB0ZWxsIHVzIGFib3V0CisjIHRoZSByZW5hbWUuCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKzoxMDA2NDQgMTAwNjQ0ICRibG9iICRibG9iIFIxMDAJcGF0aDAvQ09QWUlORwlwYXRoMS9DT1BZSU5HCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGRldGVjdGlvbicgJworCWdpdCBkaWZmLWluZGV4IC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkCisnCisKKyMgSW4gdGhlIHRyZWUsIHRoZXJlIGlzIG9ubHkgcGF0aDAvQ09QWUlORy4gIEluIHRoZSBjYWNoZSwgcGF0aDAgZG9lcworIyBub3QgaGF2ZSBDT1BZSU5HIGFueW1vcmUgYW5kIHBhdGgxIGhhcyBDT1BZSU5HIHdoaWNoIGlzIGEgY29weSBvZgorIyBwYXRoMC9DT1BZSU5HLiAgV2hlbiB3ZSBzYXkgd2UgY2FyZSBvbmx5IGFib3V0IHBhdGgxLCB3ZSBzaG91bGQganVzdAorIyBzZWUgcGF0aDEvQ09QWUlORyBhcHBlYXJpbmcgZnJvbSBub3doZXJlLgorCitjYXQgPmV4cGVjdGVkIDw8RU9GCis6MDAwMDAwIDEwMDY0NCAkWkVST19PSUQgJGJsb2IgQQlwYXRoMS9DT1BZSU5HCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lLCBsaW1pdGVkIHRvIGEgc3VidHJlZScgJworCWdpdCBkaWZmLWluZGV4IC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyICR0cmVlIHBhdGgxID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwOC1kaWZmLWJyZWFrLXJld3JpdGUuc2ggYi90L3Q0MDA4LWRpZmYtYnJlYWstcmV3cml0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMWNjZDQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAwOC1kaWZmLWJyZWFrLXJld3JpdGUuc2gKQEAgLTAsMCArMSwxNTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nQnJlYWsgYW5kIHRoZW4gcmVuYW1lCisKK1dlIGhhdmUgdHdvIHZlcnkgZGlmZmVyZW50IGZpbGVzLCBmaWxlMCBhbmQgZmlsZTEsIHJlZ2lzdGVyZWQgaW4gYSB0cmVlLgorCitXZSB1cGRhdGUgZmlsZTEgc28gZHJhc3RpY2FsbHkgdGhhdCBpdCBpcyBtb3JlIHNpbWlsYXIgdG8gZmlsZTAsIGFuZAordGhlbiByZW1vdmUgZmlsZTAuICBXaXRoIC1CLCBjaGFuZ2VzIHRvIGZpbGUxIHNob3VsZCBiZSBicm9rZW4gaW50bworc2VwYXJhdGUgZGVsZXRlIGFuZCBjcmVhdGUsIHJlc3VsdGluZyBpbiByZW1vdmFsIG9mIGZpbGUwLCByZW1vdmFsIG9mCitvcmlnaW5hbCBmaWxlMSBhbmQgY3JlYXRpb24gb2YgY29tcGxldGVseSByZXdyaXR0ZW4gZmlsZTEuICBUaGUgbGF0dGVyCit0d28gYXJlIHRoZW4gbWVyZ2VkIGJhY2sgaW50byBhIHNpbmdsZSAiY29tcGxldGUgcmV3cml0ZSIuCisKK0Z1cnRoZXIsIHdpdGggLUIgYW5kIC1NIHRvZ2V0aGVyLCB0aGVzZSB0aHJlZSBtb2RpZmljYXRpb25zIHNob3VsZAordHVybiBpbnRvIHJlbmFtZS1lZGl0IG9mIGZpbGUwIGludG8gZmlsZTEuCisKK1N0YXJ0aW5nIGZyb20gdGhlIHNhbWUgdHdvIGZpbGVzIGluIHRoZSB0cmVlLCB3ZSBzd2FwIGZpbGUwIGFuZCBmaWxlMS4KK1dpdGggLUIsIHRoaXMgc2hvdWxkIGJlIGRldGVjdGVkIGFzIHR3byBjb21wbGV0ZSByZXdyaXRlcy4KKworRnVydGhlciwgd2l0aCAtQiBhbmQgLU0gdG9nZXRoZXIsIHRoZXNlIHNob3VsZCB0dXJuIGludG8gdHdvIHJlbmFtZXMuCisnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2ggOyMgdGVzdC1saWIgY2hkaXIncyBpbnRvIHRyYXNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWNhdCAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi9SRUFETUUgPmZpbGUwICYmCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliL0NPUFlJTkcgPmZpbGUxICYmCisJYmxvYjBfaWQ9JChnaXQgaGFzaC1vYmplY3QgZmlsZTApICYmCisJYmxvYjFfaWQ9JChnaXQgaGFzaC1vYmplY3QgZmlsZTEpICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlMCBmaWxlMSAmJgorCWdpdCB0YWcgcmVmZXJlbmNlICQoZ2l0IHdyaXRlLXRyZWUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBmaWxlMSB3aXRoIGNvcHktZWRpdCBvZiBmaWxlMCBhbmQgcmVtb3ZlIGZpbGUwJyAnCisJc2VkIC1lICJzL2dpdC9HSVQvIiBmaWxlMCA+ZmlsZTEgJiYKKwlibG9iMl9pZD0kKGdpdCBoYXNoLW9iamVjdCBmaWxlMSkgJiYKKwlybSAtZiBmaWxlMCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgZmlsZTAgZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuIGRpZmYgd2l0aCAtQiAoIzEpJyAnCisJZ2l0IGRpZmYtaW5kZXggLUIgLS1jYWNoZWQgcmVmZXJlbmNlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjEwMDY0NCAwMDAwMDAgJGJsb2IwX2lkICRaRVJPX09JRCBECWZpbGUwCisJOjEwMDY0NCAxMDA2NDQgJGJsb2IxX2lkICRibG9iMl9pZCBNMTAwCWZpbGUxCisJRU9GCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW4gZGlmZiB3aXRoIC1CIGFuZCAtTSAoIzIpJyAnCisJZ2l0IGRpZmYtaW5kZXggLUIgLU0gcmVmZXJlbmNlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjEwMDY0NCAxMDA2NDQgJGJsb2IwX2lkICRibG9iMl9pZCBSMTAwCWZpbGUwCWZpbGUxCisJRU9GCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2FwIGZpbGUwIGFuZCBmaWxlMScgJworCXJtIC1mIGZpbGUwIGZpbGUxICYmCisJZ2l0IHJlYWQtdHJlZSAtbSByZWZlcmVuY2UgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXUgLWEgJiYKKwltdiBmaWxlMCB0bXAgJiYKKwltdiBmaWxlMSBmaWxlMCAmJgorCW12IHRtcCBmaWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggZmlsZTAgZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuIGRpZmYgd2l0aCAtQiAoIzMpJyAnCisJZ2l0IGRpZmYtaW5kZXggLUIgcmVmZXJlbmNlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjEwMDY0NCAxMDA2NDQgJGJsb2IwX2lkICRibG9iMV9pZCBNMTAwCWZpbGUwCisJOjEwMDY0NCAxMDA2NDQgJGJsb2IxX2lkICRibG9iMF9pZCBNMTAwCWZpbGUxCisJRU9GCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW4gZGlmZiB3aXRoIC1CIGFuZCAtTSAoIzQpJyAnCisJZ2l0IGRpZmYtaW5kZXggLUIgLU0gcmVmZXJlbmNlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjEwMDY0NCAxMDA2NDQgJGJsb2IxX2lkICRibG9iMV9pZCBSMTAwCWZpbGUxCWZpbGUwCisJOjEwMDY0NCAxMDA2NDQgJGJsb2IwX2lkICRibG9iMF9pZCBSMTAwCWZpbGUwCWZpbGUxCisJRU9GCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGZpbGUwIGludG8gc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50JyAnCisJcm0gLWYgZmlsZTAgJiYKKwl0ZXN0X2xuX3NfYWRkIGZyb3R6IGZpbGUwICYmCisJc2xpbmtfaWQ9JChwcmludGYgZnJvdHogfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1biBkaWZmIHdpdGggLUIgKCM1KScgJworCWdpdCBkaWZmLWluZGV4IC1CIHJlZmVyZW5jZSA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCToxMDA2NDQgMTIwMDAwICRibG9iMF9pZCAkc2xpbmtfaWQgVAlmaWxlMAorCToxMDA2NDQgMTAwNjQ0ICRibG9iMV9pZCAkYmxvYjBfaWQgTTEwMAlmaWxlMQorCUVPRgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuIGRpZmYgd2l0aCAtQiAtTSAoIzYpJyAnCisJZ2l0IGRpZmYtaW5kZXggLUIgLU0gcmVmZXJlbmNlID5jdXJyZW50ICYmCisKKwkjIGZpbGUwIGNoYW5nZWQgZnJvbSByZWd1bGFyIHRvIHN5bWxpbmsuICBmaWxlMSBpcyB0aGUgc2FtZSBhcyB0aGUgcHJlaW1hZ2UKKwkjIG9mIGZpbGUwLiAgQmVjYXVzZSB0aGUgY2hhbmdlIGRvZXMgbm90IG1ha2UgZmlsZTAgZGlzYXBwZWFyLCBmaWxlMSBpcworCSMgZGVub3RlZCBhcyBhIGNvcHkgb2YgZmlsZTAKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MTAwNjQ0IDEyMDAwMCAkYmxvYjBfaWQgJHNsaW5rX2lkIFQJZmlsZTAKKwk6MTAwNjQ0IDEwMDY0NCAkYmxvYjBfaWQgJGJsb2IwX2lkIEMJZmlsZTAJZmlsZTEKKwlFT0YKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1biBkaWZmIHdpdGggLU0gKCM3KScgJworCWdpdCBkaWZmLWluZGV4IC1NIHJlZmVyZW5jZSA+Y3VycmVudCAmJgorCisJIyBUaGlzIHNob3VsZCBub3QgbWlzdGFrZSBmaWxlMCBhcyB0aGUgY29weSBzb3VyY2Ugb2YgbmV3IGZpbGUxCisJIyBkdWUgdG8gdHlwZSBkaWZmZXJlbmNlcy4KKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MTAwNjQ0IDEyMDAwMCAkYmxvYjBfaWQgJHNsaW5rX2lkIFQJZmlsZTAKKwk6MTAwNjQ0IDEwMDY0NCAkYmxvYjFfaWQgJGJsb2IwX2lkIE0JZmlsZTEKKwlFT0YKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUxIGVkaXRlZCB0byBsb29rIGxpa2UgZmlsZTAgYW5kIGZpbGUwIHJlbmFtZS1lZGl0ZWQgdG8gZmlsZTInICcKKwlybSAtZiBmaWxlMCBmaWxlMSAmJgorCWdpdCByZWFkLXRyZWUgLW0gcmVmZXJlbmNlICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC11IC1hICYmCisJc2VkIC1lICJzL2dpdC9HSVQvIiBmaWxlMCA+ZmlsZTEgJiYKKwlzZWQgLWUgInMvZ2l0L0dFVC8iIGZpbGUwID5maWxlMiAmJgorCWJsb2IzX2lkPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUyKSAmJgorCXJtIC1mIGZpbGUwICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBmaWxlMCBmaWxlMSBmaWxlMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW4gZGlmZiB3aXRoIC1CICgjOCknICcKKwlnaXQgZGlmZi1pbmRleCAtQiByZWZlcmVuY2UgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MTAwNjQ0IDAwMDAwMCAkYmxvYjBfaWQgJFpFUk9fT0lEIEQJZmlsZTAKKwk6MTAwNjQ0IDEwMDY0NCAkYmxvYjFfaWQgJGJsb2IyX2lkIE0xMDAJZmlsZTEKKwk6MDAwMDAwIDEwMDY0NCAkWkVST19PSUQgJGJsb2IzX2lkIEEJZmlsZTIKKwlFT0YKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1biBkaWZmIHdpdGggLUIgLUMgKCM5KScgJworCWdpdCBkaWZmLWluZGV4IC1CIC1DIHJlZmVyZW5jZSA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCToxMDA2NDQgMTAwNjQ0ICRibG9iMF9pZCAkYmxvYjJfaWQgQzA5NQlmaWxlMAlmaWxlMQorCToxMDA2NDQgMTAwNjQ0ICRibG9iMF9pZCAkYmxvYjNfaWQgUjA5NQlmaWxlMAlmaWxlMgorCUVPRgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGN1cnJlbnQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDA5LWRpZmYtcmVuYW1lLTQuc2ggYi90L3Q0MDA5LWRpZmYtcmVuYW1lLTQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjYzYmRmMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMDktZGlmZi1yZW5hbWUtNC5zaApAQCAtMCwwICsxLDk4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1NhbWUgcmVuYW1lIGRldGVjdGlvbiBhcyB0NDAwMyBidXQgdGVzdGluZyBkaWZmLXJhdyAtei4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoIDsjIHRlc3QtbGliIGNoZGlyJ3MgaW50byB0cmFzaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSByZWZlcmVuY2UgdHJlZScgXAorICAgICdjYXQgIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIvQ09QWUlORyA+Q09QWUlORyAmJgorICAgICBlY2hvIGZyb3R6ID5yZXpyb3YgJiYKKyAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIENPUFlJTkcgcmV6cm92ICYmCisgICAgb3JpZz0kKGdpdCBoYXNoLW9iamVjdCBDT1BZSU5HKSAmJgorICAgIHRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICBlY2hvICR0cmVlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSB3b3JrIHRyZWUnIFwKKyAgICAnc2VkIC1lICdzL0hPV0VWRVIvSG93ZXZlci8nIDxDT1BZSU5HID5DT1BZSU5HLjEgJiYKKyAgICBzZWQgLWUgJ3MvR1BML0cuUC5ML2cnIDxDT1BZSU5HID5DT1BZSU5HLjIgJiYKKyAgICBybSAtZiBDT1BZSU5HICYmCisgICAgYzE9JChnaXQgaGFzaC1vYmplY3QgQ09QWUlORy4xKSAmJgorICAgIGMyPSQoZ2l0IGhhc2gtb2JqZWN0IENPUFlJTkcuMikgJiYKKyAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIENPUFlJTkcgQ09QWUlORy4/JworCisjIHRyZWUgaGFzIENPUFlJTkcgYW5kIHJlenJvdi4gIHdvcmsgdHJlZSBoYXMgQ09QWUlORy4xIGFuZCBDT1BZSU5HLjIsCisjIGJvdGggYXJlIHNsaWdodGx5IGVkaXRlZCwgYW5kIHVuY2hhbmdlZCByZXpyb3YuICBXZSBzYXkgQ09QWUlORy4xCisjIGFuZCBDT1BZSU5HLjIgYXJlIGJhc2VkIG9uIENPUFlJTkcsIGFuZCBkbyBub3Qgc2F5IGFueXRoaW5nIGFib3V0CisjIHJlenJvdi4KKworZ2l0IGRpZmYtaW5kZXggLXogLUMgJHRyZWUgPmN1cnJlbnQKKworY2F0ID5leHBlY3RlZCA8PEVPRgorOjEwMDY0NCAxMDA2NDQgJG9yaWcgJGMxIEMxMjM0CitDT1BZSU5HCitDT1BZSU5HLjEKKzoxMDA2NDQgMTAwNjQ0ICRvcmlnICRjMiBSMTIzNAorQ09QWUlORworQ09QWUlORy4yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIG91dHB1dCBmcm9tIHJlbmFtZS9jb3B5IGRldGVjdGlvbiAoIzEpJyBcCisgICAgJ2NvbXBhcmVfZGlmZl9yYXdfeiBjdXJyZW50IGV4cGVjdGVkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIHdvcmsgdHJlZSBhZ2FpbicgXAorICAgICdtdiBDT1BZSU5HLjIgQ09QWUlORyAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIENPUFlJTkcgQ09QWUlORy4xIENPUFlJTkcuMicKKworIyB0cmVlIGhhcyBDT1BZSU5HIGFuZCByZXpyb3YuICB3b3JrIHRyZWUgaGFzIENPUFlJTkcgYW5kIENPUFlJTkcuMSwKKyMgYm90aCBhcmUgc2xpZ2h0bHkgZWRpdGVkLCBhbmQgdW5jaGFuZ2VkIHJlenJvdi4gIFdlIHNheSBDT1BZSU5HLjEKKyMgaXMgYmFzZWQgb24gQ09QWUlORyBhbmQgQ09QWUlORyBpcyBzdGlsbCB0aGVyZSwgYW5kIGRvIG5vdCBzYXkgYW55dGhpbmcKKyMgYWJvdXQgcmV6cm92LgorCitnaXQgZGlmZi1pbmRleCAteiAtQyAkdHJlZSA+Y3VycmVudAorY2F0ID5leHBlY3RlZCA8PEVPRgorOjEwMDY0NCAxMDA2NDQgJG9yaWcgJGMyIE0KK0NPUFlJTkcKKzoxMDA2NDQgMTAwNjQ0ICRvcmlnICRjMSBDMTIzNAorQ09QWUlORworQ09QWUlORy4xCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIG91dHB1dCBmcm9tIHJlbmFtZS9jb3B5IGRldGVjdGlvbiAoIzIpJyBcCisgICAgJ2NvbXBhcmVfZGlmZl9yYXdfeiBjdXJyZW50IGV4cGVjdGVkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgdHJlZSBoYXMgQ09QWUlORyBhbmQgcmV6cm92LiAgd29yayB0cmVlIGhhcyB0aGUgc2FtZSBDT1BZSU5HIGFuZAorIyBjb3B5LWVkaXRlZCBDT1BZSU5HLjEsIGFuZCB1bmNoYW5nZWQgcmV6cm92LiAgV2Ugc2hvdWxkIG5vdCBzYXkKKyMgYW55dGhpbmcgYWJvdXQgcmV6cm92IG9yIENPUFlJTkcsIHNpbmNlIHRoZSByZXZpc2VkIGFnYWluIGRpZmYtcmF3CisjIG5vd3MgaG93IHRvIHNheSBDb3B5LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSB3b3JrIHRyZWUgb25jZSBhZ2FpbicgXAorICAgICdjYXQgIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIvQ09QWUlORyA+Q09QWUlORyAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIENPUFlJTkcgQ09QWUlORy4xJworCitnaXQgZGlmZi1pbmRleCAteiAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAkdHJlZSA+Y3VycmVudAorY2F0ID5leHBlY3RlZCA8PEVPRgorOjEwMDY0NCAxMDA2NDQgJG9yaWcgJGMxIEMxMjM0CitDT1BZSU5HCitDT1BZSU5HLjEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gcmVuYW1lL2NvcHkgZGV0ZWN0aW9uICgjMyknIFwKKyAgICAnY29tcGFyZV9kaWZmX3Jhd196IGN1cnJlbnQgZXhwZWN0ZWQnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxMC1kaWZmLXBhdGhzcGVjLnNoIGIvdC90NDAxMC1kaWZmLXBhdGhzcGVjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU1Y2EzNTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEwLWRpZmYtcGF0aHNwZWMuc2gKQEAgLTAsMCArMSwxNTAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nUGF0aHNwZWMgcmVzdHJpY3Rpb25zCisKK1ByZXBhcmU6CisgICAgICAgIGZpbGUwCisgICAgICAgIHBhdGgxL2ZpbGUxCisnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2ggOyMgdGVzdC1saWIgY2hkaXIncyBpbnRvIHRyYXNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgIHNldHVwIFwKKyAgICAnZWNobyBmcm90eiA+ZmlsZTAgJiYKKyAgICAgbWtkaXIgcGF0aDEgJiYKKyAgICAgZWNobyByZXpyb3YgPnBhdGgxL2ZpbGUxICYmCisgICAgIGJlZm9yZTA9JChnaXQgaGFzaC1vYmplY3QgZmlsZTApICYmCisgICAgIGJlZm9yZTE9JChnaXQgaGFzaC1vYmplY3QgcGF0aDEvZmlsZTEpICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZTAgcGF0aDEvZmlsZTEgJiYKKyAgICAgdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorICAgICBlY2hvICIkdHJlZSIgJiYKKyAgICAgZWNobyBuaXRmb2wgPmZpbGUwICYmCisgICAgIGVjaG8geW9taW4gPnBhdGgxL2ZpbGUxICYmCisgICAgIGFmdGVyMD0kKGdpdCBoYXNoLW9iamVjdCBmaWxlMCkgJiYKKyAgICAgYWZ0ZXIxPSQoZ2l0IGhhc2gtb2JqZWN0IHBhdGgxL2ZpbGUxKSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IGZpbGUwIHBhdGgxL2ZpbGUxJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbGltaXQgdG8gcGF0aCBzaG91bGQgc2hvdyBub3RoaW5nJyBcCisgICAgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlIC0tIHBhdGggPmN1cnJlbnQgJiYKKyAgICAgY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCis6MTAwNjQ0IDEwMDY0NCAkYmVmb3JlMSAkYWZ0ZXIxIE0JcGF0aDEvZmlsZTEKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xpbWl0IHRvIHBhdGgxIHNob3VsZCBzaG93IHBhdGgxL2ZpbGUxJyBcCisgICAgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlIC0tIHBhdGgxID5jdXJyZW50ICYmCisgICAgIGNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKKworY2F0ID5leHBlY3RlZCA8PEVPRgorOjEwMDY0NCAxMDA2NDQgJGJlZm9yZTEgJGFmdGVyMSBNCXBhdGgxL2ZpbGUxCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdsaW1pdCB0byBwYXRoMS8gc2hvdWxkIHNob3cgcGF0aDEvZmlsZTEnIFwKKyAgICAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJHRyZWUgLS0gcGF0aDEvID5jdXJyZW50ICYmCisgICAgIGNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKKworY2F0ID5leHBlY3RlZCA8PEVPRgorOjEwMDY0NCAxMDA2NDQgJGJlZm9yZTEgJGFmdGVyMSBNCXBhdGgxL2ZpbGUxCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICciKmZpbGUxIiBzaG91bGQgc2hvdyBwYXRoMS9maWxlMScgXAorICAgICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkdHJlZSAtLSAiKmZpbGUxIiA+Y3VycmVudCAmJgorICAgICBjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKzoxMDA2NDQgMTAwNjQ0ICRiZWZvcmUwICRhZnRlcjAgTQlmaWxlMAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbGltaXQgdG8gZmlsZTAgc2hvdWxkIHNob3cgZmlsZTAnIFwKKyAgICAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJHRyZWUgLS0gZmlsZTAgPmN1cnJlbnQgJiYKKyAgICAgY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbGltaXQgdG8gZmlsZTAvIHNob3VsZCBlbWl0IG5vdGhpbmcuJyBcCisgICAgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlIC0tIGZpbGUwLyA+Y3VycmVudCAmJgorICAgICBjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSBwYXRoc3BlYycgJworCXRyZWUyPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZWNobyAiJHRyZWUyIiAmJgorCWdpdCBkaWZmLXRyZWUgLXIgLS1uYW1lLW9ubHkgJHRyZWUgJHRyZWUyIC0tIHBhIHBhdGgxL2EgPmN1cnJlbnQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgd2l0aCB3aWxkY2FyZCBzaG93cyBkaXIgYWxzbyBtYXRjaGVzJyAnCisJZ2l0IGRpZmYtdHJlZSAtLW5hbWUtb25seSAkRU1QVFlfVFJFRSAkdHJlZSAtLSAiZioiID5yZXN1bHQgJiYKKwllY2hvIGZpbGUwID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLXIgd2l0aCB3aWxkY2FyZCcgJworCWdpdCBkaWZmLXRyZWUgLXIgLS1uYW1lLW9ubHkgJEVNUFRZX1RSRUUgJHRyZWUgLS0gIipmaWxlMSIgPnJlc3VsdCAmJgorCWVjaG8gcGF0aDEvZmlsZTEgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSB3aXRoIHdpbGRjYXJkIHNob3dzIGRpciBhbHNvIG1hdGNoZXMnICcKKwlnaXQgZGlmZi10cmVlIC0tbmFtZS1vbmx5ICR0cmVlICR0cmVlMiAtLSAicGF0aDEvZioiID5yZXN1bHQgJiYKKwllY2hvIHBhdGgxID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLXIgd2l0aCB3aWxkY2FyZCBmcm9tIGJlZ2lubmluZycgJworCWdpdCBkaWZmLXRyZWUgLXIgLS1uYW1lLW9ubHkgJHRyZWUgJHRyZWUyIC0tICJwYXRoMS8qZmlsZTEiID5yZXN1bHQgJiYKKwllY2hvIHBhdGgxL2ZpbGUxID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLXIgd2l0aCB3aWxkY2FyZCcgJworCWdpdCBkaWZmLXRyZWUgLXIgLS1uYW1lLW9ubHkgJHRyZWUgJHRyZWUyIC0tICJwYXRoMS9mKiIgPnJlc3VsdCAmJgorCWVjaG8gcGF0aDEvZmlsZTEgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN1Ym1vZHVsZXMnICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgaW5pdCBzdWJtb2QgJiYKKwkoIGNkIHN1Ym1vZCAmJiB0ZXN0X2NvbW1pdCBmaXJzdCApICYmCisJZ2l0IGFkZCBzdWJtb2QgJiYKKwlnaXQgY29tbWl0IC1tIGZpcnN0ICYmCisJKCBjZCBzdWJtb2QgJiYgdGVzdF9jb21taXQgc2Vjb25kICkgJiYKKwlnaXQgYWRkIHN1Ym1vZCAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSBpZ25vcmVzIHRyYWlsaW5nIHNsYXNoIG9uIHN1Ym1vZHVsZSBwYXRoJyAnCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgSEVBRF4gSEVBRCBzdWJtb2QgPmV4cGVjdCAmJgorCWdpdCBkaWZmIC0tbmFtZS1vbmx5IEhFQUReIEhFQUQgc3VibW9kLyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIG11bHRpcGxlIHdpbGRjYXJkIHBhdGhzcGVjcycgJworCW1rZGlyIHBhdGgyICYmCisJZWNobyByZXpyb3YgPnBhdGgyL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMi9maWxlMSAmJgorCXRyZWUzPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgJHRyZWUgJHRyZWUzIC0tICJwYXRoMioxIiAicGF0aDEqMSIgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwlwYXRoMS9maWxlMQorCXBhdGgyL2ZpbGUxCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWNhY2hlIGlnbm9yZXMgdHJhaWxpbmcgc2xhc2ggb24gc3VibW9kdWxlIHBhdGgnICcKKwlnaXQgZGlmZiAtLW5hbWUtb25seSBIRUFEXiBzdWJtb2QgPmV4cGVjdCAmJgorCWdpdCBkaWZmIC0tbmFtZS1vbmx5IEhFQUReIHN1Ym1vZC8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDExLWRpZmYtc3ltbGluay5zaCBiL3QvdDQwMTEtZGlmZi1zeW1saW5rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcxNzAzNGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDExLWRpZmYtc3ltbGluay5zaApAQCAtMCwwICsxLDE3NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKb2hhbm5lcyBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZGlmZiBvZiBzeW1saW5rcy4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCisKKyMgUHJpbnQgdGhlIHNob3J0IE9JRCBvZiBhIHN5bWxpbmsgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KK3N5bWxpbmtfb2lkICgpIHsKKwlsb2NhbCBvaWQ9JChwcmludGYgIiVzIiAiJDEiIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkb2lkIgorfQorCisjIFByaW50IHRoZSBzaG9ydCBPSUQgb2YgdGhlIGdpdmVuIGZpbGUuCitzaG9ydF9vaWQgKCkgeworCWxvY2FsIG9pZD0kKGdpdCBoYXNoLW9iamVjdCAiJDEiKSAmJgorCWdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJG9pZCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBuZXcgc3ltbGluayBhbmQgZmlsZScgJworCXN5bWxpbms9JChzeW1saW5rX29pZCB4eXp6eSkgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9mcm90eiBiL2Zyb3R6CisJbmV3IGZpbGUgbW9kZSAxMjAwMDAKKwlpbmRleCAwMDAwMDAwLi4kc3ltbGluaworCS0tLSAvZGV2L251bGwKKwkrKysgYi9mcm90egorCUBAIC0wLDAgKzEgQEAKKwkreHl6enkKKwlcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwlkaWZmIC0tZ2l0IGEvbml0Zm9sIGIvbml0Zm9sCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi4kc3ltbGluaworCS0tLSAvZGV2L251bGwKKwkrKysgYi9uaXRmb2wKKwlAQCAtMCwwICsxIEBACisJK3h5enp5CisJRU9GCisKKwkjIHRoZSBlbXB0eSB0cmVlCisJZ2l0IHVwZGF0ZS1pbmRleCAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKworCXRlc3RfbG5fc19hZGQgeHl6enkgZnJvdHogJiYKKwllY2hvIHh5enp5ID5uaXRmb2wgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG5pdGZvbCAmJgorCUdJVF9ESUZGX09QVFM9LS11bmlmaWVkPTAgZ2l0IGRpZmYtaW5kZXggLU0gLXAgJHRyZWUgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIHVuY2hhbmdlZCBzeW1saW5rIGFuZCBmaWxlJyAgJworCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZyb3R6IG5pdGZvbCAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYtaW5kZXggLS1uYW1lLW9ubHkgJHRyZWUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIHJlbW92ZWQgc3ltbGluayBhbmQgZmlsZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL2Zyb3R6IGIvZnJvdHoKKwlkZWxldGVkIGZpbGUgbW9kZSAxMjAwMDAKKwlpbmRleCAkc3ltbGluay4uMDAwMDAwMAorCS0tLSBhL2Zyb3R6CisJKysrIC9kZXYvbnVsbAorCUBAIC0xICswLDAgQEAKKwkteHl6enkKKwlcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwlkaWZmIC0tZ2l0IGEvbml0Zm9sIGIvbml0Zm9sCisJZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggJHN5bWxpbmsuLjAwMDAwMDAKKwktLS0gYS9uaXRmb2wKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS14eXp6eQorCUVPRgorCW12IGZyb3R6IGZyb3R6MiAmJgorCW12IG5pdGZvbCBuaXRmb2wyICYmCisJZ2l0IGRpZmYtaW5kZXggLU0gLXAgJHRyZWUgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGlkZW50aWNhbCwgYnV0IG5ld2x5IGNyZWF0ZWQgc3ltbGluayBhbmQgZmlsZScgJworCT5leHBlY3RlZCAmJgorCXJtIC1mIGZyb3R6IG5pdGZvbCAmJgorCWVjaG8geHl6enkgPm5pdGZvbCAmJgorCXRlc3QtdG9vbCBjaG10aW1lICsxMCBuaXRmb2wgJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCisJdGhlbgorCQlsbiAtcyB4eXp6eSBmcm90egorCWVsc2UKKwkJcHJpbnRmIHh5enp5ID5mcm90egorCQkjIHRoZSBzeW1saW5rIHByb3BlcnR5IHByb3BhZ2F0ZXMgZnJvbSB0aGUgaW5kZXgKKwlmaSAmJgorCWdpdCBkaWZmLWluZGV4IC1NIC1wICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGN1cnJlbnQgJiYKKworCT5leHBlY3RlZCAmJgorCWdpdCBkaWZmLWluZGV4IC1NIC1wIC13ICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBkaWZmZXJlbnQgc3ltbGluayBhbmQgZmlsZScgJworCW5ldz0kKHN5bWxpbmtfb2lkIHl4eXl6KSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL2Zyb3R6IGIvZnJvdHoKKwlpbmRleCAkc3ltbGluay4uJG5ldyAxMjAwMDAKKwktLS0gYS9mcm90egorCSsrKyBiL2Zyb3R6CisJQEAgLTEgKzEgQEAKKwkteHl6enkKKwlcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwkreXh5eXoKKwlcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwlkaWZmIC0tZ2l0IGEvbml0Zm9sIGIvbml0Zm9sCisJaW5kZXggJHN5bWxpbmsuLiRuZXcgMTAwNjQ0CisJLS0tIGEvbml0Zm9sCisJKysrIGIvbml0Zm9sCisJQEAgLTEgKzEgQEAKKwkteHl6enkKKwkreXh5eXoKKwlFT0YKKwlybSAtZiBmcm90eiAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKKwl0aGVuCisJCWxuIC1zIHl4eXl6IGZyb3R6CisJZWxzZQorCQlwcmludGYgeXh5eXogPmZyb3R6CisJCSMgdGhlIHN5bWxpbmsgcHJvcGVydHkgcHJvcGFnYXRlcyBmcm9tIHRoZSBpbmRleAorCWZpICYmCisJZWNobyB5eHl5eiA+bml0Zm9sICYmCisJZ2l0IGRpZmYtaW5kZXggLU0gLXAgJHRyZWUgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkaWZmIHN5bWxpbmtzIHdpdGggbm9uLWV4aXN0aW5nIHRhcmdldHMnICcKKwlsbiAtcyBuYXJmIHBpbmt5ICYmCisJbG4gLXMgdGFrZVwgb3ZlciBicmFpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggcGlua3kgYnJhaW4gPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwlncmVwIG5hcmYgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc2V0dXAgc3ltbGlua3Mgd2l0aCBhdHRyaWJ1dGVzJyAnCisJZWNobyAiKi5iaW4gZGlmZj1iaW4iID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvIGNvbnRlbnQgPmZpbGUuYmluICYmCisJbG4gLXMgZmlsZS5iaW4gbGluay5iaW4gJiYKKwlnaXQgYWRkIC1OIGZpbGUuYmluIGxpbmsuYmluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N5bWxpbmtzIGRvIG5vdCByZXNwZWN0IHVzZXJkaWZmIGNvbmZpZyBieSBwYXRoJyAnCisJZmlsZT0kKHNob3J0X29pZCBmaWxlLmJpbikgJiYKKwlsaW5rPSQoc3ltbGlua19vaWQgZmlsZS5iaW4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL2ZpbGUuYmluIGIvZmlsZS5iaW4KKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLiRmaWxlCisJQmluYXJ5IGZpbGVzIC9kZXYvbnVsbCBhbmQgYi9maWxlLmJpbiBkaWZmZXIKKwlkaWZmIC0tZ2l0IGEvbGluay5iaW4gYi9saW5rLmJpbgorCW5ldyBmaWxlIG1vZGUgMTIwMDAwCisJaW5kZXggMDAwMDAwMC4uJGxpbmsKKwktLS0gL2Rldi9udWxsCisJKysrIGIvbGluay5iaW4KKwlAQCAtMCwwICsxIEBACisJK2ZpbGUuYmluCisJXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisJRU9GCisJZ2l0IGNvbmZpZyBkaWZmLmJpbi5iaW5hcnkgdHJ1ZSAmJgorCWdpdCBkaWZmIGZpbGUuYmluIGxpbmsuYmluID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxMi1kaWZmLWJpbmFyeS5zaCBiL3QvdDQwMTItZGlmZi1iaW5hcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjU3OWM4MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTItZGlmZi1iaW5hcnkuc2gKQEAgLTAsMCArMSwxMzMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nQmluYXJ5IGRpZmYgYW5kIGFwcGx5CisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdC5iaW5hcnktbnVtc3RhdCA8PFxFT0YKKzEJMQlhCistCS0JYgorMQkxCWMKKy0JLQlkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSByZXBvc2l0b3J5JyAnCisJZWNobyBBSVQgPmEgJiYgZWNobyBCSVQgPmIgJiYgZWNobyBDSVQgPmMgJiYgZWNobyBESVQgPmQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgYiBjIGQgJiYKKwllY2hvIGdpdCA+YSAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyA+YiAmJgorCWVjaG8gZ2l0ID5jICYmCisJY2F0IGIgYiA+ZAorJworCitjYXQgPiBleHBlY3RlZCA8PFxFT0YKKyBhIHwgICAgMiArLQorIGIgfCAgQmluCisgYyB8ICAgIDIgKy0KKyBkIHwgIEJpbgorIDQgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLXN0YXQgb3V0cHV0IGZvciBiaW5hcnkgZmlsZSBjaGFuZ2UnICcKKwlnaXQgZGlmZiA+ZGlmZiAmJgorCWdpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLXNob3J0c3RhdCBvdXRwdXQgZm9yIGJpbmFyeSBmaWxlIGNoYW5nZScgJworCXRhaWwgLW4gMSBleHBlY3RlZCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS1zaG9ydHN0YXQgPmN1cnJlbnQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLXNob3J0c3RhdCBvdXRwdXQgZm9yIGJpbmFyeSBmaWxlIGNoYW5nZSBvbmx5JyAnCisJZWNobyAiIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZGlmZiAtLXNob3J0c3RhdCAtLSBiID5jdXJyZW50ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1udW1zdGF0IG5vdGljZXMgYmluYXJ5IGZpbGUgY2hhbmdlJyAnCisJZ2l0IGRpZmYgPmRpZmYgJiYKKwlnaXQgYXBwbHkgLS1udW1zdGF0IDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJpbmFyeS1udW1zdGF0IGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1udW1zdGF0IHVuZGVyc3RhbmRzIGRpZmYgLS1iaW5hcnkgZm9ybWF0JyAnCisJZ2l0IGRpZmYgLS1iaW5hcnkgPmRpZmYgJiYKKwlnaXQgYXBwbHkgLS1udW1zdGF0IDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJpbmFyeS1udW1zdGF0IGN1cnJlbnQKKycKKworIyBhcHBseSBuZWVkcyB0byBiZSBhYmxlIHRvIHNraXAgdGhlIGJpbmFyeSBtYXRlcmlhbCBjb3JyZWN0bHkKKyMgaW4gb3JkZXIgdG8gcmVwb3J0IHRoZSBsaW5lIG51bWJlciBvZiBhIGNvcnJ1cHQgcGF0Y2guCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnYXBwbHkgZGV0ZWN0aW5nIGNvcnJ1cHQgcGF0Y2ggY29ycmVjdGx5JyAnCisJZ2l0IGRpZmYgPm91dHB1dCAmJgorCXNlZCAtZSAicy8tQ0lUL3hDSVQvIiA8b3V0cHV0ID5icm9rZW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1zdGF0IC0tc3VtbWFyeSBicm9rZW4gMj5kZXRlY3RlZCAmJgorCWRldGVjdGVkPSQoY2F0IGRldGVjdGVkKSAmJgorCWRldGVjdGVkPSQoZXhwciAiJGRldGVjdGVkIiA6ICJlcnJvci4qYXQgbGluZSBcXChbMC05XSpcXClcJCIpICYmCisJZGV0ZWN0ZWQ9JChzZWQgLW5lICIke2RldGVjdGVkfXAiIGJyb2tlbikgJiYKKwl0ZXN0ICIkZGV0ZWN0ZWQiID0geENJVAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnYXBwbHkgZGV0ZWN0aW5nIGNvcnJ1cHQgcGF0Y2ggY29ycmVjdGx5JyAnCisJZ2l0IGRpZmYgLS1iaW5hcnkgfCBzZWQgLWUgInMvLUNJVC94Q0lULyIgPmJyb2tlbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IGJyb2tlbiAyPmRldGVjdGVkICYmCisJZGV0ZWN0ZWQ9JChjYXQgZGV0ZWN0ZWQpICYmCisJZGV0ZWN0ZWQ9JChleHByICIkZGV0ZWN0ZWQiIDogImVycm9yLiphdCBsaW5lIFxcKFswLTldKlxcKVwkIikgJiYKKwlkZXRlY3RlZD0kKHNlZCAtbmUgIiR7ZGV0ZWN0ZWR9cCIgYnJva2VuKSAmJgorCXRlc3QgIiRkZXRlY3RlZCIgPSB4Q0lUCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWwgY29tbWl0JyAnZ2l0IGNvbW1pdCAtYSAtbSBpbml0aWFsJworCisjIFRyeSByZW1vdmFsIChiKSwgbW9kaWZpY2F0aW9uIChkKSwgYW5kIGNyZWF0aW9uIChlKS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggd2l0aCAtLWJpbmFyeScgJworCWVjaG8gQUlUID5hICYmIG12IGIgZSAmJiBlY2hvIENJVCA+YyAmJiBjYXQgZSA+ZCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgYSBiIGMgZCBlICYmCisJdHJlZTA9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLWJpbmFyeSA+Y3VycmVudCAmJgorCWdpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IHBhdGNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhcHBseSAtLWJpbmFyeSAtLWluZGV4IDxjdXJyZW50ICYmCisJdHJlZTE9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwl0ZXN0ICIkdHJlZTEiID0gIiR0cmVlMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLW5vLWluZGV4IHdpdGggYmluYXJ5IGNyZWF0aW9uJyAnCisJZWNobyBRIHwgcV90b19udWwgPmJpbmFyeSAmJgorCSMgaGlkZSBlcnJvciBjb2RlIGZyb20gZGlmZiwgd2hpY2gganVzdCBpbmRpY2F0ZXMgZGlmZmVyZW5jZXMKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGRpZmYgLS1iaW5hcnkgLS1uby1pbmRleCAvZGV2L251bGwgYmluYXJ5ID5jdXJyZW50ICYmCisJcm0gYmluYXJ5ICYmCisJZ2l0IGFwcGx5IC0tYmluYXJ5IDxjdXJyZW50ICYmCisJZWNobyBRID5leHBlY3RlZCAmJgorCW51bF90b19xIDxiaW5hcnkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorIGJpbmZpbGUgIHwgICBCaW4gMCAtPiAxMDI2IGJ5dGVzCisgdGV4dGZpbGUgfCAxMDAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLXN0YXQgd2l0aCBiaW5hcnkgZmlsZXMgYW5kIGJpZyBjaGFuZ2UgY291bnQnICcKKwlwcmludGYgIlwwMVwwMCUxMDI0ZCIgMSA+YmluZmlsZSAmJgorCWdpdCBhZGQgYmluZmlsZSAmJgorCWk9MCAmJgorCXdoaWxlIHRlc3QgJGkgLWx0IDEwMDAwOyBkbworCQllY2hvICRpICYmCisJCWk9JCgoJGkgKyAxKSkKKwlkb25lID50ZXh0ZmlsZSAmJgorCWdpdCBhZGQgdGV4dGZpbGUgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLXN0YXQgYmluZmlsZSB0ZXh0ZmlsZSA+b3V0cHV0ICYmCisJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDEzLWRpZmYtdmFyaW91cy5zaCBiL3QvdDQwMTMtZGlmZi12YXJpb3VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNmNjBmN2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzLWRpZmYtdmFyaW91cy5zaApAQCAtMCwwICsxLDQ1MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdWYXJpb3VzIGRpZmYgZm9ybWF0dGluZyBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDA6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAwOjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisKKwlta2RpciBkaXIgJiYKKwlta2RpciBkaXIyICYmCisJZm9yIGkgaW4gMSAyIDM7IGRvIGVjaG8gJGk7IGRvbmUgPmZpbGUwICYmCisJZm9yIGkgaW4gQSBCOyBkbyBlY2hvICRpOyBkb25lID5kaXIvc3ViICYmCisJY2F0IGZpbGUwID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTAgZmlsZTIgZGlyL3N1YiAmJgorCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCisJZ2l0IGJyYW5jaCBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDE6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAxOjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisKKwlmb3IgaSBpbiA0IDUgNjsgZG8gZWNobyAkaTsgZG9uZSA+PmZpbGUwICYmCisJZm9yIGkgaW4gQyBEOyBkbyBlY2hvICRpOyBkb25lID4+ZGlyL3N1YiAmJgorCXJtIC1mIGZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBmaWxlMCBmaWxlMiBkaXIvc3ViICYmCisJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kJHtMRn0ke0xGfVRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuIiAmJgorCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAyOjAwICswMDAwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNi0wNi0yNiAwMDowMjowMCArMDAwMCIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURSAmJgorCisJZm9yIGkgaW4gQSBCIEM7IGRvIGVjaG8gJGk7IGRvbmUgPmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWZvciBpIGluIEUgRjsgZG8gZWNobyAkaTsgZG9uZSA+PmRpci9zdWIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGRpci9zdWIgJiYKKwlnaXQgY29tbWl0IC1tIFRoaXJkICYmCisKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDM6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAzOjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWZvciBpIGluIEEgQiBDOyBkbyBlY2hvICRpOyBkb25lID4+ZmlsZTAgJiYKKwlmb3IgaSBpbiAxIDI7IGRvIGVjaG8gJGk7IGRvbmUgPj5kaXIvc3ViICYmCisJY2F0IGRpci9zdWIgPmZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCWdpdCB1cGRhdGUtaW5kZXggZmlsZTAgZGlyL3N1YiAmJgorCWdpdCBjb21taXQgLW0gU2lkZSAmJgorCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjA0OjAwICswMDAwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNi0wNi0yNiAwMDowNDowMCArMDAwMCIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBwdWxsIC1zIG91cnMgLiBzaWRlICYmCisKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDU6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjA1OjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisKKwlmb3IgaSBpbiBBIEIgQzsgZG8gZWNobyAkaTsgZG9uZSA+PmZpbGUwICYmCisJZm9yIGkgaW4gMSAyOyBkbyBlY2hvICRpOyBkb25lID4+ZGlyL3N1YiAmJgorCWdpdCB1cGRhdGUtaW5kZXggZmlsZTAgZGlyL3N1YiAmJgorCisJbWtkaXIgZGlyMyAmJgorCWNwIGRpci9zdWIgZGlyMy9zdWIgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSArMSBkaXIzL3N1YiAmJgorCisJZ2l0IGNvbmZpZyBsb2cuc2hvd3Jvb3QgZmFsc2UgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgJiYKKworCUdJVF9BVVRIT1JfREFURT0iMjAwNi0wNi0yNiAwMDowNjowMCArMDAwMCIgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDY6MDAgKzAwMDAiICYmCisJZXhwb3J0IEdJVF9BVVRIT1JfREFURSBHSVRfQ09NTUlUVEVSX0RBVEUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmVhcnJhbmdlIGluaXRpYWwgJiYKKwlmb3IgaSBpbiBCIEE7IGRvIGVjaG8gJGk7IGRvbmUgPmRpci9zdWIgJiYKKwlnaXQgYWRkIGRpci9zdWIgJiYKKwlnaXQgY29tbWl0IC1tICJSZWFycmFuZ2VkIGxpbmVzIGluIGRpci9zdWIiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjA2OjAwICswMDAwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNi0wNi0yNiAwMDowNjowMCArMDAwMCIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURSAmJgorCWdpdCBjaGVja291dCAtYiBtb2RlIGluaXRpYWwgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tY2htb2Q9K3ggZmlsZTAgJiYKKwlnaXQgY29tbWl0IC1tICJ1cGRhdGUgbW9kZSIgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDY6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjA2OjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5vdGUgaW5pdGlhbCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1jaG1vZD0reCBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gInVwZGF0ZSBtb2RlIChmaWxlMikiICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAibm90ZSIgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisKKwkjIFNhbWUgbWVyZ2UgYXMgbWFzdGVyLCBidXQgd2l0aCBwYXJlbnRzIHJldmVyc2VkLiBIaWRlIGl0IGluIGEKKwkjIHBzZXVkby1yZWYgdG8gYXZvaWQgaW1wYWN0aW5nIHRlc3RzIHdpdGggLS1hbGwuCisJY29tbWl0PSQoZWNobyByZXZlcnNlIHwKKwkJIGdpdCBjb21taXQtdHJlZSAtcCBtYXN0ZXJeMiAtcCBtYXN0ZXJeMSBtYXN0ZXJee3RyZWV9KSAmJgorCWdpdCB1cGRhdGUtcmVmIFJFVkVSU0UgJGNvbW1pdCAmJgorCisJZ2l0IGNvbmZpZyBkaWZmLnJlbmFtZXMgZmFsc2UgJiYKKworCWdpdCBzaG93LWJyYW5jaAorJworCis6IDw8XEVPRgorISBbaW5pdGlhbF0gSW5pdGlhbAorICogW21hc3Rlcl0gTWVyZ2UgYnJhbmNoICdzaWRlJworICAhIFtyZWFycmFuZ2VdIFJlYXJyYW5nZWQgbGluZXMgaW4gZGlyL3N1YgorICAgISBbc2lkZV0gU2lkZQorLS0tLQorICArICBbcmVhcnJhbmdlXSBSZWFycmFuZ2VkIGxpbmVzIGluIGRpci9zdWIKKyAtICAgW21hc3Rlcl0gTWVyZ2UgYnJhbmNoICdzaWRlJworICogKyBbc2lkZV0gU2lkZQorICogICBbbWFzdGVyXl0gVGhpcmQKKyAqICAgW21hc3Rlcn4yXSBTZWNvbmQKKysqKysgW2luaXRpYWxdIEluaXRpYWwKK0VPRgorCitwcm9jZXNzX2RpZmZzICgpIHsKKwlfeDA0PSJbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXSIgJiYKKwlfeDA3PSIkX3gwNVswLTlhLWZdWzAtOWEtZl0iICYmCisJc2VkIC1lICJzLyRPSURfUkVHRVgvJFpFUk9fT0lEL2ciIFwKKwkgICAgLWUgInMvRnJvbSAkX3g0MCAvRnJvbSAkWkVST19PSUQgLyIgXAorCSAgICAtZSAicy9mcm9tICRfeDQwKS9mcm9tICRaRVJPX09JRCkvIiBcCisJICAgIC1lICJzL2NvbW1pdCAkX3g0MFwkL2NvbW1pdCAkWkVST19PSUQvIiBcCisJICAgIC1lICJzL2NvbW1pdCAkX3g0MCAoL2NvbW1pdCAkWkVST19PSUQgKC8iIFwKKwkgICAgLWUgInMvJF94NDAgJF94NDAgJF94NDAvJFpFUk9fT0lEICRaRVJPX09JRCAkWkVST19PSUQvIiBcCisJICAgIC1lICJzLyRfeDQwICRfeDQwIC8kWkVST19PSUQgJFpFUk9fT0lEIC8iIFwKKwkgICAgLWUgInMvXiRfeDQwICRfeDQwJC8kWkVST19PSUQgJFpFUk9fT0lELyIgXAorCSAgICAtZSAicy9eJF94NDAgLyRaRVJPX09JRCAvIiBcCisJICAgIC1lICJzL14kX3g0MCQvJFpFUk9fT0lELyIgXAorCSAgICAtZSAicy8kX3gwN1wuXC4kX3gwNy9mZmZmZmZmLi5mZmZmZmZmL2ciIFwKKwkgICAgLWUgInMvJF94MDcsJF94MDdcLlwuJF94MDcvZmZmZmZmZixmZmZmZmZmLi5mZmZmZmZmL2ciIFwKKwkgICAgLWUgInMvJF94MDcgJF94MDcgJF94MDcvZmZmZmZmZiBmZmZmZmZmIGZmZmZmZmYvZyIgXAorCSAgICAtZSAicy8kX3gwNyAkX3gwNyAvZmZmZmZmZiBmZmZmZmZmIC9nIiBcCisJICAgIC1lICJzL01lcmdlOiAkX3gwNyAkX3gwNy9NZXJnZTogZmZmZmZmZiBmZmZmZmZmL2ciIFwKKwkgICAgLWUgInMvJF94MDdcLlwuXC4vZmZmZmZmZi4uLi9nIiBcCisJICAgIC1lICJzLyAkX3gwNFwuXC5cLi8gZmZmZi4uLi9nIiBcCisJICAgIC1lICJzLyAkX3gwNC8gZmZmZi9nIiBcCisJICAgICIkMSIKK30KKworVj0kKGdpdCB2ZXJzaW9uIHwgc2VkIC1lICdzL15naXQgdmVyc2lvbiAvLycgLWUgJ3MvXC4vXFwuL2cnKQord2hpbGUgcmVhZCBtYWdpYyBjbWQKK2RvCisJY2FzZSAiJG1hZ2ljIiBpbgorCScnIHwgJyMnKikKKwkJY29udGludWUgOzsKKwk6KikKKwkJbWFnaWM9JHttYWdpYyM6fQorCQlsYWJlbD0iJG1hZ2ljLSRjbWQiCisJCWNhc2UgIiRtYWdpYyIgaW4KKwkJbm9lbGxpcHNlcykgOzsKKwkJKikKKwkJCUJVRyAidW5rbm93biBtYWdpYyAkbWFnaWMiIDs7CisJCWVzYWMgOzsKKwkqKQorCQljbWQ9IiRtYWdpYyAkY21kIiBtYWdpYz0KKwkJbGFiZWw9IiRjbWQiIDs7CisJZXNhYworCXRlc3Q9JChlY2hvICIkbGFiZWwiIHwgc2VkIC1lICdzfFsvIF1bLyBdKnxffGcnKQorCXBmeD0kKHByaW50ZiAiJTA0ZCIgJHRlc3RfY291bnQpCisJZXhwZWN0PSIkVEVTVF9ESVJFQ1RPUlkvdDQwMTMvZGlmZi4kdGVzdCIKKwlhY3R1YWw9IiRwZngtZGlmZi4kdGVzdCIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCAkY21kICMgbWFnaWMgaXMgJHttYWdpYzotKG5vdCB1c2VkKX0iICcKKwkJeworCQkJZWNobyAiJCBnaXQgJGNtZCIKKwkJCWNhc2UgIiRtYWdpYyIgaW4KKwkJCSIiKQorCQkJCUdJVF9QUklOVF9TSEExX0VMTElQU0lTPXllcyBnaXQgJGNtZCA7OworCQkJbm9lbGxpcHNlcykKKwkJCQlnaXQgJGNtZCA7OworCQkJZXNhYyB8CisJCQlzZWQgLWUgInMvXlxcKC0qXFwpJFZcXCgtKlxcKVwkL1xcMWctaS10LS12LWUtci1zLWktby1uXDIvIiBcCisJCQkgICAgLWUgInMvXlxcKC4qbWl4ZWQ7IGJvdW5kYXJ5PVwiLSpcXCkkVlxcKC0qXFwpXCJcJC9cXDFnLWktdC0tdi1lLXItcy1pLW8tblwyXCIvIgorCQkJZWNobyAiXCQiCisJCX0gPiIkYWN0dWFsIiAmJgorCQlpZiB0ZXN0IC1mICIkZXhwZWN0IgorCQl0aGVuCisJCQlwcm9jZXNzX2RpZmZzICIkYWN0dWFsIiA+YWN0dWFsICYmCisJCQlwcm9jZXNzX2RpZmZzICIkZXhwZWN0IiA+ZXhwZWN0ICYmCisJCQljYXNlICRjbWQgaW4KKwkJCSpmb3JtYXQtcGF0Y2gqIHwgKi1zdGF0KikKKwkJCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbDs7CisJCQkqKQorCQkJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWw7OworCQkJZXNhYyAmJgorCQkJcm0gLWYgIiRhY3R1YWwiIGFjdHVhbCBleHBlY3QKKwkJZWxzZQorCQkJIyB0aGlzIGlzIHRvIGhlbHAgZGV2ZWxvcGluZyBuZXcgdGVzdHMuCisJCQljcCAiJGFjdHVhbCIgIiRleHBlY3QiCisJCQlmYWxzZQorCQlmaQorCScKK2RvbmUgPDxcRU9GCitkaWZmLXRyZWUgaW5pdGlhbAorZGlmZi10cmVlIC1yIGluaXRpYWwKK2RpZmYtdHJlZSAtciAtLWFiYnJldiBpbml0aWFsCitkaWZmLXRyZWUgLXIgLS1hYmJyZXY9NCBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IGluaXRpYWwKK2RpZmYtdHJlZSAtLXJvb3QgLS1hYmJyZXYgaW5pdGlhbAorOm5vZWxsaXBzZXMgZGlmZi10cmVlIC0tcm9vdCAtLWFiYnJldiBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IC1yIGluaXRpYWwKK2RpZmYtdHJlZSAtLXJvb3QgLXIgLS1hYmJyZXYgaW5pdGlhbAorOm5vZWxsaXBzZXMgZGlmZi10cmVlIC0tcm9vdCAtciAtLWFiYnJldiBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IC1yIC0tYWJicmV2PTQgaW5pdGlhbAorOm5vZWxsaXBzZXMgZGlmZi10cmVlIC0tcm9vdCAtciAtLWFiYnJldj00IGluaXRpYWwKK2RpZmYtdHJlZSAtcCBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IC1wIGluaXRpYWwKK2RpZmYtdHJlZSAtLXBhdGNoLXdpdGgtc3RhdCBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKK2RpZmYtdHJlZSAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwKK2RpZmYtdHJlZSAtLXJvb3QgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCisKK2RpZmYtdHJlZSAtLXByZXR0eSBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSAtcCBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1zdGF0IGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXN1bW1hcnkgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tc3RhdCAtLXN1bW1hcnkgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtcCBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tc3RhdCBpbml0aWFsCisjIGltcHJvdmVkIGJ5IFRpbW8ncyBwYXRjaAorZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXN1bW1hcnkgaW5pdGlhbAorIyBpbXByb3ZlZCBieSBUaW1vJ3MgcGF0Y2gKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdW1tYXJ5IC1yIGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdGF0IC0tc3VtbWFyeSBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorCitkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLXAgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1yb290IC1wIGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eT1vbmVsaW5lIC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKKyMgaW1wcm92ZWQgYnkgVGltbydzIHBhdGNoCitkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCisKK2RpZmYtdHJlZSAtLXByZXR0eSBzaWRlCitkaWZmLXRyZWUgLS1wcmV0dHkgLXAgc2lkZQorZGlmZi10cmVlIC0tcHJldHR5IC0tcGF0Y2gtd2l0aC1zdGF0IHNpZGUKKworZGlmZi10cmVlIGluaXRpYWwgbW9kZQorZGlmZi10cmVlIC0tc3RhdCBpbml0aWFsIG1vZGUKK2RpZmYtdHJlZSAtLXN1bW1hcnkgaW5pdGlhbCBtb2RlCisKK2RpZmYtdHJlZSBtYXN0ZXIKK2RpZmYtdHJlZSAtcCBtYXN0ZXIKK2RpZmYtdHJlZSAtcCAtbSBtYXN0ZXIKK2RpZmYtdHJlZSAtYyBtYXN0ZXIKK2RpZmYtdHJlZSAtYyAtLWFiYnJldiBtYXN0ZXIKKzpub2VsbGlwc2VzIGRpZmYtdHJlZSAtYyAtLWFiYnJldiBtYXN0ZXIKK2RpZmYtdHJlZSAtLWNjIG1hc3RlcgorIyBzdGF0IG9ubHkgc2hvdWxkIHNob3cgdGhlIGRpZmZzdGF0IHdpdGggdGhlIGZpcnN0IHBhcmVudAorZGlmZi10cmVlIC1jIC0tc3RhdCBtYXN0ZXIKK2RpZmYtdHJlZSAtLWNjIC0tc3RhdCBtYXN0ZXIKK2RpZmYtdHJlZSAtYyAtLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorZGlmZi10cmVlIC0tY2MgLS1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgc3RhdCBzdW1tYXJ5IHNob3VsZCBzaG93IHRoZSBkaWZmc3RhdCBhbmQgc3VtbWFyeSB3aXRoIHRoZSBmaXJzdCBwYXJlbnQKK2RpZmYtdHJlZSAtYyAtLXN0YXQgLS1zdW1tYXJ5IHNpZGUKK2RpZmYtdHJlZSAtLWNjIC0tc3RhdCAtLXN1bW1hcnkgc2lkZQorZGlmZi10cmVlIC0tY2MgLS1zaG9ydHN0YXQgbWFzdGVyCitkaWZmLXRyZWUgLS1jYyAtLXN1bW1hcnkgUkVWRVJTRQorIyBpbXByb3ZlZCBieSBUaW1vJ3MgcGF0Y2gKK2RpZmYtdHJlZSAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IG1hc3RlcgorIyBpbXByb3ZlZCBieSBUaW1vJ3MgcGF0Y2gKK2RpZmYtdHJlZSAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgdGhpcyBpcyBjb3JyZWN0CitkaWZmLXRyZWUgLS1jYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgc2lkZQorCitsb2cgbWFzdGVyCitsb2cgLXAgbWFzdGVyCitsb2cgLS1yb290IG1hc3RlcgorbG9nIC0tcm9vdCAtcCBtYXN0ZXIKK2xvZyAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK2xvZyAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyCitsb2cgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgaW1wcm92ZWQgYnkgVGltbydzIHBhdGNoCitsb2cgLS1yb290IC1jIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgaW1wcm92ZWQgYnkgVGltbydzIHBhdGNoCitsb2cgLS1yb290IC0tY2MgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorbG9nIC1wIC0tZmlyc3QtcGFyZW50IG1hc3RlcgorbG9nIC1tIC1wIC0tZmlyc3QtcGFyZW50IG1hc3RlcgorbG9nIC1tIC1wIG1hc3RlcgorbG9nIC1TRiBtYXN0ZXIKK2xvZyAtUyBGIG1hc3RlcgorbG9nIC1TRiAtcCBtYXN0ZXIKK2xvZyAtU0YgbWFzdGVyIC0tbWF4LWNvdW50PTAKK2xvZyAtU0YgbWFzdGVyIC0tbWF4LWNvdW50PTEKK2xvZyAtU0YgbWFzdGVyIC0tbWF4LWNvdW50PTIKK2xvZyAtR0YgbWFzdGVyCitsb2cgLUdGIC1wIG1hc3RlcgorbG9nIC1HRiAtcCAtLXBpY2theGUtYWxsIG1hc3RlcgorbG9nIC0tZGVjb3JhdGUgLS1hbGwKK2xvZyAtLWRlY29yYXRlPWZ1bGwgLS1hbGwKKworcmV2LWxpc3QgLS1wYXJlbnRzIEhFQUQKK3Jldi1saXN0IC0tY2hpbGRyZW4gSEVBRAorCit3aGF0Y2hhbmdlZCBtYXN0ZXIKKzpub2VsbGlwc2VzIHdoYXRjaGFuZ2VkIG1hc3Rlcgord2hhdGNoYW5nZWQgLXAgbWFzdGVyCit3aGF0Y2hhbmdlZCAtLXJvb3QgbWFzdGVyCis6bm9lbGxpcHNlcyB3aGF0Y2hhbmdlZCAtLXJvb3QgbWFzdGVyCit3aGF0Y2hhbmdlZCAtLXJvb3QgLXAgbWFzdGVyCit3aGF0Y2hhbmdlZCAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK3doYXRjaGFuZ2VkIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK3doYXRjaGFuZ2VkIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCisjIGltcHJvdmVkIGJ5IFRpbW8ncyBwYXRjaAord2hhdGNoYW5nZWQgLS1yb290IC1jIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgaW1wcm92ZWQgYnkgVGltbydzIHBhdGNoCit3aGF0Y2hhbmdlZCAtLXJvb3QgLS1jYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCit3aGF0Y2hhbmdlZCAtU0YgbWFzdGVyCis6bm9lbGxpcHNlcyB3aGF0Y2hhbmdlZCAtU0YgbWFzdGVyCit3aGF0Y2hhbmdlZCAtU0YgLXAgbWFzdGVyCisKK2xvZyAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIgLS0gZGlyLword2hhdGNoYW5nZWQgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyIC0tIGRpci8KK2xvZyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyIC0tIGRpci8KK3doYXRjaGFuZ2VkIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIgLS0gZGlyLworCitzaG93IGluaXRpYWwKK3Nob3cgLS1yb290IGluaXRpYWwKK3Nob3cgc2lkZQorc2hvdyBtYXN0ZXIKK3Nob3cgLWMgbWFzdGVyCitzaG93IC1tIG1hc3Rlcgorc2hvdyAtLWZpcnN0LXBhcmVudCBtYXN0ZXIKK3Nob3cgLS1zdGF0IHNpZGUKK3Nob3cgLS1zdGF0IC0tc3VtbWFyeSBzaWRlCitzaG93IC0tcGF0Y2gtd2l0aC1zdGF0IHNpZGUKK3Nob3cgLS1wYXRjaC13aXRoLXJhdyBzaWRlCis6bm9lbGxpcHNlcyBzaG93IC0tcGF0Y2gtd2l0aC1yYXcgc2lkZQorc2hvdyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgc2lkZQorCitmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQorZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl4KK2Zvcm1hdC1wYXRjaCAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXIKK2Zvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLW5vLW51bWJlcmVkIGluaXRpYWwuLm1hc3RlcgorZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tbnVtYmVyZWQgaW5pdGlhbC4ubWFzdGVyCitmb3JtYXQtcGF0Y2ggLS1hdHRhY2ggLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQorZm9ybWF0LXBhdGNoIC0tYXR0YWNoIC0tc3Rkb3V0IC0tc3VmZml4PS5kaWZmIGluaXRpYWwuLnNpZGUKK2Zvcm1hdC1wYXRjaCAtLWF0dGFjaCAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXJeCitmb3JtYXQtcGF0Y2ggLS1hdHRhY2ggLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyCitmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQorZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl4KK2Zvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCAtLW51bWJlcmVkLWZpbGVzIGluaXRpYWwuLm1hc3RlcgorZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3RlcgorZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IC0tc3ViamVjdC1wcmVmaXg9VEVTVENBU0UgaW5pdGlhbC4ubWFzdGVyCitjb25maWcgZm9ybWF0LnN1YmplY3RwcmVmaXggRElGRkVSRU5UX1BSRUZJWAorZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl5eCitmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLW4gaW5pdGlhbC4ubWFzdGVyXgorCitkaWZmIC0tYWJicmV2IGluaXRpYWwuLnNpZGUKK2RpZmYgLVUgaW5pdGlhbC4uc2lkZQorZGlmZiAtVTEgaW5pdGlhbC4uc2lkZQorZGlmZiAtciBpbml0aWFsLi5zaWRlCitkaWZmIC0tc3RhdCBpbml0aWFsLi5zaWRlCitkaWZmIC1yIC0tc3RhdCBpbml0aWFsLi5zaWRlCitkaWZmIGluaXRpYWwuLnNpZGUKK2RpZmYgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbC4uc2lkZQorZGlmZiAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwuLnNpZGUKKzpub2VsbGlwc2VzIGRpZmYgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsLi5zaWRlCitkaWZmIC0tcGF0Y2gtd2l0aC1zdGF0IC1yIGluaXRpYWwuLnNpZGUKK2RpZmYgLS1wYXRjaC13aXRoLXJhdyAtciBpbml0aWFsLi5zaWRlCis6bm9lbGxpcHNlcyBkaWZmIC0tcGF0Y2gtd2l0aC1yYXcgLXIgaW5pdGlhbC4uc2lkZQorZGlmZiAtLW5hbWUtc3RhdHVzIGRpcjIgZGlyCitkaWZmIC0tbm8taW5kZXggLS1uYW1lLXN0YXR1cyBkaXIyIGRpcgorZGlmZiAtLW5vLWluZGV4IC0tbmFtZS1zdGF0dXMgLS0gZGlyMiBkaXIKK2RpZmYgLS1uby1pbmRleCBkaXIgZGlyMworZGlmZiBtYXN0ZXIgbWFzdGVyXiBzaWRlCisjIENhbid0IHVzZSBzcGFjZXMuLi4KK2RpZmYgLS1saW5lLXByZWZpeD1hYmMgbWFzdGVyIG1hc3Rlcl4gc2lkZQorZGlmZiAtLWRpcnN0YXQgbWFzdGVyfjEgbWFzdGVyfjIKK2RpZmYgLS1kaXJzdGF0IGluaXRpYWwgcmVhcnJhbmdlCitkaWZmIC0tZGlyc3RhdC1ieS1maWxlIGluaXRpYWwgcmVhcnJhbmdlCitkaWZmIC0tZGlyc3RhdCAtLWNjIG1hc3Rlcn4xIG1hc3RlcgorIyBOby1pbmRleCAtLWFiYnJldiBhbmQgLS1uby1hYmJyZXYKK2RpZmYgLS1yYXcgaW5pdGlhbAorOm5vZWxsaXBzZXMgZGlmZiAtLXJhdyBpbml0aWFsCitkaWZmIC0tcmF3IC0tYWJicmV2PTQgaW5pdGlhbAorOm5vZWxsaXBzZXMgZGlmZiAtLXJhdyAtLWFiYnJldj00IGluaXRpYWwKK2RpZmYgLS1yYXcgLS1uby1hYmJyZXYgaW5pdGlhbAorZGlmZiAtLW5vLWluZGV4IC0tcmF3IGRpcjIgZGlyCis6bm9lbGxpcHNlcyBkaWZmIC0tbm8taW5kZXggLS1yYXcgZGlyMiBkaXIKK2RpZmYgLS1uby1pbmRleCAtLXJhdyAtLWFiYnJldj00IGRpcjIgZGlyCis6bm9lbGxpcHNlcyBkaWZmIC0tbm8taW5kZXggLS1yYXcgLS1hYmJyZXY9NCBkaXIyIGRpcgorZGlmZiAtLW5vLWluZGV4IC0tcmF3IC0tbm8tYWJicmV2IGRpcjIgZGlyCisKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdGF0IC0tY29tcGFjdC1zdW1tYXJ5IGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSAtUiAtLXJvb3QgLS1zdGF0IC0tY29tcGFjdC1zdW1tYXJ5IGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSBub3RlCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1ub3RlcyBub3RlCitkaWZmLXRyZWUgLS1mb3JtYXQ9JU4gbm90ZQorZGlmZi10cmVlIC0tc3RhdCAtLWNvbXBhY3Qtc3VtbWFyeSBpbml0aWFsIG1vZGUKK2RpZmYtdHJlZSAtUiAtLXN0YXQgLS1jb21wYWN0LXN1bW1hcnkgaW5pdGlhbCBtb2RlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1TIHJlcXVpcmVzIGFuIGFyZ3VtZW50JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtUworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tY2FjaGVkIG9uIHVuYm9ybiBicmFuY2gnICcKKwllY2hvIHJlZjogcmVmcy9oZWFkcy91bmJvcm4gPi5naXQvSEVBRCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5yZXN1bHQgJiYKKwlwcm9jZXNzX2RpZmZzIHJlc3VsdCA+YWN0dWFsICYmCisJcHJvY2Vzc19kaWZmcyAiJFRFU1RfRElSRUNUT1JZL3Q0MDEzL2RpZmYuZGlmZl8tLWNhY2hlZCIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1jYWNoZWQgLS0gZmlsZSBvbiB1bmJvcm4gYnJhbmNoJyAnCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS0gZmlsZTAgPnJlc3VsdCAmJgorCXByb2Nlc3NfZGlmZnMgcmVzdWx0ID5hY3R1YWwgJiYKKwlwcm9jZXNzX2RpZmZzICIkVEVTVF9ESVJFQ1RPUlkvdDQwMTMvZGlmZi5kaWZmXy0tY2FjaGVkXy0tX2ZpbGUwIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1saW5lLXByZWZpeCB3aXRoIHNwYWNlcycgJworCWdpdCBkaWZmIC0tbGluZS1wcmVmaXg9InwgfCB8ICIgLS1jYWNoZWQgLS0gZmlsZTAgPnJlc3VsdCAmJgorCXByb2Nlc3NfZGlmZnMgcmVzdWx0ID5hY3R1YWwgJiYKKwlwcm9jZXNzX2RpZmZzICIkVEVTVF9ESVJFQ1RPUlkvdDQwMTMvZGlmZi5kaWZmXy0tbGluZS1wcmVmaXhfLS1jYWNoZWRfLS1fZmlsZTAiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLS1zdGRpbiB3aXRoIGxvZyBmb3JtYXR0aW5nJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCVNpZGUKKwlUaGlyZAorCVNlY29uZAorCUVPRgorCWdpdCByZXYtbGlzdCBtYXN0ZXIgfCBnaXQgZGlmZi10cmVlIC0tc3RkaW4gLS1mb3JtYXQ9JXMgLXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuY29uZmlnX2Zvcm1hdC5zdWJqZWN0cHJlZml4X0RJRkZFUkVOVF9QUkVGSVggYi90L3Q0MDEzL2RpZmYuY29uZmlnX2Zvcm1hdC5zdWJqZWN0cHJlZml4X0RJRkZFUkVOVF9QUkVGSVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhmODk3MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5jb25maWdfZm9ybWF0LnN1YmplY3RwcmVmaXhfRElGRkVSRU5UX1BSRUZJWApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGNvbmZpZyBmb3JtYXQuc3ViamVjdHByZWZpeCBESUZGRVJFTlRfUFJFRklYCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NTFlMzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMCwwICsxLDM0IEBACiskIGdpdCBkaWZmLXRyZWUgLS1jYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tY2MgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNjIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYzMzZmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X3NpZGUKQEAgLTAsMCArMSwzOSBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IHNpZGUKK2M3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjNjMGE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpAQCAtMCwwICsxLDM0IEBACiskIGdpdCBkaWZmLXRyZWUgLS1jYyAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1jYyBkaXIvc3ViCitpbmRleCBjZWFkMzJlLDcyODllMzUuLjk5MjkxM2MKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAQCAtMSw2IC0xLDQgKzEsOCBAQEAKKyAgQQorICBCCisgK0MKKyArRAorICtFCisgK0YKKysgMQorKyAyCitkaWZmIC0tY2MgZmlsZTAKK2luZGV4IGI0MTQxMDgsZjQ2MTVkYS4uMTBhOGE5ZgorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQEAgLTEsNiAtMSw2ICsxLDkgQEBACisgIDEKKyAgMgorICAzCisgKzQKKyArNQorICs2CisrIEEKKysgQgorKyBDCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1zaG9ydHN0YXRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc2hvcnRzdGF0X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGNhNDJkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc2hvcnRzdGF0X21hc3RlcgpAQCAtMCwwICsxLDQgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLWNjIC0tc2hvcnRzdGF0IG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxOTg2NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMCwwICsxLDYgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLWNjIC0tc3RhdCAtLXN1bW1hcnkgbWFzdGVyCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3RhdF8tLXN1bW1hcnlfc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXN0YXRfLS1zdW1tYXJ5X3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiMmVlZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXN0YXRfLS1zdW1tYXJ5X3NpZGUKQEAgLTAsMCArMSw4IEBACiskIGdpdCBkaWZmLXRyZWUgLS1jYyAtLXN0YXQgLS1zdW1tYXJ5IHNpZGUKK2M3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3RhdF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1zdGF0X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGI5MTc5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3RhdF9tYXN0ZXIKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1jYyAtLXN0YXQgbWFzdGVyCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3VtbWFyeV9SRVZFUlNFIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3VtbWFyeV9SRVZFUlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDhkZDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1zdW1tYXJ5X1JFVkVSU0UKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1jYyAtLXN1bW1hcnkgUkVWRVJTRQorMjU2MjMyNWE3ZWU5MTZlZmIyNDgxZGE5MzA3M2I4MmNlYzgwMWNiYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjX21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY19tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVjYjRlMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY19tYXN0ZXIKQEAgLTAsMCArMSwzMCBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgbWFzdGVyCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitkaWZmIC0tY2MgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNjIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWZvcm1hdD0lTl9ub3RlIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWZvcm1hdD0lTl9ub3RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMDQyZWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tZm9ybWF0PSVOX25vdGUKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1mb3JtYXQ9JU4gbm90ZQorbm90ZQorCisKKzoxMDA2NDQgMTAwNzU1IDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBNCWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMTc3YWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDkwNWIxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjhiNDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZGRlNGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eT1vbmVsaW5lIC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXJvb3RfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3OWYxYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXJvb3RfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCkBAIC0wLDAgKzEsMzMgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eT1vbmVsaW5lIC0tcm9vdCAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EgSW5pdGlhbAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAzNWQyNDJiYTc5YWU4OWFjNjk1ZTI2YjNkNGMyN2E4ZTZmMDI4ZjllIEEJZGlyL3N1YgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxN2VkMDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKQEAgLTAsMCArMSwzNCBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EgSW5pdGlhbAorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290Xy1wX2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290Xy1wX2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1MDkyYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXJvb3RfLXBfaW5pdGlhbApAQCAtMCwwICsxLDI5IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgLXAgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSBJbml0aWFsCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXJvb3RfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXJvb3RfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODkyMGFjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF9pbml0aWFsCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1yb290IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EgSW5pdGlhbAorOjAwMDAwMCAwNDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBkYTdhMzNmYTc3ZDgwNjZkNjY5ODY0Mzk0MGNlNTg2MGZlMmQ3ZmIzIEEJZGlyCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tcF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy1wX2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRiNzZiZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tcF9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLXAgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lX2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTA5NzBkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lX2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tbm90ZXNfbm90ZSBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1ub3Rlc19ub3RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMGJkZTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tbm90ZXNfbm90ZQpAQCAtMCwwICsxLDEyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1ub3RlcyBub3RlCitjb21taXQgYTZmMzY0MzY4Y2EzMjBiYzVhOTJlMTg5MTJlMTZmYTZiM2RmZjU5OAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA2OjAwIDIwMDYgKzAwMDAKKworICAgIHVwZGF0ZSBtb2RlIChmaWxlMikKKworTm90ZXM6CisgICAgbm90ZQorCis6MTAwNjQ0IDEwMDc1NSAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgTQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTg1MzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUwODIzOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXBhdGNoLXdpdGgtc3RhdCBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcGF0Y2gtd2l0aC1zdGF0X3NpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcGF0Y2gtd2l0aC1zdGF0X3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUzZjZiNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1wYXRjaC13aXRoLXN0YXRfc2lkZQpAQCAtMCwwICsxLDQzIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1wYXRjaC13aXRoLXN0YXQgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyMDNiZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbApAQCAtMCwwICsxLDM4IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMzVkMjQyYmE3OWFlODlhYzY5NWUyNmIzZDRjMjdhOGU2ZjAyOGY5ZSBBCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZWI3N2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsCkBAIC0wLDAgKzEsMzkgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdGF0Xy0tY29tcGFjdC1zdW1tYXJ5X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN0YXRfLS1jb21wYWN0LXN1bW1hcnlfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjQ1MWZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdGF0Xy0tY29tcGFjdC1zdW1tYXJ5X2luaXRpYWwKQEAgLTAsMCArMSwxMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXN0YXQgLS1jb21wYWN0LXN1bW1hcnkgaW5pdGlhbAorY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKKyBkaXIvc3ViIChuZXcpIHwgMiArKworIGZpbGUwIChuZXcpICAgfCAzICsrKworIGZpbGUyIChuZXcpICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN0YXRfLS1zdW1tYXJ5X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN0YXRfLS1zdW1tYXJ5X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwZWFiNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3RhdF8tLXN1bW1hcnlfaW5pdGlhbApAQCAtMCwwICsxLDE1IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tc3RhdCAtLXN1bW1hcnkgaW5pdGlhbAorY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRpci9zdWIKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTAKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdGF0X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcyMmQxYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3RhdF9pbml0aWFsCkBAIC0wLDAgKzEsMTIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdGF0IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdW1tYXJ5Xy1yX2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN1bW1hcnlfLXJfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2RhYWZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdW1tYXJ5Xy1yX2luaXRpYWwKQEAgLTAsMCArMSwxMSBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXN1bW1hcnkgLXIgaW5pdGlhbAorY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZGlyL3N1YgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdW1tYXJ5X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN1bW1hcnlfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGU1Zjc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdW1tYXJ5X2luaXRpYWwKQEAgLTAsMCArMSwxMSBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXN1bW1hcnkgaW5pdGlhbAorY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZGlyL3N1YgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLXBfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy1wX2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA0MTFmNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy1wX2luaXRpYWwKQEAgLTAsMCArMSwzNCBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtcCBpbml0aWFsCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGUzMmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfaW5pdGlhbApAQCAtMCwwICsxLDExIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCis6MDAwMDAwIDA0MDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGRhN2EzM2ZhNzdkODA2NmQ2Njk4NjQzOTQwY2U1ODYwZmUyZDdmYjMgQQlkaXIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXN0YXRfLS1zdW1tYXJ5X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tc3RhdF8tLXN1bW1hcnlfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjI5ODNhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXN0YXRfLS1zdW1tYXJ5X2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1zdGF0IC0tc3VtbWFyeSBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXN0YXRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmRjZmI0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXN0YXRfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXN0YXQgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXN1bW1hcnlfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1zdW1tYXJ5X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjMmM0ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1zdW1tYXJ5X2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1zdW1tYXJ5IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLVJfLS1yb290Xy0tc3RhdF8tLWNvbXBhY3Qtc3VtbWFyeV9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tUl8tLXJvb3RfLS1zdGF0Xy0tY29tcGFjdC1zdW1tYXJ5X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk4OWU1NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLVJfLS1yb290Xy0tc3RhdF8tLWNvbXBhY3Qtc3VtbWFyeV9pbml0aWFsCkBAIC0wLDAgKzEsMTIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtUiAtLXJvb3QgLS1zdGF0IC0tY29tcGFjdC1zdW1tYXJ5IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCisgZGlyL3N1YiAoZ29uZSkgfCAyIC0tCisgZmlsZTAgKGdvbmUpICAgfCAzIC0tLQorIGZpbGUyIChnb25lKSAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDggZGVsZXRpb25zKC0pCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy1wX2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy1wX2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5OTQyZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLXBfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtcCBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy1wX3NpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy1wX3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5M2FhNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLXBfc2lkZQpAQCAtMCwwICsxLDM4IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLXAgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDcxNWJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfbm90ZSBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfbm90ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmE1OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV9ub3RlCkBAIC0wLDAgKzEsOSBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IG5vdGUKK2NvbW1pdCBhNmYzNjQzNjhjYTMyMGJjNWE5MmUxODkxMmUxNmZhNmIzZGZmNTk4CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDY6MDAgMjAwNiArMDAwMAorCisgICAgdXBkYXRlIG1vZGUgKGZpbGUyKQorCis6MTAwNjQ0IDEwMDc1NSAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgTQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV9zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YjZlMWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5X3NpZGUKQEAgLTAsMCArMSwxMSBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IHNpZGUKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCis6MDQwMDAwIDA0MDAwMCBkYTdhMzNmYTc3ZDgwNjZkNjY5ODY0Mzk0MGNlNTg2MGZlMmQ3ZmIzIGY5NzdlZDQ2YWU2ODczYzFjMzBhYjg3OGUxNWE0YWNjZWRjMzYxOGIgTQlkaXIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgZjQ2MTVkYTY3NGMwOWRmMzIyZDZiYThkNmIyMWVjZmIxYjFiYTUxMCBNCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDcyODllMzViZmYzMjcyN2MwOGRkYTIwNzUxMWJlYzEzOGZkYjllYTUgQQlmaWxlMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1hYmJyZXZfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy0tYWJicmV2X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFhODRiMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy0tYWJicmV2X2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IC0tYWJicmV2IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzowMDAwMDAgMDQwMDAwIDAwMDAwMDAuLi4gZGE3YTMzZi4uLiBBCWRpcgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiAwMWU3OWMzLi4uIEEJZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMDFlNzljMy4uLiBBCWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5NWU0NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbApAQCAtMCwwICsxLDMzIEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAzNWQyNDJiYTc5YWU4OWFjNjk1ZTI2YjNkNGMyN2E4ZTZmMDI4ZjllIEEJZGlyL3N1YgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2OWZmZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKQEAgLTAsMCArMSwzNCBAQAorJCBnaXQgZGlmZi10cmVlIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1wX2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tcF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMTljNzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tcF9pbml0aWFsCkBAIC0wLDAgKzEsMjkgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLXAgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tcl8tLWFiYnJldj00X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tcl8tLWFiYnJldj00X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM1MzYxNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2PTRfaW5pdGlhbApAQCAtMCwwICsxLDYgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLXIgLS1hYmJyZXY9NCBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCis6MDAwMDAwIDEwMDY0NCAwMDAwLi4uIDM1ZDIuLi4gQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwLi4uIDAxZTcuLi4gQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMC4uLiAwMWU3Li4uIEEJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tcl8tLWFiYnJldl9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YjQ2MGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tcl8tLWFiYnJldl9pbml0aWFsCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcm9vdCAtciAtLWFiYnJldiBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDM1ZDI0MmIuLi4gQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAxZTc5YzMuLi4gQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiAwMWU3OWMzLi4uIEEJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yX2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tcl9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZDQzNWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tcl9pbml0aWFsCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcm9vdCAtciBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDM1ZDI0MmJhNzlhZTg5YWM2OTVlMjZiM2Q0YzI3YThlNmYwMjhmOWUgQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZjZiMDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF9pbml0aWFsCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcm9vdCBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCis6MDAwMDAwIDA0MDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGRhN2EzM2ZhNzdkODA2NmQ2Njk4NjQzOTQwY2U1ODYwZmUyZDdmYjMgQQlkaXIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXN0YXRfLS1jb21wYWN0LXN1bW1hcnlfaW5pdGlhbF9tb2RlIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXN0YXRfLS1jb21wYWN0LXN1bW1hcnlfaW5pdGlhbF9tb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljN2M4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tc3RhdF8tLWNvbXBhY3Qtc3VtbWFyeV9pbml0aWFsX21vZGUKQEAgLTAsMCArMSw0IEBACiskIGdpdCBkaWZmLXRyZWUgLS1zdGF0IC0tY29tcGFjdC1zdW1tYXJ5IGluaXRpYWwgbW9kZQorIGZpbGUwIChtb2RlICt4KSB8IDAKKyAxIGZpbGUgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXN0YXRfaW5pdGlhbF9tb2RlIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXN0YXRfaW5pdGlhbF9tb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNTk0M2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tc3RhdF9pbml0aWFsX21vZGUKQEAgLTAsMCArMSw0IEBACiskIGdpdCBkaWZmLXRyZWUgLS1zdGF0IGluaXRpYWwgbW9kZQorIGZpbGUwIHwgMAorIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tc3VtbWFyeV9pbml0aWFsX21vZGUgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tc3VtbWFyeV9pbml0aWFsX21vZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4NDZiNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1zdW1tYXJ5X2luaXRpYWxfbW9kZQpAQCAtMCwwICsxLDMgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXN1bW1hcnkgaW5pdGlhbCBtb2RlCisgbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBmaWxlMAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tUl8tLXN0YXRfLS1jb21wYWN0LXN1bW1hcnlfaW5pdGlhbF9tb2RlIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tUl8tLXN0YXRfLS1jb21wYWN0LXN1bW1hcnlfaW5pdGlhbF9tb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOGYzZDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1SXy0tc3RhdF8tLWNvbXBhY3Qtc3VtbWFyeV9pbml0aWFsX21vZGUKQEAgLTAsMCArMSw0IEBACiskIGdpdCBkaWZmLXRyZWUgLVIgLS1zdGF0IC0tY29tcGFjdC1zdW1tYXJ5IGluaXRpYWwgbW9kZQorIGZpbGUwIChtb2RlIC14KSB8IDAKKyAxIGZpbGUgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY18tLWFiYnJldl9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tYWJicmV2X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGU0YWEyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY18tLWFiYnJldl9tYXN0ZXIKQEAgLTAsMCArMSw1IEBACiskIGdpdCBkaWZmLXRyZWUgLWMgLS1hYmJyZXYgbWFzdGVyCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0Cis6OjEwMDY0NCAxMDA2NDQgMTAwNjQ0IGNlYWQzMmUuLi4gNzI4OWUzNS4uLiA5OTI5MTNjLi4uIE1NCWRpci9zdWIKKzo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgYjQxNDEwOC4uLiBmNDYxNWRhLi4uIDEwYThhOWYuLi4gTU0JZmlsZTAKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tc3RhdF8tLXN1bW1hcnlfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYzMwMjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tc3RhdF8tLXN1bW1hcnlfbWFzdGVyCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC1jIC0tc3RhdCAtLXN1bW1hcnkgbWFzdGVyCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY18tLXN0YXRfLS1zdW1tYXJ5X3NpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tc3RhdF8tLXN1bW1hcnlfc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGRjMTJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY18tLXN0YXRfLS1zdW1tYXJ5X3NpZGUKQEAgLTAsMCArMSw4IEBACiskIGdpdCBkaWZmLXRyZWUgLWMgLS1zdGF0IC0tc3VtbWFyeSBzaWRlCitjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1zdGF0X21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1zdGF0X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWQ1OWIxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY18tLXN0YXRfbWFzdGVyCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC1jIC0tc3RhdCBtYXN0ZXIKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jX21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZDJiYjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jX21hc3RlcgpAQCAtMCwwICsxLDUgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtYyBtYXN0ZXIKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKKzo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgY2VhZDMyZTkyNWIxNDIwYzg0YzE0Y2JmN2NmNzU1ZTdlNDVhZjhhZCA3Mjg5ZTM1YmZmMzI3MjdjMDhkZGEyMDc1MTFiZWMxMzhmZGI5ZWE1IDk5MjkxM2M1YWEwYTU0NzZkMTBjNDllZDBmMjFmYzBjNmQxYWVkZjMgTU0JZGlyL3N1YgorOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBiNDE0MTA4ZTgxZTUwOTFmZTA5NzRhMTg1OGI0ZDBkMjJiMTA3ZjcwIGY0NjE1ZGE2NzRjMDlkZjMyMmQ2YmE4ZDZiMjFlY2ZiMWIxYmE1MTAgMTBhOGE5ZjM2NTdmOTFhMTU2YjlmMDE4NGVkNzlhMjBhZGVmOWY3ZiBNTQlmaWxlMAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF8tbV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1wXy1tX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjBiZWEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF8tbV9tYXN0ZXIKQEAgLTAsMCArMSw4MCBAQAorJCBnaXQgZGlmZi10cmVlIC1wIC1tIG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCBjZWFkMzJlLi45OTI5MTNjIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTQsMyArNCw1IEBAIEMKKyBECisgRQorIEYKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IGI0MTQxMDguLjEwYThhOWYgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC00LDMgKzQsNiBAQAorIDQKKyA1CisgNgorK0EKKytCCisrQworNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA3Mjg5ZTM1Li45OTI5MTNjIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsNCArMSw4IEBACisgQQorIEIKKytDCisrRAorK0UKKytGCisgMQorIDIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCBmNDYxNWRhLi4xMGE4YTlmIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSw2ICsxLDkgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKKyBBCisgQgorIEMKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggNzI4OWUzNS4uMDAwMDAwMAorLS0tIGEvZmlsZTMKKysrKyAvZGV2L251bGwKK0BAIC0xLDQgKzAsMCBAQAorLUEKKy1CCistMQorLTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXBfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXBfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjBjZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC1wIGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXBfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE4Mjg3NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXBfbWFzdGVyCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC1wIG1hc3RlcgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcl8tLWFiYnJldj00X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1yXy0tYWJicmV2PTRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWEzYWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcl8tLWFiYnJldj00X2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLXIgLS1hYmJyZXY9NCBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1yXy0tYWJicmV2X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1yXy0tYWJicmV2X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2ODliNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfLS1hYmJyZXZfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtciAtLWFiYnJldiBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1yX2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1yX2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2NWQ4MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtciBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlX2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlX2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5ZmM1MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlX2luaXRpYWxfbW9kZSBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfaW5pdGlhbF9tb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0N2MwOTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlX2luaXRpYWxfbW9kZQpAQCAtMCwwICsxLDMgQEAKKyQgZ2l0IGRpZmYtdHJlZSBpbml0aWFsIG1vZGUKKzoxMDA2NDQgMTAwNzU1IDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBNCWZpbGUwCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlX21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOTIyNmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlX21hc3RlcgpAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSBtYXN0ZXIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tYWJicmV2X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWFiYnJldl9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OGU2NmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWFiYnJldl9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsMzIgQEAKKyQgZ2l0IGRpZmYgLS1hYmJyZXYgaW5pdGlhbC4uc2lkZQorZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1jYWNoZWQgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWNhY2hlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjE2ZTgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1jYWNoZWQKQEAgLTAsMCArMSwzOCBAQAorZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOTkyOTEzYworLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSw4IEBACisrQQorK0IKKytDCisrRAorK0UKKytGCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTBhOGE5ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsOSBAQAorKzEKKysyCisrMworKzQKKys1CisrNgorK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLWNhY2hlZF8tLV9maWxlMCBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tY2FjaGVkXy0tX2ZpbGUwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YmI4NTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWNhY2hlZF8tLV9maWxlMApAQCAtMCwwICsxLDE1IEBACitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjEwYThhOWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDkgQEAKKysxCisrMgorKzMKKys0CisrNQorKzYKKytBCisrQgorK0MKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tZGlyc3RhdC1ieS1maWxlX2luaXRpYWxfcmVhcnJhbmdlIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0LWJ5LWZpbGVfaW5pdGlhbF9yZWFycmFuZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4ZTMzZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tZGlyc3RhdC1ieS1maWxlX2luaXRpYWxfcmVhcnJhbmdlCkBAIC0wLDAgKzEsMyBAQAorJCBnaXQgZGlmZiAtLWRpcnN0YXQtYnktZmlsZSBpbml0aWFsIHJlYXJyYW5nZQorIDEwMC4wJSBkaXIvCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLWRpcnN0YXRfLS1jY19tYXN0ZXJ+MV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWRpcnN0YXRfLS1jY19tYXN0ZXJ+MV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJhNGUzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tZGlyc3RhdF8tLWNjX21hc3Rlcn4xX21hc3RlcgpAQCAtMCwwICsxLDMgQEAKKyQgZ2l0IGRpZmYgLS1kaXJzdGF0IC0tY2MgbWFzdGVyfjEgbWFzdGVyCisgIDQwLjAlIGRpci8KKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tZGlyc3RhdF9pbml0aWFsX3JlYXJyYW5nZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tZGlyc3RhdF9pbml0aWFsX3JlYXJyYW5nZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmIwMmMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0X2luaXRpYWxfcmVhcnJhbmdlCkBAIC0wLDAgKzEsMyBAQAorJCBnaXQgZGlmZiAtLWRpcnN0YXQgaW5pdGlhbCByZWFycmFuZ2UKKyAxMDAuMCUgZGlyLworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0X21hc3Rlcn4xX21hc3Rlcn4yIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0X21hc3Rlcn4xX21hc3Rlcn4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NzJlMWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWRpcnN0YXRfbWFzdGVyfjFfbWFzdGVyfjIKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tZGlyc3RhdCBtYXN0ZXJ+MSBtYXN0ZXJ+MgorICA0MC4wJSBkaXIvCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLWxpbmUtcHJlZml4PWFiY19tYXN0ZXJfbWFzdGVyXl9zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1saW5lLXByZWZpeD1hYmNfbWFzdGVyX21hc3Rlcl5fc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWY5MWU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1saW5lLXByZWZpeD1hYmNfbWFzdGVyX21hc3Rlcl5fc2lkZQpAQCAtMCwwICsxLDI5IEBACiskIGdpdCBkaWZmIC0tbGluZS1wcmVmaXg9YWJjIG1hc3RlciBtYXN0ZXJeIHNpZGUKK2FiY2RpZmYgLS1jYyBkaXIvc3ViCithYmNpbmRleCBjZWFkMzJlLDcyODllMzUuLjk5MjkxM2MKK2FiYy0tLSBhL2Rpci9zdWIKK2FiYysrKyBiL2Rpci9zdWIKK2FiY0BAQCAtMSw2IC0xLDQgKzEsOCBAQEAKK2FiYyAgQQorYWJjICBCCithYmMgK0MKK2FiYyArRAorYWJjICtFCithYmMgK0YKK2FiYysgMQorYWJjKyAyCithYmNkaWZmIC0tY2MgZmlsZTAKK2FiY2luZGV4IGI0MTQxMDgsZjQ2MTVkYS4uMTBhOGE5ZgorYWJjLS0tIGEvZmlsZTAKK2FiYysrKyBiL2ZpbGUwCithYmNAQEAgLTEsNiAtMSw2ICsxLDkgQEBACithYmMgIDEKK2FiYyAgMgorYWJjICAzCithYmMgKzQKK2FiYyArNQorYWJjICs2CithYmMrIEEKK2FiYysgQgorYWJjKyBDCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLWxpbmUtcHJlZml4Xy0tY2FjaGVkXy0tX2ZpbGUwIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1saW5lLXByZWZpeF8tLWNhY2hlZF8tLV9maWxlMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDFiYTRkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1saW5lLXByZWZpeF8tLWNhY2hlZF8tLV9maWxlMApAQCAtMCwwICsxLDE1IEBACit8IHwgfCBkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorfCB8IHwgbmV3IGZpbGUgbW9kZSAxMDA2NDQKK3wgfCB8IGluZGV4IDAwMDAwMDAuLjEwYThhOWYKK3wgfCB8IC0tLSAvZGV2L251bGwKK3wgfCB8ICsrKyBiL2ZpbGUwCit8IHwgfCBAQCAtMCwwICsxLDkgQEAKK3wgfCB8ICsxCit8IHwgfCArMgorfCB8IHwgKzMKK3wgfCB8ICs0Cit8IHwgfCArNQorfCB8IHwgKzYKK3wgfCB8ICtBCit8IHwgfCArQgorfCB8IHwgK0MKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tbmFtZS1zdGF0dXNfZGlyMl9kaXIgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5hbWUtc3RhdHVzX2RpcjJfZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDk2YWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5hbWUtc3RhdHVzX2RpcjJfZGlyCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIGRpcjIgZGlyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tbmFtZS1zdGF0dXNfLS1fZGlyMl9kaXIgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tbmFtZS1zdGF0dXNfLS1fZGlyMl9kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1NmY4ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1uYW1lLXN0YXR1c18tLV9kaXIyX2RpcgpAQCAtMCwwICsxLDMgQEAKKyQgZ2l0IGRpZmYgLS1uby1pbmRleCAtLW5hbWUtc3RhdHVzIC0tIGRpcjIgZGlyCitBCWRpci9zdWIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1uYW1lLXN0YXR1c19kaXIyX2RpciBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1uYW1lLXN0YXR1c19kaXIyX2RpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQ3NTg0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLW5hbWUtc3RhdHVzX2RpcjJfZGlyCkBAIC0wLDAgKzEsMyBAQAorJCBnaXQgZGlmZiAtLW5vLWluZGV4IC0tbmFtZS1zdGF0dXMgZGlyMiBkaXIKK0EJZGlyL3N1YgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLXJhd18tLWFiYnJldj00X2RpcjJfZGlyIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLXJhd18tLWFiYnJldj00X2RpcjJfZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MWIzOGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tcmF3Xy0tYWJicmV2PTRfZGlyMl9kaXIKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tbm8taW5kZXggLS1yYXcgLS1hYmJyZXY9NCBkaXIyIGRpcgorOjAwMDAwMCAxMDA2NDQgMDAwMC4uLiAwMDAwLi4uIEEJZGlyL3N1YgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLXJhd18tLW5vLWFiYnJldl9kaXIyX2RpciBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1yYXdfLS1uby1hYmJyZXZfZGlyMl9kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBmMDA5NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1yYXdfLS1uby1hYmJyZXZfZGlyMl9kaXIKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tbm8taW5kZXggLS1yYXcgLS1uby1hYmJyZXYgZGlyMiBkaXIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBBCWRpci9zdWIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1yYXdfZGlyMl9kaXIgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tcmF3X2RpcjJfZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYjRlZTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tcmF3X2RpcjJfZGlyCkBAIC0wLDAgKzEsMyBAQAorJCBnaXQgZGlmZiAtLW5vLWluZGV4IC0tcmF3IGRpcjIgZGlyCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAwMDAwMDAuLi4gQQlkaXIvc3ViCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4X2Rpcl9kaXIzIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF9kaXJfZGlyMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTQyYzJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF9kaXJfZGlyMwpAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYgLS1uby1pbmRleCBkaXIgZGlyMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1wYXRjaC13aXRoLXJhd18tcl9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1wYXRjaC13aXRoLXJhd18tcl9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OTBkYzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXBhdGNoLXdpdGgtcmF3Xy1yX2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzNiBAQAorJCBnaXQgZGlmZiAtLXBhdGNoLXdpdGgtcmF3IC1yIGluaXRpYWwuLnNpZGUKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmIuLi4gNzI4OWUzNS4uLiBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMuLi4gZjQ2MTVkYS4uLiBNCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDcyODllMzUuLi4gQQlmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIxZDVkYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDM2IEBACiskIGdpdCBkaWZmIC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbC4uc2lkZQorOjEwMDY0NCAxMDA2NDQgMzVkMjQyYi4uLiA3Mjg5ZTM1Li4uIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMy4uLiBmNDYxNWRhLi4uIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gNzI4OWUzNS4uLiBBCWZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1zdGF0Xy1yX2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXBhdGNoLXdpdGgtc3RhdF8tcl9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOGQxZWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXBhdGNoLXdpdGgtc3RhdF8tcl9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsMzcgQEAKKyQgZ2l0IGRpZmYgLS1wYXRjaC13aXRoLXN0YXQgLXIgaW5pdGlhbC4uc2lkZQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MjRlNmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsMzcgQEAKKyQgZ2l0IGRpZmYgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbC4uc2lkZQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tcmF3Xy0tYWJicmV2PTRfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcmF3Xy0tYWJicmV2PTRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzY0MWRiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1yYXdfLS1hYmJyZXY9NF9pbml0aWFsCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZiAtLXJhdyAtLWFiYnJldj00IGluaXRpYWwKKzoxMDA2NDQgMTAwNjQ0IDM1ZDIuLi4gOTkyOS4uLiBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTcuLi4gMTBhOC4uLiBNCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwLi4uIGIxZTYuLi4gQQlmaWxlMQorOjEwMDY0NCAwMDAwMDAgMDFlNy4uLiAwMDAwLi4uIEQJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tcmF3Xy0tbm8tYWJicmV2X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXJhd18tLW5vLWFiYnJldl9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4N2ExMjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXJhd18tLW5vLWFiYnJldl9pbml0aWFsCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZiAtLXJhdyAtLW5vLWFiYnJldiBpbml0aWFsCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiYTc5YWU4OWFjNjk1ZTI2YjNkNGMyN2E4ZTZmMDI4ZjllIDk5MjkxM2M1YWEwYTU0NzZkMTBjNDllZDBmMjFmYzBjNmQxYWVkZjMgTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIDEwYThhOWYzNjU3ZjkxYTE1NmI5ZjAxODRlZDc5YTIwYWRlZjlmN2YgTQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBiMWU2NzIyMWFmZTg0NjFlZmQyNDRiNDg3YWZjYTIyZDQ2Yjk1ZWI4IEEJZmlsZTEKKzoxMDA2NDQgMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLXJhd19pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1yYXdfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2U5NzgwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1yYXdfaW5pdGlhbApAQCAtMCwwICsxLDYgQEAKKyQgZ2l0IGRpZmYgLS1yYXcgaW5pdGlhbAorOjEwMDY0NCAxMDA2NDQgMzVkMjQyYi4uLiA5OTI5MTNjLi4uIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMy4uLiAxMGE4YTlmLi4uIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gYjFlNjcyMi4uLiBBCWZpbGUxCis6MTAwNjQ0IDAwMDAwMCAwMWU3OWMzLi4uIDAwMDAwMDAuLi4gRAlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1zdGF0X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXN0YXRfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzc0MWUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1zdGF0X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmIC0tc3RhdCBpbml0aWFsLi5zaWRlCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy1VMV9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmZfLVUxX2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY5ZjhmMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy1VMV9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsMjkgQEAKKyQgZ2l0IGRpZmYgLVUxIGluaXRpYWwuLnNpZGUKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yICsyLDMgQEAgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0zICszLDQgQEAKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tVTJfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy1VMl9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZmUwNGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tVTJfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDMxIEBACiskIGdpdCBkaWZmIC1VMiBpbml0aWFsLi5zaWRlCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTIsMiArMiw1IEBACisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy1VX2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tVV9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NmMwZGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tVV9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsMzIgQEAKKyQgZ2l0IGRpZmYgLVUgaW5pdGlhbC4uc2lkZQorZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLXJfLS1zdGF0X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tcl8tLXN0YXRfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDUxNGY1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLXJfLS1zdGF0X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmIC1yIC0tc3RhdCBpbml0aWFsLi5zaWRlCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy1yX2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tcl9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYjJmZTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tcl9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsMzIgQEAKKyQgZ2l0IGRpZmYgLXIgaW5pdGlhbC4uc2lkZQorZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmX2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhhZGFmNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmX2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzMiBAQAorJCBnaXQgZGlmZiBpbml0aWFsLi5zaWRlCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl9tYXN0ZXJfbWFzdGVyXl9zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmZfbWFzdGVyX21hc3Rlcl5fc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGVjOWNhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfbWFzdGVyX21hc3Rlcl5fc2lkZQpAQCAtMCwwICsxLDI5IEBACiskIGdpdCBkaWZmIG1hc3RlciBtYXN0ZXJeIHNpZGUKK2RpZmYgLS1jYyBkaXIvc3ViCitpbmRleCBjZWFkMzJlLDcyODllMzUuLjk5MjkxM2MKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAQCAtMSw2IC0xLDQgKzEsOCBAQEAKKyAgQQorICBCCisgK0MKKyArRAorICtFCisgK0YKKysgMQorKyAyCitkaWZmIC0tY2MgZmlsZTAKK2luZGV4IGI0MTQxMDgsZjQ2MTVkYS4uMTBhOGE5ZgorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQEAgLTEsNiAtMSw2ICsxLDkgQEBACisgIDEKKyAgMgorICAzCisgKzQKKyArNQorICs2CisrIEEKKysgQgorKyBDCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0Xy0tc3VmZml4PS5kaWZmX2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0Xy0tc3VmZml4PS5kaWZmX2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ3Y2EwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfLS1zdWZmaXg9LmRpZmZfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDYxIEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1hdHRhY2ggLS1zdGRvdXQgLS1zdWZmaXg9LmRpZmYgaW5pdGlhbC4uc2lkZQorRnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDM6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gU2lkZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNpZGUuZGlmZiIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIwMDAxLVNpZGUuZGlmZiIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlciBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZmVkYzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlcgpAQCAtMCwwICsxLDE3MCBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tYXR0YWNoIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3RlcgorRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIFNlY29uZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBUaGlyZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDItVGhpcmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKworRnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDM6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIFNpZGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMy1TaWRlLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IjAwMDMtU2lkZS5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4gYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzY2RlMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXgpAQCAtMCwwICsxLDExMCBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tYXR0YWNoIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl4KK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBTZWNvbmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDIvMl0gVGhpcmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IjAwMDItVGhpcmQucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxN2JkOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDYxIEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1hdHRhY2ggLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQorRnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDM6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gU2lkZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNpZGUucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iMDAwMS1TaWRlLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfLS1udW1iZXJlZC1maWxlc19pbml0aWFsLi5tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0Xy0tbnVtYmVyZWQtZmlsZXNfaW5pdGlhbC4ubWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzRkYjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0Xy0tbnVtYmVyZWQtZmlsZXNfaW5pdGlhbC4ubWFzdGVyCkBAIC0wLDAgKzEsMTcwIEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgLS1udW1iZXJlZC1maWxlcyBpbml0aWFsLi5tYXN0ZXIKK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBTZWNvbmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMSIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjEiCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDIvM10gVGhpcmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIyIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMiIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKworRnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDM6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIFNpZGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMyIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjMiCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF8tLXN1YmplY3QtcHJlZml4PVRFU1RDQVNFX2luaXRpYWwuLm1hc3RlciBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfLS1zdWJqZWN0LXByZWZpeD1URVNUQ0FTRV9pbml0aWFsLi5tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2NzdjNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfLS1zdWJqZWN0LXByZWZpeD1URVNUQ0FTRV9pbml0aWFsLi5tYXN0ZXIKQEAgLTAsMCArMSwxNzAgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCAtLXN1YmplY3QtcHJlZml4PVRFU1RDQVNFIGluaXRpYWwuLm1hc3RlcgorRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtURVNUQ0FTRSAxLzNdIFNlY29uZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKworRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDI6MDAgKzAwMDAKK1N1YmplY3Q6IFtURVNUQ0FTRSAyLzNdIFRoaXJkCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjAwMDItVGhpcmQucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbVEVTVENBU0UgMy8zXSBTaWRlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDMtU2lkZS5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjAwMDMtU2lkZS5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlciBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViM2UzNGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlcgpAQCAtMCwwICsxLDE3MCBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3RlcgorRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIFNlY29uZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKworRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDI6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIFRoaXJkCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjAwMDItVGhpcmQucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSBTaWRlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDMtU2lkZS5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjAwMDMtU2lkZS5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4gYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzZjhhOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXgpAQCAtMCwwICsxLDExMCBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl4KK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBTZWNvbmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBUaGlyZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDItVGhpcmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeXiBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXl4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FlYzU1MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXl4KQEAgLTAsMCArMSw2MiBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl5eCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW0RJRkZFUkVOVF9QUkVGSVhdIFNlY29uZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2E2NzYyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsNjEgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCBpbml0aWFsLi5zaWRlCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBTaWRlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDEtU2lkZS5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjAwMDEtU2lkZS5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0Xy0tY292ZXItbGV0dGVyXy1uX2luaXRpYWwuLm1hc3Rlcl4gYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0Xy0tY292ZXItbGV0dGVyXy1uX2luaXRpYWwuLm1hc3Rlcl4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ0ZDk2NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfLS1jb3Zlci1sZXR0ZXJfLW5faW5pdGlhbC4ubWFzdGVyXgpAQCAtMCwwICsxLDEwMyBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIC1uIGluaXRpYWwuLm1hc3Rlcl4KK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDY6MDAgKzAwMDAKK1N1YmplY3Q6IFtESUZGRVJFTlRfUFJFRklYIDAvMl0gKioqIFNVQkpFQ1QgSEVSRSAqKioKKworKioqIEJMVVJCIEhFUkUgKioqCisKK0EgVSBUaG9yICgyKToKKyAgU2Vjb25kCisgIFRoaXJkCisKKyBkaXIvc3ViIHwgNCArKysrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTEgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbRElGRkVSRU5UX1BSRUZJWCAxLzJdIFNlY29uZAorCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbRElGRkVSRU5UX1BSRUZJWCAyLzJdIFRoaXJkCisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfLS1uby1udW1iZXJlZF9pbml0aWFsLi5tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0Xy0tbm8tbnVtYmVyZWRfaW5pdGlhbC4ubWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYzI4N2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0Xy0tbm8tbnVtYmVyZWRfaW5pdGlhbC4ubWFzdGVyCkBAIC0wLDAgKzEsMTI3IEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1uby1udW1iZXJlZCBpbml0aWFsLi5tYXN0ZXIKK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFNlY29uZAorCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFRoaXJkCisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKworRnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDM6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gU2lkZQorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfLS1udW1iZXJlZF9pbml0aWFsLi5tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0Xy0tbnVtYmVyZWRfaW5pdGlhbC4ubWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OGY2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0Xy0tbnVtYmVyZWRfaW5pdGlhbC4ubWFzdGVyCkBAIC0wLDAgKzEsMTI3IEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1udW1iZXJlZCBpbml0aWFsLi5tYXN0ZXIKK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBTZWNvbmQKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDIvM10gVGhpcmQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDMvM10gU2lkZQorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYwMzUyZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyCkBAIC0wLDAgKzEsMTI3IEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEvM10gU2Vjb25kCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKworRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDI6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIFRoaXJkCisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKworRnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDM6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIFNpZGUKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4gYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlNDU0ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXgpAQCAtMCwwICsxLDgxIEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyXgorRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIFNlY29uZAorCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBUaGlyZAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkNTJmYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDQ3IEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQorRnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDM6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gU2lkZQorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZT1mdWxsXy0tYWxsIGIvdC90NDAxMy9kaWZmLmxvZ18tLWRlY29yYXRlPWZ1bGxfLS1hbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y5Yjg3MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZT1mdWxsXy0tYWxsCkBAIC0wLDAgKzEsNjEgQEAKKyQgZ2l0IGxvZyAtLWRlY29yYXRlPWZ1bGwgLS1hbGwKK2NvbW1pdCBiN2UwYmM2OTMwM2I0ODhiNDdkZWNhNzk5YTdkNzIzOTcxZGZhNmNkIChyZWZzL2hlYWRzL21vZGUpCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDY6MDAgMjAwNiArMDAwMAorCisgICAgdXBkYXRlIG1vZGUKKworY29tbWl0IGE2ZjM2NDM2OGNhMzIwYmM1YTkyZTE4OTEyZTE2ZmE2YjNkZmY1OTggKHJlZnMvaGVhZHMvbm90ZSkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNjowMCAyMDA2ICswMDAwCisKKyAgICB1cGRhdGUgbW9kZSAoZmlsZTIpCisKK05vdGVzOgorICAgIG5vdGUKKworY29tbWl0IGNkNGU3MmZkOTZmYWVkM2YwYmE5NDlkYzQyOTY3NDMwMzc0ZTIyOTAgKHJlZnMvaGVhZHMvcmVhcnJhbmdlKQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA2OjAwIDIwMDYgKzAwMDAKKworICAgIFJlYXJyYW5nZWQgbGluZXMgaW4gZGlyL3N1YgorCitjb21taXQgY2JhY2VkZDE0Y2I4Yjg5MjU1YTJjMDJiNTllNzdhMmU5YTgwMjFhMCAocmVmcy9ub3Rlcy9jb21taXRzKQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA2OjAwIDIwMDYgKzAwMDAKKworICAgIE5vdGVzIGFkZGVkIGJ5ICdnaXQgbm90ZXMgYWRkJworCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NCAoSEVBRCAtPiByZWZzL2hlYWRzL21hc3RlcikKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIChyZWZzL2hlYWRzL3NpZGUpCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EgKHJlZnMvaGVhZHMvaW5pdGlhbCkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGVfLS1hbGwgYi90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGVfLS1hbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVlMjBlMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZV8tLWFsbApAQCAtMCwwICsxLDYxIEBACiskIGdpdCBsb2cgLS1kZWNvcmF0ZSAtLWFsbAorY29tbWl0IGI3ZTBiYzY5MzAzYjQ4OGI0N2RlY2E3OTlhN2Q3MjM5NzFkZmE2Y2QgKG1vZGUpCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDY6MDAgMjAwNiArMDAwMAorCisgICAgdXBkYXRlIG1vZGUKKworY29tbWl0IGE2ZjM2NDM2OGNhMzIwYmM1YTkyZTE4OTEyZTE2ZmE2YjNkZmY1OTggKG5vdGUpCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDY6MDAgMjAwNiArMDAwMAorCisgICAgdXBkYXRlIG1vZGUgKGZpbGUyKQorCitOb3RlczoKKyAgICBub3RlCisKK2NvbW1pdCBjZDRlNzJmZDk2ZmFlZDNmMGJhOTQ5ZGM0Mjk2NzQzMDM3NGUyMjkwIChyZWFycmFuZ2UpCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDY6MDAgMjAwNiArMDAwMAorCisgICAgUmVhcnJhbmdlZCBsaW5lcyBpbiBkaXIvc3ViCisKK2NvbW1pdCBjYmFjZWRkMTRjYjhiODkyNTVhMmMwMmI1OWU3N2EyZTlhODAyMWEwIChyZWZzL25vdGVzL2NvbW1pdHMpCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDY6MDAgMjAwNiArMDAwMAorCisgICAgTm90ZXMgYWRkZWQgYnkgJ2dpdCBub3RlcyBhZGQnCisKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0IChIRUFEIC0+IG1hc3RlcikKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIChzaWRlKQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhIChpbml0aWFsKQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3Rlcl8tLV9kaXJfIGIvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyXy0tX2Rpcl8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4ZjE0NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3Rlcl8tLV9kaXJfCkBAIC0wLDAgKzEsNzQgQEAKKyQgZ2l0IGxvZyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyIC0tIGRpci8KK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTQyNWM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKQEAgLTAsMCArMSwxMjkgQEAKKyQgZ2l0IGxvZyAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyXy0tX2Rpcl8gYi90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3Rlcl8tLV9kaXJfCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjA3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3Rlcl8tLV9kaXJfCkBAIC0wLDAgKzEsNzQgQEAKKyQgZ2l0IGxvZyAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIgLS0gZGlyLworY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjMWU4YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMCwwICsxLDE5OSBAQAorJCBnaXQgbG9nIC0tcm9vdCAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tY2MgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNjIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZGlyL3N1YgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZmMwOWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCkBAIC0wLDAgKzEsMTY3IEBACiskIGdpdCBsb2cgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZGlyL3N1YgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWFhOTgwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyCkBAIC0wLDAgKzEsMTYxIEBACiskIGdpdCBsb2cgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy1jXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOWQ4NWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCkBAIC0wLDAgKzEsMTk5IEBACiskIGdpdCBsb2cgLS1yb290IC1jIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tY29tYmluZWQgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNvbWJpbmVkIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZGlyL3N1YgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy1wX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDJjMzM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLXBfbWFzdGVyCkBAIC0wLDAgKzEsMTQyIEBACiskIGdpdCBsb2cgLS1yb290IC1wIG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmNDYxNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290X21hc3RlcgpAQCAtMCwwICsxLDM0IEBACiskIGdpdCBsb2cgLS1yb290IG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy1HRl8tcF8tLXBpY2theGUtYWxsX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLUdGXy1wXy0tcGlja2F4ZS1hbGxfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNmY4ODAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1HRl8tcF8tLXBpY2theGUtYWxsX21hc3RlcgpAQCAtMCwwICsxLDI3IEBACiskIGdpdCBsb2cgLUdGIC1wIC0tcGlja2F4ZS1hbGwgbWFzdGVyCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tR0ZfLXBfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tR0ZfLXBfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkOTNmMmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1HRl8tcF9tYXN0ZXIKQEAgLTAsMCArMSwxOCBAQAorJCBnaXQgbG9nIC1HRiAtcCBtYXN0ZXIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tR0ZfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tR0ZfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNjcwOGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1HRl9tYXN0ZXIKQEAgLTAsMCArMSw3IEBACiskIGdpdCBsb2cgLUdGIG1hc3RlcgorY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tU0ZfLXBfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfLXBfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMzI0MzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1TRl8tcF9tYXN0ZXIKQEAgLTAsMCArMSwxOCBAQAorJCBnaXQgbG9nIC1TRiAtcCBtYXN0ZXIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNTk5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1TRl9tYXN0ZXIKQEAgLTAsMCArMSw3IEBACiskIGdpdCBsb2cgLVNGIG1hc3RlcgorY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyXy0tbWF4LWNvdW50PTAgYi90L3Q0MDEzL2RpZmYubG9nXy1TRl9tYXN0ZXJfLS1tYXgtY291bnQ9MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWZjNmM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyXy0tbWF4LWNvdW50PTAKQEAgLTAsMCArMSwyIEBACiskIGdpdCBsb2cgLVNGIG1hc3RlciAtLW1heC1jb3VudD0wCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy1TRl9tYXN0ZXJfLS1tYXgtY291bnQ9MSBiL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3Rlcl8tLW1heC1jb3VudD0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ODFhMDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1TRl9tYXN0ZXJfLS1tYXgtY291bnQ9MQpAQCAtMCwwICsxLDcgQEAKKyQgZ2l0IGxvZyAtU0YgbWFzdGVyIC0tbWF4LWNvdW50PTEKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3Rlcl8tLW1heC1jb3VudD0yIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyXy0tbWF4LWNvdW50PTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjNTVmZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3Rlcl8tLW1heC1jb3VudD0yCkBAIC0wLDAgKzEsNyBAQAorJCBnaXQgbG9nIC1TRiBtYXN0ZXIgLS1tYXgtY291bnQ9MgorY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tU19GX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLVNfRl9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4ZDJiNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLVNfRl9tYXN0ZXIKQEAgLTAsMCArMSw3IEBACiskIGdpdCBsb2cgLVMgRiBtYXN0ZXIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLW1fLXBfLS1maXJzdC1wYXJlbnRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tbV8tcF8tLWZpcnN0LXBhcmVudF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EwMDczZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLW1fLXBfLS1maXJzdC1wYXJlbnRfbWFzdGVyCkBAIC0wLDAgKzEsMTAwIEBACiskIGdpdCBsb2cgLW0gLXAgLS1maXJzdC1wYXJlbnQgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCBjZWFkMzJlLi45OTI5MTNjIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTQsMyArNCw1IEBAIEMKKyBECisgRQorIEYKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IGI0MTQxMDguLjEwYThhOWYgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC00LDMgKzQsNiBAQAorIDQKKyA1CisgNgorK0EKKytCCisrQworCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy1tXy1wX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLW1fLXBfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYTYyYTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1tXy1wX21hc3RlcgpAQCAtMCwwICsxLDIwMCBAQAorJCBnaXQgbG9nIC1tIC1wIG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQgKGZyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCkKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggY2VhZDMyZS4uOTkyOTEzYyAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC00LDMgKzQsNSBAQCBDCisgRAorIEUKKyBGCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCBiNDE0MTA4Li4xMGE4YTlmIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtNCwzICs0LDYgQEAKKyA0CisgNQorIDYKKytBCisrQgorK0MKKworY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQgKGZyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSkKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggNzI4OWUzNS4uOTkyOTEzYyAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDQgKzEsOCBAQAorIEEKKyBCCisrQworK0QKKytFCisrRgorIDEKKyAyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggZjQ2MTVkYS4uMTBhOGE5ZiAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsNiArMSw5IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CisgQQorIEIKKyBDCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDcyODllMzUuLjAwMDAwMDAKKy0tLSBhL2ZpbGUzCisrKysgL2Rldi9udWxsCitAQCAtMSw0ICswLDAgQEAKKy1BCistQgorLTEKKy0yCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLXBfLS1maXJzdC1wYXJlbnRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tcF8tLWZpcnN0LXBhcmVudF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZjODk2ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLXBfLS1maXJzdC1wYXJlbnRfbWFzdGVyCkBAIC0wLDAgKzEsNzggQEAKKyQgZ2l0IGxvZyAtcCAtLWZpcnN0LXBhcmVudCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy1wX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLXBfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMTMyNmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1wX21hc3RlcgpAQCAtMCwwICsxLDExNSBAQAorJCBnaXQgbG9nIC1wIG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ19tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThmNmNlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfbWFzdGVyCkBAIC0wLDAgKzEsMzQgQEAKKyQgZ2l0IGxvZyBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZi10cmVlXy0tcm9vdF8tLWFiYnJldl9pbml0aWFsIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZi10cmVlXy0tcm9vdF8tLWFiYnJldl9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZGFkNDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmLXRyZWVfLS1yb290Xy0tYWJicmV2X2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IC0tYWJicmV2IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzowMDAwMDAgMDQwMDAwIDAwMDAwMDAgZGE3YTMzZiBBCWRpcgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMCAwMWU3OWMzIEEJZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAgMDFlNzljMyBBCWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2PTRfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmYtdHJlZV8tLXJvb3RfLXJfLS1hYmJyZXY9NF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZmJmZWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2PTRfaW5pdGlhbApAQCAtMCwwICsxLDYgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLXIgLS1hYmJyZXY9NCBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCis6MDAwMDAwIDEwMDY0NCAwMDAwIDM1ZDIgQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwIDAxZTcgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMCAwMWU3IEEJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmYtdHJlZV8tLXJvb3RfLXJfLS1hYmJyZXZfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmYtdHJlZV8tLXJvb3RfLXJfLS1hYmJyZXZfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWM4NTYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZi10cmVlXy0tcm9vdF8tcl8tLWFiYnJldl9pbml0aWFsCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcm9vdCAtciAtLWFiYnJldiBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwIDM1ZDI0MmIgQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwIDAxZTc5YzMgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMCAwMWU3OWMzIEEJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmYtdHJlZV8tY18tLWFiYnJldl9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmLXRyZWVfLWNfLS1hYmJyZXZfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiODBmMDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmLXRyZWVfLWNfLS1hYmJyZXZfbWFzdGVyCkBAIC0wLDAgKzEsNSBAQAorJCBnaXQgZGlmZi10cmVlIC1jIC0tYWJicmV2IG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBjZWFkMzJlIDcyODllMzUgOTkyOTEzYyBNTQlkaXIvc3ViCis6OjEwMDY0NCAxMDA2NDQgMTAwNjQ0IGI0MTQxMDggZjQ2MTVkYSAxMGE4YTlmIE1NCWZpbGUwCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmXy0tbm8taW5kZXhfLS1yYXdfLS1hYmJyZXY9NF9kaXIyX2RpciBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmZfLS1uby1pbmRleF8tLXJhd18tLWFiYnJldj00X2RpcjJfZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYjdiYWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmXy0tbm8taW5kZXhfLS1yYXdfLS1hYmJyZXY9NF9kaXIyX2RpcgpAQCAtMCwwICsxLDMgQEAKKyQgZ2l0IGRpZmYgLS1uby1pbmRleCAtLXJhdyAtLWFiYnJldj00IGRpcjIgZGlyCis6MDAwMDAwIDEwMDY0NCAwMDAwIDAwMDAgQQlkaXIvc3ViCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmXy0tbm8taW5kZXhfLS1yYXdfZGlyMl9kaXIgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmXy0tbm8taW5kZXhfLS1yYXdfZGlyMl9kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmM2EzZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmZfLS1uby1pbmRleF8tLXJhd19kaXIyX2RpcgpAQCAtMCwwICsxLDMgQEAKKyQgZ2l0IGRpZmYgLS1uby1pbmRleCAtLXJhdyBkaXIyIGRpcgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMCAwMDAwMDAwIEEJZGlyL3N1YgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZl8tLXBhdGNoLXdpdGgtcmF3Xy1yX2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmXy0tcGF0Y2gtd2l0aC1yYXdfLXJfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDFmMWUzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZl8tLXBhdGNoLXdpdGgtcmF3Xy1yX2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzNiBAQAorJCBnaXQgZGlmZiAtLXBhdGNoLXdpdGgtcmF3IC1yIGluaXRpYWwuLnNpZGUKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmIgNzI4OWUzNSBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMgZjQ2MTVkYSBNCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwIDcyODllMzUgQQlmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmZfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZDhhZWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDM2IEBACiskIGdpdCBkaWZmIC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbC4uc2lkZQorOjEwMDY0NCAxMDA2NDQgMzVkMjQyYiA3Mjg5ZTM1IE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMyBmNDYxNWRhIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAgNzI4OWUzNSBBCWZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmZfLS1yYXdfLS1hYmJyZXY9NF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZl8tLXJhd18tLWFiYnJldj00X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlNDRkNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmZfLS1yYXdfLS1hYmJyZXY9NF9pbml0aWFsCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZiAtLXJhdyAtLWFiYnJldj00IGluaXRpYWwKKzoxMDA2NDQgMTAwNjQ0IDM1ZDIgOTkyOSBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTcgMTBhOCBNCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwIGIxZTYgQQlmaWxlMQorOjEwMDY0NCAwMDAwMDAgMDFlNyAwMDAwIEQJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmZfLS1yYXdfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmZfLS1yYXdfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTc1YmZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZl8tLXJhd19pbml0aWFsCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZiAtLXJhdyBpbml0aWFsCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiIDk5MjkxM2MgTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzIDEwYThhOWYgTQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMCBiMWU2NzIyIEEJZmlsZTEKKzoxMDA2NDQgMDAwMDAwIDAxZTc5YzMgMDAwMDAwMCBECWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1zaG93Xy0tcGF0Y2gtd2l0aC1yYXdfc2lkZSBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLXNob3dfLS1wYXRjaC13aXRoLXJhd19zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZmVkM2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1zaG93Xy0tcGF0Y2gtd2l0aC1yYXdfc2lkZQpAQCAtMCwwICsxLDQyIEBACiskIGdpdCBzaG93IC0tcGF0Y2gtd2l0aC1yYXcgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmIgNzI4OWUzNSBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMgZjQ2MTVkYSBNCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwIDcyODllMzUgQQlmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy13aGF0Y2hhbmdlZF8tLXJvb3RfbWFzdGVyIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtd2hhdGNoYW5nZWRfLS1yb290X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmNmZDRlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtd2hhdGNoYW5nZWRfLS1yb290X21hc3RlcgpAQCAtMCwwICsxLDQyIEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtLXJvb3QgbWFzdGVyCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworOjEwMDY0NCAxMDA2NDQgMzVkMjQyYiA3Mjg5ZTM1IE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMyBmNDYxNWRhIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAgNzI4OWUzNSBBCWZpbGUzCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworOjEwMDY0NCAxMDA2NDQgODQyMmQ0MCBjZWFkMzJlIE0JZGlyL3N1YgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMCBiMWU2NzIyIEEJZmlsZTEKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiIDg0MjJkNDAgTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzIGI0MTQxMDggTQlmaWxlMAorOjEwMDY0NCAwMDAwMDAgMDFlNzljMyAwMDAwMDAwIEQJZmlsZTIKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAgMzVkMjQyYiBBCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAgMDFlNzljMyBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwIDAxZTc5YzMgQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtd2hhdGNoYW5nZWRfLVNGX21hc3RlciBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLXdoYXRjaGFuZ2VkXy1TRl9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2Y2U1OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLXdoYXRjaGFuZ2VkXy1TRl9tYXN0ZXIKQEAgLTAsMCArMSw5IEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtU0YgbWFzdGVyCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKKzoxMDA2NDQgMTAwNjQ0IDg0MjJkNDAgY2VhZDMyZSBNCWRpci9zdWIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLXdoYXRjaGFuZ2VkX21hc3RlciBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLXdoYXRjaGFuZ2VkX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWU1MDBmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtd2hhdGNoYW5nZWRfbWFzdGVyCkBAIC0wLDAgKzEsMzIgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIG1hc3RlcgorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmIgNzI4OWUzNSBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMgZjQ2MTVkYSBNCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwIDcyODllMzUgQQlmaWxlMworCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKKzoxMDA2NDQgMTAwNjQ0IDg0MjJkNDAgY2VhZDMyZSBNCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAgYjFlNjcyMiBBCWZpbGUxCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworOjEwMDY0NCAxMDA2NDQgMzVkMjQyYiA4NDIyZDQwIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMyBiNDE0MTA4IE0JZmlsZTAKKzoxMDA2NDQgMDAwMDAwIDAxZTc5YzMgMDAwMDAwMCBECWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYucmV2LWxpc3RfLS1jaGlsZHJlbl9IRUFEIGIvdC90NDAxMy9kaWZmLnJldi1saXN0Xy0tY2hpbGRyZW5fSEVBRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2YxN2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnJldi1saXN0Xy0tY2hpbGRyZW5fSEVBRApAQCAtMCwwICsxLDcgQEAKKyQgZ2l0IHJldi1saXN0IC0tY2hpbGRyZW4gSEVBRAorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0Cis5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKKzFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5yZXYtbGlzdF8tLXBhcmVudHNfSEVBRCBiL3QvdDQwMTMvZGlmZi5yZXYtbGlzdF8tLXBhcmVudHNfSEVBRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWQyYTgwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnJldi1saXN0Xy0tcGFyZW50c19IRUFECkBAIC0wLDAgKzEsNyBAQAorJCBnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIEhFQUQKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd18tLWZpcnN0LXBhcmVudF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuc2hvd18tLWZpcnN0LXBhcmVudF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RjYmU0NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tZmlyc3QtcGFyZW50X21hc3RlcgpAQCAtMCwwICsxLDMwIEBACiskIGdpdCBzaG93IC0tZmlyc3QtcGFyZW50IG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggY2VhZDMyZS4uOTkyOTEzYyAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC00LDMgKzQsNSBAQCBDCisgRAorIEUKKyBGCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCBiNDE0MTA4Li4xMGE4YTlmIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtNCwzICs0LDYgQEAKKyA0CisgNQorIDYKKytBCisrQgorK0MKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5zaG93Xy0tcGF0Y2gtd2l0aC1yYXdfc2lkZSBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tcGF0Y2gtd2l0aC1yYXdfc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjFiNDZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnNob3dfLS1wYXRjaC13aXRoLXJhd19zaWRlCkBAIC0wLDAgKzEsNDIgQEAKKyQgZ2l0IHNob3cgLS1wYXRjaC13aXRoLXJhdyBzaWRlCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworOjEwMDY0NCAxMDA2NDQgMzVkMjQyYi4uLiA3Mjg5ZTM1Li4uIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMy4uLiBmNDYxNWRhLi4uIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gNzI4OWUzNS4uLiBBCWZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5zaG93Xy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9zaWRlIGIvdC90NDAxMy9kaWZmLnNob3dfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVhNDc0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9zaWRlCkBAIC0wLDAgKzEsNDQgQEAKKyQgZ2l0IHNob3cgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IHNpZGUKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfLS1wYXRjaC13aXRoLXN0YXRfc2lkZSBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tcGF0Y2gtd2l0aC1zdGF0X3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc0ZTk5YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tcGF0Y2gtd2l0aC1zdGF0X3NpZGUKQEAgLTAsMCArMSw0MyBAQAorJCBnaXQgc2hvdyAtLXBhdGNoLXdpdGgtc3RhdCBzaWRlCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5zaG93Xy0tcm9vdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLnNob3dfLS1yb290X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4OTEzNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tcm9vdF9pbml0aWFsCkBAIC0wLDAgKzEsMzQgQEAKKyQgZ2l0IHNob3cgLS1yb290IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5zaG93Xy0tc3RhdF8tLXN1bW1hcnlfc2lkZSBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tc3RhdF8tLXN1bW1hcnlfc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzE0OTJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnNob3dfLS1zdGF0Xy0tc3VtbWFyeV9zaWRlCkBAIC0wLDAgKzEsMTMgQEAKKyQgZ2l0IHNob3cgLS1zdGF0IC0tc3VtbWFyeSBzaWRlCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd18tLXN0YXRfc2lkZSBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tc3RhdF9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTcxMjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXN0YXRfc2lkZQpAQCAtMCwwICsxLDEyIEBACiskIGdpdCBzaG93IC0tc3RhdCBzaWRlCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd18tY19tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuc2hvd18tY19tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhYmE4ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93Xy1jX21hc3RlcgpAQCAtMCwwICsxLDM2IEBACiskIGdpdCBzaG93IC1jIG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2RpZmYgLS1jb21iaW5lZCBkaXIvc3ViCitpbmRleCBjZWFkMzJlLDcyODllMzUuLjk5MjkxM2MKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAQCAtMSw2IC0xLDQgKzEsOCBAQEAKKyAgQQorICBCCisgK0MKKyArRAorICtFCisgK0YKKysgMQorKyAyCitkaWZmIC0tY29tYmluZWQgZmlsZTAKK2luZGV4IGI0MTQxMDgsZjQ2MTVkYS4uMTBhOGE5ZgorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQEAgLTEsNiAtMSw2ICsxLDkgQEBACisgIDEKKyAgMgorICAzCisgKzQKKyArNQorICs2CisrIEEKKysgQgorKyBDCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd18tbV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuc2hvd18tbV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhMmVlNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93Xy1tX21hc3RlcgpAQCAtMCwwICsxLDkzIEBACiskIGdpdCBzaG93IC1tIG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQgKGZyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCkKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggY2VhZDMyZS4uOTkyOTEzYyAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC00LDMgKzQsNSBAQCBDCisgRAorIEUKKyBGCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCBiNDE0MTA4Li4xMGE4YTlmIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtNCwzICs0LDYgQEAKKyA0CisgNQorIDYKKytBCisrQgorK0MKKworY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQgKGZyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSkKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggNzI4OWUzNS4uOTkyOTEzYyAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDQgKzEsOCBAQAorIEEKKyBCCisrQworK0QKKytFCisrRgorIDEKKyAyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggZjQ2MTVkYS4uMTBhOGE5ZiAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsNiArMSw5IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CisgQQorIEIKKyBDCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDcyODllMzUuLjAwMDAwMDAKKy0tLSBhL2ZpbGUzCisrKysgL2Rldi9udWxsCitAQCAtMSw0ICswLDAgQEAKKy1BCistQgorLTEKKy0yCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd19pbml0aWFsIGIvdC90NDAxMy9kaWZmLnNob3dfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzQwNjZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnNob3dfaW5pdGlhbApAQCAtMCwwICsxLDcgQEAKKyQgZ2l0IHNob3cgaW5pdGlhbAorY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd19tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuc2hvd19tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwOGNlMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93X21hc3RlcgpAQCAtMCwwICsxLDM2IEBACiskIGdpdCBzaG93IG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2RpZmYgLS1jYyBkaXIvc3ViCitpbmRleCBjZWFkMzJlLDcyODllMzUuLjk5MjkxM2MKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAQCAtMSw2IC0xLDQgKzEsOCBAQEAKKyAgQQorICBCCisgK0MKKyArRAorICtFCisgK0YKKysgMQorKyAyCitkaWZmIC0tY2MgZmlsZTAKK2luZGV4IGI0MTQxMDgsZjQ2MTVkYS4uMTBhOGE5ZgorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQEAgLTEsNiAtMSw2ICsxLDkgQEBACisgIDEKKyAgMgorICAzCisgKzQKKyArNQorICs2CisrIEEKKysgQgorKyBDCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd19zaWRlIGIvdC90NDAxMy9kaWZmLnNob3dfc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzBhMDczCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnNob3dfc2lkZQpAQCAtMCwwICsxLDM4IEBACiskIGdpdCBzaG93IHNpZGUKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3Rlcl8tLV9kaXJfIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXJfLS1fZGlyXwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGI2YWYyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXJfLS1fZGlyXwpAQCAtMCwwICsxLDYxIEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyIC0tIGRpci8KK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYzQzMWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyCkBAIC0wLDAgKzEsMTE2IEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyXy0tX2Rpcl8gYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyXy0tX2Rpcl8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMwYzI4NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXJfLS1fZGlyXwpAQCAtMCwwICsxLDYxIEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIgLS0gZGlyLworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCistLS0KKyBkaXIvc3ViIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGFhZTc4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTAsMCArMSwxOTkgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC0tcm9vdCAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tY2MgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNjIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZGlyL3N1YgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjkwZTUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCkBAIC0wLDAgKzEsMTYwIEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRpci9zdWIKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTAKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNmNjOTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpAQCAtMCwwICsxLDE1NCBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IG1hc3RlcgorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZDMyYmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy1jXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTAsMCArMSwxOTkgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC0tcm9vdCAtYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWNvbWJpbmVkIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jb21iaW5lZCBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRpci9zdWIKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTAKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy1wX21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLXBfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZjFmMDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy1wX21hc3RlcgpAQCAtMCwwICsxLDEzNSBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLS1yb290IC1wIG1hc3RlcgorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfbWFzdGVyIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQwNWNiNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfbWFzdGVyCkBAIC0wLDAgKzEsNDIgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC0tcm9vdCBtYXN0ZXIKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiLi4uIDcyODllMzUuLi4gTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzLi4uIGY0NjE1ZGEuLi4gTQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiA3Mjg5ZTM1Li4uIEEJZmlsZTMKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCis6MTAwNjQ0IDEwMDY0NCA4NDIyZDQwLi4uIGNlYWQzMmUuLi4gTQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIGIxZTY3MjIuLi4gQQlmaWxlMQorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmIuLi4gODQyMmQ0MC4uLiBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMuLi4gYjQxNDEwOC4uLiBNCWZpbGUwCis6MTAwNjQ0IDAwMDAwMCAwMWU3OWMzLi4uIDAwMDAwMDAuLi4gRAlmaWxlMgorCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiAzNWQyNDJiLi4uIEEJZGlyL3N1YgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiAwMWU3OWMzLi4uIEEJZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMDFlNzljMy4uLiBBCWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLVNGXy1wX21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tU0ZfLXBfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzOWRhODQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLVNGXy1wX21hc3RlcgpAQCAtMCwwICsxLDE4IEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtU0YgLXAgbWFzdGVyCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tU0ZfbWFzdGVyIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy1TRl9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5OTMyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tU0ZfbWFzdGVyCkBAIC0wLDAgKzEsOSBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLVNGIG1hc3RlcgorY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCis6MTAwNjQ0IDEwMDY0NCA4NDIyZDQwLi4uIGNlYWQzMmUuLi4gTQlkaXIvc3ViCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLXBfbWFzdGVyIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMThkNDMyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy1wX21hc3RlcgpAQCAtMCwwICsxLDEwMiBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLXAgbWFzdGVyCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkM2JjYzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfbWFzdGVyCkBAIC0wLDAgKzEsMzIgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIG1hc3RlcgorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmIuLi4gNzI4OWUzNS4uLiBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMuLi4gZjQ2MTVkYS4uLiBNCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDcyODllMzUuLi4gQQlmaWxlMworCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKKzoxMDA2NDQgMTAwNjQ0IDg0MjJkNDAuLi4gY2VhZDMyZS4uLiBNCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gYjFlNjcyMi4uLiBBCWZpbGUxCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworOjEwMDY0NCAxMDA2NDQgMzVkMjQyYi4uLiA4NDIyZDQwLi4uIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMy4uLiBiNDE0MTA4Li4uIE0JZmlsZTAKKzoxMDA2NDQgMDAwMDAwIDAxZTc5YzMuLi4gMDAwMDAwMC4uLiBECWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDE0LWZvcm1hdC1wYXRjaC5zaCBiL3QvdDQwMTQtZm9ybWF0LXBhdGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRiN2U3MzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE0LWZvcm1hdC1wYXRjaC5zaApAQCAtMCwwICsxLDIxNDQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndmFyaW91cyBmb3JtYXQtcGF0Y2ggdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItdGVybWluYWwuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTA7IGRvIGVjaG8gIiRpIjsgZG9uZSA+ZmlsZSAmJgorCWNhdCBmaWxlID5lbGlmICYmCisJZ2l0IGFkZCBmaWxlIGVsaWYgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCisJZm9yIGkgaW4gMSAyIDUgNiBBIEIgQyA3IDggOSAxMDsgZG8gZWNobyAiJGkiOyBkb25lID5maWxlICYmCisJdGVzdF9jaG1vZCAreCBlbGlmICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU2lkZSBjaGFuZ2VzICMxIiAmJgorCisJZm9yIGkgaW4gRCBFIEY7IGRvIGVjaG8gIiRpIjsgZG9uZSA+PmZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIGNoYW5nZXMgIzIiICYmCisJZ2l0IHRhZyBDMiAmJgorCisJZm9yIGkgaW4gNSA2IDEgMiAzIEEgNCBCIEMgNyA4IDkgMTAgRCBFIEY7IGRvIGVjaG8gIiRpIjsgZG9uZSA+ZmlsZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlNpZGUgY2hhbmdlcyAjMyB3aXRoIFxcbiBiYWNrc2xhc2gtbiBpbiBpdC4iICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGRpZmYtdHJlZSAtcCBDMiA+cGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8cGF0Y2ggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJNYXN0ZXIgYWNjZXB0cyBtb3JhbCBlcXVpdmFsZW50IG9mICMyIiAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcGF0Y2hpZCAmJgorCWZvciBpIGluIDUgNiAxIDIgMyBBIDQgQiBDIDcgOCA5IDEwIEQgRSBGOyBkbyBlY2hvICIkaSI7IGRvbmUgPmZpbGUyICYmCisJZm9yIGkgaW4gMSAyIDMgQSA0IEIgQyA3IDggOSAxMCBEIEUgRiA1IDY7IGRvIGVjaG8gIiRpIjsgZG9uZSA+ZmlsZTMgJiYKKwlmb3IgaSBpbiA4IDkgMTA7IGRvIGVjaG8gIiRpIjsgZG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSBmaWxlMiBmaWxlMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInBhdGNoaWQgMSIgJiYKKwlmb3IgaSBpbiA0IEEgQiA3IDggOSAxMDsgZG8gZWNobyAiJGkiOyBkb25lID5maWxlMiAmJgorCWZvciBpIGluIDggOSAxMCA1IDY7IGRvIGVjaG8gIiRpIjsgZG9uZSA+ZmlsZTMgJiYKKwlnaXQgYWRkIGZpbGUyIGZpbGUzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicGF0Y2hpZCAyIiAmJgorCWZvciBpIGluIDEwIDUgNjsgZG8gZWNobyAiJGkiOyBkb25lID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicGF0Y2hpZCAzIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0nICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2gwICYmCisJZ3JlcCAiXkZyb20gIiBwYXRjaDAgPmZyb20wICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBmcm9tMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0nICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IFwKKwkJLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0gbWFzdGVyLi5zaWRlID5wYXRjaDEgJiYKKwlncmVwICJeRnJvbSAiIHBhdGNoMSA+ZnJvbTEgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGZyb20xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbSBoYW5kbGVzIHRhZ3MnICcKKwlnaXQgdGFnIC1hIHYxIC1tIHRhZyBzaWRlICYmCisJZ2l0IHRhZyAtYSB2MiAtbSB0YWcgbWFzdGVyICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbSB2Mi4udjEgPnBhdGNoMSAmJgorCWdyZXAgIl5Gcm9tICIgcGF0Y2gxID5mcm9tMSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgZnJvbTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZm9ybWF0LXBhdGNoIGRvZXNuJ3QgY29uc2lkZXIgbWVyZ2UgY29tbWl0cyIgJworCWdpdCBjaGVja291dCAtYiBzbGF2ZSBtYXN0ZXIgJiYKKwllY2hvICJBbm90aGVyIGxpbmUiID4+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWFtICJTbGF2ZSBjaGFuZ2UgIzEiICYmCisJZWNobyAiWWV0IGFub3RoZXIgbGluZSIgPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYW0gIlNsYXZlIGNoYW5nZSAjMiIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWVyZ2VyIG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIHNsYXZlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMyAtLXN0ZG91dCA+cGF0Y2ggJiYKKwlncmVwICJeRnJvbSAiIHBhdGNoID5mcm9tICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBmcm9tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCByZXN1bHQgYXBwbGllcycgJworCWdpdCBjaGVja291dCAtYiByZWJ1aWxkLTAgbWFzdGVyICYmCisJZ2l0IGFtIC0zIHBhdGNoMCAmJgorCWdpdCByZXYtbGlzdCBtYXN0ZXIuLiA+bGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0gcmVzdWx0IGFwcGxpZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgcmVidWlsZC0xIG1hc3RlciAmJgorCWdpdCBhbSAtMyBwYXRjaDEgJiYKKwlnaXQgcmV2LWxpc3QgbWFzdGVyLi4gPmxpc3QgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGRpZCBub3Qgc2NyZXcgdXAgdGhlIGxvZyBtZXNzYWdlJyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBzaWRlID5hY3R1YWwgJiYKKwlncmVwICJeU2lkZSAuKiB3aXRoIC4qIGJhY2tzbGFzaC1uIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIGRpZCBub3Qgc2NyZXcgdXAgdGhlIGxvZyBtZXNzYWdlJyAnCisJZ3JlcCAiXlN1YmplY3Q6IC4qU2lkZSBjaGFuZ2VzICMzIHdpdGggLiogYmFja3NsYXNoLW4iIHBhdGNoMCAmJgorCWdyZXAgIl5TdWJqZWN0OiAuKlNpZGUgY2hhbmdlcyAjMyB3aXRoIC4qIGJhY2tzbGFzaC1uIiBwYXRjaDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGF5IGRpZCBub3Qgc2NyZXcgdXAgdGhlIGxvZyBtZXNzYWdlJyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWJ1aWxkLTEgPmFjdHVhbCAmJgorCWdyZXAgIl5TaWRlIC4qIHdpdGggLiogYmFja3NsYXNoLW4iIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRyYSBoZWFkZXJzJyAnCisJZ2l0IGNvbmZpZyBmb3JtYXQuaGVhZGVycyAiVG86IFIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4KKyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIGZvcm1hdC5oZWFkZXJzICJDYzogUyBFIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPgorIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDIgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2gyID5oZHJzMiAmJgorCWdyZXAgIl5UbzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzMiAmJgorCWdyZXAgIl5DYzogUyBFIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRyYSBoZWFkZXJzIHdpdGhvdXQgbmV3bGluZXMnICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LmhlYWRlcnMgIlRvOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBjb25maWcgLS1hZGQgZm9ybWF0LmhlYWRlcnMgIkNjOiBTIEUgQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDMgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2gzID5oZHJzMyAmJgorCWdyZXAgIl5UbzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzMyAmJgorCWdyZXAgIl5DYzogUyBFIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRyYSBoZWFkZXJzIHdpdGggbXVsdGlwbGUgVG86cycgJworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBmb3JtYXQuaGVhZGVycyAiVG86IFIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBmb3JtYXQuaGVhZGVycyAiVG86IFMgRSBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoNCAmJgorCXNlZCAtZSAiL15cJC9xIiBwYXRjaDQgPmhkcnM0ICYmCisJZ3JlcCAiXlRvOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+LFwkIiBoZHJzNCAmJgorCWdyZXAgIl4gKlMgRSBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgY2MgKGFzY2lpKScgJworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBmb3JtYXQuaGVhZGVycyAiQ2M6IFIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWNjPSJTIEUgQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+IiAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoNSAmJgorCXNlZCAtZSAiL15cJC9xIiBwYXRjaDUgPmhkcnM1ICYmCisJZ3JlcCAiXkNjOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+LFwkIiBoZHJzNSAmJgorCWdyZXAgIl4gKlMgRSBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczUKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgY2MgKHJmYzgyMiknICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LmhlYWRlcnMgIkNjOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1jYz0iUy4gRS4gQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+IiAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoNSAmJgorCXNlZCAtZSAiL15cJC9xIiBwYXRjaDUgPmhkcnM1ICYmCisJZ3JlcCAiXkNjOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+LFwkIiBoZHJzNSAmJgorCWdyZXAgIl4gKlwiUy4gRS4gQ2lwaWVudFwiIDxzY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWFuZCBsaW5lIGhlYWRlcnMnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGZvcm1hdC5oZWFkZXJzICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWFkZC1oZWFkZXI9IkNjOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoNiAmJgorCXNlZCAtZSAiL15cJC9xIiBwYXRjaDYgPmhkcnM2ICYmCisJZ3JlcCAiXkNjOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIGhkcnM2CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZ3VyYXRpb24gaGVhZGVycyBhbmQgY29tbWFuZCBsaW5lIGhlYWRlcnMnICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LmhlYWRlcnMgIkNjOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1hZGQtaGVhZGVyPSJDYzogUyBFIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPiIgLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDcgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2g3ID5oZHJzNyAmJgorCWdyZXAgIl5DYzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPixcJCIgaGRyczcgJiYKKwlncmVwICJeICpTIEUgQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+XCQiIGhkcnM3CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQgbGluZSBUbzogaGVhZGVyIChhc2NpaSknICcKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGZvcm1hdC5oZWFkZXJzICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXRvPSJSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoOCAmJgorCXNlZCAtZSAiL15cJC9xIiBwYXRjaDggPmhkcnM4ICYmCisJZ3JlcCAiXlRvOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIGhkcnM4CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2NvbW1hbmQgbGluZSBUbzogaGVhZGVyIChyZmM4MjIpJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXRvPSJSLiBFLiBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2g4ICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoOCA+aGRyczggJiYKKwlncmVwICJeVG86IFwiUi4gRS4gQ2lwaWVudFwiIDxyY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczgKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY29tbWFuZCBsaW5lIFRvOiBoZWFkZXIgKHJmYzIwNDcpJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXRvPSJSIMOEIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDggJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2g4ID5oZHJzOCAmJgorCWdyZXAgIl5UbzogPT9VVEYtOD9xP1I9MjA9QzM9ODQ9MjBDaXBpZW50Pz0gPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmF0aW9uIFRvOiBoZWFkZXIgKGFzY2lpKScgJworCWdpdCBjb25maWcgZm9ybWF0LnRvICJSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDkgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2g5ID5oZHJzOSAmJgorCWdyZXAgIl5UbzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzOQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjb25maWd1cmF0aW9uIFRvOiBoZWFkZXIgKHJmYzgyMiknICcKKwlnaXQgY29uZmlnIGZvcm1hdC50byAiUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDkgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2g5ID5oZHJzOSAmJgorCWdyZXAgIl5UbzogXCJSLiBFLiBDaXBpZW50XCIgPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzOQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjb25maWd1cmF0aW9uIFRvOiBoZWFkZXIgKHJmYzIwNDcpJyAnCisJZ2l0IGNvbmZpZyBmb3JtYXQudG8gIlIgw4QgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDkgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2g5ID5oZHJzOSAmJgorCWdyZXAgIl5UbzogPT9VVEYtOD9xP1I9MjA9QzM9ODQ9MjBDaXBpZW50Pz0gPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzOQorJworCisjIGNoZWNrX3BhdGNoIDxwYXRjaD46IFZlcmlmeSB0aGF0IDxwYXRjaD4gbG9va3MgbGlrZSBhIGhhbGYtc2FuZQorIyBwYXRjaCBlbWFpbCB0byBhdm9pZCBhIGZhbHNlIHBvc2l0aXZlIHdpdGggIWdyZXAKK2NoZWNrX3BhdGNoICgpIHsKKwlncmVwIC1lICJeRnJvbToiICIkMSIgJiYKKwlncmVwIC1lICJeRGF0ZToiICIkMSIgJiYKKwlncmVwIC1lICJeU3ViamVjdDoiICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LmZyb209ZmFsc2UnICcKKwlnaXQgLWMgZm9ybWF0LmZyb209ZmFsc2UgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2ggJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2ggPmhkcnMgJiYKKwljaGVja19wYXRjaCBwYXRjaCAmJgorCSEgZ3JlcCAiXkZyb206IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT5cJCIgaGRycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQuZnJvbT10cnVlJyAnCisJZ2l0IC1jIGZvcm1hdC5mcm9tPXRydWUgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2ggJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2ggPmhkcnMgJiYKKwljaGVja19wYXRjaCBoZHJzICYmCisJZ3JlcCAiXkZyb206IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT5cJCIgaGRycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQuZnJvbSB3aXRoIGFkZHJlc3MnICcKKwlnaXQgLWMgZm9ybWF0LmZyb209IkYgUiBPbSA8ZnJvbUBleGFtcGxlLmNvbT4iIGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoID5oZHJzICYmCisJY2hlY2tfcGF0Y2ggaGRycyAmJgorCWdyZXAgIl5Gcm9tOiBGIFIgT20gPGZyb21AZXhhbXBsZS5jb20+XCQiIGhkcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1mcm9tIG92ZXJyaWRlcyBmb3JtYXQuZnJvbScgJworCWdpdCAtYyBmb3JtYXQuZnJvbT0iRiBSIE9tIDxmcm9tQGV4YW1wbGUuY29tPiIgZm9ybWF0LXBhdGNoIC0tbm8tZnJvbSAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoID5oZHJzICYmCisJY2hlY2tfcGF0Y2ggaGRycyAmJgorCSEgZ3JlcCAiXkZyb206IEYgUiBPbSA8ZnJvbUBleGFtcGxlLmNvbT5cJCIgaGRycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWZyb20gb3ZlcnJpZGVzIGZvcm1hdC5mcm9tJyAnCisJZ2l0IC1jIGZvcm1hdC5mcm9tPSJGIFIgT20gPGZyb21AZXhhbXBsZS5jb20+IiBmb3JtYXQtcGF0Y2ggLS1mcm9tIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2ggJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2ggPmhkcnMgJiYKKwljaGVja19wYXRjaCBoZHJzICYmCisJISBncmVwICJeRnJvbTogRiBSIE9tIDxmcm9tQGV4YW1wbGUuY29tPlwkIiBoZHJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdG8gb3ZlcnJpZGVzIGNvbmZpZy50bycgJworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBmb3JtYXQudG8gXAorCQkiUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm8tdG8gLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDEwICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoMTAgPmhkcnMxMCAmJgorCWNoZWNrX3BhdGNoIGhkcnMxMCAmJgorCSEgZ3JlcCAiXlRvOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIGhkcnMxMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXRvIGFuZCAtLXRvIHJlcGxhY2VzIGNvbmZpZy50bycgJworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBmb3JtYXQudG8gXAorCQkiU29tZW9uZSA8c29tZW9uZUBvdXQudGhlcmU+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby10byAtLXRvPSJTb21lb25lIEVsc2UgPGVsc2VAb3V0LnRoZXJlPiIgXAorCQktLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoMTEgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2gxMSA+aGRyczExICYmCisJY2hlY2tfcGF0Y2ggaGRyczExICYmCisJISBncmVwICJeVG86IFNvbWVvbmUgPHNvbWVvbmVAb3V0LnRoZXJlPlwkIiBoZHJzMTEgJiYKKwlncmVwICJeVG86IFNvbWVvbmUgRWxzZSA8ZWxzZUBvdXQudGhlcmU+XCQiIGhkcnMxMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLWNjIG92ZXJyaWRlcyBjb25maWcuY2MnICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LmNjIFwKKwkJIkMgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLWNjIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2gxMiAmJgorCXNlZCAtZSAiL15cJC9xIiBwYXRjaDEyID5oZHJzMTIgJiYKKwljaGVja19wYXRjaCBoZHJzMTIgJiYKKwkhIGdyZXAgIl5DYzogQyBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzMTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1hZGQtaGVhZGVyIG92ZXJyaWRlcyBjb25maWcuaGVhZGVycycgJworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBmb3JtYXQuaGVhZGVycyBcCisJCSJIZWFkZXIxOiBCIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby1hZGQtaGVhZGVyIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2gxMyAmJgorCXNlZCAtZSAiL15cJC9xIiBwYXRjaDEzID5oZHJzMTMgJiYKKwljaGVja19wYXRjaCBoZHJzMTMgJiYKKwkhIGdyZXAgIl5IZWFkZXIxOiBCIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIGhkcnMxMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBmaWxlcycgJworCXJtIC1yZiBwYXRjaGVzLyAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtbyBwYXRjaGVzLyBtYXN0ZXIgJiYKKwlscyBwYXRjaGVzLzAwMDEtU2lkZS1jaGFuZ2VzLTEucGF0Y2ggcGF0Y2hlcy8wMDAyLVNpZGUtY2hhbmdlcy0yLnBhdGNoIHBhdGNoZXMvMDAwMy1TaWRlLWNoYW5nZXMtMy13aXRoLW4tYmFja3NsYXNoLW4taW4taXQucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyb2xsIGNvdW50JyAnCisJcm0gLWZyIHBhdGNoZXMgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1vIHBhdGNoZXMgLS1jb3Zlci1sZXR0ZXIgLS1yZXJvbGwtY291bnQgNCBtYXN0ZXIuLnNpZGUgPmxpc3QgJiYKKwkhIGdyZXAgLXYgIl5wYXRjaGVzL3Y0LTAwMFswLTNdLSIgbGlzdCAmJgorCXNlZCAtbiAtZSAiL15TdWJqZWN0OiAvcCIgJChjYXQgbGlzdCkgPnN1YmplY3RzICYmCisJISBncmVwIC12ICJeU3ViamVjdDogXFtQQVRDSCB2NCBbMC0zXS8zXF0gIiBzdWJqZWN0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJvbGwgY291bnQgKC12KScgJworCXJtIC1mciBwYXRjaGVzICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtbyBwYXRjaGVzIC0tY292ZXItbGV0dGVyIC12NCBtYXN0ZXIuLnNpZGUgPmxpc3QgJiYKKwkhIGdyZXAgLXYgIl5wYXRjaGVzL3Y0LTAwMFswLTNdLSIgbGlzdCAmJgorCXNlZCAtbiAtZSAiL15TdWJqZWN0OiAvcCIgJChjYXQgbGlzdCkgPnN1YmplY3RzICYmCisJISBncmVwIC12ICJeU3ViamVjdDogXFtQQVRDSCB2NCBbMC0zXS8zXF0gIiBzdWJqZWN0cworJworCitjaGVja190aHJlYWRpbmcgKCkgeworCWV4cGVjdD0iJDEiICYmCisJc2hpZnQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0ICIkQCIgPnBhdGNoICYmCisJIyBQcmludHMgZXZlcnl0aGluZyBiZXR3ZWVuIHRoZSBNZXNzYWdlLUlEIGFuZCBJbi1SZXBseS1UbywKKwkjIGFuZCByZXBsYWNlcyBhbGwgTWVzc2FnZS1JRC1sb29rYWxpa2VzIGJ5IGEgc2VxdWVuY2UgbnVtYmVyCisJcGVybCAtbmUgJworCQlpZiAoL14obWVzc2FnZS1pZHxyZWZlcmVuY2VzfGluLXJlcGx5LXRvKS9pKSB7CisJCQkkcHJpbnRpbmcgPSAxOworCQl9IGVsc2lmICgvXlxTLykgeworCQkJJHByaW50aW5nID0gMDsKKwkJfQorCQlpZiAoJHByaW50aW5nKSB7CisJCQkkaHskMX09JGkrKyBpZiAoLzwoW14+XSspPi8gYW5kICFleGlzdHMgJGh7JDF9KTsKKwkJCWZvciAkayAoa2V5cyAlaCkge3MvJGsvJGh7JGt9L307CisJCQlwcmludDsKKwkJfQorCQlwcmludCAiLS0tXG4iIGlmIC9eRnJvbSAvaTsKKwknIDxwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgIiRleHBlY3QiIGFjdHVhbAorfQorCitjYXQgPj5leHBlY3Qubm8tdGhyZWFkaW5nIDw8RU9GCistLS0KKy0tLQorLS0tCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gdGhyZWFkaW5nJyAnCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwljaGVja190aHJlYWRpbmcgZXhwZWN0Lm5vLXRocmVhZGluZyBtYXN0ZXIKKycKKworY2F0ID5leHBlY3QudGhyZWFkIDw8RU9GCistLS0KK01lc3NhZ2UtSWQ6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8MT4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCcgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QudGhyZWFkIC0tdGhyZWFkIG1hc3RlcgorJworCitjYXQgPmV4cGVjdC5pbi1yZXBseS10byA8PEVPRgorLS0tCitNZXNzYWdlLUlkOiA8MD4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwxPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwxPgorLS0tCitNZXNzYWdlLUlkOiA8Mz4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwxPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBpbi1yZXBseS10bycgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuaW4tcmVwbHktdG8gLS1pbi1yZXBseS10bz0iPHRlc3QubWVzc2FnZT4iIFwKKwkJLS10aHJlYWQgbWFzdGVyCisnCisKK2NhdCA+ZXhwZWN0LmNvdmVyLWxldHRlciA8PEVPRgorLS0tCitNZXNzYWdlLUlkOiA8MD4KKy0tLQorTWVzc2FnZS1JZDogPDE+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MD4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MD4KKy0tLQorTWVzc2FnZS1JZDogPDM+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MD4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgY292ZXItbGV0dGVyJyAnCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC5jb3Zlci1sZXR0ZXIgLS1jb3Zlci1sZXR0ZXIgLS10aHJlYWQgbWFzdGVyCisnCisKK2NhdCA+ZXhwZWN0LmNsLWlydCA8PEVPRgorLS0tCitNZXNzYWdlLUlkOiA8MD4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwxPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mz4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorLS0tCitNZXNzYWdlLUlkOiA8ND4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBjb3Zlci1sZXR0ZXIgaW4tcmVwbHktdG8nICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmNsLWlydCAtLWNvdmVyLWxldHRlciBcCisJCS0taW4tcmVwbHktdG89Ijx0ZXN0Lm1lc3NhZ2U+IiAtLXRocmVhZCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIGV4cGxpY2l0IHNoYWxsb3cnICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmNsLWlydCAtLWNvdmVyLWxldHRlciBcCisJCS0taW4tcmVwbHktdG89Ijx0ZXN0Lm1lc3NhZ2U+IiAtLXRocmVhZD1zaGFsbG93IG1hc3RlcgorJworCitjYXQgPmV4cGVjdC5kZWVwIDw8RU9GCistLS0KK01lc3NhZ2UtSWQ6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8MT4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwwPgorCTwxPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBkZWVwJyAnCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC5kZWVwIC0tdGhyZWFkPWRlZXAgbWFzdGVyCisnCisKK2NhdCA+ZXhwZWN0LmRlZXAtaXJ0IDw8RU9GCistLS0KK01lc3NhZ2UtSWQ6IDwwPgorSW4tUmVwbHktVG86IDwxPgorUmVmZXJlbmNlczogPDE+CistLS0KK01lc3NhZ2UtSWQ6IDwyPgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDE+CisJPDA+CistLS0KK01lc3NhZ2UtSWQ6IDwzPgorSW4tUmVwbHktVG86IDwyPgorUmVmZXJlbmNlczogPDE+CisJPDA+CisJPDI+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIGRlZXAgaW4tcmVwbHktdG8nICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmRlZXAtaXJ0ICAtLXRocmVhZD1kZWVwIFwKKwkJLS1pbi1yZXBseS10bz0iPHRlc3QubWVzc2FnZT4iIG1hc3RlcgorJworCitjYXQgPmV4cGVjdC5kZWVwLWNsIDw8RU9GCistLS0KK01lc3NhZ2UtSWQ6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8MT4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwwPgorCTwxPgorLS0tCitNZXNzYWdlLUlkOiA8Mz4KK0luLVJlcGx5LVRvOiA8Mj4KK1JlZmVyZW5jZXM6IDwwPgorCTwxPgorCTwyPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBkZWVwIGNvdmVyLWxldHRlcicgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuZGVlcC1jbCAtLWNvdmVyLWxldHRlciAtLXRocmVhZD1kZWVwIG1hc3RlcgorJworCitjYXQgPmV4cGVjdC5kZWVwLWNsLWlydCA8PEVPRgorLS0tCitNZXNzYWdlLUlkOiA8MD4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwxPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mz4KK0luLVJlcGx5LVRvOiA8Mj4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorCTwyPgorLS0tCitNZXNzYWdlLUlkOiA8ND4KK0luLVJlcGx5LVRvOiA8Mz4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorCTwyPgorCTwzPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBkZWVwIGNvdmVyLWxldHRlciBpbi1yZXBseS10bycgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuZGVlcC1jbC1pcnQgLS1jb3Zlci1sZXR0ZXIgXAorCQktLWluLXJlcGx5LXRvPSI8dGVzdC5tZXNzYWdlPiIgLS10aHJlYWQ9ZGVlcCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIHZpYSBjb25maWcnICcKKwl0ZXN0X2NvbmZpZyBmb3JtYXQudGhyZWFkIHRydWUgJiYKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LnRocmVhZCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIGRlZXAgdmlhIGNvbmZpZycgJworCXRlc3RfY29uZmlnIGZvcm1hdC50aHJlYWQgZGVlcCAmJgorCWNoZWNrX3RocmVhZGluZyBleHBlY3QuZGVlcCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIGNvbmZpZyArIG92ZXJyaWRlJyAnCisJdGVzdF9jb25maWcgZm9ybWF0LnRocmVhZCBkZWVwICYmCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC50aHJlYWQgLS10aHJlYWQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBjb25maWcgKyAtLW5vLXRocmVhZCcgJworCXRlc3RfY29uZmlnIGZvcm1hdC50aHJlYWQgZGVlcCAmJgorCWNoZWNrX3RocmVhZGluZyBleHBlY3Qubm8tdGhyZWFkaW5nIC0tbm8tdGhyZWFkIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGNlc3NpdmUgc3ViamVjdCcgJworCXJtIC1yZiBwYXRjaGVzLyAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJYmVmb3JlPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUpICYmCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRiZWZvcmUpICYmCisJZm9yIGkgaW4gNSA2IDEgMiAzIEEgNCBCIEMgNyA4IDkgMTAgRCBFIEY7IGRvIGVjaG8gIiRpIjsgZG9uZSA+PmZpbGUgJiYKKwlhZnRlcj0kKGdpdCBoYXNoLW9iamVjdCBmaWxlKSAmJgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRhZnRlcikgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJUaGlzIGlzIGFuIGV4Y2Vzc2l2ZWx5IGxvbmcgc3ViamVjdCBsaW5lIGZvciBhIG1lc3NhZ2UgZHVlIHRvIHRoZSBoYWJpdCBzb21lIHByb2plY3RzIGhhdmUgb2Ygbm90IGhhdmluZyBhIHNob3J0LCBvbmUtbGluZSBzdWJqZWN0IGF0IHRoZSBzdGFydCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UsIGJ1dCByYXRoZXIgc3RpY2tpbmcgYSB3aG9sZSBwYXJhZ3JhcGggcmlnaHQgYXQgdGhlIHN0YXJ0IGFzIHRoZSBvbmx5IHRoaW5nIGluIHRoZSBjb21taXQgbWVzc2FnZS4gSXQgaGFkIGJldHRlciBub3QgYmVjb21lIHRoZSBmaWxlbmFtZSBmb3IgdGhlIHBhdGNoLiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1vIHBhdGNoZXMvIG1hc3Rlci4uc2lkZSAmJgorCWxzIHBhdGNoZXMvMDAwNC1UaGlzLWlzLWFuLWV4Y2Vzc2l2ZWx5LWxvbmctc3ViamVjdC1saW5lLWZvci1hLW1lc3NhLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWx1cmUgdG8gd3JpdGUgY292ZXItbGV0dGVyIGFib3J0cyBncmFjZWZ1bGx5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybWRpciAwMDAwLWNvdmVyLWxldHRlci5wYXRjaCIgJiYKKwlta2RpciAwMDAwLWNvdmVyLWxldHRlci5wYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3JtYXQtcGF0Y2ggLS1uby1yZW5hbWVzIC0tY292ZXItbGV0dGVyIC0xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyLWxldHRlciBpbmhlcml0cyBkaWZmIG9wdGlvbnMnICcKKwlnaXQgbXYgZmlsZSBmb28gJiYKKwlnaXQgY29tbWl0IC1tIGZvbyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby1yZW5hbWVzIC0tY292ZXItbGV0dGVyIC0xICYmCisJY2hlY2tfcGF0Y2ggMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2ggJiYKKwkhIGdyZXAgImZpbGUgPT4gZm9vIC4qIDAgKlwkIiAwMDAwLWNvdmVyLWxldHRlci5wYXRjaCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLTEgLU0gJiYKKwlncmVwICJmaWxlID0+IGZvbyAuKiAwICpcJCIgMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2gKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyAgVGhpcyBpcyBhbiBleGNlc3NpdmVseSBsb25nIHN1YmplY3QgbGluZSBmb3IgYSBtZXNzYWdlIGR1ZSB0byB0aGUKKyAgICBoYWJpdCBzb21lIHByb2plY3RzIGhhdmUgb2Ygbm90IGhhdmluZyBhIHNob3J0LCBvbmUtbGluZSBzdWJqZWN0IGF0CisgICAgdGhlIHN0YXJ0IG9mIHRoZSBjb21taXQgbWVzc2FnZSwgYnV0IHJhdGhlciBzdGlja2luZyBhIHdob2xlCisgICAgcGFyYWdyYXBoIHJpZ2h0IGF0IHRoZSBzdGFydCBhcyB0aGUgb25seSB0aGluZyBpbiB0aGUgY29tbWl0CisgICAgbWVzc2FnZS4gSXQgaGFkIGJldHRlciBub3QgYmVjb21lIHRoZSBmaWxlbmFtZSBmb3IgdGhlIHBhdGNoLgorICBmb28KKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0bG9nIG9mIGNvdmVyLWxldHRlciB3cmFwcyBvdmVybHktbG9uZyBvbmVsaW5lcycgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLTIgJiYKKwlzZWQgLWUgIjEsL0EgVSBUaG9yL2QiIC1lICIvXlwkL3EiIDAwMDAtY292ZXItbGV0dGVyLnBhdGNoID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitpbmRleCAkYmVmb3JlLi4kYWZ0ZXIgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMTMsNCArMTMsMjAgQEAgQworIDEwCisgRAorIEUKKyBGCisrNQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCByZXNwZWN0cyAtVScgJworCWdpdCBmb3JtYXQtcGF0Y2ggLVU0IC0yICYmCisJc2VkIC1lICIxLC9eZGlmZi9kIiAtZSAiL14rNS9xIiBcCisJCTwwMDAxLVRoaXMtaXMtYW4tZXhjZXNzaXZlbHktbG9uZy1zdWJqZWN0LWxpbmUtZm9yLWEtbWVzc2EucGF0Y2ggXAorCQk+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xNCwzICsxNCwxOSBAQCBDCisgRAorIEUKKyBGCisrNQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtcCBzdXBwcmVzc2VzIHN0YXQnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC1wIC0yICYmCisJc2VkIC1lICIxLC9eXCQvZCIgLWUgIi9eKzUvcSIgMDAwMS1UaGlzLWlzLWFuLWV4Y2Vzc2l2ZWx5LWxvbmctc3ViamVjdC1saW5lLWZvci1hLW1lc3NhLnBhdGNoID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBmcm9tIGEgc3ViZGlyZWN0b3J5ICgxKScgJworCWZpbGVuYW1lPSQoCisJCXJtIC1yZiBzdWIgJiYKKwkJbWtkaXIgLXAgc3ViL2RpciAmJgorCQljZCBzdWIvZGlyICYmCisJCWdpdCBmb3JtYXQtcGF0Y2ggLTEKKwkpICYmCisJY2FzZSAiJGZpbGVuYW1lIiBpbgorCTAqKQorCQk7OyAjIG9rCisJKikKKwkJZWNobyAiT29wcz8gJGZpbGVuYW1lIgorCQlmYWxzZQorCQk7OworCWVzYWMgJiYKKwl0ZXN0IC1mICIkZmlsZW5hbWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBmcm9tIGEgc3ViZGlyZWN0b3J5ICgyKScgJworCWZpbGVuYW1lPSQoCisJCXJtIC1yZiBzdWIgJiYKKwkJbWtkaXIgLXAgc3ViL2RpciAmJgorCQljZCBzdWIvZGlyICYmCisJCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLW8gLi4KKwkpICYmCisJY2FzZSAiJGZpbGVuYW1lIiBpbgorCS4uLzAqKQorCQk7OyAjIG9rCisJKikKKwkJZWNobyAiT29wcz8gJGZpbGVuYW1lIgorCQlmYWxzZQorCQk7OworCWVzYWMgJiYKKwliYXNlbmFtZT0kKGV4cHIgIiRmaWxlbmFtZSIgOiAiLiovXCguKlwpIikgJiYKKwl0ZXN0IC1mICJzdWIvJGJhc2VuYW1lIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggZnJvbSBhIHN1YmRpcmVjdG9yeSAoMyknICcKKwlybSAtZiAwKiAmJgorCWZpbGVuYW1lPSQoCisJCXJtIC1yZiBzdWIgJiYKKwkJbWtkaXIgLXAgc3ViL2RpciAmJgorCQljZCBzdWIvZGlyICYmCisJCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLW8gIiRUUkFTSF9ESVJFQ1RPUlkiCisJKSAmJgorCWJhc2VuYW1lPSQoZXhwciAiJGZpbGVuYW1lIiA6ICIuKi9cKC4qXCkiKSAmJgorCXRlc3QgLWYgIiRiYXNlbmFtZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0taW4tcmVwbHktdG8nICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0taW4tcmVwbHktdG8gImJhekBmb28uYmFyIiA+cGF0Y2g4ICYmCisJZ3JlcCAiXkluLVJlcGx5LVRvOiA8YmF6QGZvby5iYXI+IiBwYXRjaDggJiYKKwlncmVwICJeUmVmZXJlbmNlczogPGJhekBmb28uYmFyPiIgcGF0Y2g4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXNpZ25vZmYnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc2lnbm9mZiAtLXN0ZG91dCA+b3V0ICYmCisJZ3JlcCAiXlNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLW5vdGVzIC0tc2lnbm9mZicgJworCWdpdCBub3RlcyAtLXJlZiB0ZXN0IGFkZCAtbSAidGVzdCBtZXNzYWdlIiBIRUFEICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXNpZ25vZmYgLS1zdGRvdXQgLS1ub3Rlcz10ZXN0ID5vdXQgJiYKKwkjIFRocmVlIGRhc2hlcyBtdXN0IGNvbWUgYWZ0ZXIgUy1vLWIKKwkhIHNlZCAiL15TaWduZWQtb2ZmLWJ5OiAvcSIgb3V0IHwgZ3JlcCAidGVzdCBtZXNzYWdlIiAmJgorCXNlZCAiMSwvXlNpZ25lZC1vZmYtYnk6IC9kIiBvdXQgfCBncmVwICJ0ZXN0IG1lc3NhZ2UiICYmCisJIyBOb3RlcyBtZXNzYWdlIG11c3QgY29tZSBhZnRlciB0aHJlZSBkYXNoZXMKKwkhIHNlZCAiL14tLS0kL3EiIG91dCB8IGdyZXAgInRlc3QgbWVzc2FnZSIgJiYKKwlzZWQgIjEsL14tLS0kL2QiIG91dCB8IGdyZXAgInRlc3QgbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIG5vdGVzIG91dHB1dCBjb250cm9sJyAnCisJZ2l0IG5vdGVzIGFkZCAtbSAibm90ZXMgY29uZmlnIG1lc3NhZ2UiIEhFQUQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIHJlbW92ZSBIRUFEICYmCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0ID5vdXQgJiYKKwkhIGdyZXAgIm5vdGVzIGNvbmZpZyBtZXNzYWdlIiBvdXQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0tbm90ZXMgPm91dCAmJgorCWdyZXAgIm5vdGVzIGNvbmZpZyBtZXNzYWdlIiBvdXQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0tbm8tbm90ZXMgPm91dCAmJgorCSEgZ3JlcCAibm90ZXMgY29uZmlnIG1lc3NhZ2UiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1ub3RlcyAtLW5vLW5vdGVzID5vdXQgJiYKKwkhIGdyZXAgIm5vdGVzIGNvbmZpZyBtZXNzYWdlIiBvdXQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0tbm8tbm90ZXMgLS1ub3RlcyA+b3V0ICYmCisJZ3JlcCAibm90ZXMgY29uZmlnIG1lc3NhZ2UiIG91dCAmJgorCisJdGVzdF9jb25maWcgZm9ybWF0Lm5vdGVzIHRydWUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0ID5vdXQgJiYKKwlncmVwICJub3RlcyBjb25maWcgbWVzc2FnZSIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vdGVzID5vdXQgJiYKKwlncmVwICJub3RlcyBjb25maWcgbWVzc2FnZSIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vLW5vdGVzID5vdXQgJiYKKwkhIGdyZXAgIm5vdGVzIGNvbmZpZyBtZXNzYWdlIiBvdXQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0tbm90ZXMgLS1uby1ub3RlcyA+b3V0ICYmCisJISBncmVwICJub3RlcyBjb25maWcgbWVzc2FnZSIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vLW5vdGVzIC0tbm90ZXMgPm91dCAmJgorCWdyZXAgIm5vdGVzIGNvbmZpZyBtZXNzYWdlIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHdpdGggbXVsdGlwbGUgbm90ZXMgcmVmcycgJworCWdpdCBub3RlcyAtLXJlZiBub3RlMSBhZGQgLW0gInRoaXMgaXMgbm90ZSAxIiBIRUFEICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyAtLXJlZiBub3RlMSByZW1vdmUgSEVBRCAmJgorCWdpdCBub3RlcyAtLXJlZiBub3RlMiBhZGQgLW0gInRoaXMgaXMgbm90ZSAyIiBIRUFEICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyAtLXJlZiBub3RlMiByZW1vdmUgSEVBRCAmJgorCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+b3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vdGVzPW5vdGUxID5vdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vdGVzPW5vdGUyID5vdXQgJiYKKwkhIGdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vdGVzPW5vdGUxIC0tbm90ZXM9bm90ZTIgPm91dCAmJgorCWdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisKKwl0ZXN0X2NvbmZpZyBmb3JtYXQubm90ZXMgbm90ZTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0ID5vdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vLW5vdGVzID5vdXQgJiYKKwkhIGdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwkhIGdyZXAgInRoaXMgaXMgbm90ZSAyIiBvdXQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0tbm90ZXM9bm90ZTIgPm91dCAmJgorCWdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vLW5vdGVzIC0tbm90ZXM9bm90ZTIgPm91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDEiIG91dCAmJgorCWdyZXAgInRoaXMgaXMgbm90ZSAyIiBvdXQgJiYKKworCWdpdCBjb25maWcgLS1hZGQgZm9ybWF0Lm5vdGVzIG5vdGUyICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+b3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDEiIG91dCAmJgorCWdyZXAgInRoaXMgaXMgbm90ZSAyIiBvdXQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0tbm8tbm90ZXMgPm91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDEiIG91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggd2l0aCBtdWx0aXBsZSBub3RlcyByZWZzIGluIGNvbmZpZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF91bmNvbmZpZyBmb3JtYXQubm90ZXMiICYmCisKKwlnaXQgbm90ZXMgLS1yZWYgbm90ZTEgYWRkIC1tICJ0aGlzIGlzIG5vdGUgMSIgSEVBRCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgLS1yZWYgbm90ZTEgcmVtb3ZlIEhFQUQgJiYKKwlnaXQgbm90ZXMgLS1yZWYgbm90ZTIgYWRkIC1tICJ0aGlzIGlzIG5vdGUgMiIgSEVBRCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgLS1yZWYgbm90ZTIgcmVtb3ZlIEhFQUQgJiYKKworCWdpdCBjb25maWcgZm9ybWF0Lm5vdGVzIG5vdGUxICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+b3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDEiIG91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCWdpdCBjb25maWcgZm9ybWF0Lm5vdGVzIG5vdGUyICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+b3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCWdpdCBjb25maWcgLS1hZGQgZm9ybWF0Lm5vdGVzIG5vdGUxICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+b3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDEiIG91dCAmJgorCWdyZXAgInRoaXMgaXMgbm90ZSAyIiBvdXQgJiYKKworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBmb3JtYXQubm90ZXMgbm90ZTEgJiYKKwlnaXQgY29uZmlnIC0tYWRkIGZvcm1hdC5ub3RlcyBmYWxzZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgPm91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDEiIG91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCWdpdCBjb25maWcgLS1hZGQgZm9ybWF0Lm5vdGVzIG5vdGUyICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+b3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dAorJworCitlY2hvICJmYXRhbDogLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIgPmV4cGVjdC5uYW1lLW9ubHkKK2VjaG8gImZhdGFsOiAtLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiID5leHBlY3QubmFtZS1zdGF0dXMKK2VjaG8gImZhdGFsOiAtLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiID5leHBlY3QuY2hlY2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW9ucyBubyBsb25nZXIgYWxsb3dlZCBmb3IgZm9ybWF0LXBhdGNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvcm1hdC1wYXRjaCAtLW5hbWUtb25seSAyPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QubmFtZS1vbmx5IG91dHB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3JtYXQtcGF0Y2ggLS1uYW1lLXN0YXR1cyAyPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QubmFtZS1zdGF0dXMgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvcm1hdC1wYXRjaCAtLWNoZWNrIDI+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5jaGVjayBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tbnVtc3RhdCBzaG91bGQgcHJvZHVjZSBhIHBhdGNoJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW51bXN0YXQgLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5vdXRwdXQgJiYKKwlncmVwICJeZGlmZiAtLWdpdCBhLyIgb3V0cHV0ID5kaWZmICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLSA8cGF0aD4nICcKKwlnaXQgZm9ybWF0LXBhdGNoIG1hc3Rlci4uc2lkZSAtLSBmaWxlIDI+ZXJyb3IgJiYKKwkhIGdyZXAgIlVzZSAuLS0iIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbSBIRUFEJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCBnaXQgdmVyc2lvbicgJworCWdpdF92ZXJzaW9uPSQoZ2l0IC0tdmVyc2lvbikgJiYKKwlnaXRfdmVyc2lvbj0ke2dpdF92ZXJzaW9uIyMqIH0KKycKKworc2lnbmF0dXJlKCkgeworCXByaW50ZiAiJXNcbiVzXG5cbiIgIi0tICIgIiR7MTotJGdpdF92ZXJzaW9ufSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIGRlZmF1bHQgc2lnbmF0dXJlJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+cGF0Y2ggJiYKKwl0YWlsIC1uIDMgcGF0Y2ggPm91dHB1dCAmJgorCXNpZ25hdHVyZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1zaWduYXR1cmUnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tc2lnbmF0dXJlPSJteSBzaWciIC0xID5wYXRjaCAmJgorCXRhaWwgLW4gMyBwYXRjaCA+b3V0cHV0ICYmCisJc2lnbmF0dXJlICJteSBzaWciID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCB3aXRoIGZvcm1hdC5zaWduYXR1cmUgY29uZmlnJyAnCisJZ2l0IGNvbmZpZyBmb3JtYXQuc2lnbmF0dXJlICJjb25maWcgc2lnIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPm91dHB1dCAmJgorCWdyZXAgImNvbmZpZyBzaWciIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1zaWduYXR1cmUgb3ZlcnJpZGVzIGZvcm1hdC5zaWduYXR1cmUnICcKKwlnaXQgY29uZmlnIGZvcm1hdC5zaWduYXR1cmUgImNvbmZpZyBzaWciICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLXNpZ25hdHVyZT0ib3ZlcnJpZGVzIiAtMSA+b3V0cHV0ICYmCisJISBncmVwICJjb25maWcgc2lnIiBvdXRwdXQgJiYKKwlncmVwICJvdmVycmlkZXMiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1uby1zaWduYXR1cmUgaWdub3JlcyBmb3JtYXQuc2lnbmF0dXJlJyAnCisJZ2l0IGNvbmZpZyBmb3JtYXQuc2lnbmF0dXJlICJjb25maWcgc2lnIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1zaWduYXR1cmU9Im15IHNpZyIgLS1uby1zaWduYXR1cmUgXAorCQktMSA+b3V0cHV0ICYmCisJY2hlY2tfcGF0Y2ggb3V0cHV0ICYmCisJISBncmVwICJjb25maWcgc2lnIiBvdXRwdXQgJiYKKwkhIGdyZXAgIm15IHNpZyIgb3V0cHV0ICYmCisJISBncmVwICJeLS0gXCQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1zaWduYXR1cmUgLS1jb3Zlci1sZXR0ZXInICcKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGZvcm1hdC5zaWduYXR1cmUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tc2lnbmF0dXJlPSJteSBzaWciIC0tY292ZXItbGV0dGVyIFwKKwkJLTEgPm91dHB1dCAmJgorCWdyZXAgIm15IHNpZyIgb3V0cHV0ID5zaWcgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIHNpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQuc2lnbmF0dXJlPSIiIHN1cHByZXNzZXMgc2lnbmF0dXJlcycgJworCWdpdCBjb25maWcgZm9ybWF0LnNpZ25hdHVyZSAiIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPm91dHB1dCAmJgorCWNoZWNrX3BhdGNoIG91dHB1dCAmJgorCSEgZ3JlcCAiXi0tIFwkIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tbm8tc2lnbmF0dXJlIHN1cHByZXNzZXMgc2lnbmF0dXJlcycgJworCWdpdCBjb25maWcgLS11bnNldC1hbGwgZm9ybWF0LnNpZ25hdHVyZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1uby1zaWduYXR1cmUgLTEgPm91dHB1dCAmJgorCWNoZWNrX3BhdGNoIG91dHB1dCAmJgorCSEgZ3JlcCAiXi0tIFwkIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tc2lnbmF0dXJlPSIiIHN1cHByZXNzZXMgc2lnbmF0dXJlcycgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1zaWduYXR1cmU9IiIgLTEgPm91dHB1dCAmJgorCWNoZWNrX3BhdGNoIG91dHB1dCAmJgorCSEgZ3JlcCAiXi0tIFwkIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBtYWlsLXNpZ25hdHVyZSBpbnB1dCcgJworCWNhdCA+bWFpbC1zaWduYXR1cmUgPDwtXEVPRgorCisJVGVzdCBVc2VyIDx0ZXN0LmVtYWlsQGtlcm5lbC5vcmc+CisJaHR0cDovL2dpdC5rZXJuZWwub3JnL2NnaXQvZ2l0L2dpdC5naXQKKworCWdpdC5rZXJuZWwub3JnLz9wPWdpdC9naXQuZ2l0O2E9c3VtbWFyeQorCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2lnbmF0dXJlLWZpbGU9ZmlsZSB3b3JrcycgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1zaWduYXR1cmUtZmlsZT1tYWlsLXNpZ25hdHVyZSAtMSA+b3V0cHV0ICYmCisJY2hlY2tfcGF0Y2ggb3V0cHV0ICYmCisJc2VkIC1lICIxLC9eLS0gXCQvZCIgb3V0cHV0ID5hY3R1YWwgJiYKKwl7CisJCWNhdCBtYWlsLXNpZ25hdHVyZSAmJiBlY2hvCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQuc2lnbmF0dXJlZmlsZSB3b3JrcycgJworCXRlc3RfY29uZmlnIGZvcm1hdC5zaWduYXR1cmVmaWxlIG1haWwtc2lnbmF0dXJlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+b3V0cHV0ICYmCisJY2hlY2tfcGF0Y2ggb3V0cHV0ICYmCisJc2VkIC1lICIxLC9eLS0gXCQvZCIgb3V0cHV0ID5hY3R1YWwgJiYKKwl7CisJCWNhdCBtYWlsLXNpZ25hdHVyZSAmJiBlY2hvCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXNpZ25hdHVyZSBzdXBwcmVzc2VzIGZvcm1hdC5zaWduYXR1cmVmaWxlICcgJworCXRlc3RfY29uZmlnIGZvcm1hdC5zaWduYXR1cmVmaWxlIG1haWwtc2lnbmF0dXJlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLW5vLXNpZ25hdHVyZSAtMSA+b3V0cHV0ICYmCisJY2hlY2tfcGF0Y2ggb3V0cHV0ICYmCisJISBncmVwICJeLS0gXCQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNpZ25hdHVyZS1maWxlIG92ZXJyaWRlcyBmb3JtYXQuc2lnbmF0dXJlZmlsZScgJworCWNhdCA+b3RoZXItbWFpbC1zaWduYXR1cmUgPDwtXEVPRiAmJgorCVVzZSB0aGlzIG90aGVyIHNpZ25hdHVyZSBpbnN0ZWFkIG9mIG1haWwtc2lnbmF0dXJlLgorCUVPRgorCXRlc3RfY29uZmlnIGZvcm1hdC5zaWduYXR1cmVmaWxlIG1haWwtc2lnbmF0dXJlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBcCisJCQktLXNpZ25hdHVyZS1maWxlPW90aGVyLW1haWwtc2lnbmF0dXJlIC0xID5vdXRwdXQgJiYKKwljaGVja19wYXRjaCBvdXRwdXQgJiYKKwlzZWQgLWUgIjEsL14tLSBcJC9kIiBvdXRwdXQgPmFjdHVhbCAmJgorCXsKKwkJY2F0IG90aGVyLW1haWwtc2lnbmF0dXJlICYmIGVjaG8KKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2lnbmF0dXJlIG92ZXJyaWRlcyBmb3JtYXQuc2lnbmF0dXJlZmlsZScgJworCXRlc3RfY29uZmlnIGZvcm1hdC5zaWduYXR1cmVmaWxlIG1haWwtc2lnbmF0dXJlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLXNpZ25hdHVyZT0ibXkgc2lnIiAtMSA+b3V0cHV0ICYmCisJY2hlY2tfcGF0Y2ggb3V0cHV0ICYmCisJZ3JlcCAibXkgc2lnIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2Zvcm1hdC1wYXRjaCAtLXN0ZG91dCBwYWdpbmF0ZXMnICcKKwlybSAtZiBwYWdlcl91c2VkICYmCisJdGVzdF90ZXJtaW5hbCBlbnYgR0lUX1BBR0VSPSJ3YyA+cGFnZXJfdXNlZCIgZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWFsbCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHBhZ2VyX3VzZWQKKycKKworIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgcGFnaW5hdGlvbiBjYW4gYmUgZGlzYWJsZWQnICcKKwlybSAtZiBwYWdlcl91c2VkICYmCisJdGVzdF90ZXJtaW5hbCBlbnYgR0lUX1BBR0VSPSJ3YyA+cGFnZXJfdXNlZCIgZ2l0IC0tbm8tcGFnZXIgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tYWxsICYmCisJdGVzdF90ZXJtaW5hbCBlbnYgR0lUX1BBR0VSPSJ3YyA+cGFnZXJfdXNlZCIgZ2l0IC1jICJwYWdlci5mb3JtYXQtcGF0Y2g9ZmFsc2UiIGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWFsbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHBhZ2VyX3VzZWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3BhZ2VyX3VzZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIGhhbmRsZXMgbXVsdGktbGluZSBzdWJqZWN0cycgJworCXJtIC1yZiBwYXRjaGVzLyAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlmb3IgaSBpbiBvbmUgdHdvIHRocmVlOyBkbyBlY2hvICRpOyBkb25lID5tc2cgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1GIG1zZyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLW8gcGF0Y2hlcyAtMSAmJgorCWdyZXAgXlN1YmplY3Q6IHBhdGNoZXMvMDAwMS1vbmUucGF0Y2ggPmFjdHVhbCAmJgorCWVjaG8gIlN1YmplY3Q6IFtQQVRDSF0gb25lIHR3byB0aHJlZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIGhhbmRsZXMgbXVsdGktbGluZSBlbmNvZGVkIHN1YmplY3RzJyAnCisJcm0gLXJmIHBhdGNoZXMvICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWZvciBpIGluIGVuIHR2w6UgdHJlOyBkbyBlY2hvICRpOyBkb25lID5tc2cgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1GIG1zZyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLW8gcGF0Y2hlcyAtMSAmJgorCWdyZXAgXlN1YmplY3Q6IHBhdGNoZXMvMDAwMS1lbi5wYXRjaCA+YWN0dWFsICYmCisJZWNobyAiU3ViamVjdDogW1BBVENIXSA9P1VURi04P3E/ZW49MjB0dj1DMz1BNT0yMHRyZT89IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitNOD0iZm9vIGJhciAiCitNNjQ9JE04JE04JE04JE04JE04JE04JE04JE04CitNNTEyPSRNNjQkTTY0JE02NCRNNjQkTTY0JE02NCRNNjQkTTY0CitjYXQgPmV4cGVjdCA8PCdFT0YnCitTdWJqZWN0OiBbUEFUQ0hdIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vCisgYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyCisgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vCisgYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyCisgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vCisgYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyCisgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHdyYXBzIGV4dHJlbWVseSBsb25nIHN1YmplY3QgKGFzY2lpKScgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICIkTTUxMiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5wYXRjaCAmJgorCXNlZCAtbiAiL15TdWJqZWN0L3A7IC9eIC9wOyAvXiQvcSIgcGF0Y2ggPnN1YmplY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3ViamVjdAorJworCitNOD0iZsO2w7YgYmFyICIKK002ND0kTTgkTTgkTTgkTTgkTTgkTTgkTTgkTTgKK001MTI9JE02NCRNNjQkTTY0JE02NCRNNjQkTTY0JE02NCRNNjQKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1N1YmplY3Q6IFtQQVRDSF0gPT9VVEYtOD9xP2Y9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj89CisgPT9VVEYtOD9xPz1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPz0KKyA9P1VURi04P3E/PTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwPz0KKyA9P1VURi04P3E/YmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2Pz0KKyA9P1VURi04P3E/PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2Pz0KKyA9P1VURi04P3E/PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPz0KKyA9P1VURi04P3E/PUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI/PQorID0/VVRGLTg/cT89MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjA/PQorID0/VVRGLTg/cT9iYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY/PQorID0/VVRGLTg/cT89MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY/PQorID0/VVRGLTg/cT89QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj89CisgPT9VVEYtOD9xPz0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMD89CisgPT9VVEYtOD9xP2Jhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj89CisgPT9VVEYtOD9xPz0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj89CisgPT9VVEYtOD9xPz1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj89CisgPT9VVEYtOD9xPz1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPz0KKyA9P1VURi04P3E/PTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwPz0KKyA9P1VURi04P3E/YmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2Pz0KKyA9P1VURi04P3E/PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2Pz0KKyA9P1VURi04P3E/PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPz0KKyA9P1VURi04P3E/PUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI/PQorID0/VVRGLTg/cT89MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjA/PQorID0/VVRGLTg/cT9iYXI/PQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggd3JhcHMgZXh0cmVtZWx5IGxvbmcgc3ViamVjdCAocmZjMjA0NyknICcKKwlybSAtcmYgcGF0Y2hlcy8gJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiJE01MTIiICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+cGF0Y2ggJiYKKwlzZWQgLW4gIi9eU3ViamVjdC9wOyAvXiAvcDsgL14kL3EiIHBhdGNoID5zdWJqZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1YmplY3QKKycKKworY2hlY2tfYXV0aG9yKCkgeworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9JDEgZ2l0IGNvbW1pdCAtbSBhdXRob3ItY2hlY2sgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5wYXRjaCAmJgorCXNlZCAtbiAiL15Gcm9tOiAvcDsgL14gL3A7IC9eJC9xIiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCitjYXQgPmV4cGVjdCA8PCdFT0YnCitGcm9tOiAiRm9vIEIuIEJhciIgPGF1dGhvckBleGFtcGxlLmNvbT4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHF1b3RlcyBkb3QgaW4gZnJvbS1oZWFkZXJzJyAnCisJY2hlY2tfYXV0aG9yICJGb28gQi4gQmFyIgorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitGcm9tOiAiRm9vIFwiVGhlIEJhelwiIEJhciIgPGF1dGhvckBleGFtcGxlLmNvbT4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHF1b3RlcyBkb3VibGUtcXVvdGUgaW4gZnJvbS1oZWFkZXJzJyAnCisJY2hlY2tfYXV0aG9yICJGb28gXCJUaGUgQmF6XCIgQmFyIgorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitGcm9tOiA9P1VURi04P3E/Rj1DMz1CNm89MjBCYXI/PSA8YXV0aG9yQGV4YW1wbGUuY29tPgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggdXNlcyByZmMyMDQ3LWVuY29kZWQgZnJvbS1oZWFkZXJzIHdoZW4gbmVjZXNzYXJ5JyAnCisJY2hlY2tfYXV0aG9yICJGw7ZvIEJhciIKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworRnJvbTogPT9VVEYtOD9xP0Y9QzM9QjZvPTIwQj0yRT0yMEJhcj89IDxhdXRob3JAZXhhbXBsZS5jb20+CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JmYzIwNDctZW5jb2RlZCBmcm9tLWhlYWRlcnMgbGVhdmUgbm8gcmZjODIyIHNwZWNpYWxzJyAnCisJY2hlY2tfYXV0aG9yICJGw7ZvIEIuIEJhciIKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK0Zyb206IGZvb19iYXJfZm9vX2Jhcl9mb29fYmFyX2Zvb19iYXJfZm9vX2Jhcl9mb29fYmFyX2Zvb19iYXJfZm9vX2Jhcl8KKyA8YXV0aG9yQGV4YW1wbGUuY29tPgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggd3JhcHMgbW9kZXJhdGVseSBsb25nIGZyb20taGVhZGVyIChhc2NpaSknICcKKwljaGVja19hdXRob3IgImZvb19iYXJfZm9vX2Jhcl9mb29fYmFyX2Zvb19iYXJfZm9vX2Jhcl9mb29fYmFyX2Zvb19iYXJfZm9vX2Jhcl8iCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK0Zyb206IEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyCisgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vCisgQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIDxhdXRob3JAZXhhbXBsZS5jb20+CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCB3cmFwcyBleHRyZW1lbHkgbG9uZyBmcm9tLWhlYWRlciAoYXNjaWkpJyAnCisJY2hlY2tfYXV0aG9yICJGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIgorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitGcm9tOiAiRm9vLkJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIKKyBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28KKyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIiIDxhdXRob3JAZXhhbXBsZS5jb20+CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCB3cmFwcyBleHRyZW1lbHkgbG9uZyBmcm9tLWhlYWRlciAocmZjODIyKScgJworCWNoZWNrX2F1dGhvciAiRm9vLkJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciIKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworRnJvbTogPT9VVEYtOD9xP0ZvPUMzPUI2PTIwQmFyPTIwRm9vPTIwQmFyPTIwRm9vPTIwQmFyPTIwRm9vPTIwQmFyPTIwRm9vPz0KKyA9P1VURi04P3E/PTIwQmFyPTIwRm9vPTIwQmFyPTIwRm9vPTIwQmFyPTIwRm9vPTIwQmFyPTIwRm9vPTIwQmFyPTIwRm9vPTIwPz0KKyA9P1VURi04P3E/QmFyPTIwRm9vPTIwQmFyPTIwRm9vPTIwQmFyPTIwRm9vPTIwQmFyPTIwRm9vPTIwQmFyPTIwRm9vPTIwQmFyPz0KKyA9P1VURi04P3E/PTIwRm9vPTIwQmFyPTIwRm9vPTIwQmFyPTIwRm9vPTIwQmFyPTIwRm9vPTIwQmFyPTIwRm9vPTIwQmFyPTIwPz0KKyA9P1VURi04P3E/Rm9vPTIwQmFyPTIwRm9vPTIwQmFyPz0gPGF1dGhvckBleGFtcGxlLmNvbT4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHdyYXBzIGV4dHJlbWVseSBsb25nIGZyb20taGVhZGVyIChyZmMyMDQ3KScgJworCWNoZWNrX2F1dGhvciAiRm/DtiBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIiCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK0Zyb206IEZvw7YgQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhcgorIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbworIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggd3JhcHMgZXh0cmVtZWx5IGxvbmcgZnJvbS1oZWFkZXIgKG5vbi1BU0NJSSB3aXRob3V0IFEtZW5jb2RpbmcpJyAnCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCUdJVF9BVVRIT1JfTkFNRT0iRm/DtiBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIiIFwKKwlnaXQgY29tbWl0IC1tIGF1dGhvci1jaGVjayAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby1lbmNvZGUtZW1haWwtaGVhZGVycyAtLXN0ZG91dCAtMSA+cGF0Y2ggJiYKKwlzZWQgLW4gIi9eRnJvbTogL3A7IC9eIC9wOyAvXiQvcSIgcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworU3ViamVjdDogW1BBVENIXSBGb8O2CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmplY3QgbGluZXMgYXJlIHVuZW5jb2RlZCB3aXRoIC0tbm8tZW5jb2RlLWVtYWlsLWhlYWRlcnMnICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiRm/DtiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm8tZW5jb2RlLWVtYWlsLWhlYWRlcnMgLTEgLS1zdGRvdXQgPnBhdGNoICYmCisJZ3JlcCBeU3ViamVjdDogcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworU3ViamVjdDogW1BBVENIXSBGb8O2CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmplY3QgbGluZXMgYXJlIHVuZW5jb2RlZCB3aXRoIGZvcm1hdC5lbmNvZGVFbWFpbEhlYWRlcnM9ZmFsc2UnICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiRm/DtiIgJiYKKwlnaXQgY29uZmlnIGZvcm1hdC5lbmNvZGVFbWFpbEhlYWRlcnMgZmFsc2UgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0ID5wYXRjaCAmJgorCWdyZXAgXlN1YmplY3Q6IHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1N1YmplY3Q6IFtQQVRDSF0gPT9VVEYtOD9xP0ZvPUMzPUI2Pz0KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1lbmNvZGUtZW1haWwtaGVhZGVycyBvdmVycmlkZXMgZm9ybWF0LmVuY29kZUVtYWlsSGVhZGVycycgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJGb8O2IiAmJgorCWdpdCBjb25maWcgZm9ybWF0LmVuY29kZUVtYWlsSGVhZGVycyBmYWxzZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1lbmNvZGUtZW1haWwtaGVhZGVycyAtMSAtLXN0ZG91dCA+cGF0Y2ggJiYKKwlncmVwIF5TdWJqZWN0OiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitTdWJqZWN0OiBoZWFkZXIgd2l0aCAuIGluIGl0CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmplY3QgbGluZXMgZG8gbm90IGhhdmUgODIyIGF0b20tcXVvdGluZycgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJoZWFkZXIgd2l0aCAuIGluIGl0IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLWsgLTEgLS1zdGRvdXQgPnBhdGNoICYmCisJZ3JlcCBeU3ViamVjdDogcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworU3ViamVjdDogW1BSRUZJWCAxLzFdIGhlYWRlciB3aXRoIC4gaW4gaXQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViamVjdCBwcmVmaXhlcyBoYXZlIHNwYWNlIHByZXBlbmRlZCcgJworCWdpdCBmb3JtYXQtcGF0Y2ggLW4gLTEgLS1zdGRvdXQgLS1zdWJqZWN0LXByZWZpeD1QUkVGSVggPnBhdGNoICYmCisJZ3JlcCBeU3ViamVjdDogcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworU3ViamVjdDogWzEvMV0gaGVhZGVyIHdpdGggLiBpbiBpdAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBzdWJqZWN0IHByZWZpeCBkb2VzIG5vdCBoYXZlIGV4dHJhIHNwYWNlJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtbiAtMSAtLXN0ZG91dCAtLXN1YmplY3QtcHJlZml4PSA+cGF0Y2ggJiYKKwlncmVwIF5TdWJqZWN0OiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJmYycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlTdWJqZWN0OiBbUkZDIFBBVENIIDEvMV0gaGVhZGVyIHdpdGggLiBpbiBpdAorCUVPRgorCWdpdCBmb3JtYXQtcGF0Y2ggLW4gLTEgLS1zdGRvdXQgLS1yZmMgPnBhdGNoICYmCisJZ3JlcCBeU3ViamVjdDogcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1mcm9tPWlkZW50IG5vdGljZXMgYm9ndXMgaWRlbnQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0tZnJvbT1mb28gPnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZnJvbT1pZGVudCByZXBsYWNlcyBhdXRob3InICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0tZnJvbT0iTWUgPG1lQGV4YW1wbGUuY29tPiIgPnBhdGNoICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUZyb206IE1lIDxtZUBleGFtcGxlLmNvbT4KKworCUZyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisKKwlFT0YKKwlzZWQgLW5lICIvXkZyb206L3A7IC9eJC9wOyAvXi0tLSQvcSIgcGF0Y2ggPnBhdGNoLmhlYWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcGF0Y2guaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWZyb20gdXNlcyBjb21taXR0ZXIgaWRlbnQnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0tZnJvbSA+cGF0Y2ggJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJRnJvbTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCisJRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKworCUVPRgorCXNlZCAtbmUgIi9eRnJvbTovcDsgL14kL3A7IC9eLS0tJC9xIiBwYXRjaCA+cGF0Y2guaGVhZCAmJgorCXRlc3RfY21wIGV4cGVjdCBwYXRjaC5oZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZnJvbSBvbWl0cyByZWR1bmRhbnQgaW4tYm9keSBoZWFkZXInICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0tZnJvbT0iQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4iID5wYXRjaCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCisJRU9GCisJc2VkIC1uZSAiL15Gcm9tOi9wOyAvXiQvcDsgL14tLS0kL3EiIHBhdGNoID5wYXRjaC5oZWFkICYmCisJdGVzdF9jbXAgZXhwZWN0IHBhdGNoLmhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4tYm9keSBoZWFkZXJzIHRyaWdnZXIgY29udGVudCBlbmNvZGluZycgJworCXRlc3RfZW52IEdJVF9BVVRIT1JfTkFNRT0iw6l4w7Z0w6xjIiB0ZXN0X2NvbW1pdCBleG90aWMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRF4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLWZyb20gPnBhdGNoICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUZyb206IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwlDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKKworCUZyb206IMOpeMO2dMOsYyA8YXV0aG9yQGV4YW1wbGUuY29tPgorCisJRU9GCisJc2VkIC1uZSAiL15Gcm9tOi9wOyAvXiQvcDsgL15Db250ZW50LVR5cGUvcDsgL14tLS0kL3EiIHBhdGNoID5wYXRjaC5oZWFkICYmCisJdGVzdF9jbXAgZXhwZWN0IHBhdGNoLmhlYWQKKycKKworYXBwZW5kX3NpZ25vZmYoKQoreworCUM9JChnaXQgY29tbWl0LXRyZWUgSEVBRF5ee3RyZWV9IC1wIEhFQUQpICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLXNpZ25vZmYgJENeLi4kQyA+YXBwZW5kX3NpZ25vZmYucGF0Y2ggJiYKKwlzZWQgLW4gLWUgIjEsL14tLS0kL3AiIGFwcGVuZF9zaWdub2ZmLnBhdGNoIHwKKwkJZWdyZXAgLW4gIl5TdWJqZWN0fFNpZ258XiQiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmY6IGNvbW1pdCB3aXRoIG5vIGJvZHknICcKKwlhcHBlbmRfc2lnbm9mZiA8L2Rldi9udWxsID5hY3R1YWwgJiYKKwljYXQgPDwtXEVPRiB8IHNlZCAicy9FT0wkLy8iID5leHBlY3QgJiYKKwk0OlN1YmplY3Q6IFtQQVRDSF0gRU9MCisJODoKKwk5OlNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmY6IGNvbW1pdCB3aXRoIG9ubHkgc3ViamVjdCcgJworCWVjaG8gc3ViamVjdCB8IGFwcGVuZF9zaWdub2ZmID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJNDpTdWJqZWN0OiBbUEFUQ0hdIHN1YmplY3QKKwk4OgorCTk6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbm9mZjogY29tbWl0IHdpdGggb25seSBzdWJqZWN0IHRoYXQgZG9lcyBub3QgZW5kIHdpdGggTkwnICcKKwlwcmludGYgc3ViamVjdCB8IGFwcGVuZF9zaWdub2ZmID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJNDpTdWJqZWN0OiBbUEFUQ0hdIHN1YmplY3QKKwk4OgorCTk6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbm9mZjogbm8gZXhpc3Rpbmcgc2lnbm9mZnMnICcKKwlhcHBlbmRfc2lnbm9mZiA8PC1cRU9GID5hY3R1YWwgJiYKKwlzdWJqZWN0CisKKwlib2R5CisJRU9GCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCTQ6U3ViamVjdDogW1BBVENIXSBzdWJqZWN0CisJODoKKwkxMDoKKwkxMTpTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmOiBubyBleGlzdGluZyBzaWdub2ZmcyBhbmQgbm8gdHJhaWxpbmcgTkwnICcKKwlwcmludGYgInN1YmplY3RcblxuYm9keSIgfCBhcHBlbmRfc2lnbm9mZiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCTQ6U3ViamVjdDogW1BBVENIXSBzdWJqZWN0CisJODoKKwkxMDoKKwkxMTpTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmOiBzb21lIHJhbmRvbSBzaWdub2ZmJyAnCisJYXBwZW5kX3NpZ25vZmYgPDwtXEVPRiA+YWN0dWFsICYmCisJc3ViamVjdAorCisJYm9keQorCisJU2lnbmVkLW9mZi1ieTogbXlAaG91c2UKKwlFT0YKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJNDpTdWJqZWN0OiBbUEFUQ0hdIHN1YmplY3QKKwk4OgorCTEwOgorCTExOlNpZ25lZC1vZmYtYnk6IG15QGhvdXNlCisJMTI6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbm9mZjogbWlzYyBjb25mb3JtaW5nIGZvb3RlciBlbGVtZW50cycgJworCWFwcGVuZF9zaWdub2ZmIDw8LVxFT0YgPmFjdHVhbCAmJgorCXN1YmplY3QKKworCWJvZHkKKworCVNpZ25lZC1vZmYtYnk6IG15QGhvdXNlCisJKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOSkKKwlUZXN0ZWQtYnk6IFNvbWUgT25lIDxzb21lb25lQGV4YW1wbGUuY29tPgorCUJ1ZzogMTIzNAorCUVPRgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk0OlN1YmplY3Q6IFtQQVRDSF0gc3ViamVjdAorCTg6CisJMTA6CisJMTE6U2lnbmVkLW9mZi1ieTogbXlAaG91c2UKKwkxNTpTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmOiBzb21lIHJhbmRvbSBzaWdub2ZmLWFsaWtlJyAnCisJYXBwZW5kX3NpZ25vZmYgPDwtXEVPRiA+YWN0dWFsICYmCisJc3ViamVjdAorCisJYm9keQorCUZvb2xlZC1ieS1tZTogbXlAaG91c2UKKwlFT0YKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJNDpTdWJqZWN0OiBbUEFUQ0hdIHN1YmplY3QKKwk4OgorCTExOgorCTEyOlNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmY6IG5vdCByZWFsbHkgYSBzaWdub2ZmJyAnCisJYXBwZW5kX3NpZ25vZmYgPDwtXEVPRiA+YWN0dWFsICYmCisJc3ViamVjdAorCisJSSB3YW50IHRvIG1lbnRpb24gYWJvdXQgU2lnbmVkLW9mZi1ieTogaGVyZS4KKwlFT0YKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJNDpTdWJqZWN0OiBbUEFUQ0hdIHN1YmplY3QKKwk4OgorCTk6SSB3YW50IHRvIG1lbnRpb24gYWJvdXQgU2lnbmVkLW9mZi1ieTogaGVyZS4KKwkxMDoKKwkxMTpTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmOiBub3QgcmVhbGx5IGEgc2lnbm9mZiAoMiknICcKKwlhcHBlbmRfc2lnbm9mZiA8PC1cRU9GID5hY3R1YWwgJiYKKwlzdWJqZWN0CisKKwlNeSB1bmZvcnR1bmF0ZQorCVNpZ25lZC1vZmYtYnk6IGV4YW1wbGUgaGFwcGVucyB0byBiZSB3cmFwcGVkIGhlcmUuCisJRU9GCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCTQ6U3ViamVjdDogW1BBVENIXSBzdWJqZWN0CisJODoKKwkxMDpTaWduZWQtb2ZmLWJ5OiBleGFtcGxlIGhhcHBlbnMgdG8gYmUgd3JhcHBlZCBoZXJlLgorCTExOlNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmY6IHZhbGlkIFMtby1iIHBhcmFncmFwaCBpbiB0aGUgbWlkZGxlJyAnCisJYXBwZW5kX3NpZ25vZmYgPDwtXEVPRiA+YWN0dWFsICYmCisJc3ViamVjdAorCisJU2lnbmVkLW9mZi1ieTogbXlAaG91c2UKKwlTaWduZWQtb2ZmLWJ5OiB5b3VyQGhvdXNlCisKKwlBIGxvdCBvZiBob3VzZXMuCisJRU9GCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCTQ6U3ViamVjdDogW1BBVENIXSBzdWJqZWN0CisJODoKKwk5OlNpZ25lZC1vZmYtYnk6IG15QGhvdXNlCisJMTA6U2lnbmVkLW9mZi1ieTogeW91ckBob3VzZQorCTExOgorCTEzOgorCTE0OlNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmY6IHRoZSBzYW1lIHNpZ25vZmYgYXQgdGhlIGVuZCcgJworCWFwcGVuZF9zaWdub2ZmIDw8LVxFT0YgPmFjdHVhbCAmJgorCXN1YmplY3QKKworCWJvZHkKKworCVNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwlFT0YKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJNDpTdWJqZWN0OiBbUEFUQ0hdIHN1YmplY3QKKwk4OgorCTEwOgorCTExOlNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmY6IHRoZSBzYW1lIHNpZ25vZmYgYXQgdGhlIGVuZCwgbm8gdHJhaWxpbmcgTkwnICcKKwlwcmludGYgInN1YmplY3RcblxuU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiIgfAorCQlhcHBlbmRfc2lnbm9mZiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCTQ6U3ViamVjdDogW1BBVENIXSBzdWJqZWN0CisJODoKKwk5OlNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmY6IHRoZSBzYW1lIHNpZ25vZmYgTk9UIGF0IHRoZSBlbmQnICcKKwlhcHBlbmRfc2lnbm9mZiA8PC1cRU9GID5hY3R1YWwgJiYKKwlzdWJqZWN0CisKKwlib2R5CisKKwlTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJU2lnbmVkLW9mZi1ieTogbXlAaG91c2UKKwlFT0YKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJNDpTdWJqZWN0OiBbUEFUQ0hdIHN1YmplY3QKKwk4OgorCTEwOgorCTExOlNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwkxMjpTaWduZWQtb2ZmLWJ5OiBteUBob3VzZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbm9mZjogdG9sZXJhdGUgZ2FyYmFnZSBpbiBjb25mb3JtaW5nIGZvb3RlcicgJworCWFwcGVuZF9zaWdub2ZmIDw8LVxFT0YgPmFjdHVhbCAmJgorCXN1YmplY3QKKworCWJvZHkKKworCVRlc3RlZC1ieTogbXlAaG91c2UKKwlTb21lIFRyYXNoCisJU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCUVPRgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk0OlN1YmplY3Q6IFtQQVRDSF0gc3ViamVjdAorCTg6CisJMTA6CisJMTM6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbm9mZjogcmVzcGVjdCB0cmFpbGVyIGNvbmZpZycgJworCWFwcGVuZF9zaWdub2ZmIDw8LVxFT0YgPmFjdHVhbCAmJgorCXN1YmplY3QKKworCU15Zm9vdGVyOiB4CisJU29tZSBUcmFzaAorCUVPRgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk0OlN1YmplY3Q6IFtQQVRDSF0gc3ViamVjdAorCTg6CisJMTE6CisJMTI6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXRlc3RfY29uZmlnIHRyYWlsZXIuTXlmb290ZXIuaWZleGlzdHMgYWRkICYmCisJYXBwZW5kX3NpZ25vZmYgPDwtXEVPRiA+YWN0dWFsICYmCisJc3ViamVjdAorCisJTXlmb290ZXI6IHgKKwlTb21lIFRyYXNoCisJRU9GCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCTQ6U3ViamVjdDogW1BBVENIXSBzdWJqZWN0CisJODoKKwkxMTpTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmOiBmb290ZXIgYmVnaW5zIHdpdGggbm9uLXNpZ25vZmYgd2l0aG91dCBAIHNpZ24nICcKKwlhcHBlbmRfc2lnbm9mZiA8PC1cRU9GID5hY3R1YWwgJiYKKwlzdWJqZWN0CisKKwlib2R5CisKKwlSZXZpZXdlZC1pZDogTm9vbmUKKwlUZXN0ZWQtYnk6IG15QGhvdXNlCisJQ2hhbmdlLWlkOiBJZGVhZGJlZWYKKwlTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJQnVnOiAxMjM0CisJRU9GCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCTQ6U3ViamVjdDogW1BBVENIXSBzdWJqZWN0CisJODoKKwkxMDoKKwkxNDpTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQgcGF0Y2ggaWdub3JlcyBjb2xvci51aScgJworCXRlc3RfdW5jb25maWcgY29sb3IudWkgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5leHBlY3QgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci51aSBhbHdheXMgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIGludmFsaWQgLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIGFuZCBjb25maWcnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJjb25maWcgc3ViamVjdAorCitib2R5IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIGdhcmJhZ2UgbWFzdGVyICYmCisJdGVzdF9jb25maWcgZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uIGdhcmJhZ2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gPSBkZWZhdWx0JyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gZGVmYXVsdCAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gXCpcKlwqIFNVQkpFQ1QgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwlncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwlncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gZGVmYXVsdCcgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIGRlZmF1bHQgbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAwLzJcXSBcKlwqXCogU1VCSkVDVCBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXlwqXCpcKiBCTFVSQiBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCWdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIGZvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbiA9IG5vbmUnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJjb25maWcgc3ViamVjdAorCitib2R5IiAmJgorCXRlc3RfY29uZmlnIGZvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbiBub25lICYmCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAwLzJcXSBcKlwqXCogU1VCSkVDVCBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCWdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIG5vbmUnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJjb25maWcgc3ViamVjdAorCitib2R5IiAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBub25lIG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gXCpcKlwqIFNVQkpFQ1QgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwlncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIGZvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbiA9IG1lc3NhZ2UnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJjb25maWcgc3ViamVjdAorCitib2R5IiAmJgorCXRlc3RfY29uZmlnIGZvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbiBtZXNzYWdlICYmCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAwLzJcXSBcKlwqXCogU1VCSkVDVCBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXlwqXCpcKiBCTFVSQiBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCWdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBtZXNzYWdlJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gbWVzc2FnZSBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIFwqXCpcKiBTVUJKRUNUIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJZ3JlcCAiXmNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uID0gc3ViamVjdCcgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJdGVzdF9jb25maWcgZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uIHN1YmplY3QgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIGNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwlncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gc3ViamVjdCcgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIHN1YmplY3QgbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAwLzJcXSBjb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXlwqXCpcKiBCTFVSQiBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXmNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uID0gYXV0byAoc2hvcnQgc3ViamVjdCBsaW5lKScgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJdGVzdF9jb25maWcgZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uIGF1dG8gJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIGNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwlncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gYXV0byAoc2hvcnQgc3ViamVjdCBsaW5lKScgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIGF1dG8gbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAwLzJcXSBjb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXlwqXCpcKiBCTFVSQiBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXmNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uID0gYXV0byAobG9uZyBzdWJqZWN0IGxpbmUpJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAidGhpcyBpcyBhIHJlYWxseSBsb25nIGZpcnN0IGxpbmUgYW5kIGl0IGlzIG92ZXIgMTAwIGNoYXJhY3RlcnMgbG9uZyB3aGljaCBpcyB0aGUgdGhyZXNob2xkIGZvciBsb25nIHN1YmplY3RzCisKK2JvZHkiICYmCisJdGVzdF9jb25maWcgZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uIGF1dG8gJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIFwqXCpcKiBTVUJKRUNUIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJZ3JlcCAiXnRoaXMgaXMgYSByZWFsbHkgbG9uZyBmaXJzdCBsaW5lIGFuZCBpdCBpcyBvdmVyIDEwMCBjaGFyYWN0ZXJzIGxvbmcgd2hpY2ggaXMgdGhlIHRocmVzaG9sZCBmb3IgbG9uZyBzdWJqZWN0cyQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBhdXRvIChsb25nIHN1YmplY3QgbGluZSknICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJ0aGlzIGlzIGEgcmVhbGx5IGxvbmcgZmlyc3QgbGluZSBhbmQgaXQgaXMgb3ZlciAxMDAgY2hhcmFjdGVycyBsb25nIHdoaWNoIGlzIHRoZSB0aHJlc2hvbGQgZm9yIGxvbmcgc3ViamVjdHMKKworYm9keSIgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gYXV0byBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIFwqXCpcKiBTVUJKRUNUIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJZ3JlcCAiXnRoaXMgaXMgYSByZWFsbHkgbG9uZyBmaXJzdCBsaW5lIGFuZCBpdCBpcyBvdmVyIDEwMCBjaGFyYWN0ZXJzIGxvbmcgd2hpY2ggaXMgdGhlIHRocmVzaG9sZCBmb3IgbG9uZyBzdWJqZWN0cyQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIGNvbW1hbmQtbGluZSAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gb3ZlcnJpZGVzIGNvbmZpZycgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJdGVzdF9jb25maWcgZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uIG5vbmUgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gc3ViamVjdCBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIGNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwlncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgdXNpbmcgYnJhbmNoIGRlc2NyaXB0aW9uICgxKScgJworCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uIGhlbGxvICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgaGVsbG8gYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB1c2luZyBicmFuY2ggZGVzY3JpcHRpb24gKDIpJyAnCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gaGVsbG8gJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIHJlYnVpbGQtMX4yLi5yZWJ1aWxkLTEgPmFjdHVhbCAmJgorCWdyZXAgaGVsbG8gYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB1c2luZyBicmFuY2ggZGVzY3JpcHRpb24gKDMpJyAnCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gaGVsbG8gJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIF5tYXN0ZXIgcmVidWlsZC0xID5hY3R1YWwgJiYKKwlncmVwIGhlbGxvIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgdXNpbmcgYnJhbmNoIGRlc2NyaXB0aW9uICg0KScgJworCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uIGhlbGxvICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciBtYXN0ZXIuLiA+YWN0dWFsICYmCisJZ3JlcCBoZWxsbyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHVzaW5nIGJyYW5jaCBkZXNjcmlwdGlvbiAoNSknICcKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiBoZWxsbyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLTIgSEVBRCA+YWN0dWFsICYmCisJZ3JlcCBoZWxsbyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHVzaW5nIGJyYW5jaCBkZXNjcmlwdGlvbiAoNiknICcKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiBoZWxsbyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLTIgPmFjdHVhbCAmJgorCWdyZXAgaGVsbG8gYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIG5vdGhpbmcnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgYXV0bycgJworCW1rZGlyIC1wIHRtcCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHRtcDsKKwkJZ2l0IGNvbmZpZyAtLXVuc2V0IGZvcm1hdC5jb3ZlcmxldHRlciIgJiYKKworCWdpdCBjb25maWcgZm9ybWF0LmNvdmVybGV0dGVyIGF1dG8gJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1vIHRtcCAtMSA+bGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgbGlzdCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLW8gdG1wIC0yID5saXN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciBhdXRvIHVzZXIgb3ZlcnJpZGUnICcKKwlta2RpciAtcCB0bXAgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiB0bXA7CisJCWdpdCBjb25maWcgLS11bnNldCBmb3JtYXQuY292ZXJsZXR0ZXIiICYmCisKKwlnaXQgY29uZmlnIGZvcm1hdC5jb3ZlcmxldHRlciBhdXRvICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtbyB0bXAgLS1jb3Zlci1sZXR0ZXIgLTEgPmxpc3QgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGxpc3QgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1vIHRtcCAtLWNvdmVyLWxldHRlciAtMiA+bGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgbGlzdCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLW8gdG1wIC0tbm8tY292ZXItbGV0dGVyIC0xID5saXN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBsaXN0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtbyB0bXAgLS1uby1jb3Zlci1sZXR0ZXIgLTIgPmxpc3QgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0temVyby1jb21taXQnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0temVyby1jb21taXQgLS1zdGRvdXQgdjIuLnYxID5wYXRjaDIgJiYKKwlncmVwICJeRnJvbSAiIHBhdGNoMiB8IHNvcnQgfCB1bmlxID5hY3R1YWwgJiYKKwllY2hvICJGcm9tICRaRVJPX09JRCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Zyb20gbGluZSBoYXMgZXhwZWN0ZWQgZm9ybWF0JyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCB2Mi4udjEgPnBhdGNoMiAmJgorCWdyZXAgIl5Gcm9tICIgcGF0Y2gyID5mcm9tICYmCisJZ3JlcCAiXkZyb20gJE9JRF9SRUdFWCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEkIiBwYXRjaDIgPmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZnJvbSBmaWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLW8gd2l0aCBubyBsZWFkaW5nIGRpcmVjdG9yaWVzJyAnCisJcm0gLWZyIHBhdGNoZXMgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1vIHBhdGNoZXMgbWFzdGVyLi5zaWRlICYmCisJY291bnQ9JChnaXQgcmV2LWxpc3QgLS1jb3VudCBtYXN0ZXIuLnNpZGUpICYmCisJbHMgcGF0Y2hlcyA+bGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9ICRjb3VudCBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtbyB3aXRoIGxlYWRpbmcgZXhpc3RpbmcgZGlyZWN0b3JpZXMnICcKKwlybSAtcmYgZXhpc3RpbmctZGlyICYmCisJbWtkaXIgZXhpc3RpbmctZGlyICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtbyBleGlzdGluZy1kaXIvcGF0Y2hlcyBtYXN0ZXIuLnNpZGUgJiYKKwljb3VudD0kKGdpdCByZXYtbGlzdCAtLWNvdW50IG1hc3Rlci4uc2lkZSkgJiYKKwlscyBleGlzdGluZy1kaXIvcGF0Y2hlcyA+bGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9ICRjb3VudCBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtbyB3aXRoIGxlYWRpbmcgbm9uLWV4aXN0aW5nIGRpcmVjdG9yaWVzJyAnCisJcm0gLXJmIG5vbi1leGlzdGluZy1kaXIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1vIG5vbi1leGlzdGluZy1kaXIvcGF0Y2hlcyBtYXN0ZXIuLnNpZGUgJiYKKwljb3VudD0kKGdpdCByZXYtbGlzdCAtLWNvdW50IG1hc3Rlci4uc2lkZSkgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIG5vbi1leGlzdGluZy1kaXIgJiYKKwlscyBub24tZXhpc3RpbmctZGlyL3BhdGNoZXMgPmxpc3QgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAkY291bnQgbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggZm9ybWF0Lm91dHB1dERpcmVjdG9yeSBvcHRpb24nICcKKwl0ZXN0X2NvbmZpZyBmb3JtYXQub3V0cHV0RGlyZWN0b3J5IHBhdGNoZXMgJiYKKwlybSAtZnIgcGF0Y2hlcyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggbWFzdGVyLi5zaWRlICYmCisJY291bnQ9JChnaXQgcmV2LWxpc3QgLS1jb3VudCBtYXN0ZXIuLnNpZGUpICYmCisJbHMgcGF0Y2hlcyA+bGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9ICRjb3VudCBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtbyBvdmVycmlkZXMgZm9ybWF0Lm91dHB1dERpcmVjdG9yeScgJworCXRlc3RfY29uZmlnIGZvcm1hdC5vdXRwdXREaXJlY3RvcnkgcGF0Y2hlcyAmJgorCXJtIC1mciBwYXRjaGVzIHBhdGNoc2V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCBtYXN0ZXIuLnNpZGUgLW8gcGF0Y2hzZXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBwYXRjaGVzICYmCisJdGVzdF9wYXRoX2lzX2RpciBwYXRjaHNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1iYXNlJyAnCisJZ2l0IGNoZWNrb3V0IHBhdGNoaWQgJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1iYXNlPUhFQUR+MyAtMSA+cGF0Y2ggJiYKKwl0YWlsIC1uIDcgcGF0Y2ggPmFjdHVhbDEgJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1iYXNlPUhFQUR+MyBIRUFEfi4uID5wYXRjaCAmJgorCXRhaWwgLW4gNyBwYXRjaCA+YWN0dWFsMiAmJgorCisJZWNobyA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEfjMgPmNvbW1pdC1pZC1iYXNlICYmCisJZWNobyAiYmFzZS1jb21taXQ6ICQoY2F0IGNvbW1pdC1pZC1iYXNlKSIgPj5leHBlY3QgJiYKKworCWdpdCBzaG93IC0tcGF0Y2ggSEVBRH4yID5wYXRjaCAmJgorCWdpdCBwYXRjaC1pZCAtLXN0YWJsZSA8cGF0Y2ggPnBhdGNoLmlkLnJhdyAmJgorCWF3ayAie3ByaW50IFwicHJlcmVxdWlzaXRlLXBhdGNoLWlkOlwiLCBcJDF9IiA8cGF0Y2guaWQucmF3ID4+ZXhwZWN0ICYmCisKKwlnaXQgc2hvdyAtLXBhdGNoIEhFQUR+MSA+cGF0Y2ggJiYKKwlnaXQgcGF0Y2gtaWQgLS1zdGFibGUgPHBhdGNoID5wYXRjaC5pZC5yYXcgJiYKKwlhd2sgIntwcmludCBcInByZXJlcXVpc2l0ZS1wYXRjaC1pZDpcIiwgXCQxfSIgPHBhdGNoLmlkLnJhdyA+PmV4cGVjdCAmJgorCisJc2lnbmF0dXJlID4+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbDEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsMiAmJgorCisJZWNobyA+ZmFpbCAmJgorCWVjaG8gImJhc2UtY29tbWl0OiAkKGNhdCBjb21taXQtaWQtYmFzZSkiID4+ZmFpbCAmJgorCisJZ2l0IHNob3cgLS1wYXRjaCBIRUFEfjIgPnBhdGNoICYmCisJZ2l0IHBhdGNoLWlkIC0tdW5zdGFibGUgPHBhdGNoID5wYXRjaC5pZC5yYXcgJiYKKwlhd2sgIntwcmludCBcInByZXJlcXVpc2l0ZS1wYXRjaC1pZDpcIiwgXCQxfSIgPHBhdGNoLmlkLnJhdyA+PmZhaWwgJiYKKworCWdpdCBzaG93IC0tcGF0Y2ggSEVBRH4xID5wYXRjaCAmJgorCWdpdCBwYXRjaC1pZCAtLXVuc3RhYmxlIDxwYXRjaCA+cGF0Y2guaWQucmF3ICYmCisJYXdrICJ7cHJpbnQgXCJwcmVyZXF1aXNpdGUtcGF0Y2gtaWQ6XCIsIFwkMX0iIDxwYXRjaC5pZC5yYXcgPj5mYWlsICYmCisKKwlzaWduYXR1cmUgPj5mYWlsICYmCisJISB0ZXN0X2NtcCBmYWlsIGFjdHVhbDEgJiYKKwkhIHRlc3RfY21wIGZhaWwgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1iYXNlIGVycm9ycyBvdXQgd2hlbiBiYXNlIGNvbW1pdCBpcyBpbiByZXZpc2lvbiBsaXN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvcm1hdC1wYXRjaCAtLWJhc2U9SEVBRCAtMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3JtYXQtcGF0Y2ggLS1iYXNlPUhFQUR+MSAtMiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1iYXNlPUhFQUR+MiAtMiA+cGF0Y2ggJiYKKwlncmVwICJeYmFzZS1jb21taXQ6IiBwYXRjaCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEfjIgPmNvbW1pdC1pZC1iYXNlICYmCisJZWNobyAiYmFzZS1jb21taXQ6ICQoY2F0IGNvbW1pdC1pZC1iYXNlKSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tYmFzZSBlcnJvcnMgb3V0IHdoZW4gYmFzZSBjb21taXQgaXMgbm90IGFuY2VzdG9yIG9mIHJldmlzaW9uIGxpc3QnICcKKwkjIEZvciBoaXN0b3J5IGFzIGJlbG93OgorCSMKKwkjICAgIC0tLVEtLS1QLS0tWi0tLVktLS0qLS0tWAorCSMJIFwgICAgICAgICAgICAgLworCSMJICAtLS0tLS0tLS0tLS1XCisJIworCSMgSWYgImZvcm1hdC1wYXRjaCBaLi5YIiBpcyBnaXZlbiwgUCBhbmQgWiBjYW4gbm90IGJlIHNwZWNpZmllZCBhcyB0aGUgYmFzZSBjb21taXQKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMxIG1hc3RlciAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+Y29tbWl0LWlkLWJhc2UgJiYKKwl0ZXN0X2NvbW1pdCBQICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5jb21taXQtaWQtUCAmJgorCXRlc3RfY29tbWl0IFogJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmNvbW1pdC1pZC1aICYmCisJdGVzdF9jb21taXQgWSAmJgorCWdpdCBjaGVja291dCAtYiB0b3BpYzIgbWFzdGVyICYmCisJdGVzdF9jb21taXQgVyAmJgorCWdpdCBtZXJnZSB0b3BpYzEgJiYKKwl0ZXN0X2NvbW1pdCBYICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvcm1hdC1wYXRjaCAtLWJhc2U9JChjYXQgY29tbWl0LWlkLVApIC0zICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvcm1hdC1wYXRjaCAtLWJhc2U9JChjYXQgY29tbWl0LWlkLVopIC0zICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWJhc2U9JChjYXQgY29tbWl0LWlkLWJhc2UpIC0zID5wYXRjaCAmJgorCWdyZXAgIl5iYXNlLWNvbW1pdDoiIHBhdGNoID5hY3R1YWwgJiYKKwllY2hvICJiYXNlLWNvbW1pdDogJChjYXQgY29tbWl0LWlkLWJhc2UpIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1iYXNlPWF1dG8nICcKKwlnaXQgY2hlY2tvdXQgLWIgdXBzdHJlYW0gbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGxvY2FsIHVwc3RyZWFtICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz11cHN0cmVhbSAmJgorCXRlc3RfY29tbWl0IE4xICYmCisJdGVzdF9jb21taXQgTjIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tYmFzZT1hdXRvIC0yID5wYXRjaCAmJgorCWdyZXAgIl5iYXNlLWNvbW1pdDoiIHBhdGNoID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIHVwc3RyZWFtID5jb21taXQtaWQtYmFzZSAmJgorCWVjaG8gImJhc2UtY29tbWl0OiAkKGNhdCBjb21taXQtaWQtYmFzZSkiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBlcnJvcnMgb3V0IHdoZW4gaGlzdG9yeSBpbnZvbHZlcyBjcmlzcy1jcm9zcycgJworCSMgc2V0dXAgY3Jpc3MtY3Jvc3MgaGlzdG9yeQorCSMKKwkjICAgQi0tLU0xLS0tRAorCSMgIC8gXCAvCisJIyBBICAgWAorCSMgIFwgLyBcCisJIyAgIEMtLS1NMi0tLUUKKwkjCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IEEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgeGIgbWFzdGVyICYmCisJdGVzdF9jb21taXQgQiAmJgorCWdpdCBjaGVja291dCAtYiB4YyBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBDICYmCisJZ2l0IGNoZWNrb3V0IC1iIHhiYyB4YiAtLSAmJgorCWdpdCBtZXJnZSB4YyAmJgorCWdpdCBjaGVja291dCAtYiB4Y2IgeGMgLS0gJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPXhiYyAmJgorCWdpdCBtZXJnZSB4YiAmJgorCWdpdCBjaGVja291dCB4YmMgJiYKKwl0ZXN0X2NvbW1pdCBEICYmCisJZ2l0IGNoZWNrb3V0IHhjYiAmJgorCXRlc3RfY29tbWl0IEUgJiYKKwl0ZXN0X211c3RfZmFpbCAJZ2l0IGZvcm1hdC1wYXRjaCAtLWJhc2U9YXV0byAtMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggZm9ybWF0LnVzZUF1dG9CYXNlIG9wdGlvbicgJworCWdpdCBjaGVja291dCBsb2NhbCAmJgorCXRlc3RfY29uZmlnIGZvcm1hdC51c2VBdXRvQmFzZSB0cnVlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+cGF0Y2ggJiYKKwlncmVwICJeYmFzZS1jb21taXQ6IiBwYXRjaCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSB1cHN0cmVhbSA+Y29tbWl0LWlkLWJhc2UgJiYKKwllY2hvICJiYXNlLWNvbW1pdDogJChjYXQgY29tbWl0LWlkLWJhc2UpIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1iYXNlIG92ZXJyaWRlcyBmb3JtYXQudXNlQXV0b0Jhc2UnICcKKwl0ZXN0X2NvbmZpZyBmb3JtYXQudXNlQXV0b0Jhc2UgdHJ1ZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1iYXNlPUhFQUR+MSAtMSA+cGF0Y2ggJiYKKwlncmVwICJeYmFzZS1jb21taXQ6IiBwYXRjaCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEfjEgPmNvbW1pdC1pZC1iYXNlICYmCisJZWNobyAiYmFzZS1jb21taXQ6ICQoY2F0IGNvbW1pdC1pZC1iYXNlKSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tbm8tYmFzZSBvdmVycmlkZXMgZm9ybWF0LnVzZUF1dG9CYXNlJyAnCisJdGVzdF9jb25maWcgZm9ybWF0LnVzZUF1dG9CYXNlIHRydWUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tbm8tYmFzZSAtMSA+cGF0Y2ggJiYKKwkhIGdyZXAgIl5iYXNlLWNvbW1pdDoiIHBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLWJhc2Ugd2l0aCAtLWF0dGFjaCcgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1hdHRhY2g9bWltZW1pbWUgLS1zdGRvdXQgLS1iYXNlPUhFQUR+IC0xID5wYXRjaCAmJgorCXNlZCAtbiAtZSAiL15iYXNlLWNvbW1pdDovcy8uKi8xL3AiIC1lICIvXi0tLSptaW1lbWltZS0tJC9zLy4qLzIvcCIgXAorCQlwYXRjaCA+YWN0dWFsICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLWF0dGFjaCBjb3Zlci1sZXR0ZXIgb25seSBpcyBub24tbXVsdGlwYXJ0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgcGF0Y2hlcyIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1vIHBhdGNoZXMgLS1jb3Zlci1sZXR0ZXIgLS1hdHRhY2g9bWltZW1pbWUgLS1iYXNlPUhFQUR+IC0xICYmCisJISBlZ3JlcCAiXi0tK21pbWVtaW1lIiBwYXRjaGVzLzAwMDAqLnBhdGNoICYmCisJZWdyZXAgIl4tLSttaW1lbWltZSQiIHBhdGNoZXMvMDAwMSoucGF0Y2ggPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0cHV0ICYmCisJZWdyZXAgIl4tLSttaW1lbWltZS0tJCIgcGF0Y2hlcy8wMDAxKi5wYXRjaCA+b3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tcHJldHR5PW1ib3hyZCcgJworCXNwPSIgIiAmJgorCWNhdCA+bXNnIDw8LUlOUFVUX0VORCAmJgorCW1ib3hyZCBzaG91bGQgZXNjYXBlIHRoZSBib2R5CisKKwlGcm9tIGNvdWxkIHRyaXAgdXAgYSBsb29zZSBtYm94IHBhcnNlcgorCT5Gcm9tIGV4dHJhIGVzY2FwZSBmb3IgcmV2ZXJzaWJpbGl0eQorCT4+RnJvbSBleHRyYSBlc2NhcGUgZm9yIHJldmVyc2liaWxpdHkgMgorCWZyb20gbG93ZXIgY2FzZSBub3QgZXNjYXBlZAorCUZyb21tIGJhZCBzcGVsaW5nIG5vdCBlc2NhcGVkCisJIEZyb20gd2l0aCBsZWFkaW5nIHNwYWNlIG5vdCBlc2NhcGVkCisKKwlGCisJRnJvbQorCUZyb20kc3AKKwlGcm9tICAgICRzcAorCUZyb20JJHNwCisJSU5QVVRfRU5ECisKKwljYXQgPmV4cGVjdCA8PC1JTlBVVF9FTkQgJiYKKwk+RnJvbSBjb3VsZCB0cmlwIHVwIGEgbG9vc2UgbWJveCBwYXJzZXIKKwk+PkZyb20gZXh0cmEgZXNjYXBlIGZvciByZXZlcnNpYmlsaXR5CisJPj4+RnJvbSBleHRyYSBlc2NhcGUgZm9yIHJldmVyc2liaWxpdHkgMgorCWZyb20gbG93ZXIgY2FzZSBub3QgZXNjYXBlZAorCUZyb21tIGJhZCBzcGVsaW5nIG5vdCBlc2NhcGVkCisJIEZyb20gd2l0aCBsZWFkaW5nIHNwYWNlIG5vdCBlc2NhcGVkCisKKwlGCisJRnJvbQorCUZyb20KKwlGcm9tCisJRnJvbQorCUlOUFVUX0VORAorCisJQz0kKGdpdCBjb21taXQtdHJlZSBIRUFEXl57dHJlZX0gLXAgSEVBRCA8bXNnKSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1wcmV0dHk9bWJveHJkIC0tc3Rkb3V0IC0xICRDfjEuLiRDID5wYXRjaCAmJgorCWdpdCBncmVwIC1oIC0tbm8taW5kZXggLUExMSBcCisJCSJePkZyb20gY291bGQgdHJpcCB1cCBhIGxvb3NlIG1ib3ggcGFyc2VyIiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcmRpZmY6IHNldHVwJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGJvb3AgbWFzdGVyICYmCisJdGVzdF9jb21taXQgZm5vcnAgYmxvcnAgJiYKKwl0ZXN0X2NvbW1pdCBmbGVlcCBibG9ycAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcmRpZmY6IGNvdmVyLWxldHRlcicgJworCXNlZCAieS9xLyAvIiA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkrZmxlZXAKKwktLXEKKwlFT0YKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0taW50ZXJkaWZmPWJvb3B+MiAtMSBib29wICYmCisJdGVzdF9pMThuZ3JlcCAiXkludGVyZGlmZjokIiAwMDAwLWNvdmVyLWxldHRlci5wYXRjaCAmJgorCXRlc3RfaTE4bmdyZXAgISAiXkludGVyZGlmZjokIiAwMDAxLWZsZWVwLnBhdGNoICYmCisJc2VkICIxLC9eQEAgL2Q7IC9eLS0gJC9xIiAwMDAwLWNvdmVyLWxldHRlci5wYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcmRpZmY6IHJlcm9sbC1jb3VudCcgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLS1pbnRlcmRpZmY9Ym9vcH4yIC12MiAtMSBib29wICYmCisJdGVzdF9pMThuZ3JlcCAiXkludGVyZGlmZiAuLiogdjE6JCIgdjItMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJkaWZmOiBzb2xvLXBhdGNoJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSAgK2ZsZWVwCisKKwlFT0YKKwlnaXQgZm9ybWF0LXBhdGNoIC0taW50ZXJkaWZmPWJvb3B+MiAtMSBib29wICYmCisJdGVzdF9pMThuZ3JlcCAiXkludGVyZGlmZjokIiAwMDAxLWZsZWVwLnBhdGNoICYmCisJc2VkICIxLC9eICBAQCAvZDsgL14kL3EiIDAwMDEtZmxlZXAucGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDE1LWRpZmYtd2hpdGVzcGFjZS5zaCBiL3QvdDQwMTUtZGlmZi13aGl0ZXNwYWNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4ZDMwMjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE1LWRpZmYtd2hpdGVzcGFjZS5zaApAQCAtMCwwICsxLDIwOTQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHNwZWNpYWwgd2hpdGVzcGFjZSBpbiBkaWZmIGVuZ2luZS4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlJheSBMZWh0aW5pZW1pJ3MgZXhhbXBsZSIgJworCWNhdCA8PC1cRU9GID54ICYmCisJZG8geworCSAgIG5vdGhpbmc7CisJfSB3aGlsZSAoMCk7CisJRU9GCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB4ICYmCisJb2xkX2hhc2hfeD0kKGdpdCBoYXNoLW9iamVjdCB4KSAmJgorCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJG9sZF9oYXNoX3giKSAmJgorCisJY2F0IDw8LVxFT0YgPnggJiYKKwlkbworCXsKKwkgICBub3RoaW5nOworCX0KKwl3aGlsZSAoMCk7CisJRU9GCisJbmV3X2hhc2hfeD0kKGdpdCBoYXNoLW9iamVjdCB4KSAmJgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkbmV3X2hhc2hfeCIpICYmCisKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwlkaWZmIC0tZ2l0IGEveCBiL3gKKwlpbmRleCAkYmVmb3JlLi4kYWZ0ZXIgMTAwNjQ0CisJLS0tIGEveAorCSsrKyBiL3gKKwlAQCAtMSwzICsxLDUgQEAKKwktZG8geworCStkbworCSt7CisJICAgIG5vdGhpbmc7CisJLX0gd2hpbGUgKDApOworCSt9CisJK3doaWxlICgwKTsKKwlFT0YKKworCWdpdCBkaWZmID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0ICYmCisKKwlnaXQgZGlmZiAtdyA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dCAmJgorCisJZ2l0IGRpZmYgLWIgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5vdGhlciB0ZXN0LCB3aXRob3V0IG9wdGlvbnMnICcKKwl0ciBRICJcMDE1IiA8PC1cRU9GID54ICYmCisJd2hpdGVzcGFjZSBhdCBiZWdpbm5pbmcKKwl3aGl0ZXNwYWNlIGNoYW5nZQorCXdoaXRlc3BhY2UgaW4gdGhlIG1pZGRsZQorCXdoaXRlc3BhY2UgYXQgZW5kCisJdW5jaGFuZ2VkIGxpbmUKKwlDUiBhdCBlbmRRCisJRU9GCisKKwlnaXQgdXBkYXRlLWluZGV4IHggJiYKKwlvbGRfaGFzaF94PSQoZ2l0IGhhc2gtb2JqZWN0IHgpICYmCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkb2xkX2hhc2hfeCIpICYmCisKKwl0ciAiXyIgIiAiIDw8LVxFT0YgPnggJiYKKwlfCXdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCisJd2hpdGVzcGFjZSAJIGNoYW5nZQorCXdoaXRlIHNwYWNlIGluIHRoZSBtaWRkbGUKKwl3aGl0ZXNwYWNlIGF0IGVuZF9fCisJdW5jaGFuZ2VkIGxpbmUKKwlDUiBhdCBlbmQKKwlFT0YKKwluZXdfaGFzaF94PSQoZ2l0IGhhc2gtb2JqZWN0IHgpICYmCisJYWZ0ZXI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRuZXdfaGFzaF94IikgJiYKKworCXRyICJRXyIgIlwwMTUgIiA8PC1FT0YgPmV4cGVjdCAmJgorCWRpZmYgLS1naXQgYS94IGIveAorCWluZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQKKwktLS0gYS94CisJKysrIGIveAorCUBAIC0xLDYgKzEsNiBAQAorCS13aGl0ZXNwYWNlIGF0IGJlZ2lubmluZworCS13aGl0ZXNwYWNlIGNoYW5nZQorCS13aGl0ZXNwYWNlIGluIHRoZSBtaWRkbGUKKwktd2hpdGVzcGFjZSBhdCBlbmQKKwkrIAl3aGl0ZXNwYWNlIGF0IGJlZ2lubmluZworCSt3aGl0ZXNwYWNlIAkgY2hhbmdlCisJK3doaXRlIHNwYWNlIGluIHRoZSBtaWRkbGUKKwkrd2hpdGVzcGFjZSBhdCBlbmRfXworCSB1bmNoYW5nZWQgbGluZQorCS1DUiBhdCBlbmRRCisJK0NSIGF0IGVuZAorCUVPRgorCisJZ2l0IGRpZmYgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQgJiYKKworCWdpdCBkaWZmIC13ID5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisKKwlnaXQgZGlmZiAtdyAtYiA+b3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgorCisJZ2l0IGRpZmYgLXcgLS1pZ25vcmUtc3BhY2UtYXQtZW9sID5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisKKwlnaXQgZGlmZiAtdyAtYiAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgPm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKKworCWdpdCBkaWZmIC13IC0taWdub3JlLWNyLWF0LWVvbCA+b3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgorCisJdHIgIlFfIiAiXDAxNSAiIDw8LUVPRiA+ZXhwZWN0ICYmCisJZGlmZiAtLWdpdCBhL3ggYi94CisJaW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NAorCS0tLSBhL3gKKwkrKysgYi94CisJQEAgLTEsNiArMSw2IEBACisJLXdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCisJK18Jd2hpdGVzcGFjZSBhdCBiZWdpbm5pbmcKKwkgd2hpdGVzcGFjZSAJIGNoYW5nZQorCS13aGl0ZXNwYWNlIGluIHRoZSBtaWRkbGUKKwkrd2hpdGUgc3BhY2UgaW4gdGhlIG1pZGRsZQorCSB3aGl0ZXNwYWNlIGF0IGVuZF9fCisJIHVuY2hhbmdlZCBsaW5lCisJIENSIGF0IGVuZAorCUVPRgorCWdpdCBkaWZmIC1iID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0ICYmCisKKwlnaXQgZGlmZiAtYiAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQgJiYKKworCWdpdCBkaWZmIC1iIC0taWdub3JlLWNyLWF0LWVvbCA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dCAmJgorCisJdHIgIlFfIiAiXDAxNSAiIDw8LUVPRiA+ZXhwZWN0ICYmCisJZGlmZiAtLWdpdCBhL3ggYi94CisJaW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NAorCS0tLSBhL3gKKwkrKysgYi94CisJQEAgLTEsNiArMSw2IEBACisJLXdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCisJLXdoaXRlc3BhY2UgY2hhbmdlCisJLXdoaXRlc3BhY2UgaW4gdGhlIG1pZGRsZQorCStfCXdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCisJK3doaXRlc3BhY2UgCSBjaGFuZ2UKKwkrd2hpdGUgc3BhY2UgaW4gdGhlIG1pZGRsZQorCSB3aGl0ZXNwYWNlIGF0IGVuZF9fCisJIHVuY2hhbmdlZCBsaW5lCisJIENSIGF0IGVuZAorCUVPRgorCWdpdCBkaWZmIC0taWdub3JlLXNwYWNlLWF0LWVvbCA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dCAmJgorCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3BhY2UtYXQtZW9sIC0taWdub3JlLWNyLWF0LWVvbCA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dCAmJgorCisJdHIgIlFfIiAiXDAxNSAiIDw8LUVPRiA+ZXhwZWN0ICYmCisJZGlmZiAtLWdpdCBhL3ggYi94CisJaW5kZXhfJGJlZm9yZS4uJGFmdGVyIDEwMDY0NAorCS0tLSBhL3gKKwkrKysgYi94CisJQEAgLTEsNiArMSw2IEBACisJLXdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCisJLXdoaXRlc3BhY2UgY2hhbmdlCisJLXdoaXRlc3BhY2UgaW4gdGhlIG1pZGRsZQorCS13aGl0ZXNwYWNlIGF0IGVuZAorCStfCXdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCisJK3doaXRlc3BhY2VfCV9jaGFuZ2UKKwkrd2hpdGUgc3BhY2UgaW4gdGhlIG1pZGRsZQorCSt3aGl0ZXNwYWNlIGF0IGVuZF9fCisJIHVuY2hhbmdlZCBsaW5lCisJIENSIGF0IGVuZAorCUVPRgorCWdpdCBkaWZmIC0taWdub3JlLWNyLWF0LWVvbCA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZ25vcmUtYmxhbmstbGluZXM6IG9ubHkgbmV3IGxpbmVzJyAnCisJdGVzdF9zZXEgNSA+eCAmJgorCWdpdCB1cGRhdGUtaW5kZXggeCAmJgorCXRlc3Rfc2VxIDUgfCBzZWQgIi8zL2lcXAorIiA+eCAmJgorCWdpdCBkaWZmIC0taWdub3JlLWJsYW5rLWxpbmVzID5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lnbm9yZS1ibGFuay1saW5lczogb25seSBuZXcgbGluZXMgd2l0aCBzcGFjZScgJworCXRlc3Rfc2VxIDUgPnggJiYKKwlnaXQgdXBkYXRlLWluZGV4IHggJiYKKwl0ZXN0X3NlcSA1IHwgc2VkICIvMy9pXFwKKyAiID54ICYmCisJZ2l0IGRpZmYgLXcgLS1pZ25vcmUtYmxhbmstbGluZXMgPm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWdub3JlLWJsYW5rLWxpbmVzOiBhZnRlciBjaGFuZ2UnICcKKwljYXQgPDwtXEVPRiA+eCAmJgorCTEKKwkyCisKKwkzCisJNAorCTUKKworCTYKKwk3CisJRU9GCisJZ2l0IHVwZGF0ZS1pbmRleCB4ICYmCisJY2F0IDw8LVxFT0YgPnggJiYKKwljaGFuZ2UKKworCTEKKwkyCisJMworCTQKKwk1CisJNgorCisJNworCUVPRgorCWdpdCBkaWZmIC0taW50ZXItaHVuay1jb250ZXh0PTEwMCAtLWlnbm9yZS1ibGFuay1saW5lcyA+b3V0LnRtcCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCWRpZmYgLS1naXQgYS94IGIveAorCS0tLSBhL3gKKwkrKysgYi94CisJQEAgLTEsNiArMSw3IEBACisJK2NoYW5nZQorCSsKKwkgMQorCSAyCisJLQorCSAzCisJIDQKKwkgNQorCUVPRgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBvdXQudG1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lnbm9yZS1ibGFuay1saW5lczogYmVmb3JlIGNoYW5nZScgJworCWNhdCA8PC1cRU9GID54ICYmCisJMQorCTIKKworCTMKKwk0CisJNQorCTYKKwk3CisJRU9GCisJZ2l0IHVwZGF0ZS1pbmRleCB4ICYmCisJY2F0IDw8LVxFT0YgPnggJiYKKworCTEKKwkyCisJMworCTQKKwk1CisKKwk2CisJNworCWNoYW5nZQorCUVPRgorCWdpdCBkaWZmIC0taW50ZXItaHVuay1jb250ZXh0PTEwMCAtLWlnbm9yZS1ibGFuay1saW5lcyA+b3V0LnRtcCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCWRpZmYgLS1naXQgYS94IGIveAorCS0tLSBhL3gKKwkrKysgYi94CisJQEAgLTQsNSArNCw3IEBACisJIDMKKwkgNAorCSA1CisJKworCSA2CisJIDcKKwkrY2hhbmdlCisJRU9GCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIG91dC50bXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWdub3JlLWJsYW5rLWxpbmVzOiBiZXR3ZWVuIGNoYW5nZXMnICcKKwljYXQgPDwtXEVPRiA+eCAmJgorCTEKKwkyCisJMworCTQKKwk1CisKKworCTYKKwk3CisJOAorCTkKKwkxMAorCUVPRgorCWdpdCB1cGRhdGUtaW5kZXggeCAmJgorCWNhdCA8PC1cRU9GID54ICYmCisJY2hhbmdlCisJMQorCTIKKworCTMKKwk0CisJNQorCTYKKwk3CisJOAorCisJOQorCTEwCisJY2hhbmdlCisJRU9GCisJZ2l0IGRpZmYgLS1pZ25vcmUtYmxhbmstbGluZXMgPm91dC50bXAgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlkaWZmIC0tZ2l0IGEveCBiL3gKKwktLS0gYS94CisJKysrIGIveAorCUBAIC0xLDUgKzEsNyBAQAorCStjaGFuZ2UKKwkgMQorCSAyCisJKworCSAzCisJIDQKKwkgNQorCUBAIC04LDUgKzgsNyBAQAorCSA2CisJIDcKKwkgOAorCSsKKwkgOQorCSAxMAorCStjaGFuZ2UKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgb3V0LnRtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZ25vcmUtYmxhbmstbGluZXM6IGJldHdlZW4gY2hhbmdlcyAod2l0aCBpbnRlcmh1bmtjdHgpJyAnCisJdGVzdF9zZXEgMTAgPnggJiYKKwlnaXQgdXBkYXRlLWluZGV4IHggJiYKKwljYXQgPDwtXEVPRiA+eCAmJgorCWNoYW5nZQorCTEKKwkyCisKKwkzCisJNAorCTUKKworCTYKKwk3CisJOAorCTkKKworCTEwCisJY2hhbmdlCisJRU9GCisJZ2l0IGRpZmYgLS1pbnRlci1odW5rLWNvbnRleHQ9MiAtLWlnbm9yZS1ibGFuay1saW5lcyA+b3V0LnRtcCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCWRpZmYgLS1naXQgYS94IGIveAorCS0tLSBhL3gKKwkrKysgYi94CisJQEAgLTEsMTAgKzEsMTUgQEAKKwkrY2hhbmdlCisJIDEKKwkgMgorCSsKKwkgMworCSA0CisJIDUKKwkrCisJIDYKKwkgNworCSA4CisJIDkKKwkrCisJIDEwCisJK2NoYW5nZQorCUVPRgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBvdXQudG1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lnbm9yZS1ibGFuay1saW5lczogc2NhdHRlcmVkIHNwYWNlcycgJworCXRlc3Rfc2VxIDEwID54ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCB4ICYmCisJY2F0IDw8LVxFT0YgPnggJiYKKwljaGFuZ2UKKwkxCisJMgorCTMKKworCTQKKworCTUKKworCTYKKworCisJNworCisJOAorCTkKKwkxMAorCWNoYW5nZQorCUVPRgorCWdpdCBkaWZmIC0taW50ZXItaHVuay1jb250ZXh0PTQgLS1pZ25vcmUtYmxhbmstbGluZXMgPm91dC50bXAgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlkaWZmIC0tZ2l0IGEveCBiL3gKKwktLS0gYS94CisJKysrIGIveAorCUBAIC0xLDMgKzEsNCBAQAorCStjaGFuZ2UKKwkgMQorCSAyCisJIDMKKwlAQCAtOCwzICsxNSw0IEBACisJIDgKKwkgOQorCSAxMAorCStjaGFuZ2UKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgb3V0LnRtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZ25vcmUtYmxhbmstbGluZXM6IHNwYWNlcyBjb2FsZXNjZScgJworCXRlc3Rfc2VxIDYgPnggJiYKKwlnaXQgdXBkYXRlLWluZGV4IHggJiYKKwljYXQgPDwtXEVPRiA+eCAmJgorCWNoYW5nZQorCTEKKwkyCisJMworCisJNAorCisJNQorCisJNgorCWNoYW5nZQorCUVPRgorCWdpdCBkaWZmIC0taW50ZXItaHVuay1jb250ZXh0PTQgLS1pZ25vcmUtYmxhbmstbGluZXMgPm91dC50bXAgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlkaWZmIC0tZ2l0IGEveCBiL3gKKwktLS0gYS94CisJKysrIGIveAorCUBAIC0xLDYgKzEsMTEgQEAKKwkrY2hhbmdlCisJIDEKKwkgMgorCSAzCisJKworCSA0CisJKworCSA1CisJKworCSA2CisJK2NoYW5nZQorCUVPRgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBvdXQudG1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lnbm9yZS1ibGFuay1saW5lczogbWl4IGNoYW5nZXMgYW5kIGJsYW5rIGxpbmVzJyAnCisJdGVzdF9zZXEgMTYgPnggJiYKKwlnaXQgdXBkYXRlLWluZGV4IHggJiYKKwljYXQgPDwtXEVPRiA+eCAmJgorCWNoYW5nZQorCTEKKwkyCisKKwkzCisJNAorCTUKKwljaGFuZ2UKKwk2CisJNworCTgKKworCTkKKwkxMAorCTExCisJY2hhbmdlCisJMTIKKwkxMworCTE0CisKKwkxNQorCTE2CisJY2hhbmdlCisJRU9GCisJZ2l0IGRpZmYgLS1pZ25vcmUtYmxhbmstbGluZXMgPm91dC50bXAgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlkaWZmIC0tZ2l0IGEveCBiL3gKKwktLS0gYS94CisJKysrIGIveAorCUBAIC0xLDggKzEsMTEgQEAKKwkrY2hhbmdlCisJIDEKKwkgMgorCSsKKwkgMworCSA0CisJIDUKKwkrY2hhbmdlCisJIDYKKwkgNworCSA4CisJQEAgLTksOCArMTMsMTEgQEAKKwkgOQorCSAxMAorCSAxMQorCStjaGFuZ2UKKwkgMTIKKwkgMTMKKwkgMTQKKwkrCisJIDE1CisJIDE2CisJK2NoYW5nZQorCUVPRgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBvdXQudG1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIG1peGVkIHNwYWNlcyBhbmQgdGFicyBpbiBpbmRlbnQnICcKKwkjIFRoaXMgaXMgaW5kZW50ZWQgd2l0aCBTUCBIVCBTUC4KKwllY2hvICIgCSBmb28oKTsiID54ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjayA+Y2hlY2sgJiYKKwlncmVwICJzcGFjZSBiZWZvcmUgdGFiIGluIGluZGVudCIgY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbWl4ZWQgdGFicyBhbmQgc3BhY2VzIGluIGluZGVudCcgJworCSMgVGhpcyBpcyBpbmRlbnRlZCB3aXRoIEhUIFNQIEhULgorCWVjaG8gIgkgCWZvbygpOyIgPnggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNoZWNrID5jaGVjayAmJgorCWdyZXAgInNwYWNlIGJlZm9yZSB0YWIgaW4gaW5kZW50IiBjaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB3aXRoIG5vIHdoaXRlc3BhY2UgZXJyb3JzJyAnCisJZ2l0IGNvbW1pdCAtbSAic25hcHNob3QiICYmCisJZWNobyAiZm9vKCk7IiA+eCAmJgorCWdpdCBkaWZmIC0tY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlJyAnCisJZWNobyAiZm9vKCk7ICIgPnggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHdpdGggc3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQnICcKKwkjIGluZGVudCBoYXMgc3BhY2UgZm9sbG93ZWQgYnkgaGFyZCB0YWIKKwllY2hvICIgCWZvbygpOyIgPnggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlY2sgYW5kIC0tZXhpdC1jb2RlIGFyZSBub3QgZXhjbHVzaXZlJyAnCisJZ2l0IGNoZWNrb3V0IHggJiYKKwlnaXQgZGlmZiAtLWNoZWNrIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlY2sgYW5kIC0tcXVpZXQgYXJlIG5vdCBleGNsdXNpdmUnICcKKwlnaXQgZGlmZiAtLWNoZWNrIC0tcXVpZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3RhZ2VkIHdpdGggbm8gd2hpdGVzcGFjZSBlcnJvcnMnICcKKwllY2hvICJmb28oKTsiID54ICYmCisJZ2l0IGFkZCB4ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzdGFnZWQgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlJyAnCisJZWNobyAiZm9vKCk7ICIgPnggJiYKKwlnaXQgYWRkIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNhY2hlZCAtLWNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHN0YWdlZCB3aXRoIHNwYWNlIGJlZm9yZSB0YWIgaW4gaW5kZW50JyAnCisJIyBpbmRlbnQgaGFzIHNwYWNlIGZvbGxvd2VkIGJ5IGhhcmQgdGFiCisJZWNobyAiIAlmb28oKTsiID54ICYmCisJZ2l0IGFkZCB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jYWNoZWQgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB3aXRoIG5vIHdoaXRlc3BhY2UgZXJyb3JzIChkaWZmLWluZGV4KScgJworCWVjaG8gImZvbygpOyIgPnggJiYKKwlnaXQgYWRkIHggJiYKKwlnaXQgZGlmZi1pbmRleCAtLWNoZWNrIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlIChkaWZmLWluZGV4KScgJworCWVjaG8gImZvbygpOyAiID54ICYmCisJZ2l0IGFkZCB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtaW5kZXggLS1jaGVjayBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHdpdGggc3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQgKGRpZmYtaW5kZXgpJyAnCisJIyBpbmRlbnQgaGFzIHNwYWNlIGZvbGxvd2VkIGJ5IGhhcmQgdGFiCisJZWNobyAiIAlmb28oKTsiID54ICYmCisJZ2l0IGFkZCB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtaW5kZXggLS1jaGVjayBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHN0YWdlZCB3aXRoIG5vIHdoaXRlc3BhY2UgZXJyb3JzIChkaWZmLWluZGV4KScgJworCWVjaG8gImZvbygpOyIgPnggJiYKKwlnaXQgYWRkIHggJiYKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWNoZWNrIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3RhZ2VkIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZSAoZGlmZi1pbmRleCknICcKKwllY2hvICJmb28oKTsgIiA+eCAmJgorCWdpdCBhZGQgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tY2hlY2sgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzdGFnZWQgd2l0aCBzcGFjZSBiZWZvcmUgdGFiIGluIGluZGVudCAoZGlmZi1pbmRleCknICcKKwkjIGluZGVudCBoYXMgc3BhY2UgZm9sbG93ZWQgYnkgaGFyZCB0YWIKKwllY2hvICIgCWZvbygpOyIgPnggJiYKKwlnaXQgYWRkIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWNoZWNrIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgd2l0aCBubyB3aGl0ZXNwYWNlIGVycm9ycyAoZGlmZi10cmVlKScgJworCWVjaG8gImZvbygpOyIgPnggJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgY29tbWl0IiB4ICYmCisJZ2l0IGRpZmYtdHJlZSAtLWNoZWNrIEhFQUReIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlIChkaWZmLXRyZWUpJyAnCisJZWNobyAiZm9vKCk7ICIgPnggJiYKKwlnaXQgY29tbWl0IC1tICJhbm90aGVyIGNvbW1pdCIgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLXRyZWUgLS1jaGVjayBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHdpdGggc3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQgKGRpZmYtdHJlZSknICcKKwkjIGluZGVudCBoYXMgc3BhY2UgZm9sbG93ZWQgYnkgaGFyZCB0YWIKKwllY2hvICIgCWZvbygpOyIgPnggJiYKKwlnaXQgY29tbWl0IC1tICJ5ZXQgYW5vdGhlciIgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLXRyZWUgLS1jaGVjayBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHdpdGggaWdub3JlZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGF0dHIgKGRpZmYtdHJlZSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRF4iICYmCisKKwkjIGNyZWF0ZSBhIHdoaXRlc3BhY2UgZXJyb3IgdGhhdCBzaG91bGQgYmUgaWdub3JlZAorCWVjaG8gIiogLXdoaXRlc3BhY2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJmb28oKTsgIiA+eCAmJgorCWdpdCBhZGQgeCAmJgorCWdpdCBjb21taXQgLW0gImFkZCB0cmFpbGluZyBzcGFjZSIgJiYKKworCSMgd2l0aCBhIHdvcmt0cmVlIGRpZmYtdHJlZSBpZ25vcmVzIHRoZSB3aGl0ZXNwYWNlIGVycm9yCisJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1jaGVjayBIRUFEICYmCisKKwkjIHdpdGhvdXQgYSB3b3JrdHJlZSBkaWZmLXRyZWUgc3RpbGwgaWdub3JlcyB0aGUgd2hpdGVzcGFjZSBlcnJvcgorCWdpdCAtQyAuZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1jaGVjayBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRyYWlsaW5nIHdoaXRlc3BhY2UgKHRyYWlsaW5nLXNwYWNlOiBvZmYpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgIi10cmFpbGluZy1zcGFjZSIgJiYKKwllY2hvICJmb28gKCk7ICAgIiA+eCAmJgorCWdpdCBkaWZmIC0tY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdHJhaWxpbmcgd2hpdGVzcGFjZSAodHJhaWxpbmctc3BhY2U6IG9uKScgJworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJ0cmFpbGluZy1zcGFjZSIgJiYKKwllY2hvICJmb28gKCk7ICAgIiA+eCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQgKHNwYWNlLWJlZm9yZS10YWI6IG9mZiknICcKKwkjIGluZGVudCBjb250YWlucyBzcGFjZSBmb2xsb3dlZCBieSBIVAorCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICItc3BhY2UtYmVmb3JlLXRhYiIgJiYKKwllY2hvICIgCWZvbyAoKTsiID54ICYmCisJZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzcGFjZSBiZWZvcmUgdGFiIGluIGluZGVudCAoc3BhY2UtYmVmb3JlLXRhYjogb24pJyAnCisJIyBpbmRlbnQgY29udGFpbnMgc3BhY2UgZm9sbG93ZWQgYnkgSFQKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAic3BhY2UtYmVmb3JlLXRhYiIgJiYKKwllY2hvICIgCWZvbyAoKTsgICAiID54ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzcGFjZXMgYXMgaW5kZW50YXRpb24gKGluZGVudC13aXRoLW5vbi10YWI6IG9mZiknICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiLWluZGVudC13aXRoLW5vbi10YWIiICYmCisJZWNobyAiICAgICAgICBmb28gKCk7IiA+eCAmJgorCWdpdCBkaWZmIC0tY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BhY2VzIGFzIGluZGVudGF0aW9uIChpbmRlbnQtd2l0aC1ub24tdGFiOiBvbiknICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiaW5kZW50LXdpdGgtbm9uLXRhYiIgJiYKKwllY2hvICIgICAgICAgIGZvbyAoKTsiID54ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXR0bywgYnV0IHRhYndpZHRoPTknICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiaW5kZW50LXdpdGgtbm9uLXRhYix0YWJ3aWR0aD05IiAmJgorCWdpdCBkaWZmIC0tY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdGFicyBhbmQgc3BhY2VzIGFzIGluZGVudGF0aW9uIChpbmRlbnQtd2l0aC1ub24tdGFiOiBvbiknICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiaW5kZW50LXdpdGgtbm9uLXRhYiIgJiYKKwllY2hvICIJICAgICAgICAgICAgICAgIGZvbyAoKTsiID54ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXR0bywgYnV0IHRhYndpZHRoPTEwJyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgImluZGVudC13aXRoLW5vbi10YWIsdGFid2lkdGg9MTAiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXR0bywgYnV0IHRhYndpZHRoPTIwJyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgImluZGVudC13aXRoLW5vbi10YWIsdGFid2lkdGg9MjAiICYmCisJZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0YWJzIGFzIGluZGVudGF0aW9uICh0YWItaW4taW5kZW50OiBvZmYpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgIi10YWItaW4taW5kZW50IiAmJgorCWVjaG8gIglmb28gKCk7IiA+eCAmJgorCWdpdCBkaWZmIC0tY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdGFicyBhcyBpbmRlbnRhdGlvbiAodGFiLWluLWluZGVudDogb24pJyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgInRhYi1pbi1pbmRlbnQiICYmCisJZWNobyAiCWZvbyAoKTsiID54ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0YWJzIGFuZCBzcGFjZXMgYXMgaW5kZW50YXRpb24gKHRhYi1pbi1pbmRlbnQ6IG9uKScgJworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJ0YWItaW4taW5kZW50IiAmJgorCWVjaG8gIgkgICAgICAgICAgICAgICAgZm9vICgpOyIgPnggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpdHRvLCBidXQgdGFid2lkdGg9MSAobXVzdCBiZSBpcnJlbGV2YW50KScgJworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJ0YWItaW4taW5kZW50LHRhYndpZHRoPTEiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0YWItaW4taW5kZW50IGFuZCBpbmRlbnQtd2l0aC1ub24tdGFiIGNvbmZsaWN0JyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgInRhYi1pbi1pbmRlbnQsaW5kZW50LXdpdGgtbm9uLXRhYiIgJiYKKwllY2hvICJmb28gKCk7IiA+eCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdGFiLWluLWluZGVudCBleGNsdWRlZCBmcm9tIHdpbGRjYXJkIHdoaXRlc3BhY2UgYXR0cmlidXRlJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud2hpdGVzcGFjZSAmJgorCWVjaG8gInggd2hpdGVzcGFjZSIgPi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiCSAgZm9vICgpOyIgPnggJiYKKwlnaXQgZGlmZiAtLWNoZWNrICYmCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGluZSBudW1iZXJzIGluIC0tY2hlY2sgb3V0cHV0IGFyZSBjb3JyZWN0JyAnCisJZWNobyAiIiA+eCAmJgorCWVjaG8gImZvbygpOyAiID4+eCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sgPmNoZWNrICYmCisJZ3JlcCAieDoyOiIgY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tkaWZmIGRldGVjdHMgbmV3IHRyYWlsaW5nIGJsYW5rIGxpbmVzICgxKScgJworCWVjaG8gImZvbygpOyIgPnggJiYKKwllY2hvICIiID4+eCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sgPmNoZWNrICYmCisJZ3JlcCAibmV3IGJsYW5rIGxpbmUiIGNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrZGlmZiBkZXRlY3RzIG5ldyB0cmFpbGluZyBibGFuayBsaW5lcyAoMiknICcKKwl0ZXN0X3dyaXRlX2xpbmVzIGEgYiAiIiAiIiA+eCAmJgorCWdpdCBhZGQgeCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgYSAiIiAiIiAiIiAiIiA+eCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sgPmNoZWNrICYmCisJZ3JlcCAibmV3IGJsYW5rIGxpbmUiIGNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrZGlmZiBhbGxvd3MgbmV3IGJsYW5rIGxpbmVzJyAnCisJZ2l0IGNoZWNrb3V0IHggJiYKKwltdiB4IHkgJiYKKwkoCisJCWVjaG8gIi8qIFRoaXMgaXMgbmV3ICovIiAmJgorCQllY2hvICIiICYmCisJCWNhdCB5CisJKSA+eCAmJgorCWdpdCBkaWZmIC0tY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZS1vbmx5IGNoYW5nZXMgbm90IHJlcG9ydGVkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gPnggImhlbGxvIHdvcmxkIiAmJgorCWdpdCBhZGQgeCAmJgorCWdpdCBjb21taXQgLW0gImhlbGxvIDEiICYmCisJZWNobyA+eCAiaGVsbG8gIHdvcmxkIiAmJgorCWdpdCBkaWZmIC1iID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2Utb25seSBjaGFuZ2VzIHJlcG9ydGVkIGFjcm9zcyByZW5hbWVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBlY2hvICIkaSRpJGkkaSRpJGkiOyBkb25lID54ICYmCisJZ2l0IGFkZCB4ICYmCisJaGFzaF94PSQoZ2l0IGhhc2gtb2JqZWN0IHgpICYmCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkaGFzaF94IikgJiYKKwlnaXQgY29tbWl0IC1tICJiYXNlIiAmJgorCXNlZCAtZSAiNXMvXi8gLyIgeCA+eiAmJgorCWdpdCBybSB4ICYmCisJZ2l0IGFkZCB6ICYmCisJaGFzaF96PSQoZ2l0IGhhc2gtb2JqZWN0IHopICYmCisJYWZ0ZXI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRoYXNoX3oiKSAmJgorCWdpdCBkaWZmIC13IC1NIC0tY2FjaGVkID5hY3R1YWwucmF3ICYmCisJc2VkIC1lICIvXnNpbWlsYXJpdHkgaW5kZXggL3MvWzAtOV1bMC05XSovTlVNLyIgYWN0dWFsLnJhdyA+YWN0dWFsICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJZGlmZiAtLWdpdCBhL3ggYi96CisJc2ltaWxhcml0eSBpbmRleCBOVU0lCisJcmVuYW1lIGZyb20geAorCXJlbmFtZSB0byB6CisJaW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK2RpZmYgLS1naXQgYS9lbXB0eSBiL3ZvaWQKK3NpbWlsYXJpdHkgaW5kZXggMTAwJQorcmVuYW1lIGZyb20gZW1wdHkKK3JlbmFtZSB0byB2b2lkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGVtcHR5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5lbXB0eSAmJgorCWdpdCBhZGQgZW1wdHkgJiYKKwlnaXQgY29tbWl0IC1tIGVtcHR5ICYmCisJZ2l0IG12IGVtcHR5IHZvaWQgJiYKKwlnaXQgZGlmZiAtdyAtLWNhY2hlZCAtTSA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZWQgZGlmZiB3aXRoIGF1dG9jcmxmIGNvbnZlcnNpb24nICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvID54IGhlbGxvICYmCisJZ2l0IGNvbW1pdCAtbSAib25lIHNpZGUiIHggJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwllY2hvID54IGdvb2RieWUgJiYKKwlnaXQgY29tbWl0IC1tICJ0aGUgb3RoZXIgc2lkZSIgeCAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCisJZ2l0IGRpZmYgPmFjdHVhbC5yYXcgJiYKKwlzZWQgLWUgIjEsL15AQEAvZCIgYWN0dWFsLnJhdyA+YWN0dWFsICYmCisJISBncmVwICJeLSIgYWN0dWFsCisKKycKKworIyBTdGFydCB0ZXN0aW5nIHRoZSBjb2xvcmVkIGZvcm1hdCBmb3Igd2hpdGVzcGFjZSBjaGVja3MKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZGlmZiBjb2xvcnMnICcKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYucGxhaW4gbm9ybWFsICYmCisJZ2l0IGNvbmZpZyBjb2xvci5kaWZmLm1ldGEgYm9sZCAmJgorCWdpdCBjb25maWcgY29sb3IuZGlmZi5mcmFnIGN5YW4gJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYuZnVuYyBub3JtYWwgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYub2xkIHJlZCAmJgorCWdpdCBjb25maWcgY29sb3IuZGlmZi5uZXcgZ3JlZW4gJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYuY29tbWl0IHllbGxvdyAmJgorCWdpdCBjb25maWcgY29sb3IuZGlmZi53aGl0ZXNwYWNlIGJsdWUgJiYKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIHRoYXQgaW50cm9kdWNlcyBhIGxpbmUgd2l0aCBvbmx5IHRhYnMnICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSBibGFuay1hdC1lb2wgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyAidGVzdCIgPnggJiYKKwlvbGRfaGFzaF94PSQoZ2l0IGhhc2gtb2JqZWN0IHgpICYmCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkb2xkX2hhc2hfeCIpICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIgeCAmJgorCWVjaG8gIntOVE59IiB8IHRyICJOVCIgIlxuXHQiID4+eCAmJgorCW5ld19oYXNoX3g9JChnaXQgaGFzaC1vYmplY3QgeCkgJiYKKwlhZnRlcj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJG5ld19oYXNoX3giKSAmJgorCWdpdCBkaWZmIC0tY29sb3IgPmN1cnJlbnQucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGN1cnJlbnQucmF3ID5jdXJyZW50ICYmCisKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCTxCT0xEPmRpZmYgLS1naXQgYS94IGIveDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkYmVmb3JlLi4kYWZ0ZXIgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPi0tLSBhL3g8UkVTRVQ+CisJPEJPTEQ+KysrIGIveDxSRVNFVD4KKwk8Q1lBTj5AQCAtMSArMSw0IEBAPFJFU0VUPgorCSB0ZXN0PFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj57PFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPjxCTFVFPgk8UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPn08UkVTRVQ+CisJRU9GCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgdGhhdCBpbnRyb2R1Y2VzIGFuZCByZW1vdmVzIHdzIGJyZWFrYWdlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl7CisJCWVjaG8gIjAuIGJsYW5rLWF0LWVvbCAiICYmCisJCWVjaG8gIjEuIGJsYW5rLWF0LWVvbCAiCisJfSA+eCAmJgorCW9sZF9oYXNoX3g9JChnaXQgaGFzaC1vYmplY3QgeCkgJiYKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRvbGRfaGFzaF94IikgJiYKKwlnaXQgY29tbWl0IC1hIC0tYWxsb3ctZW1wdHkgLW0gcHJlaW1hZ2UgJiYKKwl7CisJCWVjaG8gIjAuIGJsYW5rLWF0LWVvbCAiICYmCisJCWVjaG8gIjEuIHN0aWxsLWJsYW5rLWF0LWVvbCAiICYmCisJCWVjaG8gIjIuIGFuZCBhIG5ldyBsaW5lICIKKwl9ID54ICYmCisJbmV3X2hhc2hfeD0kKGdpdCBoYXNoLW9iamVjdCB4KSAmJgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkbmV3X2hhc2hfeCIpICYmCisKKwlnaXQgZGlmZiAtLWNvbG9yID5jdXJyZW50LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxjdXJyZW50LnJhdyA+Y3VycmVudCAmJgorCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwk8Qk9MRD5kaWZmIC0tZ2l0IGEveCBiL3g8UkVTRVQ+CisJPEJPTEQ+aW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD4tLS0gYS94PFJFU0VUPgorCTxCT0xEPisrKyBiL3g8UkVTRVQ+CisJPENZQU4+QEAgLTEsMiArMSwzIEBAPFJFU0VUPgorCSAwLiBibGFuay1hdC1lb2wgPFJFU0VUPgorCTxSRUQ+LTEuIGJsYW5rLWF0LWVvbCA8UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPjEuIHN0aWxsLWJsYW5rLWF0LWVvbDxSRVNFVD48QkxVRT4gPFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj4yLiBhbmQgYSBuZXcgbGluZTxSRVNFVD48QkxVRT4gPFJFU0VUPgorCUVPRgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cy1lcnJvci1oaWdobGlnaHQgdGVzdCBzZXR1cCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXsKKwkJZWNobyAiMC4gYmxhbmstYXQtZW9sICIgJiYKKwkJZWNobyAiMS4gYmxhbmstYXQtZW9sICIKKwl9ID54ICYmCisJb2xkX2hhc2hfeD0kKGdpdCBoYXNoLW9iamVjdCB4KSAmJgorCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJG9sZF9oYXNoX3giKSAmJgorCWdpdCBjb21taXQgLWEgLS1hbGxvdy1lbXB0eSAtbSBwcmVpbWFnZSAmJgorCXsKKwkJZWNobyAiMC4gYmxhbmstYXQtZW9sICIgJiYKKwkJZWNobyAiMS4gc3RpbGwtYmxhbmstYXQtZW9sICIgJiYKKwkJZWNobyAiMi4gYW5kIGEgbmV3IGxpbmUgIgorCX0gPnggJiYKKwluZXdfaGFzaF94PSQoZ2l0IGhhc2gtb2JqZWN0IHgpICYmCisJYWZ0ZXI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRuZXdfaGFzaF94IikgJiYKKworCWNhdCA+ZXhwZWN0LmRlZmF1bHQtb2xkIDw8LUVPRiAmJgorCTxCT0xEPmRpZmYgLS1naXQgYS94IGIveDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkYmVmb3JlLi4kYWZ0ZXIgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPi0tLSBhL3g8UkVTRVQ+CisJPEJPTEQ+KysrIGIveDxSRVNFVD4KKwk8Q1lBTj5AQCAtMSwyICsxLDMgQEA8UkVTRVQ+CisJIDAuIGJsYW5rLWF0LWVvbCA8UkVTRVQ+CisJPFJFRD4tPFJFU0VUPjxSRUQ+MS4gYmxhbmstYXQtZW9sPFJFU0VUPjxCTFVFPiA8UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPjEuIHN0aWxsLWJsYW5rLWF0LWVvbDxSRVNFVD48QkxVRT4gPFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj4yLiBhbmQgYSBuZXcgbGluZTxSRVNFVD48QkxVRT4gPFJFU0VUPgorCUVPRgorCisJY2F0ID5leHBlY3QuYWxsIDw8LUVPRiAmJgorCTxCT0xEPmRpZmYgLS1naXQgYS94IGIveDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkYmVmb3JlLi4kYWZ0ZXIgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPi0tLSBhL3g8UkVTRVQ+CisJPEJPTEQ+KysrIGIveDxSRVNFVD4KKwk8Q1lBTj5AQCAtMSwyICsxLDMgQEA8UkVTRVQ+CisJIDxSRVNFVD4wLiBibGFuay1hdC1lb2w8UkVTRVQ+PEJMVUU+IDxSRVNFVD4KKwk8UkVEPi08UkVTRVQ+PFJFRD4xLiBibGFuay1hdC1lb2w8UkVTRVQ+PEJMVUU+IDxSRVNFVD4KKwk8R1JFRU4+KzxSRVNFVD48R1JFRU4+MS4gc3RpbGwtYmxhbmstYXQtZW9sPFJFU0VUPjxCTFVFPiA8UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPjIuIGFuZCBhIG5ldyBsaW5lPFJFU0VUPjxCTFVFPiA8UkVTRVQ+CisJRU9GCisKKwljYXQgPmV4cGVjdC5ub25lIDw8LUVPRgorCTxCT0xEPmRpZmYgLS1naXQgYS94IGIveDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkYmVmb3JlLi4kYWZ0ZXIgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPi0tLSBhL3g8UkVTRVQ+CisJPEJPTEQ+KysrIGIveDxSRVNFVD4KKwk8Q1lBTj5AQCAtMSwyICsxLDMgQEA8UkVTRVQ+CisJIDAuIGJsYW5rLWF0LWVvbCA8UkVTRVQ+CisJPFJFRD4tMS4gYmxhbmstYXQtZW9sIDxSRVNFVD4KKwk8R1JFRU4+KzEuIHN0aWxsLWJsYW5rLWF0LWVvbCA8UkVTRVQ+CisJPEdSRUVOPisyLiBhbmQgYSBuZXcgbGluZSA8UkVTRVQ+CisJRU9GCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXdzLWVycm9yLWhpZ2hsaWdodCBvcHRpb24nICcKKworCWdpdCBkaWZmIC0tY29sb3IgLS13cy1lcnJvci1oaWdobGlnaHQ9ZGVmYXVsdCxvbGQgPmN1cnJlbnQucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGN1cnJlbnQucmF3ID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LmRlZmF1bHQtb2xkIGN1cnJlbnQgJiYKKworCWdpdCBkaWZmIC0tY29sb3IgLS13cy1lcnJvci1oaWdobGlnaHQ9YWxsID5jdXJyZW50LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxjdXJyZW50LnJhdyA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5hbGwgY3VycmVudCAmJgorCisJZ2l0IGRpZmYgLS1jb2xvciAtLXdzLWVycm9yLWhpZ2hsaWdodD1ub25lID5jdXJyZW50LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxjdXJyZW50LnJhdyA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5ub25lIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRpZmYud3NFcnJvckhpZ2hsaWdodCBjb25maWcnICcKKworCWdpdCAtYyBkaWZmLndzRXJyb3JIaWdobGlnaHQ9ZGVmYXVsdCxvbGQgZGlmZiAtLWNvbG9yID5jdXJyZW50LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxjdXJyZW50LnJhdyA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5kZWZhdWx0LW9sZCBjdXJyZW50ICYmCisKKwlnaXQgLWMgZGlmZi53c0Vycm9ySGlnaGxpZ2h0PWFsbCBkaWZmIC0tY29sb3IgPmN1cnJlbnQucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGN1cnJlbnQucmF3ID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LmFsbCBjdXJyZW50ICYmCisKKwlnaXQgLWMgZGlmZi53c0Vycm9ySGlnaGxpZ2h0PW5vbmUgZGlmZiAtLWNvbG9yID5jdXJyZW50LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxjdXJyZW50LnJhdyA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5ub25lIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvcHRpb24gb3ZlcnJpZGVzIGRpZmYud3NFcnJvckhpZ2hsaWdodCcgJworCisJZ2l0IC1jIGRpZmYud3NFcnJvckhpZ2hsaWdodD1ub25lIFwKKwkJZGlmZiAtLWNvbG9yIC0td3MtZXJyb3ItaGlnaGxpZ2h0PWRlZmF1bHQsb2xkID5jdXJyZW50LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxjdXJyZW50LnJhdyA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5kZWZhdWx0LW9sZCBjdXJyZW50ICYmCisKKwlnaXQgLWMgZGlmZi53c0Vycm9ySGlnaGxpZ2h0PWRlZmF1bHQgXAorCQlkaWZmIC0tY29sb3IgLS13cy1lcnJvci1oaWdobGlnaHQ9YWxsID5jdXJyZW50LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxjdXJyZW50LnJhdyA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5hbGwgY3VycmVudCAmJgorCisJZ2l0IC1jIGRpZmYud3NFcnJvckhpZ2hsaWdodD1hbGwgXAorCQlkaWZmIC0tY29sb3IgLS13cy1lcnJvci1oaWdobGlnaHQ9bm9uZSA+Y3VycmVudC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8Y3VycmVudC5yYXcgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qubm9uZSBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IG1vdmVkIGNvZGUsIGNvbXBsZXRlIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2F0IDw8LVxFT0YgPnRlc3QuYyAmJgorCSNpbmNsdWRlPHN0ZGlvLmg+CisJbWFpbigpCisJeworCXByaW50ZigiSGVsbG8gV29ybGQiKTsKKwl9CisJRU9GCisJZ2l0IGFkZCB0ZXN0LmMgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbWFpbiBmdW5jdGlvbiIgJiYKKwlmaWxlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6dGVzdC5jKSAmJgorCWdpdCBtdiB0ZXN0LmMgbWFpbi5jICYmCisJdGVzdF9jb25maWcgY29sb3IuZGlmZi5vbGRNb3ZlZCAibm9ybWFsIHJlZCIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm5ld01vdmVkICJub3JtYWwgZ3JlZW4iICYmCisJZ2l0IGRpZmYgSEVBRCAtLWNvbG9yLW1vdmVkPXplYnJhIC0tY29sb3IgLS1uby1yZW5hbWVzID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJPEJPTEQ+ZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYzxSRVNFVD4KKwk8Qk9MRD5uZXcgZmlsZSBtb2RlIDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAwMDAwMDAwLi4kZmlsZTxSRVNFVD4KKwk8Qk9MRD4tLS0gL2Rldi9udWxsPFJFU0VUPgorCTxCT0xEPisrKyBiL21haW4uYzxSRVNFVD4KKwk8Q1lBTj5AQCAtMCwwICsxLDUgQEA8UkVTRVQ+CisJPEJHUkVFTj4rPFJFU0VUPjxCR1JFRU4+I2luY2x1ZGU8c3RkaW8uaD48UkVTRVQ+CisJPEJHUkVFTj4rPFJFU0VUPjxCR1JFRU4+bWFpbigpPFJFU0VUPgorCTxCR1JFRU4+KzxSRVNFVD48QkdSRUVOPns8UkVTRVQ+CisJPEJHUkVFTj4rPFJFU0VUPjxCR1JFRU4+cHJpbnRmKCJIZWxsbyBXb3JsZCIpOzxSRVNFVD4KKwk8QkdSRUVOPis8UkVTRVQ+PEJHUkVFTj59PFJFU0VUPgorCTxCT0xEPmRpZmYgLS1naXQgYS90ZXN0LmMgYi90ZXN0LmM8UkVTRVQ+CisJPEJPTEQ+ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRmaWxlLi4wMDAwMDAwPFJFU0VUPgorCTxCT0xEPi0tLSBhL3Rlc3QuYzxSRVNFVD4KKwk8Qk9MRD4rKysgL2Rldi9udWxsPFJFU0VUPgorCTxDWUFOPkBAIC0xLDUgKzAsMCBAQDxSRVNFVD4KKwk8QlJFRD4tI2luY2x1ZGU8c3RkaW8uaD48UkVTRVQ+CisJPEJSRUQ+LW1haW4oKTxSRVNFVD4KKwk8QlJFRD4tezxSRVNFVD4KKwk8QlJFRD4tcHJpbnRmKCJIZWxsbyBXb3JsZCIpOzxSRVNFVD4KKwk8QlJFRD4tfTxSRVNFVD4KKwlFT0YKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgbWFsaWNpb3VzIG1vdmVkIGNvZGUsIGluc2lkZSBmaWxlJyAnCisJdGVzdF9jb25maWcgY29sb3IuZGlmZi5vbGRNb3ZlZCAibm9ybWFsIHJlZCIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm5ld01vdmVkICJub3JtYWwgZ3JlZW4iICYmCisJdGVzdF9jb25maWcgY29sb3IuZGlmZi5vbGRNb3ZlZEFsdGVybmF0aXZlICJibHVlIiAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmRpZmYubmV3TW92ZWRBbHRlcm5hdGl2ZSAieWVsbG93IiAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwljYXQgPDwtXEVPRiA+bWFpbi5jICYmCisJCSNpbmNsdWRlPHN0ZGlvLmg+CisJCWludCBzdHVmZigpCisJCXsKKwkJCXByaW50ZigiSGVsbG8gIik7CisJCQlwcmludGYoIldvcmxkXG4iKTsKKwkJfQorCisJCWludCBzZWN1cmVfZm9vKHN0cnVjdCB1c2VyICp1KQorCQl7CisJCQlpZiAoIXUtPmlzX2FsbG93ZWRfZm9vKQorCQkJCXJldHVybjsKKwkJCWZvbyh1KTsKKwkJfQorCisJCWludCBtYWluKCkKKwkJeworCQkJZm9vKCk7CisJCX0KKwlFT0YKKwljYXQgPDwtXEVPRiA+dGVzdC5jICYmCisJCSNpbmNsdWRlPHN0ZGlvLmg+CisJCWludCBiYXIoKQorCQl7CisJCQlwcmludGYoIkhlbGxvIFdvcmxkLCBidXQgZGlmZmVyZW50XG4iKTsKKwkJfQorCisJCWludCBhbm90aGVyX2Z1bmN0aW9uKCkKKwkJeworCQkJYmFyKCk7CisJCX0KKwlFT0YKKwlnaXQgYWRkIG1haW4uYyB0ZXN0LmMgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbWFpbiBhbmQgdGVzdCBmaWxlIiAmJgorCWJlZm9yZV9tYWluPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6bWFpbi5jKSAmJgorCWJlZm9yZV90ZXN0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6dGVzdC5jKSAmJgorCWNhdCA8PC1cRU9GID5tYWluLmMgJiYKKwkJI2luY2x1ZGU8c3RkaW8uaD4KKwkJaW50IHN0dWZmKCkKKwkJeworCQkJcHJpbnRmKCJIZWxsbyAiKTsKKwkJCXByaW50ZigiV29ybGRcbiIpOworCQl9CisKKwkJaW50IG1haW4oKQorCQl7CisJCQlmb28oKTsKKwkJfQorCUVPRgorCWNhdCA8PC1cRU9GID50ZXN0LmMgJiYKKwkJI2luY2x1ZGU8c3RkaW8uaD4KKwkJaW50IGJhcigpCisJCXsKKwkJCXByaW50ZigiSGVsbG8gV29ybGQsIGJ1dCBkaWZmZXJlbnRcbiIpOworCQl9CisKKwkJaW50IHNlY3VyZV9mb28oc3RydWN0IHVzZXIgKnUpCisJCXsKKwkJCWZvbyh1KTsKKwkJCWlmICghdS0+aXNfYWxsb3dlZF9mb28pCisJCQkJcmV0dXJuOworCQl9CisKKwkJaW50IGFub3RoZXJfZnVuY3Rpb24oKQorCQl7CisJCQliYXIoKTsKKwkJfQorCUVPRgorCWhhc2hfbWFpbj0kKGdpdCBoYXNoLW9iamVjdCBtYWluLmMpICYmCisJYWZ0ZXJfbWFpbj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJGhhc2hfbWFpbiIpICYmCisJaGFzaF90ZXN0PSQoZ2l0IGhhc2gtb2JqZWN0IHRlc3QuYykgJiYKKwlhZnRlcl90ZXN0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkaGFzaF90ZXN0IikgJiYKKwlnaXQgZGlmZiBIRUFEIC0tbm8tcmVuYW1lcyAtLWNvbG9yLW1vdmVkPXplYnJhIC0tY29sb3IgPmFjdHVhbC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwk8Qk9MRD5kaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jPFJFU0VUPgorCTxCT0xEPmluZGV4ICRiZWZvcmVfbWFpbi4uJGFmdGVyX21haW4gMTAwNjQ0PFJFU0VUPgorCTxCT0xEPi0tLSBhL21haW4uYzxSRVNFVD4KKwk8Qk9MRD4rKysgYi9tYWluLmM8UkVTRVQ+CisJPENZQU4+QEAgLTUsMTMgKzUsNiBAQDxSRVNFVD4gPFJFU0VUPnByaW50ZigiSGVsbG8gIik7PFJFU0VUPgorCSBwcmludGYoIldvcmxkXG4iKTs8UkVTRVQ+CisJIH08UkVTRVQ+CisJIDxSRVNFVD4KKwk8QlJFRD4taW50IHNlY3VyZV9mb28oc3RydWN0IHVzZXIgKnUpPFJFU0VUPgorCTxCUkVEPi17PFJFU0VUPgorCTxCTFVFPi1pZiAoIXUtPmlzX2FsbG93ZWRfZm9vKTxSRVNFVD4KKwk8QkxVRT4tcmV0dXJuOzxSRVNFVD4KKwk8UkVEPi1mb28odSk7PFJFU0VUPgorCTxSRUQ+LX08UkVTRVQ+CisJPFJFRD4tPFJFU0VUPgorCSBpbnQgbWFpbigpPFJFU0VUPgorCSB7PFJFU0VUPgorCSBmb28oKTs8UkVTRVQ+CisJPEJPTEQ+ZGlmZiAtLWdpdCBhL3Rlc3QuYyBiL3Rlc3QuYzxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkYmVmb3JlX3Rlc3QuLiRhZnRlcl90ZXN0IDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD4tLS0gYS90ZXN0LmM8UkVTRVQ+CisJPEJPTEQ+KysrIGIvdGVzdC5jPFJFU0VUPgorCTxDWUFOPkBAIC00LDYgKzQsMTMgQEA8UkVTRVQ+IDxSRVNFVD5pbnQgYmFyKCk8UkVTRVQ+CisJIHByaW50ZigiSGVsbG8gV29ybGQsIGJ1dCBkaWZmZXJlbnRcbiIpOzxSRVNFVD4KKwkgfTxSRVNFVD4KKwkgPFJFU0VUPgorCTxCR1JFRU4+KzxSRVNFVD48QkdSRUVOPmludCBzZWN1cmVfZm9vKHN0cnVjdCB1c2VyICp1KTxSRVNFVD4KKwk8QkdSRUVOPis8UkVTRVQ+PEJHUkVFTj57PFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj5mb28odSk7PFJFU0VUPgorCTxCR1JFRU4+KzxSRVNFVD48QkdSRUVOPmlmICghdS0+aXNfYWxsb3dlZF9mb28pPFJFU0VUPgorCTxCR1JFRU4+KzxSRVNFVD48QkdSRUVOPnJldHVybjs8UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPn08UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+CisJIGludCBhbm90aGVyX2Z1bmN0aW9uKCk8UkVTRVQ+CisJIHs8UkVTRVQ+CisJIGJhcigpOzxSRVNFVD4KKwlFT0YKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFpbiBtb3ZlZCBjb2RlLCBpbnNpZGUgZmlsZScgJworCXRlc3RfY29uZmlnIGNvbG9yLmRpZmYub2xkTW92ZWQgIm5vcm1hbCByZWQiICYmCisJdGVzdF9jb25maWcgY29sb3IuZGlmZi5uZXdNb3ZlZCAibm9ybWFsIGdyZWVuIiAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmRpZmYub2xkTW92ZWRBbHRlcm5hdGl2ZSAiYmx1ZSIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm5ld01vdmVkQWx0ZXJuYXRpdmUgInllbGxvdyIgJiYKKwkjIG5lZWRzIHByZXZpb3VzIHRlc3QgYXMgc2V0dXAKKwlnaXQgZGlmZiBIRUFEIC0tbm8tcmVuYW1lcyAtLWNvbG9yLW1vdmVkPXBsYWluIC0tY29sb3IgPmFjdHVhbC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwk8Qk9MRD5kaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jPFJFU0VUPgorCTxCT0xEPmluZGV4ICRiZWZvcmVfbWFpbi4uJGFmdGVyX21haW4gMTAwNjQ0PFJFU0VUPgorCTxCT0xEPi0tLSBhL21haW4uYzxSRVNFVD4KKwk8Qk9MRD4rKysgYi9tYWluLmM8UkVTRVQ+CisJPENZQU4+QEAgLTUsMTMgKzUsNiBAQDxSRVNFVD4gPFJFU0VUPnByaW50ZigiSGVsbG8gIik7PFJFU0VUPgorCSBwcmludGYoIldvcmxkXG4iKTs8UkVTRVQ+CisJIH08UkVTRVQ+CisJIDxSRVNFVD4KKwk8QlJFRD4taW50IHNlY3VyZV9mb28oc3RydWN0IHVzZXIgKnUpPFJFU0VUPgorCTxCUkVEPi17PFJFU0VUPgorCTxCUkVEPi1pZiAoIXUtPmlzX2FsbG93ZWRfZm9vKTxSRVNFVD4KKwk8QlJFRD4tcmV0dXJuOzxSRVNFVD4KKwk8QlJFRD4tZm9vKHUpOzxSRVNFVD4KKwk8QlJFRD4tfTxSRVNFVD4KKwk8QlJFRD4tPFJFU0VUPgorCSBpbnQgbWFpbigpPFJFU0VUPgorCSB7PFJFU0VUPgorCSBmb28oKTs8UkVTRVQ+CisJPEJPTEQ+ZGlmZiAtLWdpdCBhL3Rlc3QuYyBiL3Rlc3QuYzxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkYmVmb3JlX3Rlc3QuLiRhZnRlcl90ZXN0IDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD4tLS0gYS90ZXN0LmM8UkVTRVQ+CisJPEJPTEQ+KysrIGIvdGVzdC5jPFJFU0VUPgorCTxDWUFOPkBAIC00LDYgKzQsMTMgQEA8UkVTRVQ+IDxSRVNFVD5pbnQgYmFyKCk8UkVTRVQ+CisJIHByaW50ZigiSGVsbG8gV29ybGQsIGJ1dCBkaWZmZXJlbnRcbiIpOzxSRVNFVD4KKwkgfTxSRVNFVD4KKwkgPFJFU0VUPgorCTxCR1JFRU4+KzxSRVNFVD48QkdSRUVOPmludCBzZWN1cmVfZm9vKHN0cnVjdCB1c2VyICp1KTxSRVNFVD4KKwk8QkdSRUVOPis8UkVTRVQ+PEJHUkVFTj57PFJFU0VUPgorCTxCR1JFRU4+KzxSRVNFVD48QkdSRUVOPmZvbyh1KTs8UkVTRVQ+CisJPEJHUkVFTj4rPFJFU0VUPjxCR1JFRU4+aWYgKCF1LT5pc19hbGxvd2VkX2Zvbyk8UkVTRVQ+CisJPEJHUkVFTj4rPFJFU0VUPjxCR1JFRU4+cmV0dXJuOzxSRVNFVD4KKwk8QkdSRUVOPis8UkVTRVQ+PEJHUkVFTj59PFJFU0VUPgorCTxCR1JFRU4+KzxSRVNFVD4KKwkgaW50IGFub3RoZXJfZnVuY3Rpb24oKTxSRVNFVD4KKwkgezxSRVNFVD4KKwkgYmFyKCk7PFJFU0VUPgorCUVPRgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBibG9ja3Mgb2YgbW92ZWQgY29kZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwljYXQgPDwtXEVPRiA+bGluZXMudHh0ICYmCisJCWxvbmcgbGluZSAxCisJCWxvbmcgbGluZSAyCisJCWxvbmcgbGluZSAzCisJCWxpbmUgNAorCQlsaW5lIDUKKwkJbGluZSA2CisJCWxpbmUgNworCQlsaW5lIDgKKwkJbGluZSA5CisJCWxpbmUgMTAKKwkJbGluZSAxMQorCQlsaW5lIDEyCisJCWxpbmUgMTMKKwkJbG9uZyBsaW5lIDE0CisJCWxvbmcgbGluZSAxNQorCQlsb25nIGxpbmUgMTYKKwlFT0YKKwlnaXQgYWRkIGxpbmVzLnR4dCAmJgorCWdpdCBjb21taXQgLW0gImFkZCBwb2V0cnkiICYmCisJY2F0IDw8LVxFT0YgPmxpbmVzLnR4dCAmJgorCQlsaW5lIDQKKwkJbGluZSA1CisJCWxpbmUgNgorCQlsaW5lIDcKKwkJbGluZSA4CisJCWxpbmUgOQorCQlsb25nIGxpbmUgMQorCQlsb25nIGxpbmUgMgorCQlsb25nIGxpbmUgMworCQlsb25nIGxpbmUgMTQKKwkJbG9uZyBsaW5lIDE1CisJCWxvbmcgbGluZSAxNgorCQlsaW5lIDEwCisJCWxpbmUgMTEKKwkJbGluZSAxMgorCQlsaW5lIDEzCisJRU9GCisJdGVzdF9jb25maWcgY29sb3IuZGlmZi5vbGRNb3ZlZCAibWFnZW50YSIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm5ld01vdmVkICJjeWFuIiAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmRpZmYub2xkTW92ZWRBbHRlcm5hdGl2ZSAiYmx1ZSIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm5ld01vdmVkQWx0ZXJuYXRpdmUgInllbGxvdyIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm9sZE1vdmVkRGltbWVkICJub3JtYWwgbWFnZW50YSIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm5ld01vdmVkRGltbWVkICJub3JtYWwgY3lhbiIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm9sZE1vdmVkQWx0ZXJuYXRpdmVEaW1tZWQgIm5vcm1hbCBibHVlIiAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmRpZmYubmV3TW92ZWRBbHRlcm5hdGl2ZURpbW1lZCAibm9ybWFsIHllbGxvdyIgJiYKKwlnaXQgZGlmZiBIRUFEIC0tbm8tcmVuYW1lcyAtLWNvbG9yLW1vdmVkPWJsb2NrcyAtLWNvbG9yID5hY3R1YWwucmF3ICYmCisJZ3JlcCAtdiAiaW5kZXgiIGFjdHVhbC5yYXcgfCB0ZXN0X2RlY29kZV9jb2xvciA+YWN0dWFsICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJPEJPTEQ+ZGlmZiAtLWdpdCBhL2xpbmVzLnR4dCBiL2xpbmVzLnR4dDxSRVNFVD4KKwk8Qk9MRD4tLS0gYS9saW5lcy50eHQ8UkVTRVQ+CisJPEJPTEQ+KysrIGIvbGluZXMudHh0PFJFU0VUPgorCTxDWUFOPkBAIC0xLDE2ICsxLDE2IEBAPFJFU0VUPgorCTxNQUdFTlRBPi1sb25nIGxpbmUgMTxSRVNFVD4KKwk8TUFHRU5UQT4tbG9uZyBsaW5lIDI8UkVTRVQ+CisJPE1BR0VOVEE+LWxvbmcgbGluZSAzPFJFU0VUPgorCSBsaW5lIDQ8UkVTRVQ+CisJIGxpbmUgNTxSRVNFVD4KKwkgbGluZSA2PFJFU0VUPgorCSBsaW5lIDc8UkVTRVQ+CisJIGxpbmUgODxSRVNFVD4KKwkgbGluZSA5PFJFU0VUPgorCTxDWUFOPis8UkVTRVQ+PENZQU4+bG9uZyBsaW5lIDE8UkVTRVQ+CisJPENZQU4+KzxSRVNFVD48Q1lBTj5sb25nIGxpbmUgMjxSRVNFVD4KKwk8Q1lBTj4rPFJFU0VUPjxDWUFOPmxvbmcgbGluZSAzPFJFU0VUPgorCTxDWUFOPis8UkVTRVQ+PENZQU4+bG9uZyBsaW5lIDE0PFJFU0VUPgorCTxDWUFOPis8UkVTRVQ+PENZQU4+bG9uZyBsaW5lIDE1PFJFU0VUPgorCTxDWUFOPis8UkVTRVQ+PENZQU4+bG9uZyBsaW5lIDE2PFJFU0VUPgorCSBsaW5lIDEwPFJFU0VUPgorCSBsaW5lIDExPFJFU0VUPgorCSBsaW5lIDEyPFJFU0VUPgorCSBsaW5lIDEzPFJFU0VUPgorCTxNQUdFTlRBPi1sb25nIGxpbmUgMTQ8UkVTRVQ+CisJPE1BR0VOVEE+LWxvbmcgbGluZSAxNTxSRVNFVD4KKwk8TUFHRU5UQT4tbG9uZyBsaW5lIDE2PFJFU0VUPgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBwZXJtdXRhdGlvbnMgaW5zaWRlIG1vdmVkIGNvZGUgLS0gZGltbWVkLXplYnJhJyAnCisJIyByZXVzZSBzZXR1cCBmcm9tIHRlc3QgYmVmb3JlIQorCXRlc3RfY29uZmlnIGNvbG9yLmRpZmYub2xkTW92ZWQgIm1hZ2VudGEiICYmCisJdGVzdF9jb25maWcgY29sb3IuZGlmZi5uZXdNb3ZlZCAiY3lhbiIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm9sZE1vdmVkQWx0ZXJuYXRpdmUgImJsdWUiICYmCisJdGVzdF9jb25maWcgY29sb3IuZGlmZi5uZXdNb3ZlZEFsdGVybmF0aXZlICJ5ZWxsb3ciICYmCisJdGVzdF9jb25maWcgY29sb3IuZGlmZi5vbGRNb3ZlZERpbW1lZCAibm9ybWFsIG1hZ2VudGEiICYmCisJdGVzdF9jb25maWcgY29sb3IuZGlmZi5uZXdNb3ZlZERpbW1lZCAibm9ybWFsIGN5YW4iICYmCisJdGVzdF9jb25maWcgY29sb3IuZGlmZi5vbGRNb3ZlZEFsdGVybmF0aXZlRGltbWVkICJub3JtYWwgYmx1ZSIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm5ld01vdmVkQWx0ZXJuYXRpdmVEaW1tZWQgIm5vcm1hbCB5ZWxsb3ciICYmCisJZ2l0IGRpZmYgSEVBRCAtLW5vLXJlbmFtZXMgLS1jb2xvci1tb3ZlZD1kaW1tZWQtemVicmEgLS1jb2xvciA+YWN0dWFsLnJhdyAmJgorCWdyZXAgLXYgImluZGV4IiBhY3R1YWwucmF3IHwgdGVzdF9kZWNvZGVfY29sb3IgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCTxCT0xEPmRpZmYgLS1naXQgYS9saW5lcy50eHQgYi9saW5lcy50eHQ8UkVTRVQ+CisJPEJPTEQ+LS0tIGEvbGluZXMudHh0PFJFU0VUPgorCTxCT0xEPisrKyBiL2xpbmVzLnR4dDxSRVNFVD4KKwk8Q1lBTj5AQCAtMSwxNiArMSwxNiBAQDxSRVNFVD4KKwk8Qk1BR0VOVEE+LWxvbmcgbGluZSAxPFJFU0VUPgorCTxCTUFHRU5UQT4tbG9uZyBsaW5lIDI8UkVTRVQ+CisJPEJNQUdFTlRBPi1sb25nIGxpbmUgMzxSRVNFVD4KKwkgbGluZSA0PFJFU0VUPgorCSBsaW5lIDU8UkVTRVQ+CisJIGxpbmUgNjxSRVNFVD4KKwkgbGluZSA3PFJFU0VUPgorCSBsaW5lIDg8UkVTRVQ+CisJIGxpbmUgOTxSRVNFVD4KKwk8QkNZQU4+KzxSRVNFVD48QkNZQU4+bG9uZyBsaW5lIDE8UkVTRVQ+CisJPEJDWUFOPis8UkVTRVQ+PEJDWUFOPmxvbmcgbGluZSAyPFJFU0VUPgorCTxDWUFOPis8UkVTRVQ+PENZQU4+bG9uZyBsaW5lIDM8UkVTRVQ+CisJPFlFTExPVz4rPFJFU0VUPjxZRUxMT1c+bG9uZyBsaW5lIDE0PFJFU0VUPgorCTxCWUVMTE9XPis8UkVTRVQ+PEJZRUxMT1c+bG9uZyBsaW5lIDE1PFJFU0VUPgorCTxCWUVMTE9XPis8UkVTRVQ+PEJZRUxMT1c+bG9uZyBsaW5lIDE2PFJFU0VUPgorCSBsaW5lIDEwPFJFU0VUPgorCSBsaW5lIDExPFJFU0VUPgorCSBsaW5lIDEyPFJFU0VUPgorCSBsaW5lIDEzPFJFU0VUPgorCTxCTUFHRU5UQT4tbG9uZyBsaW5lIDE0PFJFU0VUPgorCTxCTUFHRU5UQT4tbG9uZyBsaW5lIDE1PFJFU0VUPgorCTxCTUFHRU5UQT4tbG9uZyBsaW5lIDE2PFJFU0VUPgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbWQgb3B0aW9uIGFzc3VtZXMgY29uZmlndXJlZCBjb2xvcmVkLW1vdmVkJyAnCisJdGVzdF9jb25maWcgY29sb3IuZGlmZi5vbGRNb3ZlZCAibWFnZW50YSIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm5ld01vdmVkICJjeWFuIiAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmRpZmYub2xkTW92ZWRBbHRlcm5hdGl2ZSAiYmx1ZSIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm5ld01vdmVkQWx0ZXJuYXRpdmUgInllbGxvdyIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm9sZE1vdmVkRGltbWVkICJub3JtYWwgbWFnZW50YSIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm5ld01vdmVkRGltbWVkICJub3JtYWwgY3lhbiIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm9sZE1vdmVkQWx0ZXJuYXRpdmVEaW1tZWQgIm5vcm1hbCBibHVlIiAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmRpZmYubmV3TW92ZWRBbHRlcm5hdGl2ZURpbW1lZCAibm9ybWFsIHllbGxvdyIgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLmNvbG9yTW92ZWQgemVicmEgJiYKKwlnaXQgZGlmZiBIRUFEIC0tbm8tcmVuYW1lcyAtLWNvbG9yLW1vdmVkIC0tY29sb3IgPmFjdHVhbC5yYXcgJiYKKwlncmVwIC12ICJpbmRleCIgYWN0dWFsLnJhdyB8IHRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwk8Qk9MRD5kaWZmIC0tZ2l0IGEvbGluZXMudHh0IGIvbGluZXMudHh0PFJFU0VUPgorCTxCT0xEPi0tLSBhL2xpbmVzLnR4dDxSRVNFVD4KKwk8Qk9MRD4rKysgYi9saW5lcy50eHQ8UkVTRVQ+CisJPENZQU4+QEAgLTEsMTYgKzEsMTYgQEA8UkVTRVQ+CisJPE1BR0VOVEE+LWxvbmcgbGluZSAxPFJFU0VUPgorCTxNQUdFTlRBPi1sb25nIGxpbmUgMjxSRVNFVD4KKwk8TUFHRU5UQT4tbG9uZyBsaW5lIDM8UkVTRVQ+CisJIGxpbmUgNDxSRVNFVD4KKwkgbGluZSA1PFJFU0VUPgorCSBsaW5lIDY8UkVTRVQ+CisJIGxpbmUgNzxSRVNFVD4KKwkgbGluZSA4PFJFU0VUPgorCSBsaW5lIDk8UkVTRVQ+CisJPENZQU4+KzxSRVNFVD48Q1lBTj5sb25nIGxpbmUgMTxSRVNFVD4KKwk8Q1lBTj4rPFJFU0VUPjxDWUFOPmxvbmcgbGluZSAyPFJFU0VUPgorCTxDWUFOPis8UkVTRVQ+PENZQU4+bG9uZyBsaW5lIDM8UkVTRVQ+CisJPFlFTExPVz4rPFJFU0VUPjxZRUxMT1c+bG9uZyBsaW5lIDE0PFJFU0VUPgorCTxZRUxMT1c+KzxSRVNFVD48WUVMTE9XPmxvbmcgbGluZSAxNTxSRVNFVD4KKwk8WUVMTE9XPis8UkVTRVQ+PFlFTExPVz5sb25nIGxpbmUgMTY8UkVTRVQ+CisJIGxpbmUgMTA8UkVTRVQ+CisJIGxpbmUgMTE8UkVTRVQ+CisJIGxpbmUgMTI8UkVTRVQ+CisJIGxpbmUgMTM8UkVTRVQ+CisJPE1BR0VOVEE+LWxvbmcgbGluZSAxNDxSRVNFVD4KKwk8TUFHRU5UQT4tbG9uZyBsaW5lIDE1PFJFU0VUPgorCTxNQUdFTlRBPi1sb25nIGxpbmUgMTY8UkVTRVQ+CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGVmZmVjdCBmcm9tIC0tY29sb3ItbW92ZWQgd2l0aCAtLXdvcmQtZGlmZicgJworCWNhdCA8PC1cRU9GID50ZXh0LnR4dCAmJgorCUxvcmVtIElwc3VtIGlzIHNpbXBseSBkdW1teSB0ZXh0IG9mIHRoZSBwcmludGluZyBhbmQgdHlwZXNldHRpbmcgaW5kdXN0cnkuCisJRU9GCisJZ2l0IGFkZCB0ZXh0LnR4dCAmJgorCWdpdCBjb21taXQgLWEgLW0gImNsZWFuIHN0YXRlIiAmJgorCWNhdCA8PC1cRU9GID50ZXh0LnR4dCAmJgorCXNpbXBseSBMb3JlbSBJcHN1bSBkdW1teSBpcyB0ZXh0IG9mIHRoZSB0eXBlc2V0dGluZyBhbmQgcHJpbnRpbmcgaW5kdXN0cnkuCisJRU9GCisJZ2l0IGRpZmYgLS1jb2xvci1tb3ZlZCAtLXdvcmQtZGlmZiA+YWN0dWFsICYmCisJZ2l0IGRpZmYgLS13b3JkLWRpZmYgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHdoaXRlc3BhY2UgdGVzdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJIyBOb3RlIHRoYXQgdGhlc2UgbGluZXMgaGF2ZSBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UuCisJY2F0IDw8LVxFT0YgPmxpbmVzLnR4dCAmJgorCWxpbmUgMQorCWxpbmUgMgorCWxpbmUgMworCWxpbmUgNAorCWxpbmUgNQorCWxvbmcgbGluZSA2CisJbG9uZyBsaW5lIDcKKwlsb25nIGxpbmUgOAorCWxvbmcgbGluZSA5CisJRU9GCisJZ2l0IGFkZCBsaW5lcy50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgcG9ldHJ5IiAmJgorCWdpdCBjb25maWcgY29sb3IuZGlmZi5vbGRNb3ZlZCAibWFnZW50YSIgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYubmV3TW92ZWQgImN5YW4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmUgZGV0ZWN0aW9uIGlnbm9yaW5nIHdoaXRlc3BhY2UgJyAnCisJcV90b190YWIgPDwtXEVPRiA+bGluZXMudHh0ICYmCisJUWxvbmcgbGluZSA2CisJUWxvbmcgbGluZSA3CisJUWxvbmcgbGluZSA4CisJUWNoYW5nZWQgbG9uZyBsaW5lIDkKKwlsaW5lIDEKKwlsaW5lIDIKKwlsaW5lIDMKKwlsaW5lIDQKKwlsaW5lIDUKKwlFT0YKKwlnaXQgZGlmZiBIRUFEIC0tbm8tcmVuYW1lcyAtLWNvbG9yLW1vdmVkIC0tY29sb3IgPmFjdHVhbC5yYXcgJiYKKwlncmVwIC12ICJpbmRleCIgYWN0dWFsLnJhdyB8IHRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwk8Qk9MRD5kaWZmIC0tZ2l0IGEvbGluZXMudHh0IGIvbGluZXMudHh0PFJFU0VUPgorCTxCT0xEPi0tLSBhL2xpbmVzLnR4dDxSRVNFVD4KKwk8Qk9MRD4rKysgYi9saW5lcy50eHQ8UkVTRVQ+CisJPENZQU4+QEAgLTEsOSArMSw5IEBAPFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPgk8R1JFRU4+bG9uZyBsaW5lIDY8UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+CTxHUkVFTj5sb25nIGxpbmUgNzxSRVNFVD4KKwk8R1JFRU4+KzxSRVNFVD4JPEdSRUVOPmxvbmcgbGluZSA4PFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPgk8R1JFRU4+Y2hhbmdlZCBsb25nIGxpbmUgOTxSRVNFVD4KKwkgbGluZSAxPFJFU0VUPgorCSBsaW5lIDI8UkVTRVQ+CisJIGxpbmUgMzxSRVNFVD4KKwkgbGluZSA0PFJFU0VUPgorCSBsaW5lIDU8UkVTRVQ+CisJPFJFRD4tbG9uZyBsaW5lIDY8UkVTRVQ+CisJPFJFRD4tbG9uZyBsaW5lIDc8UkVTRVQ+CisJPFJFRD4tbG9uZyBsaW5lIDg8UkVTRVQ+CisJPFJFRD4tbG9uZyBsaW5lIDk8UkVTRVQ+CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlnaXQgZGlmZiBIRUFEIC0tbm8tcmVuYW1lcyAtLWNvbG9yLW1vdmVkIC0tY29sb3IgXAorCQktLWNvbG9yLW1vdmVkLXdzPWlnbm9yZS1hbGwtc3BhY2UgPmFjdHVhbC5yYXcgJiYKKwlncmVwIC12ICJpbmRleCIgYWN0dWFsLnJhdyB8IHRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwk8Qk9MRD5kaWZmIC0tZ2l0IGEvbGluZXMudHh0IGIvbGluZXMudHh0PFJFU0VUPgorCTxCT0xEPi0tLSBhL2xpbmVzLnR4dDxSRVNFVD4KKwk8Qk9MRD4rKysgYi9saW5lcy50eHQ8UkVTRVQ+CisJPENZQU4+QEAgLTEsOSArMSw5IEBAPFJFU0VUPgorCTxDWUFOPis8UkVTRVQ+CTxDWUFOPmxvbmcgbGluZSA2PFJFU0VUPgorCTxDWUFOPis8UkVTRVQ+CTxDWUFOPmxvbmcgbGluZSA3PFJFU0VUPgorCTxDWUFOPis8UkVTRVQ+CTxDWUFOPmxvbmcgbGluZSA4PFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPgk8R1JFRU4+Y2hhbmdlZCBsb25nIGxpbmUgOTxSRVNFVD4KKwkgbGluZSAxPFJFU0VUPgorCSBsaW5lIDI8UkVTRVQ+CisJIGxpbmUgMzxSRVNFVD4KKwkgbGluZSA0PFJFU0VUPgorCSBsaW5lIDU8UkVTRVQ+CisJPE1BR0VOVEE+LWxvbmcgbGluZSA2PFJFU0VUPgorCTxNQUdFTlRBPi1sb25nIGxpbmUgNzxSRVNFVD4KKwk8TUFHRU5UQT4tbG9uZyBsaW5lIDg8UkVTRVQ+CisJPFJFRD4tbG9uZyBsaW5lIDk8UkVTRVQ+CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmUgZGV0ZWN0aW9uIGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwkjIExpbmVzIDYtOCBoYXZlIGEgc3BhY2UgY2hhbmdlLCBidXQgOSBpcyBuZXcgd2hpdGVzcGFjZQorCXFfdG9fdGFiIDw8LVxFT0YgPmxpbmVzLnR4dCAmJgorCWxvbmdRbGluZSA2CisJbG9uZ1FsaW5lIDcKKwlsb25nUWxpbmUgOAorCWxvbmcgbGlRbmUgOQorCWxpbmUgMQorCWxpbmUgMgorCWxpbmUgMworCWxpbmUgNAorCWxpbmUgNQorCUVPRgorCisJZ2l0IGRpZmYgSEVBRCAtLW5vLXJlbmFtZXMgLS1jb2xvci1tb3ZlZCAtLWNvbG9yID5hY3R1YWwucmF3ICYmCisJZ3JlcCAtdiAiaW5kZXgiIGFjdHVhbC5yYXcgfCB0ZXN0X2RlY29kZV9jb2xvciA+YWN0dWFsICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJPEJPTEQ+ZGlmZiAtLWdpdCBhL2xpbmVzLnR4dCBiL2xpbmVzLnR4dDxSRVNFVD4KKwk8Qk9MRD4tLS0gYS9saW5lcy50eHQ8UkVTRVQ+CisJPEJPTEQ+KysrIGIvbGluZXMudHh0PFJFU0VUPgorCTxDWUFOPkBAIC0xLDkgKzEsOSBAQDxSRVNFVD4KKwk8R1JFRU4+KzxSRVNFVD48R1JFRU4+bG9uZwlsaW5lIDY8UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPmxvbmcJbGluZSA3PFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj5sb25nCWxpbmUgODxSRVNFVD4KKwk8R1JFRU4+KzxSRVNFVD48R1JFRU4+bG9uZyBsaQluZSA5PFJFU0VUPgorCSBsaW5lIDE8UkVTRVQ+CisJIGxpbmUgMjxSRVNFVD4KKwkgbGluZSAzPFJFU0VUPgorCSBsaW5lIDQ8UkVTRVQ+CisJIGxpbmUgNTxSRVNFVD4KKwk8UkVEPi1sb25nIGxpbmUgNjxSRVNFVD4KKwk8UkVEPi1sb25nIGxpbmUgNzxSRVNFVD4KKwk8UkVEPi1sb25nIGxpbmUgODxSRVNFVD4KKwk8UkVEPi1sb25nIGxpbmUgOTxSRVNFVD4KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCWdpdCBkaWZmIEhFQUQgLS1uby1yZW5hbWVzIC0tY29sb3ItbW92ZWQgLS1jb2xvciBcCisJCS0tY29sb3ItbW92ZWQtd3M9aWdub3JlLXNwYWNlLWNoYW5nZSA+YWN0dWFsLnJhdyAmJgorCWdyZXAgLXYgImluZGV4IiBhY3R1YWwucmF3IHwgdGVzdF9kZWNvZGVfY29sb3IgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCTxCT0xEPmRpZmYgLS1naXQgYS9saW5lcy50eHQgYi9saW5lcy50eHQ8UkVTRVQ+CisJPEJPTEQ+LS0tIGEvbGluZXMudHh0PFJFU0VUPgorCTxCT0xEPisrKyBiL2xpbmVzLnR4dDxSRVNFVD4KKwk8Q1lBTj5AQCAtMSw5ICsxLDkgQEA8UkVTRVQ+CisJPENZQU4+KzxSRVNFVD48Q1lBTj5sb25nCWxpbmUgNjxSRVNFVD4KKwk8Q1lBTj4rPFJFU0VUPjxDWUFOPmxvbmcJbGluZSA3PFJFU0VUPgorCTxDWUFOPis8UkVTRVQ+PENZQU4+bG9uZwlsaW5lIDg8UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPmxvbmcgbGkJbmUgOTxSRVNFVD4KKwkgbGluZSAxPFJFU0VUPgorCSBsaW5lIDI8UkVTRVQ+CisJIGxpbmUgMzxSRVNFVD4KKwkgbGluZSA0PFJFU0VUPgorCSBsaW5lIDU8UkVTRVQ+CisJPE1BR0VOVEE+LWxvbmcgbGluZSA2PFJFU0VUPgorCTxNQUdFTlRBPi1sb25nIGxpbmUgNzxSRVNFVD4KKwk8TUFHRU5UQT4tbG9uZyBsaW5lIDg8UkVTRVQ+CisJPFJFRD4tbG9uZyBsaW5lIDk8UkVTRVQ+CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmUgZGV0ZWN0aW9uIGlnbm9yaW5nIHdoaXRlc3BhY2UgYXQgZW9sJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCSMgTGluZXMgNi05IGhhdmUgbmV3IGVvbCB3aGl0ZXNwYWNlLCBidXQgOSBhbHNvIGhhcyBpdCBpbiB0aGUgbWlkZGxlCisJcV90b190YWIgPDwtXEVPRiA+bGluZXMudHh0ICYmCisJbG9uZyBsaW5lIDZRCisJbG9uZyBsaW5lIDdRCisJbG9uZyBsaW5lIDhRCisJbG9uZ1FsaW5lIDlRCisJbGluZSAxCisJbGluZSAyCisJbGluZSAzCisJbGluZSA0CisJbGluZSA1CisJRU9GCisKKwkjIGF2b2lkIGNsdXR0ZXJpbmcgdGhlIG91dHB1dCB3aXRoIGNvbXBsYWludHMgYWJvdXQgb3VyIGVvbCB3aGl0ZXNwYWNlCisJdGVzdF9jb25maWcgY29yZS53aGl0ZXNwYWNlIC1ibGFuay1hdC1lb2wgJiYKKworCWdpdCBkaWZmIEhFQUQgLS1uby1yZW5hbWVzIC0tY29sb3ItbW92ZWQgLS1jb2xvciA+YWN0dWFsLnJhdyAmJgorCWdyZXAgLXYgImluZGV4IiBhY3R1YWwucmF3IHwgdGVzdF9kZWNvZGVfY29sb3IgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCTxCT0xEPmRpZmYgLS1naXQgYS9saW5lcy50eHQgYi9saW5lcy50eHQ8UkVTRVQ+CisJPEJPTEQ+LS0tIGEvbGluZXMudHh0PFJFU0VUPgorCTxCT0xEPisrKyBiL2xpbmVzLnR4dDxSRVNFVD4KKwk8Q1lBTj5AQCAtMSw5ICsxLDkgQEA8UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPmxvbmcgbGluZSA2CTxSRVNFVD4KKwk8R1JFRU4+KzxSRVNFVD48R1JFRU4+bG9uZyBsaW5lIDcJPFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj5sb25nIGxpbmUgOAk8UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPmxvbmcJbGluZSA5CTxSRVNFVD4KKwkgbGluZSAxPFJFU0VUPgorCSBsaW5lIDI8UkVTRVQ+CisJIGxpbmUgMzxSRVNFVD4KKwkgbGluZSA0PFJFU0VUPgorCSBsaW5lIDU8UkVTRVQ+CisJPFJFRD4tbG9uZyBsaW5lIDY8UkVTRVQ+CisJPFJFRD4tbG9uZyBsaW5lIDc8UkVTRVQ+CisJPFJFRD4tbG9uZyBsaW5lIDg8UkVTRVQ+CisJPFJFRD4tbG9uZyBsaW5lIDk8UkVTRVQ+CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlnaXQgZGlmZiBIRUFEIC0tbm8tcmVuYW1lcyAtLWNvbG9yLW1vdmVkIC0tY29sb3IgXAorCQktLWNvbG9yLW1vdmVkLXdzPWlnbm9yZS1zcGFjZS1hdC1lb2wgPmFjdHVhbC5yYXcgJiYKKwlncmVwIC12ICJpbmRleCIgYWN0dWFsLnJhdyB8IHRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwk8Qk9MRD5kaWZmIC0tZ2l0IGEvbGluZXMudHh0IGIvbGluZXMudHh0PFJFU0VUPgorCTxCT0xEPi0tLSBhL2xpbmVzLnR4dDxSRVNFVD4KKwk8Qk9MRD4rKysgYi9saW5lcy50eHQ8UkVTRVQ+CisJPENZQU4+QEAgLTEsOSArMSw5IEBAPFJFU0VUPgorCTxDWUFOPis8UkVTRVQ+PENZQU4+bG9uZyBsaW5lIDYJPFJFU0VUPgorCTxDWUFOPis8UkVTRVQ+PENZQU4+bG9uZyBsaW5lIDcJPFJFU0VUPgorCTxDWUFOPis8UkVTRVQ+PENZQU4+bG9uZyBsaW5lIDgJPFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj5sb25nCWxpbmUgOQk8UkVTRVQ+CisJIGxpbmUgMTxSRVNFVD4KKwkgbGluZSAyPFJFU0VUPgorCSBsaW5lIDM8UkVTRVQ+CisJIGxpbmUgNDxSRVNFVD4KKwkgbGluZSA1PFJFU0VUPgorCTxNQUdFTlRBPi1sb25nIGxpbmUgNjxSRVNFVD4KKwk8TUFHRU5UQT4tbG9uZyBsaW5lIDc8UkVTRVQ+CisJPE1BR0VOVEE+LWxvbmcgbGluZSA4PFJFU0VUPgorCTxSRUQ+LWxvbmcgbGluZSA5PFJFU0VUPgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbiB1cCB3aGl0ZXNwYWNlLXRlc3QgY29sb3JzJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbG9yLmRpZmYub2xkTW92ZWQgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29sb3IuZGlmZi5uZXdNb3ZlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbG9yLW1vdmVkIGJsb2NrIGF0IGVuZCBvZiBkaWZmIG91dHB1dCByZXNwZWN0cyBNSU5fQUxOVU1fQ09VTlQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJPmJhciAmJgorCWNhdCA8PC1cRU9GID5mb28gJiYKKwlpcnJlbGV2YW50X2xpbmUKKwlsaW5lMQorCUVPRgorCWdpdCBhZGQgZm9vIGJhciAmJgorCWdpdCBjb21taXQgLW0geCAmJgorCisJY2F0IDw8LVxFT0YgPmJhciAmJgorCWxpbmUxCisJRU9GCisJY2F0IDw8LVxFT0YgPmZvbyAmJgorCWlycmVsZXZhbnRfbGluZQorCUVPRgorCisJZ2l0IGRpZmYgSEVBRCAtLWNvbG9yLW1vdmVkPXplYnJhIC0tY29sb3IgLS1uby1yZW5hbWVzID5hY3R1YWwucmF3ICYmCisJZ3JlcCAtdiAiaW5kZXgiIGFjdHVhbC5yYXcgfCB0ZXN0X2RlY29kZV9jb2xvciA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJPEJPTEQ+ZGlmZiAtLWdpdCBhL2JhciBiL2JhcjxSRVNFVD4KKwk8Qk9MRD4tLS0gYS9iYXI8UkVTRVQ+CisJPEJPTEQ+KysrIGIvYmFyPFJFU0VUPgorCTxDWUFOPkBAIC0wLDAgKzEgQEA8UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPmxpbmUxPFJFU0VUPgorCTxCT0xEPmRpZmYgLS1naXQgYS9mb28gYi9mb288UkVTRVQ+CisJPEJPTEQ+LS0tIGEvZm9vPFJFU0VUPgorCTxCT0xEPisrKyBiL2ZvbzxSRVNFVD4KKwk8Q1lBTj5AQCAtMSwyICsxIEBAPFJFU0VUPgorCSBpcnJlbGV2YW50X2xpbmU8UkVTRVQ+CisJPFJFRD4tbGluZTE8UkVTRVQ+CisJRU9GCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb2xvci1tb3ZlZCByZXNwZWN0cyBNSU5fQUxOVU1fQ09VTlQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2F0IDw8LVxFT0YgPmZvbyAmJgorCW5pbmV0ZWVuIGNoYXJzIDQ1Njc4OQorCWlycmVsZXZhbnRfbGluZQorCXR3ZW50eSBjaGFycyAyMzQ1Njc4OTAKKwlFT0YKKwk+YmFyICYmCisJZ2l0IGFkZCBmb28gYmFyICYmCisJZ2l0IGNvbW1pdCAtbSB4ICYmCisKKwljYXQgPDwtXEVPRiA+Zm9vICYmCisJaXJyZWxldmFudF9saW5lCisJRU9GCisJY2F0IDw8LVxFT0YgPmJhciAmJgorCXR3ZW50eSBjaGFycyAyMzQ1Njc4OTAKKwluaW5ldGVlbiBjaGFycyA0NTY3ODkKKwlFT0YKKworCWdpdCBkaWZmIEhFQUQgLS1jb2xvci1tb3ZlZD16ZWJyYSAtLWNvbG9yIC0tbm8tcmVuYW1lcyA+YWN0dWFsLnJhdyAmJgorCWdyZXAgLXYgImluZGV4IiBhY3R1YWwucmF3IHwgdGVzdF9kZWNvZGVfY29sb3IgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTxCT0xEPmRpZmYgLS1naXQgYS9iYXIgYi9iYXI8UkVTRVQ+CisJPEJPTEQ+LS0tIGEvYmFyPFJFU0VUPgorCTxCT0xEPisrKyBiL2JhcjxSRVNFVD4KKwk8Q1lBTj5AQCAtMCwwICsxLDIgQEA8UkVTRVQ+CisJPEJPTEQ7Q1lBTj4rPFJFU0VUPjxCT0xEO0NZQU4+dHdlbnR5IGNoYXJzIDIzNDU2Nzg5MDxSRVNFVD4KKwk8R1JFRU4+KzxSRVNFVD48R1JFRU4+bmluZXRlZW4gY2hhcnMgNDU2Nzg5PFJFU0VUPgorCTxCT0xEPmRpZmYgLS1naXQgYS9mb28gYi9mb288UkVTRVQ+CisJPEJPTEQ+LS0tIGEvZm9vPFJFU0VUPgorCTxCT0xEPisrKyBiL2ZvbzxSRVNFVD4KKwk8Q1lBTj5AQCAtMSwzICsxIEBAPFJFU0VUPgorCTxSRUQ+LW5pbmV0ZWVuIGNoYXJzIDQ1Njc4OTxSRVNFVD4KKwkgaXJyZWxldmFudF9saW5lPFJFU0VUPgorCTxCT0xEO01BR0VOVEE+LXR3ZW50eSBjaGFycyAyMzQ1Njc4OTA8UkVTRVQ+CisJRU9GCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb2xvci1tb3ZlZCB0cmVhdHMgYWRqYWNlbnQgYmxvY2tzIGFzIHNlcGFyYXRlIGZvciBNSU5fQUxOVU1fQ09VTlQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2F0IDw8LVxFT0YgPmZvbyAmJgorCTdjaGFyc0EKKwlpcnJlbGV2YW50X2xpbmUKKwk3Y2hhcnNCCisJN2NoYXJzQworCUVPRgorCT5iYXIgJiYKKwlnaXQgYWRkIGZvbyBiYXIgJiYKKwlnaXQgY29tbWl0IC1tIHggJiYKKworCWNhdCA8PC1cRU9GID5mb28gJiYKKwlpcnJlbGV2YW50X2xpbmUKKwlFT0YKKwljYXQgPDwtXEVPRiA+YmFyICYmCisJN2NoYXJzQgorCTdjaGFyc0MKKwk3Y2hhcnNBCisJRU9GCisKKwlnaXQgZGlmZiBIRUFEIC0tY29sb3ItbW92ZWQ9emVicmEgLS1jb2xvciAtLW5vLXJlbmFtZXMgPmFjdHVhbC5yYXcgJiYKKwlncmVwIC12ICJpbmRleCIgYWN0dWFsLnJhdyB8IHRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwk8Qk9MRD5kaWZmIC0tZ2l0IGEvYmFyIGIvYmFyPFJFU0VUPgorCTxCT0xEPi0tLSBhL2JhcjxSRVNFVD4KKwk8Qk9MRD4rKysgYi9iYXI8UkVTRVQ+CisJPENZQU4+QEAgLTAsMCArMSwzIEBAPFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj43Y2hhcnNCPFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj43Y2hhcnNDPFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj43Y2hhcnNBPFJFU0VUPgorCTxCT0xEPmRpZmYgLS1naXQgYS9mb28gYi9mb288UkVTRVQ+CisJPEJPTEQ+LS0tIGEvZm9vPFJFU0VUPgorCTxCT0xEPisrKyBiL2ZvbzxSRVNFVD4KKwk8Q1lBTj5AQCAtMSw0ICsxIEBAPFJFU0VUPgorCTxSRUQ+LTdjaGFyc0E8UkVTRVQ+CisJIGlycmVsZXZhbnRfbGluZTxSRVNFVD4KKwk8UkVEPi03Y2hhcnNCPFJFU0VUPgorCTxSRUQ+LTdjaGFyc0M8UkVTRVQ+CisJRU9GCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSBkZXRlY3Rpb24gd2l0aCBzdWJtb2R1bGVzJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBiYW5hbmFzICYmCisJZWNobyByaXBlID5iYW5hbmFzL3JlY2lwZSAmJgorCWdpdCAtQyBiYW5hbmFzIGFkZCByZWNpcGUgJiYKKwl0ZXN0X2NvbW1pdCBmcnVpdCAmJgorCXRlc3RfY29tbWl0IC1DIGJhbmFuYXMgcmVjaXBlICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi9iYW5hbmFzICYmCisJZ2l0IGFkZCBiYW5hbmFzICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiYmFuYW5hcyBhcmUgbGlrZSBhIGhlYXZ5IGxpYnJhcnk/IiAmJgorCWVjaG8gZm91bCA+YmFuYW5hcy9yZWNpcGUgJiYKKwllY2hvIHJpcGUgPmZydWl0LnQgJiYKKworCWdpdCBkaWZmIC0tc3VibW9kdWxlPWRpZmYgLS1jb2xvci1tb3ZlZCAtLWNvbG9yID5hY3R1YWwgJiYKKworCSMgbm8gbW92ZSBkZXRlY3Rpb24gYXMgdGhlIG1vdmVkIGxpbmUgaXMgYWNyb3NzIHJlcG9zaXRvcnkgYm91bmRhcmllcy4KKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsID5kZWNvZGVkX2FjdHVhbCAmJgorCSEgZ3JlcCBCR1JFRU4gZGVjb2RlZF9hY3R1YWwgJiYKKwkhIGdyZXAgQlJFRCBkZWNvZGVkX2FjdHVhbCAmJgorCisJIyBub3IgZGlkIHdlIG1lc3Mgd2l0aCBpdCBhbm90aGVyIHdheQorCWdpdCBkaWZmIC0tc3VibW9kdWxlPWRpZmYgLS1jb2xvciA+ZXhwZWN0LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxleHBlY3QucmF3ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZGVjb2RlZF9hY3R1YWwgJiYKKwlybSAtcmYgYmFuYW5hcyAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IGJhbmFuYXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25seSBtb3ZlIGRldGVjdGlvbiBpZ25vcmVzIHdoaXRlIHNwYWNlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlxX3RvX3RhYiA8PC1cRU9GID50ZXh0LnR4dCAmJgorCQlhIGxvbmcgbGluZSB0byBleGNlZWQgcGVyLWxpbmUgbWluaW11bQorCQlhbm90aGVyIGxvbmcgbGluZSB0byBleGNlZWQgcGVyLWxpbmUgbWluaW11bQorCQlvcmlnaW5hbCBmaWxlCisJRU9GCisJZ2l0IGFkZCB0ZXh0LnR4dCAmJgorCWdpdCBjb21taXQgLW0gImFkZCB0ZXh0IiAmJgorCXFfdG9fdGFiIDw8LVxFT0YgPnRleHQudHh0ICYmCisJCVFhIGxvbmcgbGluZSB0byBleGNlZWQgcGVyLWxpbmUgbWluaW11bQorCQlRYW5vdGhlciBsb25nIGxpbmUgdG8gZXhjZWVkIHBlci1saW5lIG1pbmltdW0KKwkJbmV3IGZpbGUKKwlFT0YKKworCSMgTWFrZSBzdXJlIHdlIGdldCBhIGRpZmZlcmVudCBkaWZmIHVzaW5nIC13CisJZ2l0IGRpZmYgLS1jb2xvciAtLWNvbG9yLW1vdmVkIC13ID5hY3R1YWwucmF3ICYmCisJZ3JlcCAtdiAiaW5kZXgiIGFjdHVhbC5yYXcgfCB0ZXN0X2RlY29kZV9jb2xvciA+YWN0dWFsICYmCisJcV90b190YWIgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwk8Qk9MRD5kaWZmIC0tZ2l0IGEvdGV4dC50eHQgYi90ZXh0LnR4dDxSRVNFVD4KKwk8Qk9MRD4tLS0gYS90ZXh0LnR4dDxSRVNFVD4KKwk8Qk9MRD4rKysgYi90ZXh0LnR4dDxSRVNFVD4KKwk8Q1lBTj5AQCAtMSwzICsxLDMgQEA8UkVTRVQ+CisJIFFhIGxvbmcgbGluZSB0byBleGNlZWQgcGVyLWxpbmUgbWluaW11bTxSRVNFVD4KKwkgUWFub3RoZXIgbG9uZyBsaW5lIHRvIGV4Y2VlZCBwZXItbGluZSBtaW5pbXVtPFJFU0VUPgorCTxSRUQ+LW9yaWdpbmFsIGZpbGU8UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPm5ldyBmaWxlPFJFU0VUPgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJIyBBbmQgbm93IGlnbm9yaW5nIHdoaXRlIHNwYWNlIG9ubHkgaW4gdGhlIG1vdmUgZGV0ZWN0aW9uCisJZ2l0IGRpZmYgLS1jb2xvciAtLWNvbG9yLW1vdmVkIFwKKwkJLS1jb2xvci1tb3ZlZC13cz1pZ25vcmUtYWxsLXNwYWNlLGlnbm9yZS1zcGFjZS1jaGFuZ2UsaWdub3JlLXNwYWNlLWF0LWVvbCA+YWN0dWFsLnJhdyAmJgorCWdyZXAgLXYgImluZGV4IiBhY3R1YWwucmF3IHwgdGVzdF9kZWNvZGVfY29sb3IgPmFjdHVhbCAmJgorCXFfdG9fdGFiIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJPEJPTEQ+ZGlmZiAtLWdpdCBhL3RleHQudHh0IGIvdGV4dC50eHQ8UkVTRVQ+CisJPEJPTEQ+LS0tIGEvdGV4dC50eHQ8UkVTRVQ+CisJPEJPTEQ+KysrIGIvdGV4dC50eHQ8UkVTRVQ+CisJPENZQU4+QEAgLTEsMyArMSwzIEBAPFJFU0VUPgorCTxCT0xEO01BR0VOVEE+LWEgbG9uZyBsaW5lIHRvIGV4Y2VlZCBwZXItbGluZSBtaW5pbXVtPFJFU0VUPgorCTxCT0xEO01BR0VOVEE+LWFub3RoZXIgbG9uZyBsaW5lIHRvIGV4Y2VlZCBwZXItbGluZSBtaW5pbXVtPFJFU0VUPgorCTxSRUQ+LW9yaWdpbmFsIGZpbGU8UkVTRVQ+CisJPEJPTEQ7Q1lBTj4rPFJFU0VUPlE8Qk9MRDtDWUFOPmEgbG9uZyBsaW5lIHRvIGV4Y2VlZCBwZXItbGluZSBtaW5pbXVtPFJFU0VUPgorCTxCT0xEO0NZQU4+KzxSRVNFVD5RPEJPTEQ7Q1lBTj5hbm90aGVyIGxvbmcgbGluZSB0byBleGNlZWQgcGVyLWxpbmUgbWluaW11bTxSRVNFVD4KKwk8R1JFRU4+KzxSRVNFVD48R1JFRU4+bmV3IGZpbGU8UkVTRVQ+CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXBhcmUgd2hpdGVzcGFjZSBkZWx0YSBhY3Jvc3MgbW92ZWQgYmxvY2tzJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcV90b190YWIgPDwtXEVPRiA+dGV4dC50eHQgJiYKKwlRSW5kZW50ZWQKKwlRVGV4dCBhY3Jvc3MKKwlRc29tZSBsaW5lcworCVFCdXQhIDwtIHRoaXMgc3RhbmRzIG91dAorCVFBZGp1c3Rpbmcgd2l0aAorCVFRZGlmZmVyZW50IHN0YXJ0aW5nCisJUXdoaXRlIHNwYWNlcworCVFBbm90aGVyIG91dGxpZXIKKwlRUVFJbmRlbnRlZAorCVFRUVRleHQgYWNyb3NzCisJUVFRZml2ZSBsaW5lcworCVFRUXRoYXQgaGFzIHNpbWlsYXIgbGluZXMKKwlRUVF0byBwcmV2aW91cyBibG9ja3MsIGJ1dCB3aXRoIGRpZmZlcmVudCBpbmRlbnQKKwlRUVFZZXRRQW5vdGhlclFvdXRsaWVyUQorCVFMaW5lIHdpdGggaW50ZXJuYWwgdyBoIGkgdCBlIHMgcCBhIGMgZSBjaGFuZ2UKKwlFT0YKKworCWdpdCBhZGQgdGV4dC50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgdGV4dC50eHQiICYmCisKKwlxX3RvX3RhYiA8PC1cRU9GID50ZXh0LnR4dCAmJgorCVFRSW5kZW50ZWQKKwlRUVRleHQgYWNyb3NzCisJUVFzb21lIGxpbmVzCisJUVFRQnV0ISA8LSB0aGlzIHN0YW5kcyBvdXQKKwlBZGp1c3Rpbmcgd2l0aAorCVFkaWZmZXJlbnQgc3RhcnRpbmcKKwl3aGl0ZSBzcGFjZXMKKwlBbm90aGVyUW91dGxpZXIKKwlRUUluZGVudGVkCisJUVFUZXh0IGFjcm9zcworCVFRZml2ZSBsaW5lcworCVFRdGhhdCBoYXMgc2ltaWxhciBsaW5lcworCVFRdG8gcHJldmlvdXMgYmxvY2tzLCBidXQgd2l0aCBkaWZmZXJlbnQgaW5kZW50CisJUVFZZXRRQW5vdGhlclFvdXRsaWVyCisJUUxpbmUgd2l0aCBpbnRlcm5hbCB3aGl0ZXNwYWNlIGNoYW5nZQorCUVPRgorCisJZ2l0IGRpZmYgLS1jb2xvciAtLWNvbG9yLW1vdmVkIC0tY29sb3ItbW92ZWQtd3M9YWxsb3ctaW5kZW50YXRpb24tY2hhbmdlID5hY3R1YWwucmF3ICYmCisJZ3JlcCAtdiAiaW5kZXgiIGFjdHVhbC5yYXcgfCB0ZXN0X2RlY29kZV9jb2xvciA+YWN0dWFsICYmCisKKwlxX3RvX3RhYiA8PC1cRU9GID5leHBlY3RlZCAmJgorCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvdGV4dC50eHQgYi90ZXh0LnR4dDxSRVNFVD4KKwkJPEJPTEQ+LS0tIGEvdGV4dC50eHQ8UkVTRVQ+CisJCTxCT0xEPisrKyBiL3RleHQudHh0PFJFU0VUPgorCQk8Q1lBTj5AQCAtMSwxNSArMSwxNSBAQDxSRVNFVD4KKwkJPEJPTEQ7TUFHRU5UQT4tUUluZGVudGVkPFJFU0VUPgorCQk8Qk9MRDtNQUdFTlRBPi1RVGV4dCBhY3Jvc3M8UkVTRVQ+CisJCTxCT0xEO01BR0VOVEE+LVFzb21lIGxpbmVzPFJFU0VUPgorCQk8UkVEPi1RQnV0ISA8LSB0aGlzIHN0YW5kcyBvdXQ8UkVTRVQ+CisJCTxCT0xEO01BR0VOVEE+LVFBZGp1c3Rpbmcgd2l0aDxSRVNFVD4KKwkJPEJPTEQ7TUFHRU5UQT4tUVFkaWZmZXJlbnQgc3RhcnRpbmc8UkVTRVQ+CisJCTxCT0xEO01BR0VOVEE+LVF3aGl0ZSBzcGFjZXM8UkVTRVQ+CisJCTxSRUQ+LVFBbm90aGVyIG91dGxpZXI8UkVTRVQ+CisJCTxCT0xEO01BR0VOVEE+LVFRUUluZGVudGVkPFJFU0VUPgorCQk8Qk9MRDtNQUdFTlRBPi1RUVFUZXh0IGFjcm9zczxSRVNFVD4KKwkJPEJPTEQ7TUFHRU5UQT4tUVFRZml2ZSBsaW5lczxSRVNFVD4KKwkJPEJPTEQ7TUFHRU5UQT4tUVFRdGhhdCBoYXMgc2ltaWxhciBsaW5lczxSRVNFVD4KKwkJPEJPTEQ7TUFHRU5UQT4tUVFRdG8gcHJldmlvdXMgYmxvY2tzLCBidXQgd2l0aCBkaWZmZXJlbnQgaW5kZW50PFJFU0VUPgorCQk8UkVEPi1RUVFZZXRRQW5vdGhlclFvdXRsaWVyUTxSRVNFVD4KKwkJPFJFRD4tUUxpbmUgd2l0aCBpbnRlcm5hbCB3IGggaSB0IGUgcyBwIGEgYyBlIGNoYW5nZTxSRVNFVD4KKwkJPEJPTEQ7Q1lBTj4rPFJFU0VUPlFRPEJPTEQ7Q1lBTj5JbmRlbnRlZDxSRVNFVD4KKwkJPEJPTEQ7Q1lBTj4rPFJFU0VUPlFRPEJPTEQ7Q1lBTj5UZXh0IGFjcm9zczxSRVNFVD4KKwkJPEJPTEQ7Q1lBTj4rPFJFU0VUPlFRPEJPTEQ7Q1lBTj5zb21lIGxpbmVzPFJFU0VUPgorCQk8R1JFRU4+KzxSRVNFVD5RUVE8R1JFRU4+QnV0ISA8LSB0aGlzIHN0YW5kcyBvdXQ8UkVTRVQ+CisJCTxCT0xEO0NZQU4+KzxSRVNFVD48Qk9MRDtDWUFOPkFkanVzdGluZyB3aXRoPFJFU0VUPgorCQk8Qk9MRDtDWUFOPis8UkVTRVQ+UTxCT0xEO0NZQU4+ZGlmZmVyZW50IHN0YXJ0aW5nPFJFU0VUPgorCQk8Qk9MRDtDWUFOPis8UkVTRVQ+PEJPTEQ7Q1lBTj53aGl0ZSBzcGFjZXM8UkVTRVQ+CisJCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj5Bbm90aGVyUW91dGxpZXI8UkVTRVQ+CisJCTxCT0xEO0NZQU4+KzxSRVNFVD5RUTxCT0xEO0NZQU4+SW5kZW50ZWQ8UkVTRVQ+CisJCTxCT0xEO0NZQU4+KzxSRVNFVD5RUTxCT0xEO0NZQU4+VGV4dCBhY3Jvc3M8UkVTRVQ+CisJCTxCT0xEO0NZQU4+KzxSRVNFVD5RUTxCT0xEO0NZQU4+Zml2ZSBsaW5lczxSRVNFVD4KKwkJPEJPTEQ7Q1lBTj4rPFJFU0VUPlFRPEJPTEQ7Q1lBTj50aGF0IGhhcyBzaW1pbGFyIGxpbmVzPFJFU0VUPgorCQk8Qk9MRDtDWUFOPis8UkVTRVQ+UVE8Qk9MRDtDWUFOPnRvIHByZXZpb3VzIGJsb2NrcywgYnV0IHdpdGggZGlmZmVyZW50IGluZGVudDxSRVNFVD4KKwkJPEdSRUVOPis8UkVTRVQ+UVE8R1JFRU4+WWV0UUFub3RoZXJRb3V0bGllcjxSRVNFVD4KKwkJPEdSRUVOPis8UkVTRVQ+UTxHUkVFTj5MaW5lIHdpdGggaW50ZXJuYWwgd2hpdGVzcGFjZSBjaGFuZ2U8UkVTRVQ+CisJRU9GCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYm9ndXMgc2V0dGluZ3MgaW4gbW92ZSBkZXRlY3Rpb24gZXJyb3Jpbmcgb3V0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jb2xvci1tb3ZlZD1ib2d1cyAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIm11c3QgYmUgb25lIG9mIiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIGJvZ3VzIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGRpZmYuY29sb3Jtb3ZlZD1ib2d1cyBkaWZmIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAibXVzdCBiZSBvbmUgb2YiIGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImZyb20gY29tbWFuZC1saW5lIGNvbmZpZyIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNvbG9yLW1vdmVkLXdzPWJvZ3VzIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAicG9zc2libGUgdmFsdWVzIiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIGJvZ3VzIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGRpZmYuY29sb3Jtb3ZlZHdzPWJvZ3VzIGRpZmYgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJwb3NzaWJsZSB2YWx1ZXMiIGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImZyb20gY29tbWFuZC1saW5lIGNvbmZpZyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXBhcmUgd2hpdGVzcGFjZSBkZWx0YSBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBzcGFjZSBvcHRpb25zJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgXAorCQktLWNvbG9yLW1vdmVkLXdzPWFsbG93LWluZGVudGF0aW9uLWNoYW5nZSxpZ25vcmUtYWxsLXNwYWNlIFwKKwkJMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBlcnIKKycKKworRU1QVFk9JycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXBhcmUgbWl4ZWQgd2hpdGVzcGFjZSBkZWx0YSBhY3Jvc3MgbW92ZWQgYmxvY2tzJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdHIgUV8gIlx0ICIgPDwtRU9GID50ZXh0LnR4dCAmJgorCSR7RU1QVFl9CisJX19fX3RvbyBzaG9ydCB3aXRob3V0CisJJHtFTVBUWX0KKwlfX19iZWluZyBncm91cGVkIGFjcm9zcyBibGFuayBsaW5lCisJJHtFTVBUWX0KKwljb250ZXh0CisJbGluZXMKKwl0bworCWFuY2hvcgorCV9fX19JbmRlbnRlZCB0ZXh0IHRvCisJX1FfX19fYmUgZnVydGhlciBpbmRlbnRlZCBieSBmb3VyIHNwYWNlcyBhY3Jvc3MKKwlfX19fUXNldmVyYWwgbGluZXMKKwlRUV9fX19UaGVzZSB0d28gbGluZXMgaGF2ZSBoYWQgdGhlaXIKKwlfX19faW5kZW50YXRpb24gcmVkdWNlZCBieSBmb3VyIHNwYWNlcworCVFkaWZmZXJlbnQgaW5kZW50YXRpb24gY2hhbmdlCisJX19fX3RvbyBzaG9ydAorCUVPRgorCisJZ2l0IGFkZCB0ZXh0LnR4dCAmJgorCWdpdCBjb21taXQgLW0gImFkZCB0ZXh0LnR4dCIgJiYKKworCXRyIFFfICJcdCAiIDw8LUVPRiA+dGV4dC50eHQgJiYKKwljb250ZXh0CisJbGluZXMKKwl0bworCWFuY2hvcgorCVFJbmRlbnRlZCB0ZXh0IHRvCisJUVFiZSBmdXJ0aGVyIGluZGVudGVkIGJ5IGZvdXIgc3BhY2VzIGFjcm9zcworCVFfX19fc2V2ZXJhbCBsaW5lcworCSR7RU1QVFl9CisJUVF0b28gc2hvcnQgd2l0aG91dAorCSR7RU1QVFl9CisJUV9fX19fX19iZWluZyBncm91cGVkIGFjcm9zcyBibGFuayBsaW5lCisJJHtFTVBUWX0KKwlRX1FUaGVzZSB0d28gbGluZXMgaGF2ZSBoYWQgdGhlaXIKKwlpbmRlbnRhdGlvbiByZWR1Y2VkIGJ5IGZvdXIgc3BhY2VzCisJUVFkaWZmZXJlbnQgaW5kZW50YXRpb24gY2hhbmdlCisJX19RdG9vIHNob3J0CisJRU9GCisKKwlnaXQgLWMgY29sb3IuZGlmZi53aGl0ZXNwYWNlPSJub3JtYWwgcmVkIiBcCisJCS1jIGNvcmUud2hpdGVzcGFjZT1zcGFjZS1iZWZvcmUtdGFiIFwKKwkJZGlmZiAtLWNvbG9yIC0tY29sb3ItbW92ZWQgLS13cy1lcnJvci1oaWdobGlnaHQ9YWxsIFwKKwkJLS1jb2xvci1tb3ZlZC13cz1hbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UgPmFjdHVhbC5yYXcgJiYKKwlncmVwIC12ICJpbmRleCIgYWN0dWFsLnJhdyB8IHRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKKworCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCTxCT0xEPmRpZmYgLS1naXQgYS90ZXh0LnR4dCBiL3RleHQudHh0PFJFU0VUPgorCTxCT0xEPi0tLSBhL3RleHQudHh0PFJFU0VUPgorCTxCT0xEPisrKyBiL3RleHQudHh0PFJFU0VUPgorCTxDWUFOPkBAIC0xLDE2ICsxLDE2IEBAPFJFU0VUPgorCTxCT0xEO01BR0VOVEE+LTxSRVNFVD4KKwk8Qk9MRDtNQUdFTlRBPi08UkVTRVQ+PEJPTEQ7TUFHRU5UQT4gICAgdG9vIHNob3J0IHdpdGhvdXQ8UkVTRVQ+CisJPEJPTEQ7TUFHRU5UQT4tPFJFU0VUPgorCTxCT0xEO01BR0VOVEE+LTxSRVNFVD48Qk9MRDtNQUdFTlRBPiAgIGJlaW5nIGdyb3VwZWQgYWNyb3NzIGJsYW5rIGxpbmU8UkVTRVQ+CisJPEJPTEQ7TUFHRU5UQT4tPFJFU0VUPgorCSA8UkVTRVQ+Y29udGV4dDxSRVNFVD4KKwkgPFJFU0VUPmxpbmVzPFJFU0VUPgorCSA8UkVTRVQ+dG88UkVTRVQ+CisJIDxSRVNFVD5hbmNob3I8UkVTRVQ+CisJPEJPTEQ7TUFHRU5UQT4tPFJFU0VUPjxCT0xEO01BR0VOVEE+ICAgIEluZGVudGVkIHRleHQgdG88UkVTRVQ+CisJPEJPTEQ7TUFHRU5UQT4tPFJFU0VUPjxCUkVEPiA8UkVTRVQ+CTxCT0xEO01BR0VOVEE+ICAgIGJlIGZ1cnRoZXIgaW5kZW50ZWQgYnkgZm91ciBzcGFjZXMgYWNyb3NzPFJFU0VUPgorCTxCT0xEO01BR0VOVEE+LTxSRVNFVD48QlJFRD4gICAgPFJFU0VUPgk8Qk9MRDtNQUdFTlRBPnNldmVyYWwgbGluZXM8UkVTRVQ+CisJPEJPTEQ7QkxVRT4tPFJFU0VUPgkJPEJPTEQ7QkxVRT4gICAgVGhlc2UgdHdvIGxpbmVzIGhhdmUgaGFkIHRoZWlyPFJFU0VUPgorCTxCT0xEO0JMVUU+LTxSRVNFVD48Qk9MRDtCTFVFPiAgICBpbmRlbnRhdGlvbiByZWR1Y2VkIGJ5IGZvdXIgc3BhY2VzPFJFU0VUPgorCTxCT0xEO01BR0VOVEE+LTxSRVNFVD4JPEJPTEQ7TUFHRU5UQT5kaWZmZXJlbnQgaW5kZW50YXRpb24gY2hhbmdlPFJFU0VUPgorCTxSRUQ+LTxSRVNFVD48UkVEPiAgICB0b28gc2hvcnQ8UkVTRVQ+CisJPEJPTEQ7Q1lBTj4rPFJFU0VUPgk8Qk9MRDtDWUFOPkluZGVudGVkIHRleHQgdG88UkVTRVQ+CisJPEJPTEQ7Q1lBTj4rPFJFU0VUPgkJPEJPTEQ7Q1lBTj5iZSBmdXJ0aGVyIGluZGVudGVkIGJ5IGZvdXIgc3BhY2VzIGFjcm9zczxSRVNFVD4KKwk8Qk9MRDtDWUFOPis8UkVTRVQ+CTxCT0xEO0NZQU4+ICAgIHNldmVyYWwgbGluZXM8UkVTRVQ+CisJPEJPTEQ7WUVMTE9XPis8UkVTRVQ+CisJPEJPTEQ7WUVMTE9XPis8UkVTRVQ+CQk8Qk9MRDtZRUxMT1c+dG9vIHNob3J0IHdpdGhvdXQ8UkVTRVQ+CisJPEJPTEQ7WUVMTE9XPis8UkVTRVQ+CisJPEJPTEQ7WUVMTE9XPis8UkVTRVQ+CTxCT0xEO1lFTExPVz4gICAgICAgYmVpbmcgZ3JvdXBlZCBhY3Jvc3MgYmxhbmsgbGluZTxSRVNFVD4KKwk8Qk9MRDtZRUxMT1c+KzxSRVNFVD4KKwk8Qk9MRDtDWUFOPis8UkVTRVQ+CTxCUkVEPiA8UkVTRVQ+CTxCT0xEO0NZQU4+VGhlc2UgdHdvIGxpbmVzIGhhdmUgaGFkIHRoZWlyPFJFU0VUPgorCTxCT0xEO0NZQU4+KzxSRVNFVD48Qk9MRDtDWUFOPmluZGVudGF0aW9uIHJlZHVjZWQgYnkgZm91ciBzcGFjZXM8UkVTRVQ+CisJPEJPTEQ7WUVMTE9XPis8UkVTRVQ+CQk8Qk9MRDtZRUxMT1c+ZGlmZmVyZW50IGluZGVudGF0aW9uIGNoYW5nZTxSRVNFVD4KKwk8R1JFRU4+KzxSRVNFVD48QlJFRD4gIDxSRVNFVD4JPEdSRUVOPnRvbyBzaG9ydDxSRVNFVD4KKwlFT0YKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5lIC0taWdub3JlLWJsYW5rLWxpbmVzIHdpdGggLS1mdW5jdGlvbi1jb250ZXh0JyAnCisJdGVzdF93cml0ZV9saW5lcyAxICIiIDIgMyA0IDUgPmEgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgICAgMiAzIDQgICA+YiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggXAorCQktLWlnbm9yZS1ibGFuay1saW5lcyAtLWZ1bmN0aW9uLWNvbnRleHQgYSBiID5hY3R1YWwucmF3ICYmCisJc2VkIC1uICIvQEAvLFwkcCIgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwlAQCAtMSw2ICsxLDQgQEAKKwkgMQorCS0KKwkgMgorCSAzCisJIDQKKwktNQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZSAtLWlnbm9yZS1ibGFuay1saW5lcyB3aXRoIC0tZnVuY3Rpb24tY29udGV4dCAyJyAnCisJdGVzdF93cml0ZV9saW5lcyAgICBhIGIgYyAiIiBmdW5jdGlvbiAxIDIgMyA0IDUgIiIgNiA3IDggOSA+YSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgIiIgYSBiIGMgIiIgZnVuY3Rpb24gMSAyIDMgNCA1ICAgIDYgNyA4ICAgPmIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IFwKKwkJLS1pZ25vcmUtYmxhbmstbGluZXMgLS1mdW5jdGlvbi1jb250ZXh0IGEgYiA+YWN0dWFsLnJhdyAmJgorCXNlZCAtbiAiL0BALyxcJHAiIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJQEAgLTUsMTEgKzYsOSBAQCBjCisJIGZ1bmN0aW9uCisJIDEKKwkgMgorCSAzCisJIDQKKwkgNQorCS0KKwkgNgorCSA3CisJIDgKKwktOQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDE2LWRpZmYtcXVvdGUuc2ggYi90L3Q0MDE2LWRpZmYtcXVvdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWM0OGU1YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTYtZGlmZi1xdW90ZS5zaApAQCAtMCwwICsxLDg4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1F1b3RpbmcgcGF0aHMgaW4gZGlmZiBvdXRwdXQuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitQMD0ncGF0aG5hbWUnCitQMT0ncGF0aG5hbWUJd2l0aCBIVCcKK1AyPSdwYXRobmFtZSB3aXRoIFNQJworUDM9J3BhdGhuYW1lCit3aXRoIExGJwordGVzdF9oYXZlX3ByZXJlcSAhTUlOR1cgJiYKK2VjaG8gMj4vZGV2L251bGwgPiIkUDEiICYmIHRlc3QgLWYgIiRQMSIgJiYgcm0gLWYgIiRQMSIgfHwgeworCXNraXBfYWxsPSdZb3VyIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWxsb3cgdGFicyBpbiBmaWxlbmFtZXMnCisJdGVzdF9kb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gUDAuMCA+IiRQMC4wIiAmJgorCWVjaG8gUDAuMSA+IiRQMC4xIiAmJgorCWVjaG8gUDAuMiA+IiRQMC4yIiAmJgorCWVjaG8gUDAuMyA+IiRQMC4zIiAmJgorCWVjaG8gUDEuMCA+IiRQMS4wIiAmJgorCWVjaG8gUDEuMiA+IiRQMS4yIiAmJgorCWVjaG8gUDEuMyA+IiRQMS4zIiAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBtdiAiJFAwLjAiICJSJFAwLjAiICYmCisJZ2l0IG12ICIkUDAuMSIgIlIkUDEuMCIgJiYKKwlnaXQgbXYgIiRQMC4yIiAiUiRQMi4wIiAmJgorCWdpdCBtdiAiJFAwLjMiICJSJFAzLjAiICYmCisJZ2l0IG12ICIkUDEuMCIgIlIkUDAuMSIgJiYKKwlnaXQgbXYgIiRQMS4yIiAiUiRQMi4xIiAmJgorCWdpdCBtdiAiJFAxLjMiICJSJFAzLjEiICYmCisJOgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3RlZCBmaWxlcycgJworY2F0ID5leHBlY3QgPDxcRU9GCisgcmVuYW1lIHBhdGhuYW1lLjEgPT4gIlJwYXRobmFtZVx0d2l0aCBIVC4wIiAoMTAwJSkKKyByZW5hbWUgcGF0aG5hbWUuMyA9PiAiUnBhdGhuYW1lXG53aXRoIExGLjAiICgxMDAlKQorIHJlbmFtZSAicGF0aG5hbWVcdHdpdGggSFQuMyIgPT4gIlJwYXRobmFtZVxud2l0aCBMRi4xIiAoMTAwJSkKKyByZW5hbWUgcGF0aG5hbWUuMiA9PiBScGF0aG5hbWUgd2l0aCBTUC4wICgxMDAlKQorIHJlbmFtZSAicGF0aG5hbWVcdHdpdGggSFQuMiIgPT4gUnBhdGhuYW1lIHdpdGggU1AuMSAoMTAwJSkKKyByZW5hbWUgcGF0aG5hbWUuMCA9PiBScGF0aG5hbWUuMCAoMTAwJSkKKyByZW5hbWUgInBhdGhuYW1lXHR3aXRoIEhULjAiID0+IFJwYXRobmFtZS4xICgxMDAlKQorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIC0tc3VtbWFyeSAtTSBIRUFEJyAnCisJZ2l0IGRpZmYgLS1zdW1tYXJ5IC1NIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1udW1zdGF0IC1NIEhFQUQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJMAkwCXBhdGhuYW1lLjEgPT4gIlJwYXRobmFtZVx0d2l0aCBIVC4wIgorCTAJMAlwYXRobmFtZS4zID0+ICJScGF0aG5hbWVcbndpdGggTEYuMCIKKwkwCTAJInBhdGhuYW1lXHR3aXRoIEhULjMiID0+ICJScGF0aG5hbWVcbndpdGggTEYuMSIKKwkwCTAJcGF0aG5hbWUuMiA9PiBScGF0aG5hbWUgd2l0aCBTUC4wCisJMAkwCSJwYXRobmFtZVx0d2l0aCBIVC4yIiA9PiBScGF0aG5hbWUgd2l0aCBTUC4xCisJMAkwCXBhdGhuYW1lLjAgPT4gUnBhdGhuYW1lLjAKKwkwCTAJInBhdGhuYW1lXHR3aXRoIEhULjAiID0+IFJwYXRobmFtZS4xCisJRU9GCisJZ2l0IGRpZmYgLS1udW1zdGF0IC1NIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1zdGF0IC1NIEhFQUQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIHBhdGhuYW1lLjEgPT4gIlJwYXRobmFtZVx0d2l0aCBIVC4wIiAgICAgICAgICAgIHwgMAorCSBwYXRobmFtZS4zID0+ICJScGF0aG5hbWVcbndpdGggTEYuMCIgICAgICAgICAgICB8IDAKKwkgInBhdGhuYW1lXHR3aXRoIEhULjMiID0+ICJScGF0aG5hbWVcbndpdGggTEYuMSIgfCAwCisJIHBhdGhuYW1lLjIgPT4gUnBhdGhuYW1lIHdpdGggU1AuMCAgICAgICAgICAgICAgIHwgMAorCSAicGF0aG5hbWVcdHdpdGggSFQuMiIgPT4gUnBhdGhuYW1lIHdpdGggU1AuMSAgICB8IDAKKwkgcGF0aG5hbWUuMCA9PiBScGF0aG5hbWUuMCAgICAgICAgICAgICAgICAgICAgICAgfCAwCisJICJwYXRobmFtZVx0d2l0aCBIVC4wIiA9PiBScGF0aG5hbWUuMSAgICAgICAgICAgIHwgMAorCSA3IGZpbGVzIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKwlFT0YKKwlnaXQgZGlmZiAtLXN0YXQgLU0gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDE3LWRpZmYtcmV0dmFsLnNoIGIvdC90NDAxNy1kaWZmLXJldHZhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NWE3Y2E3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxNy1kaWZmLXJldHZhbC5zaApAQCAtMCwwICsxLDEzNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1JldHVybiB2YWx1ZSBvZiBkaWZmcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyAiMSAiID5hICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSB6ZXJvdGggJiYKKwllY2hvIDEgPmEgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGZpcnN0ICYmCisJZWNobyAyID5iICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1xdWlldCAtdyAgSEVBRF5eIEhFQUReJyAnCisJZ2l0IGRpZmYgLS1xdWlldCAtdyBIRUFEXl4gSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1xdWlldCBIRUFEXl4gSEVBRF4nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0IEhFQUReXiBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLXF1aWV0IC13ICBIRUFEXiBIRUFEJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAtdyBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgSEVBRF4gSEVBRCcgJworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZi10cmVlIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgSEVBRF4gSEVBRCAtLSBhJyAnCisJZ2l0IGRpZmYtdHJlZSAtLWV4aXQtY29kZSBIRUFEXiBIRUFEIC0tIGEKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgSEVBRF4gSEVBRCAtLSBiJyAnCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLXRyZWUgLS1leGl0LWNvZGUgSEVBRF4gSEVBRCAtLSBiCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlY2hvIEhFQUQgfCBnaXQgZGlmZi10cmVlIC0tc3RkaW4nICcKKwllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8IHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZi10cmVlIC0tZXhpdC1jb2RlIC0tc3RkaW4KKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgSEVBRCBIRUFEJyAnCisJZ2l0IGRpZmYtdHJlZSAtLWV4aXQtY29kZSBIRUFEIEhFQUQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWZpbGVzJyAnCisJZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQnICcKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSAtLWNhY2hlZCBIRUFECisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEXicgJworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSAtLWNhY2hlZCBIRUFEXgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRF4nICcKKwllY2hvIHRleHQgPj5iICYmCisJZWNobyAzID5jICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIC0tY2FjaGVkIEhFQUReCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi10cmVlIC1TdGV4dCBIRUFEXiBIRUFEIC0tIGInICcKKwlnaXQgY29tbWl0IC1tICJ0ZXh0IGluIGIiICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLXRyZWUgLXAgLS1leGl0LWNvZGUgLVN0ZXh0IEhFQUReIEhFQUQgLS0gYgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSAtU25vdC1mb3VuZCBIRUFEXiBIRUFEIC0tIGInICcKKwlnaXQgZGlmZi10cmVlIC1wIC0tZXhpdC1jb2RlIC1Tbm90LWZvdW5kIEhFQUReIEhFQUQgLS0gYgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtZmlsZXMnICcKKwllY2hvIDMgPj5jICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCBjICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIC0tY2FjaGVkIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVjayAtLWV4aXQtY29kZSByZXR1cm5zIDAgZm9yIG5vIGRpZmZlcmVuY2UnICcKKworCWdpdCBkaWZmIC0tY2hlY2sgLS1leGl0LWNvZGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZWNrIC0tZXhpdC1jb2RlIHJldHVybnMgMSBmb3IgYSBjbGVhbiBkaWZmZXJlbmNlJyAnCisKKwllY2hvICJnb29kIiA+IGEgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1jaGVjayAtLWV4aXQtY29kZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlY2sgLS1leGl0LWNvZGUgcmV0dXJucyAzIGZvciBhIGRpcnR5IGRpZmZlcmVuY2UnICcKKworCWVjaG8gImJhZCAgICIgPj4gYSAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMyBnaXQgZGlmZiAtLWNoZWNrIC0tZXhpdC1jb2RlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVjayB3aXRoIC0tbm8tcGFnZXIgcmV0dXJucyAyIGZvciBkaXJ0eSBkaWZmZXJlbmNlJyAnCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDIgZ2l0IC0tbm8tcGFnZXIgZGlmZiAtLWNoZWNrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc2hvdWxkIHRlc3Qgbm90IGp1c3QgdGhlIGxhc3QgbGluZScgJworCWVjaG8gIiIgPj5hICYmCisJdGVzdF9leHBlY3RfY29kZSAyIGdpdCAtLW5vLXBhZ2VyIGRpZmYgLS1jaGVjaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGRldGVjdHMgbGVmdG92ZXIgY29uZmxpY3QgbWFya2VycycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwllY2hvIGJpbmFyeSA+PmIgJiYKKwlnaXQgY29tbWl0IC1tICJzaWRlIiBiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCWdpdCBhZGQgYiAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgLS1uby1wYWdlciBkaWZmIC0tY2FjaGVkIC0tY2hlY2sgPnRlc3Qub3V0ICYmCisJdGVzdCAzID0gJChncmVwICJjb25mbGljdCBtYXJrZXIiIHRlc3Qub3V0IHwgd2MgLWwpICYmCisJZ2l0IHJlc2V0IC0taGFyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBob25vcnMgY29uZmxpY3QgbWFya2VyIGxlbmd0aCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvICI+Pj4+Pj4+IGJvbyIgPj5iICYmCisJZWNobyAiPT09PT09IiA+PmEgJiYKKwlnaXQgZGlmZiAtLWNoZWNrIGEgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDIgZ2l0IGRpZmYgLS1jaGVjayBiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gIj4+Pj4+Pj4+IGJvbyIgPj5iICYmCisJZWNobyAiPT09PT09PT0iID4+YSAmJgorCWdpdCBkaWZmIC0tY2hlY2sgJiYKKwllY2hvICJiIGNvbmZsaWN0LW1hcmtlci1zaXplPTgiID4uZ2l0YXR0cmlidXRlcyAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgZGlmZiAtLWNoZWNrIGIgJiYKKwlnaXQgZGlmZiAtLWNoZWNrIGEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoIGIvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkMDc3OTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2gKQEAgLTAsMCArMSwxMTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGN1c3RvbSBkaWZmIGZ1bmN0aW9uIG5hbWUgcGF0dGVybnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCSMgYSBub24tdHJpdmlhbCBjdXN0b20gcGF0dGVybgorCWdpdCBjb25maWcgZGlmZi5jdXN0b20xLmZ1bmNuYW1lICIhc3RhdGljCishU3RyaW5nCitbXiAJXS4qcy4qIiAmJgorCisJIyBhIGN1c3RvbSBwYXR0ZXJuIHdoaWNoIG1hdGNoZXMgdG8gZW5kIG9mIGxpbmUKKwlnaXQgY29uZmlnIGRpZmYuY3VzdG9tMi5mdW5jbmFtZSAiLi4uLi4uQmVlclwkIiAmJgorCisJIyBhbHRlcm5hdGlvbiBpbiBwYXR0ZXJuCisJZ2l0IGNvbmZpZyBkaWZmLmN1c3RvbTMuZnVuY25hbWUgIkJlZXIkIiAmJgorCWdpdCBjb25maWcgZGlmZi5jdXN0b20zLnhmdW5jbmFtZSAiXlsgCV0qKChwdWJsaWN8c3RhdGljKS4qKSQiICYmCisKKwkjIGZvciByZWdleHAgY29tcGlsYXRpb24gdGVzdHMKKwllY2hvIEEgPkEuamF2YSAmJgorCWVjaG8gQiA+Qi5qYXZhCisnCisKK2RpZmZwYXR0ZXJucz0iCisJYWRhCisJYmlidGV4CisJY3BwCisJY3NoYXJwCisJY3NzCisJZHRzCisJZWxpeGlyCisJZm9ydHJhbgorCWZvdW50YWluCisJZ29sYW5nCisJaHRtbAorCWphdmEKKwltYXJrZG93bgorCW1hdGxhYgorCW9iamMKKwlwYXNjYWwKKwlwZXJsCisJcGhwCisJcHl0aG9uCisJcnVieQorCXJ1c3QKKwl0ZXgKKwljdXN0b20xCisJY3VzdG9tMgorCWN1c3RvbTMKKyIKKworZm9yIHAgaW4gJGRpZmZwYXR0ZXJucworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJidWlsdGluICRwIHBhdHRlcm4gY29tcGlsZXMiICcKKwkJZWNobyAiKi5qYXZhIGRpZmY9JHAiID4uZ2l0YXR0cmlidXRlcyAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCBcCisJCQlBLmphdmEgQi5qYXZhIDI+bXNnICYmCisJCXRlc3RfaTE4bmdyZXAgISBmYXRhbCBtc2cgJiYKKwkJdGVzdF9pMThuZ3JlcCAhIGVycm9yIG1zZworCScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJidWlsdGluICRwIHdvcmRSZWdleCBwYXR0ZXJuIGNvbXBpbGVzIiAnCisJCWVjaG8gIiouamF2YSBkaWZmPSRwIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tbm8taW5kZXggLS13b3JkLWRpZmYgXAorCQkJQS5qYXZhIEIuamF2YSAyPm1zZyAmJgorCQl0ZXN0X2kxOG5ncmVwICEgZmF0YWwgbXNnICYmCisJCXRlc3RfaTE4bmdyZXAgISBlcnJvciBtc2cKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhc3QgcmVnZXhwIG11c3Qgbm90IGJlIG5lZ2F0ZWQnICcKKwllY2hvICIqLmphdmEgZGlmZj1qYXZhIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLmphdmEuZnVuY25hbWUgIiFzdGF0aWMiICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGRpZmYgLS1uby1pbmRleCBBLmphdmEgQi5qYXZhIDI+bXNnICYmCisJdGVzdF9pMThuZ3JlcCAiOiBMYXN0IGV4cHJlc3Npb24gbXVzdCBub3QgYmUgbmVnYXRlZDoiIG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBodW5rIGhlYWRlciB0ZXN0cycgJworCWZvciBpIGluICRkaWZmcGF0dGVybnMKKwlkbworCQllY2hvICIkaS0qIGRpZmY9JGkiCisJZG9uZSA+IC5naXRhdHRyaWJ1dGVzICYmCisKKwkjIGFkZCBhbGwgdGVzdCBmaWxlcyB0byB0aGUgaW5kZXgKKwkoCisJCWNkICIkVEVTVF9ESVJFQ1RPUlkiL3Q0MDE4ICYmCisJCWdpdCAtLWdpdC1kaXI9IiRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgYWRkIC4KKwkpICYmCisKKwkjIHBsYWNlIG1vZGlmaWVkIGZpbGVzIGluIHRoZSB3b3JrdHJlZQorCWZvciBpIGluICQoZ2l0IGxzLWZpbGVzKQorCWRvCisJCXNlZCAtZSAicy9DaGFuZ2VNZS9JV2FzQ2hhbmdlZC8iIDwiJFRFU1RfRElSRUNUT1JZL3Q0MDE4LyRpIiA+IiRpIiB8fCByZXR1cm4gMQorCWRvbmUKKycKKworIyBjaGVjayBlYWNoIGluZGl2aWR1YWwgZmlsZQorZm9yIGkgaW4gJChnaXQgbHMtZmlsZXMpCitkbworCWlmIGdyZXAgYnJva2VuICIkaSIgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQlyZXN1bHQ9ZmFpbHVyZQorCWVsc2UKKwkJcmVzdWx0PXN1Y2Nlc3MKKwlmaQorCXRlc3RfZXhwZWN0XyRyZXN1bHQgImh1bmsgaGVhZGVyOiAkaSIgIgorCQlnaXQgZGlmZiAtVTEgJGkgPmFjdHVhbCAmJgorCQlncmVwICdAQCAuKiBAQC4qUklHSFQnIGFjdHVhbAorCSIKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDE4L1JFQURNRSBiL3QvdDQwMTgvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4M2UwMWNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9SRUFETUUKQEAgLTAsMCArMSwxOCBAQAorSG93IHRvIHdyaXRlIFJJR0hUIHRlc3QgY2FzZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luc2VydCB0aGUgd29yZCAiQ2hhbmdlTWUiIChleGFjdGx5IHRoaXMgZm9ybSkgYXQgYSBkaXN0YW5jZSBvZgorYXQgbGVhc3QgdHdvIGxpbmVzIGZyb20gdGhlIGxpbmUgdGhhdCBtdXN0IGFwcGVhciBpbiB0aGUgaHVuayBoZWFkZXIuCisKK1RoZSB0ZXh0IHRoYXQgbXVzdCBhcHBlYXIgaW4gdGhlIGh1bmsgaGVhZGVyIG11c3QgY29udGFpbiB0aGUgd29yZAorInJpZ2h0IiwgYnV0IGluIGFsbCB1cHBlci1jYXNlLCBsaWtlIGluIHRoZSB0aXRsZSBhYm92ZS4KKworVG8gbWFyayBhIHRlc3QgY2FzZSB0aGF0IGhpZ2hsaWdodHMgYSBtYWxmdW5jdGlvbiwgaW5zZXJ0IHRoZSB3b3JkCitCUk9LRU4gaW4gYWxsIGxvd2VyLWNhc2Ugc29tZXdoZXJlIGluIHRoZSBmaWxlLgorCitUaGlzIHRleHQgaXMgYSBiaXQgdHdpc3RlZCBhbmQgb3V0IG9mIG9yZGVyLCBidXQgaXQgaXMgaXRzZWxmIGEKK3Rlc3QgY2FzZSBmb3IgdGhlIGRlZmF1bHQgaHVuayBoZWFkZXIgcGF0dGVybi4gS25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKK2lmIHlvdSBjaGFuZ2UgaXQuCisKK0JUVywgdGhpcyB0ZXN0cyB0aGF0IHRoZSBoZWFkIGxpbmUgZ29lcyB0byB0aGUgaHVuayBoZWFkZXIsIG5vdCB0aGUgbGluZQorb2YgZXF1YWwgc2lnbnMuCmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1jKystZnVuY3Rpb24gYi90L3Q0MDE4L2NwcC1jKystZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVlNmJiZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLWMrKy1mdW5jdGlvbgpAQCAtMCwwICsxLDQgQEAKK0l0ZW0gUklHSFQ6OkRvU29tZXRoaW5nKCBBcmdzIHdpdGhfc3BhY2VzICkKK3sKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLWNsYXNzLWNvbnN0cnVjdG9yIGIvdC90NDAxOC9jcHAtY2xhc3MtY29uc3RydWN0b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0ZjExNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLWNsYXNzLWNvbnN0cnVjdG9yCkBAIC0wLDAgKzEsNCBAQAorSXRlbTo6SXRlbShpbnQgUklHSFQpCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1jbGFzcy1jb25zdHJ1Y3Rvci1tZW0taW5pdCBiL3QvdDQwMTgvY3BwLWNsYXNzLWNvbnN0cnVjdG9yLW1lbS1pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YTY5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1jbGFzcy1jb25zdHJ1Y3Rvci1tZW0taW5pdApAQCAtMCwwICsxLDUgQEAKK0l0ZW06Okl0ZW0oaW50IFJJR0hUKSA6CisJbWVtYmVyKDApCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1jbGFzcy1kZWZpbml0aW9uIGIvdC90NDAxOC9jcHAtY2xhc3MtZGVmaW5pdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWI2MWRhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtY2xhc3MtZGVmaW5pdGlvbgpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFJJR0hUCit7CisJaW50IENoYW5nZU1lOworfTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLWNsYXNzLWRlZmluaXRpb24tZGVyaXZlZCBiL3QvdDQwMTgvY3BwLWNsYXNzLWRlZmluaXRpb24tZGVyaXZlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjk4Y2QwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtY2xhc3MtZGVmaW5pdGlvbi1kZXJpdmVkCkBAIC0wLDAgKzEsNSBAQAorY2xhc3MgUklHSFQgOgorCXB1YmxpYyBCYXNlY2xhc3MKK3sKKwlpbnQgQ2hhbmdlTWU7Cit9OwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtY2xhc3MtZGVzdHJ1Y3RvciBiL3QvdDQwMTgvY3BwLWNsYXNzLWRlc3RydWN0b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4NzY2NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLWNsYXNzLWRlc3RydWN0b3IKQEAgLTAsMCArMSw0IEBACitSSUdIVDo6flJJR0hUKCkKK3sKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLWZ1bmN0aW9uLXJldHVybmluZy1nbG9iYWwtdHlwZSBiL3QvdDQwMTgvY3BwLWZ1bmN0aW9uLXJldHVybmluZy1nbG9iYWwtdHlwZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDg0ZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtZnVuY3Rpb24tcmV0dXJuaW5nLWdsb2JhbC10eXBlCkBAIC0wLDAgKzEsNCBAQAorOjpJdGVtIGdldDo6aXQ6OlJJR0hUKCkKK3sKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLWZ1bmN0aW9uLXJldHVybmluZy1uZXN0ZWQgYi90L3Q0MDE4L2NwcC1mdW5jdGlvbi1yZXR1cm5pbmctbmVzdGVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NzUwYWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1mdW5jdGlvbi1yZXR1cm5pbmctbmVzdGVkCkBAIC0wLDAgKzEsNSBAQAorZ2V0OjpJdGVtIGdldDo6aXQ6OlJJR0hUKCkKK3sKKwlDaGFuZ2VNZTsKK30KKwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtZnVuY3Rpb24tcmV0dXJuaW5nLXBvaW50ZXIgYi90L3Q0MDE4L2NwcC1mdW5jdGlvbi1yZXR1cm5pbmctcG9pbnRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjE1NjU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtZnVuY3Rpb24tcmV0dXJuaW5nLXBvaW50ZXIKQEAgLTAsMCArMSw0IEBACitjb25zdCBjaGFyICpnZXRfaXRfUklHSFQoY2hhciAqcHRyKQoreworCUNoYW5nZU1lOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtZnVuY3Rpb24tcmV0dXJuaW5nLXJlZmVyZW5jZSBiL3QvdDQwMTgvY3BwLWZ1bmN0aW9uLXJldHVybmluZy1yZWZlcmVuY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFiMDUxZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLWZ1bmN0aW9uLXJldHVybmluZy1yZWZlcmVuY2UKQEAgLTAsMCArMSw0IEBACitzdHJpbmcmIGdldDo6aXQ6OlJJR0hUKGNoYXIgKnB0cikKK3sKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLWdudS1zdHlsZS1mdW5jdGlvbiBiL3QvdDQwMTgvY3BwLWdudS1zdHlsZS1mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGM3Yzc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtZ251LXN0eWxlLWZ1bmN0aW9uCkBAIC0wLDAgKzEsNSBAQAorY29uc3QgY2hhciAqCitSSUdIVChpbnQgYXJnKQoreworCUNoYW5nZU1lOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtbmFtZXNwYWNlLWRlZmluaXRpb24gYi90L3Q0MDE4L2NwcC1uYW1lc3BhY2UtZGVmaW5pdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzQ5OTgwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtbmFtZXNwYWNlLWRlZmluaXRpb24KQEAgLTAsMCArMSw0IEBACituYW1lc3BhY2UgUklHSFQKK3sKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLW9wZXJhdG9yLWRlZmluaXRpb24gYi90L3Q0MDE4L2NwcC1vcGVyYXRvci1kZWZpbml0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhY2Q4MjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1vcGVyYXRvci1kZWZpbml0aW9uCkBAIC0wLDAgKzEsNCBAQAorVmFsdWUgb3BlcmF0b3IrKFZhbHVlIExFRlQsIFZhbHVlIFJJR0hUKQoreworCUNoYW5nZU1lOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtc2tpcC1hY2Nlc3Mtc3BlY2lmaWVycyBiL3QvdDQwMTgvY3BwLXNraXAtYWNjZXNzLXNwZWNpZmllcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0YTlkYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLXNraXAtYWNjZXNzLXNwZWNpZmllcnMKQEAgLTAsMCArMSw4IEBACitjbGFzcyBSSUdIVCA6IHB1YmxpYyBCYXNlY2xhc3MKK3sKK3B1YmxpYzoKK3Byb3RlY3RlZDoKK3ByaXZhdGU6CisJdm9pZCBEb1NvbWV0aGluZygpOworCWludCBDaGFuZ2VNZTsKK307CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1za2lwLWNvbW1lbnQtYmxvY2sgYi90L3Q0MDE4L2NwcC1za2lwLWNvbW1lbnQtYmxvY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgwMGI5OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLXNraXAtY29tbWVudC1ibG9jawpAQCAtMCwwICsxLDkgQEAKK3N0cnVjdCBpdGVtIFJJR0hUKGludCBpKQorLy8gRG8gbm90CisvLyBwaWNrIHVwCisvKiB0aGVzZQorKiogY29tbWVudHMuCisqLworeworCUNoYW5nZU1lOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtc2tpcC1sYWJlbHMgYi90L3Q0MDE4L2NwcC1za2lwLWxhYmVscwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWMxMGFiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtc2tpcC1sYWJlbHMKQEAgLTAsMCArMSw4IEBACit2b2lkIFJJR0hUICh2b2lkKQoreworcmVwZWF0OgkJLy8gQysrIGNvbW1lbnQKK25leHQ6CQkvKiBDIGNvbW1lbnQgKi8KKwlkb19zb21ldGhpbmcoKTsKKworCUNoYW5nZU1lOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtc3RydWN0LWRlZmluaXRpb24gYi90L3Q0MDE4L2NwcC1zdHJ1Y3QtZGVmaW5pdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjFjNTlmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtc3RydWN0LWRlZmluaXRpb24KQEAgLTAsMCArMSw5IEBACitzdHJ1Y3QgUklHSFQgeworCXVuc2lnbmVkCisJLyogdGhpcyBiaXQgZmllbGQgbG9va3MgbGlrZSBhIGxhYmVsIGFuZCBzaG91bGQgbm90IGJlIHBpY2tlZCB1cCAqLworCQlkZWNveV9iaXRmaWVsZDogMiwKKwkJbW9yZSA6IDE7CisJaW50IGZpbGxlcjsKKworCWludCBDaGFuZ2VNZTsKK307CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1zdHJ1Y3Qtc2luZ2xlLWxpbmUgYi90L3Q0MDE4L2NwcC1zdHJ1Y3Qtc2luZ2xlLWxpbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkZTVmYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLXN0cnVjdC1zaW5nbGUtbGluZQpAQCAtMCwwICsxLDcgQEAKK3ZvaWQgd3JvbmcoKQoreworfQorCitzdHJ1Y3QgUklHSFRfaXRlcmF0b3JfdGFnIHt9OworCitpbnQgQ2hhbmdlTWU7CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC10ZW1wbGF0ZS1mdW5jdGlvbi1kZWZpbml0aW9uIGIvdC90NDAxOC9jcHAtdGVtcGxhdGUtZnVuY3Rpb24tZGVmaW5pdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2RmNWJhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtdGVtcGxhdGUtZnVuY3Rpb24tZGVmaW5pdGlvbgpAQCAtMCwwICsxLDQgQEAKK3RlbXBsYXRlPGNsYXNzIFQ+IGludCBSSUdIVChUIGFyZykKK3sKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLXVuaW9uLWRlZmluaXRpb24gYi90L3Q0MDE4L2NwcC11bmlvbi1kZWZpbml0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzk0ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC11bmlvbi1kZWZpbml0aW9uCkBAIC0wLDAgKzEsNCBAQAordW5pb24gUklHSFQgeworCWRvdWJsZSB2OworCWludCBDaGFuZ2VNZTsKK307CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC12b2lkLWMtZnVuY3Rpb24gYi90L3Q0MDE4L2NwcC12b2lkLWMtZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzMDgxZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLXZvaWQtYy1mdW5jdGlvbgpAQCAtMCwwICsxLDQgQEAKK3ZvaWQgUklHSFQgKHZvaWQpCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2Nzcy1icmFjZS1pbi1jb2wtMSBiL3QvdDQwMTgvY3NzLWJyYWNlLWluLWNvbC0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MzE1NzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2Nzcy1icmFjZS1pbi1jb2wtMQpAQCAtMCwwICsxLDUgQEAKK1JJR0hUIGxhYmVsLmNvbnRyb2wtbGFiZWwKK3sKKyAgICBtYXJnaW4tdG9wOiAxMHB4IWltcG9ydGFudDsKKyAgICBib3JkZXIgOiAxMHB4IENoYW5nZU1lICNDNkM2QzY7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2Nzcy1jb2xvbi1lb2wgYi90L3Q0MDE4L2Nzcy1jb2xvbi1lb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEzMDU1MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3NzLWNvbG9uLWVvbApAQCAtMCwwICsxLDQgQEAKK1JJR0hUIGgxIHsKK2NvbG9yOgorQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2Nzcy1jb2xvbi1zZWxlY3RvciBiL3QvdDQwMTgvY3NzLWNvbG9uLXNlbGVjdG9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZDcxZmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2Nzcy1jb2xvbi1zZWxlY3RvcgpAQCAtMCwwICsxLDUgQEAKK1JJR0hUIGE6aG92ZXIgeworICAgIG1hcmdpbi10b3A6CisgICAgMTBweCFpbXBvcnRhbnQ7CisgICAgYm9yZGVyIDogMTBweCBDaGFuZ2VNZSAjQzZDNkM2OworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jc3MtY29tbW9uIGIvdC90NDAxOC9jc3MtY29tbW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZWQ3NTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2Nzcy1jb21tb24KQEAgLTAsMCArMSw0IEBACitSSUdIVCBsYWJlbC5jb250cm9sLWxhYmVsIHsKKyAgICBtYXJnaW4tdG9wOiAxMHB4IWltcG9ydGFudDsKKyAgICBib3JkZXIgOiAxMHB4IENoYW5nZU1lICNDNkM2QzY7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2Nzcy1sb25nLXNlbGVjdG9yLWxpc3QgYi90L3Q0MDE4L2Nzcy1sb25nLXNlbGVjdG9yLWxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NjZDI1ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3NzLWxvbmctc2VsZWN0b3ItbGlzdApAQCAtMCwwICsxLDYgQEAKK3AuaGVhZGVyLAorbGFiZWwuY29udHJvbC1sYWJlbCwKK2RpdiB1bCNSSUdIVCB7CisgICAgbWFyZ2luLXRvcDogMTBweCFpbXBvcnRhbnQ7CisgICAgYm9yZGVyIDogMTBweCBDaGFuZ2VNZSAjQzZDNkM2OworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jc3MtcHJvcC1zYW5zLWluZGVudCBiL3QvdDQwMTgvY3NzLXByb3Atc2Fucy1pbmRlbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTllM2M4NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3NzLXByb3Atc2Fucy1pbmRlbnQKQEAgLTAsMCArMSw1IEBACitSSUdIVCwgbGFiZWwuY29udHJvbC1sYWJlbCB7CittYXJnaW4tdG9wOiAxMHB4IWltcG9ydGFudDsKK3BhZGRpbmc6IDA7Citib3JkZXIgOiAxMHB4IENoYW5nZU1lICNDNkM2QzY7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2Nzcy1zaG9ydC1zZWxlY3Rvci1saXN0IGIvdC90NDAxOC9jc3Mtc2hvcnQtc2VsZWN0b3ItbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTBiZGVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jc3Mtc2hvcnQtc2VsZWN0b3ItbGlzdApAQCAtMCwwICsxLDQgQEAKK2xhYmVsLmNvbnRyb2wsIGRpdiB1bCNSSUdIVCB7CisgICAgbWFyZ2luLXRvcDogMTBweCFpbXBvcnRhbnQ7CisgICAgYm9yZGVyIDogMTBweCBDaGFuZ2VNZSAjQzZDNkM2OworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jc3MtdHJhaWxpbmctc3BhY2UgYi90L3Q0MDE4L2Nzcy10cmFpbGluZy1zcGFjZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmI1NjA2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jc3MtdHJhaWxpbmctc3BhY2UKQEAgLTAsMCArMSw1IEBACitSSUdIVCBsYWJlbC5jb250cm9sLWxhYmVsIHsKKyAgICBtYXJnaW46MTBweDsgICAKKyAgICBwYWRkaW5nOjEwcHg7CisgICAgYm9yZGVyIDogMTBweCBDaGFuZ2VNZSAjQzZDNkM2OworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jdXN0b20xLXBhdHRlcm4gYi90L3Q0MDE4L2N1c3RvbTEtcGF0dGVybgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGZkNTlmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jdXN0b20xLXBhdHRlcm4KQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIEJlZXIKK3sKKwlpbnQgc3BlY2lhbCwgUklHSFQ7CisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKKwl7CisJCVN0cmluZyBzPSIgIjsKKwkJZm9yKGludCB4ID0gOTk7IHggPiAwOyB4LS0pCisJCXsKKwkJCVN5c3RlbS5vdXQucHJpbnQoeCArICIgYm90dGxlcyBvZiBiZWVyIG9uIHRoZSB3YWxsICIKKwkJCQkrIHggKyAiIGJvdHRsZXMgb2YgYmVlclxuIiAvLyBDaGFuZ2VNZQorCQkJCSsgIlRha2Ugb25lIGRvd24sIHBhc3MgaXQgYXJvdW5kLCAiICsgKHggLSAxKQorCQkJCSsgIiBib3R0bGVzIG9mIGJlZXIgb24gdGhlIHdhbGwuXG4iKTsKKwkJfQorCQlTeXN0ZW0ub3V0LnByaW50KCJHbyB0byB0aGUgc3RvcmUsIGJ1eSBzb21lIG1vcmUsXG4iCisJCQkrICI5OSBib3R0bGVzIG9mIGJlZXIgb24gdGhlIHdhbGwuXG4iKTsKKwl9Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2N1c3RvbTItbWF0Y2gtdG8tZW5kLW9mLWxpbmUgYi90L3Q0MDE4L2N1c3RvbTItbWF0Y2gtdG8tZW5kLW9mLWxpbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4YWMzMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3VzdG9tMi1tYXRjaC10by1lbmQtb2YtbGluZQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBSSUdIVF9CZWVyCit7CisJaW50IHNwZWNpYWw7CisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKKwl7CisJCVN5c3RlbS5vdXQucHJpbnQoIkNoYW5nZU1lIik7CisJfQorfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jdXN0b20zLWFsdGVybmF0aW9uLWluLXBhdHRlcm4gYi90L3Q0MDE4L2N1c3RvbTMtYWx0ZXJuYXRpb24taW4tcGF0dGVybgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjM3NjljCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jdXN0b20zLWFsdGVybmF0aW9uLWluLXBhdHRlcm4KQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIEJlZXIKK3sKKwlpbnQgc3BlY2lhbDsKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgUklHSFRbXSkKKwl7CisJCVN0cmluZyBzPSIgIjsKKwkJZm9yKGludCB4ID0gOTk7IHggPiAwOyB4LS0pCisJCXsKKwkJCVN5c3RlbS5vdXQucHJpbnQoeCArICIgYm90dGxlcyBvZiBiZWVyIG9uIHRoZSB3YWxsICIKKwkJCQkrIHggKyAiIGJvdHRsZXMgb2YgYmVlclxuIiAvLyBDaGFuZ2VNZQorCQkJCSsgIlRha2Ugb25lIGRvd24sIHBhc3MgaXQgYXJvdW5kLCAiICsgKHggLSAxKQorCQkJCSsgIiBib3R0bGVzIG9mIGJlZXIgb24gdGhlIHdhbGwuXG4iKTsKKwkJfQorCQlTeXN0ZW0ub3V0LnByaW50KCJHbyB0byB0aGUgc3RvcmUsIGJ1eSBzb21lIG1vcmUsXG4iCisJCQkrICI5OSBib3R0bGVzIG9mIGJlZXIgb24gdGhlIHdhbGwuXG4iKTsKKwl9Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2R0cy1sYWJlbHMgYi90L3Q0MDE4L2R0cy1sYWJlbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIxZWY4NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZHRzLWxhYmVscwpAQCAtMCwwICsxLDkgQEAKKy8geworCWxhYmVsXzE6IG5vZGUxQGZmMDAgeworCQlsYWJlbDI6IFJJR0hUIHsKKwkJCXZlbmRvcixzb21lLXByb3BlcnR5OworCisJCQlDaGFuZ2VNZSA9IDwweDQ1LTMwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZHRzLW5vZGUtdW5pdGxlc3MgYi90L3Q0MDE4L2R0cy1ub2RlLXVuaXRsZXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1Mjg3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2R0cy1ub2RlLXVuaXRsZXNzCkBAIC0wLDAgKzEsOCBAQAorLyB7CisJbGFiZWxfMTogbm9kZTEgeworCQlSSUdIVCB7CisJCQlwcm9wLWFycmF5ID0gPDE+LCA8ND47CisJCQlDaGFuZ2VNZSA9IDwweGZmZWVkZDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZHRzLW5vZGVzIGIvdC90NDAxOC9kdHMtbm9kZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE0MzM0YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZHRzLW5vZGVzCkBAIC0wLDAgKzEsOCBAQAorLyB7CisJbGFiZWxfMTogbm9kZTFAZmYwMCB7CisJCVJJR0hUQGRlYWRmMDAsNDAwMCB7CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCUNoYW5nZU1lID0gPDB4ZmZlZWRkMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9kdHMtbm9kZXMtYm9vbGVhbi1wcm9wIGIvdC90NDAxOC9kdHMtbm9kZXMtYm9vbGVhbi1wcm9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYzZiNWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2R0cy1ub2Rlcy1ib29sZWFuLXByb3AKQEAgLTAsMCArMSw5IEBACisvIHsKKwlsYWJlbF8xOiBub2RlMUBmZjAwIHsKKwkJUklHSFRAZGVhZGYwMCw0MDAwIHsKKwkJCWJvb2xlYW4tcHJvcDE7CisKKwkJCUNoYW5nZU1lOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9kdHMtbm9kZXMtY29tbWVudDEgYi90L3Q0MDE4L2R0cy1ub2Rlcy1jb21tZW50MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTlkZmNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9kdHMtbm9kZXMtY29tbWVudDEKQEAgLTAsMCArMSw4IEBACisvIHsKKwlsYWJlbF8xOiBub2RlMUBmZjAwIHsKKwkJUklHSFRAZGVhZGYwMCw0MDAwIC8qICZhIGNvbW1lbnQgKi8geworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlDaGFuZ2VNZSA9IDwweGZmZWVkZDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZHRzLW5vZGVzLWNvbW1lbnQyIGIvdC90NDAxOC9kdHMtbm9kZXMtY29tbWVudDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdlOTcxOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZHRzLW5vZGVzLWNvbW1lbnQyCkBAIC0wLDAgKzEsOCBAQAorLyB7CisJbGFiZWxfMTogbm9kZTFAZmYwMCB7CisJCVJJR0hUQGRlYWRmMDAsNDAwMCB7IC8qIGEgdHJhaWxpbmcgY29tbWVudCAqLyAKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJQ2hhbmdlTWUgPSA8MHhmZmVlZGQwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS90L3Q0MDE4L2R0cy1ub2Rlcy1tdWx0aWxpbmUtcHJvcCBiL3QvdDQwMTgvZHRzLW5vZGVzLW11bHRpbGluZS1wcm9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MmQ1OGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2R0cy1ub2Rlcy1tdWx0aWxpbmUtcHJvcApAQCAtMCwwICsxLDEzIEBACisvIHsKKwlsYWJlbF8xOiBub2RlMUBmZjAwIHsKKwkJUklHSFRAZGVhZGYwMCw0MDAwIHsKKwkJCW11bHRpbGluZXByb3AgPSA8Mz4sCisJCQkJCTw0PiwKKwkJCQkJPDU+LAorCQkJCQk8Nj4sCisJCQkJCTw3PjsKKworCQkJQ2hhbmdlTWUgPSA8MHhmZmVlZGQwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS90L3Q0MDE4L2R0cy1yZWZlcmVuY2UgYi90L3Q0MDE4L2R0cy1yZWZlcmVuY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYwYzg3ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZHRzLXJlZmVyZW5jZQpAQCAtMCwwICsxLDkgQEAKKyZsYWJlbF8xIHsKKwlURVNUID0gPDQ1NT47Cit9OworCismUklHSFQgeworCXZlbmRvcixzb21lLXByb3BlcnR5OworCisJQ2hhbmdlTWUgPSA8MHg0NS0zMD47Cit9OwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9kdHMtcm9vdCBiL3QvdDQwMTgvZHRzLXJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1M2I4MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZHRzLXJvb3QKQEAgLTAsMCArMSw1IEBACisvIHsgUklHSFQgLyogVGVjaG5pY2FsbHkganVzdCBzdXBwb3NlZCB0byBiZSBhIHNsYXNoIGFuZCBicmFjZSAqLworCSNzaXplLWNlbGxzID0gPDE+OworCisJQ2hhbmdlTWUgPSA8MHhmZmVlZGQwMD47Cit9OwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9kdHMtcm9vdC1jb21tZW50IGIvdC90NDAxOC9kdHMtcm9vdC1jb21tZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzM2E2MjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2R0cy1yb290LWNvbW1lbnQKQEAgLTAsMCArMSw4IEBACisvIHsgUklHSFQgLyogVGVjaG5pY2FsbHkganVzdCBzdXBwb3NlZCB0byBiZSBhIHNsYXNoIGFuZCBicmFjZSAqLworCSNzaXplLWNlbGxzID0gPDE+OworCisJLyogVGhpcyBjb21tZW50IHNob3VsZCBiZSBpZ25vcmVkICovCisKKwlzb21lLXByb3BlcnR5ID0gPDQwKzI+OworCUNoYW5nZU1lID0gPDB4ZmZlZWRkMDA+OworfTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLWRvLW5vdC1waWNrLWVuZCBiL3QvdDQwMTgvZWxpeGlyLWRvLW5vdC1waWNrLWVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWUwOGJhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItZG8tbm90LXBpY2stZW5kCkBAIC0wLDAgKzEsNSBAQAorZGVmbW9kdWxlIFJJR0hUIGRvCitlbmQKKyMKKyMKKyMgQ2hhbmdlTWU7IGRvIG5vdCBwaWNrIHVwICdlbmQnIGxpbmUKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLWV4LXVuaXQtdGVzdCBiL3QvdDQwMTgvZWxpeGlyLWV4LXVuaXQtdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTYwYTJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItZXgtdW5pdC10ZXN0CkBAIC0wLDAgKzEsNiBAQAorZGVmbW9kdWxlIFRlc3QgZG8KKyAgdGVzdCAiUklHSFQiIGRvCisgICAgYXNzZXJ0IHRydWUgPT0gdHJ1ZQorICAgIGFzc2VydCBDaGFuZ2VNZQorICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvdC90NDAxOC9lbGl4aXItZnVuY3Rpb24gYi90L3Q0MDE4L2VsaXhpci1mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDUyZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItZnVuY3Rpb24KQEAgLTAsMCArMSw1IEBACitkZWYgZnVuY3Rpb24oUklHSFQsIGFyZykgZG8KKyAgIyBjb21tZW50CisgICMgY29tbWVudAorICBDaGFuZ2VNZQorZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1tYWNybyBiL3QvdDQwMTgvZWxpeGlyLW1hY3JvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTI1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1tYWNybwpAQCAtMCwwICsxLDUgQEAKK2RlZm1hY3JvIGZvbyhSSUdIVCkgZG8KKyAgIyBDb2RlCisgICMgQ29kZQorICBDaGFuZ2VNZQorZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1tb2R1bGUgYi90L3Q0MDE4L2VsaXhpci1tb2R1bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhNGU3YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLW1vZHVsZQpAQCAtMCwwICsxLDkgQEAKK2RlZm1vZHVsZSBSSUdIVCBkbworICBAbW9kdWxlZG9jICIiIgorICBGb28gYmFyCisgICIiIgorCisgIGRlZiBDaGFuZ2VNZShhKSB3aGVyZSBpc19tYXAoYSkgZG8KKyAgICBhCisgIGVuZAorZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1tb2R1bGUtZnVuYyBiL3QvdDQwMTgvZWxpeGlyLW1vZHVsZS1mdW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OTEwZDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1tb2R1bGUtZnVuYwpAQCAtMCwwICsxLDggQEAKK2RlZm1vZHVsZSBGb28gZG8KKyAgZGVmIGZ1bihSSUdIVCkgZG8KKyAgICAgIyBDb2RlCisgICAgICMgQ29kZQorICAgICAjIENvZGUKKyAgICAgQ2hhbmdlTWUKKyAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLW5lc3RlZC1tb2R1bGUgYi90L3Q0MDE4L2VsaXhpci1uZXN0ZWQtbW9kdWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MWViYzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1uZXN0ZWQtbW9kdWxlCkBAIC0wLDAgKzEsOSBAQAorZGVmbW9kdWxlIE15QXBwLlJJR0hUIGRvCisgIEBtb2R1bGVkb2MgIiIiCisgIEZvbyBiYXIKKyAgIiIiCisKKyAgZGVmIENoYW5nZU1lKGEpIHdoZXJlIGlzX21hcChhKSBkbworICAgIGEKKyAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLXByaXZhdGUtZnVuY3Rpb24gYi90L3Q0MDE4L2VsaXhpci1wcml2YXRlLWZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYWJlMzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1wcml2YXRlLWZ1bmN0aW9uCkBAIC0wLDAgKzEsNSBAQAorZGVmcCBmdW5jdGlvbihSSUdIVCwgYXJnKSBkbworICAjIGNvbW1lbnQKKyAgIyBjb21tZW50CisgIENoYW5nZU1lCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLXByb3RvY29sIGIvdC90NDAxOC9lbGl4aXItcHJvdG9jb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q5MTczNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLXByb3RvY29sCkBAIC0wLDAgKzEsNiBAQAorZGVmcHJvdG9jb2wgUklHSFQgZG8KKyAgQGRvYyAiIiIKKyAgQ2FsY3VsYXRlcyB0aGUgc2l6ZSAoYW5kIG5vdCB0aGUgbGVuZ3RoISkgb2YgYSBkYXRhIHN0cnVjdHVyZQorICAiIiIKKyAgZGVmIHNpemUoZGF0YSwgQ2hhbmdlTWUpCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLXByb3RvY29sLWltcGxlbWVudGF0aW9uIGIvdC90NDAxOC9lbGl4aXItcHJvdG9jb2wtaW1wbGVtZW50YXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyMzRiYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLXByb3RvY29sLWltcGxlbWVudGF0aW9uCkBAIC0wLDAgKzEsNSBAQAorZGVmaW1wbCBSSUdIVCBkbworICAjIERvY3MKKyAgIyBEb2NzCisgIGRlZiBmb28oQ2hhbmdlTWUpLCBkbzogOm9rCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZm91bnRhaW4tc2NlbmUgYi90L3Q0MDE4L2ZvdW50YWluLXNjZW5lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMzI1N2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2ZvdW50YWluLXNjZW5lCkBAIC0wLDAgKzEsNCBAQAorRVhULiBTVFJFRVQgUklHSFQgT1VUU0lERSAtIERBWQorCitDSEFSQUNURVIKK1lvdSBkaWRuJ3Qgc2F5IHRoZSBtYWdpYyBwaHJhc2UsICJDaGFuZ2VNZSIuCmRpZmYgLS1naXQgYS90L3Q0MDE4L2dvbGFuZy1jb21wbGV4LWZ1bmN0aW9uIGIvdC90NDAxOC9nb2xhbmctY29tcGxleC1mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDU3ZGNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9nb2xhbmctY29tcGxleC1mdW5jdGlvbgpAQCAtMCwwICsxLDggQEAKK3R5cGUgVGVzdCBzdHJ1Y3QgeworCWEgVHlwZQorfQorCitmdW5jICh0ICpUZXN0KSBSSUdIVChhIFR5cGUpIChUeXBlLCBlcnJvcikgeworCXQuYSA9IGEKKwlyZXR1cm4gQ2hhbmdlTWUsIG5pbAorfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9nb2xhbmctZnVuYyBiL3QvdDQwMTgvZ29sYW5nLWZ1bmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5YzlhYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZ29sYW5nLWZ1bmMKQEAgLTAsMCArMSw0IEBACitmdW5jIFJJR0hUKCkgeworCWEgOj0gNQorCWIgOj0gQ2hhbmdlTWUKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvZ29sYW5nLWludGVyZmFjZSBiL3QvdDQwMTgvZ29sYW5nLWludGVyZmFjZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTNiZWRlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9nb2xhbmctaW50ZXJmYWNlCkBAIC0wLDAgKzEsNCBAQAordHlwZSBSSUdIVCBpbnRlcmZhY2UgeworCWEoKSBUeXBlCisJYigpIENoYW5nZU1lCit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2dvbGFuZy1sb25nLWZ1bmMgYi90L3Q0MDE4L2dvbGFuZy1sb25nLWZ1bmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMzYTc3YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZ29sYW5nLWxvbmctZnVuYwpAQCAtMCwwICsxLDUgQEAKK2Z1bmMgUklHSFQoYVZlcnlWZXJ5VmVyeUxvbmdWYXJpYWJsZU5hbWUgQVZlcnlWZXJ5VmVyeUxvbmdUeXBlLAorCWFub3RoZXJMb25nVmFyaWFibGVOYW1lIEFub3RoZXJMb25nVHlwZSkgeworCWEgOj0gNQorCWIgOj0gQ2hhbmdlTWUKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvZ29sYW5nLXN0cnVjdCBiL3QvdDQwMTgvZ29sYW5nLXN0cnVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGVkYTc3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9nb2xhbmctc3RydWN0CkBAIC0wLDAgKzEsNCBAQAordHlwZSBSSUdIVCBzdHJ1Y3QgeworCWEgVHlwZQorCWIgQ2hhbmdlTWUKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvamF2YS1jbGFzcy1tZW1iZXItZnVuY3Rpb24gYi90L3Q0MDE4L2phdmEtY2xhc3MtbWVtYmVyLWZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OGJjN2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2phdmEtY2xhc3MtbWVtYmVyLWZ1bmN0aW9uCkBAIC0wLDAgKzEsOCBAQAorcHVibGljIGNsYXNzIEJlZXIKK3sKKwlpbnQgc3BlY2lhbDsKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgUklHSFRbXSkKKwl7CisJCVN5c3RlbS5vdXQucHJpbnQoIkNoYW5nZU1lIik7CisJfQorfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9tYXJrZG93bi1oZWFkaW5nLWluZGVudGVkIGIvdC90NDAxOC9tYXJrZG93bi1oZWFkaW5nLWluZGVudGVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTFjMmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L21hcmtkb3duLWhlYWRpbmctaW5kZW50ZWQKQEAgLTAsMCArMSw2IEBACitJbmRlbnRlZCBoZWFkaW5ncyBhcmUgYWxsb3dlZCwgYXMgbG9uZyBhcyB0aGUgaW5kZW50IGlzIG5vIG1vcmUgdGhhbiAzIHNwYWNlcy4KKworICAgIyMjIFJJR0hUCisKKy0gc29tZXRoaW5nCistIENoYW5nZU1lCmRpZmYgLS1naXQgYS90L3Q0MDE4L21hcmtkb3duLWhlYWRpbmctbm9uLWhlYWRpbmdzIGIvdC90NDAxOC9tYXJrZG93bi1oZWFkaW5nLW5vbi1oZWFkaW5ncwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDc5YzFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9tYXJrZG93bi1oZWFkaW5nLW5vbi1oZWFkaW5ncwpAQCAtMCwwICsxLDE3IEBACitIZWFkaW5ncyBjYW4gYmUgcmlnaHQgbmV4dCB0byBvdGhlciBsaW5lcyBvZiB0aGUgZmlsZToKKyMgUklHSFQKK0luZGVudHMgb2YgZm91ciBvciBtb3JlIHNwYWNlcyBtYWtlIGEgY29kZSBibG9jazoKKworICAgICMgY29kZSBjb21tZW50LCBub3QgaGVhZGluZworCitJZiB0aGVyZSdzIG5vIHNwYWNlIGFmdGVyIHRoZSBmaW5hbCBoYXNoLCBpdCdzIG5vdCBhIGhlYWRpbmc6CisKKyNoYXNodGFnCisKK1NlcXVlbmNlcyBvZiBtb3JlIHRoYW4gNiBoYXNoZXMgZG9uJ3QgbWFrZSBhIGhlYWRpbmc6CisKKyMjIyMjIyMgb3Zlci1lbnRodXNpYXN0aWMgaGVhZGluZworCitTbyB0aGUgZGV0ZWN0ZWQgaGVhZGluZyBzaG91bGQgYmUgcmlnaHQgdXAgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZmlsZS4KKworQ2hhbmdlTWUKZGlmZiAtLWdpdCBhL3QvdDQwMTgvbWF0bGFiLWNsYXNzLWRlZmluaXRpb24gYi90L3Q0MDE4L21hdGxhYi1jbGFzcy1kZWZpbml0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZGFlZGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L21hdGxhYi1jbGFzcy1kZWZpbml0aW9uCkBAIC0wLDAgKzEsNSBAQAorY2xhc3NkZWYgUklHSFQKKyAgICBwcm9wZXJ0aWVzCisgICAgICAgIENoYW5nZU1lCisgICAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvbWF0bGFiLWZ1bmN0aW9uIGIvdC90NDAxOC9tYXRsYWItZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3YTliMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvbWF0bGFiLWZ1bmN0aW9uCkBAIC0wLDAgKzEsNCBAQAorZnVuY3Rpb24geSA9IFJJR0hUKCkKK3ggPSA1OworeSA9IENoYW5nZU1lICsgeDsKK2VuZApkaWZmIC0tZ2l0IGEvdC90NDAxOC9tYXRsYWItb2N0YXZlLXNlY3Rpb24tMSBiL3QvdDQwMTgvbWF0bGFiLW9jdGF2ZS1zZWN0aW9uLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiNmM0NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvbWF0bGFiLW9jdGF2ZS1zZWN0aW9uLTEKQEAgLTAsMCArMSwzIEBACislJSUgUklHSFQgc2VjdGlvbgorIyB0aGlzIGlzIG9jdGF2ZSBzY3JpcHQKK0NoYW5nZU1lID0gMTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvbWF0bGFiLW9jdGF2ZS1zZWN0aW9uLTIgYi90L3Q0MDE4L21hdGxhYi1vY3RhdmUtc2VjdGlvbi0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMjk4MGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L21hdGxhYi1vY3RhdmUtc2VjdGlvbi0yCkBAIC0wLDAgKzEsMyBAQAorIyMgUklHSFQgc2VjdGlvbgorIyB0aGlzIGlzIG9jdGF2ZSBzY3JpcHQKK0NoYW5nZU1lID0gMTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvbWF0bGFiLXNlY3Rpb24gYi90L3Q0MDE4L21hdGxhYi1zZWN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYTU5YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L21hdGxhYi1zZWN0aW9uCkBAIC0wLDAgKzEsMyBAQAorJSUgUklHSFQgc2VjdGlvbgorJSB0aGlzIGlzIHVuZGVyc3Rvb2QgYnkgYm90aCBtYXRsYWIgYW5kIG9jdGF2ZQorQ2hhbmdlTWUgPSAxOwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9wZXJsLXNraXAtZW5kLW9mLWhlcmVkb2MgYi90L3Q0MDE4L3Blcmwtc2tpcC1lbmQtb2YtaGVyZWRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjJkMzliCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9wZXJsLXNraXAtZW5kLW9mLWhlcmVkb2MKQEAgLTAsMCArMSw4IEBACitzdWIgUklHSFR3aXRoaGVyZWRvY3VtZW50IHsKKwlwcmludCA8PCJFT0YiCitkZWNveSBoZXJlLWRvYworRU9GCisJIyBzb21lIGxpbmVzIG9mIGNvbnRleHQKKwkjIHRvIHBhZCBpdCBvdXQKKwlwcmludCAiQ2hhbmdlTWVcbiI7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L3Blcmwtc2tpcC1mb3J3YXJkLWRlY2wgYi90L3Q0MDE4L3Blcmwtc2tpcC1mb3J3YXJkLWRlY2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4Y2I4YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcGVybC1za2lwLWZvcndhcmQtZGVjbApAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIFJJR0hUOworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIHBhcmVudCBxdyhFeHBvcnRlcik7CitvdXIgQEVYUE9SVF9PSyA9IHF3KHJvdW5kIGZpbmFscm91bmQpOworCitzdWIgb3RoZXI7ICMgZm9yd2FyZCBkZWNsYXJhdGlvbgorCisjIENoYW5nZU1lCmRpZmYgLS1naXQgYS90L3Q0MDE4L3Blcmwtc2tpcC1zdWItaW4tcG9kIGIvdC90NDAxOC9wZXJsLXNraXAtc3ViLWluLXBvZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzlmMDI0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9wZXJsLXNraXAtc3ViLWluLXBvZApAQCAtMCwwICsxLDE4IEBACis9aGVhZDEgTkFNRQorCitCZWVyIC0gc3Vicm91dGluZSB0byBvdXRwdXQgZnJhZ21lbnQgb2YgYSBkcmlua2luZyBzb25nCisKKz1oZWFkMSBTWU5PUFNJU19SSUdIVAorCisJdXNlIEJlZXIgcXcocm91bmQgZmluYWxyb3VuZCk7CisKKwlzdWIgc29uZyB7CisJCWZvciAobXkgJGkgPSA5OTsgJGkgPiAwOyAkaS0tKSB7CisJCQlyb3VuZCAkaTsKKwkJfQorCQlmaW5hbHJvdW5kOworCX0KKworCUNoYW5nZU1lOworCis9Y3V0CmRpZmYgLS1naXQgYS90L3Q0MDE4L3Blcmwtc3ViLWRlZmluaXRpb24gYi90L3Q0MDE4L3Blcmwtc3ViLWRlZmluaXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUwN2QxZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcGVybC1zdWItZGVmaW5pdGlvbgpAQCAtMCwwICsxLDQgQEAKK3N1YiBSSUdIVCB7CisJbXkgKCRuKSA9IEBfOworCXByaW50ICJDaGFuZ2VNZSI7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L3Blcmwtc3ViLWRlZmluaXRpb24ta3ItYnJhY2UgYi90L3Q0MDE4L3Blcmwtc3ViLWRlZmluaXRpb24ta3ItYnJhY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMwYjNkZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcGVybC1zdWItZGVmaW5pdGlvbi1rci1icmFjZQpAQCAtMCwwICsxLDQgQEAKK3N1YiBSSUdIVAoreworCXByaW50ICJDaGFuZ2VNZVxuIjsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvcGhwLWFic3RyYWN0LWNsYXNzIGIvdC90NDAxOC9waHAtYWJzdHJhY3QtY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxM2UxMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcGhwLWFic3RyYWN0LWNsYXNzCkBAIC0wLDAgKzEsNCBAQAorYWJzdHJhY3QgY2xhc3MgUklHSFQKK3sKKyAgICBjb25zdCBGT08gPSAnQ2hhbmdlTWUnOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9waHAtY2xhc3MgYi90L3Q0MDE4L3BocC1jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzg1YjYzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9waHAtY2xhc3MKQEAgLTAsMCArMSw0IEBACitjbGFzcyBSSUdIVAoreworICAgIGNvbnN0IEZPTyA9ICdDaGFuZ2VNZSc7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L3BocC1maW5hbC1jbGFzcyBiL3QvdDQwMTgvcGhwLWZpbmFsLWNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZjU3MTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3BocC1maW5hbC1jbGFzcwpAQCAtMCwwICsxLDQgQEAKK2ZpbmFsIGNsYXNzIFJJR0hUCit7CisgICAgY29uc3QgRk9PID0gJ0NoYW5nZU1lJzsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvcGhwLWZ1bmN0aW9uIGIvdC90NDAxOC9waHAtZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3MTdjNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcGhwLWZ1bmN0aW9uCkBAIC0wLDAgKzEsNCBAQAorZnVuY3Rpb24gUklHSFQoKQoreworICAgIHJldHVybiAnQ2hhbmdlTWUnOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9waHAtaW50ZXJmYWNlIGIvdC90NDAxOC9waHAtaW50ZXJmYWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YjQ5YWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3BocC1pbnRlcmZhY2UKQEAgLTAsMCArMSw0IEBACitpbnRlcmZhY2UgUklHSFQKK3sKKyAgICBwdWJsaWMgZnVuY3Rpb24gZm9vKCRDaGFuZ2VNZSk7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L3BocC1tZXRob2QgYi90L3Q0MDE4L3BocC1tZXRob2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhZjFhNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcGhwLW1ldGhvZApAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEtsYXNzCit7CisgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBSSUdIVCgpCisgICAgeworICAgICAgICByZXR1cm4gJ0NoYW5nZU1lJzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L3BocC10cmFpdCBiL3QvdDQwMTgvcGhwLXRyYWl0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YjhjODIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3BocC10cmFpdApAQCAtMCwwICsxLDcgQEAKK3RyYWl0IFJJR0hUCit7CisgICAgcHVibGljIGZ1bmN0aW9uIGZvbygkQ2hhbmdlTWUpCisgICAgeworICAgICAgICByZXR1cm4gJ2Zvbyc7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9weXRob24tYXN5bmMtZGVmIGIvdC90NDAxOC9weXRob24tYXN5bmMtZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NjQwZTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3B5dGhvbi1hc3luYy1kZWYKQEAgLTAsMCArMSw0IEBACithc3luYyBkZWYgUklHSFQocGk6IGludCA9IDMuMTQpOgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIENoYW5nZU1lKCkKZGlmZiAtLWdpdCBhL3QvdDQwMTgvcHl0aG9uLWNsYXNzIGIvdC90NDAxOC9weXRob24tY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5ZTc0MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcHl0aG9uLWNsYXNzCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgUklHSFQoaW50LCBzdHIpOgorICAgICMgY29tbWVudAorICAgICMgYW5vdGhlciBjb21tZW50CisgICAgIyBDaGFuZ2VNZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9weXRob24tZGVmIGIvdC90NDAxOC9weXRob24tZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MGIzMWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3B5dGhvbi1kZWYKQEAgLTAsMCArMSw0IEBACitkZWYgUklHSFQocGk6IGludCA9IDMuMTQpOgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIENoYW5nZU1lKCkKZGlmZiAtLWdpdCBhL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWFzeW5jLWRlZiBiL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWFzeW5jLWRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWQwMzI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9weXRob24taW5kZW50ZWQtYXN5bmMtZGVmCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vOgorICAgIGFzeW5jIGRlZiBSSUdIVChzZWxmLCB4OiBpbnQpOgorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIDIsCisgICAgICAgICAgICBDaGFuZ2VNZSwKKyAgICAgICAgXQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9weXRob24taW5kZW50ZWQtY2xhc3MgYi90L3Q0MDE4L3B5dGhvbi1pbmRlbnRlZC1jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWI0ZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9weXRob24taW5kZW50ZWQtY2xhc3MKQEAgLTAsMCArMSw1IEBACitpZiBUWVBFX0NIRUNLSU5HOgorICAgIGNsYXNzIFJJR0hUOgorICAgICAgICAjIGNvbW1lbnQKKyAgICAgICAgIyBhbm90aGVyIGNvbW1lbnQKKyAgICAgICAgIyBDaGFuZ2VNZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9weXRob24taW5kZW50ZWQtZGVmIGIvdC90NDAxOC9weXRob24taW5kZW50ZWQtZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOGZiYWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3B5dGhvbi1pbmRlbnRlZC1kZWYKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb286CisgICAgZGVmIFJJR0hUKHNlbGYsIHg6IGludCk6CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICAxLAorICAgICAgICAgICAgMiwKKyAgICAgICAgICAgIENoYW5nZU1lLAorICAgICAgICBdCmRpZmYgLS1naXQgYS90L3Q0MDE4L3J1c3QtZm4gYi90L3Q0MDE4L3J1c3QtZm4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JlMDIxNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcnVzdC1mbgpAQCAtMCwwICsxLDUgQEAKK3B1YihzZWxmKSBmbiBSSUdIVDxUPih4OiAmW1RdKSB3aGVyZSBUOiBEZWJ1ZyB7CisgICAgbGV0IF8gPSB4OworICAgIC8vIGEgY29tbWVudAorICAgIGxldCBhID0gQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L3J1c3QtaW1wbCBiL3QvdDQwMTgvcnVzdC1pbXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZGYzY2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3J1c3QtaW1wbApAQCAtMCwwICsxLDUgQEAKK2ltcGw8J2EsIFQ6IEFzUmVmPFt1OF0+PiAgc3RkOjpSSUdIVCBmb3IgR2l0PCdhPiB7CisKKyAgICBwdWIgZm4gQ2hhbmdlTWUoJnNlbGYpIC0+ICgpIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L3J1c3Qtc3RydWN0IGIvdC90NDAxOC9ydXN0LXN0cnVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmFmZjFjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9ydXN0LXN0cnVjdApAQCAtMCwwICsxLDUgQEAKKyNbZGVyaXZlKERlYnVnKV0KK3B1YihzdXBlcikgc3RydWN0IFJJR0hUPCdhPiB7CisgICAgbmFtZTogJidhIHN0ciwKKyAgICBhZ2U6IENoYW5nZU1lLAorfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9ydXN0LXRyYWl0IGIvdC90NDAxOC9ydXN0LXRyYWl0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMzk3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3J1c3QtdHJhaXQKQEAgLTAsMCArMSw1IEBACit1bnNhZmUgdHJhaXQgUklHSFQ8VD4geworICAgIGZuIGxlbigmc2VsZikgLT4gdTMyOworICAgIGZuIENoYW5nZU1lKCZzZWxmLCBuOiB1MzIpIC0+IFQ7CisgICAgZm4gaXRlcjxGPigmc2VsZiwgZjogRikgd2hlcmUgRjogRm4oVCk7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE5LWRpZmYtd3NlcnJvci5zaCBiL3QvdDQwMTktZGlmZi13c2Vycm9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2MTM1YzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE5LWRpZmYtd3NlcnJvci5zaApAQCAtMCwwICsxLDI5NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgd2hpdGVzcGFjZSBlcnJvciBkZXRlY3Rpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWdpdCBjb25maWcgZGlmZi5jb2xvci53aGl0ZXNwYWNlICJibHVlIHJldmVyc2UiICYmCisJPkYgJiYKKwlnaXQgYWRkIEYgJiYKKwllY2hvICIgICAgICAgICBFaWdodCBTUCBpbmRlbnQiID4+RiAmJgorCWVjaG8gIiAJSFQgYW5kIFNQIGluZGVudCIgPj5GICYmCisJZWNobyAiV2l0aCB0cmFpbGluZyBTUCAiID4+RiAmJgorCWVjaG8gIkNhcnJpYWdlIFJldHVyblEiIHwgdHIgUSAiXDAxNSIgPj5GICYmCisJZWNobyAiTm8gcHJvYmxlbSIgPj5GICYmCisJZWNobyA+PkYKKworJworCitibHVlX2dyZXA9Jzc7MzRtJyA7IyBFU0MgWyA3IDsgMyA0IG0KKworcHJpbnRmICJcMDMzWyVzIiAiJGJsdWVfZ3JlcCIgPmNoZWNrLWdyZXAKK2lmIChncmVwICIkYmx1ZV9ncmVwIiA8Y2hlY2stZ3JlcCB8IGdyZXAgIiRibHVlX2dyZXAiKSA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKwlncmVwX2E9Z3JlcAorZWxpZiAoZ3JlcCAtYSAiJGJsdWVfZ3JlcCIgPGNoZWNrLWdyZXAgfCBncmVwIC1hICIkYmx1ZV9ncmVwIikgPi9kZXYvbnVsbCAyPiYxCit0aGVuCisJZ3JlcF9hPSdncmVwIC1hJworZWxzZQorCWdyZXBfYT1ncmVwIDsjIGV4cGVjdGVkIHRvIGZhaWwuLi4KK2ZpCitybSAtZiBjaGVjay1ncmVwCisKK3ByZXBhcmVfb3V0cHV0ICgpIHsKKwlnaXQgZGlmZiAtLWNvbG9yID5vdXRwdXQKKwkkZ3JlcF9hICIkYmx1ZV9ncmVwIiBvdXRwdXQgPmVycm9yCisJJGdyZXBfYSAtdiAiJGJsdWVfZ3JlcCIgb3V0cHV0ID5ub3JtYWwKKwlyZXR1cm4gMAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGRlZmF1bHQgJworCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIEhUIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCAoYXR0cmlidXRlKScgJworCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwllY2hvICJGIHdoaXRlc3BhY2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIEhUIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCwgdGFid2lkdGg9MTAgKGF0dHJpYnV0ZSknICcKKworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJ0YWJ3aWR0aD0xMCIgJiYKKwllY2hvICJGIHdoaXRlc3BhY2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNoZWNrIChhdHRyaWJ1dGUpJyAnCisKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud2hpdGVzcGFjZSAmJgorCWVjaG8gIkYgLXdoaXRlc3BhY2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgV2l0aCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNoZWNrLCB0YWJ3aWR0aD0xMCAoYXR0cmlidXRlKSwgbXVzdCBiZSBpcnJlbGV2YW50JyAnCisKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAidGFid2lkdGg9MTAiICYmCisJZWNobyAiRiAtd2hpdGVzcGFjZSIgPi5naXRhdHRyaWJ1dGVzICYmCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIEhUIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBSZXR1cm4gbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aG91dCAtdHJhaWwnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgLXRyYWlsICYmCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIEhUIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRob3V0IC10cmFpbCAoYXR0cmlidXRlKScgJworCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwllY2hvICJGIHdoaXRlc3BhY2U9LXRyYWlsIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlwcmVwYXJlX291dHB1dCAmJgorCisJZ3JlcCBFaWdodCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgSFQgZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgV2l0aCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGhvdXQgLXNwYWNlJyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlIC1zcGFjZSAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgV2l0aCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBSZXR1cm4gZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRob3V0IC1zcGFjZSAoYXR0cmlidXRlKScgJworCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwllY2hvICJGIHdoaXRlc3BhY2U9LXNwYWNlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlwcmVwYXJlX291dHB1dCAmJgorCisJZ3JlcCBFaWdodCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgSFQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBpbmRlbnQtbm9uLXRhYiBvbmx5JyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlIGluZGVudCwtdHJhaWxpbmcsLXNwYWNlICYmCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgSFQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGluZGVudC1ub24tdGFiIG9ubHkgKGF0dHJpYnV0ZSknICcKKworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53aGl0ZXNwYWNlICYmCisJZWNobyAiRiB3aGl0ZXNwYWNlPWluZGVudCwtdHJhaWxpbmcsLXNwYWNlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlwcmVwYXJlX291dHB1dCAmJgorCisJZ3JlcCBFaWdodCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgV2l0aCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaW5kZW50LW5vbi10YWIgb25seSwgdGFid2lkdGg9MTAnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgaW5kZW50LHRhYndpZHRoPTEwLC10cmFpbGluZywtc3BhY2UgJiYKKwlwcmVwYXJlX291dHB1dCAmJgorCisJZ3JlcCBFaWdodCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgSFQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGluZGVudC1ub24tdGFiIG9ubHksIHRhYndpZHRoPTEwIChhdHRyaWJ1dGUpJyAnCisKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud2hpdGVzcGFjZSAmJgorCWVjaG8gIkYgd2hpdGVzcGFjZT1pbmRlbnQsLXRyYWlsaW5nLC1zcGFjZSx0YWJ3aWR0aD0xMCIgPi5naXRhdHRyaWJ1dGVzICYmCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIEhUIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBSZXR1cm4gbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjci1hdC1lb2wnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgY3ItYXQtZW9sICYmCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIEhUIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY3ItYXQtZW9sIChhdHRyaWJ1dGUpJyAnCisKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud2hpdGVzcGFjZSAmJgorCWVjaG8gIkYgd2hpdGVzcGFjZT10cmFpbGluZyxjci1hdC1lb2wiID4uZ2l0YXR0cmlidXRlcyAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFpbGluZyBlbXB0eSBsaW5lcyAoMSknICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjayA+b3V0cHV0ICYmCisJZ3JlcCAibmV3IGJsYW5rIGxpbmUgYXQiIG91dHB1dCAmJgorCWdyZXAgInRyYWlsaW5nIHdoaXRlc3BhY2UiIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWlsaW5nIGVtcHR5IGxpbmVzICgyKScgJworCisJZWNobyAiRiAtd2hpdGVzcGFjZSIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGRpZmYgLS1jaGVjayA+b3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrZGlmZiBzaG93cyBjb3JyZWN0IGxpbmUgbnVtYmVyIGZvciB0cmFpbGluZyBibGFuayBsaW5lcycgJworCisJcHJpbnRmICJhXG5iXG4iID4gRyAmJgorCWdpdCBhZGQgRyAmJgorCXByaW50ZiAieFxueFxueFxuYVxuYlxuY1xuXG4iID4gRyAmJgorCVsgIiQoZ2l0IGRpZmYgLS1jaGVjayAtLSBHKSIgPSAiRzo3OiBuZXcgYmxhbmsgbGluZSBhdCBFT0YuIiBdCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGNvbG9yIHRyYWlsaW5nIGNyIGluIGNvbnRleHQnICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud2hpdGVzcGFjZSAmJgorCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZWNobyBBQUFRIHwgdHIgUSAiXDAxNSIgPkcgJiYKKwlnaXQgYWRkIEcgJiYKKwllY2hvIEJCQlEgfCB0ciBRICJcMDE1IiA+PkcgJiYKKwlnaXQgZGlmZiAtLWNvbG9yIEcgfCB0ciAiXDAxNSIgUSA+b3V0cHV0ICYmCisJZ3JlcCAiQkJCLioke2JsdWVfZ3JlcH1RIiBvdXRwdXQgJiYKKwlncmVwICJBQUEuKlxbbVEiIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbG9yIG5ldyB0cmFpbGluZyBibGFuayBsaW5lcycgJworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG87IGVjaG87IH0gPnggJiYKKwlnaXQgYWRkIHggJiYKKwl7IGVjaG8gYTsgZWNobzsgZWNobzsgZWNobzsgZWNobyBjOyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvOyB9ID54ICYmCisJZ2l0IGRpZmYgLS1jb2xvciB4ID5vdXRwdXQgJiYKKwljbnQ9JCgkZ3JlcF9hICIke2JsdWVfZ3JlcH0iIG91dHB1dCB8IHdjIC1sKSAmJgorCXRlc3QgJGNudCA9IDIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDIwLWRpZmYtZXh0ZXJuYWwuc2ggYi90L3Q0MDIwLWRpZmYtZXh0ZXJuYWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTAwOTgyNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMjAtZGlmZi1leHRlcm5hbC5zaApAQCAtMCwwICsxLDI3NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2V4dGVybmFsIGRpZmYgaW50ZXJmYWNlIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCXRlc3RfdGljayAmJgorCWVjaG8gaW5pdGlhbCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyBzZWNvbmQgPmZpbGUgJiYKKwliZWZvcmU9JChnaXQgaGFzaC1vYmplY3QgZmlsZSkgJiYKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJGJlZm9yZSkgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyB0aGlyZCA+ZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiBlbnZpcm9ubWVudCcgJworCisJR0lUX0VYVEVSTkFMX0RJRkY9ZWNobyBnaXQgZGlmZiB8IHsKKwkJcmVhZCBwYXRoIG9sZGZpbGUgb2xkaGV4IG9sZG1vZGUgbmV3ZmlsZSBuZXdoZXggbmV3bW9kZSAmJgorCQl0ZXN0ICJ6JHBhdGgiID0gemZpbGUgJiYKKwkJdGVzdCAieiRvbGRtb2RlIiA9IHoxMDA2NDQgJiYKKwkJdGVzdCAieiRuZXdoZXgiID0gInokWkVST19PSUQiICYmCisJCXRlc3QgInokbmV3bW9kZSIgPSB6MTAwNjQ0ICYmCisJCW9oPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOmZpbGUpICYmCisJCXRlc3QgInokb2giID0gInokb2xkaGV4IgorCX0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiBlbnZpcm9ubWVudCBzaG91bGQgYXBwbHkgb25seSB0byBkaWZmJyAnCisKKwlHSVRfRVhURVJOQUxfRElGRj1lY2hvIGdpdCBsb2cgLXAgLTEgSEVBRCB8CisJZ3JlcCAiXmRpZmYgLS1naXQgYS9maWxlIGIvZmlsZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiBlbnZpcm9ubWVudCBhbmQgLS1uby1leHQtZGlmZicgJworCisJR0lUX0VYVEVSTkFMX0RJRkY9ZWNobyBnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIHwKKwlncmVwICJeZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3R5cGVjaGFuZ2UgZGlmZicgJworCXJtIC1mIGZpbGUgJiYKKwlsbiAtcyBlbGlmIGZpbGUgJiYKKwlHSVRfRVhURVJOQUxfRElGRj1lY2hvIGdpdCBkaWZmICB8IHsKKwkJcmVhZCBwYXRoIG9sZGZpbGUgb2xkaGV4IG9sZG1vZGUgbmV3ZmlsZSBuZXdoZXggbmV3bW9kZSAmJgorCQl0ZXN0ICJ6JHBhdGgiID0gemZpbGUgJiYKKwkJdGVzdCAieiRvbGRtb2RlIiA9IHoxMDA2NDQgJiYKKwkJdGVzdCAieiRuZXdoZXgiID0gInokWkVST19PSUQiICYmCisJCXRlc3QgInokbmV3bW9kZSIgPSB6MTIwMDAwICYmCisJCW9oPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOmZpbGUpICYmCisJCXRlc3QgInokb2giID0gInokb2xkaGV4IgorCX0gJiYKKwlHSVRfRVhURVJOQUxfRElGRj1lY2hvIGdpdCBkaWZmIC0tbm8tZXh0LWRpZmYgPmFjdHVhbCAmJgorCWdpdCBkaWZmID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuZXh0ZXJuYWwnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyB0aGlyZCA+ZmlsZSAmJgorCXRlc3RfY29uZmlnIGRpZmYuZXh0ZXJuYWwgZWNobyAmJgorCWdpdCBkaWZmIHwgeworCQlyZWFkIHBhdGggb2xkZmlsZSBvbGRoZXggb2xkbW9kZSBuZXdmaWxlIG5ld2hleCBuZXdtb2RlICYmCisJCXRlc3QgInokcGF0aCIgPSB6ZmlsZSAmJgorCQl0ZXN0ICJ6JG9sZG1vZGUiID0gejEwMDY0NCAmJgorCQl0ZXN0ICJ6JG5ld2hleCIgPSAieiRaRVJPX09JRCIgJiYKKwkJdGVzdCAieiRuZXdtb2RlIiA9IHoxMDA2NDQgJiYKKwkJb2g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6ZmlsZSkgJiYKKwkJdGVzdCAieiRvaCIgPSAieiRvbGRoZXgiCisJfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmV4dGVybmFsIHNob3VsZCBhcHBseSBvbmx5IHRvIGRpZmYnICcKKwl0ZXN0X2NvbmZpZyBkaWZmLmV4dGVybmFsIGVjaG8gJiYKKwlnaXQgbG9nIC1wIC0xIEhFQUQgfAorCWdyZXAgIl5kaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuZXh0ZXJuYWwgYW5kIC0tbm8tZXh0LWRpZmYnICcKKwl0ZXN0X2NvbmZpZyBkaWZmLmV4dGVybmFsIGVjaG8gJiYKKwlnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIHwKKwlncmVwICJeZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGF0dHJpYnV0ZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIHRoaXJkID5maWxlICYmCisKKwlnaXQgY29uZmlnIGRpZmYucGFycm90LmNvbW1hbmQgZWNobyAmJgorCisJZWNobyA+LmdpdGF0dHJpYnV0ZXMgImZpbGUgZGlmZj1wYXJyb3QiICYmCisKKwlnaXQgZGlmZiB8IHsKKwkJcmVhZCBwYXRoIG9sZGZpbGUgb2xkaGV4IG9sZG1vZGUgbmV3ZmlsZSBuZXdoZXggbmV3bW9kZSAmJgorCQl0ZXN0ICJ6JHBhdGgiID0gemZpbGUgJiYKKwkJdGVzdCAieiRvbGRtb2RlIiA9IHoxMDA2NDQgJiYKKwkJdGVzdCAieiRuZXdoZXgiID0gInokWkVST19PSUQiICYmCisJCXRlc3QgInokbmV3bW9kZSIgPSB6MTAwNjQ0ICYmCisJCW9oPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOmZpbGUpICYmCisJCXRlc3QgInokb2giID0gInokb2xkaGV4IgorCX0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGF0dHJpYnV0ZSBzaG91bGQgYXBwbHkgb25seSB0byBkaWZmJyAnCisKKwlnaXQgbG9nIC1wIC0xIEhFQUQgfAorCWdyZXAgIl5kaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBhdHRyaWJ1dGUgYW5kIC0tbm8tZXh0LWRpZmYnICcKKworCWdpdCBkaWZmIC0tbm8tZXh0LWRpZmYgfAorCWdyZXAgIl5kaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBhdHRyaWJ1dGUnICcKKworCWdpdCBjb25maWcgLS11bnNldCBkaWZmLnBhcnJvdC5jb21tYW5kICYmCisJZ2l0IGNvbmZpZyBkaWZmLmNvbG9yLmNvbW1hbmQgZWNobyAmJgorCisJZWNobyA+LmdpdGF0dHJpYnV0ZXMgImZpbGUgZGlmZj1jb2xvciIgJiYKKworCWdpdCBkaWZmIHwgeworCQlyZWFkIHBhdGggb2xkZmlsZSBvbGRoZXggb2xkbW9kZSBuZXdmaWxlIG5ld2hleCBuZXdtb2RlICYmCisJCXRlc3QgInokcGF0aCIgPSB6ZmlsZSAmJgorCQl0ZXN0ICJ6JG9sZG1vZGUiID0gejEwMDY0NCAmJgorCQl0ZXN0ICJ6JG5ld2hleCIgPSAieiRaRVJPX09JRCIgJiYKKwkJdGVzdCAieiRuZXdtb2RlIiA9IHoxMDA2NDQgJiYKKwkJb2g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6ZmlsZSkgJiYKKwkJdGVzdCAieiRvaCIgPSAieiRvbGRoZXgiCisJfQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgYXR0cmlidXRlIHNob3VsZCBhcHBseSBvbmx5IHRvIGRpZmYnICcKKworCWdpdCBsb2cgLXAgLTEgSEVBRCB8CisJZ3JlcCAiXmRpZmYgLS1naXQgYS9maWxlIGIvZmlsZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGF0dHJpYnV0ZSBhbmQgLS1uby1leHQtZGlmZicgJworCisJZ2l0IGRpZmYgLS1uby1leHQtZGlmZiB8CisJZ3JlcCAiXmRpZmYgLS1naXQgYS9maWxlIGIvZmlsZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiB0cnVtcHMgZGlmZi5leHRlcm5hbCcgJworCT4uZ2l0YXR0cmlidXRlcyAmJgorCXRlc3RfY29uZmlnIGRpZmYuZXh0ZXJuYWwgImVjaG8gZXh0LWdsb2JhbCIgJiYKKwlHSVRfRVhURVJOQUxfRElGRj0iZWNobyBleHQtZW52IiBnaXQgZGlmZiB8IGdyZXAgZXh0LWVudgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRyaWJ1dGVzIHRydW1wIEdJVF9FWFRFUk5BTF9ESUZGIGFuZCBkaWZmLmV4dGVybmFsJyAnCisJdGVzdF9jb25maWcgZGlmZi5mb28uY29tbWFuZCAiZWNobyBleHQtYXR0cmlidXRlIiAmJgorCXRlc3RfY29uZmlnIGRpZmYuZXh0ZXJuYWwgImVjaG8gZXh0LWdsb2JhbCIgJiYKKwllY2hvICJmaWxlIGRpZmY9Zm9vIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlHSVRfRVhURVJOQUxfRElGRj0iZWNobyBleHQtZW52IiBnaXQgZGlmZiB8IGdyZXAgZXh0LWF0dHJpYnV0ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBkaWZmIHdpdGggLWRpZmYnICcKKwllY2hvID4uZ2l0YXR0cmlidXRlcyAiZmlsZSAtZGlmZiIgJiYKKwlnaXQgZGlmZiB8IGdyZXAgQmluYXJ5CisnCisKK2VjaG8gTlVMWmJldHdlZW5ad29yZHMgfCBwZXJsIC1wZSAneS9aL1wwMDAvJyA+IGZpbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yY2UgZGlmZiB3aXRoICJkaWZmIicgJworCWFmdGVyPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUpICYmCisJYWZ0ZXI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJGFmdGVyKSAmJgorCWVjaG8gPi5naXRhdHRyaWJ1dGVzICJmaWxlIGRpZmYiICYmCisJZ2l0IGRpZmYgPmFjdHVhbCAmJgorCXNlZCAtZSAicy9eaW5kZXggLiovaW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NC8iIFwKKwkJIiRURVNUX0RJUkVDVE9SWSIvdDQwMjAvZGlmZi5OVUwgPmV4cGVjdGVkLWRpZmYgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1kaWZmIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiB3aXRoIG1vcmUgdGhhbiBvbmUgY2hhbmdlZCBmaWxlcycgJworCWVjaG8gYW5vdGhlcmZpbGUgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCAybmQgZmlsZSIgJiYKKwllY2hvIG1vZGlmaWVkID5maWxlMiAmJgorCUdJVF9FWFRFUk5BTF9ESUZGPWVjaG8gZ2l0IGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0VYVEVSTkFMX0RJRkYgcGF0aCBjb3VudGVyL3RvdGFsJyAnCisJd3JpdGVfc2NyaXB0IGV4dGVybmFsLWRpZmYuc2ggPDwtXEVPRiAmJgorCWVjaG8gJEdJVF9ESUZGX1BBVEhfQ09VTlRFUiBvZiAkR0lUX0RJRkZfUEFUSF9UT1RBTCA+PmNvdW50ZXIudHh0CisJRU9GCisJPmNvdW50ZXIudHh0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCTEgb2YgMgorCTIgb2YgMgorCUVPRgorCUdJVF9FWFRFUk5BTF9ESUZGPS4vZXh0ZXJuYWwtZGlmZi5zaCBnaXQgZGlmZiAmJgorCXRlc3RfY21wIGV4cGVjdCBjb3VudGVyLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiBnZW5lcmF0ZXMgcHJldHR5IHBhdGhzJyAnCisJdG91Y2ggZmlsZS5leHQgJiYKKwlnaXQgYWRkIGZpbGUuZXh0ICYmCisJZWNobyB3aXRoIGV4dGVuc2lvbiA+IGZpbGUuZXh0ICYmCisJR0lUX0VYVEVSTkFMX0RJRkY9ZWNobyBnaXQgZGlmZiBmaWxlLmV4dCB8IGdyZXAgLi4uLi4uX2ZpbGVcLmV4dCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgZmlsZS5leHQgJiYKKwlybSBmaWxlLmV4dAorJworCitlY2hvICIjISRTSEVMTF9QQVRIIiA+ZmFrZS1kaWZmLnNoCitjYXQgPj4gZmFrZS1kaWZmLnNoIDw8XEVPRgorY2F0ICQyID4+IGNybGZlZC50eHQKK0VPRgorY2htb2QgYSt4IGZha2UtZGlmZi5zaAorCitrZWVwX29ubHlfY3IgKCkgeworCXRyIC1kYyAnXDAxNScKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXh0ZXJuYWwgZGlmZiB3aXRoIGF1dG9jcmxmID0gdHJ1ZScgJworCXRlc3RfY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCUdJVF9FWFRFUk5BTF9ESUZGPS4vZmFrZS1kaWZmLnNoIGdpdCBkaWZmICYmCisJdGVzdCAkKHdjIC1sIDwgY3JsZmVkLnR4dCkgPSAkKGNhdCBjcmxmZWQudHh0IHwga2VlcF9vbmx5X2NyIHwgd2MgLWMpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1jYWNoZWQnICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYXNzdW1lLXVuY2hhbmdlZCBmaWxlICYmCisJZWNobyBzZWNvbmQgPmZpbGUgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtZGlmZiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW4gdXAgY3JsZiBsZWZ0b3ZlcnMnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tYXNzdW1lLXVuY2hhbmdlZCBmaWxlICYmCisJcm0gLWYgZmlsZSogJiYKKwlnaXQgcmVzZXQgLS1oYXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBkaWZmJyAnCisJZ2l0IGluaXQgc3ViICYmCisJKCBjZCBzdWIgJiYgdGVzdF9jb21taXQgc3ViMSApICYmCisJZ2l0IGFkZCBzdWIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIiAmJgorCSggY2Qgc3ViICYmIHRlc3RfY29tbWl0IHN1YjIgKSAmJgorCXdyaXRlX3NjcmlwdCBnYXRoZXJfcHJlX3Bvc3Quc2ggPDwtXEVPRiAmJgorCWVjaG8gIiQxICQ0IiAjIHBhdGgsIG1vZGUKKwljYXQgIiQyIiAjIG9sZCBmaWxlCisJY2F0ICIkNSIgIyBuZXcgZmlsZQorCUVPRgorCUdJVF9FWFRFUk5BTF9ESUZGPS4vZ2F0aGVyX3ByZV9wb3N0LnNoIGdpdCBkaWZmID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCXN1YiAxNjAwMDAKKwlTdWJwcm9qZWN0IGNvbW1pdCAkKGdpdCByZXYtcGFyc2UgSEVBRDpzdWIpCisJU3VicHJvamVjdCBjb21taXQgJChjZCBzdWIgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMjAvZGlmZi5OVUwgYi90L3Q0MDIwL2RpZmYuTlVMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMmY4OTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDIwL2RpZmYuTlVMCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3QvdDQwMjEtZm9ybWF0LXBhdGNoLW51bWJlcmVkLnNoIGIvdC90NDAyMS1mb3JtYXQtcGF0Y2gtbnVtYmVyZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWJlNjVmZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMjEtZm9ybWF0LXBhdGNoLW51bWJlcmVkLnNoCkBAIC0wLDAgKzEsMTQxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEJyaWFuIEMgR2VybmhhcmR0CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J0Zvcm1hdC1wYXRjaCBudW1iZXJpbmcgb3B0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZWNobyBBID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gRmlyc3QgJiYKKworCWVjaG8gQiA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBTZWNvbmQgJiYKKworCWVjaG8gQyA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBUaGlyZAorCisnCisKKyMgRWFjaCBvZiB0aGVzZSBnZXRzIHVzZWQgbXVsdGlwbGUgdGltZXMuCisKK3Rlc3RfbnVtX25vX251bWJlcmVkKCkgeworCWNudD0kKGdyZXAgIl5TdWJqZWN0OiBcW1BBVENIXF0iICQxIHwgd2MgLWwpICYmCisJdGVzdCAkY250ID0gJDIKK30KKwordGVzdF9zaW5nbGVfbm9fbnVtYmVyZWQoKSB7CisJdGVzdF9udW1fbm9fbnVtYmVyZWQgJDEgMQorfQorCit0ZXN0X25vX251bWJlcmVkKCkgeworCXRlc3RfbnVtX25vX251bWJlcmVkICQxIDIKK30KKwordGVzdF9zaW5nbGVfY292ZXJfbGV0dGVyX251bWJlcmVkKCkgeworCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMVxdIiAkMSAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDEvMVxdIiAkMQorfQorCit0ZXN0X3NpbmdsZV9udW1iZXJlZCgpIHsKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAxLzFcXSIgJDEKK30KKwordGVzdF9udW1iZXJlZCgpIHsKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAxLzJcXSIgJDEgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAyLzJcXSIgJDEKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlIHBhdGNoIGRlZmF1bHRzIHRvIG5vIG51bWJlcnMnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IEhFQUR+MSA+cGF0Y2gwLnNpbmdsZSAmJgorCXRlc3Rfc2luZ2xlX25vX251bWJlcmVkIHBhdGNoMC5zaW5nbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgcGF0Y2ggZGVmYXVsdHMgdG8gbnVtYmVyZWQnICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRH4yID5wYXRjaDAubXVsdGlwbGUgJiYKKwl0ZXN0X251bWJlcmVkIHBhdGNoMC5tdWx0aXBsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1VzZSAtLW51bWJlcmVkJyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbnVtYmVyZWQgLS1zdGRvdXQgSEVBRH4xID5wYXRjaDEgJiYKKwl0ZXN0X3NpbmdsZV9udW1iZXJlZCBwYXRjaDEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQubnVtYmVyZWQgPSB0cnVlJyAnCisKKwlnaXQgY29uZmlnIGZvcm1hdC5udW1iZXJlZCB0cnVlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBIRUFEfjIgPnBhdGNoMiAmJgorCXRlc3RfbnVtYmVyZWQgcGF0Y2gyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0Lm51bWJlcmVkICYmIHNpbmdsZSBwYXRjaCcgJworCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBIRUFEXiA+IHBhdGNoMyAmJgorCXRlc3Rfc2luZ2xlX251bWJlcmVkIHBhdGNoMworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC5udW1iZXJlZCAmJiAtLW5vLW51bWJlcmVkJyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm8tbnVtYmVyZWQgLS1zdGRvdXQgSEVBRH4yID5wYXRjaDQgJiYKKwl0ZXN0X25vX251bWJlcmVkIHBhdGNoNAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC5udW1iZXJlZCAmJiAtLWtlZXAtc3ViamVjdCcgJworCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWtlZXAtc3ViamVjdCAtLXN0ZG91dCBIRUFEXiA+cGF0Y2g0YSAmJgorCWdyZXAgIl5TdWJqZWN0OiBUaGlyZCIgcGF0Y2g0YQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC5udW1iZXJlZCA9IGF1dG8nICcKKworCWdpdCBjb25maWcgZm9ybWF0Lm51bWJlcmVkIGF1dG8gJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IEhFQUR+MiA+IHBhdGNoNSAmJgorCXRlc3RfbnVtYmVyZWQgcGF0Y2g1CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0Lm51bWJlcmVkID0gYXV0byAmJiBzaW5nbGUgcGF0Y2gnICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRF4gPiBwYXRjaDYgJiYKKwl0ZXN0X3NpbmdsZV9ub19udW1iZXJlZCBwYXRjaDYKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQubnVtYmVyZWQgPSBhdXRvICYmIC0tbm8tbnVtYmVyZWQnICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby1udW1iZXJlZCAtLXN0ZG91dCBIRUFEfjIgPiBwYXRjaDcgJiYKKwl0ZXN0X25vX251bWJlcmVkIHBhdGNoNworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RhcnQtbnVtYmVyICYmIC0tbnVtYmVyZWQnICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGFydC1udW1iZXIgMyAtLW51bWJlcmVkIC0tc3Rkb3V0IEhFQUR+MSA+IHBhdGNoOCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDMvM1xdIiBwYXRjaDgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlIHBhdGNoIHdpdGggY292ZXItbGV0dGVyIGRlZmF1bHRzIHRvIG51bWJlcnMnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0tc3Rkb3V0IEhFQUR+MSA+cGF0Y2g5LnNpbmdsZSAmJgorCXRlc3Rfc2luZ2xlX2NvdmVyX2xldHRlcl9udW1iZXJlZCBwYXRjaDkuc2luZ2xlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1VzZSAtLW5vLW51bWJlcmVkIGFuZCAtLWNvdmVyLWxldHRlciBzaW5nbGUgcGF0Y2gnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm8tbnVtYmVyZWQgLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgSEVBRH4xID5wYXRjaDEwICYmCisJdGVzdF9ub19udW1iZXJlZCBwYXRjaDEwCisnCisKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMjItZGlmZi1yZXdyaXRlLnNoIGIvdC90NDAyMi1kaWZmLXJld3JpdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmQxYzNkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMjItZGlmZi1yZXdyaXRlLnNoCkBAIC0wLDAgKzEsOTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXdyaXRlIGRpZmYnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWNhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HID50ZXN0ICYmCisJZ2l0IGFkZCB0ZXN0ICYmCisJdHIgXAorCSAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiIFwKKwkgICJub3BxcnN0dXZ3eHl6YWJjZGVmZ2hpamtsbU5PUFFSU1RVVldYWVpBQkNERUZHSElKS0xNIiBcCisJICA8IiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyA+dGVzdCAmJgorCWVjaG8gInRvIGJlIGRlbGV0ZWQiID50ZXN0MiAmJgorCWJsb2I9JChnaXQgaGFzaC1vYmplY3QgdGVzdDIpICYmCisJYmxvYj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkYmxvYikgJiYKKwlnaXQgYWRkIHRlc3QyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IHJld3JpdGUnICcKKworCWFjdHVhbD0kKGdpdCBkaWZmLWZpbGVzIC1CIC0tc3VtbWFyeSB0ZXN0KSAmJgorCXZlcmJvc2UgZXhwciAiJGFjdHVhbCIgOiAiIHJld3JpdGUgdGVzdCAoWzAtOV0qJSkkIgorCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitkaWZmIC0tZ2l0IGEvdGVzdDIgYi90ZXN0MgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAkYmxvYi4uMDAwMDAwMAorLS0tIGEvdGVzdDIKKysrKyAvZGV2L251bGwKK0BAIC0xICswLDAgQEAKKy10byBiZSBkZWxldGVkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgZGVsZXRpb24gZGlmZiB3aXRob3V0IC1EJyAnCisKKwlybSB0ZXN0MiAmJgorCWdpdCBkaWZmIC0tIHRlc3QyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitkaWZmIC0tZ2l0IGEvdGVzdDIgYi90ZXN0MgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAkYmxvYi4uMDAwMDAwMAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdXBwcmVzcyBkZWxldGlvbiBkaWZmIHdpdGggLUQnICcKKworCWdpdCBkaWZmIC1EIC0tIHRlc3QyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgZGVsZXRpb24gZGlmZiB3aXRoIC1CJyAnCisKKwlnaXQgZGlmZiAtQiAtLSB0ZXN0ID5hY3R1YWwgJiYKKwlncmVwICJMaW51cyBUb3J2YWxkcyIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1cHByZXNzIGRlbGV0aW9uIGRpZmYgd2l0aCAtQiAtRCcgJworCisJZ2l0IGRpZmYgLUIgLUQgLS0gdGVzdCA+YWN0dWFsICYmCisJZ3JlcCAtdiAiTGludXMgVG9ydmFsZHMiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGEgZmlsZSB0aGF0IGVuZHMgd2l0aCBhbiBpbmNvbXBsZXRlIGxpbmUnICcKKwl0ZXN0X3NlcSAxIDk5ID5zZXEgJiYKKwlwcmludGYgMTAwID4+c2VxICYmCisJZ2l0IGFkZCBzZXEgJiYKKwlnaXQgY29tbWl0IHNlcSAtbSBzZXEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3cml0ZSB0aGUgbWlkZGxlIDkwJSBvZiBzZXF1ZW5jZSBmaWxlIGFuZCB0ZXJtaW5hdGUgd2l0aCBuZXdsaW5lJyAnCisJdGVzdF9zZXEgMSA1ID5zZXEgJiYKKwl0ZXN0X3NlcSA5MzMxIDk0MjAgPj5zZXEgJiYKKwl0ZXN0X3NlcSA5NiAxMDAgPj5zZXEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlybSB0aGF0IHNlcXVlbmNlIGZpbGUgaXMgY29uc2lkZXJlZCBhIHJld3JpdGUnICcKKwlnaXQgZGlmZiAtQiBzZXEgPnJlcyAmJgorCWdyZXAgImRpc3NpbWlsYXJpdHkgaW5kZXgiIHJlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBuZXdsaW5lIGF0IGVvZiBpcyBvbiBpdHMgb3duIGxpbmUgd2l0aG91dCAtQicgJworCWdpdCBkaWZmIHNlcSA+cmVzICYmCisJZ3JlcCAiXlxcXFwgIiByZXMgJiYKKwkhIGdyZXAgIl4uLipcXFxcICIgcmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIG5ld2xpbmUgYXQgZW9mIGlzIG9uIGl0cyBvd24gbGluZSB3aXRoIC1CJyAnCisJZ2l0IGRpZmYgLUIgc2VxID5yZXMgJiYKKwlncmVwICJeXFxcXCAiIHJlcyAmJgorCSEgZ3JlcCAiXi4uKlxcXFwgIiByZXMKKycKKwordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDQwMjMtZGlmZi1yZW5hbWUtdHlwZWNoYW5nZS5zaCBiL3QvdDQwMjMtZGlmZi1yZW5hbWUtdHlwZWNoYW5nZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44Yzk4MjM3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAyMy1kaWZmLXJlbmFtZS10eXBlY2hhbmdlLnNoCkBAIC0wLDAgKzEsODcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0eXBlY2hhbmdlIHJlbmFtZSBkZXRlY3Rpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCXJtIC1mIGZvbyBiYXIgJiYKKwljYXQgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyA+Zm9vICYmCisJdGVzdF9sbl9zX2FkZCBsaW5rbGluayBiYXIgJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLWEgLW0gSW5pdGlhbCAmJgorCWdpdCB0YWcgb25lICYmCisKKwlnaXQgcm0gLWYgZm9vIGJhciAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HID5iYXIgJiYKKwl0ZXN0X2xuX3NfYWRkIGxpbmtsaW5rIGZvbyAmJgorCWdpdCBhZGQgYmFyICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBTZWNvbmQgJiYKKwlnaXQgdGFnIHR3byAmJgorCisJZ2l0IHJtIC1mIGZvbyBiYXIgJiYKKwljYXQgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1hIC1tIFRoaXJkICYmCisJZ2l0IHRhZyB0aHJlZSAmJgorCisJbXYgZm9vIGJhciAmJgorCXRlc3RfbG5fc19hZGQgbGlua2xpbmsgZm9vICYmCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgY29tbWl0IC1hIC1tIEZvdXJ0aCAmJgorCWdpdCB0YWcgZm91ciAmJgorCisJIyBUaGlzIGlzIHB1cmVseSBmb3Igc2FuaXR5IGNoZWNrCisKKwlnaXQgcm0gLWYgZm9vIGJhciAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HID5mb28gJiYKKwljYXQgIiRURVNUX0RJUkVDVE9SWSIvLi4vTWFrZWZpbGUgPmJhciAmJgorCWdpdCBhZGQgZm9vIGJhciAmJgorCWdpdCBjb21taXQgLWEgLW0gRmlmdGggJiYKKwlnaXQgdGFnIGZpdmUgJiYKKworCWdpdCBybSAtZiBmb28gYmFyICYmCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL01ha2VmaWxlID5mb28gJiYKKwljYXQgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyA+YmFyICYmCisJZ2l0IGFkZCBmb28gYmFyICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBTaXh0aCAmJgorCWdpdCB0YWcgc2l4CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3Jvc3MgcmVuYW1lcyB0byBiZSBkZXRlY3RlZCBmb3IgcmVndWxhciBmaWxlcycgJworCisJZ2l0IGRpZmYtdHJlZSBmaXZlIHNpeCAtciAtLW5hbWUtc3RhdHVzIC1CIC1NIHwgc29ydCA+YWN0dWFsICYmCisJeworCQllY2hvICJSMTAwCWZvbwliYXIiCisJCWVjaG8gIlIxMDAJYmFyCWZvbyIKKwl9IHwgc29ydCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nyb3NzIHJlbmFtZXMgdG8gYmUgZGV0ZWN0ZWQgZm9yIHR5cGVjaGFuZ2UnICcKKworCWdpdCBkaWZmLXRyZWUgb25lIHR3byAtciAtLW5hbWUtc3RhdHVzIC1CIC1NIHwgc29ydCA+YWN0dWFsICYmCisJeworCQllY2hvICJSMTAwCWZvbwliYXIiCisJCWVjaG8gIlIxMDAJYmFyCWZvbyIKKwl9IHwgc29ydCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmVzIGFuZCByZW5hbWVzJyAnCisKKwlnaXQgZGlmZi10cmVlIHRocmVlIGZvdXIgLXIgLS1uYW1lLXN0YXR1cyAtQiAtTSB8IHNvcnQgPmFjdHVhbCAmJgorCXsKKwkJIyBzZWUgLUIgLU0gKCM2KSBpbiB0NDAwOAorCQllY2hvICJDMTAwCWZvbwliYXIiCisJCWVjaG8gIlQxMDAJZm9vIgorCX0gfCBzb3J0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDI0LWRpZmYtb3B0aW1pemUtY29tbW9uLnNoIGIvdC90NDAyNC1kaWZmLW9wdGltaXplLWNvbW1vbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YjQ0Y2UxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAyNC1kaWZmLW9wdGltaXplLWNvbW1vbi5zaApAQCAtMCwwICsxLDE1NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NvbW1vbiB0YWlsIG9wdGltaXphdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK3o9enp6enp6enogOyMgOAorej0iJHokeiR6JHokeiR6JHokeiIgOyMgNjQKK3o9IiR6JHokeiR6JHokeiR6JHoiIDsjIDUxMgorej0iJHokeiR6JHoiIDsjIDIwNDgKK3oyMDQ3PSQoZXhwciAiJHoiIDogJy5cKC4qXCknKSA7ICMyMDQ3CisKK3g9enp6enp6enp6egkJCTsjIDEwCit5PSIkeCR4JHgkeCR4JHgkeCR4JHgkeCIJOyMgMTAwCit6PSIkeSR5JHkkeSR5JHkkeSR5JHkkeSIJOyMgMTAwMAorejEwMDA9JHoKK3oxMDA9JHkKK3oxMD0keAorCit6cygpIHsKKwljb3VudD0iJDEiCisJd2hpbGUgdGVzdCAiJGNvdW50IiAtZ2UgMTAwMAorCWRvCisJCWNvdW50PSQoKCRjb3VudCAtIDEwMDApKQorCQlwcmludGYgIiVzIiAkejEwMDAKKwlkb25lCisJd2hpbGUgdGVzdCAiJGNvdW50IiAtZ2UgMTAwCisJZG8KKwkJY291bnQ9JCgoJGNvdW50IC0gMTAwKSkKKwkJcHJpbnRmICIlcyIgJHoxMDAKKwlkb25lCisJd2hpbGUgdGVzdCAiJGNvdW50IiAtZ2UgMTAKKwlkbworCQljb3VudD0kKCgkY291bnQgLSAxMCkpCisJCXByaW50ZiAiJXMiICR6MTAKKwlkb25lCisJd2hpbGUgdGVzdCAiJGNvdW50IiAtZ2UgMQorCWRvCisJCWNvdW50PSQoKCRjb3VudCAtIDEpKQorCQlwcmludGYgInoiCisJZG9uZQorfQorCit6YyAoKSB7CisJc2VkIC1lICIvXmluZGV4L2QiIFwKKwkJLWUgInMvJHoxMDAwL1EvZyIgXAorCQktZSAicy9RUVFRUVFRUVEvWjkwMDAvZyIgXAorCQktZSAicy9RUVFRUVFRUS9aODAwMC9nIiBcCisJCS1lICJzL1FRUVFRUVEvWjcwMDAvZyIgXAorCQktZSAicy9RUVFRUVEvWjYwMDAvZyIgXAorCQktZSAicy9RUVFRUS9aNTAwMC9nIiBcCisJCS1lICJzL1FRUVEvWjQwMDAvZyIgXAorCQktZSAicy9RUVEvWjMwMDAvZyIgXAorCQktZSAicy9RUS9aMjAwMC9nIiBcCisJCS1lICJzL1EvWjEwMDAvZyIgXAorCQktZSAicy8kejEwMC9RL2ciIFwKKwkJLWUgInMvUVFRUVFRUVFRL1o5MDAvZyIgXAorCQktZSAicy9RUVFRUVFRUS9aODAwL2ciIFwKKwkJLWUgInMvUVFRUVFRUS9aNzAwL2ciIFwKKwkJLWUgInMvUVFRUVFRL1o2MDAvZyIgXAorCQktZSAicy9RUVFRUS9aNTAwL2ciIFwKKwkJLWUgInMvUVFRUS9aNDAwL2ciIFwKKwkJLWUgInMvUVFRL1ozMDAvZyIgXAorCQktZSAicy9RUS9aMjAwL2ciIFwKKwkJLWUgInMvUS9aMTAwL2ciIFwKKwkJLWUgInMvMDAwWi8vZyIgXAorCQktZSAicy8kejEwL1EvZyIgXAorCQktZSAicy9RUVFRUVFRUVEvWjkwL2ciIFwKKwkJLWUgInMvUVFRUVFRUVEvWjgwL2ciIFwKKwkJLWUgInMvUVFRUVFRUS9aNzAvZyIgXAorCQktZSAicy9RUVFRUVEvWjYwL2ciIFwKKwkJLWUgInMvUVFRUVEvWjUwL2ciIFwKKwkJLWUgInMvUVFRUS9aNDAvZyIgXAorCQktZSAicy9RUVEvWjMwL2ciIFwKKwkJLWUgInMvUVEvWjIwL2ciIFwKKwkJLWUgInMvUS9aMTAvZyIgXAorCQktZSAicy8wMFovL2ciIFwKKwkJLWUgInMvei9RL2ciIFwKKwkJLWUgInMvUVFRUVFRUVFRL1o5L2ciIFwKKwkJLWUgInMvUVFRUVFRUVEvWjgvZyIgXAorCQktZSAicy9RUVFRUVFRL1o3L2ciIFwKKwkJLWUgInMvUVFRUVFRL1o2L2ciIFwKKwkJLWUgInMvUVFRUVEvWjUvZyIgXAorCQktZSAicy9RUVFRL1o0L2ciIFwKKwkJLWUgInMvUVFRL1ozL2ciIFwKKwkJLWUgInMvUVEvWjIvZyIgXAorCQktZSAicy9RL1oxL2ciIFwKKwkJLWUgInMvMFovL2ciIFwKKwk7Cit9CisKK2V4cGVjdF9wYXR0ZXJuICgpIHsKKwljbnQ9IiQxIgorCWNhdCA8PEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUtYSRjbnQgYi9maWxlLWEkY250CistLS0gYS9maWxlLWEkY250CisrKysgYi9maWxlLWEkY250CitAQCAtMSArMSBAQAorLVoke2NudH1hCisrWiR7Y250fUEKK2RpZmYgLS1naXQgYS9maWxlLWIkY250IGIvZmlsZS1iJGNudAorLS0tIGEvZmlsZS1iJGNudAorKysrIGIvZmlsZS1iJGNudAorQEAgLTEgKzEgQEAKKy1iCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUtYyRjbnQgYi9maWxlLWMkY250CistLS0gYS9maWxlLWMkY250CisrKysgYi9maWxlLWMkY250CitAQCAtMSArMSBAQAorLWNaJGNudAorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrQ1okY250CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9maWxlLWQkY250IGIvZmlsZS1kJGNudAorLS0tIGEvZmlsZS1kJGNudAorKysrIGIvZmlsZS1kJGNudAorQEAgLTEgKzEgQEAKKy1kCisrRAorRU9GCit9CisKK3NhbXBsZT0nMTAyMyAxMDI0IDEwMjUgMjA0NyA0MDk1JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWZvciBuIGluICRzYW1wbGUKKwlkbworCQkoIHpzICRuICYmIGVjaG8gYSApID5maWxlLWEkbiAmJgorCQkoIGVjaG8gYiAmJiB6cyAkbiAmJiBlY2hvICkgPmZpbGUtYiRuICYmCisJCSggcHJpbnRmIGMgJiYgenMgJG4gKSA+ZmlsZS1jJG4gJiYKKwkJKCBlY2hvIGQgJiYgenMgJG4gKSA+ZmlsZS1kJG4gJiYKKworCQlnaXQgYWRkIGZpbGUtYSRuIGZpbGUtYiRuIGZpbGUtYyRuIGZpbGUtZCRuICYmCisKKwkJKCB6cyAkbiAmJiBlY2hvIEEgKSA+ZmlsZS1hJG4gJiYKKwkJKCBlY2hvIEIgJiYgenMgJG4gJiYgZWNobyApID5maWxlLWIkbiAmJgorCQkoIHByaW50ZiBDICYmIHpzICRuICkgPmZpbGUtYyRuICYmCisJCSggZWNobyBEICYmIHpzICRuICkgPmZpbGUtZCRuICYmCisKKwkJZXhwZWN0X3BhdHRlcm4gJG4gfHwgcmV0dXJuIDEKKworCWRvbmUgPmV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1VMCcgJworCisJZm9yIG4gaW4gJHNhbXBsZQorCWRvCisJCWdpdCBkaWZmIC1VMCBmaWxlLT8kbgorCWRvbmUgfCB6YyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAyNS1odW5rLWhlYWRlci5zaCBiL3QvdDQwMjUtaHVuay1oZWFkZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzU1NzhmMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMjUtaHVuay1oZWFkZXIuc2gKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgaHVuayBoZWFkZXIgdHJ1bmNhdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK049J+aXpeacrOiqnicKK04xPSfml6UnCitOMj0n5pel5pysJworTlM9IiROJE4kTiROJE4kTiROJE4kTiROJE4kTiROIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCSgKKwkJZWNobyAiQSAkTlMiICYmCisJCWZvciBjIGluIEIgQyBEIEUgRiBHIEggSSBKIEsKKwkJZG8KKwkJCWVjaG8gIiAgJGMiCisJCWRvbmUgJiYKKwkJZWNobyAiTCAgJE5TIiAmJgorCQlmb3IgYyBpbiBNIE4gTyBQIFEgUiBTIFQgVSBWCisJCWRvCisJCQllY2hvICIgICRjIgorCQlkb25lCisJKSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCisJc2VkIC1lICIvXiAgW0VQXS9zLyQvIG1vZGlmaWVkLyIgPGZpbGUgPmZpbGUrICYmCisJbXYgZmlsZSsgZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h1bmsgaGVhZGVyIHRydW5jYXRpb24gd2l0aCBhbiBvdmVybHkgbG9uZyBsaW5lJyAnCisKKwlnaXQgZGlmZiB8IHNlZCAtbiAtZSAicy9eLipAQC8vcCIgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiIEEgJE4kTiROJE4kTiROJE4kTiROMiIgJiYKKwkJZWNobyAiIEwgICROJE4kTiROJE4kTiROJE4kTjEiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMjYtY29sb3Iuc2ggYi90L3Q0MDI2LWNvbG9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwYjY0MmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDI2LWNvbG9yLnNoCkBAIC0wLDAgKzEsMTQxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IFRpbW8gSGlydm9uZW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBkaWZmL3N0YXR1cyBjb2xvciBlc2NhcGUgY29kZXMnCisuIC4vdGVzdC1saWIuc2gKKworRVNDPSQocHJpbnRmICdcMDMzJykKK2NvbG9yKCkKK3sKKwlhY3R1YWw9JChnaXQgY29uZmlnIC0tZ2V0LWNvbG9yIG5vLnN1Y2guc2xvdCAiJDEiKSAmJgorCXRlc3QgIiRhY3R1YWwiID0gIiR7MjorJEVTQ30kMiIKK30KKworaW52YWxpZF9jb2xvcigpCit7CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdldC1jb2xvciBuby5zdWNoLnNsb3QgIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCcgJworCWNvbG9yICJyZXNldCIgIlttIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBjb2xvciBpcyBlbXB0eScgJworCWNvbG9yICIiICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dHJpYnV0ZSBiZWZvcmUgY29sb3IgbmFtZScgJworCWNvbG9yICJib2xkIHJlZCIgIlsxOzMxbSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWl4dGVybSBicmlnaHQgZmcgY29sb3InICcKKwljb2xvciAiYnJpZ2h0cmVkIiAiWzkxbSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWl4dGVybSBicmlnaHQgYmcgY29sb3InICcKKwljb2xvciAiZ3JlZW4gYnJpZ2h0Ymx1ZSIgIlszMjsxMDRtIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb2xvciBuYW1lIGJlZm9yZSBhdHRyaWJ1dGUnICcKKwljb2xvciAicmVkIGJvbGQiICJbMTszMW0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dHIgZmcgYmcnICcKKwljb2xvciAidWwgYmx1ZSByZWQiICJbNDszNDs0MW0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZnIGF0dHIgYmcnICcKKwljb2xvciAiYmx1ZSB1bCByZWQiICJbNDszNDs0MW0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZnIGJnIGF0dHInICcKKwljb2xvciAiYmx1ZSByZWQgdWwiICJbNDszNDs0MW0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZnIGJnIGF0dHIuLi4nICcKKwljb2xvciAiYmx1ZSBib2xkIGRpbSB1bCBibGluayByZXZlcnNlIiAiWzE7Mjs0OzU7NzszNG0iCisnCisKKyMgbm90ZSB0aGF0IG5vYm9sZCBhbmQgbm9kaW0gYXJlIHRoZSBzYW1lIGNvZGUgKDIyKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0ciBuZWdhdGlvbicgJworCWNvbG9yICJub2JvbGQgbm9kaW0gbm91bCBub2JsaW5rIG5vcmV2ZXJzZSIgIlsyMjsyNDsyNTsyN20iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJuby0iIHZhcmlhbnQgb2YgbmVnYXRpb24nICcKKwljb2xvciAibm8tYm9sZCBuby1ibGluayIgIlsyMjsyNW0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgY29sb3Igc3BlY2lmaWNhdGlvbicgJworCWNvbG9yICIyNTQgMjU1IGJvbGQgZGltIHVsIGJsaW5rIHJldmVyc2UiICJbMTsyOzQ7NTs3OzM4OzU7MjU0OzQ4OzU7MjU1bSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzdXJkbHkgbG9uZyBjb2xvciBzcGVjaWZpY2F0aW9uJyAnCisJY29sb3IgXAorCSAgIiNmZmZmZmYgI2ZmZmZmZiBib2xkIG5vYm9sZCBkaW0gbm9kaW0gaXRhbGljIG5vaXRhbGljCisJICAgdWwgbm91bCBibGluayBub2JsaW5rIHJldmVyc2Ugbm9yZXZlcnNlIHN0cmlrZSBub3N0cmlrZSIgXAorCSAgIlsxOzI7Mzs0OzU7Nzs5OzIyOzIzOzI0OzI1OzI3OzI5OzM4OzI7MjU1OzI1NTsyNTU7NDg7MjsyNTU7MjU1OzI1NW0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzAtNyBhcmUgYWxpYXNlcyBmb3IgYmFzaWMgQU5TSSBjb2xvciBuYW1lcycgJworCWNvbG9yICIwIDciICJbMzA7NDdtIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc4LTE1IGFyZSBhbGlhc2VzIGZvciBhaXh0ZXJtIGNvbG9yIG5hbWVzJyAnCisJY29sb3IgIjEyIDEzIiAiWzk0OzEwNW0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzI1NiBjb2xvcnMnICcKKwljb2xvciAiMjU0IGJvbGQgMjU1IiAiWzE7Mzg7NTsyNTQ7NDg7NTsyNTVtIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyNC1iaXQgY29sb3JzJyAnCisJY29sb3IgIiNmZjAwZmYgYmxhY2siICJbMzg7MjsyNTU7MDsyNTU7NDBtIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcibm9ybWFsIiB5aWVsZHMgbm8gY29sb3IgYXQgYWxsIicgJworCWNvbG9yICJub3JtYWwgYmxhY2siICJbNDBtIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctMSBpcyBhIHN5bm9ueW0gZm9yICJub3JtYWwiJyAnCisJY29sb3IgIi0xIGJsYWNrIiAiWzQwbSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29sb3IgdG9vIHNtYWxsJyAnCisJaW52YWxpZF9jb2xvciAiLTIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbG9yIHRvbyBiaWcnICcKKwlpbnZhbGlkX2NvbG9yICIyNTYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4dHJhIGNoYXJhY3RlciBhZnRlciBjb2xvciBudW1iZXInICcKKwlpbnZhbGlkX2NvbG9yICIzWCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXh0cmEgY2hhcmFjdGVyIGFmdGVyIGNvbG9yIG5hbWUnICcKKwlpbnZhbGlkX2NvbG9yICJyZWRYIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRyYSBjaGFyYWN0ZXIgYWZ0ZXIgYXR0cmlidXRlJyAnCisJaW52YWxpZF9jb2xvciAiZGltWCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5rbm93biBjb2xvciBzbG90cyBhcmUgaWdub3JlZCAoZGlmZiknICcKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYubm9zdWNoc2xvdHdpbGxldmVyYmVkZWZpbmVkIHdoaXRlICYmCisJZ2l0IGRpZmYgLS1jb2xvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmtub3duIGNvbG9yIHNsb3RzIGFyZSBpZ25vcmVkIChicmFuY2gpJyAnCisJZ2l0IGNvbmZpZyBjb2xvci5icmFuY2gubm9zdWNoc2xvdHdpbGxldmVyYmVkZWZpbmVkIHdoaXRlICYmCisJZ2l0IGJyYW5jaCAtYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmtub3duIGNvbG9yIHNsb3RzIGFyZSBpZ25vcmVkIChzdGF0dXMpJyAnCisJZ2l0IGNvbmZpZyBjb2xvci5zdGF0dXMubm9zdWNoc2xvdHdpbGxldmVyYmVkZWZpbmVkIHdoaXRlICYmCisJeyBnaXQgc3RhdHVzOyByZXQ9JD87IH0gJiYKKwljYXNlICRyZXQgaW4gMHwxKSA6IG9rIDs7ICopIGZhbHNlIDs7IGVzYWMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDI3LWRpZmYtc3VibW9kdWxlLnNoIGIvdC90NDAyNy1kaWZmLXN1Ym1vZHVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMjlkZWFmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAyNy1kaWZmLXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDI4NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmZlcmVuY2UgaW4gc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3Rfb2lkX2luaXQgJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWVjaG8gaGVsbG8gPndvcmxkICYmCisJCWdpdCBhZGQgd29ybGQgJiYKKwkJZ2l0IGNvbW1pdCAtbSBzdWJtb2R1bGUKKwkpICYmCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIGZyb3R6ID5uaXRmb2wgJiYKKwlnaXQgYWRkIG5pdGZvbCBzdWIgJiYKKwlnaXQgY29tbWl0IC1tIHN1cGVycHJvamVjdCAmJgorCisJKAorCQljZCBzdWIgJiYKKwkJZWNobyBnb29kYnllID53b3JsZCAmJgorCQlnaXQgYWRkIHdvcmxkICYmCisJCWdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSAjMiIKKwkpICYmCisKKwlzZXQgeCAkKAorCQljZCBzdWIgJiYKKwkJZ2l0IHJldi1saXN0IEhFQUQKKwkpICYmCisJZWNobyAiOjE2MDAwMCAxNjAwMDAgJDMgJFpFUk9fT0lEIE0Jc3ViIiA+ZXhwZWN0ICYmCisJc3VidGlwPSQzIHN1YnByZXY9JDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1yYXcgSEVBRCcgJworCWhleHN6PSQodGVzdF9vaWQgaGV4c3opICYmCisJZ2l0IGRpZmYgLS1yYXcgLS1hYmJyZXY9JGhleHN6IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtaW5kZXggLS1yYXcgSEVBRCcgJworCWdpdCBkaWZmLWluZGV4IC0tcmF3IEhFQUQgPmFjdHVhbC5pbmRleCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtZmlsZXMgLS1yYXcnICcKKwlnaXQgZGlmZi1maWxlcyAtLXJhdyA+YWN0dWFsLmZpbGVzICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWxlcworJworCitleHBlY3RfZnJvbV90byAoKSB7CisJcHJpbnRmICIlc1N1YnByb2plY3QgY29tbWl0ICVzXG4rU3VicHJvamVjdCBjb21taXQgJXNcbiIgXAorCQkiLSIgIiQxIiAiJDIiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQnICcKKwlnaXQgZGlmZiBIRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJ0aXAgJHN1YnByZXYgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiBIRUFEIHdpdGggZGlydHkgc3VibW9kdWxlICh3b3JrIHRyZWUpJyAnCisJZWNobyA+PnN1Yi93b3JsZCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKGluZGV4KScgJworCSgKKwkJY2Qgc3ViICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZWNobyA+PndvcmxkICYmCisJCWdpdCBhZGQgd29ybGQKKwkpICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VidGlwICRzdWJwcmV2LWRpcnR5ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvZHkgYWN0dWFsLmJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgSEVBRCB3aXRoIGRpcnR5IHN1Ym1vZHVsZSAodW50cmFja2VkKScgJworCSgKKwkJY2Qgc3ViICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNsZWFuIC1xZmR4ICYmCisJCT5jcnVmdAorCSkgJiYKKwlnaXQgZGlmZiBIRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJ0aXAgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiBIRUFEIHdpdGggZGlydHkgc3VibW9kdWxlICh3b3JrIHRyZWUsIHJlZnMgbWF0Y2gpJyAnCisJZ2l0IGNvbW1pdCAtbSAieCIgc3ViICYmCisJZWNobyA+PnN1Yi93b3JsZCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnByZXYgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keSAmJgorCWdpdCBkaWZmIC0taWdub3JlLXN1Ym1vZHVsZXMgSEVBRCA+YWN0dWFsMiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwyICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgSEVBRCA+YWN0dWFsMyAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbDMgPmFjdHVhbDMuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbDMuYm9keSAmJgorCWdpdCBkaWZmIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgSEVBRCA+YWN0dWFsNCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWw0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKHdvcmsgdHJlZSwgcmVmcyBtYXRjaCkgWy5naXRtb2R1bGVzXScgJworCWdpdCBjb25maWcgZGlmZi5pZ25vcmVTdWJtb2R1bGVzIGRpcnR5ICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIG5vbmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc3ViICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHN1YiAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsMiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDMgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwzID5hY3R1YWwzLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnByZXYgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwzLmJvZHkgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBkaXJ0eSAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsNCAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIG5vbmUgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc3ViICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYuaWdub3JlU3VibW9kdWxlcyAmJgorCXJtIC5naXRtb2R1bGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKGluZGV4LCByZWZzIG1hdGNoKScgJworCSgKKwkJY2Qgc3ViICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZWNobyA+PndvcmxkICYmCisJCWdpdCBhZGQgd29ybGQKKwkpICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKHVudHJhY2tlZCwgcmVmcyBtYXRjaCknICcKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjbGVhbiAtcWZkeCAmJgorCQk+Y3J1ZnQKKwkpICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz1hbGwgSEVBRCA+YWN0dWFsMiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwyICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgSEVBRCA+YWN0dWFsMyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwzICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSBIRUFEID5hY3R1YWw0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgSEVBRCB3aXRoIGRpcnR5IHN1Ym1vZHVsZSAodW50cmFja2VkLCByZWZzIG1hdGNoKSBbLmdpdG1vZHVsZXNdJyAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHN1YiAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsMiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDMgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsMyAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGRpcnR5ICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsNCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWw0ICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzdWIgJiYKKwlnaXQgZGlmZiBIRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJwcmV2ICRzdWJwcmV2LWRpcnR5ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvZHkgYWN0dWFsLmJvZHkgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlybSAuZ2l0bW9kdWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiBiZXR3ZWVuIHN1Ym1vZHVsZSBjb21taXRzJyAnCisJZ2l0IGRpZmYgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldiAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSBIRUFEXi4uSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VidGlwICRzdWJwcmV2ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvZHkgYWN0dWFsLmJvZHkgJiYKKwlnaXQgZGlmZiAtLWlnbm9yZS1zdWJtb2R1bGVzIEhFQUReLi5IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIGJldHdlZW4gc3VibW9kdWxlIGNvbW1pdHMgWy5naXRtb2R1bGVzXScgJworCWdpdCBkaWZmIEhFQUReLi5IRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJ0aXAgJHN1YnByZXYgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGRpcnR5ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHN1YiAmJgorCWdpdCBkaWZmIEhFQUReLi5IRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJ0aXAgJHN1YnByZXYgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGFsbCAmJgorCWdpdCBkaWZmIEhFQUReLi5IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc3ViICYmCisJZ2l0IGRpZmYgIEhFQUReLi5IRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJ0aXAgJHN1YnByZXYgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlybSAuZ2l0bW9kdWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAoZW1wdHkgc3VibW9kdWxlIGRpciknICcKKwlybSAtcmYgc3ViLyogc3ViLy5naXQgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbC5lbXB0eSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3RlZCBzdWJtb2R1bGUgc2V0dXAnICcKKwljPSQodGVzdF9vaWQgZmZfMSkgJiYKKwkoCisJCWVjaG8gIjAwMDAwMCAkWkVST19PSUQgMAlzdWIiICYmCisJCWVjaG8gIjE2MDAwMCAxJGMgMQlzdWIiICYmCisJCWVjaG8gIjE2MDAwMCAyJGMgMglzdWIiICYmCisJCWVjaG8gIjE2MDAwMCAzJGMgMwlzdWIiCisJKSB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJZWNobyA+ZXhwZWN0Lm5vc3ViICJkaWZmIC0tY2Mgc3ViCitpbmRleCAyZmZmZmZmLDNmZmZmZmYuLjAwMDAwMDAKKy0tLSBhL3N1YgorKysrIGIvc3ViCitAQEAgLTEsMSAtMSwxICsxLDEgQEBACistIFN1YnByb2plY3QgY29tbWl0IDIkYworIC1TdWJwcm9qZWN0IGNvbW1pdCAzJGMKKysrU3VicHJvamVjdCBjb21taXQgJFpFUk9fT0lEIiAmJgorCisJaGg9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJc2VkIC1lICJzLyRaRVJPX09JRC8kaGgvIiBleHBlY3Qubm9zdWIgPmV4cGVjdC53aXRoc3ViCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZWQgKGVtcHR5IHN1Ym1vZHVsZSknICcKKwlybSAtZnIgc3ViICYmIG1rZGlyIHN1YiAmJgorCWdpdCBkaWZmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qubm9zdWIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmVkICh3aXRoIHN1Ym1vZHVsZSknICcKKwlybSAtZnIgc3ViICYmCisJZ2l0IGNsb25lIC0tbm8tY2hlY2tvdXQgLiBzdWIgJiYKKwlnaXQgZGlmZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LndpdGhzdWIgYWN0dWFsCisnCisKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMjgtZm9ybWF0LXBhdGNoLW1pbWUtaGVhZGVycy5zaCBiL3QvdDQwMjgtZm9ybWF0LXBhdGNoLW1pbWUtaGVhZGVycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMDRiYTY3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAyOC1mb3JtYXQtcGF0Y2gtbWltZS1oZWFkZXJzLnNoCkBAIC0wLDAgKzEsMzAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmb3JtYXQtcGF0Y2ggbWltZSBoZWFkZXJzIGFuZCBleHRyYSBoZWFkZXJzIGRvIG5vdCBjb25mbGljdCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgY29tbWl0IHdpdGggdXRmLTggYm9keScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZWNobyBtb3JlID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gInR3bworCisJdXRmLTggYm9keTogw7EiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIGhhcyBtaW1lIGhlYWRlcnMnICcKKwlybSAtZiAwMDAxLXR3by5wYXRjaCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggSEVBRF4gJiYKKwlncmVwIC1pICJjb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiIDAwMDEtdHdvLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIGhhcyBtaW1lIGFuZCBleHRyYSBoZWFkZXJzJyAnCisJcm0gLWYgMDAwMS10d28ucGF0Y2ggJiYKKwlnaXQgY29uZmlnIGZvcm1hdC5oZWFkZXJzICJ4LWZvbzogYmFyIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggSEVBRF4gJiYKKwlncmVwIC1pICJ4LWZvbzogYmFyIiAwMDAxLXR3by5wYXRjaCAmJgorCWdyZXAgLWkgImNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIgMDAwMS10d28ucGF0Y2gKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDI5LWRpZmYtdHJhaWxpbmctc3BhY2Uuc2ggYi90L3Q0MDI5LWRpZmYtdHJhaWxpbmctc3BhY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzJiNmU5YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMjktZGlmZi10cmFpbGluZy1zcGFjZS5zaApAQCAtMCwwICsxLDQzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSBKaW0gTWV5ZXJpbmcKKyMKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgaG9ub3JzIGNvbmZpZyBvcHRpb24sIGRpZmYuc3VwcHJlc3NCbGFua0VtcHR5JworCisuIC4vdGVzdC1saWIuc2gKKworY2F0IDw8XEVPRiA+ZXhwZWN0ZWQgfHwKK2RpZmYgLS1naXQgYS9mIGIvZgoraW5kZXggNWY2YTI2My4uOGNiOGJhZSAxMDA2NDQKKy0tLSBhL2YKKysrKyBiL2YKK0BAIC0xLDIgKzEsMiBAQAorCisteAorK3kKK0VPRgorZXhpdCAxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiR0ZXN0X2Rlc2NyaXB0aW9uIiAnCisJcHJpbnRmICJcbnhcbiIgPiBmICYmCisJYmVmb3JlPSQoZ2l0IGhhc2gtb2JqZWN0IGYpICYmCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRiZWZvcmUpICYmCisJZ2l0IGFkZCBmICYmCisJZ2l0IGNvbW1pdCAtcSAtbS4gZiAmJgorCXByaW50ZiAiXG55XG4iID4gZiAmJgorCWFmdGVyPSQoZ2l0IGhhc2gtb2JqZWN0IGYpICYmCisJYWZ0ZXI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJGFmdGVyKSAmJgorCXNlZCAtZSAicy9eaW5kZXggLiovaW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NC8iIGV4cGVjdGVkID5leHAgJiYKKwlnaXQgY29uZmlnIC0tYm9vbCBkaWZmLnN1cHByZXNzQmxhbmtFbXB0eSB0cnVlICYmCisJZ2l0IGRpZmYgZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cCBhY3R1YWwgJiYKKwlwZXJsIC1pLmJhayAtcCAtZSAicy9eXCQvIC8iIGV4cCAmJgorCWdpdCBjb25maWcgLS1ib29sIGRpZmYuc3VwcHJlc3NCbGFua0VtcHR5IGZhbHNlICYmCisJZ2l0IGRpZmYgZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cCBhY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tYm9vbCAtLXVuc2V0IGRpZmYuc3VwcHJlc3NCbGFua0VtcHR5ICYmCisJZ2l0IGRpZmYgZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDMwLWRpZmYtdGV4dGNvbnYuc2ggYi90L3Q0MDMwLWRpZmYtdGV4dGNvbnYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGNiOWYwZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzAtZGlmZi10ZXh0Y29udi5zaApAQCAtMCwwICsxLDE3NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYuKi50ZXh0Y29udiB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorCitmaW5kX2RpZmYoKSB7CisJc2VkICcxLC9eaW5kZXggL2QnIHwgc2VkICcvXi0tICQvLCRkJworfQorCitjYXQgPmV4cGVjdC5iaW5hcnkgPDwnRU9GJworQmluYXJ5IGZpbGVzIGEvZmlsZSBhbmQgYi9maWxlIGRpZmZlcgorRU9GCisKK2NhdCA+ZXhwZWN0LnRleHQgPDwnRU9GJworLS0tIGEvZmlsZQorKysrIGIvZmlsZQorQEAgLTEgKzEsMiBAQAorIDAKKysxCitFT0YKKworY2F0ID5oZXhkdW1wIDw8J0VPRicKKyMhL2Jpbi9zaAorIiRQRVJMX1BBVEgiIC1lICckLyA9IHVuZGVmOyAkXyA9IDw+OyBzLy4vb3JkKCQmKS9nZTsgcHJpbnQgJF8nIDwgIiQxIgorRU9GCitjaG1vZCAreCBoZXhkdW1wCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJpbmFyeSBmaWxlIHdpdGggaGlzdG9yeScgJworCXByaW50ZiAiXFwwXFxuIiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJcHJpbnRmICJcXDAxXFxuIiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGlzIGNvbnNpZGVyZWQgYmluYXJ5IGJ5IHBvcmNlbGFpbicgJworCWdpdCBkaWZmIEhFQUReIEhFQUQgPmRpZmYgJiYKKwlmaW5kX2RpZmYgPGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5iaW5hcnkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgaXMgY29uc2lkZXJlZCBiaW5hcnkgYnkgcGx1bWJpbmcnICcKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUReIEhFQUQgPmRpZmYgJiYKKwlmaW5kX2RpZmYgPGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5iaW5hcnkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRleHRjb252IGZpbHRlcnMnICcKKwllY2hvIGZpbGUgZGlmZj1mb28gPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBkaWZmLmZvby50ZXh0Y29udiAiXCIkKHB3ZClcIiIvaGV4ZHVtcCAmJgorCWdpdCBjb25maWcgZGlmZi5mYWlsLnRleHRjb252IGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgcHJvZHVjZXMgdGV4dCcgJworCWdpdCBkaWZmIEhFQUReIEhFQUQgPmRpZmYgJiYKKwlmaW5kX2RpZmYgPGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC50ZXh0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IGNvbW1pdCBwcm9kdWNlcyB0ZXh0JyAnCisJZ2l0IHNob3cgSEVBRCA+ZGlmZiAmJgorCWZpbmRfZGlmZiA8ZGlmZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnRleHQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSBwcm9kdWNlcyBiaW5hcnknICcKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUReIEhFQUQgPmRpZmYgJiYKKwlmaW5kX2RpZmYgPGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5iaW5hcnkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBwcm9kdWNlcyB0ZXh0JyAnCisJZ2l0IGxvZyAtMSAtcCA+bG9nICYmCisJZmluZF9kaWZmIDxsb2cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC50ZXh0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggcHJvZHVjZXMgYmluYXJ5JyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLWJpbmFyeSAtLXN0ZG91dCBIRUFEXiA+cGF0Y2ggJiYKKwlmaW5kX2RpZmYgPHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYmluYXJ5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXYgcHJvZHVjZXMgdGV4dCcgJworCWdpdCByZXNldCAtLXNvZnQgSEVBRF4gJiYKKwlnaXQgc3RhdHVzIC12ID5kaWZmICYmCisJZmluZF9kaWZmIDxkaWZmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QudGV4dCBhY3R1YWwgJiYKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQURAezF9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgYmxvYiBwcm9kdWNlcyBiaW5hcnknICcKKwlnaXQgc2hvdyBIRUFEOmZpbGUgPmFjdHVhbCAmJgorCXByaW50ZiAiXFwwXFxuXFwwMVxcbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyAtLXRleHRjb252IGJsb2IgcHJvZHVjZXMgdGV4dCcgJworCWdpdCBzaG93IC0tdGV4dGNvbnYgSEVBRDpmaWxlID5hY3R1YWwgJiYKKwlwcmludGYgIjBcXG4xXFxuIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IC0tbm8tdGV4dGNvbnYgYmxvYiBwcm9kdWNlcyBiaW5hcnknICcKKwlnaXQgc2hvdyAtLW5vLXRleHRjb252IEhFQUQ6ZmlsZSA+YWN0dWFsICYmCisJcHJpbnRmICJcXDBcXG5cXDAxXFxuIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwLWRpZmYgKC1HKSBvcGVyYXRlcyBvbiB0ZXh0Y29udiBkYXRhIChhZGQpJyAnCisJZWNobyBvbmUgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1yb290IC0tZm9ybWF0PSVzIC1HMCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwLWRpZmYgKC1HKSBvcGVyYXRlcyBvbiB0ZXh0Y29udiBkYXRhIChtb2RpZmljYXRpb24pJyAnCisJZWNobyB0d28gPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1yb290IC0tZm9ybWF0PSVzIC1HMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwaWNrYXhlICgtUykgb3BlcmF0ZXMgb24gdGV4dGNvbnYgZGF0YSAoYWRkKScgJworCWVjaG8gb25lID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tcm9vdCAtLWZvcm1hdD0lcyAtUzAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGlja2F4ZSAoLVMpIG9wZXJhdGVzIG9uIHRleHRjb252IGRhdGEgKG1vZGlmaWNhdGlvbiknICcKKwllY2hvIHR3byA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLXJvb3QgLS1mb3JtYXQ9JXMgLVMxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0LnN0YXQgPDwnRU9GJworIGZpbGUgfCBCaW4gMiAtPiA0IGJ5dGVzCisgMSBmaWxlIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnN0YXQgZG9lcyBub3QgcnVuIHRleHRjb252JyAnCisJZWNobyBmaWxlIGRpZmY9ZmFpbCA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgZGlmZiAtLXN0YXQgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5zdGF0IGFjdHVhbCAmJgorCisJaGVhZCAtbjEgPGV4cGVjdC5zdGF0ID5leHBlY3QubGluZTEgJiYKKwloZWFkIC1uMSA8YWN0dWFsID5hY3R1YWwubGluZTEgJiYKKwl0ZXN0X2NtcCBleHBlY3QubGluZTEgYWN0dWFsLmxpbmUxCisnCisjIHJlc3RvcmUgd29ya2luZyBzZXR1cAorZWNobyBmaWxlIGRpZmY9Zm9vID4uZ2l0YXR0cmlidXRlcworCitzeW1saW5rPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQocHJpbnRmIGZyb3R6IHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pKQorY2F0ID5leHBlY3QudHlwZWNoYW5nZSA8PEVPRgorLS0tIGEvZmlsZQorKysrIC9kZXYvbnVsbAorQEAgLTEsMiArMCwwIEBACistMAorLTEKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQorbmV3IGZpbGUgbW9kZSAxMjAwMDAKK2luZGV4IDAwMDAwMDAuLiRzeW1saW5rCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlCitAQCAtMCwwICsxIEBACisrZnJvdHoKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RleHRjb252IGRvZXMgbm90IGFjdCBvbiBzeW1saW5rcycgJworCXJtIC1mIGZpbGUgJiYKKwl0ZXN0X2xuX3NfYWRkIGZyb3R6IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIHR5cGVjaGFuZ2UgJiYKKwlnaXQgc2hvdyA+ZGlmZiAmJgorCWZpbmRfZGlmZiA8ZGlmZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnR5cGVjaGFuZ2UgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAzMS1kaWZmLXJld3JpdGUtYmluYXJ5LnNoIGIvdC90NDAzMS1kaWZmLXJld3JpdGUtYmluYXJ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVhY2M2NjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDMxLWRpZmYtcmV3cml0ZS1iaW5hcnkuc2gKQEAgLTAsMCArMSw4MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jld3JpdGUgZGlmZiBvbiBiaW5hcnkgZmlsZScKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgV2UgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gbWVldCB0aGUgTUlOSU1VTV9CUkVBS19TSVpFCisjIHJlcXVpcmVtZW50LgorbWFrZV9maWxlKCkgeworCSMgY29tbW9uIGZpcnN0IGxpbmUgdG8gaGVscCBpZGVudGlmeSByZXdyaXRlIHZlcnN1cyByZWd1bGFyIGRpZmYKKwlwcmludGYgIj1cbiIgPmZpbGUKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMAorCWRvCisJCWZvciBqIGluIDEgMiAzIDQgNSA2IDcgOCA5CisJCWRvCisJCQlmb3IgayBpbiAxIDIgMyA0IDUKKwkJCWRvCisJCQkJcHJpbnRmICIkMVxuIgorCQkJZG9uZQorCQlkb25lCisJZG9uZSA+PmZpbGUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGJpbmFyeSBmaWxlIHdpdGggY2hhbmdlcycgJworCW1ha2VfZmlsZSAiXFwwIiAmJgorCWdpdCBhZGQgZmlsZSAmJgorCW1ha2VfZmlsZSAiXFwwMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFuaWxsYSBkaWZmIGlzIGJpbmFyeScgJworCWdpdCBkaWZmID5kaWZmICYmCisJZ3JlcCAiQmluYXJ5IGZpbGVzIGEvZmlsZSBhbmQgYi9maWxlIGRpZmZlciIgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlIGRpZmYgaXMgYmluYXJ5JyAnCisJZ2l0IGRpZmYgLUIgPmRpZmYgJiYKKwlncmVwICJkaXNzaW1pbGFyaXR5IGluZGV4IiBkaWZmICYmCisJZ3JlcCAiQmluYXJ5IGZpbGVzIGEvZmlsZSBhbmQgYi9maWxlIGRpZmZlciIgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlIGRpZmYgY2FuIHNob3cgYmluYXJ5IHBhdGNoJyAnCisJZ2l0IGRpZmYgLUIgLS1iaW5hcnkgPmRpZmYgJiYKKwlncmVwICJkaXNzaW1pbGFyaXR5IGluZGV4IiBkaWZmICYmCisJZ3JlcCAiR0lUIGJpbmFyeSBwYXRjaCIgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlIGRpZmYgLS1udW1zdGF0IHNob3dzIGJpbmFyeSBjaGFuZ2VzJyAnCisJZ2l0IGRpZmYgLUIgLS1udW1zdGF0IC0tc3VtbWFyeSA+ZGlmZiAmJgorCWdyZXAgLWUgIi0JLQkiIGRpZmYgJiYKKwlncmVwICIgcmV3cml0ZSBmaWxlIiBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1zdGF0IGNvdW50cyBiaW5hcnkgcmV3cml0ZSBhcyAwIGxpbmVzJyAnCisJZ2l0IGRpZmYgLUIgLS1zdGF0IC0tc3VtbWFyeSA+ZGlmZiAmJgorCWdyZXAgIkJpbiIgZGlmZiAmJgorCXRlc3RfaTE4bmdyZXAgIjAgaW5zZXJ0aW9ucy4qMCBkZWxldGlvbnMiIGRpZmYgJiYKKwlncmVwICIgcmV3cml0ZSBmaWxlIiBkaWZmCisnCisKK3sKKwllY2hvICIjISRTSEVMTF9QQVRIIgorCWNhdCA8PCdFT0YnCisiJFBFUkxfUEFUSCIgLWUgJyQvID0gdW5kZWY7ICRfID0gPD47IHMvLi9vcmQoJCYpL2dlOyBwcmludCAkXycgPCAiJDEiCitFT0YKK30gPmR1bXAKK2NobW9kICt4IGR1bXAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGV4dGNvbnYnICcKKwllY2hvIGZpbGUgZGlmZj1mb28gPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBkaWZmLmZvby50ZXh0Y29udiAiXCIkKHB3ZClcIiIvZHVtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlIGRpZmYgcmVzcGVjdHMgdGV4dGNvbnYnICcKKwlnaXQgZGlmZiAtQiA+ZGlmZiAmJgorCWdyZXAgImRpc3NpbWlsYXJpdHkgaW5kZXgiIGRpZmYgJiYKKwlncmVwICJeLTYxIiBkaWZmICYmCisJZ3JlcCAiXi0wIiBkaWZmCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAzMi1kaWZmLWludGVyLWh1bmstY29udGV4dC5zaCBiL3QvdDQwMzItZGlmZi1pbnRlci1odW5rLWNvbnRleHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmFkYTBjYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzItZGlmZi1pbnRlci1odW5rLWNvbnRleHQuc2gKQEAgLTAsMCArMSwxMTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIGh1bmsgZnVzaW5nJworCisuIC4vdGVzdC1saWIuc2gKKworZigpIHsKKwllY2hvICQxCisJaT0xCisJd2hpbGUgdGVzdCAkaSAtbGUgJDIKKwlkbworCQllY2hvICRpCisJCWk9JChleHByICRpICsgMSkKKwlkb25lCisJZWNobyAkMworfQorCit0KCkgeworCXVzZV9jb25maWc9CisJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYuaW50ZXJIdW5rQ29udGV4dAorCisJY2FzZSAkIyBpbgorCTQpIGh1bmtzPSQ0OyBjbWQ9ImRpZmYgLVUkMyI7OworCTUpIGh1bmtzPSQ1OyBjbWQ9ImRpZmYgLVUkMyAtLWludGVyLWh1bmstY29udGV4dD0kNCI7OworCTYpIGh1bmtzPSQ1OyBjbWQ9ImRpZmYgLVUkMyI7IGdpdCBjb25maWcgZGlmZi5pbnRlckh1bmtDb250ZXh0ICQ0OyB1c2VfY29uZmlnPSIoZGlmZi5pbnRlckh1bmtDb250ZXh0PSQ0KSAiOzsKKwllc2FjCisJbGFiZWw9IiR1c2VfY29uZmlnJGNtZCwgJDEgY29tbW9uICQyIgorCWZpbGU9ZiQxCisJZXhwZWN0ZWQ9ZXhwZWN0ZWQuJGZpbGUuJDMuJGh1bmtzCisKKwlpZiAhIHRlc3QgLWYgJGZpbGUKKwl0aGVuCisJCWYgQSAkMSBCID4kZmlsZQorCQlnaXQgYWRkICRmaWxlCisJCWdpdCBjb21taXQgLXEgLW0uICRmaWxlCisJCWYgWCAkMSBZID4kZmlsZQorCWZpCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbGFiZWw6IGNvdW50IGh1bmtzICgkaHVua3MpIiAiCisJCXRlc3QgJChnaXQgJGNtZCAkZmlsZSB8IGdyZXAgJ15AQCAnIHwgd2MgLWwpID0gJGh1bmtzCisJIgorCisJdGVzdCAtZiAkZXhwZWN0ZWQgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbGFiZWw6IGNoZWNrIG91dHB1dCIgIgorCQlnaXQgJGNtZCAkZmlsZSB8IGdyZXAgLXYgJ15pbmRleCAnID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgJGV4cGVjdGVkIGFjdHVhbAorCSIKK30KKworY2F0IDw8RU9GID5leHBlY3RlZC5mMS4wLjEgfHwgZXhpdCAxCitkaWZmIC0tZ2l0IGEvZjEgYi9mMQorLS0tIGEvZjEKKysrKyBiL2YxCitAQCAtMSwzICsxLDMgQEAKKy1BCisrWAorIDEKKy1CCisrWQorRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0ZWQuZjEuMC4yIHx8IGV4aXQgMQorZGlmZiAtLWdpdCBhL2YxIGIvZjEKKy0tLSBhL2YxCisrKysgYi9mMQorQEAgLTEgKzEgQEAKKy1BCisrWAorQEAgLTMgKzMgQEAgQQorLUIKKytZCitFT0YKKworIyBjb21tb24gbGluZXMJY3R4CWludHJjdHgJaHVua3MKK3QgMSBsaW5lCTAJCTIKK3QgMSBsaW5lCTAJMAkyCit0IDEgbGluZQkwCTEJMQordCAxIGxpbmUJMAkyCTEKK3QgMSBsaW5lCTEJCTEKKwordCAyIGxpbmVzCTAJCTIKK3QgMiBsaW5lcwkwCTAJMgordCAyIGxpbmVzCTAJMQkyCit0IDIgbGluZXMJMAkyCTEKK3QgMiBsaW5lcwkxCQkxCisKK3QgMyBsaW5lcwkxCQkyCit0IDMgbGluZXMJMQkwCTIKK3QgMyBsaW5lcwkxCTEJMQordCAzIGxpbmVzCTEJMgkxCisKK3QgOSBsaW5lcwkzCQkyCit0IDkgbGluZXMJMwkyCTIKK3QgOSBsaW5lcwkzCTMJMQorCisjCQkJCQl1c2UgZGlmZi5pbnRlckh1bmtDb250ZXh0PwordCAxIGxpbmUJMAkwCTIJY29uZmlnCit0IDEgbGluZQkwCTEJMQljb25maWcKK3QgMSBsaW5lCTAJMgkxCWNvbmZpZwordCA5IGxpbmVzCTMJMwkxCWNvbmZpZwordCAyIGxpbmVzCTAJMAkyCWNvbmZpZwordCAyIGxpbmVzCTAJMQkyCWNvbmZpZwordCAyIGxpbmVzCTAJMgkxCWNvbmZpZwordCAzIGxpbmVzCTEJMAkyCWNvbmZpZwordCAzIGxpbmVzCTEJMQkxCWNvbmZpZwordCAzIGxpbmVzCTEJMgkxCWNvbmZpZwordCA5IGxpbmVzCTMJMgkyCWNvbmZpZwordCA5IGxpbmVzCTMJMwkxCWNvbmZpZworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmludGVySHVua0NvbnRleHQgaW52YWxpZCcgJworCWdpdCBjb25maWcgZGlmZi5pbnRlckh1bmtDb250ZXh0IGFzZGYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAmJgorCWdpdCBjb25maWcgZGlmZi5pbnRlckh1bmtDb250ZXh0IC0xICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDMzLWRpZmYtcGF0aWVuY2Uuc2ggYi90L3Q0MDMzLWRpZmYtcGF0aWVuY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTEzMzA0ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzMtZGlmZi1wYXRpZW5jZS5zaApAQCAtMCwwICsxLDIwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGF0aWVuY2UgZGlmZiBhbGdvcml0aG0nCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItZGlmZi1hbHRlcm5hdGl2ZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zcGFjZS1hdC1lb2wgd2l0aCBhIHNpbmdsZSBhcHBlbmRlZCBjaGFyYWN0ZXInICcKKwlwcmludGYgImFcbmJcbmNcbiIgPnByZSAmJgorCXByaW50ZiAiYVxuYlhcbmNcbiIgPnBvc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IFwKKwkJLS1wYXRpZW5jZSAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgcHJlIHBvc3QgPmRpZmYgJiYKKwlncmVwICJeKy4qWCIgZGlmZgorJworCit0ZXN0X2RpZmZfZnJvYm5pdHogInBhdGllbmNlIgorCit0ZXN0X2RpZmZfdW5pcXVlICJwYXRpZW5jZSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDM0LWRpZmYtd29yZHMuc2ggYi90L3Q0MDM0LWRpZmYtd29yZHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmIxNDVhYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQtZGlmZi13b3Jkcy5zaApAQCAtMCwwICsxLDQwNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3dvcmQgZGlmZiBjb2xvcnMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaAorCitjYXQgPnByZS5zaW1wbGUgPDwtXEVPRgorCWgoNCkKKworCWEgPSBiICsgYworRU9GCitjYXQgPnBvc3Quc2ltcGxlIDw8LVxFT0YKKwloKDQpLGhoWzQ0XQorCisJYSA9IGIgKyBjCisKKwlhYSA9IGEKKworCWFlZmYgPSBhZWZmICogKCBhYWEgKQorRU9GCitwcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcHJlLnNpbXBsZSkpCitwb3N0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHBvc3Quc2ltcGxlKSkKK2NhdCA+ZXhwZWN0LmxldHRlci1ydW5zLWFyZS13b3JkcyA8PC1FT0YKKwk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CisJPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgorCWgoNCksPEdSRUVOPmhoPFJFU0VUPls0NF0KKworCWEgPSBiICsgYzxSRVNFVD4KKworCTxHUkVFTj5hYSA9IGE8UkVTRVQ+CisKKwk8R1JFRU4+YWVmZiA9IGFlZmYgKiAoIGFhYTxSRVNFVD4gKQorRU9GCitjYXQgPmV4cGVjdC5ub24td2hpdGVzcGFjZS1pcy13b3JkIDw8LUVPRgorCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CisJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKwk8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CisJaCg0KTxHUkVFTj4saGhbNDRdPFJFU0VUPgorCisJYSA9IGIgKyBjPFJFU0VUPgorCisJPEdSRUVOPmFhID0gYTxSRVNFVD4KKworCTxHUkVFTj5hZWZmID0gYWVmZiAqICggYWFhICk8UkVTRVQ+CitFT0YKKword29yZF9kaWZmICgpIHsKKwlwcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcHJlKSkgJiYKKwlwb3N0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHBvc3QpKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggIiRAIiBwcmUgcG9zdCA+b3V0cHV0ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPG91dHB1dCA+b3V0cHV0LmRlY3J5cHRlZCAmJgorCXNlZCAtZSAiMnMvaW5kZXggW14gXSovaW5kZXggJHByZS4uJHBvc3QvIiBleHBlY3QgPmV4cGVjdGVkCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmRlY3J5cHRlZAorfQorCit0ZXN0X2xhbmd1YWdlX2RyaXZlciAoKSB7CisJbGFuZz0kMQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImRpZmYgZHJpdmVyICckbGFuZyciICcKKwkJY3AgIiRURVNUX0RJUkVDVE9SWS90NDAzNC8nIiRsYW5nIicvcHJlIiBcCisJCQkiJFRFU1RfRElSRUNUT1JZL3Q0MDM0LyciJGxhbmciJy9wb3N0IiBcCisJCQkiJFRFU1RfRElSRUNUT1JZL3Q0MDM0LyciJGxhbmciJy9leHBlY3QiIC4gJiYKKwkJZWNobyAiKiBkaWZmPSciJGxhbmciJyIgPi5naXRhdHRyaWJ1dGVzICYmCisJCXdvcmRfZGlmZiAtLWNvbG9yLXdvcmRzCisJJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29uZmlnIGRpZmYuY29sb3Iub2xkIHJlZCAmJgorCWdpdCBjb25maWcgZGlmZi5jb2xvci5uZXcgZ3JlZW4gJiYKKwlnaXQgY29uZmlnIGRpZmYuY29sb3IuZnVuYyBtYWdlbnRhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBwcmUgYW5kIHBvc3Qgd2l0aCBydW5zIG9mIHdoaXRlc3BhY2UnICcKKwljcCBwcmUuc2ltcGxlIHByZSAmJgorCWNwIHBvc3Quc2ltcGxlIHBvc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd29yZCBkaWZmIHdpdGggcnVucyBvZiB3aGl0ZXNwYWNlJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQ8UkVTRVQ+CisJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKwkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKwkJPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgorCQk8UkVEPmgoNCk8UkVTRVQ+PEdSRUVOPmgoNCksaGhbNDRdPFJFU0VUPgorCisJCWEgPSBiICsgYzxSRVNFVD4KKworCQk8R1JFRU4+YWEgPSBhPFJFU0VUPgorCisJCTxHUkVFTj5hZWZmID0gYWVmZiAqICggYWFhICk8UkVTRVQ+CisJRU9GCisJd29yZF9kaWZmIC0tY29sb3Itd29yZHMgJiYKKwl3b3JkX2RpZmYgLS13b3JkLWRpZmY9Y29sb3IgJiYKKwl3b3JkX2RpZmYgLS1jb2xvciAtLXdvcmQtZGlmZj1jb2xvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXdvcmQtZGlmZj1wb3JjZWxhaW4nICcKKwlzZWQgJ3MvIy4qJC8vJyA+ZXhwZWN0IDw8LUVPRiAmJgorCQlkaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdAorCQlpbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQKKwkJLS0tIGEvcHJlCisJCSsrKyBiL3Bvc3QKKwkJQEAgLTEsMyArMSw3IEBACisJCS1oKDQpCisJCStoKDQpLGhoWzQ0XQorCQl+CisJCSAjIHNpZ25pZmljYW50IHNwYWNlCisJCX4KKwkJIGEgPSBiICsgYworCQl+CisJCX4KKwkJK2FhID0gYQorCQl+CisJCX4KKwkJK2FlZmYgPSBhZWZmICogKCBhYWEgKQorCQl+CisJRU9GCisJd29yZF9kaWZmIC0td29yZC1kaWZmPXBvcmNlbGFpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXdvcmQtZGlmZj1wbGFpbicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQlkaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdAorCQlpbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQKKwkJLS0tIGEvcHJlCisJCSsrKyBiL3Bvc3QKKwkJQEAgLTEsMyArMSw3IEBACisJCVstaCg0KS1deytoKDQpLGhoWzQ0XSt9CisKKwkJYSA9IGIgKyBjCisKKwkJeythYSA9IGErfQorCisJCXsrYWVmZiA9IGFlZmYgKiAoIGFhYSApK30KKwlFT0YKKwl3b3JkX2RpZmYgLS13b3JkLWRpZmY9cGxhaW4gJiYKKwl3b3JkX2RpZmYgLS13b3JkLWRpZmY9cGxhaW4gLS1uby1jb2xvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXdvcmQtZGlmZj1wbGFpbiAtLWNvbG9yJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQ8UkVTRVQ+CisJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKwkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKwkJPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgorCQk8UkVEPlstaCg0KS1dPFJFU0VUPjxHUkVFTj57K2goNCksaGhbNDRdK308UkVTRVQ+CisKKwkJYSA9IGIgKyBjPFJFU0VUPgorCisJCTxHUkVFTj57K2FhID0gYSt9PFJFU0VUPgorCisJCTxHUkVFTj57K2FlZmYgPSBhZWZmICogKCBhYWEgKSt9PFJFU0VUPgorCUVPRgorCXdvcmRfZGlmZiAtLXdvcmQtZGlmZj1wbGFpbiAtLWNvbG9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmQgZGlmZiB3aXRob3V0IGNvbnRleHQnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+CisJCTxCT0xEPmluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NDxSRVNFVD4KKwkJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorCQk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorCQk8Q1lBTj5AQCAtMSArMSBAQDxSRVNFVD4KKwkJPFJFRD5oKDQpPFJFU0VUPjxHUkVFTj5oKDQpLGhoWzQ0XTxSRVNFVD4KKwkJPENZQU4+QEAgLTMsMCArNCw0IEBAPFJFU0VUPiA8UkVTRVQ+PE1BR0VOVEE+YSA9IGIgKyBjPFJFU0VUPgorCisJCTxHUkVFTj5hYSA9IGE8UkVTRVQ+CisKKwkJPEdSRUVOPmFlZmYgPSBhZWZmICogKCBhYWEgKTxSRVNFVD4KKwlFT0YKKwl3b3JkX2RpZmYgLS1jb2xvci13b3JkcyAtLXVuaWZpZWQ9MAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JkIGRpZmYgd2l0aCBhIHJlZ3VsYXIgZXhwcmVzc2lvbicgJworCWNwIGV4cGVjdC5sZXR0ZXItcnVucy1hcmUtd29yZHMgZXhwZWN0ICYmCisJd29yZF9kaWZmIC0tY29sb3Itd29yZHM9IlthLXpdKyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGEgZGlmZiBkcml2ZXInICcKKwlnaXQgY29uZmlnIGRpZmYudGVzdGRyaXZlci53b3JkUmVnZXggIlteWzpzcGFjZTpdXSIgJiYKKwljYXQgPDwtXEVPRiA+LmdpdGF0dHJpYnV0ZXMKKwkJcHJlIGRpZmY9dGVzdGRyaXZlcgorCQlwb3N0IGRpZmY9dGVzdGRyaXZlcgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvcHRpb24gb3ZlcnJpZGVzIC5naXRhdHRyaWJ1dGVzJyAnCisJY3AgZXhwZWN0LmxldHRlci1ydW5zLWFyZS13b3JkcyBleHBlY3QgJiYKKwl3b3JkX2RpZmYgLS1jb2xvci13b3Jkcz0iW2Etel0rIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgcmVnZXggc3VwcGxpZWQgYnkgZHJpdmVyJyAnCisJY3AgZXhwZWN0Lm5vbi13aGl0ZXNwYWNlLWlzLXdvcmQgZXhwZWN0ICYmCisJd29yZF9kaWZmIC0tY29sb3Itd29yZHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGRpZmYud29yZFJlZ2V4IG9wdGlvbicgJworCWdpdCBjb25maWcgZGlmZi53b3JkUmVnZXggIltbOmFsbnVtOl1dKyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWFuZC1saW5lIG92ZXJyaWRlcyBjb25maWcnICcKKwljcCBleHBlY3QubGV0dGVyLXJ1bnMtYXJlLXdvcmRzIGV4cGVjdCAmJgorCXdvcmRfZGlmZiAtLWNvbG9yLXdvcmRzPSJbYS16XSsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQtbGluZSBvdmVycmlkZXMgY29uZmlnOiAtLXdvcmQtZGlmZi1yZWdleCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKwkJPEJPTEQ+aW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CisJCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CisJCTxDWUFOPkBAIC0xLDMgKzEsNyBAQDxSRVNFVD4KKwkJaCg0KSw8R1JFRU4+eytoaCt9PFJFU0VUPls0NF0KKworCQlhID0gYiArIGM8UkVTRVQ+CisKKwkJPEdSRUVOPnsrYWEgPSBhK308UkVTRVQ+CisKKwkJPEdSRUVOPnsrYWVmZiA9IGFlZmYgKiAoIGFhYSt9PFJFU0VUPiApCisJRU9GCisJd29yZF9kaWZmIC0tY29sb3IgLS13b3JkLWRpZmYtcmVnZXg9IlthLXpdKyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdGF0dHJpYnV0ZXMgb3ZlcnJpZGUgY29uZmlnJyAnCisJY3AgZXhwZWN0Lm5vbi13aGl0ZXNwYWNlLWlzLXdvcmQgZXhwZWN0ICYmCisJd29yZF9kaWZmIC0tY29sb3Itd29yZHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IHJlbW92ZSBkaWZmIGRyaXZlciByZWdleCcgJworCXRlc3RfdW5jb25maWcgZGlmZi50ZXN0ZHJpdmVyLndvcmRSZWdleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgY29uZmlndXJlZCByZWdleCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKwkJPEJPTEQ+aW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CisJCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CisJCTxDWUFOPkBAIC0xLDMgKzEsNyBAQDxSRVNFVD4KKwkJaCg0KSw8R1JFRU4+aGhbNDQ8UkVTRVQ+XQorCisJCWEgPSBiICsgYzxSRVNFVD4KKworCQk8R1JFRU4+YWEgPSBhPFJFU0VUPgorCisJCTxHUkVFTj5hZWZmID0gYWVmZiAqICggYWFhPFJFU0VUPiApCisJRU9GCisJd29yZF9kaWZmIC0tY29sb3Itd29yZHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBwYXJzaW5nIHdvcmRzIGZvciBuZXdsaW5lJyAnCisJZWNobyAiYWFhIChhYWEpIiA+cHJlICYmCisJZWNobyAiYWFhIChhYWEpIGFhYSIgPnBvc3QgJiYKKwlwcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcHJlKSkgJiYKKwlwb3N0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHBvc3QpKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKwkJPEJPTEQ+aW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CisJCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CisJCTxDWUFOPkBAIC0xICsxIEBAPFJFU0VUPgorCQlhYWEgKGFhYSkgPEdSRUVOPmFhYTxSRVNFVD4KKwlFT0YKKwl3b3JkX2RpZmYgLS1jb2xvci13b3Jkcz0iYSsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgd2hlbiB3b3JkcyBhcmUgb25seSByZW1vdmVkIGF0IHRoZSBlbmQnICcKKwllY2hvICIoOiIgPnByZSAmJgorCWVjaG8gIigiID5wb3N0ICYmCisJcHJlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHByZSkpICYmCisJcG9zdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwb3N0KSkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+CisJCTxCT0xEPmluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NDxSRVNFVD4KKwkJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorCQk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorCQk8Q1lBTj5AQCAtMSArMSBAQDxSRVNFVD4KKwkJKDxSRUQ+OjxSRVNFVD4KKwlFT0YKKwl3b3JkX2RpZmYgLS1jb2xvci13b3Jkcz0uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0td29yZC1kaWZmPW5vbmUnICcKKwllY2hvICIoOiIgPnByZSAmJgorCWVjaG8gIigiID5wb3N0ICYmCisJcHJlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHByZSkpICYmCisJcG9zdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwb3N0KSkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3QKKwkJaW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0CisJCS0tLSBhL3ByZQorCQkrKysgYi9wb3N0CisJCUBAIC0xICsxIEBACisJCS0oOgorCQkrKAorCUVPRgorCXdvcmRfZGlmZiAtLXdvcmQtZGlmZj1wbGFpbiAtLXdvcmQtZGlmZj1ub25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc2V0IGRlZmF1bHQgZHJpdmVyJyAnCisJdGVzdF91bmNvbmZpZyBkaWZmLndvcmRyZWdleAorJworCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBhZGEKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIGJpYnRleAordGVzdF9sYW5ndWFnZV9kcml2ZXIgY3BwCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBjc2hhcnAKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIGNzcwordGVzdF9sYW5ndWFnZV9kcml2ZXIgZHRzCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBmb3J0cmFuCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBodG1sCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBqYXZhCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBtYXRsYWIKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIG9iamMKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIHBhc2NhbAordGVzdF9sYW5ndWFnZV9kcml2ZXIgcGVybAordGVzdF9sYW5ndWFnZV9kcml2ZXIgcGhwCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBweXRob24KK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIHJ1YnkKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIHRleAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JkLWRpZmYgd2l0aCBkaWZmLnNiZScgJworCWNhdCA+cHJlIDw8LVxFT0YgJiYKKwlhCisKKwliCisJRU9GCisJY2F0ID5wb3N0IDw8LVxFT0YgJiYKKwlhCisKKwljCisJRU9GCisJcHJlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHByZSkpICYmCisJcG9zdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwb3N0KSkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlkaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdAorCWluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NAorCS0tLSBhL3ByZQorCSsrKyBiL3Bvc3QKKwlAQCAtMSwzICsxLDMgQEAKKwlhCisKKwlbLWItXXsrYyt9CisJRU9GCisJdGVzdF9jb25maWcgZGlmZi5zdXBwcmVzcy1ibGFuay1lbXB0eSB0cnVlICYmCisJd29yZF9kaWZmIC0td29yZC1kaWZmPXBsYWluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmQtZGlmZiB3aXRoIG5vIG5ld2xpbmUgYXQgRU9GJyAnCisJcHJpbnRmICIlcyIgImEgYSBhIGEgYSIgPnByZSAmJgorCXByaW50ZiAiJXMiICJhIGEgYWIgYSBhIiA+cG9zdCAmJgorCXByZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwcmUpKSAmJgorCXBvc3Q9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcG9zdCkpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3QKKwlpbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQKKwktLS0gYS9wcmUKKwkrKysgYi9wb3N0CisJQEAgLTEgKzEgQEAKKwlhIGEgWy1hLV17K2FiK30gYSBhCisJRU9GCisJd29yZF9kaWZmIC0td29yZC1kaWZmPXBsYWluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGhpc3Rvcnkgd2l0aCB0d28gZmlsZXMnICcKKwllY2hvICJhIGI7IGMiID5hLnRleCAmJgorCWVjaG8gImEgYjsgYyIgPnoudHh0ICYmCisJZ2l0IGFkZCBhLnRleCB6LnR4dCAmJgorCWdpdCBjb21taXQgLW1pbml0aWFsICYmCisKKwkjIG1vZGlmeSBib3RoCisJZWNobyAiYSBieDsgYyIgPmEudGV4ICYmCisJZWNobyAiYSBieDsgYyIgPnoudHh0ICYmCisJZ2l0IGNvbW1pdCAtbW1vZGlmaWVkIC1hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmRSZWdleCBmb3IgdGhlIGZpcnN0IGZpbGUgZG9lcyBub3QgYXBwbHkgdG8gdGhlIHNlY29uZCcgJworCWVjaG8gIioudGV4IGRpZmY9dGV4IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLnRleC53b3JkUmVnZXggIlthLXpdK3wuIiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJZGlmZiAtLWdpdCBhL2EudGV4IGIvYS50ZXgKKwkJLS0tIGEvYS50ZXgKKwkJKysrIGIvYS50ZXgKKwkJQEAgLTEgKzEgQEAKKwkJYSBbLWItXXsrYngrfTsgYworCQlkaWZmIC0tZ2l0IGEvei50eHQgYi96LnR4dAorCQktLS0gYS96LnR4dAorCQkrKysgYi96LnR4dAorCQlAQCAtMSArMSBAQAorCQlhIFstYjstXXsrYng7K30gYworCUVPRgorCWdpdCBkaWZmIC0td29yZC1kaWZmIEhFQUR+ID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMzQvYWRhL2V4cGVjdCBiL3QvdDQwMzQvYWRhL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjgyZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9hZGEvZXhwZWN0CkBAIC0wLDAgKzEsMjcgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggZDk2ZmRkMS4uZGYyMWJiMCAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsMTMgKzEsMTMgQEA8UkVTRVQ+CitBZGEuVGV4dF9JTy5QdXRfTGluZSgiSGVsbG8gV29ybGQ8UkVEPiE8UkVTRVQ+PEdSRUVOPj88UkVTRVQ+Iik7CisxIDxSRUQ+MWUtMTA8UkVTRVQ+PEdSRUVOPjFlMTA8UkVTRVQ+IDE2I0ZFMTIjRTIgMy4xNDFfNTkyICc8UkVEPng8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+JworPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPis8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+Kio8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4oPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPikKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD46PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi89IDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD49PjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPi4uPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PD48UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+CmRpZmYgLS1naXQgYS90L3Q0MDM0L2FkYS9wb3N0IGIvdC90NDAzNC9hZGEvcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjIxYmIwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9hZGEvcG9zdApAQCAtMCwwICsxLDEzIEBACitBZGEuVGV4dF9JTy5QdXRfTGluZSgiSGVsbG8gV29ybGQ/Iik7CisxIDFlMTAgMTYjRkUxMiNFMiAzLjE0MV81OTIgJ3knCit4K3kgeC15Cit4KnkgeC95Cit4Kip5Cit4KHkpCit4Oj15Cit4PXkgeC89IHkKK3g8eSB4PD15IHg+eSB4Pj15Cit4LHkKK3g9PnkKK3guLnkKK3g8PnkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvYWRhL3ByZSBiL3QvdDQwMzQvYWRhL3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTZmZGQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9hZGEvcHJlCkBAIC0wLDAgKzEsMTMgQEAKK0FkYS5UZXh0X0lPLlB1dF9MaW5lKCJIZWxsbyBXb3JsZCEiKTsKKzEgMWUtMTAgMTYjRkUxMiNFMiAzLjE0MV81OTIgJ3gnCithK2IgYS1iCithKmIgYS9iCithKipiCithKGIpCithOj1iCithPWIgYS89IGIKK2E8YiBhPD1iIGE+YiBhPj1iCithLGIKK2E9PmIKK2EuLmIKK2E8PmIKZGlmZiAtLWdpdCBhL3QvdDQwMzQvYmlidGV4L2V4cGVjdCBiL3QvdDQwMzQvYmlidGV4L2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTU3Nzc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9iaWJ0ZXgvZXhwZWN0CkBAIC0wLDAgKzEsMTUgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggOTVjZDU1Yi4uZGRjYmE5YiAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsOSArMSwxMCBAQDxSRVNFVD4KK0BhcnRpY2xle2FsZG91czE5ODd1aWUsPFJFU0VUPgorICB0aXRsZT17e1VsdGltYXRlIGluc3RhYmlsaXR5IG9mIGV4cG9uZW50aWFsIGJhY2stb2ZmIHByb3RvY29sIGZvciBhY2tub3dsZWRnbWVudC1iYXNlZCB0cmFuc21pc3Npb24gY29udHJvbCBvZiByYW5kb20gYWNjZXNzIGNvbW11bmljYXRpb24gY2hhbm5lbHN9fSw8UkVTRVQ+CisgIGF1dGhvcj17QWxkb3VzLCA8UkVEPkQuPFJFU0VUPjxHUkVFTj5EYXZpZDxSRVNFVD59LAorICBqb3VybmFsPXtJbmZvcm1hdGlvbiBUaGVvcnksIElFRUUgVHJhbnNhY3Rpb25zIG9ufSw8UkVTRVQ+CisgIHZvbHVtZT17PFJFRD4zMzxSRVNFVD48R1JFRU4+Qm9ndXMuPFJFU0VUPn0sCisgIG51bWJlcj17PFJFRD4yPFJFU0VUPjxHUkVFTj40PFJFU0VUPn0sCisgIHBhZ2VzPXsyMTktLTIyM30sPFJFU0VUPgorICB5ZWFyPTxHUkVFTj4xOTg3LDxSRVNFVD4KKzxHUkVFTj4gIG5vdGU9e1RoaXMgaXMgaW4gZmFjdCBhIHJhdGhlciBmdW5ueSByZWFkIHNpbmNlIGV0aGVybmV0IHdvcmtzIHdlbGwgaW4gcHJhY3RpY2UuIFRoZTxSRVNFVD4gezxSRUQ+MTk4NzxSRVNFVD48R1JFRU4+XGVtIHByZX0gcmVmZXJlbmNlIGlzIHRoZSByaWdodCBvbmUsIGhvd2V2ZXIuPFJFU0VUPn08UkVEPiw8UkVTRVQ+Cit9PFJFU0VUPgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9iaWJ0ZXgvcG9zdCBiL3QvdDQwMzQvYmlidGV4L3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRjYmE5YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvYmlidGV4L3Bvc3QKQEAgLTAsMCArMSwxMCBAQAorQGFydGljbGV7YWxkb3VzMTk4N3VpZSwKKyAgdGl0bGU9e3tVbHRpbWF0ZSBpbnN0YWJpbGl0eSBvZiBleHBvbmVudGlhbCBiYWNrLW9mZiBwcm90b2NvbCBmb3IgYWNrbm93bGVkZ21lbnQtYmFzZWQgdHJhbnNtaXNzaW9uIGNvbnRyb2wgb2YgcmFuZG9tIGFjY2VzcyBjb21tdW5pY2F0aW9uIGNoYW5uZWxzfX0sCisgIGF1dGhvcj17QWxkb3VzLCBEYXZpZH0sCisgIGpvdXJuYWw9e0luZm9ybWF0aW9uIFRoZW9yeSwgSUVFRSBUcmFuc2FjdGlvbnMgb259LAorICB2b2x1bWU9e0JvZ3VzLn0sCisgIG51bWJlcj17NH0sCisgIHBhZ2VzPXsyMTktLTIyM30sCisgIHllYXI9MTk4NywKKyAgbm90ZT17VGhpcyBpcyBpbiBmYWN0IGEgcmF0aGVyIGZ1bm55IHJlYWQgc2luY2UgZXRoZXJuZXQgd29ya3Mgd2VsbCBpbiBwcmFjdGljZS4gVGhlIHtcZW0gcHJlfSByZWZlcmVuY2UgaXMgdGhlIHJpZ2h0IG9uZSwgaG93ZXZlci59Cit9CmRpZmYgLS1naXQgYS90L3Q0MDM0L2JpYnRleC9wcmUgYi90L3Q0MDM0L2JpYnRleC9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVjZDU1YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvYmlidGV4L3ByZQpAQCAtMCwwICsxLDkgQEAKK0BhcnRpY2xle2FsZG91czE5ODd1aWUsCisgIHRpdGxlPXt7VWx0aW1hdGUgaW5zdGFiaWxpdHkgb2YgZXhwb25lbnRpYWwgYmFjay1vZmYgcHJvdG9jb2wgZm9yIGFja25vd2xlZGdtZW50LWJhc2VkIHRyYW5zbWlzc2lvbiBjb250cm9sIG9mIHJhbmRvbSBhY2Nlc3MgY29tbXVuaWNhdGlvbiBjaGFubmVsc319LAorICBhdXRob3I9e0FsZG91cywgRC59LAorICBqb3VybmFsPXtJbmZvcm1hdGlvbiBUaGVvcnksIElFRUUgVHJhbnNhY3Rpb25zIG9ufSwKKyAgdm9sdW1lPXszM30sCisgIG51bWJlcj17Mn0sCisgIHBhZ2VzPXsyMTktLTIyM30sCisgIHllYXI9ezE5ODd9LAorfQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9jcHAvZXhwZWN0IGIvdC90NDAzNC9jcHAvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZDFlYTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2NwcC9leHBlY3QKQEAgLTAsMCArMSwzNiBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCAyM2Q1YzhhLi43ZThjMDI2IDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSwxOSArMSwxOSBAQDxSRVNFVD4KK0ZvbygpIDogeCgwPFJFRD4mJjE8UkVTRVQ+PEdSRUVOPiY0MjxSRVNFVD4pIHsgPEdSRUVOPmJhcih4KTs8UkVTRVQ+IH0KK2NvdXQ8PCJIZWxsbyBXb3JsZDxSRUQ+ITxSRVNFVD48R1JFRU4+PzxSRVNFVD5cbiI8PGVuZGw7Cis8R1JFRU4+KDxSRVNFVD4xPEdSRUVOPikgKDxSRVNFVD4tMWUxMDxHUkVFTj4pICg8UkVTRVQ+MHhhYmNkZWY8R1JFRU4+KTxSRVNFVD4gJzxSRUQ+eDxSRVNFVD48R1JFRU4+eTxSRVNFVD4nCitbPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPl0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4uPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorITxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4gfjxSRUQ+YSBhPFJFU0VUPjxHUkVFTj54IHg8UkVTRVQ+KysgPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0tIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPis8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD49PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+IT08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+XjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mJjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnx8PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PzxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD46egorPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPis9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi89PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PDw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+Pj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD5ePTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+fD08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4seQorPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPjo6PFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9jcHAvcG9zdCBiL3QvdDQwMzQvY3BwL3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4YzAyNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvY3BwL3Bvc3QKQEAgLTAsMCArMSwxOSBAQAorRm9vKCkgOiB4KDAmNDIpIHsgYmFyKHgpOyB9Citjb3V0PDwiSGVsbG8gV29ybGQ/XG4iPDxlbmRsOworKDEpICgtMWUxMCkgKDB4YWJjZGVmKSAneScKK1t4XSB4LT55IHgueQorIXggfnggeCsrIHgtLSB4KnkgeCZ5Cit4KnkgeC95IHgleQoreCt5IHgteQoreDw8eSB4Pj55Cit4PHkgeDw9eSB4PnkgeD49eQoreD09eSB4IT15Cit4JnkKK3heeQoreHx5Cit4JiZ5Cit4fHx5Cit4P3k6egoreD15IHgrPXkgeC09eSB4Kj15IHgvPXkgeCU9eSB4PDw9eSB4Pj49eSB4Jj15IHhePXkgeHw9eQoreCx5Cit4Ojp5CmRpZmYgLS1naXQgYS90L3Q0MDM0L2NwcC9wcmUgYi90L3Q0MDM0L2NwcC9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkNWM4YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvY3BwL3ByZQpAQCAtMCwwICsxLDE5IEBACitGb28oKTp4KDAmJjEpe30KK2NvdXQ8PCJIZWxsbyBXb3JsZCFcbiI8PGVuZGw7CisxIC0xZTEwIDB4YWJjZGVmICd4JworW2FdIGEtPmIgYS5iCishYSB+YSBhKysgYS0tIGEqYiBhJmIKK2EqYiBhL2IgYSViCithK2IgYS1iCithPDxiIGE+PmIKK2E8YiBhPD1iIGE+YiBhPj1iCithPT1iIGEhPWIKK2EmYgorYV5iCithfGIKK2EmJmIKK2F8fGIKK2E/Yjp6CithPWIgYSs9YiBhLT1iIGEqPWIgYS89YiBhJT1iIGE8PD1iIGE+Pj1iIGEmPWIgYV49YiBhfD1iCithLHkKK2E6OmIKZGlmZiAtLWdpdCBhL3QvdDQwMzQvY3NoYXJwL2V4cGVjdCBiL3QvdDQwMzQvY3NoYXJwL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWQxZGQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9jc2hhcnAvZXhwZWN0CkBAIC0wLDAgKzEsMzUgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggOTEwNmQ2My4uZGQ1ZjQyMSAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsMTggKzEsMTggQEA8UkVTRVQ+CitGb28oKSA6IHgoMDxSRUQ+JiYxPFJFU0VUPjxHUkVFTj4mNDI8UkVTRVQ+KSB7IDxHUkVFTj5iYXIoeCk7PFJFU0VUPiB9Citjb3V0PDwiSGVsbG8gV29ybGQ8UkVEPiE8UkVTRVQ+PEdSRUVOPj88UkVTRVQ+XG4iPDxlbmRsOworPEdSRUVOPig8UkVTRVQ+MTxHUkVFTj4pICg8UkVTRVQ+LTFlMTA8R1JFRU4+KSAoPFJFU0VUPjB4YWJjZGVmPEdSRUVOPik8UkVTRVQ+ICc8UkVEPng8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+JworWzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD5dIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tPjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LjxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKyE8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+IH48UkVEPmEgYTxSRVNFVD48R1JFRU4+eCB4PFJFU0VUPisrIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tLSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi88UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4rPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj49PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiE9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPl48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj88UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+OnoKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4rPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPio9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw8PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Xj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPnw9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+LHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvY3NoYXJwL3Bvc3QgYi90L3Q0MDM0L2NzaGFycC9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNWY0MjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2NzaGFycC9wb3N0CkBAIC0wLDAgKzEsMTggQEAKK0ZvbygpIDogeCgwJjQyKSB7IGJhcih4KTsgfQorY291dDw8IkhlbGxvIFdvcmxkP1xuIjw8ZW5kbDsKKygxKSAoLTFlMTApICgweGFiY2RlZikgJ3knCitbeF0geC0+eSB4LnkKKyF4IH54IHgrKyB4LS0geCp5IHgmeQoreCp5IHgveSB4JXkKK3greSB4LXkKK3g8PHkgeD4+eQoreDx5IHg8PXkgeD55IHg+PXkKK3g9PXkgeCE9eQoreCZ5Cit4XnkKK3h8eQoreCYmeQoreHx8eQoreD95OnoKK3g9eSB4Kz15IHgtPXkgeCo9eSB4Lz15IHglPXkgeDw8PXkgeD4+PXkgeCY9eSB4Xj15IHh8PXkKK3gseQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9jc2hhcnAvcHJlIGIvdC90NDAzNC9jc2hhcnAvcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMDZkNjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2NzaGFycC9wcmUKQEAgLTAsMCArMSwxOCBAQAorRm9vKCk6eCgwJiYxKXt9Citjb3V0PDwiSGVsbG8gV29ybGQhXG4iPDxlbmRsOworMSAtMWUxMCAweGFiY2RlZiAneCcKK1thXSBhLT5iIGEuYgorIWEgfmEgYSsrIGEtLSBhKmIgYSZiCithKmIgYS9iIGElYgorYStiIGEtYgorYTw8YiBhPj5iCithPGIgYTw9YiBhPmIgYT49YgorYT09YiBhIT1iCithJmIKK2FeYgorYXxiCithJiZiCithfHxiCithP2I6egorYT1iIGErPWIgYS09YiBhKj1iIGEvPWIgYSU9YiBhPDw9YiBhPj49YiBhJj1iIGFePWIgYXw9YgorYSx5CmRpZmYgLS1naXQgYS90L3Q0MDM0L2Nzcy9leHBlY3QgYi90L3Q0MDM0L2Nzcy9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQxMDM5MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvY3NzL2V4cGVjdApAQCAtMCwwICsxLDE2IEBACis8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxCT0xEPmluZGV4IGI4YWUwYmIuLmZlNTAwYjcgMTAwNjQ0PFJFU0VUPgorPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKzxDWUFOPkBAIC0xLDEwICsxLDEwIEBAPFJFU0VUPgorLjxSRUQ+Y2xhc3MtZm9ybTxSRVNFVD48R1JFRU4+b3RoZXItZm9ybTxSRVNFVD4gbGFiZWwuY29udHJvbC1sYWJlbCB7CisgICAgbWFyZ2luLXRvcDogPFJFRD4xMDxSRVNFVD48R1JFRU4+MTU8UkVTRVQ+cHghaW1wb3J0YW50OworICAgIGJvcmRlciA6IDEwcHggPFJFRD5kYXNoZWQ8UkVTRVQ+PEdSRUVOPmRvdHRlZDxSRVNFVD4gI0M2QzZDNjsKK308UkVTRVQ+Cis8UkVEPiNDQ0NDQ0M8UkVTRVQ+PEdSRUVOPiNDQ0NDQ0I8UkVTRVQ+CisxMGVtPFJFU0VUPgorPFJFRD5wYWRkaW5nLWJvdHRvbTxSRVNFVD48R1JFRU4+bWFyZ2luLWxlZnQ8UkVTRVQ+CisxNTA8UkVEPnB4PFJFU0VUPjxHUkVFTj5lbTxSRVNFVD4KKzEwcHgKKzxSRUQ+IWltcG9ydGFudDxSRVNFVD4KKzxSRUQ+ZGl2PFJFU0VUPjxHUkVFTj5saTxSRVNFVD4uY2xhc3MjaWQKZGlmZiAtLWdpdCBhL3QvdDQwMzQvY3NzL3Bvc3QgYi90L3Q0MDM0L2Nzcy9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNTAwYjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2Nzcy9wb3N0CkBAIC0wLDAgKzEsMTAgQEAKKy5vdGhlci1mb3JtIGxhYmVsLmNvbnRyb2wtbGFiZWwgeworICAgIG1hcmdpbi10b3A6IDE1cHghaW1wb3J0YW50OworICAgIGJvcmRlciA6IDEwcHggZG90dGVkICNDNkM2QzY7Cit9CisjQ0NDQ0NCCisxMGVtCittYXJnaW4tbGVmdAorMTUwZW0KKzEwcHgKK2xpLmNsYXNzI2lkCmRpZmYgLS1naXQgYS90L3Q0MDM0L2Nzcy9wcmUgYi90L3Q0MDM0L2Nzcy9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhZTBiYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvY3NzL3ByZQpAQCAtMCwwICsxLDEwIEBACisuY2xhc3MtZm9ybSBsYWJlbC5jb250cm9sLWxhYmVsIHsKKyAgICBtYXJnaW4tdG9wOiAxMHB4IWltcG9ydGFudDsKKyAgICBib3JkZXIgOiAxMHB4IGRhc2hlZCAjQzZDNkM2OworfQorI0NDQ0NDQworMTBlbQorcGFkZGluZy1ib3R0b20KKzE1MHB4CisxMHB4IWltcG9ydGFudAorZGl2LmNsYXNzI2lkCmRpZmYgLS1naXQgYS90L3Q0MDM0L2R0cy9leHBlY3QgYi90L3Q0MDM0L2R0cy9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYwZmM5OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvZHRzL2V4cGVjdApAQCAtMCwwICsxLDM3IEBACis8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxCT0xEPmluZGV4IGI2YTkwNTEuLjc4MDNhZWUgMTAwNjQ0PFJFU0VUPgorPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKzxDWUFOPkBAIC0xLDMyICsxLDMyIEBAPFJFU0VUPgorLyB7PFJFU0VUPgorCTxSRUQ+dGhpc19oYW5kbGU8UkVTRVQ+PEdSRUVOPkhBTkRMRV8yPFJFU0VUPjogPFJFRD5ub2RlPFJFU0VUPjxHUkVFTj5uZXctbm9kZTxSRVNFVD5APFJFRD5mMDA8UkVTRVQ+PEdSRUVOPmVlZGE8UkVTRVQ+IHsKKwkJY29tcGF0aWJsZSA9ICI8UkVEPm15ZGV2PFJFU0VUPjxHUkVFTj52ZW5kb3IsY29tcGF0PFJFU0VUPiI7CisJCXN0cmluZy1wcm9wID0gPFJFRD5zdGFydDxSRVNFVD48R1JFRU4+ZW5kPFJFU0VUPjogImhlbGxvIDxSRUQ+d29ybGQhPFJFU0VUPjxHUkVFTj53b3JsZD88UkVTRVQ+IiA8UkVEPmVuZDxSRVNFVD48R1JFRU4+c3RhcnQ8UkVTRVQ+OiA7CisJCTxSRUQ+I3NpemUtY2VsbHM8UkVTRVQ+PEdSRUVOPiNhZGRyZXNzLWNlbGxzPFJFU0VUPiA9IDw8UkVEPjArMDxSRVNFVD48R1JFRU4+MCs0MDxSRVNFVD4+OworCQlyZWcgPSA8PFJFRD4weGYwMDxSRVNFVD48R1JFRU4+MHhlZWRhPFJFU0VUPj47CisJCXByb3AgPSA8PEdSRUVOPig8UkVTRVQ+MTxHUkVFTj4pPFJFU0VUPj47CisJCXByb3AgPSA8PEdSRUVOPig8UkVTRVQ+LTFlMTA8R1JFRU4+KTxSRVNFVD4+OworCQlwcm9wID0gPCghPFJFRD4zPFJFU0VUPjxHUkVFTj4xPFJFU0VUPik+OworCQlwcm9wID0gPCh+PFJFRD4zPFJFU0VUPjxHUkVFTj4xPFJFU0VUPik+OworCQlwcm9wID0gPCg8UkVEPjM8UkVTRVQ+PEdSRUVOPjE8UkVTRVQ+KjxSRUQ+NDxSRVNFVD48R1JFRU4+MjxSRVNFVD4pPjsKKwkJcHJvcCA9IDwoPFJFRD4zPFJFU0VUPjxHUkVFTj4xPFJFU0VUPiY8UkVEPjQ8UkVTRVQ+PEdSRUVOPjI8UkVTRVQ+KT47CisJCXByb3AgPSA8KDxSRUQ+MzxSRVNFVD48R1JFRU4+MTxSRVNFVD4qPFJFRD40PFJFU0VUPjxHUkVFTj4yPFJFU0VUPik+OworCQlwcm9wID0gPCg8UkVEPjM8UkVTRVQ+PEdSRUVOPjE8UkVTRVQ+LzxSRUQ+NDxSRVNFVD48R1JFRU4+MjxSRVNFVD4pPjsKKwkJcHJvcCA9IDwoPFJFRD4zPFJFU0VUPjxHUkVFTj4xPFJFU0VUPiU8UkVEPjQ8UkVTRVQ+PEdSRUVOPjI8UkVTRVQ+KT47CisJCXByb3AgPSA8KDxSRUQ+Mys0PFJFU0VUPjxHUkVFTj4xKzI8UkVTRVQ+KT47CisJCXByb3AgPSA8KDxSRUQ+My00PFJFU0VUPjxHUkVFTj4xLTI8UkVTRVQ+KT47CisJCXByb3AgPSAvYml0cy8gPFJFRD42NDxSRVNFVD48R1JFRU4+MzI8UkVTRVQ+IDwoPFJFRD4zPFJFU0VUPjxHUkVFTj4xPFJFU0VUPjw8PFJFRD40PFJFU0VUPjxHUkVFTj4yPFJFU0VUPik+OworCQlwcm9wID0gPCg8UkVEPjM8UkVTRVQ+PEdSRUVOPjE8UkVTRVQ+Pj48UkVEPjQ8UkVTRVQ+PEdSRUVOPjI8UkVTRVQ+KT47CisJCXByb3AgPSA8KDxSRUQ+MzxSRVNFVD48R1JFRU4+MTxSRVNFVD4mPFJFRD40PFJFU0VUPjxHUkVFTj4yPFJFU0VUPik+OworCQlwcm9wID0gPCg8UkVEPjM8UkVTRVQ+PEdSRUVOPjE8UkVTRVQ+XjxSRUQ+NDxSRVNFVD48R1JFRU4+MjxSRVNFVD4pPjsKKwkJcHJvcCA9IDwoPFJFRD4zPFJFU0VUPjxHUkVFTj4xPFJFU0VUPnw8UkVEPjQ8UkVTRVQ+PEdSRUVOPjI8UkVTRVQ+KT47CisJCXByb3AgPSA8KDxSRUQ+MzxSRVNFVD48R1JFRU4+MTxSRVNFVD4mJjxSRUQ+NDxSRVNFVD48R1JFRU4+MjxSRVNFVD4pPjsKKwkJcHJvcCA9IDwoPFJFRD4zPFJFU0VUPjxHUkVFTj4xPFJFU0VUPnx8PFJFRD40PFJFU0VUPjxHUkVFTj4yPFJFU0VUPik+OworCQlwcm9wID0gPCg8UkVEPjQ/NTxSRVNFVD48R1JFRU4+MT8yPFJFU0VUPjozKT47CisJCWxpc3QgPSA8JjxSRUQ+dGhpc19oYW5kbGU8UkVTRVQ+PEdSRUVOPkhBTkRMRV8yPFJFU0VUPj4sIDwwIDAgMCA8UkVEPjA8UkVTRVQ+PEdSRUVOPjE8UkVTRVQ+PjsKKwl9OzxSRVNFVD4KKworCSY8UkVEPnBoYW5kbGU8UkVTRVQ+PEdSRUVOPnBoYW5kbGUyPFJFU0VUPiB7CisJCTxSRUQ+cHJlLXBoYW5kbGU8UkVTRVQ+PEdSRUVOPnByb3BfaGFuZGxlPFJFU0VUPiA9IDwmPFJFRD50aGlzX2hhbmRsZTxSRVNFVD48R1JFRU4+SEFORExFXzI8UkVTRVQ+PjsKKwl9OzxSRVNFVD4KK307PFJFU0VUPgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9kdHMvcG9zdCBiL3QvdDQwMzQvZHRzL3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgwM2FlZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvZHRzL3Bvc3QKQEAgLTAsMCArMSwzMiBAQAorLyB7CisJSEFORExFXzI6IG5ldy1ub2RlQGVlZGEgeworCQljb21wYXRpYmxlID0gInZlbmRvcixjb21wYXQiOworCQlzdHJpbmctcHJvcCA9IGVuZDogImhlbGxvIHdvcmxkPyIgc3RhcnQ6IDsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MCs0MD47CisJCXJlZyA9IDwweGVlZGE+OworCQlwcm9wID0gPCgxKT47CisJCXByb3AgPSA8KC0xZTEwKT47CisJCXByb3AgPSA8KCExKT47CisJCXByb3AgPSA8KH4xKT47CisJCXByb3AgPSA8KDEqMik+OworCQlwcm9wID0gPCgxJjIpPjsKKwkJcHJvcCA9IDwoMSoyKT47CisJCXByb3AgPSA8KDEvMik+OworCQlwcm9wID0gPCgxJTIpPjsKKwkJcHJvcCA9IDwoMSsyKT47CisJCXByb3AgPSA8KDEtMik+OworCQlwcm9wID0gL2JpdHMvIDMyIDwoMTw8Mik+OworCQlwcm9wID0gPCgxPj4yKT47CisJCXByb3AgPSA8KDEmMik+OworCQlwcm9wID0gPCgxXjIpPjsKKwkJcHJvcCA9IDwoMXwyKT47CisJCXByb3AgPSA8KDEmJjIpPjsKKwkJcHJvcCA9IDwoMXx8Mik+OworCQlwcm9wID0gPCgxPzI6Myk+OworCQlsaXN0ID0gPCZIQU5ETEVfMj4sIDwwIDAgMCAxPjsKKwl9OworCisJJnBoYW5kbGUyIHsKKwkJcHJvcF9oYW5kbGUgPSA8JkhBTkRMRV8yPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3QvdDQwMzQvZHRzL3ByZSBiL3QvdDQwMzQvZHRzL3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmE5MDUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9kdHMvcHJlCkBAIC0wLDAgKzEsMzIgQEAKKy8geworCXRoaXNfaGFuZGxlOiBub2RlQGYwMCB7CisJCWNvbXBhdGlibGUgPSAibXlkZXYiOworCQlzdHJpbmctcHJvcCA9IHN0YXJ0OiAiaGVsbG8gd29ybGQhIiBlbmQ6IDsKKwkJI3NpemUtY2VsbHMgPSA8MCswPjsKKwkJcmVnID0gPDB4ZjAwPjsKKwkJcHJvcCA9IDwxPjsKKwkJcHJvcCA9IDwtMWUxMD47CisJCXByb3AgPSA8KCEzKT47CisJCXByb3AgPSA8KH4zKT47CisJCXByb3AgPSA8KDMqNCk+OworCQlwcm9wID0gPCgzJjQpPjsKKwkJcHJvcCA9IDwoMyo0KT47CisJCXByb3AgPSA8KDMvNCk+OworCQlwcm9wID0gPCgzJTQpPjsKKwkJcHJvcCA9IDwoMys0KT47CisJCXByb3AgPSA8KDMtNCk+OworCQlwcm9wID0gL2JpdHMvIDY0IDwoMzw8NCk+OworCQlwcm9wID0gPCgzPj40KT47CisJCXByb3AgPSA8KDMmNCk+OworCQlwcm9wID0gPCgzXjQpPjsKKwkJcHJvcCA9IDwoM3w0KT47CisJCXByb3AgPSA8KDMmJjQpPjsKKwkJcHJvcCA9IDwoM3x8NCk+OworCQlwcm9wID0gPCg0PzU6Myk+OworCQlsaXN0ID0gPCZ0aGlzX2hhbmRsZT4sIDwwIDAgMCAwPjsKKwl9OworCisJJnBoYW5kbGUgeworCQlwcmUtcGhhbmRsZSA9IDwmdGhpc19oYW5kbGU+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvdC90NDAzNC9mb3J0cmFuL2V4cGVjdCBiL3QvdDQwMzQvZm9ydHJhbi9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzM2RiZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvZm9ydHJhbi9leHBlY3QKQEAgLTAsMCArMSwxMCBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCA4N2YwZDBiLi5kMzA4ZGEyIDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSw1ICsxLDUgQEA8UkVTRVQ+CitwcmludCAqLCAiSGVsbG8gV29ybGQ8UkVEPiE8UkVTRVQ+PEdSRUVOPj88UkVTRVQ+IgorCitETzEwSSA9IDEsMTA8UkVTRVQ+Cis8UkVEPkRPMTBJPFJFU0VUPjxHUkVFTj5ETyAxMCBJPFJFU0VUPiA9IDEsMTAKKzxSRUQ+RE8xMEk8UkVTRVQ+PEdSRUVOPkRPIDEgMCBJPFJFU0VUPiA9IDEsMTAKZGlmZiAtLWdpdCBhL3QvdDQwMzQvZm9ydHJhbi9wb3N0IGIvdC90NDAzNC9mb3J0cmFuL3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwOGRhMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvZm9ydHJhbi9wb3N0CkBAIC0wLDAgKzEsNSBAQAorcHJpbnQgKiwgIkhlbGxvIFdvcmxkPyIKKworRE8xMEkgPSAxLDEwCitETyAxMCBJID0gMSwxMAorRE8gMSAwIEkgPSAxLDEwCmRpZmYgLS1naXQgYS90L3Q0MDM0L2ZvcnRyYW4vcHJlIGIvdC90NDAzNC9mb3J0cmFuL3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2YwZDBiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9mb3J0cmFuL3ByZQpAQCAtMCwwICsxLDUgQEAKK3ByaW50ICosICJIZWxsbyBXb3JsZCEiCisKK0RPMTBJID0gMSwxMAorRE8xMEkgPSAxLDEwCitETzEwSSA9IDEsMTAKZGlmZiAtLWdpdCBhL3QvdDQwMzQvaHRtbC9leHBlY3QgYi90L3Q0MDM0L2h0bWwvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0N2I0OWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2h0bWwvZXhwZWN0CkBAIC0wLDAgKzEsOCBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCA4Y2E0YWVhLi40NjkyMWU1IDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSwzICsxLDMgQEA8UkVTRVQ+Cis8dGFnIDxHUkVFTj5uZXdhdHRyPSJuZXd2YWx1ZSI8UkVTRVQ+PjxHUkVFTj5hZGRlZDxSRVNFVD4gY29udGVudDwvdGFnPgorPHRhZyBhdHRyPTxSRUQ+InZhbHVlIjxSRVNFVD48R1JFRU4+Im5ld3ZhbHVlIjxSRVNFVD4+PFJFRD5jb250ZW50PFJFU0VUPjxHUkVFTj5jaGFuZ2VkPFJFU0VUPjwvdGFnPgorPDxSRUQ+dGFnPFJFU0VUPjxHUkVFTj5uZXd0YWc8UkVTRVQ+PmNvbnRlbnQgPFJFRD4mZW50aXR5OzxSRVNFVD48R1JFRU4+Jm5ld2VudGl0eTs8UkVTRVQ+PDxSRUQ+L3RhZzxSRVNFVD48R1JFRU4+L25ld3RhZzxSRVNFVD4+CmRpZmYgLS1naXQgYS90L3Q0MDM0L2h0bWwvcG9zdCBiL3QvdDQwMzQvaHRtbC9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OTIxZTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2h0bWwvcG9zdApAQCAtMCwwICsxLDMgQEAKKzx0YWcgbmV3YXR0cj0ibmV3dmFsdWUiPmFkZGVkIGNvbnRlbnQ8L3RhZz4KKzx0YWcgYXR0cj0ibmV3dmFsdWUiPmNoYW5nZWQ8L3RhZz4KKzxuZXd0YWc+Y29udGVudCAmbmV3ZW50aXR5OzwvbmV3dGFnPgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9odG1sL3ByZSBiL3QvdDQwMzQvaHRtbC9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNhNGFlYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvaHRtbC9wcmUKQEAgLTAsMCArMSwzIEBACis8dGFnPmNvbnRlbnQ8L3RhZz4KKzx0YWcgYXR0cj0idmFsdWUiPmNvbnRlbnQ8L3RhZz4KKzx0YWc+Y29udGVudCAmZW50aXR5OzwvdGFnPgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9qYXZhL2V4cGVjdCBiL3QvdDQwMzQvamF2YS9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkMWVhMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvamF2YS9leHBlY3QKQEAgLTAsMCArMSwzNiBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCAyM2Q1YzhhLi43ZThjMDI2IDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSwxOSArMSwxOSBAQDxSRVNFVD4KK0ZvbygpIDogeCgwPFJFRD4mJjE8UkVTRVQ+PEdSRUVOPiY0MjxSRVNFVD4pIHsgPEdSRUVOPmJhcih4KTs8UkVTRVQ+IH0KK2NvdXQ8PCJIZWxsbyBXb3JsZDxSRUQ+ITxSRVNFVD48R1JFRU4+PzxSRVNFVD5cbiI8PGVuZGw7Cis8R1JFRU4+KDxSRVNFVD4xPEdSRUVOPikgKDxSRVNFVD4tMWUxMDxHUkVFTj4pICg8UkVTRVQ+MHhhYmNkZWY8R1JFRU4+KTxSRVNFVD4gJzxSRUQ+eDxSRVNFVD48R1JFRU4+eTxSRVNFVD4nCitbPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPl0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4uPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorITxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4gfjxSRUQ+YSBhPFJFU0VUPjxHUkVFTj54IHg8UkVTRVQ+KysgPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0tIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPis8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD49PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+IT08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+XjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mJjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnx8PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PzxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD46egorPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPis9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi89PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PDw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+Pj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD5ePTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+fD08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4seQorPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPjo6PFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9qYXZhL3Bvc3QgYi90L3Q0MDM0L2phdmEvcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZThjMDI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9qYXZhL3Bvc3QKQEAgLTAsMCArMSwxOSBAQAorRm9vKCkgOiB4KDAmNDIpIHsgYmFyKHgpOyB9Citjb3V0PDwiSGVsbG8gV29ybGQ/XG4iPDxlbmRsOworKDEpICgtMWUxMCkgKDB4YWJjZGVmKSAneScKK1t4XSB4LT55IHgueQorIXggfnggeCsrIHgtLSB4KnkgeCZ5Cit4KnkgeC95IHgleQoreCt5IHgteQoreDw8eSB4Pj55Cit4PHkgeDw9eSB4PnkgeD49eQoreD09eSB4IT15Cit4JnkKK3heeQoreHx5Cit4JiZ5Cit4fHx5Cit4P3k6egoreD15IHgrPXkgeC09eSB4Kj15IHgvPXkgeCU9eSB4PDw9eSB4Pj49eSB4Jj15IHhePXkgeHw9eQoreCx5Cit4Ojp5CmRpZmYgLS1naXQgYS90L3Q0MDM0L2phdmEvcHJlIGIvdC90NDAzNC9qYXZhL3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2Q1YzhhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9qYXZhL3ByZQpAQCAtMCwwICsxLDE5IEBACitGb28oKTp4KDAmJjEpe30KK2NvdXQ8PCJIZWxsbyBXb3JsZCFcbiI8PGVuZGw7CisxIC0xZTEwIDB4YWJjZGVmICd4JworW2FdIGEtPmIgYS5iCishYSB+YSBhKysgYS0tIGEqYiBhJmIKK2EqYiBhL2IgYSViCithK2IgYS1iCithPDxiIGE+PmIKK2E8YiBhPD1iIGE+YiBhPj1iCithPT1iIGEhPWIKK2EmYgorYV5iCithfGIKK2EmJmIKK2F8fGIKK2E/Yjp6CithPWIgYSs9YiBhLT1iIGEqPWIgYS89YiBhJT1iIGE8PD1iIGE+Pj1iIGEmPWIgYV49YiBhfD1iCithLHkKK2E6OmIKZGlmZiAtLWdpdCBhL3QvdDQwMzQvbWF0bGFiL2V4cGVjdCBiL3QvdDQwMzQvbWF0bGFiL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmNmM2U5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9tYXRsYWIvZXhwZWN0CkBAIC0wLDAgKzEsMTQgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggZGMyMDRkYi4uNzBlMDVmMCAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsOSArMSw5IEBAPFJFU0VUPgorKDxSRUQ+MTxSRVNFVD48R1JFRU4+MDxSRVNFVD4pICg8UkVEPi0xZTEwPFJFU0VUPjxHUkVFTj4tMGUxMDxSRVNFVD4pICc8UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+JzsKK1s8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+XSB7PFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPn0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi48UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+OworfjxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD47Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Lio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi88UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi4vPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD5ePFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4uXjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Llw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi4nOworPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPis8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi08UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+OworPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPiY8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiYmPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD58PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD58fDxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD47Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj49PFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPjsKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD49PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+fj08UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+OworPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPiw8UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+OwpkaWZmIC0tZ2l0IGEvdC90NDAzNC9tYXRsYWIvcG9zdCBiL3QvdDQwMzQvbWF0bGFiL3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBlMDVmMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvbWF0bGFiL3Bvc3QKQEAgLTAsMCArMSw5IEBACisoMCkgKC0wZTEwKSAneSc7CitbeF0ge3h9IHgueTsKK354OworeCp5IHguKnkgeC95IHguL3kgeF55IHguXnkgeC5ceSB4Lic7Cit4K3kgeC15OworeCZ5IHgmJnkgeHx5IHh8fHk7Cit4PHkgeDw9eSB4PnkgeD49eTsKK3g9PXkgeH49eTsKK3gseTsKZGlmZiAtLWdpdCBhL3QvdDQwMzQvbWF0bGFiL3ByZSBiL3QvdDQwMzQvbWF0bGFiL3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzIwNGRiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9tYXRsYWIvcHJlCkBAIC0wLDAgKzEsOSBAQAorKDEpICgtMWUxMCkgJ2InOworW2FdIHthfSBhLmI7Cit+YTsKK2EqYiBhLipiIGEvYiBhLi9iIGFeYiBhLl5iIGEuXGIgYS4nOworYStiIGEtYjsKK2EmYiBhJiZiIGF8YiBhfHxiOworYTxiIGE8PWIgYT5iIGE+PWI7CithPT1iIGF+PWI7CithLGI7CmRpZmYgLS1naXQgYS90L3Q0MDM0L29iamMvZXhwZWN0IGIvdC90NDAzNC9vYmpjL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWQxZGQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9vYmpjL2V4cGVjdApAQCAtMCwwICsxLDM1IEBACis8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxCT0xEPmluZGV4IDkxMDZkNjMuLmRkNWY0MjEgMTAwNjQ0PFJFU0VUPgorPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKzxDWUFOPkBAIC0xLDE4ICsxLDE4IEBAPFJFU0VUPgorRm9vKCkgOiB4KDA8UkVEPiYmMTxSRVNFVD48R1JFRU4+JjQyPFJFU0VUPikgeyA8R1JFRU4+YmFyKHgpOzxSRVNFVD4gfQorY291dDw8IkhlbGxvIFdvcmxkPFJFRD4hPFJFU0VUPjxHUkVFTj4/PFJFU0VUPlxuIjw8ZW5kbDsKKzxHUkVFTj4oPFJFU0VUPjE8R1JFRU4+KSAoPFJFU0VUPi0xZTEwPEdSRUVOPikgKDxSRVNFVD4weGFiY2RlZjxHUkVFTj4pPFJFU0VUPiAnPFJFRD54PFJFU0VUPjxHUkVFTj55PFJFU0VUPicKK1s8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+XSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LT48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi48UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+CishPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPiB+PFJFRD5hIGE8UkVTRVQ+PEdSRUVOPnggeDxSRVNFVD4rKyA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LS0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4hPTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD5ePFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiYmPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+fHw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4/PFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPjp6Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kz08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4qPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Lz08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Jj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPl49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD58PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPix5CmRpZmYgLS1naXQgYS90L3Q0MDM0L29iamMvcG9zdCBiL3QvdDQwMzQvb2JqYy9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNWY0MjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L29iamMvcG9zdApAQCAtMCwwICsxLDE4IEBACitGb28oKSA6IHgoMCY0MikgeyBiYXIoeCk7IH0KK2NvdXQ8PCJIZWxsbyBXb3JsZD9cbiI8PGVuZGw7CisoMSkgKC0xZTEwKSAoMHhhYmNkZWYpICd5JworW3hdIHgtPnkgeC55CisheCB+eCB4KysgeC0tIHgqeSB4JnkKK3gqeSB4L3kgeCV5Cit4K3kgeC15Cit4PDx5IHg+PnkKK3g8eSB4PD15IHg+eSB4Pj15Cit4PT15IHghPXkKK3gmeQoreF55Cit4fHkKK3gmJnkKK3h8fHkKK3g/eTp6Cit4PXkgeCs9eSB4LT15IHgqPXkgeC89eSB4JT15IHg8PD15IHg+Pj15IHgmPXkgeF49eSB4fD15Cit4LHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvb2JqYy9wcmUgYi90L3Q0MDM0L29iamMvcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMDZkNjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L29iamMvcHJlCkBAIC0wLDAgKzEsMTggQEAKK0ZvbygpOngoMCYmMSl7fQorY291dDw8IkhlbGxvIFdvcmxkIVxuIjw8ZW5kbDsKKzEgLTFlMTAgMHhhYmNkZWYgJ3gnCitbYV0gYS0+YiBhLmIKKyFhIH5hIGErKyBhLS0gYSpiIGEmYgorYSpiIGEvYiBhJWIKK2ErYiBhLWIKK2E8PGIgYT4+YgorYTxiIGE8PWIgYT5iIGE+PWIKK2E9PWIgYSE9YgorYSZiCithXmIKK2F8YgorYSYmYgorYXx8YgorYT9iOnoKK2E9YiBhKz1iIGEtPWIgYSo9YiBhLz1iIGElPWIgYTw8PWIgYT4+PWIgYSY9YiBhXj1iIGF8PWIKK2EseQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9wYXNjYWwvZXhwZWN0IGIvdC90NDAzNC9wYXNjYWwvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZTQyMzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3Bhc2NhbC9leHBlY3QKQEAgLTAsMCArMSwzNSBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCAwNzcwNDZjLi44ODY1ZTZiIDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSwxOCArMSwxOCBAQDxSRVNFVD4KK3dyaXRlbG4oIkhlbGxvIFdvcmxkPFJFRD4hPFJFU0VUPjxHUkVFTj4/PFJFU0VUPiIpOworPEdSRUVOPig8UkVTRVQ+MTxHUkVFTj4pICg8UkVTRVQ+LTFlMTA8R1JFRU4+KSAoPFJFU0VUPjB4YWJjZGVmPEdSRUVOPik8UkVTRVQ+ICc8UkVEPng8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+JworWzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD5dIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tPjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LjxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKyE8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+IH48UkVEPmEgYTxSRVNFVD48R1JFRU4+eCB4PFJFU0VUPisrIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tLSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi88UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4rPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj49PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiE9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPl48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj88UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+OnoKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4rPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPio9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw8PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Xj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPnw9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+LHkKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD46OjxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD4KZGlmZiAtLWdpdCBhL3QvdDQwMzQvcGFzY2FsL3Bvc3QgYi90L3Q0MDM0L3Bhc2NhbC9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NjVlNmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3Bhc2NhbC9wb3N0CkBAIC0wLDAgKzEsMTggQEAKK3dyaXRlbG4oIkhlbGxvIFdvcmxkPyIpOworKDEpICgtMWUxMCkgKDB4YWJjZGVmKSAneScKK1t4XSB4LT55IHgueQorIXggfnggeCsrIHgtLSB4KnkgeCZ5Cit4KnkgeC95IHgleQoreCt5IHgteQoreDw8eSB4Pj55Cit4PHkgeDw9eSB4PnkgeD49eQoreD09eSB4IT15Cit4JnkKK3heeQoreHx5Cit4JiZ5Cit4fHx5Cit4P3k6egoreD15IHgrPXkgeC09eSB4Kj15IHgvPXkgeCU9eSB4PDw9eSB4Pj49eSB4Jj15IHhePXkgeHw9eQoreCx5Cit4Ojp5CmRpZmYgLS1naXQgYS90L3Q0MDM0L3Bhc2NhbC9wcmUgYi90L3Q0MDM0L3Bhc2NhbC9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3MDQ2YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcGFzY2FsL3ByZQpAQCAtMCwwICsxLDE4IEBACit3cml0ZWxuKCJIZWxsbyBXb3JsZCEiKTsKKzEgLTFlMTAgMHhhYmNkZWYgJ3gnCitbYV0gYS0+YiBhLmIKKyFhIH5hIGErKyBhLS0gYSpiIGEmYgorYSpiIGEvYiBhJWIKK2ErYiBhLWIKK2E8PGIgYT4+YgorYTxiIGE8PWIgYT5iIGE+PWIKK2E9PWIgYSE9YgorYSZiCithXmIKK2F8YgorYSYmYgorYXx8YgorYT9iOnoKK2E9YiBhKz1iIGEtPWIgYSo9YiBhLz1iIGElPWIgYTw8PWIgYT4+PWIgYSY9YiBhXj1iIGF8PWIKK2EseQorYTo6YgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9wZXJsL2V4cGVjdCBiL3QvdDQwMzQvcGVybC9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkZWI2YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcGVybC9leHBlY3QKQEAgLTAsMCArMSwxMyBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCBmNjYxMGQzLi5lOGI3MmVmIDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtNCw4ICs0LDggQEA8UkVTRVQ+CisKK3BhY2thZ2UgRnJvdHo7PFJFU0VUPgorc3ViIG5ldyB7PFJFU0VUPgorCW15IDxHUkVFTj4oPFJFU0VUPiRjbGFzczxHUkVFTj4sICVvcHRzKTxSRVNFVD4gPSA8UkVEPnNoaWZ0PFJFU0VUPjxHUkVFTj5AXzxSRVNFVD47CisJcmV0dXJuIGJsZXNzIHsgPEdSRUVOPnh5enp5ID0+ICJuaXRmb2wiLCAlb3B0czxSRVNFVD4gfSwgJGNsYXNzOworfTxSRVNFVD4KKworX19FTkRfXzxSRVNFVD4KZGlmZiAtLWdpdCBhL3QvdDQwMzQvcGVybC9wb3N0IGIvdC90NDAzNC9wZXJsL3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiNzJlZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcGVybC9wb3N0CkBAIC0wLDAgKzEsMjIgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OworCitwYWNrYWdlIEZyb3R6Oworc3ViIG5ldyB7CisJbXkgKCRjbGFzcywgJW9wdHMpID0gQF87CisJcmV0dXJuIGJsZXNzIHsgeHl6enkgPT4gIm5pdGZvbCIsICVvcHRzIH0sICRjbGFzczsKK30KKworX19FTkRfXworPWhlYWQxIE5BTUUKKworZnJvdHogLSBGcm90egorCis9aGVhZDEgU1lOT1BTSVMKKworICB1c2UgZnJvdHo7CisKKyAgJG5pdGZvbCA9IG5ldyBGcm90eigpOworCis9Y3V0CmRpZmYgLS1naXQgYS90L3Q0MDM0L3BlcmwvcHJlIGIvdC90NDAzNC9wZXJsL3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjYxMGQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9wZXJsL3ByZQpAQCAtMCwwICsxLDIyIEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHN0cmljdDsKKworcGFja2FnZSBGcm90ejsKK3N1YiBuZXcgeworCW15ICRjbGFzcyA9IHNoaWZ0OworCXJldHVybiBibGVzcyB7fSwgJGNsYXNzOworfQorCitfX0VORF9fCis9aGVhZDEgTkFNRQorCitmcm90eiAtIEZyb3R6CisKKz1oZWFkMSBTWU5PUFNJUworCisgIHVzZSBmcm90ejsKKworICAkbml0Zm9sID0gbmV3IEZyb3R6KCk7CisKKz1jdXQKZGlmZiAtLWdpdCBhL3QvdDQwMzQvcGhwL2V4cGVjdCBiL3QvdDQwMzQvcGhwL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDA0NDA4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9waHAvZXhwZWN0CkBAIC0wLDAgKzEsMzUgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggY2Y2ZTA2Yi4uNDQyMGE0OSAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsMTggKzEsMTggQEA8UkVTRVQ+Cis8R1JFRU4+KDxSRVNFVD4kdmFyPEdSRUVOPik8UkVTRVQ+ICQgdmFyCis8Pz0iSGVsbG8gV29ybGQ8UkVEPiE8UkVTRVQ+PEdSRUVOPj88UkVTRVQ+Ij8+Cis8R1JFRU4+KDxSRVNFVD4xPEdSRUVOPikgKDxSRVNFVD4tMWUxMDxHUkVFTj4pICg8UkVTRVQ+MHhhYmNkZWY8R1JFRU4+KTxSRVNFVD4gJzxSRUQ+eDxSRVNFVD48R1JFRU4+eTxSRVNFVD4nCitbPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPl0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4uPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorITxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4gfjxSRUQ+YSBhPFJFU0VUPjxHUkVFTj54IHg8UkVTRVQ+KysgPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0tIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPis8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD49PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+IT08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+XjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mJjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnx8PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PzxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD46egorPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPis9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi89PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PDw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+Pj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD5ePTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+fD08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4seQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9waHAvcG9zdCBiL3QvdDQwMzQvcGhwL3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQyMGE0OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcGhwL3Bvc3QKQEAgLTAsMCArMSwxOCBAQAorKCR2YXIpICQgdmFyCis8Pz0iSGVsbG8gV29ybGQ/Ij8+CisoMSkgKC0xZTEwKSAoMHhhYmNkZWYpICd5JworW3hdIHgtPnkgeC55CisheCB+eCB4KysgeC0tIHgqeSB4JnkKK3gqeSB4L3kgeCV5Cit4K3kgeC15Cit4PDx5IHg+PnkKK3g8eSB4PD15IHg+eSB4Pj15Cit4PT15IHghPXkKK3gmeQoreF55Cit4fHkKK3gmJnkKK3h8fHkKK3g/eTp6Cit4PXkgeCs9eSB4LT15IHgqPXkgeC89eSB4JT15IHg8PD15IHg+Pj15IHgmPXkgeF49eSB4fD15Cit4LHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvcGhwL3ByZSBiL3QvdDQwMzQvcGhwL3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjZlMDZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9waHAvcHJlCkBAIC0wLDAgKzEsMTggQEAKKyR2YXIgJHZhcgorPD89ICJIZWxsbyBXb3JsZCEiID8+CisxIC0xZTEwIDB4YWJjZGVmICd4JworW2FdIGEtPmIgYS5iCishYSB+YSBhKysgYS0tIGEqYiBhJmIKK2EqYiBhL2IgYSViCithK2IgYS1iCithPDxiIGE+PmIKK2E8YiBhPD1iIGE+YiBhPj1iCithPT1iIGEhPWIKK2EmYgorYV5iCithfGIKK2EmJmIKK2F8fGIKK2E/Yjp6CithPWIgYSs9YiBhLT1iIGEqPWIgYS89YiBhJT1iIGE8PD1iIGE+Pj1iIGEmPWIgYV49YiBhfD1iCithLHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvcHl0aG9uL2V4cGVjdCBiL3QvdDQwMzQvcHl0aG9uL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWJiOGE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9weXRob24vZXhwZWN0CkBAIC0wLDAgKzEsMzQgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggNDM4Zjc3Ni4uNjhiYWYzNCAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsMTcgKzEsMTcgQEA8UkVTRVQ+CitwcmludDxSRUQ+dTxSRVNFVD4gIkhlbGxvIFdvcmxkPFJFRD4hPFJFU0VUPjxHUkVFTj4/PFJFU0VUPlxuIjxHUkVFTj47IHByaW50PFJFU0VUPgorPEdSRUVOPig8UkVTRVQ+MTxHUkVFTj4pICg8UkVTRVQ+LTFlMTA8R1JFRU4+KSAoPFJFU0VUPjB4YWJjZGVmPEdSRUVOPikgdTxSRVNFVD4nPFJFRD54PFJFU0VUPjxHUkVFTj55PFJFU0VUPicKK1s8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+XSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LT48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi48UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+CishPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPiB+PFJFRD5hIGE8UkVTRVQ+PEdSRUVOPnggeDxSRVNFVD4rKyA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LS0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4hPTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD5ePFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiYmPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+fHw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4/PFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPjp6Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kz08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4qPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Lz08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Jj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPl49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD58PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPix5CmRpZmYgLS1naXQgYS90L3Q0MDM0L3B5dGhvbi9wb3N0IGIvdC90NDAzNC9weXRob24vcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGJhZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9weXRob24vcG9zdApAQCAtMCwwICsxLDE3IEBACitwcmludCAiSGVsbG8gV29ybGQ/XG4iOyBwcmludAorKDEpICgtMWUxMCkgKDB4YWJjZGVmKSB1J3knCitbeF0geC0+eSB4LnkKKyF4IH54IHgrKyB4LS0geCp5IHgmeQoreCp5IHgveSB4JXkKK3greSB4LXkKK3g8PHkgeD4+eQoreDx5IHg8PXkgeD55IHg+PXkKK3g9PXkgeCE9eQoreCZ5Cit4XnkKK3h8eQoreCYmeQoreHx8eQoreD95OnoKK3g9eSB4Kz15IHgtPXkgeCo9eSB4Lz15IHglPXkgeDw8PXkgeD4+PXkgeCY9eSB4Xj15IHh8PXkKK3gseQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9weXRob24vcHJlIGIvdC90NDAzNC9weXRob24vcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOGY3NzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3B5dGhvbi9wcmUKQEAgLTAsMCArMSwxNyBAQAorcHJpbnQgdSJIZWxsbyBXb3JsZCFcbiIKKzEgLTFlMTAgMHhhYmNkZWYgJ3gnCitbYV0gYS0+YiBhLmIKKyFhIH5hIGErKyBhLS0gYSpiIGEmYgorYSpiIGEvYiBhJWIKK2ErYiBhLWIKK2E8PGIgYT4+YgorYTxiIGE8PWIgYT5iIGE+PWIKK2E9PWIgYSE9YgorYSZiCithXmIKK2F8YgorYSYmYgorYXx8YgorYT9iOnoKK2E9YiBhKz1iIGEtPWIgYSo9YiBhLz1iIGElPWIgYTw8PWIgYT4+PWIgYSY9YiBhXj1iIGF8PWIKK2EseQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9ydWJ5L2V4cGVjdCBiL3QvdDQwMzQvcnVieS9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlMWRkNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcnVieS9leHBlY3QKQEAgLTAsMCArMSwzNCBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCAzMGVkOWExLi43Njc4ZjE0IDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSwxNyArMSwxNyBAQDxSRVNFVD4KKzEwLmRvd250bygxKSB7fDxSRUQ+eDxSRVNFVD48R1JFRU4+eTxSRVNFVD58IHB1dHMgPFJFRD54PFJFU0VUPjxHUkVFTj55PFJFU0VUPn0KKzxHUkVFTj4oPFJFU0VUPjE8R1JFRU4+KSAoPFJFU0VUPi0xZTEwPEdSRUVOPikgKDxSRVNFVD4weGFiY2RlZjxHUkVFTj4pPFJFU0VUPiAnPFJFRD54PFJFU0VUPjxHUkVFTj55PFJFU0VUPicKK1s8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+XSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LT48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi48UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+CishPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPiB+PFJFRD5hIGE8UkVTRVQ+PEdSRUVOPnggeDxSRVNFVD4rKyA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LS0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4hPTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD5ePFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiYmPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+fHw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE/YjxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54P3k8UkVTRVQ+OnoKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4rPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPio9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw8PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Xj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPnw9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+LHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvcnVieS9wb3N0IGIvdC90NDAzNC9ydWJ5L3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY3OGYxNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcnVieS9wb3N0CkBAIC0wLDAgKzEsMTcgQEAKKzEwLmRvd250bygxKSB7fHl8IHB1dHMgeX0KKygxKSAoLTFlMTApICgweGFiY2RlZikgJ3knCitbeF0geC0+eSB4LnkKKyF4IH54IHgrKyB4LS0geCp5IHgmeQoreCp5IHgveSB4JXkKK3greSB4LXkKK3g8PHkgeD4+eQoreDx5IHg8PXkgeD55IHg+PXkKK3g9PXkgeCE9eQoreCZ5Cit4XnkKK3h8eQoreCYmeQoreHx8eQoreD95OnoKK3g9eSB4Kz15IHgtPXkgeCo9eSB4Lz15IHglPXkgeDw8PXkgeD4+PXkgeCY9eSB4Xj15IHh8PXkKK3gseQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9ydWJ5L3ByZSBiL3QvdDQwMzQvcnVieS9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBlZDlhMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcnVieS9wcmUKQEAgLTAsMCArMSwxNyBAQAorMTAuZG93bnRvKDEpIHt8eHwgcHV0cyB4fQorMSAtMWUxMCAweGFiY2RlZiAneCcKK1thXSBhLT5iIGEuYgorIWEgfmEgYSsrIGEtLSBhKmIgYSZiCithKmIgYS9iIGElYgorYStiIGEtYgorYTw8YiBhPj5iCithPGIgYTw9YiBhPmIgYT49YgorYT09YiBhIT1iCithJmIKK2FeYgorYXxiCithJiZiCithfHxiCithP2I6egorYT1iIGErPWIgYS09YiBhKj1iIGEvPWIgYSU9YiBhPDw9YiBhPj49YiBhJj1iIGFePWIgYXw9YgorYSx5CmRpZmYgLS1naXQgYS90L3Q0MDM0L3RleC9leHBlY3QgYi90L3Q0MDM0L3RleC9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0OTY5YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvdGV4L2V4cGVjdApAQCAtMCwwICsxLDkgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggMmIyZGZjYi4uNjVjYWI2MSAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsNCArMSw0IEBAPFJFU0VUPgorXHNlY3Rpb257U29tZXRoaW5nIDxHUkVFTj5uZXc8UkVTRVQ+fQorPFJFRD5cZW1waDxSRVNFVD48R1JFRU4+XHRleHRiZjxSRVNFVD57TWFjcm8gc3R5bGV9Cit7PFJFRD5cZW08UkVTRVQ+PEdSRUVOPlxiZnNlcmllczxSRVNFVD4gU3RhdGUgdG9nZ2xlIHN0eWxlfQorXFxbPFJFRD4xZW08UkVTRVQ+PEdSRUVOPjFjbTxSRVNFVD5dCmRpZmYgLS1naXQgYS90L3Q0MDM0L3RleC9wb3N0IGIvdC90NDAzNC90ZXgvcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWNhYjYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC90ZXgvcG9zdApAQCAtMCwwICsxLDQgQEAKK1xzZWN0aW9ue1NvbWV0aGluZyBuZXd9CitcdGV4dGJme01hY3JvIHN0eWxlfQore1xiZnNlcmllcyBTdGF0ZSB0b2dnbGUgc3R5bGV9CitcXFsxY21dCmRpZmYgLS1naXQgYS90L3Q0MDM0L3RleC9wcmUgYi90L3Q0MDM0L3RleC9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyZGZjYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvdGV4L3ByZQpAQCAtMCwwICsxLDQgQEAKK1xzZWN0aW9ue1NvbWV0aGluZ30KK1xlbXBoe01hY3JvIHN0eWxlfQore1xlbSBTdGF0ZSB0b2dnbGUgc3R5bGV9CitcXFsxZW1dCmRpZmYgLS1naXQgYS90L3Q0MDM1LWRpZmYtcXVpZXQuc2ggYi90L3Q0MDM1LWRpZmYtcXVpZXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDM1MmJmOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzUtZGlmZi1xdWlldC5zaApAQCAtMCwwICsxLDE2NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1JldHVybiB2YWx1ZSBvZiBkaWZmcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyAxID5hICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBmaXJzdCAmJgorCWVjaG8gMiA+YiAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLWEgLW0gc2Vjb25kICYmCisJbWtkaXIgLXAgdGVzdC1vdXRzaWRlL3JlcG8gJiYgKAorCQljZCB0ZXN0LW91dHNpZGUvcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvICIxIDEiID5hICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgY29tbWl0IC1tIDEKKwkpICYmCisJbWtkaXIgLXAgdGVzdC1vdXRzaWRlL25vbi9naXQgJiYgKAorCQljZCB0ZXN0LW91dHNpZGUvbm9uL2dpdCAmJgorCQllY2hvICIxIDEiID5hICYmCisJCWVjaG8gIjEgMSIgPm1hdGNoaW5nLWZpbGUgJiYKKwkJZWNobyAiMSAxICIgPnRyYWlsaW5nLXNwYWNlICYmCisJCWVjaG8gIjEgICAxIiA+ZXh0cmEtc3BhY2UgJiYKKwkJZWNobyAiMiIgPm5ldmVyLW1hdGNoCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi10cmVlIEhFQUReIEhFQUQnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtdHJlZSAtLXF1aWV0IEhFQUReIEhFQUQgPmNudCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgY250CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi10cmVlIEhFQUReIEhFQUQgLS0gYScgJworCXRlc3RfZXhwZWN0X2NvZGUgMCBnaXQgZGlmZi10cmVlIC0tcXVpZXQgSEVBRF4gSEVBRCAtLSBhID5jbnQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGNudAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSBIRUFEXiBIRUFEIC0tIGInICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtdHJlZSAtLXF1aWV0IEhFQUReIEhFQUQgLS0gYiA+Y250ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBjbnQKKycKKyMgdGhpcyBkaWZmIG91dHB1dHMgb25lIGxpbmU6IHNoYTEgb2YgdGhlIGdpdmVuIGhlYWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VjaG8gSEVBRCB8IGdpdCBkaWZmLXRyZWUgLS1zdGRpbicgJworCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUQpIHwKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtdHJlZSAtLXF1aWV0IC0tc3RkaW4gPmNudCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgY250CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi10cmVlIEhFQUQgSEVBRCcgJworCXRlc3RfZXhwZWN0X2NvZGUgMCBnaXQgZGlmZi10cmVlIC0tcXVpZXQgSEVBRCBIRUFEID5jbnQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGNudAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtZmlsZXMnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDAgZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCA+Y250ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBjbnQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDAgZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEID5jbnQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGNudAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRF4nICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEXiA+Y250ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBjbnQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUReJyAnCisJZWNobyB0ZXh0ID4+YiAmJgorCWVjaG8gMyA+YyAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUReID5jbnQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGNudAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSAtU3RleHQgSEVBRF4gSEVBRCAtLSBiJyAnCisJZ2l0IGNvbW1pdCAtbSAidGV4dCBpbiBiIiAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZi10cmVlIC0tcXVpZXQgLVN0ZXh0IEhFQUReIEhFQUQgLS0gYiA+Y250ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBjbnQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgLVNub3QtZm91bmQgSEVBRF4gSEVBRCAtLSBiJyAnCisJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmLXRyZWUgLS1xdWlldCAtU25vdC1mb3VuZCBIRUFEXiBIRUFEIC0tIGIgPmNudCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgY250CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1maWxlcycgJworCWVjaG8gMyA+PmMgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCA+Y250ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBjbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRCcgJworCWdpdCB1cGRhdGUtaW5kZXggYyAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgPmNudCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgY250CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLCBvbmUgZmlsZSBvdXRzaWRlIHJlcG8nICcKKwkoCisJCWNkIHRlc3Qtb3V0c2lkZS9yZXBvICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMCBnaXQgZGlmZiAtLXF1aWV0IGEgLi4vbm9uL2dpdC9tYXRjaGluZy1maWxlICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLXF1aWV0IGEgLi4vbm9uL2dpdC9leHRyYS1zcGFjZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYsIGJvdGggZmlsZXMgb3V0c2lkZSByZXBvJyAnCisJKAorCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX0RJUkVDVE9SWS90ZXN0LW91dHNpZGUiICYmCisJCWV4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyAmJgorCQljZCB0ZXN0LW91dHNpZGUvbm9uL2dpdCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDAgZ2l0IGRpZmYgLS1xdWlldCBhIG1hdGNoaW5nLWZpbGUgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tcXVpZXQgYSBleHRyYS1zcGFjZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1pZ25vcmUtc3BhY2UtYXQtZW9sLCBvbmUgZmlsZSBvdXRzaWRlIHJlcG8nICcKKwkoCisJCWNkIHRlc3Qtb3V0c2lkZS9yZXBvICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMCBnaXQgZGlmZiAtLXF1aWV0IC0taWdub3JlLXNwYWNlLWF0LWVvbCBhIC4uL25vbi9naXQvdHJhaWxpbmctc3BhY2UgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tcXVpZXQgLS1pZ25vcmUtc3BhY2UtYXQtZW9sIGEgLi4vbm9uL2dpdC9leHRyYS1zcGFjZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1pZ25vcmUtc3BhY2UtYXQtZW9sLCBib3RoIGZpbGVzIG91dHNpZGUgcmVwbycgJworCSgKKwkJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ESVJFQ1RPUlkvdGVzdC1vdXRzaWRlIiAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJY2QgdGVzdC1vdXRzaWRlL25vbi9naXQgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmIC0tcXVpZXQgLS1pZ25vcmUtc3BhY2UtYXQtZW9sIGEgdHJhaWxpbmctc3BhY2UgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tcXVpZXQgLS1pZ25vcmUtc3BhY2UtYXQtZW9sIGEgZXh0cmEtc3BhY2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIC0taWdub3JlLWFsbC1zcGFjZSwgb25lIGZpbGUgb3V0c2lkZSByZXBvJyAnCisJKAorCQljZCB0ZXN0LW91dHNpZGUvcmVwbyAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDAgZ2l0IGRpZmYgLS1xdWlldCAtLWlnbm9yZS1hbGwtc3BhY2UgYSAuLi9ub24vZ2l0L3RyYWlsaW5nLXNwYWNlICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMCBnaXQgZGlmZiAtLXF1aWV0IC0taWdub3JlLWFsbC1zcGFjZSBhIC4uL25vbi9naXQvZXh0cmEtc3BhY2UgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tcXVpZXQgLS1pZ25vcmUtYWxsLXNwYWNlIGEgLi4vbm9uL2dpdC9uZXZlci1tYXRjaAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1pZ25vcmUtYWxsLXNwYWNlLCBib3RoIGZpbGVzIG91dHNpZGUgcmVwbycgJworCSgKKwkJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ESVJFQ1RPUlkvdGVzdC1vdXRzaWRlIiAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJY2QgdGVzdC1vdXRzaWRlL25vbi9naXQgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmIC0tcXVpZXQgLS1pZ25vcmUtYWxsLXNwYWNlIGEgdHJhaWxpbmctc3BhY2UgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmIC0tcXVpZXQgLS1pZ25vcmUtYWxsLXNwYWNlIGEgZXh0cmEtc3BhY2UgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tcXVpZXQgLS1pZ25vcmUtYWxsLXNwYWNlIGEgbmV2ZXItbWF0Y2gKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIC0tcXVpZXQgaWdub3JlcyBzdGF0LWNoYW5nZSBvbmx5IGVudHJpZXMnICcKKwl0ZXN0LXRvb2wgY2htdGltZSArMTAgYSAmJgorCWVjaG8gbW9kaWZpZWQgPj5iICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tcXVpZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1xdWlldCBvbiBhIHBhdGggdGhhdCBuZWVkIGNvbnZlcnNpb24nICcKKwllY2hvICJjcmxmLnR4dCB0ZXh0PWF1dG8iID4uZ2l0YXR0cmlidXRlcyAmJgorCXByaW50ZiAiSGVsbG9cclxuV29ybGRcclxuIiA+Y3JsZi50eHQgJiYKKwlnaXQgYWRkIC5naXRhdHRyaWJ1dGVzIGNybGYudHh0ICYmCisKKwlwcmludGYgIkhlbGxvXHJcbldvcmxkXG4iID5jcmxmLnR4dCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgY3JsZi50eHQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDM2LWZvcm1hdC1wYXRjaC1zaWduZXItbWltZS5zaCBiL3QvdDQwMzYtZm9ybWF0LXBhdGNoLXNpZ25lci1taW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4ZDk3MTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM2LWZvcm1hdC1wYXRjaC1zaWduZXItbWltZS5zaApAQCAtMCwwICsxLDUwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZm9ybWF0LXBhdGNoIC1zIHNob3VsZCBmb3JjZSBNSU1FIGVuY29kaW5nIGFzIG5lZWRlZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPkYgJiYKKwlnaXQgYWRkIEYgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvIG5ldyBsaW5lID5GICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJUaGlzIGFkZHMgc29tZSBsaW5lcyB0byBGIiBGCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0IG5vcm1hbGx5JyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5vdXRwdXQgJiYKKwkhIGdyZXAgQ29udGVudC1UeXBlIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdCB3aXRoIHNpZ25vZmYgd2l0aG91dCBmdW5ueSBzaWduZXIgbmFtZScgJworCisJZ2l0IGZvcm1hdC1wYXRjaCAtcyAtLXN0ZG91dCAtMSA+b3V0cHV0ICYmCisJISBncmVwIENvbnRlbnQtVHlwZSBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQgd2l0aCBub24gQVNDSUkgc2lnbmVyIG5hbWUnICcKKworCUdJVF9DT01NSVRURVJfTkFNRT0i44Gv44G+44GuIOOBteOBq+OBiuOBhiIgXAorCWdpdCBmb3JtYXQtcGF0Y2ggLXMgLS1zdGRvdXQgLTEgPm91dHB1dCAmJgorCWdyZXAgQ29udGVudC1UeXBlIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dGFjaCBhbmQgc2lnbm9mZiBkbyBub3QgZHVwbGljYXRlIG1pbWUgaGVhZGVycycgJworCisJR0lUX0NPTU1JVFRFUl9OQU1FPSLjga/jgb7jga4g44G144Gr44GK44GGIiBcCisJZ2l0IGZvcm1hdC1wYXRjaCAtcyAtLXN0ZG91dCAtMSAtLWF0dGFjaCA+b3V0cHV0ICYmCisJdGVzdCAkKGdyZXAgLWNpIF5NSU1FLVZlcnNpb246IG91dHB1dCkgPSAxCisKKycKKwordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDQwMzctZGlmZi1yLXQtZGlycy5zaCBiL3QvdDQwMzctZGlmZi1yLXQtZGlycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNWNlM2IyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNy1kaWZmLXItdC1kaXJzLnNoCkBAIC0wLDAgKzEsNTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIC1yIC10IHNob3dzIGRpcmVjdG9yeSBhZGRpdGlvbnMgYW5kIGRlbGV0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIGRjIGRyIGR0ICYmCisJPmRjLzEgJiYKKwk+ZHIvMiAmJgorCT5kdC8zICYmCisJPmZjICYmCisJPmZyICYmCisJPmZ0ICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlybSAtZnIgZHQgZHIgZnQgZnIgJiYKKwlta2RpciBkYSBmdCAmJgorCWZvciBwIGluIGRjLzEgZGEvNCBkdCBmdC81IGZjCisJZG8KKwkJZWNobyBoZWxsbyA+JHAgfHwgZXhpdAorCWRvbmUgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitBCWRhCitBCWRhLzQKK00JZGMKK00JZGMvMQorRAlkcgorRAlkci8yCitBCWR0CitECWR0CitECWR0LzMKK00JZmMKK0QJZnIKK0QJZnQKK0EJZnQKK0EJZnQvNQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgdmVyaWZ5ICcKKwlnaXQgZGlmZi10cmVlIC1yIC10IC0tbmFtZS1zdGF0dXMgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMzgtZGlmZi1jb21iaW5lZC5zaCBiL3QvdDQwMzgtZGlmZi1jb21iaW5lZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NDY4MDgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzOC1kaWZmLWNvbWJpbmVkLnNoCkBAIC0wLDAgKzEsNTMzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tYmluZWQgZGlmZicKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCisKK3NldHVwX2hlbHBlciAoKSB7CisJb25lPSQxIGJyYW5jaD0kMiBzaWRlPSQzICYmCisKKwlnaXQgYnJhbmNoICRzaWRlICRicmFuY2ggJiYKKwlmb3IgbCBpbiAkb25lIHR3byB0aHJlZSBmeXJhCisJZG8KKwkJZWNobyAkbAorCWRvbmUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICRicmFuY2ggJiYKKwlnaXQgY2hlY2tvdXQgJHNpZGUgJiYKKwlmb3IgbCBpbiAkb25lIHR3byB0aHJlZSBxdWF0cm8KKwlkbworCQllY2hvICRsCisJZG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gJHNpZGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgJGJyYW5jaCAmJgorCWZvciBsIGluICRvbmUgdGhyZWUgZm91cgorCWRvCisJCWVjaG8gJGwKKwlkb25lID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAibWVyZ2UgJGJyYW5jaCBpbnRvICRzaWRlIgorfQorCit2ZXJpZnlfaGVscGVyICgpIHsKKwlpdD0kMSAmJgorCisJIyBJZ25vcmUgbGluZXMgdGhhdCB3ZXJlIHJlbW92ZWQgb25seSBmcm9tIHRoZSBvdGhlciBwYXJlbnQKKwlzZWQgLWUgJworCQkxLC9eQEBAL2QKKwkJL14gLS9kCisJCXMvXlwoLlwpLi9cMS8KKwknICIkaXQiID4iJGl0LmFjdHVhbC4xIiAmJgorCXNlZCAtZSAnCisJCTEsL15AQEAvZAorCQkvXi0gL2QKKwkJcy9eLlwoLlwpL1wxLworCScgIiRpdCIgPiIkaXQuYWN0dWFsLjIiICYmCisKKwlnaXQgZGlmZiAiJGl0XiIgIiRpdCIgLS0gfCBzZWQgLWUgJzEsL15AQC9kJyA+IiRpdC5leHBlY3QuMSIgJiYKKwl0ZXN0X2NtcCAiJGl0LmV4cGVjdC4xIiAiJGl0LmFjdHVhbC4xIiAmJgorCisJZ2l0IGRpZmYgIiRpdF4yIiAiJGl0IiAtLSB8IHNlZCAtZSAnMSwvXkBAL2QnID4iJGl0LmV4cGVjdC4yIiAmJgorCXRlc3RfY21wICIkaXQuZXhwZWN0LjIiICIkaXQuYWN0dWFsLjIiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgYnJhbmNoIHdpdGhvbmUgJiYKKwlnaXQgYnJhbmNoIHNhbnNvbmUgJiYKKworCWdpdCBjaGVja291dCB3aXRob25lICYmCisJc2V0dXBfaGVscGVyIG9uZSB3aXRob25lIHNpZGV3aXRob25lICYmCisKKwlnaXQgY2hlY2tvdXQgc2Fuc29uZSAmJgorCXNldHVwX2hlbHBlciAiIiBzYW5zb25lIHNpZGVzYW5zb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGNvbWJpbmVkIG91dHB1dCAoMSknICcKKwlnaXQgc2hvdyBzaWRld2l0aG9uZSAtLSA+c2lkZXdpdGhvbmUgJiYKKwl2ZXJpZnlfaGVscGVyIHNpZGV3aXRob25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGNvbWJpbmVkIG91dHB1dCAoMiknICcKKwlnaXQgc2hvdyBzaWRlc2Fuc29uZSAtLSA+c2lkZXNhbnNvbmUgJiYKKwl2ZXJpZnlfaGVscGVyIHNpZGVzYW5zb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpYWdub3NlIHRydW5jYXRlZCBmaWxlJyAnCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLUMgSEVBRCAmJgorCWdpdCBzaG93ID5vdXQgJiYKKwlncmVwICJkaWZmIC0tY2MgZmlsZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciAtLWNjIC0tcmF3JyAnCisJYmxvYj0kKGVjaG8gZmlsZSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIC13KSAmJgorCWJhc2VfdHJlZT0kKGVjaG8gIjEwMDY0NCBibG9iICRibG9iCWZpbGUiIHwgZ2l0IG1rdHJlZSkgJiYKKwl0cmVlcz0gJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgNDApCisJZG8KKwkJYmxvYj0kKGVjaG8gZmlsZSRpIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gLXcpICYmCisJCXRyZWVzPSIkdHJlZXMkKGVjaG8gIjEwMDY0NCBibG9iICRibG9iCWZpbGUiIHwgZ2l0IG1rdHJlZSkkTEYiCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayAtLWNjIC0tcmF3IHdpdGggZm91ciB0cmVlcycgJworCWZvdXJfdHJlZXM9JChlY2hvICIkdHJlZXMiIHwgc2VkIC1lIDRxKSAmJgorCWdpdCBkaWZmIC0tY2MgLS1yYXcgJGZvdXJfdHJlZXMgJGJhc2VfdHJlZSA+b3V0ICYmCisJIyBDaGVjayBmb3IgZm91ciBsZWFkaW5nIGNvbG9ucyBpbiB0aGUgb3V0cHV0OgorCWdyZXAgIl46Ojo6W146XSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIC0tY2MgLS1yYXcgd2l0aCBmb3J0eSB0cmVlcycgJworCWdpdCBkaWZmIC0tY2MgLS1yYXcgJHRyZWVzICRiYXNlX3RyZWUgPm91dCAmJgorCSMgQ2hlY2sgZm9yIGZvcnR5IGxlYWRpbmcgY29sb25zIGluIHRoZSBvdXRwdXQ6CisJZ3JlcCAiXjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjpbXjpdIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29tYmluZWQgaWdub3JlIHNwYWNlcycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwk+dGVzdCAmJgorCWdpdCBhZGQgdGVzdCAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJdHIgLWQgUSA8PC1cRU9GID50ZXN0ICYmCisJYWx3YXlzIGNvYWxlc2NlCisJZW9sIHNwYWNlIGNvYWxlc2NlIFEKKwlzcGFjZSAgY2hhbmdlIGNvYWxlc2NlCisJYWxsIHNwYSBjZXMgY29hbGVzY2UKKwllb2wgc3BhY2VzIFEKKwlzcGFjZSAgY2hhbmdlCisJYWxsIHNwYSBjZXMKKwlFT0YKKwlnaXQgY29tbWl0IC1tICJ0ZXN0IHNwYWNlIGNoYW5nZSIgLWEgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUReICYmCisJdHIgLWQgUSA8PC1cRU9GID50ZXN0ICYmCisJYWx3YXlzIGNvYWxlc2NlCisJZW9sIHNwYWNlIGNvYWxlc2NlCisJc3BhY2UgY2hhbmdlIGNvYWxlc2NlCisJYWxsIHNwYWNlcyBjb2FsZXNjZQorCWVvbCBzcGFjZXMKKwlzcGFjZSBjaGFuZ2UKKwlhbGwgc3BhY2VzCisJRU9GCisJZ2l0IGNvbW1pdCAtbSAidGVzdCBvdGhlciBzcGFjZSBjaGFuZ2VzIiAtYSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCXRyIC1kIFEgPDwtXEVPRiA+dGVzdCAmJgorCWVvbCBzcGFjZXMgUQorCXNwYWNlICBjaGFuZ2UKKwlhbGwgc3BhIGNlcworCUVPRgorCWdpdCBjb21taXQgLW0gbWVyZ2VkIC1hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGNvbWJpbmVkIG91dHB1dCAobm8gaWdub3JlIHNwYWNlKScgJworCWdpdCBzaG93ID5hY3R1YWwudG1wICYmCisJc2VkIC1lICIxLC9eQEBAL2QiIDwgYWN0dWFsLnRtcCA+YWN0dWFsICYmCisJdHIgLWQgUSA8PC1cRU9GID5leHBlY3RlZCAmJgorCS0tYWx3YXlzIGNvYWxlc2NlCisJLSBlb2wgc3BhY2UgY29hbGVzY2UKKwktIHNwYWNlIGNoYW5nZSBjb2FsZXNjZQorCS0gYWxsIHNwYWNlcyBjb2FsZXNjZQorCS0gZW9sIHNwYWNlcworCS0gc3BhY2UgY2hhbmdlCisJLSBhbGwgc3BhY2VzCisJIC1lb2wgc3BhY2UgY29hbGVzY2UgUQorCSAtc3BhY2UgIGNoYW5nZSBjb2FsZXNjZQorCSAtYWxsIHNwYSBjZXMgY29hbGVzY2UKKwkrIGVvbCBzcGFjZXMgUQorCSsgc3BhY2UgIGNoYW5nZQorCSsgYWxsIHNwYSBjZXMKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGNvbWJpbmVkIG91dHB1dCAoaWdub3JlIHNwYWNlIGF0IGVvbCknICcKKwlnaXQgc2hvdyAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgPmFjdHVhbC50bXAgJiYKKwlzZWQgLWUgIjEsL15AQEAvZCIgPCBhY3R1YWwudG1wID5hY3R1YWwgJiYKKwl0ciAtZCBRIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJLS1hbHdheXMgY29hbGVzY2UKKwktLWVvbCBzcGFjZSBjb2FsZXNjZQorCS0gc3BhY2UgY2hhbmdlIGNvYWxlc2NlCisJLSBhbGwgc3BhY2VzIGNvYWxlc2NlCisJIC1zcGFjZSAgY2hhbmdlIGNvYWxlc2NlCisJIC1hbGwgc3BhIGNlcyBjb2FsZXNjZQorCSAgZW9sIHNwYWNlcyBRCisJLSBzcGFjZSBjaGFuZ2UKKwktIGFsbCBzcGFjZXMKKwkrIHNwYWNlICBjaGFuZ2UKKwkrIGFsbCBzcGEgY2VzCisJRU9GCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBjb21iaW5lZCBvdXRwdXQgKGlnbm9yZSBzcGFjZSBjaGFuZ2UpJyAnCisJZ2l0IHNob3cgLWIgPmFjdHVhbC50bXAgJiYKKwlzZWQgLWUgIjEsL15AQEAvZCIgPCBhY3R1YWwudG1wID5hY3R1YWwgJiYKKwl0ciAtZCBRIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJLS1hbHdheXMgY29hbGVzY2UKKwktLWVvbCBzcGFjZSBjb2FsZXNjZQorCS0tc3BhY2UgY2hhbmdlIGNvYWxlc2NlCisJLSBhbGwgc3BhY2VzIGNvYWxlc2NlCisJIC1hbGwgc3BhIGNlcyBjb2FsZXNjZQorCSAgZW9sIHNwYWNlcyBRCisJICBzcGFjZSAgY2hhbmdlCisJLSBhbGwgc3BhY2VzCisJKyBhbGwgc3BhIGNlcworCUVPRgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY29tYmluZWQgb3V0cHV0IChpZ25vcmUgYWxsIHNwYWNlcyknICcKKwlnaXQgc2hvdyAtdyA+YWN0dWFsLnRtcCAmJgorCXNlZCAtZSAiMSwvXkBAQC9kIiA8IGFjdHVhbC50bXAgPmFjdHVhbCAmJgorCXRyIC1kIFEgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwktLWFsd2F5cyBjb2FsZXNjZQorCS0tZW9sIHNwYWNlIGNvYWxlc2NlCisJLS1zcGFjZSBjaGFuZ2UgY29hbGVzY2UKKwktLWFsbCBzcGFjZXMgY29hbGVzY2UKKwkgIGVvbCBzcGFjZXMgUQorCSAgc3BhY2UgIGNoYW5nZQorCSAgYWxsIHNwYSBjZXMKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmUgZGlmZiBjb2FsZXNjZSBzaW1wbGUnICcKKwk+dGVzdCAmJgorCWdpdCBhZGQgdGVzdCAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCXRlc3Rfc2VxIDQgPnRlc3QgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGVtcHR5MSAmJgorCWdpdCBicmFuY2ggc2lkZTEgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwl0ZXN0X3NlcSA1ID50ZXN0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBlbXB0eTIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2lkZTEgJiYKKwk+dGVzdCAmJgorCWdpdCBjb21taXQgLWEgLW0gbWVyZ2UgJiYKKwlnaXQgc2hvdyA+YWN0dWFsLnRtcCAmJgorCXNlZCAtZSAiMSwvXkBAQC9kIiA8IGFjdHVhbC50bXAgPmFjdHVhbCAmJgorCXRyIC1kIFEgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwktLTEKKwktLTIKKwktLTMKKwktLTQKKwktIDUKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmUgZGlmZiBjb2FsZXNjZSB0cmlja3knICcKKwk+dGVzdCAmJgorCWdpdCBhZGQgdGVzdCAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAtLWFsbG93LWVtcHR5ICYmCisJY2F0IDw8LVxFT0YgPnRlc3QgJiYKKwkzCisJMQorCTIKKwkzCisJNAorCUVPRgorCWdpdCBjb21taXQgLWEgLW0gZW1wdHkxICYmCisJZ2l0IGJyYW5jaCAtZiBzaWRlMSAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWNhdCA8PC1cRU9GID50ZXN0ICYmCisJMQorCTMKKwk1CisJNAorCUVPRgorCWdpdCBjb21taXQgLWEgLW0gZW1wdHkyICYmCisJZ2l0IGJyYW5jaCAtZiBzaWRlMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzaWRlMSAmJgorCT50ZXN0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBtZXJnZSAmJgorCWdpdCBzaG93ID5hY3R1YWwudG1wICYmCisJc2VkIC1lICIxLC9eQEBAL2QiIDwgYWN0dWFsLnRtcCA+YWN0dWFsICYmCisJdHIgLWQgUSA8PC1cRU9GID5leHBlY3RlZCAmJgorCSAtMworCS0tMQorCSAtMgorCS0tMworCS0gNQorCS0tNAorCUVPRgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgY2hlY2tvdXQgLWYgc2lkZTEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2lkZTIgJiYKKwk+dGVzdCAmJgorCWdpdCBjb21taXQgLWEgLW0gbWVyZ2UgJiYKKwlnaXQgc2hvdyA+YWN0dWFsLnRtcCAmJgorCXNlZCAtZSAiMSwvXkBAQC9kIiA8IGFjdHVhbC50bXAgPmFjdHVhbCAmJgorCXRyIC1kIFEgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwktIDMKKwktLTEKKwktIDIKKwktLTMKKwkgLTUKKwktLTQKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2NvbWJpbmUgZGlmZiBjb2FsZXNjZSB0aHJlZSBwYXJlbnRzJyAnCisJPnRlc3QgJiYKKwlnaXQgYWRkIHRlc3QgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgLS1hbGxvdy1lbXB0eSAmJgorCWNhdCA8PC1cRU9GID50ZXN0ICYmCisJMworCTEKKwkyCisJMworCTQKKwlFT0YKKwlnaXQgY29tbWl0IC1hIC1tIGVtcHR5MSAmJgorCWdpdCBjaGVja291dCAtQiBzaWRlMSAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWNhdCA8PC1cRU9GID50ZXN0ICYmCisJMQorCTMKKwk3CisJNQorCTQKKwlFT0YKKwlnaXQgY29tbWl0IC1hIC1tIGVtcHR5MiAmJgorCWdpdCBicmFuY2ggLWYgc2lkZTIgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwljYXQgPDwtXEVPRiA+dGVzdCAmJgorCTMKKwkxCisJNgorCTUKKwk0CisJRU9GCisJZ2l0IGNvbW1pdCAtYSAtbSBlbXB0eTMgJiYKKwk+dGVzdCAmJgorCWdpdCBhZGQgdGVzdCAmJgorCVRSRUU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlDT01NSVQ9JChnaXQgY29tbWl0LXRyZWUgLXAgSEVBRCAtcCBzaWRlMSAtcCBzaWRlMiAtbSBtZXJnZSAkVFJFRSkgJiYKKwlnaXQgc2hvdyAkQ09NTUlUID5hY3R1YWwudG1wICYmCisJc2VkIC1lICIxLC9eQEBAL2QiIDwgYWN0dWFsLnRtcCA+YWN0dWFsICYmCisJdHIgLWQgUSA8PC1cRU9GID5leHBlY3RlZCAmJgorCS0tIDMKKwktLS0xCisJLSAgNgorCSAtIDIKKwkgLS0zCisJICAtNworCS0gLTUKKwktLS00CisJRU9GCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGFjdHVhbAorJworCisjIFRlc3QgZm9yIGEgYnVnIHJlcG9ydGVkIGF0CisjIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDEzMDUxNTE0MzUwOC5HTzI1NzQyQGxvZ2luLmRyc251Z2dsZXMuc3RkZXJyLm5sLworIyB3aGVyZSBhIGRlbGV0ZSBsaW5lcyB3ZXJlIG1pc3NpbmcgZnJvbSBjb21iaW5lZCBkaWZmIG91dHB1dCB3aGVuIHRoZXkKKyMgb2NjdXJyZWQgZXhhY3RseSBiZWZvcmUgdGhlIGNvbnRleHQgbGluZXMgb2YgYSBsYXRlciBjaGFuZ2UuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5lIGRpZmYgbWlzc2luZyBkZWxldGUgYnVnJyAnCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsIC0tYWxsb3ctZW1wdHkgJiYKKwljYXQgPDwtXEVPRiA+dGVzdCAmJgorCTEKKwkyCisJMworCTQKKwlFT0YKKwlnaXQgYWRkIHRlc3QgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNpZGUxICYmCisJZ2l0IGNoZWNrb3V0IC1CIHNpZGUxICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJY2F0IDw8LVxFT0YgPnRlc3QgJiYKKwkwCisJMQorCTIKKwkzCisJNG1vZGlmaWVkCisJRU9GCisJZ2l0IGFkZCB0ZXN0ICYmCisJZ2l0IGNvbW1pdCAtbSBzaWRlMiAmJgorCWdpdCBicmFuY2ggLWYgc2lkZTIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgc2lkZTEgJiYKKwljYXQgPDwtXEVPRiA+dGVzdCAmJgorCTEKKwkyCisJMworCTRtb2RpZmllZAorCUVPRgorCWdpdCBhZGQgdGVzdCAmJgorCWdpdCBjb21taXQgLWEgLW0gbWVyZ2UgJiYKKwlnaXQgZGlmZi10cmVlIC1jIC1wIEhFQUQgPmFjdHVhbC50bXAgJiYKKwlzZWQgLWUgIjEsL15AQEAvZCIgPCBhY3R1YWwudG1wID5hY3R1YWwgJiYKKwl0ciAtZCBRIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJLSAwCisJICAxCisJICAyCisJICAzCisJIC00CisJICs0bW9kaWZpZWQKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmUgZGlmZiBnZXRzIHRyZWUgc29ydGluZyByaWdodCcgJworCSMgY3JlYXRlIGEgZGlyZWN0b3J5IGFuZCBhIGZpbGUgdGhhdCBzb3J0IGRpZmZlcmVudGx5IGluIHRyZWVzCisJIyB2ZXJzdXMgYnl0ZS13aXNlIChpbXBsaWVkICIvIiBzb3J0cyBhZnRlciAiLiIpCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCW1rZGlyIGZvbyAmJgorCWVjaG8gYmFzZSA+Zm9vL29uZSAmJgorCWVjaG8gYmFzZSA+Zm9vL3R3byAmJgorCWVjaG8gYmFzZSA+Zm9vLmV4dCAmJgorCWdpdCBhZGQgZm9vIGZvby5leHQgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKworCSMgb25lIHNpZGUgbW9kaWZpZXMgYSBmaWxlIGluIHRoZSBkaXJlY3RvcnksIGFsb25nIHdpdGggdGhlIHJvb3QKKwkjIGZpbGUuLi4KKwllY2hvIG1hc3RlciA+Zm9vL29uZSAmJgorCWVjaG8gbWFzdGVyID5mb28uZXh0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBtYXN0ZXIgJiYKKworCSMgdGhlIG90aGVyIHNpZGUgbW9kaWZpZXMgdGhlIG90aGVyIGZpbGUgaW4gdGhlIGRpcmVjdG9yeQorCWdpdCBjaGVja291dCAtYiBvdGhlciBIRUFEXiAmJgorCWVjaG8gb3RoZXIgPmZvby90d28gJiYKKwlnaXQgY29tbWl0IC1hIC1tIG90aGVyICYmCisKKwkjIEFuZCBub3cgd2UgbWVyZ2UuIFRoZSBmaWxlcyBpbiB0aGUgc3ViZGlyZWN0b3J5IHdpbGwgcmVzb2x2ZSBjbGVhbmx5LAorCSMgbWVhbmluZyB0aGF0IGEgY29tYmluZWQgZGlmZiB3aWxsIG5vdCBmaW5kIHRoZW0gaW50ZXJlc3RpbmcuIEJ1dCBpdAorCSMgd2lsbCBmaW5kIHRoZSB0cmVlIGl0c2VsZiBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBoYWQgdG8gYmUgbWVyZ2VkLgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2Ugb3RoZXIgJiYKKworCXByaW50ZiAiTU1cdGZvb1xuIiA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYtdHJlZSAtYyAtLW5hbWUtc3RhdHVzIC10IEhFQUQgPmFjdHVhbC50bXAgJiYKKwlzZWQgMWQgPGFjdHVhbC50bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIC0tY29tYmluZWQtYWxsLXBhdGhzJyAnCisJZ2l0IGJyYW5jaCBzaWRlMWMgJiYKKwlnaXQgYnJhbmNoIHNpZGUyYyAmJgorCWdpdCBjaGVja291dCBzaWRlMWMgJiYKKwl0ZXN0X3NlcSAxIDEwID5maWxlbmFtZS1zaWRlMWMgJiYKKwlzaWRlMWNmPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGVuYW1lLXNpZGUxYykgJiYKKwlnaXQgYWRkIGZpbGVuYW1lLXNpZGUxYyAmJgorCWdpdCBjb21taXQgLW0gd2l0aCAmJgorCWdpdCBjaGVja291dCBzaWRlMmMgJiYKKwl0ZXN0X3NlcSAxIDkgPmZpbGVuYW1lLXNpZGUyYyAmJgorCWVjaG8gdGVuID4+ZmlsZW5hbWUtc2lkZTJjICYmCisJc2lkZTJjZj0kKGdpdCBoYXNoLW9iamVjdCBmaWxlbmFtZS1zaWRlMmMpICYmCisJZ2l0IGFkZCBmaWxlbmFtZS1zaWRlMmMgJiYKKwlnaXQgY29tbWl0IC1tIGlhbSAmJgorCWdpdCBjaGVja291dCAtYiBtZXJnZXJ5IHNpZGUxYyAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBzaWRlMmMgJiYKKwlnaXQgcm0gZmlsZW5hbWUtc2lkZTFjICYmCisJZWNobyBlbGV2ZW4gPj5maWxlbmFtZS1zaWRlMmMgJiYKKwlnaXQgbXYgZmlsZW5hbWUtc2lkZTJjIGZpbGVuYW1lLW1lcmdlZCAmJgorCW1lcmdlZGY9JChnaXQgaGFzaC1vYmplY3QgZmlsZW5hbWUtbWVyZ2VkKSAmJgorCWdpdCBhZGQgZmlsZW5hbWUtbWVyZ2VkICYmCisJZ2l0IGNvbW1pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbWJpbmVkLWFsbC1wYXRocyBhbmQgLS1yYXcnICcKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwk6OjEwMDY0NCAxMDA2NDQgMTAwNjQ0ICRzaWRlMWNmICRzaWRlMmNmICRtZXJnZWRmIFJSCWZpbGVuYW1lLXNpZGUxYwlmaWxlbmFtZS1zaWRlMmMJZmlsZW5hbWUtbWVyZ2VkCisJRU9GCisJZ2l0IGRpZmYtdHJlZSAtYyAtTSAtLXJhdyAtLWNvbWJpbmVkLWFsbC1wYXRocyBIRUFEID5hY3R1YWwudG1wICYmCisJc2VkIDFkIDxhY3R1YWwudG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29tYmluZWQtYWxsLXBhdGhzIGFuZCAtLWNjJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCS0tLSBhL2ZpbGVuYW1lLXNpZGUxYworCS0tLSBhL2ZpbGVuYW1lLXNpZGUyYworCSsrKyBiL2ZpbGVuYW1lLW1lcmdlZAorCUVPRgorCWdpdCBkaWZmLXRyZWUgLS1jYyAtTSAtLWNvbWJpbmVkLWFsbC1wYXRocyBIRUFEID5hY3R1YWwudG1wICYmCisJZ3JlcCBeWy0rXVstK11bLStdIDxhY3R1YWwudG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRlVOTllOQU1FUyAnc2V0dXAgZm9yIC0tY29tYmluZWQtYWxsLXBhdGhzIHdpdGggZnVubnkgbmFtZXMnICcKKwlnaXQgYnJhbmNoIHNpZGUxZCAmJgorCWdpdCBicmFuY2ggc2lkZTJkICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUxZCAmJgorCXRlc3Rfc2VxIDEgMTAgPiIkKHByaW50ZiAiZmlsZVx0d2l0aFx0dGFicyIpIiAmJgorCWdpdCBhZGQgZmlsZSogJiYKKwlzaWRlMWRmPSQoZ2l0IGhhc2gtb2JqZWN0ICp0YWJzKSAmJgorCWdpdCBjb21taXQgLW0gd2l0aCAmJgorCWdpdCBjaGVja291dCBzaWRlMmQgJiYKKwl0ZXN0X3NlcSAxIDkgPiIkKHByaW50ZiAiaVx0YW1cdHRhYmJlZCIpIiAmJgorCWVjaG8gdGVuID4+IiQocHJpbnRmICJpXHRhbVx0dGFiYmVkIikiICYmCisJZ2l0IGFkZCAqdGFiYmVkICYmCisJc2lkZTJkZj0kKGdpdCBoYXNoLW9iamVjdCAqdGFiYmVkKSAmJgorCWdpdCBjb21taXQgLW0gaWFtICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZ1bm55LW5hbWVzLW1lcmdlcnkgc2lkZTFkICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IHNpZGUyZCAmJgorCWdpdCBybSAqdGFicyAmJgorCWVjaG8gZWxldmVuID4+IiQocHJpbnRmICJpXHRhbVx0dGFiYmVkIikiICYmCisJZ2l0IG12ICIkKHByaW50ZiAiaVx0YW1cdHRhYmJlZCIpIiAiJChwcmludGYgImZpY2tsZVx0bmFtaW5nIikiICYmCisJZ2l0IGFkZCBmaWNrbGUqICYmCisJaGVhZGY9JChnaXQgaGFzaC1vYmplY3QgZmlja2xlKikgJiYKKwlnaXQgY29tbWl0ICYmCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGVU5OWU5BTUVTICctLWNvbWJpbmVkLWFsbC1wYXRocyBhbmQgLS1yYXcgYW5kIGZ1bm55IG5hbWVzJyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCAkc2lkZTFkZiAkc2lkZTJkZiAkaGVhZGYgUlIJImZpbGVcdHdpdGhcdHRhYnMiCSJpXHRhbVx0dGFiYmVkIgkiZmlja2xlXHRuYW1pbmciCisJRU9GCisJZ2l0IGRpZmYtdHJlZSAtYyAtTSAtLXJhdyAtLWNvbWJpbmVkLWFsbC1wYXRocyBIRUFEID5hY3R1YWwudG1wICYmCisJc2VkIDFkIDxhY3R1YWwudG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRlVOTllOQU1FUyAnLS1jb21iaW5lZC1hbGwtcGF0aHMgYW5kIC0tcmF3IC1hbmQgLXogYW5kIGZ1bm55IG5hbWVzJyAnCisJcHJpbnRmICIkaGVhZFwwOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCAkc2lkZTFkZiAkc2lkZTJkZiAkaGVhZGYgUlJcMGZpbGVcdHdpdGhcdHRhYnNcMGlcdGFtXHR0YWJiZWRcMGZpY2tsZVx0bmFtaW5nXDAiID5leHBlY3QgJiYKKwlnaXQgZGlmZi10cmVlIC1jIC1NIC0tcmF3IC0tY29tYmluZWQtYWxsLXBhdGhzIC16IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGVU5OWU5BTUVTICctLWNvbWJpbmVkLWFsbC1wYXRocyBhbmQgLS1jYyBhbmQgZnVubnkgbmFtZXMnICcKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJLS0tICJhL2ZpbGVcdHdpdGhcdHRhYnMiCisJLS0tICJhL2lcdGFtXHR0YWJiZWQiCisJKysrICJiL2ZpY2tsZVx0bmFtaW5nIgorCUVPRgorCWdpdCBkaWZmLXRyZWUgLS1jYyAtTSAtLWNvbWJpbmVkLWFsbC1wYXRocyBIRUFEID5hY3R1YWwudG1wICYmCisJZ3JlcCBeWy0rXVstK11bLStdIDxhY3R1YWwudG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAzOS1kaWZmLWFzc3VtZS11bmNoYW5nZWQuc2ggYi90L3Q0MDM5LWRpZmYtYXNzdW1lLXVuY2hhbmdlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZWIwMzE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzOS1kaWZmLWFzc3VtZS11bmNoYW5nZWQuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgd2l0aCBhc3N1bWUtdW5jaGFuZ2VkIGVudHJpZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIGV4dGVybmFsIGRpZmYgaGFzIGJlZW4gdGVzdGVkIGluIHQ0MDIwLWRpZmYtZXh0ZXJuYWwuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIHplcm8gPiB6ZXJvICYmCisJZ2l0IGFkZCB6ZXJvICYmCisJZ2l0IGNvbW1pdCAtbSB6ZXJvICYmCisJZWNobyBvbmUgPiBvbmUgJiYKKwllY2hvIHR3byA+IHR3byAmJgorCWJsb2I9JChnaXQgaGFzaC1vYmplY3Qgb25lKSAmJgorCWdpdCBhZGQgb25lIHR3byAmJgorCWdpdCBjb21taXQgLW0gb25ldHdvICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFzc3VtZS11bmNoYW5nZWQgb25lICYmCisJZWNobyBib3JrZWQgPj4gb25lICYmCisJdGVzdCAiJChnaXQgbHMtZmlsZXMgLXYgb25lKSIgPSAiaCBvbmUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggZG9lcyBub3QgZXhhbWluZSBhc3N1bWUtdW5jaGFuZ2VkIGVudHJpZXMnICcKKwlnaXQgZGlmZi1pbmRleCBIRUFEXiAtLSBvbmUgfCBncmVwIC1xICRibG9iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgZG9lcyBub3QgZXhhbWluZSBhc3N1bWUtdW5jaGFuZ2VkIGVudHJpZXMnICcKKwlybSBvbmUgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmLWZpbGVzIC0tIG9uZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdmaW5kLWNvcGllcy1oYXJkZXIgaXMgbm90IGNvbmZ1c2VkIGJ5IG1vZGUgYml0cycgJworCWVjaG8gY29udGVudCA+ZXhlYyAmJgorCWNobW9kICt4IGV4ZWMgJiYKKwlnaXQgYWRkIGV4ZWMgJiYKKwlnaXQgY29tbWl0IC1tIGV4ZWMgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYXNzdW1lLXVuY2hhbmdlZCBleGVjICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1maW5kLWNvcGllcy1oYXJkZXIgLS0gZXhlYyA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNDAtd2hpdGVzcGFjZS1zdGF0dXMuc2ggYi90L3Q0MDQwLXdoaXRlc3BhY2Utc3RhdHVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNjNzI4YTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQwLXdoaXRlc3BhY2Utc3RhdHVzLnNoCkBAIC0wLDAgKzEsNzUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIC0tZXhpdC1jb2RlIHdpdGggd2hpdGVzcGFjZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBhIGIgJiYKKwllY2hvID5jICYmCisJZWNobyA+YS9kICYmCisJZWNobyA+Yi9lICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyAiICIgPmEvZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gc2Vjb25kICYmCisJZWNobyAiICAiID5hL2QgJiYKKwllY2hvICIgIiA+Yi9lICYmCisJZ2l0IGFkZCBhL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIC0tZXhpdC1jb2RlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRF4gSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLXRyZWUgLS1leGl0LWNvZGUgSEVBRF4gSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLWIgLS1leGl0LWNvZGUnICcKKwlnaXQgZGlmZiAtYiAtLWV4aXQtY29kZSBIRUFEXiBIRUFEICYmCisJZ2l0IGRpZmYtdHJlZSAtYiAtcCAtLWV4aXQtY29kZSBIRUFEXiBIRUFEICYmCisJZ2l0IGRpZmYtdHJlZSAtYiAtLWV4aXQtY29kZSBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggLS1jYWNoZWQgLS1leGl0LWNvZGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNhY2hlZCAtLWV4aXQtY29kZSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IC1iIC1wIC0tY2FjaGVkIC0tZXhpdC1jb2RlJyAnCisJZ2l0IGRpZmYgLWIgLS1jYWNoZWQgLS1leGl0LWNvZGUgSEVBRCAmJgorCWdpdCBkaWZmLWluZGV4IC1iIC1wIC0tY2FjaGVkIC0tZXhpdC1jb2RlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCAtLWV4aXQtY29kZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggLWIgLXAgLS1leGl0LWNvZGUnICcKKwlnaXQgZGlmZiAtYiAtLWV4aXQtY29kZSBIRUFEICYmCisJZ2l0IGRpZmYtaW5kZXggLWIgLXAgLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIC0tZXhpdC1jb2RlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIC1iIC1wIC0tZXhpdC1jb2RlJyAnCisJZ2l0IGRpZmYgLWIgLS1leGl0LWNvZGUgJiYKKwlnaXQgZGlmZi1maWxlcyAtYiAtcCAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIC0tZGlmZi1maWx0ZXIgLS1xdWlldCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSBhL2QgJiYKKwllY2hvIHggPj5iL2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1maWxlcyAtLWRpZmYtZmlsdGVyPU0gLS1xdWlldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLS1kaWZmLWZpbHRlciAtLXF1aWV0JyAnCisJZ2l0IGNvbW1pdCAtYSAtbSAid29ya3RyZWUgc3RhdGUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtdHJlZSAtLWRpZmYtZmlsdGVyPU0gLS1xdWlldCBIRUFEXiBIRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA0MS1kaWZmLXN1Ym1vZHVsZS1vcHRpb24uc2ggYi90L3Q0MDQxLWRpZmYtc3VibW9kdWxlLW9wdGlvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mODUyMTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDA0MS1kaWZmLXN1Ym1vZHVsZS1vcHRpb24uc2gKQEAgLTAsMCArMSw1NDggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgSmVucyBMZWhtYW5uLCBiYXNlZCBvbiB0NzQwMSBieSBQaW5nIFlpbgorIyBDb3B5cmlnaHQgKGMpIDIwMTEgQWxleGV5IFNodW1raW4gKCsgbm9uLVVURi04IGNvbW1pdCBlbmNvZGluZyB0ZXN0cykKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nU3VwcG9ydCBmb3IgdmVyYm9zZSBzdWJtb2R1bGUgZGlmZmVyZW5jZXMgaW4gZ2l0IGRpZmYKKworVGhpcyB0ZXN0IHRyaWVzIHRvIHZlcmlmeSB0aGUgc2FuaXR5IG9mIHRoZSAtLXN1Ym1vZHVsZSBvcHRpb24gb2YgZ2l0IGRpZmYuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRlc3RlZCBub24tVVRGLTggZW5jb2RpbmcKK3Rlc3RfZW5jb2Rpbmc9IklTTzg4NTktMSIKKworIyBTdHJpbmcgImFkZGVkIiBpbiBHZXJtYW4gKHRyYW5zbGF0ZWQgd2l0aCBHb29nbGUgVHJhbnNsYXRlKSwgZW5jb2RlZCBpbiBVVEYtOCwKKyMgdXNlZCBpbiBzYW1wbGUgY29tbWl0IGxvZyBtZXNzYWdlcyBpbiBhZGRfZmlsZSgpIGZ1bmN0aW9uIGJlbG93LgorYWRkZWQ9JChwcmludGYgImhpbnp1Z2VmXDMwM1wyNzRndCIpCithZGRfZmlsZSAoKSB7CisJKAorCQljZCAiJDEiICYmCisJCXNoaWZ0ICYmCisJCWZvciBuYW1lCisJCWRvCisJCQllY2hvICIkbmFtZSIgPiIkbmFtZSIgJiYKKwkJCWdpdCBhZGQgIiRuYW1lIiAmJgorCQkJdGVzdF90aWNrICYmCisJCQkjICJnaXQgY29tbWl0IC1tIiB3b3VsZCBicmVhayBNaW5HVywgYXMgV2luZG93cyByZWZ1c2UgdG8gcGFzcworCQkJIyAkdGVzdF9lbmNvZGluZyBlbmNvZGVkIHBhcmFtZXRlciB0byBnaXQuCisJCQllY2hvICJBZGQgJG5hbWUgKCRhZGRlZCAkbmFtZSkiIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgfAorCQkJZ2l0IC1jICJpMThuLmNvbW1pdEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIiBjb21taXQgLUYgLQorCQlkb25lID4vZGV2L251bGwgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXNob3J0IC0tdmVyaWZ5IEhFQUQKKwkpCit9Citjb21taXRfZmlsZSAoKSB7CisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAiJEAiIC1tICJDb21taXQgJCoiID4vZGV2L251bGwKK30KKwordGVzdF9jcmVhdGVfcmVwbyBzbTEgJiYKK2FkZF9maWxlIC4gZm9vID4vZGV2L251bGwKKworaGVhZDE9JChhZGRfZmlsZSBzbTEgZm9vMSBmb28yKQorZnVsbGhlYWQxPSQoY2Qgc20xOyBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGVkIHN1Ym1vZHVsZScgJworCWdpdCBhZGQgc20xICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAwMDAwMDAwLi4uJGhlYWQxIChuZXcgc3VibW9kdWxlKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRlZCBzdWJtb2R1bGUsIHNldCBkaWZmLnN1Ym1vZHVsZScgJworCWdpdCBjb25maWcgZGlmZi5zdWJtb2R1bGUgbG9nICYmCisJZ2l0IGFkZCBzbTEgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIDAwMDAwMDAuLi4kaGVhZDEgKG5ldyBzdWJtb2R1bGUpCisJRU9GCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYuc3VibW9kdWxlICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3VibW9kdWxlPXNob3J0IG92ZXJyaWRlcyBkaWZmLnN1Ym1vZHVsZScgJworCXRlc3RfY29uZmlnIGRpZmYuc3VibW9kdWxlIGxvZyAmJgorCWdpdCBhZGQgc20xICYmCisJZ2l0IGRpZmYgLS1zdWJtb2R1bGU9c2hvcnQgLS1jYWNoZWQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL3NtMSBiL3NtMQorCW5ldyBmaWxlIG1vZGUgMTYwMDAwCisJaW5kZXggMDAwMDAwMC4uJGhlYWQxCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMQorCUBAIC0wLDAgKzEgQEAKKwkrU3VicHJvamVjdCBjb21taXQgJGZ1bGxoZWFkMQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLnN1Ym1vZHVsZSBkb2VzIG5vdCBhZmZlY3QgcGx1bWJpbmcnICcKKwl0ZXN0X2NvbmZpZyBkaWZmLnN1Ym1vZHVsZSBsb2cgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9zbTEgYi9zbTEKKwluZXcgZmlsZSBtb2RlIDE2MDAwMAorCWluZGV4IDAwMDAwMDAuLiRoZWFkMQorCS0tLSAvZGV2L251bGwKKwkrKysgYi9zbTEKKwlAQCAtMCwwICsxIEBACisJK1N1YnByb2plY3QgY29tbWl0ICRmdWxsaGVhZDEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY29tbWl0X2ZpbGUgc20xICYmCitoZWFkMj0kKGFkZF9maWxlIHNtMSBmb28zKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoZm9yd2FyZCknICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xICRoZWFkMS4uJGhlYWQyOgorCSAgPiBBZGQgZm9vMyAoJGFkZGVkIGZvbzMpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShmb3J3YXJkKScgJworCWdpdCBkaWZmIC0tc3VibW9kdWxlPWxvZyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xICRoZWFkMS4uJGhlYWQyOgorCSAgPiBBZGQgZm9vMyAoJGFkZGVkIGZvbzMpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShmb3J3YXJkKSAtLXN1Ym1vZHVsZScgJworCWdpdCBkaWZmIC0tc3VibW9kdWxlID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQxLi4kaGVhZDI6CisJICA+IEFkZCBmb28zICgkYWRkZWQgZm9vMykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworZnVsbGhlYWQyPSQoY2Qgc20xOyBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoZm9yd2FyZCkgLS1zdWJtb2R1bGU9c2hvcnQnICcKKwlnaXQgZGlmZiAtLXN1Ym1vZHVsZT1zaG9ydCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlkaWZmIC0tZ2l0IGEvc20xIGIvc20xCisJaW5kZXggJGhlYWQxLi4kaGVhZDIgMTYwMDAwCisJLS0tIGEvc20xCisJKysrIGIvc20xCisJQEAgLTEgKzEgQEAKKwktU3VicHJvamVjdCBjb21taXQgJGZ1bGxoZWFkMQorCStTdWJwcm9qZWN0IGNvbW1pdCAkZnVsbGhlYWQyCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NvbW1pdF9maWxlIHNtMSAmJgoraGVhZDM9JCgKKwljZCBzbTEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MiA+L2Rldi9udWxsICYmCisJZ2l0IHJldi1wYXJzZSAtLXNob3J0IC0tdmVyaWZ5IEhFQUQKKykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGJhY2t3YXJkKScgJworCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQyLi4kaGVhZDMgKHJld2luZCk6CisJICA8IEFkZCBmb28zICgkYWRkZWQgZm9vMykKKwkgIDwgQWRkIGZvbzIgKCRhZGRlZCBmb28yKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitoZWFkND0kKGFkZF9maWxlIHNtMSBmb280IGZvbzUpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoYmFja3dhcmQgYW5kIGZvcndhcmQpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDIuLi4kaGVhZDQ6CisJICA+IEFkZCBmb281ICgkYWRkZWQgZm9vNSkKKwkgID4gQWRkIGZvbzQgKCRhZGRlZCBmb280KQorCSAgPCBBZGQgZm9vMyAoJGFkZGVkIGZvbzMpCisJICA8IEFkZCBmb28yICgkYWRkZWQgZm9vMikKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY29tbWl0X2ZpbGUgc20xICYmCittdiBzbTEgc20xLWJhayAmJgorZWNobyBzbTEgPnNtMSAmJgoraGVhZDU9JChnaXQgaGFzaC1vYmplY3Qgc20xIHwgY3V0IC1jMS03KSAmJgorZ2l0IGFkZCBzbTEgJiYKK3JtIC1mIHNtMSAmJgorbXYgc20xLWJhayBzbTEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKHN1Ym1vZHVsZS0+YmxvYiksIC0tY2FjaGVkJyAnCisJZ2l0IGRpZmYgLS1zdWJtb2R1bGU9bG9nIC0tY2FjaGVkID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ0Li4uMDAwMDAwMCAoc3VibW9kdWxlIGRlbGV0ZWQpCisJZGlmZiAtLWdpdCBhL3NtMSBiL3NtMQorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uJGhlYWQ1CisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMQorCUBAIC0wLDAgKzEgQEAKKwkrc20xCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZShzdWJtb2R1bGUtPmJsb2IpJyAnCisJZ2l0IGRpZmYgLS1zdWJtb2R1bGU9bG9nID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9zbTEgYi9zbTEKKwlkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAkaGVhZDUuLjAwMDAwMDAKKwktLS0gYS9zbTEKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS1zbTEKKwlTdWJtb2R1bGUgc20xIDAwMDAwMDAuLi4kaGVhZDQgKG5ldyBzdWJtb2R1bGUpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3JtIC1yZiBzbTEgJiYKK2dpdCBjaGVja291dC1pbmRleCBzbTEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZShzdWJtb2R1bGUtPmJsb2IpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDQuLi4wMDAwMDAwIChzdWJtb2R1bGUgZGVsZXRlZCkKKwlkaWZmIC0tZ2l0IGEvc20xIGIvc20xCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi4kaGVhZDUKKwktLS0gL2Rldi9udWxsCisJKysrIGIvc20xCisJQEAgLTAsMCArMSBAQAorCStzbTEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworcm0gLWYgc20xICYmCit0ZXN0X2NyZWF0ZV9yZXBvIHNtMSAmJgoraGVhZDY9JChhZGRfZmlsZSBzbTEgZm9vNiBmb283KQorZnVsbGhlYWQ2PSQoY2Qgc20xOyBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25leGlzdGVudCBjb21taXQnICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xICRoZWFkNC4uLiRoZWFkNiAoY29tbWl0cyBub3QgcHJlc2VudCkKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY29tbWl0X2ZpbGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZShibG9iLT5zdWJtb2R1bGUpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL3NtMSBiL3NtMQorCWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4ICRoZWFkNS4uMDAwMDAwMAorCS0tLSBhL3NtMQorCSsrKyAvZGV2L251bGwKKwlAQCAtMSArMCwwIEBACisJLXNtMQorCVN1Ym1vZHVsZSBzbTEgMDAwMDAwMC4uLiRoZWFkNiAobmV3IHN1Ym1vZHVsZSkKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY29tbWl0X2ZpbGUgc20xICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaXMgdXAgdG8gZGF0ZScgJworCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCcgJworCWVjaG8gbmV3ID4gc20xL25ldy1maWxlICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnQgKHVudHJhY2tlZCBpZ25vcmVkKScgJworCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCAoZGlydHkgaWdub3JlZCknICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCAoYWxsIGlnbm9yZWQpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz1hbGwgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZpZWQgY29udGVudCcgJworCWVjaG8gbmV3ID4gc20xL2ZvbzYgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50CisJU3VibW9kdWxlIHNtMSBjb250YWlucyBtb2RpZmllZCBjb250ZW50CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQgKHVudHJhY2tlZCBpZ25vcmVkKScgJworCWVjaG8gbmV3ID4gc20xL2ZvbzYgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPXVudHJhY2tlZCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIGNvbnRhaW5zIG1vZGlmaWVkIGNvbnRlbnQKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZpZWQgY29udGVudCAoZGlydHkgaWdub3JlZCknICcKKwllY2hvIG5ldyA+IHNtMS9mb282ICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50IChhbGwgaWdub3JlZCknICcKKwllY2hvIG5ldyA+IHNtMS9mb282ICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcyAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgbW9kaWZpZWQgY29udGVudCcgJworCXJtIC1mIHNtMS9uZXctZmlsZSAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgY29udGFpbnMgbW9kaWZpZWQgY29udGVudAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisoY2Qgc20xOyBnaXQgY29tbWl0IC1tY2hhbmdlIGZvbzYgPi9kZXYvbnVsbCkgJiYKK2hlYWQ4PSQoY2Qgc20xOyBnaXQgcmV2LXBhcnNlIC0tc2hvcnQgLS12ZXJpZnkgSEVBRCkgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpcyBtb2RpZmllZCcgJworCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4kaGVhZDg6CisJICA+IGNoYW5nZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnQnICcKKwllY2hvIG5ldyA+IHNtMS9uZXctZmlsZSAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnQKKwlTdWJtb2R1bGUgc20xICRoZWFkNi4uJGhlYWQ4OgorCSAgPiBjaGFuZ2UKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50ICh1bnRyYWNrZWQgaWdub3JlZCknICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPXVudHJhY2tlZCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xICRoZWFkNi4uJGhlYWQ4OgorCSAgPiBjaGFuZ2UKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50IChkaXJ0eSBpZ25vcmVkKScgJworCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDYuLiRoZWFkODoKKwkgID4gY2hhbmdlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCAoYWxsIGlnbm9yZWQpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz1hbGwgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZpZWQgY29udGVudCcgJworCWVjaG8gbW9kaWZpY2F0aW9uID4+IHNtMS9mb282ICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudAorCVN1Ym1vZHVsZSBzbTEgY29udGFpbnMgbW9kaWZpZWQgY29udGVudAorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4kaGVhZDg6CisJICA+IGNoYW5nZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50ICh1bnRyYWNrZWQgaWdub3JlZCknICcKKwllY2hvIG1vZGlmaWNhdGlvbiA+PiBzbTEvZm9vNiAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgY29udGFpbnMgbW9kaWZpZWQgY29udGVudAorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4kaGVhZDg6CisJICA+IGNoYW5nZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50IChkaXJ0eSBpZ25vcmVkKScgJworCWVjaG8gbW9kaWZpY2F0aW9uID4+IHNtMS9mb282ICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xICRoZWFkNi4uJGhlYWQ4OgorCSAgPiBjaGFuZ2UKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZpZWQgY29udGVudCAoYWxsIGlnbm9yZWQpJyAnCisJZWNobyBtb2RpZmljYXRpb24gPj4gc20xL2ZvbzYgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyBtb2RpZmllZCBjb250ZW50JyAnCisJcm0gLWYgc20xL25ldy1maWxlICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSBjb250YWlucyBtb2RpZmllZCBjb250ZW50CisJU3VibW9kdWxlIHNtMSAkaGVhZDYuLiRoZWFkODoKKwkgID4gY2hhbmdlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3JtIC1yZiBzbTEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZWQgc3VibW9kdWxlJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDYuLi4wMDAwMDAwIChzdWJtb2R1bGUgZGVsZXRlZCkKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHNlY29uZCBzdWJtb2R1bGUnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNtMiAmJgorCWhlYWQ3PSQoYWRkX2ZpbGUgc20yIGZvbzggZm9vOSkgJiYKKwlnaXQgYWRkIHNtMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBzdWJtb2R1bGVzJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDYuLi4wMDAwMDAwIChzdWJtb2R1bGUgZGVsZXRlZCkKKwlTdWJtb2R1bGUgc20yIDAwMDAwMDAuLi4kaGVhZDcgKG5ldyBzdWJtb2R1bGUpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGggZmlsdGVyJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgc20yID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTIgMDAwMDAwMC4uLiRoZWFkNyAobmV3IHN1Ym1vZHVsZSkKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY29tbWl0X2ZpbGUgc20yCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXZlbiBjb21taXQnICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRF4gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDYuLi4wMDAwMDAwIChzdWJtb2R1bGUgZGVsZXRlZCkKKwlTdWJtb2R1bGUgc20yIDAwMDAwMDAuLi4kaGVhZDcgKG5ldyBzdWJtb2R1bGUpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmVuIGNvbW1pdCAtLXN1Ym1vZHVsZScgJworCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlIEhFQUReID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4uMDAwMDAwMCAoc3VibW9kdWxlIGRlbGV0ZWQpCisJU3VibW9kdWxlIHNtMiAwMDAwMDAwLi4uJGhlYWQ3IChuZXcgc3VibW9kdWxlKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitmdWxsaGVhZDc9JChjZCBzbTI7IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l2ZW4gY29tbWl0IC0tc3VibW9kdWxlPXNob3J0JyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9c2hvcnQgSEVBRF4gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL3NtMSBiL3NtMQorCWRlbGV0ZWQgZmlsZSBtb2RlIDE2MDAwMAorCWluZGV4ICRoZWFkNi4uMDAwMDAwMAorCS0tLSBhL3NtMQorCSsrKyAvZGV2L251bGwKKwlAQCAtMSArMCwwIEBACisJLVN1YnByb2plY3QgY29tbWl0ICRmdWxsaGVhZDYKKwlkaWZmIC0tZ2l0IGEvc20yIGIvc20yCisJbmV3IGZpbGUgbW9kZSAxNjAwMDAKKwlpbmRleCAwMDAwMDAwLi4kaGVhZDcKKwktLS0gL2Rldi9udWxsCisJKysrIGIvc20yCisJQEAgLTAsMCArMSBAQAorCStTdWJwcm9qZWN0IGNvbW1pdCAkZnVsbGhlYWQ3CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC5naXQgZmlsZSBmb3Igc20yJyAnCisJKGNkIHNtMiAmJgorCSBSRUFMPSIkKHB3ZCkvLi4vLnJlYWwiICYmCisJIG12IC5naXQgIiRSRUFMIiAmJgorCSBlY2hvICJnaXRkaXI6ICRSRUFMIiA+LmdpdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLXN1Ym1vZHVsZSB3aXRoIC5naXQgZmlsZScgJworCWdpdCBkaWZmIC0tc3VibW9kdWxlIEhFQUReID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4uMDAwMDAwMCAoc3VibW9kdWxlIGRlbGV0ZWQpCisJU3VibW9kdWxlIHNtMiAwMDAwMDAwLi4uJGhlYWQ3IChuZXcgc3VibW9kdWxlKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tc3VibW9kdWxlIHdpdGggb2JqZWN0cyByZWZlcmVuY2VkIGJ5IGFsdGVybmF0ZXMnICcKKwlta2RpciBzdWJfYWx0ICYmCisJKGNkIHN1Yl9hbHQgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBhID5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tIGEKKwkpICYmCisJbWtkaXIgc3VwZXIgJiYKKwkoY2Qgc3VwZXIgJiYKKwkJZ2l0IGNsb25lIC1zIC4uL3N1Yl9hbHQgc3ViICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBhZGQgc3ViICYmCisJCWdpdCBjb21taXQgLW0gInN1YiBhIgorCSkgJiYKKwkoY2Qgc3ViX2FsdCAmJgorCQlzaGExX2JlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCQllY2hvIGIgPmIgJiYKKwkJZ2l0IGFkZCBiICYmCisJCWdpdCBjb21taXQgLW0gYiAmJgorCQlzaGExX2FmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJCXsKKwkJCWVjaG8gIlN1Ym1vZHVsZSBzdWIgJHNoYTFfYmVmb3JlLi4kc2hhMV9hZnRlcjoiICYmCisJCQllY2hvICIgID4gYiIKKwkJfSA+Li4vZXhwZWN0ZWQKKwkpICYmCisJKGNkIHN1cGVyICYmCisJCShjZCBzdWIgJiYKKwkJCWdpdCBmZXRjaCAmJgorCQkJZ2l0IGNoZWNrb3V0IG9yaWdpbi9tYXN0ZXIKKwkJKSAmJgorCQlnaXQgZGlmZiAtLXN1Ym1vZHVsZSA+IC4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDQyLWRpZmYtdGV4dGNvbnYtY2FjaGluZy5zaCBiL3QvdDQwNDItZGlmZi10ZXh0Y29udi1jYWNoaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmMzNhZWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQyLWRpZmYtdGV4dGNvbnYtY2FjaGluZy5zaApAQCAtMCwwICsxLDEyMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgdGV4dGNvbnYgY2FjaGluZycKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmhlbHBlciA8PCdFT0YnCisjIS9iaW4vc2gKK3NlZCAncy9eL2NvbnZlcnRlZDogLycgIiRAIiA+aGVscGVyLm91dAorY2F0IGhlbHBlci5vdXQKK0VPRgorY2htb2QgK3ggaGVscGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBmb28gY29udGVudCAxID5mb28uYmluICYmCisJZWNobyBiYXIgY29udGVudCAxID5iYXIuYmluICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwlmb28xPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6Zm9vLmJpbikgJiYKKwliYXIxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6YmFyLmJpbikgJiYKKwllY2hvIGZvbyBjb250ZW50IDIgPmZvby5iaW4gJiYKKwllY2hvIGJhciBjb250ZW50IDIgPmJhci5iaW4gJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWZvbzI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDpmb28uYmluKSAmJgorCWJhcjI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDpiYXIuYmluKSAmJgorCWVjaG8gIiouYmluIGRpZmY9bWFnaWMiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgZGlmZi5tYWdpYy50ZXh0Y29udiAuL2hlbHBlciAmJgorCWdpdCBjb25maWcgZGlmZi5tYWdpYy5jYWNoZXRleHRjb252IHRydWUKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2RpZmYgLS1naXQgYS9iYXIuYmluIGIvYmFyLmJpbgoraW5kZXggJGJhcjEuLiRiYXIyIDEwMDY0NAorLS0tIGEvYmFyLmJpbgorKysrIGIvYmFyLmJpbgorQEAgLTEgKzEgQEAKKy1jb252ZXJ0ZWQ6IGJhciBjb250ZW50IDEKKytjb252ZXJ0ZWQ6IGJhciBjb250ZW50IDIKK2RpZmYgLS1naXQgYS9mb28uYmluIGIvZm9vLmJpbgoraW5kZXggJGZvbzEuLiRmb28yIDEwMDY0NAorLS0tIGEvZm9vLmJpbgorKysrIGIvZm9vLmJpbgorQEAgLTEgKzEgQEAKKy1jb252ZXJ0ZWQ6IGZvbyBjb250ZW50IDEKKytjb252ZXJ0ZWQ6IGZvbyBjb250ZW50IDIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXJzdCB0ZXh0Y29udiB3b3JrcycgJworCWdpdCBkaWZmIEhFQUReIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FjaGVkIHRleHRjb252IHByb2R1Y2VzIHNhbWUgb3V0cHV0JyAnCisJZ2l0IGRpZmYgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYWNoZWQgdGV4dGNvbnYgZG9lcyBub3QgcnVuIGhlbHBlcicgJworCXJtIC1mIGhlbHBlci5vdXQgJiYKKwlnaXQgZGlmZiBIRUFEXiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJISB0ZXN0IC1yIGhlbHBlci5vdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2RpZmYgLS1naXQgYS9iYXIuYmluIGIvYmFyLmJpbgoraW5kZXggJGJhcjEuLiRiYXIyIDEwMDY0NAorLS0tIGEvYmFyLmJpbgorKysrIGIvYmFyLmJpbgorQEAgLTEsMiArMSwyIEBACisgY29udmVydGVkOiBvdGhlcgorLWNvbnZlcnRlZDogYmFyIGNvbnRlbnQgMQorK2NvbnZlcnRlZDogYmFyIGNvbnRlbnQgMgorZGlmZiAtLWdpdCBhL2Zvby5iaW4gYi9mb28uYmluCitpbmRleCAkZm9vMS4uJGZvbzIgMTAwNjQ0CistLS0gYS9mb28uYmluCisrKysgYi9mb28uYmluCitAQCAtMSwyICsxLDIgQEAKKyBjb252ZXJ0ZWQ6IG90aGVyCistY29udmVydGVkOiBmb28gY29udGVudCAxCisrY29udmVydGVkOiBmb28gY29udGVudCAyCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5naW5nIHRleHRjb252IGludmFsaWRhdGVzIGNhY2hlJyAnCisJZWNobyBvdGhlciA+b3RoZXIgJiYKKwlnaXQgY29uZmlnIGRpZmYubWFnaWMudGV4dGNvbnYgIi4vaGVscGVyIG90aGVyIiAmJgorCWdpdCBkaWZmIEhFQUReIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2RpZmYgLS1naXQgYS9iYXIuYmluIGIvYmFyLmJpbgoraW5kZXggJGJhcjEuLiRiYXIyIDEwMDY0NAorLS0tIGEvYmFyLmJpbgorKysrIGIvYmFyLmJpbgorQEAgLTEsMiArMSwyIEBACisgY29udmVydGVkOiBvdGhlcgorLWNvbnZlcnRlZDogYmFyIGNvbnRlbnQgMQorK2NvbnZlcnRlZDogYmFyIGNvbnRlbnQgMgorZGlmZiAtLWdpdCBhL2Zvby5iaW4gYi9mb28uYmluCitpbmRleCAkZm9vMS4uJGZvbzIgMTAwNjQ0CistLS0gYS9mb28uYmluCisrKysgYi9mb28uYmluCitAQCAtMSArMSBAQAorLWNvbnZlcnRlZDogZm9vIGNvbnRlbnQgMQorK2NvbnZlcnRlZDogZm9vIGNvbnRlbnQgMgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2hpbmcgZGlmZiBkcml2ZXIgcHJvZHVjZXMgY29ycmVjdCByZXN1bHRzJyAnCisJZ2l0IGNvbmZpZyBkaWZmLm1vcmVtYWdpYy50ZXh0Y29udiAuL2hlbHBlciAmJgorCWVjaG8gZm9vLmJpbiBkaWZmPW1vcmVtYWdpYyA+Pi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGRpZmYgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFRoZSBwb2ludCBoZXJlIGlzIHRvIHRlc3QgdGhhdCB3ZSBjYW4gbG9nIHRoZSBub3RlcyBjYWNoZSBhbmQgc3RpbGwgdXNlIGl0IHRvCisjIHByb2R1Y2UgYSBkaWZmIGxhdGVyIChvbGRlciB2ZXJzaW9ucyBvZiBnaXQgd291bGQgc2VnZmF1bHQgb24gdGhpcykuIEl0J3MKKyMgbXVjaCBtb3JlIGxpa2VseSB0byBjb21lIHVwIGluIHRoZSByZWFsIHdvcmxkIHdpdGggImxvZyAtLWFsbCAtcCIsIGJ1dCB1c2luZworIyAtLW5vLXdhbGsgbGV0cyB1cyByZWxpYWJseSByZXByb2R1Y2UgdGhlIG9yZGVyIG9mIHRyYXZlcnNhbC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBub3RlcyBjYWNoZSBhbmQgc3RpbGwgdXNlIGNhY2hlIGZvciAtcCcgJworCWdpdCBsb2cgLS1uby13YWxrIC1wIHJlZnMvbm90ZXMvdGV4dGNvbnYvbWFnaWMgSEVBRAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNDMtZGlmZi1yZW5hbWUtYmluYXJ5LnNoIGIvdC90NDA0My1kaWZmLXJlbmFtZS1iaW5hcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmEyY2Y5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNDMtZGlmZi1yZW5hbWUtYmluYXJ5LnNoCkBAIC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgSmFrdWIgTmFyZWJza2ksIENocmlzdGlhbiBDb3VkZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nTW92ZSBhIGJpbmFyeSBmaWxlJworCisuIC4vdGVzdC1saWIuc2gKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHJlcG9zaXRvcnknICcKKwlnaXQgaW5pdCAmJgorCWVjaG8gZm9vID4gZm9vICYmCisJZWNobyAiYmFyUSIgfCBxX3RvX251bCA+IGJhciAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3ZlIHRoZSBmaWxlcyBpbnRvIGEgInN1YiIgZGlyZWN0b3J5JyAnCisJbWtkaXIgc3ViICYmCisJZ2l0IG12IGJhciBmb28gc3ViLyAmJgorCWdpdCBjb21taXQgLW0gIk1vdmVkIHRvIHN1Yi8iCisnCisKK2NhdCA+IGV4cGVjdGVkIDw8XEVPRgorLQktCWJhciA9PiBzdWIvYmFyCiswCTAJZm9vID0+IHN1Yi9mb28KKworZGlmZiAtLWdpdCBhL2JhciBiL3N1Yi9iYXIKK3NpbWlsYXJpdHkgaW5kZXggMTAwJQorcmVuYW1lIGZyb20gYmFyCityZW5hbWUgdG8gc3ViL2JhcgorZGlmZiAtLWdpdCBhL2ZvbyBiL3N1Yi9mb28KK3NpbWlsYXJpdHkgaW5kZXggMTAwJQorcmVuYW1lIGZyb20gZm9vCityZW5hbWUgdG8gc3ViL2ZvbworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG93IC1DIC1DIHJlcG9ydCByZW5hbWVzJyAnCisJZ2l0IHNob3cgLUMgLUMgLS1yYXcgLS1iaW5hcnkgLS1udW1zdGF0ID5wYXRjaC13aXRoLXN0YXQgJiYKKwl0YWlsIC1uIDExIHBhdGNoLXdpdGgtc3RhdCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDQ0LWRpZmYtaW5kZXgtdW5pcXVlLWFiYnJldi5zaCBiL3QvdDQwNDQtZGlmZi1pbmRleC11bmlxdWUtYWJicmV2LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ3MDE3OTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQ0LWRpZmYtaW5kZXgtdW5pcXVlLWFiYnJldi5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB1bmlxdWUgc2hhMSBhYmJyZXZpYXRpb24gb24gImluZGV4IGZyb20uLnRvIiBsaW5lJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9vaWRfY2FjaGUgPDwtRU9GICYmCisJdmFsMSBzaGExOjQ4MjcKKwl2YWwxIHNoYTI1Njo1NjY0CisKKwl2YWwyIHNoYTE6MTE3NDIKKwl2YWwyIHNoYTI1NjoxMDYyNQorCisJaGFzaDEgc2hhMTo1MWQyNzM4NDYzZWE0Y2E2NmY4NjkxYzkxZTMzY2U2NGI3ZDQxYmIxCisJaGFzaDEgc2hhMjU2OmFlMzFkZmZmMGFmOTNiMmM2MmIwMDk4YTAzOWIzODU2OWM0M2IwYTdlOTdiODczMDAwY2E0MmQxMjhmMjczNTAKKworCWhhc2h0MSBzaGExOjUxZDI3Mzg0CisJaGFzaHQxIHNoYTI1NjphZTMxZGZmZgorCisJaGFzaDIgc2hhMTo1MWQyNzM4ZWZiNGFkOGExZTQwYmVkODM5YWI4ZTExNmYwYTE1ZTQ3CisJaGFzaDIgc2hhMjU2OmFlMzFkZmZhZGE4OGE0NmZkNWY1M2M3ZWQ1YWEyNWE3YTg5NTFmMWQ1ZTg4NDU2YzMxN2M4ZDU0ODRkMjYzZTUKKworCWhhc2h0MiBzaGExOjUxZDI3MzhlCisJaGFzaHQyIHNoYTI1NjphZTMxZGZmYQorCUVPRgorCisJY2F0ID5leHBlY3RfaW5pdGlhbCA8PC1FT0YgJiYKKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIGhhc2gxKQlmb28KKwlFT0YKKworCWNhdCA+ZXhwZWN0X3VwZGF0ZSA8PC1FT0YgJiYKKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIGhhc2gyKQlmb28KKwlFT0YKKworCWVjaG8gIiQodGVzdF9vaWQgdmFsMSkiID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIiAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEOiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF9pbml0aWFsIGFjdHVhbCAmJgorCWVjaG8gIiQodGVzdF9vaWQgdmFsMikiID4gZm9vICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAidXBkYXRlIiAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEOiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF91cGRhdGUgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitpbmRleCAkKHRlc3Rfb2lkIGhhc2h0MSkuLiQodGVzdF9vaWQgaGFzaHQyKSAxMDA2NDQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGRvZXMgbm90IHByb2R1Y2UgYW1iaWd1b3VzIGluZGV4IGxpbmUnICcKKwlnaXQgZGlmZiBIRUFEXi4uSEVBRCB8IGdyZXAgaW5kZXggPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA0NS1kaWZmLXJlbGF0aXZlLnNoIGIvdC90NDA0NS1kaWZmLXJlbGF0aXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1ODgwODcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQ1LWRpZmYtcmVsYXRpdmUuc2gKQEAgLTAsMCArMSw4OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgLS1yZWxhdGl2ZSB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBlbXB0eSAmJgorCWVjaG8gY29udGVudCA+ZmlsZTEgJiYKKwlta2RpciBzdWJkaXIgJiYKKwllY2hvIG90aGVyIGNvbnRlbnQgPnN1YmRpci9maWxlMiAmJgorCWJsb2I9JChnaXQgaGFzaC1vYmplY3Qgc3ViZGlyL2ZpbGUyKSAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gb25lCisnCisKK2NoZWNrX2RpZmYgKCkgeworCWRpcj0kMQorCXNoaWZ0CisJZXhwZWN0PSQxCisJc2hpZnQKKwlzaG9ydF9ibG9iPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRibG9iKQorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GCisJZGlmZiAtLWdpdCBhLyRleHBlY3QgYi8kZXhwZWN0CisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi4kc2hvcnRfYmxvYgorCS0tLSAvZGV2L251bGwKKwkrKysgYi8kZXhwZWN0CisJQEAgLTAsMCArMSBAQAorCStvdGhlciBjb250ZW50CisJRU9GCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiLXAgJCoiICIKKwkJZ2l0IC1DICckZGlyJyBkaWZmIC1wICQqIEhFQUReID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJIgorfQorCitjaGVja19udW1zdGF0ICgpIHsKKwlkaXI9JDEKKwlzaGlmdAorCWV4cGVjdD0kMQorCXNoaWZ0CisJY2F0ID5leHBlY3RlZCA8PC1FT0YKKwkxCTAJJGV4cGVjdAorCUVPRgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tbnVtc3RhdCAkKiIgIgorCQllY2hvICcxCTAJJGV4cGVjdCcgPmV4cGVjdGVkICYmCisJCWdpdCAtQyAnJGRpcicgZGlmZiAtLW51bXN0YXQgJCogSEVBRF4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkiCit9CisKK2NoZWNrX3N0YXQgKCkgeworCWRpcj0kMQorCXNoaWZ0CisJZXhwZWN0PSQxCisJc2hpZnQKKwljYXQgPmV4cGVjdGVkIDw8LUVPRgorCSAkZXhwZWN0IHwgMSArCisJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCUVPRgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tc3RhdCAkKiIgIgorCQlnaXQgLUMgJyRkaXInIGRpZmYgLS1zdGF0ICQqIEhFQUReID5hY3R1YWwgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorCSIKK30KKworY2hlY2tfcmF3ICgpIHsKKwlkaXI9JDEKKwlzaGlmdAorCWV4cGVjdD0kMQorCXNoaWZ0CisJY2F0ID5leHBlY3RlZCA8PC1FT0YKKwk6MDAwMDAwIDEwMDY0NCAkWkVST19PSUQgJGJsb2IgQQkkZXhwZWN0CisJRU9GCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1yYXcgJCoiICIKKwkJZ2l0IC1DICckZGlyJyBkaWZmIC0tbm8tYWJicmV2IC0tcmF3ICQqIEhFQUReID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJIgorfQorCitmb3IgdHlwZSBpbiBkaWZmIG51bXN0YXQgc3RhdCByYXcKK2RvCisJY2hlY2tfJHR5cGUgLiBmaWxlMiAtLXJlbGF0aXZlPXN1YmRpci8KKwljaGVja18kdHlwZSAuIGZpbGUyIC0tcmVsYXRpdmU9c3ViZGlyCisJY2hlY2tfJHR5cGUgc3ViZGlyIGZpbGUyIC0tcmVsYXRpdmUKKwljaGVja18kdHlwZSAuIGRpci9maWxlMiAtLXJlbGF0aXZlPXN1YgorZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNDYtZGlmZi11bm1lcmdlZC5zaCBiL3QvdDQwNDYtZGlmZi11bm1lcmdlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZjdjZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDA0Ni1kaWZmLXVubWVyZ2VkLnNoCkBAIC0wLDAgKzEsODcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIHdpdGggdW5tZXJnZWQgaW5kZXggZW50cmllcycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlmb3IgaSBpbiAwIDEgMiAzCisJZG8KKwkJYmxvYj0kKGVjaG8gJGkgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwkJZXZhbCAiYmxvYiRpPSRibG9iIiAmJgorCQlldmFsICJtJGk9XCIxMDA2NDQgXCRibG9iJGkgJGlcIiIgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJcGF0aHM9ICYmCisJZm9yIGIgaW4gbyB4CisJZG8KKwkJZm9yIG8gaW4gbyB4CisJCWRvCisJCQlmb3IgdCBpbiBvIHgKKwkJCWRvCisJCQkJcGF0aD0iJGIkbyR0IiAmJgorCQkJCWNhc2UgIiRwYXRoIiBpbiBvb28pIGNvbnRpbnVlIDs7IGVzYWMKKwkJCQlwYXRocz0iJHBhdGhzJHBhdGggIiAmJgorCQkJCXA9IgkkcGF0aCIgJiYKKwkJCQljYXNlICIkYiIgaW4geCkgZWNobyAiJG0xJHAiIDs7IGVzYWMgJiYKKwkJCQljYXNlICIkbyIgaW4geCkgZWNobyAiJG0yJHAiIDs7IGVzYWMgJiYKKwkJCQljYXNlICIkdCIgaW4geCkgZWNobyAiJG0zJHAiIDs7IGVzYWMgfHwKKwkJCQlyZXR1cm4gMQorCQkJZG9uZQorCQlkb25lCisJZG9uZSA+bHMtZmlsZXMtcy5leHBlY3QgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8bHMtZmlsZXMtcy5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmxzLWZpbGVzLXMuYWN0dWFsICYmCisJdGVzdF9jbXAgbHMtZmlsZXMtcy5leHBlY3QgbHMtZmlsZXMtcy5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlcyAtMCcgJworCWZvciBwYXRoIGluICRwYXRocworCWRvCisJCT4iJHBhdGgiICYmCisJCWVjaG8gIjowMDAwMDAgMTAwNjQ0ICRaRVJPX09JRCAkWkVST19PSUQgVQkkcGF0aCIKKwlkb25lID5kaWZmLWZpbGVzLTAuZXhwZWN0ICYmCisJZ2l0IGRpZmYtZmlsZXMgLTAgPmRpZmYtZmlsZXMtMC5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBkaWZmLWZpbGVzLTAuZXhwZWN0IGRpZmYtZmlsZXMtMC5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlcyAtMScgJworCWZvciBwYXRoIGluICRwYXRocworCWRvCisJCT4iJHBhdGgiICYmCisJCWVjaG8gIjowMDAwMDAgMTAwNjQ0ICRaRVJPX09JRCAkWkVST19PSUQgVQkkcGF0aCIgJiYKKwkJY2FzZSAiJHBhdGgiIGluCisJCXg/PykgZWNobyAiOjEwMDY0NCAxMDA2NDQgJGJsb2IxICRaRVJPX09JRCBNCSRwYXRoIgorCQllc2FjCisJZG9uZSA+ZGlmZi1maWxlcy0xLmV4cGVjdCAmJgorCWdpdCBkaWZmLWZpbGVzIC0xID5kaWZmLWZpbGVzLTEuYWN0dWFsICYmCisJdGVzdF9jbXAgZGlmZi1maWxlcy0xLmV4cGVjdCBkaWZmLWZpbGVzLTEuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgLTInICcKKwlmb3IgcGF0aCBpbiAkcGF0aHMKKwlkbworCQk+IiRwYXRoIiAmJgorCQllY2hvICI6MDAwMDAwIDEwMDY0NCAkWkVST19PSUQgJFpFUk9fT0lEIFUJJHBhdGgiICYmCisJCWNhc2UgIiRwYXRoIiBpbgorCQk/eD8pIGVjaG8gIjoxMDA2NDQgMTAwNjQ0ICRibG9iMiAkWkVST19PSUQgTQkkcGF0aCIKKwkJZXNhYworCWRvbmUgPmRpZmYtZmlsZXMtMi5leHBlY3QgJiYKKwlnaXQgZGlmZi1maWxlcyAtMiA+ZGlmZi1maWxlcy0yLmFjdHVhbCAmJgorCXRlc3RfY21wIGRpZmYtZmlsZXMtMi5leHBlY3QgZGlmZi1maWxlcy0yLmFjdHVhbCAmJgorCWdpdCBkaWZmLWZpbGVzID5kaWZmLWZpbGVzLWRlZmF1bHQtMi5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBkaWZmLWZpbGVzLTIuZXhwZWN0IGRpZmYtZmlsZXMtZGVmYXVsdC0yLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIC0zJyAnCisJZm9yIHBhdGggaW4gJHBhdGhzCisJZG8KKwkJPiIkcGF0aCIgJiYKKwkJZWNobyAiOjAwMDAwMCAxMDA2NDQgJFpFUk9fT0lEICRaRVJPX09JRCBVCSRwYXRoIiAmJgorCQljYXNlICIkcGF0aCIgaW4KKwkJPz94KSBlY2hvICI6MTAwNjQ0IDEwMDY0NCAkYmxvYjMgJFpFUk9fT0lEIE0JJHBhdGgiCisJCWVzYWMKKwlkb25lID5kaWZmLWZpbGVzLTMuZXhwZWN0ICYmCisJZ2l0IGRpZmYtZmlsZXMgLTMgPmRpZmYtZmlsZXMtMy5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBkaWZmLWZpbGVzLTMuZXhwZWN0IGRpZmYtZmlsZXMtMy5hY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDQ3LWRpZmYtZGlyc3RhdC5zaCBiL3QvdDQwNDctZGlmZi1kaXJzdGF0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdmZWMyY2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQ3LWRpZmYtZGlyc3RhdC5zaApAQCAtMCwwICsxLDk5MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgLS1kaXJzdGF0IHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgc2V0IHVwIHR3byBjb21taXRzIHdoZXJlIHRoZSBzZWNvbmQgY29tbWl0IGhhcyB0aGVzZSBmaWxlcworIyAoMTAgbGluZXMgaW4gZWFjaCBmaWxlKToKKyMKKyMgICB1bmNoYW5nZWQvdGV4dCAgICAgICAgICAgKHVuY2hhbmdlZCBmcm9tIDFzdCBjb21taXQpCisjICAgY2hhbmdlZC90ZXh0ICAgICAgICAgICAgIChjaGFuZ2VkIDFzdCBsaW5lKQorIyAgIHJlYXJyYW5nZWQvdGV4dCAgICAgICAgICAoc3dhcHBlZCAxc3QgYW5kIDJuZCBsaW5lKQorIyAgIGRzdC9jb3B5L3VuY2hhbmdlZC90ZXh0ICAoY29waWVkIGZyb20gc3JjL2NvcHkvdW5jaGFuZ2VkL3RleHQsIHVuY2hhbmdlZCkKKyMgICBkc3QvY29weS9jaGFuZ2VkL3RleHQgICAgKGNvcGllZCBmcm9tIHNyYy9jb3B5L2NoYW5nZWQvdGV4dCwgY2hhbmdlZCkKKyMgICBkc3QvY29weS9yZWFycmFuZ2VkL3RleHQgKGNvcGllZCBmcm9tIHNyYy9jb3B5L3JlYXJyYW5nZWQvdGV4dCwgcmVhcnJhbmdlZCkKKyMgICBkc3QvbW92ZS91bmNoYW5nZWQvdGV4dCAgKG1vdmVkIGZyb20gc3JjL21vdmUvdW5jaGFuZ2VkL3RleHQsIHVuY2hhbmdlZCkKKyMgICBkc3QvbW92ZS9jaGFuZ2VkL3RleHQgICAgKG1vdmVkIGZyb20gc3JjL21vdmUvY2hhbmdlZC90ZXh0LCBjaGFuZ2VkKQorIyAgIGRzdC9tb3ZlL3JlYXJyYW5nZWQvdGV4dCAobW92ZWQgZnJvbSBzcmMvbW92ZS9yZWFycmFuZ2VkL3RleHQsIHJlYXJyYW5nZWQpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgdW5jaGFuZ2VkICYmCisJbWtkaXIgY2hhbmdlZCAmJgorCW1rZGlyIHJlYXJyYW5nZWQgJiYKKwlta2RpciBzcmMgJiYKKwlta2RpciBzcmMvY29weSAmJgorCW1rZGlyIHNyYy9jb3B5L3VuY2hhbmdlZCAmJgorCW1rZGlyIHNyYy9jb3B5L2NoYW5nZWQgJiYKKwlta2RpciBzcmMvY29weS9yZWFycmFuZ2VkICYmCisJbWtkaXIgc3JjL21vdmUgJiYKKwlta2RpciBzcmMvbW92ZS91bmNoYW5nZWQgJiYKKwlta2RpciBzcmMvbW92ZS9jaGFuZ2VkICYmCisJbWtkaXIgc3JjL21vdmUvcmVhcnJhbmdlZCAmJgorCWNhdCA8PEVPRiA+dW5jaGFuZ2VkL3RleHQgJiYKK3VuY2hhbmdlZCAgICAgICBsaW5lICMwCit1bmNoYW5nZWQgICAgICAgbGluZSAjMQordW5jaGFuZ2VkICAgICAgIGxpbmUgIzIKK3VuY2hhbmdlZCAgICAgICBsaW5lICMzCit1bmNoYW5nZWQgICAgICAgbGluZSAjNAordW5jaGFuZ2VkICAgICAgIGxpbmUgIzUKK3VuY2hhbmdlZCAgICAgICBsaW5lICM2Cit1bmNoYW5nZWQgICAgICAgbGluZSAjNwordW5jaGFuZ2VkICAgICAgIGxpbmUgIzgKK3VuY2hhbmdlZCAgICAgICBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPmNoYW5nZWQvdGV4dCAmJgorY2hhbmdlZCAgICAgICAgIGxpbmUgIzAKK2NoYW5nZWQgICAgICAgICBsaW5lICMxCitjaGFuZ2VkICAgICAgICAgbGluZSAjMgorY2hhbmdlZCAgICAgICAgIGxpbmUgIzMKK2NoYW5nZWQgICAgICAgICBsaW5lICM0CitjaGFuZ2VkICAgICAgICAgbGluZSAjNQorY2hhbmdlZCAgICAgICAgIGxpbmUgIzYKK2NoYW5nZWQgICAgICAgICBsaW5lICM3CitjaGFuZ2VkICAgICAgICAgbGluZSAjOAorY2hhbmdlZCAgICAgICAgIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+cmVhcnJhbmdlZC90ZXh0ICYmCityZWFycmFuZ2VkICAgICAgbGluZSAjMAorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzEKK3JlYXJyYW5nZWQgICAgICBsaW5lICMyCityZWFycmFuZ2VkICAgICAgbGluZSAjMworcmVhcnJhbmdlZCAgICAgIGxpbmUgIzQKK3JlYXJyYW5nZWQgICAgICBsaW5lICM1CityZWFycmFuZ2VkICAgICAgbGluZSAjNgorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzcKK3JlYXJyYW5nZWQgICAgICBsaW5lICM4CityZWFycmFuZ2VkICAgICAgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5zcmMvY29weS91bmNoYW5nZWQvdGV4dCAmJgorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzAKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICMxCitjb3B5ICB1bmNoYW5nZWQgbGluZSAjMgorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzMKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICM0Citjb3B5ICB1bmNoYW5nZWQgbGluZSAjNQorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzYKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICM3Citjb3B5ICB1bmNoYW5nZWQgbGluZSAjOAorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+c3JjL2NvcHkvY2hhbmdlZC90ZXh0ICYmCitjb3B5ICAgIGNoYW5nZWQgbGluZSAjMAorY29weSAgICBjaGFuZ2VkIGxpbmUgIzEKK2NvcHkgICAgY2hhbmdlZCBsaW5lICMyCitjb3B5ICAgIGNoYW5nZWQgbGluZSAjMworY29weSAgICBjaGFuZ2VkIGxpbmUgIzQKK2NvcHkgICAgY2hhbmdlZCBsaW5lICM1Citjb3B5ICAgIGNoYW5nZWQgbGluZSAjNgorY29weSAgICBjaGFuZ2VkIGxpbmUgIzcKK2NvcHkgICAgY2hhbmdlZCBsaW5lICM4Citjb3B5ICAgIGNoYW5nZWQgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5zcmMvY29weS9yZWFycmFuZ2VkL3RleHQgJiYKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICMwCitjb3B5IHJlYXJyYW5nZWQgbGluZSAjMQorY29weSByZWFycmFuZ2VkIGxpbmUgIzIKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICMzCitjb3B5IHJlYXJyYW5nZWQgbGluZSAjNAorY29weSByZWFycmFuZ2VkIGxpbmUgIzUKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICM2Citjb3B5IHJlYXJyYW5nZWQgbGluZSAjNworY29weSByZWFycmFuZ2VkIGxpbmUgIzgKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPnNyYy9tb3ZlL3VuY2hhbmdlZC90ZXh0ICYmCittb3ZlICB1bmNoYW5nZWQgbGluZSAjMAorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzEKK21vdmUgIHVuY2hhbmdlZCBsaW5lICMyCittb3ZlICB1bmNoYW5nZWQgbGluZSAjMworbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzQKK21vdmUgIHVuY2hhbmdlZCBsaW5lICM1Cittb3ZlICB1bmNoYW5nZWQgbGluZSAjNgorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzcKK21vdmUgIHVuY2hhbmdlZCBsaW5lICM4Cittb3ZlICB1bmNoYW5nZWQgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5zcmMvbW92ZS9jaGFuZ2VkL3RleHQgJiYKK21vdmUgICAgY2hhbmdlZCBsaW5lICMwCittb3ZlICAgIGNoYW5nZWQgbGluZSAjMQorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzIKK21vdmUgICAgY2hhbmdlZCBsaW5lICMzCittb3ZlICAgIGNoYW5nZWQgbGluZSAjNAorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzUKK21vdmUgICAgY2hhbmdlZCBsaW5lICM2Cittb3ZlICAgIGNoYW5nZWQgbGluZSAjNworbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzgKK21vdmUgICAgY2hhbmdlZCBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPnNyYy9tb3ZlL3JlYXJyYW5nZWQvdGV4dCAmJgorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzAKK21vdmUgcmVhcnJhbmdlZCBsaW5lICMxCittb3ZlIHJlYXJyYW5nZWQgbGluZSAjMgorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzMKK21vdmUgcmVhcnJhbmdlZCBsaW5lICM0Cittb3ZlIHJlYXJyYW5nZWQgbGluZSAjNQorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzYKK21vdmUgcmVhcnJhbmdlZCBsaW5lICM3Cittb3ZlIHJlYXJyYW5nZWQgbGluZSAjOAorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzkKK0VPRgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gImluaXRpYWwiICYmCisJbWtkaXIgZHN0ICYmCisJbWtkaXIgZHN0L2NvcHkgJiYKKwlta2RpciBkc3QvY29weS91bmNoYW5nZWQgJiYKKwlta2RpciBkc3QvY29weS9jaGFuZ2VkICYmCisJbWtkaXIgZHN0L2NvcHkvcmVhcnJhbmdlZCAmJgorCW1rZGlyIGRzdC9tb3ZlICYmCisJbWtkaXIgZHN0L21vdmUvdW5jaGFuZ2VkICYmCisJbWtkaXIgZHN0L21vdmUvY2hhbmdlZCAmJgorCW1rZGlyIGRzdC9tb3ZlL3JlYXJyYW5nZWQgJiYKKwljYXQgPDxFT0YgPmNoYW5nZWQvdGV4dCAmJgorQ0hBTkdFRCBYWFhYWFhYIGxpbmUgIzAKK2NoYW5nZWQgICAgICAgICBsaW5lICMxCitjaGFuZ2VkICAgICAgICAgbGluZSAjMgorY2hhbmdlZCAgICAgICAgIGxpbmUgIzMKK2NoYW5nZWQgICAgICAgICBsaW5lICM0CitjaGFuZ2VkICAgICAgICAgbGluZSAjNQorY2hhbmdlZCAgICAgICAgIGxpbmUgIzYKK2NoYW5nZWQgICAgICAgICBsaW5lICM3CitjaGFuZ2VkICAgICAgICAgbGluZSAjOAorY2hhbmdlZCAgICAgICAgIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+cmVhcnJhbmdlZC90ZXh0ICYmCityZWFycmFuZ2VkICAgICAgbGluZSAjMQorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzAKK3JlYXJyYW5nZWQgICAgICBsaW5lICMyCityZWFycmFuZ2VkICAgICAgbGluZSAjMworcmVhcnJhbmdlZCAgICAgIGxpbmUgIzQKK3JlYXJyYW5nZWQgICAgICBsaW5lICM1CityZWFycmFuZ2VkICAgICAgbGluZSAjNgorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzcKK3JlYXJyYW5nZWQgICAgICBsaW5lICM4CityZWFycmFuZ2VkICAgICAgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5kc3QvY29weS91bmNoYW5nZWQvdGV4dCAmJgorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzAKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICMxCitjb3B5ICB1bmNoYW5nZWQgbGluZSAjMgorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzMKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICM0Citjb3B5ICB1bmNoYW5nZWQgbGluZSAjNQorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzYKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICM3Citjb3B5ICB1bmNoYW5nZWQgbGluZSAjOAorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+ZHN0L2NvcHkvY2hhbmdlZC90ZXh0ICYmCitjb3B5IFhYWENIQU5HRUQgbGluZSAjMAorY29weSAgICBjaGFuZ2VkIGxpbmUgIzEKK2NvcHkgICAgY2hhbmdlZCBsaW5lICMyCitjb3B5ICAgIGNoYW5nZWQgbGluZSAjMworY29weSAgICBjaGFuZ2VkIGxpbmUgIzQKK2NvcHkgICAgY2hhbmdlZCBsaW5lICM1Citjb3B5ICAgIGNoYW5nZWQgbGluZSAjNgorY29weSAgICBjaGFuZ2VkIGxpbmUgIzcKK2NvcHkgICAgY2hhbmdlZCBsaW5lICM4Citjb3B5ICAgIGNoYW5nZWQgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5kc3QvY29weS9yZWFycmFuZ2VkL3RleHQgJiYKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICMxCitjb3B5IHJlYXJyYW5nZWQgbGluZSAjMAorY29weSByZWFycmFuZ2VkIGxpbmUgIzIKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICMzCitjb3B5IHJlYXJyYW5nZWQgbGluZSAjNAorY29weSByZWFycmFuZ2VkIGxpbmUgIzUKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICM2Citjb3B5IHJlYXJyYW5nZWQgbGluZSAjNworY29weSByZWFycmFuZ2VkIGxpbmUgIzgKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPmRzdC9tb3ZlL3VuY2hhbmdlZC90ZXh0ICYmCittb3ZlICB1bmNoYW5nZWQgbGluZSAjMAorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzEKK21vdmUgIHVuY2hhbmdlZCBsaW5lICMyCittb3ZlICB1bmNoYW5nZWQgbGluZSAjMworbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzQKK21vdmUgIHVuY2hhbmdlZCBsaW5lICM1Cittb3ZlICB1bmNoYW5nZWQgbGluZSAjNgorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzcKK21vdmUgIHVuY2hhbmdlZCBsaW5lICM4Cittb3ZlICB1bmNoYW5nZWQgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5kc3QvbW92ZS9jaGFuZ2VkL3RleHQgJiYKK21vdmUgWFhYQ0hBTkdFRCBsaW5lICMwCittb3ZlICAgIGNoYW5nZWQgbGluZSAjMQorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzIKK21vdmUgICAgY2hhbmdlZCBsaW5lICMzCittb3ZlICAgIGNoYW5nZWQgbGluZSAjNAorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzUKK21vdmUgICAgY2hhbmdlZCBsaW5lICM2Cittb3ZlICAgIGNoYW5nZWQgbGluZSAjNworbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzgKK21vdmUgICAgY2hhbmdlZCBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPmRzdC9tb3ZlL3JlYXJyYW5nZWQvdGV4dCAmJgorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzEKK21vdmUgcmVhcnJhbmdlZCBsaW5lICMwCittb3ZlIHJlYXJyYW5nZWQgbGluZSAjMgorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzMKK21vdmUgcmVhcnJhbmdlZCBsaW5lICM0Cittb3ZlIHJlYXJyYW5nZWQgbGluZSAjNQorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzYKK21vdmUgcmVhcnJhbmdlZCBsaW5lICM3Cittb3ZlIHJlYXJyYW5nZWQgbGluZSAjOAorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzkKK0VPRgorCWdpdCBhZGQgLiAmJgorCWdpdCBybSAtciBzcmMvbW92ZS91bmNoYW5nZWQgJiYKKwlnaXQgcm0gLXIgc3JjL21vdmUvY2hhbmdlZCAmJgorCWdpdCBybSAtciBzcmMvbW92ZS9yZWFycmFuZ2VkICYmCisJZ2l0IGNvbW1pdCAtbSAiY2hhbmdlcyIgJiYKKwlnaXQgY29uZmlnIGRpZmYucmVuYW1lcyBmYWxzZQorJworCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX3N0YXQKKzEJMQljaGFuZ2VkL3RleHQKKzEwCTAJZHN0L2NvcHkvY2hhbmdlZC90ZXh0CisxMAkwCWRzdC9jb3B5L3JlYXJyYW5nZWQvdGV4dAorMTAJMAlkc3QvY29weS91bmNoYW5nZWQvdGV4dAorMTAJMAlkc3QvbW92ZS9jaGFuZ2VkL3RleHQKKzEwCTAJZHN0L21vdmUvcmVhcnJhbmdlZC90ZXh0CisxMAkwCWRzdC9tb3ZlL3VuY2hhbmdlZC90ZXh0CisxCTEJcmVhcnJhbmdlZC90ZXh0CiswCTEwCXNyYy9tb3ZlL2NoYW5nZWQvdGV4dAorMAkxMAlzcmMvbW92ZS9yZWFycmFuZ2VkL3RleHQKKzAJMTAJc3JjL21vdmUvdW5jaGFuZ2VkL3RleHQKK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX3N0YXRfTQorMQkxCWNoYW5nZWQvdGV4dAorMTAJMAlkc3QvY29weS9jaGFuZ2VkL3RleHQKKzEwCTAJZHN0L2NvcHkvcmVhcnJhbmdlZC90ZXh0CisxMAkwCWRzdC9jb3B5L3VuY2hhbmdlZC90ZXh0CisxCTEJe3NyYyA9PiBkc3R9L21vdmUvY2hhbmdlZC90ZXh0CisxCTEJe3NyYyA9PiBkc3R9L21vdmUvcmVhcnJhbmdlZC90ZXh0CiswCTAJe3NyYyA9PiBkc3R9L21vdmUvdW5jaGFuZ2VkL3RleHQKKzEJMQlyZWFycmFuZ2VkL3RleHQKK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX3N0YXRfQ0MKKzEJMQljaGFuZ2VkL3RleHQKKzEJMQl7c3JjID0+IGRzdH0vY29weS9jaGFuZ2VkL3RleHQKKzEJMQl7c3JjID0+IGRzdH0vY29weS9yZWFycmFuZ2VkL3RleHQKKzAJMAl7c3JjID0+IGRzdH0vY29weS91bmNoYW5nZWQvdGV4dAorMQkxCXtzcmMgPT4gZHN0fS9tb3ZlL2NoYW5nZWQvdGV4dAorMQkxCXtzcmMgPT4gZHN0fS9tb3ZlL3JlYXJyYW5nZWQvdGV4dAorMAkwCXtzcmMgPT4gZHN0fS9tb3ZlL3VuY2hhbmdlZC90ZXh0CisxCTEJcmVhcnJhbmdlZC90ZXh0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FuaXR5IGNoZWNrIHNldHVwICgtLW51bXN0YXQpJyAnCisJZ2l0IGRpZmYgLS1udW1zdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9zdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfc3RhdCBhY3R1YWxfZGlmZl9zdGF0ICYmCisJZ2l0IGRpZmYgLS1udW1zdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9zdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9zdGF0X00gYWN0dWFsX2RpZmZfc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1udW1zdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9zdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfc3RhdF9DQyBhY3R1YWxfZGlmZl9zdGF0X0NDCisnCisKKyMgY2hhbmdlZC90ZXh0IGFuZCByZWFycmFuZ2VkL3RleHQgZmFsbHMgYmVsb3cgZGVmYXVsdCAzJSB0aHJlc2hvbGQKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdAorICAxMC44JSBkc3QvY29weS9jaGFuZ2VkLworICAxMC44JSBkc3QvY29weS9yZWFycmFuZ2VkLworICAxMC44JSBkc3QvY29weS91bmNoYW5nZWQvCisgIDEwLjglIGRzdC9tb3ZlL2NoYW5nZWQvCisgIDEwLjglIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgIDEwLjglIGRzdC9tb3ZlL3VuY2hhbmdlZC8KKyAgMTAuOCUgc3JjL21vdmUvY2hhbmdlZC8KKyAgMTAuOCUgc3JjL21vdmUvcmVhcnJhbmdlZC8KKyAgMTAuOCUgc3JjL21vdmUvdW5jaGFuZ2VkLworRU9GCisKKyMgcmVhcnJhbmdlZC90ZXh0IGZhbGxzIGJlbG93IGRlZmF1bHQgMyUgdGhyZXNob2xkCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfTQorICAgNS44JSBjaGFuZ2VkLworICAyOS4zJSBkc3QvY29weS9jaGFuZ2VkLworICAyOS4zJSBkc3QvY29weS9yZWFycmFuZ2VkLworICAyOS4zJSBkc3QvY29weS91bmNoYW5nZWQvCisgICA1LjglIGRzdC9tb3ZlL2NoYW5nZWQvCitFT0YKKworIyByZWFycmFuZ2VkL3RleHQgZmFsbHMgYmVsb3cgZGVmYXVsdCAzJSB0aHJlc2hvbGQKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9DQworICAzMi42JSBjaGFuZ2VkLworICAzMi42JSBkc3QvY29weS9jaGFuZ2VkLworICAzMi42JSBkc3QvbW92ZS9jaGFuZ2VkLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhcmlvdXMgd2F5cyB0byBtaXNzcGVsbCAtLWRpcnN0YXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAtLWRpcnN0YXQxMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93IC0tZGlyc3RhdDEwLGZpbGVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3cgLVg9MjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAtWD0yMCxjdW11bGF0aXZlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbmlsbGEgLS1kaXJzdGF0JyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbmlsbGEgLVgnICcKKwlnaXQgZGlmZiAtWCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC1YIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLVggLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgZGVmYXVsdHM6IC0tZGlyc3RhdD1jaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMycgJworCWdpdCBkaWZmIC0tZGlyc3RhdD1jaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1jaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1jaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdCBkZWZhdWx0czogLVhjaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMycgJworCWdpdCBkaWZmIC1YY2hhbmdlcyxub25jdW11bGF0aXZlLDMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtWGNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLVhjaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXRlciBvcHRpb25zIG92ZXJyaWRlIGVhcmxpZXIgb3B0aW9uczonICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsMTAsY3VtdWxhdGl2ZSxjaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcywxMCxjdW11bGF0aXZlLGNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLDEwLGN1bXVsYXRpdmUsY2hhbmdlcyxub25jdW11bGF0aXZlLDMgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMgLS1kaXJzdGF0PTEwIC0tZGlyc3RhdD1jdW11bGF0aXZlIC0tZGlyc3RhdD1jaGFuZ2VzIC0tZGlyc3RhdD1ub25jdW11bGF0aXZlIC1YMyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyAtLWRpcnN0YXQ9MTAgLS1kaXJzdGF0PWN1bXVsYXRpdmUgLS1kaXJzdGF0PWNoYW5nZXMgLS1kaXJzdGF0PW5vbmN1bXVsYXRpdmUgLVgzIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzIC0tZGlyc3RhdD0xMCAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSAtLWRpcnN0YXQ9Y2hhbmdlcyAtLWRpcnN0YXQ9bm9uY3VtdWxhdGl2ZSAtWDMgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLWRlZmF1bHRzIGluIGNvbmZpZyBvdmVycmlkZGVuIGJ5IGV4cGxpY2l0IGRlZmF1bHRzIG9uIGNvbW1hbmQgbGluZScgJworCWdpdCAtYyBkaWZmLmRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSw1MCBkaWZmIC0tZGlyc3RhdD1jaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSw1MCBkaWZmIC0tZGlyc3RhdD1jaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSw1MCBkaWZmIC0tZGlyc3RhdD1jaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXQKKyAgIDIuMSUgY2hhbmdlZC8KKyAgMTAuOCUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTAuOCUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMTAuOCUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICAxMC44JSBkc3QvbW92ZS9jaGFuZ2VkLworICAxMC44JSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAxMC44JSBkc3QvbW92ZS91bmNoYW5nZWQvCisgICAwLjAlIHJlYXJyYW5nZWQvCisgIDEwLjglIHNyYy9tb3ZlL2NoYW5nZWQvCisgIDEwLjglIHNyYy9tb3ZlL3JlYXJyYW5nZWQvCisgIDEwLjglIHNyYy9tb3ZlL3VuY2hhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfTQorICAgNS44JSBjaGFuZ2VkLworICAyOS4zJSBkc3QvY29weS9jaGFuZ2VkLworICAyOS4zJSBkc3QvY29weS9yZWFycmFuZ2VkLworICAyOS4zJSBkc3QvY29weS91bmNoYW5nZWQvCisgICA1LjglIGRzdC9tb3ZlL2NoYW5nZWQvCisgICAwLjElIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgICAwLjElIHJlYXJyYW5nZWQvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X0NDCisgIDMyLjYlIGNoYW5nZWQvCisgIDMyLjYlIGRzdC9jb3B5L2NoYW5nZWQvCisgICAwLjYlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDMyLjYlIGRzdC9tb3ZlL2NoYW5nZWQvCisgICAwLjYlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgICAwLjYlIHJlYXJyYW5nZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PTAnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9MCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD0wIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PTAgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLVgwJyAnCisJZ2l0IGRpZmYgLVgwIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLVgwIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLVgwIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuZGlyc3RhdD0wJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wIGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wIGRpZmYgLS1kaXJzdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdAorICAgMi4xJSBjaGFuZ2VkLworICAxMC44JSBkc3QvY29weS9jaGFuZ2VkLworICAxMC44JSBkc3QvY29weS9yZWFycmFuZ2VkLworICAxMC44JSBkc3QvY29weS91bmNoYW5nZWQvCisgIDMyLjUlIGRzdC9jb3B5LworICAxMC44JSBkc3QvbW92ZS9jaGFuZ2VkLworICAxMC44JSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAxMC44JSBkc3QvbW92ZS91bmNoYW5nZWQvCisgIDMyLjUlIGRzdC9tb3ZlLworICA2NS4xJSBkc3QvCisgICAwLjAlIHJlYXJyYW5nZWQvCisgIDEwLjglIHNyYy9tb3ZlL2NoYW5nZWQvCisgIDEwLjglIHNyYy9tb3ZlL3JlYXJyYW5nZWQvCisgIDEwLjglIHNyYy9tb3ZlL3VuY2hhbmdlZC8KKyAgMzIuNSUgc3JjL21vdmUvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X00KKyAgIDUuOCUgY2hhbmdlZC8KKyAgMjkuMyUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMjkuMyUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMjkuMyUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICA4OC4wJSBkc3QvY29weS8KKyAgIDUuOCUgZHN0L21vdmUvY2hhbmdlZC8KKyAgIDAuMSUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgIDUuOSUgZHN0L21vdmUvCisgIDk0LjAlIGRzdC8KKyAgIDAuMSUgcmVhcnJhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MKKyAgMzIuNiUgY2hhbmdlZC8KKyAgMzIuNiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgIDAuNiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMzMuMyUgZHN0L2NvcHkvCisgIDMyLjYlIGRzdC9tb3ZlL2NoYW5nZWQvCisgICAwLjYlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgIDMzLjMlIGRzdC9tb3ZlLworICA2Ni42JSBkc3QvCisgICAwLjYlIHJlYXJyYW5nZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PTAgLS1jdW11bGF0aXZlJyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0PTAgLS1jdW11bGF0aXZlIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PTAgLS1jdW11bGF0aXZlIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PTAgLS1jdW11bGF0aXZlIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdD0wLGN1bXVsYXRpdmUnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9MCxjdW11bGF0aXZlIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PTAsY3VtdWxhdGl2ZSAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD0wLGN1bXVsYXRpdmUgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLVgwLGN1bXVsYXRpdmUnICcKKwlnaXQgZGlmZiAtWDAsY3VtdWxhdGl2ZSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC1YMCxjdW11bGF0aXZlIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLVgwLGN1bXVsYXRpdmUgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5kaXJzdGF0PTAsY3VtdWxhdGl2ZScgJworCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MCxjdW11bGF0aXZlIGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wLGN1bXVsYXRpdmUgZGlmZiAtLWRpcnN0YXQgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTAsY3VtdWxhdGl2ZSBkaWZmIC0tZGlyc3RhdCAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmRpcnN0YXQ9MCAmIC0tZGlyc3RhdD1jdW11bGF0aXZlJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wIGRpZmYgLS1kaXJzdGF0PWN1bXVsYXRpdmUgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTAgZGlmZiAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MCBkaWZmIC0tZGlyc3RhdD1jdW11bGF0aXZlIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdAorICAgOS4wJSBjaGFuZ2VkLworICAgOS4wJSBkc3QvY29weS9jaGFuZ2VkLworICAgOS4wJSBkc3QvY29weS9yZWFycmFuZ2VkLworICAgOS4wJSBkc3QvY29weS91bmNoYW5nZWQvCisgICA5LjAlIGRzdC9tb3ZlL2NoYW5nZWQvCisgICA5LjAlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgICA5LjAlIGRzdC9tb3ZlL3VuY2hhbmdlZC8KKyAgIDkuMCUgcmVhcnJhbmdlZC8KKyAgIDkuMCUgc3JjL21vdmUvY2hhbmdlZC8KKyAgIDkuMCUgc3JjL21vdmUvcmVhcnJhbmdlZC8KKyAgIDkuMCUgc3JjL21vdmUvdW5jaGFuZ2VkLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9NCisgIDE0LjIlIGNoYW5nZWQvCisgIDE0LjIlIGRzdC9jb3B5L2NoYW5nZWQvCisgIDE0LjIlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDE0LjIlIGRzdC9jb3B5L3VuY2hhbmdlZC8KKyAgMTQuMiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTQuMiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMTQuMiUgcmVhcnJhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MKKyAgMTYuNiUgY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMTYuNiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTYuNiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMTYuNiUgcmVhcnJhbmdlZC8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQtYnktZmlsZScgJworCWdpdCBkaWZmIC0tZGlyc3RhdC1ieS1maWxlIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0LWJ5LWZpbGUgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQtYnktZmlsZSAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQ9ZmlsZXMnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5kaXJzdGF0PWZpbGVzJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1maWxlcyBkaWZmIC0tZGlyc3RhdCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9ZmlsZXMgZGlmZiAtLWRpcnN0YXQgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PWZpbGVzIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdAorICAyNy4yJSBkc3QvY29weS8KKyAgMjcuMiUgZHN0L21vdmUvCisgIDI3LjIlIHNyYy9tb3ZlLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9NCisgIDE0LjIlIGNoYW5nZWQvCisgIDE0LjIlIGRzdC9jb3B5L2NoYW5nZWQvCisgIDE0LjIlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDE0LjIlIGRzdC9jb3B5L3VuY2hhbmdlZC8KKyAgMTQuMiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTQuMiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMTQuMiUgcmVhcnJhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MKKyAgMTYuNiUgY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMTYuNiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTYuNiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMTYuNiUgcmVhcnJhbmdlZC8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQtYnktZmlsZT0xMCcgJworCWdpdCBkaWZmIC0tZGlyc3RhdC1ieS1maWxlPTEwIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0LWJ5LWZpbGU9MTAgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQtYnktZmlsZT0xMCAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQ9ZmlsZXMsMTAnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsMTAgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsMTAgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsMTAgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5kaXJzdGF0PTEwLGZpbGVzJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0xMCxmaWxlcyBkaWZmIC0tZGlyc3RhdCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MTAsZmlsZXMgZGlmZiAtLWRpcnN0YXQgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTEwLGZpbGVzIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdAorICAgOS4wJSBjaGFuZ2VkLworICAgOS4wJSBkc3QvY29weS9jaGFuZ2VkLworICAgOS4wJSBkc3QvY29weS9yZWFycmFuZ2VkLworICAgOS4wJSBkc3QvY29weS91bmNoYW5nZWQvCisgIDI3LjIlIGRzdC9jb3B5LworICAgOS4wJSBkc3QvbW92ZS9jaGFuZ2VkLworICAgOS4wJSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAgOS4wJSBkc3QvbW92ZS91bmNoYW5nZWQvCisgIDI3LjIlIGRzdC9tb3ZlLworICA1NC41JSBkc3QvCisgICA5LjAlIHJlYXJyYW5nZWQvCisgICA5LjAlIHNyYy9tb3ZlL2NoYW5nZWQvCisgICA5LjAlIHNyYy9tb3ZlL3JlYXJyYW5nZWQvCisgICA5LjAlIHNyYy9tb3ZlL3VuY2hhbmdlZC8KKyAgMjcuMiUgc3JjL21vdmUvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X00KKyAgMTQuMiUgY2hhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICA0Mi44JSBkc3QvY29weS8KKyAgMTQuMiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTQuMiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMjguNSUgZHN0L21vdmUvCisgIDcxLjQlIGRzdC8KKyAgMTQuMiUgcmVhcnJhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MKKyAgMTYuNiUgY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMzMuMyUgZHN0L2NvcHkvCisgIDE2LjYlIGRzdC9tb3ZlL2NoYW5nZWQvCisgIDE2LjYlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgIDMzLjMlIGRzdC9tb3ZlLworICA2Ni42JSBkc3QvCisgIDE2LjYlIHJlYXJyYW5nZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0LWJ5LWZpbGUgLS1jdW11bGF0aXZlJyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0LWJ5LWZpbGUgLS1jdW11bGF0aXZlIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0LWJ5LWZpbGUgLS1jdW11bGF0aXZlIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0LWJ5LWZpbGUgLS1jdW11bGF0aXZlIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlJyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuZGlyc3RhdD1jdW11bGF0aXZlLGZpbGVzJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1jdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1jdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1jdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdAorICAyNy4yJSBkc3QvY29weS8KKyAgMjcuMiUgZHN0L21vdmUvCisgIDU0LjUlIGRzdC8KKyAgMjcuMiUgc3JjL21vdmUvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X00KKyAgMTQuMiUgY2hhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICA0Mi44JSBkc3QvY29weS8KKyAgMTQuMiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTQuMiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMjguNSUgZHN0L21vdmUvCisgIDcxLjQlIGRzdC8KKyAgMTQuMiUgcmVhcnJhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MKKyAgMTYuNiUgY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMzMuMyUgZHN0L2NvcHkvCisgIDE2LjYlIGRzdC9tb3ZlL2NoYW5nZWQvCisgIDE2LjYlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgIDMzLjMlIGRzdC9tb3ZlLworICA2Ni42JSBkc3QvCisgIDE2LjYlIHJlYXJyYW5nZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMTAnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwxMCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDEwIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMTAgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5kaXJzdGF0PTEwLGN1bXVsYXRpdmUsZmlsZXMnICcKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTEwLGN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTEwLGN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTEwLGN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0CisgIDI3LjIlIGRzdC9jb3B5LworICAyNy4yJSBkc3QvbW92ZS8KKyAgNTQuNSUgZHN0LworICAyNy4yJSBzcmMvbW92ZS8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfTQorICA0Mi44JSBkc3QvY29weS8KKyAgMjguNSUgZHN0L21vdmUvCisgIDcxLjQlIGRzdC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MKKyAgMzMuMyUgZHN0L2NvcHkvCisgIDMzLjMlIGRzdC9tb3ZlLworICA2Ni42JSBkc3QvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMTYuNycgJworCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDE2LjcgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwxNi43IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMTYuNyAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmRpcnN0YXQ9MTYuNyxjdW11bGF0aXZlLGZpbGVzJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0xNi43LGN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTE2LjcsY3VtdWxhdGl2ZSxmaWxlcyBkaWZmIC0tZGlyc3RhdCAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MTYuNyxjdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuZGlyc3RhdD0xNi43MCxjdW11bGF0aXZlLGZpbGVzJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0xNi43MCxjdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0xNi43MCxjdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0xNi43MCxjdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDI3LjInICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwyNy4yIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMjcuMiAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDI3LjIgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMjcuMDknICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwyNy4wOSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDI3LjA5IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMjcuMDkgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0CisgIDEwLjYlIGRzdC9jb3B5L2NoYW5nZWQvCisgIDEwLjYlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDEwLjYlIGRzdC9jb3B5L3VuY2hhbmdlZC8KKyAgMTAuNiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTAuNiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMTAuNiUgZHN0L21vdmUvdW5jaGFuZ2VkLworICAxMC42JSBzcmMvbW92ZS9jaGFuZ2VkLworICAxMC42JSBzcmMvbW92ZS9yZWFycmFuZ2VkLworICAxMC42JSBzcmMvbW92ZS91bmNoYW5nZWQvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X00KKyAgIDUuMiUgY2hhbmdlZC8KKyAgMjYuMyUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMjYuMyUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMjYuMyUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICAgNS4yJSBkc3QvbW92ZS9jaGFuZ2VkLworICAgNS4yJSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAgNS4yJSByZWFycmFuZ2VkLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9DQworICAxNi42JSBjaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9jaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9yZWFycmFuZ2VkLworICAxNi42JSBkc3QvbW92ZS9jaGFuZ2VkLworICAxNi42JSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAxNi42JSByZWFycmFuZ2VkLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdD1saW5lcycgJworCWdpdCBkaWZmIC0tZGlyc3RhdD1saW5lcyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1saW5lcyAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1saW5lcyAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmRpcnN0YXQ9bGluZXMnICcKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PWxpbmVzIGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1saW5lcyBkaWZmIC0tZGlyc3RhdCAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9bGluZXMgZGlmZiAtLWRpcnN0YXQgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0CisgICAyLjElIGNoYW5nZWQvCisgIDEwLjYlIGRzdC9jb3B5L2NoYW5nZWQvCisgIDEwLjYlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDEwLjYlIGRzdC9jb3B5L3VuY2hhbmdlZC8KKyAgMTAuNiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTAuNiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMTAuNiUgZHN0L21vdmUvdW5jaGFuZ2VkLworICAgMi4xJSByZWFycmFuZ2VkLworICAxMC42JSBzcmMvbW92ZS9jaGFuZ2VkLworICAxMC42JSBzcmMvbW92ZS9yZWFycmFuZ2VkLworICAxMC42JSBzcmMvbW92ZS91bmNoYW5nZWQvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X00KKyAgIDUuMiUgY2hhbmdlZC8KKyAgMjYuMyUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMjYuMyUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMjYuMyUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICAgNS4yJSBkc3QvbW92ZS9jaGFuZ2VkLworICAgNS4yJSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAgNS4yJSByZWFycmFuZ2VkLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9DQworICAxNi42JSBjaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9jaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9yZWFycmFuZ2VkLworICAxNi42JSBkc3QvbW92ZS9jaGFuZ2VkLworICAxNi42JSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAxNi42JSByZWFycmFuZ2VkLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdD1saW5lcywwJyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWxpbmVzLDAgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9bGluZXMsMCAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1saW5lcywwIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuZGlyc3RhdD0wLGxpbmVzJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wLGxpbmVzIGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wLGxpbmVzIGRpZmYgLS1kaXJzdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wLGxpbmVzIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdD1mdXR1cmVfcGFyYW0sbGluZXMsMCBzaG91bGQgZmFpbCBsb3VkbHknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWRpcnN0YXQ9ZnV0dXJlX3BhcmFtLGxpbmVzLDAgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgMj5hY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2RlYnVnICJjYXQgYWN0dWFsX2Vycm9yIiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9pMThuZ3JlcCAtcSAiZnV0dXJlX3BhcmFtIiBhY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICJcLS1kaXJzdGF0IiBhY3R1YWxfZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PWR1bW15MSxjdW11bGF0aXZlLDJkdW1teSBzaG91bGQgcmVwb3J0IGJvdGggdW5yZWNvZ25pemVkIHBhcmFtZXRlcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWRpcnN0YXQ9ZHVtbXkxLGN1bXVsYXRpdmUsMmR1bW15IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0IDI+YWN0dWFsX2Vycm9yICYmCisJdGVzdF9kZWJ1ZyAiY2F0IGFjdHVhbF9lcnJvciIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfaTE4bmdyZXAgLXEgImR1bW15MSIgYWN0dWFsX2Vycm9yICYmCisJdGVzdF9pMThuZ3JlcCAtcSAiMmR1bW15IiBhY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICJcLS1kaXJzdGF0IiBhY3R1YWxfZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5kaXJzdGF0PWZ1dHVyZV9wYXJhbSwwLGxpbmVzIHNob3VsZCB3YXJuLCBidXQgc3RpbGwgd29yaycgJworCWdpdCAtYyBkaWZmLmRpcnN0YXQ9ZnV0dXJlX3BhcmFtLDAsbGluZXMgZGlmZiAtLWRpcnN0YXQgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgMj5hY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2RlYnVnICJjYXQgYWN0dWFsX2Vycm9yIiAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfaTE4bmdyZXAgLXEgImZ1dHVyZV9wYXJhbSIgYWN0dWFsX2Vycm9yICYmCisJdGVzdF9pMThuZ3JlcCAtcSAiZGlmZlxcLmRpcnN0YXQiIGFjdHVhbF9lcnJvciAmJgorCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1mdXR1cmVfcGFyYW0sMCxsaW5lcyBkaWZmIC0tZGlyc3RhdCAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NIDI+YWN0dWFsX2Vycm9yICYmCisJdGVzdF9kZWJ1ZyAiY2F0IGFjdHVhbF9lcnJvciIgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9pMThuZ3JlcCAtcSAiZnV0dXJlX3BhcmFtIiBhY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICJkaWZmXFwuZGlyc3RhdCIgYWN0dWFsX2Vycm9yICYmCisKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PWZ1dHVyZV9wYXJhbSwwLGxpbmVzIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDIDI+YWN0dWFsX2Vycm9yICYmCisJdGVzdF9kZWJ1ZyAiY2F0IGFjdHVhbF9lcnJvciIgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICJmdXR1cmVfcGFyYW0iIGFjdHVhbF9lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgLXEgImRpZmZcXC5kaXJzdGF0IiBhY3R1YWxfZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG9ydHN0YXQgLS1kaXJzdGF0IHNob3VsZCBvdXRwdXQgb25seSBvbmUgZGlyc3RhdCcgJworCWdpdCBkaWZmIC0tc2hvcnRzdGF0IC0tZGlyc3RhdD1jaGFuZ2VzIEhFQUReLi5IRUFEID5vdXQgJiYKKwlncmVwICIgZHN0L2NvcHkvY2hhbmdlZC8kIiBvdXQgPmFjdHVhbF9kaWZmX3Nob3J0c3RhdF9kaXJzdGF0X2NoYW5nZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbF9kaWZmX3Nob3J0c3RhdF9kaXJzdGF0X2NoYW5nZXMgJiYKKworCWdpdCBkaWZmIC0tc2hvcnRzdGF0IC0tZGlyc3RhdD1saW5lcyBIRUFEXi4uSEVBRCA+b3V0ICYmCisJZ3JlcCAiIGRzdC9jb3B5L2NoYW5nZWQvJCIgb3V0ID5hY3R1YWxfZGlmZl9zaG9ydHN0YXRfZGlyc3RhdF9saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsX2RpZmZfc2hvcnRzdGF0X2RpcnN0YXRfbGluZXMgJiYKKworCWdpdCBkaWZmIC0tc2hvcnRzdGF0IC0tZGlyc3RhdD1maWxlcyBIRUFEXi4uSEVBRCA+b3V0ICYmCisJZ3JlcCAiIGRzdC9jb3B5L2NoYW5nZWQvJCIgb3V0ID5hY3R1YWxfZGlmZl9zaG9ydHN0YXRfZGlyc3RhdF9maWxlcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsX2RpZmZfc2hvcnRzdGF0X2RpcnN0YXRfZmlsZXMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDQ4LWRpZmYtY29tYmluZWQtYmluYXJ5LnNoIGIvdC90NDA0OC1kaWZmLWNvbWJpbmVkLWJpbmFyeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZjlhZDlmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA0OC1kaWZmLWNvbWJpbmVkLWJpbmFyeS5zaApAQCAtMCwwICsxLDIxOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NvbWJpbmVkIGFuZCBtZXJnZSBkaWZmIGhhbmRsZSBiaW5hcnkgZmlsZXMgYW5kIHRleHRjb252JworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJpbmFyeSBtZXJnZSBjb25mbGljdCcgJworCWVjaG8gb25lUTEgfCBxX3RvX251bCA+YmluYXJ5ICYmCisJZ2l0IGFkZCBiaW5hcnkgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWVjaG8gdHdvUTIgfCBxX3RvX251bCA+YmluYXJ5ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0d28gJiYKKwl0d289JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDpiaW5hcnkpICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaC1iaW5hcnkgSEVBRF4gJiYKKwllY2hvIHRocmVlUTMgfCBxX3RvX251bCA+YmluYXJ5ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0aHJlZSAmJgorCXRocmVlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6YmluYXJ5KSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwllY2hvIHJlc29sdmVkUWhvb3JheSB8IHFfdG9fbnVsID5iaW5hcnkgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHJlc29sdmVkICYmCisJcmVzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6YmluYXJ5KQorJworCitjYXQgPmV4cGVjdCA8PEVPRgorcmVzb2x2ZWQKKworZGlmZiAtLWdpdCBhL2JpbmFyeSBiL2JpbmFyeQoraW5kZXggJHRocmVlLi4kcmVzIDEwMDY0NAorQmluYXJ5IGZpbGVzIGEvYmluYXJ5IGFuZCBiL2JpbmFyeSBkaWZmZXIKK3Jlc29sdmVkCisKK2RpZmYgLS1naXQgYS9iaW5hcnkgYi9iaW5hcnkKK2luZGV4ICR0d28uLiRyZXMgMTAwNjQ0CitCaW5hcnkgZmlsZXMgYS9iaW5hcnkgYW5kIGIvYmluYXJ5IGRpZmZlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1tIGluZGljYXRlcyBiaW5hcnktbmVzcycgJworCWdpdCBzaG93IC0tZm9ybWF0PSVzIC1tID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCityZXNvbHZlZAorCitkaWZmIC0tY29tYmluZWQgYmluYXJ5CitpbmRleCAkdGhyZWUsJHR3by4uJHJlcworQmluYXJ5IGZpbGVzIGRpZmZlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1jIGluZGljYXRlcyBiaW5hcnktbmVzcycgJworCWdpdCBzaG93IC0tZm9ybWF0PSVzIC1jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCityZXNvbHZlZAorCitkaWZmIC0tY2MgYmluYXJ5CitpbmRleCAkdGhyZWUsJHR3by4uJHJlcworQmluYXJ5IGZpbGVzIGRpZmZlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tY2MgaW5kaWNhdGVzIGJpbmFyeS1uZXNzJyAnCisJZ2l0IHNob3cgLS1mb3JtYXQ9JXMgLS1jYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBub24tYmluYXJ5IHdpdGggYmluYXJ5IGF0dHJpYnV0ZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBvbmUgdGV4dCAmJgorCXRlc3RfY29tbWl0IHR3byB0ZXh0ICYmCisJdHdvPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6dGV4dCkgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoLXRleHQgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSB0ZXh0ICYmCisJdGhyZWU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDp0ZXh0KSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCByZXNvbHZlZCB0ZXh0ICYmCisJcmVzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6dGV4dCkgJiYKKwllY2hvIHRleHQgLWRpZmYgPi5naXRhdHRyaWJ1dGVzCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCityZXNvbHZlZAorCitkaWZmIC0tZ2l0IGEvdGV4dCBiL3RleHQKK2luZGV4ICR0aHJlZS4uJHJlcyAxMDA2NDQKK0JpbmFyeSBmaWxlcyBhL3RleHQgYW5kIGIvdGV4dCBkaWZmZXIKK3Jlc29sdmVkCisKK2RpZmYgLS1naXQgYS90ZXh0IGIvdGV4dAoraW5kZXggJHR3by4uJHJlcyAxMDA2NDQKK0JpbmFyeSBmaWxlcyBhL3RleHQgYW5kIGIvdGV4dCBkaWZmZXIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtbSByZXNwZWN0cyBiaW5hcnkgYXR0cmlidXRlJyAnCisJZ2l0IHNob3cgLS1mb3JtYXQ9JXMgLW0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK3Jlc29sdmVkCisKK2RpZmYgLS1jb21iaW5lZCB0ZXh0CitpbmRleCAkdGhyZWUsJHR3by4uJHJlcworQmluYXJ5IGZpbGVzIGRpZmZlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1jIHJlc3BlY3RzIGJpbmFyeSBhdHRyaWJ1dGUnICcKKwlnaXQgc2hvdyAtLWZvcm1hdD0lcyAtYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorcmVzb2x2ZWQKKworZGlmZiAtLWNjIHRleHQKK2luZGV4ICR0aHJlZSwkdHdvLi4kcmVzCitCaW5hcnkgZmlsZXMgZGlmZmVyCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1jYyByZXNwZWN0cyBiaW5hcnkgYXR0cmlidXRlJyAnCisJZ2l0IHNob3cgLS1mb3JtYXQ9JXMgLS1jYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXh0Y29udiBhdHRyaWJ1dGUnICcKKwllY2hvICJ0ZXh0IGRpZmY9dXBjYXNlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29uZmlnIGRpZmYudXBjYXNlLnRleHRjb252ICJ0ciBhLXogQS1aIDwiCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCityZXNvbHZlZAorCitkaWZmIC0tZ2l0IGEvdGV4dCBiL3RleHQKK2luZGV4ICR0aHJlZS4uJHJlcyAxMDA2NDQKKy0tLSBhL3RleHQKKysrKyBiL3RleHQKK0BAIC0xICsxIEBACistVEhSRUUKKytSRVNPTFZFRAorcmVzb2x2ZWQKKworZGlmZiAtLWdpdCBhL3RleHQgYi90ZXh0CitpbmRleCAkdHdvLi4kcmVzIDEwMDY0NAorLS0tIGEvdGV4dAorKysrIGIvdGV4dAorQEAgLTEgKzEgQEAKKy1UV08KKytSRVNPTFZFRAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1tIHJlc3BlY3RzIHRleHRjb252IGF0dHJpYnV0ZScgJworCWdpdCBzaG93IC0tZm9ybWF0PSVzIC1tID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCityZXNvbHZlZAorCitkaWZmIC0tY29tYmluZWQgdGV4dAoraW5kZXggJHRocmVlLCR0d28uLiRyZXMKKy0tLSBhL3RleHQKKysrKyBiL3RleHQKK0BAQCAtMSwxIC0xLDEgKzEsMSBAQEAKKy0gVEhSRUUKKyAtVFdPCisrK1JFU09MVkVECitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLWMgcmVzcGVjdHMgdGV4dGNvbnYgYXR0cmlidXRlJyAnCisJZ2l0IHNob3cgLS1mb3JtYXQ9JXMgLWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK3Jlc29sdmVkCisKK2RpZmYgLS1jYyB0ZXh0CitpbmRleCAkdGhyZWUsJHR3by4uJHJlcworLS0tIGEvdGV4dAorKysrIGIvdGV4dAorQEBAIC0xLDEgLTEsMSArMSwxIEBAQAorLSBUSFJFRQorIC1UV08KKysrUkVTT0xWRUQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLWNjIHJlc3BlY3RzIHRleHRjb252IGF0dHJpYnV0ZScgJworCWdpdCBzaG93IC0tZm9ybWF0PSVzIC0tY2MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2RpZmYgLS1jb21iaW5lZCB0ZXh0CitpbmRleCAkdGhyZWUsJHR3by4uJHJlcworLS0tIGEvdGV4dAorKysrIGIvdGV4dAorQEBAIC0xLDEgLTEsMSArMSwxIEBAQAorLSB0aHJlZQorIC10d28KKysrcmVzb2x2ZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIHBsdW1iaW5nIGRvZXMgbm90IHJlc3BlY3QgdGV4dGNvbnYnICcKKwlnaXQgZGlmZi10cmVlIEhFQUQgLWMgLXAgPmZ1bGwgJiYKKwl0YWlsIC1uICsyIGZ1bGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2RpZmYgLS1jYyB0ZXh0CitpbmRleCAkdGhyZWUsJHR3by4uMDAwMDAwMAorLS0tIGEvdGV4dAorKysrIGIvdGV4dAorQEBAIC0xLDEgLTEsMSArMSw1IEBAQAorKys8PDw8PDw8IEhFQUQKKyArVEhSRUUKKysrPT09PT09PQorKyBUV08KKysrPj4+Pj4+PiBNQVNURVIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLWNjIHJlc3BlY3RzIHRleHRjb252IG9uIHdvcmt0cmVlIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCWdpdCBkaWZmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA0OS1kaWZmLXN0YXQtY291bnQuc2ggYi90L3Q0MDQ5LWRpZmYtc3RhdC1jb3VudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMzQxMjE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDA0OS1kaWZmLXN0YXQtY291bnQuc2gKQEAgLTAsMCArMSw2OCBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4KKwordGVzdF9kZXNjcmlwdGlvbj0nZGlmZiAtLXN0YXQtY291bnQnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwk+YSAmJgorCT5iICYmCisJPmMgJiYKKwk+ZCAmJgorCWdpdCBhZGQgYSBiIGMgZCAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RlLW9ubHkgY2hhbmdlIHNob3cgYXMgYSAwLWxpbmUgY2hhbmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfY2htb2QgK3ggYiBkICYmCisJZWNobyBhID5hICYmCisJZWNobyBjID5jICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBhIHwgMSArCisJIGIgfCAwCisJIC4uLgorCSA0IGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCUVPRgorCWdpdCBkaWZmIC0tc3RhdCAtLXN0YXQtY291bnQ9MiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaW5hcnkgY2hhbmdlcyBkbyBub3QgY291bnQgaW4gbGluZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBhID5hICYmCisJZWNobyBjID5jICYmCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTEucG5nID5kICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBhIHwgMSArCisJIGMgfCAxICsKKwkgLi4uCisJIDMgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisJRU9GCisJZ2l0IGRpZmYgLS1zdGF0IC0tc3RhdC1jb3VudD0yID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGNsdWRlIHVubWVyZ2VkIGVudHJpZXMgZnJvbSB0b3RhbCBmaWxlIGNvdW50JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gYSA+YSAmJgorCWVjaG8gYiA+YiAmJgorCWdpdCBscy1maWxlcyAtcyBhID54ICYmCisJZ2l0IHJtIC1mIGQgJiYKKwlmb3Igc3RhZ2UgaW4gMSAyIDMKKwlkbworCQlzZWQgLWUgInMvIDAJYS8gJHN0YWdlCWQvIiB4CisJZG9uZSB8CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwllY2hvIGQgPmQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIGEgfCAxICsKKwkgYiB8IDEgKworCSAuLi4KKwkgMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKwlFT0YKKwlnaXQgZGlmZiAtLXN0YXQgLS1zdGF0LWNvdW50PTIgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA1MC1kaWZmLWhpc3RvZ3JhbS5zaCBiL3QvdDQwNTAtZGlmZi1oaXN0b2dyYW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmQzZTg2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNTAtZGlmZi1oaXN0b2dyYW0uc2gKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2hpc3RvZ3JhbSBkaWZmIGFsZ29yaXRobScKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1kaWZmLWFsdGVybmF0aXZlLnNoCisKK3Rlc3RfZGlmZl9mcm9ibml0eiAiaGlzdG9ncmFtIgorCit0ZXN0X2RpZmZfdW5pcXVlICJoaXN0b2dyYW0iCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA1MS1kaWZmLWZ1bmN0aW9uLWNvbnRleHQuc2ggYi90L3Q0MDUxLWRpZmYtZnVuY3Rpb24tY29udGV4dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ODM4YTFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA1MS1kaWZmLWZ1bmN0aW9uLWNvbnRleHQuc2gKQEAgLTAsMCArMSwyMTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIGZ1bmN0aW9uIGNvbnRleHQnCisKKy4gLi90ZXN0LWxpYi5zaAorCitkaXI9IiRURVNUX0RJUkVDVE9SWS90NDA1MSIKKworY29tbWl0X2FuZF90YWcgKCkgeworCXRhZz0kMSAmJgorCXNoaWZ0ICYmCisJZ2l0IGFkZCAiJEAiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiJHRhZyIgJiYKKwlnaXQgdGFnICIkdGFnIgorfQorCitmaXJzdF9jb250ZXh0X2xpbmUgKCkgeworCWF3ayAnCisJCWZvdW5kIHtwcmludDsgZXhpdH0KKwkJL15AQC8ge2ZvdW5kID0gMX0KKwknCit9CisKK2xhc3RfY29udGV4dF9saW5lICgpIHsKKwlzZWQgLW5lIFwkcAorfQorCitjaGVja19kaWZmICgpIHsKKwluYW1lPSQxCisJZGVzYz0kMgorCW9wdGlvbnM9Ii1XICQzIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGRlc2MiICcKKwkJZ2l0IGRpZmYgJG9wdGlvbnMgIiRuYW1lXiIgIiRuYW1lIiA+IiRuYW1lLmRpZmYiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnIGRpZmYgYXBwbGllcycgJworCQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJCWdpdCBjaGVja291dCAtLWRldGFjaCAiJG5hbWVeIiAmJgorCQlnaXQgYXBwbHkgLS1pbmRleCAiJG5hbWUuZGlmZiIgJiYKKwkJZ2l0IGRpZmYgLS1leGl0LWNvZGUgIiRuYW1lIgorCScKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgIiRkaXIvaW5jbHVkZXMuYyIgIiRkaXIvZHVtbXkuYyIgIiRkaXIvZHVtbXkuYyIgIiRkaXIvaGVsbG8uYyIgXAorCQkiJGRpci9kdW1teS5jIiAiJGRpci9kdW1teS5jIiA+ZmlsZS5jICYmCisJY29tbWl0X2FuZF90YWcgaW5pdGlhbCBmaWxlLmMgJiYKKworCWdyZXAgLXYgImRlbGV0ZSBtZSBmcm9tIGhlbGxvIiA8ZmlsZS5jID5maWxlLmMubmV3ICYmCisJbXYgZmlsZS5jLm5ldyBmaWxlLmMgJiYKKwljb21taXRfYW5kX3RhZyBjaGFuZ2VkX2hlbGxvIGZpbGUuYyAmJgorCisJZ3JlcCAtdiAiZGVsZXRlIG1lIGZyb20gaW5jbHVkZXMiIDxmaWxlLmMgPmZpbGUuYy5uZXcgJiYKKwltdiBmaWxlLmMubmV3IGZpbGUuYyAmJgorCWNvbW1pdF9hbmRfdGFnIGNoYW5nZWRfaW5jbHVkZXMgZmlsZS5jICYmCisKKwljYXQgIiRkaXIvYXBwZW5kZWQxLmMiID4+ZmlsZS5jICYmCisJY29tbWl0X2FuZF90YWcgYXBwZW5kZWQgZmlsZS5jICYmCisKKwljYXQgIiRkaXIvYXBwZW5kZWQyLmMiID4+ZmlsZS5jICYmCisJY29tbWl0X2FuZF90YWcgZXh0ZW5kZWQgZmlsZS5jICYmCisKKwlncmVwIC12ICJCZWdpbiBvZiBzZWNvbmQgcGFydCIgPGZpbGUuYyA+ZmlsZS5jLm5ldyAmJgorCW12IGZpbGUuYy5uZXcgZmlsZS5jICYmCisJY29tbWl0X2FuZF90YWcgbG9uZ19jb21tb25fdGFpbCBmaWxlLmMgJiYKKworCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJY2F0ICIkZGlyL2hlbGxvLmMiICIkZGlyL2R1bW15LmMiID5maWxlLmMgJiYKKwljb21taXRfYW5kX3RhZyBoZWxsb19kdW1teSBmaWxlLmMgJiYKKworCSMgb3ZlcmxhcCBmdW5jdGlvbiBjb250ZXh0IG9mIDFzdCBjaGFuZ2UgYW5kIC11IGNvbnRleHQgb2YgMm5kIGNoYW5nZQorCWdyZXAgLXYgImRlbGV0ZSBtZSBmcm9tIGhlbGxvIiA8IiRkaXIvaGVsbG8uYyIgPmZpbGUuYyAmJgorCXNlZCAiMmFcXAorCSAgICAgZXh0cmEgbGluZSIgPCIkZGlyL2R1bW15LmMiID4+ZmlsZS5jICYmCisJY29tbWl0X2FuZF90YWcgY2hhbmdlZF9oZWxsb19kdW1teSBmaWxlLmMgJiYKKworCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJZ3JlcCAtdiAiZGVsZXRlIG1lIGZyb20gaGVsbG8iIDxmaWxlLmMgPmZpbGUuYy5uZXcgJiYKKwltdiBmaWxlLmMubmV3IGZpbGUuYyAmJgorCWNhdCAiJGRpci9hcHBlbmRlZDEuYyIgPj5maWxlLmMgJiYKKwljb21taXRfYW5kX3RhZyBjaGFuZ2VkX2hlbGxvX2FwcGVuZGVkIGZpbGUuYworJworCitjaGVja19kaWZmIGNoYW5nZWRfaGVsbG8gJ2NoYW5nZWQgZnVuY3Rpb24nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBjb250ZXh0IGluY2x1ZGVzIGNvbW1lbnQnICcKKwlncmVwICJeIC4qSGVsbG8gY29tbWVudCIgY2hhbmdlZF9oZWxsby5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBjb250ZXh0IGluY2x1ZGVzIGJlZ2luJyAnCisJZ3JlcCAiXiAuKkJlZ2luIG9mIGhlbGxvIiBjaGFuZ2VkX2hlbGxvLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgaW5jbHVkZXMgZW5kJyAnCisJZ3JlcCAiXiAuKkVuZCBvZiBoZWxsbyIgY2hhbmdlZF9oZWxsby5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBjb250ZXh0IGRvZXMgbm90IGluY2x1ZGUgb3RoZXIgZnVuY3Rpb25zJyAnCisJdGVzdCAkKGdyZXAgLWMgIl5bICstXS4qQmVnaW4iIGNoYW5nZWRfaGVsbG8uZGlmZikgLWxlIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgZG9lcyBub3QgaW5jbHVkZSBwcmVjZWRpbmcgZW1wdHkgbGluZXMnICcKKwl0ZXN0ICIkKGZpcnN0X2NvbnRleHRfbGluZSA8Y2hhbmdlZF9oZWxsby5kaWZmKSIgIT0gIiAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBjb250ZXh0IGRvZXMgbm90IGluY2x1ZGUgdHJhaWxpbmcgZW1wdHkgbGluZXMnICcKKwl0ZXN0ICIkKGxhc3RfY29udGV4dF9saW5lIDxjaGFuZ2VkX2hlbGxvLmRpZmYpIiAhPSAiICIKKycKKworY2hlY2tfZGlmZiBjaGFuZ2VkX2luY2x1ZGVzICdjaGFuZ2VkIGluY2x1ZGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBpbmNsdWRlcyBiZWdpbicgJworCWdyZXAgIl4gLipCZWdpbi5oIiBjaGFuZ2VkX2luY2x1ZGVzLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgaW5jbHVkZXMgZW5kJyAnCisJZ3JlcCAiXiAuKkVuZC5oIiBjaGFuZ2VkX2luY2x1ZGVzLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgZG9lcyBub3QgaW5jbHVkZSBvdGhlciBmdW5jdGlvbnMnICcKKwl0ZXN0ICQoZ3JlcCAtYyAiXlsgKy1dLipCZWdpbiIgY2hhbmdlZF9pbmNsdWRlcy5kaWZmKSAtbGUgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBkb2VzIG5vdCBpbmNsdWRlIHRyYWlsaW5nIGVtcHR5IGxpbmVzJyAnCisJdGVzdCAiJChsYXN0X2NvbnRleHRfbGluZSA8Y2hhbmdlZF9pbmNsdWRlcy5kaWZmKSIgIT0gIiAiCisnCisKK2NoZWNrX2RpZmYgYXBwZW5kZWQgJ2FwcGVuZGVkIGZ1bmN0aW9uJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBpbmNsdWRlcyBiZWdpbicgJworCWdyZXAgIl5bK10uKkJlZ2luIG9mIGZpcnN0IHBhcnQiIGFwcGVuZGVkLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgaW5jbHVkZXMgZW5kJyAnCisJZ3JlcCAiXlsrXS4qRW5kIG9mIGZpcnN0IHBhcnQiIGFwcGVuZGVkLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgZG9lcyBub3QgaW5jbHVkZSBvdGhlciBmdW5jdGlvbnMnICcKKwl0ZXN0ICQoZ3JlcCAtYyAiXlsgKy1dLipCZWdpbiIgYXBwZW5kZWQuZGlmZikgLWxlIDEKKycKKworY2hlY2tfZGlmZiBleHRlbmRlZCAnYXBwZW5kZWQgZnVuY3Rpb24gcGFydCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgaW5jbHVkZXMgYmVnaW4nICcKKwlncmVwICJeIC4qQmVnaW4gb2YgZmlyc3QgcGFydCIgZXh0ZW5kZWQuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBpbmNsdWRlcyBlbmQnICcKKwlncmVwICJeWytdLipFbmQgb2Ygc2Vjb25kIHBhcnQiIGV4dGVuZGVkLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgZG9lcyBub3QgaW5jbHVkZSBvdGhlciBmdW5jdGlvbnMnICcKKwl0ZXN0ICQoZ3JlcCAtYyAiXlsgKy1dLipCZWdpbiIgZXh0ZW5kZWQuZGlmZikgLWxlIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgZG9lcyBub3QgaW5jbHVkZSBwcmVjZWRpbmcgZW1wdHkgbGluZXMnICcKKwl0ZXN0ICIkKGZpcnN0X2NvbnRleHRfbGluZSA8ZXh0ZW5kZWQuZGlmZikiICE9ICIgIgorJworCitjaGVja19kaWZmIGxvbmdfY29tbW9uX3RhaWwgJ2NoYW5nZSB3aXRoIGxvbmcgY29tbW9uIHRhaWwgYW5kIG5vIGNvbnRleHQnIC1VMAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBpbmNsdWRlcyBiZWdpbicgJworCWdyZXAgIl4gLipCZWdpbiBvZiBmaXJzdCBwYXJ0IiBsb25nX2NvbW1vbl90YWlsLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgaW5jbHVkZXMgZW5kJyAnCisJZ3JlcCAiXiAuKkVuZCBvZiBzZWNvbmQgcGFydCIgbG9uZ19jb21tb25fdGFpbC5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBjb250ZXh0IGRvZXMgbm90IGluY2x1ZGUgb3RoZXIgZnVuY3Rpb25zJyAnCisJdGVzdCAkKGdyZXAgLWMgIl5bICstXS4qQmVnaW4iIGxvbmdfY29tbW9uX3RhaWwuZGlmZikgLWxlIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgZG9lcyBub3QgaW5jbHVkZSBwcmVjZWRpbmcgZW1wdHkgbGluZXMnICcKKwl0ZXN0ICIkKGZpcnN0X2NvbnRleHRfbGluZSA8bG9uZ19jb21tb25fdGFpbC5kaWZmKSIgIT0gIiAiCisnCisKK2NoZWNrX2RpZmYgY2hhbmdlZF9oZWxsb19hcHBlbmRlZCAnY2hhbmdlZCBmdW5jdGlvbiBwbHVzIGFwcGVuZGVkIGZ1bmN0aW9uJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgY29udGV4dCBpbmNsdWRlcyBiZWdpbicgJworCWdyZXAgIl4gLipCZWdpbiBvZiBoZWxsbyIgY2hhbmdlZF9oZWxsb19hcHBlbmRlZC5kaWZmICYmCisJZ3JlcCAiXlsrXS4qQmVnaW4gb2YgZmlyc3QgcGFydCIgY2hhbmdlZF9oZWxsb19hcHBlbmRlZC5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBjb250ZXh0IGluY2x1ZGVzIGVuZCcgJworCWdyZXAgIl4gLipFbmQgb2YgaGVsbG8iIGNoYW5nZWRfaGVsbG9fYXBwZW5kZWQuZGlmZiAmJgorCWdyZXAgIl5bK10uKkVuZCBvZiBmaXJzdCBwYXJ0IiBjaGFuZ2VkX2hlbGxvX2FwcGVuZGVkLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgZG9lcyBub3QgaW5jbHVkZSBvdGhlciBmdW5jdGlvbnMnICcKKwl0ZXN0ICQoZ3JlcCAtYyAiXlsgKy1dLipCZWdpbiIgY2hhbmdlZF9oZWxsb19hcHBlbmRlZC5kaWZmKSAtbGUgMgorJworCitjaGVja19kaWZmIGNoYW5nZWRfaGVsbG9fZHVtbXkgJ2NoYW5nZWQgdHdvIGNvbnNlY3V0aXZlIGZ1bmN0aW9ucycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGNvbnRleHQgaW5jbHVkZXMgYmVnaW4nICcKKwlncmVwICJeIC4qQmVnaW4gb2YgaGVsbG8iIGNoYW5nZWRfaGVsbG9fZHVtbXkuZGlmZiAmJgorCWdyZXAgIl4gLipCZWdpbiBvZiBkdW1teSIgY2hhbmdlZF9oZWxsb19kdW1teS5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBjb250ZXh0IGluY2x1ZGVzIGVuZCcgJworCWdyZXAgIl4gLipFbmQgb2YgaGVsbG8iIGNoYW5nZWRfaGVsbG9fZHVtbXkuZGlmZiAmJgorCWdyZXAgIl4gLipFbmQgb2YgZHVtbXkiIGNoYW5nZWRfaGVsbG9fZHVtbXkuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgb3ZlcmxhcHBpbmcgaHVua3MgYXJlIG1lcmdlZCcgJworCXRlc3QgJChncmVwIC1jICJeQEAiIGNoYW5nZWRfaGVsbG9fZHVtbXkuZGlmZikgLWVxIDEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDUxL2FwcGVuZGVkMS5jIGIvdC90NDA1MS9hcHBlbmRlZDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY1NmYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA1MS9hcHBlbmRlZDEuYwpAQCAtMCwwICsxLDE1IEBACisKK2ludCBhcHBlbmRlZCh2b2lkKSAvLyBCZWdpbiBvZiBmaXJzdCBwYXJ0Cit7CisJaW50IGk7CisJY2hhciAqcyA9ICJhIHN0cmluZyI7CisKKwlwcmludGYoIiVzXG4iLCBzKTsKKworCWZvciAoaSA9IDk5OworCSAgICAgaSA+PSAwOworCSAgICAgaS0tKSB7CisJCXByaW50ZigiJWQgYm90dGxlcyBvZiBiZWVyIG9uIHRoZSB3YWxsXG4iLCBpKTsKKwl9CisKKwlwcmludGYoIkVuZCBvZiBmaXJzdCBwYXJ0XG4iKTsKZGlmZiAtLWdpdCBhL3QvdDQwNTEvYXBwZW5kZWQyLmMgYi90L3Q0MDUxL2FwcGVuZGVkMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NTFmNzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDUxL2FwcGVuZGVkMi5jCkBAIC0wLDAgKzEsMzUgQEAKKwlwcmludGYoIkJlZ2luIG9mIHNlY29uZCBwYXJ0XG4iKTsKKworCS8qCisJICogTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBzYWRpcHNjaW5nIGVsaXRyLAorCSAqIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUKKwkgKiBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQKKwkgKiBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QKKwkgKiBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvcgorCSAqIHNpdCBhbWV0LgorCSAqCisJICogTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBzYWRpcHNjaW5nIGVsaXRyLAorCSAqIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUKKwkgKiBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQKKwkgKiBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QKKwkgKiBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvcgorCSAqIHNpdCBhbWV0LgorCSAqCisJICogTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBzYWRpcHNjaW5nIGVsaXRyLAorCSAqIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUKKwkgKiBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQKKwkgKiBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QKKwkgKiBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvcgorCSAqIHNpdCBhbWV0LgorCSAqCisJICogTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBzYWRpcHNjaW5nIGVsaXRyLAorCSAqIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUKKwkgKiBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQKKwkgKiBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QKKwkgKiBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvcgorCSAqIHNpdCBhbWV0LgorCSAqCisJICovCisKKwlyZXR1cm4gMDsKK30JLy8gRW5kIG9mIHNlY29uZCBwYXJ0CmRpZmYgLS1naXQgYS90L3Q0MDUxL2R1bW15LmMgYi90L3Q0MDUxL2R1bW15LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzMDE2ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNTEvZHVtbXkuYwpAQCAtMCwwICsxLDcgQEAKKworc3RhdGljIGludCBkdW1teSh2b2lkKQkvLyBCZWdpbiBvZiBkdW1teQoreworCWludCByYyA9IDA7CisKKwlyZXR1cm4gcmM7Cit9CS8vIEVuZCBvZiBkdW1teQpkaWZmIC0tZ2l0IGEvdC90NDA1MS9oZWxsby5jIGIvdC90NDA1MS9oZWxsby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZTc2N2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDUxL2hlbGxvLmMKQEAgLTAsMCArMSwyNCBAQAorCisvKgorICogSGVsbG8gY29tbWVudC4KKyAqLworc3RhdGljIHZvaWQgaGVsbG8odm9pZCkJLy8gQmVnaW4gb2YgaGVsbG8KK3sKKwkvKgorCSAqIENsYXNzaWMuCisJICovCisJcHV0Y2hhcignSCcpOworCXB1dGNoYXIoJ2UnKTsKKwlwdXRjaGFyKCdsJyk7CisJcHV0Y2hhcignbCcpOworCXB1dGNoYXIoJ28nKTsKKwlwdXRjaGFyKCcgJyk7CisJLyogZGVsZXRlIG1lIGZyb20gaGVsbG8gKi8KKwlwdXRjaGFyKCd3Jyk7CisJcHV0Y2hhcignbycpOworCXB1dGNoYXIoJ3InKTsKKwlwdXRjaGFyKCdsJyk7CisJcHV0Y2hhcignZCcpOworCXB1dGNoYXIoJy4nKTsKKwlwdXRjaGFyKCdcbicpOworfQkvLyBFbmQgb2YgaGVsbG8KZGlmZiAtLWdpdCBhL3QvdDQwNTEvaW5jbHVkZXMuYyBiL3QvdDQwNTEvaW5jbHVkZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmM2OGY4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDA1MS9pbmNsdWRlcy5jCkBAIC0wLDAgKzEsMjAgQEAKKyNpbmNsdWRlIDxCZWdpbi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorLyogZGVsZXRlIG1lIGZyb20gaW5jbHVkZXMgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxyZWdleC5oPgorI2luY2x1ZGUgPHV0aW1lLmg+CisjaW5jbHVkZSA8c3lzbG9nLmg+CisjaW5jbHVkZSA8RW5kLmg+CmRpZmYgLS1naXQgYS90L3Q0MDUyLXN0YXQtb3V0cHV0LnNoIGIvdC90NDA1Mi1zdGF0LW91dHB1dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOGMwNTM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDA1Mi1zdGF0LW91dHB1dC5zaApAQCAtMCwwICsxLDM3MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBaYmlnbmlldyBKxJlkcnplamV3c2tpLVN6bWVrCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgLS1zdGF0IG91dHB1dCBvZiB2YXJpb3VzIGNvbW1hbmRzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXRlcm1pbmFsLnNoCisKKyMgMTIwIGNoYXJhY3RlciBuYW1lCituYW1lPWFhYWFhYWFhYWEKK25hbWU9JG5hbWUkbmFtZSRuYW1lJG5hbWUkbmFtZSRuYW1lJG5hbWUkbmFtZSRuYW1lJG5hbWUkbmFtZSRuYW1lCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJhdGlvbicgJworCT4iJG5hbWUiICYmCisJZ2l0IGFkZCAiJG5hbWUiICYmCisJZ2l0IGNvbW1pdCAtbSBtZXNzYWdlICYmCisJZWNobyBhID4iJG5hbWUiICYmCisJZ2l0IGNvbW1pdCAtbSBtZXNzYWdlICIkbmFtZSIKKycKKworY2F0ID5leHBlY3Q3MiA8PC0nRU9GJworIC4uLmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgfCAxICsKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAiZm9ybWF0LXBhdGNoOiBzbWFsbCBjaGFuZ2Ugd2l0aCBsb25nIG5hbWUgZ2l2ZXMgbW9yZSBzcGFjZSB0byB0aGUgbmFtZSIgJworCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgPm91dHB1dCAmJgorCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Q3MiBhY3R1YWwKKycKKword2hpbGUgcmVhZCBjbWQgYXJncworZG8KKwljYXQgPmV4cGVjdDgwIDw8LSdFT0YnCisJIC4uLmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSB8IDEgKworCUVPRgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQ6IHNtYWxsIGNoYW5nZSB3aXRoIGxvbmcgbmFtZSBnaXZlcyBtb3JlIHNwYWNlIHRvIHRoZSBuYW1lIiAnCisJCWdpdCAkY21kICRhcmdzID5vdXRwdXQgJiYKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3Q4MCBhY3R1YWwKKwknCitkb25lIDw8XEVPRgorZGlmZiBIRUFEXiBIRUFEIC0tc3RhdAorc2hvdyAtLXN0YXQKK2xvZyAtMSAtLXN0YXQKK0VPRgorCitjYXQgPmV4cGVjdC42MCA8PC0nRU9GJworIC4uLmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIHwgMSArCitFT0YKK2NhdCA+ZXhwZWN0LjYwMzAgPDwtJ0VPRicKKyAuLi5hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgfCAxICsKK0VPRgorY2F0ID5leHBlY3QyLjYwIDw8LSdFT0YnCisgLi4uYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgfCAxICsKKyAuLi5hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSB8IDEgKworRU9GCitjYXQgPmV4cGVjdDIuNjAzMCA8PC0nRU9GJworIC4uLmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSB8IDEgKworIC4uLmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSB8IDEgKworRU9GCit3aGlsZSByZWFkIGV4cGVjdCBjbWQgYXJncworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tc3RhdD13aWR0aDogYSBsb25nIG5hbWUgaXMgZ2l2ZW4gbW9yZSByb29tIHdoZW4gdGhlIGJhciBpcyBzaG9ydCIgJworCQlnaXQgJGNtZCAkYXJncyAtLXN0YXQ9NDAgPm91dHB1dCAmJgorCQlncmVwICIgfCAiIG91dHB1dCA+YWN0dWFsICYmCisJCXRlc3RfY21wICRleHBlY3QuNjAgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAtLXN0YXQtd2lkdGg9d2lkdGggd2l0aCBsb25nIG5hbWUiICcKKwkJZ2l0ICRjbWQgJGFyZ3MgLS1zdGF0LXdpZHRoPTQwID5vdXRwdXQgJiYKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAkZXhwZWN0LjYwIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0PS4uLixuYW1lLXdpZHRoIHdpdGggbG9uZyBuYW1lIiAnCisJCWdpdCAkY21kICRhcmdzIC0tc3RhdD02MCwzMCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgJGV4cGVjdC42MDMwIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0LW5hbWUtd2lkdGggd2l0aCBsb25nIG5hbWUiICcKKwkJZ2l0ICRjbWQgJGFyZ3MgLS1zdGF0LW5hbWUtd2lkdGg9MzAgPm91dHB1dCAmJgorCQlncmVwICIgfCAiIG91dHB1dCA+YWN0dWFsICYmCisJCXRlc3RfY21wICRleHBlY3QuNjAzMCBhY3R1YWwKKwknCitkb25lIDw8XEVPRgorZXhwZWN0MiBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLTEgLS1zdGRvdXQKK2V4cGVjdCBkaWZmIEhFQUReIEhFQUQgLS1zdGF0CitleHBlY3Qgc2hvdyAtLXN0YXQKK2V4cGVjdCBsb2cgLTEgLS1zdGF0CitFT0YKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJhdGlvbiBmb3IgYmlnIGNoYW5nZSB0ZXN0cycgJworCT5hYmNkICYmCisJZ2l0IGFkZCBhYmNkICYmCisJZ2l0IGNvbW1pdCAtbSBtZXNzYWdlICYmCisJaT0wICYmCisJd2hpbGUgdGVzdCAkaSAtbHQgMTAwMAorCWRvCisJCWVjaG8gJGkgJiYgaT0kKCgkaSArIDEpKQorCWRvbmUgPmFiY2QgJiYKKwlnaXQgY29tbWl0IC1tIG1lc3NhZ2UgYWJjZAorJworCitjYXQgPmV4cGVjdDcyIDw8J0VPRicKKyBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgYWJjZCB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgaWdub3JlcyBDT0xVTU5TIChiaWcgY2hhbmdlKSIgJworCUNPTFVNTlM9MjAwIGdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgPm91dHB1dCAmJgorCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Q3MiBhY3R1YWwKKycKKworY2F0ID5leHBlY3Q3MiA8PCdFT0YnCisgYWJjZCB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCitjYXQgPmV4cGVjdDcyLWdyYXBoIDw8J0VPRicKK3wgIGFiY2QgfCAxMDAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKK0VPRgorY2F0ID5leHBlY3QyMDAgPDwnRU9GJworIGFiY2QgfCAxMDAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCitjYXQgPmV4cGVjdDIwMC1ncmFwaCA8PCdFT0YnCit8ICBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCitFT0YKK3doaWxlIHJlYWQgdmVyYiBleHBlY3QgY21kIGFyZ3MKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAkdmVyYiBDT0xVTU5TIChiaWcgY2hhbmdlKSIgJworCQlDT0xVTU5TPTIwMCBnaXQgJGNtZCAkYXJncyA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QiIGFjdHVhbAorCScKKworCWNhc2UgIiRjbWQiIGluIGRpZmZ8c2hvdykgY29udGludWU7OyBlc2FjCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tZ3JhcGggJHZlcmIgQ09MVU1OUyAoYmlnIGNoYW5nZSkiICcKKwkJQ09MVU1OUz0yMDAgZ2l0ICRjbWQgJGFyZ3MgLS1ncmFwaCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QtZ3JhcGgiIGFjdHVhbAorCScKK2RvbmUgPDxcRU9GCitpZ25vcmVzIGV4cGVjdDcyIGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dAorcmVzcGVjdHMgZXhwZWN0MjAwIGRpZmYgSEVBRF4gSEVBRCAtLXN0YXQKK3Jlc3BlY3RzIGV4cGVjdDIwMCBzaG93IC0tc3RhdAorcmVzcGVjdHMgZXhwZWN0MjAwIGxvZyAtMSAtLXN0YXQKK0VPRgorCitjYXQgPmV4cGVjdDQwIDw8J0VPRicKKyBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCitjYXQgPmV4cGVjdDQwLWdyYXBoIDw8J0VPRicKK3wgIGFiY2QgfCAxMDAwICsrKysrKysrKysrKysrKysrKysrKysrKworRU9GCit3aGlsZSByZWFkIHZlcmIgZXhwZWN0IGNtZCBhcmdzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgJHZlcmIgbm90IGVub3VnaCBDT0xVTU5TIChiaWcgY2hhbmdlKSIgJworCQlDT0xVTU5TPTQwIGdpdCAkY21kICRhcmdzID5vdXRwdXQgJiYKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAiJGV4cGVjdCIgYWN0dWFsCisJJworCisJY2FzZSAiJGNtZCIgaW4gZGlmZnxzaG93KSBjb250aW51ZTs7IGVzYWMKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1ncmFwaCAkdmVyYiBub3QgZW5vdWdoIENPTFVNTlMgKGJpZyBjaGFuZ2UpIiAnCisJCUNPTFVNTlM9NDAgZ2l0ICRjbWQgJGFyZ3MgLS1ncmFwaCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QtZ3JhcGgiIGFjdHVhbAorCScKK2RvbmUgPDxcRU9GCitpZ25vcmVzIGV4cGVjdDcyIGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dAorcmVzcGVjdHMgZXhwZWN0NDAgZGlmZiBIRUFEXiBIRUFEIC0tc3RhdAorcmVzcGVjdHMgZXhwZWN0NDAgc2hvdyAtLXN0YXQKK3Jlc3BlY3RzIGV4cGVjdDQwIGxvZyAtMSAtLXN0YXQKK0VPRgorCitjYXQgPmV4cGVjdDQwIDw8J0VPRicKKyBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCitjYXQgPmV4cGVjdDQwLWdyYXBoIDw8J0VPRicKK3wgIGFiY2QgfCAxMDAwICsrKysrKysrKysrKysrKysrKysrKysrKysrCitFT0YKK3doaWxlIHJlYWQgdmVyYiBleHBlY3QgY21kIGFyZ3MKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAkdmVyYiBzdGF0R3JhcGhXaWR0aCBjb25maWciICcKKwkJZ2l0IC1jIGRpZmYuc3RhdEdyYXBoV2lkdGg9MjYgJGNtZCAkYXJncyA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QiIGFjdHVhbAorCScKKworCWNhc2UgIiRjbWQiIGluIGRpZmZ8c2hvdykgY29udGludWU7OyBlc2FjCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tZ3JhcGggJHZlcmIgc3RhdEdyYXBoV2lkdGggY29uZmlnIiAnCisJCWdpdCAtYyBkaWZmLnN0YXRHcmFwaFdpZHRoPTI2ICRjbWQgJGFyZ3MgLS1ncmFwaCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QtZ3JhcGgiIGFjdHVhbAorCScKK2RvbmUgPDxcRU9GCitpZ25vcmVzIGV4cGVjdDcyIGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dAorcmVzcGVjdHMgZXhwZWN0NDAgZGlmZiBIRUFEXiBIRUFEIC0tc3RhdAorcmVzcGVjdHMgZXhwZWN0NDAgc2hvdyAtLXN0YXQKK3Jlc3BlY3RzIGV4cGVjdDQwIGxvZyAtMSAtLXN0YXQKK0VPRgorCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKyBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCitjYXQgPmV4cGVjdC1ncmFwaCA8PCdFT0YnCit8ICBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCit3aGlsZSByZWFkIGNtZCBhcmdzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0PXdpZHRoIHdpdGggYmlnIGNoYW5nZSIgJworCQlnaXQgJGNtZCAkYXJncyAtLXN0YXQ9NDAgPm91dHB1dCAmJgorCQlncmVwICIgfCAiIG91dHB1dCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tc3RhdC13aWR0aD13aWR0aCB3aXRoIGJpZyBjaGFuZ2UiICcKKwkJZ2l0ICRjbWQgJGFyZ3MgLS1zdGF0LXdpZHRoPTQwID5vdXRwdXQgJiYKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAtLXN0YXQtZ3JhcGgtd2lkdGggd2l0aCBiaWcgY2hhbmdlIiAnCisJCWdpdCAkY21kICRhcmdzIC0tc3RhdC1ncmFwaC13aWR0aD0yNiA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCWNhc2UgIiRjbWQiIGluIGRpZmZ8c2hvdykgY29udGludWU7OyBlc2FjCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tc3RhdC13aWR0aD13aWR0aCAtLWdyYXBoIHdpdGggYmlnIGNoYW5nZSIgJworCQlnaXQgJGNtZCAkYXJncyAtLXN0YXQtd2lkdGg9NDAgLS1ncmFwaCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LWdyYXBoIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0LWdyYXBoLXdpZHRoIC0tZ3JhcGggd2l0aCBiaWcgY2hhbmdlIiAnCisJCWdpdCAkY21kICRhcmdzIC0tc3RhdC1ncmFwaC13aWR0aD0yNiAtLWdyYXBoID5vdXRwdXQgJiYKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QtZ3JhcGggYWN0dWFsCisJJworZG9uZSA8PFxFT0YKK2Zvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dAorZGlmZiBIRUFEXiBIRUFEIC0tc3RhdAorc2hvdyAtLXN0YXQKK2xvZyAtMSAtLXN0YXQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJhdGlvbiBmb3IgbG9uZyBmaWxlbmFtZSB0ZXN0cycgJworCWNwIGFiY2QgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhICYmCisJZ2l0IGFkZCBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgJiYKKwlnaXQgY29tbWl0IC1tIG1lc3NhZ2UKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworIC4uLmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIHwgMTAwMCArKysrKysrKysrKysKK0VPRgorY2F0ID5leHBlY3QtZ3JhcGggPDwnRU9GJworfCAgLi4uYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgfCAxMDAwICsrKysrKysrKysrKworRU9GCit3aGlsZSByZWFkIGNtZCBhcmdzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0PXdpZHRoIHdpdGggYmlnIGNoYW5nZSBpcyBtb3JlIGJhbGFuY2VkIiAnCisJCWdpdCAkY21kICRhcmdzIC0tc3RhdC13aWR0aD02MCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCWNhc2UgIiRjbWQiIGluIGRpZmZ8c2hvdykgY29udGludWU7OyBlc2FjCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tc3RhdD13aWR0aCAtLWdyYXBoIHdpdGggYmlnIGNoYW5nZSBpcyBiYWxhbmNlZCIgJworCQlnaXQgJGNtZCAkYXJncyAtLXN0YXQtd2lkdGg9NjAgLS1ncmFwaCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LWdyYXBoIGFjdHVhbAorCScKK2RvbmUgPDxcRU9GCitmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQKK2RpZmYgSEVBRF4gSEVBRCAtLXN0YXQKK3Nob3cgLS1zdGF0Citsb2cgLTEgLS1zdGF0CitFT0YKKworY2F0ID5leHBlY3Q3MiA8PCdFT0YnCisgLi4uYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIHwgMTAwMCArKysrKysrKysrKysrKysrKworRU9GCitjYXQgPmV4cGVjdDcyLWdyYXBoIDw8J0VPRicKK3wgIC4uLmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSB8IDEwMDAgKysrKysrKysrKysrKysrKysKK0VPRgorY2F0ID5leHBlY3QyMDAgPDwnRU9GJworIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCitjYXQgPmV4cGVjdDIwMC1ncmFwaCA8PCdFT0YnCit8ICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgfCAxMDAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCitFT0YKK3doaWxlIHJlYWQgdmVyYiBleHBlY3QgY21kIGFyZ3MKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAkdmVyYiBDT0xVTU5TIChsb25nIGZpbGVuYW1lKSIgJworCQlDT0xVTU5TPTIwMCBnaXQgJGNtZCAkYXJncyA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QiIGFjdHVhbAorCScKKworCWNhc2UgIiRjbWQiIGluIGRpZmZ8c2hvdykgY29udGludWU7OyBlc2FjCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tZ3JhcGggJHZlcmIgQ09MVU1OUyAobG9uZyBmaWxlbmFtZSkiICcKKwkJQ09MVU1OUz0yMDAgZ2l0ICRjbWQgJGFyZ3MgLS1ncmFwaCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QtZ3JhcGgiIGFjdHVhbAorCScKK2RvbmUgPDxcRU9GCitpZ25vcmVzIGV4cGVjdDcyIGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dAorcmVzcGVjdHMgZXhwZWN0MjAwIGRpZmYgSEVBRF4gSEVBRCAtLXN0YXQKK3Jlc3BlY3RzIGV4cGVjdDIwMCBzaG93IC0tc3RhdAorcmVzcGVjdHMgZXhwZWN0MjAwIGxvZyAtMSAtLXN0YXQKK0VPRgorCitjYXQgPmV4cGVjdDEgPDwnRU9GJworIC4uLmFhYWFhYWEgfCAxMDAwICsrKysrKworRU9GCitjYXQgPmV4cGVjdDEtZ3JhcGggPDwnRU9GJworfCAgLi4uYWFhYWFhYSB8IDEwMDAgKysrKysrCitFT0YKK3doaWxlIHJlYWQgdmVyYiBleHBlY3QgY21kIGFyZ3MKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBDT0xVTU5TX0NBTl9CRV8xIFwKKwkJIiRjbWQgJHZlcmIgcHJlZml4IGdyZWF0ZXIgdGhhbiBDT0xVTU5TIChiaWcgY2hhbmdlKSIgJworCQlDT0xVTU5TPTEgZ2l0ICRjbWQgJGFyZ3MgPm91dHB1dCAmJgorCQlncmVwICIgfCAiIG91dHB1dCA+YWN0dWFsICYmCisJCXRlc3RfY21wICIkZXhwZWN0IiBhY3R1YWwKKwknCisKKwljYXNlICIkY21kIiBpbiBkaWZmfHNob3cpIGNvbnRpbnVlOzsgZXNhYworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBDT0xVTU5TX0NBTl9CRV8xIFwKKwkJIiRjbWQgLS1ncmFwaCAkdmVyYiBwcmVmaXggZ3JlYXRlciB0aGFuIENPTFVNTlMgKGJpZyBjaGFuZ2UpIiAnCisJCUNPTFVNTlM9MSBnaXQgJGNtZCAkYXJncyAtLWdyYXBoID5vdXRwdXQgJiYKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAiJGV4cGVjdC1ncmFwaCIgYWN0dWFsCisJJworZG9uZSA8PFxFT0YKK2lnbm9yZXMgZXhwZWN0NzIgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0CityZXNwZWN0cyBleHBlY3QxIGRpZmYgSEVBRF4gSEVBRCAtLXN0YXQKK3Jlc3BlY3RzIGV4cGVjdDEgc2hvdyAtLXN0YXQKK3Jlc3BlY3RzIGV4cGVjdDEgbG9nIC0xIC0tc3RhdAorRU9GCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKyBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtLXN0YXQgcmVzcGVjdHMgQ09MVU1OUyAoYmlnIGNoYW5nZSknICcKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoIEhFQUReXiAmJgorCUNPTFVNTlM9MTAwIGdpdCBtZXJnZSAtLXN0YXQgLS1uby1mZiBtYXN0ZXJeID5vdXRwdXQgJiYKKwlncmVwICIgfCAiIG91dHB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCisgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLS1zdGF0IHJlc3BlY3RzIENPTFVNTlMgKGxvbmcgZmlsZW5hbWUpJyAnCisJQ09MVU1OUz0xMDAgZ2l0IG1lcmdlIC0tc3RhdCAtLW5vLWZmIG1hc3RlciA+b3V0cHV0ICYmCisJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDUzLWRpZmYtbm8taW5kZXguc2ggYi90L3Q0MDUzLWRpZmYtbm8taW5kZXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDE2ODk0NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNTMtZGlmZi1uby1pbmRleC5zaApAQCAtMCwwICsxLDE0NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgLS1uby1pbmRleCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgYSAmJgorCW1rZGlyIGIgJiYKKwllY2hvIDEgPmEvMSAmJgorCWVjaG8gMiA+YS8yICYmCisJZ2l0IGluaXQgcmVwbyAmJgorCWVjaG8gMSA+cmVwby9hICYmCisJbWtkaXIgLXAgbm9uL2dpdCAmJgorCWVjaG8gMSA+bm9uL2dpdC9hICYmCisJZWNobyAxID5ub24vZ2l0L2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1uby1pbmRleCBkaXJlY3RvcmllcycgJworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IGEgYiA+Y250ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMTQgY250CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIC0tbm8taW5kZXggcmVsYXRpdmUgcGF0aCBvdXRzaWRlIHJlcG8nICcKKwkoCisJCWNkIHJlcG8gJiYKKwkJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmIC0tbm8taW5kZXggYSAuLi9ub24vZ2l0L2EgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmIC0tbm8taW5kZXggLi4vbm9uL2dpdC9hIC4uL25vbi9naXQvYgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1uby1pbmRleCB3aXRoIGJyb2tlbiBpbmRleCcgJworCSgKKwkJY2QgcmVwbyAmJgorCQllY2hvIGJyb2tlbiA+LmdpdC9pbmRleCAmJgorCQlnaXQgZGlmZiAtLW5vLWluZGV4IGEgLi4vbm9uL2dpdC9hCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiBvdXRzaWRlIHJlcG8gd2l0aCBicm9rZW4gaW5kZXgnICcKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGRpZmYgLi4vbm9uL2dpdC9hIC4uL25vbi9naXQvYgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1uby1pbmRleCBleGVjdXRlZCBvdXRzaWRlIHJlcG8gZ2l2ZXMgY29ycmVjdCBlcnJvciBtZXNzYWdlJyAnCisJKAorCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0kVFJBU0hfRElSRUNUT1JZL25vbiAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJY2Qgbm9uL2dpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IGEgMj5hY3R1YWwuZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgInVzYWdlOiBnaXQgZGlmZiAtLW5vLWluZGV4IiBhY3R1YWwuZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIEQgRiBhbmQgZGlmZiBGIEQnICcKKwkoCisJCWNkIHJlcG8gJiYKKwkJZWNobyBpbi1yZXBvID5hICYmCisJCWVjaG8gbm9uLXJlcG8gPi4uL25vbi9naXQvYSAmJgorCQlta2RpciBzdWIgJiYKKwkJZWNobyBzdWItcmVwbyA+c3ViL2EgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IHN1Yi9hIC4uL25vbi9naXQvYSA+ZXhwZWN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggc3ViL2EgLi4vbm9uL2dpdC8gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCBhIC4uL25vbi9naXQvYSA+ZXhwZWN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggYSAuLi9ub24vZ2l0LyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IC4uL25vbi9naXQvYSBhID5leHBlY3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAuLi9ub24vZ2l0IGEgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0dXJuaW5nIGEgZmlsZSBpbnRvIGEgZGlyZWN0b3J5JyAnCisJKAorCQljZCBub24vZ2l0ICYmCisJCW1rZGlyIGQgZSBlL3N1YiAmJgorCQllY2hvIDEgPmQvc3ViICYmCisJCWVjaG8gMiA+ZS9zdWIvZmlsZSAmJgorCQlwcmludGYgIkRcdGQvc3ViXG5BXHRlL3N1Yi9maWxlXG4iID5leHBlY3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAtLW5hbWUtc3RhdHVzIGQgZSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgZnJvbSByZXBvIHN1YmRpciBzaG93cyByZWFsIHBhdGhzIChleHBsaWNpdCknICcKKwllY2hvICJkaWZmIC0tZ2l0IGEvLi4vLi4vbm9uL2dpdC9hIGIvLi4vLi4vbm9uL2dpdC9iIiA+ZXhwZWN0ICYmCisJdGVzdF9leHBlY3RfY29kZSAxIFwKKwkJZ2l0IC1DIHJlcG8vc3ViIFwKKwkJZGlmZiAtLW5vLWluZGV4IC4uLy4uL25vbi9naXQvYSAuLi8uLi9ub24vZ2l0L2IgPmFjdHVhbCAmJgorCWhlYWQgLW4gMSA8YWN0dWFsID5hY3R1YWwuaGVhZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGZyb20gcmVwbyBzdWJkaXIgc2hvd3MgcmVhbCBwYXRocyAoaW1wbGljaXQpJyAnCisJZWNobyAiZGlmZiAtLWdpdCBhLy4uLy4uL25vbi9naXQvYSBiLy4uLy4uL25vbi9naXQvYiIgPmV4cGVjdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBcCisJCWdpdCAtQyByZXBvL3N1YiBcCisJCWRpZmYgLi4vLi4vbm9uL2dpdC9hIC4uLy4uL25vbi9naXQvYiA+YWN0dWFsICYmCisJaGVhZCAtbiAxIDxhY3R1YWwgPmFjdHVhbC5oZWFkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5oZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1uby1pbmRleCBmcm9tIHJlcG8gc3ViZGlyIHJlc3BlY3RzIGNvbmZpZyAoZXhwbGljaXQpJyAnCisJZWNobyAiZGlmZiAtLWdpdCAuLi8uLi9ub24vZ2l0L2EgLi4vLi4vbm9uL2dpdC9iIiA+ZXhwZWN0ICYmCisJdGVzdF9jb25maWcgLUMgcmVwbyBkaWZmLm5vcHJlZml4IHRydWUgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgXAorCQlnaXQgLUMgcmVwby9zdWIgXAorCQlkaWZmIC0tbm8taW5kZXggLi4vLi4vbm9uL2dpdC9hIC4uLy4uL25vbi9naXQvYiA+YWN0dWFsICYmCisJaGVhZCAtbiAxIDxhY3R1YWwgPmFjdHVhbC5oZWFkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5oZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1uby1pbmRleCBmcm9tIHJlcG8gc3ViZGlyIHJlc3BlY3RzIGNvbmZpZyAoaW1wbGljaXQpJyAnCisJZWNobyAiZGlmZiAtLWdpdCAuLi8uLi9ub24vZ2l0L2EgLi4vLi4vbm9uL2dpdC9iIiA+ZXhwZWN0ICYmCisJdGVzdF9jb25maWcgLUMgcmVwbyBkaWZmLm5vcHJlZml4IHRydWUgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgXAorCQlnaXQgLUMgcmVwby9zdWIgXAorCQlkaWZmIC4uLy4uL25vbi9naXQvYSAuLi8uLi9ub24vZ2l0L2IgPmFjdHVhbCAmJgorCWhlYWQgLW4gMSA8YWN0dWFsID5hY3R1YWwuaGVhZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tbm8taW5kZXggZnJvbSByZXBvIHN1YmRpciB3aXRoIGFic29sdXRlIHBhdGhzJyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJMQkxCSQocHdkKS9ub24vZ2l0L3thID0+IGJ9CisJRU9GCisJdGVzdF9leHBlY3RfY29kZSAxIFwKKwkJZ2l0IC1DIHJlcG8vc3ViIGRpZmYgLS1udW1zdGF0IFwKKwkJIiQocHdkKS9ub24vZ2l0L2EiICIkKHB3ZCkvbm9uL2dpdC9iIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tbm8taW5kZXggYWxsb3dzIGV4dGVybmFsIGRpZmYnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgXAorCQllbnYgR0lUX0VYVEVSTkFMX0RJRkY9ImVjaG8gZXh0ZXJuYWwgOzoiIFwKKwkJZ2l0IGRpZmYgLS1uby1pbmRleCBub24vZ2l0L2Egbm9uL2dpdC9iID5hY3R1YWwgJiYKKwllY2hvIGV4dGVybmFsID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA1NC1kaWZmLWJvZ3VzLXRyZWUuc2ggYi90L3Q0MDU0LWRpZmYtYm9ndXMtdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44Yzk1ZjE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDA1NC1kaWZmLWJvZ3VzLXRyZWUuc2gKQEAgLTAsMCArMSw4MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGlmZiB3aXRoIGEgYm9ndXMgdHJlZSBjb250YWluaW5nIHRoZSBudWxsIHNoYTEnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGJvZ3VzIHRyZWUnICcKKwluYW1lPSQoZWNobyAkWkVST19PSUQgfCBzZWQgLWUgInMvMDAvUS9nIikgJiYKKwlib2d1c190cmVlPSQoCisJCXByaW50ZiAiMTAwNjQ0IGZvb1EkbmFtZSIgfAorCQlxX3RvX251bCB8CisJCWdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluIC10IHRyZWUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSB0cmVlIHdpdGggbWF0Y2hpbmcgZmlsZScgJworCWVjaG8gYmFyID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdvb2RfdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWJsb2I9JChnaXQgcmV2LXBhcnNlIDpmb28pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JhdyBkaWZmIHNob3dzIG51bGwgc2hhMSAoYWRkaXRpb24pJyAnCisJZWNobyAiOjAwMDAwMCAxMDA2NDQgJFpFUk9fT0lEICRaRVJPX09JRCBBCWZvbyIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLXRyZWUgJEVNUFRZX1RSRUUgJGJvZ3VzX3RyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmF3IGRpZmYgc2hvd3MgbnVsbCBzaGExIChyZW1vdmFsKScgJworCWVjaG8gIjoxMDA2NDQgMDAwMDAwICRaRVJPX09JRCAkWkVST19PSUQgRAlmb28iID5leHBlY3QgJiYKKwlnaXQgZGlmZi10cmVlICRib2d1c190cmVlICRFTVBUWV9UUkVFID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JhdyBkaWZmIHNob3dzIG51bGwgc2hhMSAobW9kaWZpY2F0aW9uKScgJworCWVjaG8gIjoxMDA2NDQgMTAwNjQ0ICRibG9iICRaRVJPX09JRCBNCWZvbyIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLXRyZWUgJGdvb2RfdHJlZSAkYm9ndXNfdHJlZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYXcgZGlmZiBzaG93cyBudWxsIHNoYTEgKG90aGVyIGRpcmVjdGlvbiknICcKKwllY2hvICI6MTAwNjQ0IDEwMDY0NCAkWkVST19PSUQgJGJsb2IgTQlmb28iID5leHBlY3QgJiYKKwlnaXQgZGlmZi10cmVlICRib2d1c190cmVlICRnb29kX3RyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmF3IGRpZmYgc2hvd3MgbnVsbCBzaGExIChyZXZlcnNlKScgJworCWVjaG8gIjoxMDA2NDQgMTAwNjQ0ICRaRVJPX09JRCAkYmxvYiBNCWZvbyIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLXRyZWUgLVIgJGdvb2RfdHJlZSAkYm9ndXNfdHJlZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYXcgZGlmZiBzaG93cyBudWxsIHNoYTEgKGluZGV4KScgJworCWVjaG8gIjoxMDA2NDQgMTAwNjQ0ICRaRVJPX09JRCAkYmxvYiBNCWZvbyIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLWluZGV4ICRib2d1c190cmVlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIGZhaWxzIGR1ZSB0byBib2d1cyBzaGExIChhZGRpdGlvbiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi10cmVlIC1wICRFTVBUWV9UUkVFICRib2d1c190cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIGZhaWxzIGR1ZSB0byBib2d1cyBzaGExIChyZW1vdmFsKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLXRyZWUgLXAgJGJvZ3VzX3RyZWUgJEVNUFRZX1RSRUUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2ggZmFpbHMgZHVlIHRvIGJvZ3VzIHNoYTEgKG1vZGlmaWNhdGlvbiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi10cmVlIC1wICRnb29kX3RyZWUgJGJvZ3VzX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2ggZmFpbHMgZHVlIHRvIGJvZ3VzIHNoYTEgKG90aGVyIGRpcmVjdGlvbiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi10cmVlIC1wICRib2d1c190cmVlICRnb29kX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2ggZmFpbHMgZHVlIHRvIGJvZ3VzIHNoYTEgKHJldmVyc2UpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtdHJlZSAtUiAtcCAkZ29vZF90cmVlICRib2d1c190cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIGZhaWxzIGR1ZSB0byBib2d1cyBzaGExIChpbmRleCknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtcCAkYm9ndXNfdHJlZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNTUtZGlmZi1jb250ZXh0LnNoIGIvdC90NDA1NS1kaWZmLWNvbnRleHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzQxZTA4MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNTUtZGlmZi1jb250ZXh0LnNoCkBAIC0wLDAgKzEsOTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgTW96aWxsYSBGb3VuZGF0aW9uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYuY29udGV4dCBjb25maWd1cmF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgPnRlbXBsYXRlIDw8LVxFT0YgJiYKKwlmaXJzdGxpbmUKKwliCisJYworCWQKKwllCisJZgorCXByZWxpbmUKKwlUQVJHRVQKKwlwb3N0bGluZQorCWkKKwlqCisJaworCWwKKwltCisJbgorCUVPRgorCXNlZCAiL1RBUkdFVC9kIiA+eCA8dGVtcGxhdGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHggJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCXNlZCAicy9UQVJHRVQvQURERUQvIiA+eCA8dGVtcGxhdGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHggJiYKKwlnaXQgY29tbWl0IC1tIG5leHQgJiYKKworCXNlZCAicy9UQVJHRVQvTU9ESUZJRUQvIiA+eCA8dGVtcGxhdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhlIGRlZmF1bHQgbnVtYmVyIG9mIGNvbnRleHQgbGluZXMgaXMgMycgJworCWdpdCBkaWZmID5vdXRwdXQgJiYKKwkhIGdyZXAgIl4gZCIgb3V0cHV0ICYmCisJZ3JlcCAiXiBlIiBvdXRwdXQgJiYKKwlncmVwICJeIGoiIG91dHB1dCAmJgorCSEgZ3JlcCAiXiBrIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5jb250ZXh0IGhvbm9yZWQgYnkgImxvZyInICcKKwlnaXQgbG9nIC0xIC1wID5vdXRwdXQgJiYKKwkhIGdyZXAgZmlyc3RsaW5lIG91dHB1dCAmJgorCWdpdCBjb25maWcgZGlmZi5jb250ZXh0IDggJiYKKwlnaXQgbG9nIC0xIC1wID5vdXRwdXQgJiYKKwlncmVwICJeIGZpcnN0bGluZSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1RoZSAtVSBvcHRpb24gb3ZlcnJpZGVzIGRpZmYuY29udGV4dCcgJworCWdpdCBjb25maWcgZGlmZi5jb250ZXh0IDggJiYKKwlnaXQgbG9nIC1VNCAtMSA+b3V0cHV0ICYmCisJISBncmVwICJeIGZpcnN0bGluZSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuY29udGV4dCBob25vcmVkIGJ5ICJkaWZmIicgJworCWdpdCBjb25maWcgZGlmZi5jb250ZXh0IDggJiYKKwlnaXQgZGlmZiA+b3V0cHV0ICYmCisJZ3JlcCAiXiBmaXJzdGxpbmUiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbHVtYmluZyBub3QgYWZmZWN0ZWQnICcKKwlnaXQgY29uZmlnIGRpZmYuY29udGV4dCA4ICYmCisJZ2l0IGRpZmYtZmlsZXMgLXAgPm91dHB1dCAmJgorCSEgZ3JlcCAiXiBmaXJzdGxpbmUiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24taW50ZWdlciBjb25maWcgcGFyc2luZycgJworCWdpdCBjb25maWcgZGlmZi5jb250ZXh0IG5vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgMj5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZWdhdGl2ZSBpbnRlZ2VyIGNvbmZpZyBwYXJzaW5nJyAnCisJZ2l0IGNvbmZpZyBkaWZmLmNvbnRleHQgLTEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAyPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgImJhZCBjb25maWcgdmFyaWFibGUiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctVTAgaXMgdmFsaWQsIHNvIGlzIGRpZmYuY29udGV4dD0wJyAnCisJZ2l0IGNvbmZpZyBkaWZmLmNvbnRleHQgMCAmJgorCWdpdCBkaWZmID5vdXRwdXQgJiYKKwlncmVwICJeLUFEREVEIiBvdXRwdXQgJiYKKwlncmVwICJeK01PRElGSUVEIiBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDU2LWRpZmYtb3JkZXIuc2ggYi90L3Q0MDU2LWRpZmYtb3JkZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDNkZDQ3NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNTYtZGlmZi1vcmRlci5zaApAQCAtMCwwICsxLDEyNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgb3JkZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCitjcmVhdGVfZmlsZXMgKCkgeworCWVjaG8gIiQxIiA+YS5oICYmCisJZWNobyAiJDEiID5iLmMgJiYKKwllY2hvICIkMSIgPmMvTWFrZWZpbGUgJiYKKwllY2hvICIkMSIgPmQudHh0ICYmCisJZ2l0IGFkZCBhLmggYi5jIGMvTWFrZWZpbGUgZC50eHQgJiYKKwlnaXQgY29tbWl0IC1tIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIGMgJiYKKwljcmVhdGVfZmlsZXMgMSAmJgorCWNyZWF0ZV9maWxlcyAyICYmCisKKwljYXQgPm9yZGVyX2ZpbGVfMSA8PC1cRU9GICYmCisJKk1ha2VmaWxlCisJKi50eHQKKwkqLmgKKwlFT0YKKworCWNhdCA+b3JkZXJfZmlsZV8yIDw8LVxFT0YgJiYKKwkqTWFrZWZpbGUKKwkqLmgKKwkqLmMKKwlFT0YKKworCWNhdCA+ZXhwZWN0X25vbmUgPDwtXEVPRiAmJgorCWEuaAorCWIuYworCWMvTWFrZWZpbGUKKwlkLnR4dAorCUVPRgorCisJY2F0ID5leHBlY3RfMSA8PC1cRU9GICYmCisJYy9NYWtlZmlsZQorCWQudHh0CisJYS5oCisJYi5jCisJRU9GCisKKwljYXQgPmV4cGVjdF8yIDw8LVxFT0YKKwljL01ha2VmaWxlCisJYS5oCisJYi5jCisJZC50eHQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAibm8gb3JkZXIgKD10cmVlIG9iamVjdCBvcmRlcikiICcKKwlnaXQgZGlmZiAtLW5hbWUtb25seSBIRUFEXi4uSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbmUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3Npbmcgb3JkZXJmaWxlJyAnCisJcm0gLWYgYm9ndXNfZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC1PYm9ndXNfZmlsZSAtLW5hbWUtb25seSBIRUFEXi4uSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ3VucmVhZGFibGUgb3JkZXJmaWxlJyAnCisJPnVucmVhZGFibGVfZmlsZSAmJgorCWNobW9kIC1yIHVucmVhZGFibGVfZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC1PdW5yZWFkYWJsZV9maWxlIC0tbmFtZS1vbmx5IEhFQUReLi5IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm9yZGVyZmlsZSB1c2luZyBvcHRpb24gZnJvbSBzdWJkaXIgd2l0aCAtLW91dHB1dCIgJworCW1rZGlyIHN1YmRpciAmJgorCWdpdCAtQyBzdWJkaXIgZGlmZiAtTy4uL29yZGVyX2ZpbGVfMSAtLW91dHB1dCAuLi9hY3R1YWwgLS1uYW1lLW9ubHkgSEVBRF4uLkhFQUQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfMSBhY3R1YWwKKycKKworZm9yIGkgaW4gMSAyCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm9yZGVyZmlsZSB1c2luZyBvcHRpb24gKCRpKSIgJworCQlnaXQgZGlmZiAtT29yZGVyX2ZpbGVfJGkgLS1uYW1lLW9ubHkgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RfJGkgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICJvcmRlcmZpbGUgaXMgZmlmbyAoJGkpIiAnCisJCXJtIC1mIG9yZGVyX2ZpZm8gJiYKKwkJbWtmaWZvIG9yZGVyX2ZpZm8gJiYKKwkJeworCQkJY2F0IG9yZGVyX2ZpbGVfJGkgPm9yZGVyX2ZpZm8gJgorCQl9ICYmCisJCWdpdCBkaWZmIC1PIG9yZGVyX2ZpZm8gLS1uYW1lLW9ubHkgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCQl3YWl0ICYmCisJCXRlc3RfY21wIGV4cGVjdF8kaSBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJvcmRlcmZpbGUgdXNpbmcgY29uZmlnICgkaSkiICcKKwkJZ2l0IC1jIGRpZmYub3JkZXJmaWxlPW9yZGVyX2ZpbGVfJGkgZGlmZiAtLW5hbWUtb25seSBIRUFEXi4uSEVBRCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdF8kaSBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjYW5jZWxsaW5nIGNvbmZpZ3VyZWQgb3JkZXJmaWxlICgkaSkiICcKKwkJZ2l0IC1jIGRpZmYub3JkZXJmaWxlPW9yZGVyX2ZpbGVfJGkgZGlmZiAtTy9kZXYvbnVsbCAtLW5hbWUtb25seSBIRUFEXi4uSEVBRCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdF9ub25lIGFjdHVhbAorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHRlc3RpbmcgY29tYmluZS1kaWZmIG9yZGVyJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRtcCBIRUFEfiAmJgorCWNyZWF0ZV9maWxlcyAzICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtcyBvdXJzIHRtcCAmJgorCWNyZWF0ZV9maWxlcyA1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbWJpbmUtZGlmZjogbm8gb3JkZXIgKD10cmVlIG9iamVjdCBvcmRlcikiICcKKwlnaXQgZGlmZiAtLW5hbWUtb25seSBIRUFEIEhFQUReIEhFQUReMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbmUgYWN0dWFsCisnCisKK2ZvciBpIGluIDEgMgorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21iaW5lLWRpZmY6IG9yZGVyZmlsZSB1c2luZyBvcHRpb24gKCRpKSIgJworCQlnaXQgZGlmZiAtT29yZGVyX2ZpbGVfJGkgLS1uYW1lLW9ubHkgSEVBRCBIRUFEXiBIRUFEXjIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RfJGkgYWN0dWFsCisJJworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNTctZGlmZi1jb21iaW5lZC1wYXRocy5zaCBiL3QvdDQwNTctZGlmZi1jb21iaW5lZC1wYXRocy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYjc4NTczCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA1Ny1kaWZmLWNvbWJpbmVkLXBhdGhzLnNoCkBAIC0wLDAgKzEsMTA2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tYmluZWQgZGlmZiBzaG93IG9ubHkgcGF0aHMgdGhhdCBhcmUgZGlmZmVyZW50IHRvIGFsbCBwYXJlbnRzJworCisuIC4vdGVzdC1saWIuc2gKKworIyB2ZXJpZnkgdGhhdCBkaWZmYy5leHBlY3QgbWF0Y2hlcyBvdXRwdXQgb2YKKyMgJChnaXQgZGlmZiAtYyAtLW5hbWUtb25seSBIRUFEIEhFQUReIEhFQUReMikKK2RpZmZjX3ZlcmlmeSAoKSB7CisJZ2l0IGRpZmYgLWMgLS1uYW1lLW9ubHkgSEVBRCBIRUFEXiBIRUFEXjIgPmRpZmZjLmFjdHVhbCAmJgorCXRlc3RfY21wIGRpZmZjLmV4cGVjdCBkaWZmYy5hY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJpdmlhbCBtZXJnZSAtIGNvbWJpbmUtZGlmZiBlbXB0eScgJworCWZvciBpIGluICQodGVzdF9zZXEgMSA5KQorCWRvCisJCWVjaG8gJGkgPiRpLnR4dCAmJgorCQlnaXQgYWRkICRpLnR4dAorCWRvbmUgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0IiAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAyIDkpCisJZG8KKwkJZWNobyAkaS8yID4+JGkudHh0CisJZG9uZSAmJgorCWdpdCBjb21taXQgLWEgLW0gInNpZGUgMi05IiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIDEvMiA+MS50eHQgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJtYXN0ZXIgMSIgJiYKKwlnaXQgbWVyZ2Ugc2lkZSAmJgorCT5kaWZmYy5leHBlY3QgJiYKKwlkaWZmY192ZXJpZnkKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmx5IG9uZSB0cnVseSBjb25mbGljdGluZyBwYXRoJyAnCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDIgOSkKKwlkbworCQllY2hvICRpLzMgPj4kaS50eHQKKwlkb25lICYmCisJZWNobyAiNHNpZGUiID4+NC50eHQgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzaWRlIDItOSArNCIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDkpCisJZG8KKwkJZWNobyAkaS8zID4+JGkudHh0CisJZG9uZSAmJgorCWVjaG8gIjRtYXN0ZXIiID4+NC50eHQgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJtYXN0ZXIgMS05ICs0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzaWRlICYmCisJY2F0IDw8LVxFT0YgPjQudHh0ICYmCisJNAorCTQvMgorCTQvMworCTRtYXN0ZXIKKwk0c2lkZQorCUVPRgorCWdpdCBhZGQgNC50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJtZXJnZSBzaWRlICgyKSIgJiYKKwllY2hvIDQudHh0ID5kaWZmYy5leHBlY3QgJiYKKwlkaWZmY192ZXJpZnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgaW50cm9kdWNlcyBuZXcgZmlsZScgJworCWdpdCBjaGVja291dCBzaWRlICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSA1IDkpCisJZG8KKwkJZWNobyAkaS80ID4+JGkudHh0CisJZG9uZSAmJgorCWdpdCBjb21taXQgLWEgLW0gInNpZGUgNS05IiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMykKKwlkbworCQllY2hvICRpLzQgPj4kaS50eHQKKwlkb25lICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibWFzdGVyIDEtMyArNGhlbGxvIiAmJgorCWdpdCBtZXJnZSBzaWRlICYmCisJZWNobyAiSGVsbG8gV29ybGQiID40aGVsbG8udHh0ICYmCisJZ2l0IGFkZCA0aGVsbG8udHh0ICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kICYmCisJZWNobyA0aGVsbG8udHh0ID5kaWZmYy5leHBlY3QgJiYKKwlkaWZmY192ZXJpZnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgcmVtb3ZlZCBhIGZpbGUnICcKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWZvciBpIGluICQodGVzdF9zZXEgNSA5KQorCWRvCisJCWVjaG8gJGkvNSA+PiRpLnR4dAorCWRvbmUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzaWRlIDUtOSIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDMpCisJZG8KKwkJZWNobyAkaS80ID4+JGkudHh0CisJZG9uZSAmJgorCWdpdCBjb21taXQgLWEgLW0gIm1hc3RlciAxLTMiICYmCisJZ2l0IG1lcmdlIHNpZGUgJiYKKwlnaXQgcm0gNC50eHQgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwllY2hvIDQudHh0ID5kaWZmYy5leHBlY3QgJiYKKwlkaWZmY192ZXJpZnkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDU4LWRpZmYtZHVwbGljYXRlcy5zaCBiL3QvdDQwNTgtZGlmZi1kdXBsaWNhdGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyNGVlMTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDU4LWRpZmYtZHVwbGljYXRlcy5zaApAQCAtMCwwICsxLDc5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB0cmVlIGRpZmYgd2hlbiB0cmVlcyBoYXZlIGR1cGxpY2F0ZSBlbnRyaWVzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgbWFrZV90cmVlX2VudHJ5IDxtb2RlPiA8bW9kZT4gPHNoYTE+CisjCisjIFdlIGhhdmUgdG8gcmVseSBvbiBwZXJsIGhlcmUgYmVjYXVzZSBub3QgYWxsIHByaW50ZnMgdW5kZXJzdGFuZAorIyBoZXggZXNjYXBlcyAob25seSBvY3RhbCksIGFuZCB4eGQgaXMgbm90IHBvcnRhYmxlLgorbWFrZV90cmVlX2VudHJ5ICgpIHsKKwlwcmludGYgJyVzICVzXDAnICIkMSIgIiQyIiAmJgorCXBlcmwgLWUgJ3ByaW50IGNocihoZXgoJF8pKSBmb3IgKCRBUkdWWzBdID1+IC8uLi9nKScgIiQzIgorfQorCisjIExpa2UgZ2l0LW1rdHJlZSwgYnV0IHdpdGhvdXQgYWxsIG9mIHRoZSBwZXNreSBzYW5pdHkgY2hlY2tpbmcuCisjIEFyZ3VtZW50cyBjb21lIGluIGdyb3VwcyBvZiB0aHJlZSwgZWFjaCBncm91cCBzcGVjaWZ5aW5nIGEgc2luZ2xlCisjIHRyZWUgZW50cnkgKHNlZSBtYWtlX3RyZWVfZW50cnkgYWJvdmUpLgorbWFrZV90cmVlICgpIHsKKwl3aGlsZSB0ZXN0ICQjIC1ndCAyOyBkbworCQltYWtlX3RyZWVfZW50cnkgIiQxIiAiJDIiICIkMyIKKwkJc2hpZnQ7IHNoaWZ0OyBzaGlmdAorCWRvbmUgfAorCWdpdCBoYXNoLW9iamVjdCAtdyAtdCB0cmVlIC0tc3RkaW4KK30KKworIyB0aGlzIGlzIGtpbmQgb2YgYSBjb252b2x1dGVkIHNldHVwLCBidXQgbWF0Y2hlcworIyBhIHJlYWwtd29ybGQgY2FzZS4gRWFjaCB0cmVlIGNvbnRhaW5zIGZvdXIgZW50cmllcworIyBmb3IgdGhlIGdpdmVuIHBhdGgsIG9uZSB3aXRoIG9uZSBzaGExLCBhbmQgdGhyZWUgd2l0aAorIyB0aGUgb3RoZXIuIFRoZSBmaXJzdCB0cmVlIGhhcyB0aGVtIHNwbGl0IGFjcm9zcworIyB0d28gc3VidHJlZXMgKHdoaWNoIGFyZSB0aGVtc2VsdmVzIGR1cGxpY2F0ZSBlbnRyaWVzIGluCisjIHRoZSByb290IHRyZWUpLCBhbmQgdGhlIHNlY29uZCBoYXMgdGhlbSBhbGwgaW4gYSBzaW5nbGUgc3VidHJlZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSB0cmVlcyB3aXRoIGR1cGxpY2F0ZSBlbnRyaWVzJyAnCisJYmxvYl9vbmU9JChlY2hvIG9uZSB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCWJsb2JfdHdvPSQoZWNobyB0d28gfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlpbm5lcl9vbmVfYT0kKG1ha2VfdHJlZSBcCisJCTEwMDY0NCBpbm5lciAkYmxvYl9vbmUKKwkpICYmCisJaW5uZXJfb25lX2I9JChtYWtlX3RyZWUgXAorCQkxMDA2NDQgaW5uZXIgJGJsb2JfdHdvIFwKKwkJMTAwNjQ0IGlubmVyICRibG9iX3R3byBcCisJCTEwMDY0NCBpbm5lciAkYmxvYl90d28KKwkpICYmCisJb3V0ZXJfb25lPSQobWFrZV90cmVlIFwKKwkJMDQwMDAwIG91dGVyICRpbm5lcl9vbmVfYSBcCisJCTA0MDAwMCBvdXRlciAkaW5uZXJfb25lX2IKKwkpICYmCisJaW5uZXJfdHdvPSQobWFrZV90cmVlIFwKKwkJMTAwNjQ0IGlubmVyICRibG9iX29uZSBcCisJCTEwMDY0NCBpbm5lciAkYmxvYl90d28gXAorCQkxMDA2NDQgaW5uZXIgJGJsb2JfdHdvIFwKKwkJMTAwNjQ0IGlubmVyICRibG9iX3R3bworCSkgJiYKKwlvdXRlcl90d289JChtYWtlX3RyZWUgXAorCQkwNDAwMDAgb3V0ZXIgJGlubmVyX3R3bworCSkgJiYKKwlnaXQgdGFnIG9uZSAkb3V0ZXJfb25lICYmCisJZ2l0IHRhZyB0d28gJG91dGVyX3R3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgYmV0d2VlbiB0cmVlcycgJworCXsKKwkJcHJpbnRmICI6MDAwMDAwIDEwMDY0NCAkWkVST19PSUQgJGJsb2JfdHdvIEFcdG91dGVyL2lubmVyXG4iICYmCisJCXByaW50ZiAiOjAwMDAwMCAxMDA2NDQgJFpFUk9fT0lEICRibG9iX3R3byBBXHRvdXRlci9pbm5lclxuIiAmJgorCQlwcmludGYgIjowMDAwMDAgMTAwNjQ0ICRaRVJPX09JRCAkYmxvYl90d28gQVx0b3V0ZXIvaW5uZXJcbiIgJiYKKwkJcHJpbnRmICI6MTAwNjQ0IDAwMDAwMCAkYmxvYl90d28gJFpFUk9fT0lEIERcdG91dGVyL2lubmVyXG4iICYmCisJCXByaW50ZiAiOjEwMDY0NCAwMDAwMDAgJGJsb2JfdHdvICRaRVJPX09JRCBEXHRvdXRlci9pbm5lclxuIiAmJgorCQlwcmludGYgIjoxMDA2NDQgMDAwMDAwICRibG9iX3R3byAkWkVST19PSUQgRFx0b3V0ZXIvaW5uZXJcbiIKKwl9ID5leHBlY3QgJiYKKwlnaXQgZGlmZi10cmVlIC1yIC0tbm8tYWJicmV2IG9uZSB0d28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIHdpdGggcmVuYW1lcycgJworCSMgc2FtZSBleHBlY3RhdGlvbiBhcyBhYm92ZSwgc2luY2Ugd2UgZGlzYWJsZSByZW5hbWUgZGV0ZWN0aW9uCisJZ2l0IGRpZmYtdHJlZSAtTSAtciAtLW5vLWFiYnJldiBvbmUgdHdvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA1OS1kaWZmLXN1Ym1vZHVsZS1ub3QtaW5pdGlhbGl6ZWQuc2ggYi90L3Q0MDU5LWRpZmYtc3VibW9kdWxlLW5vdC1pbml0aWFsaXplZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OWJjYTdiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA1OS1kaWZmLXN1Ym1vZHVsZS1ub3QtaW5pdGlhbGl6ZWQuc2gKQEAgLTAsMCArMSwxMjcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTYgSmFjb2IgS2VsbGVyLCBiYXNlZCBvbiB0NDA0MSBieSBKZW5zIExlaG1hbm4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBmb3Igc3VibW9kdWxlIGRpZmYgb24gbm9uLWNoZWNrZWQgb3V0IHN1Ym1vZHVsZQorCitUaGlzIHRlc3QgdHJpZXMgdG8gdmVyaWZ5IHRoYXQgYWRkX3N1Ym1vZHVsZV9vZGIgd29ya3Mgd2hlbiB0aGUgc3VibW9kdWxlIHdhcworaW5pdGlhbGl6ZWQgcHJldmlvdXNseSBidXQgdGhlIGNoZWNrb3V0IGhhcyBzaW5jZSBiZWVuIHJlbW92ZWQuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRlc3RlZCBub24tVVRGLTggZW5jb2RpbmcKK3Rlc3RfZW5jb2Rpbmc9IklTTzg4NTktMSIKKworIyBTdHJpbmcgImFkZGVkIiBpbiBHZXJtYW4gKHRyYW5zbGF0ZWQgd2l0aCBHb29nbGUgVHJhbnNsYXRlKSwgZW5jb2RlZCBpbiBVVEYtOCwKKyMgdXNlZCBpbiBzYW1wbGUgY29tbWl0IGxvZyBtZXNzYWdlcyBpbiBhZGRfZmlsZSgpIGZ1bmN0aW9uIGJlbG93LgorYWRkZWQ9JChwcmludGYgImhpbnp1Z2VmXDMwM1wyNzRndCIpCisKK2FkZF9maWxlICgpIHsKKwkoCisJCWNkICIkMSIgJiYKKwkJc2hpZnQgJiYKKwkJZm9yIG5hbWUKKwkJZG8KKwkJCWVjaG8gIiRuYW1lIiA+IiRuYW1lIiAmJgorCQkJZ2l0IGFkZCAiJG5hbWUiICYmCisJCQl0ZXN0X3RpY2sgJiYKKwkJCSMgImdpdCBjb21taXQgLW0iIHdvdWxkIGJyZWFrIE1pbkdXLCBhcyBXaW5kb3dzIHJlZnVzZSB0byBwYXNzCisJCQkjICR0ZXN0X2VuY29kaW5nIGVuY29kZWQgcGFyYW1ldGVyIHRvIGdpdC4KKwkJCWVjaG8gIkFkZCAkbmFtZSAoJGFkZGVkICRuYW1lKSIgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyB8CisJCQlnaXQgLWMgImkxOG4uY29tbWl0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmciIGNvbW1pdCAtRiAtCisJCWRvbmUgPi9kZXYvbnVsbCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tc2hvcnQgLS12ZXJpZnkgSEVBRAorCSkKK30KKworY29tbWl0X2ZpbGUgKCkgeworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgIiRAIiAtbSAiQ29tbWl0ICQqIiA+L2Rldi9udWxsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gc3VibW9kdWxlcycgJworCXRlc3RfY3JlYXRlX3JlcG8gc20yICYmCisJYWRkX2ZpbGUgLiBmb28gJiYKKwlhZGRfZmlsZSBzbTIgZm9vMSBmb28yICYmCisJc21oZWFkMT0kKGdpdCAtQyBzbTIgcmV2LXBhcnNlIC0tc2hvcnQgLS12ZXJpZnkgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLSBnaXQgc3VibW9kdWxlIGFkZCcgJworCWdpdCBzdWJtb2R1bGUgYWRkIC4vc20yIHNtMSAmJgorCWNvbW1pdF9maWxlIHNtMSAuZ2l0bW9kdWxlcyAmJgorCWdpdCBkaWZmLXRyZWUgLXAgLS1uby1jb21taXQtaWQgLS1zdWJtb2R1bGU9bG9nIEhFQUQgLS0gc20xID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgMDAwMDAwMC4uLiRzbWhlYWQxIChuZXcgc3VibW9kdWxlKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgZGlyZWN0b3J5IHJlbW92ZWQnICcKKwlybSAtcmYgc20xICYmCisJZ2l0IGRpZmYtdHJlZSAtcCAtLW5vLWNvbW1pdC1pZCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCAtLSBzbTEgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAwMDAwMDAwLi4uJHNtaGVhZDEgKG5ldyBzdWJtb2R1bGUpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gc3VibW9kdWxlIG11bHRpcGxlIGNvbW1pdHMnICcKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWNoZWNrb3V0IHNtMSAmJgorCXNtaGVhZDI9JChhZGRfZmlsZSBzbTEgZm9vMyBmb280KSAmJgorCWNvbW1pdF9maWxlIHNtMSAmJgorCWdpdCBkaWZmLXRyZWUgLXAgLS1uby1jb21taXQtaWQgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkc21oZWFkMS4uJHNtaGVhZDI6CisJICA+IEFkZCBmb280ICgkYWRkZWQgZm9vNCkKKwkgID4gQWRkIGZvbzMgKCRhZGRlZCBmb28zKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgcmVtb3ZlZCBtdWx0aXBsZSBjb21taXRzJyAnCisJcm0gLXJmIHNtMSAmJgorCWdpdCBkaWZmLXRyZWUgLXAgLS1uby1jb21taXQtaWQgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkc21oZWFkMS4uJHNtaGVhZDI6CisJICA+IEFkZCBmb280ICgkYWRkZWQgZm9vNCkKKwkgID4gQWRkIGZvbzMgKCRhZGRlZCBmb28zKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgbm90IGluaXRpYWxpemVkIGluIG5ldyBjbG9uZScgJworCWdpdCBjbG9uZSAuIHNtMyAmJgorCWdpdCAtQyBzbTMgZGlmZi10cmVlIC1wIC0tbm8tY29tbWl0LWlkIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJHNtaGVhZDEuLi4kc21oZWFkMiAoY29tbWl0cyBub3QgcHJlc2VudCkKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3VibW9kdWxlIG1vdmVkJyAnCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1jaGVja291dCBzbTEgJiYKKwlnaXQgbXYgc20xIHNtNCAmJgorCWNvbW1pdF9maWxlIHNtNCAmJgorCWdpdCBkaWZmLXRyZWUgLXAgLS1uby1jb21taXQtaWQgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtNCAwMDAwMDAwLi4uJHNtaGVhZDIgKG5ldyBzdWJtb2R1bGUpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBtb3ZlZCB0aGVuIHJlbW92ZWQnICcKKwlzbWhlYWQzPSQoYWRkX2ZpbGUgc200IGZvbzYgZm9vNykgJiYKKwljb21taXRfZmlsZSBzbTQgJiYKKwlybSAtcmYgc200ICYmCisJZ2l0IGRpZmYtdHJlZSAtcCAtLW5vLWNvbW1pdC1pZCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc200ICRzbWhlYWQyLi4kc21oZWFkMzoKKwkgID4gQWRkIGZvbzcgKCRhZGRlZCBmb283KQorCSAgPiBBZGQgZm9vNiAoJGFkZGVkIGZvbzYpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA2MC1kaWZmLXN1Ym1vZHVsZS1vcHRpb24tZGlmZi1mb3JtYXQuc2ggYi90L3Q0MDYwLWRpZmYtc3VibW9kdWxlLW9wdGlvbi1kaWZmLWZvcm1hdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYzgyMjljCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA2MC1kaWZmLXN1Ym1vZHVsZS1vcHRpb24tZGlmZi1mb3JtYXQuc2gKQEAgLTAsMCArMSw4MzMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgSmVucyBMZWhtYW5uLCBiYXNlZCBvbiB0NzQwMSBieSBQaW5nIFlpbgorIyBDb3B5cmlnaHQgKGMpIDIwMTEgQWxleGV5IFNodW1raW4gKCsgbm9uLVVURi04IGNvbW1pdCBlbmNvZGluZyB0ZXN0cykKKyMgQ29weXJpZ2h0IChjKSAyMDE2IEphY29iIEtlbGxlciAoY29weSArIGNvbnZlcnQgdG8gLS1zdWJtb2R1bGU9ZGlmZikKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nU3VwcG9ydCBmb3IgZGlmZiBmb3JtYXQgdmVyYm9zZSBzdWJtb2R1bGUgZGlmZmVyZW5jZSBpbiBnaXQgZGlmZgorCitUaGlzIHRlc3QgdHJpZXMgdG8gdmVyaWZ5IHRoZSBzYW5pdHkgb2YgLS1zdWJtb2R1bGU9ZGlmZiBvcHRpb24gb2YgZ2l0IGRpZmYuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRlc3RlZCBub24tVVRGLTggZW5jb2RpbmcKK3Rlc3RfZW5jb2Rpbmc9IklTTzg4NTktMSIKKworIyBTdHJpbmcgImFkZGVkIiBpbiBHZXJtYW4gKHRyYW5zbGF0ZWQgd2l0aCBHb29nbGUgVHJhbnNsYXRlKSwgZW5jb2RlZCBpbiBVVEYtOCwKKyMgdXNlZCBpbiBzYW1wbGUgY29tbWl0IGxvZyBtZXNzYWdlcyBpbiBhZGRfZmlsZSgpIGZ1bmN0aW9uIGJlbG93LgorYWRkZWQ9JChwcmludGYgImhpbnp1Z2VmXDMwM1wyNzRndCIpCisKK2FkZF9maWxlICgpIHsKKwkoCisJCWNkICIkMSIgJiYKKwkJc2hpZnQgJiYKKwkJZm9yIG5hbWUKKwkJZG8KKwkJCWVjaG8gIiRuYW1lIiA+IiRuYW1lIiAmJgorCQkJZ2l0IGFkZCAiJG5hbWUiICYmCisJCQl0ZXN0X3RpY2sgJiYKKwkJCSMgImdpdCBjb21taXQgLW0iIHdvdWxkIGJyZWFrIE1pbkdXLCBhcyBXaW5kb3dzIHJlZnVzZSB0byBwYXNzCisJCQkjICR0ZXN0X2VuY29kaW5nIGVuY29kZWQgcGFyYW1ldGVyIHRvIGdpdC4KKwkJCWVjaG8gIkFkZCAkbmFtZSAoJGFkZGVkICRuYW1lKSIgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyB8CisJCQlnaXQgLWMgImkxOG4uY29tbWl0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmciIGNvbW1pdCAtRiAtCisJCWRvbmUgPi9kZXYvbnVsbCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tc2hvcnQgLS12ZXJpZnkgSEVBRAorCSkKK30KKworY29tbWl0X2ZpbGUgKCkgeworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgIiRAIiAtbSAiQ29tbWl0ICQqIiA+L2Rldi9udWxsCit9CisKK2RpZmZfY21wICgpIHsKKyAgICAgICBmb3IgaSBpbiAiJDEiICIkMiIKKyAgICAgICBkbworCQlzZWQgLWUgJ3MvXmluZGV4IDAwMDAwMDBcLlwuWzAtOWEtZl0qL2luZGV4IDAwMDAwMDAuLjEyMzQ1NjcvJyBcCisJCS1lICdzL15pbmRleCBbMC05YS1mXSpcLlwuWzAtOWEtZl0qL2luZGV4IDEyMzQ1NjcuLjg5YWJjZGUvJyBcCisJCSIkaSIgPiIkaS5jb21wYXJlIiB8fCByZXR1cm4gMQorICAgICAgIGRvbmUgJiYKKyAgICAgICB0ZXN0X2NtcCAiJDEuY29tcGFyZSIgIiQyLmNvbXBhcmUiICYmCisgICAgICAgcm0gLWYgIiQxLmNvbXBhcmUiICIkMi5jb21wYXJlIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzbTEgJiYKKwlhZGRfZmlsZSAuIGZvbyAmJgorCWhlYWQxPSQoYWRkX2ZpbGUgc20xIGZvbzEgZm9vMikgJiYKKwlmdWxsaGVhZDE9JChnaXQgLUMgc20xIHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRlZCBzdWJtb2R1bGUnICcKKwlnaXQgYWRkIHNtMSAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWRpZmYgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIDAwMDAwMDAuLi4kaGVhZDEgKG5ldyBzdWJtb2R1bGUpCisJZGlmZiAtLWdpdCBhL3NtMS9mb28xIGIvc20xL2ZvbzEKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLjE3MTVhY2QKKwktLS0gL2Rldi9udWxsCisJKysrIGIvc20xL2ZvbzEKKwlAQCAtMCwwICsxIEBACisJK2ZvbzEKKwlkaWZmIC0tZ2l0IGEvc20xL2ZvbzIgYi9zbTEvZm9vMgorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uNTRiMDYwZQorCS0tLSAvZGV2L251bGwKKwkrKysgYi9zbTEvZm9vMgorCUBAIC0wLDAgKzEgQEAKKwkrZm9vMgorCUVPRgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRlZCBzdWJtb2R1bGUsIHNldCBkaWZmLnN1Ym1vZHVsZScgJworCXRlc3RfY29uZmlnIGRpZmYuc3VibW9kdWxlIGxvZyAmJgorCWdpdCBhZGQgc20xICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgMDAwMDAwMC4uLiRoZWFkMSAobmV3IHN1Ym1vZHVsZSkKKwlkaWZmIC0tZ2l0IGEvc20xL2ZvbzEgYi9zbTEvZm9vMQorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uMTcxNWFjZAorCS0tLSAvZGV2L251bGwKKwkrKysgYi9zbTEvZm9vMQorCUBAIC0wLDAgKzEgQEAKKwkrZm9vMQorCWRpZmYgLS1naXQgYS9zbTEvZm9vMiBiL3NtMS9mb28yCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi41NGIwNjBlCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMS9mb28yCisJQEAgLTAsMCArMSBAQAorCStmb28yCisJRU9GCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3VibW9kdWxlPXNob3J0IG92ZXJyaWRlcyBkaWZmLnN1Ym1vZHVsZScgJworCXRlc3RfY29uZmlnIGRpZmYuc3VibW9kdWxlIGxvZyAmJgorCWdpdCBhZGQgc20xICYmCisJZ2l0IGRpZmYgLS1zdWJtb2R1bGU9c2hvcnQgLS1jYWNoZWQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL3NtMSBiL3NtMQorCW5ldyBmaWxlIG1vZGUgMTYwMDAwCisJaW5kZXggMDAwMDAwMC4uJGhlYWQxCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMQorCUBAIC0wLDAgKzEgQEAKKwkrU3VicHJvamVjdCBjb21taXQgJGZ1bGxoZWFkMQorCUVPRgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLnN1Ym1vZHVsZSBkb2VzIG5vdCBhZmZlY3QgcGx1bWJpbmcnICcKKwl0ZXN0X2NvbmZpZyBkaWZmLnN1Ym1vZHVsZSBsb2cgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9zbTEgYi9zbTEKKwluZXcgZmlsZSBtb2RlIDE2MDAwMAorCWluZGV4IDAwMDAwMDAuLiRoZWFkMQorCS0tLSAvZGV2L251bGwKKwkrKysgYi9zbTEKKwlAQCAtMCwwICsxIEBACisJK1N1YnByb2plY3QgY29tbWl0ICRmdWxsaGVhZDEKKwlFT0YKKwlkaWZmX2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY29tbWl0X2ZpbGUgc20xICYmCitoZWFkMj0kKGFkZF9maWxlIHNtMSBmb28zKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoZm9yd2FyZCknICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1kaWZmIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDEuLiRoZWFkMjoKKwlkaWZmIC0tZ2l0IGEvc20xL2ZvbzMgYi9zbTEvZm9vMworCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uYzFlYzZjNgorCS0tLSAvZGV2L251bGwKKwkrKysgYi9zbTEvZm9vMworCUBAIC0wLDAgKzEgQEAKKwkrZm9vMworCUVPRgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoZm9yd2FyZCknICcKKwlnaXQgZGlmZiAtLXN1Ym1vZHVsZT1kaWZmID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQxLi4kaGVhZDI6CisJZGlmZiAtLWdpdCBhL3NtMS9mb28zIGIvc20xL2ZvbzMKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLmMxZWM2YzYKKwktLS0gL2Rldi9udWxsCisJKysrIGIvc20xL2ZvbzMKKwlAQCAtMCwwICsxIEBACisJK2ZvbzMKKwlFT0YKKwlkaWZmX2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGZvcndhcmQpIC0tc3VibW9kdWxlJyAnCisJZ2l0IGRpZmYgLS1zdWJtb2R1bGUgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDEuLiRoZWFkMjoKKwkgID4gQWRkIGZvbzMgKCRhZGRlZCBmb28zKQorCUVPRgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitmdWxsaGVhZDI9JChjZCBzbTE7IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShmb3J3YXJkKSAtLXN1Ym1vZHVsZT1zaG9ydCcgJworCWdpdCBkaWZmIC0tc3VibW9kdWxlPXNob3J0ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9zbTEgYi9zbTEKKwlpbmRleCAkaGVhZDEuLiRoZWFkMiAxNjAwMDAKKwktLS0gYS9zbTEKKwkrKysgYi9zbTEKKwlAQCAtMSArMSBAQAorCS1TdWJwcm9qZWN0IGNvbW1pdCAkZnVsbGhlYWQxCisJK1N1YnByb2plY3QgY29tbWl0ICRmdWxsaGVhZDIKKwlFT0YKKwlkaWZmX2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY29tbWl0X2ZpbGUgc20xICYmCitoZWFkMz0kKAorCWNkIHNtMSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRH4yID4vZGV2L251bGwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc2hvcnQgLS12ZXJpZnkgSEVBRAorKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoYmFja3dhcmQpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQyLi4kaGVhZDMgKHJld2luZCk6CisJZGlmZiAtLWdpdCBhL3NtMS9mb28yIGIvc20xL2ZvbzIKKwlkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCA1NGIwNjBlLi4wMDAwMDAwCisJLS0tIGEvc20xL2ZvbzIKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS1mb28yCisJZGlmZiAtLWdpdCBhL3NtMS9mb28zIGIvc20xL2ZvbzMKKwlkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCBjMWVjNmM2Li4wMDAwMDAwCisJLS0tIGEvc20xL2ZvbzMKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS1mb28zCisJRU9GCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2hlYWQ0PSQoYWRkX2ZpbGUgc20xIGZvbzQgZm9vNSkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShiYWNrd2FyZCBhbmQgZm9yd2FyZCknICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1kaWZmIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDIuLi4kaGVhZDQ6CisJZGlmZiAtLWdpdCBhL3NtMS9mb28yIGIvc20xL2ZvbzIKKwlkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCA1NGIwNjBlLi4wMDAwMDAwCisJLS0tIGEvc20xL2ZvbzIKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS1mb28yCisJZGlmZiAtLWdpdCBhL3NtMS9mb28zIGIvc20xL2ZvbzMKKwlkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCBjMWVjNmM2Li4wMDAwMDAwCisJLS0tIGEvc20xL2ZvbzMKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS1mb28zCisJZGlmZiAtLWdpdCBhL3NtMS9mb280IGIvc20xL2ZvbzQKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLmEwMDE2ZGIKKwktLS0gL2Rldi9udWxsCisJKysrIGIvc20xL2ZvbzQKKwlAQCAtMCwwICsxIEBACisJK2ZvbzQKKwlkaWZmIC0tZ2l0IGEvc20xL2ZvbzUgYi9zbTEvZm9vNQorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uZDZmMjQxMworCS0tLSAvZGV2L251bGwKKwkrKysgYi9zbTEvZm9vNQorCUBAIC0wLDAgKzEgQEAKKwkrZm9vNQorCUVPRgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjb21taXRfZmlsZSBzbTEgJiYKK212IHNtMSBzbTEtYmFrICYmCitlY2hvIHNtMSA+c20xICYmCitoZWFkNT0kKGdpdCBoYXNoLW9iamVjdCBzbTEgfCBjdXQgLWMxLTcpICYmCitnaXQgYWRkIHNtMSAmJgorcm0gLWYgc20xICYmCittdiBzbTEtYmFrIHNtMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0eXBlY2hhbmdlZCBzdWJtb2R1bGUoc3VibW9kdWxlLT5ibG9iKSwgLS1jYWNoZWQnICcKKwlnaXQgZGlmZiAtLXN1Ym1vZHVsZT1kaWZmIC0tY2FjaGVkID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ0Li4uMDAwMDAwMCAoc3VibW9kdWxlIGRlbGV0ZWQpCisJZGlmZiAtLWdpdCBhL3NtMS9mb28xIGIvc20xL2ZvbzEKKwlkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAxNzE1YWNkLi4wMDAwMDAwCisJLS0tIGEvc20xL2ZvbzEKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS1mb28xCisJZGlmZiAtLWdpdCBhL3NtMS9mb280IGIvc20xL2ZvbzQKKwlkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCBhMDAxNmRiLi4wMDAwMDAwCisJLS0tIGEvc20xL2ZvbzQKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS1mb280CisJZGlmZiAtLWdpdCBhL3NtMS9mb281IGIvc20xL2ZvbzUKKwlkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCBkNmYyNDEzLi4wMDAwMDAwCisJLS0tIGEvc20xL2ZvbzUKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS1mb281CisJZGlmZiAtLWdpdCBhL3NtMSBiL3NtMQorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uOWRhNWZiOAorCS0tLSAvZGV2L251bGwKKwkrKysgYi9zbTEKKwlAQCAtMCwwICsxIEBACisJK3NtMQorCUVPRgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0eXBlY2hhbmdlZCBzdWJtb2R1bGUoc3VibW9kdWxlLT5ibG9iKScgJworCWdpdCBkaWZmIC0tc3VibW9kdWxlPWRpZmYgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL3NtMSBiL3NtMQorCWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDlkYTVmYjguLjAwMDAwMDAKKwktLS0gYS9zbTEKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS1zbTEKKwlTdWJtb2R1bGUgc20xIDAwMDAwMDAuLi4kaGVhZDQgKG5ldyBzdWJtb2R1bGUpCisJZGlmZiAtLWdpdCBhL3NtMS9mb28xIGIvc20xL2ZvbzEKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLjE3MTVhY2QKKwktLS0gL2Rldi9udWxsCisJKysrIGIvc20xL2ZvbzEKKwlAQCAtMCwwICsxIEBACisJK2ZvbzEKKwlkaWZmIC0tZ2l0IGEvc20xL2ZvbzQgYi9zbTEvZm9vNAorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uYTAwMTZkYgorCS0tLSAvZGV2L251bGwKKwkrKysgYi9zbTEvZm9vNAorCUBAIC0wLDAgKzEgQEAKKwkrZm9vNAorCWRpZmYgLS1naXQgYS9zbTEvZm9vNSBiL3NtMS9mb281CisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi5kNmYyNDEzCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMS9mb281CisJQEAgLTAsMCArMSBAQAorCStmb281CisJRU9GCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3JtIC1yZiBzbTEgJiYKK2dpdCBjaGVja291dC1pbmRleCBzbTEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZShzdWJtb2R1bGUtPmJsb2IpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ0Li4uMDAwMDAwMCAoc3VibW9kdWxlIGRlbGV0ZWQpCisJZGlmZiAtLWdpdCBhL3NtMSBiL3NtMQorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uOWRhNWZiOAorCS0tLSAvZGV2L251bGwKKwkrKysgYi9zbTEKKwlAQCAtMCwwICsxIEBACisJK3NtMQorCUVPRgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitybSAtZiBzbTEgJiYKK3Rlc3RfY3JlYXRlX3JlcG8gc20xICYmCitoZWFkNj0kKGFkZF9maWxlIHNtMSBmb282IGZvbzcpCitmdWxsaGVhZDY9JChjZCBzbTE7IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbmV4aXN0ZW50IGNvbW1pdCcgJworCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWRpZmYgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xICRoZWFkNC4uLiRoZWFkNiAoY29tbWl0cyBub3QgcHJlc2VudCkKKwlFT0YKKwlkaWZmX2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY29tbWl0X2ZpbGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZShibG9iLT5zdWJtb2R1bGUpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9zbTEgYi9zbTEKKwlkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCA5ZGE1ZmI4Li4wMDAwMDAwCisJLS0tIGEvc20xCisJKysrIC9kZXYvbnVsbAorCUBAIC0xICswLDAgQEAKKwktc20xCisJU3VibW9kdWxlIHNtMSAwMDAwMDAwLi4uJGhlYWQ2IChuZXcgc3VibW9kdWxlKQorCWRpZmYgLS1naXQgYS9zbTEvZm9vNiBiL3NtMS9mb282CisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi40NjIzOThiCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMS9mb282CisJQEAgLTAsMCArMSBAQAorCStmb282CisJZGlmZiAtLWdpdCBhL3NtMS9mb283IGIvc20xL2ZvbzcKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLjZlOTI2MmMKKwktLS0gL2Rldi9udWxsCisJKysrIGIvc20xL2ZvbzcKKwlAQCAtMCwwICsxIEBACisJK2ZvbzcKKwlFT0YKKwlkaWZmX2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY29tbWl0X2ZpbGUgc20xICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaXMgdXAgdG8gZGF0ZScgJworCWhlYWQ3PSQoZ2l0IC1DIHNtMSByZXYtcGFyc2UgLS1zaG9ydCAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWRpZmYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnQnICcKKwllY2hvIG5ldyA+IHNtMS9uZXctZmlsZSAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWRpZmYgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50CisJRU9GCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCAodW50cmFja2VkIGlnbm9yZWQpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCAoZGlydHkgaWdub3JlZCknICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IC0tc3VibW9kdWxlPWRpZmYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnQgKGFsbCBpZ25vcmVkKScgJworCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9YWxsIC0tc3VibW9kdWxlPWRpZmYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50JyAnCisJZWNobyBuZXcgPiBzbTEvZm9vNiAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWRpZmYgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50CisJU3VibW9kdWxlIHNtMSBjb250YWlucyBtb2RpZmllZCBjb250ZW50CisJZGlmZiAtLWdpdCBhL3NtMS9mb282IGIvc20xL2ZvbzYKKwlpbmRleCA0NjIzOThiLi4zZTc1NzY1IDEwMDY0NAorCS0tLSBhL3NtMS9mb282CisJKysrIGIvc20xL2ZvbzYKKwlAQCAtMSArMSBAQAorCS1mb282CisJK25ldworCUVPRgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisjIE5PVCBPSwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZpZWQgY29udGVudCAodW50cmFja2VkIGlnbm9yZWQpJyAnCisJZWNobyBuZXcgPiBzbTEvZm9vNiAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkIC0tc3VibW9kdWxlPWRpZmYgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIGNvbnRhaW5zIG1vZGlmaWVkIGNvbnRlbnQKKwlkaWZmIC0tZ2l0IGEvc20xL2ZvbzYgYi9zbTEvZm9vNgorCWluZGV4IDQ2MjM5OGIuLjNlNzU3NjUgMTAwNjQ0CisJLS0tIGEvc20xL2ZvbzYKKwkrKysgYi9zbTEvZm9vNgorCUBAIC0xICsxIEBACisJLWZvbzYKKwkrbmV3CisJRU9GCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQgKGRpcnR5IGlnbm9yZWQpJyAnCisJZWNobyBuZXcgPiBzbTEvZm9vNiAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQgKGFsbCBpZ25vcmVkKScgJworCWVjaG8gbmV3ID4gc20xL2ZvbzYgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tc3VibW9kdWxlPWRpZmYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgbW9kaWZpZWQgY29udGVudCcgJworCXJtIC1mIHNtMS9uZXctZmlsZSAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWRpZmYgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIGNvbnRhaW5zIG1vZGlmaWVkIGNvbnRlbnQKKwlkaWZmIC0tZ2l0IGEvc20xL2ZvbzYgYi9zbTEvZm9vNgorCWluZGV4IDQ2MjM5OGIuLjNlNzU3NjUgMTAwNjQ0CisJLS0tIGEvc20xL2ZvbzYKKwkrKysgYi9zbTEvZm9vNgorCUBAIC0xICsxIEBACisJLWZvbzYKKwkrbmV3CisJRU9GCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKyhjZCBzbTE7IGdpdCBjb21taXQgLW1jaGFuZ2UgZm9vNiA+L2Rldi9udWxsKSAmJgoraGVhZDg9JChjZCBzbTE7IGdpdCByZXYtcGFyc2UgLS1zaG9ydCAtLXZlcmlmeSBIRUFEKSAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGlzIG1vZGlmaWVkJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ3Li4kaGVhZDg6CisJZGlmZiAtLWdpdCBhL3NtMS9mb282IGIvc20xL2ZvbzYKKwlpbmRleCA0NjIzOThiLi4zZTc1NzY1IDEwMDY0NAorCS0tLSBhL3NtMS9mb282CisJKysrIGIvc20xL2ZvbzYKKwlAQCAtMSArMSBAQAorCS1mb282CisJK25ldworCUVPRgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnQnICcKKwllY2hvIG5ldyA+IHNtMS9uZXctZmlsZSAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWRpZmYgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50CisJU3VibW9kdWxlIHNtMSAkaGVhZDcuLiRoZWFkODoKKwlkaWZmIC0tZ2l0IGEvc20xL2ZvbzYgYi9zbTEvZm9vNgorCWluZGV4IDQ2MjM5OGIuLjNlNzU3NjUgMTAwNjQ0CisJLS0tIGEvc20xL2ZvbzYKKwkrKysgYi9zbTEvZm9vNgorCUBAIC0xICsxIEBACisJLWZvbzYKKwkrbmV3CisJRU9GCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCAodW50cmFja2VkIGlnbm9yZWQpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ3Li4kaGVhZDg6CisJZGlmZiAtLWdpdCBhL3NtMS9mb282IGIvc20xL2ZvbzYKKwlpbmRleCA0NjIzOThiLi4zZTc1NzY1IDEwMDY0NAorCS0tLSBhL3NtMS9mb282CisJKysrIGIvc20xL2ZvbzYKKwlAQCAtMSArMSBAQAorCS1mb282CisJK25ldworCUVPRgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnQgKGRpcnR5IGlnbm9yZWQpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSAtLXN1Ym1vZHVsZT1kaWZmIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDcuLiRoZWFkODoKKwlkaWZmIC0tZ2l0IGEvc20xL2ZvbzYgYi9zbTEvZm9vNgorCWluZGV4IDQ2MjM5OGIuLjNlNzU3NjUgMTAwNjQ0CisJLS0tIGEvc20xL2ZvbzYKKwkrKysgYi9zbTEvZm9vNgorCUBAIC0xICsxIEBACisJLWZvbzYKKwkrbmV3CisJRU9GCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCAoYWxsIGlnbm9yZWQpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz1hbGwgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQnICcKKwllY2hvIG1vZGlmaWNhdGlvbiA+PiBzbTEvZm9vNiAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWRpZmYgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50CisJU3VibW9kdWxlIHNtMSBjb250YWlucyBtb2RpZmllZCBjb250ZW50CisJU3VibW9kdWxlIHNtMSAkaGVhZDcuLiRoZWFkODoKKwlkaWZmIC0tZ2l0IGEvc20xL2ZvbzYgYi9zbTEvZm9vNgorCWluZGV4IDQ2MjM5OGIuLmRmZGE1NDEgMTAwNjQ0CisJLS0tIGEvc20xL2ZvbzYKKwkrKysgYi9zbTEvZm9vNgorCUBAIC0xICsxLDIgQEAKKwktZm9vNgorCStuZXcKKwkrbW9kaWZpY2F0aW9uCisJRU9GCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQgKHVudHJhY2tlZCBpZ25vcmVkKScgJworCWVjaG8gbW9kaWZpY2F0aW9uID4+IHNtMS9mb282ICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgY29udGFpbnMgbW9kaWZpZWQgY29udGVudAorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ3Li4kaGVhZDg6CisJZGlmZiAtLWdpdCBhL3NtMS9mb282IGIvc20xL2ZvbzYKKwlpbmRleCA0NjIzOThiLi5lMjBlMmQ5IDEwMDY0NAorCS0tLSBhL3NtMS9mb282CisJKysrIGIvc20xL2ZvbzYKKwlAQCAtMSArMSwzIEBACisJLWZvbzYKKwkrbmV3CisJK21vZGlmaWNhdGlvbgorCSttb2RpZmljYXRpb24KKwlFT0YKKwlkaWZmX2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZpZWQgY29udGVudCAoZGlydHkgaWdub3JlZCknICcKKwllY2hvIG1vZGlmaWNhdGlvbiA+PiBzbTEvZm9vNiAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ3Li4kaGVhZDg6CisJZGlmZiAtLWdpdCBhL3NtMS9mb282IGIvc20xL2ZvbzYKKwlpbmRleCA0NjIzOThiLi4zZTc1NzY1IDEwMDY0NAorCS0tLSBhL3NtMS9mb282CisJKysrIGIvc20xL2ZvbzYKKwlAQCAtMSArMSBAQAorCS1mb282CisJK25ldworCUVPRgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50IChhbGwgaWdub3JlZCknICcKKwllY2hvIG1vZGlmaWNhdGlvbiA+PiBzbTEvZm9vNiAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXMgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKKyMgTk9UIE9LCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgbW9kaWZpZWQgY29udGVudCcgJworCXJtIC1mIHNtMS9uZXctZmlsZSAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWRpZmYgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIGNvbnRhaW5zIG1vZGlmaWVkIGNvbnRlbnQKKwlTdWJtb2R1bGUgc20xICRoZWFkNy4uJGhlYWQ4OgorCWRpZmYgLS1naXQgYS9zbTEvZm9vNiBiL3NtMS9mb282CisJaW5kZXggNDYyMzk4Yi4uYWM0NjZjYSAxMDA2NDQKKwktLS0gYS9zbTEvZm9vNgorCSsrKyBiL3NtMS9mb282CisJQEAgLTEgKzEsNSBAQAorCS1mb282CisJK25ldworCSttb2RpZmljYXRpb24KKwkrbW9kaWZpY2F0aW9uCisJK21vZGlmaWNhdGlvbgorCSttb2RpZmljYXRpb24KKwlFT0YKKwlkaWZmX2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworcm0gLXJmIHNtMQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlZCBzdWJtb2R1bGUnICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1kaWZmIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDcuLi4wMDAwMDAwIChzdWJtb2R1bGUgZGVsZXRlZCkKKwlFT0YKKwlkaWZmX2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHNlY29uZCBzdWJtb2R1bGUnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNtMiAmJgorCWhlYWQ5PSQoYWRkX2ZpbGUgc20yIGZvbzggZm9vOSkgJiYKKwlnaXQgYWRkIHNtMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBzdWJtb2R1bGVzJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ3Li4uMDAwMDAwMCAoc3VibW9kdWxlIGRlbGV0ZWQpCisJU3VibW9kdWxlIHNtMiAwMDAwMDAwLi4uJGhlYWQ5IChuZXcgc3VibW9kdWxlKQorCWRpZmYgLS1naXQgYS9zbTIvZm9vOCBiL3NtMi9mb284CisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi5kYjk5MTZiCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMi9mb284CisJQEAgLTAsMCArMSBAQAorCStmb284CisJZGlmZiAtLWdpdCBhL3NtMi9mb285IGIvc20yL2ZvbzkKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLjljM2I0ZjYKKwktLS0gL2Rldi9udWxsCisJKysrIGIvc20yL2ZvbzkKKwlAQCAtMCwwICsxIEBACisJK2ZvbzkKKwlFT0YKKwlkaWZmX2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aCBmaWx0ZXInICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1kaWZmIEhFQUQgc20yID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTIgMDAwMDAwMC4uLiRoZWFkOSAobmV3IHN1Ym1vZHVsZSkKKwlkaWZmIC0tZ2l0IGEvc20yL2ZvbzggYi9zbTIvZm9vOAorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uZGI5OTE2YgorCS0tLSAvZGV2L251bGwKKwkrKysgYi9zbTIvZm9vOAorCUBAIC0wLDAgKzEgQEAKKwkrZm9vOAorCWRpZmYgLS1naXQgYS9zbTIvZm9vOSBiL3NtMi9mb285CisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi45YzNiNGY2CisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMi9mb285CisJQEAgLTAsMCArMSBAQAorCStmb285CisJRU9GCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NvbW1pdF9maWxlIHNtMgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l2ZW4gY29tbWl0JyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEXiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xICRoZWFkNy4uLjAwMDAwMDAgKHN1Ym1vZHVsZSBkZWxldGVkKQorCVN1Ym1vZHVsZSBzbTIgMDAwMDAwMC4uLiRoZWFkOSAobmV3IHN1Ym1vZHVsZSkKKwlkaWZmIC0tZ2l0IGEvc20yL2ZvbzggYi9zbTIvZm9vOAorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uZGI5OTE2YgorCS0tLSAvZGV2L251bGwKKwkrKysgYi9zbTIvZm9vOAorCUBAIC0wLDAgKzEgQEAKKwkrZm9vOAorCWRpZmYgLS1naXQgYS9zbTIvZm9vOSBiL3NtMi9mb285CisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi45YzNiNGY2CisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMi9mb285CisJQEAgLTAsMCArMSBAQAorCStmb285CisJRU9GCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC5naXQgZmlsZSBmb3Igc20yJyAnCisJKGNkIHNtMiAmJgorCSBSRUFMPSIkKHB3ZCkvLi4vLnJlYWwiICYmCisJIG12IC5naXQgIiRSRUFMIiAmJgorCSBlY2hvICJnaXRkaXI6ICRSRUFMIiA+LmdpdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLXN1Ym1vZHVsZT1kaWZmIHdpdGggLmdpdCBmaWxlJyAnCisJZ2l0IGRpZmYgLS1zdWJtb2R1bGU9ZGlmZiBIRUFEXiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xICRoZWFkNy4uLjAwMDAwMDAgKHN1Ym1vZHVsZSBkZWxldGVkKQorCVN1Ym1vZHVsZSBzbTIgMDAwMDAwMC4uLiRoZWFkOSAobmV3IHN1Ym1vZHVsZSkKKwlkaWZmIC0tZ2l0IGEvc20yL2ZvbzggYi9zbTIvZm9vOAorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uZGI5OTE2YgorCS0tLSAvZGV2L251bGwKKwkrKysgYi9zbTIvZm9vOAorCUBAIC0wLDAgKzEgQEAKKwkrZm9vOAorCWRpZmYgLS1naXQgYS9zbTIvZm9vOSBiL3NtMi9mb285CisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi45YzNiNGY2CisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMi9mb285CisJQEAgLTAsMCArMSBAQAorCStmb285CisJRU9GCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG5lc3RlZCBzdWJtb2R1bGUnICcKKwlnaXQgc3VibW9kdWxlIGFkZCAtZiAuL3NtMiAmJgorCWdpdCBjb21taXQgLWEgLW0gImFkZCBzbTIiICYmCisJZ2l0IC1DIHNtMiBzdWJtb2R1bGUgYWRkIC4uL3NtMiBuZXN0ZWQgJiYKKwlnaXQgLUMgc20yIGNvbW1pdCAtYSAtbSAibmVzdGVkIHN1YiIgJiYKKwloZWFkMTA9JChnaXQgLUMgc20yIHJldi1wYXJzZSAtLXNob3J0IC0tdmVyaWZ5IEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmUgbmVzdGVkIHN1Ym1vZHVsZSBIRUFEJyAnCisJZWNobyAibmVzdGVkIGNvbnRlbnQiID5zbTIvbmVzdGVkL2ZpbGUgJiYKKwlnaXQgLUMgc20yL25lc3RlZCBhZGQgZmlsZSAmJgorCWdpdCAtQyBzbTIvbmVzdGVkIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJuZXcgSEVBRCIgJiYKKwloZWFkMTE9JChnaXQgLUMgc20yL25lc3RlZCByZXYtcGFyc2UgLS1zaG9ydCAtLXZlcmlmeSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tc3VibW9kdWxlPWRpZmYgd2l0aCBtb3ZlZCBuZXN0ZWQgc3VibW9kdWxlIEhFQUQnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBuZXN0ZWQgJGhlYWQ5Li4kaGVhZDExOgorCWRpZmYgLS1naXQgYS9uZXN0ZWQvZmlsZSBiL25lc3RlZC9maWxlCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi5jYTI4MWY1CisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL25lc3RlZC9maWxlCisJQEAgLTAsMCArMSBAQAorCStuZXN0ZWQgY29udGVudAorCUVPRgorCWdpdCAtQyBzbTIgZGlmZiAtLXN1Ym1vZHVsZT1kaWZmID5hY3R1YWwgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1zdWJtb2R1bGU9ZGlmZiByZWN1cnNlcyBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20yIGNvbnRhaW5zIG1vZGlmaWVkIGNvbnRlbnQKKwlTdWJtb2R1bGUgc20yICRoZWFkOS4uJGhlYWQxMDoKKwlkaWZmIC0tZ2l0IGEvc20yLy5naXRtb2R1bGVzIGIvc20yLy5naXRtb2R1bGVzCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi4zYTgxNmI4CisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMi8uZ2l0bW9kdWxlcworCUBAIC0wLDAgKzEsMyBAQAorCStbc3VibW9kdWxlICJuZXN0ZWQiXQorCSsJcGF0aCA9IG5lc3RlZAorCSsJdXJsID0gLi4vc20yCisJU3VibW9kdWxlIG5lc3RlZCAwMDAwMDAwLi4uJGhlYWQxMSAobmV3IHN1Ym1vZHVsZSkKKwlkaWZmIC0tZ2l0IGEvc20yL25lc3RlZC9maWxlIGIvc20yL25lc3RlZC9maWxlCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi5jYTI4MWY1CisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMi9uZXN0ZWQvZmlsZQorCUBAIC0wLDAgKzEgQEAKKwkrbmVzdGVkIGNvbnRlbnQKKwlkaWZmIC0tZ2l0IGEvc20yL25lc3RlZC9mb284IGIvc20yL25lc3RlZC9mb284CisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi5kYjk5MTZiCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMi9uZXN0ZWQvZm9vOAorCUBAIC0wLDAgKzEgQEAKKwkrZm9vOAorCWRpZmYgLS1naXQgYS9zbTIvbmVzdGVkL2ZvbzkgYi9zbTIvbmVzdGVkL2ZvbzkKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLjljM2I0ZjYKKwktLS0gL2Rldi9udWxsCisJKysrIGIvc20yL25lc3RlZC9mb285CisJQEAgLTAsMCArMSBAQAorCStmb285CisJRU9GCisJZ2l0IGRpZmYgLS1zdWJtb2R1bGU9ZGlmZiA+YWN0dWFsIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNjEtZGlmZi1pbmRlbnQuc2ggYi90L3Q0MDYxLWRpZmYtaW5kZW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmN2E2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDYxLWRpZmYtaW5kZW50LnNoCkBAIC0wLDAgKzEsMzY4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBkaWZmIGluZGVudCBoZXVyaXN0aWMuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaAorCisjIENvbXBhcmUgdHdvIGRpZmYgb3V0cHV0cy4gSWdub3JlICJpbmRleCIgbGluZXMsIGJlY2F1c2Ugd2UgZG9uJ3QKKyMgY2FyZSBhYm91dCBTSEEtMXMgb3IgZmlsZSBtb2Rlcy4KK2NvbXBhcmVfZGlmZiAoKSB7CisJc2VkIC1lICIvXmluZGV4IC9kIiA8IiQxIiA+LnRtcC0xCisJc2VkIC1lICIvXmluZGV4IC9kIiA8IiQyIiA+LnRtcC0yCisJdGVzdF9jbXAgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCit9CisKKyMgQ29tcGFyZSBibGFtZSBvdXRwdXQgdXNpbmcgdGhlIGV4cGVjdGF0aW9uIGZvciBhIGRpZmYgYXMgcmVmZXJlbmNlLgorIyBPbmx5IGxvb2sgZm9yIHRoZSBsaW5lcyBjb21pbmcgZnJvbSBub24tYm91bmRhcnkgY29tbWl0cy4KK2NvbXBhcmVfYmxhbWUgKCkgeworCXNlZCAtbiAtZSAiMSw0ZCIgLWUgInMvXisvL3AiIDwiJDEiID4udG1wLTEKKwlzZWQgLW5lICJzL15bXl5dW14pXSopICovL3AiIDwiJDIiID4udG1wLTIKKwl0ZXN0X2NtcCAudG1wLTEgLnRtcC0yICYmIHJtIC1mIC50bXAtMSAudG1wLTIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZScgJworCWNhdCA8PC1cRU9GID5zcGFjZXMudHh0ICYmCisJMQorCTIKKwlhCisKKwliCisJMworCTQKKwlFT0YKKworCWNhdCA8PC1cRU9GID5mdW5jdGlvbnMuYyAmJgorCTEKKwkyCisJLyogZnVuY3Rpb24gKi8KKwlmb28oKSB7CisJICAgIGZvbworCX0KKworCTMKKwk0CisJRU9GCisKKwlnaXQgYWRkIHNwYWNlcy50eHQgZnVuY3Rpb25zLmMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIG9sZCAmJgorCisJY2F0IDw8LVxFT0YgPnNwYWNlcy50eHQgJiYKKwkxCisJMgorCWEKKworCWIKKwlhCisKKwliCisJMworCTQKKwlFT0YKKworCWNhdCA8PC1cRU9GID5mdW5jdGlvbnMuYyAmJgorCTEKKwkyCisJLyogZnVuY3Rpb24gKi8KKwliYXIoKSB7CisJICAgIGZvbworCX0KKworCS8qIGZ1bmN0aW9uICovCisJZm9vKCkgeworCSAgICBmb28KKwl9CisKKwkzCisJNAorCUVPRgorCisJZ2l0IGFkZCBzcGFjZXMudHh0IGZ1bmN0aW9ucy5jICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBuZXcgJiYKKworCXRyICJfIiAiICIgPDwtXEVPRiA+c3BhY2VzLWV4cGVjdCAmJgorCWRpZmYgLS1naXQgYS9zcGFjZXMudHh0IGIvc3BhY2VzLnR4dAorCS0tLSBhL3NwYWNlcy50eHQKKwkrKysgYi9zcGFjZXMudHh0CisJQEAgLTMsNSArMyw4IEBACisJIGEKKwlfCisJIGIKKwkrYQorCSsKKwkrYgorCSAzCisJIDQKKwlFT0YKKworCXRyICJfIiAiICIgPDwtXEVPRiA+c3BhY2VzLWNvbXBhY3RlZC1leHBlY3QgJiYKKwlkaWZmIC0tZ2l0IGEvc3BhY2VzLnR4dCBiL3NwYWNlcy50eHQKKwktLS0gYS9zcGFjZXMudHh0CisJKysrIGIvc3BhY2VzLnR4dAorCUBAIC0yLDYgKzIsOSBAQAorCSAyCisJIGEKKwlfCisJK2IKKwkrYQorCSsKKwkgYgorCSAzCisJIDQKKwlFT0YKKworCXRyICJfIiAiICIgPDwtXEVPRiA+ZnVuY3Rpb25zLWV4cGVjdCAmJgorCWRpZmYgLS1naXQgYS9mdW5jdGlvbnMuYyBiL2Z1bmN0aW9ucy5jCisJLS0tIGEvZnVuY3Rpb25zLmMKKwkrKysgYi9mdW5jdGlvbnMuYworCUBAIC0xLDYgKzEsMTEgQEAKKwkgMQorCSAyCisJIC8qIGZ1bmN0aW9uICovCisJK2JhcigpIHsKKwkrICAgIGZvbworCSt9CisJKworCSsvKiBmdW5jdGlvbiAqLworCSBmb28oKSB7CisJICAgICBmb28KKwkgfQorCUVPRgorCisJdHIgIl8iICIgIiA8PC1cRU9GID5mdW5jdGlvbnMtY29tcGFjdGVkLWV4cGVjdAorCWRpZmYgLS1naXQgYS9mdW5jdGlvbnMuYyBiL2Z1bmN0aW9ucy5jCisJLS0tIGEvZnVuY3Rpb25zLmMKKwkrKysgYi9mdW5jdGlvbnMuYworCUBAIC0xLDUgKzEsMTAgQEAKKwkgMQorCSAyCisJKy8qIGZ1bmN0aW9uICovCisJK2JhcigpIHsKKwkrICAgIGZvbworCSt9CisJKworCSAvKiBmdW5jdGlvbiAqLworCSBmb28oKSB7CisJICAgICBmb28KKwlFT0YKKycKKworIyAtLS0gZGlmZiB0ZXN0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmY6IHVnbHkgc3BhY2VzJyAnCisJZ2l0IGRpZmYgLS1uby1pbmRlbnQtaGV1cmlzdGljIG9sZCBuZXcgLS0gc3BhY2VzLnR4dCA+b3V0ICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1leHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmY6IC0tbm8taW5kZW50LWhldXJpc3RpYyBvdmVycmlkZXMgY29uZmlnJyAnCisJZ2l0IC1jIGRpZmYuaW5kZW50SGV1cmlzdGljPXRydWUgZGlmZiAtLW5vLWluZGVudC1oZXVyaXN0aWMgb2xkIG5ldyAtLSBzcGFjZXMudHh0ID5vdXQyICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1leHBlY3Qgb3V0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmOiBuaWNlIHNwYWNlcyB3aXRoIC0taW5kZW50LWhldXJpc3RpYycgJworCWdpdCAtYyBkaWZmLmluZGVudEhldXJpc3RpYz1mYWxzZSBkaWZmIC0taW5kZW50LWhldXJpc3RpYyBvbGQgbmV3IC0tIHNwYWNlcy50eHQgPm91dC1jb21wYWN0ZWQgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWNvbXBhY3RlZC1leHBlY3Qgb3V0LWNvbXBhY3RlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmOiBuaWNlIHNwYWNlcyB3aXRoIGRpZmYuaW5kZW50SGV1cmlzdGljPXRydWUnICcKKwlnaXQgLWMgZGlmZi5pbmRlbnRIZXVyaXN0aWM9dHJ1ZSBkaWZmIG9sZCBuZXcgLS0gc3BhY2VzLnR4dCA+b3V0LWNvbXBhY3RlZDIgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWNvbXBhY3RlZC1leHBlY3Qgb3V0LWNvbXBhY3RlZDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZjogLS1pbmRlbnQtaGV1cmlzdGljIHdpdGggLS1wYXRpZW5jZScgJworCWdpdCBkaWZmIC0taW5kZW50LWhldXJpc3RpYyAtLXBhdGllbmNlIG9sZCBuZXcgLS0gc3BhY2VzLnR4dCA+b3V0LWNvbXBhY3RlZDMgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWNvbXBhY3RlZC1leHBlY3Qgb3V0LWNvbXBhY3RlZDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZjogLS1pbmRlbnQtaGV1cmlzdGljIHdpdGggLS1oaXN0b2dyYW0nICcKKwlnaXQgZGlmZiAtLWluZGVudC1oZXVyaXN0aWMgLS1oaXN0b2dyYW0gb2xkIG5ldyAtLSBzcGFjZXMudHh0ID5vdXQtY29tcGFjdGVkNCAmJgorCWNvbXBhcmVfZGlmZiBzcGFjZXMtY29tcGFjdGVkLWV4cGVjdCBvdXQtY29tcGFjdGVkNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmOiB1Z2x5IGZ1bmN0aW9ucycgJworCWdpdCBkaWZmIC0tbm8taW5kZW50LWhldXJpc3RpYyBvbGQgbmV3IC0tIGZ1bmN0aW9ucy5jID5vdXQgJiYKKwljb21wYXJlX2RpZmYgZnVuY3Rpb25zLWV4cGVjdCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZjogbmljZSBmdW5jdGlvbnMgd2l0aCAtLWluZGVudC1oZXVyaXN0aWMnICcKKwlnaXQgZGlmZiAtLWluZGVudC1oZXVyaXN0aWMgb2xkIG5ldyAtLSBmdW5jdGlvbnMuYyA+b3V0LWNvbXBhY3RlZCAmJgorCWNvbXBhcmVfZGlmZiBmdW5jdGlvbnMtY29tcGFjdGVkLWV4cGVjdCBvdXQtY29tcGFjdGVkCisnCisKKyMgLS0tIGJsYW1lIHRlc3RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZTogbmljZSBzcGFjZXMgd2l0aCAtLWluZGVudC1oZXVyaXN0aWMnICcKKwlnaXQgYmxhbWUgLS1pbmRlbnQtaGV1cmlzdGljIG9sZC4ubmV3IC0tIHNwYWNlcy50eHQgPm91dC1ibGFtZS1jb21wYWN0ZWQgJiYKKwljb21wYXJlX2JsYW1lIHNwYWNlcy1jb21wYWN0ZWQtZXhwZWN0IG91dC1ibGFtZS1jb21wYWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWU6IG5pY2Ugc3BhY2VzIHdpdGggZGlmZi5pbmRlbnRIZXVyaXN0aWM9dHJ1ZScgJworCWdpdCAtYyBkaWZmLmluZGVudEhldXJpc3RpYz10cnVlIGJsYW1lIG9sZC4ubmV3IC0tIHNwYWNlcy50eHQgPm91dC1ibGFtZS1jb21wYWN0ZWQyICYmCisJY29tcGFyZV9ibGFtZSBzcGFjZXMtY29tcGFjdGVkLWV4cGVjdCBvdXQtYmxhbWUtY29tcGFjdGVkMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZTogdWdseSBzcGFjZXMgd2l0aCAtLW5vLWluZGVudC1oZXVyaXN0aWMnICcKKwlnaXQgYmxhbWUgLS1uby1pbmRlbnQtaGV1cmlzdGljIG9sZC4ubmV3IC0tIHNwYWNlcy50eHQgPm91dC1ibGFtZSAmJgorCWNvbXBhcmVfYmxhbWUgc3BhY2VzLWV4cGVjdCBvdXQtYmxhbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWU6IHVnbHkgc3BhY2VzIHdpdGggZGlmZi5pbmRlbnRIZXVyaXN0aWM9ZmFsc2UnICcKKwlnaXQgLWMgZGlmZi5pbmRlbnRIZXVyaXN0aWM9ZmFsc2UgYmxhbWUgb2xkLi5uZXcgLS0gc3BhY2VzLnR4dCA+b3V0LWJsYW1lMiAmJgorCWNvbXBhcmVfYmxhbWUgc3BhY2VzLWV4cGVjdCBvdXQtYmxhbWUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lOiAtLW5vLWluZGVudC1oZXVyaXN0aWMgb3ZlcnJpZGVzIGNvbmZpZycgJworCWdpdCAtYyBkaWZmLmluZGVudEhldXJpc3RpYz10cnVlIGJsYW1lIC0tbm8taW5kZW50LWhldXJpc3RpYyBvbGQuLm5ldyAtLSBzcGFjZXMudHh0ID5vdXQtYmxhbWUzICYmCisJZ2l0IGJsYW1lIG9sZC4ubmV3IC0tIHNwYWNlcy50eHQgPm91dC1ibGFtZSAmJgorCWNvbXBhcmVfYmxhbWUgc3BhY2VzLWV4cGVjdCBvdXQtYmxhbWUzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lOiAtLWluZGVudC1oZXVyaXN0aWMgb3ZlcnJpZGVzIGNvbmZpZycgJworCWdpdCAtYyBkaWZmLmluZGVudEhldXJpc3RpYz1mYWxzZSBibGFtZSAtLWluZGVudC1oZXVyaXN0aWMgb2xkLi5uZXcgLS0gc3BhY2VzLnR4dCA+b3V0LWJsYW1lLWNvbXBhY3RlZDMgJiYKKwljb21wYXJlX2JsYW1lIHNwYWNlcy1jb21wYWN0ZWQtZXhwZWN0IG91dC1ibGFtZS1jb21wYWN0ZWQyCisnCisKKyMgLS0tIGRpZmYtdHJlZSB0ZXN0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWU6IG5pY2Ugc3BhY2VzIHdpdGggLS1pbmRlbnQtaGV1cmlzdGljJyAnCisJZ2l0IGRpZmYtdHJlZSAtLWluZGVudC1oZXVyaXN0aWMgLXAgb2xkIG5ldyAtLSBzcGFjZXMudHh0ID5vdXQtZGlmZi10cmVlLWNvbXBhY3RlZCAmJgorCWNvbXBhcmVfZGlmZiBzcGFjZXMtY29tcGFjdGVkLWV4cGVjdCBvdXQtZGlmZi10cmVlLWNvbXBhY3RlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWU6IG5pY2Ugc3BhY2VzIHdpdGggZGlmZi5pbmRlbnRIZXVyaXN0aWM9dHJ1ZScgJworCWdpdCAtYyBkaWZmLmluZGVudEhldXJpc3RpYz10cnVlIGRpZmYtdHJlZSAtcCBvbGQgbmV3IC0tIHNwYWNlcy50eHQgPm91dC1kaWZmLXRyZWUtY29tcGFjdGVkMiAmJgorCWNvbXBhcmVfZGlmZiBzcGFjZXMtY29tcGFjdGVkLWV4cGVjdCBvdXQtZGlmZi10cmVlLWNvbXBhY3RlZDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlOiB1Z2x5IHNwYWNlcyB3aXRoIC0tbm8taW5kZW50LWhldXJpc3RpYycgJworCWdpdCBkaWZmLXRyZWUgLS1uby1pbmRlbnQtaGV1cmlzdGljIC1wIG9sZCBuZXcgLS0gc3BhY2VzLnR4dCA+b3V0LWRpZmYtdHJlZSAmJgorCWNvbXBhcmVfZGlmZiBzcGFjZXMtZXhwZWN0IG91dC1kaWZmLXRyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlOiB1Z2x5IHNwYWNlcyB3aXRoIGRpZmYuaW5kZW50SGV1cmlzdGljPWZhbHNlJyAnCisJZ2l0IC1jIGRpZmYuaW5kZW50SGV1cmlzdGljPWZhbHNlIGRpZmYtdHJlZSAtcCBvbGQgbmV3IC0tIHNwYWNlcy50eHQgPm91dC1kaWZmLXRyZWUyICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1leHBlY3Qgb3V0LWRpZmYtdHJlZTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlOiAtLWluZGVudC1oZXVyaXN0aWMgb3ZlcnJpZGVzIGNvbmZpZycgJworCWdpdCAtYyBkaWZmLmluZGVudEhldXJpc3RpYz1mYWxzZSBkaWZmLXRyZWUgLS1pbmRlbnQtaGV1cmlzdGljIC1wIG9sZCBuZXcgLS0gc3BhY2VzLnR4dCA+b3V0LWRpZmYtdHJlZS1jb21wYWN0ZWQzICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1jb21wYWN0ZWQtZXhwZWN0IG91dC1kaWZmLXRyZWUtY29tcGFjdGVkMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWU6IC0tbm8taW5kZW50LWhldXJpc3RpYyBvdmVycmlkZXMgY29uZmlnJyAnCisJZ2l0IC1jIGRpZmYuaW5kZW50SGV1cmlzdGljPXRydWUgZGlmZi10cmVlIC0tbm8taW5kZW50LWhldXJpc3RpYyAtcCBvbGQgbmV3IC0tIHNwYWNlcy50eHQgPm91dC1kaWZmLXRyZWUzICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1leHBlY3Qgb3V0LWRpZmYtdHJlZTMKKycKKworIyAtLS0gZGlmZi1pbmRleCB0ZXN0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXg6IG5pY2Ugc3BhY2VzIHdpdGggLS1pbmRlbnQtaGV1cmlzdGljJyAnCisJZ2l0IGNoZWNrb3V0IC1CIGRpZmYtaW5kZXggJiYKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQUR+ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1pbmRlbnQtaGV1cmlzdGljIC1wIG9sZCAtLSBzcGFjZXMudHh0ID5vdXQtZGlmZi1pbmRleC1jb21wYWN0ZWQgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWNvbXBhY3RlZC1leHBlY3Qgb3V0LWRpZmYtaW5kZXgtY29tcGFjdGVkICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4OiBuaWNlIHNwYWNlcyB3aXRoIGRpZmYuaW5kZW50SGV1cmlzdGljPXRydWUnICcKKwlnaXQgY2hlY2tvdXQgLUIgZGlmZi1pbmRleCAmJgorCWdpdCByZXNldCAtLXNvZnQgSEVBRH4gJiYKKwlnaXQgLWMgZGlmZi5pbmRlbnRIZXVyaXN0aWM9dHJ1ZSBkaWZmLWluZGV4IC1wIG9sZCAtLSBzcGFjZXMudHh0ID5vdXQtZGlmZi1pbmRleC1jb21wYWN0ZWQyICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1jb21wYWN0ZWQtZXhwZWN0IG91dC1kaWZmLWluZGV4LWNvbXBhY3RlZDIgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXg6IHVnbHkgc3BhY2VzIHdpdGggLS1uby1pbmRlbnQtaGV1cmlzdGljJyAnCisJZ2l0IGNoZWNrb3V0IC1CIGRpZmYtaW5kZXggJiYKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQUR+ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1uby1pbmRlbnQtaGV1cmlzdGljIC1wIG9sZCAtLSBzcGFjZXMudHh0ID5vdXQtZGlmZi1pbmRleCAmJgorCWNvbXBhcmVfZGlmZiBzcGFjZXMtZXhwZWN0IG91dC1kaWZmLWluZGV4ICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4OiB1Z2x5IHNwYWNlcyB3aXRoIGRpZmYuaW5kZW50SGV1cmlzdGljPWZhbHNlJyAnCisJZ2l0IGNoZWNrb3V0IC1CIGRpZmYtaW5kZXggJiYKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQUR+ICYmCisJZ2l0IC1jIGRpZmYuaW5kZW50SGV1cmlzdGljPWZhbHNlIGRpZmYtaW5kZXggLXAgb2xkIC0tIHNwYWNlcy50eHQgPm91dC1kaWZmLWluZGV4MiAmJgorCWNvbXBhcmVfZGlmZiBzcGFjZXMtZXhwZWN0IG91dC1kaWZmLWluZGV4MiAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleDogLS1pbmRlbnQtaGV1cmlzdGljIG92ZXJyaWRlcyBjb25maWcnICcKKwlnaXQgY2hlY2tvdXQgLUIgZGlmZi1pbmRleCAmJgorCWdpdCByZXNldCAtLXNvZnQgSEVBRH4gJiYKKwlnaXQgLWMgZGlmZi5pbmRlbnRIZXVyaXN0aWM9ZmFsc2UgZGlmZi1pbmRleCAtLWluZGVudC1oZXVyaXN0aWMgLXAgb2xkIC0tIHNwYWNlcy50eHQgPm91dC1kaWZmLWluZGV4LWNvbXBhY3RlZDMgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWNvbXBhY3RlZC1leHBlY3Qgb3V0LWRpZmYtaW5kZXgtY29tcGFjdGVkMyAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleDogLS1uby1pbmRlbnQtaGV1cmlzdGljIG92ZXJyaWRlcyBjb25maWcnICcKKwlnaXQgY2hlY2tvdXQgLUIgZGlmZi1pbmRleCAmJgorCWdpdCByZXNldCAtLXNvZnQgSEVBRH4gJiYKKwlnaXQgLWMgZGlmZi5pbmRlbnRIZXVyaXN0aWM9dHJ1ZSBkaWZmLWluZGV4IC0tbm8taW5kZW50LWhldXJpc3RpYyAtcCBvbGQgLS0gc3BhY2VzLnR4dCA+b3V0LWRpZmYtaW5kZXgzICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1leHBlY3Qgb3V0LWRpZmYtaW5kZXgzICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlcgorJworCisjIC0tLSBkaWZmLWZpbGVzIHRlc3RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlczogbmljZSBzcGFjZXMgd2l0aCAtLWluZGVudC1oZXVyaXN0aWMnICcKKwlnaXQgY2hlY2tvdXQgLUIgZGlmZi1maWxlcyAmJgorCWdpdCByZXNldCBIRUFEfiAmJgorCWdpdCBkaWZmLWZpbGVzIC0taW5kZW50LWhldXJpc3RpYyAtcCBzcGFjZXMudHh0ID5vdXQtZGlmZi1maWxlcy1yYXcgJiYKKwlncmVwIC12IGluZGV4IG91dC1kaWZmLWZpbGVzLXJhdyA+b3V0LWRpZmYtZmlsZXMtY29tcGFjdGVkICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1jb21wYWN0ZWQtZXhwZWN0IG91dC1kaWZmLWZpbGVzLWNvbXBhY3RlZCAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlczogbmljZSBzcGFjZXMgd2l0aCBkaWZmLmluZGVudEhldXJpc3RpYz10cnVlJyAnCisJZ2l0IGNoZWNrb3V0IC1CIGRpZmYtZmlsZXMgJiYKKwlnaXQgcmVzZXQgSEVBRH4gJiYKKwlnaXQgLWMgZGlmZi5pbmRlbnRIZXVyaXN0aWM9dHJ1ZSBkaWZmLWZpbGVzIC1wIHNwYWNlcy50eHQgPm91dC1kaWZmLWZpbGVzLXJhdzIgJiYKKwlncmVwIC12IGluZGV4IG91dC1kaWZmLWZpbGVzLXJhdzIgPm91dC1kaWZmLWZpbGVzLWNvbXBhY3RlZDIgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWNvbXBhY3RlZC1leHBlY3Qgb3V0LWRpZmYtZmlsZXMtY29tcGFjdGVkMiAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlczogdWdseSBzcGFjZXMgd2l0aCAtLW5vLWluZGVudC1oZXVyaXN0aWMnICcKKwlnaXQgY2hlY2tvdXQgLUIgZGlmZi1maWxlcyAmJgorCWdpdCByZXNldCBIRUFEfiAmJgorCWdpdCBkaWZmLWZpbGVzIC0tbm8taW5kZW50LWhldXJpc3RpYyAtcCBzcGFjZXMudHh0ID5vdXQtZGlmZi1maWxlcy1yYXcgJiYKKwlncmVwIC12IGluZGV4IG91dC1kaWZmLWZpbGVzLXJhdyA+b3V0LWRpZmYtZmlsZXMgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWV4cGVjdCBvdXQtZGlmZi1maWxlcyAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlczogdWdseSBzcGFjZXMgd2l0aCBkaWZmLmluZGVudEhldXJpc3RpYz1mYWxzZScgJworCWdpdCBjaGVja291dCAtQiBkaWZmLWZpbGVzICYmCisJZ2l0IHJlc2V0IEhFQUR+ICYmCisJZ2l0IC1jIGRpZmYuaW5kZW50SGV1cmlzdGljPWZhbHNlIGRpZmYtZmlsZXMgLXAgc3BhY2VzLnR4dCA+b3V0LWRpZmYtZmlsZXMtcmF3MiAmJgorCWdyZXAgLXYgaW5kZXggb3V0LWRpZmYtZmlsZXMtcmF3MiA+b3V0LWRpZmYtZmlsZXMgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWV4cGVjdCBvdXQtZGlmZi1maWxlcyAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlczogLS1pbmRlbnQtaGV1cmlzdGljIG92ZXJyaWRlcyBjb25maWcnICcKKwlnaXQgY2hlY2tvdXQgLUIgZGlmZi1maWxlcyAmJgorCWdpdCByZXNldCBIRUFEfiAmJgorCWdpdCAtYyBkaWZmLmluZGVudEhldXJpc3RpYz1mYWxzZSBkaWZmLWZpbGVzIC0taW5kZW50LWhldXJpc3RpYyAtcCBzcGFjZXMudHh0ID5vdXQtZGlmZi1maWxlcy1yYXczICYmCisJZ3JlcCAtdiBpbmRleCBvdXQtZGlmZi1maWxlcy1yYXczID5vdXQtZGlmZi1maWxlcy1jb21wYWN0ZWQgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWNvbXBhY3RlZC1leHBlY3Qgb3V0LWRpZmYtZmlsZXMtY29tcGFjdGVkICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzOiAtLW5vLWluZGVudC1oZXVyaXN0aWMgb3ZlcnJpZGVzIGNvbmZpZycgJworCWdpdCBjaGVja291dCAtQiBkaWZmLWZpbGVzICYmCisJZ2l0IHJlc2V0IEhFQUR+ICYmCisJZ2l0IC1jIGRpZmYuaW5kZW50SGV1cmlzdGljPXRydWUgZGlmZi1maWxlcyAtLW5vLWluZGVudC1oZXVyaXN0aWMgLXAgc3BhY2VzLnR4dCA+b3V0LWRpZmYtZmlsZXMtcmF3NCAmJgorCWdyZXAgLXYgaW5kZXggb3V0LWRpZmYtZmlsZXMtcmF3NCA+b3V0LWRpZmYtZmlsZXMgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWV4cGVjdCBvdXQtZGlmZi1maWxlcyAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDYyLWRpZmYtcGlja2F4ZS5zaCBiL3QvdDQwNjItZGlmZi1waWNrYXhlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjExMzBjODAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDYyLWRpZmYtcGlja2F4ZS5zaApAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2IEpvaGFubmVzIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nUGlja2F4ZSBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCXByaW50ZiAiJTA0MDk2ZCIgMCA+NDA5Ni16ZXJvZXMudHh0ICYmCisJZ2l0IGFkZCA0MDk2LXplcm9lcy50eHQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJBIDRrIGZpbGUiCisnCisKKyMgT3BlbkJTRCBvbmx5IHN1cHBvcnRzIHVwIHRvIDI1NSByZXBldGl0aW9ucywgc28gcmVwZWF0IHR3aWNlIGZvciA2NCo2ND00MDk2LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLUcgbWF0Y2hlcycgJworCWdpdCBkaWZmIC0tbmFtZS1vbmx5IC1HICJeKDB7NjR9KXs2NH0kIiBIRUFEXiA+b3V0ICYmCisJdGVzdCA0MDk2LXplcm9lcy50eHQgPSAiJChjYXQgb3V0KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLVMgLS1waWNrYXhlLXJlZ2V4JyAnCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgLVMwIC0tcGlja2F4ZS1yZWdleCBIRUFEXiA+b3V0ICYmCisJdmVyYm9zZSB0ZXN0IDQwOTYtemVyb2VzLnR4dCA9ICIkKGNhdCBvdXQpIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNjMtZGlmZi1ibG9icy5zaCBiL3QvdDQwNjMtZGlmZi1ibG9icy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYzY5ZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDA2My1kaWZmLWJsb2JzLnNoCkBAIC0wLDAgKzEsOTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGRpcmVjdCBjb21wYXJpc29uIG9mIGJsb2JzIHZpYSBnaXQtZGlmZicKKy4gLi90ZXN0LWxpYi5zaAorCitydW5fZGlmZiAoKSB7CisJIyB1c2UgZnVsbC1pbmRleCB0byBtYWtlIGl0IGVhc3kgdG8gbWF0Y2ggdGhlIGluZGV4IGxpbmUKKwlnaXQgZGlmZiAtLWZ1bGwtaW5kZXggIiRAIiA+ZGlmZgorfQorCitjaGVja19pbmRleCAoKSB7CisJZ3JlcCAiXmluZGV4ICQxXFwuXFwuJDIiIGRpZmYKK30KKworY2hlY2tfbW9kZSAoKSB7CisJZ3JlcCAiXm9sZCBtb2RlICQxIiBkaWZmICYmCisJZ3JlcCAiXm5ldyBtb2RlICQyIiBkaWZmCit9CisKK2NoZWNrX3BhdGhzICgpIHsKKwlncmVwICJeZGlmZiAtLWdpdCBhLyQxIGIvJDIiIGRpZmYKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHNvbWUgYmxvYnMnICcKKwllY2hvIG9uZSA+b25lICYmCisJZWNobyB0d28gPnR3byAmJgorCWNobW9kICt4IHR3byAmJgorCWdpdCBhZGQgLiAmJgorCisJIyBjb3ZlciBzeXN0ZW1zIHdoZXJlIG1vZGVzIGFyZSBpZ25vcmVkCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWNobW9kPSt4IHR3byAmJgorCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisKKwlzaGExX29uZT0kKGdpdCByZXYtcGFyc2UgSEVBRDpvbmUpICYmCisJc2hhMV90d289JChnaXQgcmV2LXBhcnNlIEhFQUQ6dHdvKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGJ5IHNoYTEnICcKKwlydW5fZGlmZiAkc2hhMV9vbmUgJHNoYTFfdHdvCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleCBvZiBzaGExIGRpZmYnICcKKwljaGVja19pbmRleCAkc2hhMV9vbmUgJHNoYTFfdHdvCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGExIGRpZmYgdXNlcyBhcmd1bWVudHMgYXMgcGF0aHMnICcKKwljaGVja19wYXRocyAkc2hhMV9vbmUgJHNoYTFfdHdvCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGExIGRpZmYgaGFzIG5vIG1vZGUgY2hhbmdlJyAnCisJISBncmVwIG1vZGUgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGJ5IHRyZWU6cGF0aCAocnVuKScgJworCXJ1bl9kaWZmIEhFQUQ6b25lIEhFQUQ6dHdvCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleCBvZiB0cmVlOnBhdGggZGlmZicgJworCWNoZWNrX2luZGV4ICRzaGExX29uZSAkc2hhMV90d28KKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWU6cGF0aCBkaWZmIHVzZXMgZmlsZW5hbWVzIGFzIHBhdGhzJyAnCisJY2hlY2tfcGF0aHMgb25lIHR3bworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZTpwYXRoIGRpZmYgc2hvd3MgbW9kZSBjaGFuZ2UnICcKKwljaGVja19tb2RlIDEwMDY0NCAxMDA3NTUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBieSByYW5nZWQgdHJlZTpwYXRoJyAnCisJcnVuX2RpZmYgSEVBRDpvbmUuLkhFQUQ6dHdvCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleCBvZiByYW5nZWQgdHJlZTpwYXRoIGRpZmYnICcKKwljaGVja19pbmRleCAkc2hhMV9vbmUgJHNoYTFfdHdvCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYW5nZWQgdHJlZTpwYXRoIGRpZmYgdXNlcyBmaWxlbmFtZXMgYXMgcGF0aHMnICcKKwljaGVja19wYXRocyBvbmUgdHdvCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYW5nZWQgdHJlZTpwYXRoIGRpZmYgc2hvd3MgbW9kZSBjaGFuZ2UnICcKKwljaGVja19tb2RlIDEwMDY0NCAxMDA3NTUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBibG9iIGFnYWluc3QgZmlsZScgJworCXJ1bl9kaWZmIEhFQUQ6b25lIHR3bworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggb2YgYmxvYi1maWxlIGRpZmYnICcKKwljaGVja19pbmRleCAkc2hhMV9vbmUgJHNoYTFfdHdvCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iLWZpbGUgZGlmZiB1c2VzIGZpbGVuYW1lIGFzIHBhdGhzJyAnCisJY2hlY2tfcGF0aHMgb25lIHR3bworJwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnYmxvYi1maWxlIGRpZmYgc2hvd3MgbW9kZSBjaGFuZ2UnICcKKwljaGVja19tb2RlIDEwMDY0NCAxMDA3NTUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxvYi1maWxlIGRpZmYgcHJlZmVycyBmaWxlbmFtZSB0byBzaGExJyAnCisJcnVuX2RpZmYgJHNoYTFfb25lIHR3byAmJgorCWNoZWNrX3BhdGhzIHR3byB0d28KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDY0LWRpZmYtb2lkZmluZC5zaCBiL3QvdDQwNjQtZGlmZi1vaWRmaW5kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiZGYzMTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDY0LWRpZmYtb2lkZmluZC5zaApAQCAtMCwwICsxLDY4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBmaW5kaW5nIHNwZWNpZmljIGJsb2JzIGluIHRoZSByZXZpc2lvbiB3YWxraW5nJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwICcgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZW1wdHkgaW5pdGlhbCBjb21taXQiICYmCisKKwllY2hvICJIZWxsbywgd29ybGQhIiA+Z3JlZXRpbmcgJiYKKwlnaXQgYWRkIGdyZWV0aW5nICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIHRoZSBncmVldGluZyBibG9iIiAmJiAjIGJvcnJvd2VkIGZyb20gR2l0IGZyb20gdGhlIEJvdHRvbSBVcAorCWdpdCB0YWcgLW0gInRoZSBibG9iIiBncmVldGluZyAkKGdpdCByZXYtcGFyc2UgSEVBRDpncmVldGluZykgJiYKKworCWVjaG8gYXNkZiA+dW5yZWxhdGVkICYmCisJZ2l0IGFkZCB1bnJlbGF0ZWQgJiYKKwlnaXQgY29tbWl0IC1tICJ1bnJlbGF0ZWQgaGlzdG9yeSIgJiYKKworCWdpdCByZXZlcnQgSEVBRF4gJiYKKworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiYW5vdGhlciB1bnJlbGF0ZWQgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIHRoZSBncmVldGluZyBibG9iJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJUmV2ZXJ0ICJhZGQgdGhlIGdyZWV0aW5nIGJsb2IiCisJYWRkIHRoZSBncmVldGluZyBibG9iCisJRU9GCisKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIC0tZmluZC1vYmplY3Q9Z3JlZXRpbmdee2Jsb2J9ID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYSB0cmVlJyAnCisJbWtkaXIgYSAmJgorCWVjaG8gYXNkZiA+YS9maWxlICYmCisJZ2l0IGFkZCBhL2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgYSBmaWxlIGluIGEgc3ViZGlyZWN0b3J5IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIGEgdHJlZScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWFkZCBhIGZpbGUgaW4gYSBzdWJkaXJlY3RvcnkKKwlFT0YKKworCWdpdCBsb2cgLS1mb3JtYXQ9JXMgLXQgLS1maW5kLW9iamVjdD1IRUFEOmEgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIHN1Ym1vZHVsZScgJworCXRlc3RfY3JlYXRlX3JlcG8gc3ViICYmCisJdGVzdF9jb21taXQgLUMgc3ViIHN1YiAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIC4vc3ViIHN1YiAmJgorCWdpdCBjb21taXQgLWEgLW0gImFkZCBzdWIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgYSBzdWJtb2R1bGUnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlhZGQgc3ViCisJRU9GCisKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIC0tZmluZC1vYmplY3Q9SEVBRDpzdWIgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNjUtZGlmZi1hbmNob3JlZC5zaCBiL3QvdDQwNjUtZGlmZi1hbmNob3JlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iM2Y1MTBmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA2NS1kaWZmLWFuY2hvcmVkLnNoCkBAIC0wLDAgKzEsOTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhbmNob3JlZCBkaWZmIGFsZ29yaXRobScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYW5jaG9yZWQnICcKKwlwcmludGYgImFcbmJcbmNcbiIgPnByZSAmJgorCXByaW50ZiAiY1xuYVxuYlxuIiA+cG9zdCAmJgorCisJIyBub3JtYWxseSwgYyBpcyBtb3ZlZCB0byBwcm9kdWNlIHRoZSBzbWFsbGVzdCBkaWZmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tbm8taW5kZXggcHJlIHBvc3QgPmRpZmYgJiYKKwlncmVwICJeK2MiIGRpZmYgJiYKKworCSMgd2l0aCBhbmNob3IsIGEgaXMgbW92ZWQKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCAtLWFuY2hvcmVkPWMgcHJlIHBvc3QgPmRpZmYgJiYKKwlncmVwICJeK2EiIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hbmNob3JlZCBtdWx0aXBsZScgJworCXByaW50ZiAiYVxuYlxuY1xuZFxuZVxuZlxuIiA+cHJlICYmCisJcHJpbnRmICJjXG5hXG5iXG5mXG5kXG5lXG4iID5wb3N0ICYmCisKKwkjIHdpdGggMSBhbmNob3IsIGMgaXMgbm90IG1vdmVkLCBidXQgZiBpcyBtb3ZlZAorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IC0tYW5jaG9yZWQ9YyBwcmUgcG9zdCA+ZGlmZiAmJgorCWdyZXAgIl4rYSIgZGlmZiAmJiAjIGEgaXMgbW92ZWQgaW5zdGVhZCBvZiBjCisJZ3JlcCAiXitmIiBkaWZmICYmCisKKwkjIHdpdGggMiBhbmNob3JzLCBjIGFuZCBmIGFyZSBub3QgbW92ZWQKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCAtLWFuY2hvcmVkPWMgLS1hbmNob3JlZD1mIHByZSBwb3N0ID5kaWZmICYmCisJZ3JlcCAiXithIiBkaWZmICYmCisJZ3JlcCAiXitkIiBkaWZmICMgZCBpcyBtb3ZlZCBpbnN0ZWFkIG9mIGYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hbmNob3JlZCB3aXRoIG5vbmV4aXN0ZW50IGxpbmUgaGFzIG5vIGVmZmVjdCcgJworCXByaW50ZiAiYVxuYlxuY1xuIiA+cHJlICYmCisJcHJpbnRmICJjXG5hXG5iXG4iID5wb3N0ICYmCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCAtLWFuY2hvcmVkPXggcHJlIHBvc3QgPmRpZmYgJiYKKwlncmVwICJeK2MiIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hbmNob3JlZCB3aXRoIG5vbi11bmlxdWUgbGluZSBoYXMgbm8gZWZmZWN0JyAnCisJcHJpbnRmICJhXG5iXG5jXG5kXG5lXG5jXG4iID5wcmUgJiYKKwlwcmludGYgImNcbmFcbmJcbmNcbmRcbmVcbiIgPnBvc3QgJiYKKworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IC0tYW5jaG9yZWQ9YyBwcmUgcG9zdCA+ZGlmZiAmJgorCWdyZXAgIl4rYyIgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIHN0aWxsIHByb2R1Y2VkIHdpdGggaW1wb3NzaWJsZSBtdWx0aXBsZSAtLWFuY2hvcmVkJyAnCisJcHJpbnRmICJhXG5iXG5jXG4iID5wcmUgJiYKKwlwcmludGYgImNcbmFcbmJcbiIgPnBvc3QgJiYKKworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IC0tYW5jaG9yZWQ9YSAtLWFuY2hvcmVkPWMgcHJlIHBvc3QgPmRpZmYgJiYKKwltdiBwb3N0IGV4cGVjdGVkX3Bvc3QgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIGRpZmYgaXMgY29ycmVjdCBieSBhcHBseWluZyBpdCBhbmQgdGhlbgorCSMgY29tcGFyaW5nIHRoZSByZXN1bHQgd2l0aCB0aGUgb3JpZ2luYWwKKwlnaXQgYXBwbHkgZGlmZiAmJgorCWRpZmYgZXhwZWN0ZWRfcG9zdCBwb3N0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhdGVyIGFsZ29yaXRobSBhcmd1bWVudHMgb3ZlcnJpZGUgZWFybGllciBvbmVzJyAnCisJcHJpbnRmICJhXG5iXG5jXG4iID5wcmUgJiYKKwlwcmludGYgImNcbmFcbmJcbiIgPnBvc3QgJiYKKworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IC0tcGF0aWVuY2UgLS1hbmNob3JlZD1jIHByZSBwb3N0ID5kaWZmICYmCisJZ3JlcCAiXithIiBkaWZmICYmCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCAtLWFuY2hvcmVkPWMgLS1wYXRpZW5jZSBwcmUgcG9zdCA+ZGlmZiAmJgorCWdyZXAgIl4rYyIgZGlmZiAmJgorCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tbm8taW5kZXggLS1oaXN0b2dyYW0gLS1hbmNob3JlZD1jIHByZSBwb3N0ID5kaWZmICYmCisJZ3JlcCAiXithIiBkaWZmICYmCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCAtLWFuY2hvcmVkPWMgLS1oaXN0b2dyYW0gcHJlIHBvc3QgPmRpZmYgJiYKKwlncmVwICJeK2MiIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hbmNob3JlZCB3b3JrcyB3aXRoIG90aGVyIGNvbW1hbmRzIGxpa2UgImdpdCBzaG93IicgJworCXByaW50ZiAiYVxuYlxuY1xuIiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gZm9vICYmCisJcHJpbnRmICJjXG5hXG5iXG4iID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBmb28gJiYKKworCSMgd2l0aCBhbmNob3IsIGEgaXMgbW92ZWQKKwlnaXQgc2hvdyAtLXBhdGllbmNlIC0tYW5jaG9yZWQ9YyA+ZGlmZiAmJgorCWdyZXAgIl4rYSIgZGlmZgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNjYtZGlmZi1lbWl0LWRlbGF5LnNoIGIvdC90NDA2Ni1kaWZmLWVtaXQtZGVsYXkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjMzMWY2MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNjYtZGlmZi1lbWl0LWRlbGF5LnNoCkBAIC0wLDAgKzEsNzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNvbWJpbmVkL3N0YXQvbW92ZWQgaW50ZXJhY3Rpb24nCisuIC4vdGVzdC1saWIuc2gKKworIyBUaGlzIHRlc3QgY292ZXJzIGEgd2VpcmQgMy13YXkgaW50ZXJhY3Rpb24gYmV0d2VlbiAiLS1jYyAtcCIsIHdoaWNoIHdpbGwgcnVuCisjIHRoZSBjb21iaW5lZCBkaWZmIGNvZGUsIGFsb25nIHdpdGggIi0tc3RhdCIsIHdoaWNoIHdpbGwgYmUgY29tcHV0ZWQgYXMgYQorIyBmaXJzdC1wYXJlbnQgc3RhdCBkdXJpbmcgdGhlIGNvbWJpbmVkIGRpZmYsIGFuZCAiLS1jb2xvci1tb3ZlZCIsIHdoaWNoCisjIGVuYWJsZXMgdGhlIGVtaXR0ZWRfc3ltYm9scyBsaXN0IHRvIHN0b3JlIHRoZSBkaWZmIGluIG1lbW9yeS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGhpc3Rvcnkgd2l0aCBhIG1lcmdlJyAnCisJdGVzdF9jb21taXQgQSAmJgorCXRlc3RfY29tbWl0IEIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBIRUFEXiAmJgorCXRlc3RfY29tbWl0IEMgJiYKKwlnaXQgbWVyZ2UgLW0gTSBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWNjIC1wIC0tc3RhdCAtLWNvbG9yLW1vdmVkJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY29tbWl0IEQKKwktLS0KKwkgRC50IHwgMSArCisJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCisJZGlmZiAtLWdpdCBhL0QudCBiL0QudAorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgRDpELnQpCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL0QudAorCUBAIC0wLDAgKzEgQEAKKwkrRAorCWNvbW1pdCBNCisKKwkgQi50IHwgMSArCisJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCWNvbW1pdCBDCisJLS0tCisJIEMudCB8IDEgKworCSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworCWRpZmYgLS1naXQgYS9DLnQgYi9DLnQKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLiQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEM6Qy50KQorCS0tLSAvZGV2L251bGwKKwkrKysgYi9DLnQKKwlAQCAtMCwwICsxIEBACisJK0MKKwljb21taXQgQgorCS0tLQorCSBCLnQgfCAxICsKKwkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKKwlkaWZmIC0tZ2l0IGEvQi50IGIvQi50CisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi4kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBCOkIudCkKKwktLS0gL2Rldi9udWxsCisJKysrIGIvQi50CisJQEAgLTAsMCArMSBAQAorCStCCisJY29tbWl0IEEKKwktLS0KKwkgQS50IHwgMSArCisJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCisJZGlmZiAtLWdpdCBhL0EudCBiL0EudAorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgQTpBLnQpCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL0EudAorCUBAIC0wLDAgKzEgQEAKKwkrQQorCUVPRgorCWdpdCBsb2cgLS1mb3JtYXQ9ImNvbW1pdCAlcyIgLS1jYyAtcCAtLXN0YXQgLS1jb2xvci1tb3ZlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNjctZGlmZi1wYXJ0aWFsLWNsb25lLnNoIGIvdC90NDA2Ny1kaWZmLXBhcnRpYWwtY2xvbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzFlZDFjMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNjctZGlmZi1wYXJ0aWFsLWNsb25lLnNoCkBAIC0wLDAgKzEsMTgyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmVoYXZpb3Igb2YgZGlmZiB3aGVuIHJlYWRpbmcgb2JqZWN0cyBpbiBhIHBhcnRpYWwgY2xvbmUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc2hvdyBiYXRjaGVzIGJsb2JzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc2VydmVyIGNsaWVudCB0cmFjZSIgJiYKKworCXRlc3RfY3JlYXRlX3JlcG8gc2VydmVyICYmCisJZWNobyBhID5zZXJ2ZXIvYSAmJgorCWVjaG8gYiA+c2VydmVyL2IgJiYKKwlnaXQgLUMgc2VydmVyIGFkZCBhIGIgJiYKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtbSB4ICYmCisKKwl0ZXN0X2NvbmZpZyAtQyBzZXJ2ZXIgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC0tZmlsdGVyPWJsb2I6bGltaXQ9MCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudCAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGVyZSBpcyBleGFjdGx5IDEgbmVnb3RpYXRpb24gYnkgY2hlY2tpbmcgdGhhdCB0aGVyZSBpcworCSMgb25seSAxICJkb25lIiBsaW5lIHNlbnQuICgiZG9uZSIgbWFya3MgdGhlIGVuZCBvZiBuZWdvdGlhdGlvbi4pCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLUMgY2xpZW50IHNob3cgSEVBRCAmJgorCWdyZXAgImdpdD4gZG9uZSIgdHJhY2UgPmRvbmVfbGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGRvbmVfbGluZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBiYXRjaGVzIGJsb2JzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc2VydmVyIGNsaWVudCB0cmFjZSIgJiYKKworCXRlc3RfY3JlYXRlX3JlcG8gc2VydmVyICYmCisJZWNobyBhID5zZXJ2ZXIvYSAmJgorCWVjaG8gYiA+c2VydmVyL2IgJiYKKwlnaXQgLUMgc2VydmVyIGFkZCBhIGIgJiYKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtbSB4ICYmCisJZWNobyBjID5zZXJ2ZXIvYyAmJgorCWVjaG8gZCA+c2VydmVyL2QgJiYKKwlnaXQgLUMgc2VydmVyIGFkZCBjIGQgJiYKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtbSB4ICYmCisKKwl0ZXN0X2NvbmZpZyAtQyBzZXJ2ZXIgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC0tZmlsdGVyPWJsb2I6bGltaXQ9MCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudCAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGVyZSBpcyBleGFjdGx5IDEgbmVnb3RpYXRpb24gYnkgY2hlY2tpbmcgdGhhdCB0aGVyZSBpcworCSMgb25seSAxICJkb25lIiBsaW5lIHNlbnQuICgiZG9uZSIgbWFya3MgdGhlIGVuZCBvZiBuZWdvdGlhdGlvbi4pCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLUMgY2xpZW50IGRpZmYgSEVBRF4gSEVBRCAmJgorCWdyZXAgImdpdD4gZG9uZSIgdHJhY2UgPmRvbmVfbGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGRvbmVfbGluZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBza2lwcyBzYW1lLU9JRCBibG9icycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHNlcnZlciBjbGllbnQgdHJhY2UiICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNlcnZlciAmJgorCWVjaG8gYSA+c2VydmVyL2EgJiYKKwllY2hvIGIgPnNlcnZlci9iICYmCisJZ2l0IC1DIHNlcnZlciBhZGQgYSBiICYmCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLW0geCAmJgorCWVjaG8gYW5vdGhlci1hID5zZXJ2ZXIvYSAmJgorCWdpdCAtQyBzZXJ2ZXIgYWRkIGEgJiYKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtbSB4ICYmCisKKwl0ZXN0X2NvbmZpZyAtQyBzZXJ2ZXIgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC0tZmlsdGVyPWJsb2I6bGltaXQ9MCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudCAmJgorCisJZWNobyBhIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPmhhc2gtb2xkLWEgJiYKKwllY2hvIGFub3RoZXItYSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluID5oYXNoLW5ldy1hICYmCisJZWNobyBiIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPmhhc2gtYiAmJgorCisJIyBFbnN1cmUgdGhhdCBvbmx5IGEgYW5kIGFub3RoZXItYSBhcmUgZmV0Y2hlZC4KKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnQgZGlmZiBIRUFEXiBIRUFEICYmCisJZ3JlcCAid2FudCAkKGNhdCBoYXNoLW9sZC1hKSIgdHJhY2UgJiYKKwlncmVwICJ3YW50ICQoY2F0IGhhc2gtbmV3LWEpIiB0cmFjZSAmJgorCSEgZ3JlcCAid2FudCAkKGNhdCBoYXNoLWIpIiB0cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGVuIGZldGNoaW5nIG1pc3Npbmcgb2JqZWN0cywgZGlmZiBza2lwcyBHSVRMSU5LcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1YiBzZXJ2ZXIgY2xpZW50IHRyYWNlIiAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyBzdWIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdWIgZmlyc3QgJiYKKworCXRlc3RfY3JlYXRlX3JlcG8gc2VydmVyICYmCisJZWNobyBhID5zZXJ2ZXIvYSAmJgorCWdpdCAtQyBzZXJ2ZXIgYWRkIGEgJiYKKwlnaXQgLUMgc2VydmVyIHN1Ym1vZHVsZSBhZGQgImZpbGU6Ly8kKHB3ZCkvc3ViIiAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1tIHggJiYKKworCXRlc3RfY29tbWl0IC1DIHNlcnZlci9zdWIgc2Vjb25kICYmCisJZWNobyBhbm90aGVyLWEgPnNlcnZlci9hICYmCisJZ2l0IC1DIHNlcnZlciBhZGQgYSBzdWIgJiYKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtbSB4ICYmCisKKwl0ZXN0X2NvbmZpZyAtQyBzZXJ2ZXIgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC0tZmlsdGVyPWJsb2I6bGltaXQ9MCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudCAmJgorCisJZWNobyBhIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPmhhc2gtb2xkLWEgJiYKKwllY2hvIGFub3RoZXItYSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluID5oYXNoLW5ldy1hICYmCisKKwkjIEVuc3VyZSB0aGF0IGEgYW5kIGFub3RoZXItYSBhcmUgZmV0Y2hlZCwgYW5kIGNoZWNrIChieSBzdWNjZXNzZnVsCisJIyBleGVjdXRpb24gb2YgdGhlIGRpZmYpIHRoYXQgbm8gaW52YWxpZCBPSURzIGFyZSBzZW50LgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCBkaWZmIEhFQUReIEhFQUQgJiYKKwlncmVwICJ3YW50ICQoY2F0IGhhc2gtb2xkLWEpIiB0cmFjZSAmJgorCWdyZXAgIndhbnQgJChjYXQgaGFzaC1uZXctYSkiIHRyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgd2l0aCByZW5hbWUgZGV0ZWN0aW9uIGJhdGNoZXMgYmxvYnMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzZXJ2ZXIgY2xpZW50IHRyYWNlIiAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyBzZXJ2ZXIgJiYKKwllY2hvIGEgPnNlcnZlci9hICYmCisJcHJpbnRmICJiXG5iXG5iXG5iXG5iXG4iID5zZXJ2ZXIvYiAmJgorCWdpdCAtQyBzZXJ2ZXIgYWRkIGEgYiAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1tIHggJiYKKwlybSBzZXJ2ZXIvYiAmJgorCXByaW50ZiAiYlxuYlxuYlxuYlxuYlhcbiIgPnNlcnZlci9jICYmCisJZ2l0IC1DIHNlcnZlciBhZGQgYyAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1hIC1tIHggJiYKKworCXRlc3RfY29uZmlnIC1DIHNlcnZlciB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwl0ZXN0X2NvbmZpZyAtQyBzZXJ2ZXIgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgLS1maWx0ZXI9YmxvYjpsaW1pdD0wICJmaWxlOi8vJChwd2QpL3NlcnZlciIgY2xpZW50ICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZXJlIGlzIGV4YWN0bHkgMSBuZWdvdGlhdGlvbiBieSBjaGVja2luZyB0aGF0IHRoZXJlIGlzCisJIyBvbmx5IDEgImRvbmUiIGxpbmUgc2VudC4gKCJkb25lIiBtYXJrcyB0aGUgZW5kIG9mIG5lZ290aWF0aW9uLikKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnQgZGlmZiAtTSBIRUFEXiBIRUFEID5vdXQgJiYKKwlncmVwICJzaW1pbGFyaXR5IGluZGV4IiBvdXQgJiYKKwlncmVwICJnaXQ+IGRvbmUiIHRyYWNlID5kb25lX2xpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBkb25lX2xpbmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgZG9lcyBub3QgZmV0Y2ggYW55dGhpbmcgaWYgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIGlzIG5vdCBuZWVkZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzZXJ2ZXIgY2xpZW50IHRyYWNlIiAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyBzZXJ2ZXIgJiYKKwllY2hvIGEgPnNlcnZlci9hICYmCisJcHJpbnRmICJiXG5iXG5iXG5iXG5iXG4iID5zZXJ2ZXIvYiAmJgorCWdpdCAtQyBzZXJ2ZXIgYWRkIGEgYiAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1tIHggJiYKKwltdiBzZXJ2ZXIvYiBzZXJ2ZXIvYyAmJgorCWdpdCAtQyBzZXJ2ZXIgYWRkIGMgJiYKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtYSAtbSB4ICYmCisKKwl0ZXN0X2NvbmZpZyAtQyBzZXJ2ZXIgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC0tZmlsdGVyPWJsb2I6bGltaXQ9MCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudCAmJgorCisJIyBFbnN1cmUgbm8gZmV0Y2hlcy4KKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnQgZGlmZiAtLXJhdyAtTSBIRUFEXiBIRUFEICYmCisJISB0ZXN0X3BhdGhfZXhpc3RzIHRyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1icmVhay1yZXdyaXRlcyBmZXRjaGVzIG9ubHkgaWYgbmVjZXNzYXJ5LCBhbmQgYmF0Y2hlcyBibG9icyBpZiBpdCBkb2VzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc2VydmVyIGNsaWVudCB0cmFjZSIgJiYKKworCXRlc3RfY3JlYXRlX3JlcG8gc2VydmVyICYmCisJZWNobyBhID5zZXJ2ZXIvYSAmJgorCXByaW50ZiAiYlxuYlxuYlxuYlxuYlxuIiA+c2VydmVyL2IgJiYKKwlnaXQgLUMgc2VydmVyIGFkZCBhIGIgJiYKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtbSB4ICYmCisJcHJpbnRmICJjXG5jXG5jXG5jXG5jXG4iID5zZXJ2ZXIvYiAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1hIC1tIHggJiYKKworCXRlc3RfY29uZmlnIC1DIHNlcnZlciB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwl0ZXN0X2NvbmZpZyAtQyBzZXJ2ZXIgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgLS1maWx0ZXI9YmxvYjpsaW1pdD0wICJmaWxlOi8vJChwd2QpL3NlcnZlciIgY2xpZW50ICYmCisKKwkjIEVuc3VyZSBubyBmZXRjaGVzLgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCBkaWZmIC0tcmF3IC1NIEhFQUReIEhFQUQgJiYKKwkhIHRlc3RfcGF0aF9leGlzdHMgdHJhY2UgJiYKKworCSMgQnV0IHdpdGggLS1icmVhay1yZXdyaXRlcywgZW5zdXJlIHRoYXQgdGhlcmUgaXMgZXhhY3RseSAxIG5lZ290aWF0aW9uCisJIyBieSBjaGVja2luZyB0aGF0IHRoZXJlIGlzIG9ubHkgMSAiZG9uZSIgbGluZSBzZW50LiAoImRvbmUiIG1hcmtzIHRoZQorCSMgZW5kIG9mIG5lZ290aWF0aW9uLikKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnQgZGlmZiAtLWJyZWFrLXJld3JpdGVzIC0tcmF3IC1NIEhFQUReIEhFQUQgJiYKKwlncmVwICJnaXQ+IGRvbmUiIHRyYWNlID5kb25lX2xpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBkb25lX2xpbmVzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwMC1hcHBseS1zdGF0LnNoIGIvdC90NDEwMC1hcHBseS1zdGF0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc0NGI4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwLWFwcGx5LXN0YXQuc2gKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgLS1zdGF0IC0tc3VtbWFyeSB0ZXN0LCB3aXRoIC0tcmVjb3VudAorCisnCisuIC4vdGVzdC1saWIuc2gKKworVU5DPSdzL15cKEBAIC1bMS05XVswLTldKlwpLFswLTldKiBcKCtbMS05XVswLTldKlwpLFswLTldKiBAQC9cMSw5OTkgXDIsOTk5IEBALycKKworbnVtPTAKK3doaWxlIHJlYWQgdGl0bGUKK2RvCisJbnVtPSQoKCAkbnVtICsgMSApKQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiR0aXRsZSIgJworCQlnaXQgYXBwbHkgLS1zdGF0IC0tc3VtbWFyeSBcCisJCQk8IiRURVNUX0RJUkVDVE9SWS90NDEwMC90LWFwcGx5LSRudW0ucGF0Y2giID5jdXJyZW50ICYmCisJCXRlc3RfaTE4bmNtcCAiJFRFU1RfRElSRUNUT1JZIi90NDEwMC90LWFwcGx5LSRudW0uZXhwZWN0IGN1cnJlbnQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkdGl0bGUgd2l0aCByZWNvdW50IiAnCisJCXNlZCAtZSAiJFVOQyIgPCIkVEVTVF9ESVJFQ1RPUlkvdDQxMDAvdC1hcHBseS0kbnVtLnBhdGNoIiB8CisJCWdpdCBhcHBseSAtLXJlY291bnQgLS1zdGF0IC0tc3VtbWFyeSA+Y3VycmVudCAmJgorCQl0ZXN0X2kxOG5jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDQxMDAvdC1hcHBseS0kbnVtLmV4cGVjdCBjdXJyZW50CisJJworZG9uZSA8PFxFT0YKK3JlbmFtZQorY29weQorcmV3cml0ZQorbW9kZQorbm9uIGdpdCAoMSkKK25vbiBnaXQgKDIpCitub24gZ2l0ICgzKQoraW5jb21wbGV0ZSAoMSkKK2luY29tcGxldGUgKDIpCitFT0YKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktMS5leHBlY3QgYi90L3Q0MTAwL3QtYXBwbHktMS5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwZTY0ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS0xLmV4cGVjdApAQCAtMCwwICsxLDExIEBACisgRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1bGwudHh0IHwgICAxMiArKysrKystLS0tLS0KKyBEb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVzaC50eHQgfCAgIDEwICsrKysrLS0tLS0KKyBEb2N1bWVudGF0aW9uL2dpdC50eHQgICAgICAgICAgfCAgICA2ICsrKy0tLQorIE1ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKysrLS0tCisgc3NoLXB1bGwuYyAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArKy0tCisgc3NoLXB1c2guYyAgICAgICAgICAgICAgICAgICAgIHwgICAxNCArKysrKysrLS0tLS0tLQorIDYgZmlsZXMgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pCisgcmVuYW1lIERvY3VtZW50YXRpb24ve2dpdC1ycHVsbC50eHQgPT4gZ2l0LXNzaC1wdWxsLnR4dH0gKDkwJSkKKyByZW5hbWUgRG9jdW1lbnRhdGlvbi97Z2l0LXJwdXNoLnR4dCA9PiBnaXQtc3NoLXB1c2gudHh0fSAoNzElKQorIHJlbmFtZSBycHVsbC5jID0+IHNzaC1wdWxsLmMgKDk3JSkKKyByZW5hbWUgcnB1c2guYyA9PiBzc2gtcHVzaC5jICg5MyUpCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktMS5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS0xLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMzk0ZjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktMS5wYXRjaApAQCAtMCwwICsxLDE5NCBAQAorNDE4YWFmODQ3YThiM2ZmZmZiNGY3NzdhMmRkNTI2MmNhNWNlMGVmNyAoZnJvbSBkYzkzODQxNzE1ZGZhOWE5Y2RkYTZmMmM0YTI1ZWVjODMxZWE3YWEwKQorZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJwdWxsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1wdWxsLnR4dAorc2ltaWxhcml0eSBpbmRleCA5MCUKK3JlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vZ2l0LXJwdWxsLnR4dAorcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZ2l0LXNzaC1wdWxsLnR4dAorLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcnB1bGwudHh0CisrKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVsbC50eHQKK0BAIC0xLDIxICsxLDIxIEBACistZ2l0LXJwdWxsKDEpCistPT09PT09PT09PT09CisrZ2l0LXNzaC1wdWxsKDEpCisrPT09PT09PT09PT09PT09CisgdjAuMSwgTWF5IDIwMDUKKyAKKyBOQU1FCisgLS0tLQorLWdpdC1ycHVsbCAtIFB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uCisrZ2l0LXNzaC1wdWxsIC0gUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24KKyAKKyAKKyAKKyBTWU5PUFNJUworIC0tLS0tLS0tCistJ2dpdC1ycHVsbCcgWy1jXSBbLXRdIFstYV0gWy1kXSBbLXZdIFstLXJlY292ZXJdIGNvbW1pdC1pZCB1cmwKKysnZ2l0LXNzaC1wdWxsJyBbLWNdIFstdF0gWy1hXSBbLWRdIFstdl0gWy0tcmVjb3Zlcl0gY29tbWl0LWlkIHVybAorIAorIERFU0NSSVBUSU9OCisgLS0tLS0tLS0tLS0KKy1QdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbiwgaW52b2tpbmcgZ2l0LXJwdXNoIG9uCistdGhlIG90aGVyIGVuZC4KKytQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbiwgaW52b2tpbmcgZ2l0LXNzaC1wdXNoCisrb24gdGhlIG90aGVyIGVuZC4KKyAKKyBPUFRJT05TCisgLS0tLS0tLQorZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJwdXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1wdXNoLnR4dAorc2ltaWxhcml0eSBpbmRleCA3MSUKK3JlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vZ2l0LXJwdXNoLnR4dAorcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZ2l0LXNzaC1wdXNoLnR4dAorLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcnB1c2gudHh0CisrKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVzaC50eHQKK0BAIC0xLDE5ICsxLDE5IEBACistZ2l0LXJwdXNoKDEpCistPT09PT09PT09PT09CisrZ2l0LXNzaC1wdXNoKDEpCisrPT09PT09PT09PT09PT09CisgdjAuMSwgTWF5IDIwMDUKKyAKKyBOQU1FCisgLS0tLQorLWdpdC1ycHVzaCAtIEhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtcnB1bGwKKytnaXQtc3NoLXB1c2ggLSBIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXNzaC1wdWxsCisgCisgCisgU1lOT1BTSVMKKyAtLS0tLS0tLQorLSdnaXQtcnB1c2gnCisrJ2dpdC1zc2gtcHVzaCcKKyAKKyBERVNDUklQVElPTgorIC0tLS0tLS0tLS0tCistSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1ycHVsbC4KKytIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXNzaC1wdWxsLgorIAorIAorIEF1dGhvcgorZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dAorLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQudHh0CisrKysgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKK0BAIC0xNDgsNyArMTQ4LDcgQEAgbGluazpnaXQtcmVzb2x2ZS1zY3JpcHQuaHRtbFtnaXQtcmVzb2x2ZQorIGxpbms6Z2l0LXRhZy1zY3JpcHQuaHRtbFtnaXQtdGFnLXNjcmlwdF06OgorIAlBbiBleGFtcGxlIHNjcmlwdCB0byBjcmVhdGUgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRworIAorLWxpbms6Z2l0LXJwdWxsLmh0bWxbZ2l0LXJwdWxsXTo6CisrbGluazpnaXQtc3NoLXB1bGwuaHRtbFtnaXQtc3NoLXB1bGxdOjoKKyAJUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24KKyAKKyBJbnRlcnJvZ2F0b3JzOgorQEAgLTE1Niw4ICsxNTYsOCBAQCBJbnRlcnJvZ2F0b3JzOgorIGxpbms6Z2l0LWRpZmYtaGVscGVyLmh0bWxbZ2l0LWRpZmYtaGVscGVyXTo6CisgCUdlbmVyYXRlcyBwYXRjaCBmb3JtYXQgb3V0cHV0IGZvciBnaXQtZGlmZi0qCisgCistbGluazpnaXQtcnB1c2guaHRtbFtnaXQtcnB1c2hdOjoKKy0JSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1ycHVsbAorK2xpbms6Z2l0LXNzaC1wdXNoLmh0bWxbZ2l0LXNzaC1wdXNoXTo6CisrCUhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtc3NoLXB1bGwKKyAKKyAKKyAKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0zMCw3ICszMCw3IEBAIFBST0c9ICAgZ2l0LXVwZGF0ZS1pbmRleCBnaXQtZGlmZi1maWxlcworIAlnaXQtY2hlY2tvdXQtY2FjaGUgZ2l0LWRpZmYtdHJlZSBnaXQtcmV2LXRyZWUgZ2l0LWxzLWZpbGVzIFwKKyAJZ2l0LWNoZWNrLWZpbGVzIGdpdC1scy10cmVlIGdpdC1tZXJnZS1iYXNlIGdpdC1tZXJnZS1jYWNoZSBcCisgCWdpdC11bnBhY2stZmlsZSBnaXQtZXhwb3J0IGdpdC1kaWZmLWNhY2hlIGdpdC1jb252ZXJ0LWNhY2hlIFwKKy0JZ2l0LWh0dHAtcHVsbCBnaXQtcnB1c2ggZ2l0LXJwdWxsIGdpdC1yZXYtbGlzdCBnaXQtbWt0YWcgXAorKwlnaXQtaHR0cC1wdWxsIGdpdC1zc2gtcHVzaCBnaXQtc3NoLXB1bGwgZ2l0LXJldi1saXN0IGdpdC1ta3RhZyBcCisgCWdpdC1kaWZmLWhlbHBlciBnaXQtdGFyLXRyZWUgZ2l0LWxvY2FsLXB1bGwgZ2l0LXdyaXRlLWJsb2IgXAorIAlnaXQtZ2V0LXRhci1jb21taXQtaWQgZ2l0LW1rZGVsdGEgZ2l0LWFwcGx5IGdpdC1zdHJpcHNwYWNlCisgCitAQCAtMTA1LDggKzEwNSw4IEBAIGdpdC1kaWZmLWNhY2hlOiBkaWZmLWNhY2hlLmMKKyBnaXQtY29udmVydC1jYWNoZTogY29udmVydC1jYWNoZS5jCisgZ2l0LWh0dHAtcHVsbDogaHR0cC1wdWxsLmMgcHVsbC5jCisgZ2l0LWxvY2FsLXB1bGw6IGxvY2FsLXB1bGwuYyBwdWxsLmMKKy1naXQtcnB1c2g6IHJzaC5jCistZ2l0LXJwdWxsOiByc2guYyBwdWxsLmMKKytnaXQtc3NoLXB1c2g6IHJzaC5jCisrZ2l0LXNzaC1wdWxsOiByc2guYyBwdWxsLmMKKyBnaXQtcmV2LWxpc3Q6IHJldi1saXN0LmMKKyBnaXQtbWt0YWc6IG1rdGFnLmMKKyBnaXQtZGlmZi1oZWxwZXI6IGRpZmYtaGVscGVyLmMKK2RpZmYgLS1naXQgYS9ycHVsbC5jIGIvc3NoLXB1bGwuYworc2ltaWxhcml0eSBpbmRleCA5NyUKK3JlbmFtZSBmcm9tIHJwdWxsLmMKK3JlbmFtZSB0byBzc2gtcHVsbC5jCistLS0gYS9ycHVsbC5jCisrKysgYi9zc2gtcHVsbC5jCitAQCAtNjQsMTMgKzY0LDEzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCWFyZysrOworIAl9CisgCWlmIChhcmdjIDwgYXJnICsgMikgeworLQkJdXNhZ2UoImdpdC1ycHVsbCBbLWNdIFstdF0gWy1hXSBbLXZdIFstZF0gWy0tcmVjb3Zlcl0gY29tbWl0LWlkIHVybCIpOworKwkJdXNhZ2UoImdpdC1zc2gtcHVsbCBbLWNdIFstdF0gWy1hXSBbLXZdIFstZF0gWy0tcmVjb3Zlcl0gY29tbWl0LWlkIHVybCIpOworIAkJcmV0dXJuIDE7CisgCX0KKyAJY29tbWl0X2lkID0gYXJndlthcmddOworIAl1cmwgPSBhcmd2W2FyZyArIDFdOworIAorLQlpZiAoc2V0dXBfY29ubmVjdGlvbigmZmRfaW4sICZmZF9vdXQsICJnaXQtcnB1c2giLCB1cmwsIGFyZywgYXJndiArIDEpKQorKwlpZiAoc2V0dXBfY29ubmVjdGlvbigmZmRfaW4sICZmZF9vdXQsICJnaXQtc3NoLXB1c2giLCB1cmwsIGFyZywgYXJndiArIDEpKQorIAkJcmV0dXJuIDE7CisgCisgCWlmIChnZXRfdmVyc2lvbigpKQorZGlmZiAtLWdpdCBhL3JwdXNoLmMgYi9zc2gtcHVzaC5jCitzaW1pbGFyaXR5IGluZGV4IDkzJQorcmVuYW1lIGZyb20gcnB1c2guYworcmVuYW1lIHRvIHNzaC1wdXNoLmMKKy0tLSBhL3JwdXNoLmMKKysrKyBiL3NzaC1wdXNoLmMKK0BAIC0xNiw3ICsxNiw3IEBAIGludCBzZXJ2ZV9vYmplY3QoaW50IGZkX2luLCBpbnQgZmRfb3V0KSAKKyAJZG8geworIAkJc2l6ZSA9IHJlYWQoZmRfaW4sIHNoYTEgKyBwb3NuLCAyMCAtIHBvc24pOworIAkJaWYgKHNpemUgPCAwKSB7CistCQkJcGVycm9yKCJnaXQtcnB1c2g6IHJlYWQgIik7CisrCQkJcGVycm9yKCJnaXQtc3NoLXB1c2g6IHJlYWQgIik7CisgCQkJcmV0dXJuIC0xOworIAkJfQorIAkJaWYgKCFzaXplKQorQEAgLTMwLDcgKzMwLDcgQEAgaW50IHNlcnZlX29iamVjdChpbnQgZmRfaW4sIGludCBmZF9vdXQpIAorIAlidWYgPSBtYXBfc2hhMV9maWxlKHNoYTEsICZvYmpzaXplKTsKKyAJCisgCWlmICghYnVmKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgImdpdC1ycHVzaDogY291bGQgbm90IGZpbmQgJXNcbiIsIAorKwkJZnByaW50ZihzdGRlcnIsICJnaXQtc3NoLXB1c2g6IGNvdWxkIG5vdCBmaW5kICVzXG4iLCAKKyAJCQlzaGExX3RvX2hleChzaGExKSk7CisgCQlyZW1vdGUgPSAtMTsKKyAJfQorQEAgLTQ1LDkgKzQ1LDkgQEAgaW50IHNlcnZlX29iamVjdChpbnQgZmRfaW4sIGludCBmZF9vdXQpIAorIAkJc2l6ZSA9IHdyaXRlKGZkX291dCwgYnVmICsgcG9zbiwgb2Jqc2l6ZSAtIHBvc24pOworIAkJaWYgKHNpemUgPD0gMCkgeworIAkJCWlmICghc2l6ZSkgeworLQkJCQlmcHJpbnRmKHN0ZGVyciwgImdpdC1ycHVzaDogd3JpdGUgY2xvc2VkIik7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiZ2l0LXNzaC1wdXNoOiB3cml0ZSBjbG9zZWQiKTsKKyAJCQl9IGVsc2UgeworLQkJCQlwZXJyb3IoImdpdC1ycHVzaDogd3JpdGUgIik7CisrCQkJCXBlcnJvcigiZ2l0LXNzaC1wdXNoOiB3cml0ZSAiKTsKKyAJCQl9CisgCQkJcmV0dXJuIC0xOworIAkJfQorQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBzZXJ2aWNlKGludCBmZF9pbiwgaW50IGZkX291dCkgeworIAkJcmV0dmFsID0gcmVhZChmZF9pbiwgJnR5cGUsIDEpOworIAkJaWYgKHJldHZhbCA8IDEpIHsKKyAJCQlpZiAocmV0dmFsIDwgMCkKKy0JCQkJcGVycm9yKCJycHVzaDogcmVhZCAiKTsKKysJCQkJcGVycm9yKCJnaXQtc3NoLXB1c2g6IHJlYWQgIik7CisgCQkJcmV0dXJuOworIAkJfQorIAkJaWYgKHR5cGUgPT0gJ3YnICYmIHNlcnZlX3ZlcnNpb24oZmRfaW4sIGZkX291dCkpCitAQCAtOTEsMTIgKzkxLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgICAgICAgICAgYXJnKys7CisgICAgICAgICB9CisgICAgICAgICBpZiAoYXJnYyA8IGFyZyArIDIpIHsKKy0JCXVzYWdlKCJnaXQtcnB1c2ggWy1jXSBbLXRdIFstYV0gY29tbWl0LWlkIHVybCIpOworKwkJdXNhZ2UoImdpdC1zc2gtcHVzaCBbLWNdIFstdF0gWy1hXSBjb21taXQtaWQgdXJsIik7CisgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgfQorIAljb21taXRfaWQgPSBhcmd2W2FyZ107CisgCXVybCA9IGFyZ3ZbYXJnICsgMV07CistCWlmIChzZXR1cF9jb25uZWN0aW9uKCZmZF9pbiwgJmZkX291dCwgImdpdC1ycHVsbCIsIHVybCwgYXJnLCBhcmd2ICsgMSkpCisrCWlmIChzZXR1cF9jb25uZWN0aW9uKCZmZF9pbiwgJmZkX291dCwgImdpdC1zc2gtcHVsbCIsIHVybCwgYXJnLCBhcmd2ICsgMSkpCisgCQlyZXR1cm4gMTsKKyAKKyAJc2VydmljZShmZF9pbiwgZmRfb3V0KTsKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS0yLmV4cGVjdCBiL3QvdDQxMDAvdC1hcHBseS0yLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWU2NDU5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTIuZXhwZWN0CkBAIC0wLDAgKzEsNSBAQAorIE1ha2VmaWxlICAgICAgICAgfCAgICAyICstCisgZ2l0LWZldGNoLXNjcmlwdCB8ICAgIDUgLS0tLS0KKyBnaXQtcHVsbC1zY3JpcHQgIHwgICAzNCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQorIGNvcHkgZ2l0LXB1bGwtc2NyaXB0ID0+IGdpdC1mZXRjaC1zY3JpcHQgKDg3JSkKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS0yLnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjN2Q2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS0yLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKKzdlZjc2OTI1ZDljMTllZjc0ODc0ZTE3MzVlMjQzNmU1NmQwYzQ4OTcgKGZyb20gNmIxNGQ3ZmFmMGJhZDAyNmE4MWEyN2JhYzA3YjQ3NjkxZjYyMWI4ZikKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0yMCw3ICsyMCw3IEBAIElOU1RBTEw9aW5zdGFsbAorIAorIFNDUklQVFM9Z2l0LWFwcGx5LXBhdGNoLXNjcmlwdCBnaXQtbWVyZ2Utb25lLWZpbGUtc2NyaXB0IGdpdC1wcnVuZS1zY3JpcHQgXAorIAlnaXQtcHVsbC1zY3JpcHQgZ2l0LXRhZy1zY3JpcHQgZ2l0LXJlc29sdmUtc2NyaXB0IGdpdC13aGF0Y2hhbmdlZCBcCistCWdpdC1kZWx0YWZ5LXNjcmlwdAorKwlnaXQtZGVsdGFmeS1zY3JpcHQgZ2l0LWZldGNoLXNjcmlwdAorIAorIFBST0c9ICAgZ2l0LXVwZGF0ZS1pbmRleCBnaXQtZGlmZi1maWxlcyBnaXQtaW5pdC1kYiBnaXQtd3JpdGUtdHJlZSBcCisgCWdpdC1yZWFkLXRyZWUgZ2l0LWNvbW1pdC10cmVlIGdpdC1jYXQtZmlsZSBnaXQtZnNjay1jYWNoZSBcCitkaWZmIC0tZ2l0IGEvZ2l0LXB1bGwtc2NyaXB0IGIvZ2l0LWZldGNoLXNjcmlwdAorc2ltaWxhcml0eSBpbmRleCA4NyUKK2NvcHkgZnJvbSBnaXQtcHVsbC1zY3JpcHQKK2NvcHkgdG8gZ2l0LWZldGNoLXNjcmlwdAorLS0tIGEvZ2l0LXB1bGwtc2NyaXB0CisrKysgYi9naXQtZmV0Y2gtc2NyaXB0CitAQCAtMzksOCArMzksMyBAQCBkb3dubG9hZF9vbmUgIiRtZXJnZV9yZXBvLyRtZXJnZV9uYW1lIiAiCisgCisgZWNobyAiR2V0dGluZyBvYmplY3QgZGF0YWJhc2UiCisgZG93bmxvYWRfb2JqZWN0cyAiJG1lcmdlX3JlcG8iICIkKGNhdCAiJEdJVF9ESVIiL01FUkdFX0hFQUQpIgorLQorLWdpdC1yZXNvbHZlLXNjcmlwdCBcCistCSIkKGNhdCAiJEdJVF9ESVIiL0hFQUQpIiBcCistCSIkKGNhdCAiJEdJVF9ESVIiL01FUkdFX0hFQUQpIiBcCistCSIkbWVyZ2VfcmVwbyIKK2RpZmYgLS1naXQgYS9naXQtcHVsbC1zY3JpcHQgYi9naXQtcHVsbC1zY3JpcHQKKy0tLSBhL2dpdC1wdWxsLXNjcmlwdAorKysrIGIvZ2l0LXB1bGwtc2NyaXB0CitAQCAtNiwzOSArNiw3IEBAIG1lcmdlX25hbWU9JHsyOi1IRUFEfQorIDogJHtHSVRfRElSPS5naXR9CisgOiAke0dJVF9PQkpFQ1RfRElSRUNUT1JZPSIke1NIQTFfRklMRV9ESVJFQ1RPUlktIiRHSVRfRElSL29iamVjdHMifSJ9CisgCistZG93bmxvYWRfb25lICgpIHsKKy0JIyByZW1vdGVfcGF0aD0iJDEiIGxvY2FsX2ZpbGU9IiQyIgorLQljYXNlICIkMSIgaW4KKy0JaHR0cDovLyopCistCQl3Z2V0IC1xIC1PICIkMiIgIiQxIiA7OworLQkvKikKKy0JCXRlc3QgLWYgIiQxIiAmJiBjYXQgPiIkMiIgIiQxIiA7OworLQkqKQorLQkJcnN5bmMgLUwgIiQxIiAiJDIiIDs7CistCWVzYWMKKy19CistCistZG93bmxvYWRfb2JqZWN0cyAoKSB7CistCSMgcmVtb3RlX3JlcG89IiQxIiBoZWFkX3NoYTE9IiQyIgorLQljYXNlICIkMSIgaW4KKy0JaHR0cDovLyopCistCQlnaXQtaHR0cC1wdWxsIC1hICIkMiIgIiQxLyIKKy0JCTs7CistCS8qKQorLQkJZ2l0LWxvY2FsLXB1bGwgLWwgLWEgIiQyIiAiJDEvIgorLQkJOzsKKy0JKikKKy0JCXJzeW5jIC1hdnogLS1pZ25vcmUtZXhpc3RpbmcgXAorLQkJCSIkMS9vYmplY3RzLy4iICIkR0lUX09CSkVDVF9ESVJFQ1RPUlkiLy4KKy0JCTs7CistCWVzYWMKKy19CistCistZWNobyAiR2V0dGluZyByZW1vdGUgJG1lcmdlX25hbWUiCistZG93bmxvYWRfb25lICIkbWVyZ2VfcmVwby8kbWVyZ2VfbmFtZSIgIiRHSVRfRElSIi9NRVJHRV9IRUFECistCistZWNobyAiR2V0dGluZyBvYmplY3QgZGF0YWJhc2UiCistZG93bmxvYWRfb2JqZWN0cyAiJG1lcmdlX3JlcG8iICIkKGNhdCAiJEdJVF9ESVIiL01FUkdFX0hFQUQpIgorK2dpdC1mZXRjaC1zY3JpcHQgIiRtZXJnZV9yZXBvIiAiJG1lcmdlX25hbWUiCisgCisgZ2l0LXJlc29sdmUtc2NyaXB0IFwKKyAJIiQoY2F0ICIkR0lUX0RJUiIvSEVBRCkiIFwKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS0zLmV4cGVjdCBiL3QvdDQxMDAvdC1hcHBseS0zLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTJhNTUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTMuZXhwZWN0CkBAIC0wLDAgKzEsNyBAQAorIERvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0IHwgICAyMCArLQorIGxzLXRyZWUuYyAgICAgICAgICAgICAgICAgICAgIHwgIDQ1OSArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaCAgIHwgICAgMyAKKyB0cmVlLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgCisgdHJlZS5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIAorIDUgZmlsZXMgY2hhbmdlZCwgMjYyIGluc2VydGlvbnMoKyksIDIyMyBkZWxldGlvbnMoLSkKKyByZXdyaXRlIGxzLXRyZWUuYyAoODIlKQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTMucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWMxNzJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTMucGF0Y2gKQEAgLTAsMCArMSw1NjcgQEAKKzZhZjFmMDE5MmZmODc0MGZlNzdkYjdjZjAyYzczOWNjZmJkZjExOWMgKGZyb20gMmJjMjU2NDE0NTgzNTk5NjczNGQ2ZWQ1ZDE4ODBmODViMTcyMzNkNikKK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKK0BAIC00LDIzICs0LDI2IEBAIHYwLjEsIE1heSAyMDA1CisgCisgTkFNRQorIC0tLS0KKy1naXQtbHMtdHJlZSAtIERpc3BsYXlzIGEgdHJlZSBvYmplY3QgaW4gaHVtYW4gcmVhZGFibGUgZm9ybQorK2dpdC1scy10cmVlIC0gTGlzdHMgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QuCisgCisgCisgU1lOT1BTSVMKKyAtLS0tLS0tLQorLSdnaXQtbHMtdHJlZScgWy1yXSBbLXpdIDx0cmVlLWlzaD4gW3BhdGhzLi4uXQorKydnaXQtbHMtdHJlZScgWy1kXSBbLXJdIFstel0gPHRyZWUtaXNoPiBbcGF0aHMuLi5dCisgCisgREVTQ1JJUFRJT04KKyAtLS0tLS0tLS0tLQorLUNvbnZlcnRzIHRoZSB0cmVlIG9iamVjdCB0byBhIGh1bWFuIHJlYWRhYmxlIChhbmQgc2NyaXB0IHByb2Nlc3NhYmxlKQorLWZvcm0uCisrTGlzdHMgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QsIGxpa2Ugd2hhdCAiL2Jpbi9scyAtYSIgZG9lcworK2luIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorIAorIE9QVElPTlMKKyAtLS0tLS0tCisgPHRyZWUtaXNoPjo6CisgCUlkIG9mIGEgdHJlZS4KKyAKKystZDo6CisrCXNob3cgb25seSB0aGUgbmFtZWQgdHJlZSBlbnRyeSBpdHNlbGYsIG5vdCBpdHMgY2hpbGRyZW4KKysKKyAtcjo6CisgCXJlY3Vyc2UgaW50byBzdWItdHJlZXMKKyAKK0BAIC0yOCwxOCArMzEsMTkgQEAgT1BUSU9OUworIAlcMCBsaW5lIHRlcm1pbmF0aW9uIG9uIG91dHB1dAorIAorIHBhdGhzOjoKKy0JT3B0aW9uYWxseSwgcmVzdHJpY3QgdGhlIG91dHB1dCBvZiBnaXQtbHMtdHJlZSB0byBzcGVjaWZpYworLQlwYXRocy4gRGlyZWN0b3JpZXMgd2lsbCBvbmx5IGxpc3QgdGhlaXIgdHJlZSBibG9iIGlkcy4KKy0JSW1wbGllcyAtci4KKysJV2hlbiBwYXRocyBhcmUgZ2l2ZW4sIHNob3dzIHRoZW0uICBPdGhlcndpc2UgaW1wbGljaXRseQorKwl1c2VzIHRoZSByb290IGxldmVsIG9mIHRoZSB0cmVlIGFzIHRoZSBzb2xlIHBhdGggYXJndW1lbnQuCisrCisgCisgT3V0cHV0IEZvcm1hdAorIC0tLS0tLS0tLS0tLS0KKy0gICAgICAgIDxtb2RlPlx0CTx0eXBlPlx0CTxvYmplY3Q+XHQJPGZpbGU+CisrICAgICAgICA8bW9kZT4gU1AgPHR5cGU+IFNQIDxvYmplY3Q+IFRBQiA8ZmlsZT4KKyAKKyAKKyBBdXRob3IKKyAtLS0tLS0KKyBXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KKytDb21wbGV0ZWx5IHJld3JpdHRlbiBmcm9tIHNjcmF0Y2ggYnkgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorIAorIERvY3VtZW50YXRpb24KKyAtLS0tLS0tLS0tLS0tLQorZGlmZiAtLWdpdCBhL2xzLXRyZWUuYyBiL2xzLXRyZWUuYworZGlzc2ltaWxhcml0eSBpbmRleCA4MiUKKy0tLSBscy10cmVlLmMKKysrKyBscy10cmVlLmMKK0BAIC0xLDIxMiArMSwyNDcgQEAKKy0vKgorLSAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorLSAqCistICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorLSAqLworLSNpbmNsdWRlICJjYWNoZS5oIgorLQorLXN0YXRpYyBpbnQgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7Cistc3RhdGljIGludCByZWN1cnNpdmUgPSAwOworLQorLXN0cnVjdCBwYXRoX3ByZWZpeCB7CistCXN0cnVjdCBwYXRoX3ByZWZpeCAqcHJldjsKKy0JY29uc3QgY2hhciAqbmFtZTsKKy19OworLQorLSNkZWZpbmUgREVCVUcoZm10LCAuLi4pCQorLQorLXN0YXRpYyBpbnQgc3RyaW5nX3BhdGhfcHJlZml4KGNoYXIgKmJ1ZmYsIHNpemVfdCBibGVuLCBzdHJ1Y3QgcGF0aF9wcmVmaXggKnByZWZpeCkKKy17CistCWludCBsZW4gPSAwOworLQlpZiAocHJlZml4KSB7CistCQlpZiAocHJlZml4LT5wcmV2KSB7CistCQkJbGVuID0gc3RyaW5nX3BhdGhfcHJlZml4KGJ1ZmYsYmxlbixwcmVmaXgtPnByZXYpOworLQkJCWJ1ZmYgKz0gbGVuOworLQkJCWJsZW4gLT0gbGVuOworLQkJCWlmIChibGVuID4gMCkgeworLQkJCQkqYnVmZiA9ICcvJzsKKy0JCQkJbGVuKys7CistCQkJCWJ1ZmYrKzsKKy0JCQkJYmxlbi0tOworLQkJCX0KKy0JCX0KKy0JCXN0cm5jcHkoYnVmZixwcmVmaXgtPm5hbWUsYmxlbik7CistCQlyZXR1cm4gbGVuICsgc3RybGVuKHByZWZpeC0+bmFtZSk7CistCX0KKy0KKy0JcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyB2b2lkIHByaW50X3BhdGhfcHJlZml4KHN0cnVjdCBwYXRoX3ByZWZpeCAqcHJlZml4KQorLXsKKy0JaWYgKHByZWZpeCkgeworLQkJaWYgKHByZWZpeC0+cHJldikgeworLQkJCXByaW50X3BhdGhfcHJlZml4KHByZWZpeC0+cHJldik7CistCQkJcHV0Y2hhcignLycpOworLQkJfQorLQkJZnB1dHMocHJlZml4LT5uYW1lLCBzdGRvdXQpOworLQl9CistfQorLQorLS8qCistICogcmV0dXJuOgorLSAqIAktMSBpZiBwcmVmaXggaXMgKm5vdCogYSBzdWJzZXQgb2YgcGF0aAorLSAqIAkgMCBpZiBwcmVmaXggPT0gcGF0aAorLSAqIAkgMSBpZiBwcmVmaXggaXMgYSBzdWJzZXQgb2YgcGF0aAorLSAqLworLXN0YXRpYyBpbnQgcGF0aGNtcChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgcGF0aF9wcmVmaXggKnByZWZpeCkKKy17CistCWNoYXIgYnVmZltQQVRIX01BWF07CistCWludCBsZW4sc2xlbjsKKy0KKy0JaWYgKHByZWZpeCA9PSBOVUxMKQorLQkJcmV0dXJuIDE7CistCistCWxlbiA9IHN0cmluZ19wYXRoX3ByZWZpeChidWZmLCBzaXplb2YgYnVmZiwgcHJlZml4KTsKKy0Jc2xlbiA9IHN0cmxlbihwYXRoKTsKKy0KKy0JaWYgKHNsZW4gPCBsZW4pCistCQlyZXR1cm4gLTE7CistCistCWlmIChzdHJuY21wKHBhdGgsYnVmZixsZW4pID09IDApIHsKKy0JCWlmIChzbGVuID09IGxlbikKKy0JCQlyZXR1cm4gMDsKKy0JCWVsc2UKKy0JCQlyZXR1cm4gMTsKKy0JfQorLQorLQlyZXR1cm4gLTE7CistfQkKKy0KKy0vKgorLSAqIG1hdGNoIG1heSBiZSBOVUxMLCBvciBhICpzb3J0ZWQqIGxpc3Qgb2YgcGF0aHMKKy0gKi8KKy1zdGF0aWMgdm9pZCBsaXN0X3JlY3Vyc2l2ZSh2b2lkICpidWZmZXIsCistCQkJICAgY29uc3QgY2hhciAqdHlwZSwKKy0JCQkgICB1bnNpZ25lZCBsb25nIHNpemUsCistCQkJICAgc3RydWN0IHBhdGhfcHJlZml4ICpwcmVmaXgsCistCQkJICAgY2hhciAqKm1hdGNoLCBpbnQgbWF0Y2hlcykKKy17CistCXN0cnVjdCBwYXRoX3ByZWZpeCB0aGlzX3ByZWZpeDsKKy0JdGhpc19wcmVmaXgucHJldiA9IHByZWZpeDsKKy0KKy0JaWYgKHN0cmNtcCh0eXBlLCAidHJlZSIpKQorLQkJZGllKCJleHBlY3RlZCBhICd0cmVlJyBub2RlIik7CistCistCWlmIChtYXRjaGVzKQorLQkJcmVjdXJzaXZlID0gMTsKKy0KKy0Jd2hpbGUgKHNpemUpIHsKKy0JCWludCBuYW1lbGVuID0gc3RybGVuKGJ1ZmZlcikrMTsKKy0JCXZvaWQgKmVsdGJ1ZiA9IE5VTEw7CistCQljaGFyIGVsdHR5cGVbMjBdOworLQkJdW5zaWduZWQgbG9uZyBlbHRzaXplOworLQkJdW5zaWduZWQgY2hhciAqc2hhMSA9IGJ1ZmZlciArIG5hbWVsZW47CistCQljaGFyICpwYXRoID0gc3RyY2hyKGJ1ZmZlciwgJyAnKSArIDE7CistCQl1bnNpZ25lZCBpbnQgbW9kZTsKKy0JCWNvbnN0IGNoYXIgKm1hdGNoZWQgPSBOVUxMOworLQkJaW50IG10eXBlID0gLTE7CistCQlpbnQgbWluZGV4OworLQorLQkJaWYgKHNpemUgPCBuYW1lbGVuICsgMjAgfHwgc3NjYW5mKGJ1ZmZlciwgIiVvIiwgJm1vZGUpICE9IDEpCistCQkJZGllKCJjb3JydXB0ICd0cmVlJyBmaWxlIik7CistCQlidWZmZXIgPSBzaGExICsgMjA7CistCQlzaXplIC09IG5hbWVsZW4gKyAyMDsKKy0KKy0JCXRoaXNfcHJlZml4Lm5hbWUgPSBwYXRoOworLQkJZm9yICggbWluZGV4ID0gMDsgbWluZGV4IDwgbWF0Y2hlczsgbWluZGV4KyspIHsKKy0JCQltdHlwZSA9IHBhdGhjbXAobWF0Y2hbbWluZGV4XSwmdGhpc19wcmVmaXgpOworLQkJCWlmIChtdHlwZSA+PSAwKSB7CistCQkJCW1hdGNoZWQgPSBtYXRjaFttaW5kZXhdOworLQkJCQlicmVhazsKKy0JCQl9CistCQl9CistCistCQkvKgorLQkJICogSWYgd2UncmUgbm90IG1hdGNoaW5nLCBvciBpZiB0aGlzIGlzIGFuIGV4YWN0IG1hdGNoLAorLQkJICogcHJpbnQgb3V0IHRoZSBpbmZvCistCQkgKi8KKy0JCWlmICghbWF0Y2hlcyB8fCAobWF0Y2hlZCAhPSBOVUxMICYmIG10eXBlID09IDApKSB7CistCQkJcHJpbnRmKCIlMDZvICVzICVzXHQiLCBtb2RlLAorLQkJCSAgICAgICBTX0lTRElSKG1vZGUpID8gInRyZWUiIDogImJsb2IiLAorLQkJCSAgICAgICBzaGExX3RvX2hleChzaGExKSk7CistCQkJcHJpbnRfcGF0aF9wcmVmaXgoJnRoaXNfcHJlZml4KTsKKy0JCQlwdXRjaGFyKGxpbmVfdGVybWluYXRpb24pOworLQkJfQorLQorLQkJaWYgKCEgcmVjdXJzaXZlIHx8ICEgU19JU0RJUihtb2RlKSkKKy0JCQljb250aW51ZTsKKy0KKy0JCWlmIChtYXRjaGVzICYmICEgbWF0Y2hlZCkKKy0JCQljb250aW51ZTsKKy0KKy0JCWlmICghIChlbHRidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCBlbHR0eXBlLCAmZWx0c2l6ZSkpICkgeworLQkJCWVycm9yKCJjYW5ub3QgcmVhZCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKy0JCQljb250aW51ZTsKKy0JCX0KKy0KKy0JCS8qIElmIHRoaXMgaXMgYW4gZXhhY3QgZGlyZWN0b3J5IG1hdGNoLCB3ZSBtYXkgaGF2ZQorLQkJICogZGlyZWN0b3J5IGZpbGVzIGZvbGxvd2luZyB0aGlzIHBhdGguIE1hdGNoIG9uIHRoZW0uCistCQkgKiBPdGhlcndpc2UsIHdlJ3JlIGF0IGEgcGF0Y2ggc3ViY29tcG9uZW50LCBhbmQgd2UgbmVlZAorLQkJICogdG8gdHJ5IHRvIG1hdGNoIGFnYWluLgorLQkJICovCistCQlpZiAobXR5cGUgPT0gMCkKKy0JCQltaW5kZXgrKzsKKy0KKy0JCWxpc3RfcmVjdXJzaXZlKGVsdGJ1ZiwgZWx0dHlwZSwgZWx0c2l6ZSwgJnRoaXNfcHJlZml4LCAmbWF0Y2hbbWluZGV4XSwgbWF0Y2hlcy1taW5kZXgpOworLQkJZnJlZShlbHRidWYpOworLQl9CistfQorLQorLXN0YXRpYyBpbnQgcWNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQorLXsKKy0JcmV0dXJuIHN0cmNtcCgqKGNoYXIgKiopYSwgKihjaGFyICoqKWIpOworLX0KKy0KKy1zdGF0aWMgaW50IGxpc3QodW5zaWduZWQgY2hhciAqc2hhMSxjaGFyICoqcGF0aCkKKy17CistCXZvaWQgKmJ1ZmZlcjsKKy0JdW5zaWduZWQgbG9uZyBzaXplOworLQlpbnQgbnBhdGhzOworLQorLQlmb3IgKG5wYXRocyA9IDA7IHBhdGhbbnBhdGhzXSAhPSBOVUxMOyBucGF0aHMrKykKKy0JCTsKKy0KKy0JcXNvcnQocGF0aCxucGF0aHMsc2l6ZW9mKGNoYXIgKikscWNtcCk7CistCistCWJ1ZmZlciA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHNoYTEsICJ0cmVlIiwgJnNpemUsIE5VTEwpOworLQlpZiAoIWJ1ZmZlcikKKy0JCWRpZSgidW5hYmxlIHRvIHJlYWQgc2hhMSBmaWxlIik7CistCWxpc3RfcmVjdXJzaXZlKGJ1ZmZlciwgInRyZWUiLCBzaXplLCBOVUxMLCBwYXRoLCBucGF0aHMpOworLQlmcmVlKGJ1ZmZlcik7CistCXJldHVybiAwOworLX0KKy0KKy1zdGF0aWMgY29uc3QgY2hhciAqbHNfdHJlZV91c2FnZSA9ICJnaXQtbHMtdHJlZSBbLXJdIFstel0gPGtleT4gW3BhdGhzLi4uXSI7CistCistaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorLXsKKy0JdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKy0KKy0Jd2hpbGUgKDEgPCBhcmdjICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKSB7CistCQlzd2l0Y2ggKGFyZ3ZbMV1bMV0pIHsKKy0JCWNhc2UgJ3onOgorLQkJCWxpbmVfdGVybWluYXRpb24gPSAwOworLQkJCWJyZWFrOworLQkJY2FzZSAncic6CistCQkJcmVjdXJzaXZlID0gMTsKKy0JCQlicmVhazsKKy0JCWRlZmF1bHQ6CistCQkJdXNhZ2UobHNfdHJlZV91c2FnZSk7CistCQl9CistCQlhcmdjLS07IGFyZ3YrKzsKKy0JfQorLQorLQlpZiAoYXJnYyA8IDIpCistCQl1c2FnZShsc190cmVlX3VzYWdlKTsKKy0JaWYgKGdldF9zaGExKGFyZ3ZbMV0sIHNoYTEpIDwgMCkKKy0JCXVzYWdlKGxzX3RyZWVfdXNhZ2UpOworLQlpZiAobGlzdChzaGExLCAmYXJndlsyXSkgPCAwKQorLQkJZGllKCJsaXN0IGZhaWxlZCIpOworLQlyZXR1cm4gMDsKKy19CisrLyoKKysgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKysgKgorKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKysgKi8KKysjaW5jbHVkZSAiY2FjaGUuaCIKKysjaW5jbHVkZSAiYmxvYi5oIgorKyNpbmNsdWRlICJ0cmVlLmgiCisrCisrc3RhdGljIGludCBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKysjZGVmaW5lIExTX1JFQ1VSU0lWRSAxCisrI2RlZmluZSBMU19UUkVFX09OTFkgMgorK3N0YXRpYyBpbnQgbHNfb3B0aW9ucyA9IDA7CisrCisrc3RhdGljIHN0cnVjdCB0cmVlX2VudHJ5X2xpc3Qgcm9vdF9lbnRyeTsKKysKKytzdGF0aWMgdm9pZCBwcmVwYXJlX3Jvb3QodW5zaWduZWQgY2hhciAqc2hhMSkKKyt7CisrCXVuc2lnbmVkIGNoYXIgcnNoYVsyMF07CisrCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKysJdm9pZCAqYnVmOworKwlzdHJ1Y3QgdHJlZSAqcm9vdF90cmVlOworKworKwlidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShzaGExLCAidHJlZSIsICZzaXplLCByc2hhKTsKKysJZnJlZShidWYpOworKwlpZiAoIWJ1ZikKKysJCWRpZSgiQ291bGQgbm90IHJlYWQgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisrCisrCXJvb3RfdHJlZSA9IGxvb2t1cF90cmVlKHJzaGEpOworKwlpZiAoIXJvb3RfdHJlZSkKKysJCWRpZSgiQ291bGQgbm90IHJlYWQgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisrCisrCS8qIFByZXBhcmUgYSBmYWtlIGVudHJ5ICovCisrCXJvb3RfZW50cnkuZGlyZWN0b3J5ID0gMTsKKysJcm9vdF9lbnRyeS5leGVjdXRhYmxlID0gcm9vdF9lbnRyeS5zeW1saW5rID0gMDsKKysJcm9vdF9lbnRyeS5tb2RlID0gU19JRkRJUjsKKysJcm9vdF9lbnRyeS5uYW1lID0gIiI7CisrCXJvb3RfZW50cnkuaXRlbS50cmVlID0gcm9vdF90cmVlOworKwlyb290X2VudHJ5LnBhcmVudCA9IE5VTEw7CisrfQorKworK3N0YXRpYyBpbnQgcHJlcGFyZV9jaGlsZHJlbihzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplbGVtKQorK3sKKysJaWYgKCFlbGVtLT5kaXJlY3RvcnkpCisrCQlyZXR1cm4gLTE7CisrCWlmICghZWxlbS0+aXRlbS50cmVlLT5vYmplY3QucGFyc2VkKSB7CisrCQlzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplOworKwkJaWYgKHBhcnNlX3RyZWUoZWxlbS0+aXRlbS50cmVlKSkKKysJCQlyZXR1cm4gLTE7CisrCQkvKiBTZXQgdXAgdGhlIHBhcmVudCBsaW5rICovCisrCQlmb3IgKGUgPSBlbGVtLT5pdGVtLnRyZWUtPmVudHJpZXM7IGU7IGUgPSBlLT5uZXh0KQorKwkJCWUtPnBhcmVudCA9IGVsZW07CisrCX0KKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICpmaW5kX2VudHJ5XzAoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZWxlbSwKKysJCQkJCSAgICBjb25zdCBjaGFyICpwYXRoLAorKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdGhfZW5kKQorK3sKKysJY29uc3QgY2hhciAqZXA7CisrCWludCBsZW47CisrCisrCXdoaWxlIChwYXRoIDwgcGF0aF9lbmQpIHsKKysJCWlmIChwcmVwYXJlX2NoaWxkcmVuKGVsZW0pKQorKwkJCXJldHVybiBOVUxMOworKworKwkJLyogSW4gZWxlbS0+dHJlZS0+ZW50cmllcywgZmluZCB0aGUgb25lIHRoYXQgaGFzIG5hbWUKKysJCSAqIHRoYXQgbWF0Y2hlcyB3aGF0IGlzIGJldHdlZW4gcGF0aCBhbmQgZXAuCisrCQkgKi8KKysJCWVsZW0gPSBlbGVtLT5pdGVtLnRyZWUtPmVudHJpZXM7CisrCisrCQllcCA9IHN0cmNocihwYXRoLCAnLycpOworKwkJaWYgKCFlcCB8fCBwYXRoX2VuZCA8PSBlcCkKKysJCQllcCA9IHBhdGhfZW5kOworKwkJbGVuID0gZXAgLSBwYXRoOworKworKwkJd2hpbGUgKGVsZW0pIHsKKysJCQlpZiAoKHN0cmxlbihlbGVtLT5uYW1lKSA9PSBsZW4pICYmCisrCQkJICAgICFzdHJuY21wKGVsZW0tPm5hbWUsIHBhdGgsIGxlbikpCisrCQkJCWJyZWFrOworKwkJCWVsZW0gPSBlbGVtLT5uZXh0OworKwkJfQorKwkJaWYgKHBhdGhfZW5kIDw9IGVwIHx8ICFlbGVtKQorKwkJCXJldHVybiBlbGVtOworKwkJd2hpbGUgKCplcCA9PSAnLycgJiYgZXAgPCBwYXRoX2VuZCkKKysJCQllcCsrOworKwkJcGF0aCA9IGVwOworKwl9CisrCXJldHVybiBOVUxMOworK30KKysKKytzdGF0aWMgc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZmluZF9lbnRyeShjb25zdCBjaGFyICpwYXRoLAorKwkJCQkJICBjb25zdCBjaGFyICpwYXRoX2VuZCkKKyt7CisrCS8qIEZpbmQgdHJlZSBlbGVtZW50LCBkZXNjZW5kaW5nIGZyb20gcm9vdCwgdGhhdAorKwkgKiBjb3JyZXNwb25kcyB0byB0aGUgbmFtZWQgcGF0aCwgbGF6aWx5IGV4cGFuZGluZworKwkgKiB0aGUgdHJlZSBpZiBwb3NzaWJsZS4KKysJICovCisrCWlmIChwYXRoID09IHBhdGhfZW5kKSB7CisrCQkvKiBTcGVjaWFsLiAgVGhpcyBpcyB0aGUgcm9vdCBsZXZlbCAqLworKwkJcmV0dXJuICZyb290X2VudHJ5OworKwl9CisrCXJldHVybiBmaW5kX2VudHJ5XzAoJnJvb3RfZW50cnksIHBhdGgsIHBhdGhfZW5kKTsKKyt9CisrCisrc3RhdGljIHZvaWQgc2hvd19lbnRyeV9uYW1lKHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUpCisreworKwkvKiBUaGlzIGlzIHl1Y2t5LiAgVGhlIHJvb3QgbGV2ZWwgaXMgdGhlcmUgZm9yCisrCSAqIG91ciBjb252ZW5pZW5jZSBidXQgd2UgcmVhbGx5IHdhbnQgdG8gZG8gYQorKwkgKiBmb3Jlc3QuCisrCSAqLworKwlpZiAoZS0+cGFyZW50ICYmIGUtPnBhcmVudCAhPSAmcm9vdF9lbnRyeSkgeworKwkJc2hvd19lbnRyeV9uYW1lKGUtPnBhcmVudCk7CisrCQlwdXRjaGFyKCcvJyk7CisrCX0KKysJcHJpbnRmKCIlcyIsIGUtPm5hbWUpOworK30KKysKKytzdGF0aWMgY29uc3QgY2hhciAqZW50cnlfdHlwZShzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplKQorK3sKKysJcmV0dXJuIChlLT5kaXJlY3RvcnkgPyAidHJlZSIgOiAiYmxvYiIpOworK30KKysKKytzdGF0aWMgY29uc3QgY2hhciAqZW50cnlfaGV4KHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUpCisreworKwlyZXR1cm4gc2hhMV90b19oZXgoZS0+ZGlyZWN0b3J5CisrCQkJICAgPyBlLT5pdGVtLnRyZWUtPm9iamVjdC5zaGExCisrCQkJICAgOiBlLT5pdGVtLmJsb2ItPm9iamVjdC5zaGExKTsKKyt9CisrCisrLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgbXV0dWFsbHkgcmVjdXJzaXZlIHJvdXRpbmVzICovCisrc3RhdGljIGludCBzaG93X2VudHJ5KHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKiwgaW50KTsKKysKKytzdGF0aWMgaW50IHNob3dfY2hpbGRyZW4oc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSwgaW50IGxldmVsKQorK3sKKysJaWYgKHByZXBhcmVfY2hpbGRyZW4oZSkpCisrCQlkaWUoImludGVybmFsIGVycm9yOiBscy10cmVlIHNob3dfY2hpbGRyZW4gY2FsbGVkIHdpdGggbm9uIHRyZWUiKTsKKysJZSA9IGUtPml0ZW0udHJlZS0+ZW50cmllczsKKysJd2hpbGUgKGUpIHsKKysJCXNob3dfZW50cnkoZSwgbGV2ZWwpOworKwkJZSA9IGUtPm5leHQ7CisrCX0KKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgc2hvd19lbnRyeShzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplLCBpbnQgbGV2ZWwpCisreworKwlpbnQgZXJyID0gMDsgCisrCisrCWlmIChlICE9ICZyb290X2VudHJ5KSB7CisrCQlwcmludGYoIiUwNm8gJXMgJXMJIiwgZS0+bW9kZSwgZW50cnlfdHlwZShlKSwKKysJCSAgICAgICBlbnRyeV9oZXgoZSkpOworKwkJc2hvd19lbnRyeV9uYW1lKGUpOworKwkJcHV0Y2hhcihsaW5lX3Rlcm1pbmF0aW9uKTsKKysJfQorKworKwlpZiAoZS0+ZGlyZWN0b3J5KSB7CisrCQkvKiBJZiB0aGlzIGlzIGEgZGlyZWN0b3J5LCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisrCQkgKiAoMSkgVGhpcyBpcyB0aGUgdG9wLWxldmVsIHJlcXVlc3QgKGV4cGxpY2l0IHBhdGggZnJvbSB0aGUKKysJCSAqICAgICBjb21tYW5kIGxpbmUsIG9yICJyb290IiBpZiB0aGVyZSBpcyBubyBjb21tYW5kIGxpbmUpLgorKwkJICogIGEuIFdpdGhvdXQgYW55IGZsYWcuICBXZSBzaG93IGRpcmVjdCBjaGlsZHJlbi4gIFdlIGRvIG5vdCAKKysJCSAqICAgICByZWN1cnNlIGludG8gdGhlbS4KKysJCSAqICBiLiBXaXRoIC1yLiAgV2UgZG8gcmVjdXJzZSBpbnRvIGNoaWxkcmVuLgorKwkJICogIGMuIFdpdGggLWQuICBXZSBkbyBub3QgcmVjdXJzZSBpbnRvIGNoaWxkcmVuLgorKwkJICogKDIpIFdlIGNhbWUgaGVyZSBiZWNhdXNlIG91ciBjYWxsZXIgaXMgZWl0aGVyICgxLWEpIG9yCisrCQkgKiAgICAgKDEtYikuCisrCQkgKiAgYS4gV2l0aG91dCBhbnkgZmxhZy4gIFdlIGRvIG5vdCBzaG93IG91ciBjaGlsZHJlbiAod2hpY2gKKysJCSAqICAgICBhcmUgZ3JhbmRjaGlsZHJlbiBmb3IgdGhlIG9yaWdpbmFsIHJlcXVlc3QpLgorKwkJICogIGIuIFdpdGggLXIuICBXZSBjb250aW51ZSB0byByZWN1cnNlIGludG8gb3VyIGNoaWxkcmVuLgorKwkJICogIGMuIFdpdGggLWQuICBXZSBzaG91bGQgbm90IGhhdmUgY29tZSBoZXJlIHRvIGJlZ2luIHdpdGguCisrCQkgKi8KKysJCWlmIChsZXZlbCA9PSAwICYmICEobHNfb3B0aW9ucyAmIExTX1RSRUVfT05MWSkpCisrCQkJLyogY2FzZSAoMSktYSBhbmQgKDEpLWIgKi8KKysJCQllcnIgPSBlcnIgfCBzaG93X2NoaWxkcmVuKGUsIGxldmVsKzEpOworKwkJZWxzZSBpZiAobGV2ZWwgJiYgbHNfb3B0aW9ucyAmIExTX1JFQ1VSU0lWRSkKKysJCQkvKiBjYXNlICgyKS1iICovCisrCQkJZXJyID0gZXJyIHwgc2hvd19jaGlsZHJlbihlLCBsZXZlbCsxKTsKKysJfQorKwlyZXR1cm4gZXJyOworK30KKysKKytzdGF0aWMgaW50IGxpc3Rfb25lKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnBhdGhfZW5kKQorK3sKKysJaW50IGVyciA9IDA7CisrCXN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUgPSBmaW5kX2VudHJ5KHBhdGgsIHBhdGhfZW5kKTsKKysJaWYgKCFlKSB7CisrCQkvKiB0cmFkaXRpb25hbGx5IGxzLXRyZWUgZG9lcyBub3QgY29tcGxhaW4gYWJvdXQKKysJCSAqIG1pc3NpbmcgcGF0aC4gIFdlIG1heSBjaGFuZ2UgdGhpcyBsYXRlciB0byBtYXRjaAorKwkJICogd2hhdCAiL2Jpbi9scyAtYSIgZG9lcywgd2hpY2ggaXMgdG8gY29tcGxhaW4uCisrCQkgKi8KKysJCXJldHVybiBlcnI7CisrCX0KKysJZXJyID0gZXJyIHwgc2hvd19lbnRyeShlLCAwKTsKKysJcmV0dXJuIGVycjsKKyt9CisrCisrc3RhdGljIGludCBsaXN0KGNoYXIgKipwYXRoKQorK3sKKysJaW50IGk7CisrCWludCBlcnIgPSAwOworKwlmb3IgKGkgPSAwOyBwYXRoW2ldOyBpKyspIHsKKysJCWludCBsZW4gPSBzdHJsZW4ocGF0aFtpXSk7CisrCQl3aGlsZSAoMCA8PSBsZW4gJiYgcGF0aFtpXVtsZW5dID09ICcvJykKKysJCQlsZW4tLTsKKysJCWVyciA9IGVyciB8IGxpc3Rfb25lKHBhdGhbaV0sIHBhdGhbaV0gKyBsZW4pOworKwl9CisrCXJldHVybiBlcnI7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICpsc190cmVlX3VzYWdlID0KKysJImdpdC1scy10cmVlIFstZF0gWy1yXSBbLXpdIDx0cmVlLWlzaD4gW3BhdGguLi5dIjsKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKwlzdGF0aWMgY2hhciAqcGF0aDBbXSA9IHsgIiIsIE5VTEwgfTsKKysJY2hhciAqKnBhdGg7CisrCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisrCisrCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgeworKwkJc3dpdGNoIChhcmd2WzFdWzFdKSB7CisrCQljYXNlICd6JzoKKysJCQlsaW5lX3Rlcm1pbmF0aW9uID0gMDsKKysJCQlicmVhazsKKysJCWNhc2UgJ3InOgorKwkJCWxzX29wdGlvbnMgfD0gTFNfUkVDVVJTSVZFOworKwkJCWJyZWFrOworKwkJY2FzZSAnZCc6CisrCQkJbHNfb3B0aW9ucyB8PSBMU19UUkVFX09OTFk7CisrCQkJYnJlYWs7CisrCQlkZWZhdWx0OgorKwkJCXVzYWdlKGxzX3RyZWVfdXNhZ2UpOworKwkJfQorKwkJYXJnYy0tOyBhcmd2Kys7CisrCX0KKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJdXNhZ2UobHNfdHJlZV91c2FnZSk7CisrCWlmIChnZXRfc2hhMShhcmd2WzFdLCBzaGExKSA8IDApCisrCQl1c2FnZShsc190cmVlX3VzYWdlKTsKKysKKysJcGF0aCA9IChhcmdjID09IDIpID8gcGF0aDAgOiAoYXJndiArIDIpOworKwlwcmVwYXJlX3Jvb3Qoc2hhMSk7CisrCWlmIChsaXN0KHBhdGgpIDwgMCkKKysJCWRpZSgibGlzdCBmYWlsZWQiKTsKKysJcmV0dXJuIDA7CisrfQorZGlmZiAtLWdpdCBhL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaCBiL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaAorLS0tIGEvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCisrKysgYi90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2gKK0BAIC03NCw4ICs3NCw4IEBAIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAnbHMtdHJlZSBmaWx0ZXJlZCcgXAorICAgICAnZ2l0LWxzLXRyZWUgJHRyZWUgcGF0aDEgcGF0aDAgPmN1cnJlbnQgJiYKKyAgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCistMTAwNjQ0IGJsb2IgWAlwYXRoMAorIDEyMDAwMCBibG9iIFgJcGF0aDEKKysxMDA2NDQgYmxvYiBYCXBhdGgwCisgRU9GCisgICAgICB0ZXN0X291dHB1dCcKKyAKK0BAIC04NSw3ICs4NSw2IEBAIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKyAwNDAwMDAgdHJlZSBYCXBhdGgyCisgMDQwMDAwIHRyZWUgWAlwYXRoMi9iYXoKKy0xMDA2NDQgYmxvYiBYCXBhdGgyL2Jhei9iCisgMTIwMDAwIGJsb2IgWAlwYXRoMi9iYXpibworIDEwMDY0NCBibG9iIFgJcGF0aDIvZm9vCisgRU9GCitkaWZmIC0tZ2l0IGEvdHJlZS5jIGIvdHJlZS5jCistLS0gYS90cmVlLmMKKysrKyBiL3RyZWUuYworQEAgLTEzMyw3ICsxMzMsNyBAQCBpbnQgcGFyc2VfdHJlZV9idWZmZXIoc3RydWN0IHRyZWUgKml0ZW0sCisgCQl9CisgCQlpZiAob2JqKQorIAkJCWFkZF9yZWYoJml0ZW0tPm9iamVjdCwgb2JqKTsKKy0KKysJCWVudHJ5LT5wYXJlbnQgPSBOVUxMOyAvKiBuZWVkcyB0byBiZSBmaWxsZWQgYnkgdGhlIHVzZXIgKi8KKyAJCSpsaXN0X3AgPSBlbnRyeTsKKyAJCWxpc3RfcCA9ICZlbnRyeS0+bmV4dDsKKyAJfQorZGlmZiAtLWdpdCBhL3RyZWUuaCBiL3RyZWUuaAorLS0tIGEvdHJlZS5oCisrKysgYi90cmVlLmgKK0BAIC0xNiw2ICsxNiw3IEBAIHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgeworIAkJc3RydWN0IHRyZWUgKnRyZWU7CisgCQlzdHJ1Y3QgYmxvYiAqYmxvYjsKKyAJfSBpdGVtOworKwlzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICpwYXJlbnQ7CisgfTsKKyAKKyBzdHJ1Y3QgdHJlZSB7CmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktNC5leHBlY3QgYi90L3Q0MTAwL3QtYXBwbHktNC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVjMDI4YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS00LmV4cGVjdApAQCAtMCwwICsxLDUgQEAKKyB0L3QwMDAwLWJhc2ljLnNoIHwgICAgMCAKKyB0L3Rlc3QtbGliLnNoICAgIHwgICAgMCAKKyAyIGZpbGVzIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKyBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHQvdDAwMDAtYmFzaWMuc2gKKyBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHQvdGVzdC1saWIuc2gKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS00LnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE1NmFiNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS00LnBhdGNoCkBAIC0wLDAgKzEsNyBAQAorY2VlZGU1OWVhOTBjZWJhZDUyYmE5YzgyNjNmZWYzZmI2ZWYxNzU5MyAoZnJvbSAzNjhmOTlkNTdlOGVkMTcyNDNmMmUxNjQ0MzE0NDlkNDhiZmNhMmZiKQorZGlmZiAtLWdpdCBhL3QvdDAwMDAtYmFzaWMuc2ggYi90L3QwMDAwLWJhc2ljLnNoCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQorZGlmZiAtLWdpdCBhL3QvdGVzdC1saWIuc2ggYi90L3Rlc3QtbGliLnNoCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTUuZXhwZWN0IGIvdC90NDEwMC90LWFwcGx5LTUuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzODdkZjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktNS5leHBlY3QKQEAgLTAsMCArMSwxOSBAQAorIERvY3VtZW50YXRpb24vZ2l0LXJwdWxsLnR4dCAgICB8ICAgNTAgLS0tLS0tLS0tLS0tLS0tLS0tLQorIERvY3VtZW50YXRpb24vZ2l0LXJwdXNoLnR4dCAgICB8ICAgMzAgLS0tLS0tLS0tLS0tCisgRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1bGwudHh0IHwgICA1MCArKysrKysrKysrKysrKysrKysrCisgRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1c2gudHh0IHwgICAzMCArKysrKysrKysrKysKKyBEb2N1bWVudGF0aW9uL2dpdC50eHQgICAgICAgICAgfCAgICA2ICstCisgTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQorIHJwdWxsLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgODMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBycHVzaC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTA0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBzc2gtcHVsbC5jICAgICAgICAgICAgICAgICAgICAgfCAgIDgzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc3NoLXB1c2guYyAgICAgICAgICAgICAgICAgICAgIHwgIDEwNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMTAgZmlsZXMgY2hhbmdlZCwgMjczIGluc2VydGlvbnMoKyksIDI3MyBkZWxldGlvbnMoLSkKKyBkZWxldGUgRG9jdW1lbnRhdGlvbi9naXQtcnB1bGwudHh0CisgZGVsZXRlIERvY3VtZW50YXRpb24vZ2l0LXJwdXNoLnR4dAorIGNyZWF0ZSBEb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVsbC50eHQKKyBjcmVhdGUgRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1c2gudHh0CisgZGVsZXRlIHJwdWxsLmMKKyBkZWxldGUgcnB1c2guYworIGNyZWF0ZSBzc2gtcHVsbC5jCisgY3JlYXRlIHNzaC1wdXNoLmMKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS01LnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdlYzc5ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS01LnBhdGNoCkBAIC0wLDAgKzEsNjEyIEBACitkaWZmIGEvRG9jdW1lbnRhdGlvbi9naXQtcnB1bGwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcnB1bGwudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ycHVsbC50eHQKKysrKyAvZGV2L251bGwKK0BAIC0xLDUwICswLDAgQEAKKy1naXQtcnB1bGwoMSkKKy09PT09PT09PT09PT0KKy12MC4xLCBNYXkgMjAwNQorLQorLU5BTUUKKy0tLS0tCistZ2l0LXJwdWxsIC0gUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24KKy0KKy0KKy0KKy1TWU5PUFNJUworLS0tLS0tLS0tCistJ2dpdC1ycHVsbCcgWy1jXSBbLXRdIFstYV0gWy1kXSBbLXZdIFstLXJlY292ZXJdIGNvbW1pdC1pZCB1cmwKKy0KKy1ERVNDUklQVElPTgorLS0tLS0tLS0tLS0tCistUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24sIGludm9raW5nIGdpdC1ycHVzaCBvbgorLXRoZSBvdGhlciBlbmQuCistCistT1BUSU9OUworLS0tLS0tLS0KKy0tYzo6CistCUdldCB0aGUgY29tbWl0IG9iamVjdHMuCistLXQ6OgorLQlHZXQgdHJlZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21taXQgb2JqZWN0cy4KKy0tYTo6CistCUdldCBhbGwgdGhlIG9iamVjdHMuCistLWQ6OgorLQlEbyBub3QgY2hlY2sgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0cyAodXNlIHRoaXMgb3B0aW9uCistCW9ubHkgd2hlbiB5b3Uga25vdyB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgaXMgbm90CistCWRlbHRpZmllZCkuCistLS1yZWNvdmVyOjoKKy0JQ2hlY2sgZGVwZW5kZW5jeSBvZiBkZWx0aWZpZWQgb2JqZWN0IG1vcmUgY2FyZWZ1bGx5IHRoYW4KKy0JdXN1YWwsIHRvIHJlY292ZXIgYWZ0ZXIgZWFybGllciBwdWxsIHRoYXQgd2FzIGludGVycnVwdGVkLgorLS12OjoKKy0JUmVwb3J0IHdoYXQgaXMgZG93bmxvYWRlZC4KKy0KKy0KKy1BdXRob3IKKy0tLS0tLS0KKy1Xcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KKy0KKy1Eb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLS0KKy1Eb2N1bWVudGF0aW9uIGJ5IERhdmlkIEdyZWF2ZXMsIEp1bmlvIEMgSGFtYW5vIGFuZCB0aGUgZ2l0LWxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LgorLQorLUdJVAorLS0tLQorLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorLQorZGlmZiBhL0RvY3VtZW50YXRpb24vZ2l0LXJwdXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJwdXNoLnR4dAorLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcnB1c2gudHh0CisrKysgL2Rldi9udWxsCitAQCAtMSwzMCArMCwwIEBACistZ2l0LXJwdXNoKDEpCistPT09PT09PT09PT09CistdjAuMSwgTWF5IDIwMDUKKy0KKy1OQU1FCistLS0tLQorLWdpdC1ycHVzaCAtIEhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtcnB1bGwKKy0KKy0KKy1TWU5PUFNJUworLS0tLS0tLS0tCistJ2dpdC1ycHVzaCcKKy0KKy1ERVNDUklQVElPTgorLS0tLS0tLS0tLS0tCistSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1ycHVsbC4KKy0KKy0KKy1BdXRob3IKKy0tLS0tLS0KKy1Xcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KKy0KKy1Eb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLS0KKy1Eb2N1bWVudGF0aW9uIGJ5IERhdmlkIEdyZWF2ZXMsIEp1bmlvIEMgSGFtYW5vIGFuZCB0aGUgZ2l0LWxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LgorLQorLUdJVAorLS0tLQorLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorLQorZGlmZiBhL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1wdWxsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1wdWxsLnR4dAorLS0tIC9kZXYvbnVsbAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1bGwudHh0CitAQCAtMCwwICsxLDUwIEBACisrZ2l0LXNzaC1wdWxsKDEpCisrPT09PT09PT09PT09PT09CisrdjAuMSwgTWF5IDIwMDUKKysKKytOQU1FCisrLS0tLQorK2dpdC1zc2gtcHVsbCAtIFB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uCisrCisrCisrCisrU1lOT1BTSVMKKystLS0tLS0tLQorKydnaXQtc3NoLXB1bGwnIFstY10gWy10XSBbLWFdIFstZF0gWy12XSBbLS1yZWNvdmVyXSBjb21taXQtaWQgdXJsCisrCisrREVTQ1JJUFRJT04KKystLS0tLS0tLS0tLQorK1B1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uLCBpbnZva2luZyBnaXQtc3NoLXB1c2gKKytvbiB0aGUgb3RoZXIgZW5kLgorKworK09QVElPTlMKKystLS0tLS0tCisrLWM6OgorKwlHZXQgdGhlIGNvbW1pdCBvYmplY3RzLgorKy10OjoKKysJR2V0IHRyZWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tbWl0IG9iamVjdHMuCisrLWE6OgorKwlHZXQgYWxsIHRoZSBvYmplY3RzLgorKy1kOjoKKysJRG8gbm90IGNoZWNrIGZvciBkZWx0YSBiYXNlIG9iamVjdHMgKHVzZSB0aGlzIG9wdGlvbgorKwlvbmx5IHdoZW4geW91IGtub3cgdGhlIHJlbW90ZSByZXBvc2l0b3J5IGlzIG5vdAorKwlkZWx0aWZpZWQpLgorKy0tcmVjb3Zlcjo6CisrCUNoZWNrIGRlcGVuZGVuY3kgb2YgZGVsdGlmaWVkIG9iamVjdCBtb3JlIGNhcmVmdWxseSB0aGFuCisrCXVzdWFsLCB0byByZWNvdmVyIGFmdGVyIGVhcmxpZXIgcHVsbCB0aGF0IHdhcyBpbnRlcnJ1cHRlZC4KKystdjo6CisrCVJlcG9ydCB3aGF0IGlzIGRvd25sb2FkZWQuCisrCisrCisrQXV0aG9yCisrLS0tLS0tCisrV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CisrCisrRG9jdW1lbnRhdGlvbgorKy0tLS0tLS0tLS0tLS0tCisrRG9jdW1lbnRhdGlvbiBieSBEYXZpZCBHcmVhdmVzLCBKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KKysKKytHSVQKKystLS0KKytQYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKKysKK2RpZmYgYS9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVzaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVzaC50eHQKKy0tLSAvZGV2L251bGwKKysrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1wdXNoLnR4dAorQEAgLTAsMCArMSwzMCBAQAorK2dpdC1zc2gtcHVzaCgxKQorKz09PT09PT09PT09PT09PQorK3YwLjEsIE1heSAyMDA1CisrCisrTkFNRQorKy0tLS0KKytnaXQtc3NoLXB1c2ggLSBIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXNzaC1wdWxsCisrCisrCisrU1lOT1BTSVMKKystLS0tLS0tLQorKydnaXQtc3NoLXB1c2gnCisrCisrREVTQ1JJUFRJT04KKystLS0tLS0tLS0tLQorK0hlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtc3NoLXB1bGwuCisrCisrCisrQXV0aG9yCisrLS0tLS0tCisrV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CisrCisrRG9jdW1lbnRhdGlvbgorKy0tLS0tLS0tLS0tLS0tCisrRG9jdW1lbnRhdGlvbiBieSBEYXZpZCBHcmVhdmVzLCBKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KKysKKytHSVQKKystLS0KKytQYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKKysKK2RpZmYgYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKKy0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CitAQCAtMTQ4LDcgKzE0OCw3IEBAIGxpbms6Z2l0LXJlc29sdmUtc2NyaXB0Lmh0bWxbZ2l0LXJlc29sdmUKKyBsaW5rOmdpdC10YWctc2NyaXB0Lmh0bWxbZ2l0LXRhZy1zY3JpcHRdOjoKKyAJQW4gZXhhbXBsZSBzY3JpcHQgdG8gY3JlYXRlIGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEcKKyAKKy1saW5rOmdpdC1ycHVsbC5odG1sW2dpdC1ycHVsbF06OgorK2xpbms6Z2l0LXNzaC1wdWxsLmh0bWxbZ2l0LXNzaC1wdWxsXTo6CisgCVB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uCisgCisgSW50ZXJyb2dhdG9yczoKK0BAIC0xNTYsOCArMTU2LDggQEAgSW50ZXJyb2dhdG9yczoKKyBsaW5rOmdpdC1kaWZmLWhlbHBlci5odG1sW2dpdC1kaWZmLWhlbHBlcl06OgorIAlHZW5lcmF0ZXMgcGF0Y2ggZm9ybWF0IG91dHB1dCBmb3IgZ2l0LWRpZmYtKgorIAorLWxpbms6Z2l0LXJwdXNoLmh0bWxbZ2l0LXJwdXNoXTo6CistCUhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtcnB1bGwKKytsaW5rOmdpdC1zc2gtcHVzaC5odG1sW2dpdC1zc2gtcHVzaF06OgorKwlIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXNzaC1wdWxsCisgCisgCisgCitkaWZmIGEvTWFrZWZpbGUgYi9NYWtlZmlsZQorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMzAsNyArMzAsNyBAQCBQUk9HPSAgIGdpdC11cGRhdGUtaW5kZXggZ2l0LWRpZmYtZmlsZXMKKyAJZ2l0LWNoZWNrb3V0LWNhY2hlIGdpdC1kaWZmLXRyZWUgZ2l0LXJldi10cmVlIGdpdC1scy1maWxlcyBcCisgCWdpdC1jaGVjay1maWxlcyBnaXQtbHMtdHJlZSBnaXQtbWVyZ2UtYmFzZSBnaXQtbWVyZ2UtY2FjaGUgXAorIAlnaXQtdW5wYWNrLWZpbGUgZ2l0LWV4cG9ydCBnaXQtZGlmZi1jYWNoZSBnaXQtY29udmVydC1jYWNoZSBcCistCWdpdC1odHRwLXB1bGwgZ2l0LXJwdXNoIGdpdC1ycHVsbCBnaXQtcmV2LWxpc3QgZ2l0LW1rdGFnIFwKKysJZ2l0LWh0dHAtcHVsbCBnaXQtc3NoLXB1c2ggZ2l0LXNzaC1wdWxsIGdpdC1yZXYtbGlzdCBnaXQtbWt0YWcgXAorIAlnaXQtZGlmZi1oZWxwZXIgZ2l0LXRhci10cmVlIGdpdC1sb2NhbC1wdWxsIGdpdC13cml0ZS1ibG9iIFwKKyAJZ2l0LWdldC10YXItY29tbWl0LWlkIGdpdC1ta2RlbHRhIGdpdC1hcHBseSBnaXQtc3RyaXBzcGFjZQorIAorQEAgLTEwNSw4ICsxMDUsOCBAQCBnaXQtZGlmZi1jYWNoZTogZGlmZi1jYWNoZS5jCisgZ2l0LWNvbnZlcnQtY2FjaGU6IGNvbnZlcnQtY2FjaGUuYworIGdpdC1odHRwLXB1bGw6IGh0dHAtcHVsbC5jIHB1bGwuYworIGdpdC1sb2NhbC1wdWxsOiBsb2NhbC1wdWxsLmMgcHVsbC5jCistZ2l0LXJwdXNoOiByc2guYworLWdpdC1ycHVsbDogcnNoLmMgcHVsbC5jCisrZ2l0LXNzaC1wdXNoOiByc2guYworK2dpdC1zc2gtcHVsbDogcnNoLmMgcHVsbC5jCisgZ2l0LXJldi1saXN0OiByZXYtbGlzdC5jCisgZ2l0LW1rdGFnOiBta3RhZy5jCisgZ2l0LWRpZmYtaGVscGVyOiBkaWZmLWhlbHBlci5jCitkaWZmIGEvcnB1bGwuYyBiL3JwdWxsLmMKKy0tLSBhL3JwdWxsLmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDgzICswLDAgQEAKKy0jaW5jbHVkZSAiY2FjaGUuaCIKKy0jaW5jbHVkZSAiY29tbWl0LmgiCistI2luY2x1ZGUgInJzaC5oIgorLSNpbmNsdWRlICJwdWxsLmgiCistCistc3RhdGljIGludCBmZF9pbjsKKy1zdGF0aWMgaW50IGZkX291dDsKKy0KKy1zdGF0aWMgdW5zaWduZWQgY2hhciByZW1vdGVfdmVyc2lvbiA9IDA7Cistc3RhdGljIHVuc2lnbmVkIGNoYXIgbG9jYWxfdmVyc2lvbiA9IDE7CistCistaW50IGZldGNoKHVuc2lnbmVkIGNoYXIgKnNoYTEpCisteworLQlpbnQgcmV0OworLQlzaWduZWQgY2hhciByZW1vdGU7CistCWNoYXIgdHlwZSA9ICdvJzsKKy0JaWYgKGhhc19zaGExX2ZpbGUoc2hhMSkpCistCQlyZXR1cm4gMDsKKy0Jd3JpdGUoZmRfb3V0LCAmdHlwZSwgMSk7CistCXdyaXRlKGZkX291dCwgc2hhMSwgMjApOworLQlpZiAocmVhZChmZF9pbiwgJnJlbW90ZSwgMSkgPCAxKQorLQkJcmV0dXJuIC0xOworLQlpZiAocmVtb3RlIDwgMCkKKy0JCXJldHVybiByZW1vdGU7CistCXJldCA9IHdyaXRlX3NoYTFfZnJvbV9mZChzaGExLCBmZF9pbik7CistCWlmICghcmV0KQorLQkJcHVsbF9zYXkoImdvdCAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworLQlyZXR1cm4gcmV0OworLX0KKy0KKy1pbnQgZ2V0X3ZlcnNpb24odm9pZCkKKy17CistCWNoYXIgdHlwZSA9ICd2JzsKKy0Jd3JpdGUoZmRfb3V0LCAmdHlwZSwgMSk7CistCXdyaXRlKGZkX291dCwgJmxvY2FsX3ZlcnNpb24sIDEpOworLQlpZiAocmVhZChmZF9pbiwgJnJlbW90ZV92ZXJzaW9uLCAxKSA8IDEpIHsKKy0JCXJldHVybiBlcnJvcigiQ291bGRuJ3QgcmVhZCB2ZXJzaW9uIGZyb20gcmVtb3RlIGVuZCIpOworLQl9CistCXJldHVybiAwOworLX0KKy0KKy1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisteworLQljaGFyICpjb21taXRfaWQ7CistCWNoYXIgKnVybDsKKy0JaW50IGFyZyA9IDE7CistCistCXdoaWxlIChhcmcgPCBhcmdjICYmIGFyZ3ZbYXJnXVswXSA9PSAnLScpIHsKKy0JCWlmIChhcmd2W2FyZ11bMV0gPT0gJ3QnKSB7CistCQkJZ2V0X3RyZWUgPSAxOworLQkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2MnKSB7CistCQkJZ2V0X2hpc3RvcnkgPSAxOworLQkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2QnKSB7CistCQkJZ2V0X2RlbHRhID0gMDsKKy0JCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2FyZ10sICItLXJlY292ZXIiKSkgeworLQkJCWdldF9kZWx0YSA9IDI7CistCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAnYScpIHsKKy0JCQlnZXRfYWxsID0gMTsKKy0JCQlnZXRfdHJlZSA9IDE7CistCQkJZ2V0X2hpc3RvcnkgPSAxOworLQkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ3YnKSB7CistCQkJZ2V0X3ZlcmJvc2VseSA9IDE7CistCQl9CistCQlhcmcrKzsKKy0JfQorLQlpZiAoYXJnYyA8IGFyZyArIDIpIHsKKy0JCXVzYWdlKCJnaXQtcnB1bGwgWy1jXSBbLXRdIFstYV0gWy12XSBbLWRdIFstLXJlY292ZXJdIGNvbW1pdC1pZCB1cmwiKTsKKy0JCXJldHVybiAxOworLQl9CistCWNvbW1pdF9pZCA9IGFyZ3ZbYXJnXTsKKy0JdXJsID0gYXJndlthcmcgKyAxXTsKKy0KKy0JaWYgKHNldHVwX2Nvbm5lY3Rpb24oJmZkX2luLCAmZmRfb3V0LCAiZ2l0LXJwdXNoIiwgdXJsLCBhcmcsIGFyZ3YgKyAxKSkKKy0JCXJldHVybiAxOworLQorLQlpZiAoZ2V0X3ZlcnNpb24oKSkKKy0JCXJldHVybiAxOworLQorLQlpZiAocHVsbChjb21taXRfaWQpKQorLQkJcmV0dXJuIDE7CistCistCXJldHVybiAwOworLX0KK2RpZmYgYS9ycHVzaC5jIGIvcnB1c2guYworLS0tIGEvcnB1c2guYworKysrIC9kZXYvbnVsbAorQEAgLTEsMTA0ICswLDAgQEAKKy0jaW5jbHVkZSAiY2FjaGUuaCIKKy0jaW5jbHVkZSAicnNoLmgiCistI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0jaW5jbHVkZSA8ZXJybm8uaD4KKy0KKy11bnNpZ25lZCBjaGFyIGxvY2FsX3ZlcnNpb24gPSAxOworLXVuc2lnbmVkIGNoYXIgcmVtb3RlX3ZlcnNpb24gPSAwOworLQorLWludCBzZXJ2ZV9vYmplY3QoaW50IGZkX2luLCBpbnQgZmRfb3V0KSB7CistCXNzaXplX3Qgc2l6ZTsKKy0JaW50IHBvc24gPSAwOworLQljaGFyIHNoYTFbMjBdOworLQl1bnNpZ25lZCBsb25nIG9ianNpemU7CistCXZvaWQgKmJ1ZjsKKy0Jc2lnbmVkIGNoYXIgcmVtb3RlOworLQlkbyB7CistCQlzaXplID0gcmVhZChmZF9pbiwgc2hhMSArIHBvc24sIDIwIC0gcG9zbik7CistCQlpZiAoc2l6ZSA8IDApIHsKKy0JCQlwZXJyb3IoImdpdC1ycHVzaDogcmVhZCAiKTsKKy0JCQlyZXR1cm4gLTE7CistCQl9CistCQlpZiAoIXNpemUpCistCQkJcmV0dXJuIC0xOworLQkJcG9zbiArPSBzaXplOworLQl9IHdoaWxlIChwb3NuIDwgMjApOworLQkKKy0JLyogZnByaW50ZihzdGRlcnIsICJTZXJ2aW5nICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7ICovCistCXJlbW90ZSA9IDA7CistCQorLQlidWYgPSBtYXBfc2hhMV9maWxlKHNoYTEsICZvYmpzaXplKTsKKy0JCistCWlmICghYnVmKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgImdpdC1ycHVzaDogY291bGQgbm90IGZpbmQgJXNcbiIsIAorLQkJCXNoYTFfdG9faGV4KHNoYTEpKTsKKy0JCXJlbW90ZSA9IC0xOworLQl9CistCQorLQl3cml0ZShmZF9vdXQsICZyZW1vdGUsIDEpOworLQkKKy0JaWYgKHJlbW90ZSA8IDApCistCQlyZXR1cm4gMDsKKy0JCistCXBvc24gPSAwOworLQlkbyB7CistCQlzaXplID0gd3JpdGUoZmRfb3V0LCBidWYgKyBwb3NuLCBvYmpzaXplIC0gcG9zbik7CistCQlpZiAoc2l6ZSA8PSAwKSB7CistCQkJaWYgKCFzaXplKSB7CistCQkJCWZwcmludGYoc3RkZXJyLCAiZ2l0LXJwdXNoOiB3cml0ZSBjbG9zZWQiKTsKKy0JCQl9IGVsc2UgeworLQkJCQlwZXJyb3IoImdpdC1ycHVzaDogd3JpdGUgIik7CistCQkJfQorLQkJCXJldHVybiAtMTsKKy0JCX0KKy0JCXBvc24gKz0gc2l6ZTsKKy0JfSB3aGlsZSAocG9zbiA8IG9ianNpemUpOworLQlyZXR1cm4gMDsKKy19CistCistaW50IHNlcnZlX3ZlcnNpb24oaW50IGZkX2luLCBpbnQgZmRfb3V0KQorLXsKKy0JaWYgKHJlYWQoZmRfaW4sICZyZW1vdGVfdmVyc2lvbiwgMSkgPCAxKQorLQkJcmV0dXJuIC0xOworLQl3cml0ZShmZF9vdXQsICZsb2NhbF92ZXJzaW9uLCAxKTsKKy0JcmV0dXJuIDA7CistfQorLQorLXZvaWQgc2VydmljZShpbnQgZmRfaW4sIGludCBmZF9vdXQpIHsKKy0JY2hhciB0eXBlOworLQlpbnQgcmV0dmFsOworLQlkbyB7CistCQlyZXR2YWwgPSByZWFkKGZkX2luLCAmdHlwZSwgMSk7CistCQlpZiAocmV0dmFsIDwgMSkgeworLQkJCWlmIChyZXR2YWwgPCAwKQorLQkJCQlwZXJyb3IoInJwdXNoOiByZWFkICIpOworLQkJCXJldHVybjsKKy0JCX0KKy0JCWlmICh0eXBlID09ICd2JyAmJiBzZXJ2ZV92ZXJzaW9uKGZkX2luLCBmZF9vdXQpKQorLQkJCXJldHVybjsKKy0JCWlmICh0eXBlID09ICdvJyAmJiBzZXJ2ZV9vYmplY3QoZmRfaW4sIGZkX291dCkpCistCQkJcmV0dXJuOworLQl9IHdoaWxlICgxKTsKKy19CistCistaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorLXsKKy0JaW50IGFyZyA9IDE7CistICAgICAgICBjaGFyICpjb21taXRfaWQ7CistICAgICAgICBjaGFyICp1cmw7CistCWludCBmZF9pbiwgZmRfb3V0OworLQl3aGlsZSAoYXJnIDwgYXJnYyAmJiBhcmd2W2FyZ11bMF0gPT0gJy0nKSB7CistICAgICAgICAgICAgICAgIGFyZysrOworLSAgICAgICAgfQorLSAgICAgICAgaWYgKGFyZ2MgPCBhcmcgKyAyKSB7CistCQl1c2FnZSgiZ2l0LXJwdXNoIFstY10gWy10XSBbLWFdIGNvbW1pdC1pZCB1cmwiKTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIDE7CistICAgICAgICB9CistCWNvbW1pdF9pZCA9IGFyZ3ZbYXJnXTsKKy0JdXJsID0gYXJndlthcmcgKyAxXTsKKy0JaWYgKHNldHVwX2Nvbm5lY3Rpb24oJmZkX2luLCAmZmRfb3V0LCAiZ2l0LXJwdWxsIiwgdXJsLCBhcmcsIGFyZ3YgKyAxKSkKKy0JCXJldHVybiAxOworLQorLQlzZXJ2aWNlKGZkX2luLCBmZF9vdXQpOworLQlyZXR1cm4gMDsKKy19CitkaWZmIGEvc3NoLXB1bGwuYyBiL3NzaC1wdWxsLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NzaC1wdWxsLmMKK0BAIC0wLDAgKzEsODMgQEAKKysjaW5jbHVkZSAiY2FjaGUuaCIKKysjaW5jbHVkZSAiY29tbWl0LmgiCisrI2luY2x1ZGUgInJzaC5oIgorKyNpbmNsdWRlICJwdWxsLmgiCisrCisrc3RhdGljIGludCBmZF9pbjsKKytzdGF0aWMgaW50IGZkX291dDsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciByZW1vdGVfdmVyc2lvbiA9IDA7Cisrc3RhdGljIHVuc2lnbmVkIGNoYXIgbG9jYWxfdmVyc2lvbiA9IDE7CisrCisraW50IGZldGNoKHVuc2lnbmVkIGNoYXIgKnNoYTEpCisreworKwlpbnQgcmV0OworKwlzaWduZWQgY2hhciByZW1vdGU7CisrCWNoYXIgdHlwZSA9ICdvJzsKKysJaWYgKGhhc19zaGExX2ZpbGUoc2hhMSkpCisrCQlyZXR1cm4gMDsKKysJd3JpdGUoZmRfb3V0LCAmdHlwZSwgMSk7CisrCXdyaXRlKGZkX291dCwgc2hhMSwgMjApOworKwlpZiAocmVhZChmZF9pbiwgJnJlbW90ZSwgMSkgPCAxKQorKwkJcmV0dXJuIC0xOworKwlpZiAocmVtb3RlIDwgMCkKKysJCXJldHVybiByZW1vdGU7CisrCXJldCA9IHdyaXRlX3NoYTFfZnJvbV9mZChzaGExLCBmZF9pbik7CisrCWlmICghcmV0KQorKwkJcHVsbF9zYXkoImdvdCAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworKwlyZXR1cm4gcmV0OworK30KKysKKytpbnQgZ2V0X3ZlcnNpb24odm9pZCkKKyt7CisrCWNoYXIgdHlwZSA9ICd2JzsKKysJd3JpdGUoZmRfb3V0LCAmdHlwZSwgMSk7CisrCXdyaXRlKGZkX291dCwgJmxvY2FsX3ZlcnNpb24sIDEpOworKwlpZiAocmVhZChmZF9pbiwgJnJlbW90ZV92ZXJzaW9uLCAxKSA8IDEpIHsKKysJCXJldHVybiBlcnJvcigiQ291bGRuJ3QgcmVhZCB2ZXJzaW9uIGZyb20gcmVtb3RlIGVuZCIpOworKwl9CisrCXJldHVybiAwOworK30KKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKwljaGFyICpjb21taXRfaWQ7CisrCWNoYXIgKnVybDsKKysJaW50IGFyZyA9IDE7CisrCisrCXdoaWxlIChhcmcgPCBhcmdjICYmIGFyZ3ZbYXJnXVswXSA9PSAnLScpIHsKKysJCWlmIChhcmd2W2FyZ11bMV0gPT0gJ3QnKSB7CisrCQkJZ2V0X3RyZWUgPSAxOworKwkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2MnKSB7CisrCQkJZ2V0X2hpc3RvcnkgPSAxOworKwkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2QnKSB7CisrCQkJZ2V0X2RlbHRhID0gMDsKKysJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2FyZ10sICItLXJlY292ZXIiKSkgeworKwkJCWdldF9kZWx0YSA9IDI7CisrCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAnYScpIHsKKysJCQlnZXRfYWxsID0gMTsKKysJCQlnZXRfdHJlZSA9IDE7CisrCQkJZ2V0X2hpc3RvcnkgPSAxOworKwkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ3YnKSB7CisrCQkJZ2V0X3ZlcmJvc2VseSA9IDE7CisrCQl9CisrCQlhcmcrKzsKKysJfQorKwlpZiAoYXJnYyA8IGFyZyArIDIpIHsKKysJCXVzYWdlKCJnaXQtc3NoLXB1bGwgWy1jXSBbLXRdIFstYV0gWy12XSBbLWRdIFstLXJlY292ZXJdIGNvbW1pdC1pZCB1cmwiKTsKKysJCXJldHVybiAxOworKwl9CisrCWNvbW1pdF9pZCA9IGFyZ3ZbYXJnXTsKKysJdXJsID0gYXJndlthcmcgKyAxXTsKKysKKysJaWYgKHNldHVwX2Nvbm5lY3Rpb24oJmZkX2luLCAmZmRfb3V0LCAiZ2l0LXNzaC1wdXNoIiwgdXJsLCBhcmcsIGFyZ3YgKyAxKSkKKysJCXJldHVybiAxOworKworKwlpZiAoZ2V0X3ZlcnNpb24oKSkKKysJCXJldHVybiAxOworKworKwlpZiAocHVsbChjb21taXRfaWQpKQorKwkJcmV0dXJuIDE7CisrCisrCXJldHVybiAwOworK30KK2RpZmYgYS9zc2gtcHVzaC5jIGIvc3NoLXB1c2guYworLS0tIC9kZXYvbnVsbAorKysrIGIvc3NoLXB1c2guYworQEAgLTAsMCArMSwxMDQgQEAKKysjaW5jbHVkZSAiY2FjaGUuaCIKKysjaW5jbHVkZSAicnNoLmgiCisrI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysKKyt1bnNpZ25lZCBjaGFyIGxvY2FsX3ZlcnNpb24gPSAxOworK3Vuc2lnbmVkIGNoYXIgcmVtb3RlX3ZlcnNpb24gPSAwOworKworK2ludCBzZXJ2ZV9vYmplY3QoaW50IGZkX2luLCBpbnQgZmRfb3V0KSB7CisrCXNzaXplX3Qgc2l6ZTsKKysJaW50IHBvc24gPSAwOworKwljaGFyIHNoYTFbMjBdOworKwl1bnNpZ25lZCBsb25nIG9ianNpemU7CisrCXZvaWQgKmJ1ZjsKKysJc2lnbmVkIGNoYXIgcmVtb3RlOworKwlkbyB7CisrCQlzaXplID0gcmVhZChmZF9pbiwgc2hhMSArIHBvc24sIDIwIC0gcG9zbik7CisrCQlpZiAoc2l6ZSA8IDApIHsKKysJCQlwZXJyb3IoImdpdC1zc2gtcHVzaDogcmVhZCAiKTsKKysJCQlyZXR1cm4gLTE7CisrCQl9CisrCQlpZiAoIXNpemUpCisrCQkJcmV0dXJuIC0xOworKwkJcG9zbiArPSBzaXplOworKwl9IHdoaWxlIChwb3NuIDwgMjApOworKwkKKysJLyogZnByaW50ZihzdGRlcnIsICJTZXJ2aW5nICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7ICovCisrCXJlbW90ZSA9IDA7CisrCQorKwlidWYgPSBtYXBfc2hhMV9maWxlKHNoYTEsICZvYmpzaXplKTsKKysJCisrCWlmICghYnVmKSB7CisrCQlmcHJpbnRmKHN0ZGVyciwgImdpdC1zc2gtcHVzaDogY291bGQgbm90IGZpbmQgJXNcbiIsIAorKwkJCXNoYTFfdG9faGV4KHNoYTEpKTsKKysJCXJlbW90ZSA9IC0xOworKwl9CisrCQorKwl3cml0ZShmZF9vdXQsICZyZW1vdGUsIDEpOworKwkKKysJaWYgKHJlbW90ZSA8IDApCisrCQlyZXR1cm4gMDsKKysJCisrCXBvc24gPSAwOworKwlkbyB7CisrCQlzaXplID0gd3JpdGUoZmRfb3V0LCBidWYgKyBwb3NuLCBvYmpzaXplIC0gcG9zbik7CisrCQlpZiAoc2l6ZSA8PSAwKSB7CisrCQkJaWYgKCFzaXplKSB7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiZ2l0LXNzaC1wdXNoOiB3cml0ZSBjbG9zZWQiKTsKKysJCQl9IGVsc2UgeworKwkJCQlwZXJyb3IoImdpdC1zc2gtcHVzaDogd3JpdGUgIik7CisrCQkJfQorKwkJCXJldHVybiAtMTsKKysJCX0KKysJCXBvc24gKz0gc2l6ZTsKKysJfSB3aGlsZSAocG9zbiA8IG9ianNpemUpOworKwlyZXR1cm4gMDsKKyt9CisrCisraW50IHNlcnZlX3ZlcnNpb24oaW50IGZkX2luLCBpbnQgZmRfb3V0KQorK3sKKysJaWYgKHJlYWQoZmRfaW4sICZyZW1vdGVfdmVyc2lvbiwgMSkgPCAxKQorKwkJcmV0dXJuIC0xOworKwl3cml0ZShmZF9vdXQsICZsb2NhbF92ZXJzaW9uLCAxKTsKKysJcmV0dXJuIDA7CisrfQorKworK3ZvaWQgc2VydmljZShpbnQgZmRfaW4sIGludCBmZF9vdXQpIHsKKysJY2hhciB0eXBlOworKwlpbnQgcmV0dmFsOworKwlkbyB7CisrCQlyZXR2YWwgPSByZWFkKGZkX2luLCAmdHlwZSwgMSk7CisrCQlpZiAocmV0dmFsIDwgMSkgeworKwkJCWlmIChyZXR2YWwgPCAwKQorKwkJCQlwZXJyb3IoImdpdC1zc2gtcHVzaDogcmVhZCAiKTsKKysJCQlyZXR1cm47CisrCQl9CisrCQlpZiAodHlwZSA9PSAndicgJiYgc2VydmVfdmVyc2lvbihmZF9pbiwgZmRfb3V0KSkKKysJCQlyZXR1cm47CisrCQlpZiAodHlwZSA9PSAnbycgJiYgc2VydmVfb2JqZWN0KGZkX2luLCBmZF9vdXQpKQorKwkJCXJldHVybjsKKysJfSB3aGlsZSAoMSk7CisrfQorKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrCWludCBhcmcgPSAxOworKyAgICAgICAgY2hhciAqY29tbWl0X2lkOworKyAgICAgICAgY2hhciAqdXJsOworKwlpbnQgZmRfaW4sIGZkX291dDsKKysJd2hpbGUgKGFyZyA8IGFyZ2MgJiYgYXJndlthcmddWzBdID09ICctJykgeworKyAgICAgICAgICAgICAgICBhcmcrKzsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChhcmdjIDwgYXJnICsgMikgeworKwkJdXNhZ2UoImdpdC1zc2gtcHVzaCBbLWNdIFstdF0gWy1hXSBjb21taXQtaWQgdXJsIik7CisrICAgICAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgfQorKwljb21taXRfaWQgPSBhcmd2W2FyZ107CisrCXVybCA9IGFyZ3ZbYXJnICsgMV07CisrCWlmIChzZXR1cF9jb25uZWN0aW9uKCZmZF9pbiwgJmZkX291dCwgImdpdC1zc2gtcHVsbCIsIHVybCwgYXJnLCBhcmd2ICsgMSkpCisrCQlyZXR1cm4gMTsKKysKKysJc2VydmljZShmZF9pbiwgZmRfb3V0KTsKKysJcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTYuZXhwZWN0IGIvdC90NDEwMC90LWFwcGx5LTYuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMzQzZDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktNi5leHBlY3QKQEAgLTAsMCArMSw1IEBACisgTWFrZWZpbGUgICAgICAgICB8ICAgIDIgKy0KKyBnaXQtZmV0Y2gtc2NyaXB0IHwgICA0MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGdpdC1wdWxsLXNjcmlwdCAgfCAgIDM0ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDM0IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBnaXQtZmV0Y2gtc2NyaXB0CmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktNi5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS02LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjcyOWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktNi5wYXRjaApAQCAtMCwwICsxLDEwMSBAQAorZGlmZiBhL01ha2VmaWxlIGIvTWFrZWZpbGUKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTIwLDcgKzIwLDcgQEAgSU5TVEFMTD1pbnN0YWxsCisgCisgU0NSSVBUUz1naXQtYXBwbHktcGF0Y2gtc2NyaXB0IGdpdC1tZXJnZS1vbmUtZmlsZS1zY3JpcHQgZ2l0LXBydW5lLXNjcmlwdCBcCisgCWdpdC1wdWxsLXNjcmlwdCBnaXQtdGFnLXNjcmlwdCBnaXQtcmVzb2x2ZS1zY3JpcHQgZ2l0LXdoYXRjaGFuZ2VkIFwKKy0JZ2l0LWRlbHRhZnktc2NyaXB0CisrCWdpdC1kZWx0YWZ5LXNjcmlwdCBnaXQtZmV0Y2gtc2NyaXB0CisgCisgUFJPRz0gICBnaXQtdXBkYXRlLWluZGV4IGdpdC1kaWZmLWZpbGVzIGdpdC1pbml0LWRiIGdpdC13cml0ZS10cmVlIFwKKyAJZ2l0LXJlYWQtdHJlZSBnaXQtY29tbWl0LXRyZWUgZ2l0LWNhdC1maWxlIGdpdC1mc2NrLWNhY2hlIFwKK2RpZmYgYS9naXQtZmV0Y2gtc2NyaXB0IGIvZ2l0LWZldGNoLXNjcmlwdAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2l0LWZldGNoLXNjcmlwdAorQEAgLTAsMCArMSw0MSBAQAorKyMhL2Jpbi9zaAorKyMKKyttZXJnZV9yZXBvPSQxCisrbWVyZ2VfbmFtZT0kezI6LUhFQUR9CisrCisrOiAke0dJVF9ESVI9LmdpdH0KKys6ICR7R0lUX09CSkVDVF9ESVJFQ1RPUlk9IiR7U0hBMV9GSUxFX0RJUkVDVE9SWS0iJEdJVF9ESVIvb2JqZWN0cyJ9In0KKysKKytkb3dubG9hZF9vbmUgKCkgeworKwkjIHJlbW90ZV9wYXRoPSIkMSIgbG9jYWxfZmlsZT0iJDIiCisrCWNhc2UgIiQxIiBpbgorKwlodHRwOi8vKikKKysJCXdnZXQgLXEgLU8gIiQyIiAiJDEiIDs7CisrCS8qKQorKwkJdGVzdCAtZiAiJDEiICYmIGNhdCA+IiQyIiAiJDEiIDs7CisrCSopCisrCQlyc3luYyAtTCAiJDEiICIkMiIgOzsKKysJZXNhYworK30KKysKKytkb3dubG9hZF9vYmplY3RzICgpIHsKKysJIyByZW1vdGVfcmVwbz0iJDEiIGhlYWRfc2hhMT0iJDIiCisrCWNhc2UgIiQxIiBpbgorKwlodHRwOi8vKikKKysJCWdpdC1odHRwLXB1bGwgLWEgIiQyIiAiJDEvIgorKwkJOzsKKysJLyopCisrCQlnaXQtbG9jYWwtcHVsbCAtbCAtYSAiJDIiICIkMS8iCisrCQk7OworKwkqKQorKwkJcnN5bmMgLWF2eiAtLWlnbm9yZS1leGlzdGluZyBcCisrCQkJIiQxL29iamVjdHMvLiIgIiRHSVRfT0JKRUNUX0RJUkVDVE9SWSIvLgorKwkJOzsKKysJZXNhYworK30KKysKKytlY2hvICJHZXR0aW5nIHJlbW90ZSAkbWVyZ2VfbmFtZSIKKytkb3dubG9hZF9vbmUgIiRtZXJnZV9yZXBvLyRtZXJnZV9uYW1lIiAiJEdJVF9ESVIiL01FUkdFX0hFQUQKKysKKytlY2hvICJHZXR0aW5nIG9iamVjdCBkYXRhYmFzZSIKKytkb3dubG9hZF9vYmplY3RzICIkbWVyZ2VfcmVwbyIgIiQoY2F0ICIkR0lUX0RJUiIvTUVSR0VfSEVBRCkiCitkaWZmIGEvZ2l0LXB1bGwtc2NyaXB0IGIvZ2l0LXB1bGwtc2NyaXB0CistLS0gYS9naXQtcHVsbC1zY3JpcHQKKysrKyBiL2dpdC1wdWxsLXNjcmlwdAorQEAgLTYsMzkgKzYsNyBAQCBtZXJnZV9uYW1lPSR7MjotSEVBRH0KKyA6ICR7R0lUX0RJUj0uZ2l0fQorIDogJHtHSVRfT0JKRUNUX0RJUkVDVE9SWT0iJHtTSEExX0ZJTEVfRElSRUNUT1JZLSIkR0lUX0RJUi9vYmplY3RzIn0ifQorIAorLWRvd25sb2FkX29uZSAoKSB7CistCSMgcmVtb3RlX3BhdGg9IiQxIiBsb2NhbF9maWxlPSIkMiIKKy0JY2FzZSAiJDEiIGluCistCWh0dHA6Ly8qKQorLQkJd2dldCAtcSAtTyAiJDIiICIkMSIgOzsKKy0JLyopCistCQl0ZXN0IC1mICIkMSIgJiYgY2F0ID4iJDIiICIkMSIgOzsKKy0JKikKKy0JCXJzeW5jIC1MICIkMSIgIiQyIiA7OworLQllc2FjCistfQorLQorLWRvd25sb2FkX29iamVjdHMgKCkgeworLQkjIHJlbW90ZV9yZXBvPSIkMSIgaGVhZF9zaGExPSIkMiIKKy0JY2FzZSAiJDEiIGluCistCWh0dHA6Ly8qKQorLQkJZ2l0LWh0dHAtcHVsbCAtYSAiJDIiICIkMS8iCistCQk7OworLQkvKikKKy0JCWdpdC1sb2NhbC1wdWxsIC1sIC1hICIkMiIgIiQxLyIKKy0JCTs7CistCSopCistCQlyc3luYyAtYXZ6IC0taWdub3JlLWV4aXN0aW5nIFwKKy0JCQkiJDEvb2JqZWN0cy8uIiAiJEdJVF9PQkpFQ1RfRElSRUNUT1JZIi8uCistCQk7OworLQllc2FjCistfQorLQorLWVjaG8gIkdldHRpbmcgcmVtb3RlICRtZXJnZV9uYW1lIgorLWRvd25sb2FkX29uZSAiJG1lcmdlX3JlcG8vJG1lcmdlX25hbWUiICIkR0lUX0RJUiIvTUVSR0VfSEVBRAorLQorLWVjaG8gIkdldHRpbmcgb2JqZWN0IGRhdGFiYXNlIgorLWRvd25sb2FkX29iamVjdHMgIiRtZXJnZV9yZXBvIiAiJChjYXQgIiRHSVRfRElSIi9NRVJHRV9IRUFEKSIKKytnaXQtZmV0Y2gtc2NyaXB0ICIkbWVyZ2VfcmVwbyIgIiRtZXJnZV9uYW1lIgorIAorIGdpdC1yZXNvbHZlLXNjcmlwdCBcCisgCSIkKGNhdCAiJEdJVF9ESVIiL0hFQUQpIiBcCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktNy5leHBlY3QgYi90L3Q0MTAwL3QtYXBwbHktNy5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4MzE2NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS03LmV4cGVjdApAQCAtMCwwICsxLDYgQEAKKyBEb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dCB8ICAgMjAgKy0KKyBscy10cmVlLmMgICAgICAgICAgICAgICAgICAgICB8ICAzMzMgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KKyB0L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2ggICB8ICAgIDMgCisgdHJlZS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyIAorIHRyZWUuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAKKyA1IGZpbGVzIGNoYW5nZWQsIDE5OSBpbnNlcnRpb25zKCspLCAxNjAgZGVsZXRpb25zKC0pCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktNy5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS03LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMjQzMDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktNy5wYXRjaApAQCAtMCwwICsxLDQ5NCBAQAorZGlmZiBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKKy0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CisrKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dAorQEAgLTQsMjMgKzQsMjYgQEAgdjAuMSwgTWF5IDIwMDUKKyAKKyBOQU1FCisgLS0tLQorLWdpdC1scy10cmVlIC0gRGlzcGxheXMgYSB0cmVlIG9iamVjdCBpbiBodW1hbiByZWFkYWJsZSBmb3JtCisrZ2l0LWxzLXRyZWUgLSBMaXN0cyB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdC4KKyAKKyAKKyBTWU5PUFNJUworIC0tLS0tLS0tCistJ2dpdC1scy10cmVlJyBbLXJdIFstel0gPHRyZWUtaXNoPiBbcGF0aHMuLi5dCisrJ2dpdC1scy10cmVlJyBbLWRdIFstcl0gWy16XSA8dHJlZS1pc2g+IFtwYXRocy4uLl0KKyAKKyBERVNDUklQVElPTgorIC0tLS0tLS0tLS0tCistQ29udmVydHMgdGhlIHRyZWUgb2JqZWN0IHRvIGEgaHVtYW4gcmVhZGFibGUgKGFuZCBzY3JpcHQgcHJvY2Vzc2FibGUpCistZm9ybS4KKytMaXN0cyB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdCwgbGlrZSB3aGF0ICIvYmluL2xzIC1hIiBkb2VzCisraW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisgCisgT1BUSU9OUworIC0tLS0tLS0KKyA8dHJlZS1pc2g+OjoKKyAJSWQgb2YgYSB0cmVlLgorIAorKy1kOjoKKysJc2hvdyBvbmx5IHRoZSBuYW1lZCB0cmVlIGVudHJ5IGl0c2VsZiwgbm90IGl0cyBjaGlsZHJlbgorKworIC1yOjoKKyAJcmVjdXJzZSBpbnRvIHN1Yi10cmVlcworIAorQEAgLTI4LDE4ICszMSwxOSBAQCBPUFRJT05TCisgCVwwIGxpbmUgdGVybWluYXRpb24gb24gb3V0cHV0CisgCisgcGF0aHM6OgorLQlPcHRpb25hbGx5LCByZXN0cmljdCB0aGUgb3V0cHV0IG9mIGdpdC1scy10cmVlIHRvIHNwZWNpZmljCistCXBhdGhzLiBEaXJlY3RvcmllcyB3aWxsIG9ubHkgbGlzdCB0aGVpciB0cmVlIGJsb2IgaWRzLgorLQlJbXBsaWVzIC1yLgorKwlXaGVuIHBhdGhzIGFyZSBnaXZlbiwgc2hvd3MgdGhlbS4gIE90aGVyd2lzZSBpbXBsaWNpdGx5CisrCXVzZXMgdGhlIHJvb3QgbGV2ZWwgb2YgdGhlIHRyZWUgYXMgdGhlIHNvbGUgcGF0aCBhcmd1bWVudC4KKysKKyAKKyBPdXRwdXQgRm9ybWF0CisgLS0tLS0tLS0tLS0tLQorLSAgICAgICAgPG1vZGU+XHQJPHR5cGU+XHQJPG9iamVjdD5cdAk8ZmlsZT4KKysgICAgICAgIDxtb2RlPiBTUCA8dHlwZT4gU1AgPG9iamVjdD4gVEFCIDxmaWxlPgorIAorIAorIEF1dGhvcgorIC0tLS0tLQorIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorK0NvbXBsZXRlbHkgcmV3cml0dGVuIGZyb20gc2NyYXRjaCBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CisgCisgRG9jdW1lbnRhdGlvbgorIC0tLS0tLS0tLS0tLS0tCitkaWZmIGEvbHMtdHJlZS5jIGIvbHMtdHJlZS5jCistLS0gYS9scy10cmVlLmMKKysrKyBiL2xzLXRyZWUuYworQEAgLTQsMTg4ICs0LDIxNyBAQAorICAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAgKi8KKyAjaW5jbHVkZSAiY2FjaGUuaCIKKysjaW5jbHVkZSAiYmxvYi5oIgorKyNpbmNsdWRlICJ0cmVlLmgiCisgCisgc3RhdGljIGludCBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKy1zdGF0aWMgaW50IHJlY3Vyc2l2ZSA9IDA7CisrI2RlZmluZSBMU19SRUNVUlNJVkUgMQorKyNkZWZpbmUgTFNfVFJFRV9PTkxZIDIKKytzdGF0aWMgaW50IGxzX29wdGlvbnMgPSAwOworIAorLXN0cnVjdCBwYXRoX3ByZWZpeCB7CistCXN0cnVjdCBwYXRoX3ByZWZpeCAqcHJldjsKKy0JY29uc3QgY2hhciAqbmFtZTsKKy19OworLQorLSNkZWZpbmUgREVCVUcoZm10LCAuLi4pCQorLQorLXN0YXRpYyBpbnQgc3RyaW5nX3BhdGhfcHJlZml4KGNoYXIgKmJ1ZmYsIHNpemVfdCBibGVuLCBzdHJ1Y3QgcGF0aF9wcmVmaXggKnByZWZpeCkKKy17CistCWludCBsZW4gPSAwOworLQlpZiAocHJlZml4KSB7CistCQlpZiAocHJlZml4LT5wcmV2KSB7CistCQkJbGVuID0gc3RyaW5nX3BhdGhfcHJlZml4KGJ1ZmYsYmxlbixwcmVmaXgtPnByZXYpOworLQkJCWJ1ZmYgKz0gbGVuOworLQkJCWJsZW4gLT0gbGVuOworLQkJCWlmIChibGVuID4gMCkgeworLQkJCQkqYnVmZiA9ICcvJzsKKy0JCQkJbGVuKys7CistCQkJCWJ1ZmYrKzsKKy0JCQkJYmxlbi0tOworLQkJCX0KKy0JCX0KKy0JCXN0cm5jcHkoYnVmZixwcmVmaXgtPm5hbWUsYmxlbik7CistCQlyZXR1cm4gbGVuICsgc3RybGVuKHByZWZpeC0+bmFtZSk7CistCX0KKytzdGF0aWMgc3RydWN0IHRyZWVfZW50cnlfbGlzdCByb290X2VudHJ5OworIAorLQlyZXR1cm4gMDsKKytzdGF0aWMgdm9pZCBwcmVwYXJlX3Jvb3QodW5zaWduZWQgY2hhciAqc2hhMSkKKyt7CisrCXVuc2lnbmVkIGNoYXIgcnNoYVsyMF07CisrCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKysJdm9pZCAqYnVmOworKwlzdHJ1Y3QgdHJlZSAqcm9vdF90cmVlOworKworKwlidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShzaGExLCAidHJlZSIsICZzaXplLCByc2hhKTsKKysJZnJlZShidWYpOworKwlpZiAoIWJ1ZikKKysJCWRpZSgiQ291bGQgbm90IHJlYWQgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisrCisrCXJvb3RfdHJlZSA9IGxvb2t1cF90cmVlKHJzaGEpOworKwlpZiAoIXJvb3RfdHJlZSkKKysJCWRpZSgiQ291bGQgbm90IHJlYWQgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisrCisrCS8qIFByZXBhcmUgYSBmYWtlIGVudHJ5ICovCisrCXJvb3RfZW50cnkuZGlyZWN0b3J5ID0gMTsKKysJcm9vdF9lbnRyeS5leGVjdXRhYmxlID0gcm9vdF9lbnRyeS5zeW1saW5rID0gMDsKKysJcm9vdF9lbnRyeS5tb2RlID0gU19JRkRJUjsKKysJcm9vdF9lbnRyeS5uYW1lID0gIiI7CisrCXJvb3RfZW50cnkuaXRlbS50cmVlID0gcm9vdF90cmVlOworKwlyb290X2VudHJ5LnBhcmVudCA9IE5VTEw7CisgfQorIAorLXN0YXRpYyB2b2lkIHByaW50X3BhdGhfcHJlZml4KHN0cnVjdCBwYXRoX3ByZWZpeCAqcHJlZml4KQorK3N0YXRpYyBpbnQgcHJlcGFyZV9jaGlsZHJlbihzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplbGVtKQorIHsKKy0JaWYgKHByZWZpeCkgeworLQkJaWYgKHByZWZpeC0+cHJldikgeworLQkJCXByaW50X3BhdGhfcHJlZml4KHByZWZpeC0+cHJldik7CistCQkJcHV0Y2hhcignLycpOworLQkJfQorLQkJZnB1dHMocHJlZml4LT5uYW1lLCBzdGRvdXQpOworKwlpZiAoIWVsZW0tPmRpcmVjdG9yeSkKKysJCXJldHVybiAtMTsKKysJaWYgKCFlbGVtLT5pdGVtLnRyZWUtPm9iamVjdC5wYXJzZWQpIHsKKysJCXN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmU7CisrCQlpZiAocGFyc2VfdHJlZShlbGVtLT5pdGVtLnRyZWUpKQorKwkJCXJldHVybiAtMTsKKysJCS8qIFNldCB1cCB0aGUgcGFyZW50IGxpbmsgKi8KKysJCWZvciAoZSA9IGVsZW0tPml0ZW0udHJlZS0+ZW50cmllczsgZTsgZSA9IGUtPm5leHQpCisrCQkJZS0+cGFyZW50ID0gZWxlbTsKKyAJfQorKwlyZXR1cm4gMDsKKyB9CisgCistLyoKKy0gKiByZXR1cm46CistICogCS0xIGlmIHByZWZpeCBpcyAqbm90KiBhIHN1YnNldCBvZiBwYXRoCistICogCSAwIGlmIHByZWZpeCA9PSBwYXRoCistICogCSAxIGlmIHByZWZpeCBpcyBhIHN1YnNldCBvZiBwYXRoCistICovCistc3RhdGljIGludCBwYXRoY21wKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBwYXRoX3ByZWZpeCAqcHJlZml4KQorLXsKKy0JY2hhciBidWZmW1BBVEhfTUFYXTsKKy0JaW50IGxlbixzbGVuOworK3N0YXRpYyBzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICpmaW5kX2VudHJ5XzAoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZWxlbSwKKysJCQkJCSAgICBjb25zdCBjaGFyICpwYXRoLAorKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdGhfZW5kKQorK3sKKysJY29uc3QgY2hhciAqZXA7CisrCWludCBsZW47CisrCisrCXdoaWxlIChwYXRoIDwgcGF0aF9lbmQpIHsKKysJCWlmIChwcmVwYXJlX2NoaWxkcmVuKGVsZW0pKQorKwkJCXJldHVybiBOVUxMOworIAorLQlpZiAocHJlZml4ID09IE5VTEwpCistCQlyZXR1cm4gMTsKKysJCS8qIEluIGVsZW0tPnRyZWUtPmVudHJpZXMsIGZpbmQgdGhlIG9uZSB0aGF0IGhhcyBuYW1lCisrCQkgKiB0aGF0IG1hdGNoZXMgd2hhdCBpcyBiZXR3ZWVuIHBhdGggYW5kIGVwLgorKwkJICovCisrCQllbGVtID0gZWxlbS0+aXRlbS50cmVlLT5lbnRyaWVzOworIAorLQlsZW4gPSBzdHJpbmdfcGF0aF9wcmVmaXgoYnVmZiwgc2l6ZW9mIGJ1ZmYsIHByZWZpeCk7CistCXNsZW4gPSBzdHJsZW4ocGF0aCk7CisrCQllcCA9IHN0cmNocihwYXRoLCAnLycpOworKwkJaWYgKCFlcCB8fCBwYXRoX2VuZCA8PSBlcCkKKysJCQllcCA9IHBhdGhfZW5kOworKwkJbGVuID0gZXAgLSBwYXRoOworKworKwkJd2hpbGUgKGVsZW0pIHsKKysJCQlpZiAoKHN0cmxlbihlbGVtLT5uYW1lKSA9PSBsZW4pICYmCisrCQkJICAgICFzdHJuY21wKGVsZW0tPm5hbWUsIHBhdGgsIGxlbikpCisrCQkJCWJyZWFrOworKwkJCWVsZW0gPSBlbGVtLT5uZXh0OworKwkJfQorKwkJaWYgKHBhdGhfZW5kIDw9IGVwIHx8ICFlbGVtKQorKwkJCXJldHVybiBlbGVtOworKwkJd2hpbGUgKCplcCA9PSAnLycgJiYgZXAgPCBwYXRoX2VuZCkKKysJCQllcCsrOworKwkJcGF0aCA9IGVwOworKwl9CisrCXJldHVybiBOVUxMOworK30KKyAKKy0JaWYgKHNsZW4gPCBsZW4pCistCQlyZXR1cm4gLTE7Cisrc3RhdGljIHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmZpbmRfZW50cnkoY29uc3QgY2hhciAqcGF0aCwKKysJCQkJCSAgY29uc3QgY2hhciAqcGF0aF9lbmQpCisreworKwkvKiBGaW5kIHRyZWUgZWxlbWVudCwgZGVzY2VuZGluZyBmcm9tIHJvb3QsIHRoYXQKKysJICogY29ycmVzcG9uZHMgdG8gdGhlIG5hbWVkIHBhdGgsIGxhemlseSBleHBhbmRpbmcKKysJICogdGhlIHRyZWUgaWYgcG9zc2libGUuCisrCSAqLworKwlpZiAocGF0aCA9PSBwYXRoX2VuZCkgeworKwkJLyogU3BlY2lhbC4gIFRoaXMgaXMgdGhlIHJvb3QgbGV2ZWwgKi8KKysJCXJldHVybiAmcm9vdF9lbnRyeTsKKysJfQorKwlyZXR1cm4gZmluZF9lbnRyeV8wKCZyb290X2VudHJ5LCBwYXRoLCBwYXRoX2VuZCk7CisrfQorIAorLQlpZiAoc3RybmNtcChwYXRoLGJ1ZmYsbGVuKSA9PSAwKSB7CistCQlpZiAoc2xlbiA9PSBsZW4pCistCQkJcmV0dXJuIDA7CistCQllbHNlCistCQkJcmV0dXJuIDE7Cisrc3RhdGljIHZvaWQgc2hvd19lbnRyeV9uYW1lKHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUpCisreworKwkvKiBUaGlzIGlzIHl1Y2t5LiAgVGhlIHJvb3QgbGV2ZWwgaXMgdGhlcmUgZm9yCisrCSAqIG91ciBjb252ZW5pZW5jZSBidXQgd2UgcmVhbGx5IHdhbnQgdG8gZG8gYQorKwkgKiBmb3Jlc3QuCisrCSAqLworKwlpZiAoZS0+cGFyZW50ICYmIGUtPnBhcmVudCAhPSAmcm9vdF9lbnRyeSkgeworKwkJc2hvd19lbnRyeV9uYW1lKGUtPnBhcmVudCk7CisrCQlwdXRjaGFyKCcvJyk7CisgCX0KKysJcHJpbnRmKCIlcyIsIGUtPm5hbWUpOworK30KKyAKKy0JcmV0dXJuIC0xOworLX0JCisrc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3R5cGUoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSkKKyt7CisrCXJldHVybiAoZS0+ZGlyZWN0b3J5ID8gInRyZWUiIDogImJsb2IiKTsKKyt9CisgCistLyoKKy0gKiBtYXRjaCBtYXkgYmUgTlVMTCwgb3IgYSAqc29ydGVkKiBsaXN0IG9mIHBhdGhzCistICovCistc3RhdGljIHZvaWQgbGlzdF9yZWN1cnNpdmUodm9pZCAqYnVmZmVyLAorLQkJCSAgIGNvbnN0IGNoYXIgKnR5cGUsCistCQkJICAgdW5zaWduZWQgbG9uZyBzaXplLAorLQkJCSAgIHN0cnVjdCBwYXRoX3ByZWZpeCAqcHJlZml4LAorLQkJCSAgIGNoYXIgKiptYXRjaCwgaW50IG1hdGNoZXMpCisteworLQlzdHJ1Y3QgcGF0aF9wcmVmaXggdGhpc19wcmVmaXg7CistCXRoaXNfcHJlZml4LnByZXYgPSBwcmVmaXg7CistCistCWlmIChzdHJjbXAodHlwZSwgInRyZWUiKSkKKy0JCWRpZSgiZXhwZWN0ZWQgYSAndHJlZScgbm9kZSIpOworLQorLQlpZiAobWF0Y2hlcykKKy0JCXJlY3Vyc2l2ZSA9IDE7CistCistCXdoaWxlIChzaXplKSB7CistCQlpbnQgbmFtZWxlbiA9IHN0cmxlbihidWZmZXIpKzE7CistCQl2b2lkICplbHRidWYgPSBOVUxMOworLQkJY2hhciBlbHR0eXBlWzIwXTsKKy0JCXVuc2lnbmVkIGxvbmcgZWx0c2l6ZTsKKy0JCXVuc2lnbmVkIGNoYXIgKnNoYTEgPSBidWZmZXIgKyBuYW1lbGVuOworLQkJY2hhciAqcGF0aCA9IHN0cmNocihidWZmZXIsICcgJykgKyAxOworLQkJdW5zaWduZWQgaW50IG1vZGU7CistCQljb25zdCBjaGFyICptYXRjaGVkID0gTlVMTDsKKy0JCWludCBtdHlwZSA9IC0xOworLQkJaW50IG1pbmRleDsKKy0KKy0JCWlmIChzaXplIDwgbmFtZWxlbiArIDIwIHx8IHNzY2FuZihidWZmZXIsICIlbyIsICZtb2RlKSAhPSAxKQorLQkJCWRpZSgiY29ycnVwdCAndHJlZScgZmlsZSIpOworLQkJYnVmZmVyID0gc2hhMSArIDIwOworLQkJc2l6ZSAtPSBuYW1lbGVuICsgMjA7CistCistCQl0aGlzX3ByZWZpeC5uYW1lID0gcGF0aDsKKy0JCWZvciAoIG1pbmRleCA9IDA7IG1pbmRleCA8IG1hdGNoZXM7IG1pbmRleCsrKSB7CistCQkJbXR5cGUgPSBwYXRoY21wKG1hdGNoW21pbmRleF0sJnRoaXNfcHJlZml4KTsKKy0JCQlpZiAobXR5cGUgPj0gMCkgeworLQkJCQltYXRjaGVkID0gbWF0Y2hbbWluZGV4XTsKKy0JCQkJYnJlYWs7CistCQkJfQorLQkJfQorK3N0YXRpYyBjb25zdCBjaGFyICplbnRyeV9oZXgoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSkKKyt7CisrCXJldHVybiBzaGExX3RvX2hleChlLT5kaXJlY3RvcnkKKysJCQkgICA/IGUtPml0ZW0udHJlZS0+b2JqZWN0LnNoYTEKKysJCQkgICA6IGUtPml0ZW0uYmxvYi0+b2JqZWN0LnNoYTEpOworK30KKyAKKy0JCS8qCistCQkgKiBJZiB3ZSdyZSBub3QgbWF0Y2hpbmcsIG9yIGlmIHRoaXMgaXMgYW4gZXhhY3QgbWF0Y2gsCistCQkgKiBwcmludCBvdXQgdGhlIGluZm8KKy0JCSAqLworLQkJaWYgKCFtYXRjaGVzIHx8IChtYXRjaGVkICE9IE5VTEwgJiYgbXR5cGUgPT0gMCkpIHsKKy0JCQlwcmludGYoIiUwNm8gJXMgJXNcdCIsIG1vZGUsCistCQkJICAgICAgIFNfSVNESVIobW9kZSkgPyAidHJlZSIgOiAiYmxvYiIsCistCQkJICAgICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKy0JCQlwcmludF9wYXRoX3ByZWZpeCgmdGhpc19wcmVmaXgpOworLQkJCXB1dGNoYXIobGluZV90ZXJtaW5hdGlvbik7CistCQl9CisrLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgbXV0dWFsbHkgcmVjdXJzaXZlIHJvdXRpbmVzICovCisrc3RhdGljIGludCBzaG93X2VudHJ5KHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKiwgaW50KTsKKyAKKy0JCWlmICghIHJlY3Vyc2l2ZSB8fCAhIFNfSVNESVIobW9kZSkpCistCQkJY29udGludWU7Cisrc3RhdGljIGludCBzaG93X2NoaWxkcmVuKHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUsIGludCBsZXZlbCkKKyt7CisrCWlmIChwcmVwYXJlX2NoaWxkcmVuKGUpKQorKwkJZGllKCJpbnRlcm5hbCBlcnJvcjogbHMtdHJlZSBzaG93X2NoaWxkcmVuIGNhbGxlZCB3aXRoIG5vbiB0cmVlIik7CisrCWUgPSBlLT5pdGVtLnRyZWUtPmVudHJpZXM7CisrCXdoaWxlIChlKSB7CisrCQlzaG93X2VudHJ5KGUsIGxldmVsKTsKKysJCWUgPSBlLT5uZXh0OworKwl9CisrCXJldHVybiAwOworK30KKyAKKy0JCWlmIChtYXRjaGVzICYmICEgbWF0Y2hlZCkKKy0JCQljb250aW51ZTsKKytzdGF0aWMgaW50IHNob3dfZW50cnkoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSwgaW50IGxldmVsKQorK3sKKysJaW50IGVyciA9IDA7IAorIAorLQkJaWYgKCEgKGVsdGJ1ZiA9IHJlYWRfc2hhMV9maWxlKHNoYTEsIGVsdHR5cGUsICZlbHRzaXplKSkgKSB7CistCQkJZXJyb3IoImNhbm5vdCByZWFkICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworLQkJCWNvbnRpbnVlOworLQkJfQorKwlpZiAoZSAhPSAmcm9vdF9lbnRyeSkgeworKwkJcHJpbnRmKCIlMDZvICVzICVzCSIsIGUtPm1vZGUsIGVudHJ5X3R5cGUoZSksCisrCQkgICAgICAgZW50cnlfaGV4KGUpKTsKKysJCXNob3dfZW50cnlfbmFtZShlKTsKKysJCXB1dGNoYXIobGluZV90ZXJtaW5hdGlvbik7CisrCX0KKyAKKy0JCS8qIElmIHRoaXMgaXMgYW4gZXhhY3QgZGlyZWN0b3J5IG1hdGNoLCB3ZSBtYXkgaGF2ZQorLQkJICogZGlyZWN0b3J5IGZpbGVzIGZvbGxvd2luZyB0aGlzIHBhdGguIE1hdGNoIG9uIHRoZW0uCistCQkgKiBPdGhlcndpc2UsIHdlJ3JlIGF0IGEgcGF0Y2ggc3ViY29tcG9uZW50LCBhbmQgd2UgbmVlZAorLQkJICogdG8gdHJ5IHRvIG1hdGNoIGFnYWluLgorKwlpZiAoZS0+ZGlyZWN0b3J5KSB7CisrCQkvKiBJZiB0aGlzIGlzIGEgZGlyZWN0b3J5LCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisrCQkgKiAoMSkgVGhpcyBpcyB0aGUgdG9wLWxldmVsIHJlcXVlc3QgKGV4cGxpY2l0IHBhdGggZnJvbSB0aGUKKysJCSAqICAgICBjb21tYW5kIGxpbmUsIG9yICJyb290IiBpZiB0aGVyZSBpcyBubyBjb21tYW5kIGxpbmUpLgorKwkJICogIGEuIFdpdGhvdXQgYW55IGZsYWcuICBXZSBzaG93IGRpcmVjdCBjaGlsZHJlbi4gIFdlIGRvIG5vdCAKKysJCSAqICAgICByZWN1cnNlIGludG8gdGhlbS4KKysJCSAqICBiLiBXaXRoIC1yLiAgV2UgZG8gcmVjdXJzZSBpbnRvIGNoaWxkcmVuLgorKwkJICogIGMuIFdpdGggLWQuICBXZSBkbyBub3QgcmVjdXJzZSBpbnRvIGNoaWxkcmVuLgorKwkJICogKDIpIFdlIGNhbWUgaGVyZSBiZWNhdXNlIG91ciBjYWxsZXIgaXMgZWl0aGVyICgxLWEpIG9yCisrCQkgKiAgICAgKDEtYikuCisrCQkgKiAgYS4gV2l0aG91dCBhbnkgZmxhZy4gIFdlIGRvIG5vdCBzaG93IG91ciBjaGlsZHJlbiAod2hpY2gKKysJCSAqICAgICBhcmUgZ3JhbmRjaGlsZHJlbiBmb3IgdGhlIG9yaWdpbmFsIHJlcXVlc3QpLgorKwkJICogIGIuIFdpdGggLXIuICBXZSBjb250aW51ZSB0byByZWN1cnNlIGludG8gb3VyIGNoaWxkcmVuLgorKwkJICogIGMuIFdpdGggLWQuICBXZSBzaG91bGQgbm90IGhhdmUgY29tZSBoZXJlIHRvIGJlZ2luIHdpdGguCisgCQkgKi8KKy0JCWlmIChtdHlwZSA9PSAwKQorLQkJCW1pbmRleCsrOworLQorLQkJbGlzdF9yZWN1cnNpdmUoZWx0YnVmLCBlbHR0eXBlLCBlbHRzaXplLCAmdGhpc19wcmVmaXgsICZtYXRjaFttaW5kZXhdLCBtYXRjaGVzLW1pbmRleCk7CistCQlmcmVlKGVsdGJ1Zik7CisrCQlpZiAobGV2ZWwgPT0gMCAmJiAhKGxzX29wdGlvbnMgJiBMU19UUkVFX09OTFkpKQorKwkJCS8qIGNhc2UgKDEpLWEgYW5kICgxKS1iICovCisrCQkJZXJyID0gZXJyIHwgc2hvd19jaGlsZHJlbihlLCBsZXZlbCsxKTsKKysJCWVsc2UgaWYgKGxldmVsICYmIGxzX29wdGlvbnMgJiBMU19SRUNVUlNJVkUpCisrCQkJLyogY2FzZSAoMiktYiAqLworKwkJCWVyciA9IGVyciB8IHNob3dfY2hpbGRyZW4oZSwgbGV2ZWwrMSk7CisgCX0KKysJcmV0dXJuIGVycjsKKyB9CisgCistc3RhdGljIGludCBxY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCisrc3RhdGljIGludCBsaXN0X29uZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwYXRoX2VuZCkKKyB7CistCXJldHVybiBzdHJjbXAoKihjaGFyICoqKWEsICooY2hhciAqKiliKTsKKysJaW50IGVyciA9IDA7CisrCXN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUgPSBmaW5kX2VudHJ5KHBhdGgsIHBhdGhfZW5kKTsKKysJaWYgKCFlKSB7CisrCQkvKiB0cmFkaXRpb25hbGx5IGxzLXRyZWUgZG9lcyBub3QgY29tcGxhaW4gYWJvdXQKKysJCSAqIG1pc3NpbmcgcGF0aC4gIFdlIG1heSBjaGFuZ2UgdGhpcyBsYXRlciB0byBtYXRjaAorKwkJICogd2hhdCAiL2Jpbi9scyAtYSIgZG9lcywgd2hpY2ggaXMgdG8gY29tcGxhaW4uCisrCQkgKi8KKysJCXJldHVybiBlcnI7CisrCX0KKysJZXJyID0gZXJyIHwgc2hvd19lbnRyeShlLCAwKTsKKysJcmV0dXJuIGVycjsKKyB9CisgCistc3RhdGljIGludCBsaXN0KHVuc2lnbmVkIGNoYXIgKnNoYTEsY2hhciAqKnBhdGgpCisrc3RhdGljIGludCBsaXN0KGNoYXIgKipwYXRoKQorIHsKKy0Jdm9pZCAqYnVmZmVyOworLQl1bnNpZ25lZCBsb25nIHNpemU7CistCWludCBucGF0aHM7CistCistCWZvciAobnBhdGhzID0gMDsgcGF0aFtucGF0aHNdICE9IE5VTEw7IG5wYXRocysrKQorLQkJOworLQorLQlxc29ydChwYXRoLG5wYXRocyxzaXplb2YoY2hhciAqKSxxY21wKTsKKy0KKy0JYnVmZmVyID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uoc2hhMSwgInRyZWUiLCAmc2l6ZSwgTlVMTCk7CistCWlmICghYnVmZmVyKQorLQkJZGllKCJ1bmFibGUgdG8gcmVhZCBzaGExIGZpbGUiKTsKKy0JbGlzdF9yZWN1cnNpdmUoYnVmZmVyLCAidHJlZSIsIHNpemUsIE5VTEwsIHBhdGgsIG5wYXRocyk7CistCWZyZWUoYnVmZmVyKTsKKy0JcmV0dXJuIDA7CisrCWludCBpOworKwlpbnQgZXJyID0gMDsKKysJZm9yIChpID0gMDsgcGF0aFtpXTsgaSsrKSB7CisrCQlpbnQgbGVuID0gc3RybGVuKHBhdGhbaV0pOworKwkJd2hpbGUgKDAgPD0gbGVuICYmIHBhdGhbaV1bbGVuXSA9PSAnLycpCisrCQkJbGVuLS07CisrCQllcnIgPSBlcnIgfCBsaXN0X29uZShwYXRoW2ldLCBwYXRoW2ldICsgbGVuKTsKKysJfQorKwlyZXR1cm4gZXJyOworIH0KKyAKKy1zdGF0aWMgY29uc3QgY2hhciAqbHNfdHJlZV91c2FnZSA9ICJnaXQtbHMtdHJlZSBbLXJdIFstel0gPGtleT4gW3BhdGhzLi4uXSI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKmxzX3RyZWVfdXNhZ2UgPQorKwkiZ2l0LWxzLXRyZWUgWy1kXSBbLXJdIFstel0gPHRyZWUtaXNoPiBbcGF0aC4uLl0iOworIAorIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CisrCXN0YXRpYyBjaGFyICpwYXRoMFtdID0geyAiIiwgTlVMTCB9OworKwljaGFyICoqcGF0aDsKKyAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKyAKKyAJd2hpbGUgKDEgPCBhcmdjICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKSB7CitAQCAtMTk0LDcgKzIyMywxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJbGluZV90ZXJtaW5hdGlvbiA9IDA7CisgCQkJYnJlYWs7CisgCQljYXNlICdyJzoKKy0JCQlyZWN1cnNpdmUgPSAxOworKwkJCWxzX29wdGlvbnMgfD0gTFNfUkVDVVJTSVZFOworKwkJCWJyZWFrOworKwkJY2FzZSAnZCc6CisrCQkJbHNfb3B0aW9ucyB8PSBMU19UUkVFX09OTFk7CisgCQkJYnJlYWs7CisgCQlkZWZhdWx0OgorIAkJCXVzYWdlKGxzX3RyZWVfdXNhZ2UpOworQEAgLTIwNiw3ICsyMzgsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJdXNhZ2UobHNfdHJlZV91c2FnZSk7CisgCWlmIChnZXRfc2hhMShhcmd2WzFdLCBzaGExKSA8IDApCisgCQl1c2FnZShsc190cmVlX3VzYWdlKTsKKy0JaWYgKGxpc3Qoc2hhMSwgJmFyZ3ZbMl0pIDwgMCkKKysKKysJcGF0aCA9IChhcmdjID09IDIpID8gcGF0aDAgOiAoYXJndiArIDIpOworKwlwcmVwYXJlX3Jvb3Qoc2hhMSk7CisrCWlmIChsaXN0KHBhdGgpIDwgMCkKKyAJCWRpZSgibGlzdCBmYWlsZWQiKTsKKyAJcmV0dXJuIDA7CisgfQorZGlmZiBhL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaCBiL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaAorLS0tIGEvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCisrKysgYi90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2gKK0BAIC03NCw4ICs3NCw4IEBAIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAnbHMtdHJlZSBmaWx0ZXJlZCcgXAorICAgICAnZ2l0LWxzLXRyZWUgJHRyZWUgcGF0aDEgcGF0aDAgPmN1cnJlbnQgJiYKKyAgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCistMTAwNjQ0IGJsb2IgWAlwYXRoMAorIDEyMDAwMCBibG9iIFgJcGF0aDEKKysxMDA2NDQgYmxvYiBYCXBhdGgwCisgRU9GCisgICAgICB0ZXN0X291dHB1dCcKKyAKK0BAIC04NSw3ICs4NSw2IEBAIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKyAwNDAwMDAgdHJlZSBYCXBhdGgyCisgMDQwMDAwIHRyZWUgWAlwYXRoMi9iYXoKKy0xMDA2NDQgYmxvYiBYCXBhdGgyL2Jhei9iCisgMTIwMDAwIGJsb2IgWAlwYXRoMi9iYXpibworIDEwMDY0NCBibG9iIFgJcGF0aDIvZm9vCisgRU9GCitkaWZmIGEvdHJlZS5jIGIvdHJlZS5jCistLS0gYS90cmVlLmMKKysrKyBiL3RyZWUuYworQEAgLTEzMyw3ICsxMzMsNyBAQCBpbnQgcGFyc2VfdHJlZV9idWZmZXIoc3RydWN0IHRyZWUgKml0ZW0sCisgCQl9CisgCQlpZiAob2JqKQorIAkJCWFkZF9yZWYoJml0ZW0tPm9iamVjdCwgb2JqKTsKKy0KKysJCWVudHJ5LT5wYXJlbnQgPSBOVUxMOyAvKiBuZWVkcyB0byBiZSBmaWxsZWQgYnkgdGhlIHVzZXIgKi8KKyAJCSpsaXN0X3AgPSBlbnRyeTsKKyAJCWxpc3RfcCA9ICZlbnRyeS0+bmV4dDsKKyAJfQorZGlmZiBhL3RyZWUuaCBiL3RyZWUuaAorLS0tIGEvdHJlZS5oCisrKysgYi90cmVlLmgKK0BAIC0xNiw2ICsxNiw3IEBAIHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgeworIAkJc3RydWN0IHRyZWUgKnRyZWU7CisgCQlzdHJ1Y3QgYmxvYiAqYmxvYjsKKyAJfSBpdGVtOworKwlzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICpwYXJlbnQ7CisgfTsKKyAKKyBzdHJ1Y3QgdHJlZSB7CmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktOC5leHBlY3QgYi90L3Q0MTAwL3QtYXBwbHktOC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhNTVjMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS04LmV4cGVjdApAQCAtMCwwICsxLDIgQEAKKyB0L3Q0MTAwLWFwcGx5LXN0YXQuc2ggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktOC5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS04LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTEzZTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktOC5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC0tZ2l0IGEvdC90NDEwMC1hcHBseS1zdGF0LnNoIGIvdC90NDEwMC1hcHBseS1zdGF0LnNoCitpbmRleCBiZTgzN2JiLi4wNzk4YzY0IDEwMDc1NQorLS0tIGEvdC90NDEwMC1hcHBseS1zdGF0LnNoCisrKysgYi90L3Q0MTAwLWFwcGx5LXN0YXQuc2gKK0BAIC0zNSw0ICszNSw0IEBAIG5vbiBnaXQgKDIpCisgbm9uIGdpdCAoMykKKyBFT0YKKyAKKy10ZXN0X2RvbmUKKyt0ZXN0X2RvbmUKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTkuZXhwZWN0IGIvdC90NDEwMC90LWFwcGx5LTkuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YTU1YzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktOS5leHBlY3QKQEAgLTAsMCArMSwyIEBACisgdC90NDEwMC1hcHBseS1zdGF0LnNoIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTkucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzVkNTdkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTkucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorZGlmZiAtLWdpdCBhL3QvdDQxMDAtYXBwbHktc3RhdC5zaCBiL3QvdDQxMDAtYXBwbHktc3RhdC5zaAoraW5kZXggMDc5OGM2NC4uYmU4MzdiYiAxMDA3NTUKKy0tLSBhL3QvdDQxMDAtYXBwbHktc3RhdC5zaAorKysrIGIvdC90NDEwMC1hcHBseS1zdGF0LnNoCitAQCAtMzUsNCArMzUsNCBAQCBub24gZ2l0ICgyKQorIG5vbiBnaXQgKDMpCisgRU9GCisgCistdGVzdF9kb25lCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDEtYXBwbHktbm9ubC5zaCBiL3QvdDQxMDEtYXBwbHktbm9ubC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMzQ0M2QwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS1hcHBseS1ub25sLnNoCkBAIC0wLDAgKzEsMzEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHNob3VsZCBoYW5kbGUgZmlsZXMgd2l0aCBpbmNvbXBsZXRlIGxpbmVzLgorCisnCisuIC4vdGVzdC1saWIuc2gKKworIyBzZXR1cAorCisoZWNobyBhOyBlY2hvIGIpID5mcm90ei4wCisoZWNobyBhOyBlY2hvIGI7IGVjaG8gYykgPmZyb3R6LjEKKyhlY2hvIGE7IGVjaG8gYiB8IHRyIC1kICdcMDEyJykgPmZyb3R6LjIKKyhlY2hvIGE7IGVjaG8gYzsgZWNobyBiIHwgdHIgLWQgJ1wwMTInKSA+ZnJvdHouMworCitmb3IgaSBpbiAwIDEgMiAzCitkbworICBmb3IgaiBpbiAwIDEgMiAzCisgIGRvCisgICAgdGVzdCAkaSAtZXEgJGogJiYgY29udGludWUKKyAgICBjYXQgZnJvdHouJGkgPmZyb3R6CisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiYXBwbHkgZGlmZiBiZXR3ZWVuICRpIGFuZCAkaiIgJworCWdpdCBhcHBseSA8IiRURVNUX0RJUkVDVE9SWSIvdDQxMDEvZGlmZi4kaS0kaiAmJgorCXRlc3RfY21wIGZyb3R6LiRqIGZyb3R6CisgICAgJworICBkb25lCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjAtMSBiL3QvdDQxMDEvZGlmZi4wLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAxMGE4OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4wLTEKQEAgLTAsMCArMSw2IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDIgKzEsMyBAQAorIGEKKyBiCisrYwpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjAtMiBiL3QvdDQxMDEvZGlmZi4wLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0NjBhMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4wLTIKQEAgLTAsMCArMSw3IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDIgKzEsMiBAQAorIGEKKy1iCisrYgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90L3Q0MTAxL2RpZmYuMC0zIGIvdC90NDEwMS9kaWZmLjAtMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjgxYzQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS9kaWZmLjAtMwpAQCAtMCwwICsxLDggQEAKKy0tLSBhL2Zyb3R6CisrKysgYi9mcm90egorQEAgLTEsMiArMSwzIEBACisgYQorLWIKKytjCisrYgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90L3Q0MTAxL2RpZmYuMS0wIGIvdC90NDEwMS9kaWZmLjEtMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGEyZTkyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS9kaWZmLjEtMApAQCAtMCwwICsxLDYgQEAKKy0tLSBhL2Zyb3R6CisrKysgYi9mcm90egorQEAgLTEsMyArMSwyIEBACisgYQorIGIKKy1jCmRpZmYgLS1naXQgYS90L3Q0MTAxL2RpZmYuMS0yIGIvdC90NDEwMS9kaWZmLjEtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTQ0MGE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS9kaWZmLjEtMgpAQCAtMCwwICsxLDggQEAKKy0tLSBhL2Zyb3R6CisrKysgYi9mcm90egorQEAgLTEsMyArMSwyIEBACisgYQorLWIKKy1jCisrYgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90L3Q0MTAxL2RpZmYuMS0zIGIvdC90NDEwMS9kaWZmLjEtMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWFmZjk3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS9kaWZmLjEtMwpAQCAtMCwwICsxLDggQEAKKy0tLSBhL2Zyb3R6CisrKysgYi9mcm90egorQEAgLTEsMyArMSwzIEBACisgYQorLWIKKyBjCisrYgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90L3Q0MTAxL2RpZmYuMi0wIGIvdC90NDEwMS9kaWZmLjItMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmU3MWVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS9kaWZmLjItMApAQCAtMCwwICsxLDcgQEAKKy0tLSBhL2Zyb3R6CisrKysgYi9mcm90egorQEAgLTEsMiArMSwyIEBACisgYQorLWIKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK2IKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4yLTEgYi90L3Q0MTAxL2RpZmYuMi0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NmQ5ZmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMi0xCkBAIC0wLDAgKzEsOCBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwyICsxLDMgQEAKKyBhCistYgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrYgorK2MKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4yLTMgYi90L3Q0MTAxL2RpZmYuMi0zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzNjODMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMi0zCkBAIC0wLDAgKzEsNyBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwyICsxLDMgQEAKKyBhCisrYworIGIKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjMtMCBiL3QvdDQxMDEvZGlmZi4zLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiMWE0MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4zLTAKQEAgLTAsMCArMSw4IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDMgKzEsMiBAQAorIGEKKy1jCistYgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrYgpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjMtMSBiL3QvdDQxMDEvZGlmZi4zLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc5OWM2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4zLTEKQEAgLTAsMCArMSw4IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDMgKzEsMyBAQAorIGEKKytiCisgYworLWIKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjMtMiBiL3QvdDQxMDEvZGlmZi4zLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhkMWJhNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4zLTIKQEAgLTAsMCArMSw3IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDMgKzEsMiBAQAorIGEKKy1jCisgYgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90L3Q0MTAyLWFwcGx5LXJlbmFtZS5zaCBiL3QvdDQxMDItYXBwbHktcmVuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZhZTMwNTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAyLWFwcGx5LXJlbmFtZS5zaApAQCAtMCwwICsxLDU3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBoYW5kbGluZyBjb3B5L3JlbmFtZSBwYXRjaC4KKworJworLiAuL3Rlc3QtbGliLnNoCisKKyMgc2V0dXAKKworY2F0ID50ZXN0LXBhdGNoIDw8XEVPRgorZGlmZiAtLWdpdCBhL2ZvbyBiL2Jhcgorc2ltaWxhcml0eSBpbmRleCA0NyUKK3JlbmFtZSBmcm9tIGZvbworcmVuYW1lIHRvIGJhcgorLS0tIGEvZm9vCisrKysgYi9iYXIKK0BAIC0xICsxIEBACistVGhpcyBpcyBmb28KKytUaGlzIGlzIGJhcgorRU9GCisKK2VjaG8gJ1RoaXMgaXMgZm9vJyA+Zm9vCitjaG1vZCAreCBmb28KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgZm9vJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGFwcGx5IFwKKyAgICAnZ2l0IGFwcGx5IC0taW5kZXggLS1zdGF0IC0tc3VtbWFyeSAtLWFwcGx5IHRlc3QtcGF0Y2gnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgdmFsaWRhdGUgXAorCSAgICAndGVzdCAtZiBiYXIgJiYgbHMgLWwgYmFyIHwgZ3JlcCAiXi0uLnguLi4uLi4iJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSByZXZlcnNlJyBcCisgICAgJ2dpdCBhcHBseSAtUiAtLWluZGV4IC0tc3RhdCAtLXN1bW1hcnkgLS1hcHBseSB0ZXN0LXBhdGNoICYmCisgICAgIHRlc3QgIiQoY2F0IGZvbykiID0gIlRoaXMgaXMgZm9vIicKKworY2F0ID50ZXN0LXBhdGNoIDw8XEVPRgorZGlmZiAtLWdpdCBhL2ZvbyBiL2Jhcgorc2ltaWxhcml0eSBpbmRleCA0NyUKK2NvcHkgZnJvbSBmb28KK2NvcHkgdG8gYmFyCistLS0gYS9mb28KKysrKyBiL2JhcgorQEAgLTEgKzEgQEAKKy1UaGlzIGlzIGZvbworK1RoaXMgaXMgYmFyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgY29weScgXAorICAgICdnaXQgYXBwbHkgLS1pbmRleCAtLXN0YXQgLS1zdW1tYXJ5IC0tYXBwbHkgdGVzdC1wYXRjaCAmJgorICAgICB0ZXN0ICIkKGNhdCBiYXIpIiA9ICJUaGlzIGlzIGJhciIgJiYgdGVzdCAiJChjYXQgZm9vKSIgPSAiVGhpcyBpcyBmb28iJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDMtYXBwbHktYmluYXJ5LnNoIGIvdC90NDEwMy1hcHBseS1iaW5hcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWI0MjBlMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDMtYXBwbHktYmluYXJ5LnNoCkBAIC0wLDAgKzEsMTU4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBoYW5kbGluZyBiaW5hcnkgcGF0Y2hlcworCisnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgPmZpbGUxIDw8LVxFT0YgJiYKKwlBIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4KKwlBIHRpbnkgbGl0dGxlIHBlbmd1aW4gcnVucyBhcm91bmQgaW4gY2lyY2xlcy4KKwlUaGVyZSBpcyBhIGZsYWcgd2l0aCBMaW51eCB3cml0dGVuIG9uIGl0LgorCUEgc2xvdyBibGFjay1hbmQtd2hpdGUgcGFuZGEganVzdCBzaXRzIHRoZXJlLAorCW11bmNoaW5nIG9uIGhpcyBiYW1ib28uCisJRU9GCisJY2F0IGZpbGUxID5maWxlMiAmJgorCWNhdCBmaWxlMSA+ZmlsZTQgJiYKKworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgZmlsZTEgZmlsZTIgZmlsZTQgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIFZlcnNpb24iIDI+L2Rldi9udWxsICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYmluYXJ5ICYmCisJcGVybCAtcGUgInkveC9cMDAwLyIgPGZpbGUxID5maWxlMyAmJgorCWNhdCBmaWxlMyA+ZmlsZTQgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJcGVybCAtcGUgInkvXDAwMC92LyIgPGZpbGUzID5maWxlMSAmJgorCXJtIC1mIGZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBmaWxlMSBmaWxlMiBmaWxlMyBmaWxlNCAmJgorCWdpdCBjb21taXQgLW0gIlNlY29uZCBWZXJzaW9uIiAmJgorCisJZ2l0IGRpZmYtdHJlZSAtcCBtYXN0ZXIgYmluYXJ5ID5CLmRpZmYgJiYKKwlnaXQgZGlmZi10cmVlIC1wIC1DIG1hc3RlciBiaW5hcnkgPkMuZGlmZiAmJgorCisJZ2l0IGRpZmYtdHJlZSAtcCAtLWJpbmFyeSBtYXN0ZXIgYmluYXJ5ID5CRi5kaWZmICYmCisJZ2l0IGRpZmYtdHJlZSAtcCAtLWJpbmFyeSAtQyBtYXN0ZXIgYmluYXJ5ID5DRi5kaWZmICYmCisKKwlnaXQgZGlmZi10cmVlIC1wIC0tZnVsbC1pbmRleCBtYXN0ZXIgYmluYXJ5ID5CLWluZGV4LmRpZmYgJiYKKwlnaXQgZGlmZi10cmVlIC1wIC1DIC0tZnVsbC1pbmRleCBtYXN0ZXIgYmluYXJ5ID5DLWluZGV4LmRpZmYgJiYKKworCWdpdCBkaWZmLXRyZWUgLXAgLS1iaW5hcnkgLS1uby1wcmVmaXggbWFzdGVyIGJpbmFyeSAtLSBmaWxlMyA+QjAuZGlmZiAmJgorCisJZ2l0IGluaXQgb3RoZXItcmVwbyAmJgorCSgKKwkJY2Qgb3RoZXItcmVwbyAmJgorCQlnaXQgZmV0Y2ggLi4gbWFzdGVyICYmCisJCWdpdCByZXNldCAtLWhhcmQgRkVUQ0hfSEVBRAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdCBiaW5hcnkgZGlmZiAtLSBzaG91bGQgbm90IGZhaWwuJyBcCisJJ2dpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgZ2l0IGFwcGx5IC0tc3RhdCAtLXN1bW1hcnkgQi5kaWZmJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0IGJpbmFyeSAtcDAgZGlmZiAtLSBzaG91bGQgbm90IGZhaWwuJyAnCisJIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgZ2l0IGFwcGx5IC0tc3RhdCAtcDAgQjAuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0IGJpbmFyeSBkaWZmIChjb3B5KSAtLSBzaG91bGQgbm90IGZhaWwuJyBcCisJJ2dpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgZ2l0IGFwcGx5IC0tc3RhdCAtLXN1bW1hcnkgQy5kaWZmJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBiaW5hcnkgZGlmZiAtLSBzaG91bGQgZmFpbC4nIFwKKwknZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1jaGVjayBCLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGJpbmFyeSBkaWZmIChjb3B5KSAtLSBzaG91bGQgZmFpbC4nIFwKKwknZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1jaGVjayBDLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjaGVjayBpbmNvbXBsZXRlIGJpbmFyeSBkaWZmIHdpdGggcmVwbGFjZW1lbnQgLS0gc2hvdWxkIGZhaWwuJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNoZWNrIC0tYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50IEIuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2sgaW5jb21wbGV0ZSBiaW5hcnkgZGlmZiB3aXRoIHJlcGxhY2VtZW50IChjb3B5KSAtLSBzaG91bGQgZmFpbC4nICcKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1jaGVjayAtLWFsbG93LWJpbmFyeS1yZXBsYWNlbWVudCBDLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgYmluYXJ5IGRpZmYgd2l0aCByZXBsYWNlbWVudC4nIFwKKwknZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgYXBwbHkgLS1jaGVjayAtLWFsbG93LWJpbmFyeS1yZXBsYWNlbWVudCBCRi5kaWZmJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBiaW5hcnkgZGlmZiB3aXRoIHJlcGxhY2VtZW50IChjb3B5KS4nIFwKKwknZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgYXBwbHkgLS1jaGVjayAtLWFsbG93LWJpbmFyeS1yZXBsYWNlbWVudCBDRi5kaWZmJworCisjIE5vdyB3ZSBzdGFydCBhcHBseWluZyB0aGVtLgorCitkb19yZXNldCAoKSB7CisJcm0gLWYgZmlsZT8gJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlcgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgZGlmZiAtLSBzaG91bGQgZmFpbC4nIFwKKwknZG9fcmVzZXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IEIuZGlmZicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IGRpZmYgLS0gc2hvdWxkIGZhaWwuJyBcCisJJ2RvX3Jlc2V0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IEIuZGlmZicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IGRpZmYgKGNvcHkpIC0tIHNob3VsZCBmYWlsLicgXAorCSdkb19yZXNldCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgQy5kaWZmJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgZGlmZiAoY29weSkgLS0gc2hvdWxkIGZhaWwuJyBcCisJJ2RvX3Jlc2V0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IEMuZGlmZicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IGRpZmYgd2l0aCBmdWxsLWluZGV4JyAnCisJZG9fcmVzZXQgJiYKKwlnaXQgYXBwbHkgQi1pbmRleC5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGJpbmFyeSBkaWZmIHdpdGggZnVsbC1pbmRleCAoY29weSknICcKKwlkb19yZXNldCAmJgorCWdpdCBhcHBseSBDLWluZGV4LmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZnVsbC1pbmRleCBiaW5hcnkgZGlmZiBpbiBuZXcgcmVwbycgJworCShjZCBvdGhlci1yZXBvICYmCisJIGRvX3Jlc2V0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAuLi9CLWluZGV4LmRpZmYpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGJpbmFyeSBkaWZmIHdpdGhvdXQgcmVwbGFjZW1lbnQuJyBcCisJJ2RvX3Jlc2V0ICYmCisJIGdpdCBhcHBseSBCRi5kaWZmJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgZGlmZiB3aXRob3V0IHJlcGxhY2VtZW50IChjb3B5KS4nIFwKKwknZG9fcmVzZXQgJiYKKwkgZ2l0IGFwcGx5IENGLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGJpbmFyeSBkaWZmLicgXAorCSdkb19yZXNldCAmJgorCSBnaXQgYXBwbHkgLS1hbGxvdy1iaW5hcnktcmVwbGFjZW1lbnQgLS1pbmRleCBCRi5kaWZmICYmCisJIHRlc3QgLXogIiQoZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyBiaW5hcnkpIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IGRpZmYgKGNvcHkpLicgXAorCSdkb19yZXNldCAmJgorCSBnaXQgYXBwbHkgLS1hbGxvdy1iaW5hcnktcmVwbGFjZW1lbnQgLS1pbmRleCBDRi5kaWZmICYmCisJIHRlc3QgLXogIiQoZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyBiaW5hcnkpIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IC1wMCBkaWZmJyAnCisJZG9fcmVzZXQgJiYKKwlnaXQgYXBwbHkgLXAwIC0taW5kZXggQjAuZGlmZiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyBiaW5hcnkgLS0gZmlsZTMpIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDQtYXBwbHktYm91bmRhcnkuc2ggYi90L3Q0MTA0LWFwcGx5LWJvdW5kYXJ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMyZTNiMGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA0LWFwcGx5LWJvdW5kYXJ5LnNoCkBAIC0wLDAgKzEsMTQwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBib3VuZGFyeSB0ZXN0cworCisnCisuIC4vdGVzdC1saWIuc2gKKworTD0iYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGkgaW4gYiAnIiRMIicgeQorCWRvCisJCWVjaG8gJGkKKwlkb25lID52aWN0aW0gJiYKKwljYXQgdmljdGltID5vcmlnaW5hbCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgdmljdGltICYmCisKKwkjIGFkZCB0byB0aGUgaGVhZAorCWZvciBpIGluIGEgYiAnIiRMIicgeQorCWRvCisJCWVjaG8gJGkKKwlkb25lID52aWN0aW0gJiYKKwljYXQgdmljdGltID5hZGQtYS1leHBlY3QgJiYKKwlnaXQgZGlmZiB2aWN0aW0gPmFkZC1hLXBhdGNoLndpdGggJiYKKwlnaXQgZGlmZiAtLXVuaWZpZWQ9MCA+YWRkLWEtcGF0Y2gud2l0aG91dCAmJgorCisJIyBpbnNlcnQgYXQgbGluZSB0d28KKwlmb3IgaSBpbiBiIGEgJyIkTCInIHkKKwlkbworCQllY2hvICRpCisJZG9uZSA+dmljdGltICYmCisJY2F0IHZpY3RpbSA+aW5zZXJ0LWEtZXhwZWN0ICYmCisJZ2l0IGRpZmYgdmljdGltID5pbnNlcnQtYS1wYXRjaC53aXRoICYmCisJZ2l0IGRpZmYgLS11bmlmaWVkPTAgPmluc2VydC1hLXBhdGNoLndpdGhvdXQgJiYKKworCSMgbW9kaWZ5IGF0IHRoZSBoZWFkCisJZm9yIGkgaW4gYSAnIiRMIicgeQorCWRvCisJCWVjaG8gJGkKKwlkb25lID52aWN0aW0gJiYKKwljYXQgdmljdGltID5tb2QtYS1leHBlY3QgJiYKKwlnaXQgZGlmZiB2aWN0aW0gPm1vZC1hLXBhdGNoLndpdGggJiYKKwlnaXQgZGlmZiAtLXVuaWZpZWQ9MCA+bW9kLWEtcGF0Y2gud2l0aG91dCAmJgorCisJIyByZW1vdmUgZnJvbSB0aGUgaGVhZAorCWZvciBpIGluICciJEwiJyB5CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnZpY3RpbSAmJgorCWNhdCB2aWN0aW0gPmRlbC1hLWV4cGVjdCAmJgorCWdpdCBkaWZmIHZpY3RpbSA+ZGVsLWEtcGF0Y2gud2l0aCAmJgorCWdpdCBkaWZmIC0tdW5pZmllZD0wID5kZWwtYS1wYXRjaC53aXRob3V0ICYmCisKKwkjIGFkZCB0byB0aGUgdGFpbAorCWZvciBpIGluIGIgJyIkTCInIHkgegorCWRvCisJCWVjaG8gJGkKKwlkb25lID52aWN0aW0gJiYKKwljYXQgdmljdGltID5hZGQtei1leHBlY3QgJiYKKwlnaXQgZGlmZiB2aWN0aW0gPmFkZC16LXBhdGNoLndpdGggJiYKKwlnaXQgZGlmZiAtLXVuaWZpZWQ9MCA+YWRkLXotcGF0Y2gud2l0aG91dCAmJgorCisJIyBtb2RpZnkgYXQgdGhlIHRhaWwKKwlmb3IgaSBpbiBiICciJEwiJyB6CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnZpY3RpbSAmJgorCWNhdCB2aWN0aW0gPm1vZC16LWV4cGVjdCAmJgorCWdpdCBkaWZmIHZpY3RpbSA+bW9kLXotcGF0Y2gud2l0aCAmJgorCWdpdCBkaWZmIC0tdW5pZmllZD0wID5tb2Qtei1wYXRjaC53aXRob3V0ICYmCisKKwkjIHJlbW92ZSBmcm9tIHRoZSB0YWlsCisJZm9yIGkgaW4gYiAnIiRMIicKKwlkbworCQllY2hvICRpCisJZG9uZSA+dmljdGltICYmCisJY2F0IHZpY3RpbSA+ZGVsLXotZXhwZWN0ICYmCisJZ2l0IGRpZmYgdmljdGltID5kZWwtei1wYXRjaC53aXRoICYmCisJZ2l0IGRpZmYgLS11bmlmaWVkPTAgPmRlbC16LXBhdGNoLndpdGhvdXQKKworCSMgZG9uZQorJworCitmb3Igd2l0aCBpbiB3aXRoIHdpdGhvdXQKK2RvCisJY2FzZSAiJHdpdGgiIGluCisJd2l0aCkgdT0gOzsKKwl3aXRob3V0KSB1PSctLXVuaWRpZmYtemVybyAnIDs7CisJZXNhYworCWZvciBraW5kIGluIGFkZC1hIGFkZC16IGluc2VydC1hIG1vZC1hIG1vZC16IGRlbC1hIGRlbC16CisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAiYXBwbHkgJGtpbmQtcGF0Y2ggJHdpdGggY29udGV4dCIgJworCQkJY2F0IG9yaWdpbmFsID52aWN0aW0gJiYKKwkJCWdpdCB1cGRhdGUtaW5kZXggdmljdGltICYmCisJCQlnaXQgYXBwbHkgLS1pbmRleCAnIiR1JGtpbmQtcGF0Y2guJHdpdGgiJyAmJgorCQkJdGVzdF9jbXAgJyIka2luZCInLWV4cGVjdCB2aWN0aW0KKwkJJworCWRvbmUKK2RvbmUKKworZm9yIGtpbmQgaW4gYWRkLWEgYWRkLXogaW5zZXJ0LWEgbW9kLWEgbW9kLXogZGVsLWEgZGVsLXoKK2RvCisJcm0gLWYgJGtpbmQtbmcud2l0aG91dAorCXNlZAktZSAicy9eZGlmZiAtLWdpdCAvZGlmZiAvIiBcCisJCS1lICcvXmluZGV4IC9kJyBcCisJCTwka2luZC1wYXRjaC53aXRob3V0ID4ka2luZC1uZy53aXRob3V0CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiYXBwbHkgbm9uLWdpdCAka2luZC1wYXRjaCB3aXRob3V0IGNvbnRleHQiICcKKwkJY2F0IG9yaWdpbmFsID52aWN0aW0gJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCB2aWN0aW0gJiYKKwkJZ2l0IGFwcGx5IC0tdW5pZGlmZi16ZXJvIC0taW5kZXggJyIka2luZC1uZy53aXRob3V0IicgJiYKKwkJdGVzdF9jbXAgJyIka2luZCInLWV4cGVjdCB2aWN0aW0KKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3byBsaW5lcycgJworCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvIGFhYSA+ZmlsZSAmJgorCWdpdCBkaWZmID5wYXRjaCAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gYmJiID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2hlY2sgcGF0Y2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBwYXRjaCB3aXRoIDMgY29udGV4dCBsaW5lcyBtYXRjaGluZyBhdCBlbmQnICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IGVjaG8gZDsgfSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gZSA+PmZpbGUgJiYKKwlnaXQgZGlmZiA+cGF0Y2ggJiYKKwk+ZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDUtYXBwbHktZnV6ei5zaCBiL3QvdDQxMDUtYXBwbHktZnV6ei5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMjY2ZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwNS1hcHBseS1mdXp6LnNoCkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhcHBseSB3aXRoIGZ1enogYW5kIG9mZnNldCcKKworLiAuL3Rlc3QtbGliLnNoCisKK2RvdGVzdCAoKSB7CisJbmFtZT0iJDEiICYmIHNoaWZ0ICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICIKKwkJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1xIC11IGZpbGUgJiYKKwkJZ2l0IGFwcGx5ICQqICYmCisJCXRlc3RfY21wIGV4cGVjdCBmaWxlCisJIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyCisJZG8KKwkJZWNobyAkaQorCWRvbmUgPmZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpbGUgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IGEgYiBjIGQgZSA4IDkgMTAgMTEgMTIKKwlkbworCQllY2hvICRpCisJZG9uZSA+ZmlsZSAmJgorCWNhdCBmaWxlID5leHBlY3QgJiYKKwlnaXQgZGlmZiA+TzAuZGlmZiAmJgorCisJc2VkIC1lICJzL0BAIC01LDYgKzUsMTEgQEAvQEAgLTIsNiArMiwxMSBAQC8iID5PMS5kaWZmIE8wLmRpZmYgJiYKKwlzZWQgLWUgInMvQEAgLTUsNiArNSwxMSBAQC9AQCAtNyw2ICs3LDExIEBALyIgPk8yLmRpZmYgTzAuZGlmZiAmJgorCXNlZCAtZSAicy9AQCAtNSw2ICs1LDExIEBAL0BAIC0xOSw2ICsxOSwxMSBAQC8iID5PMy5kaWZmIE8wLmRpZmYgJiYKKworCXNlZCAtZSAicy9eIDUvIFMvIiA+RjAuZGlmZiBPMC5kaWZmICYmCisJc2VkIC1lICJzL14gNS8gUy8iID5GMS5kaWZmIE8xLmRpZmYgJiYKKwlzZWQgLWUgInMvXiA1LyBTLyIgPkYyLmRpZmYgTzIuZGlmZiAmJgorCXNlZCAtZSAicy9eIDUvIFMvIiA+RjMuZGlmZiBPMy5kaWZmCisKKycKKworZG90ZXN0ICd1bm1vZGlmaWVkIHBhdGNoJyBPMC5kaWZmCisKK2RvdGVzdCAnbWludXMgb2Zmc2V0JyBPMS5kaWZmCisKK2RvdGVzdCAncGx1cyBvZmZzZXQnIE8yLmRpZmYKKworZG90ZXN0ICdiaWcgb2Zmc2V0JyBPMy5kaWZmCisKK2RvdGVzdCAnZnV6eiB3aXRoIG5vIG9mZnNldCcgLUMyIEYwLmRpZmYKKworZG90ZXN0ICdmdXp6IHdpdGggbWludXMgb2Zmc2V0JyAtQzIgRjEuZGlmZgorCitkb3Rlc3QgJ2Z1enogd2l0aCBwbHVzIG9mZnNldCcgLUMyIEYyLmRpZmYKKworZG90ZXN0ICdmdXp6IHdpdGggYmlnIG9mZnNldCcgLUMyIEYzLmRpZmYKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTA2LWFwcGx5LXN0ZGluLnNoIGIvdC90NDEwNi1hcHBseS1zdGRpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MjQ2N2ExCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwNi1hcHBseS1zdGRpbi5zaApAQCAtMCwwICsxLDI2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IC0tbnVtc3RhdCAtIDxwYXRjaCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gaGVsbG8gPnRleHQgJiYKKwlnaXQgYWRkIHRleHQgJiYKKwllY2hvIGdvb2RieWUgPnRleHQgJiYKKwlnaXQgZGlmZiA+cGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFwcGx5IC0tbnVtc3RhdCAtIDwgcGF0Y2gnICcKKwllY2hvICIxCTEJdGV4dCIgPmV4cGVjdCAmJgorCWdpdCBhcHBseSAtLW51bXN0YXQgLSA8cGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFwcGx5IC0tbnVtc3RhdCAtIDwgcGF0Y2ggcGF0Y2gnICcKKwlmb3IgaSBpbiAxIDI7IGRvIGVjaG8gIjEJMQl0ZXh0IjsgZG9uZSA+ZXhwZWN0ICYmCisJZ2l0IGFwcGx5IC0tbnVtc3RhdCAtIDwgcGF0Y2ggcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTA3LWFwcGx5LWlnbm9yZS13aGl0ZXNwYWNlLnNoIGIvdC90NDEwNy1hcHBseS1pZ25vcmUtd2hpdGVzcGFjZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYzcyZWVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwNy1hcHBseS1pZ25vcmUtd2hpdGVzcGFjZS5zaApAQCAtMCwwICsxLDE5NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBHaXVzZXBwZSBCaWxvdHRhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1hcHBseSAtLWlnbm9yZS13aGl0ZXNwYWNlLgorCisnCisuIC4vdGVzdC1saWIuc2gKKworIyBUaGlzIHByaW1lcyBtYWluLmMgZmlsZSB0aGF0IGluZGVudHMgd2l0aG91dCB1c2luZyBIVCBhdCBhbGwuCisjIFZhcmlvdXMgcGF0Y2hlcyB3aXRoIEhUIGFuZCBvdGhlciBzcGFjZXMgYXJlIGF0dGVtcHRlZCBpbiB0aGUgdGVzdC4KKworY2F0ID4gcGF0Y2gxLnBhdGNoIDw8XEVPRgorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL21haW4uYworQEAgLTAsMCArMSwyMiBAQAorKyNpbmNsdWRlIDxzdGRpby5oPgorKworK3ZvaWQgcHJpbnRfaW50KGludCBudW0pOworK2ludCBmdW5jKGludCBudW0pOworKworK2ludCBtYWluKCkgeworKyAgICAgICBpbnQgaTsKKysKKysgICAgICAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKysgICAgICAgICAgICAgICBwcmludF9pbnQoZnVuYyhpKSk7IC8qIHN0dWZmICovCisrICAgICAgIH0KKysKKysgICAgICAgcmV0dXJuIDA7CisrfQorKworK2ludCBmdW5jKGludCBudW0pIHsKKysgICAgICAgcmV0dXJuIG51bSAqIG51bTsKKyt9CisrCisrdm9pZCBwcmludF9pbnQoaW50IG51bSkgeworKyAgICAgICBwcmludGYoIiVkIiwgbnVtKTsKKyt9CitFT0YKKworIyBTaW5jZSB3aGl0ZXNwYWNlIGlzIHZlcnkgc2lnbmlmaWNhbnQgYW5kIHdlIHdhbnQgdG8gcHJldmVudCB3aGl0ZXNwYWNlCisjIG1hbmdsaW5nIHdoZW4gY3JlYXRpbmcgdGhpcyB0ZXN0IGZyb20gYSBwYXRjaCwgd2UgcHJvdGVjdCAnZml4YWJsZScKKyMgd2hpdGVzcGFjZSBieSByZXBsYWNpbmcgc3BhY2VzIHdpdGggWiBhbmQgcmVwbGFjaW5nIHRoZW0gYXQgcGF0Y2gKKyMgY3JlYXRpb24gdGltZSwgaGVuY2UgdGhlIHNlZCB0cmljay4KKworIyBUaGlzIHBhdGNoIHdpbGwgZmFpbCB1bmxlc3Mgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyBhcmUgYmVpbmcgaWdub3JlZAorCitzZWQgLWUgJ3MvWi8gL2cnID4gcGF0Y2gyLnBhdGNoIDw8XEVPRgorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworLS0tIGEvbWFpbi5jCisrKysgYi9tYWluLmMKK0BAIC0xMCw2ICsxMCw4IEBACitaCQlwcmludF9pbnQoZnVuYyhpKSk7IC8qIHN0dWZmICovCitaCX0KK1oKKysJcHJpbnRmKCJcbiIpOworKworWglyZXR1cm4gMDsKK1p9CitaCitFT0YKKworIyBUaGlzIHBhdGNoIHdpbGwgZmFpbCBldmVuIGlmIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMgYXJlIGJlaW5nIGlnbm9yZWQsCisjIGJlY2F1c2Ugb2YgdGhlIG1pc3Npbmcgc3RyaW5nIGF0IEVPTC4gVE9ETzogdGhpcyB0ZXN0Y2FzZSBzaG91bGQgYmUKKyMgaW1wcm92ZWQgYnkgY3JlYXRpbmcgYSBsaW5lIHRoYXQgaGFzIHRoZSBzYW1lIGhhc2ggd2l0aCBhbmQgd2l0aG91dAorIyB0aGUgZmluYWwgc3RyaW5nLgorCitzZWQgLWUgJ3MvWi8gL2cnID4gcGF0Y2gzLnBhdGNoIDw8XEVPRgorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworLS0tIGEvbWFpbi5jCisrKysgYi9tYWluLmMKK0BAIC0xMCwzICsxMCw0IEBACitaCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CitaCQlwcmludF9pbnQoZnVuYyhpKSk7WgorKwkJLyogc3R1ZmYgKi8KK1oJfQorRU9GCisKKyMgVGhpcyBwYXRjaCB3aWxsIGZhaWwgZXZlbiBpZiB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIGFyZSBiZWluZyBpZ25vcmVkLAorIyBiZWNhdXNlIG9mIHRoZSBtaXNzaW5nIEVPTCBhdCBFT0YuCisKK3NlZCAtZSAncy9aLyAvZycgPiBwYXRjaDQucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTIxLDEgKzIxLDEgQEAKKy0JfTtaCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKysJfTsKK0VPRgorCisjIFRoaXMgcGF0Y2ggd2lsbCBmYWlsIHVubGVzcyB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIGFyZSBiZWluZyBpZ25vcmVkLgorCitzZWQgLWUgJ3MvWi8gL2cnID4gcGF0Y2g1LnBhdGNoIDw8XEVPRgorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworLS0tIGEvbWFpbi5jCisrKysgYi9tYWluLmMKK0BAIC0yLDIgKzIsMyBAQAorWgl2b2lkIHByaW50X2ludChpbnQgbnVtKTsKKysJLyogYSBjb21tZW50ICovCitaCWludCBmdW5jKGludCBudW0pOworRU9GCisKKyMgQW5kIHRoaXMgaXMgaG93IHRoZSBmaW5hbCBvdXRwdXQgc2hvdWxkIGJlLiAgUGF0Y2hlcyBpbnRyb2R1Y2UKKyMgSFRzIGJ1dCB0aGUgb3JpZ2luYWwgU1AgaW5kZW50cyBhcmUgbW9zdGx5IGtlcHQuCisKK3NlZCAtZSAncy9ULwkvZycgPiBtYWluLmMuZmluYWwgPDxcRU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KKwordm9pZCBwcmludF9pbnQoaW50IG51bSk7CitpbnQgZnVuYyhpbnQgbnVtKTsKKworaW50IG1haW4oKSB7CisgICAgICAgaW50IGk7CisKKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgICAgICAgICAgcHJpbnRfaW50KGZ1bmMoaSkpOyAvKiBzdHVmZiAqLworICAgICAgIH0KKworVHByaW50ZigiXG4iKTsKKworICAgICAgIHJldHVybiAwOworfQorCitpbnQgZnVuYyhpbnQgbnVtKSB7CisgICAgICAgcmV0dXJuIG51bSAqIG51bTsKK30KKwordm9pZCBwcmludF9pbnQoaW50IG51bSkgeworICAgICAgIHByaW50ZigiJWQiLCBudW0pOworfQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgY3JlYXRpb24nICcKKwlnaXQgYXBwbHkgcGF0Y2gxLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoMiBmYWlscyAocmV0YWIpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoMi5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDIgYXBwbGllcyB3aXRoIC0taWdub3JlLXdoaXRlc3BhY2UnICcKKwlnaXQgYXBwbHkgLS1pZ25vcmUtd2hpdGVzcGFjZSBwYXRjaDIucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gyIHJldmVyc2UgYXBwbGllcyB3aXRoIC0taWdub3JlLXNwYWNlLWNoYW5nZScgJworCWdpdCBhcHBseSAtUiAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgcGF0Y2gyLnBhdGNoCisnCisKK2dpdCBjb25maWcgYXBwbHkuaWdub3Jld2hpdGVzcGFjZSBjaGFuZ2UKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gyIGFwcGxpZXMgKGFwcGx5Lmlnbm9yZXdoaXRlc3BhY2UgPSBjaGFuZ2UpJyAnCisJZ2l0IGFwcGx5IHBhdGNoMi5wYXRjaCAmJgorCXRlc3RfY21wIG1haW4uYy5maW5hbCBtYWluLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gzIGZhaWxzIChtaXNzaW5nIHN0cmluZyBhdCBFT0wpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoMy5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDQgZmFpbHMgKG1pc3NpbmcgRU9MIGF0IEVPRiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2g0LnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoNSBmYWlscyAobGVhZGluZyB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIG1hdHRlciknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2g1LnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlLWNyZWF0ZSBmaWxlICh3aXRoIC0taWdub3JlLXdoaXRlc3BhY2UpJyAnCisJcm0gLWYgbWFpbi5jICYmCisJZ2l0IGFwcGx5IHBhdGNoMS5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDUgZmFpbHMgKC0tbm8taWdub3JlLXdoaXRlc3BhY2UpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tbm8taWdub3JlLXdoaXRlc3BhY2UgcGF0Y2g1LnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLWluYWNjdXJhdGUtZW9mJyAnCisJZWNobyAxID5maWxlICYmCisJZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLWluYWNjdXJhdGUtZW9mIDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAIC0xICsxIEBACisJLTEKKwkrMgorCUVPRgorCXByaW50ZiAyID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDgtYXBwbHktdGhyZWV3YXkuc2ggYi90L3Q0MTA4LWFwcGx5LXRocmVld2F5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ3MzQ5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA4LWFwcGx5LXRocmVld2F5LnNoCkBAIC0wLDAgKzEsMTYwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IC0tM3dheScKKworLiAuL3Rlc3QtbGliLnNoCisKK3ByaW50X3Nhbml0aXplZF9jb25mbGljdGVkX2RpZmYgKCkgeworCWdpdCBkaWZmIEhFQUQgPmRpZmYucmF3ICYmCisJc2VkIC1lICcKKwkJL15pbmRleCAvZAorCQlzL15cKCtbPD58XVs8PnxdWzw+fF1bPD58XSpcKSAuKi9cMS8KKwknIGRpZmYucmF3Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfdGljayAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA+b25lICYmCisJY2F0IG9uZSA+dHdvICYmCisJZ2l0IGFkZCBvbmUgdHdvICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKworCXRlc3RfdGljayAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSB0d28gMyA0IDUgc2l4IDcgPm9uZSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSB0d28gMyA0IDUgNiA3ID50d28gJiYKKwlnaXQgY29tbWl0IC1hIC1tIG1hc3RlciAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgZml2ZSA2IDcgPm9uZSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCBmaXZlIDYgNyA+dHdvICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBzaWRlICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGhvdXQgLS0zd2F5JyAnCisJZ2l0IGRpZmYgc2lkZV4gc2lkZSA+UC5kaWZmICYmCisKKwkjIHNob3VsZCBmYWlsIHRvIGFwcGx5CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IFAuZGlmZiAmJgorCSMgc2hvdWxkIGxlYXZlIHRoaW5ncyBpbnRhY3QKKwlnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZSAmJgorCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIC0tY2FjaGVkIEhFQUQKKycKKwordGVzdF9hcHBseV93aXRoXzN3YXkgKCkgeworCSMgTWVyZ2luZyBzaWRlIHNob3VsZCBiZSBzaW1pbGFyIHRvIGFwcGx5aW5nIHRoaXMgcGF0Y2gKKwlnaXQgZGlmZiAuLi5zaWRlID5QLmRpZmYgJiYKKworCSMgVGhlIGNvcnJlc3BvbmRpbmcgY29uZmxpY3RlZCBtZXJnZQorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgc2lkZSAmJgorCWdpdCBscy1maWxlcyAtcyA+ZXhwZWN0LmxzICYmCisJcHJpbnRfc2FuaXRpemVkX2NvbmZsaWN0ZWRfZGlmZiA+ZXhwZWN0LmRpZmYgJiYKKworCSMgc2hvdWxkIGZhaWwgdG8gYXBwbHkKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggLS0zd2F5IFAuZGlmZiAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsLmxzICYmCisJcHJpbnRfc2FuaXRpemVkX2NvbmZsaWN0ZWRfZGlmZiA+YWN0dWFsLmRpZmYgJiYKKworCSMgVGhlIHJlc3VsdCBzaG91bGQgcmVzZW1ibGUgdGhlIGNvcnJlc3BvbmRpbmcgbWVyZ2UKKwl0ZXN0X2NtcCBleHBlY3QubHMgYWN0dWFsLmxzICYmCisJdGVzdF9jbXAgZXhwZWN0LmRpZmYgYWN0dWFsLmRpZmYKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCAtLTN3YXknICcKKwl0ZXN0X2FwcGx5X3dpdGhfM3dheQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIC0tM3dheSB3aXRoIG1lcmdlLmNvbmZsaWN0U3R5bGUgPSBkaWZmMycgJworCXRlc3RfY29uZmlnIG1lcmdlLmNvbmZsaWN0U3R5bGUgZGlmZjMgJiYKKwl0ZXN0X2FwcGx5X3dpdGhfM3dheQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIC0tM3dheSB3aXRoIHJlcmVyZSBlbmFibGVkJyAnCisJdGVzdF9jb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCisJIyBNZXJnaW5nIHNpZGUgc2hvdWxkIGJlIHNpbWlsYXIgdG8gYXBwbHlpbmcgdGhpcyBwYXRjaAorCWdpdCBkaWZmIC4uLnNpZGUgPlAuZGlmZiAmJgorCisJIyBUaGUgY29ycmVzcG9uZGluZyBjb25mbGljdGVkIG1lcmdlCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCBzaWRlICYmCisKKwkjIE1hbnVhbGx5IHJlc29sdmUgYW5kIHJlY29yZCB0aGUgcmVzb2x1dGlvbgorCXRlc3Rfd3JpdGVfbGluZXMgMSB0d28gMyA0IGZpdmUgc2l4IDcgPm9uZSAmJgorCWdpdCByZXJlcmUgJiYKKwljYXQgb25lID5leHBlY3QgJiYKKworCSMgc2hvdWxkIGZhaWwgdG8gYXBwbHkKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggLS0zd2F5IFAuZGlmZiAmJgorCisJIyBidXQgcmVyZXJlIHNob3VsZCBoYXZlIHJlcGxheWVkIHRoZSByZWNvcmRlZCByZXNvbHV0aW9uCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtMyB3aXRoIGFkZC9hZGQgY29uZmxpY3Qgc2V0dXAnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYWRkZXIgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgPnRocmVlICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNiA3ID5mb3VyICYmCisJZ2l0IGFkZCB0aHJlZSBmb3VyICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIHRocmVlIGFuZCBmb3VyIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGFub3RoZXIgYWRkZXJeICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNiA3ID50aHJlZSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgZm91ciA1IDYgNyA+Zm91ciAmJgorCWdpdCBhZGQgdGhyZWUgZm91ciAmJgorCWdpdCBjb21taXQgLW0gImFkZCB0aHJlZSBhbmQgZm91ciIgJiYKKworCSMgTWVyZ2luZyBhbm90aGVyIHNob3VsZCBiZSBzaW1pbGFyIHRvIGFwcGx5aW5nIHRoaXMgcGF0Y2gKKwlnaXQgZGlmZiBhZGRlci4uLmFub3RoZXIgPlAuZGlmZiAmJgorCisJZ2l0IGNoZWNrb3V0IGFkZGVyXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgYW5vdGhlciAmJgorCWdpdCBscy1maWxlcyAtcyA+ZXhwZWN0LmxzICYmCisJcHJpbnRfc2FuaXRpemVkX2NvbmZsaWN0ZWRfZGlmZiA+ZXhwZWN0LmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLTMgd2l0aCBhZGQvYWRkIGNvbmZsaWN0JyAnCisJIyBzaG91bGQgZmFpbCB0byBhcHBseSAuLi4KKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGFkZGVyXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCAtLTN3YXkgUC5kaWZmICYmCisJIyAuLi4gYW5kIGxlYXZlIGNvbmZsaWN0cyBpbiB0aGUgaW5kZXggYW5kIGluIHRoZSB3b3JraW5nIHRyZWUKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbC5scyAmJgorCXByaW50X3Nhbml0aXplZF9jb25mbGljdGVkX2RpZmYgPmFjdHVhbC5kaWZmICYmCisKKwkjIFRoZSByZXN1bHQgc2hvdWxkIHJlc2VtYmxlIHRoZSBjb3JyZXNwb25kaW5nIG1lcmdlCisJdGVzdF9jbXAgZXhwZWN0LmxzIGFjdHVhbC5scyAmJgorCXRlc3RfY21wIGV4cGVjdC5kaWZmIGFjdHVhbC5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0zIHdpdGggYWRkL2FkZCBjb25mbGljdCAoZGlydHkgd29ya2luZyB0cmVlKScgJworCSMgc2hvdWxkIGZhaWwgdG8gYXBwbHkgLi4uCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBhZGRlcl4wICYmCisJZWNobyA+PmZvdXIgJiYKKwljYXQgZm91ciA+Zm91ci5zYXZlICYmCisJY2F0IHRocmVlID50aHJlZS5zYXZlICYmCisJZ2l0IGxzLWZpbGVzIC1zID5leHBlY3QubHMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCAtLTN3YXkgUC5kaWZmICYmCisJIyAuLi4gYW5kIHNob3VsZCBub3QgdG91Y2ggYW55dGhpbmcKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbC5scyAmJgorCXRlc3RfY21wIGV4cGVjdC5scyBhY3R1YWwubHMgJiYKKwl0ZXN0X2NtcCBmb3VyLnNhdmUgZm91ciAmJgorCXRlc3RfY21wIHRocmVlLnNhdmUgdGhyZWUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTA5LWFwcGx5LW11bHRpZnJhZy5zaCBiL3QvdDQxMDktYXBwbHktbXVsdGlmcmFnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFjNTgwODMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA5LWFwcGx5LW11bHRpZnJhZy5zaApAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjIENvcHlyaWdodCAoYykgMjAwNSBSb2JlcnQgRml0enNpbW9ucworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgdGVzdCBwYXRjaGVzIHdpdGggbXVsdGlwbGUgZnJhZ21lbnRzLicKKworLiAuL3Rlc3QtbGliLnNoCisKK2NwICIkVEVTVF9ESVJFQ1RPUlkvdDQxMDkvcGF0Y2gxLnBhdGNoIiAuCitjcCAiJFRFU1RfRElSRUNUT1JZL3Q0MTA5L3BhdGNoMi5wYXRjaCIgLgorY3AgIiRURVNUX0RJUkVDVE9SWS90NDEwOS9wYXRjaDMucGF0Y2giIC4KK2NwICIkVEVTVF9ESVJFQ1RPUlkvdDQxMDkvcGF0Y2g0LnBhdGNoIiAuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcHBseSAoMSknICcKKwlnaXQgYXBwbHkgcGF0Y2gxLnBhdGNoIHBhdGNoMi5wYXRjaCAmJgorCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkvdDQxMDkvZXhwZWN0LTEiIG1haW4uYworJworcm0gLWYgbWFpbi5jCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcHBseSAoMiknICcKKwlnaXQgYXBwbHkgcGF0Y2gxLnBhdGNoIHBhdGNoMi5wYXRjaCBwYXRjaDMucGF0Y2ggJiYKKwl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZL3Q0MTA5L2V4cGVjdC0yIiBtYWluLmMKKycKK3JtIC1mIG1haW4uYworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXBwbHkgKDMpJyAnCisJZ2l0IGFwcGx5IHBhdGNoMS5wYXRjaCBwYXRjaDQucGF0Y2ggJiYKKwl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZL3Q0MTA5L2V4cGVjdC0zIiBtYWluLmMKKycKK212IG1haW4uYyBtYWluLmMuZ2l0CisKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3Q0MTA5L2V4cGVjdC0xIGIvdC90NDEwOS9leHBlY3QtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGI1ZmYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwOS9leHBlY3QtMQpAQCAtMCwwICsxLDMxIEBACisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IGZ1bmMoaW50IG51bSk7Cit2b2lkIHByaW50X2ludChpbnQgbnVtKTsKK3ZvaWQgcHJpbnRfbG4oKTsKKworaW50IG1haW4oKSB7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlwcmludF9pbnQoZnVuYyhpKSk7CisJfQorCisJcHJpbnRfbG4oKTsKKworCXJldHVybiAwOworfQorCitpbnQgZnVuYyhpbnQgbnVtKSB7CisJcmV0dXJuIG51bSAqIG51bTsKK30KKwordm9pZCBwcmludF9pbnQoaW50IG51bSkgeworCXByaW50ZigiJWQiLCBudW0pOworfQorCit2b2lkIHByaW50X2xuKCkgeworCXByaW50ZigiXG4iKTsKK30KKwpkaWZmIC0tZ2l0IGEvdC90NDEwOS9leHBlY3QtMiBiL3QvdDQxMDkvZXhwZWN0LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1MjkyNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDkvZXhwZWN0LTIKQEAgLTAsMCArMSwyMyBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBmdW5jKGludCBudW0pOwordm9pZCBwcmludF9pbnQoaW50IG51bSk7CisKK2ludCBtYWluKCkgeworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJcHJpbnRfaW50KGZ1bmMoaSkpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZnVuYyhpbnQgbnVtKSB7CisJcmV0dXJuIG51bSAqIG51bTsKK30KKwordm9pZCBwcmludF9pbnQoaW50IG51bSkgeworCXByaW50ZigiJWQiLCBudW0pOworfQorCmRpZmYgLS1naXQgYS90L3Q0MTA5L2V4cGVjdC0zIGIvdC90NDEwOS9leHBlY3QtMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDJhNDc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwOS9leHBlY3QtMwpAQCAtMCwwICsxLDI0IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IGZ1bmMoaW50IG51bSk7CitpbnQgZnVuYzIoaW50IG51bSk7CisKK2ludCBtYWluKCkgeworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJcHJpbnRmKCIlZCIsIGZ1bmMoaSkpOworCQlwcmludGYoIiVkIiwgZnVuYzMoaSkpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZnVuYyhpbnQgbnVtKSB7CisJcmV0dXJuIG51bSAqIG51bTsKK30KKworaW50IGZ1bmMyKGludCBudW0pIHsKKwlyZXR1cm4gbnVtICogbnVtICogbnVtOworfQorCmRpZmYgLS1naXQgYS90L3Q0MTA5L3BhdGNoMS5wYXRjaCBiL3QvdDQxMDkvcGF0Y2gxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNDExZmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA5L3BhdGNoMS5wYXRjaApAQCAtMCwwICsxLDI4IEBACitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWFpbi5jCitAQCAtMCwwICsxLDIzIEBACisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50IGZ1bmMoaW50IG51bSk7Cisrdm9pZCBwcmludF9pbnQoaW50IG51bSk7CisrCisraW50IG1haW4oKSB7CisrCWludCBpOworKworKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworKwkJcHJpbnRfaW50KGZ1bmMoaSkpOworKwl9CisrCisrCXJldHVybiAwOworK30KKysKKytpbnQgZnVuYyhpbnQgbnVtKSB7CisrCXJldHVybiBudW0gKiBudW07CisrfQorKworK3ZvaWQgcHJpbnRfaW50KGludCBudW0pIHsKKysJcHJpbnRmKCIlZCIsIG51bSk7CisrfQorKwpkaWZmIC0tZ2l0IGEvdC90NDEwOS9wYXRjaDIucGF0Y2ggYi90L3Q0MTA5L3BhdGNoMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzZiMDZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwOS9wYXRjaDIucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworLS0tIGEvbWFpbi5jCisrKysgYi9tYWluLmMKK0BAIC0xLDcgKzEsOSBAQAorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAKKyBpbnQgZnVuYyhpbnQgbnVtKTsKKyB2b2lkIHByaW50X2ludChpbnQgbnVtKTsKKyt2b2lkIHByaW50X2xuKCk7CisgCisgaW50IG1haW4oKSB7CisgCWludCBpOworQEAgLTEwLDYgKzEyLDggQEAKKyAJCXByaW50X2ludChmdW5jKGkpKTsKKyAJfQorIAorKwlwcmludF9sbigpOworKworIAlyZXR1cm4gMDsKKyB9CisgCitAQCAtMjEsMyArMjUsNyBAQAorIAlwcmludGYoIiVkIiwgbnVtKTsKKyB9CisgCisrdm9pZCBwcmludF9sbigpIHsKKysJcHJpbnRmKCJcbiIpOworK30KKysKZGlmZiAtLWdpdCBhL3QvdDQxMDkvcGF0Y2gzLnBhdGNoIGIvdC90NDEwOS9wYXRjaDMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY5NmM1NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDkvcGF0Y2gzLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK2NhdCA+IHBhdGNoMy5wYXRjaCA8PFxFT0YKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtMSw5ICsxLDcgQEAKKy0jaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCisgaW50IGZ1bmMoaW50IG51bSk7Cisgdm9pZCBwcmludF9pbnQoaW50IG51bSk7Cistdm9pZCBwcmludF9sbigpOworIAorIGludCBtYWluKCkgeworIAlpbnQgaTsKK0BAIC0xMiw4ICsxMCw2IEBACisgCQlwcmludF9pbnQoZnVuYyhpKSk7CisgCX0KKyAKKy0JcHJpbnRfbG4oKTsKKy0KKyAJcmV0dXJuIDA7CisgfQorIAorQEAgLTI1LDcgKzIxLDMgQEAKKyAJcHJpbnRmKCIlZCIsIG51bSk7CisgfQorIAorLXZvaWQgcHJpbnRfbG4oKSB7CistCXByaW50ZigiXG4iKTsKKy19CistCmRpZmYgLS1naXQgYS90L3Q0MTA5L3BhdGNoNC5wYXRjaCBiL3QvdDQxMDkvcGF0Y2g0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMDg1OTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA5L3BhdGNoNC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTEsMTMgKzEsMTQgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAKKyBpbnQgZnVuYyhpbnQgbnVtKTsKKy12b2lkIHByaW50X2ludChpbnQgbnVtKTsKKytpbnQgZnVuYzIoaW50IG51bSk7CisgCisgaW50IG1haW4oKSB7CisgCWludCBpOworIAorIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworLQkJcHJpbnRfaW50KGZ1bmMoaSkpOworKwkJcHJpbnRmKCIlZCIsIGZ1bmMoaSkpOworKwkJcHJpbnRmKCIlZCIsIGZ1bmMzKGkpKTsKKyAJfQorIAorIAlyZXR1cm4gMDsKK0BAIC0xNyw3ICsxOCw3IEBACisgCXJldHVybiBudW0gKiBudW07CisgfQorIAorLXZvaWQgcHJpbnRfaW50KGludCBudW0pIHsKKy0JcHJpbnRmKCIlZCIsIG51bSk7CisraW50IGZ1bmMyKGludCBudW0pIHsKKysJcmV0dXJuIG51bSAqIG51bSAqIG51bTsKKyB9CisgCmRpZmYgLS1naXQgYS90L3Q0MTEwLWFwcGx5LXNjYW4uc2ggYi90L3Q0MTEwLWFwcGx5LXNjYW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDlmNTgxMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTAtYXBwbHktc2Nhbi5zaApAQCAtMCwwICsxLDIyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjIENvcHlyaWdodCAoYykgMjAwNSBSb2JlcnQgRml0enNpbW9ucworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgdGVzdCBmb3IgcGF0Y2hlcyB3aGljaCByZXF1aXJlIHNjYW5uaW5nIGZvcndhcmRzIGFuZCBiYWNrd2FyZHMuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXBwbHkgc2NhbicgJworCWdpdCBhcHBseSBcCisJCSIkVEVTVF9ESVJFQ1RPUlkvdDQxMTAvcGF0Y2gxLnBhdGNoIiBcCisJCSIkVEVTVF9ESVJFQ1RPUlkvdDQxMTAvcGF0Y2gyLnBhdGNoIiBcCisJCSIkVEVTVF9ESVJFQ1RPUlkvdDQxMTAvcGF0Y2gzLnBhdGNoIiBcCisJCSIkVEVTVF9ESVJFQ1RPUlkvdDQxMTAvcGF0Y2g0LnBhdGNoIiBcCisJCSIkVEVTVF9ESVJFQ1RPUlkvdDQxMTAvcGF0Y2g1LnBhdGNoIiAmJgorCXRlc3RfY21wIG5ldy50eHQgIiRURVNUX0RJUkVDVE9SWS90NDExMC9leHBlY3QiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDExMC9leHBlY3QgYi90L3Q0MTEwL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2NjNDkzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExMC9leHBlY3QKQEAgLTAsMCArMSwyMCBAQAorYTEKK2ExMQorYTExMQorYTExMTEKK2IxCitiMTEKK2IxMTEKK2IxMTExCitiMgorYjIyCitiMjIyCitiMjIyMgorYzEKK2MxMQorYzExMQorYzExMTEKK2MyCitjMjIKK2MyMjIKK2MyMjIyCmRpZmYgLS1naXQgYS90L3Q0MTEwL3BhdGNoMS5wYXRjaCBiL3QvdDQxMTAvcGF0Y2gxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MTM5MDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTEwL3BhdGNoMS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitkaWZmIC0tZ2l0IGEvbmV3LnR4dCBiL25ldy50eHQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9uZXcudHh0CitAQCAtMCwwICsxLDEyIEBACisrYTEKKythMTEKKythMTExCisrYTExMTEKKytiMQorK2IxMQorK2IxMTEKKytiMTExMQorK2MxCisrYzExCisrYzExMQorK2MxMTExCmRpZmYgLS1naXQgYS90L3Q0MTEwL3BhdGNoMi5wYXRjaCBiL3QvdDQxMTAvcGF0Y2gyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OTc0MjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTEwL3BhdGNoMi5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC0tZ2l0IGEvbmV3LnR4dCBiL25ldy50eHQKKy0tLSBhL25ldy50eHQKKysrKyBiL25ldy50eHQKK0BAIC0xLDcgKzEsMyBAQAorLWExCistYTExCistYTExMQorLWExMTExCisgYjEKKyBiMTEKKyBiMTExCmRpZmYgLS1naXQgYS90L3Q0MTEwL3BhdGNoMy5wYXRjaCBiL3QvdDQxMTAvcGF0Y2gzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YmQ0NDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTEwL3BhdGNoMy5wYXRjaApAQCAtMCwwICsxLDE0IEBACitkaWZmIC0tZ2l0IGEvbmV3LnR4dCBiL25ldy50eHQKKy0tLSBhL25ldy50eHQKKysrKyBiL25ldy50eHQKK0BAIC02LDYgKzYsMTAgQEAKKyBiMTEKKyBiMTExCisgYjExMTEKKytiMgorK2IyMgorK2IyMjIKKytiMjIyMgorIGMxCisgYzExCisgYzExMQpkaWZmIC0tZ2l0IGEvdC90NDExMC9wYXRjaDQucGF0Y2ggYi90L3Q0MTEwL3BhdGNoNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmZiOWMyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExMC9wYXRjaDQucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorZGlmZiAtLWdpdCBhL25ldy50eHQgYi9uZXcudHh0CistLS0gYS9uZXcudHh0CisrKysgYi9uZXcudHh0CitAQCAtMSwzICsxLDcgQEAKKythMQorK2ExMQorK2ExMTEKKythMTExMQorIGIxCisgYjExCisgYjExMQpkaWZmIC0tZ2l0IGEvdC90NDExMC9wYXRjaDUucGF0Y2ggYi90L3Q0MTEwL3BhdGNoNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWFjNjkxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExMC9wYXRjaDUucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorZGlmZiAtLWdpdCBhL25ldy50eHQgYi9uZXcudHh0CistLS0gYS9uZXcudHh0CisrKysgYi9uZXcudHh0CitAQCAtMTAsMyArMTAsNyBAQAorIGMxMQorIGMxMTEKKyBjMTExMQorK2MyCisrYzIyCisrYzIyMgorK2MyMjIyCmRpZmYgLS1naXQgYS90L3Q0MTExLWFwcGx5LXN1YmRpci5zaCBiL3QvdDQxMTEtYXBwbHktc3ViZGlyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE2MThhNmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTExLWFwcGx5LXN1YmRpci5zaApAQCAtMCwwICsxLDE1NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BhdGNoaW5nIGZyb20gaW5jb252ZW5pZW50IHBsYWNlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY2F0ID5wYXRjaCA8PC1cRU9GICYmCisJZGlmZiBmaWxlLm9yaWcgZmlsZQorCS0tLSBhL2ZpbGUub3JpZworCSsrKyBiL2ZpbGUKKwlAQCAtMSArMSwyIEBACisJIDEKKwkrMgorCUVPRgorCXBhdGNoPSIkKHB3ZCkvcGF0Y2giICYmCisKKwllY2hvIDEgPnByZWltYWdlICYmCisJcHJpbnRmICIlc1xuIiAxIDIgPnBvc3RpbWFnZSAmJgorCWVjaG8gMyA+b3RoZXIgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBiYXNpcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogc3ViZGlyJyAnCisJcmVzZXRfc3ViZGlyKCkgeworCQlnaXQgcmVzZXQgJiYKKwkJbWtkaXIgLXAgc3ViL2Rpci9iICYmCisJCW1rZGlyIC1wIG9iamVjdHMgJiYKKwkJY3AgIiQxIiBmaWxlICYmCisJCWNwICIkMSIgb2JqZWN0cy9maWxlICYmCisJCWNwICIkMSIgc3ViL2Rpci9maWxlICYmCisJCWNwICIkMSIgc3ViL2Rpci9iL2ZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlIHN1Yi9kaXIvZmlsZSBzdWIvZGlyL2IvZmlsZSBvYmplY3RzL2ZpbGUgJiYKKwkJY3AgIiQyIiBmaWxlICYmCisJCWNwICIkMiIgc3ViL2Rpci9maWxlICYmCisJCWNwICIkMiIgc3ViL2Rpci9iL2ZpbGUgJiYKKwkJY3AgIiQyIiBvYmplY3RzL2ZpbGUgJiYKKwkJdGVzdF9taWdodF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC1xCisJfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBmcm9tIHN1YmRpciBvZiB0b3BsZXZlbCcgJworCWNwIHBvc3RpbWFnZSBleHBlY3RlZCAmJgorCXJlc2V0X3N1YmRpciBvdGhlciBwcmVpbWFnZSAmJgorCSgKKwkJY2Qgc3ViL2RpciAmJgorCQlnaXQgYXBwbHkgIiRwYXRjaCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgc3ViL2Rpci9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tY2FjaGVkIGZyb20gc3ViZGlyIG9mIHRvcGxldmVsJyAnCisJY3AgcG9zdGltYWdlIGV4cGVjdGVkICYmCisJY3Agb3RoZXIgZXhwZWN0ZWQud29ya2luZyAmJgorCXJlc2V0X3N1YmRpciBwcmVpbWFnZSBvdGhlciAmJgorCSgKKwkJY2Qgc3ViL2RpciAmJgorCQlnaXQgYXBwbHkgLS1jYWNoZWQgIiRwYXRjaCIKKwkpICYmCisJZ2l0IHNob3cgOnN1Yi9kaXIvZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQud29ya2luZyBzdWIvZGlyL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1pbmRleCBmcm9tIHN1YmRpciBvZiB0b3BsZXZlbCcgJworCWNwIHBvc3RpbWFnZSBleHBlY3RlZCAmJgorCXJlc2V0X3N1YmRpciBwcmVpbWFnZSBvdGhlciAmJgorCSgKKwkJY2Qgc3ViL2RpciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCAiJHBhdGNoIgorCSkgJiYKKwlyZXNldF9zdWJkaXIgb3RoZXIgcHJlaW1hZ2UgJiYKKwkoCisJCWNkIHN1Yi9kaXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggIiRwYXRjaCIKKwkpICYmCisJcmVzZXRfc3ViZGlyIHByZWltYWdlIHByZWltYWdlICYmCisJKAorCQljZCBzdWIvZGlyICYmCisJCWdpdCBhcHBseSAtLWluZGV4ICIkcGF0Y2giCisJKSAmJgorCWdpdCBzaG93IDpzdWIvZGlyL2ZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHN1Yi9kaXIvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBoYWxmLWJyb2tlbiBwYXRjaCBmcm9tIHN1YmRpciBvZiB0b3BsZXZlbCcgJworCSgKKwkJY2Qgc3ViL2RpciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgPDwtRU9GCisJCS0tLSBzdWIvZGlyL2ZpbGUKKwkJKysrIHN1Yi9kaXIvZmlsZQorCQlAQCAtMSwwICsxLDAgQEAKKwkJLS0tIGZpbGVfaW5fcm9vdAorCQkrKysgZmlsZV9pbl9yb290CisJCUBAIC0xLDAgKzEsMCBAQAorCQlFT0YKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGZyb20gLmdpdCBkaXInICcKKwljcCBwb3N0aW1hZ2UgZXhwZWN0ZWQgJiYKKwljcCBwcmVpbWFnZSAuZ2l0L2ZpbGUgJiYKKwljcCBwcmVpbWFnZSAuZ2l0L29iamVjdHMvZmlsZSAmJgorCSgKKwkJY2QgLmdpdCAmJgorCQlnaXQgYXBwbHkgIiRwYXRjaCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgLmdpdC9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGZyb20gc3ViZGlyIG9mIC5naXQgZGlyJyAnCisJY3AgcG9zdGltYWdlIGV4cGVjdGVkICYmCisJY3AgcHJlaW1hZ2UgLmdpdC9maWxlICYmCisJY3AgcHJlaW1hZ2UgLmdpdC9vYmplY3RzL2ZpbGUgJiYKKwkoCisJCWNkIC5naXQvb2JqZWN0cyAmJgorCQlnaXQgYXBwbHkgIiRwYXRjaCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgLmdpdC9vYmplY3RzL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1jYWNoZWQgZnJvbSAuZ2l0IGRpcicgJworCWNwIHBvc3RpbWFnZSBleHBlY3RlZCAmJgorCWNwIG90aGVyIGV4cGVjdGVkLndvcmtpbmcgJiYKKwljcCBvdGhlciAuZ2l0L2ZpbGUgJiYKKwlyZXNldF9zdWJkaXIgcHJlaW1hZ2Ugb3RoZXIgJiYKKwkoCisJCWNkIC5naXQgJiYKKwkJZ2l0IGFwcGx5IC0tY2FjaGVkICIkcGF0Y2giCisJKSAmJgorCWdpdCBzaG93IDpmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC53b3JraW5nIGZpbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC53b3JraW5nIC5naXQvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWNhY2hlZCBmcm9tIHN1YmRpciBvZiAuZ2l0IGRpcicgJworCWNwIHBvc3RpbWFnZSBleHBlY3RlZCAmJgorCWNwIHByZWltYWdlIGV4cGVjdGVkLnN1YmRpciAmJgorCWNwIG90aGVyIC5naXQvZmlsZSAmJgorCWNwIG90aGVyIC5naXQvb2JqZWN0cy9maWxlICYmCisJcmVzZXRfc3ViZGlyIHByZWltYWdlIG90aGVyICYmCisJKAorCQljZCAuZ2l0L29iamVjdHMgJiYKKwkJZ2l0IGFwcGx5IC0tY2FjaGVkICIkcGF0Y2giCisJKSAmJgorCWdpdCBzaG93IDpmaWxlID5hY3R1YWwgJiYKKwlnaXQgc2hvdyA6b2JqZWN0cy9maWxlID5hY3R1YWwuc3ViZGlyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3ViZGlyIGFjdHVhbC5zdWJkaXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTEyLWFwcGx5LXJlbmFtZXMuc2ggYi90L3Q0MTEyLWFwcGx5LXJlbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjlhZDE4MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTItYXBwbHktcmVuYW1lcy5zaApAQCAtMCwwICsxLDE0NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgc2hvdWxkIG5vdCBnZXQgY29uZnVzZWQgd2l0aCByZW5hbWUvY29weS4KKworJworCisuIC4vdGVzdC1saWIuc2gKKworIyBzZXR1cAorCitta2RpciAtcCBrbGliYy9hcmNoL3g4Nl82NC9pbmNsdWRlL2tsaWJjCisKK2NhdCA+a2xpYmMvYXJjaC94ODZfNjQvaW5jbHVkZS9rbGliYy9hcmNoc2V0am1wLmggPDxcRU9GCisvKgorICogYXJjaC94ODZfNjQvaW5jbHVkZS9rbGliYy9hcmNoc2V0am1wLmgKKyAqLworCisjaWZuZGVmIF9LTElCQ19BUkNIU0VUSk1QX0gKKyNkZWZpbmUgX0tMSUJDX0FSQ0hTRVRKTVBfSAorCitzdHJ1Y3QgX19qbXBfYnVmIHsKKyAgdW5zaWduZWQgbG9uZyBfX3JieDsKKyAgdW5zaWduZWQgbG9uZyBfX3JzcDsKKyAgdW5zaWduZWQgbG9uZyBfX3JicDsKKyAgdW5zaWduZWQgbG9uZyBfX3IxMjsKKyAgdW5zaWduZWQgbG9uZyBfX3IxMzsKKyAgdW5zaWduZWQgbG9uZyBfX3IxNDsKKyAgdW5zaWduZWQgbG9uZyBfX3IxNTsKKyAgdW5zaWduZWQgbG9uZyBfX3JpcDsKK307CisKK3R5cGVkZWYgc3RydWN0IF9fam1wX2J1ZiBqbXBfYnVmWzFdOworCisjZW5kaWYgLyogX1NFVEpNUF9IICovCitFT0YKK2NhdCA+a2xpYmMvUkVBRE1FIDw8XEVPRgorVGhpcyBpcyBhIHNpbXBsZSByZWFkbWUgZmlsZS4KK0VPRgorCitjYXQgPnBhdGNoIDw8XEVPRgorZGlmZiAtLWdpdCBhL2tsaWJjL2FyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oIGIvaW5jbHVkZS9hcmNoL2NyaXMva2xpYmMvYXJjaHNldGptcC5oCitzaW1pbGFyaXR5IGluZGV4IDc2JQorY29weSBmcm9tIGtsaWJjL2FyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCitjb3B5IHRvIGluY2x1ZGUvYXJjaC9jcmlzL2tsaWJjL2FyY2hzZXRqbXAuaAorLS0tIGEva2xpYmMvYXJjaC94ODZfNjQvaW5jbHVkZS9rbGliYy9hcmNoc2V0am1wLmgKKysrKyBiL2luY2x1ZGUvYXJjaC9jcmlzL2tsaWJjL2FyY2hzZXRqbXAuaAorQEAgLTEsMjEgKzEsMjQgQEAKKyAvKgorLSAqIGFyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCisrICogYXJjaC9jcmlzL2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCisgICovCisKKyAjaWZuZGVmIF9LTElCQ19BUkNIU0VUSk1QX0gKKyAjZGVmaW5lIF9LTElCQ19BUkNIU0VUSk1QX0gKKworIHN0cnVjdCBfX2ptcF9idWYgeworLSAgdW5zaWduZWQgbG9uZyBfX3JieDsKKy0gIHVuc2lnbmVkIGxvbmcgX19yc3A7CistICB1bnNpZ25lZCBsb25nIF9fcmJwOworLSAgdW5zaWduZWQgbG9uZyBfX3IxMjsKKy0gIHVuc2lnbmVkIGxvbmcgX19yMTM7CistICB1bnNpZ25lZCBsb25nIF9fcjE0OworLSAgdW5zaWduZWQgbG9uZyBfX3IxNTsKKy0gIHVuc2lnbmVkIGxvbmcgX19yaXA7CisrICB1bnNpZ25lZCBsb25nIF9fcjA7CisrICB1bnNpZ25lZCBsb25nIF9fcjE7CisrICB1bnNpZ25lZCBsb25nIF9fcjI7CisrICB1bnNpZ25lZCBsb25nIF9fcjM7CisrICB1bnNpZ25lZCBsb25nIF9fcjQ7CisrICB1bnNpZ25lZCBsb25nIF9fcjU7CisrICB1bnNpZ25lZCBsb25nIF9fcjY7CisrICB1bnNpZ25lZCBsb25nIF9fcjc7CisrICB1bnNpZ25lZCBsb25nIF9fcjg7CisrICB1bnNpZ25lZCBsb25nIF9fc3A7CisrICB1bnNpZ25lZCBsb25nIF9fc3JwOworIH07CisKKyB0eXBlZGVmIHN0cnVjdCBfX2ptcF9idWYgam1wX2J1ZlsxXTsKKworLSNlbmRpZiAvKiBfU0VUSk1QX0ggKi8KKysjZW5kaWYgLyogX0tMSUJDX0FSQ0hTRVRKTVBfSCAqLworZGlmZiAtLWdpdCBhL2tsaWJjL2FyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oIGIvaW5jbHVkZS9hcmNoL20zMnIva2xpYmMvYXJjaHNldGptcC5oCitzaW1pbGFyaXR5IGluZGV4IDY2JQorcmVuYW1lIGZyb20ga2xpYmMvYXJjaC94ODZfNjQvaW5jbHVkZS9rbGliYy9hcmNoc2V0am1wLmgKK3JlbmFtZSB0byBpbmNsdWRlL2FyY2gvbTMyci9rbGliYy9hcmNoc2V0am1wLmgKKy0tLSBhL2tsaWJjL2FyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCisrKysgYi9pbmNsdWRlL2FyY2gvbTMyci9rbGliYy9hcmNoc2V0am1wLmgKK0BAIC0xLDIxICsxLDIxIEBACisgLyoKKy0gKiBhcmNoL3g4Nl82NC9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaAorKyAqIGFyY2gvbTMyci9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaAorICAqLworCisgI2lmbmRlZiBfS0xJQkNfQVJDSFNFVEpNUF9ICisgI2RlZmluZSBfS0xJQkNfQVJDSFNFVEpNUF9ICisKKyBzdHJ1Y3QgX19qbXBfYnVmIHsKKy0gIHVuc2lnbmVkIGxvbmcgX19yYng7CistICB1bnNpZ25lZCBsb25nIF9fcnNwOworLSAgdW5zaWduZWQgbG9uZyBfX3JicDsKKysgIHVuc2lnbmVkIGxvbmcgX19yODsKKysgIHVuc2lnbmVkIGxvbmcgX19yOTsKKysgIHVuc2lnbmVkIGxvbmcgX19yMTA7CisrICB1bnNpZ25lZCBsb25nIF9fcjExOworICAgdW5zaWduZWQgbG9uZyBfX3IxMjsKKyAgIHVuc2lnbmVkIGxvbmcgX19yMTM7CisgICB1bnNpZ25lZCBsb25nIF9fcjE0OworICAgdW5zaWduZWQgbG9uZyBfX3IxNTsKKy0gIHVuc2lnbmVkIGxvbmcgX19yaXA7CisgfTsKKworIHR5cGVkZWYgc3RydWN0IF9fam1wX2J1ZiBqbXBfYnVmWzFdOworCistI2VuZGlmIC8qIF9TRVRKTVBfSCAqLworKyNlbmRpZiAvKiBfS0xJQkNfQVJDSFNFVEpNUF9IICovCitkaWZmIC0tZ2l0IGEva2xpYmMvUkVBRE1FIGIva2xpYmMvUkVBRE1FCistLS0gYS9rbGliYy9SRUFETUUKKysrKyBiL2tsaWJjL1JFQURNRQorQEAgLTEsMSArMSw0IEBACisgVGhpcyBpcyBhIHNpbXBsZSByZWFkbWUgZmlsZS4KKytBbmQgd2UgYWRkIGEgZmV3CisrbGluZXMgYXQgdGhlCisrZW5kIG9mIGl0LgorZGlmZiAtLWdpdCBhL2tsaWJjL1JFQURNRSBiL2tsaWJjL2FyY2gvUkVBRE1FCitjb3B5IGZyb20ga2xpYmMvUkVBRE1FCitjb3B5IHRvIGtsaWJjL2FyY2gvUkVBRE1FCistLS0gYS9rbGliYy9SRUFETUUKKysrKyBiL2tsaWJjL2FyY2gvUkVBRE1FCitAQCAtMSwxICsxLDMgQEAKKyBUaGlzIGlzIGEgc2ltcGxlIHJlYWRtZSBmaWxlLgorK0FuZCB3ZSBjb3B5IGl0IHRvIG9uZSBsZXZlbCBkb3duLCBhbmQKKythZGQgYSBmZXcgbGluZXMgYXQgdGhlIGVuZCBvZiBpdC4KK0VPRgorCitmaW5kIGtsaWJjIC10eXBlIGYgLXByaW50IHwgeGFyZ3MgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayByZW5hbWUvY29weSBwYXRjaCcgJ2dpdCBhcHBseSAtLWNoZWNrIHBhdGNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSByZW5hbWUvY29weSBwYXRjaCcgJ2dpdCBhcHBseSAtLWluZGV4IHBhdGNoJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMTMtYXBwbHktZW5kaW5nLnNoIGIvdC90NDExMy1hcHBseS1lbmRpbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjZmYTUxNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTMtYXBwbHktZW5kaW5nLnNoCkBAIC0wLDAgKzEsNTMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgQ2F0YWxpbiBNYXJpbmFzCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSB0cnlpbmcgdG8gYWRkIGFuIGVuZGluZyBsaW5lLgorCisnCisuIC4vdGVzdC1saWIuc2gKKworIyBzZXR1cAorCitjYXQgPnRlc3QtcGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xLDIgKzEsMyBAQAorIGEKKyBiCisrYworRU9GCisKK2VjaG8gJ2EnID5maWxlCitlY2hvICdiJyA+PmZpbGUKK2VjaG8gJ2MnID4+ZmlsZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlJworCisjIHRlc3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYXQgdGhlIGVuZCcgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCB0ZXN0LXBhdGNoJworCitjYXQgPnRlc3QtcGF0Y2ggPDxcRU9GCitkaWZmIGEvZmlsZSBiL2ZpbGUKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xLDIgKzEsMyBAQAorK2EKKyBiCisgYworRU9GCisKK2VjaG8gPmZpbGUgJ2EKK2IKK2MnCitnaXQgdXBkYXRlLWluZGV4IGZpbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYXQgdGhlIGJlZ2lubmluZycgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCB0ZXN0LXBhdGNoJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMTQtYXBwbHktdHlwZWNoYW5nZS5zaCBiL3QvdDQxMTQtYXBwbHktdHlwZWNoYW5nZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYmFkYmMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExNC1hcHBseS10eXBlY2hhbmdlLnNoCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgc2hvdWxkIG5vdCBnZXQgY29uZnVzZWQgd2l0aCB0eXBlIGNoYW5nZXMuCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnkgYW5kIGNvbW1pdHMnICcKKwllY2hvICJoZWxsbyB3b3JsZCIgPiBmb28gJiYKKwllY2hvICJoaSBwbGFuZXQiID4gYmFyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmb28gYmFyICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBpbml0aWFsICYmCisJcm0gLWYgZm9vICYmCisJdGVzdF9sbl9zX2FkZCBiYXIgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAiZm9vIHN5bWxpbmtlZCB0byBiYXIiICYmCisJZ2l0IGJyYW5jaCBmb28tc3ltbGlua2VkLXRvLWJhciAmJgorCWdpdCBybSAtZiBmb28gJiYKKwllY2hvICJob3cgZmFyIGlzIHRoZSBzdW4/IiA+IGZvbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAiZm9vIGJhY2sgdG8gZmlsZSIgJiYKKwlnaXQgYnJhbmNoIGZvby1iYWNrLXRvLWZpbGUgJiYKKwlwcmludGYgIlwwIiA+IGZvbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAiZm9vIGJlY29tZXMgYmluYXJ5IiAmJgorCWdpdCBicmFuY2ggZm9vLWJlY29tZXMtYmluYXJ5ICYmCisJcm0gLWYgZm9vICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBmb28gJiYKKwlta2RpciBmb28gJiYKKwllY2hvICJpZiBvbmx5IEkga25ldyIgPiBmb28vYmF6ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmb28vYmF6ICYmCisJZ2l0IGNvbW1pdCAtbSAiZm9vIGJlY29tZXMgYSBkaXJlY3RvcnkiICYmCisJZ2l0IGJyYW5jaCAiZm9vLWJlY29tZXMtYS1kaXJlY3RvcnkiICYmCisJZWNobyAiaGVsbG8gd29ybGQiID4gZm9vL2JheiAmJgorCWdpdCB1cGRhdGUtaW5kZXggZm9vL2JheiAmJgorCWdpdCBjb21taXQgLW0gImZvby9iYXogaXMgdGhlIG9yaWdpbmFsIGZvbyIgJiYKKwlnaXQgYnJhbmNoIGZvby1iYXotcmVuYW1lZC1mcm9tLWZvbworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSByZW5hbWVkIGZyb20gZm9vIHRvIGZvby9iYXonICcKKwlnaXQgY2hlY2tvdXQgLWYgaW5pdGlhbCAmJgorCWdpdCBkaWZmLXRyZWUgLU0gLXAgSEVBRCBmb28tYmF6LXJlbmFtZWQtZnJvbS1mb28gPiBwYXRjaCAmJgorCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKKwknCit0ZXN0X2RlYnVnICdjYXQgcGF0Y2gnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSByZW5hbWVkIGZyb20gZm9vL2JheiB0byBmb28nICcKKwlnaXQgY2hlY2tvdXQgLWYgZm9vLWJhei1yZW5hbWVkLWZyb20tZm9vICYmCisJZ2l0IGRpZmYtdHJlZSAtTSAtcCBIRUFEIGluaXRpYWwgPiBwYXRjaCAmJgorCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKKwknCit0ZXN0X2RlYnVnICdjYXQgcGF0Y2gnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlyZWN0b3J5IGJlY29tZXMgZmlsZScgJworCWdpdCBjaGVja291dCAtZiBmb28tYmVjb21lcy1hLWRpcmVjdG9yeSAmJgorCWdpdCBkaWZmLXRyZWUgLXAgSEVBRCBpbml0aWFsID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgYmVjb21lcyBkaXJlY3RvcnknICcKKwlnaXQgY2hlY2tvdXQgLWYgaW5pdGlhbCAmJgorCWdpdCBkaWZmLXRyZWUgLXAgSEVBRCBmb28tYmVjb21lcy1hLWRpcmVjdG9yeSA+IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaAorCScKK3Rlc3RfZGVidWcgJ2NhdCBwYXRjaCcKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGJlY29tZXMgc3ltbGluaycgJworCWdpdCBjaGVja291dCAtZiBpbml0aWFsICYmCisJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEIGZvby1zeW1saW5rZWQtdG8tYmFyID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWxpbmsgYmVjb21lcyBmaWxlJyAnCisJZ2l0IGNoZWNrb3V0IC1mIGZvby1zeW1saW5rZWQtdG8tYmFyICYmCisJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEIGZvby1iYWNrLXRvLWZpbGUgPiBwYXRjaCAmJgorCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKKwknCit0ZXN0X2RlYnVnICdjYXQgcGF0Y2gnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JpbmFyeSBmaWxlIGJlY29tZXMgc3ltbGluaycgJworCWdpdCBjaGVja291dCAtZiBmb28tYmVjb21lcy1iaW5hcnkgJiYKKwlnaXQgZGlmZi10cmVlIC1wIC0tYmluYXJ5IEhFQUQgZm9vLXN5bWxpbmtlZC10by1iYXIgPiBwYXRjaCAmJgorCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKKwknCit0ZXN0X2RlYnVnICdjYXQgcGF0Y2gnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWxpbmsgYmVjb21lcyBiaW5hcnkgZmlsZScgJworCWdpdCBjaGVja291dCAtZiBmb28tc3ltbGlua2VkLXRvLWJhciAmJgorCWdpdCBkaWZmLXRyZWUgLXAgLS1iaW5hcnkgSEVBRCBmb28tYmVjb21lcy1iaW5hcnkgPiBwYXRjaCAmJgorCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKKwknCit0ZXN0X2RlYnVnICdjYXQgcGF0Y2gnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltbGluayBiZWNvbWVzIGRpcmVjdG9yeScgJworCWdpdCBjaGVja291dCAtZiBmb28tc3ltbGlua2VkLXRvLWJhciAmJgorCWdpdCBkaWZmLXRyZWUgLXAgSEVBRCBmb28tYmVjb21lcy1hLWRpcmVjdG9yeSA+IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaAorCScKK3Rlc3RfZGVidWcgJ2NhdCBwYXRjaCcKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXJlY3RvcnkgYmVjb21lcyBzeW1saW5rJyAnCisJZ2l0IGNoZWNrb3V0IC1mIGZvby1iZWNvbWVzLWEtZGlyZWN0b3J5ICYmCisJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEIGZvby1zeW1saW5rZWQtdG8tYmFyID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDExNS1hcHBseS1zeW1saW5rLnNoIGIvdC90NDExNS1hcHBseS1zeW1saW5rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3MmZjZGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTE1LWFwcGx5LXN5bWxpbmsuc2gKQEAgLTAsMCArMSw0NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgc3ltbGlua3MgYW5kIHBhcnRpYWwgZmlsZXMKKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwl0ZXN0X2xuX3NfYWRkIHBhdGgxL3BhdGgyL3BhdGgzL3BhdGg0L3BhdGg1IGxpbmsxICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKworCXJtIC1mIGxpbms/ICYmCisKKwl0ZXN0X2xuX3NfYWRkIGh0YXA2IGxpbmsxICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKworCWdpdCBkaWZmLXRyZWUgLXAgSEVBRF4gSEVBRCA+cGF0Y2ggICYmCisJZ2l0IGFwcGx5IC0tc3RhdCAtLXN1bW1hcnkgcGF0Y2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdhcHBseSBzeW1saW5rIHBhdGNoJyAnCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBhcHBseSBwYXRjaCAmJgorCWdpdCBkaWZmLWZpbGVzIC1wID5wYXRjaGVkICYmCisJdGVzdF9jbXAgcGF0Y2ggcGF0Y2hlZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0taW5kZXggc3ltbGluayBwYXRjaCcgJworCisJZ2l0IGNoZWNrb3V0IC1mIHNpZGUgJiYKKwlnaXQgYXBwbHkgLS1pbmRleCBwYXRjaCAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC1wIEhFQUQgPnBhdGNoZWQgJiYKKwl0ZXN0X2NtcCBwYXRjaCBwYXRjaGVkCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTE2LWFwcGx5LXJldmVyc2Uuc2ggYi90L3Q0MTE2LWFwcGx5LXJldmVyc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjk5ZTY1YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTYtYXBwbHktcmV2ZXJzZS5zaApAQCAtMCwwICsxLDkxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBpbiByZXZlcnNlCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZm9yIGkgaW4gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuOyBkbyBlY2hvICRpOyBkb25lID5maWxlMSAmJgorCXBlcmwgLXBlICJ5L2lqay9cXDAwMFxcMDAxXFwwMDIvIiA8ZmlsZTEgPmZpbGUyICYmCisKKwlnaXQgYWRkIGZpbGUxIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisKKwlmb3IgaSBpbiBhIGIgYyBnIGggaSBKIEsgTCBtIG8gbiBwIHE7IGRvIGVjaG8gJGk7IGRvbmUgPmZpbGUxICYmCisJcGVybCAtcGUgInkvbW9uL1xcMDAwXFwwMDFcXDAwMi8iIDxmaWxlMSA+ZmlsZTIgJiYKKworCWdpdCBjb21taXQgLWEgLW0gc2Vjb25kICYmCisJZ2l0IHRhZyBzZWNvbmQgJiYKKworCWdpdCBkaWZmIC0tYmluYXJ5IGluaXRpYWwgc2Vjb25kID5wYXRjaAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGluIGZvcndhcmQnICcKKworCVQwPSQoZ2l0IHJldi1wYXJzZSAic2Vjb25kXnt0cmVlfSIpICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IGFwcGx5IC0taW5kZXggLS1iaW5hcnkgcGF0Y2ggJiYKKwlUMT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXRlc3QgIiRUMCIgPSAiJFQxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBpbiByZXZlcnNlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkIHNlY29uZCAmJgorCWdpdCBhcHBseSAtLXJldmVyc2UgLS1iaW5hcnkgLS1pbmRleCBwYXRjaCAmJgorCWdpdCBkaWZmID5kaWZmICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGRpZmYKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzZXBhcmF0ZSByZXBvc2l0b3J5IGxhY2tpbmcgcG9zdGltYWdlJyAnCisKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1wcmVmaXg9aW5pdGlhbC8gaW5pdGlhbCB8ICRUQVIgeGYgLSAmJgorCSgKKwkJY2QgaW5pdGlhbCAmJiBnaXQgaW5pdCAmJiBnaXQgYWRkIC4KKwkpICYmCisKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1wcmVmaXg9c2Vjb25kLyBzZWNvbmQgfCAkVEFSIHhmIC0gJiYKKwkoCisJCWNkIHNlY29uZCAmJiBnaXQgaW5pdCAmJiBnaXQgYWRkIC4KKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgaW4gZm9yd2FyZCB3aXRob3V0IHBvc3RpbWFnZScgJworCisJVDA9JChnaXQgcmV2LXBhcnNlICJzZWNvbmRee3RyZWV9IikgJiYKKwkoCisJCWNkIGluaXRpYWwgJiYKKwkJZ2l0IGFwcGx5IC0taW5kZXggLS1iaW5hcnkgLi4vcGF0Y2ggJiYKKwkJVDE9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJdGVzdCAiJFQwIiA9ICIkVDEiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBpbiByZXZlcnNlIHdpdGhvdXQgcG9zdGltYWdlJyAnCisKKwlUMD0kKGdpdCByZXYtcGFyc2UgImluaXRpYWxee3RyZWV9IikgJiYKKwkoCisJCWNkIHNlY29uZCAmJgorCQlnaXQgYXBwbHkgLS1pbmRleCAtLWJpbmFyeSAtLXJldmVyc2UgLi4vcGF0Y2ggJiYKKwkJVDE9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJdGVzdCAiJFQwIiA9ICIkVDEiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnNpbmcgYSB3aGl0ZXNwYWNlIGludHJvZHVjdGlvbicgJworCXNlZCAicy9hL2EgLyIgPCBmaWxlMSA+IGZpbGUxLm5ldyAmJgorCW12IGZpbGUxLm5ldyBmaWxlMSAmJgorCWdpdCBkaWZmIHwgZ2l0IGFwcGx5IC0tcmV2ZXJzZSAtLXdoaXRlc3BhY2U9ZXJyb3IKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTE3LWFwcGx5LXJlamVjdC5zaCBiL3QvdDQxMTctYXBwbHktcmVqZWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBlZTkzZmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTE3LWFwcGx5LXJlamVjdC5zaApAQCAtMCwwICsxLDExOSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgd2l0aCByZWplY3RzCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIDIxCisJZG8KKwkJZWNobyAkaQorCWRvbmUgPmZpbGUxICYmCisJY2F0IGZpbGUxID5zYXZlZC5maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCWZvciBpIGluIDEgMiBBIEIgNCA1IDYgNyA4IDkgMTAgMTEgMTIgQyAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMCBEIDIxCisJZG8KKwkJZWNobyAkaQorCWRvbmUgPmZpbGUxICYmCisJZ2l0IGRpZmYgPnBhdGNoLjEgJiYKKwljYXQgZmlsZTEgPmNsZWFuICYmCisKKwlmb3IgaSBpbiAxIEUgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIEMgMTMgMTQgMTUgMTYgMTcgMTggMTkgMjAgRiAyMQorCWRvCisJCWVjaG8gJGkKKwlkb25lID5leHBlY3RlZCAmJgorCisJbXYgZmlsZTEgZmlsZTIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIGZpbGUxIGZpbGUyICYmCisJZ2l0IGRpZmYgLU0gSEVBRCA+cGF0Y2guMiAmJgorCisJcm0gLWYgZmlsZTEgZmlsZTIgJiYKKwltdiBzYXZlZC5maWxlMSBmaWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgZmlsZTEgZmlsZTIgJiYKKworCWZvciBpIGluIDEgRSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMTggMTkgMjAgRiAyMQorCWRvCisJCWVjaG8gJGkKKwlkb25lID5maWxlMSAmJgorCisJY2F0IGZpbGUxID5zYXZlZC5maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLXJlamVjdCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLTN3YXknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNhdCBzYXZlZC5maWxlMSA+ZmlsZTEiICYmCisJZ2l0IGRpZmYgPnBhdGNoLjAgJiYKKwlnaXQgY2hlY2tvdXQgZmlsZTEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1yZWplY3QgLS0zd2F5IHBhdGNoLjAgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRob3V0IC0tcmVqZWN0IHNob3VsZCBmYWlsJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2guMSAmJgorCXRlc3RfY21wIGZpbGUxIHNhdmVkLmZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGhvdXQgLS1yZWplY3Qgc2hvdWxkIGZhaWwnICcKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXZlcmJvc2UgcGF0Y2guMSAmJgorCXRlc3RfY21wIGZpbGUxIHNhdmVkLmZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGggLS1yZWplY3Qgc2hvdWxkIGZhaWwgYnV0IHVwZGF0ZSB0aGUgZmlsZScgJworCisJY2F0IHNhdmVkLmZpbGUxID5maWxlMSAmJgorCXJtIC1mIGZpbGUxLnJlaiBmaWxlMi5yZWogJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXJlamVjdCBwYXRjaC4xICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZTEgJiYKKworCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxLnJlaiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUyLnJlagorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIC0tcmVqZWN0IHNob3VsZCBmYWlsIGJ1dCB1cGRhdGUgdGhlIGZpbGUnICcKKworCWNhdCBzYXZlZC5maWxlMSA+ZmlsZTEgJiYKKwlybSAtZiBmaWxlMS5yZWogZmlsZTIucmVqIGZpbGUyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1yZWplY3QgcGF0Y2guMiA+cmVqZWN0cyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUxICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZTIgJiYKKworCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyLnJlaiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUxLnJlagorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoZSBzYW1lIHRlc3Qgd2l0aCAtLXZlcmJvc2UnICcKKworCWNhdCBzYXZlZC5maWxlMSA+ZmlsZTEgJiYKKwlybSAtZiBmaWxlMS5yZWogZmlsZTIucmVqIGZpbGUyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1yZWplY3QgLS12ZXJib3NlIHBhdGNoLjIgPnJlamVjdHMgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUyICYmCisKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMi5yZWogJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMS5yZWoKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBjbGVhbmx5IHdpdGggLS12ZXJib3NlJyAnCisKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRDpmaWxlMSA+ZmlsZTEgJiYKKwlybSAtZiBmaWxlPy5yZWogZmlsZTIgJiYKKworCWdpdCBhcHBseSAtLXZlcmJvc2UgcGF0Y2guMSAmJgorCisJdGVzdF9jbXAgZmlsZTEgY2xlYW4KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTE4LWFwcGx5LWVtcHR5LWNvbnRleHQuc2ggYi90L3Q0MTE4LWFwcGx5LWVtcHR5LWNvbnRleHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjVmMmU0YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTgtYXBwbHktZW1wdHktY29udGV4dC5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSB3aXRoIG5ldyBzdHlsZSBHTlUgZGlmZiB3aXRoIGVtcHR5IGNvbnRleHQKKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJeworCQllY2hvOyBlY2hvOworCQllY2hvIEE7IGVjaG8gQjsgZWNobyBDOworCQllY2hvOworCX0gPmZpbGUxICYmCisJY2F0IGZpbGUxID5maWxlMS5vcmlnICYmCisJeworCQljYXQgZmlsZTEgJiYKKwkJZWNobyBRIHwgdHIgLWQgIlxcMDEyIgorCX0gPmZpbGUyICYmCisJY2F0IGZpbGUyID5maWxlMi5vcmlnICYmCisJZ2l0IGFkZCBmaWxlMSBmaWxlMiAmJgorCXNlZCAtZSAiL15CL2QiIDxmaWxlMS5vcmlnID5maWxlMSAmJgorCWNhdCBmaWxlMSA+IGZpbGUyICYmCisJZWNobyBRIHwgdHIgLWQgIlxcMDEyIiA+PmZpbGUyICYmCisJY2F0IGZpbGUxID5maWxlMS5tb2RzICYmCisJY2F0IGZpbGUyID5maWxlMi5tb2RzICYmCisJZ2l0IGRpZmYgfAorCXNlZCAtZSAicy9eIFwkLy8iID5kaWZmLm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLW51bXN0YXQnICcKKworCWdpdCBhcHBseSAtLW51bXN0YXQgZGlmZi5vdXRwdXQgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiMAkxCWZpbGUxIiAmJgorCQllY2hvICIwCTEJZmlsZTIiCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tYXBwbHknICcKKworCWNhdCBmaWxlMS5vcmlnID5maWxlMSAmJgorCWNhdCBmaWxlMi5vcmlnID5maWxlMiAmJgorCWdpdCB1cGRhdGUtaW5kZXggZmlsZTEgZmlsZTIgJiYKKwlnaXQgYXBwbHkgLS1pbmRleCBkaWZmLm91dHB1dCAmJgorCXRlc3RfY21wIGZpbGUxLm1vZHMgZmlsZTEgJiYKKwl0ZXN0X2NtcCBmaWxlMi5tb2RzIGZpbGUyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDExOS1hcHBseS1jb25maWcuc2ggYi90L3Q0MTE5LWFwcGx5LWNvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOWEwNTgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExOS1hcHBseS1jb25maWcuc2gKQEAgLTAsMCArMSwxNzkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1zdHJpcCBhbmQgY29uZmlndXJhdGlvbiBmaWxlLgorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBzdWIgJiYKKwllY2hvIEEgPnN1Yi9maWxlMSAmJgorCWNwIHN1Yi9maWxlMSBzYXZlZCAmJgorCWdpdCBhZGQgc3ViL2ZpbGUxICYmCisJZWNobyAiQiAiID5zdWIvZmlsZTEgJiYKKwlnaXQgZGlmZiA+cGF0Y2guZmlsZQorJworCisjIEFsc28gaGFuZGNyYWZ0IEdOVSBkaWZmIG91dHB1dDsgbm90ZSB0aGlzIGhhcyB0cmFpbGluZyB3aGl0ZXNwYWNlLgordHIgJ18nICcgJyA+Z3BhdGNoLmZpbGUgPDxcRU9GICYmCistLS0gZmlsZTEJMjAwNy0wMi0yMSAwMTowNDoyNC4wMDAwMDAwMDAgLTA4MDAKKysrKyBmaWxlMSsJMjAwNy0wMi0yMSAwMTowNzo0NC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xICsxIEBACistQQorK0JfCitFT0YKKworc2VkIC1lICdzfGZpbGUxfHN1Yi8mfCcgZ3BhdGNoLmZpbGUgPmdwYXRjaC1zdWIuZmlsZSAmJgorc2VkIC1lICcKKwkvXi0tLSAvc3xmaWxlMXxhL3N1Yi8mfAorCS9eKysrIC9zfGZpbGUxfGIvc3ViLyZ8CisnIGdwYXRjaC5maWxlID5ncGF0Y2gtYWItc3ViLmZpbGUgJiYKKworY2hlY2tfcmVzdWx0ICgpIHsKKwlpZiBncmVwICIgIiAiJDEiCisJdGhlbgorCQllY2hvICJFaD8iCisJCWZhbHNlCisJZWxpZiBncmVwIEIgIiQxIgorCXRoZW4KKwkJZWNobyBIYXBweQorCWVsc2UKKwkJZWNobyAiSHVoPyIKKwkJZmFsc2UKKwlmaQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAnICcKKworCXJtIC1mIHN1Yi9maWxlMSAmJgorCWNwIHNhdmVkIHN1Yi9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPXN0cmlwIHBhdGNoLmZpbGUgJiYKKwljaGVja19yZXN1bHQgc3ViL2ZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0td2hpdGVzcGFjZT1zdHJpcCBmcm9tIGNvbmZpZycgJworCisJcm0gLWYgc3ViL2ZpbGUxICYmCisJY3Agc2F2ZWQgc3ViL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWdpdCBjb25maWcgYXBwbHkud2hpdGVzcGFjZSBzdHJpcCAmJgorCWdpdCBhcHBseSBwYXRjaC5maWxlICYmCisJY2hlY2tfcmVzdWx0IHN1Yi9maWxlMQorJworCitEPSQocHdkKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAgaW4gc3ViZGlyJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBhcHBseS53aGl0ZXNwYWNlICYmCisJcm0gLWYgc3ViL2ZpbGUxICYmCisJY3Agc2F2ZWQgc3ViL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWNkIHN1YiAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAgLi4vcGF0Y2guZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAgZnJvbSBjb25maWcgaW4gc3ViZGlyJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGNvbmZpZyBhcHBseS53aGl0ZXNwYWNlIHN0cmlwICYmCisJcm0gLWYgc3ViL2ZpbGUxICYmCisJY3Agc2F2ZWQgc3ViL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWNkIHN1YiAmJgorCWdpdCBhcHBseSAuLi9wYXRjaC5maWxlICYmCisJY2hlY2tfcmVzdWx0IGZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUgaW4gc3ViZGlyIGJ1dCB3aXRoIHRyYWRpdGlvbmFsIHBhdGNoIGlucHV0JyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGNvbmZpZyBhcHBseS53aGl0ZXNwYWNlIHN0cmlwICYmCisJcm0gLWYgc3ViL2ZpbGUxICYmCisJY3Agc2F2ZWQgc3ViL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWNkIHN1YiAmJgorCWdpdCBhcHBseSAuLi9ncGF0Y2guZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIGJ1dCB3aXRoIHRyYWRpdGlvbmFsIHBhdGNoIGlucHV0IG9mIGRlcHRoIDEnICcKKworCWNkICIkRCIgJiYKKwlnaXQgY29uZmlnIGFwcGx5LndoaXRlc3BhY2Ugc3RyaXAgJiYKKwlybSAtZiBzdWIvZmlsZTEgJiYKKwljcCBzYXZlZCBzdWIvZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJY2Qgc3ViICYmCisJZ2l0IGFwcGx5IC4uL2dwYXRjaC1zdWIuZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIGJ1dCB3aXRoIHRyYWRpdGlvbmFsIHBhdGNoIGlucHV0IG9mIGRlcHRoIDInICcKKworCWNkICIkRCIgJiYKKwlnaXQgY29uZmlnIGFwcGx5LndoaXRlc3BhY2Ugc3RyaXAgJiYKKwlybSAtZiBzdWIvZmlsZTEgJiYKKwljcCBzYXZlZCBzdWIvZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJY2Qgc3ViICYmCisJZ2l0IGFwcGx5IC4uL2dwYXRjaC1hYi1zdWIuZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIGJ1dCB3aXRoIHRyYWRpdGlvbmFsIHBhdGNoIGlucHV0IG9mIGRlcHRoIDEnICcKKworCWNkICIkRCIgJiYKKwlnaXQgY29uZmlnIGFwcGx5LndoaXRlc3BhY2Ugc3RyaXAgJiYKKwlybSAtZiBzdWIvZmlsZTEgJiYKKwljcCBzYXZlZCBzdWIvZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJZ2l0IGFwcGx5IC1wMCBncGF0Y2gtc3ViLmZpbGUgJiYKKwljaGVja19yZXN1bHQgc3ViL2ZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUgYnV0IHdpdGggdHJhZGl0aW9uYWwgcGF0Y2ggaW5wdXQgb2YgZGVwdGggMicgJworCisJY2QgIiREIiAmJgorCWdpdCBjb25maWcgYXBwbHkud2hpdGVzcGFjZSBzdHJpcCAmJgorCXJtIC1mIHN1Yi9maWxlMSAmJgorCWNwIHNhdmVkIHN1Yi9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwlnaXQgYXBwbHkgZ3BhdGNoLWFiLXN1Yi5maWxlICYmCisJY2hlY2tfcmVzdWx0IHN1Yi9maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbiBzdWJkaXIgd2l0aCB0cmFkaXRpb25hbCBwYXRjaCBpbnB1dCcgJworCWNkICIkRCIgJiYKKwlnaXQgY29uZmlnIGFwcGx5LndoaXRlc3BhY2Ugc3RyaXAgJiYKKwljYXQgPi5naXRhdHRyaWJ1dGVzIDw8LUVPRiAmJgorCS8qIHdoaXRlc3BhY2U9YmxhbmstYXQtZW9sCisJc3ViLyogd2hpdGVzcGFjZT0tYmxhbmstYXQtZW9sCisJRU9GCisJcm0gLWYgc3ViL2ZpbGUxICYmCisJY3Agc2F2ZWQgc3ViL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWNkIHN1YiAmJgorCWdpdCBhcHBseSAuLi9ncGF0Y2guZmlsZSAmJgorCWVjaG8gIkIgIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUxCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyMC1hcHBseS1wb3B0LnNoIGIvdC90NDEyMC1hcHBseS1wb3B0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ5N2I2MjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTIwLWFwcGx5LXBvcHQuc2gKQEAgLTAsMCArMSw4OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBTaGF3biBPLiBQZWFyY2UKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IC1wIGhhbmRsaW5nLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIHN1YiAmJgorCWVjaG8gQSA+c3ViL2ZpbGUxICYmCisJY3Agc3ViL2ZpbGUxIGZpbGUxLnNhdmVkICYmCisJZ2l0IGFkZCBzdWIvZmlsZTEgJiYKKwllY2hvIEIgPnN1Yi9maWxlMSAmJgorCWdpdCBkaWZmID5wYXRjaC5maWxlICYmCisJZ2l0IGNoZWNrb3V0IC0tIHN1Yi9maWxlMSAmJgorCWdpdCBtdiBzdWIgc8O8YiAmJgorCWVjaG8gQiA+c8O8Yi9maWxlMSAmJgorCWdpdCBkaWZmID5wYXRjaC5lc2NhcGVkICYmCisJZ3JlcCAiW1xdIiBwYXRjaC5lc2NhcGVkICYmCisJcm0gc8O8Yi9maWxlMSAmJgorCXJtZGlyIHPDvGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZ2l0IGRpZmYgd2l0aCAtcDInICcKKwljcCBmaWxlMS5zYXZlZCBmaWxlMSAmJgorCWdpdCBhcHBseSAtcDIgcGF0Y2guZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIHRvbyBsYXJnZSAtcCcgJworCWNwIGZpbGUxLnNhdmVkIGZpbGUxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tc3RhdCAtcDMgcGF0Y2guZmlsZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInJlbW92aW5nIDMgbGVhZGluZyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5ICgtcDIpIHRyYWRpdGlvbmFsIGRpZmYgd2l0aCBmdW5ueSBmaWxlbmFtZXMnICcKKwljYXQgPnBhdGNoLnF1b3RlcyA8PC1cRU9GICYmCisJZGlmZiAtdSAiYS8ic3ViL2ZpbGUxICJiLyJzdWIvZmlsZTEKKwktLS0gImEvInN1Yi9maWxlMQorCSsrKyAiYi8ic3ViL2ZpbGUxCisJQEAgLTEgKzEgQEAKKwktQQorCStCCisJRU9GCisJZWNobyBCID5leHBlY3RlZCAmJgorCisJY3AgZmlsZTEuc2F2ZWQgZmlsZTEgJiYKKwlnaXQgYXBwbHkgLXAyIHBhdGNoLnF1b3RlcyAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGggdG9vIGxhcmdlIC1wIGFuZCBmYW5jeSBmaWxlbmFtZScgJworCWNwIGZpbGUxLnNhdmVkIGZpbGUxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tc3RhdCAtcDMgcGF0Y2guZXNjYXBlZCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInJlbW92aW5nIDMgbGVhZGluZyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5ICgtcDIpIGRpZmYsIG1vZGUgY2hhbmdlIG9ubHknICcKKwljYXQgPnBhdGNoLmNobW9kIDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvc3ViL2ZpbGUxIGIvc3ViL2ZpbGUxCisJb2xkIG1vZGUgMTAwNjQ0CisJbmV3IG1vZGUgMTAwNzU1CisJRU9GCisJdGVzdF9jaG1vZCAteCBmaWxlMSAmJgorCWdpdCBhcHBseSAtLWluZGV4IC1wMiBwYXRjaC5jaG1vZCAmJgorCWNhc2UgJChnaXQgbHMtZmlsZXMgLXMgZmlsZTEpIGluIDEwMDc1NSopIDogZ29vZDs7ICopIGZhbHNlOzsgZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdmaWxlIG1vZGUgd2FzIGNoYW5nZWQnICcKKwl0ZXN0IC14IGZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5ICgtcDIpIGRpZmYsIHJlbmFtZScgJworCWNhdCA+cGF0Y2gucmVuYW1lIDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvc3ViL2ZpbGUxIGIvc3ViL2ZpbGUyCisJc2ltaWxhcml0eSBpbmRleCAxMDAlCisJcmVuYW1lIGZyb20gc3ViL2ZpbGUxCisJcmVuYW1lIHRvIHN1Yi9maWxlMgorCUVPRgorCWVjaG8gQSA+ZXhwZWN0ZWQgJiYKKworCWNwIGZpbGUxLnNhdmVkIGZpbGUxICYmCisJcm0gLWYgZmlsZTIgJiYKKwlnaXQgYXBwbHkgLXAyIHBhdGNoLnJlbmFtZSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyMS1hcHBseS1kaWZmcy5zaCBiL3QvdDQxMjEtYXBwbHktZGlmZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjYzNjhlZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMjEtYXBwbHktZGlmZnMuc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBmb3IgY29udGV4dHVhbGx5IGluZGVwZW5kZW50IGRpZmZzJworLiAuL3Rlc3QtbGliLnNoCisKK2VjaG8gJzEKKzIKKzMKKzQKKzUKKzYKKzcKKzgnID5maWxlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyBcCisJJ2dpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLXEgLW0gMSAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0ICYmCisJbXYgZmlsZSBmaWxlLnRtcCAmJgorCWVjaG8gMCA+ZmlsZSAmJgorCWNhdCBmaWxlLnRtcCA+PmZpbGUgJiYKKwlybSBmaWxlLnRtcCAmJgorCWdpdCBjb21taXQgLWEgLXEgLW0gMiAmJgorCWVjaG8gOSA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1xIC1tIDMgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY2hlY2sgaWYgY29udGV4dHVhbGx5IGluZGVwZW5kZW50IGRpZmZzIGZvciB0aGUgc2FtZSBmaWxlIGFwcGx5JyBcCisJJyggZ2l0IGRpZmYgdGVzdH4yIHRlc3R+MSAmJiBnaXQgZGlmZiB0ZXN0fjEgdGVzdH4wICl8IGdpdCBhcHBseScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTIyLWFwcGx5LXN5bWxpbmstaW5zaWRlLnNoIGIvdC90NDEyMi1hcHBseS1zeW1saW5rLWluc2lkZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YWNiM2YzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyMi1hcHBseS1zeW1saW5rLWluc2lkZS5zaApAQCAtMCwwICsxLDE1NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FwcGx5IHRvIGRlZXBlciBkaXJlY3Rvcnkgd2l0aG91dCBnZXR0aW5nIGZvb2xlZCB3aXRoIHN5bWxpbmsnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlta2RpciAtcCBhcmNoL2kzODYvYm9vdCBhcmNoL3g4Nl82NCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1ID5hcmNoL2kzODYvYm9vdC9NYWtlZmlsZSAmJgorCXRlc3RfbG5fc19hZGQgLi4vaTM4Ni9ib290IGFyY2gveDg2XzY0L2Jvb3QgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHRlc3QgJiYKKworCXJtIGFyY2gveDg2XzY0L2Jvb3QgJiYKKwlta2RpciBhcmNoL3g4Nl82NC9ib290ICYmCisJdGVzdF93cml0ZV9saW5lcyAyIDMgNCA1IDYgPmFyY2gveDg2XzY0L2Jvb3QvTWFrZWZpbGUgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNlY29uZCAmJgorCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWJpbmFyeSAtMSAtLXN0ZG91dCA+dGVzdC5wYXRjaAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgYXBwbHkgJworCisJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSB0ZXN0ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgLS1jYWNoZWQgdGVzdCAmJgorCWdpdCBhcHBseSAtLWluZGV4IHRlc3QucGF0Y2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayByZXN1bHQnICcKKworCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlciAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIC0tY2FjaGVkIG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gcmVwbGF5ICYmCisJVDE9JChnaXQgcmV2LXBhcnNlICJtYXN0ZXJee3RyZWV9IikgJiYKKwlUMj0kKGdpdCByZXYtcGFyc2UgIkhFQURee3RyZWV9IikgJiYKKwl0ZXN0ICJ6JFQxIiA9ICJ6JFQyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RvIG5vdCByZWFkIGZyb20gYmV5b25kIHN5bWJvbGljIGxpbmsnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJbWtkaXIgLXAgYXJjaC94ODZfNjQvZGlyICYmCisJPmFyY2gveDg2XzY0L2Rpci9maWxlICYmCisJZ2l0IGFkZCBhcmNoL3g4Nl82NC9kaXIvZmlsZSAmJgorCWVjaG8gbGluZSA+YXJjaC94ODZfNjQvZGlyL2ZpbGUgJiYKKwlnaXQgZGlmZiA+cGF0Y2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwlta2RpciBhcmNoL2kzODYvZGlyICYmCisJPmFyY2gvaTM4Ni9kaXIvZmlsZSAmJgorCWxuIC1zIC4uL2kzODYvZGlyIGFyY2gveDg2XzY0L2RpciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2FjaGVkIHBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkbyBub3QgZm9sbG93IHN5bWJvbGljIGxpbmsgKHNldHVwKScgJworCisJcm0gLXJmIGFyY2gvaTM4Ni9kaXIgYXJjaC94ODZfNjQvZGlyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWxuIC1zIC4uL2kzODYvZGlyIGFyY2gveDg2XzY0L2RpciAmJgorCWdpdCBhZGQgYXJjaC94ODZfNjQvZGlyICYmCisJZ2l0IGRpZmYgSEVBRCA+YWRkX3N5bWxpbmsucGF0Y2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwlta2RpciBhcmNoL3g4Nl82NC9kaXIgJiYKKwk+YXJjaC94ODZfNjQvZGlyL2ZpbGUgJiYKKwlnaXQgYWRkIGFyY2gveDg2XzY0L2Rpci9maWxlICYmCisJZ2l0IGRpZmYgSEVBRCA+YWRkX2ZpbGUucGF0Y2ggJiYKKwlnaXQgZGlmZiAtUiBIRUFEID5kZWxfZmlsZS5wYXRjaCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZnIgYXJjaC94ODZfNjQvZGlyICYmCisKKwljYXQgYWRkX3N5bWxpbmsucGF0Y2ggYWRkX2ZpbGUucGF0Y2ggPnBhdGNoICYmCisJY2F0IGFkZF9zeW1saW5rLnBhdGNoIGRlbF9maWxlLnBhdGNoID50cmlja3lfZGVsICYmCisKKwlta2RpciBhcmNoL2kzODYvZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RvIG5vdCBmb2xsb3cgc3ltYm9saWMgbGluayAoc2FtZSBpbnB1dCknICcKKworCSMgc2FtZSBpbnB1dCBjcmVhdGVzIGEgY29uZnVzaW5nIHN5bWJvbGljIGxpbmsKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggMj5lcnJvci13dCAmJgorCXRlc3RfaTE4bmdyZXAgImJleW9uZCBhIHN5bWJvbGljIGxpbmsiIGVycm9yLXd0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYXJjaC94ODZfNjQvZGlyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYXJjaC9pMzg2L2Rpci9maWxlICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCBwYXRjaCAyPmVycm9yLWl4ICYmCisJdGVzdF9pMThuZ3JlcCAiYmV5b25kIGEgc3ltYm9saWMgbGluayIgZXJyb3ItaXggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhcmNoL3g4Nl82NC9kaXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhcmNoL2kzODYvZGlyL2ZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGFyY2gveDg2XzY0L2RpciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYXJjaC9pMzg2L2RpciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2FjaGVkIHBhdGNoIDI+ZXJyb3ItY3QgJiYKKwl0ZXN0X2kxOG5ncmVwICJiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIiBlcnJvci1jdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYXJjaC94ODZfNjQvZGlyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBhcmNoL2kzODYvZGlyICYmCisKKwk+YXJjaC9pMzg2L2Rpci9maWxlICYmCisJZ2l0IGFkZCBhcmNoL2kzODYvZGlyL2ZpbGUgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSB0cmlja3lfZGVsICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYXJjaC9pMzg2L2Rpci9maWxlICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCB0cmlja3lfZGVsICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYXJjaC9pMzg2L2Rpci9maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBhcmNoL3g4Nl82NC9kaXIgJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGFyY2gvaTM4Ni9kaXIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNhY2hlZCB0cmlja3lfZGVsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBhcmNoL3g4Nl82NC9kaXIgJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGFyY2gvaTM4Ni9kaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZG8gbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rIChleGlzdGluZyknICcKKworCSMgZXhpc3Rpbmcgc3ltYm9saWMgbGluaworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlsbiAtcyAuLi9pMzg2L2RpciBhcmNoL3g4Nl82NC9kaXIgJiYKKwlnaXQgYWRkIGFyY2gveDg2XzY0L2RpciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IGFkZF9maWxlLnBhdGNoIDI+ZXJyb3Itd3QtYWRkICYmCisJdGVzdF9pMThuZ3JlcCAiYmV5b25kIGEgc3ltYm9saWMgbGluayIgZXJyb3Itd3QtYWRkICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYXJjaC9pMzg2L2Rpci9maWxlICYmCisKKwlta2RpciBhcmNoL2kzODYvZGlyICYmCisJPmFyY2gvaTM4Ni9kaXIvZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBkZWxfZmlsZS5wYXRjaCAyPmVycm9yLXd0LWRlbCAmJgorCXRlc3RfaTE4bmdyZXAgImJleW9uZCBhIHN5bWJvbGljIGxpbmsiIGVycm9yLXd0LWRlbCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGFyY2gvaTM4Ni9kaXIvZmlsZSAmJgorCXJtIGFyY2gvaTM4Ni9kaXIvZmlsZSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggYWRkX2ZpbGUucGF0Y2ggMj5lcnJvci1peC1hZGQgJiYKKwl0ZXN0X2kxOG5ncmVwICJiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIiBlcnJvci1peC1hZGQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhcmNoL2kzODYvZGlyL2ZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGFyY2gvaTM4Ni9kaXIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNhY2hlZCBhZGRfZmlsZS5wYXRjaCAyPmVycm9yLWN0LWZpbGUgJiYKKwl0ZXN0X2kxOG5ncmVwICJiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIiBlcnJvci1jdC1maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBhcmNoL2kzODYvZGlyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyMy1hcHBseS1zaHJpbmsuc2ggYi90L3Q0MTIzLWFwcGx5LXNocmluay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ODQxNTdmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyMy1hcHBseS1zaHJpbmsuc2gKQEAgLTAsMCArMSw1OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FwcGx5IGEgcGF0Y2ggdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgcHJlaW1hZ2UnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPkYgIDw8XEVPRgorMQorMgorMworNAorNQorNgorNworOAorOTk5OTk5CitBCitCCitDCitECitFCitGCitHCitICitJCitKCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWdpdCBhZGQgRiAmJgorCW12IEYgRyAmJgorCXNlZCAtZSAicy8xLzExLyIgLWUgInMvOTk5OTk5LzkvIiAtZSAicy9IL0hILyIgPEcgPkYgJiYKKwlnaXQgZGlmZiA+cGF0Y2ggJiYKKwlzZWQgLWUgIi9eXCQvZCIgPEcgPkYgJiYKKwlnaXQgYWRkIEYKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBzaG91bGQgZmFpbCBncmFjZWZ1bGx5JyAnCisKKwlpZiBnaXQgYXBwbHkgLS1pbmRleCBwYXRjaAorCXRoZW4KKwkJZWNobyBPb3BzLCBzaG91bGQgbm90IGhhdmUgc3VjY2VlZGVkCisJCWZhbHNlCisJZWxzZQorCQlzdGF0dXM9JD8KKwkJZWNobyAiU3RhdHVzIHdhcyAkc3RhdHVzIgorCQlpZiB0ZXN0IC1mIC5naXQvaW5kZXgubG9jaworCQl0aGVuCisJCQllY2hvIE9vcHMsIHNob3VsZCBub3QgaGF2ZSBjcmFzaGVkCisJCQlmYWxzZQorCQlmaQorCWZpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyNC1hcHBseS13cy1ydWxlLnNoIGIvdC90NDEyNC1hcHBseS13cy1ydWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjYTI5ODIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTI0LWFwcGx5LXdzLXJ1bGUuc2gKQEAgLTAsMCArMSw1NTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjb3JlLndoaXRlc3BhY2UgcnVsZXMgYW5kIGdpdCBhcHBseScKKworLiAuL3Rlc3QtbGliLnNoCisKK3ByZXBhcmVfdGVzdF9maWxlICgpIHsKKworCSMgQSBsaW5lIHRoYXQgaGFzIGNoYXJhY3RlciBYIGlzIHRvdWNoZWQgaWZmIFJVTEUgaXMgaW4gZWZmZWN0OgorCSMgICAgICAgWCAgUlVMRQorCSMgICAJISAgdHJhaWxpbmctc3BhY2UKKwkjICAgCUAgIHNwYWNlLWJlZm9yZS10YWIKKwkjICAgCSMgIGluZGVudC13aXRoLW5vbi10YWIgKGRlZmF1bHQgdGFiIHdpZHRoIDgpCisJIwk9ICBpbmRlbnQtd2l0aC1ub24tdGFiLHRhYndpZHRoPTE2CisJIyAgIAklICB0YWItaW4taW5kZW50CisJc2VkIC1lICJzL18vIC9nIiAtZSAicy8+LwkvIiA8PC1cRU9GCisJCUFuX1NQIGluIGFuIG9yZGluYXJ5IGxpbmU+YW5kIGEgSFQuCisJCT5BIEhUICglKS4KKwkJXz5BIFNQIGFuZCBhIEhUIChAJSkuCisJCV8+X0EgU1AsIGEgSFQgYW5kIGEgU1AgKEAlKS4KKwkJX19fX19fX1NldmVuIFNQLgorCQlfX19fX19fX0VpZ2h0IFNQICgjKS4KKwkJX19fX19fXz5TZXZlbiBTUCBhbmQgYSBIVCAoQCUpLgorCQlfX19fX19fXz5FaWdodCBTUCBhbmQgYSBIVCAoQCMlKS4KKwkJX19fX19fXz5fU2V2ZW4gU1AsIGEgSFQgYW5kIGEgU1AgKEAlKS4KKwkJX19fX19fX18+X0VpZ2h0IFNQLCBhIEhUIGFuZCBhIFNQIChAIyUpLgorCQlfX19fX19fX19fX19fX19GaWZ0ZWVuIFNQICgjKS4KKwkJX19fX19fX19fX19fX19fPkZpZnRlZW4gU1AgYW5kIGEgSFQgKEAjJSkuCisJCV9fX19fX19fX19fX19fX19TaXh0ZWVuIFNQICgjPSkuCisJCV9fX19fX19fX19fX19fX18+U2l4dGVlbiBTUCBhbmQgYSBIVCAoQCMlPSkuCisJCV9fX19fYV9fRml2ZSBTUCwgYSBub24gV1MsIHR3byBTUC4KKwkJQSBsaW5lIHdpdGggYSAoISkgdHJhaWxpbmcgU1BfCisJCUEgbGluZSB3aXRoIGEgKCEpIHRyYWlsaW5nIEhUPgorCUVPRgorfQorCithcHBseV9wYXRjaCAoKSB7CisJY21kX3ByZWZpeD0gJiYKKwlpZiB0ZXN0ICJ4JDEiID0gJ3ghJworCXRoZW4KKwkJY21kX3ByZWZpeD10ZXN0X211c3RfZmFpbCAmJgorCQlzaGlmdAorCWZpICYmCisJPnRhcmdldCAmJgorCXNlZCAtZSAic3xcKFthYl1cKS9maWxlfFwxL3RhcmdldHwiIDxwYXRjaCB8CisJJGNtZF9wcmVmaXggZ2l0IGFwcGx5ICIkQCIKK30KKwordGVzdF9maXggKCkgeworCSMgZml4IHNob3VsZCBub3QgYmFyZgorCWFwcGx5X3BhdGNoIC0td2hpdGVzcGFjZT1maXggfHwgcmV0dXJuIDEKKworCSMgZmluZCB0b3VjaGVkIGxpbmVzCisJJERJRkYgZmlsZSB0YXJnZXQgfCBzZWQgLW4gLWUgInMvXj4gLy9wIiA+Zml4ZWQKKwkjIGJ1c3lib3gncyBkaWZmKDEpIGRvZXNuJ3Qgb3V0cHV0IG5vcm1hbCBmb3JtYXQKKwlpZiAhIHRlc3QgLXMgZml4ZWQKKwl0aGVuCisJCSRESUZGIC11IGZpbGUgdGFyZ2V0IHwKKwkJZ3JlcCAtdiAnXisrKyB0YXJnZXQnIHwKKwkJc2VkIC1uZSAiL14rL3MvKy8vcCIgPmZpeGVkCisJZmkKKworCSMgdGhlIGNoYW5nZWQgbGluZXMgYXJlIGFsbCBleHBlY3RlZCB0byBjaGFuZ2UKKwlmaXhlZF9jbnQ9JCh3YyAtbCA8Zml4ZWQpCisJY2FzZSAiJDEiIGluCisJJycpIGV4cGVjdF9jbnQ9JGZpeGVkX2NudCA7OworCT8qKSBleHBlY3RfY250PSQoZ3JlcCAiWyQxXSIgPGZpeGVkIHwgd2MgLWwpIDs7CisJZXNhYworCXRlc3QgJGZpeGVkX2NudCAtZXEgJGV4cGVjdF9jbnQgfHwgcmV0dXJuIDEKKworCSMgYW5kIHdlIGFyZSBub3QgbWlzc2luZyBhbnl0aGluZworCWNhc2UgIiQxIiBpbgorCScnKSBleHBlY3RfY250PTAgOzsKKwk/KikgZXhwZWN0X2NudD0kKGdyZXAgIlskMV0iIDxmaWxlIHwgd2MgLWwpIDs7CisJZXNhYworCXRlc3QgJGZpeGVkX2NudCAtZXEgJGV4cGVjdF9jbnQgfHwgcmV0dXJuIDEKKworCSMgR2V0IHRoZSBwYXRjaCBhY3R1YWxseSBhcHBsaWVkCisJZ2l0IGRpZmYtZmlsZXMgLXAgdGFyZ2V0ID5maXhlZC1wYXRjaAorCXRlc3QgLXMgZml4ZWQtcGF0Y2ggJiYgcmV0dXJuIDAKKworCSMgTWFrZSBzdXJlIGl0IGlzIGNvbXBsYWludC1mcmVlCisJPnRhcmdldAorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9ZXJyb3ItYWxsIDxmaXhlZC1wYXRjaAorCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlwcmVwYXJlX3Rlc3RfZmlsZSA+ZmlsZSAmJgorCWdpdCBkaWZmLWZpbGVzIC1wID5wYXRjaCAmJgorCT50YXJnZXQgJiYKKwlnaXQgYWRkIHRhcmdldAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2U9bm93YXJuLCBkZWZhdWx0IHJ1bGUnICcKKworCWFwcGx5X3BhdGNoIC0td2hpdGVzcGFjZT1ub3dhcm4gJiYKKwl0ZXN0X2NtcCBmaWxlIHRhcmdldAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2U9d2FybiwgZGVmYXVsdCBydWxlJyAnCisKKwlhcHBseV9wYXRjaCAtLXdoaXRlc3BhY2U9d2FybiAmJgorCXRlc3RfY21wIGZpbGUgdGFyZ2V0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZT1lcnJvci1hbGwsIGRlZmF1bHQgcnVsZScgJworCisJYXBwbHlfcGF0Y2ggISAtLXdoaXRlc3BhY2U9ZXJyb3ItYWxsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHRhcmdldAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2U9ZXJyb3ItYWxsLCBubyBydWxlJyAnCisKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAtdHJhaWxpbmcsLXNwYWNlLWJlZm9yZSwtaW5kZW50ICYmCisJYXBwbHlfcGF0Y2ggLS13aGl0ZXNwYWNlPWVycm9yLWFsbCAmJgorCXRlc3RfY21wIGZpbGUgdGFyZ2V0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZT1lcnJvci1hbGwsIG5vIHJ1bGUgKGF0dHJpYnV0ZSknICcKKworCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwllY2hvICJ0YXJnZXQgLXdoaXRlc3BhY2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCWFwcGx5X3BhdGNoIC0td2hpdGVzcGFjZT1lcnJvci1hbGwgJiYKKwl0ZXN0X2NtcCBmaWxlIHRhcmdldAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwYWNlcyBpbnNlcnRlZCBieSB0YWItaW4taW5kZW50JyAnCisKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAtdHJhaWxpbmcsLXNwYWNlLC1pbmRlbnQsdGFiICYmCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwl0ZXN0X2ZpeCAlICYmCisJc2VkIC1lICJzL18vIC9nIiAtZSAicy8+LwkvIiA8PC1cRU9GID5leHBlY3QgJiYKKwkJQW5fU1AgaW4gYW4gb3JkaW5hcnkgbGluZT5hbmQgYSBIVC4KKwkJX19fX19fX19BIEhUICglKS4KKwkJX19fX19fX19BIFNQIGFuZCBhIEhUIChAJSkuCisJCV9fX19fX19fX0EgU1AsIGEgSFQgYW5kIGEgU1AgKEAlKS4KKwkJX19fX19fX1NldmVuIFNQLgorCQlfX19fX19fX0VpZ2h0IFNQICgjKS4KKwkJX19fX19fX19TZXZlbiBTUCBhbmQgYSBIVCAoQCUpLgorCQlfX19fX19fX19fX19fX19fRWlnaHQgU1AgYW5kIGEgSFQgKEAjJSkuCisJCV9fX19fX19fX1NldmVuIFNQLCBhIEhUIGFuZCBhIFNQIChAJSkuCisJCV9fX19fX19fX19fX19fX19fRWlnaHQgU1AsIGEgSFQgYW5kIGEgU1AgKEAjJSkuCisJCV9fX19fX19fX19fX19fX0ZpZnRlZW4gU1AgKCMpLgorCQlfX19fX19fX19fX19fX19fRmlmdGVlbiBTUCBhbmQgYSBIVCAoQCMlKS4KKwkJX19fX19fX19fX19fX19fX1NpeHRlZW4gU1AgKCM9KS4KKwkJX19fX19fX19fX19fX19fX19fX19fX19fU2l4dGVlbiBTUCBhbmQgYSBIVCAoQCMlPSkuCisJCV9fX19fYV9fRml2ZSBTUCwgYSBub24gV1MsIHR3byBTUC4KKwkJQSBsaW5lIHdpdGggYSAoISkgdHJhaWxpbmcgU1BfCisJCUEgbGluZSB3aXRoIGEgKCEpIHRyYWlsaW5nIEhUPgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCB0YXJnZXQKKworJworCitmb3IgdCBpbiAtICcnCitkbworCWNhc2UgIiR0IiBpbiAnJykgdHQ9JyEnIDs7ICopIHR0PSA7OyBlc2FjCisJZm9yIHMgaW4gLSAnJworCWRvCisJCWNhc2UgIiRzIiBpbiAnJykgdHM9J0AnIDs7ICopIHRzPSA7OyBlc2FjCisJCWZvciBpIGluIC0gJycKKwkJZG8KKwkJCWNhc2UgIiRpIiBpbiAnJykgdGk9JyMnIHRpMTY9Jz0nOzsgKikgdGk9IHRpMTY9IDs7IGVzYWMKKwkJCWZvciBoIGluIC0gJycKKwkJCWRvCisJCQkJWyAteiAiJGgkaSIgXSAmJiBjb250aW51ZQorCQkJCWNhc2UgIiRoIiBpbiAnJykgdGg9JyUnIDs7ICopIHRoPSA7OyBlc2FjCisJCQkJcnVsZT0ke3R9dHJhaWxpbmcsJHtzfXNwYWNlLCR7aX1pbmRlbnQsJHtofXRhYgorCisJCQkJcm0gLWYgLmdpdGF0dHJpYnV0ZXMKKwkJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJydWxlPSRydWxlIiAnCisJCQkJCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICIkcnVsZSIgJiYKKwkJCQkJdGVzdF9maXggIiR0dCR0cyR0aSR0aCIKKwkJCQknCisKKwkJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJydWxlPSRydWxlLHRhYndpZHRoPTE2IiAnCisJCQkJCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICIkcnVsZSx0YWJ3aWR0aD0xNiIgJiYKKwkJCQkJdGVzdF9maXggIiR0dCR0cyR0aTE2JHRoIgorCQkJCScKKworCQkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJ1bGU9JHJ1bGUgKGF0dHJpYnV0ZXMpIiAnCisJCQkJCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwkJCQkJZWNobyAidGFyZ2V0IHdoaXRlc3BhY2U9JHJ1bGUiID4uZ2l0YXR0cmlidXRlcyAmJgorCQkJCQl0ZXN0X2ZpeCAiJHR0JHRzJHRpJHRoIgorCQkJCScKKworCQkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJ1bGU9JHJ1bGUsdGFid2lkdGg9MTYgKGF0dHJpYnV0ZXMpIiAnCisJCQkJCWVjaG8gInRhcmdldCB3aGl0ZXNwYWNlPSRydWxlLHRhYndpZHRoPTE2IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJCQkJdGVzdF9maXggIiR0dCR0cyR0aTE2JHRoIgorCQkJCScKKworCQkJZG9uZQorCQlkb25lCisJZG9uZQorZG9uZQorCitjcmVhdGVfcGF0Y2ggKCkgeworCXNlZCAtZSAicy9fLyAvIiA8PC1cRU9GCisJCWRpZmYgLS1naXQgYS90YXJnZXQgYi90YXJnZXQKKwkJaW5kZXggZTY5ZGUyOS4uOGJkNjY0OCAxMDA2NDQKKwkJLS0tIGEvdGFyZ2V0CisJCSsrKyBiL3RhcmdldAorCQlAQCAtMCwwICsxLDMgQEAKKwkJK0FuIGVtcHR5IGxpbmUgZm9sbG93cworCQkrCisJCStBIGxpbmUgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlIGFuZCBubyBuZXdsaW5lXworCQlcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwlFT0YKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhaWxpbmcgd2hpdGVzcGFjZSAmIG5vIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiBmaWxlJyAnCisJPnRhcmdldCAmJgorCWNyZWF0ZV9wYXRjaCA+cGF0Y2gtZmlsZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoLWZpbGUgJiYKKwlncmVwICJuZXdsaW5lJCIgdGFyZ2V0ICYmCisJZ3JlcCAiXiQiIHRhcmdldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFuayBhdCBFT0Ygd2l0aCAtLXdoaXRlc3BhY2U9Zml4ICgxKScgJworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53aGl0ZXNwYWNlICYmCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPmV4cGVjdCAmJgorCXsgY2F0IGV4cGVjdDsgZWNobzsgfSA+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFuayBhdCBFT0Ygd2l0aCAtLXdoaXRlc3BhY2U9Zml4ICgyKScgJworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl7IGVjaG8gYTsgZWNobyBjOyB9ID5leHBlY3QgJiYKKwl7IGNhdCBleHBlY3Q7IGVjaG87IGVjaG87IH0gPm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKworCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYXQgRU9GIHdpdGggLS13aGl0ZXNwYWNlPWZpeCAoMyknICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXsgZWNobyBhOyBlY2hvIGM7IGVjaG87IH0gPmV4cGVjdCAmJgorCXsgY2F0IGV4cGVjdDsgZWNobzsgZWNobzsgfSA+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFuayBhdCBlbmQgb2YgaHVuaywgbm90IGF0IEVPRiB3aXRoIC0td2hpdGVzcGFjZT1maXgnICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvIGQ7IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJeyBlY2hvIGE7IGVjaG8gYzsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgZWNobyBkOyB9ID5leHBlY3QgJiYKKwljcCBleHBlY3Qgb25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFuayBhdCBFT0Ygd2l0aCAtLXdoaXRlc3BhY2U9d2FybicgJworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvID4+b25lICYmCisJY2F0IG9uZSA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9d2FybiBwYXRjaCAyPmVycm9yICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZSAmJgorCWdyZXAgIm5ldyBibGFuayBsaW5lIGF0IEVPRiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYXQgRU9GIHdpdGggLS13aGl0ZXNwYWNlPWVycm9yJyAnCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobyBjOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWNhdCBvbmUgPmV4cGVjdCAmJgorCWVjaG8gPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwlnaXQgY2hlY2tvdXQgb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1lcnJvciBwYXRjaCAyPmVycm9yICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZSAmJgorCWdyZXAgIm5ldyBibGFuayBsaW5lIGF0IEVPRiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYnV0IG5vdCBlbXB0eSBhdCBFT0YnICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZWNobyAiICAgIiA+Pm9uZSAmJgorCWNhdCBvbmUgPmV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKworCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPXdhcm4gcGF0Y2ggMj5lcnJvciAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUgJiYKKwlncmVwICJuZXcgYmxhbmsgbGluZSBhdCBFT0YiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5aW5nIGJleW9uZCBFT0YgcmVxdWlyZXMgb25lIG5vbi1ibGFuayBjb250ZXh0IGxpbmUnICcKKwl7IGVjaG87IGVjaG87IGVjaG87IGVjaG87IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJeyBlY2hvIGI7IH0gPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwlnaXQgY2hlY2tvdXQgb25lICYmCisJeyBlY2hvIGE7IGVjaG87IH0gPm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RvbnMgb2YgYmxhbmtzIGF0IEVPRiBzaG91bGQgbm90IGFwcGx5JyAnCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTY7IGRvCisJCWVjaG87IGVjaG87IGVjaG87IGVjaG87CisJZG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvIGEgPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwk+b25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlzc2luZyBibGFuayBsaW5lIGF0IGVuZCB3aXRoIC0td2hpdGVzcGFjZT1maXgnICcKKwllY2hvIGEgPm9uZSAmJgorCWVjaG8gPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWVjaG8gYiA+Pm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisJZWNobyBhID5vbmUgJiYKKwljcCBvbmUgc2F2ZWQtb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lICYmCisJbXYgc2F2ZWQtb25lIG9uZSAmJgorCWdpdCBhcHBseSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvIG1pc3NpbmcgYmxhbmsgbGluZXMgYXQgZW5kIHdpdGggLS13aGl0ZXNwYWNlPWZpeCcgJworCXsgZWNobyBhOyBlY2hvOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJY3Agb25lIG5vLWJsYW5rLWxpbmVzICYmCisJeyBlY2hvOyBlY2hvOyB9ID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvIGQgPj5vbmUgJiYKKwljcCBvbmUgZXhwZWN0ICYmCisJZWNobyA+Pm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwljcCBuby1ibGFuay1saW5lcyBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUgJiYKKwltdiBuby1ibGFuay1saW5lcyBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgYmxhbmsgbGluZSBhdCBlbmQsIGluc2VydCBiZWZvcmUgZW5kLCAtLXdoaXRlc3BhY2U9Zml4JyAnCisJeyBlY2hvIGE7IGVjaG87IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJeyBlY2hvIGI7IGVjaG8gYTsgZWNobzsgfSA+b25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwllY2hvIGEgPm9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaCAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaHJpbmsgZmlsZSB3aXRoIHRvbnMgb2YgbWlzc2luZyBibGFua3MgYXQgZW5kIG9mIGZpbGUnICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWNwIG9uZSBuby1ibGFuay1saW5lcyAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2OyBkbworCQllY2hvOyBlY2hvOyBlY2hvOyBlY2hvOworCWRvbmUgPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWVjaG8gYSA+b25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwljcCBuby1ibGFuay1saW5lcyBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUgJiYKKwltdiBuby1ibGFuay1saW5lcyBvbmUgJiYKKwlnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgYmxhbmtzIGF0IEVPRiBtdXN0IG9ubHkgbWF0Y2ggYmxhbmsgbGluZXMnICcKKwl7IGVjaG8gYTsgZWNobyBiOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXsgZWNobyBjOyBlY2hvIGQ7IH0gPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwllY2hvIGEgPm9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoCisnCisKK3NlZCAtZSdzL1ovLycgPm9uZSA8PEVPRgorYQorYgorYworCQkgICAgICBaCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlzc2luZyBibGFuayBsaW5lIHNob3VsZCBtYXRjaCBjb250ZXh0IGxpbmUgd2l0aCBzcGFjZXMnICcKKwlnaXQgYWRkIG9uZSAmJgorCWVjaG8gZCA+Pm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwl7IGVjaG87IGVjaG8gZDsgfSA+PmV4cGVjdCAmJgorCWdpdCBhZGQgb25lICYmCisKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKworc2VkIC1lJ3MvWi8vJyA+b25lIDw8RU9GCithCitiCitjCisJCSAgICAgIFoKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lLCBidXQgd2l0aCB0aGUgLS1pZ25vcmUtc3BhY2Utb3B0aW9uJyAnCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvIGQgPj5vbmUgJiYKKwljcCBvbmUgZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKworCWdpdCBjaGVja291dC1pbmRleCAtZiBvbmUgJiYKKwlnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUsIGJ1dCB3aXRoIENSLUxGIGxpbmUgZW5kaW5ncyAmJiBjci1hdC1lb2wgc2V0JyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgY3ItYXQtZW9sICYmCisJcHJpbnRmICJhXHJcbiIgPm9uZSAmJgorCXByaW50ZiAiYlxyXG4iID4+b25lICYmCisJcHJpbnRmICJjXHJcbiIgPj5vbmUgJiYKKwljcCBvbmUgc2F2ZS1vbmUgJiYKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgXHJcbiIgPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXByaW50ZiAiZFxyXG4iID4+b25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwltdiBzYXZlLW9uZSBvbmUgJiYKKworCWdpdCBhcHBseSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ1ItTEYgbGluZSBlbmRpbmdzICYmIGFkZCBsaW5lICYmIHRleHQ9YXV0bycgJworCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwlwcmludGYgImFcclxuIiA+b25lICYmCisJY3Agb25lIHNhdmUtb25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlwcmludGYgImJcclxuIiA+Pm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisJbXYgc2F2ZS1vbmUgb25lICYmCisJZWNobyAib25lIHRleHQ9YXV0byIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGFwcGx5IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDUi1MRiBsaW5lIGVuZGluZ3MgJiYgY2hhbmdlIGxpbmUgJiYgdGV4dD1hdXRvJyAnCisJcHJpbnRmICJhXHJcbiIgPm9uZSAmJgorCWNwIG9uZSBzYXZlLW9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJcHJpbnRmICJiXHJcbiIgPm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisJbXYgc2F2ZS1vbmUgb25lICYmCisJZWNobyAib25lIHRleHQ9YXV0byIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGFwcGx5IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMRiBpbiByZXBvLCBDUkxGIGluIHdvcmt0cmVlICYmIGNoYW5nZSBsaW5lICYmIHRleHQ9YXV0bycgJworCXByaW50ZiAiYVxuIiA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlwcmludGYgImJcclxuIiA+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCXByaW50ZiAiYVxyXG4iID5vbmUgJiYKKwllY2hvICJvbmUgdGV4dD1hdXRvIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgLWMgY29yZS5lb2w9Q1JMRiBhcHBseSBwYXRjaCAmJgorCXByaW50ZiAiYlxyXG4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2U9Zml4IHRvIGV4cGFuZCcgJworCXF6X3RvX3RhYl9zcGFjZSA+cHJlaW1hZ2UgPDwtXEVPRiAmJgorCVFRYQorCVFRYgorCVFRYworCVpaWlpaWlpaWlpaWlpaWlpkCisJUVFlCisJUVFmCisJUVFnCisJRU9GCisJcXpfdG9fdGFiX3NwYWNlID5wYXRjaCA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL3ByZWltYWdlIGIvcHJlaW1hZ2UKKwktLS0gYS9wcmVpbWFnZQorCSsrKyBiL3ByZWltYWdlCisJQEAgLTEsNyArMSw2IEBACisJIFFRYQorCSBRUWIKKwkgUVFjCisJLVFRZAorCSBRUWUKKwkgUVFmCisJIFFRZworCUVPRgorCWdpdCAtYyBjb3JlLndoaXRlc3BhY2U9dGFiLWluLWluZGVudCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2UgY2hlY2sgc2tpcHBlZCBmb3IgZXhjbHVkZWQgcGF0aHMnICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSBibGFuay1hdC1lb2wgJiYKKwk+dXNlZCAmJgorCT51bnVzZWQgJiYKKwlnaXQgYWRkIHVzZWQgdW51c2VkICYmCisJZWNobyAidXNlZCIgPnVzZWQgJiYKKwllY2hvICJ1bnVzZWQgIiA+dW51c2VkICYmCisJZ2l0IGRpZmYtZmlsZXMgLXAgdXNlZCB1bnVzZWQgPnBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5jbHVkZT11c2VkIC0tc3RhdCAtLXdoaXRlc3BhY2U9ZXJyb3IgPHBhdGNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyNS1hcHBseS13cy1mdXp6LnNoIGIvdC90NDEyNS1hcHBseS13cy1mdXp6LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2NzFkZTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTI1LWFwcGx5LXdzLWZ1enouc2gKQEAgLTAsMCArMSwxMDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhcHBseWluZyBwYXRjaCB0aGF0IGhhcyBicm9rZW4gd2hpdGVzcGFjZXMgaW4gY29udGV4dCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKworCSMgZmlsZS0wIGlzIGZ1bGwgb2Ygd2hpdGVzcGFjZSBicmVha2FnZXMKKwlmb3IgbCBpbiBhIGJiIGMgZCBlZWVlIGYgZ2dnIGgKKwlkbworCQllY2hvICIkbCAiCisJZG9uZSA+ZmlsZS0wICYmCisKKwkjIHBhdGNoLTAgY3JlYXRlcyBhIHdoaXRlc3BhY2UgYnJva2VuIGZpbGUKKwljYXQgZmlsZS0wID5maWxlICYmCisJZ2l0IGRpZmYgPnBhdGNoLTAgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKworCSMgZmlsZS0xIGlzIHN0aWxsIGZ1bGwgb2Ygd2hpdGVzcGFjZSBicmVha2FnZXMsCisJIyBidXQgaGFzIG9uZSBsaW5lIHVwZGF0ZWQsIHdpdGhvdXQgZml4aW5nIGFueQorCSMgd2hpdGVzcGFjZXMuCisJIyBwYXRjaC0xIHJlY29yZHMgdGhhdCBjaGFuZ2UuCisJc2VkIC1lICJzL2QvRC8iIGZpbGUtMCA+ZmlsZS0xICYmCisJY2F0IGZpbGUtMSA+ZmlsZSAmJgorCWdpdCBkaWZmID5wYXRjaC0xICYmCisKKwkjIHBhdGNoLWFsbCBpcyB0aGUgZWZmZWN0IG9mIGJvdGggcGF0Y2gtMCBhbmQgcGF0Y2gtMQorCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJY2F0IGZpbGUtMSA+ZmlsZSAmJgorCWdpdCBkaWZmID5wYXRjaC1hbGwgJiYKKworCSMgcGF0Y2gtMiBpcyB0aGUgc2FtZSBhcyBwYXRjaC0xIGJ1dCBpcyBiYXNlZAorCSMgb24gYSB2ZXJzaW9uIHRoYXQgYWxyZWFkeSBoYXMgd2hpdGVzcGFjZSBmaXhlZCwKKwkjIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugd2hpdGVzcGFjZSBicmVha2FnZXMuCisJc2VkIC1lICJzLyBcJC8vIiBwYXRjaC0xID5wYXRjaC0yICYmCisKKwkjIElmIGFsbCB3aGl0ZXNwYWNlIGJyZWFrYWdlcyBhcmUgZml4ZWQgdGhlIGNvbnRlbnRzCisJIyBzaG91bGQgbG9vayBsaWtlIGZpbGUtZml4ZWQKKwlzZWQgLWUgInMvIFwkLy8iIGZpbGUtMSA+ZmlsZS1maXhlZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgbm9maXggJworCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKworCSMgQmFzZWxpbmUuICBBcHBseWluZyB3aXRob3V0IGZpeGluZyBhbnkgd2hpdGVzcGFjZQorCSMgYnJlYWthZ2VzLgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9bm93YXJuIHBhdGNoLTAgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPW5vd2FybiBwYXRjaC0xICYmCisKKwkjIFRoZSByZXN1bHQgc2hvdWxkIG9idmlvdXNseSBtYXRjaC4KKwl0ZXN0X2NtcCBmaWxlLTEgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoZml4IChmb3J3YXJkKScgJworCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKworCSMgVGhlIGZpcnN0IGFwcGxpY2F0aW9uIHdpbGwgbXVuZ2UgdGhlIGNvbnRleHQgbGluZXMKKwkjIHRoZSBzZWNvbmQgcGF0Y2ggZGVwZW5kcyBvbi4gIFdlIHNob3VsZCBiZSBhYmxlIHRvCisJIyBhZGp1c3QgYW5kIHN0aWxsIGFwcGx5LgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoLTAgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaC0xICYmCisKKwl0ZXN0X2NtcCBmaWxlLWZpeGVkIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aGZpeCAoYmFja3dhcmQpJyAnCisKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCisJIyBOb3cgd2UgaGF2ZSBhIHdoaXRlc3BhY2UgYnJlYWthZ2VzIG9uIG91ciBzaWRlLgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9bm93YXJuIHBhdGNoLTAgJiYKKworCSMgQW5kIHNvbWVib2R5IHNlbmRzIGluIGEgcGF0Y2ggYmFzZWQgb24gaW1hZ2UKKwkjIHdpdGggd2hpdGVzcGFjZSBhbHJlYWR5IGZpeGVkLgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoLTIgJiYKKworCSMgVGhlIHJlc3VsdCBzaG91bGQgYWNjZXB0IHRoZSB3aGl0ZXNwYWNlIGZpeGVkCisJIyBwb3N0aW1hZ2UuICBCdXQgdGhlIGxpbmUgd2l0aCAiaCIgaXMgYmV5b25kIGNvbnRleHQKKwkjIGhvcml6b24gYW5kIGxlZnQgdW5maXhlZC4KKworCXNlZCAtZSAvaC9kIGZpbGUtZml4ZWQgPmZpeGVkLWhlYWQgJiYKKwlzZWQgLWUgL2gvZCBmaWxlID5maWxlLWhlYWQgJiYKKwl0ZXN0X2NtcCBmaXhlZC1oZWFkIGZpbGUtaGVhZCAmJgorCisJc2VkIC1uIC1lIC9oL3AgZmlsZS1maXhlZCA+Zml4ZWQtdGFpbCAmJgorCXNlZCAtbiAtZSAvaC9wIGZpbGUgPmZpbGUtdGFpbCAmJgorCisJISB0ZXN0X2NtcCBmaXhlZC10YWlsIGZpbGUtdGFpbAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyNi1hcHBseS1lbXB0eS5zaCBiL3QvdDQxMjYtYXBwbHktZW1wdHkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2ViNmE3OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMjYtYXBwbHktZW1wdHkuc2gKQEAgLTAsMCArMSw1NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FwcGx5IGVtcHR5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJPmVtcHR5ICYmCisJZ2l0IGFkZCBlbXB0eSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWZvciBpIGluIGEgYiBjIGQgZQorCWRvCisJCWVjaG8gJGkKKwlkb25lID5lbXB0eSAmJgorCWNhdCBlbXB0eSA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYgfAorCXNlZCAtZSAiL15kaWZmIC0tZ2l0L2QiIFwKKwkgICAgLWUgIi9eaW5kZXggL2QiIFwKKwkgICAgLWUgInN8YS9lbXB0eXxlbXB0eS5vcmlnfCIgXAorCSAgICAtZSAic3xiL2VtcHR5fGVtcHR5fCIgPnBhdGNoMCAmJgorCXNlZCAtZSAic3xlbXB0eXxtaXNzaW5nfCIgcGF0Y2gwID5wYXRjaDEgJiYKKwk+ZW1wdHkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBlbXB0eScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBtaXNzaW5nICYmCisJZ2l0IGFwcGx5IHBhdGNoMCAmJgorCXRlc3RfY21wIGV4cGVjdCBlbXB0eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWluZGV4IGVtcHR5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1mIG1pc3NpbmcgJiYKKwlnaXQgYXBwbHkgLS1pbmRleCBwYXRjaDAgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZW1wdHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBjcmVhdGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWYgbWlzc2luZyAmJgorCWdpdCBhcHBseSBwYXRjaDEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbWlzc2luZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWluZGV4IGNyZWF0ZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBtaXNzaW5nICYmCisJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2gxICYmCisJdGVzdF9jbXAgZXhwZWN0IG1pc3NpbmcgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjctYXBwbHktc2FtZS1mbi5zaCBiL3QvdDQxMjctYXBwbHktc2FtZS1mbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NzI5NDZjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyNy1hcHBseS1zYW1lLWZuLnNoCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhcHBseSBzYW1lIGZpbGVuYW1lJworCisuIC4vdGVzdC1saWIuc2gKKworbW9kaWZ5ICgpIHsKKwlzZWQgLWUgIiQxIiA8ICIkMiIgPiAiJDIiLnggJiYKKwltdiAiJDIiLnggIiQyIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlmb3IgaSBpbiBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtCisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnNhbWVfZm4gJiYKKwljcCBzYW1lX2ZuIG90aGVyX2ZuICYmCisJZ2l0IGFkZCBzYW1lX2ZuIG90aGVyX2ZuICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBzYW1lIGZpbGVuYW1lIHdpdGggaW5kZXBlbmRlbnQgY2hhbmdlcycgJworCW1vZGlmeSAicy9eZC96LyIgc2FtZV9mbiAmJgorCWdpdCBkaWZmID4gcGF0Y2gwICYmCisJZ2l0IGFkZCBzYW1lX2ZuICYmCisJbW9kaWZ5ICJzL15pL3kvIiBzYW1lX2ZuICYmCisJZ2l0IGRpZmYgPj4gcGF0Y2gwICYmCisJY3Agc2FtZV9mbiBzYW1lX2ZuMiAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgYXBwbHkgcGF0Y2gwICYmCisJdGVzdF9jbXAgc2FtZV9mbiBzYW1lX2ZuMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBzYW1lIGZpbGVuYW1lIHdpdGggb3ZlcmxhcHBpbmcgY2hhbmdlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwltb2RpZnkgInMvXmQvei8iIHNhbWVfZm4gJiYKKwlnaXQgZGlmZiA+IHBhdGNoMCAmJgorCWdpdCBhZGQgc2FtZV9mbiAmJgorCW1vZGlmeSAicy9eZS95LyIgc2FtZV9mbiAmJgorCWdpdCBkaWZmID4+IHBhdGNoMCAmJgorCWNwIHNhbWVfZm4gc2FtZV9mbjIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGFwcGx5IHBhdGNoMCAmJgorCXRlc3RfY21wIHNhbWVfZm4gc2FtZV9mbjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgc2FtZSBuZXcgZmlsZW5hbWUgYWZ0ZXIgcmVuYW1lJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBtdiBzYW1lX2ZuIG5ld19mbiAmJgorCW1vZGlmeSAicy9eZC96LyIgbmV3X2ZuICYmCisJZ2l0IGFkZCBuZXdfZm4gJiYKKwlnaXQgZGlmZiAtTSAtLWNhY2hlZCA+IHBhdGNoMSAmJgorCW1vZGlmeSAicy9eZS95LyIgbmV3X2ZuICYmCisJZ2l0IGRpZmYgPj4gcGF0Y2gxICYmCisJY3AgbmV3X2ZuIG5ld19mbjIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2gxICYmCisJdGVzdF9jbXAgbmV3X2ZuIG5ld19mbjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgc2FtZSBvbGQgZmlsZW5hbWUgYWZ0ZXIgcmVuYW1lIC0tIHNob3VsZCBmYWlsLicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgbXYgc2FtZV9mbiBuZXdfZm4gJiYKKwltb2RpZnkgInMvXmQvei8iIG5ld19mbiAmJgorCWdpdCBhZGQgbmV3X2ZuICYmCisJZ2l0IGRpZmYgLU0gLS1jYWNoZWQgPiBwYXRjaDEgJiYKKwlnaXQgbXYgbmV3X2ZuIHNhbWVfZm4gJiYKKwltb2RpZnkgInMvXmUveS8iIHNhbWVfZm4gJiYKKwlnaXQgZGlmZiA+PiBwYXRjaDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBBLT5CIChyZW5hbWUpLCBDLT5BIChyZW5hbWUpLCBBLT5BIC0tIHNob3VsZCBwYXNzLicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgbXYgc2FtZV9mbiBuZXdfZm4gJiYKKwltb2RpZnkgInMvXmQvei8iIG5ld19mbiAmJgorCWdpdCBhZGQgbmV3X2ZuICYmCisJZ2l0IGRpZmYgLU0gLS1jYWNoZWQgPiBwYXRjaDEgJiYKKwlnaXQgY29tbWl0IC1tICJhIHJlbmFtZSIgJiYKKwlnaXQgbXYgb3RoZXJfZm4gc2FtZV9mbiAmJgorCW1vZGlmeSAicy9eZS95LyIgc2FtZV9mbiAmJgorCWdpdCBhZGQgc2FtZV9mbiAmJgorCWdpdCBkaWZmIC1NIC0tY2FjaGVkID4+IHBhdGNoMSAmJgorCW1vZGlmeSAicy9eZy94LyIgc2FtZV9mbiAmJgorCWdpdCBkaWZmID4+IHBhdGNoMSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgYXBwbHkgcGF0Y2gxCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyOC1hcHBseS1yb290LnNoIGIvdC90NDEyOC1hcHBseS1yb290LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjYzc0MWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTI4LWFwcGx5LXJvb3Quc2gKQEAgLTAsMCArMSwxMTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhcHBseSBzYW1lIGZpbGVuYW1lJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCW1rZGlyIC1wIHNvbWUvc3ViL2RpciAmJgorCWVjaG8gSGVsbG8gPiBzb21lL3N1Yi9kaXIvZmlsZSAmJgorCWdpdCBhZGQgc29tZS9zdWIvZGlyL2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwKKworJworCitjYXQgPiBwYXRjaCA8PCBFT0YKK2RpZmYgYS9ibGEvYmx1Yi9kaXIvZmlsZSBiL2JsYS9ibHViL2Rpci9maWxlCistLS0gYS9ibGEvYmx1Yi9kaXIvZmlsZQorKysrIGIvYmxhL2JsdWIvZGlyL2ZpbGUKK0BAIC0xLDEgKzEsMSBAQAorLUhlbGxvCisrQmVsbG8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWRpcmVjdG9yeSAtcCAoMSknICcKKworCWdpdCBhcHBseSAtLWRpcmVjdG9yeT1zb21lL3N1YiAtcDMgLS1pbmRleCBwYXRjaCAmJgorCXRlc3QgQmVsbG8gPSAkKGdpdCBzaG93IDpzb21lL3N1Yi9kaXIvZmlsZSkgJiYKKwl0ZXN0IEJlbGxvID0gJChjYXQgc29tZS9zdWIvZGlyL2ZpbGUpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1kaXJlY3RvcnkgLXAgKDIpICcgJworCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IGFwcGx5IC0tZGlyZWN0b3J5PXNvbWUvc3ViLyAtcDMgLS1pbmRleCBwYXRjaCAmJgorCXRlc3QgQmVsbG8gPSAkKGdpdCBzaG93IDpzb21lL3N1Yi9kaXIvZmlsZSkgJiYKKwl0ZXN0IEJlbGxvID0gJChjYXQgc29tZS9zdWIvZGlyL2ZpbGUpCisKKycKKworY2F0ID4gcGF0Y2ggPDwgRU9GCitkaWZmIC0tZ2l0IGEvbmV3ZmlsZSBiL25ld2ZpbGUKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kOTVmM2FkCistLS0gL2Rldi9udWxsCisrKysgYi9uZXdmaWxlCitAQCAtMCwwICsxIEBACisrY29udGVudAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tZGlyZWN0b3J5IChuZXcgZmlsZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlnaXQgYXBwbHkgLS1kaXJlY3Rvcnk9c29tZS9zdWIvZGlyLyAtLWluZGV4IHBhdGNoICYmCisJdGVzdCBjb250ZW50ID0gJChnaXQgc2hvdyA6c29tZS9zdWIvZGlyL25ld2ZpbGUpICYmCisJdGVzdCBjb250ZW50ID0gJChjYXQgc29tZS9zdWIvZGlyL25ld2ZpbGUpCisnCisKK2NhdCA+IHBhdGNoIDw8IEVPRgorZGlmZiAtLWdpdCBhL2MvbmV3ZmlsZTIgYi9jL25ld2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDk1ZjNhZAorLS0tIC9kZXYvbnVsbAorKysrIGIvYy9uZXdmaWxlMgorQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWRpcmVjdG9yeSAtcCAobmV3IGZpbGUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IGFwcGx5IC1wMiAtLWRpcmVjdG9yeT1zb21lL3N1Yi9kaXIvIC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0IGNvbnRlbnQgPSAkKGdpdCBzaG93IDpzb21lL3N1Yi9kaXIvbmV3ZmlsZTIpICYmCisJdGVzdCBjb250ZW50ID0gJChjYXQgc29tZS9zdWIvZGlyL25ld2ZpbGUyKQorJworCitjYXQgPiBwYXRjaCA8PCBFT0YKK2RpZmYgLS1naXQgYS9kZWxmaWxlIGIvZGVsZmlsZQorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCBkOTVmM2FkLi4wMDAwMDAwCistLS0gYS9kZWxmaWxlCisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistY29udGVudAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tZGlyZWN0b3J5IChkZWxldGUgZmlsZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwllY2hvIGNvbnRlbnQgPnNvbWUvc3ViL2Rpci9kZWxmaWxlICYmCisJZ2l0IGFkZCBzb21lL3N1Yi9kaXIvZGVsZmlsZSAmJgorCWdpdCBhcHBseSAtLWRpcmVjdG9yeT1zb21lL3N1Yi9kaXIvIC0taW5kZXggcGF0Y2ggJiYKKwkhIChnaXQgbHMtZmlsZXMgfCBncmVwIGRlbGZpbGUpCisnCisKK2NhdCA+IHBhdGNoIDw8ICdFT0YnCitkaWZmIC0tZ2l0ICJhL3F1XDE1N3RlZmlsZSIgImIvcXVcMTU3dGVmaWxlIgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ5NWYzYWQKKy0tLSAvZGV2L251bGwKKysrKyAiYi9xdVwxNTd0ZWZpbGUiCitAQCAtMCwwICsxIEBACisrY29udGVudAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tZGlyZWN0b3J5IChxdW90ZWQgZmlsZW5hbWUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IGFwcGx5IC0tZGlyZWN0b3J5PXNvbWUvc3ViL2Rpci8gLS1pbmRleCBwYXRjaCAmJgorCXRlc3QgY29udGVudCA9ICQoZ2l0IHNob3cgOnNvbWUvc3ViL2Rpci9xdW90ZWZpbGUpICYmCisJdGVzdCBjb250ZW50ID0gJChjYXQgc29tZS9zdWIvZGlyL3F1b3RlZmlsZSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTI5LWFwcGx5LXNhbWVtb2RlLnNoIGIvdC90NDEyOS1hcHBseS1zYW1lbW9kZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41Y2RkNzZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyOS1hcHBseS1zYW1lbW9kZS5zaApAQCAtMCwwICsxLDc2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXBwbHlpbmcgcGF0Y2ggd2l0aCBtb2RlIGJpdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIG9yaWdpbmFsID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisJZWNobyBtb2RpZmllZCA+ZmlsZSAmJgorCWdpdCBkaWZmIC0tc3RhdCAtcCA+cGF0Y2gtMC50eHQgJiYKKwljaG1vZCAreCBmaWxlICYmCisJZ2l0IGRpZmYgLS1zdGF0IC1wID5wYXRjaC0xLnR4dCAmJgorCXNlZCAicy9eXChuZXcgbW9kZSBcKS4qL1wxLyIgPHBhdGNoLTEudHh0ID5wYXRjaC1lbXB0eS1tb2RlLnR4dCAmJgorCXNlZCAicy9eXChuZXcgbW9kZSBcKS4qL1wxZ2FyYmFnZS8iIDxwYXRjaC0xLnR4dCA+cGF0Y2gtYm9ndXMtbW9kZS50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnc2FtZSBtb2RlIChubyBpbmRleCknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2htb2QgK3ggZmlsZSAmJgorCWdpdCBhcHBseSBwYXRjaC0wLnR4dCAmJgorCXRlc3QgLXggZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdzYW1lIG1vZGUgKHdpdGggaW5kZXgpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNobW9kICt4IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgYXBwbHkgLS1pbmRleCBwYXRjaC0wLnR4dCAmJgorCXRlc3QgLXggZmlsZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgJ3NhbWUgbW9kZSAoaW5kZXggb25seSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2htb2QgK3ggZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBhcHBseSAtLWNhY2hlZCBwYXRjaC0wLnR4dCAmJgorCWdpdCBscy1maWxlcyAtcyBmaWxlIHwgZ3JlcCAiXjEwMDc1NSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnbW9kZSB1cGRhdGUgKG5vIGluZGV4KScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgYXBwbHkgcGF0Y2gtMS50eHQgJiYKKwl0ZXN0IC14IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnbW9kZSB1cGRhdGUgKHdpdGggaW5kZXgpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoLTEudHh0ICYmCisJdGVzdCAteCBmaWxlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnbW9kZSB1cGRhdGUgKGluZGV4IG9ubHkpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhcHBseSAtLWNhY2hlZCBwYXRjaC0xLnR4dCAmJgorCWdpdCBscy1maWxlcyAtcyBmaWxlIHwgZ3JlcCAiXjEwMDc1NSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnZW1wdHkgbW9kZSBpcyByZWplY3RlZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2gtZW1wdHktbW9kZS50eHQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJpbnZhbGlkIG1vZGUiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdib2d1cyBtb2RlIGlzIHJlamVjdGVkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaC1ib2d1cy1tb2RlLnR4dCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImludmFsaWQgbW9kZSIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzMC1hcHBseS1jcmlzcy1jcm9zcy1yZW5hbWUuc2ggYi90L3Q0MTMwLWFwcGx5LWNyaXNzLWNyb3NzLXJlbmFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOGEzMTNiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzMC1hcHBseS1jcmlzcy1jcm9zcy1yZW5hbWUuc2gKQEAgLTAsMCArMSw3MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBoYW5kbGluZyBjcmlzcy1jcm9zcyByZW5hbWUgcGF0Y2guJworLiAuL3Rlc3QtbGliLnNoCisKK2NyZWF0ZV9maWxlKCkgeworCWNudD0wCisJd2hpbGUgdGVzdCAkY250IC1sZSAxMDAKKwlkbworCQljbnQ9JCgoJGNudCArIDEpKQorCQllY2hvICIkMiIgPj4gIiQxIgorCWRvbmUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwkjIEVuc3VyZSB0aGF0IGZpbGUgc2l6ZXMgYXJlIGRpZmZlcmVudCwgYmVjYXVzZSBvbiBXaW5kb3dzCisJIyBsc3RhdCgpIGRvZXMgbm90IGRpc2NvdmVyIGlub2RlIG51bWJlcnMsIGFuZCB3ZSBuZWVkCisJIyBvdGhlciBwcm9wZXJ0aWVzIHRvIGRpc2NvdmVyIHN3YXBwZWQgZmlsZXMKKwkjIChtdGltZSBpcyBub3QgYWx3YXlzIGRpZmZlcmVudCwgZWl0aGVyKS4KKwljcmVhdGVfZmlsZSBmaWxlMSAic29tZSBjb250ZW50IiAmJgorCWNyZWF0ZV9maWxlIGZpbGUyICJzb21lIG90aGVyIGNvbnRlbnQiICYmCisJY3JlYXRlX2ZpbGUgZmlsZTMgImFnYWluIHNvbWV0aGluZyBlbHNlIiAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgZmlsZTMgJiYKKwlnaXQgY29tbWl0IC1tIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3Jpc3MtY3Jvc3MgcmVuYW1lJyAnCisJbXYgZmlsZTEgdG1wICYmCisJbXYgZmlsZTIgZmlsZTEgJiYKKwltdiB0bXAgZmlsZTIgJiYKKwljcCBmaWxlMSBmaWxlMS1zd2FwcGVkICYmCisJY3AgZmlsZTIgZmlsZTItc3dhcHBlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1NIC1CJyAnCisJZ2l0IGRpZmYgLU0gLUIgPiBkaWZmICYmCisJZ2l0IHJlc2V0IC0taGFyZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5JyAnCisJZ2l0IGFwcGx5IGRpZmYgJiYKKwl0ZXN0X2NtcCBmaWxlMSBmaWxlMS1zd2FwcGVkICYmCisJdGVzdF9jbXAgZmlsZTIgZmlsZTItc3dhcHBlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmlzcy1jcm9zcyByZW5hbWUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJbXYgZmlsZTEgdG1wICYmCisJbXYgZmlsZTIgZmlsZTEgJiYKKwltdiBmaWxlMyBmaWxlMiAmJgorCW12IHRtcCBmaWxlMyAmJgorCWNwIGZpbGUxIGZpbGUxLXN3YXBwZWQgJiYKKwljcCBmaWxlMiBmaWxlMi1zd2FwcGVkICYmCisJY3AgZmlsZTMgZmlsZTMtc3dhcHBlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1NIC1CJyAnCisJZ2l0IGRpZmYgLU0gLUIgPiBkaWZmICYmCisJZ2l0IHJlc2V0IC0taGFyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseScgJworCWdpdCBhcHBseSBkaWZmICYmCisJdGVzdF9jbXAgZmlsZTEgZmlsZTEtc3dhcHBlZCAmJgorCXRlc3RfY21wIGZpbGUyIGZpbGUyLXN3YXBwZWQgJiYKKwl0ZXN0X2NtcCBmaWxlMyBmaWxlMy1zd2FwcGVkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzMS1hcHBseS1mYWtlLWFuY2VzdG9yLnNoIGIvdC90NDEzMS1hcHBseS1mYWtlLWFuY2VzdG9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxMzYxY2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTMxLWFwcGx5LWZha2UtYW5jZXN0b3Iuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBTdGVwaGVuIEJveWQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IC0tYnVpbGQtZmFrZS1hbmNlc3RvciBoYW5kbGluZy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IDEgJiYKKwl0ZXN0X2NvbW1pdCAyICYmCisJbWtkaXIgc3ViICYmCisJdGVzdF9jb21taXQgMyBzdWIvMy50ICYmCisJdGVzdF9jb21taXQgNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWJ1aWxkLWZha2UtYW5jZXN0b3InICcKKwlnaXQgY2hlY2tvdXQgMiAmJgorCWVjaG8gIkEiID4gMS50ICYmCisJZ2l0IGRpZmYgPiAxLnBhdGNoICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAxICYmCisJZ2l0IGFwcGx5IC0tYnVpbGQtZmFrZS1hbmNlc3RvciAxLmFuY2VzdG9yIDEucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1idWlsZC1mYWtlLWFuY2VzdG9yIGluIGEgc3ViZGlyZWN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IDMgJiYKKwllY2hvICJDIiA+IHN1Yi8zLnQgJiYKKwlnaXQgZGlmZiA+IDMucGF0Y2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IDQgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgYXBwbHkgLS1idWlsZC1mYWtlLWFuY2VzdG9yIDMuYW5jZXN0b3IgLi4vMy5wYXRjaCAmJgorCQl0ZXN0IC1mIDMuYW5jZXN0b3IKKwkpICYmCisJZ2l0IGFwcGx5IC0tYnVpbGQtZmFrZS1hbmNlc3RvciAzLmFuY2VzdG9yIDMucGF0Y2ggJiYKKwl0ZXN0X2NtcCBzdWIvMy5hbmNlc3RvciAzLmFuY2VzdG9yCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzMi1hcHBseS1yZW1vdmFsLnNoIGIvdC90NDEzMi1hcHBseS1yZW1vdmFsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlYzFkNmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTMyLWFwcGx5LXJlbW92YWwuc2gKQEAgLTAsMCArMSw5NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBKdW5pbyBDIEhhbWFubworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtYXBwbHkgbm90aWNlcyByZW1vdmFsIHBhdGNoZXMgZ2VuZXJhdGVkIGJ5IEdOVSBkaWZmJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJY2F0IDw8LUVPRiA+YyAmJgorCWRpZmYgLXJ1TiBhL2ZpbGUgYi9maWxlCisJLS0tIGEvZmlsZQlUUzAKKwkrKysgYi9maWxlCVRTMQorCUBAIC0wLDAgKzEgQEAKKwkrc29tZXRoaW5nCisJRU9GCisKKwljYXQgPDwtRU9GID5kICYmCisJZGlmZiAtcnVOIGEvZmlsZSBiL2ZpbGUKKwktLS0gYS9maWxlCVRTMAorCSsrKyBiL2ZpbGUJVFMxCisJQEAgLTEgKzAsMCBAQAorCS1zb21ldGhpbmcKKwlFT0YKKworCXRpbWVXZXN0PSIxOTgyLTA5LTE2IDA3OjAwOjAwLjAwMDAwMDAwMCAtMDgwMCIgJiYKKwkgdGltZUdNVD0iMTk4Mi0wOS0xNiAxNTowMDowMC4wMDAwMDAwMDAgKzAwMDAiICYmCisJdGltZUVhc3Q9IjE5ODItMDktMTcgMDA6MDA6MDAuMDAwMDAwMDAwICswOTAwIiAmJgorCisJZXBvY1dlc3Q9IjE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwIiAmJgorCSBlcG9jR01UPSIxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMCIgJiYKKwllcG9jRWFzdD0iMTk3MC0wMS0wMSAwOTowMDowMC4wMDAwMDAwMDAgKzA5MDAiICYmCisJZXBvY1dlc3QyPSIxOTY5LTEyLTMxIDE2OjAwOjAwIC0wODowMCIgJiYKKworCXNlZCAtZSAicy9UUzAvJGVwb2NXZXN0LyIgLWUgInMvVFMxLyR0aW1lV2VzdC8iIDxjID5jcmVhdGVXZXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kZXBvY0Vhc3QvIiAtZSAicy9UUzEvJHRpbWVFYXN0LyIgPGMgPmNyZWF0ZUVhc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyRlcG9jR01ULyIgLWUgInMvVFMxLyR0aW1lR01ULyIgPGMgPmNyZWF0ZUdNVC5wYXRjaCAmJgorCisJc2VkIC1lICJzL1RTMC8kdGltZVdlc3QvIiAtZSAicy9UUzEvJHRpbWVXZXN0LyIgPGMgPmFkZFdlc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyR0aW1lRWFzdC8iIC1lICJzL1RTMS8kdGltZUVhc3QvIiA8YyA+YWRkRWFzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJHRpbWVHTVQvIiAtZSAicy9UUzEvJHRpbWVHTVQvIiA8YyA+YWRkR01ULnBhdGNoICYmCisKKwlzZWQgLWUgInMvVFMwLyR0aW1lV2VzdC8iIC1lICJzL1RTMS8kdGltZVdlc3QvIiA8ZCA+ZW1wdHlXZXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kdGltZUVhc3QvIiAtZSAicy9UUzEvJHRpbWVFYXN0LyIgPGQgPmVtcHR5RWFzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJHRpbWVHTVQvIiAtZSAicy9UUzEvJHRpbWVHTVQvIiA8ZCA+ZW1wdHlHTVQucGF0Y2ggJiYKKworCXNlZCAtZSAicy9UUzAvJHRpbWVXZXN0LyIgLWUgInMvVFMxLyRlcG9jV2VzdC8iIDxkID5yZW1vdmVXZXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kdGltZUVhc3QvIiAtZSAicy9UUzEvJGVwb2NFYXN0LyIgPGQgPnJlbW92ZUVhc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyR0aW1lR01ULyIgLWUgInMvVFMxLyRlcG9jR01ULyIgPGQgPnJlbW92ZUdNVC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJHRpbWVXZXN0LyIgLWUgInMvVFMxLyRlcG9jV2VzdDIvIiA8ZCA+cmVtb3ZlV2VzdDIucGF0Y2ggJiYKKworCWVjaG8gc29tZXRoaW5nID5zb21ldGhpbmcKKycKKworZm9yIHBhdGNoIGluICoucGF0Y2gKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAidGVzdCAkcGF0Y2giICcKKwkJcm0gLWYgZmlsZSAuZ2l0L2luZGV4ICYmCisJCWNhc2UgIiRwYXRjaCIgaW4KKwkJY3JlYXRlKikKKwkJCSMgbXVzdCBiZSBhYmxlIHRvIGNyZWF0ZQorCQkJZ2l0IGFwcGx5IC0taW5kZXggJHBhdGNoICYmCisJCQl0ZXN0X2NtcCBmaWxlIHNvbWV0aGluZyAmJgorCQkJIyBtdXN0IG5vdGljZSB0aGUgZmlsZSBpcyBhbHJlYWR5IHRoZXJlCisJCQk+ZmlsZSAmJgorCQkJZ2l0IGFkZCBmaWxlICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgJHBhdGNoCisJCQk7OworCQlhZGQqKQorCQkJIyBtdXN0IGJlIGFibGUgdG8gY3JlYXRlIG9yIHBhdGNoCisJCQlnaXQgYXBwbHkgJHBhdGNoICYmCisJCQl0ZXN0X2NtcCBmaWxlIHNvbWV0aGluZyAmJgorCQkJPmZpbGUgJiYKKwkJCWdpdCBhcHBseSAkcGF0Y2ggJiYKKwkJCXRlc3RfY21wIGZpbGUgc29tZXRoaW5nCisJCQk7OworCQllbXB0eSopCisJCQkjIG11c3QgbGVhdmUgYW4gZW1wdHkgZmlsZQorCQkJY2F0IHNvbWV0aGluZyA+ZmlsZSAmJgorCQkJZ2l0IGFkZCBmaWxlICYmCisJCQlnaXQgYXBwbHkgLS1pbmRleCAkcGF0Y2ggJiYKKwkJCXRlc3QgLWYgZmlsZSAmJgorCQkJdGVzdF9tdXN0X2JlX2VtcHR5IGZpbGUKKwkJCTs7CisJCXJlbW92ZSopCisJCQkjIG11c3QgcmVtb3ZlIHRoZSBmaWxlCisJCQljYXQgc29tZXRoaW5nID5maWxlICYmCisJCQlnaXQgYWRkIGZpbGUgJiYKKwkJCWdpdCBhcHBseSAtLWluZGV4ICRwYXRjaCAmJgorCQkJISB0ZXN0IC1mIGZpbGUKKwkJCTs7CisJCWVzYWMKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzMy1hcHBseS1maWxlbmFtZXMuc2ggYi90L3Q0MTMzLWFwcGx5LWZpbGVuYW1lcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNWVkM2IxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzMy1hcHBseS1maWxlbmFtZXMuc2gKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBBbmRyZWFzIEdydWVuYmFjaGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBmaWxlbmFtZSBjb25zaXN0ZW5jeSBjaGVjaycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWNhdCA+IGJhZDEucGF0Y2ggPDxFT0YgJiYKK2RpZmYgLS1naXQgYS9mIGIvZgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQwMDQ5MWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2YtYmxhaAorQEAgLTAsMCArMSBAQAorKzEKK0VPRgorCWNhdCA+IGJhZDIucGF0Y2ggPDxFT0YKK2RpZmYgLS1naXQgYS9mIGIvZgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCBkMDA0OTFmLi4wMDAwMDAwCistLS0gYi9mLWJsYWgKKysrKyAvZGV2L251bGwKK0BAIC0xICswLDAgQEAKKy0xCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZGlmZiB3aXRoIGluY29uc2lzdGVudCBmaWxlbmFtZXMgaW4gaGVhZGVycycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBiYWQxLnBhdGNoIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSIgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IGJhZDIucGF0Y2ggMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZGlmZiB3aXRoIG5ldyBmaWxlbmFtZSBtaXNzaW5nIGZyb20gaGVhZGVycycgJworCWNhdCA+bWlzc2luZ19uZXdfZmlsZW5hbWUuZGlmZiA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL2YgYi9mCisJaW5kZXggMDAwMDAwMC4uZDAwNDkxZgorCS0tLSBhL2YKKwlAQCAtMCwwICsxIEBACisJKzEKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgbWlzc2luZ19uZXdfZmlsZW5hbWUuZGlmZiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZGlmZiB3aXRoIG9sZCBmaWxlbmFtZSBtaXNzaW5nIGZyb20gaGVhZGVycycgJworCWNhdCA+bWlzc2luZ19vbGRfZmlsZW5hbWUuZGlmZiA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL2YgYi9mCisJaW5kZXggZDAwNDkxZi4uMDAwMDAwMAorCSsrKyBiL2YKKwlAQCAtMSArMCwwIEBACisJLTEKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgbWlzc2luZ19vbGRfZmlsZW5hbWUuZGlmZiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTM0LWFwcGx5LXN1Ym1vZHVsZS5zaCBiL3QvdDQxMzQtYXBwbHktc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5ZWQ0Y2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM0LWFwcGx5LXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIFBldGVyIENvbGxpbmdib3VybmUKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHN1Ym1vZHVsZSB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3Rfb2lkX2luaXQgJiYKKwljYXQgPiBjcmVhdGUtc20ucGF0Y2ggPDxFT0YgJiYKK2RpZmYgLS1naXQgYS9kaXIvc20gYi9kaXIvc20KK25ldyBmaWxlIG1vZGUgMTYwMDAwCitpbmRleCAwMDAwMDAwLi4wMTIzNDU2CistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc20KK0BAIC0wLDAgKzEgQEAKKytTdWJwcm9qZWN0IGNvbW1pdCAkKHRlc3Rfb2lkIG51bWVyaWMpCitFT0YKKwljYXQgPiByZW1vdmUtc20ucGF0Y2ggPDxFT0YKK2RpZmYgLS1naXQgYS9kaXIvc20gYi9kaXIvc20KK2RlbGV0ZWQgZmlsZSBtb2RlIDE2MDAwMAoraW5kZXggMDEyMzQ1Ni4uMDAwMDAwMAorLS0tIGEvZGlyL3NtCisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistU3VicHJvamVjdCBjb21taXQgJCh0ZXN0X29pZCBudW1lcmljKQorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92aW5nIGEgc3VibW9kdWxlIGFsc28gcmVtb3ZlcyBhbGwgbGVhZGluZyBzdWJkaXJlY3RvcmllcycgJworCWdpdCBhcHBseSAtLWluZGV4IGNyZWF0ZS1zbS5wYXRjaCAmJgorCXRlc3QgLWQgZGlyL3NtICYmCisJZ2l0IGFwcGx5IC0taW5kZXggcmVtb3ZlLXNtLnBhdGNoICYmCisJdGVzdCBcISAtZCBkaXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTM1LWFwcGx5LXdlaXJkLWZpbGVuYW1lcy5zaCBiL3QvdDQxMzUtYXBwbHktd2VpcmQtZmlsZW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZiYzNmYjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1LWFwcGx5LXdlaXJkLWZpbGVuYW1lcy5zaApAQCAtMCwwICsxLDEwMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSB3aXRoIHdlaXJkIHBvc3RpbWFnZSBmaWxlbmFtZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXZlY3Rvcj0kVEVTVF9ESVJFQ1RPUlkvdDQxMzUgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBwcmVpbWFnZSAmJgorCWdpdCB0YWcgcHJlaW1hZ2UgJiYKKworCXJlc2V0X3ByZWltYWdlKCkgeworCQlnaXQgY2hlY2tvdXQgLWYgcHJlaW1hZ2VeMCAmJgorCQlnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQgSEVBRCAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorCX0KKycKKwordHJ5X2ZpbGVuYW1lKCkgeworCWRlc2M9JDEKKwlwb3N0aW1hZ2U9JDIKKwlwcmVyZXE9JHszOi19CisJZXhwMT0kezQ6LXN1Y2Nlc3N9CisJZXhwMj0kezU6LXN1Y2Nlc3N9CisJZXhwMz0kezY6LXN1Y2Nlc3N9CisKKwl0ZXN0X2V4cGVjdF8kZXhwMSAkcHJlcmVxICIkZGVzYywgZ2l0LXN0eWxlIGZpbGUgY3JlYXRpb24gcGF0Y2giICIKKwkJZWNobyBwb3N0aW1hZ2UgPmV4cGVjdGVkICYmCisJCXJlc2V0X3ByZWltYWdlICYmCisJCXJtIC1mICckcG9zdGltYWdlJyAmJgorCQlnaXQgYXBwbHkgLXYgXCJcJHZlY3RvclwiLydnaXQtJGRlc2MuZGlmZicgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgJyRwb3N0aW1hZ2UnCisJIgorCisJdGVzdF9leHBlY3RfJGV4cDIgJHByZXJlcSAiJGRlc2MsIHRyYWRpdGlvbmFsIHBhdGNoIiAiCisJCWVjaG8gcG9zdGltYWdlID5leHBlY3RlZCAmJgorCQlyZXNldF9wcmVpbWFnZSAmJgorCQllY2hvIHByZWltYWdlID4nJHBvc3RpbWFnZScgJiYKKwkJZ2l0IGFwcGx5IC12IFwiXCR2ZWN0b3JcIi8nZGlmZi0kZGVzYy5kaWZmJyAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCAnJHBvc3RpbWFnZScKKwkiCisKKwl0ZXN0X2V4cGVjdF8kZXhwMyAkcHJlcmVxICIkZGVzYywgdHJhZGl0aW9uYWwgZmlsZSBjcmVhdGlvbiBwYXRjaCIgIgorCQllY2hvIHBvc3RpbWFnZSA+ZXhwZWN0ZWQgJiYKKwkJcmVzZXRfcHJlaW1hZ2UgJiYKKwkJcm0gLWYgJyRwb3N0aW1hZ2UnICYmCisJCWdpdCBhcHBseSAtdiBcIlwkdmVjdG9yXCIvJ2FkZC0kZGVzYy5kaWZmJyAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCAnJHBvc3RpbWFnZScKKwkiCit9CisKK3RyeV9maWxlbmFtZSAncGxhaW4nICAgICAgICAgICAgJ3Bvc3RpbWFnZS50eHQnCit0cnlfZmlsZW5hbWUgJ3dpdGggc3BhY2VzJyAgICAgICdwb3N0IGltYWdlLnR4dCcKK3RyeV9maWxlbmFtZSAnd2l0aCB0YWInICAgICAgICAgJ3Bvc3QJaW1hZ2UudHh0JyBGVU5OWU5BTUVTCit0cnlfZmlsZW5hbWUgJ3dpdGggYmFja3NsYXNoJyAgICdwb3N0XGltYWdlLnR4dCcgQlNMQVNIUFNQRUMKK3RyeV9maWxlbmFtZSAnd2l0aCBxdW90ZScgICAgICAgJyJwb3N0aW1hZ2UiLnR4dCcgRlVOTllOQU1FUyBzdWNjZXNzIGZhaWx1cmUgc3VjY2VzcworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGl0ZXNwYWNlLWRhbWFnZWQgdHJhZGl0aW9uYWwgcGF0Y2gnICcKKwllY2hvIHBvc3RpbWFnZSA+ZXhwZWN0ZWQgJiYKKwlyZXNldF9wcmVpbWFnZSAmJgorCXJtIC1mIHBvc3RpbWFnZS50eHQgJiYKKwlnaXQgYXBwbHkgLXYgIiR2ZWN0b3IvZGFtYWdlZC5kaWZmIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHBvc3RpbWFnZS50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhZGl0aW9uYWwgcGF0Y2ggd2l0aCBjb2xvbiBpbiB0aW1lem9uZScgJworCWVjaG8gcG9zdGltYWdlID5leHBlY3RlZCAmJgorCXJlc2V0X3ByZWltYWdlICYmCisJcm0gLWYgInBvc3QgaW1hZ2UudHh0IiAmJgorCWdpdCBhcHBseSAiJHZlY3Rvci9mdW5ueS10ei5kaWZmIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICJwb3N0IGltYWdlLnR4dCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhZGl0aW9uYWwsIHdoaXRlc3BhY2UtZGFtYWdlZCwgY29sb24gaW4gdGltZXpvbmUnICcKKwllY2hvIHBvc3RpbWFnZSA+ZXhwZWN0ZWQgJiYKKwlyZXNldF9wcmVpbWFnZSAmJgorCXJtIC1mICJwb3N0IGltYWdlLnR4dCIgJiYKKwlnaXQgYXBwbHkgIiR2ZWN0b3IvZGFtYWdlZC10ei5kaWZmIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICJwb3N0IGltYWdlLnR4dCIKKycKKworY2F0ID5kaWZmLWZyb20tc3ZuIDw8XEVPRgorSW5kZXg6IE1ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkaWZmIC0tZ2l0IGEvYnJhbmNoZXMvTWFrZWZpbGUKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorLS0tIGEvYnJhbmNoZXMvTWFrZWZpbGUJKHJldmlzaW9uIDEzKQorKysrIC9kZXYvbnVsbAkobm9uZXhpc3RlbnQpCitAQCArMSAwLDAgQEAKKy0KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBoYW5kbGVzIGEgZGlmZiBnZW5lcmF0ZWQgYnkgU3VidmVyc2lvbicgJworCT5NYWtlZmlsZSAmJgorCWdpdCBhcHBseSAtcDIgZGlmZi1mcm9tLXN2biAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIE1ha2VmaWxlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS8uZ2l0aWdub3JlIGIvdC90NDEzNS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNThlNjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACisvZmlsZS1jcmVhdGlvbi8KKy90cmFkLWNyZWF0aW9uLworL3RyYWQtbW9kaWZpY2F0aW9uLwpkaWZmIC0tZ2l0IGEvdC90NDEzNS9hZGQtcGxhaW4uZGlmZiBiL3QvdDQxMzUvYWRkLXBsYWluLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y1OTcwYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvYWRkLXBsYWluLmRpZmYKQEAgLTAsMCArMSw1IEBACitkaWZmIC1wcnVOIGEvcG9zdGltYWdlLnR4dCBiL3Bvc3RpbWFnZS50eHQKKy0tLSBhL3Bvc3RpbWFnZS50eHQJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBiL3Bvc3RpbWFnZS50eHQJMjAxMC0wOC0xOCAyMDoxMzozMS40ODQwMDIyNTUgLTA1MDAKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvYWRkLXdpdGggYmFja3NsYXNoLmRpZmYgYi90L3Q0MTM1L2FkZC13aXRoIGJhY2tzbGFzaC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODYxZTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2FkZC13aXRoIGJhY2tzbGFzaC5kaWZmCkBAIC0wLDAgKzEsNSBAQAorZGlmZiAtcHJ1TiBhL3Bvc3RcaW1hZ2UudHh0IGIvcG9zdFxpbWFnZS50eHQKKy0tLSBhL3Bvc3RcaW1hZ2UudHh0CTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKysgYi9wb3N0XGltYWdlLnR4dAkyMDEwLTA4LTE4IDIwOjEzOjMxLjY5MjAwMjI1NSAtMDUwMAorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9hZGQtd2l0aCBxdW90ZS5kaWZmIGIvdC90NDEzNS9hZGQtd2l0aCBxdW90ZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NmRlNzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2FkZC13aXRoIHF1b3RlLmRpZmYKQEAgLTAsMCArMSw1IEBACitkaWZmIC1wcnVOIGEvInBvc3RpbWFnZSIudHh0IGIvInBvc3RpbWFnZSIudHh0CistLS0gYS8icG9zdGltYWdlIi50eHQJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBiLyJwb3N0aW1hZ2UiLnR4dAkyMDEwLTA4LTE4IDIwOjEzOjMxLjc1NjAwMjI1NSAtMDUwMAorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9hZGQtd2l0aCBzcGFjZXMuZGlmZiBiL3QvdDQxMzUvYWRkLXdpdGggc3BhY2VzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhMTIxMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvYWRkLXdpdGggc3BhY2VzLmRpZmYKQEAgLTAsMCArMSw1IEBACitkaWZmIC1wcnVOIGEvcG9zdCBpbWFnZS50eHQgYi9wb3N0IGltYWdlLnR4dAorLS0tIGEvcG9zdCBpbWFnZS50eHQJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBiL3Bvc3QgaW1hZ2UudHh0CTIwMTAtMDgtMTggMjA6MTM6MzEuNTU2MDAyMjU1IC0wNTAwCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2FkZC13aXRoIHRhYi5kaWZmIGIvdC90NDEzNS9hZGQtd2l0aCB0YWIuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjY3Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9hZGQtd2l0aCB0YWIuZGlmZgpAQCAtMCwwICsxLDUgQEAKK2RpZmYgLXBydU4gYS9wb3N0CWltYWdlLnR4dCBiL3Bvc3QJaW1hZ2UudHh0CistLS0gYS9wb3N0CWltYWdlLnR4dAkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysrIGIvcG9zdAlpbWFnZS50eHQJMjAxMC0wOC0xOCAyMDoxMzozMS42MjgwMDIyNTUgLTA1MDAKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZGFtYWdlZC10ei5kaWZmIGIvdC90NDEzNS9kYW1hZ2VkLXR6LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhYWYwOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZGFtYWdlZC10ei5kaWZmCkBAIC0wLDAgKzEsNSBAQAorZGlmZiAtdXJOIC1YIC91c3IvcGVvcGxlL2plcy9leGNsdWRlLWxpbnV4IGxpbnV4LTIuNi4xMi1yYzItbW0zLXZhbmlsbGEvcG9zdCBpbWFnZS50eHQgbGludXgtMi42LjEyLXJjMi1tbTMvcG9zdCBpbWFnZS50eHQKKy0tLSBsaW51eC0yLjYuMTItcmMyLW1tMy12YW5pbGxhL3Bvc3QgaW1hZ2UudHh0IDE5NjktMTItMzEgMTY6MDA6MDAgLTA4OjAwCisrKysgbGludXgtMi42LjEyLXJjMi1tbTMvcG9zdCBpbWFnZS50eHQgMjAwNS0wNC0xMiAwMjoxNDowNiAtMDc6MDAKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZGFtYWdlZC5kaWZmIGIvdC90NDEzNS9kYW1hZ2VkLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhmN2VkZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZGFtYWdlZC5kaWZmCkBAIC0wLDAgKzEsNSBAQAorZGlmZiAtcHJ1TiBhL3Bvc3RpbWFnZS50eHQgYi9wb3N0aW1hZ2UudHh0CistLS0gYS9wb3N0aW1hZ2UudHh0ICAgICAxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysrIGIvcG9zdGltYWdlLnR4dCAgICAgMjAxMC0wOC0xOCAyMDoxMzozMS40ODQwMDIyNTUgLTA1MDAKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZGlmZi1wbGFpbi5kaWZmIGIvdC90NDEzNS9kaWZmLXBsYWluLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlZGNmYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZGlmZi1wbGFpbi5kaWZmCkBAIC0wLDAgKzEsNSBAQAorLS0tIHBvc3RpbWFnZS50eHQub3JpZwkyMDEwLTA4LTE4IDIwOjEzOjMxLjQzMjAwMjI1NSAtMDUwMAorKysrIHBvc3RpbWFnZS50eHQJMjAxMC0wOC0xOCAyMDoxMzozMS40MzIwMDIyNTUgLTA1MDAKK0BAIC0xICsxIEBACistcHJlaW1hZ2UKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZGlmZi13aXRoIGJhY2tzbGFzaC5kaWZmIGIvdC90NDEzNS9kaWZmLXdpdGggYmFja3NsYXNoLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2OGE2MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZGlmZi13aXRoIGJhY2tzbGFzaC5kaWZmCkBAIC0wLDAgKzEsNSBAQAorLS0tIHBvc3RcaW1hZ2UudHh0Lm9yaWcJMjAxMC0wOC0xOCAyMDoxMzozMS42ODAwMDIyNTUgLTA1MDAKKysrKyBwb3N0XGltYWdlLnR4dAkyMDEwLTA4LTE4IDIwOjEzOjMxLjY4MDAwMjI1NSAtMDUwMAorQEAgLTEgKzEgQEAKKy1wcmVpbWFnZQorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9kaWZmLXdpdGggcXVvdGUuZGlmZiBiL3QvdDQxMzUvZGlmZi13aXRoIHF1b3RlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlOGNjMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZGlmZi13aXRoIHF1b3RlLmRpZmYKQEAgLTAsMCArMSw1IEBACistLS0gInBvc3RpbWFnZSIudHh0Lm9yaWcJMjAxMC0wOC0xOCAyMDoxMzozMS43NDQwMDIyNTUgLTA1MDAKKysrKyAicG9zdGltYWdlIi50eHQJMjAxMC0wOC0xOCAyMDoxMzozMS43NDQwMDIyNTUgLTA1MDAKK0BAIC0xICsxIEBACistcHJlaW1hZ2UKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZGlmZi13aXRoIHNwYWNlcy5kaWZmIGIvdC90NDEzNS9kaWZmLXdpdGggc3BhY2VzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUxMjA1NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZGlmZi13aXRoIHNwYWNlcy5kaWZmCkBAIC0wLDAgKzEsNSBAQAorLS0tIHBvc3QgaW1hZ2UudHh0Lm9yaWcJMjAxMC0wOC0xOCAyMDoxMzozMS41NDQwMDIyNTUgLTA1MDAKKysrKyBwb3N0IGltYWdlLnR4dAkyMDEwLTA4LTE4IDIwOjEzOjMxLjU0NDAwMjI1NSAtMDUwMAorQEAgLTEgKzEgQEAKKy1wcmVpbWFnZQorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9kaWZmLXdpdGggdGFiLmRpZmYgYi90L3Q0MTM1L2RpZmYtd2l0aCB0YWIuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTZkOWIyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9kaWZmLXdpdGggdGFiLmRpZmYKQEAgLTAsMCArMSw1IEBACistLS0gcG9zdAlpbWFnZS50eHQub3JpZwkyMDEwLTA4LTE4IDIwOjEzOjMxLjYxNjAwMjI1NSAtMDUwMAorKysrIHBvc3QJaW1hZ2UudHh0CTIwMTAtMDgtMTggMjA6MTM6MzEuNjE2MDAyMjU1IC0wNTAwCitAQCAtMSArMSBAQAorLXByZWltYWdlCisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2Z1bm55LXR6LmRpZmYgYi90L3Q0MTM1L2Z1bm55LXR6LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4ZTNhOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZnVubnktdHouZGlmZgpAQCAtMCwwICsxLDUgQEAKK2RpZmYgLXVyTiAtWCAvdXNyL3Blb3BsZS9qZXMvZXhjbHVkZS1saW51eCBsaW51eC0yLjYuMTItcmMyLW1tMy12YW5pbGxhL3Bvc3QgaW1hZ2UudHh0IGxpbnV4LTIuNi4xMi1yYzItbW0zL3Bvc3QgaW1hZ2UudHh0CistLS0gbGludXgtMi42LjEyLXJjMi1tbTMtdmFuaWxsYS9wb3N0IGltYWdlLnR4dAkxOTY5LTEyLTMxIDE2OjAwOjAwIC0wODowMAorKysrIGxpbnV4LTIuNi4xMi1yYzItbW0zL3Bvc3QgaW1hZ2UudHh0CTIwMDUtMDQtMTIgMDI6MTQ6MDYgLTA3OjAwCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2dpdC1wbGFpbi5kaWZmIGIvdC90NDEzNS9naXQtcGxhaW4uZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjQ3ZDFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9naXQtcGxhaW4uZGlmZgpAQCAtMCwwICsxLDcgQEAKK2RpZmYgLS1naXQgYS9wb3N0aW1hZ2UudHh0IGIvcG9zdGltYWdlLnR4dAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmVmZjBjNTQKKy0tLSAvZGV2L251bGwKKysrKyBiL3Bvc3RpbWFnZS50eHQKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZ2l0LXdpdGggYmFja3NsYXNoLmRpZmYgYi90L3Q0MTM1L2dpdC13aXRoIGJhY2tzbGFzaC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlODRhMTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2dpdC13aXRoIGJhY2tzbGFzaC5kaWZmCkBAIC0wLDAgKzEsNyBAQAorZGlmZiAtLWdpdCAiYS9wb3N0XFxpbWFnZS50eHQiICJiL3Bvc3RcXGltYWdlLnR4dCIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lZmYwYzU0CistLS0gL2Rldi9udWxsCisrKysgImIvcG9zdFxcaW1hZ2UudHh0IgorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9naXQtd2l0aCBxdW90ZS5kaWZmIGIvdC90NDEzNS9naXQtd2l0aCBxdW90ZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYmVhOGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2dpdC13aXRoIHF1b3RlLmRpZmYKQEAgLTAsMCArMSw3IEBACitkaWZmIC0tZ2l0ICJhL1wicG9zdGltYWdlXCIudHh0IiAiYi9cInBvc3RpbWFnZVwiLnR4dCIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lZmYwYzU0CistLS0gL2Rldi9udWxsCisrKysgImIvXCJwb3N0aW1hZ2VcIi50eHQiCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2dpdC13aXRoIHNwYWNlcy5kaWZmIGIvdC90NDEzNS9naXQtd2l0aCBzcGFjZXMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWFhODEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9naXQtd2l0aCBzcGFjZXMuZGlmZgpAQCAtMCwwICsxLDcgQEAKK2RpZmYgLS1naXQgYS9wb3N0IGltYWdlLnR4dCBiL3Bvc3QgaW1hZ2UudHh0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZWZmMGM1NAorLS0tIC9kZXYvbnVsbAorKysrIGIvcG9zdCBpbWFnZS50eHQJCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2dpdC13aXRoIHRhYi5kaWZmIGIvdC90NDEzNS9naXQtd2l0aCB0YWIuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2EzYzkyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9naXQtd2l0aCB0YWIuZGlmZgpAQCAtMCwwICsxLDcgQEAKK2RpZmYgLS1naXQgImEvcG9zdFx0aW1hZ2UudHh0IiAiYi9wb3N0XHRpbWFnZS50eHQiCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZWZmMGM1NAorLS0tIC9kZXYvbnVsbAorKysrICJiL3Bvc3RcdGltYWdlLnR4dCIKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvbWFrZS1wYXRjaGVzIGIvdC90NDEzNS9tYWtlLXBhdGNoZXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjVmNDVkZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvbWFrZS1wYXRjaGVzCkBAIC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9zaAorCitkb19maWxlbmFtZSgpIHsKKwlkZXNjPSQxCisJcG9zdGltYWdlPSQyCisKKwlybSAtZnIgZmlsZS1jcmVhdGlvbiAmJgorCWdpdCBpbml0IGZpbGUtY3JlYXRpb24gJiYKKwkoCisJCWNkIGZpbGUtY3JlYXRpb24gJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGluaXQgJiYKKwkJZWNobyBwb3N0aW1hZ2UgPiIkcG9zdGltYWdlIiAmJgorCQlnaXQgYWRkIC1OICIkcG9zdGltYWdlIiAmJgorCQlnaXQgZGlmZiBIRUFEID4iLi4vZ2l0LSRkZXNjLmRpZmYiCisJKSAmJgorCisJcm0gLWZyIHRyYWQtbW9kaWZpY2F0aW9uICYmCisJbWtkaXIgdHJhZC1tb2RpZmljYXRpb24gJiYKKwkoCisJCWNkIHRyYWQtbW9kaWZpY2F0aW9uICYmCisJCWVjaG8gcHJlaW1hZ2UgPiIkcG9zdGltYWdlLm9yaWciICYmCisJCWVjaG8gcG9zdGltYWdlID4iJHBvc3RpbWFnZSIgJiYKKwkJISBkaWZmIC11ICIkcG9zdGltYWdlLm9yaWciICIkcG9zdGltYWdlIiA+Ii4uL2RpZmYtJGRlc2MuZGlmZiIKKwkpICYmCisKKwlybSAtZnIgdHJhZC1jcmVhdGlvbiAmJgorCW1rZGlyIHRyYWQtY3JlYXRpb24gJiYKKwkoCisJCWNkIHRyYWQtY3JlYXRpb24gJiYKKwkJbWtkaXIgYSBiICYmCisJCWVjaG8gcG9zdGltYWdlID4iYi8kcG9zdGltYWdlIiAmJgorCQkhIGRpZmYgLXBydU4gYSBiID4iLi4vYWRkLSRkZXNjLmRpZmYiCisJKQorfQorCitkb19maWxlbmFtZSBwbGFpbiBwb3N0aW1hZ2UudHh0ICYmCitkb19maWxlbmFtZSAnd2l0aCBzcGFjZXMnICdwb3N0IGltYWdlLnR4dCcgJiYKK2RvX2ZpbGVuYW1lICd3aXRoIHRhYicgJ3Bvc3QJaW1hZ2UudHh0JyAmJgorZG9fZmlsZW5hbWUgJ3dpdGggYmFja3NsYXNoJyAncG9zdFxpbWFnZS50eHQnICYmCitkb19maWxlbmFtZSAnd2l0aCBxdW90ZScgJyJwb3N0aW1hZ2UiLnR4dCcgJiYKK2V4cGFuZCBhZGQtcGxhaW4uZGlmZiA+ZGFtYWdlZC5kaWZmIHx8Cit7CisJZWNobyA+JjIgRmFpbGVkLiAmJgorCWV4aXQgMQorfQpkaWZmIC0tZ2l0IGEvdC90NDEzNi1hcHBseS1jaGVjay5zaCBiL3QvdDQxMzYtYXBwbHktY2hlY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGMzZjI2NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzYtYXBwbHktY2hlY2suc2gKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBzaG91bGQgZXhpdCBub24temVybyB3aXRoIHVucmVjb2duaXplZCBpbnB1dC4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1jaGVjayBleGl0cyBub24temVybyB3aXRoIHVucmVjb2duaXplZCBpbnB1dCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNoZWNrIC0gPDwtXEVPRgorCUkgYW0gbm90IGEgcGF0Y2gKKwlJIGxvb2sgbm90aGluZyBsaWtlIGEgcGF0Y2gKKwlnaXQgYXBwbHkgbXVzdCBmYWlsCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGV4aXRzIG5vbi16ZXJvIHdpdGggbm8tb3AgcGF0Y2gnICcKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2V0IGEvMSBiLzEKKwlpbmRleCA2Njk2ZWE0Li42MDZlZGRkIDEwMDY0NAorCS0tLSBhLzEKKwkrKysgYi8xCisJQEAgLTEsMSArMSwxIEBACisJIDEKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1zdGF0IGlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2hlY2sgaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYGFwcGx5IC0tcmVjb3VudGAgYWxsb3dzIG5vLW9wIHBhdGNoJyAnCisJZWNobyAxID4xICYmCisJZ2l0IGFwcGx5IC0tcmVjb3VudCAtLWNoZWNrIDw8LVxFT0YKKwlkaWZmIC0tZ2V0IGEvMSBiLzEKKwlpbmRleCA2Njk2ZWE0Li42MDZlZGRkIDEwMDY0NAorCS0tLSBhLzEKKwkrKysgYi8xCisJQEAgLTEsMSArMSwxIEBACisJIDEKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBjb21iaW5hdGlvbjogY3JlYXRlIGFuZCBjb3B5JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2hlY2sgLSA8PC1cRU9GCisJZGlmZiAtLWdpdCBhLzEgYi8yCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwljb3B5IGZyb20gMQorCWNvcHkgdG8gMgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIGNvbWJpbmF0aW9uOiBjcmVhdGUgYW5kIHJlbmFtZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNoZWNrIC0gPDwtXEVPRgorCWRpZmYgLS1naXQgYS8xIGIvMgorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJcmVuYW1lIGZyb20gMQorCXJlbmFtZSB0byAyCisJRU9GCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzNy1hcHBseS1zdWJtb2R1bGUuc2ggYi90L3Q0MTM3LWFwcGx5LXN1Ym1vZHVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOWJkNDBhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNy1hcHBseS1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSwyMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBoYW5kbGluZyBzdWJtb2R1bGVzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXN1Ym1vZHVsZS11cGRhdGUuc2gKKworYXBwbHlfaW5kZXggKCkgeworCWdpdCBkaWZmIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgIi4uJDEiIHwgZ2l0IGFwcGx5IC0taW5kZXggLQorfQorCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImFwcGx5X2luZGV4IgorCithcHBseV8zd2F5ICgpIHsKKwlnaXQgZGlmZiAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ICIuLiQxIiB8IGdpdCBhcHBseSAtLTN3YXkgLQorfQorCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImFwcGx5XzN3YXkiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzOC1hcHBseS13cy1leHBhbnNpb24uc2ggYi90L3Q0MTM4LWFwcGx5LXdzLWV4cGFuc2lvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMTlmYWViCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzOC1hcHBseS13cy1leHBhbnNpb24uc2gKQEAgLTAsMCArMSwxMjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgS3lsZSBKLiBNY0theQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgdGVzdCBwYXRjaGVzIHdpdGggd2hpdGVzcGFjZSBleHBhbnNpb24uJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJIworCSMjIGNyZWF0ZSB0ZXN0LU4sIHBhdGNoTi5wYXRjaCwgZXhwZWN0LU4gZmlsZXMKKwkjCisKKwkjIHRlc3QgMQorCXByaW50ZiAiXHQlc1xuIiAxIDIgMyA0IDUgNiA+YmVmb3JlICYmCisJcHJpbnRmICJcdCVzXG4iIDEgMiAzID5hZnRlciAmJgorCXByaW50ZiAiJTY0c1xuIiBhIGIgYyA+PmFmdGVyICYmCisJcHJpbnRmICJcdCVzXG4iIDQgNSA2ID4+YWZ0ZXIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCBiZWZvcmUgYWZ0ZXIgPnBhdGNoMS5wYXRjaC5yYXcgJiYKKwlzZWQgLWUgInMvYmVmb3JlL3Rlc3QtMS8iIC1lICJzL2FmdGVyL3Rlc3QtMS8iIHBhdGNoMS5wYXRjaC5yYXcgPnBhdGNoMS5wYXRjaCAmJgorCXByaW50ZiAiJTY0c1xuIiAxIDIgMyA0IDUgNiA+dGVzdC0xICYmCisJcHJpbnRmICIlNjRzXG4iIDEgMiAzIGEgYiBjIDQgNSA2ID5leHBlY3QtMSAmJgorCisJIyB0ZXN0IDIKKwlwcmludGYgIlx0JXNcbiIgYSBiIGMgZCBlIGYgPmJlZm9yZSAmJgorCXByaW50ZiAiXHQlc1xuIiBhIGIgYyA+YWZ0ZXIgJiYKKwluPTEwICYmCisJeD0xICYmCisJd2hpbGUgdGVzdCAkeCAtbHQgJG4KKwlkbworCQlwcmludGYgIiU2M3MlZFxuIiAiIiAkeCA+PmFmdGVyCisJCXg9JCgoICR4ICsgMSApKQorCWRvbmUgJiYKKwlwcmludGYgIlx0JXNcbiIgZCBlIGYgPj5hZnRlciAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IGJlZm9yZSBhZnRlciA+cGF0Y2gyLnBhdGNoLnJhdyAmJgorCXNlZCAtZSAicy9iZWZvcmUvdGVzdC0yLyIgLWUgInMvYWZ0ZXIvdGVzdC0yLyIgcGF0Y2gyLnBhdGNoLnJhdyA+cGF0Y2gyLnBhdGNoICYmCisJcHJpbnRmICIlNjRzXG4iIGEgYiBjIGQgZSBmID50ZXN0LTIgJiYKKwlwcmludGYgIiU2NHNcbiIgYSBiIGMgPmV4cGVjdC0yICYmCisJeD0xICYmCisJd2hpbGUgdGVzdCAkeCAtbHQgJG4KKwlkbworCQlwcmludGYgIiU2M3MlZFxuIiAiIiAkeCA+PmV4cGVjdC0yCisJCXg9JCgoICR4ICsgMSApKQorCWRvbmUgJiYKKwlwcmludGYgIiU2NHNcbiIgZCBlIGYgPj5leHBlY3QtMiAmJgorCisJIyB0ZXN0IDMKKwlwcmludGYgIlx0JXNcbiIgYSBiIGMgZCBlIGYgPmJlZm9yZSAmJgorCXByaW50ZiAiXHQlc1xuIiBhIGIgYyA+YWZ0ZXIgJiYKKwluPTEwMCAmJgorCXg9MCAmJgorCXdoaWxlIHRlc3QgJHggLWx0ICRuCisJZG8KKwkJcHJpbnRmICIlNjNzJTAyZFxuIiAiIiAkeCA+PmFmdGVyCisJCXg9JCgoICR4ICsgMSApKQorCWRvbmUgJiYKKwlwcmludGYgIlx0JXNcbiIgZCBlIGYgPj5hZnRlciAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IGJlZm9yZSBhZnRlciA+cGF0Y2gzLnBhdGNoLnJhdyAmJgorCXNlZCAtZSAicy9iZWZvcmUvdGVzdC0zLyIgLWUgInMvYWZ0ZXIvdGVzdC0zLyIgcGF0Y2gzLnBhdGNoLnJhdyA+cGF0Y2gzLnBhdGNoICYmCisJcHJpbnRmICIlNjRzXG4iIGEgYiBjIGQgZSBmID50ZXN0LTMgJiYKKwlwcmludGYgIiU2NHNcbiIgYSBiIGMgPmV4cGVjdC0zICYmCisJeD0wICYmCisJd2hpbGUgdGVzdCAkeCAtbHQgJG4KKwlkbworCQlwcmludGYgIiU2M3MlMDJkXG4iICIiICR4ID4+ZXhwZWN0LTMKKwkJeD0kKCggJHggKyAxICkpCisJZG9uZSAmJgorCXByaW50ZiAiJTY0c1xuIiBkIGUgZiA+PmV4cGVjdC0zICYmCisKKwkjIHRlc3QgNAorCT5iZWZvcmUgJiYKKwl4PTAgJiYKKwl3aGlsZSB0ZXN0ICR4IC1sdCA1MAorCWRvCisJCXByaW50ZiAiXHQlMDJkXG4iICR4ID4+YmVmb3JlCisJCXg9JCgoICR4ICsgMSApKQorCWRvbmUgJiYKKwljYXQgYmVmb3JlID5hZnRlciAmJgorCXByaW50ZiAiJTY0c1xuIiBhIGIgYyA+PmFmdGVyICYmCisJd2hpbGUgdGVzdCAkeCAtbHQgMTAwCisJZG8KKwkJcHJpbnRmICJcdCUwMmRcbiIgJHggPj5iZWZvcmUKKwkJcHJpbnRmICJcdCUwMmRcbiIgJHggPj5hZnRlcgorCQl4PSQoKCAkeCArIDEgKSkKKwlkb25lICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tbm8taW5kZXggYmVmb3JlIGFmdGVyID5wYXRjaDQucGF0Y2gucmF3ICYmCisJc2VkIC1lICJzL2JlZm9yZS90ZXN0LTQvIiAtZSAicy9hZnRlci90ZXN0LTQvIiBwYXRjaDQucGF0Y2gucmF3ID5wYXRjaDQucGF0Y2ggJiYKKwk+dGVzdC00ICYmCisJeD0wICYmCisJd2hpbGUgdGVzdCAkeCAtbHQgNTAKKwlkbworCQlwcmludGYgIiU2M3MlMDJkXG4iICIiICR4ID4+dGVzdC00CisJCXg9JCgoICR4ICsgMSApKQorCWRvbmUgJiYKKwljYXQgdGVzdC00ID5leHBlY3QtNCAmJgorCXByaW50ZiAiJTY0c1xuIiBhIGIgYyA+PmV4cGVjdC00ICYmCisJd2hpbGUgdGVzdCAkeCAtbHQgMTAwCisJZG8KKwkJcHJpbnRmICIlNjNzJTAyZFxuIiAiIiAkeCA+PnRlc3QtNAorCQlwcmludGYgIiU2M3MlMDJkXG4iICIiICR4ID4+ZXhwZWN0LTQKKwkJeD0kKCggJHggKyAxICkpCisJZG9uZSAmJgorCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgdGFiLWluLWluZGVudCx0YWJ3aWR0aD02MyAmJgorCWdpdCBjb25maWcgYXBwbHkud2hpdGVzcGFjZSBmaXgKKworJworCisjIE5vdGUgdGhhdCBgcGF0Y2hgIGNhbiBzdWNjZXNzZnVsbHkgYXBwbHkgYWxsIHBhdGNoZXMgd2hlbiBydW4KKyMgd2l0aCB0aGUgLS1pZ25vcmUtd2hpdGVzcGFjZSBvcHRpb24uCisKK2ZvciB0IGluIDEgMiAzIDQKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCB3cyBleHBhbnNpb24gKHQ9JHQpJyAnCisJCWdpdCBhcHBseSBwYXRjaCR0LnBhdGNoICYmCisJCXRlc3RfY21wIGV4cGVjdC0kdCB0ZXN0LSR0CisJJworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMzktYXBwbHktZXNjYXBlLnNoIGIvdC90NDEzOS1hcHBseS1lc2NhcGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDViNTY2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzktYXBwbHktZXNjYXBlLnNoCkBAIC0wLDAgKzEsMTQxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGF0aHMgd3JpdHRlbiBieSBnaXQtYXBwbHkgY2Fubm90IGVzY2FwZSB0aGUgd29ya2luZyB0cmVlJworLiAuL3Rlc3QtbGliLnNoCisKKyMgdGVzdHMgd2lsbCB0cnkgdG8gd3JpdGUgdG8gLi4vZm9vLCBhbmQgd2UgZG8gbm90CisjIHdhbnQgdGhlbSB0byBlc2NhcGUgdGhlIHRyYXNoIGRpcmVjdG9yeSB3aGVuIHRoZXkKKyMgZmFpbAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnVtcCBnaXQgcmVwbyBvbmUgbGV2ZWwgZG93bicgJworCW1rZGlyIGluc2lkZSAmJgorCW12IC5naXQgaW5zaWRlLyAmJgorCWNkIGluc2lkZQorJworCisjICQxID0gbmFtZSBvZiBmaWxlCisjICQyID0gY3VycmVudCBwYXRoIHRvIGZpbGUgKGlmIGRpZmZlcmVudCkKK21rcGF0Y2hfYWRkICgpIHsKKwlybSAtZiAiJHsyOi0kMX0iICYmCisJY2F0IDw8LUVPRgorCWRpZmYgLS1naXQgYS8kMSBiLyQxCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi41M2M3NGNkCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiLyQxCisJQEAgLTAsMCArMSBAQAorCStldmlsCisJRU9GCit9CisKK21rcGF0Y2hfZGVsICgpIHsKKwllY2hvIGV2aWwgPiIkezI6LSQxfSIgJiYKKwljYXQgPDwtRU9GCisJZGlmZiAtLWdpdCBhLyQxIGIvJDEKKwlkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCA1M2M3NGNkLi4wMDAwMDAwCisJLS0tIGEvJDEKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS1ldmlsCisJRU9GCit9CisKKyMgJDEgPSBuYW1lIG9mIGZpbGUKKyMgJDIgPSBjb250ZW50IG9mIHN5bWxpbmsKK21rcGF0Y2hfc3ltbGluayAoKSB7CisJcm0gLWYgIiQxIiAmJgorCWNhdCA8PC1FT0YKKwlkaWZmIC0tZ2l0IGEvJDEgYi8kMQorCW5ldyBmaWxlIG1vZGUgMTIwMDAwCisJaW5kZXggMDAwMDAwMC4uJChwcmludGYgIiVzIiAiJDIiIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiLyQxCisJQEAgLTAsMCArMSBAQAorCSskMgorCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCUVPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3QgY3JlYXRlIGZpbGUgY29udGFpbmluZyAuLicgJworCW1rcGF0Y2hfYWRkIC4uL2ZvbyA+cGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FuIGNyZWF0ZSBmaWxlIGNvbnRhaW5pbmcgLi4gd2l0aCAtLXVuc2FmZS1wYXRocycgJworCW1rcGF0Y2hfYWRkIC4uL2ZvbyA+cGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS11bnNhZmUtcGF0aHMgcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAgJ2Nhbm5vdCBjcmVhdGUgZmlsZSBjb250YWluaW5nIC4uIChpbmRleCknICcKKwlta3BhdGNoX2FkZCAuLi9mb28gPnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAgJ2Nhbm5vdCBjcmVhdGUgZmlsZSBjb250YWluaW5nIC4uIHdpdGggLS11bnNhZmUtcGF0aHMgKGluZGV4KScgJworCW1rcGF0Y2hfYWRkIC4uL2ZvbyA+cGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCAtLXVuc2FmZS1wYXRocyBwYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC4uL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3QgZGVsZXRlIGZpbGUgY29udGFpbmluZyAuLicgJworCW1rcGF0Y2hfZGVsIC4uL2ZvbyA+cGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FuIGRlbGV0ZSBmaWxlIGNvbnRhaW5pbmcgLi4gd2l0aCAtLXVuc2FmZS1wYXRocycgJworCW1rcGF0Y2hfZGVsIC4uL2ZvbyA+cGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS11bnNhZmUtcGF0aHMgcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IGRlbGV0ZSBmaWxlIGNvbnRhaW5pbmcgLi4gKGluZGV4KScgJworCW1rcGF0Y2hfZGVsIC4uL2ZvbyA+cGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCBwYXRjaCAmJgorCXRlc3RfcGF0aF9pc19maWxlIC4uL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rIGVzY2FwZSB2aWEgLi4nICcKKwl7CisJCW1rcGF0Y2hfc3ltbGluayB0bXAgLi4gJiYKKwkJbWtwYXRjaF9hZGQgdG1wL2ZvbyAuLi9mb28KKwl9ID5wYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRtcCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC4uL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rIGVzY2FwZSB2aWEgLi4gKGluZGV4KScgJworCXsKKwkJbWtwYXRjaF9zeW1saW5rIHRtcCAuLiAmJgorCQlta3BhdGNoX2FkZCB0bXAvZm9vIC4uL2ZvbworCX0gPnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0bXAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3ltbGluayBlc2NhcGUgdmlhIGFic29sdXRlIHBhdGgnICcKKwl7CisJCW1rcGF0Y2hfc3ltbGluayB0bXAgIiQocHdkKSIgJiYKKwkJbWtwYXRjaF9hZGQgdG1wL2ZvbyAuLi9mb28KKwl9ID5wYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRtcCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC4uL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rIGVzY2FwZSB2aWEgYWJzb2x1dGUgcGF0aCAoaW5kZXgpJyAnCisJeworCQlta3BhdGNoX3N5bWxpbmsgdG1wICIkKHB3ZCkiICYmCisJCW1rcGF0Y2hfYWRkIHRtcC9mb28gLi4vZm9vCisJfSA+cGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCBwYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRtcCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC4uL2ZvbworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxNTAtYW0uc2ggYi90L3Q0MTUwLWFtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJkYTQ1ODYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTUwLWFtLnNoCkBAIC0wLDAgKzEsMTEzNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhbSBydW5uaW5nJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IG1lc3NhZ2VzJyAnCisJY2F0ID5tc2cgPDwtXEVPRiAmJgorCXNlY29uZAorCisJTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkKKwllaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0KKwl2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YQorCWthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtCisJaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZAorCXRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdAorCXZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uCisKKwlFT0YKKwlxel90b190YWJfc3BhY2UgPDwtXEVPRiA+Pm1zZyAmJgorCVFEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQKKwlRZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMKKwlRYXQgdmVybyBlcm9zIGV0IGFjY3Vtc2FuIGV0IGl1c3RvIG9kaW8gZGlnbmlzc2ltIHF1aSBibGFuZGl0CisJUXByYWVzZW50IGx1cHRhdHVtIHp6cmlsIGRlbGVuaXQgYXVndWUgZHVpcyBkb2xvcmUgdGUgZmV1Z2FpdCBudWxsYQorCVFmYWNpbGlzaS4KKwlFT0YKKwljYXQgPj5tc2cgPDwtXEVPRiAmJgorCisJTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsCisJY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0CisJbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0LgorCisJICBnaXQKKwkgIC0tLQorCSAgKysrCisKKwlVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdAorCWxvYm9ydGlzIG5pc2wgdXQgYWxpcXVpcCBleCBlYSBjb21tb2RvIGNvbnNlcXVhdC4gRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZQorCWRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bQorCWRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbworCWRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlCisJZmV1Z2FpdCBudWxsYSBmYWNpbGlzaS4KKworCVJlcG9ydGVkLWJ5OiBBIE4gT3RoZXIgPGEubi5vdGhlckBleGFtcGxlLmNvbT4KKwlFT0YKKworCWNhdCA+ZmFpbG1haWwgPDwtXEVPRiAmJgorCUZyb20gZm9vQGV4YW1wbGUuY29tIEZyaSBNYXkgMjMgMTA6NDM6NDkgMjAwOAorCUZyb206CWZvb0BleGFtcGxlLmNvbQorCVRvOgliYXJAZXhhbXBsZS5jb20KKwlTdWJqZWN0OiBSZTogW1JGQy9QQVRDSF0gZ2l0LWZvby5zaAorCURhdGU6CUZyaSwgMjMgTWF5IDIwMDggMDU6MjM6NDIgKzAyMDAKKworCVNvbWV0aW1lcyB3ZSBoYXZlIHRvIGZpbmQgb3V0IHRoYXQgdGhlcmUnXCcncyBub3RoaW5nIGxlZnQuCisKKwlFT0YKKworCWNhdCA+cGluZSA8PC1cRU9GICYmCisJRnJvbSBNQUlMRVItREFFTU9OIEZyaSBNYXkgMjMgMTA6NDM6NDkgMjAwOAorCURhdGU6IDIzIE1heSAyMDA4IDA1OjIzOjQyICswMjAwCisJRnJvbTogTWFpbCBTeXN0ZW0gSW50ZXJuYWwgRGF0YSA8TUFJTEVSLURBRU1PTkBleGFtcGxlLmNvbT4KKwlTdWJqZWN0OiBET04nXCcnVCBERUxFVEUgVEhJUyBNRVNTQUdFIC0tIEZPTERFUiBJTlRFUk5BTCBEQVRBCisJTWVzc2FnZS1JRDogPGZvby0wMDAxQGV4YW1wbGUuY29tPgorCisJVGhpcyB0ZXh0IGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvcm1hdCBvZiB5b3VyIG1haWwgZm9sZGVyLCBhbmQgaXMgbm90CisJYSByZWFsIG1lc3NhZ2UuICBJdCBpcyBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIG1haWwgc3lzdGVtIHNvZnR3YXJlLgorCUlmIGRlbGV0ZWQsIGltcG9ydGFudCBmb2xkZXIgZGF0YSB3aWxsIGJlIGxvc3QsIGFuZCBpdCB3aWxsIGJlIHJlLWNyZWF0ZWQKKwl3aXRoIHRoZSBkYXRhIHJlc2V0IHRvIGluaXRpYWwgdmFsdWVzLgorCisJRU9GCisKKwljYXQgPm1zZy13aXRob3V0LXNjaXNzb3JzLWxpbmUgPDwtXEVPRiAmJgorCVRlc3QgdGhhdCBnaXQtYW0gLS1zY2lzc29ycyBjdXRzIGF0IHRoZSBzY2lzc29ycyBsaW5lCisKKwlUaGlzIGxpbmUgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBjb21taXQgbWVzc2FnZS4KKwlFT0YKKworCXByaW50ZiAiU3ViamVjdDogIiA+c3ViamVjdC1wcmVmaXggJiYKKworCWNhdCAtIHN1YmplY3QtcHJlZml4IG1zZy13aXRob3V0LXNjaXNzb3JzLWxpbmUgPm1zZy13aXRoLXNjaXNzb3JzLWxpbmUgPDwtXEVPRgorCVRoaXMgbGluZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBjb21taXQgbWVzc2FnZSB3aXRoIC0tc2Npc3NvcnMgZW5hYmxlZC4KKworCSAtIC0gPjggLSAtIHJlbW92ZSBldmVyeXRoaW5nIGFib3ZlIHRoaXMgbGluZSAtIC0gPjggLSAtCisKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZmlyc3QgJiYKKwlnaXQgdGFnIGZpcnN0ICYmCisKKwllY2hvIHdvcmxkID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLUYgbXNnICYmCisJZ2l0IHRhZyBzZWNvbmQgJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgZmlyc3QgPnBhdGNoMSAmJgorCXsKKwkJZWNobyAiTWVzc2FnZS1JZDogPDEyMjY1MDE2ODEtMjQ5MjMtMS1naXQtc2VuZC1lbWFpbC1iZGFAbW5zc3BiLnJ1PiIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIE9uZSIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFR3byIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFRocmVlIiAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGZpcnN0IHwgc2VkIC1lICIxZCIKKwl9ID4gcGF0Y2gxLmVtbCAmJgorCXsKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIE9uZSIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFR3byIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFRocmVlIiAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGZpcnN0IHwgc2VkIC1lICIxZCIKKwl9IHwgYXBwZW5kX2NyID5wYXRjaDEtY3JsZi5lbWwgJiYKKwl7CisJCXByaW50ZiAiJTI1NXNcXG4iICIiCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBPbmUiICYmCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBUd28iICYmCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBUaHJlZSIgJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBmaXJzdCB8IHNlZCAtZSAiMWQiCisJfSA+IHBhdGNoMS13cy5lbWwgJiYKKwl7CisJCXNlZCAtbmUgIjFwIiBtc2cgJiYKKwkJZWNobyAmJgorCQllY2hvICJGcm9tOiAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4iICYmCisJCWVjaG8gIkRhdGU6ICRHSVRfQVVUSE9SX0RBVEUiICYmCisJCWVjaG8gJiYKKwkJc2VkIC1lICIxLDJkIiBtc2cgJiYKKwkJZWNobyAiLS0tIiAmJgorCQlnaXQgZGlmZi10cmVlIC0tbm8tY29tbWl0LWlkIC0tc3RhdCAtcCBzZWNvbmQKKwl9ID5wYXRjaDEtc3RnaXQuZW1sICYmCisJbWtkaXIgc3RnaXQtc2VyaWVzICYmCisJY3AgcGF0Y2gxLXN0Z2l0LmVtbCBzdGdpdC1zZXJpZXMvcGF0Y2ggJiYKKwl7CisJCWVjaG8gIiMgVGhpcyBzZXJpZXMgYXBwbGllcyBvbiBHSVQgY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBmaXJzdCkiICYmCisJCWVjaG8gInBhdGNoIgorCX0gPnN0Z2l0LXNlcmllcy9zZXJpZXMgJiYKKwl7CisJCWVjaG8gIiMgSEcgY2hhbmdlc2V0IHBhdGNoIiAmJgorCQllY2hvICIjIFVzZXIgJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+IiAmJgorCQllY2hvICIjIERhdGUgJHRlc3RfdGljayAyNTIwMCIgJiYKKwkJZWNobyAiIyAgICAgICQoZ2l0IHNob3cgLS1wcmV0dHk9IiVhRCIgLXMgc2Vjb25kKSIgJiYKKwkJZWNobyAiIyBOb2RlIElEICRaRVJPX09JRCIgJiYKKwkJZWNobyAiIyBQYXJlbnQgICRaRVJPX09JRCIgJiYKKwkJY2F0IG1zZyAmJgorCQllY2hvICYmCisJCWdpdCBkaWZmLXRyZWUgLS1uby1jb21taXQtaWQgLXAgc2Vjb25kCisJfSA+cGF0Y2gxLWhnLmVtbCAmJgorCisKKwllY2hvIGZpbGUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1GIG1zZy13aXRob3V0LXNjaXNzb3JzLWxpbmUgJiYKKwlnaXQgdGFnIGV4cGVjdGVkLWZvci1zY2lzc29ycyAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKworCWVjaG8gZmlsZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLUYgbXNnLXdpdGgtc2Npc3NvcnMtbGluZSAmJgorCWdpdCB0YWcgZXhwZWN0ZWQtZm9yLW5vLXNjaXNzb3JzICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBleHBlY3RlZC1mb3Itbm8tc2Npc3NvcnNeID5wYXRjaC13aXRoLXNjaXNzb3JzLWxpbmUuZW1sICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCisJc2VkIC1uIC1lICIzLFwkcCIgbXNnID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBmaXJzdCA+cGF0Y2gyICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbG9yZW0gJiYKKwlzZWQgLW4gLWUgIjExLFwkcCIgbXNnID5maWxlICYmCisJaGVhZCAtbiA5IG1zZyA+PmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJtb3ZlZCBzdHVmZiIgJiYKKworCWVjaG8gZ29vZGJ5ZSA+YW5vdGhlciAmJgorCWdpdCBhZGQgYW5vdGhlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIGFub3RoZXIgZmlsZSIgJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyID5sb3JlbS1tb3ZlLnBhdGNoICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLXByZWZpeCAtLXN0ZG91dCBtYXN0ZXIgPmxvcmVtLXplcm8ucGF0Y2ggJiYKKworCWdpdCBjaGVja291dCAtYiByZW5hbWUgJiYKKwlnaXQgbXYgZmlsZSByZW5hbWVkICYmCisJZ2l0IGNvbW1pdCAtbSAicmVuYW1lZCBhIGZpbGUiICYmCisKKwlnaXQgZm9ybWF0LXBhdGNoIC1NIC0tc3Rkb3V0IGxvcmVtID5yZW5hbWUucGF0Y2ggJiYKKworCWdpdCByZXNldCAtLXNvZnQgbG9yZW1eICYmCisJZ2l0IGNvbW1pdCAtbSAicmVuYW1lZCBhIGZpbGUgYW5kIGFkZGVkIGFub3RoZXIiICYmCisKKwlnaXQgZm9ybWF0LXBhdGNoIC1NIC0tc3Rkb3V0IGxvcmVtXiA+cmVuYW1lLWFkZC5wYXRjaCAmJgorCisJIyByZXNldCB0aW1lCisJc2FuZV91bnNldCB0ZXN0X3RpY2sgJiYKKwl0ZXN0X3RpY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gYXBwbGllcyBwYXRjaCBjb3JyZWN0bHknICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGFtIDxwYXRjaDEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBmYWlscyBpZiBpbmRleCBpcyBkaXJ0eScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgZGlydHlmaWxlIiAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwllY2hvIGRpcnR5ZmlsZSA+ZGlydHlmaWxlICYmCisJZ2l0IGFkZCBkaXJ0eWZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gcGF0Y2gxICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfY21wX3JldiBmaXJzdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgcGF0Y2ggZS1tYWlsIG5vdCBpbiBhIG1ib3gnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJZ2l0IGFtIHBhdGNoMS5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBhcHBsaWVzIHBhdGNoIGUtbWFpbCBub3QgaW4gYSBtYm94IHdpdGggQ1JMRicgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlnaXQgYW0gcGF0Y2gxLWNybGYuZW1sICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmReKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gYXBwbGllcyBwYXRjaCBlLW1haWwgd2l0aCBwcmVjZWRpbmcgd2hpdGVzcGFjZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlnaXQgYW0gcGF0Y2gxLXdzLmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kXikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgc3RnaXQgcGF0Y2gnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2hlY2tvdXQgLWYgZmlyc3QgJiYKKwlnaXQgYW0gcGF0Y2gxLXN0Z2l0LmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZCBIRUFEICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZF4gSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1wYXRjaC1mb3JtYXQ9c3RnaXQgYXBwbGllcyBzdGdpdCBwYXRjaCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBjaGVja291dCAtZiBmaXJzdCAmJgorCWdpdCBhbSAtLXBhdGNoLWZvcm1hdD1zdGdpdCA8cGF0Y2gxLXN0Z2l0LmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZCBIRUFEICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZF4gSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gYXBwbGllcyBzdGdpdCBzZXJpZXMnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2hlY2tvdXQgLWYgZmlyc3QgJiYKKwlnaXQgYW0gc3RnaXQtc2VyaWVzL3NlcmllcyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZCBIRUFEICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZF4gSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gYXBwbGllcyBoZyBwYXRjaCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBjaGVja291dCAtZiBmaXJzdCAmJgorCWdpdCBhbSBwYXRjaDEtaGcuZW1sICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQgJiYKKwl0ZXN0X2NtcF9yZXYgc2Vjb25kIEhFQUQgJiYKKwl0ZXN0X2NtcF9yZXYgc2Vjb25kXiBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXBhdGNoLWZvcm1hdD1oZyBhcHBsaWVzIGhnIHBhdGNoJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGNoZWNrb3V0IC1mIGZpcnN0ICYmCisJZ2l0IGFtIC0tcGF0Y2gtZm9ybWF0PWhnIDxwYXRjaDEtaGcuZW1sICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQgJiYKKwl0ZXN0X2NtcF9yZXYgc2Vjb25kIEhFQUQgJiYKKwl0ZXN0X2NtcF9yZXYgc2Vjb25kXiBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGFwcGx5cGF0Y2gtbXNnIGhvb2snICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvaG9va3MvYXBwbHlwYXRjaC1tc2ciICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9hcHBseXBhdGNoLW1zZyA8PC1cRU9GICYmCisJY2F0ICIkMSIgPmFjdHVhbC1tc2cgJiYKKwllY2hvIGhvb2stbWVzc2FnZSA+IiQxIgorCUVPRgorCWdpdCBhbSBwYXRjaDEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCWVjaG8gaG9vay1tZXNzYWdlID5leHBlY3RlZCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PWZvcm1hdDolQiBzZWNvbmQgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsLW1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGZhaWxpbmcgYXBwbHlwYXRjaC1tc2cgaG9vaycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9ob29rcy9hcHBseXBhdGNoLW1zZyIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL2FwcGx5cGF0Y2gtbXNnIDw8LVxFT0YgJiYKKwlleGl0IDEKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gcGF0Y2gxICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpcnN0ICYmCisJdGVzdF9jbXBfcmV2IGZpcnN0IEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBwcmUtYXBwbHlwYXRjaCBob29rJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L2hvb2tzL3ByZS1hcHBseXBhdGNoIiAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcHJlLWFwcGx5cGF0Y2ggPDwtXEVPRiAmJgorCWdpdCBkaWZmIGZpcnN0ID5kaWZmLmFjdHVhbAorCWV4aXQgMAorCUVPRgorCWdpdCBhbSBwYXRjaDEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmQgSEVBRCAmJgorCWdpdCBkaWZmIGZpcnN0Li5zZWNvbmQgPmRpZmYuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBkaWZmLmV4cGVjdGVkIGRpZmYuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGggZmFpbGluZyBwcmUtYXBwbHlwYXRjaCBob29rJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L2hvb2tzL3ByZS1hcHBseXBhdGNoIiAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcHJlLWFwcGx5cGF0Y2ggPDwtXEVPRiAmJgorCWV4aXQgMQorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSBwYXRjaDEgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCisJdGVzdF9jbXBfcmV2IGZpcnN0IEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBwb3N0LWFwcGx5cGF0Y2ggaG9vaycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9ob29rcy9wb3N0LWFwcGx5cGF0Y2giICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9wb3N0LWFwcGx5cGF0Y2ggPDwtXEVPRiAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+aGVhZC5hY3R1YWwKKwlnaXQgZGlmZiBzZWNvbmQgPmRpZmYuYWN0dWFsCisJZXhpdCAwCisJRU9GCisJZ2l0IGFtIHBhdGNoMSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZCBIRUFEICYmCisJZ2l0IHJldi1wYXJzZSBzZWNvbmQgPmhlYWQuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBoZWFkLmV4cGVjdGVkIGhlYWQuYWN0dWFsICYmCisJZ2l0IGRpZmYgc2Vjb25kID5kaWZmLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZGlmZi5leHBlY3RlZCBkaWZmLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGZhaWxpbmcgcG9zdC1hcHBseXBhdGNoIGhvb2snICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvaG9va3MvcG9zdC1hcHBseXBhdGNoIiAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcG9zdC1hcHBseXBhdGNoIDw8LVxFT0YgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmhlYWQuYWN0dWFsCisJZXhpdCAxCisJRU9GCisJZ2l0IGFtIHBhdGNoMSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZCBIRUFEICYmCisJZ2l0IHJldi1wYXJzZSBzZWNvbmQgPmhlYWQuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBoZWFkLmV4cGVjdGVkIGhlYWQuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tc2Npc3NvcnMgY3V0cyB0aGUgbWVzc2FnZSBhdCB0aGUgc2Npc3NvcnMgbGluZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJZ2l0IGFtIC0tc2Npc3NvcnMgcGF0Y2gtd2l0aC1zY2lzc29ycy1saW5lLmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZXhwZWN0ZWQtZm9yLXNjaXNzb3JzICYmCisJdGVzdF9jbXBfcmV2IGV4cGVjdGVkLWZvci1zY2lzc29ycyBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tbm8tc2Npc3NvcnMgb3ZlcnJpZGVzIG1haWxpbmZvLnNjaXNzb3JzJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBzZWNvbmQgJiYKKwl0ZXN0X2NvbmZpZyBtYWlsaW5mby5zY2lzc29ycyB0cnVlICYmCisJZ2l0IGFtIC0tbm8tc2Npc3NvcnMgcGF0Y2gtd2l0aC1zY2lzc29ycy1saW5lLmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZXhwZWN0ZWQtZm9yLW5vLXNjaXNzb3JzICYmCisJdGVzdF9jbXBfcmV2IGV4cGVjdGVkLWZvci1uby1zY2lzc29ycyBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBuZXcgYXV0aG9yIGFuZCBjb21taXR0ZXInICcKKwlHSVRfQVVUSE9SX05BTUU9IkFub3RoZXIgVGhvciIgJiYKKwlHSVRfQVVUSE9SX0VNQUlMPSJhLnRob3JAZXhhbXBsZS5jb20iICYmCisJR0lUX0NPTU1JVFRFUl9OQU1FPSJDbyBNIE1pdGVyIiAmJgorCUdJVF9DT01NSVRURVJfRU1BSUw9ImMubWl0ZXJAZXhhbXBsZS5jb20iICYmCisJZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMIEdJVF9DT01NSVRURVJfTkFNRSBHSVRfQ09NTUlUVEVSX0VNQUlMCisnCisKK2NvbXBhcmUgKCkgeworCWE9JChnaXQgY2F0LWZpbGUgY29tbWl0ICIkMiIgfCBncmVwICJeJDEgIikgJiYKKwliPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCAiJDMiIHwgZ3JlcCAiXiQxICIpICYmCisJdGVzdCAiJGEiID0gIiRiIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBjaGFuZ2VzIGNvbW1pdHRlciBhbmQga2VlcHMgYXV0aG9yJyAnCisJdGVzdF90aWNrICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCWdpdCBhbSBwYXRjaDIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXJeXikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXl4pIiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3Rlci4uSEVBRCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3Rlcl4uLkhFQUReICYmCisJY29tcGFyZSBhdXRob3IgbWFzdGVyIEhFQUQgJiYKKwljb21wYXJlIGF1dGhvciBtYXN0ZXJeIEhFQUReICYmCisJdGVzdCAiJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IiA9IFwKKwkgICAgICIkKGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiIlY24gPCVjZT4iIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNpZ25vZmYgYWRkcyBTaWduZWQtb2ZmLWJ5OiBsaW5lJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBtYXN0ZXIyIGZpcnN0ICYmCisJZ2l0IGFtIC0tc2lnbm9mZiA8cGF0Y2gyICYmCisJeworCQlwcmludGYgInRoaXJkXG5cblNpZ25lZC1vZmYtYnk6ICVzIDwlcz5cblxuIiBcCisJCQkiJEdJVF9DT01NSVRURVJfTkFNRSIgIiRHSVRfQ09NTUlUVEVSX0VNQUlMIiAmJgorCQljYXQgbXNnICYmCisJCXByaW50ZiAiU2lnbmVkLW9mZi1ieTogJXMgPCVzPlxuXG4iIFwKKwkJCSIkR0lUX0NPTU1JVFRFUl9OQU1FIiAiJEdJVF9DT01NSVRURVJfRU1BSUwiCisJfSA+ZXhwZWN0ZWQtbG9nICYmCisJZ2l0IGxvZyAtLXByZXR0eT0lQiAtMiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1sb2cgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHN0YXlzIGluIGJyYW5jaCcgJworCWVjaG8gcmVmcy9oZWFkcy9tYXN0ZXIyID5leHBlY3RlZCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tc2lnbm9mZiBkb2VzIG5vdCBhZGQgU2lnbmVkLW9mZi1ieTogbGluZSBpZiBhbHJlYWR5IHRoZXJlJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBmaXJzdCA+cGF0Y2gzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCWdpdCBhbSAtLXNpZ25vZmYgPHBhdGNoMyAmJgorCWdpdCBsb2cgLS1wcmV0dHk9JUIgLTIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtbG9nIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNpZ25vZmYgYWRkcyBTaWduZWQtb2ZmLWJ5OiBpZiBhbm90aGVyIGF1dGhvciBpcyBwcmVzZXQnICcKKwlOQU1FPSJBIE4gT3RoZXIiICYmCisJRU1BSUw9ImEubi5vdGhlckBleGFtcGxlLmNvbSIgJiYKKwl7CisJCXByaW50ZiAidGhpcmRcblxuU2lnbmVkLW9mZi1ieTogJXMgPCVzPlxuU2lnbmVkLW9mZi1ieTogJXMgPCVzPlxuXG4iIFwKKwkJCSIkR0lUX0NPTU1JVFRFUl9OQU1FIiAiJEdJVF9DT01NSVRURVJfRU1BSUwiIFwKKwkJCSIkTkFNRSIgIiRFTUFJTCIgJiYKKwkJY2F0IG1zZyAmJgorCQlwcmludGYgIlNpZ25lZC1vZmYtYnk6ICVzIDwlcz5cblNpZ25lZC1vZmYtYnk6ICVzIDwlcz5cblxuIiBcCisJCQkiJEdJVF9DT01NSVRURVJfTkFNRSIgIiRHSVRfQ09NTUlUVEVSX0VNQUlMIiBcCisJCQkiJE5BTUUiICIkRU1BSUwiCisJfSA+ZXhwZWN0ZWQtbG9nICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCUdJVF9DT01NSVRURVJfTkFNRT0iJE5BTUUiIEdJVF9DT01NSVRURVJfRU1BSUw9IiRFTUFJTCIgXAorCQlnaXQgYW0gLS1zaWdub2ZmIDxwYXRjaDMgJiYKKwlnaXQgbG9nIC0tcHJldHR5PSVCIC0yIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWxvZyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1zaWdub2ZmIGR1cGxpY2F0ZXMgU2lnbmVkLW9mZi1ieTogaWYgaXQgaXMgbm90IHRoZSBsYXN0IG9uZScgJworCU5BTUU9IkEgTiBPdGhlciIgJiYKKwlFTUFJTD0iYS5uLm90aGVyQGV4YW1wbGUuY29tIiAmJgorCXsKKwkJcHJpbnRmICJ0aGlyZFxuXG5TaWduZWQtb2ZmLWJ5OiAlcyA8JXM+XG5cCitTaWduZWQtb2ZmLWJ5OiAlcyA8JXM+XG5TaWduZWQtb2ZmLWJ5OiAlcyA8JXM+XG5cbiIgXAorCQkJIiRHSVRfQ09NTUlUVEVSX05BTUUiICIkR0lUX0NPTU1JVFRFUl9FTUFJTCIgXAorCQkJIiROQU1FIiAiJEVNQUlMIiBcCisJCQkiJEdJVF9DT01NSVRURVJfTkFNRSIgIiRHSVRfQ09NTUlUVEVSX0VNQUlMIiAmJgorCQljYXQgbXNnICYmCisJCXByaW50ZiAiU2lnbmVkLW9mZi1ieTogJXMgPCVzPlxuU2lnbmVkLW9mZi1ieTogJXMgPCVzPlxuXAorU2lnbmVkLW9mZi1ieTogJXMgPCVzPlxuXG4iIFwKKwkJCSIkR0lUX0NPTU1JVFRFUl9OQU1FIiAiJEdJVF9DT01NSVRURVJfRU1BSUwiIFwKKwkJCSIkTkFNRSIgIiRFTUFJTCIgXAorCQkJIiRHSVRfQ09NTUlUVEVSX05BTUUiICIkR0lUX0NPTU1JVFRFUl9FTUFJTCIKKwl9ID5leHBlY3RlZC1sb2cgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGZpcnN0ID5wYXRjaDMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJZ2l0IGFtIC0tc2lnbm9mZiA8cGF0Y2gzICYmCisJZ2l0IGxvZyAtLXByZXR0eT0lQiAtMiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1sb2cgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGhvdXQgLS1rZWVwIHJlbW92ZXMgUmU6IGFuZCBbUEFUQ0hdIHN0dWZmJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBIRUFEXiA+dG1wICYmCisJc2VkIC1lICIvXlN1YmplY3QvIHMsXFtQQVRDSCxSZTogUmU6IFJlOiAmIDEvNSB2Ml0gW2ZvbywiIHRtcCA+cGF0Y2g0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWdpdCBhbSA8cGF0Y2g0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgbWFzdGVyMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0ta2VlcCByZWFsbHkga2VlcHMgdGhlIHN1YmplY3QnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZ2l0IGFtIC0ta2VlcCBwYXRjaDQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YWN0dWFsICYmCisJZ3JlcCAiUmU6IFJlOiBSZTogXFtQQVRDSCAxLzUgdjJcXSBcW2Zvb1xdIHRoaXJkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1rZWVwLW5vbi1wYXRjaCByZWFsbHkga2VlcHMgdGhlIG5vbi1wYXRjaCBwYXJ0JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWdpdCBhbSAtLWtlZXAtbm9uLXBhdGNoIHBhdGNoNCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5hY3R1YWwgJiYKKwlncmVwICJeXFtmb29cXSB0aGlyZCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGFtIC0zJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBiYXNlM3dheSBtYXN0ZXIyICYmCisJc2VkIC1uIC1lICIzLFwkcCIgbXNnID5maWxlICYmCisJaGVhZCAtbiA5IG1zZyA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJjb3BpZWQgc3R1ZmYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIGZhbGxzIGJhY2sgdG8gMy13YXkgbWVyZ2UnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGxvcmVtMiBiYXNlM3dheSAmJgorCWdpdCBhbSAtMyBsb3JlbS1tb3ZlLnBhdGNoICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBsb3JlbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyAtcDAgY2FuIHJlYWQgLS1uby1wcmVmaXggcGF0Y2gnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGxvcmVtMyBiYXNlM3dheSAmJgorCWdpdCBhbSAtMyAtcDAgbG9yZW0temVyby5wYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbG9yZW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBjb25maWcgYW0udGhyZWVXYXkgZmFsbHMgYmFjayB0byAzLXdheSBtZXJnZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbG9yZW00IGJhc2Uzd2F5ICYmCisJdGVzdF9jb25maWcgYW0udGhyZWVXYXkgMSAmJgorCWdpdCBhbSBsb3JlbS1tb3ZlLnBhdGNoICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBsb3JlbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGNvbmZpZyBhbS50aHJlZVdheSBvdmVycmlkZGVuIGJ5IC0tbm8tM3dheScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbG9yZW01IGJhc2Uzd2F5ICYmCisJdGVzdF9jb25maWcgYW0udGhyZWVXYXkgMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLW5vLTN3YXkgbG9yZW0tbW92ZS5wYXRjaCAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gY2FuIHJlbmFtZSBhIGZpbGUnICcKKwlncmVwICJecmVuYW1lIGZyb20iIHJlbmFtZS5wYXRjaCAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbG9yZW1eMCAmJgorCWdpdCBhbSByZW5hbWUucGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgcmVuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIGNhbiByZW5hbWUgYSBmaWxlJyAnCisJZ3JlcCAiXnJlbmFtZSBmcm9tIiByZW5hbWUucGF0Y2ggJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGxvcmVtXjAgJiYKKwlnaXQgYW0gLTMgcmVuYW1lLnBhdGNoICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHJlbmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyBjYW4gcmVuYW1lIGEgZmlsZSBhZnRlciBmYWxsaW5nIGJhY2sgdG8gMy13YXkgbWVyZ2UnICcKKwlncmVwICJecmVuYW1lIGZyb20iIHJlbmFtZS1hZGQucGF0Y2ggJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGxvcmVtXjAgJiYKKwlnaXQgYW0gLTMgcmVuYW1lLWFkZC5wYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSByZW5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgLXEgaXMgcXVpZXQnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbG9yZW0yICYmCisJZ2l0IHJlc2V0IGJhc2Uzd2F5IC0taGFyZCAmJgorCWdpdCBhbSAtMyAtcSBsb3JlbS1tb3ZlLnBhdGNoID5vdXRwdXQub3V0IDI+JjEgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBwYXVzZXMgb24gY29uZmxpY3QnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGxvcmVtMl5eICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIGxvcmVtLW1vdmUucGF0Y2ggJiYKKwl0ZXN0IC1kIC5naXQvcmViYXNlLWFwcGx5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tc2hvdy1jdXJyZW50LXBhdGNoJyAnCisJZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoID5hY3R1YWwucGF0Y2ggJiYKKwl0ZXN0X2NtcCAuZ2l0L3JlYmFzZS1hcHBseS8wMDAxIGFjdHVhbC5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNob3ctY3VycmVudC1wYXRjaD1yYXcnICcKKwlnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2g9cmF3ID5hY3R1YWwucGF0Y2ggJiYKKwl0ZXN0X2NtcCAuZ2l0L3JlYmFzZS1hcHBseS8wMDAxIGFjdHVhbC5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNob3ctY3VycmVudC1wYXRjaD1kaWZmJyAnCisJZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoPWRpZmYgPmFjdHVhbC5wYXRjaCAmJgorCXRlc3RfY21wIC5naXQvcmViYXNlLWFwcGx5L3BhdGNoIGFjdHVhbC5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBhY2NlcHRzIHJlcGVhdGVkIC0tc2hvdy1jdXJyZW50LXBhdGNoJyAnCisJZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoIC0tc2hvdy1jdXJyZW50LXBhdGNoPXJhdyA+YWN0dWFsLnBhdGNoICYmCisJdGVzdF9jbXAgLmdpdC9yZWJhc2UtYXBwbHkvMDAwMSBhY3R1YWwucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gZGV0ZWN0cyBpbmNvbXBhdGlibGUgLS1zaG93LWN1cnJlbnQtcGF0Y2gnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2g9cmF3IC0tc2hvdy1jdXJyZW50LXBhdGNoPWRpZmYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2ggLS1zaG93LWN1cnJlbnQtcGF0Y2g9ZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNraXAgd29ya3MnICcKKwllY2hvIGdvb2RieWUgPmV4cGVjdGVkICYmCisJZ2l0IGFtIC0tc2tpcCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbG9yZW0yXl4gLS0gZmlsZSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFub3RoZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1hYm9ydCByZW1vdmVzIGEgc3RyYXkgZGlyZWN0b3J5JyAnCisJbWtkaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgYW0gLS1hYm9ydCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHJlZnVzZXMgcGF0Y2hlcyB3aGVuIHBhdXNlZCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbG9yZW0yXl4gJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSBsb3JlbS1tb3ZlLnBhdGNoICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfY21wX3JldiBsb3JlbTJeXiBIRUFEICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gPGxvcmVtLW1vdmUucGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9jbXBfcmV2IGxvcmVtMl5eIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1yZXNvbHZlZCB3b3JrcycgJworCWVjaG8gZ29vZGJ5ZSA+ZXhwZWN0ZWQgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGxvcmVtMl5eICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIGxvcmVtLW1vdmUucGF0Y2ggJiYKKwl0ZXN0IC1kIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZWNobyByZXNvbHZlZCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgYW0gLS1yZXNvbHZlZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYW5vdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXJlc29sdmVkIGZhaWxzIGlmIGluZGV4IGhhcyBubyBjaGFuZ2VzJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBsb3JlbTJeXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSBsb3JlbS1tb3ZlLnBhdGNoICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfY21wX3JldiBsb3JlbTJeXiBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0tcmVzb2x2ZWQgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9jbXBfcmV2IGxvcmVtMl5eIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1yZXNvbHZlZCBmYWlscyBpZiBpbmRleCBoYXMgdW5tZXJnZWQgZW50cmllcycgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0zIGxvcmVtLW1vdmUucGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZCBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0tcmVzb2x2ZWQgPmVyciAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X2NtcF9yZXYgc2Vjb25kIEhFQUQgJiYKKwl0ZXN0X2kxOG5ncmVwICJzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gdGFrZXMgcGF0Y2hlcyBmcm9tIGEgUGluZSBtYWlsYm94JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCWNhdCBwaW5lIHBhdGNoMSB8IGdpdCBhbSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyXi4uSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBmYWlscyBvbiBtYWlsIHdpdGhvdXQgcGF0Y2gnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIDxmYWlsbWFpbCAmJgorCWdpdCBhbSAtLWFib3J0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gZmFpbHMgb24gZW1wdHkgcGF0Y2gnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyAiLS0tIiA+PmZhaWxtYWlsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIDxmYWlsbWFpbCAmJgorCWdpdCBhbSAtLXNraXAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3b3JrcyBmcm9tIHN0ZGluIGluIHN1YmRpcmVjdG9yeScgJworCXJtIC1mciBzdWJkaXIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJKAorCQlta2RpciAtcCBzdWJkaXIgJiYKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCBhbSA8Li4vcGF0Y2gxCisJKSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3b3JrcyBmcm9tIGZpbGUgKHJlbGF0aXZlIHBhdGggZ2l2ZW4pIGluIHN1YmRpcmVjdG9yeScgJworCXJtIC1mciBzdWJkaXIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJKAorCQlta2RpciAtcCBzdWJkaXIgJiYKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCBhbSAuLi9wYXRjaDEKKwkpICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdvcmtzIGZyb20gZmlsZSAoYWJzb2x1dGUgcGF0aCBnaXZlbikgaW4gc3ViZGlyZWN0b3J5JyAnCisJcm0gLWZyIHN1YmRpciAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlQPSQocHdkKSAmJgorCSgKKwkJbWtkaXIgLXAgc3ViZGlyICYmCisJCWNkIHN1YmRpciAmJgorCQlnaXQgYW0gIiRQL3BhdGNoMSIKKwkpICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGFtIC0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUgcGF0Y2gxICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIvXlwkL3EiID5oZWFkMSAmJgorCXNlZCAtbmUgIi9eYXV0aG9yIC9zLy4qPiAvL3AiIGhlYWQxID5hdCAmJgorCXNlZCAtbmUgIi9eY29tbWl0dGVyIC9zLy4qPiAvL3AiIGhlYWQxID5jdCAmJgorCXRlc3RfY21wIGF0IGN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGhvdXQgLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYW0gcGF0Y2gxICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIvXlwkL3EiID5oZWFkMSAmJgorCXNlZCAtbmUgIi9eYXV0aG9yIC9zLy4qPiAvL3AiIGhlYWQxID5hdCAmJgorCXNlZCAtbmUgIi9eY29tbWl0dGVyIC9zLy4qPiAvL3AiIGhlYWQxID5jdCAmJgorCSEgdGVzdF9jbXAgYXQgY3QKKycKKworIyBUaGlzIGNoZWNrcyBmb3IgKzAwMDAgYmVjYXVzZSBUWiBpcyBzZXQgdG8gVVRDIGFuZCB0aGF0IHNob3VsZAorIyBzaG93IHVwIHdoZW4gdGhlIGN1cnJlbnQgdGltZSBpcyB1c2VkLiBUaGUgZGF0ZSBpbiBtZXNzYWdlIGlzIHNldAorIyBieSB0ZXN0X3RpY2sgdGhhdCB1c2VzIC0wNzAwIHRpbWV6b25lOyBpZiB0aGlzIGZlYXR1cmUgZG9lcyBub3QKKyMgd29yaywgd2Ugd2lsbCBzZWUgdGhhdCBpbnN0ZWFkIG9mICswMDAwLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1pZ25vcmUtZGF0ZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYW0gLS1pZ25vcmUtZGF0ZSBwYXRjaDEgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIi9eXCQvcSIgPmhlYWQxICYmCisJc2VkIC1uZSAiL15hdXRob3IgL3MvLio+IC8vcCIgaGVhZDEgPmF0ICYmCisJZ3JlcCAiKzAwMDAiIGF0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGludG8gYW4gdW5ib3JuIGJyYW5jaCcgJworCWdpdCByZXYtcGFyc2UgZmlyc3Ree3RyZWV9ID5leHBlY3RlZCAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZnIgc3ViZGlyICYmCisJbWtkaXIgc3ViZGlyICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW51bWJlcmVkLWZpbGVzIC1vIHN1YmRpciAtMSBmaXJzdCAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBhbSAxCisJKSAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0gPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gbmV3bGluZSBpbiBzdWJqZWN0JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCXNlZCAtZSAicy9zZWNvbmQvc2Vjb25kIFxcXG4gZm9vLyIgcGF0Y2gxID5wYXRjaG5sICYmCisJZ2l0IGFtIDxwYXRjaG5sID5vdXRwdXQub3V0IDI+JjEgJiYKKwl0ZXN0X2kxOG5ncmVwICJeQXBwbHlpbmc6IHNlY29uZCBcXFxuIGZvbyQiIG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLXEgaXMgcXVpZXQnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGFtIC1xIDxwYXRjaDEgPm91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGVtcHR5LWZpbGUgZG9lcyBub3QgaW5mbG9vcCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0b3VjaCBlbXB0eS1maWxlICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIGVtcHR5LWZpbGUgMj5hY3R1YWwgJiYKKwllY2hvIFBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tbWVzc2FnZS1pZCByZWFsbHkgYWRkcyB0aGUgbWVzc2FnZSBpZCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwlnaXQgYW0gLS1tZXNzYWdlLWlkIHBhdGNoMS5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHRhaWwgLW4xID5hY3R1YWwgJiYKKwlncmVwIE1lc3NhZ2UtSWQgcGF0Y2gxLmVtbCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0ubWVzc2FnZWlkIHJlYWxseSBhZGRzIHRoZSBtZXNzYWdlIGlkJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCXRlc3RfY29uZmlnIGFtLm1lc3NhZ2VpZCB0cnVlICYmCisJZ2l0IGFtIHBhdGNoMS5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHRhaWwgLW4xID5hY3R1YWwgJiYKKwlncmVwIE1lc3NhZ2UtSWQgcGF0Y2gxLmVtbCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1tZXNzYWdlLWlkIC1zIHNpZ25zIG9mZiBhZnRlciB0aGUgbWVzc2FnZSBpZCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwlnaXQgYW0gLXMgLS1tZXNzYWdlLWlkIHBhdGNoMS5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHRhaWwgLW4yIHwgaGVhZCAtbjEgPmFjdHVhbCAmJgorCWdyZXAgTWVzc2FnZS1JZCBwYXRjaDEuZW1sID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyB3b3JrcyB3aXRoIHJlcmVyZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKworCSMgbWFrZSBwYXRjaGVzIG9uZS0+dHdvIGFuZCB0d28tPnRocmVlLi4uCisJdGVzdF9jb21taXQgb25lIGZpbGUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gZmlsZSAmJgorCXRlc3RfY29tbWl0IHRocmVlIGZpbGUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0yIC0tc3Rkb3V0ID5zZXEucGF0Y2ggJiYKKworCSMgYW5kIGNyZWF0ZSBhIHNpdHVhdGlvbiB0aGF0IGNvbmZsaWN0cy4uLgorCWdpdCByZXNldCAtLWhhcmQgb25lICYmCisJdGVzdF9jb21taXQgb3RoZXIgZmlsZSAmJgorCisJIyBlbmFibGUgcmVyZXJlLi4uCisJdGVzdF9jb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIC5naXQvcnItY2FjaGUiICYmCisKKwkjIC4uLmFuZCBhcHBseS4gT3VyIHJlc29sdXRpb24gaXMgdG8gc2tpcCB0aGUgZmlyc3QKKwkjIHBhdGNoLCBhbmQgdGhlIHJlcmVyZSB0aGUgc2Vjb25kIG9uZS4KKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLTMgc2VxLnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0tc2tpcCAmJgorCWVjaG8gcmVzb2x2ZWQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgYW0gLS1yZXNvbHZlZCAmJgorCisJIyBub3cgYXBwbHkgYWdhaW4sIGFuZCBjb25maXJtIHRoYXQgcmVyZXJlIGVuZ2FnZWQgKHdlIHN0aWxsCisJIyBleHBlY3QgZmFpbHVyZSBmcm9tIGFtIGJlY2F1c2UgcmVyZXJlIGRvZXMgbm90IGF1dG8tY29tbWl0CisJIyBmb3IgdXMpLgorCWdpdCByZXNldCAtLWhhcmQgb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLTMgc2VxLnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0tc2tpcCAmJgorCWVjaG8gcmVzb2x2ZWQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC1zIHVuZXhwZWN0ZWQgdHJhaWxlciBibG9jaycgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIHNpZ25lZCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWNhdCA+bXNnIDw8LUVPRiAmJgorCXN1YmplY3QgaGVyZQorCisJU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisJW2pjOiB0d2Vha2VkIGxvZyBtZXNzYWdlXQorCVNpZ25lZC1vZmYtYnk6IEogQyBIIDxqQGMuaD4KKwlFT0YKKwlnaXQgY29tbWl0IC1GIG1zZyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAnMSwvXiQvZCcgPm9yaWdpbmFsICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+cGF0Y2ggJiYKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgYW0gLXMgcGF0Y2ggJiYKKwkoCisJCWNhdCBvcmlnaW5hbCAmJgorCQllY2hvICJTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iCisJKSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICcxLC9eJC9kJyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJY2F0ID5tc2cgPDwtXEVPRiAmJgorCXN1YmplY3QgaGVyZQorCisJV2UgbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXMgYSBibGFuayBsaW5lIGJldHdlZW4gdGhlIGxvZworCW1lc3NhZ2UgcHJvcGVyIGFuZCBTaWduZWQtb2ZmLWJ5OiBsaW5lIGFkZGVkLgorCUVPRgorCWdpdCByZXNldCBIRUFEXiAmJgorCWdpdCBjb21taXQgLUYgbXNnIGZpbGUgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgJzEsL14kL2QnID5vcmlnaW5hbCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPnBhdGNoICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGFtIC1zIHBhdGNoICYmCisKKwkoCisJCWNhdCBvcmlnaW5hbCAmJgorCQllY2hvICYmCisJCWVjaG8gIlNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIKKwkpID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgJzEsL14kL2QnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tcGF0Y2gtZm9ybWF0PW1ib3hyZCBoYW5kbGVzIG1ib3hyZCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBjaGVja291dCAtZiBmaXJzdCAmJgorCWVjaG8gbWJveHJkID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWNhdCA+bXNnIDw8LVxJTlBVVF9FTkQgJiYKKwltYm94cmQgc2hvdWxkIGVzY2FwZSB0aGUgYm9keQorCisJRnJvbSBjb3VsZCB0cmlwIHVwIGEgbG9vc2UgbWJveCBwYXJzZXIKKwk+RnJvbSBleHRyYSBlc2NhcGUgZm9yIHJldmVyc2liaWxpdHkKKwlJTlBVVF9FTkQKKwlnaXQgY29tbWl0IC1GIG1zZyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1wcmV0dHk9bWJveHJkIC0tc3Rkb3V0IC0xID5tYm94cmQxICYmCisJZ3JlcCAiXj5Gcm9tIGNvdWxkIHRyaXAgdXAgYSBsb29zZSBtYm94IHBhcnNlciIgbWJveHJkMSAmJgorCWdpdCBjaGVja291dCAtZiBmaXJzdCAmJgorCWdpdCBhbSAtLXBhdGNoLWZvcm1hdD1tYm94cmQgbWJveHJkMSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHRhaWwgLW40ID5vdXQgJiYKKwl0ZXN0X2NtcCBtc2cgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdvcmtzIHdpdGggbXVsdGktbGluZSBpbi1ib2R5IGhlYWRlcnMnICcKKwlGT1JUWT0iU3RyaW5nIHRoYXQgaGFzIGEgbGVuZ3RoIG9mIG1vcmUgdGhhbiBmb3J0eSBjaGFyYWN0ZXJzIiAmJgorCUxPTkc9IiRGT1JUWSAkRk9SVFkiICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGNoZWNrb3V0IC1mIGZpcnN0ICYmCisJZWNobyBvbmUgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWFtICIkTE9ORworCisgICAgQm9keSB0ZXN0IiAtLWF1dGhvcj0iJExPTkcgPGxvbmdAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPnBhdGNoICYmCisJIyBidW1wIGZyb20sIGRhdGUsIGFuZCBzdWJqZWN0IGRvd24gdG8gaW4tYm9keSBoZWFkZXIKKwlwZXJsIC1scGUgIgorCQlpZiAoL15Gcm9tOi8pIHsKKwkJCXByaW50IFwiRnJvbTogeCA8eFxAZXhhbXBsZS5jb20+XCI7CisJCQlwcmludCBcIkRhdGU6IFNhdCwgMSBKYW4gMjAwMCAwMDowMDowMCArMDAwMFwiOworCQkJcHJpbnQgXCJTdWJqZWN0OiB4XG5cIjsKKwkJfQorCSIgcGF0Y2ggPm1zZyAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWdpdCBhbSBtc2cgJiYKKwkjIEVuc3VyZSB0aGF0IHRoZSBhdXRob3IgYW5kIGZ1bGwgbWVzc2FnZSBhcmUgcHJlc2VudAorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgIl5hdXRob3IuKmxvbmdAZXhhbXBsZS5jb20iICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAiXiRMT05HJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1xdWl0IGtlZXBzIEhFQUQgd2hlcmUgaXQgaXMnICcKKwlta2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCT4uZ2l0L3JlYmFzZS1hcHBseS9sYXN0ICYmCisJPi5naXQvcmViYXNlLWFwcGx5L25leHQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReID4uZ2l0L09SSUdfSEVBRCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ZWQgJiYKKwlnaXQgYW0gLS1xdWl0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBhbmQgLmdpdGF0dGlidXRlcycgJworCXRlc3RfY3JlYXRlX3JlcG8gYXR0cmlidXRlcyAmJgorCSgKKwkJY2QgYXR0cmlidXRlcyAmJgorCQl0ZXN0X2NvbW1pdCBpbml0ICYmCisJCWdpdCBjb25maWcgZmlsdGVyLnRlc3QuY2xlYW4gInNlZCAtZSAnXCcncy9zbXVkZ2VkL2NsZWFuL2cnXCcnIiAmJgorCQlnaXQgY29uZmlnIGZpbHRlci50ZXN0LnNtdWRnZSAic2VkIC1lICdcJydzL2NsZWFuL3NtdWRnZWQvZydcJyciICYmCisKKwkJdGVzdF9jb21taXQgc2Vjb25kICYmCisJCWdpdCBjaGVja291dCAtYiB0ZXN0IEhFQUReICYmCisKKwkJZWNobyAiKi50eHQgZmlsdGVyPXRlc3QgY29uZmxpY3QtbWFya2VyLXNpemU9MTAiID4uZ2l0YXR0cmlidXRlcyAmJgorCQlnaXQgYWRkIC5naXRhdHRyaWJ1dGVzICYmCisJCXRlc3RfY29tbWl0IHRoaXJkICYmCisKKwkJZWNobyAiVGhpcyB0ZXh0IGlzIHNtdWRnZWQuIiA+YS50eHQgJiYKKwkJZ2l0IGFkZCBhLnR4dCAmJgorCQl0ZXN0X2NvbW1pdCBmb3VydGggJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgcmVtb3ZhbCBIRUFEXiAmJgorCQlnaXQgcm0gLmdpdGF0dHJpYnV0ZXMgJiYKKwkJZ2l0IGFkZCAtdSAmJgorCQl0ZXN0X2NvbW1pdCBmaWZ0aCAmJgorCQlnaXQgY2hlcnJ5LXBpY2sgdGVzdCAmJgorCisJCWdpdCBjaGVja291dCAtYiBjb25mbGljdCB0aGlyZCAmJgorCQllY2hvICJUaGlzIHRleHQgaXMgZGlmZmVyZW50LiIgPmEudHh0ICYmCisJCWdpdCBhZGQgYS50eHQgJiYKKwkJdGVzdF9jb21taXQgc2l4dGggJiYKKworCQlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uSEVBRCA+cGF0Y2hlcyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCQlnaXQgYW0gcGF0Y2hlcyAmJgorCQlncmVwICJzbXVkZ2VkIiBhLnR4dCAmJgorCisJCWdpdCBjaGVja291dCByZW1vdmFsICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLkhFQUQgPnBhdGNoZXMgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwkJZ2l0IGFtIHBhdGNoZXMgJiYKKwkJZ3JlcCAiY2xlYW4iIGEudHh0ICYmCisKKwkJZ2l0IGNoZWNrb3V0IGNvbmZsaWN0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLkhFQUQgPnBhdGNoZXMgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBmb3VydGggJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0zIHBhdGNoZXMgJiYKKwkJZ3JlcCAiPDw8PDw8PDw8PCIgYS50eHQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDE1MS1hbS1hYm9ydC5zaCBiL3QvdDQxNTEtYW0tYWJvcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWQ4ZDNjNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxNTEtYW0tYWJvcnQuc2gKQEAgLTAsMCArMSwxOTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhbSAtLWFib3J0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGkgaW4gYSBiIGMgZCBlIGYgZworCWRvCisJCWVjaG8gJGkKKwlkb25lID5maWxlLTEgJiYKKwljcCBmaWxlLTEgZmlsZS0yICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGFkZCBmaWxlLTEgZmlsZS0yICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLXJvb3QgaW5pdGlhbCA+aW5pdGlhbC5wYXRjaCAmJgorCWZvciBpIGluIDIgMyA0IDUgNgorCWRvCisJCWVjaG8gJGkgPj5maWxlLTEgJiYKKwkJZWNobyAkaSA+b3RoZXJmaWxlLSRpICYmCisJCWdpdCBhZGQgb3RoZXJmaWxlLSRpICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tICRpIHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby1udW1iZXJlZCBpbml0aWFsICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgaW5pdGlhbCAmJgorCWVjaG8gbG9jYWwgY2hhbmdlID5maWxlLTItZXhwZWN0CisnCisKK2ZvciB3aXRoMyBpbiAnJyAnIC0zJworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJhbSR3aXRoMyBzdG9wcyBhdCBhIHBhdGNoIHRoYXQgZG9lcyBub3QgYXBwbHkiICcKKworCQlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwkJY3AgZmlsZS0yLWV4cGVjdCBmaWxlLTIgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgYW0kd2l0aDMgMDAwWzEyNDVdLSoucGF0Y2ggJiYKKwkJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwkJZm9yIGkgaW4gMyAyIGluaXRpYWwKKwkJZG8KKwkJCWVjaG8gJGkKKwkJZG9uZSA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJhbSR3aXRoMyAtLXNraXAgY29udGludWUgYWZ0ZXIgZmFpbGVkIGFtJHdpdGgzIiAnCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSR3aXRoMyAtLXNraXAgPm91dHB1dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJeQXBwbHlpbmc6IDYkIiBvdXRwdXQgJiYKKwkJdGVzdF9jbXAgZmlsZS0yLWV4cGVjdCBmaWxlLTIgJiYKKwkJdGVzdCAhIC1mIC5naXQvTUVSR0VfUlIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJhbSAtLWFib3J0IGdvZXMgYmFjayBhZnRlciBmYWlsZWQgYW0kd2l0aDMiICcKKwkJZ2l0IGFtIC0tYWJvcnQgJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSBpbml0aWFsID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQl0ZXN0X2NtcCBmaWxlLTItZXhwZWN0IGZpbGUtMiAmJgorCQlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSAtLWNhY2hlZCBIRUFEICYmCisJCXRlc3QgISAtZiAuZ2l0L01FUkdFX1JSCisJJworCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIC0tc2tpcCByZW1vdmVzIG90aGVyZmlsZS00JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0zIDAwMDMtKi5wYXRjaCAmJgorCXRlc3QgMyAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDQgPSAiJChjYXQgb3RoZXJmaWxlLTQpIiAmJgorCWdpdCBhbSAtLXNraXAgJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG90aGVyZmlsZS00CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIC0tYWJvcnQgcmVtb3ZlcyBvdGhlcmZpbGUtNCcgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtMyAwMDAzLSoucGF0Y2ggJiYKKwl0ZXN0IDMgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCA0ID0gIiQoY2F0IG90aGVyZmlsZS00KSIgJiYKKwlnaXQgYW0gLS1hYm9ydCAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUQgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgb3RoZXJmaWxlLTQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1hYm9ydCB3aWxsIGtlZXAgdGhlIGxvY2FsIGNvbW1pdHMgaW50YWN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIDAwMDQtKi5wYXRjaCAmJgorCXRlc3RfY29tbWl0IHVucmVsYXRlZCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IGFtIC0tYWJvcnQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1hYm9ydCB3aWxsIGtlZXAgZGlydHkgaW5kZXggaW50YWN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZWNobyBkaXJ0eWZpbGUgPmRpcnR5ZmlsZSAmJgorCWNwIGRpcnR5ZmlsZSBkaXJ0eWZpbGUuZXhwZWN0ZWQgJiYKKwlnaXQgYWRkIGRpcnR5ZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAwMDAxLSoucGF0Y2ggJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGlydHlmaWxlICYmCisJdGVzdF9jbXAgZGlydHlmaWxlLmV4cGVjdGVkIGRpcnR5ZmlsZSAmJgorCWdpdCBhbSAtLWFib3J0ICYmCisJdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGRpcnR5ZmlsZSAmJgorCXRlc3RfY21wIGRpcnR5ZmlsZS5leHBlY3RlZCBkaXJ0eWZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgc3RvcHMgb24gY29uZmxpY3Qgb24gdW5ib3JuIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtZiAtLW9ycGhhbiBvcnBoYW4gJiYKKwlnaXQgcmVzZXQgJiYKKwlybSAtZiBvdGhlcmZpbGUtNCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtMyAwMDAzLSoucGF0Y2ggJiYKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCA0ID0gIiQoY2F0IG90aGVyZmlsZS00KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgLS1za2lwIGNsZWFycyBpbmRleCBvbiB1bmJvcm4gYnJhbmNoJyAnCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWVjaG8gdG1wZmlsZSA+dG1wZmlsZSAmJgorCWdpdCBhZGQgdG1wZmlsZSAmJgorCWdpdCBhbSAtLXNraXAgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcykiICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgb3RoZXJmaWxlLTQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0bXBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIC0tYWJvcnQgcmVtb3ZlcyBvdGhlcmZpbGUtNCBvbiB1bmJvcm4gYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1mIC0tb3JwaGFuIG9ycGhhbiAmJgorCWdpdCByZXNldCAmJgorCXJtIC1mIG90aGVyZmlsZS00IGZpbGUtMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtMyAwMDAzLSoucGF0Y2ggJiYKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCA0ID0gIiQoY2F0IG90aGVyZmlsZS00KSIgJiYKKwlnaXQgYW0gLS1hYm9ydCAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBvdGhlcmZpbGUtNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyAtLWFib3J0IG9uIHVuYm9ybiBicmFuY2ggcmVtb3ZlcyBhcHBsaWVkIGNvbW1pdHMnICcKKwlnaXQgY2hlY2tvdXQgLWYgLS1vcnBoYW4gb3JwaGFuICYmCisJZ2l0IHJlc2V0ICYmCisJcm0gLWYgb3RoZXJmaWxlLTQgb3RoZXJmaWxlLTIgZmlsZS0xIGZpbGUtMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtMyBpbml0aWFsLnBhdGNoIDAwMDMtKi5wYXRjaCAmJgorCXRlc3QgMyAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDQgPSAiJChjYXQgb3RoZXJmaWxlLTQpIiAmJgorCWdpdCBhbSAtLWFib3J0ICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG90aGVyZmlsZS00ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZS0xICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZS0yICYmCisJdGVzdCAwIC1lcSAkKGdpdCBsb2cgLS1vbmVsaW5lIDI+L2Rldi9udWxsIHwgd2MgLWwpICYmCisJdGVzdCByZWZzL2hlYWRzL29ycGhhbiA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tYWJvcnQgb24gdW5ib3JuIGJyYW5jaCB3aWxsIGtlZXAgbG9jYWwgY29tbWl0cyBpbnRhY3QnICcKKwlnaXQgY2hlY2tvdXQgLWYgLS1vcnBoYW4gb3JwaGFuICYmCisJZ2l0IHJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIDAwMDQtKi5wYXRjaCAmJgorCXRlc3RfY29tbWl0IHVucmVsYXRlZDIgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdCAmJgorCWdpdCBhbSAtLWFib3J0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tc2tpcCBsZWF2ZXMgaW5kZXggc3RhdCBpbmZvIGFsb25lJyAnCisJZ2l0IGNoZWNrb3V0IC1mIC0tb3JwaGFuIHNraXAtc3RhdC1pbmZvICYmCisJZ2l0IHJlc2V0ICYmCisJdGVzdF9jb21taXQgc2tpcC1zaG91bGQtYmUtdW50b3VjaGVkICYmCisJdGVzdC10b29sIGNobXRpbWUgPTAgc2tpcC1zaG91bGQtYmUtdW50b3VjaGVkLnQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlIC0tcXVpZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gMDAwMS0qLnBhdGNoICYmCisJZ2l0IGFtIC0tc2tpcCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlIC0tcXVpZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1hYm9ydCBsZWF2ZXMgaW5kZXggc3RhdCBpbmZvIGFsb25lJyAnCisJZ2l0IGNoZWNrb3V0IC1mIC0tb3JwaGFuIGFib3J0LXN0YXQtaW5mbyAmJgorCWdpdCByZXNldCAmJgorCXRlc3RfY29tbWl0IGFib3J0LXNob3VsZC1iZS11bnRvdWNoZWQgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9MCBhYm9ydC1zaG91bGQtYmUtdW50b3VjaGVkLnQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlIC0tcXVpZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gMDAwMS0qLnBhdGNoICYmCisJZ2l0IGFtIC0tYWJvcnQgJiYKKwlnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZSAtLXF1aWV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDE1Mi1hbS1zdWJqZWN0cy5zaCBiL3QvdDQxNTItYW0tc3ViamVjdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGM2ODI0NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxNTItYW0tc3ViamVjdHMuc2gKQEAgLTAsMCArMSw3NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3Qgc3ViamVjdCBwcmVzZXJ2YXRpb24gd2l0aCBmb3JtYXQtcGF0Y2ggfCBhbScKKy4gLi90ZXN0LWxpYi5zaAorCittYWtlX3BhdGNoZXMoKSB7CisJdHlwZT0kMQorCXN1YmplY3Q9JDIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjcmVhdGUgcGF0Y2hlcyB3aXRoICR0eXBlIHN1YmplY3QiICcKKwkJZ2l0IHJlc2V0IC0taGFyZCBiYXNlbGluZSAmJgorCQllY2hvICR0eXBlID5maWxlICYmCisJCWdpdCBjb21taXQgLWEgLW0gIiRzdWJqZWN0IiAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0ID4kdHlwZS5wYXRjaCAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC1rID4kdHlwZS1rLnBhdGNoCisJJworfQorCitjaGVja19zdWJqZWN0KCkgeworCWdpdCByZXNldCAtLWhhcmQgYmFzZWxpbmUgJiYKKwlnaXQgYW0gJDIgJDEucGF0Y2ggJiYKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBiYXNlbGluZSBjb21taXQnICcKKwl0ZXN0X2NvbW1pdCBiYXNlbGluZSBmaWxlCisnCisKK1NIT1JUX1NVQkpFQ1Q9J3Nob3J0IHN1YmplY3QnCittYWtlX3BhdGNoZXMgc2hvcnQgIiRTSE9SVF9TVUJKRUNUIgorCitMT05HX1NVQkpFQ1QxPSd0aGlzIGlzIGEgbG9uZyBzdWJqZWN0IHRoYXQgaXMgdmlydHVhbGx5IGd1YXJhbnRlZWQnCitMT05HX1NVQkpFQ1QyPSd0byByZXF1aXJlIHdyYXBwaW5nIHZpYSBmb3JtYXQtcGF0Y2ggaWYgaXQgaXMgYWxsJworTE9OR19TVUJKRUNUMz0nZ29pbmcgdG8gYXBwZWFyIG9uIGEgc2luZ2xlIGxpbmUnCitMT05HX1NVQkpFQ1Q9IiRMT05HX1NVQkpFQ1QxICRMT05HX1NVQkpFQ1QyICRMT05HX1NVQkpFQ1QzIgorbWFrZV9wYXRjaGVzIGxvbmcgIiRMT05HX1NVQkpFQ1QiCisKK01VTFRJTElORV9TVUJKRUNUPSIkTE9OR19TVUJKRUNUMQorJExPTkdfU1VCSkVDVDIKKyRMT05HX1NVQkpFQ1QzIgorbWFrZV9wYXRjaGVzIG11bHRpbGluZSAiJE1VTFRJTElORV9TVUJKRUNUIgorCitlY2hvICIkU0hPUlRfU1VCSkVDVCIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnQgc3ViamVjdCBwcmVzZXJ2ZWQgKGZvcm1hdC1wYXRjaCB8IGFtKScgJworCWNoZWNrX3N1YmplY3Qgc2hvcnQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0IHN1YmplY3QgcHJlc2VydmVkIChmb3JtYXQtcGF0Y2ggLWsgfCBhbSknICcKKwljaGVja19zdWJqZWN0IHNob3J0LWsKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0IHN1YmplY3QgcHJlc2VydmVkIChmb3JtYXQtcGF0Y2ggLWsgfCBhbSAtayknICcKKwljaGVja19zdWJqZWN0IHNob3J0LWsgLWsKKycKKworZWNobyAiJExPTkdfU1VCSkVDVCIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9uZyBzdWJqZWN0IHByZXNlcnZlZCAoZm9ybWF0LXBhdGNoIHwgYW0pJyAnCisJY2hlY2tfc3ViamVjdCBsb25nCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb25nIHN1YmplY3QgcHJlc2VydmVkIChmb3JtYXQtcGF0Y2ggLWsgfCBhbSknICcKKwljaGVja19zdWJqZWN0IGxvbmctaworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9uZyBzdWJqZWN0IHByZXNlcnZlZCAoZm9ybWF0LXBhdGNoIC1rIHwgYW0gLWspJyAnCisJY2hlY2tfc3ViamVjdCBsb25nLWsgLWsKKycKKworZWNobyAiJExPTkdfU1VCSkVDVCIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlsaW5lIHN1YmplY3QgdW53cmFwcGVkIChmb3JtYXQtcGF0Y2ggfCBhbSknICcKKwljaGVja19zdWJqZWN0IG11bHRpbGluZQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlsaW5lIHN1YmplY3QgdW53cmFwcGVkIChmb3JtYXQtcGF0Y2ggLWsgfCBhbSknICcKKwljaGVja19zdWJqZWN0IG11bHRpbGluZS1rCisnCitlY2hvICIkTVVMVElMSU5FX1NVQkpFQ1QiID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpbGluZSBzdWJqZWN0IHByZXNlcnZlZCAoZm9ybWF0LXBhdGNoIC1rIHwgYW0gLWspJyAnCisJY2hlY2tfc3ViamVjdCBtdWx0aWxpbmUtayAtaworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxNTMtYW0tcmVzdW1lLW92ZXJyaWRlLW9wdHMuc2ggYi90L3Q0MTUzLWFtLXJlc3VtZS1vdmVycmlkZS1vcHRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlYTIyZDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTUzLWFtLXJlc3VtZS1vdmVycmlkZS1vcHRzLnNoCkBAIC0wLDAgKzEsMTAyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWFtIGNvbW1hbmQtbGluZSBvcHRpb25zIG92ZXJyaWRlIHNhdmVkIG9wdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItdGVybWluYWwuc2gKKworZm9ybWF0X3BhdGNoICgpIHsKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xICIkMSIgPiIkMSIuZW1sCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdGlhbCBmaWxlICYmCisJdGVzdF9jb21taXQgZmlyc3QgZmlsZSAmJgorCisJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwlnaXQgbXYgZmlsZSBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gcmVuYW1lZC1maWxlICYmCisJZ2l0IHRhZyByZW5hbWVkLWZpbGUgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCBzaWRlMSBmaWxlICYmCisJdGVzdF9jb21taXQgc2lkZTIgZmlsZSAmJgorCisJZm9ybWF0X3BhdGNoIHNpZGUxICYmCisJZm9ybWF0X3BhdGNoIHNpZGUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICctLTN3YXkgb3ZlcnJpZGVzIC0tbm8tM3dheScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgcmVuYW1lZC1maWxlICYmCisKKwkjIEFwcGx5aW5nIHNpZGUxIHdpbGwgZmFpbCBhcyB0aGUgZmlsZSBoYXMgYmVlbiByZW5hbWVkLgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLW5vLTN3YXkgc2lkZVsxMl0uZW1sICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfY21wX3JldiByZW5hbWVkLWZpbGUgSEVBRCAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKworCSMgQXBwbHlpbmcgc2lkZTEgd2l0aCBhbSAtLTN3YXkgd2lsbCBzdWNjZWVkIGR1ZSB0byB0aGUgdGhyZWV3YXktbWVyZ2UuCisJIyBBcHBseWluZyBzaWRlMiB3aWxsIGZhaWwgYXMgLS0zd2F5IGRvZXMgbm90IGFwcGx5IHRvIGl0LgorCXRlc3RfbXVzdF9mYWlsIHRlc3RfdGVybWluYWwgZ2l0IGFtIC0tM3dheSA8L2Rldi96ZXJvICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3Qgc2lkZTEgPSAiJChjYXQgZmlsZTIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXF1aWV0IG92ZXJyaWRlcyAtLXF1aWV0JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCisJIyBBcHBseWluZyBzaWRlMSB3aWxsIGJlIHF1aWV0LgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLXF1aWV0IHNpZGVbMTIzXS5lbWwgPm91dCAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIl5BcHBseWluZzogIiBvdXQgJiYKKwllY2hvIHNpZGUxID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwkjIEFwcGx5aW5nIHNpZGUxIHdpbGwgbm90IGJlIHF1aWV0LgorCSMgQXBwbHlpbmcgc2lkZTIgd2lsbCBiZSBxdWlldC4KKwlnaXQgYW0gLS1uby1xdWlldCAtLWNvbnRpbnVlID5vdXQgJiYKKwllY2hvICJBcHBseWluZzogc2lkZTEiID5leHBlY3RlZCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaWdub2ZmIG92ZXJyaWRlcyAtLW5vLXNpZ25vZmYnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1uby1zaWdub2ZmIHNpZGVbMTJdLmVtbCAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwllY2hvIHNpZGUxID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGFtIC0tc2lnbm9mZiAtLWNvbnRpbnVlICYmCisKKwkjIEFwcGxpZWQgc2lkZTEgd2lsbCBiZSBzaWduZWQgb2ZmCisJZWNobyAiU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgZ3JlcCAiU2lnbmVkLW9mZi1ieToiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCSMgQXBwbGllZCBzaWRlMiB3aWxsIG5vdCBiZSBzaWduZWQgb2ZmCisJdGVzdCAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgLWMgIlNpZ25lZC1vZmYtYnk6IikgLWVxIDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJy0tcmVqZWN0IG92ZXJyaWRlcyAtLW5vLXJlamVjdCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlybSAtZiBmaWxlLnJlaiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0tbm8tcmVqZWN0IHNpZGUxLmVtbCAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlLnJlaiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgdGVzdF90ZXJtaW5hbCBnaXQgYW0gLS1yZWplY3QgPC9kZXYvemVybyAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlLnJlagorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDAtcmVyZXJlLnNoIGIvdC90NDIwMC1yZXJlcmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODMxZDQyNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMDAtcmVyZXJlLnNoCkBAIC0wLDAgKzEsNjc1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlcmVyZQorCishIFtmaWZ0aF0gdmVyc2lvbjEKKyAhIFtmaXJzdF0gZmlyc3QKKyAgISBbZm91cnRoXSB2ZXJzaW9uMQorICAgISBbbWFzdGVyXSBpbml0aWFsCisgICAgISBbc2Vjb25kXSBwcmVmZXIgZmlyc3Qgb3ZlciBzZWNvbmQKKyAgICAgISBbdGhpcmRdIHZlcnNpb24yCistLS0tLS0KKyAgICAgKyBbdGhpcmRdIHZlcnNpb24yCisrICAgICAgW2ZpZnRoXSB2ZXJzaW9uMQorICArICAgIFtmb3VydGhdIHZlcnNpb24xCisrICsgICsgW3RoaXJkXl0gdGhpcmQKKyAgICAtICBbc2Vjb25kXSBwcmVmZXIgZmlyc3Qgb3ZlciBzZWNvbmQKKyArICArICBbZmlyc3RdIGZpcnN0CisgICAgKyAgW3NlY29uZF5dIHNlY29uZAorKysrKysrIFttYXN0ZXJdIGluaXRpYWwKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9vaWRfaW5pdCAmJgorCWNhdCA+YTEgPDwtXEVPRiAmJgorCVNvbWUgdGl0bGUKKwk9PT09PT09PT09CisJV2hldGhlciAnXCcndGlzIG5vYmxlciBpbiB0aGUgbWluZCB0byBzdWZmZXIKKwlUaGUgc2xpbmdzIGFuZCBhcnJvd3Mgb2Ygb3V0cmFnZW91cyBmb3J0dW5lLAorCU9yIHRvIHRha2UgYXJtcyBhZ2FpbnN0IGEgc2VhIG9mIHRyb3VibGVzLAorCUFuZCBieSBvcHBvc2luZyBlbmQgdGhlbT8gVG8gZGllOiB0byBzbGVlcDsKKwlObyBtb3JlOyBhbmQgYnkgYSBzbGVlcCB0byBzYXkgd2UgZW5kCisJVGhlIGhlYXJ0LWFjaGUgYW5kIHRoZSB0aG91c2FuZCBuYXR1cmFsIHNob2NrcworCVRoYXQgZmxlc2ggaXMgaGVpciB0bywgJ1wnJ3RpcyBhIGNvbnN1bW1hdGlvbgorCURldm91dGx5IHRvIGJlIHdpc2gnXCcnZC4KKwlFT0YKKworCWdpdCBhZGQgYTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tIGluaXRpYWwgJiYKKworCWNhdCA+PmExIDw8LVxFT0YgJiYKKwlTb21lIHRpdGxlCisJPT09PT09PT09PQorCVRvIGRpZSwgdG8gc2xlZXA7CisJVG8gc2xlZXA6IHBlcmNoYW5jZSB0byBkcmVhbTogYXksIHRoZXJlJ1wnJ3MgdGhlIHJ1YjsKKwlGb3IgaW4gdGhhdCBzbGVlcCBvZiBkZWF0aCB3aGF0IGRyZWFtcyBtYXkgY29tZQorCVdoZW4gd2UgaGF2ZSBzaHVmZmxlZCBvZmYgdGhpcyBtb3J0YWwgY29pbCwKKwlNdXN0IGdpdmUgdXMgcGF1c2U6IHRoZXJlJ1wnJ3MgdGhlIHJlc3BlY3QKKwlUaGF0IG1ha2VzIGNhbGFtaXR5IG9mIHNvIGxvbmcgbGlmZTsKKwlFT0YKKworCWdpdCBjaGVja291dCAtYiBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLXEgLWEgLW0gZmlyc3QgJiYKKworCWdpdCBjaGVja291dCAtYiBzZWNvbmQgbWFzdGVyICYmCisJZ2l0IHNob3cgZmlyc3Q6YTEgfAorCXNlZCAtZSAicy9UbyBkaWUsIHQvVG8gZGllISBULyIgLWUgInMvU29tZSB0aXRsZS9Tb21lIFRpdGxlLyIgPmExICYmCisJZWNobyAiKiBFTkQgKiIgPj5hMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLXEgLWEgLW0gc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGhpbmcgcmVjb3JkZWQgd2l0aG91dCByZXJlcmUnICcKKwlybSAtcmYgLmdpdC9yci1jYWNoZSAmJgorCWdpdCBjb25maWcgcmVyZXJlLmVuYWJsZWQgZmFsc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlyc3QgJiYKKwkhIHRlc3QgLWQgLmdpdC9yci1jYWNoZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhY3RpdmF0ZSByZXJlcmUsIG9sZCBzdHlsZSAoY29uZmxpY3RpbmcgbWVyZ2UpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCW1rZGlyIC5naXQvcnItY2FjaGUgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IHJlcmVyZS5lbmFibGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZpcnN0ICYmCisKKwlzaGExPSQocGVybCAtcGUgInMvCS4qLy8iIC5naXQvTUVSR0VfUlIpICYmCisJcnI9LmdpdC9yci1jYWNoZS8kc2hhMSAmJgorCWdyZXAgIl49PT09PT09XCQiICRyci9wcmVpbWFnZSAmJgorCSEgdGVzdCAtZiAkcnIvcG9zdGltYWdlICYmCisJISB0ZXN0IC1mICRyci90aGlzaW1hZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlLmVuYWJsZWQgd29ya3MsIHRvbycgJworCXJtIC1yZiAuZ2l0L3JyLWNhY2hlICYmCisJZ2l0IGNvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmaXJzdCAmJgorCisJc2hhMT0kKHBlcmwgLXBlICJzLwkuKi8vIiAuZ2l0L01FUkdFX1JSKSAmJgorCXJyPS5naXQvcnItY2FjaGUvJHNoYTEgJiYKKwlncmVwIF49PT09PT09JCAkcnIvcHJlaW1hZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHJyLWNhY2hlJyAnCisJcm0gLXJmIC5naXQvcnItY2FjaGUgJiYKKwlnaXQgY29uZmlnIHJlcmVyZS5lbmFibGVkIHRydWUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZpcnN0ICYmCisJc2hhMT0kKHBlcmwgLXBlICJzLwkuKi8vIiAuZ2l0L01FUkdFX1JSKSAmJgorCXJyPS5naXQvcnItY2FjaGUvJHNoYTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnItY2FjaGUgbG9va3Mgc2FuZScgJworCSMgbm8gcG9zdGltYWdlIG9yIHRoaXNpbWFnZSB5ZXQKKwkhIHRlc3QgLWYgJHJyL3Bvc3RpbWFnZSAmJgorCSEgdGVzdCAtZiAkcnIvdGhpc2ltYWdlICYmCisKKwkjIHByZWltYWdlIGhhcyByaWdodCBudW1iZXIgb2YgbGluZXMKKwljbnQ9JChzZWQgLW5lICIvXjw8PDw8PDwvLC9ePj4+Pj4+Pi9wIiAkcnIvcHJlaW1hZ2UgfCB3YyAtbCkgJiYKKwllY2hvICRjbnQgJiYKKwl0ZXN0ICRjbnQgPSAxMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgZGlmZicgJworCWdpdCBzaG93IGZpcnN0OmExID5hMSAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwktLS0gYS9hMQorCSsrKyBiL2ExCisJQEAgLTEsNCArMSw0IEBACisJLVNvbWUgVGl0bGUKKwkrU29tZSB0aXRsZQorCSA9PT09PT09PT09CisJIFdoZXRoZXIgJ1wnJ3RpcyBub2JsZXIgaW4gdGhlIG1pbmQgdG8gc3VmZmVyCisJIFRoZSBzbGluZ3MgYW5kIGFycm93cyBvZiBvdXRyYWdlb3VzIGZvcnR1bmUsCisJQEAgLTgsMjEgKzgsMTEgQEAKKwkgVGhlIGhlYXJ0LWFjaGUgYW5kIHRoZSB0aG91c2FuZCBuYXR1cmFsIHNob2NrcworCSBUaGF0IGZsZXNoIGlzIGhlaXIgdG8sICdcJyd0aXMgYSBjb25zdW1tYXRpb24KKwkgRGV2b3V0bHkgdG8gYmUgd2lzaCdcJydkLgorCS08PDw8PDw8CisJLVNvbWUgVGl0bGUKKwktPT09PT09PT09PQorCS1UbyBkaWUhIFRvIHNsZWVwOworCS09PT09PT09CisJIFNvbWUgdGl0bGUKKwkgPT09PT09PT09PQorCSBUbyBkaWUsIHRvIHNsZWVwOworCS0+Pj4+Pj4+CisJIFRvIHNsZWVwOiBwZXJjaGFuY2UgdG8gZHJlYW06IGF5LCB0aGVyZSdcJydzIHRoZSBydWI7CisJIEZvciBpbiB0aGF0IHNsZWVwIG9mIGRlYXRoIHdoYXQgZHJlYW1zIG1heSBjb21lCisJIFdoZW4gd2UgaGF2ZSBzaHVmZmxlZCBvZmYgdGhpcyBtb3J0YWwgY29pbCwKKwkgTXVzdCBnaXZlIHVzIHBhdXNlOiB0aGVyZSdcJydzIHRoZSByZXNwZWN0CisJIFRoYXQgbWFrZXMgY2FsYW1pdHkgb2Ygc28gbG9uZyBsaWZlOworCS08PDw8PDw8CisJLT09PT09PT0KKwktKiBFTkQgKgorCS0+Pj4+Pj4+CisJRU9GCisJZ2l0IHJlcmVyZSBkaWZmID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZSBzdGF0dXMnICcKKwllY2hvIGExID5leHBlY3QgJiYKKwlnaXQgcmVyZXJlIHN0YXR1cyA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXJzdCBwb3N0aW1hZ2Ugd2lucycgJworCWdpdCBzaG93IGZpcnN0OmExIHwgc2VkICJzL1RvIGRpZTogdC9UbyBkaWUhIFQvIiA+ZXhwZWN0ICYmCisKKwlnaXQgY29tbWl0IC1xIC1hIC1tICJwcmVmZXIgZmlyc3Qgb3ZlciBzZWNvbmQiICYmCisJdGVzdCAtZiAkcnIvcG9zdGltYWdlICYmCisKKwlvbGRtdGltZXBvc3Q9JCh0ZXN0LXRvb2wgY2htdGltZSAtLWdldCAtNjAgJHJyL3Bvc3RpbWFnZSkgJiYKKworCWdpdCBjaGVja291dCAtYiB0aGlyZCBtYXN0ZXIgJiYKKwlnaXQgc2hvdyBzZWNvbmReOmExIHwgc2VkICJzL1RvIGRpZTogdC9UbyBkaWUhIFQvIiA+YTEgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tIHRoaXJkICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlyc3QgJiYKKwkjIHJlcmVyZSBraWNrZWQgaW4KKwkhIGdyZXAgIl49PT09PT09XCQiIGExICYmCisJdGVzdF9jbXAgZXhwZWN0IGExCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZSB1cGRhdGVzIHBvc3RpbWFnZSB0aW1lc3RhbXAnICcKKwluZXdtdGltZXBvc3Q9JCh0ZXN0LXRvb2wgY2htdGltZSAtLWdldCAkcnIvcG9zdGltYWdlKSAmJgorCXRlc3QgJG9sZG10aW1lcG9zdCAtbHQgJG5ld210aW1lcG9zdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgY2xlYXInICcKKwltdiAkcnIvcG9zdGltYWdlIC5naXQvcG9zdC1zYXZlZCAmJgorCWVjaG8gIiRzaGExCWExIiB8IHBlcmwgLXBlICJ5L1wwMTIvXDAwMC8iID4uZ2l0L01FUkdFX1JSICYmCisJZ2l0IHJlcmVyZSBjbGVhciAmJgorCSEgdGVzdCAtZCAkcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdG92ZXIgZGlyZWN0b3J5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCW1rZGlyIC1wICRyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmaXJzdCAmJgorCXRlc3QgLWYgJHJyL3ByZWltYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgcHJlaW1hZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJbWtkaXIgLXAgJHJyICYmCisJY3AgLmdpdC9wb3N0LXNhdmVkICRyci9wb3N0aW1hZ2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlyc3QgJiYKKwl0ZXN0IC1mICRyci9wcmVpbWFnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbiB0ZXN0cycgJworCW1rZGlyIC1wICRyciAmJgorCWVjaG8gSGVsbG8gPiRyci9wcmVpbWFnZSAmJgorCWVjaG8gV29ybGQgPiRyci9wb3N0aW1hZ2UgJiYKKworCXNoYTI9JCh0ZXN0X29pZCBkZWFkYmVlZikgJiYKKwlycjI9LmdpdC9yci1jYWNoZS8kc2hhMiAmJgorCW1rZGlyICRycjIgJiYKKwllY2hvIEhlbGxvID4kcnIyL3ByZWltYWdlICYmCisKKwlhbG1vc3RfMTVfZGF5c19hZ289JCgoNjAtMTUqODY0MDApKSAmJgorCWp1c3Rfb3Zlcl8xNV9kYXlzX2Fnbz0kKCgtMS0xNSo4NjQwMCkpICYmCisJYWxtb3N0XzYwX2RheXNfYWdvPSQoKDYwLTYwKjg2NDAwKSkgJiYKKwlqdXN0X292ZXJfNjBfZGF5c19hZ289JCgoLTEtNjAqODY0MDApKSAmJgorCisJdGVzdC10b29sIGNobXRpbWUgPSRqdXN0X292ZXJfNjBfZGF5c19hZ28gJHJyL3ByZWltYWdlICYmCisJdGVzdC10b29sIGNobXRpbWUgPSRhbG1vc3RfNjBfZGF5c19hZ28gJHJyL3Bvc3RpbWFnZSAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0kYWxtb3N0XzE1X2RheXNfYWdvICRycjIvcHJlaW1hZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgcHJlc2VydmVzIHlvdW5nIG9yIHJlY2VudGx5IHVzZWQgcmVjb3JkcycgJworCWdpdCByZXJlcmUgZ2MgJiYKKwl0ZXN0IC1mICRyci9wcmVpbWFnZSAmJgorCXRlc3QgLWYgJHJyMi9wcmVpbWFnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbGQgcmVjb3JkcyByZXN0IGluIHBlYWNlJyAnCisJdGVzdC10b29sIGNobXRpbWUgPSRqdXN0X292ZXJfNjBfZGF5c19hZ28gJHJyL3Bvc3RpbWFnZSAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0kanVzdF9vdmVyXzE1X2RheXNfYWdvICRycjIvcHJlaW1hZ2UgJiYKKwlnaXQgcmVyZXJlIGdjICYmCisJISB0ZXN0IC1mICRyci9wcmVpbWFnZSAmJgorCSEgdGVzdCAtZiAkcnIyL3ByZWltYWdlCisnCisKK3JlcmVyZV9nY19jdXN0b21fZXhwaXJ5X3Rlc3QgKCkgeworCWZpdmVfZGF5cz0iJDEiIHJpZ2h0X25vdz0iJDIiCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVyZXJlIGdjIHdpdGggY3VzdG9tIGV4cGlyeSAoJGZpdmVfZGF5cywgJHJpZ2h0X25vdykiICcKKwkJcm0gLWZyIC5naXQvcnItY2FjaGUgJiYKKwkJcnI9LmdpdC9yci1jYWNoZS8kWkVST19PSUQgJiYKKwkJbWtkaXIgLXAgIiRyciIgJiYKKwkJPiIkcnIvcHJlaW1hZ2UiICYmCisJCT4iJHJyL3Bvc3RpbWFnZSIgJiYKKworCQl0d29fZGF5c19hZ289JCgoLTIqODY0MDApKSAmJgorCQl0ZXN0LXRvb2wgY2htdGltZSA9JHR3b19kYXlzX2FnbyAiJHJyL3ByZWltYWdlIiAmJgorCQl0ZXN0LXRvb2wgY2htdGltZSA9JHR3b19kYXlzX2FnbyAiJHJyL3Bvc3RpbWFnZSIgJiYKKworCQlmaW5kIC5naXQvcnItY2FjaGUgLXR5cGUgZiB8IHNvcnQgPm9yaWdpbmFsICYmCisKKwkJZ2l0IC1jICJnYy5yZXJlcmVyZXNvbHZlZD0kZml2ZV9kYXlzIiBcCisJCSAgICAtYyAiZ2MucmVyZXJldW5yZXNvbHZlZD0kZml2ZV9kYXlzIiByZXJlcmUgZ2MgJiYKKwkJZmluZCAuZ2l0L3JyLWNhY2hlIC10eXBlIGYgfCBzb3J0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgb3JpZ2luYWwgYWN0dWFsICYmCisKKwkJZ2l0IC1jICJnYy5yZXJlcmVyZXNvbHZlZD0kZml2ZV9kYXlzIiBcCisJCSAgICAtYyAiZ2MucmVyZXJldW5yZXNvbHZlZD0kcmlnaHRfbm93IiByZXJlcmUgZ2MgJiYKKwkJZmluZCAuZ2l0L3JyLWNhY2hlIC10eXBlIGYgfCBzb3J0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgb3JpZ2luYWwgYWN0dWFsICYmCisKKwkJZ2l0IC1jICJnYy5yZXJlcmVyZXNvbHZlZD0kcmlnaHRfbm93IiBcCisJCSAgICAtYyAiZ2MucmVyZXJldW5yZXNvbHZlZD0kcmlnaHRfbm93IiByZXJlcmUgZ2MgJiYKKwkJZmluZCAuZ2l0L3JyLWNhY2hlIC10eXBlIGYgfCBzb3J0ID5hY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorCScKK30KKworcmVyZXJlX2djX2N1c3RvbV9leHBpcnlfdGVzdCA1IDAKKworcmVyZXJlX2djX2N1c3RvbV9leHBpcnlfdGVzdCA1LmRheXMuYWdvIG5vdworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogZmlsZTIgYWRkZWQgZGlmZmVyZW50bHkgaW4gdHdvIGJyYW5jaGVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGZvdXJ0aCAmJgorCWVjaG8gSGFsbG8gPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdmVyc2lvbjEgJiYKKworCWdpdCBjaGVja291dCB0aGlyZCAmJgorCWVjaG8gQmVsbG8gPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdmVyc2lvbjIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmb3VydGggJiYKKwllY2hvIENlbGxvID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIHJlc29sdXRpb24KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzb2x1dGlvbiB3YXMgcmVjb3JkZWQgcHJvcGVybHknICcKKwllY2hvIENlbGxvID5leHBlY3RlZCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZmlmdGggJiYKKworCWVjaG8gSGFsbG8gPmZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdmVyc2lvbjEgJiYKKworCWdpdCBjaGVja291dCB0aGlyZCAmJgorCWVjaG8gQmVsbG8gPmZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdmVyc2lvbjIgJiYKKwlnaXQgdGFnIHZlcnNpb24yICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlmdGggJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZS5hdXRvdXBkYXRlJyAnCisJZ2l0IGNvbmZpZyByZXJlcmUuYXV0b3VwZGF0ZSB0cnVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB2ZXJzaW9uMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmaWZ0aCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC0tcmVyZXJlLWF1dG91cGRhdGUnICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IHJlcmVyZS5hdXRvdXBkYXRlICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB2ZXJzaW9uMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXJlcmVyZS1hdXRvdXBkYXRlIGZpZnRoICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZScgJworCWhlYWRibG9iPSQoZ2l0IHJldi1wYXJzZSB2ZXJzaW9uMjpmaWxlMykgJiYKKwltZXJnZWJsb2I9JChnaXQgcmV2LXBhcnNlIGZpZnRoOmZpbGUzKSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJMTAwNjQ0ICRoZWFkYmxvYiAyCWZpbGUzCisJMTAwNjQ0ICRtZXJnZWJsb2IgMwlmaWxlMworCUVPRgorCisJZ2l0IGNvbmZpZyByZXJlcmUuYXV0b3VwZGF0ZSB0cnVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB2ZXJzaW9uMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLXJlcmVyZS1hdXRvdXBkYXRlIGZpZnRoICYmCisJZ2l0IGxzLWZpbGVzIC11ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGFuIHVucmVzb2x2ZWQgbWVyZ2UnICcKKwloZWFkYmxvYj0kKGdpdCByZXYtcGFyc2UgdmVyc2lvbjI6ZmlsZTMpICYmCisJbWVyZ2VibG9iPSQoZ2l0IHJldi1wYXJzZSBmaWZ0aDpmaWxlMykgJiYKKwljYXQgPmV4cGVjdGVkLnVucmVzb2x2ZWQgPDwtRU9GICYmCisJMTAwNjQ0ICRoZWFkYmxvYiAyCWZpbGUzCisJMTAwNjQ0ICRtZXJnZWJsb2IgMwlmaWxlMworCUVPRgorCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCByZXJlcmUuYXV0b3VwZGF0ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdmVyc2lvbjIgJiYKKwlmaWZ0aD0kKGdpdCByZXYtcGFyc2UgZmlmdGgpICYmCisJZWNobyAiJGZpZnRoCQlicmFuY2ggJ2ZpZnRoJyBvZiAuIiB8CisJZ2l0IGZtdC1tZXJnZS1tc2cgPm1zZyAmJgorCWFuY2VzdG9yPSQoZ2l0IG1lcmdlLWJhc2UgdmVyc2lvbjIgZmlmdGgpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAiJGFuY2VzdG9yIiAtLSBIRUFEIGZpZnRoICYmCisKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+ZmFpbGVkbWVyZ2UgJiYKKwljcCBmaWxlMyBmaWxlMy5jb25mbGljdCAmJgorCisJZ2l0IGxzLWZpbGVzIC11ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC51bnJlc29sdmVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdCByZXJlcmUnICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IHJlcmVyZS5hdXRvdXBkYXRlICYmCisJZ2l0IHJtIC1mciAtLWNhY2hlZCAuICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMuY29uZmxpY3QgZmlsZTMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtcSAmJgorCisJZ2l0IHJlcmVyZSAmJgorCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQudW5yZXNvbHZlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgcmVyZXJlIHdpdGggYXV0b3VwZGF0ZScgJworCWdpdCBjb25maWcgcmVyZXJlLmF1dG91cGRhdGUgdHJ1ZSAmJgorCWdpdCBybSAtZnIgLS1jYWNoZWQgLiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxmYWlsZWRtZXJnZSAmJgorCWNwIGZpbGUzLmNvbmZsaWN0IGZpbGUzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLXEgJiYKKworCWdpdCByZXJlcmUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdCByZXJlcmUgLS1yZXJlcmUtYXV0b3VwZGF0ZSBvdmVycmlkZXMnICcKKwlnaXQgY29uZmlnIHJlcmVyZS5hdXRvdXBkYXRlIGZhbHNlICYmCisJZ2l0IHJtIC1mciAtLWNhY2hlZCAuICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMuY29uZmxpY3QgZmlsZTMgJiYKKwlnaXQgcmVyZXJlICYmCisJZ2l0IGxzLWZpbGVzIC11ID5hY3R1YWwxICYmCisKKwlnaXQgcm0gLWZyIC0tY2FjaGVkIC4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8ZmFpbGVkbWVyZ2UgJiYKKwljcCBmaWxlMy5jb25mbGljdCBmaWxlMyAmJgorCWdpdCByZXJlcmUgLS1yZXJlcmUtYXV0b3VwZGF0ZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwlnaXQgcm0gLWZyIC0tY2FjaGVkIC4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8ZmFpbGVkbWVyZ2UgJiYKKwljcCBmaWxlMy5jb25mbGljdCBmaWxlMyAmJgorCWdpdCByZXJlcmUgLS1yZXJlcmUtYXV0b3VwZGF0ZSAtLW5vLXJlcmVyZS1hdXRvdXBkYXRlICYmCisJZ2l0IGxzLWZpbGVzIC11ID5hY3R1YWwyICYmCisKKwlnaXQgcm0gLWZyIC0tY2FjaGVkIC4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8ZmFpbGVkbWVyZ2UgJiYKKwljcCBmaWxlMy5jb25mbGljdCBmaWxlMyAmJgorCWdpdCByZXJlcmUgLS1yZXJlcmUtYXV0b3VwZGF0ZSAtLW5vLXJlcmVyZS1hdXRvdXBkYXRlIC0tcmVyZXJlLWF1dG91cGRhdGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQudW5yZXNvbHZlZCBhY3R1YWwxICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQudW5yZXNvbHZlZCBhY3R1YWwyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZSAtLW5vLW5vLXJlcmVyZS1hdXRvdXBkYXRlJyAnCisJZ2l0IHJtIC1mciAtLWNhY2hlZCAuICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMuY29uZmxpY3QgZmlsZTMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVyZXJlIC0tbm8tbm8tcmVyZXJlLWF1dG91cGRhdGUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIFtVdV1zYWdlIGVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZSAtaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXJlcmUgLWggPmhlbHAgJiYKKwl0ZXN0X2kxOG5ncmVwIFtVdV1zYWdlIGhlbHAKKycKKworY29uY2F0X2luc2VydCAoKSB7CisJbGFzdD0kMQorCXNoaWZ0CisJY2F0IGVhcmx5ICYmIHByaW50ZiAiJXNcbiIgIiRAIiAmJiBjYXQgbGF0ZSAiJGxhc3QiCit9CisKK2NvdW50X3ByZV9wb3N0ICgpIHsKKwlmaW5kIC5naXQvcnItY2FjaGUvIC10eXBlIGYgLW5hbWUgInByZWltYWdlKiIgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9ICIkMSIgYWN0dWFsICYmCisJZmluZCAuZ2l0L3JyLWNhY2hlLyAtdHlwZSBmIC1uYW1lICJwb3N0aW1hZ2UqIiA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gIiQyIiBhY3R1YWwKK30KKworbWVyZ2VfY29uZmxpY3RfcmVzb2x2ZSAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzaXguMSAmJgorCSMgUmVzb2x1dGlvbiBpcyB0byByZXBsYWNlIDcgd2l0aCA2LjEgYW5kIDYuMiAoaS5lLiB0YWtlIGJvdGgpCisJY29uY2F0X2luc2VydCBzaG9ydCA2LjEgNi4yID5maWxlMSAmJgorCWNvbmNhdF9pbnNlcnQgbG9uZyA2LjEgNi4yID5maWxlMgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBpZGVudGljYWwgY29uZmxpY3RzJyAnCisJcm0gLWZyIC5naXQvcnItY2FjaGUgJiYKKwlta2RpciAuZ2l0L3JyLWNhY2hlICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJdGVzdF9zZXEgMSA2ID5lYXJseSAmJgorCT5sYXRlICYmCisJdGVzdF9zZXEgMTEgMTUgPnNob3J0ICYmCisJdGVzdF9zZXEgMTExIDEyMCA+bG9uZyAmJgorCWNvbmNhdF9pbnNlcnQgc2hvcnQgPmZpbGUxICYmCisJY29uY2F0X2luc2VydCBsb25nID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwlnaXQgdGFnIGJhc2UgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2l4LjEgJiYKKwljb25jYXRfaW5zZXJ0IHNob3J0IDYuMSA+ZmlsZTEgJiYKKwljb25jYXRfaW5zZXJ0IGxvbmcgNi4xID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIDYuMSAmJgorCWdpdCBjaGVja291dCAtYiBzaXguMiBIRUFEXiAmJgorCWNvbmNhdF9pbnNlcnQgc2hvcnQgNi4yID5maWxlMSAmJgorCWNvbmNhdF9pbnNlcnQgbG9uZyA2LjIgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMSBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gNi4yICYmCisKKwkjIEF0IHRoaXMgcG9pbnQsIHNpeC4xIGFuZCBzaXguMgorCSMgLSBkZXJpdmUgZnJvbSBjb21tb24gYW5jZXN0b3IgdGhhdCBoYXMgdHdvIGZpbGVzCisJIyAgIDEuLi42IDcgMTEuLjE1IChmaWxlMSkgYW5kIDEuLi42IDcgMTExLi4xMjAgKGZpbGUyKQorCSMgLSBzaXguMSByZXBsYWNlcyB0aGVzZSA3cyB3aXRoIDYuMQorCSMgLSBzaXguMiByZXBsYWNlcyB0aGVzZSA3cyB3aXRoIDYuMgorCisJbWVyZ2VfY29uZmxpY3RfcmVzb2x2ZSAmJgorCisJIyBDaGVjayB0aGF0IHJlcmVyZSBrbm93cyB0aGF0IGZpbGUxIGFuZCBmaWxlMiBoYXZlIGNvbmZsaWN0cworCisJcHJpbnRmICIlc1xuIiBmaWxlMSBmaWxlMiA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC11IHwgc2VkIC1lICJzL14uKgkvLyIgfCBzb3J0IC11ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgcmVyZXJlIHN0YXR1cyB8IHNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCByZXJlcmUgcmVtYWluaW5nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwljb3VudF9wcmVfcG9zdCAyIDAgJiYKKworCSMgUHJldGVuZCB0aGF0IHRoZSBjb25mbGljdHMgd2VyZSBtYWRlIHF1aXRlIHNvbWUgdGltZSBhZ28KKwl0ZXN0LXRvb2wgY2htdGltZSAtMTcyODAwICQoZmluZCAuZ2l0L3JyLWNhY2hlLyAtdHlwZSBmKSAmJgorCisJIyBVbnJlc29sdmVkIGVudHJpZXMgaGF2ZSBub3QgZXhwaXJlZCB5ZXQKKwlnaXQgLWMgZ2MucmVyZXJlcmVzb2x2ZWQ9NSAtYyBnYy5yZXJlcmV1bnJlc29sdmVkPTUgcmVyZXJlIGdjICYmCisJY291bnRfcHJlX3Bvc3QgMiAwICYmCisKKwkjIFVucmVzb2x2ZWQgZW50cmllcyBoYXZlIGV4cGlyZWQKKwlnaXQgLWMgZ2MucmVyZXJlcmVzb2x2ZWQ9NSAtYyBnYy5yZXJlcmV1bnJlc29sdmVkPTEgcmVyZXJlIGdjICYmCisJY291bnRfcHJlX3Bvc3QgMCAwICYmCisKKwkjIFJlY3JlYXRlIHRoZSBjb25mbGljdGVkIHN0YXRlCisJbWVyZ2VfY29uZmxpY3RfcmVzb2x2ZSAmJgorCWNvdW50X3ByZV9wb3N0IDIgMCAmJgorCisJIyBDbGVhciBpdAorCWdpdCByZXJlcmUgY2xlYXIgJiYKKwljb3VudF9wcmVfcG9zdCAwIDAgJiYKKworCSMgUmVjcmVhdGUgdGhlIGNvbmZsaWN0ZWQgc3RhdGUKKwltZXJnZV9jb25mbGljdF9yZXNvbHZlICYmCisJY291bnRfcHJlX3Bvc3QgMiAwICYmCisKKwkjIFdlIHJlc29sdmVkIGZpbGUxIGFuZCBmaWxlMgorCWdpdCByZXJlcmUgJiYKKwlnaXQgcmVyZXJlIHJlbWFpbmluZyA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisJIyBXZSBtdXN0IGhhdmUgcmVjb3JkZWQgYm90aCBvZiB0aGVtCisJY291bnRfcHJlX3Bvc3QgMiAyICYmCisKKwkjIE5vdyB3ZSBzaG91bGQgYmUgYWJsZSB0byByZXNvbHZlIHRoZW0gYm90aAorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2l4LjEgJiYKKwlnaXQgcmVyZXJlICYmCisKKwlnaXQgcmVyZXJlIHJlbWFpbmluZyA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisJY29uY2F0X2luc2VydCBzaG9ydCA2LjEgNi4yID5maWxlMS5leHBlY3QgJiYKKwljb25jYXRfaW5zZXJ0IGxvbmcgNi4xIDYuMiA+ZmlsZTIuZXhwZWN0ICYmCisJdGVzdF9jbXAgZmlsZTEuZXhwZWN0IGZpbGUxICYmCisJdGVzdF9jbXAgZmlsZTIuZXhwZWN0IGZpbGUyICYmCisKKwkjIEZvcmdldCByZXNvbHV0aW9uIGZvciBmaWxlMgorCWdpdCByZXJlcmUgZm9yZ2V0IGZpbGUyICYmCisJZWNobyBmaWxlMiA+ZXhwZWN0ICYmCisJZ2l0IHJlcmVyZSBzdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwljb3VudF9wcmVfcG9zdCAyIDEgJiYKKworCSMgZmlsZTIgYWxyZWFkeSBoYXMgY29ycmVjdCByZXNvbHV0aW9uLCBzbyByZWNvcmQgaXQgYWdhaW4KKwlnaXQgcmVyZXJlICYmCisKKwkjIFByZXRlbmQgdGhhdCB0aGUgcmVzb2x1dGlvbnMgYXJlIG9sZCBhZ2FpbgorCXRlc3QtdG9vbCBjaG10aW1lIC0xNzI4MDAgJChmaW5kIC5naXQvcnItY2FjaGUvIC10eXBlIGYpICYmCisKKwkjIFJlc29sdmVkIGVudHJpZXMgaGF2ZSBub3QgZXhwaXJlZCB5ZXQKKwlnaXQgLWMgZ2MucmVyZXJlcmVzb2x2ZWQ9NSAtYyBnYy5yZXJlcmV1bnJlc29sdmVkPTUgcmVyZXJlIGdjICYmCisKKwljb3VudF9wcmVfcG9zdCAyIDIgJiYKKworCSMgUmVzb2x2ZWQgZW50cmllcyBoYXZlIGV4cGlyZWQKKwlnaXQgLWMgZ2MucmVyZXJlcmVzb2x2ZWQ9MSAtYyBnYy5yZXJlcmV1bnJlc29sdmVkPTUgcmVyZXJlIGdjICYmCisJY291bnRfcHJlX3Bvc3QgMCAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZSB3aXRoIHVuZXhwZWN0ZWQgY29uZmxpY3QgbWFya2VycyBkb2VzIG5vdCBjcmFzaCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWdpdCBjaGVja291dCAtYiBicmFuY2gtMSBtYXN0ZXIgJiYKKwllY2hvICJiYXIiID50ZXN0ICYmCisJZ2l0IGFkZCB0ZXN0ICYmCisJZ2l0IGNvbW1pdCAtcSAtbSB0d28gJiYKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoLTIgbWFzdGVyICYmCisJZWNobyAiZm9vIiA+dGVzdCAmJgorCWdpdCBhZGQgdGVzdCAmJgorCWdpdCBjb21taXQgLXEgLWEgLW0gb25lICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoLTEgJiYKKwllY2hvICI8PDw8PDw8IGEiID50ZXN0ICYmCisJZ2l0IHJlcmVyZSAmJgorCisJZ2l0IHJlcmVyZSBjbGVhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgd2l0aCBpbm5lciBjb25mbGljdCBtYXJrZXJzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEEgbWFzdGVyICYmCisJZWNobyAiYmFyIiA+dGVzdCAmJgorCWdpdCBhZGQgdGVzdCAmJgorCWdpdCBjb21taXQgLXEgLW0gdHdvICYmCisJZWNobyAiYmF6IiA+dGVzdCAmJgorCWdpdCBhZGQgdGVzdCAmJgorCWdpdCBjb21taXQgLXEgLW0gdGhyZWUgJiYKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgQiBtYXN0ZXIgJiYKKwllY2hvICJmb28iID50ZXN0ICYmCisJZ2l0IGFkZCB0ZXN0ICYmCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSBvbmUgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBBfiAmJgorCWdpdCBhZGQgdGVzdCAmJgorCWdpdCBjb21taXQgLXEgLW0gIndpbGwgc29sdmUgY29uZmxpY3RzIGxhdGVyIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBBICYmCisKKwllY2hvICJyZXNvbHZlZCIgPnRlc3QgJiYKKwlnaXQgYWRkIHRlc3QgJiYKKwlnaXQgY29tbWl0IC1xIC1tICJzb2x2ZWQgY29uZmxpY3QiICYmCisKKwllY2hvICJyZXNvbHZlZCIgPmV4cGVjdCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfn4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQX4gJiYKKwlnaXQgYWRkIHRlc3QgJiYKKwlnaXQgY29tbWl0IC1xIC1tICJ3aWxsIHNvbHZlIGNvbmZsaWN0cyBsYXRlciIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQSAmJgorCWNhdCB0ZXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgYWRkIHRlc3QgJiYKKwlnaXQgY29tbWl0IC1tICJyZXJlcmUgc29sdmVkIGNvbmZsaWN0IiAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRH4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQSAmJgorCWNhdCB0ZXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNpbXBsZSBzdGFnZSAxIGhhbmRsaW5nJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzdGFnZV8xX2hhbmRsaW5nICYmCisJKAorCQljZCBzdGFnZV8xX2hhbmRsaW5nICYmCisKKwkJdGVzdF9zZXEgMSAxMCA+b3JpZ2luYWwgJiYKKwkJZ2l0IGFkZCBvcmlnaW5hbCAmJgorCQlnaXQgY29tbWl0IC1tIG9yaWdpbmFsICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIEEgbWFzdGVyICYmCisJCWdpdCBtdiBvcmlnaW5hbCBBICYmCisJCWdpdCBjb21taXQgLW0gInJlbmFtZSB0byBBIiAmJgorCisJCWdpdCBjaGVja291dCAtYiBCIG1hc3RlciAmJgorCQlnaXQgbXYgb3JpZ2luYWwgQiAmJgorCQlnaXQgY29tbWl0IC1tICJyZW5hbWUgdG8gQiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc2ltcGxlIHN0YWdlIDEgaGFuZGxpbmcnICcKKwkoCisJCWNkIHN0YWdlXzFfaGFuZGxpbmcgJiYKKworCQlnaXQgY29uZmlnIHJlcmVyZS5lbmFibGVkIHRydWUgJiYKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQl4wCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDEtc2hvcnRsb2cuc2ggYi90L3Q0MjAxLXNob3J0bG9nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQzYTdjZTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjAxLXNob3J0bG9nLnNoCkBAIC0wLDAgKzEsMjE4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHNob3J0bG9nCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfdGljayAmJgorCWVjaG8gMSA+YTEgJiYKKwlnaXQgYWRkIGExICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWNvbW1pdD0kKHByaW50ZiAiJXNcbiIgIlRlc3QiICIiIHwgZ2l0IGNvbW1pdC10cmVlICIkdHJlZSIpICYmCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAiJGNvbW1pdCIgJiYKKworCWVjaG8gMiA+YTEgJiYKKwlnaXQgY29tbWl0IC0tcXVpZXQgLW0gIlRoaXMgaXMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZmlyc3QgbGluZSBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIHNlZSBpZiBpdCBpcyB3cmFwcGVkIGNvcnJlY3RseSIgYTEgJiYKKworCSMgdGVzdCBpZiB0aGUgd3JhcHBpbmcgaXMgc3RpbGwgdmFsaWQKKwkjIHdoZW4gcmVwbGFjaW5nIGFsbCBpcyBieSB0cmVibGUgY2xlZnMuCisJZWNobyAzID5hMSAmJgorCWdpdCBjb21taXQgLS1xdWlldCAtbSAiJCgKKwkJZWNobyAiVGhpcyBpcyBhIHZlcnksIHZlcnkgbG9uZyBmaXJzdCBsaW5lIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gc2VlIGlmIGl0IGlzIHdyYXBwZWQgY29ycmVjdGx5IiB8CisJCXNlZCAicy9pLzEyMzQvZyIgfAorCQl0ciAxMjM0ICJcMzYwXDIzNVwyMDRcMjM2IikiIGExICYmCisKKwkjIG5vdyBmc2NrIHVwIHRoZSB1dGY4CisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIG5vbi11dGYtOCAmJgorCWVjaG8gNCA+YTEgJiYKKwlnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiQoCisJCWVjaG8gIlRoaXMgaXMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZmlyc3QgbGluZSBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIHNlZSBpZiBpdCBpcyB3cmFwcGVkIGNvcnJlY3RseSIgfAorCQlzZWQgInMvaS8xMjM0L2ciIHwKKwkJdHIgMTIzNCAiXDM3MFwyMzVcMjA0XDIzNiIpIiBhMSAmJgorCisJZWNobyA1ID5hMSAmJgorCWdpdCBjb21taXQgLS1xdWlldCAtbSAiYQkJCQkJCQkJMTIJMzQJNTYJNzgiIGExICYmCisKKwllY2hvIDYgPmExICYmCisJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICJDb21taXQgYnkgc29tZW9uZSBlbHNlIiBcCisJCS0tYXV0aG9yPSJTb21lb25lIGVsc2UgPG5vdCFtZT4iIGExICYmCisKKwljYXQgPmV4cGVjdC50ZW1wbGF0ZSA8PC1cRU9GCisJQSBVIFRob3IgKDUpOgorCSAgICAgIFNVQkpFQ1QKKwkgICAgICBTVUJKRUNUCisJICAgICAgU1VCSkVDVAorCSAgICAgIFNVQkpFQ1QKKwkgICAgICBTVUJKRUNUCisKKwlTb21lb25lIGVsc2UgKDEpOgorCSAgICAgIFNVQkpFQ1QKKworCUVPRgorJworCitmdXp6KCkgeworCWZpbGU9JDEgJiYKKwlzZWQgIgorCQkJcy8kT0lEX1JFR0VYL09CSkVDVF9OQU1FL2cKKwkJCXMvJF94MzUvT0JKSUQvZworCQkJcy9eIFx7Nlx9W0NUYV0uKi8gICAgICBTVUJKRUNUL2cKKwkJCXMvXiBcezhcfVteIF0uKi8gICAgICAgIENPTlRJTlVBVElPTi9nCisJCSIgPCIkZmlsZSIgPiIkZmlsZS5mdXp6eSIgJiYKKwlzZWQgIi9DT05USU5VQVRJT04vIGQiIDwiJGZpbGUuZnV6enkiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgb3V0cHV0IGZvcm1hdCcgJworCWdpdCBzaG9ydGxvZyBIRUFEID5sb2cgJiYKKwlmdXp6IGxvZyA+bG9nLnByZWRpY3RhYmxlICYmCisJdGVzdF9jbXAgZXhwZWN0LnRlbXBsYXRlIGxvZy5wcmVkaWN0YWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0dHkgZm9ybWF0JyAnCisJc2VkIHMvU1VCSkVDVC9PQkpFQ1RfTkFNRS8gZXhwZWN0LnRlbXBsYXRlID5leHBlY3QgJiYKKwlnaXQgc2hvcnRsb2cgLS1mb3JtYXQ9IiVIIiBIRUFEID5sb2cgJiYKKwlmdXp6IGxvZyA+bG9nLnByZWRpY3RhYmxlICYmCisJdGVzdF9jbXAgZXhwZWN0IGxvZy5wcmVkaWN0YWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFiYnJldicgJworCXNlZCBzL1NVQkpFQ1QvT0JKSUQvIGV4cGVjdC50ZW1wbGF0ZSA+ZXhwZWN0ICYmCisJZ2l0IHNob3J0bG9nIC0tZm9ybWF0PSIlaCIgLS1hYmJyZXY9MzUgSEVBRCA+bG9nICYmCisJZnV6eiBsb2cgPmxvZy5wcmVkaWN0YWJsZSAmJgorCXRlc3RfY21wIGV4cGVjdCBsb2cucHJlZGljdGFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0cHV0IGZyb20gdXNlci1kZWZpbmVkIGZvcm1hdCBpcyByZS13cmFwcGVkJyAnCisJc2VkICJzL1NVQkpFQ1QvdHdvIGxpbmVzLyIgZXhwZWN0LnRlbXBsYXRlID5leHBlY3QgJiYKKwlnaXQgc2hvcnRsb2cgLS1mb3JtYXQ9InR3byVubGluZXMiIEhFQUQgPmxvZyAmJgorCWZ1enogbG9nID5sb2cucHJlZGljdGFibGUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbG9nLnByZWRpY3RhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdzaG9ydGxvZyB3cmFwcGluZycgJworCWNhdCA+ZXhwZWN0IDw8XEVPRiAmJgorQSBVIFRob3IgKDUpOgorICAgICAgVGVzdAorICAgICAgVGhpcyBpcyBhIHZlcnksIHZlcnkgbG9uZyBmaXJzdCBsaW5lIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gc2VlIGlmCisgICAgICAgICBpdCBpcyB3cmFwcGVkIGNvcnJlY3RseQorICAgICAgVGjwnYSecyDwnYSecyBhIHZlcnksIHZlcnkgbG9uZyBm8J2EnnJzdCBs8J2Enm5lIGZvciB0aGUgY29tbfCdhJ50IG1lc3NhZ2UgdG8gc2VlIPCdhJ5mCisgICAgICAgICDwnYSedCDwnYSecyB3cmFwcGVkIGNvcnJlY3RseQorICAgICAgVGj4nYSecyD4nYSecyBhIHZlcnksIHZlcnkgbG9uZyBm+J2EnnJzdCBs+J2Enm5lIGZvciB0aGUgY29tbfidhJ50CisgICAgICAgICBtZXNzYWdlIHRvIHNlZSD4nYSeZiD4nYSedCD4nYSecyB3cmFwcGVkIGNvcnJlY3RseQorICAgICAgYQkJCQkJCQkJMTIJMzQKKyAgICAgICAgIDU2CTc4CisKK1NvbWVvbmUgZWxzZSAoMSk6CisgICAgICBDb21taXQgYnkgc29tZW9uZSBlbHNlCisKK0VPRgorCWdpdCBzaG9ydGxvZyAtdyBIRUFEID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdzaG9ydGxvZyBmcm9tIG5vbi1naXQgZGlyZWN0b3J5JyAnCisJZ2l0IGxvZyAtLW5vLWV4cGFuZC10YWJzIEhFQUQgPmxvZyAmJgorCUdJVF9ESVI9bm9uLWV4aXN0aW5nIGdpdCBzaG9ydGxvZyAtdyA8bG9nID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdzaG9ydGxvZyBjYW4gcmVhZCAtLWZvcm1hdD1yYXcgb3V0cHV0JyAnCisJZ2l0IGxvZyAtLWZvcm1hdD1yYXcgSEVBRCA+bG9nICYmCisJR0lUX0RJUj1ub24tZXhpc3RpbmcgZ2l0IHNob3J0bG9nIC13IDxsb2cgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnRsb2cgZnJvbSBub24tZ2l0IGRpcmVjdG9yeSByZWZ1c2VzIGV4dHJhIGFyZ3VtZW50cycgJworCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfRElSPW5vbi1leGlzdGluZyBnaXQgc2hvcnRsb2cgZm9vIDI+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAidG9vIG1hbnkgYXJndW1lbnRzIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnRsb2cgc2hvdWxkIGFkZCBuZXdsaW5lIHdoZW4gaW5wdXQgbGluZSBtYXRjaGVzIHdyYXBsZW4nICcKKwljYXQgPmV4cGVjdCA8PFxFT0YgJiYKK0EgVSBUaG9yICgyKToKKyAgICAgIGJiYmJiYmJiYmJiYmJiYmJiYjogYmJiYmJiYmIgYmJiIGJiYmIgYmJiYmJiYiBiYiBiYmJiIGJiYiBiYmJiYiBiYmJiYmIKKyAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWE6IGFhYWFhYSBhYWFhYWFhYWFhIGFhYWEgYWFhYWFhYWEgYWEgYWFhYSBhYSBhYWEKKworRU9GCisJZ2l0IHNob3J0bG9nIC13ID5vdXQgPDxcRU9GICYmCitjb21taXQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTQ6MTMgMjAwNSAtMDcwMAorCisgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYTogYWFhYWFhIGFhYWFhYWFhYWEgYWFhYSBhYWFhYWFhYSBhYSBhYWFhIGFhIGFhYQorCitjb21taXQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTQ6MTMgMjAwNSAtMDcwMAorCisgICAgYmJiYmJiYmJiYmJiYmJiYmJiOiBiYmJiYmJiYiBiYmIgYmJiYiBiYmJiYmJiIGJiIGJiYmIgYmJiIGJiYmJiIGJiYmJiYgorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0CisnCisKK2ljb252ZnJvbXV0Zjh0b2lzbzg4NTkxKCkgeworCXByaW50ZiAiJXMiICIkKiIgfCBpY29udiAtZiBVVEYtOCAtdCBJU084ODU5LTEKK30KKworRFNDSE89IkrDtmjDpG5uw6tzIFwiRHNjaMO2XCIgU2NoaW5kw6tsaW4iCitEU0NIT0U9IiREU0NITyA8Sm9oYW5uZXMuU2NoaW5kZWxpbkBnbXguZGU+IgorTVNHMT0ic2V0IGExIHRvIDIgYW5kIHNvbWUgbm9uLUFTQ0lJIGNoYXJzOiDDhMOfw7giCitNU0cyPSJzZXQgYTEgdG8gMyBhbmQgc29tZSBub24tQVNDSUkgY2hhcnM6IMOhw6bDryIKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyREU0NITyAoMik6CisgICAgICAkTVNHMQorICAgICAgJE1TRzIKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdzaG9ydGxvZyBlbmNvZGluZycgJworCWdpdCByZXNldCAtLWhhcmQgIiRjb21taXQiICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwllY2hvIDIgPiBhMSAmJgorCWdpdCBjb21taXQgLS1xdWlldCAtbSAiJE1TRzEiIC0tYXV0aG9yPSIkRFNDSE9FIiBhMSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAiSVNPODg1OS0xIiAmJgorCWVjaG8gMyA+IGExICYmCisJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICIkKGljb252ZnJvbXV0Zjh0b2lzbzg4NTkxICIkTVNHMiIpIiBcCisJCS0tYXV0aG9yPSIkKGljb252ZnJvbXV0Zjh0b2lzbzg4NTkxICIkRFNDSE9FIikiIGExICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwlnaXQgc2hvcnRsb2cgSEVBRH4yLi4gPiBvdXQgJiYKK3Rlc3RfY21wIGV4cGVjdCBvdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0bG9nIHdpdGggcmV2aXNpb24gcHNldWRvIG9wdGlvbnMnICcKKwlnaXQgc2hvcnRsb2cgLS1hbGwgJiYKKwlnaXQgc2hvcnRsb2cgLS1icmFuY2hlcyAmJgorCWdpdCBzaG9ydGxvZyAtLWV4Y2x1ZGU9cmVmcy9oZWFkcy9tKiAtLWFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyB3aXRoIC0tb3V0cHV0PTxmaWxlPicgJworCWdpdCBzaG9ydGxvZyAtLW91dHB1dD1zaG9ydGxvZyAtMSBtYXN0ZXIgPm91dHB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIHNob3J0bG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0bG9nIC0tY29tbWl0dGVyIChpbnRlcm5hbCknICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gc2lkZSAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBvbmUgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdHdvICYmCisJR0lUX0NPTU1JVFRFUl9OQU1FPSJTaW4gTm9tYnJlIiBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdGhyZWUgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgICAgIDIJQyBPIE1pdHRlcgorCSAgICAgMQlTaW4gTm9tYnJlCisJRU9GCisJZ2l0IHNob3J0bG9nIC1uc2MgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyAtLWNvbW1pdHRlciAoZXh0ZXJuYWwpJyAnCisJZ2l0IGxvZyAtLWZvcm1hdD1mdWxsIHwgZ2l0IHNob3J0bG9nIC1uc2MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjAyLWxvZy5zaCBiL3QvdDQyMDItbG9nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxZWE3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjAyLWxvZy5zaApAQCAtMCwwICsxLDE5MDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbG9nJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItZ3BnLnNoIgorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi10ZXJtaW5hbC5zaCIKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItbG9nLWdyYXBoLnNoIgorCit0ZXN0X2NtcF9ncmFwaCAoKSB7CisJbGliX3Rlc3RfY21wX2dyYXBoIC0tZm9ybWF0PSVzICIkQCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwllY2hvIG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCWVjaG8gaWNoaSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCisJZ2l0IG12IG9uZSBpY2hpICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCisJY3AgaWNoaSBlaW4gJiYKKwlnaXQgYWRkIGVpbiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZm91cnRoICYmCisKKwlta2RpciBhICYmCisJZWNobyBuaSA+YS90d28gJiYKKwlnaXQgYWRkIGEvdHdvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBmaWZ0aCAgJiYKKworCWdpdCBybSBhL3R3byAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2l4dGgKKworJworCitwcmludGYgInNpeHRoXG5maWZ0aFxuZm91cnRoXG50aGlyZFxuc2Vjb25kXG5pbml0aWFsIiA+IGV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldHR5JyAnCisKKwlnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JXMiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitwcmludGYgInNpeHRoXG5maWZ0aFxuZm91cnRoXG50aGlyZFxuc2Vjb25kXG5pbml0aWFsXG4iID4gZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0dHkgKHRmb3JtYXQpJyAnCisKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldHR5IChzaG9ydGN1dCknICcKKworCWdpdCBsb2cgLS1wcmV0dHk9IiVzIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0JyAnCisKKwlnaXQgbG9nIC0tZm9ybWF0PSIlcyIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyBUaGlzIGlzCisgIHRoZSBzaXh0aAorICBjb21taXQuCisgVGhpcyBpcworICB0aGUgZmlmdGgKKyAgY29tbWl0LgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdCAldygxMSwxLDIpJyAnCisKKwlnaXQgbG9nIC0yIC0tZm9ybWF0PSIldygxMSwxLDIpVGhpcyBpcyB0aGUgJXMgY29tbWl0LiIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdCAldygsMSwyKScgJworCisJZ2l0IGxvZyAtMiAtLWZvcm1hdD0iJXcoLDEsMilUaGlzIGlzJW50aGUgJXMlbmNvbW1pdC4iID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCiskKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L3NpeHRoICApIHNpeHRoCiskKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L2ZpZnRoICApIGZpZnRoCiskKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L2ZvdXJ0aCApIGZvdXJ0aAorJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi90aGlyZCAgKSB0aGlyZAorJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi9zZWNvbmQgKSBzZWNvbmQKKyQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IDovaW5pdGlhbCkgaW5pdGlhbAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmVsaW5lJyAnCisKKwlnaXQgbG9nIC0tb25lbGluZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWx0ZXI9QScgJworCisJZ2l0IGxvZyAtLW5vLXJlbmFtZXMgLS1wcmV0dHk9ImZvcm1hdDolcyIgLS1kaWZmLWZpbHRlcj1BIEhFQUQgPiBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tbm8tcmVuYW1lcyAtLXByZXR0eT0iZm9ybWF0OiVzIiAtLWRpZmYtZmlsdGVyIEEgSEVBRCA+IGFjdHVhbC1zZXBhcmF0ZSAmJgorCXByaW50ZiAiZmlmdGhcbmZvdXJ0aFxudGhpcmRcbmluaXRpYWwiID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwtc2VwYXJhdGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbHRlcj1NJyAnCisKKwlhY3R1YWw9JChnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JXMiIC0tZGlmZi1maWx0ZXI9TSBIRUFEKSAmJgorCWV4cGVjdD0kKGVjaG8gc2Vjb25kKSAmJgorCXZlcmJvc2UgdGVzdCAiJGFjdHVhbCIgPSAiJGV4cGVjdCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbHRlcj1EJyAnCisKKwlhY3R1YWw9JChnaXQgbG9nIC0tbm8tcmVuYW1lcyAtLXByZXR0eT0iZm9ybWF0OiVzIiAtLWRpZmYtZmlsdGVyPUQgSEVBRCkgJiYKKwlleHBlY3Q9JChlY2hvIHNpeHRoIDsgZWNobyB0aGlyZCkgJiYKKwl2ZXJib3NlIHRlc3QgIiRhY3R1YWwiID0gIiRleHBlY3QiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWx0ZXI9UicgJworCisJYWN0dWFsPSQoZ2l0IGxvZyAtTSAtLXByZXR0eT0iZm9ybWF0OiVzIiAtLWRpZmYtZmlsdGVyPVIgSEVBRCkgJiYKKwlleHBlY3Q9JChlY2hvIHRoaXJkKSAmJgorCXZlcmJvc2UgdGVzdCAiJGFjdHVhbCIgPSAiJGV4cGVjdCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbHRlcj1DJyAnCisKKwlhY3R1YWw9JChnaXQgbG9nIC1DIC1DIC0tcHJldHR5PSJmb3JtYXQ6JXMiIC0tZGlmZi1maWx0ZXI9QyBIRUFEKSAmJgorCWV4cGVjdD0kKGVjaG8gZm91cnRoKSAmJgorCXZlcmJvc2UgdGVzdCAiJGFjdHVhbCIgPSAiJGV4cGVjdCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tZm9sbG93JyAnCisKKwlhY3R1YWw9JChnaXQgbG9nIC0tZm9sbG93IC0tcHJldHR5PSJmb3JtYXQ6JXMiIGljaGkpICYmCisJZXhwZWN0PSQoZWNobyB0aGlyZCA7IGVjaG8gc2Vjb25kIDsgZWNobyBpbml0aWFsKSAmJgorCXZlcmJvc2UgdGVzdCAiJGFjdHVhbCIgPSAiJGV4cGVjdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbmZpZyBsb2cuZm9sbG93IHdvcmtzIGxpa2UgLS1mb2xsb3cnICcKKwl0ZXN0X2NvbmZpZyBsb2cuZm9sbG93IHRydWUgJiYKKwlhY3R1YWw9JChnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JXMiIGljaGkpICYmCisJZXhwZWN0PSQoZWNobyB0aGlyZCA7IGVjaG8gc2Vjb25kIDsgZWNobyBpbml0aWFsKSAmJgorCXZlcmJvc2UgdGVzdCAiJGFjdHVhbCIgPSAiJGV4cGVjdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbmZpZyBsb2cuZm9sbG93IGRvZXMgbm90IGRpZSB3aXRoIG11bHRpcGxlIHBhdGhzJyAnCisJdGVzdF9jb25maWcgbG9nLmZvbGxvdyB0cnVlICYmCisJZ2l0IGxvZyAtLXByZXR0eT0iZm9ybWF0OiVzIiBpY2hpIGVpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29uZmlnIGxvZy5mb2xsb3cgZG9lcyBub3QgZGllIHdpdGggbm8gcGF0aHMnICcKKwl0ZXN0X2NvbmZpZyBsb2cuZm9sbG93IHRydWUgJiYKKwlnaXQgbG9nIC0tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb25maWcgbG9nLmZvbGxvdyBpcyBvdmVycmlkZGVuIGJ5IC0tbm8tZm9sbG93JyAnCisJdGVzdF9jb25maWcgbG9nLmZvbGxvdyB0cnVlICYmCisJYWN0dWFsPSQoZ2l0IGxvZyAtLW5vLWZvbGxvdyAtLXByZXR0eT0iZm9ybWF0OiVzIiBpY2hpKSAmJgorCWV4cGVjdD0idGhpcmQiICYmCisJdmVyYm9zZSB0ZXN0ICIkYWN0dWFsIiA9ICIkZXhwZWN0IgorJworCisjIE5vdGUgdGhhdCB0aGVzZSBjb21taXRzIGFyZSBpbnRlbnRpb25hbGx5IGxpc3RlZCBvdXQgb2Ygb3JkZXIuCitsYXN0X3RocmVlPSIkKGdpdCByZXYtcGFyc2UgOi9mb3VydGggOi9zaXh0aCA6L2ZpZnRoKSIKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IDovc2l4dGggKSBzaXh0aAorJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi9maWZ0aCApIGZpZnRoCiskKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L2ZvdXJ0aCkgZm91cnRoCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1uby13YWxrIDxjb21taXRzPiBzb3J0cyBieSBjb21taXQgdGltZScgJworCWdpdCBsb2cgLS1uby13YWxrIC0tb25lbGluZSAkbGFzdF90aHJlZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLW5vLXdhbGs9c29ydGVkIDxjb21taXRzPiBzb3J0cyBieSBjb21taXQgdGltZScgJworCWdpdCBsb2cgLS1uby13YWxrPXNvcnRlZCAtLW9uZWxpbmUgJGxhc3RfdGhyZWUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKz09PSAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L3NpeHRoICkgc2l4dGgKKz09PSAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L2ZpZnRoICkgZmlmdGgKKz09PSAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L2ZvdXJ0aCkgZm91cnRoCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1saW5lLXByZWZpeD0iPT09ICIgLS1uby13YWxrIDxjb21taXRzPiBzb3J0cyBieSBjb21taXQgdGltZScgJworCWdpdCBsb2cgLS1saW5lLXByZWZpeD0iPT09ICIgLS1uby13YWxrIC0tb25lbGluZSAkbGFzdF90aHJlZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi9mb3VydGgpIGZvdXJ0aAorJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi9zaXh0aCApIHNpeHRoCiskKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L2ZpZnRoICkgZmlmdGgKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLW5vLXdhbGs9dW5zb3J0ZWQgPGNvbW1pdHM+IGxlYXZlcyBsaXN0IG9mIGNvbW1pdHMgYXMgZ2l2ZW4nICcKKwlnaXQgbG9nIC0tbm8td2Fsaz11bnNvcnRlZCAtLW9uZWxpbmUgJGxhc3RfdGhyZWUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG93IDxjb21taXRzPiBsZWF2ZXMgbGlzdCBvZiBjb21taXRzIGFzIGdpdmVuJyAnCisJZ2l0IHNob3cgLS1vbmVsaW5lIC1zICRsYXN0X3RocmVlID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjYXNlIHNlbnNpdGl2aXR5IHRlc3RzJyAnCisJZWNobyBjYXNlID5vbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWdpdCBjb21taXQgLWEgLW0gU2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyZXAnICcKKwllY2hvIHNlY29uZCA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLXByZXR0eT0idGZvcm1hdDolcyIgLS1ncmVwPXNlYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitzZWNvbmQKK2luaXRpYWwKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0taW52ZXJ0LWdyZXAgLS1ncmVwJyAnCisJIyBGaXhlZAorCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPWZpeGVkIGxvZyAtLXByZXR0eT0idGZvcm1hdDolcyIgLS1pbnZlcnQtZ3JlcCAtLWdyZXA9dGggLS1ncmVwPVNlYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBQT1NJWCBiYXNpYworCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPWJhc2ljIGxvZyAtLXByZXR0eT0idGZvcm1hdDolcyIgLS1pbnZlcnQtZ3JlcCAtLWdyZXA9dFtoXSAtLWdyZXA9U1tlXWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgUE9TSVggZXh0ZW5kZWQKKwlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0taW52ZXJ0LWdyZXAgLS1ncmVwPXRbaF0gLS1ncmVwPVNbZV1jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFBDUkUKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFBDUkUKKwl0aGVuCisJCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPXBlcmwgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiAtLWludmVydC1ncmVwIC0tZ3JlcD10W2hdIC0tZ3JlcD1TW2VdYyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1pbnZlcnQtZ3JlcCAtLWdyZXAgLWknICcKKwllY2hvIGluaXRpYWwgPmV4cGVjdCAmJgorCisJIyBGaXhlZAorCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPWZpeGVkIGxvZyAtLXByZXR0eT0idGZvcm1hdDolcyIgLS1pbnZlcnQtZ3JlcCAtaSAtLWdyZXA9dGggLS1ncmVwPVNlYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBQT1NJWCBiYXNpYworCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPWJhc2ljIGxvZyAtLXByZXR0eT0idGZvcm1hdDolcyIgLS1pbnZlcnQtZ3JlcCAtaSAtLWdyZXA9dFtoXSAtLWdyZXA9U1tlXWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgUE9TSVggZXh0ZW5kZWQKKwlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1leHRlbmRlZCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0taW52ZXJ0LWdyZXAgLWkgLS1ncmVwPXRbaF0gLS1ncmVwPVNbZV1jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFBDUkUKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFBDUkUKKwl0aGVuCisJCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPXBlcmwgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiAtLWludmVydC1ncmVwIC1pIC0tZ3JlcD10W2hdIC0tZ3JlcD1TW2VdYyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmVwIG9wdGlvbiBwYXJzaW5nJyAnCisJZWNobyBzZWNvbmQgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0tZ3JlcCBzZWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC0xIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiAtLWdyZXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1pIC0tZ3JlcCcgJworCWVjaG8gU2Vjb25kID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiAtaSAtLWdyZXA9c2VjID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyZXAgLWknICcKKwllY2hvIFNlY29uZCA+ZXhwZWN0ICYmCisKKwkjIEZpeGVkCisJZ2l0IGxvZyAtMSAtLXByZXR0eT0idGZvcm1hdDolcyIgLS1ncmVwPXNlYyAtaSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBQT1NJWCBiYXNpYworCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPWJhc2ljIGxvZyAtMSAtLXByZXR0eT0idGZvcm1hdDolcyIgLS1ncmVwPXNbZV1jIC1pID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFBPU0lYIGV4dGVuZGVkCisJZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQgbG9nIC0xIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiAtLWdyZXA9c1tlXWMgLWkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgUENSRQorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgUENSRQorCXRoZW4KKwkJZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9cGVybCBsb2cgLTEgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0tZ3JlcD1zW2VdYyAtaSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLUYgLUUgLS1ncmVwPTxlcmU+IHVzZXMgZXJlJyAnCisJZWNobyBzZWNvbmQgPmV4cGVjdCAmJgorCSMgYmFzaWMgd291bGQgbmVlZCBcKHNcKSB0byBkbyB0aGUgc2FtZQorCWdpdCBsb2cgLTEgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC1GIC1FIC0tZ3JlcD0iKHMpLmMubmQiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUENSRSAnbG9nIC1GIC1FIC0tcGVybC1yZWdleHAgLS1ncmVwPTxwY3JlPiB1c2VzIFBDUkUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBudW1fY29tbWl0cyIgJiYKKwlnaXQgaW5pdCBudW1fY29tbWl0cyAmJgorCSgKKwkJY2QgbnVtX2NvbW1pdHMgJiYKKwkJdGVzdF9jb21taXQgMWQgJiYKKwkJdGVzdF9jb21taXQgMmUKKwkpICYmCisKKwkjIEluIFBDUkUgXGQgaW4gW1xkXSBpcyBsaWtlIHNheWluZyAiMC05IiwgYW5kIG1hdGNoZXMgdGhlIDIKKwkjIGluIDJlLi4uCisJZWNobyAyZSA+ZXhwZWN0ICYmCisJZ2l0IC1DIG51bV9jb21taXRzIGxvZyAtMSAtLXByZXR0eT0idGZvcm1hdDolcyIgLUYgLUUgLS1wZXJsLXJlZ2V4cCAtLWdyZXA9IltcZF0iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIC4uLmluIFBPU0lYIGJhc2ljIGFuZCBleHRlbmRlZCBpdCBpcyB0aGUgc2FtZSBhcyBbZF0sCisJIyBpLmUuICJkIiwgd2hpY2ggbWF0Y2hlcyAxZCwgYnV0IGRvZXMgbm90IG1hdGNoIDJlLgorCWVjaG8gMWQgPmV4cGVjdCAmJgorCWdpdCAtQyBudW1fY29tbWl0cyBsb2cgLTEgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC1GIC1FIC0tZ3JlcD0iW1xkXSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZSBjb25maWd1cmF0aW9uJyAnCisJZ2l0IC1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCWxvZyAtMSAtLXByZXR0eT10Zm9ybWF0OiVzIC0tZ3JlcD1zLmMubmQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZSBjb25maWd1cmF0aW9uIGFuZCBjb21tYW5kIGxpbmUnICcKKwllY2hvIHNlY29uZCA+ZXhwZWN0ICYmCisJZ2l0IC1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCWxvZyAtMSAtLXByZXR0eT10Zm9ybWF0OiVzIC0tYmFzaWMtcmVnZXhwIC0tZ3JlcD1zLmMubmQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhRkFJTF9QUkVSRVFTICdsb2cgd2l0aCB2YXJpb3VzIGdyZXAucGF0dGVyblR5cGUgY29uZmlndXJhdGlvbnMgJiBjb21tYW5kLWxpbmVzJyAnCisJZ2l0IGluaXQgcGF0dGVybi10eXBlICYmCisJKAorCQljZCBwYXR0ZXJuLXR5cGUgJiYKKwkJdGVzdF9jb21taXQgMSBmaWxlIEEgJiYKKworCQkjIFRoZSB0YWduYW1lIGlzIG92ZXJyaWRkZW4gaGVyZSBiZWNhdXNlIGNyZWF0aW5nIGEKKwkJIyB0YWcgY2FsbGVkICIoMXwyKSIgYXMgdGVzdF9jb21taXQgd291bGQgb3RoZXJ3aXNlCisJCSMgaW1wbGljaXRseSBkbyB3b3VsZCBmYWlsIG9uIGUuZy4gTUlOR1cuCisJCXRlc3RfY29tbWl0ICIoMXwyKSIgZmlsZSBCIDIgJiYKKworCQllY2hvICIoMXwyKSIgPmV4cGVjdC5maXhlZCAmJgorCQljcCBleHBlY3QuZml4ZWQgZXhwZWN0LmJhc2ljICYmCisJCWNwIGV4cGVjdC5maXhlZCBleHBlY3QuZXh0ZW5kZWQgJiYKKwkJY3AgZXhwZWN0LmZpeGVkIGV4cGVjdC5wZXJsICYmCisKKwkJIyBBIHN0cmNtcC1saWtlIG1hdGNoIHdpdGggZml4ZWQuCisJCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPWZpeGVkIGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIFwKKwkJCS0tZ3JlcD0iKDF8MikiID5hY3R1YWwuZml4ZWQgJiYKKworCQkjIFBPU0lYIGJhc2ljIG1hdGNoZXMgKCwgfCBhbmQgKSBsaXRlcmFsbHkuCisJCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPWJhc2ljIGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIFwKKwkJCS0tZ3JlcD0iKC58LikiID5hY3R1YWwuYmFzaWMgJiYKKworCQkjIFBPU0lYIGV4dGVuZGVkIG5lZWRzIHRvIGhhdmUgfCBlc2NhcGVkIHRvIG1hdGNoIGl0CisJCSMgbGl0ZXJhbGx5LCB3aGVyZWFzIHVuZGVyIGJhc2ljIHRoaXMgaXMgdGhlIHNhbWUgYXMKKwkJIyAofDIpLCBpLmUuIGl0IHdvdWxkIGFsc28gbWF0Y2ggIjEiLiBUaGlzIHRlc3QgY2hlY2tzCisJCSMgZm9yIGV4dGVuZGVkIGJ5IGFzc2VydGluZyB0aGF0IGl0IGlzIG5vdCBtYXRjaGluZworCQkjIHdoYXQgYmFzaWMgd291bGQgbWF0Y2guCisJCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPWV4dGVuZGVkIGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIFwKKwkJCS0tZ3JlcD0iXHwyIiA+YWN0dWFsLmV4dGVuZGVkICYmCisJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgUENSRQorCQl0aGVuCisJCQkjIE9ubHkgUENSRSB3b3VsZCBtYXRjaCBbXGRdXHwgd2l0aCBvbmx5CisJCQkjICIoMXwyKSIgZHVlIHRvIFtcZF0uIFBPU0lYIGJhc2ljIHdvdWxkIG1hdGNoCisJCQkjIGJvdGggaXQgYW5kICIxIiBzaW5jZSBzaW1pbGFybHkgdG8gdGhlCisJCQkjIGV4dGVuZGVkIG1hdGNoIGFib3ZlIGl0IGlzIHRoZSBzYW1lIGFzCisJCQkjIFwoW1xkXVx8XCkuIFBPU0lYIGV4dGVuZGVkIHdvdWxkCisJCQkjIG1hdGNoIG5laXRoZXIuCisJCQlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1wZXJsIGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIFwKKwkJCQktLWdyZXA9IltcZF1cfCIgPmFjdHVhbC5wZXJsICYmCisJCQl0ZXN0X2NtcCBleHBlY3QucGVybCBhY3R1YWwucGVybAorCQlmaSAmJgorCQl0ZXN0X2NtcCBleHBlY3QuZml4ZWQgYWN0dWFsLmZpeGVkICYmCisJCXRlc3RfY21wIGV4cGVjdC5iYXNpYyBhY3R1YWwuYmFzaWMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LmV4dGVuZGVkIGFjdHVhbC5leHRlbmRlZCAmJgorCisJCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyAtRiBcCisJCQktLWdyZXA9IigxfDIpIiA+YWN0dWFsLmZpeGVkLnNob3J0LWFyZyAmJgorCQlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6JXMgLUUgXAorCQkJLS1ncmVwPSJcfDIiID5hY3R1YWwuZXh0ZW5kZWQuc2hvcnQtYXJnICYmCisJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgUENSRQorCQl0aGVuCisJCQlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6JXMgLVAgXAorCQkJCS0tZ3JlcD0iW1xkXVx8IiA+YWN0dWFsLnBlcmwuc2hvcnQtYXJnCisJCWVsc2UKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLVAgXAorCQkJCS0tZ3JlcD0iW1xkXVx8IgorCQlmaSAmJgorCQl0ZXN0X2NtcCBleHBlY3QuZml4ZWQgYWN0dWFsLmZpeGVkLnNob3J0LWFyZyAmJgorCQl0ZXN0X2NtcCBleHBlY3QuZXh0ZW5kZWQgYWN0dWFsLmV4dGVuZGVkLnNob3J0LWFyZyAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxIFBDUkUKKwkJdGhlbgorCQkJdGVzdF9jbXAgZXhwZWN0LnBlcmwgYWN0dWFsLnBlcmwuc2hvcnQtYXJnCisJCWZpICYmCisKKwkJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIC0tZml4ZWQtc3RyaW5ncyBcCisJCQktLWdyZXA9IigxfDIpIiA+YWN0dWFsLmZpeGVkLmxvbmctYXJnICYmCisJCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyAtLWJhc2ljLXJlZ2V4cCBcCisJCQktLWdyZXA9IigufC4pIiA+YWN0dWFsLmJhc2ljLmxvbmctYXJnICYmCisJCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyAtLWV4dGVuZGVkLXJlZ2V4cCBcCisJCQktLWdyZXA9Ilx8MiIgPmFjdHVhbC5leHRlbmRlZC5sb25nLWFyZyAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxIFBDUkUKKwkJdGhlbgorCQkJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIC0tcGVybC1yZWdleHAgXAorCQkJCS0tZ3JlcD0iW1xkXVx8IiA+YWN0dWFsLnBlcmwubG9uZy1hcmcgJiYKKwkJCXRlc3RfY21wIGV4cGVjdC5wZXJsIGFjdHVhbC5wZXJsLmxvbmctYXJnCisJCWVsc2UKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLS1wZXJsLXJlZ2V4cCBcCisJCQkJLS1ncmVwPSJbXGRdXHwiCisJCWZpICYmCisJCXRlc3RfY21wIGV4cGVjdC5maXhlZCBhY3R1YWwuZml4ZWQubG9uZy1hcmcgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LmJhc2ljIGFjdHVhbC5iYXNpYy5sb25nLWFyZyAmJgorCQl0ZXN0X2NtcCBleHBlY3QuZXh0ZW5kZWQgYWN0dWFsLmV4dGVuZGVkLmxvbmctYXJnCisJKQorJworCitjYXQgPiBleHBlY3QgPDxFT0YKKyogU2Vjb25kCisqIHNpeHRoCisqIGZpZnRoCisqIGZvdXJ0aAorKiB0aGlyZAorKiBzZWNvbmQKKyogaW5pdGlhbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBsb2cgLS1ncmFwaCcgJworCXRlc3RfY21wX2dyYXBoCisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorMTIzICogU2Vjb25kCisxMjMgKiBzaXh0aAorMTIzICogZmlmdGgKKzEyMyAqIGZvdXJ0aAorMTIzICogdGhpcmQKKzEyMyAqIHNlY29uZAorMTIzICogaW5pdGlhbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBsb2cgLS1ncmFwaCAtLWxpbmUtcHJlZml4PSIxMjMgIicgJworCXRlc3RfY21wX2dyYXBoIC0tbGluZS1wcmVmaXg9IjEyMyAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBtZXJnZSBoaXN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRH40ICYmCisJdGVzdF9jb21taXQgc2lkZS0xIDEgMSAmJgorCXRlc3RfY29tbWl0IHNpZGUtMiAyIDIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIHNpZGUKKycKKworY2F0ID4gZXhwZWN0IDw8XEVPRgorKiAgIE1lcmdlIGJyYW5jaCAnc2lkZScKK3xcCit8ICogc2lkZS0yCit8ICogc2lkZS0xCisqIHwgU2Vjb25kCisqIHwgc2l4dGgKKyogfCBmaWZ0aAorKiB8IGZvdXJ0aAorfC8KKyogdGhpcmQKKyogc2Vjb25kCisqIGluaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG1lcmdlJyAnCisJdGVzdF9jbXBfZ3JhcGggLS1kYXRlLW9yZGVyCisnCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKK3wgfCB8ICogICBNZXJnZSBicmFuY2ggJ3NpZGUnCit8IHwgfCB8XAorfCB8IHwgfCAqIHNpZGUtMgorfCB8IHwgfCAqIHNpZGUtMQorfCB8IHwgKiB8IFNlY29uZAorfCB8IHwgKiB8IHNpeHRoCit8IHwgfCAqIHwgZmlmdGgKK3wgfCB8ICogfCBmb3VydGgKK3wgfCB8IHwvCit8IHwgfCAqIHRoaXJkCit8IHwgfCAqIHNlY29uZAorfCB8IHwgKiBpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggLS1saW5lLXByZWZpeD0ifCB8IHwgIiB3aXRoIG1lcmdlJyAnCisJdGVzdF9jbXBfZ3JhcGggLS1saW5lLXByZWZpeD0ifCB8IHwgIiAtLWRhdGUtb3JkZXIKKycKKworY2F0ID4gZXhwZWN0LmNvbG9ycyA8PFxFT0YKKyogICBNZXJnZSBicmFuY2ggJ3NpZGUnCis8QkxVRT58PFJFU0VUPjxDWUFOPlw8UkVTRVQ+Cis8QkxVRT58PFJFU0VUPiAqIHNpZGUtMgorPEJMVUU+fDxSRVNFVD4gKiBzaWRlLTEKKyogPENZQU4+fDxSRVNFVD4gU2Vjb25kCisqIDxDWUFOPnw8UkVTRVQ+IHNpeHRoCisqIDxDWUFOPnw8UkVTRVQ+IGZpZnRoCisqIDxDWUFOPnw8UkVTRVQ+IGZvdXJ0aAorPENZQU4+fDxSRVNFVD48Q1lBTj4vPFJFU0VUPgorKiB0aGlyZAorKiBzZWNvbmQKKyogaW5pdGlhbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggbWVyZ2Ugd2l0aCBsb2cuZ3JhcGhDb2xvcnMnICcKKwl0ZXN0X2NvbmZpZyBsb2cuZ3JhcGhDb2xvcnMgIiBibHVlLGludmFsaWQtY29sb3IsIGN5YW4sIHJlZCAgLCAiICYmCisJbGliX3Rlc3RfY21wX2NvbG9yZWRfZ3JhcGggLS1kYXRlLW9yZGVyIC0tZm9ybWF0PSVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLXJhdyAtLWdyYXBoIC1tIHdpdGggbWVyZ2UnICcKKwlnaXQgbG9nIC0tcmF3IC0tZ3JhcGggLS1vbmVsaW5lIC1tIG1hc3RlciB8IGhlYWQgLW4gNTAwID5hY3R1YWwgJiYKKwlncmVwICJpbml0aWFsIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIC0tZ3JhcGgnICcKKwlnaXQgZGlmZi10cmVlIC0tZ3JhcGggbWFzdGVyXiB8IGhlYWQgLW4gNTAwID5hY3R1YWwgJiYKKwlncmVwICJvbmUiIGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDxcRU9GCisqICAgY29tbWl0IG1hc3RlcgorfFwgIE1lcmdlOiBBIEIKK3wgfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwKK3wgfCAgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworfCB8Cit8ICogY29tbWl0IHRhZ3Mvc2lkZS0yCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIHNpZGUtMgorfCB8Cit8ICogY29tbWl0IHRhZ3Mvc2lkZS0xCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIHNpZGUtMQorfCB8CisqIHwgY29tbWl0IG1hc3Rlcn4xCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIFNlY29uZAorfCB8CisqIHwgY29tbWl0IG1hc3Rlcn4yCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIHNpeHRoCit8IHwKKyogfCBjb21taXQgbWFzdGVyfjMKK3wgfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwKK3wgfCAgICAgZmlmdGgKK3wgfAorKiB8IGNvbW1pdCBtYXN0ZXJ+NAorfC8gIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wKK3wgICAgICAgZm91cnRoCit8CisqIGNvbW1pdCB0YWdzL3NpZGUtMX4xCit8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wKK3wgICAgIHRoaXJkCit8CisqIGNvbW1pdCB0YWdzL3NpZGUtMX4yCit8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wKK3wgICAgIHNlY29uZAorfAorKiBjb21taXQgdGFncy9zaWRlLTF+MworICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisKKyAgICAgIGluaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIGZ1bGwgb3V0cHV0JyAnCisJZ2l0IGxvZyAtLWdyYXBoIC0tZGF0ZS1vcmRlciAtLXByZXR0eT1zaG9ydCB8CisJCWdpdCBuYW1lLXJldiAtLW5hbWUtb25seSAtLXN0ZGluIHwKKwkJc2VkICJzL01lcmdlOi4qL01lcmdlOiBBIEIvO3MvICpcJC8vIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgbW9yZSB0YW5nbGVkIGhpc3RvcnknICcKKwlnaXQgY2hlY2tvdXQgLWIgdGFuZ2xlIEhFQUR+NiAmJgorCXRlc3RfY29tbWl0IHRhbmdsZS1hIHRhbmdsZS1hIGEgJiYKKwlnaXQgbWVyZ2UgbWFzdGVyfjMgJiYKKwlnaXQgbWVyZ2Ugc2lkZX4xICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSB0YW5nbGUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmVhY2ggJiYKKwl0ZXN0X2NvbW1pdCByZWFjaCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgb2N0b3B1cy1hICYmCisJdGVzdF9jb21taXQgb2N0b3B1cy1hICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBvY3RvcHVzLWIgJiYKKwl0ZXN0X2NvbW1pdCBvY3RvcHVzLWIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgc2V2ZW50aCAmJgorCWdpdCBtZXJnZSBvY3RvcHVzLWEgb2N0b3B1cy1iICYmCisJZ2l0IG1lcmdlIHJlYWNoCisnCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKKyogICBNZXJnZSB0YWcgJ3JlYWNoJworfFwKK3wgXAorfCAgXAorKi0uIFwgICBNZXJnZSB0YWdzICdvY3RvcHVzLWEnIGFuZCAnb2N0b3B1cy1iJworfFwgXCBcCisqIHwgfCB8IHNldmVudGgKK3wgfCAqIHwgb2N0b3B1cy1iCit8IHwvIC8KK3wvfCB8Cit8ICogfCBvY3RvcHVzLWEKK3wvIC8KK3wgKiByZWFjaAorfC8KKyogICBNZXJnZSBicmFuY2ggJ3RhbmdsZScKK3xcCit8ICogICBNZXJnZSBicmFuY2ggJ3NpZGUnIChlYXJseSBwYXJ0KSBpbnRvIHRhbmdsZQorfCB8XAorfCAqIFwgICBNZXJnZSBicmFuY2ggJ21hc3RlcicgKGVhcmx5IHBhcnQpIGludG8gdGFuZ2xlCit8IHxcIFwKK3wgKiB8IHwgdGFuZ2xlLWEKKyogfCB8IHwgICBNZXJnZSBicmFuY2ggJ3NpZGUnCit8XCBcIFwgXAorfCAqIHwgfCB8IHNpZGUtMgorfCB8IHxffC8KK3wgfC98IHwKK3wgKiB8IHwgc2lkZS0xCisqIHwgfCB8IFNlY29uZAorKiB8IHwgfCBzaXh0aAorfCB8X3wvCit8L3wgfAorKiB8IHwgZmlmdGgKKyogfCB8IGZvdXJ0aAorfC8gLworKiAvIHRoaXJkCit8LworKiBzZWNvbmQKKyogaW5pdGlhbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggbWVyZ2UnICcKKwl0ZXN0X2NtcF9ncmFwaCAtLWRhdGUtb3JkZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nLmRlY29yYXRlIGNvbmZpZ3VyYXRpb24nICcKKwlnaXQgbG9nIC0tb25lbGluZSAtLW5vLWRlY29yYXRlID5leHBlY3Qubm9uZSAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGUgPmV4cGVjdC5zaG9ydCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGU9ZnVsbCA+ZXhwZWN0LmZ1bGwgJiYKKworCWVjaG8gIltsb2ddIGRlY29yYXRlIiA+Pi5naXQvY29uZmlnICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5zaG9ydCBhY3R1YWwgJiYKKworCXRlc3RfY29uZmlnIGxvZy5kZWNvcmF0ZSB0cnVlICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5zaG9ydCBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlPWZ1bGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5mdWxsIGFjdHVhbCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGU9bm8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5ub25lIGFjdHVhbCAmJgorCisJdGVzdF9jb25maWcgbG9nLmRlY29yYXRlIG5vICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5ub25lIGFjdHVhbCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5zaG9ydCBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlPWZ1bGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5mdWxsIGFjdHVhbCAmJgorCisJdGVzdF9jb25maWcgbG9nLmRlY29yYXRlIDEgJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnNob3J0IGFjdHVhbCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGU9ZnVsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmZ1bGwgYWN0dWFsICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1kZWNvcmF0ZT1ubyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0Lm5vbmUgYWN0dWFsICYmCisKKwl0ZXN0X2NvbmZpZyBsb2cuZGVjb3JhdGUgc2hvcnQgJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnNob3J0IGFjdHVhbCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tbm8tZGVjb3JhdGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5ub25lIGFjdHVhbCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGU9ZnVsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmZ1bGwgYWN0dWFsICYmCisKKwl0ZXN0X2NvbmZpZyBsb2cuZGVjb3JhdGUgZnVsbCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZnVsbCBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLW5vLWRlY29yYXRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qubm9uZSBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Quc2hvcnQgYWN0dWFsICYmCisKKwl0ZXN0X3VuY29uZmlnIGxvZy5kZWNvcmF0ZSAmJgorCWdpdCBsb2cgLS1wcmV0dHk9cmF3ID5leHBlY3QucmF3ICYmCisJdGVzdF9jb25maWcgbG9nLmRlY29yYXRlIGZ1bGwgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnJhdyBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWNvcmF0ZS1yZWZzIHdpdGggZ2xvYicgJworCWNhdCA+ZXhwZWN0LmRlY29yYXRlIDw8LVxFT0YgJiYKKwlNZXJnZS10YWctcmVhY2gKKwlNZXJnZS10YWdzLW9jdG9wdXMtYS1hbmQtb2N0b3B1cy1iCisJc2V2ZW50aAorCW9jdG9wdXMtYiAob2N0b3B1cy1iKQorCW9jdG9wdXMtYSAob2N0b3B1cy1hKQorCXJlYWNoCisJRU9GCisJY2F0ID5leHBlY3Qubm8tZGVjb3JhdGUgPDwtXEVPRiAmJgorCU1lcmdlLXRhZy1yZWFjaAorCU1lcmdlLXRhZ3Mtb2N0b3B1cy1hLWFuZC1vY3RvcHVzLWIKKwlzZXZlbnRoCisJb2N0b3B1cy1iCisJb2N0b3B1cy1hCisJcmVhY2gKKwlFT0YKKwlnaXQgbG9nIC1uNiAtLWRlY29yYXRlPXNob3J0IC0tcHJldHR5PSJ0Zm9ybWF0OiVmJWQiIFwKKwkJLS1kZWNvcmF0ZS1yZWZzPSJoZWFkcy9vY3RvcHVzKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5kZWNvcmF0ZSBhY3R1YWwgJiYKKwlnaXQgbG9nIC1uNiAtLWRlY29yYXRlPXNob3J0IC0tcHJldHR5PSJ0Zm9ybWF0OiVmJWQiIFwKKwkJLS1kZWNvcmF0ZS1yZWZzLWV4Y2x1ZGU9ImhlYWRzL29jdG9wdXMqIiBcCisJCS0tZGVjb3JhdGUtcmVmcz0iaGVhZHMvb2N0b3B1cyoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qubm8tZGVjb3JhdGUgYWN0dWFsICYmCisJZ2l0IC1jIGxvZy5leGNsdWRlRGVjb3JhdGlvbj0iaGVhZHMvb2N0b3B1cyoiIGxvZyBcCisJCS1uNiAtLWRlY29yYXRlPXNob3J0IC0tcHJldHR5PSJ0Zm9ybWF0OiVmJWQiIFwKKwkJLS1kZWNvcmF0ZS1yZWZzPSJoZWFkcy9vY3RvcHVzKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5kZWNvcmF0ZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVjb3JhdGUtcmVmcyB3aXRob3V0IGdsb2JzJyAnCisJY2F0ID5leHBlY3QuZGVjb3JhdGUgPDwtXEVPRiAmJgorCU1lcmdlLXRhZy1yZWFjaAorCU1lcmdlLXRhZ3Mtb2N0b3B1cy1hLWFuZC1vY3RvcHVzLWIKKwlzZXZlbnRoCisJb2N0b3B1cy1iCisJb2N0b3B1cy1hCisJcmVhY2ggKHRhZzogcmVhY2gpCisJRU9GCisJZ2l0IGxvZyAtbjYgLS1kZWNvcmF0ZT1zaG9ydCAtLXByZXR0eT0idGZvcm1hdDolZiVkIiBcCisJCS0tZGVjb3JhdGUtcmVmcz0idGFncy9yZWFjaCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5kZWNvcmF0ZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgZGVjb3JhdGUtcmVmcycgJworCWNhdCA+ZXhwZWN0LmRlY29yYXRlIDw8LVxFT0YgJiYKKwlNZXJnZS10YWctcmVhY2gKKwlNZXJnZS10YWdzLW9jdG9wdXMtYS1hbmQtb2N0b3B1cy1iCisJc2V2ZW50aAorCW9jdG9wdXMtYiAob2N0b3B1cy1iKQorCW9jdG9wdXMtYSAob2N0b3B1cy1hKQorCXJlYWNoICh0YWc6IHJlYWNoKQorCUVPRgorCWdpdCBsb2cgLW42IC0tZGVjb3JhdGU9c2hvcnQgLS1wcmV0dHk9InRmb3JtYXQ6JWYlZCIgXAorCQktLWRlY29yYXRlLXJlZnM9ImhlYWRzL29jdG9wdXMqIiBcCisJCS0tZGVjb3JhdGUtcmVmcz0idGFncy9yZWFjaCIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdC5kZWNvcmF0ZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVjb3JhdGUtcmVmcy1leGNsdWRlIHdpdGggZ2xvYicgJworCWNhdCA+ZXhwZWN0LmRlY29yYXRlIDw8LVxFT0YgJiYKKwlNZXJnZS10YWctcmVhY2ggKEhFQUQgLT4gbWFzdGVyKQorCU1lcmdlLXRhZ3Mtb2N0b3B1cy1hLWFuZC1vY3RvcHVzLWIKKwlzZXZlbnRoICh0YWc6IHNldmVudGgpCisJb2N0b3B1cy1iICh0YWc6IG9jdG9wdXMtYikKKwlvY3RvcHVzLWEgKHRhZzogb2N0b3B1cy1hKQorCXJlYWNoICh0YWc6IHJlYWNoLCByZWFjaCkKKwlFT0YKKwlnaXQgbG9nIC1uNiAtLWRlY29yYXRlPXNob3J0IC0tcHJldHR5PSJ0Zm9ybWF0OiVmJWQiIFwKKwkJLS1kZWNvcmF0ZS1yZWZzLWV4Y2x1ZGU9ImhlYWRzL29jdG9wdXMqIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmRlY29yYXRlIGFjdHVhbCAmJgorCWdpdCAtYyBsb2cuZXhjbHVkZURlY29yYXRpb249ImhlYWRzL29jdG9wdXMqIiBsb2cgXAorCQktbjYgLS1kZWNvcmF0ZT1zaG9ydCAtLXByZXR0eT0idGZvcm1hdDolZiVkIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmRlY29yYXRlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWNvcmF0ZS1yZWZzLWV4Y2x1ZGUgd2l0aG91dCBnbG9icycgJworCWNhdCA+ZXhwZWN0LmRlY29yYXRlIDw8LVxFT0YgJiYKKwlNZXJnZS10YWctcmVhY2ggKEhFQUQgLT4gbWFzdGVyKQorCU1lcmdlLXRhZ3Mtb2N0b3B1cy1hLWFuZC1vY3RvcHVzLWIKKwlzZXZlbnRoICh0YWc6IHNldmVudGgpCisJb2N0b3B1cy1iICh0YWc6IG9jdG9wdXMtYiwgb2N0b3B1cy1iKQorCW9jdG9wdXMtYSAodGFnOiBvY3RvcHVzLWEsIG9jdG9wdXMtYSkKKwlyZWFjaCAocmVhY2gpCisJRU9GCisJZ2l0IGxvZyAtbjYgLS1kZWNvcmF0ZT1zaG9ydCAtLXByZXR0eT0idGZvcm1hdDolZiVkIiBcCisJCS0tZGVjb3JhdGUtcmVmcy1leGNsdWRlPSJ0YWdzL3JlYWNoIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmRlY29yYXRlIGFjdHVhbCAmJgorCWdpdCAtYyBsb2cuZXhjbHVkZURlY29yYXRpb249InRhZ3MvcmVhY2giIGxvZyBcCisJCS1uNiAtLWRlY29yYXRlPXNob3J0IC0tcHJldHR5PSJ0Zm9ybWF0OiVmJWQiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZGVjb3JhdGUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIGRlY29yYXRlLXJlZnMtZXhjbHVkZScgJworCWNhdCA+ZXhwZWN0LmRlY29yYXRlIDw8LVxFT0YgJiYKKwlNZXJnZS10YWctcmVhY2ggKEhFQUQgLT4gbWFzdGVyKQorCU1lcmdlLXRhZ3Mtb2N0b3B1cy1hLWFuZC1vY3RvcHVzLWIKKwlzZXZlbnRoICh0YWc6IHNldmVudGgpCisJb2N0b3B1cy1iICh0YWc6IG9jdG9wdXMtYikKKwlvY3RvcHVzLWEgKHRhZzogb2N0b3B1cy1hKQorCXJlYWNoIChyZWFjaCkKKwlFT0YKKwlnaXQgbG9nIC1uNiAtLWRlY29yYXRlPXNob3J0IC0tcHJldHR5PSJ0Zm9ybWF0OiVmJWQiIFwKKwkJLS1kZWNvcmF0ZS1yZWZzLWV4Y2x1ZGU9ImhlYWRzL29jdG9wdXMqIiBcCisJCS0tZGVjb3JhdGUtcmVmcy1leGNsdWRlPSJ0YWdzL3JlYWNoIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmRlY29yYXRlIGFjdHVhbCAmJgorCWdpdCAtYyBsb2cuZXhjbHVkZURlY29yYXRpb249ImhlYWRzL29jdG9wdXMqIiBcCisJCS1jIGxvZy5leGNsdWRlRGVjb3JhdGlvbj0idGFncy9yZWFjaCIgbG9nIFwKKwkJLW42IC0tZGVjb3JhdGU9c2hvcnQgLS1wcmV0dHk9InRmb3JtYXQ6JWYlZCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5kZWNvcmF0ZSBhY3R1YWwgJiYKKwlnaXQgLWMgbG9nLmV4Y2x1ZGVEZWNvcmF0aW9uPSJoZWFkcy9vY3RvcHVzKiIgbG9nIFwKKwkJLS1kZWNvcmF0ZS1yZWZzLWV4Y2x1ZGU9InRhZ3MvcmVhY2giIFwKKwkJLW42IC0tZGVjb3JhdGU9c2hvcnQgLS1wcmV0dHk9InRmb3JtYXQ6JWYlZCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5kZWNvcmF0ZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVjb3JhdGUtcmVmcyBhbmQgZGVjb3JhdGUtcmVmcy1leGNsdWRlJyAnCisJY2F0ID5leHBlY3Qubm8tZGVjb3JhdGUgPDwtXEVPRiAmJgorCU1lcmdlLXRhZy1yZWFjaCAobWFzdGVyKQorCU1lcmdlLXRhZ3Mtb2N0b3B1cy1hLWFuZC1vY3RvcHVzLWIKKwlzZXZlbnRoCisJb2N0b3B1cy1iCisJb2N0b3B1cy1hCisJcmVhY2ggKHJlYWNoKQorCUVPRgorCWdpdCBsb2cgLW42IC0tZGVjb3JhdGU9c2hvcnQgLS1wcmV0dHk9InRmb3JtYXQ6JWYlZCIgXAorCQktLWRlY29yYXRlLXJlZnM9ImhlYWRzLyoiIFwKKwkJLS1kZWNvcmF0ZS1yZWZzLWV4Y2x1ZGU9ImhlYWRzL29jKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5uby1kZWNvcmF0ZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVvY3JhdGUtcmVmcyBhbmQgbG9nLmV4Y2x1ZGVEZWNvcmF0aW9uJyAnCisJY2F0ID5leHBlY3QuZGVjb3JhdGUgPDwtXEVPRiAmJgorCU1lcmdlLXRhZy1yZWFjaCAobWFzdGVyKQorCU1lcmdlLXRhZ3Mtb2N0b3B1cy1hLWFuZC1vY3RvcHVzLWIKKwlzZXZlbnRoCisJb2N0b3B1cy1iIChvY3RvcHVzLWIpCisJb2N0b3B1cy1hIChvY3RvcHVzLWEpCisJcmVhY2ggKHJlYWNoKQorCUVPRgorCWdpdCAtYyBsb2cuZXhjbHVkZURlY29yYXRpb249ImhlYWRzL29jKiIgbG9nIFwKKwkJLS1kZWNvcmF0ZS1yZWZzPSJoZWFkcy8qIiBcCisJCS1uNiAtLWRlY29yYXRlPXNob3J0IC0tcHJldHR5PSJ0Zm9ybWF0OiVmJWQiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZGVjb3JhdGUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlY29yYXRlLXJlZnMtZXhjbHVkZSBhbmQgc2ltcGxpZnktYnktZGVjb3JhdGlvbicgJworCWNhdCA+ZXhwZWN0LmRlY29yYXRlIDw8LVxFT0YgJiYKKwlNZXJnZS10YWctcmVhY2ggKEhFQUQgLT4gbWFzdGVyKQorCXJlYWNoICh0YWc6IHJlYWNoLCByZWFjaCkKKwlzZXZlbnRoICh0YWc6IHNldmVudGgpCisJTWVyZ2UtYnJhbmNoLXRhbmdsZQorCU1lcmdlLWJyYW5jaC1zaWRlLWVhcmx5LXBhcnQtaW50by10YW5nbGUgKHRhbmdsZSkKKwl0YW5nbGUtYSAodGFnOiB0YW5nbGUtYSkKKwlFT0YKKwlnaXQgbG9nIC1uNiAtLWRlY29yYXRlPXNob3J0IC0tcHJldHR5PSJ0Zm9ybWF0OiVmJWQiIFwKKwkJLS1kZWNvcmF0ZS1yZWZzLWV4Y2x1ZGU9IipvY3RvcHVzKiIgXAorCQktLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5kZWNvcmF0ZSBhY3R1YWwgJiYKKwlnaXQgLWMgbG9nLmV4Y2x1ZGVEZWNvcmF0aW9uPSIqb2N0b3B1cyoiIGxvZyBcCisJCS1uNiAtLWRlY29yYXRlPXNob3J0IC0tcHJldHR5PSJ0Zm9ybWF0OiVmJWQiIFwKKwkJLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZGVjb3JhdGUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZy5kZWNvcmF0ZSBjb25maWcgcGFyc2luZycgJworCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGU9ZnVsbCA+ZXhwZWN0LmZ1bGwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlPXNob3J0ID5leHBlY3Quc2hvcnQgJiYKKworCXRlc3RfY29uZmlnIGxvZy5kZWNvcmF0ZSBmdWxsICYmCisJdGVzdF9jb25maWcgbG9nLm1haWxtYXAgdHJ1ZSAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZnVsbCBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlPXNob3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Quc2hvcnQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdsb2cgb3V0cHV0IG9uIGEgVFRZJyAnCisJZ2l0IGxvZyAtLWNvbG9yIC0tb25lbGluZSAtLWRlY29yYXRlID5leHBlY3Quc2hvcnQgJiYKKworCXRlc3RfdGVybWluYWwgZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5zaG9ydCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmbG9nIGlzIGV4cGVjdGVkIGZvcm1hdCcgJworCWdpdCBsb2cgLWcgLS1hYmJyZXYtY29tbWl0IC0tcHJldHR5PW9uZWxpbmUgPmV4cGVjdCAmJgorCWdpdCByZWZsb2cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hhdGNoYW5nZWQgaXMgZXhwZWN0ZWQgZm9ybWF0JyAnCisJZ2l0IGxvZyAtLW5vLW1lcmdlcyAtLXJhdyA+ZXhwZWN0ICYmCisJZ2l0IHdoYXRjaGFuZ2VkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZy5hYmJyZXZDb21taXQgY29uZmlndXJhdGlvbicgJworCWdpdCBsb2cgLS1hYmJyZXYtY29tbWl0ID5leHBlY3QubG9nLmFiYnJldiAmJgorCWdpdCBsb2cgLS1uby1hYmJyZXYtY29tbWl0ID5leHBlY3QubG9nLmZ1bGwgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXJhdyA+ZXhwZWN0LmxvZy5yYXcgJiYKKwlnaXQgcmVmbG9nIC0tYWJicmV2LWNvbW1pdCA+ZXhwZWN0LnJlZmxvZy5hYmJyZXYgJiYKKwlnaXQgcmVmbG9nIC0tbm8tYWJicmV2LWNvbW1pdCA+ZXhwZWN0LnJlZmxvZy5mdWxsICYmCisJZ2l0IHdoYXRjaGFuZ2VkIC0tYWJicmV2LWNvbW1pdCA+ZXhwZWN0LndoYXRjaGFuZ2VkLmFiYnJldiAmJgorCWdpdCB3aGF0Y2hhbmdlZCAtLW5vLWFiYnJldi1jb21taXQgPmV4cGVjdC53aGF0Y2hhbmdlZC5mdWxsICYmCisKKwl0ZXN0X2NvbmZpZyBsb2cuYWJicmV2Q29tbWl0IHRydWUgJiYKKworCWdpdCBsb2cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5sb2cuYWJicmV2IGFjdHVhbCAmJgorCWdpdCBsb2cgLS1uby1hYmJyZXYtY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QubG9nLmZ1bGwgYWN0dWFsICYmCisKKwlnaXQgbG9nIC0tcHJldHR5PXJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmxvZy5yYXcgYWN0dWFsICYmCisKKwlnaXQgcmVmbG9nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmVmbG9nLmFiYnJldiBhY3R1YWwgJiYKKwlnaXQgcmVmbG9nIC0tbm8tYWJicmV2LWNvbW1pdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnJlZmxvZy5mdWxsIGFjdHVhbCAmJgorCisJZ2l0IHdoYXRjaGFuZ2VkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qud2hhdGNoYW5nZWQuYWJicmV2IGFjdHVhbCAmJgorCWdpdCB3aGF0Y2hhbmdlZCAtLW5vLWFiYnJldi1jb21taXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC53aGF0Y2hhbmdlZC5mdWxsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IGFkZGVkIHBhdGggdW5kZXIgIi0tZm9sbG93IC1NIicgJworCSMgVGhpcyB0ZXN0cyBmb3IgYSByZWdyZXNzaW9uIGludHJvZHVjZWQgaW4gdjEuNy4yLXJjMH4xMDNeMn4yCisJdGVzdF9jcmVhdGVfcmVwbyByZWdyZXNzaW9uICYmCisJKAorCQljZCByZWdyZXNzaW9uICYmCisJCXRlc3RfY29tbWl0IG5lZWRzLWFub3RoZXItY29tbWl0ICYmCisJCXRlc3RfY29tbWl0IGZvby5iYXIgJiYKKwkJZ2l0IGxvZyAtTSAtLWZvbGxvdyAtcCBmb28uYmFyLnQgJiYKKwkJZ2l0IGxvZyAtTSAtLWZvbGxvdyAtLXN0YXQgZm9vLmJhci50ICYmCisJCWdpdCBsb2cgLU0gLS1mb2xsb3cgLS1uYW1lLW9ubHkgZm9vLmJhci50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC1jIC0tZm9sbG93JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBmb2xsb3ctYyAmJgorCSgKKwkJY2QgZm9sbG93LWMgJiYKKwkJdGVzdF9jb21taXQgaW5pdGlhbCBmaWxlIG9yaWdpbmFsICYmCisJCWdpdCBybSBmaWxlICYmCisJCXRlc3RfY29tbWl0IHJlbmFtZSBmaWxlMiBvcmlnaW5hbCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwkJdGVzdF9jb21taXQgbW9kaWZ5IGZpbGUgZm9vICYmCisJCWdpdCBtZXJnZSAtbSBtZXJnZSByZW5hbWUgJiYKKwkJZ2l0IGxvZyAtYyAtLWZvbGxvdyBmaWxlMgorCSkKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisqICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIE1lcmdlIEhFQURTIERFU0NSSVBUSU9OCit8IHwKK3wgKiBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIHJlYWNoCit8IHwgLS0tCit8IHwgIHJlYWNoLnQgfCAxICsKK3wgfCAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwKK3wgfCBkaWZmIC0tZ2l0IGEvcmVhY2gudCBiL3JlYWNoLnQKK3wgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8IGluZGV4IEJFRk9SRS4uQUZURVIKK3wgfCAtLS0gL2Rldi9udWxsCit8IHwgKysrIGIvcmVhY2gudAorfCB8IEBAIC0wLDAgKzEgQEAKK3wgfCArcmVhY2gKK3wgfAorfCAgXAorKi0uIFwgICBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8XCBcIFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCit8IHwgfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfCB8IHwKK3wgfCB8IHwgICAgIE1lcmdlIEhFQURTIERFU0NSSVBUSU9OCit8IHwgfCB8Cit8IHwgKiB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8LyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwKK3wgfCB8ICAgICAgIG9jdG9wdXMtYgorfCB8IHwgICAtLS0KK3wgfCB8ICAgIG9jdG9wdXMtYi50IHwgMSArCit8IHwgfCAgICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKK3wgfCB8Cit8IHwgfCAgIGRpZmYgLS1naXQgYS9vY3RvcHVzLWIudCBiL29jdG9wdXMtYi50Cit8IHwgfCAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8IHwgfCAgIGluZGV4IEJFRk9SRS4uQUZURVIKK3wgfCB8ICAgLS0tIC9kZXYvbnVsbAorfCB8IHwgICArKysgYi9vY3RvcHVzLWIudAorfCB8IHwgICBAQCAtMCwwICsxIEBACit8IHwgfCAgICtvY3RvcHVzLWIKK3wgfCB8Cit8ICogfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8IHwvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwKK3wgfCAgICAgICBvY3RvcHVzLWEKK3wgfCAgIC0tLQorfCB8ICAgIG9jdG9wdXMtYS50IHwgMSArCit8IHwgICAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwKK3wgfCAgIGRpZmYgLS1naXQgYS9vY3RvcHVzLWEudCBiL29jdG9wdXMtYS50Cit8IHwgICBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8ICAgaW5kZXggQkVGT1JFLi5BRlRFUgorfCB8ICAgLS0tIC9kZXYvbnVsbAorfCB8ICAgKysrIGIvb2N0b3B1cy1hLnQKK3wgfCAgIEBAIC0wLDAgKzEgQEAKK3wgfCAgICtvY3RvcHVzLWEKK3wgfAorKiB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8Cit8ICAgICAgIHNldmVudGgKK3wgICAtLS0KK3wgICAgc2V2ZW50aC50IHwgMSArCit8ICAgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorfAorfCAgIGRpZmYgLS1naXQgYS9zZXZlbnRoLnQgYi9zZXZlbnRoLnQKK3wgICBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCAgIGluZGV4IEJFRk9SRS4uQUZURVIKK3wgICAtLS0gL2Rldi9udWxsCit8ICAgKysrIGIvc2V2ZW50aC50Cit8ICAgQEAgLTAsMCArMSBAQAorfCAgICtzZXZlbnRoCit8CisqICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIE1lcmdlIGJyYW5jaCAndGFuZ2xlJworfCB8Cit8ICogICBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8IHxcICBNZXJnZTogTUVSR0VfUEFSRU5UUworfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwKK3wgfCB8ICAgICBNZXJnZSBicmFuY2ggJ3NpZGUnIChlYXJseSBwYXJ0KSBpbnRvIHRhbmdsZQorfCB8IHwKK3wgKiB8ICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfCB8XCBcICBNZXJnZTogTUVSR0VfUEFSRU5UUworfCB8IHwgfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwgfCB8Cit8IHwgfCB8ICAgICBNZXJnZSBicmFuY2ggJ21hc3RlcicgKGVhcmx5IHBhcnQpIGludG8gdGFuZ2xlCit8IHwgfCB8Cit8ICogfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwgfAorfCB8IHwgfCAgICAgdGFuZ2xlLWEKK3wgfCB8IHwgLS0tCit8IHwgfCB8ICB0YW5nbGUtYSB8IDEgKworfCB8IHwgfCAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwgfCB8Cit8IHwgfCB8IGRpZmYgLS1naXQgYS90YW5nbGUtYSBiL3RhbmdsZS1hCit8IHwgfCB8IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8IHwgfCB8IGluZGV4IEJFRk9SRS4uQUZURVIKK3wgfCB8IHwgLS0tIC9kZXYvbnVsbAorfCB8IHwgfCArKysgYi90YW5nbGUtYQorfCB8IHwgfCBAQCAtMCwwICsxIEBACit8IHwgfCB8ICthCit8IHwgfCB8CisqIHwgfCB8ICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfFwgXCBcIFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCit8IHwgfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwgfCB8Cit8IHwgfCB8IHwgICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKK3wgfCB8IHwgfAorfCAqIHwgfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8X3wvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwvfCB8Cit8IHwgfCB8ICAgICAgIHNpZGUtMgorfCB8IHwgfCAgIC0tLQorfCB8IHwgfCAgICAyIHwgMSArCit8IHwgfCB8ICAgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorfCB8IHwgfAorfCB8IHwgfCAgIGRpZmYgLS1naXQgYS8yIGIvMgorfCB8IHwgfCAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8IHwgfCB8ICAgaW5kZXggQkVGT1JFLi5BRlRFUgorfCB8IHwgfCAgIC0tLSAvZGV2L251bGwKK3wgfCB8IHwgICArKysgYi8yCit8IHwgfCB8ICAgQEAgLTAsMCArMSBAQAorfCB8IHwgfCAgICsyCit8IHwgfCB8Cit8ICogfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwgfAorfCB8IHwgfCAgICAgc2lkZS0xCit8IHwgfCB8IC0tLQorfCB8IHwgfCAgMSB8IDEgKworfCB8IHwgfCAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwgfCB8Cit8IHwgfCB8IGRpZmYgLS1naXQgYS8xIGIvMQorfCB8IHwgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8IHwgfCBpbmRleCBCRUZPUkUuLkFGVEVSCit8IHwgfCB8IC0tLSAvZGV2L251bGwKK3wgfCB8IHwgKysrIGIvMQorfCB8IHwgfCBAQCAtMCwwICsxIEBACit8IHwgfCB8ICsxCit8IHwgfCB8CisqIHwgfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwgfAorfCB8IHwgfCAgICAgU2Vjb25kCit8IHwgfCB8IC0tLQorfCB8IHwgfCAgb25lIHwgMSArCit8IHwgfCB8ICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKK3wgfCB8IHwKK3wgfCB8IHwgZGlmZiAtLWdpdCBhL29uZSBiL29uZQorfCB8IHwgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8IHwgfCBpbmRleCBCRUZPUkUuLkFGVEVSCit8IHwgfCB8IC0tLSAvZGV2L251bGwKK3wgfCB8IHwgKysrIGIvb25lCit8IHwgfCB8IEBAIC0wLDAgKzEgQEAKK3wgfCB8IHwgK2Nhc2UKK3wgfCB8IHwKKyogfCB8IHwgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfCB8X3wvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8L3wgfAorfCB8IHwgICAgICAgc2l4dGgKK3wgfCB8ICAgLS0tCit8IHwgfCAgICBhL3R3byB8IDEgLQorfCB8IHwgICAgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKK3wgfCB8Cit8IHwgfCAgIGRpZmYgLS1naXQgYS9hL3R3byBiL2EvdHdvCit8IHwgfCAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorfCB8IHwgICBpbmRleCBCRUZPUkUuLkFGVEVSCit8IHwgfCAgIC0tLSBhL2EvdHdvCit8IHwgfCAgICsrKyAvZGV2L251bGwKK3wgfCB8ICAgQEAgLTEgKzAsMCBAQAorfCB8IHwgICAtbmkKK3wgfCB8CisqIHwgfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8IHwgfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwgfAorfCB8IHwgICAgIGZpZnRoCit8IHwgfCAtLS0KK3wgfCB8ICBhL3R3byB8IDEgKworfCB8IHwgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorfCB8IHwKK3wgfCB8IGRpZmYgLS1naXQgYS9hL3R3byBiL2EvdHdvCit8IHwgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8IHwgaW5kZXggQkVGT1JFLi5BRlRFUgorfCB8IHwgLS0tIC9kZXYvbnVsbAorfCB8IHwgKysrIGIvYS90d28KK3wgfCB8IEBAIC0wLDAgKzEgQEAKK3wgfCB8ICtuaQorfCB8IHwKKyogfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wvIC8gIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICAgIGZvdXJ0aAorfCB8ICAgLS0tCit8IHwgICAgZWluIHwgMSArCit8IHwgICAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwKK3wgfCAgIGRpZmYgLS1naXQgYS9laW4gYi9laW4KK3wgfCAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8IHwgICBpbmRleCBCRUZPUkUuLkFGVEVSCit8IHwgICAtLS0gL2Rldi9udWxsCit8IHwgICArKysgYi9laW4KK3wgfCAgIEBAIC0wLDAgKzEgQEAKK3wgfCAgICtpY2hpCit8IHwKKyogfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8LyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfAorfCAgICAgICB0aGlyZAorfCAgIC0tLQorfCAgICBpY2hpIHwgMSArCit8ICAgIG9uZSAgfCAxIC0KK3wgICAgMiBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorfAorfCAgIGRpZmYgLS1naXQgYS9pY2hpIGIvaWNoaQorfCAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8ICAgaW5kZXggQkVGT1JFLi5BRlRFUgorfCAgIC0tLSAvZGV2L251bGwKK3wgICArKysgYi9pY2hpCit8ICAgQEAgLTAsMCArMSBAQAorfCAgICtpY2hpCit8ICAgZGlmZiAtLWdpdCBhL29uZSBiL29uZQorfCAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorfCAgIGluZGV4IEJFRk9SRS4uQUZURVIKK3wgICAtLS0gYS9vbmUKK3wgICArKysgL2Rldi9udWxsCit8ICAgQEAgLTEgKzAsMCBAQAorfCAgIC1pY2hpCit8CisqIGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfAorfCAgICAgc2Vjb25kCit8IC0tLQorfCAgb25lIHwgMiArLQorfCAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCit8Cit8IGRpZmYgLS1naXQgYS9vbmUgYi9vbmUKK3wgaW5kZXggQkVGT1JFLi5BRlRFUiAxMDA2NDQKK3wgLS0tIGEvb25lCit8ICsrKyBiL29uZQorfCBAQCAtMSArMSBAQAorfCAtb25lCit8ICtpY2hpCit8CisqIGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKKyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCisgICAgICBpbml0aWFsCisgIC0tLQorICAgb25lIHwgMSArCisgICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworICBkaWZmIC0tZ2l0IGEvb25lIGIvb25lCisgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0CisgIGluZGV4IEJFRk9SRS4uQUZURVIKKyAgLS0tIC9kZXYvbnVsbAorICArKysgYi9vbmUKKyAgQEAgLTAsMCArMSBAQAorICArb25lCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBkaWZmIGFuZCBzdGF0cycgJworCWxpYl90ZXN0X2NtcF9zaG9ydF9ncmFwaCAtLW5vLXJlbmFtZXMgLS1zdGF0IC1wCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorKioqICogICBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCisqKiogfFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCisqKiogfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKyoqKiB8IHwKKyoqKiB8IHwgICAgIE1lcmdlIEhFQURTIERFU0NSSVBUSU9OCisqKiogfCB8CisqKiogfCAqIGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKKyoqKiB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorKioqIHwgfAorKioqIHwgfCAgICAgcmVhY2gKKyoqKiB8IHwgLS0tCisqKiogfCB8ICByZWFjaC50IHwgMSArCisqKiogfCB8ICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKyoqKiB8IHwKKyoqKiB8IHwgZGlmZiAtLWdpdCBhL3JlYWNoLnQgYi9yZWFjaC50CisqKiogfCB8IG5ldyBmaWxlIG1vZGUgMTAwNjQ0CisqKiogfCB8IGluZGV4IEJFRk9SRS4uQUZURVIKKyoqKiB8IHwgLS0tIC9kZXYvbnVsbAorKioqIHwgfCArKysgYi9yZWFjaC50CisqKiogfCB8IEBAIC0wLDAgKzEgQEAKKyoqKiB8IHwgK3JlYWNoCisqKiogfCB8CisqKiogfCAgXAorKioqICotLiBcICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorKioqIHxcIFwgXCAgTWVyZ2U6IE1FUkdFX1BBUkVOVFMKKyoqKiB8IHwgfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKyoqKiB8IHwgfCB8CisqKiogfCB8IHwgfCAgICAgTWVyZ2UgSEVBRFMgREVTQ1JJUFRJT04KKyoqKiB8IHwgfCB8CisqKiogfCB8ICogfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCisqKiogfCB8IHwvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisqKiogfCB8IHwKKyoqKiB8IHwgfCAgICAgICBvY3RvcHVzLWIKKyoqKiB8IHwgfCAgIC0tLQorKioqIHwgfCB8ICAgIG9jdG9wdXMtYi50IHwgMSArCisqKiogfCB8IHwgICAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisqKiogfCB8IHwKKyoqKiB8IHwgfCAgIGRpZmYgLS1naXQgYS9vY3RvcHVzLWIudCBiL29jdG9wdXMtYi50CisqKiogfCB8IHwgICBuZXcgZmlsZSBtb2RlIDEwMDY0NAorKioqIHwgfCB8ICAgaW5kZXggQkVGT1JFLi5BRlRFUgorKioqIHwgfCB8ICAgLS0tIC9kZXYvbnVsbAorKioqIHwgfCB8ICAgKysrIGIvb2N0b3B1cy1iLnQKKyoqKiB8IHwgfCAgIEBAIC0wLDAgKzEgQEAKKyoqKiB8IHwgfCAgICtvY3RvcHVzLWIKKyoqKiB8IHwgfAorKioqIHwgKiB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKKyoqKiB8IHwvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisqKiogfCB8CisqKiogfCB8ICAgICAgIG9jdG9wdXMtYQorKioqIHwgfCAgIC0tLQorKioqIHwgfCAgICBvY3RvcHVzLWEudCB8IDEgKworKioqIHwgfCAgICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKyoqKiB8IHwKKyoqKiB8IHwgICBkaWZmIC0tZ2l0IGEvb2N0b3B1cy1hLnQgYi9vY3RvcHVzLWEudAorKioqIHwgfCAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0CisqKiogfCB8ICAgaW5kZXggQkVGT1JFLi5BRlRFUgorKioqIHwgfCAgIC0tLSAvZGV2L251bGwKKyoqKiB8IHwgICArKysgYi9vY3RvcHVzLWEudAorKioqIHwgfCAgIEBAIC0wLDAgKzEgQEAKKyoqKiB8IHwgICArb2N0b3B1cy1hCisqKiogfCB8CisqKiogKiB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKKyoqKiB8LyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorKioqIHwKKyoqKiB8ICAgICAgIHNldmVudGgKKyoqKiB8ICAgLS0tCisqKiogfCAgICBzZXZlbnRoLnQgfCAxICsKKyoqKiB8ICAgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorKioqIHwKKyoqKiB8ICAgZGlmZiAtLWdpdCBhL3NldmVudGgudCBiL3NldmVudGgudAorKioqIHwgICBuZXcgZmlsZSBtb2RlIDEwMDY0NAorKioqIHwgICBpbmRleCBCRUZPUkUuLkFGVEVSCisqKiogfCAgIC0tLSAvZGV2L251bGwKKyoqKiB8ICAgKysrIGIvc2V2ZW50aC50CisqKiogfCAgIEBAIC0wLDAgKzEgQEAKKyoqKiB8ICAgK3NldmVudGgKKyoqKiB8CisqKiogKiAgIGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKKyoqKiB8XCAgTWVyZ2U6IE1FUkdFX1BBUkVOVFMKKyoqKiB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorKioqIHwgfAorKioqIHwgfCAgICAgTWVyZ2UgYnJhbmNoICd0YW5nbGUnCisqKiogfCB8CisqKiogfCAqICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorKioqIHwgfFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCisqKiogfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorKioqIHwgfCB8CisqKiogfCB8IHwgICAgIE1lcmdlIGJyYW5jaCAnc2lkZScgKGVhcmx5IHBhcnQpIGludG8gdGFuZ2xlCisqKiogfCB8IHwKKyoqKiB8ICogfCAgIGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKKyoqKiB8IHxcIFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCisqKiogfCB8IHwgfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisqKiogfCB8IHwgfAorKioqIHwgfCB8IHwgICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyAoZWFybHkgcGFydCkgaW50byB0YW5nbGUKKyoqKiB8IHwgfCB8CisqKiogfCAqIHwgfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCisqKiogfCB8IHwgfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisqKiogfCB8IHwgfAorKioqIHwgfCB8IHwgICAgIHRhbmdsZS1hCisqKiogfCB8IHwgfCAtLS0KKyoqKiB8IHwgfCB8ICB0YW5nbGUtYSB8IDEgKworKioqIHwgfCB8IHwgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorKioqIHwgfCB8IHwKKyoqKiB8IHwgfCB8IGRpZmYgLS1naXQgYS90YW5nbGUtYSBiL3RhbmdsZS1hCisqKiogfCB8IHwgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorKioqIHwgfCB8IHwgaW5kZXggQkVGT1JFLi5BRlRFUgorKioqIHwgfCB8IHwgLS0tIC9kZXYvbnVsbAorKioqIHwgfCB8IHwgKysrIGIvdGFuZ2xlLWEKKyoqKiB8IHwgfCB8IEBAIC0wLDAgKzEgQEAKKyoqKiB8IHwgfCB8ICthCisqKiogfCB8IHwgfAorKioqICogfCB8IHwgICBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCisqKiogfFwgXCBcIFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCisqKiogfCB8IHwgfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKyoqKiB8IHwgfCB8IHwKKyoqKiB8IHwgfCB8IHwgICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKyoqKiB8IHwgfCB8IHwKKyoqKiB8ICogfCB8IHwgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorKioqIHwgfCB8X3wvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisqKiogfCB8L3wgfAorKioqIHwgfCB8IHwgICAgICAgc2lkZS0yCisqKiogfCB8IHwgfCAgIC0tLQorKioqIHwgfCB8IHwgICAgMiB8IDEgKworKioqIHwgfCB8IHwgICAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisqKiogfCB8IHwgfAorKioqIHwgfCB8IHwgICBkaWZmIC0tZ2l0IGEvMiBiLzIKKyoqKiB8IHwgfCB8ICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQKKyoqKiB8IHwgfCB8ICAgaW5kZXggQkVGT1JFLi5BRlRFUgorKioqIHwgfCB8IHwgICAtLS0gL2Rldi9udWxsCisqKiogfCB8IHwgfCAgICsrKyBiLzIKKyoqKiB8IHwgfCB8ICAgQEAgLTAsMCArMSBAQAorKioqIHwgfCB8IHwgICArMgorKioqIHwgfCB8IHwKKyoqKiB8ICogfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKKyoqKiB8IHwgfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKyoqKiB8IHwgfCB8CisqKiogfCB8IHwgfCAgICAgc2lkZS0xCisqKiogfCB8IHwgfCAtLS0KKyoqKiB8IHwgfCB8ICAxIHwgMSArCisqKiogfCB8IHwgfCAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisqKiogfCB8IHwgfAorKioqIHwgfCB8IHwgZGlmZiAtLWdpdCBhLzEgYi8xCisqKiogfCB8IHwgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorKioqIHwgfCB8IHwgaW5kZXggQkVGT1JFLi5BRlRFUgorKioqIHwgfCB8IHwgLS0tIC9kZXYvbnVsbAorKioqIHwgfCB8IHwgKysrIGIvMQorKioqIHwgfCB8IHwgQEAgLTAsMCArMSBAQAorKioqIHwgfCB8IHwgKzEKKyoqKiB8IHwgfCB8CisqKiogKiB8IHwgfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCisqKiogfCB8IHwgfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisqKiogfCB8IHwgfAorKioqIHwgfCB8IHwgICAgIFNlY29uZAorKioqIHwgfCB8IHwgLS0tCisqKiogfCB8IHwgfCAgb25lIHwgMSArCisqKiogfCB8IHwgfCAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisqKiogfCB8IHwgfAorKioqIHwgfCB8IHwgZGlmZiAtLWdpdCBhL29uZSBiL29uZQorKioqIHwgfCB8IHwgbmV3IGZpbGUgbW9kZSAxMDA2NDQKKyoqKiB8IHwgfCB8IGluZGV4IEJFRk9SRS4uQUZURVIKKyoqKiB8IHwgfCB8IC0tLSAvZGV2L251bGwKKyoqKiB8IHwgfCB8ICsrKyBiL29uZQorKioqIHwgfCB8IHwgQEAgLTAsMCArMSBAQAorKioqIHwgfCB8IHwgK2Nhc2UKKyoqKiB8IHwgfCB8CisqKiogKiB8IHwgfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCisqKiogfCB8X3wvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisqKiogfC98IHwKKyoqKiB8IHwgfCAgICAgICBzaXh0aAorKioqIHwgfCB8ICAgLS0tCisqKiogfCB8IHwgICAgYS90d28gfCAxIC0KKyoqKiB8IHwgfCAgICAxIGZpbGUgY2hhbmdlZCwgMSBkZWxldGlvbigtKQorKioqIHwgfCB8CisqKiogfCB8IHwgICBkaWZmIC0tZ2l0IGEvYS90d28gYi9hL3R3bworKioqIHwgfCB8ICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CisqKiogfCB8IHwgICBpbmRleCBCRUZPUkUuLkFGVEVSCisqKiogfCB8IHwgICAtLS0gYS9hL3R3bworKioqIHwgfCB8ICAgKysrIC9kZXYvbnVsbAorKioqIHwgfCB8ICAgQEAgLTEgKzAsMCBAQAorKioqIHwgfCB8ICAgLW5pCisqKiogfCB8IHwKKyoqKiAqIHwgfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCisqKiogfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorKioqIHwgfCB8CisqKiogfCB8IHwgICAgIGZpZnRoCisqKiogfCB8IHwgLS0tCisqKiogfCB8IHwgIGEvdHdvIHwgMSArCisqKiogfCB8IHwgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorKioqIHwgfCB8CisqKiogfCB8IHwgZGlmZiAtLWdpdCBhL2EvdHdvIGIvYS90d28KKyoqKiB8IHwgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorKioqIHwgfCB8IGluZGV4IEJFRk9SRS4uQUZURVIKKyoqKiB8IHwgfCAtLS0gL2Rldi9udWxsCisqKiogfCB8IHwgKysrIGIvYS90d28KKyoqKiB8IHwgfCBAQCAtMCwwICsxIEBACisqKiogfCB8IHwgK25pCisqKiogfCB8IHwKKyoqKiAqIHwgfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCisqKiogfC8gLyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorKioqIHwgfAorKioqIHwgfCAgICAgICBmb3VydGgKKyoqKiB8IHwgICAtLS0KKyoqKiB8IHwgICAgZWluIHwgMSArCisqKiogfCB8ICAgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorKioqIHwgfAorKioqIHwgfCAgIGRpZmYgLS1naXQgYS9laW4gYi9laW4KKyoqKiB8IHwgICBuZXcgZmlsZSBtb2RlIDEwMDY0NAorKioqIHwgfCAgIGluZGV4IEJFRk9SRS4uQUZURVIKKyoqKiB8IHwgICAtLS0gL2Rldi9udWxsCisqKiogfCB8ICAgKysrIGIvZWluCisqKiogfCB8ICAgQEAgLTAsMCArMSBAQAorKioqIHwgfCAgICtpY2hpCisqKiogfCB8CisqKiogKiB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKKyoqKiB8LyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorKioqIHwKKyoqKiB8ICAgICAgIHRoaXJkCisqKiogfCAgIC0tLQorKioqIHwgICAgaWNoaSB8IDEgKworKioqIHwgICAgb25lICB8IDEgLQorKioqIHwgICAgMiBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorKioqIHwKKyoqKiB8ICAgZGlmZiAtLWdpdCBhL2ljaGkgYi9pY2hpCisqKiogfCAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0CisqKiogfCAgIGluZGV4IEJFRk9SRS4uQUZURVIKKyoqKiB8ICAgLS0tIC9kZXYvbnVsbAorKioqIHwgICArKysgYi9pY2hpCisqKiogfCAgIEBAIC0wLDAgKzEgQEAKKyoqKiB8ICAgK2ljaGkKKyoqKiB8ICAgZGlmZiAtLWdpdCBhL29uZSBiL29uZQorKioqIHwgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKyoqKiB8ICAgaW5kZXggQkVGT1JFLi5BRlRFUgorKioqIHwgICAtLS0gYS9vbmUKKyoqKiB8ICAgKysrIC9kZXYvbnVsbAorKioqIHwgICBAQCAtMSArMCwwIEBACisqKiogfCAgIC1pY2hpCisqKiogfAorKioqICogY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorKioqIHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorKioqIHwKKyoqKiB8ICAgICBzZWNvbmQKKyoqKiB8IC0tLQorKioqIHwgIG9uZSB8IDIgKy0KKyoqKiB8ICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKyoqKiB8CisqKiogfCBkaWZmIC0tZ2l0IGEvb25lIGIvb25lCisqKiogfCBpbmRleCBCRUZPUkUuLkFGVEVSIDEwMDY0NAorKioqIHwgLS0tIGEvb25lCisqKiogfCArKysgYi9vbmUKKyoqKiB8IEBAIC0xICsxIEBACisqKiogfCAtb25lCisqKiogfCAraWNoaQorKioqIHwKKyoqKiAqIGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKKyoqKiAgIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKyoqKgorKioqICAgICAgIGluaXRpYWwKKyoqKiAgIC0tLQorKioqICAgIG9uZSB8IDEgKworKioqICAgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorKioqCisqKiogICBkaWZmIC0tZ2l0IGEvb25lIGIvb25lCisqKiogICBuZXcgZmlsZSBtb2RlIDEwMDY0NAorKioqICAgaW5kZXggQkVGT1JFLi5BRlRFUgorKioqICAgLS0tIC9kZXYvbnVsbAorKioqICAgKysrIGIvb25lCisqKiogICBAQCAtMCwwICsxIEBACisqKiogICArb25lCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tbGluZS1wcmVmaXg9IioqKiAiIC0tZ3JhcGggd2l0aCBkaWZmIGFuZCBzdGF0cycgJworCWxpYl90ZXN0X2NtcF9zaG9ydF9ncmFwaCAtLWxpbmUtcHJlZml4PSIqKiogIiAtLW5vLXJlbmFtZXMgLS1zdGF0IC1wCisnCisKK2NhdCA+ZXhwZWN0IDw8LVxFT0YKKyogcmVhY2gKK3wKK3wgQQlyZWFjaC50CisqIE1lcmdlIGJyYW5jaCAndGFuZ2xlJworKiAgIE1lcmdlIGJyYW5jaCAnc2lkZScKK3xcCit8ICogc2lkZS0yCit8Cit8ICAgQQkyCisqIFNlY29uZAorfAorfCBBCW9uZQorKiBzaXh0aAorCisgIEQJYS90d28KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIC0tbmFtZS1zdGF0dXMnICcKKwl0ZXN0X2NtcF9ncmFwaCAtLW5hbWUtc3RhdHVzIHRhbmdsZS4ucmVhY2gKKycKKworY2F0ID5leHBlY3QgPDwtXEVPRgorKiByZWFjaAorfAorfCByZWFjaC50CisqIE1lcmdlIGJyYW5jaCAndGFuZ2xlJworKiAgIE1lcmdlIGJyYW5jaCAnc2lkZScKK3xcCit8ICogc2lkZS0yCit8Cit8ICAgMgorKiBTZWNvbmQKK3wKK3wgb25lCisqIHNpeHRoCisKKyAgYS90d28KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIC0tbmFtZS1vbmx5JyAnCisJdGVzdF9jbXBfZ3JhcGggLS1uYW1lLW9ubHkgdGFuZ2xlLi5yZWFjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkb3Rkb3QgaXMgYSBwYXJlbnQgZGlyZWN0b3J5JyAnCisJbWtkaXIgLXAgYS9iICYmCisJKCBlY2hvIHNpeHRoICYmIGVjaG8gZmlmdGggKSA+ZXhwZWN0ICYmCisJKCBjZCBhL2IgJiYgZ2l0IGxvZyAtLWZvcm1hdD0lcyAuLiApID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzZXR1cCBzaWduZWQgYnJhbmNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZ25lZCBtYXN0ZXIgJiYKKwllY2hvIGZvbyA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1TIC1tIHNpZ25lZF9jb21taXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3NldHVwIHNpZ25lZCBicmFuY2ggd2l0aCBzdWJrZXknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lnbmVkLXN1YmtleSBtYXN0ZXIgJiYKKwllY2hvIGZvbyA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1TQjcyMjcxODkgLW0gc2lnbmVkX2NvbW1pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICdzZXR1cCBzaWduZWQgYnJhbmNoIHg1MDknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lnbmVkLXg1MDkgbWFzdGVyICYmCisJZWNobyBmb28gPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJdGVzdF9jb25maWcgZ3BnLmZvcm1hdCB4NTA5ICYmCisJdGVzdF9jb25maWcgdXNlci5zaWduaW5na2V5ICRHSVRfQ09NTUlUVEVSX0VNQUlMICYmCisJZ2l0IGNvbW1pdCAtUyAtbSBzaWduZWRfY29tbWl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ2xvZyB4NTA5IGZpbmdlcnByaW50JyAnCisJZWNobyAiRjhCRjYyRTA2OTNEMDY5NDgxNjM3NzA5OTkwOUM3NzlGQTIzRkQ2NSB8ICIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLW4xIC0tZm9ybWF0PSIlR0YgfCAlR1AiIHNpZ25lZC14NTA5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ2xvZyBPcGVuUEdQIGZpbmdlcnByaW50JyAnCisJZWNobyAiRDRCRTIyMzExQUQzMTMxRTVFREEyOUE0NjEwOTJFODVCNzIyNzE4OSIgPiBleHBlY3QgJiYKKwlnaXQgbG9nIC1uMSAtLWZvcm1hdD0iJUdQIiBzaWduZWQtc3Via2V5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlJyAnCisJZ2l0IGxvZyAtLWdyYXBoIC0tc2hvdy1zaWduYXR1cmUgLW4xIHNpZ25lZCA+YWN0dWFsICYmCisJZ3JlcCAiXnwgZ3BnOiBTaWduYXR1cmUgbWFkZSIgYWN0dWFsICYmCisJZ3JlcCAiXnwgZ3BnOiBHb29kIHNpZ25hdHVyZSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ2xvZyAtLWdyYXBoIC0tc2hvdy1zaWduYXR1cmUgeDUwOScgJworCWdpdCBsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlIC1uMSBzaWduZWQteDUwOSA+YWN0dWFsICYmCisJZ3JlcCAiXnwgZ3Bnc206IFNpZ25hdHVyZSBtYWRlIiBhY3R1YWwgJiYKKwlncmVwICJefCBncGdzbTogR29vZCBzaWduYXR1cmUiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbG9nIC0tZ3JhcGggLS1zaG93LXNpZ25hdHVyZSBmb3IgbWVyZ2VkIHRhZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtYiBwbGFpbiBtYXN0ZXIgJiYKKwllY2hvIGFhYSA+YmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgY29tbWl0IC1tIGJhcl9jb21taXQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGFnZ2VkIG1hc3RlciAmJgorCWVjaG8gYmJiID5iYXogJiYKKwlnaXQgYWRkIGJheiAmJgorCWdpdCBjb21taXQgLW0gYmF6X2NvbW1pdCAmJgorCWdpdCB0YWcgLXMgLW0gc2lnbmVkX3RhZ19tc2cgc2lnbmVkX3RhZyAmJgorCWdpdCBjaGVja291dCBwbGFpbiAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIC1tIG1zZyBzaWduZWRfdGFnICYmCisJZ2l0IGxvZyAtLWdyYXBoIC0tc2hvdy1zaWduYXR1cmUgLW4xIHBsYWluID5hY3R1YWwgJiYKKwlncmVwICJefFxcXCAgbWVyZ2VkIHRhZyIgYWN0dWFsICYmCisJZ3JlcCAiXnwgfCBncGc6IFNpZ25hdHVyZSBtYWRlIiBhY3R1YWwgJiYKKwlncmVwICJefCB8IGdwZzogR29vZCBzaWduYXR1cmUiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbG9nIC0tZ3JhcGggLS1zaG93LXNpZ25hdHVyZSBmb3IgbWVyZ2VkIHRhZyBpbiBzaGFsbG93IGNsb25lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHBsYWluLXNoYWxsb3cgbWFzdGVyICYmCisJZWNobyBhYWEgPmJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJZ2l0IGNvbW1pdCAtbSBiYXJfY29tbWl0ICYmCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIG1hc3RlciAmJgorCWVjaG8gYmJiID5iYXogJiYKKwlnaXQgYWRkIGJheiAmJgorCWdpdCBjb21taXQgLW0gYmF6X2NvbW1pdCAmJgorCWdpdCB0YWcgLXMgLW0gc2lnbmVkX3RhZ19tc2cgc2lnbmVkX3RhZ19zaGFsbG93ICYmCisJaGFzaD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY2hlY2tvdXQgcGxhaW4tc2hhbGxvdyAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIC1tIG1zZyBzaWduZWRfdGFnX3NoYWxsb3cgJiYKKwlnaXQgY2xvbmUgLS1kZXB0aCAxIC0tbm8tbG9jYWwgLiBzaGFsbG93ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc2hhbGxvdyIgJiYKKwlnaXQgLUMgc2hhbGxvdyBsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlIC1uMSBwbGFpbi1zaGFsbG93ID5hY3R1YWwgJiYKKwlncmVwICJ0YWcgc2lnbmVkX3RhZ19zaGFsbG93IG5hbWVzIGEgbm9uLXBhcmVudCAkaGFzaCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlIGZvciBtZXJnZWQgdGFnIHdpdGggbWlzc2luZyBrZXknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcGxhaW4tbm9rZXkgbWFzdGVyICYmCisJZWNobyBhYWEgPmJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJZ2l0IGNvbW1pdCAtbSBiYXJfY29tbWl0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRhZ2dlZC1ub2tleSBtYXN0ZXIgJiYKKwllY2hvIGJiYiA+YmF6ICYmCisJZ2l0IGFkZCBiYXogJiYKKwlnaXQgY29tbWl0IC1tIGJhel9jb21taXQgJiYKKwlnaXQgdGFnIC1zIC1tIHNpZ25lZF90YWdfbXNnIHNpZ25lZF90YWdfbm9rZXkgJiYKKwlnaXQgY2hlY2tvdXQgcGxhaW4tbm9rZXkgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiAtbSBtc2cgc2lnbmVkX3RhZ19ub2tleSAmJgorCUdOVVBHSE9NRT0uIGdpdCBsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlIC1uMSBwbGFpbi1ub2tleSA+YWN0dWFsICYmCisJZ3JlcCAiXnxcXFwgIG1lcmdlZCB0YWciIGFjdHVhbCAmJgorCWdyZXAgIl58IHwgZ3BnOiBTaWduYXR1cmUgbWFkZSIgYWN0dWFsICYmCisJZ3JlcCAiXnwgfCBncGc6IENhbiciJyIndCBjaGVjayBzaWduYXR1cmU6IFwocHVibGljIGtleSBub3QgZm91bmRcfE5vIHB1YmxpYyBrZXlcKSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlIGZvciBtZXJnZWQgdGFnIHdpdGggYmFkIHNpZ25hdHVyZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtYiBwbGFpbi1iYWQgbWFzdGVyICYmCisJZWNobyBhYWEgPmJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJZ2l0IGNvbW1pdCAtbSBiYXJfY29tbWl0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRhZ2dlZC1iYWQgbWFzdGVyICYmCisJZWNobyBiYmIgPmJheiAmJgorCWdpdCBhZGQgYmF6ICYmCisJZ2l0IGNvbW1pdCAtbSBiYXpfY29tbWl0ICYmCisJZ2l0IHRhZyAtcyAtbSBzaWduZWRfdGFnX21zZyBzaWduZWRfdGFnX2JhZCAmJgorCWdpdCBjYXQtZmlsZSB0YWcgc2lnbmVkX3RhZ19iYWQgPnJhdyAmJgorCXNlZCAtZSAicy9zaWduZWRfdGFnX21zZy9mb3JnZWQvIiByYXcgPmZvcmdlZCAmJgorCWdpdCBoYXNoLW9iamVjdCAtdyAtdCB0YWcgZm9yZ2VkID5mb3JnZWQudGFnICYmCisJZ2l0IGNoZWNrb3V0IHBsYWluLWJhZCAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIC1tIG1zZyAiJChjYXQgZm9yZ2VkLnRhZykiICYmCisJZ2l0IGxvZyAtLWdyYXBoIC0tc2hvdy1zaWduYXR1cmUgLW4xIHBsYWluLWJhZCA+YWN0dWFsICYmCisJZ3JlcCAiXnxcXFwgIG1lcmdlZCB0YWciIGFjdHVhbCAmJgorCWdyZXAgIl58IHwgZ3BnOiBTaWduYXR1cmUgbWFkZSIgYWN0dWFsICYmCisJZ3JlcCAiXnwgfCBncGc6IEJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdsb2cgLS1zaG93LXNpZ25hdHVyZSBmb3IgbWVyZ2VkIHRhZyB3aXRoIEdQRyBmYWlsdXJlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHBsYWluLWZhaWwgbWFzdGVyICYmCisJZWNobyBhYWEgPmJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJZ2l0IGNvbW1pdCAtbSBiYXJfY29tbWl0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRhZ2dlZC1mYWlsIG1hc3RlciAmJgorCWVjaG8gYmJiID5iYXogJiYKKwlnaXQgYWRkIGJheiAmJgorCWdpdCBjb21taXQgLW0gYmF6X2NvbW1pdCAmJgorCWdpdCB0YWcgLXMgLW0gc2lnbmVkX3RhZ19tc2cgc2lnbmVkX3RhZ19mYWlsICYmCisJZ2l0IGNoZWNrb3V0IHBsYWluLWZhaWwgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiAtbSBtc2cgc2lnbmVkX3RhZ19mYWlsICYmCisJVE1QRElSPSIkKHB3ZCkvYm9ndXMiIGdpdCBsb2cgLS1zaG93LXNpZ25hdHVyZSAtbjEgcGxhaW4tZmFpbCA+YWN0dWFsICYmCisJZ3JlcCAiXm1lcmdlZCB0YWciIGFjdHVhbCAmJgorCWdyZXAgIl5ObyBzaWduYXR1cmUiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXmdwZzogU2lnbmF0dXJlIG1hZGUiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICdsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlIGZvciBtZXJnZWQgdGFnIHg1MDknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwl0ZXN0X2NvbmZpZyBncGcuZm9ybWF0IHg1MDkgJiYKKwl0ZXN0X2NvbmZpZyB1c2VyLnNpZ25pbmdrZXkgJEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcGxhaW4teDUwOSBtYXN0ZXIgJiYKKwllY2hvIGFhYSA+YmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgY29tbWl0IC1tIGJhcl9jb21taXQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGFnZ2VkLXg1MDkgbWFzdGVyICYmCisJZWNobyBiYmIgPmJheiAmJgorCWdpdCBhZGQgYmF6ICYmCisJZ2l0IGNvbW1pdCAtbSBiYXpfY29tbWl0ICYmCisJZ2l0IHRhZyAtcyAtbSBzaWduZWRfdGFnX21zZyBzaWduZWRfdGFnX3g1MDkgJiYKKwlnaXQgY2hlY2tvdXQgcGxhaW4teDUwOSAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIC1tIG1zZyBzaWduZWRfdGFnX3g1MDkgJiYKKwlnaXQgbG9nIC0tZ3JhcGggLS1zaG93LXNpZ25hdHVyZSAtbjEgcGxhaW4teDUwOSA+YWN0dWFsICYmCisJZ3JlcCAiXnxcXFwgIG1lcmdlZCB0YWciIGFjdHVhbCAmJgorCWdyZXAgIl58IHwgZ3Bnc206IFNpZ25hdHVyZSBtYWRlIiBhY3R1YWwgJiYKKwlncmVwICJefCB8IGdwZ3NtOiBHb29kIHNpZ25hdHVyZSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ2xvZyAtLWdyYXBoIC0tc2hvdy1zaWduYXR1cmUgZm9yIG1lcmdlZCB0YWcgeDUwOSBtaXNzaW5nIGtleScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCXRlc3RfY29uZmlnIGdwZy5mb3JtYXQgeDUwOSAmJgorCXRlc3RfY29uZmlnIHVzZXIuc2lnbmluZ2tleSAkR0lUX0NPTU1JVFRFUl9FTUFJTCAmJgorCWdpdCBjaGVja291dCAtYiBwbGFpbi14NTA5LW5va2V5IG1hc3RlciAmJgorCWVjaG8gYWFhID5iYXIgJiYKKwlnaXQgYWRkIGJhciAmJgorCWdpdCBjb21taXQgLW0gYmFyX2NvbW1pdCAmJgorCWdpdCBjaGVja291dCAtYiB0YWdnZWQteDUwOS1ub2tleSBtYXN0ZXIgJiYKKwllY2hvIGJiYiA+YmF6ICYmCisJZ2l0IGFkZCBiYXogJiYKKwlnaXQgY29tbWl0IC1tIGJhel9jb21taXQgJiYKKwlnaXQgdGFnIC1zIC1tIHNpZ25lZF90YWdfbXNnIHNpZ25lZF90YWdfeDUwOV9ub2tleSAmJgorCWdpdCBjaGVja291dCBwbGFpbi14NTA5LW5va2V5ICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgLW0gbXNnIHNpZ25lZF90YWdfeDUwOV9ub2tleSAmJgorCUdOVVBHSE9NRT0uIGdpdCBsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlIC1uMSBwbGFpbi14NTA5LW5va2V5ID5hY3R1YWwgJiYKKwlncmVwICJefFxcXCAgbWVyZ2VkIHRhZyIgYWN0dWFsICYmCisJZ3JlcCAiXnwgfCBncGdzbTogY2VydGlmaWNhdGUgbm90IGZvdW5kIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEdTTSAnbG9nIC0tZ3JhcGggLS1zaG93LXNpZ25hdHVyZSBmb3IgbWVyZ2VkIHRhZyB4NTA5IGJhZCBzaWduYXR1cmUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwl0ZXN0X2NvbmZpZyBncGcuZm9ybWF0IHg1MDkgJiYKKwl0ZXN0X2NvbmZpZyB1c2VyLnNpZ25pbmdrZXkgJEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcGxhaW4teDUwOS1iYWQgbWFzdGVyICYmCisJZWNobyBhYWEgPmJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJZ2l0IGNvbW1pdCAtbSBiYXJfY29tbWl0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRhZ2dlZC14NTA5LWJhZCBtYXN0ZXIgJiYKKwllY2hvIGJiYiA+YmF6ICYmCisJZ2l0IGFkZCBiYXogJiYKKwlnaXQgY29tbWl0IC1tIGJhel9jb21taXQgJiYKKwlnaXQgdGFnIC1zIC1tIHNpZ25lZF90YWdfbXNnIHNpZ25lZF90YWdfeDUwOV9iYWQgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIHNpZ25lZF90YWdfeDUwOV9iYWQgPnJhdyAmJgorCXNlZCAtZSAicy9zaWduZWRfdGFnX21zZy9mb3JnZWQvIiByYXcgPmZvcmdlZCAmJgorCWdpdCBoYXNoLW9iamVjdCAtdyAtdCB0YWcgZm9yZ2VkID5mb3JnZWQudGFnICYmCisJZ2l0IGNoZWNrb3V0IHBsYWluLXg1MDktYmFkICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgLW0gbXNnICIkKGNhdCBmb3JnZWQudGFnKSIgJiYKKwlnaXQgbG9nIC0tZ3JhcGggLS1zaG93LXNpZ25hdHVyZSAtbjEgcGxhaW4teDUwOS1iYWQgPmFjdHVhbCAmJgorCWdyZXAgIl58XFxcICBtZXJnZWQgdGFnIiBhY3R1YWwgJiYKKwlncmVwICJefCB8IGdwZ3NtOiBTaWduYXR1cmUgbWFkZSIgYWN0dWFsICYmCisJZ3JlcCAiXnwgfCBncGdzbTogaW52YWxpZCBzaWduYXR1cmUiIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICctLW5vLXNob3ctc2lnbmF0dXJlIG92ZXJyaWRlcyAtLXNob3ctc2lnbmF0dXJlJyAnCisJZ2l0IGxvZyAtMSAtLXNob3ctc2lnbmF0dXJlIC0tbm8tc2hvdy1zaWduYXR1cmUgc2lnbmVkID5hY3R1YWwgJiYKKwkhIGdyZXAgIl5ncGc6IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2xvZy5zaG93c2lnbmF0dXJlPXRydWUgYmVoYXZlcyBsaWtlIC0tc2hvdy1zaWduYXR1cmUnICcKKwl0ZXN0X2NvbmZpZyBsb2cuc2hvd3NpZ25hdHVyZSB0cnVlICYmCisJZ2l0IGxvZyAtMSBzaWduZWQgPmFjdHVhbCAmJgorCWdyZXAgImdwZzogU2lnbmF0dXJlIG1hZGUiIGFjdHVhbCAmJgorCWdyZXAgImdwZzogR29vZCBzaWduYXR1cmUiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnLS1uby1zaG93LXNpZ25hdHVyZSBvdmVycmlkZXMgbG9nLnNob3dzaWduYXR1cmU9dHJ1ZScgJworCXRlc3RfY29uZmlnIGxvZy5zaG93c2lnbmF0dXJlIHRydWUgJiYKKwlnaXQgbG9nIC0xIC0tbm8tc2hvdy1zaWduYXR1cmUgc2lnbmVkID5hY3R1YWwgJiYKKwkhIGdyZXAgIl5ncGc6IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJy0tc2hvdy1zaWduYXR1cmUgb3ZlcnJpZGVzIGxvZy5zaG93c2lnbmF0dXJlPWZhbHNlJyAnCisJdGVzdF9jb25maWcgbG9nLnNob3dzaWduYXR1cmUgZmFsc2UgJiYKKwlnaXQgbG9nIC0xIC0tc2hvdy1zaWduYXR1cmUgc2lnbmVkID5hY3R1YWwgJiYKKwlncmVwICJncGc6IFNpZ25hdHVyZSBtYWRlIiBhY3R1YWwgJiYKKwlncmVwICJncGc6IEdvb2Qgc2lnbmF0dXJlIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggLS1uby13YWxrIGlzIGZvcmJpZGRlbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLS1ncmFwaCAtLW5vLXdhbGsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGRpYWdub3NlcyBib2d1cyBIRUFEJyAnCisJZ2l0IGluaXQgZW1wdHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgZW1wdHkgbG9nIDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCBkb2VzLm5vdC5oYXZlLmFueS5jb21taXRzIHN0ZGVyciAmJgorCWVjaG8gMTIzNGFiY2QgPmVtcHR5Ly5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgZW1wdHkgbG9nIDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCBicm9rZW4gc3RkZXJyICYmCisJZWNobyAicmVmOiByZWZzL2hlYWRzL2ludmFsaWQubG9jayIgPmVtcHR5Ly5naXQvSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBlbXB0eSBsb2cgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIGJyb2tlbiBzdGRlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgZW1wdHkgbG9nIC0tZGVmYXVsdCB0b3RhbGx5LWJvZ3VzIDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCBicm9rZW4gc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBkb2VzIG5vdCBkZWZhdWx0IHRvIEhFQUQgd2hlbiByZXYgaW5wdXQgaXMgZ2l2ZW4nICcKKwlnaXQgbG9nIC0tYnJhbmNoZXM9ZG9lcy1ub3QtZXhpc3QgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIC0tc291cmNlIHRlc3RzJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHNvdXJjZS1hICYmCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNvdXJjZS1iIEhFQUReICYmCisJdGVzdF9jb21taXQgdGhyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tc291cmNlIHBhaW50cyBicmFuY2ggbmFtZXMnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L3RocmVlKQlzb3VyY2UtYiB0aHJlZQorCSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IDovdHdvICApCXNvdXJjZS1hIHR3bworCSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IDovb25lICApCXNvdXJjZS1iIG9uZQorCUVPRgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tc291cmNlIHNvdXJjZS1hIHNvdXJjZS1iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLXNvdXJjZSBwYWludHMgdGFnIG5hbWVzJyAnCisJZ2l0IHRhZyAtbSB0YWdnZWQgc291cmNlLXRhZyAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IDovdGhyZWUpCXNvdXJjZS10YWcgdGhyZWUKKwkkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L3R3byAgKQlzb3VyY2UtYSB0d28KKwkkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L29uZSAgKQlzb3VyY2UtdGFnIG9uZQorCUVPRgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tc291cmNlIHNvdXJjZS10YWcgc291cmNlLWEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tc291cmNlIHBhaW50cyBzeW1tZXRyaWMgcmFuZ2VzJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi90aHJlZSkJc291cmNlLWIgdGhyZWUKKwkkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L3R3byAgKQlzb3VyY2UtYSB0d28KKwlFT0YKKwlnaXQgbG9nIC0tb25lbGluZSAtLXNvdXJjZSBzb3VyY2UtYS4uLnNvdXJjZS1iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGRvZXMgbm90IEJVRy1jcmFzaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgc291cmNlLWEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZW5kLW9mLW9wdGlvbnMnICcKKyAgICAgICBnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzLy0tc291cmNlIEhFQUQgJiYKKyAgICAgICBnaXQgbG9nIC0tZW5kLW9mLW9wdGlvbnMgLS1zb3VyY2UgPmFjdHVhbCAmJgorICAgICAgIGdpdCBsb2cgPmV4cGVjdCAmJgorICAgICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjAzLW1haWxtYXAuc2ggYi90L3Q0MjAzLW1haWxtYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTg2YzNhOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMDMtbWFpbG1hcC5zaApAQCAtMCwwICsxLDU1NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Jy5tYWlsbWFwIGNvbmZpZ3VyYXRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKworZnV6el9ibGFtZSAoKSB7CisJc2VkICIKKwkJcy8kX3gwNVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXS9PQkpJRC9nCisJCXMvJF94MDVbMC05YS1mXVswLTlhLWZdL09CSkkvZworCQlzL1stMC05XVx7MTBcfSBbOjAtOV1cezhcfSBbLStdWzAtOV1cezRcfS9EQVRFL2cKKwkiICIkQCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJY2F0ID5jb250YWN0cyA8PC0gRU9GICYmCisJJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+CisJbmljazEgPGJ1Z3NAY29tcGFueS54eD4KKwlFT0YKKworCWVjaG8gb25lID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gdHdvID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICJuaWNrMSA8YnVnc0Bjb21wYW55Lnh4PiIgLW0gc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrLW1haWxtYXAgbm8gYXJndW1lbnRzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLW1haWxtYXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2stbWFpbG1hcCBhcmd1bWVudHMnICcKKwljYXQgPmV4cGVjdCA8PC0gRU9GICYmCisJJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+CisJbmljazEgPGJ1Z3NAY29tcGFueS54eD4KKwlFT0YKKwlnaXQgY2hlY2stbWFpbG1hcCBcCisJCSIkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4iIFwKKwkJIm5pY2sxIDxidWdzQGNvbXBhbnkueHg+IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjay1tYWlsbWFwIC0tc3RkaW4nICcKKwljYXQgPmV4cGVjdCA8PC0gRU9GICYmCisJJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+CisJbmljazEgPGJ1Z3NAY29tcGFueS54eD4KKwlFT0YKKwlnaXQgY2hlY2stbWFpbG1hcCAtLXN0ZGluIDxjb250YWN0cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjay1tYWlsbWFwIC0tc3RkaW4gYXJndW1lbnRzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUludGVybmFsIEd1eSA8YnVnc0Bjb21wYW55Lnh5PgorCUVPRgorCWNhdCA8Y29udGFjdHMgPj5leHBlY3QgJiYKKwlnaXQgY2hlY2stbWFpbG1hcCAtLXN0ZGluICJJbnRlcm5hbCBHdXkgPGJ1Z3NAY29tcGFueS54eT4iIFwKKwkJPGNvbnRhY3RzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrLW1haWxtYXAgYm9ndXMgY29udGFjdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1tYWlsbWFwIGJvZ3VzCisnCisKK2NhdCA+ZXhwZWN0IDw8IEVPRgorJEdJVF9BVVRIT1JfTkFNRSAoMSk6CisgICAgICBpbml0aWFsCisKK25pY2sxICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTm8gbWFpbG1hcCcgJworCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorUmVwbyBHdXkgKDEpOgorICAgICAgaW5pdGlhbAorCituaWNrMSAoMSk6CisgICAgICBzZWNvbmQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgLm1haWxtYXAnICcKKwllY2hvICJSZXBvIEd1eSA8JEdJVF9BVVRIT1JfRU1BSUw+IiA+IC5tYWlsbWFwICYmCisJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBVc2luZyBhIG1haWxtYXAgZmlsZSBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgcmVwbyBoZXJlLCBidXQKKyMgY291bGQganVzdCBhcyB3ZWxsIGhhdmUgYmVlbiBhIGZpbGUgb3V0c2lkZSBvZiB0aGUgcmVwb3NpdG9yeQorY2F0ID5leHBlY3QgPDxcRU9GCitJbnRlcm5hbCBHdXkgKDEpOgorICAgICAgc2Vjb25kCisKK1JlcG8gR3V5ICgxKToKKyAgICAgIGluaXRpYWwKKworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmZpbGUgc2V0JyAnCisJbWtkaXIgLXAgaW50ZXJuYWxfbWFpbG1hcCAmJgorCWVjaG8gIkludGVybmFsIEd1eSA8YnVnc0Bjb21wYW55Lnh4PiIgPiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZ2l0IGNvbmZpZyBtYWlsbWFwLmZpbGUgaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorRXh0ZXJuYWwgR3V5ICgxKToKKyAgICAgIGluaXRpYWwKKworSW50ZXJuYWwgR3V5ICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxtYXAuZmlsZSBvdmVycmlkZScgJworCWVjaG8gIkV4dGVybmFsIEd1eSA8JEdJVF9BVVRIT1JfRU1BSUw+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZ2l0IGNvbmZpZyBtYWlsbWFwLmZpbGUgaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorUmVwbyBHdXkgKDEpOgorICAgICAgaW5pdGlhbAorCituaWNrMSAoMSk6CisgICAgICBzZWNvbmQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxtYXAuZmlsZSBub24tZXhpc3RlbnQnICcKKwlybSBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJcm1kaXIgaW50ZXJuYWxfbWFpbG1hcCAmJgorCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorSW50ZXJuYWwgR3V5ICgxKToKKyAgICAgIHNlY29uZAorCitSZXBvIEd1eSAoMSk6CisgICAgICBpbml0aWFsCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduYW1lIGVudHJ5IGFmdGVyIGVtYWlsIGVudHJ5JyAnCisJbWtkaXIgLXAgaW50ZXJuYWxfbWFpbG1hcCAmJgorCWVjaG8gIjxidWdzQGNvbXBhbnkueHk+IDxidWdzQGNvbXBhbnkueHg+IiA+aW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWVjaG8gIkludGVybmFsIEd1eSA8YnVnc0Bjb21wYW55Lnh4PiIgPj5pbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitJbnRlcm5hbCBHdXkgKDEpOgorICAgICAgc2Vjb25kCisKK1JlcG8gR3V5ICgxKToKKyAgICAgIGluaXRpYWwKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25hbWUgZW50cnkgYWZ0ZXIgZW1haWwgZW50cnksIGNhc2UtaW5zZW5zaXRpdmUnICcKKwlta2RpciAtcCBpbnRlcm5hbF9tYWlsbWFwICYmCisJZWNobyAiPGJ1Z3NAY29tcGFueS54eT4gPGJ1Z3NAY29tcGFueS54eD4iID5pbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiSW50ZXJuYWwgR3V5IDxCVUdTQENvbXBhbnkueHg+IiA+PmludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwlnaXQgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCBFT0YKKyRHSVRfQVVUSE9SX05BTUUgKDEpOgorICAgICAgaW5pdGlhbAorCituaWNrMSAoMSk6CisgICAgICBzZWNvbmQKKworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdObyBtYWlsbWFwIGZpbGVzLCBidXQgY29uZmlndXJlZCcgJworCXJtIC1mIC5tYWlsbWFwIGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwlnaXQgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtYWlsbWFwIGJsb2IgdGVzdHMnICcKKwlnaXQgY2hlY2tvdXQgLWIgbWFwICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWNhdCA+anVzdC1idWdzIDw8LSBFT0YgJiYKKwlCbG9iIEd1eSA8YnVnc0Bjb21wYW55Lnh4PgorCUVPRgorCWNhdCA+Ym90aCA8PC0gRU9GICYmCisJQmxvYiBHdXkgPCRHSVRfQVVUSE9SX0VNQUlMPgorCUJsb2IgR3V5IDxidWdzQGNvbXBhbnkueHg+CisJRU9GCisJcHJpbnRmICJUcmlja3kgR3V5IDwkR0lUX0FVVEhPUl9FTUFJTD4iID5uby1uZXdsaW5lICYmCisJZ2l0IGFkZCBqdXN0LWJ1Z3MgYm90aCBuby1uZXdsaW5lICYmCisJZ2l0IGNvbW1pdCAtbSAibXkgbWFpbG1hcHMiICYmCisJZWNobyAiUmVwbyBHdXkgPCRHSVRfQVVUSE9SX0VNQUlMPiIgPi5tYWlsbWFwICYmCisJZWNobyAiSW50ZXJuYWwgR3V5IDwkR0lUX0FVVEhPUl9FTUFJTD4iID5pbnRlcm5hbC5tYXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5ibG9iIHNldCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlCbG9iIEd1eSAoMSk6CisJICAgICAgc2Vjb25kCisKKwlSZXBvIEd1eSAoMSk6CisJICAgICAgaW5pdGlhbAorCisJRU9GCisJZ2l0IC1jIG1haWxtYXAuYmxvYj1tYXA6anVzdC1idWdzIHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5ibG9iIG92ZXJyaWRlcyAubWFpbG1hcCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlCbG9iIEd1eSAoMik6CisJICAgICAgaW5pdGlhbAorCSAgICAgIHNlY29uZAorCisJRU9GCisJZ2l0IC1jIG1haWxtYXAuYmxvYj1tYXA6Ym90aCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxtYXAuZmlsZSBvdmVycmlkZXMgbWFpbG1hcC5ibG9iJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUJsb2IgR3V5ICgxKToKKwkgICAgICBzZWNvbmQKKworCUludGVybmFsIEd1eSAoMSk6CisJICAgICAgaW5pdGlhbAorCisJRU9GCisJZ2l0IFwKKwkgIC1jIG1haWxtYXAuYmxvYj1tYXA6Ym90aCBcCisJICAtYyBtYWlsbWFwLmZpbGU9aW50ZXJuYWwubWFwIFwKKwkgIHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5ibG9iIGNhbiBiZSBtaXNzaW5nJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCVJlcG8gR3V5ICgxKToKKwkgICAgICBpbml0aWFsCisKKwluaWNrMSAoMSk6CisJICAgICAgc2Vjb25kCisKKwlFT0YKKwlnaXQgLWMgbWFpbG1hcC5ibG9iPW1hcDpub25leGlzdGVudCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxtYXAuYmxvYiBkZWZhdWx0cyB0byBvZmYgaW4gbm9uLWJhcmUgcmVwbycgJworCWdpdCBpbml0IG5vbi1iYXJlICYmCisJKAorCQljZCBub24tYmFyZSAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgLm1haWxtYXAgIkZha2UgTmFtZSA8JEdJVF9BVVRIT1JfRU1BSUw+IiAmJgorCQllY2hvICIgICAgIDEJRmFrZSBOYW1lIiA+ZXhwZWN0ICYmCisJCWdpdCBzaG9ydGxvZyAtbnMgSEVBRCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJcm0gLm1haWxtYXAgJiYKKwkJZWNobyAiICAgICAxCSRHSVRfQVVUSE9SX05BTUUiID5leHBlY3QgJiYKKwkJZ2l0IHNob3J0bG9nIC1ucyBIRUFEID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5ibG9iIGRlZmF1bHRzIHRvIEhFQUQ6Lm1haWxtYXAgaW4gYmFyZSByZXBvJyAnCisJZ2l0IGNsb25lIC0tYmFyZSBub24tYmFyZSBiYXJlICYmCisJKAorCQljZCBiYXJlICYmCisJCWVjaG8gIiAgICAgMQlGYWtlIE5hbWUiID5leHBlY3QgJiYKKwkJZ2l0IHNob3J0bG9nIC1ucyBIRUFEID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5ibG9iIGNhbiBoYW5kbGUgYmxvYnMgd2l0aG91dCB0cmFpbGluZyBuZXdsaW5lJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCVRyaWNreSBHdXkgKDEpOgorCSAgICAgIGluaXRpYWwKKworCW5pY2sxICgxKToKKwkgICAgICBzZWNvbmQKKworCUVPRgorCWdpdCAtYyBtYWlsbWFwLmJsb2I9bWFwOm5vLW5ld2xpbmUgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGFmdGVyIG1haWxtYXAuYmxvYiB0ZXN0cycgJworCXJtIC1mIC5tYWlsbWFwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbmdsZS1jaGFyYWN0ZXIgbmFtZScgJworCWVjaG8gIiAgICAgMQlBIDwkR0lUX0FVVEhPUl9FTUFJTD4iID5leHBlY3QgJiYKKwllY2hvICIgICAgIDEJbmljazEgPGJ1Z3NAY29tcGFueS54eD4iID4+ZXhwZWN0ICYmCisJZWNobyAiQSA8JEdJVF9BVVRIT1JfRU1BSUw+IiA+Lm1haWxtYXAgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC5tYWlsbWFwIiAmJgorCWdpdCBzaG9ydGxvZyAtZXMgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVzZXJ2ZSBjYW5vbmljYWwgZW1haWwgY2FzZScgJworCWVjaG8gIiAgICAgMQkkR0lUX0FVVEhPUl9OQU1FIDxBVVRIT1JAZXhhbXBsZS5jb20+IiA+ZXhwZWN0ICYmCisJZWNobyAiICAgICAxCW5pY2sxIDxidWdzQGNvbXBhbnkueHg+IiA+PmV4cGVjdCAmJgorCWVjaG8gIjxBVVRIT1JAZXhhbXBsZS5jb20+IDwkR0lUX0FVVEhPUl9FTUFJTD4iID4ubWFpbG1hcCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLm1haWxtYXAiICYmCisJZ2l0IHNob3J0bG9nIC1lcyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgRXh0ZW5kZWQgbWFpbG1hcCBjb25maWd1cmF0aW9ucyBzaG91bGQgZ2l2ZSB1cyB0aGUgZm9sbG93aW5nIG91dHB1dCBmb3Igc2hvcnRsb2cKK2NhdCA+ZXhwZWN0IDw8IEVPRgorJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+ICgxKToKKyAgICAgIGluaXRpYWwKKworQ1RPIDxjdG9AY29tcGFueS54eD4gKDEpOgorICAgICAgc2V2ZW50aAorCitPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4gKDIpOgorICAgICAgdGhpcmQKKyAgICAgIGZvdXJ0aAorCitTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PiAoMik6CisgICAgICBmaWZ0aAorICAgICAgc2l4dGgKKworU29tZSBEdWRlIDxzb21lQGR1ZGUueHg+ICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2hvcnRsb2cgb3V0cHV0IChjb21wbGV4IG1hcHBpbmcpJyAnCisJZWNobyB0aHJlZSA+Pm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAibmljazIgPGJ1Z3NAY29tcGFueS54eD4iIC1tIHRoaXJkICYmCisKKwllY2hvIGZvdXIgPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIm5pY2syIDxuaWNrMkBjb21wYW55Lnh4PiIgLW0gZm91cnRoICYmCisKKwllY2hvIGZpdmUgPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgInNhbnRhIDxtZUBjb21wYW55Lnh4PiIgLW0gZmlmdGggJiYKKworCWVjaG8gc2l4ID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICJjbGF1cyA8bWVAY29tcGFueS54eD4iIC1tIHNpeHRoICYmCisKKwllY2hvIHNldmVuID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICJDVE8gPGN0b0Bjb29tcGFueS54eD4iIC1tIHNldmVudGggJiYKKworCW1rZGlyIC1wIGludGVybmFsX21haWxtYXAgJiYKKwllY2hvICJDb21taXR0ZWQgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIgPiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiPGN0b0Bjb21wYW55Lnh4PiAgICAgICAgICAgICAgICAgICAgICAgPGN0b0Bjb29tcGFueS54eD4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwllY2hvICJTb21lIER1ZGUgPHNvbWVAZHVkZS54eD4gICAgICAgICBuaWNrMSA8YnVnc0Bjb21wYW55Lnh4PiIgPj4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWVjaG8gIk90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PiAgIG5pY2syIDxidWdzQGNvbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+ICAgICAgICAgPG5pY2syQGNvbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4gPG1lQGNvbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4gPG1lQGNvbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisKKwlnaXQgc2hvcnRsb2cgLWUgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKKyMgZ2l0IGxvZyB3aXRoIC0tcHJldHR5IGZvcm1hdCB3aGljaCB1c2VzIHRoZSBuYW1lIGFuZCBlbWFpbCBtYWlsbWFwIHBsYWNlbWFya2VycworY2F0ID5leHBlY3QgPDwgRU9GCitBdXRob3IgQ1RPIDxjdG9AY29vbXBhbnkueHg+IG1hcHMgdG8gQ1RPIDxjdG9AY29tcGFueS54eD4KK0NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gbWFwcyB0byBDb21taXR0ZWQgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCitBdXRob3IgY2xhdXMgPG1lQGNvbXBhbnkueHg+IG1hcHMgdG8gU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KK0NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gbWFwcyB0byBDb21taXR0ZWQgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCitBdXRob3Igc2FudGEgPG1lQGNvbXBhbnkueHg+IG1hcHMgdG8gU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KK0NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gbWFwcyB0byBDb21taXR0ZWQgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCitBdXRob3IgbmljazIgPG5pY2syQGNvbXBhbnkueHg+IG1hcHMgdG8gT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+CitDb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IG1hcHMgdG8gQ29tbWl0dGVkIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KKworQXV0aG9yIG5pY2syIDxidWdzQGNvbXBhbnkueHg+IG1hcHMgdG8gT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+CitDb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IG1hcHMgdG8gQ29tbWl0dGVkIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KKworQXV0aG9yIG5pY2sxIDxidWdzQGNvbXBhbnkueHg+IG1hcHMgdG8gU29tZSBEdWRlIDxzb21lQGR1ZGUueHg+CitDb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IG1hcHMgdG8gQ29tbWl0dGVkIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KKworQXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiBtYXBzIHRvICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPgorQ29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiBtYXBzIHRvIENvbW1pdHRlZCA8JEdJVF9DT01NSVRURVJfRU1BSUw+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTG9nIG91dHB1dCAoY29tcGxleCBtYXBwaW5nKScgJworCWdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiJBdXRob3IgJWFuIDwlYWU+IG1hcHMgdG8gJWFOIDwlYUU+JW5Db21taXR0ZXIgJWNuIDwlY2U+IG1hcHMgdG8gJWNOIDwlY0U+JW4iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8IEVPRgorQXV0aG9yIGVtYWlsIGN0b0Bjb29tcGFueS54eCBoYXMgbG9jYWwtcGFydCBjdG8KK0NvbW1pdHRlciBlbWFpbCAkR0lUX0NPTU1JVFRFUl9FTUFJTCBoYXMgbG9jYWwtcGFydCAkVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCisKK0F1dGhvciBlbWFpbCBtZUBjb21wYW55Lnh4IGhhcyBsb2NhbC1wYXJ0IG1lCitDb21taXR0ZXIgZW1haWwgJEdJVF9DT01NSVRURVJfRU1BSUwgaGFzIGxvY2FsLXBhcnQgJFRFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRQorCitBdXRob3IgZW1haWwgbWVAY29tcGFueS54eCBoYXMgbG9jYWwtcGFydCBtZQorQ29tbWl0dGVyIGVtYWlsICRHSVRfQ09NTUlUVEVSX0VNQUlMIGhhcyBsb2NhbC1wYXJ0ICRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKKworQXV0aG9yIGVtYWlsIG5pY2syQGNvbXBhbnkueHggaGFzIGxvY2FsLXBhcnQgbmljazIKK0NvbW1pdHRlciBlbWFpbCAkR0lUX0NPTU1JVFRFUl9FTUFJTCBoYXMgbG9jYWwtcGFydCAkVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCisKK0F1dGhvciBlbWFpbCBidWdzQGNvbXBhbnkueHggaGFzIGxvY2FsLXBhcnQgYnVncworQ29tbWl0dGVyIGVtYWlsICRHSVRfQ09NTUlUVEVSX0VNQUlMIGhhcyBsb2NhbC1wYXJ0ICRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKKworQXV0aG9yIGVtYWlsIGJ1Z3NAY29tcGFueS54eCBoYXMgbG9jYWwtcGFydCBidWdzCitDb21taXR0ZXIgZW1haWwgJEdJVF9DT01NSVRURVJfRU1BSUwgaGFzIGxvY2FsLXBhcnQgJFRFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRQorCitBdXRob3IgZW1haWwgYXV0aG9yQGV4YW1wbGUuY29tIGhhcyBsb2NhbC1wYXJ0IGF1dGhvcgorQ29tbWl0dGVyIGVtYWlsICRHSVRfQ09NTUlUVEVSX0VNQUlMIGhhcyBsb2NhbC1wYXJ0ICRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMb2cgb3V0cHV0IChsb2NhbC1wYXJ0IGVtYWlsIGFkZHJlc3MpJyAnCisJZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6IkF1dGhvciBlbWFpbCAlYWUgaGFzIGxvY2FsLXBhcnQgJWFsJW5Db21taXR0ZXIgZW1haWwgJWNlIGhhcyBsb2NhbC1wYXJ0ICVjbCVuIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCBFT0YKK0F1dGhvcjogQ1RPIDxjdG9AY29tcGFueS54eD4KK0F1dGhvcjogU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KK0F1dGhvcjogU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KK0F1dGhvcjogT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+CitBdXRob3I6IE90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PgorQXV0aG9yOiBTb21lIER1ZGUgPHNvbWVAZHVkZS54eD4KK0F1dGhvcjogJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTG9nIG91dHB1dCB3aXRoIC0tdXNlLW1haWxtYXAnICcKKwlnaXQgbG9nIC0tdXNlLW1haWxtYXAgfCBncmVwIEF1dGhvciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCBFT0YKK0F1dGhvcjogQ1RPIDxjdG9AY29tcGFueS54eD4KK0F1dGhvcjogU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KK0F1dGhvcjogU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KK0F1dGhvcjogT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+CitBdXRob3I6IE90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PgorQXV0aG9yOiBTb21lIER1ZGUgPHNvbWVAZHVkZS54eD4KK0F1dGhvcjogJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTG9nIG91dHB1dCB3aXRoIGxvZy5tYWlsbWFwJyAnCisJZ2l0IC1jIGxvZy5tYWlsbWFwPVRydWUgbG9nIHwgZ3JlcCBBdXRob3IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nLm1haWxtYXA9ZmFsc2UgZGlzYWJsZXMgbWFpbG1hcCcgJworCWNhdCA+ZXhwZWN0IDw8LSBFT0YgJiYKKwlBdXRob3I6IENUTyA8Y3RvQGNvb21wYW55Lnh4PgorCUF1dGhvcjogY2xhdXMgPG1lQGNvbXBhbnkueHg+CisJQXV0aG9yOiBzYW50YSA8bWVAY29tcGFueS54eD4KKwlBdXRob3I6IG5pY2syIDxuaWNrMkBjb21wYW55Lnh4PgorCUF1dGhvcjogbmljazIgPGJ1Z3NAY29tcGFueS54eD4KKwlBdXRob3I6IG5pY2sxIDxidWdzQGNvbXBhbnkueHg+CisJQXV0aG9yOiAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4KKwlFT0YKKwlnaXQgLWMgbG9nLm1haWxtYXA9RmFsc2UgbG9nIHwgZ3JlcCBBdXRob3IgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdXNlLW1haWxtYXAgZGlzYWJsZXMgbWFpbG1hcCcgJworCWNhdCA+ZXhwZWN0IDw8LSBFT0YgJiYKKwlBdXRob3I6IENUTyA8Y3RvQGNvb21wYW55Lnh4PgorCUF1dGhvcjogY2xhdXMgPG1lQGNvbXBhbnkueHg+CisJQXV0aG9yOiBzYW50YSA8bWVAY29tcGFueS54eD4KKwlBdXRob3I6IG5pY2syIDxuaWNrMkBjb21wYW55Lnh4PgorCUF1dGhvcjogbmljazIgPGJ1Z3NAY29tcGFueS54eD4KKwlBdXRob3I6IG5pY2sxIDxidWdzQGNvbXBhbnkueHg+CisJQXV0aG9yOiAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4KKwlFT0YKKwlnaXQgbG9nIC0tbm8tdXNlLW1haWxtYXAgfCBncmVwIEF1dGhvciA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitBdXRob3I6IFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CitBdXRob3I6IFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR3JlcCBhdXRob3Igd2l0aCAtLXVzZS1tYWlsbWFwJyAnCisJZ2l0IGxvZyAtLXVzZS1tYWlsbWFwIC0tYXV0aG9yIFNhbnRhIHwgZ3JlcCBBdXRob3IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKK2NhdCA+ZXhwZWN0IDw8XEVPRgorQXV0aG9yOiBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorQXV0aG9yOiBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dyZXAgYXV0aG9yIHdpdGggbG9nLm1haWxtYXAnICcKKwlnaXQgLWMgbG9nLm1haWxtYXA9VHJ1ZSBsb2cgLS1hdXRob3IgU2FudGEgfCBncmVwIEF1dGhvciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cubWFpbG1hcCBpcyB0cnVlIGJ5IGRlZmF1bHQgdGhlc2UgZGF5cycgJworCWdpdCBsb2cgLS1hdXRob3IgU2FudGEgfCBncmVwIEF1dGhvciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPbmx5IGdyZXAgcmVwbGFjZWQgYXV0aG9yIHdpdGggLS11c2UtbWFpbG1hcCcgJworCWdpdCBsb2cgLS11c2UtbWFpbG1hcCAtLWF1dGhvciAiPGN0b0Bjb29tcGFueS54eD4iID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKKyMgZ2l0IGJsYW1lCitjYXQgPmV4cGVjdCA8PEVPRgorXk9CSkkgKCRHSVRfQVVUSE9SX05BTUUgICAgIERBVEUgMSkgb25lCitPQkpJRCAoU29tZSBEdWRlICAgIERBVEUgMikgdHdvCitPQkpJRCAoT3RoZXIgQXV0aG9yIERBVEUgMykgdGhyZWUKK09CSklEIChPdGhlciBBdXRob3IgREFURSA0KSBmb3VyCitPQkpJRCAoU2FudGEgQ2xhdXMgIERBVEUgNSkgZml2ZQorT0JKSUQgKFNhbnRhIENsYXVzICBEQVRFIDYpIHNpeAorT0JKSUQgKENUTyAgICAgICAgICBEQVRFIDcpIHNldmVuCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0JsYW1lIG91dHB1dCAoY29tcGxleCBtYXBwaW5nKScgJworCWdpdCBibGFtZSBvbmUgPmFjdHVhbCAmJgorCWZ1enpfYmxhbWUgYWN0dWFsID5hY3R1YWwuZnV6eiAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZnV6egorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK1NvbWUgRHVkZSA8c29tZUBkdWRlLnh4PgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLWF1dGhvciBob25vcnMgbWFpbG1hcCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1hdXRob3IgIm5pY2siIC0tYWxsb3ctZW1wdHkgLW1laWdodCAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIlNvbWUgRHVkZSIgLS1hbGxvdy1lbXB0eSAtbWVpZ2h0ICYmCisJZ2l0IHNob3cgLS1wcmV0dHk9Zm9ybWF0OiIlYW4gPCVhZT4lbiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjA0LXBhdGNoLWlkLnNoIGIvdC90NDIwNC1wYXRjaC1pZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZmY4YmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwNC1wYXRjaC1pZC5zaApAQCAtMCwwICsxLDE5NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwYXRjaC1pZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJYXM9ImEgYSBhIGEgYSBhIGEgYSIgJiYgIyBlaWdodCBhCisJdGVzdF93cml0ZV9saW5lcyAkYXMgPmZvbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgJGFzID5iYXIgJiYKKwlnaXQgYWRkIGZvbyBiYXIgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGluaXRpYWwgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICRhcyBiID5mb28gJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICRhcyBiID5iYXIgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGZpcnN0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNhbWUgbWFzdGVyICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tIHNhbWUtbXNnICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5vdHNhbWUgbWFzdGVyICYmCisJZWNobyBjID5mb28gJiYKKwllY2hvIGMgPmJhciAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtYSAtbSBub3RzYW1lLW1zZyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgYmFyIGZvbyA+YmFyLXRoZW4tZm9vICYmCisJdGVzdF93cml0ZV9saW5lcyBmb28gYmFyID5mb28tdGhlbi1iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gtaWQgb3V0cHV0IGlzIHdlbGwtZm9ybWVkJyAnCisJZ2l0IGxvZyAtcCAtMSB8IGdpdCBwYXRjaC1pZCA+b3V0cHV0ICYmCisJZ3JlcCAiXiRPSURfUkVHRVggJChnaXQgcmV2LXBhcnNlIEhFQUQpJCIgb3V0cHV0CisnCisKKyNjYWxjdWxhdGUgcGF0Y2ggaWQuIE1ha2Ugc3VyZSBvdXRwdXQgaXMgbm90IGVtcHR5LgorY2FsY19wYXRjaF9pZCAoKSB7CisJcGF0Y2hfbmFtZT0iJDEiCisJc2hpZnQKKwlnaXQgcGF0Y2gtaWQgIiRAIiB8CisJc2VkICJzLyAuKi8vIiA+cGF0Y2gtaWRfIiRwYXRjaF9uYW1lIiAmJgorCXRlc3RfbGluZV9jb3VudCAtZ3QgMCBwYXRjaC1pZF8iJHBhdGNoX25hbWUiCit9CisKK2dldF90b3BfZGlmZiAoKSB7CisJZ2l0IGxvZyAtcCAtMSAiJEAiIC1PIGJhci10aGVuLWZvbyAtLQorfQorCitnZXRfcGF0Y2hfaWQgKCkgeworCWdldF90b3BfZGlmZiAiJDEiIHwgY2FsY19wYXRjaF9pZCAiJEAiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoLWlkIGRldGVjdHMgZXF1YWxpdHknICcKKwlnZXRfcGF0Y2hfaWQgbWFzdGVyICYmCisJZ2V0X3BhdGNoX2lkIHNhbWUgJiYKKwl0ZXN0X2NtcCBwYXRjaC1pZF9tYXN0ZXIgcGF0Y2gtaWRfc2FtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaC1pZCBkZXRlY3RzIGluZXF1YWxpdHknICcKKwlnZXRfcGF0Y2hfaWQgbWFzdGVyICYmCisJZ2V0X3BhdGNoX2lkIG5vdHNhbWUgJiYKKwkhIHRlc3RfY21wIHBhdGNoLWlkX21hc3RlciBwYXRjaC1pZF9ub3RzYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoLWlkIHN1cHBvcnRzIGdpdC1mb3JtYXQtcGF0Y2ggb3V0cHV0JyAnCisJZ2V0X3BhdGNoX2lkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBzYW1lICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCB8IGNhbGNfcGF0Y2hfaWQgc2FtZSAmJgorCXRlc3RfY21wIHBhdGNoLWlkX21hc3RlciBwYXRjaC1pZF9zYW1lICYmCisJc2V0ICQoZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCB8IGdpdCBwYXRjaC1pZCkgJiYKKwl0ZXN0ICIkMiIgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZSBpcyBpcnJlbGV2YW50IGluIGZvb3RlcicgJworCWdldF9wYXRjaF9pZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgc2FtZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgfCBzZWQgInMvIFwkLy8iIHwgY2FsY19wYXRjaF9pZCBzYW1lICYmCisJdGVzdF9jbXAgcGF0Y2gtaWRfbWFzdGVyIHBhdGNoLWlkX3NhbWUKKycKKworY21wX3BhdGNoX2lkICgpIHsKKwlpZgorCQl0ZXN0ICIkMSIgPSAicmVsZXZhbnQiCisJdGhlbgorCQkhIHRlc3RfY21wIHBhdGNoLWlkXyIkMiIgcGF0Y2gtaWRfIiQzIgorCWVsc2UKKwkJdGVzdF9jbXAgcGF0Y2gtaWRfIiQyIiBwYXRjaC1pZF8iJDMiCisJZmkKK30KKwordGVzdF9wYXRjaF9pZF9maWxlX29yZGVyICgpIHsKKwlyZWxldmFudD0iJDEiCisJc2hpZnQKKwluYW1lPSJvcmRlci0kezF9LSRyZWxldmFudCIKKwlzaGlmdAorCWdldF90b3BfZGlmZiAibWFzdGVyIiB8IGNhbGNfcGF0Y2hfaWQgIiRuYW1lIiAiJEAiICYmCisJZ2l0IGNoZWNrb3V0IHNhbWUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC1PIGZvby10aGVuLWJhciB8CisJCWNhbGNfcGF0Y2hfaWQgIm9yZGVyZWQtJG5hbWUiICIkQCIgJiYKKwljbXBfcGF0Y2hfaWQgJHJlbGV2YW50ICIkbmFtZSIgIm9yZGVyZWQtJG5hbWUiCisKK30KKworIyBjb21iaW5lZCB0ZXN0IGZvciBvcHRpb25zOiBhZGQgbW9yZSB0ZXN0cyBoZXJlIHRvIG1ha2UgdGhlbQorIyBydW4gd2l0aCBhbGwgb3B0aW9ucwordGVzdF9wYXRjaF9pZCAoKSB7CisJdGVzdF9wYXRjaF9pZF9maWxlX29yZGVyICIkQCIKK30KKworIyBzbWFsbCB0ZXN0cyB3aXRoIGRldGFpbGVkIGRpYWdub3N0aWMgZm9yIGJhc2ljIG9wdGlvbnMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIG9yZGVyIGlzIGlycmVsZXZhbnQgd2l0aCAtLXN0YWJsZScgJworCXRlc3RfcGF0Y2hfaWRfZmlsZV9vcmRlciBpcnJlbGV2YW50IC0tc3RhYmxlIC0tc3RhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgb3JkZXIgaXMgcmVsZXZhbnQgd2l0aCAtLXVuc3RhYmxlJyAnCisJdGVzdF9wYXRjaF9pZF9maWxlX29yZGVyIHJlbGV2YW50IC0tdW5zdGFibGUgLS11bnN0YWJsZQorJworCisjTm93IHRlc3QgdmFyaW91cyBvcHRpb24gY29tYmluYXRpb25zLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCBpcyB1bnN0YWJsZScgJworCXRlc3RfcGF0Y2hfaWQgcmVsZXZhbnQgZGVmYXVsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaGlkLnN0YWJsZSA9IHRydWUgaXMgc3RhYmxlJyAnCisJdGVzdF9jb25maWcgcGF0Y2hpZC5zdGFibGUgdHJ1ZSAmJgorCXRlc3RfcGF0Y2hfaWQgaXJyZWxldmFudCBwYXRjaGlkLnN0YWJsZT10cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoaWQuc3RhYmxlID0gZmFsc2UgaXMgdW5zdGFibGUnICcKKwl0ZXN0X2NvbmZpZyBwYXRjaGlkLnN0YWJsZSBmYWxzZSAmJgorCXRlc3RfcGF0Y2hfaWQgcmVsZXZhbnQgcGF0Y2hpZC5zdGFibGU9ZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS11bnN0YWJsZSBvdmVycmlkZXMgcGF0Y2hpZC5zdGFibGUgPSB0cnVlJyAnCisJdGVzdF9jb25maWcgcGF0Y2hpZC5zdGFibGUgdHJ1ZSAmJgorCXRlc3RfcGF0Y2hfaWQgcmVsZXZhbnQgcGF0Y2hpZC5zdGFibGU9dHJ1ZS0tdW5zdGFibGUgLS11bnN0YWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN0YWJsZSBvdmVycmlkZXMgcGF0Y2hpZC5zdGFibGUgPSBmYWxzZScgJworCXRlc3RfY29uZmlnIHBhdGNoaWQuc3RhYmxlIGZhbHNlICYmCisJdGVzdF9wYXRjaF9pZCBpcnJlbGV2YW50IHBhdGNoaWQuc3RhYmxlPWZhbHNlLS1zdGFibGUgLS1zdGFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gtaWQgc3VwcG9ydHMgZ2l0LWZvcm1hdC1wYXRjaCBNSU1FIG91dHB1dCcgJworCWdldF9wYXRjaF9pZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgc2FtZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1hdHRhY2ggLS1zdGRvdXQgfCBjYWxjX3BhdGNoX2lkIHNhbWUgJiYKKwl0ZXN0X2NtcCBwYXRjaC1pZF9tYXN0ZXIgcGF0Y2gtaWRfc2FtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaC1pZCByZXNwZWN0cyBjb25maWcgZnJvbSBzdWJkaXInICcKKwl0ZXN0X2NvbmZpZyBwYXRjaGlkLnN0YWJsZSB0cnVlICYmCisJbWtkaXIgc3ViZGlyICYmCisKKwkjIGNvcHkgdGhlc2UgYmVjYXVzZSB0ZXN0X3BhdGNoX2lkKCkgbG9va3MgZm9yIHRoZW0gaW4KKwkjIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorCWNwIGJhci10aGVuLWZvbyBmb28tdGhlbi1iYXIgc3ViZGlyICYmCisKKwkoCisJCWNkIHN1YmRpciAmJgorCQl0ZXN0X3BhdGNoX2lkIGlycmVsZXZhbnQgcGF0Y2hpZC5zdGFibGU9dHJ1ZQorCSkKKycKKworY2F0ID5ub25sIDw8XEVPRgorZGlmZiAtLWdpdCBpL2Egdy9hCitpbmRleCBlNjlkZTI5Li4yZTY1ZWZlIDEwMDY0NAorLS0tIGkvYQorKysrIHcvYQorQEAgLTAsMCArMSBAQAorK2EKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBpL2Igdy9iCitpbmRleCBlNjlkZTI5Li42MTc4MDc5IDEwMDY0NAorLS0tIGkvYgorKysrIHcvYgorQEAgLTAsMCArMSBAQAorK2IKK0VPRgorCitjYXQgPndpdGhubCA8PFxFT0YKK2RpZmYgLS1naXQgaS9hIHcvYQoraW5kZXggZTY5ZGUyOS4uNzg5ODE5MiAxMDA2NDQKKy0tLSBpL2EKKysrKyB3L2EKK0BAIC0wLDAgKzEgQEAKKythCitkaWZmIC0tZ2l0IGkvYiB3L2IKK2luZGV4IGU2OWRlMjkuLjYxNzgwNzkgMTAwNjQ0CistLS0gaS9iCisrKysgdy9iCitAQCAtMCwwICsxIEBACisrYgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoLWlkIGhhbmRsZXMgbm8tbmwtYXQtZW9mIG1hcmtlcnMnICcKKwljYXQgbm9ubCB8IGNhbGNfcGF0Y2hfaWQgbm9ubCAmJgorCWNhdCB3aXRobmwgfCBjYWxjX3BhdGNoX2lkIHdpdGhubCAmJgorCXRlc3RfY21wIHBhdGNoLWlkX25vbmwgcGF0Y2gtaWRfd2l0aG5sCisnCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDUtbG9nLXByZXR0eS1mb3JtYXRzLnNoIGIvdC90NDIwNS1sb2ctcHJldHR5LWZvcm1hdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjA0YzE0OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMDUtbG9nLXByZXR0eS1mb3JtYXRzLnNoCkBAIC0wLDAgKzEsODcwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwLCBXaWxsIFBhbG1lcgorIyBDb3B5cmlnaHQgKGMpIDIwMTEsIEFsZXhleSBTaHVta2luICgrIG5vbi1VVEYtOCBjb21taXQgZW5jb2RpbmcgdGVzdHMpCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcHJldHR5IGZvcm1hdHMnCisuIC4vdGVzdC1saWIuc2gKKworIyBUZXN0ZWQgbm9uLVVURi04IGVuY29kaW5nCit0ZXN0X2VuY29kaW5nPSJJU084ODU5LTEiCisKK3NhbXBsZV91dGY4X3BhcnQ9JChwcmludGYgImZcMzAzXDI0NG5nIikKKworY29tbWl0X21zZyAoKSB7CisJIyBTdHJpbmcgImluaXRpYWwuIGluaXRpYWwiIHBhcnRseSBpbiBHZXJtYW4KKwkjICh0cmFuc2xhdGVkIHdpdGggR29vZ2xlIFRyYW5zbGF0ZSksCisJIyBlbmNvZGVkIGluIFVURi04LCB1c2VkIGFzIGEgY29tbWl0IGxvZyBtZXNzYWdlIGJlbG93LgorCW1zZz0iaW5pdGlhbC4gYW4ke3NhbXBsZV91dGY4X3BhcnR9bGljaFxuIgorCWlmIHRlc3QgLW4gIiQxIgorCXRoZW4KKwkJcHJpbnRmICIkbXNnIiB8IGljb252IC1mIHV0Zi04IC10ICIkMSIKKwllbHNlCisJCXByaW50ZiAiJG1zZyIKKwlmaQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYmFzaWMgcmVwb3MnICcKKwk+Zm9vICYmCisJPmJhciAmJgorCWdpdCBhZGQgZm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdEVuY29kaW5nICR0ZXN0X2VuY29kaW5nICYmCisJY29tbWl0X21zZyAkdGVzdF9lbmNvZGluZyB8IGdpdCBjb21taXQgLUYgLSAmJgorCWdpdCBhZGQgYmFyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGJhciIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgaTE4bi5jb21taXRFbmNvZGluZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhcyBidWlsdGluIGZvcm1hdCcgJworCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIHByZXR0eS50ZXN0LWFsaWFzIG9uZWxpbmUgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRlc3QtYWxpYXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhcyBtYXNraW5nIGJ1aWx0aW4gZm9ybWF0JyAnCisJZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgcHJldHR5Lm9uZWxpbmUgIiVIIiAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIHVzZXItZGVmaW5lZCBmb3JtYXQnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JWgiID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgcHJldHR5LnRlc3QtYWxpYXMgImZvcm1hdDolaCIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRlc3QtYWxpYXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhcyB1c2VyLWRlZmluZWQgdGZvcm1hdCB3aXRoICVzIChJU084ODU5LTEgZW5jb2RpbmcpJyAnCisJZ2l0IGNvbmZpZyBpMThuLmxvZ091dHB1dEVuY29kaW5nICR0ZXN0X2VuY29kaW5nICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmV4cGVjdGVkLXMgJiYKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICVzIiA+YWN0dWFsLXMgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgaTE4bi5sb2dPdXRwdXRFbmNvZGluZyAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXMgYWN0dWFsLXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgdXNlci1kZWZpbmVkIHRmb3JtYXQgd2l0aCAlcyAodXRmLTggZW5jb2RpbmcpJyAnCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmV4cGVjdGVkLXMgJiYKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICVzIiA+YWN0dWFsLXMgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1zIGFjdHVhbC1zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIHVzZXItZGVmaW5lZCB0Zm9ybWF0JyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCIgPmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyBwcmV0dHkudGVzdC1hbGlhcyAidGZvcm1hdDolaCIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRlc3QtYWxpYXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhcyBub24tZXhpc3RlbnQgZm9ybWF0JyAnCisJZ2l0IGNvbmZpZyBwcmV0dHkudGVzdC1hbGlhcyBmb3JtYXQtdGhhdC13aWxsLW5ldmVyLWV4aXN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtLXByZXR0eT10ZXN0LWFsaWFzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIG9mIGFuIGFsaWFzJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCIgPmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyBwcmV0dHkudGVzdC1mb28gInRmb3JtYXQ6JWgiICYmCisJZ2l0IGNvbmZpZyBwcmV0dHkudGVzdC1iYXIgdGVzdC1mb28gJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRlc3QtYmFyID5hY3R1YWwgJiYgdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIG1hc2tpbmcgYW4gYWxpYXMnICcKKwlnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDoiVHdvICVIIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIHByZXR0eS5kdXBsaWNhdGUgImZvcm1hdDpPbmUgJUgiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBwcmV0dHkuZHVwbGljYXRlICJmb3JtYXQ6VHdvICVIIiAmJgorCWdpdCBsb2cgLS1wcmV0dHk9ZHVwbGljYXRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgbG9vcCcgJworCWdpdCBjb25maWcgcHJldHR5LnRlc3QtZm9vIHRlc3QtYmFyICYmCisJZ2l0IGNvbmZpZyBwcmV0dHkudGVzdC1iYXIgdGVzdC1mb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC0tcHJldHR5PXRlc3QtZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTCBzZXBhcmF0aW9uJyAnCisJcHJpbnRmICJhZGQgYmFyXDAkKGNvbW1pdF9tc2cpIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgbG9nIC16IC0tcHJldHR5PSJmb3JtYXQ6JXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTlVMIHRlcm1pbmF0aW9uJyAnCisJcHJpbnRmICJhZGQgYmFyXDAkKGNvbW1pdF9tc2cpXDAiID5leHBlY3RlZCAmJgorCWdpdCBsb2cgLXogLS1wcmV0dHk9InRmb3JtYXQ6JXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTlVMIHNlcGFyYXRpb24gd2l0aCAtLXN0YXQnICcKKwlzdGF0MF9wYXJ0PSQoZ2l0IGRpZmYgLS1zdGF0IEhFQUReIEhFQUQpICYmCisJc3RhdDFfcGFydD0kKGdpdCBkaWZmLXRyZWUgLS1uby1jb21taXQtaWQgLS1zdGF0IC0tcm9vdCBIRUFEXikgJiYKKwlwcmludGYgImFkZCBiYXJcbiRzdGF0MF9wYXJ0XG5cMCQoY29tbWl0X21zZylcbiRzdGF0MV9wYXJ0XG4iID5leHBlY3RlZCAmJgorCWdpdCBsb2cgLXogLS1zdGF0IC0tcHJldHR5PSJmb3JtYXQ6JXMiID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgQ19MT0NBTEVfT1VUUFVUICdOVUwgdGVybWluYXRpb24gd2l0aCAtLXN0YXQnICcKKwlzdGF0MF9wYXJ0PSQoZ2l0IGRpZmYgLS1zdGF0IEhFQUReIEhFQUQpICYmCisJc3RhdDFfcGFydD0kKGdpdCBkaWZmLXRyZWUgLS1uby1jb21taXQtaWQgLS1zdGF0IC0tcm9vdCBIRUFEXikgJiYKKwlwcmludGYgImFkZCBiYXJcbiRzdGF0MF9wYXJ0XG5cMCQoY29tbWl0X21zZylcbiRzdGF0MV9wYXJ0XG4wIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgbG9nIC16IC0tc3RhdCAtLXByZXR0eT0idGZvcm1hdDolcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitmb3IgcCBpbiBzaG9ydCBtZWRpdW0gZnVsbCBmdWxsZXIgZW1haWwgcmF3CitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIk5VTCB0ZXJtaW5hdGlvbiB3aXRoIC0tcmVmbG9nIC0tcHJldHR5PSRwIiAnCisJCXJldnM9IiQoZ2l0IHJldi1saXN0IC0tcmVmbG9nKSIgJiYKKwkJZm9yIHIgaW4gJHJldnMKKwkJZG8KKwkJCWdpdCBzaG93IC1zICIkciIgLS1wcmV0dHk9IiRwIiAmJgorCQkJcHJpbnRmICJcMCIgfHwgcmV0dXJuIDEKKwkJZG9uZSA+ZXhwZWN0ICYmCisJCXsKKwkJCWdpdCBsb2cgLXogLS1yZWZsb2cgLS1wcmV0dHk9IiRwIiAmJgorCQkJcHJpbnRmICJcMCIKKwkJfSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTCB0ZXJtaW5hdGlvbiB3aXRoIC0tcmVmbG9nIC0tcHJldHR5PW9uZWxpbmUnICcKKwlyZXZzPSIkKGdpdCByZXYtbGlzdCAtLXJlZmxvZykiICYmCisJZm9yIHIgaW4gJHJldnMKKwlkbworCQlnaXQgc2hvdyAtcyAtLXByZXR0eT1vbmVsaW5lICIkciIgPnJhdyAmJgorCQljYXQgcmF3IHwgbGZfdG9fbnVsIHx8IGV4aXQgMQorCWRvbmUgPmV4cGVjdCAmJgorCSMgdGhlIHRyYWlsaW5nIE5VTCBpcyBhbHJlYWR5IHByb2R1Y2VkIHNvIHdlIGRvIG5vdCBuZWVkIHRvCisJIyBvdXRwdXQgYW5vdGhlciBvbmUKKwlnaXQgbG9nIC16IC0tcHJldHR5PW9uZWxpbmUgLS1yZWZsb2cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbW9yZSBjb21taXRzJyAnCisJdGVzdF9jb21taXQgIm1lc3NhZ2Ugb25lIiBvbmUgb25lIG1lc3NhZ2Utb25lICYmCisJdGVzdF9jb21taXQgIm1lc3NhZ2UgdHdvIiB0d28gdHdvIG1lc3NhZ2UtdHdvICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQgSEVBRH4wKSAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0IEhFQUR+MSkgJiYKKwloZWFkMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydCBIRUFEfjIpICYmCisJaGVhZDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQgSEVBRH4zKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCg0MCklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgPmV4cGVjdGVkICYmCisJbWVzc2FnZSB0d28gICAgICAgICAgICAgICAgICAgICAgICAgICAgWgorCW1lc3NhZ2Ugb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKKwlhZGQgYmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaCisJJChjb21taXRfbXNnKSAgICAgICAgICAgICAgICAgICAgWgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCisJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDQwKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LUVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorCW1lc3NhZ2UgdHdvICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKKwltZXNzYWdlIG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBaCisJYWRkIGJhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWgorCSQoY29tbWl0X21zZykgICAgICAgICAgICAgICAgICAgIFoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyBhdCB0aGUgbnRoIGNvbHVtbicgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJTx8KDQwKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwkkaGVhZDEgbWVzc2FnZSB0d28gICAgICAgICAgICAgICAgICAgIFoKKwkkaGVhZDIgbWVzc2FnZSBvbmUgICAgICAgICAgICAgICAgICAgIFoKKwkkaGVhZDMgYWRkIGJhciAgICAgICAgICAgICAgICAgICAgICAgIFoKKwkkaGVhZDQgJChjb21taXRfbXNnKSAgICAgICAgICAgIFoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyBhdCB0aGUgbnRoIGNvbHVtbicgJworCUNPTFVNTlM9NTAgZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAlPHwoLTEwKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwkkaGVhZDEgbWVzc2FnZSB0d28gICAgICAgICAgICAgICAgICAgIFoKKwkkaGVhZDIgbWVzc2FnZSBvbmUgICAgICAgICAgICAgICAgICAgIFoKKwkkaGVhZDMgYWRkIGJhciAgICAgICAgICAgICAgICAgICAgICAgIFoKKwkkaGVhZDQgJChjb21taXRfbXNnKSAgICAgICAgICAgIFoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyBhdCB0aGUgbnRoIGNvbHVtbi4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJworCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAlPHwoNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJJGhlYWQxIG1lc3NhZ2UgdHdvICAgICAgICAgICAgICAgICAgICBaCisJJGhlYWQyIG1lc3NhZ2Ugb25lICAgICAgICAgICAgICAgICAgICBaCisJJGhlYWQzIGFkZCBiYXIgICAgICAgICAgICAgICAgICAgICAgICBaCisJJGhlYWQ0ICQoY29tbWl0X21zZykgICAgICAgICAgICBaCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnQgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBubyBwYWRkaW5nJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCgxKSVzIiA+YWN0dWFsICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwltZXNzYWdlIHR3bworCW1lc3NhZ2Ugb25lCisJYWRkIGJhcgorCSQoY29tbWl0X21zZykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG5vIHBhZGRpbmcuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JTwoMSklcyIgPmFjdHVhbCAmJgorCWNhdCA8PC1FT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKwltZXNzYWdlIHR3bworCW1lc3NhZ2Ugb25lCisJYWRkIGJhcgorCSQoY29tbWl0X21zZykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIHRydW5jJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCgxMCx0cnVuYyklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PC1cRU9GID5leHBlY3RlZCAmJgorCW1lc3NhZ2UgLi4KKwltZXNzYWdlIC4uCisJYWRkIGJhciAgWgorCWluaXRpYWwuLi4KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIHRydW5jLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCisJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDEwLHRydW5jKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LVxFT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKwltZXNzYWdlIC4uCisJbWVzc2FnZSAuLgorCWFkZCBiYXIgIFoKKwlpbml0aWFsLi4uCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnQgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBsdHJ1bmMnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDEwLGx0cnVuYyklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgPmV4cGVjdGVkICYmCisJLi5zYWdlIHR3bworCS4uc2FnZSBvbmUKKwlhZGQgYmFyICBaCisJLi4ke3NhbXBsZV91dGY4X3BhcnR9bGljaAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggbHRydW5jLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCisJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDEwLGx0cnVuYyklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKwkuLnNhZ2UgdHdvCisJLi5zYWdlIG9uZQorCWFkZCBiYXIgIFoKKwkuLiR7c2FtcGxlX3V0ZjhfcGFydH1saWNoCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnQgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBtdHJ1bmMnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDEwLG10cnVuYyklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PC1cRU9GID5leHBlY3RlZCAmJgorCW1lc3MuLiB0d28KKwltZXNzLi4gb25lCisJYWRkIGJhciAgWgorCWluaXQuLmxpY2gKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG10cnVuYy4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJworCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCgxMCxtdHJ1bmMpJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtXEVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorCW1lc3MuLiB0d28KKwltZXNzLi4gb25lCisJYWRkIGJhciAgWgorCWluaXQuLmxpY2gKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU+KDQwKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwlaICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgdHdvCisJWiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIG9uZQorCVogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCBiYXIKKwlaICAgICAgICAgICAgICAgICAgICAkKGNvbW1pdF9tc2cpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JpZ2h0IGFsaWdubWVudCBmb3JtYXR0aW5nLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCisJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU+KDQwKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LUVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorCVogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSB0d28KKwlaICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Ugb25lCisJWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkIGJhcgorCVogICAgICAgICAgICAgICAgICAgICQoY29tbWl0X21zZykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcgYXQgdGhlIG50aCBjb2x1bW4nICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICU+fCg0MCklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgPmV4cGVjdGVkICYmCisJJGhlYWQxICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgdHdvCisJJGhlYWQyICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Ugb25lCisJJGhlYWQzICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgYmFyCisJJGhlYWQ0ICAgICAgICAgICAgICAkKGNvbW1pdF9tc2cpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JpZ2h0IGFsaWdubWVudCBmb3JtYXR0aW5nIGF0IHRoZSBudGggY29sdW1uJyAnCisJQ09MVU1OUz01MCBnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICU+fCgtMTApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GID5leHBlY3RlZCAmJgorCSRoZWFkMSAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIHR3bworCSRoZWFkMiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIG9uZQorCSRoZWFkMyAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkIGJhcgorCSRoZWFkNCAgICAgICAgICAgICAgJChjb21taXRfbXNnKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyBhdCB0aGUgbnRoIGNvbHVtbi4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJworCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAlPnwoNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJJGhlYWQxICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgdHdvCisJJGhlYWQyICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Ugb25lCisJJGhlYWQzICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgYmFyCisJJGhlYWQ0ICAgICAgICAgICAgICAkKGNvbW1pdF9tc2cpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKyMgTm90ZTogU3BhY2UgYmV0d2VlbiAnbWVzc2FnZScgYW5kICd0d28nIHNob3VsZCBiZSBpbiB0aGUgc2FtZSBjb2x1bW4KKyMgYXMgaW4gcHJldmlvdXMgdGVzdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JpZ2h0IGFsaWdubWVudCBmb3JtYXR0aW5nIGF0IHRoZSBudGggY29sdW1uIHdpdGggLS1ncmFwaC4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJworCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLWdyYXBoIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICU+fCg0MCklcyIgPmFjdHVhbCAmJgorCWljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCA8PC1FT0YgJiYKKwkqICRoZWFkMSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSB0d28KKwkqICRoZWFkMiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSBvbmUKKwkqICRoZWFkMyAgICAgICAgICAgICAgICAgICAgICAgIGFkZCBiYXIKKwkqICRoZWFkNCAgICAgICAgICAgICQoY29tbWl0X21zZykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBubyBwYWRkaW5nJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolPigxKSVzIiA+YWN0dWFsICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwltZXNzYWdlIHR3bworCW1lc3NhZ2Ugb25lCisJYWRkIGJhcgorCSQoY29tbWl0X21zZykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBubyBwYWRkaW5nIGFuZCB3aXRoIC0tZ3JhcGgnICcKKwlnaXQgbG9nIC0tZ3JhcGggLS1wcmV0dHk9InRmb3JtYXQ6JT4oMSklcyIgPmFjdHVhbCAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdGVkICYmCisJKiBtZXNzYWdlIHR3bworCSogbWVzc2FnZSBvbmUKKwkqIGFkZCBiYXIKKwkqICQoY29tbWl0X21zZykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBubyBwYWRkaW5nLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCisJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU+KDEpJXMiID5hY3R1YWwgJiYKKwljYXQgPDwtRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJbWVzc2FnZSB0d28KKwltZXNzYWdlIG9uZQorCWFkZCBiYXIKKwkkKGNvbW1pdF9tc2cpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NlbnRlciBhbGlnbm1lbnQgZm9ybWF0dGluZycgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JT48KDQwKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwlaICAgICAgICAgICAgIG1lc3NhZ2UgdHdvICAgICAgICAgICAgICBaCisJWiAgICAgICAgICAgICBtZXNzYWdlIG9uZSAgICAgICAgICAgICAgWgorCVogICAgICAgICAgICAgICBhZGQgYmFyICAgICAgICAgICAgICAgIFoKKwlaICAgICAgICAgJChjb21taXRfbXNnKSAgICAgICAgICBaCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NlbnRlciBhbGlnbm1lbnQgZm9ybWF0dGluZy4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJworCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLXByZXR0eT0idGZvcm1hdDolPjwoNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJWiAgICAgICAgICAgICBtZXNzYWdlIHR3byAgICAgICAgICAgICAgWgorCVogICAgICAgICAgICAgbWVzc2FnZSBvbmUgICAgICAgICAgICAgIFoKKwlaICAgICAgICAgICAgICAgYWRkIGJhciAgICAgICAgICAgICAgICBaCisJWiAgICAgICAgICQoY29tbWl0X21zZykgICAgICAgICAgWgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2VudGVyIGFsaWdubWVudCBmb3JtYXR0aW5nIGF0IHRoZSBudGggY29sdW1uJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAlPjx8KDQwKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwkkaGVhZDEgICAgICAgICAgIG1lc3NhZ2UgdHdvICAgICAgICAgIFoKKwkkaGVhZDIgICAgICAgICAgIG1lc3NhZ2Ugb25lICAgICAgICAgIFoKKwkkaGVhZDMgICAgICAgICAgICAgYWRkIGJhciAgICAgICAgICAgIFoKKwkkaGVhZDQgICAgICAgJChjb21taXRfbXNnKSAgICAgIFoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2VudGVyIGFsaWdubWVudCBmb3JtYXR0aW5nIGF0IHRoZSBudGggY29sdW1uJyAnCisJQ09MVU1OUz03MCBnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICU+PHwoLTMwKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwkkaGVhZDEgICAgICAgICAgIG1lc3NhZ2UgdHdvICAgICAgICAgIFoKKwkkaGVhZDIgICAgICAgICAgIG1lc3NhZ2Ugb25lICAgICAgICAgIFoKKwkkaGVhZDMgICAgICAgICAgICAgYWRkIGJhciAgICAgICAgICAgIFoKKwkkaGVhZDQgICAgICAgJChjb21taXRfbXNnKSAgICAgIFoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2VudGVyIGFsaWdubWVudCBmb3JtYXR0aW5nIGF0IHRoZSBudGggY29sdW1uLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCisJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICU+PHwoNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJJGhlYWQxICAgICAgICAgICBtZXNzYWdlIHR3byAgICAgICAgICBaCisJJGhlYWQyICAgICAgICAgICBtZXNzYWdlIG9uZSAgICAgICAgICBaCisJJGhlYWQzICAgICAgICAgICAgIGFkZCBiYXIgICAgICAgICAgICBaCisJJGhlYWQ0ICAgICAgICQoY29tbWl0X21zZykgICAgICBaCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NlbnRlciBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG5vIHBhZGRpbmcnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU+PCgxKSVzIiA+YWN0dWFsICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwltZXNzYWdlIHR3bworCW1lc3NhZ2Ugb25lCisJYWRkIGJhcgorCSQoY29tbWl0X21zZykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworIyBzYXZlIEhFQUQncyBTSEEtMSBkaWdlc3QgKHdpdGggbm8gYWJicmV2aWF0aW9ucykgdG8gdXNlIGl0IGJlbG93CisjIGFzIGZhciBhcyB0aGUgbmV4dCB0ZXN0IGFtZW5kcyBIRUFECitvbGRfaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUR+MCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NlbnRlciBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG5vIHBhZGRpbmcuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JT48KDEpJXMiID5hY3R1YWwgJiYKKwljYXQgPDwtRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJbWVzc2FnZSB0d28KKwltZXNzYWdlIG9uZQorCWFkZCBiYXIKKwkkKGNvbW1pdF9tc2cpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnQvcmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBzdGVhbGluZycgJworCWdpdCBjb21taXQgLS1hbWVuZCAtbSBzaG9ydCAtLWF1dGhvciAibG9uZyBsb25nIGxvbmcgPGxvbmdAbWUuY29tPiIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDEwLHRydW5jKSVzJT4+KDEwLGx0cnVuYyklIGFuIiA+YWN0dWFsICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJc2hvcnQgbG9uZyAgbG9uZyBsb25nCisJbWVzc2FnZSAuLiAgIEEgVSBUaG9yCisJYWRkIGJhciAgICAgIEEgVSBUaG9yCisJaW5pdGlhbC4uLiAgIEEgVSBUaG9yCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0L3JpZ2h0IGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggc3RlYWxpbmcuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JTwoMTAsdHJ1bmMpJXMlPj4oMTAsbHRydW5jKSUgYW4iID5hY3R1YWwgJiYKKwljYXQgPDwtXEVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorCXNob3J0IGxvbmcgIGxvbmcgbG9uZworCW1lc3NhZ2UgLi4gICBBIFUgVGhvcgorCWFkZCBiYXIgICAgICBBIFUgVGhvcgorCWluaXRpYWwuLi4gICBBIFUgVGhvcgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJidWZfdXRmOF9yZXBsYWNlKCkgbm90IHByb2R1Y2luZyBOVUwnICcKKwlnaXQgbG9nIC0tY29sb3IgLS1wcmV0dHk9InRmb3JtYXQ6JTwoMTAsdHJ1bmMpJXMlPj4oMTAsbHRydW5jKSVDKGF1dG8pJWQiIHwKKwkJdGVzdF9kZWNvZGVfY29sb3IgfAorCQludWxfdG9fcSA+YWN0dWFsICYmCisJISBncmVwIFEgYWN0dWFsCisnCisKKyMgSVNPIHN0cmljdCBkYXRlIGZvcm1hdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnSVNPIGFuZCBJU08tc3RyaWN0IGRhdGUgZm9ybWF0cyBkaXNwbGF5IHRoZSBzYW1lIHZhbHVlcycgJworCWdpdCBsb2cgLS1mb3JtYXQ9JWFpJW4lY2kgfAorCXNlZCAtZSAicy8gL1QvOyBzLyAvLzsgcy8uLlwkLzomLyIgPmV4cGVjdGVkICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lYUklbiVjSSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0IGRhdGUnICcKKwlnaXQgbG9nIC0tZm9ybWF0PSVhZCVuJWNkIC0tZGF0ZT1zaG9ydCA+ZXhwZWN0ZWQgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVhcyVuJWNzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworIyBnZXQgbmV3IGRpZ2VzdHMgKHdpdGggbm8gYWJicmV2aWF0aW9ucykKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBsb2cgZGVjb3JhdGlvbiB0ZXN0cycgJworCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEfjApICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUR+MSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGRlY29yYXRpb24gcHJvcGVybHkgZm9sbG93cyB0YWcgY2hhaW4nICcKKwlnaXQgdGFnIC1hIHRhZzEgLW0gdGFnMSAmJgorCWdpdCB0YWcgLWEgdGFnMiAtbSB0YWcyIHRhZzEgJiYKKwlnaXQgdGFnIC1kIHRhZzEgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gc2hvcnRlciAmJgorCWdpdCBsb2cgLS1uby13YWxrIC0tdGFncyAtLXByZXR0eT0iJUggJWQiIC0tZGVjb3JhdGU9ZnVsbCA+YWN0dWFsICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwkkaGVhZDIgICh0YWc6IHJlZnMvdGFncy9tZXNzYWdlLW9uZSkKKwkkb2xkX2hlYWQxICAodGFnOiByZWZzL3RhZ3MvbWVzc2FnZS10d28pCisJJGhlYWQxICAodGFnOiByZWZzL3RhZ3MvdGFnMikKKwlFT0YKKwlzb3J0IC1rMyBhY3R1YWwgPmFjdHVhbDEgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuIGxvZyBkZWNvcmF0aW9uJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS10YWdzIC0tcHJldHR5PSIlSCAlRCIgLS1kZWNvcmF0ZT1mdWxsID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCSRoZWFkMiB0YWc6IHJlZnMvdGFncy9tZXNzYWdlLW9uZQorCSRvbGRfaGVhZDEgdGFnOiByZWZzL3RhZ3MvbWVzc2FnZS10d28KKwkkaGVhZDEgdGFnOiByZWZzL3RhZ3MvdGFnMgorCUVPRgorCXNvcnQgLWszIGFjdHVhbCA+YWN0dWFsMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDEKKycKKworY2F0ID50cmFpbGVycyA8PEVPRgorU2lnbmVkLW9mZi1ieTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0Fja2VkLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorWyB2MiB1cGRhdGVkIHBhdGNoIGRlc2NyaXB0aW9uIF0KK1NpZ25lZC1vZmYtYnk6IEEgVSBUaG9yCisgIDxhdXRob3JAZXhhbXBsZS5jb20+CitFT0YKKwordW5mb2xkICgpIHsKKwlwZXJsIC0wcGUgJ3MvXG5ccysvIC9nJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgdHJhaWxlciB0ZXN0cycgJworCWVjaG8gIlNvbWUgY29udGVudHMiID50cmFpbGVyZmlsZSAmJgorCWdpdCBhZGQgdHJhaWxlcmZpbGUgJiYKKwlnaXQgY29tbWl0IC1GIC0gPDwtRU9GCisJdHJhaWxlcnM6IHRoaXMgY29tbWl0IG1lc3NhZ2UgaGFzIHRyYWlsZXJzCisKKwlUaGlzIGNvbW1pdCBpcyBhIHRlc3QgY29tbWl0IHdpdGggdHJhaWxlcnMgYXQgdGhlIGVuZC4gV2UgcGFyc2UgdGhpcworCW1lc3NhZ2UgYW5kIGRpc3BsYXkgdGhlIHRyYWlsZXJzIHVzaW5nICUodHJhaWxlcnMpLgorCisJJChjYXQgdHJhaWxlcnMpCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXR0eSBmb3JtYXQgJSh0cmFpbGVycykgc2hvd3MgdHJhaWxlcnMnICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT0iJSh0cmFpbGVycykiID5hY3R1YWwgJiYKKwl7CisJCWNhdCB0cmFpbGVycyAmJgorCQllY2hvCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKHRyYWlsZXJzOm9ubHkpIHNob3dzIG9ubHkgImtleTogdmFsdWUiIHRyYWlsZXJzJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9IiUodHJhaWxlcnM6b25seSkiID5hY3R1YWwgJiYKKwl7CisJCWdyZXAgLXYgcGF0Y2guZGVzY3JpcHRpb24gPHRyYWlsZXJzICYmCisJCWVjaG8KKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6b25seT15ZXMpIHNob3dzIG9ubHkgImtleTogdmFsdWUiIHRyYWlsZXJzJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9Zm9ybWF0OiIlKHRyYWlsZXJzOm9ubHk9eWVzKSIgPmFjdHVhbCAmJgorCWdyZXAgLXYgcGF0Y2guZGVzY3JpcHRpb24gPHRyYWlsZXJzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6b25seT1ubykgc2hvd3MgYWxsIHRyYWlsZXJzJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9Zm9ybWF0OiIlKHRyYWlsZXJzOm9ubHk9bm8pIiA+YWN0dWFsICYmCisJY2F0IHRyYWlsZXJzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6b25seT1ubyxvbmx5PXRydWUpIHNob3dzIG9ubHkgImtleTogdmFsdWUiIHRyYWlsZXJzJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9Zm9ybWF0OiIlKHRyYWlsZXJzOm9ubHk9eWVzKSIgPmFjdHVhbCAmJgorCWdyZXAgLXYgcGF0Y2guZGVzY3JpcHRpb24gPHRyYWlsZXJzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6dW5mb2xkKSB1bmZvbGRzIHRyYWlsZXJzJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9IiUodHJhaWxlcnM6dW5mb2xkKSIgPmFjdHVhbCAmJgorCXsKKwkJdW5mb2xkIDx0cmFpbGVycyAmJgorCQllY2hvCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc6b25seSBhbmQgOnVuZm9sZCB3b3JrIHRvZ2V0aGVyJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9IiUodHJhaWxlcnM6b25seSx1bmZvbGQpIiA+YWN0dWFsICYmCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9IiUodHJhaWxlcnM6dW5mb2xkLG9ubHkpIiA+cmV2ZXJzZSAmJgorCXRlc3RfY21wIGFjdHVhbCByZXZlcnNlICYmCisJeworCQlncmVwIC12IHBhdGNoLmRlc2NyaXB0aW9uIDx0cmFpbGVycyB8IHVuZm9sZCAmJgorCQllY2hvCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0dHkgZm9ybWF0ICUodHJhaWxlcnM6a2V5PWZvbykgc2hvd3MgdGhhdCB0cmFpbGVyJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9ImZvcm1hdDolKHRyYWlsZXJzOmtleT1BY2tlZC1ieSkiID5hY3R1YWwgJiYKKwllY2hvICJBY2tlZC1ieTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXR0eSBmb3JtYXQgJSh0cmFpbGVyczprZXk9Zm9vKSBpcyBjYXNlIGluc2Vuc2l0aXZlJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9ImZvcm1hdDolKHRyYWlsZXJzOmtleT1BY0tlZC1iWSkiID5hY3R1YWwgJiYKKwllY2hvICJBY2tlZC1ieTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXR0eSBmb3JtYXQgJSh0cmFpbGVyczprZXk9Zm9vOikgdHJhaWxpbmcgY29sb24gYWxzbyB3b3JrcycgJworCWdpdCBsb2cgLS1uby13YWxrIC0tcHJldHR5PSJmb3JtYXQ6JSh0cmFpbGVyczprZXk9QWNrZWQtYnk6KSIgPmFjdHVhbCAmJgorCWVjaG8gIkFja2VkLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldHR5IGZvcm1hdCAlKHRyYWlsZXJzOmtleT1mb28pIG11bHRpcGxlIGtleXMnICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT0iZm9ybWF0OiUodHJhaWxlcnM6a2V5PUFja2VkLWJ5OixrZXk9U2lnbmVkLW9mZi1CeSkiID5hY3R1YWwgJiYKKwlncmVwIC12IHBhdGNoLmRlc2NyaXB0aW9uIDx0cmFpbGVycyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKHRyYWlsZXJzOmtleT1ub25leGlzdGVudCkgYmVjb21lcyBlbXB0eScgJworCWdpdCBsb2cgLS1uby13YWxrIC0tcHJldHR5PSJ4JSh0cmFpbGVyczprZXk9TmFja2VkLWJ5KXgiID5hY3R1YWwgJiYKKwllY2hvICJ4eCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJSh0cmFpbGVyczprZXk9Zm9vKSBoYW5kbGVzIG11bHRpcGxlIGxpbmVzIGV2ZW4gaWYgZm9sZGVkJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9ImZvcm1hdDolKHRyYWlsZXJzOmtleT1TaWduZWQtT2ZmLWJ5KSIgPmFjdHVhbCAmJgorCWdyZXAgLXYgcGF0Y2guZGVzY3JpcHRpb24gPHRyYWlsZXJzIHwgZ3JlcCAtdiBBY2tlZC1ieSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKHRyYWlsZXJzOmtleT1mb28sdW5mb2xkKSBwcm9wZXJseSB1bmZvbGRzJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9ImZvcm1hdDolKHRyYWlsZXJzOmtleT1TaWduZWQtT2ZmLWJ5LHVuZm9sZCkiID5hY3R1YWwgJiYKKwl1bmZvbGQgPHRyYWlsZXJzIHwgZ3JlcCBTaWduZWQtb2ZmLWJ5ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXR0eSBmb3JtYXQgJSh0cmFpbGVyczprZXk9Zm9vLG9ubHk9bm8pIGFsc28gaW5jbHVkZXMgbm9udHJhaWxlciBsaW5lcycgJworCWdpdCBsb2cgLS1uby13YWxrIC0tcHJldHR5PSJmb3JtYXQ6JSh0cmFpbGVyczprZXk9QWNrZWQtYnksb25seT1ubykiID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIkFja2VkLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiIgJiYKKwkJZ3JlcCBwYXRjaC5kZXNjcmlwdGlvbiA8dHJhaWxlcnMKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6a2V5KSB3aXRob3V0IHZhbHVlIGlzIGVycm9yJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9InRmb3JtYXQ6JSh0cmFpbGVyczprZXkpIiA+YWN0dWFsICYmCisJZWNobyAiJSh0cmFpbGVyczprZXkpIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKHRyYWlsZXJzOmtleT1mb28sdmFsdWVvbmx5KSBzaG93cyBvbmx5IHZhbHVlJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9ImZvcm1hdDolKHRyYWlsZXJzOmtleT1BY2tlZC1ieSx2YWx1ZW9ubHkpIiA+YWN0dWFsICYmCisJZWNobyAiQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXR0eSBmb3JtYXQgJSh0cmFpbGVyczpzZXBhcmF0b3IpIGNoYW5nZXMgc2VwYXJhdG9yJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9Zm9ybWF0OiJYJSh0cmFpbGVyczpzZXBhcmF0b3I9JXgwMCx1bmZvbGQpWCIgPmFjdHVhbCAmJgorCXByaW50ZiAiWFNpZ25lZC1vZmYtYnk6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+XDBBY2tlZC1ieTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT5cMFsgdjIgdXBkYXRlZCBwYXRjaCBkZXNjcmlwdGlvbiBdXDBTaWduZWQtb2ZmLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPlgiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXR0eSBmb3JtYXQgJSh0cmFpbGVycykgY29tYmluaW5nIHNlcGFyYXRvci9rZXkvdmFsdWVvbmx5JyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1GIC0gPDwtXEVPRiAmJgorCUltcG9ydGFudCBmaXgKKworCVRoZSBmaXggaXMgZXhwbGFpbmVkIGhlcmUKKworCUNsb3NlczogIzEyMzQKKwlFT0YKKworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtRiAtIDw8LVxFT0YgJiYKKwlBbm90aGVyIGZpeAorCisJVGhlIGZpeCBpcyBleHBsYWluZWQgaGVyZQorCisJQ2xvc2VzOiAjNTY3CisJQ2xvc2VzOiAjODkwCisJRU9GCisKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLUYgLSA8PC1cRU9GICYmCisJRG9lcyBub3QgY2xvc2UgYW55IHRpY2tldHMKKwlFT0YKKworCWdpdCBsb2cgLS1wcmV0dHk9IiVzJSAodHJhaWxlcnM6c2VwYXJhdG9yPSV4MmMleDIwLGtleT1DbG9zZXMsdmFsdWVvbmx5KSIgSEVBRH4zLi4gPmFjdHVhbCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgXAorCQkiRG9lcyBub3QgY2xvc2UgYW55IHRpY2tldHMiIFwKKwkJIkFub3RoZXIgZml4ICM1NjcsICM4OTAiIFwKKwkJIkltcG9ydGFudCBmaXggIzEyMzQiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWlsZXIgcGFyc2luZyBub3QgZm9vbGVkIGJ5IC0tLSBsaW5lJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1GIC0gPDwtXEVPRiAmJgorCXRoaXMgaXMgdGhlIHN1YmplY3QKKworCVRoaXMgaXMgdGhlIGJvZHkuIFRoZSBtZXNzYWdlIGhhcyBhICItLS0iIGxpbmUgd2hpY2ggd291bGQgY29uZnVzZSBhCisJbWVzc2FnZStwYXRjaCBwYXJzZXIuIEJ1dCBoZXJlIHdlIGtub3cgd2UgaGF2ZSBvbmx5IGEgY29tbWl0IG1lc3NhZ2UsCisJc28gd2UgZ2V0IGl0IHJpZ2h0LgorCisJdHJhaWxlcjogd3JvbmcKKwktLS0KKwlUaGlzIGlzIG1vcmUgYm9keS4KKworCXRyYWlsZXI6IHJpZ2h0CisJRU9GCisKKwl7CisJCWVjaG8gInRyYWlsZXI6IHJpZ2h0IiAmJgorCQllY2hvCisJfSA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1mb3JtYXQ9IiUodHJhaWxlcnMpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgJVMgdGVzdHMnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gc291cmNlLWEgJiYKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgc291cmNlLWIgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1mb3JtYXQ9JVMgcGFpbnRzIGJyYW5jaCBuYW1lcycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlzb3VyY2UtYgorCXNvdXJjZS1hCisJc291cmNlLWIKKwlFT0YKKwlnaXQgbG9nIC0tZm9ybWF0PSVTIHNvdXJjZS1hIHNvdXJjZS1iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWZvcm1hdD0lUyBwYWludHMgdGFnIG5hbWVzJyAnCisJZ2l0IHRhZyAtbSB0YWdnZWQgc291cmNlLXRhZyAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlzb3VyY2UtdGFnCisJc291cmNlLWEKKwlzb3VyY2UtdGFnCisJRU9GCisJZ2l0IGxvZyAtLWZvcm1hdD0lUyBzb3VyY2UtdGFnIHNvdXJjZS1hID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWZvcm1hdD0lUyBwYWludHMgc3ltbWV0cmljIHJhbmdlcycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlzb3VyY2UtYgorCXNvdXJjZS1hCisJRU9GCisJZ2l0IGxvZyAtLWZvcm1hdD0lUyBzb3VyY2UtYS4uLnNvdXJjZS1iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVTIGluIGdpdCBsb2cgLS1mb3JtYXQgd29ya3Mgd2l0aCBvdGhlciBwbGFjZWhvbGRlcnMgKHBhcnQgMSknICcKKwlnaXQgbG9nIC0tZm9ybWF0PSJzb3VyY2UtYiAlaCIgc291cmNlLWIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9IiVTICVoIiBzb3VyY2UtYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclUyBpbiBnaXQgbG9nIC0tZm9ybWF0IHdvcmtzIHdpdGggb3RoZXIgcGxhY2Vob2xkZXJzIChwYXJ0IDIpJyAnCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWggc291cmNlLWIiIHNvdXJjZS1iID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSIlaCAlUyIgc291cmNlLWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tcHJldHR5PXJlZmVyZW5jZScgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggKCVzLCAlYXMpIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLXByZXR0eT1yZWZlcmVuY2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tcHJldHR5PXJlZmVyZW5jZSB3aXRoIGxvZy5kYXRlIGlzIG92ZXJyaWRkZW4gYnkgc2hvcnQgZGF0ZScgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggKCVzLCAlYXMpIiA+ZXhwZWN0ICYmCisJdGVzdF9jb25maWcgbG9nLmRhdGUgcmZjICYmCisJZ2l0IGxvZyAtLXByZXR0eT1yZWZlcmVuY2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tcHJldHR5PXJlZmVyZW5jZSB3aXRoIGV4cGxpY2l0IGRhdGUgb3ZlcnJpZGVzIHNob3J0IGRhdGUnICcKKwlnaXQgbG9nIC0tZGF0ZT1yZmMgLS1wcmV0dHk9InRmb3JtYXQ6JWggKCVzLCAlYWQpIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWRhdGU9cmZjIC0tcHJldHR5PXJlZmVyZW5jZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1wcmV0dHk9cmVmZXJlbmNlIGlzIG5ldmVyIHVuYWJicmV2aWF0ZWQnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICglcywgJWFzKSIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1uby1hYmJyZXYtY29tbWl0IC0tcHJldHR5PXJlZmVyZW5jZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1wcmV0dHk9cmVmZXJlbmNlIGlzIG5ldmVyIGRlY29yYXRlZCcgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggKCVzLCAlYXMpIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWRlY29yYXRlPXNob3J0IC0tcHJldHR5PXJlZmVyZW5jZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1wcmV0dHk9cmVmZXJlbmNlIGRvZXMgbm90IG91dHB1dCByZWZsb2cgaW5mbycgJworCWdpdCBsb2cgLS13YWxrLXJlZmxvZ3MgLS1wcmV0dHk9InRmb3JtYXQ6JWggKCVzLCAlYXMpIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLXdhbGstcmVmbG9ncyAtLXByZXR0eT1yZWZlcmVuY2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tcHJldHR5PXJlZmVyZW5jZSBpcyBjb2xvcmVkIGFwcHJvcHJpYXRlbHknICcKKwlnaXQgbG9nIC0tY29sb3I9YWx3YXlzIC0tcHJldHR5PSJ0Zm9ybWF0OiVDKGF1dG8pJWggKCVzLCAlYXMpIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWNvbG9yPWFsd2F5cyAtLXByZXR0eT1yZWZlcmVuY2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjA2LWxvZy1mb2xsb3ctaGFyZGVyLWNvcGllcy5zaCBiL3QvdDQyMDYtbG9nLWZvbGxvdy1oYXJkZXItY29waWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkMjllNjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjA2LWxvZy1mb2xsb3ctaGFyZGVyLWNvcGllcy5zaApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEJvIFlhbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCAtLWZvbGxvdyBzaG91bGQgYWx3YXlzIGZpbmQgY29waWVzIGhhcmQgaW4gZ2l0IGxvZy4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCisKK2VjaG8gPnBhdGgwICdMaW5lIDEKK0xpbmUgMgorTGluZSAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhZGQgYSBmaWxlIHBhdGgwIGFuZCBjb21taXQuJyBcCisgICAgJ2dpdCBhZGQgcGF0aDAgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiQWRkIHBhdGgwIicKKworZWNobyA+cGF0aDAgJ05ldyBsaW5lIDEKK05ldyBsaW5lIDIKK05ldyBsaW5lIDMKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdDaGFuZ2UgcGF0aDAuJyBcCisgICAgJ2dpdCBhZGQgcGF0aDAgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiQ2hhbmdlIHBhdGgwIicKKworY2F0IDxwYXRoMCA+cGF0aDEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjb3B5IHBhdGgwIHRvIHBhdGgxLicgXAorICAgICdnaXQgYWRkIHBhdGgxICYmCisgICAgIGdpdCBjb21taXQgLW0gIkNvcHkgcGF0aDEgZnJvbSBwYXRoMCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdmaW5kIHRoZSBjb3B5IHBhdGgwIC0+IHBhdGgxIGhhcmRlcicgXAorICAgICdnaXQgbG9nIC0tZm9sbG93IC0tbmFtZS1zdGF0dXMgLS1wcmV0dHk9ImZvcm1hdDolcyIgIHBhdGgxID4gY3VycmVudCcKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK0NvcHkgcGF0aDEgZnJvbSBwYXRoMAorQzEwMAlwYXRoMAlwYXRoMQorCitDaGFuZ2UgcGF0aDAKK00JcGF0aDAKKworQWRkIHBhdGgwCitBCXBhdGgwCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIHRoZSBvdXRwdXQuJyBcCisgICAgJ2NvbXBhcmVfZGlmZl9wYXRjaCBjdXJyZW50IGV4cGVjdGVkJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDctbG9nLWRlY29yYXRpb24tY29sb3JzLnNoIGIvdC90NDIwNy1sb2ctZGVjb3JhdGlvbi1jb2xvcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjBmMDQwYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMDctbG9nLWRlY29yYXRpb24tY29sb3JzLnNoCkBAIC0wLDAgKzEsNjIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgTmF6cmkgUmFtbGl5CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZm9yICJnaXQgbG9nIC0tZGVjb3JhdGUiIGNvbG9ycycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgZGlmZi5jb2xvci5jb21taXQgeWVsbG93ICYmCisJZ2l0IGNvbmZpZyBjb2xvci5kZWNvcmF0ZS5icmFuY2ggZ3JlZW4gJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRlY29yYXRlLnJlbW90ZUJyYW5jaCByZWQgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRlY29yYXRlLnRhZyAicmV2ZXJzZSBib2xkIHllbGxvdyIgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRlY29yYXRlLnN0YXNoIG1hZ2VudGEgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRlY29yYXRlLkhFQUQgY3lhbiAmJgorCisJY19yZXNldD0iPFJFU0VUPiIgJiYKKworCWNfY29tbWl0PSI8WUVMTE9XPiIgJiYKKwljX2JyYW5jaD0iPEdSRUVOPiIgJiYKKwljX3JlbW90ZUJyYW5jaD0iPFJFRD4iICYmCisJY190YWc9IjxCT0xEO1JFVkVSU0U7WUVMTE9XPiIgJiYKKwljX3N0YXNoPSI8TUFHRU5UQT4iICYmCisJY19IRUFEPSI8Q1lBTj4iICYmCisKKwl0ZXN0X2NvbW1pdCBBICYmCisJZ2l0IGNsb25lIC4gb3RoZXIgJiYKKwkoCisJCWNkIG90aGVyICYmCisJCXRlc3RfY29tbWl0IEExCisJKSAmJgorCisJZ2l0IHJlbW90ZSBhZGQgLWYgb3RoZXIgLi9vdGhlciAmJgorCXRlc3RfY29tbWl0IEIgJiYKKwlnaXQgdGFnIHYxLjAgJiYKKwllY2hvID4+QS50ICYmCisJZ2l0IHN0YXNoIHNhdmUgQ2hhbmdlcyB0byBBLnQKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorJHtjX2NvbW1pdH1DT01NSVRfSUQke2NfcmVzZXR9JHtjX2NvbW1pdH0gKCR7Y19yZXNldH0ke2NfSEVBRH1IRUFEIC0+XAorICR7Y19yZXNldH0ke2NfYnJhbmNofW1hc3RlciR7Y19yZXNldH0ke2NfY29tbWl0fSxcCisgJHtjX3Jlc2V0fSR7Y190YWd9dGFnOiB2MS4wJHtjX3Jlc2V0fSR7Y19jb21taXR9LFwKKyAke2NfcmVzZXR9JHtjX3RhZ310YWc6IEIke2NfcmVzZXR9JHtjX2NvbW1pdH0pJHtjX3Jlc2V0fSBCCiske2NfY29tbWl0fUNPTU1JVF9JRCR7Y19yZXNldH0ke2NfY29tbWl0fSAoJHtjX3Jlc2V0fSR7Y190YWd9dGFnOiBBMSR7Y19yZXNldH0ke2NfY29tbWl0fSxcCisgJHtjX3Jlc2V0fSR7Y19yZW1vdGVCcmFuY2h9b3RoZXIvbWFzdGVyJHtjX3Jlc2V0fSR7Y19jb21taXR9KSR7Y19yZXNldH0gQTEKKyR7Y19jb21taXR9Q09NTUlUX0lEJHtjX3Jlc2V0fSR7Y19jb21taXR9ICgke2NfcmVzZXR9JHtjX3N0YXNofXJlZnMvc3Rhc2gke2NfcmVzZXR9JHtjX2NvbW1pdH0pJHtjX3Jlc2V0fVwKKyBPbiBtYXN0ZXI6IENoYW5nZXMgdG8gQS50Ciske2NfY29tbWl0fUNPTU1JVF9JRCR7Y19yZXNldH0ke2NfY29tbWl0fSAoJHtjX3Jlc2V0fSR7Y190YWd9dGFnOiBBJHtjX3Jlc2V0fSR7Y19jb21taXR9KSR7Y19yZXNldH0gQQorRU9GCisKKyMgV2Ugd2FudCBsb2cgdG8gc2hvdyBhbGwsIGJ1dCB0aGUgc2Vjb25kIHBhcmVudCB0byByZWZzL3N0YXNoIGlzIGlycmVsZXZhbnQKKyMgdG8gdGhpcyB0ZXN0IHNpbmNlIGl0IGRvZXMgbm90IGNvbnRhaW4gYW55IGRlY29yYXRpb24sIGhlbmNlIC0tZmlyc3QtcGFyZW50Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDb21taXQgRGVjb3JhdGlvbnMgQ29sb3JlZCBDb3JyZWN0bHknICcKKwlnaXQgbG9nIC0tZmlyc3QtcGFyZW50IC0tYWJicmV2PTEwIC0tYWxsIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tY29sb3I9YWx3YXlzIHwKKwlzZWQgInMvWzAtOWEtZl1cezEwLDEwXH0vQ09NTUlUX0lELyIgfAorCXRlc3RfZGVjb2RlX2NvbG9yID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjA4LWxvZy1tYWdpYy1wYXRoc3BlYy5zaCBiL3QvdDQyMDgtbG9nLW1hZ2ljLXBhdGhzcGVjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjZGJlNDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjA4LWxvZy1tYWdpYy1wYXRoc3BlYy5zaApAQCAtMCwwICsxLDE0NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21hZ2ljIHBhdGhzcGVjIHRlc3RzIHVzaW5nIGdpdC1sb2cnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZW1wdHkgJiYKKwlta2RpciBzdWIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBsb2cgOi8iIHNob3VsZCBub3QgYmUgYW1iaWd1b3VzJyAnCisJZ2l0IGxvZyA6LworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6L2EiIHNob3VsZCBiZSBhbWJpZ3VvdXMgKGFwcGxpZWQgYm90aCByZXYgYW5kIHdvcmt0cmVlKScgJworCTogPmEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIDovYSAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCBhbWJpZ3VvdXMgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBsb2cgOi9hIC0tICIgc2hvdWxkIG5vdCBiZSBhbWJpZ3VvdXMnICcKKwlnaXQgbG9nIDovYSAtLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6L2RldGFjaGVkIC0tICIgc2hvdWxkIGZpbmQgYSBjb21taXQgb25seSBpbiBIRUFEJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCAmJgorCSMgTXVzdCBtYW51YWxseSBjYWxsIGB0ZXN0X3RpY2tgIGluc3RlYWQgb2YgdXNpbmcgYHRlc3RfY29tbWl0YCwKKwkjIGJlY2F1c2UgdGhlIGxhdHRlciBhZGRpdGlvbmFsbHkgY3JlYXRlcyBhIHRhZywgd2hpY2ggd291bGQgbWFrZQorCSMgdGhlIGNvbW1pdCByZWFjaGFibGUgbm90IG9ubHkgdmlhIEhFQUQuCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGRldGFjaGVkICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHNvbWV0aGluZy1lbHNlICYmCisJZ2l0IGxvZyA6L2RldGFjaGVkIC0tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbG9nIDovZGV0YWNoZWQgLS0gIiBzaG91bGQgbm90IGZpbmQgYW4gb3JwaGFuZWQgY29tbWl0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyA6L2RldGFjaGVkIC0tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbG9nIDovZGV0YWNoZWQgLS0gIiBzaG91bGQgZmluZCBIRUFEIG9ubHkgb2Ygb3duIHdvcmt0cmVlJyAnCisJZ2l0IHdvcmt0cmVlIGFkZCBvdGhlci10cmVlIEhFQUQgJiYKKwlnaXQgLUMgb3RoZXItdHJlZSBjaGVja291dCAtLWRldGFjaCAmJgorCXRlc3RfdGljayAmJgorCWdpdCAtQyBvdGhlci10cmVlIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG90aGVyLWRldGFjaGVkICYmCisJZ2l0IC1DIG90aGVyLXRyZWUgbG9nIDovb3RoZXItZGV0YWNoZWQgLS0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIDovb3RoZXItZGV0YWNoZWQgLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBsb2cgLS0gOi9hIiBzaG91bGQgbm90IGJlIGFtYmlndW91cycgJworCWdpdCBsb2cgLS0gOi9hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbG9nIDovYW55L3BhdGgvIiBzaG91bGQgbm90IHNlZ2ZhdWx0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyA6L2FueS9wYXRoLworJworCisjIFRoaXMgZGlmZmVycyBmcm9tIHRoZSAiOi9hIiBjaGVjayBhYm92ZSBpbiB0aGF0IDovaW4gbG9va3MgbGlrZSBhIHBhdGhzcGVjLAorIyBidXQgZG9lc24ndCBtYXRjaCBhbiBhY3R1YWwgZmlsZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbG9nIDovaW4iIHNob3VsZCBub3QgYmUgYW1iaWd1b3VzJyAnCisJZ2l0IGxvZyA6L2luCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbG9nIDoiIHNob3VsZCBiZSBhbWJpZ3VvdXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIDogMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgYW1iaWd1b3VzIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS0gOicgJworCWdpdCBsb2cgLS0gOgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIEhFQUQgLS0gOi8nICcKKwlpbml0aWFsPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReKSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJJGluaXRpYWwgaW5pdGlhbAorCUVPRgorCShjZCBzdWIgJiYgZ2l0IGxvZyAtLW9uZWxpbmUgSEVBRCAtLSA6LyA+Li4vYWN0dWFsKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6XnN1YiIgaXMgbm90IGFtYmlndW91cycgJworCWdpdCBsb2cgOl5zdWIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBsb2cgOl5kb2VzLW5vdC1leGlzdCIgZG9lcyBub3QgbWF0Y2ggYW55dGhpbmcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIDpeZG9lcy1ub3QtZXhpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAgJyJnaXQgbG9nIDohIiBiZWhhdmVzIHRoZSBzYW1lIGFzIDpeJyAnCisJZ2l0IGxvZyA6IXN1YiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgOiFkb2VzLW5vdC1leGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6KGV4Y2x1ZGUpc3ViIiBpcyBub3QgYW1iaWd1b3VzJyAnCisJZ2l0IGxvZyAiOihleGNsdWRlKXN1YiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBsb2cgOihleGNsdWRlKXN1YiAtLSIgbXVzdCByZXNvbHZlIGFzIGFuIG9iamVjdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgIjooZXhjbHVkZSlzdWIiIC0tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbG9nIDoodW5rbm93bi1tYWdpYykgY29tcGxhaW5zIG9mIGJvZ3VzIG1hZ2ljJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAiOih1bmtub3duLW1hZ2ljKSIgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgcGF0aHNwZWMubWFnaWMgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWFuZCBsaW5lIHBhdGhzcGVjIHBhcnNpbmcgZm9yICJnaXQgbG9nIicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBhbiBlbXB0eSBhIiAtLWFsbG93LWVtcHR5ICYmCisJZWNobyAxID5hICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAidXBkYXRlIGEgdG8gMSIgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwllY2hvIDIgPmEgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ1cGRhdGUgYSB0byAyIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgbG9nIC0tbWVyZ2UgLS0gYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlX2VudHJ5X2ludGVyZXN0aW5nIGRvZXMgbm90IG1hdGNoIHBhc3Qgc3VibW9kdWxlIGJvdW5kYXJpZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiByZXBvIHN1Ym1vZHVsZSIgJiYKKwlnaXQgaW5pdCBzdWJtb2R1bGUgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdWJtb2R1bGUgaW5pdGlhbCAmJgorCWdpdCBpbml0IHJlcG8gJiYKKwk+InJlcG8vW2JyYWNrZXRdIiAmJgorCWdpdCAtQyByZXBvIGFkZCAiW2JyYWNrZXRdIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCAtQyByZXBvIGNvbW1pdCAtbSBicmFja2V0ICYmCisJZ2l0IC1DIHJlcG8gcmV2LWxpc3QgSEVBRCAtLSAiW2JyYWNrZXRdIiA+ZXhwZWN0ICYmCisKKwlnaXQgLUMgcmVwbyBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCAtQyByZXBvIGNvbW1pdCAtbSBzdWJtb2R1bGUgJiYKKworCWdpdCAtQyByZXBvIHJldi1saXN0IEhFQUQgLS0gIlticmFja2V0XSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjA5LWxvZy1waWNrYXhlLnNoIGIvdC90NDIwOS1sb2ctcGlja2F4ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZDA2ZjVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwOS1sb2ctcGlja2F4ZS5zaApAQCAtMCwwICsxLDE0NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2xvZyAtLWdyZXAvLS1hdXRob3IvLS1yZWdleHAtaWdub3JlLWNhc2UvLVMvLUcnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9sb2cgKCkgeworCWV4cGVjdD0kMQorCWtpbmQ9JDIKKwluZWVkbGU9JDMKKwlzaGlmdCAzCisJcmVzdD0kQAorCisJY2FzZSAka2luZCBpbgorCS0tKikKKwkJb3B0PSRraW5kPSRuZWVkbGUKKwkJOzsKKwkqKQorCQlvcHQ9JGtpbmQkbmVlZGxlCisJCTs7CisJZXNhYworCWNhc2UgJGV4cGVjdCBpbgorCWV4cGVjdF9ub21hdGNoKQorCQltYXRjaD1ub21hdGNoCisJCTs7CisJKikKKwkJbWF0Y2g9bWF0Y2gKKwkJOzsKKwllc2FjCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJsb2cgJGtpbmQke3Jlc3Q6KyAkcmVzdH0gKCRtYXRjaCkiICIKKwkJZ2l0IGxvZyAkcmVzdCAkb3B0IC0tZm9ybWF0PSVIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgJGV4cGVjdCBhY3R1YWwKKwkiCit9CisKKyMgdGVzdCAtaSBhbmQgLS1yZWdleHAtaWdub3JlLWNhc2UgYW5kIGV4cGVjdCBib3RoIHRvIGJlaGF2ZSB0aGUgc2FtZSB3YXkKK3Rlc3RfbG9nX2ljYXNlICgpIHsKKwl0ZXN0X2xvZyAkQCAtLXJlZ2V4cC1pZ25vcmUtY2FzZQorCXRlc3RfbG9nICRAIC1pCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCT5leHBlY3Rfbm9tYXRjaCAmJgorCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmV4cGVjdF9pbml0aWFsICYmCisKKwllY2hvIFBpY2tlZCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hdXRob3I9IkFub3RoZXIgUGVyc29uIDxhbm90aGVyQGV4YW1wbGUuY29tPiIgLW0gc2Vjb25kICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5leHBlY3Rfc2Vjb25kCisnCisKK3Rlc3RfbG9nCWV4cGVjdF9pbml0aWFsCS0tZ3JlcCBpbml0aWFsCit0ZXN0X2xvZwlleHBlY3Rfbm9tYXRjaAktLWdyZXAgSW5JdGlhbAordGVzdF9sb2dfaWNhc2UJZXhwZWN0X2luaXRpYWwJLS1ncmVwIEluSXRpYWwKK3Rlc3RfbG9nX2ljYXNlCWV4cGVjdF9ub21hdGNoCS0tZ3JlcCBpbml0YWlsCisKK3Rlc3RfbG9nCWV4cGVjdF9zZWNvbmQJLS1hdXRob3IgUGVyc29uCit0ZXN0X2xvZwlleHBlY3Rfbm9tYXRjaAktLWF1dGhvciBwZXJzb24KK3Rlc3RfbG9nX2ljYXNlCWV4cGVjdF9zZWNvbmQJLS1hdXRob3IgcGVyc29uCit0ZXN0X2xvZ19pY2FzZQlleHBlY3Rfbm9tYXRjaAktLWF1dGhvciBzcHJlb24KKwordGVzdF9sb2cJZXhwZWN0X25vbWF0Y2gJLUcgcGlja2VkCit0ZXN0X2xvZwlleHBlY3Rfc2Vjb25kCS1HIFBpY2tlZAordGVzdF9sb2dfaWNhc2UJZXhwZWN0X25vbWF0Y2gJLUcgcGlja2xlCit0ZXN0X2xvZ19pY2FzZQlleHBlY3Rfc2Vjb25kCS1HIHBpY2tlZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLUcgLS10ZXh0Y29udiAobWlzc2luZyB0ZXh0Y29udiB0b29sKScgJworCWVjaG8gIiogZGlmZj10ZXN0IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZGlmZi50ZXN0LnRleHRjb252PW1pc3NpbmcgbG9nIC1HZm9vICYmCisJcm0gLmdpdGF0dHJpYnV0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1HIC0tbm8tdGV4dGNvbnYgKG1pc3NpbmcgdGV4dGNvbnYgdG9vbCknICcKKwllY2hvICIqIGRpZmY9dGVzdCIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IC1jIGRpZmYudGVzdC50ZXh0Y29udj1taXNzaW5nIGxvZyAtR2ZvbyAtLW5vLXRleHRjb252ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm9tYXRjaCBhY3R1YWwgJiYKKwlybSAuZ2l0YXR0cmlidXRlcworJworCit0ZXN0X2xvZwlleHBlY3Rfbm9tYXRjaAktUyBwaWNrZWQKK3Rlc3RfbG9nCWV4cGVjdF9zZWNvbmQJLVMgUGlja2VkCit0ZXN0X2xvZ19pY2FzZQlleHBlY3Rfc2Vjb25kCS1TIHBpY2tlZAordGVzdF9sb2dfaWNhc2UJZXhwZWN0X25vbWF0Y2gJLVMgcGlja2xlCisKK3Rlc3RfbG9nCWV4cGVjdF9ub21hdGNoCS1TIHAuY2tlZCAtLXBpY2theGUtcmVnZXgKK3Rlc3RfbG9nCWV4cGVjdF9zZWNvbmQJLVMgUC5ja2VkIC0tcGlja2F4ZS1yZWdleAordGVzdF9sb2dfaWNhc2UJZXhwZWN0X3NlY29uZAktUyBwLmNrZWQgLS1waWNrYXhlLXJlZ2V4Cit0ZXN0X2xvZ19pY2FzZQlleHBlY3Rfbm9tYXRjaAktUyBwLmNrbGUgLS1waWNrYXhlLXJlZ2V4CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtUyAtLXRleHRjb252IChtaXNzaW5nIHRleHRjb252IHRvb2wpJyAnCisJZWNobyAiKiBkaWZmPXRlc3QiID4uZ2l0YXR0cmlidXRlcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBkaWZmLnRlc3QudGV4dGNvbnY9bWlzc2luZyBsb2cgLVNmb28gJiYKKwlybSAuZ2l0YXR0cmlidXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLVMgLS1uby10ZXh0Y29udiAobWlzc2luZyB0ZXh0Y29udiB0b29sKScgJworCWVjaG8gIiogZGlmZj10ZXN0IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgLWMgZGlmZi50ZXN0LnRleHRjb252PW1pc3NpbmcgbG9nIC1TZm9vIC0tbm8tdGV4dGNvbnYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF9ub21hdGNoIGFjdHVhbCAmJgorCXJtIC5naXRhdHRyaWJ1dGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGxvZyAtW0dTXSBiaW5hcnkgJiAtLXRleHQnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gR1MtYmluYXJ5LWFuZC10ZXh0ICYmCisJZ2l0IHJlYWQtdHJlZSAtLWVtcHR5ICYmCisJcHJpbnRmICJhXG5hXDBhXG4iID5kYXRhLmJpbiAmJgorCWdpdCBhZGQgZGF0YS5iaW4gJiYKKwlnaXQgY29tbWl0IC1tICJjcmVhdGUgYmluYXJ5IGZpbGUiIGRhdGEuYmluICYmCisJcHJpbnRmICJhXG5hXDBhXG4iID4+ZGF0YS5iaW4gJiYKKwlnaXQgY29tbWl0IC1tICJtb2RpZnkgYmluYXJ5IGZpbGUiIGRhdGEuYmluICYmCisJZ2l0IHJtIGRhdGEuYmluICYmCisJZ2l0IGNvbW1pdCAtbSAiZGVsZXRlIGJpbmFyeSBmaWxlIiBkYXRhLmJpbiAmJgorCWdpdCBsb2cgPmZ1bGwtbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtRyBpZ25vcmVzIGJpbmFyeSBmaWxlcycgJworCWdpdCBsb2cgLUdhID5sb2cgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtRyBsb29rcyBpbnRvIGJpbmFyeSBmaWxlcyB3aXRoIC1hJyAnCisJZ2l0IGxvZyAtYSAtR2EgPmxvZyAmJgorCXRlc3RfY21wIGxvZyBmdWxsLWxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLUcgbG9va3MgaW50byBiaW5hcnkgZmlsZXMgd2l0aCB0ZXh0Y29udiBmaWx0ZXInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC5naXRhdHRyaWJ1dGVzIiAmJgorCWVjaG8gIiogZGlmZj1iaW4iID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCAtYyBkaWZmLmJpbi50ZXh0Y29udj1jYXQgbG9nIC1HYSA+bG9nICYmCisJdGVzdF9jbXAgbG9nIGZ1bGwtbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtUyBsb29rcyBpbnRvIGJpbmFyeSBmaWxlcycgJworCWdpdCBsb2cgLVNhID5sb2cgJiYKKwl0ZXN0X2NtcCBsb2cgZnVsbC1sb2cKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjEwLWxvZy1pMThuLnNoIGIvdC90NDIxMC1sb2ctaTE4bi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMzc5MjA4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMC1sb2ctaTE4bi5zaApAQCAtMCwwICsxLDkzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBsb2cgd2l0aCBpMThuIGZlYXR1cmVzJworLiAuL2xpYi1nZXR0ZXh0LnNoCisKKyMgdHdvIGZvcm1zIG9mIMOpCit1dGY4X2U9JChwcmludGYgJ1wzMDNcMjUxJykKK2xhdGluMV9lPSQocHJpbnRmICdcMzUxJykKKworIyBpbnZhbGlkIFVURi04CitpbnZhbGlkX2U9JChwcmludGYgJ1wzMDNcNTApJykgIyAiKSIgYXQgZW5kIHRvIGNsb3NlIG9wZW5pbmcgIigiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBjb21taXRzIGluIGRpZmZlcmVudCBlbmNvZGluZ3MnICcKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPm1zZyA8PC1FT0YgJiYKKwl1dGY4CisKKwl0JHt1dGY4X2V9c3QKKwlFT0YKKwlnaXQgYWRkIG1zZyAmJgorCWdpdCAtYyBpMThuLmNvbW1pdGVuY29kaW5nPXV0ZjggY29tbWl0IC1GIG1zZyAmJgorCWNhdCA+bXNnIDw8LUVPRiAmJgorCWxhdGluMQorCisJdCR7bGF0aW4xX2V9c3QKKwlFT0YKKwlnaXQgYWRkIG1zZyAmJgorCWdpdCAtYyBpMThuLmNvbW1pdGVuY29kaW5nPUlTTy04ODU5LTEgY29tbWl0IC1GIG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmVwIHNlYXJjaGVzIGluIGxvZyBvdXRwdXQgZW5jb2RpbmcgKHV0ZjgpJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWxhdGluMQorCXV0ZjgKKwlFT0YKKwlnaXQgbG9nIC0tZW5jb2Rpbmc9dXRmOCAtLWZvcm1hdD0lcyAtLWdyZXA9JHV0ZjhfZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnbG9nIC0tZ3JlcCBzZWFyY2hlcyBpbiBsb2cgb3V0cHV0IGVuY29kaW5nIChsYXRpbjEpJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWxhdGluMQorCXV0ZjgKKwlFT0YKKwlnaXQgbG9nIC0tZW5jb2Rpbmc9SVNPLTg4NTktMSAtLWZvcm1hdD0lcyAtLWdyZXA9JGxhdGluMV9lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdsb2cgLS1ncmVwIGRvZXMgbm90IGZpbmQgbm9uLXJlZW5jb2RlZCB2YWx1ZXMgKHV0ZjgpJyAnCisJZ2l0IGxvZyAtLWVuY29kaW5nPXV0ZjggLS1mb3JtYXQ9JXMgLS1ncmVwPSRsYXRpbjFfZSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnbG9nIC0tZ3JlcCBkb2VzIG5vdCBmaW5kIG5vbi1yZWVuY29kZWQgdmFsdWVzIChsYXRpbjEpJyAnCisJZ2l0IGxvZyAtLWVuY29kaW5nPUlTTy04ODU5LTEgLS1mb3JtYXQ9JXMgLS1ncmVwPSR1dGY4X2UgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKworZm9yIGVuZ2luZSBpbiBmaXhlZCBiYXNpYyBleHRlbmRlZCBwZXJsCitkbworCXByZXJlcT0KKwlpZiB0ZXN0ICRlbmdpbmUgPSAicGVybCIKKwl0aGVuCisJCXByZXJlcT0iUENSRSIKKwllbHNlCisJCXByZXJlcT0iIgorCWZpCisJZm9yY2VfcmVnZXg9CisJaWYgdGVzdCAkZW5naW5lICE9ICJmaXhlZCIKKwl0aGVuCisJICAgIGZvcmNlX3JlZ2V4PS4qCisJZmkKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVywhUkVHRVhfSUxMU0VRLEdFVFRFWFRfTE9DQUxFLCRwcmVyZXEgIi1jIGdyZXAucGF0dGVyblR5cGU9JGVuZ2luZSBsb2cgLS1ncmVwIGRvZXMgbm90IGZpbmQgbm9uLXJlZW5jb2RlZCB2YWx1ZXMgKGxhdGluMSArIGxvY2FsZSkiICIKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlsYXRpbjEKKwkJdXRmOAorCQlFT0YKKwkJTENfQUxMPVwiJGlzX0lTX2xvY2FsZVwiIGdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPSRlbmdpbmUgbG9nIC0tZW5jb2Rpbmc9SVNPLTg4NTktMSAtLWZvcm1hdD0lcyAtLWdyZXA9XCIkZm9yY2VfcmVnZXgkbGF0aW4xX2VcIiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyxHRVRURVhUX0xPQ0FMRSwkcHJlcmVxICItYyBncmVwLnBhdHRlcm5UeXBlPSRlbmdpbmUgbG9nIC0tZ3JlcCBkb2VzIG5vdCBmaW5kIG5vbi1yZWVuY29kZWQgdmFsdWVzIChsYXRpbjEgKyBsb2NhbGUpIiAiCisJCUxDX0FMTD1cIiRpc19JU19sb2NhbGVcIiBnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT0kZW5naW5lIGxvZyAtLWVuY29kaW5nPUlTTy04ODU5LTEgLS1mb3JtYXQ9JXMgLS1ncmVwPVwiJGZvcmNlX3JlZ2V4JHV0ZjhfZVwiID5hY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXLCFSRUdFWF9JTExTRVEsR0VUVEVYVF9MT0NBTEUsJHByZXJlcSAiLWMgZ3JlcC5wYXR0ZXJuVHlwZT0kZW5naW5lIGxvZyAtLWdyZXAgZG9lcyBub3QgZGllIG9uIGludmFsaWQgVVRGLTggdmFsdWUgKGxhdGluMSArIGxvY2FsZSArIGludmFsaWQgbmVlZGxlKSIgIgorCQlMQ19BTEw9XCIkaXNfSVNfbG9jYWxlXCIgZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9JGVuZ2luZSBsb2cgLS1lbmNvZGluZz1JU08tODg1OS0xIC0tZm9ybWF0PSVzIC0tZ3JlcD1cIiRmb3JjZV9yZWdleCRpbnZhbGlkX2VcIiA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKwkiCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIxMS1saW5lLWxvZy5zaCBiL3QvdDQyMTEtbGluZS1sb2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2RhNTgxOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEtbGluZS1sb2cuc2gKQEAgLTAsMCArMSwyMTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGxvZyAtTCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAoaW1wb3J0IGhpc3RvcnkpJyAnCisJdGVzdF9vaWRfaW5pdCAmJgorCWdpdCBmYXN0LWltcG9ydCA8ICIkVEVTVF9ESVJFQ1RPUlkiL3Q0MjExL2hpc3RvcnkuZXhwb3J0ICYmCisJZ2l0IHJlc2V0IC0taGFyZAorJworCitjYW5uZWRfdGVzdF8xICgpIHsKKwl0ZXN0X2V4cGVjdF8kMSAiJDIiICIKKwkJZ2l0IGxvZyAkMiA+YWN0dWFsICYmCisJCXRlc3RfY21wIFwiXCRURVNUX0RJUkVDVE9SWVwiL3Q0MjExLyQodGVzdF9vaWQgYWxnbykvZXhwZWN0LiQzIGFjdHVhbAorCSIKK30KKworY2FubmVkX3Rlc3QgKCkgeworCWNhbm5lZF90ZXN0XzEgc3VjY2VzcyAiJEAiCit9CitjYW5uZWRfdGVzdF9mYWlsdXJlICgpIHsKKwljYW5uZWRfdGVzdF8xIGZhaWx1cmUgIiRAIgorfQorCit0ZXN0X2JhZF9vcHRzICgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJpbnZhbGlkIGFyZ3M6ICQxIiAiCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgJDEgMj5lcnJvcnMgJiYKKwkJdGVzdF9pMThuZ3JlcCAnJDInIGVycm9ycworCSIKK30KKworY2FubmVkX3Rlc3QgIi1MIDQsMTI6YS5jIHNpbXBsZSIgc2ltcGxlLWYKK2Nhbm5lZF90ZXN0ICItTCA0LCs5OmEuYyBzaW1wbGUiIHNpbXBsZS1mCitjYW5uZWRfdGVzdCAiLUwgJy9sb25nIGYvLC9efS86YS5jJyBzaW1wbGUiIHNpbXBsZS1mCitjYW5uZWRfdGVzdCAiLUwgOmY6YS5jIHNpbXBsZSIgc2ltcGxlLWYtdG8tbWFpbgorCitjYW5uZWRfdGVzdCAiLUwgJy9tYWluLywvXn0vOmEuYycgc2ltcGxlIiBzaW1wbGUtbWFpbgorY2FubmVkX3Rlc3QgIi1MIDptYWluOmEuYyBzaW1wbGUiIHNpbXBsZS1tYWluLXRvLWVuZAorCitjYW5uZWRfdGVzdCAiLUwgMSwrNDphLmMgc2ltcGxlIiBiZWdpbm5pbmctb2YtZmlsZQorCitjYW5uZWRfdGVzdCAiLUwgMjA6YS5jIHNpbXBsZSIgZW5kLW9mLWZpbGUKKworY2FubmVkX3Rlc3QgIi1MICcvbG9uZyBmLycsL159LzphLmMgLUwgL21haW4vLC9efS86YS5jIHNpbXBsZSIgdHdvLXJhbmdlcworY2FubmVkX3Rlc3QgIi1MIDI0LCsxOmEuYyBzaW1wbGUiIHZhbmlzaGVzLWVhcmx5CisKK2Nhbm5lZF90ZXN0ICItTSAtTCAnL2xvbmcgZi8sL159LzpiLmMnIG1vdmUtc3VwcG9ydCIgbW92ZS1zdXBwb3J0LWYKK2Nhbm5lZF90ZXN0ICItTSAtTCAnOmY6Yi5jJyBwYXJhbGxlbC1jaGFuZ2UiIHBhcmFsbGVsLWNoYW5nZS1mLXRvLW1haW4KKworY2FubmVkX3Rlc3QgIi1MIDQsMTI6YS5jIC1MIDptYWluOmEuYyBzaW1wbGUiIG11bHRpcGxlCitjYW5uZWRfdGVzdCAiLUwgNCwxODphLmMgLUwgXjptYWluOmEuYyBzaW1wbGUiIG11bHRpcGxlLW92ZXJsYXBwaW5nCitjYW5uZWRfdGVzdCAiLUwgOm1haW46YS5jIC1MIDQsMTg6YS5jIHNpbXBsZSIgbXVsdGlwbGUtb3ZlcmxhcHBpbmcKK2Nhbm5lZF90ZXN0ICItTCA0OmEuYyAtTCA4LDEyOmEuYyBzaW1wbGUiIG11bHRpcGxlLXN1cGVyc2V0CitjYW5uZWRfdGVzdCAiLUwgOCwxMjphLmMgLUwgNDphLmMgc2ltcGxlIiBtdWx0aXBsZS1zdXBlcnNldAorCit0ZXN0X2JhZF9vcHRzICItTCIgInN3aXRjaC4qcmVxdWlyZXMgYSB2YWx1ZSIKK3Rlc3RfYmFkX29wdHMgIi1MIGIuYyIgImFyZ3VtZW50IG5vdCAuc3RhcnQsZW5kOmZpbGUiCit0ZXN0X2JhZF9vcHRzICItTCAxOiIgImFyZ3VtZW50IG5vdCAuc3RhcnQsZW5kOmZpbGUiCit0ZXN0X2JhZF9vcHRzICItTCAxOm5vbmV4aXN0ZW50IiAiVGhlcmUgaXMgbm8gcGF0aCIKK3Rlc3RfYmFkX29wdHMgIi1MIDE6c2ltcGxlIiAiVGhlcmUgaXMgbm8gcGF0aCIKK3Rlc3RfYmFkX29wdHMgIi1MICcvZm9vOmIuYyciICJhcmd1bWVudCBub3QgLnN0YXJ0LGVuZDpmaWxlIgordGVzdF9iYWRfb3B0cyAiLUwgMTAwMDpiLmMiICJoYXMgb25seS4qbGluZXMiCit0ZXN0X2JhZF9vcHRzICItTCA6Yi5jIiAiYXJndW1lbnQgbm90IC5zdGFydCxlbmQ6ZmlsZSIKK3Rlc3RfYmFkX29wdHMgIi1MIDpmb286Yi5jIiAibm8gbWF0Y2giCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1MIFggKFggPT0gbmxpbmVzKScgJworCW49JCh3YyAtbCA8Yi5jKSAmJgorCWdpdCBsb2cgLUwgJG46Yi5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1MIFggKFggPT0gbmxpbmVzICsgMSknICcKKwluPSQoZXhwciAkKHdjIC1sIDxiLmMpICsgMSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC1MICRuOmIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctTCBYIChYID09IG5saW5lcyArIDIpJyAnCisJbj0kKGV4cHIgJCh3YyAtbCA8Yi5jKSArIDIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtTCAkbjpiLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLUwgLFkgKFkgPT0gbmxpbmVzKScgJworCW49JChwcmludGYgIiVkIiAkKHdjIC1sIDxiLmMpKSAmJgorCWdpdCBsb2cgLUwgLCRuOmIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctTCAsWSAoWSA9PSBubGluZXMgKyAxKScgJworCW49JChleHByICQod2MgLWwgPGIuYykgKyAxKSAmJgorCWdpdCBsb2cgLUwgLCRuOmIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctTCAsWSAoWSA9PSBubGluZXMgKyAyKScgJworCW49JChleHByICQod2MgLWwgPGIuYykgKyAyKSAmJgorCWdpdCBsb2cgLUwgLCRuOmIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctTCB3aXRoIC0tZmlyc3QtcGFyZW50IGFuZCBhIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IHBhcmFsbGVsLWNoYW5nZSAmJgorCWdpdCBsb2cgLS1maXJzdC1wYXJlbnQgLUwgMSwxOmIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctTCB3aXRoIC0tb3V0cHV0JyAnCisJZ2l0IGNoZWNrb3V0IHBhcmFsbGVsLWNoYW5nZSAmJgorCWdpdCBsb2cgLS1vdXRwdXQ9bG9nIC1MIDptYWluOmIuYyA+b3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDcwIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYW5nZV9zZXRfdW5pb24nICcKKwl0ZXN0X3NlcSA1MDAgPiBjLmMgJiYKKwlnaXQgYWRkIGMuYyAmJgorCWdpdCBjb21taXQgLW0gIm1hbnkgbGluZXMiICYmCisJdGVzdF9zZXEgMTAwMCA+IGMuYyAmJgorCWdpdCBhZGQgYy5jICYmCisJZ2l0IGNvbW1pdCAtbSAibW9kaWZ5IG1hbnkgbGluZXMiICYmCisJZ2l0IGxvZyAkKGZvciB4IGluICQodGVzdF9zZXEgMjAwKTsgZG8gZWNobyAtTCAkKCgyKngpKSwrMTpjLmM7IGRvbmUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1zIHNob3dzIG9ubHkgbGluZS1sb2cgY29tbWl0cycgJworCWdpdCBsb2cgLS1mb3JtYXQ9ImNvbW1pdCAlcyIgLUwxLDI0OmIuYyA+ZXhwZWN0LnJhdyAmJgorCWdyZXAgXmNvbW1pdCBleHBlY3QucmF3ID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSJjb21taXQgJXMiIC1MMSwyNDpiLmMgLXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLXAgc2hvd3MgdGhlIGRlZmF1bHQgcGF0Y2ggb3V0cHV0JyAnCisJZ2l0IGxvZyAtTDEsMjQ6Yi5jID5leHBlY3QgJiYKKwlnaXQgbG9nIC1MMSwyNDpiLmMgLXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yYXcgaXMgZm9yYmlkZGVuJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtTDEsMjQ6Yi5jIC0tcmF3CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBjaGVja2luZyBmYW5jeSByZW5hbWUgZm9sbG93aW5nJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG1vdmVzLXN0YXJ0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJcHJpbnRmICIlc1xuIiAgICAxMiAxMyAxNCAxNSAgICAgIGIgYyBkIGUgICA+ZmlsZS0xICYmCisJcHJpbnRmICIlc1xuIiAgICAyMiAyMyAyNCAyNSAgICAgIEIgQyBEIEUgICA+ZmlsZS0yICYmCisJZ2l0IGFkZCBmaWxlLTEgZmlsZS0yICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIGZpbGUtMSBhbmQgZmlsZS0yIiAmJgorCW9pZF9hZGRfZjFfZjI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKworCWdpdCBjaGVja291dCAtYiBtb3Zlcy1tYWluICYmCisJcHJpbnRmICIlc1xuIiAxMSAxMiAxMyAxNCAxNSAgICAgIGIgYyBkIGUgICA+ZmlsZS0xICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiTW9kaWZ5IGZpbGUtMSBvbiBtYWluIiAmJgorCW9pZF9tb2RfZjFfbWFpbj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCisJcHJpbnRmICIlc1xuIiAyMSAyMiAyMyAyNCAyNSAgICAgIEIgQyBEIEUgICA+ZmlsZS0yICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiTW9kaWZ5IGZpbGUtMiBvbiBtYWluICMxIiAmJgorCW9pZF9tb2RfZjJfbWFpbl8xPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisKKwlnaXQgbXYgZmlsZS0xIHJlbmFtZWQtMSAmJgorCWdpdCBjb21taXQgLW0gIlJlbmFtZSBmaWxlLTEgdG8gcmVuYW1lZC0xIG9uIG1haW4iICYmCisKKwlwcmludGYgIiVzXG4iIDExIDEyIDEzIDE0IDE1ICAgICAgYiBjIGQgZSBmID5yZW5hbWVkLTEgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJNb2RpZnkgcmVuYW1lZC0xIG9uIG1haW4iICYmCisJb2lkX21vZF9yMV9tYWluPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisKKwlwcmludGYgIiVzXG4iIDIxIDIyIDIzIDI0IDI1ICAgICAgQiBDIEQgRSBGID5maWxlLTIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJNb2RpZnkgZmlsZS0yIG9uIG1haW4gIzIiICYmCisJb2lkX21vZF9mMl9tYWluXzI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKworCWdpdCBjaGVja291dCAtYiBtb3Zlcy1zaWRlIG1vdmVzLXN0YXJ0ICYmCisJcHJpbnRmICIlc1xuIiAgICAxMiAxMyAxNCAxNSAxNiAgIGIgYyBkIGUgICA+ZmlsZS0xICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiTW9kaWZ5IGZpbGUtMSBvbiBzaWRlICMxIiAmJgorCW9pZF9tb2RfZjFfc2lkZV8xPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisKKwlwcmludGYgIiVzXG4iICAgIDIyIDIzIDI0IDI1IDI2ICAgQiBDIEQgRSAgID5maWxlLTIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJNb2RpZnkgZmlsZS0yIG9uIHNpZGUiICYmCisJb2lkX21vZF9mMl9zaWRlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisKKwlnaXQgbXYgZmlsZS0yIHJlbmFtZWQtMiAmJgorCWdpdCBjb21taXQgLW0gIlJlbmFtZSBmaWxlLTIgdG8gcmVuYW1lZC0yIG9uIHNpZGUiICYmCisKKwlwcmludGYgIiVzXG4iICAgIDEyIDEzIDE0IDE1IDE2IGEgYiBjIGQgZSAgID5maWxlLTEgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJNb2RpZnkgZmlsZS0xIG9uIHNpZGUgIzIiICYmCisJb2lkX21vZF9mMV9zaWRlXzI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKworCXByaW50ZiAiJXNcbiIgICAgMjIgMjMgMjQgMjUgMjYgQSBCIEMgRCBFICAgPnJlbmFtZWQtMiAmJgorCWdpdCBjb21taXQgLWEgLW0gIk1vZGlmeSByZW5hbWVkLTIgb24gc2lkZSIgJiYKKwlvaWRfbW9kX3IyX3NpZGU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKworCWdpdCBjaGVja291dCBtb3Zlcy1tYWluICYmCisJZ2l0IG1lcmdlIG1vdmVzLXNpZGUgJiYKKwlvaWRfbWVyZ2U9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFuY3kgcmVuYW1lIGZvbGxvd2luZyAjMScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSRvaWRfbWVyZ2UgTWVyZ2UgYnJhbmNoICdcJydtb3Zlcy1zaWRlJ1wnJyBpbnRvIG1vdmVzLW1haW4KKwkkb2lkX21vZF9mMV9zaWRlXzIgTW9kaWZ5IGZpbGUtMSBvbiBzaWRlICMyCisJJG9pZF9tb2RfZjFfc2lkZV8xIE1vZGlmeSBmaWxlLTEgb24gc2lkZSAjMQorCSRvaWRfbW9kX3IxX21haW4gTW9kaWZ5IHJlbmFtZWQtMSBvbiBtYWluCisJJG9pZF9tb2RfZjFfbWFpbiBNb2RpZnkgZmlsZS0xIG9uIG1haW4KKwkkb2lkX2FkZF9mMV9mMiBBZGQgZmlsZS0xIGFuZCBmaWxlLTIKKwlFT0YKKwlnaXQgbG9nIC1MMTpyZW5hbWVkLTEgLS1vbmVsaW5lIC0tbm8tcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFuY3kgcmVuYW1lIGZvbGxvd2luZyAjMicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSRvaWRfbWVyZ2UgTWVyZ2UgYnJhbmNoICdcJydtb3Zlcy1zaWRlJ1wnJyBpbnRvIG1vdmVzLW1haW4KKwkkb2lkX21vZF9yMl9zaWRlIE1vZGlmeSByZW5hbWVkLTIgb24gc2lkZQorCSRvaWRfbW9kX2YyX3NpZGUgTW9kaWZ5IGZpbGUtMiBvbiBzaWRlCisJJG9pZF9tb2RfZjJfbWFpbl8yIE1vZGlmeSBmaWxlLTIgb24gbWFpbiAjMgorCSRvaWRfbW9kX2YyX21haW5fMSBNb2RpZnkgZmlsZS0yIG9uIG1haW4gIzEKKwkkb2lkX2FkZF9mMV9mMiBBZGQgZmlsZS0xIGFuZCBmaWxlLTIKKwlFT0YKKwlnaXQgbG9nIC1MMTpyZW5hbWVkLTIgLS1vbmVsaW5lIC0tbm8tcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjExL2hpc3RvcnkuZXhwb3J0IGIvdC90NDIxMS9oaXN0b3J5LmV4cG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWY0MWUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9oaXN0b3J5LmV4cG9ydApAQCAtMCwwICsxLDQwNiBAQAorYmxvYgorbWFyayA6MQorZGF0YSAxNTcKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgZihpbnQgeCkKK3sKKwlpbnQgcyA9IDA7CisJd2hpbGUgKHgpIHsKKwkJeCA+Pj0gMTsKKwkJcysrOworCX0KK30KKworLyoKKyAqIEEgY29tbWVudC4KKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworcmVzZXQgcmVmcy90YWdzL3NpbXBsZQorY29tbWl0IHJlZnMvdGFncy9zaW1wbGUKK21hcmsgOjIKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0Njg4ICswMTAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDY4OCArMDEwMAorZGF0YSA4Citpbml0aWFsCitNIDEwMDY0NCA6MSBhLmMKKworYmxvYgorbWFyayA6MworZGF0YSAxNjgKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgZihpbnQgeCkKK3sKKwlpbnQgcyA9IDA7CisJd2hpbGUgKHgpIHsKKwkJeCA+Pj0gMTsKKwkJcysrOworCX0KKwlyZXR1cm4gczsKK30KKworLyoKKyAqIEEgY29tbWVudC4KKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworY29tbWl0IHJlZnMvdGFncy9zaW1wbGUKK21hcmsgOjQKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0Njk1ICswMTAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDY5NSArMDEwMAorZGF0YSAxMQorY2hhbmdlIGYoKQorZnJvbSA6MgorTSAxMDA2NDQgOjMgYS5jCisKK2Jsb2IKK21hcmsgOjUKK2RhdGEgMTcxCisjaW5jbHVkZSA8c3RkaW8uaD4KKworbG9uZyBmKGxvbmcgeCkKK3sKKwlpbnQgcyA9IDA7CisJd2hpbGUgKHgpIHsKKwkJeCA+Pj0gMTsKKwkJcysrOworCX0KKwlyZXR1cm4gczsKK30KKworLyoKKyAqIEEgY29tbWVudC4KKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKK2NvbW1pdCByZWZzL3RhZ3Mvc2ltcGxlCittYXJrIDo2CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDcxNiArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ3MTYgKzAxMDAKK2RhdGEgMjEKK3RvdWNoIGJvdGggZnVuY3Rpb25zCitmcm9tIDo0CitNIDEwMDY0NCA6NSBhLmMKKworYmxvYgorbWFyayA6NworZGF0YSAxODUKKyNpbmNsdWRlIDxzdGRpby5oPgorCitsb25nIGYobG9uZyB4KQoreworCWludCBzID0gMDsKKwl3aGlsZSAoeCkgeworCQl4ID4+PSAxOworCQlzKys7CisJfQorCXJldHVybiBzOworfQorCisvKgorICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgKi8KKworaW50IG1haW4gKCkKK3sKKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworCXJldHVybiAwOworfQorCitjb21taXQgcmVmcy90YWdzL3NpbXBsZQorbWFyayA6OAorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ3NDEgKzAxMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0NzQxICswMTAwCitkYXRhIDE0Cit0b3VjaCBjb21tZW50Citmcm9tIDo2CitNIDEwMDY0NCA6NyBhLmMKKworYmxvYgorbWFyayA6OQorZGF0YSAyMDUKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitsb25nIGYobG9uZyB4KQoreworCWludCBzID0gMDsKKwl3aGlsZSAoeCkgeworCQl4ID4+PSAxOworCQlzKys7CisJfQorCXJldHVybiBzOworfQorCisvKgorICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgKi8KKworaW50IG1haW4gKCkKK3sKKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworCXJldHVybiAwOworfQorCitjb21taXQgcmVmcy90YWdzL3NpbXBsZQorbWFyayA6MTAKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0ODYwICswMTAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDg2MCArMDEwMAorZGF0YSAyNQorY2hhbmdlIGF0IHZlcnkgYmVnaW5uaW5nCitmcm9tIDo4CitNIDEwMDY0NCA6OSBhLmMKKworYmxvYgorbWFyayA6MTEKK2RhdGEgMjA0CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbG9uZyBmKGxvbmcgeCkKK3sKKwlpbnQgcyA9IDA7CisJd2hpbGUgKHgpIHsKKwkJeCA+Pj0gMTsKKwkJcysrOworCX0KKwlyZXR1cm4gczsKK30KKworLyoKKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICovCisKK2ludCBtYWluICgpCit7CisJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KK2NvbW1pdCByZWZzL3RhZ3Mvc2ltcGxlCittYXJrIDoxMgorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ4OTAgKzAxMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0ODkwICswMTAwCitkYXRhIDM2CitjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorZnJvbSA6MTAKK00gMTAwNjQ0IDoxMSBhLmMKKworYmxvYgorbWFyayA6MTMKK2RhdGEgMjM4CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbG9uZyBmKGxvbmcgeCkKK3sKKwlpbnQgcyA9IDA7CisJd2hpbGUgKHgpIHsKKwkJeCA+Pj0gMTsKKwkJcysrOworCX0KKwlyZXR1cm4gczsKK30KKworLyoKKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICovCisKK2ludCBtYWluICgpCit7CisJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgcmVmcy90YWdzL3NpbXBsZQorbWFyayA6MTQKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0OTIzICswMTAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDkyMyArMDEwMAorZGF0YSAyOQorY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorZnJvbSA6MTIKK00gMTAwNjQ0IDoxMyBhLmMKKworY29tbWl0IHJlZnMvdGFncy9tb3ZlLXN1cHBvcnQKK21hcmsgOjE1CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDk2OCArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ5NjggKzAxMDAKK2RhdGEgMTAKK21vdmUgZmlsZQorZnJvbSA6MTQKK0QgYS5jCitNIDEwMDY0NCA6MTMgYi5jCisKK2Jsb2IKK21hcmsgOjE2CitkYXRhIDIzNworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2xvbmcgZihsb25nIHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggLz0gMjsKKwkJcysrOworCX0KKwlyZXR1cm4gczsKK30KKworLyoKKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICovCisKK2ludCBtYWluICgpCit7CisJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgcmVmcy90YWdzL21vdmUtc3VwcG9ydAorbWFyayA6MTcKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0OTkwICswMTAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDk5MCArMDEwMAorZGF0YSAyMgorYW5vdGhlciBzaW1wbGUgY2hhbmdlCitmcm9tIDoxNQorTSAxMDA2NDQgOjE2IGIuYworCitibG9iCittYXJrIDoxOAorZGF0YSAyNTQKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitsb25nIGYobG9uZyB4KTsKKworLyoKKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICovCisKK2ludCBtYWluICgpCit7CisJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitsb25nIGYobG9uZyB4KQoreworCWludCBzID0gMDsKKwl3aGlsZSAoeCkgeworCQl4IC89IDI7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorbWFyayA6MTkKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ1MDI0ICswMTAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NTAyNCArMDEwMAorZGF0YSAyMQorbW92ZSB3aXRoaW4gdGhlIGZpbGUKK2Zyb20gOjE3CitNIDEwMDY0NCA6MTggYi5jCisKK2Jsb2IKK21hcmsgOjIwCitkYXRhIDI0MworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2xvbmcgZihsb25nIHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYSBzaG9ydCBleGFtcGxlIQorICovCisKK2ludCBtYWluICgpCit7CisJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgcmVmcy9oZWFkcy9wYXJhbGxlbC1jaGFuZ2UKK21hcmsgOjIxCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzY1Nzc2MTU3ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzY1Nzc2MTU3ICswMjAwCitkYXRhIDU1CitjaGFuZ2Ugb24gYW5vdGhlciBsaW5lIG9mIGhpc3Rvcnkgd2hpbGUgcmVuYW1lIGhhcHBlbnMKK2Zyb20gOjE0CitNIDEwMDY0NCA6MjAgYS5jCisKK2Jsb2IKK21hcmsgOjIyCitkYXRhIDI0MgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2xvbmcgZihsb25nIHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggLz0gMjsKKwkJcysrOworCX0KKwlyZXR1cm4gczsKK30KKworLyoKKyAqIFRoaXMgaXMgb25seSBhIHNob3J0IGV4YW1wbGUhCisgKi8KKworaW50IG1haW4gKCkKK3sKKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworCXJldHVybiAwOworfQorCisvKiBpbmNvbXBsZXRlIGxpbmVzIGFyZSBiYWQhICovCisKK2NvbW1pdCByZWZzL2hlYWRzL3BhcmFsbGVsLWNoYW5nZQorbWFyayA6MjMKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNjU3NzYxODQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNjU3NzYxOTEgKzAyMDAKK2RhdGEgMjQKK01lcmdlIGFjcm9zcyB0aGUgcmVuYW1lCitmcm9tIDoyMQorbWVyZ2UgOjE3CitEIGEuYworTSAxMDA2NDQgOjIyIGIuYworCityZXNldCByZWZzL2hlYWRzL3BhcmFsbGVsLWNoYW5nZQorZnJvbSA6MjMKKwpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGExL2V4cGVjdC5iZWdpbm5pbmctb2YtZmlsZSBiL3QvdDQyMTEvc2hhMS9leHBlY3QuYmVnaW5uaW5nLW9mLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiNDA1NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvc2hhMS9leHBlY3QuYmVnaW5uaW5nLW9mLWZpbGUKQEAgLTAsMCArMSw0MyBAQAorY29tbWl0IDRhMjNhZTVjOThkNTlhNThjNmRhMDM2MTU2OTU5ZjJkYzlmNDcyYWQKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0Nzo0MCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYXQgdmVyeSBiZWdpbm5pbmcKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xLDMgKzEsNCBAQAorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAKKyBsb25nIGYobG9uZyB4KQorCitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMSwzICsxLDMgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICsxLDMgQEAKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKytpbnQgZihpbnQgeCkKZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMS9leHBlY3QuZW5kLW9mLWZpbGUgYi90L3Q0MjExL3NoYTEvZXhwZWN0LmVuZC1vZi1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMjViYjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTEvZXhwZWN0LmVuZC1vZi1maWxlCkBAIC0wLDAgKzEsNjIgQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTIwLDMgKzIwLDUgQEAKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorKworKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IDEwMGI2MWE2ZjJmNzIwZjgxMjYyMGE5ZDEwYWZiM2E5NjBjY2I3M2MKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODoxMCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTIwLDMgKzIwLDMgQEAKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTksMyArMTksMyBAQAorLQlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMTgsMyBAQAorKwlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMS9leHBlY3QubW92ZS1zdXBwb3J0LWYgYi90L3Q0MjExL3NoYTEvZXhwZWN0Lm1vdmUtc3VwcG9ydC1mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MDVlMDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTEvZXhwZWN0Lm1vdmUtc3VwcG9ydC1mCkBAIC0wLDAgKzEsODAgQEAKK2NvbW1pdCA2Y2UzYzRmZjY5MDEzNjA5OWJiMTdlMWE4NzY2Yjc1NzY0NzI2ZWE3CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDk6NTAgMjAxMyArMDEwMAorCisgICAgYW5vdGhlciBzaW1wbGUgY2hhbmdlCisKK2RpZmYgLS1naXQgYS9iLmMgYi9iLmMKKy0tLSBhL2IuYworKysrIGIvYi5jCitAQCAtNCw5ICs0LDkgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworLQkJeCA+Pj0gMTsKKysJCXggLz0gMjsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDkgKzMsOSBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKworY29tbWl0IGYwNGZiMjBmMmM3Nzg1MDk5NmNiYTczOTcwOWFjYzZmYWVjYzU4ZjcKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw4ICszLDkgQEAKKyBpbnQgZihpbnQgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKysJcmV0dXJuIHM7CisgfQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDggQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTEvZXhwZWN0Lm11bHRpcGxlIGIvdC90NDIxMS9zaGExL2V4cGVjdC5tdWx0aXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmFkNWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGExL2V4cGVjdC5tdWx0aXBsZQpAQCAtMCwwICsxLDEwNCBAQAorY29tbWl0IDQ2NTk1Mzg4NDRkYWEyODQ5YjFhOWU3ZDZmYWRiOTZmY2QyNmZjODMKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNyBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisrCisrLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgMTAwYjYxYTZmMmY3MjBmODEyNjIwYTlkMTBhZmIzYTk2MGNjYjczYworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDkgKzMsOSBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KK0BAIC0xNyw1ICsxNyw1IEBACisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZjA0ZmIyMGYyYzc3ODUwOTk2Y2JhNzM5NzA5YWNjNmZhZWNjNThmNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDggKzMsOSBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsOCBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMS9leHBlY3QubXVsdGlwbGUtb3ZlcmxhcHBpbmcgYi90L3Q0MjExL3NoYTEvZXhwZWN0Lm11bHRpcGxlLW92ZXJsYXBwaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MzBiNmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTEvZXhwZWN0Lm11bHRpcGxlLW92ZXJsYXBwaW5nCkBAIC0wLDAgKzEsMTg3IEBACitjb21taXQgNDY1OTUzODg0NGRhYTI4NDliMWE5ZTdkNmZhZGI5NmZjZDI2ZmM4MworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjQzIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC00LDE5ICs0LDIxIEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK30KKysKKysvKiBpbmNvbXBsZXRlIGxpbmVzIGFyZSBiYWQhICovCisKK2NvbW1pdCAxMDBiNjFhNmYyZjcyMGY4MTI2MjBhOWQxMGFmYjNhOTYwY2NiNzNjCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC00LDE5ICs0LDE5IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworY29tbWl0IDM5YjZlYjJkNWI3MDZkMzMyMjE4NGExNjlmNjY2ZjI1ZWQzZmJkMDAKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NTo0MSAyMDEzICswMTAwCisKKyAgICB0b3VjaCBjb21tZW50CisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxOSArMywxOSBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorLSAqIEEgY29tbWVudC4KKysgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxOSArMywxOSBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKy0JcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBmMDRmYjIwZjJjNzc4NTA5OTZjYmE3Mzk3MDlhY2M2ZmFlY2M1OGY3CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTggKzMsMTkgQEAKKyBpbnQgZihpbnQgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKysJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMywxOCBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KKysKKysvKgorKyAqIEEgY29tbWVudC4KKysgKi8KKysKKytpbnQgbWFpbiAoKQorK3sKKysJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlyZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTEvZXhwZWN0Lm11bHRpcGxlLXN1cGVyc2V0IGIvdC90NDIxMS9zaGExL2V4cGVjdC5tdWx0aXBsZS1zdXBlcnNldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTMwYjZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGExL2V4cGVjdC5tdWx0aXBsZS1zdXBlcnNldApAQCAtMCwwICsxLDE4NyBAQAorY29tbWl0IDQ2NTk1Mzg4NDRkYWEyODQ5YjFhOWU3ZDZmYWRiOTZmY2QyNmZjODMKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtNCwxOSArNCwyMSBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisrCisrLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgMTAwYjYxYTZmMmY3MjBmODEyNjIwYTlkMTBhZmIzYTk2MGNjYjczYworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtNCwxOSArNCwxOSBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCAzOWI2ZWIyZDViNzA2ZDMzMjIxODRhMTY5ZjY2NmYyNWVkM2ZiZDAwCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6NDEgMjAxMyArMDEwMAorCisgICAgdG91Y2ggY29tbWVudAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTkgKzMsMTkgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKy0gKiBBIGNvbW1lbnQuCisrICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGE2ZWI4MjY0N2Q1ZDY3Zjg5M2RhNDQyZjhmOTM3NWZkODlhM2IxZTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTkgKzMsMTkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZjA0ZmIyMGYyYzc3ODUwOTk2Y2JhNzM5NzA5YWNjNmZhZWNjNThmNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE4ICszLDE5IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsMTggQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CisrCisrLyoKKysgKiBBIGNvbW1lbnQuCisrICovCisrCisraW50IG1haW4gKCkKKyt7CisrCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGExL2V4cGVjdC5wYXJhbGxlbC1jaGFuZ2UtZi10by1tYWluIGIvdC90NDIxMS9zaGExL2V4cGVjdC5wYXJhbGxlbC1jaGFuZ2UtZi10by1tYWluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MmRlZjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTEvZXhwZWN0LnBhcmFsbGVsLWNoYW5nZS1mLXRvLW1haW4KQEAgLTAsMCArMSwxNjAgQEAKK2NvbW1pdCAwNDY5YzYwYmM0ODM3ZDUyZDk3YjFmMDgxZGVjNWY5OGRlYTIwZmVkCitNZXJnZTogYmEyMjdjNiA2Y2UzYzRmCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4KK0RhdGU6ICAgRnJpIEFwciAxMiAxNjoxNjoyNCAyMDEzICswMjAwCisKKyAgICBNZXJnZSBhY3Jvc3MgdGhlIHJlbmFtZQorCisKK2NvbW1pdCA2Y2UzYzRmZjY5MDEzNjA5OWJiMTdlMWE4NzY2Yjc1NzY0NzI2ZWE3CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDk6NTAgMjAxMyArMDEwMAorCisgICAgYW5vdGhlciBzaW1wbGUgY2hhbmdlCisKK2RpZmYgLS1naXQgYS9iLmMgYi9iLmMKKy0tLSBhL2IuYworKysrIGIvYi5jCitAQCAtNCwxNCArNCwxNCBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CistCQl4ID4+PSAxOworKwkJeCAvPSAyOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorCitjb21taXQgYmEyMjdjNjYzMjM0OTcwMGZiYjk1N2RlYzJiNTBmNWUyMzU4YmUzZgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+CitEYXRlOiAgIEZyaSBBcHIgMTIgMTY6MTU6NTcgMjAxMyArMDIwMAorCisgICAgY2hhbmdlIG9uIGFub3RoZXIgbGluZSBvZiBoaXN0b3J5IHdoaWxlIHJlbmFtZSBoYXBwZW5zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtNCwxNCArNCwxNCBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorLSAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorKyAqIFRoaXMgaXMgb25seSBhIHNob3J0IGV4YW1wbGUhCisgICovCisgCisKK2NvbW1pdCAzOWI2ZWIyZDViNzA2ZDMzMjIxODRhMTY5ZjY2NmYyNWVkM2ZiZDAwCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6NDEgMjAxMyArMDEwMAorCisgICAgdG91Y2ggY29tbWVudAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTQgKzMsMTQgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKy0gKiBBIGNvbW1lbnQuCisrICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE0ICszLDE0IEBACistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorCitjb21taXQgZjA0ZmIyMGYyYzc3ODUwOTk2Y2JhNzM5NzA5YWNjNmZhZWNjNThmNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDEzICszLDE0IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMywxMyBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KKysKKysvKgorKyAqIEEgY29tbWVudC4KKysgKi8KKysKZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMS9leHBlY3Quc2ltcGxlLWYgYi90L3Q0MjExL3NoYTEvZXhwZWN0LnNpbXBsZS1mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZjViYzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTEvZXhwZWN0LnNpbXBsZS1mCkBAIC0wLDAgKzEsNTkgQEAKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDkgKzMsOSBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKworY29tbWl0IGYwNGZiMjBmMmM3Nzg1MDk5NmNiYTczOTcwOWFjYzZmYWVjYzU4ZjcKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw4ICszLDkgQEAKKyBpbnQgZihpbnQgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKysJcmV0dXJuIHM7CisgfQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDggQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTEvZXhwZWN0LnNpbXBsZS1mLXRvLW1haW4gYi90L3Q0MjExL3NoYTEvZXhwZWN0LnNpbXBsZS1mLXRvLW1haW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ3NTc2OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvc2hhMS9leHBlY3Quc2ltcGxlLWYtdG8tbWFpbgpAQCAtMCwwICsxLDEwMCBAQAorY29tbWl0IDM5YjZlYjJkNWI3MDZkMzMyMjE4NGExNjlmNjY2ZjI1ZWQzZmJkMDAKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NTo0MSAyMDEzICswMTAwCisKKyAgICB0b3VjaCBjb21tZW50CisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxNCArMywxNCBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorLSAqIEEgY29tbWVudC4KKysgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKworY29tbWl0IGE2ZWI4MjY0N2Q1ZDY3Zjg5M2RhNDQyZjhmOTM3NWZkODlhM2IxZTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTQgKzMsMTQgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisKK2NvbW1pdCBmMDRmYjIwZjJjNzc4NTA5OTZjYmE3Mzk3MDlhY2M2ZmFlY2M1OGY3CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTMgKzMsMTQgQEAKKyBpbnQgZihpbnQgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKysJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDEzIEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQorKworKy8qCisrICogQSBjb21tZW50LgorKyAqLworKwpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGExL2V4cGVjdC5zaW1wbGUtbWFpbiBiL3QvdDQyMTEvc2hhMS9leHBlY3Quc2ltcGxlLW1haW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljZTM5YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvc2hhMS9leHBlY3Quc2ltcGxlLW1haW4KQEAgLTAsMCArMSw2OCBAQAorY29tbWl0IDQ2NTk1Mzg4NDRkYWEyODQ5YjFhOWU3ZDZmYWRiOTZmY2QyNmZjODMKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisKK2NvbW1pdCAxMDBiNjFhNmYyZjcyMGY4MTI2MjBhOWQxMGFmYjNhOTYwY2NiNzNjCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xOCw1ICsxOCw1IEBACisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworY29tbWl0IGE2ZWI4MjY0N2Q1ZDY3Zjg5M2RhNDQyZjhmOTM3NWZkODlhM2IxZTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE3LDUgKzE3LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKy0JcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzE2LDUgQEAKKytpbnQgbWFpbiAoKQorK3sKKysJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlyZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTEvZXhwZWN0LnNpbXBsZS1tYWluLXRvLWVuZCBiL3QvdDQyMTEvc2hhMS9leHBlY3Quc2ltcGxlLW1haW4tdG8tZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ODBiZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTEvZXhwZWN0LnNpbXBsZS1tYWluLXRvLWVuZApAQCAtMCwwICsxLDcwIEBACitjb21taXQgNDY1OTUzODg0NGRhYTI4NDliMWE5ZTdkNmZhZGI5NmZjZDI2ZmM4MworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjQzIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xOCw1ICsxOCw3IEBACisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK30KKysKKysvKiBpbmNvbXBsZXRlIGxpbmVzIGFyZSBiYWQhICovCisKK2NvbW1pdCAxMDBiNjFhNmYyZjcyMGY4MTI2MjBhOWQxMGFmYjNhOTYwY2NiNzNjCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xOCw1ICsxOCw1IEBACisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworY29tbWl0IGE2ZWI4MjY0N2Q1ZDY3Zjg5M2RhNDQyZjhmOTM3NWZkODlhM2IxZTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE3LDUgKzE3LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKy0JcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzE2LDUgQEAKKytpbnQgbWFpbiAoKQorK3sKKysJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlyZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTEvZXhwZWN0LnR3by1yYW5nZXMgYi90L3Q0MjExL3NoYTEvZXhwZWN0LnR3by1yYW5nZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEwOWFhMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvc2hhMS9leHBlY3QudHdvLXJhbmdlcwpAQCAtMCwwICsxLDEwMiBAQAorY29tbWl0IDQ2NTk1Mzg4NDRkYWEyODQ5YjFhOWU3ZDZmYWRiOTZmY2QyNmZjODMKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisKK2NvbW1pdCAxMDBiNjFhNmYyZjcyMGY4MTI2MjBhOWQxMGFmYjNhOTYwY2NiNzNjCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xOCw1ICsxOCw1IEBACisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworY29tbWl0IGE2ZWI4MjY0N2Q1ZDY3Zjg5M2RhNDQyZjhmOTM3NWZkODlhM2IxZTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsOSArMyw5IEBACistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorQEAgLTE3LDUgKzE3LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKy0JcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBmMDRmYjIwZjJjNzc4NTA5OTZjYmE3Mzk3MDlhY2M2ZmFlY2M1OGY3CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsOCArMyw5IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMyw4IEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGExL2V4cGVjdC52YW5pc2hlcy1lYXJseSBiL3QvdDQyMTEvc2hhMS9leHBlY3QudmFuaXNoZXMtZWFybHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3Y2QwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvc2hhMS9leHBlY3QudmFuaXNoZXMtZWFybHkKQEAgLTAsMCArMSwzOSBAQAorY29tbWl0IDQ2NTk1Mzg4NDRkYWEyODQ5YjFhOWU3ZDZmYWRiOTZmY2QyNmZjODMKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMjIsMSArMjQsMSBAQAorLX0KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IDEwMGI2MWE2ZjJmNzIwZjgxMjYyMGE5ZDEwYWZiM2E5NjBjY2I3M2MKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODoxMCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTIyLDEgKzIyLDEgQEAKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzIwLDEgQEAKKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTI1Ni9leHBlY3QuYmVnaW5uaW5nLW9mLWZpbGUgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3QuYmVnaW5uaW5nLW9mLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkZmRmYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5iZWdpbm5pbmctb2YtZmlsZQpAQCAtMCwwICsxLDQzIEBACitjb21taXQgNjJhNDBiMzhmYTRmMDA4MDAwMDRhZWU4MWVmMjg3YjcyMDEzMTc1OTRlYmNiOTkwZjM4Y2JlNDkzYjAxZDIwMAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ3OjQwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBhdCB2ZXJ5IGJlZ2lubmluZworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTEsMyArMSw0IEBACisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorIAorIGxvbmcgZihsb25nIHgpCisKK2NvbW1pdCBjY2Y5N2I5ODc4MTg5YzQwYTk4MWRhNTBiMTU3MTNiYjgwYTM1NzU1MzI2MzIwZWM4MDkwMGNhZjIyY2VkNDZmCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xLDMgKzEsMyBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorIAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisKK2NvbW1pdCAxZGQ3ZTliMmIxNjk5MzI0YjUzYjM0MWU3Mjg2NTNiOTEzYmMxOTJhMTRkZmVhMTY4YzViNTFmMmIzZDAzNTkyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzEsMyBAQAorKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBmKGludCB4KQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGEyNTYvZXhwZWN0LmVuZC1vZi1maWxlIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0LmVuZC1vZi1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYWI1YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3QuZW5kLW9mLWZpbGUKQEAgLTAsMCArMSw2MiBAQAorY29tbWl0IDU1MjZlZDA1YzI0NzZiNTZhZjhiN2JlNDk5ZThmNzhiZDUwZjQ5MDc0MDczM2E5Y2E3ZTFmNTU4NzhmYTkwYTkKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMjAsMyArMjAsNSBAQAorIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisrCisrLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgMjlmMzJhYzMxNDFjNDhiMjI4MDNlNWM0MTI3YjcxOTkxN2I2N2QwZjhjYThjNTI0OGJlYmZhMmExOWY3ZGExMAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMjAsMyArMjAsMyBAQAorIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCBjY2Y5N2I5ODc4MTg5YzQwYTk4MWRhNTBiMTU3MTNiYjgwYTM1NzU1MzI2MzIwZWM4MDkwMGNhZjIyY2VkNDZmCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xOSwzICsxOSwzIEBACistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgMWRkN2U5YjJiMTY5OTMyNGI1M2IzNDFlNzI4NjUzYjkxM2JjMTkyYTE0ZGZlYTE2OGM1YjUxZjJiM2QwMzU5MgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICsxOCwzIEBACisrCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGEyNTYvZXhwZWN0Lm1vdmUtc3VwcG9ydC1mIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0Lm1vdmUtc3VwcG9ydC1mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyM2I0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3QubW92ZS1zdXBwb3J0LWYKQEAgLTAsMCArMSw4MCBAQAorY29tbWl0IDRmN2E1ODE5NWE5MmM0MDBlMjhhMjM1NDMyODU4N2YxZmYxNGZiNzdmNWNmODk0NTM2ZjE3Y2NiYzcyOTMxYjkKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0OTo1MCAyMDEzICswMTAwCisKKyAgICBhbm90aGVyIHNpbXBsZSBjaGFuZ2UKKworZGlmZiAtLWdpdCBhL2IuYyBiL2IuYworLS0tIGEvYi5jCisrKysgYi9iLmMKK0BAIC00LDkgKzQsOSBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CistCQl4ID4+PSAxOworKwkJeCAvPSAyOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKworY29tbWl0IGNjZjk3Yjk4NzgxODljNDBhOTgxZGE1MGIxNTcxM2JiODBhMzU3NTUzMjYzMjBlYzgwOTAwY2FmMjJjZWQ0NmYKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsOSArMyw5IEBACistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorCitjb21taXQgZjY0MzRhY2QzNDI2MGE2YzlmNjFlOTZkOTZiZjlhMzIzZDMzMDU2MWRmNWIxY2EyNjMxMTA0ZjgyMDI2ZGZlZAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDggKzMsOSBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCAxZGQ3ZTliMmIxNjk5MzI0YjUzYjM0MWU3Mjg2NTNiOTEzYmMxOTJhMTRkZmVhMTY4YzViNTFmMmIzZDAzNTkyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsOCBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5tdWx0aXBsZSBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5tdWx0aXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTAwNDA5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0Lm11bHRpcGxlCkBAIC0wLDAgKzEsMTA0IEBACitjb21taXQgNTUyNmVkMDVjMjQ3NmI1NmFmOGI3YmU0OTllOGY3OGJkNTBmNDkwNzQwNzMzYTljYTdlMWY1NTg3OGZhOTBhOQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjQzIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xOCw1ICsxOCw3IEBACisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK30KKysKKysvKiBpbmNvbXBsZXRlIGxpbmVzIGFyZSBiYWQhICovCisKK2NvbW1pdCAyOWYzMmFjMzE0MWM0OGIyMjgwM2U1YzQxMjdiNzE5OTE3YjY3ZDBmOGNhOGM1MjQ4YmViZmEyYTE5ZjdkYTEwCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xOCw1ICsxOCw1IEBACisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworY29tbWl0IGNjZjk3Yjk4NzgxODljNDBhOTgxZGE1MGIxNTcxM2JiODBhMzU3NTUzMjYzMjBlYzgwOTAwY2FmMjJjZWQ0NmYKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsOSArMyw5IEBACistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorQEAgLTE3LDUgKzE3LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKy0JcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBmNjQzNGFjZDM0MjYwYTZjOWY2MWU5NmQ5NmJmOWEzMjNkMzMwNTYxZGY1YjFjYTI2MzExMDRmODIwMjZkZmVkCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsOCArMyw5IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKworY29tbWl0IDFkZDdlOWIyYjE2OTkzMjRiNTNiMzQxZTcyODY1M2I5MTNiYzE5MmExNGRmZWExNjhjNWI1MWYyYjNkMDM1OTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMyw4IEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGEyNTYvZXhwZWN0Lm11bHRpcGxlLW92ZXJsYXBwaW5nIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0Lm11bHRpcGxlLW92ZXJsYXBwaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMTVhNDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3QubXVsdGlwbGUtb3ZlcmxhcHBpbmcKQEAgLTAsMCArMSwxODcgQEAKK2NvbW1pdCA1NTI2ZWQwNWMyNDc2YjU2YWY4YjdiZTQ5OWU4Zjc4YmQ1MGY0OTA3NDA3MzNhOWNhN2UxZjU1ODc4ZmE5MGE5CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTQsMTkgKzQsMjEgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorKworKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IDI5ZjMyYWMzMTQxYzQ4YjIyODAzZTVjNDEyN2I3MTk5MTdiNjdkMGY4Y2E4YzUyNDhiZWJmYTJhMTlmN2RhMTAKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODoxMCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTQsMTkgKzQsMTkgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgNWExYjM5ODkwNjNkNTVlNzFlNzY4NWVmYTMzOTJmMTMzMzg1YjQwMzRiZGRkZTUzMGRjYjUwOTBkOGI4YjhjYQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjQxIDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGNvbW1lbnQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE5ICszLDE5IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCistICogQSBjb21tZW50LgorKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBjY2Y5N2I5ODc4MTg5YzQwYTk4MWRhNTBiMTU3MTNiYjgwYTM1NzU1MzI2MzIwZWM4MDkwMGNhZjIyY2VkNDZmCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE5ICszLDE5IEBACistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorIGludCBtYWluICgpCisgeworLQlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGY2NDM0YWNkMzQyNjBhNmM5ZjYxZTk2ZDk2YmY5YTMyM2QzMzA1NjFkZjViMWNhMjYzMTEwNGY4MjAyNmRmZWQKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxOCArMywxOSBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgMWRkN2U5YjJiMTY5OTMyNGI1M2IzNDFlNzI4NjUzYjkxM2JjMTkyYTE0ZGZlYTE2OGM1YjUxZjJiM2QwMzU5MgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDE4IEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQorKworKy8qCisrICogQSBjb21tZW50LgorKyAqLworKworK2ludCBtYWluICgpCisreworKwlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5tdWx0aXBsZS1zdXBlcnNldCBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5tdWx0aXBsZS1zdXBlcnNldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDE1YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0Lm11bHRpcGxlLXN1cGVyc2V0CkBAIC0wLDAgKzEsMTg3IEBACitjb21taXQgNTUyNmVkMDVjMjQ3NmI1NmFmOGI3YmU0OTllOGY3OGJkNTBmNDkwNzQwNzMzYTljYTdlMWY1NTg3OGZhOTBhOQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjQzIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC00LDE5ICs0LDIxIEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK30KKysKKysvKiBpbmNvbXBsZXRlIGxpbmVzIGFyZSBiYWQhICovCisKK2NvbW1pdCAyOWYzMmFjMzE0MWM0OGIyMjgwM2U1YzQxMjdiNzE5OTE3YjY3ZDBmOGNhOGM1MjQ4YmViZmEyYTE5ZjdkYTEwCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC00LDE5ICs0LDE5IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworY29tbWl0IDVhMWIzOTg5MDYzZDU1ZTcxZTc2ODVlZmEzMzkyZjEzMzM4NWI0MDM0YmRkZGU1MzBkY2I1MDkwZDhiOGI4Y2EKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NTo0MSAyMDEzICswMTAwCisKKyAgICB0b3VjaCBjb21tZW50CisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxOSArMywxOSBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorLSAqIEEgY29tbWVudC4KKysgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgY2NmOTdiOTg3ODE4OWM0MGE5ODFkYTUwYjE1NzEzYmI4MGEzNTc1NTMyNjMyMGVjODA5MDBjYWYyMmNlZDQ2ZgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxOSArMywxOSBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKy0JcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBmNjQzNGFjZDM0MjYwYTZjOWY2MWU5NmQ5NmJmOWEzMjNkMzMwNTYxZGY1YjFjYTI2MzExMDRmODIwMjZkZmVkCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTggKzMsMTkgQEAKKyBpbnQgZihpbnQgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKysJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IDFkZDdlOWIyYjE2OTkzMjRiNTNiMzQxZTcyODY1M2I5MTNiYzE5MmExNGRmZWExNjhjNWI1MWYyYjNkMDM1OTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMywxOCBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KKysKKysvKgorKyAqIEEgY29tbWVudC4KKysgKi8KKysKKytpbnQgbWFpbiAoKQorK3sKKysJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlyZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTI1Ni9leHBlY3QucGFyYWxsZWwtY2hhbmdlLWYtdG8tbWFpbiBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5wYXJhbGxlbC1jaGFuZ2UtZi10by1tYWluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OGY4OTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3QucGFyYWxsZWwtY2hhbmdlLWYtdG8tbWFpbgpAQCAtMCwwICsxLDE2MCBAQAorY29tbWl0IDk4MTE3YzIwNTliNzZjMzY5OTU3NDhmYjk3YjAyNTQyYWVmNDc3ZmUyNjM3OWU5NGMxOGZkNzBmNzc5MGJjNjcKK01lcmdlOiBiNTExNjk0IDRmN2E1ODEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPgorRGF0ZTogICBGcmkgQXByIDEyIDE2OjE2OjI0IDIwMTMgKzAyMDAKKworICAgIE1lcmdlIGFjcm9zcyB0aGUgcmVuYW1lCisKKworY29tbWl0IDRmN2E1ODE5NWE5MmM0MDBlMjhhMjM1NDMyODU4N2YxZmYxNGZiNzdmNWNmODk0NTM2ZjE3Y2NiYzcyOTMxYjkKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0OTo1MCAyMDEzICswMTAwCisKKyAgICBhbm90aGVyIHNpbXBsZSBjaGFuZ2UKKworZGlmZiAtLWdpdCBhL2IuYyBiL2IuYworLS0tIGEvYi5jCisrKysgYi9iLmMKK0BAIC00LDE0ICs0LDE0IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKy0JCXggPj49IDE7CisrCQl4IC89IDI7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisKK2NvbW1pdCBiNTExNjk0ZjUzMzc2NjNmYmQ2OTc2MjI5OTNhNWY4ZTEwOTllY2E4NGJlNGRmMzEzZjJiM2VlOTRhMDk4YjQyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4KK0RhdGU6ICAgRnJpIEFwciAxMiAxNjoxNTo1NyAyMDEzICswMjAwCisKKyAgICBjaGFuZ2Ugb24gYW5vdGhlciBsaW5lIG9mIGhpc3Rvcnkgd2hpbGUgcmVuYW1lIGhhcHBlbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC00LDE0ICs0LDE0IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCistICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisrICogVGhpcyBpcyBvbmx5IGEgc2hvcnQgZXhhbXBsZSEKKyAgKi8KKyAKKworY29tbWl0IDVhMWIzOTg5MDYzZDU1ZTcxZTc2ODVlZmEzMzkyZjEzMzM4NWI0MDM0YmRkZGU1MzBkY2I1MDkwZDhiOGI4Y2EKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NTo0MSAyMDEzICswMTAwCisKKyAgICB0b3VjaCBjb21tZW50CisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxNCArMywxNCBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorLSAqIEEgY29tbWVudC4KKysgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKworY29tbWl0IGNjZjk3Yjk4NzgxODljNDBhOTgxZGE1MGIxNTcxM2JiODBhMzU3NTUzMjYzMjBlYzgwOTAwY2FmMjJjZWQ0NmYKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTQgKzMsMTQgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisKK2NvbW1pdCBmNjQzNGFjZDM0MjYwYTZjOWY2MWU5NmQ5NmJmOWEzMjNkMzMwNTYxZGY1YjFjYTI2MzExMDRmODIwMjZkZmVkCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTMgKzMsMTQgQEAKKyBpbnQgZihpbnQgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKysJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorCitjb21taXQgMWRkN2U5YjJiMTY5OTMyNGI1M2IzNDFlNzI4NjUzYjkxM2JjMTkyYTE0ZGZlYTE2OGM1YjUxZjJiM2QwMzU5MgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDEzIEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQorKworKy8qCisrICogQSBjb21tZW50LgorKyAqLworKwpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGEyNTYvZXhwZWN0LnNpbXBsZS1mIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0LnNpbXBsZS1mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NTA4ZDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3Quc2ltcGxlLWYKQEAgLTAsMCArMSw1OSBAQAorY29tbWl0IGNjZjk3Yjk4NzgxODljNDBhOTgxZGE1MGIxNTcxM2JiODBhMzU3NTUzMjYzMjBlYzgwOTAwY2FmMjJjZWQ0NmYKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsOSArMyw5IEBACistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorCitjb21taXQgZjY0MzRhY2QzNDI2MGE2YzlmNjFlOTZkOTZiZjlhMzIzZDMzMDU2MWRmNWIxY2EyNjMxMTA0ZjgyMDI2ZGZlZAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDggKzMsOSBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCAxZGQ3ZTliMmIxNjk5MzI0YjUzYjM0MWU3Mjg2NTNiOTEzYmMxOTJhMTRkZmVhMTY4YzViNTFmMmIzZDAzNTkyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsOCBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5zaW1wbGUtZi10by1tYWluIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0LnNpbXBsZS1mLXRvLW1haW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdiNzIxYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5zaW1wbGUtZi10by1tYWluCkBAIC0wLDAgKzEsMTAwIEBACitjb21taXQgNWExYjM5ODkwNjNkNTVlNzFlNzY4NWVmYTMzOTJmMTMzMzg1YjQwMzRiZGRkZTUzMGRjYjUwOTBkOGI4YjhjYQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjQxIDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGNvbW1lbnQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE0ICszLDE0IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCistICogQSBjb21tZW50LgorKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorCitjb21taXQgY2NmOTdiOTg3ODE4OWM0MGE5ODFkYTUwYjE1NzEzYmI4MGEzNTc1NTMyNjMyMGVjODA5MDBjYWYyMmNlZDQ2ZgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxNCArMywxNCBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKworY29tbWl0IGY2NDM0YWNkMzQyNjBhNmM5ZjYxZTk2ZDk2YmY5YTMyM2QzMzA1NjFkZjViMWNhMjYzMTEwNGY4MjAyNmRmZWQKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxMyArMywxNCBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisKK2NvbW1pdCAxZGQ3ZTliMmIxNjk5MzI0YjUzYjM0MWU3Mjg2NTNiOTEzYmMxOTJhMTRkZmVhMTY4YzViNTFmMmIzZDAzNTkyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsMTMgQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CisrCisrLyoKKysgKiBBIGNvbW1lbnQuCisrICovCisrCmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTI1Ni9leHBlY3Quc2ltcGxlLW1haW4gYi90L3Q0MjExL3NoYTI1Ni9leHBlY3Quc2ltcGxlLW1haW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIwNzA4YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5zaW1wbGUtbWFpbgpAQCAtMCwwICsxLDY4IEBACitjb21taXQgNTUyNmVkMDVjMjQ3NmI1NmFmOGI3YmU0OTllOGY3OGJkNTBmNDkwNzQwNzMzYTljYTdlMWY1NTg3OGZhOTBhOQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjQzIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xOCw1ICsxOCw1IEBACisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK30KKworY29tbWl0IDI5ZjMyYWMzMTQxYzQ4YjIyODAzZTVjNDEyN2I3MTk5MTdiNjdkMGY4Y2E4YzUyNDhiZWJmYTJhMTlmN2RhMTAKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODoxMCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgY2NmOTdiOTg3ODE4OWM0MGE5ODFkYTUwYjE1NzEzYmI4MGEzNTc1NTMyNjMyMGVjODA5MDBjYWYyMmNlZDQ2ZgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTcsNSArMTcsNSBAQAorIGludCBtYWluICgpCisgeworLQlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IDFkZDdlOWIyYjE2OTkzMjRiNTNiMzQxZTcyODY1M2I5MTNiYzE5MmExNGRmZWExNjhjNWI1MWYyYjNkMDM1OTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMTYsNSBAQAorK2ludCBtYWluICgpCisreworKwlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5zaW1wbGUtbWFpbi10by1lbmQgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3Quc2ltcGxlLW1haW4tdG8tZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxN2NkZjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3Quc2ltcGxlLW1haW4tdG8tZW5kCkBAIC0wLDAgKzEsNzAgQEAKK2NvbW1pdCA1NTI2ZWQwNWMyNDc2YjU2YWY4YjdiZTQ5OWU4Zjc4YmQ1MGY0OTA3NDA3MzNhOWNhN2UxZjU1ODc4ZmE5MGE5CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDcgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorKworKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IDI5ZjMyYWMzMTQxYzQ4YjIyODAzZTVjNDEyN2I3MTk5MTdiNjdkMGY4Y2E4YzUyNDhiZWJmYTJhMTlmN2RhMTAKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODoxMCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgY2NmOTdiOTg3ODE4OWM0MGE5ODFkYTUwYjE1NzEzYmI4MGEzNTc1NTMyNjMyMGVjODA5MDBjYWYyMmNlZDQ2ZgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTcsNSArMTcsNSBAQAorIGludCBtYWluICgpCisgeworLQlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IDFkZDdlOWIyYjE2OTkzMjRiNTNiMzQxZTcyODY1M2I5MTNiYzE5MmExNGRmZWExNjhjNWI1MWYyYjNkMDM1OTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMTYsNSBAQAorK2ludCBtYWluICgpCisreworKwlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC50d28tcmFuZ2VzIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0LnR3by1yYW5nZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1N2M4YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC50d28tcmFuZ2VzCkBAIC0wLDAgKzEsMTAyIEBACitjb21taXQgNTUyNmVkMDVjMjQ3NmI1NmFmOGI3YmU0OTllOGY3OGJkNTBmNDkwNzQwNzMzYTljYTdlMWY1NTg3OGZhOTBhOQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjQzIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xOCw1ICsxOCw1IEBACisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK30KKworY29tbWl0IDI5ZjMyYWMzMTQxYzQ4YjIyODAzZTVjNDEyN2I3MTk5MTdiNjdkMGY4Y2E4YzUyNDhiZWJmYTJhMTlmN2RhMTAKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODoxMCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgY2NmOTdiOTg3ODE4OWM0MGE5ODFkYTUwYjE1NzEzYmI4MGEzNTc1NTMyNjMyMGVjODA5MDBjYWYyMmNlZDQ2ZgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw5ICszLDkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CitAQCAtMTcsNSArMTcsNSBAQAorIGludCBtYWluICgpCisgeworLQlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGY2NDM0YWNkMzQyNjBhNmM5ZjYxZTk2ZDk2YmY5YTMyM2QzMzA1NjFkZjViMWNhMjYzMTEwNGY4MjAyNmRmZWQKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw4ICszLDkgQEAKKyBpbnQgZihpbnQgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKysJcmV0dXJuIHM7CisgfQorCitjb21taXQgMWRkN2U5YjJiMTY5OTMyNGI1M2IzNDFlNzI4NjUzYjkxM2JjMTkyYTE0ZGZlYTE2OGM1YjUxZjJiM2QwMzU5MgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDggQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTI1Ni9leHBlY3QudmFuaXNoZXMtZWFybHkgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3QudmFuaXNoZXMtZWFybHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlYzliZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC52YW5pc2hlcy1lYXJseQpAQCAtMCwwICsxLDM5IEBACitjb21taXQgNTUyNmVkMDVjMjQ3NmI1NmFmOGI3YmU0OTllOGY3OGJkNTBmNDkwNzQwNzMzYTljYTdlMWY1NTg3OGZhOTBhOQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjQzIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0yMiwxICsyNCwxIEBACistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgMjlmMzJhYzMxNDFjNDhiMjI4MDNlNWM0MTI3YjcxOTkxN2I2N2QwZjhjYThjNTI0OGJlYmZhMmExOWY3ZGExMAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMjIsMSArMjIsMSBAQAorLX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworY29tbWl0IDFkZDdlOWIyYjE2OTkzMjRiNTNiMzQxZTcyODY1M2I5MTNiYzE5MmExNGRmZWExNjhjNWI1MWYyYjNkMDM1OTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMjAsMSBAQAorK30KZGlmZiAtLWdpdCBhL3QvdDQyMTItbG9nLWNvcnJ1cHQuc2ggYi90L3Q0MjEyLWxvZy1jb3JydXB0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAzYjk1MmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjEyLWxvZy1jb3JydXB0LnNoCkBAIC0wLDAgKzEsODggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbG9nIHdpdGggaW52YWxpZCBjb21taXQgaGVhZGVycycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgZm9vICYmCisKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfAorCXNlZCAiL15hdXRob3IgL3MvPi8+LTw+LyIgPmJyb2tlbl9lbWFpbC5jb21taXQgJiYKKwlnaXQgaGFzaC1vYmplY3QgLXcgLXQgY29tbWl0IGJyb2tlbl9lbWFpbC5jb21taXQgPmJyb2tlbl9lbWFpbC5oYXNoICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9icm9rZW5fZW1haWwgJChjYXQgYnJva2VuX2VtYWlsLmhhc2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgbm90aWNlcyBicm9rZW4gY29tbWl0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwIGludmFsaWQuYXV0aG9yIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIHdpdGggYnJva2VuIGF1dGhvciBlbWFpbCcgJworCXsKKwkJZWNobyBjb21taXQgJChjYXQgYnJva2VuX2VtYWlsLmhhc2gpCisJCWVjaG8gIkF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4iCisJCWVjaG8gIkRhdGU6ICAgVGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDAiCisJCWVjaG8KKwkJZWNobyAiICAgIGZvbyIKKwl9ID5leHBlY3Qub3V0ICYmCisKKwlnaXQgbG9nIGJyb2tlbl9lbWFpbCA+YWN0dWFsLm91dCAyPmFjdHVhbC5lcnIgJiYKKworCXRlc3RfY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1mb3JtYXQgd2l0aCBicm9rZW4gYXV0aG9yIGVtYWlsJyAnCisJZWNobyAiQSBVIFRob3IrYXV0aG9yQGV4YW1wbGUuY29tK1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwIiA+ZXhwZWN0Lm91dCAmJgorCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWFuKyVhZSslYWQiIGJyb2tlbl9lbWFpbCA+YWN0dWFsLm91dCAyPmFjdHVhbC5lcnIgJiYKKworCXRlc3RfY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZXJyCisnCisKK211bmdlX2F1dGhvcl9kYXRlICgpIHsKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICIkMSIgPmNvbW1pdC5vcmlnICYmCisJc2VkICJzL15cKGF1dGhvciAuKj5cKSBbMC05XSovXDEgJDIvIiA8Y29tbWl0Lm9yaWcgPmNvbW1pdC5tdW5nZSAmJgorCWdpdCBoYXNoLW9iamVjdCAtdyAtdCBjb21taXQgY29tbWl0Lm11bmdlCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VucGFyc2FibGUgZGF0ZXMgcHJvZHVjZSBzZW50aW5lbCB2YWx1ZScgJworCWNvbW1pdD0kKG11bmdlX2F1dGhvcl9kYXRlIEhFQUQgdG90YWxseV9ib2d1cykgJiYKKwllY2hvICJEYXRlOiAgIFRodSBKYW4gMSAwMDowMDowMCAxOTcwICswMDAwIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAkY29tbWl0ID5hY3R1YWwuZnVsbCAmJgorCWdyZXAgRGF0ZSA8YWN0dWFsLmZ1bGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5wYXJzYWJsZSBkYXRlcyBwcm9kdWNlIHNlbnRpbmVsIHZhbHVlICglYWQpJyAnCisJY29tbWl0PSQobXVuZ2VfYXV0aG9yX2RhdGUgSEVBRCB0b3RhbGx5X2JvZ3VzKSAmJgorCWVjaG8gPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JWFkICRjb21taXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBkYXRlIGlzIDJeNjQgKyAxCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkYXRlIHBhcnNlciByZWNvZ25pemVzIGludGVnZXIgb3ZlcmZsb3cnICcKKwljb21taXQ9JChtdW5nZV9hdXRob3JfZGF0ZSBIRUFEIDE4NDQ2NzQ0MDczNzA5NTUxNjE3KSAmJgorCWVjaG8gIlRodSBKYW4gMSAwMDowMDowMCAxOTcwICswMDAwIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lYWQgJGNvbW1pdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIGRhdGUgaXMgMl42NCAtIDIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RhdGUgcGFyc2VyIHJlY29nbml6ZXMgdGltZV90IG92ZXJmbG93JyAnCisJY29tbWl0PSQobXVuZ2VfYXV0aG9yX2RhdGUgSEVBRCAxODQ0Njc0NDA3MzcwOTU1MTYxNCkgJiYKKwllY2hvICJUaHUgSmFuIDEgMDA6MDA6MDAgMTk3MCArMDAwMCIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JWFkICRjb21taXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBkYXRlIGlzIHdpdGhpbiAyXjYzLTEsIGJ1dCBlbm91Z2ggdG8gY2hva2UgZ2xpYmMncyBnbXRpbWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fic3VyZGx5IGZhci1pbi1mdXR1cmUgZGF0ZScgJworCWNvbW1pdD0kKG11bmdlX2F1dGhvcl9kYXRlIEhFQUQgOTk5OTk5OTk5OTk5OTk5OTk5KSAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JWFkICRjb21taXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjEzLWxvZy10YWJleHBhbmQuc2ggYi90L3Q0MjEzLWxvZy10YWJleHBhbmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTNhNGFmMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTMtbG9nLXRhYmV4cGFuZC5zaApAQCAtMCwwICsxLDEwNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2xvZy9zaG93IC0tZXhwYW5kLXRhYnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitIVD0iCSIKK3RpdGxlPSd0YWIgaW5kZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRpdGxlIGxpbmUnCitib2R5PSd0YWIgaW5kZW50IG9uIGEgbGluZSBpbiB0aGUgYm9keScKKworIyB1c2FnZTogY291bnRfZXhwYW5kICRpbmRlbnQgJG51bVNQICRudW1IVCBAZm9ybWF0X2FyZ3MKK2NvdW50X2V4cGFuZCAoKQoreworCWV4cGVjdD0KKwljb3VudD0kKCggJDEgKyAkMiApKSA7IyBleHBlY3RlZCBzcGFjZXMKKwl3aGlsZSB0ZXN0ICRjb3VudCAtZ3QgMAorCWRvCisJCWV4cGVjdD0iJGV4cGVjdCAiCisJCWNvdW50PSQoKCAkY291bnQgLSAxICkpCisJZG9uZQorCXNoaWZ0IDIKKwljb3VudD0kMSA7IyBleHBlY3RlZCB0YWJzCisJd2hpbGUgdGVzdCAkY291bnQgLWd0IDAKKwlkbworCQlleHBlY3Q9IiRleHBlY3QkSFQiCisJCWNvdW50PSQoKCAkY291bnQgLSAxICkpCisJZG9uZQorCXNoaWZ0CisKKwkjIFRoZSByZW1haW5kZXIgb2YgdGhlIGNvbW1hbmQgbGluZSBpcyAiZ2l0IHNob3cgLXMiIG9wdGlvbnMKKwljYXNlICIgJCogIiBpbgorCSonIC0tcHJldHR5PXNob3J0ICcqKQorCQlsaW5lPSR0aXRsZSA7OworCSopCisJCWxpbmU9JGJvZHkgOzsKKwllc2FjCisKKwkjIFByZWZpeCB0aGUgb3V0cHV0IHdpdGggdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMsIGFuZAorCSMgcmVwbGFjZSBTUCB3aXRoIGEgZG90IGJvdGggaW4gdGhlIGV4cGVjdGVkIGFuZCBhY3R1YWwgb3V0cHV0CisJIyBzbyB0aGF0IHRlc3RfY21wIHdvdWxkIHNob3cgdGhlIGRpZmZlcmVuY2UgdG9nZXRoZXIgd2l0aCB0aGUKKwkjIGJyZWFrYWdlIGluIGEgd2F5IGVhc2llciB0byBjb25zdW1lIGJ5IHRoZSBkZWJ1Z2dpbmcgdXNlci4KKwl7CisJCWVjaG8gImdpdCBzaG93IC1zICQqIgorCQllY2hvICIkZXhwZWN0JGxpbmUiCisJfSB8IHNlZCAtZSAncy8gLy4vZycgPmV4cGVjdAorCisJeworCQllY2hvICJnaXQgc2hvdyAtcyAkKiIKKwkJZ2l0IHNob3cgLXMgIiRAIiB8CisJCXNlZCAtbiAtZSAiLyRsaW5lXCQvcCIKKwl9IHwgc2VkIC1lICdzLyAvLi9nJyA+YWN0dWFsCisKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwYW5kICgpCit7CisJZm10PSQxCisJY2FzZSAiJGZtdCIgaW4KKwkqPXJhdyB8ICo9c2hvcnQgfCAqPWVtYWlsKQorCQlkZWZhdWx0PSIwIDEiIDs7CisJKikKKwkJZGVmYXVsdD0iOCAwIiA7OworCWVzYWMKKwljYXNlICIkZm10IiBpbgorCSo9ZW1haWwpCisJCWluPTAgOzsKKwkqKQorCQlpbj00IDs7CisJZXNhYworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImV4cGFuZC9uby1leHBhbmQke2ZtdDorIGZvciAkZm10fSIgJworCQljb3VudF9leHBhbmQgJGluICRkZWZhdWx0ICRmbXQgJiYKKwkJY291bnRfZXhwYW5kICRpbiA4IDAgJGZtdCAtLWV4cGFuZC10YWJzICYmCisJCWNvdW50X2V4cGFuZCAkaW4gOCAwIC0tZXhwYW5kLXRhYnMgJGZtdCAmJgorCQljb3VudF9leHBhbmQgJGluIDggMCAkZm10IC0tZXhwYW5kLXRhYnM9OCAmJgorCQljb3VudF9leHBhbmQgJGluIDggMCAtLWV4cGFuZC10YWJzPTggJGZtdCAmJgorCQljb3VudF9leHBhbmQgJGluIDAgMSAkZm10IC0tbm8tZXhwYW5kLXRhYnMgJiYKKwkJY291bnRfZXhwYW5kICRpbiAwIDEgLS1uby1leHBhbmQtdGFicyAkZm10ICYmCisJCWNvdW50X2V4cGFuZCAkaW4gMCAxICRmbXQgLS1leHBhbmQtdGFicz0wICYmCisJCWNvdW50X2V4cGFuZCAkaW4gMCAxIC0tZXhwYW5kLXRhYnM9MCAkZm10ICYmCisJCWNvdW50X2V4cGFuZCAkaW4gNCAwICRmbXQgLS1leHBhbmQtdGFicz00ICYmCisJCWNvdW50X2V4cGFuZCAkaW4gNCAwIC0tZXhwYW5kLXRhYnM9NCAkZm10CisJJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfdGljayAmJgorCXNlZCAtZSAicy9RLyRIVC9nIiA8PC1FT0YgPm1zZyAmJgorCVEkdGl0bGUKKworCVEkYm9keQorCUVPRgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtRiBtc2cKKycKKwordGVzdF9leHBhbmQgIiIKK3Rlc3RfZXhwYW5kIC0tcHJldHR5Cit0ZXN0X2V4cGFuZCAtLXByZXR0eT1zaG9ydAordGVzdF9leHBhbmQgLS1wcmV0dHk9bWVkaXVtCit0ZXN0X2V4cGFuZCAtLXByZXR0eT1mdWxsCit0ZXN0X2V4cGFuZCAtLXByZXR0eT1mdWxsZXIKK3Rlc3RfZXhwYW5kIC0tcHJldHR5PXJhdwordGVzdF9leHBhbmQgLS1wcmV0dHk9ZW1haWwKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjE0LWxvZy1ncmFwaC1vY3RvcHVzLnNoIGIvdC90NDIxNC1sb2ctZ3JhcGgtb2N0b3B1cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMDgwMzI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxNC1sb2ctZ3JhcGgtb2N0b3B1cy5zaApAQCAtMCwwICsxLDM0NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBsb2cgLS1ncmFwaCBvZiBza2V3ZWQgbGVmdCBvY3RvcHVzIG1lcmdlLicKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1sb2ctZ3JhcGguc2gKKwordGVzdF9jbXBfZ3JhcGggKCkgeworCWNhdCA+ZXhwZWN0ICYmCisJbGliX3Rlc3RfY21wX2dyYXBoIC0tY29sb3I9bmV2ZXIgLS1kYXRlLW9yZGVyIC0tZm9ybWF0PSVzICIkQCIKK30KKwordGVzdF9jbXBfY29sb3JlZF9ncmFwaCAoKSB7CisJbGliX3Rlc3RfY21wX2NvbG9yZWRfZ3JhcGggLS1kYXRlLW9yZGVyIC0tZm9ybWF0PSVzICIkQCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIG1lcmdlIGhpc3RvcnknICcKKwl0ZXN0X2NvbW1pdCBpbml0aWFsICYmCisJZm9yIGkgaW4gMSAyIDMgNCA7IGRvCisJCWdpdCBjaGVja291dCBtYXN0ZXIgLWIgJGkgfHwgcmV0dXJuICQ/CisJCSMgTWFrZSB0YWcgbmFtZSBkaWZmZXJlbnQgZnJvbSBicmFuY2ggbmFtZSwgdG8gYXZvaWQKKwkJIyBhbWJpZ3VpdHkgZXJyb3Igd2hlbiBjYWxsaW5nIGNoZWNrb3V0LgorCQl0ZXN0X2NvbW1pdCAkaSAkaSAkaSB0YWckaSB8fCByZXR1cm4gJD8KKwlkb25lICYmCisJZ2l0IGNoZWNrb3V0IDEgLWIgbWVyZ2UgJiYKKwl0ZXN0X21lcmdlIG9jdG9wdXMtbWVyZ2UgMSAyIDMgNCAmJgorCXRlc3RfY29tbWl0IGFmdGVyLW1lcmdlICYmCisJZ2l0IGNoZWNrb3V0IDEgLWIgTCAmJgorCXRlc3RfY29tbWl0IGxlZnQgJiYKKwlnaXQgY2hlY2tvdXQgNCAtYiBjcm9zc292ZXIgJiYKKwl0ZXN0X2NvbW1pdCBhZnRlci00ICYmCisJZ2l0IGNoZWNrb3V0IGluaXRpYWwgLWIgbW9yZS1MICYmCisJdGVzdF9jb21taXQgYWZ0ZXItaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIHRyaWNreSBvY3RvcHVzIG1lcmdlLCBubyBjb2xvcicgJworCXRlc3RfY21wX2dyYXBoIGxlZnQgb2N0b3B1cy1tZXJnZSA8PC1cRU9GCisJKiBsZWZ0CisJfCAqLS4gICBvY3RvcHVzLW1lcmdlCisJfC98XCBcCisJfCB8IHwgKiA0CisJfCB8ICogfCAzCisJfCB8IHwvCisJfCAqIC8gMgorCXwgfC8KKwkqIC8gMQorCXwvCisJKiBpbml0aWFsCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggdHJpY2t5IG9jdG9wdXMgbWVyZ2Ugd2l0aCBjb2xvcnMnICcKKwl0ZXN0X2NvbmZpZyBsb2cuZ3JhcGhDb2xvcnMgcmVkLGdyZWVuLHllbGxvdyxibHVlLG1hZ2VudGEsY3lhbiAmJgorCWNhdCA+ZXhwZWN0LmNvbG9ycyA8PC1cRU9GICYmCisJKiBsZWZ0CisJPFJFRD58PFJFU0VUPiAqPE1BR0VOVEE+LTxSRVNFVD48TUFHRU5UQT4uPFJFU0VUPiAgIG9jdG9wdXMtbWVyZ2UKKwk8UkVEPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPjxZRUxMT1c+fDxSRVNFVD48QkxVRT5cPFJFU0VUPiA8TUFHRU5UQT5cPFJFU0VUPgorCTxSRUQ+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiA8QkxVRT58PFJFU0VUPiAqIDQKKwk8UkVEPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gKiA8TUFHRU5UQT58PFJFU0VUPiAzCisJPFJFRD58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+IDxNQUdFTlRBPnw8UkVTRVQ+PE1BR0VOVEE+LzxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+ICogPE1BR0VOVEE+LzxSRVNFVD4gMgorCTxSRUQ+fDxSRVNFVD4gPE1BR0VOVEE+fDxSRVNFVD48TUFHRU5UQT4vPFJFU0VUPgorCSogPE1BR0VOVEE+LzxSRVNFVD4gMQorCTxNQUdFTlRBPnw8UkVTRVQ+PE1BR0VOVEE+LzxSRVNFVD4KKwkqIGluaXRpYWwKKwlFT0YKKwl0ZXN0X2NtcF9jb2xvcmVkX2dyYXBoIGxlZnQgb2N0b3B1cy1tZXJnZQorJworCisjIFJlcGVhdCB0aGUgcHJldmlvdXMgdHdvIHRlc3RzIHdpdGggIm5vcm1hbCIgb2N0b3B1cyBtZXJnZSAoaS5lLiwKKyMgd2l0aG91dCB0aGUgZmlyc3QgcGFyZW50IHNrZXdpbmcgdG8gdGhlICJsZWZ0IiBicmFuY2ggY29sdW1uKS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBub3JtYWwgb2N0b3B1cyBtZXJnZSwgbm8gY29sb3InICcKKwl0ZXN0X2NtcF9ncmFwaCBvY3RvcHVzLW1lcmdlIDw8LVxFT0YKKwkqLS0tLiAgIG9jdG9wdXMtbWVyZ2UKKwl8XCBcIFwKKwl8IHwgfCAqIDQKKwl8IHwgKiB8IDMKKwl8IHwgfC8KKwl8ICogLyAyCisJfCB8LworCSogLyAxCisJfC8KKwkqIGluaXRpYWwKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBub3JtYWwgb2N0b3B1cyBtZXJnZSB3aXRoIGNvbG9ycycgJworCWNhdCA+ZXhwZWN0LmNvbG9ycyA8PC1cRU9GICYmCisJKjxZRUxMT1c+LTxSRVNFVD48WUVMTE9XPi08UkVTRVQ+PEJMVUU+LTxSRVNFVD48QkxVRT4uPFJFU0VUPiAgIG9jdG9wdXMtbWVyZ2UKKwk8UkVEPnw8UkVTRVQ+PEdSRUVOPlw8UkVTRVQ+IDxZRUxMT1c+XDxSRVNFVD4gPEJMVUU+XDxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+ICogNAorCTxSRUQ+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+ICogPEJMVUU+fDxSRVNFVD4gMworCTxSRUQ+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+PEJMVUU+LzxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+ICogPEJMVUU+LzxSRVNFVD4gMgorCTxSRUQ+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD48QkxVRT4vPFJFU0VUPgorCSogPEJMVUU+LzxSRVNFVD4gMQorCTxCTFVFPnw8UkVTRVQ+PEJMVUU+LzxSRVNFVD4KKwkqIGluaXRpYWwKKwlFT0YKKwl0ZXN0X2NvbmZpZyBsb2cuZ3JhcGhDb2xvcnMgcmVkLGdyZWVuLHllbGxvdyxibHVlLG1hZ2VudGEsY3lhbiAmJgorCXRlc3RfY21wX2NvbG9yZWRfZ3JhcGggb2N0b3B1cy1tZXJnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG5vcm1hbCBvY3RvcHVzIG1lcmdlIGFuZCBjaGlsZCwgbm8gY29sb3InICcKKwl0ZXN0X2NtcF9ncmFwaCBhZnRlci1tZXJnZSA8PC1cRU9GCisJKiBhZnRlci1tZXJnZQorCSotLS0uICAgb2N0b3B1cy1tZXJnZQorCXxcIFwgXAorCXwgfCB8ICogNAorCXwgfCAqIHwgMworCXwgfCB8LworCXwgKiAvIDIKKwl8IHwvCisJKiAvIDEKKwl8LworCSogaW5pdGlhbAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG5vcm1hbCBvY3RvcHVzIGFuZCBjaGlsZCBtZXJnZSB3aXRoIGNvbG9ycycgJworCWNhdCA+ZXhwZWN0LmNvbG9ycyA8PC1cRU9GICYmCisJKiBhZnRlci1tZXJnZQorCSo8QkxVRT4tPFJFU0VUPjxCTFVFPi08UkVTRVQ+PE1BR0VOVEE+LTxSRVNFVD48TUFHRU5UQT4uPFJFU0VUPiAgIG9jdG9wdXMtbWVyZ2UKKwk8R1JFRU4+fDxSRVNFVD48WUVMTE9XPlw8UkVTRVQ+IDxCTFVFPlw8UkVTRVQ+IDxNQUdFTlRBPlw8UkVTRVQ+CisJPEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4gKiA0CisJPEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gKiA8TUFHRU5UQT58PFJFU0VUPiAzCisJPEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gPE1BR0VOVEE+fDxSRVNFVD48TUFHRU5UQT4vPFJFU0VUPgorCTxHUkVFTj58PFJFU0VUPiAqIDxNQUdFTlRBPi88UkVTRVQ+IDIKKwk8R1JFRU4+fDxSRVNFVD4gPE1BR0VOVEE+fDxSRVNFVD48TUFHRU5UQT4vPFJFU0VUPgorCSogPE1BR0VOVEE+LzxSRVNFVD4gMQorCTxNQUdFTlRBPnw8UkVTRVQ+PE1BR0VOVEE+LzxSRVNFVD4KKwkqIGluaXRpYWwKKwlFT0YKKwl0ZXN0X2NvbmZpZyBsb2cuZ3JhcGhDb2xvcnMgcmVkLGdyZWVuLHllbGxvdyxibHVlLG1hZ2VudGEsY3lhbiAmJgorCXRlc3RfY21wX2NvbG9yZWRfZ3JhcGggYWZ0ZXItbWVyZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCB0cmlja3kgb2N0b3B1cyBtZXJnZSBhbmQgaXRzIGNoaWxkLCBubyBjb2xvcicgJworCXRlc3RfY21wX2dyYXBoIGxlZnQgYWZ0ZXItbWVyZ2UgPDwtXEVPRgorCSogbGVmdAorCXwgKiBhZnRlci1tZXJnZQorCXwgKi0uICAgb2N0b3B1cy1tZXJnZQorCXwvfFwgXAorCXwgfCB8ICogNAorCXwgfCAqIHwgMworCXwgfCB8LworCXwgKiAvIDIKKwl8IHwvCisJKiAvIDEKKwl8LworCSogaW5pdGlhbAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIHRyaWNreSBvY3RvcHVzIG1lcmdlIGFuZCBpdHMgY2hpbGQgd2l0aCBjb2xvcnMnICcKKwl0ZXN0X2NvbmZpZyBsb2cuZ3JhcGhDb2xvcnMgcmVkLGdyZWVuLHllbGxvdyxibHVlLG1hZ2VudGEsY3lhbiAmJgorCWNhdCA+ZXhwZWN0LmNvbG9ycyA8PC1cRU9GICYmCisJKiBsZWZ0CisJPFJFRD58PFJFU0VUPiAqIGFmdGVyLW1lcmdlCisJPFJFRD58PFJFU0VUPiAqPENZQU4+LTxSRVNFVD48Q1lBTj4uPFJFU0VUPiAgIG9jdG9wdXMtbWVyZ2UKKwk8UkVEPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPjxCTFVFPnw8UkVTRVQ+PE1BR0VOVEE+XDxSRVNFVD4gPENZQU4+XDxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+IDxNQUdFTlRBPnw8UkVTRVQ+ICogNAorCTxSRUQ+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4gKiA8Q1lBTj58PFJFU0VUPiAzCisJPFJFRD58PFJFU0VUPiA8QkxVRT58PFJFU0VUPiA8Q1lBTj58PFJFU0VUPjxDWUFOPi88UkVTRVQ+CisJPFJFRD58PFJFU0VUPiAqIDxDWUFOPi88UkVTRVQ+IDIKKwk8UkVEPnw8UkVTRVQ+IDxDWUFOPnw8UkVTRVQ+PENZQU4+LzxSRVNFVD4KKwkqIDxDWUFOPi88UkVTRVQ+IDEKKwk8Q1lBTj58PFJFU0VUPjxDWUFOPi88UkVTRVQ+CisJKiBpbml0aWFsCisJRU9GCisJdGVzdF9jbXBfY29sb3JlZF9ncmFwaCBsZWZ0IGFmdGVyLW1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggY3Jvc3NvdmVyIGluIG9jdG9wdXMgbWVyZ2UsIG5vIGNvbG9yJyAnCisJdGVzdF9jbXBfZ3JhcGggYWZ0ZXItNCBvY3RvcHVzLW1lcmdlIDw8LVxFT0YKKwkqIGFmdGVyLTQKKwl8ICotLS0uICAgb2N0b3B1cy1tZXJnZQorCXwgfFwgXCBcCisJfCB8X3xffC8KKwl8L3wgfCB8CisJKiB8IHwgfCA0CisJfCB8IHwgKiAzCisJfCB8X3wvCisJfC98IHwKKwl8IHwgKiAyCisJfCB8LworCXwvfAorCXwgKiAxCisJfC8KKwkqIGluaXRpYWwKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBjcm9zc292ZXIgaW4gb2N0b3B1cyBtZXJnZSB3aXRoIGNvbG9ycycgJworCXRlc3RfY29uZmlnIGxvZy5ncmFwaENvbG9ycyByZWQsZ3JlZW4seWVsbG93LGJsdWUsbWFnZW50YSxjeWFuICYmCisJY2F0ID5leHBlY3QuY29sb3JzIDw8LVxFT0YgJiYKKwkqIGFmdGVyLTQKKwk8UkVEPnw8UkVTRVQ+ICo8QkxVRT4tPFJFU0VUPjxCTFVFPi08UkVTRVQ+PFJFRD4tPFJFU0VUPjxSRUQ+LjxSRVNFVD4gICBvY3RvcHVzLW1lcmdlCisJPFJFRD58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD48WUVMTE9XPlw8UkVTRVQ+IDxCTFVFPlw8UkVTRVQ+IDxSRUQ+XDxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPjxSRUQ+XzxSRVNFVD48WUVMTE9XPnw8UkVTRVQ+PFJFRD5fPFJFU0VUPjxCTFVFPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPgorCTxSRUQ+fDxSRVNFVD48UkVEPi88UkVTRVQ+PEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4KKwkqIDxHUkVFTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+IDQKKwk8TUFHRU5UQT58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiAqIDMKKwk8TUFHRU5UQT58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD48TUFHRU5UQT5fPFJFU0VUPjxZRUxMT1c+fDxSRVNFVD48TUFHRU5UQT4vPFJFU0VUPgorCTxNQUdFTlRBPnw8UkVTRVQ+PE1BR0VOVEE+LzxSRVNFVD48R1JFRU4+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPgorCTxNQUdFTlRBPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiAqIDIKKwk8TUFHRU5UQT58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD48TUFHRU5UQT4vPFJFU0VUPgorCTxNQUdFTlRBPnw8UkVTRVQ+PE1BR0VOVEE+LzxSRVNFVD48R1JFRU4+fDxSRVNFVD4KKwk8TUFHRU5UQT58PFJFU0VUPiAqIDEKKwk8TUFHRU5UQT58PFJFU0VUPjxNQUdFTlRBPi88UkVTRVQ+CisJKiBpbml0aWFsCisJRU9GCisJdGVzdF9jbXBfY29sb3JlZF9ncmFwaCBhZnRlci00IG9jdG9wdXMtbWVyZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBjcm9zc292ZXIgaW4gb2N0b3B1cyBtZXJnZSBhbmQgaXRzIGNoaWxkLCBubyBjb2xvcicgJworCXRlc3RfY21wX2dyYXBoIGFmdGVyLTQgYWZ0ZXItbWVyZ2UgPDwtXEVPRgorCSogYWZ0ZXItNAorCXwgKiBhZnRlci1tZXJnZQorCXwgKi0tLS4gICBvY3RvcHVzLW1lcmdlCisJfCB8XCBcIFwKKwl8IHxffF98LworCXwvfCB8IHwKKwkqIHwgfCB8IDQKKwl8IHwgfCAqIDMKKwl8IHxffC8KKwl8L3wgfAorCXwgfCAqIDIKKwl8IHwvCisJfC98CisJfCAqIDEKKwl8LworCSogaW5pdGlhbAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIGNyb3Nzb3ZlciBpbiBvY3RvcHVzIG1lcmdlIGFuZCBpdHMgY2hpbGQgd2l0aCBjb2xvcnMnICcKKwl0ZXN0X2NvbmZpZyBsb2cuZ3JhcGhDb2xvcnMgcmVkLGdyZWVuLHllbGxvdyxibHVlLG1hZ2VudGEsY3lhbiAmJgorCWNhdCA+ZXhwZWN0LmNvbG9ycyA8PC1cRU9GICYmCisJKiBhZnRlci00CisJPFJFRD58PFJFU0VUPiAqIGFmdGVyLW1lcmdlCisJPFJFRD58PFJFU0VUPiAqPE1BR0VOVEE+LTxSRVNFVD48TUFHRU5UQT4tPFJFU0VUPjxSRUQ+LTxSRVNFVD48UkVEPi48UkVTRVQ+ICAgb2N0b3B1cy1tZXJnZQorCTxSRUQ+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPjxCTFVFPlw8UkVTRVQ+IDxNQUdFTlRBPlw8UkVTRVQ+IDxSRUQ+XDxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD48UkVEPl88UkVTRVQ+PEJMVUU+fDxSRVNFVD48UkVEPl88UkVTRVQ+PE1BR0VOVEE+fDxSRVNFVD48UkVEPi88UkVTRVQ+CisJPFJFRD58PFJFU0VUPjxSRUQ+LzxSRVNFVD48WUVMTE9XPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+IDxNQUdFTlRBPnw8UkVTRVQ+CisJKiA8WUVMTE9XPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+IDxNQUdFTlRBPnw8UkVTRVQ+IDQKKwk8Q1lBTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+ICogMworCTxDWUFOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD48Q1lBTj5fPFJFU0VUPjxCTFVFPnw8UkVTRVQ+PENZQU4+LzxSRVNFVD4KKwk8Q1lBTj58PFJFU0VUPjxDWUFOPi88UkVTRVQ+PFlFTExPVz58PFJFU0VUPiA8QkxVRT58PFJFU0VUPgorCTxDWUFOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gKiAyCisJPENZQU4+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPjxDWUFOPi88UkVTRVQ+CisJPENZQU4+fDxSRVNFVD48Q1lBTj4vPFJFU0VUPjxZRUxMT1c+fDxSRVNFVD4KKwk8Q1lBTj58PFJFU0VUPiAqIDEKKwk8Q1lBTj58PFJFU0VUPjxDWUFOPi88UkVTRVQ+CisJKiBpbml0aWFsCisJRU9GCisJdGVzdF9jbXBfY29sb3JlZF9ncmFwaCBhZnRlci00IGFmdGVyLW1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggdW5yZWxhdGVkIGNvbW1pdCBhbmQgb2N0b3B1cyB0aXAsIG5vIGNvbG9yJyAnCisJdGVzdF9jbXBfZ3JhcGggYWZ0ZXItaW5pdGlhbCBvY3RvcHVzLW1lcmdlIDw8LVxFT0YKKwkqIGFmdGVyLWluaXRpYWwKKwl8ICotLS0uICAgb2N0b3B1cy1tZXJnZQorCXwgfFwgXCBcCisJfCB8IHwgfCAqIDQKKwl8IHxffF98LworCXwvfCB8IHwKKwl8IHwgfCAqIDMKKwl8IHxffC8KKwl8L3wgfAorCXwgfCAqIDIKKwl8IHwvCisJfC98CisJfCAqIDEKKwl8LworCSogaW5pdGlhbAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIHVucmVsYXRlZCBjb21taXQgYW5kIG9jdG9wdXMgdGlwIHdpdGggY29sb3JzJyAnCisJdGVzdF9jb25maWcgbG9nLmdyYXBoQ29sb3JzIHJlZCxncmVlbix5ZWxsb3csYmx1ZSxtYWdlbnRhLGN5YW4gJiYKKwljYXQgPmV4cGVjdC5jb2xvcnMgPDwtXEVPRiAmJgorCSogYWZ0ZXItaW5pdGlhbAorCTxSRUQ+fDxSRVNFVD4gKjxCTFVFPi08UkVTRVQ+PEJMVUU+LTxSRVNFVD48TUFHRU5UQT4tPFJFU0VUPjxNQUdFTlRBPi48UkVTRVQ+ICAgb2N0b3B1cy1tZXJnZQorCTxSRUQ+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+PFlFTExPVz5cPFJFU0VUPiA8QkxVRT5cPFJFU0VUPiA8TUFHRU5UQT5cPFJFU0VUPgorCTxSRUQ+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4gKiA0CisJPFJFRD58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD48UkVEPl88UkVTRVQ+PFlFTExPVz58PFJFU0VUPjxSRUQ+XzxSRVNFVD48QkxVRT58PFJFU0VUPjxSRUQ+LzxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPjxHUkVFTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+CisJPFJFRD58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiAqIDMKKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPjxSRUQ+XzxSRVNFVD48WUVMTE9XPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPgorCTxSRUQ+fDxSRVNFVD48UkVEPi88UkVTRVQ+PEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiAqIDIKKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPjxSRUQ+LzxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPjxHUkVFTj58PFJFU0VUPgorCTxSRUQ+fDxSRVNFVD4gKiAxCisJPFJFRD58PFJFU0VUPjxSRUQ+LzxSRVNFVD4KKwkqIGluaXRpYWwKKwlFT0YKKwl0ZXN0X2NtcF9jb2xvcmVkX2dyYXBoIGFmdGVyLWluaXRpYWwgb2N0b3B1cy1tZXJnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIHVucmVsYXRlZCBjb21taXQgYW5kIG9jdG9wdXMgY2hpbGQsIG5vIGNvbG9yJyAnCisJdGVzdF9jbXBfZ3JhcGggYWZ0ZXItaW5pdGlhbCBhZnRlci1tZXJnZSA8PC1cRU9GCisJKiBhZnRlci1pbml0aWFsCisJfCAqIGFmdGVyLW1lcmdlCisJfCAqLS0tLiAgIG9jdG9wdXMtbWVyZ2UKKwl8IHxcIFwgXAorCXwgfCB8IHwgKiA0CisJfCB8X3xffC8KKwl8L3wgfCB8CisJfCB8IHwgKiAzCisJfCB8X3wvCisJfC98IHwKKwl8IHwgKiAyCisJfCB8LworCXwvfAorCXwgKiAxCisJfC8KKwkqIGluaXRpYWwKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCB1bnJlbGF0ZWQgY29tbWl0IGFuZCBvY3RvcHVzIGNoaWxkIHdpdGggY29sb3JzJyAnCisJdGVzdF9jb25maWcgbG9nLmdyYXBoQ29sb3JzIHJlZCxncmVlbix5ZWxsb3csYmx1ZSxtYWdlbnRhLGN5YW4gJiYKKwljYXQgPmV4cGVjdC5jb2xvcnMgPDwtXEVPRiAmJgorCSogYWZ0ZXItaW5pdGlhbAorCTxSRUQ+fDxSRVNFVD4gKiBhZnRlci1tZXJnZQorCTxSRUQ+fDxSRVNFVD4gKjxNQUdFTlRBPi08UkVTRVQ+PE1BR0VOVEE+LTxSRVNFVD48Q1lBTj4tPFJFU0VUPjxDWUFOPi48UkVTRVQ+ICAgb2N0b3B1cy1tZXJnZQorCTxSRUQ+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPjxCTFVFPlw8UkVTRVQ+IDxNQUdFTlRBPlw8UkVTRVQ+IDxDWUFOPlw8UkVTRVQ+CisJPFJFRD58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+IDxNQUdFTlRBPnw8UkVTRVQ+ICogNAorCTxSRUQ+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPjxSRUQ+XzxSRVNFVD48QkxVRT58PFJFU0VUPjxSRUQ+XzxSRVNFVD48TUFHRU5UQT58PFJFU0VUPjxSRUQ+LzxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPjxZRUxMT1c+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4gPE1BR0VOVEE+fDxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4gKiAzCisJPFJFRD58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+PFJFRD5fPFJFU0VUPjxCTFVFPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPgorCTxSRUQ+fDxSRVNFVD48UkVEPi88UkVTRVQ+PFlFTExPVz58PFJFU0VUPiA8QkxVRT58PFJFU0VUPgorCTxSRUQ+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiAqIDIKKwk8UkVEPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD48UkVEPi88UkVTRVQ+CisJPFJFRD58PFJFU0VUPjxSRUQ+LzxSRVNFVD48WUVMTE9XPnw8UkVTRVQ+CisJPFJFRD58PFJFU0VUPiAqIDEKKwk8UkVEPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPgorCSogaW5pdGlhbAorCUVPRgorCXRlc3RfY21wX2NvbG9yZWRfZ3JhcGggYWZ0ZXItaW5pdGlhbCBhZnRlci1tZXJnZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMTUtbG9nLXNrZXdlZC1tZXJnZXMuc2ggYi90L3Q0MjE1LWxvZy1za2V3ZWQtbWVyZ2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4ZDA3NzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjE1LWxvZy1za2V3ZWQtbWVyZ2VzLnNoCkBAIC0wLDAgKzEsMzczIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxvZyAtLWdyYXBoIG9mIHNrZXdlZCBtZXJnZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItbG9nLWdyYXBoLnNoCisKK2NoZWNrX2dyYXBoICgpIHsKKwljYXQgPmV4cGVjdCAmJgorCWxpYl90ZXN0X2NtcF9ncmFwaCAtLWZvcm1hdD0lcyAiJEAiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggbWVyZ2UgZnVzaW5nIHdpdGggaXRzIGxlZnQgYW5kIHJpZ2h0IG5laWdoYm9ycycgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiBfcCAmJgorCXRlc3RfY29tbWl0IEEgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJZ2l0IGNoZWNrb3V0IC1iIF9xIEBeICYmIHRlc3RfY29tbWl0IEMgJiYKKwlnaXQgY2hlY2tvdXQgLWIgX3IgQF4gJiYgdGVzdF9jb21taXQgRCAmJgorCWdpdCBjaGVja291dCBfcCAmJiBnaXQgbWVyZ2UgLS1uby1mZiBfcSBfciAtbSBFICYmCisJZ2l0IGNoZWNrb3V0IF9yICYmIHRlc3RfY29tbWl0IEYgJiYKKwlnaXQgY2hlY2tvdXQgX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgX3IgLW0gRyAmJgorCWdpdCBjaGVja291dCBAXl4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgX3AgLW0gSCAmJgorCisJY2hlY2tfZ3JhcGggPDwtXEVPRgorCSogICBICisJfFwKKwl8ICogICBHCisJfCB8XAorCXwgfCAqIEYKKwl8ICogfCBFCisJfC98XHwKKwl8IHwgKiBECisJfCAqIHwgQworCXwgfC8KKwkqIC8gQgorCXwvCisJKiBBCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggbGVmdC1za2V3ZWQgbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gMF9wICYmIHRlc3RfY29tbWl0IDBfQSAmJgorCWdpdCBjaGVja291dCAtYiAwX3EgMF9wICYmIHRlc3RfY29tbWl0IDBfQiAmJgorCWdpdCBjaGVja291dCAtYiAwX3IgMF9wICYmCisJdGVzdF9jb21taXQgMF9DICYmCisJdGVzdF9jb21taXQgMF9EICYmCisJZ2l0IGNoZWNrb3V0IC1iIDBfcyAwX3AgJiYgdGVzdF9jb21taXQgMF9FICYmCisJZ2l0IGNoZWNrb3V0IC1iIDBfdCAwX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgMF9yXiAwX3MgLW0gMF9GICYmCisJZ2l0IGNoZWNrb3V0IDBfcCAmJiBnaXQgbWVyZ2UgLS1uby1mZiAwX3MgLW0gMF9HICYmCisJZ2l0IGNoZWNrb3V0IEBeICYmIGdpdCBtZXJnZSAtLW5vLWZmIDBfcSAwX3IgMF90IDBfcCAtbSAwX0ggJiYKKworCWNoZWNrX2dyYXBoIDw8LVxFT0YKKwkqLS0tLS0uICAgMF9ICisJfFwgXCBcIFwKKwl8IHwgfCB8ICogMF9HCisJfCB8X3xffC98CisJfC98IHwgfCB8CisJfCB8IHwgKiB8IDBfRgorCXwgfF98L3xcfAorCXwvfCB8IHwgfAorCXwgfCB8IHwgKiAwX0UKKwl8IHxffF98LworCXwvfCB8IHwKKwl8IHwgKiB8IDBfRAorCXwgfCB8LworCXwgfCAqIDBfQworCXwgfC8KKwl8L3wKKwl8ICogMF9CCisJfC8KKwkqIDBfQQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG5lc3RlZCBsZWZ0LXNrZXdlZCBtZXJnZScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiAxX3AgJiYKKwl0ZXN0X2NvbW1pdCAxX0EgJiYKKwl0ZXN0X2NvbW1pdCAxX0IgJiYKKwl0ZXN0X2NvbW1pdCAxX0MgJiYKKwlnaXQgY2hlY2tvdXQgLWIgMV9xIEBeICYmIHRlc3RfY29tbWl0IDFfRCAmJgorCWdpdCBjaGVja291dCAxX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgMV9xIC1tIDFfRSAmJgorCWdpdCBjaGVja291dCAtYiAxX3IgQH4zICYmIHRlc3RfY29tbWl0IDFfRiAmJgorCWdpdCBjaGVja291dCAxX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgMV9yIC1tIDFfRyAmJgorCWdpdCBjaGVja291dCBAXl4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgMV9wIC1tIDFfSCAmJgorCisJY2hlY2tfZ3JhcGggPDwtXEVPRgorCSogICAxX0gKKwl8XAorCXwgKiAgIDFfRworCXwgfFwKKwl8IHwgKiAxX0YKKwl8ICogfCAxX0UKKwl8L3wgfAorCXwgKiB8IDFfRAorCSogfCB8IDFfQworCXwvIC8KKwkqIC8gMV9CCisJfC8KKwkqIDFfQQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG5lc3RlZCBsZWZ0LXNrZXdlZCBtZXJnZSBmb2xsb3dpbmcgbm9ybWFsIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIDJfcCAmJgorCXRlc3RfY29tbWl0IDJfQSAmJgorCXRlc3RfY29tbWl0IDJfQiAmJgorCXRlc3RfY29tbWl0IDJfQyAmJgorCWdpdCBjaGVja291dCAtYiAyX3EgQF5eICYmCisJdGVzdF9jb21taXQgMl9EICYmCisJdGVzdF9jb21taXQgMl9FICYmCisJZ2l0IGNoZWNrb3V0IC1iIDJfciBAXiAmJiB0ZXN0X2NvbW1pdCAyX0YgJiYKKwlnaXQgY2hlY2tvdXQgMl9xICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgMl9yIC1tIDJfRyAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIDJfcF4gLW0gMl9IICYmCisJZ2l0IGNoZWNrb3V0IC1iIDJfcyBAXl4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgMl9xIC1tIDJfSiAmJgorCWdpdCBjaGVja291dCAyX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgMl9zIC1tIDJfSyAmJgorCisJY2hlY2tfZ3JhcGggPDwtXEVPRgorCSogICAyX0sKKwl8XAorCXwgKiAgIDJfSgorCXwgfFwKKwl8IHwgKiAgIDJfSAorCXwgfCB8XAorCXwgfCAqIHwgMl9HCisJfCB8L3wgfAorCXwgfCAqIHwgMl9GCisJfCAqIHwgfCAyX0UKKwl8IHwvIC8KKwl8ICogfCAyX0QKKwkqIHwgfCAyX0MKKwl8IHwvCisJfC98CisJKiB8IDJfQgorCXwvCisJKiAyX0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBuZXN0ZWQgcmlnaHQtc2tld2VkIG1lcmdlIGZvbGxvd2luZyBsZWZ0LXNrZXdlZCBtZXJnZScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiAzX3AgJiYKKwl0ZXN0X2NvbW1pdCAzX0EgJiYKKwlnaXQgY2hlY2tvdXQgLWIgM19xICYmCisJdGVzdF9jb21taXQgM19CICYmCisJdGVzdF9jb21taXQgM19DICYmCisJZ2l0IGNoZWNrb3V0IC1iIDNfciBAXiAmJgorCXRlc3RfY29tbWl0IDNfRCAmJgorCWdpdCBjaGVja291dCAzX3EgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgM19yIC1tIDNfRSAmJgorCWdpdCBjaGVja291dCAzX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgM19xIC1tIDNfRiAmJgorCWdpdCBjaGVja291dCAzX3IgJiYgdGVzdF9jb21taXQgM19HICYmCisJZ2l0IGNoZWNrb3V0IDNfcCAmJiBnaXQgbWVyZ2UgLS1uby1mZiAzX3IgLW0gM19IICYmCisJZ2l0IGNoZWNrb3V0IEBeXiAmJiBnaXQgbWVyZ2UgLS1uby1mZiAzX3AgLW0gM19KICYmCisKKwljaGVja19ncmFwaCA8PC1cRU9GCisJKiAgIDNfSgorCXxcCisJfCAqICAgM19ICisJfCB8XAorCXwgfCAqIDNfRworCXwgKiB8IDNfRgorCXwvfCB8CisJfCAqIHwgM19FCisJfCB8XHwKKwl8IHwgKiAzX0QKKwl8ICogfCAzX0MKKwl8IHwvCisJfCAqIDNfQgorCXwvCisJKiAzX0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCByaWdodC1za2V3ZWQgbWVyZ2UgZm9sbG93aW5nIGEgbGVmdC1za2V3ZWQgb25lJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIDRfcCAmJgorCXRlc3RfY29tbWl0IDRfQSAmJgorCXRlc3RfY29tbWl0IDRfQiAmJgorCXRlc3RfY29tbWl0IDRfQyAmJgorCWdpdCBjaGVja291dCAtYiA0X3EgQF5eICYmIHRlc3RfY29tbWl0IDRfRCAmJgorCWdpdCBjaGVja291dCAtYiA0X3IgNF9wXiAmJiBnaXQgbWVyZ2UgLS1uby1mZiA0X3EgLW0gNF9FICYmCisJZ2l0IGNoZWNrb3V0IC1iIDRfcyA0X3BeXiAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIDRfciAtbSA0X0YgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA0X3AgLW0gNF9HICYmCisJZ2l0IGNoZWNrb3V0IEBeXiAmJiBnaXQgbWVyZ2UgLS1uby1mZiA0X3MgLW0gNF9IICYmCisKKwljaGVja19ncmFwaCAtLWRhdGUtb3JkZXIgPDwtXEVPRgorCSogICA0X0gKKwl8XAorCXwgKiAgIDRfRworCXwgfFwKKwl8ICogfCA0X0YKKwl8L3wgfAorCXwgKiB8ICAgNF9FCisJfCB8XCBcCisJfCB8ICogfCA0X0QKKwl8IHwvIC8KKwl8L3wgfAorCXwgfCAqIDRfQworCXwgfC8KKwl8ICogNF9CCisJfC8KKwkqIDRfQQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG9jdG9wdXMgbWVyZ2Ugd2l0aCBjb2x1bW4gam9pbmluZyBpdHMgcGVudWx0aW1hdGUgcGFyZW50JyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIDVfcCAmJgorCXRlc3RfY29tbWl0IDVfQSAmJgorCWdpdCBicmFuY2ggNV9xICYmCisJZ2l0IGJyYW5jaCA1X3IgJiYKKwl0ZXN0X2NvbW1pdCA1X0IgJiYKKwlnaXQgY2hlY2tvdXQgNV9xICYmIHRlc3RfY29tbWl0IDVfQyAmJgorCWdpdCBjaGVja291dCA1X3IgJiYgdGVzdF9jb21taXQgNV9EICYmCisJZ2l0IGNoZWNrb3V0IDVfcCAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIDVfcSA1X3IgLW0gNV9FICYmCisJZ2l0IGNoZWNrb3V0IDVfcSAmJiB0ZXN0X2NvbW1pdCA1X0YgJiYKKwlnaXQgY2hlY2tvdXQgLWIgNV9zIDVfcF4gJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA1X3AgNV9xIC1tIDVfRyAmJgorCWdpdCBjaGVja291dCA1X3IgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA1X3MgLW0gNV9IICYmCisKKwljaGVja19ncmFwaCA8PC1cRU9GCisJKiAgIDVfSAorCXxcCisJfCAqLS4gICA1X0cKKwl8IHxcIFwKKwl8IHwgfCAqIDVfRgorCXwgfCAqIHwgICA1X0UKKwl8IHwvfFwgXAorCXwgfF98LyAvCisJfC98IHwgLworCXwgfCB8LworCSogfCB8IDVfRAorCXwgfCAqIDVfQworCXwgfC8KKwl8L3wKKwl8ICogNV9CCisJfC8KKwkqIDVfQQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG11bHRpcGxlIHRpcHMnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gNl8xICYmCisJdGVzdF9jb21taXQgNl9BICYmCisJZ2l0IGJyYW5jaCA2XzIgJiYKKwlnaXQgYnJhbmNoIDZfNCAmJgorCXRlc3RfY29tbWl0IDZfQiAmJgorCWdpdCBicmFuY2ggNl8zICYmCisJdGVzdF9jb21taXQgNl9DICYmCisJZ2l0IGNoZWNrb3V0IDZfMiAmJiB0ZXN0X2NvbW1pdCA2X0QgJiYKKwlnaXQgY2hlY2tvdXQgNl8zICYmIHRlc3RfY29tbWl0IDZfRSAmJgorCWdpdCBjaGVja291dCAtYiA2XzUgNl8xICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgNl8yIC1tIDZfRiAmJgorCWdpdCBjaGVja291dCA2XzQgJiYgdGVzdF9jb21taXQgNl9HICYmCisJZ2l0IGNoZWNrb3V0IDZfMyAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIDZfNCAtbSA2X0ggJiYKKwlnaXQgY2hlY2tvdXQgNl8xICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgNl8yIC1tIDZfSSAmJgorCisJY2hlY2tfZ3JhcGggNl8xIDZfMyA2XzUgPDwtXEVPRgorCSogICA2X0kKKwl8XAorCXwgfCAqICAgNl9ICisJfCB8IHxcCisJfCB8IHwgKiA2X0cKKwl8IHwgKiB8IDZfRQorCXwgfCB8IHwgKiA2X0YKKwl8IHxffF98L3wKKwl8L3wgfCB8LworCXwgfCB8L3wKKwl8IHwvfCB8CisJfCAqIHwgfCA2X0QKKwl8IHwgfC8KKwl8IHwvfAorCSogfCB8IDZfQworCXwgfC8KKwl8L3wKKwkqIHwgNl9CCisJfC8KKwkqIDZfQQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG11bHRpcGxlIHRpcHMgYW5kIGNvbG9ycycgJworCXRlc3RfY29uZmlnIGxvZy5ncmFwaENvbG9ycyByZWQsZ3JlZW4seWVsbG93LGJsdWUsbWFnZW50YSxjeWFuICYmCisJY2F0ID5leHBlY3QuY29sb3JzIDw8LVxFT0YgJiYKKwkqICAgNl9JCisJPFJFRD58PFJFU0VUPjxHUkVFTj5cPFJFU0VUPgorCTxSRUQ+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+ICogICA2X0gKKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+PEJMVUU+XDxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+ICogNl9HCisJPFJFRD58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiA8QkxVRT58PFJFU0VUPiAqIDZfRgorCTxSRUQ+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+PFJFRD5fPFJFU0VUPjxZRUxMT1c+fDxSRVNFVD48UkVEPl88UkVTRVQ+PEJMVUU+fDxSRVNFVD48UkVEPi88UkVTRVQ+PEdSRUVOPnw8UkVTRVQ+CisJPFJFRD58PFJFU0VUPjxSRUQ+LzxSRVNFVD48R1JFRU4+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiA8QkxVRT58PFJFU0VUPjxHUkVFTj4vPFJFU0VUPgorCTxSRUQ+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD48R1JFRU4+LzxSRVNFVD48QkxVRT58PFJFU0VUPgorCTxSRUQ+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+PEdSRUVOPi88UkVTRVQ+PFlFTExPVz58PFJFU0VUPiA8QkxVRT58PFJFU0VUPgorCTxSRUQ+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+ICogPEJMVUU+fDxSRVNFVD4gNl9FCisJPFJFRD58PFJFU0VUPiAqIDxDWUFOPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+IDZfRAorCTxSRUQ+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4gPENZQU4+fDxSRVNFVD48QkxVRT4vPFJFU0VUPgorCTxSRUQ+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD48QkxVRT4vPFJFU0VUPjxDWUFOPnw8UkVTRVQ+CisJKiA8QkxVRT58PFJFU0VUPiA8Q1lBTj58PFJFU0VUPiA2X0MKKwk8Q1lBTj58PFJFU0VUPiA8QkxVRT58PFJFU0VUPjxDWUFOPi88UkVTRVQ+CisJPENZQU4+fDxSRVNFVD48Q1lBTj4vPFJFU0VUPjxCTFVFPnw8UkVTRVQ+CisJKiA8QkxVRT58PFJFU0VUPiA2X0IKKwk8QkxVRT58PFJFU0VUPjxCTFVFPi88UkVTRVQ+CisJKiA2X0EKKwlFT0YKKwlsaWJfdGVzdF9jbXBfY29sb3JlZF9ncmFwaCAtLWRhdGUtb3JkZXIgLS1wcmV0dHk9dGZvcm1hdDolcyA2XzEgNl8zIDZfNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG11bHRpcGxlIHRpcHMnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gN18xICYmCisJdGVzdF9jb21taXQgN19BICYmCisJdGVzdF9jb21taXQgN19CICYmCisJdGVzdF9jb21taXQgN19DICYmCisJZ2l0IGNoZWNrb3V0IC1iIDdfMiA3XzF+MiAmJgorCXRlc3RfY29tbWl0IDdfRCAmJgorCXRlc3RfY29tbWl0IDdfRSAmJgorCWdpdCBjaGVja291dCAtYiA3XzMgN18xfjEgJiYKKwl0ZXN0X2NvbW1pdCA3X0YgJiYKKwl0ZXN0X2NvbW1pdCA3X0cgJiYKKwlnaXQgY2hlY2tvdXQgLWIgN180IDdfMn4xICYmCisJdGVzdF9jb21taXQgN19IICYmCisJZ2l0IGNoZWNrb3V0IC1iIDdfNSA3XzF+MiAmJgorCXRlc3RfY29tbWl0IDdfSSAmJgorCWdpdCBjaGVja291dCAtYiA3XzYgN18zfjEgJiYKKwl0ZXN0X2NvbW1pdCA3X0ogJiYKKwlnaXQgY2hlY2tvdXQgLWIgTV8xIDdfMSAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIDdfMiAtbSA3X00xICYmCisJZ2l0IGNoZWNrb3V0IC1iIE1fMyA3XzMgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA3XzQgLW0gN19NMiAmJgorCWdpdCBjaGVja291dCAtYiBNXzUgN181ICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgN182IC1tIDdfTTMgJiYKKwlnaXQgY2hlY2tvdXQgLWIgTV83IDdfMSAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIDdfMiA3XzMgLW0gN19NNCAmJgorCisJY2hlY2tfZ3JhcGggTV8xIE1fMyBNXzUgTV83IDw8LVxFT0YKKwkqICAgN19NMQorCXxcCisJfCB8ICogICA3X00yCisJfCB8IHxcCisJfCB8IHwgKiA3X0gKKwl8IHwgfCB8ICogICA3X00zCisJfCB8IHwgfCB8XAorCXwgfCB8IHwgfCAqIDdfSgorCXwgfCB8IHwgKiB8IDdfSQorCXwgfCB8IHwgfCB8ICogICA3X000CisJfCB8X3xffF98X3wvfFwKKwl8L3wgfCB8IHwgfC8gLworCXwgfCB8X3xffC98IC8KKwl8IHwvfCB8IHwgfC8KKwl8IHwgfCB8X3wvfAorCXwgfCB8L3wgfCB8CisJfCB8ICogfCB8IHwgN19HCisJfCB8IHwgfF98LworCXwgfCB8L3wgfAorCXwgfCAqIHwgfCA3X0YKKwl8ICogfCB8IHwgN19FCisJfCB8IHwvIC8KKwl8IHwvfCB8CisJfCAqIHwgfCA3X0QKKwl8IHwgfC8KKwl8IHwvfAorCSogfCB8IDdfQworCXwgfC8KKwl8L3wKKwkqIHwgN19CCisJfC8KKwkqIDdfQQorCUVPRgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMTYtbG9nLWJsb29tLnNoIGIvdC90NDIxNi1sb2ctYmxvb20uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjFiNjhkZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTYtbG9nLWJsb29tLnNoCkBAIC0wLDAgKzEsMTU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxvZyBmb3IgYSBwYXRoIHdpdGggQmxvb20gZmlsdGVycycKKy4gLi90ZXN0LWxpYi5zaAorCitHSVRfVEVTVF9DT01NSVRfR1JBUEg9MAorR0lUX1RFU1RfQ09NTUlUX0dSQVBIX0NIQU5HRURfUEFUSFM9MAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0IC0gcmVwbywgY29tbWl0cywgY29tbWl0IGdyYXBoLCBsb2cgb3V0cHV0cycgJworCWdpdCBpbml0ICYmCisJbWtkaXIgQSBBL0IgQS9CL0MgJiYKKwl0ZXN0X2NvbW1pdCBjMSBBL2ZpbGUxICYmCisJdGVzdF9jb21taXQgYzIgQS9CL2ZpbGUyICYmCisJdGVzdF9jb21taXQgYzMgQS9CL0MvZmlsZTMgJiYKKwl0ZXN0X2NvbW1pdCBjNCBBL2ZpbGUxICYmCisJdGVzdF9jb21taXQgYzUgQS9CL2ZpbGUyICYmCisJdGVzdF9jb21taXQgYzYgQS9CL0MvZmlsZTMgJiYKKwl0ZXN0X2NvbW1pdCBjNyBBL2ZpbGUxICYmCisJdGVzdF9jb21taXQgYzggQS9CL2ZpbGUyICYmCisJdGVzdF9jb21taXQgYzkgQS9CL0MvZmlsZTMgJiYKKwl0ZXN0X2NvbW1pdCBjMTAgZmlsZV90b19iZV9kZWxldGVkICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRH40ICYmCisJdGVzdF9jb21taXQgc2lkZS0xIGZpbGU0ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSBzaWRlICYmCisJdGVzdF9jb21taXQgYzExIGZpbGU1ICYmCisJbXYgZmlsZTUgZmlsZTVfcmVuYW1lZCAmJgorCWdpdCBhZGQgZmlsZTVfcmVuYW1lZCAmJgorCWdpdCBjb21taXQgLW0gInJlbmFtZSIgJiYKKwlybSBmaWxlX3RvX2JlX2RlbGV0ZWQgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tICJmaWxlIHJlbW92ZWQiICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLWNoYW5nZWQtcGF0aHMKKycKK2dyYXBoX3JlYWRfZXhwZWN0ICgpIHsKKwlOVU1fQ0hVTktTPTUKKwljYXQgPmV4cGVjdCA8PC0gRU9GCisJaGVhZGVyOiA0MzQ3NTA0OCAxIDEgJE5VTV9DSFVOS1MgMAorCW51bV9jb21taXRzOiAkMQorCWNodW5rczogb2lkX2Zhbm91dCBvaWRfbG9va3VwIGNvbW1pdF9tZXRhZGF0YSBibG9vbV9pbmRleGVzIGJsb29tX2RhdGEKKwlFT0YKKwl0ZXN0LXRvb2wgcmVhZC1ncmFwaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQtZ3JhcGggd3JpdGUgd3JvdGUgb3V0IHRoZSBibG9vbSBjaHVua3MnICcKKwlncmFwaF9yZWFkX2V4cGVjdCAxNQorJworCisjIFR1cm4gb2ZmIGFueSBpbmhlcml0ZWQgdHJhY2UyIHNldHRpbmdzIGZvciB0aGlzIHRlc3QuCitzYW5lX3Vuc2V0IEdJVF9UUkFDRTIgR0lUX1RSQUNFMl9QRVJGIEdJVF9UUkFDRTJfRVZFTlQKK3NhbmVfdW5zZXQgR0lUX1RSQUNFMl9QRVJGX0JSSUVGCitzYW5lX3Vuc2V0IEdJVF9UUkFDRTJfQ09ORklHX1BBUkFNUworCitzZXR1cCAoKSB7CisJcm0gIiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UucGVyZiIKKwlnaXQgLWMgY29yZS5jb21taXRHcmFwaD1mYWxzZSBsb2cgLS1wcmV0dHk9ImZvcm1hdDolcyIgJDEgPmxvZ193b19ibG9vbSAmJgorCUdJVF9UUkFDRTJfUEVSRj0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZS5wZXJmIiBnaXQgLWMgY29yZS5jb21taXRHcmFwaD10cnVlIGxvZyAtLXByZXR0eT0iZm9ybWF0OiVzIiAkMSA+bG9nX3dfYmxvb20KK30KKwordGVzdF9ibG9vbV9maWx0ZXJzX3VzZWQgKCkgeworCWxvZ19hcmdzPSQxCisJYmxvb21fdHJhY2VfcHJlZml4PSJzdGF0aXN0aWNzOntcImZpbHRlcl9ub3RfcHJlc2VudFwiOjAsXCJ6ZXJvX2xlbmd0aF9maWx0ZXJcIjowLFwibWF5YmVcIiIKKwlzZXR1cCAiJGxvZ19hcmdzIiAmJgorCWdyZXAgLXEgIiRibG9vbV90cmFjZV9wcmVmaXgiICIkVFJBU0hfRElSRUNUT1JZL3RyYWNlLnBlcmYiICYmCisJdGVzdF9jbXAgbG9nX3dvX2Jsb29tIGxvZ193X2Jsb29tICYmCisgICAgdGVzdF9wYXRoX2lzX2ZpbGUgIiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UucGVyZiIKK30KKwordGVzdF9ibG9vbV9maWx0ZXJzX25vdF91c2VkICgpIHsKKwlsb2dfYXJncz0kMQorCXNldHVwICIkbG9nX2FyZ3MiICYmCisJIShncmVwIC1xICJzdGF0aXN0aWNzOntcImZpbHRlcl9ub3RfcHJlc2VudFwiOiIgIiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UucGVyZiIpICYmCisJdGVzdF9jbXAgbG9nX3dvX2Jsb29tIGxvZ193X2Jsb29tCit9CisKK2ZvciBwYXRoIGluIEEgQS9CIEEvQi9DIEEvZmlsZTEgQS9CL2ZpbGUyIEEvQi9DL2ZpbGUzIGZpbGU0IGZpbGU1IGZpbGU1X3JlbmFtZWQgZmlsZV90b19iZV9kZWxldGVkCitkbworCWZvciBvcHRpb24gaW4gIiIgXAorCSAgICAgICItLWFsbCIgXAorCQkgICAgICAiLS1mdWxsLWhpc3RvcnkiIFwKKwkJICAgICAgIi0tZnVsbC1oaXN0b3J5IC0tc2ltcGxpZnktbWVyZ2VzIiBcCisJCSAgICAgICItLXNpbXBsaWZ5LW1lcmdlcyIgXAorCQkgICAgICAiLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uIiBcCisJCSAgICAgICItLWZvbGxvdyIgXAorCQkgICAgICAiLS1maXJzdC1wYXJlbnQiIFwKKwkJICAgICAgIi0tdG9wby1vcmRlciIgXAorCQkgICAgICAiLS1kYXRlLW9yZGVyIiBcCisJCSAgICAgICItLWF1dGhvci1kYXRlLW9yZGVyIiBcCisJCSAgICAgICItLWFuY2VzdHJ5LXBhdGggc2lkZS4ubWFzdGVyIgorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCBsb2cgb3B0aW9uOiAkb3B0aW9uIGZvciBwYXRoOiAkcGF0aCIgJworCQkJdGVzdF9ibG9vbV9maWx0ZXJzX3VzZWQgIiRvcHRpb24gLS0gJHBhdGgiCisJCScKKwlkb25lCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS0gZm9sZGVyIHdvcmtzIHdpdGggYW5kIHdpdGhvdXQgdGhlIHRyYWlsaW5nIHNsYXNoJyAnCisJdGVzdF9ibG9vbV9maWx0ZXJzX3VzZWQgIi0tIEEiICYmCisJdGVzdF9ibG9vbV9maWx0ZXJzX3VzZWQgIi0tIEEvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIGZvciBwYXRoIHRoYXQgZG9lcyBub3QgZXhpc3QuICcgJworCXRlc3RfYmxvb21fZmlsdGVyc191c2VkICItLSBwYXRoX2RvZXNfbm90X2V4aXN0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIHdpdGggLS13YWxrLXJlZmxvZ3MgZG9lcyBub3QgdXNlIEJsb29tIGZpbHRlcnMnICcKKwl0ZXN0X2Jsb29tX2ZpbHRlcnNfbm90X3VzZWQgIi0td2Fsay1yZWZsb2dzIC0tIEEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS0gbXVsdGlwbGUgcGF0aCBzcGVjcyBkb2VzIG5vdCB1c2UgQmxvb20gZmlsdGVycycgJworCXRlc3RfYmxvb21fZmlsdGVyc19ub3RfdXNlZCAiLS0gZmlsZTQgQS9maWxlMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyB3aXRoIHdpbGRjYXJkIHRoYXQgcmVzb2x2ZXMgdG8gYSBzaW5nbGUgcGF0aCB1c2VzIEJsb29tIGZpbHRlcnMnICcKKwl0ZXN0X2Jsb29tX2ZpbHRlcnNfdXNlZCAiLS0gKjQiICYmCisJdGVzdF9ibG9vbV9maWx0ZXJzX3VzZWQgIi0tICpyZW5hbWVkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIHdpdGggd2lsZGNhcmQgdGhhdCByZXNvbHZlcyB0byBhIG11bHRpcGxlIHBhdGhzIGRvZXMgbm90IHVzZXMgQmxvb20gZmlsdGVycycgJworCXRlc3RfYmxvb21fZmlsdGVyc19ub3RfdXNlZCAiLS0gKiIgJiYKKwl0ZXN0X2Jsb29tX2ZpbHRlcnNfbm90X3VzZWQgIi0tIGZpbGUqIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtIGFkZCBjb21taXQtZ3JhcGggdG8gdGhlIGNoYWluIHdpdGhvdXQgQmxvb20gZmlsdGVycycgJworCXRlc3RfY29tbWl0IGMxNCBBL2Fub3RoZXJGaWxlMiAmJgorCXRlc3RfY29tbWl0IGMxNSBBL0IvYW5vdGhlckZpbGUyICYmCisJdGVzdF9jb21taXQgYzE2IEEvQi9DL2Fub3RoZXJGaWxlMiAmJgorCUdJVF9URVNUX0NPTU1JVF9HUkFQSF9DSEFOR0VEX1BBVEhTPTAgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGhzL2NvbW1pdC1ncmFwaC1jaGFpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEbyBub3QgdXNlIEJsb29tIGZpbHRlcnMgaWYgdGhlIGxhdGVzdCBncmFwaCBkb2VzIG5vdCBoYXZlIEJsb29tIGZpbHRlcnMuJyAnCisJdGVzdF9ibG9vbV9maWx0ZXJzX25vdF91c2VkICItLSBBL0IiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gYWRkIGNvbW1pdC1ncmFwaCB0byB0aGUgY2hhaW4gd2l0aCBCbG9vbSBmaWx0ZXJzJyAnCisJdGVzdF9jb21taXQgYzE3IEEvYW5vdGhlckZpbGUzICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLWNoYW5nZWQtcGF0aHMgLS1zcGxpdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBocy9jb21taXQtZ3JhcGgtY2hhaW4KKycKKwordGVzdF9ibG9vbV9maWx0ZXJzX3VzZWRfd2hlbl9zb21lX2ZpbHRlcnNfYXJlX21pc3NpbmcgKCkgeworCWxvZ19hcmdzPSQxCisJYmxvb21fdHJhY2VfcHJlZml4PSJzdGF0aXN0aWNzOntcImZpbHRlcl9ub3RfcHJlc2VudFwiOjMsXCJ6ZXJvX2xlbmd0aF9maWx0ZXJcIjowLFwibWF5YmVcIjo4LFwiZGVmaW5pdGVseV9ub3RcIjo2IgorCXNldHVwICIkbG9nX2FyZ3MiICYmCisJZ3JlcCAtcSAiJGJsb29tX3RyYWNlX3ByZWZpeCIgIiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UucGVyZiIgJiYKKwl0ZXN0X2NtcCBsb2dfd29fYmxvb20gbG9nX3dfYmxvb20KK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVXNlIEJsb29tIGZpbHRlcnMgaWYgdGhleSBleGlzdCBpbiB0aGUgbGF0ZXN0IGJ1dCBub3QgYWxsIGNvbW1pdCBncmFwaHMgaW4gdGhlIGNoYWluLicgJworCXRlc3RfYmxvb21fZmlsdGVyc191c2VkX3doZW5fc29tZV9maWx0ZXJzX2FyZV9taXNzaW5nICItLSBBL0IiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDI1Mi1hbS1vcHRpb25zLnNoIGIvdC90NDI1Mi1hbS1vcHRpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3NThlNjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyLWFtLW9wdGlvbnMuc2gKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhbSB3aXRoIG9wdGlvbnMgYW5kIG5vdCBsb3NpbmcgdGhlbScKKy4gLi90ZXN0LWxpYi5zaAorCit0bT0iJFRFU1RfRElSRUNUT1JZL3Q0MjUyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwljcCAiJHRtL2ZpbGUtMS0wIiBmaWxlLTEgJiYKKwljcCAiJHRtL2ZpbGUtMi0wIiBmaWxlLTIgJiYKKwlnaXQgYWRkIGZpbGUtMSBmaWxlLTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgYW0gLS13aGl0ZXNwYWNlPWZpeCcgJworCXJtIC1yZiAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLXdoaXRlc3BhY2U9Zml4ICIkdG0iL2FtLXRlc3QtMS0/ICYmCisJZ2l0IGFtIC0tc2tpcCAmJgorCWdyZXAgMyBmaWxlLTEgJiYKKwlncmVwICJeU2l4JCIgZmlsZS0yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVycnVwdGVkIGFtIC1DMScgJworCXJtIC1yZiAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtQzEgIiR0bSIvYW0tdGVzdC0yLT8gJiYKKwlnaXQgYW0gLS1za2lwICYmCisJZ3JlcCAzIGZpbGUtMSAmJgorCWdyZXAgIl5UaHJlZSQiIGZpbGUtMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBhbSAtcDInICcKKwlybSAtcmYgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLXAyICIkdG0iL2FtLXRlc3QtMy0/ICYmCisJZ2l0IGFtIC0tc2tpcCAmJgorCWdyZXAgMyBmaWxlLTEgJiYKKwlncmVwICJeVGhyZWUkIiBmaWxlLTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgYW0gLUMxIC1wMicgJworCXJtIC1yZiAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtcDIgLUMxICIkdG0iL2FtLXRlc3QtNC0/ICYmCisJZ2l0IGFtIC0tc2tpcCAmJgorCWdyZXAgMyBmaWxlLTEgJiYKKwlncmVwICJeVGhyZWUkIiBmaWxlLTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgYW0gLS1kaXJlY3Rvcnk9ImZyb3R6IG5pdGZvbCInICcKKwlybSAtcmYgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1kaXJlY3Rvcnk9ImZyb3R6IG5pdGZvbCIgIiR0bSIvYW0tdGVzdC01LT8gJiYKKwlnaXQgYW0gLS1za2lwICYmCisJZ3JlcCBPbmUgImZyb3R6IG5pdGZvbC9maWxlLTUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHRvIGEgZnVubnkgcGF0aCcgJworCXdpdGhfc3E9IndpdGgnXCcnc3EiICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IGFtIC0tZGlyZWN0b3J5PSIkd2l0aF9zcSIgIiR0bSIvYW0tdGVzdC01LTIgJiYKKwl0ZXN0IC1mICIkd2l0aF9zcS9maWxlLTUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tcmVqZWN0JyAnCisJcm0gLXJmIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0tcmVqZWN0ICIkdG0iL2FtLXRlc3QtNi0xICYmCisJZ3JlcCAiQEAgLTEsMyArMSwzIEBAIiBmaWxlLTIucmVqICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUgLS1xdWlldCBmaWxlLTIgJiYKKwlncmVwICJbLV0tcmVqZWN0IiAuZ2l0L3JlYmFzZS1hcHBseS9hcHBseS1vcHQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtMS0xIGIvdC90NDI1Mi9hbS10ZXN0LTEtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGMwOWRjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTEtMQpAQCAtMCwwICsxLDE5IEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBUaHJlZQorCitBcHBsaWNhdGlvbiBvZiB0aGlzIHNob3VsZCBiZSByZWplY3RlZCBiZWNhdXNlIHRoZSBmaXJzdCBsaW5lIGluIHRoZQorY29udGV4dCBkb2VzIG5vdCBtYXRjaC4KKworZGlmZiAtLWdpdCBpL2ZpbGUtMSB3L2ZpbGUtMQoraW5kZXggMDZlNTY3Yi4uMTBmODM0MiAxMDA2NDQKKy0tLSBpL2ZpbGUtMQorKysrIHcvZmlsZS0xCitAQCAtMSw2ICsxLDYgQEAKKyBPbmUKKyAyCistMworK1RocmVlIAorIDQKKyA1CisgNgpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9hbS10ZXN0LTEtMiBiL3QvdDQyNTIvYW0tdGVzdC0xLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4NzRhZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvYW0tdGVzdC0xLTIKQEAgLTAsMCArMSwyMSBAQAorRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUgRGVjIDQgMTY6MDA6MDAgMjAwOCAtMDgwMAorU3ViamVjdDogU2l4CisKK0FwcGx5aW5nIHRoaXMgcGF0Y2ggd2l0aCAtLXdoaXRlc3BhY2U9Zml4IHNob3VsZCBsb3NlIAordGhlIHRyYWlsaW5nIHdoaXRlc3BhY2UgYWZ0ZXIgIlNpeCIuCisKK2RpZmYgLS1naXQgaS9maWxlLTIgdy9maWxlLTIKK2luZGV4IDA2ZTU2N2IuLmI2ZjNhMTYgMTAwNjQ0CistLS0gaS9maWxlLTIKKysrKyB3L2ZpbGUtMgorQEAgLTEsNyArMSw3IEBACisgMQorIDIKKy0zCisrVGhyZWUKKyA0CisgNQorLTYKKytTaXggCisgNwpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9hbS10ZXN0LTItMSBiL3QvdDQyNTIvYW0tdGVzdC0yLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkYTk0YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvYW0tdGVzdC0yLTEKQEAgLTAsMCArMSwxOSBAQAorRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUgRGVjIDQgMTY6MDA6MDAgMjAwOCAtMDgwMAorU3ViamVjdDogVGhyZWUKKworQXBwbGljYXRpb24gb2YgdGhpcyBzaG91bGQgYmUgcmVqZWN0ZWQgZXZlbiB3aXRoIC1DMSBiZWNhdXNlIHRoZQorcHJlaW1hZ2UgbGluZSBpbiB0aGUgY29udGV4dCBkb2VzIG5vdCBtYXRjaC4KKworZGlmZiAtLWdpdCBpL2ZpbGUtMSB3L2ZpbGUtMQoraW5kZXggMDZlNTY3Yi4uMTBmODM0MiAxMDA2NDQKKy0tLSBpL2ZpbGUtMQorKysrIHcvZmlsZS0xCitAQCAtMSw2ICsxLDYgQEAKKyAxCisgMgorLVRyZXMKKytUaHJlZSAKKyA0CisgNQorIDYKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC0yLTIgYi90L3Q0MjUyL2FtLXRlc3QtMi0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzY2MDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtMi0yCkBAIC0wLDAgKzEsMjEgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IFNpeAorCitBcHBseWluZyB0aGlzIHBhdGNoIHdpdGggLUMxIHNob3VsZCBiZSBzdWNjZXNzZnVsIGV2ZW4gdGhvdWdoIAordGhlIGZpcnN0IGxpbmUgaW4gdGhlIGNvbnRleHQgZG9lcyBub3QgbWF0Y2guCisKK2RpZmYgLS1naXQgaS9maWxlLTIgdy9maWxlLTIKK2luZGV4IDA2ZTU2N2IuLmI2ZjNhMTYgMTAwNjQ0CistLS0gaS9maWxlLTIKKysrKyB3L2ZpbGUtMgorQEAgLTEsNyArMSw3IEBACisgT25lCisgMgorLTMKKytUaHJlZQorIDQKKyA1CistNgorK1NpeAorIDcKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC0zLTEgYi90L3Q0MjUyL2FtLXRlc3QtMy0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOGU1YWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtMy0xCkBAIC0wLDAgKzEsMTkgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IFRocmVlCisKK0FwcGxpY2F0aW9uIG9mIHRoaXMgc2hvdWxkIGJlIHJlamVjdGVkIGV2ZW4gd2l0aCAtcDIgYmVjYXVzZSB0aGUKK3ByZWltYWdlIGxpbmUgaW4gdGhlIGNvbnRleHQgZG9lcyBub3QgbWF0Y2guCisKK2RpZmYgLS1naXQgaS9qdW5rL2ZpbGUtMSB3L2p1bmsvZmlsZS0xCitpbmRleCAwNmU1NjdiLi4xMGY4MzQyIDEwMDY0NAorLS0tIGkvanVuay9maWxlLTEKKysrKyB3L2p1bmsvZmlsZS0xCitAQCAtMSw2ICsxLDYgQEAKKyAxCisgMgorLVRyZXMKKytUaHJlZSAKKyA0CisgNQorIDYKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC0zLTIgYi90L3Q0MjUyL2FtLXRlc3QtMy0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwODFiOTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtMy0yCkBAIC0wLDAgKzEsMjEgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IFNpeAorCitBcHBseWluZyB0aGlzIHBhdGNoIHdpdGggLXAyIHNob3VsZCBiZSBzdWNjZXNzZnVsIGV2ZW4gdGhvdWdoCit0aGUgcGF0Y2ggaXMgYWdhaW5zdCBhIHdyb25nIGxldmVsLgorCitkaWZmIC0tZ2l0IGkvanVuay9maWxlLTIgdy9qdW5rL2ZpbGUtMgoraW5kZXggMDZlNTY3Yi4uYjZmM2ExNiAxMDA2NDQKKy0tLSBpL2p1bmsvZmlsZS0yCisrKysgdy9qdW5rL2ZpbGUtMgorQEAgLTEsNyArMSw3IEBACisgMQorIDIKKy0zCisrVGhyZWUKKyA0CisgNQorLTYKKytTaXgKKyA3CmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtNC0xIGIvdC90NDI1Mi9hbS10ZXN0LTQtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDhjZDZjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTQtMQpAQCAtMCwwICsxLDE5IEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBUaHJlZQorCitBcHBsaWNhdGlvbiBvZiB0aGlzIHNob3VsZCBiZSByZWplY3RlZCBldmVuIHdpdGggLUMxIC1wMiBiZWNhdXNlCit0aGUgcHJlaW1hZ2UgbGluZSBpbiB0aGUgY29udGV4dCBkb2VzIG5vdCBtYXRjaC4KKworZGlmZiAtLWdpdCBpL2p1bmsvZmlsZS0xIHcvanVuay9maWxlLTEKK2luZGV4IDA2ZTU2N2IuLjEwZjgzNDIgMTAwNjQ0CistLS0gaS9qdW5rL2ZpbGUtMQorKysrIHcvanVuay9maWxlLTEKK0BAIC0xLDYgKzEsNiBAQAorIDEKKyAyCistVHJlcworK1RocmVlIAorIDQKKyA1CisgNgpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9hbS10ZXN0LTQtMiBiL3QvdDQyNTIvYW0tdGVzdC00LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU2OWJmYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvYW0tdGVzdC00LTIKQEAgLTAsMCArMSwyMiBAQAorRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUgRGVjIDQgMTY6MDA6MDAgMjAwOCAtMDgwMAorU3ViamVjdDogU2l4CisKK0FwcGx5aW5nIHRoaXMgcGF0Y2ggd2l0aCAtQzEgLXAyIHNob3VsZCBiZSBzdWNjZXNzZnVsIGV2ZW4gdGhvdWdoCit0aGUgcGF0Y2ggaXMgYWdhaW5zdCBhIHdyb25nIGxldmVsIGFuZCB0aGUgZmlyc3QgY29udGV4dCBsaW5lIGRvZXMKK25vdCBtYXRjaC4KKworZGlmZiAtLWdpdCBpL2p1bmsvZmlsZS0yIHcvanVuay9maWxlLTIKK2luZGV4IDA2ZTU2N2IuLmI2ZjNhMTYgMTAwNjQ0CistLS0gaS9qdW5rL2ZpbGUtMgorKysrIHcvanVuay9maWxlLTIKK0BAIC0xLDcgKzEsNyBAQAorIE9uZQorIDIKKy0zCisrVGhyZWUKKyA0CisgNQorLTYKKytTaXgKKyA3CmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtNS0xIGIvdC90NDI1Mi9hbS10ZXN0LTUtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTdiZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTUtMQpAQCAtMCwwICsxLDIwIEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBTaXgKKworQXBwbHlpbmcgdGhpcyBwYXRjaCB3aXRoIC0tZGlyZWN0b3J5PSdmcm90eiBuaXRmb2wnIHNob3VsZCBmYWlsCisKK2RpZmYgLS1naXQgaS9qdW5rL2ZpbGUtMiB3L2p1bmsvZmlsZS0yCitpbmRleCAwNmU1NjdiLi5iNmYzYTE2IDEwMDY0NAorLS0tIGkvanVuay9maWxlLTIKKysrKyB3L2p1bmsvZmlsZS0yCitAQCAtMSw3ICsxLDcgQEAKKyBPbmUKKyAyCistMworK1RocmVlCisgNAorIDUKKy02CisrU2l4CisgNwpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9hbS10ZXN0LTUtMiBiL3QvdDQyNTIvYW0tdGVzdC01LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczMDI1YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvYW0tdGVzdC01LTIKQEAgLTAsMCArMSwxNSBAQAorRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUgRGVjIDQgMTY6MDA6MDAgMjAwOCAtMDgwMAorU3ViamVjdDogU2l4CisKK0FwcGx5aW5nIHRoaXMgcGF0Y2ggd2l0aCAtLWRpcmVjdG9yeT0nZnJvdHogbml0Zm9sJyBzaG91bGQgc3VjY2VlZAorCitkaWZmIC0tZ2l0IGkvZmlsZS01IHcvZmlsZS01CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwLi4xZDZlZDlmCistLS0gL2Rldi9udWxsCisrKysgdy9maWxlLTUKK0BAIC0wLDAgKzEsMyBAQAorK09uZQorK3R3bworK3RocmVlCmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtNi0xIGIvdC90NDI1Mi9hbS10ZXN0LTYtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODg1OWU5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTYtMQpAQCAtMCwwICsxLDIxIEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBIdWgKKworU2hvdWxkIGZhaWwgYW5kIGxlYXZlIHJlamVjdHMKKworZGlmZiAtLWdpdCBpL2ZpbGUtMiB3L2ZpbGUtMgoraW5kZXggMDZlNTY3Yi4uYjZmM2ExNiAxMDA2NDQKKy0tLSBpL2ZpbGUtMgorKysrIHcvZmlsZS0yCitAQCAtMSwzICsxLDMgQEAKKy0wCisrT25lCisgMgorIDMKK0BAIC00LDQgKzQsNCBAQAorIDQKKyA1CistNgorK1NpeAorIDcKZGlmZiAtLWdpdCBhL3QvdDQyNTIvZmlsZS0xLTAgYi90L3Q0MjUyL2ZpbGUtMS0wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZTU2N2IxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9maWxlLTEtMApAQCAtMCwwICsxLDcgQEAKKzEKKzIKKzMKKzQKKzUKKzYKKzcKZGlmZiAtLWdpdCBhL3QvdDQyNTIvZmlsZS0yLTAgYi90L3Q0MjUyL2ZpbGUtMi0wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZTU2N2IxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9maWxlLTItMApAQCAtMCwwICsxLDcgQEAKKzEKKzIKKzMKKzQKKzUKKzYKKzcKZGlmZiAtLWdpdCBhL3QvdDQyNTMtYW0ta2VlcC1jci1kb3Muc2ggYi90L3Q0MjUzLWFtLWtlZXAtY3ItZG9zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlMWI3M2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUzLWFtLWtlZXAtY3ItZG9zLnNoCkBAIC0wLDAgKzEsOTggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgU3RlZmFuLVcuIEhhaG4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWFtIG1ib3ggd2l0aCBkb3MgbGluZSBlbmRpbmcuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRocmVlIHBhdGNoZXMgd2hpY2ggd2lsbCBiZSBhZGRlZCBhcyBmaWxlcyB3aXRoIGRvcyBsaW5lIGVuZGluZy4KKworY2F0ID5maWxlMSA8PFxFT0YKK2xpbmUgMQorRU9GCisKK2NhdCA+ZmlsZTFhIDw8XEVPRgorbGluZSAxCitsaW5lIDQKK0VPRgorCitjYXQgPmZpbGUyIDw8XEVPRgorbGluZSAxCitsaW5lIDIKK0VPRgorCitjYXQgPmZpbGUzIDw8XEVPRgorbGluZSAxCitsaW5lIDIKK2xpbmUgMworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnkgd2l0aCBkb3MgZmlsZXMnICcKKwlhcHBlbmRfY3IgPGZpbGUxID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBJbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisJYXBwZW5kX2NyIDxmaWxlMiA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gU2Vjb25kICYmCisJYXBwZW5kX2NyIDxmaWxlMyA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gVGhpcmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBkb3MgZmlsZXMgd2l0aG91dCAtLWtlZXAtY3InICcKKwlnaXQgY2hlY2tvdXQgLWIgZG9zZmlsZXMgaW5pdGlhbCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLWsgaW5pdGlhbC4ubWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC1rIC0zIDAwMCoucGF0Y2ggJiYKKwlnaXQgYW0gLS1hYm9ydCAmJgorCXJtIC1yZiAuZ2l0L3JlYmFzZS1hcHBseSAwMDAqLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGggZG9zIGZpbGVzIHdpdGggLS1rZWVwLWNyJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGRvc2ZpbGVzLWtlZXAtY3IgaW5pdGlhbCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLWsgLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyID5vdXRwdXQgJiYKKwlnaXQgYW0gLS1rZWVwLWNyIC1rIC0zIG91dHB1dCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGRvcyBmaWxlcyBjb25maWcgYW0ua2VlcGNyJyAnCisJZ2l0IGNvbmZpZyBhbS5rZWVwY3IgMSAmJgorCWdpdCBjaGVja291dCAtYiBkb3NmaWxlcy1jb25mLWtlZXBjciBpbml0aWFsICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtayAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXIgPm91dHB1dCAmJgorCWdpdCBhbSAtayAtMyBvdXRwdXQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBkb3MgZmlsZXMgY29uZmlnIGFtLmtlZXBjciBvdmVycmlkZGVuIGJ5IC0tbm8ta2VlcC1jcicgJworCWdpdCBjb25maWcgYW0ua2VlcGNyIDEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZG9zZmlsZXMtY29uZi1rZWVwY3Itb3ZlcnJpZGUgaW5pdGlhbCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLWsgaW5pdGlhbC4ubWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC1rIC0zIC0tbm8ta2VlcC1jciAwMDAqLnBhdGNoICYmCisJZ2l0IGFtIC0tYWJvcnQgJiYKKwlybSAtcmYgLmdpdC9yZWJhc2UtYXBwbHkgMDAwKi5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGRvcyBmaWxlcyB3aXRoIC0ta2VlcC1jciBjb250aW51ZScgJworCWdpdCBjaGVja291dCAtYiBkb3NmaWxlcy1rZWVwLWNyLWNvbnRpbnVlIGluaXRpYWwgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1rIGluaXRpYWwuLm1hc3RlciAmJgorCWFwcGVuZF9jciA8ZmlsZTFhID5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiZGlmZmVyZW50IHBhdGNoIiBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0ta2VlcC1jciAtayAtMyAwMDAqLnBhdGNoICYmCisJYXBwZW5kX2NyIDxmaWxlMiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBhbSAtMyAtLXJlc29sdmVkICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGggdW5peCBmaWxlcyBjb25maWcgYW0ua2VlcGNyIG92ZXJyaWRkZW4gYnkgLS1uby1rZWVwLWNyJyAnCisJZ2l0IGNvbmZpZyBhbS5rZWVwY3IgMSAmJgorCWdpdCBjaGVja291dCAtYiB1bml4ZmlsZXMtY29uZi1rZWVwY3Itb3ZlcnJpZGUgaW5pdGlhbCAmJgorCWNwIC1mIGZpbGUxIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJsaW5lIGVuZGluZyB0byB1bml4IiBmaWxlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtayBpbml0aWFsLi5tYXN0ZXIgJiYKKwlnaXQgYW0gLWsgLTMgLS1uby1rZWVwLWNyIDAwMCoucGF0Y2ggJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAtdyBtYXN0ZXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjU0LWFtLWNvcnJ1cHQuc2ggYi90L3Q0MjU0LWFtLWNvcnJ1cHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGFmMDFjMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTQtYW0tY29ycnVwdC5zaApAQCAtMCwwICsxLDgyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFtIHdpdGggY29ycnVwdCBpbnB1dCcKKy4gLi90ZXN0LWxpYi5zaAorCittYWtlX21ib3hfd2l0aF9udWwgKCkgeworCXNwYWNlPScgJworCXFfbnVsX2luX3N1YmplY3Q9CisJcV9udWxfaW5fYm9keT0KKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCXN1YmplY3QpIHFfbnVsX2luX3N1YmplY3Q9Jz0wMCcgOzsKKwkJYm9keSkgICAgcV9udWxfaW5fYm9keT0nPTAwJyA7OworCQllc2FjICYmCisJCXNoaWZ0CisJZG9uZSAmJgorCWNhdCA8PC1FT0YKKwlGcm9tIGVjNzM2NDU0NGY2OTBjNTYwMzA0ZjVhNWRlOTQyOGVhM2I5NzhiMjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCisJRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwlEYXRlOiBTdW4sIDE5IEFwciAyMDIwIDEzOjQyOjA3ICswNzAwCisJU3ViamVjdDogW1BBVENIXSA9P0lTTy04ODU5LTE/cT89QzQ9Q0Ike3FfbnVsX2luX3N1YmplY3R9PUQxPUNGPUQ2Pz0KKwlNSU1FLVZlcnNpb246IDEuMAorCUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xCisJQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCisJYWJjJHtxX251bF9pbl9ib2R5fWRlZgorCS0tLQorCWRpZmYgLS1naXQgYS9hZmlsZSBiL2FmaWxlCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyCisJLS0kc3BhY2UKKwkyLjI2LjEKKwlFT0YKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJIyBOb3RlIHRoZSBtaXNzaW5nICIrKysiIGxpbmU6CisJY2F0ID5iYWQtcGF0Y2guZGlmZiA8PC1cRU9GICYmCisJRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CisJZGlmZiAtLWdpdCBhL2YgYi9mCisJaW5kZXggNzg5ODE5Mi4uNjE3ODA3OSAxMDA2NDQKKwktLS0gYS9mCisJQEAgLTEgKzEgQEAKKwktYQorCStiCisJRU9GCisKKwllY2hvIGEgPmYgJiYKKwlnaXQgYWRkIGYgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwKKycKKworIyBUaGlzIHVzZWQgdG8gZmFpbCBiZWZvcmUsIHRvbywgYnV0IHdpdGggYSBkaWZmZXJlbnQgZGlhZ25vc3RpYy4KKyMgICBmYXRhbDogdW5hYmxlIHRvIHdyaXRlIGZpbGUgJyhudWxsKScgbW9kZSAxMDA2NDQ6IEJhZCBhZGRyZXNzCisjIEFsc28sIGl0IGhhZCB0aGUgdW53YW50ZWQgc2lkZS1lZmZlY3Qgb2YgZGVsZXRpbmcgZi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyeSB0byBhcHBseSBjb3JydXB0ZWQgcGF0Y2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBhbSAtLWFib3J0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBhZHZpY2UuYW1Xb3JrRGlyPWZhbHNlIGFtIGJhZC1wYXRjaC5kaWZmIDI+YWN0dWFsICYmCisJZWNobyAiZXJyb3I6IGdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiAobGluZSA0KSIgPmV4cGVjdGVkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZiAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiTlVMIGluIGNvbW1pdCBtZXNzYWdlJ3MgYm9keSIgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGFtIC0tYWJvcnQiICYmCisJbWFrZV9tYm94X3dpdGhfbnVsIGJvZHkgPmJvZHkucGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gYm9keS5wYXRjaCAyPmVyciAmJgorCWdyZXAgImEgTlVMIGJ5dGUgaW4gY29tbWl0IGxvZyBtZXNzYWdlIG5vdCBhbGxvd2VkIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiTlVMIGluIGNvbW1pdCBtZXNzYWdlJ3MgaGVhZGVyIiAiCisJdGVzdF93aGVuX2ZpbmlzaGVkICdnaXQgYW0gLS1hYm9ydCcgJiYKKwltYWtlX21ib3hfd2l0aF9udWwgc3ViamVjdCA+c3ViamVjdC5wYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtYWlsaW5mbyBtc2cgcGF0Y2ggPHN1YmplY3QucGF0Y2ggMj5lcnIgJiYKKwlncmVwIFwiYSBOVUwgYnl0ZSBpbiAnU3ViamVjdCcgaXMgbm90IGFsbG93ZWRcIiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gc3ViamVjdC5wYXRjaCAyPmVyciAmJgorCWdyZXAgXCJhIE5VTCBieXRlIGluICdTdWJqZWN0JyBpcyBub3QgYWxsb3dlZFwiIGVycgorIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyNTUtYW0tc3VibW9kdWxlLnNoIGIvdC90NDI1NS1hbS1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGJhODE5NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTUtYW0tc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsOTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYW0gaGFuZGxpbmcgc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCisKK2FtICgpIHsKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgIi4uJDEiIHwgZ2l0IGFtIC0KK30KKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJhbSIKKworYW1fM3dheSAoKSB7CisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ICIuLiQxIiB8IGdpdCBhbSAtLTN3YXkgLQorfQorCitLTk9XTl9GQUlMVVJFX05PRkZfTUVSR0VfQVRURU1QVFNfVE9fTUVSR0VfUkVNT1ZFRF9TVUJNT0RVTEVfRklMRVM9MQordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJhbV8zd2F5IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkaWZmLnN1Ym1vZHVsZScgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCUlOSVRJQUw9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwlnaXQgaW5pdCBzdWJtb2R1bGUgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEID4uLi9pbml0aWFsLXN1Ym1vZHVsZQorCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuL3N1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gZmlyc3QgJiYKKworCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCXRlc3RfY29tbWl0IHRocmVlICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRCA+Li4vZmlyc3Qtc3VibW9kdWxlCisJKSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwlTRUNPTkQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQlnaXQgbXYgdHdvLnQgZm91ci50ICYmCisJCWdpdCBjb21taXQgLW0gInNlY29uZCBzdWJtb2R1bGUiICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRCA+Li4vc2Vjb25kLXN1Ym1vZHVsZQorCSkgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1uby1lZGl0ICYmCisJVEhJUkQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0CisnCisKK3J1bl90ZXN0KCkgeworCVNUQVJUX0NPTU1JVD0kMSAmJgorCUVYUEVDVD0kMiAmJgorCSMgQWJvcnQgYW55IG1lcmdlcyBpbiBwcm9ncmVzczogdGhlIHByZXZpb3VzCisJIyB0ZXN0IG1heSBoYXZlIGZhaWxlZCwgYW5kIHdlIHNob3VsZCBjbGVhbiB1cC4KKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGFtIC0tYWJvcnQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICRTVEFSVF9DT01NSVQgJiYKKwlybSAtZiAqLnBhdGNoICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAmJgorCWdpdCByZXNldCAtLWhhcmQgJFNUQVJUX0NPTU1JVF4gJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCBhbSAqLnBhdGNoICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgLUMgc3VibW9kdWxlIHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCAkRVhQRUNUIGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLnN1Ym1vZHVsZSB1bnNldCcgJworCXRlc3RfdW5jb25maWcgZGlmZi5zdWJtb2R1bGUgJiYKKwlydW5fdGVzdCAkU0VDT05EIGZpcnN0LXN1Ym1vZHVsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLnN1Ym1vZHVsZSB1bnNldCB3aXRoIGV4dHJhIGZpbGUnICcKKwl0ZXN0X3VuY29uZmlnIGRpZmYuc3VibW9kdWxlICYmCisJcnVuX3Rlc3QgJFRISVJEIHNlY29uZC1zdWJtb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5zdWJtb2R1bGU9bG9nJyAnCisJdGVzdF9jb25maWcgZGlmZi5zdWJtb2R1bGUgbG9nICYmCisJcnVuX3Rlc3QgJFNFQ09ORCBmaXJzdC1zdWJtb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5zdWJtb2R1bGU9bG9nIHdpdGggZXh0cmEgZmlsZScgJworCXRlc3RfY29uZmlnIGRpZmYuc3VibW9kdWxlIGxvZyAmJgorCXJ1bl90ZXN0ICRUSElSRCBzZWNvbmQtc3VibW9kdWxlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDI1Ni1hbS1mb3JtYXQtZmxvd2VkLnNoIGIvdC90NDI1Ni1hbS1mb3JtYXQtZmxvd2VkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIzNjljNGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjU2LWFtLWZvcm1hdC1mbG93ZWQuc2gKQEAgLTAsMCArMSwxOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZm9ybWF0PWZsb3dlZCBzdXBwb3J0IG9mIGdpdCBhbScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY3AgIiRURVNUX0RJUkVDVE9SWS90NDI1Ni8xL21haWxpbmZvLmMub3JpZyIgbWFpbGluZm8uYyAmJgorCWdpdCBhZGQgbWFpbGluZm8uYyAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGZvcm1hdD1mbG93ZWQnICcKKwlnaXQgYW0gPCIkVEVTVF9ESVJFQ1RPUlkvdDQyNTYvMS9wYXRjaCIgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJ3YXJuaW5nOiBQYXRjaCBzZW50IHdpdGggZm9ybWF0PWZsb3dlZCIgc3RkZXJyICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWS90NDI1Ni8xL21haWxpbmZvLmMiIG1haWxpbmZvLmMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjU2LzEvbWFpbGluZm8uYyBiL3QvdDQyNTYvMS9tYWlsaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOTVhZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjU2LzEvbWFpbGluZm8uYwpAQCAtMCwwICsxLDEyNDUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJtYWlsaW5mby5oIgorCitzdGF0aWMgdm9pZCBjbGVhbnVwX3NwYWNlKHN0cnVjdCBzdHJidWYgKnNiKQoreworCXNpemVfdCBwb3MsIGNudDsKKwlmb3IgKHBvcyA9IDA7IHBvcyA8IHNiLT5sZW47IHBvcysrKSB7CisJCWlmIChpc3NwYWNlKHNiLT5idWZbcG9zXSkpIHsKKwkJCXNiLT5idWZbcG9zXSA9ICcgJzsKKwkJCWZvciAoY250ID0gMDsgaXNzcGFjZShzYi0+YnVmW3BvcyArIGNudCArIDFdKTsgY250KyspOworCQkJc3RyYnVmX3JlbW92ZShzYiwgcG9zICsgMSwgY250KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZ2V0X3NhbmVfbmFtZShzdHJ1Y3Qgc3RyYnVmICpvdXQsIHN0cnVjdCBzdHJidWYgKm5hbWUsIHN0cnVjdCBzdHJidWYgKmVtYWlsKQoreworCXN0cnVjdCBzdHJidWYgKnNyYyA9IG5hbWU7CisJaWYgKG5hbWUtPmxlbiA8IDMgfHwgNjAgPCBuYW1lLT5sZW4gfHwgc3RyY2hyKG5hbWUtPmJ1ZiwgJ0AnKSB8fAorCQlzdHJjaHIobmFtZS0+YnVmLCAnPCcpIHx8IHN0cmNocihuYW1lLT5idWYsICc+JykpCisJCXNyYyA9IGVtYWlsOworCWVsc2UgaWYgKG5hbWUgPT0gb3V0KQorCQlyZXR1cm47CisJc3RyYnVmX3Jlc2V0KG91dCk7CisJc3RyYnVmX2FkZGJ1ZihvdXQsIHNyYyk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2JvZ3VzX2Zyb20oc3RydWN0IG1haWxpbmZvICptaSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwkvKiBKb2huIERvZSA8am9obmRvZT4gKi8KKworCWNoYXIgKmJyYSwgKmtldDsKKwkvKiBUaGlzIGlzIGZhbGxiYWNrLCBzbyBkbyBub3QgYm90aGVyIGlmIHdlIGFscmVhZHkgaGF2ZSBhbgorCSAqIGUtbWFpbCBhZGRyZXNzLgorCSAqLworCWlmIChtaS0+ZW1haWwubGVuKQorCQlyZXR1cm47CisKKwlicmEgPSBzdHJjaHIobGluZS0+YnVmLCAnPCcpOworCWlmICghYnJhKQorCQlyZXR1cm47CisJa2V0ID0gc3RyY2hyKGJyYSwgJz4nKTsKKwlpZiAoIWtldCkKKwkJcmV0dXJuOworCisJc3RyYnVmX3Jlc2V0KCZtaS0+ZW1haWwpOworCXN0cmJ1Zl9hZGQoJm1pLT5lbWFpbCwgYnJhICsgMSwga2V0IC0gYnJhIC0gMSk7CisKKwlzdHJidWZfcmVzZXQoJm1pLT5uYW1lKTsKKwlzdHJidWZfYWRkKCZtaS0+bmFtZSwgbGluZS0+YnVmLCBicmEgLSBsaW5lLT5idWYpOworCXN0cmJ1Zl90cmltKCZtaS0+bmFtZSk7CisJZ2V0X3NhbmVfbmFtZSgmbWktPm5hbWUsICZtaS0+bmFtZSwgJm1pLT5lbWFpbCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp1bnF1b3RlX2NvbW1lbnQoc3RydWN0IHN0cmJ1ZiAqb3V0YnVmLCBjb25zdCBjaGFyICppbikKK3sKKwlpbnQgYzsKKwlpbnQgdGFrZV9uZXh0X2xpdGVyYWxseSA9IDA7CisKKwlzdHJidWZfYWRkY2gob3V0YnVmLCAnKCcpOworCisJd2hpbGUgKChjID0gKmluKyspICE9IDApIHsKKwkJaWYgKHRha2VfbmV4dF9saXRlcmFsbHkgPT0gMSkgeworCQkJdGFrZV9uZXh0X2xpdGVyYWxseSA9IDA7CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgJ1xcJzoKKwkJCQl0YWtlX25leHRfbGl0ZXJhbGx5ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJygnOgorCQkJCWluID0gdW5xdW90ZV9jb21tZW50KG91dGJ1ZiwgaW4pOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnKSc6CisJCQkJc3RyYnVmX2FkZGNoKG91dGJ1ZiwgJyknKTsKKwkJCQlyZXR1cm4gaW47CisJCQl9CisJCX0KKworCQlzdHJidWZfYWRkY2gob3V0YnVmLCBjKTsKKwl9CisKKwlyZXR1cm4gaW47Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp1bnF1b3RlX3F1b3RlZF9zdHJpbmcoc3RydWN0IHN0cmJ1ZiAqb3V0YnVmLCBjb25zdCBjaGFyICppbikKK3sKKwlpbnQgYzsKKwlpbnQgdGFrZV9uZXh0X2xpdGVyYWxseSA9IDA7CisKKwl3aGlsZSAoKGMgPSAqaW4rKykgIT0gMCkgeworCQlpZiAodGFrZV9uZXh0X2xpdGVyYWxseSA9PSAxKSB7CisJCQl0YWtlX25leHRfbGl0ZXJhbGx5ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAnXFwnOgorCQkJCXRha2VfbmV4dF9saXRlcmFsbHkgPSAxOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnIic6CisJCQkJcmV0dXJuIGluOworCQkJfQorCQl9CisKKwkJc3RyYnVmX2FkZGNoKG91dGJ1ZiwgYyk7CisJfQorCisJcmV0dXJuIGluOworfQorCitzdGF0aWMgdm9pZCB1bnF1b3RlX3F1b3RlZF9wYWlyKHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiBvdXRidWY7CisJY29uc3QgY2hhciAqaW4gPSBsaW5lLT5idWY7CisJaW50IGM7CisKKwlzdHJidWZfaW5pdCgmb3V0YnVmLCBsaW5lLT5sZW4pOworCisJd2hpbGUgKChjID0gKmluKyspICE9IDApIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJyInOgorCQkJaW4gPSB1bnF1b3RlX3F1b3RlZF9zdHJpbmcoJm91dGJ1ZiwgaW4pOworCQkJY29udGludWU7CisJCWNhc2UgJygnOgorCQkJaW4gPSB1bnF1b3RlX2NvbW1lbnQoJm91dGJ1ZiwgaW4pOworCQkJY29udGludWU7CisJCX0KKworCQlzdHJidWZfYWRkY2goJm91dGJ1ZiwgYyk7CisJfQorCisJc3RyYnVmX3N3YXAoJm91dGJ1ZiwgbGluZSk7CisJc3RyYnVmX3JlbGVhc2UoJm91dGJ1Zik7CisKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2Zyb20oc3RydWN0IG1haWxpbmZvICptaSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqZnJvbSkKK3sKKwljaGFyICphdDsKKwlzaXplX3QgZWw7CisJc3RydWN0IHN0cmJ1ZiBmOworCisJc3RyYnVmX2luaXQoJmYsIGZyb20tPmxlbik7CisJc3RyYnVmX2FkZGJ1ZigmZiwgZnJvbSk7CisKKwl1bnF1b3RlX3F1b3RlZF9wYWlyKCZmKTsKKworCWF0ID0gc3RyY2hyKGYuYnVmLCAnQCcpOworCWlmICghYXQpIHsKKwkJcGFyc2VfYm9ndXNfZnJvbShtaSwgZnJvbSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogSWYgd2UgYWxyZWFkeSBoYXZlIG9uZSBlbWFpbCwgZG9uJ3QgdGFrZSBhbnkgY29uZnVzaW5nIGxpbmVzCisJICovCisJaWYgKG1pLT5lbWFpbC5sZW4gJiYgc3RyY2hyKGF0ICsgMSwgJ0AnKSkKKwkJZ290byBvdXQ7CisKKwkvKiBQaWNrIHVwIHRoZSBzdHJpbmcgYXJvdW5kICdAJywgcG9zc2libHkgZGVsaW1pdGVkIHdpdGggPD4KKwkgKiBwYWlyOyB0aGF0IGlzIHRoZSBlbWFpbCBwYXJ0LgorCSAqLworCXdoaWxlIChhdCA+IGYuYnVmKSB7CisJCWNoYXIgYyA9IGF0Wy0xXTsKKwkJaWYgKGlzc3BhY2UoYykpCisJCQlicmVhazsKKwkJaWYgKGMgPT0gJzwnKSB7CisJCQlhdFstMV0gPSAnICc7CisJCQlicmVhazsKKwkJfQorCQlhdC0tOworCX0KKwllbCA9IHN0cmNzcG4oYXQsICIgXG5cdFxyXHZcZj4iKTsKKwlzdHJidWZfcmVzZXQoJm1pLT5lbWFpbCk7CisJc3RyYnVmX2FkZCgmbWktPmVtYWlsLCBhdCwgZWwpOworCXN0cmJ1Zl9yZW1vdmUoJmYsIGF0IC0gZi5idWYsIGVsICsgKGF0W2VsXSA/IDEgOiAwKSk7CisKKwkvKiBUaGUgcmVtYWluZGVyIGlzIG5hbWUuICBJdCBjb3VsZCBiZQorCSAqCisJICogLSAiSm9obiBEb2UgPGpvaG4uZG9lQHh6PiIJCQkoYSksIG9yCisJICogLSAiam9obi5kb2VAeHogKEpvaG4gRG9lKSIJCQkoYiksIG9yCisJICogLSAiSm9obiAoenp6KSBEb2UgPGpvaG4uZG9lQHh6PiAoQ29tbWVudCkiCShjKQorCSAqCisJICogYnV0IHdlIGhhdmUgcmVtb3ZlZCB0aGUgZW1haWwgcGFydCwgc28KKwkgKgorCSAqIC0gcmVtb3ZlIGV4dHJhIHNwYWNlcyB3aGljaCBjb3VsZCBzdGF5IGFmdGVyIGVtYWlsIChjYXNlICdjJyksIGFuZAorCSAqIC0gdHJpbSBmcm9tIGJvdGggZW5kcywgcG9zc2libHkgcmVtb3ZpbmcgdGhlICgpIHBhaXIgYXQgdGhlIGVuZAorCSAqICAgKGNhc2VzICdhJyBhbmQgJ2InKS4KKwkgKi8KKwljbGVhbnVwX3NwYWNlKCZmKTsKKwlzdHJidWZfdHJpbSgmZik7CisJaWYgKGYuYnVmWzBdID09ICcoJyAmJiBmLmxlbiAmJiBmLmJ1ZltmLmxlbiAtIDFdID09ICcpJykgeworCQlzdHJidWZfcmVtb3ZlKCZmLCAwLCAxKTsKKwkJc3RyYnVmX3NldGxlbigmZiwgZi5sZW4gLSAxKTsKKwl9CisKKwlnZXRfc2FuZV9uYW1lKCZtaS0+bmFtZSwgJmYsICZtaS0+ZW1haWwpOworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZmKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2hlYWRlcihzdHJ1Y3Qgc3RyYnVmICoqb3V0LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCWlmICghKm91dCkgeworCQkqb3V0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0cmJ1ZikpOworCQlzdHJidWZfaW5pdCgqb3V0LCBsaW5lLT5sZW4pOworCX0gZWxzZQorCQlzdHJidWZfcmVzZXQoKm91dCk7CisKKwlzdHJidWZfYWRkYnVmKCpvdXQsIGxpbmUpOworfQorCisvKiBOT1RFIE5PVEUgTk9URS4gIFdlIGRvIG5vdCBjbGFpbSB3ZSBkbyBmdWxsIE1JTUUuICBXZSBqdXN0IGF0dGVtcHQKKyAqIHRvIGhhdmUgZW5vdWdoIGhldXJpc3RpY3MgdG8gZ3JvayBNSU1FIGVuY29kZWQgcGF0Y2hlcyBvZnRlbiBmb3VuZAorICogb24gb3VyIG1haWxpbmcgbGlzdHMuICBGb3IgZXhhbXBsZSwgd2UgZG8gbm90IGV2ZW4gdHJlYXQgaGVhZGVyIGxpbmVzCisgKiBjYXNlIGluc2Vuc2l0aXZlbHkuCisgKi8KKworc3RhdGljIGludCBzbHVycF9hdHRyKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKmF0dHIpCit7CisJY29uc3QgY2hhciAqZW5kcywgKmFwID0gc3RyY2FzZXN0cihsaW5lLCBuYW1lKTsKKwlzaXplX3Qgc3o7CisKKwlzdHJidWZfc2V0bGVuKGF0dHIsIDApOworCWlmICghYXApCisJCXJldHVybiAwOworCWFwICs9IHN0cmxlbihuYW1lKTsKKwlpZiAoKmFwID09ICciJykgeworCQlhcCsrOworCQllbmRzID0gIlwiIjsKKwl9CisJZWxzZQorCQllbmRzID0gIjsgXHQiOworCXN6ID0gc3RyY3NwbihhcCwgZW5kcyk7CisJc3RyYnVmX2FkZChhdHRyLCBhcCwgc3opOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGhhc19hdHRyX3ZhbHVlKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmMgPSBzbHVycF9hdHRyKGxpbmUsIG5hbWUsICZzYikgJiYgIXN0cmNhc2VjbXAoc2IuYnVmLCB2YWx1ZSk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9jb250ZW50X3R5cGUoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpib3VuZGFyeSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJidWYpKTsKKwlzdHJidWZfaW5pdChib3VuZGFyeSwgbGluZS0+bGVuKTsKKworCW1pLT5mb3JtYXRfZmxvd2VkID0gaGFzX2F0dHJfdmFsdWUobGluZS0+YnVmLCAiZm9ybWF0PSIsICJmbG93ZWQiKTsKKwltaS0+ZGVsc3AgPSBoYXNfYXR0cl92YWx1ZShsaW5lLT5idWYsICJkZWxzcD0iLCAieWVzIik7CisKKwlpZiAoc2x1cnBfYXR0cihsaW5lLT5idWYsICJib3VuZGFyeT0iLCBib3VuZGFyeSkpIHsKKwkJc3RyYnVmX2luc2VydChib3VuZGFyeSwgMCwgIi0tIiwgMik7CisJCWlmICgrK21pLT5jb250ZW50X3RvcCA+PSAmbWktPmNvbnRlbnRbTUFYX0JPVU5EQVJJRVNdKSB7CisJCQllcnJvcigiVG9vIG1hbnkgYm91bmRhcmllcyB0byBoYW5kbGUiKTsKKwkJCW1pLT5pbnB1dF9lcnJvciA9IC0xOworCQkJbWktPmNvbnRlbnRfdG9wID0gJm1pLT5jb250ZW50W01BWF9CT1VOREFSSUVTXSAtIDE7CisJCQlyZXR1cm47CisJCX0KKwkJKihtaS0+Y29udGVudF90b3ApID0gYm91bmRhcnk7CisJCWJvdW5kYXJ5ID0gTlVMTDsKKwl9CisJc2x1cnBfYXR0cihsaW5lLT5idWYsICJjaGFyc2V0PSIsICZtaS0+Y2hhcnNldCk7CisKKwlpZiAoYm91bmRhcnkpIHsKKwkJc3RyYnVmX3JlbGVhc2UoYm91bmRhcnkpOworCQlmcmVlKGJvdW5kYXJ5KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9jb250ZW50X3RyYW5zZmVyX2VuY29kaW5nKHN0cnVjdCBtYWlsaW5mbyAqbWksCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlpZiAoc3RyY2FzZXN0cihsaW5lLT5idWYsICJiYXNlNjQiKSkKKwkJbWktPnRyYW5zZmVyX2VuY29kaW5nID0gVEVfQkFTRTY0OworCWVsc2UgaWYgKHN0cmNhc2VzdHIobGluZS0+YnVmLCAicXVvdGVkLXByaW50YWJsZSIpKQorCQltaS0+dHJhbnNmZXJfZW5jb2RpbmcgPSBURV9RUDsKKwllbHNlCisJCW1pLT50cmFuc2Zlcl9lbmNvZGluZyA9IFRFX0RPTlRDQVJFOworfQorCitzdGF0aWMgaW50IGlzX211bHRpcGFydF9ib3VuZGFyeShzdHJ1Y3QgbWFpbGluZm8gKm1pLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN0cnVjdCBzdHJidWYgKmNvbnRlbnRfdG9wID0gKihtaS0+Y29udGVudF90b3ApOworCisJcmV0dXJuICgoY29udGVudF90b3AtPmxlbiA8PSBsaW5lLT5sZW4pICYmCisJCSFtZW1jbXAobGluZS0+YnVmLCBjb250ZW50X3RvcC0+YnVmLCBjb250ZW50X3RvcC0+bGVuKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfc3ViamVjdChzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpzdWJqZWN0KQoreworCXNpemVfdCBhdCA9IDA7CisKKwl3aGlsZSAoYXQgPCBzdWJqZWN0LT5sZW4pIHsKKwkJY2hhciAqcG9zOworCQlzaXplX3QgcmVtb3ZlOworCisJCXN3aXRjaCAoc3ViamVjdC0+YnVmW2F0XSkgeworCQljYXNlICdyJzogY2FzZSAnUic6CisJCQlpZiAoc3ViamVjdC0+bGVuIDw9IGF0ICsgMykKKwkJCQlicmVhazsKKwkJCWlmICgoc3ViamVjdC0+YnVmW2F0ICsgMV0gPT0gJ2UnIHx8CisJCQkgICAgIHN1YmplY3QtPmJ1ZlthdCArIDFdID09ICdFJykgJiYKKwkJCSAgICBzdWJqZWN0LT5idWZbYXQgKyAyXSA9PSAnOicpIHsKKwkJCQlzdHJidWZfcmVtb3ZlKHN1YmplY3QsIGF0LCAzKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWF0Kys7CisJCQlicmVhazsKKwkJY2FzZSAnICc6IGNhc2UgJ1x0JzogY2FzZSAnOic6CisJCQlzdHJidWZfcmVtb3ZlKHN1YmplY3QsIGF0LCAxKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdbJzoKKwkJCXBvcyA9IHN0cmNocihzdWJqZWN0LT5idWYgKyBhdCwgJ10nKTsKKwkJCWlmICghcG9zKQorCQkJCWJyZWFrOworCQkJcmVtb3ZlID0gcG9zIC0gc3ViamVjdC0+YnVmICsgYXQgKyAxOworCQkJaWYgKCFtaS0+a2VlcF9ub25fcGF0Y2hfYnJhY2tldHNfaW5fc3ViamVjdCB8fAorCQkJICAgICg3IDw9IHJlbW92ZSAmJgorCQkJICAgICBtZW1tZW0oc3ViamVjdC0+YnVmICsgYXQsIHJlbW92ZSwgIlBBVENIIiwgNSkpKQorCQkJCXN0cmJ1Zl9yZW1vdmUoc3ViamVjdCwgYXQsIHJlbW92ZSk7CisJCQllbHNlIHsKKwkJCQlhdCArPSByZW1vdmU7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgaW5wdXQgaGFkIGEgc3BhY2UgYWZ0ZXIgdGhlIF0sIGtlZXAKKwkJCQkgKiBpdC4gIFdlIGRvbid0IGJvdGhlciB3aXRoIGZpbmRpbmcgdGhlIGVuZCBvZgorCQkJCSAqIHRoZSBzcGFjZSwgc2luY2Ugd2UgbGF0ZXIgbm9ybWFsaXplIGl0CisJCQkJICogYW55d2F5LgorCQkJCSAqLworCQkJCWlmIChpc3NwYWNlKHN1YmplY3QtPmJ1ZlthdF0pKQorCQkJCQlhdCArPSAxOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJYnJlYWs7CisJfQorCXN0cmJ1Zl90cmltKHN1YmplY3QpOworfQorCisjZGVmaW5lIE1BWF9IRFJfUEFSU0VEIDEwCitzdGF0aWMgY29uc3QgY2hhciAqaGVhZGVyW01BWF9IRFJfUEFSU0VEXSA9IHsKKwkiRnJvbSIsIlN1YmplY3QiLCJEYXRlIiwKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGNtcF9oZWFkZXIoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSwgY29uc3QgY2hhciAqaGRyKQoreworCWludCBsZW4gPSBzdHJsZW4oaGRyKTsKKwlyZXR1cm4gIXN0cm5jYXNlY21wKGxpbmUtPmJ1ZiwgaGRyLCBsZW4pICYmIGxpbmUtPmxlbiA+IGxlbiAmJgorCQkJbGluZS0+YnVmW2xlbl0gPT0gJzonICYmIGlzc3BhY2UobGluZS0+YnVmW2xlbiArIDFdKTsKK30KKworc3RhdGljIGludCBpc19mb3JtYXRfcGF0Y2hfc2VwYXJhdG9yKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgU0FNUExFW10gPQorCQkiRnJvbSBlNjgwN2YzZWZjYTI4YjMwZGVjZmVjYjE3MzJhNTZjN2RiMTEzN2VlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMVxuIjsKKwljb25zdCBjaGFyICpjcDsKKworCWlmIChsZW4gIT0gc3RybGVuKFNBTVBMRSkpCisJCXJldHVybiAwOworCWlmICghc2tpcF9wcmVmaXgobGluZSwgIkZyb20gIiwgJmNwKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN0cnNwbihjcCwgIjAxMjM0NTY3ODlhYmNkZWYiKSAhPSA0MCkKKwkJcmV0dXJuIDA7CisJY3AgKz0gNDA7CisJcmV0dXJuICFtZW1jbXAoU0FNUExFICsgKGNwIC0gbGluZSksIGNwLCBzdHJsZW4oU0FNUExFKSAtIChjcCAtIGxpbmUpKTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJidWYgKmRlY29kZV9xX3NlZ21lbnQoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqcV9zZWcsIGludCByZmMyMDQ3KQoreworCWNvbnN0IGNoYXIgKmluID0gcV9zZWctPmJ1ZjsKKwlpbnQgYzsKKwlzdHJ1Y3Qgc3RyYnVmICpvdXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSk7CisJc3RyYnVmX2luaXQob3V0LCBxX3NlZy0+bGVuKTsKKworCXdoaWxlICgoYyA9ICppbisrKSAhPSAwKSB7CisJCWlmIChjID09ICc9JykgeworCQkJaW50IGNoLCBkID0gKmluOworCQkJaWYgKGQgPT0gJ1xuJyB8fCAhZCkKKwkJCQlicmVhazsgLyogZHJvcCB0cmFpbGluZyBuZXdsaW5lICovCisJCQljaCA9IGhleDJjaHIoaW4pOworCQkJaWYgKGNoID49IDApIHsKKwkJCQlzdHJidWZfYWRkY2gob3V0LCBjaCk7CisJCQkJaW4gKz0gMjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIGdhcmJhZ2UgLS0gZmFsbCB0aHJvdWdoICovCisJCX0KKwkJaWYgKHJmYzIwNDcgJiYgYyA9PSAnXycpIC8qIHJmYzIwNDcgNC4yICgyKSAqLworCQkJYyA9IDB4MjA7CisJCXN0cmJ1Zl9hZGRjaChvdXQsIGMpOworCX0KKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiAqZGVjb2RlX2Jfc2VnbWVudChjb25zdCBzdHJ1Y3Qgc3RyYnVmICpiX3NlZykKK3sKKwkvKiBEZWNvZGUgaW4uLmVwLCBwb3NzaWJseSBpbi1wbGFjZSB0byBvdCAqLworCWludCBjLCBwb3MgPSAwLCBhY2MgPSAwOworCWNvbnN0IGNoYXIgKmluID0gYl9zZWctPmJ1ZjsKKwlzdHJ1Y3Qgc3RyYnVmICpvdXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSk7CisJc3RyYnVmX2luaXQob3V0LCBiX3NlZy0+bGVuKTsKKworCXdoaWxlICgoYyA9ICppbisrKSAhPSAwKSB7CisJCWlmIChjID09ICcrJykKKwkJCWMgPSA2MjsKKwkJZWxzZSBpZiAoYyA9PSAnLycpCisJCQljID0gNjM7CisJCWVsc2UgaWYgKCdBJyA8PSBjICYmIGMgPD0gJ1onKQorCQkJYyAtPSAnQSc7CisJCWVsc2UgaWYgKCdhJyA8PSBjICYmIGMgPD0gJ3onKQorCQkJYyAtPSAnYScgLSAyNjsKKwkJZWxzZSBpZiAoJzAnIDw9IGMgJiYgYyA8PSAnOScpCisJCQljIC09ICcwJyAtIDUyOworCQllbHNlCisJCQljb250aW51ZTsgLyogZ2FyYmFnZSAqLworCQlzd2l0Y2ggKHBvcysrKSB7CisJCWNhc2UgMDoKKwkJCWFjYyA9IChjIDw8IDIpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXN0cmJ1Zl9hZGRjaChvdXQsIChhY2MgfCAoYyA+PiA0KSkpOworCQkJYWNjID0gKGMgJiAxNSkgPDwgNDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlzdHJidWZfYWRkY2gob3V0LCAoYWNjIHwgKGMgPj4gMikpKTsKKwkJCWFjYyA9IChjICYgMykgPDwgNjsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlzdHJidWZfYWRkY2gob3V0LCAoYWNjIHwgYykpOworCQkJYWNjID0gcG9zID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgY29udmVydF90b191dGY4KHN0cnVjdCBtYWlsaW5mbyAqbWksCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICpsaW5lLCBjb25zdCBjaGFyICpjaGFyc2V0KQoreworCWNoYXIgKm91dDsKKworCWlmICghbWktPm1ldGFpbmZvX2NoYXJzZXQgfHwgIWNoYXJzZXQgfHwgISpjaGFyc2V0KQorCQlyZXR1cm4gMDsKKworCWlmIChzYW1lX2VuY29kaW5nKG1pLT5tZXRhaW5mb19jaGFyc2V0LCBjaGFyc2V0KSkKKwkJcmV0dXJuIDA7CisJb3V0ID0gcmVlbmNvZGVfc3RyaW5nKGxpbmUtPmJ1ZiwgbWktPm1ldGFpbmZvX2NoYXJzZXQsIGNoYXJzZXQpOworCWlmICghb3V0KSB7CisJCW1pLT5pbnB1dF9lcnJvciA9IC0xOworCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBjb252ZXJ0IGZyb20gJXMgdG8gJXMiLAorCQkJICAgICBjaGFyc2V0LCBtaS0+bWV0YWluZm9fY2hhcnNldCk7CisJfQorCXN0cmJ1Zl9hdHRhY2gobGluZSwgb3V0LCBzdHJsZW4ob3V0KSwgc3RybGVuKG91dCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfaGVhZGVyKHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKml0KQoreworCWNoYXIgKmluLCAqZXAsICpjcDsKKwlzdHJ1Y3Qgc3RyYnVmIG91dGJ1ZiA9IFNUUkJVRl9JTklULCAqZGVjOworCXN0cnVjdCBzdHJidWYgY2hhcnNldF9xID0gU1RSQlVGX0lOSVQsIHBpZWNlYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGZvdW5kX2Vycm9yID0gMTsgLyogcGVzc2ltaXNtICovCisKKwlpbiA9IGl0LT5idWY7CisJd2hpbGUgKGluIC0gaXQtPmJ1ZiA8PSBpdC0+bGVuICYmIChlcCA9IHN0cnN0cihpbiwgIj0/IikpICE9IE5VTEwpIHsKKwkJaW50IGVuY29kaW5nOworCQlzdHJidWZfcmVzZXQoJmNoYXJzZXRfcSk7CisJCXN0cmJ1Zl9yZXNldCgmcGllY2VidWYpOworCisJCWlmIChpbiAhPSBlcCkgeworCQkJLyoKKwkJCSAqIFdlIGFyZSBhYm91dCB0byBwcm9jZXNzIGFuIGVuY29kZWQtd29yZAorCQkJICogdGhhdCBiZWdpbnMgYXQgZXAsIGJ1dCB0aGVyZSBpcyBzb21ldGhpbmcKKwkJCSAqIGJlZm9yZSB0aGUgZW5jb2RlZCB3b3JkLgorCQkJICovCisJCQljaGFyICpzY2FuOworCQkJZm9yIChzY2FuID0gaW47IHNjYW4gPCBlcDsgc2NhbisrKQorCQkJCWlmICghaXNzcGFjZSgqc2NhbikpCisJCQkJCWJyZWFrOworCisJCQlpZiAoc2NhbiAhPSBlcCB8fCBpbiA9PSBpdC0+YnVmKSB7CisJCQkJLyoKKwkJCQkgKiBXZSBzaG91bGQgbm90IGxvc2UgdGhhdCAic29tZXRoaW5nIiwKKwkJCQkgKiB1bmxlc3Mgd2UgaGF2ZSBqdXN0IHByb2Nlc3NlZCBhbgorCQkJCSAqIGVuY29kZWQtd29yZCwgYW5kIHRoZXJlIGlzIG9ubHkgTFdTCisJCQkJICogYmVmb3JlIHRoZSBvbmUgd2UgYXJlIGFib3V0IHRvIHByb2Nlc3MuCisJCQkJICovCisJCQkJc3RyYnVmX2FkZCgmb3V0YnVmLCBpbiwgZXAgLSBpbik7CisJCQl9CisJCX0KKwkJLyogRS5nLgorCQkgKiBlcCA6ICI9P2lzby0yMDIyLWpwP0I/R3lSLi4uPz0gZm9vIgorCQkgKiBlcCA6ICI9P0lTTy04ODU5LTE/UT9Gb289RkNiYXI/PSBiYXoiCisJCSAqLworCQllcCArPSAyOworCisJCWlmIChlcCAtIGl0LT5idWYgPj0gaXQtPmxlbiB8fCAhKGNwID0gc3RyY2hyKGVwLCAnPycpKSkKKwkJCWdvdG8gcmVsZWFzZV9yZXR1cm47CisKKwkJaWYgKGNwICsgMyAtIGl0LT5idWYgPiBpdC0+bGVuKQorCQkJZ290byByZWxlYXNlX3JldHVybjsKKwkJc3RyYnVmX2FkZCgmY2hhcnNldF9xLCBlcCwgY3AgLSBlcCk7CisKKwkJZW5jb2RpbmcgPSBjcFsxXTsKKwkJaWYgKCFlbmNvZGluZyB8fCBjcFsyXSAhPSAnPycpCisJCQlnb3RvIHJlbGVhc2VfcmV0dXJuOworCQllcCA9IHN0cnN0cihjcCArIDMsICI/PSIpOworCQlpZiAoIWVwKQorCQkJZ290byByZWxlYXNlX3JldHVybjsKKwkJc3RyYnVmX2FkZCgmcGllY2VidWYsIGNwICsgMywgZXAgLSBjcCAtIDMpOworCQlzd2l0Y2ggKHRvbG93ZXIoZW5jb2RpbmcpKSB7CisJCWRlZmF1bHQ6CisJCQlnb3RvIHJlbGVhc2VfcmV0dXJuOworCQljYXNlICdiJzoKKwkJCWRlYyA9IGRlY29kZV9iX3NlZ21lbnQoJnBpZWNlYnVmKTsKKwkJCWJyZWFrOworCQljYXNlICdxJzoKKwkJCWRlYyA9IGRlY29kZV9xX3NlZ21lbnQoJnBpZWNlYnVmLCAxKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb252ZXJ0X3RvX3V0ZjgobWksIGRlYywgY2hhcnNldF9xLmJ1ZikpCisJCQlnb3RvIHJlbGVhc2VfcmV0dXJuOworCisJCXN0cmJ1Zl9hZGRidWYoJm91dGJ1ZiwgZGVjKTsKKwkJc3RyYnVmX3JlbGVhc2UoZGVjKTsKKwkJZnJlZShkZWMpOworCQlpbiA9IGVwICsgMjsKKwl9CisJc3RyYnVmX2FkZHN0cigmb3V0YnVmLCBpbik7CisJc3RyYnVmX3Jlc2V0KGl0KTsKKwlzdHJidWZfYWRkYnVmKGl0LCAmb3V0YnVmKTsKKwlmb3VuZF9lcnJvciA9IDA7CityZWxlYXNlX3JldHVybjoKKwlzdHJidWZfcmVsZWFzZSgmb3V0YnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmY2hhcnNldF9xKTsKKwlzdHJidWZfcmVsZWFzZSgmcGllY2VidWYpOworCisJaWYgKGZvdW5kX2Vycm9yKQorCQltaS0+aW5wdXRfZXJyb3IgPSAtMTsKK30KKworc3RhdGljIGludCBjaGVja19oZWFkZXIoc3RydWN0IG1haWxpbmZvICptaSwKKwkJCWNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUsCisJCQlzdHJ1Y3Qgc3RyYnVmICpoZHJfZGF0YVtdLCBpbnQgb3ZlcndyaXRlKQoreworCWludCBpLCByZXQgPSAwLCBsZW47CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJLyogc2VhcmNoIGZvciB0aGUgaW50ZXJlc3RpbmcgcGFydHMgKi8KKwlmb3IgKGkgPSAwOyBoZWFkZXJbaV07IGkrKykgeworCQlpbnQgbGVuID0gc3RybGVuKGhlYWRlcltpXSk7CisJCWlmICgoIWhkcl9kYXRhW2ldIHx8IG92ZXJ3cml0ZSkgJiYgY21wX2hlYWRlcihsaW5lLCBoZWFkZXJbaV0pKSB7CisJCQkvKiBVbndyYXAgaW5saW5lIEIgYW5kIFEgZW5jb2RpbmcsIGFuZCBvcHRpb25hbGx5CisJCQkgKiBub3JtYWxpemUgdGhlIG1ldGEgaW5mb3JtYXRpb24gdG8gdXRmOC4KKwkJCSAqLworCQkJc3RyYnVmX2FkZCgmc2IsIGxpbmUtPmJ1ZiArIGxlbiArIDIsIGxpbmUtPmxlbiAtIGxlbiAtIDIpOworCQkJZGVjb2RlX2hlYWRlcihtaSwgJnNiKTsKKwkJCWhhbmRsZV9oZWFkZXIoJmhkcl9kYXRhW2ldLCAmc2IpOworCQkJcmV0ID0gMTsKKwkJCWdvdG8gY2hlY2tfaGVhZGVyX291dDsKKwkJfQorCX0KKworCS8qIENvbnRlbnQgc3R1ZmYgKi8KKwlpZiAoY21wX2hlYWRlcihsaW5lLCAiQ29udGVudC1UeXBlIikpIHsKKwkJbGVuID0gc3RybGVuKCJDb250ZW50LVR5cGU6ICIpOworCQlzdHJidWZfYWRkKCZzYiwgbGluZS0+YnVmICsgbGVuLCBsaW5lLT5sZW4gLSBsZW4pOworCQlkZWNvZGVfaGVhZGVyKG1pLCAmc2IpOworCQlzdHJidWZfaW5zZXJ0KCZzYiwgMCwgIkNvbnRlbnQtVHlwZTogIiwgbGVuKTsKKwkJaGFuZGxlX2NvbnRlbnRfdHlwZShtaSwgJnNiKTsKKwkJcmV0ID0gMTsKKwkJZ290byBjaGVja19oZWFkZXJfb3V0OworCX0KKwlpZiAoY21wX2hlYWRlcihsaW5lLCAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyIpKSB7CisJCWxlbiA9IHN0cmxlbigiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogIik7CisJCXN0cmJ1Zl9hZGQoJnNiLCBsaW5lLT5idWYgKyBsZW4sIGxpbmUtPmxlbiAtIGxlbik7CisJCWRlY29kZV9oZWFkZXIobWksICZzYik7CisJCWhhbmRsZV9jb250ZW50X3RyYW5zZmVyX2VuY29kaW5nKG1pLCAmc2IpOworCQlyZXQgPSAxOworCQlnb3RvIGNoZWNrX2hlYWRlcl9vdXQ7CisJfQorCWlmIChjbXBfaGVhZGVyKGxpbmUsICJNZXNzYWdlLUlkIikpIHsKKwkJbGVuID0gc3RybGVuKCJNZXNzYWdlLUlkOiAiKTsKKwkJc3RyYnVmX2FkZCgmc2IsIGxpbmUtPmJ1ZiArIGxlbiwgbGluZS0+bGVuIC0gbGVuKTsKKwkJZGVjb2RlX2hlYWRlcihtaSwgJnNiKTsKKwkJaWYgKG1pLT5hZGRfbWVzc2FnZV9pZCkKKwkJCW1pLT5tZXNzYWdlX2lkID0gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCQlyZXQgPSAxOworCQlnb3RvIGNoZWNrX2hlYWRlcl9vdXQ7CisJfQorCitjaGVja19oZWFkZXJfb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJldHVybnMgMSBpZiB0aGUgZ2l2ZW4gbGluZSBvciBhbnkgbGluZSBiZWdpbm5pbmcgd2l0aCB0aGUgZ2l2ZW4gbGluZSBpcyBhbgorICogaW4tYm9keSBoZWFkZXIgKHRoYXQgaXMsIGNoZWNrX2hlYWRlciB3aWxsIHN1Y2NlZWQgd2hlbiBwYXNzZWQKKyAqIG1pLT5zX2hkcl9kYXRhKS4KKyAqLworc3RhdGljIGludCBpc19pbmJvZHlfaGVhZGVyKGNvbnN0IHN0cnVjdCBtYWlsaW5mbyAqbWksCisJCQkgICAgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBoZWFkZXJbaV07IGkrKykKKwkJaWYgKCFtaS0+c19oZHJfZGF0YVtpXSAmJiBjbXBfaGVhZGVyKGxpbmUsIGhlYWRlcltpXSkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVjb2RlX3RyYW5zZmVyX2VuY29kaW5nKHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiAqcmV0OworCisJc3dpdGNoIChtaS0+dHJhbnNmZXJfZW5jb2RpbmcpIHsKKwljYXNlIFRFX1FQOgorCQlyZXQgPSBkZWNvZGVfcV9zZWdtZW50KGxpbmUsIDApOworCQlicmVhazsKKwljYXNlIFRFX0JBU0U2NDoKKwkJcmV0ID0gZGVjb2RlX2Jfc2VnbWVudChsaW5lKTsKKwkJYnJlYWs7CisJY2FzZSBURV9ET05UQ0FSRToKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCXN0cmJ1Zl9yZXNldChsaW5lKTsKKwlzdHJidWZfYWRkYnVmKGxpbmUsIHJldCk7CisJc3RyYnVmX3JlbGVhc2UocmV0KTsKKwlmcmVlKHJldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBhdGNoYnJlYWsoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzaXplX3QgaTsKKworCS8qIEJlZ2lubmluZyBvZiBhICJkaWZmIC0iIGhlYWRlcj8gKi8KKwlpZiAoc3RhcnRzX3dpdGgobGluZS0+YnVmLCAiZGlmZiAtIikpCisJCXJldHVybiAxOworCisJLyogQ1ZTICJJbmRleDogIiBsaW5lPyAqLworCWlmIChzdGFydHNfd2l0aChsaW5lLT5idWYsICJJbmRleDogIikpCisJCXJldHVybiAxOworCisJLyoKKwkgKiAiLS0tIDxmaWxlbmFtZT4iIHN0YXJ0cyBwYXRjaGVzIHdpdGhvdXQgaGVhZGVycworCSAqICItLS08c3A+KiIgaXMgYSBtYW51YWwgc2VwYXJhdG9yCisJICovCisJaWYgKGxpbmUtPmxlbiA8IDQpCisJCXJldHVybiAwOworCisJaWYgKHN0YXJ0c193aXRoKGxpbmUtPmJ1ZiwgIi0tLSIpKSB7CisJCS8qIHNwYWNlIGZvbGxvd2VkIGJ5IGEgZmlsZW5hbWU/ICovCisJCWlmIChsaW5lLT5idWZbM10gPT0gJyAnICYmICFpc3NwYWNlKGxpbmUtPmJ1Zls0XSkpCisJCQlyZXR1cm4gMTsKKwkJLyogSnVzdCB3aGl0ZXNwYWNlPyAqLworCQlmb3IgKGkgPSAzOyBpIDwgbGluZS0+bGVuOyBpKyspIHsKKwkJCXVuc2lnbmVkIGNoYXIgYyA9IGxpbmUtPmJ1ZltpXTsKKwkJCWlmIChjID09ICdcbicpCisJCQkJcmV0dXJuIDE7CisJCQlpZiAoIWlzc3BhY2UoYykpCisJCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzX3NjaXNzb3JzX2xpbmUoY29uc3QgY2hhciAqbGluZSkKK3sKKwljb25zdCBjaGFyICpjOworCWludCBzY2lzc29ycyA9IDAsIGdhcCA9IDA7CisJY29uc3QgY2hhciAqZmlyc3Rfbm9uYmxhbmsgPSBOVUxMLCAqbGFzdF9ub25ibGFuayA9IE5VTEw7CisJaW50IHZpc2libGUsIHBlcmZvcmF0aW9uID0gMCwgaW5fcGVyZm9yYXRpb24gPSAwOworCisJZm9yIChjID0gbGluZTsgKmM7IGMrKykgeworCQlpZiAoaXNzcGFjZSgqYykpIHsKKwkJCWlmIChpbl9wZXJmb3JhdGlvbikgeworCQkJCXBlcmZvcmF0aW9uKys7CisJCQkJZ2FwKys7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlsYXN0X25vbmJsYW5rID0gYzsKKwkJaWYgKGZpcnN0X25vbmJsYW5rID09IE5VTEwpCisJCQlmaXJzdF9ub25ibGFuayA9IGM7CisJCWlmICgqYyA9PSAnLScpIHsKKwkJCWluX3BlcmZvcmF0aW9uID0gMTsKKwkJCXBlcmZvcmF0aW9uKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKCFtZW1jbXAoYywgIj44IiwgMikgfHwgIW1lbWNtcChjLCAiODwiLCAyKSB8fAorCQkgICAgICFtZW1jbXAoYywgIj4lIiwgMikgfHwgIW1lbWNtcChjLCAiJTwiLCAyKSkpIHsKKwkJCWluX3BlcmZvcmF0aW9uID0gMTsKKwkJCXBlcmZvcmF0aW9uICs9IDI7CisJCQlzY2lzc29ycyArPSAyOworCQkJYysrOworCQkJY29udGludWU7CisJCX0KKwkJaW5fcGVyZm9yYXRpb24gPSAwOworCX0KKworCS8qCisJICogVGhlIG1hcmsgbXVzdCBiZSBhdCBsZWFzdCA4IGJ5dGVzIGxvbmcgKGUuZy4gIi0tID44IC0tIikuCisJICogRXZlbiB0aG91Z2ggdGhlcmUgY2FuIGJlIGFyYml0cmFyeSBjcnVmdCBvbiB0aGUgc2FtZSBsaW5lCisJICogKGUuZy4gImN1dCBoZXJlIiksIGluIG9yZGVyIHRvIGF2b2lkIG1pc2lkZW50aWZpY2F0aW9uLCB0aGUKKwkgKiBwZXJmb3JhdGlvbiBtdXN0IG9jY3VweSBtb3JlIHRoYW4gYSB0aGlyZCBvZiB0aGUgdmlzaWJsZQorCSAqIHdpZHRoIG9mIHRoZSBsaW5lLCBhbmQgZGFzaGVzIGFuZCBzY2lzc29ycyBtdXN0IG9jY3VweSBtb3JlCisJICogdGhhbiBoYWxmIG9mIHRoZSBwZXJmb3JhdGlvbi4KKwkgKi8KKworCWlmIChmaXJzdF9ub25ibGFuayAmJiBsYXN0X25vbmJsYW5rKQorCQl2aXNpYmxlID0gbGFzdF9ub25ibGFuayAtIGZpcnN0X25vbmJsYW5rICsgMTsKKwllbHNlCisJCXZpc2libGUgPSAwOworCXJldHVybiAoc2Npc3NvcnMgJiYgOCA8PSB2aXNpYmxlICYmCisJCXZpc2libGUgPCBwZXJmb3JhdGlvbiAqIDMgJiYKKwkJZ2FwICogMiA8IHBlcmZvcmF0aW9uKTsKK30KKworc3RhdGljIHZvaWQgZmx1c2hfaW5ib2R5X2hlYWRlcl9hY2N1bShzdHJ1Y3QgbWFpbGluZm8gKm1pKQoreworCWlmICghbWktPmluYm9keV9oZWFkZXJfYWNjdW0ubGVuKQorCQlyZXR1cm47CisJaWYgKCFjaGVja19oZWFkZXIobWksICZtaS0+aW5ib2R5X2hlYWRlcl9hY2N1bSwgbWktPnNfaGRyX2RhdGEsIDApKQorCQlCVUcoImluYm9keV9oZWFkZXJfYWNjdW0sIGlmIG5vdCBlbXB0eSwgbXVzdCBhbHdheXMgY29udGFpbiBhIHZhbGlkIGluLWJvZHkgaGVhZGVyIik7CisJc3RyYnVmX3Jlc2V0KCZtaS0+aW5ib2R5X2hlYWRlcl9hY2N1bSk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfaW5ib2R5X2hlYWRlcihzdHJ1Y3QgbWFpbGluZm8gKm1pLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCWlmIChtaS0+aW5ib2R5X2hlYWRlcl9hY2N1bS5sZW4gJiYKKwkgICAgKGxpbmUtPmJ1ZlswXSA9PSAnICcgfHwgbGluZS0+YnVmWzBdID09ICdcdCcpKSB7CisJCWlmIChtaS0+dXNlX3NjaXNzb3JzICYmIGlzX3NjaXNzb3JzX2xpbmUobGluZS0+YnVmKSkgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgYSBzY2lzc29ycyBsaW5lOyBkbyBub3QgY29uc2lkZXIgdGhpcyBsaW5lCisJCQkgKiBhcyBhIGhlYWRlciBjb250aW51YXRpb24gbGluZS4KKwkJCSAqLworCQkJZmx1c2hfaW5ib2R5X2hlYWRlcl9hY2N1bShtaSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzdHJidWZfc3RyaXBfc3VmZml4KCZtaS0+aW5ib2R5X2hlYWRlcl9hY2N1bSwgIlxuIik7CisJCXN0cmJ1Zl9hZGRidWYoJm1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtLCBsaW5lKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZmx1c2hfaW5ib2R5X2hlYWRlcl9hY2N1bShtaSk7CisKKwlpZiAoc3RhcnRzX3dpdGgobGluZS0+YnVmLCAiPkZyb20iKSAmJiBpc3NwYWNlKGxpbmUtPmJ1Zls1XSkpCisJCXJldHVybiBpc19mb3JtYXRfcGF0Y2hfc2VwYXJhdG9yKGxpbmUtPmJ1ZiArIDEsIGxpbmUtPmxlbiAtIDEpOworCWlmIChzdGFydHNfd2l0aChsaW5lLT5idWYsICJbUEFUQ0hdIikgJiYgaXNzcGFjZShsaW5lLT5idWZbN10pKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBoZWFkZXJbaV07IGkrKykKKwkJCWlmICghc3RyY21wKCJTdWJqZWN0IiwgaGVhZGVyW2ldKSkgeworCQkJCWhhbmRsZV9oZWFkZXIoJm1pLT5zX2hkcl9kYXRhW2ldLCBsaW5lKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJcmV0dXJuIDA7CisJfQorCWlmIChpc19pbmJvZHlfaGVhZGVyKG1pLCBsaW5lKSkgeworCQlzdHJidWZfYWRkYnVmKCZtaS0+aW5ib2R5X2hlYWRlcl9hY2N1bSwgbGluZSk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVfY29tbWl0X21zZyhzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCWFzc2VydCghbWktPmZpbHRlcl9zdGFnZSk7CisKKwlpZiAobWktPmhlYWRlcl9zdGFnZSkgeworCQlpZiAoIWxpbmUtPmxlbiB8fCAobGluZS0+bGVuID09IDEgJiYgbGluZS0+YnVmWzBdID09ICdcbicpKSB7CisJCQlpZiAobWktPmluYm9keV9oZWFkZXJfYWNjdW0ubGVuKSB7CisJCQkJZmx1c2hfaW5ib2R5X2hlYWRlcl9hY2N1bShtaSk7CisJCQkJbWktPmhlYWRlcl9zdGFnZSA9IDA7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWlmIChtaS0+dXNlX2luYm9keV9oZWFkZXJzICYmIG1pLT5oZWFkZXJfc3RhZ2UpIHsKKwkJbWktPmhlYWRlcl9zdGFnZSA9IGNoZWNrX2luYm9keV9oZWFkZXIobWksIGxpbmUpOworCQlpZiAobWktPmhlYWRlcl9zdGFnZSkKKwkJCXJldHVybiAwOworCX0gZWxzZQorCQkvKiBPbmx5IHRyaW0gdGhlIGZpcnN0IChibGFuaykgbGluZSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UKKwkJICogd2hlbiBpZ25vcmluZyBpbi1ib2R5IGhlYWRlcnMuCisJCSAqLworCQltaS0+aGVhZGVyX3N0YWdlID0gMDsKKworCS8qIG5vcm1hbGl6ZSB0aGUgbG9nIG1lc3NhZ2UgdG8gVVRGLTguICovCisJaWYgKGNvbnZlcnRfdG9fdXRmOChtaSwgbGluZSwgbWktPmNoYXJzZXQuYnVmKSkKKwkJcmV0dXJuIDA7IC8qIG1pLT5pbnB1dF9lcnJvciBhbHJlYWR5IHNldCAqLworCisJaWYgKG1pLT51c2Vfc2Npc3NvcnMgJiYgaXNfc2Npc3NvcnNfbGluZShsaW5lLT5idWYpKSB7CisJCWludCBpOworCisJCXN0cmJ1Zl9zZXRsZW4oJm1pLT5sb2dfbWVzc2FnZSwgMCk7CisJCW1pLT5oZWFkZXJfc3RhZ2UgPSAxOworCisJCS8qCisJCSAqIFdlIG1heSBoYXZlIGFscmVhZHkgcmVhZCAic2Vjb25kYXJ5IGhlYWRlcnMiOyBwdXJnZQorCQkgKiB0aGVtIHRvIGdpdmUgb3Vyc2VsdmVzIGEgY2xlYW4gcmVzdGFydC4KKwkJICovCisJCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7CisJCQlpZiAobWktPnNfaGRyX2RhdGFbaV0pCisJCQkJc3RyYnVmX3JlbGVhc2UobWktPnNfaGRyX2RhdGFbaV0pOworCQkJbWktPnNfaGRyX2RhdGFbaV0gPSBOVUxMOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChwYXRjaGJyZWFrKGxpbmUpKSB7CisJCWlmIChtaS0+bWVzc2FnZV9pZCkKKwkJCXN0cmJ1Zl9hZGRmKCZtaS0+bG9nX21lc3NhZ2UsCisJCQkJICAgICJNZXNzYWdlLUlkOiAlc1xuIiwgbWktPm1lc3NhZ2VfaWQpOworCQlyZXR1cm4gMTsKKwl9CisKKwlzdHJidWZfYWRkYnVmKCZtaS0+bG9nX21lc3NhZ2UsIGxpbmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcGF0Y2goc3RydWN0IG1haWxpbmZvICptaSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlmd3JpdGUobGluZS0+YnVmLCAxLCBsaW5lLT5sZW4sIG1pLT5wYXRjaGZpbGUpOworCW1pLT5wYXRjaF9saW5lcysrOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZmlsdGVyKHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3dpdGNoIChtaS0+ZmlsdGVyX3N0YWdlKSB7CisJY2FzZSAwOgorCQlpZiAoIWhhbmRsZV9jb21taXRfbXNnKG1pLCBsaW5lKSkKKwkJCWJyZWFrOworCQltaS0+ZmlsdGVyX3N0YWdlKys7CisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSAxOgorCQloYW5kbGVfcGF0Y2gobWksIGxpbmUpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXNfcmZjMjgyMl9oZWFkZXIoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwkvKgorCSAqIFRoZSBzZWN0aW9uIHRoYXQgZGVmaW5lcyB0aGUgbG9vc2VzdCBwb3NzaWJsZQorCSAqIGZpZWxkIG5hbWUgaXMgIjMuNi44IE9wdGlvbmFsIGZpZWxkcyIuCisJICoKKwkgKiBvcHRpb25hbC1maWVsZCA9IGZpZWxkLW5hbWUgIjoiIHVuc3RydWN0dXJlZCBDUkxGCisJICogZmllbGQtbmFtZSA9IDEqZnRleHQKKwkgKiBmdGV4dCA9ICVkMzMtNTcgLyAlNTktMTI2CisJICovCisJaW50IGNoOworCWNoYXIgKmNwID0gbGluZS0+YnVmOworCisJLyogQ291bnQgbWJveCBGcm9tIGhlYWRlcnMgYXMgaGVhZGVycyAqLworCWlmIChzdGFydHNfd2l0aChjcCwgIkZyb20gIikgfHwgc3RhcnRzX3dpdGgoY3AsICI+RnJvbSAiKSkKKwkJcmV0dXJuIDE7CisKKwl3aGlsZSAoKGNoID0gKmNwKyspKSB7CisJCWlmIChjaCA9PSAnOicpCisJCQlyZXR1cm4gMTsKKwkJaWYgKCgzMyA8PSBjaCAmJiBjaCA8PSA1NykgfHwKKwkJICAgICg1OSA8PSBjaCAmJiBjaCA8PSAxMjYpKQorCQkJY29udGludWU7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX29uZV9oZWFkZXJfbGluZShzdHJ1Y3Qgc3RyYnVmICpsaW5lLCBGSUxFICppbikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGNvbnRpbnVhdGlvbiA9IFNUUkJVRl9JTklUOworCisJLyogR2V0IHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBsaW5lLiAqLworCWlmIChzdHJidWZfZ2V0bGluZV9sZihsaW5lLCBpbikpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJcyBpdCBhbiBlbXB0eSBsaW5lIG9yIG5vdCBhIHZhbGlkIHJmYzI4MjIgaGVhZGVyPworCSAqIElmIHNvLCBzdG9wIGhlcmUsIGFuZCByZXR1cm4gZmFsc2UgKCJub3QgYSBoZWFkZXIiKQorCSAqLworCXN0cmJ1Zl9ydHJpbShsaW5lKTsKKwlpZiAoIWxpbmUtPmxlbiB8fCAhaXNfcmZjMjgyMl9oZWFkZXIobGluZSkpIHsKKwkJLyogUmUtYWRkIHRoZSBuZXdsaW5lICovCisJCXN0cmJ1Zl9hZGRjaChsaW5lLCAnXG4nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBOb3cgd2UgbmVlZCB0byBlYXQgYWxsIHRoZSBjb250aW51YXRpb24gbGluZXMuLgorCSAqIFl1Y2ssIDI4MjIgaGVhZGVyICJmb2xkaW5nIgorCSAqLworCWZvciAoOzspIHsKKwkJaW50IHBlZWs7CisKKwkJcGVlayA9IGZnZXRjKGluKTsKKwkJaWYgKHBlZWsgPT0gRU9GKQorCQkJYnJlYWs7CisJCXVuZ2V0YyhwZWVrLCBpbik7CisJCWlmIChwZWVrICE9ICcgJyAmJiBwZWVrICE9ICdcdCcpCisJCQlicmVhazsKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZjb250aW51YXRpb24sIGluKSkKKwkJCWJyZWFrOworCQljb250aW51YXRpb24uYnVmWzBdID0gJyAnOworCQlzdHJidWZfcnRyaW0oJmNvbnRpbnVhdGlvbik7CisJCXN0cmJ1Zl9hZGRidWYobGluZSwgJmNvbnRpbnVhdGlvbik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZjb250aW51YXRpb24pOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9ib3VuZGFyeShzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXdoaWxlICghc3RyYnVmX2dldGxpbmVfbGYobGluZSwgbWktPmlucHV0KSkgeworCQlpZiAoKihtaS0+Y29udGVudF90b3ApICYmIGlzX211bHRpcGFydF9ib3VuZGFyeShtaSwgbGluZSkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2JvdW5kYXJ5KHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiBuZXdsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkY2goJm5ld2xpbmUsICdcbicpOworYWdhaW46CisJaWYgKGxpbmUtPmxlbiA+PSAoKihtaS0+Y29udGVudF90b3ApKS0+bGVuICsgMiAmJgorCSAgICAhbWVtY21wKGxpbmUtPmJ1ZiArICgqKG1pLT5jb250ZW50X3RvcCkpLT5sZW4sICItLSIsIDIpKSB7CisJCS8qIHdlIGhpdCBhbiBlbmQgYm91bmRhcnkgKi8KKwkJLyogcG9wIHRoZSBjdXJyZW50IGJvdW5kYXJ5IG9mZiB0aGUgc3RhY2sgKi8KKwkJc3RyYnVmX3JlbGVhc2UoKihtaS0+Y29udGVudF90b3ApKTsKKwkJRlJFRV9BTkRfTlVMTCgqKG1pLT5jb250ZW50X3RvcCkpOworCisJCS8qIHRlY2huaWNhbGx5IHdvbid0IGhhcHBlbiBhcyBpc19tdWx0aXBhcnRfYm91bmRhcnkoKQorCQkgICB3aWxsIGZhaWwgZmlyc3QuICBCdXQganVzdCBpbiBjYXNlLi4KKwkJICovCisJCWlmICgtLW1pLT5jb250ZW50X3RvcCA8IG1pLT5jb250ZW50KSB7CisJCQllcnJvcigiRGV0ZWN0ZWQgbWlzbWF0Y2hlZCBib3VuZGFyaWVzLCBjYW4ndCByZWNvdmVyIik7CisJCQltaS0+aW5wdXRfZXJyb3IgPSAtMTsKKwkJCW1pLT5jb250ZW50X3RvcCA9IG1pLT5jb250ZW50OworCQkJc3RyYnVmX3JlbGVhc2UoJm5ld2xpbmUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaGFuZGxlX2ZpbHRlcihtaSwgJm5ld2xpbmUpOworCQlzdHJidWZfcmVsZWFzZSgmbmV3bGluZSk7CisJCWlmIChtaS0+aW5wdXRfZXJyb3IpCisJCQlyZXR1cm4gMDsKKworCQkvKiBza2lwIHRvIHRoZSBuZXh0IGJvdW5kYXJ5ICovCisJCWlmICghZmluZF9ib3VuZGFyeShtaSwgbGluZSkpCisJCQlyZXR1cm4gMDsKKwkJZ290byBhZ2FpbjsKKwl9CisKKwkvKiBzZXQgc29tZSBkZWZhdWx0cyAqLworCW1pLT50cmFuc2Zlcl9lbmNvZGluZyA9IFRFX0RPTlRDQVJFOworCXN0cmJ1Zl9yZXNldCgmbWktPmNoYXJzZXQpOworCisJLyogc2x1cnAgaW4gdGhpcyBzZWN0aW9uJ3MgaW5mbyAqLworCXdoaWxlIChyZWFkX29uZV9oZWFkZXJfbGluZShsaW5lLCBtaS0+aW5wdXQpKQorCQljaGVja19oZWFkZXIobWksIGxpbmUsIG1pLT5wX2hkcl9kYXRhLCAwKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZuZXdsaW5lKTsKKwkvKiByZXBsZW5pc2ggbGluZSAqLworCWlmIChzdHJidWZfZ2V0bGluZV9sZihsaW5lLCBtaS0+aW5wdXQpKQorCQlyZXR1cm4gMDsKKwlzdHJidWZfYWRkY2gobGluZSwgJ1xuJyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9maWx0ZXJfZmxvd2VkKHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUsCisJCQkJIHN0cnVjdCBzdHJidWYgKnByZXYpCit7CisJc2l6ZV90IGxlbiA9IGxpbmUtPmxlbjsKKwljb25zdCBjaGFyICpyZXN0OworCisJaWYgKCFtaS0+Zm9ybWF0X2Zsb3dlZCkgeworCQloYW5kbGVfZmlsdGVyKG1pLCBsaW5lKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChsaW5lLT5idWZbbGVuIC0gMV0gPT0gJ1xuJykgeworCQlsZW4tLTsKKwkJaWYgKGxlbiAmJiBsaW5lLT5idWZbbGVuIC0gMV0gPT0gJ1xyJykKKwkJCWxlbi0tOworCX0KKworCS8qIEtlZXAgc2lnbmF0dXJlIHNlcGFyYXRvciBhcy1pcy4gKi8KKwlpZiAoc2tpcF9wcmVmaXgobGluZS0+YnVmLCAiLS0gIiwgJnJlc3QpICYmIHJlc3QgLSBsaW5lLT5idWYgPT0gbGVuKSB7CisJCWlmIChwcmV2LT5sZW4pIHsKKwkJCWhhbmRsZV9maWx0ZXIobWksIHByZXYpOworCQkJc3RyYnVmX3Jlc2V0KHByZXYpOworCQl9CisJCWhhbmRsZV9maWx0ZXIobWksIGxpbmUpOworCQlyZXR1cm47CisJfQorCisJLyogVW5zdHVmZiBzcGFjZS1zdHVmZmVkIGxpbmUuICovCisJaWYgKGxlbiAmJiBsaW5lLT5idWZbMF0gPT0gJyAnKSB7CisJCXN0cmJ1Zl9yZW1vdmUobGluZSwgMCwgMSk7CisJCWxlbi0tOworCX0KKworCS8qIFNhdmUgZmxvd2VkIGxpbmUgZm9yIGxhdGVyLCBidXQgd2l0aG91dCB0aGUgc29mdCBsaW5lIGJyZWFrLiAqLworCWlmIChsZW4gJiYgbGluZS0+YnVmW2xlbiAtIDFdID09ICcgJykgeworCQlzdHJidWZfYWRkKHByZXYsIGxpbmUtPmJ1ZiwgbGVuIC0gISFtaS0+ZGVsc3ApOworCQlyZXR1cm47CisJfQorCisJLyogUHJlcGVuZCBhbnkgcHJldmlvdXMgcGFydGlhbCBsaW5lcyAqLworCXN0cmJ1Zl9pbnNlcnQobGluZSwgMCwgcHJldi0+YnVmLCBwcmV2LT5sZW4pOworCXN0cmJ1Zl9yZXNldChwcmV2KTsKKworCWhhbmRsZV9maWx0ZXIobWksIGxpbmUpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfYm9keShzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN0cnVjdCBzdHJidWYgcHJldiA9IFNUUkJVRl9JTklUOworCisJLyogU2tpcCB1cCB0byB0aGUgZmlyc3QgYm91bmRhcnkgKi8KKwlpZiAoKihtaS0+Y29udGVudF90b3ApKSB7CisJCWlmICghZmluZF9ib3VuZGFyeShtaSwgbGluZSkpCisJCQlnb3RvIGhhbmRsZV9ib2R5X291dDsKKwl9CisKKwlkbyB7CisJCS8qIHByb2Nlc3MgYW55IGJvdW5kYXJ5IGxpbmVzICovCisJCWlmICgqKG1pLT5jb250ZW50X3RvcCkgJiYgaXNfbXVsdGlwYXJ0X2JvdW5kYXJ5KG1pLCBsaW5lKSkgeworCQkJLyogZmx1c2ggYW55IGxlZnRvdmVyICovCisJCQlpZiAocHJldi5sZW4pIHsKKwkJCQloYW5kbGVfZmlsdGVyKG1pLCAmcHJldik7CisJCQkJc3RyYnVmX3Jlc2V0KCZwcmV2KTsKKwkJCX0KKwkJCWlmICghaGFuZGxlX2JvdW5kYXJ5KG1pLCBsaW5lKSkKKwkJCQlnb3RvIGhhbmRsZV9ib2R5X291dDsKKwkJfQorCisJCS8qIFVud3JhcCB0cmFuc2ZlciBlbmNvZGluZyAqLworCQlkZWNvZGVfdHJhbnNmZXJfZW5jb2RpbmcobWksIGxpbmUpOworCisJCXN3aXRjaCAobWktPnRyYW5zZmVyX2VuY29kaW5nKSB7CisJCWNhc2UgVEVfQkFTRTY0OgorCQljYXNlIFRFX1FQOgorCQl7CisJCQlzdHJ1Y3Qgc3RyYnVmICoqbGluZXMsICoqaXQsICpzYjsKKworCQkJLyogUHJlcGVuZCBhbnkgcHJldmlvdXMgcGFydGlhbCBsaW5lcyAqLworCQkJc3RyYnVmX2luc2VydChsaW5lLCAwLCBwcmV2LmJ1ZiwgcHJldi5sZW4pOworCQkJc3RyYnVmX3Jlc2V0KCZwcmV2KTsKKworCQkJLyoKKwkJCSAqIFRoaXMgaXMgYSBkZWNvZGVkIGxpbmUgdGhhdCBtYXkgY29udGFpbgorCQkJICogbXVsdGlwbGUgbmV3IGxpbmVzLiAgUGFzcyBvbmx5IG9uZSBjaHVuaworCQkJICogYXQgYSB0aW1lIHRvIGhhbmRsZV9maWx0ZXIoKQorCQkJICovCisJCQlsaW5lcyA9IHN0cmJ1Zl9zcGxpdChsaW5lLCAnXG4nKTsKKwkJCWZvciAoaXQgPSBsaW5lczsgKHNiID0gKml0KTsgaXQrKykgeworCQkJCWlmICgqKGl0ICsgMSkgPT0gTlVMTCkgLyogVGhlIGxhc3QgbGluZSAqLworCQkJCQlpZiAoc2ItPmJ1ZltzYi0+bGVuIC0gMV0gIT0gJ1xuJykgeworCQkJCQkJLyogUGFydGlhbCBsaW5lLCBzYXZlIGl0IGZvciBsYXRlci4gKi8KKwkJCQkJCXN0cmJ1Zl9hZGRidWYoJnByZXYsIHNiKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJaGFuZGxlX2ZpbHRlcl9mbG93ZWQobWksIHNiLCAmcHJldik7CisJCQl9CisJCQkvKgorCQkJICogVGhlIHBhcnRpYWwgY2h1bmsgaXMgc2F2ZWQgaW4gInByZXYiIGFuZCB3aWxsIGJlCisJCQkgKiBhcHBlbmRlZCBieSB0aGUgbmV4dCBpdGVyYXRpb24gb2YgcmVhZF9saW5lX3dpdGhfbnVsKCkuCisJCQkgKi8KKwkJCXN0cmJ1Zl9saXN0X2ZyZWUobGluZXMpOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCWhhbmRsZV9maWx0ZXJfZmxvd2VkKG1pLCBsaW5lLCAmcHJldik7CisJCX0KKworCQlpZiAobWktPmlucHV0X2Vycm9yKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoIXN0cmJ1Zl9nZXR3aG9sZWxpbmUobGluZSwgbWktPmlucHV0LCAnXG4nKSk7CisKKwlpZiAocHJldi5sZW4pCisJCWhhbmRsZV9maWx0ZXIobWksICZwcmV2KTsKKworCWZsdXNoX2luYm9keV9oZWFkZXJfYWNjdW0obWkpOworCitoYW5kbGVfYm9keV9vdXQ6CisJc3RyYnVmX3JlbGVhc2UoJnByZXYpOworfQorCitzdGF0aWMgdm9pZCBvdXRwdXRfaGVhZGVyX2xpbmVzKEZJTEUgKmZvdXQsIGNvbnN0IGNoYXIgKmhkciwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqZGF0YSkKK3sKKwljb25zdCBjaGFyICpzcCA9IGRhdGEtPmJ1ZjsKKwl3aGlsZSAoMSkgeworCQljaGFyICplcCA9IHN0cmNocihzcCwgJ1xuJyk7CisJCWludCBsZW47CisJCWlmICghZXApCisJCQlsZW4gPSBzdHJsZW4oc3ApOworCQllbHNlCisJCQlsZW4gPSBlcCAtIHNwOworCQlmcHJpbnRmKGZvdXQsICIlczogJS4qc1xuIiwgaGRyLCBsZW4sIHNwKTsKKwkJaWYgKCFlcCkKKwkJCWJyZWFrOworCQlzcCA9IGVwICsgMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9pbmZvKHN0cnVjdCBtYWlsaW5mbyAqbWkpCit7CisJc3RydWN0IHN0cmJ1ZiAqaGRyOworCWludCBpOworCisJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspIHsKKwkJLyogb25seSBwcmludCBpbmJvZHkgaGVhZGVycyBpZiB3ZSBvdXRwdXQgYSBwYXRjaCBmaWxlICovCisJCWlmIChtaS0+cGF0Y2hfbGluZXMgJiYgbWktPnNfaGRyX2RhdGFbaV0pCisJCQloZHIgPSBtaS0+c19oZHJfZGF0YVtpXTsKKwkJZWxzZSBpZiAobWktPnBfaGRyX2RhdGFbaV0pCisJCQloZHIgPSBtaS0+cF9oZHJfZGF0YVtpXTsKKwkJZWxzZQorCQkJY29udGludWU7CisKKwkJaWYgKCFzdHJjbXAoaGVhZGVyW2ldLCAiU3ViamVjdCIpKSB7CisJCQlpZiAoIW1pLT5rZWVwX3N1YmplY3QpIHsKKwkJCQljbGVhbnVwX3N1YmplY3QobWksIGhkcik7CisJCQkJY2xlYW51cF9zcGFjZShoZHIpOworCQkJfQorCQkJb3V0cHV0X2hlYWRlcl9saW5lcyhtaS0+b3V0cHV0LCAiU3ViamVjdCIsIGhkcik7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChoZWFkZXJbaV0sICJGcm9tIikpIHsKKwkJCWNsZWFudXBfc3BhY2UoaGRyKTsKKwkJCWhhbmRsZV9mcm9tKG1pLCBoZHIpOworCQkJZnByaW50ZihtaS0+b3V0cHV0LCAiQXV0aG9yOiAlc1xuIiwgbWktPm5hbWUuYnVmKTsKKwkJCWZwcmludGYobWktPm91dHB1dCwgIkVtYWlsOiAlc1xuIiwgbWktPmVtYWlsLmJ1Zik7CisJCX0gZWxzZSB7CisJCQljbGVhbnVwX3NwYWNlKGhkcik7CisJCQlmcHJpbnRmKG1pLT5vdXRwdXQsICIlczogJXNcbiIsIGhlYWRlcltpXSwgaGRyLT5idWYpOworCQl9CisJfQorCWZwcmludGYobWktPm91dHB1dCwgIlxuIik7Cit9CisKK2ludCBtYWlsaW5mbyhzdHJ1Y3QgbWFpbGluZm8gKm1pLCBjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKnBhdGNoKQoreworCUZJTEUgKmNtaXRtc2c7CisJaW50IHBlZWs7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwljbWl0bXNnID0gZm9wZW4obXNnLCAidyIpOworCWlmICghY21pdG1zZykgeworCQlwZXJyb3IobXNnKTsKKwkJcmV0dXJuIC0xOworCX0KKwltaS0+cGF0Y2hmaWxlID0gZm9wZW4ocGF0Y2gsICJ3Iik7CisJaWYgKCFtaS0+cGF0Y2hmaWxlKSB7CisJCXBlcnJvcihwYXRjaCk7CisJCWZjbG9zZShjbWl0bXNnKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1pLT5wX2hkcl9kYXRhID0geGNhbGxvYyhNQVhfSERSX1BBUlNFRCwgc2l6ZW9mKCoobWktPnBfaGRyX2RhdGEpKSk7CisJbWktPnNfaGRyX2RhdGEgPSB4Y2FsbG9jKE1BWF9IRFJfUEFSU0VELCBzaXplb2YoKihtaS0+c19oZHJfZGF0YSkpKTsKKworCWRvIHsKKwkJcGVlayA9IGZnZXRjKG1pLT5pbnB1dCk7CisJCWlmIChwZWVrID09IEVPRikgeworCQkJZmNsb3NlKGNtaXRtc2cpOworCQkJcmV0dXJuIGVycm9yKCJlbXB0eSBwYXRjaDogJyVzJyIsIHBhdGNoKTsKKwkJfQorCX0gd2hpbGUgKGlzc3BhY2UocGVlaykpOworCXVuZ2V0YyhwZWVrLCBtaS0+aW5wdXQpOworCisJLyogcHJvY2VzcyB0aGUgZW1haWwgaGVhZGVyICovCisJd2hpbGUgKHJlYWRfb25lX2hlYWRlcl9saW5lKCZsaW5lLCBtaS0+aW5wdXQpKQorCQljaGVja19oZWFkZXIobWksICZsaW5lLCBtaS0+cF9oZHJfZGF0YSwgMSk7CisKKwloYW5kbGVfYm9keShtaSwgJmxpbmUpOworCWZ3cml0ZShtaS0+bG9nX21lc3NhZ2UuYnVmLCAxLCBtaS0+bG9nX21lc3NhZ2UubGVuLCBjbWl0bXNnKTsKKwlmY2xvc2UoY21pdG1zZyk7CisJZmNsb3NlKG1pLT5wYXRjaGZpbGUpOworCisJaGFuZGxlX2luZm8obWkpOworCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwlyZXR1cm4gbWktPmlucHV0X2Vycm9yOworfQorCitzdGF0aWMgaW50IGdpdF9tYWlsaW5mb19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqbWlfKQoreworCXN0cnVjdCBtYWlsaW5mbyAqbWkgPSBtaV87CisKKwlpZiAoIXN0YXJ0c193aXRoKHZhciwgIm1haWxpbmZvLiIpKQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIE5VTEwpOworCWlmICghc3RyY21wKHZhciwgIm1haWxpbmZvLnNjaXNzb3JzIikpIHsKKwkJbWktPnVzZV9zY2lzc29ycyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIHBlcmhhcHMgb3RoZXJzIGhlcmUgKi8KKwlyZXR1cm4gMDsKK30KKwordm9pZCBzZXR1cF9tYWlsaW5mbyhzdHJ1Y3QgbWFpbGluZm8gKm1pKQoreworCW1lbXNldChtaSwgMCwgc2l6ZW9mKCptaSkpOworCXN0cmJ1Zl9pbml0KCZtaS0+bmFtZSwgMCk7CisJc3RyYnVmX2luaXQoJm1pLT5lbWFpbCwgMCk7CisJc3RyYnVmX2luaXQoJm1pLT5jaGFyc2V0LCAwKTsKKwlzdHJidWZfaW5pdCgmbWktPmxvZ19tZXNzYWdlLCAwKTsKKwlzdHJidWZfaW5pdCgmbWktPmluYm9keV9oZWFkZXJfYWNjdW0sIDApOworCW1pLT5oZWFkZXJfc3RhZ2UgPSAxOworCW1pLT51c2VfaW5ib2R5X2hlYWRlcnMgPSAxOworCW1pLT5jb250ZW50X3RvcCA9IG1pLT5jb250ZW50OworCWdpdF9jb25maWcoZ2l0X21haWxpbmZvX2NvbmZpZywgbWkpOworfQorCit2b2lkIGNsZWFyX21haWxpbmZvKHN0cnVjdCBtYWlsaW5mbyAqbWkpCit7CisJaW50IGk7CisKKwlzdHJidWZfcmVsZWFzZSgmbWktPm5hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZtaS0+ZW1haWwpOworCXN0cmJ1Zl9yZWxlYXNlKCZtaS0+Y2hhcnNldCk7CisJc3RyYnVmX3JlbGVhc2UoJm1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtKTsKKwlmcmVlKG1pLT5tZXNzYWdlX2lkKTsKKworCWlmIChtaS0+cF9oZHJfZGF0YSkKKwkJZm9yIChpID0gMDsgbWktPnBfaGRyX2RhdGFbaV07IGkrKykKKwkJCXN0cmJ1Zl9yZWxlYXNlKG1pLT5wX2hkcl9kYXRhW2ldKTsKKwlmcmVlKG1pLT5wX2hkcl9kYXRhKTsKKwlpZiAobWktPnNfaGRyX2RhdGEpCisJCWZvciAoaSA9IDA7IG1pLT5zX2hkcl9kYXRhW2ldOyBpKyspCisJCQlzdHJidWZfcmVsZWFzZShtaS0+c19oZHJfZGF0YVtpXSk7CisJZnJlZShtaS0+c19oZHJfZGF0YSk7CisKKwl3aGlsZSAobWktPmNvbnRlbnQgPCBtaS0+Y29udGVudF90b3ApIHsKKwkJZnJlZSgqKG1pLT5jb250ZW50X3RvcCkpOworCQltaS0+Y29udGVudF90b3AtLTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmbWktPmxvZ19tZXNzYWdlKTsKK30KZGlmZiAtLWdpdCBhL3QvdDQyNTYvMS9tYWlsaW5mby5jLm9yaWcgYi90L3Q0MjU2LzEvbWFpbGluZm8uYy5vcmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyODFhMzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjU2LzEvbWFpbGluZm8uYy5vcmlnCkBAIC0wLDAgKzEsMTE4NSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgIm1haWxpbmZvLmgiCisKK3N0YXRpYyB2b2lkIGNsZWFudXBfc3BhY2Uoc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJc2l6ZV90IHBvcywgY250OworCWZvciAocG9zID0gMDsgcG9zIDwgc2ItPmxlbjsgcG9zKyspIHsKKwkJaWYgKGlzc3BhY2Uoc2ItPmJ1Zltwb3NdKSkgeworCQkJc2ItPmJ1Zltwb3NdID0gJyAnOworCQkJZm9yIChjbnQgPSAwOyBpc3NwYWNlKHNiLT5idWZbcG9zICsgY250ICsgMV0pOyBjbnQrKyk7CisJCQlzdHJidWZfcmVtb3ZlKHNiLCBwb3MgKyAxLCBjbnQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBnZXRfc2FuZV9uYW1lKHN0cnVjdCBzdHJidWYgKm91dCwgc3RydWN0IHN0cmJ1ZiAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqZW1haWwpCit7CisJc3RydWN0IHN0cmJ1ZiAqc3JjID0gbmFtZTsKKwlpZiAobmFtZS0+bGVuIDwgMyB8fCA2MCA8IG5hbWUtPmxlbiB8fCBzdHJjaHIobmFtZS0+YnVmLCAnQCcpIHx8CisJCXN0cmNocihuYW1lLT5idWYsICc8JykgfHwgc3RyY2hyKG5hbWUtPmJ1ZiwgJz4nKSkKKwkJc3JjID0gZW1haWw7CisJZWxzZSBpZiAobmFtZSA9PSBvdXQpCisJCXJldHVybjsKKwlzdHJidWZfcmVzZXQob3V0KTsKKwlzdHJidWZfYWRkYnVmKG91dCwgc3JjKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfYm9ndXNfZnJvbShzdHJ1Y3QgbWFpbGluZm8gKm1pLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCS8qIEpvaG4gRG9lIDxqb2huZG9lPiAqLworCisJY2hhciAqYnJhLCAqa2V0OworCS8qIFRoaXMgaXMgZmFsbGJhY2ssIHNvIGRvIG5vdCBib3RoZXIgaWYgd2UgYWxyZWFkeSBoYXZlIGFuCisJICogZS1tYWlsIGFkZHJlc3MuCisJICovCisJaWYgKG1pLT5lbWFpbC5sZW4pCisJCXJldHVybjsKKworCWJyYSA9IHN0cmNocihsaW5lLT5idWYsICc8Jyk7CisJaWYgKCFicmEpCisJCXJldHVybjsKKwlrZXQgPSBzdHJjaHIoYnJhLCAnPicpOworCWlmICgha2V0KQorCQlyZXR1cm47CisKKwlzdHJidWZfcmVzZXQoJm1pLT5lbWFpbCk7CisJc3RyYnVmX2FkZCgmbWktPmVtYWlsLCBicmEgKyAxLCBrZXQgLSBicmEgLSAxKTsKKworCXN0cmJ1Zl9yZXNldCgmbWktPm5hbWUpOworCXN0cmJ1Zl9hZGQoJm1pLT5uYW1lLCBsaW5lLT5idWYsIGJyYSAtIGxpbmUtPmJ1Zik7CisJc3RyYnVmX3RyaW0oJm1pLT5uYW1lKTsKKwlnZXRfc2FuZV9uYW1lKCZtaS0+bmFtZSwgJm1pLT5uYW1lLCAmbWktPmVtYWlsKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnVucXVvdGVfY29tbWVudChzdHJ1Y3Qgc3RyYnVmICpvdXRidWYsIGNvbnN0IGNoYXIgKmluKQoreworCWludCBjOworCWludCB0YWtlX25leHRfbGl0ZXJhbGx5ID0gMDsKKworCXN0cmJ1Zl9hZGRjaChvdXRidWYsICcoJyk7CisKKwl3aGlsZSAoKGMgPSAqaW4rKykgIT0gMCkgeworCQlpZiAodGFrZV9uZXh0X2xpdGVyYWxseSA9PSAxKSB7CisJCQl0YWtlX25leHRfbGl0ZXJhbGx5ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAnXFwnOgorCQkJCXRha2VfbmV4dF9saXRlcmFsbHkgPSAxOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnKCc6CisJCQkJaW4gPSB1bnF1b3RlX2NvbW1lbnQob3V0YnVmLCBpbik7CisJCQkJY29udGludWU7CisJCQljYXNlICcpJzoKKwkJCQlzdHJidWZfYWRkY2gob3V0YnVmLCAnKScpOworCQkJCXJldHVybiBpbjsKKwkJCX0KKwkJfQorCisJCXN0cmJ1Zl9hZGRjaChvdXRidWYsIGMpOworCX0KKworCXJldHVybiBpbjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnVucXVvdGVfcXVvdGVkX3N0cmluZyhzdHJ1Y3Qgc3RyYnVmICpvdXRidWYsIGNvbnN0IGNoYXIgKmluKQoreworCWludCBjOworCWludCB0YWtlX25leHRfbGl0ZXJhbGx5ID0gMDsKKworCXdoaWxlICgoYyA9ICppbisrKSAhPSAwKSB7CisJCWlmICh0YWtlX25leHRfbGl0ZXJhbGx5ID09IDEpIHsKKwkJCXRha2VfbmV4dF9saXRlcmFsbHkgPSAwOworCQl9IGVsc2UgeworCQkJc3dpdGNoIChjKSB7CisJCQljYXNlICdcXCc6CisJCQkJdGFrZV9uZXh0X2xpdGVyYWxseSA9IDE7CisJCQkJY29udGludWU7CisJCQljYXNlICciJzoKKwkJCQlyZXR1cm4gaW47CisJCQl9CisJCX0KKworCQlzdHJidWZfYWRkY2gob3V0YnVmLCBjKTsKKwl9CisKKwlyZXR1cm4gaW47Cit9CisKK3N0YXRpYyB2b2lkIHVucXVvdGVfcXVvdGVkX3BhaXIoc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG91dGJ1ZjsKKwljb25zdCBjaGFyICppbiA9IGxpbmUtPmJ1ZjsKKwlpbnQgYzsKKworCXN0cmJ1Zl9pbml0KCZvdXRidWYsIGxpbmUtPmxlbik7CisKKwl3aGlsZSAoKGMgPSAqaW4rKykgIT0gMCkgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnIic6CisJCQlpbiA9IHVucXVvdGVfcXVvdGVkX3N0cmluZygmb3V0YnVmLCBpbik7CisJCQljb250aW51ZTsKKwkJY2FzZSAnKCc6CisJCQlpbiA9IHVucXVvdGVfY29tbWVudCgmb3V0YnVmLCBpbik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0cmJ1Zl9hZGRjaCgmb3V0YnVmLCBjKTsKKwl9CisKKwlzdHJidWZfc3dhcCgmb3V0YnVmLCBsaW5lKTsKKwlzdHJidWZfcmVsZWFzZSgmb3V0YnVmKTsKKworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZnJvbShzdHJ1Y3QgbWFpbGluZm8gKm1pLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpmcm9tKQoreworCWNoYXIgKmF0OworCXNpemVfdCBlbDsKKwlzdHJ1Y3Qgc3RyYnVmIGY7CisKKwlzdHJidWZfaW5pdCgmZiwgZnJvbS0+bGVuKTsKKwlzdHJidWZfYWRkYnVmKCZmLCBmcm9tKTsKKworCXVucXVvdGVfcXVvdGVkX3BhaXIoJmYpOworCisJYXQgPSBzdHJjaHIoZi5idWYsICdAJyk7CisJaWYgKCFhdCkgeworCQlwYXJzZV9ib2d1c19mcm9tKG1pLCBmcm9tKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhbHJlYWR5IGhhdmUgb25lIGVtYWlsLCBkb24ndCB0YWtlIGFueSBjb25mdXNpbmcgbGluZXMKKwkgKi8KKwlpZiAobWktPmVtYWlsLmxlbiAmJiBzdHJjaHIoYXQgKyAxLCAnQCcpKQorCQlnb3RvIG91dDsKKworCS8qIFBpY2sgdXAgdGhlIHN0cmluZyBhcm91bmQgJ0AnLCBwb3NzaWJseSBkZWxpbWl0ZWQgd2l0aCA8PgorCSAqIHBhaXI7IHRoYXQgaXMgdGhlIGVtYWlsIHBhcnQuCisJICovCisJd2hpbGUgKGF0ID4gZi5idWYpIHsKKwkJY2hhciBjID0gYXRbLTFdOworCQlpZiAoaXNzcGFjZShjKSkKKwkJCWJyZWFrOworCQlpZiAoYyA9PSAnPCcpIHsKKwkJCWF0Wy0xXSA9ICcgJzsKKwkJCWJyZWFrOworCQl9CisJCWF0LS07CisJfQorCWVsID0gc3RyY3NwbihhdCwgIiBcblx0XHJcdlxmPiIpOworCXN0cmJ1Zl9yZXNldCgmbWktPmVtYWlsKTsKKwlzdHJidWZfYWRkKCZtaS0+ZW1haWwsIGF0LCBlbCk7CisJc3RyYnVmX3JlbW92ZSgmZiwgYXQgLSBmLmJ1ZiwgZWwgKyAoYXRbZWxdID8gMSA6IDApKTsKKworCS8qIFRoZSByZW1haW5kZXIgaXMgbmFtZS4gIEl0IGNvdWxkIGJlCisJICoKKwkgKiAtICJKb2huIERvZSA8am9obi5kb2VAeHo+IgkJCShhKSwgb3IKKwkgKiAtICJqb2huLmRvZUB4eiAoSm9obiBEb2UpIgkJCShiKSwgb3IKKwkgKiAtICJKb2huICh6enopIERvZSA8am9obi5kb2VAeHo+IChDb21tZW50KSIJKGMpCisJICoKKwkgKiBidXQgd2UgaGF2ZSByZW1vdmVkIHRoZSBlbWFpbCBwYXJ0LCBzbworCSAqCisJICogLSByZW1vdmUgZXh0cmEgc3BhY2VzIHdoaWNoIGNvdWxkIHN0YXkgYWZ0ZXIgZW1haWwgKGNhc2UgJ2MnKSwgYW5kCisJICogLSB0cmltIGZyb20gYm90aCBlbmRzLCBwb3NzaWJseSByZW1vdmluZyB0aGUgKCkgcGFpciBhdCB0aGUgZW5kCisJICogICAoY2FzZXMgJ2EnIGFuZCAnYicpLgorCSAqLworCWNsZWFudXBfc3BhY2UoJmYpOworCXN0cmJ1Zl90cmltKCZmKTsKKwlpZiAoZi5idWZbMF0gPT0gJygnICYmIGYubGVuICYmIGYuYnVmW2YubGVuIC0gMV0gPT0gJyknKSB7CisJCXN0cmJ1Zl9yZW1vdmUoJmYsIDAsIDEpOworCQlzdHJidWZfc2V0bGVuKCZmLCBmLmxlbiAtIDEpOworCX0KKworCWdldF9zYW5lX25hbWUoJm1pLT5uYW1lLCAmZiwgJm1pLT5lbWFpbCk7CitvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJmYpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfaGVhZGVyKHN0cnVjdCBzdHJidWYgKipvdXQsIGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJaWYgKCEqb3V0KSB7CisJCSpvdXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSk7CisJCXN0cmJ1Zl9pbml0KCpvdXQsIGxpbmUtPmxlbik7CisJfSBlbHNlCisJCXN0cmJ1Zl9yZXNldCgqb3V0KTsKKworCXN0cmJ1Zl9hZGRidWYoKm91dCwgbGluZSk7Cit9CisKKy8qIE5PVEUgTk9URSBOT1RFLiAgV2UgZG8gbm90IGNsYWltIHdlIGRvIGZ1bGwgTUlNRS4gIFdlIGp1c3QgYXR0ZW1wdAorICogdG8gaGF2ZSBlbm91Z2ggaGV1cmlzdGljcyB0byBncm9rIE1JTUUgZW5jb2RlZCBwYXRjaGVzIG9mdGVuIGZvdW5kCisgKiBvbiBvdXIgbWFpbGluZyBsaXN0cy4gIEZvciBleGFtcGxlLCB3ZSBkbyBub3QgZXZlbiB0cmVhdCBoZWFkZXIgbGluZXMKKyAqIGNhc2UgaW5zZW5zaXRpdmVseS4KKyAqLworCitzdGF0aWMgaW50IHNsdXJwX2F0dHIoY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqYXR0cikKK3sKKwljb25zdCBjaGFyICplbmRzLCAqYXAgPSBzdHJjYXNlc3RyKGxpbmUsIG5hbWUpOworCXNpemVfdCBzejsKKworCXN0cmJ1Zl9zZXRsZW4oYXR0ciwgMCk7CisJaWYgKCFhcCkKKwkJcmV0dXJuIDA7CisJYXAgKz0gc3RybGVuKG5hbWUpOworCWlmICgqYXAgPT0gJyInKSB7CisJCWFwKys7CisJCWVuZHMgPSAiXCIiOworCX0KKwllbHNlCisJCWVuZHMgPSAiOyBcdCI7CisJc3ogPSBzdHJjc3BuKGFwLCBlbmRzKTsKKwlzdHJidWZfYWRkKGF0dHIsIGFwLCBzeik7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9jb250ZW50X3R5cGUoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpib3VuZGFyeSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJidWYpKTsKKwlzdHJidWZfaW5pdChib3VuZGFyeSwgbGluZS0+bGVuKTsKKworCWlmIChzbHVycF9hdHRyKGxpbmUtPmJ1ZiwgImJvdW5kYXJ5PSIsIGJvdW5kYXJ5KSkgeworCQlzdHJidWZfaW5zZXJ0KGJvdW5kYXJ5LCAwLCAiLS0iLCAyKTsKKwkJaWYgKCsrbWktPmNvbnRlbnRfdG9wID49ICZtaS0+Y29udGVudFtNQVhfQk9VTkRBUklFU10pIHsKKwkJCWVycm9yKCJUb28gbWFueSBib3VuZGFyaWVzIHRvIGhhbmRsZSIpOworCQkJbWktPmlucHV0X2Vycm9yID0gLTE7CisJCQltaS0+Y29udGVudF90b3AgPSAmbWktPmNvbnRlbnRbTUFYX0JPVU5EQVJJRVNdIC0gMTsKKwkJCXJldHVybjsKKwkJfQorCQkqKG1pLT5jb250ZW50X3RvcCkgPSBib3VuZGFyeTsKKwkJYm91bmRhcnkgPSBOVUxMOworCX0KKwlzbHVycF9hdHRyKGxpbmUtPmJ1ZiwgImNoYXJzZXQ9IiwgJm1pLT5jaGFyc2V0KTsKKworCWlmIChib3VuZGFyeSkgeworCQlzdHJidWZfcmVsZWFzZShib3VuZGFyeSk7CisJCWZyZWUoYm91bmRhcnkpOworCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2NvbnRlbnRfdHJhbnNmZXJfZW5jb2Rpbmcoc3RydWN0IG1haWxpbmZvICptaSwKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCWlmIChzdHJjYXNlc3RyKGxpbmUtPmJ1ZiwgImJhc2U2NCIpKQorCQltaS0+dHJhbnNmZXJfZW5jb2RpbmcgPSBURV9CQVNFNjQ7CisJZWxzZSBpZiAoc3RyY2FzZXN0cihsaW5lLT5idWYsICJxdW90ZWQtcHJpbnRhYmxlIikpCisJCW1pLT50cmFuc2Zlcl9lbmNvZGluZyA9IFRFX1FQOworCWVsc2UKKwkJbWktPnRyYW5zZmVyX2VuY29kaW5nID0gVEVfRE9OVENBUkU7Cit9CisKK3N0YXRpYyBpbnQgaXNfbXVsdGlwYXJ0X2JvdW5kYXJ5KHN0cnVjdCBtYWlsaW5mbyAqbWksIGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiAqY29udGVudF90b3AgPSAqKG1pLT5jb250ZW50X3RvcCk7CisKKwlyZXR1cm4gKChjb250ZW50X3RvcC0+bGVuIDw9IGxpbmUtPmxlbikgJiYKKwkJIW1lbWNtcChsaW5lLT5idWYsIGNvbnRlbnRfdG9wLT5idWYsIGNvbnRlbnRfdG9wLT5sZW4pKTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF9zdWJqZWN0KHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKnN1YmplY3QpCit7CisJc2l6ZV90IGF0ID0gMDsKKworCXdoaWxlIChhdCA8IHN1YmplY3QtPmxlbikgeworCQljaGFyICpwb3M7CisJCXNpemVfdCByZW1vdmU7CisKKwkJc3dpdGNoIChzdWJqZWN0LT5idWZbYXRdKSB7CisJCWNhc2UgJ3InOiBjYXNlICdSJzoKKwkJCWlmIChzdWJqZWN0LT5sZW4gPD0gYXQgKyAzKQorCQkJCWJyZWFrOworCQkJaWYgKChzdWJqZWN0LT5idWZbYXQgKyAxXSA9PSAnZScgfHwKKwkJCSAgICAgc3ViamVjdC0+YnVmW2F0ICsgMV0gPT0gJ0UnKSAmJgorCQkJICAgIHN1YmplY3QtPmJ1ZlthdCArIDJdID09ICc6JykgeworCQkJCXN0cmJ1Zl9yZW1vdmUoc3ViamVjdCwgYXQsIDMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYXQrKzsKKwkJCWJyZWFrOworCQljYXNlICcgJzogY2FzZSAnXHQnOiBjYXNlICc6JzoKKwkJCXN0cmJ1Zl9yZW1vdmUoc3ViamVjdCwgYXQsIDEpOworCQkJY29udGludWU7CisJCWNhc2UgJ1snOgorCQkJcG9zID0gc3RyY2hyKHN1YmplY3QtPmJ1ZiArIGF0LCAnXScpOworCQkJaWYgKCFwb3MpCisJCQkJYnJlYWs7CisJCQlyZW1vdmUgPSBwb3MgLSBzdWJqZWN0LT5idWYgKyBhdCArIDE7CisJCQlpZiAoIW1pLT5rZWVwX25vbl9wYXRjaF9icmFja2V0c19pbl9zdWJqZWN0IHx8CisJCQkgICAgKDcgPD0gcmVtb3ZlICYmCisJCQkgICAgIG1lbW1lbShzdWJqZWN0LT5idWYgKyBhdCwgcmVtb3ZlLCAiUEFUQ0giLCA1KSkpCisJCQkJc3RyYnVmX3JlbW92ZShzdWJqZWN0LCBhdCwgcmVtb3ZlKTsKKwkJCWVsc2UgeworCQkJCWF0ICs9IHJlbW92ZTsKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBpbnB1dCBoYWQgYSBzcGFjZSBhZnRlciB0aGUgXSwga2VlcAorCQkJCSAqIGl0LiAgV2UgZG9uJ3QgYm90aGVyIHdpdGggZmluZGluZyB0aGUgZW5kIG9mCisJCQkJICogdGhlIHNwYWNlLCBzaW5jZSB3ZSBsYXRlciBub3JtYWxpemUgaXQKKwkJCQkgKiBhbnl3YXkuCisJCQkJICovCisJCQkJaWYgKGlzc3BhY2Uoc3ViamVjdC0+YnVmW2F0XSkpCisJCQkJCWF0ICs9IDE7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisJc3RyYnVmX3RyaW0oc3ViamVjdCk7Cit9CisKKyNkZWZpbmUgTUFYX0hEUl9QQVJTRUQgMTAKK3N0YXRpYyBjb25zdCBjaGFyICpoZWFkZXJbTUFYX0hEUl9QQVJTRURdID0geworCSJGcm9tIiwiU3ViamVjdCIsIkRhdGUiLAorfTsKKworc3RhdGljIGlubGluZSBpbnQgY21wX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lLCBjb25zdCBjaGFyICpoZHIpCit7CisJaW50IGxlbiA9IHN0cmxlbihoZHIpOworCXJldHVybiAhc3RybmNhc2VjbXAobGluZS0+YnVmLCBoZHIsIGxlbikgJiYgbGluZS0+bGVuID4gbGVuICYmCisJCQlsaW5lLT5idWZbbGVuXSA9PSAnOicgJiYgaXNzcGFjZShsaW5lLT5idWZbbGVuICsgMV0pOworfQorCitzdGF0aWMgaW50IGlzX2Zvcm1hdF9wYXRjaF9zZXBhcmF0b3IoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBTQU1QTEVbXSA9CisJCSJGcm9tIGU2ODA3ZjNlZmNhMjhiMzBkZWNmZWNiMTczMmE1NmM3ZGIxMTM3ZWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxXG4iOworCWNvbnN0IGNoYXIgKmNwOworCisJaWYgKGxlbiAhPSBzdHJsZW4oU0FNUExFKSkKKwkJcmV0dXJuIDA7CisJaWYgKCFza2lwX3ByZWZpeChsaW5lLCAiRnJvbSAiLCAmY3ApKQorCQlyZXR1cm4gMDsKKwlpZiAoc3Ryc3BuKGNwLCAiMDEyMzQ1Njc4OWFiY2RlZiIpICE9IDQwKQorCQlyZXR1cm4gMDsKKwljcCArPSA0MDsKKwlyZXR1cm4gIW1lbWNtcChTQU1QTEUgKyAoY3AgLSBsaW5lKSwgY3AsIHN0cmxlbihTQU1QTEUpIC0gKGNwIC0gbGluZSkpOworfQorCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiAqZGVjb2RlX3Ffc2VnbWVudChjb25zdCBzdHJ1Y3Qgc3RyYnVmICpxX3NlZywgaW50IHJmYzIwNDcpCit7CisJY29uc3QgY2hhciAqaW4gPSBxX3NlZy0+YnVmOworCWludCBjOworCXN0cnVjdCBzdHJidWYgKm91dCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJidWYpKTsKKwlzdHJidWZfaW5pdChvdXQsIHFfc2VnLT5sZW4pOworCisJd2hpbGUgKChjID0gKmluKyspICE9IDApIHsKKwkJaWYgKGMgPT0gJz0nKSB7CisJCQlpbnQgY2gsIGQgPSAqaW47CisJCQlpZiAoZCA9PSAnXG4nIHx8ICFkKQorCQkJCWJyZWFrOyAvKiBkcm9wIHRyYWlsaW5nIG5ld2xpbmUgKi8KKwkJCWNoID0gaGV4MmNocihpbik7CisJCQlpZiAoY2ggPj0gMCkgeworCQkJCXN0cmJ1Zl9hZGRjaChvdXQsIGNoKTsKKwkJCQlpbiArPSAyOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogZ2FyYmFnZSAtLSBmYWxsIHRocm91Z2ggKi8KKwkJfQorCQlpZiAocmZjMjA0NyAmJiBjID09ICdfJykgLyogcmZjMjA0NyA0LjIgKDIpICovCisJCQljID0gMHgyMDsKKwkJc3RyYnVmX2FkZGNoKG91dCwgYyk7CisJfQorCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmICpkZWNvZGVfYl9zZWdtZW50KGNvbnN0IHN0cnVjdCBzdHJidWYgKmJfc2VnKQoreworCS8qIERlY29kZSBpbi4uZXAsIHBvc3NpYmx5IGluLXBsYWNlIHRvIG90ICovCisJaW50IGMsIHBvcyA9IDAsIGFjYyA9IDA7CisJY29uc3QgY2hhciAqaW4gPSBiX3NlZy0+YnVmOworCXN0cnVjdCBzdHJidWYgKm91dCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJidWYpKTsKKwlzdHJidWZfaW5pdChvdXQsIGJfc2VnLT5sZW4pOworCisJd2hpbGUgKChjID0gKmluKyspICE9IDApIHsKKwkJaWYgKGMgPT0gJysnKQorCQkJYyA9IDYyOworCQllbHNlIGlmIChjID09ICcvJykKKwkJCWMgPSA2MzsKKwkJZWxzZSBpZiAoJ0EnIDw9IGMgJiYgYyA8PSAnWicpCisJCQljIC09ICdBJzsKKwkJZWxzZSBpZiAoJ2EnIDw9IGMgJiYgYyA8PSAneicpCisJCQljIC09ICdhJyAtIDI2OworCQllbHNlIGlmICgnMCcgPD0gYyAmJiBjIDw9ICc5JykKKwkJCWMgLT0gJzAnIC0gNTI7CisJCWVsc2UKKwkJCWNvbnRpbnVlOyAvKiBnYXJiYWdlICovCisJCXN3aXRjaCAocG9zKyspIHsKKwkJY2FzZSAwOgorCQkJYWNjID0gKGMgPDwgMik7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJc3RyYnVmX2FkZGNoKG91dCwgKGFjYyB8IChjID4+IDQpKSk7CisJCQlhY2MgPSAoYyAmIDE1KSA8PCA0OworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXN0cmJ1Zl9hZGRjaChvdXQsIChhY2MgfCAoYyA+PiAyKSkpOworCQkJYWNjID0gKGMgJiAzKSA8PCA2OworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXN0cmJ1Zl9hZGRjaChvdXQsIChhY2MgfCBjKSk7CisJCQlhY2MgPSBwb3MgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIG91dDsKK30KKworc3RhdGljIGludCBjb252ZXJ0X3RvX3V0Zjgoc3RydWN0IG1haWxpbmZvICptaSwKKwkJCSAgIHN0cnVjdCBzdHJidWYgKmxpbmUsIGNvbnN0IGNoYXIgKmNoYXJzZXQpCit7CisJY2hhciAqb3V0OworCisJaWYgKCFtaS0+bWV0YWluZm9fY2hhcnNldCB8fCAhY2hhcnNldCB8fCAhKmNoYXJzZXQpCisJCXJldHVybiAwOworCisJaWYgKHNhbWVfZW5jb2RpbmcobWktPm1ldGFpbmZvX2NoYXJzZXQsIGNoYXJzZXQpKQorCQlyZXR1cm4gMDsKKwlvdXQgPSByZWVuY29kZV9zdHJpbmcobGluZS0+YnVmLCBtaS0+bWV0YWluZm9fY2hhcnNldCwgY2hhcnNldCk7CisJaWYgKCFvdXQpIHsKKwkJbWktPmlucHV0X2Vycm9yID0gLTE7CisJCXJldHVybiBlcnJvcigiY2Fubm90IGNvbnZlcnQgZnJvbSAlcyB0byAlcyIsCisJCQkgICAgIGNoYXJzZXQsIG1pLT5tZXRhaW5mb19jaGFyc2V0KTsKKwl9CisJc3RyYnVmX2F0dGFjaChsaW5lLCBvdXQsIHN0cmxlbihvdXQpLCBzdHJsZW4ob3V0KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZV9oZWFkZXIoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqaXQpCit7CisJY2hhciAqaW4sICplcCwgKmNwOworCXN0cnVjdCBzdHJidWYgb3V0YnVmID0gU1RSQlVGX0lOSVQsICpkZWM7CisJc3RydWN0IHN0cmJ1ZiBjaGFyc2V0X3EgPSBTVFJCVUZfSU5JVCwgcGllY2VidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgZm91bmRfZXJyb3IgPSAxOyAvKiBwZXNzaW1pc20gKi8KKworCWluID0gaXQtPmJ1ZjsKKwl3aGlsZSAoaW4gLSBpdC0+YnVmIDw9IGl0LT5sZW4gJiYgKGVwID0gc3Ryc3RyKGluLCAiPT8iKSkgIT0gTlVMTCkgeworCQlpbnQgZW5jb2Rpbmc7CisJCXN0cmJ1Zl9yZXNldCgmY2hhcnNldF9xKTsKKwkJc3RyYnVmX3Jlc2V0KCZwaWVjZWJ1Zik7CisKKwkJaWYgKGluICE9IGVwKSB7CisJCQkvKgorCQkJICogV2UgYXJlIGFib3V0IHRvIHByb2Nlc3MgYW4gZW5jb2RlZC13b3JkCisJCQkgKiB0aGF0IGJlZ2lucyBhdCBlcCwgYnV0IHRoZXJlIGlzIHNvbWV0aGluZworCQkJICogYmVmb3JlIHRoZSBlbmNvZGVkIHdvcmQuCisJCQkgKi8KKwkJCWNoYXIgKnNjYW47CisJCQlmb3IgKHNjYW4gPSBpbjsgc2NhbiA8IGVwOyBzY2FuKyspCisJCQkJaWYgKCFpc3NwYWNlKCpzY2FuKSkKKwkJCQkJYnJlYWs7CisKKwkJCWlmIChzY2FuICE9IGVwIHx8IGluID09IGl0LT5idWYpIHsKKwkJCQkvKgorCQkJCSAqIFdlIHNob3VsZCBub3QgbG9zZSB0aGF0ICJzb21ldGhpbmciLAorCQkJCSAqIHVubGVzcyB3ZSBoYXZlIGp1c3QgcHJvY2Vzc2VkIGFuCisJCQkJICogZW5jb2RlZC13b3JkLCBhbmQgdGhlcmUgaXMgb25seSBMV1MKKwkJCQkgKiBiZWZvcmUgdGhlIG9uZSB3ZSBhcmUgYWJvdXQgdG8gcHJvY2Vzcy4KKwkJCQkgKi8KKwkJCQlzdHJidWZfYWRkKCZvdXRidWYsIGluLCBlcCAtIGluKTsKKwkJCX0KKwkJfQorCQkvKiBFLmcuCisJCSAqIGVwIDogIj0/aXNvLTIwMjItanA/Qj9HeVIuLi4/PSBmb28iCisJCSAqIGVwIDogIj0/SVNPLTg4NTktMT9RP0Zvbz1GQ2Jhcj89IGJheiIKKwkJICovCisJCWVwICs9IDI7CisKKwkJaWYgKGVwIC0gaXQtPmJ1ZiA+PSBpdC0+bGVuIHx8ICEoY3AgPSBzdHJjaHIoZXAsICc/JykpKQorCQkJZ290byByZWxlYXNlX3JldHVybjsKKworCQlpZiAoY3AgKyAzIC0gaXQtPmJ1ZiA+IGl0LT5sZW4pCisJCQlnb3RvIHJlbGVhc2VfcmV0dXJuOworCQlzdHJidWZfYWRkKCZjaGFyc2V0X3EsIGVwLCBjcCAtIGVwKTsKKworCQllbmNvZGluZyA9IGNwWzFdOworCQlpZiAoIWVuY29kaW5nIHx8IGNwWzJdICE9ICc/JykKKwkJCWdvdG8gcmVsZWFzZV9yZXR1cm47CisJCWVwID0gc3Ryc3RyKGNwICsgMywgIj89Iik7CisJCWlmICghZXApCisJCQlnb3RvIHJlbGVhc2VfcmV0dXJuOworCQlzdHJidWZfYWRkKCZwaWVjZWJ1ZiwgY3AgKyAzLCBlcCAtIGNwIC0gMyk7CisJCXN3aXRjaCAodG9sb3dlcihlbmNvZGluZykpIHsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gcmVsZWFzZV9yZXR1cm47CisJCWNhc2UgJ2InOgorCQkJZGVjID0gZGVjb2RlX2Jfc2VnbWVudCgmcGllY2VidWYpOworCQkJYnJlYWs7CisJCWNhc2UgJ3EnOgorCQkJZGVjID0gZGVjb2RlX3Ffc2VnbWVudCgmcGllY2VidWYsIDEpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNvbnZlcnRfdG9fdXRmOChtaSwgZGVjLCBjaGFyc2V0X3EuYnVmKSkKKwkJCWdvdG8gcmVsZWFzZV9yZXR1cm47CisKKwkJc3RyYnVmX2FkZGJ1Zigmb3V0YnVmLCBkZWMpOworCQlzdHJidWZfcmVsZWFzZShkZWMpOworCQlmcmVlKGRlYyk7CisJCWluID0gZXAgKyAyOworCX0KKwlzdHJidWZfYWRkc3RyKCZvdXRidWYsIGluKTsKKwlzdHJidWZfcmVzZXQoaXQpOworCXN0cmJ1Zl9hZGRidWYoaXQsICZvdXRidWYpOworCWZvdW5kX2Vycm9yID0gMDsKK3JlbGVhc2VfcmV0dXJuOgorCXN0cmJ1Zl9yZWxlYXNlKCZvdXRidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZjaGFyc2V0X3EpOworCXN0cmJ1Zl9yZWxlYXNlKCZwaWVjZWJ1Zik7CisKKwlpZiAoZm91bmRfZXJyb3IpCisJCW1pLT5pbnB1dF9lcnJvciA9IC0xOworfQorCitzdGF0aWMgaW50IGNoZWNrX2hlYWRlcihzdHJ1Y3QgbWFpbGluZm8gKm1pLAorCQkJY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSwKKwkJCXN0cnVjdCBzdHJidWYgKmhkcl9kYXRhW10sIGludCBvdmVyd3JpdGUpCit7CisJaW50IGksIHJldCA9IDAsIGxlbjsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBzZWFyY2ggZm9yIHRoZSBpbnRlcmVzdGluZyBwYXJ0cyAqLworCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7CisJCWludCBsZW4gPSBzdHJsZW4oaGVhZGVyW2ldKTsKKwkJaWYgKCghaGRyX2RhdGFbaV0gfHwgb3ZlcndyaXRlKSAmJiBjbXBfaGVhZGVyKGxpbmUsIGhlYWRlcltpXSkpIHsKKwkJCS8qIFVud3JhcCBpbmxpbmUgQiBhbmQgUSBlbmNvZGluZywgYW5kIG9wdGlvbmFsbHkKKwkJCSAqIG5vcm1hbGl6ZSB0aGUgbWV0YSBpbmZvcm1hdGlvbiB0byB1dGY4LgorCQkJICovCisJCQlzdHJidWZfYWRkKCZzYiwgbGluZS0+YnVmICsgbGVuICsgMiwgbGluZS0+bGVuIC0gbGVuIC0gMik7CisJCQlkZWNvZGVfaGVhZGVyKG1pLCAmc2IpOworCQkJaGFuZGxlX2hlYWRlcigmaGRyX2RhdGFbaV0sICZzYik7CisJCQlyZXQgPSAxOworCQkJZ290byBjaGVja19oZWFkZXJfb3V0OworCQl9CisJfQorCisJLyogQ29udGVudCBzdHVmZiAqLworCWlmIChjbXBfaGVhZGVyKGxpbmUsICJDb250ZW50LVR5cGUiKSkgeworCQlsZW4gPSBzdHJsZW4oIkNvbnRlbnQtVHlwZTogIik7CisJCXN0cmJ1Zl9hZGQoJnNiLCBsaW5lLT5idWYgKyBsZW4sIGxpbmUtPmxlbiAtIGxlbik7CisJCWRlY29kZV9oZWFkZXIobWksICZzYik7CisJCXN0cmJ1Zl9pbnNlcnQoJnNiLCAwLCAiQ29udGVudC1UeXBlOiAiLCBsZW4pOworCQloYW5kbGVfY29udGVudF90eXBlKG1pLCAmc2IpOworCQlyZXQgPSAxOworCQlnb3RvIGNoZWNrX2hlYWRlcl9vdXQ7CisJfQorCWlmIChjbXBfaGVhZGVyKGxpbmUsICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIikpIHsKKwkJbGVuID0gc3RybGVuKCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAiKTsKKwkJc3RyYnVmX2FkZCgmc2IsIGxpbmUtPmJ1ZiArIGxlbiwgbGluZS0+bGVuIC0gbGVuKTsKKwkJZGVjb2RlX2hlYWRlcihtaSwgJnNiKTsKKwkJaGFuZGxlX2NvbnRlbnRfdHJhbnNmZXJfZW5jb2RpbmcobWksICZzYik7CisJCXJldCA9IDE7CisJCWdvdG8gY2hlY2tfaGVhZGVyX291dDsKKwl9CisJaWYgKGNtcF9oZWFkZXIobGluZSwgIk1lc3NhZ2UtSWQiKSkgeworCQlsZW4gPSBzdHJsZW4oIk1lc3NhZ2UtSWQ6ICIpOworCQlzdHJidWZfYWRkKCZzYiwgbGluZS0+YnVmICsgbGVuLCBsaW5lLT5sZW4gLSBsZW4pOworCQlkZWNvZGVfaGVhZGVyKG1pLCAmc2IpOworCQlpZiAobWktPmFkZF9tZXNzYWdlX2lkKQorCQkJbWktPm1lc3NhZ2VfaWQgPSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7CisJCXJldCA9IDE7CisJCWdvdG8gY2hlY2tfaGVhZGVyX291dDsKKwl9CisKK2NoZWNrX2hlYWRlcl9vdXQ6CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJucyAxIGlmIHRoZSBnaXZlbiBsaW5lIG9yIGFueSBsaW5lIGJlZ2lubmluZyB3aXRoIHRoZSBnaXZlbiBsaW5lIGlzIGFuCisgKiBpbi1ib2R5IGhlYWRlciAodGhhdCBpcywgY2hlY2tfaGVhZGVyIHdpbGwgc3VjY2VlZCB3aGVuIHBhc3NlZAorICogbWktPnNfaGRyX2RhdGEpLgorICovCitzdGF0aWMgaW50IGlzX2luYm9keV9oZWFkZXIoY29uc3Qgc3RydWN0IG1haWxpbmZvICptaSwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKQorCQlpZiAoIW1pLT5zX2hkcl9kYXRhW2ldICYmIGNtcF9oZWFkZXIobGluZSwgaGVhZGVyW2ldKSkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfdHJhbnNmZXJfZW5jb2Rpbmcoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpyZXQ7CisKKwlzd2l0Y2ggKG1pLT50cmFuc2Zlcl9lbmNvZGluZykgeworCWNhc2UgVEVfUVA6CisJCXJldCA9IGRlY29kZV9xX3NlZ21lbnQobGluZSwgMCk7CisJCWJyZWFrOworCWNhc2UgVEVfQkFTRTY0OgorCQlyZXQgPSBkZWNvZGVfYl9zZWdtZW50KGxpbmUpOworCQlicmVhazsKKwljYXNlIFRFX0RPTlRDQVJFOgorCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJc3RyYnVmX3Jlc2V0KGxpbmUpOworCXN0cmJ1Zl9hZGRidWYobGluZSwgcmV0KTsKKwlzdHJidWZfcmVsZWFzZShyZXQpOworCWZyZWUocmV0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGF0Y2hicmVhayhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXNpemVfdCBpOworCisJLyogQmVnaW5uaW5nIG9mIGEgImRpZmYgLSIgaGVhZGVyPyAqLworCWlmIChzdGFydHNfd2l0aChsaW5lLT5idWYsICJkaWZmIC0iKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBDVlMgIkluZGV4OiAiIGxpbmU/ICovCisJaWYgKHN0YXJ0c193aXRoKGxpbmUtPmJ1ZiwgIkluZGV4OiAiKSkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqICItLS0gPGZpbGVuYW1lPiIgc3RhcnRzIHBhdGNoZXMgd2l0aG91dCBoZWFkZXJzCisJICogIi0tLTxzcD4qIiBpcyBhIG1hbnVhbCBzZXBhcmF0b3IKKwkgKi8KKwlpZiAobGluZS0+bGVuIDwgNCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RhcnRzX3dpdGgobGluZS0+YnVmLCAiLS0tIikpIHsKKwkJLyogc3BhY2UgZm9sbG93ZWQgYnkgYSBmaWxlbmFtZT8gKi8KKwkJaWYgKGxpbmUtPmJ1ZlszXSA9PSAnICcgJiYgIWlzc3BhY2UobGluZS0+YnVmWzRdKSkKKwkJCXJldHVybiAxOworCQkvKiBKdXN0IHdoaXRlc3BhY2U/ICovCisJCWZvciAoaSA9IDM7IGkgPCBsaW5lLT5sZW47IGkrKykgeworCQkJdW5zaWduZWQgY2hhciBjID0gbGluZS0+YnVmW2ldOworCQkJaWYgKGMgPT0gJ1xuJykKKwkJCQlyZXR1cm4gMTsKKwkJCWlmICghaXNzcGFjZShjKSkKKwkJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfc2Npc3NvcnNfbGluZShjb25zdCBjaGFyICpsaW5lKQoreworCWNvbnN0IGNoYXIgKmM7CisJaW50IHNjaXNzb3JzID0gMCwgZ2FwID0gMDsKKwljb25zdCBjaGFyICpmaXJzdF9ub25ibGFuayA9IE5VTEwsICpsYXN0X25vbmJsYW5rID0gTlVMTDsKKwlpbnQgdmlzaWJsZSwgcGVyZm9yYXRpb24gPSAwLCBpbl9wZXJmb3JhdGlvbiA9IDA7CisKKwlmb3IgKGMgPSBsaW5lOyAqYzsgYysrKSB7CisJCWlmIChpc3NwYWNlKCpjKSkgeworCQkJaWYgKGluX3BlcmZvcmF0aW9uKSB7CisJCQkJcGVyZm9yYXRpb24rKzsKKwkJCQlnYXArKzsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWxhc3Rfbm9uYmxhbmsgPSBjOworCQlpZiAoZmlyc3Rfbm9uYmxhbmsgPT0gTlVMTCkKKwkJCWZpcnN0X25vbmJsYW5rID0gYzsKKwkJaWYgKCpjID09ICctJykgeworCQkJaW5fcGVyZm9yYXRpb24gPSAxOworCQkJcGVyZm9yYXRpb24rKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgoIW1lbWNtcChjLCAiPjgiLCAyKSB8fCAhbWVtY21wKGMsICI4PCIsIDIpIHx8CisJCSAgICAgIW1lbWNtcChjLCAiPiUiLCAyKSB8fCAhbWVtY21wKGMsICIlPCIsIDIpKSkgeworCQkJaW5fcGVyZm9yYXRpb24gPSAxOworCQkJcGVyZm9yYXRpb24gKz0gMjsKKwkJCXNjaXNzb3JzICs9IDI7CisJCQljKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpbl9wZXJmb3JhdGlvbiA9IDA7CisJfQorCisJLyoKKwkgKiBUaGUgbWFyayBtdXN0IGJlIGF0IGxlYXN0IDggYnl0ZXMgbG9uZyAoZS5nLiAiLS0gPjggLS0iKS4KKwkgKiBFdmVuIHRob3VnaCB0aGVyZSBjYW4gYmUgYXJiaXRyYXJ5IGNydWZ0IG9uIHRoZSBzYW1lIGxpbmUKKwkgKiAoZS5nLiAiY3V0IGhlcmUiKSwgaW4gb3JkZXIgdG8gYXZvaWQgbWlzaWRlbnRpZmljYXRpb24sIHRoZQorCSAqIHBlcmZvcmF0aW9uIG11c3Qgb2NjdXB5IG1vcmUgdGhhbiBhIHRoaXJkIG9mIHRoZSB2aXNpYmxlCisJICogd2lkdGggb2YgdGhlIGxpbmUsIGFuZCBkYXNoZXMgYW5kIHNjaXNzb3JzIG11c3Qgb2NjdXB5IG1vcmUKKwkgKiB0aGFuIGhhbGYgb2YgdGhlIHBlcmZvcmF0aW9uLgorCSAqLworCisJaWYgKGZpcnN0X25vbmJsYW5rICYmIGxhc3Rfbm9uYmxhbmspCisJCXZpc2libGUgPSBsYXN0X25vbmJsYW5rIC0gZmlyc3Rfbm9uYmxhbmsgKyAxOworCWVsc2UKKwkJdmlzaWJsZSA9IDA7CisJcmV0dXJuIChzY2lzc29ycyAmJiA4IDw9IHZpc2libGUgJiYKKwkJdmlzaWJsZSA8IHBlcmZvcmF0aW9uICogMyAmJgorCQlnYXAgKiAyIDwgcGVyZm9yYXRpb24pOworfQorCitzdGF0aWMgdm9pZCBmbHVzaF9pbmJvZHlfaGVhZGVyX2FjY3VtKHN0cnVjdCBtYWlsaW5mbyAqbWkpCit7CisJaWYgKCFtaS0+aW5ib2R5X2hlYWRlcl9hY2N1bS5sZW4pCisJCXJldHVybjsKKwlpZiAoIWNoZWNrX2hlYWRlcihtaSwgJm1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtLCBtaS0+c19oZHJfZGF0YSwgMCkpCisJCUJVRygiaW5ib2R5X2hlYWRlcl9hY2N1bSwgaWYgbm90IGVtcHR5LCBtdXN0IGFsd2F5cyBjb250YWluIGEgdmFsaWQgaW4tYm9keSBoZWFkZXIiKTsKKwlzdHJidWZfcmVzZXQoJm1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtKTsKK30KKworc3RhdGljIGludCBjaGVja19pbmJvZHlfaGVhZGVyKHN0cnVjdCBtYWlsaW5mbyAqbWksIGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJaWYgKG1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtLmxlbiAmJgorCSAgICAobGluZS0+YnVmWzBdID09ICcgJyB8fCBsaW5lLT5idWZbMF0gPT0gJ1x0JykpIHsKKwkJaWYgKG1pLT51c2Vfc2Npc3NvcnMgJiYgaXNfc2Npc3NvcnNfbGluZShsaW5lLT5idWYpKSB7CisJCQkvKgorCQkJICogVGhpcyBpcyBhIHNjaXNzb3JzIGxpbmU7IGRvIG5vdCBjb25zaWRlciB0aGlzIGxpbmUKKwkJCSAqIGFzIGEgaGVhZGVyIGNvbnRpbnVhdGlvbiBsaW5lLgorCQkJICovCisJCQlmbHVzaF9pbmJvZHlfaGVhZGVyX2FjY3VtKG1pKTsKKwkJCXJldHVybiAwOworCQl9CisJCXN0cmJ1Zl9zdHJpcF9zdWZmaXgoJm1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtLCAiXG4iKTsKKwkJc3RyYnVmX2FkZGJ1ZigmbWktPmluYm9keV9oZWFkZXJfYWNjdW0sIGxpbmUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmbHVzaF9pbmJvZHlfaGVhZGVyX2FjY3VtKG1pKTsKKworCWlmIChzdGFydHNfd2l0aChsaW5lLT5idWYsICI+RnJvbSIpICYmIGlzc3BhY2UobGluZS0+YnVmWzVdKSkKKwkJcmV0dXJuIGlzX2Zvcm1hdF9wYXRjaF9zZXBhcmF0b3IobGluZS0+YnVmICsgMSwgbGluZS0+bGVuIC0gMSk7CisJaWYgKHN0YXJ0c193aXRoKGxpbmUtPmJ1ZiwgIltQQVRDSF0iKSAmJiBpc3NwYWNlKGxpbmUtPmJ1Zls3XSkpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKQorCQkJaWYgKCFzdHJjbXAoIlN1YmplY3QiLCBoZWFkZXJbaV0pKSB7CisJCQkJaGFuZGxlX2hlYWRlcigmbWktPnNfaGRyX2RhdGFbaV0sIGxpbmUpOworCQkJCXJldHVybiAxOworCQkJfQorCQlyZXR1cm4gMDsKKwl9CisJaWYgKGlzX2luYm9keV9oZWFkZXIobWksIGxpbmUpKSB7CisJCXN0cmJ1Zl9hZGRidWYoJm1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtLCBsaW5lKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9jb21taXRfbXNnKHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJYXNzZXJ0KCFtaS0+ZmlsdGVyX3N0YWdlKTsKKworCWlmIChtaS0+aGVhZGVyX3N0YWdlKSB7CisJCWlmICghbGluZS0+bGVuIHx8IChsaW5lLT5sZW4gPT0gMSAmJiBsaW5lLT5idWZbMF0gPT0gJ1xuJykpIHsKKwkJCWlmIChtaS0+aW5ib2R5X2hlYWRlcl9hY2N1bS5sZW4pIHsKKwkJCQlmbHVzaF9pbmJvZHlfaGVhZGVyX2FjY3VtKG1pKTsKKwkJCQltaS0+aGVhZGVyX3N0YWdlID0gMDsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKG1pLT51c2VfaW5ib2R5X2hlYWRlcnMgJiYgbWktPmhlYWRlcl9zdGFnZSkgeworCQltaS0+aGVhZGVyX3N0YWdlID0gY2hlY2tfaW5ib2R5X2hlYWRlcihtaSwgbGluZSk7CisJCWlmIChtaS0+aGVhZGVyX3N0YWdlKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlCisJCS8qIE9ubHkgdHJpbSB0aGUgZmlyc3QgKGJsYW5rKSBsaW5lIG9mIHRoZSBjb21taXQgbWVzc2FnZQorCQkgKiB3aGVuIGlnbm9yaW5nIGluLWJvZHkgaGVhZGVycy4KKwkJICovCisJCW1pLT5oZWFkZXJfc3RhZ2UgPSAwOworCisJLyogbm9ybWFsaXplIHRoZSBsb2cgbWVzc2FnZSB0byBVVEYtOC4gKi8KKwlpZiAoY29udmVydF90b191dGY4KG1pLCBsaW5lLCBtaS0+Y2hhcnNldC5idWYpKQorCQlyZXR1cm4gMDsgLyogbWktPmlucHV0X2Vycm9yIGFscmVhZHkgc2V0ICovCisKKwlpZiAobWktPnVzZV9zY2lzc29ycyAmJiBpc19zY2lzc29yc19saW5lKGxpbmUtPmJ1ZikpIHsKKwkJaW50IGk7CisKKwkJc3RyYnVmX3NldGxlbigmbWktPmxvZ19tZXNzYWdlLCAwKTsKKwkJbWktPmhlYWRlcl9zdGFnZSA9IDE7CisKKwkJLyoKKwkJICogV2UgbWF5IGhhdmUgYWxyZWFkeSByZWFkICJzZWNvbmRhcnkgaGVhZGVycyI7IHB1cmdlCisJCSAqIHRoZW0gdG8gZ2l2ZSBvdXJzZWx2ZXMgYSBjbGVhbiByZXN0YXJ0LgorCQkgKi8KKwkJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspIHsKKwkJCWlmIChtaS0+c19oZHJfZGF0YVtpXSkKKwkJCQlzdHJidWZfcmVsZWFzZShtaS0+c19oZHJfZGF0YVtpXSk7CisJCQltaS0+c19oZHJfZGF0YVtpXSA9IE5VTEw7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHBhdGNoYnJlYWsobGluZSkpIHsKKwkJaWYgKG1pLT5tZXNzYWdlX2lkKQorCQkJc3RyYnVmX2FkZGYoJm1pLT5sb2dfbWVzc2FnZSwKKwkJCQkgICAgIk1lc3NhZ2UtSWQ6ICVzXG4iLCBtaS0+bWVzc2FnZV9pZCk7CisJCXJldHVybiAxOworCX0KKworCXN0cmJ1Zl9hZGRidWYoJm1pLT5sb2dfbWVzc2FnZSwgbGluZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9wYXRjaChzdHJ1Y3QgbWFpbGluZm8gKm1pLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCWZ3cml0ZShsaW5lLT5idWYsIDEsIGxpbmUtPmxlbiwgbWktPnBhdGNoZmlsZSk7CisJbWktPnBhdGNoX2xpbmVzKys7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9maWx0ZXIoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzd2l0Y2ggKG1pLT5maWx0ZXJfc3RhZ2UpIHsKKwljYXNlIDA6CisJCWlmICghaGFuZGxlX2NvbW1pdF9tc2cobWksIGxpbmUpKQorCQkJYnJlYWs7CisJCW1pLT5maWx0ZXJfc3RhZ2UrKzsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIDE6CisJCWhhbmRsZV9wYXRjaChtaSwgbGluZSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBpc19yZmMyODIyX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCS8qCisJICogVGhlIHNlY3Rpb24gdGhhdCBkZWZpbmVzIHRoZSBsb29zZXN0IHBvc3NpYmxlCisJICogZmllbGQgbmFtZSBpcyAiMy42LjggT3B0aW9uYWwgZmllbGRzIi4KKwkgKgorCSAqIG9wdGlvbmFsLWZpZWxkID0gZmllbGQtbmFtZSAiOiIgdW5zdHJ1Y3R1cmVkIENSTEYKKwkgKiBmaWVsZC1uYW1lID0gMSpmdGV4dAorCSAqIGZ0ZXh0ID0gJWQzMy01NyAvICU1OS0xMjYKKwkgKi8KKwlpbnQgY2g7CisJY2hhciAqY3AgPSBsaW5lLT5idWY7CisKKwkvKiBDb3VudCBtYm94IEZyb20gaGVhZGVycyBhcyBoZWFkZXJzICovCisJaWYgKHN0YXJ0c193aXRoKGNwLCAiRnJvbSAiKSB8fCBzdGFydHNfd2l0aChjcCwgIj5Gcm9tICIpKQorCQlyZXR1cm4gMTsKKworCXdoaWxlICgoY2ggPSAqY3ArKykpIHsKKwkJaWYgKGNoID09ICc6JykKKwkJCXJldHVybiAxOworCQlpZiAoKDMzIDw9IGNoICYmIGNoIDw9IDU3KSB8fAorCQkgICAgKDU5IDw9IGNoICYmIGNoIDw9IDEyNikpCisJCQljb250aW51ZTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfb25lX2hlYWRlcl9saW5lKHN0cnVjdCBzdHJidWYgKmxpbmUsIEZJTEUgKmluKQoreworCXN0cnVjdCBzdHJidWYgY29udGludWF0aW9uID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBHZXQgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGxpbmUuICovCisJaWYgKHN0cmJ1Zl9nZXRsaW5lX2xmKGxpbmUsIGluKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElzIGl0IGFuIGVtcHR5IGxpbmUgb3Igbm90IGEgdmFsaWQgcmZjMjgyMiBoZWFkZXI/CisJICogSWYgc28sIHN0b3AgaGVyZSwgYW5kIHJldHVybiBmYWxzZSAoIm5vdCBhIGhlYWRlciIpCisJICovCisJc3RyYnVmX3J0cmltKGxpbmUpOworCWlmICghbGluZS0+bGVuIHx8ICFpc19yZmMyODIyX2hlYWRlcihsaW5lKSkgeworCQkvKiBSZS1hZGQgdGhlIG5ld2xpbmUgKi8KKwkJc3RyYnVmX2FkZGNoKGxpbmUsICdcbicpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE5vdyB3ZSBuZWVkIHRvIGVhdCBhbGwgdGhlIGNvbnRpbnVhdGlvbiBsaW5lcy4uCisJICogWXVjaywgMjgyMiBoZWFkZXIgImZvbGRpbmciCisJICovCisJZm9yICg7OykgeworCQlpbnQgcGVlazsKKworCQlwZWVrID0gZmdldGMoaW4pOworCQlpZiAocGVlayA9PSBFT0YpCisJCQlicmVhazsKKwkJdW5nZXRjKHBlZWssIGluKTsKKwkJaWYgKHBlZWsgIT0gJyAnICYmIHBlZWsgIT0gJ1x0JykKKwkJCWJyZWFrOworCQlpZiAoc3RyYnVmX2dldGxpbmVfbGYoJmNvbnRpbnVhdGlvbiwgaW4pKQorCQkJYnJlYWs7CisJCWNvbnRpbnVhdGlvbi5idWZbMF0gPSAnICc7CisJCXN0cmJ1Zl9ydHJpbSgmY29udGludWF0aW9uKTsKKwkJc3RyYnVmX2FkZGJ1ZihsaW5lLCAmY29udGludWF0aW9uKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmNvbnRpbnVhdGlvbik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmaW5kX2JvdW5kYXJ5KHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJd2hpbGUgKCFzdHJidWZfZ2V0bGluZV9sZihsaW5lLCBtaS0+aW5wdXQpKSB7CisJCWlmICgqKG1pLT5jb250ZW50X3RvcCkgJiYgaXNfbXVsdGlwYXJ0X2JvdW5kYXJ5KG1pLCBsaW5lKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVfYm91bmRhcnkoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG5ld2xpbmUgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRjaCgmbmV3bGluZSwgJ1xuJyk7CithZ2FpbjoKKwlpZiAobGluZS0+bGVuID49ICgqKG1pLT5jb250ZW50X3RvcCkpLT5sZW4gKyAyICYmCisJICAgICFtZW1jbXAobGluZS0+YnVmICsgKCoobWktPmNvbnRlbnRfdG9wKSktPmxlbiwgIi0tIiwgMikpIHsKKwkJLyogd2UgaGl0IGFuIGVuZCBib3VuZGFyeSAqLworCQkvKiBwb3AgdGhlIGN1cnJlbnQgYm91bmRhcnkgb2ZmIHRoZSBzdGFjayAqLworCQlzdHJidWZfcmVsZWFzZSgqKG1pLT5jb250ZW50X3RvcCkpOworCQlGUkVFX0FORF9OVUxMKCoobWktPmNvbnRlbnRfdG9wKSk7CisKKwkJLyogdGVjaG5pY2FsbHkgd29uJ3QgaGFwcGVuIGFzIGlzX211bHRpcGFydF9ib3VuZGFyeSgpCisJCSAgIHdpbGwgZmFpbCBmaXJzdC4gIEJ1dCBqdXN0IGluIGNhc2UuLgorCQkgKi8KKwkJaWYgKC0tbWktPmNvbnRlbnRfdG9wIDwgbWktPmNvbnRlbnQpIHsKKwkJCWVycm9yKCJEZXRlY3RlZCBtaXNtYXRjaGVkIGJvdW5kYXJpZXMsIGNhbid0IHJlY292ZXIiKTsKKwkJCW1pLT5pbnB1dF9lcnJvciA9IC0xOworCQkJbWktPmNvbnRlbnRfdG9wID0gbWktPmNvbnRlbnQ7CisJCQlzdHJidWZfcmVsZWFzZSgmbmV3bGluZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQloYW5kbGVfZmlsdGVyKG1pLCAmbmV3bGluZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZuZXdsaW5lKTsKKwkJaWYgKG1pLT5pbnB1dF9lcnJvcikKKwkJCXJldHVybiAwOworCisJCS8qIHNraXAgdG8gdGhlIG5leHQgYm91bmRhcnkgKi8KKwkJaWYgKCFmaW5kX2JvdW5kYXJ5KG1pLCBsaW5lKSkKKwkJCXJldHVybiAwOworCQlnb3RvIGFnYWluOworCX0KKworCS8qIHNldCBzb21lIGRlZmF1bHRzICovCisJbWktPnRyYW5zZmVyX2VuY29kaW5nID0gVEVfRE9OVENBUkU7CisJc3RyYnVmX3Jlc2V0KCZtaS0+Y2hhcnNldCk7CisKKwkvKiBzbHVycCBpbiB0aGlzIHNlY3Rpb24ncyBpbmZvICovCisJd2hpbGUgKHJlYWRfb25lX2hlYWRlcl9saW5lKGxpbmUsIG1pLT5pbnB1dCkpCisJCWNoZWNrX2hlYWRlcihtaSwgbGluZSwgbWktPnBfaGRyX2RhdGEsIDApOworCisJc3RyYnVmX3JlbGVhc2UoJm5ld2xpbmUpOworCS8qIHJlcGxlbmlzaCBsaW5lICovCisJaWYgKHN0cmJ1Zl9nZXRsaW5lX2xmKGxpbmUsIG1pLT5pbnB1dCkpCisJCXJldHVybiAwOworCXN0cmJ1Zl9hZGRjaChsaW5lLCAnXG4nKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2JvZHkoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHByZXYgPSBTVFJCVUZfSU5JVDsKKworCS8qIFNraXAgdXAgdG8gdGhlIGZpcnN0IGJvdW5kYXJ5ICovCisJaWYgKCoobWktPmNvbnRlbnRfdG9wKSkgeworCQlpZiAoIWZpbmRfYm91bmRhcnkobWksIGxpbmUpKQorCQkJZ290byBoYW5kbGVfYm9keV9vdXQ7CisJfQorCisJZG8geworCQkvKiBwcm9jZXNzIGFueSBib3VuZGFyeSBsaW5lcyAqLworCQlpZiAoKihtaS0+Y29udGVudF90b3ApICYmIGlzX211bHRpcGFydF9ib3VuZGFyeShtaSwgbGluZSkpIHsKKwkJCS8qIGZsdXNoIGFueSBsZWZ0b3ZlciAqLworCQkJaWYgKHByZXYubGVuKSB7CisJCQkJaGFuZGxlX2ZpbHRlcihtaSwgJnByZXYpOworCQkJCXN0cmJ1Zl9yZXNldCgmcHJldik7CisJCQl9CisJCQlpZiAoIWhhbmRsZV9ib3VuZGFyeShtaSwgbGluZSkpCisJCQkJZ290byBoYW5kbGVfYm9keV9vdXQ7CisJCX0KKworCQkvKiBVbndyYXAgdHJhbnNmZXIgZW5jb2RpbmcgKi8KKwkJZGVjb2RlX3RyYW5zZmVyX2VuY29kaW5nKG1pLCBsaW5lKTsKKworCQlzd2l0Y2ggKG1pLT50cmFuc2Zlcl9lbmNvZGluZykgeworCQljYXNlIFRFX0JBU0U2NDoKKwkJY2FzZSBURV9RUDoKKwkJeworCQkJc3RydWN0IHN0cmJ1ZiAqKmxpbmVzLCAqKml0LCAqc2I7CisKKwkJCS8qIFByZXBlbmQgYW55IHByZXZpb3VzIHBhcnRpYWwgbGluZXMgKi8KKwkJCXN0cmJ1Zl9pbnNlcnQobGluZSwgMCwgcHJldi5idWYsIHByZXYubGVuKTsKKwkJCXN0cmJ1Zl9yZXNldCgmcHJldik7CisKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGEgZGVjb2RlZCBsaW5lIHRoYXQgbWF5IGNvbnRhaW4KKwkJCSAqIG11bHRpcGxlIG5ldyBsaW5lcy4gIFBhc3Mgb25seSBvbmUgY2h1bmsKKwkJCSAqIGF0IGEgdGltZSB0byBoYW5kbGVfZmlsdGVyKCkKKwkJCSAqLworCQkJbGluZXMgPSBzdHJidWZfc3BsaXQobGluZSwgJ1xuJyk7CisJCQlmb3IgKGl0ID0gbGluZXM7IChzYiA9ICppdCk7IGl0KyspIHsKKwkJCQlpZiAoKihpdCArIDEpID09IE5VTEwpIC8qIFRoZSBsYXN0IGxpbmUgKi8KKwkJCQkJaWYgKHNiLT5idWZbc2ItPmxlbiAtIDFdICE9ICdcbicpIHsKKwkJCQkJCS8qIFBhcnRpYWwgbGluZSwgc2F2ZSBpdCBmb3IgbGF0ZXIuICovCisJCQkJCQlzdHJidWZfYWRkYnVmKCZwcmV2LCBzYik7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCWhhbmRsZV9maWx0ZXIobWksIHNiKTsKKwkJCX0KKwkJCS8qCisJCQkgKiBUaGUgcGFydGlhbCBjaHVuayBpcyBzYXZlZCBpbiAicHJldiIgYW5kIHdpbGwgYmUKKwkJCSAqIGFwcGVuZGVkIGJ5IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiByZWFkX2xpbmVfd2l0aF9udWwoKS4KKwkJCSAqLworCQkJc3RyYnVmX2xpc3RfZnJlZShsaW5lcyk7CisJCQlicmVhazsKKwkJfQorCQlkZWZhdWx0OgorCQkJaGFuZGxlX2ZpbHRlcihtaSwgbGluZSk7CisJCX0KKworCQlpZiAobWktPmlucHV0X2Vycm9yKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoIXN0cmJ1Zl9nZXR3aG9sZWxpbmUobGluZSwgbWktPmlucHV0LCAnXG4nKSk7CisKKwlmbHVzaF9pbmJvZHlfaGVhZGVyX2FjY3VtKG1pKTsKKworaGFuZGxlX2JvZHlfb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZwcmV2KTsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0X2hlYWRlcl9saW5lcyhGSUxFICpmb3V0LCBjb25zdCBjaGFyICpoZHIsIGNvbnN0IHN0cnVjdCBzdHJidWYgKmRhdGEpCit7CisJY29uc3QgY2hhciAqc3AgPSBkYXRhLT5idWY7CisJd2hpbGUgKDEpIHsKKwkJY2hhciAqZXAgPSBzdHJjaHIoc3AsICdcbicpOworCQlpbnQgbGVuOworCQlpZiAoIWVwKQorCQkJbGVuID0gc3RybGVuKHNwKTsKKwkJZWxzZQorCQkJbGVuID0gZXAgLSBzcDsKKwkJZnByaW50Zihmb3V0LCAiJXM6ICUuKnNcbiIsIGhkciwgbGVuLCBzcCk7CisJCWlmICghZXApCisJCQlicmVhazsKKwkJc3AgPSBlcCArIDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfaW5mbyhzdHJ1Y3QgbWFpbGluZm8gKm1pKQoreworCXN0cnVjdCBzdHJidWYgKmhkcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7CisJCS8qIG9ubHkgcHJpbnQgaW5ib2R5IGhlYWRlcnMgaWYgd2Ugb3V0cHV0IGEgcGF0Y2ggZmlsZSAqLworCQlpZiAobWktPnBhdGNoX2xpbmVzICYmIG1pLT5zX2hkcl9kYXRhW2ldKQorCQkJaGRyID0gbWktPnNfaGRyX2RhdGFbaV07CisJCWVsc2UgaWYgKG1pLT5wX2hkcl9kYXRhW2ldKQorCQkJaGRyID0gbWktPnBfaGRyX2RhdGFbaV07CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCisJCWlmICghc3RyY21wKGhlYWRlcltpXSwgIlN1YmplY3QiKSkgeworCQkJaWYgKCFtaS0+a2VlcF9zdWJqZWN0KSB7CisJCQkJY2xlYW51cF9zdWJqZWN0KG1pLCBoZHIpOworCQkJCWNsZWFudXBfc3BhY2UoaGRyKTsKKwkJCX0KKwkJCW91dHB1dF9oZWFkZXJfbGluZXMobWktPm91dHB1dCwgIlN1YmplY3QiLCBoZHIpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoaGVhZGVyW2ldLCAiRnJvbSIpKSB7CisJCQljbGVhbnVwX3NwYWNlKGhkcik7CisJCQloYW5kbGVfZnJvbShtaSwgaGRyKTsKKwkJCWZwcmludGYobWktPm91dHB1dCwgIkF1dGhvcjogJXNcbiIsIG1pLT5uYW1lLmJ1Zik7CisJCQlmcHJpbnRmKG1pLT5vdXRwdXQsICJFbWFpbDogJXNcbiIsIG1pLT5lbWFpbC5idWYpOworCQl9IGVsc2UgeworCQkJY2xlYW51cF9zcGFjZShoZHIpOworCQkJZnByaW50ZihtaS0+b3V0cHV0LCAiJXM6ICVzXG4iLCBoZWFkZXJbaV0sIGhkci0+YnVmKTsKKwkJfQorCX0KKwlmcHJpbnRmKG1pLT5vdXRwdXQsICJcbiIpOworfQorCitpbnQgbWFpbGluZm8oc3RydWN0IG1haWxpbmZvICptaSwgY29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFyICpwYXRjaCkKK3sKKwlGSUxFICpjbWl0bXNnOworCWludCBwZWVrOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCisJY21pdG1zZyA9IGZvcGVuKG1zZywgInciKTsKKwlpZiAoIWNtaXRtc2cpIHsKKwkJcGVycm9yKG1zZyk7CisJCXJldHVybiAtMTsKKwl9CisJbWktPnBhdGNoZmlsZSA9IGZvcGVuKHBhdGNoLCAidyIpOworCWlmICghbWktPnBhdGNoZmlsZSkgeworCQlwZXJyb3IocGF0Y2gpOworCQlmY2xvc2UoY21pdG1zZyk7CisJCXJldHVybiAtMTsKKwl9CisKKwltaS0+cF9oZHJfZGF0YSA9IHhjYWxsb2MoTUFYX0hEUl9QQVJTRUQsIHNpemVvZigqKG1pLT5wX2hkcl9kYXRhKSkpOworCW1pLT5zX2hkcl9kYXRhID0geGNhbGxvYyhNQVhfSERSX1BBUlNFRCwgc2l6ZW9mKCoobWktPnNfaGRyX2RhdGEpKSk7CisKKwlkbyB7CisJCXBlZWsgPSBmZ2V0YyhtaS0+aW5wdXQpOworCQlpZiAocGVlayA9PSBFT0YpIHsKKwkJCWZjbG9zZShjbWl0bXNnKTsKKwkJCXJldHVybiBlcnJvcigiZW1wdHkgcGF0Y2g6ICclcyciLCBwYXRjaCk7CisJCX0KKwl9IHdoaWxlIChpc3NwYWNlKHBlZWspKTsKKwl1bmdldGMocGVlaywgbWktPmlucHV0KTsKKworCS8qIHByb2Nlc3MgdGhlIGVtYWlsIGhlYWRlciAqLworCXdoaWxlIChyZWFkX29uZV9oZWFkZXJfbGluZSgmbGluZSwgbWktPmlucHV0KSkKKwkJY2hlY2tfaGVhZGVyKG1pLCAmbGluZSwgbWktPnBfaGRyX2RhdGEsIDEpOworCisJaGFuZGxlX2JvZHkobWksICZsaW5lKTsKKwlmd3JpdGUobWktPmxvZ19tZXNzYWdlLmJ1ZiwgMSwgbWktPmxvZ19tZXNzYWdlLmxlbiwgY21pdG1zZyk7CisJZmNsb3NlKGNtaXRtc2cpOworCWZjbG9zZShtaS0+cGF0Y2hmaWxlKTsKKworCWhhbmRsZV9pbmZvKG1pKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJcmV0dXJuIG1pLT5pbnB1dF9lcnJvcjsKK30KKworc3RhdGljIGludCBnaXRfbWFpbGluZm9fY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKm1pXykKK3sKKwlzdHJ1Y3QgbWFpbGluZm8gKm1pID0gbWlfOworCisJaWYgKCFzdGFydHNfd2l0aCh2YXIsICJtYWlsaW5mby4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBOVUxMKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJtYWlsaW5mby5zY2lzc29ycyIpKSB7CisJCW1pLT51c2Vfc2Npc3NvcnMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwkvKiBwZXJoYXBzIG90aGVycyBoZXJlICovCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2V0dXBfbWFpbGluZm8oc3RydWN0IG1haWxpbmZvICptaSkKK3sKKwltZW1zZXQobWksIDAsIHNpemVvZigqbWkpKTsKKwlzdHJidWZfaW5pdCgmbWktPm5hbWUsIDApOworCXN0cmJ1Zl9pbml0KCZtaS0+ZW1haWwsIDApOworCXN0cmJ1Zl9pbml0KCZtaS0+Y2hhcnNldCwgMCk7CisJc3RyYnVmX2luaXQoJm1pLT5sb2dfbWVzc2FnZSwgMCk7CisJc3RyYnVmX2luaXQoJm1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtLCAwKTsKKwltaS0+aGVhZGVyX3N0YWdlID0gMTsKKwltaS0+dXNlX2luYm9keV9oZWFkZXJzID0gMTsKKwltaS0+Y29udGVudF90b3AgPSBtaS0+Y29udGVudDsKKwlnaXRfY29uZmlnKGdpdF9tYWlsaW5mb19jb25maWcsIG1pKTsKK30KKwordm9pZCBjbGVhcl9tYWlsaW5mbyhzdHJ1Y3QgbWFpbGluZm8gKm1pKQoreworCWludCBpOworCisJc3RyYnVmX3JlbGVhc2UoJm1pLT5uYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmbWktPmVtYWlsKTsKKwlzdHJidWZfcmVsZWFzZSgmbWktPmNoYXJzZXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZtaS0+aW5ib2R5X2hlYWRlcl9hY2N1bSk7CisJZnJlZShtaS0+bWVzc2FnZV9pZCk7CisKKwlpZiAobWktPnBfaGRyX2RhdGEpCisJCWZvciAoaSA9IDA7IG1pLT5wX2hkcl9kYXRhW2ldOyBpKyspCisJCQlzdHJidWZfcmVsZWFzZShtaS0+cF9oZHJfZGF0YVtpXSk7CisJZnJlZShtaS0+cF9oZHJfZGF0YSk7CisJaWYgKG1pLT5zX2hkcl9kYXRhKQorCQlmb3IgKGkgPSAwOyBtaS0+c19oZHJfZGF0YVtpXTsgaSsrKQorCQkJc3RyYnVmX3JlbGVhc2UobWktPnNfaGRyX2RhdGFbaV0pOworCWZyZWUobWktPnNfaGRyX2RhdGEpOworCisJd2hpbGUgKG1pLT5jb250ZW50IDwgbWktPmNvbnRlbnRfdG9wKSB7CisJCWZyZWUoKihtaS0+Y29udGVudF90b3ApKTsKKwkJbWktPmNvbnRlbnRfdG9wLS07CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJm1pLT5sb2dfbWVzc2FnZSk7Cit9CmRpZmYgLS1naXQgYS90L3Q0MjU2LzEvcGF0Y2ggYi90L3Q0MjU2LzEvcGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQwZDhiMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTYvMS9wYXRjaApAQCAtMCwwICsxLDEyOSBAQAorRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIXSBtYWlsaW5mbzogc3VwcG9ydCBmb3JtYXQ9Zmxvd2VkCitNZXNzYWdlLUlEOiA8YWFhYWFhYWEtYWFhYS1hYWFhLWFhYWEtYWFhYWFhYWFhYWFhQGV4YW1wbGUuY29tPgorRGF0ZTogU2F0LCAyNSBBdWcgMjAxOCAyMjowNDo1MCArMDIwMAorVXNlci1BZ2VudDogTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV09XNjQ7IHJ2OjYwLjApIEdlY2tvLzIwMTAwMTAxCisgVGh1bmRlcmJpcmQvNjAuMAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODsgZm9ybWF0PWZsb3dlZAorQ29udGVudC1MYW5ndWFnZTogZW4tVVMKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworLS0tCisgIG1haWxpbmZvLmMgfCA2NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KKyAgMSBmaWxlIGNoYW5nZWQsIDYyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tYWlsaW5mby5jIGIvbWFpbGluZm8uYworaW5kZXggMzI4MWEzN2Q1MS4uYjM5NWFkYmRmMiAxMDA2NDQKKy0tLSBhL21haWxpbmZvLmMKKysrKyBiL21haWxpbmZvLmMKK0BAIC0yMzcsMTEgKzIzNywyMiBAQCBzdGF0aWMgaW50IHNsdXJwX2F0dHIoY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hhciAKKypuYW1lLCBzdHJ1Y3Qgc3RyYnVmICphdHRyKQorICAJcmV0dXJuIDE7CisgIH0KKworK3N0YXRpYyBpbnQgaGFzX2F0dHJfdmFsdWUoY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgCitjaGFyICp2YWx1ZSkKKyt7CisrCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKysJaW50IHJjID0gc2x1cnBfYXR0cihsaW5lLCBuYW1lLCAmc2IpICYmICFzdHJjYXNlY21wKHNiLmJ1ZiwgdmFsdWUpOworKwlzdHJidWZfcmVsZWFzZSgmc2IpOworKwlyZXR1cm4gcmM7CisrfQorKworICBzdGF0aWMgdm9pZCBoYW5kbGVfY29udGVudF90eXBlKHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCisgIHsKKyAgCXN0cnVjdCBzdHJidWYgKmJvdW5kYXJ5ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0cmJ1ZikpOworICAJc3RyYnVmX2luaXQoYm91bmRhcnksIGxpbmUtPmxlbik7CisKKysJbWktPmZvcm1hdF9mbG93ZWQgPSBoYXNfYXR0cl92YWx1ZShsaW5lLT5idWYsICJmb3JtYXQ9IiwgImZsb3dlZCIpOworKwltaS0+ZGVsc3AgPSBoYXNfYXR0cl92YWx1ZShsaW5lLT5idWYsICJkZWxzcD0iLCAieWVzIik7CisrCisgIAlpZiAoc2x1cnBfYXR0cihsaW5lLT5idWYsICJib3VuZGFyeT0iLCBib3VuZGFyeSkpIHsKKyAgCQlzdHJidWZfaW5zZXJ0KGJvdW5kYXJ5LCAwLCAiLS0iLCAyKTsKKyAgCQlpZiAoKyttaS0+Y29udGVudF90b3AgPj0gJm1pLT5jb250ZW50W01BWF9CT1VOREFSSUVTXSkgeworQEAgLTk2NCw2ICs5NzUsNTIgQEAgc3RhdGljIGludCBoYW5kbGVfYm91bmRhcnkoc3RydWN0IG1haWxpbmZvICptaSwgCitzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorICAJcmV0dXJuIDE7CisgIH0KKworK3N0YXRpYyB2b2lkIGhhbmRsZV9maWx0ZXJfZmxvd2VkKHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUsCisrCQkJCSBzdHJ1Y3Qgc3RyYnVmICpwcmV2KQorK3sKKysJc2l6ZV90IGxlbiA9IGxpbmUtPmxlbjsKKysJY29uc3QgY2hhciAqcmVzdDsKKysKKysJaWYgKCFtaS0+Zm9ybWF0X2Zsb3dlZCkgeworKwkJaGFuZGxlX2ZpbHRlcihtaSwgbGluZSk7CisrCQlyZXR1cm47CisrCX0KKysKKysJaWYgKGxpbmUtPmJ1ZltsZW4gLSAxXSA9PSAnXG4nKSB7CisrCQlsZW4tLTsKKysJCWlmIChsZW4gJiYgbGluZS0+YnVmW2xlbiAtIDFdID09ICdccicpCisrCQkJbGVuLS07CisrCX0KKysKKysJLyogS2VlcCBzaWduYXR1cmUgc2VwYXJhdG9yIGFzLWlzLiAqLworKwlpZiAoc2tpcF9wcmVmaXgobGluZS0+YnVmLCAiLS0gIiwgJnJlc3QpICYmIHJlc3QgLSBsaW5lLT5idWYgPT0gbGVuKSB7CisrCQlpZiAocHJldi0+bGVuKSB7CisrCQkJaGFuZGxlX2ZpbHRlcihtaSwgcHJldik7CisrCQkJc3RyYnVmX3Jlc2V0KHByZXYpOworKwkJfQorKwkJaGFuZGxlX2ZpbHRlcihtaSwgbGluZSk7CisrCQlyZXR1cm47CisrCX0KKysKKysJLyogVW5zdHVmZiBzcGFjZS1zdHVmZmVkIGxpbmUuICovCisrCWlmIChsZW4gJiYgbGluZS0+YnVmWzBdID09ICcgJykgeworKwkJc3RyYnVmX3JlbW92ZShsaW5lLCAwLCAxKTsKKysJCWxlbi0tOworKwl9CisrCisrCS8qIFNhdmUgZmxvd2VkIGxpbmUgZm9yIGxhdGVyLCBidXQgd2l0aG91dCB0aGUgc29mdCBsaW5lIGJyZWFrLiAqLworKwlpZiAobGVuICYmIGxpbmUtPmJ1ZltsZW4gLSAxXSA9PSAnICcpIHsKKysJCXN0cmJ1Zl9hZGQocHJldiwgbGluZS0+YnVmLCBsZW4gLSAhIW1pLT5kZWxzcCk7CisrCQlyZXR1cm47CisrCX0KKysKKysJLyogUHJlcGVuZCBhbnkgcHJldmlvdXMgcGFydGlhbCBsaW5lcyAqLworKwlzdHJidWZfaW5zZXJ0KGxpbmUsIDAsIHByZXYtPmJ1ZiwgcHJldi0+bGVuKTsKKysJc3RyYnVmX3Jlc2V0KHByZXYpOworKworKwloYW5kbGVfZmlsdGVyKG1pLCBsaW5lKTsKKyt9CisrCisgIHN0YXRpYyB2b2lkIGhhbmRsZV9ib2R5KHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCisgIHsKKyAgCXN0cnVjdCBzdHJidWYgcHJldiA9IFNUUkJVRl9JTklUOworQEAgLTEwMTIsNyArMTA2OSw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9ib2R5KHN0cnVjdCBtYWlsaW5mbyAqbWksIAorc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyAgCQkJCQkJc3RyYnVmX2FkZGJ1ZigmcHJldiwgc2IpOworICAJCQkJCQlicmVhazsKKyAgCQkJCQl9CistCQkJCWhhbmRsZV9maWx0ZXIobWksIHNiKTsKKysJCQkJaGFuZGxlX2ZpbHRlcl9mbG93ZWQobWksIHNiLCAmcHJldik7CisgIAkJCX0KKyAgCQkJLyoKKyAgCQkJICogVGhlIHBhcnRpYWwgY2h1bmsgaXMgc2F2ZWQgaW4gInByZXYiIGFuZCB3aWxsIGJlCitAQCAtMTAyMiwxMyArMTA3OSwxNiBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfYm9keShzdHJ1Y3QgbWFpbGluZm8gKm1pLCAKK3N0cnVjdCBzdHJidWYgKmxpbmUpCisgIAkJCWJyZWFrOworICAJCX0KKyAgCQlkZWZhdWx0OgorLQkJCWhhbmRsZV9maWx0ZXIobWksIGxpbmUpOworKwkJCWhhbmRsZV9maWx0ZXJfZmxvd2VkKG1pLCBsaW5lLCAmcHJldik7CisgIAkJfQorCisgIAkJaWYgKG1pLT5pbnB1dF9lcnJvcikKKyAgCQkJYnJlYWs7CisgIAl9IHdoaWxlICghc3RyYnVmX2dldHdob2xlbGluZShsaW5lLCBtaS0+aW5wdXQsICdcbicpKTsKKworKwlpZiAocHJldi5sZW4pCisrCQloYW5kbGVfZmlsdGVyKG1pLCAmcHJldik7CisrCisgIAlmbHVzaF9pbmJvZHlfaGVhZGVyX2FjY3VtKG1pKTsKKworICBoYW5kbGVfYm9keV9vdXQ6CistLSAKKzIuMTguMApkaWZmIC0tZ2l0IGEvdC90NDI1Ny1hbS1pbnRlcmFjdGl2ZS5zaCBiL3QvdDQyNTctYW0taW50ZXJhY3RpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTM0NGJkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTctYW0taW50ZXJhY3RpdmUuc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FtIC0taW50ZXJhY3RpdmUgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHBhdGNoZXMgdG8gYXBwbHknICcKKwl0ZXN0X2NvbW1pdCB1bnJlbGF0ZWQgJiYKKwl0ZXN0X2NvbW1pdCBuby1jb25mbGljdCAmJgorCXRlc3RfY29tbWl0IGNvbmZsaWN0LXBhdGNoIGZpbGUgcGF0Y2ggJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0yID5tYm94ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIHVucmVsYXRlZCAmJgorCXRlc3RfY29tbWl0IGNvbmZsaWN0LW1hc3RlciBmaWxlIG1hc3RlciBiYXNlCisnCisKKyMgU2FuaXR5IGNoZWNrIG91ciBzZXR1cC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5aW5nIGFsbCBwYXRjaGVzIGdlbmVyYXRlcyBjb25mbGljdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSBtYm94ICYmCisJZWNobyByZXNvbHZlZCA+ZmlsZSAmJgorCWdpdCBhZGQgLXUgJiYKKwlnaXQgYW0gLS1yZXNvbHZlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcmFjdGl2ZSBhbSBjYW4gYXBwbHkgYSBzaW5nbGUgcGF0Y2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwkjIGFwcGx5IHRoZSBmaXJzdCwgYnV0IG5vdCB0aGUgc2Vjb25kCisJdGVzdF93cml0ZV9saW5lcyB5IG4gfCBnaXQgYW0gLWkgbWJveCAmJgorCisJZWNobyBuby1jb25mbGljdCA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcmFjdGl2ZSBhbSBjYW4gcmVzb2x2ZSBjb25mbGljdCcgJworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCSMgYXBwbHkgYm90aDsgdGhlIHNlY29uZCBvbmUgd2lsbCBjb25mbGljdAorCXRlc3Rfd3JpdGVfbGluZXMgeSB5IHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC1pIG1ib3ggJiYKKwllY2hvIHJlc29sdmVkID5maWxlICYmCisJZ2l0IGFkZCAtdSAmJgorCSMgaW50ZXJhY3RpdmUgIi0tcmVzb2x2ZWQiIHdpbGwgYXNrIHVzIGlmIHdlIHdhbnQgdG8gYXBwbHkgdGhlIHJlc3VsdAorCWVjaG8geSB8IGdpdCBhbSAtaSAtLXJlc29sdmVkICYmCisKKwllY2hvIGNvbmZsaWN0LXBhdGNoID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvIHJlc29sdmVkID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEOmZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MzAwLW1lcmdlLXRyZWUuc2ggYi90L3Q0MzAwLW1lcmdlLXRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTU5NjAxZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQzMDAtbWVyZ2UtdHJlZS5zaApAQCAtMCwwICsxLDMzNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBXaWxsIFBhbG1lcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWVyZ2UtdHJlZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCAiaW5pdGlhbCIgImluaXRpYWwtZmlsZSIgImluaXRpYWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgYWRkIEEsICFCJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImFkZC1hLW5vdC1iIiAiT05FIiAiQUFBIiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgaW5pdGlhbCBhZGQtYS1ub3QtYiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PEVYUEVDVEVEICYmCithZGRlZCBpbiByZW1vdGUKKyAgdGhlaXIgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2UgSEVBRDpPTkUpIE9ORQorQEAgLTAsMCArMSBAQAorK0FBQQorRVhQRUNURUQKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGFkZCAhQSwgQicgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJhZGQtbm90LWEtYiIgIk9ORSIgIkFBQSIgJiYKKwlnaXQgbWVyZ2UtdHJlZSBpbml0aWFsIGFkZC1ub3QtYS1iIGluaXRpYWwgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBhZGQgQSwgQiAoc2FtZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiYWRkLWEtYi1zYW1lLUEiICJPTkUiICJBQUEiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImFkZC1hLWItc2FtZS1CIiAiT05FIiAiQUFBIiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgYWRkLWEtYi1zYW1lLUEgYWRkLWEtYi1zYW1lLUIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBhZGQgQSwgQiAoZGlmZmVyZW50KScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJhZGQtYS1iLWRpZmYtQSIgIk9ORSIgIkFBQSIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiYWRkLWEtYi1kaWZmLUIiICJPTkUiICJCQkIiICYmCisJZ2l0IG1lcmdlLXRyZWUgaW5pdGlhbCBhZGQtYS1iLWRpZmYtQSBhZGQtYS1iLWRpZmYtQiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PEVYUEVDVEVEICYmCithZGRlZCBpbiBib3RoCisgIG91ciAgICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIGFkZC1hLWItZGlmZi1BOk9ORSkgT05FCisgIHRoZWlyICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIGFkZC1hLWItZGlmZi1COk9ORSkgT05FCitAQCAtMSArMSw1IEBACisrPDw8PDw8PCAub3VyCisgQUFBCisrPT09PT09PQorK0JCQgorKz4+Pj4+Pj4gLnRoZWlyCitFWFBFQ1RFRAorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgY2hhbmdlIEEsICFCJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImNoYW5nZS1hLW5vdC1iIiAiaW5pdGlhbC1maWxlIiAiQkJCIiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgY2hhbmdlLWEtbm90LWIgaW5pdGlhbCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGNoYW5nZSAhQSwgQicgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2Utbm90LWEtYiIgImluaXRpYWwtZmlsZSIgIkJCQiIgJiYKKwlnaXQgbWVyZ2UtdHJlZSBpbml0aWFsIGluaXRpYWwgY2hhbmdlLW5vdC1hLWIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFWFBFQ1RFRCAmJgorbWVyZ2VkCisgIHJlc3VsdCAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIGNoYW5nZS1hLW5vdC1iOmluaXRpYWwtZmlsZSkgaW5pdGlhbC1maWxlCisgIG91ciAgICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIGluaXRpYWw6aW5pdGlhbC1maWxlICAgICAgICkgaW5pdGlhbC1maWxlCitAQCAtMSArMSBAQAorLWluaXRpYWwKKytCQkIKK0VYUEVDVEVECisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBjaGFuZ2UgQSwgQiAoc2FtZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiY2hhbmdlLWEtYi1zYW1lLUEiICJpbml0aWFsLWZpbGUiICJBQUEiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImNoYW5nZS1hLWItc2FtZS1CIiAiaW5pdGlhbC1maWxlIiAiQUFBIiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgY2hhbmdlLWEtYi1zYW1lLUEgY2hhbmdlLWEtYi1zYW1lLUIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBjaGFuZ2UgQSwgQiAoZGlmZmVyZW50KScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLWRpZmYtQSIgImluaXRpYWwtZmlsZSIgIkFBQSIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiY2hhbmdlLWEtYi1kaWZmLUIiICJpbml0aWFsLWZpbGUiICJCQkIiICYmCisJZ2l0IG1lcmdlLXRyZWUgaW5pdGlhbCBjaGFuZ2UtYS1iLWRpZmYtQSBjaGFuZ2UtYS1iLWRpZmYtQiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PEVYUEVDVEVEICYmCitjaGFuZ2VkIGluIGJvdGgKKyAgYmFzZSAgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2UgaW5pdGlhbDppbml0aWFsLWZpbGUgICAgICAgICAgKSBpbml0aWFsLWZpbGUKKyAgb3VyICAgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2UgY2hhbmdlLWEtYi1kaWZmLUE6aW5pdGlhbC1maWxlKSBpbml0aWFsLWZpbGUKKyAgdGhlaXIgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2UgY2hhbmdlLWEtYi1kaWZmLUI6aW5pdGlhbC1maWxlKSBpbml0aWFsLWZpbGUKK0BAIC0xICsxLDUgQEAKKys8PDw8PDw8IC5vdXIKKyBBQUEKKys9PT09PT09CisrQkJCCisrPj4+Pj4+PiAudGhlaXIKK0VYUEVDVEVECisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBjaGFuZ2UgQSwgQiAobWl4ZWQpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImNoYW5nZS1hLWItbWl4LWJhc2UiICJPTkUiICIKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBCitBQUEiICYmCisJdGVzdF9jb21taXQgImNoYW5nZS1hLWItbWl4LUEiICJPTkUiIFwKKwkJIiQoc2VkIC1lICIxe3MvQUFBL0JCQi87fSIgLWUgIjEwe3MvQUFBL0JCQi87fSIgPE9ORSkiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjaGFuZ2UtYS1iLW1peC1iYXNlICYmCisJdGVzdF9jb21taXQgImNoYW5nZS1hLWItbWl4LUIiICJPTkUiIFwKKwkJIiQoc2VkIC1lICIxe3MvQUFBL0JCQi87fSIgLWUgIjEwe3MvQUFBL0NDQy87fSIgPE9ORSkiICYmCisJZ2l0IG1lcmdlLXRyZWUgY2hhbmdlLWEtYi1taXgtYmFzZSBjaGFuZ2UtYS1iLW1peC1BIGNoYW5nZS1hLWItbWl4LUIgXAorCQk+YWN0dWFsICYmCisKKwljYXQgPmV4cGVjdGVkIDw8RVhQRUNURUQgJiYKK2NoYW5nZWQgaW4gYm90aAorICBiYXNlICAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBjaGFuZ2UtYS1iLW1peC1iYXNlOk9ORSkgT05FCisgIG91ciAgICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIGNoYW5nZS1hLWItbWl4LUE6T05FICAgKSBPTkUKKyAgdGhlaXIgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2UgY2hhbmdlLWEtYi1taXgtQjpPTkUgICApIE9ORQorQEAgLTcsNyArNywxMSBAQAorIEFBQQorIEFBQQorIEFBQQorKzw8PDw8PDwgLm91cgorIEJCQgorKz09PT09PT0KKytDQ0MKKys+Pj4+Pj4+IC50aGVpcgorIEFBQQorIEFBQQorIEFBQQorRVhQRUNURUQKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIHJlbW92ZSBBLCAhQicgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJybS1hLW5vdC1iLWJhc2UiICJPTkUiICJBQUEiICYmCisJZ2l0IHJtIE9ORSAmJgorCWdpdCBjb21taXQgLW0gInJtLWEtbm90LWIiICYmCisJZ2l0IHRhZyAicm0tYS1ub3QtYiIgJiYKKwlnaXQgbWVyZ2UtdHJlZSBybS1hLW5vdC1iLWJhc2Ugcm0tYS1ub3QtYiBybS1hLW5vdC1iLWJhc2UgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSByZW1vdmUgIUEsIEInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAicm0tbm90LWEtYi1iYXNlIiAiT05FIiAiQUFBIiAmJgorCWdpdCBybSBPTkUgJiYKKwlnaXQgY29tbWl0IC1tICJybS1ub3QtYS1iIiAmJgorCWdpdCB0YWcgInJtLW5vdC1hLWIiICYmCisJZ2l0IG1lcmdlLXRyZWUgcm0tYS1ub3QtYi1iYXNlIHJtLWEtbm90LWItYmFzZSBybS1hLW5vdC1iID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8RVhQRUNURUQgJiYKK3JlbW92ZWQgaW4gcmVtb3RlCisgIGJhc2UgICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIHJtLWEtbm90LWItYmFzZTpPTkUpIE9ORQorICBvdXIgICAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBybS1hLW5vdC1iLWJhc2U6T05FKSBPTkUKK0BAIC0xICswLDAgQEAKKy1BQUEKK0VYUEVDVEVECisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSByZW1vdmUgQSwgQiAoc2FtZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAicm0tYS1iLWJhc2UiICJPTkUiICJBQUEiICYmCisJZ2l0IHJtIE9ORSAmJgorCWdpdCBjb21taXQgLW0gInJtLWEtYiIgJiYKKwlnaXQgdGFnICJybS1hLWIiICYmCisJZ2l0IG1lcmdlLXRyZWUgcm0tYS1iLWJhc2Ugcm0tYS1iIHJtLWEtYiA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGNoYW5nZSBBLCByZW1vdmUgQicgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1ybS1iLWJhc2UiICJPTkUiICJBQUEiICYmCisJdGVzdF9jb21taXQgImNoYW5nZS1hLXJtLWItQSIgIk9ORSIgIkJCQiIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNoYW5nZS1hLXJtLWItYmFzZSAmJgorCWdpdCBybSBPTkUgJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2UtYS1ybS1iLUIiICYmCisJZ2l0IHRhZyAiY2hhbmdlLWEtcm0tYi1CIiAmJgorCWdpdCBtZXJnZS10cmVlIGNoYW5nZS1hLXJtLWItYmFzZSBjaGFuZ2UtYS1ybS1iLUEgY2hhbmdlLWEtcm0tYi1CIFwKKwkJPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFWFBFQ1RFRCAmJgorcmVtb3ZlZCBpbiByZW1vdGUKKyAgYmFzZSAgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2UgY2hhbmdlLWEtcm0tYi1iYXNlOk9ORSkgT05FCisgIG91ciAgICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIGNoYW5nZS1hLXJtLWItQTpPTkUgICApIE9ORQorQEAgLTEgKzAsMCBAQAorLUJCQgorRVhQRUNURUQKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIHJlbW92ZSBBLCBjaGFuZ2UgQicgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJybS1hLWNoYW5nZS1iLWJhc2UiICJPTkUiICJBQUEiICYmCisKKwlnaXQgcm0gT05FICYmCisJZ2l0IGNvbW1pdCAtbSAicm0tYS1jaGFuZ2UtYi1BIiAmJgorCWdpdCB0YWcgInJtLWEtY2hhbmdlLWItQSIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHJtLWEtY2hhbmdlLWItYmFzZSAmJgorCXRlc3RfY29tbWl0ICJybS1hLWNoYW5nZS1iLUIiICJPTkUiICJCQkIiICYmCisJZ2l0IG1lcmdlLXRyZWUgcm0tYS1jaGFuZ2UtYi1iYXNlIHJtLWEtY2hhbmdlLWItQSBybS1hLWNoYW5nZS1iLUIgXAorCQk+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PEVYUEVDVEVEICYmCityZW1vdmVkIGluIGxvY2FsCisgIGJhc2UgICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIHJtLWEtY2hhbmdlLWItYmFzZTpPTkUpIE9ORQorICB0aGVpciAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBybS1hLWNoYW5nZS1iLUI6T05FICAgKSBPTkUKK0VYUEVDVEVECisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWUgYWRkIEEsIEIgKHNhbWUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJbWtkaXIgc3ViICYmCisJdGVzdF9jb21taXQgImFkZCBzdWIvZmlsZSIgInN1Yi9maWxlIiAiZmlsZSIgYWRkLXRyZWUtQSAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgYWRkLXRyZWUtQSBhZGQtdHJlZS1BID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWUgYWRkIEEsIEIgKGRpZmZlcmVudCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlta2RpciBzdWIgJiYKKwl0ZXN0X2NvbW1pdCAiYWRkIHN1Yi9maWxlIiAic3ViL2ZpbGUiICJBQUEiIGFkZC10cmVlLWEtYi1BICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJbWtkaXIgc3ViICYmCisJdGVzdF9jb21taXQgImFkZCBzdWIvZmlsZSIgInN1Yi9maWxlIiAiQkJCIiBhZGQtdHJlZS1hLWItQiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgYWRkLXRyZWUtYS1iLUEgYWRkLXRyZWUtYS1iLUIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWFkZGVkIGluIGJvdGgKKwkgIG91ciAgICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIGFkZC10cmVlLWEtYi1BOnN1Yi9maWxlKSBzdWIvZmlsZQorCSAgdGhlaXIgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2UgYWRkLXRyZWUtYS1iLUI6c3ViL2ZpbGUpIHN1Yi9maWxlCisJQEAgLTEgKzEsNSBAQAorCSs8PDw8PDw8IC5vdXIKKwkgQUFBCisJKz09PT09PT0KKwkrQkJCCisJKz4+Pj4+Pj4gLnRoZWlyCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlIHVuY2hhbmdlZCBBLCByZW1vdmVkIEInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlta2RpciBzdWIgJiYKKwl0ZXN0X2NvbW1pdCAiYWRkIHN1Yi9maWxlIiAic3ViL2ZpbGUiICJBQUEiIHRyZWUtcmVtb3ZlLWItaW5pdGlhbCAmJgorCWdpdCBybSBzdWIvZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInJlbW92ZSBzdWIvZmlsZSIgJiYKKwlnaXQgdGFnIHRyZWUtcmVtb3ZlLWItQiAmJgorCWdpdCBtZXJnZS10cmVlIHRyZWUtcmVtb3ZlLWItaW5pdGlhbCB0cmVlLXJlbW92ZS1iLWluaXRpYWwgdHJlZS1yZW1vdmUtYi1CID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlyZW1vdmVkIGluIHJlbW90ZQorCSAgYmFzZSAgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2UgdHJlZS1yZW1vdmUtYi1pbml0aWFsOnN1Yi9maWxlKSBzdWIvZmlsZQorCSAgb3VyICAgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2UgdHJlZS1yZW1vdmUtYi1pbml0aWFsOnN1Yi9maWxlKSBzdWIvZmlsZQorCUBAIC0xICswLDAgQEAKKwktQUFBCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0dXJuIGZpbGUgdG8gdHJlZScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXJtIGluaXRpYWwtZmlsZSAmJgorCW1rZGlyIGluaXRpYWwtZmlsZSAmJgorCXRlc3RfY29tbWl0ICJ0dXJuLWZpbGUtdG8tdHJlZSIgImluaXRpYWwtZmlsZS9PTkUiICJDQ0MiICYmCisJZ2l0IG1lcmdlLXRyZWUgaW5pdGlhbCBpbml0aWFsIHR1cm4tZmlsZS10by10cmVlID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlhZGRlZCBpbiByZW1vdGUKKwkgIHRoZWlyICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIHR1cm4tZmlsZS10by10cmVlOmluaXRpYWwtZmlsZS9PTkUpIGluaXRpYWwtZmlsZS9PTkUKKwlAQCAtMCwwICsxIEBACisJK0NDQworCXJlbW92ZWQgaW4gcmVtb3RlCisJICBiYXNlICAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBpbml0aWFsOmluaXRpYWwtZmlsZSkgaW5pdGlhbC1maWxlCisJICBvdXIgICAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBpbml0aWFsOmluaXRpYWwtZmlsZSkgaW5pdGlhbC1maWxlCisJQEAgLTEgKzAsMCBAQAorCS1pbml0aWFsCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0dXJuIHRyZWUgdG8gZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCW1rZGlyIGRpciAmJgorCXRlc3RfY29tbWl0ICJhZGQtdHJlZSIgImRpci9wYXRoIiAiQUFBIiAmJgorCXRlc3RfY29tbWl0ICJhZGQtYW5vdGhlci10cmVlIiAiZGlyL2Fub3RoZXIiICJCQkIiICYmCisJcm0gLWZyIGRpciAmJgorCXRlc3RfY29tbWl0ICJtYWtlLWZpbGUiICJkaXIiICJDQ0MiICYmCisJZ2l0IG1lcmdlLXRyZWUgYWRkLXRyZWUgYWRkLWFub3RoZXItdHJlZSBtYWtlLWZpbGUgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCXJlbW92ZWQgaW4gcmVtb3RlCisJICBiYXNlICAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBhZGQtdHJlZTpkaXIvcGF0aCkgZGlyL3BhdGgKKwkgIG91ciAgICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIGFkZC10cmVlOmRpci9wYXRoKSBkaXIvcGF0aAorCUBAIC0xICswLDAgQEAKKwktQUFBCisJYWRkZWQgaW4gcmVtb3RlCisJICB0aGVpciAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBtYWtlLWZpbGU6ZGlyKSBkaXIKKwlAQCAtMCwwICsxIEBACisJK0NDQworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MDAwLXRhci10cmVlLnNoIGIvdC90NTAwMC10YXItdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNzY1NWEyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwMC10YXItdHJlZS5zaApAQCAtMCwwICsxLDQyMyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoQykgMjAwNSBSZW5lIFNjaGFyZmUKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFyY2hpdmUgYW5kIGdpdCBnZXQtdGFyLWNvbW1pdC1pZCB0ZXN0CisKK1RoaXMgdGVzdCBjb3ZlcnMgdGhlIHRvcGljcyBvZiBmaWxlIGNvbnRlbnRzLCBjb21taXQgZGF0ZSBoYW5kbGluZyBhbmQKK2NvbW1pdCBpZCBlbWJlZGRpbmc6CisKKyAgVGhlIGNvbnRlbnRzIG9mIHRoZSByZXBvc2l0b3J5IGlzIGNvbXBhcmVkIHRvIHRoZSBleHRyYWN0ZWQgdGFyCisgIGFyY2hpdmUuICBUaGUgcmVwb3NpdG9yeSBjb250YWlucyBzaW1wbGUgdGV4dCBmaWxlcywgc3ltbGlua3MgYW5kIGEKKyAgYmluYXJ5IGZpbGUgKC9iaW4vc2gpLiAgT25seSBwYXRocyBzaG9ydGVyIHRoYW4gOTkgY2hhcmFjdGVycyBhcmUKKyAgdXNlZC4KKworICBnaXQgYXJjaGl2ZSBhcHBsaWVzIHRoZSBjb21taXQgZGF0ZSB0byBldmVyeSBmaWxlIGluIHRoZSBhcmNoaXZlIGl0CisgIGNyZWF0ZXMuICBUaGUgdGVzdCBzZXRzIHRoZSBjb21taXQgZGF0ZSB0byBhIHNwZWNpZmljIHZhbHVlIGFuZCBjaGVja3MKKyAgaWYgdGhlIHRhciBhcmNoaXZlIGNvbnRhaW5zIHRoYXQgdmFsdWUuCisKKyAgV2hlbiBnaXZpbmcgZ2l0IGFyY2hpdmUgYSBjb21taXQgaWQgKGluIGNvbnRyYXN0IHRvIGEgdHJlZSBpZCkgaXQKKyAgZW1iZWRzIHRoaXMgY29tbWl0IGlkIGludG8gdGhlIHRhciBhcmNoaXZlIGFzIGEgY29tbWVudC4gIFRoZSB0ZXN0CisgIGNoZWNrcyB0aGUgYWJpbGl0eSBvZiBnaXQgZ2V0LXRhci1jb21taXQtaWQgdG8gZmlndXJlIGl0IG91dCBmcm9tIHRoZQorICB0YXIgZmlsZS4KKworJworCisuIC4vdGVzdC1saWIuc2gKKworU1VCU1RGT1JNQVQ9JUglbgorCit0ZXN0X2xhenlfcHJlcmVxIFRBUl9ORUVEU19QQVhfRkFMTEJBQ0sgJworCSgKKwkJbWtkaXIgcGF4ICYmCisJCWNkIHBheCAmJgorCQkiJFRBUiIgeGYgIiRURVNUX0RJUkVDVE9SWSIvdDUwMDAvcGF4LnRhciAmJgorCQl0ZXN0IC1mIFBheEhlYWRlcnMuMTc5MS9maWxlCisJKQorJworCit0ZXN0X2xhenlfcHJlcmVxIEdaSVAgJ2d6aXAgLS12ZXJzaW9uJworCitnZXRfcGF4X2hlYWRlcigpIHsKKwlmaWxlPSQxCisJaGVhZGVyPSQyPQorCisJd2hpbGUgcmVhZCBsZW4gcmVzdAorCWRvCisJCWlmIHRlc3QgIiRsZW4iID0gJChlY2hvICIkbGVuICRyZXN0IiB8IHdjIC1jKQorCQl0aGVuCisJCQljYXNlICIkcmVzdCIgaW4KKwkJCSRoZWFkZXIqKQorCQkJCWVjaG8gIiR7cmVzdCMkaGVhZGVyfSIKKwkJCQk7OworCQkJZXNhYworCQlmaQorCWRvbmUgPCIkZmlsZSIKK30KKworY2hlY2tfdGFyKCkgeworCXRhcmZpbGU9JDEudGFyCisJbGlzdGZpbGU9JDEubHN0CisJZGlyPSQxCisJZGlyX3dpdGhfcHJlZml4PSRkaXIvJDIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBleHRyYWN0IHRhciBhcmNoaXZlJyAnCisJCShta2RpciAkZGlyICYmIGNkICRkaXIgJiYgIiRUQVIiIHhmIC0pIDwkdGFyZmlsZQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVEFSX05FRURTX1BBWF9GQUxMQkFDSyAnIGludGVycHJldCBwYXggaGVhZGVycycgJworCQkoCisJCQljZCAkZGlyICYmCisJCQlmb3IgaGVhZGVyIGluICoucGF4aGVhZGVyCisJCQlkbworCQkJCWRhdGE9JHtoZWFkZXIlLnBheGhlYWRlcn0uZGF0YSAmJgorCQkJCWlmIHRlc3QgLWggJGRhdGEgfHwgdGVzdCAtZSAkZGF0YQorCQkJCXRoZW4KKwkJCQkJcGF0aD0kKGdldF9wYXhfaGVhZGVyICRoZWFkZXIgcGF0aCkgJiYKKwkJCQkJaWYgdGVzdCAtbiAiJHBhdGgiCisJCQkJCXRoZW4KKwkJCQkJCW12ICIkZGF0YSIgIiRwYXRoIgorCQkJCQlmaQorCQkJCWZpCisJCQlkb25lCisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICcgdmFsaWRhdGUgZmlsZW5hbWVzJyAnCisJCShjZCAke2Rpcl93aXRoX3ByZWZpeH1hICYmIGZpbmQgLikgfCBzb3J0ID4kbGlzdGZpbGUgJiYKKwkJdGVzdF9jbXAgYS5sc3QgJGxpc3RmaWxlCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnIHZhbGlkYXRlIGZpbGUgY29udGVudHMnICcKKwkJZGlmZiAtciBhICR7ZGlyX3dpdGhfcHJlZml4fWEKKwknCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9vaWRfY2FjaGUgPDwtRU9GCisJb2JqIHNoYTE6MTlmOWM4MjczZWM0NWE4OTM4ZTY5OTljYjU5YjNmZjY2NzM5OTAyYQorCW9iaiBzaGEyNTY6M2M2NjZmNzk4Nzk4NjAxNTcxZjVjZWMwYWRiNTdjZTRhYmE4NTQ2ODc1ZTc2OTMxNzdlMDUzNWYzNGQyYzQ5YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncG9wdWxhdGUgd29ya2RpcicgXAorICAgICdta2RpciBhICYmCisgICAgIGVjaG8gc2ltcGxlIHRleHRmaWxlID5hL2EgJiYKKyAgICAgdGVuPTAxMjM0NTY3ODkgJiYgaHVuZHJlZD0kdGVuJHRlbiR0ZW4kdGVuJHRlbiR0ZW4kdGVuJHRlbiR0ZW4kdGVuICYmCisgICAgIGVjaG8gbG9uZyBmaWxlbmFtZSA+YS9mb3VyJGh1bmRyZWQgJiYKKyAgICAgbWtkaXIgYS9iaW4gJiYKKyAgICAgdGVzdC10b29sIGdlbnJhbmRvbSAiZnJvdHoiIDUwMDAwMCA+YS9iaW4vc2ggJiYKKyAgICAgcHJpbnRmICJBXCRGb3JtYXQ6JXNcJE8iICIkU1VCU1RGT1JNQVQiID5hL3N1YnN0ZmlsZTEgJiYKKyAgICAgcHJpbnRmICJBIG5vdCBzdWJzdGl0dXRlZCBPIiA+YS9zdWJzdGZpbGUyICYmCisgICAgIGlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1M7IHRoZW4KKwlsbiAtcyBhIGEvbDEKKyAgICAgZWxzZQorCXByaW50ZiAlcyBhID4gYS9sMQorICAgICBmaSAmJgorICAgICAocD1sb25nX3BhdGhfdG9fYV9maWxlICYmIGNkIGEgJiYKKyAgICAgIGZvciBkZXB0aCBpbiAxIDIgMyA0IDU7IGRvIG1rZGlyICRwICYmIGNkICRwOyBkb25lICYmCisgICAgICBlY2hvIHRleHQgPmZpbGVfd2l0aF9sb25nX3BhdGgpICYmCisgICAgIChjZCBhICYmIGZpbmQgLikgfCBzb3J0ID5hLmxzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FkZCBpZ25vcmVkIGZpbGUnIFwKKyAgICAnZWNobyBpZ25vcmUgbWUgPmEvaWdub3JlZCAmJgorICAgICBlY2hvIGlnbm9yZWQgZXhwb3J0LWlnbm9yZSA+LmdpdC9pbmZvL2F0dHJpYnV0ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBmaWxlcyB0byByZXBvc2l0b3J5JyAnCisJZ2l0IGFkZCBhICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI3IDIyOjAwIiBnaXQgY29tbWl0IC1tIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwb3J0LXN1YnN0JyAnCisJZWNobyAic3Vic3RmaWxlPyIgZXhwb3J0LXN1YnN0ID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKwlnaXQgbG9nIC0tbWF4LWNvdW50PTEgIi0tcHJldHR5PWZvcm1hdDpBJHtTVUJTVEZPUk1BVH1PIiBIRUFEIFwKKwkJPmEvc3Vic3RmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY3JlYXRlIGJhcmUgY2xvbmUnIFwKKyAgICAnZ2l0IGNsb25lIC0tYmFyZSAuIGJhcmUuZ2l0ICYmCisgICAgIGNwIC5naXQvaW5mby9hdHRyaWJ1dGVzIGJhcmUuZ2l0L2luZm8vYXR0cmlidXRlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3JlbW92ZSBpZ25vcmVkIGZpbGUnIFwKKyAgICAncm0gYS9pZ25vcmVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGFyY2hpdmUnIFwKKyAgICAnZ2l0IGFyY2hpdmUgSEVBRCA+Yi50YXInCisKK2NoZWNrX3RhciBiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIC0tcHJlZml4PXByZWZpeC8nICcKKwlnaXQgYXJjaGl2ZSAtLXByZWZpeD1wcmVmaXgvIEhFQUQgPndpdGhfcHJlZml4LnRhcgorJworCitjaGVja190YXIgd2l0aF9wcmVmaXggcHJlZml4LworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtYXJjaGl2ZSAtLXByZWZpeD1vbGRlLScgJworCWdpdCBhcmNoaXZlIC0tcHJlZml4PW9sZGUtIEhFQUQgPndpdGhfb2xkZS1wcmVmaXgudGFyCisnCisKK2NoZWNrX3RhciB3aXRoX29sZGUtcHJlZml4IG9sZGUtCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIG9uIGxhcmdlIGZpbGVzJyAnCisgICAgdGVzdF9jb25maWcgY29yZS5iaWdmaWxldGhyZXNob2xkIDEgJiYKKyAgICBnaXQgYXJjaGl2ZSBIRUFEID5iMy50YXIgJiYKKyAgICB0ZXN0X2NtcF9iaW4gYi50YXIgYjMudGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYXJjaGl2ZSBpbiBhIGJhcmUgcmVwbycgXAorICAgICcoY2QgYmFyZS5naXQgJiYgZ2l0IGFyY2hpdmUgSEVBRCkgPmIzLnRhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBhcmNoaXZlIHZzLiB0aGUgc2FtZSBpbiBhIGJhcmUgcmVwbycgXAorICAgICd0ZXN0X2NtcF9iaW4gYi50YXIgYjMudGFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSB3aXRoIC0tb3V0cHV0JyBcCisgICAgJ2dpdCBhcmNoaXZlIC0tb3V0cHV0PWI0LnRhciBIRUFEICYmCisgICAgdGVzdF9jbXBfYmluIGIudGFyIGI0LnRhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgLS1yZW1vdGUnIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1yZW1vdGU9LiBIRUFEID5iNS50YXIgJiYKKyAgICB0ZXN0X2NtcF9iaW4gYi50YXIgYjUudGFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSAtLXJlbW90ZSB3aXRoIGNvbmZpZ3VyZWQgcmVtb3RlJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUuZm9vLnVybCAuICYmCisJKAorCQljZCBhICYmCisJCWdpdCBhcmNoaXZlIC0tcmVtb3RlPWZvbyAtLW91dHB1dD0uLi9iNS1uaWNrLnRhciBIRUFECisJKSAmJgorCXRlc3RfY21wX2JpbiBiLnRhciBiNS1uaWNrLnRhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgZmlsZSBtb2RpZmljYXRpb24gdGltZScgXAorICAgICdta2RpciBleHRyYWN0ICYmCisgICAgICIkVEFSIiB4ZiBiLnRhciAtQyBleHRyYWN0IGEvYSAmJgorICAgICB0ZXN0LXRvb2wgY2htdGltZSAtLWdldCBleHRyYWN0L2EvYSA+Yi5tdGltZSAmJgorICAgICBlY2hvICIxMTE3MjMxMjAwIiA+ZXhwZWN0ZWQubXRpbWUgJiYKKyAgICAgdGVzdF9jbXAgZXhwZWN0ZWQubXRpbWUgYi5tdGltZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBnZXQtdGFyLWNvbW1pdC1pZCcgXAorICAgICdnaXQgZ2V0LXRhci1jb21taXQtaWQgPGIudGFyID5iLmNvbW1pdGlkICYmCisgICAgIHRlc3RfY21wIC5naXQvJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIGIuY29tbWl0aWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIHdpdGggLS1vdXRwdXQsIG92ZXJyaWRlIGluZmVycmVkIGZvcm1hdCcgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAtLW91dHB1dD1kNC56aXAgSEVBRCAmJgorCXRlc3RfY21wX2JpbiBiLnRhciBkNC56aXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdnaXQgYXJjaGl2ZSB3aXRoIC0tb3V0cHV0IGFuZCAtLXJlbW90ZSBjcmVhdGVzIC50Z3onICcKKwlnaXQgYXJjaGl2ZSAtLW91dHB1dD1kNS50Z3ogLS1yZW1vdGU9LiBIRUFEICYmCisJZ3ppcCAtZCAtYyA8ZDUudGd6ID5kNS50YXIgJiYKKwl0ZXN0X2NtcF9iaW4gYi50YXIgZDUudGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIC0tbGlzdCBvdXRzaWRlIG9mIGEgZ2l0IHJlcG8nICcKKwlub25naXQgZ2l0IGFyY2hpdmUgLS1saXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIC0tcmVtb3RlIG91dHNpZGUgb2YgYSBnaXQgcmVwbycgJworCWdpdCBhcmNoaXZlIEhFQUQgPmV4cGVjdC50YXIgJiYKKwlub25naXQgZ2l0IGFyY2hpdmUgLS1yZW1vdGU9IiRQV0QiIEhFQUQgPmFjdHVhbC50YXIgJiYKKwl0ZXN0X2NtcF9iaW4gZXhwZWN0LnRhciBhY3R1YWwudGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsaWVudHMgY2Fubm90IGFjY2VzcyB1bnJlYWNoYWJsZSBjb21taXRzJyAnCisJdGVzdF9jb21taXQgdW5yZWFjaGFibGUgJiYKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgYXJjaGl2ZSAkc2hhMSA+cmVtb3RlLnRhciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcmNoaXZlIC0tcmVtb3RlPS4gJHNoYTEgPnJlbW90ZS50YXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBsb2FkLWFyY2hpdmUgY2FuIGFsbG93IHVucmVhY2hhYmxlIGNvbW1pdHMnICcKKwl0ZXN0X2NvbW1pdCB1bnJlYWNoYWJsZTEgJiYKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgYXJjaGl2ZSAkc2hhMSA+cmVtb3RlLnRhciAmJgorCXRlc3RfY29uZmlnIHVwbG9hZGFyY2hpdmUuYWxsb3dVbnJlYWNoYWJsZSB0cnVlICYmCisJZ2l0IGFyY2hpdmUgLS1yZW1vdGU9LiAkc2hhMSA+cmVtb3RlLnRhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0YXIgZmlsdGVycycgJworCWdpdCBjb25maWcgdGFyLnRhci5mb28uY29tbWFuZCAidHIgYWIgYmEiICYmCisJZ2l0IGNvbmZpZyB0YXIuYmFyLmNvbW1hbmQgInRyIGFiIGJhIiAmJgorCWdpdCBjb25maWcgdGFyLmJhci5yZW1vdGUgdHJ1ZSAmJgorCWdpdCBjb25maWcgdGFyLmludmFsaWQgYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FyY2hpdmUgLS1saXN0IG1lbnRpb25zIHVzZXIgZmlsdGVyJyAnCisJZ2l0IGFyY2hpdmUgLS1saXN0ID5vdXRwdXQgJiYKKwlncmVwICJedGFyXC5mb29cJCIgb3V0cHV0ICYmCisJZ3JlcCAiXmJhclwkIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXJjaGl2ZSAtLWxpc3Qgc2hvd3Mgb25seSBlbmFibGVkIHJlbW90ZSBmaWx0ZXJzJyAnCisJZ2l0IGFyY2hpdmUgLS1saXN0IC0tcmVtb3RlPS4gPm91dHB1dCAmJgorCSEgZ3JlcCAiXnRhclwuZm9vXCQiIG91dHB1dCAmJgorCWdyZXAgIl5iYXJcJCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludm9rZSB0YXIgZmlsdGVyIGJ5IGZvcm1hdCcgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhci5mb28gSEVBRCA+Y29uZmlnLnRhci5mb28gJiYKKwl0ciBhYiBiYSA8Y29uZmlnLnRhci5mb28gPmNvbmZpZy50YXIgJiYKKwl0ZXN0X2NtcF9iaW4gYi50YXIgY29uZmlnLnRhciAmJgorCWdpdCBhcmNoaXZlIC0tZm9ybWF0PWJhciBIRUFEID5jb25maWcuYmFyICYmCisJdHIgYWIgYmEgPGNvbmZpZy5iYXIgPmNvbmZpZy50YXIgJiYKKwl0ZXN0X2NtcF9iaW4gYi50YXIgY29uZmlnLnRhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZva2UgdGFyIGZpbHRlciBieSBleHRlbnNpb24nICcKKwlnaXQgYXJjaGl2ZSAtbyBjb25maWctaW1wbGljaXQudGFyLmZvbyBIRUFEICYmCisJdGVzdF9jbXBfYmluIGNvbmZpZy50YXIuZm9vIGNvbmZpZy1pbXBsaWNpdC50YXIuZm9vICYmCisJZ2l0IGFyY2hpdmUgLW8gY29uZmlnLWltcGxpY2l0LmJhciBIRUFEICYmCisJdGVzdF9jbXBfYmluIGNvbmZpZy50YXIuZm9vIGNvbmZpZy1pbXBsaWNpdC5iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCBvdXRwdXQgZm9ybWF0IHJlbWFpbnMgdGFyJyAnCisJZ2l0IGFyY2hpdmUgLW8gY29uZmlnLWltcGxpY2l0LmJheiBIRUFEICYmCisJdGVzdF9jbXBfYmluIGIudGFyIGNvbmZpZy1pbXBsaWNpdC5iYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXh0ZW5zaW9uIG1hdGNoaW5nIHJlcXVpcmVzIGRvdCcgJworCWdpdCBhcmNoaXZlIC1vIGNvbmZpZy1pbXBsaWNpdHRhci5mb28gSEVBRCAmJgorCXRlc3RfY21wX2JpbiBiLnRhciBjb25maWctaW1wbGljaXR0YXIuZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29ubHkgZW5hYmxlZCBmaWx0ZXJzIGFyZSBhdmFpbGFibGUgcmVtb3RlbHknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXJjaGl2ZSAtLXJlbW90ZT0uIC0tZm9ybWF0PXRhci5mb28gSEVBRCBcCisJCT5yZW1vdGUudGFyLmZvbyAmJgorCWdpdCBhcmNoaXZlIC0tcmVtb3RlPS4gLS1mb3JtYXQ9YmFyID5yZW1vdGUuYmFyIEhFQUQgJiYKKwl0ZXN0X2NtcF9iaW4gcmVtb3RlLmJhciBjb25maWcuYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1pJUCAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGd6JyAnCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGd6IEhFQUQgPmoudGd6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1pJUCAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyLmd6JyAnCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyLmd6IEhFQUQgPmoxLnRhci5neiAmJgorCXRlc3RfY21wX2JpbiBqLnRneiBqMS50YXIuZ3oKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdpbmZlciB0Z3ogZnJvbSAudGd6IGZpbGVuYW1lJyAnCisJZ2l0IGFyY2hpdmUgLS1vdXRwdXQ9ajIudGd6IEhFQUQgJiYKKwl0ZXN0X2NtcF9iaW4gai50Z3ogajIudGd6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1pJUCAnaW5mZXIgdGd6IGZyb20gLnRhci5neiBmaWxlbmFtZScgJworCWdpdCBhcmNoaXZlIC0tb3V0cHV0PWozLnRhci5neiBIRUFEICYmCisJdGVzdF9jbXBfYmluIGoudGd6IGozLnRhci5negorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ2V4dHJhY3QgdGd6IGZpbGUnICcKKwlnemlwIC1kIC1jIDxqLnRneiA+ai50YXIgJiYKKwl0ZXN0X2NtcF9iaW4gYi50YXIgai50YXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdyZW1vdGUgdGFyLmd6IGlzIGFsbG93ZWQgYnkgZGVmYXVsdCcgJworCWdpdCBhcmNoaXZlIC0tcmVtb3RlPS4gLS1mb3JtYXQ9dGFyLmd6IEhFQUQgPnJlbW90ZS50YXIuZ3ogJiYKKwl0ZXN0X2NtcF9iaW4gai50Z3ogcmVtb3RlLnRhci5negorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ3JlbW90ZSB0YXIuZ3ogY2FuIGJlIGRpc2FibGVkJyAnCisJZ2l0IGNvbmZpZyB0YXIudGFyLmd6LnJlbW90ZSBmYWxzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcmNoaXZlIC0tcmVtb3RlPS4gLS1mb3JtYXQ9dGFyLmd6IEhFQUQgXAorCQk+cmVtb3RlLnRhci5negorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcmNoaXZlIGFuZCA6KGdsb2IpJyAnCisJZ2l0IGFyY2hpdmUgLXYgSEVBRCAtLSAiOihnbG9iKSoqL3NoIiA+L2Rldi9udWxsIDI+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK2EvCithL2Jpbi8KK2EvYmluL3NoCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhdGNoIG5vbi1tYXRjaGluZyBwYXRoc3BlYycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcmNoaXZlIC12IEhFQUQgLS0gIiouYWJjIiA+L2Rldi9udWxsCisnCisKKyMgUHVsbCB0aGUgc2l6ZSBhbmQgZGF0ZSBvZiBlYWNoIGVudHJ5IGluIGEgdGFyZmlsZSB1c2luZyB0aGUgc3lzdGVtIHRhci4KKyMKKyMgV2UnbGwgcHVsbCBvdXQgb25seSB0aGUgeWVhciBmcm9tIHRoZSBkYXRlOyB0aGF0IGF2b2lkcyBhbnkgcXVlc3Rpb24gb2YKKyMgdGltZXpvbmVzIGltcGFjdGluZyB0aGUgcmVzdWx0IChhcyBsb25nIGFzIHdlIGtlZXAgb3VyIHRlc3QgdGltZXMgYXdheSBmcm9tIGEKKyMgeWVhciBib3VuZGFyeTsgb3VyIHJlZmVyZW5jZSB0aW1lcyBhcmUgYWxsIGluIEF1Z3VzdCkuCisjCisjIFRoZSBvdXRwdXQgb2YgdGFyX2luZm8gaXMgZXhwZWN0ZWQgdG8gYmUgIjxzaXplPiA8eWVhcj4iLCBib3RoIGluIGRlY2ltYWwuIEl0CisjIGlnbm9yZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0YXIuIFdlIGhhdmUgdG8gZG8gdGhpcywgYmVjYXVzZSBzb21lIG9mIG91ciB0ZXN0CisjIGlucHV0IGlzIG9ubHkgcGFydGlhbCAodGhlIHJlYWwgZGF0YSBpcyA2NEdCIGluIHNvbWUgY2FzZXMpLgordGFyX2luZm8gKCkgeworCSIkVEFSIiB0dmYgIiQxIiB8CisJYXdrICd7CisJCXNwbGl0KCQ0LCBkYXRlLCAiLSIpCisJCXByaW50ICQzICIgIiBkYXRlWzFdCisJfScKK30KKworIyBTZWUgaWYgb3VyIHN5c3RlbSB0YXIgY2FuIGhhbmRsZSBhIHRhciBmaWxlIHdpdGggaHVnZSBzaXplcyBhbmQgZGF0ZXMgZmFyIGluCisjIHRoZSBmdXR1cmUsIGFuZCB0aGF0IHdlIGNhbiBhY3R1YWxseSBwYXJzZSBpdHMgb3V0cHV0LgorIworIyBUaGUgcmVmZXJlbmNlIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBHTlUgdGFyLCBhbmQgdGhlIG1hZ2ljIHRpbWUgYW5kIHNpemUgYXJlCisjIGJvdGggb2N0YWwgMDEwMDAwMDAwMDAwMDEsIHdoaWNoIG92ZXJmbG93cyBub3JtYWwgdXN0YXIgZmllbGRzLgordGVzdF9sYXp5X3ByZXJlcSBUQVJfSFVHRSAnCisJZWNobyAiNjg3MTk0NzY3MzcgNDE0NyIgPmV4cGVjdCAmJgorCXRhcl9pbmZvICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MDAwL2h1Z2UtYW5kLWZ1dHVyZS50YXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMT05HX0lTXzY0QklUICdzZXQgdXAgcmVwb3NpdG9yeSB3aXRoIGh1Z2UgYmxvYicgJworCW9iaj0kKHRlc3Rfb2lkIG9iaikgJiYKKwlwYXRoPSQodGVzdF9vaWRfdG9fcGF0aCAkb2JqKSAmJgorCW1rZGlyIC1wIC5naXQvb2JqZWN0cy8kKGRpcm5hbWUgJHBhdGgpICYmCisJY3AgIiRURVNUX0RJUkVDVE9SWSIvdDUwMDAvaHVnZS1vYmplY3QgLmdpdC9vYmplY3RzLyRwYXRoICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTAwNjQ0LCRvYmosaHVnZSAmJgorCWdpdCBjb21taXQgLW0gaHVnZQorJworCisjIFdlIGV4cGVjdCBnaXQgdG8gZGllIHdpdGggU0lHUElQRSBoZXJlIChvdGhlcndpc2Ugd2UKKyMgd291bGQgZ2VuZXJhdGUgdGhlIHdob2xlIDY0R0IpLgordGVzdF9leHBlY3Rfc3VjY2VzcyBMT05HX0lTXzY0QklUICdnZW5lcmF0ZSB0YXIgd2l0aCBodWdlIHNpemUnICcKKwl7CisJCWdpdCBhcmNoaXZlIEhFQUQKKwkJZWNobyAkPyA+ZXhpdC1jb2RlCisJfSB8IHRlc3RfY29weV9ieXRlcyA0MDk2ID5odWdlLnRhciAmJgorCWVjaG8gMTQxID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVEFSX0hVR0UsTE9OR19JU182NEJJVCAnc3lzdGVtIHRhciBjYW4gcmVhZCBvdXIgaHVnZSBzaXplJyAnCisJZWNobyA2ODcxOTQ3NjczNyA+ZXhwZWN0ICYmCisJdGFyX2luZm8gaHVnZS50YXIgfCBjdXQgLWQiICIgLWYxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVElNRV9JU182NEJJVCAnc2V0IHVwIHJlcG9zaXRvcnkgd2l0aCBmYXItZnV0dXJlIGNvbW1pdCcgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IkA2ODcxOTQ3NjczNyArMDAwMCIgXAorCQlnaXQgY29tbWl0IC1tICJ0ZW1wb3JpIHBhcmVuZHVtIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRJTUVfSVNfNjRCSVQgJ2dlbmVyYXRlIHRhciB3aXRoIGZ1dHVyZSBtdGltZScgJworCWdpdCBhcmNoaXZlIEhFQUQgPmZ1dHVyZS50YXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUQVJfSFVHRSxUSU1FX0lTXzY0QklULFRJTUVfVF9JU182NEJJVCAnc3lzdGVtIHRhciBjYW4gcmVhZCBvdXIgZnV0dXJlIG10aW1lJyAnCisJZWNobyA0MTQ3ID5leHBlY3QgJiYKKwl0YXJfaW5mbyBmdXR1cmUudGFyIHwgY3V0IC1kIiAiIC1mMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUwMDAvaHVnZS1hbmQtZnV0dXJlLnRhciBiL3QvdDUwMDAvaHVnZS1hbmQtZnV0dXJlLnRhcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzE1NWUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwMC9odWdlLWFuZC1mdXR1cmUudGFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3QvdDUwMDAvaHVnZS1vYmplY3QgYi90L3Q1MDAwL2h1Z2Utb2JqZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYmU5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MDAwL2h1Z2Utb2JqZWN0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3QvdDUwMDAvcGF4LnRhciBiL3QvdDUwMDAvcGF4LnRhcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTExNzM3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwMC9wYXgudGFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3QvdDUwMDEtYXJjaGl2ZS1hdHRyLnNoIGIvdC90NTAwMS1hcmNoaXZlLWF0dHIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTlhYTk3MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUwMDEtYXJjaGl2ZS1hdHRyLnNoCkBAIC0wLDAgKzEsMTMxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFyY2hpdmUgYXR0cmlidXRlIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKworU1VCU1RGT1JNQVQ9JyVIICglaCklbicKKwordGVzdF9leHBlY3RfZXhpc3RzKCkgeworCXRlc3RfZXhwZWN0XyR7Mjotc3VjY2Vzc30gIiAkMSBleGlzdHMiICJ0ZXN0IC1lICQxIgorfQorCit0ZXN0X2V4cGVjdF9taXNzaW5nKCkgeworCXRlc3RfZXhwZWN0XyR7Mjotc3VjY2Vzc30gIiAkMSBkb2VzIG5vdCBleGlzdCIgInRlc3QgISAtZSAkMSIKK30KKworZXh0cmFjdF90YXJfdG9fZGlyICgpIHsKKwkobWtkaXIgIiQxIiAmJiBjZCAiJDEiICYmICIkVEFSIiB4ZiAtKSA8IiQxLnRhciIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGlnbm9yZWQgPmlnbm9yZWQgJiYKKwllY2hvIGlnbm9yZWQgZXhwb3J0LWlnbm9yZSA+Pi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisJZ2l0IGFkZCBpZ25vcmVkICYmCisKKwllY2hvIGlnbm9yZWQgYnkgdHJlZSA+aWdub3JlZC1ieS10cmVlICYmCisJZWNobyBpZ25vcmVkLWJ5LXRyZWUgZXhwb3J0LWlnbm9yZSA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlta2RpciBpZ25vcmVkLWJ5LXRyZWUuZCAmJgorCT5pZ25vcmVkLWJ5LXRyZWUuZC9maWxlICYmCisJZWNobyBpZ25vcmVkLWJ5LXRyZWUuZCBleHBvcnQtaWdub3JlID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgYWRkIGlnbm9yZWQtYnktdHJlZSBpZ25vcmVkLWJ5LXRyZWUuZCAuZ2l0YXR0cmlidXRlcyAmJgorCisJZWNobyBpZ25vcmVkIGJ5IHdvcmt0cmVlID5pZ25vcmVkLWJ5LXdvcmt0cmVlICYmCisJZWNobyBpZ25vcmVkLWJ5LXdvcmt0cmVlIGV4cG9ydC1pZ25vcmUgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGFkZCBpZ25vcmVkLWJ5LXdvcmt0cmVlICYmCisKKwlta2RpciBleGNsdWRlZC1ieS1wYXRoc3BlYy5kICYmCisJPmV4Y2x1ZGVkLWJ5LXBhdGhzcGVjLmQvZmlsZSAmJgorCWdpdCBhZGQgZXhjbHVkZWQtYnktcGF0aHNwZWMuZCAmJgorCisJcHJpbnRmICJBXCRGb3JtYXQ6JXNcJE8iICIkU1VCU1RGT1JNQVQiID5ub3N1YnN0ZmlsZSAmJgorCXByaW50ZiAiQVwkRm9ybWF0OiVzXCRPIiAiJFNVQlNURk9STUFUIiA+c3Vic3RmaWxlMSAmJgorCXByaW50ZiAiQSBub3Qgc3Vic3RpdHV0ZWQgTyIgPnN1YnN0ZmlsZTIgJiYKKwllY2hvICJzdWJzdGZpbGU/IiBleHBvcnQtc3Vic3QgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCWdpdCBhZGQgbm9zdWJzdGZpbGUgc3Vic3RmaWxlMSBzdWJzdGZpbGUyICYmCisKKwlnaXQgY29tbWl0IC1tLiAmJgorCisJZ2l0IGNsb25lIC0tYmFyZSAuIGJhcmUgJiYKKwljcCAuZ2l0L2luZm8vYXR0cmlidXRlcyBiYXJlL2luZm8vYXR0cmlidXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZScgJworCWdpdCBhcmNoaXZlIEhFQUQgPmFyY2hpdmUudGFyICYmCisJKG1rZGlyIGFyY2hpdmUgJiYgY2QgYXJjaGl2ZSAmJiAiJFRBUiIgeGYgLSkgPGFyY2hpdmUudGFyCisnCisKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9pZ25vcmVkCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvaWdub3JlZC1ieS10cmVlCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvaWdub3JlZC1ieS10cmVlLmQKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9pZ25vcmVkLWJ5LXRyZWUuZC9maWxlCit0ZXN0X2V4cGVjdF9leGlzdHMJYXJjaGl2ZS9pZ25vcmVkLWJ5LXdvcmt0cmVlCit0ZXN0X2V4cGVjdF9leGlzdHMJYXJjaGl2ZS9leGNsdWRlZC1ieS1wYXRoc3BlYy5kCit0ZXN0X2V4cGVjdF9leGlzdHMJYXJjaGl2ZS9leGNsdWRlZC1ieS1wYXRoc3BlYy5kL2ZpbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgd2l0aCBwYXRoc3BlYycgJworCWdpdCBhcmNoaXZlIEhFQUQgIjohZXhjbHVkZWQtYnktcGF0aHNwZWMuZCIgPmFyY2hpdmUtcGF0aHNwZWMudGFyICYmCisJZXh0cmFjdF90YXJfdG9fZGlyIGFyY2hpdmUtcGF0aHNwZWMKKycKKwordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlLXBhdGhzcGVjL2lnbm9yZWQKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS1wYXRoc3BlYy9pZ25vcmVkLWJ5LXRyZWUKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS1wYXRoc3BlYy9pZ25vcmVkLWJ5LXRyZWUuZAordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlLXBhdGhzcGVjL2lnbm9yZWQtYnktdHJlZS5kL2ZpbGUKK3Rlc3RfZXhwZWN0X2V4aXN0cwlhcmNoaXZlLXBhdGhzcGVjL2lnbm9yZWQtYnktd29ya3RyZWUKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS1wYXRoc3BlYy9leGNsdWRlZC1ieS1wYXRoc3BlYy5kCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUtcGF0aHNwZWMvZXhjbHVkZWQtYnktcGF0aHNwZWMuZC9maWxlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIHdpdGggd2lsZGNhcmQgcGF0aHNwZWMnICcKKwlnaXQgYXJjaGl2ZSBIRUFEICI6IWV4Y2x1ZGVkLWJ5LXAqIiA+YXJjaGl2ZS1wYXRoc3BlYy13aWxkY2FyZC50YXIgJiYKKwlleHRyYWN0X3Rhcl90b19kaXIgYXJjaGl2ZS1wYXRoc3BlYy13aWxkY2FyZAorJworCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUtcGF0aHNwZWMtd2lsZGNhcmQvaWdub3JlZAordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlLXBhdGhzcGVjLXdpbGRjYXJkL2lnbm9yZWQtYnktdHJlZQordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlLXBhdGhzcGVjLXdpbGRjYXJkL2lnbm9yZWQtYnktdHJlZS5kCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUtcGF0aHNwZWMtd2lsZGNhcmQvaWdub3JlZC1ieS10cmVlLmQvZmlsZQordGVzdF9leHBlY3RfZXhpc3RzCWFyY2hpdmUtcGF0aHNwZWMtd2lsZGNhcmQvaWdub3JlZC1ieS13b3JrdHJlZQordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlLXBhdGhzcGVjLXdpbGRjYXJkL2V4Y2x1ZGVkLWJ5LXBhdGhzcGVjLmQKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS1wYXRoc3BlYy13aWxkY2FyZC9leGNsdWRlZC1ieS1wYXRoc3BlYy5kL2ZpbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgd2l0aCB3b3JrdHJlZSBhdHRyaWJ1dGVzJyAnCisJZ2l0IGFyY2hpdmUgLS13b3JrdHJlZS1hdHRyaWJ1dGVzIEhFQUQgPndvcmt0cmVlLnRhciAmJgorCShta2RpciB3b3JrdHJlZSAmJiBjZCB3b3JrdHJlZSAmJiAiJFRBUiIgeGYgLSkgPHdvcmt0cmVlLnRhcgorJworCit0ZXN0X2V4cGVjdF9taXNzaW5nCXdvcmt0cmVlL2lnbm9yZWQKK3Rlc3RfZXhwZWN0X2V4aXN0cwl3b3JrdHJlZS9pZ25vcmVkLWJ5LXRyZWUKK3Rlc3RfZXhwZWN0X21pc3NpbmcJd29ya3RyZWUvaWdub3JlZC1ieS13b3JrdHJlZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSAtLXdvcmt0cmVlLWF0dHJpYnV0ZXMgb3B0aW9uJyAnCisJZ2l0IGFyY2hpdmUgLS13b3JrdHJlZS1hdHRyaWJ1dGVzIC0td29ya3RyZWUtYXR0cmlidXRlcyBIRUFEID53b3JrdHJlZS50YXIgJiYKKwkobWtkaXIgd29ya3RyZWUyICYmIGNkIHdvcmt0cmVlMiAmJiAiJFRBUiIgeGYgLSkgPHdvcmt0cmVlLnRhcgorJworCit0ZXN0X2V4cGVjdF9taXNzaW5nCXdvcmt0cmVlMi9pZ25vcmVkCit0ZXN0X2V4cGVjdF9leGlzdHMJd29ya3RyZWUyL2lnbm9yZWQtYnktdHJlZQordGVzdF9leHBlY3RfbWlzc2luZwl3b3JrdHJlZTIvaWdub3JlZC1ieS13b3JrdHJlZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSB2cy4gYmFyZScgJworCShjZCBiYXJlICYmIGdpdCBhcmNoaXZlIEhFQUQpID5iYXJlLWFyY2hpdmUudGFyICYmCisJdGVzdF9jbXBfYmluIGFyY2hpdmUudGFyIGJhcmUtYXJjaGl2ZS50YXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgd2l0aCB3b3JrdHJlZSBhdHRyaWJ1dGVzLCBiYXJlJyAnCisJKGNkIGJhcmUgJiYgZ2l0IGFyY2hpdmUgLS13b3JrdHJlZS1hdHRyaWJ1dGVzIEhFQUQpID5iYXJlLXdvcmt0cmVlLnRhciAmJgorCShta2RpciBiYXJlLXdvcmt0cmVlICYmIGNkIGJhcmUtd29ya3RyZWUgJiYgIiRUQVIiIHhmIC0pIDxiYXJlLXdvcmt0cmVlLnRhcgorJworCit0ZXN0X2V4cGVjdF9taXNzaW5nCWJhcmUtd29ya3RyZWUvaWdub3JlZAordGVzdF9leHBlY3RfZXhpc3RzCWJhcmUtd29ya3RyZWUvaWdub3JlZC1ieS10cmVlCit0ZXN0X2V4cGVjdF9leGlzdHMJYmFyZS13b3JrdHJlZS9pZ25vcmVkLWJ5LXdvcmt0cmVlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cG9ydC1zdWJzdCcgJworCWdpdCBsb2cgIi0tcHJldHR5PWZvcm1hdDpBJHtTVUJTVEZPUk1BVH1PIiBIRUFEID5zdWJzdGZpbGUxLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgbm9zdWJzdGZpbGUgYXJjaGl2ZS9ub3N1YnN0ZmlsZSAmJgorCXRlc3RfY21wIHN1YnN0ZmlsZTEuZXhwZWN0ZWQgYXJjaGl2ZS9zdWJzdGZpbGUxICYmCisJdGVzdF9jbXAgc3Vic3RmaWxlMiBhcmNoaXZlL3N1YnN0ZmlsZTIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MDAyLWFyY2hpdmUtYXR0ci1wYXR0ZXJuLnNoIGIvdC90NTAwMi1hcmNoaXZlLWF0dHItcGF0dGVybi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZGE2ZDdkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwMi1hcmNoaXZlLWF0dHItcGF0dGVybi5zaApAQCAtMCwwICsxLDg0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFyY2hpdmUgYXR0cmlidXRlIHBhdHRlcm4gdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9leGlzdHMoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiICQxIGV4aXN0cyIgInRlc3QgLWUgJDEiCit9CisKK3Rlc3RfZXhwZWN0X21pc3NpbmcoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiICQxIGRvZXMgbm90IGV4aXN0IiAidGVzdCAhIC1lICQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gaWdub3JlZCA+aWdub3JlZCAmJgorCWVjaG8gaWdub3JlZCBleHBvcnQtaWdub3JlID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKwlnaXQgYWRkIGlnbm9yZWQgJiYKKworCW1rZGlyIG5vdC1pZ25vcmVkLWRpciAmJgorCWVjaG8gaWdub3JlZC1pbi10cmVlID5ub3QtaWdub3JlZC1kaXIvaWdub3JlZCAmJgorCWVjaG8gbm90LWlnbm9yZWQtaW4tdHJlZSA+bm90LWlnbm9yZWQtZGlyL2lnbm9yZWQtb25seS1pZi1kaXIgJiYKKwlnaXQgYWRkIG5vdC1pZ25vcmVkLWRpciAmJgorCisJbWtkaXIgaWdub3JlZC1vbmx5LWlmLWRpciAmJgorCWVjaG8gaWdub3JlZCBieSBpZ25vcmVkIGRpciA+aWdub3JlZC1vbmx5LWlmLWRpci9pZ25vcmVkLWJ5LWlnbm9yZWQtZGlyICYmCisJZWNobyBpZ25vcmVkLW9ubHktaWYtZGlyLyBleHBvcnQtaWdub3JlID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKwlnaXQgYWRkIGlnbm9yZWQtb25seS1pZi1kaXIgJiYKKworCW1rZGlyIC1wIGlnbm9yZWQtd2l0aG91dC1zbGFzaCAmJgorCWVjaG8gImlnbm9yZWQgd2l0aG91dCBzbGFzaCIgPmlnbm9yZWQtd2l0aG91dC1zbGFzaC9mb28gJiYKKwlnaXQgYWRkIGlnbm9yZWQtd2l0aG91dC1zbGFzaC9mb28gJiYKKwllY2hvICJpZ25vcmVkLXdpdGhvdXQtc2xhc2ggZXhwb3J0LWlnbm9yZSIgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCisJbWtkaXIgLXAgd2lsZGNhcmQtd2l0aG91dC1zbGFzaCAmJgorCWVjaG8gImlnbm9yZWQgd2l0aG91dCBzbGFzaCIgPndpbGRjYXJkLXdpdGhvdXQtc2xhc2gvZm9vICYmCisJZ2l0IGFkZCB3aWxkY2FyZC13aXRob3V0LXNsYXNoL2ZvbyAmJgorCWVjaG8gIndpbGQqLXdpdGhvdXQtc2xhc2ggZXhwb3J0LWlnbm9yZSIgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCisJbWtkaXIgLXAgZGVlcC9hbmQvc2xhc2hsZXNzICYmCisJZWNobyAiaWdub3JlZCB3aXRob3V0IHNsYXNoIiA+ZGVlcC9hbmQvc2xhc2hsZXNzL2ZvbyAmJgorCWdpdCBhZGQgZGVlcC9hbmQvc2xhc2hsZXNzL2ZvbyAmJgorCWVjaG8gImRlZXAvYW5kL3NsYXNobGVzcyBleHBvcnQtaWdub3JlIiA+Pi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisKKwlta2RpciAtcCBkZWVwL3dpdGgvd2lsZGNhcmQgJiYKKwllY2hvICJpZ25vcmVkIHdpdGhvdXQgc2xhc2giID5kZWVwL3dpdGgvd2lsZGNhcmQvZm9vICYmCisJZ2l0IGFkZCBkZWVwL3dpdGgvd2lsZGNhcmQvZm9vICYmCisJZWNobyAiZGVlcC8qdCovd2lsZGNhcmQgZXhwb3J0LWlnbm9yZSIgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCisJbWtkaXIgLXAgb25lLWxldmVsLWxvd2VyL3R3by1sZXZlbHMtbG93ZXIvaWdub3JlZC1vbmx5LWlmLWRpciAmJgorCWVjaG8gaWdub3JlZCBieSBpZ25vcmVkIGRpciA+b25lLWxldmVsLWxvd2VyL3R3by1sZXZlbHMtbG93ZXIvaWdub3JlZC1vbmx5LWlmLWRpci9pZ25vcmVkLWJ5LWlnbm9yZWQtZGlyICYmCisJZ2l0IGFkZCBvbmUtbGV2ZWwtbG93ZXIgJiYKKworCWdpdCBjb21taXQgLW0uICYmCisKKwlnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZSAmJgorCWNwIC5naXQvaW5mby9hdHRyaWJ1dGVzIGJhcmUvaW5mby9hdHRyaWJ1dGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlJyAnCisJZ2l0IGFyY2hpdmUgSEVBRCA+YXJjaGl2ZS50YXIgJiYKKwkobWtkaXIgYXJjaGl2ZSAmJiBjZCBhcmNoaXZlICYmICIkVEFSIiB4ZiAtKSA8YXJjaGl2ZS50YXIKKycKKwordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL2lnbm9yZWQKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9ub3QtaWdub3JlZC1kaXIvaWdub3JlZAordGVzdF9leHBlY3RfZXhpc3RzCWFyY2hpdmUvbm90LWlnbm9yZWQtZGlyL2lnbm9yZWQtb25seS1pZi1kaXIKK3Rlc3RfZXhwZWN0X2V4aXN0cwlhcmNoaXZlL25vdC1pZ25vcmVkLWRpci8KK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9pZ25vcmVkLW9ubHktaWYtZGlyLwordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL2lnbm9yZWQtb255LWlmLWRpci9pZ25vcmVkLWJ5LWlnbm9yZWQtZGlyCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvaWdub3JlZC13aXRob3V0LXNsYXNoLyAmJgordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL2lnbm9yZWQtd2l0aG91dC1zbGFzaC9mb28gJiYKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS93aWxkY2FyZC13aXRob3V0LXNsYXNoLwordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL3dpbGRjYXJkLXdpdGhvdXQtc2xhc2gvZm9vICYmCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvZGVlcC9hbmQvc2xhc2hsZXNzLyAmJgordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL2RlZXAvYW5kL3NsYXNobGVzcy9mb28gJiYKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9kZWVwL3dpdGgvd2lsZGNhcmQvICYmCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvZGVlcC93aXRoL3dpbGRjYXJkL2ZvbyAmJgordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL29uZS1sZXZlbC1sb3dlci8KK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9vbmUtbGV2ZWwtbG93ZXIvdHdvLWxldmVscy1sb3dlci9pZ25vcmVkLW9ubHktaWYtZGlyLwordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL29uZS1sZXZlbC1sb3dlci90d28tbGV2ZWxzLWxvd2VyL2lnbm9yZWQtb255LWlmLWRpci9pZ25vcmVkLWJ5LWlnbm9yZWQtZGlyCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MDAzLWFyY2hpdmUtemlwLnNoIGIvdC90NTAwMy1hcmNoaXZlLXppcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjc2ZDJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwMy1hcmNoaXZlLXppcC5zaApAQCAtMCwwICsxLDE5MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKworU1VCU1RGT1JNQVQ9JUglbgorCit0ZXN0X2xhenlfcHJlcmVxIFVOWklQX1NZTUxJTktTICcKKwkiJEdJVF9VTlpJUCIgIiRURVNUX0RJUkVDVE9SWSIvdDUwMDMvaW5mb3ppcC1zeW1saW5rcy56aXAgJiYKKwl0ZXN0IC1oIHN5bWxpbmsKKycKKwordGVzdF9sYXp5X3ByZXJlcSBVTlpJUF9DT05WRVJUICcKKwkiJEdJVF9VTlpJUCIgLWEgIiRURVNUX0RJUkVDVE9SWSIvdDUwMDMvaW5mb3ppcC1zeW1saW5rcy56aXAKKycKKworY2hlY2tfemlwKCkgeworCXppcGZpbGU9JDEuemlwCisJbGlzdGZpbGU9JDEubHN0CisJZGlyPSQxCisJZGlyX3dpdGhfcHJlZml4PSRkaXIvJDIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgIiBleHRyYWN0IFpJUCBhcmNoaXZlIiAnCisJCShta2RpciAkZGlyICYmIGNkICRkaXIgJiYgIiRHSVRfVU5aSVAiIC4uLyR6aXBmaWxlKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgIiB2YWxpZGF0ZSBmaWxlbmFtZXMiICIKKwkJKGNkICR7ZGlyX3dpdGhfcHJlZml4fWEgJiYgZmluZCAuKSB8IHNvcnQgPiRsaXN0ZmlsZSAmJgorCQl0ZXN0X2NtcCBhLmxzdCAkbGlzdGZpbGUKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFVOWklQICIgdmFsaWRhdGUgZmlsZSBjb250ZW50cyIgIgorCQlkaWZmIC1yIGEgJHtkaXJfd2l0aF9wcmVmaXh9YQorCSIKKworCWRpcj1lb2xfJDEKKwlkaXJfd2l0aF9wcmVmaXg9JGRpci8kMgorCWV4dHJhY3RlZD0ke2Rpcl93aXRoX3ByZWZpeH1hCisJb3JpZ2luYWw9YQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUF9DT05WRVJUICIgZXh0cmFjdCBaSVAgYXJjaGl2ZSB3aXRoIEVPTCBjb252ZXJzaW9uIiAnCisJCShta2RpciAkZGlyICYmIGNkICRkaXIgJiYgIiRHSVRfVU5aSVAiIC1hIC4uLyR6aXBmaWxlKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVBfQ09OVkVSVCAiIHZhbGlkYXRlIHRoYXQgdGV4dCBmaWxlcyBhcmUgY29udmVydGVkIiAiCisJCXRlc3RfY21wX2JpbiAkZXh0cmFjdGVkL3RleHQuY3IgJGV4dHJhY3RlZC90ZXh0LmNybGYgJiYKKwkJdGVzdF9jbXBfYmluICRleHRyYWN0ZWQvdGV4dC5jciAkZXh0cmFjdGVkL3RleHQubGYKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFVOWklQX0NPTlZFUlQgIiB2YWxpZGF0ZSB0aGF0IGJpbmFyeSBmaWxlcyBhcmUgdW5jaGFuZ2VkIiAiCisJCXRlc3RfY21wX2JpbiAkb3JpZ2luYWwvYmluYXJ5LmNyICAgJGV4dHJhY3RlZC9iaW5hcnkuY3IgJiYKKwkJdGVzdF9jbXBfYmluICRvcmlnaW5hbC9iaW5hcnkuY3JsZiAkZXh0cmFjdGVkL2JpbmFyeS5jcmxmICYmCisJCXRlc3RfY21wX2JpbiAkb3JpZ2luYWwvYmluYXJ5LmxmICAgJGV4dHJhY3RlZC9iaW5hcnkubGYKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFVOWklQX0NPTlZFUlQgIiB2YWxpZGF0ZSB0aGF0IGRpZmYgZmlsZXMgYXJlIGNvbnZlcnRlZCIgIgorCQl0ZXN0X2NtcF9iaW4gJGV4dHJhY3RlZC9kaWZmLmNyICRleHRyYWN0ZWQvZGlmZi5jcmxmICYmCisJCXRlc3RfY21wX2JpbiAkZXh0cmFjdGVkL2RpZmYuY3IgJGV4dHJhY3RlZC9kaWZmLmxmCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUF9DT05WRVJUICIgdmFsaWRhdGUgdGhhdCAtZGlmZiBmaWxlcyBhcmUgdW5jaGFuZ2VkIiAiCisJCXRlc3RfY21wX2JpbiAkb3JpZ2luYWwvbm9kaWZmLmNyICAgJGV4dHJhY3RlZC9ub2RpZmYuY3IgJiYKKwkJdGVzdF9jbXBfYmluICRvcmlnaW5hbC9ub2RpZmYuY3JsZiAkZXh0cmFjdGVkL25vZGlmZi5jcmxmICYmCisJCXRlc3RfY21wX2JpbiAkb3JpZ2luYWwvbm9kaWZmLmxmICAgJGV4dHJhY3RlZC9ub2RpZmYubGYKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFVOWklQX0NPTlZFUlQgIiB2YWxpZGF0ZSB0aGF0IGN1c3RvbSBkaWZmIGlzIHVuY2hhbmdlZCAiICIKKwkJdGVzdF9jbXBfYmluICRvcmlnaW5hbC9jdXN0b20uY3IgICAkZXh0cmFjdGVkL2N1c3RvbS5jciAmJgorCQl0ZXN0X2NtcF9iaW4gJG9yaWdpbmFsL2N1c3RvbS5jcmxmICRleHRyYWN0ZWQvY3VzdG9tLmNybGYgJiYKKwkJdGVzdF9jbXBfYmluICRvcmlnaW5hbC9jdXN0b20ubGYgICAkZXh0cmFjdGVkL2N1c3RvbS5sZgorCSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3BvcHVsYXRlIHdvcmtkaXInIFwKKyAgICAnbWtkaXIgYSAmJgorICAgICBlY2hvIHNpbXBsZSB0ZXh0ZmlsZSA+YS9hICYmCisgICAgIG1rZGlyIGEvYmluICYmCisgICAgIGNwIC9iaW4vc2ggYS9iaW4gJiYKKyAgICAgcHJpbnRmICJ0ZXh0XHIiCT5hL3RleHQuY3IgJiYKKyAgICAgcHJpbnRmICJ0ZXh0XHJcbiIJPmEvdGV4dC5jcmxmICYmCisgICAgIHByaW50ZiAidGV4dFxuIgk+YS90ZXh0LmxmICYmCisgICAgIHByaW50ZiAidGV4dFxyIgk+YS9ub2RpZmYuY3IgJiYKKyAgICAgcHJpbnRmICJ0ZXh0XHJcbiIJPmEvbm9kaWZmLmNybGYgJiYKKyAgICAgcHJpbnRmICJ0ZXh0XG4iCT5hL25vZGlmZi5sZiAmJgorICAgICBwcmludGYgInRleHRcciIJPmEvY3VzdG9tLmNyICYmCisgICAgIHByaW50ZiAidGV4dFxyXG4iCT5hL2N1c3RvbS5jcmxmICYmCisgICAgIHByaW50ZiAidGV4dFxuIgk+YS9jdXN0b20ubGYgJiYKKyAgICAgcHJpbnRmICJcMFxyIgk+YS9iaW5hcnkuY3IgJiYKKyAgICAgcHJpbnRmICJcMFxyXG4iCT5hL2JpbmFyeS5jcmxmICYmCisgICAgIHByaW50ZiAiXDBcbiIJPmEvYmluYXJ5LmxmICYmCisgICAgIHByaW50ZiAiXDBcciIJPmEvZGlmZi5jciAmJgorICAgICBwcmludGYgIlwwXHJcbiIJPmEvZGlmZi5jcmxmICYmCisgICAgIHByaW50ZiAiXDBcbiIJPmEvZGlmZi5sZiAmJgorICAgICBwcmludGYgIkFcJEZvcm1hdDolc1wkTyIgIiRTVUJTVEZPUk1BVCIgPmEvc3Vic3RmaWxlMSAmJgorICAgICBwcmludGYgIkEgbm90IHN1YnN0aXR1dGVkIE8iID5hL3N1YnN0ZmlsZTIgJiYKKyAgICAgKHA9bG9uZ19wYXRoX3RvX2FfZmlsZSAmJiBjZCBhICYmCisgICAgICBmb3IgZGVwdGggaW4gMSAyIDMgNCA1OyBkbyBta2RpciAkcCAmJiBjZCAkcDsgZG9uZSAmJgorICAgICAgZWNobyB0ZXh0ID5maWxlX3dpdGhfbG9uZ19wYXRoKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTLFVOWklQX1NZTUxJTktTICdhZGQgc3ltbGluaycgJworCWxuIC1zIGEgYS9zeW1saW5rX3RvX2EKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBmaWxlIGxpc3QnICcKKwkoY2QgYSAmJiBmaW5kIC4pIHwgc29ydCA+YS5sc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FkZCBpZ25vcmVkIGZpbGUnIFwKKyAgICAnZWNobyBpZ25vcmUgbWUgPmEvaWdub3JlZCAmJgorICAgICBlY2hvIGlnbm9yZWQgZXhwb3J0LWlnbm9yZSA+LmdpdC9pbmZvL2F0dHJpYnV0ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBmaWxlcyB0byByZXBvc2l0b3J5JyAnCisJZ2l0IGFkZCBhICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI3IDIyOjAwIiBnaXQgY29tbWl0IC1tIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwb3J0LXN1YnN0IGFuZCBkaWZmIGF0dHJpYnV0ZXMnICcKKwllY2hvICJhL25vZGlmZi4qIC1kaWZmIiA+Pi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisJZWNobyAiYS9kaWZmLiogZGlmZiIgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCWVjaG8gImEvY3VzdG9tLiogZGlmZj1jdXN0b20iID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKwlnaXQgY29uZmlnIGRpZmYuY3VzdG9tLmJpbmFyeSB0cnVlICYmCisJZWNobyAic3Vic3RmaWxlPyIgZXhwb3J0LXN1YnN0ID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKwlnaXQgbG9nIC0tbWF4LWNvdW50PTEgIi0tcHJldHR5PWZvcm1hdDpBJHtTVUJTVEZPUk1BVH1PIiBIRUFEIFwKKwkJPmEvc3Vic3RmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYmFyZSBjbG9uZScgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLmdpdCAmJgorCWNwIC5naXQvaW5mby9hdHRyaWJ1dGVzIGJhcmUuZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCSMgUmVjcmVhdGUgb3VyIGNoYW5nZXMgdG8gLmdpdC9jb25maWcgcmF0aGVyIHRoYW4ganVzdCBjb3B5aW5nIGl0LCBhcworCSMgd2UgZG8gbm90IHdhbnQgdG8gY2xvYmJlciBjb3JlLmJhcmUgb3Igb3RoZXIgc2V0dGluZ3MuCisJZ2l0IC1DIGJhcmUuZ2l0IGNvbmZpZyBkaWZmLmN1c3RvbS5iaW5hcnkgdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncmVtb3ZlIGlnbm9yZWQgZmlsZScgXAorICAgICdybSBhL2lnbm9yZWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAnIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIEhFQUQgPmQuemlwJworCitjaGVja196aXAgZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIGluIGEgYmFyZSByZXBvJyBcCisgICAgJyhjZCBiYXJlLmdpdCAmJiBnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgSEVBRCkgPmQxLnppcCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCB2cy4gdGhlIHNhbWUgaW4gYSBiYXJlIHJlcG8nIFwKKyAgICAndGVzdF9jbXBfYmluIGQuemlwIGQxLnppcCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIHdpdGggLS1vdXRwdXQnIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIC0tb3V0cHV0PWQyLnppcCBIRUFEICYmCisgICAgdGVzdF9jbXBfYmluIGQuemlwIGQyLnppcCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgd2l0aCAtLW91dHB1dCwgaW5mZXJyaW5nIGZvcm1hdCAobG9jYWwpJyAnCisJZ2l0IGFyY2hpdmUgLS1vdXRwdXQ9ZDMuemlwIEhFQUQgJiYKKwl0ZXN0X2NtcF9iaW4gZC56aXAgZDMuemlwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIHdpdGggLS1vdXRwdXQsIGluZmVycmluZyBmb3JtYXQgKHJlbW90ZSknICcKKwlnaXQgYXJjaGl2ZSAtLXJlbW90ZT0uIC0tb3V0cHV0PWQ0LnppcCBIRUFEICYmCisJdGVzdF9jbXBfYmluIGQuemlwIGQ0LnppcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIHdpdGggcHJlZml4JyBcCisgICAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCAtLXByZWZpeD1wcmVmaXgvIEhFQUQgPmUuemlwJworCitjaGVja196aXAgZSBwcmVmaXgvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIC0wIC0tZm9ybWF0PXppcCBvbiBsYXJnZSBmaWxlcycgJworCXRlc3RfY29uZmlnIGNvcmUuYmlnZmlsZXRocmVzaG9sZCAxICYmCisJZ2l0IGFyY2hpdmUgLTAgLS1mb3JtYXQ9emlwIEhFQUQgPmxhcmdlLnppcAorJworCitjaGVja196aXAgbGFyZ2UKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIG9uIGxhcmdlIGZpbGVzJyAnCisJdGVzdF9jb25maWcgY29yZS5iaWdmaWxldGhyZXNob2xkIDEgJiYKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgSEVBRCA+bGFyZ2UtY29tcHJlc3NlZC56aXAKKycKKworY2hlY2tfemlwIGxhcmdlLWNvbXByZXNzZWQKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MDAzL2luZm96aXAtc3ltbGlua3MuemlwIGIvdC90NTAwMy9pbmZvemlwLXN5bWxpbmtzLnppcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjU3MjhjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwMy9pbmZvemlwLXN5bWxpbmtzLnppcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MDA0LWFyY2hpdmUtY29ybmVyLWNhc2VzLnNoIGIvdC90NTAwNC1hcmNoaXZlLWNvcm5lci1jYXNlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZTdiMjNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwNC1hcmNoaXZlLWNvcm5lci1jYXNlcy5zaApAQCAtMCwwICsxLDIyNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY29ybmVyIGNhc2VzIG9mIGdpdC1hcmNoaXZlJworLiAuL3Rlc3QtbGliLnNoCisKKyMgdGhlIDEwa251bHMudGFyIGZpbGUgaXMgdXNlZCB0byB0ZXN0IGZvciBhbiBlbXB0eSBnaXQgZ2VuZXJhdGVkIHRhcgorIyB3aXRob3V0IGhhdmluZyB0byBpbnZva2UgdGFyIGJlY2F1c2UgYW4gb3RoZXJ3aXNlIHZhbGlkIGVtcHR5IEdOVSB0YXIKKyMgd2lsbCBiZSBjb25zaWRlcmVkIGJyb2tlbiBieSB7T3BlbixOZXR9QlNEIHRhcgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGNvbW1pdCB3aXRoIGVtcHR5IHRyZWUgYW5kIGZha2UgZW1wdHkgdGFyJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGZvbyAmJgorCXBlcmwgLWUgInByaW50IFwiXFwwXCIgeCAxMDI0MCIgPjEwa251bHMudGFyCisnCisKKyMgTWFrZSBhIGRpciBhbmQgY2xlYW4gaXQgdXAgYWZ0ZXJ3YXJkcworbWFrZV9kaXIoKSB7CisJbWtkaXIgIiQxIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmICckMSciCit9CisKKyMgQ2hlY2sgdGhhdCB0aGUgZGlyIGdpdmVuIGluICIkMSIgY29udGFpbnMgZXhhY3RseSB0aGUKKyMgc2V0IG9mIHBhdGhzIGdpdmVuIGFzIGFyZ3VtZW50cy4KK2NoZWNrX2RpcigpIHsKKwlkaXI9JDE7IHNoaWZ0CisJeworCQllY2hvICIkZGlyIiAmJgorCQlmb3IgaSBpbiAiJEAiOyBkbworCQkJZWNobyAiJGRpci8kaSIKKwkJZG9uZQorCX0gfCBzb3J0ID5leHBlY3QgJiYKKwlmaW5kICIkZGlyIiAhIC1uYW1lIHBheF9nbG9iYWxfaGVhZGVyIC1wcmludCB8IHNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9sYXp5X3ByZXJlcSBVTlpJUF9aSVA2NF9TVVBQT1JUICcKKwkiJEdJVF9VTlpJUCIgLXYgfCBncmVwIFpJUDY0X1NVUFBPUlQKKycKKworIyBic2R0YXIvbGliYXJjaGl2ZSB2ZXJzaW9ucyBiZWZvcmUgMy4xLjMgY29uc2lkZXIgYSB0YXIgZmlsZSB3aXRoIGEKKyMgZ2xvYmFsIHBheCBoZWFkZXIgdGhhdCBpcyBub3QgZm9sbG93ZWQgYnkgYSBmaWxlIHJlY29yZCBhcyBjb3JydXB0LgoraWYgIiRUQVIiIHRmICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MDA0L2VtcHR5LXdpdGgtcGF4LWhlYWRlci50YXIgPi9kZXYvbnVsbCAyPiYxCit0aGVuCisJdGVzdF9zZXRfcHJlcmVxIEhFQURFUl9PTkxZX1RBUl9PSworZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBIRUFERVJfT05MWV9UQVJfT0sgJ3RhciBhcmNoaXZlIG9mIGNvbW1pdCB3aXRoIGVtcHR5IHRyZWUnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgSEVBRCA+ZW1wdHktd2l0aC1wYXgtaGVhZGVyLnRhciAmJgorCW1ha2VfZGlyIGV4dHJhY3QgJiYKKwkiJFRBUiIgeGYgZW1wdHktd2l0aC1wYXgtaGVhZGVyLnRhciAtQyBleHRyYWN0ICYmCisJY2hlY2tfZGlyIGV4dHJhY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFyIGFyY2hpdmUgb2YgZW1wdHkgdHJlZSBpcyBlbXB0eScgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciBIRUFEOiA+ZW1wdHkudGFyICYmCisJdGVzdF9jbXBfYmluIDEwa251bHMudGFyIGVtcHR5LnRhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YXIgYXJjaGl2ZSBvZiBlbXB0eSB0cmVlIHdpdGggcHJlZml4JyAnCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIC0tcHJlZml4PWZvby8gSEVBRCA+cHJlZml4LnRhciAmJgorCW1ha2VfZGlyIGV4dHJhY3QgJiYKKwkiJFRBUiIgeGYgcHJlZml4LnRhciAtQyBleHRyYWN0ICYmCisJY2hlY2tfZGlyIGV4dHJhY3QgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgJ3ppcCBhcmNoaXZlIG9mIGVtcHR5IHRyZWUgaXMgZW1wdHknICcKKwkjIERldGVjdCB0aGUgZXhpdCBjb2RlIHByb2R1Y2VkIHdoZW4gb3VyIHBhcnRpY3VsYXIgZmxhdm9yIG9mIHVuemlwCisJIyBzZWVzIGFuIGVtcHR5IGFyY2hpdmUuIEluZm96aXAgd2lsbCBnZW5lcmF0ZSBhIHdhcm5pbmcgYW5kIGV4aXQgd2l0aAorCSMgY29kZSAxLiBCdXQgaW4gdGhlIG5hbWUgb2Ygc2FuaXR5LCB3ZSBkbyBub3QgZXhwZWN0IG90aGVyIHVuemlwCisJIyBpbXBsZW1lbnRhdGlvbnMgdG8gZG8gdGhlIHNhbWUgdGhpbmcgKGl0IHdvdWxkIGJlIHBlcmZlY3RseQorCSMgcmVhc29uYWJsZSB0byBleGl0IDAsIGZvciBleGFtcGxlKS4KKwkjCisJIyBUaGlzIG1ha2VzIG91ciB0ZXN0IGxlc3Mgcmlnb3JvdXMgb24gc29tZSBwbGF0Zm9ybXMgKHVuemlwIG1heSBub3QKKwkjIGhhbmRsZSB0aGUgZW1wdHkgcmVwbyBhdCBhbGwsIG1ha2luZyBvdXIgbGF0ZXIgY2hlY2sgb2YgaXRzIGV4aXQgY29kZQorCSMgYSBuby1vcCkuIEJ1dCB3ZSBjYW5ub3QgZG8gYW55dGhpbmcgcmVhc29uYWJsZSBleGNlcHQgc2tpcCB0aGUgdGVzdAorCSMgb24gc3VjaCBwbGF0Zm9ybXMgYW55d2F5LCBhbmQgdGhpcyBpcyB0aGUgbW9yYWwgZXF1aXZhbGVudC4KKwl7CisJCSIkR0lUX1VOWklQIiAiJFRFU1RfRElSRUNUT1JZIi90NTAwNC9lbXB0eS56aXAKKwkJZXhwZWN0X2NvZGU9JD8KKwl9ICYmCisKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgSEVBRCA+ZW1wdHkuemlwICYmCisJbWFrZV9kaXIgZXh0cmFjdCAmJgorCSgKKwkJY2QgZXh0cmFjdCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlICRleHBlY3RfY29kZSAiJEdJVF9VTlpJUCIgLi4vZW1wdHkuemlwCisJKSAmJgorCWNoZWNrX2RpciBleHRyYWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgJ3ppcCBhcmNoaXZlIG9mIGVtcHR5IHRyZWUgd2l0aCBwcmVmaXgnICcKKwkjIFdlIGRvIG5vdCBoYXZlIHRvIHBsYXkgZXhpdC1jb2RlIHRyaWNrcyBoZXJlLCBiZWNhdXNlIG91cgorCSMgcmVzdWx0IHNob3VsZCBub3QgYmUgZW1wdHk7IGl0IGhhcyBhIGRpcmVjdG9yeSBpbiBpdC4KKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgLS1wcmVmaXg9Zm9vLyBIRUFEID5wcmVmaXguemlwICYmCisJbWFrZV9kaXIgZXh0cmFjdCAmJgorCSgKKwkJY2QgZXh0cmFjdCAmJgorCQkiJEdJVF9VTlpJUCIgLi4vcHJlZml4LnppcAorCSkgJiYKKwljaGVja19kaXIgZXh0cmFjdCBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXJjaGl2ZSBjb21wbGFpbnMgYWJvdXQgcGF0aHNwZWMgb24gZW1wdHkgdHJlZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciBIRUFEIC0tIGZvbyA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBhIGNvbW1pdCB3aXRoIGFuIGVtcHR5IHN1YnRyZWUnICcKKwllbXB0eV90cmVlPSQoZ2l0IGhhc2gtb2JqZWN0IC10IHRyZWUgL2Rldi9udWxsKSAmJgorCXJvb3RfdHJlZT0kKHByaW50ZiAiMDQwMDAwIHRyZWUgJGVtcHR5X3RyZWVcdHN1YlxuIiB8IGdpdCBta3RyZWUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FyY2hpdmUgZW1wdHkgc3VidHJlZSB3aXRoIG5vIHBhdGhzcGVjJyAnCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyICRyb290X3RyZWUgPnN1YnRyZWUtYWxsLnRhciAmJgorCXRlc3RfY21wX2JpbiAxMGtudWxzLnRhciBzdWJ0cmVlLWFsbC50YXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXJjaGl2ZSBlbXB0eSBzdWJ0cmVlIGJ5IGRpcmVjdCBwYXRoc3BlYycgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAkcm9vdF90cmVlIC0tIHN1YiA+c3VidHJlZS1wYXRoLnRhciAmJgorCXRlc3RfY21wX2JpbiAxMGtudWxzLnRhciBzdWJ0cmVlLXBhdGgudGFyCisnCisKK1pJUElORk89emlwaW5mbworCit0ZXN0X2xhenlfcHJlcmVxIFpJUElORk8gJworCW49JCgiJFpJUElORk8iICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MDA0L2VtcHR5LnppcCB8IHNlZCAtbiAiMnMvLiogLy9wIikKKwl0ZXN0ICJ4JG4iID0gIngwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFpJUElORk8gJ3ppcCBhcmNoaXZlIHdpdGggbWFueSBlbnRyaWVzJyAnCisJIyBhZGQgYSBkaXJlY3Rvcnkgd2l0aCAyNTYgZmlsZXMKKwlta2RpciAwMCAmJgorCWZvciBhIGluIDAgMSAyIDMgNCA1IDYgNyA4IDkgYSBiIGMgZCBlIGYKKwlkbworCQlmb3IgYiBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5IGEgYiBjIGQgZSBmCisJCWRvCisJCQk6ID4wMC8kYSRiCisJCWRvbmUKKwlkb25lICYmCisJZ2l0IGFkZCAwMCAmJgorCWdpdCBjb21taXQgLW0gIjI1NiBmaWxlcyBpbiAxIGRpcmVjdG9yeSIgJiYKKworCSMgZHVwbGljYXRlIGl0IHRvIGdldCA2NTUzNiBmaWxlcyBpbiAyNTYgZGlyZWN0b3JpZXMKKwlzdWJ0cmVlPSQoZ2l0IHdyaXRlLXRyZWUgLS1wcmVmaXg9MDAvKSAmJgorCWZvciBjIGluIDAgMSAyIDMgNCA1IDYgNyA4IDkgYSBiIGMgZCBlIGYKKwlkbworCQlmb3IgZCBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5IGEgYiBjIGQgZSBmCisJCWRvCisJCQllY2hvICIwNDAwMDAgdHJlZSAkc3VidHJlZQkkYyRkIgorCQlkb25lCisJZG9uZSA+dHJlZSAmJgorCXRyZWU9JChnaXQgbWt0cmVlIDx0cmVlKSAmJgorCisJIyB6aXAgdGhlbQorCWdpdCBhcmNoaXZlIC1vIG1hbnkuemlwICR0cmVlICYmCisKKwkjIGNoZWNrIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgWklQIGZpbGUgZGlyZWN0b3J5CisJZXhwciA2NTUzNiArIDI1NiA+ZXhwZWN0ICYmCisJIiRaSVBJTkZPIiBtYW55LnppcCB8IGhlYWQgLTIgfCBzZWQgLW4gIjJzLy4qIC8vcCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBFWFBFTlNJVkUsVU5aSVAsVU5aSVBfWklQNjRfU1VQUE9SVCBcCisJJ3ppcCBhcmNoaXZlIGJpZ2dlciB0aGFuIDRHQicgJworCSMgYnVpbGQgc3RyaW5nIGNvbnRhaW5pbmcgNjU1MzYgY2hhcmFjdGVycworCXM9MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiAmJgorCXM9JHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyAmJgorCXM9JHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyAmJgorCisJIyBjcmVhdGUgYmxvYiB3aXRoIGEgbGVuZ3RoIG9mIDY1NTM2ICsgMSBieXRlcworCWJsb2I9JChlY2hvICRzIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisKKwkjIGNyZWF0ZSB0cmVlIGNvbnRhaW5pbmcgNjU1MDAgZW50cmllcyBvZiB0aGF0IGJsb2IKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgNjU1MDApCisJZG8KKwkJZWNobyAiMTAwNjQ0IGJsb2IgJGJsb2IJJGkiCisJZG9uZSA+dHJlZSAmJgorCXRyZWU9JChnaXQgbWt0cmVlIDx0cmVlKSAmJgorCisJIyB6aXAgaXQsIGNyZWF0aW5nIGFuIGFyY2hpdmUgYSBiaXQgYmlnZ2VyIHRoYW4gNEdCCisJZ2l0IGFyY2hpdmUgLTAgLW8gbWFueS1iaWcuemlwICR0cmVlICYmCisKKwkiJEdJVF9VTlpJUCIgLXQgbWFueS1iaWcuemlwIDk5OTkgNjU1MDAgJiYKKwkiJEdJVF9VTlpJUCIgLXQgbWFueS1iaWcuemlwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRVhQRU5TSVZFLExPTkdfSVNfNjRCSVQsVU5aSVAsVU5aSVBfWklQNjRfU1VQUE9SVCxaSVBJTkZPIFwKKwknemlwIGFyY2hpdmUgd2l0aCBmaWxlcyBiaWdnZXIgdGhhbiA0R0InICcKKwkjIFBhY2sgY3JlYXRlZCB3aXRoOgorCSMgICBkZCBpZj0vZGV2L3plcm8gb2Y9ZmlsZSBicz0xTSBjb3VudD00MTAwICYmIGdpdCBoYXNoLW9iamVjdCAtdyBmaWxlCisJbWtkaXIgLXAgLmdpdC9vYmplY3RzL3BhY2sgJiYKKwkoCisJCWNkIC5naXQvb2JqZWN0cy9wYWNrICYmCisJCSIkR0lUX1VOWklQIiAiJFRFU1RfRElSRUNUT1JZIi90NTAwNC9iaWctcGFjay56aXAKKwkpICYmCisJYmxvYj03NTRhOTNkNmZhZGE0YzY4NzMzNjBlNmNiNGIyMDkxMzIyNzFhYjBlICYmCisJc2l6ZT0kKGV4cHIgNDEwMCAiKiIgMTAyNCAiKiIgMTAyNCkgJiYKKworCSMgY3JlYXRlIGEgdHJlZSBjb250YWluaW5nIHRoZSBmaWxlCisJdHJlZT0kKGVjaG8gIjEwMDY0NCBibG9iICRibG9iCWJpZy1maWxlIiB8IGdpdCBta3RyZWUpICYmCisKKwkjIHppcCBpdCwgY3JlYXRpbmcgYW4gYXJjaGl2ZSB3aXRoIGEgZmlsZSBiaWdnZXIgdGhhbiA0R0IKKwlnaXQgYXJjaGl2ZSAtbyBiaWcuemlwICR0cmVlICYmCisKKwkiJEdJVF9VTlpJUCIgLXQgYmlnLnppcCAmJgorCSIkWklQSU5GTyIgYmlnLnppcCA+YmlnLmxzdCAmJgorCWdyZXAgJHNpemUgYmlnLmxzdAorJworCitidWlsZF90cmVlKCkgeworCXBlcmwgLWUgJworCQlteSAkaGFzaCA9ICRBUkdWWzBdOworCQlmb3JlYWNoIG15ICRvcmRlciAoMi4uNikgeworCQkJJGZpcnN0ID0gMTAgKiogJG9yZGVyOworCQkJZm9yZWFjaCBteSAkaSAoLTEzLi4tOSkgeworCQkJCW15ICRuYW1lID0gImEiIHggKCRmaXJzdCArICRpKTsKKwkJCQlwcmludCAiMTAwNjQ0IGJsb2IgJGhhc2hcdCRuYW1lXG4iCisJCQl9CisJCX0KKwknICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFyIGFyY2hpdmUgd2l0aCBsb25nIHBhdGhzJyAnCisJYmxvYj0kKGVjaG8gZm9vIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJdHJlZT0kKGJ1aWxkX3RyZWUgJGJsb2IgfCBnaXQgbWt0cmVlKSAmJgorCWdpdCBhcmNoaXZlIC1vIGxvbmdfcGF0aHMudGFyICR0cmVlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTAwNC9iaWctcGFjay56aXAgYi90L3Q1MDA0L2JpZy1wYWNrLnppcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWFmNjE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwNC9iaWctcGFjay56aXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90NTAwNC9lbXB0eS13aXRoLXBheC1oZWFkZXIudGFyIGIvdC90NTAwNC9lbXB0eS13aXRoLXBheC1oZWFkZXIudGFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOWUzOWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MDA0L2VtcHR5LXdpdGgtcGF4LWhlYWRlci50YXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90NTAwNC9lbXB0eS56aXAgYi90L3Q1MDA0L2VtcHR5LnppcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTc2YmI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwNC9lbXB0eS56aXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90NTEwMC1tYWlsaW5mby5zaCBiL3QvdDUxMDAtbWFpbGluZm8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTQ3ZTYxNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAtbWFpbGluZm8uc2gKQEAgLTAsMCArMSwyMzEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG1haWxpbmZvIGFuZCBnaXQgbWFpbHNwbGl0IHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCitEQVRBPSIkVEVTVF9ESVJFQ1RPUlkvdDUxMDAiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwbGl0IHNhbXBsZSBib3gnIFwKKwknZ2l0IG1haWxzcGxpdCAtby4gIiREQVRBL3NhbXBsZS5tYm94IiA+bGFzdCAmJgorCWxhc3Q9JChjYXQgbGFzdCkgJiYKKwllY2hvIHRvdGFsIGlzICRsYXN0ICYmCisJdGVzdCAkKGNhdCBsYXN0KSA9IDE4JworCitjaGVja19tYWlsaW5mbyAoKSB7CisJbWFpbD0kMSBvcHQ9JDIKKwltbz0iJG1haWwkb3B0IgorCWdpdCBtYWlsaW5mbyAtdSAkb3B0ICJtc2ckbW8iICJwYXRjaCRtbyIgPCIkbWFpbCIgPiJpbmZvJG1vIiAmJgorCXRlc3RfY21wICIkREFUQS9tc2ckbW8iICJtc2ckbW8iICYmCisJdGVzdF9jbXAgIiREQVRBL3BhdGNoJG1vIiAicGF0Y2gkbW8iICYmCisJdGVzdF9jbXAgIiREQVRBL2luZm8kbW8iICJpbmZvJG1vIgorfQorCisKK2ZvciBtYWlsIGluIDAwKgorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJtYWlsaW5mbyAkbWFpbCIgJworCQljaGVja19tYWlsaW5mbyAiJG1haWwiICIiICYmCisJCWlmIHRlc3QgLWYgIiREQVRBL21zZyRtYWlsLS1zY2lzc29ycyIKKwkJdGhlbgorCQkJY2hlY2tfbWFpbGluZm8gIiRtYWlsIiAtLXNjaXNzb3JzCisJCWZpICYmCisJCWlmIHRlc3QgLWYgIiREQVRBL21zZyRtYWlsLS1uby1pbmJvZHktaGVhZGVycyIKKwkJdGhlbgorCQkJY2hlY2tfbWFpbGluZm8gIiRtYWlsIiAtLW5vLWluYm9keS1oZWFkZXJzCisJCWZpICYmCisJCWlmIHRlc3QgLWYgIiREQVRBL21zZyRtYWlsLS1tZXNzYWdlLWlkIgorCQl0aGVuCisJCQljaGVja19tYWlsaW5mbyAiJG1haWwiIC0tbWVzc2FnZS1pZAorCQlmaQorCScKK2RvbmUKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdCBib3ggd2l0aCByZmMyMDQ3IHNhbXBsZXMnIFwKKwknbWtkaXIgcmZjMjA0NyAmJgorCWdpdCBtYWlsc3BsaXQgLW9yZmMyMDQ3ICIkREFUQS9yZmMyMDQ3LXNhbXBsZXMubWJveCIgXAorCSAgPnJmYzIwNDcvbGFzdCAmJgorCWxhc3Q9JChjYXQgcmZjMjA0Ny9sYXN0KSAmJgorCWVjaG8gdG90YWwgaXMgJGxhc3QgJiYKKwl0ZXN0ICQoY2F0IHJmYzIwNDcvbGFzdCkgPSAxMScKKworZm9yIG1haWwgaW4gcmZjMjA0Ny8wMCoKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAibWFpbGluZm8gJG1haWwiICcKKwkJZ2l0IG1haWxpbmZvIC11ICIkbWFpbC1tc2ciICIkbWFpbC1wYXRjaCIgPCIkbWFpbCIgPiIkbWFpbC1pbmZvIiAmJgorCQllY2hvIG1zZyAmJgorCQl0ZXN0X2NtcCAiJERBVEEvZW1wdHkiICIkbWFpbC1tc2ciICYmCisJCWVjaG8gcGF0Y2ggJiYKKwkJdGVzdF9jbXAgIiREQVRBL2VtcHR5IiAiJG1haWwtcGF0Y2giICYmCisJCWVjaG8gaW5mbyAmJgorCQl0ZXN0X2NtcCAiJERBVEEvcmZjMjA0Ny1pbmZvLSQoYmFzZW5hbWUgJG1haWwpIiAiJG1haWwtaW5mbyIKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3BlY3QgTlVMcycgJworCisJZ2l0IG1haWxzcGxpdCAtZDMgLW8uICIkREFUQS9udWwtcGxhaW4iICYmCisJdGVzdF9jbXAgIiREQVRBL251bC1wbGFpbiIgMDAxICYmCisJKGNhdCAwMDEgfCBnaXQgbWFpbGluZm8gbXNnIHBhdGNoKSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgcGF0Y2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQcmVzZXJ2ZSBOVUxzIG91dCBvZiBNSU1FIGVuY29kZWQgbWVzc2FnZScgJworCisJZ2l0IG1haWxzcGxpdCAtZDUgLW8uICIkREFUQS9udWwtYjY0LmluIiAmJgorCXRlc3RfY21wICIkREFUQS9udWwtYjY0LmluIiAwMDAwMSAmJgorCWdpdCBtYWlsaW5mbyBtc2cgcGF0Y2ggPDAwMDAxICYmCisJdGVzdF9jbXAgIiREQVRBL251bC1iNjQuZXhwZWN0IiBwYXRjaAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxpbmZvIG9uIGZyb20gaGVhZGVyIHdpdGhvdXQgbmFtZSB3b3JrcycgJworCisJbWtkaXIgaW5mby1mcm9tICYmCisJZ2l0IG1haWxzcGxpdCAtb2luZm8tZnJvbSAiJERBVEEvaW5mby1mcm9tLmluIiAmJgorCXRlc3RfY21wICIkREFUQS9pbmZvLWZyb20uaW4iIGluZm8tZnJvbS8wMDAxICYmCisJZ2l0IG1haWxpbmZvIGluZm8tZnJvbS9tc2cgaW5mby1mcm9tL3BhdGNoIFwKKwkgIDxpbmZvLWZyb20vMDAwMSA+aW5mby1mcm9tL291dCAmJgorCXRlc3RfY21wICIkREFUQS9pbmZvLWZyb20uZXhwZWN0IiBpbmZvLWZyb20vb3V0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbGluZm8gZmluZHMgaGVhZGVycyBhZnRlciBlbWJlZGRlZCBGcm9tIGxpbmUnICcKKwlta2RpciBlbWJlZC1mcm9tICYmCisJZ2l0IG1haWxzcGxpdCAtb2VtYmVkLWZyb20gIiREQVRBL2VtYmVkLWZyb20uaW4iICYmCisJdGVzdF9jbXAgIiREQVRBL2VtYmVkLWZyb20uaW4iIGVtYmVkLWZyb20vMDAwMSAmJgorCWdpdCBtYWlsaW5mbyBlbWJlZC1mcm9tL21zZyBlbWJlZC1mcm9tL3BhdGNoIFwKKwkgIDxlbWJlZC1mcm9tLzAwMDEgPmVtYmVkLWZyb20vb3V0ICYmCisJdGVzdF9jbXAgIiREQVRBL2VtYmVkLWZyb20uZXhwZWN0IiBlbWJlZC1mcm9tL291dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsaW5mbyBvbiBtZXNzYWdlIHdpdGggcXVvdGVkID5Gcm9tJyAnCisJbWtkaXIgcXVvdGVkLWZyb20gJiYKKwlnaXQgbWFpbHNwbGl0IC1vcXVvdGVkLWZyb20gIiREQVRBL3F1b3RlZC1mcm9tLmluIiAmJgorCXRlc3RfY21wICIkREFUQS9xdW90ZWQtZnJvbS5pbiIgcXVvdGVkLWZyb20vMDAwMSAmJgorCWdpdCBtYWlsaW5mbyBxdW90ZWQtZnJvbS9tc2cgcXVvdGVkLWZyb20vcGF0Y2ggXAorCSAgPHF1b3RlZC1mcm9tLzAwMDEgPnF1b3RlZC1mcm9tL291dCAmJgorCXRlc3RfY21wICIkREFUQS9xdW90ZWQtZnJvbS5leHBlY3QiIHF1b3RlZC1mcm9tL21zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsaW5mbyB1bmVzY2FwZXMgd2l0aCAtLW1ib3hyZCcgJworCW1rZGlyIG1ib3hyZCAmJgorCWdpdCBtYWlsc3BsaXQgLW9tYm94cmQgLS1tYm94cmQgXAorCQkiJERBVEEvc2FtcGxlLm1ib3hyZCIgPmxhc3QgJiYKKwl0ZXN0IHgiJChjYXQgbGFzdCkiID0geDIgJiYKKwlmb3IgaSBpbiAwMDAxIDAwMDIKKwlkbworCQlnaXQgbWFpbGluZm8gbWJveHJkL21zZyBtYm94cmQvcGF0Y2ggXAorCQkgIDxtYm94cmQvJGkgPm1ib3hyZC9vdXQgJiYKKwkJdGVzdF9jbXAgIiREQVRBLyR7aX1tYm94cmQiIG1ib3hyZC9tc2cKKwlkb25lICYmCisJc3A9IiAiICYmCisJZWNobyAiRnJvbSAiID5leHBlY3QgJiYKKwllY2hvICJGcm9tICIgPj5leHBlY3QgJiYKKwllY2hvID4+IGV4cGVjdCAmJgorCWNhdCA+c3AgPDwtSU5QVVRfRU5EICYmCisJRnJvbSBtYm94cmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCisJRnJvbTogdHJhaWxpbmcgc3BhY2VyIDxzcEBleGFtcGxlLmNvbT4KKwlTdWJqZWN0OiBbUEFUQ0hdIGEgY29tbWl0IHdpdGggdHJhaWxpbmcgc3BhY2UKKworCUZyb20kc3AKKwk+RnJvbSRzcAorCisJSU5QVVRfRU5ECisKKwlnaXQgbWFpbHNwbGl0IC1mMiAtb21ib3hyZCAtLW1ib3hyZCA8c3AgPmxhc3QgJiYKKwl0ZXN0IHgiJChjYXQgbGFzdCkiID0geDEgJiYKKwlnaXQgbWFpbGluZm8gbWJveHJkL21zZyBtYm94cmQvcGF0Y2ggPG1ib3hyZC8wMDAzICYmCisJdGVzdF9jbXAgZXhwZWN0IG1ib3hyZC9tc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbGluZm8gaGFuZGxlcyByZmMyODIyIHF1b3RlZC1zdHJpbmcnICcKKwlta2RpciBxdW90ZWQtc3RyaW5nICYmCisJZ2l0IG1haWxpbmZvIC9kZXYvbnVsbCAvZGV2L251bGwgPCIkREFUQS9xdW90ZWQtc3RyaW5nLmluIiBcCisJCT5xdW90ZWQtc3RyaW5nL2luZm8gJiYKKwl0ZXN0X2NtcCAiJERBVEEvcXVvdGVkLXN0cmluZy5leHBlY3QiIHF1b3RlZC1zdHJpbmcvaW5mbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsaW5mbyBoYW5kbGVzIHJmYzI4MjIgY29tbWVudCcgJworCW1rZGlyIGNvbW1lbnQgJiYKKwlnaXQgbWFpbGluZm8gL2Rldi9udWxsIC9kZXYvbnVsbCA8IiREQVRBL2NvbW1lbnQuaW4iIFwKKwkJPmNvbW1lbnQvaW5mbyAmJgorCXRlc3RfY21wICIkREFUQS9jb21tZW50LmV4cGVjdCIgY29tbWVudC9pbmZvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxpbmZvIHdpdGggbWFpbGluZm8uc2Npc3NvcnMgY29uZmlnJyAnCisJdGVzdF9jb25maWcgbWFpbGluZm8uc2Npc3NvcnMgdHJ1ZSAmJgorCSgKKwkJbWtkaXIgc3ViICYmCisJCWNkIHN1YiAmJgorCQlnaXQgbWFpbGluZm8gLi4vbXNnMDAxNC5zYyAuLi9wYXRjaDAwMTQuc2MgPC4uLzAwMTQgPi4uL2luZm8wMDE0LnNjCisJKSAmJgorCXRlc3RfY21wICIkREFUQS9tc2cwMDE0LS1zY2lzc29ycyIgbXNnMDAxNC5zYyAmJgorCXRlc3RfY21wICIkREFUQS9wYXRjaDAwMTQtLXNjaXNzb3JzIiBwYXRjaDAwMTQuc2MgJiYKKwl0ZXN0X2NtcCAiJERBVEEvaW5mbzAwMTQtLXNjaXNzb3JzIiBpbmZvMDAxNC5zYworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxpbmZvIG5vIG9wdGlvbnMnICcKKwlzdWJqPSIkKGVjaG8gIlN1YmplY3Q6IFtQQVRDSF0gW290aGVyXSBbUEFUQ0hdIG1lc3NhZ2UiIHwKKwkJZ2l0IG1haWxpbmZvIC9kZXYvbnVsbCAvZGV2L251bGwpIiAmJgorCXRlc3QgeiIkc3ViaiIgPSB6IlN1YmplY3Q6IG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxpbmZvIC1rJyAnCisJc3Viaj0iJChlY2hvICJTdWJqZWN0OiBbUEFUQ0hdIFtvdGhlcl0gW1BBVENIXSBtZXNzYWdlIiB8CisJCWdpdCBtYWlsaW5mbyAtayAvZGV2L251bGwgL2Rldi9udWxsKSIgJiYKKwl0ZXN0IHoiJHN1YmoiID0geiJTdWJqZWN0OiBbUEFUQ0hdIFtvdGhlcl0gW1BBVENIXSBtZXNzYWdlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsaW5mbyAtYiBubyBbUEFUQ0hdJyAnCisJc3Viaj0iJChlY2hvICJTdWJqZWN0OiBbb3RoZXJdIG1lc3NhZ2UiIHwKKwkJZ2l0IG1haWxpbmZvIC1iIC9kZXYvbnVsbCAvZGV2L251bGwpIiAmJgorCXRlc3QgeiIkc3ViaiIgPSB6IlN1YmplY3Q6IFtvdGhlcl0gbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbGluZm8gLWIgbGVhZGluZyBbUEFUQ0hdJyAnCisJc3Viaj0iJChlY2hvICJTdWJqZWN0OiBbUEFUQ0hdIFtvdGhlcl0gbWVzc2FnZSIgfAorCQlnaXQgbWFpbGluZm8gLWIgL2Rldi9udWxsIC9kZXYvbnVsbCkiICYmCisJdGVzdCB6IiRzdWJqIiA9IHoiU3ViamVjdDogW290aGVyXSBtZXNzYWdlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsaW5mbyAtYiBkb3VibGUgW1BBVENIXScgJworCXN1Ymo9IiQoZWNobyAiU3ViamVjdDogW1BBVENIXSBbUEFUQ0hdIG1lc3NhZ2UiIHwKKwkJZ2l0IG1haWxpbmZvIC1iIC9kZXYvbnVsbCAvZGV2L251bGwpIiAmJgorCXRlc3QgeiIkc3ViaiIgPSB6IlN1YmplY3Q6IG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ21haWxpbmZvIC1iIHRyYWlsaW5nIFtQQVRDSF0nICcKKwlzdWJqPSIkKGVjaG8gIlN1YmplY3Q6IFtvdGhlcl0gW1BBVENIXSBtZXNzYWdlIiB8CisJCWdpdCBtYWlsaW5mbyAtYiAvZGV2L251bGwgL2Rldi9udWxsKSIgJiYKKwl0ZXN0IHoiJHN1YmoiID0geiJTdWJqZWN0OiBbb3RoZXJdIG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ21haWxpbmZvIC1iIHNlcGFyYXRlZCBkb3VibGUgW1BBVENIXScgJworCXN1Ymo9IiQoZWNobyAiU3ViamVjdDogW1BBVENIXSBbb3RoZXJdIFtQQVRDSF0gbWVzc2FnZSIgfAorCQlnaXQgbWFpbGluZm8gLWIgL2Rldi9udWxsIC9kZXYvbnVsbCkiICYmCisJdGVzdCB6IiRzdWJqIiA9IHoiU3ViamVjdDogW290aGVyXSBtZXNzYWdlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsaW5mbyBoYW5kbGVzIHVudXN1YWwgaGVhZGVyIHdoaXRlc3BhY2UnICcKKwlnaXQgbWFpbGluZm8gL2Rldi9udWxsIC9kZXYvbnVsbCA+YWN0dWFsIDw8LVxFT0YgJiYKKwlGcm9tOlJlYWwgTmFtZSA8dXNlckBleGFtcGxlLmNvbT4KKwlTdWJqZWN0OiAgICBleHRyYSBzcGFjZXMKKwlFT0YKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBdXRob3I6IFJlYWwgTmFtZQorCUVtYWlsOiB1c2VyQGV4YW1wbGUuY29tCisJU3ViamVjdDogZXh0cmEgc3BhY2VzCisKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTEwMC8uZ2l0YXR0cmlidXRlcyBiL3QvdDUxMDAvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzZjUxNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSw0IEBACittc2cqCWVuY29kaW5nPVVURi04CitpbmZvKgllbmNvZGluZz1VVEYtOAorcmZjMjA0Ny1pbmZvLSoJZW5jb2Rpbmc9VVRGLTgKK3NhbXBsZS5tYm94CWVuY29kaW5nPVVURi04CmRpZmYgLS1naXQgYS90L3Q1MTAwLzAwMDFtYm94cmQgYi90L3Q1MTAwLzAwMDFtYm94cmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0ZWM1NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvMDAwMW1ib3hyZApAQCAtMCwwICsxLDQgQEAKK0Zyb20gdGhlIGJlZ2lubmluZywgbWJveCBzaG91bGQgaGF2ZSBiZWVuIG1ib3hyZAorPkZyb20gZXNjYXBlZAorRnJvbSBub3QgbWFuZ2xlZCBidXQgdGhpcyBsaW5lIHNob3VsZCBoYXZlIGJlZW4gZXNjYXBlZAorCmRpZmYgLS1naXQgYS90L3Q1MTAwLzAwMDJtYm94cmQgYi90L3Q1MTAwLzAwMDJtYm94cmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzNDNkNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvMDAwMm1ib3hyZApAQCAtMCwwICsxLDUgQEAKKyA+RnJvbSB1bmNoYW5nZWQKKyBGcm9tIGFsc28gdW5jaGFuZ2VkCitubyB0cmFpbGluZyBzcGFjZSwgbm8gZXNjYXBpbmcgbmVjZXNzYXJ5IGFuZCAnPicgd2FzIGludGVuZGVkOgorPkZyb20KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9jb21tZW50LmV4cGVjdCBiL3QvdDUxMDAvY29tbWVudC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyODE3NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvY29tbWVudC5leHBlY3QKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yICh0aGlzIGlzIChyZWFsbHkpIGEgY29tbWVudCAoaG9uZXN0bHkpKQorRW1haWw6IHNvbWVib2R5QGV4YW1wbGUuY29tCitTdWJqZWN0OiB0ZXN0aW5nIGNvbW1lbnRzCitEYXRlOiBTdW4sIDI1IE1heSAyMDA4IDAwOjM4OjE4IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvY29tbWVudC5pbiBiL3QvdDUxMDAvY29tbWVudC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTNhMTkyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9jb21tZW50LmluCkBAIC0wLDAgKzEsOSBAQAorRnJvbSAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkEgVSBUaG9yIiA8c29tZWJvZHlAZXhhbXBsZS5jb20+ICh0aGlzIGlzIFwocmVhbGx5XCkgYSBjb21tZW50IChob25lc3RseSkpCitEYXRlOiBTdW4sIDI1IE1heSAyMDA4IDAwOjM4OjE4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHRlc3RpbmcgY29tbWVudHMKKworCisKKy0tLQorcGF0Y2gKZGlmZiAtLWdpdCBhL3QvdDUxMDAvZW1iZWQtZnJvbS5leHBlY3QgYi90L3Q1MTAwL2VtYmVkLWZyb20uZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YTNhMzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2VtYmVkLWZyb20uZXhwZWN0CkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBDb21taXQgQXV0aG9yCitFbWFpbDogY29tbWl0QGV4YW1wbGUuY29tCitTdWJqZWN0OiBwYXRjaCBzdWJqZWN0CitEYXRlOiBTYXQsIDEzIFNlcCAyMDE0IDIxOjEzOjIzIC0wNDAwIAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2VtYmVkLWZyb20uaW4gYi90L3Q1MTAwL2VtYmVkLWZyb20uaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzZjg0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvZW1iZWQtZnJvbS5pbgpAQCAtMCwwICsxLDEzIEBACitGcm9tIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBFbWFpbCBBdXRob3IgPGVtYWlsQGV4YW1wbGUuY29tPgorRGF0ZTogU3VuLCAyNSBNYXkgMjAwOCAwMDozODoxOCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBlbWFpbCBzdWJqZWN0CisKKz5Gcm9tIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDb21taXQgQXV0aG9yIDxjb21taXRAZXhhbXBsZS5jb20+CitEYXRlOiBTYXQsIDEzIFNlcCAyMDE0IDIxOjEzOjIzIC0wNDAwCitTdWJqZWN0OiBwYXRjaCBzdWJqZWN0CisKK3BhdGNoIGJvZHkKKy0tLQorcGF0Y2gKZGlmZiAtLWdpdCBhL3QvdDUxMDAvZW1wdHkgYi90L3Q1MTAwL2VtcHR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2VtcHR5CmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8tZnJvbS5leHBlY3QgYi90L3Q1MTAwL2luZm8tZnJvbS5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxZDJlYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mby1mcm9tLmV4cGVjdApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogYmFyZUBleGFtcGxlLmNvbQorRW1haWw6IGJhcmVAZXhhbXBsZS5jb20KK1N1YmplY3Q6IHRlc3RpbmcgYmFyZSBhZGRyZXNzIGluIGZyb20gaGVhZGVyCitEYXRlOiBTdW4sIDI1IE1heSAyMDA4IDAwOjM4OjE4IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mby1mcm9tLmluIGIvdC90NTEwMC9pbmZvLWZyb20uaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwODIwOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mby1mcm9tLmluCkBAIC0wLDAgKzEsOCBAQAorRnJvbSA2NjdkODk0MGU3MTljZGRlZTFjZmUyMzdjYmJlMjE1ZTIwMjcwYjA5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogYmFyZUBleGFtcGxlLmNvbQorRGF0ZTogU3VuLCAyNSBNYXkgMjAwOCAwMDozODoxOCAtMDcwMAorU3ViamVjdDogW1BBVENIXSB0ZXN0aW5nIGJhcmUgYWRkcmVzcyBpbiBmcm9tIGhlYWRlcgorCitjb21taXQgbWVzc2FnZQorLS0tCitwYXRjaApkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAwMSBiL3QvdDUxMDAvaW5mbzAwMDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1MTUzOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMDEKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgKHp6eikgVSBUaG9yIChDb21tZW50KQorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBhIGNvbW1pdC4KK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDAyIGIvdC90NTEwMC9pbmZvMDAwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWJiMGZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAwMgpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogYW5vdGhlciBwYXRjaAorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMDMgYi90L3Q1MTAwL2luZm8wMDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMGQxMjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDAzCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBIFUgVGhvcgorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiB0aGlyZCBwYXRjaAorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMDQgYi90L3Q1MTAwL2luZm8wMDA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNmMzMDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDA0CkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBZT1NISUZVSkkgSGlkZWFraSAvIOWQieiXpOiLseaYjgorRW1haWw6IHlvc2hmdWppQGxpbnV4LWlwdjYub3JnCitTdWJqZWN0OiBHSVQ6IFRyeSBhbGwgYWRkcmVzc2VzIGZvciBnaXZlbiByZW1vdGUgbmFtZQorRGF0ZTogVGh1LCAyMSBKdWwgMjAwNSAwOToxMDozNiAtMDQwMCAoRURUKQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDA1IGIvdC90NTEwMC9pbmZvMDAwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmE0NmZjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAwNQpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogRGF2aWQgS8OlZ2VkYWwKK0VtYWlsOiBkYXZpZGtAbHlzYXRvci5saXUuc2UKK1N1YmplY3Q6IEZpeGVkIHR3byBidWdzIGluIGdpdC1jdnNpbXBvcnQtc2NyaXB0LgorRGF0ZTogTW9uLCAxNSBBdWcgMjAwNSAyMDoxODoyNSArMDIwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDA2IGIvdC90NTEwMC9pbmZvMDAwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzA1Mjc3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAwNgpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogYSBjb21taXQuCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAwNyBiL3QvdDUxMDAvaW5mbzAwMDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliYjBmZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMDcKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IGFub3RoZXIgcGF0Y2gKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDA4IGIvdC90NTEwMC9pbmZvMDAwOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGEyOTUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAwOApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogSnVuaW8gQyBIYW1hbm8KK0VtYWlsOiBqdW5pb0BrZXJuZWwub3JnCitTdWJqZWN0OiBhbm90aGVyIHBhdGNoCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAwOSBiL3QvdDUxMDAvaW5mbzAwMDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2NjMyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMDkKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEYgVSBCYXIKK0VtYWlsOiBmLnUuYmFyQGV4YW1wbGUuY29tCitTdWJqZWN0OiB1cGRhdGVzCitEYXRlOiBNb24sIDE3IFNlcCAyMDAxIDAwOjAwOjAwICswOTAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTAgYi90L3Q1MTAwL2luZm8wMDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTEyNDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDEwCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBMdWthcyBTYW5kc3Ryw7ZtCitFbWFpbDogbHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2UKK1N1YmplY3Q6IGdpdC1tYWlsaW5mbzogRml4IGdldHRpbmcgdGhlIHN1YmplY3QgZnJvbSB0aGUgYm9keQorRGF0ZTogVGh1LCAxMCBKdWwgMjAwOCAyMzo0MTozMyArMDIwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDExIGIvdC90NTEwMC9pbmZvMDAxMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTVhNjA1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxMQpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogWHl6enkKK0RhdGU6IEZyaSwgOCBBdWcgMjAwOCAxMzowODozNyArMDIwMCAoQ0VTVCkKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxMiBiL3QvdDUxMDAvaW5mbzAwMTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxMjE2ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTIKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IERtaXRyaXkgQmxpbm92CitFbWFpbDogYmRhQG1uc3NwYi5ydQorU3ViamVjdDog0JjQt9C80LXQvdGR0L0g0YHQv9C40YHQvtC6INC/0LDQutC10YLQvtCyINC90LXQvtCx0YXQvtC00LjQvNGL0YUg0LTQu9GPINGB0LHQvtGA0LrQuAorRGF0ZTogV2VkLCAxMiBOb3YgMjAwOCAxNzo1NDo0MSArMDMwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDEyLS1tZXNzYWdlLWlkIGIvdC90NTEwMC9pbmZvMDAxMi0tbWVzc2FnZS1pZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzEyMTZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxMi0tbWVzc2FnZS1pZApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogRG1pdHJpeSBCbGlub3YKK0VtYWlsOiBiZGFAbW5zc3BiLnJ1CitTdWJqZWN0OiDQmNC30LzQtdC90ZHQvSDRgdC/0LjRgdC+0Log0L/QsNC60LXRgtC+0LIg0L3QtdC+0LHRhdC+0LTQuNC80YvRhSDQtNC70Y8g0YHQsdC+0YDQutC4CitEYXRlOiBXZWQsIDEyIE5vdiAyMDA4IDE3OjU0OjQxICswMzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTMgYi90L3Q1MTAwL2luZm8wMDEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZTA0OWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDEzCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBIFUgVGhvcgorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBhIHBhdGNoCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxNCBiL3QvdDUxMDAvaW5mbzAwMTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1NjZiMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTQKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEp1bmlvIEhhbWFubworRW1haWw6IGp1bmtpb0Bjb3gubmV0CitTdWJqZWN0OiBCTEFIIE9ORQorRGF0ZTogVGh1LCAyMCBBdWcgMjAwOSAxNzoxODoyMiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE0LS1zY2lzc29ycyBiL3QvdDUxMDAvaW5mbzAwMTQtLXNjaXNzb3JzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiOWM4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDE0LS1zY2lzc29ycwpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogSnVuaW8gQyBIYW1hbm8KK0VtYWlsOiBnaXRzdGVyQHBvYm94LmNvbQorU3ViamVjdDogVGVhY2ggbWFpbGluZm8gdG8gaWdub3JlIGV2ZXJ5dGhpbmcgYmVmb3JlIC0tID44IC0tIG1hcmsKK0RhdGU6IFRodSwgMjAgQXVnIDIwMDkgMTc6MTg6MjIgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxNSBiL3QvdDUxMDAvaW5mbzAwMTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExNGYxMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTUKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IAorRW1haWw6IAorU3ViamVjdDogY2hlY2sgYm9ndXMgYm9keSBoZWFkZXIgKGZyb20pCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxNS0tbm8taW5ib2R5LWhlYWRlcnMgYi90L3Q1MTAwL2luZm8wMDE1LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGQ4ZDc3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxNS0tbm8taW5ib2R5LWhlYWRlcnMKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IGNoZWNrIGJvZ3VzIGJvZHkgaGVhZGVyIChmcm9tKQorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTYgYi90L3Q1MTAwL2luZm8wMDE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Y2NkMGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDE2CkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBIFUgVGhvcgorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBjaGVjayBib2d1cyBib2R5IGhlYWRlciAoZGF0ZSkKK0RhdGU6IGJvZ3VzIAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE2LS1uby1pbmJvZHktaGVhZGVycyBiL3QvdDUxMDAvaW5mbzAwMTYtLW5vLWluYm9keS1oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ODU3ZDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDE2LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogY2hlY2sgYm9ndXMgYm9keSBoZWFkZXIgKGRhdGUpCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxNyBiL3QvdDUxMDAvaW5mbzAwMTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiYzg5ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTcKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IEEgRSBJIE8gVQorRGF0ZTogTW9uLCAxNyBTZXAgMjAxMiAxNDoyMzo0NCAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE4IGIvdC90NTEwMC9pbmZvMDAxOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTNlNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxOApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQW5vdGhlciBUaG9yCitFbWFpbDogYS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBUaGlzIG9uZSBjb250YWlucyBhIHRhYiBhbmQgYSBzcGFjZQorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTgtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9pbmZvMDAxOC0tbm8taW5ib2R5LWhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBiMTdiZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTgtLW5vLWluYm9keS1oZWFkZXJzCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBIFUgVGhvcgorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBjaGVjayBtdWx0aWxpbmUgaW5ib2R5IGhlYWRlcnMKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMDEgYi90L3Q1MTAwL21zZzAwMDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI3NWE5YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAwMQpAQCAtMCwwICsxLDIgQEAKK0hlcmUgaXMgYSBwYXRjaCBmcm9tIEEgVSBUaG9yLgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMDIgYi90L3Q1MTAwL21zZzAwMDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1NDZlYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAwMgpAQCAtMCwwICsxLDIxIEBACitIZXJlIGlzIGEgcGF0Y2ggZnJvbSBBIFUgVGhvci4gIFRoaXMgYWRkcmVzc2VzIHRoZSBpc3N1ZSByYWlzZWQgaW4gdGhlCittZXNzYWdlOgorCitGcm9tOiBOaXQgUGlja2VyIDxuaXQucGlja2VyQGV4YW1wbGUubmV0PgorU3ViamVjdDogZm9vIGlzIHRvbyBvbGQKK01lc3NhZ2UtSWQ6IDxuaXRwaWNrZXIuMTIxMjEyMTJAZXhhbXBsZS5uZXQ+CisKK0hvcGVmdWxseSB0aGlzIHdvdWxkIGZpeCB0aGUgcHJvYmxlbSBzdGF0ZWQgdGhlcmUuCisKKworSSBoYXZlIGluY2x1ZGVkIGFuIGV4dHJhIGJsYW5rIGxpbmUgYWJvdmUsIGJ1dCBpdCBkb2VzIG5vdCBoYXZlIHRvIGJlCitzdHJpcHBlZCBhd2F5IGhlcmUsIGFsb25nIHdpdGggdGhlICAgICAgICAgICAgICAgCQkgICAKK3doaXRlc3BhY2VzIGF0IHRoZSBlbmQgb2YgdGhlIGFib3ZlIGxpbmUuICBUaGV5IGFyZSBleHBlY3RlZCB0byBiZSBzcXVhc2hlZAord2hlbiB0aGUgbWVzc2FnZSBpcyBtYWRlIGludG8gYSBjb21taXQgbG9nIGJ5IHN0cmlwc3BhY2UsCitBbHNvLCB0aGVyZSBhcmUgdGhyZWUgYmxhbmsgbGluZXMgYWZ0ZXIgdGhpcyBwYXJhZ3JhcGgsCit0d28gdHJ1bHkgYmxhbmsgYW5kIGFub3RoZXIgZnVsbCBvZiBzcGFjZXMgaW4gYmV0d2Vlbi4KKworICAgICAgICAgICAgCisKK0hvcGUgdGhpcyBoZWxwcy4KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDAzIGIvdC90NTEwMC9tc2cwMDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYzY4MTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMDMKQEAgLTAsMCArMSw5IEBACitIZXJlIGlzIGEgcGF0Y2ggZnJvbSBBIFUgVGhvci4gIFRoaXMgYWRkcmVzc2VzIHRoZSBpc3N1ZSByYWlzZWQgaW4gdGhlCittZXNzYWdlOgorCitGcm9tOiBOaXQgUGlja2VyIDxuaXQucGlja2VyQGV4YW1wbGUubmV0PgorU3ViamVjdDogZm9vIGlzIHRvbyBvbGQKK01lc3NhZ2UtSWQ6IDxuaXRwaWNrZXIuMTIxMjEyMTJAZXhhbXBsZS5uZXQ+CisKK0hvcGVmdWxseSB0aGlzIHdvdWxkIGZpeCB0aGUgcHJvYmxlbSBzdGF0ZWQgdGhlcmUuCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAwNCBiL3QvdDUxMDAvbXNnMDAwNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjhiYTNiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDA0CkBAIC0wLDAgKzEsNyBAQAorSGVsbG8uCisKK1RyeSBhbGwgYWRkcmVzc2VzIGZvciBnaXZlbiByZW1vdGUgbmFtZSB1bnRpbCBpdCBzdWNjZWVkcy4KK0Fsc28gc3VwcG9ydHMgSVB2Ni4KKworU2lnbmVkLW9mLWJ5OiBIaWRlYWtpIFlPU0hJRlVKSSA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAwNSBiL3QvdDUxMDAvbXNnMDAwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDk0Y2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDA1CkBAIC0wLDAgKzEsMTMgQEAKK1RoZSBnaXQtY3ZzaW1wb3J0LXNjcmlwdCBoYWQgYSBjb3B1bGUgb2Ygc21hbGwgYnVncyB0aGF0IHByZXZlbnRlZCBtZQorZnJvbSBpbXBvcnRpbmcgYSBiaWcgQ1ZTIHJlcG9zaXRvcnkuCisKK1RoZSBmaXJzdCB3YXMgdGhhdCBpdCBkaWRuJ3QgaGFuZGxlIHJlbW92ZWQgZmlsZXMgd2l0aCBhIG11bHRpLWRpZ2l0CitwcmltYXJ5IHJldmlzaW9uIG51bWJlci4KKworVGhlIHNlY29uZCB3YXMgdGhhdCBpdCB3YXMgYXNraW5nIHRoZSBDVlMgc2VydmVyIGZvciAiRiIgbWVzc2FnZXMsCithbHRob3VnaCB0aGV5IHdlcmUgbm90IGhhbmRsZWQuCisKK0kgYWxzbyB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGF0IHNjcmlwdCB0byBjb3JyZXNwb25kIHRvCithY3R1YWwgZmxhZ3MuCisKK1NpZ25lZC1vZmYtYnk6IERhdmlkIEvDpWdlZGFsIDxkYXZpZGtAbHlzYXRvci5saXUuc2U+CmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMDYgYi90L3Q1MTAwL21zZzAwMDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI3NWE5YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAwNgpAQCAtMCwwICsxLDIgQEAKK0hlcmUgaXMgYSBwYXRjaCBmcm9tIEEgVSBUaG9yLgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMDcgYi90L3Q1MTAwL21zZzAwMDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiMjNjMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAwNwpAQCAtMCwwICsxLDIgQEAKK0hlcmUgaXMgYW4gZW1wdHkgcGF0Y2ggZnJvbSBBIFUgVGhvci4KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDA4IGIvdC90NTEwMC9tc2cwMDA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MGVjYjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMDgKQEAgLTAsMCArMSw0IEBACis+SGVyZSBpcyBhbiBlbXB0eSBwYXRjaCBmcm9tIEEgVSBUaG9yLgorCitIZXkgeW91IGZvcmdvdCB0aGUgcGF0Y2ghCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAwOSBiL3QvdDUxMDAvbXNnMDAwOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmZlMTMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDA5CkBAIC0wLDAgKzEsMiBAQAorVGhpcyBpcyB0byBmaXggZGlmZi1mb3JtYXQgZG9jdW1lbnRhdGlvbi4KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDEwIGIvdC90NTEwMC9tc2cwMDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NmMyMzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTAKQEAgLTAsMCArMSw1IEBACisiU3ViamVjdDogIiBpc24ndCBpbiB0aGUgc3RhdGljIGFycmF5ICJoZWFkZXIiLCBhbmQgdGh1cworbWVtY21wKCJTdWJqZWN0OiAiLCBoZWFkZXJbaV0sIDcpIHdpbGwgbmV2ZXIgbWF0Y2guCisKK1NpZ25lZC1vZmYtYnk6IEx1a2FzIFNhbmRzdHLDtm0gPGx1a2Fzc0BldGVrLmNoYWxtZXJzLnNlPgorU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDExIGIvdC90NTEwMC9tc2cwMDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NjdmMjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTEKQEAgLTAsMCArMSwyIEBACitIZXJlIGNvbWVzIGEgY29tbWl0IGxvZyBtZXNzYWdlLCBhbmQKK2l0cyBzZWNvbmQgbGluZSBpcyBoZXJlLgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDEyIGIvdC90NTEwMC9tc2cwMDEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzJiZjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTIKQEAgLTAsMCArMSw3IEBACit0ZXh0bGl2ZS0qINC40YHQv9GA0LDQstC70LXQvdGLINC90LAgdGV4bGl2ZS0qCitkb2N1dGlscyDQt9Cw0LzQtdC90ZHQvSDQvdCwIHB5dGhvbi1kb2N1dGlscworCivQlNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Qviwg0L7QutCw0LfQsNC70L7RgdGMLCDRh9GC0L4gcmVzdDJ3ZWIg0LLRi9GC0Y/Qs9C40LLQsNC10YIg0LfQsCDRgdC+0LHQvtC5CitweXRob24tZG9jdXRpbHMuINCSINGC0L4g0LLRgNC10LzRjyDQutCw0Log0YHQsNC8IHJlc3Qyd2ViINC90LUg0L3Rg9C20LXQvS4KKworU2lnbmVkLW9mZi1ieTogRG1pdHJpeSBCbGlub3YgPGJkYUBtbnNzcGIucnU+CmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTItLW1lc3NhZ2UtaWQgYi90L3Q1MTAwL21zZzAwMTItLW1lc3NhZ2UtaWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc2ZTI2ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxMi0tbWVzc2FnZS1pZApAQCAtMCwwICsxLDggQEAKK3RleHRsaXZlLSog0LjRgdC/0YDQsNCy0LvQtdC90Ysg0L3QsCB0ZXhsaXZlLSoKK2RvY3V0aWxzINC30LDQvNC10L3RkdC9INC90LAgcHl0aG9uLWRvY3V0aWxzCisKK9CU0LXQudGB0YLQstC40YLQtdC70YzQvdC+LCDQvtC60LDQt9Cw0LvQvtGB0YwsINGH0YLQviByZXN0MndlYiDQstGL0YLRj9Cz0LjQstCw0LXRgiDQt9CwINGB0L7QsdC+0LkKK3B5dGhvbi1kb2N1dGlscy4g0JIg0YLQviDQstGA0LXQvNGPINC60LDQuiDRgdCw0LwgcmVzdDJ3ZWIg0L3QtSDQvdGD0LbQtdC9LgorCitTaWduZWQtb2ZmLWJ5OiBEbWl0cml5IEJsaW5vdiA8YmRhQG1uc3NwYi5ydT4KK01lc3NhZ2UtSWQ6IDwxMjI2NTAxNjgxLTI0OTIzLTEtZ2l0LXNlbmQtZW1haWwtYmRhQG1uc3NwYi5ydT4KZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxMyBiL3QvdDUxMDAvbXNnMDAxMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDEzCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTQgYi90L3Q1MTAwL21zZzAwMTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlNWNkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxNApAQCAtMCwwICsxLDE4IEBACitJbiByZWFsIGxpZmUsIHdlIHdpbGwgc2VlIGEgZGlzY3Vzc2lvbiB0aGF0IGluc3BpcmVkIHRoaXMgcGF0Y2gKK2Rpc2N1c3NpbmcgcmVsYXRlZCBhbmQgdW5yZWxhdGVkIHRoaW5ncyBhcm91bmQgPjggc2Npc3NvcnMgbWFyaworaW4gdGhpcyBwYXJ0IG9mIHRoZSBtZXNzYWdlLgorCitTdWJqZWN0OiBbUEFUQ0hdIEJMQUggVFdPCisKK0FuZCB0aGVuIHdlIHdpbGwgc2VlIHRoZSBzY2lzc29ycy4KKworIFRoaXMgbGluZSBpcyBub3QgYSBzY2lzc29ycyBtYXJrIC0tID44IC0tIGJ1dCB0YWxrcyBhYm91dCBpdC4KKyAtIC0gPjggLSAtIHBsZWFzZSByZW1vdmUgZXZlcnl0aGluZyBhYm92ZSB0aGlzIGxpbmUgLSAtID44IC0gLQorCitTdWJqZWN0OiBbUEFUQ0hdIFRlYWNoIG1haWxpbmZvIHRvIGlnbm9yZSBldmVyeXRoaW5nIGJlZm9yZSAtLSA+OCAtLSBtYXJrCitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CisKK1RoaXMgdGVhY2hlcyBtYWlsaW5mbyB0aGUgc2Npc3NvcnMgLS0gPjggLS0gbWFyazsgdGhlIGNvbW1hbmQgaWdub3JlcworZXZlcnl0aGluZyBiZWZvcmUgaXQgaW4gdGhlIG1lc3NhZ2UgYm9keS4KKworU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDE0LS1zY2lzc29ycyBiL3QvdDUxMDAvbXNnMDAxNC0tc2Npc3NvcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5YzZhNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxNC0tc2Npc3NvcnMKQEAgLTAsMCArMSw0IEBACitUaGlzIHRlYWNoZXMgbWFpbGluZm8gdGhlIHNjaXNzb3JzIC0tID44IC0tIG1hcms7IHRoZSBjb21tYW5kIGlnbm9yZXMKK2V2ZXJ5dGhpbmcgYmVmb3JlIGl0IGluIHRoZSBtZXNzYWdlIGJvZHkuCisKK1NpZ25lZC1vZmYtYnk6IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxNSBiL3QvdDUxMDAvbXNnMDAxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE1CmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTUtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9tc2cwMDE1LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTUxMTViCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE1LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDMgQEAKK0Zyb206IGJvZ29zaXR5CisgIC0gYSBsaXN0CisgIC0gb2Ygc3R1ZmYKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxNiBiL3QvdDUxMDAvbXNnMDAxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDlhZGFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE2CkBAIC0wLDAgKzEsMiBAQAorYW5kIHNvbWUgY29udGVudAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTYtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9tc2cwMDE2LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDYzZjUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE2LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDQgQEAKK0RhdGU6IGJvZ3VzCisKK2FuZCBzb21lIGNvbnRlbnQKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDE3IGIvdC90NTEwMC9tc2cwMDE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZTA5MDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTcKQEAgLTAsMCArMSwyIEBACitOZXcgY29udGVudCBoZXJlCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxOCBiL3QvdDUxMDAvbXNnMDAxOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmRlODNkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE4CkBAIC0wLDAgKzEsMiBAQAorYSBjb21taXQgbWVzc2FnZQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTgtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9tc2cwMDE4LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWUwNWQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE4LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDggQEAKK0Zyb206IEFub3RoZXIgVGhvcgorIDxhLnRob3JAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBUaGlzIG9uZSBjb250YWlucworCWEgdGFiCisgYW5kIGEgc3BhY2UKKworYSBjb21taXQgbWVzc2FnZQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL251bC1iNjQuZXhwZWN0IGIvdC90NTEwMC9udWwtYjY0LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Q2ODBmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9udWwtYjY0LmV4cGVjdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MTAwL251bC1iNjQuaW4gYi90L3Q1MTAwL251bC1iNjQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1NDBkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbnVsLWI2NC5pbgpAQCAtMCwwICsxLDM3IEBACitGcm9tIDY2N2Q4OTQwZTcxOWNkZGVlMWNmZTIzN2NiYmUyMTVlMjAyNzBiMDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitEYXRlOiBTdW4sIDI1IE1heSAyMDA4IDAwOjM4OjE4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHNlY29uZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKK0xTMHRDaUJtYVd4bElId2dJRUpwYmlBeE16VTNJQzArSURFek5UY2dZbmwwWlhNS0lERWdabWxzWlhNZ1kyaGhibWRsWkN3ZworTUNCcGJuTmxjblJwYjI1ektDc3BMQ0F3SUdSbGJHVjBhVzl1Y3lndEtRb0taR2xtWmlBdExXZHBkQ0JoTDJacGJHVWdZaTltCithV3hsQ21sdVpHVjRJRGMzTXpZeFpEZ3VMamxsTURKaVpUWWdNVEF3TmpRMENpMHRMU0JoTDJacGJHVUtLeXNySUdJdlptbHMKK1pRcEFRQ0F0TVN3eE1pQXJNU3d4TWlCQVFBb2dURzl5WlcwZ2FYQnpkVzBnWkc5c2IzSWdjMmwwSUdGdFpYUXNJR052Ym5ObAorWTNSbGRIVmxjaUJoWkdsd2FYTmphVzVuSUdWc2FYUXVJRk4xYzNCbGJtUnBjM05sQ2lCemFYUWdZVzFsZENCMGRYSndhWE1nCitaV2RsZENCbGMzUWdZM1Z5YzNWeklHeGhiM0psWlhRdUlFRnNhWEYxWVcwZ2JXRjFjbWx6TGlCUWNtRmxjMlZ1ZEFvdGRtOXMKK2RYUndZWFF1SUZCeWIybHVJR2x1SUhCMWNuVnpMaUJPZFd4c1lTQjFjbTVoSUhOaGNHbGxiaXdnWkdGd2FXSjFjeUJ6YVhRZworWVcxbGRDd0tLM1p2YkhWMGNHRjBMaUJRY205cGJpQnBiaUJ3ZFhKMWN5NGdUblZzYkdFZ2RYSnVZU0J6WVhCcFpXNHNJR1JoCitjR2tBZFhNZ2MybDBJR0Z0WlhRc0NpQm9aVzVrY21WeWFYUWdibVZqTENCMFpXMXdkWE1nWlhVc0lHMXBMaUJWZENCd2IzSjAKK1lTd2diR1Z2SUdsa0lIUnBibU5wWkhWdWRDQjFiR3hoYldOdmNuQmxjaXdLTFhabGJHbDBJR1psYkdseklIUnlhWE4wYVhGMQorWlNCaGJuUmxMQ0JoZENCc2IySnZjblJwY3lCa2FXRnRJSEJsWkdVZ2RYUWdaSFZwTGlCUWNtOXBiaUJoWXdvcmRtVnNhWFFnCitabVZzYVhNZ2RISnBjM1JwY1hWbElHRnVkR1VzSUdGMElHeHZBRzl5ZEdseklHUnBZVzBnY0dWa1pTQjFkQ0JrZFdrdUlGQnkKK2IybHVJR0ZqQ2lCc1pXTjBkWE11SUVSdmJtVmpJR0YwSUcxaGMzTmhJR0ZqSUdsd2MzVnRJR2hsYm1SeVpYSnBkQ0J6YjJ4cworYVdOcGRIVmthVzR1SUU1aGJTQmthV04wZFcwS0lHNXBjMmtnYzJWa0lHMXBMaUJFZFdseklITmxaQ0JoYm5SbExpQlZkQ0IyCithWFJoWlNCbGMzUWdkWFFnWkhWcElIVnNkSEpwWTJsbGN5QmthV2R1YVhOemFXMHVDaUFLTFVsdUlIWmxiQ0J2WkdsdklHVm4KK1pYUWdibWx6YkNCamIyNTJZV3hzYVhNZ2RtOXNkWFJ3WVhRdUlFMXZjbUpwSUhacGRHRmxJRzVwWW1ndUlFNTFiR3hoYlFvcgorU1c0Z2RtVnNJRzlrYVc4Z1pXZGxkQ0J1YVhOc0lHTnZiblpoYkd4cGN5QjJiMngxZEhCaGRDNGdUVzl5QUdrZ2RtbDBZV1VnCitibWtBYUM0Z1RuVnNiR0Z0Q2lCaFkyTjFiWE5oYml3Z1pHOXNiM0lnY1hWcGN5QmhiR2x4ZFdGdElITmpaV3hsY21semNYVmwKK0xDQmxiR2wwSUdWdWFXMGdZMjl1WkdsdFpXNTBkVzBLSUcxaGRYSnBjeXdnYm05dUlIUnlhWE4wYVhGMVpTQnRZWFZ5YVhNZworZEhWeWNHbHpJR1YwSUcxaGRYSnBjeTRnVlhRZ2JtOXVJRzVwYzJ3dUlFNWhiU0JrYVdGdENpQnRhU3dnYzJWdGNHVnlJSEJ2CitjM1ZsY21Vc0lHVnNaV2xtWlc1a0lIVjBMQ0JoZFdOMGIzSWdkbVZzTENCbGNtRjBMaUJUWldRZ2NHOXpkV1Z5WlFwQVFDQXQKK01UWXNOeUFyTVRZc055QkFRQ0J6WldRZ1pYTjBMaUJGZEdsaGJTQmthV0Z0SUdabGJHbHpMQ0JtWlhKdFpXNTBkVzBnWldkbAorZEN3Z1lXUnBjR2x6WTJsdVp5QmhkQ3dnY0c5emRXVnlaU0JwYml3S0lHUjFhUzRnUlhScFlXMGdiSFZqZEhWekxnb2dDaUJPCitkV3hzWVNCcFpDQmhkV2QxWlM0Z1RtRnRJR2xoWTNWc2FYTWdZV05qZFcxellXNGdibWx6YVM0Z1UzVnpjR1Z1WkdsemMyVWcKK2NHOTBaVzUwYVM0Z1RuVnVZd290ZG1GeWFYVnpJR0YxWjNWbElHNWxZeUJ2Y21OcExpQlZkQ0JqYjI1a2FXMWxiblIxYlNCaworYjJ4dmNpQnpZV2RwZEhScGN5QnVhV0pvTGlCVGRYTndaVzVrYVhOelpRb3JkbUZ5YVhWeklHRjFaM1ZsSUc1bFl5QnZjbU5wCitMaUJWZENCamIyNWthVzFsYm5SMWJTQmtiMnh2Y2lCellXZHBkSFJwY3lCdWFRQm9MaUJUZFhOd1pXNWthWE56WlFvZ2RHVnQKK2NHOXlJR3hsWTNSMWN5QnpaV1FnYldGbmJtRXVJRk4xYzNCbGJtUnBjM05sSUhCdmRHVnVkR2t1SUU1MWJHeGhiU0IwWlcxdworYjNJZ2FYQnpkVzB1SUZObFpBb2diVzlzWlhOMGFXVWdkR1ZzYkhWekxpQlFhR0Z6Wld4c2RYTWdiR2xuZFd4aExpQkpiaUIyCitaV2hwWTNWc1lTQjFiSFJ5YVdObGN3b2dibWx6YVM0Z1UzVnpjR1Z1WkdsemMyVWdabVZzYVhNZ1lYVm5kV1VzSUhCbGJHeGwKK2JuUmxjM0YxWlNCaGRDd2daR2xqZEhWdElIWnBkbVZ5Y21Fc0NpMHRJQW94TGpVdU5TNHhMalUwTUM1bk5UYzNPREFLQ2c9PQpkaWZmIC0tZ2l0IGEvdC90NTEwMC9udWwtcGxhaW4gYi90L3Q1MTAwL251bC1wbGFpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDQwNjkxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9udWwtcGxhaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMDEgYi90L3Q1MTAwL3BhdGNoMDAwMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmM5Nzc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMDEKQEAgLTAsMCArMSwxNCBAQAorLS0tCisgZm9vIHwgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCA5MTIzY2RjLi45MThkY2Y4IDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0xICsxIEBACistRnJpIEp1biAgOSAwMDo0NDowNCBQRFQgMjAwNgorK0ZyaSBKdW4gIDkgMDA6NDQ6MTMgUERUIDIwMDYKKy0tIAorMS40LjAuZzZmMmIKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMDIgYi90L3Q1MTAwL3BhdGNoMDAwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmM5Nzc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMDIKQEAgLTAsMCArMSwxNCBAQAorLS0tCisgZm9vIHwgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCA5MTIzY2RjLi45MThkY2Y4IDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0xICsxIEBACistRnJpIEp1biAgOSAwMDo0NDowNCBQRFQgMjAwNgorK0ZyaSBKdW4gIDkgMDA6NDQ6MTMgUERUIDIwMDYKKy0tIAorMS40LjAuZzZmMmIKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMDMgYi90L3Q1MTAwL3BhdGNoMDAwMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmM5Nzc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMDMKQEAgLTAsMCArMSwxNCBAQAorLS0tCisgZm9vIHwgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCA5MTIzY2RjLi45MThkY2Y4IDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0xICsxIEBACistRnJpIEp1biAgOSAwMDo0NDowNCBQRFQgMjAwNgorK0ZyaSBKdW4gIDkgMDA6NDQ6MTMgUERUIDIwMDYKKy0tIAorMS40LjAuZzZmMmIKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMDQgYi90L3Q1MTAwL3BhdGNoMDAwNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTY0NThlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMDQKQEAgLTAsMCArMSw5MyBAQAorZGlmZiAtLWdpdCBhL2Nvbm5lY3QuYyBiL2Nvbm5lY3QuYworLS0tIGEvY29ubmVjdC5jCisrKysgYi9jb25uZWN0LmMKK0BAIC05Niw0MiArOTYsNTcgQEAgc3RhdGljIGVudW0gcHJvdG9jb2wgZ2V0X3Byb3RvY29sKGNvbnN0IAorIAlkaWUoIkkgZG9uJ3QgaGFuZGxlIHByb3RvY29sICclcyciLCBuYW1lKTsKKyB9CisgCistc3RhdGljIHZvaWQgbG9va3VwX2hvc3QoY29uc3QgY2hhciAqaG9zdCwgc3RydWN0IHNvY2thZGRyICppbikKKy17CistCXN0cnVjdCBhZGRyaW5mbyAqcmVzOworLQlpbnQgcmV0OworLQorLQlyZXQgPSBnZXRhZGRyaW5mbyhob3N0LCBOVUxMLCBOVUxMLCAmcmVzKTsKKy0JaWYgKHJldCkKKy0JCWRpZSgiVW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIsIGhvc3QsIGdhaV9zdHJlcnJvcihyZXQpKTsKKy0JKmluID0gKnJlcy0+YWlfYWRkcjsKKy0JZnJlZWFkZHJpbmZvKHJlcyk7CistfQorKyNkZWZpbmUgU1RSXyhzKQkjIHMKKysjZGVmaW5lIFNUUihzKQlTVFJfKHMpCisgCisgc3RhdGljIGludCBnaXRfdGNwX2Nvbm5lY3QoaW50IGZkWzJdLCBjb25zdCBjaGFyICpwcm9nLCBjaGFyICpob3N0LCBjaGFyICpwYXRoKQorIHsKKy0Jc3RydWN0IHNvY2thZGRyIGFkZHI7CistCWludCBwb3J0ID0gREVGQVVMVF9HSVRfUE9SVCwgc29ja2ZkOworLQljaGFyICpjb2xvbjsKKy0KKy0JY29sb24gPSBzdHJjaHIoaG9zdCwgJzonKTsKKy0JaWYgKGNvbG9uKSB7CistCQljaGFyICplbmQ7CistCQl1bnNpZ25lZCBsb25nIG4gPSBzdHJ0b3VsKGNvbG9uKzEsICZlbmQsIDApOworLQkJaWYgKGNvbG9uWzFdICYmICEqZW5kKSB7CistCQkJKmNvbG9uID0gMDsKKy0JCQlwb3J0ID0gbjsKKysJaW50IHNvY2tmZCA9IC0xOworKwljaGFyICpjb2xvbiwgKmVuZDsKKysJY2hhciAqcG9ydCA9IFNUUihERUZBVUxUX0dJVF9QT1JUKTsKKysJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWkwLCAqYWk7CisrCWludCBnYWk7CisrCisrCWlmIChob3N0WzBdID09ICdbJykgeworKwkJZW5kID0gc3RyY2hyKGhvc3QgKyAxLCAnXScpOworKwkJaWYgKGVuZCkgeworKwkJCSplbmQgPSAwOworKwkJCWVuZCsrOworKwkJCWhvc3QrKzsKKysJCX0gZWxzZQorKwkJCWVuZCA9IGhvc3Q7CisrCX0gZWxzZQorKwkJZW5kID0gaG9zdDsKKysJY29sb24gPSBzdHJjaHIoZW5kLCAnOicpOworKworKwlpZiAoY29sb24pCisrCQlwb3J0ID0gY29sb24gKyAxOworKworKwltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysJaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKysKKysJZ2FpID0gZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgJmhpbnRzLCAmYWkpOworKwlpZiAoZ2FpKQorKwkJZGllKCJVbmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIiwgaG9zdCwgZ2FpX3N0cmVycm9yKGdhaSkpOworKworKwlmb3IgKGFpMCA9IGFpOyBhaTsgYWkgPSBhaS0+YWlfbmV4dCkgeworKwkJc29ja2ZkID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlwZSwgYWktPmFpX3Byb3RvY29sKTsKKysJCWlmIChzb2NrZmQgPCAwKQorKwkJCWNvbnRpbnVlOworKwkJaWYgKGNvbm5lY3Qoc29ja2ZkLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pIDwgMCkgeworKwkJCWNsb3NlKHNvY2tmZCk7CisrCQkJc29ja2ZkID0gLTE7CisrCQkJY29udGludWU7CisgCQl9CisrCQlicmVhazsKKyAJfQorIAorLQlsb29rdXBfaG9zdChob3N0LCAmYWRkcik7CistCSgoc3RydWN0IHNvY2thZGRyX2luICopJmFkZHIpLT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworKwlmcmVlYWRkcmluZm8oYWkwKTsKKyAKKy0Jc29ja2ZkID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX0lQKTsKKyAJaWYgKHNvY2tmZCA8IDApCisgCQlkaWUoInVuYWJsZSB0byBjcmVhdGUgc29ja2V0ICglcykiLCBzdHJlcnJvcihlcnJubykpOworLQlpZiAoY29ubmVjdChzb2NrZmQsICh2b2lkICopJmFkZHIsIHNpemVvZihhZGRyKSkgPCAwKQorLQkJZGllKCJ1bmFibGUgdG8gY29ubmVjdCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKysKKyAJZmRbMF0gPSBzb2NrZmQ7CisgCWZkWzFdID0gc29ja2ZkOworIAlwYWNrZXRfd3JpdGUoc29ja2ZkLCAiJXMgJXNcbiIsIHByb2csIHBhdGgpOworCistLSAKK1lPU0hJRlVKSSBIaWRlYWtpIEAgVVNBR0kgUHJvamVjdCAgPHlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgorR1BHLUZQICA6IDkwMjIgNjVFQiAxRUNGIDNBRDEgMEJERiAgODBEOCA0ODA3IEY4OTQgRTA2MiAwRUVBCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDA1IGIvdC90NTEwMC9wYXRjaDAwMDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI3YTM4MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDA1CkBAIC0wLDAgKzEsNjkgQEAKKy0tLQorCisgRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LXNjcmlwdC50eHQgfCA5ICsrKysrKysrLQorIGdpdC1jdnNpbXBvcnQtc2NyaXB0ICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCis1MDQ1MmY5YzBjMmRmMWYwNGQ4M2EyNjI2NmJhNzA0YjEzODYxNjMyCitkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LXNjcmlwdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dAorLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LXNjcmlwdC50eHQKKysrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC1zY3JpcHQudHh0CitAQCAtMjksNiArMjksMTAgQEAgT1BUSU9OUworIAljdXJyZW50bHksIG9ubHkgdGhlIDpsb2NhbDosIDpleHQ6IGFuZCA6cHNlcnZlcjogYWNjZXNzIG1ldGhvZHMgCisgCWFyZSBzdXBwb3J0ZWQuCisgCisrLUMgPHRhcmdldC1kaXI+OjoKKysgICAgICAgIFRoZSBHSVQgcmVwb3NpdG9yeSB0byBpbXBvcnQgdG8uICBJZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QKKysgICAgICAgIGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuICBEZWZhdWx0IGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKysKKyAtaTo6CisgCUltcG9ydC1vbmx5OiBkb24ndCBwZXJmb3JtIGEgY2hlY2tvdXQgYWZ0ZXIgaW1wb3J0aW5nLiAgVGhpcyBvcHRpb24KKyAJZW5zdXJlcyB0aGUgd29ya2luZyBkaXJlY3RvcnkgYW5kIGNhY2hlIHJlbWFpbiB1bnRvdWNoZWQgYW5kIHdpbGwKK0BAIC00NCw3ICs0OCw3IEBAIE9QVElPTlMKKyAKKyAtcCA8b3B0aW9ucy1mb3ItY3ZzcHM+OjoKKyAJQWRkaXRpb25hbCBvcHRpb25zIGZvciBjdnNwcy4KKy0JVGhlIG9wdGlvbnMgJy14JyBhbmQgJy1BJyBhcmUgaW1wbGljaXQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBoZXJlLgorKwlUaGUgb3B0aW9ucyAnLXUnIGFuZCAnLUEnIGFyZSBpbXBsaWNpdCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGhlcmUuCisgCisgCUlmIHlvdSBuZWVkIHRvIHBhc3MgbXVsdGlwbGUgb3B0aW9ucywgc2VwYXJhdGUgdGhlbSB3aXRoIGEgY29tbWEuCisgCitAQCAtNTcsNiArNjEsOSBAQCBPUFRJT05TCisgLWg6OgorIAlQcmludCBhIHNob3J0IHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQuCisgCisrLXogPGZ1eno+OjoKKysgICAgICAgIFBhc3MgdGhlIHRpbWVzdGFtcCBmdXp6IGZhY3RvciB0byBjdnNwcy4KKysKKyBPVVRQVVQKKyAtLS0tLS0KKyBJZiAnLXYnIGlzIHNwZWNpZmllZCwgdGhlIHNjcmlwdCByZXBvcnRzIHdoYXQgaXQgaXMgZG9pbmcuCitkaWZmIC0tZ2l0IGEvZ2l0LWN2c2ltcG9ydC1zY3JpcHQgYi9naXQtY3ZzaW1wb3J0LXNjcmlwdAorLS0tIGEvZ2l0LWN2c2ltcG9ydC1zY3JpcHQKKysrKyBiL2dpdC1jdnNpbXBvcnQtc2NyaXB0CitAQCAtMTkwLDcgKzE5MCw3IEBAIHN1YiBjb25uIHsKKyAJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiUm9vdCAkcmVwb1xuIik7CisgCisgCSMgVHJpYWwgYW5kIGVycm9yIHNheXMgdGhhdCB0aGlzIHByb2JhYmx5IGlzIHRoZSBtaW5pbXVtIHNldAorLQkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJWYWxpZC1yZXNwb25zZXMgb2sgZXJyb3IgVmFsaWQtcmVxdWVzdHMgTW9kZSBNIE1iaW5hcnkgRSBGIENoZWNrZWQtaW4gQ3JlYXRlZCBVcGRhdGVkIE1lcmdlZCBSZW1vdmVkXG4iKTsKKysJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiVmFsaWQtcmVzcG9uc2VzIG9rIGVycm9yIFZhbGlkLXJlcXVlc3RzIE1vZGUgTSBNYmluYXJ5IEUgQ2hlY2tlZC1pbiBDcmVhdGVkIFVwZGF0ZWQgTWVyZ2VkIFJlbW92ZWRcbiIpOworIAorIAkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJ2YWxpZC1yZXF1ZXN0c1xuIik7CisgCSRzZWxmLT57J3NvY2tldG8nfS0+Zmx1c2goKTsKK0BAIC02OTEsNyArNjkxLDcgQEAgd2hpbGUoPENWUz4pIHsKKyAJCXVubGluaygkdG1wbmFtZSk7CisgCQlteSAkbW9kZSA9IHBtb2RlKCRjdnMtPnsnbW9kZSd9KTsKKyAJCXB1c2goQG5ldyxbJG1vZGUsICRzaGEsICRmbl0pOyAjIG1heSBiZSByZXN1cnJlY3RlZCEKKy0JfSBlbHNpZigkc3RhdGUgPT0gOSBhbmQgL15ccysoXFMrKTpcZCg/OlwuXGQrKSstPihcZCg/OlwuXGQrKSspXChERUFEXClccyokLykgeworKwl9IGVsc2lmKCRzdGF0ZSA9PSA5IGFuZCAvXlxzKyhcUyspOlxkKyg/OlwuXGQrKSstPihcZCsoPzpcLlxkKykrKVwoREVBRFwpXHMqJC8pIHsKKyAJCW15ICRmbiA9ICQxOworIAkJJGZuID1+IHMjXi8rIyM7CisgCQlwdXNoKEBvbGQsJGZuKTsKKworLS0gCitEYXZpZCBL5WdlZGFsCistCitUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgZ2l0IiBpbgordGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcKK01vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwNiBiL3QvdDUxMDAvcGF0Y2gwMDA2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzk3NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwNgpAQCAtMCwwICsxLDE0IEBACistLS0KKyBmb28gfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IDkxMjNjZGMuLjkxOGRjZjggMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTEgKzEgQEAKKy1GcmkgSnVuICA5IDAwOjQ0OjA0IFBEVCAyMDA2CisrRnJpIEp1biAgOSAwMDo0NDoxMyBQRFQgMjAwNgorLS0gCisxLjQuMC5nNmYyYgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwNyBiL3QvdDUxMDAvcGF0Y2gwMDA3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwNwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMDggYi90L3Q1MTAwL3BhdGNoMDAwOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMDgKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDA5IGIvdC90NTEwMC9wYXRjaDAwMDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU2MTVjMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDA5CkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0CitpbmRleCBiNDI2YTE0Li45Nzc1NmVjIDEwMDY0NAorLS0tIGEvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKKysrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0CitAQCAtODEsNyArODEsNyBAQCBUaGUgImRpZmYiIGZvcm1hdHRpbmcgb3B0aW9ucyBjYW4gYmUgY3VzdG9taXplZCB2aWEgdGhlCisgZW52aXJvbm1lbnQgdmFyaWFibGUgJ0dJVF9ESUZGX09QVFMnLiAgRm9yIGV4YW1wbGUsIGlmIHlvdQorIHByZWZlciBjb250ZXh0IGRpZmY6CisgCistICAgICAgR0lUX0RJRkZfT1BUUz0tYyBnaXQtZGlmZi1pbmRleCAtcCAkKGNhdCAuZ2l0L0hFQUQpCisrICAgICAgR0lUX0RJRkZfT1BUUz0tYyBnaXQtZGlmZi1pbmRleCAtcCBIRUFECisgCisgCisgMi4gV2hlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ0dJVF9FWFRFUk5BTF9ESUZGJyBpcyBzZXQsIHRoZQpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTAgYi90L3Q1MTAwL3BhdGNoMDAxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzY4MjFjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTAKQEAgLTAsMCArMSwyMCBAQAorLS0tCisgYnVpbHRpbi1tYWlsaW5mby5jIHwgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCitpbmRleCA5NjJhYTM0Li4yZDE1MjBmIDEwMDY0NAorLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKysgYi9idWlsdGluLW1haWxpbmZvLmMKK0BAIC0zMzQsNyArMzM0LDcgQEAgc3RhdGljIGludCBjaGVja19oZWFkZXIoY2hhciAqbGluZSwgdW5zaWduZWQgbGluZXNpemUsIGNoYXIgKipoZHJfZGF0YSwgaW50IG92ZXIKKyAJCXJldHVybiAxOworIAlpZiAoIW1lbWNtcCgiW1BBVENIXSIsIGxpbmUsIDcpICYmIGlzc3BhY2UobGluZVs3XSkpIHsKKyAJCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7CistCQkJaWYgKCFtZW1jbXAoIlN1YmplY3Q6ICIsIGhlYWRlcltpXSwgOSkpIHsKKysJCQlpZiAoIW1lbWNtcCgiU3ViamVjdCIsIGhlYWRlcltpXSwgNykpIHsKKyAJCQkJaWYgKCEgaGFuZGxlX2hlYWRlcihsaW5lLCBoZHJfZGF0YVtpXSwgMCkpIHsKKyAJCQkJCXJldHVybiAxOworIAkJCQl9CistLSAKKzEuNS42LjIuNDU1LmcxZWZiMgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxMSBiL3QvdDUxMDAvcGF0Y2gwMDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ODg3MTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxMQpAQCAtMCwwICsxLDIyIEBACistLS0KKyBidWlsdGluLW1haWxpbmZvLmMgIHwgNCArKy0tCisKK2RpZmYgLS1naXQgYS9idWlsdGluLW1haWxpbmZvLmMgYi9idWlsdGluLW1haWxpbmZvLmMKK2luZGV4IDNlNWZlNTEuLmFhYmZlNWMgMTAwNjQ0CistLS0gYS9idWlsdGluLW1haWxpbmZvLmMKKysrKyBiL2J1aWx0aW4tbWFpbGluZm8uYworQEAgLTc1OCw4ICs3NTgsOCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfYm9keSh2b2lkKQorIAkJLyogcHJvY2VzcyBhbnkgYm91bmRhcnkgbGluZXMgKi8KKyAJCWlmICgqY29udGVudF90b3AgJiYgaXNfbXVsdGlwYXJ0X2JvdW5kYXJ5KCZsaW5lKSkgeworIAkJCS8qIGZsdXNoIGFueSBsZWZ0b3ZlciAqLworLQkJCWlmIChsaW5lLmxlbikKKy0JCQkJaGFuZGxlX2ZpbHRlcigmbGluZSk7CisrCQkJaWYgKHByZXYubGVuKQorKwkJCQloYW5kbGVfZmlsdGVyKCZwcmV2KTsKKyAKKyAJCQlpZiAoIWhhbmRsZV9ib3VuZGFyeSgpKQorIAkJCQlnb3RvIGhhbmRsZV9ib2R5X291dDsKKy0tIAorMS42LjAucmMyCisKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTIgYi90L3Q1MTAwL3BhdGNoMDAxMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmEwYjY4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTIKQEAgLTAsMCArMSwzMCBAQAorLS0tCisgaG93dG8vYnVpbGRfbmF2eS50eHQgfCAgICA2ICsrKy0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvaG93dG8vYnVpbGRfbmF2eS50eHQgYi9ob3d0by9idWlsZF9uYXZ5LnR4dAoraW5kZXggM2ZkM2FmYi4uMGVlODA3ZSAxMDA2NDQKKy0tLSBhL2hvd3RvL2J1aWxkX25hdnkudHh0CisrKysgYi9ob3d0by9idWlsZF9uYXZ5LnR4dAorQEAgLTExOSw4ICsxMTksOCBAQAorICAgIC0gbGlieHYtZGV2CisgICAgLSBsaWJ1c3BsYXNoLWRldgorICAgIC0gbGF0ZXgtbWFrZQorLSAgIC0gdGV4dGxpdmUtbGFuZy1jeXJpbGxpYworLSAgIC0gdGV4dGxpdmUtbGF0ZXgtZXh0cmEKKysgICAtIHRleGxpdmUtbGFuZy1jeXJpbGxpYworKyAgIC0gdGV4bGl2ZS1sYXRleC1leHRyYQorICAgIC0gZGlhCisgICAgLSBweXRob24tcHlyZXgKKyAgICAtIGxpYnRvb2wKK0BAIC0xMjgsNyArMTI4LDcgQEAKKyAgICAtIHNveAorICAgIC0gY3l0aG9uCisgICAgLSBpbWFnZW1hZ2ljaworLSAgIC0gZG9jdXRpbHMKKysgICAtIHB5dGhvbi1kb2N1dGlscworIAorICMuINC90LAg0LzQsNGI0LjQvdC1IGRpbmFyOiDQtNC+0LHQsNCy0LjRgtGMINGB0LLQvtC5INC+0YLQutGA0YvRgtGL0Lkgc3NoLdC60LvRjtGHINCyIGF1dGhvcml6ZWRfa2V5czIg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPIGRkZXYKKyAjLiDQvdCwINGB0LLQvtC10Lkg0LzQsNGI0LjQvdC1OiDQvtGC0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YwgL2V0Yy9zdWRvZXJzICjQutC+0LzQsNC90LTQsCBgYHZpc3Vkb2BgKSDQv9GA0LjQvNC10YDQvdC+INGB0LvQtdC00YPRjtGJ0LjQvCDQvtCx0YDQsNC30L7QvDo6CistLSAKKzEuNS42LjUKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDEyLS1tZXNzYWdlLWlkIGIvdC90NTEwMC9wYXRjaDAwMTItLW1lc3NhZ2UtaWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhMGI2OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDEyLS1tZXNzYWdlLWlkCkBAIC0wLDAgKzEsMzAgQEAKKy0tLQorIGhvd3RvL2J1aWxkX25hdnkudHh0IHwgICAgNiArKystLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2hvd3RvL2J1aWxkX25hdnkudHh0IGIvaG93dG8vYnVpbGRfbmF2eS50eHQKK2luZGV4IDNmZDNhZmIuLjBlZTgwN2UgMTAwNjQ0CistLS0gYS9ob3d0by9idWlsZF9uYXZ5LnR4dAorKysrIGIvaG93dG8vYnVpbGRfbmF2eS50eHQKK0BAIC0xMTksOCArMTE5LDggQEAKKyAgICAtIGxpYnh2LWRldgorICAgIC0gbGlidXNwbGFzaC1kZXYKKyAgICAtIGxhdGV4LW1ha2UKKy0gICAtIHRleHRsaXZlLWxhbmctY3lyaWxsaWMKKy0gICAtIHRleHRsaXZlLWxhdGV4LWV4dHJhCisrICAgLSB0ZXhsaXZlLWxhbmctY3lyaWxsaWMKKysgICAtIHRleGxpdmUtbGF0ZXgtZXh0cmEKKyAgICAtIGRpYQorICAgIC0gcHl0aG9uLXB5cmV4CisgICAgLSBsaWJ0b29sCitAQCAtMTI4LDcgKzEyOCw3IEBACisgICAgLSBzb3gKKyAgICAtIGN5dGhvbgorICAgIC0gaW1hZ2VtYWdpY2sKKy0gICAtIGRvY3V0aWxzCisrICAgLSBweXRob24tZG9jdXRpbHMKKyAKKyAjLiDQvdCwINC80LDRiNC40L3QtSBkaW5hcjog0LTQvtCx0LDQstC40YLRjCDRgdCy0L7QuSDQvtGC0LrRgNGL0YLRi9C5IHNzaC3QutC70Y7RhyDQsiBhdXRob3JpemVkX2tleXMyINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyBkZGV2CisgIy4g0L3QsCDRgdCy0L7QtdC5INC80LDRiNC40L3QtTog0L7RgtGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMIC9ldGMvc3Vkb2VycyAo0LrQvtC80LDQvdC00LAgYGB2aXN1ZG9gYCkg0L/RgNC40LzQtdGA0L3QviDRgdC70LXQtNGD0Y7RidC40Lwg0L7QsdGA0LDQt9C+0Lw6OgorLS0gCisxLjUuNi41CmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxMyBiL3QvdDUxMDAvcGF0Y2gwMDEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxMwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTQgYi90L3Q1MTAwL3BhdGNoMDAxNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjM4MjVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTQKQEAgLTAsMCArMSw2NCBAQAorLS0tCisgYnVpbHRpbi1tYWlsaW5mby5jIHwgMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIDEgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWFpbGluZm8uYyBiL2J1aWx0aW4tbWFpbGluZm8uYworaW5kZXggYjBiNWQ4Zi4uNDYxYzQ3ZSAxMDA2NDQKKy0tLSBhL2J1aWx0aW4tbWFpbGluZm8uYworKysrIGIvYnVpbHRpbi1tYWlsaW5mby5jCitAQCAtNzEyLDYgKzcxMiwzNCBAQCBzdGF0aWMgaW5saW5lIGludCBwYXRjaGJyZWFrKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgaW50IHNjaXNzb3JzKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCisreworKwlzaXplX3QgaSwgbGVuID0gbGluZS0+bGVuOworKwlpbnQgc2Npc3NvcnNfZGFzaGVzX3NlZW4gPSAwOworKwljb25zdCBjaGFyICpidWYgPSBsaW5lLT5idWY7CisrCisrCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworKwkJaWYgKGlzc3BhY2UoYnVmW2ldKSkKKysJCQljb250aW51ZTsKKysJCWlmIChidWZbaV0gPT0gJy0nKSB7CisrCQkJc2Npc3NvcnNfZGFzaGVzX3NlZW4gfD0gMDI7CisrCQkJY29udGludWU7CisrCQl9CisrCQlpZiAoaSArIDEgPCBsZW4gJiYgIW1lbWNtcChidWYgKyBpLCAiPjgiLCAyKSkgeworKwkJCXNjaXNzb3JzX2Rhc2hlc19zZWVuIHw9IDAxOworKwkJCWkrKzsKKysJCQljb250aW51ZTsKKysJCX0KKysJCWlmIChpICsgNyA8IGxlbiAmJiAhbWVtY21wKGJ1ZiArIGksICJjdXQgaGVyZSIsIDgpKSB7CisrCQkJaSArPSA3OworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJLyogZXZlcnl0aGluZyBlbHNlIC0tLSBub3Qgc2Npc3NvcnMgKi8KKysJCWJyZWFrOworKwl9CisrCXJldHVybiBzY2lzc29yc19kYXNoZXNfc2VlbiA9PSAwMzsKKyt9CisrCisgc3RhdGljIGludCBoYW5kbGVfY29tbWl0X21zZyhzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIHsKKyAJc3RhdGljIGludCBzdGlsbF9sb29raW5nID0gMTsKK0BAIC03MjMsMTAgKzc1MSwxNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9jb21taXRfbXNnKHN0cnVjdCBzdHJidWYgKmxpbmUpCisgCQlzdHJidWZfbHRyaW0obGluZSk7CisgCQlpZiAoIWxpbmUtPmxlbikKKyAJCQlyZXR1cm4gMDsKKy0JCWlmICgoc3RpbGxfbG9va2luZyA9IGNoZWNrX2hlYWRlcihsaW5lLCBzX2hkcl9kYXRhLCAwKSkgIT0gMCkKKysJCXN0aWxsX2xvb2tpbmcgPSBjaGVja19oZWFkZXIobGluZSwgc19oZHJfZGF0YSwgMCk7CisrCQlpZiAoc3RpbGxfbG9va2luZykKKyAJCQlyZXR1cm4gMDsKKyAJfQorIAorKwlpZiAoc2Npc3NvcnMobGluZSkpIHsKKysJCWZzZWVrKGNtaXRtc2csIDBMLCBTRUVLX1NFVCk7CisrCQlzdGlsbF9sb29raW5nID0gMTsKKysJCXJldHVybiAwOworKwl9CisrCisgCS8qIG5vcm1hbGl6ZSB0aGUgbG9nIG1lc3NhZ2UgdG8gVVRGLTguICovCisgCWlmIChtZXRhaW5mb19jaGFyc2V0KQorIAkJY29udmVydF90b191dGY4KGxpbmUsIGNoYXJzZXQuYnVmKTsKKy0tIAorMS42LjQuMQpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTQtLXNjaXNzb3JzIGIvdC90NTEwMC9wYXRjaDAwMTQtLXNjaXNzb3JzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzgyNWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxNC0tc2Npc3NvcnMKQEAgLTAsMCArMSw2NCBAQAorLS0tCisgYnVpbHRpbi1tYWlsaW5mby5jIHwgMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIDEgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWFpbGluZm8uYyBiL2J1aWx0aW4tbWFpbGluZm8uYworaW5kZXggYjBiNWQ4Zi4uNDYxYzQ3ZSAxMDA2NDQKKy0tLSBhL2J1aWx0aW4tbWFpbGluZm8uYworKysrIGIvYnVpbHRpbi1tYWlsaW5mby5jCitAQCAtNzEyLDYgKzcxMiwzNCBAQCBzdGF0aWMgaW5saW5lIGludCBwYXRjaGJyZWFrKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgaW50IHNjaXNzb3JzKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCisreworKwlzaXplX3QgaSwgbGVuID0gbGluZS0+bGVuOworKwlpbnQgc2Npc3NvcnNfZGFzaGVzX3NlZW4gPSAwOworKwljb25zdCBjaGFyICpidWYgPSBsaW5lLT5idWY7CisrCisrCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworKwkJaWYgKGlzc3BhY2UoYnVmW2ldKSkKKysJCQljb250aW51ZTsKKysJCWlmIChidWZbaV0gPT0gJy0nKSB7CisrCQkJc2Npc3NvcnNfZGFzaGVzX3NlZW4gfD0gMDI7CisrCQkJY29udGludWU7CisrCQl9CisrCQlpZiAoaSArIDEgPCBsZW4gJiYgIW1lbWNtcChidWYgKyBpLCAiPjgiLCAyKSkgeworKwkJCXNjaXNzb3JzX2Rhc2hlc19zZWVuIHw9IDAxOworKwkJCWkrKzsKKysJCQljb250aW51ZTsKKysJCX0KKysJCWlmIChpICsgNyA8IGxlbiAmJiAhbWVtY21wKGJ1ZiArIGksICJjdXQgaGVyZSIsIDgpKSB7CisrCQkJaSArPSA3OworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJLyogZXZlcnl0aGluZyBlbHNlIC0tLSBub3Qgc2Npc3NvcnMgKi8KKysJCWJyZWFrOworKwl9CisrCXJldHVybiBzY2lzc29yc19kYXNoZXNfc2VlbiA9PSAwMzsKKyt9CisrCisgc3RhdGljIGludCBoYW5kbGVfY29tbWl0X21zZyhzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIHsKKyAJc3RhdGljIGludCBzdGlsbF9sb29raW5nID0gMTsKK0BAIC03MjMsMTAgKzc1MSwxNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9jb21taXRfbXNnKHN0cnVjdCBzdHJidWYgKmxpbmUpCisgCQlzdHJidWZfbHRyaW0obGluZSk7CisgCQlpZiAoIWxpbmUtPmxlbikKKyAJCQlyZXR1cm4gMDsKKy0JCWlmICgoc3RpbGxfbG9va2luZyA9IGNoZWNrX2hlYWRlcihsaW5lLCBzX2hkcl9kYXRhLCAwKSkgIT0gMCkKKysJCXN0aWxsX2xvb2tpbmcgPSBjaGVja19oZWFkZXIobGluZSwgc19oZHJfZGF0YSwgMCk7CisrCQlpZiAoc3RpbGxfbG9va2luZykKKyAJCQlyZXR1cm4gMDsKKyAJfQorIAorKwlpZiAoc2Npc3NvcnMobGluZSkpIHsKKysJCWZzZWVrKGNtaXRtc2csIDBMLCBTRUVLX1NFVCk7CisrCQlzdGlsbF9sb29raW5nID0gMTsKKysJCXJldHVybiAwOworKwl9CisrCisgCS8qIG5vcm1hbGl6ZSB0aGUgbG9nIG1lc3NhZ2UgdG8gVVRGLTguICovCisgCWlmIChtZXRhaW5mb19jaGFyc2V0KQorIAkJY29udmVydF90b191dGY4KGxpbmUsIGNoYXJzZXQuYnVmKTsKKy0tIAorMS42LjQuMQpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTUgYi90L3Q1MTAwL3BhdGNoMDAxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDY0ODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTUKQEAgLTAsMCArMSw4IEBACistLS0KK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTUtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9wYXRjaDAwMTUtLW5vLWluYm9keS1oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjQ4NDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxNS0tbm8taW5ib2R5LWhlYWRlcnMKQEAgLTAsMCArMSw4IEBACistLS0KK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTYgYi90L3Q1MTAwL3BhdGNoMDAxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDY0ODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTYKQEAgLTAsMCArMSw4IEBACistLS0KK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTYtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9wYXRjaDAwMTYtLW5vLWluYm9keS1oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjQ4NDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxNi0tbm8taW5ib2R5LWhlYWRlcnMKQEAgLTAsMCArMSw4IEBACistLS0KK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTcgYi90L3Q1MTAwL3BhdGNoMDAxNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWNmODRjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTcKQEAgLTAsMCArMSw2IEBACitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytOZXcgY29udGVudApkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTggYi90L3Q1MTAwL3BhdGNoMDAxOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODlkZjZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTgKQEAgLTAsMCArMSw2IEBACitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxOC0tbm8taW5ib2R5LWhlYWRlcnMgYi90L3Q1MTAwL3BhdGNoMDAxOC0tbm8taW5ib2R5LWhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5ZGY2ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDE4LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDYgQEAKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcXVvdGVkLWZyb20uZXhwZWN0IGIvdC90NTEwMC9xdW90ZWQtZnJvbS5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM5ZDQ4YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcXVvdGVkLWZyb20uZXhwZWN0CkBAIC0wLDAgKzEsMyBAQAorPkZyb20gdGhlIGRlcHRocyBvZiBoaXN0b3J5LCB3ZSBhcmUgc3R1Y2sgd2l0aCB0aGUKK2ZsYWt5IG1ib3ggZm9ybWF0LgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3F1b3RlZC1mcm9tLmluIGIvdC90NTEwMC9xdW90ZWQtZnJvbS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDdlMWM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9xdW90ZWQtZnJvbS5pbgpAQCAtMCwwICsxLDEwIEBACitGcm9tIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBdXRob3IgTmFtZSA8c29tZWJvZHlAZXhhbXBsZS5jb20+CitEYXRlOiBTdW4sIDI1IE1heSAyMDA4IDAwOjM4OjE4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHRlc3RpbmcgcXVvdGVkID5Gcm9tCisKKz5Gcm9tIHRoZSBkZXB0aHMgb2YgaGlzdG9yeSwgd2UgYXJlIHN0dWNrIHdpdGggdGhlCitmbGFreSBtYm94IGZvcm1hdC4KKworLS0tCitwYXRjaApkaWZmIC0tZ2l0IGEvdC90NTEwMC9xdW90ZWQtc3RyaW5nLmV4cGVjdCBiL3QvdDUxMDAvcXVvdGVkLXN0cmluZy5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiMWJjZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcXVvdGVkLXN0cmluZy5leHBlY3QKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEF1dGhvciAiVGhlIEF1dGhvciIgTmFtZQorRW1haWw6IHNvbWVib2R5QGV4YW1wbGUuY29tCitTdWJqZWN0OiB0ZXN0aW5nIHF1b3RlZC1wYWlyCitEYXRlOiBTdW4sIDI1IE1heSAyMDA4IDAwOjM4OjE4IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcXVvdGVkLXN0cmluZy5pbiBiL3QvdDUxMDAvcXVvdGVkLXN0cmluZy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmU2MjdhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9xdW90ZWQtc3RyaW5nLmluCkBAIC0wLDAgKzEsOSBAQAorRnJvbSAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkF1dGhvciBcIlRoZSBBdXRob3JcIiBOYW1lIiA8c29tZWJvZHlAZXhhbXBsZS5jb20+CitEYXRlOiBTdW4sIDI1IE1heSAyMDA4IDAwOjM4OjE4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHRlc3RpbmcgcXVvdGVkLXBhaXIKKworCisKKy0tLQorcGF0Y2gKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDEgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMzgzYjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDAxCkBAIC0wLDAgKzEsNCBAQAorQXV0aG9yOiBLZWl0aCBNb29yZQorRW1haWw6IG1vb3JlQGNzLnV0ay5lZHUKK1N1YmplY3Q6IElmIHlvdSBjYW4gcmVhZCB0aGlzIHlvdSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDAyIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODFiZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwMgpAQCAtMCwwICsxLDQgQEAKK0F1dGhvcjogT2xsZSBKw6RybmVmb3JzCitFbWFpbDogb2phcm5lZkBhZG1pbi5rdGguc2UKK1N1YmplY3Q6IFRpbWUgZm9yIElTTyAxMDY0Nj8KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwMyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBmNzg5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDMKQEAgLTAsMCArMSw0IEBACitBdXRob3I6IFBhdHJpayBGw6RsdHN0csO2bQorRW1haWw6IHBhZkBuYWRhLmt0aC5zZQorU3ViamVjdDogUkZDLUhEUiBjYXJlIGFuZCBmZWVkaW5nCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDQgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2N2E5MGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA0CkBAIC0wLDAgKzEsNCBAQAorQXV0aG9yOiBOYXRoYW5pZWwgQm9yZW5zdGVpbiAo153Xldec16kg15/XkSDXmdec15jXpNegKQorRW1haWw6IG5zYkB0aHVtcGVyLmJlbGxjb3JlLmNvbQorU3ViamVjdDogVGVzdCBvZiBuZXcgaGVhZGVyIGdlbmVyYXRvcgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA1IGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjdiZTNiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNQpAQCAtMCwwICsxLDIgQEAKK1N1YmplY3Q6IChhKQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA2IGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFkNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNgpAQCAtMCwwICsxLDIgQEAKK1N1YmplY3Q6IChhIGIpCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDcgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NGYxOTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA3CkBAIC0wLDAgKzEsMiBAQAorU3ViamVjdDogKGFiKQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA4IGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTRmMTk1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwOApAQCAtMCwwICsxLDIgQEAKK1N1YmplY3Q6IChhYikKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwOSBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0ZjE5NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDkKQEAgLTAsMCArMSwyIEBACitTdWJqZWN0OiAoYWIpCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMTAgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYWQ0NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDEwCkBAIC0wLDAgKzEsMiBAQAorU3ViamVjdDogKGEgYikKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAxMSBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhZDQ3NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMTEKQEAgLTAsMCArMSwyIEBACitTdWJqZWN0OiAoYSBiKQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctc2FtcGxlcy5tYm94IGIvdC90NTEwMC9yZmMyMDQ3LXNhbXBsZXMubWJveApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmMyMjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LXNhbXBsZXMubWJveApAQCAtMCwwICsxLDQ4IEBACitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVMtQVNDSUk/UT9LZWl0aF9Nb29yZT89IDxtb29yZUBjcy51dGsuZWR1PgorVG86ID0/SVNPODg1OS0xP1E/S2VsZF9KPUY4cm5fU2ltb25zZW4/PSA8a2VsZEBka3V1Zy5kaz4KK0NDOiA9P0lTTzg4NTktMT9RP0FuZHI9RTk/PSBQaXJhcmQgPFBJUkFSREB2bTEudWxnLmFjLmJlPgorU3ViamVjdDogPT9JU084ODU5LTE/Qj9TV1lnZVc5MUlHTmhiaUJ5WldGa0lIUm9hWE1nZVc4PT89CisgPT9JU084ODU5LTI/Qj9kU0IxYm1SbGNuTjBZVzVrSUhSb1pTQmxlR0Z0Y0d4bExnPT0/PQorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/SVNPODg1OS0xP1E/T2xsZV9KPUU0cm5lZm9ycz89IDxvamFybmVmQGFkbWluLmt0aC5zZT4KK1RvOiBpZXRmLTgyMkBkaW1hY3MucnV0Z2Vycy5lZHUsIG9qYXJuZWZAYWRtaW4ua3RoLnNlCitTdWJqZWN0OiBUaW1lIGZvciBJU08gMTA2NDY/CisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorVG86IERhdmUgQ3JvY2tlciA8ZGNyb2NrZXJAbW9yZG9yLnN0YW5mb3JkLmVkdT4KK0NjOiBpZXRmLTgyMkBkaW1hY3MucnV0Z2Vycy5lZHUsIHBhZkBjb21zb2wuc2UKK0Zyb206ID0/SVNPODg1OS0xP1E/UGF0cmlrX0Y9RTRsdHN0cj1GNm0/PSA8cGFmQG5hZGEua3RoLnNlPgorU3ViamVjdDogUmU6IFJGQy1IRFIgY2FyZSBhbmQgZmVlZGluZworCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5hdGhhbmllbCBCb3JlbnN0ZWluIDxuc2JAdGh1bXBlci5iZWxsY29yZS5jb20+CisgICAgICAoPT9JU084ODU5LTg/Yj83ZVhzK1NEdjRTRHA3T2owOEE9PT89KQorVG86IEdyZWcgVmF1ZHJldWlsIDxndmF1ZHJlQE5SSS5SZXN0b24uVkEuVVM+LCBOZWQgRnJlZWQKKyAgIDxuZWRAaW5ub3NvZnQuY29tPiwgS2VpdGggTW9vcmUgPG1vb3JlQGNzLnV0ay5lZHU+CitTdWJqZWN0OiBUZXN0IG9mIG5ldyBoZWFkZXIgZ2VuZXJhdG9yCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMQorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK1N1YmplY3Q6ICg9P0lTTzg4NTktMT9RP2E/PSkKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gYikKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gPT9JU084ODU5LTE/UT9iPz0pCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorU3ViamVjdDogKD0/SVNPODg1OS0xP1E/YT89ICA9P0lTTzg4NTktMT9RP2I/PSkKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0KKyAgICA9P0lTTzg4NTktMT9RP2I/PSkKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hX2I/PSkKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gPT9JU084ODU5LTI/UT9fYj89KQpkaWZmIC0tZ2l0IGEvdC90NTEwMC9zYW1wbGUubWJveCBiL3QvdDUxMDAvc2FtcGxlLm1ib3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0ZDBlNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvc2FtcGxlLm1ib3gKQEAgLTAsMCArMSw3MjAgQEAKKyAgICAKKwkKKyAgICAKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSAoenp6KQorICAgICAgVQorICAgICAgVGhvcgorICAgICAgPGEudS50aG9yQGV4YW1wbGUuY29tPiAoQ29tbWVudCkKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBhIGNvbW1pdC4KKworSGVyZSBpcyBhIHBhdGNoIGZyb20gQSBVIFRob3IuCisKKy0tLQorIGZvbyB8IDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggOTEyM2NkYy4uOTE4ZGNmOCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMSArMSBAQAorLUZyaSBKdW4gIDkgMDA6NDQ6MDQgUERUIDIwMDYKKytGcmkgSnVuICA5IDAwOjQ0OjEzIFBEVCAyMDA2CistLSAKKzEuNC4wLmc2ZjJiCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGFub3RoZXIgcGF0Y2gKKworSGVyZSBpcyBhIHBhdGNoIGZyb20gQSBVIFRob3IuICBUaGlzIGFkZHJlc3NlcyB0aGUgaXNzdWUgcmFpc2VkIGluIHRoZQorbWVzc2FnZToKKworRnJvbTogTml0IFBpY2tlciA8bml0LnBpY2tlckBleGFtcGxlLm5ldD4KK1N1YmplY3Q6IGZvbyBpcyB0b28gb2xkCitNZXNzYWdlLUlkOiA8bml0cGlja2VyLjEyMTIxMjEyQGV4YW1wbGUubmV0PgorCitIb3BlZnVsbHkgdGhpcyB3b3VsZCBmaXggdGhlIHByb2JsZW0gc3RhdGVkIHRoZXJlLgorCisKK0kgaGF2ZSBpbmNsdWRlZCBhbiBleHRyYSBibGFuayBsaW5lIGFib3ZlLCBidXQgaXQgZG9lcyBub3QgaGF2ZSB0byBiZQorc3RyaXBwZWQgYXdheSBoZXJlLCBhbG9uZyB3aXRoIHRoZSAgICAgICAgICAgICAgIAkJICAgCit3aGl0ZXNwYWNlcyBhdCB0aGUgZW5kIG9mIHRoZSBhYm92ZSBsaW5lLiAgVGhleSBhcmUgZXhwZWN0ZWQgdG8gYmUgc3F1YXNoZWQKK3doZW4gdGhlIG1lc3NhZ2UgaXMgbWFkZSBpbnRvIGEgY29tbWl0IGxvZyBieSBzdHJpcHNwYWNlLAorQWxzbywgdGhlcmUgYXJlIHRocmVlIGJsYW5rIGxpbmVzIGFmdGVyIHRoaXMgcGFyYWdyYXBoLAordHdvIHRydWx5IGJsYW5rIGFuZCBhbm90aGVyIGZ1bGwgb2Ygc3BhY2VzIGluIGJldHdlZW4uCisKKyAgICAgICAgICAgIAorCitIb3BlIHRoaXMgaGVscHMuCisKKy0tLQorIGZvbyB8IDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggOTEyM2NkYy4uOTE4ZGNmOCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMSArMSBAQAorLUZyaSBKdW4gIDkgMDA6NDQ6MDQgUERUIDIwMDYKKytGcmkgSnVuICA5IDAwOjQ0OjEzIFBEVCAyMDA2CistLSAKKzEuNC4wLmc2ZjJiCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGp1bmlvQGtlcm5lbC5vcmc+CitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKK1N1YmplY3Q6IHJlOiBbUEFUQ0hdIGFub3RoZXIgcGF0Y2gKKworRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIXSB0aGlyZCBwYXRjaAorCitIZXJlIGlzIGEgcGF0Y2ggZnJvbSBBIFUgVGhvci4gIFRoaXMgYWRkcmVzc2VzIHRoZSBpc3N1ZSByYWlzZWQgaW4gdGhlCittZXNzYWdlOgorCitGcm9tOiBOaXQgUGlja2VyIDxuaXQucGlja2VyQGV4YW1wbGUubmV0PgorU3ViamVjdDogZm9vIGlzIHRvbyBvbGQKK01lc3NhZ2UtSWQ6IDxuaXRwaWNrZXIuMTIxMjEyMTJAZXhhbXBsZS5uZXQ+CisKK0hvcGVmdWxseSB0aGlzIHdvdWxkIGZpeCB0aGUgcHJvYmxlbSBzdGF0ZWQgdGhlcmUuCisKKy0tLQorIGZvbyB8IDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggOTEyM2NkYy4uOTE4ZGNmOCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMSArMSBAQAorLUZyaSBKdW4gIDkgMDA6NDQ6MDQgUERUIDIwMDYKKytGcmkgSnVuICA5IDAwOjQ0OjEzIFBEVCAyMDA2CistLSAKKzEuNC4wLmc2ZjJiCisKK0Zyb20gbm9ib2R5IFNhdCBBdWcgMjcgMjM6MDc6NDkgMjAwNQorUGF0aDogbmV3cy5nbWFuZS5vcmchbm90LWZvci1tYWlsCitNZXNzYWdlLUlEOiA8MjAwNTA3MjEuMDkxMDM2LjAxMTE5NTE2Lnlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgorRnJvbTogWU9TSElGVUpJIEhpZGVha2kgLyA9P0lTTy0yMDIyLUpQP0I/R3lSQ05VaEdJekZSVEVBYktFST0/PSAKKwk8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CitOZXdzZ3JvdXBzOiBnbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIEdJVDogVHJ5IGFsbCBhZGRyZXNzZXMgZm9yIGdpdmVuIHJlbW90ZSBuYW1lCitEYXRlOiBUaHUsIDIxIEp1bCAyMDA1IDA5OjEwOjM2IC0wNDAwIChFRFQpCitMaW5lczogOTkKK09yZ2FuaXphdGlvbjogVVNBR0kvV0lERSBQcm9qZWN0CitBcHByb3ZlZDogbmV3c0BnbWFuZS5vcmcKK05OVFAtUG9zdGluZy1Ib3N0OiBtYWluLmdtYW5lLm9yZworTWltZS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogVGV4dC9QbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorWC1UcmFjZTogc2VhLmdtYW5lLm9yZyAxMTIxOTUxNDM0IDI5MzUwIDgwLjkxLjIyOS4yICgyMSBKdWwgMjAwNSAxMzoxMDozNCBHTVQpCitYLUNvbXBsYWludHMtVG86IHVzZW5ldEBzZWEuZ21hbmUub3JnCitOTlRQLVBvc3RpbmctRGF0ZTogVGh1LCAyMSBKdWwgMjAwNSAxMzoxMDozNCArMDAwMCAoVVRDKQorCitIZWxsby4KKworVHJ5IGFsbCBhZGRyZXNzZXMgZm9yIGdpdmVuIHJlbW90ZSBuYW1lIHVudGlsIGl0IHN1Y2NlZWRzLgorQWxzbyBzdXBwb3J0cyBJUHY2LgorCitTaWduZWQtb2YtYnk6IEhpZGVha2kgWU9TSElGVUpJIDx5b3NoZnVqaUBsaW51eC1pcHY2Lm9yZz4KKworZGlmZiAtLWdpdCBhL2Nvbm5lY3QuYyBiL2Nvbm5lY3QuYworLS0tIGEvY29ubmVjdC5jCisrKysgYi9jb25uZWN0LmMKK0BAIC05Niw0MiArOTYsNTcgQEAgc3RhdGljIGVudW0gcHJvdG9jb2wgZ2V0X3Byb3RvY29sKGNvbnN0IAorIAlkaWUoIkkgZG9uJ3QgaGFuZGxlIHByb3RvY29sICclcyciLCBuYW1lKTsKKyB9CisgCistc3RhdGljIHZvaWQgbG9va3VwX2hvc3QoY29uc3QgY2hhciAqaG9zdCwgc3RydWN0IHNvY2thZGRyICppbikKKy17CistCXN0cnVjdCBhZGRyaW5mbyAqcmVzOworLQlpbnQgcmV0OworLQorLQlyZXQgPSBnZXRhZGRyaW5mbyhob3N0LCBOVUxMLCBOVUxMLCAmcmVzKTsKKy0JaWYgKHJldCkKKy0JCWRpZSgiVW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIsIGhvc3QsIGdhaV9zdHJlcnJvcihyZXQpKTsKKy0JKmluID0gKnJlcy0+YWlfYWRkcjsKKy0JZnJlZWFkZHJpbmZvKHJlcyk7CistfQorKyNkZWZpbmUgU1RSXyhzKQkjIHMKKysjZGVmaW5lIFNUUihzKQlTVFJfKHMpCisgCisgc3RhdGljIGludCBnaXRfdGNwX2Nvbm5lY3QoaW50IGZkWzJdLCBjb25zdCBjaGFyICpwcm9nLCBjaGFyICpob3N0LCBjaGFyICpwYXRoKQorIHsKKy0Jc3RydWN0IHNvY2thZGRyIGFkZHI7CistCWludCBwb3J0ID0gREVGQVVMVF9HSVRfUE9SVCwgc29ja2ZkOworLQljaGFyICpjb2xvbjsKKy0KKy0JY29sb24gPSBzdHJjaHIoaG9zdCwgJzonKTsKKy0JaWYgKGNvbG9uKSB7CistCQljaGFyICplbmQ7CistCQl1bnNpZ25lZCBsb25nIG4gPSBzdHJ0b3VsKGNvbG9uKzEsICZlbmQsIDApOworLQkJaWYgKGNvbG9uWzFdICYmICEqZW5kKSB7CistCQkJKmNvbG9uID0gMDsKKy0JCQlwb3J0ID0gbjsKKysJaW50IHNvY2tmZCA9IC0xOworKwljaGFyICpjb2xvbiwgKmVuZDsKKysJY2hhciAqcG9ydCA9IFNUUihERUZBVUxUX0dJVF9QT1JUKTsKKysJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWkwLCAqYWk7CisrCWludCBnYWk7CisrCisrCWlmIChob3N0WzBdID09ICdbJykgeworKwkJZW5kID0gc3RyY2hyKGhvc3QgKyAxLCAnXScpOworKwkJaWYgKGVuZCkgeworKwkJCSplbmQgPSAwOworKwkJCWVuZCsrOworKwkJCWhvc3QrKzsKKysJCX0gZWxzZQorKwkJCWVuZCA9IGhvc3Q7CisrCX0gZWxzZQorKwkJZW5kID0gaG9zdDsKKysJY29sb24gPSBzdHJjaHIoZW5kLCAnOicpOworKworKwlpZiAoY29sb24pCisrCQlwb3J0ID0gY29sb24gKyAxOworKworKwltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysJaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKysKKysJZ2FpID0gZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgJmhpbnRzLCAmYWkpOworKwlpZiAoZ2FpKQorKwkJZGllKCJVbmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIiwgaG9zdCwgZ2FpX3N0cmVycm9yKGdhaSkpOworKworKwlmb3IgKGFpMCA9IGFpOyBhaTsgYWkgPSBhaS0+YWlfbmV4dCkgeworKwkJc29ja2ZkID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlwZSwgYWktPmFpX3Byb3RvY29sKTsKKysJCWlmIChzb2NrZmQgPCAwKQorKwkJCWNvbnRpbnVlOworKwkJaWYgKGNvbm5lY3Qoc29ja2ZkLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pIDwgMCkgeworKwkJCWNsb3NlKHNvY2tmZCk7CisrCQkJc29ja2ZkID0gLTE7CisrCQkJY29udGludWU7CisgCQl9CisrCQlicmVhazsKKyAJfQorIAorLQlsb29rdXBfaG9zdChob3N0LCAmYWRkcik7CistCSgoc3RydWN0IHNvY2thZGRyX2luICopJmFkZHIpLT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworKwlmcmVlYWRkcmluZm8oYWkwKTsKKyAKKy0Jc29ja2ZkID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX0lQKTsKKyAJaWYgKHNvY2tmZCA8IDApCisgCQlkaWUoInVuYWJsZSB0byBjcmVhdGUgc29ja2V0ICglcykiLCBzdHJlcnJvcihlcnJubykpOworLQlpZiAoY29ubmVjdChzb2NrZmQsICh2b2lkICopJmFkZHIsIHNpemVvZihhZGRyKSkgPCAwKQorLQkJZGllKCJ1bmFibGUgdG8gY29ubmVjdCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKysKKyAJZmRbMF0gPSBzb2NrZmQ7CisgCWZkWzFdID0gc29ja2ZkOworIAlwYWNrZXRfd3JpdGUoc29ja2ZkLCAiJXMgJXNcbiIsIHByb2csIHBhdGgpOworCistLSAKK1lPU0hJRlVKSSBIaWRlYWtpIEAgVVNBR0kgUHJvamVjdCAgPHlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgorR1BHLUZQICA6IDkwMjIgNjVFQiAxRUNGIDNBRDEgMEJERiAgODBEOCA0ODA3IEY4OTQgRTA2MiAwRUVBCisKK0Zyb20gbm9ib2R5IFNhdCBBdWcgMjcgMjM6MDc6NDkgMjAwNQorUGF0aDogbmV3cy5nbWFuZS5vcmchbm90LWZvci1tYWlsCitNZXNzYWdlLUlEOiA8dTV0YWNqamRweHEuZnNmQGx5c2F0b3IubGl1LnNlPgorRnJvbTogPT9JU084ODU5LTE/UT9EYXZpZF9LPUU1Z2VkYWw/PSA8ZGF2aWRrQGx5c2F0b3IubGl1LnNlPgorTmV3c2dyb3VwczogZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0CitTdWJqZWN0OiBbUEFUQ0hdIEZpeGVkIHR3byBidWdzIGluIGdpdC1jdnNpbXBvcnQtc2NyaXB0LgorRGF0ZTogTW9uLCAxNSBBdWcgMjAwNSAyMDoxODoyNSArMDIwMAorTGluZXM6IDgzCitBcHByb3ZlZDogbmV3c0BnbWFuZS5vcmcKK05OVFAtUG9zdGluZy1Ib3N0OiBtYWluLmdtYW5lLm9yZworTWltZS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU084ODU5LTEKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IFFVT1RFRC1QUklOVEFCTEUKK1gtVHJhY2U6IHNlYS5nbWFuZS5vcmcgMTEyNDEzMDI0NyAzMTgzOSA4MC45MS4yMjkuMiAoMTUgQXVnIDIwMDUgMTg6MjQ6MDcgR01UKQorWC1Db21wbGFpbnRzLVRvOiB1c2VuZXRAc2VhLmdtYW5lLm9yZworTk5UUC1Qb3N0aW5nLURhdGU6IE1vbiwgMTUgQXVnIDIwMDUgMTg6MjQ6MDcgKzAwMDAgKFVUQykKK0NjOiAiSnVuaW8gQy4gSGFtYW5vIiA8anVua2lvQGNveC5uZXQ+CitPcmlnaW5hbC1YLUZyb206IGdpdC1vd25lckB2Z2VyLmtlcm5lbC5vcmcgTW9uIEF1ZyAxNSAyMDoyNDowNSAyMDA1CisKK1RoZSBnaXQtY3ZzaW1wb3J0LXNjcmlwdCBoYWQgYSBjb3B1bGUgb2Ygc21hbGwgYnVncyB0aGF0IHByZXZlbnRlZCBtZQorZnJvbSBpbXBvcnRpbmcgYSBiaWcgQ1ZTIHJlcG9zaXRvcnkuCisKK1RoZSBmaXJzdCB3YXMgdGhhdCBpdCBkaWRuJ3QgaGFuZGxlIHJlbW92ZWQgZmlsZXMgd2l0aCBhIG11bHRpLWRpZ2l0CitwcmltYXJ5IHJldmlzaW9uIG51bWJlci4KKworVGhlIHNlY29uZCB3YXMgdGhhdCBpdCB3YXMgYXNraW5nIHRoZSBDVlMgc2VydmVyIGZvciAiRiIgbWVzc2FnZXMsCithbHRob3VnaCB0aGV5IHdlcmUgbm90IGhhbmRsZWQuCisKK0kgYWxzbyB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGF0IHNjcmlwdCB0byBjb3JyZXNwb25kIHRvCithY3R1YWwgZmxhZ3MuCisKK1NpZ25lZC1vZmYtYnk6IERhdmlkIEs9RTVnZWRhbCA8ZGF2aWRrQGx5c2F0b3IubGl1LnNlPgorLS0tCisKKyBEb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dCB8IDkgKysrKysrKystCisgZ2l0LWN2c2ltcG9ydC1zY3JpcHQgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKzUwNDUyZjljMGMyZGYxZjA0ZDgzYTI2MjY2YmE3MDRiMTM4NjE2MzIKK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0PQorLWN2c2ltcG9ydC1zY3JpcHQudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LXNjcmlwdC50eHQKK0BAIC0yOSw2ICsyOSwxMCBAQCBPUFRJT05TCisgCWN1cnJlbnRseSwgb25seSB0aGUgOmxvY2FsOiwgOmV4dDogYW5kIDpwc2VydmVyOiBhY2Nlc3MgbWV0aG9kcz0yMAorIAlhcmUgc3VwcG9ydGVkLgorPTIwCisrLUMgPHRhcmdldC1kaXI+OjoKKysgICAgICAgIFRoZSBHSVQgcmVwb3NpdG9yeSB0byBpbXBvcnQgdG8uICBJZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QKKysgICAgICAgIGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuICBEZWZhdWx0IGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKysKKyAtaTo6CisgCUltcG9ydC1vbmx5OiBkb24ndCBwZXJmb3JtIGEgY2hlY2tvdXQgYWZ0ZXIgaW1wb3J0aW5nLiAgVGhpcyBvcHRpb24KKyAJZW5zdXJlcyB0aGUgd29ya2luZyBkaXJlY3RvcnkgYW5kIGNhY2hlIHJlbWFpbiB1bnRvdWNoZWQgYW5kIHdpbGwKK0BAIC00NCw3ICs0OCw3IEBAIE9QVElPTlMKKz0yMAorIC1wIDxvcHRpb25zLWZvci1jdnNwcz46OgorIAlBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGN2c3BzLgorLQlUaGUgb3B0aW9ucyAnLXgnIGFuZCAnLUEnIGFyZSBpbXBsaWNpdCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGhlcmUuCisrCVRoZSBvcHRpb25zICctdScgYW5kICctQScgYXJlIGltcGxpY2l0IGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaGVyZS4KKz0yMAorIAlJZiB5b3UgbmVlZCB0byBwYXNzIG11bHRpcGxlIG9wdGlvbnMsIHNlcGFyYXRlIHRoZW0gd2l0aCBhIGNvbW1hLgorPTIwCitAQCAtNTcsNiArNjEsOSBAQCBPUFRJT05TCisgLWg6OgorIAlQcmludCBhIHNob3J0IHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQuCis9MjAKKysteiA8ZnV6ej46OgorKyAgICAgICAgUGFzcyB0aGUgdGltZXN0YW1wIGZ1enogZmFjdG9yIHRvIGN2c3BzLgorKworIE9VVFBVVAorIC0tLS0tLQorIElmICctdicgaXMgc3BlY2lmaWVkLCB0aGUgc2NyaXB0IHJlcG9ydHMgd2hhdCBpdCBpcyBkb2luZy4KK2RpZmYgLS1naXQgYS9naXQtY3ZzaW1wb3J0LXNjcmlwdCBiL2dpdC1jdnNpbXBvcnQtc2NyaXB0CistLS0gYS9naXQtY3ZzaW1wb3J0LXNjcmlwdAorKysrIGIvZ2l0LWN2c2ltcG9ydC1zY3JpcHQKK0BAIC0xOTAsNyArMTkwLDcgQEAgc3ViIGNvbm4geworIAkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJSb290ICRyZXBvXG4iKTsKKz0yMAorIAkjIFRyaWFsIGFuZCBlcnJvciBzYXlzIHRoYXQgdGhpcyBwcm9iYWJseSBpcyB0aGUgbWluaW11bSBzZXQKKy0JJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiVmFsaWQtcmVzcG9uc2VzIG9rIGVycm9yIFZhbGlkLXJlcXVlc3RzIE1vPQorZGUgTSBNYmluYXJ5IEUgRiBDaGVja2VkLWluIENyZWF0ZWQgVXBkYXRlZCBNZXJnZWQgUmVtb3ZlZFxuIik7CisrCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIlZhbGlkLXJlc3BvbnNlcyBvayBlcnJvciBWYWxpZC1yZXF1ZXN0cyBNbz0KK2RlIE0gTWJpbmFyeSBFIENoZWNrZWQtaW4gQ3JlYXRlZCBVcGRhdGVkIE1lcmdlZCBSZW1vdmVkXG4iKTsKKz0yMAorIAkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJ2YWxpZC1yZXF1ZXN0c1xuIik7CisgCSRzZWxmLT57J3NvY2tldG8nfS0+Zmx1c2goKTsKK0BAIC02OTEsNyArNjkxLDcgQEAgd2hpbGUoPENWUz4pIHsKKyAJCXVubGluaygkdG1wbmFtZSk7CisgCQlteSAkbW9kZSA9M0QgcG1vZGUoJGN2cy0+eydtb2RlJ30pOworIAkJcHVzaChAbmV3LFskbW9kZSwgJHNoYSwgJGZuXSk7ICMgbWF5IGJlIHJlc3VycmVjdGVkIQorLQl9IGVsc2lmKCRzdGF0ZSA9M0Q9M0QgOSBhbmQgL15ccysoXFMrKTpcZCg/OlwuXGQrKSstPihcZCg/OlwuXGQrKSspXCg9CitERUFEXClccyokLykgeworKwl9IGVsc2lmKCRzdGF0ZSA9M0Q9M0QgOSBhbmQgL15ccysoXFMrKTpcZCsoPzpcLlxkKykrLT4oXGQrKD86XC5cZCspKyk9CitcKERFQURcKVxzKiQvKSB7CisgCQlteSAkZm4gPTNEICQxOworIAkJJGZuID0zRH4gcyNeLysjIzsKKyAJCXB1c2goQG9sZCwkZm4pOworCistLT0yMAorRGF2aWQgSz1FNWdlZGFsCistCitUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgZ2l0IiBpbgordGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcKK01vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbAorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhLnUudGhvckBleGFtcGxlLmNvbT4KK1JlZmVyZW5jZXM6IDxQaW5lLkxOWC40LjY0MC4wMDAxQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDAyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDAzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDEwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDExQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDEyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDEzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDIwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDIxQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDIyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDIzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDMwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDMxQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDMyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDMzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQxQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDUwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGEgY29tbWl0LgorCitIZXJlIGlzIGEgcGF0Y2ggZnJvbSBBIFUgVGhvci4KKworLS0tCisgZm9vIHwgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCA5MTIzY2RjLi45MThkY2Y4IDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0xICsxIEBACistRnJpIEp1biAgOSAwMDo0NDowNCBQRFQgMjAwNgorK0ZyaSBKdW4gIDkgMDA6NDQ6MTMgUERUIDIwMDYKKy0tIAorMS40LjAuZzZmMmIKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YS51LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYW5vdGhlciBwYXRjaAorCitIZXJlIGlzIGFuIGVtcHR5IHBhdGNoIGZyb20gQSBVIFRob3IuCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGp1bmlvQGtlcm5lbC5vcmc+CitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKK1N1YmplY3Q6IHJlOiBbUEFUQ0hdIGFub3RoZXIgcGF0Y2gKKworRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIXSBhbm90aGVyIHBhdGNoCis+SGVyZSBpcyBhbiBlbXB0eSBwYXRjaCBmcm9tIEEgVSBUaG9yLgorCitIZXkgeW91IGZvcmdvdCB0aGUgcGF0Y2ghCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAxNyBTZXAgMjAwMSAwMDowMDowMCArMDkwMAorTWltZS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogVGV4dC9QbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogUXVvdGVkLVByaW50YWJsZQorCis9MEE9MEFGcm9tOiBGIFUgQmFyIDxmLnUuYmFyQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIXSB1cGRhdGVzPTBBPTBBVGhpcyBpcyB0byBmaXggZGlmZi1mb3JtYXQgZG9jdW1lbnRhdGlvbi4KKworZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKK2luZGV4IGI0MjZhMTQuLjk3NzU2ZWMgMTAwNjQ0CistLS0gYS9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKK0BAIC04MSw3ICs4MSw3IEBAIFRoZSAiZGlmZiIgZm9ybWF0dGluZyBvcHRpb25zIGNhbiBiZSBjdXN0b21pemVkIHZpYSB0aGUKKyBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR0lUX0RJRkZfT1BUUycuICBGb3IgZXhhbXBsZSwgaWYgeW91CisgcHJlZmVyIGNvbnRleHQgZGlmZjoKKz0yMAorLSAgICAgIEdJVF9ESUZGX09QVFM9M0QtYyBnaXQtZGlmZi1pbmRleCAtcCAkKGNhdCAuZ2l0L0hFQUQpCisrICAgICAgR0lUX0RJRkZfT1BUUz0zRC1jIGdpdC1kaWZmLWluZGV4IC1wIEhFQUQKKz0yMAorPTIwCisgMi4gV2hlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ0dJVF9FWFRFUk5BTF9ESUZGJyBpcyBzZXQsIHRoZQorRnJvbSBiOTcwNGE1MThlMjExNTg0MzNiYWEyY2MyZDU5MWZlYTY4Nzk2N2Y2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0x1a2FzPTIwU2FuZHN0cj1DMz1CNm0/PSA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CitEYXRlOiBUaHUsIDEwIEp1bCAyMDA4IDIzOjQxOjMzICswMjAwCitTdWJqZWN0OiBSZTogZGlzY3Vzc2lvbiB0aGF0IGxlYWQgdG8gdGhpcyBwYXRjaAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitbUEFUQ0hdIGdpdC1tYWlsaW5mbzogRml4IGdldHRpbmcgdGhlIHN1YmplY3QgZnJvbSB0aGUgYm9keQorCisiU3ViamVjdDogIiBpc24ndCBpbiB0aGUgc3RhdGljIGFycmF5ICJoZWFkZXIiLCBhbmQgdGh1cworbWVtY21wKCJTdWJqZWN0OiAiLCBoZWFkZXJbaV0sIDcpIHdpbGwgbmV2ZXIgbWF0Y2guCisKK1NpZ25lZC1vZmYtYnk6IEx1a2FzIFNhbmRzdHLDtm0gPGx1a2Fzc0BldGVrLmNoYWxtZXJzLnNlPgorU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorLS0tCisgYnVpbHRpbi1tYWlsaW5mby5jIHwgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCitpbmRleCA5NjJhYTM0Li4yZDE1MjBmIDEwMDY0NAorLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKysgYi9idWlsdGluLW1haWxpbmZvLmMKK0BAIC0zMzQsNyArMzM0LDcgQEAgc3RhdGljIGludCBjaGVja19oZWFkZXIoY2hhciAqbGluZSwgdW5zaWduZWQgbGluZXNpemUsIGNoYXIgKipoZHJfZGF0YSwgaW50IG92ZXIKKyAJCXJldHVybiAxOworIAlpZiAoIW1lbWNtcCgiW1BBVENIXSIsIGxpbmUsIDcpICYmIGlzc3BhY2UobGluZVs3XSkpIHsKKyAJCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7CistCQkJaWYgKCFtZW1jbXAoIlN1YmplY3Q6ICIsIGhlYWRlcltpXSwgOSkpIHsKKysJCQlpZiAoIW1lbWNtcCgiU3ViamVjdCIsIGhlYWRlcltpXSwgNykpIHsKKyAJCQkJaWYgKCEgaGFuZGxlX2hlYWRlcihsaW5lLCBoZHJfZGF0YVtpXSwgMCkpIHsKKyAJCQkJCXJldHVybiAxOworIAkJCQl9CistLSAKKzEuNS42LjIuNDU1LmcxZWZiMgorCitGcm9tIG5vYm9keSBGcmkgQXVnICA4IDIyOjI0OjAzIDIwMDgKK0RhdGU6IEZyaSwgOCBBdWcgMjAwOCAxMzowODozNyArMDIwMCAoQ0VTVCkKK0Zyb206IEEgVSBUaG9yIDxhLnUudGhvckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IFtQQVRDSCAzLzMgdjJdIFh5enp5CitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9LT0tPSIKKworLS09LT0tPQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMTUKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworSGVyZSBjb21lcyBhIGNvbW1pdCBsb2cgbWVzc2FnZSwgYW5kCitpdHMgc2Vjb25kIGxpbmUgaXMgaGVyZS4KKy0tLQorIGJ1aWx0aW4tbWFpbGluZm8uYyAgfCA0ICsrLS0KKworZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWFpbGluZm8uYyBiL2J1aWx0aW4tbWFpbGluZm8uYworaW5kZXggM2U1ZmU1MS4uYWFiZmU1YyAxMDA2NDQKKy0tLSBhL2J1aWx0aW4tbWFpbGluZm8uYworKysrIGIvYnVpbHRpbi1tYWlsaW5mby5jCitAQCAtNzU4LDggKzc1OCw4IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9ib2R5KHZvaWQpCisgCQkvKiBwcm9jZXNzIGFueSBib3VuZGFyeSBsaW5lcyAqLworIAkJaWYgKCpjb250ZW50X3RvcCAmJiBpc19tdWx0aXBhcnRfYm91bmRhcnkoJmxpbmUpKSB7CisgCQkJLyogZmx1c2ggYW55IGxlZnRvdmVyICovCistCQkJaWYgKGxpbmUubGVuKQorLQkJCQloYW5kbGVfZmlsdGVyKCZsaW5lKTsKKysJCQlpZiAocHJldi5sZW4pCisrCQkJCWhhbmRsZV9maWx0ZXIoJnByZXYpOworPTIwCisgCQkJaWYgKCFoYW5kbGVfYm91bmRhcnkoKSkKKyAJCQkJZ290byBoYW5kbGVfYm9keV9vdXQ7CistLT0yMAorMS42LjAucmMyCisKKy0tPS09LT0tLQorCitGcm9tIGJkYUBtbnNzcGIucnUgV2VkIE5vdiAxMiAxNzo1NDo0MSAyMDA4CitGcm9tOiBEbWl0cml5IEJsaW5vdiA8YmRhQG1uc3NwYi5ydT4KK1RvOiBuYXZ5LXBhdGNoZXNAZGluYXIubW5zLm1uc3NwYi5ydQorRGF0ZTogV2VkLCAxMiBOb3YgMjAwOCAxNzo1NDo0MSArMDMwMAorTWVzc2FnZS1JZDogPDEyMjY1MDE2ODEtMjQ5MjMtMS1naXQtc2VuZC1lbWFpbC1iZGFAbW5zc3BiLnJ1PgorWC1NYWlsZXI6IGdpdC1zZW5kLWVtYWlsIDEuNS42LjUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47CisgIGNoYXJzZXQ9dXRmLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK1N1YmplY3Q6IFtOYXZ5LXBhdGNoZXNdIFtQQVRDSF0KKwk9P3V0Zi04P2I/MEpqUXQ5QzgwTFhRdmRHUjBMMGcwWUhRdjlDNDBZSFF2dEM2SU5DLzBMQT0/PQorCT0/dXRmLTg/Yj8wTHJRdGRHQzBMN1FzaURRdmRDMTBMN1FzZEdGMEw3UXROQzQwTHpSaTlHRklOQzAwTHZSanlBPT89CisJPT91dGYtOD9iPzBZSFFzZEMrMFlEUXV0QzQ/PQorCit0ZXh0bGl2ZS0qINC40YHQv9GA0LDQstC70LXQvdGLINC90LAgdGV4bGl2ZS0qCitkb2N1dGlscyDQt9Cw0LzQtdC90ZHQvSDQvdCwIHB5dGhvbi1kb2N1dGlscworCivQlNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Qviwg0L7QutCw0LfQsNC70L7RgdGMLCDRh9GC0L4gcmVzdDJ3ZWIg0LLRi9GC0Y/Qs9C40LLQsNC10YIg0LfQsCDRgdC+0LHQvtC5CitweXRob24tZG9jdXRpbHMuINCSINGC0L4g0LLRgNC10LzRjyDQutCw0Log0YHQsNC8IHJlc3Qyd2ViINC90LUg0L3Rg9C20LXQvS4KKworU2lnbmVkLW9mZi1ieTogRG1pdHJpeSBCbGlub3YgPGJkYUBtbnNzcGIucnU+CistLS0KKyBob3d0by9idWlsZF9uYXZ5LnR4dCB8ICAgIDYgKysrLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ob3d0by9idWlsZF9uYXZ5LnR4dCBiL2hvd3RvL2J1aWxkX25hdnkudHh0CitpbmRleCAzZmQzYWZiLi4wZWU4MDdlIDEwMDY0NAorLS0tIGEvaG93dG8vYnVpbGRfbmF2eS50eHQKKysrKyBiL2hvd3RvL2J1aWxkX25hdnkudHh0CitAQCAtMTE5LDggKzExOSw4IEBACisgICAgLSBsaWJ4di1kZXYKKyAgICAtIGxpYnVzcGxhc2gtZGV2CisgICAgLSBsYXRleC1tYWtlCistICAgLSB0ZXh0bGl2ZS1sYW5nLWN5cmlsbGljCistICAgLSB0ZXh0bGl2ZS1sYXRleC1leHRyYQorKyAgIC0gdGV4bGl2ZS1sYW5nLWN5cmlsbGljCisrICAgLSB0ZXhsaXZlLWxhdGV4LWV4dHJhCisgICAgLSBkaWEKKyAgICAtIHB5dGhvbi1weXJleAorICAgIC0gbGlidG9vbAorQEAgLTEyOCw3ICsxMjgsNyBAQAorICAgIC0gc294CisgICAgLSBjeXRob24KKyAgICAtIGltYWdlbWFnaWNrCistICAgLSBkb2N1dGlscworKyAgIC0gcHl0aG9uLWRvY3V0aWxzCisgCisgIy4g0L3QsCDQvNCw0YjQuNC90LUgZGluYXI6INC00L7QsdCw0LLQuNGC0Ywg0YHQstC+0Lkg0L7RgtC60YDRi9GC0YvQuSBzc2gt0LrQu9GO0Ycg0LIgYXV0aG9yaXplZF9rZXlzMiDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gZGRldgorICMuINC90LAg0YHQstC+0LXQuSDQvNCw0YjQuNC90LU6INC+0YLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCAvZXRjL3N1ZG9lcnMgKNC60L7QvNCw0L3QtNCwIGBgdmlzdWRvYGApINC/0YDQuNC80LXRgNC90L4g0YHQu9C10LTRg9GO0YnQuNC8INC+0LHRgNCw0LfQvtC8OjoKKy0tIAorMS41LjYuNQorRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA8YS51LnRob3JAZXhhbXBsZS5jb20+IChBIFUgVGhvcikKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBhIHBhdGNoCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVuaW8gSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KK0RhdGU6IFRodSwgMjAgQXVnIDIwMDkgMTc6MTg6MjIgLTA3MDAKK1N1YmplY3Q6IFdoeSBkb2Vzbid0IGdpdC1hbSBkb2VzIG5vdCBsaWtlID44IHNjaXNzb3JzIG1hcms/CisKK1N1YmplY3Q6IFtQQVRDSF0gQkxBSCBPTkUKKworSW4gcmVhbCBsaWZlLCB3ZSB3aWxsIHNlZSBhIGRpc2N1c3Npb24gdGhhdCBpbnNwaXJlZCB0aGlzIHBhdGNoCitkaXNjdXNzaW5nIHJlbGF0ZWQgYW5kIHVucmVsYXRlZCB0aGluZ3MgYXJvdW5kID44IHNjaXNzb3JzIG1hcmsKK2luIHRoaXMgcGFydCBvZiB0aGUgbWVzc2FnZS4KKworU3ViamVjdDogW1BBVENIXSBCTEFIIFRXTworCitBbmQgdGhlbiB3ZSB3aWxsIHNlZSB0aGUgc2Npc3NvcnMuCisKKyBUaGlzIGxpbmUgaXMgbm90IGEgc2Npc3NvcnMgbWFyayAtLSA+OCAtLSBidXQgdGFsa3MgYWJvdXQgaXQuCisgLSAtID44IC0gLSBwbGVhc2UgcmVtb3ZlIGV2ZXJ5dGhpbmcgYWJvdmUgdGhpcyBsaW5lIC0gLSA+OCAtIC0KKworU3ViamVjdDogW1BBVENIXSBUZWFjaCBtYWlsaW5mbyB0byBpZ25vcmUgZXZlcnl0aGluZyBiZWZvcmUgLS0gPjggLS0gbWFyaworRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorCitUaGlzIHRlYWNoZXMgbWFpbGluZm8gdGhlIHNjaXNzb3JzIC0tID44IC0tIG1hcms7IHRoZSBjb21tYW5kIGlnbm9yZXMKK2V2ZXJ5dGhpbmcgYmVmb3JlIGl0IGluIHRoZSBtZXNzYWdlIGJvZHkuCisKK1NpZ25lZC1vZmYtYnk6IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKy0tLQorIGJ1aWx0aW4tbWFpbGluZm8uYyB8IDM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGluLW1haWxpbmZvLmMgYi9idWlsdGluLW1haWxpbmZvLmMKK2luZGV4IGIwYjVkOGYuLjQ2MWM0N2UgMTAwNjQ0CistLS0gYS9idWlsdGluLW1haWxpbmZvLmMKKysrKyBiL2J1aWx0aW4tbWFpbGluZm8uYworQEAgLTcxMiw2ICs3MTIsMzQgQEAgc3RhdGljIGlubGluZSBpbnQgcGF0Y2hicmVhayhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIAlyZXR1cm4gMDsKKyB9CisgCisrc3RhdGljIGludCBzY2lzc29ycyhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorK3sKKysJc2l6ZV90IGksIGxlbiA9IGxpbmUtPmxlbjsKKysJaW50IHNjaXNzb3JzX2Rhc2hlc19zZWVuID0gMDsKKysJY29uc3QgY2hhciAqYnVmID0gbGluZS0+YnVmOworKworKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKysJCWlmIChpc3NwYWNlKGJ1ZltpXSkpCisrCQkJY29udGludWU7CisrCQlpZiAoYnVmW2ldID09ICctJykgeworKwkJCXNjaXNzb3JzX2Rhc2hlc19zZWVuIHw9IDAyOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKGkgKyAxIDwgbGVuICYmICFtZW1jbXAoYnVmICsgaSwgIj44IiwgMikpIHsKKysJCQlzY2lzc29yc19kYXNoZXNfc2VlbiB8PSAwMTsKKysJCQlpKys7CisrCQkJY29udGludWU7CisrCQl9CisrCQlpZiAoaSArIDcgPCBsZW4gJiYgIW1lbWNtcChidWYgKyBpLCAiY3V0IGhlcmUiLCA4KSkgeworKwkJCWkgKz0gNzsKKysJCQljb250aW51ZTsKKysJCX0KKysJCS8qIGV2ZXJ5dGhpbmcgZWxzZSAtLS0gbm90IHNjaXNzb3JzICovCisrCQlicmVhazsKKysJfQorKwlyZXR1cm4gc2Npc3NvcnNfZGFzaGVzX3NlZW4gPT0gMDM7CisrfQorKworIHN0YXRpYyBpbnQgaGFuZGxlX2NvbW1pdF9tc2coc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyB7CisgCXN0YXRpYyBpbnQgc3RpbGxfbG9va2luZyA9IDE7CitAQCAtNzIzLDEwICs3NTEsMTcgQEAgc3RhdGljIGludCBoYW5kbGVfY29tbWl0X21zZyhzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIAkJc3RyYnVmX2x0cmltKGxpbmUpOworIAkJaWYgKCFsaW5lLT5sZW4pCisgCQkJcmV0dXJuIDA7CistCQlpZiAoKHN0aWxsX2xvb2tpbmcgPSBjaGVja19oZWFkZXIobGluZSwgc19oZHJfZGF0YSwgMCkpICE9IDApCisrCQlzdGlsbF9sb29raW5nID0gY2hlY2tfaGVhZGVyKGxpbmUsIHNfaGRyX2RhdGEsIDApOworKwkJaWYgKHN0aWxsX2xvb2tpbmcpCisgCQkJcmV0dXJuIDA7CisgCX0KKyAKKysJaWYgKHNjaXNzb3JzKGxpbmUpKSB7CisrCQlmc2VlayhjbWl0bXNnLCAwTCwgU0VFS19TRVQpOworKwkJc3RpbGxfbG9va2luZyA9IDE7CisrCQlyZXR1cm4gMDsKKysJfQorKworIAkvKiBub3JtYWxpemUgdGhlIGxvZyBtZXNzYWdlIHRvIFVURi04LiAqLworIAlpZiAobWV0YWluZm9fY2hhcnNldCkKKyAJCWNvbnZlcnRfdG9fdXRmOChsaW5lLCBjaGFyc2V0LmJ1Zik7CistLSAKKzEuNi40LjEKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogY2hlY2sgYm9ndXMgYm9keSBoZWFkZXIgKGZyb20pCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKworRnJvbTogYm9nb3NpdHkKKyAgLSBhIGxpc3QKKyAgLSBvZiBzdHVmZgorLS0tCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogY2hlY2sgYm9ndXMgYm9keSBoZWFkZXIgKGRhdGUpCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKworRGF0ZTogYm9ndXMKKworYW5kIHNvbWUgY29udGVudAorCistLS0KK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YS51LnRob3JAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBBIEUgSSBPIFUKK0RhdGU6IE1vbiwgMTcgU2VwIDIwMTIgMTQ6MjM6NDQgLTA3MDAKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Imlzby0yMDIyLWpwIgorQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJVVEYtOCIKKworTmV3IGNvbnRlbnQgaGVyZQorCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytOZXcgY29udGVudAorRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YS51LnRob3JAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBjaGVjayBtdWx0aWxpbmUgaW5ib2R5IGhlYWRlcnMKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCitGcm9tOiBBbm90aGVyIFRob3IKKyA8YS50aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogVGhpcyBvbmUgY29udGFpbnMKKwlhIHRhYgorIGFuZCBhIHNwYWNlCisKK2EgY29tbWl0IG1lc3NhZ2UKKworZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggZTY5ZGUyOS4uZDk1ZjNhZCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrY29udGVudApkaWZmIC0tZ2l0IGEvdC90NTEwMC9zYW1wbGUubWJveHJkIGIvdC90NTEwMC9zYW1wbGUubWJveHJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YWQ1YWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3NhbXBsZS5tYm94cmQKQEAgLTAsMCArMSwxOSBAQAorRnJvbSBtYm94cmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBtYm94cmQgd3JpdGVyIDxtYm94cmRAZXhhbXBsZS5jb20+CitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYSBjb21taXQgd2l0aCBlc2NhcGVkIEZyb20gbGluZXMKKworPkZyb20gdGhlIGJlZ2lubmluZywgbWJveCBzaG91bGQgaGF2ZSBiZWVuIG1ib3hyZAorPj5Gcm9tIGVzY2FwZWQKK0Zyb20gbm90IG1hbmdsZWQgYnV0IHRoaXMgbGluZSBzaG91bGQgaGF2ZSBiZWVuIGVzY2FwZWQKKworRnJvbSBtYm94cmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBtYm94cmQgd3JpdGVyIDxtYm94cmRAZXhhbXBsZS5jb20+CitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIGFub3RoZXIgd2l0aCBmYWtlIEZyb20gbGluZXMKKworID5Gcm9tIHVuY2hhbmdlZAorIEZyb20gYWxzbyB1bmNoYW5nZWQKK25vIHRyYWlsaW5nIHNwYWNlLCBubyBlc2NhcGluZyBuZWNlc3NhcnkgYW5kICc+JyB3YXMgaW50ZW5kZWQ6Cis+RnJvbQorCmRpZmYgLS1naXQgYS90L3Q1MTUwLXJlcXVlc3QtcHVsbC5zaCBiL3QvdDUxNTAtcmVxdWVzdC1wdWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxODExZWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTUwLXJlcXVlc3QtcHVsbC5zaApAQCAtMCwwICsxLDMwNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgd29ya2Zsb3dzIGludm9sdmluZyBwdWxsIHJlcXVlc3QuJworCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkwKK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgcmVxdWVzdC1wdWxsIHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJZ2l0IGluaXQgLS1iYXJlIHVwc3RyZWFtLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkb3duc3RyZWFtLmdpdCAmJgorCWdpdCBjbG9uZSB1cHN0cmVhbS5naXQgdXBzdHJlYW0tcHJpdmF0ZSAmJgorCWdpdCBjbG9uZSBkb3duc3RyZWFtLmdpdCBsb2NhbCAmJgorCisJdHJhc2hfdXJsPSJmaWxlOi8vJFRSQVNIX0RJUkVDVE9SWSIgJiYKKwlkb3duc3RyZWFtX3VybD0iJHRyYXNoX3VybC9kb3duc3RyZWFtLmdpdC8iICYmCisJdXBzdHJlYW1fdXJsPSIkdHJhc2hfdXJsL3Vwc3RyZWFtLmdpdC8iICYmCisKKwkoCisJCWNkIHVwc3RyZWFtLXByaXZhdGUgJiYKKwkJY2F0IDw8LVxFT1QgPm1uZW1vbmljLnR4dCAmJgorCQlUaGlydGV5IGRheXMgaGF0aCBOb3ZlbWJlciwKKwkJQXByaWxlLCBKdW5lLCBhbmQgU2VwdGVtYmVyOgorCQlFT1QKKwkJZ2l0IGFkZCBtbmVtb25pYy50eHQgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIlwiVGhpcnR5IGRheXNcIiwgYSByZW1pbmRlciBvZiBtb250aCBsZW5ndGhzIiAmJgorCQlnaXQgdGFnIC1tICJ2ZXJzaW9uIDEiIC1hIGluaXRpYWwgJiYKKwkJZ2l0IHB1c2ggLS10YWdzIG9yaWdpbiBtYXN0ZXIKKwkpICYmCisJKAorCQljZCBsb2NhbCAmJgorCQlnaXQgcmVtb3RlIGFkZCB1cHN0cmVhbSAiJHRyYXNoX3VybC91cHN0cmVhbS5naXQiICYmCisJCWdpdCBmZXRjaCB1cHN0cmVhbSAmJgorCQlnaXQgcHVsbCB1cHN0cmVhbSBtYXN0ZXIgJiYKKwkJY2F0IDw8LVxFT1QgPj5tbmVtb25pYy50eHQgJiYKKwkJT2YgdHd5ZWNlc2NvcmUtZWlnaHR0IGlzIGJ1dCBlaW5lLAorCQlBbmQgYWxsIHRoZSByZW1uYW50ZSBiZSB0aHJ5Y2VzY29yZS1laW5lLgorCQlP4oCZY291cnNlIExlYXAgeWFyZSBjb21lcyBhbuKAmXB5bmVzLAorCQlFduKAmXJpZSBmb3VyZSB5YXJlcywgZ290ZSBpdCByeWdodGguCisJCUFu4oCZdHd5ZWNlc2NvcmUtZWlnaHQgaXMgYnV0IHR3eWVjZXNjb3JlLW55bmUuCisJCUVPVAorCQlnaXQgYWRkIG1uZW1vbmljLnR4dCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTW9yZSBkZXRhaWwiICYmCisJCWdpdCB0YWcgLW0gInZlcnNpb24gMiIgLWEgZnVsbCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgc2ltcGxpZnkgSEVBRF4gJiYKKwkJbXYgbW5lbW9uaWMudHh0IG1uZW1vbmljLnN0YW5kYXJkICYmCisJCWNhdCA8PC1cRU9UID5tbmVtb25pYy5jbGFyaWZpZWQgJiYKKwkJVGhpcnR5IGRheXMgaGFzIFNlcHRlbWJlciwKKwkJQWxsIHRoZSByZXN0IEkgY2Fu4oCZdCByZW1lbWJlci4KKwkJRU9UCisJCWdpdCBhZGQgLU4gbW5lbW9uaWMuc3RhbmRhcmQgbW5lbW9uaWMuY2xhcmlmaWVkICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkFkYXB0IHRvIHVzZSBtb2Rlcm4sIHNpbXBsZXIgRW5nbGlzaAorCitCdXQga2VlcCB0aGUgb2xkIHZlcnNpb24sIHRvbywgaW4gY2FzZSBzb21lIHBlb3BsZSBwcmVmZXIgaXQuIiAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiB0d28gc2NyaXB0cyBmb3IgcmVhZGluZyBwdWxsIHJlcXVlc3RzJyAnCisKKwlkb3duc3RyZWFtX3VybF9mb3Jfc2VkPSQoCisJCXByaW50ZiAiJXNcbiIgIiRkb3duc3RyZWFtX3VybCIgfAorCQlzZWQgLWUgJ1wnJ3MvXFwvXFxcXC9nJ1wnJyAtZSAnXCcncy9bWy8uKl4kXS9cXCYvZydcJycKKwkpICYmCisKKwljYXQgPDwtXEVPVCA+cmVhZC1yZXF1ZXN0LnNlZCAmJgorCSMhL2Jpbi9zZWQgLW5mCisJIyBOb3RlIHRoYXQgYSByZXF1ZXN0IGNvdWxkIGFzayBmb3IgInRhZyAkdGFnbmFtZSIKKwkvIGluIHRoZSBHaXQgcmVwb3NpdG9yeSBhdDokLyFkCisJbgorCS9eJC8gbgorCXMvIHRhZyBcKFteIF0qXCkkLyB0YWctLVwxLworCXMvXlsgCV0qXCguKlwpIFwoW14gXSpcKS9wbGVhc2UgcHVsbFwKKwlcMVwKKwlcMi9wCisJcQorCUVPVAorCisJY2F0IDw8LUVPVCA+ZnV6ei5zZWQKKwkjIS9iaW4vc2VkIC1uZgorCXMvJGRvd25zdHJlYW1fdXJsX2Zvcl9zZWQvVVJML2cKKwlzLyRPSURfUkVHRVgvT0JKRUNUX05BTUUvZworCXMvQSBVIFRob3IvQVVUSE9SL2cKKwlzL1stMC05XVx7MTBcfSBbOjAtOV1cezhcfSBbLStdWzAtOV1cezRcfS9EQVRFL2cKKwlzLyAgICAgICAgW14gXS4qLyAgICAgICAgU1VCSkVDVC9nCisJcy8gIFteIF0uKiAoREFURSkvICBTVUJKRUNUIChEQVRFKS9nCisJc3x0YWdzL2Z1bGx8QlJBTkNIfGcKKwlzL21uZW1vbmljLnR4dC9GSUxFTkFNRS9nCisJcy9edmVyc2lvbiBbMC05XS9WRVJTSU9OLworCS9eIEZJTEVOQU1FIHwgKlswLTldKiBbLStdKlwkLyBiIGRpZmZzdGF0CisJL15BVVRIT1IgKFswLTldKik6XCQvIGIgc2hvcnRsb2cKKwlwCisJYgorCTogZGlmZnN0YXQKKwluCisJLyBbMC05XSogZmlsZXMqIGNoYW5nZWQvIHsKKwkJYVxcCisJRElGRlNUQVQKKwkJYgorCX0KKwliIGRpZmZzdGF0CisJOiBzaG9ydGxvZworCS9eICAgICAgICBbYS16QS1aXS8gbgorCS9eW2EtekEtWl0qIChbMC05XSopOlwkLyBuCisJL15cJC8gTgorCS9eXG5bYS16QS1aXSogKFswLTldKik6XCQvIXsKKwkJYVxcCisJU0hPUlRMT0cKKwkJRAorCX0KKwluCisJYiBzaG9ydGxvZworCUVPVAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgcmVxdWVzdCB3aGVuIGZvcmdvdCB0byBwdXNoJyAnCisKKwlybSAtZnIgZG93bnN0cmVhbS5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZG93bnN0cmVhbS5naXQgJiYKKwkoCisJCWNkIGxvY2FsICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgbWFzdGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXF1ZXN0LXB1bGwgaW5pdGlhbCAiJGRvd25zdHJlYW1fdXJsIiBcCisJCQkyPi4uL2VycgorCSkgJiYKKwlncmVwICJObyBtYXRjaCBmb3IgY29tbWl0IC4qIiBlcnIgJiYKKwlncmVwICJBcmUgeW91IHN1cmUgeW91IHB1c2hlZCIgZXJyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCByZXF1ZXN0IGFmdGVyIHB1c2gnICcKKworCXJtIC1mciBkb3duc3RyZWFtLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkb3duc3RyZWFtLmdpdCAmJgorCSgKKwkJY2QgbG9jYWwgJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIG1hc3Rlcjpmb3ItdXBzdHJlYW0gJiYKKwkJZ2l0IHJlcXVlc3QtcHVsbCBpbml0aWFsIG9yaWdpbiBtYXN0ZXI6Zm9yLXVwc3RyZWFtID4uLi9yZXF1ZXN0CisJKSAmJgorCXNlZCAtbmYgcmVhZC1yZXF1ZXN0LnNlZCA8cmVxdWVzdCA+ZGlnZXN0ICYmCisJeworCQlyZWFkIHRhc2sgJiYKKwkJcmVhZCByZXBvc2l0b3J5ICYmCisJCXJlYWQgYnJhbmNoCisJfSA8ZGlnZXN0ICYmCisJKAorCQljZCB1cHN0cmVhbS1wcml2YXRlICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJCWdpdCBwdWxsIC0tZmYtb25seSAiJHJlcG9zaXRvcnkiICIkYnJhbmNoIgorCSkgJiYKKwl0ZXN0ICIkYnJhbmNoIiA9IGZvci11cHN0cmVhbSAmJgorCXRlc3RfY21wIGxvY2FsL21uZW1vbmljLnR4dCB1cHN0cmVhbS1wcml2YXRlL21uZW1vbmljLnR4dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcXVlc3QgYXNrcyBIRUFEIHRvIGJlIHB1bGxlZCcgJworCisJcm0gLWZyIGRvd25zdHJlYW0uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIGRvd25zdHJlYW0uZ2l0ICYmCisJKAorCQljZCBsb2NhbCAmJgorCQlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCQlnaXQgbWVyZ2UgLS1mZi1vbmx5IG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLXRhZ3Mgb3JpZ2luIG1hc3RlciBzaW1wbGlmeSAmJgorCQlnaXQgcHVzaCBvcmlnaW4gbWFzdGVyOmZvci11cHN0cmVhbSAmJgorCQlnaXQgcmVxdWVzdC1wdWxsIGluaXRpYWwgIiRkb3duc3RyZWFtX3VybCIgPi4uL3JlcXVlc3QKKwkpICYmCisJc2VkIC1uZiByZWFkLXJlcXVlc3Quc2VkIDxyZXF1ZXN0ID5kaWdlc3QgJiYKKwl7CisJCXJlYWQgdGFzayAmJgorCQlyZWFkIHJlcG9zaXRvcnkgJiYKKwkJcmVhZCBicmFuY2gKKwl9IDxkaWdlc3QgJiYKKwl0ZXN0IC16ICIkYnJhbmNoIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgcmVxdWVzdCBmb3JtYXQnICcKKworCXJtIC1mciBkb3duc3RyZWFtLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkb3duc3RyZWFtLmdpdCAmJgorCWNhdCA8PC1cRU9UID5leHBlY3QgJiYKKwlUaGUgZm9sbG93aW5nIGNoYW5nZXMgc2luY2UgY29tbWl0IE9CSkVDVF9OQU1FOgorCisJICBTVUJKRUNUIChEQVRFKQorCisJYXJlIGF2YWlsYWJsZSBpbiB0aGUgR2l0IHJlcG9zaXRvcnkgYXQ6CisKKwkgIFVSTCBCUkFOQ0gKKworCWZvciB5b3UgdG8gZmV0Y2ggY2hhbmdlcyB1cCB0byBPQkpFQ1RfTkFNRToKKworCSAgU1VCSkVDVCAoREFURSkKKworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlWRVJTSU9OCisKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0hPUlRMT0cKKworCURJRkZTVEFUCisJRU9UCisJKAorCQljZCBsb2NhbCAmJgorCQlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCQlnaXQgbWVyZ2UgLS1mZi1vbmx5IG1hc3RlciAmJgorCQlnaXQgcHVzaCBvcmlnaW4gdGFncy9mdWxsICYmCisJCWdpdCByZXF1ZXN0LXB1bGwgaW5pdGlhbCAiJGRvd25zdHJlYW1fdXJsIiB0YWdzL2Z1bGwgPi4uL3JlcXVlc3QKKwkpICYmCisJPHJlcXVlc3Qgc2VkIC1uZiBmdXp6LnNlZCA+cmVxdWVzdC5mdXp6eSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgcmVxdWVzdC5mdXp6eSAmJgorCisJKAorCQljZCBsb2NhbCAmJgorCQlnaXQgcmVxdWVzdC1wdWxsIGluaXRpYWwgIiRkb3duc3RyZWFtX3VybCIgdGFncy9mdWxsOnJlZnMvdGFncy9mdWxsCisJKSA+cmVxdWVzdCAmJgorCXNlZCAtbmYgZnV6ei5zZWQgPHJlcXVlc3QgPnJlcXVlc3QuZnV6enkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IHJlcXVlc3QuZnV6enkgJiYKKworCSgKKwkJY2QgbG9jYWwgJiYKKwkJZ2l0IHJlcXVlc3QtcHVsbCBpbml0aWFsICIkZG93bnN0cmVhbV91cmwiIGZ1bGwKKwkpID5yZXF1ZXN0ICYmCisJZ3JlcCAiIHRhZ3MvZnVsbFwkIiByZXF1ZXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcXVlc3QtcHVsbCBpZ25vcmVzIE9QVElPTlNfS0VFUERBU0hEQVNIIHBvaXNvbicgJworCisJKAorCQljZCBsb2NhbCAmJgorCQlPUFRJT05TX0tFRVBEQVNIREFTSD1ZZXMgJiYKKwkJZXhwb3J0IE9QVElPTlNfS0VFUERBU0hEQVNIICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgbWFzdGVyICYmCisJCWdpdCBwdXNoIG9yaWdpbiBtYXN0ZXI6Zm9yLXVwc3RyZWFtICYmCisJCWdpdCByZXF1ZXN0LXB1bGwgLS0gaW5pdGlhbCAiJGRvd25zdHJlYW1fdXJsIiBtYXN0ZXI6Zm9yLXVwc3RyZWFtID4uLi9yZXF1ZXN0CisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcXVlc3QtcHVsbCBxdW90ZXMgcmVnZXggbWV0YWNoYXJhY3RlcnMgcHJvcGVybHknICcKKworCXJtIC1mciBkb3duc3RyZWFtLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkb3duc3RyZWFtLmdpdCAmJgorCSgKKwkJY2QgbG9jYWwgJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBtYXN0ZXIgJiYKKwkJZ2l0IHRhZyAtbXJlbGVhc2UgdjIuMCAmJgorCQlnaXQgcHVzaCBvcmlnaW4gcmVmcy90YWdzL3YyLjA6cmVmcy90YWdzL3YyLTAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcXVlc3QtcHVsbCBpbml0aWFsICIkZG93bnN0cmVhbV91cmwiIHRhZ3MvdjIuMCBcCisJCQkyPi4uL2VycgorCSkgJiYKKwlncmVwICJObyBtYXRjaCBmb3IgY29tbWl0IC4qIiBlcnIgJiYKKwlncmVwICJBcmUgeW91IHN1cmUgeW91IHB1c2hlZCIgZXJyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCByZXF1ZXN0IHdpdGggbWlzbWF0Y2hlZCBvYmplY3QnICcKKworCXJtIC1mciBkb3duc3RyZWFtLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkb3duc3RyZWFtLmdpdCAmJgorCSgKKwkJY2QgbG9jYWwgJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIEhFQUQ6cmVmcy90YWdzL2Z1bGwgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcXVlc3QtcHVsbCBpbml0aWFsICIkZG93bnN0cmVhbV91cmwiIHRhZ3MvZnVsbCBcCisJCQkyPi4uL2VycgorCSkgJiYKKwlncmVwICJwb2ludHMgdG8gYSBkaWZmZXJlbnQgb2JqZWN0IiBlcnIgJiYKKwlncmVwICJBcmUgeW91IHN1cmUgeW91IHB1c2hlZCIgZXJyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCByZXF1ZXN0IHdpdGggc3RhbGUgb2JqZWN0JyAnCisKKwlybSAtZnIgZG93bnN0cmVhbS5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZG93bnN0cmVhbS5naXQgJiYKKwkoCisJCWNkIGxvY2FsICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgbWFzdGVyICYmCisJCWdpdCBwdXNoIG9yaWdpbiByZWZzL3RhZ3MvZnVsbCAmJgorCQlnaXQgdGFnIC1mIC1tIlRoaXJ0eS1vbmUgZGF5cyIgZnVsbCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmVxdWVzdC1wdWxsIGluaXRpYWwgIiRkb3duc3RyZWFtX3VybCIgdGFncy9mdWxsIFwKKwkJCTI+Li4vZXJyCisJKSAmJgorCWdyZXAgInBvaW50cyB0byBhIGRpZmZlcmVudCBvYmplY3QiIGVyciAmJgorCWdyZXAgIkFyZSB5b3Ugc3VyZSB5b3UgcHVzaGVkIiBlcnIKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUyMDAtdXBkYXRlLXNlcnZlci1pbmZvLnNoIGIvdC90NTIwMC11cGRhdGUtc2VydmVyLWluZm8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjFhNThlZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUyMDAtdXBkYXRlLXNlcnZlci1pbmZvLnNoCkBAIC0wLDAgKzEsNDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdCB1cGRhdGUtc2VydmVyLWluZm8nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJ3Rlc3RfY29tbWl0IGZpbGUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBpbmZvL3JlZnMnICcKKwlnaXQgdXBkYXRlLXNlcnZlci1pbmZvICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9pbmZvL3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZ5IGFuZCBzdG9yZSBtdGltZScgJworCXRlc3QtdG9vbCBjaG10aW1lID0wIC5naXQvaW5mby9yZWZzICYmCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLmdpdC9pbmZvL3JlZnMgPmEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mby9yZWZzIGlzIG5vdCBuZWVkbGVzc2x5IG92ZXJ3cml0dGVuJyAnCisJZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC5naXQvaW5mby9yZWZzID5iICYmCisJdGVzdF9jbXAgYSBiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8vcmVmcyBjYW4gYmUgZm9yY2VkIHRvIHVwZGF0ZScgJworCWdpdCB1cGRhdGUtc2VydmVyLWluZm8gLWYgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCAuZ2l0L2luZm8vcmVmcyA+YiAmJgorCSEgdGVzdF9jbXAgYSBiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8vcmVmcyB1cGRhdGVzIHdoZW4gY2hhbmdlcyBhcmUgbWFkZScgJworCXRlc3QtdG9vbCBjaG10aW1lID0wIC5naXQvaW5mby9yZWZzICYmCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLmdpdC9pbmZvL3JlZnMgPmIgJiYKKwl0ZXN0X2NtcCBhIGIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2ZvbyBIRUFEICYmCisJZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC5naXQvaW5mby9yZWZzID5iICYmCisJISB0ZXN0X2NtcCBhIGIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzAwLXBhY2stb2JqZWN0LnNoIGIvdC90NTMwMC1wYWNrLW9iamVjdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MTBhMDliCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTMwMC1wYWNrLW9iamVjdC5zaApAQCAtMCwwICsxLDQ5OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcGFjay1vYmplY3QKKworJworLiAuL3Rlc3QtbGliLnNoCisKK1RSQVNIPSQocHdkKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2V0dXAnIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCogJiYKKyAgICAgcGVybCAtZSAicHJpbnQgXCJhXCIgeCA0MDk2OyIgPiBhICYmCisgICAgIHBlcmwgLWUgInByaW50IFwiYlwiIHggNDA5NjsiID4gYiAmJgorICAgICBwZXJsIC1lICJwcmludCBcImNcIiB4IDQwOTY7IiA+IGMgJiYKKyAgICAgdGVzdC10b29sIGdlbnJhbmRvbSAic2VlZCBhIiAyMDk3MTUyID4gYV9iaWcgJiYKKyAgICAgdGVzdC10b29sIGdlbnJhbmRvbSAic2VlZCBiIiAyMDk3MTUyID4gYl9iaWcgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBhIGFfYmlnIGIgYl9iaWcgYyAmJgorICAgICBjYXQgYyA+ZCAmJiBlY2hvIGZvbyA+PmQgJiYgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBkICYmCisgICAgIHRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICAgY29tbWl0PSQoZ2l0IGNvbW1pdC10cmVlICR0cmVlIDwvZGV2L251bGwpICYmIHsKKwkgZWNobyAkdHJlZSAmJgorCSBlY2hvICRjb21taXQgJiYKKwkgZ2l0IGxzLXRyZWUgJHRyZWUgfCBzZWQgLWUgInMvLiogXFwoWzAtOWEtZl0qXFwpCS4qL1xcMS8iCisgICAgIH0gPm9iai1saXN0ICYmIHsKKwkgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLXAgJGNvbW1pdCAmJgorCSB3aGlsZSByZWFkIG9iamVjdAorCSBkbworCSAgICB0PSQoZ2l0IGNhdC1maWxlIC10ICRvYmplY3QpICYmCisJICAgIGdpdCBjYXQtZmlsZSAkdCAkb2JqZWN0IHx8IHJldHVybiAxCisJIGRvbmUgPG9iai1saXN0CisgICAgIH0gPmV4cGVjdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3BhY2sgd2l0aG91dCBkZWx0YScgXAorICAgICdwYWNrbmFtZV8xPSQoZ2l0IHBhY2stb2JqZWN0cyAtLXdpbmRvdz0wIHRlc3QtMSA8b2JqLWxpc3QpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncGFjay1vYmplY3RzIHdpdGggYm9ndXMgYXJndW1lbnRzJyBcCisgICAgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBwYWNrLW9iamVjdHMgLS13aW5kb3c9MCB0ZXN0LTEgYmxhaCBibGFoIDxvYmotbGlzdCcKKworcm0gLWZyIC5naXQyCitta2RpciAuZ2l0MgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndW5wYWNrIHdpdGhvdXQgZGVsdGEnIFwKKyAgICAiR0lUX09CSkVDVF9ESVJFQ1RPUlk9LmdpdDIvb2JqZWN0cyAmJgorICAgICBleHBvcnQgR0lUX09CSkVDVF9ESVJFQ1RPUlkgJiYKKyAgICAgZ2l0IGluaXQgJiYKKyAgICAgZ2l0IHVucGFjay1vYmplY3RzIC1uIDx0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrICYmCisgICAgIGdpdCB1bnBhY2stb2JqZWN0cyA8dGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayIKKwordW5zZXQgR0lUX09CSkVDVF9ESVJFQ1RPUlkKK2NkICIkVFJBU0gvLmdpdDIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVjayB1bnBhY2sgd2l0aG91dCBkZWx0YScgXAorICAgICcoY2QgLi4vLmdpdCAmJiBmaW5kIG9iamVjdHMgLXR5cGUgZiAtcHJpbnQpIHwKKyAgICAgd2hpbGUgcmVhZCBwYXRoCisgICAgIGRvCisgICAgICAgICBjbXAgJHBhdGggLi4vLmdpdC8kcGF0aCB8fCB7CisJICAgICBlY2hvICRwYXRoIGRpZmZlcnMuCisJICAgICByZXR1cm4gMQorCSB9CisgICAgIGRvbmUnCitjZCAiJFRSQVNIIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncGFjayB3aXRoIFJFRl9ERUxUQScgXAorICAgICdwd2QgJiYKKyAgICAgcGFja25hbWVfMj0kKGdpdCBwYWNrLW9iamVjdHMgdGVzdC0yIDxvYmotbGlzdCknCisKK3JtIC1mciAuZ2l0MgorbWtkaXIgLmdpdDIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3VucGFjayB3aXRoIFJFRl9ERUxUQScgXAorICAgICdHSVRfT0JKRUNUX0RJUkVDVE9SWT0uZ2l0Mi9vYmplY3RzICYmCisgICAgIGV4cG9ydCBHSVRfT0JKRUNUX0RJUkVDVE9SWSAmJgorICAgICBnaXQgaW5pdCAmJgorICAgICBnaXQgdW5wYWNrLW9iamVjdHMgLW4gPHRlc3QtMi0ke3BhY2tuYW1lXzJ9LnBhY2sgJiYKKyAgICAgZ2l0IHVucGFjay1vYmplY3RzIDx0ZXN0LTItJHtwYWNrbmFtZV8yfS5wYWNrJworCit1bnNldCBHSVRfT0JKRUNUX0RJUkVDVE9SWQorY2QgIiRUUkFTSC8uZ2l0MiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVjayB1bnBhY2sgd2l0aCBSRUZfREVMVEEnIFwKKyAgICAnKGNkIC4uLy5naXQgJiYgZmluZCBvYmplY3RzIC10eXBlIGYgLXByaW50KSB8CisgICAgIHdoaWxlIHJlYWQgcGF0aAorICAgICBkbworICAgICAgICAgY21wICRwYXRoIC4uLy5naXQvJHBhdGggfHwgeworCSAgICAgZWNobyAkcGF0aCBkaWZmZXJzLgorCSAgICAgcmV0dXJuIDEKKwkgfQorICAgICBkb25lJworY2QgIiRUUkFTSCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3BhY2sgd2l0aCBPRlNfREVMVEEnIFwKKyAgICAncHdkICYmCisgICAgIHBhY2tuYW1lXzM9JChnaXQgcGFjay1vYmplY3RzIC0tZGVsdGEtYmFzZS1vZmZzZXQgdGVzdC0zIDxvYmotbGlzdCknCisKK3JtIC1mciAuZ2l0MgorbWtkaXIgLmdpdDIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3VucGFjayB3aXRoIE9GU19ERUxUQScgXAorICAgICdHSVRfT0JKRUNUX0RJUkVDVE9SWT0uZ2l0Mi9vYmplY3RzICYmCisgICAgIGV4cG9ydCBHSVRfT0JKRUNUX0RJUkVDVE9SWSAmJgorICAgICBnaXQgaW5pdCAmJgorICAgICBnaXQgdW5wYWNrLW9iamVjdHMgLW4gPHRlc3QtMy0ke3BhY2tuYW1lXzN9LnBhY2sgJiYKKyAgICAgZ2l0IHVucGFjay1vYmplY3RzIDx0ZXN0LTMtJHtwYWNrbmFtZV8zfS5wYWNrJworCit1bnNldCBHSVRfT0JKRUNUX0RJUkVDVE9SWQorY2QgIiRUUkFTSC8uZ2l0MiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVjayB1bnBhY2sgd2l0aCBPRlNfREVMVEEnIFwKKyAgICAnKGNkIC4uLy5naXQgJiYgZmluZCBvYmplY3RzIC10eXBlIGYgLXByaW50KSB8CisgICAgIHdoaWxlIHJlYWQgcGF0aAorICAgICBkbworICAgICAgICAgY21wICRwYXRoIC4uLy5naXQvJHBhdGggfHwgeworCSAgICAgZWNobyAkcGF0aCBkaWZmZXJzLgorCSAgICAgcmV0dXJuIDEKKwkgfQorICAgICBkb25lJworY2QgIiRUUkFTSCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGFyZSBkZWx0YSBmbGF2b3JzJyAnCisJcGVybCAtZSAnXCcnCisJCWRlZmluZWQoJF8gPSAtcyAkXykgb3IgZGllIGZvciBAQVJHVjsKKwkJZXhpdCAxIGlmICRBUkdWWzBdIDw9ICRBUkdWWzFdOworCSdcJycgdGVzdC0yLSRwYWNrbmFtZV8yLnBhY2sgdGVzdC0zLSRwYWNrbmFtZV8zLnBhY2sKKycKKworcm0gLWZyIC5naXQyCitta2RpciAuZ2l0MgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndXNlIHBhY2tlZCBvYmplY3RzJyBcCisgICAgJ0dJVF9PQkpFQ1RfRElSRUNUT1JZPS5naXQyL29iamVjdHMgJiYKKyAgICAgZXhwb3J0IEdJVF9PQkpFQ1RfRElSRUNUT1JZICYmCisgICAgIGdpdCBpbml0ICYmCisgICAgIGNwIHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgdGVzdC0xLSR7cGFja25hbWVfMX0uaWR4IC5naXQyL29iamVjdHMvcGFjayAmJiB7CisJIGdpdCBkaWZmLXRyZWUgLS1yb290IC1wICRjb21taXQgJiYKKwkgd2hpbGUgcmVhZCBvYmplY3QKKwkgZG8KKwkgICAgdD0kKGdpdCBjYXQtZmlsZSAtdCAkb2JqZWN0KSAmJgorCSAgICBnaXQgY2F0LWZpbGUgJHQgJG9iamVjdCB8fCByZXR1cm4gMQorCSBkb25lIDxvYmotbGlzdAorICAgIH0gPmN1cnJlbnQgJiYKKyAgICBjbXAgZXhwZWN0IGN1cnJlbnQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd1c2UgcGFja2VkIGRlbHRpZmllZCAoUkVGX0RFTFRBKSBvYmplY3RzJyBcCisgICAgJ0dJVF9PQkpFQ1RfRElSRUNUT1JZPS5naXQyL29iamVjdHMgJiYKKyAgICAgZXhwb3J0IEdJVF9PQkpFQ1RfRElSRUNUT1JZICYmCisgICAgIHJtIC1mIC5naXQyL29iamVjdHMvcGFjay90ZXN0LSogJiYKKyAgICAgY3AgdGVzdC0yLSR7cGFja25hbWVfMn0ucGFjayB0ZXN0LTItJHtwYWNrbmFtZV8yfS5pZHggLmdpdDIvb2JqZWN0cy9wYWNrICYmIHsKKwkgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLXAgJGNvbW1pdCAmJgorCSB3aGlsZSByZWFkIG9iamVjdAorCSBkbworCSAgICB0PSQoZ2l0IGNhdC1maWxlIC10ICRvYmplY3QpICYmCisJICAgIGdpdCBjYXQtZmlsZSAkdCAkb2JqZWN0IHx8IHJldHVybiAxCisJIGRvbmUgPG9iai1saXN0CisgICAgfSA+Y3VycmVudCAmJgorICAgIGNtcCBleHBlY3QgY3VycmVudCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3VzZSBwYWNrZWQgZGVsdGlmaWVkIChPRlNfREVMVEEpIG9iamVjdHMnIFwKKyAgICAnR0lUX09CSkVDVF9ESVJFQ1RPUlk9LmdpdDIvb2JqZWN0cyAmJgorICAgICBleHBvcnQgR0lUX09CSkVDVF9ESVJFQ1RPUlkgJiYKKyAgICAgcm0gLWYgLmdpdDIvb2JqZWN0cy9wYWNrL3Rlc3QtKiAmJgorICAgICBjcCB0ZXN0LTMtJHtwYWNrbmFtZV8zfS5wYWNrIHRlc3QtMy0ke3BhY2tuYW1lXzN9LmlkeCAuZ2l0Mi9vYmplY3RzL3BhY2sgJiYgeworCSBnaXQgZGlmZi10cmVlIC0tcm9vdCAtcCAkY29tbWl0ICYmCisJIHdoaWxlIHJlYWQgb2JqZWN0CisJIGRvCisJICAgIHQ9JChnaXQgY2F0LWZpbGUgLXQgJG9iamVjdCkgJiYKKwkgICAgZ2l0IGNhdC1maWxlICR0ICRvYmplY3QgfHwgcmV0dXJuIDEKKwkgZG9uZSA8b2JqLWxpc3QKKyAgICB9ID5jdXJyZW50ICYmCisgICAgY21wIGV4cGVjdCBjdXJyZW50JworCit1bnNldCBHSVRfT0JKRUNUX0RJUkVDVE9SWQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdXJ2aXZlIG1pc3Npbmcgb2JqZWN0cy9wYWNrIGRpcmVjdG9yeScgJworCSgKKwkJcm0gLWZyIG1pc3NpbmctcGFjayAmJgorCQlta2RpciBtaXNzaW5nLXBhY2sgJiYKKwkJY2QgbWlzc2luZy1wYWNrICYmCisJCWdpdCBpbml0ICYmCisJCUdPUD0uZ2l0L29iamVjdHMvcGFjayAmJgorCQlybSAtZnIgJEdPUCAmJgorCQlnaXQgaW5kZXgtcGFjayAtLXN0ZGluIC0ta2VlcD10ZXN0IDwuLi90ZXN0LTMtJHtwYWNrbmFtZV8zfS5wYWNrICYmCisJCXRlc3QgLWYgJEdPUC9wYWNrLSR7cGFja25hbWVfM30ucGFjayAmJgorCQljbXAgJEdPUC9wYWNrLSR7cGFja25hbWVfM30ucGFjayAuLi90ZXN0LTMtJHtwYWNrbmFtZV8zfS5wYWNrICYmCisJCXRlc3QgLWYgJEdPUC9wYWNrLSR7cGFja25hbWVfM30uaWR4ICYmCisJCWNtcCAkR09QL3BhY2stJHtwYWNrbmFtZV8zfS5pZHggLi4vdGVzdC0zLSR7cGFja25hbWVfM30uaWR4ICYmCisJCXRlc3QgLWYgJEdPUC9wYWNrLSR7cGFja25hbWVfM30ua2VlcAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeSBwYWNrJyBcCisgICAgJ2dpdCB2ZXJpZnktcGFjawl0ZXN0LTEtJHtwYWNrbmFtZV8xfS5pZHggXAorCQkJdGVzdC0yLSR7cGFja25hbWVfMn0uaWR4IFwKKwkJCXRlc3QtMy0ke3BhY2tuYW1lXzN9LmlkeCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeSBwYWNrIC12JyBcCisgICAgJ2dpdCB2ZXJpZnktcGFjayAtdgl0ZXN0LTEtJHtwYWNrbmFtZV8xfS5pZHggXAorCQkJdGVzdC0yLSR7cGFja25hbWVfMn0uaWR4IFwKKwkJCXRlc3QtMy0ke3BhY2tuYW1lXzN9LmlkeCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeS1wYWNrIGNhdGNoZXMgbWlzbWF0Y2hlZCAuaWR4IGFuZCAucGFjayBmaWxlcycgXAorICAgICdjYXQgdGVzdC0xLSR7cGFja25hbWVfMX0uaWR4ID50ZXN0LTMuaWR4ICYmCisgICAgIGNhdCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5wYWNrID50ZXN0LTMucGFjayAmJgorICAgICBpZiBnaXQgdmVyaWZ5LXBhY2sgdGVzdC0zLmlkeAorICAgICB0aGVuIGZhbHNlCisgICAgIGVsc2UgOjsKKyAgICAgZmknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2ZXJpZnktcGFjayBjYXRjaGVzIGEgY29ycnVwdGVkIHBhY2sgc2lnbmF0dXJlJyBcCisgICAgJ2NhdCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrID50ZXN0LTMucGFjayAmJgorICAgICBlY2hvIHwgZGQgb2Y9dGVzdC0zLnBhY2sgY291bnQ9MSBicz0xIGNvbnY9bm90cnVuYyBzZWVrPTIgJiYKKyAgICAgaWYgZ2l0IHZlcmlmeS1wYWNrIHRlc3QtMy5pZHgKKyAgICAgdGhlbiBmYWxzZQorICAgICBlbHNlIDo7CisgICAgIGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5LXBhY2sgY2F0Y2hlcyBhIGNvcnJ1cHRlZCBwYWNrIHZlcnNpb24nIFwKKyAgICAnY2F0IHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgPnRlc3QtMy5wYWNrICYmCisgICAgIGVjaG8gfCBkZCBvZj10ZXN0LTMucGFjayBjb3VudD0xIGJzPTEgY29udj1ub3RydW5jIHNlZWs9NyAmJgorICAgICBpZiBnaXQgdmVyaWZ5LXBhY2sgdGVzdC0zLmlkeAorICAgICB0aGVuIGZhbHNlCisgICAgIGVsc2UgOjsKKyAgICAgZmknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2ZXJpZnktcGFjayBjYXRjaGVzIGEgY29ycnVwdGVkIHR5cGUvc2l6ZSBvZiB0aGUgMXN0IHBhY2tlZCBvYmplY3QgZGF0YScgXAorICAgICdjYXQgdGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayA+dGVzdC0zLnBhY2sgJiYKKyAgICAgZWNobyB8IGRkIG9mPXRlc3QtMy5wYWNrIGNvdW50PTEgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz0xMiAmJgorICAgICBpZiBnaXQgdmVyaWZ5LXBhY2sgdGVzdC0zLmlkeAorICAgICB0aGVuIGZhbHNlCisgICAgIGVsc2UgOjsKKyAgICAgZmknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2ZXJpZnktcGFjayBjYXRjaGVzIGEgY29ycnVwdGVkIHN1bSBvZiB0aGUgaW5kZXggZmlsZSBpdHNlbGYnIFwKKyAgICAnbD0kKHdjIC1jIDx0ZXN0LTMuaWR4KSAmJgorICAgICBsPSQoZXhwciAkbCAtIDIwKSAmJgorICAgICBjYXQgdGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayA+dGVzdC0zLnBhY2sgJiYKKyAgICAgcHJpbnRmICIlMjBzIiAiIiB8IGRkIG9mPXRlc3QtMy5pZHggY291bnQ9MjAgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz0kbCAmJgorICAgICBpZiBnaXQgdmVyaWZ5LXBhY2sgdGVzdC0zLnBhY2sKKyAgICAgdGhlbiBmYWxzZQorICAgICBlbHNlIDo7CisgICAgIGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYnVpbGQgcGFjayBpbmRleCBmb3IgYW4gZXhpc3RpbmcgcGFjaycgXAorICAgICdjYXQgdGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayA+dGVzdC0zLnBhY2sgJiYKKyAgICAgZ2l0IGluZGV4LXBhY2sgLW8gdG1wLmlkeCB0ZXN0LTMucGFjayAmJgorICAgICBjbXAgdG1wLmlkeCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5pZHggJiYKKworICAgICBnaXQgaW5kZXgtcGFjayB0ZXN0LTMucGFjayAmJgorICAgICBjbXAgdGVzdC0zLmlkeCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5pZHggJiYKKworICAgICBjYXQgdGVzdC0yLSR7cGFja25hbWVfMn0ucGFjayA+dGVzdC0zLnBhY2sgJiYKKyAgICAgZ2l0IGluZGV4LXBhY2sgLW8gdG1wLmlkeCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5wYWNrICYmCisgICAgIGNtcCB0bXAuaWR4IHRlc3QtMi0ke3BhY2tuYW1lXzJ9LmlkeCAmJgorCisgICAgIGdpdCBpbmRleC1wYWNrIHRlc3QtMy5wYWNrICYmCisgICAgIGNtcCB0ZXN0LTMuaWR4IHRlc3QtMi0ke3BhY2tuYW1lXzJ9LmlkeCAmJgorCisgICAgIGNhdCB0ZXN0LTMtJHtwYWNrbmFtZV8zfS5wYWNrID50ZXN0LTMucGFjayAmJgorICAgICBnaXQgaW5kZXgtcGFjayAtbyB0bXAuaWR4IHRlc3QtMy0ke3BhY2tuYW1lXzN9LnBhY2sgJiYKKyAgICAgY21wIHRtcC5pZHggdGVzdC0zLSR7cGFja25hbWVfM30uaWR4ICYmCisKKyAgICAgZ2l0IGluZGV4LXBhY2sgdGVzdC0zLnBhY2sgJiYKKyAgICAgY21wIHRlc3QtMy5pZHggdGVzdC0zLSR7cGFja25hbWVfM30uaWR4ICYmCisKKyAgICAgY2F0IHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgPnRlc3QtNC5wYWNrICYmCisgICAgIHJtIC1mIHRlc3QtNC5rZWVwICYmCisgICAgIGdpdCBpbmRleC1wYWNrIC0ta2VlcD13aHkgdGVzdC00LnBhY2sgJiYKKyAgICAgY21wIHRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCB0ZXN0LTQuaWR4ICYmCisgICAgIHRlc3QgLWYgdGVzdC00LmtlZXAgJiYKKworICAgICA6JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnBhY2tpbmcgd2l0aCAtLXN0cmljdCcgJworCisJZm9yIGogaW4gYSBiIGMgZCBlIGYgZworCWRvCisJCWZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDkKKwkJZG8KKwkJCW89JChlY2hvICRqJGkgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwkJCWVjaG8gIjEwMDY0NCAkbwkwICRqJGkiCisJCWRvbmUKKwlkb25lID5MSVNUICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxMSVNUICYmCisJTElTVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwloZWFkIC1uIDEwIExJU1QgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCUxJPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCXRhaWwgLW4gMTAgTElTVCB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJU1Q9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzICIkTElTVCIgIiRMSSIgIiRTVCIgPmFjdHVhbCAmJgorCVBBQ0s1PSQoIGdpdCBwYWNrLW9iamVjdHMgdGVzdC01IDxhY3R1YWwgKSAmJgorCVBBQ0s2PSQoICgKKwkJCWVjaG8gIiRMSVNUIgorCQkJZWNobyAiJExJIgorCQkJZWNobyAiJFNUIgorCQkgKSB8IGdpdCBwYWNrLW9iamVjdHMgdGVzdC02ICkgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHRlc3QtNSAmJgorCSgKKwkJY2QgdGVzdC01ICYmCisJCWdpdCB1bnBhY2stb2JqZWN0cyAtLXN0cmljdCA8Li4vdGVzdC01LSRQQUNLNS5wYWNrICYmCisJCWdpdCBscy10cmVlIC1yICRMSVNUICYmCisJCWdpdCBscy10cmVlIC1yICRMSSAmJgorCQlnaXQgbHMtdHJlZSAtciAkU1QKKwkpICYmCisJdGVzdF9jcmVhdGVfcmVwbyB0ZXN0LTYgJiYKKwkoCisJCSMgdHJlZS1vbmx5IGludG8gZW1wdHkgcmVwbyAtLSBtYW55IHVucmVhY2hhYmxlcworCQljZCB0ZXN0LTYgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVucGFjay1vYmplY3RzIC0tc3RyaWN0IDwuLi90ZXN0LTYtJFBBQ0s2LnBhY2sKKwkpICYmCisJKAorCQkjIGFscmVhZHkgcG9wdWxhdGVkIC0tIG5vIHVucmVhY2hhYmxlcworCQljZCB0ZXN0LTUgJiYKKwkJZ2l0IHVucGFjay1vYmplY3RzIC0tc3RyaWN0IDwuLi90ZXN0LTYtJFBBQ0s2LnBhY2sKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgd2l0aCAtLXN0cmljdCcgJworCisJZm9yIGogaW4gYSBiIGMgZCBlIGYgZworCWRvCisJCWZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDkKKwkJZG8KKwkJCW89JChlY2hvICRqJGkgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwkJCWVjaG8gIjEwMDY0NCAkbwkwICRqJGkiCisJCWRvbmUKKwlkb25lID5MSVNUICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxMSVNUICYmCisJTElTVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwloZWFkIC1uIDEwIExJU1QgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCUxJPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCXRhaWwgLW4gMTAgTElTVCB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJU1Q9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzICIkTElTVCIgIiRMSSIgIiRTVCIgPmFjdHVhbCAmJgorCVBBQ0s1PSQoIGdpdCBwYWNrLW9iamVjdHMgdGVzdC01IDxhY3R1YWwgKSAmJgorCVBBQ0s2PSQoICgKKwkJCWVjaG8gIiRMSVNUIgorCQkJZWNobyAiJExJIgorCQkJZWNobyAiJFNUIgorCQkgKSB8IGdpdCBwYWNrLW9iamVjdHMgdGVzdC02ICkgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHRlc3QtNyAmJgorCSgKKwkJY2QgdGVzdC03ICYmCisJCWdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IC0tc3RkaW4gPC4uL3Rlc3QtNS0kUEFDSzUucGFjayAmJgorCQlnaXQgbHMtdHJlZSAtciAkTElTVCAmJgorCQlnaXQgbHMtdHJlZSAtciAkTEkgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgJFNUCisJKSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gdGVzdC04ICYmCisJKAorCQkjIHRyZWUtb25seSBpbnRvIGVtcHR5IHJlcG8gLS0gbWFueSB1bnJlYWNoYWJsZXMKKwkJY2QgdGVzdC04ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IC0tc3RkaW4gPC4uL3Rlc3QtNi0kUEFDSzYucGFjaworCSkgJiYKKwkoCisJCSMgYWxyZWFkeSBwb3B1bGF0ZWQgLS0gbm8gdW5yZWFjaGFibGVzCisJCWNkIHRlc3QtNyAmJgorCQlnaXQgaW5kZXgtcGFjayAtLXN0cmljdCAtLXN0ZGluIDwuLi90ZXN0LTYtJFBBQ0s2LnBhY2sKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvbm9yIHBhY2sucGFja1NpemVMaW1pdCcgJworCWdpdCBjb25maWcgcGFjay5wYWNrU2l6ZUxpbWl0IDNtICYmCisJcGFja25hbWVfMTA9JChnaXQgcGFjay1vYmplY3RzIHRlc3QtMTAgPG9iai1saXN0KSAmJgorCXRlc3QgMiA9ICQobHMgdGVzdC0xMC0qLnBhY2sgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHJlc3VsdGluZyBwYWNrcycgJworCWdpdCB2ZXJpZnktcGFjayB0ZXN0LTEwLSoucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0b2xlcmF0ZSBwYWNrc2l6ZWxpbWl0IHNtYWxsZXIgdGhhbiBiaWdnZXN0IG9iamVjdCcgJworCWdpdCBjb25maWcgcGFjay5wYWNrU2l6ZUxpbWl0IDEgJiYKKwlwYWNrbmFtZV8xMT0kKGdpdCBwYWNrLW9iamVjdHMgdGVzdC0xMSA8b2JqLWxpc3QpICYmCisJdGVzdCA1ID0gJChscyB0ZXN0LTExLSoucGFjayB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgcmVzdWx0aW5nIHBhY2tzJyAnCisJZ2l0IHZlcmlmeS1wYWNrIHRlc3QtMTEtKi5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBwYWNrIGZvciBub24tcmVwbyB0ZXN0cycgJworCSMgbWFrZSBzdXJlIHdlIGhhdmUgYSBwYWNrIHdpdGggbm8gbWF0Y2hpbmcgaW5kZXggZmlsZQorCWNwIHRlc3QtMS0qLnBhY2sgZm9vLnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayAtLXN0ZGluIGNvbXBsYWlucyBvZiBub24tcmVwbycgJworCW5vbmdpdCB0ZXN0X211c3RfZmFpbCBnaXQgaW5kZXgtcGFjayAtLXN0ZGluIDxmb28ucGFjayAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG5vbi1yZXBvLy5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayA8cGFjaz4gd29ya3MgaW4gbm9uLXJlcG8nICcKKwlub25naXQgZ2l0IGluZGV4LXBhY2sgLi4vZm9vLnBhY2sgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28uaWR4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgLS1zdHJpY3QgPHBhY2s+IHdvcmtzIGluIG5vbi1yZXBvJyAnCisJcm0gLWYgZm9vLmlkeCAmJgorCW5vbmdpdCBnaXQgaW5kZXgtcGFjayAtLXN0cmljdCAuLi9mb28ucGFjayAmJgorCXRlc3RfcGF0aF9pc19maWxlIGZvby5pZHgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhUFRIUkVBRFMsQ19MT0NBTEVfT1VUUFVUICdpbmRleC1wYWNrIC0tdGhyZWFkcz1OIG9yIHBhY2sudGhyZWFkcz1OIHdhcm5zIHdoZW4gbm8gcHRocmVhZHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgaW5kZXgtcGFjayAtLXRocmVhZHM9MiAyPmVyciAmJgorCWdyZXAgXndhcm5pbmc6IGVyciA+d2FybmluZ3MgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHdhcm5pbmdzICYmCisJZ3JlcCAtRiAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHM9MiIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgcGFjay50aHJlYWRzPTIgaW5kZXgtcGFjayAyPmVyciAmJgorCWdyZXAgXndhcm5pbmc6IGVyciA+d2FybmluZ3MgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHdhcm5pbmdzICYmCisJZ3JlcCAtRiAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyBwYWNrLnRocmVhZHMiIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHBhY2sudGhyZWFkcz0yIGluZGV4LXBhY2sgLS10aHJlYWRzPTQgMj5lcnIgJiYKKwlncmVwIF53YXJuaW5nOiBlcnIgPndhcm5pbmdzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiB3YXJuaW5ncyAmJgorCWdyZXAgLUYgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzPTQiIGVyciAmJgorCWdyZXAgLUYgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgcGFjay50aHJlYWRzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhUFRIUkVBRFMsQ19MT0NBTEVfT1VUUFVUICdwYWNrLW9iamVjdHMgLS10aHJlYWRzPU4gb3IgcGFjay50aHJlYWRzPU4gd2FybnMgd2hlbiBubyBwdGhyZWFkcycgJworCWdpdCBwYWNrLW9iamVjdHMgLS10aHJlYWRzPTIgLS1zdGRvdXQgLS1hbGwgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+ZXJyICYmCisJZ3JlcCBed2FybmluZzogZXJyID53YXJuaW5ncyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgd2FybmluZ3MgJiYKKwlncmVwIC1GICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIC0tdGhyZWFkcyIgZXJyICYmCisKKwlnaXQgLWMgcGFjay50aHJlYWRzPTIgcGFjay1vYmplY3RzIC0tc3Rkb3V0IC0tYWxsIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPmVyciAmJgorCWdyZXAgXndhcm5pbmc6IGVyciA+d2FybmluZ3MgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHdhcm5pbmdzICYmCisJZ3JlcCAtRiAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyBwYWNrLnRocmVhZHMiIGVyciAmJgorCisJZ2l0IC1jIHBhY2sudGhyZWFkcz0yIHBhY2stb2JqZWN0cyAtLXRocmVhZHM9NCAtLXN0ZG91dCAtLWFsbCA8L2Rldi9udWxsID4vZGV2L251bGwgMj5lcnIgJiYKKwlncmVwIF53YXJuaW5nOiBlcnIgPndhcm5pbmdzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiB3YXJuaW5ncyAmJgorCWdyZXAgLUYgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIiBlcnIgJiYKKwlncmVwIC1GICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIHBhY2sudGhyZWFkcyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2stb2JqZWN0cyBpbiB0b28tbWFueS1wYWNrcyBtb2RlJyAnCisJR0lUX1RFU1RfRlVMTF9JTl9QQUNLX0FSUkFZPTEgZ2l0IHJlcGFjayAtYWQgJiYKKwlnaXQgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogZmFrZSBhIFNIQTEgaGFzaCBjb2xsaXNpb24nICcKKwlnaXQgaW5pdCBjb3JydXB0ICYmCisJKAorCQljZCBjb3JydXB0ICYmCisJCWxvbmdfYT0kKGdpdCBoYXNoLW9iamVjdCAtdyAuLi9hIHwgc2VkIC1lICJzIV4uLiEmLyEiKSAmJgorCQlsb25nX2I9JChnaXQgaGFzaC1vYmplY3QgLXcgLi4vYiB8IHNlZCAtZSAicyFeLi4hJi8hIikgJiYKKwkJdGVzdCAtZgkuZ2l0L29iamVjdHMvJGxvbmdfYiAmJgorCQljcCAtZgkuZ2l0L29iamVjdHMvJGxvbmdfYSBcCisJCQkuZ2l0L29iamVjdHMvJGxvbmdfYgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBzdXJlIGluZGV4LXBhY2sgZGV0ZWN0cyB0aGUgU0hBMSBjb2xsaXNpb24nICcKKwkoCisJCWNkIGNvcnJ1cHQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLW8gLi4vYmFkLmlkeCAuLi90ZXN0LTMucGFjayAyPm1zZyAmJgorCQl0ZXN0X2kxOG5ncmVwICJTSEExIENPTExJU0lPTiBGT1VORCIgbXNnCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIHN1cmUgaW5kZXgtcGFjayBkZXRlY3RzIHRoZSBTSEExIGNvbGxpc2lvbiAobGFyZ2UgYmxvYnMpJyAnCisJKAorCQljZCBjb3JydXB0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQ9MSBpbmRleC1wYWNrIC1vIC4uL2JhZC5pZHggLi4vdGVzdC0zLnBhY2sgMj5tc2cgJiYKKwkJdGVzdF9pMThuZ3JlcCAiU0hBMSBDT0xMSVNJT04gRk9VTkQiIG1zZworCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzAxLXNsaWRpbmctd2luZG93LnNoIGIvdC90NTMwMS1zbGlkaW5nLXdpbmRvdy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NmY5Nzk4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTMwMS1zbGlkaW5nLXdpbmRvdy5zaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IFNoYXduIFBlYXJjZQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdtbWFwIHNsaWRpbmcgd2luZG93IHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzZXR1cCcgXAorICAgICdybSAtZiAuZ2l0L2luZGV4KiAmJgorICAgICBmb3IgaSBpbiBhIGIgYworICAgICBkbworICAgICAgICAgZWNobyAkaSA+JGkgJiYKKwkgdGVzdC10b29sIGdlbnJhbmRvbSAiJGkiIDMyNzY4ID4+JGkgJiYKKyAgICAgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgJGkgfHwgcmV0dXJuIDEKKyAgICAgZG9uZSAmJgorICAgICBlY2hvIGQgPmQgJiYgY2F0IGMgPj5kICYmIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZCAmJgorICAgICB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisgICAgIGNvbW1pdDE9JChnaXQgY29tbWl0LXRyZWUgJHRyZWUgPC9kZXYvbnVsbCkgJiYKKyAgICAgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkY29tbWl0MSAmJgorICAgICBnaXQgcmVwYWNrIC1hIC1kICYmCisgICAgIHRlc3QgIiQoZ2l0IGNvdW50LW9iamVjdHMpIiA9ICIwIG9iamVjdHMsIDAga2lsb2J5dGVzIiAmJgorICAgICBwYWNrMT0kKGxzIC5naXQvb2JqZWN0cy9wYWNrLyoucGFjaykgJiYKKyAgICAgdGVzdCAtZiAiJHBhY2sxIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeS1wYWNrIC12LCBkZWZhdWx0cycgXAorICAgICdnaXQgdmVyaWZ5LXBhY2sgLXYgIiRwYWNrMSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2ZXJpZnktcGFjayAtdiwgcGFja2VkR2l0V2luZG93U2l6ZSA9PSAxIHBhZ2UnIFwKKyAgICAnZ2l0IGNvbmZpZyBjb3JlLnBhY2tlZEdpdFdpbmRvd1NpemUgNTEyICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAtdiAiJHBhY2sxIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeS1wYWNrIC12LCBwYWNrZWRHaXR7V2luZG93U2l6ZSxMaW1pdH0gPT0gMSBwYWdlJyBcCisgICAgJ2dpdCBjb25maWcgY29yZS5wYWNrZWRHaXRXaW5kb3dTaXplIDUxMiAmJgorICAgICBnaXQgY29uZmlnIGNvcmUucGFja2VkR2l0TGltaXQgNTEyICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAtdiAiJHBhY2sxIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3JlcGFjayAtYSAtZCwgcGFja2VkR2l0e1dpbmRvd1NpemUsTGltaXR9ID09IDEgcGFnZScgXAorICAgICdnaXQgY29uZmlnIGNvcmUucGFja2VkR2l0V2luZG93U2l6ZSA1MTIgJiYKKyAgICAgZ2l0IGNvbmZpZyBjb3JlLnBhY2tlZEdpdExpbWl0IDUxMiAmJgorICAgICBjb21taXQyPSQoZ2l0IGNvbW1pdC10cmVlICR0cmVlIC1wICRjb21taXQxIDwvZGV2L251bGwpICYmCisgICAgIGdpdCB1cGRhdGUtcmVmIEhFQUQgJGNvbW1pdDIgJiYKKyAgICAgZ2l0IHJlcGFjayAtYSAtZCAmJgorICAgICB0ZXN0ICIkKGdpdCBjb3VudC1vYmplY3RzKSIgPSAiMCBvYmplY3RzLCAwIGtpbG9ieXRlcyIgJiYKKyAgICAgcGFjazI9JChscyAuZ2l0L29iamVjdHMvcGFjay8qLnBhY2spICYmCisgICAgIHRlc3QgLWYgIiRwYWNrMiIgJiYKKyAgICAgdGVzdCAiJHBhY2sxIiBcIT0gIiRwYWNrMiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2ZXJpZnktcGFjayAtdiwgZGVmYXVsdHMnIFwKKyAgICAnZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUucGFja2VkR2l0V2luZG93U2l6ZSAmJgorICAgICBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5wYWNrZWRHaXRMaW1pdCAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgLXYgIiRwYWNrMiInCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwMi1wYWNrLWluZGV4LnNoIGIvdC90NTMwMi1wYWNrLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkMDdmMmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzAyLXBhY2staW5kZXguc2gKQEAgLTAsMCArMSwyNzMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgTmljb2xhcyBQaXRyZQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdwYWNrIGluZGV4IHdpdGggNjQtYml0IG9mZnNldHMgYW5kIG9iamVjdCBDUkMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKyAgICAgdGVzdF9vaWRfaW5pdCAmJgorICAgICByYXdzej0kKHRlc3Rfb2lkIHJhd3N6KSAmJgorICAgICBybSAtcmYgLmdpdCAmJgorICAgICBnaXQgaW5pdCAmJgorICAgICBnaXQgY29uZmlnIHBhY2sudGhyZWFkcyAxICYmCisgICAgIGk9MSAmJgorICAgICB3aGlsZSB0ZXN0ICRpIC1sZSAxMDAKKyAgICAgZG8KKyAgICAgICAgIGlpaT0kKHByaW50ZiAnJTAzaScgJGkpCisJIHRlc3QtdG9vbCBnZW5yYW5kb20gImJhciIgMjAwID4gd2lkZV9kZWx0YV8kaWlpICYmCisJIHRlc3QtdG9vbCBnZW5yYW5kb20gImJheiAkaWlpIiA1MCA+PiB3aWRlX2RlbHRhXyRpaWkgJiYKKwkgdGVzdC10b29sIGdlbnJhbmRvbSAiZm9vIiRpIDEwMCA+IGRlZXBfZGVsdGFfJGlpaSAmJgorCSB0ZXN0LXRvb2wgZ2VucmFuZG9tICJmb28iJChleHByICRpICsgMSkgMTAwID4+IGRlZXBfZGVsdGFfJGlpaSAmJgorCSB0ZXN0LXRvb2wgZ2VucmFuZG9tICJmb28iJChleHByICRpICsgMikgMTAwID4+IGRlZXBfZGVsdGFfJGlpaSAmJgorICAgICAgICAgZWNobyAkaWlpID5maWxlXyRpaWkgJiYKKwkgdGVzdC10b29sIGdlbnJhbmRvbSAiJGlpaSIgODE5MiA+PmZpbGVfJGlpaSAmJgorICAgICAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlXyRpaWkgZGVlcF9kZWx0YV8kaWlpIHdpZGVfZGVsdGFfJGlpaSAmJgorICAgICAgICAgaT0kKGV4cHIgJGkgKyAxKSB8fCByZXR1cm4gMQorICAgICBkb25lICYmCisgICAgIHsgZWNobyAxMDEgJiYgdGVzdC10b29sIGdlbnJhbmRvbSAxMDAgODE5MjsgfSA+ZmlsZV8xMDEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlXzEwMSAmJgorICAgICB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisgICAgIGNvbW1pdD0kKGdpdCBjb21taXQtdHJlZSAkdHJlZSA8L2Rldi9udWxsKSAmJiB7CisJIGVjaG8gJHRyZWUgJiYKKwkgZ2l0IGxzLXRyZWUgJHRyZWUgfCBzZWQgLWUgInMvLiogXFwoWzAtOWEtZl0qXFwpCS4qL1xcMS8iCisgICAgIH0gPm9iai1saXN0ICYmCisgICAgIGdpdCB1cGRhdGUtcmVmIEhFQUQgJGNvbW1pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncGFjay1vYmplY3RzIHdpdGggaW5kZXggdmVyc2lvbiAxJyBcCisgICAgJ3BhY2sxPSQoZ2l0IHBhY2stb2JqZWN0cyAtLWluZGV4LXZlcnNpb249MSB0ZXN0LTEgPG9iai1saXN0KSAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgLXYgInRlc3QtMS0ke3BhY2sxfS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3BhY2stb2JqZWN0cyB3aXRoIGluZGV4IHZlcnNpb24gMicgXAorICAgICdwYWNrMj0kKGdpdCBwYWNrLW9iamVjdHMgLS1pbmRleC12ZXJzaW9uPTIgdGVzdC0yIDxvYmotbGlzdCkgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrIC12ICJ0ZXN0LTItJHtwYWNrMn0ucGFjayInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdib3RoIHBhY2tzIHNob3VsZCBiZSBpZGVudGljYWwnIFwKKyAgICAnY21wICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayIgInRlc3QtMi0ke3BhY2syfS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2luZGV4IHYxIGFuZCBpbmRleCB2MiBzaG91bGQgYmUgZGlmZmVyZW50JyBcCisgICAgJyEgY21wICJ0ZXN0LTEtJHtwYWNrMX0uaWR4IiAidGVzdC0yLSR7cGFjazJ9LmlkeCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbmRleC1wYWNrIHdpdGggaW5kZXggdmVyc2lvbiAxJyBcCisgICAgJ2dpdCBpbmRleC1wYWNrIC0taW5kZXgtdmVyc2lvbj0xIC1vIDEuaWR4ICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbmRleC1wYWNrIHdpdGggaW5kZXggdmVyc2lvbiAyJyBcCisgICAgJ2dpdCBpbmRleC1wYWNrIC0taW5kZXgtdmVyc2lvbj0yIC1vIDIuaWR4ICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbmRleC1wYWNrIHJlc3VsdHMgc2hvdWxkIG1hdGNoIHBhY2stb2JqZWN0cyBvbmVzJyBcCisgICAgJ2NtcCAidGVzdC0xLSR7cGFjazF9LmlkeCIgIjEuaWR4IiAmJgorICAgICBjbXAgInRlc3QtMi0ke3BhY2syfS5pZHgiICIyLmlkeCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgLS12ZXJpZnkgb24gaW5kZXggdmVyc2lvbiAxJyAnCisJZ2l0IGluZGV4LXBhY2sgLS12ZXJpZnkgInRlc3QtMS0ke3BhY2sxfS5wYWNrIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIC0tdmVyaWZ5IG9uIGluZGV4IHZlcnNpb24gMicgJworCWdpdCBpbmRleC1wYWNrIC0tdmVyaWZ5ICJ0ZXN0LTItJHtwYWNrMn0ucGFjayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3BhY2stb2JqZWN0cyAtLWluZGV4LXZlcnNpb249MiwgaXMgbm90IGFjY2VwdGVkJyBcCisgICAgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBwYWNrLW9iamVjdHMgLS1pbmRleC12ZXJzaW9uPTIsIHRlc3QtMyA8b2JqLWxpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbmRleCB2MjogZm9yY2Ugc29tZSA2NC1iaXQgb2Zmc2V0cyB3aXRoIHBhY2stb2JqZWN0cycgXAorICAgICdwYWNrMz0kKGdpdCBwYWNrLW9iamVjdHMgLS1pbmRleC12ZXJzaW9uPTIsMHg0MDAwMCB0ZXN0LTMgPG9iai1saXN0KScKKworaWYgbXNnPSQoZ2l0IHZlcmlmeS1wYWNrIC12ICJ0ZXN0LTMtJHtwYWNrM30ucGFjayIgMj4mMSkgfHwKKwkhIChlY2hvICIkbXNnIiB8IGdyZXAgInBhY2sgdG9vIGxhcmdlIC4qIG9mZl90IikKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgT0ZGNjRfVAorZWxzZQorCXNheSAiIyBza2lwcGluZyB0ZXN0cyBjb25jZXJuaW5nIDY0LWJpdCBvZmZzZXRzIgorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBPRkY2NF9UIFwKKyAgICAnaW5kZXggdjI6IHZlcmlmeSBhIHBhY2sgd2l0aCBzb21lIDY0LWJpdCBvZmZzZXRzJyBcCisgICAgJ2dpdCB2ZXJpZnktcGFjayAtdiAidGVzdC0zLSR7cGFjazN9LnBhY2siJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE9GRjY0X1QgXAorICAgICc2NC1iaXQgb2Zmc2V0czogc2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHByZXZpb3VzIGluZGV4IHYyIHJlc3VsdHMnIFwKKyAgICAnISBjbXAgInRlc3QtMi0ke3BhY2syfS5pZHgiICJ0ZXN0LTMtJHtwYWNrM30uaWR4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBPRkY2NF9UIFwKKyAgICAnaW5kZXggdjI6IGZvcmNlIHNvbWUgNjQtYml0IG9mZnNldHMgd2l0aCBpbmRleC1wYWNrJyBcCisgICAgJ2dpdCBpbmRleC1wYWNrIC0taW5kZXgtdmVyc2lvbj0yLDB4NDAwMDAgLW8gMy5pZHggInRlc3QtMS0ke3BhY2sxfS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBPRkY2NF9UIFwKKyAgICAnNjQtYml0IG9mZnNldHM6IGluZGV4LXBhY2sgcmVzdWx0IHNob3VsZCBtYXRjaCBwYWNrLW9iamVjdHMgb25lJyBcCisgICAgJ2NtcCAidGVzdC0zLSR7cGFjazN9LmlkeCIgIjMuaWR4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBPRkY2NF9UICdpbmRleC1wYWNrIC0tdmVyaWZ5IG9uIDY0LWJpdCBvZmZzZXQgdjIgKGNoZWF0KScgJworCSMgVGhpcyBjaGVhdHMgYnkga25vd2luZyB3aGljaCBsb3dlciBvZmZzZXQgc2hvdWxkIHN0aWxsIGJlIGVuY29kZWQKKwkjIGluIDY0LWJpdCByZXByZXNlbnRhdGlvbi4KKwlnaXQgaW5kZXgtcGFjayAtLXZlcmlmeSAtLWluZGV4LXZlcnNpb249MiwweDQwMDAwICJ0ZXN0LTMtJHtwYWNrM30ucGFjayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBPRkY2NF9UICdpbmRleC1wYWNrIC0tdmVyaWZ5IG9uIDY0LWJpdCBvZmZzZXQgdjInICcKKwlnaXQgaW5kZXgtcGFjayAtLXZlcmlmeSAidGVzdC0zLSR7cGFjazN9LnBhY2siCisnCisKKyMgcmV0dXJucyB0aGUgb2JqZWN0IG51bWJlciBmb3IgZ2l2ZW4gb2JqZWN0IGluIGdpdmVuIHBhY2sgaW5kZXgKK2luZGV4X29ial9ucigpCit7CisgICAgaWR4X2ZpbGU9JDEKKyAgICBvYmplY3Rfc2hhMT0kMgorICAgIG5yPTAKKyAgICBnaXQgc2hvdy1pbmRleCA8ICRpZHhfZmlsZSB8CisgICAgd2hpbGUgcmVhZCBvZmZzIHNoYTEgZXh0cmEKKyAgICBkbworICAgICAgbnI9JCgoJG5yICsgMSkpCisgICAgICB0ZXN0ICIkc2hhMSIgPSAiJG9iamVjdF9zaGExIiB8fCBjb250aW51ZQorICAgICAgZWNobyAiJCgoJG5yIC0gMSkpIgorICAgICAgYnJlYWsKKyAgICBkb25lCit9CisKKyMgcmV0dXJucyB0aGUgcGFjayBvZmZzZXQgZm9yIGdpdmVuIG9iamVjdCBhcyBmb3VuZCBpbiBnaXZlbiBwYWNrIGluZGV4CitpbmRleF9vYmpfb2Zmc2V0KCkKK3sKKyAgICBpZHhfZmlsZT0kMQorICAgIG9iamVjdF9zaGExPSQyCisgICAgZ2l0IHNob3ctaW5kZXggPCAkaWR4X2ZpbGUgfCBncmVwICRvYmplY3Rfc2hhMSB8CisgICAgKCByZWFkIG9mZnMgZXh0cmEgJiYgZWNobyAiJG9mZnMiICkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2MV0gMSkgc3RyZWFtIHBhY2sgdG8gcmVwb3NpdG9yeScgXAorICAgICdnaXQgaW5kZXgtcGFjayAtLWluZGV4LXZlcnNpb249MSAtLXN0ZGluIDwgInRlc3QtMS0ke3BhY2sxfS5wYWNrIiAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGdpdCBjb3VudC1vYmplY3RzIHwgKCByZWFkIG5yIHJlc3QgJiYgdGVzdCAiJG5yIiAtZXEgMSApICYmCisgICAgIGNtcCAidGVzdC0xLSR7cGFjazF9LnBhY2siICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LnBhY2siICYmCisgICAgIGNtcCAidGVzdC0xLSR7cGFjazF9LmlkeCIgICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LmlkeCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjFdIDIpIGNyZWF0ZSBhIHN0ZWFsdGggY29ycnVwdGlvbiBpbiBhIGRlbHRhIGJhc2UgcmVmZXJlbmNlJyBcCisgICAgJyMgVGhpcyB0ZXN0IGFzc3VtZXMgZmlsZV8xMDEgaXMgYSBkZWx0YSBzbWFsbGVyIHRoYW4gMTYgYnl0ZXMuCisgICAgICMgSXQgc2hvdWxkIGJlIGFnYWluc3QgZmlsZV8xMDAgYnV0IHdlIHN1YnN0aXR1dGUgaXRzIGJhc2UgZm9yIGZpbGVfMDk5CisgICAgIHNoYTFfMTAxPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGVfMTAxKSAmJgorICAgICBzaGExXzA5OT0kKGdpdCBoYXNoLW9iamVjdCBmaWxlXzA5OSkgJiYKKyAgICAgb2Zmc18xMDE9JChpbmRleF9vYmpfb2Zmc2V0IDEuaWR4ICRzaGExXzEwMSkgJiYKKyAgICAgbnJfMDk5PSQoaW5kZXhfb2JqX25yIDEuaWR4ICRzaGExXzA5OSkgJiYKKyAgICAgY2htb2QgK3cgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIgJiYKKyAgICAgcmVjb3Jkc3o9JCgocmF3c3ogKyA0KSkgJiYKKyAgICAgZGQgb2Y9Ii5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIgc2Vlaz0kKCgkb2Zmc18xMDEgKyAxKSkgXAorICAgICAgICBpZj0iLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5pZHgiIFwKKyAgICAgICAgc2tpcD0kKCg0ICsgMjU2ICogNCArICRucl8wOTkgKiByZWNvcmRzeikpIFwKKyAgICAgICAgYnM9MSBjb3VudD0kcmF3c3ogY29udj1ub3RydW5jICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRzaGExXzEwMSA+IGZpbGVfMTAxX2ZvbzEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjFdIDMpIGNvcnJ1cHRlZCBkZWx0YSBoYXBwaWx5IHJldHVybmVkIHdyb25nIGRhdGEnIFwKKyAgICAndGVzdCAtZiBmaWxlXzEwMV9mb28xICYmICEgY21wIGZpbGVfMTAxIGZpbGVfMTAxX2ZvbzEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjFdIDQpIGNvbmZpcm0gdGhhdCB0aGUgcGFjayBpcyBhY3R1YWxseSBjb3JydXB0ZWQnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS1mdWxsICRjb21taXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjFdIDUpIHBhY2stb2JqZWN0cyBoYXBwaWx5IHJldXNlcyBjb3JydXB0ZWQgZGF0YScgXAorICAgICdwYWNrND0kKGdpdCBwYWNrLW9iamVjdHMgdGVzdC00IDxvYmotbGlzdCkgJiYKKyAgICAgdGVzdCAtZiAidGVzdC00LSR7cGFjazR9LnBhY2siJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYxXSA2KSBuZXdseSBjcmVhdGVkIHBhY2sgaXMgQkFEICEnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS1wYWNrIC12ICJ0ZXN0LTQtJHtwYWNrNH0ucGFjayInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjJdIDEpIHN0cmVhbSBwYWNrIHRvIHJlcG9zaXRvcnknIFwKKyAgICAncm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKiAmJgorICAgICBnaXQgaW5kZXgtcGFjayAtLWluZGV4LXZlcnNpb249MiAtLXN0ZGluIDwgInRlc3QtMS0ke3BhY2sxfS5wYWNrIiAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGdpdCBjb3VudC1vYmplY3RzIHwgKCByZWFkIG5yIHJlc3QgJiYgdGVzdCAiJG5yIiAtZXEgMSApICYmCisgICAgIGNtcCAidGVzdC0xLSR7cGFjazF9LnBhY2siICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LnBhY2siICYmCisgICAgIGNtcCAidGVzdC0yLSR7cGFjazF9LmlkeCIgICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LmlkeCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjJdIDIpIGNyZWF0ZSBhIHN0ZWFsdGggY29ycnVwdGlvbiBpbiBhIGRlbHRhIGJhc2UgcmVmZXJlbmNlJyBcCisgICAgJyMgVGhpcyB0ZXN0IGFzc3VtZXMgZmlsZV8xMDEgaXMgYSBkZWx0YSBzbWFsbGVyIHRoYW4gMTYgYnl0ZXMuCisgICAgICMgSXQgc2hvdWxkIGJlIGFnYWluc3QgZmlsZV8xMDAgYnV0IHdlIHN1YnN0aXR1dGUgaXRzIGJhc2UgZm9yIGZpbGVfMDk5CisgICAgIHNoYTFfMTAxPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGVfMTAxKSAmJgorICAgICBzaGExXzA5OT0kKGdpdCBoYXNoLW9iamVjdCBmaWxlXzA5OSkgJiYKKyAgICAgb2Zmc18xMDE9JChpbmRleF9vYmpfb2Zmc2V0IDEuaWR4ICRzaGExXzEwMSkgJiYKKyAgICAgbnJfMDk5PSQoaW5kZXhfb2JqX25yIDEuaWR4ICRzaGExXzA5OSkgJiYKKyAgICAgY2htb2QgK3cgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIgJiYKKyAgICAgZGQgb2Y9Ii5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIgc2Vlaz0kKCgkb2Zmc18xMDEgKyAxKSkgXAorICAgICAgICBpZj0iLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5pZHgiIFwKKyAgICAgICAgc2tpcD0kKCg4ICsgMjU2ICogNCArICRucl8wOTkgKiByYXdzeikpIFwKKyAgICAgICAgYnM9MSBjb3VudD0kcmF3c3ogY29udj1ub3RydW5jICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRzaGExXzEwMSA+IGZpbGVfMTAxX2ZvbzInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjJdIDMpIGNvcnJ1cHRlZCBkZWx0YSBoYXBwaWx5IHJldHVybmVkIHdyb25nIGRhdGEnIFwKKyAgICAndGVzdCAtZiBmaWxlXzEwMV9mb28yICYmICEgY21wIGZpbGVfMTAxIGZpbGVfMTAxX2ZvbzInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjJdIDQpIGNvbmZpcm0gdGhhdCB0aGUgcGFjayBpcyBhY3R1YWxseSBjb3JydXB0ZWQnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS1mdWxsICRjb21taXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjJdIDUpIHBhY2stb2JqZWN0cyByZWZ1c2VzIHRvIHJldXNlIGNvcnJ1cHRlZCBkYXRhJyBcCisgICAgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBwYWNrLW9iamVjdHMgdGVzdC01IDxvYmotbGlzdCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgcGFjay1vYmplY3RzIC0tbm8tcmV1c2Utb2JqZWN0IHRlc3QtNiA8b2JqLWxpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjJdIDYpIHZlcmlmeS1wYWNrIGRldGVjdHMgQ1JDIG1pc21hdGNoJyBcCisgICAgJ3JtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyogJiYKKyAgICAgZ2l0IGluZGV4LXBhY2sgLS1pbmRleC12ZXJzaW9uPTIgLS1zdGRpbiA8ICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayIgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LnBhY2siICYmCisgICAgIG9iaj0kKGdpdCBoYXNoLW9iamVjdCBmaWxlXzAwMSkgJiYKKyAgICAgbnI9JChpbmRleF9vYmpfbnIgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0uaWR4IiAkb2JqKSAmJgorICAgICBjaG1vZCArdyAiLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5pZHgiICYmCisgICAgIHByaW50ZiB4eHh4IHwgZGQgb2Y9Ii5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0uaWR4IiBjb252PW5vdHJ1bmMgXAorICAgICAgICBicz0xIGNvdW50PTQgc2Vlaz0kKCg4ICsgMjU2ICogNCArICQod2MgLWwgPG9iai1saXN0KSAqIHJhd3N6ICsgJG5yICogNCkpICYmCisgICAgICggd2hpbGUgcmVhZCBvYmoKKyAgICAgICBkbyBnaXQgY2F0LWZpbGUgLXAgJG9iaiA+L2Rldi9udWxsIHx8IGV4aXQgMQorICAgICAgIGRvbmUgPG9iai1saXN0ICkgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS1wYWNrICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LnBhY2siCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bm5pbmcgaW5kZXgtcGFjayBpbiB0aGUgb2JqZWN0IHN0b3JlJyAnCisgICAgcm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKiAmJgorICAgIGNwIHRlc3QtMS0ke3BhY2sxfS5wYWNrIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayAmJgorICAgICgKKwljZCAuZ2l0L29iamVjdHMvcGFjayAmJgorCWdpdCBpbmRleC1wYWNrIHBhY2stJHtwYWNrMX0ucGFjaworICAgICkgJiYKKyAgICB0ZXN0IC1mIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0uaWR4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgLS1zdHJpY3Qgd2FybnMgdXBvbiBtaXNzaW5nIHRhZ2dlciBpbiB0YWcnICcKKyAgICBzaGE9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisgICAgY2F0ID53cm9uZy10YWcgPDxFT0YgJiYKK29iamVjdCAkc2hhCit0eXBlIGNvbW1pdAordGFnIGd1dGVuIHRhZworCitUaGlzIGlzIGFuIGludmFsaWQgdGFnLgorRU9GCisKKyAgICB0YWc9JChnaXQgaGFzaC1vYmplY3QgLXQgdGFnIC13IC0tc3RkaW4gPHdyb25nLXRhZykgJiYKKyAgICBwYWNrMT0kKGVjaG8gJHRhZyAkc2hhIHwgZ2l0IHBhY2stb2JqZWN0cyB0YWctdGVzdCkgJiYKKyAgICBlY2hvIHJlbW92ZSB0YWcgb2JqZWN0ICYmCisgICAgdGhpcnR5ZWlnaHQ9JHt0YWcjPz99ICYmCisgICAgcm0gLWYgLmdpdC9vYmplY3RzLyR7dGFnJSR0aGlydHllaWdodH0vJHRoaXJ0eWVpZ2h0ICYmCisgICAgZ2l0IGluZGV4LXBhY2sgLS1zdHJpY3QgdGFnLXRlc3QtJHtwYWNrMX0ucGFjayAyPmVyciAmJgorICAgIGdyZXAgIl53YXJuaW5nOi4qIGV4cGVjdGVkIC50YWdnZXIuIGxpbmUiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIC0tZnNjay1vYmplY3RzIGFsc28gd2FybnMgdXBvbiBtaXNzaW5nIHRhZ2dlciBpbiB0YWcnICcKKyAgICBnaXQgaW5kZXgtcGFjayAtLWZzY2stb2JqZWN0cyB0YWctdGVzdC0ke3BhY2sxfS5wYWNrIDI+ZXJyICYmCisgICAgZ3JlcCAiXndhcm5pbmc6LiogZXhwZWN0ZWQgLnRhZ2dlci4gbGluZSIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwMy1wYWNrLWNvcnJ1cHRpb24tcmVzaWxpZW5jZS5zaCBiL3QvdDUzMDMtcGFjay1jb3JydXB0aW9uLXJlc2lsaWVuY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDFlNmRjNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMDMtcGFjay1jb3JydXB0aW9uLXJlc2lsaWVuY2Uuc2gKQEAgLTAsMCArMSw0MDMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggTmljb2xhcyBQaXRyZQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXNpbGllbmNlIHRvIHBhY2sgY29ycnVwdGlvbnMgd2l0aCByZWR1bmRhbnQgb2JqZWN0cycKKy4gLi90ZXN0LWxpYi5zaAorCisjIE5vdGU6IHRoZSB0ZXN0IG9iamVjdHMgYXJlIGNyZWF0ZWQgd2l0aCBrbm93bGVkZ2Ugb2YgdGhlaXIgcGFjayBlbmNvZGluZworIyB0byBlbnN1cmUgZ29vZCBjb2RlIHBhdGggY292ZXJhZ2UsIGFuZCB0byBmYWNpbGl0YXRlIGRpcmVjdCBhbHRlcmF0aW9uCisjIGxhdGVyIG9uLiAgVGhlIGFzc3VtZWQgY2hhcmFjdGVyaXN0aWNzIGFyZToKKyMKKyMgMSkgYmxvYl8yIGlzIGEgZGVsdGEgd2l0aCBibG9iXzEgZm9yIGJhc2UgYW5kIGJsb2JfMyBpcyBhIGRlbHRhIHdpdGggYmxvYjIKKyMgICAgZm9yIGJhc2UsIHN1Y2ggdGhhdCBibG9iXzMgZGVsdGEgZGVwdGggaXMgMjsKKyMKKyMgMikgdGhlIGJ1bGsgb2Ygb2JqZWN0IGRhdGEgaXMgdW5jb21wcmVzc2libGUgc28gdGhlIHRleHQgcGFydCByZW1haW5zCisjICAgIHZpc2libGU7CisjCisjIDMpIG9iamVjdCBoZWFkZXIgaXMgYWx3YXlzIDIgYnl0ZXMuCisKK2NyZWF0ZV90ZXN0X2ZpbGVzKCkgeworICAgIHRlc3QtdG9vbCBnZW5yYW5kb20gImZvbyIgMjAwMCA+IGZpbGVfMSAmJgorICAgIHRlc3QtdG9vbCBnZW5yYW5kb20gImZvbyIgMTgwMCA+IGZpbGVfMiAmJgorICAgIHRlc3QtdG9vbCBnZW5yYW5kb20gImZvbyIgMTgwMCA+IGZpbGVfMyAmJgorICAgIGVjaG8gIiBiYXNlICIgPj4gZmlsZV8xICYmCisgICAgZWNobyAiIGRlbHRhMSAiID4+IGZpbGVfMiAmJgorICAgIGVjaG8gIiBkZWx0YSBkZWx0YTIgIiA+PiBmaWxlXzMgJiYKKyAgICB0ZXN0LXRvb2wgZ2VucmFuZG9tICJiYXIiIDE1MCA+PiBmaWxlXzIgJiYKKyAgICB0ZXN0LXRvb2wgZ2VucmFuZG9tICJiYXoiIDEwMCA+PiBmaWxlXzMKK30KKworY3JlYXRlX25ld19wYWNrKCkgeworICAgIHJtIC1yZiAuZ2l0ICYmCisgICAgZ2l0IGluaXQgJiYKKyAgICBibG9iXzE9JChnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzEpICYmCisgICAgYmxvYl8yPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8yKSAmJgorICAgIGJsb2JfMz0kKGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMykgJiYKKyAgICBwYWNrPSQocHJpbnRmICIkYmxvYl8xXG4kYmxvYl8yXG4kYmxvYl8zXG4iIHwKKyAgICAgICAgICBnaXQgcGFjay1vYmplY3RzICRAIC5naXQvb2JqZWN0cy9wYWNrL3BhY2spICYmCisgICAgcGFjaz0iLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2t9IiAmJgorICAgIGdpdCB2ZXJpZnktcGFjayAtdiAke3BhY2t9LnBhY2sKK30KKworZG9fcmVwYWNrKCkgeworICAgIHBhY2s9JChwcmludGYgIiRibG9iXzFcbiRibG9iXzJcbiRibG9iXzNcbiIgfAorICAgICAgICAgIGdpdCBwYWNrLW9iamVjdHMgJEAgLmdpdC9vYmplY3RzL3BhY2svcGFjaykgJiYKKyAgICBwYWNrPSIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFja30iCit9CisKK2RvX2NvcnJ1cHRfb2JqZWN0KCkgeworICAgIG9mcz0kKGdpdCBzaG93LWluZGV4IDwgJHtwYWNrfS5pZHggfCBncmVwICQxIHwgY3V0IC1mMSAtZCIgIikgJiYKKyAgICBvZnM9JCgoJG9mcyArICQyKSkgJiYKKyAgICBjaG1vZCArdyAke3BhY2t9LnBhY2sgJiYKKyAgICBkZCBvZj0ke3BhY2t9LnBhY2sgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz0kb2ZzICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS1wYWNrICR7cGFja30ucGFjaworfQorCitwcmludGYgJ1wwJyA+IHplcm8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2luaXRpYWwgc2V0dXAgdmFsaWRhdGlvbicgXAorICAgICdjcmVhdGVfdGVzdF9maWxlcyAmJgorICAgICBjcmVhdGVfbmV3X3BhY2sgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0ZSBjb3JydXB0aW9uIGluIGhlYWRlciBvZiBmaXJzdCBvYmplY3QnIFwKKyAgICAnZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMSAwIDwgemVybyAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBidXQgaGF2aW5nIGEgbG9vc2UgY29weSBhbGxvd3MgZm9yIGZ1bGwgcmVjb3ZlcnknIFwKKyAgICAnbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMSAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIGxvb3NlIGNvcHkgb2YgZmlyc3QgZGVsdGEgYWxsb3dzIGZvciBwYXJ0aWFsIHJlY292ZXJ5JyBcCisgICAgJ2dpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8yICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0ZSBjb3JydXB0aW9uIGluIGRhdGEgb2YgZmlyc3Qgb2JqZWN0JyBcCisgICAgJ2NyZWF0ZV9uZXdfcGFjayAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGNobW9kICt3ICR7cGFja30ucGFjayAmJgorICAgICBwZXJsIC1pLmJhayAtcGUgInMvIGJhc2UgL2FiY2RlZi8iICR7cGFja30ucGFjayAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBidXQgaGF2aW5nIGEgbG9vc2UgY29weSBhbGxvd3MgZm9yIGZ1bGwgcmVjb3ZlcnknIFwKKyAgICAnbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMSAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIGxvb3NlIGNvcHkgb2Ygc2Vjb25kIG9iamVjdCBhbGxvd3MgZm9yIHBhcnRpYWwgcmVjb3ZlcnknIFwKKyAgICAnZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIG12ICR7cGFja30uaWR4IHRtcCAmJgorICAgICBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzIgJiYKKyAgICAgbXYgdG1wICR7cGFja30uaWR4ICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY3JlYXRlIGNvcnJ1cHRpb24gaW4gaGVhZGVyIG9mIGZpcnN0IGRlbHRhJyBcCisgICAgJ2NyZWF0ZV9uZXdfcGFjayAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGRvX2NvcnJ1cHRfb2JqZWN0ICRibG9iXzIgMCA8IHplcm8gJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYnV0IGhhdmluZyBhIGxvb3NlIGNvcHkgYWxsb3dzIGZvciBmdWxsIHJlY292ZXJ5JyBcCisgICAgJ212ICR7cGFja30uaWR4IHRtcCAmJgorICAgICBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzIgJiYKKyAgICAgbXYgdG1wICR7cGFja30uaWR4ICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGFuZCB0aGVuIGEgcmVwYWNrICJjbGVhcnMiIHRoZSBjb3JydXB0aW9uJyBcCisgICAgJ2RvX3JlcGFjayAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAke3BhY2t9LnBhY2sgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGUgY29ycnVwdGlvbiBpbiBkYXRhIG9mIGZpcnN0IGRlbHRhJyBcCisgICAgJ2NyZWF0ZV9uZXdfcGFjayAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGNobW9kICt3ICR7cGFja30ucGFjayAmJgorICAgICBwZXJsIC1pLmJhayAtcGUgInMvIGRlbHRhMSAvYWJjZGVmZ2gvIiAke3BhY2t9LnBhY2sgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYnV0IGhhdmluZyBhIGxvb3NlIGNvcHkgYWxsb3dzIGZvciBmdWxsIHJlY292ZXJ5JyBcCisgICAgJ212ICR7cGFja30uaWR4IHRtcCAmJgorICAgICBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzIgJiYKKyAgICAgbXYgdG1wICR7cGFja30uaWR4ICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGFuZCB0aGVuIGEgcmVwYWNrICJjbGVhcnMiIHRoZSBjb3JydXB0aW9uJyBcCisgICAgJ2RvX3JlcGFjayAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAke3BhY2t9LnBhY2sgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjb3JydXB0aW9uIGluIGRlbHRhIGJhc2UgcmVmZXJlbmNlIG9mIGZpcnN0IGRlbHRhIChPQkpfUkVGX0RFTFRBKScgXAorICAgICdjcmVhdGVfbmV3X3BhY2sgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBkb19jb3JydXB0X29iamVjdCAkYmxvYl8yIDIgPCB6ZXJvICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGJ1dCBoYXZpbmcgYSBsb29zZSBjb3B5IGFsbG93cyBmb3IgZnVsbCByZWNvdmVyeScgXAorICAgICdtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8yICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBhbmQgdGhlbiBhIHJlcGFjayAiY2xlYXJzIiB0aGUgY29ycnVwdGlvbicgXAorICAgICdkb19yZXBhY2sgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgJHtwYWNrfS5wYWNrICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29ycnVwdGlvbiAjMCBpbiBkZWx0YSBiYXNlIHJlZmVyZW5jZSBvZiBmaXJzdCBkZWx0YSAoT0JKX09GU19ERUxUQSknIFwKKyAgICAnY3JlYXRlX25ld19wYWNrIC0tZGVsdGEtYmFzZS1vZmZzZXQgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBkb19jb3JydXB0X29iamVjdCAkYmxvYl8yIDIgPCB6ZXJvICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGJ1dCBoYXZpbmcgYSBsb29zZSBjb3B5IGFsbG93cyBmb3IgZnVsbCByZWNvdmVyeScgXAorICAgICdtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8yICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBhbmQgdGhlbiBhIHJlcGFjayAiY2xlYXJzIiB0aGUgY29ycnVwdGlvbicgXAorICAgICdkb19yZXBhY2sgLS1kZWx0YS1iYXNlLW9mZnNldCAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAke3BhY2t9LnBhY2sgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjb3JydXB0aW9uICMxIGluIGRlbHRhIGJhc2UgcmVmZXJlbmNlIG9mIGZpcnN0IGRlbHRhIChPQkpfT0ZTX0RFTFRBKScgXAorICAgICdjcmVhdGVfbmV3X3BhY2sgLS1kZWx0YS1iYXNlLW9mZnNldCAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIHByaW50ZiAiXDAwMSIgfCBkb19jb3JydXB0X29iamVjdCAkYmxvYl8yIDIgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYnV0IGhhdmluZyBhIGxvb3NlIGNvcHkgYWxsb3dzIGZvciBmdWxsIHJlY292ZXJ5JyBcCisgICAgJ212ICR7cGFja30uaWR4IHRtcCAmJgorICAgICBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzIgJiYKKyAgICAgbXYgdG1wICR7cGFja30uaWR4ICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGFuZCB0aGVuIGEgcmVwYWNrICJjbGVhcnMiIHRoZSBjb3JydXB0aW9uJyBcCisgICAgJ2RvX3JlcGFjayAtLWRlbHRhLWJhc2Utb2Zmc2V0ICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrICR7cGFja30ucGFjayAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBhbmQgYSByZWR1bmRhbnQgcGFjayBhbGxvd3MgZm9yIGZ1bGwgcmVjb3ZlcnkgdG9vJyBcCisgICAgJ2RvX2NvcnJ1cHRfb2JqZWN0ICRibG9iXzIgMiA8IHplcm8gJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwgJiYKKyAgICAgbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMSAmJgorICAgICBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzIgJiYKKyAgICAgcHJpbnRmICIkYmxvYl8xXG4kYmxvYl8yXG4iIHwgZ2l0IHBhY2stb2JqZWN0cyAuZ2l0L29iamVjdHMvcGFjay9wYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgbXYgdG1wICR7cGFja30uaWR4ICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29ycnVwdGlvbiBvZiBkZWx0YSBiYXNlIHJlZmVyZW5jZSBwb2ludGluZyB0byB3cm9uZyBvYmplY3QnIFwKKyAgICAnY3JlYXRlX25ld19wYWNrIC0tZGVsdGEtYmFzZS1vZmZzZXQgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBwcmludGYgIlwyMjBcMDMzIiB8IGRvX2NvcnJ1cHRfb2JqZWN0ICRibG9iXzMgMiAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4vZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+L2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPi9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBidXQgaGF2aW5nIGEgbG9vc2UgY29weSBhbGxvd3MgZm9yIGZ1bGwgcmVjb3ZlcnknIFwKKyAgICAnbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMyAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIHRoZW4gYSByZXBhY2sgImNsZWFycyIgdGhlIGNvcnJ1cHRpb24nIFwKKyAgICAnZG9fcmVwYWNrIC0tZGVsdGEtYmFzZS1vZmZzZXQgLS1uby1yZXVzZS1kZWx0YSAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAke3BhY2t9LnBhY2sgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjb3JydXB0aW5nIGhlYWRlciB0byBoYXZlIHRvbyBzbWFsbCBvdXRwdXQgYnVmZmVyIGZhaWxzIHVucGFjaycgXAorICAgICdjcmVhdGVfbmV3X3BhY2sgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBwcmludGYgIlwyNjJcMDAxIiB8IGRvX2NvcnJ1cHRfb2JqZWN0ICRibG9iXzEgMCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKworIyBcMCAtIGVtcHR5IGJhc2UKKyMgXDEgLSBvbmUgYnl0ZSBpbiByZXN1bHQKKyMgXDEgLSBvbmUgbGl0ZXJhbCBieXRlIChYKQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FwcGx5IGdvb2QgbWluaW1hbCBkZWx0YScgXAorICAgICdwcmludGYgIlwwXDFcMVgiID4gbWluaW1hbF9kZWx0YSAmJgorICAgICB0ZXN0LXRvb2wgZGVsdGEgLXAgL2Rldi9udWxsIG1pbmltYWxfZGVsdGEgL2Rldi9udWxsJworCisjIFwwIC0gZW1wdHkgYmFzZQorIyBcMSAtIDEgYnl0ZSBpbiByZXN1bHQKKyMgXDIgLSB0d28gbGl0ZXJhbCBieXRlcyAob25lIHRvbyBtYW55KQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FwcGx5IGRlbHRhIHdpdGggdG9vIG1hbnkgbGl0ZXJhbCBieXRlcycgXAorICAgICdwcmludGYgIlwwXDFcMlhYIiA+IHRvb19iaWdfbGl0ZXJhbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgZGVsdGEgLXAgL2Rldi9udWxsIHRvb19iaWdfbGl0ZXJhbCAvZGV2L251bGwnCisKKyMgXDQgLSBmb3VyIGJ5dGVzIGluIGJhc2UKKyMgXDEgLSBvbmUgYnl0ZSBpbiByZXN1bHQKKyMgXDIyMSAtIGNvcHksIG9uZSBieXRlIG9mZnNldCwgb25lIGJ5dGUgc2l6ZQorIyAgIFwwIC0gY29weSBmcm9tIG9mZnNldCAwCisjICAgXDIgLSBjb3B5IHR3byBieXRlcyAob25lIHRvbyBtYW55KQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FwcGx5IGRlbHRhIHdpdGggdG9vIG1hbnkgY29waWVkIGJ5dGVzJyBcCisgICAgJ3ByaW50ZiAiXDRcMVwyMjFcMFwyIiA+IHRvb19iaWdfY29weSAmJgorICAgICBwcmludGYgYmFzZSA+YmFzZSAmJgorICAgICB0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgZGVsdGEgLXAgYmFzZSB0b29fYmlnX2NvcHkgL2Rldi9udWxsJworCisjIFwwIC0gZW1wdHkgYmFzZQorIyBcMiAtIHR3byBieXRlcyBpbiByZXN1bHQKKyMgXDIgLSB0d28gbGl0ZXJhbCBieXRlcyAod2UgYXJlIHNob3J0IG9uZSkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhcHBseSBkZWx0YSB3aXRoIHRvbyBmZXcgbGl0ZXJhbCBieXRlcycgXAorICAgICdwcmludGYgIlwwXDJcMlgiID4gdHJ1bmNhdGVkX2RlbHRhICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBkZWx0YSAtcCAvZGV2L251bGwgdHJ1bmNhdGVkX2RlbHRhIC9kZXYvbnVsbCcKKworIyBcMCAtIGVtcHR5IGJhc2UKKyMgXDEgLSBvbmUgYnl0ZSBpbiByZXN1bHQKKyMgXDIyMSAtIGNvcHksIG9uZSBieXRlIG9mZnNldCwgb25lIGJ5dGUgc2l6ZQorIyAgIFwwIC0gY29weSBmcm9tIG9mZnNldCAwCisjICAgXDEgLSBjb3B5IG9uZSBieXRlICh3ZSBhcmUgc2hvcnQgb25lKQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FwcGx5IGRlbHRhIHdpdGggdG9vIGZldyBieXRlcyBpbiBiYXNlJyBcCisgICAgJ3ByaW50ZiAiXDBcMVwyMjFcMFwxIiA+IHRydW5jYXRlZF9iYXNlICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBkZWx0YSAtcCAvZGV2L251bGwgdHJ1bmNhdGVkX2Jhc2UgL2Rldi9udWxsJworCisjIFw0IC0gZm91ciBieXRlcyBpbiBiYXNlCisjIFwyIC0gdHdvIGJ5dGVzIGluIHJlc3VsdAorIyBcMSAtIG9uZSBsaXRlcmFsIGJ5dGUgKFgpCisjIFwyMjEgLSBjb3B5LCBvbmUgYnl0ZSBvZmZzZXQsIG9uZSBieXRlIHNpemUKKyMgICAgICAgIChvZmZzZXQvc2l6ZSBtaXNzaW5nKQorIworIyBOb3RlIHRoYXQgdGhlIGxpdGVyYWwgYnl0ZSBpcyBuZWNlc3NhcnkgdG8gZ2V0IHBhc3QgdGhlIHVuaW50ZXJlc3RpbmcgbWluaW11bQorIyBkZWx0YSBzaXplIGNoZWNrLgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FwcGx5IGRlbHRhIHdpdGggdHJ1bmNhdGVkIGNvcHkgcGFyYW1ldGVycycgXAorICAgICdwcmludGYgIlw0XDJcMVhcMjIxIiA+IHRydW5jYXRlZF9jb3B5X2RlbHRhICYmCisgICAgIHByaW50ZiBiYXNlID5iYXNlICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBkZWx0YSAtcCBiYXNlIHRydW5jYXRlZF9jb3B5X2RlbHRhIC9kZXYvbnVsbCcKKworIyBcMCAtIGVtcHR5IGJhc2UKKyMgXDEgLSBvbmUgYnl0ZSBpbiByZXN1bHQKKyMgXDEgLSBvbmUgbGl0ZXJhbCBieXRlIChYKQorIyBcMSAtIHRyYWlsaW5nIGdhcmJhZ2UgY29tbWFuZAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FwcGx5IGRlbHRhIHdpdGggdHJhaWxpbmcgZ2FyYmFnZSBsaXRlcmFsJyBcCisgICAgJ3ByaW50ZiAiXDBcMVwxWFwxIiA+IHRhaWxfZ2FyYmFnZV9saXRlcmFsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBkZWx0YSAtcCAvZGV2L251bGwgdGFpbF9nYXJiYWdlX2xpdGVyYWwgL2Rldi9udWxsJworCisjIFw0IC0gZm91ciBieXRlcyBpbiBiYXNlCisjIFwxIC0gb25lIGJ5dGUgaW4gcmVzdWx0CisjIFwxIC0gb25lIGxpdGVyYWwgYnl0ZSAoWCkKKyMgXDIyMSAtIGNvcHksIG9uZSBieXRlIG9mZnNldCwgb25lIGJ5dGUgc2l6ZQorIyAgIFwwIC0gY29weSBmcm9tIG9mZnNldCAwCisjICAgXDEgLSBjb3B5IDEgYnl0ZQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FwcGx5IGRlbHRhIHdpdGggdHJhaWxpbmcgZ2FyYmFnZSBjb3B5JyBcCisgICAgJ3ByaW50ZiAiXDRcMVwxWFwyMjFcMFwxIiA+IHRhaWxfZ2FyYmFnZV9jb3B5ICYmCisgICAgIHByaW50ZiBiYXNlID5iYXNlICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBkZWx0YSAtcCAvZGV2L251bGwgdGFpbF9nYXJiYWdlX2NvcHkgL2Rldi9udWxsJworCisjIFwwIC0gZW1wdHkgYmFzZQorIyBcMSAtIG9uZSBieXRlIGluIHJlc3VsdAorIyBcMSAtIG9uZSBsaXRlcmFsIGJ5dGUgKFgpCisjIFwwIC0gYm9ndXMgb3Bjb2RlCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYXBwbHkgZGVsdGEgd2l0aCB0cmFpbGluZyBnYXJiYWdlIG9wY29kZScgXAorICAgICdwcmludGYgIlwwXDFcMVhcMCIgPiB0YWlsX2dhcmJhZ2Vfb3Bjb2RlICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBkZWx0YSAtcCAvZGV2L251bGwgdGFpbF9nYXJiYWdlX29wY29kZSAvZGV2L251bGwnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwNC1wcnVuZS5zaCBiL3QvdDUzMDQtcHJ1bmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGY2MGYxOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMDQtcHJ1bmUuc2gKQEAgLTAsMCArMSwzNTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdwcnVuZScKKy4gLi90ZXN0LWxpYi5zaAorCitkYXk9JCgoNjAqNjAqMjQpKQord2Vlaz0kKCgkZGF5KjcpKQorCithZGRfYmxvYigpIHsKKwliZWZvcmU9JChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJQkxPQj0kKGVjaG8gYWxlcGhfMCB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCUJMT0JfRklMRT0uZ2l0L29iamVjdHMvJChlY2hvICRCTE9CIHwgc2VkICJzL14uLi8mXC8vIikgJiYKKwl2ZXJib3NlIHRlc3QgJCgoMSArICRiZWZvcmUpKSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgorCXRlc3RfcGF0aF9pc19maWxlICRCTE9CX0ZJTEUgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9KzAgJEJMT0JfRklMRQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCTogPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGdjCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgc3RhbGUgcGFja3MnICcKKworCW9yaWdfcGFjaz0kKGVjaG8gLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrKSAmJgorCTogPiAuZ2l0L29iamVjdHMvdG1wXzEucGFjayAmJgorCTogPiAuZ2l0L29iamVjdHMvdG1wXzIucGFjayAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0tODY1MDEgLmdpdC9vYmplY3RzL3RtcF8xLnBhY2sgJiYKKwlnaXQgcHJ1bmUgLS1leHBpcmUgMS5kYXkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkb3JpZ19wYWNrICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9vYmplY3RzL3RtcF8yLnBhY2sgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L29iamVjdHMvdG1wXzEucGFjaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIC0tZXhwaXJlJyAnCisKKwlhZGRfYmxvYiAmJgorCWdpdCBwcnVuZSAtLWV4cGlyZT0xLmhvdXIuYWdvICYmCisJdmVyYm9zZSB0ZXN0ICQoKDEgKyAkYmVmb3JlKSkgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkQkxPQl9GSUxFICYmCisJdGVzdC10b29sIGNobXRpbWUgPS04NjUwMCAkQkxPQl9GSUxFICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlIDEuZGF5ICYmCisJdmVyYm9zZSB0ZXN0ICRiZWZvcmUgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkQkxPQl9GSUxFCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2M6IGltcGxpY2l0IHBydW5lIC0tZXhwaXJlJyAnCisKKwlhZGRfYmxvYiAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0tJCgoMiokd2Vlay0zMCkpICRCTE9CX0ZJTEUgJiYKKwlnaXQgZ2MgJiYKKwl2ZXJib3NlIHRlc3QgJCgoMSArICRiZWZvcmUpKSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgorCXRlc3RfcGF0aF9pc19maWxlICRCTE9CX0ZJTEUgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9LSQoKDIqJHdlZWsrMSkpICRCTE9CX0ZJTEUgJiYKKwlnaXQgZ2MgJiYKKwl2ZXJib3NlIHRlc3QgJGJlZm9yZSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICRCTE9CX0ZJTEUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYzogcmVmdXNlIHRvIHN0YXJ0IHdpdGggaW52YWxpZCBnYy5wcnVuZUV4cGlyZScgJworCisJZ2l0IGNvbmZpZyBnYy5wcnVuZUV4cGlyZSBpbnZhbGlkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdjCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2M6IHN0YXJ0IHdpdGggb2sgZ2MucHJ1bmVFeHBpcmUnICcKKworCWdpdCBjb25maWcgZ2MucHJ1bmVFeHBpcmUgMi5kYXlzLmFnbyAmJgorCWdpdCBnYworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lOiBwcnVuZSBub25zZW5zZSBwYXJhbWV0ZXJzJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHJ1bmUgZ2FyYmFnZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwcnVuZSAtLS0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHJ1bmUgLS1uby1zdWNoLW9wdGlvbgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lOiBwcnVuZSB1bnJlYWNoYWJsZSBoZWFkcycgJworCisJZ2l0IGNvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgZmFsc2UgJiYKKwltdiAuZ2l0L2xvZ3MgLmdpdC9sb2dzLm9sZCAmJgorCTogPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIHRlbXBvcmFyeSAmJgorCXRtcF9oZWFkPSQoZ2l0IHJldi1saXN0IC0xIEhFQUQpICYmCisJZ2l0IHJlc2V0IEhFQUReICYmCisJZ2l0IHBydW5lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0ICR0bXBfaGVhZCAtLQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lOiBkbyBub3QgcHJ1bmUgZGV0YWNoZWQgSEVBRCB3aXRoIG5vIHJlZmxvZycgJworCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIC0tcXVpZXQgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImRldGFjaGVkIGNvbW1pdCIgJiYKKwkjIHZlcmlmeSB0aGF0IHRoZXJlIGlzIG5vIHJlZmxvZ3MKKwkjIChzaG91bGQgYmUgcmVtb3ZlZCBhbmQgZGlzYWJsZWQgYnkgcHJldmlvdXMgdGVzdCkKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L2xvZ3MgJiYKKwlnaXQgcHJ1bmUgLW4gPnBydW5lX2FjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBwcnVuZV9hY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZTogcHJ1bmUgZm9ybWVyIEhFQUQgYWZ0ZXIgY2hlY2tpbmcgb3V0IGJyYW5jaCcgJworCisJaGVhZF9vaWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0IC0tcXVpZXQgbWFzdGVyICYmCisJZ2l0IHBydW5lIC12ID5wcnVuZV9hY3R1YWwgJiYKKwlncmVwICIkaGVhZF9vaWQiIHBydW5lX2FjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lOiBkbyBub3QgcHJ1bmUgaGVhZHMgbGlzdGVkIGFzIGFuIGFyZ3VtZW50JyAnCisKKwk6ID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSB0ZW1wb3JhcnkgJiYKKwl0bXBfaGVhZD0kKGdpdCByZXYtbGlzdCAtMSBIRUFEKSAmJgorCWdpdCByZXNldCBIRUFEXiAmJgorCWdpdCBwcnVuZSAtLSAkdG1wX2hlYWQgJiYKKwlnaXQgcmVzZXQgJHRtcF9oZWFkIC0tCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgLS1uby1wcnVuZScgJworCisJYWRkX2Jsb2IgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9LSQoKDUwMDEqJGRheSkpICRCTE9CX0ZJTEUgJiYKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIDIuZGF5cy5hZ28gJiYKKwlnaXQgZ2MgLS1uby1wcnVuZSAmJgorCXZlcmJvc2UgdGVzdCAxID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIHJlc3BlY3RzIGdjLnBydW5lRXhwaXJlJyAnCisKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIDUwMDIuZGF5cy5hZ28gJiYKKwlnaXQgZ2MgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkQkxPQl9GSUxFICYmCisJZ2l0IGNvbmZpZyBnYy5wcnVuZUV4cGlyZSA1MDAwLmRheXMuYWdvICYmCisJZ2l0IGdjICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIC0tcHJ1bmU9PGRhdGU+JyAnCisKKwlhZGRfYmxvYiAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0tJCgoNTAwMSokZGF5KSkgJEJMT0JfRklMRSAmJgorCWdpdCBnYyAtLXBydW5lPTUwMDIuZGF5cy5hZ28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkQkxPQl9GSUxFICYmCisJZ2l0IGdjIC0tcHJ1bmU9NTAwMC5kYXlzLmFnbyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICRCTE9CX0ZJTEUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyAtLXBydW5lPW5ldmVyJyAnCisKKwlhZGRfYmxvYiAmJgorCWdpdCBnYyAtLXBydW5lPW5ldmVyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJEJMT0JfRklMRSAmJgorCWdpdCBnYyAtLXBydW5lPW5vdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICRCTE9CX0ZJTEUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyByZXNwZWN0cyBnYy5wcnVuZUV4cGlyZT1uZXZlcicgJworCisJZ2l0IGNvbmZpZyBnYy5wcnVuZUV4cGlyZSBuZXZlciAmJgorCWFkZF9ibG9iICYmCisJZ2l0IGdjICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJEJMT0JfRklMRSAmJgorCWdpdCBjb25maWcgZ2MucHJ1bmVFeHBpcmUgbm93ICYmCisJZ2l0IGdjICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIC0tZXhwaXJlPW5ldmVyJyAnCisKKwlhZGRfYmxvYiAmJgorCWdpdCBwcnVuZSAtLWV4cGlyZT1uZXZlciAmJgorCXRlc3RfcGF0aF9pc19maWxlICRCTE9CX0ZJTEUgJiYKKwlnaXQgcHJ1bmUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkQkxPQl9GSUxFCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2M6IHBydW5lIG9sZCBvYmplY3RzIGFmdGVyIGxvY2FsIGNsb25lJyAnCisJYWRkX2Jsb2IgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9LSQoKDIqJHdlZWsrMSkpICRCTE9CX0ZJTEUgJiYKKwlnaXQgY2xvbmUgLS1uby1oYXJkbGlua3MgLiBhY2xvbmUgJiYKKwkoCisJCWNkIGFjbG9uZSAmJgorCQl2ZXJib3NlIHRlc3QgMSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAkQkxPQl9GSUxFICYmCisJCWdpdCBnYyAtLXBydW5lICYmCisJCXZlcmJvc2UgdGVzdCAwID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICRCTE9CX0ZJTEUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dhcmJhZ2UgcmVwb3J0IGluIGNvdW50LW9iamVjdHMgLXYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvb2JqZWN0cy9wYWNrL2Zha2UqIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9vYmplY3RzL3BhY2svZm9vKiIgJiYKKwk6ID4uZ2l0L29iamVjdHMvcGFjay9mb28gJiYKKwk6ID4uZ2l0L29iamVjdHMvcGFjay9mb28uYmFyICYmCisJOiA+LmdpdC9vYmplY3RzL3BhY2svZm9vLmtlZXAgJiYKKwk6ID4uZ2l0L29iamVjdHMvcGFjay9mb28ucGFjayAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2Zha2UuYmFyICYmCisJOiA+LmdpdC9vYmplY3RzL3BhY2svZmFrZS5rZWVwICYmCisJOiA+LmdpdC9vYmplY3RzL3BhY2svZmFrZS5wYWNrICYmCisJOiA+LmdpdC9vYmplY3RzL3BhY2svZmFrZS5pZHggJiYKKwk6ID4uZ2l0L29iamVjdHMvcGFjay9mYWtlMi5rZWVwICYmCisJOiA+LmdpdC9vYmplY3RzL3BhY2svZmFrZTMuaWR4ICYmCisJZ2l0IGNvdW50LW9iamVjdHMgLXYgMj5zdGRlcnIgJiYKKwlncmVwICJpbmRleCBmaWxlIC5naXQvb2JqZWN0cy9wYWNrL2Zha2UuaWR4IGlzIHRvbyBzbWFsbCIgc3RkZXJyICYmCisJZ3JlcCAiXndhcm5pbmc6IiBzdGRlcnIgfCBzb3J0ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgord2FybmluZzogZ2FyYmFnZSBmb3VuZDogLmdpdC9vYmplY3RzL3BhY2svZmFrZS5iYXIKK3dhcm5pbmc6IGdhcmJhZ2UgZm91bmQ6IC5naXQvb2JqZWN0cy9wYWNrL2Zvbword2FybmluZzogZ2FyYmFnZSBmb3VuZDogLmdpdC9vYmplY3RzL3BhY2svZm9vLmJhcgord2FybmluZzogbm8gY29ycmVzcG9uZGluZyAuaWR4IG9yIC5wYWNrOiAuZ2l0L29iamVjdHMvcGFjay9mYWtlMi5rZWVwCit3YXJuaW5nOiBubyBjb3JyZXNwb25kaW5nIC5pZHg6IC5naXQvb2JqZWN0cy9wYWNrL2Zvby5rZWVwCit3YXJuaW5nOiBubyBjb3JyZXNwb25kaW5nIC5pZHg6IC5naXQvb2JqZWN0cy9wYWNrL2Zvby5wYWNrCit3YXJuaW5nOiBubyBjb3JyZXNwb25kaW5nIC5wYWNrOiAuZ2l0L29iamVjdHMvcGFjay9mYWtlMy5pZHgKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbiBwYWNrIGdhcmJhZ2Ugd2l0aCBnYycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9vYmplY3RzL3BhY2svZmFrZSoiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L29iamVjdHMvcGFjay9mb28qIiAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2Zvby5rZWVwICYmCisJOiA+LmdpdC9vYmplY3RzL3BhY2svZm9vLnBhY2sgJiYKKwk6ID4uZ2l0L29iamVjdHMvcGFjay9mYWtlLmlkeCAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2Zha2UyLmtlZXAgJiYKKwk6ID4uZ2l0L29iamVjdHMvcGFjay9mYWtlMi5pZHggJiYKKwk6ID4uZ2l0L29iamVjdHMvcGFjay9mYWtlMy5rZWVwICYmCisJZ2l0IGdjICYmCisJZ2l0IGNvdW50LW9iamVjdHMgLXYgMj5zdGRlcnIgJiYKKwlncmVwICJed2FybmluZzoiIHN0ZGVyciB8IHNvcnQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCit3YXJuaW5nOiBubyBjb3JyZXNwb25kaW5nIC5pZHggb3IgLnBhY2s6IC5naXQvb2JqZWN0cy9wYWNrL2Zha2UzLmtlZXAKK3dhcm5pbmc6IG5vIGNvcnJlc3BvbmRpbmcgLmlkeDogLmdpdC9vYmplY3RzL3BhY2svZm9vLmtlZXAKK3dhcm5pbmc6IG5vIGNvcnJlc3BvbmRpbmcgLmlkeDogLmdpdC9vYmplY3RzL3BhY2svZm9vLnBhY2sKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSAuZ2l0L3NoYWxsb3cnICcKKwlvaWQ9JChlY2hvIGhpfGdpdCBjb21taXQtdHJlZSBIRUFEXnt0cmVlfSkgJiYKKwllY2hvICRvaWQgPi5naXQvc2hhbGxvdyAmJgorCWdpdCBwcnVuZSAtLWRyeS1ydW4gPm91dCAmJgorCWdyZXAgJG9pZCAuZ2l0L3NoYWxsb3cgJiYKKwlncmVwICRvaWQgb3V0ICYmCisJZ2l0IHBydW5lICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zaGFsbG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIC5naXQvc2hhbGxvdyB3aGVuIHRoZXJlIGFyZSBubyBsb29zZSBvYmplY3RzJyAnCisJb2lkPSQoZWNobyBoaXxnaXQgY29tbWl0LXRyZWUgSEVBRF57dHJlZX0pICYmCisJZWNobyAkb2lkID4uZ2l0L3NoYWxsb3cgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3NoYWxsb3ctdGlwICRvaWQgJiYKKwlnaXQgcmVwYWNrIC1hZCAmJgorCSMgdmVyaWZ5IGFzc3VtcHRpb24gdGhhdCBhbGwgbG9vc2Ugb2JqZWN0cyBhcmUgZ29uZQorCWdpdCBjb3VudC1vYmplY3RzIHwgZ3JlcCBeMCAmJgorCWdpdCBwcnVuZSAmJgorCWVjaG8gJG9pZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZTogaGFuZGxlIGFsdGVybmF0ZSBvYmplY3QgZGF0YWJhc2UnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIEEgJiYKKwlnaXQgLUMgQSBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiaW5pdGlhbCBjb21taXQiICYmCisJZ2l0IGNsb25lIC0tc2hhcmVkIEEgQiAmJgorCWdpdCAtQyBCIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJuZXh0IGNvbW1pdCIgJiYKKwlnaXQgLUMgQiBwcnVuZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZTogaGFuZGxlIGluZGV4IGluIG11bHRpcGxlIHdvcmt0cmVlcycgJworCWdpdCB3b3JrdHJlZSBhZGQgc2Vjb25kLXdvcmt0cmVlICYmCisJZWNobyAibmV3IGJsb2IgZm9yIHNlY29uZC13b3JrdHJlZSIgPnNlY29uZC13b3JrdHJlZS9ibG9iICYmCisJZ2l0IC1DIHNlY29uZC13b3JrdHJlZSBhZGQgYmxvYiAmJgorCWdpdCBwcnVuZSAtLWV4cGlyZT1ub3cgJiYKKwlnaXQgLUMgc2Vjb25kLXdvcmt0cmVlIHNob3cgOmJsb2IgPmFjdHVhbCAmJgorCXRlc3RfY21wIHNlY29uZC13b3JrdHJlZS9ibG9iIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZTogaGFuZGxlIEhFQUQgaW4gbXVsdGlwbGUgd29ya3RyZWVzJyAnCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCB0aGlyZC13b3JrdHJlZSAmJgorCWVjaG8gIm5ldyBibG9iIGZvciB0aGlyZC13b3JrdHJlZSIgPnRoaXJkLXdvcmt0cmVlL2Jsb2IgJiYKKwlnaXQgLUMgdGhpcmQtd29ya3RyZWUgYWRkIGJsb2IgJiYKKwlnaXQgLUMgdGhpcmQtd29ya3RyZWUgY29tbWl0IC1tICJ0aGlyZCIgJiYKKwlybSAuZ2l0L3dvcmt0cmVlcy90aGlyZC13b3JrdHJlZS9pbmRleCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyB0aGlyZC13b3JrdHJlZSBzaG93IDpibG9iICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlPW5vdyAmJgorCWdpdCAtQyB0aGlyZC13b3JrdHJlZSBzaG93IEhFQUQ6YmxvYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgdGhpcmQtd29ya3RyZWUvYmxvYiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmU6IGhhbmRsZSBIRUFEIHJlZmxvZyBpbiBtdWx0aXBsZSB3b3JrdHJlZXMnICcKKwlnaXQgY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyB0cnVlICYmCisJZWNobyAibG9zdCBibG9iIGZvciB0aGlyZC13b3JrdHJlZSIgPmV4cGVjdGVkICYmCisJKAorCQljZCB0aGlyZC13b3JrdHJlZSAmJgorCQljYXQgLi4vZXhwZWN0ZWQgPmJsb2IgJiYKKwkJZ2l0IGFkZCBibG9iICYmCisJCWdpdCBjb21taXQgLW0gInNlY29uZCBjb21taXQgaW4gdGhpcmQiICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKwkpICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlPW5vdyAmJgorCW9pZD1gZ2l0IGhhc2gtb2JqZWN0IGV4cGVjdGVkYCAmJgorCWdpdCAtQyB0aGlyZC13b3JrdHJlZSBzaG93ICIkb2lkIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lOiBoYW5kbGUgZXhwaXJlIG9wdGlvbiBjb3JyZWN0bHknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHJ1bmUgLS1leHBpcmUgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgInJlcXVpcmVzIGEgdmFsdWUiIGVycm9yICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHJ1bmUgLS1leHBpcmU9bnlhaCAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAibWFsZm9ybWVkIGV4cGlyYXRpb24iIGVycm9yICYmCisKKwlnaXQgcHJ1bmUgLS1uby1leHBpcmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJpdmlhbCBwcnVuZSB3aXRoIGJpdG1hcHMgZW5hYmxlZCcgJworCWdpdCByZXBhY2sgLWFkYiAmJgorCWJsb2I9JChlY2hvIGJpdG1hcC11bnJlYWNoYWJsZS1ibG9iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlPW5vdyAmJgorCWdpdCBjYXQtZmlsZSAtZSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC1lICRibG9iCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwNS1pbmNsdWRlLXRhZy5zaCBiL3QvdDUzMDUtaW5jbHVkZS10YWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTVlY2EyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMDUtaW5jbHVkZS10YWcuc2gKQEAgLTAsMCArMSwxMTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcGFjay1vYmplY3QgLS1pbmNsdWRlLXRhZycKKy4gLi90ZXN0LWxpYi5zaAorCitUUkFTSD0kKHB3ZCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBjID5kICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBkICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWNvbW1pdD0kKGdpdCBjb21taXQtdHJlZSAkdHJlZSA8L2Rldi9udWxsKSAmJgorCWVjaG8gIm9iamVjdCAkY29tbWl0IiA+c2lnICYmCisJZWNobyAidHlwZSBjb21taXQiID4+c2lnICYmCisJZWNobyAidGFnIG15dGFnIiA+PnNpZyAmJgorCWVjaG8gInRhZ2dlciAkKGdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCkiID4+c2lnICYmCisJZWNobyA+PnNpZyAmJgorCWVjaG8gIm91ciB0ZXN0IHRhZyIgPj5zaWcgJiYKKwl0YWc9JChnaXQgbWt0YWcgPHNpZykgJiYKKwlybSBkIHNpZyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvdGFncy9teXRhZyAkdGFnICYmIHsKKwkJZWNobyAkdHJlZSAmJgorCQllY2hvICRjb21taXQgJiYKKwkJZ2l0IGxzLXRyZWUgJHRyZWUgfCBzZWQgLWUgInMvLiogXFwoWzAtOWEtZl0qXFwpCS4qL1xcMS8iCisJfSA+b2JqLWxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayB3aXRob3V0IC0taW5jbHVkZS10YWcnICcKKwlwYWNrbmFtZT0kKGdpdCBwYWNrLW9iamVjdHMgXAorCQktLXdpbmRvdz0wIFwKKwkJdGVzdC1uby1pbmNsdWRlIDxvYmotbGlzdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5wYWNrIG9iamVjdHMnICcKKwlybSAtcmYgY2xvbmUuZ2l0ICYmCisJZ2l0IGluaXQgY2xvbmUuZ2l0ICYmCisJZ2l0IC1DIGNsb25lLmdpdCB1bnBhY2stb2JqZWN0cyA8dGVzdC1uby1pbmNsdWRlLSR7cGFja25hbWV9LnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdW5wYWNrZWQgcmVzdWx0IChoYXZlIGNvbW1pdCwgbm8gdGFnKScgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgJGNvbW1pdCA+bGlzdC5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgY2xvbmUuZ2l0IGNhdC1maWxlIC1lICR0YWcgJiYKKwlnaXQgLUMgY2xvbmUuZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkY29tbWl0ID5saXN0LmFjdHVhbCAmJgorCXRlc3RfY21wIGxpc3QuZXhwZWN0IGxpc3QuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgd2l0aCAtLWluY2x1ZGUtdGFnJyAnCisJcGFja25hbWU9JChnaXQgcGFjay1vYmplY3RzIFwKKwkJLS13aW5kb3c9MCBcCisJCS0taW5jbHVkZS10YWcgXAorCQl0ZXN0LWluY2x1ZGUgPG9iai1saXN0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnBhY2sgb2JqZWN0cycgJworCXJtIC1yZiBjbG9uZS5naXQgJiYKKwlnaXQgaW5pdCBjbG9uZS5naXQgJiYKKwlnaXQgLUMgY2xvbmUuZ2l0IHVucGFjay1vYmplY3RzIDx0ZXN0LWluY2x1ZGUtJHtwYWNrbmFtZX0ucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB1bnBhY2tlZCByZXN1bHQgKGhhdmUgY29tbWl0LCBoYXZlIHRhZyknICcKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIG15dGFnID5saXN0LmV4cGVjdCAmJgorCWdpdCAtQyBjbG9uZS5naXQgcmV2LWxpc3QgLS1vYmplY3RzICR0YWcgPmxpc3QuYWN0dWFsICYmCisJdGVzdF9jbXAgbGlzdC5leHBlY3QgbGlzdC5hY3R1YWwKKycKKworIyBBIHRhZyBvZiBhIHRhZywgd2hlcmUgdGhlICJpbm5lciIgdGFnIGlzIG5vdCBvdGhlcndpc2UKKyMgcmVhY2hhYmxlLCBhbmQgYSBmdWxsIHBlZWwgcG9pbnRzIHRvIGEgY29tbWl0IHJlYWNoYWJsZSBmcm9tIEhFQUQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgaGlkZGVuIGlubmVyIHRhZycgJworCXRlc3RfY29tbWl0IGNvbW1pdCAmJgorCWdpdCB0YWcgLW0gaW5uZXIgaW5uZXIgSEVBRCAmJgorCWdpdCB0YWcgLW0gb3V0ZXIgb3V0ZXIgaW5uZXIgJiYKKwlnaXQgdGFnIC1kIGlubmVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgZXhwbGljaXQgb3V0ZXIgdGFnJyAnCisJcGFja25hbWU9JCgKKwkJeworCQkJZWNobyBIRUFEICYmCisJCQllY2hvIG91dGVyCisJCX0gfAorCQlnaXQgcGFjay1vYmplY3RzIC0tcmV2cyB0ZXN0LWhpZGRlbi1leHBsaWNpdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5wYWNrIG9iamVjdHMnICcKKwlybSAtcmYgY2xvbmUuZ2l0ICYmCisJZ2l0IGluaXQgY2xvbmUuZ2l0ICYmCisJZ2l0IC1DIGNsb25lLmdpdCB1bnBhY2stb2JqZWN0cyA8dGVzdC1oaWRkZW4tZXhwbGljaXQtJHtwYWNrbmFtZX0ucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB1bnBhY2tlZCByZXN1bHQgKGhhdmUgYWxsIG9iamVjdHMpJyAnCisJZ2l0IC1DIGNsb25lLmdpdCByZXYtbGlzdCAtLW9iamVjdHMgJChnaXQgcmV2LXBhcnNlIG91dGVyIEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgaW1wbGllZCBvdXRlciB0YWcnICcKKwlwYWNrbmFtZT0kKAorCQllY2hvIEhFQUQgfAorCQlnaXQgcGFjay1vYmplY3RzIC0tcmV2cyAtLWluY2x1ZGUtdGFnIHRlc3QtaGlkZGVuLWltcGxpZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VucGFjayBvYmplY3RzJyAnCisJcm0gLXJmIGNsb25lLmdpdCAmJgorCWdpdCBpbml0IGNsb25lLmdpdCAmJgorCWdpdCAtQyBjbG9uZS5naXQgdW5wYWNrLW9iamVjdHMgPHRlc3QtaGlkZGVuLWltcGxpZWQtJHtwYWNrbmFtZX0ucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB1bnBhY2tlZCByZXN1bHQgKGhhdmUgYWxsIG9iamVjdHMpJyAnCisJZ2l0IC1DIGNsb25lLmdpdCByZXYtbGlzdCAtLW9iamVjdHMgJChnaXQgcmV2LXBhcnNlIG91dGVyIEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbmdsZS1icmFuY2ggY2xvbmUgY2FuIHRyYW5zZmVyIHRhZycgJworCXJtIC1yZiBjbG9uZS5naXQgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAtLXNpbmdsZS1icmFuY2ggLWIgbWFzdGVyIC4gY2xvbmUuZ2l0ICYmCisJZ2l0IC1DIGNsb25lLmdpdCBmc2NrCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwNi1wYWNrLW5vYmFzZS5zaCBiL3QvdDUzMDYtcGFjay1ub2Jhc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjQ5MzFjMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMDYtcGFjay1ub2Jhc2Uuc2gKQEAgLTAsMCArMSw4MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBHb29nbGUgSW5jLgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtcGFjay1vYmplY3Qgd2l0aCBtaXNzaW5nIGJhc2UKKworJworLiAuL3Rlc3QtbGliLnNoCisKKyMgQ3JlYXRlIEEtQiBjaGFpbgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NldHVwIGJhc2UnIFwKKyAgICAnZm9yIGEgaW4gYSBiIGMgZCBlIGYgZyBoIGk7IGRvIGVjaG8gJGEgPj50ZXh0OyBkb25lICYmCisgICAgIGVjaG8gc2lkZSA+c2lkZSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRleHQgc2lkZSAmJgorICAgICBBPSQoZWNobyBBIHwgZ2l0IGNvbW1pdC10cmVlICQoZ2l0IHdyaXRlLXRyZWUpKSAmJgorCisgICAgIGVjaG8gbSA+PnRleHQgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCB0ZXh0ICYmCisgICAgIEI9JChlY2hvIEIgfCBnaXQgY29tbWl0LXRyZWUgJChnaXQgd3JpdGUtdHJlZSkgLXAgJEEpICYmCisgICAgIGdpdCB1cGRhdGUtcmVmIEhFQUQgJEIKKyAgICAnCisKKyMgQ3JlYXRlIHJlcG9zaXRvcnkgd2l0aCBDIHdob3NlIHBhcmVudCBpcyBCLgorIyBSZXBvc2l0b3J5IGNvbnRhaW5zIEMsIENee3RyZWV9LCBDOnRleHQsIEIsIEJee3RyZWV9LgorIyBSZXBvc2l0b3J5IGlzIG1pc3NpbmcgQjp0ZXh0IChiZXN0IGRlbHRhIGJhc2UgZm9yIEM6dGV4dCkuCisjIFJlcG9zaXRvcnkgaXMgbWlzc2luZyBBIChwYXJlbnQgb2YgQikuCisjIFJlcG9zaXRvcnkgaXMgbWlzc2luZyBBOnNpZGUuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2V0dXAgcGF0Y2hfY2xvbmUnIFwKKyAgICAnYmFzZV9vYmplY3RzPSQocHdkKS8uZ2l0L29iamVjdHMgJiYKKyAgICAgKG1rZGlyIHBhdGNoX2Nsb25lICYmCisgICAgICBjZCBwYXRjaF9jbG9uZSAmJgorICAgICAgZ2l0IGluaXQgJiYKKyAgICAgIGVjaG8gIiRiYXNlX29iamVjdHMiID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisgICAgICBlY2hvIHEgPj50ZXh0ICYmCisgICAgICBnaXQgcmVhZC10cmVlICRCICYmCisgICAgICBnaXQgdXBkYXRlLWluZGV4IHRleHQgJiYKKyAgICAgIGdpdCB1cGRhdGUtcmVmIEhFQUQgJChlY2hvIEMgfCBnaXQgY29tbWl0LXRyZWUgJChnaXQgd3JpdGUtdHJlZSkgLXAgJEIpICYmCisgICAgICBybSAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisKKyAgICAgIGdpdCAtLWdpdC1kaXI9Li4vLmdpdCBjYXQtZmlsZSBjb21taXQgJEIgfAorICAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluICYmCisKKyAgICAgIGdpdCAtLWdpdC1kaXI9Li4vLmdpdCBjYXQtZmlsZSB0cmVlICIkQl57dHJlZX0iIHwKKyAgICAgIGdpdCBoYXNoLW9iamVjdCAtdCB0cmVlIC13IC0tc3RkaW4KKyAgICAgKSAmJgorICAgICBDPSQoZ2l0IC0tZ2l0LWRpcj1wYXRjaF9jbG9uZS8uZ2l0IHJldi1wYXJzZSBIRUFEKQorICAgICcKKworIyBDbG9uZSBwYXRjaF9jbG9uZSBpbmRpcmVjdGx5IGJ5IGNsb25pbmcgYmFzZSBhbmQgZmV0Y2hpbmcuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnaW5kaXJlY3RseSBjbG9uZSBwYXRjaF9jbG9uZScgXAorICAgICcobWtkaXIgdXNlcl9jbG9uZSAmJgorICAgICAgY2QgdXNlcl9jbG9uZSAmJgorICAgICAgZ2l0IGluaXQgJiYKKyAgICAgIGdpdCBwdWxsIC4uLy5naXQgJiYKKyAgICAgIHRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpID0gJEIgJiYKKworICAgICAgZ2l0IHB1bGwgLi4vcGF0Y2hfY2xvbmUvLmdpdCAmJgorICAgICAgdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkQworICAgICApCisgICAgJworCisjIENsb25pbmcgdGhlIHBhdGNoX2Nsb25lIGRpcmVjdGx5IHNob3VsZCBmYWlsLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2Nsb25lIG9mIHBhdGNoX2Nsb25lIGlzIGluY29tcGxldGUnIFwKKyAgICAnKG1rZGlyIHVzZXJfZGlyZWN0ICYmCisgICAgICBjZCB1c2VyX2RpcmVjdCAmJgorICAgICAgZ2l0IGluaXQgJiYKKyAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAuLi9wYXRjaF9jbG9uZS8uZ2l0CisgICAgICkKKyAgICAnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwNy1wYWNrLW1pc3NpbmctY29tbWl0LnNoIGIvdC90NTMwNy1wYWNrLW1pc3NpbmctY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY0MzM4YWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzA3LXBhY2stbWlzc2luZy1jb21taXQuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BhY2sgc2hvdWxkIG5vdGljZSBtaXNzaW5nIGNvbW1pdCBvYmplY3RzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGkgaW4gMSAyIDMgNCA1CisJZG8KKwkJZWNobyAiJGkiID4iZmlsZSRpIiAmJgorCQlnaXQgYWRkICJmaWxlJGkiICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICIkaSIgJiYKKwkJZ2l0IHRhZyAidGFnJGkiCisJZG9uZSAmJgorCW9iaj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMykgJiYKKwlmYW5vdXQ9JChleHByICIkb2JqIiA6ICJcKC4uXCkiKSAmJgorCXJlbWFpbmRlcj0kKGV4cHIgIiRvYmoiIDogIi4uXCguKlwpIikgJiYKKwlybSAtZiAiLmdpdC9vYmplY3RzLyRmYW5vdXQvJHJlbWFpbmRlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY29ycnVwdGlvbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG5vdGljZXMgY29ycnVwdGlvbiAoMSknICcKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfQ09NTUlUX0dSQVBIPTAgZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9ZmFsc2UgcmV2LWxpc3QgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBub3RpY2VzIGNvcnJ1cHRpb24gKDIpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX0NPTU1JVF9HUkFQSD0wIGdpdCAtYyBjb3JlLmNvbW1pdEdyYXBoPWZhbHNlIHJldi1saXN0IC0tb2JqZWN0cyBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2stb2JqZWN0cyBub3RpY2VzIGNvcnJ1cHRpb24nICcKKwllY2hvIEhFQUQgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIHBhY2sKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzA4LXBhY2stZGV0ZWN0LWR1cGxpY2F0ZXMuc2ggYi90L3Q1MzA4LXBhY2stZGV0ZWN0LWR1cGxpY2F0ZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjg0NWMxZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMDgtcGFjay1kZXRlY3QtZHVwbGljYXRlcy5zaApAQCAtMCwwICsxLDc3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0naGFuZGxpbmcgb2YgZHVwbGljYXRlIG9iamVjdHMgaW4gaW5jb21pbmcgcGFja2ZpbGVzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1wYWNrLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBTSEExCit0aGVuCisgICAgICAgc2tpcF9hbGw9J25vdCB1c2luZyBTSEEtMSBmb3Igb2JqZWN0cycKKyAgICAgICB0ZXN0X2RvbmUKK2ZpCisKKyMgVGhlIHNoYTFzIHdlIGhhdmUgaW4gb3VyIHBhY2suIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlc2UgaGF2ZSB0aGUgc2FtZQorIyBzdGFydGluZyBieXRlLCBzbyB0aGF0IHRoZXkgZW5kIHVwIGluIHRoZSBzYW1lIGZhbm91dCBzZWN0aW9uIG9mIHRoZSBpbmRleC4KKyMgVGhhdCBsZXRzIHVzIG1ha2Ugc3VyZSB3ZSBhcmUgZXhlcmNpc2luZyB0aGUgYmluYXJ5IHNlYXJjaCB3aXRoIGJvdGggc2V0cy4KK0xPX1NIQTE9ZTY4ZmU4MTI5YjU0NmIxMDFhZWU5NTEwYzUzMjhlN2YyMWNhMWQxOAorSElfU0hBMT1lNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCisKKyMgQW5kIGhlcmUncyBhICJtaXNzaW5nIHNoYTEiIHdoaWNoIHdpbGwgcHJvZHVjZSBmYWlsZWQgbG9va3Vwcy4gSXQgbXVzdCBhbHNvCisjIGJlIGluIHRoZSBzYW1lIGZhbm91dCBzZWN0aW9uLCBhbmQgc2hvdWxkIGJlIGJldHdlZW4gdGhlIHR3byAoc28gdGhhdCBkdXJpbmcKKyMgb3VyIGJpbmFyeSBzZWFyY2gsIHdlIGFyZSBzdXJlIHRvIGVuZCB1cCBsb29raW5nIGF0IG9uZSBvciB0aGUgb3RoZXIgb2YgdGhlCisjIGR1cGxpY2F0ZSBydW5zKS4KK01JU1NJTkdfU0hBMT0nZTY5ZDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKworIyBnaXQgd2lsbCBuZXZlciBpbnRlbnRpb25hbGx5IGNyZWF0ZSBwYWNrZmlsZXMgd2l0aAorIyBkdXBsaWNhdGUgb2JqZWN0cywgc28gd2UgaGF2ZSB0byBjb25zdHJ1Y3QgdGhlbSBieSBoYW5kLgorIworIyAkMSBpcyB0aGUgbmFtZSBvZiB0aGUgcGFja2ZpbGUgdG8gY3JlYXRlCisjCisjICQyIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdG8gZHVwbGljYXRlIGVhY2ggb2JqZWN0CitjcmVhdGVfcGFjayAoKSB7CisJcGFja19oZWFkZXIgIiQoKDIgKiAkMikpIiA+IiQxIiAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMSAiJDIiKTsgZG8KKwkJcGFja19vYmogJExPX1NIQTEgJiYKKwkJcGFja19vYmogJEhJX1NIQTEKKwlkb25lID4+IiQxIiAmJgorCXBhY2tfdHJhaWxlciAiJDEiCit9CisKKyMgZG91YmxlLWNoZWNrIHRoYXQgY3JlYXRlX3BhY2sgYWN0dWFsbHkgd29ya3MKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgd2l0aCBubyBkdXBsaWNhdGVzJyAnCisJY3JlYXRlX3BhY2sgbm8tZHVwcy5wYWNrIDEgJiYKKwlnaXQgaW5kZXgtcGFjayAtLXN0ZGluIDxuby1kdXBzLnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayB3aWxsIGFsbG93IGR1cGxpY2F0ZSBvYmplY3RzIGJ5IGRlZmF1bHQnICcKKwljbGVhcl9wYWNrcyAmJgorCWNyZWF0ZV9wYWNrIGR1cHMucGFjayAxMDAgJiYKKwlnaXQgaW5kZXgtcGFjayAtLXN0ZGluIDxkdXBzLnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGJhdGNoLWNoZWNrIHRlc3QgdmVjdG9ycycgJworCWNhdCA+aW5wdXQgPDwtRU9GICYmCisJJExPX1NIQTEKKwkkSElfU0hBMQorCSRNSVNTSU5HX1NIQTEKKwlFT0YKKwljYXQgPmV4cGVjdCA8PC1FT0YKKwkkTE9fU0hBMSBibG9iIDIKKwkkSElfU0hBMSBibG9iIDAKKwkkTUlTU0lOR19TSEExIG1pc3NpbmcKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9va3VwIGluIGR1cGxpY2F0ZWQgcGFjaycgJworCWdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIGNhbiByZWplY3QgcGFja3Mgd2l0aCBkdXBsaWNhdGVzJyAnCisJY2xlYXJfcGFja3MgJiYKKwljcmVhdGVfcGFjayBkdXBzLnBhY2sgMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IC0tc3RkaW4gPGR1cHMucGFjayAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2F0LWZpbGUgLWUgJExPX1NIQTEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzA5LXBhY2stZGVsdGEtY3ljbGVzLnNoIGIvdC90NTMwOS1wYWNrLWRlbHRhLWN5Y2xlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NWI3ODc2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTMwOS1wYWNrLWRlbHRhLWN5Y2xlcy5zaApAQCAtMCwwICsxLDc3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBpbmRleC1wYWNrIGhhbmRsaW5nIG9mIGRlbHRhIGN5Y2xlcyBpbiBwYWNrZmlsZXMnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXBhY2suc2gKKworIyBUd28gc2ltaWxhci1pc2ggb2JqZWN0cyB0aGF0IHdlIGhhdmUgY29tcHV0ZWQgZGVsdGFzIGJldHdlZW4uCitBPSQodGVzdF9vaWQgcGFja2xpYl83XzApCitCPSQodGVzdF9vaWQgcGFja2xpYl83Xzc2KQorCisjIGRvdWJsZS1jaGVjayBvdXIgaGFuZC1jb25zdHVjdGVkIHBhY2tzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIHdvcmtzIHdpdGggYSBzaW5nbGUgZGVsdGEgKEEtPkIpJyAnCisJY2xlYXJfcGFja3MgJiYKKwl7CisJCXBhY2tfaGVhZGVyIDIgJiYKKwkJcGFja19vYmogJEEgJEIgJiYKKwkJcGFja19vYmogJEIKKwl9ID5hYi5wYWNrICYmCisJcGFja190cmFpbGVyIGFiLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayAtLXN0ZGluIDxhYi5wYWNrICYmCisJZ2l0IGNhdC1maWxlIC10ICRBICYmCisJZ2l0IGNhdC1maWxlIC10ICRCCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgd29ya3Mgd2l0aCBhIHNpbmdsZSBkZWx0YSAoQi0+QSknICcKKwljbGVhcl9wYWNrcyAmJgorCXsKKwkJcGFja19oZWFkZXIgMiAmJgorCQlwYWNrX29iaiAkQSAmJgorCQlwYWNrX29iaiAkQiAkQQorCX0gPmJhLnBhY2sgJiYKKwlwYWNrX3RyYWlsZXIgYmEucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIC0tc3RkaW4gPGJhLnBhY2sgJiYKKwlnaXQgY2F0LWZpbGUgLXQgJEEgJiYKKwlnaXQgY2F0LWZpbGUgLXQgJEIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayBkZXRlY3RzIG1pc3NpbmcgYmFzZSBvYmplY3RzJyAnCisJY2xlYXJfcGFja3MgJiYKKwl7CisJCXBhY2tfaGVhZGVyIDEgJiYKKwkJcGFja19vYmogJEEgJEIKKwl9ID5taXNzaW5nLnBhY2sgJiYKKwlwYWNrX3RyYWlsZXIgbWlzc2luZy5wYWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLS1maXgtdGhpbiAtLXN0ZGluIDxtaXNzaW5nLnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayBkZXRlY3RzIFJFRl9ERUxUQSBjeWNsZXMnICcKKwljbGVhcl9wYWNrcyAmJgorCXsKKwkJcGFja19oZWFkZXIgMiAmJgorCQlwYWNrX29iaiAkQSAkQiAmJgorCQlwYWNrX29iaiAkQiAkQQorCX0gPmN5Y2xlLnBhY2sgJiYKKwlwYWNrX3RyYWlsZXIgY3ljbGUucGFjayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBpbmRleC1wYWNrIC0tZml4LXRoaW4gLS1zdGRpbiA8Y3ljbGUucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsb3ZlciB0byBhbiBvYmplY3QgaW4gYW5vdGhlciBwYWNrJyAnCisJY2xlYXJfcGFja3MgJiYKKwlnaXQgaW5kZXgtcGFjayAtLXN0ZGluIDxhYi5wYWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLS1zdGRpbiAtLWZpeC10aGluIDxjeWNsZS5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxvdmVyIHRvIGEgZHVwbGljYXRlIG9iamVjdCBpbiB0aGUgc2FtZSBwYWNrJyAnCisJY2xlYXJfcGFja3MgJiYKKwl7CisJCXBhY2tfaGVhZGVyIDMgJiYKKwkJcGFja19vYmogJEEgJEIgJiYKKwkJcGFja19vYmogJEIgJEEgJiYKKwkJcGFja19vYmogJEEKKwl9ID5yZWNvdmVyYWJsZS5wYWNrICYmCisJcGFja190cmFpbGVyIHJlY292ZXJhYmxlLnBhY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgaW5kZXgtcGFjayAtLWZpeC10aGluIC0tc3RkaW4gPHJlY292ZXJhYmxlLnBhY2sKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzEwLXBhY2stYml0bWFwcy5zaCBiL3QvdDUzMTAtcGFjay1iaXRtYXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzMTg3ODEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzEwLXBhY2stYml0bWFwcy5zaApAQCAtMCwwICsxLDQ1MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2V4ZXJjaXNlIGJhc2ljIGJpdG1hcCBmdW5jdGlvbmFsaXR5JworLiAuL3Rlc3QtbGliLnNoCisKK29ianBhdGggKCkgeworCWVjaG8gIi5naXQvb2JqZWN0cy8kKGVjaG8gIiQxIiB8IHNlZCAtZSAnc3xcKC4uXCl8XDEvfCcpIgorfQorCisjIHNob3cgb2JqZWN0cyBwcmVzZW50IGluIHBhY2sgKCQxIHNob3VsZCBiZSBhc3NvY2lhdGVkICouaWR4KQorbGlzdF9wYWNrZWRfb2JqZWN0cyAoKSB7CisJZ2l0IHNob3ctaW5kZXggPCIkMSIgPm9iamVjdC1saXN0ICYmCisJY3V0IC1kJyAnIC1mMiBvYmplY3QtbGlzdAorfQorCisjIGhhc19hbnkgcGF0dGVybi1maWxlIGNvbnRlbnQtZmlsZQorIyB0ZXN0cyB3aGV0aGVyIGNvbnRlbnQtZmlsZSBoYXMgYW55IGVudHJ5IGZyb20gcGF0dGVybi1maWxlIHdpdGggZW50cmllcyBiZWluZworIyB3aG9sZSBsaW5lcy4KK2hhc19hbnkgKCkgeworCWdyZXAgLUZmICIkMSIgIiQyIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvIHdpdGggbW9kZXJhdGUtc2l6ZWQgaGlzdG9yeScgJworCXRlc3RfY29tbWl0X2J1bGsgLS1pZD1maWxlIDEwMCAmJgorCWdpdCBjaGVja291dCAtYiBvdGhlciBIRUFEfjUgJiYKKwl0ZXN0X2NvbW1pdF9idWxrIC0taWQ9c2lkZSAxMCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwliaXRtYXB0aXA9JChnaXQgcmV2LXBhcnNlIG1hc3RlcikgJiYKKwlibG9iPSQoZWNobyB0YWdnZWQtYmxvYiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCWdpdCB0YWcgdGFnZ2VkLWJsb2IgJGJsb2IgJiYKKwlnaXQgY29uZmlnIHJlcGFjay53cml0ZWJpdG1hcHMgdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmdWxsIHJlcGFjayBjcmVhdGVzIGJpdG1hcHMnICcKKwlnaXQgcmVwYWNrIC1hZCAmJgorCWxzIC5naXQvb2JqZWN0cy9wYWNrLyB8IGdyZXAgYml0bWFwID5vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLXRlc3QtYml0bWFwIHZlcmlmaWVzIGJpdG1hcHMnICcKKwlnaXQgcmV2LWxpc3QgLS10ZXN0LWJpdG1hcCBIRUFECisnCisKK3Jldl9saXN0X3Rlc3RzKCkgeworCXN0YXRlPSQxCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb3VudGluZyBjb21taXRzIHZpYSBiaXRtYXAgKCRzdGF0ZSkiICcKKwkJZ2l0IHJldi1saXN0IC0tY291bnQgSEVBRCA+ZXhwZWN0ICYmCisJCWdpdCByZXYtbGlzdCAtLXVzZS1iaXRtYXAtaW5kZXggLS1jb3VudCBIRUFEID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvdW50aW5nIHBhcnRpYWwgY29tbWl0cyB2aWEgYml0bWFwICgkc3RhdGUpIiAnCisJCWdpdCByZXYtbGlzdCAtLWNvdW50IEhFQUR+NS4uSEVBRCA+ZXhwZWN0ICYmCisJCWdpdCByZXYtbGlzdCAtLXVzZS1iaXRtYXAtaW5kZXggLS1jb3VudCBIRUFEfjUuLkhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY291bnRpbmcgY29tbWl0cyB3aXRoIGxpbWl0ICgkc3RhdGUpIiAnCisJCWdpdCByZXYtbGlzdCAtLWNvdW50IC1uIDEgSEVBRCA+ZXhwZWN0ICYmCisJCWdpdCByZXYtbGlzdCAtLXVzZS1iaXRtYXAtaW5kZXggLS1jb3VudCAtbiAxIEhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY291bnRpbmcgbm9uLWxpbmVhciBoaXN0b3J5ICgkc3RhdGUpIiAnCisJCWdpdCByZXYtbGlzdCAtLWNvdW50IG90aGVyLi4ubWFzdGVyID5leHBlY3QgJiYKKwkJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCAtLWNvdW50IG90aGVyLi4ubWFzdGVyID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvdW50aW5nIGNvbW1pdHMgd2l0aCBsaW1pdGluZyAoJHN0YXRlKSIgJworCQlnaXQgcmV2LWxpc3QgLS1jb3VudCBIRUFEIC0tIDEudCA+ZXhwZWN0ICYmCisJCWdpdCByZXYtbGlzdCAtLXVzZS1iaXRtYXAtaW5kZXggLS1jb3VudCBIRUFEIC0tIDEudCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb3VudGluZyBvYmplY3RzIHZpYSBiaXRtYXAgKCRzdGF0ZSkiICcKKwkJZ2l0IHJldi1saXN0IC0tY291bnQgLS1vYmplY3RzIEhFQUQgPmV4cGVjdCAmJgorCQlnaXQgcmV2LWxpc3QgLS11c2UtYml0bWFwLWluZGV4IC0tY291bnQgLS1vYmplY3RzIEhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZW51bWVyYXRlIGNvbW1pdHMgKCRzdGF0ZSkiICcKKwkJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCBIRUFEID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1saXN0IEhFQUQgPmV4cGVjdCAmJgorCQl0ZXN0X2JpdG1hcF90cmF2ZXJzYWwgLS1uby1jb25maXJtLWJpdG1hcHMgZXhwZWN0IGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImVudW1lcmF0ZSAtLW9iamVjdHMgKCRzdGF0ZSkiICcKKwkJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLXVzZS1iaXRtYXAtaW5kZXggSEVBRCA+YWN0dWFsICYmCisJCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgSEVBRCA+ZXhwZWN0ICYmCisJCXRlc3RfYml0bWFwX3RyYXZlcnNhbCBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiYml0bWFwIC0tb2JqZWN0cyBoYW5kbGVzIG5vbi1jb21taXQgb2JqZWN0cyAoJHN0YXRlKSIgJworCQlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tdXNlLWJpdG1hcC1pbmRleCBIRUFEIHRhZ2dlZC1ibG9iID5hY3R1YWwgJiYKKwkJZ3JlcCAkYmxvYiBhY3R1YWwKKwknCit9CisKK3Jldl9saXN0X3Rlc3RzICdmdWxsIGJpdG1hcCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZnJvbSBiaXRtYXBwZWQgcmVwb3NpdG9yeScgJworCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tYmFyZSAuIGNsb25lLmdpdCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1jbG9uZS5naXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBjbG9uZSBmcm9tIGJpdG1hcHBlZCByZXBvc2l0b3J5JyAnCisJdGVzdF9jb25maWcgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciB0cnVlICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1iYXJlIC0tZmlsdGVyPWJsb2I6bm9uZSAuIHBhcnRpYWwtY2xvbmUuZ2l0ICYmCisJKAorCQljZCBwYXJ0aWFsLWNsb25lLmdpdCAmJgorCQlwYWNrPSQoZWNobyBvYmplY3RzL3BhY2svKi5wYWNrKSAmJgorCQlnaXQgdmVyaWZ5LXBhY2sgLXYgIiRwYWNrIiA+aGF2ZSAmJgorCQlhd2sgIi9ibG9iLyB7IHByaW50IFwkMSB9IiA8aGF2ZSA+YmxvYnMgJiYKKwkJIyB3ZSBleHBlY3QgdGhpcyBzaW5nbGUgYmxvYiBiZWNhdXNlIG9mIHRoZSBkaXJlY3QgcmVmCisJCWdpdCByZXYtcGFyc2UgcmVmcy90YWdzL3RhZ2dlZC1ibG9iID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGJsb2JzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmdXJ0aGVyIG5vbi1iaXRtYXBwZWQgY29tbWl0cycgJworCXRlc3RfY29tbWl0X2J1bGsgLS1pZD1mdXJ0aGVyIDEwCisnCisKK3Jldl9saXN0X3Rlc3RzICdwYXJ0aWFsIGJpdG1hcCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggKHBhcnRpYWwgYml0bWFwKScgJworCWdpdCAtLWdpdC1kaXI9Y2xvbmUuZ2l0IGZldGNoIG9yaWdpbiBtYXN0ZXI6bWFzdGVyICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWNsb25lLmdpdCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNyZW1lbnRhbCByZXBhY2sgZmFpbHMgd2hlbiBiaXRtYXBzIGFyZSByZXF1ZXN0ZWQnICcKKwl0ZXN0X2NvbW1pdCBtb3JlLTEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVwYWNrIC1kIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiSW5jcmVtZW50YWwgcmVwYWNrcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggYml0bWFwIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jcmVtZW50YWwgcmVwYWNrIGNhbiBkaXNhYmxlIGJpdG1hcHMnICcKKwl0ZXN0X2NvbW1pdCBtb3JlLTIgJiYKKwlnaXQgcmVwYWNrIC1kIC0tbm8td3JpdGUtYml0bWFwLWluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2stb2JqZWN0cyByZXNwZWN0cyAtLWxvY2FsIChub24tbG9jYWwgbG9vc2UpJyAnCisJZ2l0IGluaXQgLS1iYXJlIGFsdC5naXQgJiYKKwllY2hvICQocHdkKS9hbHQuZ2l0L29iamVjdHMgPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwllY2hvIGNvbnRlbnQxID5maWxlMSAmJgorCSMgbm9uLWxvY2FsIGxvb3NlIG9iamVjdCB3aGljaCBpcyBub3QgcHJlc2VudCBpbiBiaXRtYXBwZWQgcGFjaworCWFsdGJsb2I9JChHSVRfRElSPWFsdC5naXQgZ2l0IGhhc2gtb2JqZWN0IC13IGZpbGUxKSAmJgorCSMgbm9uLWxvY2FsIGxvb3NlIG9iamVjdCB3aGljaCBpcyBhbHNvIHByZXNlbnQgaW4gYml0bWFwcGVkIHBhY2sKKwlnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYiB8IEdJVF9ESVI9YWx0LmdpdCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGNvbW1pdF9maWxlMSAmJgorCWVjaG8gSEVBRCB8IGdpdCBwYWNrLW9iamVjdHMgLS1sb2NhbCAtLXN0ZG91dCAtLXJldnMgPjEucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIDEucGFjayAmJgorCWxpc3RfcGFja2VkX29iamVjdHMgMS5pZHggPjEub2JqZWN0cyAmJgorCXByaW50ZiAiJXNcbiIgIiRhbHRibG9iIiAiJGJsb2IiID5ub25sb2NhbC1sb29zZSAmJgorCSEgaGFzX2FueSBub25sb2NhbC1sb29zZSAxLm9iamVjdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay1vYmplY3RzIHJlc3BlY3RzIC0taG9ub3ItcGFjay1rZWVwIChsb2NhbCBub24tYml0bWFwcGVkIHBhY2spJyAnCisJZWNobyBjb250ZW50MiA+ZmlsZTIgJiYKKwlibG9iMj0kKGdpdCBoYXNoLW9iamVjdCAtdyBmaWxlMikgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBjb21taXRfZmlsZTIgJiYKKwlwcmludGYgIiVzXG4iICIkYmxvYjIiICIkYml0bWFwdGlwIiA+a2VlcG9iamVjdHMgJiYKKwlwYWNrMj0kKGdpdCBwYWNrLW9iamVjdHMgcGFjazIgPGtlZXBvYmplY3RzKSAmJgorCW12IHBhY2syLSRwYWNrMi4qIC5naXQvb2JqZWN0cy9wYWNrLyAmJgorCT4uZ2l0L29iamVjdHMvcGFjay9wYWNrMi0kcGFjazIua2VlcCAmJgorCXJtICQob2JqcGF0aCAkYmxvYjIpICYmCisJZWNobyBIRUFEIHwgZ2l0IHBhY2stb2JqZWN0cyAtLWhvbm9yLXBhY2sta2VlcCAtLXN0ZG91dCAtLXJldnMgPjJhLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayAyYS5wYWNrICYmCisJbGlzdF9wYWNrZWRfb2JqZWN0cyAyYS5pZHggPjJhLm9iamVjdHMgJiYKKwkhIGhhc19hbnkga2VlcG9iamVjdHMgMmEub2JqZWN0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrLW9iamVjdHMgcmVzcGVjdHMgLS1sb2NhbCAobm9uLWxvY2FsIHBhY2spJyAnCisJbXYgLmdpdC9vYmplY3RzL3BhY2svcGFjazItJHBhY2syLiogYWx0LmdpdC9vYmplY3RzL3BhY2svICYmCisJZWNobyBIRUFEIHwgZ2l0IHBhY2stb2JqZWN0cyAtLWxvY2FsIC0tc3Rkb3V0IC0tcmV2cyA+MmIucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIDJiLnBhY2sgJiYKKwlsaXN0X3BhY2tlZF9vYmplY3RzIDJiLmlkeCA+MmIub2JqZWN0cyAmJgorCSEgaGFzX2FueSBrZWVwb2JqZWN0cyAyYi5vYmplY3RzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2stb2JqZWN0cyByZXNwZWN0cyAtLWhvbm9yLXBhY2sta2VlcCAobG9jYWwgYml0bWFwcGVkIHBhY2spJyAnCisJbHMgLmdpdC9vYmplY3RzL3BhY2svIHwgZ3JlcCBiaXRtYXAgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0cHV0ICYmCisJcGFja2JpdG1hcD0kKGJhc2VuYW1lICQoY2F0IG91dHB1dCkgLmJpdG1hcCkgJiYKKwlsaXN0X3BhY2tlZF9vYmplY3RzIC5naXQvb2JqZWN0cy9wYWNrLyRwYWNrYml0bWFwLmlkeCA+cGFja2JpdG1hcC5vYmplY3RzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L29iamVjdHMvcGFjay8kcGFja2JpdG1hcC5rZWVwIiAmJgorCT4uZ2l0L29iamVjdHMvcGFjay8kcGFja2JpdG1hcC5rZWVwICYmCisJZWNobyBIRUFEIHwgZ2l0IHBhY2stb2JqZWN0cyAtLWhvbm9yLXBhY2sta2VlcCAtLXN0ZG91dCAtLXJldnMgPjNhLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayAzYS5wYWNrICYmCisJbGlzdF9wYWNrZWRfb2JqZWN0cyAzYS5pZHggPjNhLm9iamVjdHMgJiYKKwkhIGhhc19hbnkgcGFja2JpdG1hcC5vYmplY3RzIDNhLm9iamVjdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay1vYmplY3RzIHJlc3BlY3RzIC0tbG9jYWwgKG5vbi1sb2NhbCBiaXRtYXBwZWQgcGFjayknICcKKwltdiAuZ2l0L29iamVjdHMvcGFjay8kcGFja2JpdG1hcC4qIGFsdC5naXQvb2JqZWN0cy9wYWNrLyAmJgorCXJtIC1mIC5naXQvb2JqZWN0cy9wYWNrL211bHRpLXBhY2staW5kZXggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIm12IGFsdC5naXQvb2JqZWN0cy9wYWNrLyRwYWNrYml0bWFwLiogLmdpdC9vYmplY3RzL3BhY2svIiAmJgorCWVjaG8gSEVBRCB8IGdpdCBwYWNrLW9iamVjdHMgLS1sb2NhbCAtLXN0ZG91dCAtLXJldnMgPjNiLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayAzYi5wYWNrICYmCisJbGlzdF9wYWNrZWRfb2JqZWN0cyAzYi5pZHggPjNiLm9iamVjdHMgJiYKKwkhIGhhc19hbnkgcGFja2JpdG1hcC5vYmplY3RzIDNiLm9iamVjdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay1vYmplY3RzIHRvIGZpbGUgY2FuIHVzZSBiaXRtYXAnICcKKwkjIG1ha2Ugc3VyZSB3ZSBzdGlsbCBoYXZlIDEgYml0bWFwIGluZGV4IGZyb20gcHJldmlvdXMgdGVzdHMKKwlscyAuZ2l0L29iamVjdHMvcGFjay8gfCBncmVwIGJpdG1hcCA+b3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBvdXRwdXQgJiYKKwkjIHZlcmlmeSBlcXVpdmFsZW50IHBhY2tzIGFyZSBnZW5lcmF0ZWQgd2l0aC93aXRob3V0IHVzaW5nIGJpdG1hcCBpbmRleAorCXBhY2thc2hhMT0kKGdpdCBwYWNrLW9iamVjdHMgLS1uby11c2UtYml0bWFwLWluZGV4IC0tYWxsIHBhY2thIDwvZGV2L251bGwpICYmCisJcGFja2JzaGExPSQoZ2l0IHBhY2stb2JqZWN0cyAtLXVzZS1iaXRtYXAtaW5kZXggLS1hbGwgcGFja2IgPC9kZXYvbnVsbCkgJiYKKwlsaXN0X3BhY2tlZF9vYmplY3RzIHBhY2thLSRwYWNrYXNoYTEuaWR4ID5wYWNrYS5vYmplY3RzICYmCisJbGlzdF9wYWNrZWRfb2JqZWN0cyBwYWNrYi0kcGFja2JzaGExLmlkeCA+cGFja2Iub2JqZWN0cyAmJgorCXRlc3RfY21wIHBhY2thLm9iamVjdHMgcGFja2Iub2JqZWN0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmdWxsIHJlcGFjaywgcmV1c2luZyBwcmV2aW91cyBiaXRtYXBzJyAnCisJZ2l0IHJlcGFjayAtYWQgJiYKKwlscyAuZ2l0L29iamVjdHMvcGFjay8gfCBncmVwIGJpdG1hcCA+b3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggKGZ1bGwgYml0bWFwKScgJworCWdpdCAtLWdpdC1kaXI9Y2xvbmUuZ2l0IGZldGNoIG9yaWdpbiBtYXN0ZXI6bWFzdGVyICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWNsb25lLmdpdCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgb2JqZWN0cyBmb3IgbWlzc2luZy1IQVZFIHRlc3RzJyAnCisJYmxvYj0kKGVjaG8gIm1pc3NpbmcgaGF2ZSIgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwl0cmVlPSQocHJpbnRmICIxMDA2NDQgYmxvYiAkYmxvYlx0ZmlsZVxuIiB8IGdpdCBta3RyZWUpICYmCisJcGFyZW50PSQoZWNobyBwYXJlbnQgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUpICYmCisJY29tbWl0PSQoZWNobyBjb21taXQgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUgLXAgJHBhcmVudCkgJiYKKwljYXQgPnJldnMgPDwtRU9GCisJSEVBRAorCV5IRUFEXgorCV4kY29tbWl0CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2stb2JqZWN0cyByZXNwZWN0cyAtLWluY3JlbWVudGFsJyAnCisJY2F0ID5yZXZzMiA8PC1FT0YgJiYKKwlIRUFECisJJGNvbW1pdAorCUVPRgorCWdpdCBwYWNrLW9iamVjdHMgLS1pbmNyZW1lbnRhbCAtLXN0ZG91dCAtLXJldnMgPHJldnMyID40LnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayA0LnBhY2sgJiYKKwlsaXN0X3BhY2tlZF9vYmplY3RzIDQuaWR4ID40Lm9iamVjdHMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IDQub2JqZWN0cyAmJgorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgJGNvbW1pdCA+cmV2bGlzdCAmJgorCWN1dCAtZCIgIiAtZjEgcmV2bGlzdCB8c29ydCA+b2JqZWN0cyAmJgorCXRlc3RfY21wIDQub2JqZWN0cyBvYmplY3RzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgd2l0aCBtaXNzaW5nIGJsb2InICcKKwlybSAkKG9ianBhdGggJGJsb2IpICYmCisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCAtLXJldnMgPHJldnMgPi9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrIHdpdGggbWlzc2luZyB0cmVlJyAnCisJcm0gJChvYmpwYXRoICR0cmVlKSAmJgorCWdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgLS1yZXZzIDxyZXZzID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayB3aXRoIG1pc3NpbmcgcGFyZW50JyAnCisJcm0gJChvYmpwYXRoICRwYXJlbnQpICYmCisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCAtLXJldnMgPHJldnMgPi9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEpHSVQgJ3dlIGNhbiByZWFkIGpnaXQgYml0bWFwcycgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBjb21wYXQtamdpdC5naXQgJiYKKwkoCisJCWNkIGNvbXBhdC1qZ2l0LmdpdCAmJgorCQlybSAtZiBvYmplY3RzL3BhY2svKi5iaXRtYXAgJiYKKwkJamdpdCBnYyAmJgorCQlnaXQgcmV2LWxpc3QgLS10ZXN0LWJpdG1hcCBIRUFECisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEpHSVQgJ2pnaXQgY2FuIHJlYWQgb3VyIGJpdG1hcHMnICcKKwlnaXQgY2xvbmUgLS1iYXJlIC4gY29tcGF0LXVzLmdpdCAmJgorCSgKKwkJY2QgY29tcGF0LXVzLmdpdCAmJgorCQlnaXQgcmVwYWNrIC1hZGIgJiYKKwkJIyBqZ2l0IGdjIHdpbGwgYmFyZiBpZiBpdCBkb2VzIG5vdCBsaWtlIG91ciBiaXRtYXBzCisJCWpnaXQgZ2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwbGl0dGluZyBwYWNrcyBkb2VzIG5vdCBnZW5lcmF0ZSBib2d1cyBiaXRtYXBzJyAnCisJdGVzdC10b29sIGdlbnJhbmRvbSBmb28gJCgoMTAyNCAqIDEwMjQpKSA+cmFuZCAmJgorCWdpdCBhZGQgcmFuZCAmJgorCWdpdCBjb21taXQgLW0gImNvbW1pdCB3aXRoIGJpZyBmaWxlIiAmJgorCWdpdCAtYyBwYWNrLnBhY2tTaXplTGltaXQ9NTAwayByZXBhY2sgLWFkYiAmJgorCWdpdCBpbml0IC0tYmFyZSBuby1iaXRtYXBzLmdpdCAmJgorCWdpdCAtQyBuby1iaXRtYXBzLmdpdCBmZXRjaCAuLiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCByZXVzYWJsZSBwYWNrJyAnCisJcm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKi5rZWVwICYmCisJZ2l0IHJlcGFjayAtYWRiICYmCisJcmV1c2FibGVfcGFjayAoKSB7CisJCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUob2JqZWN0bmFtZSkiIHwKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLWRlbHRhLWJhc2Utb2Zmc2V0IC0tcmV2cyAtLXN0ZG91dCAiJEAiCisJfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrIHJldXNlIHJlc3BlY3RzIC0taG9ub3ItcGFjay1rZWVwJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qLmtlZXAiICYmCisJZm9yIGkgaW4gLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrCisJZG8KKwkJPiR7aSUucGFja30ua2VlcAorCWRvbmUgJiYKKwlyZXVzYWJsZV9wYWNrIC0taG9ub3ItcGFjay1rZWVwID5lbXB0eS5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgZW1wdHkucGFjayAmJgorCWdpdCBzaG93LWluZGV4IDxlbXB0eS5pZHggPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayByZXVzZSByZXNwZWN0cyAtLWxvY2FsJyAnCisJbXYgLmdpdC9vYmplY3RzL3BhY2svKiBhbHQuZ2l0L29iamVjdHMvcGFjay8gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIm12IGFsdC5naXQvb2JqZWN0cy9wYWNrLyogLmdpdC9vYmplY3RzL3BhY2svIiAmJgorCXJldXNhYmxlX3BhY2sgLS1sb2NhbCA+ZW1wdHkucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIGVtcHR5LnBhY2sgJiYKKwlnaXQgc2hvdy1pbmRleCA8ZW1wdHkuaWR4ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgcmV1c2UgcmVzcGVjdHMgLS1pbmNyZW1lbnRhbCcgJworCXJldXNhYmxlX3BhY2sgLS1pbmNyZW1lbnRhbCA+ZW1wdHkucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIGVtcHR5LnBhY2sgJiYKKwlnaXQgc2hvdy1pbmRleCA8ZW1wdHkuaWR4ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RydW5jYXRlZCBiaXRtYXAgZmFpbHMgZ3JhY2VmdWxseScgJworCWdpdCByZXBhY2sgLWFkICYmCisJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCAtLWNvdW50IC0tYWxsID5leHBlY3QgJiYKKwliaXRtYXA9JChscyAuZ2l0L29iamVjdHMvcGFjay8qLmJpdG1hcCkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mICRiaXRtYXAiICYmCisJdGVzdF9jb3B5X2J5dGVzIDUxMiA8JGJpdG1hcCA+JGJpdG1hcC50bXAgJiYKKwltdiAtZiAkYml0bWFwLnRtcCAkYml0bWFwICYmCisJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCAtLWNvdW50IC0tYWxsID5hY3R1YWwgMj5zdGRlcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCBjb3JydXB0IHN0ZGVycgorJworCisjIGhhdmVfZGVsdGEgPG9iaj4gPGV4cGVjdGVkX2Jhc2U+CisjCisjIE5vdGUgdGhhdCBiZWNhdXNlIHRoaXMgcmVsaWVzIG9uIGNhdC1maWxlLCBpdCBtaWdodCBmaW5kIF9hbnlfIGNvcHkgb2YgYW4KKyMgb2JqZWN0IGluIHRoZSByZXBvc2l0b3J5LiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZQorIyB0aGVyZSdzIG9ubHkgb25lIChlLmcuLCB2aWEgInJlcGFjayAtYWQiLCBvciBoYXZpbmcganVzdCBmZXRjaGVkIGEgY29weSkuCitoYXZlX2RlbHRhICgpIHsKKwllY2hvICQyID5leHBlY3QgJiYKKwllY2hvICQxIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2s9IiUoZGVsdGFiYXNlKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKworIyBDcmVhdGUgYSBzdGF0ZSBvZiBoaXN0b3J5IHdpdGggdGhlc2UgcHJvcGVydGllczoKKyMKKyMgIC0gcmVmcyB0aGF0IGFsbG93IGEgY2xpZW50IHRvIGZldGNoIHNvbWUgbmV3IGhpc3RvcnksIHdoaWxlIHNoYXJpbmcgc29tZSBvbGQKKyMgICAgaGlzdG9yeSB3aXRoIHRoZSBzZXJ2ZXI7IHdlIHVzZSBicmFuY2hlcyBkZWx0YS1yZXVzZS1vbGQgYW5kCisjICAgIGRlbHRhLXJldXNlLW5ldyBoZXJlCisjCisjICAtIHRoZSBuZXcgaGlzdG9yeSBjb250YWlucyBhbiBvYmplY3QgdGhhdCBpcyBzdG9yZWQgb24gdGhlIHNlcnZlciBhcyBhIGRlbHRhCisjICAgIGFnYWluc3QgYSBiYXNlIHRoYXQgaXMgaW4gdGhlIG9sZCBoaXN0b3J5CisjCisjICAtIHRoZSBiYXNlIG9iamVjdCBpcyBub3QgaW1tZWRpYXRlbHkgcmVhY2hhYmxlIGZyb20gdGhlIHRpcCBvZiB0aGUgb2xkCisjICAgIGhpc3Rvcnk7IGZpbmRpbmcgaXQgd291bGQgaW52b2x2ZSBkaWdnaW5nIGRvd24gdGhyb3VnaCBoaXN0b3J5IHdlIGtub3cgdGhlCisjICAgIG90aGVyIHNpZGUgaGFzCisjCisjIFRoaXMgc2hvdWxkIHJlc3VsdCBpbiBhIHN0YXRlIHdoZXJlIGZldGNoaW5nIGZyb20gb2xkLT5uZXcgd291bGQgbm90CisjIHRyYWRpdGlvbmFsbHkgcmV1c2UgdGhlIG9uLWRpc2sgZGVsdGEgKGJlY2F1c2Ugd2UnZCBoYXZlIHRvIGRpZyB0byByZWFsaXplCisjIHRoYXQgdGhlIGNsaWVudCBoYXMgaXQpLCBidXQgd2Ugd2lsbCBkbyBzbyBpZiBiaXRtYXBzIGNhbiB0ZWxsIHVzIGNoZWFwbHkKKyMgdGhhdCB0aGUgb3RoZXIgc2lkZSBoYXMgaXQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgdGhpbiBkZWx0YS1yZXVzZSBwYXJlbnQnICcKKwkjIFRoaXMgZmlyc3QgY29tbWl0IGNvbnRhaW5zIHRoZSBidXJpZWQgYmFzZSBvYmplY3QuCisJdGVzdC10b29sIGdlbnJhbmRvbSBkZWx0YSAxNjM4NCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImRlbHRhIGJhc2UiICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpmaWxlKSAmJgorCisJIyBUaGVzZSBpbnRlcm1lZGlhdGUgY29tbWl0cyBidXJ5IHRoZSBiYXNlIGJhY2sgaW4gaGlzdG9yeS4KKwkjIFRoaXMgYmVjb21lcyB0aGUgIm9sZCIgc3RhdGUuCisJZm9yIGkgaW4gMSAyIDMgNCA1CisJZG8KKwkJZWNobyAkaSA+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1hbSAiaW50ZXJtZWRpYXRlICRpIiB8fCByZXR1cm4gMQorCWRvbmUgJiYKKwlnaXQgYnJhbmNoIGRlbHRhLXJldXNlLW9sZCAmJgorCisJIyBBbmQgbm93IG91ciBuZXcgaGlzdG9yeSBoYXMgYSBkZWx0YSBhZ2FpbnN0IHRoZSBidXJpZWQgYmFzZS4gTm90ZQorCSMgdGhhdCB0aGlzIG11c3QgYmUgc21hbGxlciB0aGFuIHRoZSBvcmlnaW5hbCBmaWxlLCBzaW5jZSBwYWNrLW9iamVjdHMKKwkjIHByZWZlcnMgdG8gY3JlYXRlIGRlbHRhcyBmcm9tIHNtYWxsZXIgb2JqZWN0cyB0byBsYXJnZXIuCisJdGVzdC10b29sIGdlbnJhbmRvbSBkZWx0YSAxNjMwMCA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWFtICJkZWx0YSByZXN1bHQiICYmCisJZGVsdGE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6ZmlsZSkgJiYKKwlnaXQgYnJhbmNoIGRlbHRhLXJldXNlLW5ldyAmJgorCisJIyBSZXBhY2sgd2l0aCBiaXRtYXBzIGFuZCBkb3VibGUgY2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBleHBlY3RlZCBkZWx0YQorCSMgcmVsYXRpb25zaGlwLgorCWdpdCByZXBhY2sgLWFkYiAmJgorCWhhdmVfZGVsdGEgJGRlbHRhICRiYXNlCisnCisKKyMgTm93IHdlIGNhbiBzYW5pdHktY2hlY2sgdGhlIG5vbi1iaXRtYXAgYmVoYXZpb3IgKHRoYXQgdGhlIHNlcnZlciBpcyBub3QgYWJsZQorIyB0byByZXVzZSB0aGUgZGVsdGEpLiBUaGlzIGlzbid0IHN0cmljdGx5IHNvbWV0aGluZyB3ZSBjYXJlIGFib3V0LCBzbyB0aGlzCisjIHRlc3QgY291bGQgYmUgc2NyYXBwZWQgaW4gdGhlIGZ1dHVyZS4gQnV0IGl0IG1ha2VzIHN1cmUgdGhhdCB0aGUgbmV4dCB0ZXN0IGlzCisjIGFjdHVhbGx5IHRyaWdnZXJpbmcgdGhlIGZlYXR1cmUgd2Ugd2FudC4KKyMKKyMgTm90ZSB0aGF0IG91ciB0b29scyBmb3Igd29ya2luZyB3aXRoIG9uLXRoZS13aXJlICJ0aGluIiBwYWNrcyBhcmUgbGltaXRlZC4gU28KKyMgd2UgYWN0dWFsbHkgcGVyZm9ybSB0aGUgZmV0Y2gsIHJldGFpbiB0aGUgcmVzdWx0aW5nIHBhY2ssIGFuZCBpbnNwZWN0IHRoZQorIyByZXN1bHQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRob3V0IGJpdG1hcHMgaWdub3JlcyBkZWx0YSBhZ2FpbnN0IG9sZCBiYXNlJyAnCisJdGVzdF9jb25maWcgcGFjay51c2ViaXRtYXBzIGZhbHNlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgY2xpZW50LmdpdCIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgY2xpZW50LmdpdCAmJgorCSgKKwkJY2QgY2xpZW50LmdpdCAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLnVucGFja0xpbWl0IDEgJiYKKwkJZ2l0IGZldGNoIC4uIGRlbHRhLXJldXNlLW9sZDpkZWx0YS1yZXVzZS1vbGQgJiYKKwkJZ2l0IGZldGNoIC4uIGRlbHRhLXJldXNlLW5ldzpkZWx0YS1yZXVzZS1uZXcgJiYKKwkJaGF2ZV9kZWx0YSAkZGVsdGEgJFpFUk9fT0lECisJKQorJworCisjIEFuZCBkbyB0aGUgc2FtZSBmb3IgdGhlIGJpdG1hcCBjYXNlLCB3aGVyZSB3ZSBkbyBleHBlY3QgdG8gZmluZCB0aGUgZGVsdGEuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIGJpdG1hcHMgY2FuIHJldXNlIG9sZCBiYXNlJyAnCisJdGVzdF9jb25maWcgcGFjay51c2ViaXRtYXBzIHRydWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBjbGllbnQuZ2l0IiAmJgorCWdpdCBpbml0IC0tYmFyZSBjbGllbnQuZ2l0ICYmCisJKAorCQljZCBjbGllbnQuZ2l0ICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIudW5wYWNrTGltaXQgMSAmJgorCQlnaXQgZmV0Y2ggLi4gZGVsdGEtcmV1c2Utb2xkOmRlbHRhLXJldXNlLW9sZCAmJgorCQlnaXQgZmV0Y2ggLi4gZGVsdGEtcmV1c2UtbmV3OmRlbHRhLXJldXNlLW5ldyAmJgorCQloYXZlX2RlbHRhICRkZWx0YSAkYmFzZQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzExLXBhY2stYml0bWFwcy1zaGFsbG93LnNoIGIvdC90NTMxMS1wYWNrLWJpdG1hcHMtc2hhbGxvdy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NzJhOTVkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTMxMS1wYWNrLWJpdG1hcHMtc2hhbGxvdy5zaApAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2sgYml0bWFwIG9wZXJhdGlvbiB3aXRoIHNoYWxsb3cgcmVwb3NpdG9yaWVzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgV2Ugd2FudCB0byBjcmVhdGUgYSBzaXR1YXRpb24gd2hlcmUgdGhlIHNoYWxsb3csIGdyYWZ0ZWQKKyMgdmlldyBvZiByZWFjaGFiaWxpdHkgZG9lcyBub3QgbWF0Y2ggcmVhbGl0eSBpbiBhIHdheSB0aGF0CisjIG1pZ2h0IGNhdXNlIHVzIHRvIHNlbmQgaW5zdWZmaWNpZW50IG9iamVjdHMuCisjCisjIFdlIGRvIHRoaXMgd2l0aCBhIGhpc3RvcnkgdGhhdCByZXBlYXRzIGEgc3RhdGUsIGxpa2U6CisjCisjICAgICAgQSAgICAtLSAgIEIgICAgLS0gICBDCisjICAgIGZpbGU9MSAgICBmaWxlPTIgICAgZmlsZT0xCisjCisjIGFuZCB0aGVuIGNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgdG8gdGhlIHNlY29uZCBjb21taXQsIEIuCisjIEluIGEgbm9uLXNoYWxsb3cgY2xvbmUsIHRoYXQgd291bGQgbWVhbiB3ZSBhbHJlYWR5IGhhdmUKKyMgdGhlIHRyZWUgZm9yIEEuIEJ1dCBpbiBhIHNoYWxsb3cgb25lLCB3ZSd2ZSBncmFmdGVkIGF3YXkKKyMgQSwgYW5kIGZldGNoaW5nIEEgdG8gQiByZXF1aXJlcyB0aGF0IHRoZSBvdGhlciBzaWRlIHNlbmQKKyMgdXMgdGhlIHRyZWUgZm9yIGZpbGU9MS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNoYWxsb3cgcmVwbycgJworCWVjaG8gMSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb3JpZyAmJgorCWVjaG8gMiA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdXBkYXRlICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1iYXJlIC0tZGVwdGg9MSAuIHNoYWxsb3cuZ2l0ICYmCisJZWNobyAxID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSByZXBlYXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHVybiBvbiBiaXRtYXBzIGluIHRoZSBwYXJlbnQnICcKKwlnaXQgcmVwYWNrIC1hZGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhbGxvdyBmZXRjaCBmcm9tIGJpdG1hcHBlZCByZXBvJyAnCisJKGNkIHNoYWxsb3cuZ2l0ICYmIGdpdCBmZXRjaCkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzEyLXBydW5lLWNvcnJ1cHRpb24uc2ggYi90L3Q1MzEyLXBydW5lLWNvcnJ1cHRpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGE5ZDU5OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMTItcHJ1bmUtY29ycnVwdGlvbi5zaApAQCAtMCwwICsxLDExNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249JworVGVzdCBwcnVuaW5nIG9mIHJlcG9zaXRvcmllcyB3aXRoIG1pbm9yIGNvcnJ1cHRpb25zLiBUaGUgZ29hbAoraGVyZSBpcyB0aGF0IHdlIHNob3VsZCBhbHdheXMgYmUgZXJyaW5nIG9uIHRoZSBzaWRlIG9mIHNhZmV0eS4gU28KK2lmIHdlIHNlZSwgZm9yIGV4YW1wbGUsIGEgcmVmIHdpdGggYSBib2d1cyBuYW1lLCBpdCBpcyBPSyBlaXRoZXIgdG8KK2JhaWwgb3V0IG9yIHRvIHByb2NlZWQgdXNpbmcgaXQgYXMgYSByZWFjaGFibGUgdGlwLCBidXQgaXQgaXMgX25vdF8KK09LIHRvIHByb2NlZWQgYXMgaWYgaXQgZGlkIG5vdCBleGlzdC4gT3RoZXJ3aXNlIHdlIG1pZ2h0IHNpbGVudGx5CitkZWxldGUgb2JqZWN0cyB0aGF0IGNhbm5vdCBiZSByZWNvdmVyZWQuCisnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYWJsZSByZWZsb2dzJyAnCisJZ2l0IGNvbmZpZyBjb3JlLmxvZ2FsbHJlZnVwZGF0ZXMgZmFsc2UgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1hbGwgLS1hbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGhpc3RvcnkgcmVhY2hhYmxlIG9ubHkgZnJvbSBhIGJvZ3VzLW5hbWVkIHJlZicgJworCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gbWFzdGVyICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGJvZ3VzICYmCisJYm9ndXM9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCAkYm9ndXMgPnNhdmVkICYmCisJZWNobyAkYm9ndXMgPi5naXQvcmVmcy9oZWFkcy9ib2d1cy4ubmFtZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmluZyBkb2VzIG5vdCBkcm9wIGJvZ3VzIG9iamVjdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGhhc2gtb2JqZWN0IC13IC10IGNvbW1pdCBzYXZlZCIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHBydW5lIC0tZXhwaXJlPW5vdyAmJgorCXZlcmJvc2UgZ2l0IGNhdC1maWxlIC1lICRib2d1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXQgYm9ndXMgb2JqZWN0IGludG8gcGFjaycgJworCWdpdCB0YWcgcmVhY2hhYmxlICRib2d1cyAmJgorCWdpdCByZXBhY2sgLWFkICYmCisJZ2l0IHRhZyAtZCByZWFjaGFibGUgJiYKKwl2ZXJib3NlIGdpdCBjYXQtZmlsZSAtZSAkYm9ndXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVzdHJ1Y3RpdmUgcmVwYWNrIGtlZXBzIHBhY2tlZCBvYmplY3QnICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlcGFjayAtQWQgLS11bnBhY2stdW5yZWFjaGFibGU9bm93ICYmCisJdmVyYm9zZSBnaXQgY2F0LWZpbGUgLWUgJGJvZ3VzICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCByZXBhY2sgLWFkICYmCisJdmVyYm9zZSBnaXQgY2F0LWZpbGUgLWUgJGJvZ3VzCisnCisKKyMgc3Vic2VxdWVudCB0ZXN0cyB3aWxsIGhhdmUgZGlmZmVyZW50IGNvcnJ1cHRpb25zCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbiB1cCBib2d1cyByZWYnICcKKwlybSAuZ2l0L3JlZnMvaGVhZHMvYm9ndXMuLm5hbWUKKycKKworIyBXZSBjcmVhdGUgdHdvIG5ldyBvYmplY3RzIGhlcmUsICJvbmUiIGFuZCAidHdvIi4gT3VyCisjIG1hc3RlciBicmFuY2ggcG9pbnRzIHRvICJ0d28iLCB3aGljaCBpcyBkZWxldGVkLAorIyBjb3JydXB0aW5nIHRoZSByZXBvc2l0b3J5LiBCdXQgd2UnZCBsaWtlIHRvIG1ha2Ugc3VyZQorIyB0aGF0IHRoZSBvdGhlcndpc2UgdW5yZWFjaGFibGUgIm9uZSIgaXMgbm90IHBydW5lZAorIyAoc2luY2UgaXQgaXMgdGhlIHVzZXIncyBiZXN0IGJldCBmb3IgcmVjb3ZlcmluZworIyBmcm9tIHRoZSBjb3JydXB0aW9uKS4KKyMKKyMgTm90ZSB0aGF0IHdlIGFsc28gcG9pbnQgSEVBRCBzb21ld2hlcmUgYmVzaWRlcyAidHdvIiwKKyMgYXMgd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgdGVzdCB0aGUgY2FzZSB3aGVyZSB3ZQorIyBwaWNrIHVwIHRoZSByZWZlcmVuY2UgdG8gInR3byIgYnkgaXRlcmF0aW5nIHRoZSByZWZzLAorIyBub3QgYnkgcmVzb2x2aW5nIEhFQUQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgaGlzdG9yeSB3aXRoIG1pc3NpbmcgdGlwIGNvbW1pdCcgJworCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gb25lICYmCisJcmVjb3ZlcmFibGU9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCAkcmVjb3ZlcmFibGUgPnNhdmVkICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0d28gJiYKKwltaXNzaW5nPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCAkYmFzZSAmJgorCXJtIC5naXQvb2JqZWN0cy8kKGVjaG8gJG1pc3NpbmcgfCBzZWQgInMsLi4sJi8sIikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLWUgJG1pc3NpbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmluZyB3aXRoIGEgY29ycnVwdGVkIHRpcCBkb2VzIG5vdCBkcm9wIGhpc3RvcnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBoYXNoLW9iamVjdCAtdyAtdCBjb21taXQgc2F2ZWQiICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBwcnVuZSAtLWV4cGlyZT1ub3cgJiYKKwl2ZXJib3NlIGdpdCBjYXQtZmlsZSAtZSAkcmVjb3ZlcmFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay1yZWZzIGRvZXMgbm90IHNpbGVudGx5IGRlbGV0ZSBicm9rZW4gbG9vc2UgcmVmJyAnCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lICYmCisJZWNobyAkbWlzc2luZyA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIHdlIGRvIG5vdCB3YW50IHRvIGNvdW50IG9uIHJ1bm5pbmcgcGFjay1yZWZzIHRvCisjIGFjdHVhbGx5IHBhY2sgaXQsIGFzIGl0IGlzIHBlcmZlY3RseSByZWFzb25hYmxlIHRvCisjIHNraXAgcHJvY2Vzc2luZyBhIGJyb2tlbiByZWYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBwYWNrZWQtcmVmcyBmaWxlIHdpdGggYnJva2VuIHJlZicgJworCXJtIC1mIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwljYXQgPi5naXQvcGFja2VkLXJlZnMgPDwtRU9GICYmCisJJG1pc3NpbmcgcmVmcy9oZWFkcy9tYXN0ZXIKKwkkcmVjb3ZlcmFibGUgcmVmcy9oZWFkcy9vdGhlcgorCUVPRgorCWVjaG8gJG1pc3NpbmcgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay1yZWZzIGRvZXMgbm90IHNpbGVudGx5IGRlbGV0ZSBicm9rZW4gcGFja2VkIHJlZicgJworCWdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay1yZWZzIGRvZXMgbm90IGRyb3AgYnJva2VuIHJlZnMgZHVyaW5nIGRlbGV0aW9uJyAnCisJZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9vdGhlciAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzEzLXBhY2stYm91bmRzLWNoZWNrcy5zaCBiL3QvdDUzMTMtcGFjay1ib3VuZHMtY2hlY2tzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhNDU1N2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzEzLXBhY2stYm91bmRzLWNoZWNrcy5zaApAQCAtMCwwICsxLDE5NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2JvdW5kcy1jaGVja2luZyBvZiBhY2Nlc3MgdG8gbW1hcHBlZCBvbi1kaXNrIGZpbGUgZm9ybWF0cycKKy4gLi90ZXN0LWxpYi5zaAorCitjbGVhcl9iYXNlICgpIHsKKwl0ZXN0X3doZW5fZmluaXNoZWQgJ3Jlc3RvcmVfYmFzZScgJiYKKwlybSAtZiAkYmFzZQorfQorCityZXN0b3JlX2Jhc2UgKCkgeworCWNwIGJhc2UtYmFja3VwLyogLmdpdC9vYmplY3RzL3BhY2svCit9CisKK2RvX3BhY2sgKCkgeworCXBhY2tfb2JqZWN0cz0kMTsgc2hpZnQKKwlzaGExPSQoCisJCWZvciBpIGluICRwYWNrX29iamVjdHMKKwkJZG8KKwkJCWVjaG8gJGkKKwkJZG9uZSB8IGdpdCBwYWNrLW9iamVjdHMgIiRAIiAuZ2l0L29iamVjdHMvcGFjay9wYWNrCisJKSAmJgorCXBhY2s9LmdpdC9vYmplY3RzL3BhY2svcGFjay0kc2hhMS5wYWNrICYmCisJaWR4PS5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHNoYTEuaWR4ICYmCisJY2htb2QgK3cgJHBhY2sgJGlkeCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAncm0gLWYgIiRwYWNrIiAiJGlkeCInCit9CisKK211bmdlICgpIHsKKwlwcmludGYgIiQzIiB8IGRkIG9mPSIkMSIgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz0kMgorfQorCisjIE9mZnNldCBpbiBhIHYyIC5pZHggdG8gaXRzIGluaXRpYWwgYW5kIGV4dGVuZGVkIG9mZnNldCB0YWJsZXMuIEZvciBhbiBpbmRleAorIyB3aXRoICJuciIgb2JqZWN0cywgdGhpcyBpczoKKyMKKyMgICBtYWdpYyg0KSArIHZlcnNpb24oNCkgKyBmYW4tb3V0KDQqMjU2KSArIHNoYTFzKDIwKm5yKSArIGNyYyg0Km5yKSwKKyMKKyMgZm9yIHRoZSBpbml0aWFsLCBhbmQgYW5vdGhlciBvZnMoNCpucikgcGFzdCB0aGF0IGZvciB0aGUgZXh0ZW5kZWQuCisjCitvZnNfdGFibGUgKCkgeworCWVjaG8gJCgoNCArIDQgKyA0KjI1NiArICQodGVzdF9vaWQgcmF3c3opKiQxICsgNCokMSkpCit9CitleHRlbmRlZF90YWJsZSAoKSB7CisJZWNobyAkKCgkKG9mc190YWJsZSAiJDEiKSArIDQqJDEpKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3Rfb2lkX2luaXQgJiYKKwl0ZXN0X29pZF9jYWNoZSA8PC1FT0YKKwlvaWQwMDAgc2hhMToxNDg1CisJb2lkMDAwIHNoYTI1Njo0MjIyCisKKwlvaWRmZmYgc2hhMTo3NAorCW9pZGZmZiBzaGEyNTY6MTM1MAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYmFzZSBwYWNrZmlsZSBhbmQgdmFyaWFibGVzJyAnCisJIyB0aGUgaGFzaCBvZiB0aGlzIGNvbnRlbnQgc3RhcnRzIHdpdGggZmYsIHdoaWNoCisJIyBtYWtlcyBzb21lIGxhdGVyIGNvbXB1dGF0aW9ucyBtdWNoIHNpbXBsZXIKKwllY2hvICQodGVzdF9vaWQgb2lkZmZmKSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCWdpdCByZXBhY2sgLWFkICYmCisJYmFzZT0kKGVjaG8gLmdpdC9vYmplY3RzL3BhY2svKikgJiYKKwljaG1vZCArdyAkYmFzZSAmJgorCW1rZGlyIGJhc2UtYmFja3VwICYmCisJY3AgJGJhc2UgYmFzZS1iYWNrdXAvICYmCisJb2JqZWN0PSQoZ2l0IHJldi1wYXJzZSBIRUFEOmZpbGUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2svaW5kZXggb2JqZWN0IGNvdW50IG1pc21hdGNoJyAnCisJZG9fcGFjayAkb2JqZWN0ICYmCisJbXVuZ2UgJHBhY2sgOCAiXDM3N1wwXDBcMCIgJiYKKwljbGVhcl9iYXNlICYmCisKKwkjIFdlIGVudW1lcmF0ZSB0aGUgb2JqZWN0cyBmcm9tIHRoZSBjb21wbGV0ZWx5LWZpbmUKKwkjIC5pZHgsIGJ1dCBub3RpY2UgbGF0ZXIgdGhhdCB0aGUgLnBhY2sgaXMgYm9ndXMKKwkjIGFuZCBmYWlsIHRvIHNob3cgYW55IGRhdGEuCisJZWNobyAiJG9iamVjdCBtaXNzaW5nIiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIC0tYmF0Y2gtYWxsLW9iamVjdHMgLS1iYXRjaC1jaGVjayA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyAuLi5hbmQgaGVyZSBmYWlsIHRvIGxvYWQgdGhlIG9iamVjdCAod2l0aG91dCBzZWdmYXVsdGluZyksCisJIyBidXQgZmFsbGJhY2sgdG8gYSBnb29kIGNvcHkgaWYgYXZhaWxhYmxlLgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRvYmplY3QgJiYKKwlyZXN0b3JlX2Jhc2UgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiAkb2JqZWN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmaWxlIGFjdHVhbCAmJgorCisJIyAuLi5hbmQgbWFrZSBzdXJlIHRoYXQgaW5kZXgtcGFjayAtLXZlcmlmeSwgd2hpY2ggaGFzIGl0cworCSMgb3duIHJlYWRpbmcgcm91dGluZXMsIGRvZXMgbm90IHNlZ2ZhdWx0LgorCXRlc3RfbXVzdF9mYWlsIGdpdCBpbmRleC1wYWNrIC0tdmVyaWZ5ICRwYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hdGNoZWQgYm9ndXMgb2JqZWN0IGNvdW50JyAnCisJZG9fcGFjayAkb2JqZWN0ICYmCisJbXVuZ2UgJHBhY2sgOCAiXDM3N1wwXDBcMCIgJiYKKwltdW5nZSAkaWR4ICQoKDI1NSAqIDQpKSAiXDM3N1wwXDBcMCIgJiYKKwljbGVhcl9iYXNlICYmCisKKwkjIFVubGlrZSBhYm92ZSwgd2Ugc2hvdWxkIG5vdGljZSBlYXJseSB0aGF0IHRoZSAuaWR4IGlzIHRvdGFsbHkKKwkjIGJvZ3VzLCBhbmQgbm90IGV2ZW4gZW51bWVyYXRlIGl0cyBjb250ZW50cy4KKwlnaXQgY2F0LWZpbGUgLS1iYXRjaC1hbGwtb2JqZWN0cyAtLWJhdGNoLWNoZWNrID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwkjIEJ1dCBhcyBiZWZvcmUsIHdlIGNhbiBkbyB0aGUgc2FtZSBvYmplY3QtYWNjZXNzIGNoZWNrcy4KKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkb2JqZWN0ICYmCisJcmVzdG9yZV9iYXNlICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgJG9iamVjdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZmlsZSBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBpbmRleC1wYWNrIC0tdmVyaWZ5ICRwYWNrCisnCisKKyMgTm90ZSB0aGF0IHdlIGNhbm5vdCBjaGVjayB0aGUgZmFsbGJhY2sgY2FzZSBmb3IgdGhlc2UKKyMgZnVydGhlciAuaWR4IHRlc3RzLCBhcyB3ZSBub3RpY2UgdGhlIHByb2JsZW0gaW4gZnVuY3Rpb25zCisjIHdob3NlIGludGVyZmFjZSBkb2Vzbid0IGFsbG93IGFuIGVycm9yIHJldHVybiAobGlrZSB1c2VfcGFjaygpKSwKKyMgYW5kIHRodXMgd2UganVzdCBkaWUoKS4KKyMKKyMgVGhlcmUncyBhbHNvIG5vIHBvaW50IGluIGRvaW5nIGVudW1lcmF0aW9uIHRlc3RzLCBhcworIyB3ZSBhcmUgbXVuZ2luZyBvZmZzZXRzIGhlcmUsIHdoaWNoIGFyZSBhYm91dCBsb29raW5nIHVwCisjIHNwZWNpZmljIG9iamVjdHMuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JvZ3VzIG9iamVjdCBvZmZzZXQgKHYxKScgJworCWRvX3BhY2sgJG9iamVjdCAtLWluZGV4LXZlcnNpb249MSAmJgorCW11bmdlICRpZHggJCgoNCAqIDI1NikpICJcMzc3XDBcMFwwIiAmJgorCWNsZWFyX2Jhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkb2JqZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLS12ZXJpZnkgJHBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYm9ndXMgb2JqZWN0IG9mZnNldCAodjIsIG5vIG1zYiknICcKKwlkb19wYWNrICRvYmplY3QgLS1pbmRleC12ZXJzaW9uPTIgJiYKKwltdW5nZSAkaWR4ICQob2ZzX3RhYmxlIDEpICJcMFwzNzdcMFwwIiAmJgorCWNsZWFyX2Jhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkb2JqZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLS12ZXJpZnkgJHBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYm9ndXMgb2Zmc2V0IGludG8gdjIgZXh0ZW5kZWQgdGFibGUnICcKKwlkb19wYWNrICRvYmplY3QgLS1pbmRleC12ZXJzaW9uPTIgJiYKKwltdW5nZSAkaWR4ICQob2ZzX3RhYmxlIDEpICJcMzc3XDBcMFwwIiAmJgorCWNsZWFyX2Jhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkb2JqZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLS12ZXJpZnkgJHBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYm9ndXMgb2Zmc2V0IGluc2lkZSB2MiBleHRlbmRlZCB0YWJsZScgJworCSMgV2UgbmVlZCB0d28gb2JqZWN0cyBoZXJlLCBzbyB3ZSBjYW4gcGxhdXNpYmx5IHJlcXVpcmUKKwkjIGFuIGV4dGVuZGVkIHRhYmxlIChpZiB0aGUgZmlyc3Qgb2JqZWN0IHdlcmUgbGFyZ2VyIHRoYW4gMl4zMSkuCisJIworCSMgTm90ZSB0aGF0IHRoZSB2YWx1ZSBpcyBpbXBvcnRhbnQgaGVyZS4gV2Ugd2FudCAkb2JqZWN0IGFzCisJIyB0aGUgc2Vjb25kIGVudHJ5IGluIHNvcnRlZC1oYXNoIG9yZGVyLiBUaGUgaGFzaCBvZiB0aGlzIG9iamVjdCBzdGFydHMKKwkjIHdpdGggIjAwMCIsIHdoaWNoIHNvcnRzIGJlZm9yZSB0aGF0IG9mICRvYmplY3QgKHdoaWNoIHN0YXJ0cworCSMgd2l0aCAiZmZmIikuCisJc2Vjb25kPSQodGVzdF9vaWQgb2lkMDAwIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJZG9fcGFjayAiJG9iamVjdCAkc2Vjb25kIiAtLWluZGV4LXZlcnNpb249MiAmJgorCisJIyBXZSBoYXZlIHRvIG1ha2UgZXh0cmEgcm9vbSBmb3IgdGhlIHRhYmxlLCBzbyB3ZSBjYW5ub3QKKwkjIGp1c3QgbXVuZ2UgaW4gcGxhY2UgYXMgdXN1YWwuCisJeworCQlkZCBpZj0kaWR4IGJzPTEgY291bnQ9JCgoJChvZnNfdGFibGUgMikgKyA0KSkgJiYKKwkJcHJpbnRmICJcMjAwXDBcMFwwIiAmJgorCQlwcmludGYgIlwzNzdcMFwwXDBcMFwwXDBcMCIgJiYKKwkJZGQgaWY9JGlkeCBicz0xIHNraXA9JChleHRlbmRlZF90YWJsZSAyKQorCX0gPnRtcCAmJgorCW12IHRtcCAiJGlkeCIgJiYKKwljbGVhcl9iYXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJG9iamVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBpbmRleC1wYWNrIC0tdmVyaWZ5ICRwYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JvZ3VzIE9GU19ERUxUQSBpbiBwYWNrZmlsZScgJworCSMgR2VuZXJhdGUgYSBwYWNrIHdpdGggYSBkZWx0YSBpbiBpdC4KKwliYXNlPSQodGVzdC10b29sIGdlbnJhbmRvbSBmb28gMzAwMCB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIC13KSAmJgorCWRlbHRhPSQodGVzdC10b29sIGdlbnJhbmRvbSBmb28gMjAwMCB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIC13KSAmJgorCWRvX3BhY2sgIiRiYXNlICRkZWx0YSIgLS1kZWx0YS1iYXNlLW9mZnNldCAmJgorCXJtIC1mIC5naXQvb2JqZWN0cy8/Py8qICYmCisKKwkjIERvdWJsZSBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIGRlbHRhIHdlIGV4cGVjdC4KKwllY2hvICRiYXNlID5leHBlY3QgJiYKKwllY2hvICRkZWx0YSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrPSIlKGRlbHRhYmFzZSkiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIE5vdyBjb3JydXB0IGl0LiBXZSBhc3N1bWUgdGhlIHZhcmludCBzaXplIGZvciB0aGUgZGVsdGEgaXMgc21hbGwKKwkjIGVub3VnaCB0byBmaXQgaW4gdGhlIGZpcnN0IGJ5dGUgKHdoaWNoIGl0IHNob3VsZCBiZSwgc2luY2UgaXQKKwkjIGlzIGEgcHVyZSBkZWxldGlvbiBmcm9tIHRoZSBiYXNlKSwgYW5kIHRoYXQgb3JpZ2luYWwgb2ZzX2RlbHRhCisJIyB0YWtlcyAyIGJ5dGVzICh3aGljaCBpdCBzaG91bGQsIGFzIGl0IHNob3VsZCBiZSB+MzAwMCkuCisJb2ZzPSQoZ2l0IHNob3ctaW5kZXggPCRpZHggfCBncmVwICRkZWx0YSB8IGN1dCAtZCIgIiAtZjEpICYmCisJbXVuZ2UgJHBhY2sgJCgoJG9mcyArIDEpKSAiXDE3N1wzNzciICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGRlbHRhID4vZGV2L251bGwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzE0LXBhY2stY3ljbGUtZGV0ZWN0aW9uLnNoIGIvdC90NTMxNC1wYWNrLWN5Y2xlLWRldGVjdGlvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYWVjODYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTMxNC1wYWNrLWN5Y2xlLWRldGVjdGlvbi5zaApAQCAtMCwwICsxLDExMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgaGFuZGxpbmcgb2YgaW50ZXItcGFjayBkZWx0YSBjeWNsZXMgZHVyaW5nIHJlcGFjaworCitUaGUgZ29hbCBoZXJlIGlzIHRvIGNyZWF0ZSBhIHNpdHVhdGlvbiB3aGVyZSB3ZSBoYXZlIHR3byBibG9icywgQSBhbmQgQiwgd2l0aCBBCithcyBhIGRlbHRhIGFnYWluc3QgQiBpbiBvbmUgcGFjaywgYW5kIHZpY2UgdmVyc2EgaW4gdGhlIG90aGVyLiBUaGVuIGlmIHdlIGNhbgorcGVyc3VhZGUgYSBmdWxsIHJlcGFjayB0byBmaW5kIEEgZnJvbSBvbmUgcGFjayBhbmQgQiBmcm9tIHRoZSBvdGhlciwgdGhhdCB3aWxsCitnaXZlIHVzIGEgY3ljbGUgd2hlbiB3ZSBhdHRlbXB0IHRvIHJldXNlIHRob3NlIGRlbHRhcy4KKworVGhlIHRyaWNrIGlzIGluIHRoZSAicGVyc3VhZGUiIHN0ZXAsIGFzIGl0IGRlcGVuZHMgb24gdGhlIGludGVybmFscyBvZiBob3cKK3BhY2stb2JqZWN0cyBwaWNrcyB3aGljaCBwYWNrIHRvIHJldXNlIHRoZSBkZWx0YXMgZnJvbS4gQnV0IHdlIGNhbiBhc3N1bWUKK3RoYXQgaXQgZG9lcyBzbyBpbiBvbmUgb2YgdHdvIGdlbmVyYWwgc3RyYXRlZ2llczoKKworIDEuIFVzaW5nIGEgc3RhdGljIG9yZGVyaW5nIG9mIHBhY2tzLiBJbiB0aGlzIGNhc2UsIG5vIGludGVyLXBhY2sgY3ljbGVzIGNhbgorICAgIGhhcHBlbi4gQW55IG9iamVjdHMgd2l0aCBhIGRlbHRhIHJlbGF0aW9uc2hpcCBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHNhbWUKKyAgICBwYWNrIChpLmUuLCBubyAiLS10aGluIiBwYWNrcyBvbiBkaXNrKSwgc28gd2Ugd2lsbCBmaW5kIGFsbCByZWxhdGVkIG9iamVjdHMKKyAgICBmcm9tIHRoYXQgcGFjay4gU28gYXNzdW1pbmcgdGhlcmUgYXJlIG5vIGN5Y2xlcyB3aXRoaW4gYSBzaW5nbGUgcGFjayAoYW5kCisgICAgd2UgYXZvaWQgZ2VuZXJhdGluZyB0aGVtIHZpYSBwYWNrLW9iamVjdHMgb3IgaW1wb3J0aW5nIHRoZW0gdmlhCisgICAgaW5kZXgtcGFjayksIHRoZW4gb3VyIHJlc3VsdCB3aWxsIGhhdmUgbm8gY3ljbGVzLgorCisgICAgU28gdGhpcyBjYXNlIHNob3VsZCBwYXNzIHRoZSB0ZXN0cyBubyBtYXR0ZXIgaG93IHdlIGFycmFuZ2UgdGhpbmdzLgorCisgMi4gUGlja2luZyB0aGUgbmV4dCBwYWNrIHRvIGV4YW1pbmUgYmFzZWQgb24gbG9jYWxpdHkgKGkuZS4sIHdoZXJlIHdlIGZvdW5kCisgICAgc29tZXRoaW5nIGVsc2UgcmVjZW50bHkpLgorCisgICAgSW4gdGhpcyBjYXNlLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGZpbmQgdGhlIGRlbHRhIHZlcnNpb25zIG9mIEEgYW5kCisgICAgQiBhbmQgbm90IHRoZWlyIGJhc2UgdmVyc2lvbnMuIFdlIGNhbiBkbyB0aGlzIGJ5IHB1dHRpbmcgdHdvIGJsb2JzIGluIGVhY2gKKyAgICBwYWNrLiBUaGUgZmlyc3QgaXMgYSAiZHVtbXkiIGJsb2IgdGhhdCBjYW4gb25seSBiZSBmb3VuZCBpbiB0aGUgcGFjayBpbgorICAgIHF1ZXN0aW9uLiAgQW5kIHRoZW4gdGhlIHNlY29uZCBpcyB0aGUgYWN0dWFsIGRlbHRhIHdlIHdhbnQgdG8gZmluZC4KKworICAgIFRoZSB0d28gYmxvYnMgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBzYW1lIHRyZWUsIG5vdCBwcmVzZW50IGluIG90aGVyIHRyZWVzLAorICAgIGFuZCB0aGUgZHVtbXkgcGF0aG5hbWUgbXVzdCBzb3J0IGJlZm9yZSB0aGUgZGVsdGEgcGF0aC4KKworVGhlIHNldHVwIGJlbG93IGZvY3VzZXMgb24gY2FzZSAyLiBXZSBoYXZlIHR3byBjb21taXRzIEhFQUQgYW5kIEhFQUReLCBlYWNoCit3aGljaCBoYXMgdHdvIGZpbGVzOiAiZHVtbXkiIGFuZCAiZmlsZSIuIFRoZW4gd2UgY2FuIG1ha2UgdHdvIHBhY2tzIHdoaWNoCitjb250YWluOgorCisgIFtwYWNrIG9uZV0KKyAgSEVBRDpkdW1teQorICBIRUFEOmZpbGUgIChhcyBkZWx0YSBhZ2FpbnN0IEhFQUReOmZpbGUpCisgIEhFQUReOmZpbGUgKGFzIGJhc2UpCisKKyAgW3BhY2sgdHdvXQorICBIRUFEXjpkdW1teQorICBIRUFEXjpmaWxlIChhcyBkZWx0YSBhZ2FpbnN0IEhFQUQ6ZmlsZSkKKyAgSEVBRDpmaWxlICAoYXMgYmFzZSkKKworVGhlbiBubyBtYXR0ZXIgd2hpY2ggb3JkZXIgd2Ugc3RhcnQgbG9va2luZyBhdCB0aGUgcGFja3MgaW4sIHdlIGtub3cgdGhhdCB3ZQord2lsbCBhbHdheXMgZmluZCBhIGRlbHRhIGZvciAiZmlsZSIsIGJlY2F1c2UgaXRzIGxvb2t1cCB3aWxsIGFsd2F5cyBjb21lCitpbW1lZGlhdGVseSBhZnRlciB0aGUgbG9va3VwIGZvciAiZHVtbXkiLgorJworLiAuL3Rlc3QtbGliLnNoCisKKworCisjIENyZWF0ZSBhIHBhY2sgY29udGFpbmluZyB0aGUgdHJlZSAkMSBhbmQgYmxvYiAkMTpmaWxlLCB3aXRoCisjIHRoZSBsYXR0ZXIgc3RvcmVkIGFzIGEgZGVsdGEgYWdhaW5zdCAkMjpmaWxlLgorIworIyBXZSBjb252aW5jZSBwYWNrLW9iamVjdHMgdG8gbWFrZSB0aGUgZGVsdGEgaW4gdGhlIGRpcmVjdGlvbiBvZiBvdXIgY2hvb3NpbmcKKyMgYnkgbWFya2luZyAkMiBhcyBhIHByZWZlcnJlZC1iYXNlIGVkZ2UuIFRoYXQgcmVzdWx0cyBpbiAkMTpmaWxlIGFzIGEgdGhpbgorIyBkZWx0YSwgYW5kIGluZGV4LXBhY2sgY29tcGxldGVzIGl0IGJ5IGFkZGluZyAkMjpmaWxlIGFzIGEgYmFzZS4KKyMKKyMgTm90ZSB0aGF0IHRoZSB0d28gdmFyaWFudHMgb2YgImZpbGUiIG11c3QgYmUgc2ltaWxhciBlbm91Z2ggdG8gY29udmluY2UgZ2l0CisjIHRvIGNyZWF0ZSB0aGUgZGVsdGEuCittYWtlX3BhY2sgKCkgeworCXsKKwkJcHJpbnRmICclc1xuJyAiLSQoZ2l0IHJldi1wYXJzZSAkMikiCisJCXByaW50ZiAnJXMgZHVtbXlcbicgIiQoZ2l0IHJldi1wYXJzZSAkMTpkdW1teSkiCisJCXByaW50ZiAnJXMgZmlsZVxuJyAiJChnaXQgcmV2LXBhcnNlICQxOmZpbGUpIgorCX0gfAorCWdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgfAorCWdpdCBpbmRleC1wYWNrIC0tc3RkaW4gLS1maXgtdGhpbgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3QtdG9vbCBnZW5yYW5kb20gYmFzZSA0MDk2ID5iYXNlICYmCisJZm9yIGkgaW4gb25lIHR3bworCWRvCisJCSMgd2Ugd2FudCBzaGFyZWQgY29udGVudCBoZXJlIHRvIGVuY291cmFnZSBkZWx0YXMuLi4KKwkJY3AgYmFzZSBmaWxlICYmCisJCWVjaG8gJGkgPj5maWxlICYmCisKKwkJIyAuLi53aGVyZWFzIGR1bW15IHNob3VsZCBiZSBzaG9ydCwgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudAorCQkjIGRlbHRhcyB0aGF0IHdvdWxkIGNyZWF0ZSBkdXBsaWNhdGVzIHdoZW4gd2UgLS1maXgtdGhpbgorCQllY2hvICRpID5kdW1teSAmJgorCisJCWdpdCBhZGQgZmlsZSBkdW1teSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAkaSB8fAorCQlyZXR1cm4gMQorCWRvbmUgJiYKKworCW1ha2VfcGFjayBIRUFEXiBIRUFEICYmCisJbWFrZV9wYWNrIEhFQUQgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrJyAnCisJIyBXZSBmaXJzdCB3YW50IHRvIGNoZWNrIHRoYXQgd2UgZG8gbm90IGhhdmUgYW55IGludGVybmFsIGVycm9ycywKKwkjIGFuZCBhbHNvIHRoYXQgd2UgZG8gbm90IGhpdCB0aGUgbGFzdC1kaXRjaCBjeWNsZS1icmVha2luZyBjb2RlCisJIyBpbiB3cml0ZV9vYmplY3QoKSwgd2hpY2ggd2lsbCBpc3N1ZSBhIHdhcm5pbmcgdG8gc3RkZXJyLgorCWdpdCByZXBhY2sgLWFkIDI+c3RkZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHN0ZGVyciAmJgorCisJIyBBbmQgdGhlbiBkb3VibGUtY2hlY2sgdGhhdCB0aGUgcmVzdWx0aW5nIHBhY2sgaXMgdXNhYmxlIChpLmUuLAorCSMgd2UgZGlkIG5vdCBmYWlsIHRvIG5vdGljZSBhbnkgY3ljbGVzKS4gV2Uga25vdyB3ZSBhcmUgYWNjZXNzaW5nCisJIyB0aGUgb2JqZWN0cyB2aWEgdGhlIG5ldyBwYWNrIGhlcmUsIGJlY2F1c2UgInJlcGFjayAtZCIgd2lsbCBoYXZlCisJIyByZW1vdmVkIHRoZSBvdGhlcnMuCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRDpmaWxlID4vZGV2L251bGwgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlID4vZGV2L251bGwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzE1LXBhY2stb2JqZWN0cy1jb21wcmVzc2lvbi5zaCBiL3QvdDUzMTUtcGFjay1vYmplY3RzLWNvbXByZXNzaW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmOTcwZDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzE1LXBhY2stb2JqZWN0cy1jb21wcmVzc2lvbi5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGFjay1vYmplY3QgY29tcHJlc3Npb24gY29uZmlndXJhdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gdGVzdC1saWIuc2ggdG9nZXRoZXIgd2l0aCB0aGUKKyMgY29weSBpbiB0MDAyMSBhZnRlciBib3RoIHRvcGljcyBoYXZlIGdyYWR1YXRlZCB0byAnbWFzdGVyJy4KK2ZpbGVfc2l6ZSAoKSB7CisJdGVzdC10b29sIHBhdGgtdXRpbHMgZmlsZS1zaXplICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJcHJpbnRmICIlMjAwMDAwMHMiIFggfAorCWdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluID5vYmplY3QtbmFtZSAmJgorCSMgbWFrZSBzdXJlIGl0IHJlc3VsdGVkIGluIGEgbG9vc2Ugb2JqZWN0CisJb2I9JChzZWQgLWUgInMvXCguLlwpLiovXDEvIiBvYmplY3QtbmFtZSkgJiYKKwlqZWN0PSQoc2VkIC1lICJzLy4uXCguKlwpL1wxLyIgb2JqZWN0LW5hbWUpICYmCisJdGVzdCAtZiAuZ2l0L29iamVjdHMvJG9iLyRqZWN0CisnCisKK3doaWxlIHJlYWQgZXhwZWN0IGNvbmZpZworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJwYWNrLW9iamVjdHMgd2l0aCAkY29uZmlnIiAnCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgcGFjay0qLioiICYmCisJCWdpdCAkY29uZmlnIHBhY2stb2JqZWN0cyBwYWNrIDxvYmplY3QtbmFtZSAmJgorCQlzej0kKGZpbGVfc2l6ZSBwYWNrLSoucGFjaykgJiYKKwkJY2FzZSAiJGV4cGVjdCIgaW4KKwkJc21hbGwpIHRlc3QgIiRzeiIgLWxlIDEwMDAwMCA7OworCQlsYXJnZSkgdGVzdCAiJHN6IiAtZ2UgMTAwMDAwIDs7CisJCWVzYWMKKwknCitkb25lIDw8XEVPRgorbGFyZ2UgLWMgY29yZS5jb21wcmVzc2lvbj0wCitzbWFsbCAtYyBjb3JlLmNvbXByZXNzaW9uPTkKK2xhcmdlIC1jIGNvcmUuY29tcHJlc3Npb249MCAtYyBwYWNrLmNvbXByZXNzaW9uPTAKK2xhcmdlIC1jIGNvcmUuY29tcHJlc3Npb249OSAtYyBwYWNrLmNvbXByZXNzaW9uPTAKK3NtYWxsIC1jIGNvcmUuY29tcHJlc3Npb249MCAtYyBwYWNrLmNvbXByZXNzaW9uPTkKK3NtYWxsIC1jIGNvcmUuY29tcHJlc3Npb249OSAtYyBwYWNrLmNvbXByZXNzaW9uPTkKK2xhcmdlIC1jIHBhY2suY29tcHJlc3Npb249MAorc21hbGwgLWMgcGFjay5jb21wcmVzc2lvbj05CitFT0YKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzE2LXBhY2stZGVsdGEtZGVwdGguc2ggYi90L3Q1MzE2LXBhY2stZGVsdGEtZGVwdGguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGYwNmM0MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMTYtcGFjay1kZWx0YS1kZXB0aC5zaApAQCAtMCwwICsxLDk3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGFjay1vYmplY3RzIGJyZWFrcyBsb25nIGNyb3NzLXBhY2sgZGVsdGEgY2hhaW5zJworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGhpcyBtaXJyb3JzIGEgcmVwZWF0ZWQgcHVzaCBzZXR1cDoKKyMKKyMgMS4gQSBjbGllbnQgcmVwZWF0ZWRseSBtb2RpZmllcyBzb21lIGZpbGVzLCBtYWtlcyBhCisjICAgICAgY29tbWl0LCBhbmQgcHVzaGVzIHRoZSByZXN1bHQuIEl0IGRvZXMgdGhpcyBOIHRpbWVzCisjICAgICAgYmVmb3JlIHdlIGdldCBhcm91bmQgdG8gcmVwYWNraW5nLgorIworIyAyLiBFYWNoIHB1c2ggZ2VuZXJhdGVzIGEgdGhpbiBwYWNrIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mCisjICAgIHZhcmlvdXMgb2JqZWN0cy4gTGV0J3MgY29uc2lkZXIgc29tZSBmaWxlIGluIHRoZSByb290IHRyZWUKKyMgICAgd2hpY2ggaXMgdXBkYXRlZCBpbiBlYWNoIGNvbW1pdC4KKyMKKyMgICAgV2hlbiBnZW5lcmF0aW5nIHB1c2ggbnVtYmVyIFgsIHdlIGZlZWQgY29tbWl0IFgtMSAoYW5kCisjICAgIHRodXMgYmxvYiBYLTEpIGFzIGEgcHJlZmVycmVkIGJhc2UuIFRoZSByZXN1bHRpbmcgcGFjayBoYXMKKyMgICAgYmxvYiBYIGFzIGEgdGhpbiBkZWx0YSBhZ2FpbnN0IGJsb2IgWC0xLgorIworIyAgICBPbiB0aGUgcmVjZWl2aW5nIGVuZCwgImluZGV4LXBhY2sgLS1maXgtdGhpbiIgd2lsbAorIyAgICBjb21wbGV0ZSB0aGUgcGFjayB3aXRoIGEgYmFzZSBjb3B5IG9mIGJsb2IgWC0xLgorIworIyAzLiBJbiBvbGRlciB2ZXJzaW9ucyBvZiBnaXQsIGlmIHdlIHVzZWQgdGhlIGRlbHRhIGZyb20KKyMgICAgcGFjayBYLCB0aGVuIHdlJ2QgYWx3YXlzIGZpbmQgYmxvYiBYLTEgYXMgYSBiYXNlIGluIHRoZQorIyAgICBzYW1lIHBhY2sgKGFuZCBnZW5lcmF0ZSBhIGZyZXNoIGRlbHRhKS4KKyMKKyMgICAgQnV0IHdpdGggdGhlIHBhY2sgbXJ1LCB3ZSBqdW1wIGZyb20gZGVsdGEgdG8gZGVsdGEKKyMgICAgZm9sbG93aW5nIHRoZSB0cmF2ZXJzYWwgb3JkZXI6CisjCisjICAgICAgYS4gV2UgZ3JhYiBibG9iIFggZnJvbSBwYWNrIFggYXMgYSBkZWx0YSwgcHV0dGluZyBpdCBhdAorIyAgICAgICAgIHRoZSB0aXAgb2Ygb3VyIG1ydSBsaXN0LgorIworIyAgICAgIGIuIEV2ZW50dWFsbHkgd2UgbW92ZSBvbnRvIGNvbW1pdCBYLTEuIFdlIG5lZWQgb3RoZXIKKyMgICAgICAgICBvYmplY3RzIHdoaWNoIGFyZSBvbmx5IGluIHBhY2sgWC0xIChpbiB0aGUgdGVzdCBjb2RlCisjICAgICAgICAgYmVsb3csIGl0J3MgdGhlIGNvbnRhaW5pbmcgdHJlZSkuIFRoYXQgcHV0cyBwYWNrIFgtMQorIyAgICAgICAgIGF0IHRoZSB0aXAgb2Ygb3VyIG1ydSBsaXN0LgorIworIyAgICAgIGMuIEV2ZW50dWFsbHkgd2UgbG9vayBmb3IgYmxvYiBYLTEsIGFuZCB3ZSBmaW5kIHRoZQorIyAgICAgICAgIHZlcnNpb24gaW4gcGFjayBYLTEgKGJlY2F1c2UgaXQncyB0aGUgbXJ1IHRpcCkuCisjCisjIE5vdyB3ZSBoYXZlIGJsb2IgWCBhcyBhIGRlbHRhIGFnYWluc3QgWC0xLCB3aGljaCBpcyBhIGRlbHRhCisjIGFnYWluc3QgWC0yLCBhbmQgc28gZm9ydGguCisjCisjIEluIHRoZSByZWFsIHdvcmxkLCB0aGVzZSBzbWFsbCBwdXNoZXMgd291bGQgZ2V0IGV4cGxvZGVkIGJ5CisjIHVucGFjay1vYmplY3RzIHJhdGhlciB0aGFuICJpbmRleC1wYWNrIC0tZml4LXRoaW4iLCBidXQgdGhlCisjIHNhbWUgcHJpbmNpcGxlIGFwcGxpZXMgdG8gbGFyZ2VyIHB1c2hlcyAodGhleSBvbmx5IG5lZWQgb25lCisjIHJlcGVhdGVkbHktbW9kaWZpZWQgZmlsZSB0byBnZW5lcmF0ZSB0aGUgZGVsdGEgY2hhaW4pLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgc2VyaWVzIG9mIHBhY2tzJyAnCisJdGVzdC10b29sIGdlbnJhbmRvbSBmb28gNDA5NiA+Y29udGVudCAmJgorCXByZXY9ICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDEwKQorCWRvCisJCWNhdCBjb250ZW50ID5maWxlICYmCisJCWVjaG8gJGkgPj5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tICRpICYmCisJCWN1cj0kKGdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0pICYmCisJCXsKKwkJCXRlc3QgLW4gIiRwcmV2IiAmJiBlY2hvICItJHByZXYiCisJCQllY2hvICRjdXIKKwkJCWVjaG8gIiQoZ2l0IHJldi1wYXJzZSA6ZmlsZSkgZmlsZSIKKwkJfSB8IGdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgPnRtcCAmJgorCQlnaXQgaW5kZXgtcGFjayAtLXN0ZGluIC0tZml4LXRoaW4gPHRtcCB8fCByZXR1cm4gMQorCQlwcmV2PSRjdXIKKwlkb25lCisnCisKK21heF9jaGFpbigpIHsKKwlnaXQgaW5kZXgtcGFjayAtLXZlcmlmeS1zdGF0LW9ubHkgIiQxIiA+b3V0cHV0ICYmCisJcGVybCAtbG5lICcKKwkgIC9jaGFpbiBsZW5ndGggPSAoXGQrKS8gYW5kICRsZW4gPSAkMTsKKwkgIEVORCB7IHByaW50ICRsZW4gfQorCScgb3V0cHV0Cit9CisKKyMgTm90ZSB0aGF0IHRoaXMgd2hvbGUgc2V0dXAgaXMgcHJldHR5IHJlbGlhbnQgb24gdGhlIGN1cnJlbnQKKyMgcGFja2luZyBoZXVyaXN0aWNzLiBXZSBkb3VibGUtY2hlY2sgdGhhdCBvdXIgdGVzdCBjYXNlCisjIGFjdHVhbGx5IHByb2R1Y2VzIGEgbG9uZyBjaGFpbi4gSWYgaXQgZG9lc24ndCwgaXQgc2hvdWxkIGJlCisjIGFkanVzdGVkIChvciBzY3JhcHBlZCBpZiB0aGUgaGV1cmlzdGljcyBoYXZlIGJlY29tZSB0b28gdW5yZWxpYWJsZSkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2tpbmcgcHJvZHVjZXMgYSBsb25nIGRlbHRhJyAnCisJIyBVc2UgLS13aW5kb3c9MCB0byBtYWtlIHN1cmUgd2UgYXJlIHNlZWluZyByZXVzZWQgZGVsdGFzLAorCSMgbm90IGNvbXB1dGluZyBhIG5ldyBsb25nIGNoYWluLgorCXBhY2s9JChnaXQgcGFjay1vYmplY3RzIC0tYWxsIC0td2luZG93PTAgPC9kZXYvbnVsbCBwYWNrKSAmJgorCWVjaG8gOSA+ZXhwZWN0ICYmCisJbWF4X2NoYWluIHBhY2stJHBhY2sucGFjayA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kZXB0aCBsaW1pdHMgZGVwdGgnICcKKwlwYWNrPSQoZ2l0IHBhY2stb2JqZWN0cyAtLWFsbCAtLWRlcHRoPTUgPC9kZXYvbnVsbCBwYWNrKSAmJgorCWVjaG8gNSA+ZXhwZWN0ICYmCisJbWF4X2NoYWluIHBhY2stJHBhY2sucGFjayA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzE3LXBhY2stb2JqZWN0cy1maWx0ZXItb2JqZWN0cy5zaCBiL3QvdDUzMTctcGFjay1vYmplY3RzLWZpbHRlci1vYmplY3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRjMDQ0NjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzE3LXBhY2stb2JqZWN0cy1maWx0ZXItb2JqZWN0cy5zaApAQCAtMCwwICsxLDQzMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwYWNrLW9iamVjdHMgdXNpbmcgb2JqZWN0IGZpbHRlcmluZycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGVzdCBibG9iOm5vbmUgZmlsdGVyLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByMScgJworCWVjaG8gIntwcmludCBcJDF9IiA+cHJpbnRfMS5hd2sgJiYKKwllY2hvICJ7cHJpbnQgXCQyfSIgPnByaW50XzIuYXdrICYmCisKKwlnaXQgaW5pdCByMSAmJgorCWZvciBuIGluIDEgMiAzIDQgNQorCWRvCisJCWVjaG8gIlRoaXMgaXMgZmlsZTogJG4iID4gcjEvZmlsZS4kbgorCQlnaXQgLUMgcjEgYWRkIGZpbGUuJG4KKwkJZ2l0IC1DIHIxIGNvbW1pdCAtbSAiJG4iCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgYmxvYiBjb3VudCBpbiBub3JtYWwgcGFja2ZpbGUnICcKKwlnaXQgLUMgcjEgbHMtZmlsZXMgLXMgZmlsZS4xIGZpbGUuMiBmaWxlLjMgZmlsZS40IGZpbGUuNSBcCisJCT5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZ2l0IC1DIHIxIHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgPmFsbC5wYWNrIDw8LUVPRiAmJgorCUhFQUQKKwlFT0YKKwlnaXQgLUMgcjEgaW5kZXgtcGFjayAuLi9hbGwucGFjayAmJgorCisJZ2l0IC1DIHIxIHZlcmlmeS1wYWNrIC12IC4uL2FsbC5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCisJZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQgfAorCWF3ayAtZiBwcmludF8xLmF3ayB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iOm5vbmUgcGFja2ZpbGUgaGFzIG5vIGJsb2JzJyAnCisJZ2l0IC1DIHIxIHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgLS1maWx0ZXI9YmxvYjpub25lID5maWx0ZXIucGFjayA8PC1FT0YgJiYKKwlIRUFECisJRU9GCisJZ2l0IC1DIHIxIGluZGV4LXBhY2sgLi4vZmlsdGVyLnBhY2sgJiYKKworCWdpdCAtQyByMSB2ZXJpZnktcGFjayAtdiAuLi9maWx0ZXIucGFjayA+dmVyaWZ5X3Jlc3VsdCAmJgorCSEgZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vcm1hbCBhbmQgYmxvYjpub25lIHBhY2tmaWxlcyBoYXZlIHNhbWUgY29tbWl0cy90cmVlcycgJworCWdpdCAtQyByMSB2ZXJpZnktcGFjayAtdiAuLi9hbGwucGFjayA+dmVyaWZ5X3Jlc3VsdCAmJgorCWdyZXAgLUUgImNvbW1pdHx0cmVlIiB2ZXJpZnlfcmVzdWx0IHwKKwlhd2sgLWYgcHJpbnRfMS5hd2sgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjEgdmVyaWZ5LXBhY2sgLXYgLi4vZmlsdGVyLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKKwlncmVwIC1FICJjb21taXR8dHJlZSIgdmVyaWZ5X3Jlc3VsdCB8CisJYXdrIC1mIHByaW50XzEuYXdrIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IGFuIGVycm9yIGZvciBtaXNzaW5nIHRyZWUgb2JqZWN0JyAnCisJZ2l0IGluaXQgcjUgJiYKKwllY2hvIGZvbyA+cjUvZm9vICYmCisJZ2l0IC1DIHI1IGFkZCBmb28gJiYKKwlnaXQgLUMgcjUgY29tbWl0IC1tICJmb28iICYmCisJZ2l0IC1DIHI1IHJldi1wYXJzZSBIRUFEXnt0cmVlfSA+dHJlZSAmJgorCWRlbD0kKHNlZCAic3wuLnwmL3wiIHRyZWUpICYmCisJcm0gcjUvLmdpdC9vYmplY3RzLyRkZWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgcjUgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCAyPmJhZF90cmVlIDw8LUVPRiAmJgorCUhFQUQKKwlFT0YKKwlncmVwICJiYWQgdHJlZSBvYmplY3QiIGJhZF90cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciB0ZXN0cyBvZiB0cmVlOjAnICcKKwlta2RpciByMS9zdWJ0cmVlICYmCisJZWNobyAiVGhpcyBpcyBhIGZpbGUgaW4gYSBzdWJ0cmVlIiA+cjEvc3VidHJlZS9maWxlICYmCisJZ2l0IC1DIHIxIGFkZCBzdWJ0cmVlL2ZpbGUgJiYKKwlnaXQgLUMgcjEgY29tbWl0IC1tIHN1YnRyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRyZWU6MCBwYWNrZmlsZSBoYXMgbm8gYmxvYnMgb3IgdHJlZXMnICcKKwlnaXQgLUMgcjEgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCAtLWZpbHRlcj10cmVlOjAgPmNvbW1pdHNvbmx5LnBhY2sgPDwtRU9GICYmCisJSEVBRAorCUVPRgorCWdpdCAtQyByMSBpbmRleC1wYWNrIC4uL2NvbW1pdHNvbmx5LnBhY2sgJiYKKwlnaXQgLUMgcjEgdmVyaWZ5LXBhY2sgLXYgLi4vY29tbWl0c29ubHkucGFjayA+b2JqcyAmJgorCSEgZ3JlcCAtRSAidHJlZXxibG9iIiBvYmpzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyYWIgdHJlZSBkaXJlY3RseSB3aGVuIHVzaW5nIHRyZWU6MCcgJworCSMgV2Ugc2hvdWxkIGdldCB0aGUgdHJlZSBzcGVjaWZpZWQgZGlyZWN0bHkgYnV0IG5vdCBpdHMgYmxvYnMgb3Igc3VidHJlZXMuCisJZ2l0IC1DIHIxIHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgLS1maWx0ZXI9dHJlZTowID5jb21taXRzb25seS5wYWNrIDw8LUVPRiAmJgorCUhFQUQ6CisJRU9GCisJZ2l0IC1DIHIxIGluZGV4LXBhY2sgLi4vY29tbWl0c29ubHkucGFjayAmJgorCWdpdCAtQyByMSB2ZXJpZnktcGFjayAtdiAuLi9jb21taXRzb25seS5wYWNrID5vYmpzICYmCisJYXdrICIvdHJlZXxibG9iL3twcmludCBcJDF9IiBvYmpzID50cmVlc19hbmRfYmxvYnMgJiYKKwlnaXQgLUMgcjEgcmV2LXBhcnNlIEhFQUQ6ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHRyZWVzX2FuZF9ibG9icworJworCisjIFRlc3QgYmxvYjpsaW1pdD08bj5ba21nXSBmaWx0ZXIuCisjIFdlIGJvdW5kYXJ5IHRlc3QgYXJvdW5kIHRoZSBzaXplIHBhcmFtZXRlci4gIFRoZSBmaWx0ZXIgaXMgc3RyaWN0bHkgbGVzcyB0aGFuCisjIHRoZSB2YWx1ZSwgc28gc2l6ZSA1MDAgYW5kIDEwMDAgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcmVzdWx0cywgYnV0IDEwMDEgc2hvdWxkCisjIGZpbHRlciBtb3JlLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByMicgJworCWdpdCBpbml0IHIyICYmCisJZm9yIG4gaW4gMTAwMCAxMDAwMAorCWRvCisJCXByaW50ZiAiJSIkbiJzIiBYID4gcjIvbGFyZ2UuJG4KKwkJZ2l0IC1DIHIyIGFkZCBsYXJnZS4kbgorCQlnaXQgLUMgcjIgY29tbWl0IC1tICIkbiIKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iIGNvdW50IGluIG5vcm1hbCBwYWNrZmlsZScgJworCWdpdCAtQyByMiBscy1maWxlcyAtcyBsYXJnZS4xMDAwIGxhcmdlLjEwMDAwID5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZ2l0IC1DIHIyIHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgPmFsbC5wYWNrIDw8LUVPRiAmJgorCUhFQUQKKwlFT0YKKwlnaXQgLUMgcjIgaW5kZXgtcGFjayAuLi9hbGwucGFjayAmJgorCisJZ2l0IC1DIHIyIHZlcmlmeS1wYWNrIC12IC4uL2FsbC5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCisJZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQgfAorCWF3ayAtZiBwcmludF8xLmF3ayB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iOmxpbWl0PTUwMCBvbWl0cyBhbGwgYmxvYnMnICcKKwlnaXQgLUMgcjIgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCAtLWZpbHRlcj1ibG9iOmxpbWl0PTUwMCA+ZmlsdGVyLnBhY2sgPDwtRU9GICYmCisJSEVBRAorCUVPRgorCWdpdCAtQyByMiBpbmRleC1wYWNrIC4uL2ZpbHRlci5wYWNrICYmCisKKwlnaXQgLUMgcjIgdmVyaWZ5LXBhY2sgLXYgLi4vZmlsdGVyLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKKwkhIGdyZXAgYmxvYiB2ZXJpZnlfcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iOmxpbWl0PTEwMDAnICcKKwlnaXQgLUMgcjIgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCAtLWZpbHRlcj1ibG9iOmxpbWl0PTEwMDAgPmZpbHRlci5wYWNrIDw8LUVPRiAmJgorCUhFQUQKKwlFT0YKKwlnaXQgLUMgcjIgaW5kZXgtcGFjayAuLi9maWx0ZXIucGFjayAmJgorCisJZ2l0IC1DIHIyIHZlcmlmeS1wYWNrIC12IC4uL2ZpbHRlci5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCisJISBncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgYmxvYjpsaW1pdD0xMDAxJyAnCisJZ2l0IC1DIHIyIGxzLWZpbGVzIC1zIGxhcmdlLjEwMDAgPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjIgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCAtLWZpbHRlcj1ibG9iOmxpbWl0PTEwMDEgPmZpbHRlci5wYWNrIDw8LUVPRiAmJgorCUhFQUQKKwlFT0YKKwlnaXQgLUMgcjIgaW5kZXgtcGFjayAuLi9maWx0ZXIucGFjayAmJgorCisJZ2l0IC1DIHIyIHZlcmlmeS1wYWNrIC12IC4uL2ZpbHRlci5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCisJZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQgfAorCWF3ayAtZiBwcmludF8xLmF3ayB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iOmxpbWl0PTEwMDAxJyAnCisJZ2l0IC1DIHIyIGxzLWZpbGVzIC1zIGxhcmdlLjEwMDAgbGFyZ2UuMTAwMDAgPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjIgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCAtLWZpbHRlcj1ibG9iOmxpbWl0PTEwMDAxID5maWx0ZXIucGFjayA8PC1FT0YgJiYKKwlIRUFECisJRU9GCisJZ2l0IC1DIHIyIGluZGV4LXBhY2sgLi4vZmlsdGVyLnBhY2sgJiYKKworCWdpdCAtQyByMiB2ZXJpZnktcGFjayAtdiAuLi9maWx0ZXIucGFjayA+dmVyaWZ5X3Jlc3VsdCAmJgorCWdyZXAgYmxvYiB2ZXJpZnlfcmVzdWx0IHwKKwlhd2sgLWYgcHJpbnRfMS5hd2sgfAorCXNvcnQgPm9ic2VydmVkICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBvYnNlcnZlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgYmxvYjpsaW1pdD0xaycgJworCWdpdCAtQyByMiBscy1maWxlcyAtcyBsYXJnZS4xMDAwID5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZ2l0IC1DIHIyIHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgLS1maWx0ZXI9YmxvYjpsaW1pdD0xayA+ZmlsdGVyLnBhY2sgPDwtRU9GICYmCisJSEVBRAorCUVPRgorCWdpdCAtQyByMiBpbmRleC1wYWNrIC4uL2ZpbHRlci5wYWNrICYmCisKKwlnaXQgLUMgcjIgdmVyaWZ5LXBhY2sgLXYgLi4vZmlsdGVyLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKKwlncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdCB8CisJYXdrIC1mIHByaW50XzEuYXdrIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGV4cGxpY2l0bHkgc3BlY2lmeWluZyBvdmVyc2l6ZWQgYmxvYiBpbiBpbnB1dCcgJworCWdpdCAtQyByMiBscy1maWxlcyAtcyBsYXJnZS4xMDAwIGxhcmdlLjEwMDAwID5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZWNobyBIRUFEID5vYmplY3RzICYmCisJZ2l0IC1DIHIyIHJldi1wYXJzZSBIRUFEOmxhcmdlLjEwMDAwID4+b2JqZWN0cyAmJgorCWdpdCAtQyByMiBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IC0tZmlsdGVyPWJsb2I6bGltaXQ9MWsgPG9iamVjdHMgPmZpbHRlci5wYWNrICYmCisJZ2l0IC1DIHIyIGluZGV4LXBhY2sgLi4vZmlsdGVyLnBhY2sgJiYKKworCWdpdCAtQyByMiB2ZXJpZnktcGFjayAtdiAuLi9maWx0ZXIucGFjayA+dmVyaWZ5X3Jlc3VsdCAmJgorCWdyZXAgYmxvYiB2ZXJpZnlfcmVzdWx0IHwKKwlhd2sgLWYgcHJpbnRfMS5hd2sgfAorCXNvcnQgPm9ic2VydmVkICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBvYnNlcnZlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgYmxvYjpsaW1pdD0xbScgJworCWdpdCAtQyByMiBscy1maWxlcyAtcyBsYXJnZS4xMDAwIGxhcmdlLjEwMDAwID5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZ2l0IC1DIHIyIHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgLS1maWx0ZXI9YmxvYjpsaW1pdD0xbSA+ZmlsdGVyLnBhY2sgPDwtRU9GICYmCisJSEVBRAorCUVPRgorCWdpdCAtQyByMiBpbmRleC1wYWNrIC4uL2ZpbHRlci5wYWNrICYmCisKKwlnaXQgLUMgcjIgdmVyaWZ5LXBhY2sgLXYgLi4vZmlsdGVyLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKKwlncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdCB8CisJYXdrIC1mIHByaW50XzEuYXdrIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vcm1hbCBhbmQgYmxvYjpsaW1pdCBwYWNrZmlsZXMgaGF2ZSBzYW1lIGNvbW1pdHMvdHJlZXMnICcKKwlnaXQgLUMgcjIgdmVyaWZ5LXBhY2sgLXYgLi4vYWxsLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKKwlncmVwIC1FICJjb21taXR8dHJlZSIgdmVyaWZ5X3Jlc3VsdCB8CisJYXdrIC1mIHByaW50XzEuYXdrIHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZ2l0IC1DIHIyIHZlcmlmeS1wYWNrIC12IC4uL2ZpbHRlci5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCisJZ3JlcCAtRSAiY29tbWl0fHRyZWUiIHZlcmlmeV9yZXN1bHQgfAorCWF3ayAtZiBwcmludF8xLmF3ayB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKKyMgVGVzdCBzcGFyc2U6cGF0aD08cGF0aD4gZmlsdGVyLgorIyAhISEhCisjIE5PVEU6IHNwYXJzZTpwYXRoIGZpbHRlciBzdXBwb3J0IGhhcyBiZWVuIGRyb3BwZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMsCisjIHNvIHRoZSB0ZXN0cyBoYXZlIGJlZW4gY2hhbmdlZCB0byBtYWtlIHN1cmUgdGhhdCB1c2luZyBpdCBmYWlscy4KKyMgISEhIQorIyBVc2UgYSBsb2NhbCBmaWxlIGNvbnRhaW5pbmcgYSBzcGFyc2UtY2hlY2tvdXQgc3BlY2lmaWNhdGlvbiB0byBmaWx0ZXIKKyMgb3V0IGJsb2JzIG5vdCByZXF1aXJlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc3BhcnNlLWNoZWNrb3V0LiAgV2UgZG8gbm90CisjIHJlcXVpcmUgc3BhcnNlLWNoZWNrb3V0IHRvIGFjdHVhbGx5IGJlIGVuYWJsZWQuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHIzJyAnCisJZ2l0IGluaXQgcjMgJiYKKwlta2RpciByMy9kaXIxICYmCisJZm9yIG4gaW4gc3BhcnNlMSBzcGFyc2UyCisJZG8KKwkJZWNobyAiVGhpcyBpcyBmaWxlOiAkbiIgPiByMy8kbgorCQlnaXQgLUMgcjMgYWRkICRuCisJCWVjaG8gIlRoaXMgaXMgZmlsZTogZGlyMS8kbiIgPiByMy9kaXIxLyRuCisJCWdpdCAtQyByMyBhZGQgZGlyMS8kbgorCWRvbmUgJiYKKwlnaXQgLUMgcjMgY29tbWl0IC1tICJzcGFyc2UiICYmCisJZWNobyBkaXIxLyA+cGF0dGVybjEgJiYKKwllY2hvIHNwYXJzZTEgPnBhdHRlcm4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iIGNvdW50IGluIG5vcm1hbCBwYWNrZmlsZScgJworCWdpdCAtQyByMyBscy1maWxlcyAtcyBzcGFyc2UxIHNwYXJzZTIgZGlyMS9zcGFyc2UxIGRpcjEvc3BhcnNlMiBcCisJCT5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZ2l0IC1DIHIzIHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgPmFsbC5wYWNrIDw8LUVPRiAmJgorCUhFQUQKKwlFT0YKKwlnaXQgLUMgcjMgaW5kZXgtcGFjayAuLi9hbGwucGFjayAmJgorCisJZ2l0IC1DIHIzIHZlcmlmeS1wYWNrIC12IC4uL2FsbC5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCisJZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQgfAorCWF3ayAtZiBwcmludF8xLmF3ayB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzcGFyc2U6cGF0aD1wYXR0ZXJuMSBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyByMyBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IFwKKwkJLS1maWx0ZXI9c3BhcnNlOnBhdGg9Li4vcGF0dGVybjEgPDwtRU9GCisJSEVBRAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgc3BhcnNlOnBhdGg9cGF0dGVybjIgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgcjMgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCBcCisJCS0tZmlsdGVyPXNwYXJzZTpwYXRoPS4uL3BhdHRlcm4yIDw8LUVPRgorCUhFQUQKKwlFT0YKKycKKworIyBUZXN0IHNwYXJzZTpvaWQ9PG9pZC1pc2g+IGZpbHRlci4KKyMgVXNlIGEgYmxvYiBjb250YWluaW5nIGEgc3BhcnNlLWNoZWNrb3V0IHNwZWNpZmljYXRpb24gdG8gZmlsdGVyCisjIG91dCBibG9icyBub3QgcmVxdWlyZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHNwYXJzZS1jaGVja291dC4gIFdlIGRvIG5vdAorIyByZXF1aXJlIHNwYXJzZS1jaGVja291dCB0byBhY3R1YWxseSBiZSBlbmFibGVkLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByNCcgJworCWdpdCBpbml0IHI0ICYmCisJbWtkaXIgcjQvZGlyMSAmJgorCWZvciBuIGluIHNwYXJzZTEgc3BhcnNlMgorCWRvCisJCWVjaG8gIlRoaXMgaXMgZmlsZTogJG4iID4gcjQvJG4KKwkJZ2l0IC1DIHI0IGFkZCAkbgorCQllY2hvICJUaGlzIGlzIGZpbGU6IGRpcjEvJG4iID4gcjQvZGlyMS8kbgorCQlnaXQgLUMgcjQgYWRkIGRpcjEvJG4KKwlkb25lICYmCisJZWNobyBkaXIxLyA+cjQvcGF0dGVybiAmJgorCWdpdCAtQyByNCBhZGQgcGF0dGVybiAmJgorCWdpdCAtQyByNCBjb21taXQgLW0gInBhdHRlcm4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iIGNvdW50IGluIG5vcm1hbCBwYWNrZmlsZScgJworCWdpdCAtQyByNCBscy1maWxlcyAtcyBwYXR0ZXJuIHNwYXJzZTEgc3BhcnNlMiBkaXIxL3NwYXJzZTEgZGlyMS9zcGFyc2UyIFwKKwkJPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjQgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCA+YWxsLnBhY2sgPDwtRU9GICYmCisJSEVBRAorCUVPRgorCWdpdCAtQyByNCBpbmRleC1wYWNrIC4uL2FsbC5wYWNrICYmCisKKwlnaXQgLUMgcjQgdmVyaWZ5LXBhY2sgLXYgLi4vYWxsLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKKwlncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdCB8CisJYXdrIC1mIHByaW50XzEuYXdrIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNwYXJzZTpvaWQ9T0lEJyAnCisJZ2l0IC1DIHI0IGxzLWZpbGVzIC1zIGRpcjEvc3BhcnNlMSBkaXIxL3NwYXJzZTIgPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjQgbHMtZmlsZXMgLXMgcGF0dGVybiA+c3RhZ2VkICYmCisJb2lkPSQoYXdrIC1mIHByaW50XzIuYXdrIHN0YWdlZCkgJiYKKwlnaXQgLUMgcjQgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCAtLWZpbHRlcj1zcGFyc2U6b2lkPSRvaWQgPmZpbHRlci5wYWNrIDw8LUVPRiAmJgorCUhFQUQKKwlFT0YKKwlnaXQgLUMgcjQgaW5kZXgtcGFjayAuLi9maWx0ZXIucGFjayAmJgorCisJZ2l0IC1DIHI0IHZlcmlmeS1wYWNrIC12IC4uL2ZpbHRlci5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCisJZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQgfAorCWF3ayAtZiBwcmludF8xLmF3ayB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzcGFyc2U6b2lkPW9pZC1pc2gnICcKKwlnaXQgLUMgcjQgbHMtZmlsZXMgLXMgZGlyMS9zcGFyc2UxIGRpcjEvc3BhcnNlMiA+bHNfZmlsZXNfcmVzdWx0ICYmCisJYXdrIC1mIHByaW50XzIuYXdrIGxzX2ZpbGVzX3Jlc3VsdCB8CisJc29ydCA+ZXhwZWN0ZWQgJiYKKworCWdpdCAtQyByNCBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IC0tZmlsdGVyPXNwYXJzZTpvaWQ9bWFzdGVyOnBhdHRlcm4gPmZpbHRlci5wYWNrIDw8LUVPRiAmJgorCUhFQUQKKwlFT0YKKwlnaXQgLUMgcjQgaW5kZXgtcGFjayAuLi9maWx0ZXIucGFjayAmJgorCisJZ2l0IC1DIHI0IHZlcmlmeS1wYWNrIC12IC4uL2ZpbHRlci5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCisJZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQgfAorCWF3ayAtZiBwcmludF8xLmF3ayB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKKyMgRGVsZXRlIHNvbWUgbG9vc2Ugb2JqZWN0cyBhbmQgdXNlIHBhY2stb2JqZWN0cywgYnV0IFdJVEhPVVQgYW55IGZpbHRlcmluZy4KKyMgVGhpcyBtb2RlbHMgcHJldmlvdXNseSBvbWl0dGVkIG9iamVjdHMgdGhhdCB3ZSBkaWQgbm90IHJlY2VpdmUuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHIxIC0gZGVsZXRlIGxvb3NlIGJsb2JzJyAnCisJZ2l0IC1DIHIxIGxzLWZpbGVzIC1zIGZpbGUuMSBmaWxlLjIgZmlsZS4zIGZpbGUuNCBmaWxlLjUgXAorCQk+bHNfZmlsZXNfcmVzdWx0ICYmCisJYXdrIC1mIHByaW50XzIuYXdrIGxzX2ZpbGVzX3Jlc3VsdCB8CisJc29ydCA+ZXhwZWN0ZWQgJiYKKworCWZvciBpZCBpbiBgY2F0IGV4cGVjdGVkIHwgc2VkICJzfC4ufCYvfCJgCisJZG8KKwkJcm0gcjEvLmdpdC9vYmplY3RzLyRpZAorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHBhY2stb2JqZWN0cyBmYWlscyB3LyBtaXNzaW5nIG9iamVjdHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgcjEgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCA+bWlzcy5wYWNrIDw8LUVPRgorCUhFQUQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHBhY2stb2JqZWN0cyBmYWlscyB3LyAtLW1pc3Npbmc9ZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgcjEgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCAtLW1pc3Npbmc9ZXJyb3IgPm1pc3MucGFjayA8PC1FT0YKKwlIRUFECisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBwYWNrLW9iamVjdHMgdy8gLS1taXNzaW5nPWFsbG93LWFueScgJworCWdpdCAtQyByMSBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IC0tbWlzc2luZz1hbGxvdy1hbnkgPm1pc3MucGFjayA8PC1FT0YKKwlIRUFECisJRU9GCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMxOC1jb21taXQtZ3JhcGguc2ggYi90L3Q1MzE4LWNvbW1pdC1ncmFwaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MjQ1OTk5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTMxOC1jb21taXQtZ3JhcGguc2gKQEAgLTAsMCArMSw2ODIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjb21taXQgZ3JhcGgnCisuIC4vdGVzdC1saWIuc2gKKworR0lUX1RFU1RfQ09NTUlUX0dSQVBIX0NIQU5HRURfUEFUSFM9MAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmdWxsIHJlcG8nICcKKwlta2RpciBmdWxsICYmCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlnaXQgaW5pdCAmJgorCWdpdCBjb25maWcgY29yZS5jb21taXRHcmFwaCB0cnVlICYmCisJb2JqZGlyPSIuZ2l0L29iamVjdHMiICYmCisJdGVzdF9vaWRfaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAndHdlYWsgdW1hc2sgZm9yIG1vZGViaXQgdGVzdHMnICcKKwl1bWFzayAwMjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGdyYXBoIHdpdGggbm8gZ3JhcGggZmlsZScgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGUgZ3JhcGggd2l0aCBubyBwYWNrcycgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLW9iamVjdC1kaXIgJG9iamRpciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpdCB3aXRoIGNvcnJlY3QgZXJyb3Igb24gYmFkIGlucHV0IHRvIC0tc3RkaW4tcGFja3MnICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgorCWVjaG8gZG9lc25vdGV4aXN0ID5pbiAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tcGFja3MgPGluIDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZXJyb3IgYWRkaW5nIHBhY2siIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgY29tbWl0cyBhbmQgcmVwYWNrJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDMpCisJZG8KKwkJdGVzdF9jb21taXQgJGkgJiYKKwkJZ2l0IGJyYW5jaCBjb21taXRzLyRpCisJZG9uZSAmJgorCWdpdCByZXBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpdCB3aXRoIGNvcnJlY3QgZXJyb3Igb24gYmFkIGlucHV0IHRvIC0tc3RkaW4tY29tbWl0cycgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZWNobyBIRUFEIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1zdGRpbi1jb21taXRzIDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAidW5leHBlY3RlZCBub24taGV4IG9iamVjdCBJRDogSEVBRCIgc3RkZXJyICYmCisJIyB2YWxpZCB0cmVlIE9JRCwgYnV0IG5vdCBhIGNvbW1pdCBPSUQKKwlnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9IHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1zdGRpbi1jb21taXRzIDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiaW52YWxpZCBjb21taXQgb2JqZWN0IGlkIiBzdGRlcnIKKycKKworZ3JhcGhfZ2l0X3R3b19tb2RlcygpIHsKKwlnaXQgLWMgY29yZS5jb21taXRHcmFwaD10cnVlICQxID5vdXRwdXQKKwlnaXQgLWMgY29yZS5jb21taXRHcmFwaD1mYWxzZSAkMSA+ZXhwZWN0CisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorfQorCitncmFwaF9naXRfYmVoYXZpb3IoKSB7CisJTVNHPSQxCisJRElSPSQyCisJQlJBTkNIPSQzCisJQ09NUEFSRT0kNAorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrIG5vcm1hbCBnaXQgb3BlcmF0aW9uczogJE1TRyIgJworCQljZCAiJFRSQVNIX0RJUkVDVE9SWS8kRElSIiAmJgorCQlncmFwaF9naXRfdHdvX21vZGVzICJsb2cgLS1vbmVsaW5lICRCUkFOQ0giICYmCisJCWdyYXBoX2dpdF90d29fbW9kZXMgImxvZyAtLXRvcG8tb3JkZXIgJEJSQU5DSCIgJiYKKwkJZ3JhcGhfZ2l0X3R3b19tb2RlcyAibG9nIC0tZ3JhcGggJENPTVBBUkUuLiRCUkFOQ0giICYmCisJCWdyYXBoX2dpdF90d29fbW9kZXMgImJyYW5jaCAtdnYiICYmCisJCWdyYXBoX2dpdF90d29fbW9kZXMgIm1lcmdlLWJhc2UgLWEgJEJSQU5DSCAkQ09NUEFSRSIKKwknCit9CisKK2dyYXBoX2dpdF9iZWhhdmlvciAnbm8gZ3JhcGgnIGZ1bGwgY29tbWl0cy8zIGNvbW1pdHMvMQorCitncmFwaF9yZWFkX2V4cGVjdCgpIHsKKwlPUFRJT05BTD0iIgorCU5VTV9DSFVOS1M9MworCWlmIHRlc3QgISAteiAkMgorCXRoZW4KKwkJT1BUSU9OQUw9IiAkMiIKKwkJTlVNX0NIVU5LUz0kKCgzICsgJChlY2hvICIkMiIgfCB3YyAtdykpKQorCWZpCisJY2F0ID5leHBlY3QgPDwtIEVPRgorCWhlYWRlcjogNDM0NzUwNDggMSAxICROVU1fQ0hVTktTIDAKKwludW1fY29tbWl0czogJDEKKwljaHVua3M6IG9pZF9mYW5vdXQgb2lkX2xvb2t1cCBjb21taXRfbWV0YWRhdGEkT1BUSU9OQUwKKwlFT0YKKwl0ZXN0LXRvb2wgcmVhZC1ncmFwaCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZSBncmFwaCcgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAmJgorCXRlc3RfcGF0aF9pc19maWxlICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGggJiYKKwlncmFwaF9yZWFkX2V4cGVjdCAiMyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ3dyaXRlIGdyYXBoIGhhcyBjb3JyZWN0IHBlcm1pc3Npb25zJyAnCisJdGVzdF9wYXRoX2lzX2ZpbGUgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCWVjaG8gIi1yLS1yLS1yLS0iID5leHBlY3QgJiYKKwl0ZXN0X21vZGViaXRzICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZ3JhcGhfZ2l0X2JlaGF2aW9yICdncmFwaCBleGlzdHMnIGZ1bGwgY29tbWl0cy8zIGNvbW1pdHMvMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBZGQgbW9yZSBjb21taXRzJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdHMvMSAmJgorCWZvciBpIGluICQodGVzdF9zZXEgNCA1KQorCWRvCisJCXRlc3RfY29tbWl0ICRpICYmCisJCWdpdCBicmFuY2ggY29tbWl0cy8kaQorCWRvbmUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdHMvMiAmJgorCWZvciBpIGluICQodGVzdF9zZXEgNiA3KQorCWRvCisJCXRlc3RfY29tbWl0ICRpICYmCisJCWdpdCBicmFuY2ggY29tbWl0cy8kaQorCWRvbmUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdHMvMiAmJgorCWdpdCBtZXJnZSBjb21taXRzLzQgJiYKKwlnaXQgYnJhbmNoIG1lcmdlLzEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdHMvNCAmJgorCWdpdCBtZXJnZSBjb21taXRzLzYgJiYKKwlnaXQgYnJhbmNoIG1lcmdlLzIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdHMvMyAmJgorCWdpdCBtZXJnZSBjb21taXRzLzUgY29tbWl0cy83ICYmCisJZ2l0IGJyYW5jaCBtZXJnZS8zICYmCisJZ2l0IHJlcGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQtZ3JhcGggd3JpdGUgcHJvZ3Jlc3Mgb2ZmIGZvciByZWRpcmVjdGVkIHN0ZGVycicgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAyPmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdC1ncmFwaCB3cml0ZSBmb3JjZSBwcm9ncmVzcyBvbiBmb3Igc3RkZXJyJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlHSVRfUFJPR1JFU1NfREVMQVk9MCBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcHJvZ3Jlc3MgMj5lcnIgJiYKKwl0ZXN0X2ZpbGVfbm90X2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQtZ3JhcGggd3JpdGUgd2l0aCB0aGUgLS1uby1wcm9ncmVzcyBvcHRpb24nICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1uby1wcm9ncmVzcyAyPmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdC1ncmFwaCB2ZXJpZnkgcHJvZ3Jlc3Mgb2ZmIGZvciByZWRpcmVjdGVkIHN0ZGVycicgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQtZ3JhcGggdmVyaWZ5IGZvcmNlIHByb2dyZXNzIG9uIGZvciBzdGRlcnInICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgorCUdJVF9QUk9HUkVTU19ERUxBWT0wIGdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IC0tcHJvZ3Jlc3MgMj5lcnIgJiYKKwl0ZXN0X2ZpbGVfbm90X2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQtZ3JhcGggdmVyaWZ5IHdpdGggdGhlIC0tbm8tcHJvZ3Jlc3Mgb3B0aW9uJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSAtLW5vLXByb2dyZXNzIDI+ZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKycKKworIyBDdXJyZW50IGdyYXBoIHN0cnVjdHVyZToKKyMKKyMgICBfX00zX19fCisjICAvICAgfCAgIFwKKyMgMyBNMSA1IE0yIDcKKyMgfC8gIFx8LyAgXHwKKyMgMiAgICA0ICAgIDYKKyMgfF9fXy9fX19fLworIyAxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlIGdyYXBoIHdpdGggbWVyZ2VzJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCWdyYXBoX3JlYWRfZXhwZWN0ICIxMCIgImV4dHJhX2VkZ2VzIgorJworCitncmFwaF9naXRfYmVoYXZpb3IgJ21lcmdlIDEgdnMgMicgZnVsbCBtZXJnZS8xIG1lcmdlLzIKK2dyYXBoX2dpdF9iZWhhdmlvciAnbWVyZ2UgMSB2cyAzJyBmdWxsIG1lcmdlLzEgbWVyZ2UvMworZ3JhcGhfZ2l0X2JlaGF2aW9yICdtZXJnZSAyIHZzIDMnIGZ1bGwgbWVyZ2UvMiBtZXJnZS8zCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0FkZCBvbmUgbW9yZSBjb21taXQnICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgorCXRlc3RfY29tbWl0IDggJiYKKwlnaXQgYnJhbmNoIGNvbW1pdHMvOCAmJgorCWxzICRvYmpkaXIvcGFjayB8IGdyZXAgaWR4ID5leGlzdGluZy1pZHggJiYKKwlnaXQgcmVwYWNrICYmCisJbHMgJG9iamRpci9wYWNrfCBncmVwIGlkeCB8IGdyZXAgLXYgLWYgZXhpc3RpbmctaWR4ID5uZXctaWR4CisnCisKKyMgQ3VycmVudCBncmFwaCBzdHJ1Y3R1cmU6CisjCisjICAgICAgOAorIyAgICAgIHwKKyMgICBfX00zX19fCisjICAvICAgfCAgIFwKKyMgMyBNMSA1IE0yIDcKKyMgfC8gIFx8LyAgXHwKKyMgMiAgICA0ICAgIDYKKyMgfF9fXy9fX19fLworIyAxCisKK2dyYXBoX2dpdF9iZWhhdmlvciAnbWl4ZWQgbW9kZSwgY29tbWl0IDggdnMgbWVyZ2UgMScgZnVsbCBjb21taXRzLzggbWVyZ2UvMQorZ3JhcGhfZ2l0X2JlaGF2aW9yICdtaXhlZCBtb2RlLCBjb21taXQgOCB2cyBtZXJnZSAyJyBmdWxsIGNvbW1pdHMvOCBtZXJnZS8yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlIGdyYXBoIHdpdGggbmV3IGNvbW1pdCcgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAmJgorCXRlc3RfcGF0aF9pc19maWxlICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGggJiYKKwlncmFwaF9yZWFkX2V4cGVjdCAiMTEiICJleHRyYV9lZGdlcyIKKycKKworZ3JhcGhfZ2l0X2JlaGF2aW9yICdmdWxsIGdyYXBoLCBjb21taXQgOCB2cyBtZXJnZSAxJyBmdWxsIGNvbW1pdHMvOCBtZXJnZS8xCitncmFwaF9naXRfYmVoYXZpb3IgJ2Z1bGwgZ3JhcGgsIGNvbW1pdCA4IHZzIG1lcmdlIDInIGZ1bGwgY29tbWl0cy84IG1lcmdlLzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGUgZ3JhcGggd2l0aCBub3RoaW5nIG5ldycgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAmJgorCXRlc3RfcGF0aF9pc19maWxlICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGggJiYKKwlncmFwaF9yZWFkX2V4cGVjdCAiMTEiICJleHRyYV9lZGdlcyIKKycKKworZ3JhcGhfZ2l0X2JlaGF2aW9yICdjbGVhcmVkIGdyYXBoLCBjb21taXQgOCB2cyBtZXJnZSAxJyBmdWxsIGNvbW1pdHMvOCBtZXJnZS8xCitncmFwaF9naXRfYmVoYXZpb3IgJ2NsZWFyZWQgZ3JhcGgsIGNvbW1pdCA4IHZzIG1lcmdlIDInIGZ1bGwgY29tbWl0cy84IG1lcmdlLzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnVpbGQgZ3JhcGggZnJvbSBsYXRlc3QgcGFjayB3aXRoIGNsb3N1cmUnICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgorCWNhdCBuZXctaWR4IHwgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXN0ZGluLXBhY2tzICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCWdyYXBoX3JlYWRfZXhwZWN0ICI5IiAiZXh0cmFfZWRnZXMiCisnCisKK2dyYXBoX2dpdF9iZWhhdmlvciAnZ3JhcGggZnJvbSBwYWNrLCBjb21taXQgOCB2cyBtZXJnZSAxJyBmdWxsIGNvbW1pdHMvOCBtZXJnZS8xCitncmFwaF9naXRfYmVoYXZpb3IgJ2dyYXBoIGZyb20gcGFjaywgY29tbWl0IDggdnMgbWVyZ2UgMicgZnVsbCBjb21taXRzLzggbWVyZ2UvMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidWlsZCBncmFwaCBmcm9tIGNvbW1pdHMgd2l0aCBjbG9zdXJlJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlnaXQgdGFnIC1hIC1tICJtZXJnZSIgdGFnL21lcmdlIG1lcmdlLzIgJiYKKwlnaXQgcmV2LXBhcnNlIHRhZy9tZXJnZSA+Y29tbWl0cy1pbiAmJgorCWdpdCByZXYtcGFyc2UgbWVyZ2UvMSA+PmNvbW1pdHMtaW4gJiYKKwljYXQgY29tbWl0cy1pbiB8IGdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1zdGRpbi1jb21taXRzICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCWdyYXBoX3JlYWRfZXhwZWN0ICI2IgorJworCitncmFwaF9naXRfYmVoYXZpb3IgJ2dyYXBoIGZyb20gY29tbWl0cywgY29tbWl0IDggdnMgbWVyZ2UgMScgZnVsbCBjb21taXRzLzggbWVyZ2UvMQorZ3JhcGhfZ2l0X2JlaGF2aW9yICdncmFwaCBmcm9tIGNvbW1pdHMsIGNvbW1pdCA4IHZzIG1lcmdlIDInIGZ1bGwgY29tbWl0cy84IG1lcmdlLzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnVpbGQgZ3JhcGggZnJvbSBjb21taXRzIHdpdGggYXBwZW5kJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlnaXQgcmV2LXBhcnNlIG1lcmdlLzMgfCBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tY29tbWl0cyAtLWFwcGVuZCAmJgorCXRlc3RfcGF0aF9pc19maWxlICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGggJiYKKwlncmFwaF9yZWFkX2V4cGVjdCAiMTAiICJleHRyYV9lZGdlcyIKKycKKworZ3JhcGhfZ2l0X2JlaGF2aW9yICdhcHBlbmQgZ3JhcGgsIGNvbW1pdCA4IHZzIG1lcmdlIDEnIGZ1bGwgY29tbWl0cy84IG1lcmdlLzEKK2dyYXBoX2dpdF9iZWhhdmlvciAnYXBwZW5kIGdyYXBoLCBjb21taXQgOCB2cyBtZXJnZSAyJyBmdWxsIGNvbW1pdHMvOCBtZXJnZS8yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1aWxkIGdyYXBoIHVzaW5nIC0tcmVhY2hhYmxlJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCWdyYXBoX3JlYWRfZXhwZWN0ICIxMSIgImV4dHJhX2VkZ2VzIgorJworCitncmFwaF9naXRfYmVoYXZpb3IgJ2FwcGVuZCBncmFwaCwgY29tbWl0IDggdnMgbWVyZ2UgMScgZnVsbCBjb21taXRzLzggbWVyZ2UvMQorZ3JhcGhfZ2l0X2JlaGF2aW9yICdhcHBlbmQgZ3JhcGgsIGNvbW1pdCA4IHZzIG1lcmdlIDInIGZ1bGwgY29tbWl0cy84IG1lcmdlLzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYmFyZSByZXBvJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkiICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtLW5vLWxvY2FsIGZ1bGwgYmFyZSAmJgorCWNkIGJhcmUgJiYKKwlnaXQgY29uZmlnIGNvcmUuY29tbWl0R3JhcGggdHJ1ZSAmJgorCWJhcmVkaXI9Ii4vb2JqZWN0cyIKKycKKworZ3JhcGhfZ2l0X2JlaGF2aW9yICdiYXJlIHJlcG8sIGNvbW1pdCA4IHZzIG1lcmdlIDEnIGJhcmUgY29tbWl0cy84IG1lcmdlLzEKK2dyYXBoX2dpdF9iZWhhdmlvciAnYmFyZSByZXBvLCBjb21taXQgOCB2cyBtZXJnZSAyJyBiYXJlIGNvbW1pdHMvOCBtZXJnZS8yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlIGdyYXBoIGluIGJhcmUgcmVwbycgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2JhcmUiICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAmJgorCXRlc3RfcGF0aF9pc19maWxlICRiYXJlZGlyL2luZm8vY29tbWl0LWdyYXBoICYmCisJZ3JhcGhfcmVhZF9leHBlY3QgIjExIiAiZXh0cmFfZWRnZXMiCisnCisKK2dyYXBoX2dpdF9iZWhhdmlvciAnYmFyZSByZXBvIHdpdGggZ3JhcGgsIGNvbW1pdCA4IHZzIG1lcmdlIDEnIGJhcmUgY29tbWl0cy84IG1lcmdlLzEKK2dyYXBoX2dpdF9iZWhhdmlvciAnYmFyZSByZXBvIHdpdGggZ3JhcGgsIGNvbW1pdCA4IHZzIG1lcmdlIDInIGJhcmUgY29tbWl0cy84IG1lcmdlLzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGVyZm9ybSBmYXN0LWZvcndhcmQgbWVyZ2UgaW4gZnVsbCByZXBvJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWVyZ2UtNS10by04IGNvbW1pdHMvNSAmJgorCWdpdCBtZXJnZSBjb21taXRzLzggJiYKKwlnaXQgc2hvdy1yZWYgLXMgbWVyZ2UtNS10by04ID5vdXRwdXQgJiYKKwlnaXQgc2hvdy1yZWYgLXMgY29tbWl0cy84ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoYXQgZ2MgY29tcHV0ZXMgY29tbWl0LWdyYXBoJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImJsYW5rIiAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgJiYKKwljcCAkb2JqZGlyL2luZm8vY29tbWl0LWdyYXBoIGNvbW1pdC1ncmFwaC1iZWZvcmUtZ2MgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MSAmJgorCWdpdCBjb25maWcgZ2Mud3JpdGVDb21taXRHcmFwaCB0cnVlICYmCisJZ2l0IGdjICYmCisJY3AgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCBjb21taXQtZ3JhcGgtYWZ0ZXItZ2MgJiYKKwkhIHRlc3RfY21wX2JpbiBjb21taXQtZ3JhcGgtYmVmb3JlLWdjIGNvbW1pdC1ncmFwaC1hZnRlci1nYyAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgJiYKKwl0ZXN0X2NtcF9iaW4gY29tbWl0LWdyYXBoLWFmdGVyLWdjICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZS1vYmplY3RzIGludmFsaWRhdGVzIGNvbW1pdC1ncmFwaCcgJworCWNkICIkVFJBU0hfRElSRUNUT1JZIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtcmYgcmVwbGFjZSAmJgorCWdpdCBjbG9uZSBmdWxsIHJlcGxhY2UgJiYKKwkoCisJCWNkIHJlcGxhY2UgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGggJiYKKwkJZ2l0IHJlcGxhY2UgSEVBRH4xIEhFQUR+MiAmJgorCQlnaXQgLWMgY29yZS5jb21taXRHcmFwaD1mYWxzZSBsb2cgPmV4cGVjdCAmJgorCQlnaXQgLWMgY29yZS5jb21taXRHcmFwaD10cnVlIGxvZyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAmJgorCQlnaXQgLWMgY29yZS5jb21taXRHcmFwaD1mYWxzZSAtLW5vLXJlcGxhY2Utb2JqZWN0cyBsb2cgPmV4cGVjdCAmJgorCQlnaXQgLWMgY29yZS5jb21taXRHcmFwaD10cnVlIC0tbm8tcmVwbGFjZS1vYmplY3RzIGxvZyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJcm0gLXJmIC5naXQvb2JqZWN0cy9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlICYmCisJCXRlc3RfcGF0aF9pc19maWxlIC5naXQvb2JqZWN0cy9pbmZvL2NvbW1pdC1ncmFwaAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGdyYWZ0cyBpbnZhbGlkYXRlIGNvbW1pdC1ncmFwaCcgJworCWNkICIkVFJBU0hfRElSRUNUT1JZIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtcmYgZ3JhZnQgJiYKKwlnaXQgY2xvbmUgZnVsbCBncmFmdCAmJgorCSgKKwkJY2QgZ3JhZnQgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGggJiYKKwkJSDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUR+MSkgJiYKKwkJSDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUR+MykgJiYKKwkJZWNobyAiJEgxICRIMyIgPi5naXQvaW5mby9ncmFmdHMgJiYKKwkJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9ZmFsc2UgbG9nID5leHBlY3QgJiYKKwkJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9dHJ1ZSBsb2cgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgJiYKKwkJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9ZmFsc2UgLS1uby1yZXBsYWNlLW9iamVjdHMgbG9nID5leHBlY3QgJiYKKwkJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9dHJ1ZSAtLW5vLXJlcGxhY2Utb2JqZWN0cyBsb2cgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXJtIC1yZiAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGggJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGgKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2Utb2JqZWN0cyBpbnZhbGlkYXRlcyBjb21taXQtZ3JhcGgnICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIHNoYWxsb3cgJiYKKwlnaXQgY2xvbmUgLS1kZXB0aCAyICJmaWxlOi8vJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiBzaGFsbG93ICYmCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBoICYmCisJCWdpdCBmZXRjaCBvcmlnaW4gLS11bnNoYWxsb3cgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGgKKwkpCisnCisKKyMgdGhlIHZlcmlmeSB0ZXN0cyBiZWxvdyBleHBlY3QgdGhlIGNvbW1pdC1ncmFwaCB0byBjb250YWluCisjIGV4YWN0bHkgdGhlIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gdGhlIGNvbW1pdHMvOCBicmFuY2guCisjIElmIHRoZSBmaWxlIGNoYW5nZXMgdGhlIHNldCBvZiBjb21taXRzIGluIHRoZSBsaXN0LCB0aGVuIHRoZQorIyBvZmZzZXRzIGludG8gdGhlIGJpbmFyeSBmaWxlIHdpbGwgcmVzdWx0IGluIGRpZmZlcmVudCBlZGl0cworIyBhbmQgdGhlIHRlc3RzIHdpbGwgbGlrZWx5IGJyZWFrLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29tbWl0LWdyYXBoIHZlcmlmeScgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IHJldi1wYXJzZSBjb21taXRzLzggfCBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tY29tbWl0cyAmJgorCWdpdCBjb21taXQtZ3JhcGggdmVyaWZ5ID5vdXRwdXQKKycKKworTlVNX0NPTU1JVFM9OQorTlVNX09DVE9QVVNfRURHRVM9MgorSEFTSF9MRU49IiQodGVzdF9vaWQgcmF3c3opIgorR1JBUEhfQllURV9WRVJTSU9OPTQKK0dSQVBIX0JZVEVfSEFTSD01CitHUkFQSF9CWVRFX0NIVU5LX0NPVU5UPTYKK0dSQVBIX0NIVU5LX0xPT0tVUF9PRkZTRVQ9OAorR1JBUEhfQ0hVTktfTE9PS1VQX1dJRFRIPTEyCitHUkFQSF9DSFVOS19MT09LVVBfUk9XUz01CitHUkFQSF9CWVRFX09JRF9GQU5PVVRfSUQ9JEdSQVBIX0NIVU5LX0xPT0tVUF9PRkZTRVQKK0dSQVBIX0JZVEVfT0lEX0xPT0tVUF9JRD0kKCgkR1JBUEhfQ0hVTktfTE9PS1VQX09GRlNFVCArIFwKKwkJCSAgICAxICogJEdSQVBIX0NIVU5LX0xPT0tVUF9XSURUSCkpCitHUkFQSF9CWVRFX0NPTU1JVF9EQVRBX0lEPSQoKCRHUkFQSF9DSFVOS19MT09LVVBfT0ZGU0VUICsgXAorCQkJICAgICAyICogJEdSQVBIX0NIVU5LX0xPT0tVUF9XSURUSCkpCitHUkFQSF9GQU5PVVRfT0ZGU0VUPSQoKCRHUkFQSF9DSFVOS19MT09LVVBfT0ZGU0VUICsgXAorCQkgICAgICAgJEdSQVBIX0NIVU5LX0xPT0tVUF9XSURUSCAqICRHUkFQSF9DSFVOS19MT09LVVBfUk9XUykpCitHUkFQSF9CWVRFX0ZBTk9VVDE9JCgoJEdSQVBIX0ZBTk9VVF9PRkZTRVQgKyA0ICogNCkpCitHUkFQSF9CWVRFX0ZBTk9VVDI9JCgoJEdSQVBIX0ZBTk9VVF9PRkZTRVQgKyA0ICogMjU1KSkKK0dSQVBIX09JRF9MT09LVVBfT0ZGU0VUPSQoKCRHUkFQSF9GQU5PVVRfT0ZGU0VUICsgNCAqIDI1NikpCitHUkFQSF9CWVRFX09JRF9MT09LVVBfT1JERVI9JCgoJEdSQVBIX09JRF9MT09LVVBfT0ZGU0VUICsgJEhBU0hfTEVOICogOCkpCitHUkFQSF9CWVRFX09JRF9MT09LVVBfTUlTU0lORz0kKCgkR1JBUEhfT0lEX0xPT0tVUF9PRkZTRVQgKyAkSEFTSF9MRU4gKiA0ICsgMTApKQorR1JBUEhfQ09NTUlUX0RBVEFfT0ZGU0VUPSQoKCRHUkFQSF9PSURfTE9PS1VQX09GRlNFVCArICRIQVNIX0xFTiAqICROVU1fQ09NTUlUUykpCitHUkFQSF9CWVRFX0NPTU1JVF9UUkVFPSRHUkFQSF9DT01NSVRfREFUQV9PRkZTRVQKK0dSQVBIX0JZVEVfQ09NTUlUX1BBUkVOVD0kKCgkR1JBUEhfQ09NTUlUX0RBVEFfT0ZGU0VUICsgJEhBU0hfTEVOKSkKK0dSQVBIX0JZVEVfQ09NTUlUX0VYVFJBX1BBUkVOVD0kKCgkR1JBUEhfQ09NTUlUX0RBVEFfT0ZGU0VUICsgJEhBU0hfTEVOICsgNCkpCitHUkFQSF9CWVRFX0NPTU1JVF9XUk9OR19QQVJFTlQ9JCgoJEdSQVBIX0NPTU1JVF9EQVRBX09GRlNFVCArICRIQVNIX0xFTiArIDMpKQorR1JBUEhfQllURV9DT01NSVRfR0VORVJBVElPTj0kKCgkR1JBUEhfQ09NTUlUX0RBVEFfT0ZGU0VUICsgJEhBU0hfTEVOICsgMTEpKQorR1JBUEhfQllURV9DT01NSVRfREFURT0kKCgkR1JBUEhfQ09NTUlUX0RBVEFfT0ZGU0VUICsgJEhBU0hfTEVOICsgMTIpKQorR1JBUEhfQ09NTUlUX0RBVEFfV0lEVEg9JCgoJEhBU0hfTEVOICsgMTYpKQorR1JBUEhfT0NUT1BVU19EQVRBX09GRlNFVD0kKCgkR1JBUEhfQ09NTUlUX0RBVEFfT0ZGU0VUICsgXAorCQkJICAgICAkR1JBUEhfQ09NTUlUX0RBVEFfV0lEVEggKiAkTlVNX0NPTU1JVFMpKQorR1JBUEhfQllURV9PQ1RPUFVTPSQoKCRHUkFQSF9PQ1RPUFVTX0RBVEFfT0ZGU0VUICsgNCkpCitHUkFQSF9CWVRFX0ZPT1RFUj0kKCgkR1JBUEhfT0NUT1BVU19EQVRBX09GRlNFVCArIDQgKiAkTlVNX09DVE9QVVNfRURHRVMpKQorCitjb3JydXB0X2dyYXBoX3NldHVwKCkgeworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIG12IGNvbW1pdC1ncmFwaC1iYWNrdXAgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCWNwICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGggY29tbWl0LWdyYXBoLWJhY2t1cCAmJgorCWNobW9kIHUrdyAkb2JqZGlyL2luZm8vY29tbWl0LWdyYXBoCit9CisKK2NvcnJ1cHRfZ3JhcGhfdmVyaWZ5KCkgeworCWdyZXBzdHI9JDEKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSAyPnRlc3RfZXJyICYmCisJZ3JlcCAtdiAiXisiIHRlc3RfZXJyID5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICIkZ3JlcHN0ciIgZXJyICYmCisJaWYgdGVzdCAiJDIiICE9ICJuby1jb3B5IgorCXRoZW4KKwkJY3AgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCBjb21taXQtZ3JhcGgtcHJlLXdyaXRlLXRlc3QKKwlmaSAmJgorCWdpdCBzdGF0dXMgLS1zaG9ydCAmJgorCUdJVF9URVNUX0NPTU1JVF9HUkFQSF9ESUVfT05fTE9BRD10cnVlIGdpdCBjb21taXQtZ3JhcGggd3JpdGUgJiYKKwljaG1vZCB1K3cgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCWdpdCBjb21taXQtZ3JhcGggdmVyaWZ5Cit9CisKKyMgdXNhZ2U6IGNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSA8cG9zaXRpb24+IDxkYXRhPiA8c3RyaW5nPiBbPHplcm9fcG9zPl0KKyMgTWFuaXB1bGF0ZXMgdGhlIGNvbW1pdC1ncmFwaCBmaWxlIGF0IHRoZSBwb3NpdGlvbgorIyBieSBpbnNlcnRpbmcgdGhlIGRhdGEsIG9wdGlvbmFsbHkgemVyb2luZyB0aGUgZmlsZQorIyBzdGFydGluZyBhdCA8emVyb19wb3M+LCB0aGVuIHJ1bnMgJ2dpdCBjb21taXQtZ3JhcGggdmVyaWZ5JworIyBhbmQgcGxhY2VzIHRoZSBvdXRwdXQgaW4gdGhlIGZpbGUgJ2VycicuIFRlc3QgJ2VycicgZm9yCisjIHRoZSBnaXZlbiBzdHJpbmcuCitjb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkoKSB7CisJcG9zPSQxCisJZGF0YT0iJHsyOi1cMH0iCisJZ3JlcHN0cj0kMworCWNvcnJ1cHRfZ3JhcGhfc2V0dXAgJiYKKwlvcmlnX3NpemU9JCh3YyAtYyA8ICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGgpICYmCisJemVyb19wb3M9JHs0Oi0ke29yaWdfc2l6ZX19ICYmCisJcHJpbnRmICIkZGF0YSIgfCBkZCBvZj0iJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCIgYnM9MSBzZWVrPSIkcG9zIiBjb252PW5vdHJ1bmMgJiYKKwlkZCBvZj0iJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCIgYnM9MSBzZWVrPSIkemVyb19wb3MiIGlmPS9kZXYvbnVsbCAmJgorCWdlbmVyYXRlX3plcm9fYnl0ZXMgJCgoJG9yaWdfc2l6ZSAtICR6ZXJvX3BvcykpID4+IiRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGgiICYmCisJY29ycnVwdF9ncmFwaF92ZXJpZnkgIiRncmVwc3RyIgorCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnZGV0ZWN0IHBlcm1pc3Npb24gcHJvYmxlbScgJworCWNvcnJ1cHRfZ3JhcGhfc2V0dXAgJiYKKwljaG1vZCAwMDAgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCWNvcnJ1cHRfZ3JhcGhfdmVyaWZ5ICJDb3VsZCBub3Qgb3BlbiIgIm5vLWNvcHkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCB0b28gc21hbGwnICcKKwljb3JydXB0X2dyYXBoX3NldHVwICYmCisJZWNobyAiYSBzbWFsbCBncmFwaCIgPiRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGggJiYKKwljb3JydXB0X2dyYXBoX3ZlcmlmeSAidG9vIHNtYWxsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgYmFkIHNpZ25hdHVyZScgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAwICJcMCIgXAorCQkiZ3JhcGggc2lnbmF0dXJlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgYmFkIHZlcnNpb24nICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfVkVSU0lPTiAiXDAyIiBcCisJCSJncmFwaCB2ZXJzaW9uIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgYmFkIGhhc2ggdmVyc2lvbicgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9IQVNIICJcMDMiIFwKKwkJImhhc2ggdmVyc2lvbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IGxvdyBjaHVuayBjb3VudCcgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9DSFVOS19DT1VOVCAiXDAyIiBcCisJCSJtaXNzaW5nIHRoZSAuKiBjaHVuayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IG1pc3NpbmcgT0lEIGZhbm91dCBjaHVuaycgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9PSURfRkFOT1VUX0lEICJcMCIgXAorCQkibWlzc2luZyB0aGUgT0lEIEZhbm91dCBjaHVuayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IG1pc3NpbmcgT0lEIGxvb2t1cCBjaHVuaycgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9PSURfTE9PS1VQX0lEICJcMCIgXAorCQkibWlzc2luZyB0aGUgT0lEIExvb2t1cCBjaHVuayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IG1pc3NpbmcgY29tbWl0IGRhdGEgY2h1bmsnICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfQ09NTUlUX0RBVEFfSUQgIlwwIiBcCisJCSJtaXNzaW5nIHRoZSBDb21taXQgRGF0YSBjaHVuayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IGluY29ycmVjdCBmYW5vdXQnICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfRkFOT1VUMSAiXDAxIiBcCisJCSJmYW5vdXQgdmFsdWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBpbmNvcnJlY3QgZmFub3V0IGZpbmFsIHZhbHVlJyAnCisJY29ycnVwdF9ncmFwaF9hbmRfdmVyaWZ5ICRHUkFQSF9CWVRFX0ZBTk9VVDIgIlwwMSIgXAorCQkiZmFub3V0IHZhbHVlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgaW5jb3JyZWN0IE9JRCBvcmRlcicgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9PSURfTE9PS1VQX09SREVSICJcMDEiIFwKKwkJImluY29ycmVjdCBPSUQgb3JkZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBPSUQgbm90IGluIG9iamVjdCBkYXRhYmFzZScgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9PSURfTE9PS1VQX01JU1NJTkcgIlwwMSIgXAorCQkiZnJvbSBvYmplY3QgZGF0YWJhc2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBpbmNvcnJlY3QgdHJlZSBPSUQnICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfQ09NTUlUX1RSRUUgIlwwMSIgXAorCQkicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgaW5jb3JyZWN0IHBhcmVudCBpbnQtaWQnICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfQ09NTUlUX1BBUkVOVCAiXDAxIiBcCisJCSJpbnZhbGlkIHBhcmVudCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IGV4dHJhIHBhcmVudCBpbnQtaWQnICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfQ09NTUlUX0VYVFJBX1BBUkVOVCAiXDAwIiBcCisJCSJpcyB0b28gbG9uZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IHdyb25nIHBhcmVudCcgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9DT01NSVRfV1JPTkdfUEFSRU5UICJcMDEiIFwKKwkJImNvbW1pdC1ncmFwaCBwYXJlbnQgZm9yIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgaW5jb3JyZWN0IGdlbmVyYXRpb24gbnVtYmVyJyAnCisJY29ycnVwdF9ncmFwaF9hbmRfdmVyaWZ5ICRHUkFQSF9CWVRFX0NPTU1JVF9HRU5FUkFUSU9OICJcMDcwIiBcCisJCSJnZW5lcmF0aW9uIGZvciBjb21taXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBpbmNvcnJlY3QgZ2VuZXJhdGlvbiBudW1iZXInICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfQ09NTUlUX0dFTkVSQVRJT04gIlwwMSIgXAorCQkibm9uLXplcm8gZ2VuZXJhdGlvbiBudW1iZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBpbmNvcnJlY3QgY29tbWl0IGRhdGUnICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfQ09NTUlUX0RBVEUgIlwwMSIgXAorCQkiY29tbWl0IGRhdGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBpbmNvcnJlY3QgcGFyZW50IGZvciBvY3RvcHVzIG1lcmdlJyAnCisJY29ycnVwdF9ncmFwaF9hbmRfdmVyaWZ5ICRHUkFQSF9CWVRFX09DVE9QVVMgIlwwMSIgXAorCQkiaW52YWxpZCBwYXJlbnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBpbnZhbGlkIGNoZWNrc3VtIGhhc2gnICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfRk9PVEVSICJcMDAiIFwKKwkJImluY29ycmVjdCBjaGVja3N1bSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IGluY29ycmVjdCBjaHVuayBjb3VudCcgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9DSFVOS19DT1VOVCAiXDM3NyIgXAorCQkiY2h1bmsgbG9va3VwIHRhYmxlIGVudHJ5IG1pc3NpbmciICRHUkFQSF9DSFVOS19MT09LVVBfT0ZGU0VUCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmc2NrIChjaGVja3MgY29tbWl0LWdyYXBoKScgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IGZzY2sgJiYKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfRk9PVEVSICJcMDAiIFwKKwkJImluY29ycmVjdCBjaGVja3N1bSIgJiYKKwljcCBjb21taXQtZ3JhcGgtcHJlLXdyaXRlLXRlc3QgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG5vbi10aGVfcmVwb3NpdG9yeSB0ZXN0cycgJworCXJtIC1yZiByZXBvICYmCisJZ2l0IGluaXQgcmVwbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gb25lICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyB0d28gJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgY29yZS5jb21taXRHcmFwaCB0cnVlICYmCisJZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIHR3byB8IFwKKwkJZ2l0IC1DIHJlcG8gY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tY29tbWl0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJzZV9jb21taXRfaW5fZ3JhcGggd29ya3MgZm9yIG5vbi10aGVfcmVwb3NpdG9yeScgJworCXRlc3QtdG9vbCByZXBvc2l0b3J5IHBhcnNlX2NvbW1pdF9pbl9ncmFwaCBcCisJCXJlcG8vLmdpdCByZXBvICIkKGdpdCAtQyByZXBvIHJldi1wYXJzZSB0d28pIiA+YWN0dWFsICYmCisJeworCQlnaXQgLUMgcmVwbyBsb2cgLS1wcmV0dHk9Zm9ybWF0OiIlY3QgIiAtMSAmJgorCQlnaXQgLUMgcmVwbyByZXYtcGFyc2Ugb25lCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdC10b29sIHJlcG9zaXRvcnkgcGFyc2VfY29tbWl0X2luX2dyYXBoIFwKKwkJcmVwby8uZ2l0IHJlcG8gIiQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIG9uZSkiID5hY3R1YWwgJiYKKwlnaXQgLUMgcmVwbyBsb2cgLS1wcmV0dHk9IiVjdCIgLTEgb25lID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldF9jb21taXRfdHJlZV9pbl9ncmFwaCB3b3JrcyBmb3Igbm9uLXRoZV9yZXBvc2l0b3J5JyAnCisJdGVzdC10b29sIHJlcG9zaXRvcnkgZ2V0X2NvbW1pdF90cmVlX2luX2dyYXBoIFwKKwkJcmVwby8uZ2l0IHJlcG8gIiQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIHR3bykiID5hY3R1YWwgJiYKKwlnaXQgLUMgcmVwbyByZXYtcGFyc2UgdHdvXnt0cmVlfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdC10b29sIHJlcG9zaXRvcnkgZ2V0X2NvbW1pdF90cmVlX2luX2dyYXBoIFwKKwkJcmVwby8uZ2l0IHJlcG8gIiQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIG9uZSkiID5hY3R1YWwgJiYKKwlnaXQgLUMgcmVwbyByZXYtcGFyc2Ugb25lXnt0cmVlfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JydXB0IGNvbW1pdC1ncmFwaCB3cml0ZSAoYnJva2VuIHBhcmVudCknICcKKwlybSAtcmYgcmVwbyAmJgorCWdpdCBpbml0IHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZW1wdHk9IiQoZ2l0IG1rdHJlZSA8L2Rldi9udWxsKSIgJiYKKwkJY2F0ID5icm9rZW4gPDwtRU9GICYmCisJCXRyZWUgJGVtcHR5CisJCXBhcmVudCAkWkVST19PSUQKKwkJYXV0aG9yIHdoYXRldmVyIDx3aGF0ZXZlckBleGFtcGxlLmNvbT4gMTIzNCAtMDAwMAorCQljb21taXR0ZXIgd2hhdGV2ZXIgPHdoYXRldmVyQGV4YW1wbGUuY29tPiAxMjM0IC0wMDAwCisKKwkJYnJva2VuIGNvbW1pdAorCQlFT0YKKwkJYnJva2VuPSIkKGdpdCBoYXNoLW9iamVjdCAtdyAtdCBjb21taXQgLS1saXRlcmFsbHkgYnJva2VuKSIgJiYKKwkJZ2l0IGNvbW1pdC10cmVlIC1wICIkYnJva2VuIiAtbSAiZ29vZCBjb21taXQiICIkZW1wdHkiID5nb29kICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1zdGRpbi1jb21taXRzIFwKKwkJCTxnb29kIDI+dGVzdF9lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCIgdGVzdF9lcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQgY29tbWl0LWdyYXBoIHdyaXRlIChtaXNzaW5nIHRyZWUpJyAnCisJcm0gLXJmIHJlcG8gJiYKKwlnaXQgaW5pdCByZXBvICYmCisJKAorCQljZCByZXBvICYmCisJCXRyZWU9IiQoZ2l0IG1rdHJlZSA8L2Rldi9udWxsKSIgJiYKKwkJY2F0ID5icm9rZW4gPDwtRU9GICYmCisJCXBhcmVudCAkWkVST19PSUQKKwkJYXV0aG9yIHdoYXRldmVyIDx3aGF0ZXZlckBleGFtcGxlLmNvbT4gMTIzNCAtMDAwMAorCQljb21taXR0ZXIgd2hhdGV2ZXIgPHdoYXRldmVyQGV4YW1wbGUuY29tPiAxMjM0IC0wMDAwCisKKwkJYnJva2VuIGNvbW1pdAorCQlFT0YKKwkJYnJva2VuPSIkKGdpdCBoYXNoLW9iamVjdCAtdyAtdCBjb21taXQgLS1saXRlcmFsbHkgYnJva2VuKSIgJiYKKwkJZ2l0IGNvbW1pdC10cmVlIC1wICIkYnJva2VuIiAtbSAiZ29vZCIgIiR0cmVlIiA+Z29vZCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tY29tbWl0cyBcCisJCQk8Z29vZCAyPnRlc3RfZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgInVuYWJsZSB0byBwYXJzZSBjb21taXQiIHRlc3RfZXJyCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMTktbXVsdGktcGFjay1pbmRleC5zaCBiL3QvdDUzMTktbXVsdGktcGFjay1pbmRleC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MjE0Y2FiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTMxOS1tdWx0aS1wYWNrLWluZGV4LnNoCkBAIC0wLDAgKzEsNjY1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbXVsdGktcGFjay1pbmRleGVzJworLiAuL3Rlc3QtbGliLnNoCisKK29iamRpcj0uZ2l0L29iamVjdHMKKworbWlkeF9yZWFkX2V4cGVjdCAoKSB7CisJTlVNX1BBQ0tTPSQxCisJTlVNX09CSkVDVFM9JDIKKwlOVU1fQ0hVTktTPSQzCisJT0JKRUNUX0RJUj0kNAorCUVYVFJBX0NIVU5LUz0iJDUiCisJeworCQljYXQgPDwtRU9GICYmCisJCWhlYWRlcjogNGQ0OTQ0NTggMSAkTlVNX0NIVU5LUyAkTlVNX1BBQ0tTCisJCWNodW5rczogcGFjay1uYW1lcyBvaWQtZmFub3V0IG9pZC1sb29rdXAgb2JqZWN0LW9mZnNldHMkRVhUUkFfQ0hVTktTCisJCW51bV9vYmplY3RzOiAkTlVNX09CSkVDVFMKKwkJcGFja3M6CisJCUVPRgorCQlpZiB0ZXN0ICROVU1fUEFDS1MgLWdlIDEKKwkJdGhlbgorCQkJbHMgJE9CSkVDVF9ESVIvcGFjay8gfCBncmVwIGlkeCB8IHNvcnQKKwkJZmkgJiYKKwkJcHJpbnRmICJvYmplY3QtZGlyOiAkT0JKRUNUX0RJUlxuIgorCX0gPmV4cGVjdCAmJgorCXRlc3QtdG9vbCByZWFkLW1pZHggJE9CSkVDVF9ESVIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X29pZF9pbml0ICYmCisJdGVzdF9vaWRfY2FjaGUgPDwtRU9GCisJaWR4b2ZmIHNoYTE6Mjk5OQorCWlkeG9mZiBzaGEyNTY6MzczOQorCisJcGFja25hbWVvZmYgc2hhMTo2NTIKKwlwYWNrbmFtZW9mZiBzaGEyNTY6OTQwCisKKwlmYW5vdXRvZmYgc2hhMToxCisJZmFub3V0b2ZmIHNoYTI1NjozCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRvbid0IHdyaXRlIG1pZHggd2l0aCBubyBwYWNrcyIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtdWx0aS1wYWNrLWluZGV4IC0tb2JqZWN0LWRpcj0uIHdyaXRlICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgcGFjay9tdWx0aS1wYWNrLWluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIldhcm4gaWYgYSBtaWR4IGNvbnRhaW5zIG5vIG9pZCIgJworCWNwICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MzE5L25vLW9iamVjdHMubWlkeCAkb2JqZGlyL3BhY2svbXVsdGktcGFjay1pbmRleCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtdWx0aS1wYWNrLWluZGV4IHZlcmlmeSAmJgorCXJtICRvYmpkaXIvcGFjay9tdWx0aS1wYWNrLWluZGV4CisnCisKK2dlbmVyYXRlX29iamVjdHMgKCkgeworCWk9JDEKKwlpaWk9JChwcmludGYgJyUwM2knICRpKQorCXsKKwkJdGVzdC10b29sIGdlbnJhbmRvbSAiYmFyIiAyMDAgJiYKKwkJdGVzdC10b29sIGdlbnJhbmRvbSAiYmF6ICRpaWkiIDUwCisJfSA+d2lkZV9kZWx0YV8kaWlpICYmCisJeworCQl0ZXN0LXRvb2wgZ2VucmFuZG9tICJmb28iJGkgMTAwICYmCisJCXRlc3QtdG9vbCBnZW5yYW5kb20gImZvbyIkKCggJGkgKyAxICkpIDEwMCAmJgorCQl0ZXN0LXRvb2wgZ2VucmFuZG9tICJmb28iJCgoICRpICsgMiApKSAxMDAKKwl9ID5kZWVwX2RlbHRhXyRpaWkgJiYKKwl7CisJCWVjaG8gJGlpaSAmJgorCQl0ZXN0LXRvb2wgZ2VucmFuZG9tICIkaWlpIiA4MTkyCisJfSA+ZmlsZV8kaWlpICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlXyRpaWkgZGVlcF9kZWx0YV8kaWlpIHdpZGVfZGVsdGFfJGlpaQorfQorCitjb21taXRfYW5kX2xpc3Rfb2JqZWN0cyAoKSB7CisJeworCQllY2hvIDEwMSAmJgorCQl0ZXN0LXRvb2wgZ2VucmFuZG9tIDEwMCA4MTkyOworCX0gPmZpbGVfMTAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlXzEwMSAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwljb21taXQ9JChnaXQgY29tbWl0LXRyZWUgJHRyZWUgLXAgSEVBRDwvZGV2L251bGwpICYmCisJeworCQllY2hvICR0cmVlICYmCisJCWdpdCBscy10cmVlICR0cmVlIHwgc2VkIC1lICJzLy4qIFxcKFswLTlhLWZdKlxcKQkuKi9cXDEvIgorCX0gPm9iai1saXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAkY29tbWl0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBvYmplY3RzJyAnCisJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMSA1KQorCWRvCisJCWdlbmVyYXRlX29iamVjdHMgJGkKKwlkb25lICYmCisJY29tbWl0X2FuZF9saXN0X29iamVjdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGUgbWlkeCB3aXRoIG9uZSB2MSBwYWNrJyAnCisJcGFjaz0kKGdpdCBwYWNrLW9iamVjdHMgLS1pbmRleC12ZXJzaW9uPTEgJG9iamRpci9wYWNrL3Rlc3QgPG9iai1saXN0KSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAkb2JqZGlyL3BhY2svdGVzdC0kcGFjay5wYWNrIFwKKwkJJG9iamRpci9wYWNrL3Rlc3QtJHBhY2suaWR4ICRvYmpkaXIvcGFjay9tdWx0aS1wYWNrLWluZGV4ICYmCisJZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPSRvYmpkaXIgd3JpdGUgJiYKKwltaWR4X3JlYWRfZXhwZWN0IDEgMTggNCAkb2JqZGlyCisnCisKK21pZHhfZ2l0X3R3b19tb2RlcyAoKSB7CisJZ2l0IC1jIGNvcmUubXVsdGlQYWNrSW5kZXg9ZmFsc2UgJDEgPmV4cGVjdCAmJgorCWdpdCAtYyBjb3JlLm11bHRpUGFja0luZGV4PXRydWUgJDEgPmFjdHVhbCAmJgorCWlmIFsgIiQyIiA9ICJzb3J0ZWQiIF0KKwl0aGVuCisJCXNvcnQgPGV4cGVjdCA+ZXhwZWN0LnNvcnRlZCAmJgorCQltdiBleHBlY3Quc29ydGVkIGV4cGVjdCAmJgorCQlzb3J0IDxhY3R1YWwgPmFjdHVhbC5zb3J0ZWQgJiYKKwkJbXYgYWN0dWFsLnNvcnRlZCBhY3R1YWwKKwlmaSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKworY29tcGFyZV9yZXN1bHRzX3dpdGhfbWlkeCAoKSB7CisJTVNHPSQxCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2sgbm9ybWFsIGdpdCBvcGVyYXRpb25zOiAkTVNHIiAnCisJCW1pZHhfZ2l0X3R3b19tb2RlcyAicmV2LWxpc3QgLS1vYmplY3RzIC0tYWxsIiAmJgorCQltaWR4X2dpdF90d29fbW9kZXMgImxvZyAtLXJhdyIgJiYKKwkJbWlkeF9naXRfdHdvX21vZGVzICJjb3VudC1vYmplY3RzIC0tdmVyYm9zZSIgJiYKKwkJbWlkeF9naXRfdHdvX21vZGVzICJjYXQtZmlsZSAtLWJhdGNoLWFsbC1vYmplY3RzIC0tYmF0Y2gtY2hlY2siICYmCisJCW1pZHhfZ2l0X3R3b19tb2RlcyAiY2F0LWZpbGUgLS1iYXRjaC1hbGwtb2JqZWN0cyAtLWJhdGNoLWNoZWNrIC0tdW5vcmRlcmVkIiBzb3J0ZWQKKwknCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlIG1pZHggd2l0aCBvbmUgdjIgcGFjaycgJworCWdpdCBwYWNrLW9iamVjdHMgLS1pbmRleC12ZXJzaW9uPTIsMHg0MCAkb2JqZGlyL3BhY2svdGVzdCA8b2JqLWxpc3QgJiYKKwlnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXI9JG9iamRpciB3cml0ZSAmJgorCW1pZHhfcmVhZF9leHBlY3QgMSAxOCA0ICRvYmpkaXIKKycKKworY29tcGFyZV9yZXN1bHRzX3dpdGhfbWlkeCAib25lIHYyIHBhY2siCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQgaWR4IG5vdCBvcGVuZWQnICcKKwlpZHg9JCh0ZXN0LXRvb2wgcmVhZC1taWR4ICRvYmpkaXIgfCBncmVwICJcLmlkeFwkIikgJiYKKwltdiAkb2JqZGlyL3BhY2svJGlkeCBiYWNrdXAtJGlkeCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgYmFja3VwLVwkaWR4IFwkb2JqZGlyL3BhY2svXCRpZHgiICYmCisKKwkjIFRoaXMgaXMgdGhlIG1pbmltdW0gc2l6ZSBmb3IgYSBzaGEtMSBiYXNlZCAuaWR4OyB0aGlzIGxldHMKKwkjIHVzIHBhc3MgcGVyZnVuY3RvcnkgdGVzdHMsIGJ1dCBhbnl0aGluZyB0aGF0IGFjdHVhbGx5IG9wZW5zIGFuZCByZWFkcworCSMgdGhlIGlkeCBmaWxlIHdpbGwgY29tcGxhaW4uCisJdGVzdF9jb3B5X2J5dGVzIDEwNjQgPGJhY2t1cC0kaWR4ID4kb2JqZGlyL3BhY2svJGlkeCAmJgorCisJZ2l0IC1jIGNvcmUubXVsdGlQYWNrSW5kZXg9dHJ1ZSByZXYtbGlzdCAtLW9iamVjdHMgLS1hbGwgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBtb3JlIG9iamVjdHMnICcKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDYgMTApCisJZG8KKwkJZ2VuZXJhdGVfb2JqZWN0cyAkaQorCWRvbmUgJiYKKwljb21taXRfYW5kX2xpc3Rfb2JqZWN0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZSBtaWR4IHdpdGggdHdvIHBhY2tzJyAnCisJZ2l0IHBhY2stb2JqZWN0cyAtLWluZGV4LXZlcnNpb249MSAkb2JqZGlyL3BhY2svdGVzdC0yIDxvYmotbGlzdCAmJgorCWdpdCBtdWx0aS1wYWNrLWluZGV4IC0tb2JqZWN0LWRpcj0kb2JqZGlyIHdyaXRlICYmCisJbWlkeF9yZWFkX2V4cGVjdCAyIDM0IDQgJG9iamRpcgorJworCitjb21wYXJlX3Jlc3VsdHNfd2l0aF9taWR4ICJ0d28gcGFja3MiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlIHByb2dyZXNzIG9mZiBmb3IgcmVkaXJlY3RlZCBzdGRlcnInICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXI9JG9iamRpciB3cml0ZSAyPmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlIGZvcmNlIHByb2dyZXNzIG9uIGZvciBzdGRlcnInICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXI9JG9iamRpciAtLXByb2dyZXNzIHdyaXRlIDI+ZXJyICYmCisJdGVzdF9maWxlX25vdF9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGUgd2l0aCB0aGUgLS1uby1wcm9ncmVzcyBvcHRpb24nICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXI9JG9iamRpciAtLW5vLXByb2dyZXNzIHdyaXRlIDI+ZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG1vcmUgcGFja3MnICcKKwlmb3IgaiBpbiAkKHRlc3Rfc2VxIDExIDIwKQorCWRvCisJCWdlbmVyYXRlX29iamVjdHMgJGogJiYKKwkJY29tbWl0X2FuZF9saXN0X29iamVjdHMgJiYKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLWluZGV4LXZlcnNpb249MiAkb2JqZGlyL3BhY2svdGVzdC1wYWNrIDxvYmotbGlzdAorCWRvbmUKKycKKworY29tcGFyZV9yZXN1bHRzX3dpdGhfbWlkeCAibWl4ZWQgbW9kZSAodHdvIHBhY2tzICsgZXh0cmEpIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZSBtaWR4IHdpdGggdHdlbHZlIHBhY2tzJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPSRvYmpkaXIgd3JpdGUgJiYKKwltaWR4X3JlYWRfZXhwZWN0IDEyIDc0IDQgJG9iamRpcgorJworCitjb21wYXJlX3Jlc3VsdHNfd2l0aF9taWR4ICJ0d2VsdmUgcGFja3MiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtdWx0aS1wYWNrLWluZGV4IHN1Y2Nlc3MnICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCB2ZXJpZnkgLS1vYmplY3QtZGlyPSRvYmpkaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHByb2dyZXNzIG9mZiBmb3IgcmVkaXJlY3RlZCBzdGRlcnInICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCB2ZXJpZnkgLS1vYmplY3QtZGlyPSRvYmpkaXIgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgZm9yY2UgcHJvZ3Jlc3Mgb24gZm9yIHN0ZGVycicgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IHZlcmlmeSAtLW9iamVjdC1kaXI9JG9iamRpciAtLXByb2dyZXNzIDI+ZXJyICYmCisJdGVzdF9maWxlX25vdF9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHdpdGggdGhlIC0tbm8tcHJvZ3Jlc3Mgb3B0aW9uJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggdmVyaWZ5IC0tb2JqZWN0LWRpcj0kb2JqZGlyIC0tbm8tcHJvZ3Jlc3MgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCisjIHVzYWdlOiBjb3JydXB0X21pZHhfYW5kX3ZlcmlmeSA8cG9zPiA8ZGF0YT4gPG9iamRpcj4gPHN0cmluZz4KK2NvcnJ1cHRfbWlkeF9hbmRfdmVyaWZ5KCkgeworCVBPUz0kMSAmJgorCURBVEE9IiR7MjotXDB9IiAmJgorCU9CSkRJUj0kMyAmJgorCUdSRVBTVFI9IiQ0IiAmJgorCUNPTU1BTkQ9IiQ1IiAmJgorCWlmIHRlc3QgLXogIiRDT01NQU5EIgorCXRoZW4KKwkJQ09NTUFORD0iZ2l0IG11bHRpLXBhY2staW5kZXggdmVyaWZ5IC0tb2JqZWN0LWRpcj0kT0JKRElSIgorCWZpICYmCisJRklMRT0kT0JKRElSL3BhY2svbXVsdGktcGFjay1pbmRleCAmJgorCWNobW9kIGErdyAkRklMRSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBtdiBtaWR4LWJhY2t1cCAkRklMRSAmJgorCWNwICRGSUxFIG1pZHgtYmFja3VwICYmCisJcHJpbnRmICIkREFUQSIgfCBkZCBvZj0iJEZJTEUiIGJzPTEgc2Vlaz0iJFBPUyIgY29udj1ub3RydW5jICYmCisJdGVzdF9tdXN0X2ZhaWwgJENPTU1BTkQgMj50ZXN0X2VyciAmJgorCWdyZXAgLXYgIl4rIiB0ZXN0X2VyciA+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiJEdSRVBTVFIiIGVycgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgYmFkIHNpZ25hdHVyZScgJworCWNvcnJ1cHRfbWlkeF9hbmRfdmVyaWZ5IDAgIlwwMCIgJG9iamRpciBcCisJCSJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSIKKycKKworSEFTSF9MRU49JCh0ZXN0X29pZCByYXdzeikKK05VTV9PQkpFQ1RTPTc0CitNSURYX0JZVEVfVkVSU0lPTj00CitNSURYX0JZVEVfT0lEX1ZFUlNJT049NQorTUlEWF9CWVRFX0NIVU5LX0NPVU5UPTYKK01JRFhfSEVBREVSX1NJWkU9MTIKK01JRFhfQllURV9DSFVOS19JRD0kTUlEWF9IRUFERVJfU0laRQorTUlEWF9CWVRFX0NIVU5LX09GRlNFVD0kKCgkTUlEWF9IRUFERVJfU0laRSArIDQpKQorTUlEWF9OVU1fQ0hVTktTPTUKK01JRFhfQ0hVTktfTE9PS1VQX1dJRFRIPTEyCitNSURYX09GRlNFVF9QQUNLTkFNRVM9JCgoJE1JRFhfSEVBREVSX1NJWkUgKyBcCisJCQkgJE1JRFhfTlVNX0NIVU5LUyAqICRNSURYX0NIVU5LX0xPT0tVUF9XSURUSCkpCitNSURYX0JZVEVfUEFDS05BTUVfT1JERVI9JCgoJE1JRFhfT0ZGU0VUX1BBQ0tOQU1FUyArIDIpKQorTUlEWF9PRkZTRVRfT0lEX0ZBTk9VVD0kKCgkTUlEWF9PRkZTRVRfUEFDS05BTUVTICsgJCh0ZXN0X29pZCBwYWNrbmFtZW9mZikpKQorTUlEWF9PSURfRkFOT1VUX1dJRFRIPTQKK01JRFhfQllURV9PSURfRkFOT1VUX09SREVSPSQoKE1JRFhfT0ZGU0VUX09JRF9GQU5PVVQgKyAyNTAgKiAkTUlEWF9PSURfRkFOT1VUX1dJRFRIICsgJCh0ZXN0X29pZCBmYW5vdXRvZmYpKSkKK01JRFhfT0ZGU0VUX09JRF9MT09LVVA9JCgoJE1JRFhfT0ZGU0VUX09JRF9GQU5PVVQgKyAyNTYgKiAkTUlEWF9PSURfRkFOT1VUX1dJRFRIKSkKK01JRFhfQllURV9PSURfTE9PS1VQPSQoKCRNSURYX09GRlNFVF9PSURfTE9PS1VQICsgMTYgKiAkSEFTSF9MRU4pKQorTUlEWF9PRkZTRVRfT0JKRUNUX09GRlNFVFM9JCgoJE1JRFhfT0ZGU0VUX09JRF9MT09LVVAgKyAkTlVNX09CSkVDVFMgKiAkSEFTSF9MRU4pKQorTUlEWF9PRkZTRVRfV0lEVEg9OAorTUlEWF9CWVRFX1BBQ0tfSU5UX0lEPSQoKCRNSURYX09GRlNFVF9PQkpFQ1RfT0ZGU0VUUyArIDE2ICogJE1JRFhfT0ZGU0VUX1dJRFRIICsgMikpCitNSURYX0JZVEVfT0ZGU0VUPSQoKCRNSURYX09GRlNFVF9PQkpFQ1RfT0ZGU0VUUyArIDE2ICogJE1JRFhfT0ZGU0VUX1dJRFRIICsgNikpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBiYWQgdmVyc2lvbicgJworCWNvcnJ1cHRfbWlkeF9hbmRfdmVyaWZ5ICRNSURYX0JZVEVfVkVSU0lPTiAiXDAwIiAkb2JqZGlyIFwKKwkJIm11bHRpLXBhY2staW5kZXggdmVyc2lvbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGJhZCBPSUQgdmVyc2lvbicgJworCWNvcnJ1cHRfbWlkeF9hbmRfdmVyaWZ5ICRNSURYX0JZVEVfT0lEX1ZFUlNJT04gIlwwMiIgJG9iamRpciBcCisJCSJoYXNoIHZlcnNpb24iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0cnVuY2F0ZWQgY2h1bmsgY291bnQnICcKKwljb3JydXB0X21pZHhfYW5kX3ZlcmlmeSAkTUlEWF9CWVRFX0NIVU5LX0NPVU5UICJcMDEiICRvYmpkaXIgXAorCQkibWlzc2luZyByZXF1aXJlZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGV4dGVuZGVkIGNodW5rIGNvdW50JyAnCisJY29ycnVwdF9taWR4X2FuZF92ZXJpZnkgJE1JRFhfQllURV9DSFVOS19DT1VOVCAiXDA3IiAkb2JqZGlyIFwKKwkJInRlcm1pbmF0aW5nIG11bHRpLXBhY2staW5kZXggY2h1bmsgaWQgYXBwZWFycyBlYXJsaWVyIHRoYW4gZXhwZWN0ZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtaXNzaW5nIHJlcXVpcmVkIGNodW5rJyAnCisJY29ycnVwdF9taWR4X2FuZF92ZXJpZnkgJE1JRFhfQllURV9DSFVOS19JRCAiXDAxIiAkb2JqZGlyIFwKKwkJIm1pc3NpbmcgcmVxdWlyZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBpbnZhbGlkIGNodW5rIG9mZnNldCcgJworCWNvcnJ1cHRfbWlkeF9hbmRfdmVyaWZ5ICRNSURYX0JZVEVfQ0hVTktfT0ZGU0VUICJcMDEiICRvYmpkaXIgXAorCQkiaW52YWxpZCBjaHVuayBvZmZzZXQgKHRvbyBsYXJnZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBwYWNrbmFtZXMgb3V0IG9mIG9yZGVyJyAnCisJY29ycnVwdF9taWR4X2FuZF92ZXJpZnkgJE1JRFhfQllURV9QQUNLTkFNRV9PUkRFUiAieiIgJG9iamRpciBcCisJCSJwYWNrIG5hbWVzIG91dCBvZiBvcmRlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHBhY2tuYW1lcyBvdXQgb2Ygb3JkZXInICcKKwljb3JydXB0X21pZHhfYW5kX3ZlcmlmeSAkTUlEWF9CWVRFX1BBQ0tOQU1FX09SREVSICJhIiAkb2JqZGlyIFwKKwkJImZhaWxlZCB0byBsb2FkIHBhY2siCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBvaWQgZmFub3V0IG91dCBvZiBvcmRlcicgJworCWNvcnJ1cHRfbWlkeF9hbmRfdmVyaWZ5ICRNSURYX0JZVEVfT0lEX0ZBTk9VVF9PUkRFUiAiXDAxIiAkb2JqZGlyIFwKKwkJIm9pZCBmYW5vdXQgb3V0IG9mIG9yZGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgb2lkIGxvb2t1cCBvdXQgb2Ygb3JkZXInICcKKwljb3JydXB0X21pZHhfYW5kX3ZlcmlmeSAkTUlEWF9CWVRFX09JRF9MT09LVVAgIlwwMCIgJG9iamRpciBcCisJCSJvaWQgbG9va3VwIG91dCBvZiBvcmRlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGluY29ycmVjdCBwYWNrLWludC1pZCcgJworCWNvcnJ1cHRfbWlkeF9hbmRfdmVyaWZ5ICRNSURYX0JZVEVfUEFDS19JTlRfSUQgIlwwNyIgJG9iamRpciBcCisJCSJiYWQgcGFjay1pbnQtaWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBpbmNvcnJlY3Qgb2Zmc2V0JyAnCisJY29ycnVwdF9taWR4X2FuZF92ZXJpZnkgJE1JRFhfQllURV9PRkZTRVQgIlwzNzciICRvYmpkaXIgXAorCQkiaW5jb3JyZWN0IG9iamVjdCBvZmZzZXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1mc2NrIGluY29ycmVjdCBvZmZzZXQnICcKKwljb3JydXB0X21pZHhfYW5kX3ZlcmlmeSAkTUlEWF9CWVRFX09GRlNFVCAiXDM3NyIgJG9iamRpciBcCisJCSJpbmNvcnJlY3Qgb2JqZWN0IG9mZnNldCIgXAorCQkiZ2l0IC1jIGNvcmUubXVsdGlwYWNraW5kZXg9dHJ1ZSBmc2NrIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgcHJvZ3Jlc3Mgb2ZmIGZvciByZWRpcmVjdGVkIHN0ZGVycicgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IC0tb2JqZWN0LWRpcj0kb2JqZGlyIHJlcGFjayAyPmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayBmb3JjZSBwcm9ncmVzcyBvbiBmb3Igc3RkZXJyJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPSRvYmpkaXIgLS1wcm9ncmVzcyByZXBhY2sgMj5lcnIgJiYKKwl0ZXN0X2ZpbGVfbm90X2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgd2l0aCB0aGUgLS1uby1wcm9ncmVzcyBvcHRpb24nICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXI9JG9iamRpciAtLW5vLXByb2dyZXNzIHJlcGFjayAyPmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayByZW1vdmVzIG11bHRpLXBhY2staW5kZXgnICcKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkb2JqZGlyL3BhY2svbXVsdGktcGFjay1pbmRleCAmJgorCUdJVF9URVNUX01VTFRJX1BBQ0tfSU5ERVg9MCBnaXQgcmVwYWNrIC1hZGYgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkb2JqZGlyL3BhY2svbXVsdGktcGFjay1pbmRleAorJworCitjb21wYXJlX3Jlc3VsdHNfd2l0aF9taWR4ICJhZnRlciByZXBhY2siCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpLXBhY2staW5kZXggYW5kIHBhY2stYml0bWFwJyAnCisJZ2l0IC1jIHJlcGFjay53cml0ZUJpdG1hcHM9dHJ1ZSByZXBhY2sgLWFkICYmCisJZ2l0IG11bHRpLXBhY2staW5kZXggd3JpdGUgJiYKKwlnaXQgcmV2LWxpc3QgLS10ZXN0LWJpdG1hcCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpLXBhY2staW5kZXggYW5kIGFsdGVybmF0ZXMnICcKKwlnaXQgaW5pdCAtLWJhcmUgYWx0LmdpdCAmJgorCWVjaG8gJChwd2QpL2FsdC5naXQvb2JqZWN0cyA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCWVjaG8gY29udGVudDEgPmZpbGUxICYmCisJYWx0YmxvYj0kKEdJVF9ESVI9YWx0LmdpdCBnaXQgaGFzaC1vYmplY3QgLXcgZmlsZTEpICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgJGFsdGJsb2IgJiYKKwlnaXQgcmV2LWxpc3QgLS1hbGwKKycKKworY29tcGFyZV9yZXN1bHRzX3dpdGhfbWlkeCAid2l0aCBhbHRlcm5hdGUgKGxvY2FsIG1pZHgpIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aS1wYWNrLWluZGV4IGluIGFuIGFsdGVybmF0ZScgJworCW12IC5naXQvb2JqZWN0cy9wYWNrLyogYWx0LmdpdC9vYmplY3RzL3BhY2sgJiYKKwl0ZXN0X2NvbW1pdCBhZGRfbG9jYWxfb2JqZWN0cyAmJgorCWdpdCByZXBhY2sgLS1sb2NhbCAmJgorCWdpdCBtdWx0aS1wYWNrLWluZGV4IHdyaXRlICYmCisJbWlkeF9yZWFkX2V4cGVjdCAxIDMgNCAkb2JqZGlyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEgJiYKKwlybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qCisnCisKK2NvbXBhcmVfcmVzdWx0c193aXRoX21pZHggIndpdGggYWx0ZXJuYXRlIChyZW1vdGUgbWlkeCkiCisKKyMgdXNhZ2U6IGNvcnJ1cHRfZGF0YSA8ZmlsZT4gPHBvcz4gWzxkYXRhPl0KK2NvcnJ1cHRfZGF0YSAoKSB7CisJZmlsZT0kMQorCXBvcz0kMgorCWRhdGE9IiR7MzotXDB9IgorCXByaW50ZiAiJGRhdGEiIHwgZGQgb2Y9IiRmaWxlIiBicz0xIHNlZWs9IiRwb3MiIGNvbnY9bm90cnVuYworfQorCisjIEZvcmNlIDY0LWJpdCBvZmZzZXRzIGJ5IG1hbmlwdWxhdGluZyB0aGUgaWR4IGZpbGUuCisjIFRoaXMgbWFrZXMgdGhlIElEWCBmaWxlIF9pbmNvcnJlY3RfIHNvIGJlIGNhcmVmdWwgdG8gY2xlYW4gdXAgYWZ0ZXIhCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JjZSBzb21lIDY0LWJpdCBvZmZzZXRzIHdpdGggcGFjay1vYmplY3RzJyAnCisJbWtkaXIgb2JqZWN0czY0ICYmCisJbWtkaXIgb2JqZWN0czY0L3BhY2sgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMTEpCisJZG8KKwkJZ2VuZXJhdGVfb2JqZWN0cyAxMQorCWRvbmUgJiYKKwljb21taXRfYW5kX2xpc3Rfb2JqZWN0cyAmJgorCXBhY2s2ND0kKGdpdCBwYWNrLW9iamVjdHMgLS1pbmRleC12ZXJzaW9uPTIsMHg0MCBvYmplY3RzNjQvcGFjay90ZXN0LTY0IDxvYmotbGlzdCkgJiYKKwlpZHg2ND1vYmplY3RzNjQvcGFjay90ZXN0LTY0LSRwYWNrNjQuaWR4ICYmCisJY2htb2QgdSt3ICRpZHg2NCAmJgorCWNvcnJ1cHRfZGF0YSAkaWR4NjQgJCh0ZXN0X29pZCBpZHhvZmYpICJcMDIiICYmCisJbWlkeDY0PSQoZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPW9iamVjdHM2NCB3cml0ZSkgJiYKKwltaWR4X3JlYWRfZXhwZWN0IDEgNjMgNSBvYmplY3RzNjQgIiBsYXJnZS1vZmZzZXRzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbXVsdGktcGFjay1pbmRleCB3aXRoIDY0LWJpdCBvZmZzZXRzJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggdmVyaWZ5IC0tb2JqZWN0LWRpcj1vYmplY3RzNjQKKycKKworTlVNX09CSkVDVFM9NjMKK01JRFhfT0ZGU0VUX09JRF9GQU5PVVQ9JCgoTUlEWF9PRkZTRVRfUEFDS05BTUVTICsgNTQpKQorTUlEWF9PRkZTRVRfT0lEX0xPT0tVUD0kKChNSURYX09GRlNFVF9PSURfRkFOT1VUICsgMjU2ICogJE1JRFhfT0lEX0ZBTk9VVF9XSURUSCkpCitNSURYX09GRlNFVF9PQkpFQ1RfT0ZGU0VUUz0kKCgkTUlEWF9PRkZTRVRfT0lEX0xPT0tVUCArICROVU1fT0JKRUNUUyAqICRIQVNIX0xFTikpCitNSURYX09GRlNFVF9MQVJHRV9PRkZTRVRTPSQoKCRNSURYX09GRlNFVF9PQkpFQ1RfT0ZGU0VUUyArICROVU1fT0JKRUNUUyAqICRNSURYX09GRlNFVF9XSURUSCkpCitNSURYX0JZVEVfTEFSR0VfT0ZGU0VUPSQoKCRNSURYX09GRlNFVF9MQVJHRV9PRkZTRVRTICsgMykpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBpbmNvcnJlY3QgNjQtYml0IG9mZnNldCcgJworCWNvcnJ1cHRfbWlkeF9hbmRfdmVyaWZ5ICRNSURYX0JZVEVfTEFSR0VfT0ZGU0VUICJcMDciIG9iamVjdHM2NCBcCisJCSJpbmNvcnJlY3Qgb2JqZWN0IG9mZnNldCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwaXJlIHRlc3RzJyAnCisJbWtkaXIgZHVwICYmCisJKAorCQljZCBkdXAgJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdC10b29sIGdlbnJhbmRvbSAiZGF0YSIgNDA5NiA+bGFyZ2VfZmlsZS50eHQgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBsYXJnZV9maWxlLnR4dCAmJgorCQlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMjApCisJCWRvCisJCQl0ZXN0X2NvbW1pdCAkaQorCQlkb25lICYmCisJCWdpdCBicmFuY2ggQSBIRUFEICYmCisJCWdpdCBicmFuY2ggQiBIRUFEfjggJiYKKwkJZ2l0IGJyYW5jaCBDIEhFQUR+MTMgJiYKKwkJZ2l0IGJyYW5jaCBEIEhFQUR+MTYgJiYKKwkJZ2l0IGJyYW5jaCBFIEhFQUR+MTggJiYKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLmdpdC9vYmplY3RzL3BhY2svcGFjay1BIDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL0EKKwkJXnJlZnMvaGVhZHMvQgorCQlFT0YKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLmdpdC9vYmplY3RzL3BhY2svcGFjay1CIDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL0IKKwkJXnJlZnMvaGVhZHMvQworCQlFT0YKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLmdpdC9vYmplY3RzL3BhY2svcGFjay1DIDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL0MKKwkJXnJlZnMvaGVhZHMvRAorCQlFT0YKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLmdpdC9vYmplY3RzL3BhY2svcGFjay1EIDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL0QKKwkJXnJlZnMvaGVhZHMvRQorCQlFT0YKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLmdpdC9vYmplY3RzL3BhY2svcGFjay1FIDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL0UKKwkJRU9GCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHdyaXRlICYmCisJCWNwIC1yIC5naXQvb2JqZWN0cy9wYWNrIC5naXQvb2JqZWN0cy9wYWNrLWJhY2t1cAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwaXJlIGRvZXMgbm90IHJlbW92ZSBhbnkgcGFja3MnICcKKwkoCisJCWNkIGR1cCAmJgorCQlscyAuZ2l0L29iamVjdHMvcGFjayA+ZXhwZWN0ICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IGV4cGlyZSAmJgorCQlscyAuZ2l0L29iamVjdHMvcGFjayA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGlyZSBwcm9ncmVzcyBvZmYgZm9yIHJlZGlyZWN0ZWQgc3RkZXJyJyAnCisJKAorCQljZCBkdXAgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggZXhwaXJlIDI+ZXJyICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBpcmUgZm9yY2UgcHJvZ3Jlc3Mgb24gZm9yIHN0ZGVycicgJworCSgKKwkJY2QgZHVwICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IC0tcHJvZ3Jlc3MgZXhwaXJlIDI+ZXJyICYmCisJCXRlc3RfZmlsZV9ub3RfZW1wdHkgZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBpcmUgd2l0aCB0aGUgLS1uby1wcm9ncmVzcyBvcHRpb24nICcKKwkoCisJCWNkIGR1cCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCAtLW5vLXByb2dyZXNzIGV4cGlyZSAyPmVyciAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwaXJlIHJlbW92ZXMgdW5yZWZlcmVuY2VkIHBhY2tzJyAnCisJKAorCQljZCBkdXAgJiYKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLmdpdC9vYmplY3RzL3BhY2svcGFjay1jb21iaW5lZCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9BCisJCV5yZWZzL2hlYWRzL0MKKwkJRU9GCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHdyaXRlICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrIHwgZ3JlcCAtdiAtZSBwYWNrLVtBQl0gPmV4cGVjdCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCBleHBpcmUgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2sgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrLyB8IGdyZXAgaWR4ID5leHBlY3QtaWR4ICYmCisJCXRlc3QtdG9vbCByZWFkLW1pZHggLmdpdC9vYmplY3RzIHwgZ3JlcCBpZHggPmFjdHVhbC1taWR4ICYmCisJCXRlc3RfY21wIGV4cGVjdC1pZHggYWN0dWFsLW1pZHggJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggdmVyaWZ5ICYmCisJCWdpdCBmc2NrCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgd2l0aCBtaW5pbXVtIHNpemUgZG9lcyBub3QgYWx0ZXIgZXhpc3RpbmcgcGFja3MnICcKKwkoCisJCWNkIGR1cCAmJgorCQlybSAtcmYgLmdpdC9vYmplY3RzL3BhY2sgJiYKKwkJbXYgLmdpdC9vYmplY3RzL3BhY2stYmFja3VwIC5naXQvb2JqZWN0cy9wYWNrICYmCisJCXRlc3QtdG9vbCBjaG10aW1lID0tNSAuZ2l0L29iamVjdHMvcGFjay9wYWNrLUQqICYmCisJCXRlc3QtdG9vbCBjaG10aW1lID0tNCAuZ2l0L29iamVjdHMvcGFjay9wYWNrLUMqICYmCisJCXRlc3QtdG9vbCBjaG10aW1lID0tMyAuZ2l0L29iamVjdHMvcGFjay9wYWNrLUIqICYmCisJCXRlc3QtdG9vbCBjaG10aW1lID0tMiAuZ2l0L29iamVjdHMvcGFjay9wYWNrLUEqICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrID5leHBlY3QgJiYKKwkJTUlOU0laRT0kKHRlc3QtdG9vbCBwYXRoLXV0aWxzIGZpbGUtc2l6ZSAuZ2l0L29iamVjdHMvcGFjay8qcGFjayB8IHNvcnQgLW4gfCBoZWFkIC1uIDEpICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHJlcGFjayAtLWJhdGNoLXNpemU9JE1JTlNJWkUgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2sgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgcmVzcGVjdHMgcmVwYWNrLnBhY2tLZXB0T2JqZWN0cz1mYWxzZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtZiBkdXAvLmdpdC9vYmplY3RzL3BhY2svKmtlZXAgJiYKKwkoCisJCWNkIGR1cCAmJgorCQlscyAuZ2l0L29iamVjdHMvcGFjay8qaWR4ID5pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IGlkeC1saXN0ICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrLyoucGFjayB8IHNlZCAicy9cLnBhY2svLmtlZXAvIiA+a2VlcC1saXN0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUga2VlcC1saXN0ICYmCisJCWZvciBrZWVwIGluICQoY2F0IGtlZXAtbGlzdCkKKwkJZG8KKwkJCXRvdWNoICRrZWVwIHx8IHJldHVybiAxCisJCWRvbmUgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggcmVwYWNrIC0tYmF0Y2gtc2l6ZT0wICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrLyppZHggPmlkeC1saXN0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgaWR4LWxpc3QgJiYKKwkJdGVzdC10b29sIHJlYWQtbWlkeCAuZ2l0L29iamVjdHMgfCBncmVwIGlkeCA+bWlkeC1saXN0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgbWlkeC1saXN0ICYmCisJCVRISVJEX1NNQUxMRVNUX1NJWkU9JCh0ZXN0LXRvb2wgcGF0aC11dGlscyBmaWxlLXNpemUgLmdpdC9vYmplY3RzL3BhY2svKnBhY2sgfCBzb3J0IC1uIHwgc2VkIC1uIDNwKSAmJgorCQlCQVRDSF9TSVpFPSQoKFRISVJEX1NNQUxMRVNUX1NJWkUgKyAxKSkgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggcmVwYWNrIC0tYmF0Y2gtc2l6ZT0kQkFUQ0hfU0laRSAmJgorCQlscyAuZ2l0L29iamVjdHMvcGFjay8qaWR4ID5pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IGlkeC1saXN0ICYmCisJCXRlc3QtdG9vbCByZWFkLW1pZHggLmdpdC9vYmplY3RzIHwgZ3JlcCBpZHggPm1pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IG1pZHgtbGlzdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrIGNyZWF0ZXMgYSBuZXcgcGFjaycgJworCSgKKwkJY2QgZHVwICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrLyppZHggPmlkeC1saXN0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgaWR4LWxpc3QgJiYKKwkJVEhJUkRfU01BTExFU1RfU0laRT0kKHRlc3QtdG9vbCBwYXRoLXV0aWxzIGZpbGUtc2l6ZSAuZ2l0L29iamVjdHMvcGFjay8qcGFjayB8IHNvcnQgLW4gfCBoZWFkIC1uIDMgfCB0YWlsIC1uIDEpICYmCisJCUJBVENIX1NJWkU9JCgoJFRISVJEX1NNQUxMRVNUX1NJWkUgKyAxKSkgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggcmVwYWNrIC0tYmF0Y2gtc2l6ZT0kQkFUQ0hfU0laRSAmJgorCQlscyAuZ2l0L29iamVjdHMvcGFjay8qaWR4ID5pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IGlkeC1saXN0ICYmCisJCXRlc3QtdG9vbCByZWFkLW1pZHggLmdpdC9vYmplY3RzIHwgZ3JlcCBpZHggPm1pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IG1pZHgtbGlzdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwaXJlIHJlbW92ZXMgcmVwYWNrZWQgcGFja3MnICcKKwkoCisJCWNkIGR1cCAmJgorCQlscyAtYWwgLmdpdC9vYmplY3RzL3BhY2svKnBhY2sgJiYKKwkJbHMgLVMgLmdpdC9vYmplY3RzL3BhY2svKnBhY2sgfCBoZWFkIC1uIDQgPmV4cGVjdCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCBleHBpcmUgJiYKKwkJbHMgLVMgLmdpdC9vYmplY3RzL3BhY2svKnBhY2sgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3QtdG9vbCByZWFkLW1pZHggLmdpdC9vYmplY3RzIHwgZ3JlcCBpZHggPm1pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IG1pZHgtbGlzdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwaXJlIHdvcmtzIHdoZW4gYWRkaW5nIG5ldyBwYWNrcycgJworCSgKKwkJY2QgZHVwICYmCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stY29tYmluZWQgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvQQorCQlecmVmcy9oZWFkcy9CCisJCUVPRgorCQlnaXQgcGFjay1vYmplY3RzIC0tcmV2cyAuZ2l0L29iamVjdHMvcGFjay9wYWNrLWNvbWJpbmVkIDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL0IKKwkJXnJlZnMvaGVhZHMvQworCQlFT0YKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLmdpdC9vYmplY3RzL3BhY2svcGFjay1jb21iaW5lZCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9DCisJCV5yZWZzL2hlYWRzL0QKKwkJRU9GCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHdyaXRlICYmCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL2EtcGFjayA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9ECisJCV5yZWZzL2hlYWRzL0UKKwkJRU9GCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHdyaXRlICYmCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL3otcGFjayA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9FCisJCUVPRgorCQlnaXQgbXVsdGktcGFjay1pbmRleCBleHBpcmUgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2svIHwgZ3JlcCBpZHggPmV4cGVjdCAmJgorCQl0ZXN0LXRvb2wgcmVhZC1taWR4IC5naXQvb2JqZWN0cyB8IGdyZXAgaWR4ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCB2ZXJpZnkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGlyZSByZXNwZWN0cyAua2VlcCBmaWxlcycgJworCSgKKwkJY2QgZHVwICYmCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stYWxsIDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL0EKKwkJRU9GCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHdyaXRlICYmCisJCVBBQ0tBPSQobHMgLmdpdC9vYmplY3RzL3BhY2svYS1wYWNrKlwucGFjayB8IHNlZCBzL1wucGFja1wkLy8pICYmCisJCXRvdWNoICRQQUNLQS5rZWVwICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IGV4cGlyZSAmJgorCQlscyAtUyAuZ2l0L29iamVjdHMvcGFjay9hLXBhY2sqIHwgZ3JlcCAkUEFDS0EgPmEtcGFjay1maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGEtcGFjay1maWxlcyAmJgorCQl0ZXN0LXRvb2wgcmVhZC1taWR4IC5naXQvb2JqZWN0cyB8IGdyZXAgaWR4ID5taWR4LWxpc3QgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBtaWR4LWxpc3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayAtLWJhdGNoLXNpemU9MCByZXBhY2tzIGV2ZXJ5dGhpbmcnICcKKwkoCisJCWNkIGR1cCAmJgorCQlybSAuZ2l0L29iamVjdHMvcGFjay8qLmtlZXAgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2svKmlkeCA+aWR4LWxpc3QgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBpZHgtbGlzdCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCByZXBhY2sgLS1iYXRjaC1zaXplPTAgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2svKmlkeCA+aWR4LWxpc3QgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBpZHgtbGlzdCAmJgorCQl0ZXN0LXRvb2wgcmVhZC1taWR4IC5naXQvb2JqZWN0cyB8IGdyZXAgaWR4ID5taWR4LWxpc3QgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBtaWR4LWxpc3QgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggZXhwaXJlICYmCisJCWxzIC1hbCAuZ2l0L29iamVjdHMvcGFjay8qaWR4ID5pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGlkeC1saXN0ICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHJlcGFjayAtLWJhdGNoLXNpemU9MCAmJgorCQlscyAtYWwgLmdpdC9vYmplY3RzL3BhY2svKmlkeCA+bmV3LWlkeC1saXN0ICYmCisJCXRlc3RfY21wIGlkeC1saXN0IG5ldy1pZHgtbGlzdAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzE5L25vLW9iamVjdHMubWlkeCBiL3QvdDUzMTkvbm8tb2JqZWN0cy5taWR4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NjZiOGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzE5L25vLW9iamVjdHMubWlkeApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MzIwLWRlbHRhLWlzbGFuZHMuc2ggYi90L3Q1MzIwLWRlbHRhLWlzbGFuZHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmVhOTJhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMjAtZGVsdGEtaXNsYW5kcy5zaApAQCAtMCwwICsxLDE0MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2V4ZXJjaXNlIGRlbHRhIGlzbGFuZHMnCisuIC4vdGVzdC1saWIuc2gKKworIyByZXR1cm5zIHRydWUgaWZmICQxIGlzIGEgZGVsdGEgYmFzZWQgb24gJDIKK2lzX2RlbHRhX2Jhc2UgKCkgeworCWRlbHRhX2Jhc2U9JChlY2hvICIkMSIgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjaz0nJShkZWx0YWJhc2UpJykgJiYKKwllY2hvID4mMiAiJDEgaGFzIGJhc2UgJGRlbHRhX2Jhc2UiICYmCisJdGVzdCAiJGRlbHRhX2Jhc2UiID0gIiQyIgorfQorCisjIGdlbmVyYXRlIGEgY29tbWl0IG9uIGJyYW5jaCAkMSB3aXRoIGEgc2luZ2xlIGZpbGUsICJmaWxlIiwgd2hvc2UKKyMgY29udGVudCBpcyBtb3N0bHkgYmFzZWQgb24gdGhlIHNlZWQgJDIsIGJ1dCB3aXRoIGEgdW5pcXVlIGJpdAorIyBvZiBjb250ZW50ICQzIGFwcGVuZGVkLiBUaGlzIHNob3VsZCBhbGxvdyB1cyB0byBzZWUgd2hldGhlcgorIyBibG9icyBvZiBkaWZmZXJlbnQgcmVmcyBkZWx0YSBhZ2FpbnN0IGVhY2ggb3RoZXIuCitjb21taXQoKSB7CisJYmxvYj0kKHsgdGVzdC10b29sIGdlbnJhbmRvbSAiJDIiIDEwMjQwICYmIGVjaG8gIiQzIjsgfSB8CisJICAgICAgIGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCXRyZWU9JChwcmludGYgJzEwMDY0NCBibG9iICVzXHRmaWxlXG4nICIkYmxvYiIgfCBnaXQgbWt0cmVlKSAmJgorCWNvbW1pdD0kKGVjaG8gIiQyLSQzIiB8IGdpdCBjb21taXQtdHJlZSAiJHRyZWUiICR7NDorLXAgIiQ0In0pICYmCisJZ2l0IHVwZGF0ZS1yZWYgInJlZnMvaGVhZHMvJDEiICIkY29tbWl0IiAmJgorCWV2YWwgIiQxIic9JChnaXQgcmV2LXBhcnNlICQxOmZpbGUpJyAmJgorCWV2YWwgImVjaG8gPiYyICQxPVwkJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbW1pdHMnICcKKwljb21taXQgb25lIHNlZWQgMSAmJgorCWNvbW1pdCB0d28gc2VlZCAxMgorJworCisjIE5vdGU6IFRoaXMgaXMgaGVhdmlseSBkZXBlbmRlbnQgb24gdGhlICJwcmVmZXIgbGFyZ2VyIG9iamVjdHMgYXMgYmFzZSIKKyMgaGV1cmlzdGljLgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFuaWxsYSByZXBhY2sgZGVsdGFzIG9uZSBhZ2FpbnN0IHR3bycgJworCWdpdCByZXBhY2sgLWFkZiAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzbGFuZCByZXBhY2sgd2l0aCBubyBpc2xhbmQgZGVmaW5pdGlvbiBpcyB2YW5pbGxhJyAnCisJZ2l0IHJlcGFjayAtYWRmaSAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzbGFuZCByZXBhY2sgd2l0aCBubyBtYXRjaGVzIGlzIHZhbmlsbGEnICcKKwlnaXQgLWMgInBhY2suaXNsYW5kPXJlZnMvZm9vIiByZXBhY2sgLWFkZmkgJiYKKwlpc19kZWx0YV9iYXNlICRvbmUgJHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXBhcmF0ZSBpc2xhbmRzIGRpc2FsbG93cyBkZWx0YScgJworCWdpdCAtYyAicGFjay5pc2xhbmQ9cmVmcy9oZWFkcy8oLiopIiByZXBhY2sgLWFkZmkgJiYKKwkhIGlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvICYmCisJISBpc19kZWx0YV9iYXNlICR0d28gJG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIGlzbGFuZCBhbGxvd3MgZGVsdGEnICcKKwlnaXQgLWMgInBhY2suaXNsYW5kPXJlZnMvaGVhZHMiIHJlcGFjayAtYWRmaSAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvYWxlc2NlIHNhbWUtbmFtZWQgaXNsYW5kcycgJworCWdpdCBcCisJCS1jICJwYWNrLmlzbGFuZD1yZWZzLyguKikvb25lIiBcCisJCS1jICJwYWNrLmlzbGFuZD1yZWZzLyguKikvdHdvIiBcCisJCXJlcGFjayAtYWRmaSAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzbGFuZCByZXN0cmljdGlvbnMgZHJvcCByZXVzZWQgZGVsdGFzJyAnCisJZ2l0IHJlcGFjayAtYWRmaSAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvICYmCisJZ2l0IC1jICJwYWNrLmlzbGFuZD1yZWZzL2hlYWRzLyguKikiIHJlcGFjayAtYWRpICYmCisJISBpc19kZWx0YV9iYXNlICRvbmUgJHR3byAmJgorCSEgaXNfZGVsdGFfYmFzZSAkdHdvICRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaXNsYW5kIHJlZ2V4ZXMgYXJlIGxlZnQtYW5jaG9yZWQnICcKKwlnaXQgLWMgInBhY2suaXNsYW5kPWhlYWRzLyguKikiIHJlcGFjayAtYWRmaSAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzbGFuZCByZWdleGVzIGZvbGxvdyBsYXN0LW9uZS13aW5zIHNjaGVtZScgJworCWdpdCBcCisJCS1jICJwYWNrLmlzbGFuZD1yZWZzL2hlYWRzLyguKikiIFwKKwkJLWMgInBhY2suaXNsYW5kPXJlZnMvaGVhZHMvIiBcCisJCXJlcGFjayAtYWRmaSAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNoYXJlZCBoaXN0b3J5JyAnCisJY29tbWl0IHJvb3Qgc2hhcmVkIHJvb3QgJiYKKwljb21taXQgb25lIHNoYXJlZCAxIHJvb3QgJiYKKwljb21taXQgdHdvIHNoYXJlZCAxMi1sb25nIHJvb3QKKycKKworIyBXZSBrbm93IHRoYXQgJHR3byB3aWxsIGJlIHByZWZlcnJlZCBhcyBhIGJhc2UgZnJvbSAkb25lLAorIyBiZWNhdXNlIHdlIGNhbiB0cmFuc2Zvcm0gaXQgd2l0aCBhIHB1cmUgZGVsZXRpb24uCisjCisjIFdlIGFsc28gZXhwZWN0ICRyb290IGFzIGEgZGVsdGEgYWdhaW5zdCAkdHdvIGJ5IHRoZSAibG9uZ2VzdCBpcyBiYXNlIiBydWxlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFuaWxsYSBkZWx0YSBnb2VzIGJldHdlZW4gYnJhbmNoZXMnICcKKwlnaXQgcmVwYWNrIC1hZGYgJiYKKwlpc19kZWx0YV9iYXNlICRvbmUgJHR3byAmJgorCWlzX2RlbHRhX2Jhc2UgJHJvb3QgJHR3bworJworCisjIEhlcmUgd2Ugc2hvdWxkIGFsbG93ICRvbmUgdG8gYmFzZSBpdHNlbGYgb24gJHJvb3Q7IGV2ZW4gdGhvdWdoCisjIHRoZXkgYXJlIGluIGRpZmZlcmVudCBpc2xhbmRzLCB0aGUgb2JqZWN0cyBpbiAkcm9vdCBhcmUgaW4gYSBzdXBlcnNldAorIyBvZiBpc2xhbmRzIGNvbXBhcmVkIHRvIHRob3NlIGluICRvbmUuCisjCisjIFNpbWlsYXJseSwgJHR3byBjYW4gZGVsdGEgYWdhaW5zdCAkcm9vdCBieSBvdXIgcnVsZXMuIEFuZCB1bmxpa2UgJG9uZSwKKyMgaW4gd2hpY2ggd2UgYXJlIGp1c3QgYWxsb3dpbmcgaXQsIHRoZSBpc2xhbmQgcnVsZXMgYWN0dWFsbHkgcHV0ICRyb290CisjIGFzIGEgcG9zc2libGUgYmFzZSBmb3IgJHR3bywgd2hpY2ggaXQgd291bGQgbm90IG90aGVyd2lzZSBiZSAoZHVlIHRvIHRoZSBzaXplCisjIHNvcnRpbmcpLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsdGFzIGFsbG93ZWQgYWdhaW5zdCBzdXBlcnNldCBpc2xhbmRzJyAnCisJZ2l0IC1jICJwYWNrLmlzbGFuZD1yZWZzL2hlYWRzLyguKikiIHJlcGFjayAtYWRmaSAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkcm9vdCAmJgorCWlzX2RlbHRhX2Jhc2UgJHR3byAkcm9vdAorJworCisjIFdlIGFyZSBnb2luZyB0byB0ZXN0IHRoZSBwYWNrZmlsZSBvcmRlciBoZXJlLCBzbyB3ZSBhZ2FpbiBoYXZlIHRvIG1ha2Ugc29tZQorIyBhc3N1bXB0aW9ucy4gV2UgYXNzdW1lIHRoYXQgIiRyb290IiwgYXMgcGFydCBvZiBvdXIgY29yZSAib25lIiwgbXVzdCBjb21lCisjIGJlZm9yZSAiJHR3byIuIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgdGhlIGlzbGFuZCBjb2RlLiBIb3dldmVyLCBmb3IKKyMgdGhpcyB0ZXN0IHRvIGZhaWwgd2l0aG91dCBpc2xhbmRzLCB3ZSBhcmUgYWxzbyBhc3N1bWluZyB0aGF0IGl0IHdvdWxkIG5vdAorIyBvdGhlcndpc2UgZG8gc28uIFRoaXMgaXMgdHJ1ZSBieSB0aGUgY3VycmVudCB3cml0ZSBvcmRlciwgd2hpY2ggd2lsbCBwdXQKKyMgY29tbWl0cyAoYW5kIHRoZWlyIGNvbnRlbnRzKSBiZWZvcmUgdGhlaXIgcGFyZW50cy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzbGFuZCBjb3JlIHBsYWNlcyBjb3JlIG9iamVjdHMgZmlyc3QnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkcm9vdAorCSR0d28KKwlFT0YKKwlnaXQgLWMgInBhY2suaXNsYW5kPXJlZnMvaGVhZHMvKC4qKSIgXAorCSAgICAtYyAicGFjay5pc2xhbmRjb3JlPW9uZSIgXAorCSAgICByZXBhY2sgLWFkZmkgJiYKKwlnaXQgdmVyaWZ5LXBhY2sgLXYgLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrIHwKKwljdXQgLWQiICIgLWYxIHwKKwllZ3JlcCAiJHJvb3R8JHR3byIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5tYXRjaGVkIGlzbGFuZCBjb3JlIGlzIG5vdCBmYXRhbCcgJworCWdpdCAtYyAicGFjay5pc2xhbmRjb3JlPW9uZSIgcmVwYWNrIC1hZGZpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMyMS1wYWNrLWxhcmdlLW9iamVjdHMuc2ggYi90L3Q1MzIxLXBhY2stbGFyZ2Utb2JqZWN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YTU2ZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTMyMS1wYWNrLWxhcmdlLW9iamVjdHMuc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxOCBKb2hhbm5lcyBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwYWNrLW9iamVjdCB3aXRoICJsYXJnZSIgZGVsdGFzCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcGFjay5zaAorCisjIFR3byBzaW1pbGFyLWlzaCBvYmplY3RzIHRoYXQgd2UgaGF2ZSBjb21wdXRlZCBkZWx0YXMgYmV0d2Vlbi4KK0E9JCh0ZXN0X29pZCBwYWNrbGliXzdfMCkKK0I9JCh0ZXN0X29pZCBwYWNrbGliXzdfNzYpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY2xlYXJfcGFja3MgJiYKKwl7CisJCXBhY2tfaGVhZGVyIDIgJiYKKwkJcGFja19vYmogJEEgJEIgJiYKKwkJcGFja19vYmogJEIKKwl9ID5hYi5wYWNrICYmCisJcGFja190cmFpbGVyIGFiLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayAtLXN0ZGluIDxhYi5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayBsYXJnZSBkZWx0YXMnICcKKwlwcmludGYgIiVzXFxuIiAkQSAkQiB8CisJR0lUX1RFU1RfT0VfREVMVEFfU0laRT0yIGdpdCBwYWNrLW9iamVjdHMgdG1wLXBhY2sKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzIyLXBhY2stb2JqZWN0cy1zcGFyc2Uuc2ggYi90L3Q1MzIyLXBhY2stb2JqZWN0cy1zcGFyc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTU4MWVhZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMjItcGFjay1vYmplY3RzLXNwYXJzZS5zaApAQCAtMCwwICsxLDEzOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BhY2stb2JqZWN0cyBvYmplY3Qgc2VsZWN0aW9uIHVzaW5nIHNwYXJzZSBhbGdvcml0aG0nCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwbycgJworCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMykKKwlkbworCQlta2RpciBmJGkgJiYKKwkJZm9yIGogaW4gJCh0ZXN0X3NlcSAxIDMpCisJCWRvCisJCQlta2RpciBmJGkvZiRqICYmCisJCQllY2hvICRqID5mJGkvZiRqL2RhdGEudHh0CisJCWRvbmUKKwlkb25lICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbGl6ZWQgdHJlZXMiICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDMpCisJZG8KKwkJZ2l0IGNoZWNrb3V0IC1iIHRvcGljJGkgbWFzdGVyICYmCisJCWVjaG8gY2hhbmdlLSRpID5mJGkvZiRpL2RhdGEudHh0ICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNoYW5nZWQgZiRpL2YkaS9kYXRhLnR4dCIKKwlkb25lICYmCisJY2F0ID5wYWNraW5wdXQudHh0IDw8LUVPRiAmJgorCXRvcGljMQorCV50b3BpYzIKKwledG9waWMzCisJRU9GCisJZ2l0IHJldi1wYXJzZQkJCVwKKwkJdG9waWMxCQkJXAorCQl0b3BpYzFee3RyZWV9CQlcCisJCXRvcGljMTpmMQkJXAorCQl0b3BpYzE6ZjEvZjEJCVwKKwkJdG9waWMxOmYxL2YxL2RhdGEudHh0IHwgc29ydCA+ZXhwZWN0X29iamVjdHMudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1zcGFyc2UgcGFjay1vYmplY3RzJyAnCisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCAtLXJldnMgLS1uby1zcGFyc2UgPHBhY2tpbnB1dC50eHQgPm5vbnNwYXJzZS5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgLW8gbm9uc3BhcnNlLmlkeCBub25zcGFyc2UucGFjayAmJgorCWdpdCBzaG93LWluZGV4IDxub25zcGFyc2UuaWR4IHwgYXdrICJ7cHJpbnQgXCQyfSIgPm5vbnNwYXJzZV9vYmplY3RzLnR4dCAmJgorCXRlc3RfY21wIGV4cGVjdF9vYmplY3RzLnR4dCBub25zcGFyc2Vfb2JqZWN0cy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BhcnNlIHBhY2stb2JqZWN0cycgJworCWdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgLS1yZXZzIC0tc3BhcnNlIDxwYWNraW5wdXQudHh0ID5zcGFyc2UucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIC1vIHNwYXJzZS5pZHggc3BhcnNlLnBhY2sgJiYKKwlnaXQgc2hvdy1pbmRleCA8c3BhcnNlLmlkeCB8IGF3ayAie3ByaW50IFwkMn0iID5zcGFyc2Vfb2JqZWN0cy50eHQgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfb2JqZWN0cy50eHQgc3BhcnNlX29iamVjdHMudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2R1cGxpY2F0ZSBhIGZvbGRlciBmcm9tIGYzIGFuZCBjb21taXQgdG8gdG9waWMxJyAnCisJZ2l0IGNoZWNrb3V0IHRvcGljMSAmJgorCWVjaG8gY2hhbmdlLTMgPmYzL2YzL2RhdGEudHh0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlZCBmMy9mMy9kYXRhLnR4dCIgJiYKKwlnaXQgcmV2LXBhcnNlCQkJXAorCQl0b3BpYzF+MQkJXAorCQl0b3BpYzF+MV57dHJlZX0JCVwKKwkJdG9waWMxXnt0cmVlfQkJXAorCQl0b3BpYzEJCQlcCisJCXRvcGljMTpmMQkJXAorCQl0b3BpYzE6ZjEvZjEJCVwKKwkJdG9waWMxOmYxL2YxL2RhdGEudHh0IHwgc29ydCA+cmVxdWlyZWRfb2JqZWN0cy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLXNwYXJzZSBwYWNrLW9iamVjdHMnICcKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IC0tcmV2cyAtLW5vLXNwYXJzZSA8cGFja2lucHV0LnR4dCA+bm9uc3BhcnNlLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayAtbyBub25zcGFyc2UuaWR4IG5vbnNwYXJzZS5wYWNrICYmCisJZ2l0IHNob3ctaW5kZXggPG5vbnNwYXJzZS5pZHggfCBhd2sgIntwcmludCBcJDJ9IiA+bm9uc3BhcnNlX29iamVjdHMudHh0ICYmCisJY29tbSAtMSAtMiByZXF1aXJlZF9vYmplY3RzLnR4dCBub25zcGFyc2Vfb2JqZWN0cy50eHQgPm5vbnNwYXJzZV9yZXF1aXJlZF9vYmplY3RzLnR4dCAmJgorCXRlc3RfY21wIHJlcXVpcmVkX29iamVjdHMudHh0IG5vbnNwYXJzZV9yZXF1aXJlZF9vYmplY3RzLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGFyc2UgcGFjay1vYmplY3RzJyAnCisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCAtLXJldnMgLS1zcGFyc2UgPHBhY2tpbnB1dC50eHQgPnNwYXJzZS5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgLW8gc3BhcnNlLmlkeCBzcGFyc2UucGFjayAmJgorCWdpdCBzaG93LWluZGV4IDxzcGFyc2UuaWR4IHwgYXdrICJ7cHJpbnQgXCQyfSIgPnNwYXJzZV9vYmplY3RzLnR4dCAmJgorCWNvbW0gLTEgLTIgcmVxdWlyZWRfb2JqZWN0cy50eHQgc3BhcnNlX29iamVjdHMudHh0ID5zcGFyc2VfcmVxdWlyZWRfb2JqZWN0cy50eHQgJiYKKwl0ZXN0X2NtcCByZXF1aXJlZF9vYmplY3RzLnR4dCBzcGFyc2VfcmVxdWlyZWRfb2JqZWN0cy50eHQKKycKKworIyBEZW1vbnN0cmF0ZSB0aGF0IHRoZSBhbGdvcml0aG1zIGRpZmZlciB3aGVuIHdlIGNvcHkgYSB0cmVlIHdob2xlc2FsZQorIyBmcm9tIG9uZSBmb2xkZXIgdG8gYW5vdGhlci4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHVwbGljYXRlIGEgZm9sZGVyIGZyb20gZjEgaW50byBmMycgJworCW1rZGlyIGYzL2Y0ICYmCisJY3AgLXIgZjEvZjEvKiBmMy9mNCAmJgorCWdpdCBhZGQgZjMvZjQgJiYKKwlnaXQgY29tbWl0IC1tICJDb3BpZWQgZjEvZjEgdG8gZjMvZjQiICYmCisJY2F0ID5wYWNraW5wdXQudHh0IDw8LUVPRiAmJgorCXRvcGljMQorCV50b3BpYzF+MQorCUVPRgorCWdpdCByZXYtcGFyc2UJCVwKKwkJdG9waWMxCQlcCisJCXRvcGljMV57dHJlZX0gICBcCisJCXRvcGljMTpmMyB8IHNvcnQgPnJlcXVpcmVkX29iamVjdHMudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1zcGFyc2UgcGFjay1vYmplY3RzJyAnCisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCAtLXJldnMgLS1uby1zcGFyc2UgPHBhY2tpbnB1dC50eHQgPm5vbnNwYXJzZS5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgLW8gbm9uc3BhcnNlLmlkeCBub25zcGFyc2UucGFjayAmJgorCWdpdCBzaG93LWluZGV4IDxub25zcGFyc2UuaWR4IHwgYXdrICJ7cHJpbnQgXCQyfSIgPm5vbnNwYXJzZV9vYmplY3RzLnR4dCAmJgorCWNvbW0gLTEgLTIgcmVxdWlyZWRfb2JqZWN0cy50eHQgbm9uc3BhcnNlX29iamVjdHMudHh0ID5ub25zcGFyc2VfcmVxdWlyZWRfb2JqZWN0cy50eHQgJiYKKwl0ZXN0X2NtcCByZXF1aXJlZF9vYmplY3RzLnR4dCBub25zcGFyc2VfcmVxdWlyZWRfb2JqZWN0cy50eHQKKycKKworIyAtLXNwYXJzZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYnkgcGFjay51c2VTcGFyc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwYXJzZSBwYWNrLW9iamVjdHMnICcKKwlHSVRfVEVTVF9QQUNLX1NQQVJTRT0tMSAmJgorCWdpdCByZXYtcGFyc2UJCQlcCisJCXRvcGljMQkJCVwKKwkJdG9waWMxXnt0cmVlfQkJXAorCQl0b3BpYzE6ZjMJCVwKKwkJdG9waWMxOmYzL2Y0CQlcCisJCXRvcGljMTpmMy9mNC9kYXRhLnR4dCB8IHNvcnQgPmV4cGVjdF9zcGFyc2Vfb2JqZWN0cy50eHQgJiYKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IC0tcmV2cyA8cGFja2lucHV0LnR4dCA+c3BhcnNlLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayAtbyBzcGFyc2UuaWR4IHNwYXJzZS5wYWNrICYmCisJZ2l0IHNob3ctaW5kZXggPHNwYXJzZS5pZHggfCBhd2sgIntwcmludCBcJDJ9IiA+c3BhcnNlX29iamVjdHMudHh0ICYmCisJdGVzdF9jbXAgZXhwZWN0X3NwYXJzZV9vYmplY3RzLnR4dCBzcGFyc2Vfb2JqZWN0cy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay51c2VTcGFyc2UgZW5hYmxlcyBhbGdvcml0aG0nICcKKwlnaXQgY29uZmlnIHBhY2sudXNlU3BhcnNlIHRydWUgJiYKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IC0tcmV2cyA8cGFja2lucHV0LnR4dCA+c3BhcnNlLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayAtbyBzcGFyc2UuaWR4IHNwYXJzZS5wYWNrICYmCisJZ2l0IHNob3ctaW5kZXggPHNwYXJzZS5pZHggfCBhd2sgIntwcmludCBcJDJ9IiA+c3BhcnNlX29iamVjdHMudHh0ICYmCisJdGVzdF9jbXAgZXhwZWN0X3NwYXJzZV9vYmplY3RzLnR4dCBzcGFyc2Vfb2JqZWN0cy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay51c2VTcGFyc2Ugb3ZlcnJpZGRlbicgJworCWdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgLS1yZXZzIC0tbm8tc3BhcnNlIDxwYWNraW5wdXQudHh0ID5zcGFyc2UucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIC1vIHNwYXJzZS5pZHggc3BhcnNlLnBhY2sgJiYKKwlnaXQgc2hvdy1pbmRleCA8c3BhcnNlLmlkeCB8IGF3ayAie3ByaW50IFwkMn0iID5zcGFyc2Vfb2JqZWN0cy50eHQgJiYKKwl0ZXN0X2NtcCByZXF1aXJlZF9vYmplY3RzLnR4dCBzcGFyc2Vfb2JqZWN0cy50eHQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzIzLXBhY2stcmVkdW5kYW50LnNoIGIvdC90NTMyMy1wYWNrLXJlZHVuZGFudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YjRkMWNhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTMyMy1wYWNrLXJlZHVuZGFudC5zaApAQCAtMCwwICsxLDQ2NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxOCBKaWFuZyBYaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgcGFjay1yZWR1bmRhbnQKKworSW4gb3JkZXIgdG8gdGVzdCBnaXQtcGFjay1yZWR1bmRhbnQsIHdlIHdpbGwgY3JlYXRlIGEgbnVtYmVyIG9mIG9iamVjdHMgYW5kCitwYWNrcyBpbiB0aGUgcmVwb3NpdG9yeSBgbWFzdGVyLmdpdGAuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBwYWNrcyAoUDEtUDgpCithbmQgb2JqZWN0cyAoVCwgQS1SKSBpcyBzaG93ZWQgaW4gdGhlIGZvbGxvd2luZyBjaGFydC4gT2JqZWN0cyBvZiBhIHBhY2sgd2lsbAorYmUgbWFya2VkIHdpdGggbGV0dGVyIHgsIHdoaWxlIG9iamVjdHMgb2YgcmVkdW5kYW50IHBhY2tzIHdpbGwgYmUgbWFya2VkIHdpdGgKK2V4Y2xhbWF0aW9uIHBvaW50LCBhbmQgcmVkdW5kYW50IHBhY2sgaXRzZWxmIHdpbGwgYmUgbWFya2VkIHdpdGggYXN0ZXJpc2suCisKKwl8IFQgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIKKyAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgUDEgIHwgeCB4IHggeCB4IHggeCAgICAgICAgICAgICAgICAgICAgICAgeAorICAgIFAyKiB8ICAgICAhICEgISAhICAgISAhICEKKyAgICBQMyAgfCAgICAgICAgICAgICB4ICAgICB4IHggeCB4IHgKKyAgICBQNCogfCAgICAgICAgICAgICAgICAgICAgICEgISAhICEgICAgICEKKyAgICBQNSAgfCAgICAgICAgICAgICAgIHggeCAgICAgICAgICAgeCB4CisgICAgUDYqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgISAgICEKKyAgICBQNyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggeAorICAgIFA4KiB8ICAgIQorICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBBTEwgfCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4CisKK0Fub3RoZXIgcmVwb3NpdG9yeSBgc2hhcmVkLmdpdGAgaGFzIHVuaXF1ZSBvYmplY3RzIChYLVopLCB3aGlsZSBvdGhlciBvYmplY3RzCisobWFya2VkIHdpdGggbGV0dGVyIHMpIGFyZSBzaGFyZWQgdGhyb3VnaCBhbHQtb2RiIChvZiBgbWFzdGVyLmdpdGApLiBUaGUKK3JlbGF0aW9uc2hpcCBiZXR3ZWVuIHBhY2tzIGFuZCBvYmplY3RzIGlzIGFzIGZvbGxvd3M6CisKKwl8IFQgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgICBYIFkgWgorICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFB4MSB8ICAgcyBzIHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4IHggeAorICAgIFB4MiB8ICAgICAgICAgcyBzIHMgICAgICAgICAgICAgICAgICAgICAgICAgICB4IHggeAorJworCisuIC4vdGVzdC1saWIuc2gKKworbWFzdGVyX3JlcG89bWFzdGVyLmdpdAorc2hhcmVkX3JlcG89c2hhcmVkLmdpdAorCisjIENyZWF0ZSBjb21taXRzIGluIDxyZXBvPiBhbmQgYXNzaWduIGVhY2ggY29tbWl0J3Mgb2lkIHRvIHNoZWxsIHZhcmlhYmxlcworIyBnaXZlbiBpbiB0aGUgYXJndW1lbnRzIChBLCBCLCBhbmQgQykuIEUuZy46CisjCisjICAgICBjcmVhdGVfY29tbWl0c19pbiA8cmVwbz4gQSBCIEMKKyMKKyMgTk9URTogQXZvaWQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGZyb20gYSBzdWJzaGVsbCBzaW5jZSB2YXJpYWJsZQorIyBhc3NpZ25tZW50cyB3aWxsIGRpc2FwcGVhciB3aGVuIHN1YnNoZWxsIGV4aXRzLgorY3JlYXRlX2NvbW1pdHNfaW4gKCkgeworCXJlcG89IiQxIiAmJgorCWlmICEgcGFyZW50PSQoZ2l0IC1DICIkcmVwbyIgcmV2LXBhcnNlIEhFQURee30gMj4vZGV2L251bGwpCisJdGhlbgorCQlwYXJlbnQ9CisJZmkgJiYKKwlUPSQoZ2l0IC1DICIkcmVwbyIgd3JpdGUtdHJlZSkgJiYKKwlzaGlmdCAmJgorCXdoaWxlIHRlc3QgJCMgLWd0IDAKKwlkbworCQluYW1lPSQxICYmCisJCXRlc3RfdGljayAmJgorCQlpZiB0ZXN0IC16ICIkcGFyZW50IgorCQl0aGVuCisJCQlvaWQ9JChlY2hvICRuYW1lIHwgZ2l0IC1DICIkcmVwbyIgY29tbWl0LXRyZWUgJFQpCisJCWVsc2UKKwkJCW9pZD0kKGVjaG8gJG5hbWUgfCBnaXQgLUMgIiRyZXBvIiBjb21taXQtdHJlZSAtcCAkcGFyZW50ICRUKQorCQlmaSAmJgorCQlldmFsICRuYW1lPSRvaWQgJiYKKwkJcGFyZW50PSRvaWQgJiYKKwkJc2hpZnQgfHwKKwkJcmV0dXJuIDEKKwlkb25lICYmCisJZ2l0IC1DICIkcmVwbyIgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkb2lkCit9CisKKyMgQ3JlYXRlIHBhY2sgaW4gPHJlcG8+IGFuZCBhc3NpZ24gcGFjayBpZCB0byB2YXJpYWJsZSBnaXZlbiBpbiB0aGUgMm5kIGFyZ3VtZW50CisjICg8bmFtZT4pLiBDb21taXRzIGluIHRoZSBwYWNrIHdpbGwgYmUgcmVhZCBmcm9tIHN0ZGluLiBFLmcuOgorIworIyAgICAgY3JlYXRlX3BhY2tfaW4gPHJlcG8+IDxuYW1lPiA8PC1FT0YKKyMgICAgICAgICAuLi4KKyMgICAgICAgICBFT0YKKyMKKyMgTk9URTogY29tbWl0cyBmcm9tIHN0ZGluIHNob3VsZCBiZSBnaXZlbiB1c2luZyBoZXJlZG9jLCBub3QgdXNpbmcgcGlwZSwgYW5kCisjIGF2b2lkIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIGEgc3Vic2hlbGwgc2luY2UgdmFyaWFibGUgYXNzaWdubWVudHMgd2lsbAorIyBkaXNhcHBlYXIgd2hlbiBzdWJzaGVsbCBleGl0cy4KK2NyZWF0ZV9wYWNrX2luICgpIHsKKwlyZXBvPSIkMSIgJiYKKwluYW1lPSIkMiIgJiYKKwlwYWNrPSQoZ2l0IC1DICIkcmVwby9vYmplY3RzL3BhY2siIHBhY2stb2JqZWN0cyAtcSBwYWNrKSAmJgorCWV2YWwgJG5hbWU9JHBhY2sgJiYKKwlldmFsIFAkcGFjaz0kbmFtZTokcGFjaworfQorCitmb3JtYXRfcGFja2ZpbGVzICgpIHsKKwlzZWQgXAorCQktZSAicyMuKi9wYWNrLVwoLipcKVwuaWR4I1wxIyIgXAorCQktZSAicyMuKi9wYWNrLVwoLipcKVwucGFjayNcMSMiIHwKKwlzb3J0IC11IHwKKwl3aGlsZSByZWFkIHAKKwlkbworCQlpZiB0ZXN0IC16ICIkKGV2YWwgZWNobyBcJHtQJHB9KSIKKwkJdGhlbgorCQkJZWNobyAkcAorCQllbHNlCisJCQlldmFsIGVjaG8gIlwke1AkcH0iCisJCWZpCisJZG9uZSB8CisJc29ydAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtYXN0ZXIgcmVwbycgJworCWdpdCBpbml0IC0tYmFyZSAiJG1hc3Rlcl9yZXBvIiAmJgorCWNyZWF0ZV9jb21taXRzX2luICIkbWFzdGVyX3JlcG8iIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENoYXJ0IG9mIHBhY2tzIGFuZCBvYmplY3RzIGZvciB0aGlzIHRlc3QgY2FzZQorIworIyAgICAgICAgIHwgVCBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUgorIyAgICAgLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgUDEgIHwgeCB4IHggeCB4IHggeCAgICAgICAgICAgICAgICAgICAgICAgeAorIyAgICAgUDIgIHwgICAgIHggeCB4IHggICB4IHggeAorIyAgICAgUDMgIHwgICAgICAgICAgICAgeCAgICAgeCB4IHggeCB4CisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICBBTEwgfCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggICAgICAgICB4CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFzdGVyOiBubyByZWR1bmRhbnQgZm9yIHBhY2sgMSwgMiwgMycgJworCWNyZWF0ZV9wYWNrX2luICIkbWFzdGVyX3JlcG8iIFAxIDw8LUVPRiAmJgorCQkkVAorCQkkQQorCQkkQgorCQkkQworCQkkRAorCQkkRQorCQkkRgorCQkkUgorCQlFT0YKKwljcmVhdGVfcGFja19pbiAiJG1hc3Rlcl9yZXBvIiBQMiA8PC1FT0YgJiYKKwkJJEIKKwkJJEMKKwkJJEQKKwkJJEUKKwkJJEcKKwkJJEgKKwkJJEkKKwkJRU9GCisJY3JlYXRlX3BhY2tfaW4gIiRtYXN0ZXJfcmVwbyIgUDMgPDwtRU9GICYmCisJCSRGCisJCSRJCisJCSRKCisJCSRLCisJCSRMCisJCSRNCisJCUVPRgorCSgKKwkJY2QgIiRtYXN0ZXJfcmVwbyIgJiYKKwkJZ2l0IHBhY2stcmVkdW5kYW50IC0tYWxsID5vdXQgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IG91dAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hhcnQgb2YgcGFja3MgYW5kIG9iamVjdHMgZm9yIHRoaXMgdGVzdCBjYXNlCisjCisjICAgICAgICAgfCBUIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSCisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICBQMSAgfCB4IHggeCB4IHggeCB4ICAgICAgICAgICAgICAgICAgICAgICB4CisjICAgICBQMiAgfCAgICAgeCB4IHggeCAgIHggeCB4CisjICAgICBQMyogfCAgICAgICAgICAgICAhICAgICAhICEgISAhICEKKyMgICAgIFA0ICB8ICAgICAgICAgICAgICAgICAgICAgeCB4IHggeCAgICAgeAorIyAgICAgUDUgIHwgICAgICAgICAgICAgICB4IHggICAgICAgICAgIHggeAorIyAgICAgLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgQUxMIHwgeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4ICAgeAorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hc3Rlcjogb25lIG9mIHBhY2stMi9wYWNrLTMgaXMgcmVkdW5kYW50JyAnCisJY3JlYXRlX3BhY2tfaW4gIiRtYXN0ZXJfcmVwbyIgUDQgPDwtRU9GICYmCisJCSRKCisJCSRLCisJCSRMCisJCSRNCisJCSRQCisJCUVPRgorCWNyZWF0ZV9wYWNrX2luICIkbWFzdGVyX3JlcG8iIFA1IDw8LUVPRiAmJgorCQkkRworCQkkSAorCQkkTgorCQkkTworCQlFT0YKKwkoCisJCWNkICIkbWFzdGVyX3JlcG8iICYmCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkJUDM6JFAzCisJCQlFT0YKKwkJZ2l0IHBhY2stcmVkdW5kYW50IC0tYWxsID5vdXQgJiYKKwkJZm9ybWF0X3BhY2tmaWxlcyA8b3V0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hhcnQgb2YgcGFja3MgYW5kIG9iamVjdHMgZm9yIHRoaXMgdGVzdCBjYXNlCisjCisjICAgICAgICAgfCBUIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSCisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICBQMSAgfCB4IHggeCB4IHggeCB4ICAgICAgICAgICAgICAgICAgICAgICB4CisjICAgICBQMiogfCAgICAgISAhICEgISAgICEgISAhCisjICAgICBQMyAgfCAgICAgICAgICAgICB4ICAgICB4IHggeCB4IHgKKyMgICAgIFA0KiB8ICAgICAgICAgICAgICAgICAgICAgISAhICEgISAgICAgIQorIyAgICAgUDUgIHwgICAgICAgICAgICAgICB4IHggICAgICAgICAgIHggeAorIyAgICAgUDYqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgISAgICEKKyMgICAgIFA3ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCB4CisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICBBTEwgfCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFzdGVyOiBwYWNrIDIsIDQsIGFuZCA2IGFyZSByZWR1bmRhbnQnICcKKwljcmVhdGVfcGFja19pbiAiJG1hc3Rlcl9yZXBvIiBQNiA8PC1FT0YgJiYKKwkJJE4KKwkJJE8KKwkJJFEKKwkJRU9GCisJY3JlYXRlX3BhY2tfaW4gIiRtYXN0ZXJfcmVwbyIgUDcgPDwtRU9GICYmCisJCSRQCisJCSRRCisJCUVPRgorCSgKKwkJY2QgIiRtYXN0ZXJfcmVwbyIgJiYKKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCQlQMjokUDIKKwkJCVA0OiRQNAorCQkJUDY6JFA2CisJCQlFT0YKKwkJZ2l0IHBhY2stcmVkdW5kYW50IC0tYWxsID5vdXQgJiYKKwkJZm9ybWF0X3BhY2tmaWxlcyA8b3V0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hhcnQgb2YgcGFja3MgYW5kIG9iamVjdHMgZm9yIHRoaXMgdGVzdCBjYXNlCisjCisjICAgICAgICAgfCBUIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSCisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICBQMSAgfCB4IHggeCB4IHggeCB4ICAgICAgICAgICAgICAgICAgICAgICB4CisjICAgICBQMiogfCAgICAgISAhICEgISAgICEgISAhCisjICAgICBQMyAgfCAgICAgICAgICAgICB4ICAgICB4IHggeCB4IHgKKyMgICAgIFA0KiB8ICAgICAgICAgICAgICAgICAgICAgISAhICEgISAgICAgIQorIyAgICAgUDUgIHwgICAgICAgICAgICAgICB4IHggICAgICAgICAgIHggeAorIyAgICAgUDYqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgISAgICEKKyMgICAgIFA3ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCB4CisjICAgICBQOCogfCAgICEKKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgIEFMTCB8IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHgKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXN0ZXI6IHBhY2stOCAoc3Vic2V0IG9mIHBhY2stMSkgaXMgYWxzbyByZWR1bmRhbnQnICcKKwljcmVhdGVfcGFja19pbiAiJG1hc3Rlcl9yZXBvIiBQOCA8PC1FT0YgJiYKKwkJJEEKKwkJRU9GCisJKAorCQljZCAiJG1hc3Rlcl9yZXBvIiAmJgorCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJCVAyOiRQMgorCQkJUDQ6JFA0CisJCQlQNjokUDYKKwkJCVA4OiRQOAorCQkJRU9GCisJCWdpdCBwYWNrLXJlZHVuZGFudCAtLWFsbCA+b3V0ICYmCisJCWZvcm1hdF9wYWNrZmlsZXMgPG91dCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hc3RlcjogY2xlYW4gbG9vc2Ugb2JqZWN0cycgJworCSgKKwkJY2QgIiRtYXN0ZXJfcmVwbyIgJiYKKwkJZ2l0IHBydW5lLXBhY2tlZCAmJgorCQlmaW5kIG9iamVjdHMgLXR5cGUgZiB8IHNlZCAtZSAiL29iamVjdHNcL3BhY2tcLy9kIiA+b3V0ICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hc3RlcjogcmVtb3ZlIHJlZHVuZGFudCBwYWNrcyBhbmQgcGFzcyBmc2NrJyAnCisJKAorCQljZCAiJG1hc3Rlcl9yZXBvIiAmJgorCQlnaXQgcGFjay1yZWR1bmRhbnQgLS1hbGwgfCB4YXJncyBybSAmJgorCQlnaXQgZnNjayAmJgorCQlnaXQgcGFjay1yZWR1bmRhbnQgLS1hbGwgPm91dCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgb3V0CisJKQorJworCisjIFRoZSBmb2xsb3dpbmcgdGVzdCBjYXNlcyB3aWxsIGV4ZWN1dGUgaW5zaWRlIGBzaGFyZWQuZ2l0YCwgaW5zdGVhZCBvZgorIyBpbnNpZGUgYG1hc3Rlci5naXRgLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2hhcmVkLmdpdCcgJworCWdpdCBjbG9uZSAtLW1pcnJvciAiJG1hc3Rlcl9yZXBvIiAiJHNoYXJlZF9yZXBvIiAmJgorCSgKKwkJY2QgIiRzaGFyZWRfcmVwbyIgJiYKKwkJcHJpbnRmICIuLi8uLi8kbWFzdGVyX3JlcG8vb2JqZWN0c1xuIiA+b2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYXJlZDogYWxsIHBhY2tzIGFyZSByZWR1bmRhbnQsIGJ1dCBubyBvdXRwdXQgd2l0aG91dCAtLWFsdC1vZGInICcKKwkoCisJCWNkICIkc2hhcmVkX3JlcG8iICYmCisJCWdpdCBwYWNrLXJlZHVuZGFudCAtLWFsbCA+b3V0ICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQKKwkpCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENoYXJ0IG9mIHBhY2tzIGFuZCBvYmplY3RzIGZvciB0aGlzIHRlc3QgY2FzZQorIworIyAgICAgPT09PT09PT09PT09PT09PSBtYXN0ZXIuZ2l0ID09PT09PT09PT09PT09PQorIyAgICAgICAgIHwgVCBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiAgPC0tLS0tLS0tLS0rCisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgIHwKKyMgICAgIFAxICB8IHggeCB4IHggeCB4IHggICAgICAgICAgICAgICAgICAgICAgIHggICAgICAgICAgICAgfAorIyAgICAgUDMgIHwgICAgICAgICAgICAgeCAgICAgeCB4IHggeCB4ICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICBQNSAgfCAgICAgICAgICAgICAgIHggeCAgICAgICAgICAgeCB4ICAgICAgICAgICAgICAgICAgIHwKKyMgICAgIFA3ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCB4ICAgICAgICAgICAgICAgfAorIyAgICAgLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICB8CisjICAgICBBTEwgfCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4ICAgICAgICAgICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICA9PT09PT09PT09PT09PT09IHNoYXJlZC5naXQgPT09PT09PT09PT09PT09ICAgICAgICAgICAgIHwKKyMgICAgICAgICB8IFQgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgIDxvYmplY3RzL2luZm8vYWx0ZXJuYXRlcz4KKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgIFAxKiB8IHMgcyBzIHMgcyBzIHMgICAgICAgICAgICAgICAgICAgICAgIHMKKyMgICAgIFAzKiB8ICAgICAgICAgICAgIHMgICAgIHMgcyBzIHMgcworIyAgICAgUDUqIHwgICAgICAgICAgICAgICBzIHMgICAgICAgICAgIHMgcworIyAgICAgUDcqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzIHMKKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgIEFMTCB8IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHgKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFyZWQ6IHNob3cgcmVkdW5kYW50IHBhY2tzIGluIHN0ZGVyciBmb3IgdmVyYm9zZSBtb2RlJyAnCisJKAorCQljZCAiJHNoYXJlZF9yZXBvIiAmJgorCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJCVAxOiRQMQorCQkJUDM6JFAzCisJCQlQNTokUDUKKwkJCVA3OiRQNworCQkJRU9GCisJCWdpdCBwYWNrLXJlZHVuZGFudCAtLWFsbCAtLXZlcmJvc2UgPm91dCAyPm91dC5lcnIgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgorCQlncmVwICJwYWNrJCIgb3V0LmVyciB8IGZvcm1hdF9wYWNrZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFyZWQ6IHJlbW92ZSByZWR1bmRhbnQgcGFja3MsIG5vIHBhY2tzIGxlZnQnICcKKwkoCisJCWNkICIkc2hhcmVkX3JlcG8iICYmCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkJZmF0YWw6IFplcm8gcGFja3MgZm91bmQhCisJCQlFT0YKKwkJZ2l0IHBhY2stcmVkdW5kYW50IC0tYWxsIC0tYWx0LW9kYiB8IHhhcmdzIHJtICYmCisJCWdpdCBmc2NrICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwYWNrLXJlZHVuZGFudCAtLWFsbCAtLWFsdC1vZGIgPmFjdHVhbCAyPiYxICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYXJlZDogY3JlYXRlIG5ldyBvYmplY3RzIGFuZCBwYWNrcycgJworCWNyZWF0ZV9jb21taXRzX2luICIkc2hhcmVkX3JlcG8iIFggWSBaICYmCisJY3JlYXRlX3BhY2tfaW4gIiRzaGFyZWRfcmVwbyIgUHgxIDw8LUVPRiAmJgorCQkkWAorCQkkWQorCQkkWgorCQkkQQorCQkkQgorCQkkQworCQlFT0YKKwljcmVhdGVfcGFja19pbiAiJHNoYXJlZF9yZXBvIiBQeDIgPDwtRU9GCisJCSRYCisJCSRZCisJCSRaCisJCSRECisJCSRFCisJCSRGCisJCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFyZWQ6IG5vIHJlZHVuZGFudCB3aXRob3V0IC0tYWx0LW9kYicgJworCSgKKwkJY2QgIiRzaGFyZWRfcmVwbyIgJiYKKwkJZ2l0IHBhY2stcmVkdW5kYW50IC0tYWxsID5vdXQgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IG91dAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hhcnQgb2YgcGFja3MgYW5kIG9iamVjdHMgZm9yIHRoaXMgdGVzdCBjYXNlCisjCisjICAgICA9PT09PT09PT09PT09PT09IG1hc3Rlci5naXQgPT09PT09PT09PT09PT09CisjICAgICAgICAgfCBUIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSICA8LS0tLS0tLS0tLS0tLS0tLSsKKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgfAorIyAgICAgUDEgIHwgeCB4IHggeCB4IHggeCAgICAgICAgICAgICAgICAgICAgICAgeCAgICAgICAgICAgICAgICAgICB8CisjICAgICBQMyAgfCAgICAgICAgICAgICB4ICAgICB4IHggeCB4IHggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICAgIFA1ICB8ICAgICAgICAgICAgICAgeCB4ICAgICAgICAgICB4IHggICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgICAgUDcgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4IHggICAgICAgICAgICAgICAgICAgICB8CisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgIHwKKyMgICAgIEFMTCB8IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggICAgICAgICAgICAgICAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICAgID09PT09PT09PT09PT09PT0gc2hhcmVkLmdpdCA9PT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgfAorIyAgICAgICAgIHwgVCBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiAgIFggWSBaIDxvYmplY3RzL2luZm8vYWx0ZXJuYXRlcz4KKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgUHgxIHwgICBzIHMgcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggeCB4CisjICAgICBQeDIqfCAgICAgICAgIHMgcyBzICAgICAgICAgICAgICAgICAgICAgICAgICAgISAhICEKKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgQUxMIHwgcyBzIHMgcyBzIHMgcyBzIHMgcyBzIHMgcyBzIHMgcyBzIHMgcyAgIHggeCB4CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhcmVkOiBvbmUgcGFjayBpcyByZWR1bmRhbnQgd2l0aCAtLWFsdC1vZGInICcKKwkoCisJCWNkICIkc2hhcmVkX3JlcG8iICYmCisJCWdpdCBwYWNrLXJlZHVuZGFudCAtLWFsbCAtLWFsdC1vZGIgPm91dCAmJgorCQlmb3JtYXRfcGFja2ZpbGVzIDxvdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hhcnQgb2YgcGFja3MgYW5kIG9iamVjdHMgZm9yIHRoaXMgdGVzdCBjYXNlCisjCisjICAgICA9PT09PT09PT09PT09PT09IG1hc3Rlci5naXQgPT09PT09PT09PT09PT09CisjICAgICAgICAgfCBUIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSICA8LS0tLS0tLS0tLS0tLS0tLSsKKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgfAorIyAgICAgUDEgIHwgeCB4IHggeCB4IHggeCAgICAgICAgICAgICAgICAgICAgICAgeCAgICAgICAgICAgICAgICAgICB8CisjICAgICBQMyAgfCAgICAgICAgICAgICB4ICAgICB4IHggeCB4IHggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICAgIFA1ICB8ICAgICAgICAgICAgICAgeCB4ICAgICAgICAgICB4IHggICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgICAgUDcgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4IHggICAgICAgICAgICAgICAgICAgICB8CisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgIHwKKyMgICAgIEFMTCB8IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggICAgICAgICAgICAgICAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICAgID09PT09PT09PT09PT09PT0gc2hhcmVkLmdpdCA9PT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgfAorIyAgICAgICAgIHwgVCBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiAgIFggWSBaIDxvYmplY3RzL2luZm8vYWx0ZXJuYXRlcz4KKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgUHgxKnwgICBzIHMgcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgaSBpCisjICAgICBQeDIqfCAgICAgICAgIHMgcyBzICAgICAgICAgICAgICAgICAgICAgICAgICAgaSBpIGkKKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgQUxMIHwgcyBzIHMgcyBzIHMgcyBzIHMgcyBzIHMgcyBzIHMgcyBzIHMgcyAgIGkgaSBpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWdub3JlZCBvYmplY3RzLCBtYXJrZWQgd2l0aCBpKQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYXJlZDogaWdub3JlIHVuaXF1ZSBvYmplY3RzIGFuZCBhbGwgdHdvIHBhY2tzIGFyZSByZWR1bmRhbnQnICcKKwkoCisJCWNkICIkc2hhcmVkX3JlcG8iICYmCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkJUHgxOiRQeDEKKwkJCVB4MjokUHgyCisJCQlFT0YKKwkJZ2l0IHBhY2stcmVkdW5kYW50IC0tYWxsIC0tYWx0LW9kYiA+b3V0IDw8LUVPRiAmJgorCQkJJFgKKwkJCSRZCisJCQkkWgorCQkJRU9GCisJCWZvcm1hdF9wYWNrZmlsZXMgPG91dCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMyNC1zcGxpdC1jb21taXQtZ3JhcGguc2ggYi90L3Q1MzI0LXNwbGl0LWNvbW1pdC1ncmFwaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNjlkMDk2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTMyNC1zcGxpdC1jb21taXQtZ3JhcGguc2gKQEAgLTAsMCArMSw0MjggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzcGxpdCBjb21taXQgZ3JhcGgnCisuIC4vdGVzdC1saWIuc2gKKworR0lUX1RFU1RfQ09NTUlUX0dSQVBIPTAKK0dJVF9URVNUX0NPTU1JVF9HUkFQSF9DSEFOR0VEX1BBVEhTPTAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwbycgJworCWdpdCBpbml0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLmNvbW1pdEdyYXBoIHRydWUgJiYKKwlnaXQgY29uZmlnIGdjLndyaXRlQ29tbWl0R3JhcGggZmFsc2UgJiYKKwlpbmZvZGlyPSIuZ2l0L29iamVjdHMvaW5mbyIgJiYKKwlncmFwaGRpcj0iJGluZm9kaXIvY29tbWl0LWdyYXBocyIgJiYKKwl0ZXN0X29pZF9pbml0ICYmCisJdGVzdF9vaWRfY2FjaGUgPDwtRU9NCisJc2hhbGxvdyBzaGExOjE3NjAKKwlzaGFsbG93IHNoYTI1NjoyMDY0CisKKwliYXNlIHNoYTE6MTM3NgorCWJhc2Ugc2hhMjU2OjE0OTYKKwlFT00KKycKKworZ3JhcGhfcmVhZF9leHBlY3QoKSB7CisJTlVNX0JBU0U9MAorCWlmIHRlc3QgISAteiAkMgorCXRoZW4KKwkJTlVNX0JBU0U9JDIKKwlmaQorCWNhdCA+ZXhwZWN0IDw8LSBFT0YKKwloZWFkZXI6IDQzNDc1MDQ4IDEgMSAzICROVU1fQkFTRQorCW51bV9jb21taXRzOiAkMQorCWNodW5rczogb2lkX2Zhbm91dCBvaWRfbG9va3VwIGNvbW1pdF9tZXRhZGF0YQorCUVPRgorCXRlc3QtdG9vbCByZWFkLWdyYXBoID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICd0d2VhayB1bWFzayBmb3IgbW9kZWJpdCB0ZXN0cycgJworCXVtYXNrIDAyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgY29tbWl0cyBhbmQgd3JpdGUgY29tbWl0LWdyYXBoJyAnCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAzKQorCWRvCisJCXRlc3RfY29tbWl0ICRpICYmCisJCWdpdCBicmFuY2ggY29tbWl0cy8kaSB8fCByZXR1cm4gMQorCWRvbmUgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJGluZm9kaXIvY29tbWl0LWdyYXBoICYmCisJZ3JhcGhfcmVhZF9leHBlY3QgMworJworCitncmFwaF9naXRfdHdvX21vZGVzKCkgeworCWdpdCAtYyBjb3JlLmNvbW1pdEdyYXBoPXRydWUgJDEgPm91dHB1dAorCWdpdCAtYyBjb3JlLmNvbW1pdEdyYXBoPWZhbHNlICQxID5leHBlY3QKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0Cit9CisKK2dyYXBoX2dpdF9iZWhhdmlvcigpIHsKKwlNU0c9JDEKKwlCUkFOQ0g9JDIKKwlDT01QQVJFPSQzCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2sgbm9ybWFsIGdpdCBvcGVyYXRpb25zOiAkTVNHIiAnCisJCWdyYXBoX2dpdF90d29fbW9kZXMgImxvZyAtLW9uZWxpbmUgJEJSQU5DSCIgJiYKKwkJZ3JhcGhfZ2l0X3R3b19tb2RlcyAibG9nIC0tdG9wby1vcmRlciAkQlJBTkNIIiAmJgorCQlncmFwaF9naXRfdHdvX21vZGVzICJsb2cgLS1ncmFwaCAkQ09NUEFSRS4uJEJSQU5DSCIgJiYKKwkJZ3JhcGhfZ2l0X3R3b19tb2RlcyAiYnJhbmNoIC12diIgJiYKKwkJZ3JhcGhfZ2l0X3R3b19tb2RlcyAibWVyZ2UtYmFzZSAtYSAkQlJBTkNIICRDT01QQVJFIgorCScKK30KKworZ3JhcGhfZ2l0X2JlaGF2aW9yICdncmFwaCBleGlzdHMnIGNvbW1pdHMvMyBjb21taXRzLzEKKwordmVyaWZ5X2NoYWluX2ZpbGVzX2V4aXN0KCkgeworCWZvciBoYXNoIGluICQoY2F0ICQxL2NvbW1pdC1ncmFwaC1jaGFpbikKKwlkbworCQl0ZXN0X3BhdGhfaXNfZmlsZSAkMS9ncmFwaC0kaGFzaC5ncmFwaCB8fCByZXR1cm4gMQorCWRvbmUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG1vcmUgY29tbWl0cywgYW5kIHdyaXRlIGEgbmV3IGJhc2UgZ3JhcGgnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdHMvMSAmJgorCWZvciBpIGluICQodGVzdF9zZXEgNCA1KQorCWRvCisJCXRlc3RfY29tbWl0ICRpICYmCisJCWdpdCBicmFuY2ggY29tbWl0cy8kaSB8fCByZXR1cm4gMQorCWRvbmUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdHMvMiAmJgorCWZvciBpIGluICQodGVzdF9zZXEgNiAxMCkKKwlkbworCQl0ZXN0X2NvbW1pdCAkaSAmJgorCQlnaXQgYnJhbmNoIGNvbW1pdHMvJGkgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXRzLzIgJiYKKwlnaXQgbWVyZ2UgY29tbWl0cy80ICYmCisJZ2l0IGJyYW5jaCBtZXJnZS8xICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXRzLzQgJiYKKwlnaXQgbWVyZ2UgY29tbWl0cy82ICYmCisJZ2l0IGJyYW5jaCBtZXJnZS8yICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAmJgorCWdyYXBoX3JlYWRfZXhwZWN0IDEyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmsgYW5kIGZhaWwgdG8gYmFzZSBhIGNoYWluIG9uIGEgY29tbWl0LWdyYXBoIGZpbGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIGZvcmsgJiYKKwlnaXQgY2xvbmUgLiBmb3JrICYmCisJKAorCQljZCBmb3JrICYmCisJCXJtIC5naXQvb2JqZWN0cy9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCQllY2hvICIkKHB3ZCkvLi4vLmdpdC9vYmplY3RzIiA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCQl0ZXN0X2NvbW1pdCBuZXctY29tbWl0ICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiAmJgorCQl2ZXJpZnlfY2hhaW5fZmlsZXNfZXhpc3QgJGdyYXBoZGlyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgdGhyZWUgbW9yZSBjb21taXRzLCB3cml0ZSBhIHRpcCBncmFwaCcgJworCWdpdCByZXNldCAtLWhhcmQgY29tbWl0cy8zICYmCisJZ2l0IG1lcmdlIG1lcmdlLzEgJiYKKwlnaXQgbWVyZ2UgY29tbWl0cy81ICYmCisJZ2l0IG1lcmdlIG1lcmdlLzIgJiYKKwlnaXQgYnJhbmNoIG1lcmdlLzMgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlIC0tc3BsaXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkaW5mb2Rpci9jb21taXQtZ3JhcGggJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJbHMgJGdyYXBoZGlyL2dyYXBoLSouZ3JhcGggPmdyYXBoLWZpbGVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBncmFwaC1maWxlcyAmJgorCXZlcmlmeV9jaGFpbl9maWxlc19leGlzdCAkZ3JhcGhkaXIKKycKKworZ3JhcGhfZ2l0X2JlaGF2aW9yICdzcGxpdCBjb21taXQtZ3JhcGg6IG1lcmdlIDMgdnMgMicgbWVyZ2UvMyBtZXJnZS8yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBvbmUgY29tbWl0LCB3cml0ZSBhIHRpcCBncmFwaCcgJworCXRlc3RfY29tbWl0IDExICYmCisJZ2l0IGJyYW5jaCBjb21taXRzLzExICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgJGluZm9kaXIvY29tbWl0LWdyYXBoICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiAmJgorCWxzICRncmFwaGRpci9ncmFwaC0qLmdyYXBoID5ncmFwaC1maWxlcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgZ3JhcGgtZmlsZXMgJiYKKwl2ZXJpZnlfY2hhaW5fZmlsZXNfZXhpc3QgJGdyYXBoZGlyCisnCisKK2dyYXBoX2dpdF9iZWhhdmlvciAndGhyZWUtbGF5ZXIgY29tbWl0LWdyYXBoOiBjb21taXQgMTEgdnMgNicgY29tbWl0cy8xMSBjb21taXRzLzYKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG9uZSBjb21taXQsIHdyaXRlIGEgbWVyZ2VkIGdyYXBoJyAnCisJdGVzdF9jb21taXQgMTIgJiYKKwlnaXQgYnJhbmNoIGNvbW1pdHMvMTIgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlIC0tc3BsaXQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJbHMgJGdyYXBoZGlyL2dyYXBoLSouZ3JhcGggPmdyYXBoLWZpbGVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBncmFwaC1maWxlcyAmJgorCXZlcmlmeV9jaGFpbl9maWxlc19leGlzdCAkZ3JhcGhkaXIKKycKKworZ3JhcGhfZ2l0X2JlaGF2aW9yICdtZXJnZWQgY29tbWl0LWdyYXBoOiBjb21taXQgMTIgdnMgNicgY29tbWl0cy8xMiBjb21taXRzLzYKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGZvcmsgYW5kIGNoYWluIGFjcm9zcyBhbHRlcm5hdGUnICcKKwlnaXQgY2xvbmUgLiBmb3JrICYmCisJKAorCQljZCBmb3JrICYmCisJCWdpdCBjb25maWcgY29yZS5jb21taXRHcmFwaCB0cnVlICYmCisJCXJtIC1yZiAkZ3JhcGhkaXIgJiYKKwkJZWNobyAiJChwd2QpLy4uLy5naXQvb2JqZWN0cyIgPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwkJdGVzdF9jb21taXQgMTMgJiYKKwkJZ2l0IGJyYW5jaCBjb21taXRzLzEzICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiAmJgorCQlscyAkZ3JhcGhkaXIvZ3JhcGgtKi5ncmFwaCA+Z3JhcGgtZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBncmFwaC1maWxlcyAmJgorCQlnaXQgLWMgY29yZS5jb21taXRHcmFwaD10cnVlICByZXYtbGlzdCBIRUFEID5leHBlY3QgJiYKKwkJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9ZmFsc2UgcmV2LWxpc3QgSEVBRCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJdGVzdF9jb21taXQgMTQgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0IC0tb2JqZWN0LWRpcj0uZ2l0L29iamVjdHMvICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiAmJgorCQlscyAkZ3JhcGhkaXIvZ3JhcGgtKi5ncmFwaCA+Z3JhcGgtZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBncmFwaC1maWxlcworCSkKKycKKworZ3JhcGhfZ2l0X2JlaGF2aW9yICdhbHRlcm5hdGU6IGNvbW1pdCAxMyB2cyA2JyBjb21taXRzLzEzIGNvbW1pdHMvNgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG1lcmdlIHN0cmFnZXR5IGNvbnN0YW50cycgJworCWdpdCBjbG9uZSAuIG1lcmdlLTIgJiYKKwkoCisJCWNkIG1lcmdlLTIgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmNvbW1pdEdyYXBoIHRydWUgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCXRlc3RfY29tbWl0IDE0ICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAtLXNpemUtbXVsdGlwbGU9MiAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4KKworCSkgJiYKKwlnaXQgY2xvbmUgLiBtZXJnZS0xMCAmJgorCSgKKwkJY2QgbWVyZ2UtMTAgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmNvbW1pdEdyYXBoIHRydWUgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCXRlc3RfY29tbWl0IDE0ICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAtLXNpemUtbXVsdGlwbGU9MTAgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCWxzICRncmFwaGRpci9ncmFwaC0qLmdyYXBoID5ncmFwaC1maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGdyYXBoLWZpbGVzCisJKSAmJgorCWdpdCBjbG9uZSAuIG1lcmdlLTEwLWV4cGlyZSAmJgorCSgKKwkJY2QgbWVyZ2UtMTAtZXhwaXJlICYmCisJCWdpdCBjb25maWcgY29yZS5jb21taXRHcmFwaCB0cnVlICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiAmJgorCQl0ZXN0X2NvbW1pdCAxNSAmJgorCQl0b3VjaCAkZ3JhcGhkaXIvdG8tZGVsZXRlLmdyYXBoICRncmFwaGRpci90by1rZWVwLmdyYXBoICYmCisJCXRlc3QtdG9vbCBjaG10aW1lID0xNTQ2MzYyMDAwICRncmFwaGRpci90by1kZWxldGUuZ3JhcGggJiYKKwkJdGVzdC10b29sIGNobXRpbWUgPTE1NDYzNjIwMDEgJGdyYXBoZGlyL3RvLWtlZXAuZ3JhcGggJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0IC0tc2l6ZS1tdWx0aXBsZT0xMCBcCisJCQktLWV4cGlyZS10aW1lPSIyMDE5LTAxLTAxIDEyOjAwIC0wNTowMCIgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICRncmFwaGRpci90by1kZWxldGUuZ3JhcGggJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgJGdyYXBoZGlyL3RvLWtlZXAuZ3JhcGggJiYKKwkJbHMgJGdyYXBoZGlyL2dyYXBoLSouZ3JhcGggPmdyYXBoLWZpbGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgZ3JhcGgtZmlsZXMKKwkpICYmCisJZ2l0IGNsb25lIC0tbm8taGFyZGxpbmtzIC4gbWF4LWNvbW1pdHMgJiYKKwkoCisJCWNkIG1heC1jb21taXRzICYmCisJCWdpdCBjb25maWcgY29yZS5jb21taXRHcmFwaCB0cnVlICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiAmJgorCQl0ZXN0X2NvbW1pdCAxNiAmJgorCQl0ZXN0X2NvbW1pdCAxNyAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlIC0tc3BsaXQgLS1tYXgtY29tbWl0cz0xICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiAmJgorCQlscyAkZ3JhcGhkaXIvZ3JhcGgtKi5ncmFwaCA+Z3JhcGgtZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBncmFwaC1maWxlcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIGNvbW1pdC1ncmFwaC1jaGFpbiBmaWxlIGFmdGVyIGZsYXR0ZW5pbmcnICcKKwlnaXQgY2xvbmUgLiBmbGF0dGVuICYmCisJKAorCQljZCBmbGF0dGVuICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwkJbHMgJGdyYXBoZGlyID5ncmFwaC1maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIGdyYXBoLWZpbGVzCisJKQorJworCitjb3JydXB0X2ZpbGUoKSB7CisJZmlsZT0kMQorCXBvcz0kMgorCWRhdGE9IiR7MzotXDB9IgorCWNobW9kIGErdyAiJGZpbGUiICYmCisJcHJpbnRmICIkZGF0YSIgfCBkZCBvZj0iJGZpbGUiIGJzPTEgc2Vlaz0iJHBvcyIgY29udj1ub3RydW5jCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBoYXNoZXMgYWxvbmcgY2hhaW4sIGV2ZW4gaW4gc2hhbGxvdycgJworCWdpdCBjbG9uZSAtLW5vLWhhcmRsaW5rcyAuIHZlcmlmeSAmJgorCSgKKwkJY2QgdmVyaWZ5ICYmCisJCWdpdCBjb21taXQtZ3JhcGggdmVyaWZ5ICYmCisJCWJhc2VfZmlsZT0kZ3JhcGhkaXIvZ3JhcGgtJChoZWFkIC1uIDEgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbikuZ3JhcGggJiYKKwkJY29ycnVwdF9maWxlICIkYmFzZV9maWxlIiAkKHRlc3Rfb2lkIHNoYWxsb3cpICJcMDEiICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IC0tc2hhbGxvdyAyPnRlc3RfZXJyICYmCisJCWdyZXAgLXYgIl4rIiB0ZXN0X2VyciA+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgImluY29ycmVjdCBjaGVja3N1bSIgZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgLS1zaGFsbG93IGRvZXMgbm90IGNoZWNrIGJhc2UgY29udGVudHMnICcKKwlnaXQgY2xvbmUgLS1uby1oYXJkbGlua3MgLiB2ZXJpZnktc2hhbGxvdyAmJgorCSgKKwkJY2QgdmVyaWZ5LXNoYWxsb3cgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgJiYKKwkJYmFzZV9maWxlPSRncmFwaGRpci9ncmFwaC0kKGhlYWQgLW4gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluKS5ncmFwaCAmJgorCQljb3JydXB0X2ZpbGUgIiRiYXNlX2ZpbGUiIDEwMDAgIlwwMSIgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgLS1zaGFsbG93ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IDI+dGVzdF9lcnIgJiYKKwkJZ3JlcCAtdiAiXisiIHRlc3RfZXJyID5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiaW5jb3JyZWN0IGNoZWNrc3VtIiBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dhcm4gb24gYmFzZSBncmFwaCBjaHVuayBpbmNvcnJlY3QnICcKKwlnaXQgY2xvbmUgLS1uby1oYXJkbGlua3MgLiBiYXNlLWNodW5rICYmCisJKAorCQljZCBiYXNlLWNodW5rICYmCisJCWdpdCBjb21taXQtZ3JhcGggdmVyaWZ5ICYmCisJCWJhc2VfZmlsZT0kZ3JhcGhkaXIvZ3JhcGgtJCh0YWlsIC1uIDEgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbikuZ3JhcGggJiYKKwkJY29ycnVwdF9maWxlICIkYmFzZV9maWxlIiAkKHRlc3Rfb2lkIGJhc2UpICJcMDEiICYmCisJCWdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IC0tc2hhbGxvdyAyPnRlc3RfZXJyICYmCisJCWdyZXAgLXYgIl4rIiB0ZXN0X2VyciA+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgImNvbW1pdC1ncmFwaCBjaGFpbiBkb2VzIG5vdCBtYXRjaCIgZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgYWZ0ZXIgY29tbWl0LWdyYXBoLWNoYWluIGNvcnJ1cHRpb24nICcKKwlnaXQgY2xvbmUgLS1uby1oYXJkbGlua3MgLiB2ZXJpZnktY2hhaW4gJiYKKwkoCisJCWNkIHZlcmlmeS1jaGFpbiAmJgorCQljb3JydXB0X2ZpbGUgIiRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4iIDYwICJHIiAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSAyPnRlc3RfZXJyICYmCisJCWdyZXAgLXYgIl4rIiB0ZXN0X2VyciA+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgImludmFsaWQgY29tbWl0LWdyYXBoIGNoYWluIiBlcnIgJiYKKwkJY29ycnVwdF9maWxlICIkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluIiA2MCAiQSIgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgMj50ZXN0X2VyciAmJgorCQlncmVwIC12ICJeKyIgdGVzdF9lcnIgPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJ1bmFibGUgdG8gZmluZCBhbGwgY29tbWl0LWdyYXBoIGZpbGVzIiBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBhY3Jvc3MgYWx0ZXJuYXRlcycgJworCWdpdCBjbG9uZSAtLW5vLWhhcmRsaW5rcyAuIHZlcmlmeS1hbHQgJiYKKwkoCisJCWNkIHZlcmlmeS1hbHQgJiYKKwkJcm0gLXJmICRncmFwaGRpciAmJgorCQlhbHRkaXI9IiQocHdkKS8uLi8uZ2l0L29iamVjdHMiICYmCisJCWVjaG8gIiRhbHRkaXIiID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJCWdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IC0tb2JqZWN0LWRpcj0iJGFsdGRpci8iICYmCisJCXRlc3RfY29tbWl0IGV4dHJhICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAmJgorCQl0aXBfZmlsZT0kZ3JhcGhkaXIvZ3JhcGgtJCh0YWlsIC1uIDEgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbikuZ3JhcGggJiYKKwkJY29ycnVwdF9maWxlICIkdGlwX2ZpbGUiIDEwMCAiXDAxIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSAtLXNoYWxsb3cgMj50ZXN0X2VyciAmJgorCQlncmVwIC12ICJeKyIgdGVzdF9lcnIgPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBmYW5vdXQgdmFsdWUiIGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG9jdG9wdXMgbWVyZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdHMvMTAgJiYKKwlnaXQgbWVyZ2UgY29tbWl0cy8zIGNvbW1pdHMvNCAmJgorCWdpdCBicmFuY2ggbWVyZ2Uvb2N0b3B1cyAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAmJgorCWdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IC0tcHJvZ3Jlc3MgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGVyciAmJgorCXRlc3RfaTE4bmdyZXAgISB3YXJuaW5nIGVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbgorJworCitncmFwaF9naXRfYmVoYXZpb3IgJ2dyYXBoIGV4aXN0cycgbWVyZ2Uvb2N0b3B1cyBjb21taXRzLzEyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwbGl0IGFjcm9zcyBhbHRlcm5hdGUgd2hlcmUgYWx0ZXJuYXRlIGlzIG5vdCBzcGxpdCcgJworCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGggJiYKKwljcCAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGggLiAmJgorCWdpdCBjbG9uZSAtLW5vLWhhcmRsaW5rcyAuIGFsdC1zcGxpdCAmJgorCSgKKwkJY2QgYWx0LXNwbGl0ICYmCisJCXJtIC1mIC5naXQvb2JqZWN0cy9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCQllY2hvICIkKHB3ZCkiLy4uLy5naXQvb2JqZWN0cyA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCQl0ZXN0X2NvbW1pdCAxOCAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlIC0tc3BsaXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluCisJKSAmJgorCXRlc3RfY21wIGNvbW1pdC1ncmFwaCAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zcGxpdD1uby1tZXJnZSBhbHdheXMgd3JpdGVzIGFuIGluY3JlbWVudGFsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yZiBhIGIgJiYKKwlybSAtcmYgJGdyYXBoZGlyICRpbmZvZGlyL2NvbW1pdC1ncmFwaCAmJgorCWdpdCByZXNldCAtLWhhcmQgY29tbWl0cy8yICYmCisJZ2l0IHJldi1saXN0IEhFQUR+MSA+YSAmJgorCWdpdCByZXYtbGlzdCBIRUFEID5iICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXNwbGl0IC0tc3RkaW4tY29tbWl0cyA8YSAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1zcGxpdD1uby1tZXJnZSAtLXN0ZGluLWNvbW1pdHMgPGIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zcGxpdD1yZXBsYWNlIHJlcGxhY2VzIHRoZSBjaGFpbicgJworCXJtIC1yZiAkZ3JhcGhkaXIgJGluZm9kaXIvY29tbWl0LWdyYXBoICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXRzLzMgJiYKKwlnaXQgcmV2LWxpc3QgLTEgSEVBRH4yID5hICYmCisJZ2l0IHJldi1saXN0IC0xIEhFQUR+MSA+YiAmJgorCWdpdCByZXYtbGlzdCAtMSBIRUFEID5jICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXNwbGl0PW5vLW1lcmdlIC0tc3RkaW4tY29tbWl0cyA8YSAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1zcGxpdD1uby1tZXJnZSAtLXN0ZGluLWNvbW1pdHMgPGIgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tc3BsaXQ9bm8tbWVyZ2UgLS1zdGRpbi1jb21taXRzIDxjICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXN0ZGluLWNvbW1pdHMgLS1zcGxpdD1yZXBsYWNlIDxiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgJGluZm9kaXIvY29tbWl0LWdyYXBoICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiAmJgorCWxzICRncmFwaGRpci9ncmFwaC0qLmdyYXBoID5ncmFwaC1maWxlcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgZ3JhcGgtZmlsZXMgJiYKKwl2ZXJpZnlfY2hhaW5fZmlsZXNfZXhpc3QgJGdyYXBoZGlyICYmCisJZ3JhcGhfcmVhZF9leHBlY3QgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFVMSU1JVF9GSUxFX0RFU0NSSVBUT1JTICdoYW5kbGVzIGZpbGUgZGVzY3JpcHRvciBleGhhdXN0aW9uJyAnCisJZ2l0IGluaXQgdWxpbWl0ICYmCisJKAorCQljZCB1bGltaXQgJiYKKwkJZm9yIGkgaW4gJCh0ZXN0X3NlcSA2NCkKKwkJZG8KKwkJCXRlc3RfY29tbWl0ICRpICYmCisJCQl0ZXN0X21pZ2h0X2ZhaWwgcnVuX3dpdGhfbGltaXRlZF9vcGVuX2ZpbGVzIGdpdCBjb21taXQtZ3JhcGggd3JpdGUgXAorCQkJCS0tc3BsaXQ9bm8tbWVyZ2UgLS1yZWFjaGFibGUgfHwgcmV0dXJuIDEKKwkJZG9uZQorCSkKKycKKword2hpbGUgcmVhZCBtb2RlIG1vZGViaXRzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICJzcGxpdCBjb21taXQtZ3JhcGggcmVzcGVjdHMgY29yZS5zaGFyZWRyZXBvc2l0b3J5ICRtb2RlIiAnCisJCXJtIC1yZiAkZ3JhcGhkaXIgJGluZm9kaXIvY29tbWl0LWdyYXBoICYmCisJCWdpdCByZXNldCAtLWhhcmQgY29tbWl0cy8xICYmCisJCXRlc3RfY29uZmlnIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSAiJG1vZGUiICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1zcGxpdCAtLXJlYWNoYWJsZSAmJgorCQlscyAkZ3JhcGhkaXIvZ3JhcGgtKi5ncmFwaCA+Z3JhcGgtZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBncmFwaC1maWxlcyAmJgorCQllY2hvICIkbW9kZWJpdHMiID5leHBlY3QgJiYKKwkJdGVzdF9tb2RlYml0cyAkZ3JhcGhkaXIvZ3JhcGgtKi5ncmFwaCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJdGVzdF9tb2RlYml0cyAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKK2RvbmUgPDxcRU9GCiswNjY2IC1yLS1yLS1yLS0KKzA2MDAgLXItLS0tLS0tLQorRU9GCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwMC1zZW5kLXBhY2suc2ggYi90L3Q1NDAwLXNlbmQtcGFjay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iODQ2MThjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTQwMC1zZW5kLXBhY2suc2gKQEAgLTAsMCArMSwyOTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nU2VlIHdoeSByZXdpbmRpbmcgaGVhZCBicmVha3Mgc2VuZC1wYWNrCisKKycKKy4gLi90ZXN0LWxpYi5zaAorCitjbnQ9NjQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfdGljayAmJgorCW1rZGlyIG1vemFydCBtb3phcnQvaXMgJiYKKwllY2hvICJDb21taXQgIzAiID5tb3phcnQvaXMvcGluayAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbW96YXJ0L2lzL3BpbmsgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0PSQoZWNobyAiQ29tbWl0ICMwIiB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSkgJiYKKwl6ZXJvPSRjb21taXQgJiYKKwlwYXJlbnQ9JHplcm8gJiYKKwlpPTAgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sZSAkY250CisJZG8KKwkgICAgaT0kKCgkaSsxKSkgJiYKKwkgICAgdGVzdF90aWNrICYmCisJICAgIGVjaG8gIkNvbW1pdCAjJGkiID5tb3phcnQvaXMvcGluayAmJgorCSAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG1vemFydC9pcy9waW5rICYmCisJICAgIHRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkgICAgY29tbWl0PSQoZWNobyAiQ29tbWl0ICMkaSIgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUgLXAgJHBhcmVudCkgJiYKKwkgICAgZ2l0IHVwZGF0ZS1yZWYgcmVmcy90YWdzL2NvbW1pdCRpICRjb21taXQgJiYKKwkgICAgcGFyZW50PSRjb21taXQgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAiJGNvbW1pdCIgJiYKKwlnaXQgY2xvbmUgLi8uIHZpY3RpbSAmJgorCSggY2QgdmljdGltICYmIGdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuICYmIGdpdCBsb2cgKSAmJgorCWdpdCB1cGRhdGUtcmVmIEhFQUQgIiR6ZXJvIiAmJgorCXBhcmVudD0kemVybyAmJgorCWk9MCAmJgorCXdoaWxlIHRlc3QgJGkgLWxlICRjbnQKKwlkbworCSAgICBpPSQoKCRpKzEpKSAmJgorCSAgICB0ZXN0X3RpY2sgJiYKKwkgICAgZWNobyAiUmViYXNlICMkaSIgPm1vemFydC9pcy9waW5rICYmCisJICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbW96YXJ0L2lzL3BpbmsgJiYKKwkgICAgdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCSAgICBjb21taXQ9JChlY2hvICJSZWJhc2UgIyRpIiB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSAtcCAkcGFyZW50KSAmJgorCSAgICBnaXQgdXBkYXRlLXJlZiByZWZzL3RhZ3MvcmViYXNlJGkgJGNvbW1pdCAmJgorCSAgICBwYXJlbnQ9JGNvbW1pdCB8fCByZXR1cm4gMQorCWRvbmUgJiYKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICIkY29tbWl0IiAmJgorCWVjaG8gUmViYXNlICYmCisJZ2l0IGxvZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayB0aGUgc291cmNlIHJlcG9zaXRvcnknICcKKwlnaXQgcmVwYWNrIC1hIC1kICYmCisJZ2l0IHBydW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgdGhlIGRlc3RpbmF0aW9uIHJlcG9zaXRvcnknICcKKyAgICAoCisJY2QgdmljdGltICYmCisJZ2l0IHJlcGFjayAtYSAtZCAmJgorCWdpdCBwcnVuZQorICAgICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNlIHB1c2hpbmcgcmV3b3VuZCBoZWFkIHdpdGhvdXQgLS1mb3JjZScgJworCXB1c2hlZF9oZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdmljdGltX29yaWc9JChjZCB2aWN0aW0gJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtcGFjayAuL3ZpY3RpbSBtYXN0ZXIgJiYKKwl2aWN0aW1faGVhZD0kKGNkIHZpY3RpbSAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkdmljdGltX2hlYWQiID0gIiR2aWN0aW1fb3JpZyIgJiYKKwkjIHRoaXMgc2hvdWxkIHVwZGF0ZQorCWdpdCBzZW5kLXBhY2sgLS1mb3JjZSAuL3ZpY3RpbSBtYXN0ZXIgJiYKKwl2aWN0aW1faGVhZD0kKGNkIHZpY3RpbSAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkdmljdGltX2hlYWQiID0gIiRwdXNoZWRfaGVhZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBjYW4gYmUgdXNlZCB0byBkZWxldGUgYSByZWYnICcKKwkoIGNkIHZpY3RpbSAmJiBnaXQgYnJhbmNoIGV4dHJhIG1hc3RlciApICYmCisJZ2l0IHNlbmQtcGFjayAuL3ZpY3RpbSA6ZXh0cmEgbWFzdGVyICYmCisJKCBjZCB2aWN0aW0gJiYKKwkgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZXh0cmEgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2UgZGVsZXRpbmcgcHVzaCB3aXRoIGRlbnlEZWxldGVzJyAnCisJKAorCSAgICBjZCB2aWN0aW0gJiYKKwkgICAgdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgZXh0cmEgJiYKKwkgICAgZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlEZWxldGVzIHRydWUgJiYKKwkgICAgZ2l0IGJyYW5jaCBleHRyYSBtYXN0ZXIKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtcGFjayAuL3ZpY3RpbSA6ZXh0cmEgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nhbm5vdCBvdmVycmlkZSBkZW55RGVsZXRlcyB3aXRoIGdpdCAtYyBzZW5kLXBhY2snICcKKwkoCisJCWNkIHZpY3RpbSAmJgorCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBleHRyYSAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueURlbGV0ZXMgdHJ1ZSAmJgorCQlnaXQgYnJhbmNoIGV4dHJhIG1hc3RlcgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgcmVjZWl2ZS5kZW55RGVsZXRlcz1mYWxzZSBcCisJCQkJCXNlbmQtcGFjayAuL3ZpY3RpbSA6ZXh0cmEgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJyaWRlIGRlbnlEZWxldGVzIHdpdGggZ2l0IC1jIHJlY2VpdmUtcGFjaycgJworCSgKKwkJY2QgdmljdGltICYmCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGV4dHJhICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55RGVsZXRlcyB0cnVlICYmCisJCWdpdCBicmFuY2ggZXh0cmEgbWFzdGVyCisJKSAmJgorCWdpdCBzZW5kLXBhY2sgXAorCQktLXJlY2VpdmUtcGFjaz0iZ2l0IC1jIHJlY2VpdmUuZGVueURlbGV0ZXM9ZmFsc2UgcmVjZWl2ZS1wYWNrIiBcCisJCS4vdmljdGltIDpleHRyYSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVueU5vbkZhc3Rmb3J3YXJkcyB0cnVtcHMgLS1mb3JjZScgJworCSgKKwkgICAgY2QgdmljdGltICYmCisJICAgIHRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGV4dHJhICYmCisJICAgIGdpdCBjb25maWcgcmVjZWl2ZS5kZW55Tm9uRmFzdGZvcndhcmRzIHRydWUKKwkpICYmCisJdmljdGltX29yaWc9JChjZCB2aWN0aW0gJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtcGFjayAtLWZvcmNlIC4vdmljdGltIG1hc3Rlcl46bWFzdGVyICYmCisJdmljdGltX2hlYWQ9JChjZCB2aWN0aW0gJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdCAiJHZpY3RpbV9vcmlnIiA9ICIkdmljdGltX2hlYWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbmQtcGFjayAtLWFsbCBzZW5kcyBhbGwgYnJhbmNoZXMnICcKKwkjIG1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IDIgYnJhbmNoZXMgd2l0aCBkaWZmZXJlbnQKKwkjIHZhbHVlcywganVzdCB0byBiZSB0aG9yb3VnaAorCWdpdCBicmFuY2ggb3RoZXItYnJhbmNoIEhFQUReICYmCisKKwlnaXQgaW5pdCAtLWJhcmUgYWxsLmdpdCAmJgorCWdpdCBzZW5kLXBhY2sgLS1hbGwgYWxsLmdpdCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcyA+ZXhwZWN0ICYmCisJZ2l0IC1DIGFsbC5naXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLWFsbCBleGNsdWRlcyByZW1vdGUtdHJhY2tpbmcgaGllcmFyY2h5JyAnCisJbWtkaXIgcGFyZW50ICYmCisJKAorCSAgICBjZCBwYXJlbnQgJiYKKwkgICAgZ2l0IGluaXQgJiYgOiA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBhZGQKKwkpICYmCisJZ2l0IGNsb25lIHBhcmVudCBjaGlsZCAmJgorCSgKKwkgICAgY2QgY2hpbGQgJiYgZ2l0IHB1c2ggLS1hbGwKKwkpICYmCisJKAorCSAgICBjZCBwYXJlbnQgJiYKKwkgICAgdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4pIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjZWl2ZS1wYWNrIHJ1bnMgYXV0by1nYyBpbiByZW1vdGUgcmVwbycgJworCXJtIC1yZiBwYXJlbnQgY2hpbGQgJiYKKwlnaXQgaW5pdCBwYXJlbnQgJiYKKwkoCisJICAgICMgU2V0dXAgYSByZXBvIHdpdGggMiBwYWNrcworCSAgICBjZCBwYXJlbnQgJiYKKwkgICAgZWNobyAiU29tZSB0ZXh0IiA+ZmlsZS50eHQgJiYKKwkgICAgZ2l0IGFkZCAuICYmCisJICAgIGdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0IiAmJgorCSAgICBnaXQgcmVwYWNrIC1hZGwgJiYKKwkgICAgZWNobyAiU29tZSBtb3JlIHRleHQiID4+ZmlsZS50eHQgJiYKKwkgICAgZ2l0IGNvbW1pdCAtYSAtbSAiU2Vjb25kIGNvbW1pdCIgJiYKKwkgICAgZ2l0IHJlcGFjaworCSkgJiYKKwljcCAtUiBwYXJlbnQgY2hpbGQgJiYKKwkoCisJICAgICMgU2V0IHRoZSBjaGlsZCB0byBhdXRvLXBhY2sgaWYgbW9yZSB0aGFuIG9uZSBwYWNrIGV4aXN0cworCSAgICBjZCBjaGlsZCAmJgorCSAgICBnaXQgY29uZmlnIGdjLmF1dG9wYWNrbGltaXQgMSAmJgorCSAgICBnaXQgY29uZmlnIGdjLmF1dG9kZXRhY2ggZmFsc2UgJiYKKwkgICAgZ2l0IGJyYW5jaCB0ZXN0X2F1dG9fZ2MgJiYKKwkgICAgIyBBbmQgY3JlYXRlIGEgZmlsZSB0aGF0IGZvbGxvd3MgdGhlIHRlbXBvcmFyeSBvYmplY3QgbmFtaW5nCisJICAgICMgY29udmVudGlvbiBmb3IgdGhlIGF1dG8tZ2MgdG8gcmVtb3ZlCisJICAgIDogPi5naXQvb2JqZWN0cy90bXBfdGVzdF9vYmplY3QgJiYKKwkgICAgdGVzdC10b29sIGNobXRpbWUgPS0xMjA5NjAxIC5naXQvb2JqZWN0cy90bXBfdGVzdF9vYmplY3QKKwkpICYmCisJKAorCSAgICBjZCBwYXJlbnQgJiYKKwkgICAgZWNobyAiRXZlbiBtb3JlIHRleHQiID4+ZmlsZS50eHQgJiYKKwkgICAgZ2l0IGNvbW1pdCAtYSAtbSAiVGhpcmQgY29tbWl0IiAmJgorCSAgICBnaXQgc2VuZC1wYWNrIC4uL2NoaWxkIEhFQUQ6cmVmcy9oZWFkcy90ZXN0X2F1dG9fZ2MKKwkpICYmCisJdGVzdCAhIC1lIGNoaWxkLy5naXQvb2JqZWN0cy90bXBfdGVzdF9vYmplY3QKKycKKworcmV3b3VuZF9wdXNoX3NldHVwKCkgeworCXJtIC1yZiBwYXJlbnQgY2hpbGQgJiYKKwlta2RpciBwYXJlbnQgJiYKKwkoCisJICAgIGNkIHBhcmVudCAmJgorCSAgICBnaXQgaW5pdCAmJgorCSAgICBlY2hvIG9uZSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkgICAgZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4gJiYKKwkgICAgZWNobyB0d28gPmZpbGUgJiYgZ2l0IGNvbW1pdCAtYSAtbSB0d28KKwkpICYmCisJZ2l0IGNsb25lIHBhcmVudCBjaGlsZCAmJgorCSgKKwkgICAgY2QgY2hpbGQgJiYgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaGluZyBleHBsaWNpdCByZWZzcGVjcyByZXNwZWN0cyBmb3JjaW5nJyAnCisJcmV3b3VuZF9wdXNoX3NldHVwICYmCisJcGFyZW50X29yaWc9JChjZCBwYXJlbnQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJKAorCSAgICBjZCBjaGlsZCAmJgorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIC4uL3BhcmVudCBcCisJCXJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyCisJKSAmJgorCXBhcmVudF9oZWFkPSQoY2QgcGFyZW50ICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3QgIiRwYXJlbnRfb3JpZyIgPSAiJHBhcmVudF9oZWFkIiAmJgorCSgKKwkgICAgY2QgY2hpbGQgJiYKKwkgICAgZ2l0IHNlbmQtcGFjayAuLi9wYXJlbnQgXAorCSAgICAgICAgK3JlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyCisJKSAmJgorCXBhcmVudF9oZWFkPSQoY2QgcGFyZW50ICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCWNoaWxkX2hlYWQ9JChjZCBjaGlsZCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkcGFyZW50X2hlYWQiID0gIiRjaGlsZF9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIHdpbGRjYXJkIHJlZnNwZWNzIHJlc3BlY3RzIGZvcmNpbmcnICcKKwlyZXdvdW5kX3B1c2hfc2V0dXAgJiYKKwlwYXJlbnRfb3JpZz0kKGNkIHBhcmVudCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwkoCisJICAgIGNkIGNoaWxkICYmCisJICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLi4vcGFyZW50IFwKKwkgICAgICAgICJyZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy8qIgorCSkgJiYKKwlwYXJlbnRfaGVhZD0kKGNkIHBhcmVudCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkcGFyZW50X29yaWciID0gIiRwYXJlbnRfaGVhZCIgJiYKKwkoCisJICAgIGNkIGNoaWxkICYmCisJICAgIGdpdCBzZW5kLXBhY2sgLi4vcGFyZW50IFwKKwkgICAgICAgICIrcmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKiIKKwkpICYmCisJcGFyZW50X2hlYWQ9JChjZCBwYXJlbnQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJY2hpbGRfaGVhZD0kKGNkIGNoaWxkICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3QgIiRwYXJlbnRfaGVhZCIgPSAiJGNoaWxkX2hlYWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbnkgcHVzaGluZyB0byBkZWxldGUgY3VycmVudCBicmFuY2gnICcKKwlyZXdvdW5kX3B1c2hfc2V0dXAgJiYKKwkoCisJICAgIGNkIGNoaWxkICYmCisJICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLi4vcGFyZW50IDpyZWZzL2hlYWRzL21hc3RlciAyPmVycnMKKwkpCisnCisKK2V4dHJhY3RfcmVmX2FkdmVydGlzZW1lbnQgKCkgeworCXBlcmwgLWxuZSAnCisJCSMgXFwgaXMgdGhlcmUgdG8gc2tpcCBjYXBhYmlsaXRpZXMgYWZ0ZXIgXDAKKwkJL3B1c2g8IChbXlxcXSspLyBvciBuZXh0OworCQlleGl0IDAgaWYgJDEgZXEgIjAwMDAiOworCQlwcmludCAkMTsKKwknCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY2VpdmUtcGFjayBkZS1kdXBlcyAuaGF2ZSBsaW5lcycgJworCWdpdCBpbml0IHNoYXJlZCAmJgorCWdpdCAtQyBzaGFyZWQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYm90aCAmJgorCWdpdCBjbG9uZSAtcyBzaGFyZWQgZm9yayAmJgorCSgKKwkJY2Qgc2hhcmVkICYmCisJCWdpdCBjaGVja291dCAtYiBvbmx5LXNoYXJlZCAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gb25seS1zaGFyZWQgJiYKKwkJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9mb28gSEVBRAorCSkgJiYKKworCSMgTm90YWJsZSB0aGluZ3MgaW4gdGhpcyBleHBlY3RhdGlvbjoKKwkjICAtIGxvY2FsIHJlZnMgYXJlIG5vdCBkZS1kdXBlZAorCSMgIC0gLmhhdmUgZG9lcyBub3QgZHVwbGljYXRlIGxvY2FscworCSMgIC0gLmhhdmUgZG9lcyBub3QgZHVwbGljYXRlIGl0c2VsZgorCWxvY2FsPSQoZ2l0IC1DIGZvcmsgcmV2LXBhcnNlIEhFQUQpICYmCisJc2hhcmVkPSQoZ2l0IC1DIHNoYXJlZCByZXYtcGFyc2Ugb25seS1zaGFyZWQpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJGxvY2FsIHJlZnMvaGVhZHMvbWFzdGVyCisJJGxvY2FsIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorCSRsb2NhbCByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorCSRzaGFyZWQgLmhhdmUKKwlFT0YKKworCUdJVF9UUkFDRV9QQUNLRVQ9JChwd2QpL3RyYWNlIEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBcCisJICAgIGdpdCBwdXNoIFwKKwkJLS1yZWNlaXZlLXBhY2s9InVuc2V0IEdJVF9UUkFDRV9QQUNLRVQ7IGdpdC1yZWNlaXZlLXBhY2siIFwKKwkJZm9yayBIRUFEOmZvbyAmJgorCWV4dHJhY3RfcmVmX2FkdmVydGlzZW1lbnQgPHRyYWNlID5yZWZzICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlZnMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDAxLXVwZGF0ZS1ob29rcy5zaCBiL3QvdDU0MDEtdXBkYXRlLWhvb2tzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk1NmQ2OWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDAxLXVwZGF0ZS1ob29rcy5zaApAQCAtMCwwICsxLDE1MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBTaGF3biBPLiBQZWFyY2UKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGUgdXBkYXRlIGhvb2sgaW5mcmFzdHJ1Y3R1cmUuJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gVGhpcyBpcyBhIHRlc3QuID5hICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBhICYmCisJdHJlZTA9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwljb21taXQwPSQoZWNobyBzZXR1cCB8IGdpdCBjb21taXQtdHJlZSAkdHJlZTApICYmCisJZWNobyBXZSBob3BlIGl0IHdvcmtzLiA+YSAmJgorCWdpdCB1cGRhdGUtaW5kZXggYSAmJgorCXRyZWUxPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0MT0kKGVjaG8gbW9kaWZ5IHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlMSAtcCAkY29tbWl0MCkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkY29tbWl0MCAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvdG9mYWlsICRjb21taXQxICYmCisJZ2l0IGNsb25lIC0tYmFyZSAuLy4gdmljdGltLmdpdCAmJgorCUdJVF9ESVI9dmljdGltLmdpdCBnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3RvZmFpbCAkY29tbWl0MSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICRjb21taXQxICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy90b2ZhaWwgJGNvbW1pdDAKKycKKworY2F0ID52aWN0aW0uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlIDw8J0VPRicKKyMhL2Jpbi9zaAorcHJpbnRmICVzICIkQCIgPj4kR0lUX0RJUi9wcmUtcmVjZWl2ZS5hcmdzCitjYXQgLSA+JEdJVF9ESVIvcHJlLXJlY2VpdmUuc3RkaW4KK2VjaG8gU1RET1VUIHByZS1yZWNlaXZlCitlY2hvIFNUREVSUiBwcmUtcmVjZWl2ZSA+JjIKK0VPRgorY2htb2QgdSt4IHZpY3RpbS5naXQvaG9va3MvcHJlLXJlY2VpdmUKKworY2F0ID52aWN0aW0uZ2l0L2hvb2tzL3VwZGF0ZSA8PCdFT0YnCisjIS9iaW4vc2gKK2VjaG8gIiRAIiA+PiRHSVRfRElSL3VwZGF0ZS5hcmdzCityZWFkIHg7IHByaW50ZiAlcyAiJHgiID4kR0lUX0RJUi91cGRhdGUuc3RkaW4KK2VjaG8gU1RET1VUIHVwZGF0ZSAkMQorZWNobyBTVERFUlIgdXBkYXRlICQxID4mMgordGVzdCAiJDEiID0gcmVmcy9oZWFkcy9tYXN0ZXIgfHwgZXhpdAorRU9GCitjaG1vZCB1K3ggdmljdGltLmdpdC9ob29rcy91cGRhdGUKKworY2F0ID52aWN0aW0uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZSA8PCdFT0YnCisjIS9iaW4vc2gKK3ByaW50ZiAlcyAiJEAiID4+JEdJVF9ESVIvcG9zdC1yZWNlaXZlLmFyZ3MKK2NhdCAtID4kR0lUX0RJUi9wb3N0LXJlY2VpdmUuc3RkaW4KK2VjaG8gU1RET1VUIHBvc3QtcmVjZWl2ZQorZWNobyBTVERFUlIgcG9zdC1yZWNlaXZlID4mMgorRU9GCitjaG1vZCB1K3ggdmljdGltLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUKKworY2F0ID52aWN0aW0uZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlIDw8J0VPRicKKyMhL2Jpbi9zaAorZWNobyAiJEAiID4+JEdJVF9ESVIvcG9zdC11cGRhdGUuYXJncworcmVhZCB4OyBwcmludGYgJXMgIiR4IiA+JEdJVF9ESVIvcG9zdC11cGRhdGUuc3RkaW4KK2VjaG8gU1RET1VUIHBvc3QtdXBkYXRlCitlY2hvIFNUREVSUiBwb3N0LXVwZGF0ZSA+JjIKK0VPRgorY2htb2QgdSt4IHZpY3RpbS5naXQvaG9va3MvcG9zdC11cGRhdGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBwdXNoICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIC0tZm9yY2UgLi92aWN0aW0uZ2l0IFwKKwkJbWFzdGVyIHRvZmFpbCA+c2VuZC5vdXQgMj5zZW5kLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGVkIGFzIGV4cGVjdGVkJyAnCisJdGVzdCAkKEdJVF9ESVI9dmljdGltLmdpdCBnaXQgcmV2LXBhcnNlIG1hc3RlcikgPSAkY29tbWl0MSAmJgorCXRlc3QgJChHSVRfRElSPXZpY3RpbS5naXQgZ2l0IHJldi1wYXJzZSB0b2ZhaWwpID0gJGNvbW1pdDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9va3MgcmFuJyAnCisJdGVzdCAtZiB2aWN0aW0uZ2l0L3ByZS1yZWNlaXZlLmFyZ3MgJiYKKwl0ZXN0IC1mIHZpY3RpbS5naXQvcHJlLXJlY2VpdmUuc3RkaW4gJiYKKwl0ZXN0IC1mIHZpY3RpbS5naXQvdXBkYXRlLmFyZ3MgJiYKKwl0ZXN0IC1mIHZpY3RpbS5naXQvdXBkYXRlLnN0ZGluICYmCisJdGVzdCAtZiB2aWN0aW0uZ2l0L3Bvc3QtcmVjZWl2ZS5hcmdzICYmCisJdGVzdCAtZiB2aWN0aW0uZ2l0L3Bvc3QtcmVjZWl2ZS5zdGRpbiAmJgorCXRlc3QgLWYgdmljdGltLmdpdC9wb3N0LXVwZGF0ZS5hcmdzICYmCisJdGVzdCAtZiB2aWN0aW0uZ2l0L3Bvc3QtdXBkYXRlLnN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWNlaXZlIGhvb2sgaW5wdXQnICcKKwkoZWNobyAkY29tbWl0MCAkY29tbWl0MSByZWZzL2hlYWRzL21hc3RlciAmJgorCSBlY2hvICRjb21taXQxICRjb21taXQwIHJlZnMvaGVhZHMvdG9mYWlsCisJKSB8IHRlc3RfY21wIC0gdmljdGltLmdpdC9wcmUtcmVjZWl2ZS5zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgaG9vayBhcmd1bWVudHMnICcKKwkoZWNobyByZWZzL2hlYWRzL21hc3RlciAkY29tbWl0MCAkY29tbWl0MSAmJgorCSBlY2hvIHJlZnMvaGVhZHMvdG9mYWlsICRjb21taXQxICRjb21taXQwCisJKSB8IHRlc3RfY21wIC0gdmljdGltLmdpdC91cGRhdGUuYXJncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LXJlY2VpdmUgaG9vayBpbnB1dCcgJworCWVjaG8gJGNvbW1pdDAgJGNvbW1pdDEgcmVmcy9oZWFkcy9tYXN0ZXIgfAorCXRlc3RfY21wIC0gdmljdGltLmdpdC9wb3N0LXJlY2VpdmUuc3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC11cGRhdGUgaG9vayBhcmd1bWVudHMnICcKKwllY2hvIHJlZnMvaGVhZHMvbWFzdGVyIHwKKwl0ZXN0X2NtcCAtIHZpY3RpbS5naXQvcG9zdC11cGRhdGUuYXJncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGwgaG9vayBzdGRpbiBpcyAvZGV2L251bGwnICcKKwl0ZXN0X211c3RfYmVfZW1wdHkgdmljdGltLmdpdC91cGRhdGUuc3RkaW4gJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgdmljdGltLmdpdC9wb3N0LXVwZGF0ZS5zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGwgKi1yZWNlaXZlIGhvb2sgYXJncyBhcmUgZW1wdHknICcKKwl0ZXN0X211c3RfYmVfZW1wdHkgdmljdGltLmdpdC9wcmUtcmVjZWl2ZS5hcmdzICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHZpY3RpbS5naXQvcG9zdC1yZWNlaXZlLmFyZ3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VuZC1wYWNrIHByb2R1Y2VkIG5vIG91dHB1dCcgJworCXRlc3RfbXVzdF9iZV9lbXB0eSBzZW5kLm91dAorJworCitjYXQgPDxFT0YgPmV4cGVjdAorcmVtb3RlOiBTVERPVVQgcHJlLXJlY2VpdmUKK3JlbW90ZTogU1RERVJSIHByZS1yZWNlaXZlCityZW1vdGU6IFNURE9VVCB1cGRhdGUgcmVmcy9oZWFkcy9tYXN0ZXIKK3JlbW90ZTogU1RERVJSIHVwZGF0ZSByZWZzL2hlYWRzL21hc3RlcgorcmVtb3RlOiBTVERPVVQgdXBkYXRlIHJlZnMvaGVhZHMvdG9mYWlsCityZW1vdGU6IFNUREVSUiB1cGRhdGUgcmVmcy9oZWFkcy90b2ZhaWwKK3JlbW90ZTogZXJyb3I6IGhvb2sgZGVjbGluZWQgdG8gdXBkYXRlIHJlZnMvaGVhZHMvdG9mYWlsCityZW1vdGU6IFNURE9VVCBwb3N0LXJlY2VpdmUKK3JlbW90ZTogU1RERVJSIHBvc3QtcmVjZWl2ZQorcmVtb3RlOiBTVERPVVQgcG9zdC11cGRhdGUKK3JlbW90ZTogU1RERVJSIHBvc3QtdXBkYXRlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbmQtcGFjayBzdGRlcnIgY29udGFpbnMgaG9vayBtZXNzYWdlcycgJworCWdyZXAgXnJlbW90ZTogc2VuZC5lcnIgfCBzZWQgInMvICpcJC8vIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmVjZWl2ZSBob29rIHRoYXQgZm9yZ2V0cyB0byByZWFkIGl0cyBpbnB1dCcgJworCXdyaXRlX3NjcmlwdCB2aWN0aW0uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlIDw8LVxFT0YgJiYKKwlleGl0IDAKKwlFT0YKKwlybSAtZiB2aWN0aW0uZ2l0L2hvb2tzL3VwZGF0ZSB2aWN0aW0uZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlICYmCisKKwlmb3IgdiBpbiAkKHRlc3Rfc2VxIDEwMCA5OTkpCisJZG8KKwkJZ2l0IGJyYW5jaCBicmFuY2hfJHYgbWFzdGVyIHx8IHJldHVybgorCWRvbmUgJiYKKwlnaXQgcHVzaCAuL3ZpY3RpbS5naXQgIityZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy8qIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU0MDItcG9zdC1tZXJnZS1ob29rLnNoIGIvdC90NTQwMi1wb3N0LW1lcmdlLWhvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmViMmZmZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU0MDItcG9zdC1tZXJnZS1ob29rLnNoCkBAIC0wLDAgKzEsNTYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9zaCBFbmdsYW5kCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIHBvc3QtbWVyZ2UgaG9vay4nCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBEYXRhIGZvciBjb21taXQwLiA+YSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSAmJgorCXRyZWUwPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0MD0kKGVjaG8gc2V0dXAgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUwKSAmJgorCWVjaG8gQ2hhbmdlZCBkYXRhIGZvciBjb21taXQxLiA+YSAmJgorCWdpdCB1cGRhdGUtaW5kZXggYSAmJgorCXRyZWUxPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0MT0kKGVjaG8gbW9kaWZ5IHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlMSAtcCAkY29tbWl0MCkgJiYKKyAgICAgICAgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJGNvbW1pdDAgJiYKKwlnaXQgY2xvbmUgLi8uIGNsb25lMSAmJgorCUdJVF9ESVI9Y2xvbmUxLy5naXQgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBhICYmCisJZ2l0IGNsb25lIC4vLiBjbG9uZTIgJiYKKwlHSVRfRElSPWNsb25lMi8uZ2l0IGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYQorJworCitmb3IgY2xvbmUgaW4gMSAyOyBkbworICAgIGNhdCA+Y2xvbmUke2Nsb25lfS8uZ2l0L2hvb2tzL3Bvc3QtbWVyZ2UgPDwnRU9GJworIyEvYmluL3NoCitlY2hvICRAID4+ICRHSVRfRElSL3Bvc3QtbWVyZ2UuYXJncworRU9GCisgICAgY2htb2QgdSt4IGNsb25lJHtjbG9uZX0vLmdpdC9ob29rcy9wb3N0LW1lcmdlCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtbWVyZ2UgZG9lcyBub3QgcnVuIGZvciB1cC10by1kYXRlICcgJworICAgICAgICBHSVRfRElSPWNsb25lMS8uZ2l0IGdpdCBtZXJnZSAkY29tbWl0MCAmJgorCSEgdGVzdCAtZiBjbG9uZTEvLmdpdC9wb3N0LW1lcmdlLmFyZ3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1tZXJnZSBydW5zIGFzIGV4cGVjdGVkICcgJworICAgICAgICBHSVRfRElSPWNsb25lMS8uZ2l0IGdpdCBtZXJnZSAkY29tbWl0MSAmJgorCXRlc3QgLWUgY2xvbmUxLy5naXQvcG9zdC1tZXJnZS5hcmdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtbWVyZ2UgZnJvbSBub3JtYWwgbWVyZ2UgcmVjZWl2ZXMgdGhlIHJpZ2h0IGFyZ3VtZW50ICcgJworICAgICAgICBncmVwIDAgY2xvbmUxLy5naXQvcG9zdC1tZXJnZS5hcmdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtbWVyZ2UgZnJvbSBzcXVhc2ggbWVyZ2UgcnVucyBhcyBleHBlY3RlZCAnICcKKyAgICAgICAgR0lUX0RJUj1jbG9uZTIvLmdpdCBnaXQgbWVyZ2UgLS1zcXVhc2ggJGNvbW1pdDEgJiYKKwl0ZXN0IC1lIGNsb25lMi8uZ2l0L3Bvc3QtbWVyZ2UuYXJncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LW1lcmdlIGZyb20gc3F1YXNoIG1lcmdlIHJlY2VpdmVzIHRoZSByaWdodCBhcmd1bWVudCAnICcKKyAgICAgICAgZ3JlcCAxIGNsb25lMi8uZ2l0L3Bvc3QtbWVyZ2UuYXJncworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU0MDMtcG9zdC1jaGVja291dC1ob29rLnNoIGIvdC90NTQwMy1wb3N0LWNoZWNrb3V0LWhvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTM5YjNiNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU0MDMtcG9zdC1jaGVja291dC1ob29rLnNoCkBAIC0wLDAgKzEsNzYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9zaCBFbmdsYW5kCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIHBvc3QtY2hlY2tvdXQgaG9vay4nCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3Bvc3QtY2hlY2tvdXQgPDwtXEVPRiAmJgorCWVjaG8gIiRAIiA+LmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MKKwlFT0YKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwl0ZXN0X2NvbW1pdCByZWJhc2Utb24tbWUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJdGVzdF9jb21taXQgdGhyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jaGVja291dCByZWNlaXZlcyB0aGUgcmlnaHQgYXJndW1lbnRzIHdpdGggSEVBRCB1bmNoYW5nZWQgJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncyIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJcmVhZCBvbGQgbmV3IGZsYWcgPC5naXQvcG9zdC1jaGVja291dC5hcmdzICYmCisJdGVzdCAkb2xkID0gJG5ldyAmJiB0ZXN0ICRmbGFnID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LWNoZWNrb3V0IGFyZ3MgYXJlIGNvcnJlY3Qgd2l0aCBnaXQgY2hlY2tvdXQgLWIgJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncyIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV3MSAmJgorCXJlYWQgb2xkIG5ldyBmbGFnIDwuZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncyAmJgorCXRlc3QgJG9sZCA9ICRuZXcgJiYgdGVzdCAkZmxhZyA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jaGVja291dCByZWNlaXZlcyB0aGUgcmlnaHQgYXJncyB3aXRoIEhFQUQgY2hhbmdlZCAnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcG9zdC1jaGVja291dC5hcmdzIiAmJgorCWdpdCBjaGVja291dCB0d28gJiYKKwlyZWFkIG9sZCBuZXcgZmxhZyA8LmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MgJiYKKwl0ZXN0ICRvbGQgIT0gJG5ldyAmJiB0ZXN0ICRmbGFnID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LWNoZWNrb3V0IHJlY2VpdmVzIHRoZSByaWdodCBhcmdzIHdoZW4gbm90IHN3aXRjaGluZyBicmFuY2hlcyAnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcG9zdC1jaGVja291dC5hcmdzIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgLS0gdGhyZWUudCAmJgorCXJlYWQgb2xkIG5ldyBmbGFnIDwuZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncyAmJgorCXRlc3QgJG9sZCA9ICRuZXcgJiYgdGVzdCAkZmxhZyA9IDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jaGVja291dCBpcyB0cmlnZ2VyZWQgb24gcmViYXNlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncyIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmViYXNlLXRlc3QgbWFzdGVyICYmCisJcm0gLWYgLmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MgJiYKKwlnaXQgcmViYXNlIHJlYmFzZS1vbi1tZSAmJgorCXJlYWQgb2xkIG5ldyBmbGFnIDwuZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncyAmJgorCXRlc3QgJG9sZCAhPSAkbmV3ICYmIHRlc3QgJGZsYWcgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtY2hlY2tvdXQgaXMgdHJpZ2dlcmVkIG9uIHJlYmFzZSB3aXRoIGZhc3QtZm9yd2FyZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MiICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZmLXJlYmFzZS10ZXN0IHJlYmFzZS1vbi1tZV4gJiYKKwlybSAtZiAuZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncyAmJgorCWdpdCByZWJhc2UgcmViYXNlLW9uLW1lICYmCisJcmVhZCBvbGQgbmV3IGZsYWcgPC5naXQvcG9zdC1jaGVja291dC5hcmdzICYmCisJdGVzdCAkb2xkICE9ICRuZXcgJiYgdGVzdCAkZmxhZyA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jaGVja291dCBob29rIGlzIHRyaWdnZXJlZCBieSBjbG9uZScgJworCW1rZGlyIC1wIHRlbXBsYXRlcy9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCB0ZW1wbGF0ZXMvaG9va3MvcG9zdC1jaGVja291dCA8PC1cRU9GICYmCisJZWNobyAiJEAiID4iJEdJVF9ESVIvcG9zdC1jaGVja291dC5hcmdzIgorCUVPRgorCWdpdCBjbG9uZSAtLXRlbXBsYXRlPXRlbXBsYXRlcyAuIGNsb25lMyAmJgorCXRlc3QgLWYgY2xvbmUzLy5naXQvcG9zdC1jaGVja291dC5hcmdzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwNC10cmFja2luZy1icmFuY2hlcy5zaCBiL3QvdDU0MDQtdHJhY2tpbmctYnJhbmNoZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjc2MmY0MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU0MDQtdHJhY2tpbmctYnJhbmNoZXMuc2gKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3RyYWNraW5nIGJyYW5jaCB1cGRhdGUgY2hlY2tzIGZvciBnaXQgcHVzaCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyAxID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAxICYmCisJZ2l0IGJyYW5jaCBiMSAmJgorCWdpdCBicmFuY2ggYjIgJiYKKwlnaXQgYnJhbmNoIGIzICYmCisJZ2l0IGNsb25lIC4gYWEgJiYKKwlnaXQgY2hlY2tvdXQgYjEgJiYKKwllY2hvIGIxID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gYjEgJiYKKwlnaXQgY2hlY2tvdXQgYjIgJiYKKwllY2hvIGIyID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gYjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBwdXNoYWJsZSBicmFuY2hlcycgJworCWNkIGFhICYmCisJYjE9JChnaXQgcmV2LXBhcnNlIG9yaWdpbi9iMSkgJiYKKwliMj0kKGdpdCByZXYtcGFyc2Ugb3JpZ2luL2IyKSAmJgorCWdpdCBjaGVja291dCAtYiBiMSBvcmlnaW4vYjEgJiYKKwllY2hvIGFhLWIxID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gYWEtYjEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYjIgb3JpZ2luL2IyICYmCisJZWNobyBhYS1iMiA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGFhLWIyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gYWEtbWFzdGVyID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gYWEtbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21peGVkLXN1Y2Nlc3MgcHVzaCByZXR1cm5zIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggb3JpZ2luIDoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdHJhY2tpbmcgYnJhbmNoZXMgdXBkYXRlZCBjb3JyZWN0bHkgYWZ0ZXIgcHVzaCcgJworCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBvcmlnaW4vbWFzdGVyKSIgPSAiJChnaXQgcmV2LXBhcnNlIG1hc3RlcikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRyYWNraW5nIGJyYW5jaGVzIG5vdCB1cGRhdGVkIGZvciBmYWlsZWQgcmVmcycgJworCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBvcmlnaW4vYjEpIiA9ICIkYjEiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIG9yaWdpbi9iMikiID0gIiRiMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlZCBicmFuY2hlcyBoYXZlIHRoZWlyIHRyYWNraW5nIGJyYW5jaGVzIHJlbW92ZWQnICcKKwlnaXQgcHVzaCBvcmlnaW4gOmIxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIG9yaWdpbi9iMSkiID0gIm9yaWdpbi9iMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxyZWFkeSBkZWxldGVkIHRyYWNraW5nIGJyYW5jaGVzIGlnbm9yZWQnICcKKwlnaXQgYnJhbmNoIC1kIC1yIG9yaWdpbi9iMyAmJgorCWdpdCBwdXNoIG9yaWdpbiA6YjMgPm91dHB1dCAyPiYxICYmCisJISBncmVwICJeZXJyb3I6ICIgb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwNS1zZW5kLXBhY2stcmV3aW5kLnNoIGIvdC90NTQwNS1zZW5kLXBhY2stcmV3aW5kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIzNWZiNzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDA1LXNlbmQtcGFjay1yZXdpbmQuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZvcmNlZCBwdXNoIHRvIHJlcGxhY2UgY29tbWl0IHdlIGRvIG5vdCBoYXZlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+ZmlsZTEgJiYgZ2l0IGFkZCBmaWxlMSAmJiB0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEluaXRpYWwgJiYKKwlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggd2FybiAmJgorCisJbWtkaXIgYW5vdGhlciAmJiAoCisJCWNkIGFub3RoZXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGZldGNoIC0tdXBkYXRlLWhlYWQtb2sgLi4gbWFzdGVyOm1hc3RlcgorCSkgJiYKKworCT5maWxlMiAmJiBnaXQgYWRkIGZpbGUyICYmIHRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gU2Vjb25kCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uIGZvcmNlZCBwdXNoIHNob3VsZCBkaWUgbm90IHNlZ2ZhdWx0JyAnCisKKwkoCisJCWNkIGFub3RoZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLi4gbWFzdGVyOm1hc3RlcgorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JjZWQgcHVzaCBzaG91bGQgc3VjY2VlZCcgJworCisJKAorCQljZCBhbm90aGVyICYmCisJCWdpdCBwdXNoIC4uICttYXN0ZXI6bWFzdGVyCisJKQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwNi1yZW1vdGUtcmVqZWN0cy5zaCBiL3QvdDU0MDYtcmVtb3RlLXJlamVjdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmYwNmY5OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU0MDYtcmVtb3RlLXJlamVjdHMuc2gKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlbW90ZSBwdXNoIHJlamVjdHMgYXJlIHJlcG9ydGVkIGJ5IGNsaWVudCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3VwZGF0ZSA8PC1cRU9GICYmCisJZXhpdCAxCisJRU9GCisJZWNobyAxID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAxICYmCisJZ2l0IGNsb25lIC4gY2hpbGQgJiYKKwljZCBjaGlsZCAmJgorCWVjaG8gMiA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHJlcG9ydHMgZXJyb3InICd0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAyPnN0ZGVycicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kaXZpZHVhbCByZWYgcmVwb3J0cyBlcnJvcicgJ2dyZXAgcmVqZWN0ZWQgc3RkZXJyJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU0MDctcG9zdC1yZXdyaXRlLWhvb2suc2ggYi90L3Q1NDA3LXBvc3QtcmV3cml0ZS1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgwNzUwYTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDA3LXBvc3QtcmV3cml0ZS1ob29rLnNoCkBAIC0wLDAgKzEsMjY2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIFRob21hcyBSYXN0CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIHBvc3QtcmV3cml0ZSBob29rLicKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IEEgZm9vIEEgJiYKKwl0ZXN0X2NvbW1pdCBCIGZvbyBCICYmCisJdGVzdF9jb21taXQgQyBmb28gQyAmJgorCXRlc3RfY29tbWl0IEQgZm9vIEQgJiYKKwlnaXQgY2hlY2tvdXQgQV4wICYmCisJdGVzdF9jb21taXQgRSBiYXIgRSAmJgorCXRlc3RfY29tbWl0IEYgZm9vIEYgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK21rZGlyIC5naXQvaG9va3MKKworY2F0ID4uZ2l0L2hvb2tzL3Bvc3QtcmV3cml0ZSA8PEVPRgorIyEvYmluL3NoCitlY2hvIFwkQCA+ICIkVFJBU0hfRElSRUNUT1JZIi9wb3N0LXJld3JpdGUuYXJncworY2F0ID4gIiRUUkFTSF9ESVJFQ1RPUlkiL3Bvc3QtcmV3cml0ZS5kYXRhCitFT0YKK2NobW9kIHUreCAuZ2l0L2hvb2tzL3Bvc3QtcmV3cml0ZQorCitjbGVhcl9ob29rX2lucHV0ICgpIHsKKwlybSAtZiBwb3N0LXJld3JpdGUuYXJncyBwb3N0LXJld3JpdGUuZGF0YQorfQorCit2ZXJpZnlfaG9va19pbnB1dCAoKSB7CisJdGVzdF9jbXAgZXhwZWN0ZWQuYXJncyAiJFRSQVNIX0RJUkVDVE9SWSIvcG9zdC1yZXdyaXRlLmFyZ3MgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5kYXRhICIkVFJBU0hfRElSRUNUT1JZIi9wb3N0LXJld3JpdGUuZGF0YQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29tbWl0IC0tYW1lbmQnICcKKwljbGVhcl9ob29rX2lucHV0ICYmCisJZWNobyAiRCBuZXcgbWVzc2FnZSIgPiBuZXdtc2cgJiYKKwlvbGRzaGE9JChnaXQgcmV2LXBhcnNlIEhFQUReMCkgJiYKKwlnaXQgY29tbWl0IC1GbmV3bXNnIC0tYW1lbmQgJiYKKwllY2hvIGFtZW5kID4gZXhwZWN0ZWQuYXJncyAmJgorCWVjaG8gJG9sZHNoYSAkKGdpdCByZXYtcGFyc2UgSEVBRF4wKSA+IGV4cGVjdGVkLmRhdGEgJiYKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29tbWl0IC0tYW1lbmQgLS1uby1wb3N0LXJld3JpdGUnICcKKwljbGVhcl9ob29rX2lucHV0ICYmCisJZWNobyAiRCBuZXcgbWVzc2FnZSBhZ2FpbiIgPiBuZXdtc2cgJiYKKwlnaXQgY29tbWl0IC0tbm8tcG9zdC1yZXdyaXRlIC1GbmV3bXNnIC0tYW1lbmQgJiYKKwl0ZXN0ICEgLWYgcG9zdC1yZXdyaXRlLmFyZ3MgJiYKKwl0ZXN0ICEgLWYgcG9zdC1yZXdyaXRlLmRhdGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYmFzZSAtLWFwcGx5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1hcHBseSAtLW9udG8gQSBCICYmCisJZWNobyBDID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHJlYmFzZSA+ZXhwZWN0ZWQuYXJncyAmJgorCWNhdCA+ZXhwZWN0ZWQuZGF0YSA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgQykgJChnaXQgcmV2LXBhcnNlIEhFQUReKQorCSQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwlFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC0tYXBwbHkgLS1za2lwJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1hcHBseSAtLW9udG8gQSBCICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXNraXAgJiYKKwllY2hvIEQgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gcmViYXNlID5leHBlY3RlZC5hcmdzICYmCisJY2F0ID5leHBlY3RlZC5kYXRhIDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSBDKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pCisJJChnaXQgcmV2LXBhcnNlIEQpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCUVPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLS1hcHBseSAtLXNraXAgdGhlIGxhc3Qgb25lJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBGICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1hcHBseSAtLW9udG8gRCBBICYmCisJZ2l0IHJlYmFzZSAtLXNraXAgJiYKKwllY2hvIHJlYmFzZSA+ZXhwZWN0ZWQuYXJncyAmJgorCWNhdCA+ZXhwZWN0ZWQuZGF0YSA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgRSkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJJChnaXQgcmV2LXBhcnNlIEYpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCUVPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLW0nICcKKwlnaXQgcmVzZXQgLS1oYXJkIEQgJiYKKwljbGVhcl9ob29rX2lucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtbSAtLW9udG8gQSBCICYmCisJZWNobyBDID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHJlYmFzZSA+ZXhwZWN0ZWQuYXJncyAmJgorCWNhdCA+ZXhwZWN0ZWQuZGF0YSA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgQykgJChnaXQgcmV2LXBhcnNlIEhFQUReKQorCSQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwlFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC1tIC0tc2tpcCcgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1tIC0tb250byBBIEIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tc2tpcCAmJgorCWVjaG8gRCA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEMpICQoZ2l0IHJldi1wYXJzZSBIRUFEXikKKwkkKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJRU9GCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYmFzZSB3aXRoIGltcGxpY2l0IHVzZSBvZiBtZXJnZSBiYWNrZW5kJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1rZWVwLWVtcHR5IC0tb250byBBIEIgJiYKKwllY2hvIEMgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gcmViYXNlID5leHBlY3RlZC5hcmdzICYmCisJY2F0ID5leHBlY3RlZC5kYXRhIDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSBDKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pCisJJChnaXQgcmV2LXBhcnNlIEQpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCUVPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLS1za2lwIHdpdGggaW1wbGljaXQgdXNlIG9mIG1lcmdlIGJhY2tlbmQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEQgJiYKKwljbGVhcl9ob29rX2lucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWtlZXAtZW1wdHkgLS1vbnRvIEEgQiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1za2lwICYmCisJZWNobyBEID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHJlYmFzZSA+ZXhwZWN0ZWQuYXJncyAmJgorCWNhdCA+ZXhwZWN0ZWQuZGF0YSA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgQykgJChnaXQgcmV2LXBhcnNlIEhFQUReKQorCSQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwlFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKworc2V0X2Zha2VfZWRpdG9yCisKKyMgSGVscGVyIHRvIHdvcmsgYXJvdW5kIHRoZSBsYWNrIG9mIG9uZS1zaG90IGV4cG9ydGluZyBmb3IKKyMgdGVzdF9tdXN0X2ZhaWwgKGFzIGl0IGlzIGEgc2hlbGwgZnVuY3Rpb24pCit0ZXN0X2ZhaWxfaW50ZXJhY3RpdmVfcmViYXNlICgpIHsKKwkoCisJCUZBS0VfTElORVM9IiQxIiAmJgorCQlzaGlmdCAmJgorCQlleHBvcnQgRkFLRV9MSU5FUyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pICIkQCIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLWkgKHVuY2hhbmdlZCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIEQgJiYKKwljbGVhcl9ob29rX2lucHV0ICYmCisJdGVzdF9mYWlsX2ludGVyYWN0aXZlX3JlYmFzZSAiMSAyIiAtLW9udG8gQSBCICYmCisJZWNobyBDID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHJlYmFzZSA+ZXhwZWN0ZWQuYXJncyAmJgorCWNhdCA+ZXhwZWN0ZWQuZGF0YSA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgQykgJChnaXQgcmV2LXBhcnNlIEhFQUReKQorCSQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwlFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC1pIChza2lwKScgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwl0ZXN0X2ZhaWxfaW50ZXJhY3RpdmVfcmViYXNlICIyIiAtLW9udG8gQSBCICYmCisJZWNobyBEID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHJlYmFzZSA+ZXhwZWN0ZWQuYXJncyAmJgorCWNhdCA+ZXhwZWN0ZWQuZGF0YSA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJRU9GCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYmFzZSAtaSAoc3F1YXNoKScgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwl0ZXN0X2ZhaWxfaW50ZXJhY3RpdmVfcmViYXNlICIxIHNxdWFzaCAyIiAtLW9udG8gQSBCICYmCisJZWNobyBDID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHJlYmFzZSA+ZXhwZWN0ZWQuYXJncyAmJgorCWNhdCA+ZXhwZWN0ZWQuZGF0YSA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgQykgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJJChnaXQgcmV2LXBhcnNlIEQpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCUVPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLWkgKGZpeHVwIHdpdGhvdXQgY29uZmxpY3QpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCUZBS0VfTElORVM9IjEgZml4dXAgMiIgZ2l0IHJlYmFzZSAtaSBCICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEMpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCSQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwlFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC1pIChkb3VibGUgZWRpdCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIEQgJiYKKwljbGVhcl9ob29rX2lucHV0ICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIGVkaXQgMiIgZ2l0IHJlYmFzZSAtaSBCICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyBzb21ldGhpbmcgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gcmViYXNlID5leHBlY3RlZC5hcmdzICYmCisJY2F0ID5leHBlY3RlZC5kYXRhIDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSBDKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pCisJJChnaXQgcmV2LXBhcnNlIEQpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCUVPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLWkgKGV4ZWMpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCUZBS0VfTElORVM9ImVkaXQgMSBleGVjX2ZhbHNlIDIiIGdpdCByZWJhc2UgLWkgQiAmJgorCWVjaG8gc29tZXRoaW5nID5iYXIgJiYKKwlnaXQgYWRkIGJhciAmJgorCSMgRmFpbHMgYmVjYXVzZSBvZiBleGVjIGZhbHNlCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEMpICQoZ2l0IHJldi1wYXJzZSBIRUFEXikKKwkkKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJRU9GCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDA4LXNlbmQtcGFjay1zdGRpbi5zaCBiL3QvdDU0MDgtc2VuZC1wYWNrLXN0ZGluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4NzM3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDA4LXNlbmQtcGFjay1zdGRpbi5zaApAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc2VuZC1wYWNrIC0tc3RkaW4gdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKworY3JlYXRlX3JlZiAoKSB7CisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXRlc3RfdGljayAmJgorCWNvbW1pdD0kKGVjaG8gIiQxIiB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSkgJiYKKwlnaXQgdXBkYXRlLXJlZiAiJDEiICRjb21taXQKK30KKworY2xlYXJfcmVtb3RlICgpIHsKKwlybSAtcmYgcmVtb3RlLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSByZW1vdGUuZ2l0Cit9CisKK3ZlcmlmeV9wdXNoICgpIHsKKwlnaXQgcmV2LXBhcnNlICIkMSIgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9cmVtb3RlLmdpdCByZXYtcGFyc2UgIiR7MjotJDF9IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZWZzJyAnCisJY2F0ID5yZWZzIDw8LVxFT0YgJiYKKwlyZWZzL2hlYWRzL0EKKwlyZWZzL2hlYWRzL0MKKwlyZWZzL3RhZ3MvRAorCXJlZnMvaGVhZHMvQgorCXJlZnMvdGFncy9FCisJRU9GCisJZm9yIGkgaW4gJChjYXQgcmVmcyk7IGRvCisJCWNyZWF0ZV9yZWYgJGkgfHwgcmV0dXJuIDEKKwlkb25lCisnCisKKyMgc2FuaXR5IGNoZWNrIG91ciBzZXR1cAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcyBvbiBjbWRsaW5lJyAnCisJY2xlYXJfcmVtb3RlICYmCisJZ2l0IHNlbmQtcGFjayByZW1vdGUuZ2l0ICQoY2F0IHJlZnMpICYmCisJZm9yIGkgaW4gJChjYXQgcmVmcyk7IGRvCisJCXZlcmlmeV9wdXNoICRpIHx8IHJldHVybiAxCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZzIG92ZXIgc3RkaW4nICcKKwljbGVhcl9yZW1vdGUgJiYKKwlnaXQgc2VuZC1wYWNrIHJlbW90ZS5naXQgLS1zdGRpbiA8cmVmcyAmJgorCWZvciBpIGluICQoY2F0IHJlZnMpOyBkbworCQl2ZXJpZnlfcHVzaCAkaSB8fCByZXR1cm4gMQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gbGluZXMgYXJlIGZ1bGwgcmVmc3BlY3MnICcKKwljbGVhcl9yZW1vdGUgJiYKKwllY2hvICJBOm90aGVyIiA+aW5wdXQgJiYKKwlnaXQgc2VuZC1wYWNrIHJlbW90ZS5naXQgLS1zdGRpbiA8aW5wdXQgJiYKKwl2ZXJpZnlfcHVzaCByZWZzL2hlYWRzL0EgcmVmcy9oZWFkcy9vdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBtaXhlZCB3aXRoIGNtZGxpbmUnICcKKwljbGVhcl9yZW1vdGUgJiYKKwllY2hvIEEgPmlucHV0ICYmCisJZ2l0IHNlbmQtcGFjayByZW1vdGUuZ2l0IC0tc3RkaW4gQiA8aW5wdXQgJiYKKwl2ZXJpZnlfcHVzaCBBICYmCisJdmVyaWZ5X3B1c2ggQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbWRsaW5lIHJlZnMgd3JpdHRlbiBpbiBvcmRlcicgJworCWNsZWFyX3JlbW90ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgcmVtb3RlLmdpdCBBOmZvbyBCOmZvbyAmJgorCXZlcmlmeV9wdXNoIEEgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RkaW4gcmVmcyBjb21lIGFmdGVyIGNtZGxpbmUnICcKKwljbGVhcl9yZW1vdGUgJiYKKwllY2hvIEE6Zm9vID5pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgcmVtb3RlLmdpdCAtLXN0ZGluIEI6Zm9vIDxpbnB1dCAmJgorCXZlcmlmeV9wdXNoIEIgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnNwZWNzIGFuZCAtLW1pcnJvciBkbyBub3QgbWl4IChjbWRsaW5lKScgJworCWNsZWFyX3JlbW90ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgcmVtb3RlLmdpdCAtLW1pcnJvciAkKGNhdCByZWZzKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZzcGVjcyBhbmQgLS1taXJyb3IgZG8gbm90IG1peCAoc3RkaW4pJyAnCisJY2xlYXJfcmVtb3RlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtcGFjayByZW1vdGUuZ2l0IC0tbWlycm9yIC0tc3RkaW4gPHJlZnMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDA5LWNvbG9yaXplLXJlbW90ZS1tZXNzYWdlcy5zaCBiL3QvdDU0MDktY29sb3JpemUtcmVtb3RlLW1lc3NhZ2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkOGY0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDA5LWNvbG9yaXplLXJlbW90ZS1tZXNzYWdlcy5zaApAQCAtMCwwICsxLDEwMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlbW90ZSBtZXNzYWdlcyBhcmUgY29sb3JpemVkIG9uIHRoZSBjbGllbnQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIC5naXQvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy91cGRhdGUgPDwtXEVPRiAmJgorCWVjaG8gZXJyb3I6IGVycm9yCisJZWNobyBFUlJPUjogYWxzbyBoaWdobGlnaHRlZAorCWVjaG8gaGludDogaGludAorCWVjaG8gaGludGluZzogbm90IGhpZ2hsaWdodGVkCisJZWNobyBzdWNjZXNzOiBzdWNjZXNzCisJZWNobyB3YXJuaW5nOiB3YXJuaW5nCisJZWNobyBwcmVmaXhlcnJvcjogZXJyb3IKKwllY2hvICIgIiAiZXJyb3I6IGxlYWRpbmcgc3BhY2UiCisJZWNobyAiICAgICIKKwllY2hvIEVycgorCWVjaG8gU1VDQ0VTUworCWV4aXQgMAorCUVPRgorCWVjaG8gMSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gMSAmJgorCWdpdCBjbG9uZSAuIGNoaWxkICYmCisJKAorCQljZCBjaGlsZCAmJgorCQl0ZXN0X2NvbW1pdCBtZXNzYWdlMiBmaWxlIGNvbnRlbnQyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXl3b3JkcycgJworCWdpdCAtLWdpdC1kaXIgY2hpbGQvLmdpdCAtYyBjb2xvci5yZW1vdGU9YWx3YXlzIHB1c2ggLWYgb3JpZ2luIEhFQUQ6cmVmcy9oZWFkcy9rZXl3b3JkcyAyPm91dHB1dCAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxvdXRwdXQgPmRlY29kZWQgJiYKKwlncmVwICI8Qk9MRDtSRUQ+ZXJyb3I8UkVTRVQ+OiBlcnJvciIgZGVjb2RlZCAmJgorCWdyZXAgIjxZRUxMT1c+aGludDxSRVNFVD46IiBkZWNvZGVkICYmCisJZ3JlcCAiPEJPTEQ7R1JFRU4+c3VjY2VzczxSRVNFVD46IiBkZWNvZGVkICYmCisJZ3JlcCAiPEJPTEQ7R1JFRU4+U1VDQ0VTUzxSRVNFVD4iIGRlY29kZWQgJiYKKwlncmVwICI8Qk9MRDtZRUxMT1c+d2FybmluZzxSRVNFVD46IiBkZWNvZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dob2xlIHdvcmRzIGF0IGxpbmUgc3RhcnQnICcKKwlnaXQgLS1naXQtZGlyIGNoaWxkLy5naXQgLWMgY29sb3IucmVtb3RlPWFsd2F5cyBwdXNoIC1mIG9yaWdpbiBIRUFEOnJlZnMvaGVhZHMvd2hvbGUtd29yZHMgMj5vdXRwdXQgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8b3V0cHV0ID5kZWNvZGVkICYmCisJZ3JlcCAiPFlFTExPVz5oaW50PFJFU0VUPjoiIGRlY29kZWQgJiYKKwlncmVwICJoaW50aW5nOiBub3QgaGlnaGxpZ2h0ZWQiIGRlY29kZWQgJiYKKwlncmVwICJwcmVmaXhlcnJvcjogZXJyb3IiIGRlY29kZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnQgbGluZScgJworCWdpdCAtQyBjaGlsZCAtYyBjb2xvci5yZW1vdGU9YWx3YXlzIHB1c2ggLWYgb3JpZ2luIEhFQUQ6c2hvcnQtbGluZSAyPm91dHB1dCAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxvdXRwdXQgPmRlY29kZWQgJiYKKwlncmVwICJyZW1vdGU6IEVyciIgZGVjb2RlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXNlLWluc2Vuc2l0aXZlJyAnCisJZ2l0IC0tZ2l0LWRpciBjaGlsZC8uZ2l0IC1jIGNvbG9yLnJlbW90ZT1hbHdheXMgcHVzaCAtZiBvcmlnaW4gSEVBRDpyZWZzL2hlYWRzL2Nhc2UtaW5zZW5zaXRpdmUgMj5vdXRwdXQgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8b3V0cHV0ID5kZWNvZGVkICYmCisJZ3JlcCAiPEJPTEQ7UkVEPmVycm9yPFJFU0VUPjogZXJyb3IiIGRlY29kZWQgJiYKKwlncmVwICI8Qk9MRDtSRUQ+RVJST1I8UkVTRVQ+OiBhbHNvIGhpZ2hsaWdodGVkIiBkZWNvZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlYWRpbmcgc3BhY2UnICcKKwlnaXQgLS1naXQtZGlyIGNoaWxkLy5naXQgLWMgY29sb3IucmVtb3RlPWFsd2F5cyBwdXNoIC1mIG9yaWdpbiBIRUFEOnJlZnMvaGVhZHMvbGVhZGluZy1zcGFjZSAyPm91dHB1dCAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxvdXRwdXQgPmRlY29kZWQgJiYKKwlncmVwICIgIDxCT0xEO1JFRD5lcnJvcjxSRVNFVD46IGxlYWRpbmcgc3BhY2UiIGRlY29kZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BhY2VzIG9ubHknICcKKwlnaXQgLUMgY2hpbGQgLWMgY29sb3IucmVtb3RlPWFsd2F5cyBwdXNoIC1mIG9yaWdpbiBIRUFEOm9ubHktc3BhY2UgMj5vdXRwdXQgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8b3V0cHV0ID5kZWNvZGVkICYmCisJZ3JlcCAicmVtb3RlOiAgICAgIiBkZWNvZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNvbG9yaW5nIGZvciByZWRpcmVjdGVkIG91dHB1dCcgJworCWdpdCAtLWdpdC1kaXIgY2hpbGQvLmdpdCBwdXNoIC1mIG9yaWdpbiBIRUFEOnJlZnMvaGVhZHMvcmVkaXJlY3RlZC1vdXRwdXQgMj5vdXRwdXQgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8b3V0cHV0ID5kZWNvZGVkICYmCisJZ3JlcCAiZXJyb3I6IGVycm9yIiBkZWNvZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjdXN0b21pemVkIGNvbG9yJyAnCisJZ2l0IC0tZ2l0LWRpciBjaGlsZC8uZ2l0IC1jIGNvbG9yLnJlbW90ZT1hbHdheXMgLWMgY29sb3IucmVtb3RlLmVycm9yPWJsdWUgcHVzaCAtZiBvcmlnaW4gSEVBRDpyZWZzL2hlYWRzL2N1c3RvbWl6ZWQtY29sb3IgMj5vdXRwdXQgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8b3V0cHV0ID5kZWNvZGVkICYmCisJZ3JlcCAiPEJMVUU+ZXJyb3I8UkVTRVQ+OiIgZGVjb2RlZCAmJgorCWdyZXAgIjxCT0xEO0dSRUVOPnN1Y2Nlc3M8UkVTRVQ+OiIgZGVjb2RlZAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIGluIGN1c3RvbWl6ZWQgY29sb3InICcKKwlnaXQgLS1naXQtZGlyIGNoaWxkLy5naXQgLWMgY29sb3IucmVtb3RlPWFsd2F5cyAtYyBjb2xvci5yZW1vdGUuZXJyb3I9aS1hbS1ub3QtYS1jb2xvciBwdXNoIC1mIG9yaWdpbiBIRUFEOnJlZnMvaGVhZHMvZXJyb3ItY3VzdG9taXplZC1jb2xvciAyPm91dHB1dCAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxvdXRwdXQgPmRlY29kZWQgJiYKKwlncmVwICI8Qk9MRDtHUkVFTj5zdWNjZXNzPFJFU0VUPjoiIGRlY29kZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFsbGJhY2sgdG8gY29sb3IudWknICcKKwlnaXQgLS1naXQtZGlyIGNoaWxkLy5naXQgLWMgY29sb3IudWk9YWx3YXlzIHB1c2ggLWYgb3JpZ2luIEhFQUQ6cmVmcy9oZWFkcy9mYWxsYmFjay1jb2xvci11aSAyPm91dHB1dCAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxvdXRwdXQgPmRlY29kZWQgJiYKKwlncmVwICI8Qk9MRDtSRUQ+ZXJyb3I8UkVTRVQ+OiBlcnJvciIgZGVjb2RlZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU0MTAtcmVjZWl2ZS1wYWNrLWFsdGVybmF0ZXMuc2ggYi90L3Q1NDEwLXJlY2VpdmUtcGFjay1hbHRlcm5hdGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwMGQwZGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDEwLXJlY2VpdmUtcGFjay1hbHRlcm5hdGVzLnNoCkBAIC0wLDAgKzEsNDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmVjZWl2ZS1wYWNrIHdpdGggYWx0ZXJuYXRlIHJlZiBmaWx0ZXJpbmcnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGJhc2UgJiYKKwlnaXQgY2xvbmUgLXMgLS1iYXJlIC4gZm9yayAmJgorCWdpdCBjaGVja291dCAtYiBwdWJsaWMvYnJhbmNoIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IHB1YmxpYyAmJgorCWdpdCBjaGVja291dCAtYiBwcml2YXRlL2JyYW5jaCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBwcml2YXRlCisnCisKK2V4dHJhY3RfaGF2ZXMgKCkgeworCWRlcGFja2V0aXplIHwgcGVybCAtbG5lICcvXihcUyspIFwuaGF2ZS8gYW5kIHByaW50ICQxJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvcmUuYWx0ZXJuYXRlUmVmc0NvbW1hbmQnICcKKwl3cml0ZV9zY3JpcHQgZm9yay9hbHRlcm5hdGUtcmVmcyA8PC1cRU9GICYmCisJCWdpdCAtLWdpdC1kaXI9IiQxIiBmb3ItZWFjaC1yZWYgXAorCQkJLS1mb3JtYXQ9IiUob2JqZWN0bmFtZSkiIFwKKwkJCXJlZnMvaGVhZHMvcHVibGljLworCUVPRgorCXRlc3RfY29uZmlnIC1DIGZvcmsgY29yZS5hbHRlcm5hdGVSZWZzQ29tbWFuZCAuL2FsdGVybmF0ZS1yZWZzICYmCisJZ2l0IHJldi1wYXJzZSBwdWJsaWMvYnJhbmNoID5leHBlY3QgJiYKKwlwcmludGYgIjAwMDAiIHwgZ2l0IHJlY2VpdmUtcGFjayBmb3JrID5hY3R1YWwgJiYKKwlleHRyYWN0X2hhdmVzIDxhY3R1YWwgPmFjdHVhbC5oYXZlcyAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuaGF2ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjb3JlLmFsdGVybmF0ZVJlZnNQcmVmaXhlcycgJworCXRlc3RfY29uZmlnIC1DIGZvcmsgY29yZS5hbHRlcm5hdGVSZWZzUHJlZml4ZXMgInJlZnMvaGVhZHMvcHJpdmF0ZSIgJiYKKwlnaXQgcmV2LXBhcnNlIHByaXZhdGUvYnJhbmNoID5leHBlY3QgJiYKKwlwcmludGYgIjAwMDAiIHwgZ2l0IHJlY2VpdmUtcGFjayBmb3JrID5hY3R1YWwgJiYKKwlleHRyYWN0X2hhdmVzIDxhY3R1YWwgPmFjdHVhbC5oYXZlcyAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuaGF2ZXMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTAwLWZldGNoLXBhY2suc2ggYi90L3Q1NTAwLWZldGNoLXBhY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGM1NGUzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MDAtZmV0Y2gtcGFjay5zaApAQCAtMCwwICsxLDEwMzAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0aW5nIG11bHRpX2FjayBwYWNrIGZldGNoaW5nJworCisuIC4vdGVzdC1saWIuc2gKKworIyBUZXN0IGZldGNoLXBhY2svdXBsb2FkLXBhY2sgcGFpci4KKworIyBTb21lIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworCithZGQgKCkgeworCW5hbWU9JDEgJiYKKwl0ZXh0PSIkQCIgJiYKKwlicmFuY2g9JChlY2hvICRuYW1lIHwgc2VkIC1lICdzL15cKC5cKS4qJC9cMS8nKSAmJgorCXBhcmVudHM9IiIgJiYKKworCXNoaWZ0ICYmCisJd2hpbGUgdGVzdCAkMTsgZG8KKwkJcGFyZW50cz0iJHBhcmVudHMgLXAgJDEiICYmCisJCXNoaWZ0CisJZG9uZSAmJgorCisJZWNobyAiJHRleHQiID4gdGVzdC50eHQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRlc3QudHh0ICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCSMgbWFrZSBzdXJlIHRpbWVzdGFtcHMgYXJlIGluIGNvcnJlY3Qgb3JkZXIKKwl0ZXN0X3RpY2sgJiYKKwljb21taXQ9JChlY2hvICIkdGV4dCIgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUgJHBhcmVudHMpICYmCisJZXZhbCAiJG5hbWU9JGNvbW1pdDsgZXhwb3J0ICRuYW1lIiAmJgorCWdpdCB1cGRhdGUtcmVmICJyZWZzL2hlYWRzLyRicmFuY2giICIkY29tbWl0IiAmJgorCWV2YWwgJHticmFuY2h9VElQPSRjb21taXQKK30KKworcHVsbF90b19jbGllbnQgKCkgeworCW51bWJlcj0kMSAmJgorCWhlYWRzPSQyICYmCisJY291bnQ9JDMgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbnVtYmVyIHB1bGwiICcKKwkJKAorCQkJY2QgY2xpZW50ICYmCisJCQlnaXQgZmV0Y2gtcGFjayAtayAtdiAuLiAkaGVhZHMgJiYKKworCQkJY2FzZSAiJGhlYWRzIiBpbgorCQkJICAgICpBKikKKwkJCQkgICAgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9BICIkQVRJUCI7OworCQkJZXNhYyAmJgorCQkJY2FzZSAiJGhlYWRzIiBpbiAqQiopCisJCQkgICAgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9CICIkQlRJUCI7OworCQkJZXNhYyAmJgorCisJCQlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy8kKAorCQkJCWVjaG8gJGhlYWRzIHwKKwkJCQlzZWQgLWUgInMvXlwoLlwpLiokL1wxLyIKKwkJCSkgJiYKKworCQkJZ2l0IGZzY2sgLS1mdWxsICYmCisKKwkJCW12IC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKiAuICYmCisJCQlwPSQobHMgLTEgcGFjay0qLnBhY2spICYmCisJCQlnaXQgdW5wYWNrLW9iamVjdHMgPCRwICYmCisJCQlnaXQgZnNjayAtLWZ1bGwgJiYKKworCQkJaWR4PSQoZWNobyBwYWNrLSouaWR4KSAmJgorCQkJcGFja19jb3VudD0kKGdpdCBzaG93LWluZGV4IDwkaWR4IHwgd2MgLWwpICYmCisJCQl0ZXN0ICRwYWNrX2NvdW50ID0gJGNvdW50ICYmCisJCQlybSAtZiBwYWNrLSoKKwkJKQorCScKK30KKworIyBIZXJlIGJlZ2lucyB0aGUgYWN0dWFsIHRlc3RpbmcKKworIyBBMSAtIC4uLiAtIEEyMCAtIEEyMQorIyAgICBcCisjICAgICAgQjEgIC0gICBCMiAtIC4uIC0gQjcwCisKKyMgY2xpZW50IHB1bGxzIEEyMCwgQjEuIFRoZW4gdHJhY2tzIG9ubHkgQi4gVGhlbiBwdWxscyBBLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIGNsaWVudCAmJgorCSgKKwkJY2QgY2xpZW50ICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIudW5wYWNrbGltaXQgMAorCSkgJiYKKwlhZGQgQTEgJiYKKwlwcmV2PTEgJiYKKwljdXI9MiAmJgorCXdoaWxlIFsgJGN1ciAtbGUgMTAgXTsgZG8KKwkJYWRkIEEkY3VyICQoZXZhbCBlY2hvIFwkQSRwcmV2KSAmJgorCQlwcmV2PSRjdXIgJiYKKwkJY3VyPSQoKCRjdXIrMSkpCisJZG9uZSAmJgorCWFkZCBCMSAkQTEgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL0EgIiRBVElQIiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvQiAiJEJUSVAiICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvQgorJworCitwdWxsX3RvX2NsaWVudCAxc3QgInJlZnMvaGVhZHMvQiByZWZzL2hlYWRzL0EiICQoKDExKjMpKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0IDFzdCBwdWxsIHNldHVwJyAnCisJYWRkIEExMSAkQTEwICYmCisJcHJldj0xICYmCisJY3VyPTIgJiYKKwl3aGlsZSBbICRjdXIgLWxlIDY1IF07IGRvCisJCWFkZCBCJGN1ciAkKGV2YWwgZWNobyBcJEIkcHJldikgJiYKKwkJcHJldj0kY3VyICYmCisJCWN1cj0kKCgkY3VyKzEpKQorCWRvbmUKKycKKworcHVsbF90b19jbGllbnQgMm5kICJyZWZzL2hlYWRzL0IiICQoKDY0KjMpKQorCitwdWxsX3RvX2NsaWVudCAzcmQgInJlZnMvaGVhZHMvQSIgJCgoMSozKSkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlIGJyYW5jaCBjbG9uZScgJworCWdpdCBjbG9uZSAtLXNpbmdsZS1icmFuY2ggImZpbGU6Ly8kKHB3ZCkvLiIgc2luZ2xlYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbmdsZSBicmFuY2ggb2JqZWN0IGNvdW50JyAnCisJR0lUX0RJUj1zaW5nbGVicmFuY2gvLmdpdCBnaXQgY291bnQtb2JqZWN0cyAtdiB8CisJCWdyZXAgIl5pbi1wYWNrOiIgPiBjb3VudC5zaW5nbGVicmFuY2ggJiYKKwllY2hvICJpbi1wYWNrOiAxOTgiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGNvdW50LnNpbmdsZWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUgZ2l2ZW4gYnJhbmNoIGNsb25lJyAnCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAtLWJyYW5jaCBBICJmaWxlOi8vJChwd2QpLy4iIGJyYW5jaC1hICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tZ2l0LWRpcj1icmFuY2gtYS8uZ2l0IHJldi1wYXJzZSBvcmlnaW4vQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IGRlcHRoIDEnICcKKwlnaXQgY2xvbmUgLS1uby1zaW5nbGUtYnJhbmNoIC0tZGVwdGggMSAiZmlsZTovLyQocHdkKS8uIiBzaGFsbG93MCAmJgorCXRlc3QgIiQoZ2l0IC0tZ2l0LWRpcj1zaGFsbG93MC8uZ2l0IHJldi1saXN0IC0tY291bnQgSEVBRCkiID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IGRlcHRoIDEgd2l0aCBmc2NrJyAnCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCBmZXRjaC5mc2Nrb2JqZWN0cyB0cnVlICYmCisJZ2l0IGNsb25lIC0tbm8tc2luZ2xlLWJyYW5jaCAtLWRlcHRoIDEgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdzBmc2NrICYmCisJdGVzdCAiJChnaXQgLS1naXQtZGlyPXNoYWxsb3cwZnNjay8uZ2l0IHJldi1saXN0IC0tY291bnQgSEVBRCkiID0gMSAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgLS11bnNldCBmZXRjaC5mc2Nrb2JqZWN0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93JyAnCisJZ2l0IGNsb25lIC0tbm8tc2luZ2xlLWJyYW5jaCAtLWRlcHRoIDIgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IGRlcHRoIGNvdW50JyAnCisJdGVzdCAiJChnaXQgLS1naXQtZGlyPXNoYWxsb3cvLmdpdCByZXYtbGlzdCAtLWNvdW50IEhFQUQpIiA9IDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdyAmJgorCWdyZXAgIl5pbi1wYWNrOiAxMiIgY291bnQuc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCAocGFydCAyKScgJworCXNlZCAtZSAiL15pbi1wYWNrOi9kIiAtZSAiL15wYWNrczovZCIgLWUgIi9ec2l6ZS1wYWNrOi9kIiBcCisJICAgIC1lICIvOiAwJC9kIiBjb3VudC5zaGFsbG93ID4gY291bnRfb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGNvdW50X291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGluIHNoYWxsb3cgcmVwbycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgZnNjayAtLWZ1bGwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBmZXRjaCBpbiBzaGFsbG93IHJlcG8nICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGZldGNoCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjaGFuZ2VzIGV4cGVjdGVkJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12CisJKSA+IGNvdW50LnNoYWxsb3cuMiAmJgorCWNtcCBjb3VudC5zaGFsbG93IGNvdW50LnNoYWxsb3cuMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBzYW1lIGRlcHRoIGluIHNoYWxsb3cgcmVwbycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aD0yCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjaGFuZ2VzIGV4cGVjdGVkJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12CisJKSA+IGNvdW50LnNoYWxsb3cuMyAmJgorCWNtcCBjb3VudC5zaGFsbG93IGNvdW50LnNoYWxsb3cuMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgdHdvIG1vcmUnICcKKwlhZGQgQjY2ICRCNjUgJiYKKwlhZGQgQjY3ICRCNjYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCBpbiBzaGFsbG93IHJlcG8nICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IHB1bGwgLi4gQgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdyAmJgorCWdyZXAgIl5jb3VudDogNiIgY291bnQuc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgdHdvIG1vcmUgKHBhcnQgMiknICcKKwlhZGQgQjY4ICRCNjcgJiYKKwlhZGQgQjY5ICRCNjgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVlcGVuaW5nIHB1bGwgaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBwdWxsIC0tZGVwdGggNCAuLiBCCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgY291bnQtb2JqZWN0cyAtdgorCSkgPiBjb3VudC5zaGFsbG93ICYmCisJZ3JlcCAiXmNvdW50OiAxMiIgY291bnQuc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWVwZW5pbmcgZmV0Y2ggaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBmZXRjaCAtLWRlcHRoIDQgLi4gQTpBCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgY291bnQtb2JqZWN0cyAtdgorCSkgPiBjb3VudC5zaGFsbG93ICYmCisJZ3JlcCAiXmNvdW50OiAxOCIgY291bnQuc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIGluIHNoYWxsb3cgcmVwbyB3aXRoIG1pc3NpbmcgbWVyZ2UgYmFzZScgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aCA0IC4uIEEgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyBGRVRDSF9IRUFECisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRpdGlvbmFsIHNpbXBsZSBzaGFsbG93IGRlZXBlbmluZ3MnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGZldGNoIC0tZGVwdGg9OCAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aD0xMCAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aD0xMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBkZXB0aCBjb3VudCcgJworCXRlc3QgIiQoZ2l0IC0tZ2l0LWRpcj1zaGFsbG93Ly5naXQgcmV2LWxpc3QgLS1jb3VudCBIRUFEKSIgPSAxMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgcHJ1bmUgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdyAmJgorCWdyZXAgIl5jb3VudDogNTQiIGNvdW50LnNoYWxsb3cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggLS1uby1zaGFsbG93IG9uIGZ1bGwgcmVwbycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAtLW5vc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAtLWRlcHRoIC0tbm8tc2hhbGxvdycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLS1kZXB0aD0xIC0tbm9zaGFsbG93CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0dXJuIHNoYWxsb3cgdG8gY29tcGxldGUgcmVwb3NpdG9yeScgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgZmV0Y2ggLS11bnNoYWxsb3cgJiYKKwkJISB0ZXN0IC1mIC5naXQvc2hhbGxvdyAmJgorCQlnaXQgZnNjayAtLWZ1bGwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgd2l0aG91dCAtLW5vLXNpbmdsZS1icmFuY2gnICcKKwlnaXQgY2xvbmUgLS1kZXB0aCAxICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3cyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50JyAnCisJKAorCQljZCBzaGFsbG93MiAmJgorCQlnaXQgY291bnQtb2JqZWN0cyAtdgorCSkgPiBjb3VudC5zaGFsbG93MiAmJgorCWdyZXAgIl5pbi1wYWNrOiAzIiBjb3VudC5zaGFsbG93MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IHdpdGggLS1icmFuY2gnICcKKwlnaXQgY2xvbmUgLS1kZXB0aCAxIC0tYnJhbmNoIEEgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdzMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQnICcKKwllY2hvICJpbi1wYWNrOiAzIiA+IGNvdW50My5leHBlY3RlZCAmJgorCUdJVF9ESVI9c2hhbGxvdzMvLmdpdCBnaXQgY291bnQtb2JqZWN0cyAtdiB8CisJCWdyZXAgIl5pbi1wYWNrIiA+IGNvdW50My5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBjb3VudDMuZXhwZWN0ZWQgY291bnQzLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IHdpdGggZGV0YWNoZWQgSEVBRCcgJworCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWdpdCBjbG9uZSAtLWRlcHRoIDEgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdzUgJiYKKwlnaXQgY2hlY2tvdXQgLSAmJgorCUdJVF9ESVI9c2hhbGxvdzUvLmdpdCBnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4gPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYWxsb3cgY2xvbmUgcHVsbGluZyB0YWdzJyAnCisJZ2l0IHRhZyAtYSAtbSBBIFRBR0ExIEEgJiYKKwlnaXQgdGFnIC1hIC1tIEIgVEFHQjEgQiAmJgorCWdpdCB0YWcgVEFHQTIgQSAmJgorCWdpdCB0YWcgVEFHQjIgQiAmJgorCWdpdCBjbG9uZSAtLWRlcHRoIDEgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdzYgJiYKKworCWNhdCA+dGFnbGlzdC5leHBlY3RlZCA8PFxFT0YgJiYKK1RBR0IxCitUQUdCMgorRU9GCisJR0lUX0RJUj1zaGFsbG93Ni8uZ2l0IGdpdCB0YWcgLWwgPnRhZ2xpc3QuYWN0dWFsICYmCisJdGVzdF9jbXAgdGFnbGlzdC5leHBlY3RlZCB0YWdsaXN0LmFjdHVhbCAmJgorCisJZWNobyAiaW4tcGFjazogNCIgPiBjb3VudDYuZXhwZWN0ZWQgJiYKKwlHSVRfRElSPXNoYWxsb3c2Ly5naXQgZ2l0IGNvdW50LW9iamVjdHMgLXYgfAorCQlncmVwICJeaW4tcGFjayIgPiBjb3VudDYuYWN0dWFsICYmCisJdGVzdF9jbXAgY291bnQ2LmV4cGVjdGVkIGNvdW50Ni5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhbGxvdyBjbG9uaW5nIHNpbmdsZSB0YWcnICcKKwlnaXQgY2xvbmUgLS1kZXB0aCAxIC0tYnJhbmNoPVRBR0IxICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3c3ICYmCisJY2F0ID50YWdsaXN0LmV4cGVjdGVkIDw8XEVPRiAmJgorVEFHQjEKK1RBR0IyCitFT0YKKwlHSVRfRElSPXNoYWxsb3c3Ly5naXQgZ2l0IHRhZyAtbCA+dGFnbGlzdC5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0YWdsaXN0LmV4cGVjdGVkIHRhZ2xpc3QuYWN0dWFsICYmCisKKwllY2hvICJpbi1wYWNrOiA0IiA+IGNvdW50Ny5leHBlY3RlZCAmJgorCUdJVF9ESVI9c2hhbGxvdzcvLmdpdCBnaXQgY291bnQtb2JqZWN0cyAtdiB8CisJCWdyZXAgIl5pbi1wYWNrIiA+IGNvdW50Ny5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBjb3VudDcuZXhwZWN0ZWQgY291bnQ3LmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IHdpdGggcGFja2VkIHJlZnMnICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IGNsb25lIC0tZGVwdGggMSAtLWJyYW5jaCBBICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3c4ICYmCisJZWNobyAiaW4tcGFjazogNCIgPiBjb3VudDguZXhwZWN0ZWQgJiYKKwlHSVRfRElSPXNoYWxsb3c4Ly5naXQgZ2l0IGNvdW50LW9iamVjdHMgLXYgfAorCQlncmVwICJeaW4tcGFjayIgPiBjb3VudDguYWN0dWFsICYmCisJdGVzdF9jbXAgY291bnQ4LmV4cGVjdGVkIGNvdW50OC5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5fdmFpbiBub3QgdHJpZ2dlcmVkIGJlZm9yZSBmaXJzdCBBQ0snICcKKwlybSAtcmYgbXlzZXJ2ZXIgbXljbGllbnQgJiYKKwlnaXQgaW5pdCBteXNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIG15c2VydmVyIGZvbyAmJgorCWdpdCBjbG9uZSAiZmlsZTovLyQocHdkKS9teXNlcnZlciIgbXljbGllbnQgJiYKKworCSMgTUFYX0lOX1ZBSU4gaXMgMjU2LiBCZWNhdXNlIG9mIGJhdGNoaW5nLCB0aGUgY2xpZW50IHdpbGwgc2VuZCA0OTYKKwkjICgxNiszMis2NCsxMjgrMjU2KSBjb21taXRzLCBub3QgMjU2LCBiZWZvcmUgZ2l2aW5nIHVwLiBTbyBjcmVhdGUgNDk2CisJIyBpcnJlbGV2YW50IGNvbW1pdHMuCisJdGVzdF9jb21taXRfYnVsayAtQyBteWNsaWVudCA0OTYgJiYKKworCSMgVGhlIG5ldyBjb21taXQgdGhhdCB0aGUgY2xpZW50IHdhbnRzIHRvIGZldGNoLgorCXRlc3RfY29tbWl0IC1DIG15c2VydmVyIGJhciAmJgorCisJZ2l0IC1DIG15Y2xpZW50IGZldGNoIC0tcHJvZ3Jlc3Mgb3JpZ2luIDI+bG9nICYmCisJdGVzdF9pMThuZ3JlcCAicmVtb3RlOiBUb3RhbCAzICIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luX3ZhaW4gcmVzZXR0ZWQgdXBvbiBBQ0snICcKKwlybSAtcmYgbXlzZXJ2ZXIgbXljbGllbnQgJiYKKwlnaXQgaW5pdCBteXNlcnZlciAmJgorCisJIyBMaW5rZWQgbGlzdCBvZiBjb21taXRzIG9uIG1hc3Rlci4gVGhlIGZpcnN0IGlzIGNvbW1vbjsgdGhlIHJlc3QgYXJlCisJIyBub3QuCisJdGVzdF9jb21taXQgLUMgbXlzZXJ2ZXIgZmlyc3RfbWFzdGVyX2NvbW1pdCAmJgorCWdpdCBjbG9uZSAiZmlsZTovLyQocHdkKS9teXNlcnZlciIgbXljbGllbnQgJiYKKwl0ZXN0X2NvbW1pdF9idWxrIC1DIG15Y2xpZW50IDI1NSAmJgorCisJIyBBbm90aGVyIGxpbmtlZCBsaXN0IG9mIGNvbW1pdHMgb24gYW5vdGhlcmJyYW5jaCB3aXRoIG5vIGNvbm5lY3Rpb24gdG8KKwkjIG1hc3Rlci4gVGhlIGZpcnN0IGlzIGNvbW1vbjsgdGhlIHJlc3QgYXJlIG5vdC4KKwlnaXQgLUMgbXlzZXJ2ZXIgY2hlY2tvdXQgLS1vcnBoYW4gYW5vdGhlcmJyYW5jaCAmJgorCXRlc3RfY29tbWl0IC1DIG15c2VydmVyIGZpcnN0X2Fub3RoZXJicmFuY2hfY29tbWl0ICYmCisJZ2l0IC1DIG15Y2xpZW50IGZldGNoIG9yaWdpbiBhbm90aGVyYnJhbmNoOnJlZnMvaGVhZHMvYW5vdGhlcmJyYW5jaCAmJgorCWdpdCAtQyBteWNsaWVudCBjaGVja291dCBhbm90aGVyYnJhbmNoICYmCisJdGVzdF9jb21taXRfYnVsayAtQyBteWNsaWVudCAyNTUgJiYKKworCSMgVGhlIG5ldyBjb21taXQgdGhhdCB0aGUgY2xpZW50IHdhbnRzIHRvIGZldGNoLgorCWdpdCAtQyBteXNlcnZlciBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBteXNlcnZlciB0b19mZXRjaCAmJgorCisJIyBUaGUgY2xpZW50IHdpbGwgc2VuZCAoYXMgImhhdmUicykgYWxsIDI1NiBjb21taXRzIGluIGFub3RoZXJicmFuY2gKKwkjIGZpcnN0LiBUaGUgMjU2dGggY29tbWl0IGlzIGNvbW1vbiBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHRoZSBzZXJ2ZXIsCisJIyBhbmQgc2hvdWxkIHJlc2V0IGluX3ZhaW4uIFRoaXMgYWxsb3dzIG5lZ290aWF0aW9uIHRvIGNvbnRpbnVlIHVudGlsCisJIyB0aGUgY2xpZW50IHJlcG9ydHMgdGhhdCBmaXJzdF9hbm90aGVyYnJhbmNoX2NvbW1pdCBpcyBjb21tb24uCisJZ2l0IC1DIG15Y2xpZW50IGZldGNoIC0tcHJvZ3Jlc3Mgb3JpZ2luIG1hc3RlciAyPmxvZyAmJgorCXRlc3RfaTE4bmdyZXAgIlRvdGFsIDMgIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggaW4gc2hhbGxvdyByZXBvIHVucmVhY2hhYmxlIHNoYWxsb3cgb2JqZWN0cycgJworCSgKKwkJZ2l0IGNsb25lIC0tYmFyZSAtLWJyYW5jaCBCIC0tc2luZ2xlLWJyYW5jaCAiZmlsZTovLyQocHdkKS8uIiBuby1yZWZsb2cgJiYKKwkJZ2l0IGNsb25lIC0tZGVwdGggMSAiZmlsZTovLyQocHdkKS9uby1yZWZsb2ciIHNoYWxsb3c5ICYmCisJCWNkIG5vLXJlZmxvZyAmJgorCQlnaXQgdGFnIC1kIFRBR0IxIFRBR0IyICYmCisJCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvQiBCfn4gJiYKKwkJZ2l0IGdjIC0tcHJ1bmU9bm93ICYmCisJCWNkIC4uL3NoYWxsb3c5ICYmCisJCWdpdCBmZXRjaCBvcmlnaW4gJiYKKwkJZ2l0IGZzY2sgLS1uby1kYW5nbGluZworCSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNyZWF0aW5nIG5ldyBzaGFsbG93IHJvb3QnICcKKwkoCisJCWdpdCBjbG9uZSAiZmlsZTovLyQocHdkKS8uIiBzaGFsbG93MTAgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGVtcHR5ICYmCisJCWNkIHNoYWxsb3cxMCAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aD0xIC0tcHJvZ3Jlc3MgMj5hY3R1YWwgJiYKKwkJIyBUaGlzIHNob3VsZCBmZXRjaCBvbmx5IHRoZSBlbXB0eSBjb21taXQsIG5vIHRyZWUgb3IKKwkJIyBibG9iIG9iamVjdHMKKwkJdGVzdF9pMThuZ3JlcCAicmVtb3RlOiBUb3RhbCAxIiBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3RzIGZvciB0aGUgLS1zdGRpbiBwYXJhbWV0ZXInICcKKwlmb3IgaGVhZCBpbiBDIEQgRSBGCisJZG8KKwkJYWRkICRoZWFkCisJZG9uZSAmJgorCWZvciBoZWFkIGluIEEgQiBDIEQgRSBGCisJZG8KKwkJZ2l0IHRhZyAkaGVhZCAkaGVhZAorCWRvbmUgJiYKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlyZWZzL2hlYWRzL0MKKwlyZWZzL2hlYWRzL0EKKwlyZWZzL2hlYWRzL0QKKwlyZWZzL3RhZ3MvQworCXJlZnMvaGVhZHMvQgorCXJlZnMvdGFncy9BCisJcmVmcy9oZWFkcy9FCisJcmVmcy90YWdzL0IKKwlyZWZzL3RhZ3MvRQorCXJlZnMvdGFncy9ECisJRU9GCisJc29ydCA8aW5wdXQgPmV4cGVjdCAmJgorCSgKKwkJZWNobyByZWZzL2hlYWRzL0UgJiYKKwkJZWNobyByZWZzL3RhZ3MvRSAmJgorCQljYXQgaW5wdXQKKwkpID5pbnB1dC5kdXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZmV0Y2ggcmVmcyBmcm9tIGNtZGxpbmUgdlsxMl0nICcKKwljcCAtciBjbGllbnQgY2xpZW50MCAmJgorCWNwIC1yIGNsaWVudCBjbGllbnQxICYmCisJY3AgLXIgY2xpZW50IGNsaWVudDIKKycKKworZm9yIHZlcnNpb24gaW4gJycgMCAxIDIKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicHJvdG9jb2wudmVyc2lvbj0kdmVyc2lvbiBmZXRjaCByZWZzIGZyb20gY21kbGluZSIgIgorCQkoCisJCQljZCBjbGllbnQkdmVyc2lvbiAmJgorCQkJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0kdmVyc2lvbiBnaXQgZmV0Y2gtcGFjayAtLW5vLXByb2dyZXNzIC4uIFwkKGNhdCAuLi9pbnB1dCkKKwkJKSA+b3V0cHV0ICYmCisJCWN1dCAtZCAnICcgLWYgMiA8b3V0cHV0IHwgc29ydCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkiCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHJlZnMgZnJvbSBzdGRpbicgJworCSgKKwkJY2QgY2xpZW50ICYmCisJCWdpdCBmZXRjaC1wYWNrIC0tc3RkaW4gLS1uby1wcm9ncmVzcyAuLiA8Li4vaW5wdXQKKwkpID5vdXRwdXQgJiYKKwljdXQgLWQgIiAiIC1mIDIgPG91dHB1dCB8IHNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbWl4ZWQgcmVmcyBmcm9tIGNtZGxpbmUgYW5kIHN0ZGluJyAnCisJKAorCQljZCBjbGllbnQgJiYKKwkJdGFpbCAtbiArNSAuLi9pbnB1dCB8CisJCWdpdCBmZXRjaC1wYWNrIC0tc3RkaW4gLS1uby1wcm9ncmVzcyAuLiAkKGhlYWQgLW4gNCAuLi9pbnB1dCkKKwkpID5vdXRwdXQgJiYKKwljdXQgLWQgIiAiIC1mIDIgPG91dHB1dCB8IHNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkdXBsaWNhdGUgcmVmcyBmcm9tIHN0ZGluJyAnCisJKAorCWNkIGNsaWVudCAmJgorCWdpdCBmZXRjaC1wYWNrIC0tc3RkaW4gLS1uby1wcm9ncmVzcyAuLiA8Li4vaW5wdXQuZHVwCisJKSA+b3V0cHV0ICYmCisJY3V0IC1kICIgIiAtZiAyIDxvdXRwdXQgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCB0ZXN0cyBvZiBtaXNzaW5nIHJlZmVyZW5jZScgJworCWNhdCA+ZXhwZWN0LWVycm9yIDw8LVxFT0YKKwllcnJvcjogbm8gc3VjaCByZW1vdGUgcmVmIHJlZnMvaGVhZHMveHl6enkKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBsb25lbHkgbWlzc2luZyByZWYnICcKKwkoCisJCWNkIGNsaWVudCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2gtcGFjayAtLW5vLXByb2dyZXNzIC4uIHJlZnMvaGVhZHMveHl6enkgMj4uLi9lcnJvci1tCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QtZXJyb3IgZXJyb3ItbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG1pc3NpbmcgcmVmIGFmdGVyIGV4aXN0aW5nJyAnCisJKAorCQljZCBjbGllbnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoLXBhY2sgLS1uby1wcm9ncmVzcyAuLiByZWZzL2hlYWRzL0EgcmVmcy9oZWFkcy94eXp6eSAyPi4uL2Vycm9yLWVtCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QtZXJyb3IgZXJyb3ItZW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBtaXNzaW5nIHJlZiBiZWZvcmUgZXhpc3RpbmcnICcKKwkoCisJCWNkIGNsaWVudCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2gtcGFjayAtLW5vLXByb2dyZXNzIC4uIHJlZnMvaGVhZHMveHl6enkgcmVmcy9oZWFkcy9BIDI+Li4vZXJyb3ItbWUKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC1lcnJvciBlcnJvci1tZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tYWxsLCAtLWRlcHRoLCBhbmQgZXhwbGljaXQgaGVhZCcgJworCSgKKwkJY2QgY2xpZW50ICYmCisJCWdpdCBmZXRjaC1wYWNrIC0tbm8tcHJvZ3Jlc3MgLS1hbGwgLS1kZXB0aD0xIC4uIHJlZnMvaGVhZHMvQQorCSkgPm91dC1hZGggMj5lcnJvci1hZGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLWFsbCwgLS1kZXB0aCwgYW5kIGV4cGxpY2l0IHRhZycgJworCWdpdCB0YWcgT0xEVEFHIHJlZnMvaGVhZHMvQn41ICYmCisJKAorCQljZCBjbGllbnQgJiYKKwkJZ2l0IGZldGNoLXBhY2sgLS1uby1wcm9ncmVzcyAtLWFsbCAtLWRlcHRoPTEgLi4gcmVmcy90YWdzL09MRFRBRworCSkgPm91dC1hZHQgMj5lcnJvci1hZHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLWFsbCB3aXRoIHRhZyB0byBub24tdGlwJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG5vbi10aXAgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdGlwICYmCisJZ2l0IHRhZyAtbSAiYW5ub3RhdGVkIiBub24tdGlwIEhFQUReICYmCisJKAorCQljZCBjbGllbnQgJiYKKwkJZ2l0IGZldGNoLXBhY2sgLS1hbGwgLi4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1hbGwgd3J0IHRhZyB0byBub24tY29tbWl0cycgJworCSMgY3JlYXRlIHRhZy10by17YmxvYix0cmVlLGNvbW1pdCx0YWd9LCBtYWtpbmcgc3VyZSBhbGwgdGFnZ2VkIG9iamVjdHMKKwkjIGFyZSByZWFjaGFibGUgb25seSB2aWEgY3JlYXRlZCB0YWcgcmVmZXJlbmNlcy4KKwlibG9iPSQoZWNobyAiaGVsbG8gYmxvYiIgfCBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyAtLXN0ZGluKSAmJgorCWdpdCB0YWcgLWEgLW0gInRhZyAtPiBibG9iIiB0YWctdG8tYmxvYiAkYmxvYiAmJgorCisJdHJlZT0kKHByaW50ZiAiMTAwNjQ0IGJsb2IgJGJsb2JcdGZpbGUiIHwgZ2l0IG1rdHJlZSkgJiYKKwlnaXQgdGFnIC1hIC1tICJ0YWcgLT4gdHJlZSIgdGFnLXRvLXRyZWUgJHRyZWUgJiYKKworCXRyZWUyPSQocHJpbnRmICIxMDA2NDQgYmxvYiAkYmxvYlx0ZmlsZTIiIHwgZ2l0IG1rdHJlZSkgJiYKKwljb21taXQ9JChnaXQgY29tbWl0LXRyZWUgLW0gImhlbGxvIGNvbW1pdCIgJHRyZWUpICYmCisJZ2l0IHRhZyAtYSAtbSAidGFnIC0+IGNvbW1pdCIgdGFnLXRvLWNvbW1pdCAkY29tbWl0ICYmCisKKwlibG9iMj0kKGVjaG8gImhlbGxvIGJsb2IyIiB8IGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IC0tc3RkaW4pICYmCisJdGFnPSQoZ2l0IG1rdGFnIDw8LUVPRgorCQlvYmplY3QgJGJsb2IyCisJCXR5cGUgYmxvYgorCQl0YWcgdGFnLXRvLWJsb2IyCisJCXRhZ2dlciBhdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMCArMDAwMAorCisJCWhlbGxvIHRhZworCUVPRgorCSkgJiYKKwlnaXQgdGFnIC1hIC1tICJ0YWcgLT4gdGFnIiB0YWctdG8tdGFnICR0YWcgJiYKKworCSMgYGZldGNoLXBhY2sgLS1hbGxgIHNob3VsZCBzdWNjZWVkIGZldGNoaW5nIGFsbCB0aG9zZSBvYmplY3RzLgorCW1rZGlyIGZldGNoYWxsICYmCisJKAorCQljZCBmZXRjaGFsbCAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgZmV0Y2gtcGFjayAtLWFsbCAuLiAmJgorCQlnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYiA+L2Rldi9udWxsICYmCisJCWdpdCBjYXQtZmlsZSB0cmVlICR0cmVlID4vZGV2L251bGwgJiYKKwkJZ2l0IGNhdC1maWxlIGNvbW1pdCAkY29tbWl0ID4vZGV2L251bGwgJiYKKwkJZ2l0IGNhdC1maWxlIHRhZyAkdGFnID4vZGV2L251bGwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYWxsb3cgZmV0Y2ggd2l0aCB0YWdzIGRvZXMgbm90IGJyZWFrIHRoZSByZXBvc2l0b3J5JyAnCisJbWtkaXIgcmVwbzEgJiYKKwkoCisJCWNkIHJlcG8xICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3RfY29tbWl0IDEgJiYKKwkJdGVzdF9jb21taXQgMiAmJgorCQl0ZXN0X2NvbW1pdCAzICYmCisJCW1rZGlyIHJlcG8yICYmCisJCWNkIHJlcG8yICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBmZXRjaCAtLWRlcHRoPTIgLi4vLmdpdCBtYXN0ZXI6YnJhbmNoICYmCisJCWdpdCBmc2NrCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaC1wYWNrIGNhbiBmZXRjaCBhIHJhdyBzaGExJyAnCisJZ2l0IGluaXQgaGlkZGVuICYmCisJKAorCQljZCBoaWRkZW4gJiYKKwkJdGVzdF9jb21taXQgMSAmJgorCQl0ZXN0X2NvbW1pdCAyICYmCisJCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGlkZGVuL29uZSBIRUFEXiAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLmhpZGVyZWZzIHJlZnMvaGlkZGVuICYmCisJCWdpdCBjb25maWcgdXBsb2FkcGFjay5hbGxvd3RpcHNoYTFpbndhbnQgdHJ1ZQorCSkgJiYKKwlnaXQgZmV0Y2gtcGFjayBoaWRkZW4gJChnaXQgLUMgaGlkZGVuIHJldi1wYXJzZSByZWZzL2hpZGRlbi9vbmUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoLXBhY2sgY2FuIGZldGNoIGEgcmF3IHNoYTEgdGhhdCBpcyBhZHZlcnRpc2VkIGFzIGEgcmVmJyAnCisJcm0gLXJmIHNlcnZlciBjbGllbnQgJiYKKwlnaXQgaW5pdCBzZXJ2ZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgMSAmJgorCisJZ2l0IGluaXQgY2xpZW50ICYmCisJZ2l0IC1DIGNsaWVudCBmZXRjaC1wYWNrIC4uL3NlcnZlciBcCisJCSQoZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoLXBhY2sgY2FuIGZldGNoIGEgcmF3IHNoYTEgb3ZlcmxhcHBpbmcgYSBuYW1lZCByZWYnICcKKwlybSAtcmYgc2VydmVyIGNsaWVudCAmJgorCWdpdCBpbml0IHNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciAxICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIDIgJiYKKworCWdpdCBpbml0IGNsaWVudCAmJgorCWdpdCAtQyBjbGllbnQgZmV0Y2gtcGFjayAuLi9zZXJ2ZXIgXAorCQkkKGdpdCAtQyBzZXJ2ZXIgcmV2LXBhcnNlIHJlZnMvdGFncy8xKSByZWZzL3RhZ3MvMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaC1wYWNrIGNhbm5vdCBmZXRjaCBhIHJhdyBzaGExIHRoYXQgaXMgbm90IGFkdmVydGlzZWQgYXMgYSByZWYnICcKKwlybSAtcmYgc2VydmVyICYmCisKKwlnaXQgaW5pdCBzZXJ2ZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgNSAmJgorCWdpdCAtQyBzZXJ2ZXIgdGFnIC1kIDUgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgNiAmJgorCisJZ2l0IGluaXQgY2xpZW50ICYmCisJIyBTb21lIHByb3RvY29sIHZlcnNpb25zIChlLmcuIDIpIHN1cHBvcnQgZmV0Y2hpbmcKKwkjIHVuYWR2ZXJ0aXNlZCBvYmplY3RzLCBzbyByZXN0cmljdCB0aGlzIHRlc3QgdG8gdjAuCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBnaXQgLUMgY2xpZW50IGZldGNoLXBhY2sgLi4vc2VydmVyIFwKKwkJJChnaXQgLUMgc2VydmVyIHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3Rlcl4pIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiU2VydmVyIGRvZXMgbm90IGFsbG93IHJlcXVlc3QgZm9yIHVuYWR2ZXJ0aXNlZCBvYmplY3QiIGVycgorJworCitjaGVja19wcm90X3BhdGggKCkgeworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJRGlhZzogdXJsPSQxCisJRGlhZzogcHJvdG9jb2w9JDIKKwlEaWFnOiBwYXRoPSQzCisJRU9GCisJZ2l0IGZldGNoLXBhY2sgLS1kaWFnLXVybCAiJDEiIHwgZ3JlcCAtdiBob3N0YW5kcG9ydD0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorfQorCitjaGVja19wcm90X2hvc3RfcG9ydF9wYXRoICgpIHsKKwljYXNlICIkMiIgaW4KKwkJKnNzaCopCisJCXBwPXNzaAorCQl1YWg9dXNlcmFuZGhvc3QKKwkJZWhvc3Q9JChlY2hvICQzIHwgdHIgLWQgIltdIikKKwkJZGlhZ3BvcnQ9IkRpYWc6IHBvcnQ9JDQiCisJCTs7CisJCSopCisJCXBwPSRwCisJCXVhaD1ob3N0YW5kcG9ydAorCQllaG9zdD0kKGVjaG8gJDMkNCB8IHNlZCAtZSAicy8yMiQvOjIyLyIgLWUgInMvTk9ORS8vIikKKwkJZGlhZ3BvcnQ9IiIKKwkJOzsKKwllc2FjCisJY2F0ID5leHAgPDwtRU9GICYmCisJRGlhZzogdXJsPSQxCisJRGlhZzogcHJvdG9jb2w9JHBwCisJRGlhZzogJHVhaD0kZWhvc3QKKwkkZGlhZ3BvcnQKKwlEaWFnOiBwYXRoPSQ1CisJRU9GCisJZ3JlcCAtdiAiXiQiIGV4cCA+ZXhwZWN0ZWQKKwlnaXQgZmV0Y2gtcGFjayAtLWRpYWctdXJsICIkMSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorfQorCitmb3IgciBpbiByZXBvIHJlOnBvIHJlL3BvCitkbworCSMgZ2l0IG9yIHNzaCB3aXRoIHNjaGVtZQorCWZvciBwIGluICJzc2grZ2l0IiAiZ2l0K3NzaCIgZ2l0IHNzaAorCWRvCisJCWZvciBoIGluIGhvc3QgdXNlckBob3N0IHVzZXJAWzo6MV0gdXNlckA6OjEKKwkJZG8KKwkJCWZvciBjIGluICIiIDoKKwkJCWRvCisJCQkJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2gtcGFjayAtLWRpYWctdXJsICRwOi8vJGgkYy8kciIgJworCQkJCQljaGVja19wcm90X2hvc3RfcG9ydF9wYXRoICRwOi8vJGgvJHIgJHAgIiRoIiBOT05FICIvJHIiCisJCQkJJworCQkJCSMgIi9+IiAtPiAifiIgY29udmVyc2lvbgorCQkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoLXBhY2sgLS1kaWFnLXVybCAkcDovLyRoJGMvfiRyIiAnCisJCQkJCWNoZWNrX3Byb3RfaG9zdF9wb3J0X3BhdGggJHA6Ly8kaC9+JHIgJHAgIiRoIiBOT05FICJ+JHIiCisJCQkJJworCQkJZG9uZQorCQlkb25lCisJCWZvciBoIGluIGhvc3QgVXNlckBob3N0IFVzZXJAWzo6MV0KKwkJZG8KKwkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoLXBhY2sgLS1kaWFnLXVybCAkcDovLyRoOjIyLyRyIiAnCisJCQkJY2hlY2tfcHJvdF9ob3N0X3BvcnRfcGF0aCAkcDovLyRoOjIyLyRyICRwICIkaCIgMjIgIi8kciIKKwkJCScKKwkJZG9uZQorCWRvbmUKKwkjIGZpbGUgd2l0aCBzY2hlbWUKKwlmb3IgcCBpbiBmaWxlCisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgImZldGNoLXBhY2sgLS1kaWFnLXVybCAkcDovLyRoLyRyIiAnCisJCQljaGVja19wcm90X3BhdGggJHA6Ly8kaC8kciAkcCAiLyRyIgorCQknCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgImZldGNoLXBhY2sgLS1kaWFnLXVybCAkcDovLyRoLyRyIiAnCisJCQljaGVja19wcm90X3BhdGggJHA6Ly8kaC8kciAkcCAiLy8kaC8kciIKKwkJJworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICJmZXRjaC1wYWNrIC0tZGlhZy11cmwgJHA6Ly8vJHIiICcKKwkJCWNoZWNrX3Byb3RfcGF0aCAkcDovLy8kciAkcCAiLyRyIgorCQknCisJCSMgTm8gIi9+IiAtPiAifiIgY29udmVyc2lvbiBmb3IgZmlsZQorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAiZmV0Y2gtcGFjayAtLWRpYWctdXJsICRwOi8vJGgvfiRyIiAnCisJCQljaGVja19wcm90X3BhdGggJHA6Ly8kaC9+JHIgJHAgIi9+JHIiCisJCScKKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBNSU5HVyAiZmV0Y2gtcGFjayAtLWRpYWctdXJsICRwOi8vJGgvfiRyIiAnCisJCQljaGVja19wcm90X3BhdGggJHA6Ly8kaC9+JHIgJHAgIi8vJGgvfiRyIgorCQknCisJZG9uZQorCSMgZmlsZSB3aXRob3V0IHNjaGVtZQorCWZvciBoIGluIG5vaG9zdCBub2hvc3Q6MTIgWzo6MV0gWzo6MV06MjMgWyBbOmFhCisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2gtcGFjayAtLWRpYWctdXJsIC4vJGg6JHIiICcKKwkJCWNoZWNrX3Byb3RfcGF0aCAuLyRoOiRyICRwICIuLyRoOiRyIgorCQknCisJCSMgTm8gIi9+IiAtPiAifiIgY29udmVyc2lvbiBmb3IgZmlsZQorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaC1wYWNrIC0tZGlhZy11cmwgLi8kcDokaC9+JHIiICcKKwkJY2hlY2tfcHJvdF9wYXRoIC4vJHA6JGgvfiRyICRwICIuLyRwOiRoL34kciIKKwkJJworCWRvbmUKKwkjc3NoIHdpdGhvdXQgc2NoZW1lCisJcD1zc2gKKwlmb3IgaCBpbiBob3N0IFs6OjFdCisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2gtcGFjayAtLWRpYWctdXJsICRoOiRyIiAnCisJCQljaGVja19wcm90X2hvc3RfcG9ydF9wYXRoICRoOiRyICRwICIkaCIgTk9ORSAiJHIiCisJCScKKwkJIyBEbyAiL34iIC0+ICJ+IiBjb252ZXJzaW9uCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoLXBhY2sgLS1kaWFnLXVybCAkaDovfiRyIiAnCisJCQljaGVja19wcm90X2hvc3RfcG9ydF9wYXRoICRoOi9+JHIgJHAgIiRoIiBOT05FICJ+JHIiCisJCScKKwlkb25lCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ2ZldGNoLXBhY2sgLS1kaWFnLXVybCBmaWxlOi8vYzovcmVwbycgJworCWNoZWNrX3Byb3RfcGF0aCBmaWxlOi8vYzovcmVwbyBmaWxlIGM6L3JlcG8KKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ2ZldGNoLXBhY2sgLS1kaWFnLXVybCBjOnJlcG8nICcKKwljaGVja19wcm90X3BhdGggYzpyZXBvIGZpbGUgYzpyZXBvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgc2luY2UgLi4uJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzaGFsbG93LXNpbmNlICYmCisJKAorCWNkIHNoYWxsb3ctc2luY2UgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjEwMDAwMDAwMCArMDcwMCIgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG9uZSAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwMDAwMDAwICswNzAwIiBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdHdvICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIzMDAwMDAwMDAgKzA3MDAiIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0aHJlZSAmJgorCWdpdCBjbG9uZSAtLXNoYWxsb3ctc2luY2UgIjMwMDAwMDAwMCArMDcwMCIgImZpbGU6Ly8kKHB3ZCkvLiIgLi4vc2hhbGxvdzExICYmCisJZ2l0IC1DIC4uL3NoYWxsb3cxMSBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyBIRUFEID5hY3R1YWwgJiYKKwllY2hvIHRocmVlID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggc2hhbGxvdyBzaW5jZSAuLi4nICcKKwlnaXQgLUMgc2hhbGxvdzExIGZldGNoIC0tc2hhbGxvdy1zaW5jZSAiMjAwMDAwMDAwICswNzAwIiBvcmlnaW4gJiYKKwlnaXQgLUMgc2hhbGxvdzExIGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIG9yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCXRocmVlCisJdHdvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgc2luY2Ugc2VsZWN0cyBubyBjb21taXRzJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzaGFsbG93LXNpbmNlLXRoZS1mdXR1cmUgJiYKKwkoCisJY2Qgc2hhbGxvdy1zaW5jZS10aGUtZnV0dXJlICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIxMDAwMDAwMDAgKzA3MDAiIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBvbmUgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDAwMDAwMCArMDcwMCIgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHR3byAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMzAwMDAwMDAwICswNzAwIiBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdGhyZWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1zaGFsbG93LXNpbmNlICI5MDAwMDAwMDAgKzA3MDAiICJmaWxlOi8vJChwd2QpLy4iIC4uL3NoYWxsb3cxMTEKKwkpCisnCisKKyMgQSBmZXcgc3VidGxlIHRoaW5ncyBhYm91dCB0aGUgcmVxdWVzdCBpbiB0aGlzIHRlc3Q6CisjCisjICAtIHRoZSBzZXJ2ZXIgbXVzdCBoYXZlIGNvbW1pdC1ncmFwaHMgcHJlc2VudCBhbmQgZW5hYmxlZAorIworIyAgLSB0aGUgaGlzdG9yeSBpcyBzdWNoIHRoYXQgb3VyIHdhbnQvaGF2ZSBzaGFyZSBhIGNvbW1vbiBhbmNlc3RvciAoImJhc2UiCisjICAgIGhlcmUpCisjCisjICAtIHdlIHNlbmQgb25seSBhIHNpbmdsZSBoYXZlLCB3aGljaCBpcyBmZXdlciB0aGFuIGEgbm9ybWFsIGNsaWVudCB3b3VsZAorIyAgICBzZW5kLiBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBkb24ndCBwYXJzZSAiYmFzZSIgdXAgZnJvbnQgd2l0aAorIyAgICBwYXJzZV9vYmplY3QoKSwgYnV0IHJhdGhlciB0cmF2ZXJzZSB0byBpdCBhcyBhIHBhcmVudCB3aGlsZSBkZWNpZGluZyBpZiB3ZQorIyAgICBjYW4gc3RvcCB0aGUgImhhdmUiIG5lZ290aWF0aW9uLCBhbmQgY2FsbCBwYXJzZV9jb21taXQoKS4gVGhlIGZvcm1lcgorIyAgICBzZWVzIHRoZSBhY3R1YWwgb2JqZWN0IGRhdGEgYW5kIHNvIGFsd2F5cyBsb2FkcyB0aGUgdGhyZWUgb2lkLCB3aGVyZWFzIHRoZQorIyAgICBsYXR0ZXIgd2lsbCB0cnkgdG8gbG9hZCBpdCBsYXppbHkuCisjCisjICAtIHdlIG11c3QgdXNlIHByb3RvY29sIHYyLCBiZWNhdXNlIGl0IGhhbmRsZXMgdGhlICJoYXZlIiBuZWdvdGlhdGlvbiBiZWZvcmUKKyMgICAgcHJvY2Vzc2luZyB0aGUgc2hhbGxvdyBkaXJlY3RpdmVzCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFsbG93IHNpbmNlIHdpdGggY29tbWl0IGdyYXBoIGFuZCBhbHJlYWR5LXNlZW4gY29tbWl0JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzaGFsbG93LXNpbmNlLWdyYXBoICYmCisJKAorCWNkIHNoYWxsb3ctc2luY2UtZ3JhcGggJiYKKwl0ZXN0X2NvbW1pdCBiYXNlICYmCisJdGVzdF9jb21taXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyIEhFQUReICYmCisJdGVzdF9jb21taXQgb3RoZXIgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmNvbW1pdEdyYXBoIHRydWUgJiYKKworCUdJVF9QUk9UT0NPTD12ZXJzaW9uPTIgZ2l0IHVwbG9hZC1wYWNrIC4gPDwtRU9GID4vZGV2L251bGwKKwkwMDEyY29tbWFuZD1mZXRjaAorCTAwMDEwMDEzZGVlcGVuLXNpbmNlIDEKKwkwMDMyd2FudCAkKGdpdCByZXYtcGFyc2Ugb3RoZXIpCisJMDAzMmhhdmUgJChnaXQgcmV2LXBhcnNlIG1hc3RlcikKKwkwMDAwCisJRU9GCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFsbG93IGNsb25lIGV4Y2x1ZGUgdGFnIHR3bycgJworCXRlc3RfY3JlYXRlX3JlcG8gc2hhbGxvdy1leGNsdWRlICYmCisJKAorCWNkIHNoYWxsb3ctZXhjbHVkZSAmJgorCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmCisJZ2l0IGNsb25lIC0tc2hhbGxvdy1leGNsdWRlIHR3byAiZmlsZTovLyQocHdkKS8uIiAuLi9zaGFsbG93MTIgJiYKKwlnaXQgLUMgLi4vc2hhbGxvdzEyIGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIEhFQUQgPmFjdHVhbCAmJgorCWVjaG8gdGhyZWUgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBleGNsdWRlIHRhZyBvbmUnICcKKwlnaXQgLUMgc2hhbGxvdzEyIGZldGNoIC0tc2hhbGxvdy1leGNsdWRlIG9uZSBvcmlnaW4gJiYKKwlnaXQgLUMgc2hhbGxvdzEyIGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIG9yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgdGhyZWUgdHdvID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyBkZWVwZW4nICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNoYWxsb3ctZGVlcGVuICYmCisJKAorCWNkIHNoYWxsb3ctZGVlcGVuICYmCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwlnaXQgY2xvbmUgLS1kZXB0aCAxICJmaWxlOi8vJChwd2QpLy4iIGRlZXBlbiAmJgorCXRlc3RfY29tbWl0IGZvdXIgJiYKKwlnaXQgLUMgZGVlcGVuIGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIG1hc3RlciA+YWN0dWFsICYmCisJZWNobyB0aHJlZSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgLUMgZGVlcGVuIGZldGNoIC0tZGVlcGVuPTEgJiYKKwlnaXQgLUMgZGVlcGVuIGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIG9yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWZvdXIKKwl0aHJlZQorCXR3bworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIHJlZiBhZHZlcnRpc2VtZW50IHRvIHBydW5lICJoYXZlIiBsaW5lcyBzZW50JyAnCisJcm0gLXJmIHNlcnZlciBjbGllbnQgJiYKKwlnaXQgaW5pdCBzZXJ2ZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgYm90aF9oYXZlXzEgJiYKKwlnaXQgLUMgc2VydmVyIHRhZyAtZCBib3RoX2hhdmVfMSAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBib3RoX2hhdmVfMiAmJgorCisJZ2l0IGNsb25lIHNlcnZlciBjbGllbnQgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgc2VydmVyX2hhcyAmJgorCXRlc3RfY29tbWl0IC1DIGNsaWVudCBjbGllbnRfaGFzICYmCisKKwkjIEluIGJvdGggcHJvdG9jb2wgdjAgYW5kIHYyLCBlbnN1cmUgdGhhdCB0aGUgcGFyZW50IG9mIGJvdGhfaGF2ZV8yIGlzCisJIyBub3Qgc2VudCBhcyBhICJoYXZlIiBsaW5lLiBUaGUgY2xpZW50IHNob3VsZCBrbm93IHRoYXQgdGhlIHNlcnZlciBoYXMKKwkjIGJvdGhfaGF2ZV8yLCBzbyBpdCBvbmx5IG5lZWRzIHRvIGluZm9ybSB0aGUgc2VydmVyIHRoYXQgaXQgaGFzCisJIyBib3RoX2hhdmVfMiwgYW5kIHRoZSBzZXJ2ZXIgY2FuIGluZmVyIHRoZSByZXN0LgorCisJcm0gLWYgdHJhY2UgJiYKKwljcCAtciBjbGllbnQgY2xpZW50djAgJiYKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnR2MCBcCisJCWZldGNoIG9yaWdpbiBzZXJ2ZXJfaGFzIGJvdGhfaGF2ZV8yICYmCisJZ3JlcCAiaGF2ZSAkKGdpdCAtQyBjbGllbnQgcmV2LXBhcnNlIGNsaWVudF9oYXMpIiB0cmFjZSAmJgorCWdyZXAgImhhdmUgJChnaXQgLUMgY2xpZW50IHJldi1wYXJzZSBib3RoX2hhdmVfMikiIHRyYWNlICYmCisJISBncmVwICJoYXZlICQoZ2l0IC1DIGNsaWVudCByZXYtcGFyc2UgYm90aF9oYXZlXzJeKSIgdHJhY2UgJiYKKworCXJtIC1mIHRyYWNlICYmCisJY3AgLXIgY2xpZW50IGNsaWVudHYyICYmCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLUMgY2xpZW50djIgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJZmV0Y2ggb3JpZ2luIHNlcnZlcl9oYXMgYm90aF9oYXZlXzIgJiYKKwlncmVwICJoYXZlICQoZ2l0IC1DIGNsaWVudCByZXYtcGFyc2UgY2xpZW50X2hhcykiIHRyYWNlICYmCisJZ3JlcCAiaGF2ZSAkKGdpdCAtQyBjbGllbnQgcmV2LXBhcnNlIGJvdGhfaGF2ZV8yKSIgdHJhY2UgJiYKKwkhIGdyZXAgImhhdmUgJChnaXQgLUMgY2xpZW50IHJldi1wYXJzZSBib3RoX2hhdmVfMl4pIiB0cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWx0ZXJpbmcgYnkgc2l6ZScgJworCXJtIC1yZiBzZXJ2ZXIgY2xpZW50ICYmCisJdGVzdF9jcmVhdGVfcmVwbyBzZXJ2ZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgb25lICYmCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dmaWx0ZXIgMSAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyBjbGllbnQgJiYKKwlnaXQgLUMgY2xpZW50IGZldGNoLXBhY2sgLS1maWx0ZXI9YmxvYjpsaW1pdD0wIC4uL3NlcnZlciBIRUFEICYmCisKKwkjIEVuc3VyZSB0aGF0IG9iamVjdCBpcyBub3QgaW5hZHZlcnRlbnRseSBmZXRjaGVkCisJY29tbWl0PSQoZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgSEVBRCkgJiYKKwlibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IHNlcnZlci9vbmUudCkgJiYKKwlnaXQgLUMgY2xpZW50IHJldi1saXN0IC0tb2JqZWN0cyAtLW1pc3Npbmc9YWxsb3ctYW55ICIkY29tbWl0IiA+b2lkcyAmJgorCSEgZ3JlcCAiJGJsb2IiIG9pZHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsdGVyaW5nIGJ5IHNpemUgaGFzIG5vIGVmZmVjdCBpZiBzdXBwb3J0IGZvciBpdCBpcyBub3QgYWR2ZXJ0aXNlZCcgJworCXJtIC1yZiBzZXJ2ZXIgY2xpZW50ICYmCisJdGVzdF9jcmVhdGVfcmVwbyBzZXJ2ZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgb25lICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIGNsaWVudCAmJgorCWdpdCAtQyBjbGllbnQgZmV0Y2gtcGFjayAtLWZpbHRlcj1ibG9iOmxpbWl0PTAgLi4vc2VydmVyIEhFQUQgMj4gZXJyICYmCisKKwkjIEVuc3VyZSB0aGF0IG9iamVjdCBpcyBmZXRjaGVkCisJY29tbWl0PSQoZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgSEVBRCkgJiYKKwlibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IHNlcnZlci9vbmUudCkgJiYKKwlnaXQgLUMgY2xpZW50IHJldi1saXN0IC0tb2JqZWN0cyAtLW1pc3Npbmc9YWxsb3ctYW55ICIkY29tbWl0IiA+b2lkcyAmJgorCWdyZXAgIiRibG9iIiBvaWRzICYmCisKKwl0ZXN0X2kxOG5ncmVwICJmaWx0ZXJpbmcgbm90IHJlY29nbml6ZWQgYnkgc2VydmVyIiBlcnIKKycKKworZmV0Y2hfZmlsdGVyX2Jsb2JfbGltaXRfemVybyAoKSB7CisJU0VSVkVSPSIkMSIKKwlVUkw9IiQyIgorCisJcm0gLXJmICIkU0VSVkVSIiBjbGllbnQgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkU0VSVkVSIiAmJgorCXRlc3RfY29tbWl0IC1DICIkU0VSVkVSIiBvbmUgJiYKKwl0ZXN0X2NvbmZpZyAtQyAiJFNFUlZFUiIgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisKKwlnaXQgY2xvbmUgIiRVUkwiIGNsaWVudCAmJgorCXRlc3RfY29uZmlnIC1DIGNsaWVudCBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSBvcmlnaW4gJiYKKworCXRlc3RfY29tbWl0IC1DICIkU0VSVkVSIiB0d28gJiYKKworCWdpdCAtQyBjbGllbnQgZmV0Y2ggLS1maWx0ZXI9YmxvYjpsaW1pdD0wIG9yaWdpbiBIRUFEOnNvbWV3aGVyZSAmJgorCisJIyBFbnN1cmUgdGhhdCBjb21taXQgaXMgZmV0Y2hlZCwgYnV0IGJsb2IgaXMgbm90CisJY29tbWl0PSQoZ2l0IC1DICIkU0VSVkVSIiByZXYtcGFyc2UgdHdvKSAmJgorCWJsb2I9JChnaXQgaGFzaC1vYmplY3Qgc2VydmVyL3R3by50KSAmJgorCWdpdCAtQyBjbGllbnQgcmV2LWxpc3QgLS1vYmplY3RzIC0tbWlzc2luZz1hbGxvdy1hbnkgIiRjb21taXQiID5vaWRzICYmCisJZ3JlcCAiJGNvbW1pdCIgb2lkcyAmJgorCSEgZ3JlcCAiJGJsb2IiIG9pZHMKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCAtLWZpbHRlcj1ibG9iOmxpbWl0PTAnICcKKwlmZXRjaF9maWx0ZXJfYmxvYl9saW1pdF96ZXJvIHNlcnZlciBzZXJ2ZXIKKycKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggLS1maWx0ZXI9YmxvYjpsaW1pdD0wIGFuZCBIVFRQJyAnCisJZmV0Y2hfZmlsdGVyX2Jsb2JfbGltaXRfemVybyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9zZXJ2ZXIiICIkSFRUUERfVVJML3NtYXJ0L3NlcnZlciIKKycKKworIyBETyBOT1QgYWRkIG5vbi1odHRwZC1zcGVjaWZpYyB0ZXN0cyBoZXJlLCBiZWNhdXNlIHRoZSBsYXN0IHBhcnQgb2YgdGhpcworIyB0ZXN0IHNjcmlwdCBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gaHR0cGQgaXMgYXZhaWxhYmxlIGFuZCBlbmFibGVkLgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MDEtZmV0Y2gtcHVzaC1hbHRlcm5hdGVzLnNoIGIvdC90NTUwMS1mZXRjaC1wdXNoLWFsdGVybmF0ZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWJjNTdhYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MDEtZmV0Y2gtcHVzaC1hbHRlcm5hdGVzLnNoCkBAIC0wLDAgKzEsNjYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaC9wdXNoIGludm9sdmluZyBhbHRlcm5hdGVzJworLiAuL3Rlc3QtbGliLnNoCisKK2NvdW50X29iamVjdHMgKCkgeworCWxvb3NlPTAgaW5wYWNrPTAKKwlldmFsICIkKAorCQlnaXQgY291bnQtb2JqZWN0cyAtdiB8CisJCXNlZCAtbiAtZSAncy9eY291bnQ6IFwoLipcKS9sb29zZT1cMS9wJyBcCisJCSAgICAtZSAncy9eaW4tcGFjazogXCguKlwpL2lucGFjaz1cMS9wJworCSkiICYmCisJZWNobyAkKCggJGxvb3NlICsgJGlucGFjayApKQorfQorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCSgKKwkJZ2l0IGluaXQgb3JpZ2luYWwgJiYKKwkJY2Qgb3JpZ2luYWwgJiYKKwkJaT0wICYmCisJCXdoaWxlIHRlc3QgJGkgLWxlIDEwMAorCQlkbworCQkJZWNobyAiJGkiID5jb3VudCAmJgorCQkJZ2l0IGFkZCBjb3VudCAmJgorCQkJZ2l0IGNvbW1pdCAtbSAiJGkiIHx8IGV4aXQKKwkJCWk9JCgoJGkgKyAxKSkKKwkJZG9uZQorCSkgJiYKKwkoCisJCWdpdCBjbG9uZSAtLXJlZmVyZW5jZT1vcmlnaW5hbCAiZmlsZTovLyQocHdkKS9vcmlnaW5hbCIgb25lICYmCisJCWNkIG9uZSAmJgorCQllY2hvIFogPmNvdW50ICYmCisJCWdpdCBhZGQgY291bnQgJiYKKwkJZ2l0IGNvbW1pdCAtbSBaICYmCisJCWNvdW50X29iamVjdHMgPi4uL29uZS5jb3VudAorCSkgJiYKKwlBPSQocHdkKS9vcmlnaW5hbC8uZ2l0L29iamVjdHMgJiYKKwlnaXQgaW5pdCByZWNlaXZlciAmJgorCWVjaG8gIiRBIiA+cmVjZWl2ZXIvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCWdpdCBpbml0IGZldGNoZXIgJiYKKwllY2hvICIkQSIgPmZldGNoZXIvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIGludG8gYSByZXBvc2l0b3J5IHdpdGggdGhlIHNhbWUgYWx0ZXJuYXRlJyAnCisJKAorCQljZCBvbmUgJiYKKwkJZ2l0IHB1c2ggLi4vcmVjZWl2ZXIgbWFzdGVyOnJlZnMvaGVhZHMvaXQKKwkpICYmCisJKAorCQljZCByZWNlaXZlciAmJgorCQljb3VudF9vYmplY3RzID4uLi9yZWNlaXZlci5jb3VudAorCSkgJiYKKwl0ZXN0X2NtcCBvbmUuY291bnQgcmVjZWl2ZXIuY291bnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2hpbmcgZnJvbSBhIHJlcG9zaXRvcnkgd2l0aCB0aGUgc2FtZSBhbHRlcm5hdGUnICcKKwkoCisJCWNkIGZldGNoZXIgJiYKKwkJZ2l0IGZldGNoIC4uL29uZSBtYXN0ZXI6cmVmcy9oZWFkcy9pdCAmJgorCQljb3VudF9vYmplY3RzID4uLi9mZXRjaGVyLmNvdW50CisJKSAmJgorCXRlc3RfY21wIG9uZS5jb3VudCBmZXRjaGVyLmNvdW50CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwMi1xdWlja2ZldGNoLnNoIGIvdC90NTUwMi1xdWlja2ZldGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdhNDZjYmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTAyLXF1aWNrZmV0Y2guc2gKQEAgLTAsMCArMSwxNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHF1aWNrZmV0Y2ggZnJvbSBsb2NhbCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJdGVzdF90aWNrICYmCisJZWNobyBpY2hpID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwljbnQ9JCggKAorCQlnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAtZSAicy8gKm9iamVjdHMsLiovLyIKKwkpICkgJiYKKwl0ZXN0ICRjbnQgLWVxIDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aG91dCBhbHRlcm5hdGUnICcKKworCSgKKwkJbWtkaXIgY2xvbmVkICYmCisJCWNkIGNsb25lZCAmJgorCQlnaXQgaW5pdC1kYiAmJgorCQlnaXQgcmVtb3RlIGFkZCAtZiBvcmlnaW4gLi4KKwkpICYmCisJY250PSQoICgKKwkJY2QgY2xvbmVkICYmCisJCWdpdCBjb3VudC1vYmplY3RzIHwgc2VkIC1lICJzLyAqb2JqZWN0cywuKi8vIgorCSkgKSAmJgorCXRlc3QgJGNudCAtZXEgMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmdXJ0aGVyIGNvbW1pdHMgaW4gdGhlIG9yaWdpbmFsJyAnCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIG5pID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBzZWNvbmQgJiYKKworCWNudD0kKCAoCisJCWdpdCBjb3VudC1vYmplY3RzIHwgc2VkIC1lICJzLyAqb2JqZWN0cywuKi8vIgorCSkgKSAmJgorCXRlc3QgJGNudCAtZXEgNgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IGNvbW1pdCBhbmQgdHJlZSBidXQgbm90IGJsb2IgYnkgaGFuZCcgJworCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBIRUFEIHwKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IHwKKwkoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgdW5wYWNrLW9iamVjdHMKKwkpICYmCisKKwljbnQ9JCggKAorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgLWUgInMvICpvYmplY3RzLC4qLy8iCisJKSApICYmCisJdGVzdCAkY250IC1lcSA2ICYmCisKKwlibG9iPSQoZ2l0IHJldi1wYXJzZSBIRUFEOmZpbGUgfCBzZWQgLWUgInN8Li58Ji98IikgJiYKKwl0ZXN0IC1mICJjbG9uZWQvLmdpdC9vYmplY3RzLyRibG9iIiAmJgorCXJtIC1mICJjbG9uZWQvLmdpdC9vYmplY3RzLyRibG9iIiAmJgorCisJY250PSQoICgKKwkJY2QgY2xvbmVkICYmCisJCWdpdCBjb3VudC1vYmplY3RzIHwgc2VkIC1lICJzLyAqb2JqZWN0cywuKi8vIgorCSkgKSAmJgorCXRlc3QgJGNudCAtZXEgNQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1aWNrZmV0Y2ggc2hvdWxkIG5vdCBsZWF2ZSBhIGNvcnJ1cHRlZCByZXBvc2l0b3J5JyAnCisKKwkoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgZmV0Y2gKKwkpICYmCisKKwljbnQ9JCggKAorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgLWUgInMvICpvYmplY3RzLC4qLy8iCisJKSApICYmCisJdGVzdCAkY250IC1lcSA2CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVpY2tmZXRjaCBzaG91bGQgbm90IGNvcHkgZnJvbSBhbHRlcm5hdGUnICcKKworCSgKKwkJbWtkaXIgcXVpY2tjbG9uZSAmJgorCQljZCBxdWlja2Nsb25lICYmCisJCWdpdCBpbml0LWRiICYmCisJCShjZCAuLi8uZ2l0L29iamVjdHMgJiYgcHdkKSA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCQlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gLi4gJiYKKwkJZ2l0IGZldGNoIC1rIC1rCisJKSAmJgorCW9ial9jbnQ9JCggKAorCQljZCBxdWlja2Nsb25lICYmCisJCWdpdCBjb3VudC1vYmplY3RzIHwgc2VkIC1lICJzLyAqb2JqZWN0cywuKi8vIgorCSkgKSAmJgorCXBja19jbnQ9JCggKAorCQljZCBxdWlja2Nsb25lICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12IHwgc2VkIC1uIC1lICIvcGFja3M6L3sKKwkJCQlzL3BhY2tzOi8vCisJCQkJcAorCQkJCXEKKwkJCX0iCisJKSApICYmCisJb3JpZ2luX21hc3Rlcj0kKCAoCisJCWNkIHF1aWNrY2xvbmUgJiYKKwkJZ2l0IHJldi1wYXJzZSBvcmlnaW4vbWFzdGVyCisJKSApICYmCisJZWNobyAibG9vc2Ugb2JqZWN0czogJG9ial9jbnQsIHBhY2tmaWxlczogJHBja19jbnQiICYmCisJdGVzdCAkb2JqX2NudCAtZXEgMCAmJgorCXRlc3QgJHBja19jbnQgLWVxIDAgJiYKKwl0ZXN0IHokb3JpZ2luX21hc3RlciA9IHokKGdpdCByZXYtcGFyc2UgbWFzdGVyKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1aWNrZmV0Y2ggc2hvdWxkIGhhbmRsZSB+MTAwMCByZWZzIChvbiBXaW5kb3dzKScgJworCisJZ2l0IGdjICYmCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlicmFuY2hwcmVmaXg9IiRoZWFkIHJlZnMvaGVhZHMvYnJhbmNoIiAmJgorCWZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvCisJCWZvciBqIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvCisJCQlmb3IgayBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbworCQkJCWVjaG8gIiRicmFuY2hwcmVmaXgkaSRqJGsiID4+IC5naXQvcGFja2VkLXJlZnMKKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUgJiYKKwkoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZldGNoCisJKQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwMy10YWdmb2xsb3cuc2ggYi90L3Q1NTAzLXRhZ2ZvbGxvdy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MDQxYTRkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUwMy10YWdmb2xsb3cuc2gKQEAgLTAsMCArMSwxNjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGF1dG9tYXRpYyB0YWcgZm9sbG93aW5nJworCisuIC4vdGVzdC1saWIuc2gKKworIyBFbmQgc3RhdGUgb2YgdGhlIHJlcG9zaXRvcnk6CisjCisjICAgICAgICAgVCAtIHRhZzEgICAgICAgICAgUyAtIHRhZzIKKyMgICAgICAgIC8gICAgICAgICAgICAgICAgIC8KKyMgICBMIC0gQSAtLS0tLS0gTyAtLS0tLS0gQgorIyAgICBcICAgXCAgICAgICAgICAgICAgICAgXAorIyAgICAgXCAgIEMgLSBvcmlnaW4vY2F0ICAgIFwKKyMgICAgICBvcmlnaW4vbWFzdGVyICAgICAgICAgbWFzdGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfdGljayAmJgorCWVjaG8gaWNoaSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gTCAmJgorCUw9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisKKwkoCisJCW1rZGlyIGNsb25lZCAmJgorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IGluaXQtZGIgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgLWYgb3JpZ2luIC4uCisJKSAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyBBID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBBICYmCisJQT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKworVT1VUExPQURfTE9HCitVUEFUSD0iJChwd2QpLyRVIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3QnICcKK2NhdCAtIDw8RU9GID5leHBlY3QKK3dhbnQgJEEKK0VPRgorJworCitnZXRfbmVlZHMgKCkgeworCXRlc3QgLXMgIiQxIiAmJgorCXBlcmwgLWFsbmUgJworCQluZXh0IHVubGVzcyAkRlsxXSBlcSAidXBsb2FkLXBhY2s8IjsKKwkJbmV4dCB1bmxlc3MgJEZbMl0gZXEgIndhbnQiOworCQlwcmludCAkRlsyXSwgIiAiLCAkRlszXTsKKwknICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggQSAobmV3IGNvbW1pdCA6IDEgY29ubmVjdGlvbiknICcKKwlybSAtZiAkVSAmJgorCSgKKwkJY2QgY2xvbmVkICYmCisJCUdJVF9UUkFDRV9QQUNLRVQ9JFVQQVRIIGdpdCBmZXRjaCAmJgorCQl0ZXN0ICRBID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG9yaWdpbi9tYXN0ZXIpCisJKSAmJgorCWdldF9uZWVkcyAkVSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjcmVhdGUgdGFnIFQgb24gQSwgY3JlYXRlIEMgb24gYnJhbmNoIGNhdCIgJworCWdpdCB0YWcgLWEgLW0gdGFnMSB0YWcxICRBICYmCisJVD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMSkgJiYKKworCWdpdCBjaGVja291dCAtYiBjYXQgJiYKKwllY2hvIEMgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIEMgJiYKKwlDPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0JyAnCitjYXQgLSA8PEVPRiA+ZXhwZWN0Cit3YW50ICRDCit3YW50ICRUCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggQywgVCAobmV3IGJyYW5jaCwgdGFnIDogMSBjb25uZWN0aW9uKScgJworCXJtIC1mICRVICYmCisJKAorCQljZCBjbG9uZWQgJiYKKwkJR0lUX1RSQUNFX1BBQ0tFVD0kVVBBVEggZ2l0IGZldGNoICYmCisJCXRlc3QgJEMgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgb3JpZ2luL2NhdCkgJiYKKwkJdGVzdCAkVCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0YWcxKSAmJgorCQl0ZXN0ICRBID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzFeMCkKKwkpICYmCisJZ2V0X25lZWRzICRVID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSBjb21taXRzIE8sIEIsIHRhZyBTIG9uIEIiICcKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIE8gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIE8gJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gQiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gQiAmJgorCUI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisKKwlnaXQgdGFnIC1hIC1tIHRhZzIgdGFnMiAkQiAmJgorCVM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdCcgJworY2F0IC0gPDxFT0YgPmV4cGVjdAord2FudCAkQgord2FudCAkUworRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIEIsIFMgKGNvbW1pdCBhbmQgdGFnIDogMSBjb25uZWN0aW9uKScgJworCXJtIC1mICRVICYmCisJKAorCQljZCBjbG9uZWQgJiYKKwkJR0lUX1RSQUNFX1BBQ0tFVD0kVVBBVEggZ2l0IGZldGNoICYmCisJCXRlc3QgJEIgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgb3JpZ2luL21hc3RlcikgJiYKKwkJdGVzdCAkQiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0YWcyXjApICYmCisJCXRlc3QgJFMgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMikKKwkpICYmCisJZ2V0X25lZWRzICRVID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdCcgJworY2F0IC0gPDxFT0YgPmV4cGVjdAord2FudCAkQgord2FudCAkUworRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyBjbG9uZSBmZXRjaCBtYXN0ZXIgYW5kIHRhZ3MnICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBjYXQgJiYKKwlybSAtZiAkVSAmJgorCSgKKwkJbWtkaXIgY2xvbmUyICYmCisJCWNkIGNsb25lMiAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gLi4gJiYKKwkJR0lUX1RSQUNFX1BBQ0tFVD0kVVBBVEggZ2l0IGZldGNoICYmCisJCXRlc3QgJEIgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgb3JpZ2luL21hc3RlcikgJiYKKwkJdGVzdCAkUyA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0YWcyKSAmJgorCQl0ZXN0ICRCID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzJeMCkgJiYKKwkJdGVzdCAkVCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0YWcxKSAmJgorCQl0ZXN0ICRBID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzFeMCkKKwkpICYmCisJZ2V0X25lZWRzICRVID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwNC1mZXRjaC1yZWNlaXZlLXN0cmljdC5zaCBiL3QvdDU1MDQtZmV0Y2gtcmVjZWl2ZS1zdHJpY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTMyZWZlMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MDQtZmV0Y2gtcmVjZWl2ZS1zdHJpY3Quc2gKQEAgLTAsMCArMSwzNTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaC9yZWNlaXZlIHN0cmljdCBtb2RlJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGFuZCBpbmplY3QgImNvcnJ1cHQgb3IgbWlzc2luZyIgb2JqZWN0JyAnCisJdGVzdF9vaWRfaW5pdCAmJgorCWVjaG8gaGVsbG8gPmdyZWV0aW5ncyAmJgorCWdpdCBhZGQgZ3JlZXRpbmdzICYmCisJZ2l0IGNvbW1pdCAtbSBncmVldGluZ3MgJiYKKworCVM9JChnaXQgcmV2LXBhcnNlIDpncmVldGluZ3MgfCBzZWQgLWUgInN8Xi4ufCYvfCIpICYmCisJWD0kKGVjaG8gYnllIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gfCBzZWQgLWUgInN8Xi4ufCYvfCIpICYmCisJZWNobyAkUyA+UyAmJgorCWVjaG8gJFggPlggJiYKKwljcCAuZ2l0L29iamVjdHMvJFMgLmdpdC9vYmplY3RzLyRTLmJhY2sgJiYKKwltdiAtZiAuZ2l0L29iamVjdHMvJFggLmdpdC9vYmplY3RzLyRTICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRob3V0IHN0cmljdCcgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIGZldGNoLmZzY2tvYmplY3RzIGZhbHNlICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIuZnNja29iamVjdHMgZmFsc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4uLy5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoICFmZXRjaC5mc2Nrb2JqZWN0cycgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIGZldGNoLmZzY2tvYmplY3RzIGZhbHNlICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIuZnNja29iamVjdHMgdHJ1ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLi4vLmdpdCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggZmV0Y2guZnNja29iamVjdHMnICcKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGluaXQgZHN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGNvbmZpZyBmZXRjaC5mc2Nrb2JqZWN0cyB0cnVlICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIuZnNja29iamVjdHMgZmFsc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4uLy5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIHRyYW5zZmVyLmZzY2tvYmplY3RzJyAnCisJcm0gLXJmIGRzdCAmJgorCWdpdCBpbml0IGRzdCAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIuZnNja29iamVjdHMgdHJ1ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLi4vLmdpdCBtYXN0ZXIKKwkpCisnCisKK2NhdCA+ZXhwIDw8RU9GCitUbyBkc3QKKyEJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy90ZXN0CVtyZW1vdGUgcmVqZWN0ZWRdIChtaXNzaW5nIG5lY2Vzc2FyeSBvYmplY3RzKQorRG9uZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aG91dCBzdHJpY3QnICcKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGluaXQgZHN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGNvbmZpZyBmZXRjaC5mc2Nrb2JqZWN0cyBmYWxzZSAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLmZzY2tvYmplY3RzIGZhbHNlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBtYXN0ZXI6cmVmcy9oZWFkcy90ZXN0ID5hY3QgJiYKKwl0ZXN0X2NtcCBleHAgYWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCAhcmVjZWl2ZS5mc2Nrb2JqZWN0cycgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZnNja29iamVjdHMgZmFsc2UgJiYKKwkJZ2l0IGNvbmZpZyB0cmFuc2Zlci5mc2Nrb2JqZWN0cyB0cnVlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBtYXN0ZXI6cmVmcy9oZWFkcy90ZXN0ID5hY3QgJiYKKwl0ZXN0X2NtcCBleHAgYWN0CisnCisKK2NhdCA+ZXhwIDw8RU9GCitUbyBkc3QKKyEJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy90ZXN0CVtyZW1vdGUgcmVqZWN0ZWRdICh1bnBhY2tlciBlcnJvcikKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggcmVjZWl2ZS5mc2Nrb2JqZWN0cycgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZnNja29iamVjdHMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLmZzY2tvYmplY3RzIGZhbHNlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBtYXN0ZXI6cmVmcy9oZWFkcy90ZXN0ID5hY3QgJiYKKwl0ZXN0X2NtcCBleHAgYWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCB0cmFuc2Zlci5mc2Nrb2JqZWN0cycgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLmZzY2tvYmplY3RzIHRydWUKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1wb3JjZWxhaW4gZHN0IG1hc3RlcjpyZWZzL2hlYWRzL3Rlc3QgPmFjdCAmJgorCXRlc3RfY21wIGV4cCBhY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWlyIHRoZSAiY29ycnVwdCBvciBtaXNzaW5nIiBvYmplY3QnICcKKwltdiAtZiAuZ2l0L29iamVjdHMvJChjYXQgUykgLmdpdC9vYmplY3RzLyQoY2F0IFgpICYmCisJbXYgLmdpdC9vYmplY3RzLyQoY2F0IFMpLmJhY2sgLmdpdC9vYmplY3RzLyQoY2F0IFMpICYmCisJcm0gLXJmIC5naXQvb2JqZWN0cy8kKGNhdCBYKSAmJgorCWdpdCBmc2NrCisnCisKK2NhdCA+Ym9ndXMtY29tbWl0IDw8RU9GCit0cmVlICRFTVBUWV9UUkVFCithdXRob3IgQnVncyBCdW5ueSAxMjM0NTY3ODkwICswMDAwCitjb21taXR0ZXIgQnVncyBCdW5ueSA8YnVnc0BidW4ubmk+IDEyMzQ1Njc4OTAgKzAwMDAKKworVGhpcyBjb21taXQgb2JqZWN0IGludGVudGlvbmFsbHkgYnJva2VuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYm9ndXMgY29tbWl0JyAnCisJY29tbWl0PSIkKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgLS1zdGRpbiA8Ym9ndXMtY29tbWl0KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayB3aXRoIG5vIHNraXBMaXN0IGlucHV0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJtaXNzaW5nRW1haWwiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzb3J0ZWQgYW5kIHVuc29ydGVkIHNraXBMaXN0cycgJworCWNhdCA+U0tJUC51bnNvcnRlZCA8PC1FT0YgJiYKKwkkKHRlc3Rfb2lkIDAwNCkKKwkkKHRlc3Rfb2lkIDAwMikKKwkkY29tbWl0CisJJCh0ZXN0X29pZCAwMDEpCisJJCh0ZXN0X29pZCAwMDMpCisJRU9GCisJc29ydCBTS0lQLnVuc29ydGVkID5TS0lQLnNvcnRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIHdpdGggc29ydGVkIHNraXBMaXN0JyAnCisJZ2l0IC1jIGZzY2suc2tpcExpc3Q9U0tJUC5zb3J0ZWQgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIHdpdGggdW5zb3J0ZWQgc2tpcExpc3QnICcKKwlnaXQgLWMgZnNjay5za2lwTGlzdD1TS0lQLnVuc29ydGVkIGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayB3aXRoIGludmFsaWQgb3IgYm9ndXMgc2tpcExpc3QgaW5wdXQnICcKKwlnaXQgLWMgZnNjay5za2lwTGlzdD0vZGV2L251bGwgLWMgZnNjay5taXNzaW5nRW1haWw9aWdub3JlIGZzY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZnNjay5za2lwTGlzdD1kb2VzLW5vdC1leGlzdCAtYyBmc2NrLm1pc3NpbmdFbWFpbD1pZ25vcmUgZnNjayAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImNvdWxkIG5vdCBvcGVuLio6IGRvZXMtbm90LWV4aXN0IiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZnNjay5za2lwTGlzdD0uZ2l0L2NvbmZpZyAtYyBmc2NrLm1pc3NpbmdFbWFpbD1pZ25vcmUgZnNjayAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImludmFsaWQgb2JqZWN0IG5hbWU6IFxbY29yZVxdIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayB3aXRoIG90aGVyIGFjY2VwdGVkIHNraXBMaXN0IGlucHV0IChjb21tZW50cyAmIGVtcHR5IGxpbmVzKScgJworCWNhdCA+U0tJUC53aXRoLWNvbW1lbnQgPDwtRU9GICYmCisJIyBTb21lIGJhZCBjb21taXQKKwkkKHRlc3Rfb2lkIDAwMSkKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZnNjay5za2lwTGlzdD1TS0lQLndpdGgtY29tbWVudCBmc2NrIDI+ZXJyLXdpdGgtY29tbWVudCAmJgorCXRlc3RfaTE4bmdyZXAgIm1pc3NpbmdFbWFpbCIgZXJyLXdpdGgtY29tbWVudCAmJgorCWNhdCA+U0tJUC53aXRoLWVtcHR5LWxpbmUgPDwtRU9GICYmCisJJCh0ZXN0X29pZCAwMDEpCisKKwkkKHRlc3Rfb2lkIDAwMikKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZnNjay5za2lwTGlzdD1TS0lQLndpdGgtZW1wdHktbGluZSBmc2NrIDI+ZXJyLXdpdGgtZW1wdHktbGluZSAmJgorCXRlc3RfaTE4bmdyZXAgIm1pc3NpbmdFbWFpbCIgZXJyLXdpdGgtZW1wdHktbGluZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIG5vIGdhcmJhZ2Ugb3V0cHV0IGZyb20gY29tbWVudHMgJiBlbXB0eSBsaW5lcyBlcnJvcnMnICcKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGVyci13aXRoLWNvbW1lbnQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGVyci13aXRoLWVtcHR5LWxpbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayB3aXRoIGludmFsaWQgYWJicmV2aWF0ZWQgc2tpcExpc3QgaW5wdXQnICcKKwllY2hvICRjb21taXQgfCB0ZXN0X2NvcHlfYnl0ZXMgMjAgPlNLSVAuYWJicmV2aWF0ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZnNjay5za2lwTGlzdD1TS0lQLmFiYnJldmlhdGVkIGZzY2sgMj5lcnItYWJicmV2aWF0ZWQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeZmF0YWw6IGludmFsaWQgb2JqZWN0IG5hbWU6ICIgZXJyLWFiYnJldmlhdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgd2l0aCBleGhhdXN0aXZlIGFjY2VwdGVkIHNraXBMaXN0IGlucHV0ICh2YXJpb3VzIHR5cGVzIG9mIGNvbW1lbnRzIGV0Yy4pJyAnCisJPlNLSVAuZXhoYXVzdGl2ZSAmJgorCWVjaG8gIiMgQSBjb21tZW50ZWQgbGluZSIgPj5TS0lQLmV4aGF1c3RpdmUgJiYKKwllY2hvICIiID4+U0tJUC5leGhhdXN0aXZlICYmCisJZWNobyAiICIgPj5TS0lQLmV4aGF1c3RpdmUgJiYKKwllY2hvICIgIyBDb21tZW50IGFmdGVyIHdoaXRlc3BhY2UiID4+U0tJUC5leGhhdXN0aXZlICYmCisJZWNobyAiJGNvbW1pdCAjIE91ciBiYWQgY29tbWl0ICh3aXRoIGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgdHJhaWxpbmcgY29tbWVudCkiID4+U0tJUC5leGhhdXN0aXZlICYmCisJZWNobyAiIyBTb21lIGJhZCBjb21taXQgKGxlYWRpbmcgd2hpdGVzcGFjZSkiID4+U0tJUC5leGhhdXN0aXZlICYmCisJZWNobyAiICAkKHRlc3Rfb2lkIDAwMSkiID4+U0tJUC5leGhhdXN0aXZlICYmCisJZ2l0IC1jIGZzY2suc2tpcExpc3Q9U0tJUC5leGhhdXN0aXZlIGZzY2sgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCByZWNlaXZlLmZzY2suc2tpcExpc3QnICcKKwlnaXQgcHVzaCAuICRjb21taXQ6cmVmcy9oZWFkcy9ib2d1cyAmJgorCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyByZWNlaXZlLmZzY2tPYmplY3RzIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXBvcmNlbGFpbiBkc3QgYm9ndXMgJiYKKwllY2hvICRjb21taXQgPmRzdC8uZ2l0L1NLSVAgJiYKKworCSMgcmVjZWl2ZS5mc2NrLiogZG9lcyBub3QgZmFsbCBiYWNrIG9uIGZzY2suKgorCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgY29uZmlnIGZzY2suc2tpcExpc3QgU0tJUCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBib2d1cyAmJgorCisJIyBJbnZhbGlkIGFuZC9vciBib2d1cyBza2lwTGlzdCBpbnB1dAorCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgY29uZmlnIHJlY2VpdmUuZnNjay5za2lwTGlzdCAvZGV2L251bGwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXBvcmNlbGFpbiBkc3QgYm9ndXMgJiYKKwlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyByZWNlaXZlLmZzY2suc2tpcExpc3QgZG9lcy1ub3QtZXhpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXBvcmNlbGFpbiBkc3QgYm9ndXMgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJjb3VsZCBub3Qgb3Blbi4qOiBkb2VzLW5vdC1leGlzdCIgZXJyICYmCisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBjb25maWcgcmVjZWl2ZS5mc2NrLnNraXBMaXN0IGNvbmZpZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBib2d1cyAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImludmFsaWQgb2JqZWN0IG5hbWU6IFxbY29yZVxdIiBlcnIgJiYKKworCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgY29uZmlnIHJlY2VpdmUuZnNjay5za2lwTGlzdCBTS0lQICYmCisJZ2l0IHB1c2ggLS1wb3JjZWxhaW4gZHN0IGJvZ3VzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggZmV0Y2guZnNjay5za2lwTGlzdCcgJworCXJlZnNwZWM9cmVmcy9oZWFkcy9ib2d1czpyZWZzL2hlYWRzL2JvZ3VzICYmCisJZ2l0IHB1c2ggLiAkY29tbWl0OnJlZnMvaGVhZHMvYm9ndXMgJiYKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGluaXQgZHN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBjb25maWcgZmV0Y2guZnNja09iamVjdHMgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgZmV0Y2ggImZpbGU6Ly8kKHB3ZCkiICRyZWZzcGVjICYmCisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBjb25maWcgZmV0Y2guZnNjay5za2lwTGlzdCAvZGV2L251bGwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGZldGNoICJmaWxlOi8vJChwd2QpIiAkcmVmc3BlYyAmJgorCWVjaG8gJGNvbW1pdCA+ZHN0Ly5naXQvU0tJUCAmJgorCisJIyBmZXRjaC5mc2NrLiogZG9lcyBub3QgZmFsbCBiYWNrIG9uIGZzY2suKgorCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgY29uZmlnIGZzY2suc2tpcExpc3QgZHN0Ly5naXQvU0tJUCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgZmV0Y2ggImZpbGU6Ly8kKHB3ZCkiICRyZWZzcGVjICYmCisKKwkjIEludmFsaWQgYW5kL29yIGJvZ3VzIHNraXBMaXN0IGlucHV0CisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBjb25maWcgZmV0Y2guZnNjay5za2lwTGlzdCAvZGV2L251bGwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGZldGNoICJmaWxlOi8vJChwd2QpIiAkcmVmc3BlYyAmJgorCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgY29uZmlnIGZldGNoLmZzY2suc2tpcExpc3QgZG9lcy1ub3QtZXhpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGZldGNoICJmaWxlOi8vJChwd2QpIiAkcmVmc3BlYyAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImNvdWxkIG5vdCBvcGVuLio6IGRvZXMtbm90LWV4aXN0IiBlcnIgJiYKKwlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyBmZXRjaC5mc2NrLnNraXBMaXN0IGRzdC8uZ2l0L2NvbmZpZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgZmV0Y2ggImZpbGU6Ly8kKHB3ZCkiICRyZWZzcGVjIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiaW52YWxpZCBvYmplY3QgbmFtZTogXFtjb3JlXF0iIGVyciAmJgorCisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBjb25maWcgZmV0Y2guZnNjay5za2lwTGlzdCBkc3QvLmdpdC9TS0lQICYmCisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBmZXRjaCAiZmlsZTovLyQocHdkKSIgJHJlZnNwZWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjay48dW5rbm93bm1zZy1pZD4gZGllcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBmc2NrLndoYXRFdmVyPWlnbm9yZSBmc2NrIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiVW5oYW5kbGVkIG1lc3NhZ2UgaWQ6IHdoYXRldmVyIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIHJlY2VpdmUuZnNjay5taXNzaW5nRW1haWw9d2FybicgJworCWdpdCBwdXNoIC4gJGNvbW1pdDpyZWZzL2hlYWRzL2JvZ3VzICYmCisJcm0gLXJmIGRzdCAmJgorCWdpdCBpbml0IGRzdCAmJgorCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgY29uZmlnIHJlY2VpdmUuZnNja29iamVjdHMgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBib2d1cyAmJgorCisJIyByZWNlaXZlLmZzY2suPG1zZy1pZD4gZG9lcyBub3QgZmFsbCBiYWNrIG9uIGZzY2suPG1zZy1pZD4KKwlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyBmc2NrLm1pc3NpbmdFbWFpbCB3YXJuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1wb3JjZWxhaW4gZHN0IGJvZ3VzICYmCisKKwkjIHJlY2VpdmUuZnNjay48dW5rbm93bm1zZy1pZD4gd2FybnMKKwlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyBcCisJCXJlY2VpdmUuZnNjay53aGF0RXZlciBlcnJvciAmJgorCisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBjb25maWcgXAorCQlyZWNlaXZlLmZzY2subWlzc2luZ0VtYWlsIHdhcm4gJiYKKwlnaXQgcHVzaCAtLXBvcmNlbGFpbiBkc3QgYm9ndXMgPmFjdCAyPiYxICYmCisJZ3JlcCAibWlzc2luZ0VtYWlsIiBhY3QgJiYKKwl0ZXN0X2kxOG5ncmVwICJTa2lwcGluZyB1bmtub3duIG1zZyBpZC4qd2hhdGV2ZXIiIGFjdCAmJgorCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgYnJhbmNoIC1EIGJvZ3VzICYmCisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBjb25maWcgLS1hZGQgXAorCQlyZWNlaXZlLmZzY2subWlzc2luZ0VtYWlsIGlnbm9yZSAmJgorCWdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBib2d1cyA+YWN0IDI+JjEgJiYKKwkhIGdyZXAgIm1pc3NpbmdFbWFpbCIgYWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggZmV0Y2guZnNjay5taXNzaW5nRW1haWw9d2FybicgJworCXJlZnNwZWM9cmVmcy9oZWFkcy9ib2d1czpyZWZzL2hlYWRzL2JvZ3VzICYmCisJZ2l0IHB1c2ggLiAkY29tbWl0OnJlZnMvaGVhZHMvYm9ndXMgJiYKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGluaXQgZHN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBjb25maWcgZmV0Y2guZnNja29iamVjdHMgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgZmV0Y2ggImZpbGU6Ly8kKHB3ZCkiICRyZWZzcGVjICYmCisKKwkjIGZldGNoLmZzY2suPG1zZy1pZD4gZG9lcyBub3QgZmFsbCBiYWNrIG9uIGZzY2suPG1zZy1pZD4KKwlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyBmc2NrLm1pc3NpbmdFbWFpbCB3YXJuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBmZXRjaCAiZmlsZTovLyQocHdkKSIgJHJlZnNwZWMgJiYKKworCSMgcmVjZWl2ZS5mc2NrLjx1bmtub3dubXNnLWlkPiB3YXJucworCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgY29uZmlnIFwKKwkJZmV0Y2guZnNjay53aGF0RXZlciBlcnJvciAmJgorCisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBjb25maWcgXAorCQlmZXRjaC5mc2NrLm1pc3NpbmdFbWFpbCB3YXJuICYmCisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBmZXRjaCAiZmlsZTovLyQocHdkKSIgJHJlZnNwZWMgPmFjdCAyPiYxICYmCisJZ3JlcCAibWlzc2luZ0VtYWlsIiBhY3QgJiYKKwl0ZXN0X2kxOG5ncmVwICJTa2lwcGluZyB1bmtub3duIG1zZyBpZC4qd2hhdGV2ZXIiIGFjdCAmJgorCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyBmZXRjaC5mc2Nrb2JqZWN0cyB0cnVlICYmCisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBjb25maWcgXAorCQlmZXRjaC5mc2NrLm1pc3NpbmdFbWFpbCBpZ25vcmUgJiYKKwlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGZldGNoICJmaWxlOi8vJChwd2QpIiAkcmVmc3BlYyA+YWN0IDI+JjEgJiYKKwkhIGdyZXAgIm1pc3NpbmdFbWFpbCIgYWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdyZWNlaXZlLmZzY2sudW50ZXJtaW5hdGVkSGVhZGVyPXdhcm4gdHJpZ2dlcnMgZXJyb3InICcKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGluaXQgZHN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBjb25maWcgcmVjZWl2ZS5mc2Nrb2JqZWN0cyB0cnVlICYmCisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBjb25maWcgXAorCQlyZWNlaXZlLmZzY2sudW50ZXJtaW5hdGVkaGVhZGVyIHdhcm4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXBvcmNlbGFpbiBkc3QgSEVBRCA+YWN0IDI+JjEgJiYKKwlncmVwICJDYW5ub3QgZGVtb3RlIHVudGVybWluYXRlZGhlYWRlciIgYWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdmZXRjaC5mc2NrLnVudGVybWluYXRlZEhlYWRlcj13YXJuIHRyaWdnZXJzIGVycm9yJyAnCisJcm0gLXJmIGRzdCAmJgorCWdpdCBpbml0IGRzdCAmJgorCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgY29uZmlnIGZldGNoLmZzY2tvYmplY3RzIHRydWUgJiYKKwlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyBcCisJCWZldGNoLmZzY2sudW50ZXJtaW5hdGVkaGVhZGVyIHdhcm4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGZldGNoICJmaWxlOi8vJChwd2QpIiBIRUFEICYmCisJZ3JlcCAiQ2Fubm90IGRlbW90ZSB1bnRlcm1pbmF0ZWRoZWFkZXIiIGFjdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MDUtcmVtb3RlLnNoIGIvdC90NTUwNS1yZW1vdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGRhODFiNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MDUtcmVtb3RlLnNoCkBAIC0wLDAgKzEsMTM2NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZW1vdGUgcG9yY2VsYWluLWlzaCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3NldHVwX3JlcG9zaXRvcnkgKCkgeworCW1rZGlyICIkMSIgJiYgKAorCWNkICIkMSIgJiYKKwlnaXQgaW5pdCAmJgorCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCT5lbGlmICYmCisJZ2l0IGFkZCBlbGlmICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKwkpCit9CisKK3Rva2Vuc19tYXRjaCAoKSB7CisJZWNobyAiJDEiIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgfCBzZWQgLWUgJy9eJC9kJyA+ZXhwZWN0ICYmCisJZWNobyAiJDIiIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgfCBzZWQgLWUgJy9eJC9kJyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCitjaGVja19yZW1vdGVfdHJhY2sgKCkgeworCWFjdHVhbD0kKGdpdCByZW1vdGUgc2hvdyAiJDEiIHwgc2VkIC1uZSAnc3xeICAgIFwoLipcKSB0cmFja2VkJHxcMXxwJykKKwlzaGlmdCAmJgorCXRva2Vuc19tYXRjaCAiJCoiICIkYWN0dWFsIgorfQorCitjaGVja190cmFja2luZ19icmFuY2ggKCkgeworCWY9IiIgJiYKKwlyPSQoZ2l0IGZvci1lYWNoLXJlZiAiLS1mb3JtYXQ9JShyZWZuYW1lKSIgfAorCQlzZWQgLW5lICJzfF5yZWZzL3JlbW90ZXMvJDEvfHxwIikgJiYKKwlzaGlmdCAmJgorCXRva2Vuc19tYXRjaCAiJCoiICIkciIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJc2V0dXBfcmVwb3NpdG9yeSBvbmUgJiYKKwlzZXR1cF9yZXBvc2l0b3J5IHR3byAmJgorCSgKKwkJY2QgdHdvICYmCisJCWdpdCBicmFuY2ggYW5vdGhlcgorCSkgJiYKKwlnaXQgY2xvbmUgb25lIHRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHJlbW90ZSB3aG9zZSBVUkwgYWdyZWVzIHdpdGggdXJsLjwuLi4+Lmluc3RlYWRPZicgJworCXRlc3RfY29uZmlnIHVybC5naXRAaG9zdC5jb206dGVhbS9yZXBvLmdpdC5pbnN0ZWFkT2YgbXlyZW1vdGUgJiYKKwlnaXQgcmVtb3RlIGFkZCBteXJlbW90ZSBnaXRAaG9zdC5jb206dGVhbS9yZXBvLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAncmVtb3RlIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCXRva2Vuc19tYXRjaCBvcmlnaW4gIiQoZ2l0IHJlbW90ZSkiICYmCisJCWNoZWNrX3JlbW90ZV90cmFjayBvcmlnaW4gbWFzdGVyIHNpZGUgJiYKKwkJY2hlY2tfdHJhY2tpbmdfYnJhbmNoIG9yaWdpbiBIRUFEIG1hc3RlciBzaWRlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYW5vdGhlciByZW1vdGUnICcKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgLWYgc2Vjb25kIC4uL3R3byAmJgorCQl0b2tlbnNfbWF0Y2ggIm9yaWdpbiBzZWNvbmQiICIkKGdpdCByZW1vdGUpIiAmJgorCQljaGVja190cmFja2luZ19icmFuY2ggc2Vjb25kIG1hc3RlciBzaWRlIGFub3RoZXIgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiAiLS1mb3JtYXQ9JShyZWZuYW1lKSIgcmVmcy9yZW1vdGVzIHwKKwkJc2VkIC1lICIvXnJlZnNcL3JlbW90ZXNcL29yaWdpblwvL2QiIFwKKwkJICAgIC1lICIvXnJlZnNcL3JlbW90ZXNcL3NlY29uZFwvL2QiID5hY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2NoZWNrIHJlbW90ZS10cmFja2luZycgJworCSgKKwkJY2QgdGVzdCAmJgorCQljaGVja19yZW1vdGVfdHJhY2sgb3JpZ2luIG1hc3RlciBzaWRlICYmCisJCWNoZWNrX3JlbW90ZV90cmFjayBzZWNvbmQgbWFzdGVyIHNpZGUgYW5vdGhlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIGZvcmNlcyB0cmFja2luZyBicmFuY2hlcycgJworCSgKKwkJY2QgdGVzdCAmJgorCQljYXNlICQoZ2l0IGNvbmZpZyByZW1vdGUuc2Vjb25kLmZldGNoKSBpbgorCQkrKikgdHJ1ZSA7OworCQkgKikgZmFsc2UgOzsKKwkJZXNhYworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHJlbW90ZScgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9zZWNvbmQvSEVBRCByZWZzL3JlbW90ZXMvc2Vjb25kL21hc3RlciAmJgorCQlnaXQgcmVtb3RlIHJtIHNlY29uZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ3JlbW92ZSByZW1vdGUnICcKKwkoCisJCWNkIHRlc3QgJiYKKwkJdG9rZW5zX21hdGNoIG9yaWdpbiAiJChnaXQgcmVtb3RlKSIgJiYKKwkJY2hlY2tfcmVtb3RlX3RyYWNrIG9yaWdpbiBtYXN0ZXIgc2lkZSAmJgorCQlnaXQgZm9yLWVhY2gtcmVmICItLWZvcm1hdD0lKHJlZm5hbWUpIiByZWZzL3JlbW90ZXMgfAorCQlzZWQgLWUgIi9ecmVmc1wvcmVtb3Rlc1wvb3JpZ2luXC8vZCIgPmFjdHVhbCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgcmVtb3RlIHByb3RlY3RzIGxvY2FsIGJyYW5jaGVzJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWNhdCA+ZXhwZWN0MSA8PC1cRU9GICYmCisJCU5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDsKKwkJdG8gZGVsZXRlIGl0LCB1c2U6CisJCSAgZ2l0IGJyYW5jaCAtZCBtYXN0ZXIKKwkJRU9GCisJCWNhdCA+ZXhwZWN0MiA8PC1cRU9GICYmCisJCU5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDsKKwkJdG8gZGVsZXRlIHRoZW0sIHVzZToKKwkJICBnaXQgYnJhbmNoIC1kIGZvb2JyYW5jaAorCQkgIGdpdCBicmFuY2ggLWQgbWFzdGVyCisJCUVPRgorCQlnaXQgdGFnIGZvb3RhZyAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vb3BzLmZldGNoICIrcmVmcy8qOnJlZnMvKiIgJiYKKwkJZ2l0IHJlbW90ZSByZW1vdmUgb29wcyAyPmFjdHVhbDEgJiYKKwkJZ2l0IGJyYW5jaCBmb29icmFuY2ggJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub29wcy5mZXRjaCAiK3JlZnMvKjpyZWZzLyoiICYmCisJCWdpdCByZW1vdGUgcm0gb29wcyAyPmFjdHVhbDIgJiYKKwkJZ2l0IGJyYW5jaCAtZCBmb29icmFuY2ggJiYKKwkJZ2l0IHRhZyAtZCBmb290YWcgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdDEgYWN0dWFsMSAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0MiBhY3R1YWwyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgZXJyb3JzIG91dCBlYXJseSB3aGVuIGRlbGV0aW5nIG5vbi1leGlzdGVudCBicmFuY2gnICcKKwkoCisJCWNkIHRlc3QgJiYKKwkJZWNobyAiZmF0YWw6IE5vIHN1Y2ggcmVtb3RlOiAnXCcnZm9vJ1wnJyIgPmV4cGVjdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIHJtIGZvbyAyPmFjdHVhbCAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHJlbW90ZSB3aXRoIGEgYnJhbmNoIHdpdGhvdXQgY29uZmlndXJlZCBtZXJnZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiKAorCQlnaXQgLUMgdGVzdCBjaGVja291dCBtYXN0ZXI7CisJCWdpdCAtQyB0ZXN0IGJyYW5jaCAtRCB0d287CisJCWdpdCAtQyB0ZXN0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHJlbW90ZS50d287CisJCWdpdCAtQyB0ZXN0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIGJyYW5jaC5zZWNvbmQ7CisJCXRydWUKKwkpIiAmJgorCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgcmVtb3RlIGFkZCB0d28gLi4vdHdvICYmCisJCWdpdCBmZXRjaCB0d28gJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHNlY29uZCB0d28vbWFzdGVyXjAgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2guc2Vjb25kLnJlbW90ZSB0d28gJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgcmVtb3RlIHJtIHR3bworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGVycm9ycyBvdXQgZWFybHkgd2hlbiBkZWxldGluZyBub24tZXhpc3RlbnQgYnJhbmNoJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWVjaG8gImZhdGFsOiBObyBzdWNoIHJlbW90ZTogJ1wnJ2ZvbydcJyciID5leHBlY3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSByZW5hbWUgZm9vIGJhciAyPmFjdHVhbCAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGV4aXN0aW5nIGZvcmVpZ25fdmNzIHJlbW90ZScgJworCXRlc3RfY29uZmlnIHJlbW90ZS5mb28udmNzIGJhciAmJgorCWVjaG8gImZhdGFsOiByZW1vdGUgZm9vIGFscmVhZHkgZXhpc3RzLiIgPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgYWRkIGZvbyBiYXIgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZXhpc3RpbmcgZm9yZWlnbl92Y3MgcmVtb3RlJyAnCisJdGVzdF9jb25maWcgcmVtb3RlLmZvby52Y3MgYmFyICYmCisJdGVzdF9jb25maWcgcmVtb3RlLmJhci52Y3MgYmFyICYmCisJZWNobyAiZmF0YWw6IHJlbW90ZSBiYXIgYWxyZWFkeSBleGlzdHMuIiA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSByZW5hbWUgZm9vIGJhciAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+dGVzdC9leHBlY3QgPDxFT0YKKyogcmVtb3RlIG9yaWdpbgorICBGZXRjaCBVUkw6ICQocHdkKS9vbmUKKyAgUHVzaCAgVVJMOiAkKHB3ZCkvb25lCisgIEhFQUQgYnJhbmNoOiBtYXN0ZXIKKyAgUmVtb3RlIGJyYW5jaGVzOgorICAgIG1hc3RlciBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzL29yaWdpbikKKyAgICBzaWRlICAgdHJhY2tlZAorICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOgorICAgIGFoZWFkICAgIG1lcmdlcyB3aXRoIHJlbW90ZSBtYXN0ZXIKKyAgICBtYXN0ZXIgICBtZXJnZXMgd2l0aCByZW1vdGUgbWFzdGVyCisgICAgb2N0b3B1cyAgbWVyZ2VzIHdpdGggcmVtb3RlIHRvcGljLWEKKyAgICAgICAgICAgICAgICBhbmQgd2l0aCByZW1vdGUgdG9waWMtYgorICAgICAgICAgICAgICAgIGFuZCB3aXRoIHJlbW90ZSB0b3BpYy1jCisgICAgcmViYXNlICByZWJhc2VzIG9udG8gcmVtb3RlIG1hc3RlcgorICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCc6CisgICAgbWFzdGVyIHB1c2hlcyB0byBtYXN0ZXIgICAobG9jYWwgb3V0IG9mIGRhdGUpCisgICAgbWFzdGVyIHB1c2hlcyB0byB1cHN0cmVhbSAoY3JlYXRlKQorKiByZW1vdGUgdHdvCisgIEZldGNoIFVSTDogLi4vdHdvCisgIFB1c2ggIFVSTDogLi4vdGhyZWUKKyAgSEVBRCBicmFuY2g6IG1hc3RlcgorICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCc6CisgICAgYWhlYWQgIGZvcmNlcyB0byBtYXN0ZXIgIChmYXN0LWZvcndhcmRhYmxlKQorICAgIG1hc3RlciBwdXNoZXMgdG8gYW5vdGhlciAodXAgdG8gZGF0ZSkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93JyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9yaWdpbi5mZXRjaCByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL3Vwc3RyZWFtICYmCisJCWdpdCBmZXRjaCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYWhlYWQgb3JpZ2luL21hc3RlciAmJgorCQllY2hvIDEgPj5maWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tIHVwZGF0ZSBmaWxlICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGJyYW5jaCAtLXRyYWNrIG9jdG9wdXMgb3JpZ2luL21hc3RlciAmJgorCQlnaXQgYnJhbmNoIC0tdHJhY2sgcmViYXNlIG9yaWdpbi9tYXN0ZXIgJiYKKwkJZ2l0IGJyYW5jaCAtZCAtciBvcmlnaW4vbWFzdGVyICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLnR3by51cmwgLi4vdHdvICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLnR3by5wdXNodXJsIC4uL3RocmVlICYmCisJCWdpdCBjb25maWcgYnJhbmNoLnJlYmFzZS5yZWJhc2UgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5vY3RvcHVzLm1lcmdlICJ0b3BpYy1hIHRvcGljLWIgdG9waWMtYyIgJiYKKwkJKAorCQkJY2QgLi4vb25lICYmCisJCQllY2hvIDEgPmZpbGUgJiYKKwkJCXRlc3RfdGljayAmJgorCQkJZ2l0IGNvbW1pdCAtbSB1cGRhdGUgZmlsZQorCQkpICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9yaWdpbi5wdXNoIDogJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLnB1c2ggcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy91cHN0cmVhbSAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4ucHVzaCArcmVmcy90YWdzL2xhc3RiYWNrdXAgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudHdvLnB1c2ggK3JlZnMvaGVhZHMvYWhlYWQ6cmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudHdvLnB1c2ggcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9hbm90aGVyICYmCisJCWdpdCByZW1vdGUgc2hvdyBvcmlnaW4gdHdvID5vdXRwdXQgJiYKKwkJZ2l0IGJyYW5jaCAtZCByZWJhc2Ugb2N0b3B1cyAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorCSkKKycKKworY2F0ID50ZXN0L2V4cGVjdCA8PEVPRgorKiByZW1vdGUgb3JpZ2luCisgIEZldGNoIFVSTDogJChwd2QpL29uZQorICBQdXNoICBVUkw6ICQocHdkKS9vbmUKKyAgSEVBRCBicmFuY2g6IChub3QgcXVlcmllZCkKKyAgUmVtb3RlIGJyYW5jaGVzOiAoc3RhdHVzIG5vdCBxdWVyaWVkKQorICAgIG1hc3RlcgorICAgIHNpZGUKKyAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoKKyAgICBhaGVhZCAgbWVyZ2VzIHdpdGggcmVtb3RlIG1hc3RlcgorICAgIG1hc3RlciBtZXJnZXMgd2l0aCByZW1vdGUgbWFzdGVyCisgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyAoc3RhdHVzIG5vdCBxdWVyaWVkKToKKyAgICAobWF0Y2hpbmcpICAgICAgICAgICBwdXNoZXMgdG8gKG1hdGNoaW5nKQorICAgIHJlZnMvaGVhZHMvbWFzdGVyICAgIHB1c2hlcyB0byByZWZzL2hlYWRzL3Vwc3RyZWFtCisgICAgcmVmcy90YWdzL2xhc3RiYWNrdXAgZm9yY2VzIHRvIHJlZnMvdGFncy9sYXN0YmFja3VwCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyAtbicgJworCW12IG9uZSBvbmUudW5yZWFjaGFibGUgJiYKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IHJlbW90ZSBzaG93IC1uIG9yaWdpbiA+b3V0cHV0ICYmCisJCW12IC4uL29uZS51bnJlYWNoYWJsZSAuLi9vbmUgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lJyAnCisJKAorCQljZCBvbmUgJiYKKwkJZ2l0IGJyYW5jaCAtbSBzaWRlIHNpZGUyCisJKSAmJgorCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luICYmCisJCWdpdCByZW1vdGUgcHJ1bmUgb3JpZ2luICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0LWhlYWQgLS1kZWxldGUnICcKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtaGVhZCAtLWRlbGV0ZSBvcmlnaW4gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldC1oZWFkIC0tYXV0bycgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgcmVtb3RlIHNldC1oZWFkIC0tYXV0byBvcmlnaW4gJiYKKwkJZWNobyByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA+ZXhwZWN0ICYmCisJCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEID5vdXRwdXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0LWhlYWQgLS1hdXRvIGhhcyBubyBwcm9ibGVtIHcvbXVsdGlwbGUgSEVBRHMnICcKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IGZldGNoIHR3byAicmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy90d28vKiIgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtaGVhZCAtLWF1dG8gdHdvID5vdXRwdXQgMj4mMSAmJgorCQllY2hvICJ0d28vSEVBRCBzZXQgdG8gbWFzdGVyIiA+ZXhwZWN0ICYmCisJCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisJKQorJworCitjYXQgPnRlc3QvZXhwZWN0IDw8XEVPRgorcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldC1oZWFkIGV4cGxpY2l0JyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCByZW1vdGUgc2V0LWhlYWQgb3JpZ2luIHNpZGUyICYmCisJCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEID5vdXRwdXQgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtaGVhZCBvcmlnaW4gbWFzdGVyICYmCisJCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKwkpCisnCisKK2NhdCA+dGVzdC9leHBlY3QgPDxFT0YKK1BydW5pbmcgb3JpZ2luCitVUkw6ICQocHdkKS9vbmUKKyAqIFt3b3VsZCBwcnVuZV0gb3JpZ2luL3NpZGUyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLS1kcnktcnVuJyAnCisJZ2l0IC1DIG9uZSBicmFuY2ggLW0gc2lkZTIgc2lkZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIG9uZSBicmFuY2ggLW0gc2lkZSBzaWRlMiIgJiYKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IHJlbW90ZSBwcnVuZSAtLWRyeS1ydW4gb3JpZ2luID5vdXRwdXQgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlICYmCisJCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLS1taXJyb3IgJiYgcHJ1bmUnICcKKwlta2RpciBtaXJyb3IgJiYKKwkoCisJCWNkIG1pcnJvciAmJgorCQlnaXQgaW5pdCAtLWJhcmUgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgLS1taXJyb3IgLWYgb3JpZ2luIC4uL29uZQorCSkgJiYKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgYnJhbmNoIC1tIHNpZGUyIHNpZGUKKwkpICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3NpZGUyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9zaWRlICYmCisJCWdpdCBmZXRjaCBvcmlnaW4gJiYKKwkJZ2l0IHJlbW90ZSBwcnVuZSBvcmlnaW4gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3NpZGUyICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9zaWRlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLS1taXJyb3I9ZmV0Y2gnICcKKwlta2RpciBtaXJyb3ItZmV0Y2ggJiYKKwlnaXQgaW5pdCBtaXJyb3ItZmV0Y2gvcGFyZW50ICYmCisJKAorCQljZCBtaXJyb3ItZmV0Y2gvcGFyZW50ICYmCisJCXRlc3RfY29tbWl0IG9uZQorCSkgJiYKKwlnaXQgaW5pdCAtLWJhcmUgbWlycm9yLWZldGNoL2NoaWxkICYmCisJKAorCQljZCBtaXJyb3ItZmV0Y2gvY2hpbGQgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgLS1taXJyb3I9ZmV0Y2ggLWYgcGFyZW50IC4uL3BhcmVudAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbWlycm9ycyBhY3QgYXMgbWlycm9ycyBkdXJpbmcgZmV0Y2gnICcKKwkoCisJCWNkIG1pcnJvci1mZXRjaC9wYXJlbnQgJiYKKwkJZ2l0IGJyYW5jaCBuZXcgJiYKKwkJZ2l0IGJyYW5jaCAtbSBtYXN0ZXIgcmVuYW1lZAorCSkgJiYKKwkoCisJCWNkIG1pcnJvci1mZXRjaC9jaGlsZCAmJgorCQlnaXQgZmV0Y2ggcGFyZW50ICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9uZXcgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3JlbmFtZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG1pcnJvcnMgY2FuIHBydW5lJyAnCisJKAorCQljZCBtaXJyb3ItZmV0Y2gvY2hpbGQgJiYKKwkJZ2l0IHJlbW90ZSBwcnVuZSBwYXJlbnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbWlycm9ycyBkbyBub3QgYWN0IGFzIG1pcnJvcnMgZHVyaW5nIHB1c2gnICcKKwkoCisJCWNkIG1pcnJvci1mZXRjaC9wYXJlbnQgJiYKKwkJZ2l0IGNoZWNrb3V0IEhFQUReMAorCSkgJiYKKwkoCisJCWNkIG1pcnJvci1mZXRjaC9jaGlsZCAmJgorCQlnaXQgYnJhbmNoIC1tIHJlbmFtZWQgcmVuYW1lZDIgJiYKKwkJZ2l0IHB1c2ggcGFyZW50IDoKKwkpICYmCisJKAorCQljZCBtaXJyb3ItZmV0Y2gvcGFyZW50ICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVuYW1lZCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcmVuYW1lZDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBmZXRjaCBtaXJyb3Igd2l0aCBzcGVjaWZpYyBicmFuY2hlcycgJworCWdpdCBpbml0IC0tYmFyZSBtaXJyb3ItZmV0Y2gvdHJhY2sgJiYKKwkoCisJCWNkIG1pcnJvci1mZXRjaC90cmFjayAmJgorCQlnaXQgcmVtb3RlIGFkZCAtLW1pcnJvcj1mZXRjaCAtdCBoZWFkcy9uZXcgcGFyZW50IC4uL3BhcmVudAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbWlycm9yIHJlc3BlY3RzIHNwZWNpZmljIGJyYW5jaGVzJyAnCisJKAorCQljZCBtaXJyb3ItZmV0Y2gvdHJhY2sgJiYKKwkJZ2l0IGZldGNoIHBhcmVudCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbmV3ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLS1taXJyb3I9cHVzaCcgJworCW1rZGlyIG1pcnJvci1wdXNoICYmCisJZ2l0IGluaXQgLS1iYXJlIG1pcnJvci1wdXNoL3B1YmxpYyAmJgorCWdpdCBpbml0IG1pcnJvci1wdXNoL3ByaXZhdGUgJiYKKwkoCisJCWNkIG1pcnJvci1wdXNoL3ByaXZhdGUgJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCByZW1vdGUgYWRkIC0tbWlycm9yPXB1c2ggcHVibGljIC4uL3B1YmxpYworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3JzIGFjdCBhcyBtaXJyb3JzIGR1cmluZyBwdXNoJyAnCisJKAorCQljZCBtaXJyb3ItcHVzaC9wcml2YXRlICYmCisJCWdpdCBicmFuY2ggbmV3ICYmCisJCWdpdCBicmFuY2ggLW0gbWFzdGVyIHJlbmFtZWQgJiYKKwkJZ2l0IHB1c2ggcHVibGljCisJKSAmJgorCSgKKwkJY2QgbWlycm9yLXB1c2gvcHJpdmF0ZSAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbmV3ICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9ycyBkbyBub3QgYWN0IGFzIG1pcnJvcnMgZHVyaW5nIGZldGNoJyAnCisJKAorCQljZCBtaXJyb3ItcHVzaC9wdWJsaWMgJiYKKwkJZ2l0IGJyYW5jaCAtbSByZW5hbWVkIHJlbmFtZWQyICYmCisJCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL3JlbmFtZWQyCisJKSAmJgorCSgKKwkJY2QgbWlycm9yLXB1c2gvcHJpdmF0ZSAmJgorCQlnaXQgZmV0Y2ggcHVibGljICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3JzIGRvIG5vdCBhbGxvdyB5b3UgdG8gc3BlY2lmeSByZWZzJyAnCisJZ2l0IGluaXQgbWlycm9yLXB1c2gvdHJhY2sgJiYKKwkoCisJCWNkIG1pcnJvci1wdXNoL3RyYWNrICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgYWRkIC0tbWlycm9yPXB1c2ggLXQgbmV3IHB1YmxpYyAuLi9wdWJsaWMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhbHQgJiYgcHJ1bmUnICcKKwlta2RpciBhbHR0c3QgJiYKKwkoCisJCWNkIGFsdHRzdCAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgcmVtb3RlIGFkZCAtZiBvcmlnaW4gLi4vb25lICYmCisJCWdpdCBjb25maWcgcmVtb3RlLmFsdC51cmwgLi4vb25lICYmCisJCWdpdCBjb25maWcgcmVtb3RlLmFsdC5mZXRjaCAiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiCisJKSAmJgorCSgKKwkJY2Qgb25lICYmCisJCWdpdCBicmFuY2ggLW0gc2lkZSBzaWRlMgorCSkgJiYKKwkoCisJCWNkIGFsdHRzdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZTIgJiYKKwkJZ2l0IGZldGNoIGFsdCAmJgorCQlnaXQgcmVtb3RlIHBydW5lIGFsdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZTIKKwkpCisnCisKK2NhdCA+dGVzdC9leHBlY3QgPDxcRU9GCitzb21lLXRhZworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB3aXRoIHJlYWNoYWJsZSB0YWdzIChkZWZhdWx0KScgJworCSgKKwkJY2Qgb25lICYmCisJCT5mb29iYXIgJiYKKwkJZ2l0IGFkZCBmb29iYXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiRm9vYmFyIiAmJgorCQlnaXQgdGFnIC1hIC1tICJGb29iYXIgdGFnIiBmb29iYXItdGFnICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRH4xICYmCisJCWdpdCB0YWcgLWEgLW0gIlNvbWUgdGFnIiBzb21lLXRhZworCSkgJiYKKwlta2RpciBhZGQtdGFncyAmJgorCSgKKwkJY2QgYWRkLXRhZ3MgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgLWYgb3JpZ2luIC4uL29uZSAmJgorCQlnaXQgdGFnIC1sIHNvbWUtdGFnID4uLi90ZXN0L291dHB1dCAmJgorCQlnaXQgdGFnIC1sIGZvb2Jhci10YWcgPj4uLi90ZXN0L291dHB1dCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udGFnb3B0CisJKSAmJgorCXRlc3RfY21wIHRlc3QvZXhwZWN0IHRlc3Qvb3V0cHV0CisnCisKK2NhdCA+dGVzdC9leHBlY3QgPDxcRU9GCitzb21lLXRhZworZm9vYmFyLXRhZworLS10YWdzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC0tdGFncycgJworCXJtIC1yZiBhZGQtdGFncyAmJgorCSgKKwkJbWtkaXIgYWRkLXRhZ3MgJiYKKwkJY2QgYWRkLXRhZ3MgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgLWYgLS10YWdzIG9yaWdpbiAuLi9vbmUgJiYKKwkJZ2l0IHRhZyAtbCBzb21lLXRhZyA+Li4vdGVzdC9vdXRwdXQgJiYKKwkJZ2l0IHRhZyAtbCBmb29iYXItdGFnID4+Li4vdGVzdC9vdXRwdXQgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnRhZ29wdCA+Pi4uL3Rlc3Qvb3V0cHV0CisJKSAmJgorCXRlc3RfY21wIHRlc3QvZXhwZWN0IHRlc3Qvb3V0cHV0CisnCisKK2NhdCA+dGVzdC9leHBlY3QgPDxcRU9GCistLW5vLXRhZ3MKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLS1uby10YWdzJyAnCisJcm0gLXJmIGFkZC10YWdzICYmCisJKAorCQlta2RpciBhZGQtbm8tdGFncyAmJgorCQljZCBhZGQtbm8tdGFncyAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgcmVtb3RlIGFkZCAtZiAtLW5vLXRhZ3Mgb3JpZ2luIC4uL29uZSAmJgorCQlnaXQgdGFnIC1sIHNvbWUtdGFnID4uLi90ZXN0L291dHB1dCAmJgorCQlnaXQgdGFnIC1sIGZvb2Jhci10YWcgPi4uL3Rlc3Qvb3V0cHV0ICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi50YWdvcHQgPj4uLi90ZXN0L291dHB1dAorCSkgJiYKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgdGFnIC1kIHNvbWUtdGFnIGZvb2Jhci10YWcKKwkpICYmCisJdGVzdF9jbXAgdGVzdC9leHBlY3QgdGVzdC9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IC0tbm8tbm8tdGFncycgJworCSgKKwkJY2QgYWRkLW5vLXRhZ3MgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSBhZGQgLWYgLS1uby1uby10YWdzIG5ld29yaWdpbiAuLi9vbmUKKwkpCisnCisKK2NhdCA+b25lL2V4cGVjdCA8PFxFT0YKKyAgYXBpcy9tYXN0ZXIKKyAgYXBpcy9zaWRlCisgIGRyb3NvcGhpbGEvYW5vdGhlcgorICBkcm9zb3BoaWxhL21hc3RlcgorICBkcm9zb3BoaWxhL3NpZGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUnICcKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgcmVtb3RlIGFkZCBkcm9zb3BoaWxhIC4uL3R3byAmJgorCQlnaXQgcmVtb3RlIGFkZCBhcGlzIC4uL21pcnJvciAmJgorCQlnaXQgcmVtb3RlIHVwZGF0ZSAmJgorCQlnaXQgYnJhbmNoIC1yID5vdXRwdXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCSkKKycKKworY2F0ID5vbmUvZXhwZWN0IDw8XEVPRgorICBkcm9zb3BoaWxhL2Fub3RoZXIKKyAgZHJvc29waGlsYS9tYXN0ZXIKKyAgZHJvc29waGlsYS9zaWRlCisgIG1hbmR1Y2EvbWFzdGVyCisgIG1hbmR1Y2Evc2lkZQorICBtZWdhbG9wcmVwdXMvbWFzdGVyCisgIG1lZ2Fsb3ByZXB1cy9zaWRlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHdpdGggYXJndW1lbnRzJyAnCisJKAorCQljZCBvbmUgJiYKKwkJZm9yIGIgaW4gJChnaXQgYnJhbmNoIC1yKQorCQlkbworCQlnaXQgYnJhbmNoIC1yIC1kICRiIHx8IGV4aXQgMQorCQlkb25lICYmCisJCWdpdCByZW1vdGUgYWRkIG1hbmR1Y2EgLi4vbWlycm9yICYmCisJCWdpdCByZW1vdGUgYWRkIG1lZ2Fsb3ByZXB1cyAuLi9taXJyb3IgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGVzLnBob2JhZXRpY3VzICJkcm9zb3BoaWxhIG1lZ2Fsb3ByZXB1cyIgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGVzLnRpdGFudXMgbWFuZHVjYSAmJgorCQlnaXQgcmVtb3RlIHVwZGF0ZSBwaG9iYWV0aWN1cyB0aXRhbnVzICYmCisJCWdpdCBicmFuY2ggLXIgPm91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgLS1wcnVuZScgJworCSgKKwkJY2Qgb25lICYmCisJCWdpdCBicmFuY2ggLW0gc2lkZTIgc2lkZTMKKwkpICYmCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCByZW1vdGUgdXBkYXRlIC0tcHJ1bmUgJiYKKwkJKAorCQkJY2QgLi4vb25lICYmCisJCQlnaXQgYnJhbmNoIC1tIHNpZGUzIHNpZGUyCisJCSkgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMgorCSkKKycKKworY2F0ID5vbmUvZXhwZWN0IDw8LVxFT0YKKyAgYXBpcy9tYXN0ZXIKKyAgYXBpcy9zaWRlCisgIG1hbmR1Y2EvbWFzdGVyCisgIG1hbmR1Y2Evc2lkZQorICBtZWdhbG9wcmVwdXMvbWFzdGVyCisgIG1lZ2Fsb3ByZXB1cy9zaWRlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGRlZmF1bHQnICcKKwkoCisJCWNkIG9uZSAmJgorCQlmb3IgYiBpbiAkKGdpdCBicmFuY2ggLXIpCisJCWRvCisJCWdpdCBicmFuY2ggLXIgLWQgJGIgfHwgZXhpdCAxCisJCWRvbmUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUuZHJvc29waGlsYS5za2lwRGVmYXVsdFVwZGF0ZSB0cnVlICYmCisJCWdpdCByZW1vdGUgdXBkYXRlIGRlZmF1bHQgJiYKKwkJZ2l0IGJyYW5jaCAtciA+b3V0cHV0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKwkpCisnCisKK2NhdCA+b25lL2V4cGVjdCA8PFxFT0YKKyAgZHJvc29waGlsYS9hbm90aGVyCisgIGRyb3NvcGhpbGEvbWFzdGVyCisgIGRyb3NvcGhpbGEvc2lkZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBkZWZhdWx0IChvdmVycmlkZGVuLCB3aXRoIGZ1bm55IHdoaXRlc3BhY2UpJyAnCisJKAorCQljZCBvbmUgJiYKKwkJZm9yIGIgaW4gJChnaXQgYnJhbmNoIC1yKQorCQlkbworCQlnaXQgYnJhbmNoIC1yIC1kICRiIHx8IGV4aXQgMQorCQlkb25lICYmCisJCWdpdCBjb25maWcgcmVtb3Rlcy5kZWZhdWx0ICIkKHByaW50ZiAiXHQgZHJvc29waGlsYSAgXG4iKSIgJiYKKwkJZ2l0IHJlbW90ZSB1cGRhdGUgZGVmYXVsdCAmJgorCQlnaXQgYnJhbmNoIC1yID5vdXRwdXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlICh3aXRoIHJlbW90ZXMuZGVmYXVsdCBkZWZpbmVkKScgJworCSgKKwkJY2Qgb25lICYmCisJCWZvciBiIGluICQoZ2l0IGJyYW5jaCAtcikKKwkJZG8KKwkJZ2l0IGJyYW5jaCAtciAtZCAkYiB8fCBleGl0IDEKKwkJZG9uZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZXMuZGVmYXVsdCAiZHJvc29waGlsYSIgJiYKKwkJZ2l0IHJlbW90ZSB1cGRhdGUgJiYKKwkJZ2l0IGJyYW5jaCAtciA+b3V0cHV0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJyZW1vdGUgc2hvdyIgZG9lcyBub3Qgc2hvdyBzeW1ib2xpYyByZWZzJyAnCisJZ2l0IGNsb25lIG9uZSB0aHJlZSAmJgorCSgKKwkJY2QgdGhyZWUgJiYKKwkJZ2l0IHJlbW90ZSBzaG93IG9yaWdpbiA+b3V0cHV0ICYmCisJCSEgZ3JlcCAiXiAqSEVBRCQiIDwgb3V0cHV0ICYmCisJCSEgZ3JlcCAtaSBzdGFsZSA8IG91dHB1dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IGFkZGluZyByZW1vdGUgd2l0aCBhbiBpbnZhbGlkIG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIGFkZCBzb21lOnVybCBkZXNpcmVkLW5hbWUKKycKKworIyBUaGUgZmlyc3QgdGhyZWUgdGVzdCBpZiB0aGUgdHJhY2tpbmcgYnJhbmNoZXMgYXJlIHByb3Blcmx5IHJlbmFtZWQsCisjIHRoZSBsYXN0IHR3byBvbmVzIGNoZWNrIGlmIHRoZSBjb25maWcgaXMgdXBkYXRlZC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGEgcmVtb3RlJyAnCisJdGVzdF9jb25maWdfZ2xvYmFsIHJlbW90ZS5wdXNoRGVmYXVsdCBvcmlnaW4gJiYKKwlnaXQgY2xvbmUgb25lIGZvdXIgJiYKKwkoCisJCWNkIGZvdXIgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnB1c2hSZW1vdGUgb3JpZ2luICYmCisJCWdpdCByZW1vdGUgcmVuYW1lIG9yaWdpbiB1cHN0cmVhbSAmJgorCQl0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbikiICYmCisJCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvdXBzdHJlYW0vSEVBRCkiID0gInJlZnMvcmVtb3Rlcy91cHN0cmVhbS9tYXN0ZXIiICYmCisJCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSB1cHN0cmVhbS9tYXN0ZXIpIiA9ICIkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSIgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS51cHN0cmVhbS5mZXRjaCkiID0gIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3Vwc3RyZWFtLyoiICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSkiID0gInVwc3RyZWFtIiAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5wdXNoUmVtb3RlKSIgPSAidXBzdHJlYW0iICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyAtLWdsb2JhbCByZW1vdGUucHVzaERlZmF1bHQpIiA9ICJvcmlnaW4iCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgYSByZW1vdGUgcmVuYW1lcyByZXBvIHJlbW90ZS5wdXNoRGVmYXVsdCcgJworCWdpdCBjbG9uZSBvbmUgZm91ci4xICYmCisJKAorCQljZCBmb3VyLjEgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUucHVzaERlZmF1bHQgb3JpZ2luICYmCisJCWdpdCByZW1vdGUgcmVuYW1lIG9yaWdpbiB1cHN0cmVhbSAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgLS1sb2NhbCByZW1vdGUucHVzaERlZmF1bHQpIiA9ICJ1cHN0cmVhbSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBhIHJlbW90ZSByZW5hbWVzIHJlcG8gcmVtb3RlLnB1c2hEZWZhdWx0IGJ1dCBpZ25vcmVzIGdsb2JhbCcgJworCXRlc3RfY29uZmlnX2dsb2JhbCByZW1vdGUucHVzaERlZmF1bHQgb3RoZXIgJiYKKwlnaXQgY2xvbmUgb25lIGZvdXIuMiAmJgorCSgKKwkJY2QgZm91ci4yICYmCisJCWdpdCBjb25maWcgcmVtb3RlLnB1c2hEZWZhdWx0IG9yaWdpbiAmJgorCQlnaXQgcmVtb3RlIHJlbmFtZSBvcmlnaW4gdXBzdHJlYW0gJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIC0tZ2xvYmFsIHJlbW90ZS5wdXNoRGVmYXVsdCkiID0gIm90aGVyIiAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgLS1sb2NhbCByZW1vdGUucHVzaERlZmF1bHQpIiA9ICJ1cHN0cmVhbSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBhIHJlbW90ZSByZW5hbWVzIHJlcG8gcmVtb3RlLnB1c2hEZWZhdWx0IGJ1dCBrZWVwcyBnbG9iYWwnICcKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgcmVtb3RlLnB1c2hEZWZhdWx0IG9yaWdpbiAmJgorCWdpdCBjbG9uZSBvbmUgZm91ci4zICYmCisJKAorCQljZCBmb3VyLjMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUucHVzaERlZmF1bHQgb3JpZ2luICYmCisJCWdpdCByZW1vdGUgcmVuYW1lIG9yaWdpbiB1cHN0cmVhbSAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgLS1nbG9iYWwgcmVtb3RlLnB1c2hEZWZhdWx0KSIgPSAib3JpZ2luIiAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgLS1sb2NhbCByZW1vdGUucHVzaERlZmF1bHQpIiA9ICJ1cHN0cmVhbSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBkb2VzIG5vdCB1cGRhdGUgYSBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjJyAnCisJZ2l0IGNsb25lIG9uZSBmb3VyLm9uZSAmJgorCSgKKwkJY2QgZm91ci5vbmUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLmZldGNoICtyZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy9vcmlnaW4vKiAmJgorCQlnaXQgcmVtb3RlIHJlbmFtZSBvcmlnaW4gdXBzdHJlYW0gJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS51cHN0cmVhbS5mZXRjaCkiID0gIityZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy9vcmlnaW4vKiIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtcSBvcmlnaW4vbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgYSByZW1vdGUgd2l0aCBuYW1lIHBhcnQgb2YgZmV0Y2ggc3BlYycgJworCWdpdCBjbG9uZSBvbmUgZm91ci50d28gJiYKKwkoCisJCWNkIGZvdXIudHdvICYmCisJCWdpdCByZW1vdGUgcmVuYW1lIG9yaWdpbiByZW1vdGUgJiYKKwkJZ2l0IHJlbW90ZSByZW5hbWUgcmVtb3RlIHVwc3RyZWFtICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUudXBzdHJlYW0uZmV0Y2gpIiA9ICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy91cHN0cmVhbS8qIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGEgcmVtb3RlIHdpdGggbmFtZSBwcmVmaXggb2Ygb3RoZXIgcmVtb3RlJyAnCisJZ2l0IGNsb25lIG9uZSBmb3VyLnRocmVlICYmCisJKAorCQljZCBmb3VyLnRocmVlICYmCisJCWdpdCByZW1vdGUgYWRkIG8gZ2l0Oi8vZXhhbXBsZS5jb20vcmVwby5naXQgJiYKKwkJZ2l0IHJlbW90ZSByZW5hbWUgbyB1cHN0cmVhbSAmJgorCQl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugb3JpZ2luL21hc3RlcikiID0gIiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHN1Y2NlZWRzIHdpdGggZXhpc3RpbmcgcmVtb3RlLjx0YXJnZXQ+LnBydW5lJyAnCisJZ2l0IGNsb25lIG9uZSBmb3VyLmZvdXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLXVuc2V0IHJlbW90ZS51cHN0cmVhbS5wcnVuZSAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgcmVtb3RlLnVwc3RyZWFtLnBydW5lIHRydWUgJiYKKwlnaXQgLUMgZm91ci5mb3VyIHJlbW90ZSByZW5hbWUgb3JpZ2luIHVwc3RyZWFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBhIHJlbW90ZScgJworCXRlc3RfY29uZmlnX2dsb2JhbCByZW1vdGUucHVzaERlZmF1bHQgb3JpZ2luICYmCisJZ2l0IGNsb25lIG9uZSBmb3VyLmZpdmUgJiYKKwkoCisJCWNkIGZvdXIuZml2ZSAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucHVzaFJlbW90ZSBvcmlnaW4gJiYKKwkJZ2l0IHJlbW90ZSByZW1vdmUgb3JpZ2luICYmCisJCXRlc3QgLXogIiQoZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luKSIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucHVzaFJlbW90ZSAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgLS1nbG9iYWwgcmVtb3RlLnB1c2hEZWZhdWx0KSIgPSAib3JpZ2luIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIGEgcmVtb3RlIHJlbW92ZXMgcmVwbyByZW1vdGUucHVzaERlZmF1bHQnICcKKwlnaXQgY2xvbmUgb25lIGZvdXIuZml2ZS4xICYmCisJKAorCQljZCBmb3VyLmZpdmUuMSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5wdXNoRGVmYXVsdCBvcmlnaW4gJiYKKwkJZ2l0IHJlbW90ZSByZW1vdmUgb3JpZ2luICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1sb2NhbCByZW1vdGUucHVzaERlZmF1bHQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBhIHJlbW90ZSByZW1vdmVzIHJlcG8gcmVtb3RlLnB1c2hEZWZhdWx0IGJ1dCBpZ25vcmVzIGdsb2JhbCcgJworCXRlc3RfY29uZmlnX2dsb2JhbCByZW1vdGUucHVzaERlZmF1bHQgb3RoZXIgJiYKKwlnaXQgY2xvbmUgb25lIGZvdXIuZml2ZS4yICYmCisJKAorCQljZCBmb3VyLmZpdmUuMiAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5wdXNoRGVmYXVsdCBvcmlnaW4gJiYKKwkJZ2l0IHJlbW90ZSByZW1vdmUgb3JpZ2luICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyAtLWdsb2JhbCByZW1vdGUucHVzaERlZmF1bHQpIiA9ICJvdGhlciIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWxvY2FsIHJlbW90ZS5wdXNoRGVmYXVsdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIGEgcmVtb3RlIHJlbW92ZXMgcmVwbyByZW1vdGUucHVzaERlZmF1bHQgYnV0IGtlZXBzIGdsb2JhbCcgJworCXRlc3RfY29uZmlnX2dsb2JhbCByZW1vdGUucHVzaERlZmF1bHQgb3JpZ2luICYmCisJZ2l0IGNsb25lIG9uZSBmb3VyLmZpdmUuMyAmJgorCSgKKwkJY2QgZm91ci5maXZlLjMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUucHVzaERlZmF1bHQgb3JpZ2luICYmCisJCWdpdCByZW1vdGUgcmVtb3ZlIG9yaWdpbiAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgLS1nbG9iYWwgcmVtb3RlLnB1c2hEZWZhdWx0KSIgPSAib3JpZ2luIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tbG9jYWwgcmVtb3RlLnB1c2hEZWZhdWx0CisJKQorJworCitjYXQgPnJlbW90ZXNfb3JpZ2luIDw8RU9GCitVUkw6ICQocHdkKS9vbmUKK1B1c2g6IHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvdXBzdHJlYW0KK1B1c2g6IHJlZnMvaGVhZHMvbmV4dDpyZWZzL2hlYWRzL3Vwc3RyZWFtMgorUHVsbDogcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9vcmlnaW4KK1B1bGw6IHJlZnMvaGVhZHMvbmV4dDpyZWZzL2hlYWRzL29yaWdpbjIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaWdyYXRlIGEgcmVtb3RlIGZyb20gbmFtZWQgZmlsZSBpbiAkR0lUX0RJUi9yZW1vdGVzJyAnCisJZ2l0IGNsb25lIG9uZSBmaXZlICYmCisJb3JpZ2luX3VybD0kKHB3ZCkvb25lICYmCisJKAorCQljZCBmaXZlICYmCisJCWdpdCByZW1vdGUgcmVtb3ZlIG9yaWdpbiAmJgorCQlta2RpciAtcCAuZ2l0L3JlbW90ZXMgJiYKKwkJY2F0IC4uL3JlbW90ZXNfb3JpZ2luID4uZ2l0L3JlbW90ZXMvb3JpZ2luICYmCisJCWdpdCByZW1vdGUgcmVuYW1lIG9yaWdpbiBvcmlnaW4gJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZW1vdGVzL29yaWdpbiAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIkb3JpZ2luX3VybCIgJiYKKwkJY2F0ID5wdXNoX2V4cGVjdGVkIDw8LVxFT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy91cHN0cmVhbQorCQlyZWZzL2hlYWRzL25leHQ6cmVmcy9oZWFkcy91cHN0cmVhbTIKKwkJRU9GCisJCWNhdCA+ZmV0Y2hfZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlyZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL29yaWdpbgorCQlyZWZzL2hlYWRzL25leHQ6cmVmcy9oZWFkcy9vcmlnaW4yCisJCUVPRgorCQlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUub3JpZ2luLnB1c2ggPnB1c2hfYWN0dWFsICYmCisJCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5vcmlnaW4uZmV0Y2ggPmZldGNoX2FjdHVhbCAmJgorCQl0ZXN0X2NtcCBwdXNoX2V4cGVjdGVkIHB1c2hfYWN0dWFsICYmCisJCXRlc3RfY21wIGZldGNoX2V4cGVjdGVkIGZldGNoX2FjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlncmF0ZSBhIHJlbW90ZSBmcm9tIG5hbWVkIGZpbGUgaW4gJEdJVF9ESVIvYnJhbmNoZXMnICcKKwlnaXQgY2xvbmUgb25lIHNpeCAmJgorCW9yaWdpbl91cmw9JChwd2QpL29uZSAmJgorCSgKKwkJY2Qgc2l4ICYmCisJCWdpdCByZW1vdGUgcm0gb3JpZ2luICYmCisJCWVjaG8gIiRvcmlnaW5fdXJsIiA+LmdpdC9icmFuY2hlcy9vcmlnaW4gJiYKKwkJZ2l0IHJlbW90ZSByZW5hbWUgb3JpZ2luIG9yaWdpbiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L2JyYW5jaGVzL29yaWdpbiAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIkb3JpZ2luX3VybCIgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4uZmV0Y2gpIiA9ICJyZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL29yaWdpbiIgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4ucHVzaCkiID0gIkhFQUQ6cmVmcy9oZWFkcy9tYXN0ZXIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaWdyYXRlIGEgcmVtb3RlIGZyb20gbmFtZWQgZmlsZSBpbiAkR0lUX0RJUi9icmFuY2hlcyAoMiknICcKKwlnaXQgY2xvbmUgb25lIHNldmVuICYmCisJKAorCQljZCBzZXZlbiAmJgorCQlnaXQgcmVtb3RlIHJtIG9yaWdpbiAmJgorCQllY2hvICJxdXV4I2Zvb20iID4gLmdpdC9icmFuY2hlcy9vcmlnaW4gJiYKKwkJZ2l0IHJlbW90ZSByZW5hbWUgb3JpZ2luIG9yaWdpbiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L2JyYW5jaGVzL29yaWdpbiAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICJxdXV4IiAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5mZXRjaCkiID0gInJlZnMvaGVhZHMvZm9vbTpyZWZzL2hlYWRzL29yaWdpbiIgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4ucHVzaCkiID0gIkhFQUQ6cmVmcy9oZWFkcy9mb29tIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHBydW5lIHRvIGNhdXNlIGEgZGFuZ2xpbmcgc3ltcmVmJyAnCisJZ2l0IGNsb25lIG9uZSBlaWdodCAmJgorCSgKKwkJY2Qgb25lICYmCisJCWdpdCBjaGVja291dCBzaWRlMiAmJgorCQlnaXQgYnJhbmNoIC1EIG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIGVpZ2h0ICYmCisJCWdpdCByZW1vdGUgcHJ1bmUgb3JpZ2luCisJKSA+ZXJyIDI+JjEgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXMgYmVjb21lIGRhbmdsaW5nIiBlcnIgJiYKKworCTogQW5kIHRoZSBkYW5nbGluZyBzeW1yZWYgd2lsbCBub3QgY2F1c2Ugb3RoZXIgYW5ub3lpbmcgZXJyb3JzICYmCisJKAorCQljZCBlaWdodCAmJgorCQlnaXQgYnJhbmNoIC1hCisJKSAyPmVyciAmJgorCSEgZ3JlcCAicG9pbnRzIG5vd2hlcmUiIGVyciAmJgorCSgKKwkJY2QgZWlnaHQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCBub21vcmUgb3JpZ2luCisJKSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImRhbmdsaW5nIHN5bXJlZiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgZW1wdHkgcmVtb3RlJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBlbXB0eSAmJgorCWdpdCBjbG9uZSBlbXB0eSBlbXB0eS1jbG9uZSAmJgorCSgKKwkJY2QgZW1wdHktY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzaG93IG9yaWdpbgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC1icmFuY2hlcyByZXF1aXJlcyBhIHJlbW90ZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgc2V0LWJyYW5jaGVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC1icmFuY2hlcycgJworCWVjaG8gIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvKiIgPmV4cGVjdC5pbml0aWFsICYmCisJc29ydCA8PC1cRU9GID5leHBlY3QuYWRkICYmCisJK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvc2NyYXRjaC8qCisJK3JlZnMvaGVhZHMvb3RoZXI6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvb3RoZXIKKwlFT0YKKwlzb3J0IDw8LVxFT0YgPmV4cGVjdC5yZXBsYWNlICYmCisJK3JlZnMvaGVhZHMvbWFpbnQ6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvbWFpbnQKKwkrcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvbWFzdGVyCisJK3JlZnMvaGVhZHMvbmV4dDpyZWZzL3JlbW90ZXMvc2NyYXRjaC9uZXh0CisJRU9GCisJc29ydCA8PC1cRU9GID5leHBlY3QuYWRkLXR3byAmJgorCStyZWZzL2hlYWRzL21haW50OnJlZnMvcmVtb3Rlcy9zY3JhdGNoL21haW50CisJK3JlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9zY3JhdGNoL21hc3RlcgorCStyZWZzL2hlYWRzL25leHQ6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvbmV4dAorCStyZWZzL2hlYWRzL3B1OnJlZnMvcmVtb3Rlcy9zY3JhdGNoL3B1CisJK3JlZnMvaGVhZHMvdC90b3BpYzpyZWZzL3JlbW90ZXMvc2NyYXRjaC90L3RvcGljCisJRU9GCisJc29ydCA8PC1cRU9GID5leHBlY3Quc2V0dXAtZmZvbmx5ICYmCisJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvbWFzdGVyCisJK3JlZnMvaGVhZHMvbmV4dDpyZWZzL3JlbW90ZXMvc2NyYXRjaC9uZXh0CisJRU9GCisJc29ydCA8PC1cRU9GID5leHBlY3QucmVzcGVjdC1mZm9ubHkgJiYKKwlyZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvc2NyYXRjaC9tYXN0ZXIKKwkrcmVmcy9oZWFkcy9uZXh0OnJlZnMvcmVtb3Rlcy9zY3JhdGNoL25leHQKKwkrcmVmcy9oZWFkcy9wdTpyZWZzL3JlbW90ZXMvc2NyYXRjaC9wdQorCUVPRgorCisJZ2l0IGNsb25lIC5naXQvIHNldGJyYW5jaGVzICYmCisJKAorCQljZCBzZXRicmFuY2hlcyAmJgorCQlnaXQgcmVtb3RlIHJlbmFtZSBvcmlnaW4gc2NyYXRjaCAmJgorCQlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc2NyYXRjaC5mZXRjaCA+Y29uZmlnLXJlc3VsdCAmJgorCQlzb3J0IDxjb25maWctcmVzdWx0ID4uLi9hY3R1YWwuaW5pdGlhbCAmJgorCisJCWdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIHNjcmF0Y2ggLS1hZGQgb3RoZXIgJiYKKwkJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNjcmF0Y2guZmV0Y2ggPmNvbmZpZy1yZXN1bHQgJiYKKwkJc29ydCA8Y29uZmlnLXJlc3VsdCA+Li4vYWN0dWFsLmFkZCAmJgorCisJCWdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIHNjcmF0Y2ggbWFpbnQgbWFzdGVyIG5leHQgJiYKKwkJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNjcmF0Y2guZmV0Y2ggPmNvbmZpZy1yZXN1bHQgJiYKKwkJc29ydCA8Y29uZmlnLXJlc3VsdCA+Li4vYWN0dWFsLnJlcGxhY2UgJiYKKworCQlnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCBzY3JhdGNoIHB1IHQvdG9waWMgJiYKKwkJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNjcmF0Y2guZmV0Y2ggPmNvbmZpZy1yZXN1bHQgJiYKKwkJc29ydCA8Y29uZmlnLXJlc3VsdCA+Li4vYWN0dWFsLmFkZC10d28gJiYKKworCQlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIHJlbW90ZS5zY3JhdGNoLmZldGNoICYmCisJCWdpdCBjb25maWcgcmVtb3RlLnNjcmF0Y2guZmV0Y2ggXAorCQkJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvbWFzdGVyICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLnNjcmF0Y2guZmV0Y2ggXAorCQkJK3JlZnMvaGVhZHMvbmV4dDpyZWZzL3JlbW90ZXMvc2NyYXRjaC9uZXh0ICYmCisJCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zY3JhdGNoLmZldGNoID5jb25maWctcmVzdWx0ICYmCisJCXNvcnQgPGNvbmZpZy1yZXN1bHQgPi4uL2FjdHVhbC5zZXR1cC1mZm9ubHkgJiYKKworCQlnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCBzY3JhdGNoIHB1ICYmCisJCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zY3JhdGNoLmZldGNoID5jb25maWctcmVzdWx0ICYmCisJCXNvcnQgPGNvbmZpZy1yZXN1bHQgPi4uL2FjdHVhbC5yZXNwZWN0LWZmb25seQorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuaW5pdGlhbCBhY3R1YWwuaW5pdGlhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5hZGQgYWN0dWFsLmFkZCAmJgorCXRlc3RfY21wIGV4cGVjdC5yZXBsYWNlIGFjdHVhbC5yZXBsYWNlICYmCisJdGVzdF9jbXAgZXhwZWN0LmFkZC10d28gYWN0dWFsLmFkZC10d28gJiYKKwl0ZXN0X2NtcCBleHBlY3Quc2V0dXAtZmZvbmx5IGFjdHVhbC5zZXR1cC1mZm9ubHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmVzcGVjdC1mZm9ubHkgYWN0dWFsLnJlc3BlY3QtZmZvbmx5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtYnJhbmNoZXMgd2l0aCAtLW1pcnJvcicgJworCWVjaG8gIityZWZzLyo6cmVmcy8qIiA+ZXhwZWN0LmluaXRpYWwgJiYKKwllY2hvICIrcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QucmVwbGFjZSAmJgorCWdpdCBjbG9uZSAtLW1pcnJvciAuZ2l0LyBzZXRicmFuY2hlcy1taXJyb3IgJiYKKwkoCisJCWNkIHNldGJyYW5jaGVzLW1pcnJvciAmJgorCQlnaXQgcmVtb3RlIHJlbmFtZSBvcmlnaW4gc2NyYXRjaCAmJgorCQlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc2NyYXRjaC5mZXRjaCA+Li4vYWN0dWFsLmluaXRpYWwgJiYKKworCQlnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBzY3JhdGNoIGhlYWRzL21hc3RlciAmJgorCQlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc2NyYXRjaC5mZXRjaCA+Li4vYWN0dWFsLnJlcGxhY2UKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0LmluaXRpYWwgYWN0dWFsLmluaXRpYWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmVwbGFjZSBhY3R1YWwucmVwbGFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgcmVtb3RlJyAnCisJZ2l0IHJlbW90ZSBhZGQgc29tZXJlbW90ZSBmb28gJiYKKwllY2hvIGZvbyA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCitnZXRfdXJsX3Rlc3QgKCkgeworCWNhdCA+ZXhwZWN0ICYmCisJZ2l0IHJlbW90ZSBnZXQtdXJsICIkQCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0LXVybCBvbiBuZXcgcmVtb3RlJyAnCisJZWNobyBmb28gfCBnZXRfdXJsX3Rlc3Qgc29tZXJlbW90ZSAmJgorCWVjaG8gZm9vIHwgZ2V0X3VybF90ZXN0IC0tYWxsIHNvbWVyZW1vdGUgJiYKKwllY2hvIGZvbyB8IGdldF91cmxfdGVzdCAtLXB1c2ggc29tZXJlbW90ZSAmJgorCWVjaG8gZm9vIHwgZ2V0X3VybF90ZXN0IC0tcHVzaCAtLWFsbCBzb21lcmVtb3RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIHdpdGggbG9ja2VkIGNvbmZpZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9jb25maWcubG9jayIgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPmV4cGVjdCAmJgorCT4uZ2l0L2NvbmZpZy5sb2NrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSBzZXQtdXJsIHNvbWVyZW1vdGUgYmF6ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCBiYXInICcKKwlnaXQgcmVtb3RlIHNldC11cmwgc29tZXJlbW90ZSBiYXIgJiYKKwllY2hvIGJhciA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCBiYXogYmFyJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIHNvbWVyZW1vdGUgYmF6IGJhciAmJgorCWVjaG8gYmF6ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIHpvdCBiYXInICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIHNldC11cmwgc29tZXJlbW90ZSB6b3QgYmFyICYmCisJZWNobyBiYXogPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1wdXNoIHpvdCBiYXonICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIHNvbWVyZW1vdGUgem90IGJheiAmJgorCWVjaG8gIllZWSIgPmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUucHVzaHVybCA+YWN0dWFsICYmCisJZWNobyAiWVlZIiA+PmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+PmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIC0tcHVzaCB6b3QnICcKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIHNvbWVyZW1vdGUgem90ICYmCisJZWNobyB6b3QgPmV4cGVjdCAmJgorCWVjaG8gIllZWSIgPj5leHBlY3QgJiYKKwllY2hvIGJheiA+PmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQtdXJsIHdpdGggZGlmZmVyZW50IHVybHMnICcKKwllY2hvIGJheiB8IGdldF91cmxfdGVzdCBzb21lcmVtb3RlICYmCisJZWNobyBiYXogfCBnZXRfdXJsX3Rlc3QgLS1hbGwgc29tZXJlbW90ZSAmJgorCWVjaG8gem90IHwgZ2V0X3VybF90ZXN0IC0tcHVzaCBzb21lcmVtb3RlICYmCisJZWNobyB6b3QgfCBnZXRfdXJsX3Rlc3QgLS1wdXNoIC0tYWxsIHNvbWVyZW1vdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1wdXNoIHF1eCB6b3QnICcKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIHNvbWVyZW1vdGUgcXV4IHpvdCAmJgorCWVjaG8gcXV4ID5leHBlY3QgJiYKKwllY2hvICJZWVkiID4+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1wdXNoIGZvbyBxdSt4JyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tcHVzaCBzb21lcmVtb3RlIGZvbyBxdSt4ICYmCisJZWNobyBmb28gPmV4cGVjdCAmJgorCWVjaG8gIllZWSIgPj5leHBlY3QgJiYKKwllY2hvIGJheiA+PmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLXB1c2ggLS1hZGQgYWFhJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tcHVzaCAtLWFkZCBzb21lcmVtb3RlIGFhYSAmJgorCWVjaG8gZm9vID5leHBlY3QgJiYKKwllY2hvIGFhYSA+PmV4cGVjdCAmJgorCWVjaG8gIllZWSIgPj5leHBlY3QgJiYKKwllY2hvIGJheiA+PmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQtdXJsIG9uIG11bHRpIHB1c2ggcmVtb3RlJyAnCisJZWNobyBmb28gfCBnZXRfdXJsX3Rlc3QgLS1wdXNoIHNvbWVyZW1vdGUgJiYKKwlnZXRfdXJsX3Rlc3QgLS1wdXNoIC0tYWxsIHNvbWVyZW1vdGUgPDwtXEVPRgorCWZvbworCWFhYQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLXB1c2ggYmFyIGFhYScgJworCWdpdCByZW1vdGUgc2V0LXVybCAtLXB1c2ggc29tZXJlbW90ZSBiYXIgYWFhICYmCisJZWNobyBmb28gPmV4cGVjdCAmJgorCWVjaG8gYmFyID4+ZXhwZWN0ICYmCisJZWNobyAiWVlZIiA+PmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUucHVzaHVybCA+YWN0dWFsICYmCisJZWNobyAiWVlZIiA+PmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+PmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIC0tcHVzaCAtLWRlbGV0ZSBiYXInICcKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIC0tZGVsZXRlIHNvbWVyZW1vdGUgYmFyICYmCisJZWNobyBmb28gPmV4cGVjdCAmJgorCWVjaG8gIllZWSIgPj5leHBlY3QgJiYKKwllY2hvIGJheiA+PmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLXB1c2ggLS1kZWxldGUgZm9vJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tcHVzaCAtLWRlbGV0ZSBzb21lcmVtb3RlIGZvbyAmJgorCWVjaG8gIllZWSIgPmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUucHVzaHVybCA+YWN0dWFsICYmCisJZWNobyAiWVlZIiA+PmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+PmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIC0tYWRkIGJiYicgJworCWdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCBzb21lcmVtb3RlIGJiYiAmJgorCWVjaG8gIllZWSIgPmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJZWNobyBiYmIgPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0LXVybCBvbiBtdWx0aSBmZXRjaCByZW1vdGUnICcKKwllY2hvIGJheiB8IGdldF91cmxfdGVzdCBzb21lcmVtb3RlICYmCisJZ2V0X3VybF90ZXN0IC0tYWxsIHNvbWVyZW1vdGUgPDwtXEVPRgorCWJhegorCWJiYgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSAuKicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSBzb21lcmVtb3RlIC5cKiAmJgorCWVjaG8gIllZWSIgPmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJZWNobyBiYmIgPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1kZWxldGUgYmJiJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIHNvbWVyZW1vdGUgYmJiICYmCisJZWNobyAiWVlZIiA+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1kZWxldGUgYmF6JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIHNvbWVyZW1vdGUgYmF6ICYmCisJZWNobyAiWVlZIiA+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1hZGQgY2NjJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIHNvbWVyZW1vdGUgY2NjICYmCisJZWNobyAiWVlZIiA+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwllY2hvIGNjYyA+PmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSBiYXonICcKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgc29tZXJlbW90ZSBiYXogJiYKKwllY2hvICJZWVkiID5leHBlY3QgJiYKKwllY2hvIGNjYyA+PmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRyYSBhcmdzOiBzZXR1cCcgJworCSMgYWRkIGEgZHVtbXkgb3JpZ2luIHNvIHRoYXQgdGhpcyBkb2VzIG5vdCB0cmlnZ2VyIGZhaWx1cmUKKwlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gLgorJworCit0ZXN0X2V4dHJhX2FyZyAoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZXh0cmEgYXJnczogJCoiICIKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSAkKiBib2d1c19leHRyYV9hcmcgMj5hY3R1YWwgJiYKKwkJdGVzdF9pMThuZ3JlcCAnXnVzYWdlOicgYWN0dWFsCisJIgorfQorCit0ZXN0X2V4dHJhX2FyZyBhZGQgbmljayB1cmwKK3Rlc3RfZXh0cmFfYXJnIHJlbmFtZSBvcmlnaW4gbmV3bmFtZQordGVzdF9leHRyYV9hcmcgcmVtb3ZlIG9yaWdpbgordGVzdF9leHRyYV9hcmcgc2V0LWhlYWQgb3JpZ2luIG1hc3RlcgorIyBzZXQtYnJhbmNoZXMgdGFrZXMgYW55IG51bWJlciBvZiBhcmdzCit0ZXN0X2V4dHJhX2FyZyBnZXQtdXJsIG9yaWdpbiBuZXd1cmwKK3Rlc3RfZXh0cmFfYXJnIHNldC11cmwgb3JpZ2luIG5ld3VybCBvbGR1cmwKKyMgc2hvdyB0YWtlcyBhbnkgbnVtYmVyIG9mIGFyZ3MKKyMgcHJ1bmUgdGFrZXMgYW55IG51bWJlciBvZiBhcmdzCisjIHVwZGF0ZSB0YWtlcyBhbnkgbnVtYmVyIG9mIGFyZ3MKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHJlbW90ZSBtYXRjaGluZyB0aGUgImluc3RlYWRPZiIgVVJMJyAnCisJZ2l0IGNvbmZpZyB1cmwueHl6QGV4YW1wbGUuY29tLmluc3RlYWRPZiBiYWNrdXAgJiYKKwlnaXQgcmVtb3RlIGFkZCBiYWNrdXAgeHl6QGV4YW1wbGUuY29tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VucXVhbGlmaWVkIDxkc3Q+IHJlZnNwZWMgRFdJTSBhbmQgYWR2aWNlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICIoY2QgdGVzdCAmJiBnaXQgdGFnIC1kIHNvbWUtdGFnKSIgJiYKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IHRhZyAtYSAtbSAiU29tZSB0YWciIHNvbWUtdGFnIG1hc3RlciAmJgorCQlleGl0X3dpdGg9dHJ1ZSAmJgorCQlmb3IgdHlwZSBpbiBjb21taXQgdGFnIHRyZWUgYmxvYgorCQlkbworCQkJaWYgdGVzdCAiJHR5cGUiID0gImJsb2IiCisJCQl0aGVuCisJCQkJb2lkPSQoZ2l0IHJldi1wYXJzZSBzb21lLXRhZzpmaWxlKQorCQkJZWxzZQorCQkJCW9pZD0kKGdpdCByZXYtcGFyc2Ugc29tZS10YWdeeyR0eXBlfSkKKwkJCWZpICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBvcmlnaW4gJG9pZDpkc3QgMj5lcnIgJiYKKwkJCXRlc3RfaTE4bmdyZXAgImVycm9yOiBUaGUgZGVzdGluYXRpb24geW91IiBlcnIgJiYKKwkJCXRlc3RfaTE4bmdyZXAgImhpbnQ6IERpZCB5b3UgbWVhbiIgZXJyICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgYWR2aWNlLnB1c2hVbnF1YWxpZmllZFJlZk5hbWU9ZmFsc2UgXAorCQkJCXB1c2ggb3JpZ2luICRvaWQ6ZHN0IDI+ZXJyICYmCisJCQl0ZXN0X2kxOG5ncmVwICJlcnJvcjogVGhlIGRlc3RpbmF0aW9uIHlvdSIgZXJyICYmCisJCQl0ZXN0X2kxOG5ncmVwICEgImhpbnQ6IERpZCB5b3UgbWVhbiIgZXJyIHx8CisJCQlleGl0X3dpdGg9ZmFsc2UKKwkJZG9uZSAmJgorCQkkZXhpdF93aXRoCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZzL3JlbW90ZXMvKiA8c3JjPiByZWZzcGVjIGFuZCB1bnF1YWxpZmllZCA8ZHN0PiBEV0lNIGFuZCBhZHZpY2UnICcKKwkoCisJCWNkIHR3byAmJgorCQlnaXQgdGFnIC1hIC1tICJTb21lIHRhZyIgbXktdGFnIG1hc3RlciAmJgorCQlnaXQgdXBkYXRlLXJlZiByZWZzL3RyZWVzL215LWhlYWQtdHJlZSBIRUFEXnt0cmVlfSAmJgorCQlnaXQgdXBkYXRlLXJlZiByZWZzL2Jsb2JzL215LWZpbGUtYmxvYiBIRUFEOmZpbGUKKwkpICYmCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLnR3by5mZXRjaCAiK3JlZnMvdGFncy8qOnJlZnMvcmVtb3Rlcy90YWdzLWZyb20tdHdvLyoiICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLnR3by5mZXRjaCAiK3JlZnMvdHJlZXMvKjpyZWZzL3JlbW90ZXMvdHJlZXMtZnJvbS10d28vKiIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudHdvLmZldGNoICIrcmVmcy9ibG9icy8qOnJlZnMvcmVtb3Rlcy9ibG9icy1mcm9tLXR3by8qIiAmJgorCQlnaXQgZmV0Y2ggLS1uby10YWdzIHR3byAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIG9yaWdpbiByZWZzL3JlbW90ZXMvdHdvL2Fub3RoZXI6ZHN0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgImVycm9yOiBUaGUgZGVzdGluYXRpb24geW91IiBlcnIgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBvcmlnaW4gcmVmcy9yZW1vdGVzL3RhZ3MtZnJvbS10d28vbXktdGFnOmRzdC10YWcgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiZXJyb3I6IFRoZSBkZXN0aW5hdGlvbiB5b3UiIGVyciAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIG9yaWdpbiByZWZzL3JlbW90ZXMvdHJlZXMtZnJvbS10d28vbXktaGVhZC10cmVlOmRzdC10cmVlIDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgImVycm9yOiBUaGUgZGVzdGluYXRpb24geW91IiBlcnIgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBvcmlnaW4gcmVmcy9yZW1vdGVzL2Jsb2JzLWZyb20tdHdvL215LWZpbGUtYmxvYjpkc3QtYmxvYiAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJlcnJvcjogVGhlIGRlc3RpbmF0aW9uIHlvdSIgZXJyCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MDYtcmVtb3RlLWdyb3Vwcy5zaCBiL3QvdDU1MDYtcmVtb3RlLWdyb3Vwcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44M2Q1NTU4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUwNi1yZW1vdGUtZ3JvdXBzLnNoCkBAIC0wLDAgKzEsOTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmVtb3RlIGdyb3VwIGhhbmRsaW5nJworLiAuL3Rlc3QtbGliLnNoCisKK21hcmsoKSB7CisJZWNobyAiJDEiID5tYXJrCit9CisKK3VwZGF0ZV9yZXBvKCkgeworCShjZCAkMSAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1GIC4uL21hcmspCit9CisKK3VwZGF0ZV9yZXBvcygpIHsKKwl1cGRhdGVfcmVwbyBvbmUgJDEgJiYKKwl1cGRhdGVfcmVwbyB0d28gJDEKK30KKworcmVwb19mZXRjaGVkKCkgeworCWlmIHRlc3QgIiQoZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXMgJDEgLS0pIiA9ICIkKGNhdCBtYXJrKSI7IHRoZW4KKwkJZWNobyA+JjIgInJlcG8gd2FzIGZldGNoZWQ6ICQxIgorCQlyZXR1cm4gMAorCWZpCisJZWNobyA+JjIgInJlcG8gd2FzIG5vdCBmZXRjaGVkOiAkMSIKKwlyZXR1cm4gMQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIG9uZSAmJiAoY2Qgb25lICYmIGdpdCBpbml0KSAmJgorCW1rZGlyIHR3byAmJiAoY2QgdHdvICYmIGdpdCBpbml0KSAmJgorCWdpdCByZW1vdGUgYWRkIC1tIG1hc3RlciBvbmUgb25lICYmCisJZ2l0IHJlbW90ZSBhZGQgLW0gbWFzdGVyIHR3byB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZ3JvdXAgdXBkYXRlcyBhbGwnICcKKwltYXJrIHVwZGF0ZS1hbGwgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwlnaXQgcmVtb3RlIHVwZGF0ZSAmJgorCXJlcG9fZmV0Y2hlZCBvbmUgJiYKKwlyZXBvX2ZldGNoZWQgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbmV4aXN0ZW50IGdyb3VwIHByb2R1Y2VzIGVycm9yJyAnCisJbWFyayBub25leGlzdGVudCAmJgorCXVwZGF0ZV9yZXBvcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgdXBkYXRlIG5vbmV4aXN0ZW50ICYmCisJISByZXBvX2ZldGNoZWQgb25lICYmCisJISByZXBvX2ZldGNoZWQgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nIGdyb3VwIHVwZGF0ZXMgYWxsIG1lbWJlcnMgKHJlbW90ZSB1cGRhdGUpJyAnCisJbWFyayBncm91cC1hbGwgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZXMuYWxsIG9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3Rlcy5hbGwgdHdvICYmCisJZ2l0IHJlbW90ZSB1cGRhdGUgYWxsICYmCisJcmVwb19mZXRjaGVkIG9uZSAmJgorCXJlcG9fZmV0Y2hlZCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgZ3JvdXAgdXBkYXRlcyBhbGwgbWVtYmVycyAoZmV0Y2gpJyAnCisJbWFyayBmZXRjaC1ncm91cC1hbGwgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwlnaXQgZmV0Y2ggYWxsICYmCisJcmVwb19mZXRjaGVkIG9uZSAmJgorCXJlcG9fZmV0Y2hlZCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgZ3JvdXAgZG9lcyBub3QgdXBkYXRlIG5vbi1tZW1iZXJzIChyZW1vdGUgdXBkYXRlKScgJworCW1hcmsgZ3JvdXAtc29tZSAmJgorCXVwZGF0ZV9yZXBvcyAmJgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3Rlcy5zb21lIG9uZSAmJgorCWdpdCByZW1vdGUgdXBkYXRlIHNvbWUgJiYKKwlyZXBvX2ZldGNoZWQgb25lICYmCisJISByZXBvX2ZldGNoZWQgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nIGdyb3VwIGRvZXMgbm90IHVwZGF0ZSBub24tbWVtYmVycyAoZmV0Y2gpJyAnCisJbWFyayBmZXRjaC1ncm91cC1zb21lICYmCisJdXBkYXRlX3JlcG9zICYmCisJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGVzLnNvbWUgb25lICYmCisJZ2l0IHJlbW90ZSB1cGRhdGUgc29tZSAmJgorCXJlcG9fZmV0Y2hlZCBvbmUgJiYKKwkhIHJlcG9fZmV0Y2hlZCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgcmVtb3RlIG5hbWUgdXBkYXRlcyB0aGF0IHJlbW90ZScgJworCW1hcmsgcmVtb3RlLW5hbWUgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwlnaXQgcmVtb3RlIHVwZGF0ZSBvbmUgJiYKKwlyZXBvX2ZldGNoZWQgb25lICYmCisJISByZXBvX2ZldGNoZWQgdHdvCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwNy1yZW1vdGUtZW52aXJvbm1lbnQuc2ggYi90L3Q1NTA3LXJlbW90ZS1lbnZpcm9ubWVudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNjE0OTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUwNy1yZW1vdGUtZW52aXJvbm1lbnQuc2gKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrIGVudmlyb25tZW50IHNob3dlZCB0byByZW1vdGUgc2lkZSBvZiB0cmFuc3BvcnRzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCAicmVtb3RlIiBwdXNoIHNpdHVhdGlvbicgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCWdpdCBjb25maWcgcHVzaC5kZWZhdWx0IGN1cnJlbnQgJiYKKwlnaXQgaW5pdCByZW1vdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZha2Ugc3NoJyAnCisJR0lUX1NTSF9DT01NQU5EPSJmKCkgeworCQljZCBcIlwkVFJBU0hfRElSRUNUT1JZXCIgJiYKKwkJZXZhbCBcIlwkMlwiCisJfTsgZiIgJiYKKwlleHBvcnQgR0lUX1NTSF9DT01NQU5EICYmCisJZXhwb3J0IFRSQVNIX0RJUkVDVE9SWQorJworCisjIGR1ZSB0byByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoPXRydWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpcm0gZGVmYXVsdCBwdXNoIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggcmVtb3RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyBkb2VzIG5vdCB0cmF2ZWwgb3ZlciBzYW1lLW1hY2hpbmUgcHVzaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoPWZhbHNlIHB1c2ggcmVtb3RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyBkb2VzIG5vdCB0cmF2ZWwgb3ZlciBzc2ggcHVzaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoPWZhbHNlIHB1c2ggaG9zdDpyZW1vdGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTA5LWZldGNoLXB1c2gtbmFtZXNwYWNlcy5zaCBiL3QvdDU1MDktZmV0Y2gtcHVzaC1uYW1lc3BhY2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2N2Y3OTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTA5LWZldGNoLXB1c2gtbmFtZXNwYWNlcy5zaApAQCAtMCwwICsxLDE2NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoL3B1c2ggaW52b2x2aW5nIHJlZiBuYW1lc3BhY2VzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgLS1nbG9iYWwgcHJvdG9jb2wuZXh0LmFsbG93IHVzZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgaW5pdCBvcmlnaW5hbCAmJgorCSgKKwkJY2Qgb3JpZ2luYWwgJiYKKwkJZWNobyAwID5jb3VudCAmJgorCQlnaXQgYWRkIGNvdW50ICYmCisJCXRlc3RfY29tbWl0IDAgJiYKKwkJZWNobyAxID5jb3VudCAmJgorCQlnaXQgYWRkIGNvdW50ICYmCisJCXRlc3RfY29tbWl0IDEgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgcHVzaGVlLW5hbWVzcGFjZWQgImV4dDo6Z2l0IC0tbmFtZXNwYWNlPW5hbWVzcGFjZSAlcyAuLi9wdXNoZWUiICYmCisJCWdpdCByZW1vdGUgYWRkIHB1c2hlZS11bm5hbWVzcGFjZWQgLi4vcHVzaGVlCisJKSAmJgorCWNvbW1pdDA9JChjZCBvcmlnaW5hbCAmJiBnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCWNvbW1pdDE9JChjZCBvcmlnaW5hbCAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGluaXQgLS1iYXJlIHB1c2hlZSAmJgorCWdpdCBpbml0IHB1bGxlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIGludG8gYSByZXBvc2l0b3J5IHVzaW5nIGEgcmVmIG5hbWVzcGFjZScgJworCSgKKwkJY2Qgb3JpZ2luYWwgJiYKKwkJZ2l0IHB1c2ggcHVzaGVlLW5hbWVzcGFjZWQgbWFzdGVyICYmCisJCWdpdCBscy1yZW1vdGUgcHVzaGVlLW5hbWVzcGFjZWQgPmFjdHVhbCAmJgorCQlwcmludGYgIiRjb21taXQxXHRyZWZzL2hlYWRzL21hc3RlclxuIiA+ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJCWdpdCBwdXNoIHB1c2hlZS1uYW1lc3BhY2VkIC0tdGFncyAmJgorCQlnaXQgbHMtcmVtb3RlIHB1c2hlZS1uYW1lc3BhY2VkID5hY3R1YWwgJiYKKwkJcHJpbnRmICIkY29tbWl0MFx0cmVmcy90YWdzLzBcbiIgPj5leHBlY3RlZCAmJgorCQlwcmludGYgIiRjb21taXQxXHRyZWZzL3RhZ3MvMVxuIiA+PmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCQkjIFZlcmlmeSB0aGF0IHRoZSBHSVRfTkFNRVNQQUNFIGVudmlyb25tZW50IHZhcmlhYmxlIHdvcmtzIGFzIHdlbGwKKwkJR0lUX05BTUVTUEFDRT1uYW1lc3BhY2UgZ2l0IGxzLXJlbW90ZSAiZXh0OjpnaXQgJXMgLi4vcHVzaGVlIiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCQkjIFZlcmlmeSB0aGF0IC0tbmFtZXNwYWNlIG92ZXJyaWRlcyBHSVRfTkFNRVNQQUNFCisJCUdJVF9OQU1FU1BBQ0U9Z2FyYmFnZSBnaXQgbHMtcmVtb3RlIHB1c2hlZS1uYW1lc3BhY2VkID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJCSMgVHJ5IGEgbmFtZXNwYWNlIHdpdGggbm8gY29udGVudAorCQlnaXQgbHMtcmVtb3RlICJleHQ6OmdpdCAtLW5hbWVzcGFjZT1nYXJiYWdlICVzIC4uL3B1c2hlZSIgPmFjdHVhbCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisJCWdpdCBscy1yZW1vdGUgcHVzaGVlLXVubmFtZXNwYWNlZCA+YWN0dWFsICYmCisJCXNlZCAtZSAic3xyZWZzL3xyZWZzL25hbWVzcGFjZXMvbmFtZXNwYWNlL3JlZnMvfCIgZXhwZWN0ZWQgPmV4cGVjdGVkLnVubmFtZXNwYWNlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZC51bm5hbWVzcGFjZWQgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIGZyb20gYSByZXBvc2l0b3J5IHVzaW5nIGEgcmVmIG5hbWVzcGFjZScgJworCSgKKwkJY2QgcHVsbGVyICYmCisJCWdpdCByZW1vdGUgYWRkIC1mIHB1c2hlZS1uYW1lc3BhY2VkICJleHQ6OmdpdCAtLW5hbWVzcGFjZT1uYW1lc3BhY2UgJXMgLi4vcHVzaGVlIiAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvID5hY3R1YWwgJiYKKwkJcHJpbnRmICIkY29tbWl0MSBjb21taXRcdHJlZnMvcmVtb3Rlcy9wdXNoZWUtbmFtZXNwYWNlZC9tYXN0ZXJcbiIgPmV4cGVjdGVkICYmCisJCXByaW50ZiAiJGNvbW1pdDAgY29tbWl0XHRyZWZzL3RhZ3MvMFxuIiA+PmV4cGVjdGVkICYmCisJCXByaW50ZiAiJGNvbW1pdDEgY29tbWl0XHRyZWZzL3RhZ3MvMVxuIiA+PmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKworIyBUaGlzIHRlc3Qgd2l0aCBjbG9uZSAtLW1pcnJvciBjaGVja3MgZm9yIHBvc3NpYmxlIHJlZ3Jlc3Npb25zIGluIGNsb25lCisjIG9yIHRoZSBtYWNoaW5lcnkgdW5kZXJuZWF0aCBpdC4gSXQgZW5zdXJlcyB0aGF0IG5vIGZ1dHVyZSBjaGFuZ2UKKyMgY2F1c2VzIGNsb25lIHRvIGlnbm9yZSByZWZzIGluIHJlZnMvbmFtZXNwYWNlcy8qLiBJbiBwYXJ0aWN1bGFyLCBpdAorIyBwcm90ZWN0cyBhZ2FpbnN0IGEgcmVncmVzc2lvbiBjYXVzZWQgYnkgYW55IGZ1dHVyZSBjaGFuZ2UgdG8gdGhlIHJlZnMKKyMgbWFjaGluZXJ5IHRoYXQgbWlnaHQgY2F1c2UgaXQgdG8gaWdub3JlIHJlZnMgb3V0c2lkZSBvZiByZWZzL2hlYWRzLyoKKyMgb3IgcmVmcy90YWdzLyouIE1vcmUgZ2VuZXJhbGx5LCB0aGlzIHRlc3QgYWxzbyBjaGVja3MgdGhlIGhpZ2gtbGV2ZWwKKyMgZnVuY3Rpb25hbGl0eSBvZiB1c2luZyBjbG9uZSAtLW1pcnJvciB0byBiYWNrIHVwIGEgc2V0IG9mIHJlcG9zIGhvc3RlZAorIyBpbiB0aGUgbmFtZXNwYWNlcyBvZiBhIHNpbmdsZSByZXBvLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlycm9yaW5nIGEgcmVwb3NpdG9yeSB1c2luZyBhIHJlZiBuYW1lc3BhY2UnICcKKwlnaXQgY2xvbmUgLS1taXJyb3IgcHVzaGVlIG1pcnJvciAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy8gPmFjdHVhbCAmJgorCQlwcmludGYgIiRjb21taXQxIGNvbW1pdFx0cmVmcy9uYW1lc3BhY2VzL25hbWVzcGFjZS9yZWZzL2hlYWRzL21hc3RlclxuIiA+ZXhwZWN0ZWQgJiYKKwkJcHJpbnRmICIkY29tbWl0MCBjb21taXRcdHJlZnMvbmFtZXNwYWNlcy9uYW1lc3BhY2UvcmVmcy90YWdzLzBcbiIgPj5leHBlY3RlZCAmJgorCQlwcmludGYgIiRjb21taXQxIGNvbW1pdFx0cmVmcy9uYW1lc3BhY2VzL25hbWVzcGFjZS9yZWZzL3RhZ3MvMVxuIiA+PmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGlkZSBuYW1lc3BhY2VkIHJlZnMgd2l0aCB0cmFuc2Zlci5oaWRlUmVmcycgJworCUdJVF9OQU1FU1BBQ0U9bmFtZXNwYWNlIFwKKwkJZ2l0IC1DIHB1c2hlZSAtYyB0cmFuc2Zlci5oaWRlUmVmcz1yZWZzL3RhZ3MgXAorCQlscy1yZW1vdGUgImV4dDo6Z2l0ICVzIC4iID5hY3R1YWwgJiYKKwlwcmludGYgIiRjb21taXQxXHRyZWZzL2hlYWRzL21hc3RlclxuIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdGhhdCB0cmFuc2Zlci5oaWRlUmVmcyBkb2VzIG5vdCBtYXRjaCB1bnN0cmlwcGVkIHJlZnMnICcKKwlHSVRfTkFNRVNQQUNFPW5hbWVzcGFjZSBcCisJCWdpdCAtQyBwdXNoZWUgLWMgdHJhbnNmZXIuaGlkZVJlZnM9cmVmcy9uYW1lc3BhY2VzL25hbWVzcGFjZS9yZWZzL3RhZ3MgXAorCQlscy1yZW1vdGUgImV4dDo6Z2l0ICVzIC4iID5hY3R1YWwgJiYKKwlwcmludGYgIiRjb21taXQxXHRyZWZzL2hlYWRzL21hc3RlclxuIiA+ZXhwZWN0ZWQgJiYKKwlwcmludGYgIiRjb21taXQwXHRyZWZzL3RhZ3MvMFxuIiA+PmV4cGVjdGVkICYmCisJcHJpbnRmICIkY29tbWl0MVx0cmVmcy90YWdzLzFcbiIgPj5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoaWRlIGZ1bGwgcmVmcyB3aXRoIHRyYW5zZmVyLmhpZGVSZWZzJyAnCisJR0lUX05BTUVTUEFDRT1uYW1lc3BhY2UgXAorCQlnaXQgLUMgcHVzaGVlIC1jIHRyYW5zZmVyLmhpZGVSZWZzPSJecmVmcy9uYW1lc3BhY2VzL25hbWVzcGFjZS9yZWZzL3RhZ3MiIFwKKwkJbHMtcmVtb3RlICJleHQ6OmdpdCAlcyAuIiA+YWN0dWFsICYmCisJcHJpbnRmICIkY29tbWl0MVx0cmVmcy9oZWFkcy9tYXN0ZXJcbiIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyeSB0byB1cGRhdGUgYSBoaWRkZW4gcmVmJyAnCisJdGVzdF9jb25maWcgLUMgcHVzaGVlIHRyYW5zZmVyLmhpZGVSZWZzIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIG9yaWdpbmFsIHB1c2ggcHVzaGVlLW5hbWVzcGFjZWQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyeSB0byB1cGRhdGUgYSByZWYgdGhhdCBpcyBub3QgaGlkZGVuJyAnCisJdGVzdF9jb25maWcgLUMgcHVzaGVlIHRyYW5zZmVyLmhpZGVSZWZzIHJlZnMvbmFtZXNwYWNlcy9uYW1lc3BhY2UvcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgLUMgb3JpZ2luYWwgcHVzaCBwdXNoZWUtbmFtZXNwYWNlZCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJ5IHRvIHVwZGF0ZSBhIGhpZGRlbiBmdWxsIHJlZicgJworCXRlc3RfY29uZmlnIC1DIHB1c2hlZSB0cmFuc2Zlci5oaWRlUmVmcyAiXnJlZnMvbmFtZXNwYWNlcy9uYW1lc3BhY2UvcmVmcy9oZWFkcy9tYXN0ZXIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIG9yaWdpbmFsIHB1c2ggcHVzaGVlLW5hbWVzcGFjZWQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBhbWJpZ3VvdXMgSEVBRCcgJworCWdpdCBpbml0IGFtYmlndW91cyAmJgorCSgKKwkJY2QgYW1iaWd1b3VzICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBmb28gJiYKKwkJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9uYW1lc3BhY2VzL25zL3JlZnMvaGVhZHMvb25lIEhFQUQgJiYKKwkJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9uYW1lc3BhY2VzL25zL3JlZnMvaGVhZHMvdHdvIEhFQUQgJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiByZWZzL25hbWVzcGFjZXMvbnMvSEVBRCBcCisJCQlyZWZzL25hbWVzcGFjZXMvbnMvcmVmcy9oZWFkcy90d28KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNob29zZXMgY29ycmVjdCBIRUFEICh2MCknICcKKwlHSVRfTkFNRVNQQUNFPW5zIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTAgXAorCQljbG9uZSBhbWJpZ3VvdXMgYW1iaWd1b3VzLXYwICYmCisJZWNobyByZWZzL2hlYWRzL3R3byA+ZXhwZWN0ICYmCisJZ2l0IC1DIGFtYmlndW91cy12MCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBjaG9vc2VzIGNvcnJlY3QgSEVBRCAodjIpJyAnCisJR0lUX05BTUVTUEFDRT1ucyBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJY2xvbmUgYW1iaWd1b3VzIGFtYmlndW91cy12MiAmJgorCWVjaG8gcmVmcy9oZWFkcy90d28gPmV4cGVjdCAmJgorCWdpdCAtQyBhbWJpZ3VvdXMtdjIgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVueUN1cnJlbnRCcmFuY2ggYW5kIHVuYm9ybiBicmFuY2ggd2l0aCByZWYgbmFtZXNwYWNlJyAnCisJKAorCQljZCBvcmlnaW5hbCAmJgorCQlnaXQgaW5pdCB1bmJvcm4gJiYKKwkJZ2l0IHJlbW90ZSBhZGQgdW5ib3JuLW5hbWVzcGFjZWQgImV4dDo6Z2l0IC0tbmFtZXNwYWNlPW5hbWVzcGFjZSAlcyB1bmJvcm4iICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHVuYm9ybi1uYW1lc3BhY2VkIEhFQUQ6bWFzdGVyICYmCisJCWdpdCAtQyB1bmJvcm4gY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggdXBkYXRlSW5zdGVhZCAmJgorCQlnaXQgcHVzaCB1bmJvcm4tbmFtZXNwYWNlZCBIRUFEOm1hc3RlcgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTEwLWZldGNoLnNoIGIvdC90NTUxMC1mZXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNjZkYmUwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxMC1mZXRjaC5zaApAQCAtMCwwICsxLDEwNjAgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMDYsIEp1bmlvIEMgSGFtYW5vLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdQZXIgYnJhbmNoIGNvbmZpZyB2YXJpYWJsZXMgYWZmZWN0cyAiZ2l0IGZldGNoIi4KKworJworCisuIC4vdGVzdC1saWIuc2gKKworRD0kKHB3ZCkKKwordGVzdF9idW5kbGVfb2JqZWN0X2NvdW50ICgpIHsKKwlnaXQgdmVyaWZ5LXBhY2sgLXYgIiQxIiA+dmVyaWZ5Lm91dCAmJgorCXRlc3QgIiQyIiA9ICQoZ3JlcCAiXiRPSURfUkVHRVggIiB2ZXJpZnkub3V0IHwgd2MgLWwpCit9CisKK2NvbnZlcnRfYnVuZGxlX3RvX3BhY2sgKCkgeworCXdoaWxlIHJlYWQgeCAmJiB0ZXN0IC1uICIkeCIKKwlkbworCQk6OworCWRvbmUKKwljYXQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyA+ZmlsZSBvcmlnaW5hbCAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gb3JpZ2luYWwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIGFuZCBzZXR1cCBjaGlsZCByZXBvcyIgJworCWdpdCBjbG9uZSAuIG9uZSAmJgorCSgKKwkJY2Qgb25lICYmCisJCWVjaG8gPmZpbGUgdXBkYXRlZCBieSBvbmUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAidXBkYXRlZCBieSBvbmUiCisJKSAmJgorCWdpdCBjbG9uZSAuIHR3byAmJgorCSgKKwkJY2QgdHdvICYmCisJCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgb25lICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9uZS51cmwgLi4vb25lLy5naXQvICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9uZS5mZXRjaCByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL29uZQorCSkgJiYKKwlnaXQgY2xvbmUgLiB0aHJlZSAmJgorCSgKKwkJY2QgdGhyZWUgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSB0d28gJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvb25lICYmCisJCW1rZGlyIC1wIC5naXQvcmVtb3RlcyAmJgorCQl7CisJCQllY2hvICJVUkw6IC4uL3R3by8uZ2l0LyIKKwkJCWVjaG8gIlB1bGw6IHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvdHdvIgorCQkJZWNobyAiUHVsbDogcmVmcy9oZWFkcy9vbmU6cmVmcy9oZWFkcy9vbmUiCisJCX0gPi5naXQvcmVtb3Rlcy90d28KKwkpICYmCisJZ2l0IGNsb25lIC4gYnVuZGxlICYmCisJZ2l0IGNsb25lIC4gc2V2ZW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggdGVzdCIgJworCWNkICIkRCIgJiYKKwllY2hvID5maWxlIHVwZGF0ZWQgYnkgb3JpZ2luICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAidXBkYXRlZCBieSBvcmlnaW4iICYmCisJY2QgdHdvICYmCisJZ2l0IGZldGNoICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL29uZSAmJgorCW1pbmU9JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvb25lKSAmJgorCWhpcz0kKGNkIC4uL29uZSAmJiBnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCXRlc3QgInokbWluZSIgPSAieiRoaXMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIHRlc3QgZm9yLW1lcmdlIiAnCisJY2QgIiREIiAmJgorCWNkIHRocmVlICYmCisJZ2l0IGZldGNoICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3R3byAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9vbmUgJiYKKwltYXN0ZXJfaW5fdHdvPSQoY2QgLi4vdHdvICYmIGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgorCW9uZV9pbl90d289JChjZCAuLi90d28gJiYgZ2l0IHJldi1wYXJzZSBvbmUpICYmCisJeworCQllY2hvICIkb25lX2luX3R3bwkiCisJCWVjaG8gIiRtYXN0ZXJfaW5fdHdvCW5vdC1mb3ItbWVyZ2UiCisJfSA+ZXhwZWN0ZWQgJiYKKwljdXQgLWYgLTIgLmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tcHJ1bmUgb24gaXRzIG93biB3b3JrcyBhcyBleHBlY3RlZCcgJworCWNkICIkRCIgJiYKKwlnaXQgY2xvbmUgLiBwcnVuZSAmJgorCWNkIHBydW5lICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9leHRyYWJyYW5jaCBtYXN0ZXIgJiYKKworCWdpdCBmZXRjaCAtLXBydW5lIG9yaWdpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2Ugb3JpZ2luL2V4dHJhYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tcHJ1bmUgd2l0aCBhIGJyYW5jaCBuYW1lIGtlZXBzIGJyYW5jaGVzJyAnCisJY2QgIiREIiAmJgorCWdpdCBjbG9uZSAuIHBydW5lLWJyYW5jaCAmJgorCWNkIHBydW5lLWJyYW5jaCAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vZXh0cmFicmFuY2ggbWFzdGVyICYmCisKKwlnaXQgZmV0Y2ggLS1wcnVuZSBvcmlnaW4gbWFzdGVyICYmCisJZ2l0IHJldi1wYXJzZSBvcmlnaW4vZXh0cmFicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggLS1wcnVuZSB3aXRoIGEgbmFtZXNwYWNlIGtlZXBzIG90aGVyIG5hbWVzcGFjZXMnICcKKwljZCAiJEQiICYmCisJZ2l0IGNsb25lIC4gcHJ1bmUtbmFtZXNwYWNlICYmCisJY2QgcHJ1bmUtbmFtZXNwYWNlICYmCisKKwlnaXQgZmV0Y2ggLS1wcnVuZSBvcmlnaW4gcmVmcy9oZWFkcy9hLyo6cmVmcy9yZW1vdGVzL29yaWdpbi9hLyogJiYKKwlnaXQgcmV2LXBhcnNlIG9yaWdpbi9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggLS1wcnVuZSBoYW5kbGVzIG92ZXJsYXBwaW5nIHJlZnNwZWNzJyAnCisJY2QgIiREIiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcHVsbC80Mi9oZWFkIG1hc3RlciAmJgorCWdpdCBjbG9uZSAuIHBydW5lLW92ZXJsYXBwaW5nICYmCisJY2QgcHJ1bmUtb3ZlcmxhcHBpbmcgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4uZmV0Y2ggcmVmcy9wdWxsLyovaGVhZDpyZWZzL3JlbW90ZXMvb3JpZ2luL3ByLyogJiYKKworCWdpdCBmZXRjaCAtLXBydW5lIG9yaWdpbiAmJgorCWdpdCByZXYtcGFyc2Ugb3JpZ2luL21hc3RlciAmJgorCWdpdCByZXYtcGFyc2Ugb3JpZ2luL3ByLzQyICYmCisKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIHJlbW90ZS5vcmlnaW4uZmV0Y2ggJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4uZmV0Y2ggcmVmcy9wdWxsLyovaGVhZDpyZWZzL3JlbW90ZXMvb3JpZ2luL3ByLyogJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4uZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiAmJgorCisJZ2l0IGZldGNoIC0tcHJ1bmUgb3JpZ2luICYmCisJZ2l0IHJldi1wYXJzZSBvcmlnaW4vbWFzdGVyICYmCisJZ2l0IHJldi1wYXJzZSBvcmlnaW4vcHIvNDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggLS1wcnVuZSAtLXRhZ3MgcHJ1bmVzIGJyYW5jaGVzIGJ1dCBub3QgdGFncycgJworCWNkICIkRCIgJiYKKwlnaXQgY2xvbmUgLiBwcnVuZS10YWdzICYmCisJY2QgcHJ1bmUtdGFncyAmJgorCWdpdCB0YWcgc29tZXRhZyBtYXN0ZXIgJiYKKwkjIENyZWF0ZSB3aGF0IGxvb2tzIGxpa2UgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZyb20gYW4gZWFybGllcgorCSMgZmV0Y2ggdGhhdCBoYXMgc2luY2UgYmVlbiBkZWxldGVkIGZyb20gdGhlIHJlbW90ZToKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL2Zha2UtcmVtb3RlIG1hc3RlciAmJgorCisJZ2l0IGZldGNoIC0tcHJ1bmUgLS10YWdzIG9yaWdpbiAmJgorCWdpdCByZXYtcGFyc2Ugb3JpZ2luL21hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2Ugb3JpZ2luL2Zha2UtcmVtb3RlICYmCisJZ2l0IHJldi1wYXJzZSBzb21ldGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tcHJ1bmUgLS10YWdzIHdpdGggYnJhbmNoIGRvZXMgbm90IHBydW5lIG90aGVyIHRoaW5ncycgJworCWNkICIkRCIgJiYKKwlnaXQgY2xvbmUgLiBwcnVuZS10YWdzLWJyYW5jaCAmJgorCWNkIHBydW5lLXRhZ3MtYnJhbmNoICYmCisJZ2l0IHRhZyBzb21ldGFnIG1hc3RlciAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vZXh0cmFicmFuY2ggbWFzdGVyICYmCisKKwlnaXQgZmV0Y2ggLS1wcnVuZSAtLXRhZ3Mgb3JpZ2luIG1hc3RlciAmJgorCWdpdCByZXYtcGFyc2Ugb3JpZ2luL2V4dHJhYnJhbmNoICYmCisJZ2l0IHJldi1wYXJzZSBzb21ldGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tcHJ1bmUgLS10YWdzIHdpdGggcmVmc3BlYyBwcnVuZXMgYmFzZWQgb24gcmVmc3BlYycgJworCWNkICIkRCIgJiYKKwlnaXQgY2xvbmUgLiBwcnVuZS10YWdzLXJlZnNwZWMgJiYKKwljZCBwcnVuZS10YWdzLXJlZnNwZWMgJiYKKwlnaXQgdGFnIHNvbWV0YWcgbWFzdGVyICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9mb28vb3RoZXJicmFuY2ggbWFzdGVyICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9leHRyYWJyYW5jaCBtYXN0ZXIgJiYKKworCWdpdCBmZXRjaCAtLXBydW5lIC0tdGFncyBvcmlnaW4gcmVmcy9oZWFkcy9mb28vKjpyZWZzL3JlbW90ZXMvb3JpZ2luL2Zvby8qICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL2Zvby9vdGhlcmJyYW5jaCAmJgorCWdpdCByZXYtcGFyc2Ugb3JpZ2luL2V4dHJhYnJhbmNoICYmCisJZ2l0IHJldi1wYXJzZSBzb21ldGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVmbWFwPSIiIGlnbm9yZXMgY29uZmlndXJlZCByZWZzcGVjJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkiICYmCisJZ2l0IGNsb25lICIkRCIgcmVtb3RlLXJlZnMgJiYKKwlnaXQgLUMgcmVtb3RlLXJlZnMgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL21hc3RlciA+b2xkICYmCisJZ2l0IC1DIHJlbW90ZS1yZWZzIHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgbWFzdGVyfjEgJiYKKwlnaXQgLUMgcmVtb3RlLXJlZnMgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL21hc3RlciA+bmV3ICYmCisJZ2l0IC1DIHJlbW90ZS1yZWZzIGZldGNoIC0tcmVmbWFwPSBvcmlnaW4gIityZWZzL2hlYWRzLyo6cmVmcy9oaWRkZW4vb3JpZ2luLyoiICYmCisJZ2l0IC1DIHJlbW90ZS1yZWZzIHJldi1wYXJzZSByZW1vdGVzL29yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIG5ldyBhY3R1YWwgJiYKKwlnaXQgLUMgcmVtb3RlLXJlZnMgZmV0Y2ggb3JpZ2luICYmCisJZ2l0IC1DIHJlbW90ZS1yZWZzIHJldi1wYXJzZSByZW1vdGVzL29yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIG9sZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWZtYXA9IiIgYW5kIC0tcHJ1bmUnICcKKwlnaXQgLUMgcmVtb3RlLXJlZnMgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL2Zvby9vdGhlcmJyYW5jaCBtYXN0ZXIgJiYKKwlnaXQgLUMgcmVtb3RlLXJlZnMgdXBkYXRlLXJlZiByZWZzL2hpZGRlbi9mb28vb3RoZXJicmFuY2ggbWFzdGVyICYmCisJZ2l0IC1DIHJlbW90ZS1yZWZzIGZldGNoIC0tcHJ1bmUgLS1yZWZtYXA9IiIgb3JpZ2luICtyZWZzL2hlYWRzLyo6cmVmcy9oaWRkZW4vKiAmJgorCWdpdCAtQyByZW1vdGUtcmVmcyByZXYtcGFyc2UgcmVtb3Rlcy9vcmlnaW4vZm9vL290aGVyYnJhbmNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHJlbW90ZS1yZWZzIHJldi1wYXJzZSByZWZzL2hpZGRlbi9mb28vb3RoZXJicmFuY2ggJiYKKwlnaXQgLUMgcmVtb3RlLXJlZnMgZmV0Y2ggLS1wcnVuZSBvcmlnaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgcmVtb3RlLXJlZnMgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL2Zvby9vdGhlcmJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB0YWdzIHdoZW4gdGhlcmUgaXMgbm8gdGFncycgJworCisgICAgY2QgIiREIiAmJgorCisgICAgbWtkaXIgbm90YWdzICYmCisgICAgY2Qgbm90YWdzICYmCisgICAgZ2l0IGluaXQgJiYKKworICAgIGdpdCBmZXRjaCAtdCAuLgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZvbGxvd2luZyB0YWdzJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IHRhZyAtYSAtbSAnYW5ub3RhdGVkJyBhbm5vIEhFQUQgJiYKKwlnaXQgdGFnIGxpZ2h0IEhFQUQgJiYKKworCW1rZGlyIGZvdXIgJiYKKwljZCBmb3VyICYmCisJZ2l0IGluaXQgJiYKKworCWdpdCBmZXRjaCAuLiA6dHJhY2sgJiYKKwlnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy90YWdzL2Fubm8gJiYKKwlnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy90YWdzL2xpZ2h0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggdXNlcyByZW1vdGUgcmVmIG5hbWVzIHRvIGRlc2NyaWJlIG5ldyByZWZzJyAnCisJY2QgIiREIiAmJgorCWdpdCBpbml0IGRlc2NyaXB0aXZlICYmCisJKAorCQljZCBkZXNjcmlwdGl2ZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vLnVybCAuLiAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vLmZldGNoICJyZWZzL2hlYWRzLyo6cmVmcy9jcmF6eWhlYWRzLyoiICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm8uZmV0Y2ggInJlZnMvb3RoZXJzLyo6cmVmcy9oZWFkcy8qIiAmJgorCQlnaXQgZmV0Y2ggbworCSkgJiYKKwlnaXQgdGFnIC1hIC1tICJEZXNjcmlwdGl2ZSB0YWciIGRlc2NyaXB0aXZlLXRhZyAmJgorCWdpdCBicmFuY2ggZGVzY3JpcHRpdmUtYnJhbmNoICYmCisJZ2l0IGNoZWNrb3V0IGRlc2NyaXB0aXZlLWJyYW5jaCAmJgorCWVjaG8gIk51dHMiID5jcmF6eSAmJgorCWdpdCBhZGQgY3JhenkgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJkZXNjcmlwdGl2ZSBjb21taXQiICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9vdGhlcnMvY3JhenkgSEVBRCAmJgorCSgKKwkJY2QgZGVzY3JpcHRpdmUgJiYKKwkJZ2l0IGZldGNoIG8gMj5hY3R1YWwgJiYKKwkJdGVzdF9pMThuZ3JlcCAibmV3IGJyYW5jaC4qIC0+IHJlZnMvY3JhenloZWFkcy9kZXNjcmlwdGl2ZS1icmFuY2gkIiBhY3R1YWwgJiYKKwkJdGVzdF9pMThuZ3JlcCAibmV3IHRhZy4qIC0+IGRlc2NyaXB0aXZlLXRhZyQiIGFjdHVhbCAmJgorCQl0ZXN0X2kxOG5ncmVwICJuZXcgcmVmLiogLT4gY3JhenkkIiBhY3R1YWwKKwkpICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBtdXN0IG5vdCByZXNvbHZlIHNob3J0IHRhZyBuYW1lJyAnCisKKwljZCAiJEQiICYmCisKKwlta2RpciBmaXZlICYmCisJY2QgZml2ZSAmJgorCWdpdCBpbml0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLi4gYW5ubzpmaXZlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY2FuIG5vdyByZXNvbHZlIHNob3J0IHJlbW90ZSBuYW1lJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL3NpeC9IRUFEIEhFQUQgJiYKKworCW1rZGlyIHNpeCAmJgorCWNkIHNpeCAmJgorCWdpdCBpbml0ICYmCisKKwlnaXQgZmV0Y2ggLi4gc2l4OnNpeAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYnVuZGxlIDEnICcKKwljZCAiJEQiICYmCisJZWNobyA+ZmlsZSB1cGRhdGVkIGFnYWluIGJ5IG9yaWdpbiAmJgorCWdpdCBjb21taXQgLWEgLW0gInRpcCIgJiYKKwlnaXQgYnVuZGxlIGNyZWF0ZSBidW5kbGUxIG1hc3Rlcl4uLm1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoZWFkZXIgb2YgYnVuZGxlIGxvb2tzIHJpZ2h0JyAnCisJaGVhZCAtbiA0ICIkRCIvYnVuZGxlMSAmJgorCWhlYWQgLW4gMSAiJEQiL2J1bmRsZTEgfCBncmVwICJeIyIgJiYKKwloZWFkIC1uIDIgIiREIi9idW5kbGUxIHwgZ3JlcCAiXi0kT0lEX1JFR0VYICIgJiYKKwloZWFkIC1uIDMgIiREIi9idW5kbGUxIHwgZ3JlcCAiXiRPSURfUkVHRVggIiAmJgorCWhlYWQgLW4gNCAiJEQiL2J1bmRsZTEgfCBncmVwICJeJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGJ1bmRsZSAyJyAnCisJY2QgIiREIiAmJgorCWdpdCBidW5kbGUgY3JlYXRlIGJ1bmRsZTIgbWFzdGVyfjIuLm1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmJ1bmRsZSAxJyAnCisJY2QgIiREL2J1bmRsZSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc29tZS1icmFuY2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggIiREL2J1bmRsZTEiIG1hc3RlcjptYXN0ZXIKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidW5kbGUgMSBoYXMgb25seSAzIGZpbGVzICcgJworCWNkICIkRCIgJiYKKwljb252ZXJ0X2J1bmRsZV90b19wYWNrIDxidW5kbGUxID5idW5kbGUucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIGJ1bmRsZS5wYWNrICYmCisJdGVzdF9idW5kbGVfb2JqZWN0X2NvdW50IGJ1bmRsZS5wYWNrIDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5idW5kbGUgMicgJworCWNkICIkRC9idW5kbGUiICYmCisJZ2l0IGZldGNoIC4uL2J1bmRsZTIgbWFzdGVyOm1hc3RlciAmJgorCXRlc3QgInRpcCIgPSAiJChnaXQgbG9nIC0xIC0tcHJldHR5PW9uZWxpbmUgbWFzdGVyIHwgY3V0IC1kIiAiIC1mMikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bmRsZSBkb2VzIG5vdCBwcmVyZXF1aXNpdGUgb2JqZWN0cycgJworCWNkICIkRCIgJiYKKwl0b3VjaCBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIGFkZC5maWxlMiBmaWxlMiAmJgorCWdpdCBidW5kbGUgY3JlYXRlIGJ1bmRsZTMgLTEgSEVBRCAmJgorCWNvbnZlcnRfYnVuZGxlX3RvX3BhY2sgPGJ1bmRsZTMgPmJ1bmRsZS5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgYnVuZGxlLnBhY2sgJiYKKwl0ZXN0X2J1bmRsZV9vYmplY3RfY291bnQgYnVuZGxlLnBhY2sgMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidW5kbGUgc2hvdWxkIGJlIGFibGUgdG8gY3JlYXRlIGEgZnVsbCBoaXN0b3J5JyAnCisKKwljZCAiJEQiICYmCisJZ2l0IHRhZyAtYSAtbSAnMS4wJyB2MS4wIG1hc3RlciAmJgorCWdpdCBidW5kbGUgY3JlYXRlIGJ1bmRsZTQgdjEuMAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggYSBub24tYXBwbHlpbmcgYnJhbmNoLjxuYW1lPi5tZXJnZScgJworCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgeWV0aSAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSByZWZzL2hlYWRzL2JpZ2Zvb3QgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5ibHViLnVybCBvbmUgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5ibHViLmZldGNoICJyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29uZS8qIiAmJgorCWdpdCBmZXRjaCBibHViCisnCisKKyMgVVJMIHN1cHBsaWVkIHRvIGZldGNoIGRvZXMgbm90IG1hdGNoIHRoZSB1cmwgb2YgdGhlIGNvbmZpZ3VyZWQgYnJhbmNoJ3MgcmVtb3RlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmcm9tIEdJVCBVUkwgd2l0aCBhIG5vbi1hcHBseWluZyBicmFuY2guPG5hbWU+Lm1lcmdlIFsxXScgJworCW9uZV9oZWFkPSQoY2Qgb25lICYmIGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0aGlzX2hlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgRkVUQ0hfSEVBRCAmJgorCWdpdCBmZXRjaCBvbmUgJiYKKwl0ZXN0ICRvbmVfaGVhZCA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgRkVUQ0hfSEVBRCkiICYmCisJdGVzdCAkdGhpc19oZWFkID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIKKycKKworIyBVUkwgc3VwcGxpZWQgdG8gZmV0Y2ggbWF0Y2hlcyB0aGUgdXJsIG9mIHRoZSBjb25maWd1cmVkIGJyYW5jaCdzIHJlbW90ZSBhbmQKKyMgdGhlIG1lcmdlIHNwZWMgbWF0Y2hlcyB0aGUgYnJhbmNoIHRoZSByZW1vdGUgSEVBRCBwb2ludHMgdG8KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZyb20gR0lUIFVSTCB3aXRoIGEgbm9uLWFwcGx5aW5nIGJyYW5jaC48bmFtZT4ubWVyZ2UgWzJdJyAnCisJb25lX3JlZj0kKGNkIG9uZSAmJiBnaXQgc3ltYm9saWMtcmVmIEhFQUQpICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBibHViICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlICIkb25lX3JlZiIgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCBGRVRDSF9IRUFEICYmCisJZ2l0IGZldGNoIG9uZSAmJgorCXRlc3QgJG9uZV9oZWFkID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBGRVRDSF9IRUFEKSIgJiYKKwl0ZXN0ICR0aGlzX2hlYWQgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIgorJworCisjIFVSTCBzdXBwbGllZCB0byBmZXRjaCBtYXRjaGVzIHRoZSB1cmwgb2YgdGhlIGNvbmZpZ3VyZWQgYnJhbmNoJ3MgcmVtb3RlLCBidXQKKyMgdGhlIG1lcmdlIHNwZWMgZG9lcyBub3QgbWF0Y2ggdGhlIGJyYW5jaCB0aGUgcmVtb3RlIEhFQUQgcG9pbnRzIHRvCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmcm9tIEdJVCBVUkwgd2l0aCBhIG5vbi1hcHBseWluZyBicmFuY2guPG5hbWU+Lm1lcmdlIFszXScgJworCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSAiJHtvbmVfcmVmfV9ub3QiICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgRkVUQ0hfSEVBRCAmJgorCWdpdCBmZXRjaCBvbmUgJiYKKwl0ZXN0ICRvbmVfaGVhZCA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgRkVUQ0hfSEVBRCkiICYmCisJdGVzdCAkdGhpc19oZWFkID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIKKycKKworIyB0aGUgc3RyYW5nZSBuYW1lIGlzOiBhXCEnYgordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGluZyBvZiBhIHN0cmFuZ2VseSBuYW1lZCByZXBvJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoICJhXFwhJ1wnJ2IiID4gcmVzdWx0IDI+JjEgJiYKKwlncmVwICJmYXRhbDogJ1wnJ2FcXFxcISdcJydiJ1wnJyIgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bmRsZSBzaG91bGQgcmVjb3JkIEhFQUQgY29ycmVjdGx5JyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGJ1bmRsZSBjcmVhdGUgYnVuZGxlNSBIRUFEIG1hc3RlciAmJgorCWdpdCBidW5kbGUgbGlzdC1oZWFkcyBidW5kbGU1ID5hY3R1YWwgJiYKKwlmb3IgaCBpbiBIRUFEIHJlZnMvaGVhZHMvbWFzdGVyCisJZG8KKwkJZWNobyAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRoKSAkaCIKKwlkb25lID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFyayBpbml0aWFsIHN0YXRlIG9mIG9yaWdpbi9tYXN0ZXInICcKKwkoCisJCWNkIHRocmVlICYmCisJCWdpdCB0YWcgYmFzZS1vcmlnaW4tbWFzdGVyIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdCBmZXRjaCBzaG91bGQgdXBkYXRlIHRyYWNraW5nJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGJyYW5jaCAtZiBzaWRlICYmCisJKAorCQljZCB0aHJlZSAmJgorCQlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciBiYXNlLW9yaWdpbi1tYXN0ZXIgJiYKKwkJbz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCWdpdCBmZXRjaCBvcmlnaW4gbWFzdGVyICYmCisJCW49JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgorCQl0ZXN0ICIkbyIgIT0gIiRuIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgcHVsbCBzaG91bGQgdXBkYXRlIHRyYWNraW5nJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGJyYW5jaCAtZiBzaWRlICYmCisJKAorCQljZCB0aHJlZSAmJgorCQlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciBiYXNlLW9yaWdpbi1tYXN0ZXIgJiYKKwkJbz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCWdpdCBwdWxsIG9yaWdpbiBtYXN0ZXIgJiYKKwkJbj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgIiRvIiAhPSAiJG4iICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdCAtLXJlZm1hcCBpcyBhbGxvd2VkIG9ubHkgd2l0aCBjb21tYW5kLWxpbmUgcmVmc3BlYycgJworCWNkICIkRCIgJiYKKwkoCisJCWNkIHRocmVlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAtLXJlZm1hcD0iKjpyZWZzL3JlbW90ZXMvbm9uZS8qIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgLS1yZWZtYXAgb3B0aW9uIG92ZXJyaWRlcyByZW1vdGUuKi5mZXRjaCcgJworCWNkICIkRCIgJiYKKwlnaXQgYnJhbmNoIC1mIHNpZGUgJiYKKwkoCisJCWNkIHRocmVlICYmCisJCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIGJhc2Utb3JpZ2luLW1hc3RlciAmJgorCQlvPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikgJiYKKwkJZ2l0IGZldGNoIC0tcmVmbWFwPSJyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL290aGVyLyoiIG9yaWdpbiBtYXN0ZXIgJiYKKwkJbj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgIiRvIiA9ICIkbiIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3RoZXIvbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdGx5IGVtcHR5IC0tcmVmbWFwIG9wdGlvbiBkaXNhYmxlcyByZW1vdGUuKi5mZXRjaCcgJworCWNkICIkRCIgJiYKKwlnaXQgYnJhbmNoIC1mIHNpZGUgJiYKKwkoCisJCWNkIHRocmVlICYmCisJCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIGJhc2Utb3JpZ2luLW1hc3RlciAmJgorCQlvPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikgJiYKKwkJZ2l0IGZldGNoIC0tcmVmbWFwPSIiIG9yaWdpbiBtYXN0ZXIgJiYKKwkJbj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgIiRvIiA9ICIkbiIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZ3VyZWQgZmV0Y2ggdXBkYXRlcyB0cmFja2luZycgJworCisJY2QgIiREIiAmJgorCWdpdCBicmFuY2ggLWYgc2lkZSAmJgorCSgKKwkJY2QgdGhyZWUgJiYKKwkJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgYmFzZS1vcmlnaW4tbWFzdGVyICYmCisJCW89JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luICYmCisJCW49JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgorCQl0ZXN0ICIkbyIgIT0gIiRuIiAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLW1hdGNoaW5nIHJlZnNwZWNzIGRvIG5vdCBjb25mdXNlIHRyYWNraW5nIHVwZGF0ZScgJworCWNkICIkRCIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL29kZC9sb2NhdGlvbiBIRUFEICYmCisJKAorCQljZCB0aHJlZSAmJgorCQlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciBiYXNlLW9yaWdpbi1tYXN0ZXIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLmZldGNoIFwKKwkJCXJlZnMvb2RkL2xvY2F0aW9uOnJlZnMvcmVtb3Rlcy9vcmlnaW4vb2RkICYmCisJCW89JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luIG1hc3RlciAmJgorCQluPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikgJiYKKwkJdGVzdCAiJG8iICE9ICIkbiIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL29kZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaGluZyBub25leGlzdGVudCBicmFuY2ggYnkgbWlzdGFrZSBzaG91bGQgbm90IHNlZ3YnICcKKworCWNkICIkRCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBzZXZlbiBubzpubworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gdGFnIGZvbGxvd2luZyBmZXRjaGVzIG1pbmltdW0nICcKKworCWNkICIkRCIgJiYKKwlnaXQgY2xvbmUgLmdpdCBmb2xsb3cgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJKAorCQlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3CisJCWRvCisJCQllY2hvICRpID4+ZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtbSAkaSAtYSAmJgorCQkJZ2l0IHRhZyAtYSAtbSAkaSBleGNlc3MtJGkgfHwgZXhpdCAxCisJCWRvbmUKKwkpICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSgKKwkJY2QgZm9sbG93ICYmCisJCWdpdCBmZXRjaAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNlIHRvIGZldGNoIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLiBzaWRlOm1hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggLS11cGRhdGUtaGVhZC1vaycgJworCisJZ2l0IGZldGNoIC0tdXBkYXRlLWhlYWQtb2sgLiBzaWRlOm1hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tZHJ5LXJ1bicgJworCisJcm0gLWYgLmdpdC9GRVRDSF9IRUFEICYmCisJZ2l0IGZldGNoIC0tZHJ5LXJ1biAuICYmCisJISB0ZXN0IC1mIC5naXQvRkVUQ0hfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzaG91bGQgYmUgYWJsZSB0byBmZXRjaCB3aXRoIGR1cGxpY2F0ZSByZWZzcGVjcyIgJworCW1rZGlyIGR1cHMgJiYKKwkoCisJCWNkIGR1cHMgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSB0aHJlZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS50aHJlZS51cmwgLi4vdGhyZWUvLmdpdCAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS50aHJlZS5mZXRjaCArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS50aHJlZS5mZXRjaCArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiAmJgorCQlnaXQgZmV0Y2ggdGhyZWUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xIUyBvZiByZWZzcGVjIGZvbGxvd3MgcmVmIGRpc2FtYmlndWF0aW9uIHJ1bGVzJyAnCisJbWtkaXIgbGhzLWFtYmlndW91cyAmJgorCSgKKwkJY2QgbGhzLWFtYmlndW91cyAmJgorCQlnaXQgaW5pdCBzZXJ2ZXIgJiYKKwkJdGVzdF9jb21taXQgLUMgc2VydmVyIHVud2FudGVkICYmCisJCXRlc3RfY29tbWl0IC1DIHNlcnZlciB3YW50ZWQgJiYKKworCQlnaXQgaW5pdCBjbGllbnQgJiYKKworCQkjIENoZWNrIGEgbmFtZSBjb21pbmcgYWZ0ZXIgInJlZnMiIGFscGhhYmV0aWNhbGx5IC4uLgorCQlnaXQgLUMgc2VydmVyIHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9zIHdhbnRlZCAmJgorCQlnaXQgLUMgc2VydmVyIHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9yZWZzL2hlYWRzL3MgdW53YW50ZWQgJiYKKwkJZ2l0IC1DIGNsaWVudCBmZXRjaCAuLi9zZXJ2ZXIgK3JlZnMvaGVhZHMvczpyZWZzL2hlYWRzL2NoZWNrdGhpcyAmJgorCQlnaXQgLUMgc2VydmVyIHJldi1wYXJzZSB3YW50ZWQgPmV4cGVjdCAmJgorCQlnaXQgLUMgY2xpZW50IHJldi1wYXJzZSBjaGVja3RoaXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJIyAuLi4gYW5kIG9uZSBiZWZvcmUuCisJCWdpdCAtQyBzZXJ2ZXIgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3Egd2FudGVkICYmCisJCWdpdCAtQyBzZXJ2ZXIgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3JlZnMvaGVhZHMvcSB1bndhbnRlZCAmJgorCQlnaXQgLUMgY2xpZW50IGZldGNoIC4uL3NlcnZlciArcmVmcy9oZWFkcy9xOnJlZnMvaGVhZHMvY2hlY2t0aGlzICYmCisJCWdpdCAtQyBzZXJ2ZXIgcmV2LXBhcnNlIHdhbnRlZCA+ZXhwZWN0ICYmCisJCWdpdCAtQyBjbGllbnQgcmV2LXBhcnNlIGNoZWNrdGhpcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjIFRhZ3MgYXJlIHByZWZlcnJlZCBvdmVyIGJyYW5jaGVzIGxpa2UgcmVmcy97aGVhZHMsdGFnc30vKgorCQlnaXQgLUMgc2VydmVyIHVwZGF0ZS1yZWYgcmVmcy90YWdzL3Qgd2FudGVkICYmCisJCWdpdCAtQyBzZXJ2ZXIgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3QgdW53YW50ZWQgJiYKKwkJZ2l0IC1DIGNsaWVudCBmZXRjaCAuLi9zZXJ2ZXIgK3Q6cmVmcy9oZWFkcy9jaGVja3RoaXMgJiYKKwkJZ2l0IC1DIHNlcnZlciByZXYtcGFyc2Ugd2FudGVkID5leHBlY3QgJiYKKwkJZ2l0IC1DIGNsaWVudCByZXYtcGFyc2UgY2hlY2t0aGlzID5hY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoLndyaXRlQ29tbWl0R3JhcGgnICcKKwlnaXQgY2xvbmUgdGhyZWUgd3JpdGUgJiYKKwkoCisJCWNkIHRocmVlICYmCisJCXRlc3RfY29tbWl0IG5ldworCSkgJiYKKwkoCisJCWNkIHdyaXRlICYmCisJCWdpdCAtYyBmZXRjaC53cml0ZUNvbW1pdEdyYXBoIGZldGNoIG9yaWdpbiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGhzL2NvbW1pdC1ncmFwaC1jaGFpbgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2gud3JpdGVDb21taXRHcmFwaCB3aXRoIHN1Ym1vZHVsZXMnICcKKwlnaXQgY2xvbmUgZHVwcyBzdXBlciAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgImZpbGU6Ly8kVFJBU0hfRElSRUNUT1JZL3RocmVlIiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIgorCSkgJiYKKwlnaXQgY2xvbmUgInN1cGVyIiBzdXBlci1jbG9uZSAmJgorCSgKKwkJY2Qgc3VwZXItY2xvbmUgJiYKKwkJcm0gLXJmIC5naXQvb2JqZWN0cy9pbmZvICYmCisJCWdpdCAtYyBmZXRjaC53cml0ZUNvbW1pdEdyYXBoPXRydWUgZmV0Y2ggb3JpZ2luICYmCisJCXRlc3RfcGF0aF9pc19maWxlIC5naXQvb2JqZWN0cy9pbmZvL2NvbW1pdC1ncmFwaHMvY29tbWl0LWdyYXBoLWNoYWluCisJKQorJworCisjIGNvbmZpZ3VyZWQgcHJ1bmUgdGVzdHMKKworc2V0X2NvbmZpZ190cmlzdGF0ZSAoKSB7CisJIyB2YXI9JDEgdmFsPSQyCisJY2FzZSAiJDIiIGluCisJdW5zZXQpCisJCXRlc3RfdW5jb25maWcgIiQxIgorCQk7OworCSopCisJCWdpdCBjb25maWcgIiQxIiAiJDIiCisJCWtleT0kKGVjaG8gJDEgfCBzZWQgLWUgJ3MvXnJlbW90ZVwub3JpZ2luL2ZldGNoLycpCisJCWdpdF9mZXRjaF9jPSIkZ2l0X2ZldGNoX2MgLWMgJGtleT0kMiIKKwkJOzsKKwllc2FjCit9CisKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSAoKSB7CisJdGVzdF9jb25maWd1cmVkX3BydW5lX3R5cGUgIiRAIiAibmFtZSIKKwl0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmVfdHlwZSAiJEAiICJsaW5rIgorfQorCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmVfdHlwZSAoKSB7CisJZmV0Y2hfcHJ1bmU9JDEKKwlyZW1vdGVfb3JpZ2luX3BydW5lPSQyCisJZmV0Y2hfcHJ1bmVfdGFncz0kMworCXJlbW90ZV9vcmlnaW5fcHJ1bmVfdGFncz0kNAorCWV4cGVjdGVkX2JyYW5jaD0kNQorCWV4cGVjdGVkX3RhZz0kNgorCWNtZGxpbmU9JDcKKwltb2RlPSQ4CisKKwlpZiB0ZXN0IC16ICIkY21kbGluZV9zZXR1cCIKKwl0aGVuCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNtZGxpbmVfc2V0dXAgdmFyaWFibGUgZm9yIHN1YnNlcXVlbnQgdGVzdCcgJworCQkJcmVtb3RlX3VybD0iZmlsZTovLyQoZ2l0IC1DIG9uZSBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiAmJgorCQkJcmVtb3RlX2ZldGNoPSIkKGdpdCAtQyBvbmUgY29uZmlnIHJlbW90ZS5vcmlnaW4uZmV0Y2gpIiAmJgorCQkJY21kbGluZV9zZXR1cD0iXCIkcmVtb3RlX3VybFwiIFwiJHJlbW90ZV9mZXRjaFwiIgorCQknCisJZmkKKworCWlmIHRlc3QgIiRtb2RlIiA9ICdsaW5rJworCXRoZW4KKwkJbmV3X2NtZGxpbmU9IiIKKworCQlpZiB0ZXN0ICIkY21kbGluZSIgPSAiIgorCQl0aGVuCisJCQluZXdfY21kbGluZT0kY21kbGluZV9zZXR1cAorCQllbHNlCisJCQluZXdfY21kbGluZT0kKHByaW50ZiAiJXMiICIkY21kbGluZSIgfCBwZXJsIC1wZSAnc1tvcmlnaW4oPyEvKV1bIiciJHJlbW90ZV91cmwiJyJdZycpCisJCWZpCisKKwkJaWYgdGVzdCAiJGZldGNoX3BydW5lX3RhZ3MiID0gJ3RydWUnIHx8CisJCSAgIHRlc3QgIiRyZW1vdGVfb3JpZ2luX3BydW5lX3RhZ3MiID0gJ3RydWUnCisJCXRoZW4KKwkJCWlmICEgcHJpbnRmICclcycgIiRjbWRsaW5lXG4iIHwgZ3JlcCAtcSByZWZzL3JlbW90ZXMvb3JpZ2luLworCQkJdGhlbgorCQkJCW5ld19jbWRsaW5lPSIkbmV3X2NtZGxpbmUgcmVmcy90YWdzLyo6cmVmcy90YWdzLyoiCisJCQlmaQorCQlmaQorCisJCWNtZGxpbmU9IiRuZXdfY21kbGluZSIKKwlmaQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG1vZGUgcHJ1bmUgZmV0Y2gucHJ1bmU9JDEgcmVtb3RlLm9yaWdpbi5wcnVuZT0kMiBmZXRjaC5wcnVuZVRhZ3M9JDMgcmVtb3RlLm9yaWdpbi5wcnVuZVRhZ3M9JDQkezc6KyAkN307IGJyYW5jaDokNSB0YWc6JDYiICcKKwkJIyBtYWtlIHN1cmUgYSBuZXdicmFuY2ggaXMgdGhlcmUgaW4gLiBhbmQgYWxzbyBpbiBvbmUKKwkJZ2l0IGJyYW5jaCAtZiBuZXdicmFuY2ggJiYKKwkJZ2l0IHRhZyAtZiBuZXd0YWcgJiYKKwkJKAorCQkJY2Qgb25lICYmCisJCQl0ZXN0X3VuY29uZmlnIGZldGNoLnBydW5lICYmCisJCQl0ZXN0X3VuY29uZmlnIGZldGNoLnBydW5lVGFncyAmJgorCQkJdGVzdF91bmNvbmZpZyByZW1vdGUub3JpZ2luLnBydW5lICYmCisJCQl0ZXN0X3VuY29uZmlnIHJlbW90ZS5vcmlnaW4ucHJ1bmVUYWdzICYmCisJCQlnaXQgZmV0Y2ggJyIkY21kbGluZV9zZXR1cCInICYmCisJCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbmV3YnJhbmNoICYmCisJCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvdGFncy9uZXd0YWcKKwkJKSAmJgorCisJCSMgbm93IHJlbW92ZSB0aGVtCisJCWdpdCBicmFuY2ggLWQgbmV3YnJhbmNoICYmCisJCWdpdCB0YWcgLWQgbmV3dGFnICYmCisKKwkJIyB0aGVuIHRlc3QKKwkJKAorCQkJY2Qgb25lICYmCisJCQlnaXRfZmV0Y2hfYz0iIiAmJgorCQkJc2V0X2NvbmZpZ190cmlzdGF0ZSBmZXRjaC5wcnVuZSAkZmV0Y2hfcHJ1bmUgJiYKKwkJCXNldF9jb25maWdfdHJpc3RhdGUgZmV0Y2gucHJ1bmVUYWdzICRmZXRjaF9wcnVuZV90YWdzICYmCisJCQlzZXRfY29uZmlnX3RyaXN0YXRlIHJlbW90ZS5vcmlnaW4ucHJ1bmUgJHJlbW90ZV9vcmlnaW5fcHJ1bmUgJiYKKwkJCXNldF9jb25maWdfdHJpc3RhdGUgcmVtb3RlLm9yaWdpbi5wcnVuZVRhZ3MgJHJlbW90ZV9vcmlnaW5fcHJ1bmVfdGFncyAmJgorCisJCQlpZiB0ZXN0ICIkbW9kZSIgIT0gImxpbmsiCisJCQl0aGVuCisJCQkJZ2l0X2ZldGNoX2M9IiIKKwkJCWZpICYmCisJCQlnaXQkZ2l0X2ZldGNoX2MgZmV0Y2ggJyIkY21kbGluZSInICYmCisJCQljYXNlICIkZXhwZWN0ZWRfYnJhbmNoIiBpbgorCQkJcHJ1bmVkKQorCQkJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9uZXdicmFuY2gKKwkJCQk7OworCQkJa2VwdCkKKwkJCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbmV3YnJhbmNoCisJCQkJOzsKKwkJCWVzYWMgJiYKKwkJCWNhc2UgIiRleHBlY3RlZF90YWciIGluCisJCQlwcnVuZWQpCisJCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3RhZ3MvbmV3dGFnCisJCQkJOzsKKwkJCWtlcHQpCisJCQkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3RhZ3MvbmV3dGFnCisJCQkJOzsKKwkJCWVzYWMKKwkJKQorCScKK30KKworIyAkMSBjb25maWc6IGZldGNoLnBydW5lCisjICQyIGNvbmZpZzogcmVtb3RlLjxuYW1lPi5wcnVuZQorIyAkMyBjb25maWc6IGZldGNoLnBydW5lVGFncworIyAkNCBjb25maWc6IHJlbW90ZS48bmFtZT4ucHJ1bmVUYWdzCisjICQ1IGV4cGVjdDogYnJhbmNoIHRvIGJlIHBydW5lZD8KKyMgJDYgZXhwZWN0OiB0YWcgdG8gYmUgcHJ1bmVkPworIyAkNyBnaXQtZmV0Y2ggJGNtZGxpbmU6CisjCisjICAgICAgICAgICAgICAgICAgICAgJDEgICAgJDIgICAgJDMgICAgJDQgICAgJDUgICAgICQ2ICAgICAkNwordGVzdF9jb25maWd1cmVkX3BydW5lIHVuc2V0IHVuc2V0IHVuc2V0IHVuc2V0IGtlcHQgICBrZXB0ICAgIiIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB1bnNldCB1bnNldCB1bnNldCB1bnNldCBrZXB0ICAga2VwdCAgICItLW5vLXBydW5lIgordGVzdF9jb25maWd1cmVkX3BydW5lIHVuc2V0IHVuc2V0IHVuc2V0IHVuc2V0IHBydW5lZCBrZXB0ICAgIi0tcHJ1bmUiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgdW5zZXQgdW5zZXQgdW5zZXQgdW5zZXQga2VwdCAgIHBydW5lZCBcCisJIi0tcHJ1bmUgb3JpZ2luIHJlZnMvdGFncy8qOnJlZnMvdGFncy8qIgordGVzdF9jb25maWd1cmVkX3BydW5lIHVuc2V0IHVuc2V0IHVuc2V0IHVuc2V0IHBydW5lZCBwcnVuZWQgXAorCSItLXBydW5lIG9yaWdpbiByZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKiArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIKKwordGVzdF9jb25maWd1cmVkX3BydW5lIGZhbHNlIHVuc2V0IHVuc2V0IHVuc2V0IGtlcHQgICBrZXB0ICAgIiIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSBmYWxzZSB1bnNldCB1bnNldCB1bnNldCBrZXB0ICAga2VwdCAgICItLW5vLXBydW5lIgordGVzdF9jb25maWd1cmVkX3BydW5lIGZhbHNlIHVuc2V0IHVuc2V0IHVuc2V0IHBydW5lZCBrZXB0ICAgIi0tcHJ1bmUiCisKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB0cnVlICB1bnNldCB1bnNldCB1bnNldCBwcnVuZWQga2VwdCAgICIiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgdHJ1ZSAgdW5zZXQgdW5zZXQgdW5zZXQgcHJ1bmVkIGtlcHQgICAiLS1wcnVuZSIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB0cnVlICB1bnNldCB1bnNldCB1bnNldCBrZXB0ICAga2VwdCAgICItLW5vLXBydW5lIgorCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgdW5zZXQgZmFsc2UgdW5zZXQgdW5zZXQga2VwdCAgIGtlcHQgICAiIgordGVzdF9jb25maWd1cmVkX3BydW5lIHVuc2V0IGZhbHNlIHVuc2V0IHVuc2V0IGtlcHQgICBrZXB0ICAgIi0tbm8tcHJ1bmUiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgdW5zZXQgZmFsc2UgdW5zZXQgdW5zZXQgcHJ1bmVkIGtlcHQgICAiLS1wcnVuZSIKKwordGVzdF9jb25maWd1cmVkX3BydW5lIGZhbHNlIGZhbHNlIHVuc2V0IHVuc2V0IGtlcHQgICBrZXB0ICAgIiIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSBmYWxzZSBmYWxzZSB1bnNldCB1bnNldCBrZXB0ICAga2VwdCAgICItLW5vLXBydW5lIgordGVzdF9jb25maWd1cmVkX3BydW5lIGZhbHNlIGZhbHNlIHVuc2V0IHVuc2V0IHBydW5lZCBrZXB0ICAgIi0tcHJ1bmUiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgZmFsc2UgZmFsc2UgdW5zZXQgdW5zZXQga2VwdCAgIHBydW5lZCBcCisJIi0tcHJ1bmUgb3JpZ2luIHJlZnMvdGFncy8qOnJlZnMvdGFncy8qIgordGVzdF9jb25maWd1cmVkX3BydW5lIGZhbHNlIGZhbHNlIHVuc2V0IHVuc2V0IHBydW5lZCBwcnVuZWQgXAorCSItLXBydW5lIG9yaWdpbiByZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKiArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIKKwordGVzdF9jb25maWd1cmVkX3BydW5lIHRydWUgIGZhbHNlIHVuc2V0IHVuc2V0IGtlcHQgICBrZXB0ICAgIiIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB0cnVlICBmYWxzZSB1bnNldCB1bnNldCBwcnVuZWQga2VwdCAgICItLXBydW5lIgordGVzdF9jb25maWd1cmVkX3BydW5lIHRydWUgIGZhbHNlIHVuc2V0IHVuc2V0IGtlcHQgICBrZXB0ICAgIi0tbm8tcHJ1bmUiCisKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB1bnNldCB0cnVlICB1bnNldCB1bnNldCBwcnVuZWQga2VwdCAgICIiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgdW5zZXQgdHJ1ZSAgdW5zZXQgdW5zZXQga2VwdCAgIGtlcHQgICAiLS1uby1wcnVuZSIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB1bnNldCB0cnVlICB1bnNldCB1bnNldCBwcnVuZWQga2VwdCAgICItLXBydW5lIgorCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgZmFsc2UgdHJ1ZSAgdW5zZXQgdW5zZXQgcHJ1bmVkIGtlcHQgICAiIgordGVzdF9jb25maWd1cmVkX3BydW5lIGZhbHNlIHRydWUgIHVuc2V0IHVuc2V0IGtlcHQgICBrZXB0ICAgIi0tbm8tcHJ1bmUiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgZmFsc2UgdHJ1ZSAgdW5zZXQgdW5zZXQgcHJ1bmVkIGtlcHQgICAiLS1wcnVuZSIKKwordGVzdF9jb25maWd1cmVkX3BydW5lIHRydWUgIHRydWUgIHVuc2V0IHVuc2V0IHBydW5lZCBrZXB0ICAgIiIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB0cnVlICB0cnVlICB1bnNldCB1bnNldCBwcnVuZWQga2VwdCAgICItLXBydW5lIgordGVzdF9jb25maWd1cmVkX3BydW5lIHRydWUgIHRydWUgIHVuc2V0IHVuc2V0IGtlcHQgICBrZXB0ICAgIi0tbm8tcHJ1bmUiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgdHJ1ZSAgdHJ1ZSAgdW5zZXQgdW5zZXQga2VwdCAgIHBydW5lZCBcCisJIi0tcHJ1bmUgb3JpZ2luIHJlZnMvdGFncy8qOnJlZnMvdGFncy8qIgordGVzdF9jb25maWd1cmVkX3BydW5lIHRydWUgIHRydWUgIHVuc2V0IHVuc2V0IHBydW5lZCBwcnVuZWQgXAorCSItLXBydW5lIG9yaWdpbiByZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKiArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIKKworIyAtLXBydW5lLXRhZ3Mgb24gaXRzIG93biBkb2VzIG5vdGhpbmcsIG5lZWRzIC0tcHJ1bmUgYXMgd2VsbCwgc2FtZQorIyBmb3IgZm9yIGZldGNoLnBydW5lVGFncyB3aXRob3V0IGZldGNoLnBydW5lCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgdW5zZXQgdW5zZXQgdW5zZXQgdW5zZXQga2VwdCBrZXB0ICAgICAiLS1wcnVuZS10YWdzIgordGVzdF9jb25maWd1cmVkX3BydW5lIHVuc2V0IHVuc2V0IHRydWUgdW5zZXQgIGtlcHQga2VwdCAgICAgIiIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB1bnNldCB1bnNldCB1bnNldCB0cnVlICBrZXB0IGtlcHQgICAgICIiCisKKyMgVGhlc2Ugd2lsbCBwcnVuZSB0aGUgdGFncwordGVzdF9jb25maWd1cmVkX3BydW5lIHVuc2V0IHVuc2V0IHVuc2V0IHVuc2V0IHBydW5lZCBwcnVuZWQgIi0tcHJ1bmUgLS1wcnVuZS10YWdzIgordGVzdF9jb25maWd1cmVkX3BydW5lIHRydWUgIHVuc2V0IHRydWUgIHVuc2V0IHBydW5lZCBwcnVuZWQgIiIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB1bnNldCB0cnVlICB1bnNldCB0cnVlICBwcnVuZWQgcHJ1bmVkICIiCisKKyMgcmVtb3RlLjxuYW1lPi5wcnVuZVRhZ3Mgb3ZlcnJpZGVzIGZldGNoLnBydW5lVGFncywganVzdCBsaWtlCisjIHJlbW90ZS48bmFtZT4ucHJ1bmUgb3ZlcnJpZGVzIGZldGNoLnBydW5lIGlmIHNldC4KK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB0cnVlICB1bnNldCB0cnVlIHVuc2V0IHBydW5lZCBwcnVuZWQgICIiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgZmFsc2UgdHJ1ZSAgZmFsc2UgdHJ1ZSAgcHJ1bmVkIHBydW5lZCAiIgordGVzdF9jb25maWd1cmVkX3BydW5lIHRydWUgIGZhbHNlIHRydWUgIGZhbHNlIGtlcHQgICBrZXB0ICAgIiIKKworIyBXaGVuIC0tcHJ1bmUtdGFncyBpcyBzdXBwbGllZCBpdCdzIGlnbm9yZWQgaWYgYW4gZXhwbGljaXQgcmVmc3BlYyBpcworIyBnaXZlbiwgc2FtZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB1bnNldCB1bnNldCB1bnNldCB1bnNldCBwcnVuZWQga2VwdCBcCisJIi0tcHJ1bmUgLS1wcnVuZS10YWdzIG9yaWdpbiArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB1bnNldCB1bnNldCB0cnVlICB1bnNldCBwcnVuZWQga2VwdCBcCisJIi0tcHJ1bmUgb3JpZ2luICtyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIgordGVzdF9jb25maWd1cmVkX3BydW5lIHVuc2V0IHVuc2V0IHVuc2V0IHRydWUgcHJ1bmVkICBrZXB0IFwKKwkiLS1wcnVuZSBvcmlnaW4gK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiCisKKyMgUHJ1bmluZyB0aGF0IGFsc28gdGFrZXMgcGxhY2UgaWYgYSBmaWxlOi8vIHVybCByZXBsYWNlcyBhIG5hbWVkCisjIHJlbW90ZS4gSG93ZXZlciwgYmVjYXVzZSB0aGVyZSdzIG5vIGltcGxpY2l0CisjICtyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIHJlZnNwZWMgYW5kIHN1cHBseWluZyBpdCBvbiB0aGUKKyMgY29tbWFuZC1saW5lIG5lZ2F0ZXMgLS1wcnVuZS10YWdzLCB0aGUgYnJhbmNoZXMgd2lsbCBub3QgYmUgcHJ1bmVkLgordGVzdF9jb25maWd1cmVkX3BydW5lX3R5cGUgdW5zZXQgdW5zZXQgdW5zZXQgdW5zZXQga2VwdCAgIGtlcHQgICAib3JpZ2luIC0tcHJ1bmUtdGFncyIgIm5hbWUiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmVfdHlwZSB1bnNldCB1bnNldCB1bnNldCB1bnNldCBrZXB0ICAga2VwdCAgICJvcmlnaW4gLS1wcnVuZS10YWdzIiAibGluayIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZV90eXBlIHVuc2V0IHVuc2V0IHVuc2V0IHVuc2V0IHBydW5lZCBwcnVuZWQgIm9yaWdpbiAtLXBydW5lIC0tcHJ1bmUtdGFncyIgIm5hbWUiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmVfdHlwZSB1bnNldCB1bnNldCB1bnNldCB1bnNldCBrZXB0ICAgcHJ1bmVkICJvcmlnaW4gLS1wcnVuZSAtLXBydW5lLXRhZ3MiICJsaW5rIgordGVzdF9jb25maWd1cmVkX3BydW5lX3R5cGUgdW5zZXQgdW5zZXQgdW5zZXQgdW5zZXQgcHJ1bmVkIHBydW5lZCAiLS1wcnVuZSAtLXBydW5lLXRhZ3Mgb3JpZ2luIiAibmFtZSIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZV90eXBlIHVuc2V0IHVuc2V0IHVuc2V0IHVuc2V0IGtlcHQgICBwcnVuZWQgIi0tcHJ1bmUgLS1wcnVuZS10YWdzIG9yaWdpbiIgImxpbmsiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmVfdHlwZSB1bnNldCB1bnNldCB0cnVlICB1bnNldCBwcnVuZWQgcHJ1bmVkICItLXBydW5lIG9yaWdpbiIgIm5hbWUiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmVfdHlwZSB1bnNldCB1bnNldCB0cnVlICB1bnNldCBrZXB0ICAgcHJ1bmVkICItLXBydW5lIG9yaWdpbiIgImxpbmsiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmVfdHlwZSB1bnNldCB1bnNldCB1bnNldCB0cnVlICBwcnVuZWQgcHJ1bmVkICItLXBydW5lIG9yaWdpbiIgIm5hbWUiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmVfdHlwZSB1bnNldCB1bnNldCB1bnNldCB0cnVlICBrZXB0ICAgcHJ1bmVkICItLXBydW5lIG9yaWdpbiIgImxpbmsiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmVfdHlwZSB0cnVlICB1bnNldCB0cnVlICB1bnNldCBwcnVuZWQgcHJ1bmVkICJvcmlnaW4iICJuYW1lIgordGVzdF9jb25maWd1cmVkX3BydW5lX3R5cGUgdHJ1ZSAgdW5zZXQgdHJ1ZSAgdW5zZXQga2VwdCAgIHBydW5lZCAib3JpZ2luIiAibGluayIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZV90eXBlIHVuc2V0ICB0cnVlIHRydWUgIHVuc2V0IHBydW5lZCBwcnVuZWQgIm9yaWdpbiIgIm5hbWUiCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmVfdHlwZSB1bnNldCAgdHJ1ZSB0cnVlICB1bnNldCBrZXB0ICAgcHJ1bmVkICJvcmlnaW4iICJsaW5rIgordGVzdF9jb25maWd1cmVkX3BydW5lX3R5cGUgdW5zZXQgIHRydWUgdW5zZXQgdHJ1ZSAgcHJ1bmVkIHBydW5lZCAib3JpZ2luIiAibmFtZSIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZV90eXBlIHVuc2V0ICB0cnVlIHVuc2V0IHRydWUgIGtlcHQgICBwcnVuZWQgIm9yaWdpbiIgImxpbmsiCisKKyMgV2hlbiBhbGwgcmVtb3RlLm9yaWdpbi5mZXRjaCBzZXR0aW5ncyBhcmUgZGVsZXRlZCBhIC0tcHJ1bmUKKyMgLS1wcnVuZS10YWdzIHN0aWxsIGltcGxpY2l0bHkgc3VwcGxpZXMgcmVmcy90YWdzLyo6cmVmcy90YWdzLyogc28KKyMgdGFncywgYnV0IG5vdCB0cmFja2luZyBicmFuY2hlcywgd2lsbCBiZSBkZWxldGVkLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHJlbW90ZS5vcmlnaW4uZmV0Y2ggIm9uZSInICcKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIHJlbW90ZS5vcmlnaW4uZmV0Y2gKKwkpCisnCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmVfdHlwZSB1bnNldCB1bnNldCB1bnNldCB1bnNldCBrZXB0IHBydW5lZCAib3JpZ2luIC0tcHJ1bmUgLS1wcnVuZS10YWdzIiAibmFtZSIKK3Rlc3RfY29uZmlndXJlZF9wcnVuZV90eXBlIHVuc2V0IHVuc2V0IHVuc2V0IHVuc2V0IGtlcHQgcHJ1bmVkICJvcmlnaW4gLS1wcnVuZSAtLXBydW5lLXRhZ3MiICJsaW5rIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGwgYm91bmRhcnkgY29tbWl0cyBhcmUgZXhjbHVkZWQnICcKKwl0ZXN0X2NvbW1pdCBiYXNlICYmCisJdGVzdF9jb21taXQgb25lc2lkZSAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCXRlc3RfY29tbWl0IG90aGVyc2lkZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2Ugb3RoZXJzaWRlICYmCisJYWQ9JChnaXQgbG9nIC0tbm8td2FsayAtLWZvcm1hdD0lYWQgSEVBRCkgJiYKKwlnaXQgYnVuZGxlIGNyZWF0ZSB0d29zaWRlLWJvdW5kYXJ5LmJkbCBtYXN0ZXIgLS1zaW5jZT0iJGFkIiAmJgorCWNvbnZlcnRfYnVuZGxlX3RvX3BhY2sgPHR3b3NpZGUtYm91bmRhcnkuYmRsID50d29zaWRlLWJvdW5kYXJ5LnBhY2sgJiYKKwlwYWNrPSQoZ2l0IGluZGV4LXBhY2sgLS1maXgtdGhpbiAtLXN0ZGluIDx0d29zaWRlLWJvdW5kYXJ5LnBhY2spICYmCisJdGVzdF9idW5kbGVfb2JqZWN0X2NvdW50IC5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrIyNwYWNrCX0ucGFjayAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tcHJ1bmUgcHJpbnRzIHRoZSByZW1vdGVzIHVybCcgJworCWdpdCBicmFuY2ggZ29vZGJ5ZSAmJgorCWdpdCBjbG9uZSAuIG9ubHktcHJ1bmVzICYmCisJZ2l0IGJyYW5jaCAtRCBnb29kYnllICYmCisJKAorCQljZCBvbmx5LXBydW5lcyAmJgorCQlnaXQgZmV0Y2ggLS1wcnVuZSBvcmlnaW4gMj4mMSB8IGhlYWQgLW4xID4uLi9hY3R1YWwKKwkpICYmCisJZWNobyAiRnJvbSAke0R9Ly4iID5leHBlY3QgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2huYW1lIEQvRiBjb25mbGljdCByZXNvbHZlZCBieSAtLXBydW5lJyAnCisJZ2l0IGJyYW5jaCBkaXIvZmlsZSAmJgorCWdpdCBjbG9uZSAuIHBydW5lLWRmLWNvbmZsaWN0ICYmCisJZ2l0IGJyYW5jaCAtRCBkaXIvZmlsZSAmJgorCWdpdCBicmFuY2ggZGlyICYmCisJKAorCQljZCBwcnVuZS1kZi1jb25mbGljdCAmJgorCQlnaXQgZmV0Y2ggLS1wcnVuZSAmJgorCQlnaXQgcmV2LXBhcnNlIG9yaWdpbi9kaXIgPi4uL2FjdHVhbAorCSkgJiYKKwlnaXQgcmV2LXBhcnNlIGRpciA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyBhIG9uZS1sZXZlbCByZWYgd29ya3MnICcKKwl0ZXN0X2NvbW1pdCBleHRyYSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2ZvbyBleHRyYSAmJgorCWdpdCBpbml0IG9uZS1sZXZlbCAmJgorCSgKKwkJY2Qgb25lLWxldmVsICYmCisJCWdpdCBmZXRjaCAuLiBIRUFEIHJlZnMvZm9vCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyB3aXRoIGF1dG8tZ2MgZG9lcyBub3QgbG9jayB1cCcgJworCXdyaXRlX3NjcmlwdCBhc2t5ZXNubyA8PC1cRU9GICYmCisJZWNobyAiJCoiICYmCisJZmFsc2UKKwlFT0YKKwlnaXQgY2xvbmUgImZpbGU6Ly8kRCIgYXV0by1nYyAmJgorCXRlc3RfY29tbWl0IHRlc3QyICYmCisJKAorCQljZCBhdXRvLWdjICYmCisJCWdpdCBjb25maWcgZmV0Y2gudW5wYWNrTGltaXQgMSAmJgorCQlnaXQgY29uZmlnIGdjLmF1dG9QYWNrTGltaXQgMSAmJgorCQlnaXQgY29uZmlnIGdjLmF1dG9EZXRhY2ggZmFsc2UgJiYKKwkJR0lUX0FTS19ZRVNOTz0iJEQvYXNreWVzbm8iIGdpdCBmZXRjaCA+ZmV0Y2gub3V0IDI+JjEgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IiBmZXRjaC5vdXQgJiYKKwkJISBncmVwICJTaG91bGQgSSB0cnkgYWdhaW4iIGZldGNoLm91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2ZldGNoIGFsaWduZWQgb3V0cHV0JyAnCisJZ2l0IGNsb25lIC4gZnVsbC1vdXRwdXQgJiYKKwl0ZXN0X2NvbW1pdCBsb29vb29vb29vb29vb25nLXRhZyAmJgorCSgKKwkJY2QgZnVsbC1vdXRwdXQgJiYKKwkJZ2l0IC1jIGZldGNoLm91dHB1dD1mdWxsIGZldGNoIG9yaWdpbiA+YWN0dWFsIDI+JjEgJiYKKwkJZ3JlcCAtZSAiLT4iIGFjdHVhbCB8IGN1dCAtYyAyMi0gPi4uL2FjdHVhbAorCSkgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbWFzdGVyICAgICAgICAgICAgICAgLT4gb3JpZ2luL21hc3RlcgorCWxvb29vb29vb29vb29vbmctdGFnIC0+IGxvb29vb29vb29vb29vbmctdGFnCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnZmV0Y2ggY29tcGFjdCBvdXRwdXQnICcKKwlnaXQgY2xvbmUgLiBjb21wYWN0ICYmCisJdGVzdF9jb21taXQgZXh0cmFhYSAmJgorCSgKKwkJY2QgY29tcGFjdCAmJgorCQlnaXQgLWMgZmV0Y2gub3V0cHV0PWNvbXBhY3QgZmV0Y2ggb3JpZ2luID5hY3R1YWwgMj4mMSAmJgorCQlncmVwIC1lICItPiIgYWN0dWFsIHwgY3V0IC1jIDIyLSA+Li4vYWN0dWFsCisJKSAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwltYXN0ZXIgICAgIC0+IG9yaWdpbi8qCisJZXh0cmFhYSAgICAtPiAqCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXNob3ctZm9yY2VkLXVwZGF0ZXMnICcKKwlta2RpciBmb3JjZWQtdXBkYXRlcyAmJgorCSgKKwkJY2QgZm9yY2VkLXVwZGF0ZXMgJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdF9jb21taXQgMSAmJgorCQl0ZXN0X2NvbW1pdCAyCisJKSAmJgorCWdpdCBjbG9uZSBmb3JjZWQtdXBkYXRlcyBmb3JjZWQtdXBkYXRlLWNsb25lICYmCisJZ2l0IGNsb25lIGZvcmNlZC11cGRhdGVzIG5vLWZvcmNlZC11cGRhdGUtY2xvbmUgJiYKKwlnaXQgLUMgZm9yY2VkLXVwZGF0ZXMgcmVzZXQgLS1oYXJkIEhFQUR+MSAmJgorCSgKKwkJY2QgZm9yY2VkLXVwZGF0ZS1jbG9uZSAmJgorCQlnaXQgZmV0Y2ggLS1zaG93LWZvcmNlZC11cGRhdGVzIG9yaWdpbiAyPm91dHB1dCAmJgorCQl0ZXN0X2kxOG5ncmVwICIoZm9yY2VkIHVwZGF0ZSkiIG91dHB1dAorCSkgJiYKKwkoCisJCWNkIG5vLWZvcmNlZC11cGRhdGUtY2xvbmUgJiYKKwkJZ2l0IGZldGNoIC0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcyBvcmlnaW4gMj5vdXRwdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAhICIoZm9yY2VkIHVwZGF0ZSkiIG91dHB1dAorCSkKKycKKworc2V0dXBfbmVnb3RpYXRpb25fdGlwICgpIHsKKwlTRVJWRVI9IiQxIgorCVVSTD0iJDIiCisJVVNFX1BST1RPQ09MX1YyPSIkMyIKKworCXJtIC1yZiAiJFNFUlZFUiIgY2xpZW50IHRyYWNlICYmCisJZ2l0IGluaXQgIiRTRVJWRVIiICYmCisJdGVzdF9jb21taXQgLUMgIiRTRVJWRVIiIGFscGhhXzEgJiYKKwl0ZXN0X2NvbW1pdCAtQyAiJFNFUlZFUiIgYWxwaGFfMiAmJgorCWdpdCAtQyAiJFNFUlZFUiIgY2hlY2tvdXQgLS1vcnBoYW4gYmV0YSAmJgorCXRlc3RfY29tbWl0IC1DICIkU0VSVkVSIiBiZXRhXzEgJiYKKwl0ZXN0X2NvbW1pdCAtQyAiJFNFUlZFUiIgYmV0YV8yICYmCisKKwlnaXQgY2xvbmUgIiRVUkwiIGNsaWVudCAmJgorCisJaWYgdGVzdCAiJFVTRV9QUk9UT0NPTF9WMiIgLWVxIDEKKwl0aGVuCisJCWdpdCAtQyAiJFNFUlZFUiIgY29uZmlnIHByb3RvY29sLnZlcnNpb24gMiAmJgorCQlnaXQgLUMgY2xpZW50IGNvbmZpZyBwcm90b2NvbC52ZXJzaW9uIDIKKwlmaSAmJgorCisJdGVzdF9jb21taXQgLUMgIiRTRVJWRVIiIGJldGFfcyAmJgorCWdpdCAtQyAiJFNFUlZFUiIgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgLUMgIiRTRVJWRVIiIGFscGhhX3MgJiYKKwlnaXQgLUMgIiRTRVJWRVIiIHRhZyAtZCBhbHBoYV8xIGFscGhhXzIgYmV0YV8xIGJldGFfMgorfQorCitjaGVja19uZWdvdGlhdGlvbl90aXAgKCkgeworCSMgRW5zdXJlIHRoYXQge2FscGhhLGJldGF9XzEgYXJlIHNlbnQgYXMgImhhdmUiLCBidXQgbm90IHthbHBoYV9iZXRhfV8yCisJQUxQSEFfMT0kKGdpdCAtQyBjbGllbnQgcmV2LXBhcnNlIGFscGhhXzEpICYmCisJZ3JlcCAiZmV0Y2g+IGhhdmUgJEFMUEhBXzEiIHRyYWNlICYmCisJQkVUQV8xPSQoZ2l0IC1DIGNsaWVudCByZXYtcGFyc2UgYmV0YV8xKSAmJgorCWdyZXAgImZldGNoPiBoYXZlICRCRVRBXzEiIHRyYWNlICYmCisJQUxQSEFfMj0kKGdpdCAtQyBjbGllbnQgcmV2LXBhcnNlIGFscGhhXzIpICYmCisJISBncmVwICJmZXRjaD4gaGF2ZSAkQUxQSEFfMiIgdHJhY2UgJiYKKwlCRVRBXzI9JChnaXQgLUMgY2xpZW50IHJldi1wYXJzZSBiZXRhXzIpICYmCisJISBncmVwICJmZXRjaD4gaGF2ZSAkQkVUQV8yIiB0cmFjZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5lZ290aWF0aW9uLXRpcCBsaW1pdHMgImhhdmUiIGxpbmVzIHNlbnQnICcKKwlzZXR1cF9uZWdvdGlhdGlvbl90aXAgc2VydmVyIHNlcnZlciAwICYmCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLUMgY2xpZW50IGZldGNoIFwKKwkJLS1uZWdvdGlhdGlvbi10aXA9YWxwaGFfMSAtLW5lZ290aWF0aW9uLXRpcD1iZXRhXzEgXAorCQlvcmlnaW4gYWxwaGFfcyBiZXRhX3MgJiYKKwljaGVja19uZWdvdGlhdGlvbl90aXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uZWdvdGlhdGlvbi10aXAgdW5kZXJzdGFuZHMgZ2xvYnMnICcKKwlzZXR1cF9uZWdvdGlhdGlvbl90aXAgc2VydmVyIHNlcnZlciAwICYmCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLUMgY2xpZW50IGZldGNoIFwKKwkJLS1uZWdvdGlhdGlvbi10aXA9Kl8xIFwKKwkJb3JpZ2luIGFscGhhX3MgYmV0YV9zICYmCisJY2hlY2tfbmVnb3RpYXRpb25fdGlwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbmVnb3RpYXRpb24tdGlwIHVuZGVyc3RhbmRzIGFiYnJldmlhdGVkIFNIQS0xJyAnCisJc2V0dXBfbmVnb3RpYXRpb25fdGlwIHNlcnZlciBzZXJ2ZXIgMCAmJgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCBmZXRjaCBcCisJCS0tbmVnb3RpYXRpb24tdGlwPSQoZ2l0IC1DIGNsaWVudCByZXYtcGFyc2UgLS1zaG9ydCBhbHBoYV8xKSBcCisJCS0tbmVnb3RpYXRpb24tdGlwPSQoZ2l0IC1DIGNsaWVudCByZXYtcGFyc2UgLS1zaG9ydCBiZXRhXzEpIFwKKwkJb3JpZ2luIGFscGhhX3MgYmV0YV9zICYmCisJY2hlY2tfbmVnb3RpYXRpb25fdGlwCisnCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCitzdGFydF9odHRwZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5lZ290aWF0aW9uLXRpcCBsaW1pdHMgImhhdmUiIGxpbmVzIHNlbnQgd2l0aCBIVFRQIHByb3RvY29sIHYyJyAnCisJc2V0dXBfbmVnb3RpYXRpb25fdGlwICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3NlcnZlciIgXAorCQkiJEhUVFBEX1VSTC9zbWFydC9zZXJ2ZXIiIDEgJiYKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnQgZmV0Y2ggXAorCQktLW5lZ290aWF0aW9uLXRpcD1hbHBoYV8xIC0tbmVnb3RpYXRpb24tdGlwPWJldGFfMSBcCisJCW9yaWdpbiBhbHBoYV9zIGJldGFfcyAmJgorCWNoZWNrX25lZ290aWF0aW9uX3RpcAorJworCisjIERPIE5PVCBhZGQgbm9uLWh0dHBkLXNwZWNpZmljIHRlc3RzIGhlcmUsIGJlY2F1c2UgdGhlIGxhc3QgcGFydCBvZiB0aGlzCisjIHRlc3Qgc2NyaXB0IGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiBodHRwZCBpcyBhdmFpbGFibGUgYW5kIGVuYWJsZWQuCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxMS1yZWZzcGVjLnNoIGIvdC90NTUxMS1yZWZzcGVjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1NDFmMzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTExLXJlZnNwZWMuc2gKQEAgLTAsMCArMSw5NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlZnNwZWMgcGFyc2luZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfcmVmc3BlYyAoKSB7CisJa2luZD0kMSByZWZzcGVjPSQyIGV4cGVjdD0kMworCWdpdCBjb25maWcgcmVtb3RlLmZyb3R6LnVybCAiLiIgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gcmVtb3RlLmZyb3R6ICYmCisJZ2l0IGNvbmZpZyByZW1vdGUuZnJvdHoudXJsICIuIiAmJgorCWdpdCBjb25maWcgInJlbW90ZS5mcm90ei4ka2luZCIgIiRyZWZzcGVjIiAmJgorCWlmIHRlc3QgIiRleHBlY3QiICE9IGludmFsaWQKKwl0aGVuCisJCXRpdGxlPSIka2luZCAkcmVmc3BlYyIKKwkJdGVzdD0nZ2l0IGxzLXJlbW90ZSBmcm90eicKKwllbHNlCisJCXRpdGxlPSIka2luZCAkcmVmc3BlYyAoaW52YWxpZCkiCisJCXRlc3Q9J3Rlc3RfbXVzdF9mYWlsIGdpdCBscy1yZW1vdGUgZnJvdHonCisJZmkKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkdGl0bGUiICIkdGVzdCIKK30KKwordGVzdF9yZWZzcGVjIHB1c2ggJycJCQkJCQlpbnZhbGlkCit0ZXN0X3JlZnNwZWMgcHVzaCAnOicKK3Rlc3RfcmVmc3BlYyBwdXNoICc6OicJCQkJCQlpbnZhbGlkCit0ZXN0X3JlZnNwZWMgcHVzaCAnKzonCisKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnJwordGVzdF9yZWZzcGVjIGZldGNoICc6JwordGVzdF9yZWZzcGVjIGZldGNoICc6OicJCQkJCQlpbnZhbGlkCisKK3Rlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2Zyb3R6LyonCit0ZXN0X3JlZnNwZWMgcHVzaCAncmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9mcm90eicJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzOnJlZnMvcmVtb3Rlcy9mcm90ei8qJwkJaW52YWxpZAordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9mcm90ei94eXp6eScKKworCisjIFRoZXNlIGhhdmUgaW52YWxpZCBMSFMsIGJ1dCB3ZSBkbyBub3QgaGF2ZSBhIGZvcm1hbCAidmFsaWQgc2hhLTEKKyMgZXhwcmVzc2lvbiBzeW50YXggY2hlY2tlciIgc28gdGhleSBhcmUgbm90IGNoZWNrZWQgd2l0aCB0aGUgY3VycmVudAorIyBjb2RlLiAgVGhleSB3aWxsIGJlIGNhdWdodCBkb3duc3RyZWFtIGFueXdheSwgYnV0IHdlIG1heSB3YW50IHRvCisjIGhhdmUgdGlnaHRlciBjaGVjayBsYXRlci4uLgorCis6IHRlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzL21hc3Rlcjo6cmVmcy9yZW1vdGVzL2Zyb3R6L3h5enp5JwlpbnZhbGlkCis6IHRlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzL21hc3RlIDpyZWZzL3JlbW90ZXMvZnJvdHoveHl6enknCWludmFsaWQKKwordGVzdF9yZWZzcGVjIGZldGNoICdyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2Zyb3R6LyonCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvZnJvdHonCQlpbnZhbGlkCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHM6cmVmcy9yZW1vdGVzL2Zyb3R6LyonCQlpbnZhbGlkCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9mcm90ei94eXp6eScKK3Rlc3RfcmVmc3BlYyBmZXRjaCAncmVmcy9oZWFkcy9tYXN0ZXI6OnJlZnMvcmVtb3Rlcy9mcm90ei94eXp6eScJaW52YWxpZAordGVzdF9yZWZzcGVjIGZldGNoICdyZWZzL2hlYWRzL21hc3RlIDpyZWZzL3JlbW90ZXMvZnJvdHoveHl6enknCWludmFsaWQKKwordGVzdF9yZWZzcGVjIHB1c2ggJ21hc3Rlcn4xOnJlZnMvcmVtb3Rlcy9mcm90ei9iYWNrdXAnCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ21hc3Rlcn4xOnJlZnMvcmVtb3Rlcy9mcm90ei9iYWNrdXAnCQlpbnZhbGlkCit0ZXN0X3JlZnNwZWMgcHVzaCAnSEVBRH40OnJlZnMvcmVtb3Rlcy9mcm90ei9uZXcnCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ0hFQUR+NDpyZWZzL3JlbW90ZXMvZnJvdHovbmV3JwkJaW52YWxpZAorCit0ZXN0X3JlZnNwZWMgcHVzaCAnSEVBRCcKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnSEVBRCcKK3Rlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzLyBuaXRmb2wnCQkJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBmZXRjaCAncmVmcy9oZWFkcy8gbml0Zm9sJwkJCQlpbnZhbGlkCisKK3Rlc3RfcmVmc3BlYyBwdXNoICdIRUFEOicJCQkJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnSEVBRDonCit0ZXN0X3JlZnNwZWMgcHVzaCAncmVmcy9oZWFkcy8gbml0Zm9sOicJCQkJaW52YWxpZAordGVzdF9yZWZzcGVjIGZldGNoICdyZWZzL2hlYWRzLyBuaXRmb2w6JwkJCWludmFsaWQKKwordGVzdF9yZWZzcGVjIHB1c2ggJzpyZWZzL3JlbW90ZXMvZnJvdHovZGVsZXRlbWUnCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJzpyZWZzL3JlbW90ZXMvZnJvdHovSEVBRC10by1tZScKK3Rlc3RfcmVmc3BlYyBwdXNoICc6cmVmcy9yZW1vdGVzL2Zyb3R6L2RlbGV0ZSBtZScJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnOnJlZnMvcmVtb3Rlcy9mcm90ei9IRUFEIHRvIG1lJwkJaW52YWxpZAorCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKi1ibGFoJwordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKi1ibGFoJworCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMqL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJwordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMqL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJworCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvKi8qL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJyBpbnZhbGlkCit0ZXN0X3JlZnNwZWMgcHVzaCAncmVmcy9oZWFkcy8qLyovZm9yLWxpbnVzOnJlZnMvcmVtb3Rlcy9taW5lLyonIGludmFsaWQKKwordGVzdF9yZWZzcGVjIGZldGNoICdyZWZzL2hlYWRzLypnKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKicgaW52YWxpZAordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvKmcqL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJyBpbnZhbGlkCisKK3Rlc3RfcmVmc3BlYyBmZXRjaCAncmVmcy9oZWFkcy8qL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJwordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKicKKworZ29vZD0kKHByaW50ZiAnXDMwM1wyMDQnKQordGVzdF9yZWZzcGVjIGZldGNoICJyZWZzL2hlYWRzLyR7Z29vZH0iCitiYWQ9JChwcmludGYgJ1wwMTF0YWInKQordGVzdF9yZWZzcGVjIGZldGNoICJyZWZzL2hlYWRzLyR7YmFkfSIJCQkJaW52YWxpZAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTItbHMtcmVtb3RlLnNoIGIvdC90NTUxMi1scy1yZW1vdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTk4YzNhMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTItbHMtcmVtb3RlLnNoCkBAIC0wLDAgKzEsMzQ5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxzLXJlbW90ZScKKworLiAuL3Rlc3QtbGliLnNoCisKK2dlbmVyYXRlX3JlZmVyZW5jZXMgKCkgeworCWZvciByZWYKKwlkbworCQlvaWQ9JChnaXQgcmV2LXBhcnNlICIkcmVmIikgJiYKKwkJcHJpbnRmICclc1x0JXNcbicgIiRvaWQiICIkcmVmIiB8fCByZXR1cm4gMQorCWRvbmUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIG1hcmsgJiYKKwlnaXQgdGFnIG1hcmsxLjEgJiYKKwlnaXQgdGFnIG1hcmsxLjIgJiYKKwlnaXQgdGFnIG1hcmsxLjEwICYmCisJZ2l0IHNob3ctcmVmIC0tdGFncyAtZCA+ZXhwZWN0ZWQudGFnLnJhdyAmJgorCXNlZCAtZSAicy8gLwkvIiBleHBlY3RlZC50YWcucmF3ID5leHBlY3RlZC50YWcgJiYKKwlnZW5lcmF0ZV9yZWZlcmVuY2VzIEhFQUQgPmV4cGVjdGVkLmFsbCAmJgorCWdpdCBzaG93LXJlZiAtZAk+cmVmcyAmJgorCXNlZCAtZSAicy8gLwkvIiByZWZzID4+ZXhwZWN0ZWQuYWxsICYmCisKKwlnaXQgcmVtb3RlIGFkZCBzZWxmICIkKHB3ZCkvLmdpdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtcmVtb3RlIC0tdGFncyAuZ2l0JyAnCisJZ2l0IGxzLXJlbW90ZSAtLXRhZ3MgLmdpdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQudGFnIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgLmdpdCcgJworCWdpdCBscy1yZW1vdGUgLmdpdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuYWxsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgLS10YWdzIHNlbGYnICcKKwlnaXQgbHMtcmVtb3RlIC0tdGFncyBzZWxmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC50YWcgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXJlbW90ZSBzZWxmJyAnCisJZ2l0IGxzLXJlbW90ZSBzZWxmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5hbGwgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXJlbW90ZSAtLXNvcnQ9InZlcnNpb246cmVmbmFtZSIgLS10YWdzIHNlbGYnICcKKwlnZW5lcmF0ZV9yZWZlcmVuY2VzIFwKKwkJcmVmcy90YWdzL21hcmsgXAorCQlyZWZzL3RhZ3MvbWFyazEuMSBcCisJCXJlZnMvdGFncy9tYXJrMS4yIFwKKwkJcmVmcy90YWdzL21hcmsxLjEwID5leHBlY3QgJiYKKwlnaXQgbHMtcmVtb3RlIC0tc29ydD0idmVyc2lvbjpyZWZuYW1lIiAtLXRhZ3Mgc2VsZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgLS1zb3J0PSItdmVyc2lvbjpyZWZuYW1lIiAtLXRhZ3Mgc2VsZicgJworCWdlbmVyYXRlX3JlZmVyZW5jZXMgXAorCQlyZWZzL3RhZ3MvbWFyazEuMTAgXAorCQlyZWZzL3RhZ3MvbWFyazEuMiBcCisJCXJlZnMvdGFncy9tYXJrMS4xIFwKKwkJcmVmcy90YWdzL21hcmsgPmV4cGVjdCAmJgorCWdpdCBscy1yZW1vdGUgLS1zb3J0PSItdmVyc2lvbjpyZWZuYW1lIiAtLXRhZ3Mgc2VsZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgLS1zb3J0PSItcmVmbmFtZSIgLS10YWdzIHNlbGYnICcKKwlnZW5lcmF0ZV9yZWZlcmVuY2VzIFwKKwkJcmVmcy90YWdzL21hcmsxLjIgXAorCQlyZWZzL3RhZ3MvbWFyazEuMTAgXAorCQlyZWZzL3RhZ3MvbWFyazEuMSBcCisJCXJlZnMvdGFncy9tYXJrID5leHBlY3QgJiYKKwlnaXQgbHMtcmVtb3RlIC0tc29ydD0iLXJlZm5hbWUiIC0tdGFncyBzZWxmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZXMgd2hlbiBubyByZW1vdGUgc3BlY2lmaWVkIGFuZCBubyBkZWZhdWx0IHJlbW90ZXMgZm91bmQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtcmVtb3RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAib3JpZ2luIiB3aGVuIG5vIHJlbW90ZSBzcGVjaWZpZWQnICcKKwlVUkw9IiQocHdkKS8uZ2l0IiAmJgorCWVjaG8gIkZyb20gJFVSTCIgPmV4cF9lcnIgJiYKKworCWdpdCByZW1vdGUgYWRkIG9yaWdpbiAiJFVSTCIgJiYKKwlnaXQgbHMtcmVtb3RlIDI+YWN0dWFsX2VyciA+YWN0dWFsICYmCisKKwl0ZXN0X2NtcCBleHBfZXJyIGFjdHVhbF9lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5hbGwgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1cHByZXNzICJGcm9tIDx1cmw+IiB3aXRoIC1xJyAnCisJZ2l0IGxzLXJlbW90ZSAtcSAyPmFjdHVhbF9lcnIgJiYKKwkhIHRlc3RfY21wIGV4cF9lcnIgYWN0dWFsX2VycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgYnJhbmNoLjxuYW1lPi5yZW1vdGUgaWYgcG9zc2libGUnICcKKwkjCisJIyBUZXN0IHRoYXQgd2UgYXJlIGluZGVlZCB1c2luZyBicmFuY2guPG5hbWU+LnJlbW90ZSwgbm90ICJvcmlnaW4iLCBldmVuCisJIyB0aG91Z2ggdGhlICJvcmlnaW4iIHJlbW90ZSBoYXMgYmVlbiBzZXQuCisJIworCisJIyBzZXR1cCBhIG5ldyByZW1vdGUgdG8gZGlmZmVyZW50aWF0ZSBmcm9tICJvcmlnaW4iCisJZ2l0IGNsb25lIC4gb3RoZXIuZ2l0ICYmCisJKAorCQljZCBvdGhlci5naXQgJiYKKwkJZWNobyAiJChnaXQgcmV2LXBhcnNlIEhFQUQpCUhFQUQiICYmCisJCWdpdCBzaG93LXJlZgl8IHNlZCAtZSAicy8gLwkvIgorCSkgPmV4cCAmJgorCisJVVJMPSJvdGhlci5naXQiICYmCisJZWNobyAiRnJvbSAkVVJMIiA+ZXhwX2VyciAmJgorCisJZ2l0IHJlbW90ZSBhZGQgb3RoZXIgJFVSTCAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgb3RoZXIgJiYKKworCWdpdCBscy1yZW1vdGUgMj5hY3R1YWxfZXJyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBfZXJyIGFjdHVhbF9lcnIgJiYKKwl0ZXN0X2NtcCBleHAgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZ1c2VzIHBhdHRlcm4gYXMgcmVtb3RlIHdoZW4gbm8gcmVtb3RlIHNwZWNpZmllZCcgJworCWlmIHRlc3RfaGF2ZV9wcmVyZXEgTUlOR1cKKwl0aGVuCisJCSMgV2luZG93cyBkb2VzIG5vdCBsaWtlIGFzdGVyaXNrcyBpbiBwYXRobmFtZQorCQlkb2VzX25vdF9leGlzdD1tYXN0ZXIKKwllbHNlCisJCWRvZXNfbm90X2V4aXN0PSJyZWZzKm1hc3RlciIKKwlmaSAmJgorCWNhdCA+ZXhwIDw8LUVPRiAmJgorCWZhdGFsOiAnXCcnJGRvZXNfbm90X2V4aXN0J1wnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBnaXQgcmVwb3NpdG9yeQorCWZhdGFsOiBDb3VsZCBub3QgcmVhZCBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LgorCisJUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBhY2Nlc3MgcmlnaHRzCisJYW5kIHRoZSByZXBvc2l0b3J5IGV4aXN0cy4KKwlFT0YKKwkjCisJIyBEbyBub3QgZXhwZWN0ICJnaXQgbHMtcmVtb3RlIDxwYXR0ZXJuPiIgdG8gd29yazsgbHMtcmVtb3RlIG5lZWRzCisJIyA8cmVtb3RlPiBpZiB5b3Ugd2FudCB0byBmZWVkIDxwYXR0ZXJuPiwganVzdCBsaWtlIHlvdSBjYW5ub3Qgc2F5CisJIyBmZXRjaCA8YnJhbmNoPi4KKwkjIFdlIGNvdWxkIGp1c3QgYXMgZWFzaWx5IGhhdmUgdXNlZCAibWFzdGVyIjsgdGhlICIqIiBlbXBoYXNpemVzIGl0cworCSMgcm9sZSBhcyBhIHBhdHRlcm4uCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLXJlbW90ZSAiJGRvZXNfbm90X2V4aXN0IiA+YWN0dWFsIDI+JjEgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWUgd2l0aCBub24tMiBmb3Igd3JvbmcgcmVwb3NpdG9yeSBldmVuIHdpdGggLS1leGl0LWNvZGUnICcKKwl7CisJCWdpdCBscy1yZW1vdGUgLS1leGl0LWNvZGUgLi9uby1zdWNoLXJlcG9zaXRvcnkKKwkJc3RhdHVzPSQ/CisJfSAmJgorCXRlc3QgJHN0YXR1cyAhPSAyICYmIHRlc3QgJHN0YXR1cyAhPSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlcG9ydCBzdWNjZXNzIGV2ZW4gd2hlbiBub3RoaW5nIG1hdGNoZXMnICcKKwlnaXQgbHMtcmVtb3RlIG90aGVyLmdpdCAicmVmcy9uc24vKiIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVwb3J0IG5vLW1hdGNoIHdpdGggLS1leGl0LWNvZGUnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDIgZ2l0IGxzLXJlbW90ZSAtLWV4aXQtY29kZSBvdGhlci5naXQgInJlZnMvbnNuLyoiID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlcG9ydCBtYXRjaCB3aXRoIC0tZXhpdC1jb2RlJyAnCisJZ2l0IGxzLXJlbW90ZSAtLWV4aXQtY29kZSBvdGhlci5naXQgInJlZnMvdGFncy8qIiA+YWN0dWFsICYmCisJZ2l0IGxzLXJlbW90ZSAuIHRhZ3MvbWFyayogPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHNvbWUgZXh0cmEgdGFncyBmb3IgcmVmIGhpZGluZycgJworCWdpdCB0YWcgbWFnaWMvb25lICYmCisJZ2l0IHRhZyBtYWdpYy90d28KKycKKworZm9yIGNvbmZpZ3NlY3Rpb24gaW4gdHJhbnNmZXIgdXBsb2FkcGFjaworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJIaWRlIHNvbWUgcmVmcyB3aXRoICRjb25maWdzZWN0aW9uLmhpZGVyZWZzIiAnCisJCXRlc3RfY29uZmlnICRjb25maWdzZWN0aW9uLmhpZGVyZWZzIHJlZnMvdGFncyAmJgorCQlnaXQgbHMtcmVtb3RlIC4gPmFjdHVhbCAmJgorCQl0ZXN0X3VuY29uZmlnICRjb25maWdzZWN0aW9uLmhpZGVyZWZzICYmCisJCWdpdCBscy1yZW1vdGUgLiA+ZXhwZWN0LnJhdyAmJgorCQlzZWQgLWUgIi8JcmVmc1wvdGFnc1wvL2QiIGV4cGVjdC5yYXcgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiT3ZlcnJpZGUgaGlkaW5nIG9mICRjb25maWdzZWN0aW9uLmhpZGVyZWZzIiAnCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF91bmNvbmZpZyAkY29uZmlnc2VjdGlvbi5oaWRlcmVmcyIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCAkY29uZmlnc2VjdGlvbi5oaWRlcmVmcyByZWZzL3RhZ3MgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCAkY29uZmlnc2VjdGlvbi5oaWRlcmVmcyAiIXJlZnMvdGFncy9tYWdpYyIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCAkY29uZmlnc2VjdGlvbi5oaWRlcmVmcyByZWZzL3RhZ3MvbWFnaWMvb25lICYmCisJCWdpdCBscy1yZW1vdGUgLiA+YWN0dWFsICYmCisJCWdyZXAgcmVmcy90YWdzL21hZ2ljL3R3byBhY3R1YWwgJiYKKwkJISBncmVwIHJlZnMvdGFncy9tYWdpYy9vbmUgYWN0dWFsCisJJworCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJyaWRlcyB3b3JrIGJldHdlZW4gbWl4ZWQgdHJhbnNmZXIvdXBsb2FkLXBhY2sgaGlkZVJlZnMnICcKKwl0ZXN0X2NvbmZpZyB1cGxvYWRwYWNrLmhpZGVyZWZzIHJlZnMvdGFncyAmJgorCXRlc3RfY29uZmlnIHRyYW5zZmVyLmhpZGVyZWZzICIhcmVmcy90YWdzL21hZ2ljIiAmJgorCWdpdCBscy1yZW1vdGUgLiA+YWN0dWFsICYmCisJZ3JlcCByZWZzL3RhZ3MvbWFnaWMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb3RvY29sIHYyIHN1cHBvcnRzIGhpZGVyZWZzJyAnCisJdGVzdF9jb25maWcgdXBsb2FkcGFjay5oaWRlcmVmcyByZWZzL3RhZ3MgJiYKKwlnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIGxzLXJlbW90ZSAuID5hY3R1YWwgJiYKKwkhIGdyZXAgcmVmcy90YWdzIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgLS1zeW1yZWYnICcKKwlnaXQgZmV0Y2ggb3JpZ2luICYmCisJZWNobyAicmVmOiByZWZzL2hlYWRzL21hc3RlcglIRUFEIiA+ZXhwZWN0ICYmCisJZ2VuZXJhdGVfcmVmZXJlbmNlcyBcCisJCUhFQUQgXAorCQlyZWZzL2hlYWRzL21hc3RlciA+PmV4cGVjdCAmJgorCW9pZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkb2lkCXJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCIgPj5leHBlY3QgJiYKKwlnZW5lcmF0ZV9yZWZlcmVuY2VzIFwKKwkJcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgXAorCQlyZWZzL3RhZ3MvbWFyayBcCisJCXJlZnMvdGFncy9tYXJrMS4xIFwKKwkJcmVmcy90YWdzL21hcmsxLjEwIFwKKwkJcmVmcy90YWdzL21hcmsxLjIgPj5leHBlY3QgJiYKKwkjIFByb3RvY29sIHYyIHN1cHBvcnRzIHNlbmRpbmcgc3ltcmVmcyBmb3IgcmVmcyBvdGhlciB0aGFuIEhFQUQsIHNvIHVzZQorCSMgcHJvdG9jb2wgdjAgaGVyZS4KKwlHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgZ2l0IGxzLXJlbW90ZSAtLXN5bXJlZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgd2l0aCBmaWx0ZXJlZCBzeW1yZWYgKHJlZm5hbWUpJyAnCisJcmV2PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCXJlZjogcmVmcy9oZWFkcy9tYXN0ZXIJSEVBRAorCSRyZXYJSEVBRAorCUVPRgorCSMgUHJvdG9jb2wgdjIgc3VwcG9ydHMgc2VuZGluZyBzeW1yZWZzIGZvciByZWZzIG90aGVyIHRoYW4gSEVBRCwgc28gdXNlCisJIyBwcm90b2NvbCB2MCBoZXJlLgorCUdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBnaXQgbHMtcmVtb3RlIC0tc3ltcmVmIC4gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdscy1yZW1vdGUgd2l0aCBmaWx0ZXJlZCBzeW1yZWYgKC0taGVhZHMpJyAnCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL2ZvbyByZWZzL3RhZ3MvbWFyayAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCXJlZjogcmVmcy90YWdzL21hcmsJcmVmcy9oZWFkcy9mb28KKwkkcmV2CXJlZnMvaGVhZHMvZm9vCisJJHJldglyZWZzL2hlYWRzL21hc3RlcgorCUVPRgorCSMgUHJvdG9jb2wgdjIgc3VwcG9ydHMgc2VuZGluZyBzeW1yZWZzIGZvciByZWZzIG90aGVyIHRoYW4gSEVBRCwgc28gdXNlCisJIyBwcm90b2NvbCB2MCBoZXJlLgorCUdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBnaXQgbHMtcmVtb3RlIC0tc3ltcmVmIC0taGVhZHMgLiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgLS1zeW1yZWYgb21pdHMgZmlsdGVyZWQtb3V0IG1hdGNoZXMnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkcmV2CXJlZnMvaGVhZHMvZm9vCisJJHJldglyZWZzL2hlYWRzL21hc3RlcgorCUVPRgorCSMgUHJvdG9jb2wgdjIgc3VwcG9ydHMgc2VuZGluZyBzeW1yZWZzIGZvciByZWZzIG90aGVyIHRoYW4gSEVBRCwgc28gdXNlCisJIyBwcm90b2NvbCB2MCBoZXJlLgorCUdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBnaXQgbHMtcmVtb3RlIC0tc3ltcmVmIC0taGVhZHMgLiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCUdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBnaXQgbHMtcmVtb3RlIC0tc3ltcmVmIC4gInJlZnMvaGVhZHMvKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9sYXp5X3ByZXJlcSBHSVRfREFFTU9OICcKKwl0ZXN0X2Jvb2xfZW52IEdJVF9URVNUX0dJVF9EQUVNT04gdHJ1ZQorJworCisjIFRoaXMgdGVzdCBzcGF3bnMgYSBkYWVtb24sIHNvIHJ1biBpdCBvbmx5IGlmIHRoZSB1c2VyIHdvdWxkIGJlIE9LIHdpdGgKKyMgdGVzdGluZyB3aXRoIGdpdC1kYWVtb24uCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUsSkdJVCxHSVRfREFFTU9OICdpbmRpY2F0ZSBubyByZWZzIGluIHN0YW5kYXJkcy1jb21wbGlhbnQgZW1wdHkgcmVtb3RlJyAnCisJdGVzdF9zZXRfcG9ydCBKR0lUX0RBRU1PTl9QT1JUICYmCisJSkdJVF9EQUVNT05fUElEPSAmJgorCWdpdCBpbml0IC0tYmFyZSBlbXB0eS5naXQgJiYKKwk+ZW1wdHkuZ2l0L2dpdC1kYWVtb24tZXhwb3J0LW9rICYmCisJbWtmaWZvIGpnaXRfZGFlbW9uX291dHB1dCAmJgorCXsKKwkJamdpdCBkYWVtb24gLS1wb3J0PSIkSkdJVF9EQUVNT05fUE9SVCIgLiA+amdpdF9kYWVtb25fb3V0cHV0ICYKKwkJSkdJVF9EQUVNT05fUElEPSQhCisJfSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBraWxsICIkSkdJVF9EQUVNT05fUElEIiAmJgorCXsKKwkJcmVhZCBsaW5lICYmCisJCWNhc2UgJGxpbmUgaW4KKwkJRXhwb3J0aW5nKikKKwkJCTs7CisJCSopCisJCQllY2hvICJFeHBlY3RlZDogRXhwb3J0aW5nIiAmJgorCQkJZmFsc2U7OworCQllc2FjICYmCisJCXJlYWQgbGluZSAmJgorCQljYXNlICRsaW5lIGluCisJCSJMaXN0ZW5pbmcgb24iKikKKwkJCTs7CisJCSopCisJCQllY2hvICJFeHBlY3RlZDogTGlzdGVuaW5nIG9uIiAmJgorCQkJZmFsc2U7OworCQllc2FjCisJfSA8amdpdF9kYWVtb25fb3V0cHV0ICYmCisJIyAtLWV4aXQtY29kZSBhc2tzIHRoZSBjb21tYW5kIHRvIGV4aXQgd2l0aCAyIHdoZW4gbm8KKwkjIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kLgorCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgbHMtcmVtb3RlIC0tZXhpdC1jb2RlIGdpdDovL2xvY2FsaG9zdDokSkdJVF9EQUVNT05fUE9SVC9lbXB0eS5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtcmVtb3RlIHdvcmtzIG91dHNpZGUgcmVwb3NpdG9yeScgJworCSMgSXQgaXMgaW1wb3J0YW50IGZvciB0aGlzIHJlcG8gdG8gYmUgaW5zaWRlIHRoZSBub25naXQKKwkjIGFyZWEsIGFzIHdlIHdhbnQgYSByZXBvIG5hbWUgdGhhdCBkb2VzIG5vdCBpbmNsdWRlCisJIyBzbGFzaGVzIChiZWNhdXNlIHRob3NlIGluaGliaXQgc29tZSBvZiBvdXIgY29uZmlndXJhdGlvbgorCSMgbG9va3VwcykuCisJbm9uZ2l0IGdpdCBpbml0IC0tYmFyZSBkc3QuZ2l0ICYmCisJbm9uZ2l0IGdpdCBscy1yZW1vdGUgZHN0LmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgLS1zb3J0IGZhaWxzIGdyYWNlZnVsbHkgb3V0c2lkZSByZXBvc2l0b3J5JyAnCisJIyBVc2UgYSBzb3J0IGtleSB0aGF0IHJlcXVpcmVzIGFjY2VzcyB0byB0aGUgcmVmZXJlbmNlZCBvYmplY3RzLgorCW5vbmdpdCB0ZXN0X211c3RfZmFpbCBnaXQgbHMtcmVtb3RlIC0tc29ydD1hdXRob3JkYXRlICIkVFJBU0hfRElSRUNUT1JZIiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIl5mYXRhbDogbm90IGEgZ2l0IHJlcG9zaXRvcnksIGJ1dCB0aGUgZmllbGQgJ1wnJ2F1dGhvcmRhdGUnXCcnIHJlcXVpcmVzIGFjY2VzcyB0byBvYmplY3QgZGF0YSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXJlbW90ZSBwYXR0ZXJucyB3b3JrIHdpdGggYWxsIHByb3RvY29sIHZlcnNpb25zJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lKQklKHJlZm5hbWUpIiBcCisJCXJlZnMvaGVhZHMvbWFzdGVyIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0xIGxzLXJlbW90ZSAuIG1hc3RlciA+YWN0dWFsLnYxICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC52MSAmJgorCWdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgbHMtcmVtb3RlIC4gbWFzdGVyID5hY3R1YWwudjIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLnYyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXJlbW90ZSBwcmVmaXhlcyB3b3JrIHdpdGggYWxsIHByb3RvY29sIHZlcnNpb25zJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lKQklKHJlZm5hbWUpIiBcCisJCXJlZnMvaGVhZHMvIHJlZnMvdGFncy8gPmV4cGVjdCAmJgorCWdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTEgbHMtcmVtb3RlIC0taGVhZHMgLS10YWdzIC4gPmFjdHVhbC52MSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwudjEgJiYKKwlnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIGxzLXJlbW90ZSAtLWhlYWRzIC0tdGFncyAuID5hY3R1YWwudjIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLnYyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxMy1mZXRjaC10cmFjay5zaCBiL3QvdDU1MTMtZmV0Y2gtdHJhY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjVkMWUwNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTMtZmV0Y2gtdHJhY2suc2gKQEAgLTAsMCArMSwzMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoIGZvbGxvd3MgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGNvcnJlY3RseScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCT5maWxlICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBJbml0aWFsICYmCisJZ2l0IGJyYW5jaCBiLTAgJiYKKwlnaXQgYnJhbmNoIGIxICYmCisJZ2l0IGJyYW5jaCBiL29uZSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gb3RoZXIgJiYKKwkoCisJCWNkIG90aGVyICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgLi4gJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLmZldGNoICIrcmVmcy9oZWFkcy9iLyo6cmVmcy9yZW1vdGVzL2IvKiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgZmV0Y2ggJworCSgKKwkJY2Qgb3RoZXIgJiYgZ2l0IGZldGNoIG9yaWdpbiAmJgorCQl0ZXN0ICIkKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiKSIgPSByZWZzL3JlbW90ZXMvYi9vbmUKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxNC1mZXRjaC1tdWx0aXBsZS5zaCBiL3QvdDU1MTQtZmV0Y2gtbXVsdGlwbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGU4ZTJmMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTQtZmV0Y2gtbXVsdGlwbGUuc2gKQEAgLTAsMCArMSwxOTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaCAtLWFsbCB3b3JrcyBjb3JyZWN0bHknCisKKy4gLi90ZXN0LWxpYi5zaAorCitzZXR1cF9yZXBvc2l0b3J5ICgpIHsKKwlta2RpciAiJDEiICYmICgKKwljZCAiJDEiICYmCisJZ2l0IGluaXQgJiYKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwk+ZWxpZiAmJgorCWdpdCBhZGQgZWxpZiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlNlY29uZCIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlzZXR1cF9yZXBvc2l0b3J5IG9uZSAmJgorCXNldHVwX3JlcG9zaXRvcnkgdHdvICYmCisJKAorCQljZCB0d28gJiYgZ2l0IGJyYW5jaCBhbm90aGVyCisJKSAmJgorCWdpdCBjbG9uZSAtLW1pcnJvciB0d28gdGhyZWUgJiYKKwlnaXQgY2xvbmUgb25lIHRlc3QKKycKKworY2F0ID4gdGVzdC9leHBlY3QgPDwgRU9GCisgIG9uZS9tYXN0ZXIKKyAgb25lL3NpZGUKKyAgb3JpZ2luL0hFQUQgLT4gb3JpZ2luL21hc3RlcgorICBvcmlnaW4vbWFzdGVyCisgIG9yaWdpbi9zaWRlCisgIHRocmVlL2Fub3RoZXIKKyAgdGhyZWUvbWFzdGVyCisgIHRocmVlL3NpZGUKKyAgdHdvL2Fub3RoZXIKKyAgdHdvL21hc3RlcgorICB0d28vc2lkZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLWFsbCcgJworCShjZCB0ZXN0ICYmCisJIGdpdCByZW1vdGUgYWRkIG9uZSAuLi9vbmUgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgdHdvIC4uL3R3byAmJgorCSBnaXQgcmVtb3RlIGFkZCB0aHJlZSAuLi90aHJlZSAmJgorCSBnaXQgZmV0Y2ggLS1hbGwgJiYKKwkgZ2l0IGJyYW5jaCAtciA+IG91dHB1dCAmJgorCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZmV0Y2ggLS1hbGwgc2hvdWxkIGNvbnRpbnVlIGlmIGEgcmVtb3RlIGhhcyBlcnJvcnMnICcKKwkoZ2l0IGNsb25lIG9uZSB0ZXN0MiAmJgorCSBjZCB0ZXN0MiAmJgorCSBnaXQgcmVtb3RlIGFkZCBiYWQgLi4vbm9uLWV4aXN0aW5nICYmCisJIGdpdCByZW1vdGUgYWRkIG9uZSAuLi9vbmUgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgdHdvIC4uL3R3byAmJgorCSBnaXQgcmVtb3RlIGFkZCB0aHJlZSAuLi90aHJlZSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLS1hbGwgJiYKKwkgZ2l0IGJyYW5jaCAtciA+IG91dHB1dCAmJgorCSB0ZXN0X2NtcCAuLi90ZXN0L2V4cGVjdCBvdXRwdXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLWFsbCBkb2VzIG5vdCBhbGxvdyBub24tb3B0aW9uIGFyZ3VtZW50cycgJworCShjZCB0ZXN0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAtLWFsbCBvcmlnaW4gJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC0tYWxsIG9yaWdpbiBtYXN0ZXIpCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyAgb3JpZ2luL0hFQUQgLT4gb3JpZ2luL21hc3RlcgorICBvcmlnaW4vbWFzdGVyCisgIG9yaWdpbi9zaWRlCisgIHRocmVlL2Fub3RoZXIKKyAgdGhyZWUvbWFzdGVyCisgIHRocmVlL3NpZGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZmV0Y2ggLS1tdWx0aXBsZSAoYnV0IG9ubHkgb25lIHJlbW90ZSknICcKKwkoZ2l0IGNsb25lIG9uZSB0ZXN0MyAmJgorCSBjZCB0ZXN0MyAmJgorCSBnaXQgcmVtb3RlIGFkZCB0aHJlZSAuLi90aHJlZSAmJgorCSBnaXQgZmV0Y2ggLS1tdWx0aXBsZSB0aHJlZSAmJgorCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCisJIHRlc3RfY21wIC4uL2V4cGVjdCBvdXRwdXQpCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyAgb25lL21hc3RlcgorICBvbmUvc2lkZQorICB0d28vYW5vdGhlcgorICB0d28vbWFzdGVyCisgIHR3by9zaWRlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tbXVsdGlwbGUgKHR3byByZW1vdGVzKScgJworCShnaXQgY2xvbmUgb25lIHRlc3Q0ICYmCisJIGNkIHRlc3Q0ICYmCisJIGdpdCByZW1vdGUgcm0gb3JpZ2luICYmCisJIGdpdCByZW1vdGUgYWRkIG9uZSAuLi9vbmUgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgdHdvIC4uL3R3byAmJgorCSBHSVRfVFJBQ0U9MSBnaXQgZmV0Y2ggLS1tdWx0aXBsZSBvbmUgdHdvIDI+dHJhY2UgJiYKKwkgZ2l0IGJyYW5jaCAtciA+IG91dHB1dCAmJgorCSB0ZXN0X2NtcCAuLi9leHBlY3Qgb3V0cHV0ICYmCisJIGdyZXAgImJ1aWx0LWluOiBnaXQgZ2MiIHRyYWNlID5nYyAmJgorCSB0ZXN0X2xpbmVfY291bnQgPSAxIGdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZmV0Y2ggLS1tdWx0aXBsZSAoYmFkIHJlbW90ZSBuYW1lcyknICcKKwkoY2QgdGVzdDQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC0tbXVsdGlwbGUgZm91cikKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZmV0Y2ggLS1hbGwgKHNraXBGZXRjaEFsbCknICcKKwkoY2QgdGVzdDQgJiYKKwkgZm9yIGIgaW4gJChnaXQgYnJhbmNoIC1yKQorCSBkbworCQlnaXQgYnJhbmNoIC1yIC1kICRiIHx8IGV4aXQgMQorCSBkb25lICYmCisJIGdpdCByZW1vdGUgYWRkIHRocmVlIC4uL3RocmVlICYmCisJIGdpdCBjb25maWcgcmVtb3RlLnRocmVlLnNraXBGZXRjaEFsbCB0cnVlICYmCisJIGdpdCBmZXRjaCAtLWFsbCAmJgorCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCisJIHRlc3RfY21wIC4uL2V4cGVjdCBvdXRwdXQpCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyAgb25lL21hc3RlcgorICBvbmUvc2lkZQorICB0aHJlZS9hbm90aGVyCisgIHRocmVlL21hc3RlcgorICB0aHJlZS9zaWRlCisgIHR3by9hbm90aGVyCisgIHR3by9tYXN0ZXIKKyAgdHdvL3NpZGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZmV0Y2ggLS1tdWx0aXBsZSAoaWdub3Jpbmcgc2tpcEZldGNoQWxsKScgJworCShjZCB0ZXN0NCAmJgorCSBmb3IgYiBpbiAkKGdpdCBicmFuY2ggLXIpCisJIGRvCisJCWdpdCBicmFuY2ggLXIgLWQgJGIgfHwgZXhpdCAxCisJIGRvbmUgJiYKKwkgZ2l0IGZldGNoIC0tbXVsdGlwbGUgb25lIHR3byB0aHJlZSAmJgorCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCisJIHRlc3RfY21wIC4uL2V4cGVjdCBvdXRwdXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLWFsbCAtLW5vLXRhZ3MnICcKKwlnaXQgY2xvbmUgb25lIHRlc3Q1ICYmCisJZ2l0IGNsb25lIHRlc3Q1IHRlc3Q2ICYmCisJKGNkIHRlc3Q1ICYmIGdpdCB0YWcgdGVzdC10YWcpICYmCisJKAorCQljZCB0ZXN0NiAmJgorCQlnaXQgZmV0Y2ggLS1hbGwgLS1uby10YWdzICYmCisJCWdpdCB0YWcgPm91dHB1dAorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgdGVzdDYvb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLWFsbCAtLXRhZ3MnICcKKwllY2hvIHRlc3QtdGFnID5leHBlY3QgJiYKKwlnaXQgY2xvbmUgb25lIHRlc3Q3ICYmCisJZ2l0IGNsb25lIHRlc3Q3IHRlc3Q4ICYmCisJKAorCQljZCB0ZXN0NyAmJgorCQl0ZXN0X2NvbW1pdCB0ZXN0LXRhZyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisJKSAmJgorCSgKKwkJY2QgdGVzdDggJiYKKwkJZ2l0IGZldGNoIC0tYWxsIC0tdGFncyAmJgorCQlnaXQgdGFnID5vdXRwdXQKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IHRlc3Q4L291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJhbGxlbCcgJworCWdpdCByZW1vdGUgYWRkIG9uZSAuL2JvZ3VzMSAmJgorCWdpdCByZW1vdGUgYWRkIHR3byAuL2JvZ3VzMiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9UUkFDRT0iJFBXRC90cmFjZSIgXAorCQlnaXQgZmV0Y2ggLS1qb2JzPTIgLS1tdWx0aXBsZSBvbmUgdHdvIDI+ZXJyICYmCisJZ3JlcCAicHJlcGFyaW5nIHRvIHJ1biB1cCB0byAyIHRhc2tzIiB0cmFjZSAmJgorCXRlc3RfaTE4bmdyZXAgImNvdWxkIG5vdCBmZXRjaCAub25lLioxMjgiIGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImNvdWxkIG5vdCBmZXRjaCAudHdvLioxMjgiIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTUtZmV0Y2gtbWVyZ2UtbG9naWMuc2ggYi90L3Q1NTE1LWZldGNoLW1lcmdlLWxvZ2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkNmE0NmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1LWZldGNoLW1lcmdlLWxvZ2ljLnNoCkBAIC0wLDAgKzEsMjI2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IFNhbnRpIELDqWphciwgYmFzZWQgb24gdDQwMTMgYnkgSnVuaW8gQyBIYW1hbm8KKyMKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nTWVyZ2UgbG9naWMgaW4gZmV0Y2gnCisKKyMgTkVFRFNXT1JLOiBJZiB0aGUgb3ZlcnNwZWNpZmljYXRpb24gb2YgdGhlIGV4cGVjdGVkIHJlc3VsdCBpcyByZWR1Y2VkLCB3ZQorIyBtaWdodCBiZSBhYmxlIHRvIHJ1biB0aGlzIHRlc3QgaW4gYWxsIHByb3RvY29sIHZlcnNpb25zLgorR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wCitleHBvcnQgR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTgorCisuIC4vdGVzdC1saWIuc2gKKworYnVpbGRfc2NyaXB0ICgpIHsKKwlzY3JpcHQ9IiQxIiAmJgorCWZvciBpIGluIG9uZSB0aHJlZV9maWxlIG1hc3RlciBtYXN0ZXIyIG9uZV90cmVlIHRocmVlIHR3byB0d28yIHRocmVlMgorCWRvCisJCWVjaG8gInMvJCh0ZXN0X29pZCAtLWhhc2g9c2hhMSAiJGkiKS8kKHRlc3Rfb2lkICIkaSIpL2ciID4+IiRzY3JpcHQiCisJZG9uZQorfQorCitjb252ZXJ0X2V4cGVjdGVkICgpIHsKKwlmaWxlPSIkMSIgJiYKKwlzY3JpcHQ9IiQyIiAmJgorCXNlZCAtZiAiJHNjcmlwdCIgIiRmaWxlIiA+IiRmaWxlLnRtcCIgJiYKKwltdiAiJGZpbGUudG1wIiAiJGZpbGUiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCUdJVF9BVVRIT1JfREFURT0iMjAwNi0wNi0yNiAwMDowMDowMCArMDAwMCIgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDA6MDAgKzAwMDAiICYmCisJZXhwb3J0IEdJVF9BVVRIT1JfREFURSBHSVRfQ09NTUlUVEVSX0RBVEUgJiYKKworCXRlc3Rfb2lkX2NhY2hlIDw8LUVPRiAmJgorCW9uZSBzaGExOjhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkKKwlvbmUgc2hhMjU2Ojg3Mzk1NDY0MzNhYjFhYzcyZWU5MzA4OGRjZTYxMTIxMGVmZmVlMDcyYjJiNTg2Y2VhYzZkZGU0M2ViZWM5Y2UKKworCXRocmVlX2ZpbGUgc2hhMTowZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCisJdGhyZWVfZmlsZSBzaGEyNTY6YmM0NDQ3ZDUwYzA3NDk3YThiZmU2ZWVmODE3ZjIzNjRlY2NhOWQ0NzE0NTJlNDNiNTI3NTZjYzFhOTA4YmQzMgorCisJbWFzdGVyIHNoYTE6NmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQorCW1hc3RlciBzaGEyNTY6ODUyMWMzMDcyNDYxZmNmZThmMzJkNjdmOTVjYzZlNmI4MzJhMmRiMmZhMjk3NjlmZmM3ODhiY2U4NWViY2Q3NQorCisJb25lX3RyZWUgc2hhMToyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCisJb25lX3RyZWUgc2hhMjU2OjZlNDc0M2Y0ZWYyMzU2Yjg4MWRkYTVlOTFmNWM3Y2RmZmU4NzBmYWYzNTBiZjdiMzEyZjgwYTIwOTM1ZjVkODMKKworCXRocmVlIHNoYTE6YzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQorCXRocmVlIHNoYTI1NjowY2M2ZDFlZGE2MTdkZWQ3MTUxNzA3ODZlMzFiYTRlMmQwMTg1NDA0ZWM1YTM1MDhkZDBkNzNiMzI0ODYwYzZhCisKKwl0d28gc2hhMTo1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCisJdHdvIHNoYTI1NjozYjIxZGUzNDQwY2QzOGMyYTllOWI0NjRhZGI5MjNmNzA1NDk0OWVkNGM5MThlMWEwYWM0Yzk1Y2Q1Mjc3NGRiCisKKwltYXN0ZXIyIHNoYTE6NzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgorCW1hc3RlcjIgc2hhMjU2OjZjN2FiYWVhOGE2ZDhlZjRkODk4NzdlNjg0NjI3NThkYzY3NzQ2OTBmYmJiYjBlNmQ3ZGQ1NzQxNWM5YWJkZTAKKworCXR3bzIgc2hhMTo2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CisJdHdvMiBzaGEyNTY6ODdhMmQzZWUyOWM4M2EzZGM3YWZkNDFjMDYwNmIxMWY2NzYwMzEyMGI5MTBhN2JlNzg0MGFjY2RjMTgzNDRkNAorCisJdGhyZWUyIHNoYTE6MDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgorCXRocmVlMiBzaGEyNTY6Y2NlYjNlOGVjYTM2NGZhOWEwYTM5YTFlZmJlYmVjYWNjNjY0YWY4NmNiYmQ4MDcwNTcxZjVmYWViNWYwZThjMworCUVPRgorCisJZWNobyA+ZmlsZSBvcmlnaW5hbCAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gT25lICYmCisJZ2l0IHRhZyB0YWctb25lICYmCisJZ2l0IHRhZyB0YWctb25lLXRyZWUgSEVBRF57dHJlZX0gJiYKKwlnaXQgYnJhbmNoIG9uZSAmJgorCisJZWNobyB0d28gPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gVHdvICYmCisJZ2l0IHRhZyAtYSAtbSAiVGFnIFR3byIgdGFnLXR3byAmJgorCWdpdCBicmFuY2ggdHdvICYmCisKKwllY2hvIHRocmVlID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFRocmVlICYmCisJZ2l0IHRhZyAtYSAtbSAiVGFnIFRocmVlIiB0YWctdGhyZWUgJiYKKwlnaXQgdGFnIC1hIC1tICJUYWcgVGhyZWUgZmlsZSIgdGFnLXRocmVlLWZpbGUgSEVBRF57dHJlZX06ZmlsZSAmJgorCWdpdCBicmFuY2ggdGhyZWUgJiYKKworCWVjaG8gbWFzdGVyID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIE1hc3RlciAmJgorCWdpdCB0YWcgLWEgLW0gIlRhZyBNYXN0ZXIiIHRhZy1tYXN0ZXIgJiYKKworCWdpdCBjaGVja291dCB0aHJlZSAmJgorCisJZ2l0IGNsb25lIC4gY2xvbmVkICYmCisJY2QgY2xvbmVkICYmCisJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAuLi8uZ2l0LyAmJgorCisJZ2l0IGNvbmZpZyByZW1vdGUuY29uZmlnLWV4cGxpY2l0LnVybCAuLi8uZ2l0LyAmJgorCWdpdCBjb25maWcgcmVtb3RlLmNvbmZpZy1leHBsaWNpdC5mZXRjaCByZWZzL2hlYWRzL21hc3RlcjpyZW1vdGVzL3JlbS9tYXN0ZXIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5jb25maWctZXhwbGljaXQuZmV0Y2ggcmVmcy9oZWFkcy9vbmU6cmVtb3Rlcy9yZW0vb25lICYmCisJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUuY29uZmlnLWV4cGxpY2l0LmZldGNoIHR3bzpyZW1vdGVzL3JlbS90d28gJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5jb25maWctZXhwbGljaXQuZmV0Y2ggcmVmcy9oZWFkcy90aHJlZTpyZW1vdGVzL3JlbS90aHJlZSAmJgorCXJlbW90ZXM9ImNvbmZpZy1leHBsaWNpdCIgJiYKKworCWdpdCBjb25maWcgcmVtb3RlLmNvbmZpZy1nbG9iLnVybCAuLi8uZ2l0LyAmJgorCWdpdCBjb25maWcgcmVtb3RlLmNvbmZpZy1nbG9iLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvcmVtLyogJiYKKwlyZW1vdGVzPSIkcmVtb3RlcyBjb25maWctZ2xvYiIgJiYKKworCW1rZGlyIC1wIC5naXQvcmVtb3RlcyAmJgorCXsKKwkJZWNobyAiVVJMOiAuLi8uZ2l0LyIKKwkJZWNobyAiUHVsbDogcmVmcy9oZWFkcy9tYXN0ZXI6cmVtb3Rlcy9yZW0vbWFzdGVyIgorCQllY2hvICJQdWxsOiByZWZzL2hlYWRzL29uZTpyZW1vdGVzL3JlbS9vbmUiCisJCWVjaG8gIlB1bGw6IHR3bzpyZW1vdGVzL3JlbS90d28iCisJCWVjaG8gIlB1bGw6IHJlZnMvaGVhZHMvdGhyZWU6cmVtb3Rlcy9yZW0vdGhyZWUiCisJfSA+LmdpdC9yZW1vdGVzL3JlbW90ZS1leHBsaWNpdCAmJgorCXJlbW90ZXM9IiRyZW1vdGVzIHJlbW90ZS1leHBsaWNpdCIgJiYKKworCXsKKwkJZWNobyAiVVJMOiAuLi8uZ2l0LyIKKwkJZWNobyAiUHVsbDogcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9yZW0vKiIKKwl9ID4uZ2l0L3JlbW90ZXMvcmVtb3RlLWdsb2IgJiYKKwlyZW1vdGVzPSIkcmVtb3RlcyByZW1vdGUtZ2xvYiIgJiYKKworCW1rZGlyIC1wIC5naXQvYnJhbmNoZXMgJiYKKwllY2hvICIuLi8uZ2l0IiA+IC5naXQvYnJhbmNoZXMvYnJhbmNoZXMtZGVmYXVsdCAmJgorCXJlbW90ZXM9IiRyZW1vdGVzIGJyYW5jaGVzLWRlZmF1bHQiICYmCisKKwllY2hvICIuLi8uZ2l0I29uZSIgPiAuZ2l0L2JyYW5jaGVzL2JyYW5jaGVzLW9uZSAmJgorCXJlbW90ZXM9IiRyZW1vdGVzIGJyYW5jaGVzLW9uZSIgJiYKKworCWZvciByZW1vdGUgaW4gJHJlbW90ZXMgOyBkbworCQlnaXQgY29uZmlnIGJyYW5jaC5ici0kcmVtb3RlLnJlbW90ZSAkcmVtb3RlICYmCisJCWdpdCBjb25maWcgYnJhbmNoLmJyLSRyZW1vdGUtbWVyZ2UucmVtb3RlICRyZW1vdGUgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2guYnItJHJlbW90ZS1tZXJnZS5tZXJnZSByZWZzL2hlYWRzL3RocmVlICYmCisJCWdpdCBjb25maWcgYnJhbmNoLmJyLSRyZW1vdGUtb2N0b3B1cy5yZW1vdGUgJHJlbW90ZSAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5ici0kcmVtb3RlLW9jdG9wdXMubWVyZ2UgcmVmcy9oZWFkcy9vbmUgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBicmFuY2guYnItJHJlbW90ZS1vY3RvcHVzLm1lcmdlIHR3bworCWRvbmUgJiYKKwlidWlsZF9zY3JpcHQgc2VkX3NjcmlwdAorJworCisjIE1lcmdlIGxvZ2ljIGRlcGVuZHMgb24gYnJhbmNoIHByb3BlcnRpZXMgYW5kIFB1bGw6IG9yIC5mZXRjaCBsaW5lcworZm9yIHJlbW90ZSBpbiAkcmVtb3RlcyA7IGRvCisgICAgZm9yIGJyYW5jaCBpbiAiIiAiLW1lcmdlIiAiLW9jdG9wdXMiIDsgZG8KK2NhdCA8PEVPRgorYnItJHJlbW90ZSRicmFuY2gKK2JyLSRyZW1vdGUkYnJhbmNoICRyZW1vdGUKK0VPRgorICAgIGRvbmUKK2RvbmUgPiB0ZXN0cworCisjIE1lcmdlIGxvZ2ljIGRvZXMgbm90IGRlcGVuZCBvbiBicmFuY2ggcHJvcGVydGllcywKKyMgYnV0IGRvZXMgZGVwZW5kIG9uIFB1bGw6IG9yIGZldGNoIGxpbmVzLgorIyBVc2UgdHdvIGJyYW5jaGVzIGNvbXBsZXRlbHkgdW5yZWxhdGVkIGZyb20gdGhlIGFyZ3VtZW50cywKKyMgdGhlIGNsb25lIGRlZmF1bHQgYW5kIG9uZSB3aXRob3V0IGJyYW5jaCBwcm9wZXJ0aWVzCitmb3IgYnJhbmNoIGluIG1hc3RlciBici11bmNvbmZpZyA7IGRvCisgICAgZWNobyAkYnJhbmNoCisgICAgZm9yIHJlbW90ZSBpbiAkcmVtb3RlcyA7IGRvCisJZWNobyAkYnJhbmNoICRyZW1vdGUKKyAgICBkb25lCitkb25lID4+IHRlc3RzCisKKyMgTWVyZ2UgbG9naWMgZG9lcyBub3QgZGVwZW5kIG9uIGJyYW5jaCBwcm9wZXJ0aWVzCisjIG5laXRoZXIgaW4gdGhlIFB1bGw6IG9yIC5mZXRjaCBjb25maWcKK2ZvciBicmFuY2ggaW4gbWFzdGVyIGJyLXVuY29uZmlnIDsgZG8KKyAgICBjYXQgPDxFT0YKKyRicmFuY2ggLi4vLmdpdAorJGJyYW5jaCAuLi8uZ2l0IG9uZQorJGJyYW5jaCAuLi8uZ2l0IG9uZSB0d28KKyRicmFuY2ggLS10YWdzIC4uLy5naXQKKyRicmFuY2ggLi4vLmdpdCB0YWcgdGFnLW9uZSB0YWcgdGFnLXRocmVlCiskYnJhbmNoIC4uLy5naXQgdGFnIHRhZy1vbmUtdHJlZSB0YWcgdGFnLXRocmVlLWZpbGUKKyRicmFuY2ggLi4vLmdpdCBvbmUgdGFnIHRhZy1vbmUgdGFnIHRhZy10aHJlZS1maWxlCitFT0YKK2RvbmUgPj4gdGVzdHMKKword2hpbGUgcmVhZCBjbWQKK2RvCisJY2FzZSAiJGNtZCIgaW4KKwknJyB8ICcjJyopIGNvbnRpbnVlIDs7CisJZXNhYworCXRlc3Q9JChlY2hvICIkY21kIiB8IHNlZCAtZSAnc3xbLyBdWy8gXSp8X3xnJykKKwlwZng9JChwcmludGYgIiUwNGQiICR0ZXN0X2NvdW50KQorCWV4cGVjdF9mPSIkVEVTVF9ESVJFQ1RPUlkvdDU1MTUvZmV0Y2guJHRlc3QiCisJYWN0dWFsX2Y9IiRwZngtZmV0Y2guJHRlc3QiCisJZXhwZWN0X3I9IiRURVNUX0RJUkVDVE9SWS90NTUxNS9yZWZzLiR0ZXN0IgorCWFjdHVhbF9yPSIkcGZ4LXJlZnMuJHRlc3QiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIiAnCisJCWNwICIkZXhwZWN0X2YiIGV4cGVjdF9mICYmCisJCWNvbnZlcnRfZXhwZWN0ZWQgZXhwZWN0X2Ygc2VkX3NjcmlwdCAmJgorCQljcCAiJGV4cGVjdF9yIiBleHBlY3RfciAmJgorCQljb252ZXJ0X2V4cGVjdGVkIGV4cGVjdF9yIHNlZF9zY3JpcHQgJiYKKwkJeworCQkJZWNobyAiIyAkY21kIgorCQkJc2V0IHggJGNtZDsgc2hpZnQKKwkJCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzLyQxIDsgc2hpZnQKKwkJCXJtIC1mIC5naXQvRkVUQ0hfSEVBRAorCQkJZ2l0IGZvci1lYWNoLXJlZiBcCisJCQkJcmVmcy9oZWFkcyByZWZzL3JlbW90ZXMvcmVtIHJlZnMvdGFncyB8CisJCQl3aGlsZSByZWFkIHZhbCB0eXBlIHJlZm5hbWUKKwkJCWRvCisJCQkJZ2l0IHVwZGF0ZS1yZWYgLWQgIiRyZWZuYW1lIiAiJHZhbCIKKwkJCWRvbmUKKwkJCWdpdCBmZXRjaCAiJEAiID4vZGV2L251bGwKKwkJCWNhdCAuZ2l0L0ZFVENIX0hFQUQKKwkJfSA+IiRhY3R1YWxfZiIgJiYKKwkJZ2l0IHNob3ctcmVmID4iJGFjdHVhbF9yIiAmJgorCQlpZiB0ZXN0IC1mICJleHBlY3RfZiIKKwkJdGhlbgorCQkJdGVzdF9jbXAgImV4cGVjdF9mIiAiJGFjdHVhbF9mIiAmJgorCQkJcm0gLWYgIiRhY3R1YWxfZiIKKwkJZWxzZQorCQkJIyB0aGlzIGlzIHRvIGhlbHAgZGV2ZWxvcGluZyBuZXcgdGVzdHMuCisJCQljcCAiJGFjdHVhbF9mIiAiJGV4cGVjdF9mIgorCQkJZmFsc2UKKwkJZmkgJiYKKwkJaWYgdGVzdCAtZiAiZXhwZWN0X3IiCisJCXRoZW4KKwkJCXRlc3RfY21wICJleHBlY3RfciIgIiRhY3R1YWxfciIgJiYKKwkJCXJtIC1mICIkYWN0dWFsX3IiCisJCWVsc2UKKwkJCSMgdGhpcyBpcyB0byBoZWxwIGRldmVsb3BpbmcgbmV3IHRlc3RzLgorCQkJY3AgIiRhY3R1YWxfciIgIiRleHBlY3RfciIKKwkJCWZhbHNlCisJCWZpCisJJworZG9uZSA8IHRlc3RzCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0IGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYmMzZDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSw4IEBACisjIGJyLWJyYW5jaGVzLWRlZmF1bHQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYWIwOGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2UKQEAgLTAsMCArMSw5IEBACisjIGJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2UKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlX2JyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2VfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDQyNzUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlX2JyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSw5IEBACisjIGJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2UgYnJhbmNoZXMtZGVmYXVsdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1cyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OGE3NjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1cwpAQCAtMCwwICsxLDEwIEBACisjIGJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1cworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXNfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzX2JyYW5jaGVzLWRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1N2YxMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzX2JyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSwxMCBAQAorIyBici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXMgYnJhbmNoZXMtZGVmYXVsdAorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0X2JyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHRfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2JkNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0X2JyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSw4IEBACisjIGJyLWJyYW5jaGVzLWRlZmF1bHQgYnJhbmNoZXMtZGVmYXVsdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZSBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OGY2NzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDggQEAKKyMgYnItYnJhbmNoZXMtb25lCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lLW1lcmdlIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhNzc0MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lLW1lcmdlCkBAIC0wLDAgKzEsOSBAQAorIyBici1icmFuY2hlcy1vbmUtbWVyZ2UKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCWJyYW5jaCAndGhyZWUnIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtbWVyZ2VfYnJhbmNoZXMtb25lIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtbWVyZ2VfYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZDFiYjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZS1tZXJnZV9icmFuY2hlcy1vbmUKQEAgLTAsMCArMSw5IEBACisjIGJyLWJyYW5jaGVzLW9uZS1tZXJnZSBicmFuY2hlcy1vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCWJyYW5jaCAndGhyZWUnIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtb2N0b3B1cyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lLW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjNGI1NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lLW9jdG9wdXMKQEAgLTAsMCArMSw5IEBACisjIGJyLWJyYW5jaGVzLW9uZS1vY3RvcHVzCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lLW9jdG9wdXNfYnJhbmNoZXMtb25lIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtb2N0b3B1c19icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3MDVmNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lLW9jdG9wdXNfYnJhbmNoZXMtb25lCkBAIC0wLDAgKzEsOSBAQAorIyBici1icmFuY2hlcy1vbmUtb2N0b3B1cyBicmFuY2hlcy1vbmUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmVfYnJhbmNoZXMtb25lIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmVfYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ODkwZTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZV9icmFuY2hlcy1vbmUKQEAgLTAsMCArMSw4IEBACisjIGJyLWJyYW5jaGVzLW9uZSBicmFuY2hlcy1vbmUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGZjOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici1jb25maWctZXhwbGljaXQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZSBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZTc2NGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZQpAQCAtMCwwICsxLDExIEBACisjIGJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlX2NvbmZpZy1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTE1MmI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtbWVyZ2VfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlIGNvbmZpZy1leHBsaWNpdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXMgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDU3N2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXMKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXNfY29uZmlnLWV4cGxpY2l0IGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtb2N0b3B1c19jb25maWctZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5ZGQ4YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXNfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXMgY29uZmlnLWV4cGxpY2l0Cis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdF9jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdF9jb25maWctZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5YjAxNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0X2NvbmZpZy1leHBsaWNpdApAQCAtMCwwICsxLDExIEBACisjIGJyLWNvbmZpZy1leHBsaWNpdCBjb25maWctZXhwbGljaXQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDZkNzBjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLWNvbmZpZy1nbG9iCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2ItbWVyZ2UgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZjI1OTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW1lcmdlCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWdsb2ItbWVyZ2UKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW1lcmdlX2NvbmZpZy1nbG9iIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYi1tZXJnZV9jb25maWctZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmE0ODMyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYi1tZXJnZV9jb25maWctZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLWNvbmZpZy1nbG9iLW1lcmdlIGNvbmZpZy1nbG9iCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYi1vY3RvcHVzIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYi1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OTk0ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXMKQEAgLTAsMCArMSwxMSBAQAorIyBici1jb25maWctZ2xvYi1vY3RvcHVzCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXNfY29uZmlnLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXNfY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxYTcyNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2Itb2N0b3B1c19jb25maWctZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLWNvbmZpZy1nbG9iLW9jdG9wdXMgY29uZmlnLWdsb2IKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2JfY29uZmlnLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZGFmMGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iX2NvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWdsb2IgY29uZmlnLWdsb2IKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjQ0YmM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici1yZW1vdGUtZXhwbGljaXQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZSBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMThiMzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZQpAQCAtMCwwICsxLDExIEBACisjIGJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlX3JlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlX3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDNkNzgwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtbWVyZ2VfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlIHJlbW90ZS1leHBsaWNpdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXMgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmODQzMDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXMKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXNfcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1c19yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0NmE4MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXNfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXMgcmVtb3RlLWV4cGxpY2l0Cis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdF9yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdF9yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlMDE0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0X3JlbW90ZS1leHBsaWNpdApAQCAtMCwwICsxLDExIEBACisjIGJyLXJlbW90ZS1leHBsaWNpdCByZW1vdGUtZXhwbGljaXQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWJmY2VlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLXJlbW90ZS1nbG9iCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2ItbWVyZ2UgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMWE0MzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW1lcmdlCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWdsb2ItbWVyZ2UKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW1lcmdlX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYi1tZXJnZV9yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzU3MWJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYi1tZXJnZV9yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLXJlbW90ZS1nbG9iLW1lcmdlIHJlbW90ZS1nbG9iCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YzhiNmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXMKQEAgLTAsMCArMSwxMSBAQAorIyBici1yZW1vdGUtZ2xvYi1vY3RvcHVzCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXNfcmVtb3RlLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXNfcmVtb3RlLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwNzZmYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2Itb2N0b3B1c19yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLXJlbW90ZS1nbG9iLW9jdG9wdXMgcmVtb3RlLWdsb2IKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2JfcmVtb3RlLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYmE1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWdsb2IgcmVtb3RlLWdsb2IKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3Y2NmYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWcKQEAgLTAsMCArMSwxMSBAQAorIyBici11bmNvbmZpZworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy0tdGFnc18uLl8uZ2l0IGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18tLXRhZ3NfLi5fLmdpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjcwZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18tLXRhZ3NfLi5fLmdpdApAQCAtMCwwICsxLDggQEAKKyMgYnItdW5jb25maWcgLS10YWdzIC4uLy5naXQKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCS4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXQgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0YmIxZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdApAQCAtMCwwICsxLDIgQEAKKyMgYnItdW5jb25maWcgLi4vLmdpdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfb25lIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X29uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWViNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X29uZQpAQCAtMCwwICsxLDIgQEAKKyMgYnItdW5jb25maWcgLi4vLmdpdCBvbmUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxMTUzNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsOCBAQAorIyBici11bmNvbmZpZyAuLi8uZ2l0IG9uZSB0YWcgdGFnLW9uZSB0YWcgdGFnLXRocmVlLWZpbGUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCXRhZyAndGFnLW9uZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3R3byBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF9vbmVfdHdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMWJlMjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3R3bwpAQCAtMCwwICsxLDMgQEAKKyMgYnItdW5jb25maWcgLi4vLmdpdCBvbmUgdHdvCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyNjk4MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF90YWdfdGFnLW9uZS10cmVlX3RhZ190YWctdGhyZWUtZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMgYnItdW5jb25maWcgLi4vLmdpdCB0YWcgdGFnLW9uZS10cmVlIHRhZyB0YWctdGhyZWUtZmlsZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZSBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMzc1MGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZQpAQCAtMCwwICsxLDcgQEAKKyMgYnItdW5jb25maWcgLi4vLmdpdCB0YWcgdGFnLW9uZSB0YWcgdGFnLXRocmVlCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQkJdGFnICd0YWctdGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX2JyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX2JyYW5jaGVzLWRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEzMGUzYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDggQEAKKyMgYnItdW5jb25maWcgYnJhbmNoZXMtZGVmYXVsdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX2JyYW5jaGVzLW9uZSBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NjE0MzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDggQEAKKyMgYnItdW5jb25maWcgYnJhbmNoZXMtb25lCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfY29uZmlnLWV4cGxpY2l0IGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19jb25maWctZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQzMjNjOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItdW5jb25maWcgY29uZmlnLWV4cGxpY2l0Cis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19jb25maWctZ2xvYiBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3MmVkMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfY29uZmlnLWdsb2IKQEAgLTAsMCArMSwxMSBAQAorIyBici11bmNvbmZpZyBjb25maWctZ2xvYgorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX3JlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfcmVtb3RlLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMThkZDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX3JlbW90ZS1leHBsaWNpdApAQCAtMCwwICsxLDExIEBACisjIGJyLXVuY29uZmlnIHJlbW90ZS1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfcmVtb3RlLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOWFmYWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItdW5jb25maWcgcmVtb3RlLWdsb2IKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5tYXN0ZXIgYi90L3Q1NTE1L2ZldGNoLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjI5ZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXIKQEAgLTAsMCArMSwxMSBAQAorIyBtYXN0ZXIKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLS10YWdzXy4uXy5naXQgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8tLXRhZ3NfLi5fLmdpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjQ3M2E2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLS10YWdzXy4uXy5naXQKQEAgLTAsMCArMSw4IEBACisjIG1hc3RlciAtLXRhZ3MgLi4vLmdpdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXQgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZDFhYWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0CkBAIC0wLDAgKzEsMiBAQAorIyBtYXN0ZXIgLi4vLmdpdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X29uZSBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZGVkZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X29uZQpAQCAtMCwwICsxLDIgQEAKKyMgbWFzdGVyIC4uLy5naXQgb25lCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3MmQxMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZQpAQCAtMCwwICsxLDggQEAKKyMgbWFzdGVyIC4uLy5naXQgb25lIHRhZyB0YWctb25lIHRhZyB0YWctdGhyZWUtZmlsZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJdGFnICd0YWctb25lJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lX3R3byBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lX3R3bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWVjNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF9vbmVfdHdvCkBAIC0wLDAgKzEsMyBAQAorIyBtYXN0ZXIgLi4vLmdpdCBvbmUgdHdvCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF90YWdfdGFnLW9uZS10cmVlX3RhZ190YWctdGhyZWUtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmQ3MzdjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF90YWdfdGFnLW9uZS10cmVlX3RhZ190YWctdGhyZWUtZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMgbWFzdGVyIC4uLy5naXQgdGFnIHRhZy1vbmUtdHJlZSB0YWcgdGFnLXRocmVlLWZpbGUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ODg5ODYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKQEAgLTAsMCArMSw3IEBACisjIG1hc3RlciAuLi8uZ2l0IHRhZyB0YWctb25lIHRhZyB0YWctdGhyZWUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCXRhZyAndGFnLW9uZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2JyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl9icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZWRkM2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl9icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsOCBAQAorIyBtYXN0ZXIgYnJhbmNoZXMtZGVmYXVsdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3Rlcl9icmFuY2hlcy1vbmUgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl9icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAxY2UyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDggQEAKKyMgbWFzdGVyIGJyYW5jaGVzLW9uZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3Rlcl9jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl9jb25maWctZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUxYzgyNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2NvbmZpZy1leHBsaWNpdApAQCAtMCwwICsxLDExIEBACisjIG1hc3RlciBjb25maWctZXhwbGljaXQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3Rlcl9jb25maWctZ2xvYiBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YzE1OGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl9jb25maWctZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIG1hc3RlciBjb25maWctZ2xvYgorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3Rlcl9yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl9yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjZmU2YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX3JlbW90ZS1leHBsaWNpdApAQCAtMCwwICsxLDExIEBACisjIG1hc3RlciByZW1vdGUtZXhwbGljaXQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3Rlcl9yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExOGJlZmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl9yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIG1hc3RlciByZW1vdGUtZ2xvYgorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDEyIEBACis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvaGVhZHMvYnJhbmNoZXMtZGVmYXVsdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZSBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZQpAQCAtMCwwICsxLDEyIEBACis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvaGVhZHMvYnJhbmNoZXMtZGVmYXVsdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZV9icmFuY2hlcy1kZWZhdWx0IGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2VfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTkxN2MxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2VfYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDEyIEBACis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvaGVhZHMvYnJhbmNoZXMtZGVmYXVsdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTkxN2MxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1cwpAQCAtMCwwICsxLDEyIEBACis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvaGVhZHMvYnJhbmNoZXMtZGVmYXVsdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzX2JyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzX2JyYW5jaGVzLWRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5MTdjMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXNfYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDEyIEBACis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvaGVhZHMvYnJhbmNoZXMtZGVmYXVsdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdF9icmFuY2hlcy1kZWZhdWx0IGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHRfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTkxN2MxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHRfYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDEyIEBACis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvaGVhZHMvYnJhbmNoZXMtZGVmYXVsdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTcwNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDEyIEBACis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvaGVhZHMvYnJhbmNoZXMtb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtbWVyZ2UgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lLW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzA1YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lLW1lcmdlCkBAIC0wLDAgKzEsMTIgQEAKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9oZWFkcy9icmFuY2hlcy1vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZS1tZXJnZV9icmFuY2hlcy1vbmUgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lLW1lcmdlX2JyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTcwNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZS1tZXJnZV9icmFuY2hlcy1vbmUKQEAgLTAsMCArMSwxMiBAQAorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL2hlYWRzL2JyYW5jaGVzLW9uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lLW9jdG9wdXMgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lLW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3MDVhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtb2N0b3B1cwpAQCAtMCwwICsxLDEyIEBACis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvaGVhZHMvYnJhbmNoZXMtb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtb2N0b3B1c19icmFuY2hlcy1vbmUgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lLW9jdG9wdXNfYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzA1YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lLW9jdG9wdXNfYnJhbmNoZXMtb25lCkBAIC0wLDAgKzEsMTIgQEAKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9oZWFkcy9icmFuY2hlcy1vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZV9icmFuY2hlcy1vbmUgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lX2JyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTcwNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZV9icmFuY2hlcy1vbmUKQEAgLTAsMCArMSwxMiBAQAorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL2hlYWRzL2JyYW5jaGVzLW9uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdApAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZSBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQtbWVyZ2UKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQtbWVyZ2VfY29uZmlnLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZV9jb25maWctZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQtbWVyZ2VfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXMgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQtb2N0b3B1cwpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzX2NvbmZpZy1leHBsaWNpdCBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQtb2N0b3B1c19jb25maWctZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQtb2N0b3B1c19jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXRfY29uZmlnLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdF9jb25maWctZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXRfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2IgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iLW1lcmdlIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iLW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2ItbWVyZ2UKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1tZXJnZV9jb25maWctZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1tZXJnZV9jb25maWctZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iLW1lcmdlX2NvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2Itb2N0b3B1cyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2Itb2N0b3B1cwpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXNfY29uZmlnLWdsb2IgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2Itb2N0b3B1c19jb25maWctZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXNfY29uZmlnLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYl9jb25maWctZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYl9jb25maWctZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iX2NvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdApAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZSBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQtbWVyZ2UKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQtbWVyZ2VfcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZV9yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQtbWVyZ2VfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXMgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1cwpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzX3JlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1c19yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1c19yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXRfcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdF9yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXRfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2IgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iLW1lcmdlIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iLW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2ItbWVyZ2UKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1tZXJnZV9yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1tZXJnZV9yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iLW1lcmdlX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2Itb2N0b3B1cyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2Itb2N0b3B1cwpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXNfcmVtb3RlLWdsb2IgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2Itb2N0b3B1c19yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXNfcmVtb3RlLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYl9yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYl9yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWcgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZwpAQCAtMCwwICsxLDExIEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18tLXRhZ3NfLi5fLmdpdCBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18tLXRhZ3NfLi5fLmdpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2U0YWQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy0tdGFnc18uLl8uZ2l0CkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXQgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXQKQEAgLTAsMCArMSw1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdF9vbmUgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdF9vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5NjJlYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZQpAQCAtMCwwICsxLDUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3R3byBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90d28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5NjJlYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90d28KQEAgLTAsMCArMSw1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdF90YWdfdGFnLW9uZS10cmVlX3RhZ190YWctdGhyZWUtZmlsZSBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdF90YWdfdGFnLW9uZS10cmVlX3RhZ190YWctdGhyZWUtZmlsZQpAQCAtMCwwICsxLDExIEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlCkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX2JyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTkxN2MxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX2JyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSwxMiBAQAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL2hlYWRzL2JyYW5jaGVzLWRlZmF1bHQKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX2JyYW5jaGVzLW9uZSBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3MDVhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19icmFuY2hlcy1vbmUKQEAgLTAsMCArMSwxMiBAQAorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL2hlYWRzL2JyYW5jaGVzLW9uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfY29uZmlnLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX2NvbmZpZy1leHBsaWNpdApAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX2NvbmZpZy1nbG9iIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfY29uZmlnLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfcmVtb3RlLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfcmVtb3RlLWdsb2IgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfcmVtb3RlLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3RlciBiL3QvdDU1MTUvcmVmcy5tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXIKQEAgLTAsMCArMSwxMSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyXy0tdGFnc18uLl8uZ2l0IGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8tLXRhZ3NfLi5fLmdpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2U0YWQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8tLXRhZ3NfLi5fLmdpdApAQCAtMCwwICsxLDExIEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdCBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0CkBAIC0wLDAgKzEsNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZSBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF9vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5NjJlYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF9vbmUKQEAgLTAsMCArMSw1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZSBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZQpAQCAtMCwwICsxLDExIEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF9vbmVfdHdvIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZV90d28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5NjJlYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF9vbmVfdHdvCkBAIC0wLDAgKzEsNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUKQEAgLTAsMCArMSwxMSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZSBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZQpAQCAtMCwwICsxLDExIEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTkxN2MxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfYnJhbmNoZXMtb25lIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3MDVhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfYnJhbmNoZXMtb25lCkBAIC0wLDAgKzEsMTIgQEAKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9oZWFkcy9icmFuY2hlcy1vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl9jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMubWFzdGVyX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfY29uZmlnLWdsb2IgYi90L3Q1NTE1L3JlZnMubWFzdGVyX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyX2NvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyX3JlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfcmVtb3RlLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyX3JlbW90ZS1leHBsaWNpdApAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl9yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfcmVtb3RlLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfcmVtb3RlLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTYtZmV0Y2gtcHVzaC5zaCBiL3QvdDU1MTYtZmV0Y2gtcHVzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YzYyMThmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNi1mZXRjaC1wdXNoLnNoCkBAIC0wLDAgKzEsMTcyNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0Jhc2ljIGZldGNoL3B1c2ggZnVuY3Rpb25hbGl0eS4KKworVGhpcyB0ZXN0IGNoZWNrcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWxpdHk6CisKKyogY29tbWFuZC1saW5lIHN5bnRheAorKiByZWZzcGVjcworKiBmYXN0LWZvcndhcmQgZGV0ZWN0aW9uLCBhbmQgb3ZlcnJpZGluZyBpdAorKiBjb25maWd1cmF0aW9uCisqIGhvb2tzCisqIC0tcG9yY2VsYWluIG91dHB1dCBmb3JtYXQKKyogaGlkZXJlZnMKKyogcmVmbG9ncworJworCisuIC4vdGVzdC1saWIuc2gKKworRD0kKHB3ZCkKKworbWtfZW1wdHkgKCkgeworCXJlcG9fbmFtZT0iJDEiCisJcm0gLWZyICIkcmVwb19uYW1lIiAmJgorCW1rZGlyICIkcmVwb19uYW1lIiAmJgorCSgKKwkJY2QgIiRyZXBvX25hbWUiICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuICYmCisJCW12IC5naXQvaG9va3MgLmdpdC9ob29rcy1kaXNhYmxlZAorCSkKK30KKworbWtfdGVzdCAoKSB7CisJcmVwb19uYW1lPSIkMSIKKwlzaGlmdAorCisJbWtfZW1wdHkgIiRyZXBvX25hbWUiICYmCisJKAorCQlmb3IgcmVmIGluICIkQCIKKwkJZG8KKwkJCWdpdCBwdXNoICIkcmVwb19uYW1lIiAkdGhlX2ZpcnN0X2NvbW1pdDpyZWZzLyRyZWYgfHwKKwkJCWV4aXQKKwkJZG9uZSAmJgorCQljZCAiJHJlcG9fbmFtZSIgJiYKKwkJZm9yIHJlZiBpbiAiJEAiCisJCWRvCisJCQllY2hvICIkdGhlX2ZpcnN0X2NvbW1pdCIgPmV4cGVjdCAmJgorCQkJZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvJHJlZiA+YWN0dWFsICYmCisJCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsIHx8CisJCQlleGl0CisJCWRvbmUgJiYKKwkJZ2l0IGZzY2sgLS1mdWxsCisJKQorfQorCitta190ZXN0X3dpdGhfaG9va3MoKSB7CisJcmVwb19uYW1lPSQxCisJbWtfdGVzdCAiJEAiICYmCisJKAorCQljZCAiJHJlcG9fbmFtZSIgJiYKKwkJbWtkaXIgLmdpdC9ob29rcyAmJgorCQljZCAuZ2l0L2hvb2tzICYmCisKKwkJY2F0ID5wcmUtcmVjZWl2ZSA8PC0nRU9GJyAmJgorCQkjIS9iaW4vc2gKKwkJY2F0IC0gPj5wcmUtcmVjZWl2ZS5hY3R1YWwKKwkJRU9GCisKKwkJY2F0ID51cGRhdGUgPDwtJ0VPRicgJiYKKwkJIyEvYmluL3NoCisJCXByaW50ZiAiJXMgJXMgJXNcbiIgIiRAIiA+PnVwZGF0ZS5hY3R1YWwKKwkJRU9GCisKKwkJY2F0ID5wb3N0LXJlY2VpdmUgPDwtJ0VPRicgJiYKKwkJIyEvYmluL3NoCisJCWNhdCAtID4+cG9zdC1yZWNlaXZlLmFjdHVhbAorCQlFT0YKKworCQljYXQgPnBvc3QtdXBkYXRlIDw8LSdFT0YnICYmCisJCSMhL2Jpbi9zaAorCQlmb3IgcmVmIGluICIkQCIKKwkJZG8KKwkJCXByaW50ZiAiJXNcbiIgIiRyZWYiID4+cG9zdC11cGRhdGUuYWN0dWFsCisJCWRvbmUKKwkJRU9GCisKKwkJY2htb2QgK3ggcHJlLXJlY2VpdmUgdXBkYXRlIHBvc3QtcmVjZWl2ZSBwb3N0LXVwZGF0ZQorCSkKK30KKworbWtfY2hpbGQoKSB7CisJcm0gLXJmICIkMiIgJiYKKwlnaXQgY2xvbmUgIiQxIiAiJDIiCit9CisKK2NoZWNrX3B1c2hfcmVzdWx0ICgpIHsKKwl0ZXN0ICQjIC1nZSAzIHx8CisJQlVHICJjaGVja19wdXNoX3Jlc3VsdCByZXF1aXJlcyBhdCBsZWFzdCAzIHBhcmFtZXRlcnMiCisKKwlyZXBvX25hbWU9IiQxIgorCXNoaWZ0CisKKwkoCisJCWNkICIkcmVwb19uYW1lIiAmJgorCQllY2hvICIkMSIgPmV4cGVjdCAmJgorCQlzaGlmdCAmJgorCQlmb3IgcmVmIGluICIkQCIKKwkJZG8KKwkJCWdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzLyRyZWYgPmFjdHVhbCAmJgorCQkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCB8fAorCQkJZXhpdAorCQlkb25lICYmCisJCWdpdCBmc2NrIC0tZnVsbAorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+cGF0aDEgJiYKKwlnaXQgYWRkIHBhdGgxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSByZXBvICYmCisJdGhlX2ZpcnN0X2NvbW1pdD0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKworCT5wYXRoMiAmJgorCWdpdCBhZGQgcGF0aDIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNlY29uZCAmJgorCXRoZV9jb21taXQ9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aG91dCB3aWxkY2FyZCcgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgZmV0Y2ggLi4gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKworCQllY2hvICIkdGhlX2NvbW1pdCBjb21taXQJcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiID5leHBlY3QgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCB3aWxkY2FyZCcgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS51cC51cmwgLi4gJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUudXAuZmV0Y2ggInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiICYmCisJCWdpdCBmZXRjaCB1cCAmJgorCisJCWVjaG8gIiR0aGVfY29tbWl0IGNvbW1pdAlyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIGluc3RlYWRPZicgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJKAorCQlUUkFTSD0kKHB3ZCkvICYmCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBjb25maWcgInVybC4kVFJBU0guaW5zdGVhZE9mIiB0cmFzaC8gJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUudXAudXJsIHRyYXNoLy4gJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUudXAuZmV0Y2ggInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiICYmCisJCWdpdCBmZXRjaCB1cCAmJgorCisJCWVjaG8gIiR0aGVfY29tbWl0IGNvbW1pdAlyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIHB1c2hJbnN0ZWFkT2YgKHNob3VsZCBub3QgcmV3cml0ZSknICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCSgKKwkJVFJBU0g9JChwd2QpLyAmJgorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgY29uZmlnICJ1cmwudHJhc2gvLnB1c2hJbnN0ZWFkT2YiICIkVFJBU0giICYmCisJCWdpdCBjb25maWcgcmVtb3RlLnVwLnVybCAiJFRSQVNILiIgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUudXAuZmV0Y2ggInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiICYmCisJCWdpdCBmZXRjaCB1cCAmJgorCisJCWVjaG8gIiR0aGVfY29tbWl0IGNvbW1pdAlyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGhvdXQgd2lsZGNhcmQnICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCisJZ2l0IHB1c2ggdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWVjaG8gIiR0aGVfY29tbWl0IGNvbW1pdAlyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggd2lsZGNhcmQnICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCisJZ2l0IHB1c2ggdGVzdHJlcG8gInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQllY2hvICIkdGhlX2NvbW1pdCBjb21taXQJcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiID5leHBlY3QgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGluc3RlYWRPZicgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJVFJBU0g9IiQocHdkKS8iICYmCisJdGVzdF9jb25maWcgInVybC4kVFJBU0guaW5zdGVhZE9mIiB0cmFzaC8gJiYKKwlnaXQgcHVzaCB0cmFzaC90ZXN0cmVwbyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZWNobyAiJHRoZV9jb21taXQgY29tbWl0CXJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIiA+ZXhwZWN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBwdXNoSW5zdGVhZE9mJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwlUUkFTSD0iJChwd2QpLyIgJiYKKwl0ZXN0X2NvbmZpZyAidXJsLiRUUkFTSC5wdXNoSW5zdGVhZE9mIiB0cmFzaC8gJiYKKwlnaXQgcHVzaCB0cmFzaC90ZXN0cmVwbyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZWNobyAiJHRoZV9jb21taXQgY29tbWl0CXJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIiA+ZXhwZWN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBwdXNoSW5zdGVhZE9mIGFuZCBleHBsaWNpdCBwdXNodXJsIChwdXNoSW5zdGVhZE9mIHNob3VsZCBub3QgcmV3cml0ZSknICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCXRlc3RfY29uZmlnICJ1cmwudHJhc2gyLy5wdXNoSW5zdGVhZE9mIiB0ZXN0cmVwby8gJiYKKwl0ZXN0X2NvbmZpZyAidXJsLnRyYXNoMy8ucHVzaEluc3RlYWRPZiIgdHJhc2gvd3JvbmcgJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUuci51cmwgdHJhc2gvd3JvbmcgJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUuci5wdXNodXJsICJ0ZXN0cmVwby8iICYmCisJZ2l0IHB1c2ggciByZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZWNobyAiJHRoZV9jb21taXQgY29tbWl0CXJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIiA+ZXhwZWN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBtYXRjaGluZyBoZWFkcycgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIG1hdGNoaW5nIGhlYWRzIG9uIHRoZSBjb21tYW5kIGxpbmUnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gOiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCAobm9uLWZhc3QtZm9yd2FyZCkgcHVzaCB3aXRoIG1hdGNoaW5nIGhlYWRzJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIDogJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW1hc3NhZ2VkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICR0aGVfY29tbWl0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLWZvcmNlIHdpdGggbWF0Y2hpbmcgaGVhZHMnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gOiAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbWFzc2FnZWQgJiYKKwlnaXQgcHVzaCAtLWZvcmNlIHRlc3RyZXBvIDogJiYKKwkhIGNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJHRoZV9jb21taXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggbWF0Y2hpbmcgaGVhZHMgYW5kIGZvcmNlZCB1cGRhdGUnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gOiAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbWFzc2FnZWQgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyArOiAmJgorCSEgY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAkdGhlX2NvbW1pdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBubyBhbWJpZ3VpdHkgKDEpJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlcjptYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggbm8gYW1iaWd1aXR5ICgyKScgJworCisJbWtfdGVzdCB0ZXN0cmVwbyByZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXI6b3JpZ2luL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IHJlbW90ZXMvb3JpZ2luL21hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb2xvbi1sZXNzIHJlZnNwZWMsIG5vIGFtYmlndWl0eScgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgaGVhZHMvdC9tYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1mIHQvbWFzdGVyIG1hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IGhlYWRzL3QvbWFzdGVyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIHdlYWsgYW1iaWd1aXR5ICgxKScgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyOm1hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IHJlbW90ZXMvb3JpZ2luL21hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCB3ZWFrIGFtYmlndWl0eSAoMiknICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyIHJlbW90ZXMvb3JpZ2luL21hc3RlciByZW1vdGVzL2Fub3RoZXIvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyOm1hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IHJlbW90ZXMvb3JpZ2luL21hc3RlciByZW1vdGVzL2Fub3RoZXIvbWFzdGVyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGFtYmlndWl0eScgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9mcm90eiB0YWdzL2Zyb3R6ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyOmZyb3R6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9maXJzdF9jb21taXQgaGVhZHMvZnJvdHogdGFncy9mcm90egorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb2xvbi1sZXNzIHJlZnNwZWMgKDEpJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL2Zyb3R6IHRhZ3MvZnJvdHogJiYKKwlnaXQgYnJhbmNoIC1mIGZyb3R6IG1hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIGZyb3R6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvZnJvdHogJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCB0YWdzL2Zyb3R6CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGNvbG9uLWxlc3MgcmVmc3BlYyAoMiknICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvZnJvdHogdGFncy9mcm90eiAmJgorCWlmIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtcSByZWZzL2hlYWRzL2Zyb3R6CisJdGhlbgorCQlnaXQgYnJhbmNoIC1EIGZyb3R6CisJZmkgJiYKKwlnaXQgdGFnIC1mIGZyb3R6ICYmCisJZ2l0IHB1c2ggLWYgdGVzdHJlcG8gZnJvdHogJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCB0YWdzL2Zyb3R6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9maXJzdF9jb21taXQgaGVhZHMvZnJvdHoKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggY29sb24tbGVzcyByZWZzcGVjICgzKScgJworCisJbWtfdGVzdCB0ZXN0cmVwbyAmJgorCWlmIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtcSByZWZzL3RhZ3MvZnJvdHoKKwl0aGVuCisJCWdpdCB0YWcgLWQgZnJvdHoKKwlmaSAmJgorCWdpdCBicmFuY2ggLWYgZnJvdHogbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gZnJvdHogJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9mcm90eiAmJgorCXRlc3QgMSA9ICQoIGNkIHRlc3RyZXBvICYmIGdpdCBzaG93LXJlZiB8IHdjIC1sICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGNvbG9uLWxlc3MgcmVmc3BlYyAoNCknICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gJiYKKwlpZiBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLXEgcmVmcy9oZWFkcy9mcm90egorCXRoZW4KKwkJZ2l0IGJyYW5jaCAtRCBmcm90egorCWZpICYmCisJZ2l0IHRhZyAtZiBmcm90eiAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIGZyb3R6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgdGFncy9mcm90eiAmJgorCXRlc3QgMSA9ICQoIGNkIHRlc3RyZXBvICYmIGdpdCBzaG93LXJlZiB8IHdjIC1sICkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGhlYWQgd2l0aCBub24tZXhpc3RlbnQsIGluY29tcGxldGUgZGVzdCcgJworCisJbWtfdGVzdCB0ZXN0cmVwbyAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlcjpicmFuY2ggJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9icmFuY2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRhZyB3aXRoIG5vbi1leGlzdGVudCwgaW5jb21wbGV0ZSBkZXN0JyAnCisKKwlta190ZXN0IHRlc3RyZXBvICYmCisJZ2l0IHRhZyAtZiB2MS4wICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gdjEuMDp0YWcgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCB0YWdzL3RhZworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggc2hhMSB3aXRoIG5vbi1leGlzdGVudCwgaW5jb21wbGV0ZSBkZXN0JyAnCisKKwlta190ZXN0IHRlc3RyZXBvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gJChnaXQgcmV2LXBhcnNlIG1hc3Rlcik6Zm9vCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCByZWYgZXhwcmVzc2lvbiB3aXRoIG5vbi1leGlzdGVudCwgaW5jb21wbGV0ZSBkZXN0JyAnCisKKwlta190ZXN0IHRlc3RyZXBvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyXjpicmFuY2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggSEVBRCcgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gSEVBRCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBIRUFEIG5vbmV4aXN0aW5nIGF0IHJlbW90ZScgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbG9jYWwgbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gSEVBRCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL2xvY2FsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCArSEVBRCcgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCBsb2NhbCAmJgorCWdpdCBjaGVja291dCAtYiBsb2NhbCAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciBsb2NhbCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL2xvY2FsICYmCisKKwkjIFdpdGhvdXQgZm9yY2UgcmV3aW5kaW5nIHNob3VsZCBmYWlsCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIEhFQUQgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9sb2NhbCAmJgorCisJIyBXaXRoIGZvcmNlIHJld2luZGluZyBzaG91bGQgc3VjY2VlZAorCWdpdCBwdXNoIHRlc3RyZXBvICtIRUFEICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9maXJzdF9jb21taXQgaGVhZHMvbG9jYWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIEhFQUQgd2l0aCBub24tZXhpc3RlbnQsIGluY29tcGxldGUgZGVzdCcgJworCisJbWtfdGVzdCB0ZXN0cmVwbyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBIRUFEOmJyYW5jaCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL2JyYW5jaAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb25maWcgcmVtb3RlLioucHVzaCA9IEhFQUQnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbG9jYWwgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtZiBsb2NhbCAkdGhlX2NvbW1pdCAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGNoZWNrb3V0IGxvY2FsICYmCisJCWdpdCByZXNldCAtLWhhcmQgJHRoZV9maXJzdF9jb21taXQKKwkpICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnRoZXJlLnVybCB0ZXN0cmVwbyAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS50aGVyZS5wdXNoIEhFQUQgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSB0aGVyZSAmJgorCWdpdCBwdXNoICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9maXJzdF9jb21taXQgaGVhZHMvbG9jYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIHJlbW90ZS5wdXNoZGVmYXVsdCcgJworCW1rX3Rlc3QgdXBfcmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlta190ZXN0IGRvd25fcmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUudXAudXJsIHVwX3JlcG8gJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUuZG93bi51cmwgZG93bl9yZXBvICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgdXAgJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUucHVzaGRlZmF1bHQgZG93biAmJgorCXRlc3RfY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCWdpdCBwdXNoICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdXBfcmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCBkb3duX3JlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb25maWcgcmVtb3RlLioucHVzaHVybCcgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnRoZXJlLnVybCB0ZXN0MnJlcG8gJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUudGhlcmUucHVzaHVybCB0ZXN0cmVwbyAmJgorCWdpdCBwdXNoIHRoZXJlIDogJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGNvbmZpZyBicmFuY2guKi5wdXNocmVtb3RlJyAnCisJbWtfdGVzdCB1cF9yZXBvIGhlYWRzL21hc3RlciAmJgorCW1rX3Rlc3Qgc2lkZV9yZXBvIGhlYWRzL21hc3RlciAmJgorCW1rX3Rlc3QgZG93bl9yZXBvIGhlYWRzL21hc3RlciAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS51cC51cmwgdXBfcmVwbyAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS5wdXNoZGVmYXVsdCBzaWRlX3JlcG8gJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUuZG93bi51cmwgZG93bl9yZXBvICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgdXAgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnB1c2hyZW1vdGUgZG93biAmJgorCXRlc3RfY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCWdpdCBwdXNoICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdXBfcmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCBzaWRlX3JlcG8gJHRoZV9maXJzdF9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgZG93bl9yZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2guKi5wdXNocmVtb3RlIGNvbmZpZyBvcmRlciBpcyBpcnJlbGV2YW50JyAnCisJbWtfdGVzdCBvbmVfcmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlta190ZXN0IHR3b19yZXBvIGhlYWRzL21hc3RlciAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS5vbmUudXJsIG9uZV9yZXBvICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnR3by51cmwgdHdvX3JlcG8gJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnB1c2hyZW1vdGUgdHdvX3JlcG8gJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUucHVzaGRlZmF1bHQgb25lX3JlcG8gJiYKKwl0ZXN0X2NvbmZpZyBwdXNoLmRlZmF1bHQgbWF0Y2hpbmcgJiYKKwlnaXQgcHVzaCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IG9uZV9yZXBvICR0aGVfZmlyc3RfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHR3b19yZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggZHJ5LXJ1bicgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlvbGRfY29tbWl0PSQoZ2l0IC1DIHRlc3RyZXBvIHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCWdpdCBwdXNoIC0tZHJ5LXJ1biB0ZXN0cmVwbyA6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJG9sZF9jb21taXQgaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdXBkYXRlcyBsb2NhbCByZWZzJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkICYmCisJKAorCQljZCBjaGlsZCAmJgorCQlnaXQgcHVsbCAuLiBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSA9IFwKKwkJCSQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL29yaWdpbi9tYXN0ZXIpCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdXBkYXRlcyB1cC10by1kYXRlIGxvY2FsIHJlZnMnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJbWtfY2hpbGQgdGVzdHJlcG8gY2hpbGQxICYmCisJbWtfY2hpbGQgdGVzdHJlcG8gY2hpbGQyICYmCisJKGNkIGNoaWxkMSAmJiBnaXQgcHVsbCAuLiBtYXN0ZXIgJiYgZ2l0IHB1c2gpICYmCisJKAorCQljZCBjaGlsZDIgJiYKKwkJZ2l0IHB1bGwgLi4vY2hpbGQxIG1hc3RlciAmJgorCQlnaXQgcHVzaCAmJgorCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpID0gXAorCQkJJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL21hc3RlcikKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBwcmVzZXJ2ZXMgdXAtdG8tZGF0ZSBwYWNrZWQgcmVmcycgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlta19jaGlsZCB0ZXN0cmVwbyBjaGlsZCAmJgorCSgKKwkJY2QgY2hpbGQgJiYKKwkJZ2l0IHB1c2ggJiYKKwkJISB0ZXN0IC1mIC5naXQvcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBkb2VzIG5vdCB1cGRhdGUgbG9jYWwgcmVmcyBvbiBmYWlsdXJlJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkICYmCisJbWtkaXIgdGVzdHJlcG8vLmdpdC9ob29rcyAmJgorCWVjaG8gIiMhL25vL2Zyb2JuaWNhdGlvbi90b2RheSIgPnRlc3RyZXBvLy5naXQvaG9va3MvcHJlLXJlY2VpdmUgJiYKKwljaG1vZCAreCB0ZXN0cmVwby8uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlICYmCisJKAorCQljZCBjaGlsZCAmJgorCQlnaXQgcHVsbCAuLiBtYXN0ZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAhPSBcCisJCQkkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKQorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBkZWxldGluZyBhbiBpbnZhbGlkIHJlbW90ZSByZWYnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJcm0gLWYgdGVzdHJlcG8vLmdpdC9vYmplY3RzLz8/LyogJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6cmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkoY2QgdGVzdHJlcG8gJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIHZhbGlkIHJlZnMgdHJpZ2dlcnMgcG9zdC1yZWNlaXZlIGFuZCBwb3N0LXVwZGF0ZSBob29rcycgJworCW1rX3Rlc3Rfd2l0aF9ob29rcyB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgaGVhZHMvbmV4dCAmJgorCW9yZ21hc3Rlcj0kKGNkIHRlc3RyZXBvICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwluZXdtYXN0ZXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJb3JnbmV4dD0kKGNkIHRlc3RyZXBvICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL25leHQpICYmCisJbmV3bmV4dD0kWkVST19PSUQgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21hc3RlciA6cmVmcy9oZWFkcy9uZXh0ICYmCisJKAorCQljZCB0ZXN0cmVwby8uZ2l0ICYmCisJCWNhdCA+cHJlLXJlY2VpdmUuZXhwZWN0IDw8LUVPRiAmJgorCQkkb3JnbWFzdGVyICRuZXdtYXN0ZXIgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJJG9yZ25leHQgJG5ld25leHQgcmVmcy9oZWFkcy9uZXh0CisJCUVPRgorCisJCWNhdCA+dXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIgJG9yZ21hc3RlciAkbmV3bWFzdGVyCisJCXJlZnMvaGVhZHMvbmV4dCAkb3JnbmV4dCAkbmV3bmV4dAorCQlFT0YKKworCQljYXQgPnBvc3QtcmVjZWl2ZS5leHBlY3QgPDwtRU9GICYmCisJCSRvcmdtYXN0ZXIgJG5ld21hc3RlciByZWZzL2hlYWRzL21hc3RlcgorCQkkb3JnbmV4dCAkbmV3bmV4dCByZWZzL2hlYWRzL25leHQKKwkJRU9GCisKKwkJY2F0ID5wb3N0LXVwZGF0ZS5leHBlY3QgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvbWFzdGVyCisJCXJlZnMvaGVhZHMvbmV4dAorCQlFT0YKKworCQl0ZXN0X2NtcCBwcmUtcmVjZWl2ZS5leHBlY3QgcHJlLXJlY2VpdmUuYWN0dWFsICYmCisJCXRlc3RfY21wIHVwZGF0ZS5leHBlY3QgdXBkYXRlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBwb3N0LXJlY2VpdmUuZXhwZWN0IHBvc3QtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgcG9zdC11cGRhdGUuZXhwZWN0IHBvc3QtdXBkYXRlLmFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRpbmcgZGFuZ2xpbmcgcmVmIHRyaWdnZXJzIGhvb2tzIHdpdGggY29ycmVjdCBhcmdzJyAnCisJbWtfdGVzdF93aXRoX2hvb2tzIHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCXJtIC1mIHRlc3RyZXBvLy5naXQvb2JqZWN0cy8/Py8qICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gOnJlZnMvaGVhZHMvbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwby8uZ2l0ICYmCisJCWNhdCA+cHJlLXJlY2VpdmUuZXhwZWN0IDw8LUVPRiAmJgorCQkkWkVST19PSUQgJFpFUk9fT0lEIHJlZnMvaGVhZHMvbWFzdGVyCisJCUVPRgorCisJCWNhdCA+dXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIgJFpFUk9fT0lEICRaRVJPX09JRAorCQlFT0YKKworCQljYXQgPnBvc3QtcmVjZWl2ZS5leHBlY3QgPDwtRU9GICYmCisJCSRaRVJPX09JRCAkWkVST19PSUQgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJRU9GCisKKwkJY2F0ID5wb3N0LXVwZGF0ZS5leHBlY3QgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvbWFzdGVyCisJCUVPRgorCisJCXRlc3RfY21wIHByZS1yZWNlaXZlLmV4cGVjdCBwcmUtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgdXBkYXRlLmV4cGVjdCB1cGRhdGUuYWN0dWFsICYmCisJCXRlc3RfY21wIHBvc3QtcmVjZWl2ZS5leHBlY3QgcG9zdC1yZWNlaXZlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBwb3N0LXVwZGF0ZS5leHBlY3QgcG9zdC11cGRhdGUuYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGlvbiBvZiBhIG5vbi1leGlzdGVudCByZWYgaXMgbm90IGZlZCB0byBwb3N0LXJlY2VpdmUgYW5kIHBvc3QtdXBkYXRlIGhvb2tzJyAnCisJbWtfdGVzdF93aXRoX2hvb2tzIHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCW9yZ21hc3Rlcj0kKGNkIHRlc3RyZXBvICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwluZXdtYXN0ZXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyIDpyZWZzL2hlYWRzL25vbmV4aXN0ZW50ICYmCisJKAorCQljZCB0ZXN0cmVwby8uZ2l0ICYmCisJCWNhdCA+cHJlLXJlY2VpdmUuZXhwZWN0IDw8LUVPRiAmJgorCQkkb3JnbWFzdGVyICRuZXdtYXN0ZXIgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJJFpFUk9fT0lEICRaRVJPX09JRCByZWZzL2hlYWRzL25vbmV4aXN0ZW50CisJCUVPRgorCisJCWNhdCA+dXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIgJG9yZ21hc3RlciAkbmV3bWFzdGVyCisJCXJlZnMvaGVhZHMvbm9uZXhpc3RlbnQgJFpFUk9fT0lEICRaRVJPX09JRAorCQlFT0YKKworCQljYXQgPnBvc3QtcmVjZWl2ZS5leHBlY3QgPDwtRU9GICYmCisJCSRvcmdtYXN0ZXIgJG5ld21hc3RlciByZWZzL2hlYWRzL21hc3RlcgorCQlFT0YKKworCQljYXQgPnBvc3QtdXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIKKwkJRU9GCisKKwkJdGVzdF9jbXAgcHJlLXJlY2VpdmUuZXhwZWN0IHByZS1yZWNlaXZlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCB1cGRhdGUuZXhwZWN0IHVwZGF0ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgcG9zdC1yZWNlaXZlLmV4cGVjdCBwb3N0LXJlY2VpdmUuYWN0dWFsICYmCisJCXRlc3RfY21wIHBvc3QtdXBkYXRlLmV4cGVjdCBwb3N0LXVwZGF0ZS5hY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0aW9uIG9mIGEgbm9uLWV4aXN0ZW50IHJlZiBhbG9uZSBkb2VzIHRyaWdnZXIgcG9zdC1yZWNlaXZlIGFuZCBwb3N0LXVwZGF0ZSBob29rcycgJworCW1rX3Rlc3Rfd2l0aF9ob29rcyB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6cmVmcy9oZWFkcy9ub25leGlzdGVudCAmJgorCSgKKwkJY2QgdGVzdHJlcG8vLmdpdCAmJgorCQljYXQgPnByZS1yZWNlaXZlLmV4cGVjdCA8PC1FT0YgJiYKKwkJJFpFUk9fT0lEICRaRVJPX09JRCByZWZzL2hlYWRzL25vbmV4aXN0ZW50CisJCUVPRgorCisJCWNhdCA+dXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9ub25leGlzdGVudCAkWkVST19PSUQgJFpFUk9fT0lECisJCUVPRgorCisJCXRlc3RfY21wIHByZS1yZWNlaXZlLmV4cGVjdCBwcmUtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgdXBkYXRlLmV4cGVjdCB1cGRhdGUuYWN0dWFsICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHBvc3QtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgcG9zdC11cGRhdGUuYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXhlZCByZWYgdXBkYXRlcywgZGVsZXRlcywgaW52YWxpZCBkZWxldGVzIHRyaWdnZXIgaG9va3Mgd2l0aCBjb3JyZWN0IGlucHV0JyAnCisJbWtfdGVzdF93aXRoX2hvb2tzIHRlc3RyZXBvIGhlYWRzL21hc3RlciBoZWFkcy9uZXh0IGhlYWRzL3B1ICYmCisJb3JnbWFzdGVyPSQoY2QgdGVzdHJlcG8gJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCW5ld21hc3Rlcj0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwlvcmduZXh0PSQoY2QgdGVzdHJlcG8gJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbmV4dCkgJiYKKwluZXduZXh0PSRaRVJPX09JRCAmJgorCW9yZ3B1PSQoY2QgdGVzdHJlcG8gJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcHUpICYmCisJbmV3cHU9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9tYXN0ZXIgXAorCSAgICByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL3B1IDpyZWZzL2hlYWRzL25leHQgXAorCSAgICA6cmVmcy9oZWFkcy9ub25leGlzdGVudCAmJgorCSgKKwkJY2QgdGVzdHJlcG8vLmdpdCAmJgorCQljYXQgPnByZS1yZWNlaXZlLmV4cGVjdCA8PC1FT0YgJiYKKwkJJG9yZ21hc3RlciAkbmV3bWFzdGVyIHJlZnMvaGVhZHMvbWFzdGVyCisJCSRvcmduZXh0ICRuZXduZXh0IHJlZnMvaGVhZHMvbmV4dAorCQkkb3JncHUgJG5ld3B1IHJlZnMvaGVhZHMvcHUKKwkJJFpFUk9fT0lEICRaRVJPX09JRCByZWZzL2hlYWRzL25vbmV4aXN0ZW50CisJCUVPRgorCisJCWNhdCA+dXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIgJG9yZ21hc3RlciAkbmV3bWFzdGVyCisJCXJlZnMvaGVhZHMvbmV4dCAkb3JnbmV4dCAkbmV3bmV4dAorCQlyZWZzL2hlYWRzL3B1ICRvcmdwdSAkbmV3cHUKKwkJcmVmcy9oZWFkcy9ub25leGlzdGVudCAkWkVST19PSUQgJFpFUk9fT0lECisJCUVPRgorCisJCWNhdCA+cG9zdC1yZWNlaXZlLmV4cGVjdCA8PC1FT0YgJiYKKwkJJG9yZ21hc3RlciAkbmV3bWFzdGVyIHJlZnMvaGVhZHMvbWFzdGVyCisJCSRvcmduZXh0ICRuZXduZXh0IHJlZnMvaGVhZHMvbmV4dAorCQkkb3JncHUgJG5ld3B1IHJlZnMvaGVhZHMvcHUKKwkJRU9GCisKKwkJY2F0ID5wb3N0LXVwZGF0ZS5leHBlY3QgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvbWFzdGVyCisJCXJlZnMvaGVhZHMvbmV4dAorCQlyZWZzL2hlYWRzL3B1CisJCUVPRgorCisJCXRlc3RfY21wIHByZS1yZWNlaXZlLmV4cGVjdCBwcmUtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgdXBkYXRlLmV4cGVjdCB1cGRhdGUuYWN0dWFsICYmCisJCXRlc3RfY21wIHBvc3QtcmVjZWl2ZS5leHBlY3QgcG9zdC1yZWNlaXZlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBwb3N0LXVwZGF0ZS5leHBlY3QgcG9zdC11cGRhdGUuYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBkZWxldGluZyBhIHJlZiB1c2luZyAtLWRlbGV0ZScgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJKGNkIHRlc3RyZXBvICYmIGdpdCBjb25maWcgcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCB3YXJuKSAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIC0tZGVsZXRlIG1hc3RlciAmJgorCShjZCB0ZXN0cmVwbyAmJiB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBkZWxldGluZyBhIHRhZyB1c2luZyAtLWRlbGV0ZScgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJZ2l0IHRhZyAtYSAtbSBkdW1teV9tZXNzYWdlIGRlbHRhZyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyAtLXRhZ3MgJiYKKwkoY2QgdGVzdHJlcG8gJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSByZWZzL3RhZ3MvZGVsdGFnKSAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIC0tZGVsZXRlIHRhZyBkZWx0YWcgJiYKKwkoY2QgdGVzdHJlcG8gJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3RhZ3MvZGVsdGFnKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tZGVsZXRlIHdpdGhvdXQgYXJncyBhYm9ydHMnICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIC0tZGVsZXRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1kZWxldGUgcmVmdXNlcyBzcmM6ZGVzdCByZWZzcGVjcycgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gLS1kZWxldGUgbWFzdGVyOmZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3YXJuIG9uIHB1c2ggdG8gSEVBRCBvZiBub24tYmFyZSByZXBvc2l0b3J5JyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4KKwkpICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyIDI+c3RkZXJyICYmCisJZ3JlcCAid2FybmluZzogdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVueSBwdXNoIHRvIEhFQUQgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeScgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB0cnVlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBwdXNoIHRvIEhFQUQgb2YgYmFyZSByZXBvc2l0b3J5IChiYXJlKScgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB0cnVlICYmCisJCWdpdCBjb25maWcgY29yZS5iYXJlIHRydWUKKwkpICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyIDI+c3RkZXJyICYmCisJISBncmVwICJ3YXJuaW5nOiB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2giIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBwdXNoIHRvIEhFQUQgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSAoY29uZmlnKScgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBmYWxzZQorCSkgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgMj5zdGRlcnIgJiYKKwkhIGdyZXAgIndhcm5pbmc6IHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggYnJhbmNoZXMnICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCWdpdCBicmFuY2ggc2Vjb25kICR0aGVfZmlyc3RfY29tbWl0ICYmCisJZ2l0IGNoZWNrb3V0IHNlY29uZCAmJgorCWVjaG8gIi4uIiA+IHRlc3RyZXBvLy5naXQvYnJhbmNoZXMvYnJhbmNoMSAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGZldGNoIGJyYW5jaDEgJiYKKwkJZWNobyAiJHRoZV9jb21taXQgY29tbWl0CXJlZnMvaGVhZHMvYnJhbmNoMSIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBicmFuY2hlcyBjb250YWluaW5nICMnICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCWVjaG8gIi4uI3NlY29uZCIgPiB0ZXN0cmVwby8uZ2l0L2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBmZXRjaCBicmFuY2gyICYmCisJCWVjaG8gIiR0aGVfZmlyc3RfY29tbWl0IGNvbW1pdAlyZWZzL2hlYWRzL2JyYW5jaDIiID5leHBlY3QgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBicmFuY2hlcycgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJZ2l0IGNoZWNrb3V0IHNlY29uZCAmJgorCWVjaG8gInRlc3RyZXBvIiA+IC5naXQvYnJhbmNoZXMvYnJhbmNoMSAmJgorCWdpdCBwdXNoIGJyYW5jaDEgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWVjaG8gIiR0aGVfZmlyc3RfY29tbWl0IGNvbW1pdAlyZWZzL2hlYWRzL21hc3RlciIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggYnJhbmNoZXMgY29udGFpbmluZyAjJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwllY2hvICJ0ZXN0cmVwbyNicmFuY2gzIiA+IC5naXQvYnJhbmNoZXMvYnJhbmNoMiAmJgorCWdpdCBwdXNoIGJyYW5jaDIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWVjaG8gIiR0aGVfZmlyc3RfY29tbWl0IGNvbW1pdAlyZWZzL2hlYWRzL2JyYW5jaDMiID5leHBlY3QgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggaW50byBhbGlhc2VkIHJlZnMgKGNvbnNpc3RlbnQpJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlta19jaGlsZCB0ZXN0cmVwbyBjaGlsZDEgJiYKKwlta19jaGlsZCB0ZXN0cmVwbyBjaGlsZDIgJiYKKwkoCisJCWNkIGNoaWxkMSAmJgorCQlnaXQgYnJhbmNoIGZvbyAmJgorCQlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvYmFyIHJlZnMvaGVhZHMvZm9vICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBmYWxzZQorCSkgJiYKKwkoCisJCWNkIGNoaWxkMiAmJgorCQk+cGF0aDIgJiYKKwkJZ2l0IGFkZCBwYXRoMiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBjaGlsZDIgJiYKKwkJZ2l0IGJyYW5jaCBmb28gJiYKKwkJZ2l0IGJyYW5jaCBiYXIgJiYKKwkJZ2l0IHB1c2ggLi4vY2hpbGQxIGZvbyBiYXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggaW50byBhbGlhc2VkIHJlZnMgKGluY29uc2lzdGVudCknICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkMSAmJgorCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkMiAmJgorCSgKKwkJY2QgY2hpbGQxICYmCisJCWdpdCBicmFuY2ggZm9vICYmCisJCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9iYXIgcmVmcy9oZWFkcy9mb28gJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGZhbHNlCisJKSAmJgorCSgKKwkJY2QgY2hpbGQyICYmCisJCT5wYXRoMiAmJgorCQlnaXQgYWRkIHBhdGgyICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tIGNoaWxkMiAmJgorCQlnaXQgYnJhbmNoIGZvbyAmJgorCQk+cGF0aDMgJiYKKwkJZ2l0IGFkZCBwYXRoMyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBjaGlsZDIgJiYKKwkJZ2l0IGJyYW5jaCBiYXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLi4vY2hpbGQxIGZvbyBiYXIgMj5zdGRlcnIgJiYKKwkJZ3JlcCAicmVmdXNpbmcgaW5jb25zaXN0ZW50IHVwZGF0ZSIgc3RkZXJyCisJKQorJworCit0ZXN0X2ZvcmNlX3B1c2hfdGFnICgpIHsKKwl0YWdfdHlwZV9kZXNjcmlwdGlvbj0kMQorCXRhZ19hcmdzPSQyCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmb3JjZSBwdXNoaW5nIHJlcXVpcmVkIHRvIHVwZGF0ZSAkdGFnX3R5cGVfZGVzY3JpcHRpb24iICIKKwkJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwkJbWtfY2hpbGQgdGVzdHJlcG8gY2hpbGQxICYmCisJCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkMiAmJgorCQkoCisJCQljZCBjaGlsZDEgJiYKKwkJCWdpdCB0YWcgdGVzdFRhZyAmJgorCQkJZ2l0IHB1c2ggLi4vY2hpbGQyIHRlc3RUYWcgJiYKKwkJCT5maWxlMSAmJgorCQkJZ2l0IGFkZCBmaWxlMSAmJgorCQkJZ2l0IGNvbW1pdCAtbSAnZmlsZTEnICYmCisJCQlnaXQgdGFnICR0YWdfYXJncyB0ZXN0VGFnICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAuLi9jaGlsZDIgdGVzdFRhZyAmJgorCQkJZ2l0IHB1c2ggLS1mb3JjZSAuLi9jaGlsZDIgdGVzdFRhZyAmJgorCQkJZ2l0IHRhZyAkdGFnX2FyZ3MgdGVzdFRhZyBIRUFEfiAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLi4vY2hpbGQyIHRlc3RUYWcgJiYKKwkJCWdpdCBwdXNoIC0tZm9yY2UgLi4vY2hpbGQyIHRlc3RUYWcgJiYKKworCQkJIyBDbG9iYmVyaW5nIHdpdGhvdXQgKyBpbiByZWZzcGVjIG5lZWRzIC0tZm9yY2UKKwkJCWdpdCB0YWcgLWYgdGVzdFRhZyAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLi4vY2hpbGQyICdyZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKicgJiYKKwkJCWdpdCBwdXNoIC0tZm9yY2UgLi4vY2hpbGQyICdyZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKicgJiYKKworCQkJIyBDbG9iYmVyaW5nIHdpdGggKyBpbiByZWZzcGVjIGRvZXMgbm90IG5lZWQgLS1mb3JjZQorCQkJZ2l0IHRhZyAtZiB0ZXN0VGFnIEhFQUR+ICYmCisJCQlnaXQgcHVzaCAuLi9jaGlsZDIgJytyZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKicgJiYKKworCQkJIyBDbG9iYmVyaW5nIHdpdGggLS1uby1mb3JjZSBzdGlsbCBvYmV5cyArIGluIHJlZnNwZWMKKwkJCWdpdCB0YWcgLWYgdGVzdFRhZyAmJgorCQkJZ2l0IHB1c2ggLS1uby1mb3JjZSAuLi9jaGlsZDIgJytyZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKicgJiYKKworCQkJIyBDbG9iYmVyaW5nIHdpdGgvd2l0aG91dCAtLWZvcmNlIGFuZCAndGFnIDxuYW1lPicgZm9ybWF0CisJCQlnaXQgdGFnIC1mIHRlc3RUYWcgSEVBRH4gJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC4uL2NoaWxkMiB0YWcgdGVzdFRhZyAmJgorCQkJZ2l0IHB1c2ggLS1mb3JjZSAuLi9jaGlsZDIgdGFnIHRlc3RUYWcKKwkJKQorCSIKK30KKwordGVzdF9mb3JjZV9wdXNoX3RhZyAibGlnaHR3ZWlnaHQgdGFnIiAiLWYiCit0ZXN0X2ZvcmNlX3B1c2hfdGFnICJhbm5vdGF0ZWQgdGFnIiAiLWYgLWEgLW0ndGFnIG1lc3NhZ2UnIgorCit0ZXN0X2ZvcmNlX2ZldGNoX3RhZyAoKSB7CisJdGFnX3R5cGVfZGVzY3JpcHRpb249JDEKKwl0YWdfYXJncz0kMgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggd2lsbCBub3QgY2xvYmJlciBhbiBleGlzdGluZyAkdGFnX3R5cGVfZGVzY3JpcHRpb24gd2l0aG91dCAtLWZvcmNlIiAiCisJCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkMSAmJgorCQlta19jaGlsZCB0ZXN0cmVwbyBjaGlsZDIgJiYKKwkJKAorCQkJY2QgdGVzdHJlcG8gJiYKKwkJCWdpdCB0YWcgdGVzdFRhZyAmJgorCQkJZ2l0IC1DIC4uL2NoaWxkMSBmZXRjaCBvcmlnaW4gdGFnIHRlc3RUYWcgJiYKKwkJCT5maWxlMSAmJgorCQkJZ2l0IGFkZCBmaWxlMSAmJgorCQkJZ2l0IGNvbW1pdCAtbSAnZmlsZTEnICYmCisJCQlnaXQgdGFnICR0YWdfYXJncyB0ZXN0VGFnICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgLUMgLi4vY2hpbGQxIGZldGNoIG9yaWdpbiB0YWcgdGVzdFRhZyAmJgorCQkJZ2l0IC1DIC4uL2NoaWxkMSBmZXRjaCBvcmlnaW4gJytyZWZzL3RhZ3MvKjpyZWZzL3RhZ3MvKicKKwkJKQorCSIKK30KKwordGVzdF9mb3JjZV9mZXRjaF90YWcgImxpZ2h0d2VpZ2h0IHRhZyIgIi1mIgordGVzdF9mb3JjZV9mZXRjaF90YWcgImFubm90YXRlZCB0YWciICItZiAtYSAtbSd0YWcgbWVzc2FnZSciCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1wb3JjZWxhaW4nICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCWVjaG8gPi5naXQvZm9vICAiVG8gdGVzdHJlcG8iICYmCisJZWNobyA+Pi5naXQvZm9vICIqCXJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCVtuZXcgYnJhbmNoXSIgICYmCisJZWNobyA+Pi5naXQvZm9vICJEb25lIiAmJgorCWdpdCBwdXNoID4uZ2l0L2JhciAtLXBvcmNlbGFpbiAgdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWVjaG8gIiR0aGVfY29tbWl0IGNvbW1pdAlyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIC5naXQvZm9vIC5naXQvYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1wb3JjZWxhaW4gYmFkIHVybCcgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggPi5naXQvYmFyIC0tcG9yY2VsYWluIGFzZGZhc2RmYXNkIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJISBncmVwIC1xIERvbmUgLmdpdC9iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLXBvcmNlbGFpbiByZWplY3RlZCcgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkoY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vbWFzdGVyXiAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggdHJ1ZSkgJiYKKworCWVjaG8gPi5naXQvZm9vICAiVG8gdGVzdHJlcG8iICAmJgorCWVjaG8gPj4uZ2l0L2ZvbyAiIQlyZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21hc3RlcglbcmVtb3RlIHJlamVjdGVkXSAoYnJhbmNoIGlzIGN1cnJlbnRseSBjaGVja2VkIG91dCkiICYmCisJZWNobyA+Pi5naXQvZm9vICJEb25lIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggPi5naXQvYmFyIC0tcG9yY2VsYWluICB0ZXN0cmVwbyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfY21wIC5naXQvZm9vIC5naXQvYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1wb3JjZWxhaW4gLS1kcnktcnVuIHJlamVjdGVkJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAmJgorCShjZCB0ZXN0cmVwbyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXIgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHRydWUpICYmCisKKwllY2hvID4uZ2l0L2ZvbyAgIlRvIHRlc3RyZXBvIiAgJiYKKwllY2hvID4+LmdpdC9mb28gIiEJcmVmcy9oZWFkcy9tYXN0ZXJeOnJlZnMvaGVhZHMvbWFzdGVyCVtyZWplY3RlZF0gKG5vbi1mYXN0LWZvcndhcmQpIiAmJgorCWVjaG8gPj4uZ2l0L2ZvbyAiRG9uZSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoID4uZ2l0L2JhciAtLXBvcmNlbGFpbiAgLS1kcnktcnVuIHRlc3RyZXBvIHJlZnMvaGVhZHMvbWFzdGVyXjpyZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfY21wIC5naXQvZm9vIC5naXQvYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1wcnVuZScgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyIGhlYWRzL3NlY29uZCBoZWFkcy9mb28gaGVhZHMvYmFyICYmCisJZ2l0IHB1c2ggLS1wcnVuZSB0ZXN0cmVwbyA6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9maXJzdF9jb21taXQgaGVhZHMvc2Vjb25kICYmCisJISBjaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoZWFkcy9mb28gaGVhZHMvYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1wcnVuZSByZWZzcGVjJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyB0bXAvbWFzdGVyIHRtcC9zZWNvbmQgdG1wL2ZvbyB0bXAvYmFyICYmCisJZ2l0IHB1c2ggLS1wcnVuZSB0ZXN0cmVwbyAicmVmcy9oZWFkcy8qOnJlZnMvdG1wLyoiICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgdG1wL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IHRtcC9zZWNvbmQgJiYKKwkhIGNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IHRtcC9mb28gdG1wL2JhcgorJworCitmb3IgY29uZmlnc2VjdGlvbiBpbiB0cmFuc2ZlciByZWNlaXZlCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInB1c2ggdG8gdXBkYXRlIGEgcmVmIGhpZGRlbiBieSAkY29uZmlnc2VjdGlvbi5oaWRlcmVmcyIgJworCQlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciBoaWRkZW4vb25lIGhpZGRlbi90d28gaGlkZGVuL3RocmVlICYmCisJCSgKKwkJCWNkIHRlc3RyZXBvICYmCisJCQlnaXQgY29uZmlnICRjb25maWdzZWN0aW9uLmhpZGVyZWZzIHJlZnMvaGlkZGVuCisJCSkgJiYKKworCQkjIHB1c2ggdG8gdW5oaWRkZW4gcmVmIHN1Y2NlZWRzIG5vcm1hbGx5CisJCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlcjpyZWZzL2hlYWRzL21hc3RlciAmJgorCQljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKworCQkjIHB1c2ggdG8gdXBkYXRlIGEgaGlkZGVuIHJlZiBzaG91bGQgZmFpbAorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXI6cmVmcy9oaWRkZW4vb25lICYmCisJCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IGhpZGRlbi9vbmUgJiYKKworCQkjIHB1c2ggdG8gZGVsZXRlIGEgaGlkZGVuIHJlZiBzaG91bGQgZmFpbAorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyA6cmVmcy9oaWRkZW4vdHdvICYmCisJCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IGhpZGRlbi90d28gJiYKKworCQkjIGlkZW1wb3RlbnQgcHVzaCB0byB1cGRhdGUgYSBoaWRkZW4gcmVmIHNob3VsZCBmYWlsCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0OnJlZnMvaGlkZGVuL3RocmVlICYmCisJCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IGhpZGRlbi90aHJlZQorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZXhhY3QgU0hBMScgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyIGhpZGRlbi9vbmUgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXI6cmVmcy9oaWRkZW4vb25lICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLmhpZGVyZWZzIHJlZnMvaGlkZGVuCisJKSAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhpZGRlbi9vbmUgJiYKKworCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkICYmCisJKAorCQljZCBjaGlsZCAmJgorCisJCSMgbWFrZSBzdXJlICR0aGVfY29tbWl0IGRvZXMgbm90IGV4aXN0IGhlcmUKKwkJZ2l0IHJlcGFjayAtYSAtZCAmJgorCQlnaXQgcHJ1bmUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC10ICR0aGVfY29tbWl0ICYmCisKKwkJIyBTb21lIHByb3RvY29sIHZlcnNpb25zIChlLmcuIDIpIHN1cHBvcnQgZmV0Y2hpbmcKKwkJIyB1bmFkdmVydGlzZWQgb2JqZWN0cywgc28gcmVzdHJpY3QgdGhpcyB0ZXN0IHRvIHYwLgorCisJCSMgZmV0Y2hpbmcgdGhlIGhpZGRlbiBvYmplY3Qgc2hvdWxkIGZhaWwgYnkgZGVmYXVsdAorCQl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIFwKKwkJCWdpdCBmZXRjaCAtdiAuLi90ZXN0cmVwbyAkdGhlX2NvbW1pdDpyZWZzL2hlYWRzL2NvcHkgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiU2VydmVyIGRvZXMgbm90IGFsbG93IHJlcXVlc3QgZm9yIHVuYWR2ZXJ0aXNlZCBvYmplY3QiIGVyciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvY29weSAmJgorCisJCSMgdGhlIHNlcnZlciBzaWRlIGNhbiBhbGxvdyBpdCB0byBzdWNjZWVkCisJCSgKKwkJCWNkIC4uL3Rlc3RyZXBvICYmCisJCQlnaXQgY29uZmlnIHVwbG9hZHBhY2suYWxsb3d0aXBzaGExaW53YW50IHRydWUKKwkJKSAmJgorCisJCWdpdCBmZXRjaCAtdiAuLi90ZXN0cmVwbyAkdGhlX2NvbW1pdDpyZWZzL2hlYWRzL2NvcHkgbWFzdGVyOnJlZnMvaGVhZHMvZXh0cmEgJiYKKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCSR0aGVfY29tbWl0CisJCSR0aGVfZmlyc3RfY29tbWl0CisJCUVPRgorCQl7CisJCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvY29weSAmJgorCQkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL2V4dHJhCisJCX0gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBleGFjdCBTSEExIGluIHByb3RvY29sIHYyJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgaGlkZGVuL29uZSAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlcjpyZWZzL2hpZGRlbi9vbmUgJiYKKwlnaXQgLUMgdGVzdHJlcG8gY29uZmlnIHRyYW5zZmVyLmhpZGVyZWZzIHJlZnMvaGlkZGVuICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGlkZGVuL29uZSAmJgorCisJbWtfY2hpbGQgdGVzdHJlcG8gY2hpbGQgJiYKKwlnaXQgLUMgY2hpbGQgY29uZmlnIHByb3RvY29sLnZlcnNpb24gMiAmJgorCisJIyBtYWtlIHN1cmUgJHRoZV9jb21taXQgZG9lcyBub3QgZXhpc3QgaGVyZQorCWdpdCAtQyBjaGlsZCByZXBhY2sgLWEgLWQgJiYKKwlnaXQgLUMgY2hpbGQgcHJ1bmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgY2hpbGQgY2F0LWZpbGUgLXQgJHRoZV9jb21taXQgJiYKKworCSMgZmV0Y2hpbmcgdGhlIGhpZGRlbiBvYmplY3Qgc3VjY2VlZHMgYnkgZGVmYXVsdAorCSMgTkVFRFNXT1JLOiBzaG91bGQgdGhpcyBtYXRjaCB0aGUgdjAgYmVoYXZpb3IgaW5zdGVhZD8KKwlnaXQgLUMgY2hpbGQgZmV0Y2ggLXYgLi4vdGVzdHJlcG8gJHRoZV9jb21taXQ6cmVmcy9oZWFkcy9jb3B5CisnCisKK2ZvciBjb25maWdhbGxvd3RpcHNoYTFpbndhbnQgaW4gdHJ1ZSBmYWxzZQorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJzaGFsbG93IGZldGNoIHJlYWNoYWJsZSBTSEExIChidXQgbm90IGEgcmVmKSwgYWxsb3d0aXBzaGExaW53YW50PSRjb25maWdhbGxvd3RpcHNoYTFpbndhbnQiICcKKwkJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwkJKAorCQkJY2QgdGVzdHJlcG8gJiYKKwkJCWdpdCBjb25maWcgdXBsb2FkcGFjay5hbGxvd3RpcHNoYTFpbndhbnQgJGNvbmZpZ2FsbG93dGlwc2hhMWlud2FudCAmJgorCQkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGZvbyAmJgorCQkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGJhcgorCQkpICYmCisJCVNIQTE9JChnaXQgLS1naXQtZGlyPXRlc3RyZXBvLy5naXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCQlta19lbXB0eSBzaGFsbG93ICYmCisJCSgKKwkJCWNkIHNoYWxsb3cgJiYKKwkJCSMgU29tZSBwcm90b2NvbCB2ZXJzaW9ucyAoZS5nLiAyKSBzdXBwb3J0IGZldGNoaW5nCisJCQkjIHVuYWR2ZXJ0aXNlZCBvYmplY3RzLCBzbyByZXN0cmljdCB0aGlzIHRlc3QgdG8gdjAuCisJCQl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIFwKKwkJCQlnaXQgZmV0Y2ggLS1kZXB0aD0xIC4uL3Rlc3RyZXBvLy5naXQgJFNIQTEgJiYKKwkJCWdpdCAtLWdpdC1kaXI9Li4vdGVzdHJlcG8vLmdpdCBjb25maWcgdXBsb2FkcGFjay5hbGxvd3JlYWNoYWJsZXNoYTFpbndhbnQgdHJ1ZSAmJgorCQkJZ2l0IGZldGNoIC0tZGVwdGg9MSAuLi90ZXN0cmVwby8uZ2l0ICRTSEExICYmCisJCQlnaXQgY2F0LWZpbGUgY29tbWl0ICRTSEExCisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZW55IGZldGNoIHVucmVhY2hhYmxlIFNIQTEsIGFsbG93dGlwc2hhMWlud2FudD0kY29uZmlnYWxsb3d0aXBzaGExaW53YW50IiAnCisJCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJCSgKKwkJCWNkIHRlc3RyZXBvICYmCisJCQlnaXQgY29uZmlnIHVwbG9hZHBhY2suYWxsb3d0aXBzaGExaW53YW50ICRjb25maWdhbGxvd3RpcHNoYTFpbndhbnQgJiYKKwkJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBmb28gJiYKKwkJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBiYXIgJiYKKwkJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB4eXoKKwkJKSAmJgorCQlTSEExXzE9JChnaXQgLS1naXQtZGlyPXRlc3RyZXBvLy5naXQgcmV2LXBhcnNlIEhFQUReXikgJiYKKwkJU0hBMV8yPSQoZ2l0IC0tZ2l0LWRpcj10ZXN0cmVwby8uZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwkJU0hBMV8zPSQoZ2l0IC0tZ2l0LWRpcj10ZXN0cmVwby8uZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQkoCisJCQljZCB0ZXN0cmVwbyAmJgorCQkJZ2l0IHJlc2V0IC0taGFyZCAkU0hBMV8yICYmCisJCQlnaXQgY2F0LWZpbGUgY29tbWl0ICRTSEExXzEgJiYKKwkJCWdpdCBjYXQtZmlsZSBjb21taXQgJFNIQTFfMworCQkpICYmCisJCW1rX2VtcHR5IHNoYWxsb3cgJiYKKwkJKAorCQkJY2Qgc2hhbGxvdyAmJgorCQkJIyBTb21lIHByb3RvY29sIHZlcnNpb25zIChlLmcuIDIpIHN1cHBvcnQgZmV0Y2hpbmcKKwkJCSMgdW5hZHZlcnRpc2VkIG9iamVjdHMsIHNvIHJlc3RyaWN0IHRoaXMgdGVzdCB0byB2MC4KKwkJCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgXAorCQkJCWdpdCBmZXRjaCAuLi90ZXN0cmVwby8uZ2l0ICRTSEExXzMgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgXAorCQkJCWdpdCBmZXRjaCAuLi90ZXN0cmVwby8uZ2l0ICRTSEExXzEgJiYKKwkJCWdpdCAtLWdpdC1kaXI9Li4vdGVzdHJlcG8vLmdpdCBjb25maWcgdXBsb2FkcGFjay5hbGxvd3JlYWNoYWJsZXNoYTFpbndhbnQgdHJ1ZSAmJgorCQkJZ2l0IGZldGNoIC4uL3Rlc3RyZXBvLy5naXQgJFNIQTFfMSAmJgorCQkJZ2l0IGNhdC1maWxlIGNvbW1pdCAkU0hBMV8xICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgY29tbWl0ICRTSEExXzIgJiYKKwkJCWdpdCBmZXRjaCAuLi90ZXN0cmVwby8uZ2l0ICRTSEExXzIgJiYKKwkJCWdpdCBjYXQtZmlsZSBjb21taXQgJFNIQTFfMiAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBcCisJCQkJZ2l0IGZldGNoIC4uL3Rlc3RyZXBvLy5naXQgJFNIQTFfMyAyPmVyciAmJgorCQkJdGVzdF9pMThuZ3JlcCAicmVtb3RlIGVycm9yOi4qbm90IG91ciByZWYuKiRTSEExXzNcJCIgZXJyCisJCSkKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZvbGxvd3MgdGFncyBieSBkZWZhdWx0JyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlybSAtZnIgc3JjIGRzdCAmJgorCWdpdCBpbml0IHNyYyAmJgorCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBwdWxsIC4uL3Rlc3RyZXBvIG1hc3RlciAmJgorCQlnaXQgdGFnIC1tICJhbm5vdGF0ZWQiIHRhZyAmJgorCQlnaXQgZm9yLWVhY2gtcmVmID50bXAxICYmCisJCSgKKwkJCWNhdCB0bXAxCisJCQlzZWQgLW4gInN8cmVmcy9oZWFkcy9tYXN0ZXIkfHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyfHAiIHRtcDEKKwkJKSB8CisJCXNvcnQgLWsgMyA+Li4vZXhwZWN0CisJKSAmJgorCWdpdCBpbml0IGRzdCAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCByZW1vdGUgYWRkIG9yaWdpbiAuLi9zcmMgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBvcmlnaW4gJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJCWdpdCBwdWxsICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BlZWxlZCBhZHZlcnRpc2VtZW50cyBhcmUgbm90IGNvbnNpZGVyZWQgcmVmIHRpcHMnICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCWdpdCAtQyB0ZXN0cmVwbyBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBvbmUgJiYKKwlnaXQgLUMgdGVzdHJlcG8gY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdHdvICYmCisJZ2l0IC1DIHRlc3RyZXBvIHRhZyAtbSBmb28gbXl0YWcgSEVBRF4gJiYKKwlvaWQ9JChnaXQgLUMgdGVzdHJlcG8gcmV2LXBhcnNlIG15dGFnXntjb21taXR9KSAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgXAorCQlnaXQgZmV0Y2ggdGVzdHJlcG8gJG9pZCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaGluZyBhIHNwZWNpZmljIHJlZiBhcHBsaWVzIHJlbW90ZS4kbmFtZS5wdXNoIGFzIHJlZm1hcCcgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJcm0gLWZyIHNyYyBkc3QgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0ICYmCisJKAorCQljZCBzcmMgJiYKKwkJZ2l0IHB1bGwgLi4vdGVzdHJlcG8gbWFzdGVyICYmCisJCWdpdCBicmFuY2ggbmV4dCAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5kc3QudXJsIC4uL2RzdCAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5kc3QucHVzaCAiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvc3JjLyoiICYmCisJCWdpdCBwdXNoIGRzdCBtYXN0ZXIgJiYKKwkJZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvbWFzdGVyIHwKKwkJc2VkIC1lICJzfHJlZnMvaGVhZHMvfHJlZnMvcmVtb3Rlcy9zcmMvfCIgPi4uL2RzdC9leHBlY3QKKwkpICYmCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvbmV4dCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkJZ2l0IHNob3ctcmVmIHJlZnMvcmVtb3Rlcy9zcmMvbWFzdGVyID5hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZHN0L2V4cGVjdCBkc3QvYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggbm8gcmVtb3RlLiRuYW1lLnB1c2gsIGl0IGlzIG5vdCB1c2VkIGFzIHJlZm1hcCcgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJcm0gLWZyIHNyYyBkc3QgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0ICYmCisJKAorCQljZCBzcmMgJiYKKwkJZ2l0IHB1bGwgLi4vdGVzdHJlcG8gbWFzdGVyICYmCisJCWdpdCBicmFuY2ggbmV4dCAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5kc3QudXJsIC4uL2RzdCAmJgorCQlnaXQgY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCQlnaXQgcHVzaCBkc3QgbWFzdGVyICYmCisJCWdpdCBzaG93LXJlZiByZWZzL2hlYWRzL21hc3RlciA+Li4vZHN0L2V4cGVjdAorCSkgJiYKKwkoCisJCWNkIGRzdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy9uZXh0ICYmCisJCWdpdCBzaG93LXJlZiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGRzdC9leHBlY3QgZHN0L2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG5vIHJlbW90ZS4kbmFtZS5wdXNoLCB1cHN0cmVhbSBtYXBwaW5nIGlzIHVzZWQnICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCXJtIC1mciBzcmMgZHN0ICYmCisJZ2l0IGluaXQgc3JjICYmCisJZ2l0IGluaXQgLS1iYXJlIGRzdCAmJgorCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBwdWxsIC4uL3Rlc3RyZXBvIG1hc3RlciAmJgorCQlnaXQgYnJhbmNoIG5leHQgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUuZHN0LnVybCAuLi9kc3QgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUuZHN0LmZldGNoICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9kc3QvKiIgJiYKKwkJZ2l0IGNvbmZpZyBwdXNoLmRlZmF1bHQgdXBzdHJlYW0gJiYKKworCQlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy90cnVuayAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIGRzdCAmJgorCisJCWdpdCBwdXNoIGRzdCBtYXN0ZXIgJiYKKwkJZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvbWFzdGVyIHwKKwkJc2VkIC1lICJzfHJlZnMvaGVhZHMvbWFzdGVyfHJlZnMvaGVhZHMvdHJ1bmt8IiA+Li4vZHN0L2V4cGVjdAorCSkgJiYKKwkoCisJCWNkIGRzdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvbmV4dCAmJgorCQlnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy90cnVuayA+YWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGRzdC9leHBlY3QgZHN0L2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGRvZXMgbm90IGZvbGxvdyB0YWdzIGJ5IGRlZmF1bHQnICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCXJtIC1mciBzcmMgZHN0ICYmCisJZ2l0IGluaXQgc3JjICYmCisJZ2l0IGluaXQgLS1iYXJlIGRzdCAmJgorCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBwdWxsIC4uL3Rlc3RyZXBvIG1hc3RlciAmJgorCQlnaXQgdGFnIC1tICJhbm5vdGF0ZWQiIHRhZyAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYW5vdGhlciAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImZ1dHVyZSBjb21taXQiICYmCisJCWdpdCB0YWcgLW0gImZ1dHVyZSIgZnV0dXJlICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzL21hc3RlciA+Li4vZXhwZWN0ICYmCisJCWdpdCBwdXNoIC4uL2RzdCBtYXN0ZXIKKwkpICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLWZvbGxvdy10YWdzIG9ubHkgcHVzaGVzIHJlbGV2YW50IHRhZ3MnICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCXJtIC1mciBzcmMgZHN0ICYmCisJZ2l0IGluaXQgc3JjICYmCisJZ2l0IGluaXQgLS1iYXJlIGRzdCAmJgorCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBwdWxsIC4uL3Rlc3RyZXBvIG1hc3RlciAmJgorCQlnaXQgdGFnIC1tICJhbm5vdGF0ZWQiIHRhZyAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYW5vdGhlciAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImZ1dHVyZSBjb21taXQiICYmCisJCWdpdCB0YWcgLW0gImZ1dHVyZSIgZnV0dXJlICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzL21hc3RlciByZWZzL3RhZ3MvdGFnID4uLi9leHBlY3QgJiYKKwkJZ2l0IHB1c2ggLS1mb2xsb3ctdGFncyAuLi9kc3QgbWFzdGVyCisJKSAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1uby10aGluIG11c3QgcHJvZHVjZSBub24tdGhpbiBwYWNrJyAnCisJY2F0ID4+cGF0aDEgPDxcRU9GICYmCitrZWVwIGJhc2UgdmVyc2lvbiBvZiBwYXRoMSBiaWcgZW5vdWdoLCBjb21wYXJlZCB0byB0aGUgbmV3IGNoYW5nZXMKK2xhdGVyLCBpbiBvcmRlciB0byBwYXNzIHNpemUgaGV1cmlzdGljcyBpbgorYnVpbHRpbi9wYWNrLW9iamVjdHMuYzp0cnlfZGVsdGEoKQorRU9GCisJZ2l0IGNvbW1pdCAtYW0gaW5pdGlhbCAmJgorCWdpdCBpbml0IG5vLXRoaW4gJiYKKwlnaXQgLS1naXQtZGlyPW5vLXRoaW4vLmdpdCBjb25maWcgcmVjZWl2ZS51bnBhY2tsaW1pdCAwICYmCisJZ2l0IHB1c2ggbm8tdGhpbi8uZ2l0IHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvZm9vICYmCisJZWNobyBtb2RpZmllZCA+PiBwYXRoMSAmJgorCWdpdCBjb21taXQgLWFtIG1vZGlmaWVkICYmCisJZ2l0IHJlcGFjayAtYWRmICYmCisJcmN2cGNrPSJnaXQgcmVjZWl2ZS1wYWNrIC0tcmVqZWN0LXRoaW4tcGFjay1mb3ItdGVzdGluZyIgJiYKKwlnaXQgcHVzaCAtLW5vLXRoaW4gLS1yZWNlaXZlLXBhY2s9IiRyY3ZwY2siIG5vLXRoaW4vLmdpdCByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIGEgdGFnIHB1c2hlcyB0aGUgdGFnZ2VkIG9iamVjdCcgJworCXJtIC1yZiBkc3QuZ2l0ICYmCisJYmxvYj0kKGVjaG8gdW5yZWZlcmVuY2VkIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJZ2l0IHRhZyAtbSBmb28gdGFnLW9mLWJsb2IgJGJsb2IgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0LmdpdCAmJgorCWdpdCBwdXNoIGRzdC5naXQgdGFnLW9mLWJsb2IgJiYKKwkjIHRoZSByZWNlaXZpbmcgaW5kZXgtcGFjayBzaG91bGQgaGF2ZSBub3RpY2VkCisJIyBhbnkgcHJvYmxlbXMsIGJ1dCB3ZSBkb3VibGUgY2hlY2sKKwllY2hvIHVucmVmZXJlbmNlZCA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1kc3QuZ2l0IGNhdC1maWxlIGJsb2IgdGFnLW9mLWJsb2IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBpbnRvIGJhcmUgcmVzcGVjdHMgY29yZS5sb2dhbGxyZWZ1cGRhdGVzJyAnCisJcm0gLXJmIGRzdC5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0LmdpdCAmJgorCWdpdCAtQyBkc3QuZ2l0IGNvbmZpZyBjb3JlLmxvZ2FsbHJlZnVwZGF0ZXMgdHJ1ZSAmJgorCisJIyBkb3VibGUgcHVzaCB0byB0ZXN0IGJvdGggd2l0aCBhbmQgd2l0aG91dAorCSMgdGhlIGFjdHVhbCBwYWNrIHRyYW5zZmVyCisJZ2l0IHB1c2ggZHN0LmdpdCBtYXN0ZXI6b25lICYmCisJZWNobyAib25lQHswfSBwdXNoIiA+ZXhwZWN0ICYmCisJZ2l0IC1DIGRzdC5naXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJWdzIiBvbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBwdXNoIGRzdC5naXQgbWFzdGVyOnR3byAmJgorCWVjaG8gInR3b0B7MH0gcHVzaCIgPmV4cGVjdCAmJgorCWdpdCAtQyBkc3QuZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWdkICVncyIgdHdvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGludG8gYmFyZSByZXNwZWN0cyBjb3JlLmxvZ2FsbHJlZnVwZGF0ZXMnICcKKwlybSAtcmYgZHN0LmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QuZ2l0ICYmCisJKAorCQljZCBkc3QuZ2l0ICYmCisJCWdpdCBjb25maWcgY29yZS5sb2dhbGxyZWZ1cGRhdGVzIHRydWUgJiYKKworCQkjIGFzIGFib3ZlLCB3ZSBkb3VibGUtZmV0Y2ggdG8gdGVzdCBib3RoCisJCSMgd2l0aCBhbmQgd2l0aG91dCBwYWNrIHRyYW5zZmVyCisJCWdpdCBmZXRjaCAuLiBtYXN0ZXI6b25lICYmCisJCWVjaG8gIm9uZUB7MH0gZmV0Y2ggLi4gbWFzdGVyOm9uZTogc3RvcmluZyBoZWFkIiA+ZXhwZWN0ICYmCisJCWdpdCBsb2cgLWcgLS1mb3JtYXQ9IiVnZCAlZ3MiIG9uZSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgZmV0Y2ggLi4gbWFzdGVyOnR3byAmJgorCQllY2hvICJ0d29AezB9IGZldGNoIC4uIG1hc3Rlcjp0d286IHN0b3JpbmcgaGVhZCIgPmV4cGVjdCAmJgorCQlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJWdzIiB0d28gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoID0gdXBkYXRlSW5zdGVhZCcgJworCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggdXBkYXRlSW5zdGVhZAorCSkgJiYKKwl0ZXN0X2NvbW1pdCB0aGlyZCBwYXRoMiAmJgorCisJIyBUcnkgcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeSB3aXRoIHByaXN0aW5lIHdvcmtpbmcgdHJlZQorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2ggJiYKKwkJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAtLSAmJgorCQlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgLS0gJiYKKwkJdGVzdCB0aGlyZCA9ICIkKGNhdCBwYXRoMikiICYmCisJCXRlc3QgJChnaXQgLUMgLi4gcmV2LXBhcnNlIEhFQUQpID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJKSAmJgorCisJIyBUcnkgcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeSB3aXRoIHdvcmtpbmcgdHJlZSBuZWVkaW5nIGEgcmVmcmVzaAorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCQl0ZXN0ICQoZ2l0IC1DIC4uIHJldi1wYXJzZSBIRUFEXikgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJdGVzdC10b29sIGNobXRpbWUgKzEwMCBwYXRoMQorCSkgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLXEgLS1yZWZyZXNoICYmCisJCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS0gJiYKKwkJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0tICYmCisJCXRlc3RfY21wIC4uL3BhdGgxIHBhdGgxICYmCisJCXRlc3QgdGhpcmQgPSAiJChjYXQgcGF0aDIpIiAmJgorCQl0ZXN0ICQoZ2l0IC1DIC4uIHJldi1wYXJzZSBIRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCSkgJiYKKworCSMgVXBkYXRlIHdoYXQgaXMgdG8gYmUgcHVzaGVkCisJdGVzdF9jb21taXQgZm91cnRoIHBhdGgyICYmCisKKwkjIFRyeSBwdXNoaW5nIGludG8gYSByZXBvc2l0b3J5IHdpdGggYSBkaXJ0eSB3b3JraW5nIHRyZWUKKwkjICgxKSB0aGUgd29ya2luZyB0cmVlIHVwZGF0ZWQKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWVjaG8gY2hhbmdlZCA+cGF0aDEKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQl0ZXN0ICQoZ2l0IC1DIC4uIHJldi1wYXJzZSBIRUFEXikgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCAtLWNhY2hlZCAmJgorCQl0ZXN0IGNoYW5nZWQgPSAiJChjYXQgcGF0aDEpIgorCSkgJiYKKworCSMgKDIpIHRoZSBpbmRleCB1cGRhdGVkCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQllY2hvIGNoYW5nZWQgPnBhdGgxICYmCisJCWdpdCBhZGQgcGF0aDEKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQl0ZXN0ICQoZ2l0IC1DIC4uIHJldi1wYXJzZSBIRUFEXikgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCAmJgorCQl0ZXN0IGNoYW5nZWQgPSAiJChjYXQgcGF0aDEpIgorCSkgJiYKKworCSMgSW50cm9kdWNlIGEgbmV3IGZpbGUgaW4gdGhlIHVwZGF0ZQorCXRlc3RfY29tbWl0IGZpZnRoIHBhdGgzICYmCisKKwkjICgzKSB0aGUgd29ya2luZyB0cmVlIGhhcyBhbiB1bnRyYWNrZWQgZmlsZSB0aGF0IHdvdWxkIGludGVyZmVyZQorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQllY2hvIGNoYW5nZWQgPnBhdGgzCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJdGVzdCAkKGdpdCAtQyAuLiByZXYtcGFyc2UgSEVBRF5eKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQlnaXQgZGlmZiAtLXF1aWV0ICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgLS1jYWNoZWQgJiYKKwkJdGVzdCBjaGFuZ2VkID0gIiQoY2F0IHBhdGgzKSIKKwkpICYmCisKKwkjICg0KSB0aGUgdGFyZ2V0IGNoYW5nZXMgdG8gd2hhdCBnZXRzIHB1c2hlZCBidXQgaXQgc3RpbGwgaXMgYSBjaGFuZ2UKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZWNobyBmaWZ0aCA+cGF0aDMgJiYKKwkJZ2l0IGFkZCBwYXRoMworCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCXRlc3QgJChnaXQgLUMgLi4gcmV2LXBhcnNlIEhFQUReXikgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCAmJgorCQl0ZXN0IGZpZnRoID0gIiQoY2F0IHBhdGgzKSIKKwkpICYmCisKKwkjICg1KSBwdXNoIGludG8gdm9pZAorCXJtIC1mciB2b2lkICYmCisJZ2l0IGluaXQgdm9pZCAmJgorCSgKKwkJY2Qgdm9pZCAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggdXBkYXRlSW5zdGVhZAorCSkgJiYKKwlnaXQgcHVzaCB2b2lkIG1hc3RlciAmJgorCSgKKwkJY2Qgdm9pZCAmJgorCQl0ZXN0ICQoZ2l0IC1DIC4uIHJldi1wYXJzZSBtYXN0ZXIpID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgJiYKKwkJZ2l0IGRpZmYgLS1jYWNoZWQgLS1xdWlldAorCSkgJiYKKworCSMgKDYpIHVwZGF0ZUluc3RlYWQgaW50ZXJ2ZW5lZCBieSBmYXN0LWZvcndhcmQgY2hlY2sKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB2b2lkIG1hc3Rlcl46bWFzdGVyICYmCisJdGVzdCAkKGdpdCAtQyB2b2lkIHJldi1wYXJzZSBIRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICYmCisJZ2l0IC1DIHZvaWQgZGlmZiAtLXF1aWV0ICYmCisJZ2l0IC1DIHZvaWQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZUluc3RlYWQgd2l0aCBwdXNoLXRvLWNoZWNrb3V0IGhvb2snICcKKwlybSAtZnIgdGVzdHJlcG8gJiYKKwlnaXQgaW5pdCB0ZXN0cmVwbyAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHB1bGwgLi4gbWFzdGVyICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRF5eICYmCisJCWdpdCB0YWcgaW5pdGlhbCAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggdXBkYXRlSW5zdGVhZCAmJgorCQl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9wdXNoLXRvLWNoZWNrb3V0IDw8LVxFT0YKKwkJZWNobyA+JjIgdXBkYXRpbmcgZnJvbSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwkJZWNobyA+JjIgdXBkYXRpbmcgdG8gIiQxIgorCisJCWdpdCB1cGRhdGUtaW5kZXggLXEgLS1yZWZyZXNoICYmCisJCWdpdCByZWFkLXRyZWUgLXUgLW0gSEVBRCAiJDEiIHx8IHsKKwkJCXN0YXR1cz0kPworCQkJZWNobyA+JjIgcmVhZC10cmVlIGZhaWxlZAorCQkJZXhpdCAkc3RhdHVzCisJCX0KKwkJRU9GCisJKSAmJgorCisJIyBUcnkgcHVzaGluZyBpbnRvIGEgcHJpc3RpbmUKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgJiYKKwkJZ2l0IGRpZmYgSEVBRCAtLXF1aWV0ICYmCisJCXRlc3QgJChnaXQgLUMgLi4gcmV2LXBhcnNlIEhFQUQpID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJKSAmJgorCisJIyBUcnkgcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeSB3aXRoIGNvbmZsaWN0aW5nIGNoYW5nZQorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJCWVjaG8gY29uZmxpY3RpbmcgPnBhdGgyCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgaW5pdGlhbCkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJdGVzdCBjb25mbGljdGluZyA9ICIkKGNhdCBwYXRoMikiICYmCisJCWdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRAorCSkgJiYKKworCSMgVHJ5IHB1c2hpbmcgaW50byBhIHJlcG9zaXRvcnkgd2l0aCB1bnJlbGF0ZWQgY2hhbmdlCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwkJZWNobyB1bnJlbGF0ZWQgPnBhdGgxICYmCisJCWVjaG8gaXJyZWxldmFudCA+cGF0aDUgJiYKKwkJZ2l0IGFkZCBwYXRoNQorCSkgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCXRlc3QgIiQoY2F0IHBhdGgxKSIgPSB1bnJlbGF0ZWQgJiYKKwkJdGVzdCAiJChjYXQgcGF0aDUpIiA9IGlycmVsZXZhbnQgJiYKKwkJdGVzdCAiJChnaXQgZGlmZiAtLW5hbWUtb25seSAtLWNhY2hlZCBIRUFEKSIgPSBwYXRoNSAmJgorCQl0ZXN0ICQoZ2l0IC1DIC4uIHJldi1wYXJzZSBIRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCSkgJiYKKworCSMgcHVzaCBpbnRvIHZvaWQKKwlybSAtZnIgdm9pZCAmJgorCWdpdCBpbml0IHZvaWQgJiYKKwkoCisJCWNkIHZvaWQgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHVwZGF0ZUluc3RlYWQgJiYKKwkJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcHVzaC10by1jaGVja291dCA8PC1cRU9GCisJCWlmIGdpdCByZXYtcGFyc2UgLS1xdWlldCAtLXZlcmlmeSBIRUFECisJCXRoZW4KKwkJCWhhc19oZWFkPXllcworCQkJZWNobyA+JjIgdXBkYXRpbmcgZnJvbSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwkJZWxzZQorCQkJaGFzX2hlYWQ9bm8KKwkJCWVjaG8gPiYyIHB1c2hpbmcgaW50byB2b2lkCisJCWZpCisJCWVjaG8gPiYyIHVwZGF0aW5nIHRvICIkMSIKKworCQlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaCAmJgorCQljYXNlICIkaGFzX2hlYWQiIGluCisJCXllcykKKwkJCWdpdCByZWFkLXRyZWUgLXUgLW0gSEVBRCAiJDEiIDs7CisJCW5vKQorCQkJZ2l0IHJlYWQtdHJlZSAtdSAtbSAiJDEiIDs7CisJCWVzYWMgfHwgeworCQkJc3RhdHVzPSQ/CisJCQllY2hvID4mMiByZWFkLXRyZWUgZmFpbGVkCisJCQlleGl0ICRzdGF0dXMKKwkJfQorCQlFT0YKKwkpICYmCisKKwlnaXQgcHVzaCB2b2lkIG1hc3RlciAmJgorCSgKKwkJY2Qgdm9pZCAmJgorCQlnaXQgZGlmZiAtLXF1aWV0ICYmCisJCWdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQgJiYKKwkJdGVzdCAkKGdpdCAtQyAuLiByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbnlDdXJyZW50QnJhbmNoIGFuZCB3b3JrdHJlZXMnICcKKwlnaXQgd29ya3RyZWUgYWRkIG5ldy13dCAmJgorCWdpdCBjbG9uZSAuIGNsb25lZCAmJgorCXRlc3RfY29tbWl0IC1DIGNsb25lZCBmaXJzdCAmJgorCXRlc3RfY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggcmVmdXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGNsb25lZCBwdXNoIG9yaWdpbiBIRUFEOm5ldy13dCAmJgorCXRlc3RfY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggdXBkYXRlSW5zdGVhZCAmJgorCWdpdCAtQyBjbG9uZWQgcHVzaCBvcmlnaW4gSEVBRDpuZXctd3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgY2xvbmVkIHB1c2ggLS1kZWxldGUgb3JpZ2luIG5ldy13dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTctcHVzaC1taXJyb3Iuc2ggYi90L3Q1NTE3LXB1c2gtbWlycm9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0ZWRkNTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE3LXB1c2gtbWlycm9yLnNoCkBAIC0wLDAgKzEsMjc4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHVzaGluZyB0byBhIG1pcnJvciByZXBvc2l0b3J5JworCisuIC4vdGVzdC1saWIuc2gKKworRD0kKHB3ZCkKKworaW52ZXJ0ICgpIHsKKwlpZiAiJEAiOyB0aGVuCisJCXJldHVybiAxCisJZWxzZQorCQlyZXR1cm4gMAorCWZpCit9CisKK21rX3JlcG9fcGFpciAoKSB7CisJcm0gLXJmIG1hc3RlciBtaXJyb3IgJiYKKwlta2RpciBtaXJyb3IgJiYKKwkoCisJCWNkIG1pcnJvciAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggd2FybgorCSkgJiYKKwlta2RpciBtYXN0ZXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgcmVtb3RlIGFkZCAkMSB1cCAuLi9taXJyb3IKKwkpCit9CisKKworIyBCUkFOQ0ggdGVzdHMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9yIGNyZWF0ZXMgbmV3IGJyYW5jaGVzJyAnCisKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwCisJKSAmJgorCW1hc3Rlcl9tYXN0ZXI9JChjZCBtYXN0ZXIgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCW1pcnJvcl9tYXN0ZXI9JChjZCBtaXJyb3IgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCXRlc3QgIiRtYXN0ZXJfbWFzdGVyIiA9ICIkbWlycm9yX21hc3RlciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvciB1cGRhdGVzIGV4aXN0aW5nIGJyYW5jaGVzJyAnCisKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWVjaG8gdHdvID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJbWFzdGVyX21hc3Rlcj0kKGNkIG1hc3RlciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJbWlycm9yX21hc3Rlcj0kKGNkIG1pcnJvciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAiJG1hc3Rlcl9tYXN0ZXIiID0gIiRtaXJyb3JfbWFzdGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9yIGZvcmNlIHVwZGF0ZXMgZXhpc3RpbmcgYnJhbmNoZXMnICcKKworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZWNobyB0d28gPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIHR3byAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwCisJKSAmJgorCW1hc3Rlcl9tYXN0ZXI9JChjZCBtYXN0ZXIgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCW1pcnJvcl9tYXN0ZXI9JChjZCBtaXJyb3IgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCXRlc3QgIiRtYXN0ZXJfbWFzdGVyIiA9ICIkbWlycm9yX21hc3RlciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvciByZW1vdmVzIGJyYW5jaGVzJyAnCisKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCBicmFuY2ggcmVtb3ZlIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQlnaXQgYnJhbmNoIC1EIHJlbW92ZSAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwkoCisJCWNkIG1pcnJvciAmJgorCQlpbnZlcnQgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcmVtb3ZlCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9yIGFkZHMsIHVwZGF0ZXMgYW5kIHJlbW92ZXMgYnJhbmNoZXMgdG9nZXRoZXInICcKKworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IGJyYW5jaCByZW1vdmUgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWdpdCBicmFuY2ggLUQgcmVtb3ZlICYmCisJCWdpdCBicmFuY2ggYWRkIG1hc3RlciAmJgorCQllY2hvIHR3byA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gdHdvICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwCisJKSAmJgorCW1hc3Rlcl9tYXN0ZXI9JChjZCBtYXN0ZXIgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCW1hc3Rlcl9hZGQ9JChjZCBtYXN0ZXIgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYWRkKSAmJgorCW1pcnJvcl9tYXN0ZXI9JChjZCBtaXJyb3IgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCW1pcnJvcl9hZGQ9JChjZCBtaXJyb3IgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYWRkKSAmJgorCXRlc3QgIiRtYXN0ZXJfbWFzdGVyIiA9ICIkbWlycm9yX21hc3RlciIgJiYKKwl0ZXN0ICIkbWFzdGVyX2FkZCIgPSAiJG1pcnJvcl9hZGQiICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJaW52ZXJ0IGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL3JlbW92ZQorCSkKKworJworCisKKyMgVEFHIHRlc3RzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvciBjcmVhdGVzIG5ldyB0YWdzJyAnCisKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCB0YWcgLWYgdG1hc3RlciBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJbWFzdGVyX21hc3Rlcj0kKGNkIG1hc3RlciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RtYXN0ZXIpICYmCisJbWlycm9yX21hc3Rlcj0kKGNkIG1pcnJvciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RtYXN0ZXIpICYmCisJdGVzdCAiJG1hc3Rlcl9tYXN0ZXIiID0gIiRtaXJyb3JfbWFzdGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9yIHVwZGF0ZXMgZXhpc3RpbmcgdGFncycgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgdGFnIC1mIHRtYXN0ZXIgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWVjaG8gdHdvID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwkJZ2l0IHRhZyAtZiB0bWFzdGVyIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwltYXN0ZXJfbWFzdGVyPSQoY2QgbWFzdGVyICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL3RhZ3MvdG1hc3RlcikgJiYKKwltaXJyb3JfbWFzdGVyPSQoY2QgbWlycm9yICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL3RhZ3MvdG1hc3RlcikgJiYKKwl0ZXN0ICIkbWFzdGVyX21hc3RlciIgPSAiJG1pcnJvcl9tYXN0ZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3IgZm9yY2UgdXBkYXRlcyBleGlzdGluZyB0YWdzJyAnCisKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCB0YWcgLWYgdG1hc3RlciBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZWNobyB0d28gPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIHR3byAmJgorCQlnaXQgdGFnIC1mIHRtYXN0ZXIgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwkJZ2l0IHRhZyAtZiB0bWFzdGVyIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwltYXN0ZXJfbWFzdGVyPSQoY2QgbWFzdGVyICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL3RhZ3MvdG1hc3RlcikgJiYKKwltaXJyb3JfbWFzdGVyPSQoY2QgbWlycm9yICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL3RhZ3MvdG1hc3RlcikgJiYKKwl0ZXN0ICIkbWFzdGVyX21hc3RlciIgPSAiJG1pcnJvcl9tYXN0ZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3IgcmVtb3ZlcyB0YWdzJyAnCisKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCB0YWcgLWYgdHJlbW92ZSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZ2l0IHRhZyAtZCB0cmVtb3ZlICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwCisJKSAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWludmVydCBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RyZW1vdmUKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3IgYWRkcywgdXBkYXRlcyBhbmQgcmVtb3ZlcyB0YWdzIHRvZ2V0aGVyJyAnCisKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCB0YWcgLWYgdG1hc3RlciBtYXN0ZXIgJiYKKwkJZ2l0IHRhZyAtZiB0cmVtb3ZlIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQlnaXQgdGFnIC1kIHRyZW1vdmUgJiYKKwkJZ2l0IHRhZyB0YWRkIG1hc3RlciAmJgorCQllY2hvIHR3byA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gdHdvICYmCisJCWdpdCB0YWcgLWYgdG1hc3RlciBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJbWFzdGVyX21hc3Rlcj0kKGNkIG1hc3RlciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RtYXN0ZXIpICYmCisJbWFzdGVyX2FkZD0kKGNkIG1hc3RlciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RhZGQpICYmCisJbWlycm9yX21hc3Rlcj0kKGNkIG1pcnJvciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RtYXN0ZXIpICYmCisJbWlycm9yX2FkZD0kKGNkIG1pcnJvciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RhZGQpICYmCisJdGVzdCAiJG1hc3Rlcl9tYXN0ZXIiID0gIiRtaXJyb3JfbWFzdGVyIiAmJgorCXRlc3QgIiRtYXN0ZXJfYWRkIiA9ICIkbWlycm9yX2FkZCIgJiYKKwkoCisJCWNkIG1pcnJvciAmJgorCQlpbnZlcnQgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90cmVtb3ZlCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZS5mb28ubWlycm9yIGFkZHMgYW5kIHJlbW92ZXMgYnJhbmNoZXMnICcKKworCW1rX3JlcG9fcGFpciAtLW1pcnJvciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IGJyYW5jaCBrZWVwIG1hc3RlciAmJgorCQlnaXQgYnJhbmNoIHJlbW92ZSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggdXAgJiYKKwkJZ2l0IGJyYW5jaCAtRCByZW1vdmUgJiYKKwkJZ2l0IHB1c2ggdXAKKwkpICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMva2VlcCAmJgorCQlpbnZlcnQgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcmVtb3ZlCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZS5mb28ubWlycm9yPW5vIGhhcyBubyBlZmZlY3QnICcKKworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudXAubWlycm9yIG5vICYmCisJCWdpdCBicmFuY2gga2VlcCBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZ2l0IGJyYW5jaCAtRCBrZWVwICYmCisJCWdpdCBwdXNoIHVwIDoKKwkpICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMva2VlcAorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIG1pcnJvcmVkIHJlcG9zaXRvcnkgd2l0aCByZWZzcGVjIGZhaWxzJyAnCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS51cC5taXJyb3IgdHJ1ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB1cCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxOC1mZXRjaC1leGl0LXN0YXR1cy5zaCBiL3QvdDU1MTgtZmV0Y2gtZXhpdC1zdGF0dXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzIwNjBiYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTgtZmV0Y2gtZXhpdC1zdGF0dXMuc2gKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBEbWl0cnkgVi4gTGV2aW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZmV0Y2ggZXhpdCBzdGF0dXMgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJZWNobyBzaWRlID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBzaWRlICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBuZXh0ID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBuZXh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1mYXN0LWZvcndhcmQgZmV0Y2gnICcKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAuIG1hc3RlcjpzaWRlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yY2VkIHVwZGF0ZScgJworCisJZ2l0IGZldGNoIC4gK21hc3RlcjpzaWRlCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTE5LXB1c2gtYWx0ZXJuYXRlcy5zaCBiL3QvdDU1MTktcHVzaC1hbHRlcm5hdGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjExZmNkMzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE5LXB1c2gtYWx0ZXJuYXRlcy5zaApAQCAtMCwwICsxLDE0MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3B1c2ggdG8gYSByZXBvc2l0b3J5IHRoYXQgYm9ycm93cyBmcm9tIGVsc2V3aGVyZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIGFsaWNlLXB1YiAmJgorCSgKKwkJY2QgYWxpY2UtcHViICYmCisJCUdJVF9ESVI9LiBnaXQgaW5pdAorCSkgJiYKKwlta2RpciBhbGljZS13b3JrICYmCisJKAorCQljZCBhbGljZS13b3JrICYmCisJCWdpdCBpbml0ICYmCisJCT5maWxlICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwkJZ2l0IHB1c2ggLi4vYWxpY2UtcHViIG1hc3RlcgorCSkgJiYKKworCSMgUHJvamVjdCBCb2IgaXMgYSBmb3JrIG9mIHByb2plY3QgQWxpY2UKKwlta2RpciBib2ItcHViICYmCisJKAorCQljZCBib2ItcHViICYmCisJCUdJVF9ESVI9LiBnaXQgaW5pdCAmJgorCQlta2RpciAtcCBvYmplY3RzL2luZm8gJiYKKwkJZWNobyAuLi8uLi9hbGljZS1wdWIvb2JqZWN0cyA+b2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKwkpICYmCisJZ2l0IGNsb25lIGFsaWNlLXB1YiBib2Itd29yayAmJgorCSgKKwkJY2QgYm9iLXdvcmsgJiYKKwkJZ2l0IHB1c2ggLi4vYm9iLXB1YiBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWNlIHdvcmtzIGFuZCBwdXNoZXMnICcKKwkoCisJCWNkIGFsaWNlLXdvcmsgJiYKKwkJZWNobyBtb3JlID5maWxlICYmCisJCWdpdCBjb21taXQgLWEgLW0gc2Vjb25kICYmCisJCWdpdCBwdXNoIC4uL2FsaWNlLXB1YiA6CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdib2IgZmV0Y2hlcyBmcm9tIGFsaWNlLCB3b3JrcyBhbmQgcHVzaGVzJyAnCisJKAorCQkjIEJvYiBhY3F1aXJlcyB3aGF0IEFsaWNlIGRpZCBpbiBoaXMgd29yayB0cmVlIGZpcnN0LgorCQkjIEV2ZW4gdGhvdWdoIHRoZXNlIG9iamVjdHMgYXJlIG5vdCBkaXJlY3RseSBpbgorCQkjIHRoZSBwdWJsaWMgcmVwb3NpdG9yeSBvZiBCb2IsIHRoaXMgcHVzaCBkb2VzIG5vdAorCQkjIG5lZWQgdG8gc2VuZCB0aGUgY29tbWl0IEJvYiByZWNlaXZlZCBmcm9tIEFsaWNlCisJCSMgdG8gaGlzIHB1YmxpYyByZXBvc2l0b3J5LCBhcyBhbGwgdGhlIG9iamVjdCBBbGljZQorCQkjIGhhcyBhdCBoZXIgcHVibGljIHJlcG9zaXRvcnkgYXJlIGF2YWlsYWJsZSB0byBpdAorCQkjIHZpYSBpdHMgYWx0ZXJuYXRlcy4KKwkJY2QgYm9iLXdvcmsgJiYKKwkJZ2l0IHB1bGwgLi4vYWxpY2UtcHViIG1hc3RlciAmJgorCQllY2hvIG1vcmUgYm9iID5maWxlICYmCisJCWdpdCBjb21taXQgLWEgLW0gdGhpcmQgJiYKKwkJZ2l0IHB1c2ggLi4vYm9iLXB1YiA6CisJKSAmJgorCisJIyBDaGVjayB0aGF0IHRoZSBzZWNvbmQgY29tbWl0IGJ5IEFsaWNlIGlzIG5vdCBzZW50CisJIyB0byAuLi9ib2ItcHViCisJKAorCQljZCBib2ItcHViICYmCisJCXNlY29uZD0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJCXJtIC1mIG9iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtdCAkc2Vjb25kICYmCisJCWVjaG8gLi4vLi4vYWxpY2UtcHViL29iamVjdHMgPm9iamVjdHMvaW5mby9hbHRlcm5hdGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbi11cCBpbiBjYXNlIHRoZSBwcmV2aW91cyBmYWlsZWQnICcKKwkoCisJCWNkIGJvYi1wdWIgJiYKKwkJZWNobyAuLi8uLi9hbGljZS1wdWIvb2JqZWN0cyA+b2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWNlIHdvcmtzIGFuZCBwdXNoZXMgYWdhaW4nICcKKwkoCisJCSMgQWxpY2UgZG9lcyBub3QgY2FyZSB3aGF0IEJvYiBkb2VzLiAgU2hlIGRvZXMgbm90CisJCSMgZXZlbiBoYXZlIHRvIGJlIGF3YXJlIG9mIGhpcyBleGlzdGVuY2UuICBTaGUganVzdAorCQkjIGtlZXBzIHdvcmtpbmcgYW5kIHB1c2hpbmcKKwkJY2QgYWxpY2Utd29yayAmJgorCQllY2hvIG1vcmUgYWxpY2UgPmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBmb3VydGggJiYKKwkJZ2l0IHB1c2ggLi4vYWxpY2UtcHViIDoKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JvYiB3b3JrcyBhbmQgcHVzaGVzJyAnCisJKAorCQkjIFRoaXMgdGltZSBCb2IgZG9lcyBub3QgcHVsbCBmcm9tIEFsaWNlLCBhbmQKKwkJIyB0aGUgbWFzdGVyIGJyYW5jaCBhdCBoZXIgcHVibGljIHJlcG9zaXRvcnkgcG9pbnRzCisJCSMgYXQgYSBjb21taXQgQm9iIGRvZXMgbm90IGtub3cgYWJvdXQuICBUaGlzIHNob3VsZAorCQkjIG5vdCBwcmV2ZW50IHRoZSBwdXNoIGJ5IEJvYiBmcm9tIHN1Y2NlZWRpbmcuCisJCWNkIGJvYi13b3JrICYmCisJCWVjaG8geWV0IG1vcmUgYm9iID5maWxlICYmCisJCWdpdCBjb21taXQgLWEgLW0gZmlmdGggJiYKKwkJZ2l0IHB1c2ggLi4vYm9iLXB1YiA6CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGljZSB3b3JrcyBhbmQgcHVzaGVzIHlldCBhZ2FpbicgJworCSgKKwkJIyBBbGljZSBkb2VzIG5vdCBjYXJlIHdoYXQgQm9iIGRvZXMuICBTaGUgZG9lcyBub3QKKwkJIyBldmVuIGhhdmUgdG8gYmUgYXdhcmUgb2YgaGlzIGV4aXN0ZW5jZS4gIFNoZSBqdXN0CisJCSMga2VlcHMgd29ya2luZyBhbmQgcHVzaGluZworCQljZCBhbGljZS13b3JrICYmCisJCWVjaG8gbW9yZSBhbmQgbW9yZSBhbGljZSA+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tIHNpeHRoLjEgJiYKKwkJZWNobyBtb3JlIGFuZCBtb3JlIGFsaWNlID4+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tIHNpeHRoLjIgJiYKKwkJZWNobyBtb3JlIGFuZCBtb3JlIGFsaWNlID4+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tIHNpeHRoLjMgJiYKKwkJZ2l0IHB1c2ggLi4vYWxpY2UtcHViIDoKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JvYiB3b3JrcyBhbmQgcHVzaGVzIGFnYWluJyAnCisJKAorCQljZCBhbGljZS1wdWIgJiYKKwkJZ2l0IGNhdC1maWxlIGNvbW1pdCBtYXN0ZXIgPi4uL2JvYi13b3JrL2NvbW1pdAorCSkgJiYKKwkoCisJCSMgVGhpcyB0aW1lIEJvYiBkb2VzIG5vdCBwdWxsIGZyb20gQWxpY2UsIGFuZAorCQkjIHRoZSBtYXN0ZXIgYnJhbmNoIGF0IGhlciBwdWJsaWMgcmVwb3NpdG9yeSBwb2ludHMKKwkJIyBhdCBhIGNvbW1pdCBCb2IgZG9lcyBub3QgZnVsbHkga25vdyBhYm91dCwgYnV0CisJCSMgaGUgaGFwcGVucyB0byBoYXZlIHRoZSBjb21taXQgb2JqZWN0IChidXQgbm90IHRoZQorCQkjIG5lY2Vzc2FyeSB0cmVlKSBpbiBoaXMgcmVwb3NpdG9yeSBmcm9tIEFsaWNlLgorCQkjIFRoaXMgc2hvdWxkIG5vdCBwcmV2ZW50IHRoZSBwdXNoIGJ5IEJvYiBmcm9tCisJCSMgc3VjY2VlZGluZy4KKwkJY2QgYm9iLXdvcmsgJiYKKwkJZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyBjb21taXQgJiYKKwkJZWNobyBldmVuIG1vcmUgYm9iID5maWxlICYmCisJCWdpdCBjb21taXQgLWEgLW0gc2V2ZW50aCAmJgorCQlnaXQgcHVzaCAuLi9ib2ItcHViIDoKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyMC1wdWxsLnNoIGIvdC90NTUyMC1wdWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3NTM1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTIwLXB1bGwuc2gKQEAgLTAsMCArMSw4MjIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdWxsaW5nIGludG8gdm9pZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK21vZGlmeSAoKSB7CisJc2VkIC1lICIkMSIgIiQyIiA+IiQyLngiICYmCisJbXYgIiQyLngiICIkMiIKK30KKwordGVzdF9wdWxsX2F1dG9zdGFzaCAoKSB7CisJZXhwZWN0X3BhcmVudF9udW09IiQxIiAmJgorCXNoaWZ0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcmViYXNlICYmCisJZWNobyBkaXJ0eSA+bmV3X2ZpbGUgJiYKKwlnaXQgYWRkIG5ld19maWxlICYmCisJZ2l0IHB1bGwgIiRAIiAuIGNvcHkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4iJGV4cGVjdF9wYXJlbnRfbnVtIiBjb3B5ICYmCisJZWNobyBkaXJ0eSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG5ld19maWxlICYmCisJZWNobyAibW9kaWZpZWQgYWdhaW4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorfQorCit0ZXN0X3B1bGxfYXV0b3N0YXNoX2ZhaWwgKCkgeworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgorCWVjaG8gZGlydHkgPm5ld19maWxlICYmCisJZ2l0IGFkZCBuZXdfZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsICIkQCIgLiBjb3B5IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiXCh1bmNvbW1pdHRlZCBjaGFuZ2VzLlwpXHxcKG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlwpIiBlcnIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBmaWxlID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBvcmlnaW5hbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIGludG8gdm9pZCcgJworCWdpdCBpbml0IGNsb25lZCAmJgorCSgKKwkJY2QgY2xvbmVkICYmCisJCWdpdCBwdWxsIC4uCisJKSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGZpbGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBjbG9uZWQvZmlsZSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmVkL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBpbnRvIHZvaWQgdXNpbmcgbWFzdGVyOm1hc3RlcicgJworCWdpdCBpbml0IGNsb25lZC11aG8gJiYKKwkoCisJCWNkIGNsb25lZC11aG8gJiYKKwkJZ2l0IHB1bGwgLi4gbWFzdGVyOm1hc3RlcgorCSkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgY2xvbmVkLXVoby9maWxlICYmCisJdGVzdF9jbXAgZmlsZSBjbG9uZWQtdWhvL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBpbnRvIHZvaWQgZG9lcyBub3Qgb3ZlcndyaXRlIHVudHJhY2tlZCBmaWxlcycgJworCWdpdCBpbml0IGNsb25lZC11bnRyYWNrZWQgJiYKKwkoCisJCWNkIGNsb25lZC11bnRyYWNrZWQgJiYKKwkJZWNobyB1bnRyYWNrZWQgPmZpbGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLi4gbWFzdGVyICYmCisJCWVjaG8gdW50cmFja2VkID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgaW50byB2b2lkIGRvZXMgbm90IG92ZXJ3cml0ZSBzdGFnZWQgZmlsZXMnICcKKwlnaXQgaW5pdCBjbG9uZWQtc3RhZ2VkLWNvbGxpZGluZyAmJgorCSgKKwkJY2QgY2xvbmVkLXN0YWdlZC1jb2xsaWRpbmcgJiYKKwkJZWNobyAiYWx0ZXJuYXRlIGNvbnRlbnQiID5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuLiBtYXN0ZXIgJiYKKwkJZWNobyAiYWx0ZXJuYXRlIGNvbnRlbnQiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwkJZ2l0IGNhdC1maWxlIGJsb2IgOmZpbGUgPmZpbGUuaW5kZXggJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGZpbGUuaW5kZXgKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgaW50byB2b2lkIGRvZXMgbm90IHJlbW92ZSBuZXcgc3RhZ2VkIGZpbGVzJyAnCisJZ2l0IGluaXQgY2xvbmVkLXN0YWdlZC1uZXcgJiYKKwkoCisJCWNkIGNsb25lZC1zdGFnZWQtbmV3ICYmCisJCWVjaG8gIm5ldyB0cmFja2VkIGZpbGUiID5uZXdmaWxlICYmCisJCWdpdCBhZGQgbmV3ZmlsZSAmJgorCQlnaXQgcHVsbCAuLiBtYXN0ZXIgJiYKKwkJZWNobyAibmV3IHRyYWNrZWQgZmlsZSIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgbmV3ZmlsZSAmJgorCQlnaXQgY2F0LWZpbGUgYmxvYiA6bmV3ZmlsZSA+bmV3ZmlsZS5pbmRleCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgbmV3ZmlsZS5pbmRleAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBpbnRvIHZvaWQgbXVzdCBub3QgY3JlYXRlIGFuIG9jdG9wdXMnICcKKwlnaXQgaW5pdCBjbG9uZWQtb2N0b3B1cyAmJgorCSgKKwkJY2QgY2xvbmVkLW9jdG9wdXMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLi4gbWFzdGVyIG1hc3RlciAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC4gYXMgYSByZW1vdGUnICcKKwlnaXQgYnJhbmNoIGNvcHkgbWFzdGVyICYmCisJZ2l0IGNvbmZpZyBicmFuY2guY29weS5yZW1vdGUgLiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmNvcHkubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwllY2hvIHVwZGF0ZWQgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHVwZGF0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgY29weSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwlnaXQgcHVsbCAmJgorCWVjaG8gdXBkYXRlZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwlnaXQgcmVmbG9nIC0xID5yZWZsb2cuYWN0dWFsICYmCisJc2VkICJzL15bMC05YS1mXVswLTlhLWZdKi9PQkpJRC8iIHJlZmxvZy5hY3R1YWwgPnJlZmxvZy5mdXp6eSAmJgorCWVjaG8gIk9CSklEIEhFQURAezB9OiBwdWxsOiBGYXN0LWZvcndhcmQiID5yZWZsb2cuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCByZWZsb2cuZXhwZWN0ZWQgcmVmbG9nLmZ1enp5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoZSBkZWZhdWx0IHJlbW90ZSAuIHNob3VsZCBub3QgYnJlYWsgZXhwbGljaXQgcHVsbCcgJworCWdpdCBjaGVja291dCAtYiBzZWNvbmQgbWFzdGVyXiAmJgorCWVjaG8gbW9kaWZpZWQgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG1vZGlmaWVkICYmCisJZ2l0IGNoZWNrb3V0IGNvcHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCWdpdCBwdWxsIC4gc2Vjb25kICYmCisJZWNobyBtb2RpZmllZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwlnaXQgcmVmbG9nIC0xID5yZWZsb2cuYWN0dWFsICYmCisJc2VkICJzL15bMC05YS1mXVswLTlhLWZdKi9PQkpJRC8iIHJlZmxvZy5hY3R1YWwgPnJlZmxvZy5mdXp6eSAmJgorCWVjaG8gIk9CSklEIEhFQURAezB9OiBwdWxsIC4gc2Vjb25kOiBGYXN0LWZvcndhcmQiID5yZWZsb2cuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCByZWZsb2cuZXhwZWN0ZWQgcmVmbG9nLmZ1enp5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgd2lsZGNhcmQgc3BlYyBkb2VzIG5vdCBtYXRjaCBhbnkgcmVmcycgJworCWdpdCBjaGVja291dCAtYiB0ZXN0IGNvcHleICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSAmJiBnaXQgYnJhbmNoIC1EIHRlc3QiICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4gInJlZnMvbm9uZXhpc3RpbmcxLyo6cmVmcy9ub25leGlzdGluZzIvKiIgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIiBlcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIGlmIG5vIGJyYW5jaGVzIHNwZWNpZmllZCB3aXRoIG5vbi1kZWZhdWx0IHJlbW90ZScgJworCWdpdCByZW1vdGUgYWRkIHRlc3RfcmVtb3RlIC4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZW1vdGUgcmVtb3ZlIHRlc3RfcmVtb3RlIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0IGNvcHleICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSAmJiBnaXQgYnJhbmNoIC1EIHRlc3QiICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC50ZXN0LnJlbW90ZSBvcmlnaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCB0ZXN0X3JlbW90ZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZSIgZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBpZiBub3Qgb24gYSBicmFuY2gnICcKKwlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gLiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlbW90ZSByZW1vdmUgb3JpZ2luIiAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkiICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAibm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaCIgZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBpZiBubyBjb25maWd1cmF0aW9uIGZvciBjdXJyZW50IGJyYW5jaCcgJworCWdpdCByZW1vdGUgYWRkIHRlc3RfcmVtb3RlIC4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZW1vdGUgcmVtb3ZlIHRlc3RfcmVtb3RlIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0IGNvcHleICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSAmJiBnaXQgYnJhbmNoIC1EIHRlc3QiICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnRlc3QucmVtb3RlIHRlc3RfcmVtb3RlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAibm8gdHJhY2tpbmcgaW5mb3JtYXRpb24iIGVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1hbGw6IGZhaWwgaWYgbm8gY29uZmlndXJhdGlvbiBmb3IgY3VycmVudCBicmFuY2gnICcKKwlnaXQgcmVtb3RlIGFkZCB0ZXN0X3JlbW90ZSAuICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVtb3RlIHJlbW92ZSB0ZXN0X3JlbW90ZSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCBjb3B5XiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0ZXN0IiAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC50ZXN0LnJlbW90ZSB0ZXN0X3JlbW90ZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLWFsbCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIiBlcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIGlmIHVwc3RyZWFtIGJyYW5jaCBkb2VzIG5vdCBleGlzdCcgJworCWdpdCBjaGVja291dCAtYiB0ZXN0IGNvcHleICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSAmJiBnaXQgYnJhbmNoIC1EIHRlc3QiICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnRlc3QucmVtb3RlIC4gJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gudGVzdC5tZXJnZSByZWZzL2hlYWRzL25vbmV4aXN0aW5nICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAibm8gc3VjaCByZWYgd2FzIGZldGNoZWQiIGVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgdGhlIGluZGV4IGhhcyB1bnJlc29sdmVkIGVudHJpZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgdGhpcmQgc2Vjb25kXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0aGlyZCIgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJdGVzdF9jb21taXQgbW9kaWZpZWQyIGZpbGUgJiYKKwlnaXQgbHMtZmlsZXMgLXUgPnVubWVyZ2VkICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHVubWVyZ2VkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLiBzZWNvbmQgJiYKKwlnaXQgbHMtZmlsZXMgLXUgPnVubWVyZ2VkICYmCisJdGVzdF9maWxlX25vdF9lbXB0eSB1bm1lcmdlZCAmJgorCWNwIGZpbGUgZXhwZWN0ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuIHNlY29uZCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIlB1bGxpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIiBlcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGxzLWZpbGVzIC11ID51bm1lcmdlZCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB1bm1lcmdlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4gc2Vjb25kIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIiBlcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZm9yd2FyZHMgd29ya2luZyB0cmVlIGlmIGJyYW5jaCBoZWFkIGlzIHVwZGF0ZWQnICcKKwlnaXQgY2hlY2tvdXQgLWIgdGhpcmQgc2Vjb25kXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0aGlyZCIgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJZ2l0IHB1bGwgLiBzZWNvbmQ6dGhpcmQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkIiBlcnIgJiYKKwllY2hvIG1vZGlmaWVkID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCXRlc3RfY21wX3JldiB0aGlyZCBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1mb3J3YXJkIGZhaWxzIHdpdGggY29uZmxpY3Rpbmcgd29yayB0cmVlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRoaXJkIHNlY29uZF4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBjb3B5ICYmIGdpdCBicmFuY2ggLUQgdGhpcmQiICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCWVjaG8gY29uZmxpY3QgPmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuIHNlY29uZDp0aGlyZCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUiIGVyciAmJgorCWVjaG8gY29uZmxpY3QgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJdGVzdF9jbXBfcmV2IHRoaXJkIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZScgJworCWdpdCBicmFuY2ggdG8tcmViYXNlICYmCisJZWNobyBtb2RpZmllZCBhZ2FpbiA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gZmlsZSBmaWxlICYmCisJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgorCWVjaG8gbmV3ID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgZmlsZSIgJiYKKwlnaXQgdGFnIGJlZm9yZS1yZWJhc2UgJiYKKwlnaXQgcHVsbCAtLXJlYmFzZSAuIGNvcHkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4gY29weSAmJgorCWVjaG8gbmV3ID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIChtZXJnZSkgZmFzdCBmb3J3YXJkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcmViYXNlICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZmICYmCisJZWNobyBhbm90aGVyIG1vZGlmaWNhdGlvbiA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQgZmlsZSAmJgorCisJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgorCWdpdCAtYyByZWJhc2UuYmFja2VuZD1tZXJnZSBwdWxsIC0tcmViYXNlIC4gZmYgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCBmZiAmJgorCisJIyBUaGUgYWJvdmUgb25seSB2YWxpZGF0ZXMgdGhlIHJlc3VsdC4gIERpZCB3ZSBhY3R1YWxseSBieXBhc3MgcmViYXNlPworCWdpdCByZWZsb2cgLTEgPnJlZmxvZy5hY3R1YWwgJiYKKwlzZWQgInMvXlswLTlhLWZdWzAtOWEtZl0qL09CSklELyIgcmVmbG9nLmFjdHVhbCA+cmVmbG9nLmZ1enp5ICYmCisJZWNobyAiT0JKSUQgSEVBREB7MH06IHB1bGwgLS1yZWJhc2UgLiBmZjogRmFzdC1mb3J3YXJkIiA+cmVmbG9nLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgcmVmbG9nLmV4cGVjdGVkIHJlZmxvZy5mdXp6eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZSAoYW0pIGZhc3QgZm9yd2FyZCcgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgorCisJZ2l0IC1jIHJlYmFzZS5iYWNrZW5kPWFwcGx5IHB1bGwgLS1yZWJhc2UgLiBmZiAmJgorCXRlc3RfY21wX3JldiBIRUFEIGZmICYmCisKKwkjIFRoZSBhYm92ZSBvbmx5IHZhbGlkYXRlcyB0aGUgcmVzdWx0LiAgRGlkIHdlIGFjdHVhbGx5IGJ5cGFzcyByZWJhc2U/CisJZ2l0IHJlZmxvZyAtMSA+cmVmbG9nLmFjdHVhbCAmJgorCXNlZCAicy9eWzAtOWEtZl1bMC05YS1mXSovT0JKSUQvIiByZWZsb2cuYWN0dWFsID5yZWZsb2cuZnV6enkgJiYKKwllY2hvICJPQkpJRCBIRUFEQHswfTogcHVsbCAtLXJlYmFzZSAuIGZmOiBGYXN0LWZvcndhcmQiID5yZWZsb2cuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCByZWZsb2cuZXhwZWN0ZWQgcmVmbG9nLmZ1enp5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIC0tYXV0b3N0YXNoIGZhc3QgZm9yd2FyZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiCisJCWdpdCByZXNldCAtLWhhcmQKKwkJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZQorCQlnaXQgYnJhbmNoIC1EIHRvLXJlYmFzZS1mZgorCQlnaXQgYnJhbmNoIC1EIGJlaGluZCIgJiYKKwlnaXQgYnJhbmNoIGJlaGluZCAmJgorCWdpdCBjaGVja291dCAtYiB0by1yZWJhc2UtZmYgJiYKKwllY2hvIGFub3RoZXIgbW9kaWZpY2F0aW9uID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gbW9kICYmCisKKwlnaXQgY2hlY2tvdXQgYmVoaW5kICYmCisJZWNobyBkaXJ0eSA+ZmlsZSAmJgorCWdpdCBwdWxsIC0tcmViYXNlIC0tYXV0b3N0YXNoIC4gdG8tcmViYXNlLWZmICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgdG8tcmViYXNlLWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIHdpdGggY29uZmxpY3RzIHNob3dzIGFkdmljZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0OyBnaXQgY2hlY2tvdXQgLWYgdG8tcmViYXNlIiAmJgorCWdpdCBjaGVja291dCAtYiBzZXEgJiYKKwl0ZXN0X3NlcSA1ID5zZXEudHh0ICYmCisJZ2l0IGFkZCBzZXEudHh0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIHNlcS50eHQiICYmCisJZWNobyA2ID4+c2VxLnR4dCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkFwcGVuZCB0byBzZXEudHh0IiBzZXEudHh0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHdpdGgtY29uZmxpY3RzIEhFQUReICYmCisJZWNobyBjb25mbGljdGluZyA+PnNlcS50eHQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJDcmVhdGUgY29uZmxpY3QiIHNlcS50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZSAuIHNlcSAyPmVyciA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiUmVzb2x2ZSBhbGwgY29uZmxpY3RzIG1hbnVhbGx5IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIC0tcmViYXNlIHNob3dzIGFkdmljZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0OyBnaXQgY2hlY2tvdXQgLWYgdG8tcmViYXNlIiAmJgorCWdpdCBjaGVja291dCAtYiBkaXZlcmdpbmcgJiYKKwl0ZXN0X2NvbW1pdCBhdHRyaWJ1dGVzIC5naXRhdHRyaWJ1dGVzICIqIHRleHQ9YXV0byIgYXR0cnMgJiYKKwlzaGExPSIkKHByaW50ZiAiMVxcclxcbiIgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAwNjQ0ICRzaGExIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIHYxLXdpdGgtY3IgJiYKKwkjIGZvcmNlIGNoZWNrb3V0IGJlY2F1c2UgYGdpdCByZXNldCAtLWhhcmRgIHdpbGwgbm90IGxlYXZlIGNsZWFuIGBmaWxlYAorCWdpdCBjaGVja291dCAtZiAtYiBmYWlscy10by1yZWJhc2UgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCB2Mi13aXRob3V0LWNyIGZpbGUgIjIiIGZpbGUyLWxmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1yZWJhc2UgLiBkaXZlcmdpbmcgMj5lcnIgPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIlJlc29sdmUgYWxsIGNvbmZsaWN0cyBtYW51YWxseSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIGZhaWxzIHdpdGggbXVsdGlwbGUgYnJhbmNoZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1yZWJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZSAuIGNvcHkgbWFzdGVyIDI+ZXJyICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgYmVmb3JlLXJlYmFzZSAmJgorCXRlc3RfaTE4bmdyZXAgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcyIgZXJyICYmCisJZWNobyBtb2RpZmllZCA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2Ugc3VjY2VlZHMgd2l0aCBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgcmViYXNlLmF1dG9zdGFzaCBzZXQnICcKKwl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwl0ZXN0X3B1bGxfYXV0b3N0YXNoIDEgLS1yZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSAtLWF1dG9zdGFzaCAmIHJlYmFzZS5hdXRvc3Rhc2g9dHJ1ZScgJworCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCXRlc3RfcHVsbF9hdXRvc3Rhc2ggMSAtLXJlYmFzZSAtLWF1dG9zdGFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIC0tYXV0b3N0YXNoICYgcmViYXNlLmF1dG9zdGFzaD1mYWxzZScgJworCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggZmFsc2UgJiYKKwl0ZXN0X3B1bGxfYXV0b3N0YXNoIDEgLS1yZWJhc2UgLS1hdXRvc3Rhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSAtLWF1dG9zdGFzaCAmIHJlYmFzZS5hdXRvc3Rhc2ggdW5zZXQnICcKKwl0ZXN0X3VuY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggJiYKKwl0ZXN0X3B1bGxfYXV0b3N0YXNoIDEgLS1yZWJhc2UgLS1hdXRvc3Rhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSAtLW5vLWF1dG9zdGFzaCAmIHJlYmFzZS5hdXRvc3Rhc2g9dHJ1ZScgJworCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCXRlc3RfcHVsbF9hdXRvc3Rhc2hfZmFpbCAtLXJlYmFzZSAtLW5vLWF1dG9zdGFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIC0tbm8tYXV0b3N0YXNoICYgcmViYXNlLmF1dG9zdGFzaD1mYWxzZScgJworCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggZmFsc2UgJiYKKwl0ZXN0X3B1bGxfYXV0b3N0YXNoX2ZhaWwgLS1yZWJhc2UgLS1uby1hdXRvc3Rhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSAtLW5vLWF1dG9zdGFzaCAmIHJlYmFzZS5hdXRvc3Rhc2ggdW5zZXQnICcKKwl0ZXN0X3VuY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggJiYKKwl0ZXN0X3B1bGxfYXV0b3N0YXNoX2ZhaWwgLS1yZWJhc2UgLS1uby1hdXRvc3Rhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCBzdWNjZWVkcyB3aXRoIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBtZXJnZS5hdXRvc3Rhc2ggc2V0JyAnCisJdGVzdF9jb25maWcgbWVyZ2UuYXV0b3N0YXNoIHRydWUgJiYKKwl0ZXN0X3B1bGxfYXV0b3N0YXNoIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLWF1dG9zdGFzaCAmIG1lcmdlLmF1dG9zdGFzaD10cnVlJyAnCisJdGVzdF9jb25maWcgbWVyZ2UuYXV0b3N0YXNoIHRydWUgJiYKKwl0ZXN0X3B1bGxfYXV0b3N0YXNoIDIgLS1hdXRvc3Rhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLWF1dG9zdGFzaCAmIG1lcmdlLmF1dG9zdGFzaD1mYWxzZScgJworCXRlc3RfY29uZmlnIG1lcmdlLmF1dG9zdGFzaCBmYWxzZSAmJgorCXRlc3RfcHVsbF9hdXRvc3Rhc2ggMiAtLWF1dG9zdGFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tYXV0b3N0YXNoICYgbWVyZ2UuYXV0b3N0YXNoIHVuc2V0JyAnCisJdGVzdF91bmNvbmZpZyBtZXJnZS5hdXRvc3Rhc2ggJiYKKwl0ZXN0X3B1bGxfYXV0b3N0YXNoIDIgLS1hdXRvc3Rhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLW5vLWF1dG9zdGFzaCAmIG1lcmdlLmF1dG9zdGFzaD10cnVlJyAnCisJdGVzdF9jb25maWcgbWVyZ2UuYXV0b3N0YXNoIHRydWUgJiYKKwl0ZXN0X3B1bGxfYXV0b3N0YXNoX2ZhaWwgLS1uby1hdXRvc3Rhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLW5vLWF1dG9zdGFzaCAmIG1lcmdlLmF1dG9zdGFzaD1mYWxzZScgJworCXRlc3RfY29uZmlnIG1lcmdlLmF1dG9zdGFzaCBmYWxzZSAmJgorCXRlc3RfcHVsbF9hdXRvc3Rhc2hfZmFpbCAtLW5vLWF1dG9zdGFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tbm8tYXV0b3N0YXNoICYgbWVyZ2UuYXV0b3N0YXNoIHVuc2V0JyAnCisJdGVzdF91bmNvbmZpZyBtZXJnZS5hdXRvc3Rhc2ggJiYKKwl0ZXN0X3B1bGxfYXV0b3N0YXNoX2ZhaWwgLS1uby1hdXRvc3Rhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbC5yZWJhc2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1yZWJhc2UgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSB0cnVlICYmCisJZ2l0IHB1bGwgLiBjb3B5ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReIGNvcHkgJiYKKwllY2hvIG5ldyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tYXV0b3N0YXNoICYgcHVsbC5yZWJhc2U9dHJ1ZScgJworCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHRydWUgJiYKKwl0ZXN0X3B1bGxfYXV0b3N0YXNoIDEgLS1hdXRvc3Rhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLW5vLWF1dG9zdGFzaCAmIHB1bGwucmViYXNlPXRydWUnICcKKwl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSB0cnVlICYmCisJdGVzdF9wdWxsX2F1dG9zdGFzaF9mYWlsIC0tbm8tYXV0b3N0YXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaC50by1yZWJhc2UucmViYXNlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcmViYXNlICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnRvLXJlYmFzZS5yZWJhc2UgdHJ1ZSAmJgorCWdpdCBwdWxsIC4gY29weSAmJgorCXRlc3RfY21wX3JldiBIRUFEXiBjb3B5ICYmCisJZWNobyBuZXcgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoLnRvLXJlYmFzZS5yZWJhc2Ugc2hvdWxkIG92ZXJyaWRlIHB1bGwucmViYXNlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcmViYXNlICYmCisJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgdHJ1ZSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC50by1yZWJhc2UucmViYXNlIGZhbHNlICYmCisJZ2l0IHB1bGwgLiBjb3B5ICYmCisJdGVzdF9jbXBfcmV2ICEgSEVBRF4gY29weSAmJgorCWVjaG8gbmV3ID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2Ugd2FybnMgb24gLS12ZXJpZnktc2lnbmF0dXJlcycgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgorCWdpdCBwdWxsIC0tcmViYXNlIC0tdmVyaWZ5LXNpZ25hdHVyZXMgLiBjb3B5IDI+ZXJyICYmCisJdGVzdF9jbXBfcmV2IEhFQUReIGNvcHkgJiYKKwllY2hvIG5ldyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImlnbm9yaW5nIC0tdmVyaWZ5LXNpZ25hdHVyZXMgZm9yIHJlYmFzZSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2UgZG9lcyBub3Qgd2FybiBvbiAtLW5vLXZlcmlmeS1zaWduYXR1cmVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcmViYXNlICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgLS1uby12ZXJpZnktc2lnbmF0dXJlcyAuIGNvcHkgMj5lcnIgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4gY29weSAmJgorCWVjaG8gbmV3ID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAhICJ2ZXJpZnktc2lnbmF0dXJlcyIgZXJyCisnCisKKyMgYWRkIGEgZmVhdHVyZSBicmFuY2gsIGtlZXAtbWVyZ2UsIHRoYXQgaXMgbWVyZ2VkIGludG8gbWFzdGVyLCBzbyB0aGUKKyMgdGVzdCBjYW4gdHJ5IHByZXNlcnZpbmcgdGhlIG1lcmdlIGNvbW1pdCAob3Igbm90KSB3aXRoIHZhcmlvdXMKKyMgLS1yZWJhc2UgZmxhZ3MvcHVsbC5yZWJhc2Ugc2V0dGluZ3MuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVzZXJ2ZSBtZXJnZSBzZXR1cCcgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgorCWdpdCBjaGVja291dCAtYiBrZWVwLW1lcmdlIHNlY29uZF4gJiYKKwl0ZXN0X2NvbW1pdCBmaWxlMyAmJgorCWdpdCBjaGVja291dCB0by1yZWJhc2UgJiYKKwlnaXQgbWVyZ2Uga2VlcC1tZXJnZSAmJgorCWdpdCB0YWcgYmVmb3JlLXByZXNlcnZlLXJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsLnJlYmFzZT1mYWxzZSBjcmVhdGUgYSBuZXcgbWVyZ2UgY29tbWl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgZmFsc2UgJiYKKwlnaXQgcHVsbCAuIGNvcHkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4xIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4yIGNvcHkgJiYKKwllY2hvIGZpbGUzID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUzLnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbC5yZWJhc2U9dHJ1ZSBmbGF0dGVucyBrZWVwLW1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgdHJ1ZSAmJgorCWdpdCBwdWxsIC4gY29weSAmJgorCXRlc3RfY21wX3JldiBIRUFEXl4gY29weSAmJgorCWVjaG8gZmlsZTMgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZTMudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsLnJlYmFzZT0xIGlzIHRyZWF0ZWQgYXMgdHJ1ZSBhbmQgZmxhdHRlbnMga2VlcC1tZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIDEgJiYKKwlnaXQgcHVsbCAuIGNvcHkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF5eIGNvcHkgJiYKKwllY2hvIGZpbGUzID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUzLnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRUJBU0VfUCBcCisJJ3B1bGwucmViYXNlPXByZXNlcnZlIHJlYmFzZXMgYW5kIG1lcmdlcyBrZWVwLW1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgcHJlc2VydmUgJiYKKwlnaXQgcHVsbCAuIGNvcHkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF5eIGNvcHkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4yIGtlZXAtbWVyZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbC5yZWJhc2U9aW50ZXJhY3RpdmUnICcKKwl3cml0ZV9zY3JpcHQgIiRUUkFTSF9ESVJFQ1RPUlkvZmFrZS1lZGl0b3IiIDw8LVxFT0YgJiYKKwllY2hvIEkgd2FzIGhlcmUgPmZha2Uub3V0ICYmCisJZmFsc2UKKwlFT0YKKwl0ZXN0X3NldF9lZGl0b3IgIiRUUkFTSF9ESVJFQ1RPUlkvZmFrZS1lZGl0b3IiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlPWludGVyYWN0aXZlIC4gY29weSAmJgorCWVjaG8gIkkgd2FzIGhlcmUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmFrZS5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZT1pJyAnCisJd3JpdGVfc2NyaXB0ICIkVFJBU0hfRElSRUNUT1JZL2Zha2UtZWRpdG9yIiA8PC1cRU9GICYmCisJZWNobyBJIHdhcyBoZXJlLCB0b28gPmZha2Uub3V0ICYmCisJZmFsc2UKKwlFT0YKKwl0ZXN0X3NldF9lZGl0b3IgIiRUUkFTSF9ESVJFQ1RPUlkvZmFrZS1lZGl0b3IiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlPWkgLiBjb3B5ICYmCisJZWNobyAiSSB3YXMgaGVyZSwgdG9vIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZha2Uub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwucmViYXNlPWludmFsaWQgZmFpbHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSBpbnZhbGlkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLiBjb3B5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlPWZhbHNlIGNyZWF0ZSBhIG5ldyBtZXJnZSBjb21taXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSB0cnVlICYmCisJZ2l0IHB1bGwgLS1yZWJhc2U9ZmFsc2UgLiBjb3B5ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMSBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMiBjb3B5ICYmCisJZWNobyBmaWxlMyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMy50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlPXRydWUgcmViYXNlcyBhbmQgZmxhdHRlbnMga2VlcC1tZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHByZXNlcnZlICYmCisJZ2l0IHB1bGwgLS1yZWJhc2U9dHJ1ZSAuIGNvcHkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF5eIGNvcHkgJiYKKwllY2hvIGZpbGUzID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUzLnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRUJBU0VfUCBcCisJJy0tcmViYXNlPXByZXNlcnZlIHJlYmFzZXMgYW5kIG1lcmdlcyBrZWVwLW1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgdHJ1ZSAmJgorCWdpdCBwdWxsIC0tcmViYXNlPXByZXNlcnZlIC4gY29weSAmJgorCXRlc3RfY21wX3JldiBIRUFEXl4gY29weSAmJgorCXRlc3RfY21wX3JldiBIRUFEXjIga2VlcC1tZXJnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZT1pbnZhbGlkIGZhaWxzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1yZWJhc2U9aW52YWxpZCAuIGNvcHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2Ugb3ZlcnJpZGVzIHB1bGwucmViYXNlPXByZXNlcnZlIGFuZCBmbGF0dGVucyBrZWVwLW1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgcHJlc2VydmUgJiYKKwlnaXQgcHVsbCAtLXJlYmFzZSAuIGNvcHkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF5eIGNvcHkgJiYKKwllY2hvIGZpbGUzID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUzLnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2Ugd2l0aCByZWJhc2VkIHVwc3RyZWFtJyAnCisJZ2l0IHJlbW90ZSBhZGQgLWYgbWUgLiAmJgorCWdpdCBjaGVja291dCBjb3B5ICYmCisJZ2l0IHRhZyBjb3B5LW9yaWcgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZWNobyBjb25mbGljdGluZyBtb2RpZmljYXRpb24gPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGNvbmZsaWN0IGZpbGUgJiYKKwlnaXQgY2hlY2tvdXQgdG8tcmViYXNlICYmCisJZWNobyBmaWxlID5maWxlMiAmJgorCWdpdCBjb21taXQgLW0gdG8tcmViYXNlIGZpbGUyICYmCisJZ2l0IHRhZyB0by1yZWJhc2Utb3JpZyAmJgorCWdpdCBwdWxsIC0tcmViYXNlIG1lIGNvcHkgJiYKKwllY2hvICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIC1mIHdpdGggcmViYXNlZCB1cHN0cmVhbScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHRvLXJlYmFzZS1vcmlnICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgLWYgbWUgY29weSAmJgorCWVjaG8gImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2Ugd2l0aCByZWJhc2VkIGRlZmF1bHQgdXBzdHJlYW0nICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvbWUvY29weSBjb3B5LW9yaWcgJiYKKwlnaXQgY2hlY2tvdXQgLS10cmFjayAtYiB0by1yZWJhc2UyIG1lL2NvcHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHRvLXJlYmFzZS1vcmlnICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgJiYKKwllY2hvICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZWQgdXBzdHJlYW0gKyBmZXRjaCArIHB1bGwgLS1yZWJhc2UnICcKKworCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9tZS9jb3B5IGNvcHktb3JpZyAmJgorCWdpdCByZXNldCAtLWhhcmQgdG8tcmViYXNlLW9yaWcgJiYKKwlnaXQgY2hlY2tvdXQgLS10cmFjayAtYiB0by1yZWJhc2UzIG1lL2NvcHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHRvLXJlYmFzZS1vcmlnICYmCisJZ2l0IGZldGNoICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgJiYKKwllY2hvICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSBkaWVzIGVhcmx5IHdpdGggZGlydHkgd29ya2luZyBkaXJlY3RvcnknICcKKwlnaXQgY2hlY2tvdXQgdG8tcmViYXNlICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL21lL2NvcHkgY29weV4gJiYKKwlDT1BZPSIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWUvY29weSkiICYmCisJZ2l0IHJlYmFzZSAtLW9udG8gJENPUFkgY29weSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC50by1yZWJhc2UucmVtb3RlIG1lICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnRvLXJlYmFzZS5tZXJnZSByZWZzL2hlYWRzL2NvcHkgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gudG8tcmViYXNlLnJlYmFzZSB0cnVlICYmCisJZWNobyBkaXJ0eSA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAmJgorCXRlc3RfY21wX3JldiAiJENPUFkiIG1lL2NvcHkgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCAtLSBmaWxlICYmCisJZ2l0IHB1bGwgJiYKKwl0ZXN0X2NtcF9yZXYgISAiJENPUFkiIG1lL2NvcHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSB3b3JrcyBvbiBicmFuY2ggeWV0IHRvIGJlIGJvcm4nICcKKwlnaXQgcmV2LXBhcnNlIG1hc3RlciA+ZXhwZWN0ICYmCisJbWtkaXIgZW1wdHlfcmVwbyAmJgorCSgKKwkJY2QgZW1wdHlfcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgcHVsbCAtLXJlYmFzZSAuLiBtYXN0ZXIgJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIGZhaWxzIG9uIHVuYm9ybiBicmFuY2ggd2l0aCBzdGFnZWQgY2hhbmdlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGVtcHR5X3JlcG8yIiAmJgorCWdpdCBpbml0IGVtcHR5X3JlcG8yICYmCisJKAorCQljZCBlbXB0eV9yZXBvMiAmJgorCQllY2hvIHN0YWdlZC1maWxlID5zdGFnZWQtZmlsZSAmJgorCQlnaXQgYWRkIHN0YWdlZC1maWxlICYmCisJCWVjaG8gc3RhZ2VkLWZpbGUgPmV4cGVjdCAmJgorCQlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlIC4uIG1hc3RlciAyPmVyciAmJgorCQlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWdpdCBzaG93IDpzdGFnZWQtZmlsZSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJdGVzdF9pMThuZ3JlcCAidW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4IiBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2UgZmFpbHMgb24gY29ycnVwdCBIRUFEJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgY29ycnVwdCIgJiYKKwlnaXQgaW5pdCBjb3JydXB0ICYmCisJKAorCQljZCBjb3JydXB0ICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmhlYWQgJiYKKwkJb2JqPSQoc2VkICJzI14uLiMmLyMiIGhlYWQpICYmCisJCXJtIC1mIC5naXQvb2JqZWN0cy8kb2JqICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgZGV0ZWN0aW5nIHVwc3RyZWFtZWQgY2hhbmdlcycgJworCW1rZGlyIHNyYyAmJgorCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBpbml0ICYmCisJCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuOVxuMTBcbiIgPiBzdHVmZiAmJgorCQlnaXQgYWRkIHN0dWZmICYmCisJCWdpdCBjb21taXQgLW0gIkluaXRpYWwgcmV2aXNpb24iCisJKSAmJgorCWdpdCBjbG9uZSBzcmMgZHN0ICYmCisJKAorCQljZCBzcmMgJiYKKwkJbW9kaWZ5IHMvNS80My8gc3R1ZmYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiNS0+NDMiICYmCisJCW1vZGlmeSBzLzYvNDIvIHN0dWZmICYmCisJCWdpdCBjb21taXQgLWEgLW0gIk1ha2UgaXQgYmlnZ2VyIgorCSkgJiYKKwkoCisJCWNkIGRzdCAmJgorCQltb2RpZnkgcy81LzQzLyBzdHVmZiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJJbmRlcGVuZGVudCBkaXNjb3Zlcnkgb2YgNS0+NDMiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLXJlYmFzZSBkZXRlY3RzIHVwc3RyZWFtZWQgY2hhbmdlcycgJworCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBwdWxsIC0tcmViYXNlICYmCisJCWdpdCBscy1maWxlcyAtdSA+dW50cmFja2VkICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSB1bnRyYWNrZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBhdm9pZGluZyByZWFwcGx5aW5nIG9sZCBwYXRjaGVzJyAnCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXIKKwkpICYmCisJZ2l0IGNsb25lIC0tYmFyZSBzcmMgc3JjLXJlcGxhY2UuZ2l0ICYmCisJcm0gLXJmIHNyYyAmJgorCW12IHNyYy1yZXBsYWNlLmdpdCBzcmMgJiYKKwkoCisJCWNkIGRzdCAmJgorCQltb2RpZnkgcy8yLzIyLyBzdHVmZiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgMiIgJiYKKwkJbW9kaWZ5IHMvMy8zMy8gc3R1ZmYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIDMiICYmCisJCW1vZGlmeSBzLzQvNDQvIHN0dWZmICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNoYW5nZSA0IiAmJgorCQlnaXQgcHVzaCAmJgorCisJCW1vZGlmeSBzLzQ0LzU1LyBzdHVmZiAmJgorCQlnaXQgY29tbWl0IC0tYW1lbmQgLWEgLW0gIk1vZGlmaWVkIENoYW5nZSA0IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1yZWJhc2UgZG9lcyBub3QgcmVhcHBseSBvbGQgcGF0Y2hlcycgJworCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlICYmCisJCWNhdCAuZ2l0L3JlYmFzZS1tZXJnZS9kb25lIC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyA+d29yayAmJgorCQlncmVwIC12IC1lIFwjIC1lIF4kIHdvcmsgPnBhdGNoZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBwYXRjaGVzICYmCisJCXJtIC1mIHdvcmsKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tcmViYXNlIGFnYWluc3QgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvcHkyIHRvLXJlYmFzZS1vcmlnICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgLiB0by1yZWJhc2UgJiYKKwllY2hvICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyMS1wdWxsLW9wdGlvbnMuc2ggYi90L3Q1NTIxLXB1bGwtb3B0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNTlhZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyMS1wdWxsLW9wdGlvbnMuc2gKQEAgLTAsMCArMSwyMjEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdWxsIG9wdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIHBhcmVudCAmJgorCShjZCBwYXJlbnQgJiYgZ2l0IGluaXQgJiYKKwkgZWNobyBvbmUgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLW0gb25lKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtcSAtLW5vLXJlYmFzZScgJworCW1rZGlyIGNsb25lZHEgJiYKKwkoY2QgY2xvbmVkcSAmJiBnaXQgaW5pdCAmJgorCWdpdCBwdWxsIC1xIC0tbm8tcmViYXNlICIuLi9wYXJlbnQiID5vdXQgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLXEgLS1yZWJhc2UnICcKKwlta2RpciBjbG9uZWRxcmIgJiYKKwkoY2QgY2xvbmVkcXJiICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgLXEgLS1yZWJhc2UgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisJZ2l0IHB1bGwgLXEgLS1yZWJhc2UgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLW5vLXJlYmFzZScgJworCW1rZGlyIGNsb25lZCAmJgorCShjZCBjbG9uZWQgJiYgZ2l0IGluaXQgJiYKKwlnaXQgcHVsbCAtLW5vLXJlYmFzZSAiLi4vcGFyZW50IiA+b3V0IDI+ZXJyICYmCisJdGVzdCAtcyBlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLXJlYmFzZScgJworCW1rZGlyIGNsb25lZHJiICYmCisJKGNkIGNsb25lZHJiICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3QgLXMgZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLXYgLS1uby1yZWJhc2UnICcKKwlta2RpciBjbG9uZWR2ICYmCisJKGNkIGNsb25lZHYgJiYgZ2l0IGluaXQgJiYKKwlnaXQgcHVsbCAtdiAtLW5vLXJlYmFzZSAiLi4vcGFyZW50IiA+b3V0IDI+ZXJyICYmCisJdGVzdCAtcyBlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtdiAtLXJlYmFzZScgJworCW1rZGlyIGNsb25lZHZyYiAmJgorCShjZCBjbG9uZWR2cmIgJiYgZ2l0IGluaXQgJiYKKwlnaXQgcHVsbCAtdiAtLXJlYmFzZSAiLi4vcGFyZW50IiA+b3V0IDI+ZXJyICYmCisJdGVzdCAtcyBlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtdiAtcSAtLW5vLXJlYmFzZScgJworCW1rZGlyIGNsb25lZHZxICYmCisJKGNkIGNsb25lZHZxICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgLXYgLXEgLS1uby1yZWJhc2UgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtcSAtdiAtLW5vLXJlYmFzZScgJworCW1rZGlyIGNsb25lZHF2ICYmCisJKGNkIGNsb25lZHF2ICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgLXEgLXYgLS1uby1yZWJhc2UgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKKwl0ZXN0IC1zIGVycikKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tY2xlYW51cCBlcnJvcnMgZWFybHkgb24gaW52YWxpZCBhcmd1bWVudCcgJworCW1rZGlyIGNsb25lZGNsZWFudXAgJiYKKwkoY2QgY2xvbmVkY2xlYW51cCAmJiBnaXQgaW5pdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tbm8tcmViYXNlIC0tY2xlYW51cCBpbnZhbGlkICIuLi9wYXJlbnQiID5vdXQgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisJdGVzdCAtcyBlcnIpCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1mb3JjZScgJworCW1rZGlyIGNsb25lZG9sZHN0eWxlICYmCisJKGNkIGNsb25lZG9sZHN0eWxlICYmIGdpdCBpbml0ICYmCisJY2F0ID4+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtyZW1vdGUgIm9uZSJdCisJCXVybCA9IC4uL3BhcmVudAorCQlmZXRjaCA9IHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWlycm9yCisJW3JlbW90ZSAidHdvIl0KKwkJdXJsID0gLi4vcGFyZW50CisJCWZldGNoID0gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9vcmlnaW4KKwlbYnJhbmNoICJtYXN0ZXIiXQorCQlyZW1vdGUgPSB0d28KKwkJbWVyZ2UgPSByZWZzL2hlYWRzL21hc3RlcgorCUVPRgorCWdpdCBwdWxsIHR3byAmJgorCXRlc3RfY29tbWl0IEEgJiYKKwlnaXQgYnJhbmNoIC1mIG9yaWdpbiAmJgorCWdpdCBwdWxsIC0tYWxsIC0tZm9yY2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tYWxsJyAnCisJbWtkaXIgY2xvbmVkbXVsdGkgJiYKKwkoY2QgY2xvbmVkbXVsdGkgJiYgZ2l0IGluaXQgJiYKKwljYXQgPj4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW3JlbW90ZSAib25lIl0KKwkJdXJsID0gLi4vcGFyZW50CisJCWZldGNoID0gcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vbmUvKgorCVtyZW1vdGUgInR3byJdCisJCXVybCA9IC4uL3BhcmVudAorCQlmZXRjaCA9IHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvdHdvLyoKKwlbYnJhbmNoICJtYXN0ZXIiXQorCQlyZW1vdGUgPSBvbmUKKwkJbWVyZ2UgPSByZWZzL2hlYWRzL21hc3RlcgorCUVPRgorCWdpdCBwdWxsIC0tYWxsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLWRyeS1ydW4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBjbG9uZWRyeSIgJiYKKwlnaXQgaW5pdCBjbG9uZWRyeSAmJgorCSgKKwkJY2QgY2xvbmVkcnkgJiYKKwkJZ2l0IHB1bGwgLS1kcnktcnVuIC4uL3BhcmVudCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L0ZFVENIX0hFQUQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L2luZGV4ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tYWxsIC0tZHJ5LXJ1bicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGNsb25lZGRyeSIgJiYKKwlnaXQgaW5pdCBjbG9uZWRyeSAmJgorCSgKKwkJY2QgY2xvbmVkcnkgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgb3JpZ2luIC4uL3BhcmVudCAmJgorCQlnaXQgcHVsbCAtLWFsbCAtLWRyeS1ydW4gJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9GRVRDSF9IRUFEICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9pbmRleCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBzcmMgZHN0IiAmJgorCWdpdCBpbml0IHNyYyAmJgorCSgKKwkJY2Qgc3JjICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQl0ZXN0X2NvbW1pdCB0d28KKwkpICYmCisJZ2l0IGNsb25lIHNyYyBkc3QgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gc2lkZSBIRUFEXiAmJgorCQl0ZXN0X2NvbW1pdCB0aHJlZQorCSkgJiYKKwkoCisJCWNkIGRzdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuLi9zcmMgc2lkZSAmJgorCQlnaXQgcHVsbCAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgLi4vc3JjIHNpZGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIGRvZXMgbm90IGFkZCBhIHNpZ24tb2ZmIGxpbmUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBzcmMgZHN0IGFjdHVhbCIgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzcmMgb25lICYmCisJZ2l0IGNsb25lIHNyYyBkc3QgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzcmMgdHdvICYmCisJZ2l0IC1DIGRzdCBwdWxsIC0tbm8tZmYgJiYKKwlnaXQgLUMgZHN0IHNob3cgLXMgLS1wcmV0dHk9ImZvcm1hdDolKHRyYWlsZXJzKSIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLW5vLXNpZ25vZmYgZG9lcyBub3QgYWRkIHNpZ24tb2ZmIGxpbmUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBzcmMgZHN0IGFjdHVhbCIgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzcmMgb25lICYmCisJZ2l0IGNsb25lIHNyYyBkc3QgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzcmMgdHdvICYmCisJZ2l0IC1DIGRzdCBwdWxsIC0tbm8tc2lnbm9mZiAtLW5vLWZmICYmCisJZ2l0IC1DIGRzdCBzaG93IC1zIC0tcHJldHR5PSJmb3JtYXQ6JSh0cmFpbGVycykiIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1zaWdub2ZmIGFkZCBhIHNpZ24tb2ZmIGxpbmUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBzcmMgZHN0IGV4cGVjdGVkIGFjdHVhbCIgJiYKKwllY2hvICJTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iID5leHBlY3RlZCAmJgorCWdpdCBpbml0IHNyYyAmJgorCXRlc3RfY29tbWl0IC1DIHNyYyBvbmUgJiYKKwlnaXQgY2xvbmUgc3JjIGRzdCAmJgorCXRlc3RfY29tbWl0IC1DIHNyYyB0d28gJiYKKwlnaXQgLUMgZHN0IHB1bGwgLS1zaWdub2ZmIC0tbm8tZmYgJiYKKwlnaXQgLUMgZHN0IHNob3cgLXMgLS1wcmV0dHk9ImZvcm1hdDolKHRyYWlsZXJzKSIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tbm8tc2lnbm9mZiBmbGFnIGNhbmNlbHMgLS1zaWdub2ZmIGZsYWcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBzcmMgZHN0IGFjdHVhbCIgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzcmMgb25lICYmCisJZ2l0IGNsb25lIHNyYyBkc3QgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzcmMgdHdvICYmCisJZ2l0IC1DIGRzdCBwdWxsIC0tc2lnbm9mZiAtLW5vLXNpZ25vZmYgLS1uby1mZiAmJgorCWdpdCAtQyBkc3Qgc2hvdyAtcyAtLXByZXR0eT0iZm9ybWF0OiUodHJhaWxlcnMpIiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyMi1wdWxsLXN5bWxpbmsuc2ggYi90L3Q1NTIyLXB1bGwtc3ltbGluay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iY2ZmNDYwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyMi1wdWxsLXN5bWxpbmsuc2gKQEAgLTAsMCArMSw4NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3B1bGxpbmcgZnJvbSBzeW1saW5rZWQgc3ViZGlyJworCisuIC4vdGVzdC1saWIuc2gKKworIyBUaGUgc2NlbmFyaW8gd2UgYXJlIGJ1aWxkaW5nOgorIworIyAgIHRyYXNoXCBkaXJlY3RvcnkvCisjICAgICBjbG9uZS1yZXBvLworIyAgICAgICBzdWJkaXIvCisjICAgICAgICAgYmFyCisjICAgICBzdWJkaXItbGluayAtPiBjbG9uZS1yZXBvL3N1YmRpci8KKyMKKyMgVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIHN1YmRpci1saW5rLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIHNldHVwICcKKwlta2RpciBzdWJkaXIgJiYKKwllY2hvIGZpbGUgPnN1YmRpci9maWxlICYmCisJZ2l0IGFkZCBzdWJkaXIvZmlsZSAmJgorCWdpdCBjb21taXQgLXEgLW0gZmlsZSAmJgorCWdpdCBjbG9uZSAtcSAuIGNsb25lLXJlcG8gJiYKKwlsbiAtcyBjbG9uZS1yZXBvL3N1YmRpci8gc3ViZGlyLWxpbmsgJiYKKwkoCisJCWNkIGNsb25lLXJlcG8gJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4KKwkpICYmCisJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4KKycKKworIyBEZW1vbnN0cmF0ZSB0aGF0IHRoaW5ncyB3b3JrIGlmIHdlIGp1c3QgYXZvaWQgdGhlIHN5bWxpbmsKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3B1bGxpbmcgZnJvbSByZWFsIHN1YmRpcicgJworCSgKKwkJZWNobyByZWFsID5zdWJkaXIvZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIHJlYWwgc3ViZGlyL2ZpbGUgJiYKKwkJY2QgY2xvbmUtcmVwby9zdWJkaXIvICYmCisJCWdpdCBwdWxsICYmCisJCXRlc3QgcmVhbCA9ICQoY2F0IGZpbGUpCisJKQorJworCisjIEZyb20gc3ViZGlyLWxpbmssIHB1bGxpbmcgc2hvdWxkIHdvcmsgYXMgaXQgZG9lcyBmcm9tCisjIGNsb25lLXJlcG8vc3ViZGlyLy4KKyMKKyMgSW5zdGVhZCwgdGhlIGVycm9yIHB1bGwgZ2F2ZSB3YXM6CisjCisjICAgZmF0YWw6ICdvcmlnaW4nOiB1bmFibGUgdG8gY2hkaXIgb3Igbm90IGEgZ2l0IGFyY2hpdmUKKyMgICBmYXRhbDogVGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkKKyMKKyMgYmVjYXVzZSBnaXQgd291bGQgZmluZCB0aGUgLmdpdC9jb25maWcgZm9yIHRoZSAidHJhc2ggZGlyZWN0b3J5IgorIyByZXBvLCBub3QgZm9yIHRoZSBjbG9uZS1yZXBvIHJlcG8uICBUaGUgInRyYXNoIGRpcmVjdG9yeSIgcmVwbworIyBoYWQgbm8gZW50cnkgZm9yIG9yaWdpbi4gIEdpdCBmb3VuZCB0aGUgd3JvbmcgLmdpdCBiZWNhdXNlCisjIGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXAgcHJpbnRlZCBhIHBhdGggcmVsYXRpdmUgdG8KKyMgY2xvbmUtcmVwby9zdWJkaXIvLCBub3Qgc3ViZGlyLWxpbmsvLiAgR2l0IHJldi1wYXJzZSAtLXNob3ctY2R1cAorIyB1c2VkIHRoZSBjb3JyZWN0IC5naXQsIGJ1dCB3aGVuIHRoZSBnaXQgcHVsbCBzaGVsbCBzY3JpcHQgZGlkCisjICJjZCAkKGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXApIiwgaXQgZW5kZWQgdXAgaW4gdGhlIHdyb25nCisjIGRpcmVjdG9yeS4gIEEgUE9TSVggc2hlbGwncyAiY2QiIHdvcmtzIGEgbGl0dGxlIGRpZmZlcmVudGx5CisjIHRoYW4gY2hkaXIoKSBpbiBDOyAiY2QgLVAiIGlzIG11Y2ggY2xvc2VyIHRvIGNoZGlyKCkuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdwdWxsaW5nIGZyb20gc3ltbGlua2VkIHN1YmRpcicgJworCSgKKwkJZWNobyBsaW5rID5zdWJkaXIvZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIGxpbmsgc3ViZGlyL2ZpbGUgJiYKKwkJY2Qgc3ViZGlyLWxpbmsvICYmCisJCWdpdCBwdWxsICYmCisJCXRlc3QgbGluayA9ICQoY2F0IGZpbGUpCisJKQorJworCisjIFByb3ZlIHRoYXQgdGhlIHJlbW90ZSBlbmQgcmVhbGx5IGlzIGEgcmVwbywgYW5kIG90aGVyIGNvbW1hbmRzCisjIHdvcmsgZmluZSBpbiB0aGlzIGNvbnRleHQuICBJdCdzIGp1c3QgdGhhdCAiZ2l0IHB1bGwiIGJyZWFrcy4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3B1c2hpbmcgZnJvbSBzeW1saW5rZWQgc3ViZGlyJyAnCisJKAorCQljZCBzdWJkaXItbGluay8gJiYKKwkJZWNobyBwdXNoID5maWxlICYmCisJCWdpdCBjb21taXQgLW0gcHVzaCAuL2ZpbGUgJiYKKwkJZ2l0IHB1c2gKKwkpICYmCisJdGVzdCBwdXNoID0gJChnaXQgc2hvdyBIRUFEOnN1YmRpci9maWxlKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjMtcHVzaC11cHN0cmVhbS5zaCBiL3QvdDU1MjMtcHVzaC11cHN0cmVhbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMGRmODFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyMy1wdXNoLXVwc3RyZWFtLnNoCkBAIC0wLDAgKzEsMTE5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHVzaCB3aXRoIC0tc2V0LXVwc3RyZWFtJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorCitlbnN1cmVfZnJlc2hfdXBzdHJlYW0oKSB7CisJcm0gLXJmIHBhcmVudCAmJiBnaXQgaW5pdCAtLWJhcmUgcGFyZW50Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhcmUgcGFyZW50JyAnCisJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCisJZ2l0IHJlbW90ZSBhZGQgdXBzdHJlYW0gcGFyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGxvY2FsIGNvbW1pdCcgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lCisnCisKK2NoZWNrX2NvbmZpZygpIHsKKwkoZWNobyAkMjsgZWNobyAkMykgPmV4cGVjdC4kMQorCShnaXQgY29uZmlnIGJyYW5jaC4kMS5yZW1vdGUKKwkgZ2l0IGNvbmZpZyBicmFuY2guJDEubWVyZ2UpID5hY3R1YWwuJDEKKwl0ZXN0X2NtcCBleHBlY3QuJDEgYWN0dWFsLiQxCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLXUgbWFzdGVyOm1hc3RlcicgJworCWdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlcjptYXN0ZXIgJiYKKwljaGVja19jb25maWcgbWFzdGVyIHVwc3RyZWFtIHJlZnMvaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLXUgbWFzdGVyOm90aGVyJyAnCisJZ2l0IHB1c2ggLXUgdXBzdHJlYW0gbWFzdGVyOm90aGVyICYmCisJY2hlY2tfY29uZmlnIG1hc3RlciB1cHN0cmVhbSByZWZzL2hlYWRzL290aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLXUgLS1kcnktcnVuIG1hc3RlcjpvdGhlclgnICcKKwlnaXQgcHVzaCAtdSAtLWRyeS1ydW4gdXBzdHJlYW0gbWFzdGVyOm90aGVyWCAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIgdXBzdHJlYW0gcmVmcy9oZWFkcy9vdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IG1hc3RlcjI6bWFzdGVyMicgJworCWdpdCBicmFuY2ggbWFzdGVyMiAmJgorCWdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlcjI6bWFzdGVyMiAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIyIHVwc3RyZWFtIHJlZnMvaGVhZHMvbWFzdGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IG1hc3RlcjI6b3RoZXIyJyAnCisJZ2l0IHB1c2ggLXUgdXBzdHJlYW0gbWFzdGVyMjpvdGhlcjIgJiYKKwljaGVja19jb25maWcgbWFzdGVyMiB1cHN0cmVhbSByZWZzL2hlYWRzL290aGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IDptYXN0ZXIyJyAnCisJZ2l0IHB1c2ggLXUgdXBzdHJlYW0gOm1hc3RlcjIgJiYKKwljaGVja19jb25maWcgbWFzdGVyMiB1cHN0cmVhbSByZWZzL2hlYWRzL290aGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IC0tYWxsJyAnCisJZ2l0IGJyYW5jaCBhbGwxICYmCisJZ2l0IGJyYW5jaCBhbGwyICYmCisJZ2l0IHB1c2ggLXUgLS1hbGwgJiYKKwljaGVja19jb25maWcgYWxsMSB1cHN0cmVhbSByZWZzL2hlYWRzL2FsbDEgJiYKKwljaGVja19jb25maWcgYWxsMiB1cHN0cmVhbSByZWZzL2hlYWRzL2FsbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtdSBIRUFEJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGhlYWRicmFuY2ggJiYKKwlnaXQgcHVzaCAtdSB1cHN0cmVhbSBIRUFEICYmCisJY2hlY2tfY29uZmlnIGhlYWRicmFuY2ggdXBzdHJlYW0gcmVmcy9oZWFkcy9oZWFkYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdwcm9ncmVzcyBtZXNzYWdlcyBnbyB0byB0dHknICcKKwllbnN1cmVfZnJlc2hfdXBzdHJlYW0gJiYKKworCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLXUgdXBzdHJlYW0gbWFzdGVyID5vdXQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJXcml0aW5nIG9iamVjdHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9ncmVzcyBtZXNzYWdlcyBkbyBub3QgZ28gdG8gbm9uLXR0eScgJworCWVuc3VyZV9mcmVzaF91cHN0cmVhbSAmJgorCisJIyBza2lwIHByb2dyZXNzIG1lc3NhZ2VzLCBzaW5jZSBzdGRlcnIgaXMgbm9uLXR0eQorCWdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlciA+b3V0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJXcml0aW5nIG9iamVjdHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9ncmVzcyBtZXNzYWdlcyBnbyB0byBub24tdHR5IChmb3JjZWQpJyAnCisJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCisKKwkjIGZvcmNlIHByb2dyZXNzIG1lc3NhZ2VzIHRvIHN0ZGVyciwgZXZlbiB0aG91Z2ggaXQgaXMgbm9uLXR0eQorCWdpdCBwdXNoIC11IC0tcHJvZ3Jlc3MgdXBzdHJlYW0gbWFzdGVyID5vdXQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJXcml0aW5nIG9iamVjdHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAncHVzaCAtcSBzdXBwcmVzc2VzIHByb2dyZXNzJyAnCisJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCisKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBwdXNoIC11IC1xIHVwc3RyZWFtIG1hc3RlciA+b3V0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJXcml0aW5nIG9iamVjdHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAncHVzaCAtLW5vLXByb2dyZXNzIHN1cHByZXNzZXMgcHJvZ3Jlc3MnICcKKwllbnN1cmVfZnJlc2hfdXBzdHJlYW0gJiYKKworCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLXUgLS1uby1wcm9ncmVzcyB1cHN0cmVhbSBtYXN0ZXIgPm91dCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAiVW5wYWNraW5nIG9iamVjdHMiIGVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAiV3JpdGluZyBvYmplY3RzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3F1aWV0IHB1c2gnICcKKwllbnN1cmVfZnJlc2hfdXBzdHJlYW0gJiYKKworCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLS1xdWlldCAtLW5vLXByb2dyZXNzIHVwc3RyZWFtIG1hc3RlciAyPiYxIHwgdGVlIG91dHB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTI0LXB1bGwtbXNnLnNoIGIvdC90NTUyNC1wdWxsLW1zZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMjc4YWRhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyNC1wdWxsLW1zZy5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHB1bGwgbWVzc2FnZSBnZW5lcmF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworZG9sbGFyPSckRG9sbGFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBpbml0aWFsIGFmaWxlIG9yaWdpbmFsICYmCisJZ2l0IGNsb25lIC4gY2xvbmVkICYmCisJKAorCQljZCBjbG9uZWQgJiYKKwkJZWNobyBhZGRlZCA+YmZpbGUgJiYKKwkJZ2l0IGFkZCBiZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGJmaWxlIgorCSkgJiYKKwl0ZXN0X3RpY2sgJiYgdGVzdF90aWNrICYmCisJZWNobyAic2Vjb25kIiA+YWZpbGUgJiYKKwlnaXQgYWRkIGFmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIGNvbW1pdCIgJiYKKwllY2hvICJvcmlnaW5hbCAkZG9sbGFyIiA+YWZpbGUgJiYKKwlnaXQgYWRkIGFmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiZG8gbm90IGNsb2JiZXIgJGRvbGxhciBzaWducyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBwdWxsICcKKygKKwljZCBjbG9uZWQgJiYKKwlnaXQgcHVsbCAtLWxvZyAmJgorCWdpdCBsb2cgLTIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPnJlc3VsdCAmJgorCWdyZXAgRG9sbGFyIHJlc3VsdAorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxvZz0xIGxpbWl0cyBzaG9ydGxvZyBsZW5ndGgnICcKKygKKwljZCBjbG9uZWQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJdGVzdCAiJChjYXQgYWZpbGUpIiA9IG9yaWdpbmFsICYmCisJdGVzdCAiJChjYXQgYmZpbGUpIiA9IGFkZGVkICYmCisJZ2l0IHB1bGwgLS1sb2c9MSAmJgorCWdpdCBsb2cgLTMgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPnJlc3VsdCAmJgorCWdyZXAgRG9sbGFyIHJlc3VsdCAmJgorCSEgZ3JlcCAic2Vjb25kIGNvbW1pdCIgcmVzdWx0CispCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyNS1mZXRjaC10YWdvcHQuc2ggYi90L3Q1NTI1LWZldGNoLXRhZ29wdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NTgxNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyNS1mZXRjaC10YWdvcHQuc2gKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3RhZ29wdCB2YXJpYWJsZSBhZmZlY3RzICJnaXQgZmV0Y2giIGFuZCBpcyBvdmVycmlkZGVuIGJ5IGNvbW1hbmRsaW5lLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3NldHVwX2Nsb25lICgpIHsKKwlnaXQgY2xvbmUgLS1taXJyb3IgLiAkMSAmJgorCWdpdCByZW1vdGUgYWRkIHJlbW90ZV8kMSAkMSAmJgorCShjZCAkMSAmJgorCWdpdCB0YWcgdGFnXyQxICYmCisJZ2l0IGJyYW5jaCBicmFuY2hfJDEpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IHRlc3QgJiYKKwlzZXR1cF9jbG9uZSBvbmUgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5yZW1vdGVfb25lLnRhZ29wdCAtLW5vLXRhZ3MgJiYKKwlzZXR1cF9jbG9uZSB0d28gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5yZW1vdGVfdHdvLnRhZ29wdCAtLXRhZ3MKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIHdpdGggdGFnb3B0PS0tbm8tdGFncyBkb2VzIG5vdCBnZXQgdGFnIiAnCisJZ2l0IGZldGNoIHJlbW90ZV9vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgdGFnX29uZSAmJgorCWdpdCBzaG93LXJlZiByZW1vdGVfb25lL2JyYW5jaF9vbmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIC0tdGFncyB3aXRoIHRhZ29wdD0tLW5vLXRhZ3MgZ2V0cyB0YWciICcKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgYnJhbmNoIHNlY29uZF9icmFuY2hfb25lCisJKSAmJgorCWdpdCBmZXRjaCAtLXRhZ3MgcmVtb3RlX29uZSAmJgorCWdpdCBzaG93LXJlZiB0YWdfb25lICYmCisJZ2l0IHNob3ctcmVmIHJlbW90ZV9vbmUvc2Vjb25kX2JyYW5jaF9vbmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIC0tbm8tdGFncyB3aXRoIHRhZ29wdD0tLXRhZ3MgZG9lcyBub3QgZ2V0IHRhZyIgJworCWdpdCBmZXRjaCAtLW5vLXRhZ3MgcmVtb3RlX3R3byAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiB0YWdfdHdvICYmCisJZ2l0IHNob3ctcmVmIHJlbW90ZV90d28vYnJhbmNoX3R3bworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggd2l0aCB0YWdvcHQ9LS10YWdzIGdldHMgdGFnIiAnCisJKAorCQljZCB0d28gJiYKKwkJZ2l0IGJyYW5jaCBzZWNvbmRfYnJhbmNoX3R3bworCSkgJiYKKwlnaXQgZmV0Y2ggcmVtb3RlX3R3byAmJgorCWdpdCBzaG93LXJlZiB0YWdfdHdvICYmCisJZ2l0IHNob3ctcmVmIHJlbW90ZV90d28vc2Vjb25kX2JyYW5jaF90d28KKwknCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjYtZmV0Y2gtc3VibW9kdWxlcy5zaCBiL3QvdDU1MjYtZmV0Y2gtc3VibW9kdWxlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MzIwNWRmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyNi1mZXRjaC1zdWJtb2R1bGVzLnNoCkBAIC0wLDAgKzEsNzIyIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDEwLCBKZW5zIExlaG1hbm4KKwordGVzdF9kZXNjcmlwdGlvbj0nUmVjdXJzaXZlICJnaXQgZmV0Y2giIGZvciBzdWJtb2R1bGVzJworCisuIC4vdGVzdC1saWIuc2gKKworcHdkPSQocHdkKQorCithZGRfdXBzdHJlYW1fY29tbWl0KCkgeworCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJCWVjaG8gbmV3ID4+IHN1YmZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBhZGQgc3ViZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIG5ldyBzdWJmaWxlICYmCisJCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJCWVjaG8gIkZldGNoaW5nIHN1Ym1vZHVsZSBzdWJtb2R1bGUiID4gLi4vZXhwZWN0LmVyciAmJgorCQllY2hvICJGcm9tICRwd2Qvc3VibW9kdWxlIiA+PiAuLi9leHBlY3QuZXJyICYmCisJCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+IC4uL2V4cGVjdC5lcnIKKwkpICYmCisJKAorCQljZCBkZWVwc3VibW9kdWxlICYmCisJCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJCWVjaG8gbmV3ID4+IGRlZXBzdWJmaWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgYWRkIGRlZXBzdWJmaWxlICYmCisJCWdpdCBjb21taXQgLW0gbmV3IGRlZXBzdWJmaWxlICYmCisJCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJCWVjaG8gIkZldGNoaW5nIHN1Ym1vZHVsZSBzdWJtb2R1bGUvc3ViZGlyL2RlZXBzdWJtb2R1bGUiID4+IC4uL2V4cGVjdC5lcnIKKwkJZWNobyAiRnJvbSAkcHdkL2RlZXBzdWJtb2R1bGUiID4+IC4uL2V4cGVjdC5lcnIgJiYKKwkJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj4gLi4vZXhwZWN0LmVycgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgZGVlcHN1Ym1vZHVsZSAmJgorCSgKKwkJY2QgZGVlcHN1Ym1vZHVsZSAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIGRlZXBzdWJjb250ZW50ID4gZGVlcHN1YmZpbGUgJiYKKwkJZ2l0IGFkZCBkZWVwc3ViZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIG5ldyBkZWVwc3ViZmlsZQorCSkgJiYKKwlta2RpciBzdWJtb2R1bGUgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIHN1YmNvbnRlbnQgPiBzdWJmaWxlICYmCisJCWdpdCBhZGQgc3ViZmlsZSAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiJHB3ZC9kZWVwc3VibW9kdWxlIiBzdWJkaXIvZGVlcHN1Ym1vZHVsZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tIG5ldworCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAiJHB3ZC9zdWJtb2R1bGUiIHN1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLWFtIGluaXRpYWwgJiYKKwlnaXQgY2xvbmUgLiBkb3duc3RyZWFtICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgcmVjdXJzZXMgaW50byBzdWJtb2R1bGVzIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzdWJtb2R1bGUucmVjdXJzZSBvcHRpb24gdHJpZ2dlcnMgcmVjdXJzaXZlIGZldGNoIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgLWMgc3VibW9kdWxlLnJlY3Vyc2UgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtajIgaGFzIHRoZSBzYW1lIG91dHB1dCBiZWhhdmlvdXIiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCUdJVF9UUkFDRT0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZS5vdXQiIGdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtajIgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVyciAmJgorCWdyZXAgIjIgdGFza3MiIHRyYWNlLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCBhbG9uZSBvbmx5IGZldGNoZXMgc3VwZXJwcm9qZWN0IiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgb25seSBmZXRjaGVzIHN1cGVycHJvamVjdCIgJworCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidXNpbmcgZmV0Y2hSZWN1cnNlU3VibW9kdWxlcz10cnVlIGluIC5naXRtb2R1bGVzIHJlY3Vyc2VzIGludG8gc3VibW9kdWxlcyIgJworCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUuZmV0Y2hSZWN1cnNlU3VibW9kdWxlcyB0cnVlICYmCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzIG92ZXJyaWRlcyAuZ2l0bW9kdWxlcyBjb25maWciICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ1c2luZyBmZXRjaFJlY3Vyc2VTdWJtb2R1bGVzPWZhbHNlIGluIC5naXQvY29uZmlnIG92ZXJyaWRlcyBzZXR0aW5nIGluIC5naXRtb2R1bGVzIiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzIGZhbHNlICYmCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLXJlY3Vyc2Utc3VibW9kdWxlcyBvdmVycmlkZXMgZmV0Y2hSZWN1cnNlU3VibW9kdWxlcyBzZXR0aW5nIGZyb20gLmdpdC9jb25maWciICcKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVyciAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZS5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzICYmCisJCWdpdCBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3VibW9kdWxlLmZldGNoUmVjdXJzZVN1Ym1vZHVsZXMKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tcXVpZXQgcHJvcGFnYXRlcyB0byBzdWJtb2R1bGVzIiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLXF1aWV0ID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tcXVpZXQgcHJvcGFnYXRlcyB0byBwYXJhbGxlbCBzdWJtb2R1bGVzIiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtaiAyIC0tcXVpZXQgID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tZHJ5LXJ1biBwcm9wYWdhdGVzIHRvIHN1Ym1vZHVsZXMiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLWRyeS1ydW4gPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJXaXRob3V0IC0tZHJ5LXJ1biBwcm9wYWdhdGVzIHRvIHN1Ym1vZHVsZXMiICcKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmVjdXJzZVN1Ym1vZHVsZXM9dHJ1ZSBwcm9wYWdhdGVzIGludG8gc3VibW9kdWxlcyIgJworCWFkZF91cHN0cmVhbV9jb21taXQgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGNvbmZpZyBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyB0cnVlICYmCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tcmVjdXJzZS1zdWJtb2R1bGVzIG92ZXJyaWRlcyBjb25maWcgaW4gc3VibW9kdWxlIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCWdpdCBjb25maWcgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgZmFsc2UKKwkJKSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyBvdmVycmlkZXMgY29uZmlnIHNldHRpbmciICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgdHJ1ZSAmJgorCQlnaXQgZmV0Y2ggLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiUmVjdXJzaW9uIGRvZXNuJ3QgaGFwcGVuIHdoZW4gbm8gbmV3IGNvbW1pdHMgYXJlIGZldGNoZWQgaW4gdGhlIHN1cGVycHJvamVjdCIgJworCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCWdpdCBjb25maWcgLS11bnNldCBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcworCQkpICYmCisJCWdpdCBjb25maWcgLS11bnNldCBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyAmJgorCQlnaXQgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiUmVjdXJzaW9uIHN0b3BzIHdoZW4gbm8gbmV3IHN1Ym1vZHVsZSBjb21taXRzIGFyZSBmZXRjaGVkIiAnCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gIm5ldyBzdWJtb2R1bGUiICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvICJGcm9tICRwd2QvLiIgPiBleHBlY3QuZXJyLnN1YiAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+ZXhwZWN0LmVyci5zdWIgJiYKKwloZWFkIC0zIGV4cGVjdC5lcnIgPj4gZXhwZWN0LmVyci5zdWIgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyci5zdWIgYWN0dWFsLmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlJlY3Vyc2lvbiBkb2Vzbid0IGhhcHBlbiB3aGVuIG5ldyBzdXBlcnByb2plY3QgY29tbWl0cyBkb24ndCBjaGFuZ2UgYW55IHN1Ym1vZHVsZXMiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvIGEgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IGZpbGUiICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvICJGcm9tICRwd2QvLiIgPiBleHBlY3QuZXJyLmZpbGUgJiYKKwllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PiBleHBlY3QuZXJyLmZpbGUgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyLmZpbGUgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJSZWN1cnNpb24gcGlja3MgdXAgY29uZmlnIGluIHN1Ym1vZHVsZSIgJworCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQlnaXQgY29uZmlnIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIHRydWUKKwkJKQorCSkgJiYKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gIm5ldyBzdWJtb2R1bGUiICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvICJGcm9tICRwd2QvLiIgPiBleHBlY3QuZXJyLnN1YiAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+IGV4cGVjdC5lcnIuc3ViICYmCisJY2F0IGV4cGVjdC5lcnIgPj4gZXhwZWN0LmVyci5zdWIgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVyciAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCWdpdCBjb25maWcgLS11bnNldCBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcworCQkpCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyLnN1YiBhY3R1YWwuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiUmVjdXJzaW9uIHBpY2tzIHVwIGFsbCBzdWJtb2R1bGVzIHdoZW4gbmVjZXNzYXJ5IiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1YmRpci9kZWVwc3VibW9kdWxlICYmCisJCQlnaXQgZmV0Y2ggJiYKKwkJCWdpdCBjaGVja291dCAtcSBGRVRDSF9IRUFECisJCSkgJiYKKwkJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICYmCisJCWdpdCBhZGQgc3ViZGlyL2RlZXBzdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibmV3IGRlZXBzdWJtb2R1bGUiICYmCisJCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJCWVjaG8gIkZldGNoaW5nIHN1Ym1vZHVsZSBzdWJtb2R1bGUiID4gLi4vZXhwZWN0LmVyci5zdWIgJiYKKwkJZWNobyAiRnJvbSAkcHdkL3N1Ym1vZHVsZSIgPj4gLi4vZXhwZWN0LmVyci5zdWIgJiYKKwkJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj4gLi4vZXhwZWN0LmVyci5zdWIKKwkpICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gIm5ldyBzdWJtb2R1bGUiICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvICJGcm9tICRwd2QvLiIgPiBleHBlY3QuZXJyLjIgJiYKKwllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PiBleHBlY3QuZXJyLjIgJiYKKwljYXQgZXhwZWN0LmVyci5zdWIgPj4gZXhwZWN0LmVyci4yICYmCisJdGFpbCAtMyBleHBlY3QuZXJyID4+IGV4cGVjdC5lcnIuMiAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyLjIgYWN0dWFsLmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIictLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQnIGRvZXNuJ3QgcmVjdXJzZSB3aGVuIG5vIG5ldyBjb21taXRzIGFyZSBmZXRjaGVkIGluIHRoZSBzdXBlcnByb2plY3QgKGFuZCBpZ25vcmVzIGNvbmZpZykiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJKAorCQkJY2Qgc3ViZGlyL2RlZXBzdWJtb2R1bGUgJiYKKwkJCWdpdCBmZXRjaCAmJgorCQkJZ2l0IGNoZWNrb3V0IC1xIEZFVENIX0hFQUQKKwkJKSAmJgorCQloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXikgJiYKKwkJZ2l0IGFkZCBzdWJkaXIvZGVlcHN1Ym1vZHVsZSAmJgorCQlnaXQgY29tbWl0IC1tICJuZXcgZGVlcHN1Ym1vZHVsZSIgJiYKKwkJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwkJZWNobyBGZXRjaGluZyBzdWJtb2R1bGUgc3VibW9kdWxlID4gLi4vZXhwZWN0LmVyci5zdWIgJiYKKwkJZWNobyAiRnJvbSAkcHdkL3N1Ym1vZHVsZSIgPj4gLi4vZXhwZWN0LmVyci5zdWIgJiYKKwkJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj4gLi4vZXhwZWN0LmVyci5zdWIKKwkpICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgdHJ1ZSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVyciAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICInLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kJyByZWN1cnNlcyBhcyBkZWVwIGFzIG5lY2Vzc2FyeSAoYW5kIGlnbm9yZXMgY29uZmlnKSIgJworCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgc3VibW9kdWxlIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJdGFpbCAtMyBleHBlY3QuZXJyID4gZXhwZWN0LmVyci5kZWVwc3ViICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID4gZXhwZWN0LmVyciAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+ZXhwZWN0LmVyciAmJgorCWNhdCBleHBlY3QuZXJyLnN1YiA+PiBleHBlY3QuZXJyICYmCisJY2F0IGV4cGVjdC5lcnIuZGVlcHN1YiA+PiBleHBlY3QuZXJyICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgZmFsc2UgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJkaXIvZGVlcHN1Ym1vZHVsZS5mZXRjaFJlY3Vyc2l2ZSBmYWxzZQorCQkpICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyICYmCisJCWdpdCBjb25maWcgLS11bnNldCBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCWdpdCBjb25maWcgLS11bnNldCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViZGlyL2RlZXBzdWJtb2R1bGUuZmV0Y2hSZWN1cnNpdmUKKwkJKQorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJy0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCcgc3RvcHMgd2hlbiBubyBuZXcgc3VibW9kdWxlIGNvbW1pdHMgYXJlIGZvdW5kIGluIHRoZSBzdXBlcnByb2plY3QgKGFuZCBpZ25vcmVzIGNvbmZpZykiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvIGEgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIm5ldyBmaWxlIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID4gZXhwZWN0LmVyci5maWxlICYmCisJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj4gZXhwZWN0LmVyci5maWxlICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIuZmlsZSBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIidmZXRjaC5yZWN1cnNlU3VibW9kdWxlcz1vbi1kZW1hbmQnIG92ZXJyaWRlcyBnbG9iYWwgY29uZmlnIiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcworCSkgJiYKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyBmYWxzZSAmJgorCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgc3VibW9kdWxlIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID4gZXhwZWN0LmVyci4yICYmCisJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj5leHBlY3QuZXJyLjIgJiYKKwloZWFkIC0zIGV4cGVjdC5lcnIgPj4gZXhwZWN0LmVyci4yICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgb24tZGVtYW5kICYmCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLXVuc2V0IGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgLS11bnNldCBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcworCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyLjIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICInc3VibW9kdWxlLjxzdWI+LmZldGNoUmVjdXJzZVN1Ym1vZHVsZXM9b24tZGVtYW5kJyBvdmVycmlkZXMgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMiICcKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzCisJKSAmJgorCWFkZF91cHN0cmVhbV9jb21taXQgJiYKKwlnaXQgY29uZmlnIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIGZhbHNlICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gIm5ldyBzdWJtb2R1bGUiICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvICJGcm9tICRwd2QvLiIgPiBleHBlY3QuZXJyLjIgJiYKKwllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PmV4cGVjdC5lcnIuMiAmJgorCWhlYWQgLTMgZXhwZWN0LmVyciA+PiBleHBlY3QuZXJyLjIgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLmZldGNoUmVjdXJzZVN1Ym1vZHVsZXMgb24tZGVtYW5kICYmCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3VibW9kdWxlLmZldGNoUmVjdXJzZVN1Ym1vZHVsZXMKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyci4yIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZG9uJ3QgZmV0Y2ggc3VibW9kdWxlIHdoZW4gbmV3bHkgcmVjb3JkZWQgY29tbWl0cyBhcmUgYWxyZWFkeSBwcmVzZW50IiAnCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJZ2l0IGNoZWNrb3V0IC1xIEhFQUReXgorCSkgJiYKKwloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlIHJld291bmQiICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvICJGcm9tICRwd2QvLiIgPiBleHBlY3QuZXJyICYmCisJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj4gZXhwZWN0LmVyciAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVyciAmJgorCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCWdpdCBjaGVja291dCAtcSBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIidmZXRjaC5yZWN1cnNlU3VibW9kdWxlcz1vbi1kZW1hbmQnIHdvcmtzIGFsc28gd2l0aG91dCAuZ2l0bW9kdWxlcyBlbnRyeSIgJworCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMKKwkpICYmCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgcm0gLmdpdG1vZHVsZXMgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgc3VibW9kdWxlIHdpdGhvdXQgLmdpdG1vZHVsZXMiICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvICJGcm9tICRwd2QvLiIgPmV4cGVjdC5lcnIuMiAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+ZXhwZWN0LmVyci4yICYmCisJaGVhZCAtMyBleHBlY3QuZXJyID4+ZXhwZWN0LmVyci4yICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCXJtIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgb24tZGVtYW5kICYmCisJCSMgZmFrZSBzdWJtb2R1bGUgY29uZmlndXJhdGlvbiB0byBhdm9pZCBza2lwcGluZyBzdWJtb2R1bGUgaGFuZGxpbmcKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuZmFrZS5wYXRoIGZha2UgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuZmFrZS51cmwgZmFrZXVybCAmJgorCQlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCAmJgorCQlnaXQgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyICYmCisJCSMgY2xlYW51cAorCQlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZAorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyLjIgYWN0dWFsLmVyciAmJgorCWdpdCBjaGVja291dCBIRUFEXiAtLSAuZ2l0bW9kdWxlcyAmJgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgc3VibW9kdWxlIHJlc3RvcmVkIC5naXRtb2R1bGVzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyBzdWJtb2R1bGVzIHJlc3BlY3RzIHBhcmFsbGVsIHNldHRpbmdzJyAnCisJZ2l0IGNvbmZpZyBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyB0cnVlICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCUdJVF9UUkFDRT0kKHB3ZCkvdHJhY2Uub3V0IGdpdCBmZXRjaCAmJgorCQlncmVwICIxIHRhc2tzIiB0cmFjZS5vdXQgJiYKKwkJR0lUX1RSQUNFPSQocHdkKS90cmFjZS5vdXQgZ2l0IGZldGNoIC0tam9icyA3ICYmCisJCWdyZXAgIjcgdGFza3MiIHRyYWNlLm91dCAmJgorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS5mZXRjaEpvYnMgOCAmJgorCQlHSVRfVFJBQ0U9JChwd2QpL3RyYWNlLm91dCBnaXQgZmV0Y2ggJiYKKwkJZ3JlcCAiOCB0YXNrcyIgdHJhY2Uub3V0ICYmCisJCUdJVF9UUkFDRT0kKHB3ZCkvdHJhY2Uub3V0IGdpdCBmZXRjaCAtLWpvYnMgOSAmJgorCQlncmVwICI5IHRhc2tzIiB0cmFjZS5vdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIHN1Ym1vZHVsZSBpbnRvIGEgYnJva2VuIHJlcG9zaXRvcnknICcKKwkjIFByZXBhcmUgc3JjIGFuZCBzcmMvc3ViIG5lc3RlZCBpbiBpdAorCWdpdCBpbml0IHNyYyAmJgorCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBpbml0IHN1YiAmJgorCQlnaXQgLUMgc3ViIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJpbml0aWFsIGluIHN1YiIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLS0gLi9zdWIgc3ViICYmCisJCWdpdCBjb21taXQgLW0gImluaXRpYWwgaW4gdG9wIgorCSkgJiYKKworCSMgQ2xvbmUgdGhlIG9sZC1mYXNob25lZCB3YXkKKwlnaXQgY2xvbmUgc3JjIGRzdCAmJgorCWdpdCAtQyBkc3QgY2xvbmUgLi4vc3JjL3N1YiBzdWIgJiYKKworCSMgTWFrZSBzdXJlIHRoYXQgb2xkLWZhc2hvbmVkIGxheW91dCBpcyBzdGlsbCBzdXBwb3J0ZWQKKwlnaXQgLUMgZHN0IHN0YXR1cyAmJgorCisJIyAiZGlmZiIgd291bGQgZmluZCBubyBjaGFuZ2UKKwlnaXQgLUMgZHN0IGRpZmYgLS1leGl0LWNvZGUgJiYKKworCSMgUmVjdXJzaXZlLWZldGNoIHdvcmtzIGZpbmUKKwlnaXQgLUMgZHN0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzICYmCisKKwkjIEJyZWFrIHRoZSByZWNlaXZpbmcgc3VibW9kdWxlCisJcm0gLWYgZHN0L3N1Yi8uZ2l0L0hFQUQgJiYKKworCSMgTk9URTogd2l0aG91dCB0aGUgZml4IHRoZSBmb2xsb3dpbmcgdGVzdHMgd2lsbCByZWN1cnNlIGZvcmV2ZXIhCisJIyBUaGV5IHNob3VsZCB0ZXJtaW5hdGUgd2l0aCBhbiBlcnJvci4KKworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBkc3Qgc3RhdHVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGRzdCBkaWZmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGRzdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCBuZXcgY29tbWl0cyB3aGVuIHN1Ym1vZHVsZSBnb3QgcmVuYW1lZCIgJworCWdpdCBjbG9uZSAuIGRvd25zdHJlYW1fcmVuYW1lICYmCisJKAorCQljZCBkb3duc3RyZWFtX3JlbmFtZSAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlbmFtZSAmJgorCQlnaXQgbXYgc3VibW9kdWxlIHN1Ym1vZHVsZV9yZW5hbWVkICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV9yZW5hbWVkICYmCisJCQlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lX3N1YiAmJgorCQkJZWNobyBhID5hICYmCisJCQlnaXQgYWRkIGEgJiYKKwkJCWdpdCBjb21taXQgLW1hICYmCisJCQlnaXQgcHVzaCBvcmlnaW4gcmVuYW1lX3N1YiAmJgorCQkJZ2l0IHJldi1wYXJzZSBIRUFEID4uLi8uLi9leHBlY3QKKwkJKSAmJgorCQlnaXQgYWRkIHN1Ym1vZHVsZV9yZW5hbWVkICYmCisJCWdpdCBjb21taXQgLW0gInVwZGF0ZSByZW5hbWVkIHN1Ym1vZHVsZSIgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIHJlbmFtZQorCSkgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCWdpdCByZXYtcGFyc2Ugb3JpZ2luL3JlbmFtZV9zdWIgPi4uLy4uL2FjdHVhbAorCQkpCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggbmV3IHN1Ym1vZHVsZSBjb21taXRzIG9uLWRlbWFuZCBvdXRzaWRlIHN0YW5kYXJkIHJlZnNwZWMiICcKKwkjIGFkZCBhIHNlY29uZCBzdWJtb2R1bGUgYW5kIGVuc3VyZSBpdCBpcyBhcm91bmQgaW4gZG93bnN0cmVhbSBmaXJzdAorCWdpdCBjbG9uZSBzdWJtb2R1bGUgc3ViMSAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIC4vc3ViMSAmJgorCWdpdCBjb21taXQgLW0gImFkZGluZyBhIHNlY29uZCBzdWJtb2R1bGUiICYmCisJZ2l0IC1DIGRvd25zdHJlYW0gcHVsbCAmJgorCWdpdCAtQyBkb3duc3RyZWFtIHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlICYmCisKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggJiYKKworCUM9JChnaXQgLUMgc3VibW9kdWxlIGNvbW1pdC10cmVlIC1tICJuZXcgY2hhbmdlIG91dHNpZGUgcmVmcy9oZWFkcyIgSEVBRF57dHJlZX0pICYmCisJZ2l0IC1DIHN1Ym1vZHVsZSB1cGRhdGUtcmVmIHJlZnMvY2hhbmdlcy8xICRDICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJEMgc3VibW9kdWxlICYmCisJdGVzdF90aWNrICYmCisKKwlEPSQoZ2l0IC1DIHN1YjEgY29tbWl0LXRyZWUgLW0gIm5ldyBjaGFuZ2Ugb3V0c2lkZSByZWZzL2hlYWRzIiBIRUFEXnt0cmVlfSkgJiYKKwlnaXQgLUMgc3ViMSB1cGRhdGUtcmVmIHJlZnMvY2hhbmdlcy8yICREICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJEQgc3ViMSAmJgorCisJZ2l0IGNvbW1pdCAtbSAidXBkYXRlZCBzdWJtb2R1bGVzIG91dHNpZGUgb2YgcmVmcy9oZWFkcyIgJiYKKwlFPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvY2hhbmdlcy8zICRFICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyBvcmlnaW4gcmVmcy9jaGFuZ2VzLzM6cmVmcy9oZWFkcy9teV9icmFuY2ggJiYKKwkJZ2l0IC1DIHN1Ym1vZHVsZSBjYXQtZmlsZSAtdCAkQyAmJgorCQlnaXQgLUMgc3ViMSBjYXQtZmlsZSAtdCAkRCAmJgorCQlnaXQgY2hlY2tvdXQgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgRkVUQ0hfSEVBRAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbmV3IHN1Ym1vZHVsZSBjb21taXQgb24tZGVtYW5kIGluIEZFVENIX0hFQUQnICcKKwkjIGRlcGVuZHMgb24gdGhlIHByZXZpb3VzIHRlc3QgZm9yIHNldHVwCisKKwlDPSQoZ2l0IC1DIHN1Ym1vZHVsZSBjb21taXQtdHJlZSAtbSAiYW5vdGhlciBjaGFuZ2Ugb3V0c2lkZSByZWZzL2hlYWRzIiBIRUFEXnt0cmVlfSkgJiYKKwlnaXQgLUMgc3VibW9kdWxlIHVwZGF0ZS1yZWYgcmVmcy9jaGFuZ2VzLzQgJEMgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAkQyBzdWJtb2R1bGUgJiYKKwl0ZXN0X3RpY2sgJiYKKworCUQ9JChnaXQgLUMgc3ViMSBjb21taXQtdHJlZSAtbSAiYW5vdGhlciBjaGFuZ2Ugb3V0c2lkZSByZWZzL2hlYWRzIiBIRUFEXnt0cmVlfSkgJiYKKwlnaXQgLUMgc3ViMSB1cGRhdGUtcmVmIHJlZnMvY2hhbmdlcy81ICREICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJEQgc3ViMSAmJgorCisJZ2l0IGNvbW1pdCAtbSAidXBkYXRlZCBzdWJtb2R1bGVzIG91dHNpZGUgb2YgcmVmcy9oZWFkcyIgJiYKKwlFPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvY2hhbmdlcy82ICRFICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyBvcmlnaW4gcmVmcy9jaGFuZ2VzLzYgJiYKKwkJZ2l0IC1DIHN1Ym1vZHVsZSBjYXQtZmlsZSAtdCAkQyAmJgorCQlnaXQgLUMgc3ViMSBjYXQtZmlsZSAtdCAkRCAmJgorCQlnaXQgY2hlY2tvdXQgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgRkVUQ0hfSEVBRAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbmV3IHN1Ym1vZHVsZSBjb21taXRzIG9uLWRlbWFuZCB3aXRob3V0IC5naXRtb2R1bGVzIGVudHJ5JyAnCisJIyBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyB0ZXN0IGZvciBzZXR1cAorCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWIxICYmCisJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCWdpdCBjb21taXQgLW0gImRlbGV0ZSBnaXRtb2R1bGVzIGZpbGUiICYmCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCWdpdCAtQyBkb3duc3RyZWFtIGZldGNoICYmCisJZ2l0IC1DIGRvd25zdHJlYW0gY2hlY2tvdXQgb3JpZ2luL21hc3RlciAmJgorCisJQz0kKGdpdCAtQyBzdWJtb2R1bGUgY29tbWl0LXRyZWUgLW0gInlldCBhbm90aGVyIGNoYW5nZSBvdXRzaWRlIHJlZnMvaGVhZHMiIEhFQURee3RyZWV9KSAmJgorCWdpdCAtQyBzdWJtb2R1bGUgdXBkYXRlLXJlZiByZWZzL2NoYW5nZXMvNyAkQyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICRDIHN1Ym1vZHVsZSAmJgorCXRlc3RfdGljayAmJgorCisJRD0kKGdpdCAtQyBzdWIxIGNvbW1pdC10cmVlIC1tICJ5ZXQgYW5vdGhlciBjaGFuZ2Ugb3V0c2lkZSByZWZzL2hlYWRzIiBIRUFEXnt0cmVlfSkgJiYKKwlnaXQgLUMgc3ViMSB1cGRhdGUtcmVmIHJlZnMvY2hhbmdlcy84ICREICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJEQgc3ViMSAmJgorCisJZ2l0IGNvbW1pdCAtbSAidXBkYXRlZCBzdWJtb2R1bGVzIG91dHNpZGUgb2YgcmVmcy9oZWFkcyIgJiYKKwlFPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvY2hhbmdlcy85ICRFICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyBvcmlnaW4gcmVmcy9jaGFuZ2VzLzkgJiYKKwkJZ2l0IC1DIHN1Ym1vZHVsZSBjYXQtZmlsZSAtdCAkQyAmJgorCQlnaXQgLUMgc3ViMSBjYXQtZmlsZSAtdCAkRCAmJgorCQlnaXQgY2hlY2tvdXQgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgRkVUQ0hfSEVBRAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbmV3IHN1Ym1vZHVsZSBjb21taXQgaW50ZXJtaXR0ZW50bHkgcmVmZXJlbmNlZCBieSBzdXBlcnByb2plY3QnICcKKwkjIGRlcGVuZHMgb24gdGhlIHByZXZpb3VzIHRlc3QgZm9yIHNldHVwCisKKwlEPSQoZ2l0IC1DIHN1YjEgY29tbWl0LXRyZWUgLW0gImNoYW5nZSAxMCBvdXRzaWRlIHJlZnMvaGVhZHMiIEhFQURee3RyZWV9KSAmJgorCUU9JChnaXQgLUMgc3ViMSBjb21taXQtdHJlZSAtbSAiY2hhbmdlIDExIG91dHNpZGUgcmVmcy9oZWFkcyIgSEVBRF57dHJlZX0pICYmCisJRj0kKGdpdCAtQyBzdWIxIGNvbW1pdC10cmVlIC1tICJjaGFuZ2UgMTIgb3V0c2lkZSByZWZzL2hlYWRzIiBIRUFEXnt0cmVlfSkgJiYKKworCWdpdCAtQyBzdWIxIHVwZGF0ZS1yZWYgcmVmcy9jaGFuZ2VzLzEwICREICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJEQgc3ViMSAmJgorCWdpdCBjb21taXQgLW0gInVwZGF0ZWQgc3VibW9kdWxlcyBvdXRzaWRlIG9mIHJlZnMvaGVhZHMiICYmCisKKwlnaXQgLUMgc3ViMSB1cGRhdGUtcmVmIHJlZnMvY2hhbmdlcy8xMSAkRSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICRFIHN1YjEgJiYKKwlnaXQgY29tbWl0IC1tICJ1cGRhdGVkIHN1Ym1vZHVsZXMgb3V0c2lkZSBvZiByZWZzL2hlYWRzIiAmJgorCisJZ2l0IC1DIHN1YjEgdXBkYXRlLXJlZiByZWZzL2NoYW5nZXMvMTIgJEYgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAkRiBzdWIxICYmCisJZ2l0IGNvbW1pdCAtbSAidXBkYXRlZCBzdWJtb2R1bGVzIG91dHNpZGUgb2YgcmVmcy9oZWFkcyIgJiYKKworCUc9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9jaGFuZ2VzLzEzICRHICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyBvcmlnaW4gcmVmcy9jaGFuZ2VzLzEzICYmCisKKwkJZ2l0IC1DIHN1YjEgY2F0LWZpbGUgLXQgJEQgJiYKKwkJZ2l0IC1DIHN1YjEgY2F0LWZpbGUgLXQgJEUgJiYKKwkJZ2l0IC1DIHN1YjEgY2F0LWZpbGUgLXQgJEYKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyNy1mZXRjaC1vZGQtcmVmcy5zaCBiL3QvdDU1MjctZmV0Y2gtb2RkLXJlZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2IwY2I5OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjctZmV0Y2gtb2RkLXJlZnMuc2gKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZmV0Y2hpbmcgb2Ygb2RkbHktbmFtZWQgcmVmcycKKy4gLi90ZXN0LWxpYi5zaAorCisjIGFmdGVyd2FyZHMgd2Ugd2lsbCBoYXZlOgorIyAgSEVBRCAtIHR3bworIyAgcmVmcy9mb3IvcmVmcy9oZWFkcy9tYXN0ZXIgLSBvbmUKKyMgIHJlZnMvaGVhZHMvbWFzdGVyIC0gdGhyZWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBvZGQgc3VmZml4IHJlZicgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9mb3IvcmVmcy9oZWFkcy9tYXN0ZXIgSEVBRCAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHRocmVlICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1ZmZpeCByZWYgaXMgaWdub3JlZCBkdXJpbmcgZmV0Y2gnICcKKwlnaXQgY2xvbmUgLS1iYXJlIGZpbGU6Ly8iJFBXRCIgc3VmZml4ICYmCisJZWNobyB0aHJlZSA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1zdWZmaXggbG9nIC0xIC0tZm9ybWF0PSVzIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyeSB0byBjcmVhdGUgcmVwbyB3aXRoIGFic3VyZGx5IGxvbmcgcmVmbmFtZScgJworCXJlZjI0MD0kWkVST19PSUQvJFpFUk9fT0lELyRaRVJPX09JRC8kWkVST19PSUQvJFpFUk9fT0lELyRaRVJPX09JRCAmJgorCXJlZjE0NDA9JHJlZjI0MC8kcmVmMjQwLyRyZWYyNDAvJHJlZjI0MC8kcmVmMjQwLyRyZWYyNDAgJiYKKwlnaXQgaW5pdCBsb25nICYmCisJKAorCQljZCBsb25nICYmCisJCXRlc3RfY29tbWl0IGxvbmcgJiYKKwkJdGVzdF9jb21taXQgbWFzdGVyCisJKSAmJgorCWlmIGdpdCAtQyBsb25nIHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy8kcmVmMTQ0MCBsb25nOyB0aGVuCisJCXRlc3Rfc2V0X3ByZXJlcSBMT05HX1JFRgorCWVsc2UKKwkJZWNobyA+JjIgImxvbmcgcmVmcyBub3Qgc3VwcG9ydGVkIgorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTE9OR19SRUYgJ2ZldGNoIGhhbmRsZXMgZXh0cmVtZWx5IGxvbmcgcmVmbmFtZScgJworCWdpdCBmZXRjaCBsb25nIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9uZy8qICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWxvbmcKKwltYXN0ZXIKKwlFT0YKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHN1YmplY3QpIiByZWZzL3JlbW90ZXMvbG9uZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExPTkdfUkVGICdwdXNoIGhhbmRsZXMgZXh0cmVtZWx5IGxvbmcgcmVmbmFtZScgJworCWdpdCBwdXNoIGxvbmcgOnJlZnMvaGVhZHMvJHJlZjE0NDAgJiYKKwlnaXQgLUMgbG9uZyBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoc3ViamVjdCkiIHJlZnMvaGVhZHMgPmFjdHVhbCAmJgorCWVjaG8gbWFzdGVyID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyOC1wdXNoLWRlZmF1bHQuc2ggYi90L3Q1NTI4LXB1c2gtZGVmYXVsdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZDFlMGMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyOC1wdXNoLWRlZmF1bHQuc2gKQEAgLTAsMCArMSwyMTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayB2YXJpb3VzIHB1c2guZGVmYXVsdCBzZXR0aW5ncycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBiYXJlIHJlbW90ZXMnICcKKwlnaXQgaW5pdCAtLWJhcmUgcmVwbzEgJiYKKwlnaXQgcmVtb3RlIGFkZCBwYXJlbnQxIHJlcG8xICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlcG8yICYmCisJZ2l0IHJlbW90ZSBhZGQgcGFyZW50MiByZXBvMiAmJgorCXRlc3RfY29tbWl0IG9uZSAmJgorCWdpdCBwdXNoIHBhcmVudDEgSEVBRCAmJgorCWdpdCBwdXNoIHBhcmVudDIgSEVBRAorJworCisjICQxID0gbG9jYWwgcmV2aXNpb24KKyMgJDIgPSByZW1vdGUgcmV2aXNpb24gKHRlc3RlZCB0byBiZSBlcXVhbCB0byB0aGUgbG9jYWwgb25lKQorIyAkMyA9IFtvcHRpb25hbF0gcmVwbyB0byBjaGVjayBmb3IgYWN0dWFsIG91dHB1dCAocmVwbzEgYnkgZGVmYXVsdCkKK2NoZWNrX3B1c2hlZF9jb21taXQgKCkgeworCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JyVoICVzJyAiJDEiID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPSIkezM6LXJlcG8xfSIgbG9nIC0xIC0tZm9ybWF0PSclaCAlcycgIiQyIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCisjICQxID0gcHVzaC5kZWZhdWx0IHZhbHVlCisjICQyID0gZXhwZWN0ZWQgdGFyZ2V0IGJyYW5jaCBmb3IgdGhlIHB1c2gKKyMgJDMgPSBbb3B0aW9uYWxdIHJlcG8gdG8gY2hlY2sgZm9yIGFjdHVhbCBvdXRwdXQgKHJlcG8xIGJ5IGRlZmF1bHQpCit0ZXN0X3B1c2hfc3VjY2VzcyAoKSB7CisJZ2l0ICR7MTorLWN9ICR7MTorcHVzaC5kZWZhdWx0PSIkMSJ9IHB1c2ggJiYKKwljaGVja19wdXNoZWRfY29tbWl0IEhFQUQgIiQyIiAiJDMiCit9CisKKyMgJDEgPSBwdXNoLmRlZmF1bHQgdmFsdWUKKyMgY2hlY2sgdGhhdCBwdXNoIGZhaWxzIGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IHJlbW90ZSBicmFuY2gKK3Rlc3RfcHVzaF9mYWlsdXJlICgpIHsKKwlnaXQgLS1naXQtZGlyPXJlcG8xIGxvZyAtLW5vLXdhbGsgLS1mb3JtYXQ9JyVoICVzJyAtLWFsbCA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0ICR7MTorLWN9ICR7MTorcHVzaC5kZWZhdWx0PSIkMSJ9IHB1c2ggJiYKKwlnaXQgLS1naXQtZGlyPXJlcG8xIGxvZyAtLW5vLXdhbGsgLS1mb3JtYXQ9JyVoICVzJyAtLWFsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCisjICQxID0gc3VjY2VzcyBvciBmYWlsdXJlCisjICQyID0gcHVzaC5kZWZhdWx0IHZhbHVlCisjICQzID0gYnJhbmNoIHRvIGNoZWNrIGZvciBhY3R1YWwgb3V0cHV0IChtYXN0ZXIgb3IgZm9vKQorIyAkNCA9IFtvcHRpb25hbF0gc3dpdGNoIHRvIHRyaWFuZ3VsYXIgd29ya2Zsb3cKK3Rlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgKCkgeworCXdvcmtmbG93PWNlbnRyYWwKKwlwdXNoZGVmYXVsdD1wYXJlbnQxCisJaWYgdGVzdCAtbiAiJHs0LX0iOyB0aGVuCisJCXdvcmtmbG93PXRyaWFuZ3VsYXIKKwkJcHVzaGRlZmF1bHQ9cGFyZW50MgorCWZpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicHVzaC5kZWZhdWx0ID0gJDIgJDEgaW4gJHdvcmtmbG93IHdvcmtmbG93cyIgIgorCQl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBwYXJlbnQxICYmCisJCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9mb28gJiYKKwkJdGVzdF9jb25maWcgcmVtb3RlLnB1c2hkZWZhdWx0ICRwdXNoZGVmYXVsdCAmJgorCQl0ZXN0X2NvbW1pdCBjb21taXQtZm9yLSQyJHs0Ky10cmlhbmd1bGFyfSAmJgorCQl0ZXN0X3B1c2hfJDEgJDIgJDMgJHs0K3JlcG8yfQorCSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInVwc3RyZWFtIiBwdXNoZXMgdG8gY29uZmlndXJlZCB1cHN0cmVhbScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBwYXJlbnQxICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSByZWZzL2hlYWRzL2ZvbyAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfcHVzaF9zdWNjZXNzIHVwc3RyZWFtIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcidXBzdHJlYW0iIGRvZXMgbm90IHB1c2ggb24gdW5jb25maWd1cmVkIHJlbW90ZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3VuY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwl0ZXN0X3B1c2hfZmFpbHVyZSB1cHN0cmVhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcidXBzdHJlYW0iIGRvZXMgbm90IHB1c2ggb24gdW5jb25maWd1cmVkIGJyYW5jaCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBwYXJlbnQxICYmCisJdGVzdF91bmNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlICYmCisJdGVzdF9jb21taXQgZm91ciAmJgorCXRlc3RfcHVzaF9mYWlsdXJlIHVwc3RyZWFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJ1cHN0cmVhbSIgZG9lcyBub3QgcHVzaCB3aGVuIHJlbW90ZXMgZG8gbm90IG1hdGNoJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHBhcmVudDEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvZm9vICYmCisJdGVzdF9jb25maWcgcHVzaC5kZWZhdWx0IHVwc3RyZWFtICYmCisJdGVzdF9jb21taXQgZml2ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHBhcmVudDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmcm9tL3RvIG5ldyBicmFuY2ggd2l0aCB1cHN0cmVhbSwgbWF0Y2hpbmcgYW5kIHNpbXBsZScgJworCWdpdCBjaGVja291dCAtYiBuZXctYnJhbmNoICYmCisJdGVzdF9wdXNoX2ZhaWx1cmUgc2ltcGxlICYmCisJdGVzdF9wdXNoX2ZhaWx1cmUgbWF0Y2hpbmcgJiYKKwl0ZXN0X3B1c2hfZmFpbHVyZSB1cHN0cmVhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGFtYmlndW91c2x5IG5hbWVkIGJyYW5jaCB3aXRoIHVwc3RyZWFtLCBtYXRjaGluZyBhbmQgc2ltcGxlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGFtYmlndW91cyAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5hbWJpZ3VvdXMucmVtb3RlIHBhcmVudDEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2guYW1iaWd1b3VzLm1lcmdlIHJlZnMvaGVhZHMvYW1iaWd1b3VzICYmCisJZ2l0IHRhZyBhbWJpZ3VvdXMgJiYKKwl0ZXN0X3B1c2hfc3VjY2VzcyBzaW1wbGUgYW1iaWd1b3VzICYmCisJdGVzdF9wdXNoX3N1Y2Nlc3MgbWF0Y2hpbmcgYW1iaWd1b3VzICYmCisJdGVzdF9wdXNoX3N1Y2Nlc3MgdXBzdHJlYW0gYW1iaWd1b3VzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZnJvbS90byBuZXcgYnJhbmNoIHdpdGggY3VycmVudCBjcmVhdGVzIHJlbW90ZSBicmFuY2gnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gubmV3LWJyYW5jaC5yZW1vdGUgcmVwbzEgJiYKKwlnaXQgY2hlY2tvdXQgbmV3LWJyYW5jaCAmJgorCXRlc3RfcHVzaF9zdWNjZXNzIGN1cnJlbnQgbmV3LWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIGV4aXN0aW5nIGJyYW5jaCwgd2l0aCBubyB1cHN0cmVhbSBjb25maWd1cmVkJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgcmVwbzEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9wdXNoX2ZhaWx1cmUgc2ltcGxlICYmCisJdGVzdF9wdXNoX2ZhaWx1cmUgdXBzdHJlYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBleGlzdGluZyBicmFuY2gsIHVwc3RyZWFtIGNvbmZpZ3VyZWQgd2l0aCBzYW1lIG5hbWUnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSByZXBvMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgc2l4ICYmCisJdGVzdF9wdXNoX3N1Y2Nlc3MgdXBzdHJlYW0gbWFzdGVyICYmCisJdGVzdF9jb21taXQgc2V2ZW4gJiYKKwl0ZXN0X3B1c2hfc3VjY2VzcyBzaW1wbGUgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gZXhpc3RpbmcgYnJhbmNoLCB1cHN0cmVhbSBjb25maWd1cmVkIHdpdGggZGlmZmVyZW50IG5hbWUnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSByZXBvMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9vdGhlci1uYW1lICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IGVpZ2h0ICYmCisJdGVzdF9wdXNoX3N1Y2Nlc3MgdXBzdHJlYW0gb3RoZXItbmFtZSAmJgorCXRlc3RfY29tbWl0IG5pbmUgJiYKKwl0ZXN0X3B1c2hfZmFpbHVyZSBzaW1wbGUgJiYKKwlnaXQgLS1naXQtZGlyPXJlcG8xIGxvZyAtMSAtLWZvcm1hdD0iJWggJXMiICJvdGhlci1uYW1lIiA+ZXhwZWN0LW90aGVyLW5hbWUgJiYKKwl0ZXN0X3B1c2hfc3VjY2VzcyBjdXJyZW50IG1hc3RlciAmJgorCWdpdCAtLWdpdC1kaXI9cmVwbzEgbG9nIC0xIC0tZm9ybWF0PSIlaCAlcyIgIm90aGVyLW5hbWUiID5hY3R1YWwtb3RoZXItbmFtZSAmJgorCXRlc3RfY21wIGV4cGVjdC1vdGhlci1uYW1lIGFjdHVhbC1vdGhlci1uYW1lCisnCisKKyMgV2UgYXJlIG9uICdtYXN0ZXInLCB3aGljaCBpbnRlZ3JhdGVzIHdpdGggJ2ZvbycgZnJvbSBwYXJlbnQxCisjIHJlbW90ZSAoc2V0IGluIHRlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgaGVscGVyKS4gIFB1c2ggdG8KKyMgcGFyZW50MSBpbiBjZW50cmFsaXplZCwgYW5kIHB1c2ggdG8gcGFyZW50MiBpbiB0cmlhbmd1bGFyIHdvcmtmbG93LgorIyBUaGUgcGFyZW50MSByZXBvc2l0b3J5IGhhcyAnbWFzdGVyJyBhbmQgJ2ZvbycgYnJhbmNoZXMsIHdoaWxlCisjIHRoZSBwYXJlbnQyIHJlcG9zaXRvcnkgaGFzIG9ubHkgJ21hc3RlcicgYnJhbmNoLgorIworIyB0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93KCkgYXJndW1lbnRzOgorIyAkMSA9IHN1Y2Nlc3Mgb3IgZmFpbHVyZQorIyAkMiA9IHB1c2guZGVmYXVsdCB2YWx1ZQorIyAkMyA9IGJyYW5jaCB0byBjaGVjayBmb3IgYWN0dWFsIG91dHB1dCAobWFzdGVyIG9yIGZvbykKKyMgJDQgPSBbb3B0aW9uYWxdIHN3aXRjaCB0byB0cmlhbmd1bGFyIHdvcmtmbG93CisKKyMgdXBkYXRlIHBhcmVudDEncyBtYXN0ZXIgKHdoaWNoIGlzIG5vdCBvdXIgdXBzdHJlYW0pCit0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IHN1Y2Nlc3MgY3VycmVudCBtYXN0ZXIKKworIyB1cGRhdGUgcGFyZW50MSdzIGZvbyAod2hpY2ggaXMgb3VyIHVwc3RyZWFtKQordGVzdF9wdXNoZGVmYXVsdF93b3JrZmxvdyBzdWNjZXNzIHVwc3RyZWFtIGZvbworCisjIHVwc3RyZWFtIGlzIGZvbyB3aGljaCBpcyBub3QgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYnJhbmNoCit0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IGZhaWx1cmUgc2ltcGxlIG1hc3RlcgorCisjIG1hc3RlciBhbmQgZm9vIGFyZSB1cGRhdGVkCit0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IHN1Y2Nlc3MgbWF0Y2hpbmcgbWFzdGVyCisKKyMgbWFzdGVyIGlzIHVwZGF0ZWQKK3Rlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgc3VjY2VzcyBjdXJyZW50IG1hc3RlciB0cmlhbmd1bGFyCisKKyMgdXBzdHJlYW0gbW9kZSBjYW5ub3QgYmUgdXNlZCBpbiB0cmlhbmd1bGFyCit0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IGZhaWx1cmUgdXBzdHJlYW0gZm9vIHRyaWFuZ3VsYXIKKworIyBpbiB0cmlhbmd1bGFyLCAnc2ltcGxlJyB3b3JrcyBhcyAnY3VycmVudCcgYW5kIHVwZGF0ZSB0aGUgYnJhbmNoCisjIHdpdGggdGhlIHNhbWUgbmFtZS4KK3Rlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgc3VjY2VzcyBzaW1wbGUgbWFzdGVyIHRyaWFuZ3VsYXIKKworIyBtYXN0ZXIgaXMgdXBkYXRlZCAocGFyZW50MiBkb2VzIG5vdCBoYXZlIGZvbykKK3Rlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgc3VjY2VzcyBtYXRjaGluZyBtYXN0ZXIgdHJpYW5ndWxhcgorCisjIGRlZmF1bHQgdGVzdHMsIHdoZW4gbm8gcHVzaC1kZWZhdWx0IGlzIHNwZWNpZmllZC4gVGhpcworIyBzaG91bGQgYmVoYXZlIHRoZSBzYW1lIGFzICJzaW1wbGUiIGluIG5vbi10cmlhbmd1bGFyCisjIHNldHRpbmdzLCBhbmQgYXMgImN1cnJlbnQiIG90aGVyd2lzZS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCBiZWhhdmlvciBhbGxvd3MgInNpbXBsZSIgcHVzaCcgJworCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHBhcmVudDEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnB1c2hkZWZhdWx0IHBhcmVudDEgJiYKKwl0ZXN0X2NvbW1pdCBkZWZhdWx0LW1hc3Rlci1tYXN0ZXIgJiYKKwl0ZXN0X3B1c2hfc3VjY2VzcyAiIiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCBiZWhhdmlvciByZWplY3RzIG5vbi1zaW1wbGUgcHVzaCcgJworCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHBhcmVudDEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvZm9vICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnB1c2hkZWZhdWx0IHBhcmVudDEgJiYKKwl0ZXN0X2NvbW1pdCBkZWZhdWx0LW1hc3Rlci1mb28gJiYKKwl0ZXN0X3B1c2hfZmFpbHVyZSAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWZhdWx0IHRyaWFuZ3VsYXIgYmVoYXZpb3IgYWN0cyBsaWtlICJjdXJyZW50IicgJworCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHBhcmVudDEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvZm9vICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnB1c2hkZWZhdWx0IHBhcmVudDIgJiYKKwl0ZXN0X2NvbW1pdCBkZWZhdWx0LXRyaWFuZ3VsYXIgJiYKKwl0ZXN0X3B1c2hfc3VjY2VzcyAiIiBtYXN0ZXIgcmVwbzIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTI5LXB1c2gtZXJyb3JzLnNoIGIvdC90NTUyOS1wdXNoLWVycm9ycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ODcxMzA3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyOS1wdXNoLWVycm9ycy5zaApAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGV0ZWN0IHNvbWUgcHVzaCBlcnJvcnMgZWFybHkgKGJlZm9yZSBjb250YWN0aW5nIHJlbW90ZSknCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29tbWl0cycgJworCXRlc3RfY29tbWl0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW1vdGUnICcKKwlnaXQgaW5pdCAtLWJhcmUgcmVtb3RlLmdpdCAmJgorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiByZW1vdGUuZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZha2UgcmVjZWl2ZS1wYWNrJyAnCisJRkFLRV9SUF9ST09UPSQocHdkKSAmJgorCWV4cG9ydCBGQUtFX1JQX1JPT1QgJiYKKwl3cml0ZV9zY3JpcHQgZmFrZS1ycCA8PC1cRU9GICYmCisJZWNobyB5ZXMgPiIkRkFLRV9SUF9ST09UIi9ycC1yYW4KKwlleGl0IDEKKwlFT0YKKwlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4ucmVjZWl2ZXBhY2sgIlwiXCRGQUtFX1JQX1JPT1QvZmFrZS1ycFwiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgbWlzc2luZyBicmFuY2hlcyBlYXJseScgJworCWVjaG8gbm8gPnJwLXJhbiAmJgorCWVjaG8gbm8gPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIG9yaWdpbiBtaXNzaW5nICYmCisJdGVzdF9jbXAgZXhwZWN0IHJwLXJhbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgbWlzc2luZyBzaGExIGV4cHJlc3Npb25zIGVhcmx5JyAnCisJZWNobyBubyA+cnAtcmFuICYmCisJZWNobyBubyA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggb3JpZ2luIG1hc3Rlcn4yOm1hc3RlciAmJgorCXRlc3RfY21wIGV4cGVjdCBycC1yYW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IGFtYmlndW91cyByZWZzIGVhcmx5JyAnCisJZ2l0IGJyYW5jaCBmb28gJiYKKwlnaXQgdGFnIGZvbyAmJgorCWVjaG8gbm8gPnJwLXJhbiAmJgorCWVjaG8gbm8gPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIG9yaWdpbiBmb28gJiYKKwl0ZXN0X2NtcCBleHBlY3QgcnAtcmFuCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzMC11cGxvYWQtcGFjay1lcnJvci5zaCBiL3QvdDU1MzAtdXBsb2FkLXBhY2stZXJyb3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGNlOWE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MzAtdXBsb2FkLXBhY2stZXJyb3Iuc2gKQEAgLTAsMCArMSwxMDYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdlcnJvcnMgaW4gdXBsb2FkLXBhY2snCisKKy4gLi90ZXN0LWxpYi5zaAorCitEPSQocHdkKQorCitjb3JydXB0X3JlcG8gKCkgeworCW9iamVjdF9zaGExPSQoZ2l0IHJldi1wYXJzZSAiJDEiKSAmJgorCW9iPSQoZXhwciAiJG9iamVjdF9zaGExIiA6ICJcKC4uXCkiKSAmJgorCWplY3Q9JChleHByICIkb2JqZWN0X3NoYTEiIDogIi4uXCguLipcKSIpICYmCisJcm0gLWYgIi5naXQvb2JqZWN0cy8kb2IvJGplY3QiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGFuZCBjb3JydXB0IHJlcG9zaXRvcnknICcKKwl0ZXN0X29pZF9pbml0ICYmCisJZWNobyBmaWxlID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IHJldi1wYXJzZSA6ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gb3JpZ2luYWwgJiYKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIGNoYW5nZWQgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGNoYW5nZWQgJiYKKwljb3JydXB0X3JlcG8gSEVBRDpmaWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwbG9hZC1wYWNrIGZhaWxzIGR1ZSB0byBlcnJvciBpbiBwYWNrLW9iamVjdHMgcGFja2luZycgJworCWhlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJaGV4c3o9JCh0ZXN0X29pZCBoZXhzeikgJiYKKwlwcmludGYgIiUwNHh3YW50ICVzXG4wMDAwMDAwOWRvbmVcbjAwMDAiIFwKKwkJJCgoJGhleHN6ICsgMTApKSAkaGVhZCA+aW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBsb2FkLXBhY2sgLiA8aW5wdXQgPi9kZXYvbnVsbCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJ1bmFibGUgdG8gcmVhZCIgb3V0cHV0LmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInBhY2stb2JqZWN0cyBkaWVkIiBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQgcmVwbyBkaWZmZXJlbnRseScgJworCisJZ2l0IGhhc2gtb2JqZWN0IC13IGZpbGUgJiYKKwljb3JydXB0X3JlcG8gSEVBRF5ee3RyZWV9CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGxvYWQtcGFjayBmYWlscyBkdWUgdG8gZXJyb3IgaW4gcmV2LWxpc3QnICcKKworCXByaW50ZiAiJTA0eHdhbnQgJXNcbiUwNHhzaGFsbG93ICVzMDAwMDAwMDlkb25lXG4wMDAwIiBcCisJCSQoKCRoZXhzeiArIDEwKSkgJChnaXQgcmV2LXBhcnNlIEhFQUQpIFwKKwkJJCgoJGhleHN6ICsgMTIpKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pID5pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGxvYWQtcGFjayAuIDxpbnB1dCA+L2Rldi9udWxsIDI+b3V0cHV0LmVyciAmJgorCWdyZXAgImJhZCB0cmVlIG9iamVjdCIgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGxvYWQtcGFjayBmYWlscyBkdWUgdG8gYmFkIHdhbnQgKG5vIG9iamVjdCknICcKKworCXByaW50ZiAiJTA0eHdhbnQgJXMgbXVsdGlfYWNrX2RldGFpbGVkXG4wMDAwMDAwOWRvbmVcbjAwMDAiIFwKKwkJJCgoJGhleHN6ICsgMjkpKSAkKHRlc3Rfb2lkIGRlYWRiZWVmKSA+aW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBsb2FkLXBhY2sgLiA8aW5wdXQgPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwlncmVwICJub3Qgb3VyIHJlZiIgb3V0cHV0LmVyciAmJgorCWdyZXAgIkVSUiIgb3V0cHV0ICYmCisJISBncmVwIG11bHRpX2Fja19kZXRhaWxlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwbG9hZC1wYWNrIGZhaWxzIGR1ZSB0byBiYWQgd2FudCAobm90IHRpcCknICcKKworCW9pZD0kKGVjaG8gYW4gb2JqZWN0IHdlIGhhdmUgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlwcmludGYgIiUwNHh3YW50ICVzIG11bHRpX2Fja19kZXRhaWxlZFxuMDAwMDAwMDlkb25lXG4wMDAwIiBcCisJCSQoKCRoZXhzeiArIDI5KSkgIiRvaWQiID5pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGxvYWQtcGFjayAuIDxpbnB1dCA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCWdyZXAgIm5vdCBvdXIgcmVmIiBvdXRwdXQuZXJyICYmCisJZ3JlcCAiRVJSIiBvdXRwdXQgJiYKKwkhIGdyZXAgbXVsdGlfYWNrX2RldGFpbGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBsb2FkLXBhY2sgZmFpbHMgZHVlIHRvIGVycm9yIGluIHBhY2stb2JqZWN0cyBlbnVtZXJhdGlvbicgJworCisJcHJpbnRmICIlMDR4d2FudCAlc1xuMDAwMDAwMDlkb25lXG4wMDAwIiBcCisJCSQoKGhleHN6ICsgMTApKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPmlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwbG9hZC1wYWNrIC4gPGlucHV0ID4vZGV2L251bGwgMj5vdXRwdXQuZXJyICYmCisJZ3JlcCAiYmFkIHRyZWUgb2JqZWN0IiBvdXRwdXQuZXJyICYmCisJZ3JlcCAicGFjay1vYmplY3RzIGRpZWQiIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGVtcHR5IHJlcG9zaXRvcnknICcKKworCW1rZGlyIGZvbyAmJgorCWNkIGZvbyAmJgorCWdpdCBpbml0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZmFpbHMnICcKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAuLiBtYXN0ZXIKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MzEtZGVlcC1zdWJtb2R1bGUtcHVzaC5zaCBiL3QvdDU1MzEtZGVlcC1zdWJtb2R1bGUtcHVzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YWQwNTllCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUzMS1kZWVwLXN1Ym1vZHVsZS1wdXNoLnNoCkBAIC0wLDAgKzEsNTg0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBwdXNoIHdpdGggc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIHB1Yi5naXQgJiYKKwlHSVRfRElSPXB1Yi5naXQgZ2l0IGluaXQgLS1iYXJlICYmCisJR0lUX0RJUj1wdWIuZ2l0IGdpdCBjb25maWcgcmVjZWl2ZS5mc2Nrb2JqZWN0cyB0cnVlICYmCisJbWtkaXIgd29yayAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCQlta2RpciAtcCBnYXIvYmFnZSAmJgorCQkoCisJCQljZCBnYXIvYmFnZSAmJgorCQkJZ2l0IGluaXQgJiYKKwkJCWdpdCBjb25maWcgcHVzaC5kZWZhdWx0IG1hdGNoaW5nICYmCisJCQk+anVuayAmJgorCQkJZ2l0IGFkZCBqdW5rICYmCisJCQlnaXQgY29tbWl0IC1tICJJbml0aWFsIGp1bmsiCisJCSkgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJJbml0aWFsIHN1cGVycHJvamVjdCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd29ya3Mgd2l0aCByZWNvcmRlZCBnaXRsaW5rJyAnCisJKAorCQljZCB3b3JrICYmCisJCWdpdCBwdXNoIC4uL3B1Yi5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGlmIHN1Ym1vZHVsZSBoYXMgbm8gcmVtb3RlJyAnCisJKAorCQljZCB3b3JrL2dhci9iYWdlICYmCisJCT5qdW5rMiAmJgorCQlnaXQgYWRkIGp1bmsyICYmCisJCWdpdCBjb21taXQgLW0gIlNlY29uZCBqdW5rIgorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJTZWNvbmQgY29tbWl0IGZvciBnYXIvYmFnZSIgJiYKKwkJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9Y2hlY2sgLi4vcHViLmdpdCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZmFpbHMgaWYgc3VibW9kdWxlIGNvbW1pdCBub3Qgb24gcmVtb3RlJyAnCisJKAorCQljZCB3b3JrL2dhciAmJgorCQlnaXQgY2xvbmUgLS1iYXJlIGJhZ2UgLi4vLi4vc3VibW9kdWxlLmdpdCAmJgorCQljZCBiYWdlICYmCisJCWdpdCByZW1vdGUgYWRkIG9yaWdpbiAuLi8uLi8uLi9zdWJtb2R1bGUuZ2l0ICYmCisJCWdpdCBmZXRjaCAmJgorCQk+anVuazMgJiYKKwkJZ2l0IGFkZCBqdW5rMyAmJgorCQlnaXQgY29tbWl0IC1tICJUaGlyZCBqdW5rIgorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJUaGlyZCBjb21taXQgZm9yIGdhci9iYWdlIiAmJgorCQkjIHRoZSBwdXNoIHNob3VsZCBmYWlsIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9Y2hlY2sKKwkJIyBvbiB0aGUgY29tbWFuZCBsaW5lLi4uCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPWNoZWNrIC4uL3B1Yi5naXQgbWFzdGVyICYmCisKKwkJIyAuLi5vciBpZiBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uLgorCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgcHVzaC5yZWN1cnNlU3VibW9kdWxlcz1jaGVjayBwdXNoIC4uL3B1Yi5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHN1Y2NlZWRzIGFmdGVyIGNvbW1pdCB3YXMgcHVzaGVkIHRvIHJlbW90ZScgJworCSgKKwkJY2Qgd29yay9nYXIvYmFnZSAmJgorCQlnaXQgcHVzaCBvcmlnaW4gbWFzdGVyCisJKSAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1jaGVjayAuLi9wdWIuZ2l0IG1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBzdWNjZWVkcyBpZiBzdWJtb2R1bGUgY29tbWl0IG5vdCBvbiByZW1vdGUgYnV0IHVzaW5nIG9uLWRlbWFuZCBvbiBjb21tYW5kIGxpbmUnICcKKwkoCisJCWNkIHdvcmsvZ2FyL2JhZ2UgJiYKKwkJPnJlY3Vyc2Utb24tZGVtYW5kLW9uLWNvbW1hbmQtbGluZSAmJgorCQlnaXQgYWRkIHJlY3Vyc2Utb24tZGVtYW5kLW9uLWNvbW1hbmQtbGluZSAmJgorCQlnaXQgY29tbWl0IC1tICJSZWN1cnNlIG9uLWRlbWFuZCBvbiBjb21tYW5kIGxpbmUganVuayIKKwkpICYmCisJKAorCQljZCB3b3JrICYmCisJCWdpdCBhZGQgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVjdXJzZSBvbi1kZW1hbmQgb24gY29tbWFuZCBsaW5lIGZvciBnYXIvYmFnZSIgJiYKKwkJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIC4uL3B1Yi5naXQgbWFzdGVyICYmCisJCSMgQ2hlY2sgdGhhdCB0aGUgc3VwZXJtb2R1bGUgY29tbWl0IGdvdCB0aGVyZQorCQlnaXQgZmV0Y2ggLi4vcHViLmdpdCAmJgorCQlnaXQgZGlmZiAtLXF1aWV0IEZFVENIX0hFQUQgbWFzdGVyICYmCisJCSMgQ2hlY2sgdGhhdCB0aGUgc3VibW9kdWxlIGNvbW1pdCBnb3QgdGhlcmUgdG9vCisJCWNkIGdhci9iYWdlICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgb3JpZ2luL21hc3RlciBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggc3VjY2VlZHMgaWYgc3VibW9kdWxlIGNvbW1pdCBub3Qgb24gcmVtb3RlIGJ1dCB1c2luZyBvbi1kZW1hbmQgZnJvbSBjb25maWcnICcKKwkoCisJCWNkIHdvcmsvZ2FyL2JhZ2UgJiYKKwkJPnJlY3Vyc2Utb24tZGVtYW5kLWZyb20tY29uZmlnICYmCisJCWdpdCBhZGQgcmVjdXJzZS1vbi1kZW1hbmQtZnJvbS1jb25maWcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVjdXJzZSBvbi1kZW1hbmQgZnJvbSBjb25maWcganVuayIKKwkpICYmCisJKAorCQljZCB3b3JrICYmCisJCWdpdCBhZGQgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVjdXJzZSBvbi1kZW1hbmQgZnJvbSBjb25maWcgZm9yIGdhci9iYWdlIiAmJgorCQlnaXQgLWMgcHVzaC5yZWN1cnNlU3VibW9kdWxlcz1vbi1kZW1hbmQgcHVzaCAuLi9wdWIuZ2l0IG1hc3RlciAmJgorCQkjIENoZWNrIHRoYXQgdGhlIHN1cGVybW9kdWxlIGNvbW1pdCBnb3QgdGhlcmUKKwkJZ2l0IGZldGNoIC4uL3B1Yi5naXQgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCBGRVRDSF9IRUFEIG1hc3RlciAmJgorCQkjIENoZWNrIHRoYXQgdGhlIHN1Ym1vZHVsZSBjb21taXQgZ290IHRoZXJlIHRvbworCQljZCBnYXIvYmFnZSAmJgorCQlnaXQgZGlmZiAtLXF1aWV0IG9yaWdpbi9tYXN0ZXIgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHN1Y2NlZWRzIGlmIHN1Ym1vZHVsZSBjb21taXQgbm90IG9uIHJlbW90ZSBidXQgdXNpbmcgYXV0by1vbi1kZW1hbmQgdmlhIHN1Ym1vZHVsZS5yZWN1cnNlIGNvbmZpZycgJworCSgKKwkJY2Qgd29yay9nYXIvYmFnZSAmJgorCQk+cmVjdXJzZS1vbi1kZW1hbmQtZnJvbS1zdWJtb2R1bGUtcmVjdXJzZS1jb25maWcgJiYKKwkJZ2l0IGFkZCByZWN1cnNlLW9uLWRlbWFuZC1mcm9tLXN1Ym1vZHVsZS1yZWN1cnNlLWNvbmZpZyAmJgorCQlnaXQgY29tbWl0IC1tICJSZWN1cnNlIHN1Ym1vZHVsZS5yZWN1cnNlIGZyb20gY29uZmlnIGp1bmsiCisJKSAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgYWRkIGdhci9iYWdlICYmCisJCWdpdCBjb21taXQgLW0gIlJlY3Vyc2Ugc3VibW9kdWxlLnJlY3Vyc2UgZnJvbSBjb25maWcgZm9yIGdhci9iYWdlIiAmJgorCQlnaXQgLWMgc3VibW9kdWxlLnJlY3Vyc2UgcHVzaCAuLi9wdWIuZ2l0IG1hc3RlciAmJgorCQkjIENoZWNrIHRoYXQgdGhlIHN1cGVybW9kdWxlIGNvbW1pdCBnb3QgdGhlcmUKKwkJZ2l0IGZldGNoIC4uL3B1Yi5naXQgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCBGRVRDSF9IRUFEIG1hc3RlciAmJgorCQkjIENoZWNrIHRoYXQgdGhlIHN1Ym1vZHVsZSBjb21taXQgZ290IHRoZXJlIHRvbworCQljZCBnYXIvYmFnZSAmJgorCQlnaXQgZGlmZiAtLXF1aWV0IG9yaWdpbi9tYXN0ZXIgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHJlY3Vyc2Utc3VibW9kdWxlcyBvbiBjb21tYW5kIGxpbmUgb3ZlcnJpZGVzIGNvbmZpZycgJworCSgKKwkJY2Qgd29yay9nYXIvYmFnZSAmJgorCQk+cmVjdXJzZS1jaGVjay1vbi1jb21tYW5kLWxpbmUtb3ZlcnJpZGluZy1jb25maWcgJiYKKwkJZ2l0IGFkZCByZWN1cnNlLWNoZWNrLW9uLWNvbW1hbmQtbGluZS1vdmVycmlkaW5nLWNvbmZpZyAmJgorCQlnaXQgY29tbWl0IC1tICJSZWN1cnNlIG9uIGNvbW1hbmQtbGluZSBvdmVycmlkaW5nIGNvbmZpZyBqdW5rIgorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJSZWN1cnNlIG9uIGNvbW1hbmQtbGluZSBvdmVycmlkaW5nIGNvbmZpZyBmb3IgZ2FyL2JhZ2UiICYmCisKKwkJIyBFbnN1cmUgdGhhdCB3ZSBjYW4gb3ZlcnJpZGUgb24tZGVtYW5kIGluIHRoZSBjb25maWcKKwkJIyB0byBqdXN0IGNoZWNrIHN1Ym1vZHVsZXMKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHB1c2gucmVjdXJzZVN1Ym1vZHVsZXM9b24tZGVtYW5kIHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9Y2hlY2sgLi4vcHViLmdpdCBtYXN0ZXIgJiYKKwkJIyBDaGVjayB0aGF0IHRoZSBzdXBlcm1vZHVsZSBjb21taXQgZGlkIG5vdCBnZXQgdGhlcmUKKwkJZ2l0IGZldGNoIC4uL3B1Yi5naXQgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCBGRVRDSF9IRUFEIG1hc3Rlcl4gJiYKKwkJIyBDaGVjayB0aGF0IHRoZSBzdWJtb2R1bGUgY29tbWl0IGRpZCBub3QgZ2V0IHRoZXJlCisJCShjZCBnYXIvYmFnZSAmJiBnaXQgZGlmZiAtLXF1aWV0IG9yaWdpbi9tYXN0ZXIgbWFzdGVyXikgJiYKKworCQkjIEVuc3VyZSB0aGF0IHdlIGNhbiBvdmVycmlkZSBjaGVjayBpbiB0aGUgY29uZmlnIHRvCisJCSMgZGlzYWJsZSBzdWJtb2R1bGUgcmVjdXJzaW9uIGVudGlyZWx5CisJCShjZCBnYXIvYmFnZSAmJiBnaXQgZGlmZiAtLXF1aWV0IG9yaWdpbi9tYXN0ZXIgbWFzdGVyXikgJiYKKwkJZ2l0IC1jIHB1c2gucmVjdXJzZVN1Ym1vZHVsZXM9b24tZGVtYW5kIHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9bm8gLi4vcHViLmdpdCBtYXN0ZXIgJiYKKwkJZ2l0IGZldGNoIC4uL3B1Yi5naXQgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCBGRVRDSF9IRUFEIG1hc3RlciAmJgorCQkoY2QgZ2FyL2JhZ2UgJiYgZ2l0IGRpZmYgLS1xdWlldCBvcmlnaW4vbWFzdGVyIG1hc3Rlcl4pICYmCisKKwkJIyBFbnN1cmUgdGhhdCB3ZSBjYW4gb3ZlcnJpZGUgY2hlY2sgaW4gdGhlIGNvbmZpZyB0bworCQkjIGRpc2FibGUgc3VibW9kdWxlIHJlY3Vyc2lvbiBlbnRpcmVseSAoYWx0ZXJuYXRpdmUgZm9ybSkKKwkJZ2l0IC1jIHB1c2gucmVjdXJzZVN1Ym1vZHVsZXM9b24tZGVtYW5kIHB1c2ggLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgLi4vcHViLmdpdCBtYXN0ZXIgJiYKKwkJZ2l0IGZldGNoIC4uL3B1Yi5naXQgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCBGRVRDSF9IRUFEIG1hc3RlciAmJgorCQkoY2QgZ2FyL2JhZ2UgJiYgZ2l0IGRpZmYgLS1xdWlldCBvcmlnaW4vbWFzdGVyIG1hc3Rlcl4pICYmCisKKwkJIyBFbnN1cmUgdGhhdCB3ZSBjYW4gb3ZlcnJpZGUgY2hlY2sgaW4gdGhlIGNvbmZpZyB0bworCQkjIHB1c2ggdGhlIHN1Ym1vZHVsZSB0b28KKwkJZ2l0IC1jIHB1c2gucmVjdXJzZVN1Ym1vZHVsZXM9Y2hlY2sgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgLi4vcHViLmdpdCBtYXN0ZXIgJiYKKwkJZ2l0IGZldGNoIC4uL3B1Yi5naXQgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCBGRVRDSF9IRUFEIG1hc3RlciAmJgorCQkoY2QgZ2FyL2JhZ2UgJiYgZ2l0IGRpZmYgLS1xdWlldCBvcmlnaW4vbWFzdGVyIG1hc3RlcikKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggcmVjdXJzZS1zdWJtb2R1bGVzIGxhc3Qgb25lIHdpbnMgb24gY29tbWFuZCBsaW5lJyAnCisJKAorCQljZCB3b3JrL2dhci9iYWdlICYmCisJCT5yZWN1cnNlLWNoZWNrLW9uLWNvbW1hbmQtbGluZS1vdmVycmlkaW5nLWVhcmxpZXItY29tbWFuZC1saW5lICYmCisJCWdpdCBhZGQgcmVjdXJzZS1jaGVjay1vbi1jb21tYW5kLWxpbmUtb3ZlcnJpZGluZy1lYXJsaWVyLWNvbW1hbmQtbGluZSAmJgorCQlnaXQgY29tbWl0IC1tICJSZWN1cnNlIG9uIGNvbW1hbmQtbGluZSBvdmVycmlkaWluZyBlYXJsaWVyIGNvbW1hbmQtbGluZSBqdW5rIgorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJSZWN1cnNlIG9uIGNvbW1hbmQtbGluZSBvdmVycmlkaW5nIGVhcmxpZXIgY29tbWFuZC1saW5lIGZvciBnYXIvYmFnZSIgJiYKKworCQkjIHNob3VsZCByZXN1bHQgaW4gImNoZWNrIgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgLS1yZWN1cnNlLXN1Ym1vZHVsZXM9Y2hlY2sgLi4vcHViLmdpdCBtYXN0ZXIgJiYKKwkJIyBDaGVjayB0aGF0IHRoZSBzdXBlcm1vZHVsZSBjb21taXQgZGlkIG5vdCBnZXQgdGhlcmUKKwkJZ2l0IGZldGNoIC4uL3B1Yi5naXQgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCBGRVRDSF9IRUFEIG1hc3Rlcl4gJiYKKwkJIyBDaGVjayB0aGF0IHRoZSBzdWJtb2R1bGUgY29tbWl0IGRpZCBub3QgZ2V0IHRoZXJlCisJCShjZCBnYXIvYmFnZSAmJiBnaXQgZGlmZiAtLXF1aWV0IG9yaWdpbi9tYXN0ZXIgbWFzdGVyXikgJiYKKworCQkjIHNob3VsZCByZXN1bHQgaW4gIm5vIgorCQlnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgLS1yZWN1cnNlLXN1Ym1vZHVsZXM9bm8gLi4vcHViLmdpdCBtYXN0ZXIgJiYKKwkJIyBDaGVjayB0aGF0IHRoZSBzdXBlcm1vZHVsZSBjb21taXQgZGlkIGdldCB0aGVyZQorCQlnaXQgZmV0Y2ggLi4vcHViLmdpdCAmJgorCQlnaXQgZGlmZiAtLXF1aWV0IEZFVENIX0hFQUQgbWFzdGVyICYmCisJCSMgQ2hlY2sgdGhhdCB0aGUgc3VibW9kdWxlIGNvbW1pdCBkaWQgbm90IGdldCB0aGVyZQorCQkoY2QgZ2FyL2JhZ2UgJiYgZ2l0IGRpZmYgLS1xdWlldCBvcmlnaW4vbWFzdGVyIG1hc3Rlcl4pICYmCisKKwkJIyBzaG91bGQgcmVzdWx0IGluICJubyIKKwkJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzIC4uL3B1Yi5naXQgbWFzdGVyICYmCisJCSMgQ2hlY2sgdGhhdCB0aGUgc3VibW9kdWxlIGNvbW1pdCBkaWQgbm90IGdldCB0aGVyZQorCQkoY2QgZ2FyL2JhZ2UgJiYgZ2l0IGRpZmYgLS1xdWlldCBvcmlnaW4vbWFzdGVyIG1hc3Rlcl4pICYmCisKKwkJIyBCdXQgdGhlIG9wdGlvbnMgaW4gdGhlIG90aGVyIG9yZGVyIHNob3VsZCBwdXNoIHRoZSBzdWJtb2R1bGUKKwkJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9Y2hlY2sgLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIC4uL3B1Yi5naXQgbWFzdGVyICYmCisJCSMgQ2hlY2sgdGhhdCB0aGUgc3VibW9kdWxlIGNvbW1pdCBkaWQgZ2V0IHRoZXJlCisJCWdpdCBmZXRjaCAuLi9wdWIuZ2l0ICYmCisJCShjZCBnYXIvYmFnZSAmJiBnaXQgZGlmZiAtLXF1aWV0IG9yaWdpbi9tYXN0ZXIgbWFzdGVyKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBzdWNjZWVkcyBpZiBzdWJtb2R1bGUgY29tbWl0IG5vdCBvbiByZW1vdGUgdXNpbmcgb24tZGVtYW5kIGZyb20gY21kbGluZSBvdmVycmlkaW5nIGNvbmZpZycgJworCSgKKwkJY2Qgd29yay9nYXIvYmFnZSAmJgorCQk+cmVjdXJzZS1vbi1kZW1hbmQtb24tY29tbWFuZC1saW5lLW92ZXJyaWRpbmctY29uZmlnICYmCisJCWdpdCBhZGQgcmVjdXJzZS1vbi1kZW1hbmQtb24tY29tbWFuZC1saW5lLW92ZXJyaWRpbmctY29uZmlnICYmCisJCWdpdCBjb21taXQgLW0gIlJlY3Vyc2Ugb24tZGVtYW5kIG9uIGNvbW1hbmQtbGluZSBvdmVycmlkaW5nIGNvbmZpZyBqdW5rIgorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJSZWN1cnNlIG9uLWRlbWFuZCBvbiBjb21tYW5kLWxpbmUgb3ZlcnJpZGluZyBjb25maWcgZm9yIGdhci9iYWdlIiAmJgorCQlnaXQgLWMgcHVzaC5yZWN1cnNlU3VibW9kdWxlcz1jaGVjayBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCAuLi9wdWIuZ2l0IG1hc3RlciAmJgorCQkjIENoZWNrIHRoYXQgdGhlIHN1cGVybW9kdWxlIGNvbW1pdCBnb3QgdGhlcmUKKwkJZ2l0IGZldGNoIC4uL3B1Yi5naXQgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCBGRVRDSF9IRUFEIG1hc3RlciAmJgorCQkjIENoZWNrIHRoYXQgdGhlIHN1Ym1vZHVsZSBjb21taXQgZ290IHRoZXJlCisJCWNkIGdhci9iYWdlICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgb3JpZ2luL21hc3RlciBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggc3VjY2VlZHMgaWYgc3VibW9kdWxlIGNvbW1pdCBkaXNhYmxpbmcgcmVjdXJzaW9uIGZyb20gY21kbGluZSBvdmVycmlkaW5nIGNvbmZpZycgJworCSgKKwkJY2Qgd29yay9nYXIvYmFnZSAmJgorCQk+cmVjdXJzZS1kaXNhYmxlLW9uLWNvbW1hbmQtbGluZS1vdmVycmlkaW5nLWNvbmZpZyAmJgorCQlnaXQgYWRkIHJlY3Vyc2UtZGlzYWJsZS1vbi1jb21tYW5kLWxpbmUtb3ZlcnJpZGluZy1jb25maWcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVjdXJzZSBkaXNhYmxlIG9uIGNvbW1hbmQtbGluZSBvdmVycmlkaW5nIGNvbmZpZyBqdW5rIgorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJSZWN1cnNlIGRpc2FibGUgb24gY29tbWFuZC1saW5lIG92ZXJyaWRpbmcgY29uZmlnIGZvciBnYXIvYmFnZSIgJiYKKwkJZ2l0IC1jIHB1c2gucmVjdXJzZVN1Ym1vZHVsZXM9Y2hlY2sgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1ubyAuLi9wdWIuZ2l0IG1hc3RlciAmJgorCQkjIENoZWNrIHRoYXQgdGhlIHN1cGVybW9kdWxlIGNvbW1pdCBnb3QgdGhlcmUKKwkJZ2l0IGZldGNoIC4uL3B1Yi5naXQgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCBGRVRDSF9IRUFEIG1hc3RlciAmJgorCQkjIEJ1dCB0aGF0IHRoZSBzdWJtb2R1bGUgY29tbWl0IGRpZCBub3QKKwkJKCBjZCBnYXIvYmFnZSAmJiBnaXQgZGlmZiAtLXF1aWV0IG9yaWdpbi9tYXN0ZXIgbWFzdGVyXiApICYmCisJCSMgTm93IHB1c2ggaXQgdG8gYXZvaWQgY29uZnVzaW5nIGZ1dHVyZSB0ZXN0cworCQlnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgLi4vcHViLmdpdCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggc3VjY2VlZHMgaWYgc3VibW9kdWxlIGNvbW1pdCBkaXNhYmxpbmcgcmVjdXJzaW9uIGZyb20gY21kbGluZSAoYWx0ZXJuYXRpdmUgZm9ybSkgb3ZlcnJpZGluZyBjb25maWcnICcKKwkoCisJCWNkIHdvcmsvZ2FyL2JhZ2UgJiYKKwkJPnJlY3Vyc2UtZGlzYWJsZS1vbi1jb21tYW5kLWxpbmUtYWx0LW92ZXJyaWRpbmctY29uZmlnICYmCisJCWdpdCBhZGQgcmVjdXJzZS1kaXNhYmxlLW9uLWNvbW1hbmQtbGluZS1hbHQtb3ZlcnJpZGluZy1jb25maWcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVjdXJzZSBkaXNhYmxlIG9uIGNvbW1hbmQtbGluZSBhbHRlcm5hdGl2ZSBvdmVycmlkaW5nIGNvbmZpZyBqdW5rIgorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJSZWN1cnNlIGRpc2FibGUgb24gY29tbWFuZC1saW5lIGFsdGVybmF0aXZlIG92ZXJyaWRpbmcgY29uZmlnIGZvciBnYXIvYmFnZSIgJiYKKwkJZ2l0IC1jIHB1c2gucmVjdXJzZVN1Ym1vZHVsZXM9Y2hlY2sgcHVzaCAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyAuLi9wdWIuZ2l0IG1hc3RlciAmJgorCQkjIENoZWNrIHRoYXQgdGhlIHN1cGVybW9kdWxlIGNvbW1pdCBnb3QgdGhlcmUKKwkJZ2l0IGZldGNoIC4uL3B1Yi5naXQgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCBGRVRDSF9IRUFEIG1hc3RlciAmJgorCQkjIEJ1dCB0aGF0IHRoZSBzdWJtb2R1bGUgY29tbWl0IGRpZCBub3QKKwkJKCBjZCBnYXIvYmFnZSAmJiBnaXQgZGlmZiAtLXF1aWV0IG9yaWdpbi9tYXN0ZXIgbWFzdGVyXiApICYmCisJCSMgTm93IHB1c2ggaXQgdG8gYXZvaWQgY29uZnVzaW5nIGZ1dHVyZSB0ZXN0cworCQlnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgLi4vcHViLmdpdCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBlbnRyeSBwb2ludGluZyBhdCBhIHRhZyBpcyBlcnJvcicgJworCWdpdCAtQyB3b3JrL2dhci9iYWdlIHRhZyAtYSB0ZXN0MSAtbSAidGFnIiAmJgorCXRhZz0kKGdpdCAtQyB3b3JrL2dhci9iYWdlIHJldi1wYXJzZSB0ZXN0MV57dGFnfSkgJiYKKwlnaXQgLUMgd29yayB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICIkdGFnIiBnYXIvYmFnZSAmJgorCWdpdCAtQyB3b3JrIGNvbW1pdCAtbSAiYmFkIGNvbW1pdCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyB3b3JrIHJlc2V0IC0taGFyZCBIRUFEXiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgd29yayBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCAuLi9wdWIuZ2l0IG1hc3RlciAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImlzIGEgdGFnLCBub3QgYSBjb21taXQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGZhaWxzIGlmIHJlY3Vyc2Ugc3VibW9kdWxlcyBvcHRpb24gcGFzc2VkIGFzIHllcycgJworCSgKKwkJY2Qgd29yay9nYXIvYmFnZSAmJgorCQk+cmVjdXJzZS1wdXNoLWZhaWxzLWlmLXJlY3Vyc2Utc3VibW9kdWxlcy1wYXNzZWQtYXMteWVzICYmCisJCWdpdCBhZGQgcmVjdXJzZS1wdXNoLWZhaWxzLWlmLXJlY3Vyc2Utc3VibW9kdWxlcy1wYXNzZWQtYXMteWVzICYmCisJCWdpdCBjb21taXQgLW0gIlJlY3Vyc2UgcHVzaCBmYWlscyBpZiByZWN1cnNlIHN1Ym1vZHVsZXMgb3B0aW9uIHBhc3NlZCBhcyB5ZXMiCisJKSAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgYWRkIGdhci9iYWdlICYmCisJCWdpdCBjb21taXQgLW0gIlJlY3Vyc2UgcHVzaCBmYWlscyBpZiByZWN1cnNlIHN1Ym1vZHVsZXMgb3B0aW9uIHBhc3NlZCBhcyB5ZXMgZm9yIGdhci9iYWdlIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz15ZXMgLi4vcHViLmdpdCBtYXN0ZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHB1c2gucmVjdXJzZVN1Ym1vZHVsZXM9eWVzIHB1c2ggLi4vcHViLmdpdCBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIC4uL3B1Yi5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGZhaWxzIHdoZW4gY29tbWl0IG9uIG11bHRpcGxlIGJyYW5jaGVzIGlmIG9uZSBicmFuY2ggaGFzIG5vIHJlbW90ZScgJworCSgKKwkJY2Qgd29yay9nYXIvYmFnZSAmJgorCQk+anVuazQgJiYKKwkJZ2l0IGFkZCBqdW5rNCAmJgorCQlnaXQgY29tbWl0IC1tICJGb3VydGgganVuayIKKwkpICYmCisJKAorCQljZCB3b3JrICYmCisJCWdpdCBicmFuY2ggYnJhbmNoMiAmJgorCQlnaXQgYWRkIGdhci9iYWdlICYmCisJCWdpdCBjb21taXQgLW0gIkZvdXJ0aCBjb21taXQgZm9yIGdhci9iYWdlIiAmJgorCQlnaXQgY2hlY2tvdXQgYnJhbmNoMiAmJgorCQkoCisJCQljZCBnYXIvYmFnZSAmJgorCQkJZ2l0IGNoZWNrb3V0IEhFQUR+MQorCQkpICYmCisJCT5qdW5rMSAmJgorCQlnaXQgYWRkIGp1bmsxICYmCisJCWdpdCBjb21taXQgLW0gIkZpcnN0IGp1bmsiICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPWNoZWNrIC4uL3B1Yi5naXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggc3VjY2VlZHMgaWYgc3VibW9kdWxlIGhhcyBubyByZW1vdGUgYW5kIGlzIG9uIHRoZSBmaXJzdCBzdXBlcnByb2plY3QgY29tbWl0JyAnCisJZ2l0IGluaXQgLS1iYXJlIGEgJiYKKwlnaXQgY2xvbmUgYSBhMSAmJgorCSgKKwkJY2QgYTEgJiYKKwkJZ2l0IGluaXQgYiAmJgorCQkoCisJCQljZCBiICYmCisJCQk+anVuayAmJgorCQkJZ2l0IGFkZCBqdW5rICYmCisJCQlnaXQgY29tbWl0IC1tICJpbml0aWFsIgorCQkpICYmCisJCWdpdCBhZGQgYiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGRlZCBzdWJtb2R1bGUiICYmCisJCWdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPWNoZWNrIG9yaWdpbiBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdW5wdXNoZWQgc3VibW9kdWxlcyB3aGVuIG5vdCBuZWVkZWQnICcKKwkoCisJCWNkIHdvcmsgJiYKKwkJKAorCQkJY2QgZ2FyL2JhZ2UgJiYKKwkJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJCT5qdW5rNSAmJgorCQkJZ2l0IGFkZCBqdW5rNSAmJgorCQkJZ2l0IGNvbW1pdCAtbSAiRmlmdGgganVuayIgJiYKKwkJCWdpdCBwdXNoICYmCisJCQlnaXQgcmV2LXBhcnNlIG9yaWdpbi9tYXN0ZXIgPi4uLy4uLy4uL2V4cGVjdGVkCisJCSkgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgYWRkIGdhci9iYWdlICYmCisJCWdpdCBjb21taXQgLW0gIkZpZnRoIGNvbW1pdCBmb3IgZ2FyL2JhZ2UiICYmCisJCWdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCAuLi9wdWIuZ2l0IG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZS5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB1bnB1c2hlZCBzdWJtb2R1bGVzIHdoZW4gbm90IG5lZWRlZCAyJyAnCisJKAorCQljZCBzdWJtb2R1bGUuZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgbWFzdGVyID4uLi9leHBlY3RlZAorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJKAorCQkJY2QgZ2FyL2JhZ2UgJiYKKwkJCT5qdW5rNiAmJgorCQkJZ2l0IGFkZCBqdW5rNiAmJgorCQkJZ2l0IGNvbW1pdCAtbSAiU2l4dGgganVuayIKKwkJKSAmJgorCQk+anVuazIgJiYKKwkJZ2l0IGFkZCBqdW5rMiAmJgorCQlnaXQgY29tbWl0IC1tICJTZWNvbmQganVuayBmb3Igd29yayIgJiYKKwkJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIC4uL3B1Yi5naXQgbWFzdGVyCisJKSAmJgorCSgKKwkJY2Qgc3VibW9kdWxlLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIG1hc3RlciA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHVucHVzaGVkIHN1Ym1vZHVsZXMgcmVjdXJzaXZlbHknICcKKwkoCisJCWNkIHdvcmsgJiYKKwkJKAorCQkJY2QgZ2FyL2JhZ2UgJiYKKwkJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJCT4ganVuazcgJiYKKwkJCWdpdCBhZGQganVuazcgJiYKKwkJCWdpdCBjb21taXQgLW0gIlNldmVudGgganVuayIgJiYKKwkJCWdpdCByZXYtcGFyc2UgbWFzdGVyID4uLi8uLi8uLi9leHBlY3RlZAorCQkpICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJTZXZlbnRoIGNvbW1pdCBmb3IgZ2FyL2JhZ2UiICYmCisJCWdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCAuLi9wdWIuZ2l0IG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZS5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB1bnB1c2hhYmxlIHN1Ym1vZHVsZSByZWN1cnNpdmVseSBmYWlscycgJworCSgKKwkJY2Qgd29yayAmJgorCQkoCisJCQljZCBnYXIvYmFnZSAmJgorCQkJZ2l0IHJldi1wYXJzZSBvcmlnaW4vbWFzdGVyID4uLi8uLi8uLi9leHBlY3RlZCAmJgorCQkJZ2l0IGNoZWNrb3V0IG1hc3Rlcn4wICYmCisJCQk+IGp1bms4ICYmCisJCQlnaXQgYWRkIGp1bms4ICYmCisJCQlnaXQgY29tbWl0IC1tICJFaWdodGgganVuayIKKwkJKSAmJgorCQlnaXQgYWRkIGdhci9iYWdlICYmCisJCWdpdCBjb21taXQgLW0gIkVpZ2h0aCBjb21taXQgZm9yIGdhci9iYWdlIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgLi4vcHViLmdpdCBtYXN0ZXIKKwkpICYmCisJKAorCQljZCBzdWJtb2R1bGUuZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgbWFzdGVyID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCAtQyB3b3JrIHJlc2V0IC0taGFyZCBtYXN0ZXJeICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1kcnktcnVuIGRvZXMgbm90IHJlY3Vyc2l2ZWx5IHVwZGF0ZSBzdWJtb2R1bGVzJyAnCisJKAorCQljZCB3b3JrL2dhci9iYWdlICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPi4uLy4uLy4uL2V4cGVjdGVkX3N1Ym1vZHVsZSAmJgorCQk+IGp1bms5ICYmCisJCWdpdCBhZGQganVuazkgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTmludGgganVuayIgJiYKKworCQkjIEdvIHVwIHRvICd3b3JrJyBkaXJlY3RvcnkKKwkJY2QgLi4vLi4gJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgcmV2LXBhcnNlIG1hc3RlciA+Li4vZXhwZWN0ZWRfcHViICYmCisJCWdpdCBhZGQgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTmludGggY29tbWl0IGZvciBnYXIvYmFnZSIgJiYKKwkJZ2l0IHB1c2ggLS1kcnktcnVuIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCAuLi9wdWIuZ2l0IG1hc3RlcgorCSkgJiYKKwlnaXQgLUMgc3VibW9kdWxlLmdpdCByZXYtcGFyc2UgbWFzdGVyID5hY3R1YWxfc3VibW9kdWxlICYmCisJZ2l0IC1DIHB1Yi5naXQgcmV2LXBhcnNlIG1hc3RlciA+YWN0dWFsX3B1YiAmJgorCXRlc3RfY21wIGV4cGVjdGVkX3B1YiBhY3R1YWxfcHViICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfc3VibW9kdWxlIGFjdHVhbF9zdWJtb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLWRyeS1ydW4gZG9lcyBub3QgcmVjdXJzaXZlbHkgdXBkYXRlIHN1Ym1vZHVsZXMnICcKKwlnaXQgLUMgd29yayBwdXNoIC0tZHJ5LXJ1biAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbmx5IC4uL3B1Yi5naXQgbWFzdGVyICYmCisKKwlnaXQgLUMgc3VibW9kdWxlLmdpdCByZXYtcGFyc2UgbWFzdGVyID5hY3R1YWxfc3VibW9kdWxlICYmCisJZ2l0IC1DIHB1Yi5naXQgcmV2LXBhcnNlIG1hc3RlciA+YWN0dWFsX3B1YiAmJgorCXRlc3RfY21wIGV4cGVjdGVkX3B1YiBhY3R1YWxfcHViICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfc3VibW9kdWxlIGFjdHVhbF9zdWJtb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBvbmx5IHVucHVzaGVkIHN1Ym1vZHVsZXMgcmVjdXJzaXZlbHknICcKKwlnaXQgLUMgd29yay9nYXIvYmFnZSByZXYtcGFyc2UgbWFzdGVyID5leHBlY3RlZF9zdWJtb2R1bGUgJiYKKwlnaXQgLUMgcHViLmdpdCByZXYtcGFyc2UgbWFzdGVyID5leHBlY3RlZF9wdWIgJiYKKworCWdpdCAtQyB3b3JrIHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b25seSAuLi9wdWIuZ2l0IG1hc3RlciAmJgorCisJZ2l0IC1DIHN1Ym1vZHVsZS5naXQgcmV2LXBhcnNlIG1hc3RlciA+YWN0dWFsX3N1Ym1vZHVsZSAmJgorCWdpdCAtQyBwdWIuZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPmFjdHVhbF9wdWIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9zdWJtb2R1bGUgYWN0dWFsX3N1Ym1vZHVsZSAmJgorCXRlc3RfY21wIGV4cGVjdGVkX3B1YiBhY3R1YWxfcHViCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggcHJvcGFnYXRpbmcgdGhlIHJlbW90ZXMgbmFtZSB0byBhIHN1Ym1vZHVsZScgJworCWdpdCAtQyB3b3JrIHJlbW90ZSBhZGQgb3JpZ2luIC4uL3B1Yi5naXQgJiYKKwlnaXQgLUMgd29yayByZW1vdGUgYWRkIHB1YiAuLi9wdWIuZ2l0ICYmCisKKwk+IHdvcmsvZ2FyL2JhZ2UvanVuazEwICYmCisJZ2l0IC1DIHdvcmsvZ2FyL2JhZ2UgYWRkIGp1bmsxMCAmJgorCWdpdCAtQyB3b3JrL2dhci9iYWdlIGNvbW1pdCAtbSAiVGVudGgganVuayIgJiYKKwlnaXQgLUMgd29yayBhZGQgZ2FyL2JhZ2UgJiYKKwlnaXQgLUMgd29yayBjb21taXQgLW0gIlRlbnRoIGp1bmsgYWRkZWQgdG8gZ2FyL2JhZ2UiICYmCisKKwkjIEZhaWxzIHdoZW4gc3VibW9kdWxlIGRvZXMgbm90IGhhdmUgYSBtYXRjaGluZyByZW1vdGUKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgd29yayBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCBwdWIgbWFzdGVyICYmCisJIyBTdWNjZWVkcyB3aGVuIHN1Ym1vZHVsZXMgaGFzIG1hdGNoaW5nIHJlbW90ZSBhbmQgcmVmc3BlYworCWdpdCAtQyB3b3JrIHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIG9yaWdpbiBtYXN0ZXIgJiYKKworCWdpdCAtQyBzdWJtb2R1bGUuZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPmFjdHVhbF9zdWJtb2R1bGUgJiYKKwlnaXQgLUMgcHViLmdpdCByZXYtcGFyc2UgbWFzdGVyID5hY3R1YWxfcHViICYmCisJZ2l0IC1DIHdvcmsvZ2FyL2JhZ2UgcmV2LXBhcnNlIG1hc3RlciA+ZXhwZWN0ZWRfc3VibW9kdWxlICYmCisJZ2l0IC1DIHdvcmsgcmV2LXBhcnNlIG1hc3RlciA+ZXhwZWN0ZWRfcHViICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfc3VibW9kdWxlIGFjdHVhbF9zdWJtb2R1bGUgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9wdWIgYWN0dWFsX3B1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHByb3BhZ2F0aW5nIHJlZnNwZWMgdG8gYSBzdWJtb2R1bGUnICcKKwk+IHdvcmsvZ2FyL2JhZ2UvanVuazExICYmCisJZ2l0IC1DIHdvcmsvZ2FyL2JhZ2UgYWRkIGp1bmsxMSAmJgorCWdpdCAtQyB3b3JrL2dhci9iYWdlIGNvbW1pdCAtbSAiRWxldmVudGgganVuayIgJiYKKworCWdpdCAtQyB3b3JrIGNoZWNrb3V0IGJyYW5jaDIgJiYKKwlnaXQgLUMgd29yayBhZGQgZ2FyL2JhZ2UgJiYKKwlnaXQgLUMgd29yayBjb21taXQgLW0gInVwZGF0aW5nIGdhci9iYWdlIGluIGJyYW5jaDIiICYmCisKKwkjIEZhaWxzIHdoZW4gc3VibW9kdWxlIGRvZXMgbm90IGhhdmUgYSBtYXRjaGluZyBicmFuY2gKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgd29yayBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCBvcmlnaW4gYnJhbmNoMiAmJgorCSMgRmFpbHMgd2hlbiByZWZzcGVjIGluY2x1ZGVzIGFuIG9iamVjdCBpZAorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyB3b3JrIHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIG9yaWdpbiBcCisJCSIkKGdpdCAtQyB3b3JrIHJldi1wYXJzZSBicmFuY2gyKTpyZWZzL2hlYWRzL2JyYW5jaDIiICYmCisJIyBGYWlscyB3aGVuIHJlZnNwZWMgaW5jbHVkZXMgSEVBRCBhbmQgcGFyZW50IGFuZCBzdWJtb2R1bGUgZG8gbm90CisJIyBoYXZlIHRoZSBzYW1lIG5hbWVkIGJyYW5jaCBjaGVja2VkIG91dAorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyB3b3JrIHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIG9yaWdpbiBcCisJCUhFQUQ6cmVmcy9oZWFkcy9icmFuY2gyICYmCisKKwlnaXQgLUMgd29yay9nYXIvYmFnZSBicmFuY2ggYnJhbmNoMiBtYXN0ZXIgJiYKKwlnaXQgLUMgd29yayBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCBvcmlnaW4gYnJhbmNoMiAmJgorCisJZ2l0IC1DIHN1Ym1vZHVsZS5naXQgcmV2LXBhcnNlIGJyYW5jaDIgPmFjdHVhbF9zdWJtb2R1bGUgJiYKKwlnaXQgLUMgcHViLmdpdCByZXYtcGFyc2UgYnJhbmNoMiA+YWN0dWFsX3B1YiAmJgorCWdpdCAtQyB3b3JrL2dhci9iYWdlIHJldi1wYXJzZSBicmFuY2gyID5leHBlY3RlZF9zdWJtb2R1bGUgJiYKKwlnaXQgLUMgd29yayByZXYtcGFyc2UgYnJhbmNoMiA+ZXhwZWN0ZWRfcHViICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfc3VibW9kdWxlIGFjdHVhbF9zdWJtb2R1bGUgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9wdWIgYWN0dWFsX3B1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHByb3BhZ2F0aW5nIEhFQUQgcmVmc3BlYyB0byBhIHN1Ym1vZHVsZScgJworCWdpdCAtQyB3b3JrL2dhci9iYWdlIGNoZWNrb3V0IGJyYW5jaDIgJiYKKwk+IHdvcmsvZ2FyL2JhZ2UvanVuazEyICYmCisJZ2l0IC1DIHdvcmsvZ2FyL2JhZ2UgYWRkIGp1bmsxMiAmJgorCWdpdCAtQyB3b3JrL2dhci9iYWdlIGNvbW1pdCAtbSAiVHdlbGZ0aCBqdW5rIiAmJgorCisJZ2l0IC1DIHdvcmsgY2hlY2tvdXQgYnJhbmNoMiAmJgorCWdpdCAtQyB3b3JrIGFkZCBnYXIvYmFnZSAmJgorCWdpdCAtQyB3b3JrIGNvbW1pdCAtbSAidXBkYXRpbmcgZ2FyL2JhZ2UgaW4gYnJhbmNoMiIgJiYKKworCSMgUGFzc2VzIHNpbmNlIHRoZSBzdXBlcnByb2plY3QgYW5kIHN1Ym1vZHVsZXMgSEVBRCBhcmUgYm90aCBvbiBicmFuY2gyCisJZ2l0IC1DIHdvcmsgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgb3JpZ2luIFwKKwkJSEVBRDpyZWZzL2hlYWRzL2JyYW5jaDIgJiYKKworCWdpdCAtQyBzdWJtb2R1bGUuZ2l0IHJldi1wYXJzZSBicmFuY2gyID5hY3R1YWxfc3VibW9kdWxlICYmCisJZ2l0IC1DIHB1Yi5naXQgcmV2LXBhcnNlIGJyYW5jaDIgPmFjdHVhbF9wdWIgJiYKKwlnaXQgLUMgd29yay9nYXIvYmFnZSByZXYtcGFyc2UgYnJhbmNoMiA+ZXhwZWN0ZWRfc3VibW9kdWxlICYmCisJZ2l0IC1DIHdvcmsgcmV2LXBhcnNlIGJyYW5jaDIgPmV4cGVjdGVkX3B1YiAmJgorCXRlc3RfY21wIGV4cGVjdGVkX3N1Ym1vZHVsZSBhY3R1YWxfc3VibW9kdWxlICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfcHViIGFjdHVhbF9wdWIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTMyLWZldGNoLXByb3h5LnNoIGIvdC90NTUzMi1mZXRjaC1wcm94eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YzI3OTg2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUzMi1mZXRjaC1wcm94eS5zaApAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZmV0Y2hpbmcgdmlhIGdpdDovLyB1c2luZyBjb3JlLmdpdHByb3h5JworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbW90ZSByZXBvJyAnCisJZ2l0IGluaXQgcmVtb3RlICYmCisJKGNkIHJlbW90ZSAmJgorCSBlY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLW0gb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBwcm94eSBzY3JpcHQnICcKKwl3cml0ZV9zY3JpcHQgcHJveHktZ2V0LWNtZCAiJFBFUkxfUEFUSCIgPDwtXEVPRiAmJgorCXJlYWQoU1RESU4sICRidWYsIDQpOworCW15ICRuID0gaGV4KCRidWYpIC0gNDsKKwlyZWFkKFNURElOLCAkYnVmLCAkbik7CisJbXkgKCRjbWQsICRvdGhlcikgPSBzcGxpdCAvXDAvLCAkYnVmOworCSMgZHJvcCBhYnNvbHV0ZS1wYXRoIG9uIHJlcG8gbmFtZQorCSRjbWQgPX4gc3sgL317IH07CisJcHJpbnQgJGNtZDsKKwlFT0YKKworCXdyaXRlX3NjcmlwdCBwcm94eSA8PC1cRU9GCisJZWNobyA+JjIgInByb3h5aW5nIGZvciAkKiIKKwljbWQ9JCguL3Byb3h5LWdldC1jbWQpCisJZWNobyA+JjIgIlJ1bm5pbmcgJGNtZCIKKwlleGVjICRjbWQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbG9jYWwgcmVwbycgJworCWdpdCByZW1vdGUgYWRkIGZha2UgZ2l0Oi8vZXhhbXBsZS5jb20vcmVtb3RlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmdpdHByb3h5IC4vcHJveHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggdGhyb3VnaCBwcm94eSB3b3JrcycgJworCWdpdCBmZXRjaCBmYWtlICYmCisJZWNobyBvbmUgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmdW5ueSBob3N0bmFtZXMgYXJlIHJlamVjdGVkIGJlZm9yZSBydW5uaW5nIHByb3h5JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIGdpdDovLy1yZW1vdGUvcmVwby5naXQgMj5zdGRlcnIgJiYKKwkhIGdyZXAgInByb3h5aW5nIGZvciIgc3RkZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzMy1wdXNoLWNhcy5zaCBiL3QvdDU1MzMtcHVzaC1jYXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGIwZWIxZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MzMtcHVzaC1jYXMuc2gKQEAgLTAsMCArMSwyNTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjb21wYXJlICYgc3dhcCBwdXNoIGZvcmNlL2RlbGV0ZSBzYWZldHknCisKKy4gLi90ZXN0LWxpYi5zaAorCitzZXR1cF9zcmNkc3RfYmFzaWMgKCkgeworCXJtIC1mciBzcmMgZHN0ICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLiBzcmMgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCBzcmMgZHN0ICYmCisJKAorCQljZCBzcmMgJiYgZ2l0IGNoZWNrb3V0IEhFQUReMAorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJIyBjcmVhdGUgdGVtcGxhdGUgcmVwb3NpdG9yeQorCXRlc3RfY29tbWl0IEEgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJdGVzdF9jb21taXQgQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHVwZGF0ZSAocHJvdGVjdGVkKScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfY29tbWl0IEQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlPW1hc3RlcjptYXN0ZXIgb3JpZ2luIG1hc3RlciAyPmVyciAmJgorCQlncmVwICJzdGFsZSBpbmZvIiBlcnIKKwkpICYmCisJZ2l0IGxzLXJlbW90ZSAuIHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHVwZGF0ZSAocHJvdGVjdGVkLCBmb3JjZWQpJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9jb21taXQgRCAmJgorCQlnaXQgcHVzaCAtLWZvcmNlIC0tZm9yY2Utd2l0aC1sZWFzZT1tYXN0ZXI6bWFzdGVyIG9yaWdpbiBtYXN0ZXIgMj5lcnIgJiYKKwkJZ3JlcCAiZm9yY2VkIHVwZGF0ZSIgZXJyCisJKSAmJgorCWdpdCBscy1yZW1vdGUgZHN0IHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHVwZGF0ZSAocHJvdGVjdGVkLCB0cmFja2luZyknICcKKwlzZXR1cF9zcmNkc3RfYmFzaWMgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IEQgJiYKKwkJZ2l0IGNoZWNrb3V0IEhFQUReMAorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9jb21taXQgRSAmJgorCQlnaXQgbHMtcmVtb3RlIC4gcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgPmV4cGVjdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2U9bWFzdGVyIG9yaWdpbiBtYXN0ZXIgJiYKKwkJZ2l0IGxzLXJlbW90ZSAuIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHVwZGF0ZSAocHJvdGVjdGVkLCB0cmFja2luZywgZm9yY2VkKScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJdGVzdF9jb21taXQgRCAmJgorCQlnaXQgY2hlY2tvdXQgSEVBRF4wCisJKSAmJgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfY29tbWl0IEUgJiYKKwkJZ2l0IGxzLXJlbW90ZSAuIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5leHBlY3QgJiYKKwkJZ2l0IHB1c2ggLS1mb3JjZSAtLWZvcmNlLXdpdGgtbGVhc2U9bWFzdGVyIG9yaWdpbiBtYXN0ZXIKKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBkc3QgcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCBscy1yZW1vdGUgc3JjIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gdXBkYXRlIChhbGxvd2VkKScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfY29tbWl0IEQgJiYKKwkJZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlPW1hc3RlcjptYXN0ZXJeIG9yaWdpbiBtYXN0ZXIKKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBkc3QgcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCBscy1yZW1vdGUgc3JjIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gdXBkYXRlIChhbGxvd2VkLCB0cmFja2luZyknICcKKwlzZXR1cF9zcmNkc3RfYmFzaWMgJiYKKwkoCisJCWNkIGRzdCAmJgorCQl0ZXN0X2NvbW1pdCBEICYmCisJCWdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZT1tYXN0ZXIgb3JpZ2luIG1hc3RlciAyPmVyciAmJgorCQkhIGdyZXAgImZvcmNlZCB1cGRhdGUiIGVycgorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIGRzdCByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byB1cGRhdGUgKGFsbG93ZWQgZXZlbiB0aG91Z2ggbm8tZmYpJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCQl0ZXN0X2NvbW1pdCBEICYmCisJCWdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZT1tYXN0ZXIgb3JpZ2luIG1hc3RlciAyPmVyciAmJgorCQlncmVwICJmb3JjZWQgdXBkYXRlIiBlcnIKKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBkc3QgcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCBscy1yZW1vdGUgc3JjIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gZGVsZXRlIChwcm90ZWN0ZWQpJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZT1tYXN0ZXI6bWFzdGVyXiBvcmlnaW4gOm1hc3RlcgorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIGRlbGV0ZSAocHJvdGVjdGVkLCBmb3JjZWQpJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IHB1c2ggLS1mb3JjZSAtLWZvcmNlLXdpdGgtbGVhc2U9bWFzdGVyOm1hc3Rlcl4gb3JpZ2luIDptYXN0ZXIKKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBkZWxldGUgKGFsbG93ZWQpJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlPW1hc3RlciBvcmlnaW4gOm1hc3RlciAyPmVyciAmJgorCQlncmVwIGRlbGV0ZWQgZXJyCisJKSAmJgorCWdpdCBscy1yZW1vdGUgc3JjIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGV2ZXJ5dGhpbmcgd2l0aCBkZWZhdWx0IGZvcmNlLXdpdGgtbGVhc2UgKHByb3RlY3RlZCknICcKKwlzZXR1cF9zcmNkc3RfYmFzaWMgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgYnJhbmNoIG5hc3RlciBtYXN0ZXJeCisJKSAmJgorCWdpdCBscy1yZW1vdGUgc3JjIHJlZnMvaGVhZHMvXCogPmV4cGVjdCAmJgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZSBvcmlnaW4gbWFzdGVyIG1hc3RlcjpuYXN0ZXIKKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9cKiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBldmVyeXRoaW5nIHdpdGggZGVmYXVsdCBmb3JjZS13aXRoLWxlYXNlIChhbGxvd2VkKScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBicmFuY2ggbmFzdGVyIG1hc3Rlcl4KKwkpICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZSBvcmlnaW4gbWFzdGVyIG1hc3RlcjpuYXN0ZXIKKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBkc3QgcmVmcy9oZWFkcy9tYXN0ZXIgfAorCXNlZCAtZSAicy9tYXN0ZXIvbmFzdGVyLyIgPmV4cGVjdCAmJgorCWdpdCBscy1yZW1vdGUgc3JjIHJlZnMvaGVhZHMvbmFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyBicmFuY2ggY292ZXJlZCBieSBmb3JjZS13aXRoLWxlYXNlJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGJyYW5jaCBicmFuY2ggbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZT1icmFuY2ggb3JpZ2luIGJyYW5jaAorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIGRzdCByZWZzL2hlYWRzL2JyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9icmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IGJyYW5jaCBjb3ZlcmVkIGJ5IGZvcmNlLXdpdGgtbGVhc2UgKGV4cGxpY2l0KScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBicmFuY2ggYnJhbmNoIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2U9YnJhbmNoOiBvcmlnaW4gYnJhbmNoCisJKSAmJgorCWdpdCBscy1yZW1vdGUgZHN0IHJlZnMvaGVhZHMvYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL2JyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgYnJhbmNoIGFscmVhZHkgZXhpc3RzJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBzcmMgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCBtYXN0ZXIgJiYKKwkJdGVzdF9jb21taXQgRgorCSkgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgYnJhbmNoIGJyYW5jaCBtYXN0ZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlPWJyYW5jaDogb3JpZ2luIGJyYW5jaAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFja2dyb3VuZCB1cGRhdGVzIG9mIFJFTU9URSBjYW4gYmUgbWl0aWdhdGVkIHdpdGggYSBub24tdXBkYXRlZCBSRU1PVEUtcHVzaCcgJworCXJtIC1yZiBzcmMgZHN0ICYmCisJZ2l0IGluaXQgLS1iYXJlIHNyYy5iYXJlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3JjLmJhcmUiICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgc3JjLmJhcmUgZHN0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZHN0IiAmJgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfY29tbWl0IEcgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgb3JpZ2luLXB1c2ggLi4vc3JjLmJhcmUgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luLXB1c2ggbWFzdGVyOm1hc3RlcgorCSkgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCBzcmMuYmFyZSBkc3QyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZHN0MiIgJiYKKwkoCisJCWNkIGRzdDIgJiYKKwkJdGVzdF9jb21taXQgSCAmJgorCQlnaXQgcHVzaAorCSkgJiYKKwkoCisJCWNkIGRzdCAmJgorCQl0ZXN0X2NvbW1pdCBJICYmCisJCWdpdCBmZXRjaCBvcmlnaW4gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlIG9yaWdpbi1wdXNoICYmCisJCWdpdCBmZXRjaCBvcmlnaW4tcHVzaCAmJgorCQlnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2Ugb3JpZ2luLXB1c2gKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzNC1wdXNoLXNpZ25lZC5zaCBiL3QvdDU1MzQtcHVzaC1zaWduZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDMwMzMxZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MzQtcHVzaC1zaWduZWQuc2gKQEAgLTAsMCArMSwyNzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzaWduZWQgcHVzaCcKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1ncGcuc2gKKworcHJlcGFyZV9kc3QgKCkgeworCXJtIC1mciBkc3QgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIGRzdCAmJgorCisJZ2l0IHB1c2ggZHN0IG1hc3Rlcjpub29wIG1hc3RlcjpmZiBtYXN0ZXI6bm9mZgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwkjIG1hc3RlciwgZmYgYW5kIG5vZmYgYnJhbmNoZXMgcG9pbnRpbmcgYXQgdGhlIHNhbWUgY29tbWl0CisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGluaXRpYWwgJiYKKworCWdpdCBjaGVja291dCAtYiBub29wICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZmICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5vZmYgJiYKKworCSMgbm9vcCBzdGF5cyB0aGUgc2FtZSwgZmYgYWR2YW5jZXMsIG5vZmYgcmV3cml0ZXMKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1hbWVuZCAtbSByZXdyaXR0ZW4gJiYKKwlnaXQgY2hlY2tvdXQgZmYgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zaWduZWQgcHVzaCBkb2VzIG5vdCBzZW5kIHB1c2ggY2VydGlmaWNhdGUnICcKKwlwcmVwYXJlX2RzdCAmJgorCW1rZGlyIC1wIGRzdC8uZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IGRzdC8uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZSA8PC1cRU9GICYmCisJIyBkaXNjYXJkIHRoZSB1cGRhdGUgbGlzdAorCWNhdCA+L2Rldi9udWxsCisJIyByZWNvcmQgdGhlIHB1c2ggY2VydGlmaWNhdGUKKwlpZiB0ZXN0IC1uICIke0dJVF9QVVNIX0NFUlQtfSIKKwl0aGVuCisJCWdpdCBjYXQtZmlsZSBibG9iICRHSVRfUFVTSF9DRVJUID4uLi9wdXNoLWNlcnQKKwlmaQorCUVPRgorCisJZ2l0IHB1c2ggZHN0IG5vb3AgZmYgK25vZmYgJiYKKwkhIHRlc3QgLWYgZHN0L3B1c2gtY2VydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWxraW5nIHdpdGggYSByZWNlaXZlciB3aXRob3V0IHB1c2ggY2VydGlmaWNhdGUgc3VwcG9ydCcgJworCXByZXBhcmVfZHN0ICYmCisJbWtkaXIgLXAgZHN0Ly5naXQvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgZHN0Ly5naXQvaG9va3MvcG9zdC1yZWNlaXZlIDw8LVxFT0YgJiYKKwkjIGRpc2NhcmQgdGhlIHVwZGF0ZSBsaXN0CisJY2F0ID4vZGV2L251bGwKKwkjIHJlY29yZCB0aGUgcHVzaCBjZXJ0aWZpY2F0ZQorCWlmIHRlc3QgLW4gIiR7R0lUX1BVU0hfQ0VSVC19IgorCXRoZW4KKwkJZ2l0IGNhdC1maWxlIGJsb2IgJEdJVF9QVVNIX0NFUlQgPi4uL3B1c2gtY2VydAorCWZpCisJRU9GCisKKwlnaXQgcHVzaCBkc3Qgbm9vcCBmZiArbm9mZiAmJgorCSEgdGVzdCAtZiBkc3QvcHVzaC1jZXJ0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1zaWduZWQgZmFpbHMgd2l0aCBhIHJlY2VpdmVyIHdpdGhvdXQgcHVzaCBjZXJ0aWZpY2F0ZSBzdXBwb3J0JyAnCisJcHJlcGFyZV9kc3QgJiYKKwlta2RpciAtcCBkc3QvLmdpdC9ob29rcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tc2lnbmVkIGRzdCBub29wIGZmICtub2ZmIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1zaWduZWQ9MSBpcyBhY2NlcHRlZCcgJworCXByZXBhcmVfZHN0ICYmCisJbWtkaXIgLXAgZHN0Ly5naXQvaG9va3MgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXNpZ25lZD0xIGRzdCBub29wIGZmICtub2ZmIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdubyBjZXJ0aWZpY2F0ZSBmb3IgYSBzaWduZWQgcHVzaCB3aXRoIG5vIHVwZGF0ZScgJworCXByZXBhcmVfZHN0ICYmCisJbWtkaXIgLXAgZHN0Ly5naXQvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgZHN0Ly5naXQvaG9va3MvcG9zdC1yZWNlaXZlIDw8LVxFT0YgJiYKKwlpZiB0ZXN0IC1uICIke0dJVF9QVVNIX0NFUlQtfSIKKwl0aGVuCisJCWdpdCBjYXQtZmlsZSBibG9iICRHSVRfUFVTSF9DRVJUID4uLi9wdXNoLWNlcnQKKwlmaQorCUVPRgorCWdpdCBwdXNoIGRzdCBub29wICYmCisJISB0ZXN0IC1mIGRzdC9wdXNoLWNlcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3NpZ25lZCBwdXNoIHNlbmRzIHB1c2ggY2VydGlmaWNhdGUnICcKKwlwcmVwYXJlX2RzdCAmJgorCW1rZGlyIC1wIGRzdC8uZ2l0L2hvb2tzICYmCisJZ2l0IC1DIGRzdCBjb25maWcgcmVjZWl2ZS5jZXJ0bm9uY2VzZWVkIHNla3JpdCAmJgorCXdyaXRlX3NjcmlwdCBkc3QvLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUgPDwtXEVPRiAmJgorCSMgZGlzY2FyZCB0aGUgdXBkYXRlIGxpc3QKKwljYXQgPi9kZXYvbnVsbAorCSMgcmVjb3JkIHRoZSBwdXNoIGNlcnRpZmljYXRlCisJaWYgdGVzdCAtbiAiJHtHSVRfUFVTSF9DRVJULX0iCisJdGhlbgorCQlnaXQgY2F0LWZpbGUgYmxvYiAkR0lUX1BVU0hfQ0VSVCA+Li4vcHVzaC1jZXJ0CisJZmkgJiYKKworCWNhdCA+Li4vcHVzaC1jZXJ0LXN0YXR1cyA8PEVfT19GCisJU0lHTkVSPSR7R0lUX1BVU0hfQ0VSVF9TSUdORVItbm9ib2R5fQorCUtFWT0ke0dJVF9QVVNIX0NFUlRfS0VZLW5va2V5fQorCVNUQVRVUz0ke0dJVF9QVVNIX0NFUlRfU1RBVFVTLW5vc3RhdHVzfQorCU5PTkNFX1NUQVRVUz0ke0dJVF9QVVNIX0NFUlRfTk9OQ0VfU1RBVFVTLW5vbm9uY2VzdGF0dXN9CisJTk9OQ0U9JHtHSVRfUFVTSF9DRVJUX05PTkNFLW5vbm9uY2V9CisJRV9PX0YKKworCUVPRgorCisJZ2l0IHB1c2ggLS1zaWduZWQgZHN0IG5vb3AgZmYgK25vZmYgJiYKKworCSgKKwkJY2F0IDw8LVxFT0YgJiYKKwkJU0lHTkVSPUMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwkJS0VZPTEzQjZGNTFFQ0RERTQzMEQKKwkJU1RBVFVTPUcKKwkJTk9OQ0VfU1RBVFVTPU9LCisJCUVPRgorCQlzZWQgLW4gLWUgInMvXm5vbmNlIC9OT05DRT0vcCIgLWUgIi9eJC9xIiBkc3QvcHVzaC1jZXJ0CisJKSA+ZXhwZWN0ICYmCisKKwlub29wPSQoZ2l0IHJldi1wYXJzZSBub29wKSAmJgorCWZmPSQoZ2l0IHJldi1wYXJzZSBmZikgJiYKKwlub2ZmPSQoZ2l0IHJldi1wYXJzZSBub2ZmKSAmJgorCWdyZXAgIiRub29wICRmZiByZWZzL2hlYWRzL2ZmIiBkc3QvcHVzaC1jZXJ0ICYmCisJZ3JlcCAiJG5vb3AgJG5vZmYgcmVmcy9oZWFkcy9ub2ZmIiBkc3QvcHVzaC1jZXJ0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGRzdC9wdXNoLWNlcnQtc3RhdHVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdpbmNvbnNpc3RlbnQgcHVzaCBvcHRpb25zIGluIHNpZ25lZCBwdXNoIG5vdCBhbGxvd2VkJyAnCisJIyBGaXJzdCwgaW52b2tlIHJlY2VpdmUtcGFjayB3aXRoIGR1bW15IGlucHV0IHRvIG9idGFpbiBpdHMgcHJlYW1ibGUuCisJcHJlcGFyZV9kc3QgJiYKKwlnaXQgLUMgZHN0IGNvbmZpZyByZWNlaXZlLmNlcnRub25jZXNlZWQgc2Vrcml0ICYmCisJZ2l0IC1DIGRzdCBjb25maWcgcmVjZWl2ZS5hZHZlcnRpc2VwdXNob3B0aW9ucyAxICYmCisJcHJpbnRmIHh4eHggfCB0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlY2VpdmUtcGFjayBkc3QgPnByZWFtYmxlICYmCisKKwkjIFRoZW4sIGludm9rZSBwdXNoLiBTaW11bGF0ZSBhIHJlY2VpdmUtcGFjayB0aGF0IHNlbmRzIHRoZSBwcmVhbWJsZSB3ZQorCSMgb2J0YWluZWQsIGZvbGxvd2VkIGJ5IGEgZHVtbXkgcGFja2V0LgorCXdyaXRlX3NjcmlwdCBteXNjcmlwdCA8PC1cRU9GICYmCisJCWNhdCBwcmVhbWJsZSAmJgorCQlwcmludGYgeHh4eCAmJgorCQljYXQgPnB1c2gKKwlFT0YKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHB1c2ggLS1wdXNoLW9wdGlvbj0iZm9vIiAtLXB1c2gtb3B0aW9uPSJiYXIiIFwKKwkJLS1yZWNlaXZlLXBhY2s9IlwiJChwd2QpL215c2NyaXB0XCIiIC0tc2lnbmVkIGRzdCAtLWRlbGV0ZSBmZiAmJgorCisJIyBSZXBsYXkgdGhlIHB1c2ggb3V0cHV0IG9uIGEgZnJlc2ggZHN0LCBjaGVja2luZyB0aGF0IGZmIGlzIHRydWx5CisJIyBkZWxldGVkLgorCXByZXBhcmVfZHN0ICYmCisJZ2l0IC1DIGRzdCBjb25maWcgcmVjZWl2ZS5jZXJ0bm9uY2VzZWVkIHNla3JpdCAmJgorCWdpdCAtQyBkc3QgY29uZmlnIHJlY2VpdmUuYWR2ZXJ0aXNlcHVzaG9wdGlvbnMgMSAmJgorCWdpdCByZWNlaXZlLXBhY2sgZHN0IDxwdXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGRzdCByZXYtcGFyc2UgZmYgJiYKKworCSMgVHdlYWsgdGhlIHB1c2ggb3V0cHV0IHRvIG1ha2UgdGhlIHB1c2ggb3B0aW9uIG91dHNpZGUgdGhlIGNlcnQKKwkjIGRpZmZlcmVudCwgdGhlbiByZXBsYXkgaXQgb24gYSBmcmVzaCBkc3QsIGNoZWNraW5nIHRoYXQgZmYgaXMgbm90CisJIyBkZWxldGVkLgorCXBlcmwgLXBlICJzLyhbXiBdKWJhci9cJDFiYXovIiBwdXNoID5wdXNoLnR3ZWFrICYmCisJcHJlcGFyZV9kc3QgJiYKKwlnaXQgLUMgZHN0IGNvbmZpZyByZWNlaXZlLmNlcnRub25jZXNlZWQgc2Vrcml0ICYmCisJZ2l0IC1DIGRzdCBjb25maWcgcmVjZWl2ZS5hZHZlcnRpc2VwdXNob3B0aW9ucyAxICYmCisJZ2l0IHJlY2VpdmUtcGFjayBkc3QgPHB1c2gudHdlYWsgPm91dCAmJgorCWdpdCAtQyBkc3QgcmV2LXBhcnNlIGZmICYmCisJZ3JlcCAiaW5jb25zaXN0ZW50IHB1c2ggb3B0aW9ucyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdmYWlsIHdpdGhvdXQga2V5IGFuZCBoZWVkIHVzZXIuc2lnbmluZ2tleScgJworCXByZXBhcmVfZHN0ICYmCisJbWtkaXIgLXAgZHN0Ly5naXQvaG9va3MgJiYKKwlnaXQgLUMgZHN0IGNvbmZpZyByZWNlaXZlLmNlcnRub25jZXNlZWQgc2Vrcml0ICYmCisJd3JpdGVfc2NyaXB0IGRzdC8uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZSA8PC1cRU9GICYmCisJIyBkaXNjYXJkIHRoZSB1cGRhdGUgbGlzdAorCWNhdCA+L2Rldi9udWxsCisJIyByZWNvcmQgdGhlIHB1c2ggY2VydGlmaWNhdGUKKwlpZiB0ZXN0IC1uICIke0dJVF9QVVNIX0NFUlQtfSIKKwl0aGVuCisJCWdpdCBjYXQtZmlsZSBibG9iICRHSVRfUFVTSF9DRVJUID4uLi9wdXNoLWNlcnQKKwlmaSAmJgorCisJY2F0ID4uLi9wdXNoLWNlcnQtc3RhdHVzIDw8RV9PX0YKKwlTSUdORVI9JHtHSVRfUFVTSF9DRVJUX1NJR05FUi1ub2JvZHl9CisJS0VZPSR7R0lUX1BVU0hfQ0VSVF9LRVktbm9rZXl9CisJU1RBVFVTPSR7R0lUX1BVU0hfQ0VSVF9TVEFUVVMtbm9zdGF0dXN9CisJTk9OQ0VfU1RBVFVTPSR7R0lUX1BVU0hfQ0VSVF9OT05DRV9TVEFUVVMtbm9ub25jZXN0YXR1c30KKwlOT05DRT0ke0dJVF9QVVNIX0NFUlRfTk9OQ0Utbm9ub25jZX0KKwlFX09fRgorCisJRU9GCisKKwl0ZXN0X2NvbmZpZyB1c2VyLmVtYWlsIGhhc25va2V5QG5vd2hlcmUuY29tICYmCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1zaWduZWQgZHN0IG5vb3AgZmYgK25vZmYKKwkpICYmCisJdGVzdF9jb25maWcgdXNlci5zaWduaW5na2V5ICRHSVRfQ09NTUlUVEVSX0VNQUlMICYmCisJZ2l0IHB1c2ggLS1zaWduZWQgZHN0IG5vb3AgZmYgK25vZmYgJiYKKworCSgKKwkJY2F0IDw8LVxFT0YgJiYKKwkJU0lHTkVSPUMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwkJS0VZPTEzQjZGNTFFQ0RERTQzMEQKKwkJU1RBVFVTPUcKKwkJTk9OQ0VfU1RBVFVTPU9LCisJCUVPRgorCQlzZWQgLW4gLWUgInMvXm5vbmNlIC9OT05DRT0vcCIgLWUgIi9eJC9xIiBkc3QvcHVzaC1jZXJ0CisJKSA+ZXhwZWN0ICYmCisKKwlub29wPSQoZ2l0IHJldi1wYXJzZSBub29wKSAmJgorCWZmPSQoZ2l0IHJldi1wYXJzZSBmZikgJiYKKwlub2ZmPSQoZ2l0IHJldi1wYXJzZSBub2ZmKSAmJgorCWdyZXAgIiRub29wICRmZiByZWZzL2hlYWRzL2ZmIiBkc3QvcHVzaC1jZXJ0ICYmCisJZ3JlcCAiJG5vb3AgJG5vZmYgcmVmcy9oZWFkcy9ub2ZmIiBkc3QvcHVzaC1jZXJ0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGRzdC9wdXNoLWNlcnQtc3RhdHVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ2ZhaWwgd2l0aG91dCBrZXkgYW5kIGhlZWQgdXNlci5zaWduaW5na2V5IHg1MDknICcKKwl0ZXN0X2NvbmZpZyBncGcuZm9ybWF0IHg1MDkgJiYKKwlwcmVwYXJlX2RzdCAmJgorCW1rZGlyIC1wIGRzdC8uZ2l0L2hvb2tzICYmCisJZ2l0IC1DIGRzdCBjb25maWcgcmVjZWl2ZS5jZXJ0bm9uY2VzZWVkIHNla3JpdCAmJgorCXdyaXRlX3NjcmlwdCBkc3QvLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUgPDwtXEVPRiAmJgorCSMgZGlzY2FyZCB0aGUgdXBkYXRlIGxpc3QKKwljYXQgPi9kZXYvbnVsbAorCSMgcmVjb3JkIHRoZSBwdXNoIGNlcnRpZmljYXRlCisJaWYgdGVzdCAtbiAiJHtHSVRfUFVTSF9DRVJULX0iCisJdGhlbgorCQlnaXQgY2F0LWZpbGUgYmxvYiAkR0lUX1BVU0hfQ0VSVCA+Li4vcHVzaC1jZXJ0CisJZmkgJiYKKworCWNhdCA+Li4vcHVzaC1jZXJ0LXN0YXR1cyA8PEVfT19GCisJU0lHTkVSPSR7R0lUX1BVU0hfQ0VSVF9TSUdORVItbm9ib2R5fQorCUtFWT0ke0dJVF9QVVNIX0NFUlRfS0VZLW5va2V5fQorCVNUQVRVUz0ke0dJVF9QVVNIX0NFUlRfU1RBVFVTLW5vc3RhdHVzfQorCU5PTkNFX1NUQVRVUz0ke0dJVF9QVVNIX0NFUlRfTk9OQ0VfU1RBVFVTLW5vbm9uY2VzdGF0dXN9CisJTk9OQ0U9JHtHSVRfUFVTSF9DRVJUX05PTkNFLW5vbm9uY2V9CisJRV9PX0YKKworCUVPRgorCisJdGVzdF9jb25maWcgdXNlci5lbWFpbCBoYXNub2tleUBub3doZXJlLmNvbSAmJgorCXRlc3RfY29uZmlnIHVzZXIuc2lnbmluZ2tleSAiIiAmJgorCSgKKwkJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX0VNQUlMICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tc2lnbmVkIGRzdCBub29wIGZmICtub2ZmCisJKSAmJgorCXRlc3RfY29uZmlnIHVzZXIuc2lnbmluZ2tleSAkR0lUX0NPTU1JVFRFUl9FTUFJTCAmJgorCWdpdCBwdXNoIC0tc2lnbmVkIGRzdCBub29wIGZmICtub2ZmICYmCisKKwkoCisJCWNhdCA8PC1cRU9GICYmCisJCVNJR05FUj0vQ049QyBPIE1pdHRlci9PPUV4YW1wbGUvU049QyBPL0dOPU1pdHRlcgorCQlLRVk9CisJCVNUQVRVUz1HCisJCU5PTkNFX1NUQVRVUz1PSworCQlFT0YKKwkJc2VkIC1uIC1lICJzL15ub25jZSAvTk9OQ0U9L3AiIC1lICIvXiQvcSIgZHN0L3B1c2gtY2VydAorCSkgPmV4cGVjdC5pbiAmJgorCWtleT0kKGNhdCAiJHtHTlVQR0hPTUV9L3RydXN0bGlzdC50eHQiIHwgY3V0IC1kIiAiIC1mMSB8IHRyIC1kICI6IikgJiYKKwlzZWQgLWUgInMvXktFWT0vS0VZPSR7a2V5fS8iIGV4cGVjdC5pbiA+ZXhwZWN0ICYmCisKKwlub29wPSQoZ2l0IHJldi1wYXJzZSBub29wKSAmJgorCWZmPSQoZ2l0IHJldi1wYXJzZSBmZikgJiYKKwlub2ZmPSQoZ2l0IHJldi1wYXJzZSBub2ZmKSAmJgorCWdyZXAgIiRub29wICRmZiByZWZzL2hlYWRzL2ZmIiBkc3QvcHVzaC1jZXJ0ICYmCisJZ3JlcCAiJG5vb3AgJG5vZmYgcmVmcy9oZWFkcy9ub2ZmIiBkc3QvcHVzaC1jZXJ0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGRzdC9wdXNoLWNlcnQtc3RhdHVzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzNS1mZXRjaC1wdXNoLXN5bXJlZi5zaCBiL3QvdDU1MzUtZmV0Y2gtcHVzaC1zeW1yZWYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZThmNmQyMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MzUtZmV0Y2gtcHVzaC1zeW1yZWYuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2F2b2lkaW5nIGNvbmZsaWN0aW5nIHVwZGF0ZSB0aHJvdWdoIHN5bXJlZiBhbGlhc2luZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgb25lICYmCisJZ2l0IGNsb25lIC4gc3JjICYmCisJZ2l0IGNsb25lIHNyYyBkc3QxICYmCisJZ2l0IGNsb25lIHNyYyBkc3QyICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJKCBjZCBzcmMgJiYgZ2l0IHB1bGwgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoJyAnCisJKAorCQljZCBzcmMgJiYKKwkJZ2l0IHB1c2ggLi4vZHN0MSAicmVmcy9yZW1vdGVzLyo6cmVmcy9yZW1vdGVzLyoiCisJKSAmJgorCWdpdCBscy1yZW1vdGUgc3JjICJyZWZzL3JlbW90ZXMvKiIgPmV4cGVjdCAmJgorCWdpdCBscy1yZW1vdGUgZHN0MSAicmVmcy9yZW1vdGVzLyoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJKCBjZCBzcmMgJiYgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgKSA+ZXhwZWN0ICYmCisJKCBjZCBkc3QxICYmIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEICkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2gnICcKKwkoCisJCWNkIGRzdDIgJiYKKwkJZ2l0IGZldGNoIC4uL3NyYyAicmVmcy9yZW1vdGVzLyo6cmVmcy9yZW1vdGVzLyoiCisJKSAmJgorCWdpdCBscy1yZW1vdGUgc3JjICJyZWZzL3JlbW90ZXMvKiIgPmV4cGVjdCAmJgorCWdpdCBscy1yZW1vdGUgZHN0MiAicmVmcy9yZW1vdGVzLyoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJKCBjZCBzcmMgJiYgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgKSA+ZXhwZWN0ICYmCisJKCBjZCBkc3QyICYmIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEICkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTM2LWZldGNoLWNvbmZsaWN0cy5zaCBiL3QvdDU1MzYtZmV0Y2gtY29uZmxpY3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxZjI4YzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTM2LWZldGNoLWNvbmZsaWN0cy5zaApAQCAtMCwwICsxLDg2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZmV0Y2ggaGFuZGxlcyBjb25mbGljdGluZyByZWZzcGVjcyBjb3JyZWN0bHknCisKKy4gLi90ZXN0LWxpYi5zaAorCitEPSQocHdkKQorCitzZXR1cF9yZXBvc2l0b3J5ICgpIHsKKwlnaXQgaW5pdCAiJDEiICYmICgKKwkJY2QgIiQxIiAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsICIkRCIgJiYKKwkJc2hpZnQgJiYKKwkJZm9yIHJlZnNwZWMgaW4gIiRAIgorCQlkbworCQkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLmZldGNoICIkcmVmc3BlYyIKKwkJZG9uZQorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIkluaXRpYWwiICYmCisJZ2l0IGJyYW5jaCBicmFuY2gxICYmCisJZ2l0IHRhZyB0YWcxICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJGaXJzdCIgJiYKKwlnaXQgYnJhbmNoIGJyYW5jaDIgJiYKKwlnaXQgdGFnIHRhZzIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBubyBjb25mbGljdCcgJworCXNldHVwX3JlcG9zaXRvcnkgb2sgIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiAmJiAoCisJCWNkIG9rICYmCisJCWdpdCBmZXRjaCBvcmlnaW4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNvbmZsaWN0OiBjb25maWcgdnMuIGNvbmZpZycgJworCXNldHVwX3JlcG9zaXRvcnkgY2NjIFwKKwkJIityZWZzL2hlYWRzL2JyYW5jaDE6cmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2gxIiBcCisJCSIrcmVmcy9oZWFkcy9icmFuY2gyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoMSIgJiYgKAorCQljZCBjY2MgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIG9yaWdpbiAyPmVycm9yICYmCisJCXRlc3RfaTE4bmdyZXAgImZhdGFsOiBDYW5ub3QgZmV0Y2ggYm90aCByZWZzL2hlYWRzL2JyYW5jaDEgYW5kIHJlZnMvaGVhZHMvYnJhbmNoMiB0byByZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaDEiIGVycm9yCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBkdXBsaWNhdGU6IGNvbmZpZyB2cy4gY29uZmlnJyAnCisJc2V0dXBfcmVwb3NpdG9yeSBkY2MgXAorCQkiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiIFwKKwkJIityZWZzL2hlYWRzL2JyYW5jaDE6cmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2gxIiAmJiAoCisJCWNkIGRjYyAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBjb25mbGljdDogYXJnIG92ZXJyaWRlcyBjb25maWcnICcKKwlzZXR1cF9yZXBvc2l0b3J5IGFvYyBcCisJCSIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIgJiYgKAorCQljZCBhb2MgJiYKKwkJZ2l0IGZldGNoIG9yaWdpbiByZWZzL2hlYWRzL2JyYW5jaDI6cmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2gxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBjb25mbGljdDogYXJnIHZzLiBhcmcnICcKKwlzZXR1cF9yZXBvc2l0b3J5IGNhYSAmJiAoCisJCWNkIGNhYSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggb3JpZ2luIFwKKwkJCXJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyogXAorCQkJcmVmcy9oZWFkcy9icmFuY2gyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoMSAyPmVycm9yICYmCisJCXRlc3RfaTE4bmdyZXAgImZhdGFsOiBDYW5ub3QgZmV0Y2ggYm90aCByZWZzL2hlYWRzL2JyYW5jaDEgYW5kIHJlZnMvaGVhZHMvYnJhbmNoMiB0byByZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaDEiIGVycm9yCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBjb25mbGljdDogY3Jpc3MtY3Jvc3MgYXJncycgJworCXNldHVwX3JlcG9zaXRvcnkgeGFhIFwKKwkJIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiAmJiAoCisJCWNkIHhhYSAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luIFwKKwkJCXJlZnMvaGVhZHMvYnJhbmNoMTpyZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaDIgXAorCQkJcmVmcy9oZWFkcy9icmFuY2gyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoMSAyPmVycm9yICYmCisJCXRlc3RfaTE4bmdyZXAgIndhcm5pbmc6IHJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoMSB1c3VhbGx5IHRyYWNrcyByZWZzL2hlYWRzL2JyYW5jaDEsIG5vdCByZWZzL2hlYWRzL2JyYW5jaDIiIGVycm9yICYmCisJCXRlc3RfaTE4bmdyZXAgIndhcm5pbmc6IHJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoMiB1c3VhbGx5IHRyYWNrcyByZWZzL2hlYWRzL2JyYW5jaDIsIG5vdCByZWZzL2hlYWRzL2JyYW5jaDEiIGVycm9yCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MzctZmV0Y2gtc2hhbGxvdy5zaCBiL3QvdDU1MzctZmV0Y2gtc2hhbGxvdy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNDI3YTJkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUzNy1mZXRjaC1zaGFsbG93LnNoCkBAIC0wLDAgKzEsMjU4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZmV0Y2gvY2xvbmUgZnJvbSBhIHNoYWxsb3cgY2xvbmUnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb21taXQoKSB7CisJZWNobyAiJDEiID50cmFja2VkICYmCisJZ2l0IGFkZCB0cmFja2VkICYmCisJZ2l0IGNvbW1pdCAtbSAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY29tbWl0IDEgJiYKKwljb21taXQgMiAmJgorCWNvbW1pdCAzICYmCisJY29tbWl0IDQgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHRyYW5zZmVyLmZzY2tPYmplY3RzIHRydWUgJiYKKwl0ZXN0X29pZF9jYWNoZSA8PC1cRU9GCisJcGVybCBzaGExOnMvMDAzNHNoYWxsb3cgJXMvMDAzNnVuc2hhbGxvdyAlcy8KKwlwZXJsIHNoYTI1NjpzLzAwNGNzaGFsbG93ICVzLzAwNGV1bnNoYWxsb3cgJXMvCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNoYWxsb3cgY2xvbmUnICcKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWRlcHRoPTIgLmdpdCBzaGFsbG93ICYmCisJZ2l0IC0tZ2l0LWRpcj1zaGFsbG93Ly5naXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDQgMyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBmcm9tIHNoYWxsb3cgY2xvbmUnICcKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCBzaGFsbG93IHNoYWxsb3cyICYmCisJKAorCWNkIHNoYWxsb3cyICYmCisJZ2l0IGZzY2sgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDQgMyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZnJvbSBzaGFsbG93IGNsb25lJyAnCisJKAorCWNkIHNoYWxsb3cgJiYKKwljb21taXQgNQorCSkgJiYKKwkoCisJY2Qgc2hhbGxvdzIgJiYKKwlnaXQgZmV0Y2ggJiYKKwlnaXQgZnNjayAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF93cml0ZV9saW5lcyA1IDQgMyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggLS1kZXB0aCBmcm9tIHNoYWxsb3cgY2xvbmUnICcKKwkoCisJY2Qgc2hhbGxvdyAmJgorCWNvbW1pdCA2CisJKSAmJgorCSgKKwljZCBzaGFsbG93MiAmJgorCWdpdCBmZXRjaCAtLWRlcHRoPTIgJiYKKwlnaXQgZnNjayAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF93cml0ZV9saW5lcyA2IDUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tdW5zaGFsbG93IGZyb20gc2hhbGxvdyBjbG9uZScgJworCSgKKwljZCBzaGFsbG93MiAmJgorCWdpdCBmZXRjaCAtLXVuc2hhbGxvdyAmJgorCWdpdCBmc2NrICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyBvcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDYgNSA0IDMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHNvbWV0aGluZyB1cHN0cmVhbSBoYXMgYnV0IGhpZGRlbiBieSBjbGllbnRzIHNoYWxsb3cgYm91bmRhcmllcycgJworCSMgdGhlIGJsb2IgIjEiIGlzIGF2YWlsYWJsZSBpbiAuZ2l0IGJ1dCBoaWRkZW4gYnkgdGhlCisJIyBzaGFsbG93Mi8uZ2l0L3NoYWxsb3cgYW5kIGl0IHNob3VsZCBiZSByZXNlbnQKKwkhIGdpdCAtLWdpdC1kaXI9c2hhbGxvdzIvLmdpdCBjYXQtZmlsZSBibG9iICQoZWNobyAxfGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSA+L2Rldi9udWxsICYmCisJZWNobyAxID4xLnQgJiYKKwlnaXQgYWRkIDEudCAmJgorCWdpdCBjb21taXQgLW0gYWRkLTEtYmFjayAmJgorCSgKKwljZCBzaGFsbG93MiAmJgorCWdpdCBmZXRjaCAuLi8uZ2l0ICtyZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvdG9wL21hc3RlciAmJgorCWdpdCBmc2NrICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyB0b3AvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGFkZC0xLWJhY2sgNCAzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKSAmJgorCWdpdCAtLWdpdC1kaXI9c2hhbGxvdzIvLmdpdCBjYXQtZmlsZSBibG9iICQoZWNobyAxfGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHRoYXQgcmVxdWlyZXMgY2hhbmdlcyBpbiAuZ2l0L3NoYWxsb3cgaXMgZmlsdGVyZWQnICcKKwkoCisJY2Qgc2hhbGxvdyAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBuby1zaGFsbG93ICYmCisJY29tbWl0IG5vLXNoYWxsb3cKKwkpICYmCisJZ2l0IGluaXQgbm90c2hhbGxvdyAmJgorCSgKKwljZCBub3RzaGFsbG93ICYmCisJZ2l0IGZldGNoIC4uL3NoYWxsb3cvLmdpdCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3NoYWxsb3cvKiAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiID5hY3R1YWwucmVmcyAmJgorCWVjaG8gcmVmcy9yZW1vdGVzL3NoYWxsb3cvbm8tc2hhbGxvdyA+ZXhwZWN0LnJlZnMgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmVmcyBhY3R1YWwucmVmcyAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgc2hhbGxvdy9uby1zaGFsbG93ID5hY3R1YWwgJiYKKwllY2hvIG5vLXNoYWxsb3cgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tdXBkYXRlLXNoYWxsb3cnICcKKwkoCisJY2Qgc2hhbGxvdyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwljb21taXQgNyAmJgorCWdpdCB0YWcgLW0gZm9vIGhlYXZ5LXRhZyBIRUFEXiAmJgorCWdpdCB0YWcgbGlnaHQtdGFnIEhFQUReOnRyYWNrZWQKKwkpICYmCisJKAorCWNkIG5vdHNoYWxsb3cgJiYKKwlnaXQgZmV0Y2ggLS11cGRhdGUtc2hhbGxvdyAuLi9zaGFsbG93Ly5naXQgcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9zaGFsbG93LyogJiYKKwlnaXQgZnNjayAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1zb3J0PXJlZm5hbWUgLS1mb3JtYXQ9IiUocmVmbmFtZSkiID5hY3R1YWwucmVmcyAmJgorCWNhdCA8PC1cRU9GID5leHBlY3QucmVmcyAmJgorCXJlZnMvcmVtb3Rlcy9zaGFsbG93L21hc3RlcgorCXJlZnMvcmVtb3Rlcy9zaGFsbG93L25vLXNoYWxsb3cKKwlyZWZzL3RhZ3MvaGVhdnktdGFnCisJcmVmcy90YWdzL2xpZ2h0LXRhZworCUVPRgorCXRlc3RfY21wIGV4cGVjdC5yZWZzIGFjdHVhbC5yZWZzICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyBzaGFsbG93L21hc3RlciA+YWN0dWFsICYmCisJdGVzdF93cml0ZV9saW5lcyA3IDYgNSA0IDMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tdXBkYXRlLXNoYWxsb3cgKHdpdGggZmV0Y2gud3JpdGVDb21taXRHcmFwaCknICcKKwkoCisJY2Qgc2hhbGxvdyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwljb21taXQgOCAmJgorCWdpdCB0YWcgLW0gZm9vIGhlYXZ5LXRhZy1mb3ItZ3JhcGggSEVBRF4gJiYKKwlnaXQgdGFnIGxpZ2h0LXRhZy1mb3ItZ3JhcGggSEVBRF46dHJhY2tlZAorCSkgJiYKKwl0ZXN0X2NvbmZpZyAtQyBub3RzaGFsbG93IGZldGNoLndyaXRlQ29tbWl0R3JhcGggdHJ1ZSAmJgorCSgKKwljZCBub3RzaGFsbG93ICYmCisJZ2l0IGZldGNoIC0tdXBkYXRlLXNoYWxsb3cgLi4vc2hhbGxvdy8uZ2l0IHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvc2hhbGxvdy8qICYmCisJZ2l0IGZzY2sgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tc29ydD1yZWZuYW1lIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiA+YWN0dWFsLnJlZnMgJiYKKwljYXQgPDwtRU9GID5leHBlY3QucmVmcyAmJgorCXJlZnMvcmVtb3Rlcy9zaGFsbG93L21hc3RlcgorCXJlZnMvcmVtb3Rlcy9zaGFsbG93L25vLXNoYWxsb3cKKwlyZWZzL3RhZ3MvaGVhdnktdGFnCisJcmVmcy90YWdzL2hlYXZ5LXRhZy1mb3ItZ3JhcGgKKwlyZWZzL3RhZ3MvbGlnaHQtdGFnCisJcmVmcy90YWdzL2xpZ2h0LXRhZy1mb3ItZ3JhcGgKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QucmVmcyBhY3R1YWwucmVmcyAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgc2hhbGxvdy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgOCA3IDYgNSA0IDMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnc2hhbGxvdyBmZXRjaCBmcm9tIGEgcmVhZC1vbmx5IHJlcG8nICcKKwljcCAtUiAuZ2l0IHJlYWQtb25seS5naXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImZpbmQgcmVhZC1vbmx5LmdpdCAtdHlwZSBkIC1wcmludCB8IHhhcmdzIGNobW9kICt3IiAmJgorCWZpbmQgcmVhZC1vbmx5LmdpdCAtcHJpbnQgfCB4YXJncyBjaG1vZCAtdyAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tZGVwdGg9MiByZWFkLW9ubHkuZ2l0IGZyb20tcmVhZC1vbmx5ICYmCisJZ2l0IC0tZ2l0LWRpcj1mcm9tLXJlYWQtb25seS8uZ2l0IGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF93cml0ZV9saW5lcyBhZGQtMS1iYWNrIDQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdC9zaGFsbG93IGlzIGVkaXRlZCBieSByZXBhY2snICcKKwlnaXQgaW5pdCBzaGFsbG93LXNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIHNoYWxsb3ctc2VydmVyIEEgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzaGFsbG93LXNlcnZlciBCICYmCisJZ2l0IC1DIHNoYWxsb3ctc2VydmVyIGNoZWNrb3V0IC1iIGJyYW5jaCAmJgorCXRlc3RfY29tbWl0IC1DIHNoYWxsb3ctc2VydmVyIEMgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzaGFsbG93LXNlcnZlciBFICYmCisJdGVzdF9jb21taXQgLUMgc2hhbGxvdy1zZXJ2ZXIgRCAmJgorCWQ9IiQoZ2l0IC1DIHNoYWxsb3ctc2VydmVyIHJldi1wYXJzZSAtLXZlcmlmeSBEXjApIiAmJgorCWdpdCAtQyBzaGFsbG93LXNlcnZlciBjaGVja291dCBtYXN0ZXIgJiYKKworCWdpdCBjbG9uZSAtLWRlcHRoPTEgLS1uby10YWdzIC0tbm8tc2luZ2xlLWJyYW5jaCBcCisJCSJmaWxlOi8vJFBXRC9zaGFsbG93LXNlcnZlciIgc2hhbGxvdy1jbGllbnQgJiYKKworCTogbm93IHJlbW92ZSB0aGUgYnJhbmNoIGFuZCBmZXRjaCB3aXRoIHBydW5lICYmCisJZ2l0IC1DIHNoYWxsb3ctc2VydmVyIGJyYW5jaCAtRCBicmFuY2ggJiYKKwlnaXQgLUMgc2hhbGxvdy1jbGllbnQgZmV0Y2ggLS1wcnVuZSAtLWRlcHRoPTEgXAorCQlvcmlnaW4gIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiAmJgorCWdpdCAtQyBzaGFsbG93LWNsaWVudCByZXBhY2sgLWFkZmwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc2hhbGxvdy1jbGllbnQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRkXjAgJiYKKwkhIGdyZXAgJGQgc2hhbGxvdy1jbGllbnQvLmdpdC9zaGFsbG93ICYmCisKKwlnaXQgLUMgc2hhbGxvdy1zZXJ2ZXIgYnJhbmNoIGJyYW5jaC1vcmlnICRkICYmCisJZ2l0IC1DIHNoYWxsb3ctY2xpZW50IGZldGNoIC0tcHJ1bmUgLS1kZXB0aD0yIFwKKwkJb3JpZ2luICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIKKycKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK1JFUE89IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwbyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhbGxvdyBmZXRjaGVzIGNoZWNrIGNvbm5lY3Rpdml0eSBiZWZvcmUgd3JpdGluZyBzaGFsbG93IGZpbGUnICcKKwlybSAtcmYgIiRSRVBPIiBjbGllbnQgJiYKKworCWdpdCBpbml0ICIkUkVQTyIgJiYKKwl0ZXN0X2NvbW1pdCAtQyAiJFJFUE8iIG9uZSAmJgorCXRlc3RfY29tbWl0IC1DICIkUkVQTyIgdHdvICYmCisJdGVzdF9jb21taXQgLUMgIiRSRVBPIiB0aHJlZSAmJgorCisJZ2l0IGluaXQgY2xpZW50ICYmCisKKwkjIFVzZSBwcm90b2NvbCB2MiB0byBlbnN1cmUgdGhhdCBzaGFsbG93IGluZm9ybWF0aW9uIGlzIHNlbnQgZXhhY3RseQorCSMgb25jZSBieSB0aGUgc2VydmVyLCBzaW5jZSB3ZSBhcmUgcGxhbm5pbmcgdG8gbWFuaXB1bGF0ZSBpdC4KKwlnaXQgLUMgIiRSRVBPIiBjb25maWcgcHJvdG9jb2wudmVyc2lvbiAyICYmCisJZ2l0IC1DIGNsaWVudCBjb25maWcgcHJvdG9jb2wudmVyc2lvbiAyICYmCisKKwlnaXQgLUMgY2xpZW50IGZldGNoIC0tZGVwdGg9MiAiJEhUVFBEX1VSTC9vbmVfdGltZV9wZXJsL3JlcG8iIG1hc3RlcjphX2JyYW5jaCAmJgorCisJIyBDcmFmdCBhIHNpdHVhdGlvbiBpbiB3aGljaCB0aGUgc2VydmVyIHNlbmRzIGJhY2sgYW4gdW5zaGFsbG93IHJlcXVlc3QKKwkjIHdpdGggYW4gZW1wdHkgcGFja2ZpbGUuIFRoaXMgaXMgZG9uZSBieSByZWZldGNoaW5nIHdpdGggYSBzaG9ydGVyCisJIyBkZXB0aCAodG8gZW5zdXJlIHRoYXQgdGhlIHBhY2tmaWxlIGlzIGVtcHR5KSwgYW5kIG92ZXJ3cml0aW5nIHRoZQorCSMgc2hhbGxvdyBsaW5lIGluIHRoZSByZXNwb25zZSB3aXRoIHRoZSB1bnNoYWxsb3cgbGluZSB3ZSB3YW50LgorCXByaW50ZiAiJCh0ZXN0X29pZCBwZXJsKSIgXAorCSAgICAgICAiJChnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgSEVBRCkiIFwKKwkgICAgICAgIiQoZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlIEhFQUReKSIgXAorCSAgICAgICA+IiRIVFRQRF9ST09UX1BBVEgvb25lLXRpbWUtcGVybCIgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfU0lERUJBTkRfQUxMPTAgZ2l0IC1DIGNsaWVudCBcCisJCWZldGNoIC0tZGVwdGg9MSAiJEhUVFBEX1VSTC9vbmVfdGltZV9wZXJsL3JlcG8iIFwKKwkJbWFzdGVyOmFfYnJhbmNoICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSBvbmUtdGltZS1wZXJsIHNjcmlwdCB3YXMgdXNlZC4KKwkhIHRlc3QgLWUgIiRIVFRQRF9ST09UX1BBVEgvb25lLXRpbWUtcGVybCIgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIHJlc3VsdGluZyByZXBvIGlzIGNvbnNpc3RlbnQsIGRlc3BpdGUgb3VyIGZhaWx1cmUgdG8KKwkjIGZldGNoLgorCWdpdCAtQyBjbGllbnQgZnNjaworJworCisjIERPIE5PVCBhZGQgbm9uLWh0dHBkLXNwZWNpZmljIHRlc3RzIGhlcmUsIGJlY2F1c2UgdGhlIGxhc3QgcGFydCBvZiB0aGlzCisjIHRlc3Qgc2NyaXB0IGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiBodHRwZCBpcyBhdmFpbGFibGUgYW5kIGVuYWJsZWQuCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzOC1wdXNoLXNoYWxsb3cuc2ggYi90L3Q1NTM4LXB1c2gtc2hhbGxvdy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lY2JmODRkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUzOC1wdXNoLXNoYWxsb3cuc2gKQEAgLTAsMCArMSwxMjMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdXNoIGZyb20vdG8gYSBzaGFsbG93IGNsb25lJworCisuIC4vdGVzdC1saWIuc2gKKworY29tbWl0KCkgeworCWVjaG8gIiQxIiA+dHJhY2tlZCAmJgorCWdpdCBhZGQgdHJhY2tlZCAmJgorCWdpdCBjb21taXQgLW0gIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBjb25maWcgLS1nbG9iYWwgdHJhbnNmZXIuZnNja09iamVjdHMgdHJ1ZSAmJgorCWNvbW1pdCAxICYmCisJY29tbWl0IDIgJiYKKwljb21taXQgMyAmJgorCWNvbW1pdCA0ICYmCisJZ2l0IGNsb25lIC4gZnVsbCAmJgorCSgKKwlnaXQgaW5pdCBmdWxsLWFiYyAmJgorCWNkIGZ1bGwtYWJjICYmCisJY29tbWl0IGEgJiYKKwljb21taXQgYiAmJgorCWNvbW1pdCBjCisJKSAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tZGVwdGg9MiAuZ2l0IHNoYWxsb3cgJiYKKwlnaXQgLS1naXQtZGlyPXNoYWxsb3cvLmdpdCBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCis0CiszCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1kZXB0aD0yIGZ1bGwtYWJjLy5naXQgc2hhbGxvdzIgJiYKKwlnaXQgLS1naXQtZGlyPXNoYWxsb3cyLy5naXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorYworYgorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGZyb20gc2hhbGxvdyBjbG9uZScgJworCSgKKwljZCBzaGFsbG93ICYmCisJY29tbWl0IDUgJiYKKwlnaXQgcHVzaCAuLi8uZ2l0ICttYXN0ZXI6cmVmcy9yZW1vdGVzL3NoYWxsb3cvbWFzdGVyCisJKSAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgc2hhbGxvdy9tYXN0ZXIgPmFjdHVhbCAmJgorCWdpdCBmc2NrICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKKzUKKzQKKzMKKzIKKzEKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmcm9tIHNoYWxsb3cgY2xvbmUsIHdpdGggZ3JhZnRlZCByb290cycgJworCSgKKwljZCBzaGFsbG93MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC4uLy5naXQgK21hc3RlcjpyZWZzL3JlbW90ZXMvc2hhbGxvdzIvbWFzdGVyIDI+ZXJyICYmCisJZ3JlcCAic2hhbGxvdzIvbWFzdGVyLipzaGFsbG93IHVwZGF0ZSBub3QgYWxsb3dlZCIgZXJyCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2Ugc2hhbGxvdzIvbWFzdGVyICYmCisJZ2l0IGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG5ldyBzaGFsbG93IHJvb3Qgd2l0aCByZWNlaXZlLnVwZGF0ZXNoYWxsb3cgb24nICcKKwl0ZXN0X2NvbmZpZyByZWNlaXZlLnNoYWxsb3d1cGRhdGUgdHJ1ZSAmJgorCSgKKwljZCBzaGFsbG93MiAmJgorCWdpdCBwdXNoIC4uLy5naXQgK21hc3RlcjpyZWZzL3JlbW90ZXMvc2hhbGxvdzIvbWFzdGVyCisJKSAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgc2hhbGxvdzIvbWFzdGVyID5hY3R1YWwgJiYKKwlnaXQgZnNjayAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitjCitiCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZnJvbSBzaGFsbG93IHRvIHNoYWxsb3cnICcKKwkoCisJY2Qgc2hhbGxvdyAmJgorCWdpdCAtLWdpdC1kaXI9Li4vc2hhbGxvdzIvLmdpdCBjb25maWcgcmVjZWl2ZS5zaGFsbG93dXBkYXRlIHRydWUgJiYKKwlnaXQgcHVzaCAuLi9zaGFsbG93Mi8uZ2l0ICttYXN0ZXI6cmVmcy9yZW1vdGVzL3NoYWxsb3cvbWFzdGVyICYmCisJZ2l0IC0tZ2l0LWRpcj0uLi9zaGFsbG93Mi8uZ2l0IGNvbmZpZyByZWNlaXZlLnNoYWxsb3d1cGRhdGUgZmFsc2UKKwkpICYmCisJKAorCWNkIHNoYWxsb3cyICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyBzaGFsbG93L21hc3RlciA+YWN0dWFsICYmCisJZ2l0IGZzY2sgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorNQorNAorMworRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmcm9tIGZ1bGwgdG8gc2hhbGxvdycgJworCSEgZ2l0IC0tZ2l0LWRpcj1zaGFsbG93Mi8uZ2l0IGNhdC1maWxlIGJsb2IgJChlY2hvIDF8Z2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJY29tbWl0IDEgJiYKKwlnaXQgcHVzaCBzaGFsbG93Mi8uZ2l0ICttYXN0ZXI6cmVmcy9yZW1vdGVzL3RvcC9tYXN0ZXIgJiYKKwkoCisJY2Qgc2hhbGxvdzIgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIHRvcC9tYXN0ZXIgPmFjdHVhbCAmJgorCWdpdCBmc2NrICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKKzEKKzQKKzMKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiAkKGVjaG8gMXxnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgPi9kZXYvbnVsbAorCSkKKycKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzOS1mZXRjaC1odHRwLXNoYWxsb3cuc2ggYi90L3Q1NTM5LWZldGNoLWh0dHAtc2hhbGxvdy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMGQwMmRlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUzOS1mZXRjaC1odHRwLXNoYWxsb3cuc2gKQEAgLTAsMCArMSwxNTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaC9jbG9uZSBmcm9tIGEgc2hhbGxvdyBjbG9uZSBvdmVyIGh0dHAnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK2NvbW1pdCgpIHsKKwllY2hvICIkMSIgPnRyYWNrZWQgJiYKKwlnaXQgYWRkIHRyYWNrZWQgJiYKKwlnaXQgY29tbWl0IC1tICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2hhbGxvdyBjbG9uZScgJworCWNvbW1pdCAxICYmCisJY29tbWl0IDIgJiYKKwljb21taXQgMyAmJgorCWNvbW1pdCA0ICYmCisJY29tbWl0IDUgJiYKKwljb21taXQgNiAmJgorCWNvbW1pdCA3ICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1kZXB0aD01IC5naXQgc2hhbGxvdyAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgdHJhbnNmZXIuZnNja09iamVjdHMgdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBodHRwIHJlcG9zaXRvcnknICcKKwlnaXQgY2xvbmUgLS1iYXJlIC0tbm8tbG9jYWwgc2hhbGxvdyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9zbWFydC9yZXBvLmdpdCBjbG9uZSAmJgorCSgKKwljZCBjbG9uZSAmJgorCWdpdCBmc2NrICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyBvcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorNworNgorNQorNAorMworRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUaGlzIHRlc3QgaXMgdHJpY2t5LiBXZSBuZWVkIGxhcmdlIGVub3VnaCAiaGF2ZSJzIHRoYXQgZmV0Y2gtcGFjaworIyB3aWxsIHB1dCBwa3QtZmx1c2ggaW4gYmV0d2Vlbi4gVGhlbiB3ZSBuZWVkIGEgImhhdmUiIHRoZSBzZXJ2ZXIKKyMgZG9lcyBub3QgaGF2ZSwgaXQnbGwgc2VuZCAiQUNLICVzIHJlYWR5IgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gc2hhbGxvdyBsaW5lcyBhZnRlciByZWNlaXZpbmcgQUNLIHJlYWR5JyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCXRlc3RfdGljayAmJgorCQlmb3IgaSBpbiAkKHRlc3Rfc2VxIDE1KQorCQlkbworCQkJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHVucmVsYXRlZCRpICYmCisJCQl0ZXN0X2NvbW1pdCB1bnJlbGF0ZWQkaSAmJgorCQkJZ2l0IHB1c2ggLXEgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiIFwKKwkJCQlyZWZzL2hlYWRzL3VucmVsYXRlZCRpOnJlZnMvaGVhZHMvdW5yZWxhdGVkJGkgJiYKKwkJCWdpdCBwdXNoIC1xIC4uL2Nsb25lLy5naXQgXAorCQkJCXJlZnMvaGVhZHMvdW5yZWxhdGVkJGk6cmVmcy9oZWFkcy91bnJlbGF0ZWQkaSB8fAorCQkJZXhpdCAxCisJCWRvbmUgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQl0ZXN0X2NvbW1pdCBuZXcgJiYKKwkJZ2l0IHB1c2ggICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiBtYXN0ZXIKKwkpICYmCisJKAorCQljZCBjbG9uZSAmJgorCQlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3bmV3ICYmCisJCXRlc3RfY29tbWl0IG5ldy10b28gJiYKKwkJIyBORUVEU1dPUks6IElmIHRoZSBvdmVyc3BlY2lmaWNhdGlvbiBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0IGlzIHJlZHVjZWQsIHdlCisJCSMgbWlnaHQgYmUgYWJsZSB0byBydW4gdGhpcyB0ZXN0IGluIGFsbCBwcm90b2NvbCB2ZXJzaW9ucy4KKwkJR0lUX1RSQUNFX1BBQ0tFVD0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIFwKKwkJCWdpdCBmZXRjaCAtLWRlcHRoPTIgJiYKKwkJZ3JlcCAiZmV0Y2gtcGFjazwgQUNLIC4qIHJlYWR5IiAuLi90cmFjZSAmJgorCQkhIGdyZXAgImZldGNoLXBhY2s+IGRvbmUiIC4uL3RyYWNlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IHNpbmNlIC4uLicgJworCXRlc3RfY3JlYXRlX3JlcG8gc2hhbGxvdy1zaW5jZSAmJgorCSgKKwljZCBzaGFsbG93LXNpbmNlICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIxMDAwMDAwMDAgKzA3MDAiIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBvbmUgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDAwMDAwMCArMDcwMCIgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHR3byAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMzAwMDAwMDAwICswNzAwIiBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdGhyZWUgJiYKKwltdiAuZ2l0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3NoYWxsb3ctc2luY2UuZ2l0IiAmJgorCWdpdCBjbG9uZSAtLXNoYWxsb3ctc2luY2UgIjMwMDAwMDAwMCArMDcwMCIgJEhUVFBEX1VSTC9zbWFydC9zaGFsbG93LXNpbmNlLmdpdCAuLi9zaGFsbG93MTEgJiYKKwlnaXQgLUMgLi4vc2hhbGxvdzExIGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIEhFQUQgPmFjdHVhbCAmJgorCWVjaG8gdGhyZWUgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBzaGFsbG93IHNpbmNlIC4uLicgJworCWdpdCAtQyBzaGFsbG93MTEgZmV0Y2ggLS1zaGFsbG93LXNpbmNlICIyMDAwMDAwMDAgKzA3MDAiIG9yaWdpbiAmJgorCWdpdCAtQyBzaGFsbG93MTEgbG9nIC0tcHJldHR5PXRmb3JtYXQ6JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJdGhyZWUKKwl0d28KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhbGxvdyBjbG9uZSBleGNsdWRlIHRhZyB0d28nICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNoYWxsb3ctZXhjbHVkZSAmJgorCSgKKwljZCBzaGFsbG93LWV4Y2x1ZGUgJiYKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCW12IC5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvc2hhbGxvdy1leGNsdWRlLmdpdCIgJiYKKwlnaXQgY2xvbmUgLS1zaGFsbG93LWV4Y2x1ZGUgdHdvICRIVFRQRF9VUkwvc21hcnQvc2hhbGxvdy1leGNsdWRlLmdpdCAuLi9zaGFsbG93MTIgJiYKKwlnaXQgLUMgLi4vc2hhbGxvdzEyIGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIEhFQUQgPmFjdHVhbCAmJgorCWVjaG8gdGhyZWUgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBleGNsdWRlIHRhZyBvbmUnICcKKwlnaXQgLUMgc2hhbGxvdzEyIGZldGNoIC0tc2hhbGxvdy1leGNsdWRlIG9uZSBvcmlnaW4gJiYKKwlnaXQgLUMgc2hhbGxvdzEyIGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIG9yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgdGhyZWUgdHdvID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyBkZWVwZW4nICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNoYWxsb3ctZGVlcGVuICYmCisJKAorCWNkIHNoYWxsb3ctZGVlcGVuICYmCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwltdiAuZ2l0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3NoYWxsb3ctZGVlcGVuLmdpdCIgJiYKKwlnaXQgY2xvbmUgLS1kZXB0aCAxICRIVFRQRF9VUkwvc21hcnQvc2hhbGxvdy1kZWVwZW4uZ2l0IGRlZXBlbiAmJgorCW12ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3NoYWxsb3ctZGVlcGVuLmdpdCIgLmdpdCAmJgorCXRlc3RfY29tbWl0IGZvdXIgJiYKKwlnaXQgLUMgZGVlcGVuIGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIG1hc3RlciA+YWN0dWFsICYmCisJZWNobyB0aHJlZSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwltdiAuZ2l0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3NoYWxsb3ctZGVlcGVuLmdpdCIgJiYKKwlnaXQgLUMgZGVlcGVuIGZldGNoIC0tZGVlcGVuPTEgJiYKKwlnaXQgLUMgZGVlcGVuIGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIG9yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWZvdXIKKwl0aHJlZQorCXR3bworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTQwLWh0dHAtcHVzaC13ZWJkYXYuc2ggYi90L3Q1NTQwLWh0dHAtcHVzaC13ZWJkYXYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDQ3NmMzMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NDAtaHR0cC1wdXNoLXdlYmRhdi5zaApAQCAtMCwwICsxLDE3NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBDbGVtZW5zIEJ1Y2hhY2hlciA8ZHJpenpkQGFvbi5hdD4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBXZWJEQVYgaHR0cC1wdXNoCisKK1RoaXMgdGVzdCBydW5zIHZhcmlvdXMgc2FuaXR5IGNoZWNrcyBvbiBodHRwLXB1c2guJworCisuIC4vdGVzdC1saWIuc2gKKworaWYgZ2l0IGh0dHAtcHVzaCA+IC9kZXYvbnVsbCAyPiYxIHx8IFsgJD8gLWVxIDEyOCBdCit0aGVuCisJc2tpcF9hbGw9InNraXBwaW5nIHRlc3QsIFVTRV9DVVJMX01VTFRJIGlzIG5vdCBkZWZpbmVkIgorCXRlc3RfZG9uZQorZmkKKworTElCX0hUVFBEX0RBVj10CisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorUk9PVF9QQVRIPSIkUFdEIgorc3RhcnRfaHR0cGQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVtb3RlIHJlcG9zaXRvcnknICcKKwljZCAiJFJPT1RfUEFUSCIgJiYKKwlta2RpciB0ZXN0X3JlcG8gJiYKKwljZCB0ZXN0X3JlcG8gJiYKKwlnaXQgaW5pdCAmJgorCTogPnBhdGgxICYmCisJZ2l0IGFkZCBwYXRoMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWNkIC0gJiYKKwlnaXQgY2xvbmUgLS1iYXJlIHRlc3RfcmVwbyB0ZXN0X3JlcG8uZ2l0ICYmCisJY2QgdGVzdF9yZXBvLmdpdCAmJgorCWdpdCAtLWJhcmUgdXBkYXRlLXNlcnZlci1pbmZvICYmCisJbXYgaG9va3MvcG9zdC11cGRhdGUuc2FtcGxlIGhvb2tzL3Bvc3QtdXBkYXRlICYmCisJT1JJR19IRUFEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWNkIC0gJiYKKwltdiB0ZXN0X3JlcG8uZ2l0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcGFzc3dvcmQtcHJvdGVjdGVkIHJlcG9zaXRvcnknICcKKwlta2RpciAtcCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9hdXRoL2R1bWIiICYmCisJY3AgLVJmICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQiIFwKKwkgICAgICAgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYXV0aC9kdW1iL3Rlc3RfcmVwby5naXQiCisnCisKK3NldHVwX2Fza3Bhc3NfaGVscGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlbW90ZSByZXBvc2l0b3J5JyAnCisJY2QgIiRST09UX1BBVEgiICYmCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvZHVtYi90ZXN0X3JlcG8uZ2l0IHRlc3RfcmVwb19jbG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHJlbW90ZSByZXBvc2l0b3J5IHdpdGggcGFja2VkIHJlZnMnICcKKwljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCisJOiA+cGF0aDIgJiYKKwlnaXQgYWRkIHBhdGgyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBwYXRoMiAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IHB1c2ggJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwby5naXQgJiYKKwkgdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBhbHJlYWR5IHVwLXRvLWRhdGUnICcKKwlnaXQgcHVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHJlbW90ZSByZXBvc2l0b3J5IHdpdGggdW5wYWNrZWQgcmVmcycgJworCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCAmJgorCSBybSBwYWNrZWQtcmVmcyAmJgorCSBnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkT1JJR19IRUFEICYmCisJIGdpdCAtLWJhcmUgdXBkYXRlLXNlcnZlci1pbmZvKSAmJgorCWdpdCBwdXNoICYmCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0ICYmCisJIHRlc3QgJEhFQUQgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAtcHVzaCBmZXRjaGVzIHVucGFja2VkIG9iamVjdHMnICcKKwljcCAtUiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCBcCisJCSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG9fdW5wYWNrZWQuZ2l0ICYmCisKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9kdW1iL3Rlc3RfcmVwb191bnBhY2tlZC5naXQgXAorCQkiJFJPT1RfUEFUSCIvZmV0Y2hfdW5wYWNrZWQgJiYKKworCSMgQnkgcmVzZXQsIHdlIGZvcmNlIGdpdCB0byByZXRyaWV2ZSB0aGUgb2JqZWN0CisJKGNkICIkUk9PVF9QQVRIIi9mZXRjaF91bnBhY2tlZCAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJIGdpdCByZW1vdGUgcm0gb3JpZ2luICYmCisJIGdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPTAgLS1hbGwgJiYKKwkgZ2l0IHBydW5lICYmCisJIGdpdCBwdXNoIC1mIC12ICRIVFRQRF9VUkwvZHVtYi90ZXN0X3JlcG9fdW5wYWNrZWQuZ2l0IG1hc3RlcikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC1wdXNoIGZldGNoZXMgcGFja2VkIG9iamVjdHMnICcKKwljcCAtUiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCBcCisJCSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG9fcGFja2VkLmdpdCAmJgorCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvZHVtYi90ZXN0X3JlcG9fcGFja2VkLmdpdCBcCisJCSIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmVfcGFja2VkICYmCisKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwb19wYWNrZWQuZ2l0ICYmCisJIGdpdCAtLWJhcmUgcmVwYWNrICYmCisJIGdpdCAtLWJhcmUgcHJ1bmUtcGFja2VkKSAmJgorCisJIyBCeSByZXNldCwgd2UgZm9yY2UgZ2l0IHRvIHJldHJpZXZlIHRoZSBwYWNrZWQgb2JqZWN0CisJKGNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmVfcGFja2VkICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwkgZ2l0IHJlbW90ZSByZW1vdmUgb3JpZ2luICYmCisJIGdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPTAgLS1hbGwgJiYKKwkgZ2l0IHBydW5lICYmCisJIGdpdCBwdXNoIC1mIC12ICRIVFRQRF9VUkwvZHVtYi90ZXN0X3JlcG9fcGFja2VkLmdpdCBtYXN0ZXIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBhbmQgZGVsZXRlIHJlbW90ZSBicmFuY2gnICcKKwljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCisJZ2l0IGNoZWNrb3V0IC1iIGRldiAmJgorCTogPnBhdGgzICYmCisJZ2l0IGFkZCBwYXRoMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZGV2ICYmCisJZ2l0IHB1c2ggb3JpZ2luIGRldiAmJgorCWdpdCBwdXNoIG9yaWdpbiA6ZGV2ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vZGV2CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01LQ09MIHNlbmRzIGRpcmVjdG9yeSBuYW1lcyB3aXRoIHRyYWlsaW5nIHNsYXNoZXMnICcKKworCSEgZ3JlcCAiXCJNS0NPTC4qW14vXSBIVFRQL1teIF0qXCIiIDwgIiRIVFRQRF9ST09UX1BBVEgiL2FjY2Vzcy5sb2cKKworJworCit4MT0iWzAtOWEtZl0iCit4Mj0iJHgxJHgxIgoreHRydW5jPSQoZWNobyAkT0lEX1JFR0VYIHwgc2VkIC1lICJzL1xbMC05YS1mXF1cWzAtOWEtZlxdLy8iKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQVVQgYW5kIE1PVkUgc2VuZHMgb2JqZWN0IHRvIFVSTHMgd2l0aCBTSEEtMSBoYXNoIHN1ZmZpeCcgJworCXNlZCBcCisJCS1lICJzL1BVVCAvT1AgLyIgXAorCQktZSAicy9NT1ZFIC9PUCAvIiBcCisJICAgIC1lICJzfC9vYmplY3RzLyR4Mi8ke3h0cnVuY31fJE9JRF9SRUdFWHxXQU5URURfUEFUSF9SRVFVRVNUfCIgXAorCQkiJEhUVFBEX1JPT1RfUEFUSCIvYWNjZXNzLmxvZyB8CisJZ3JlcCAtZSAiXCJPUCAuKldBTlRFRF9QQVRIX1JFUVVFU1QgSFRUUC9bLjAtOV0qXCIgMjBbMC05XSAiCisKKycKKwordGVzdF9odHRwX3B1c2hfbm9uZmYgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwby5naXQgXAorCSIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgbWFzdGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gcGFzc3dvcmQtcHJvdGVjdGVkIHJlcG9zaXRvcnkgKHVzZXIgaW4gVVJMKScgJworCXRlc3RfY29tbWl0IHB3LXVzZXIgJiYKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgcGFzc0Bob3N0ICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9VUkxfVVNFUi9hdXRoL2R1bWIvdGVzdF9yZXBvLmdpdCIgSEVBRCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9hdXRoL2R1bWIvdGVzdF9yZXBvLmdpdCIgXAorCQlyZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd1c2VyIHdhcyBwcm9tcHRlZCBvbmx5IG9uY2UgZm9yIHBhc3N3b3JkJyAnCisJZXhwZWN0X2Fza3Bhc3MgcGFzcyB1c2VyQGhvc3QKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncHVzaCB0byBwYXNzd29yZC1wcm90ZWN0ZWQgcmVwb3NpdG9yeSAobm8gdXNlciBpbiBVUkwpJyAnCisJdGVzdF9jb21taXQgcHctbm91c2VyICYmCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0IHBhc3NAaG9zdCAmJgorCWdpdCBwdXNoICIkSFRUUERfVVJML2F1dGgvZHVtYi90ZXN0X3JlcG8uZ2l0IiBIRUFEICYmCisJZXhwZWN0X2Fza3Bhc3MgYm90aCB1c2VyQGhvc3QgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYXV0aC9kdW1iL3Rlc3RfcmVwby5naXQiIFwKKwkJcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTQxLWh0dHAtcHVzaC1zbWFydC5zaCBiL3QvdDU1NDEtaHR0cC1wdXNoLXNtYXJ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFmYzY4MGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTQxLWh0dHAtcHVzaC1zbWFydC5zaApAQCAtMCwwICsxLDQ3OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBDbGVtZW5zIEJ1Y2hhY2hlciA8ZHJpenpkQGFvbi5hdD4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBzbWFydCBwdXNoaW5nIG92ZXIgaHR0cCB2aWEgaHR0cC1iYWNrZW5kJworLiAuL3Rlc3QtbGliLnNoCisKK1JPT1RfUEFUSD0iJFBXRCIKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdwZy5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXRlcm1pbmFsLnNoCitzdGFydF9odHRwZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW1vdGUgcmVwb3NpdG9yeScgJworCWNkICIkUk9PVF9QQVRIIiAmJgorCW1rZGlyIHRlc3RfcmVwbyAmJgorCWNkIHRlc3RfcmVwbyAmJgorCWdpdCBpbml0ICYmCisJOiA+cGF0aDEgJiYKKwlnaXQgYWRkIHBhdGgxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJY2QgLSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgdGVzdF9yZXBvIHRlc3RfcmVwby5naXQgJiYKKwljZCB0ZXN0X3JlcG8uZ2l0ICYmCisJZ2l0IGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwlnaXQgY29uZmlnIGNvcmUubG9nYWxscmVmdXBkYXRlcyB0cnVlICYmCisJT1JJR19IRUFEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWNkIC0gJiYKKwltdiB0ZXN0X3JlcG8uZ2l0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIgorJworCitzZXR1cF9hc2twYXNzX2hlbHBlcgorCitjYXQgPmV4cCA8PEVPRgorR0VUICAvc21hcnQvdGVzdF9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZW1wdHkgcGF0aCBjb21wb25lbnRzJyAnCisJIyBDbGVhciB0aGUgbG9nLCBzbyB0aGF0IGl0IGRvZXMgbm90IGFmZmVjdCB0aGUgInVzZWQgcmVjZWl2ZS1wYWNrCisJIyBzZXJ2aWNlIiB0ZXN0IHdoaWNoIHJlYWRzIHRoZSBsb2cgdG9vLgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiPlwiXCRIVFRQRF9ST09UX1BBVEhcIi9hY2Nlc3MubG9nIiAmJgorCisJIyBJbiB0aGUgVVJMLCBhZGQgYSB0cmFpbGluZyBzbGFzaCwgYW5kIHNlZSBpZiBnaXQgYXBwZW5kcyB5ZXQgYW5vdGhlcgorCSMgc2xhc2guCisJY2QgIiRST09UX1BBVEgiICYmCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvc21hcnQvdGVzdF9yZXBvLmdpdC8gdGVzdF9yZXBvX2Nsb25lICYmCisKKwkjIE5FRURTV09SSzogSWYgdGhlIG92ZXJzcGVjaWZpY2F0aW9uIG9mIHRoZSBleHBlY3RlZCByZXN1bHQgaXMgcmVkdWNlZCwgd2UKKwkjIG1pZ2h0IGJlIGFibGUgdG8gcnVuIHRoaXMgdGVzdCBpbiBhbGwgcHJvdG9jb2wgdmVyc2lvbnMuCisJaWYgdGVzdCAiJEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT04iID0gMAorCXRoZW4KKwkJY2hlY2tfYWNjZXNzX2xvZyBleHAKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZW1vdGUgcmVwb3NpdG9yeScgJworCXJtIC1yZiB0ZXN0X3JlcG9fY2xvbmUgJiYKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9zbWFydC90ZXN0X3JlcG8uZ2l0IHRlc3RfcmVwb19jbG9uZSAmJgorCSgKKwkJY2QgdGVzdF9yZXBvX2Nsb25lICYmIGdpdCBjb25maWcgcHVzaC5kZWZhdWx0IG1hdGNoaW5nCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHJlbW90ZSByZXBvc2l0b3J5IChzdGFuZGFyZCknICcKKwljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCisJOiA+cGF0aDIgJiYKKwlnaXQgYWRkIHBhdGgyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBwYXRoMiAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJR0lUX1RSQUNFX0NVUkw9dHJ1ZSBnaXQgcHVzaCAtdiAtdiAyPmVyciAmJgorCSEgZ3JlcCAiRXhwZWN0OiAxMDAtY29udGludWUiIGVyciAmJgorCWdyZXAgIlBPU1QgZ2l0LXJlY2VpdmUtcGFjayAoWzAtOV0qIGJ5dGVzKSIgZXJyICYmCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0ICYmCisJIHRlc3QgJEhFQUQgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggYWxyZWFkeSB1cC10by1kYXRlJyAnCisJZ2l0IHB1c2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGFuZCBkZWxldGUgcmVtb3RlIGJyYW5jaCcgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZGV2ICYmCisJOiA+cGF0aDMgJiYKKwlnaXQgYWRkIHBhdGgzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBkZXYgJiYKKwlnaXQgcHVzaCBvcmlnaW4gZGV2ICYmCisJZ2l0IHB1c2ggb3JpZ2luIDpkZXYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9kZXYKKycKKworY2F0ID4iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC90ZXN0X3JlcG8uZ2l0L2hvb2tzL3VwZGF0ZSIgPDxFT0YKKyMhL2Jpbi9zaAorZXhpdCAxCitFT0YKK2NobW9kIGEreCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC90ZXN0X3JlcG8uZ2l0L2hvb2tzL3VwZGF0ZSIKKworY2F0ID5leHAgPDxFT0YKK3JlbW90ZTogZXJyb3I6IGhvb2sgZGVjbGluZWQgdG8gdXBkYXRlIHJlZnMvaGVhZHMvZGV2MgorVG8gaHR0cDovLzEyNy4wLjAuMTokTElCX0hUVFBEX1BPUlQvc21hcnQvdGVzdF9yZXBvLmdpdAorICEgW3JlbW90ZSByZWplY3RlZF0gZGV2MiAtPiBkZXYyIChob29rIGRlY2xpbmVkKQorZXJyb3I6IGZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnaHR0cDovLzEyNy4wLjAuMTokTElCX0hUVFBEX1BPUlQvc21hcnQvdGVzdF9yZXBvLmdpdCcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3RlZCB1cGRhdGUgcHJpbnRzIHN0YXR1cycgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZGV2MiAmJgorCTogPnBhdGg0ICYmCisJZ2l0IGFkZCBwYXRoNCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZGV2MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIG9yaWdpbiBkZXYyIDI+YWN0ICYmCisJc2VkIC1lICIvXnJlbW90ZTogL3MvICokLy8iIDxhY3QgPmNtcCAmJgorCXRlc3RfaTE4bmNtcCBleHAgY21wCisnCitybSAtZiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC90ZXN0X3JlcG8uZ2l0L2hvb2tzL3VwZGF0ZSIKKworY2F0ID5leHAgPDxFT0YKK0dFVCAgL3NtYXJ0L3Rlc3RfcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDIwMAorUE9TVCAvc21hcnQvdGVzdF9yZXBvLmdpdC9naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZWQgcmVjZWl2ZS1wYWNrIHNlcnZpY2UnICcKKwkjIE5FRURTV09SSzogSWYgdGhlIG92ZXJzcGVjaWZpY2F0aW9uIG9mIHRoZSBleHBlY3RlZCByZXN1bHQgaXMgcmVkdWNlZCwgd2UKKwkjIG1pZ2h0IGJlIGFibGUgdG8gcnVuIHRoaXMgdGVzdCBpbiBhbGwgcHJvdG9jb2wgdmVyc2lvbnMuCisJaWYgdGVzdCAiJEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT04iID0gMAorCXRoZW4KKwkJY2hlY2tfYWNjZXNzX2xvZyBleHAKKwlmaQorJworCit0ZXN0X2h0dHBfcHVzaF9ub25mZiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCBcCisJIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSBtYXN0ZXIgCQlzdWNjZXNzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZmFpbHMgZm9yIG5vbi1mYXN0LWZvcndhcmQgcmVmcyB1bm1hdGNoZWQgYnkgcmVtb3RlIGhlbHBlcicgJworCSMgY3JlYXRlIGEgZGlzc2ltaWxhcmx5LW5hbWVkIHJlbW90ZSByZWYgc28gdGhhdCBnaXQgaXMgdW5hYmxlIHRvIG1hdGNoIHRoZQorCSMgdHdvIHJlZnMgKHZpei4gbG9jYWwsIHJlbW90ZSkgdW5sZXNzIGFuIGV4cGxpY2l0IHJlZnNwZWMgaXMgcHJvdmlkZWQuCisJZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcjpyZXRzYW0gJiYKKworCWVjaG8gImNoYW5nZSBjaGFuZ2VkIiA+IHBhdGgyICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBwYXRoMiAtLWFtZW5kICYmCisKKwkjIHB1c2ggbWFzdGVyIHRvbzsgdGhpcyBlbnN1cmVzIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSAnIidwdXNoJyInIGNvbW1hbmQgdG8KKwkjIHRoZSByZW1vdGUgaGVscGVyIGFuZCB0cmlnZ2VycyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoZWxwZXIuCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLXYgb3JpZ2luICttYXN0ZXIgbWFzdGVyOnJldHNhbSA+b3V0cHV0IDI+JjEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZmFpbHMgZm9yIG5vbi1mYXN0LWZvcndhcmQgcmVmcyB1bm1hdGNoZWQgYnkgcmVtb3RlIGhlbHBlcjogcmVtb3RlIG91dHB1dCcgJworCWdyZXAgIl4gKyBbYS1mMC05XSpcLlwuXC5bYS1mMC05XSogKm1hc3RlciAtPiBtYXN0ZXIgKGZvcmNlZCB1cGRhdGUpJCIgb3V0cHV0ICYmCisJZ3JlcCAiXiAhIFxbcmVqZWN0ZWRcXSAqbWFzdGVyIC0+IHJldHNhbSAobm9uLWZhc3QtZm9yd2FyZCkkIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmYWlscyBmb3Igbm9uLWZhc3QtZm9yd2FyZCByZWZzIHVubWF0Y2hlZCBieSByZW1vdGUgaGVscGVyOiBvdXIgb3V0cHV0JyAnCisJdGVzdF9pMThuZ3JlcCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UiIFwKKwkJb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggKGNodW5rZWQpJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IGNvbW1pdCBwYXRoMyAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdF9jb25maWcgaHR0cC5wb3N0YnVmZmVyIDQgJiYKKwlnaXQgcHVzaCAtdiAtdiBvcmlnaW4gJEJSQU5DSCAyPmVyciAmJgorCWdyZXAgIlBPU1QgZ2l0LXJlY2VpdmUtcGFjayAoY2h1bmtlZCkiIGVyciAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCAmJgorCSB0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKQorJworCisjIyBSZWZlcmVuY2VzIG9mIHJlbW90ZTogYXRvbWljMSgxKSAgICAgICAgICAgIG1hc3RlcigyKSBjb2xsYXRlcmFsKDIpIG90aGVyKDIpCisjIyBSZWZlcmVuY2VzIG9mIGxvY2FsIDogICAgICAgICAgICBhdG9taWMyKDIpIG1hc3RlcigxKSBjb2xsYXRlcmFsKDMpIG90aGVyKDIpIGNvbGxhdGVyYWwxKDMpIGF0b21pYygxKQorIyMgQXRvbWljIHB1c2ggICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXIoMSkgY29sbGF0ZXJhbCgzKSAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWMoMSkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1hdG9taWMgYWxzbyBwcmV2ZW50cyBicmFuY2ggY3JlYXRpb24sIHJlcG9ydHMgY29sbGF0ZXJhbCcgJworCSMgU2V0dXAgdXBzdHJlYW0gcmVwbyAtIGVtcHR5IGZvciBub3cKKwlkPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYXRvbWljLWJyYW5jaGVzLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSAiJGQiICYmCisJdGVzdF9jb25maWcgLUMgIiRkIiBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwl1cD0iJEhUVFBEX1VSTCIvc21hcnQvYXRvbWljLWJyYW5jaGVzLmdpdCAmJgorCisJIyBUZWxsICIkdXAiIGFib3V0IHRocmVlIGJyYW5jaGVzIGZvciBub3cKKwl0ZXN0X2NvbW1pdCBhdG9taWMxICYmCisJdGVzdF9jb21taXQgYXRvbWljMiAmJgorCWdpdCBicmFuY2ggY29sbGF0ZXJhbCAmJgorCWdpdCBicmFuY2ggb3RoZXIgJiYKKwlnaXQgcHVzaCAiJHVwIiBhdG9taWMxIG1hc3RlciBjb2xsYXRlcmFsIG90aGVyICYmCisJZ2l0IHRhZyAtZCBhdG9taWMxICYmCisKKwkjIGNvbGxhdGVyYWwgaXMgYSB2YWxpZCBwdXNoLCBidXQgc2hvdWxkIGJlIGZhaWxlZCBieSBhdG9taWMgcHVzaAorCWdpdCBjaGVja291dCBjb2xsYXRlcmFsICYmCisJdGVzdF9jb21taXQgY29sbGF0ZXJhbDEgJiYKKworCSMgTWFrZSBtYXN0ZXIgaW5jb21wYXRpYmxlIHdpdGggdXBzdHJlYW0gdG8gcHJvdm9rZSBhdG9taWMKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCisJIyBBZGQgYSBuZXcgYnJhbmNoIHdoaWNoIHNob3VsZCBiZSBmYWlsZWQgYnkgYXRvbWljIHB1c2guIFRoaXMgaXMgYQorCSMgcmVncmVzc2lvbiBjYXNlLgorCWdpdCBicmFuY2ggYXRvbWljICYmCisKKwkjIC0tYXRvbWljIHNob3VsZCBjYXVzZSBlbnRpcmUgcHVzaCB0byBiZSByZWplY3RlZAorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tYXRvbWljICIkdXAiIG1hc3RlciBhdG9taWMgY29sbGF0ZXJhbCAyPm91dHB1dCAmJgorCisJIyB0aGUgbmV3IGJyYW5jaCBzaG91bGQgbm90IGhhdmUgYmVlbiBjcmVhdGVkIHVwc3RyZWFtCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DICIkZCIgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy9oZWFkcy9hdG9taWMgJiYKKworCSMgdXBzdHJlYW0gc2hvdWxkIHN0aWxsIHJlZmxlY3QgYXRvbWljMiwgdGhlIGxhc3QgdGhpbmcgd2UgcHVzaGVkCisJIyBzdWNjZXNzZnVsbHkKKwlnaXQgcmV2LXBhcnNlIGF0b21pYzIgPmV4cGVjdGVkICYmCisJIyBvbiBtYXN0ZXIuLi4KKwlnaXQgLUMgIiRkIiByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCSMgLi4uYW5kIGNvbGxhdGVyYWwuCisJZ2l0IC1DICIkZCIgcmV2LXBhcnNlIHJlZnMvaGVhZHMvY29sbGF0ZXJhbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwkjIHRoZSBmYWlsZWQgcmVmcyBzaG91bGQgYmUgaW5kaWNhdGVkIHRvIHRoZSB1c2VyCisJZ3JlcCAiXiAhIC4qcmVqZWN0ZWQuKiBtYXN0ZXIgLT4gbWFzdGVyIiBvdXRwdXQgJiYKKworCSMgdGhlIGNvbGxhdGVyYWwgZmFpbHVyZSByZWZzIHNob3VsZCBiZSBpbmRpY2F0ZWQgdG8gdGhlIHVzZXIKKwlncmVwICJeICEgLipyZWplY3RlZC4qIGF0b21pYyAtPiBhdG9taWMgLiphdG9taWMgcHVzaCBmYWlsZWQiIG91dHB1dCAmJgorCWdyZXAgIl4gISAuKnJlamVjdGVkLiogY29sbGF0ZXJhbCAtPiBjb2xsYXRlcmFsIC4qYXRvbWljIHB1c2ggZmFpbGVkIiBvdXRwdXQgJiYKKworCSMgbmV2ZXIgcmVwb3J0IHdoYXQgd2UgZG8gbm90IHB1c2gKKwkhIGdyZXAgIl4gISAuKnJlamVjdGVkLiogYXRvbWljMSAiIG91dHB1dCAmJgorCSEgZ3JlcCAiXiAhIC4qcmVqZWN0ZWQuKiBvdGhlciAiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tYXRvbWljIGZhaWxzIG9uIHNlcnZlci1zaWRlIGVycm9ycycgJworCSMgVXNlIHByZXZpb3VzbHkgc2V0IHVwIHJlcG9zaXRvcnkKKwlkPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYXRvbWljLWJyYW5jaGVzLmdpdCAmJgorCXRlc3RfY29uZmlnIC1DICIkZCIgaHR0cC5yZWNlaXZlcGFjayB0cnVlICYmCisJdXA9IiRIVFRQRF9VUkwiL3NtYXJ0L2F0b21pYy1icmFuY2hlcy5naXQgJiYKKworCSMgYnJlYWsgcmVmIHVwZGF0ZXMgZm9yIG90aGVyIG9uIHRoZSByZW1vdGUgc2l0ZQorCW1rZGlyICIkZC9yZWZzL2hlYWRzL290aGVyLmxvY2siICYmCisKKwkjIGFkZCB0aGUgbmV3IGNvbW1pdCB0byBvdGhlcgorCWdpdCBicmFuY2ggLWYgb3RoZXIgY29sbGF0ZXJhbCAmJgorCisJIyAtLWF0b21pYyBzaG91bGQgY2F1c2UgZW50aXJlIHB1c2ggdG8gYmUgcmVqZWN0ZWQKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLWF0b21pYyAiJHVwIiBhdG9taWMgb3RoZXIgMj5vdXRwdXQgICYmCisKKwkjIHRoZSBuZXcgYnJhbmNoIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgdXBzdHJlYW0KKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgIiRkIiBzaG93LXJlZiAtLXZlcmlmeSByZWZzL2hlYWRzL2F0b21pYyAmJgorCisJIyB1cHN0cmVhbSBzaG91bGQgc3RpbGwgcmVmbGVjdCBhdG9taWMyLCB0aGUgbGFzdCB0aGluZyB3ZSBwdXNoZWQKKwkjIHN1Y2Nlc3NmdWxseQorCWdpdCByZXYtcGFyc2UgYXRvbWljMiA+ZXhwZWN0ZWQgJiYKKwkjIC4uLnRvIG90aGVyLgorCWdpdCAtQyAiJGQiIHJldi1wYXJzZSByZWZzL2hlYWRzL290aGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCSMgdGhlIG5ldyBicmFuY2ggc2hvdWxkIG5vdCBoYXZlIGJlZW4gY3JlYXRlZCB1cHN0cmVhbQorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyAiJGQiIHNob3ctcmVmIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYXRvbWljICYmCisKKwkjIHRoZSBmYWlsZWQgcmVmcyBzaG91bGQgYmUgaW5kaWNhdGVkIHRvIHRoZSB1c2VyCisJZ3JlcCAiXiAhIC4qcmVqZWN0ZWQuKiBvdGhlciAtPiBvdGhlciAuKmF0b21pYyB0cmFuc2FjdGlvbiBmYWlsZWQiIG91dHB1dCAmJgorCisJIyB0aGUgY29sbGF0ZXJhbCBmYWlsdXJlIHJlZnMgc2hvdWxkIGJlIGluZGljYXRlZCB0byB0aGUgdXNlcgorCWdyZXAgIl4gISAuKnJlamVjdGVkLiogYXRvbWljIC0+IGF0b21pYyAuKmF0b21pYyB0cmFuc2FjdGlvbiBmYWlsZWQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tYWxsIGNhbiBwdXNoIHRvIGVtcHR5IHJlcG8nICcKKwlkPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvZW1wdHktYWxsLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSAiJGQiICYmCisJZ2l0IC0tZ2l0LWRpcj0iJGQiIGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwlnaXQgcHVzaCAtLWFsbCAiJEhUVFBEX1VSTCIvc21hcnQvZW1wdHktYWxsLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tbWlycm9yIGNhbiBwdXNoIHRvIGVtcHR5IHJlcG8nICcKKwlkPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvZW1wdHktbWlycm9yLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSAiJGQiICYmCisJZ2l0IC0tZ2l0LWRpcj0iJGQiIGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwlnaXQgcHVzaCAtLW1pcnJvciAiJEhUVFBEX1VSTCIvc21hcnQvZW1wdHktbWlycm9yLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tYWxsIHRvIHJlcG8gd2l0aCBhbHRlcm5hdGVzJyAnCisJcz0kSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQgJiYKKwlkPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYWx0ZXJuYXRlcy1hbGwuZ2l0ICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtLXNoYXJlZCAiJHMiICIkZCIgJiYKKwlnaXQgLS1naXQtZGlyPSIkZCIgY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZSAmJgorCWdpdCAtLWdpdC1kaXI9IiRkIiByZXBhY2sgLWFkbCAmJgorCWdpdCBwdXNoIC0tYWxsICIkSFRUUERfVVJMIi9zbWFydC9hbHRlcm5hdGVzLWFsbC5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLW1pcnJvciB0byByZXBvIHdpdGggYWx0ZXJuYXRlcycgJworCXM9JEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC90ZXN0X3JlcG8uZ2l0ICYmCisJZD0kSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2FsdGVybmF0ZXMtbWlycm9yLmdpdCAmJgorCWdpdCBjbG9uZSAtLWJhcmUgLS1zaGFyZWQgIiRzIiAiJGQiICYmCisJZ2l0IC0tZ2l0LWRpcj0iJGQiIGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwlnaXQgLS1naXQtZGlyPSIkZCIgcmVwYWNrIC1hZGwgJiYKKwlnaXQgcHVzaCAtLW1pcnJvciAiJEhUVFBEX1VSTCIvc21hcnQvYWx0ZXJuYXRlcy1taXJyb3IuZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdwdXNoIHNob3dzIHByb2dyZXNzIHdoZW4gc3RkZXJyIGlzIGEgdHR5JyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCXRlc3RfY29tbWl0IG5vaXN5ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgcHVzaCA+b3V0cHV0IDI+JjEgJiYKKwl0ZXN0X2kxOG5ncmVwICJeV3JpdGluZyBvYmplY3RzIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3B1c2ggLS1xdWlldCBzaWxlbmNlcyBzdGF0dXMgYW5kIHByb2dyZXNzJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCXRlc3RfY29tbWl0IHF1aWV0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgcHVzaCAtLXF1aWV0ID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3B1c2ggLS1uby1wcm9ncmVzcyBzaWxlbmNlcyBwcm9ncmVzcyBidXQgbm90IHN0YXR1cycgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwl0ZXN0X2NvbW1pdCBuby1wcm9ncmVzcyAmJgorCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLS1uby1wcm9ncmVzcyA+b3V0cHV0IDI+JjEgJiYKKwl0ZXN0X2kxOG5ncmVwICJeVG8gaHR0cCIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAhICJeV3JpdGluZyBvYmplY3RzIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLXByb2dyZXNzIHNob3dzIHByb2dyZXNzIHRvIG5vbi10dHknICcKKwljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCisJdGVzdF9jb21taXQgcHJvZ3Jlc3MgJiYKKwlnaXQgcHVzaCAtLXByb2dyZXNzID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgIl5UbyBodHRwIiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeV3JpdGluZyBvYmplY3RzIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cCBwdXNoIGdpdmVzIHNhbmUgZGVmYXVsdHMgdG8gcmVmbG9nJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCXRlc3RfY29tbWl0IHJlZmxvZy10ZXN0ICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9VUkwiL3NtYXJ0L3Rlc3RfcmVwby5naXQgJiYKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQiIFwKKwkJbG9nIC1nIC0xIC0tZm9ybWF0PSIlZ24gPCVnZT4iID5hY3R1YWwgJiYKKwllY2hvICJhbm9ueW1vdXMgPGFub255bW91c0BodHRwLjEyNy4wLjAuMT4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgcHVzaCByZXNwZWN0cyBHSVRfQ09NTUlUVEVSXyogaW4gcmVmbG9nJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCXRlc3RfY29tbWl0IGN1c3RvbS1yZWZsb2ctdGVzdCAmJgorCWdpdCBwdXNoICIkSFRUUERfVVJMIi9zbWFydF9jdXN0b21fZW52L3Rlc3RfcmVwby5naXQgJiYKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQiIFwKKwkJbG9nIC1nIC0xIC0tZm9ybWF0PSIlZ24gPCVnZT4iID5hY3R1YWwgJiYKKwllY2hvICJDdXN0b20gVXNlciA8Y3VzdG9tQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBvdmVyIHNtYXJ0IGh0dHAgd2l0aCBhdXRoJyAnCisJY2QgIiRST09UX1BBVEgvdGVzdF9yZXBvX2Nsb25lIiAmJgorCWVjaG8gcHVzaC1hdXRoLXRlc3QgPmV4cGVjdCAmJgorCXRlc3RfY29tbWl0IHB1c2gtYXV0aC10ZXN0ICYmCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0IHBhc3NAaG9zdCAmJgorCWdpdCBwdXNoICIkSFRUUERfVVJMIi9hdXRoL3NtYXJ0L3Rlc3RfcmVwby5naXQgJiYKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQiIFwKKwkJbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlleHBlY3RfYXNrcGFzcyBib3RoIHVzZXJAaG9zdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBhdXRoLW9ubHktZm9yLXB1c2ggcmVwbycgJworCWNkICIkUk9PVF9QQVRIL3Rlc3RfcmVwb19jbG9uZSIgJiYKKwllY2hvIHB1c2gtaGFsZi1hdXRoID5leHBlY3QgJiYKKwl0ZXN0X2NvbW1pdCBwdXNoLWhhbGYtYXV0aCAmJgorCXNldF9hc2twYXNzIHVzZXJAaG9zdCBwYXNzQGhvc3QgJiYKKwlnaXQgcHVzaCAiJEhUVFBEX1VSTCIvYXV0aC1wdXNoL3NtYXJ0L3Rlc3RfcmVwby5naXQgJiYKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQiIFwKKwkJbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlleHBlY3RfYXNrcGFzcyBib3RoIHVzZXJAaG9zdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHJlcG8gd2l0aG91dCBodHRwLnJlY2VpdmVwYWNrIHNldCcgJworCWNkICIkUk9PVF9QQVRIIiAmJgorCWdpdCBpbml0IGhhbGYtYXV0aCAmJgorCSgKKwkJY2QgaGFsZi1hdXRoICYmCisJCXRlc3RfY29tbWl0IG9uZQorCSkgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIGhhbGYtYXV0aCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9oYWxmLWF1dGguZ2l0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB2aWEgaGFsZi1hdXRoLWNvbXBsZXRlIGRvZXMgbm90IG5lZWQgcGFzc3dvcmQnICcKKwljZCAiJFJPT1RfUEFUSCIgJiYKKwlzZXRfYXNrcGFzcyB3cm9uZyAmJgorCWdpdCBjbG9uZSAiJEhUVFBEX1VSTCIvaGFsZi1hdXRoLWNvbXBsZXRlL3NtYXJ0L2hhbGYtYXV0aC5naXQgXAorCQloYWxmLWF1dGgtY2xvbmUgJiYKKwlleHBlY3RfYXNrcGFzcyBub25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggaW50byBoYWxmLWF1dGgtY29tcGxldGUgcmVxdWlyZXMgcGFzc3dvcmQnICcKKwljZCAiJFJPT1RfUEFUSC9oYWxmLWF1dGgtY2xvbmUiICYmCisJZWNobyB0d28gPmV4cGVjdCAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCXNldF9hc2twYXNzIHVzZXJAaG9zdCBwYXNzQGhvc3QgJiYKKwlnaXQgcHVzaCAiJEhUVFBEX1VSTC9oYWxmLWF1dGgtY29tcGxldGUvc21hcnQvaGFsZi1hdXRoLmdpdCIgJiYKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2hhbGYtYXV0aC5naXQiIFwKKwkJbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlleHBlY3RfYXNrcGFzcyBib3RoIHVzZXJAaG9zdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDTURMSU5FX0xJTUlUICdwdXNoIDIwMDAgdGFncyBvdmVyIGh0dHAnICcKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3Rfc2VxIDIwMDAgfAorCSAgc29ydCB8CisJICBzZWQgInN8Lip8JHNoYTEgcmVmcy90YWdzL3JlYWxseS1sb25nLXRhZy1uYW1lLSZ8IiBcCisJICA+LmdpdC9wYWNrZWQtcmVmcyAmJgorCXJ1bl93aXRoX2xpbWl0ZWRfY21kbGluZSBnaXQgcHVzaCAtLW1pcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVzaCB3aXRoIHBvc3QtcmVjZWl2ZSB0byBpbnNwZWN0IGNlcnRpZmljYXRlJyAnCisJKAorCQljZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCAmJgorCQlta2RpciAtcCBob29rcyAmJgorCQl3cml0ZV9zY3JpcHQgaG9va3MvcG9zdC1yZWNlaXZlIDw8LVxFT0YgJiYKKwkJIyBkaXNjYXJkIHRoZSB1cGRhdGUgbGlzdAorCQljYXQgPi9kZXYvbnVsbAorCQkjIHJlY29yZCB0aGUgcHVzaCBjZXJ0aWZpY2F0ZQorCQlpZiB0ZXN0IC1uICIke0dJVF9QVVNIX0NFUlQtfSIKKwkJdGhlbgorCQkJZ2l0IGNhdC1maWxlIGJsb2IgJEdJVF9QVVNIX0NFUlQgPi4uL3B1c2gtY2VydAorCQlmaSAmJgorCQljYXQgPi4uL3B1c2gtY2VydC1zdGF0dXMgPDxFX09fRgorCQlTSUdORVI9JHtHSVRfUFVTSF9DRVJUX1NJR05FUi1ub2JvZHl9CisJCUtFWT0ke0dJVF9QVVNIX0NFUlRfS0VZLW5va2V5fQorCQlTVEFUVVM9JHtHSVRfUFVTSF9DRVJUX1NUQVRVUy1ub3N0YXR1c30KKwkJTk9OQ0VfU1RBVFVTPSR7R0lUX1BVU0hfQ0VSVF9OT05DRV9TVEFUVVMtbm9ub25jZXN0YXR1c30KKwkJTk9OQ0U9JHtHSVRfUFVTSF9DRVJUX05PTkNFLW5vbm9uY2V9CisJCUVfT19GCisJCUVPRgorCisJCWdpdCBjb25maWcgcmVjZWl2ZS5jZXJ0bm9uY2VzZWVkIHNla3JpdCAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuY2VydG5vbmNlc2xvcCAzMAorCSkgJiYKKwljZCAiJFJPT1RfUEFUSC90ZXN0X3JlcG9fY2xvbmUiICYmCisJdGVzdF9jb21taXQgY2VydC10ZXN0ICYmCisJZ2l0IHB1c2ggLS1zaWduZWQgIiRIVFRQRF9VUkwvc21hcnQvdGVzdF9yZXBvLmdpdCIgJiYKKwkoCisJCWNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIiAmJgorCQljYXQgPDwtXEVPRiAmJgorCQlTSUdORVI9QyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCQlLRVk9MTNCNkY1MUVDRERFNDMwRAorCQlTVEFUVVM9RworCQlOT05DRV9TVEFUVVM9T0sKKwkJRU9GCisJCXNlZCAtbiAtZSAicy9ebm9uY2UgL05PTkNFPS9wIiAtZSAiL14kL3EiIHB1c2gtY2VydAorCSkgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9wdXNoLWNlcnQtc3RhdHVzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHN0YXR1cyBvdXRwdXQgc2NydWJzIHBhc3N3b3JkJyAnCisJY2QgIiRST09UX1BBVEgvdGVzdF9yZXBvX2Nsb25lIiAmJgorCWdpdCBwdXNoIC0tcG9yY2VsYWluIFwKKwkJIiRIVFRQRF9VUkxfVVNFUl9QQVNTL3NtYXJ0L3Rlc3RfcmVwby5naXQiIFwKKwkJK0hFQUQ6c2NydWIgPnN0YXR1cyAmJgorCSMgc2hvdWxkIGhhdmUgYmVlbiBzY3J1YmJlZCBkb3duIHRvIHZhbmlsbGEgVVJMCisJZ3JlcCAiXlRvICRIVFRQRF9VUkwvc21hcnQvdGVzdF9yZXBvLmdpdCIgc3RhdHVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbG9yaXplIGVycm9ycy9oaW50cycgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgY29sb3IudHJhbnNwb3J0PWFsd2F5cyAtYyBjb2xvci5hZHZpY2U9YWx3YXlzIFwKKwkJLWMgY29sb3IucHVzaD1hbHdheXMgXAorCQlwdXNoIG9yaWdpbiBvcmlnaW4vbWFzdGVyXjptYXN0ZXIgMj5hY3QgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0ID5kZWNvZGVkICYmCisJdGVzdF9pMThuZ3JlcCAiPFJFRD4uKnJlamVjdGVkLio8UkVTRVQ+IiBkZWNvZGVkICYmCisJdGVzdF9pMThuZ3JlcCAiPFJFRD5lcnJvcjogZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIiBkZWNvZGVkICYmCisJdGVzdF9pMThuZ3JlcCAiPFlFTExPVz5oaW50OiAiIGRlY29kZWQgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIl5oaW50OiAiIGRlY29kZWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTQyLXB1c2gtaHR0cC1zaGFsbG93LnNoIGIvdC90NTU0Mi1wdXNoLWh0dHAtc2hhbGxvdy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZGMxZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTU0Mi1wdXNoLWh0dHAtc2hhbGxvdy5zaApAQCAtMCwwICsxLDkzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHVzaCBmcm9tL3RvIGEgc2hhbGxvdyBjbG9uZSBvdmVyIGh0dHAnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK2NvbW1pdCgpIHsKKwllY2hvICIkMSIgPnRyYWNrZWQgJiYKKwlnaXQgYWRkIHRyYWNrZWQgJiYKKwlnaXQgY29tbWl0IC1tICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHRyYW5zZmVyLmZzY2tPYmplY3RzIHRydWUgJiYKKwljb21taXQgMSAmJgorCWNvbW1pdCAyICYmCisJY29tbWl0IDMgJiYKKwljb21taXQgNCAmJgorCWdpdCBjbG9uZSAuIGZ1bGwgJiYKKwkoCisJZ2l0IGluaXQgZnVsbC1hYmMgJiYKKwljZCBmdWxsLWFiYyAmJgorCWNvbW1pdCBhICYmCisJY29tbWl0IGIgJiYKKwljb21taXQgYworCSkgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWRlcHRoPTIgLmdpdCBzaGFsbG93ICYmCisJZ2l0IC0tZ2l0LWRpcj1zaGFsbG93Ly5naXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorNAorMworRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tZGVwdGg9MiBmdWxsLWFiYy8uZ2l0IHNoYWxsb3cyICYmCisJZ2l0IC0tZ2l0LWRpcj1zaGFsbG93Mi8uZ2l0IGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKK2MKK2IKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBzaGFsbG93IHJlcG8gdmlhIGh0dHAnICcKKwlnaXQgY2xvbmUgLS1iYXJlIC0tbm8tbG9jYWwgc2hhbGxvdyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkoCisJY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZ2l0IGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUKKwkpICYmCisJKAorCWNkIGZ1bGwgJiYKKwljb21taXQgOSAmJgorCWdpdCBwdXNoICRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQgK21hc3RlcjpyZWZzL3JlbW90ZXMvdG9wL21hc3RlcgorCSkgJiYKKwkoCisJY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZ2l0IGZzY2sgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIHRvcC9tYXN0ZXIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCis5Cis0CiszCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGZyb20gc2hhbGxvdyByZXBvIHZpYSBodHRwJyAnCisJbXYgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiIHNoYWxsb3ctdXBzdHJlYW0uZ2l0ICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtLW5vLWxvY2FsIGZ1bGwgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJKAorCWNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCWdpdCBjb25maWcgaHR0cC5yZWNlaXZlcGFjayB0cnVlCisJKSAmJgorCWNvbW1pdCAxMCAmJgorCWdpdCBwdXNoICRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQgK21hc3RlcjpyZWZzL3JlbW90ZXMvdG9wL21hc3RlciAmJgorCSgKKwljZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgZnNjayAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgdG9wL21hc3RlciA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKKzEwCis0CiszCisyCisxCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NDMtYXRvbWljLXB1c2guc2ggYi90L3Q1NTQzLWF0b21pYy1wdXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyMGMzMGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTQzLWF0b21pYy1wdXNoLnNoCkBAIC0wLDAgKzEsMjgzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHVzaGluZyB0byBhIHJlcG9zaXRvcnkgdXNpbmcgdGhlIGF0b21pYyBwdXNoIG9wdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK21rX3JlcG9fcGFpciAoKSB7CisJcm0gLXJmIHdvcmtiZW5jaCB1cHN0cmVhbSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gdXBzdHJlYW0gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHdvcmtiZW5jaCAmJgorCSgKKwkJY2QgdXBzdHJlYW0gJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4KKwkpICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJZ2l0IHJlbW90ZSBhZGQgdXAgLi4vdXBzdHJlYW0KKwkpCit9CisKKyMgQ29tcGFyZSB0aGUgcmVmICgkMSkgaW4gdXBzdHJlYW0gd2l0aCBhIHJlZiB2YWx1ZSBmcm9tIHdvcmtiZW5jaCAoJDIpCisjIGkuZS4gdGVzdF9yZWZzIHNlY29uZCBIRUFEQHsyfQordGVzdF9yZWZzICgpIHsKKwl0ZXN0ICQjID0gMiAmJgorCWdpdCAtQyB1cHN0cmVhbSByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIiA+ZXhwZWN0ICYmCisJZ2l0IC1DIHdvcmtiZW5jaCByZXYtcGFyc2UgLS12ZXJpZnkgIiQyIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCitmbXRfc3RhdHVzX3JlcG9ydCAoKSB7CisJc2VkIC1uIFwKKwkJLWUgIi9eVG8gLyB7IHMvICAgKi8gL2c7IHA7IH0iIFwKKwkJLWUgIi9eICEgLyB7IHMvICAgKi8gL2c7IHA7IH0iCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0b21pYyBwdXNoIHdvcmtzIGZvciBhIHNpbmdsZSBicmFuY2gnICcKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCWdpdCBwdXNoIC0tYXRvbWljIHVwIG1hc3RlcgorCSkgJiYKKwl0ZXN0X3JlZnMgbWFzdGVyIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdG9taWMgcHVzaCB3b3JrcyBmb3IgdHdvIGJyYW5jaGVzJyAnCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBicmFuY2ggc2Vjb25kICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJCXRlc3RfY29tbWl0IHRocmVlICYmCisJCWdpdCBwdXNoIC0tYXRvbWljIHVwIG1hc3RlciBzZWNvbmQKKwkpICYmCisJdGVzdF9yZWZzIG1hc3RlciBtYXN0ZXIgJiYKKwl0ZXN0X3JlZnMgc2Vjb25kIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdG9taWMgcHVzaCB3b3JrcyBpbiBjb21iaW5hdGlvbiB3aXRoIC0tbWlycm9yJyAnCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBjaGVja291dCAtYiBzZWNvbmQgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCWdpdCBwdXNoIC0tYXRvbWljIC0tbWlycm9yIHVwCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgbWFzdGVyICYmCisJdGVzdF9yZWZzIHNlY29uZCBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXRvbWljIHB1c2ggd29ya3MgaW4gY29tYmluYXRpb24gd2l0aCAtLWZvcmNlJyAnCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBicmFuY2ggc2Vjb25kIG1hc3RlciAmJgorCQl0ZXN0X2NvbW1pdCB0d29fYSAmJgorCQlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJCXRlc3RfY29tbWl0IHR3b19iICYmCisJCXRlc3RfY29tbWl0IHRocmVlX2IgJiYKKwkJdGVzdF9jb21taXQgZm91ciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQkjIFRoZSBhY3R1YWwgdGVzdCBpcyBiZWxvdworCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IHRocmVlX2EgJiYKKwkJZ2l0IGNoZWNrb3V0IHNlY29uZCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJCWdpdCBwdXNoIC0tZm9yY2UgLS1hdG9taWMgdXAgbWFzdGVyIHNlY29uZAorCSkgJiYKKwl0ZXN0X3JlZnMgbWFzdGVyIG1hc3RlciAmJgorCXRlc3RfcmVmcyBzZWNvbmQgc2Vjb25kCisnCisKKyMgc2V0IHVwIHR3byBicmFuY2hlcyB3aGVyZSBtYXN0ZXIgY2FuIGJlIHB1c2hlZCBidXQgc2Vjb25kIGNhbiBub3QKKyMgKG5vbi1mYXN0LWZvcndhcmQpLiBTaW5jZSBzZWNvbmQgY2FuIG5vdCBiZSBwdXNoZWQgdGhlIHdob2xlIG9wZXJhdGlvbgorIyB3aWxsIGZhaWwgYW5kIGxlYXZlIG1hc3RlciB1bnRvdWNoZWQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdG9taWMgcHVzaCBmYWlscyBpZiBvbmUgYnJhbmNoIGZhaWxzJyAnCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBjaGVja291dCAtYiBzZWNvbmQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCQl0ZXN0X2NvbW1pdCBmb3VyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRH4yICYmCisJCXRlc3RfY29tbWl0IGZpdmUgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQl0ZXN0X2NvbW1pdCBzaXggJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1hdG9taWMgLS1hbGwgdXAKKwkpICYmCisJdGVzdF9yZWZzIG1hc3RlciBIRUFEQHs3fSAmJgorCXRlc3RfcmVmcyBzZWNvbmQgSEVBREB7NH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXRvbWljIHB1c2ggZmFpbHMgaWYgb25lIHRhZyBmYWlscyByZW1vdGVseScgJworCSMgcHJlcGFyZSB0aGUgcmVwbworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2Qgd29ya2JlbmNoICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgY2hlY2tvdXQgLWIgc2Vjb25kIG1hc3RlciAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJIyBhIHRoaXJkIHBhcnR5IG1vZGlmaWVzIHRoZSBzZXJ2ZXIgc2lkZToKKwkoCisJCWNkIHVwc3RyZWFtICYmCisJCWdpdCBjaGVja291dCBzZWNvbmQgJiYKKwkJZ2l0IHRhZyB0ZXN0X3RhZyBzZWNvbmQKKwkpICYmCisJIyBzZWUgaWYgd2UgY2FuIG5vdyBwdXNoIGJvdGggYnJhbmNoZXMuCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCQlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJCXRlc3RfY29tbWl0IGZvdXIgJiYKKwkJZ2l0IHRhZyB0ZXN0X3RhZyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXRhZ3MgLS1hdG9taWMgdXAgbWFzdGVyIHNlY29uZAorCSkgJiYKKwl0ZXN0X3JlZnMgbWFzdGVyIEhFQURAezN9ICYmCisJdGVzdF9yZWZzIHNlY29uZCBIRUFEQHsxfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdG9taWMgcHVzaCBvYmV5cyB1cGRhdGUgaG9vayBwcmV2ZW50aW5nIGEgYnJhbmNoIHRvIGJlIHB1c2hlZCcgJworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2Qgd29ya2JlbmNoICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgY2hlY2tvdXQgLWIgc2Vjb25kIG1hc3RlciAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJKAorCQljZCB1cHN0cmVhbSAmJgorCQlIT09LRElSPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9ob29rcyIgJiYKKwkJSE9PSz0iJEhPT0tESVIvdXBkYXRlIiAmJgorCQlta2RpciAtcCAiJEhPT0tESVIiICYmCisJCXdyaXRlX3NjcmlwdCAiJEhPT0siIDw8LVxFT0YKKwkJCSMgb25seSBhbGxvdyB1cGRhdGUgdG8gbWFzdGVyIGZyb20gbm93IG9uCisJCQl0ZXN0ICIkMSIgPSAicmVmcy9oZWFkcy9tYXN0ZXIiCisJCUVPRgorCSkgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IHRocmVlICYmCisJCWdpdCBjaGVja291dCBzZWNvbmQgJiYKKwkJdGVzdF9jb21taXQgZm91ciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLWF0b21pYyB1cCBtYXN0ZXIgc2Vjb25kCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgSEVBREB7M30gJiYKKwl0ZXN0X3JlZnMgc2Vjb25kIEhFQURAezF9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0b21pYyBwdXNoIGlzIG5vdCBhZHZlcnRpc2VkIGlmIGNvbmZpZ3VyZWQnICcKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIHVwc3RyZWFtICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5hZHZlcnRpc2VhdG9taWMgMAorCSkgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tYXRvbWljIHVwIG1hc3RlcgorCSkgJiYKKwl0ZXN0X3JlZnMgbWFzdGVyIEhFQURAezF9CisnCisKKyMgUmVmZXJlbmNlcyBpbiB1cHN0cmVhbSA6IG1hc3RlcigxKSBvbmUoMSkgZm9vKDEpCisjIFJlZmVyZW5jZXMgaW4gd29ya2JlbmNoOiBtYXN0ZXIoMikgICAgICAgIGZvbygxKSB0d28oMikgYmFyKDIpCisjIEF0b21pYyBwdXNoICAgICAgICAgICAgOiBtYXN0ZXIoMikgICAgICAgICAgICAgICB0d28oMikgYmFyKDIpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdG9taWMgcHVzaCByZXBvcnRzIChyZWplY3QgYnkgdXBkYXRlIGhvb2spJyAnCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBicmFuY2ggZm9vICYmCisJCWdpdCBwdXNoIHVwIG1hc3RlciBvbmUgZm9vICYmCisJCWdpdCB0YWcgLWQgb25lCisJKSAmJgorCSgKKwkJbWtkaXIgLXAgdXBzdHJlYW0vLmdpdC9ob29rcyAmJgorCQljYXQgPnVwc3RyZWFtLy5naXQvaG9va3MvdXBkYXRlIDw8LUVPRiAmJgorCQkjIS9iaW4vc2gKKworCQlpZiB0ZXN0ICJcJDEiID0gInJlZnMvaGVhZHMvYmFyIgorCQl0aGVuCisJCQllY2hvID4mMiAiUHVzaW5nIHRvIGJyYW5jaCBiYXIgaXMgcHJvaGliaXRlZCIKKwkJCWV4aXQgMQorCQlmaQorCQlFT0YKKwkJY2htb2QgYSt4IHVwc3RyZWFtLy5naXQvaG9va3MvdXBkYXRlCisJKSAmJgorCSgKKwkJY2Qgd29ya2JlbmNoICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQlnaXQgYnJhbmNoIGJhcgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgd29ya2JlbmNoIFwKKwkJcHVzaCAtLWF0b21pYyB1cCBtYXN0ZXIgdHdvIGJhciA+b3V0IDI+JjEgJiYKKwlmbXRfc3RhdHVzX3JlcG9ydCA8b3V0ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlUbyAuLi91cHN0cmVhbQorCSAhIFtyZW1vdGUgcmVqZWN0ZWRdIG1hc3RlciAtPiBtYXN0ZXIgKGF0b21pYyBwdXNoIGZhaWx1cmUpCisJICEgW3JlbW90ZSByZWplY3RlZF0gdHdvIC0+IHR3byAoYXRvbWljIHB1c2ggZmFpbHVyZSkKKwkgISBbcmVtb3RlIHJlamVjdGVkXSBiYXIgLT4gYmFyIChob29rIGRlY2xpbmVkKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBSZWZlcmVuY2VzIGluIHVwc3RyZWFtIDogbWFzdGVyKDEpIG9uZSgxKSBmb28oMSkKKyMgUmVmZXJlbmNlcyBpbiB3b3JrYmVuY2g6IG1hc3RlcigyKSAgICAgICAgZm9vKDEpIHR3bygyKSBiYXIoMikKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0b21pYyBwdXNoIHJlcG9ydHMgKG1pcnJvciwgYnV0IHJlamVjdCBieSB1cGRhdGUgaG9vayknICcKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQlnaXQgcmVtb3RlIHJlbW92ZSB1cCAmJgorCQlnaXQgcmVtb3RlIGFkZCB1cCAuLi91cHN0cmVhbQorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgd29ya2JlbmNoIFwKKwkJcHVzaCAtLWF0b21pYyAtLW1pcnJvciB1cCA+b3V0IDI+JjEgJiYKKwlmbXRfc3RhdHVzX3JlcG9ydCA8b3V0ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlUbyAuLi91cHN0cmVhbQorCSAhIFtyZW1vdGUgcmVqZWN0ZWRdIG1hc3RlciAtPiBtYXN0ZXIgKGF0b21pYyBwdXNoIGZhaWx1cmUpCisJICEgW3JlbW90ZSByZWplY3RlZF0gb25lIChhdG9taWMgcHVzaCBmYWlsdXJlKQorCSAhIFtyZW1vdGUgcmVqZWN0ZWRdIGJhciAtPiBiYXIgKGhvb2sgZGVjbGluZWQpCisJICEgW3JlbW90ZSByZWplY3RlZF0gdHdvIC0+IHR3byAoYXRvbWljIHB1c2ggZmFpbHVyZSkKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgUmVmZXJlbmNlcyBpbiB1cHN0cmVhbSA6IG1hc3RlcigyKSBvbmUoMSkgZm9vKDEpCisjIFJlZmVyZW5jZXMgaW4gd29ya2JlbmNoOiBtYXN0ZXIoMSkgICAgICAgIGZvbygxKSB0d28oMikgYmFyKDIpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdG9taWMgcHVzaCByZXBvcnRzIChyZWplY3QgYnkgbm9uLWZmKScgJworCXJtIHVwc3RyZWFtLy5naXQvaG9va3MvdXBkYXRlICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJZ2l0IHB1c2ggdXAgbWFzdGVyICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHdvcmtiZW5jaCBcCisJCXB1c2ggLS1hdG9taWMgdXAgbWFzdGVyIGZvbyBiYXIgPm91dCAyPiYxICYmCisJZm10X3N0YXR1c19yZXBvcnQgPG91dCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJVG8gLi4vdXBzdHJlYW0KKwkgISBbcmVqZWN0ZWRdIG1hc3RlciAtPiBtYXN0ZXIgKG5vbi1mYXN0LWZvcndhcmQpCisJICEgW3JlamVjdGVkXSBiYXIgLT4gYmFyIChhdG9taWMgcHVzaCBmYWlsZWQpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NDQtcGFjay1vYmplY3RzLWhvb2suc2ggYi90L3Q1NTQ0LXBhY2stb2JqZWN0cy1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQzNTdhZjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTQ0LXBhY2stb2JqZWN0cy1ob29rLnNoCkBAIC0wLDAgKzEsNjIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGN1c3RvbSBzY3JpcHQgaW4gcGxhY2Ugb2YgcGFjay1vYmplY3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBzb21lIGhpc3RvcnkgdG8gZmV0Y2gnICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGRlYnVnZ2luZyBob29rIHNjcmlwdCcgJworCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2sgPDwtXEVPRgorCQllY2hvID4mMiAiaG9vayBydW5uaW5nIgorCQllY2hvICIkKiIgPmhvb2suYXJncworCQljYXQgPmhvb2suc3RkaW4KKwkJIiRAIiA8aG9vay5zdGRpbiA+aG9vay5zdGRvdXQKKwkJY2F0IGhvb2suc3Rkb3V0CisJRU9GCisnCisKK2NsZWFyX2hvb2tfcmVzdWx0cyAoKSB7CisJcm0gLXJmIC5naXQvaG9vay4qIGRzdC5naXQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9vayBydW5zIHZpYSBnbG9iYWwgY29uZmlnJyAnCisJY2xlYXJfaG9va19yZXN1bHRzICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIHVwbG9hZHBhY2sucGFja09iamVjdHNIb29rIC4vaG9vayAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC4gZHN0LmdpdCAyPnN0ZGVyciAmJgorCWdyZXAgImhvb2sgcnVubmluZyIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvb2sgb3V0cHV0cyBhcmUgc2FuZScgJworCSMgY2hlY2sgdGhhdCB3ZSByZWNvcmRlZCBhIHVzYWJsZSBwYWNrCisJZ2l0IGluZGV4LXBhY2sgLS1zdGRpbiA8LmdpdC9ob29rLnN0ZG91dCAmJgorCisJIyBjaGVjayB0aGF0IHdlIHJlY29yZGVkIGFyZ3MgYW5kIHN0ZGluLiBXZSBkbyBub3QgY2hlY2sKKwkjIHRoZSBmdWxsIGFyZ3VtZW50IGxpc3Qgb3IgdGhlIGV4YWN0IHBhY2sgY29udGVudHMsIGFzIGl0IHdvdWxkIG1ha2UKKwkjIHRoZSB0ZXN0IGJyaXR0bGUuIFNvIGp1c3Qgc2FuaXR5IGNoZWNrIHRoYXQgd2UgY291bGQgcmVwbGF5CisJIyB0aGUgcGFja2luZyBwcm9jZWR1cmUuCisJZ3JlcCAiXmdpdCIgLmdpdC9ob29rLmFyZ3MgJiYKKwkkKGNhdCAuZ2l0L2hvb2suYXJncykgPC5naXQvaG9vay5zdGRpbiA+cmVwbGF5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvb2sgcnVucyBmcm9tIC1jIGNvbmZpZycgJworCWNsZWFyX2hvb2tfcmVzdWx0cyAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIFwKKwkgIC11ICJnaXQgLWMgdXBsb2FkcGFjay5wYWNrT2JqZWN0c0hvb2s9Li9ob29rIHVwbG9hZC1wYWNrIiBcCisJICAuIGRzdC5naXQgMj5zdGRlcnIgJiYKKwlncmVwICJob29rIHJ1bm5pbmciIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdob29rIGRvZXMgbm90IHJ1biBmcm9tIHJlcG8gY29uZmlnJyAnCisJY2xlYXJfaG9va19yZXN1bHRzICYmCisJdGVzdF9jb25maWcgdXBsb2FkcGFjay5wYWNrT2JqZWN0c0hvb2sgIi4vaG9vayIgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAuIGRzdC5naXQgMj5zdGRlcnIgJiYKKwkhIGdyZXAgImhvb2sgcnVubmluZyIgc3RkZXJyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9ob29rLmFyZ3MgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L2hvb2suc3RkaW4gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L2hvb2suc3Rkb3V0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU0NS1wdXNoLW9wdGlvbnMuc2ggYi90L3Q1NTQ1LXB1c2gtb3B0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOGU2ZjczCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU0NS1wdXNoLW9wdGlvbnMuc2gKQEAgLTAsMCArMSwyODQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdXNoaW5nIHRvIGEgcmVwb3NpdG9yeSB1c2luZyBwdXNoIG9wdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitta19yZXBvX3BhaXIgKCkgeworCXJtIC1yZiB3b3JrYmVuY2ggdXBzdHJlYW0gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHVwc3RyZWFtICYmCisJdGVzdF9jcmVhdGVfcmVwbyB3b3JrYmVuY2ggJiYKKwkoCisJCWNkIHVwc3RyZWFtICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuICYmCisJCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwkJY2F0ID4uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlIDw8LSdFT0YnICYmCisJCSMhL2Jpbi9zaAorCQlpZiB0ZXN0IC1uICIkR0lUX1BVU0hfT1BUSU9OX0NPVU5UIjsgdGhlbgorCQkJaT0wCisJCQk+aG9va3MvcHJlLXJlY2VpdmUucHVzaF9vcHRpb25zCisJCQl3aGlsZSB0ZXN0ICIkaSIgLWx0ICIkR0lUX1BVU0hfT1BUSU9OX0NPVU5UIjsgZG8KKwkJCQlldmFsICJ2YWx1ZT1cJEdJVF9QVVNIX09QVElPTl8kaSIKKwkJCQllY2hvICR2YWx1ZSA+Pmhvb2tzL3ByZS1yZWNlaXZlLnB1c2hfb3B0aW9ucworCQkJCWk9JCgoaSArIDEpKQorCQkJZG9uZQorCQlmaQorCQlFT0YKKwkJY2htb2QgdSt4IC5naXQvaG9va3MvcHJlLXJlY2VpdmUKKworCQljYXQgPi5naXQvaG9va3MvcG9zdC1yZWNlaXZlIDw8LSdFT0YnICYmCisJCSMhL2Jpbi9zaAorCQlpZiB0ZXN0IC1uICIkR0lUX1BVU0hfT1BUSU9OX0NPVU5UIjsgdGhlbgorCQkJaT0wCisJCQk+aG9va3MvcG9zdC1yZWNlaXZlLnB1c2hfb3B0aW9ucworCQkJd2hpbGUgdGVzdCAiJGkiIC1sdCAiJEdJVF9QVVNIX09QVElPTl9DT1VOVCI7IGRvCisJCQkJZXZhbCAidmFsdWU9XCRHSVRfUFVTSF9PUFRJT05fJGkiCisJCQkJZWNobyAkdmFsdWUgPj5ob29rcy9wb3N0LXJlY2VpdmUucHVzaF9vcHRpb25zCisJCQkJaT0kKChpICsgMSkpCisJCQlkb25lCisJCWZpCisJCUVPRgorCQljaG1vZCB1K3ggLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUKKwkpICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJZ2l0IHJlbW90ZSBhZGQgdXAgLi4vdXBzdHJlYW0KKwkpCit9CisKKyMgQ29tcGFyZSB0aGUgcmVmICgkMSkgaW4gdXBzdHJlYW0gd2l0aCBhIHJlZiB2YWx1ZSBmcm9tIHdvcmtiZW5jaCAoJDIpCisjIGkuZS4gdGVzdF9yZWZzIHNlY29uZCBIRUFEQHsyfQordGVzdF9yZWZzICgpIHsKKwl0ZXN0ICQjID0gMiAmJgorCWdpdCAtQyB1cHN0cmVhbSByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIiA+ZXhwZWN0ICYmCisJZ2l0IC1DIHdvcmtiZW5jaCByZXYtcGFyc2UgLS12ZXJpZnkgIiQyIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmUgcHVzaCBvcHRpb24gd29ya3MgZm9yIGEgc2luZ2xlIGJyYW5jaCcgJworCW1rX3JlcG9fcGFpciAmJgorCWdpdCAtQyB1cHN0cmVhbSBjb25maWcgcmVjZWl2ZS5hZHZlcnRpc2VQdXNoT3B0aW9ucyB0cnVlICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQlnaXQgcHVzaCAtLXB1c2gtb3B0aW9uPWFzZGYgdXAgbWFzdGVyCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgbWFzdGVyICYmCisJZWNobyAiYXNkZiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCB1cHN0cmVhbS8uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlLnB1c2hfb3B0aW9ucyAmJgorCXRlc3RfY21wIGV4cGVjdCB1cHN0cmVhbS8uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZS5wdXNoX29wdGlvbnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBvcHRpb24gZGVuaWVkIGJ5IHJlbW90ZScgJworCW1rX3JlcG9fcGFpciAmJgorCWdpdCAtQyB1cHN0cmVhbSBjb25maWcgcmVjZWl2ZS5hZHZlcnRpc2VQdXNoT3B0aW9ucyBmYWxzZSAmJgorCSgKKwkJY2Qgd29ya2JlbmNoICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1wdXNoLW9wdGlvbj1hc2RmIHVwIG1hc3RlcgorCSkgJiYKKwl0ZXN0X3JlZnMgbWFzdGVyIEhFQURAezF9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3byBwdXNoIG9wdGlvbnMgd29yaycgJworCW1rX3JlcG9fcGFpciAmJgorCWdpdCAtQyB1cHN0cmVhbSBjb25maWcgcmVjZWl2ZS5hZHZlcnRpc2VQdXNoT3B0aW9ucyB0cnVlICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQlnaXQgcHVzaCAtLXB1c2gtb3B0aW9uPWFzZGYgLS1wdXNoLW9wdGlvbj0ibW9yZSBzdHJ1Y3R1cmVkIHRleHQiIHVwIG1hc3RlcgorCSkgJiYKKwl0ZXN0X3JlZnMgbWFzdGVyIG1hc3RlciAmJgorCXByaW50ZiAiYXNkZlxubW9yZSBzdHJ1Y3R1cmVkIHRleHRcbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCB1cHN0cmVhbS8uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlLnB1c2hfb3B0aW9ucyAmJgorCXRlc3RfY21wIGV4cGVjdCB1cHN0cmVhbS8uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZS5wdXNoX29wdGlvbnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBvcHRpb25zIGFuZCBzdWJtb2R1bGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgcGFyZW50IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHBhcmVudF91cHN0cmVhbSIgJiYKKwlta19yZXBvX3BhaXIgJiYKKwlnaXQgLUMgdXBzdHJlYW0gY29uZmlnIHJlY2VpdmUuYWR2ZXJ0aXNlUHVzaE9wdGlvbnMgdHJ1ZSAmJgorCWNwIC1yIHVwc3RyZWFtIHBhcmVudF91cHN0cmVhbSAmJgorCXRlc3RfY29tbWl0IC1DIHVwc3RyZWFtIG9uZSAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyBwYXJlbnQgJiYKKwlnaXQgLUMgcGFyZW50IHJlbW90ZSBhZGQgdXAgLi4vcGFyZW50X3Vwc3RyZWFtICYmCisJdGVzdF9jb21taXQgLUMgcGFyZW50IG9uZSAmJgorCWdpdCAtQyBwYXJlbnQgcHVzaCAtLW1pcnJvciB1cCAmJgorCisJZ2l0IC1DIHBhcmVudCBzdWJtb2R1bGUgYWRkIC4uL3Vwc3RyZWFtIHdvcmtiZW5jaCAmJgorCWdpdCAtQyBwYXJlbnQvd29ya2JlbmNoIHJlbW90ZSBhZGQgdXAgLi4vLi4vdXBzdHJlYW0gJiYKKwlnaXQgLUMgcGFyZW50IGNvbW1pdCAtbSAiYWRkIHN1Ym1vZHVsZSIgJiYKKworCXRlc3RfY29tbWl0IC1DIHBhcmVudC93b3JrYmVuY2ggdHdvICYmCisJZ2l0IC1DIHBhcmVudCBhZGQgd29ya2JlbmNoICYmCisJZ2l0IC1DIHBhcmVudCBjb21taXQgLW0gInVwZGF0ZSB3b3JrYmVuY2giICYmCisKKwlnaXQgLUMgcGFyZW50IHB1c2ggXAorCQktLXB1c2gtb3B0aW9uPWFzZGYgLS1wdXNoLW9wdGlvbj0ibW9yZSBzdHJ1Y3R1cmVkIHRleHQiIFwKKwkJLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIHVwIG1hc3RlciAmJgorCisJZ2l0IC1DIHVwc3RyZWFtIHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCAtQyBwYXJlbnQvd29ya2JlbmNoIHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCAtQyBwYXJlbnRfdXBzdHJlYW0gcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IC1DIHBhcmVudCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlwcmludGYgImFzZGZcbm1vcmUgc3RydWN0dXJlZCB0ZXh0XG4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdXBzdHJlYW0vLmdpdC9ob29rcy9wcmUtcmVjZWl2ZS5wdXNoX29wdGlvbnMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdXBzdHJlYW0vLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUucHVzaF9vcHRpb25zICYmCisJdGVzdF9jbXAgZXhwZWN0IHBhcmVudF91cHN0cmVhbS8uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlLnB1c2hfb3B0aW9ucyAmJgorCXRlc3RfY21wIGV4cGVjdCBwYXJlbnRfdXBzdHJlYW0vLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUucHVzaF9vcHRpb25zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgcHVzaCBvcHRpb24nICcKKwlta19yZXBvX3BhaXIgJiYKKwlnaXQgLUMgdXBzdHJlYW0gY29uZmlnIHJlY2VpdmUuYWR2ZXJ0aXNlUHVzaE9wdGlvbnMgdHJ1ZSAmJgorCSgKKwkJY2Qgd29ya2JlbmNoICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJZ2l0IC1jIHB1c2gucHVzaE9wdGlvbj1kZWZhdWx0IHB1c2ggdXAgbWFzdGVyCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgbWFzdGVyICYmCisJZWNobyAiZGVmYXVsdCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCB1cHN0cmVhbS8uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlLnB1c2hfb3B0aW9ucyAmJgorCXRlc3RfY21wIGV4cGVjdCB1cHN0cmVhbS8uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZS5wdXNoX29wdGlvbnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvIGRlZmF1bHQgcHVzaCBvcHRpb25zJyAnCisJbWtfcmVwb19wYWlyICYmCisJZ2l0IC1DIHVwc3RyZWFtIGNvbmZpZyByZWNlaXZlLmFkdmVydGlzZVB1c2hPcHRpb25zIHRydWUgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCWdpdCAtYyBwdXNoLnB1c2hPcHRpb249ZGVmYXVsdDEgLWMgcHVzaC5wdXNoT3B0aW9uPWRlZmF1bHQyIHB1c2ggdXAgbWFzdGVyCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgbWFzdGVyICYmCisJcHJpbnRmICJkZWZhdWx0MVxuZGVmYXVsdDJcbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCB1cHN0cmVhbS8uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlLnB1c2hfb3B0aW9ucyAmJgorCXRlc3RfY21wIGV4cGVjdCB1cHN0cmVhbS8uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZS5wdXNoX29wdGlvbnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBvcHRpb24gZnJvbSBjb21tYW5kIGxpbmUgb3ZlcnJpZGVzIGZyb20tY29uZmlnIHB1c2ggb3B0aW9uJyAnCisJbWtfcmVwb19wYWlyICYmCisJZ2l0IC1DIHVwc3RyZWFtIGNvbmZpZyByZWNlaXZlLmFkdmVydGlzZVB1c2hPcHRpb25zIHRydWUgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCWdpdCAtYyBwdXNoLnB1c2hPcHRpb249ZGVmYXVsdCBwdXNoIC0tcHVzaC1vcHRpb249bWFudWFsIHVwIG1hc3RlcgorCSkgJiYKKwl0ZXN0X3JlZnMgbWFzdGVyIG1hc3RlciAmJgorCWVjaG8gIm1hbnVhbCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCB1cHN0cmVhbS8uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlLnB1c2hfb3B0aW9ucyAmJgorCXRlc3RfY21wIGV4cGVjdCB1cHN0cmVhbS8uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZS5wdXNoX29wdGlvbnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgdmFsdWUgb2YgcHVzaC5wdXNoT3B0aW9uIGluIGNvbmZpZyBjbGVhcnMgdGhlIGxpc3QnICcKKwlta19yZXBvX3BhaXIgJiYKKwlnaXQgLUMgdXBzdHJlYW0gY29uZmlnIHJlY2VpdmUuYWR2ZXJ0aXNlUHVzaE9wdGlvbnMgdHJ1ZSAmJgorCSgKKwkJY2Qgd29ya2JlbmNoICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJZ2l0IC1jIHB1c2gucHVzaE9wdGlvbj1kZWZhdWx0MSAtYyBwdXNoLnB1c2hPcHRpb249IC1jIHB1c2gucHVzaE9wdGlvbj1kZWZhdWx0MiBwdXNoIHVwIG1hc3RlcgorCSkgJiYKKwl0ZXN0X3JlZnMgbWFzdGVyIG1hc3RlciAmJgorCWVjaG8gImRlZmF1bHQyIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcHJlLXJlY2VpdmUucHVzaF9vcHRpb25zICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcG9zdC1yZWNlaXZlLnB1c2hfb3B0aW9ucworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIHB1c2ggb3B0aW9uIGluIGNvbmZpZycgJworCW1rX3JlcG9fcGFpciAmJgorCWdpdCAtQyB1cHN0cmVhbSBjb25maWcgcmVjZWl2ZS5hZHZlcnRpc2VQdXNoT3B0aW9ucyB0cnVlICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgcHVzaC5wdXNoT3B0aW9uIHB1c2ggdXAgbWFzdGVyCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgSEVBREB7MX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBvcHRpb25zIGtlZXAgcXVvdGVkIGNoYXJhY3RlcnMgaW50YWN0IChkaXJlY3QpJyAnCisJbWtfcmVwb19wYWlyICYmCisJZ2l0IC1DIHVwc3RyZWFtIGNvbmZpZyByZWNlaXZlLmFkdmVydGlzZVB1c2hPcHRpb25zIHRydWUgJiYKKwl0ZXN0X2NvbW1pdCAtQyB3b3JrYmVuY2ggb25lICYmCisJZ2l0IC1DIHdvcmtiZW5jaCBwdXNoIC0tcHVzaC1vcHRpb249IlwiZW1iZWRkZWQgcXVvdGVzXCIiIHVwIG1hc3RlciAmJgorCWVjaG8gIlwiZW1iZWRkZWQgcXVvdGVzXCIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdXBzdHJlYW0vLmdpdC9ob29rcy9wcmUtcmVjZWl2ZS5wdXNoX29wdGlvbnMKKycKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKKyMgc2V0IHVwIGh0dHAgcmVwb3NpdG9yeSBmb3IgZmV0Y2hpbmcvcHVzaGluZywgd2l0aCBwdXNoIG9wdGlvbnMgY29uZmlnCisjIGJvb2wgc2V0IHRvICQxCitta19odHRwX3BhaXIgKCkgeworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHRlc3RfaHR0cF9jbG9uZSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgJ3JtIC1yZiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdXBzdHJlYW0uZ2l0JyAmJgorCW1rX3JlcG9fcGFpciAmJgorCWdpdCAtQyB1cHN0cmVhbSBjb25maWcgcmVjZWl2ZS5hZHZlcnRpc2VQdXNoT3B0aW9ucyAiJDEiICYmCisJZ2l0IC1DIHVwc3RyZWFtIGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwljcCAtUiB1cHN0cmVhbS8uZ2l0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi91cHN0cmVhbS5naXQgJiYKKwlnaXQgY2xvbmUgIiRIVFRQRF9VUkwiL3NtYXJ0L3Vwc3RyZWFtIHRlc3RfaHR0cF9jbG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG9wdGlvbiBkZW5pZWQgcHJvcGVybHkgYnkgaHR0cCBzZXJ2ZXInICcKKwlta19odHRwX3BhaXIgZmFsc2UgJiYKKwl0ZXN0X2NvbW1pdCAtQyB0ZXN0X2h0dHBfY2xvbmUgb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHRlc3RfaHR0cF9jbG9uZSBwdXNoIC0tcHVzaC1vcHRpb249YXNkZiBvcmlnaW4gbWFzdGVyIDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBwdXNoIG9wdGlvbnMiIGFjdHVhbCAmJgorCWdpdCAtQyB0ZXN0X2h0dHBfY2xvbmUgcHVzaCBvcmlnaW4gbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggb3B0aW9ucyB3b3JrIHByb3Blcmx5IGFjcm9zcyBodHRwJyAnCisJbWtfaHR0cF9wYWlyIHRydWUgJiYKKworCXRlc3RfY29tbWl0IC1DIHRlc3RfaHR0cF9jbG9uZSBvbmUgJiYKKwlnaXQgLUMgdGVzdF9odHRwX2Nsb25lIHB1c2ggb3JpZ2luIG1hc3RlciAmJgorCWdpdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdXBzdHJlYW0uZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCAtQyB0ZXN0X2h0dHBfY2xvbmUgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdF9jb21taXQgLUMgdGVzdF9odHRwX2Nsb25lIHR3byAmJgorCWdpdCAtQyB0ZXN0X2h0dHBfY2xvbmUgcHVzaCAtLXB1c2gtb3B0aW9uPWFzZGYgLS1wdXNoLW9wdGlvbj0ibW9yZSBzdHJ1Y3R1cmVkIHRleHQiIG9yaWdpbiBtYXN0ZXIgJiYKKwlwcmludGYgImFzZGZcbm1vcmUgc3RydWN0dXJlZCB0ZXh0XG4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Vwc3RyZWFtLmdpdC9ob29rcy9wcmUtcmVjZWl2ZS5wdXNoX29wdGlvbnMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Vwc3RyZWFtLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUucHVzaF9vcHRpb25zICYmCisKKwlnaXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Vwc3RyZWFtLmdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgLUMgdGVzdF9odHRwX2Nsb25lIHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBvcHRpb25zIGtlZXAgcXVvdGVkIGNoYXJhY3RlcnMgaW50YWN0IChodHRwKScgJworCW1rX2h0dHBfcGFpciB0cnVlICYmCisKKwl0ZXN0X2NvbW1pdCAtQyB0ZXN0X2h0dHBfY2xvbmUgb25lICYmCisJZ2l0IC1DIHRlc3RfaHR0cF9jbG9uZSBwdXNoIC0tcHVzaC1vcHRpb249IlwiZW1iZWRkZWQgcXVvdGVzXCIiIG9yaWdpbiBtYXN0ZXIgJiYKKwllY2hvICJcImVtYmVkZGVkIHF1b3Rlc1wiIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi91cHN0cmVhbS5naXQvaG9va3MvcHJlLXJlY2VpdmUucHVzaF9vcHRpb25zCisnCisKKyMgRE8gTk9UIGFkZCBub24taHR0cGQtc3BlY2lmaWMgdGVzdHMgaGVyZSwgYmVjYXVzZSB0aGUgbGFzdCBwYXJ0IG9mIHRoaXMKKyMgdGVzdCBzY3JpcHQgaXMgb25seSBleGVjdXRlZCB3aGVuIGh0dHBkIGlzIGF2YWlsYWJsZSBhbmQgZW5hYmxlZC4KKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTQ2LXJlY2VpdmUtbGltaXRzLnNoIGIvdC90NTU0Ni1yZWNlaXZlLWxpbWl0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYjBlOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTU0Ni1yZWNlaXZlLWxpbWl0cy5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2sgcmVjZWl2ZSBpbnB1dCBsaW1pdHMnCisuIC4vdGVzdC1saWIuc2gKKworIyBMZXQncyBydW4gdGVzdHMgd2l0aCBkaWZmZXJlbnQgdW5wYWNrIGxpbWl0czogMSBhbmQgMTAwMDAKKyMgV2hlbiB0aGUgbGltaXQgaXMgMSwgYGdpdCByZWNlaXZlLXBhY2tgIHdpbGwgY2FsbCBgZ2l0IGluZGV4LXBhY2tgLgorIyBXaGVuIHRoZSBsaW1pdCBpcyAxMDAwMCwgYGdpdCByZWNlaXZlLXBhY2tgIHdpbGwgY2FsbCBgZ2l0IHVucGFjay1vYmplY3RzYC4KKwordGVzdF9wYWNrX2lucHV0X2xpbWl0ICgpIHsKKwljYXNlICIkMSIgaW4KKwlpbmRleCkgdW5wYWNrX2xpbWl0PTEgOzsKKwl1bnBhY2spIHVucGFja19saW1pdD0xMDAwMCA7OworCWVzYWMKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZGVzdGluYXRpb24gcmVwb3NpdG9yeScgJworCQlybSAtZnIgZGVzdCAmJgorCQlnaXQgLS1iYXJlIGluaXQgZGVzdAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldCB1bnBhY2tsaW1pdCB0byAkdW5wYWNrX2xpbWl0IiAnCisJCWdpdCAtLWdpdC1kaXI9ZGVzdCBjb25maWcgcmVjZWl2ZS51bnBhY2tsaW1pdCAiJHVucGFja19saW1pdCIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR0aW5nIHJlY2VpdmUubWF4SW5wdXRTaXplIHRvIDUxMiByZWplY3RzIHB1c2gnICcKKwkJZ2l0IC0tZ2l0LWRpcj1kZXN0IGNvbmZpZyByZWNlaXZlLm1heElucHV0U2l6ZSA1MTIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggZGVzdCBIRUFECisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYnVtcGluZyBsaW1pdCB0byA0ayBhbGxvd3MgcHVzaCcgJworCQlnaXQgLS1naXQtZGlyPWRlc3QgY29uZmlnIHJlY2VpdmUubWF4SW5wdXRTaXplIDRrICYmCisJCWdpdCBwdXNoIGRlc3QgSEVBRAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZGVzdGluYXRpb24gcmVwb3NpdG9yeSAoYWdhaW4pJyAnCisJCXJtIC1mciBkZXN0ICYmCisJCWdpdCAtLWJhcmUgaW5pdCBkZXN0CisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlmdGluZyB0aGUgbGltaXQgYWxsb3dzIHB1c2gnICcKKwkJZ2l0IC0tZ2l0LWRpcj1kZXN0IGNvbmZpZyByZWNlaXZlLm1heElucHV0U2l6ZSAwICYmCisJCWdpdCBwdXNoIGRlc3QgSEVBRAorCScKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlIGtub3duLXNpemUgKDEwMjQgYnl0ZXMpIGNvbW1pdCIgJworCXRlc3QtdG9vbCBnZW5yYW5kb20gZm9vIDEwMjQgPm9uZS1rICYmCisJZ2l0IGFkZCBvbmUtayAmJgorCXRlc3RfY29tbWl0IG9uZS1rCisnCisKK3Rlc3RfcGFja19pbnB1dF9saW1pdCBpbmRleAordGVzdF9wYWNrX2lucHV0X2xpbWl0IHVucGFjaworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NDctcHVzaC1xdWFyYW50aW5lLnNoIGIvdC90NTU0Ny1wdXNoLXF1YXJhbnRpbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmFhYTUxYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NDctcHVzaC1xdWFyYW50aW5lLnNoCkBAIC0wLDAgKzEsNzIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayBxdWFyYW50aW5lIG9mIG9iamVjdHMgZHVyaW5nIHB1c2gnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHBpY2t5IGRlc3QgcmVwbycgJworCWdpdCBpbml0IC0tYmFyZSBkZXN0LmdpdCAmJgorCXdyaXRlX3NjcmlwdCBkZXN0LmdpdC9ob29rcy9wcmUtcmVjZWl2ZSA8PC1cRU9GCisJd2hpbGUgcmVhZCBvbGQgbmV3IHJlZjsgZG8KKwkJdGVzdCAiJChnaXQgbG9nIC0xIC0tZm9ybWF0PSVzICRuZXcpIiA9IHJlamVjdCAmJiBleGl0IDEKKwlkb25lCisJZXhpdCAwCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FjY2VwdGVkIG9iamVjdHMgd29yaycgJworCXRlc3RfY29tbWl0IG9rICYmCisJZ2l0IHB1c2ggZGVzdC5naXQgSEVBRCAmJgorCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgLS1naXQtZGlyPWRlc3QuZ2l0IGNhdC1maWxlIGNvbW1pdCAkY29tbWl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdGVkIG9iamVjdHMgYXJlIG5vdCBpbnN0YWxsZWQnICcKKwl0ZXN0X2NvbW1pdCByZWplY3QgJiYKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggZGVzdC5naXQgcmVqZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tZ2l0LWRpcj1kZXN0LmdpdCBjYXQtZmlsZSBjb21taXQgJGNvbW1pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3RlZCBvYmplY3RzIGFyZSByZW1vdmVkJyAnCisJZWNobyAiaW5jb21pbmctKiIgPmV4cGVjdCAmJgorCShjZCBkZXN0LmdpdC9vYmplY3RzICYmIGVjaG8gaW5jb21pbmctKikgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byByZXBvIHBhdGggd2l0aCBwYXRoIHNlcGFyYXRvciAoY29sb24pJyAnCisJIyBUaGUgaW50ZXJlc3RpbmcgZmFpbHVyZSBjYXNlIGhlcmUgaXMgd2hlbiB0aGUKKwkjIHJlY2VpdmluZyBlbmQgY2Fubm90IGFjY2VzcyBpdHMgb3JpZ2luYWwgb2JqZWN0IGRpcmVjdG9yeSwKKwkjIHNvIG1ha2UgaXQgbGlrZWx5IGZvciB1cyB0byBnZW5lcmF0ZSBhIGRlbHRhIGJ5IGhhdmluZworCSMgYSBub24tdHJpdmlhbCBmaWxlIHdpdGggbXVsdGlwbGUgdmVyc2lvbnMuCisKKwl0ZXN0LXRvb2wgZ2VucmFuZG9tIGZvbyA0MDk2ID5maWxlLmJpbiAmJgorCWdpdCBhZGQgZmlsZS5iaW4gJiYKKwlnaXQgY29tbWl0IC1tIGJpbiAmJgorCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBNSU5HVworCXRoZW4KKwkJcGF0aHNlcD0iOyIKKwllbHNlCisJCXBhdGhzZXA9IjoiCisJZmkgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC4gInh4eCR7cGF0aHNlcH15eXkuZ2l0IiAmJgorCisJZWNobyBjaGFuZ2UgPj5maWxlLmJpbiAmJgorCWdpdCBjb21taXQgLWFtIGNoYW5nZSAmJgorCSMgTm90ZSB0aGF0IHdlIGhhdmUgdG8gdXNlIHRoZSBmdWxsIHBhdGggaGVyZSwgb3IgaXQgZ2V0cyBjb25mdXNlZAorCSMgd2l0aCB0aGUgc3NoIGhvc3Q6cGF0aCBzeW50YXguCisJZ2l0IHB1c2ggIiQocHdkKS94eHgke3BhdGhzZXB9eXl5LmdpdCIgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGluZyBhIHJlZiBmcm9tIHF1YXJhbnRpbmUgaXMgZm9yYmlkZGVuJyAnCisJZ2l0IGluaXQgLS1iYXJlIHVwZGF0ZS5naXQgJiYKKwl3cml0ZV9zY3JpcHQgdXBkYXRlLmdpdC9ob29rcy9wcmUtcmVjZWl2ZSA8PC1cRU9GICYmCisJcmVhZCBvbGQgbmV3IHJlZm5hbWUKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3VucmVsYXRlZCAkbmV3CisJZXhpdCAxCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdXBkYXRlLmdpdCBIRUFEICYmCisJZ2l0IC1DIHVwZGF0ZS5naXQgZnNjaworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NDgtcHVzaC1wb3JjZWxhaW4uc2ggYi90L3Q1NTQ4LXB1c2gtcG9yY2VsYWluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiMTliM2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTQ4LXB1c2gtcG9yY2VsYWluLnNoCkBAIC0wLDAgKzEsMjc5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDIwIEppYW5nIFhpbgorIwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgcHVzaCBwb3JjZWxhaW4gb3V0cHV0JworCisuIC4vdGVzdC1saWIuc2gKKworIyBDcmVhdGUgY29tbWl0cyBpbiA8cmVwbz4gYW5kIGFzc2lnbiBlYWNoIGNvbW1pdCdzIG9pZCB0byBzaGVsbCB2YXJpYWJsZXMKKyMgZ2l2ZW4gaW4gdGhlIGFyZ3VtZW50cyAoQSwgQiwgYW5kIEMpLiBFLmcuOgorIworIyAgICAgY3JlYXRlX2NvbW1pdHNfaW4gPHJlcG8+IEEgQiBDCisjCisjIE5PVEU6IE5ldmVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIGEgc3Vic2hlbGwgc2luY2UgdmFyaWFibGUKKyMgYXNzaWdubWVudHMgd2lsbCBkaXNhcHBlYXIgd2hlbiBzdWJzaGVsbCBleGl0cy4KK2NyZWF0ZV9jb21taXRzX2luICgpIHsKKwlyZXBvPSIkMSIgJiYKKwlpZiAhIHBhcmVudD0kKGdpdCAtQyAiJHJlcG8iIHJldi1wYXJzZSBIRUFEXnt9IC0tKQorCXRoZW4KKwkJcGFyZW50PQorCWZpICYmCisJVD0kKGdpdCAtQyAiJHJlcG8iIHdyaXRlLXRyZWUpICYmCisJc2hpZnQgJiYKKwl3aGlsZSB0ZXN0ICQjIC1ndCAwCisJZG8KKwkJbmFtZT0kMSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJaWYgdGVzdCAteiAiJHBhcmVudCIKKwkJdGhlbgorCQkJb2lkPSQoZWNobyAkbmFtZSB8IGdpdCAtQyAiJHJlcG8iIGNvbW1pdC10cmVlICRUKQorCQllbHNlCisJCQlvaWQ9JChlY2hvICRuYW1lIHwgZ2l0IC1DICIkcmVwbyIgY29tbWl0LXRyZWUgLXAgJHBhcmVudCAkVCkKKwkJZmkgJiYKKwkJZXZhbCAkbmFtZT0kb2lkICYmCisJCXBhcmVudD0kb2lkICYmCisJCXNoaWZ0IHx8CisJCXJldHVybiAxCisJZG9uZSAmJgorCWdpdCAtQyAiJHJlcG8iIHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJG9pZAorfQorCisjIEZvcm1hdCB0aGUgb3V0cHV0IG9mIGdpdC1wdXNoLCBnaXQtc2hvdy1yZWYgYW5kIG90aGVyIGNvbW1hbmRzIHRvIG1ha2UgYQorIyB1c2VyLWZyaWVuZGx5IGFuZCBzdGFibGUgdGV4dC4gIFdlIGNhbiBlYXNpbHkgcHJlcGFyZSB0aGUgZXhwZWN0IHRleHQKKyMgd2l0aG91dCBoYXZpbmcgdG8gd29ycnkgYWJvdXQgZnV0dXJlIGNoYW5nZXMgb2YgdGhlIGNvbW1pdCBJRCBhbmQgc3BhY2VzCisjIG9mIHRoZSBvdXRwdXQuCittYWtlX3VzZXJfZnJpZW5kbHlfYW5kX3N0YWJsZV9vdXRwdXQgKCkgeworCXNlZCBcCisJCS1lICJzLyAgKlwkLy8iIFwKKwkJLWUgInMvICAgKi8gL2ciIFwKKwkJLWUgInMvCS8gICAgL2ciIFwKKwkJLWUgInMvJEEvPENPTU1JVC1BPi9nIiBcCisJCS1lICJzLyRCLzxDT01NSVQtQj4vZyIgXAorCQktZSAicy8kWkVST19PSUQvPFpFUk8tT0lEPi9nIiBcCisJCS1lICJzLyQoZWNobyAkQSB8IGN1dCAtYzEtNylbMC05YS1mXSovPE9JRC1BPi9nIiBcCisJCS1lICJzLyQoZWNobyAkQiB8IGN1dCAtYzEtNylbMC05YS1mXSovPE9JRC1CPi9nIiBcCisJCS1lICJzI1RvICRVUkxfUFJFRklYL3Vwc3RyZWFtLmdpdCNUbyA8VVJML29mL3Vwc3RyZWFtLmdpdD4jIgorfQorCitzZXR1cF91cHN0cmVhbV9hbmRfd29ya2JlbmNoICgpIHsKKwkjIFVwc3RyZWFtICBhZnRlciBzZXR1cCA6IG1hc3RlcihCKSAgZm9vKEEpICBiYXIoQSkgIGJheihBKQorCSMgV29ya2JlbmNoIGFmdGVyIHNldHVwIDogbWFzdGVyKEEpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgdXBzdHJlYW0gcmVwb3NpdG9yeSBhbmQgd29ya2JlbmNoIiAnCisJCXJtIC1yZiB1cHN0cmVhbS5naXQgd29ya2JlbmNoICYmCisJCWdpdCBpbml0IC0tYmFyZSB1cHN0cmVhbS5naXQgJiYKKwkJZ2l0IGluaXQgd29ya2JlbmNoICYmCisJCWNyZWF0ZV9jb21taXRzX2luIHdvcmtiZW5jaCBBIEIgJiYKKwkJKAorCQkJY2Qgd29ya2JlbmNoICYmCisJCQkjIFRyeSB0byBtYWtlIGEgc3RhYmxlIGZpeGVkIHdpZHRoIGZvciBhYmJyZXZpYXRlZCBjb21taXQgSUQsCisJCQkjIHRoaXMgZml4ZWQtd2lkdGggb2lkIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCAiPE9JRD4iLgorCQkJZ2l0IGNvbmZpZyBjb3JlLmFiYnJldiA3ICYmCisJCQlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gLi4vdXBzdHJlYW0uZ2l0ICYmCisJCQlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkQSAmJgorCQkJZ2l0IHB1c2ggb3JpZ2luIFwKKwkJCQkkQjpyZWZzL2hlYWRzL21hc3RlciBcCisJCQkJJEE6cmVmcy9oZWFkcy9mb28gXAorCQkJCSRBOnJlZnMvaGVhZHMvYmFyIFwKKwkJCQkkQTpyZWZzL2hlYWRzL2JhegorCQkpICYmCisJCWdpdCAtQyAid29ya2JlbmNoIiBjb25maWcgYWR2aWNlLnB1c2hVcGRhdGVSZWplY3RlZCBmYWxzZSAmJgorCQl1cHN0cmVhbT11cHN0cmVhbS5naXQKKwknCit9CisKK3J1bl9naXRfcHVzaF9wb3JjZWxhaW5fb3V0cHV0X3Rlc3QoKSB7CisJY2FzZSAkMSBpbgorCWh0dHApCisJCVBST1RPQ09MPSJIVFRQIHByb3RvY29sIgorCQlVUkxfUFJFRklYPSJodHRwOi8vLioiCisJCTs7CisJZmlsZSkKKwkJUFJPVE9DT0w9ImJ1aWx0aW4gcHJvdG9jb2wiCisJCVVSTF9QUkVGSVg9IlwuXC4iCisJCTs7CisJZXNhYworCisJIyBSZWZzIG9mIHVwc3RyZWFtIDogbWFzdGVyKEIpICBmb28oQSkgIGJhcihBKSAgYmF6KEEpCisJIyBSZWZzIG9mIHdvcmtiZW5jaDogbWFzdGVyKEEpICAgICAgICAgICAgICAgICAgYmF6KEEpICBuZXh0KEEpCisJIyBnaXQtcHVzaCAgICAgICAgIDogbWFzdGVyKEEpICBOVUxMICAgIChCKSAgICAgYmF6KEEpICBuZXh0KEEpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicG9yY2VsYWluIG91dHB1dCBvZiBzdWNjZXNzZnVsIGdpdC1wdXNoICgkUFJPVE9DT0wpIiAnCisJCSgKKwkJCWNkIHdvcmtiZW5jaCAmJgorCQkJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJEEgJiYKKwkJCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYmF6ICRBICYmCisJCQlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL25leHQgJEEgJiYKKwkJCWdpdCBwdXNoIC0tcG9yY2VsYWluIC0tZm9yY2Ugb3JpZ2luIFwKKwkJCQltYXN0ZXIgXAorCQkJCTpyZWZzL2hlYWRzL2ZvbyBcCisJCQkJJEI6YmFyIFwKKwkJCQliYXogXAorCQkJCW5leHQKKwkJKSA+b3V0ICYmCisJCW1ha2VfdXNlcl9mcmllbmRseV9hbmRfc3RhYmxlX291dHB1dCA8b3V0ID5hY3R1YWwgJiYKKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCVRvIDxVUkwvb2YvdXBzdHJlYW0uZ2l0PgorCQk9ICAgIHJlZnMvaGVhZHMvYmF6OnJlZnMvaGVhZHMvYmF6ICAgIFt1cCB0byBkYXRlXQorCQkgICAgIDxDT01NSVQtQj46cmVmcy9oZWFkcy9iYXIgICAgPE9JRC1BPi4uPE9JRC1CPgorCQktICAgIDpyZWZzL2hlYWRzL2ZvbyAgICBbZGVsZXRlZF0KKwkJKyAgICByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21hc3RlciAgICA8T0lELUI+Li4uPE9JRC1BPiAoZm9yY2VkIHVwZGF0ZSkKKwkJKiAgICByZWZzL2hlYWRzL25leHQ6cmVmcy9oZWFkcy9uZXh0ICAgIFtuZXcgYnJhbmNoXQorCQlEb25lCisJCUVPRgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IC1DICIkdXBzdHJlYW0iIHNob3ctcmVmID5vdXQgJiYKKwkJbWFrZV91c2VyX2ZyaWVuZGx5X2FuZF9zdGFibGVfb3V0cHV0IDxvdXQgPmFjdHVhbCAmJgorCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJPENPTU1JVC1CPiByZWZzL2hlYWRzL2JhcgorCQk8Q09NTUlULUE+IHJlZnMvaGVhZHMvYmF6CisJCTxDT01NSVQtQT4gcmVmcy9oZWFkcy9tYXN0ZXIKKwkJPENPTU1JVC1BPiByZWZzL2hlYWRzL25leHQKKwkJRU9GCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwkjIFJlZnMgb2YgdXBzdHJlYW0gOiBtYXN0ZXIoQSkgIGJhcihCKSAgYmF6KEEpICBuZXh0KEEpCisJIyBSZWZzIG9mIHdvcmtiZW5jaDogbWFzdGVyKEIpICBiYXIoQSkgIGJheihBKSAgbmV4dChBKQorCSMgZ2l0LXB1c2ggICAgICAgICA6IG1hc3RlcihCKSAgYmFyKEEpICBOVUxMICAgIG5leHQoQSkKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJhdG9taWMgcHVzaCBmYWlsZWQgKCRQUk9UT0NPTCkiICcKKwkJKAorCQkJY2Qgd29ya2JlbmNoICYmCisJCQlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkQiAmJgorCQkJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9iYXIgJEEgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tYXRvbWljIC0tcG9yY2VsYWluIG9yaWdpbiBcCisJCQkJbWFzdGVyIFwKKwkJCQliYXIgXAorCQkJCTpiYXogXAorCQkJCW5leHQKKwkJKSA+b3V0ICYmCisJCW1ha2VfdXNlcl9mcmllbmRseV9hbmRfc3RhYmxlX291dHB1dCA8b3V0ID5hY3R1YWwgJiYKKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCVRvIDxVUkwvb2YvdXBzdHJlYW0uZ2l0PgorCQk9ICAgIHJlZnMvaGVhZHMvbmV4dDpyZWZzL2hlYWRzL25leHQgICAgW3VwIHRvIGRhdGVdCisJCSEgICAgcmVmcy9oZWFkcy9iYXI6cmVmcy9oZWFkcy9iYXIgICAgW3JlamVjdGVkXSAobm9uLWZhc3QtZm9yd2FyZCkKKwkJISAgICAoZGVsZXRlKTpyZWZzL2hlYWRzL2JheiAgICBbcmVqZWN0ZWRdIChhdG9taWMgcHVzaCBmYWlsZWQpCisJCSEgICAgcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9tYXN0ZXIgICAgW3JlamVjdGVkXSAoYXRvbWljIHB1c2ggZmFpbGVkKQorCQlEb25lCisJCUVPRgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IC1DICIkdXBzdHJlYW0iIHNob3ctcmVmID5vdXQgJiYKKwkJbWFrZV91c2VyX2ZyaWVuZGx5X2FuZF9zdGFibGVfb3V0cHV0IDxvdXQgPmFjdHVhbCAmJgorCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJPENPTU1JVC1CPiByZWZzL2hlYWRzL2JhcgorCQk8Q09NTUlULUE+IHJlZnMvaGVhZHMvYmF6CisJCTxDT01NSVQtQT4gcmVmcy9oZWFkcy9tYXN0ZXIKKwkJPENPTU1JVC1BPiByZWZzL2hlYWRzL25leHQKKwkJRU9GCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicHJlcGFyZSBwcmUtcmVjZWl2ZSBob29rICgkUFJPVE9DT0wpIiAnCisJCXdyaXRlX3NjcmlwdCAiJHVwc3RyZWFtL2hvb2tzL3ByZS1yZWNlaXZlIiA8PC1FT0YKKwkJZXhpdCAxCisJCUVPRgorCScKKworCSMgUmVmcyBvZiB1cHN0cmVhbSA6IG1hc3RlcihBKSAgYmFyKEIpICBiYXooQSkgIG5leHQoQSkKKwkjIFJlZnMgb2Ygd29ya2JlbmNoOiBtYXN0ZXIoQikgIGJhcihBKSAgYmF6KEEpICBuZXh0KEEpCisJIyBnaXQtcHVzaCAgICAgICAgIDogbWFzdGVyKEIpICBiYXIoQSkgIE5VTEwgICAgbmV4dChBKQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInByZS1yZWNlaXZlIGhvb2sgZGVjbGluZWQgKCRQUk9UT0NPTCkiICcKKwkJKAorCQkJY2Qgd29ya2JlbmNoICYmCisJCQlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkQiAmJgorCQkJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9iYXIgJEEgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcG9yY2VsYWluIC0tZm9yY2Ugb3JpZ2luIFwKKwkJCQltYXN0ZXIgXAorCQkJCWJhciBcCisJCQkJOmJheiBcCisJCQkJbmV4dAorCQkpID5vdXQgJiYKKwkJbWFrZV91c2VyX2ZyaWVuZGx5X2FuZF9zdGFibGVfb3V0cHV0IDxvdXQgPmFjdHVhbCAmJgorCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJVG8gPFVSTC9vZi91cHN0cmVhbS5naXQ+CisJCT0gICAgcmVmcy9oZWFkcy9uZXh0OnJlZnMvaGVhZHMvbmV4dCAgICBbdXAgdG8gZGF0ZV0KKwkJISAgICByZWZzL2hlYWRzL2JhcjpyZWZzL2hlYWRzL2JhciAgICBbcmVtb3RlIHJlamVjdGVkXSAocHJlLXJlY2VpdmUgaG9vayBkZWNsaW5lZCkKKwkJISAgICA6cmVmcy9oZWFkcy9iYXogICAgW3JlbW90ZSByZWplY3RlZF0gKHByZS1yZWNlaXZlIGhvb2sgZGVjbGluZWQpCisJCSEgICAgcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9tYXN0ZXIgICAgW3JlbW90ZSByZWplY3RlZF0gKHByZS1yZWNlaXZlIGhvb2sgZGVjbGluZWQpCisJCURvbmUKKwkJRU9GCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgLUMgIiR1cHN0cmVhbSIgc2hvdy1yZWYgPm91dCAmJgorCQltYWtlX3VzZXJfZnJpZW5kbHlfYW5kX3N0YWJsZV9vdXRwdXQgPG91dCA+YWN0dWFsICYmCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQk8Q09NTUlULUI+IHJlZnMvaGVhZHMvYmFyCisJCTxDT01NSVQtQT4gcmVmcy9oZWFkcy9iYXoKKwkJPENPTU1JVC1BPiByZWZzL2hlYWRzL21hc3RlcgorCQk8Q09NTUlULUE+IHJlZnMvaGVhZHMvbmV4dAorCQlFT0YKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlbW92ZSBwcmUtcmVjZWl2ZSBob29rICgkUFJPVE9DT0wpIiAnCisJCXJtICIkdXBzdHJlYW0vaG9va3MvcHJlLXJlY2VpdmUiCisJJworCisJIyBSZWZzIG9mIHVwc3RyZWFtIDogbWFzdGVyKEEpICBiYXIoQikgIGJheihBKSAgbmV4dChBKQorCSMgUmVmcyBvZiB3b3JrYmVuY2g6IG1hc3RlcihCKSAgYmFyKEEpICBiYXooQSkgIG5leHQoQSkKKwkjIGdpdC1wdXNoICAgICAgICAgOiBtYXN0ZXIoQikgIGJhcihBKSAgTlVMTCAgICBuZXh0KEEpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAibm9uLWZhc3Rmb3J3YXJkIHB1c2ggKCRQUk9UT0NPTCkiICcKKwkJKAorCQkJY2Qgd29ya2JlbmNoICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXBvcmNlbGFpbiBvcmlnaW4gXAorCQkJCW1hc3RlciBcCisJCQkJYmFyIFwKKwkJCQk6YmF6IFwKKwkJCQluZXh0CisJCSkgPm91dCAmJgorCQltYWtlX3VzZXJfZnJpZW5kbHlfYW5kX3N0YWJsZV9vdXRwdXQgPG91dCA+YWN0dWFsICYmCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQlUbyA8VVJML29mL3Vwc3RyZWFtLmdpdD4KKwkJPSAgICByZWZzL2hlYWRzL25leHQ6cmVmcy9oZWFkcy9uZXh0ICAgIFt1cCB0byBkYXRlXQorCQktICAgIDpyZWZzL2hlYWRzL2JheiAgICBbZGVsZXRlZF0KKwkJICAgICByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21hc3RlciAgICA8T0lELUE+Li48T0lELUI+CisJCSEgICAgcmVmcy9oZWFkcy9iYXI6cmVmcy9oZWFkcy9iYXIgICAgW3JlamVjdGVkXSAobm9uLWZhc3QtZm9yd2FyZCkKKwkJRG9uZQorCQlFT0YKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCAtQyAiJHVwc3RyZWFtIiBzaG93LXJlZiA+b3V0ICYmCisJCW1ha2VfdXNlcl9mcmllbmRseV9hbmRfc3RhYmxlX291dHB1dCA8b3V0ID5hY3R1YWwgJiYKKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCTxDT01NSVQtQj4gcmVmcy9oZWFkcy9iYXIKKwkJPENPTU1JVC1CPiByZWZzL2hlYWRzL21hc3RlcgorCQk8Q09NTUlULUE+IHJlZnMvaGVhZHMvbmV4dAorCQlFT0YKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKK30KKworIyBJbml0aWFsaXplIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5IGFuZCBsb2NhbCB3b3JrYmVuY2guCitzZXR1cF91cHN0cmVhbV9hbmRfd29ya2JlbmNoCisKKyMgUnVuIGdpdC1wdXNoIHBvcmNlbGFpbiB0ZXN0IG9uIGJ1aWx0aW4gcHJvdG9jb2wKK3J1bl9naXRfcHVzaF9wb3JjZWxhaW5fb3V0cHV0X3Rlc3QgZmlsZQorCitST09UX1BBVEg9IiRQV0QiCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1ncGcuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorc3RhcnRfaHR0cGQKKworIyBSZS1pbml0aWFsaXplIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5IGFuZCBsb2NhbCB3b3JrYmVuY2guCitzZXR1cF91cHN0cmVhbV9hbmRfd29ya2JlbmNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIGZvciBodHRwIiAnCisJZ2l0IC1DIHVwc3RyZWFtLmdpdCBjb25maWcgaHR0cC5yZWNlaXZlcGFjayB0cnVlICYmCisJdXBzdHJlYW09IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdXBzdHJlYW0uZ2l0IiAmJgorCW12IHVwc3RyZWFtLmdpdCAiJHVwc3RyZWFtIiAmJgorCisJZ2l0IC1DIHdvcmtiZW5jaCByZW1vdGUgc2V0LXVybCBvcmlnaW4gJEhUVFBEX1VSTC9zbWFydC91cHN0cmVhbS5naXQKKycKKworc2V0dXBfYXNrcGFzc19oZWxwZXIKKworIyBSdW4gZ2l0LXB1c2ggcG9yY2VsYWluIHRlc3Qgb24gSFRUUCBwcm90b2NvbAorcnVuX2dpdF9wdXNoX3BvcmNlbGFpbl9vdXRwdXRfdGVzdCBodHRwCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU1MC1odHRwLWZldGNoLWR1bWIuc2ggYi90L3Q1NTUwLWh0dHAtZmV0Y2gtZHVtYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MDQ4NTMwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU1MC1odHRwLWZldGNoLWR1bWIuc2gKQEAgLTAsMCArMSw0MzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGR1bWIgZmV0Y2hpbmcgb3ZlciBodHRwIHZpYSBzdGF0aWMgZmlsZScKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnknICcKKwlnaXQgY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCWVjaG8gY29udGVudDEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWVjaG8gY29udGVudDIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgaHR0cC1hY2Nlc3NpYmxlIGJhcmUgcmVwb3NpdG9yeSB3aXRoIGxvb3NlIG9iamVjdHMnICcKKwljcCAtUiAuZ2l0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkgZ2l0IGNvbmZpZyBjb3JlLmJhcmUgdHJ1ZSAmJgorCSBta2RpciAtcCBob29rcyAmJgorCSB3cml0ZV9zY3JpcHQgImhvb2tzL3Bvc3QtdXBkYXRlIiA8PC1cRU9GICYmCisJIGV4ZWMgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbworCUVPRgorCSBob29rcy9wb3N0LXVwZGF0ZQorCSkgJiYKKwlnaXQgcmVtb3RlIGFkZCBwdWJsaWMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZ2l0IHB1c2ggcHVibGljIG1hc3RlcjptYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgaHR0cCByZXBvc2l0b3J5JyAnCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvZHVtYi9yZXBvLmdpdCBjbG9uZS10bXBsICYmCisJY3AgLVIgY2xvbmUtdG1wbCBjbG9uZSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmUvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0IHJlZnMgZnJvbSBvdXRzaWRlIGFueSByZXBvc2l0b3J5JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIG1hc3RlcikJSEVBRAorCSQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpCXJlZnMvaGVhZHMvbWFzdGVyCisJRU9GCisJbm9uZ2l0IGdpdCBscy1yZW1vdGUgIiRIVFRQRF9VUkwvZHVtYi9yZXBvLmdpdCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHBhc3N3b3JkLXByb3RlY3RlZCByZXBvc2l0b3J5JyAnCisJbWtkaXIgLXAgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYXV0aC9kdW1iLyIgJiYKKwljcCAtUmYgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiIFwKKwkgICAgICAgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYXV0aC9kdW1iL3JlcG8uZ2l0IgorJworCitzZXR1cF9hc2twYXNzX2hlbHBlcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHBhc3N3b3JkLXByb3RlY3RlZCByZXBvc2l0b3J5IGNhbiBmYWlsJyAnCisJc2V0X2Fza3Bhc3Mgd3JvbmcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgIiRIVFRQRF9VUkwvYXV0aC9kdW1iL3JlcG8uZ2l0IiBjbG9uZS1hdXRoLWZhaWwgJiYKKwlleHBlY3RfYXNrcGFzcyBib3RoIHdyb25nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgYXV0aCBjYW4gdXNlIHVzZXIvcGFzcyBpbiBVUkwnICcKKwlzZXRfYXNrcGFzcyB3cm9uZyAmJgorCWdpdCBjbG9uZSAiJEhUVFBEX1VSTF9VU0VSX1BBU1MvYXV0aC9kdW1iL3JlcG8uZ2l0IiBjbG9uZS1hdXRoLW5vbmUgJiYKKwlleHBlY3RfYXNrcGFzcyBub25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgYXV0aCBjYW4gdXNlIGp1c3QgdXNlciBpbiBVUkwnICcKKwlzZXRfYXNrcGFzcyB3cm9uZyBwYXNzQGhvc3QgJiYKKwlnaXQgY2xvbmUgIiRIVFRQRF9VUkxfVVNFUi9hdXRoL2R1bWIvcmVwby5naXQiIGNsb25lLWF1dGgtcGFzcyAmJgorCWV4cGVjdF9hc2twYXNzIHBhc3MgdXNlckBob3N0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgYXV0aCBjYW4gcmVxdWVzdCBib3RoIHVzZXIgYW5kIHBhc3MnICcKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgcGFzc0Bob3N0ICYmCisJZ2l0IGNsb25lICIkSFRUUERfVVJML2F1dGgvZHVtYi9yZXBvLmdpdCIgY2xvbmUtYXV0aC1ib3RoICYmCisJZXhwZWN0X2Fza3Bhc3MgYm90aCB1c2VyQGhvc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cCBhdXRoIHJlc3BlY3RzIGNyZWRlbnRpYWwgaGVscGVyIGNvbmZpZycgJworCXRlc3RfY29uZmlnX2dsb2JhbCBjcmVkZW50aWFsLmhlbHBlciAiIWYoKSB7CisJCWNhdCA+L2Rldi9udWxsCisJCWVjaG8gdXNlcm5hbWU9dXNlckBob3N0CisJCWVjaG8gcGFzc3dvcmQ9cGFzc0Bob3N0CisJfTsgZiIgJiYKKwlzZXRfYXNrcGFzcyB3cm9uZyAmJgorCWdpdCBjbG9uZSAiJEhUVFBEX1VSTC9hdXRoL2R1bWIvcmVwby5naXQiIGNsb25lLWF1dGgtaGVscGVyICYmCisJZXhwZWN0X2Fza3Bhc3Mgbm9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIGF1dGggY2FuIGdldCB1c2VybmFtZSBmcm9tIGNvbmZpZycgJworCXRlc3RfY29uZmlnX2dsb2JhbCAiY3JlZGVudGlhbC4kSFRUUERfVVJMLnVzZXJuYW1lIiB1c2VyQGhvc3QgJiYKKwlzZXRfYXNrcGFzcyB3cm9uZyBwYXNzQGhvc3QgJiYKKwlnaXQgY2xvbmUgIiRIVFRQRF9VUkwvYXV0aC9kdW1iL3JlcG8uZ2l0IiBjbG9uZS1hdXRoLXVzZXIgJiYKKwlleHBlY3RfYXNrcGFzcyBwYXNzIHVzZXJAaG9zdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmVkIHVzZXJuYW1lIGRvZXMgbm90IG92ZXJyaWRlIFVSTCcgJworCXRlc3RfY29uZmlnX2dsb2JhbCAiY3JlZGVudGlhbC4kSFRUUERfVVJMLnVzZXJuYW1lIiB3cm9uZyAmJgorCXNldF9hc2twYXNzIHdyb25nIHBhc3NAaG9zdCAmJgorCWdpdCBjbG9uZSAiJEhUVFBEX1VSTF9VU0VSL2F1dGgvZHVtYi9yZXBvLmdpdCIgY2xvbmUtYXV0aC11c2VyMiAmJgorCWV4cGVjdF9hc2twYXNzIHBhc3MgdXNlckBob3N0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCByZXBvIHdpdGggaHR0cCBzdWJtb2R1bGVzJyAnCisJZ2l0IGluaXQgc3VwZXIgJiYKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgcGFzc0Bob3N0ICYmCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiJEhUVFBEX1VSTC9hdXRoL2R1bWIvcmVwby5naXQiIHN1YiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY21kbGluZSBjcmVkZW50aWFsIGNvbmZpZyBwYXNzZXMgdG8gc3VibW9kdWxlIHZpYSBjbG9uZScgJworCXNldF9hc2twYXNzIHdyb25nIHBhc3NAaG9zdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLXJlY3Vyc2l2ZSBzdXBlciBzdXBlci1jbG9uZSAmJgorCXJtIC1yZiBzdXBlci1jbG9uZSAmJgorCisJc2V0X2Fza3Bhc3Mgd3JvbmcgcGFzc0Bob3N0ICYmCisJZ2l0IC1jICJjcmVkZW50aWFsLiRIVFRQRF9VUkwudXNlcm5hbWU9dXNlckBob3N0IiBcCisJCWNsb25lIC0tcmVjdXJzaXZlIHN1cGVyIHN1cGVyLWNsb25lICYmCisJZXhwZWN0X2Fza3Bhc3MgcGFzcyB1c2VyQGhvc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY21kbGluZSBjcmVkZW50aWFsIGNvbmZpZyBwYXNzZXMgc3VibW9kdWxlIHZpYSBmZXRjaCcgJworCXNldF9hc2twYXNzIHdyb25nIHBhc3NAaG9zdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdXBlci1jbG9uZSBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAmJgorCisJc2V0X2Fza3Bhc3Mgd3JvbmcgcGFzc0Bob3N0ICYmCisJZ2l0IC1DIHN1cGVyLWNsb25lIFwKKwkgICAgLWMgImNyZWRlbnRpYWwuJEhUVFBEX1VSTC51c2VybmFtZT11c2VyQGhvc3QiIFwKKwkgICAgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgJiYKKwlleHBlY3RfYXNrcGFzcyBwYXNzIHVzZXJAaG9zdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbWRsaW5lIGNyZWRlbnRpYWwgY29uZmlnIHBhc3NlcyBzdWJtb2R1bGUgdXBkYXRlJyAnCisJIyBhZHZhbmNlIHRoZSBzdWJtb2R1bGUgSEVBRCBzbyB0aGF0IGEgZmV0Y2ggaXMgcmVxdWlyZWQKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZm9vICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYXV0aC9kdW1iL3JlcG8uZ2l0IiBIRUFEICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgLUMgc3VwZXItY2xvbmUgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCwkc2hhMSxzdWIgJiYKKworCXNldF9hc2twYXNzIHdyb25nIHBhc3NAaG9zdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdXBlci1jbG9uZSBzdWJtb2R1bGUgdXBkYXRlICYmCisKKwlzZXRfYXNrcGFzcyB3cm9uZyBwYXNzQGhvc3QgJiYKKwlnaXQgLUMgc3VwZXItY2xvbmUgXAorCSAgICAtYyAiY3JlZGVudGlhbC4kSFRUUERfVVJMLnVzZXJuYW1lPXVzZXJAaG9zdCIgXAorCSAgICBzdWJtb2R1bGUgdXBkYXRlICYmCisJZXhwZWN0X2Fza3Bhc3MgcGFzcyB1c2VyQGhvc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY2hhbmdlcyB2aWEgaHR0cCcgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWdpdCBwdXNoIHB1YmxpYyAmJgorCShjZCBjbG9uZSAmJiBnaXQgcHVsbCkgJiYKKwl0ZXN0X2NtcCBmaWxlIGNsb25lL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY2hhbmdlcyB2aWEgbWFudWFsIGh0dHAtZmV0Y2gnICcKKwljcCAtUiBjbG9uZS10bXBsIGNsb25lMiAmJgorCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoY2QgY2xvbmUyICYmCisJIGdpdCBodHRwLWZldGNoIC1hIC13IGhlYWRzL21hc3Rlci1uZXcgJEhFQUQgJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyLW5ldyAmJgorCSB0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmUyL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFudWFsIGh0dHAtZmV0Y2ggd2l0aG91dCAtYSB3b3JrcyBqdXN0IGFzIHdlbGwnICcKKwljcCAtUiBjbG9uZS10bXBsIGNsb25lMyAmJgorCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoY2QgY2xvbmUzICYmCisJIGdpdCBodHRwLWZldGNoIC13IGhlYWRzL21hc3Rlci1uZXcgJEhFQUQgJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyLW5ldyAmJgorCSB0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmUzL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cCByZW1vdGUgZGV0ZWN0cyBjb3JyZWN0IEhFQUQnICcKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm90aGVyICYmCisJKGNkIGNsb25lICYmCisJIGdpdCByZW1vdGUgc2V0LWhlYWQgb3JpZ2luIC1kICYmCisJIGdpdCByZW1vdGUgc2V0LWhlYWQgb3JpZ2luIC1hICYmCisJIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEID4gb3V0cHV0ICYmCisJIGVjaG8gcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgPiBleHBlY3QgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggcGFja2VkIG9iamVjdHMnICcKKwljcCAtUiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwby5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgJiYKKwkgZ2l0IC0tYmFyZSByZXBhY2sgLWEgLWQKKwkpICYmCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvZHVtYi9yZXBvX3BhY2suZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG5vdGljZXMgY29ycnVwdCBwYWNrJyAnCisJY3AgLVIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMS5naXQgJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMS5naXQgJiYKKwkgcD0kKGxzIG9iamVjdHMvcGFjay9wYWNrLSoucGFjaykgJiYKKwkgY2htb2QgdSt3ICRwICYmCisJIHByaW50ZiAlMDI1NmQgMCB8IGRkIG9mPSRwIGJzPTI1NiBjb3VudD0xIHNlZWs9MSBjb252PW5vdHJ1bmMKKwkpICYmCisJbWtkaXIgcmVwb19iYWQxLmdpdCAmJgorCShjZCByZXBvX2JhZDEuZ2l0ICYmCisJIGdpdCAtLWJhcmUgaW5pdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgLS1iYXJlIGZldGNoICRIVFRQRF9VUkwvZHVtYi9yZXBvX2JhZDEuZ2l0ICYmCisJIHRlc3QgMCA9ICQobHMgb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrIHwgd2MgLWwpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBub3RpY2VzIGNvcnJ1cHQgaWR4JyAnCisJY3AgLVIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMi5naXQgJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMi5naXQgJiYKKwkgcD0kKGxzIG9iamVjdHMvcGFjay9wYWNrLSouaWR4KSAmJgorCSBjaG1vZCB1K3cgJHAgJiYKKwkgcHJpbnRmICUwMjU2ZCAwIHwgZGQgb2Y9JHAgYnM9MjU2IGNvdW50PTEgc2Vlaz0xIGNvbnY9bm90cnVuYworCSkgJiYKKwlta2RpciByZXBvX2JhZDIuZ2l0ICYmCisJKGNkIHJlcG9fYmFkMi5naXQgJiYKKwkgZ2l0IC0tYmFyZSBpbml0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCAtLWJhcmUgZmV0Y2ggJEhUVFBEX1VSTC9kdW1iL3JlcG9fYmFkMi5naXQgJiYKKwkgdGVzdCAwID0gJChscyBvYmplY3RzL3BhY2sgfCB3YyAtbCkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNhbiBoYW5kbGUgcHJldmlvdXNseS1mZXRjaGVkIC5pZHggZmlsZXMnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gYnJhbmNoMSAmJgorCWVjaG8gYmFzZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCWdpdCAtLWJhcmUgaW5pdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrZWRfYnJhbmNoZXMuZ2l0ICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFja2VkX2JyYW5jaGVzLmdpdCBicmFuY2gxICYmCisJZ2l0IC0tZ2l0LWRpcj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrZWRfYnJhbmNoZXMuZ2l0IHJlcGFjayAtZCAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gyIGJyYW5jaDEgJiYKKwllY2hvIGIyID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gYjIgJiYKKwlnaXQgcHVzaCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrZWRfYnJhbmNoZXMuZ2l0IGJyYW5jaDIgJiYKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX3BhY2tlZF9icmFuY2hlcy5naXQgcmVwYWNrIC1kICYmCisJZ2l0IC0tYmFyZSBpbml0IGNsb25lX3BhY2tlZF9icmFuY2hlcy5naXQgJiYKKwlnaXQgLS1naXQtZGlyPWNsb25lX3BhY2tlZF9icmFuY2hlcy5naXQgZmV0Y2ggIiRIVFRQRF9VUkwiL2R1bWIvcmVwb19wYWNrZWRfYnJhbmNoZXMuZ2l0IGJyYW5jaDE6YnJhbmNoMSAmJgorCWdpdCAtLWdpdC1kaXI9Y2xvbmVfcGFja2VkX2JyYW5jaGVzLmdpdCBmZXRjaCAiJEhUVFBEX1VSTCIvZHVtYi9yZXBvX3BhY2tlZF9icmFuY2hlcy5naXQgYnJhbmNoMjpicmFuY2gyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZCBub3QgdXNlIHVwbG9hZC1wYWNrIHNlcnZpY2UnICcKKwkhIGdyZXAgIi9naXQtdXBsb2FkLXBhY2siICIkSFRUUERfUk9PVF9QQVRIL2FjY2Vzcy5sb2ciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGllbnQgc2hvd3MgdGV4dC9wbGFpbiBlcnJvcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgIiRIVFRQRF9VUkwvZXJyb3IvdGV4dCIgMj5zdGRlcnIgJiYKKwlncmVwICJ0aGlzIGlzIHRoZSBlcnJvciBtZXNzYWdlIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsaWVudCBkb2VzIG5vdCBzaG93IGh0bWwgZXJyb3JzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICIkSFRUUERfVVJML2Vycm9yL2h0bWwiIDI+c3RkZXJyICYmCisJISBncmVwICJ0aGlzIGlzIHRoZSBlcnJvciBtZXNzYWdlIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsaWVudCBzaG93cyB0ZXh0L3BsYWluIHdpdGggYSBjaGFyc2V0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICIkSFRUUERfVVJML2Vycm9yL2NoYXJzZXQiIDI+c3RkZXJyICYmCisJZ3JlcCAidGhpcyBpcyB0aGUgZXJyb3IgbWVzc2FnZSIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgZXJyb3IgbWVzc2FnZXMgYXJlIHJlZW5jb2RlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAiJEhUVFBEX1VSTC9lcnJvci91dGYxNiIgMj5zdGRlcnIgJiYKKwlncmVwICJ0aGlzIGlzIHRoZSBlcnJvciBtZXNzYWdlIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVlbmNvZGluZyBpcyByb2J1c3QgdG8gd2hpdGVzcGFjZSBvZGRpdGllcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAiJEhUVFBEX1VSTC9lcnJvci9vZGQtc3BhY2luZyIgMj5zdGRlcnIgJiYKKwlncmVwICJ0aGlzIGlzIHRoZSBlcnJvciBtZXNzYWdlIiBzdGRlcnIKKycKKworY2hlY2tfbGFuZ3VhZ2UgKCkgeworCWNhc2UgIiQyIiBpbgorCScnKQorCQk+ZXhwZWN0CisJCTs7CisJPyopCisJCWVjaG8gIj0+IFNlbmQgaGVhZGVyOiBBY2NlcHQtTGFuZ3VhZ2U6ICQxIiA+ZXhwZWN0CisJCTs7CisJZXNhYyAmJgorCUdJVF9UUkFDRV9DVVJMPXRydWUgXAorCUxBTkdVQUdFPSQyIFwKKwlnaXQgbHMtcmVtb3RlICIkSFRUUERfVVJML2R1bWIvcmVwby5naXQiID5vdXRwdXQgMj4mMSAmJgorCXRyIC1kICdcMDE1JyA8b3V0cHV0IHwKKwlzb3J0IC11IHwKKwlzZWQgLW5lICcvXj0+IFNlbmQgaGVhZGVyOiBBY2NlcHQtTGFuZ3VhZ2U6LyBwJyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xpZW50IHNlbmRzIEFjY2VwdC1MYW5ndWFnZSBiYXNlZCBvbiBMQU5HVUFHRScgJworCWNoZWNrX2xhbmd1YWdlICJrby1LUiwgKjtxPTAuOSIga29fS1IuVVRGLTgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGllbnQgc2VuZHMgQWNjZXB0LUxhbmd1YWdlIGNvcnJlY3RseSB3aXRoIHVub3JkaW5hcnkgTEFOR1VBR0UnICcKKwljaGVja19sYW5ndWFnZSAia28tS1IsICo7cT0wLjkiICJrb19LUjoiICYmCisJY2hlY2tfbGFuZ3VhZ2UgImtvLUtSLCBlbi1VUztxPTAuOSwgKjtxPTAuOCIgImtvX0tSOjplbl9VUyIgJiYKKwljaGVja19sYW5ndWFnZSAia28tS1IsICo7cT0wLjkiICI6Ojprb19LUiIgJiYKKwljaGVja19sYW5ndWFnZSAia28tS1IsIGVuLVVTO3E9MC45LCAqO3E9MC44IiAia29fS1IhITplbl9VUyIgJiYKKwljaGVja19sYW5ndWFnZSAia28tS1IsIGphLUpQO3E9MC45LCAqO3E9MC44IiAia29fS1IgZW5fVVM6amFfSlAiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xpZW50IHNlbmRzIEFjY2VwdC1MYW5ndWFnZSB3aXRoIG1hbnkgcHJlZmVycmVkIGxhbmd1YWdlcycgJworCWNoZWNrX2xhbmd1YWdlICJrby1LUiwgZW4tVVM7cT0wLjksIGZyLUNBO3E9MC44LCBkZTtxPTAuNywgc3I7cT0wLjYsIFwKK2phO3E9MC41LCB6aDtxPTAuNCwgc3Y7cT0wLjMsIHB0O3E9MC4yLCAqO3E9MC4xIiBcCisJCWtvX0tSLkVVQy1LUjplbl9VUy5VVEYtODpmcl9DQTpkZS5VVEYtOEBldXJvOnNyQGxhdGluOmphOnpoOnN2OnB0ICYmCisJY2hlY2tfbGFuZ3VhZ2UgImtvLUtSLCBlbi1VUztxPTAuOTksIGZyLUNBO3E9MC45OCwgZGU7cT0wLjk3LCBzcjtxPTAuOTYsIFwKK2phO3E9MC45NSwgemg7cT0wLjk0LCBzdjtxPTAuOTMsIHB0O3E9MC45MiwgbmI7cT0wLjkxLCAqO3E9MC45MCIgXAorCQlrb19LUi5FVUMtS1I6ZW5fVVMuVVRGLTg6ZnJfQ0E6ZGUuVVRGLThAZXVybzpzckBsYXRpbjpqYTp6aDpzdjpwdDpuYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xpZW50IGRvZXMgbm90IHNlbmQgYW4gZW1wdHkgQWNjZXB0LUxhbmd1YWdlJyAnCisJR0lUX1RSQUNFX0NVUkw9dHJ1ZSBMQU5HVUFHRT0gZ2l0IGxzLXJlbW90ZSAiJEhUVFBEX1VSTC9kdW1iL3JlcG8uZ2l0IiAyPnN0ZGVyciAmJgorCSEgZ3JlcCAiXj0+IFNlbmQgaGVhZGVyOiBBY2NlcHQtTGFuZ3VhZ2U6IiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlLWh0dHAgY29tcGxhaW5zIGNsZWFubHkgYWJvdXQgbWFsZm9ybWVkIHVybHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlLWh0dHAgaHR0cDo6L2V4YW1wbGUuY29tL3JlcG8uZ2l0IDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAidXJsIGhhcyBubyBzY2hlbWUiIHN0ZGVycgorJworCisjIE5FRURTV09SSzogV3JpdGluZyBjb21tYW5kcyB0byBnaXQtcmVtb3RlLWN1cmwgY2FuIHJhY2UgYWdhaW5zdCB0aGUgbGF0dGVyCisjIGVycm9yaW5nIG91dCwgcHJvZHVjaW5nIFNJR1BJUEUuIFJlbW92ZSAib2s9c2lncGlwZSIgb25jZSB0cmFuc3BvcnQtaGVscGVyIGhhcworIyBsZWFybmVkIHRvIGhhbmRsZSBlYXJseSByZW1vdGUgaGVscGVyIGZhaWx1cmVzIG1vcmUgY2xlYW5seS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZS1odHRwIGNvbXBsYWlucyBjbGVhbmx5IGFib3V0IGVtcHR5IHNjaGVtZScgJworCXRlc3RfbXVzdF9mYWlsIG9rPXNpZ3BpcGUgZ2l0IGxzLXJlbW90ZSBcCisJCWh0dHA6OiR7SFRUUERfVVJMI2h0dHB9L2R1bWIvcmVwby5naXQgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJ1cmwgaGFzIG5vIHNjaGVtZSIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZGlyZWN0cyBjYW4gYmUgZm9yYmlkZGVuL2FsbG93ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgaHR0cC5mb2xsb3dSZWRpcmVjdHM9ZmFsc2UgXAorCQljbG9uZSAkSFRUUERfVVJML2R1bWItcmVkaXIvcmVwby5naXQgZHVtYi1yZWRpciAmJgorCWdpdCAtYyBodHRwLmZvbGxvd1JlZGlyZWN0cz10cnVlIFwKKwkJY2xvbmUgJEhUVFBEX1VSTC9kdW1iLXJlZGlyL3JlcG8uZ2l0IGR1bWItcmVkaXIgMj5zdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVkaXJlY3RzIGFyZSByZXBvcnRlZCB0byBzdGRlcnInICcKKwkjIGp1c3QgbG9vayBmb3IgYSBzbmlwcGV0IG9mIHRoZSByZWRpcmVjdGVkLXRvIFVSTAorCXRlc3RfaTE4bmdyZXAgL2R1bWIvIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24taW5pdGlhbCByZWRpcmVjdHMgY2FuIGJlIGZvcmJpZGRlbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBodHRwLmZvbGxvd1JlZGlyZWN0cz1pbml0aWFsIFwKKwkJY2xvbmUgJEhUVFBEX1VSTC9yZWRpci1vYmplY3RzL3JlcG8uZ2l0IHJlZGlyLW9iamVjdHMgJiYKKwlnaXQgLWMgaHR0cC5mb2xsb3dSZWRpcmVjdHM9dHJ1ZSBcCisJCWNsb25lICRIVFRQRF9VUkwvcmVkaXItb2JqZWN0cy9yZXBvLmdpdCByZWRpci1vYmplY3RzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAuZm9sbG93UmVkaXJlY3RzIGRlZmF1bHRzIHRvICJpbml0aWFsIicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAkSFRUUERfVVJML3JlZGlyLW9iamVjdHMvcmVwby5naXQgZGVmYXVsdAorJworCisjIFRoZSBnb2FsIGlzIGZvciBhIGNsb25lIG9mIHRoZSAiZXZpbCIgcmVwb3NpdG9yeSwgd2hpY2ggaGFzIG5vIG9iamVjdHMKKyMgaXRzZWxmLCB0byBjYXVzZSB0aGUgY2xpZW50IHRvIGZldGNoIG9iamVjdHMgZnJvbSB0aGUgInZpY3RpbSIgcmVwb3NpdG9yeS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBldmlsIGFsdGVybmF0ZXMgc2NoZW1lJyAnCisJdmljdGltPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdmljdGltLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSAiJHZpY3RpbSIgJiYKKwlnaXQgLUMgIiR2aWN0aW0iIC0td29yay10cmVlPS4gY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gc2VjcmV0ICYmCisJZ2l0IC1DICIkdmljdGltIiByZXBhY2sgLWFkICYmCisJZ2l0IC1DICIkdmljdGltIiB1cGRhdGUtc2VydmVyLWluZm8gJiYKKwlzaGExPSQoZ2l0IC1DICIkdmljdGltIiByZXYtcGFyc2UgSEVBRCkgJiYKKworCWV2aWw9JEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9ldmlsLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSAiJGV2aWwiICYmCisJIyBkbyB0aGlzIGJ5IGhhbmQgdG8gYXZvaWQgb2JqZWN0IGV4aXN0ZW5jZSBjaGVjaworCXByaW50ZiAiJXNcXHQlc1xcbiIgJHNoYTEgcmVmcy9oZWFkcy9tYXN0ZXIgPiIkZXZpbC9pbmZvL3JlZnMiCisnCisKKyMgSGVyZSB3ZSdsbCBqdXN0IHJlZGlyZWN0IHZpYSBIVFRQLiBJbiBhIHJlYWwtd29ybGQgYXR0YWNrIHRoZXNlIHdvdWxkIGJlIG9uCisjIGRpZmZlcmVudCBzZXJ2ZXJzLCBidXQgd2Ugc2hvdWxkIHJlamVjdCBpdCBlaXRoZXIgd2F5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC1hbHRlcm5hdGVzIGlzIGEgbm9uLWluaXRpYWwgcmVkaXJlY3QnICcKKwllY2hvICIkSFRUUERfVVJML2R1bWIvdmljdGltLmdpdC9vYmplY3RzIiBcCisJCT4iJGV2aWwvb2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgaHR0cC5mb2xsb3dSZWRpcmVjdHM9aW5pdGlhbCBcCisJCWNsb25lICRIVFRQRF9VUkwvZHVtYi9ldmlsLmdpdCBldmlsLWluaXRpYWwgJiYKKwlnaXQgLWMgaHR0cC5mb2xsb3dSZWRpcmVjdHM9dHJ1ZSBcCisJCWNsb25lICRIVFRQRF9VUkwvZHVtYi9ldmlsLmdpdCBldmlsLWluaXRpYWwKKycKKworIyBDdXJsIHN1cHBvcnRzIGEgbG90IG9mIHByb3RvY29scyB0aGF0IHdlJ2QgcHJlZmVyIG5vdCB0byBhbGxvdworIyBodHRwLWFsdGVybmF0ZXMgdG8gdXNlLCBidXQgaXQncyBoYXJkIHRvIHRlc3Qgd2hldGhlciBjdXJsIGhhcworIyBhY2Nlc3NlZCwgc2F5LCB0aGUgU01UUCBwcm90b2NvbCwgYmVjYXVzZSB3ZSBhcmUgbm90IHJ1bm5pbmcgYW4gU01UUCBzZXJ2ZXIuCisjIEJ1dCB3ZSBjYW4gY2hlY2sgdGhhdCBpdCBkb2VzIG5vdCBhbGxvdyBhY2Nlc3MgdG8gZmlsZTovLywgd2hpY2ggd291bGQKKyMgb3RoZXJ3aXNlIGFsbG93IHRoaXMgY2xvbmUgdG8gY29tcGxldGUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwLWFsdGVybmF0ZXMgY2Fubm90IHBvaW50IGF0IGZ1bm55IHByb3RvY29scycgJworCWVjaG8gImZpbGU6Ly8kdmljdGltL29iamVjdHMiID4iJGV2aWwvb2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgaHR0cC5mb2xsb3dSZWRpcmVjdHM9dHJ1ZSBcCisJCWNsb25lICIkSFRUUERfVVJML2R1bWIvZXZpbC5naXQiIGV2aWwtZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwLWFsdGVybmF0ZXMgdHJpZ2dlcnMgbm90LWZyb20tdXNlciBwcm90b2NvbCBjaGVjaycgJworCWVjaG8gIiRIVFRQRF9VUkwvZHVtYi92aWN0aW0uZ2l0L29iamVjdHMiIFwKKwkJPiIkZXZpbC9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIiAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCBodHRwLmZvbGxvd1JlZGlyZWN0cyB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHByb3RvY29sLmh0dHAuYWxsb3c9dXNlciBcCisJCWNsb25lICRIVFRQRF9VUkwvZHVtYi9ldmlsLmdpdCBldmlsLXVzZXIgJiYKKwlnaXQgLWMgcHJvdG9jb2wuaHR0cC5hbGxvdz1hbHdheXMgXAorCQljbG9uZSAkSFRUUERfVVJML2R1bWIvZXZpbC5naXQgZXZpbC11c2VyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbiByZWRpcmVjdCB0aHJvdWdoIG5vbi0iaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrIiBVUkwnICcKKwlnaXQgY2xvbmUgIiRIVFRQRF9VUkwvcmVkaXItdG8vZHVtYi9yZXBvLmdpdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJpbnQgSFRUUCBlcnJvciB3aGVuIGFueSBpbnRlcm1lZGlhdGUgcmVkaXJlY3QgdGhyb3dzIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICIkSFRUUERfVVJML3JlZGlyLXRvLzUwMiIgMj4gc3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAidW5hYmxlIHRvIGFjY2Vzcy4qL3JlZGlyLXRvLzUwMiIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIHZpYSBodHRwIGFsdGVybmF0ZXMgd29ya3MnICcKKwlwYXJlbnQ9JEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9hbHQtcGFyZW50LmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSAiJHBhcmVudCIgJiYKKwlnaXQgLUMgIiRwYXJlbnQiIC0td29yay10cmVlPS4gY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZm9vICYmCisJZ2l0IC1DICIkcGFyZW50IiB1cGRhdGUtc2VydmVyLWluZm8gJiYKKwljb21taXQ9JChnaXQgLUMgIiRwYXJlbnQiIHJldi1wYXJzZSBIRUFEKSAmJgorCisJY2hpbGQ9JEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9hbHQtY2hpbGQuZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlICIkY2hpbGQiICYmCisJZWNobyAiLi4vLi4vYWx0LXBhcmVudC5naXQvb2JqZWN0cyIgPiIkY2hpbGQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiICYmCisJZ2l0IC1DICIkY2hpbGQiIHVwZGF0ZS1yZWYgSEVBRCAkY29tbWl0ICYmCisJZ2l0IC1DICIkY2hpbGQiIHVwZGF0ZS1zZXJ2ZXItaW5mbyAmJgorCisJZ2l0IC1jIGh0dHAuZm9sbG93cmVkaXJlY3RzPXRydWUgY2xvbmUgIiRIVFRQRF9VUkwvZHVtYi9hbHQtY2hpbGQuZ2l0IgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NTEtaHR0cC1mZXRjaC1zbWFydC5zaCBiL3QvdDU1NTEtaHR0cC1mZXRjaC1zbWFydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42Nzg4YWVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU1MS1odHRwLWZldGNoLXNtYXJ0LnNoCkBAIC0wLDAgKzEsNDcxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBzbWFydCBmZXRjaGluZyBvdmVyIGh0dHAgdmlhIGh0dHAtYmFja2VuZCcKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnknICcKKwlnaXQgY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBodHRwLWFjY2Vzc2libGUgYmFyZSByZXBvc2l0b3J5JyAnCisJbWtkaXIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSBnaXQgLS1iYXJlIGluaXQKKwkpICYmCisJZ2l0IHJlbW90ZSBhZGQgcHVibGljICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCWdpdCBwdXNoIHB1YmxpYyBtYXN0ZXI6bWFzdGVyCisnCisKK3NldHVwX2Fza3Bhc3NfaGVscGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGh0dHAgcmVwb3NpdG9yeScgJworCWNhdCA+ZXhwIDw8LVxFT0YgJiYKKwk+IEdFVCAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xCisJPiBBY2NlcHQ6ICovKgorCT4gQWNjZXB0LUVuY29kaW5nOiBFTkNPRElOR1MKKwk+IFByYWdtYTogbm8tY2FjaGUKKwk8IEhUVFAvMS4xIDIwMCBPSworCTwgUHJhZ21hOiBuby1jYWNoZQorCTwgQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUsIG1heC1hZ2U9MCwgbXVzdC1yZXZhbGlkYXRlCisJPCBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ2l0LXVwbG9hZC1wYWNrLWFkdmVydGlzZW1lbnQKKwk+IFBPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMQorCT4gQWNjZXB0LUVuY29kaW5nOiBFTkNPRElOR1MKKwk+IENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1naXQtdXBsb2FkLXBhY2stcmVxdWVzdAorCT4gQWNjZXB0OiBhcHBsaWNhdGlvbi94LWdpdC11cGxvYWQtcGFjay1yZXN1bHQKKwk+IENvbnRlbnQtTGVuZ3RoOiB4eHgKKwk8IEhUVFAvMS4xIDIwMCBPSworCTwgUHJhZ21hOiBuby1jYWNoZQorCTwgQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUsIG1heC1hZ2U9MCwgbXVzdC1yZXZhbGlkYXRlCisJPCBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ2l0LXVwbG9hZC1wYWNrLXJlc3VsdAorCUVPRgorCUdJVF9UUkFDRV9DVVJMPXRydWUgR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIFwKKwkJZ2l0IGNsb25lIC0tcXVpZXQgJEhUVFBEX1VSTC9zbWFydC9yZXBvLmdpdCBjbG9uZSAyPmVyciAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmUvZmlsZSAmJgorCXRyICdcJydcMDE1J1wnJyBRIDxlcnIgfAorCXNlZCAtZSAiCisJCXMvUVwkLy8KKwkJL15bKl0gL2QKKwkJL149PSBJbmZvOi9kCisJCS9ePT4gU2VuZCBoZWFkZXIsIC9kCisJCS9ePT4gU2VuZCBoZWFkZXI6JC9kCisJCS9ePD0gUmVjdiBoZWFkZXIsIC9kCisJCS9ePD0gUmVjdiBoZWFkZXI6JC9kCisJCXMvPT4gU2VuZCBoZWFkZXI6IC8vCisJCXMvPSBSZWN2IGhlYWRlcjovLworCQkvXjw9IFJlY3YgZGF0YS9kCisJCS9ePT4gU2VuZCBkYXRhL2QKKwkJL14kL2QKKwkJL148ICQvZAorCisJCS9eW14+PF0veworCQkJcy9eLz4gLworCQl9CisKKwkJL14+IFVzZXItQWdlbnQ6IC9kCisJCS9ePiBIb3N0OiAvZAorCQkvXj4gUE9TVCAvLCQgeworCQkJL14+IEFjY2VwdDogWypdXFwvWypdL2QKKwkJfQorCQlzL14+IENvbnRlbnQtTGVuZ3RoOiAuKi8+IENvbnRlbnQtTGVuZ3RoOiB4eHgvCisJCS9ePiAwMC4ud2FudCAvZAorCQkvXj4gMDAuKmRvbmUvZAorCisJCS9ePCBTZXJ2ZXI6IC9kCisJCS9ePCBFeHBpcmVzOiAvZAorCQkvXjwgRGF0ZTogL2QKKwkJL148IENvbnRlbnQtTGVuZ3RoOiAvZAorCQkvXjwgVHJhbnNmZXItRW5jb2Rpbmc6IC9kCisJIiA+YWN0dWFsICYmCisKKwkjIE5FRURTV09SSzogSWYgdGhlIG92ZXJzcGVjaWZpY2F0aW9uIG9mIHRoZSBleHBlY3RlZCByZXN1bHQgaXMgcmVkdWNlZCwgd2UKKwkjIG1pZ2h0IGJlIGFibGUgdG8gcnVuIHRoaXMgdGVzdCBpbiBhbGwgcHJvdG9jb2wgdmVyc2lvbnMuCisJaWYgdGVzdCAiJEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT04iID0gMAorCXRoZW4KKwkJc2VkIC1lICJzL14+IEFjY2VwdC1FbmNvZGluZzogLiovPiBBY2NlcHQtRW5jb2Rpbmc6IEVOQ09ESU5HUy8iIFwKKwkJCQlhY3R1YWwgPmFjdHVhbC5zbXVkZ2VkICYmCisJCXRlc3RfY21wIGV4cCBhY3R1YWwuc211ZGdlZCAmJgorCisJCWdyZXAgIkFjY2VwdC1FbmNvZGluZzouKmd6aXAiIGFjdHVhbCA+YWN0dWFsLmd6aXAgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBhY3R1YWwuZ3ppcAorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNoYW5nZXMgdmlhIGh0dHAnICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0d28gJiYKKwlnaXQgcHVzaCBwdWJsaWMgJiYKKwkoY2QgY2xvbmUgJiYgZ2l0IHB1bGwpICYmCisJdGVzdF9jbXAgZmlsZSBjbG9uZS9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZWQgdXBsb2FkLXBhY2sgc2VydmljZScgJworCWNhdCA+ZXhwIDw8LVxFT0YgJiYKKwlHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCisJUE9TVCAvc21hcnQvcmVwby5naXQvZ2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDIwMAorCUdFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKKwlQT1NUIC9zbWFydC9yZXBvLmdpdC9naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCisJRU9GCisKKwkjIE5FRURTV09SSzogSWYgdGhlIG92ZXJzcGVjaWZpY2F0aW9uIG9mIHRoZSBleHBlY3RlZCByZXN1bHQgaXMgcmVkdWNlZCwgd2UKKwkjIG1pZ2h0IGJlIGFibGUgdG8gcnVuIHRoaXMgdGVzdCBpbiBhbGwgcHJvdG9jb2wgdmVyc2lvbnMuCisJaWYgdGVzdCAiJEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT04iID0gMAorCXRoZW4KKwkJY2hlY2tfYWNjZXNzX2xvZyBleHAKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3cgcmVkaXJlY3RzICgzMDEpJyAnCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvc21hcnQtcmVkaXItcGVybS9yZXBvLmdpdCAtLXF1aWV0IHJlcG8tcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3cgcmVkaXJlY3RzICgzMDIpJyAnCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvc21hcnQtcmVkaXItdGVtcC9yZXBvLmdpdCAtLXF1aWV0IHJlcG8tdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRpcmVjdHMgcmUtcm9vdCBmdXJ0aGVyIHJlcXVlc3RzJyAnCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvc21hcnQtcmVkaXItbGltaXRlZC9yZXBvLmdpdCByZXBvLXJlZGlyLWxpbWl0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtcm9vdGluZyBkaWVzIG9uIGluc2FuZSBzY2hlbWVzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICRIVFRQRF9VUkwvaW5zYW5lLXJlZGlyL3JlcG8uZ2l0IGluc2FuZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBmcm9tIHBhc3N3b3JkLXByb3RlY3RlZCByZXBvc2l0b3J5JyAnCisJZWNobyB0d28gPmV4cGVjdCAmJgorCXNldF9hc2twYXNzIHVzZXJAaG9zdCBwYXNzQGhvc3QgJiYKKwlnaXQgY2xvbmUgLS1iYXJlICIkSFRUUERfVVJML2F1dGgvc21hcnQvcmVwby5naXQiIHNtYXJ0LWF1dGggJiYKKwlleHBlY3RfYXNrcGFzcyBib3RoIHVzZXJAaG9zdCAmJgorCWdpdCAtLWdpdC1kaXI9c21hcnQtYXV0aCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZnJvbSBhdXRoLW9ubHktZm9yLXB1c2ggcmVwb3NpdG9yeScgJworCWVjaG8gdHdvID5leHBlY3QgJiYKKwlzZXRfYXNrcGFzcyB3cm9uZyAmJgorCWdpdCBjbG9uZSAtLWJhcmUgIiRIVFRQRF9VUkwvYXV0aC1wdXNoL3NtYXJ0L3JlcG8uZ2l0IiBzbWFydC1ub2F1dGggJiYKKwlleHBlY3RfYXNrcGFzcyBub25lICYmCisJZ2l0IC0tZ2l0LWRpcj1zbWFydC1ub2F1dGggbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGZyb20gYXV0aC1vbmx5LWZvci1vYmplY3RzIHJlcG9zaXRvcnknICcKKwllY2hvIHR3byA+ZXhwZWN0ICYmCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0IHBhc3NAaG9zdCAmJgorCWdpdCBjbG9uZSAtLWJhcmUgIiRIVFRQRF9VUkwvYXV0aC1mZXRjaC9zbWFydC9yZXBvLmdpdCIgaGFsZi1hdXRoICYmCisJZXhwZWN0X2Fza3Bhc3MgYm90aCB1c2VyQGhvc3QgJiYKKwlnaXQgLS1naXQtZGlyPWhhbGYtYXV0aCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8tb3AgaGFsZi1hdXRoIGZldGNoIGRvZXMgbm90IHJlcXVpcmUgYSBwYXNzd29yZCcgJworCXNldF9hc2twYXNzIHdyb25nICYmCisKKwkjIE5FRURTV09SSzogV2hlbiB1c2luZyBIVFRQKFMpLCBwcm90b2NvbCB2MCBzdXBwb3J0cyBhICJoYWxmLWF1dGgiCisJIyBjb25maWd1cmF0aW9uIHdpdGggYXV0aGVudGljYXRpb24gcmVxdWlyZWQgb25seSB3aGVuIGRvd25sb2FkaW5nCisJIyBvYmplY3RzIGFuZCBub3QgcmVmcywgYnkgaGF2aW5nIHRoZSBIVFRQIHNlcnZlciBvbmx5IHJlcXVpcmUKKwkjIGF1dGhlbnRpY2F0aW9uIGZvciB0aGUgImdpdC11cGxvYWQtcGFjayIgcGF0aCBhbmQgbm90ICJpbmZvL3JlZnMiLgorCSMgVGhpcyBpcyBub3QgcG9zc2libGUgd2l0aCBwcm90b2NvbCB2Miwgc2luY2UgYm90aCBvYmplY3RzIGFuZCByZWZzCisJIyBhcmUgb2J0YWluZWQgZnJvbSB0aGUgImdpdC11cGxvYWQtcGFjayIgcGF0aC4gQSBzb2x1dGlvbiB0byB0aGlzIGlzCisJIyB0byB0ZWFjaCB0aGUgc2VydmVyIGFuZCBjbGllbnQgdG8gYmUgYWJsZSB0byBpbmxpbmUgbHMtcmVmcyByZXF1ZXN0cworCSMgYXMgYW4gRXh0cmEgUGFyYW1ldGVyIChzZWUgcGFjay1wcm90b2NvbC50eHQpLCBzbyB0aGF0ICJpbmZvL3JlZnMiCisJIyBjYW4gc2VydmUgcmVmcywganVzdCBsaWtlIGl0IGRvZXMgaW4gcHJvdG9jb2wgdjAuCisJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIGdpdCAtLWdpdC1kaXI9aGFsZi1hdXRoIGZldGNoICYmCisJZXhwZWN0X2Fza3Bhc3Mgbm9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRpcmVjdHMgc2VuZCBhdXRoIHRvIG5ldyBsb2NhdGlvbicgJworCXNldF9hc2twYXNzIHVzZXJAaG9zdCBwYXNzQGhvc3QgJiYKKwlnaXQgLWMgY3JlZGVudGlhbC51c2VIdHRwUGF0aD10cnVlIFwKKwkgIGNsb25lICRIVFRQRF9VUkwvc21hcnQtcmVkaXItYXV0aC9yZXBvLmdpdCByZXBvLXJlZGlyLWF1dGggJiYKKwlleHBlY3RfYXNrcGFzcyBib3RoIHVzZXJAaG9zdCBhdXRoL3NtYXJ0L3JlcG8uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FibGUgZHVtYiBodHRwIG9uIHNlcnZlcicgJworCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiIFwKKwkJY29uZmlnIGh0dHAuZ2V0YW55ZmlsZSBmYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfU01BUlRfSFRUUCBjYW4gZGlzYWJsZSBzbWFydCBodHRwJyAnCisJKEdJVF9TTUFSVF9IVFRQPTAgJiYKKwkgZXhwb3J0IEdJVF9TTUFSVF9IVFRQICYmCisJIGNkIGNsb25lICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBDb250ZW50LVR5cGUgcmVqZWN0ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgJEhUVFBEX1VSTC9icm9rZW5fc21hcnQvcmVwby5naXQgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3QgdmFsaWQ6IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5hbWVzcGFjZWQgcmVmcycgJworCXRlc3RfY29tbWl0IG5hbWVzcGFjZWQgJiYKKwlnaXQgcHVzaCBwdWJsaWMgSEVBRDpyZWZzL25hbWVzcGFjZXMvbnMvcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiBcCisJCXN5bWJvbGljLXJlZiByZWZzL25hbWVzcGFjZXMvbnMvSEVBRCByZWZzL25hbWVzcGFjZXMvbnMvcmVmcy9oZWFkcy9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc21hcnQgY2xvbmUgcmVzcGVjdHMgbmFtZXNwYWNlJyAnCisJZ2l0IGNsb25lICIkSFRUUERfVVJML3NtYXJ0X25hbWVzcGFjZS9yZXBvLmdpdCIgbnMtc21hcnQgJiYKKwllY2hvIG5hbWVzcGFjZWQgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9bnMtc21hcnQvLmdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHVtYiBjbG9uZSB2aWEgaHR0cC1iYWNrZW5kIHJlc3BlY3RzIG5hbWVzcGFjZScgJworCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiIFwKKwkJY29uZmlnIGh0dHAuZ2V0YW55ZmlsZSB0cnVlICYmCisJR0lUX1NNQVJUX0hUVFA9MCBnaXQgY2xvbmUgXAorCQkiJEhUVFBEX1VSTC9zbWFydF9uYW1lc3BhY2UvcmVwby5naXQiIG5zLWR1bWIgJiYKKwllY2hvIG5hbWVzcGFjZWQgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9bnMtZHVtYi8uZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb29raWVzIHN0b3JlZCBpbiBodHRwLmNvb2tpZWZpbGUgd2hlbiBodHRwLnNhdmVjb29raWVzIHNldCcgJworCWNhdCA+Y29va2llcy50eHQgPDwtXEVPRiAmJgorCTEyNy4wLjAuMQlGQUxTRQkvc21hcnRfY29va2llcy8JRkFMU0UJMAlvdGhlcm5hbWUJb3RoZXJ2YWx1ZQorCUVPRgorCXNvcnQgPmV4cGVjdF9jb29raWVzLnR4dCA8PC1cRU9GICYmCisKKwkxMjcuMC4wLjEJRkFMU0UJL3NtYXJ0X2Nvb2tpZXMvCUZBTFNFCTAJb3RoZXJuYW1lCW90aGVydmFsdWUKKwkxMjcuMC4wLjEJRkFMU0UJL3NtYXJ0X2Nvb2tpZXMvcmVwby5naXQvaW5mby8JRkFMU0UJMAluYW1lCXZhbHVlCisJRU9GCisJZ2l0IGNvbmZpZyBodHRwLmNvb2tpZWZpbGUgY29va2llcy50eHQgJiYKKwlnaXQgY29uZmlnIGh0dHAuc2F2ZWNvb2tpZXMgdHJ1ZSAmJgorCWdpdCBscy1yZW1vdGUgJEhUVFBEX1VSTC9zbWFydF9jb29raWVzL3JlcG8uZ2l0IG1hc3RlciAmJgorCisJIyBORUVEU1dPUks6IElmIHRoZSBvdmVyc3BlY2lmaWNhdGlvbiBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0IGlzIHJlZHVjZWQsIHdlCisJIyBtaWdodCBiZSBhYmxlIHRvIHJ1biB0aGlzIHRlc3QgaW4gYWxsIHByb3RvY29sIHZlcnNpb25zLgorCWlmIHRlc3QgIiRHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OIiA9IDAKKwl0aGVuCisJCXRhaWwgLTMgY29va2llcy50eHQgfCBzb3J0ID5jb29raWVzX3RhaWwudHh0ICYmCisJCXRlc3RfY21wIGV4cGVjdF9jb29raWVzLnR4dCBjb29raWVzX3RhaWwudHh0CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhbnNmZXIuaGlkZXJlZnMgd29ya3Mgb3ZlciBzbWFydC1odHRwJyAnCisJdGVzdF9jb21taXQgaGlkZGVuICYmCisJdGVzdF9jb21taXQgdmlzaWJsZSAmJgorCWdpdCBwdXNoIHB1YmxpYyBIRUFEXjpyZWZzL2hlYWRzL2EgSEVBRDpyZWZzL2hlYWRzL2IgJiYKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiBcCisJCWNvbmZpZyB0cmFuc2Zlci5oaWRlcmVmcyByZWZzL2hlYWRzL2EgJiYKKwlnaXQgY2xvbmUgLS1iYXJlICIkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IiBoaWRkZW4uZ2l0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGhpZGRlbi5naXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGEgJiYKKwlnaXQgLUMgaGlkZGVuLmdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYgorJworCisjIGNyZWF0ZSBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHRhZ3MsIG51bWJlcmVkIGZyb20gdGFnLSQxIHRvIHRhZy0kMgorY3JlYXRlX3RhZ3MgKCkgeworCXJtIC1mIG1hcmtzICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAiJDEiICIkMiIpCisJZG8KKwkJIyBkb24ndCB1c2UgaGVyZS1kb2MsIGJlY2F1c2UgaXQgcmVxdWlyZXMgYSBwcm9jZXNzCisJCSMgcGVyIGxvb3AgaXRlcmF0aW9uCisJCWVjaG8gImNvbW1pdCByZWZzL2hlYWRzL3Rvby1tYW55LXJlZnMtJDEiICYmCisJCWVjaG8gIm1hcmsgOiRpIiAmJgorCQllY2hvICJjb21taXR0ZXIgZ2l0IDxnaXRAZXhhbXBsZS5jb20+ICRpICswMDAwIiAmJgorCQllY2hvICJkYXRhIDAiICYmCisJCWVjaG8gIk0gNjQ0IGlubGluZSBibGEudHh0IiAmJgorCQllY2hvICJkYXRhIDQiICYmCisJCWVjaG8gImJsYSIgJiYKKwkJIyBtYWtlIGV2ZXJ5IGNvbW1pdCBkYW5nbGluZyBieSBhbHdheXMKKwkJIyByZXdpbmRpbmcgdGhlIGJyYW5jaCBhZnRlciBlYWNoIGNvbW1pdAorCQllY2hvICJyZXNldCByZWZzL2hlYWRzL3Rvby1tYW55LXJlZnMtJDEiICYmCisJCWVjaG8gImZyb20gOiQxIgorCWRvbmUgfCBnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9bWFya3MgJiYKKworCSMgbm93IGFzc2lnbiB0YWdzIHRvIGFsbCB0aGUgZGFuZ2xpbmcgY29tbWl0cyB3ZSBjcmVhdGVkIGFib3ZlCisJdGFnPSQocGVybCAtZSAicHJpbnQgXCJibGFcIiB4IDMwIikgJiYKKwlzZWQgLWUgInN8XjpcKFteIF0qXCkgXCguKlwpJHxcMiByZWZzL3RhZ3MvJHRhZy1cMXwiIDxtYXJrcyA+PnBhY2tlZC1yZWZzCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSAyLDAwMCB0YWdzIGluIHRoZSByZXBvJyAnCisJKAorCQljZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkJY3JlYXRlX3RhZ3MgMSAyMDAwCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENNRExJTkVfTElNSVQgXAorCSdjbG9uZSB0aGUgMiwwMDAgdGFnIHJlcG8gdG8gY2hlY2sgT1MgY29tbWFuZCBsaW5lIG92ZXJmbG93JyAnCisJcnVuX3dpdGhfbGltaXRlZF9jbWRsaW5lIGdpdCBjbG9uZSAkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IHRvby1tYW55LXJlZnMgJiYKKwkoCisJCWNkIHRvby1tYW55LXJlZnMgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3RhZ3MgPmFjdHVhbCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyMDAwIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFyZ2UgZmV0Y2gtcGFjayByZXF1ZXN0cyBjYW4gYmUgc2VudCB1c2luZyBjaHVua2VkIGVuY29kaW5nJyAnCisJR0lUX1RSQUNFX0NVUkw9dHJ1ZSBnaXQgLWMgaHR0cC5wb3N0YnVmZmVyPTY1NTM2IFwKKwkJY2xvbmUgLS1iYXJlICIkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IiBzcGxpdC5naXQgMj5lcnIgJiYKKwlncmVwICJePT4gU2VuZCBoZWFkZXI6IFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhbGxvd3JlYWNoYWJsZXNoYTFpbndhbnQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiB0ZXN0X3JlYWNoYWJsZS5naXQiICYmCisJc2VydmVyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCW1hc3Rlcl9zaGE9JChnaXQgLUMgIiRzZXJ2ZXIiIHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwlnaXQgLUMgIiRzZXJ2ZXIiIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93cmVhY2hhYmxlc2hhMWlud2FudCAxICYmCisKKwlnaXQgaW5pdCAtLWJhcmUgdGVzdF9yZWFjaGFibGUuZ2l0ICYmCisJZ2l0IC1DIHRlc3RfcmVhY2hhYmxlLmdpdCByZW1vdGUgYWRkIG9yaWdpbiAiJEhUVFBEX1VSTC9zbWFydC9yZXBvLmdpdCIgJiYKKwlnaXQgLUMgdGVzdF9yZWFjaGFibGUuZ2l0IGZldGNoIG9yaWdpbiAiJG1hc3Rlcl9zaGEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYWxsb3dyZWFjaGFibGVzaGExaW53YW50IHdpdGggdW5yZWFjaGFibGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiB0ZXN0X3JlYWNoYWJsZS5naXQ7IGdpdCByZXNldCAtLWhhcmQgJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCisJI2NyZWF0ZSB1bnJlYWNoYWJsZSBzaGEKKwllY2hvIGNvbnRlbnQgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gdHdvICYmCisJZ2l0IHB1c2ggcHVibGljIEhFQUQ6cmVmcy9oZWFkcy9kb29tZWQgJiYKKwlnaXQgcHVzaCBwdWJsaWMgOnJlZnMvaGVhZHMvZG9vbWVkICYmCisKKwlzZXJ2ZXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJbWFzdGVyX3NoYT0kKGdpdCAtQyAiJHNlcnZlciIgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCWdpdCAtQyAiJHNlcnZlciIgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dyZWFjaGFibGVzaGExaW53YW50IDEgJiYKKworCWdpdCBpbml0IC0tYmFyZSB0ZXN0X3JlYWNoYWJsZS5naXQgJiYKKwlnaXQgLUMgdGVzdF9yZWFjaGFibGUuZ2l0IHJlbW90ZSBhZGQgb3JpZ2luICIkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IiAmJgorCSMgU29tZSBwcm90b2NvbCB2ZXJzaW9ucyAoZS5nLiAyKSBzdXBwb3J0IGZldGNoaW5nCisJIyB1bmFkdmVydGlzZWQgb2JqZWN0cywgc28gcmVzdHJpY3QgdGhpcyB0ZXN0IHRvIHYwLgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgXAorCQlnaXQgLUMgdGVzdF9yZWFjaGFibGUuZ2l0IGZldGNoIG9yaWdpbiAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGFsbG93YW55c2hhMWlud2FudCB3aXRoIHVucmVhY2hhYmxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgdGVzdF9yZWFjaGFibGUuZ2l0OyBnaXQgcmVzZXQgLS1oYXJkICQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKworCSNjcmVhdGUgdW5yZWFjaGFibGUgc2hhCisJZWNobyBjb250ZW50ID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIHR3byAmJgorCWdpdCBwdXNoIHB1YmxpYyBIRUFEOnJlZnMvaGVhZHMvZG9vbWVkICYmCisJZ2l0IHB1c2ggcHVibGljIDpyZWZzL2hlYWRzL2Rvb21lZCAmJgorCisJc2VydmVyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCW1hc3Rlcl9zaGE9JChnaXQgLUMgIiRzZXJ2ZXIiIHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwlnaXQgLUMgIiRzZXJ2ZXIiIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93cmVhY2hhYmxlc2hhMWlud2FudCAxICYmCisKKwlnaXQgaW5pdCAtLWJhcmUgdGVzdF9yZWFjaGFibGUuZ2l0ICYmCisJZ2l0IC1DIHRlc3RfcmVhY2hhYmxlLmdpdCByZW1vdGUgYWRkIG9yaWdpbiAiJEhUVFBEX1VSTC9zbWFydC9yZXBvLmdpdCIgJiYKKwkjIFNvbWUgcHJvdG9jb2wgdmVyc2lvbnMgKGUuZy4gMikgc3VwcG9ydCBmZXRjaGluZworCSMgdW5hZHZlcnRpc2VkIG9iamVjdHMsIHNvIHJlc3RyaWN0IHRoaXMgdGVzdCB0byB2MC4KKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIFwKKwkJZ2l0IC1DIHRlc3RfcmVhY2hhYmxlLmdpdCBmZXRjaCBvcmlnaW4gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKworCWdpdCAtQyAiJHNlcnZlciIgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKwlnaXQgLUMgdGVzdF9yZWFjaGFibGUuZ2l0IGZldGNoIG9yaWdpbiAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEVYUEVOU0lWRSAnaHR0cCBjYW4gaGFuZGxlIGVub3Jtb3VzIHJlZiBuZWdvdGlhdGlvbicgJworCSgKKwkJY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJCWNyZWF0ZV90YWdzIDIwMDEgNTAwMDAKKwkpICYmCisJZ2l0IC1DIHRvby1tYW55LXJlZnMgZmV0Y2ggLXEgLS10YWdzICYmCisJKAorCQljZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkJY3JlYXRlX3RhZ3MgNTAwMDEgMTAwMDAwCisJKSAmJgorCWdpdCAtQyB0b28tbWFueS1yZWZzIGZldGNoIC1xIC0tdGFncyAmJgorCWdpdCAtQyB0b28tbWFueS1yZWZzIGZvci1lYWNoLXJlZiByZWZzL3RhZ3MgPnRhZ3MgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxMDAwMDAgdGFncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdXN0b20gaHR0cCBoZWFkZXJzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGh0dHAuZXh0cmFoZWFkZXI9IngtbWFnaWMtdHdvOiBjYWRhYnJhIiBcCisJCWZldGNoICIkSFRUUERfVVJML3NtYXJ0X2hlYWRlcnMvcmVwby5naXQiICYmCisJZ2l0IC1jIGh0dHAuZXh0cmFoZWFkZXI9IngtbWFnaWMtb25lOiBhYnJhIiBcCisJICAgIC1jIGh0dHAuZXh0cmFoZWFkZXI9IngtbWFnaWMtdHdvOiBjYWRhYnJhIiBcCisJICAgIGZldGNoICIkSFRUUERfVVJML3NtYXJ0X2hlYWRlcnMvcmVwby5naXQiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxNjAwMDAsJChnaXQgcmV2LXBhcnNlIEhFQUQpLHN1YiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoIHN1YiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi51cmwgXAorCQkiJEhUVFBEX1VSTC9zbWFydF9oZWFkZXJzL3JlcG8uZ2l0IiAmJgorCWdpdCBzdWJtb2R1bGUgaW5pdCBzdWIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWIgJiYKKwlnaXQgLWMgaHR0cC5leHRyYWhlYWRlcj0ieC1tYWdpYy1vbmU6IGFicmEiIFwKKwkgICAgLWMgaHR0cC5leHRyYWhlYWRlcj0ieC1tYWdpYy10d286IGNhZGFicmEiIFwKKwkJc3VibW9kdWxlIHVwZGF0ZSBzdWIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgZmV0Y2ggY29tbWFuZCBpbiByZW1vdGUtY3VybCB1cGRhdGVzIHJlZnMnICcKKwlTRVJWRVI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdHdvYnJhbmNoIiAmJgorCXJtIC1yZiAiJFNFUlZFUiIgY2xpZW50ICYmCisKKwlnaXQgaW5pdCAiJFNFUlZFUiIgJiYKKwl0ZXN0X2NvbW1pdCAtQyAiJFNFUlZFUiIgZm9vICYmCisJZ2l0IC1DICIkU0VSVkVSIiB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYW5vdGhlcmJyYW5jaCBmb28gJiYKKworCWdpdCBjbG9uZSAkSFRUUERfVVJML3NtYXJ0L3R3b2JyYW5jaCBjbGllbnQgJiYKKworCXRlc3RfY29tbWl0IC1DICIkU0VSVkVSIiBiYXIgJiYKKwlnaXQgLUMgY2xpZW50IC1jIHByb3RvY29sLnZlcnNpb249MCBmZXRjaCAmJgorCisJZ2l0IC1DICIkU0VSVkVSIiByZXYtcGFyc2UgbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgLUMgY2xpZW50IHJldi1wYXJzZSBvcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGJ5IFNIQS0xIHdpdGhvdXQgdGFnIGZvbGxvd2luZycgJworCVNFUlZFUj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9zZXJ2ZXIiICYmCisJcm0gLXJmICIkU0VSVkVSIiBjbGllbnQgJiYKKworCWdpdCBpbml0ICIkU0VSVkVSIiAmJgorCXRlc3RfY29tbWl0IC1DICIkU0VSVkVSIiBmb28gJiYKKworCWdpdCBjbG9uZSAkSFRUUERfVVJML3NtYXJ0L3NlcnZlciBjbGllbnQgJiYKKworCXRlc3RfY29tbWl0IC1DICIkU0VSVkVSIiBiYXIgJiYKKwlnaXQgLUMgIiRTRVJWRVIiIHJldi1wYXJzZSBiYXIgPmJhcl9oYXNoICYmCisJZ2l0IC1DIGNsaWVudCAtYyBwcm90b2NvbC52ZXJzaW9uPTAgZmV0Y2ggXAorCQktLW5vLXRhZ3Mgb3JpZ2luICQoY2F0IGJhcl9oYXNoKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfUkVEQUNUX0NPT0tJRVMgcmVkYWN0cyBjb29raWVzJyAnCisJcm0gLXJmIGNsb25lICYmCisJZWNobyAiU2V0LUNvb2tpZTogRm9vPTEiID5jb29raWVzICYmCisJZWNobyAiU2V0LUNvb2tpZTogQmFyPTIiID4+Y29va2llcyAmJgorCUdJVF9UUkFDRV9DVVJMPXRydWUgR0lUX1JFREFDVF9DT09LSUVTPUJhcixCYXogXAorCQlnaXQgLWMgImh0dHAuY29va2llRmlsZT0kKHB3ZCkvY29va2llcyIgY2xvbmUgXAorCQkkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IGNsb25lIDI+ZXJyICYmCisJZ3JlcCAiQ29va2llOi4qRm9vPTEiIGVyciAmJgorCWdyZXAgIkNvb2tpZTouKkJhcj08cmVkYWN0ZWQ+IiBlcnIgJiYKKwkhIGdyZXAgIkNvb2tpZTouKkJhcj0yIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX1JFREFDVF9DT09LSUVTIGhhbmRsZXMgZW1wdHkgdmFsdWVzJyAnCisJcm0gLXJmIGNsb25lICYmCisJZWNobyAiU2V0LUNvb2tpZTogRm9vPSIgPmNvb2tpZXMgJiYKKwlHSVRfVFJBQ0VfQ1VSTD10cnVlIEdJVF9SRURBQ1RfQ09PS0lFUz1Gb28gXAorCQlnaXQgLWMgImh0dHAuY29va2llRmlsZT0kKHB3ZCkvY29va2llcyIgY2xvbmUgXAorCQkkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IGNsb25lIDI+ZXJyICYmCisJZ3JlcCAiQ29va2llOi4qRm9vPTxyZWRhY3RlZD4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfVFJBQ0VfQ1VSTF9OT19EQVRBIHByZXZlbnRzIGRhdGEgZnJvbSBiZWluZyB0cmFjZWQnICcKKwlybSAtcmYgY2xvbmUgJiYKKwlHSVRfVFJBQ0VfQ1VSTD10cnVlIFwKKwkJZ2l0IGNsb25lICRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQgY2xvbmUgMj5lcnIgJiYKKwlncmVwICI9PiBTZW5kIGRhdGEiIGVyciAmJgorCisJcm0gLXJmIGNsb25lICYmCisJR0lUX1RSQUNFX0NVUkw9dHJ1ZSBHSVRfVFJBQ0VfQ1VSTF9OT19EQVRBPTEgXAorCQlnaXQgY2xvbmUgJEhUVFBEX1VSTC9zbWFydC9yZXBvLmdpdCBjbG9uZSAyPmVyciAmJgorCSEgZ3JlcCAiPT4gU2VuZCBkYXRhIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VydmVyLXNpZGUgZXJyb3IgZGV0ZWN0ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgJEhUVFBEX1VSTC9lcnJvcl9zbWFydC9yZXBvLmdpdCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgInNlcnZlci1zaWRlIGVycm9yIiBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTUyLXNraXBwaW5nLWZldGNoLW5lZ290aWF0b3Iuc2ggYi90L3Q1NTUyLXNraXBwaW5nLWZldGNoLW5lZ290aWF0b3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTU2YzcwNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NTItc2tpcHBpbmctZmV0Y2gtbmVnb3RpYXRvci5zaApAQCAtMCwwICsxLDIwOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3Qgc2tpcHBpbmcgZmV0Y2ggbmVnb3RpYXRvcicKKy4gLi90ZXN0LWxpYi5zaAorCitoYXZlX3NlbnQgKCkgeworCXdoaWxlIHRlc3QgIiQjIiAtbmUgMAorCWRvCisJCWdyZXAgImZldGNoPiBoYXZlICQoZ2l0IC1DIGNsaWVudCByZXYtcGFyc2UgJDEpIiB0cmFjZQorCQlpZiB0ZXN0ICQ/IC1uZSAwCisJCXRoZW4KKwkJCWVjaG8gIk5vIGhhdmUgJChnaXQgLUMgY2xpZW50IHJldi1wYXJzZSAkMSkgKCQxKSIKKwkJCXJldHVybiAxCisJCWZpCisJCXNoaWZ0CisJZG9uZQorfQorCitoYXZlX25vdF9zZW50ICgpIHsKKwl3aGlsZSB0ZXN0ICIkIyIgLW5lIDAKKwlkbworCQlncmVwICJmZXRjaD4gaGF2ZSAkKGdpdCAtQyBjbGllbnQgcmV2LXBhcnNlICQxKSIgdHJhY2UKKwkJaWYgdGVzdCAkPyAtZXEgMAorCQl0aGVuCisJCQlyZXR1cm4gMQorCQlmaQorCQlzaGlmdAorCWRvbmUKK30KKworIyB0cmFjZV9mZXRjaCA8Y2xpZW50X2Rpcj4gPHNlcnZlcl9kaXI+IFthcmdzXQorIworIyBUcmFjZSB0aGUgcGFja2V0IG91dHB1dCBvZiBmZXRjaCwgYnV0IG1ha2Ugc3VyZSB3ZSBkaXNhYmxlIHRoZSB2YXJpYWJsZQorIyBpbiB0aGUgY2hpbGQgdXBsb2FkLXBhY2ssIHNvIHdlIGRvbid0IGNvbWJpbmUgdGhlIHJlc3VsdHMgaW4gdGhlIHNhbWUgZmlsZS4KK3RyYWNlX2ZldGNoICgpIHsKKwljbGllbnQ9JDE7IHNoaWZ0CisJc2VydmVyPSQxOyBzaGlmdAorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgXAorCWdpdCAtQyAiJGNsaWVudCIgZmV0Y2ggXAorCSAgLS11cGxvYWQtcGFjayAndW5zZXQgR0lUX1RSQUNFX1BBQ0tFVDsgZ2l0LXVwbG9hZC1wYWNrJyBcCisJICAiJHNlcnZlciIgIiRAIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXRzIHdpdGggbm8gcGFyZW50cyBhcmUgc2VudCByZWdhcmRsZXNzIG9mIHNraXAgZGlzdGFuY2UnICcKKwlnaXQgaW5pdCBzZXJ2ZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgdG9fZmV0Y2ggJiYKKworCWdpdCBpbml0IGNsaWVudCAmJgorCWZvciBpIGluICQodGVzdF9zZXEgNykKKwlkbworCQl0ZXN0X2NvbW1pdCAtQyBjbGllbnQgYyRpCisJZG9uZSAmJgorCisJIyBXZSBzZW5kOiAiYzciIChza2lwIDEpICJjNSIgKHNraXAgMikgImMyIiAoc2tpcCA0KS4gQWZ0ZXIgdGhhdCwgc2luY2UKKwkjICJjMSIgaGFzIG5vIHBhcmVudCwgaXQgaXMgc3RpbGwgc2VudCBhcyAiaGF2ZSIgZXZlbiB0aG91Z2ggaXQgd291bGQKKwkjIG5vcm1hbGx5IGJlIHNraXBwZWQuCisJdGVzdF9jb25maWcgLUMgY2xpZW50IGZldGNoLm5lZ290aWF0aW9uYWxnb3JpdGhtIHNraXBwaW5nICYmCisJdHJhY2VfZmV0Y2ggY2xpZW50ICIkKHB3ZCkvc2VydmVyIiAmJgorCWhhdmVfc2VudCBjNyBjNSBjMiBjMSAmJgorCWhhdmVfbm90X3NlbnQgYzYgYzQgYzMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hlbiB0d28gc2tpcHMgY29sbGlkZSwgZmF2b3IgdGhlIGxhcmdlciBvbmUnICcKKwlybSAtcmYgc2VydmVyIGNsaWVudCB0cmFjZSAmJgorCWdpdCBpbml0IHNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciB0b19mZXRjaCAmJgorCisJZ2l0IGluaXQgY2xpZW50ICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxMSkKKwlkbworCQl0ZXN0X2NvbW1pdCAtQyBjbGllbnQgYyRpCisJZG9uZSAmJgorCWdpdCAtQyBjbGllbnQgY2hlY2tvdXQgYzUgJiYKKwl0ZXN0X2NvbW1pdCAtQyBjbGllbnQgYzVzaWRlICYmCisKKwkjIEJlZm9yZSByZWFjaGluZyBjNSwgd2Ugc2VuZCAiYzVzaWRlIiAoc2tpcCAxKSBhbmQgImMxMSIgKHNraXAgMSkgImM5IgorCSMgKHNraXAgMikgImM2IiAoc2tpcCA0KS4gVGhlIGxhcmdlciBza2lwIChza2lwIDQpIHRha2VzIHByZWNlZGVuY2UsIHNvCisJIyB0aGUgbmV4dCAiaGF2ZSIgc2VudCB3aWxsIGJlICJjMSIgKGZyb20gImM2IiBza2lwIDQpIGFuZCBub3QgImM0IgorCSMgKGZyb20gImM1c2lkZSIgc2tpcCAxKS4KKwl0ZXN0X2NvbmZpZyAtQyBjbGllbnQgZmV0Y2gubmVnb3RpYXRpb25hbGdvcml0aG0gc2tpcHBpbmcgJiYKKwl0cmFjZV9mZXRjaCBjbGllbnQgIiQocHdkKS9zZXJ2ZXIiICYmCisJaGF2ZV9zZW50IGM1c2lkZSBjMTEgYzkgYzYgYzEgJiYKKwloYXZlX25vdF9zZW50IGMxMCBjOCBjNyBjNSBjNCBjMyBjMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgcmVmIGFkdmVydGlzZW1lbnQgdG8gZmlsdGVyIG91dCBjb21taXRzJyAnCisJcm0gLXJmIHNlcnZlciBjbGllbnQgdHJhY2UgJiYKKwlnaXQgaW5pdCBzZXJ2ZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgYzEgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgYzIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgYzMgJiYKKwlnaXQgLUMgc2VydmVyIHRhZyAtZCBjMSBjMiBjMyAmJgorCisJZ2l0IGNsb25lIHNlcnZlciBjbGllbnQgJiYKKwl0ZXN0X2NvbW1pdCAtQyBjbGllbnQgYzQgJiYKKwl0ZXN0X2NvbW1pdCAtQyBjbGllbnQgYzUgJiYKKwlnaXQgLUMgY2xpZW50IGNoZWNrb3V0IGM0Xl4gJiYKKwl0ZXN0X2NvbW1pdCAtQyBjbGllbnQgYzJzaWRlICYmCisKKwlnaXQgLUMgc2VydmVyIGNoZWNrb3V0IC0tb3JwaGFuIGFub3RoZXJicmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgdG9fZmV0Y2ggJiYKKworCSMgVGhlIHNlcnZlciBhZHZlcnRpc2luZyAiYzMiIChhcyAicmVmcy9oZWFkcy9tYXN0ZXIiKSBtZWFucyB0aGF0IHdlIGRvCisJIyBub3QgbmVlZCB0byBzZW5kIGFueSBhbmNlc3RvcnMgb2YgImMzIiwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gc2VuZCAiYzMiCisJIyBpdHNlbGYuCisJdGVzdF9jb25maWcgLUMgY2xpZW50IGZldGNoLm5lZ290aWF0aW9uYWxnb3JpdGhtIHNraXBwaW5nICYmCisKKwkjIFRoZSByZWYgYWR2ZXJ0aXNlbWVudCBpdHNlbGYgaXMgZmlsdGVyZWQgd2hlbiBwcm90b2NvbCB2MiBpcyB1c2VkLCBzbworCSMgdXNlIHYwLgorCSgKKwkJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wICYmCisJCWV4cG9ydCBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OICYmCisJCXRyYWNlX2ZldGNoIGNsaWVudCBvcmlnaW4gdG9fZmV0Y2gKKwkpICYmCisJaGF2ZV9zZW50IGM1IGM0XiBjMnNpZGUgJiYKKwloYXZlX25vdF9zZW50IGM0IGM0Xl4gYzReXl4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFuZGxlIGNsb2NrIHNrZXcnICcKKwlybSAtcmYgc2VydmVyIGNsaWVudCB0cmFjZSAmJgorCWdpdCBpbml0IHNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciB0b19mZXRjaCAmJgorCisJZ2l0IGluaXQgY2xpZW50ICYmCisKKwkjIDIgcmVndWxhciBjb21taXRzCisJdGVzdF90aWNrPTIwMDAwMDAwMDAgJiYKKwl0ZXN0X2NvbW1pdCAtQyBjbGllbnQgYzEgJiYKKwl0ZXN0X2NvbW1pdCAtQyBjbGllbnQgYzIgJiYKKworCSMgNCBvbGQgY29tbWl0cworCXRlc3RfdGljaz0xMDAwMDAwMDAwICYmCisJZ2l0IC1DIGNsaWVudCBjaGVja291dCBjMSAmJgorCXRlc3RfY29tbWl0IC1DIGNsaWVudCBvbGQxICYmCisJdGVzdF9jb21taXQgLUMgY2xpZW50IG9sZDIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBjbGllbnQgb2xkMyAmJgorCXRlc3RfY29tbWl0IC1DIGNsaWVudCBvbGQ0ICYmCisKKwkjICJjMiIgYW5kICJjMSIgYXJlIHBvcHBlZCBmaXJzdCwgdGhlbiAib2xkNCIgdG8gIm9sZDEiLiAib2xkMSIgd291bGQKKwkjIG5vcm1hbGx5IGJlIHNraXBwZWQsIGJ1dCBpcyB0cmVhdGVkIGFzIGEgY29tbWl0IHdpdGhvdXQgYSBwYXJlbnQgaGVyZQorCSMgYW5kIHNlbnQsIGJlY2F1c2UgKGR1ZSB0byBjbG9jayBza2V3KSBpdHMgb25seSBwYXJlbnQgaGFzIGFscmVhZHkgYmVlbgorCSMgcG9wcGVkIG9mZiB0aGUgcHJpb3JpdHkgcXVldWUuCisJdGVzdF9jb25maWcgLUMgY2xpZW50IGZldGNoLm5lZ290aWF0aW9uYWxnb3JpdGhtIHNraXBwaW5nICYmCisJdHJhY2VfZmV0Y2ggY2xpZW50ICIkKHB3ZCkvc2VydmVyIiAmJgorCWhhdmVfc2VudCBjMiBjMSBvbGQ0IG9sZDIgb2xkMSAmJgorCWhhdmVfbm90X3NlbnQgb2xkMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3Qgc2VuZCAiaGF2ZSIgd2l0aCBhbmNlc3RvcnMgb2YgY29tbWl0cyB0aGF0IHNlcnZlciBBQ0tlZCcgJworCXJtIC1yZiBzZXJ2ZXIgY2xpZW50IHRyYWNlICYmCisJZ2l0IGluaXQgc2VydmVyICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIHRvX2ZldGNoICYmCisKKwlnaXQgaW5pdCBjbGllbnQgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDgpCisJZG8KKwkJZ2l0IC1DIGNsaWVudCBjaGVja291dCAtLW9ycGhhbiBiJGkgJiYKKwkJdGVzdF9jb21taXQgLUMgY2xpZW50IGIkaS5jMAorCWRvbmUgJiYKKwlmb3IgaiBpbiAkKHRlc3Rfc2VxIDE5KQorCWRvCisJCWZvciBpIGluICQodGVzdF9zZXEgOCkKKwkJZG8KKwkJCWdpdCAtQyBjbGllbnQgY2hlY2tvdXQgYiRpICYmCisJCQl0ZXN0X2NvbW1pdCAtQyBjbGllbnQgYiRpLmMkagorCQlkb25lCisJZG9uZSAmJgorCisJIyBDb3B5IHRoaXMgYnJhbmNoIG92ZXIgdG8gdGhlIHNlcnZlciBhbmQgYWRkIGEgY29tbWl0IG9uIGl0IHNvIHRoYXQgaXQKKwkjIGlzIHJlYWNoYWJsZSBidXQgbm90IGFkdmVydGlzZWQuCisJZ2l0IC1DIHNlcnZlciBmZXRjaCAtLW5vLXRhZ3MgIiQocHdkKS9jbGllbnQiIGIxOnJlZnMvaGVhZHMvYjEgJiYKKwlnaXQgLUMgc2VydmVyIGNoZWNrb3V0IGIxICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIGNvbW1pdC1vbi1iMSAmJgorCisJdGVzdF9jb25maWcgLUMgY2xpZW50IGZldGNoLm5lZ290aWF0aW9uYWxnb3JpdGhtIHNraXBwaW5nICYmCisKKwkjIE5FRURTV09SSzogVGhlIG51bWJlciBvZiAiaGF2ZSJzIHNlbnQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSB0cmFuc3BvcnQKKwkjIGlzIHN0YXRlZnVsLiBJZiB0aGUgb3ZlcnNwZWNpZmljYXRpb24gb2YgdGhlIHJlc3VsdCB3ZXJlIHJlZHVjZWQsIHRoaXMKKwkjIHRlc3QgY291bGQgYmUgdXNlZCBmb3IgYm90aCBzdGF0ZWZ1bCBhbmQgc3RhdGVsZXNzIHRyYW5zcG9ydHMuCisJKAorCQkjIEZvcmNlIHByb3RvY29sIHYwLCBpbiB3aGljaCBsb2NhbCB0cmFuc3BvcnQgaXMgc3RhdGVmdWwgKGluCisJCSMgcHJvdG9jb2wgdjIgaXQgaXMgc3RhdGVsZXNzKS4KKwkJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wICYmCisJCWV4cG9ydCBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OICYmCisJCXRyYWNlX2ZldGNoIGNsaWVudCAiJChwd2QpL3NlcnZlciIgdG9fZmV0Y2gKKwkpICYmCisJZ3JlcCAiICBmZXRjaCIgdHJhY2UgJiYKKworCSMgZmV0Y2gtcGFjayBzZW5kcyAyIHJlcXVlc3RzIGVhY2ggY29udGFpbmluZyAxNiAiaGF2ZSIgbGluZXMgYmVmb3JlCisJIyBwcm9jZXNzaW5nIHRoZSBmaXJzdCByZXNwb25zZS4gSW4gdGhlc2UgMiByZXF1ZXN0cywgNCBjb21taXRzIGZyb20KKwkjIGVhY2ggYnJhbmNoIGFyZSBzZW50LiBKdXN0IGNoZWNrIHRoZSBmaXJzdCBicmFuY2guCisJaGF2ZV9zZW50IGIxLmMxOSBiMS5jMTcgYjEuYzE0IGIxLmM5ICYmCisJaGF2ZV9ub3Rfc2VudCBiMS5jMTggYjEuYzE2IGIxLmMxNSBiMS5jMTMgYjEuYzEyIGIxLmMxMSBiMS5jMTAgJiYKKworCSMgV2hpbGUgZmV0Y2gtcGFjayBpcyBwcm9jZXNzaW5nIHRoZSBmaXJzdCByZXNwb25zZSwgaXQgc2hvdWxkIHJlYWQgdGhhdAorCSMgdGhlIHNlcnZlciBBQ0tzIGIxLmMxOSBhbmQgYjEuYzE3LgorCWdyZXAgImZldGNoPCBBQ0sgJChnaXQgLUMgY2xpZW50IHJldi1wYXJzZSBiMS5jMTkpIGNvbW1vbiIgdHJhY2UgJiYKKwlncmVwICJmZXRjaDwgQUNLICQoZ2l0IC1DIGNsaWVudCByZXYtcGFyc2UgYjEuYzE3KSBjb21tb24iIHRyYWNlICYmCisKKwkjIGZldGNoLXBhY2sgc2hvdWxkIHRodXMgbm90IHNlbmQgYW55IG1vcmUgY29tbWl0cyBpbiB0aGUgYjEgYnJhbmNoLCBidXQKKwkjIHNob3VsZCBzdGlsbCBzZW5kIHRoZSBvdGhlcnMgKGluIHRoaXMgdGVzdCwganVzdCBjaGVjayBiMikuCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAwIDgpCisJZG8KKwkJaGF2ZV9ub3Rfc2VudCBiMS5jJGkKKwlkb25lICYmCisJaGF2ZV9zZW50IGIyLmMxIGIyLmMwCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU1My1zZXQtdXBzdHJlYW0uc2ggYi90L3Q1NTUzLXNldC11cHN0cmVhbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MTk3NWFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU1My1zZXQtdXBzdHJlYW0uc2gKQEAgLTAsMCArMSwxNzggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSciZ2l0IGZldGNoL3B1bGwgLS1zZXQtdXBzdHJlYW0iIGJhc2ljIHRlc3RzLicKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19jb25maWcgKCkgeworCXByaW50ZiAiJXNcbiIgIiQyIiAiJDMiID4iZXhwZWN0LiQxIiAmJgorCXsKKwkJZ2l0IGNvbmZpZyAiYnJhbmNoLiQxLnJlbW90ZSIgJiYgZ2l0IGNvbmZpZyAiYnJhbmNoLiQxLm1lcmdlIgorCX0gPiJhY3R1YWwuJDEiICYmCisJdGVzdF9jbXAgImV4cGVjdC4kMSIgImFjdHVhbC4kMSIKK30KKworY2hlY2tfY29uZmlnX21pc3NpbmcgKCkgeworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY29uZmlnICJicmFuY2guJDEucmVtb3RlIiAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY29uZmlnICJicmFuY2guJDEubWVyZ2UiCit9CisKK2NsZWFyX2NvbmZpZyAoKSB7CisJZm9yIGJyYW5jaCBpbiAiJEAiOyBkbworCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCAiYnJhbmNoLiRicmFuY2gucmVtb3RlIgorCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCAiYnJhbmNoLiRicmFuY2gubWVyZ2UiCisJZG9uZQorfQorCitlbnN1cmVfZnJlc2hfdXBzdHJlYW0gKCkgeworCXJtIC1yZiBwYXJlbnQgJiYgZ2l0IGluaXQgLS1iYXJlIHBhcmVudAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBiYXJlIHBhcmVudCBmZXRjaCcgJworCWVuc3VyZV9mcmVzaF91cHN0cmVhbSAmJgorCWdpdCByZW1vdGUgYWRkIHVwc3RyZWFtIHBhcmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb21taXQgb24gbWFzdGVyIGFuZCBvdGhlciBmZXRjaCcgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCWdpdCBwdXNoIHVwc3RyZWFtIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBvdGhlciAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCWdpdCBwdXNoIHVwc3RyZWFtIG90aGVyCisnCisKKyMgdGVzdHMgZm9yIGZldGNoIC0tc2V0LXVwc3RyZWFtCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tc2V0LXVwc3RyZWFtIGRvZXMgbm90IHNldCB1cHN0cmVhbSB3L28gYnJhbmNoJyAnCisJY2xlYXJfY29uZmlnIG1hc3RlciBvdGhlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgZmV0Y2ggLS1zZXQtdXBzdHJlYW0gdXBzdHJlYW0gJiYKKwljaGVja19jb25maWdfbWlzc2luZyBtYXN0ZXIgJiYKKwljaGVja19jb25maWdfbWlzc2luZyBvdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAtLXNldC11cHN0cmVhbSB1cHN0cmVhbSBtYXN0ZXIgc2V0cyBicmFuY2ggbWFzdGVyIGJ1dCBub3Qgb3RoZXInICcKKwljbGVhcl9jb25maWcgbWFzdGVyIG90aGVyICYmCisJZ2l0IGZldGNoIC0tc2V0LXVwc3RyZWFtIHVwc3RyZWFtIG1hc3RlciAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIgdXBzdHJlYW0gcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwljaGVja19jb25maWdfbWlzc2luZyBvdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAtLXNldC11cHN0cmVhbSB1cHN0cmVhbSBvdGhlciBzZXRzIGJyYW5jaCBvdGhlcicgJworCWNsZWFyX2NvbmZpZyBtYXN0ZXIgb3RoZXIgJiYKKwlnaXQgZmV0Y2ggLS1zZXQtdXBzdHJlYW0gdXBzdHJlYW0gb3RoZXIgJiYKKwljaGVja19jb25maWcgbWFzdGVyIHVwc3RyZWFtIHJlZnMvaGVhZHMvb3RoZXIgJiYKKwljaGVja19jb25maWdfbWlzc2luZyBvdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAtLXNldC11cHN0cmVhbSBtYXN0ZXI6b3RoZXIgZG9lcyBub3Qgc2V0IHRoZSBicmFuY2ggb3RoZXIyJyAnCisJY2xlYXJfY29uZmlnIG90aGVyMiAmJgorCWdpdCBmZXRjaCAtLXNldC11cHN0cmVhbSB1cHN0cmVhbSBtYXN0ZXI6b3RoZXIyICYmCisJY2hlY2tfY29uZmlnX21pc3Npbmcgb3RoZXIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tc2V0LXVwc3RyZWFtIGh0dHA6Ly9ub3N1Y2hkb21haW4uZXhhbXBsZS5jb20gZmFpbHMgd2l0aCBpbnZhbGlkIHVybCcgJworCSMgbWFzdGVyIGV4cGxpY2l0bHkgbm90IGNsZWFyZWQsIHdlIGNoZWNrIHRoYXQgaXQgaXMgbm90IHRvdWNoZWQgZnJvbSBwcmV2aW91cyB2YWx1ZQorCWNsZWFyX2NvbmZpZyBvdGhlciBvdGhlcjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLS1zZXQtdXBzdHJlYW0gaHR0cDovL25vc3VjaGRvbWFpbi5leGFtcGxlLmNvbSAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIgdXBzdHJlYW0gcmVmcy9oZWFkcy9vdGhlciAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIG90aGVyICYmCisJY2hlY2tfY29uZmlnX21pc3Npbmcgb3RoZXIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tc2V0LXVwc3RyZWFtIHdpdGggdmFsaWQgVVJMIHNldHMgdXBzdHJlYW0gdG8gVVJMJyAnCisJY2xlYXJfY29uZmlnIG90aGVyIG90aGVyMiAmJgorCXVybD0iZmlsZTovLyciJFBXRCInIiAmJgorCWdpdCBmZXRjaCAtLXNldC11cHN0cmVhbSAiJHVybCIgJiYKKwljaGVja19jb25maWcgbWFzdGVyICIkdXJsIiBIRUFEICYmCisJY2hlY2tfY29uZmlnX21pc3Npbmcgb3RoZXIgJiYKKwljaGVja19jb25maWdfbWlzc2luZyBvdGhlcjIKKycKKworIyB0ZXN0cyBmb3IgcHVsbCAtLXNldC11cHN0cmVhbQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBiYXJlIHBhcmVudCBwdWxsJyAnCisJZ2l0IHJlbW90ZSBybSB1cHN0cmVhbSAmJgorCWVuc3VyZV9mcmVzaF91cHN0cmVhbSAmJgorCWdpdCByZW1vdGUgYWRkIHVwc3RyZWFtIHBhcmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb21taXQgb24gbWFzdGVyIGFuZCBvdGhlciBwdWxsJyAnCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwlnaXQgcHVzaCAtLXRhZ3MgdXBzdHJlYW0gbWFzdGVyICYmCisJdGVzdF9jb21taXQgZm91ciAmJgorCWdpdCBwdXNoIHVwc3RyZWFtIG90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1zZXQtdXBzdHJlYW0gdXBzdHJlYW0gbWFzdGVyIHNldHMgYnJhbmNoIG1hc3RlciBidXQgbm90IG90aGVyJyAnCisJY2xlYXJfY29uZmlnIG1hc3RlciBvdGhlciAmJgorCWdpdCBwdWxsIC0tc2V0LXVwc3RyZWFtIHVwc3RyZWFtIG1hc3RlciAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIgdXBzdHJlYW0gcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwljaGVja19jb25maWdfbWlzc2luZyBvdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tc2V0LXVwc3RyZWFtIG1hc3RlcjpvdGhlcjIgZG9lcyBub3Qgc2V0IHRoZSBicmFuY2ggb3RoZXIyJyAnCisJY2xlYXJfY29uZmlnIG90aGVyMiAmJgorCWdpdCBwdWxsIC0tc2V0LXVwc3RyZWFtIHVwc3RyZWFtIG1hc3RlcjpvdGhlcjIgJiYKKwljaGVja19jb25maWdfbWlzc2luZyBvdGhlcjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXNldC11cHN0cmVhbSB1cHN0cmVhbSBvdGhlciBzZXRzIGJyYW5jaCBtYXN0ZXInICcKKwljbGVhcl9jb25maWcgbWFzdGVyIG90aGVyICYmCisJZ2l0IHB1bGwgLS1zZXQtdXBzdHJlYW0gdXBzdHJlYW0gb3RoZXIgJiYKKwljaGVja19jb25maWcgbWFzdGVyIHVwc3RyZWFtIHJlZnMvaGVhZHMvb3RoZXIgJiYKKwljaGVja19jb25maWdfbWlzc2luZyBvdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tc2V0LXVwc3RyZWFtIHVwc3RyZWFtIHRhZyBkb2VzIG5vdCBzZXQgdGhlIHRhZycgJworCWNsZWFyX2NvbmZpZyB0aHJlZSAmJgorCWdpdCBwdWxsIC0tdGFncyAtLXNldC11cHN0cmVhbSB1cHN0cmVhbSB0aHJlZSAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIHRocmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1zZXQtdXBzdHJlYW0gaHR0cDovL25vc3VjaGRvbWFpbi5leGFtcGxlLmNvbSBmYWlscyB3aXRoIGludmFsaWQgdXJsJyAnCisJIyBtYXN0ZXIgZXhwbGljaXRseSBub3QgY2xlYXJlZCwgd2UgY2hlY2sgdGhhdCBpdCBpcyBub3QgdG91Y2hlZCBmcm9tIHByZXZpb3VzIHZhbHVlCisJY2xlYXJfY29uZmlnIG90aGVyIG90aGVyMiB0aHJlZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tc2V0LXVwc3RyZWFtIGh0dHA6Ly9ub3N1Y2hkb21haW4uZXhhbXBsZS5jb20gJiYKKwljaGVja19jb25maWcgbWFzdGVyIHVwc3RyZWFtIHJlZnMvaGVhZHMvb3RoZXIgJiYKKwljaGVja19jb25maWdfbWlzc2luZyBvdGhlciAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIG90aGVyMiAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIHRocmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1zZXQtdXBzdHJlYW0gdXBzdHJlYW0gSEVBRCBzZXRzIGJyYW5jaCBIRUFEJyAnCisJY2xlYXJfY29uZmlnIG1hc3RlciBvdGhlciAmJgorCWdpdCBwdWxsIC0tc2V0LXVwc3RyZWFtIHVwc3RyZWFtIEhFQUQgJiYKKwljaGVja19jb25maWcgbWFzdGVyIHVwc3RyZWFtIEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwlnaXQgcHVsbCAtLXNldC11cHN0cmVhbSB1cHN0cmVhbSBIRUFEICYmCisJY2hlY2tfY29uZmlnIG90aGVyIHVwc3RyZWFtIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXNldC11cHN0cmVhbSB1cHN0cmVhbSB3aXRoIG1vcmUgdGhhbiBvbmUgYnJhbmNoIGRvZXMgbm90aGluZycgJworCWNsZWFyX2NvbmZpZyBtYXN0ZXIgdGhyZWUgJiYKKwlnaXQgcHVsbCAtLXNldC11cHN0cmVhbSB1cHN0cmVhbSBtYXN0ZXIgdGhyZWUgJiYKKwljaGVja19jb25maWdfbWlzc2luZyBtYXN0ZXIgJiYKKwljaGVja19jb25maWdfbWlzc2luZyB0aHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tc2V0LXVwc3RyZWFtIHdpdGggdmFsaWQgVVJMIHNldHMgdXBzdHJlYW0gdG8gVVJMJyAnCisJY2xlYXJfY29uZmlnIG1hc3RlciBvdGhlciBvdGhlcjIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdXJsPSJmaWxlOi8vJyIkUFdEIiciICYmCisJZ2l0IHB1bGwgLS1zZXQtdXBzdHJlYW0gIiR1cmwiICYmCisJY2hlY2tfY29uZmlnIG1hc3RlciAiJHVybCIgSEVBRCAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIG90aGVyICYmCisJY2hlY2tfY29uZmlnX21pc3Npbmcgb3RoZXIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1zZXQtdXBzdHJlYW0gd2l0aCB2YWxpZCBVUkwgYW5kIGJyYW5jaCBzZXRzIGJyYW5jaCcgJworCWNsZWFyX2NvbmZpZyBtYXN0ZXIgb3RoZXIgb3RoZXIyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXVybD0iZmlsZTovLyciJFBXRCInIiAmJgorCWdpdCBwdWxsIC0tc2V0LXVwc3RyZWFtICIkdXJsIiBtYXN0ZXIgJiYKKwljaGVja19jb25maWcgbWFzdGVyICIkdXJsIiByZWZzL2hlYWRzL21hc3RlciAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIG90aGVyICYmCisJY2hlY2tfY29uZmlnX21pc3Npbmcgb3RoZXIyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU2MC1odHRwLWJhY2tlbmQtbm9zZXJ2ZXIuc2ggYi90L3Q1NTYwLWh0dHAtYmFja2VuZC1ub3NlcnZlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZmFmY2YxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU2MC1odHRwLWJhY2tlbmQtbm9zZXJ2ZXIuc2gKQEAgLTAsMCArMSw3NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0LWh0dHAtYmFja2VuZC1ub3NlcnZlcicKKy4gLi90ZXN0LWxpYi5zaAorCitIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEg9IiRUUkFTSF9ESVJFQ1RPUlkiCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgR1JFUF9TVFJJUFNfQ1IKK3RoZW4KKwlHUkVQX09QVElPTlM9LVUKKwlleHBvcnQgR1JFUF9PUFRJT05TCitmaQorCitydW5fYmFja2VuZCgpIHsKKwllY2hvICIkMiIgfAorCVFVRVJZX1NUUklORz0iJHsxIypbP119IiBcCisJUEFUSF9UUkFOU0xBVEVEPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRILyR7MSUlWz9dKn0iIFwKKwlnaXQgaHR0cC1iYWNrZW5kID5hY3Qub3V0IDI+YWN0LmVycgorfQorCitHRVQoKSB7CisJUkVRVUVTVF9NRVRIT0Q9IkdFVCIgJiYgZXhwb3J0IFJFUVVFU1RfTUVUSE9EICYmCisJcnVuX2JhY2tlbmQgIi9yZXBvLmdpdC8kMSIgJiYKKwlzYW5lX3Vuc2V0IFJFUVVFU1RfTUVUSE9EICYmCisJaWYgISBncmVwICJTdGF0dXMiIGFjdC5vdXQgPmFjdAorCXRoZW4KKwkJcHJpbnRmICJTdGF0dXM6IDIwMCBPS1xyXG4iID5hY3QKKwlmaQorCXByaW50ZiAiU3RhdHVzOiAkMlxyXG4iID5leHAgJiYKKwl0ZXN0X2NtcCBleHAgYWN0Cit9CisKK1BPU1QoKSB7CisJUkVRVUVTVF9NRVRIT0Q9IlBPU1QiICYmIGV4cG9ydCBSRVFVRVNUX01FVEhPRCAmJgorCUNPTlRFTlRfVFlQRT0iYXBwbGljYXRpb24veC0kMS1yZXF1ZXN0IiAmJiBleHBvcnQgQ09OVEVOVF9UWVBFICYmCisJcnVuX2JhY2tlbmQgIi9yZXBvLmdpdC8kMSIgIiQyIiAmJgorCXNhbmVfdW5zZXQgUkVRVUVTVF9NRVRIT0QgJiYKKwlzYW5lX3Vuc2V0IENPTlRFTlRfVFlQRSAmJgorCWlmICEgZ3JlcCAiU3RhdHVzIiBhY3Qub3V0ID5hY3QKKwl0aGVuCisJCXByaW50ZiAiU3RhdHVzOiAyMDAgT0tcclxuIiA+YWN0CisJZmkKKwlwcmludGYgIlN0YXR1czogJDNcclxuIiA+ZXhwICYmCisJdGVzdF9jbXAgZXhwIGFjdAorfQorCisuICIkVEVTVF9ESVJFQ1RPUlkiL3Q1NTZ4X2NvbW1vbgorCitleHBlY3RfYWxpYXNlZCgpIHsKKwlSRVFVRVNUX01FVEhPRD0iR0VUIiAmJiBleHBvcnQgUkVRVUVTVF9NRVRIT0QgJiYKKwlpZiB0ZXN0ICQxID0gMDsgdGhlbgorCQlydW5fYmFja2VuZCAiJDIiCisJZWxzZQorCQlydW5fYmFja2VuZCAiJDIiICYmCisJCWVjaG8gImZhdGFsOiAnJDInOiBhbGlhc2VkIiA+ZXhwLmVyciAmJgorCQl0ZXN0X2NtcCBleHAuZXJyIGFjdC5lcnIKKwlmaQorCXVuc2V0IFJFUVVFU1RfTUVUSE9ECit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAtYmFja2VuZCBibG9ja3MgYmFkIFBBVEhfSU5GTycgJworCWNvbmZpZyBodHRwLmdldGFueWZpbGUgdHJ1ZSAmJgorCisJZXhwZWN0X2FsaWFzZWQgMCAvcmVwby5naXQvSEVBRCAmJgorCisJZXhwZWN0X2FsaWFzZWQgMSAvcmVwby5naXQvLi4vSEVBRCAmJgorCWV4cGVjdF9hbGlhc2VkIDEgLy4uL2V0Yy9wYXNzd2QgJiYKKwlleHBlY3RfYWxpYXNlZCAxIC4uL2V0Yy9wYXNzd2QgJiYKKwlleHBlY3RfYWxpYXNlZCAxIC9ldGMvL3Bhc3N3ZCAmJgorCWV4cGVjdF9hbGlhc2VkIDEgL2V0Yy8uL3Bhc3N3ZCAmJgorCWV4cGVjdF9hbGlhc2VkIDEgLy9kb21haW4vZGF0YS50eHQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTYxLWh0dHAtYmFja2VuZC5zaCBiL3QvdDU1NjEtaHR0cC1iYWNrZW5kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlYjAyOTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTYxLWh0dHAtYmFja2VuZC5zaApAQCAtMCwwICsxLDEzNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0LWh0dHAtYmFja2VuZCcKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIENVUkw7IHRoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgcmF3IGh0dHAtYmFja2VuZCB0ZXN0cywgY3VybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKworc3RhcnRfaHR0cGQKKworR0VUKCkgeworCWN1cmwgLS1pbmNsdWRlICIkSFRUUERfVVJMLyRTTUFSVC9yZXBvLmdpdC8kMSIgPm91dCAmJgorCXRyICdcMDE1JyBRIDxvdXQgfAorCXNlZCAnCisJCXMvUSQvLworCQkxcQorCScgPmFjdCAmJgorCWVjaG8gIkhUVFAvMS4xICQyIiA+ZXhwICYmCisJdGVzdF9jbXAgZXhwIGFjdAorfQorCitQT1NUKCkgeworCWN1cmwgLS1pbmNsdWRlIC0tZGF0YSAiJDIiIFwKKwktLWhlYWRlciAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LSQxLXJlcXVlc3QiIFwKKwkiJEhUVFBEX1VSTC9zbWFydC9yZXBvLmdpdC8kMSIgPm91dCAmJgorCXRyICdcMDE1JyBRIDxvdXQgfAorCXNlZCAnCisJCXMvUSQvLworCQkxcQorCScgPmFjdCAmJgorCWVjaG8gIkhUVFAvMS4xICQzIiA+ZXhwICYmCisJdGVzdF9jbXAgZXhwIGFjdAorfQorCisuICIkVEVTVF9ESVJFQ1RPUlkiL3Q1NTZ4X2NvbW1vbgorCitncmVwICdeW14jXScgPmV4cCA8PEVPRgorCisjIyMgIHJlZnMvaGVhZHMvbWFzdGVyCisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIEhUVFAvMS4xIDQwNCAtCisKKyMjIyAgZ2V0YW55ZmlsZSBkZWZhdWx0CisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L0hFQUQgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnMgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vcGFja3MgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBIVFRQLzEuMSAyMDAgLQorR0VUICAvc21hcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcyBIVFRQLzEuMSAyMDAgLQorR0VUICAvc21hcnQvcmVwby5naXQvJExPT1NFX1VSTCBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRQQUNLX1VSTCBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRJRFhfVVJMIEhUVFAvMS4xIDIwMAorCisjIyMgIG5vIGdpdC1kYWVtb24tZXhwb3J0LW9rCisjIyMKK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L0hFQUQgSFRUUC8xLjEgNDA0IC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L2luZm8vcmVmcyBIVFRQLzEuMSA0MDQgLQorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL3BhY2tzIEhUVFAvMS4xIDQwNCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBIVFRQLzEuMSA0MDQgLQorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcyBIVFRQLzEuMSA0MDQgLQorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvJExPT1NFX1VSTCBIVFRQLzEuMSA0MDQgLQorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvJFBBQ0tfVVJMIEhUVFAvMS4xIDQwNCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC8kSURYX1VSTCBIVFRQLzEuMSA0MDQgLQorCisjIyMgIGdpdC1kYWVtb24tZXhwb3J0LW9rCisjIyMKK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L0hFQUQgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9pbmZvL3JlZnMgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vcGFja3MgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBIVFRQLzEuMSAyMDAgLQorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcyBIVFRQLzEuMSAyMDAgLQorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvJExPT1NFX1VSTCBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0LyRQQUNLX1VSTCBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0LyRJRFhfVVJMIEhUVFAvMS4xIDIwMAorCisjIyMgIGdldGFueWZpbGUgdHJ1ZQorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9IRUFEIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL3BhY2tzIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgSFRUUC8xLjEgMjAwIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMgSFRUUC8xLjEgMjAwIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRMT09TRV9VUkwgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kUEFDS19VUkwgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kSURYX1VSTCBIVFRQLzEuMSAyMDAKKworIyMjICBnZXRhbnlmaWxlIGZhbHNlCisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L0hFQUQgSFRUUC8xLjEgNDAzIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcyBIVFRQLzEuMSA0MDMgLQorR0VUICAvc21hcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL3BhY2tzIEhUVFAvMS4xIDQwMyAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBIVFRQLzEuMSA0MDMgLQorR0VUICAvc21hcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcyBIVFRQLzEuMSA0MDMgLQorR0VUICAvc21hcnQvcmVwby5naXQvJExPT1NFX1VSTCBIVFRQLzEuMSA0MDMgLQorR0VUICAvc21hcnQvcmVwby5naXQvJFBBQ0tfVVJMIEhUVFAvMS4xIDQwMyAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kSURYX1VSTCBIVFRQLzEuMSA0MDMgLQorCisjIyMgIHVwbG9hZHBhY2sgZGVmYXVsdAorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC9yZXBvLmdpdC9naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwIC0KKworIyMjICB1cGxvYWRwYWNrIHRydWUKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDIwMAorUE9TVCAvc21hcnQvcmVwby5naXQvZ2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDIwMCAtCisKKyMjIyAgdXBsb2FkcGFjayBmYWxzZQorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgNDAzIC0KK1BPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMSA0MDMgLQorCisjIyMgIHJlY2VpdmVwYWNrIGRlZmF1bHQKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSA0MDMgLQorUE9TVCAvc21hcnQvcmVwby5naXQvZ2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSA0MDMgLQorCisjIyMgIHJlY2VpdmVwYWNrIHRydWUKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwIC0KKworIyMjICByZWNlaXZlcGFjayBmYWxzZQorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDQwMyAtCitQT1NUIC9zbWFydC9yZXBvLmdpdC9naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDQwMyAtCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlcnZlciByZXF1ZXN0IGxvZyBtYXRjaGVzIHRlc3QgcmVzdWx0cycgJworCWNoZWNrX2FjY2Vzc19sb2cgZXhwCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU2Mi1odHRwLWJhY2tlbmQtY29udGVudC1sZW5ndGguc2ggYi90L3Q1NTYyLWh0dHAtYmFja2VuZC1jb250ZW50LWxlbmd0aC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZjRhYzcxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU2Mi1odHRwLWJhY2tlbmQtY29udGVudC1sZW5ndGguc2gKQEAgLTAsMCArMSwxNzMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdC1odHRwLWJhY2tlbmQgcmVzcGVjdHMgQ09OVEVOVF9MRU5HVEgnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9sYXp5X3ByZXJlcSBHWklQICdnemlwIC0tdmVyc2lvbicKKwordmVyaWZ5X2h0dHBfcmVzdWx0KCkgeworCSMgc29tZSBmYXRhbCBlcnJvcnMgc3RpbGwgcHJvZHVjZSBzdGF0dXMgMjAwCisJIyBzbyBjaGVjayBpZiB0aGVyZSBpcyB0aGUgZXJyb3IgbWVzc2FnZQorCWlmIGdyZXAgJ2ZhdGFsOicgYWN0LmVyci4kdGVzdF9jb3VudAorCXRoZW4KKwkJcmV0dXJuIDEKKwlmaQorCisJaWYgISBncmVwICJTdGF0dXMiIGFjdC5vdXQuJHRlc3RfY291bnQgPmFjdAorCXRoZW4KKwkJcHJpbnRmICJTdGF0dXM6IDIwMCBPS1xyXG4iID5hY3QKKwlmaQorCXByaW50ZiAiU3RhdHVzOiAkMVxyXG4iID5leHAgJiYKKwl0ZXN0X2NtcCBleHAgYWN0Cit9CisKK3Rlc3RfaHR0cF9lbnYoKSB7CisJaGFuZGxlcl90eXBlPSIkMSIKKwlyZXF1ZXN0X2JvZHk9IiQyIgorCXNoaWZ0CisJZW52IFwKKwkJQ09OVEVOVF9UWVBFPSJhcHBsaWNhdGlvbi94LWdpdC0kaGFuZGxlcl90eXBlLXBhY2stcmVxdWVzdCIgXAorCQlRVUVSWV9TVFJJTkc9Ii9yZXBvLmdpdC9naXQtJGhhbmRsZXJfdHlwZS1wYWNrIiBcCisJCVBBVEhfVFJBTlNMQVRFRD0iJFBXRC8uZ2l0L2dpdC0kaGFuZGxlcl90eXBlLXBhY2siIFwKKwkJR0lUX0hUVFBfRVhQT1JUX0FMTD1UUlVFIFwKKwkJUkVRVUVTVF9NRVRIT0Q9UE9TVCBcCisJCSIkUEVSTF9QQVRIIiBcCisJCSIkVEVTVF9ESVJFQ1RPUlkiL3Q1NTYyL2ludm9rZS13aXRoLWNvbnRlbnQtbGVuZ3RoLnBsIFwKKwkJICAgICIkcmVxdWVzdF9ib2R5IiBnaXQgaHR0cC1iYWNrZW5kID5hY3Qub3V0LiR0ZXN0X2NvdW50IDI+YWN0LmVyci4kdGVzdF9jb3VudAorfQorCitzc2l6ZV9iMTAwZG90cygpIHsKKwkjIGhhcmRjb2RlZCAoKHNpemVfdCkgU1NJWkVfTUFYKSArIDEKKwljYXNlICIkKGJ1aWxkX29wdGlvbiBzaXplb2Ytc2l6ZV90KSIgaW4KKwk4KSBlY2hvIDkyMjMzNzIwMzY4NTQ3NzU4MDg7OworCTQpIGVjaG8gMjE0NzQ4MzY0ODs7CisJKikgZGllICJVbmV4cGVjdGVkIHNzaXplX3Qgc2l6ZTogJChidWlsZF9vcHRpb24gc2l6ZW9mLXNpemVfdCkiOzsKKwllc2FjCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJSFRUUF9DT05URU5UX0VOQ09ESU5HPSJpZGVudGl0eSIgJiYKKwlleHBvcnQgSFRUUF9DT05URU5UX0VOQ09ESU5HICYmCisJZ2l0IGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwl0ZXN0X2NvbW1pdCBjMCAmJgorCXRlc3RfY29tbWl0IGMxICYmCisJaGFzaF9oZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWhhc2hfcHJldj0kKGdpdCByZXYtcGFyc2UgSEVBRH4xKSAmJgorCXsKKwkJcGFja2V0aXplICJ3YW50ICRoYXNoX2hlYWQiICYmCisJCXByaW50ZiAwMDAwICYmCisJCXBhY2tldGl6ZSAiaGF2ZSAkaGFzaF9wcmV2IiAmJgorCQlwYWNrZXRpemUgImRvbmUiCisJfSA+ZmV0Y2hfYm9keSAmJgorCXRlc3RfY29weV9ieXRlcyAxMCA8ZmV0Y2hfYm9keSA+ZmV0Y2hfYm9keS50cnVuYyAmJgorCWhhc2hfbmV4dD0kKGdpdCBjb21taXQtdHJlZSAtcCBIRUFEIC1tIG5leHQgSEVBRF57dHJlZX0pICYmCisJeworCQlwcmludGYgIiVzICVzIHJlZnMvaGVhZHMvbmV3YnJhbmNoXFwwcmVwb3J0LXN0YXR1c1xcbiIgXAorCQkJIiRaRVJPX09JRCIgIiRoYXNoX25leHQiIHwgcGFja2V0aXplICYmCisJCXByaW50ZiAwMDAwICYmCisJCWVjaG8gIiRoYXNoX25leHQiIHwgZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dAorCX0gPnB1c2hfYm9keSAmJgorCXRlc3RfY29weV9ieXRlcyAxMCA8cHVzaF9ib2R5ID5wdXNoX2JvZHkudHJ1bmMgJiYKKwk6ID5lbXB0eV9ib2R5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1pJUCAnc2V0dXAsIGNvbXByZXNzaW9uIHJlbGF0ZWQnICcKKwlnemlwIC1jIGZldGNoX2JvZHkgPmZldGNoX2JvZHkuZ3ogJiYKKwl0ZXN0X2NvcHlfYnl0ZXMgMTAgPGZldGNoX2JvZHkuZ3ogPmZldGNoX2JvZHkuZ3oudHJ1bmMgJiYKKwlnemlwIC1jIHB1c2hfYm9keSA+cHVzaF9ib2R5Lmd6ICYmCisJdGVzdF9jb3B5X2J5dGVzIDEwIDxwdXNoX2JvZHkuZ3ogPnB1c2hfYm9keS5nei50cnVuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBwbGFpbicgJworCXRlc3RfaHR0cF9lbnYgdXBsb2FkIGZldGNoX2JvZHkgJiYKKwl2ZXJpZnlfaHR0cF9yZXN1bHQgIjIwMCBPSyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggcGxhaW4gdHJ1bmNhdGVkJyAnCisJdGVzdF9odHRwX2VudiB1cGxvYWQgZmV0Y2hfYm9keS50cnVuYyAmJgorCSEgdmVyaWZ5X2h0dHBfcmVzdWx0ICIyMDAgT0siCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHBsYWluIGVtcHR5JyAnCisJdGVzdF9odHRwX2VudiB1cGxvYWQgZW1wdHlfYm9keSAmJgorCSEgdmVyaWZ5X2h0dHBfcmVzdWx0ICIyMDAgT0siCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1pJUCAnZmV0Y2ggZ3ppcHBlZCcgJworCXRlc3RfZW52IEhUVFBfQ09OVEVOVF9FTkNPRElORz0iZ3ppcCIgdGVzdF9odHRwX2VudiB1cGxvYWQgZmV0Y2hfYm9keS5neiAmJgorCXZlcmlmeV9odHRwX3Jlc3VsdCAiMjAwIE9LIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ2ZldGNoIGd6aXBwZWQgdHJ1bmNhdGVkJyAnCisJdGVzdF9lbnYgSFRUUF9DT05URU5UX0VOQ09ESU5HPSJnemlwIiB0ZXN0X2h0dHBfZW52IHVwbG9hZCBmZXRjaF9ib2R5Lmd6LnRydW5jICYmCisJISB2ZXJpZnlfaHR0cF9yZXN1bHQgIjIwMCBPSyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdmZXRjaCBnemlwcGVkIGVtcHR5JyAnCisJdGVzdF9lbnYgSFRUUF9DT05URU5UX0VOQ09ESU5HPSJnemlwIiB0ZXN0X2h0dHBfZW52IHVwbG9hZCBlbXB0eV9ib2R5ICYmCisJISB2ZXJpZnlfaHR0cF9yZXN1bHQgIjIwMCBPSyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdwdXNoIHBsYWluJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC1EIG5ld2JyYW5jaCIgJiYKKwl0ZXN0X2h0dHBfZW52IHJlY2VpdmUgcHVzaF9ib2R5ICYmCisJdmVyaWZ5X2h0dHBfcmVzdWx0ICIyMDAgT0siICYmCisJZ2l0IHJldi1wYXJzZSBuZXdicmFuY2ggPmFjdC5oZWFkICYmCisJZWNobyAiJGhhc2hfbmV4dCIgPmV4cC5oZWFkICYmCisJdGVzdF9jbXAgYWN0LmhlYWQgZXhwLmhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBwbGFpbiB0cnVuY2F0ZWQnICcKKwl0ZXN0X2h0dHBfZW52IHJlY2VpdmUgcHVzaF9ib2R5LnRydW5jICYmCisJISB2ZXJpZnlfaHR0cF9yZXN1bHQgIjIwMCBPSyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBwbGFpbiBlbXB0eScgJworCXRlc3RfaHR0cF9lbnYgcmVjZWl2ZSBlbXB0eV9ib2R5ICYmCisJISB2ZXJpZnlfaHR0cF9yZXN1bHQgIjIwMCBPSyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdwdXNoIGd6aXBwZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLUQgbmV3YnJhbmNoIiAmJgorCXRlc3RfZW52IEhUVFBfQ09OVEVOVF9FTkNPRElORz0iZ3ppcCIgdGVzdF9odHRwX2VudiByZWNlaXZlIHB1c2hfYm9keS5neiAmJgorCXZlcmlmeV9odHRwX3Jlc3VsdCAiMjAwIE9LIiAmJgorCWdpdCByZXYtcGFyc2UgbmV3YnJhbmNoID5hY3QuaGVhZCAmJgorCWVjaG8gIiRoYXNoX25leHQiID5leHAuaGVhZCAmJgorCXRlc3RfY21wIGFjdC5oZWFkIGV4cC5oZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1pJUCAncHVzaCBnemlwcGVkIHRydW5jYXRlZCcgJworCXRlc3RfZW52IEhUVFBfQ09OVEVOVF9FTkNPRElORz0iZ3ppcCIgdGVzdF9odHRwX2VudiByZWNlaXZlIHB1c2hfYm9keS5nei50cnVuYyAmJgorCSEgdmVyaWZ5X2h0dHBfcmVzdWx0ICIyMDAgT0siCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1pJUCAncHVzaCBnemlwcGVkIGVtcHR5JyAnCisJdGVzdF9lbnYgSFRUUF9DT05URU5UX0VOQ09ESU5HPSJnemlwIiB0ZXN0X2h0dHBfZW52IHJlY2VpdmUgZW1wdHlfYm9keSAmJgorCSEgdmVyaWZ5X2h0dHBfcmVzdWx0ICIyMDAgT0siCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NPTlRFTlRfTEVOR1RIIG92ZXJmbG93IHNzaXRlX3QnICcKKwlOT1RfRklUX0lOX1NTSVpFPSQoc3NpemVfYjEwMGRvdHMpICYmCisJZW52IFwKKwkJQ09OVEVOVF9UWVBFPWFwcGxpY2F0aW9uL3gtZ2l0LXVwbG9hZC1wYWNrLXJlcXVlc3QgXAorCQlRVUVSWV9TVFJJTkc9L3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBcCisJCVBBVEhfVFJBTlNMQVRFRD0iJFBXRCIvLmdpdC9naXQtdXBsb2FkLXBhY2sgXAorCQlHSVRfSFRUUF9FWFBPUlRfQUxMPVRSVUUgXAorCQlSRVFVRVNUX01FVEhPRD1QT1NUIFwKKwkJQ09OVEVOVF9MRU5HVEg9IiROT1RfRklUX0lOX1NTSVpFIiBcCisJCWdpdCBodHRwLWJhY2tlbmQgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6LipDT05URU5UX0xFTkdUSCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IENPTlRFTlRfTEVOR1RIJyAnCisJZW52IFwKKwkJUVVFUllfU1RSSU5HPSJzZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2siIFwKKwkJUEFUSF9UUkFOU0xBVEVEPSIkUFdEIi8uZ2l0L2luZm8vcmVmcyBcCisJCUdJVF9IVFRQX0VYUE9SVF9BTEw9VFJVRSBcCisJCVJFUVVFU1RfTUVUSE9EPUdFVCBcCisJCUNPTlRFTlRfTEVOR1RIPSIiIFwKKwkJZ2l0IGh0dHAtYmFja2VuZCA8ZW1wdHlfYm9keSA+YWN0Lm91dC4kdGVzdF9jb3VudCAyPmFjdC5lcnIuJHRlc3RfY291bnQgJiYKKwl2ZXJpZnlfaHR0cF9yZXN1bHQgIjIwMCBPSyIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTYyL2ludm9rZS13aXRoLWNvbnRlbnQtbGVuZ3RoLnBsIGIvdC90NTU2Mi9pbnZva2Utd2l0aC1jb250ZW50LWxlbmd0aC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTQzNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTU2Mi9pbnZva2Utd2l0aC1jb250ZW50LWxlbmd0aC5wbApAQCAtMCwwICsxLDM2IEBACit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCitteSAkYm9keV9maWxlbmFtZSA9ICRBUkdWWzBdOworbXkgQGNvbW1hbmQgPSBAQVJHVlsxIC4uICQjQVJHVl07CisKKyMgcmVhZCBkYXRhCitteSAkYm9keV9zaXplID0gLXMgJGJvZHlfZmlsZW5hbWU7CiskRU5WeyJDT05URU5UX0xFTkdUSCJ9ID0gJGJvZHlfc2l6ZTsKK29wZW4obXkgJGJvZHlfZmgsICI8IiwgJGJvZHlfZmlsZW5hbWUpIG9yIGRpZSAiQ2Fubm90IG9wZW4gJGJvZHlfZmlsZW5hbWU6ICQhIjsKK215ICRib2R5X2RhdGE7CitkZWZpbmVkIHJlYWQoJGJvZHlfZmgsICRib2R5X2RhdGEsICRib2R5X3NpemUpIG9yIGRpZSAiQ2Fubm90IHJlYWQgJGJvZHlfZmlsZW5hbWU6ICQhIjsKK2Nsb3NlKCRib2R5X2ZoKTsKKworbXkgJGV4aXRlZCA9IDA7CiskU0lHeyJDSExEIn0gPSBzdWIgeworICAgICAgICAkZXhpdGVkID0gMTsKK307CisKKyMgd3JpdGUgZGF0YQorbXkgJHBpZCA9IG9wZW4obXkgJG91dCwgInwtIiwgQGNvbW1hbmQpOworeworICAgICAgICAjIGRpc2FibGUgYnVmZmVyaW5nIGF0ICRvdXQKKyAgICAgICAgbXkgJG9sZF9zZWxlY3RlZCA9IHNlbGVjdDsKKyAgICAgICAgc2VsZWN0ICRvdXQ7CisgICAgICAgICR8ID0gMTsKKyAgICAgICAgc2VsZWN0ICRvbGRfc2VsZWN0ZWQ7Cit9CitwcmludCAkb3V0ICRib2R5X2RhdGEgb3IgZGllICJDYW5ub3Qgd3JpdGUgZGF0YTogJCEiOworCitzbGVlcCA2MDsgIyBpcyBpbnRlcnJ1cHRlZCBieSBTSUdDSExECitpZiAoISRleGl0ZWQpIHsKKyAgICAgICAgY2xvc2UoJG91dCk7CisgICAgICAgIGRpZSAiQ29tbWFuZCBkaWQgbm90IGV4aXQgYWZ0ZXIgcmVhZGluZyB3aG9sZSBib2R5IjsKK30KZGlmZiAtLWdpdCBhL3QvdDU1NnhfY29tbW9uIGIvdC90NTU2eF9jb21tb24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzU5ZmNmZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NnhfY29tbW9uCkBAIC0wLDAgKzEsMTEwIEBACisjIS9iaW4vc2gKKworZmluZF9maWxlKCkgeworCWNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCWZpbmQgJDEgLXR5cGUgZiB8CisJc2VkIC1lIDFxCit9CisKK2NvbmZpZygpIHsKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiBjb25maWcgJDEgJDIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisKKwlta2RpciAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJIGdpdCAtLWJhcmUgaW5pdCAmJgorCSA6ID5vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCSA6ID5vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzCisJKSAmJgorCWdpdCByZW1vdGUgYWRkIHB1YmxpYyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm1hc3RlciAmJgorCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSBnaXQgcmVwYWNrIC1hIC1kCisJKSAmJgorCisJZWNobyBvdGhlciA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gdHdvICYmCisJZ2l0IHB1c2ggcHVibGljIG1hc3RlcjptYXN0ZXIgJiYKKworCUxPT1NFX1VSTD0kKGZpbmRfZmlsZSBvYmplY3RzLz8/KSAmJgorCVBBQ0tfVVJMPSQoZmluZF9maWxlIG9iamVjdHMvcGFjay8qLnBhY2spICYmCisJSURYX1VSTD0kKGZpbmRfZmlsZSBvYmplY3RzL3BhY2svKi5pZHgpCisnCisKK2dldF9zdGF0aWNfZmlsZXMoKSB7CisJR0VUIEhFQUQgIiQxIiAmJgorCUdFVCBpbmZvL3JlZnMgIiQxIiAmJgorCUdFVCBvYmplY3RzL2luZm8vcGFja3MgIiQxIiAmJgorCUdFVCBvYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAiJDEiICYmCisJR0VUIG9iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMgIiQxIiAmJgorCUdFVCAkTE9PU0VfVVJMICIkMSIgJiYKKwlHRVQgJFBBQ0tfVVJMICIkMSIgJiYKKwlHRVQgJElEWF9VUkwgIiQxIgorfQorCitTTUFSVD1zbWFydAorR0lUX0hUVFBfRVhQT1JUX0FMTD0xICYmIGV4cG9ydCBHSVRfSFRUUF9FWFBPUlRfQUxMCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXJlY3QgcmVmcy9oZWFkcy9tYXN0ZXIgbm90IGZvdW5kJyAnCisJR0VUIHJlZnMvaGVhZHMvbWFzdGVyICI0MDQgTm90IEZvdW5kIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdGljIGZpbGUgaXMgb2snICcKKwlnZXRfc3RhdGljX2ZpbGVzICIyMDAgT0siCisnCitTTUFSVD1zbWFydF9ub2V4cG9ydAordW5zZXQgR0lUX0hUVFBfRVhQT1JUX0FMTAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZXhwb3J0IGJ5IGRlZmF1bHQnICcKKwlnZXRfc3RhdGljX2ZpbGVzICI0MDQgTm90IEZvdW5kIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwb3J0IGlmIGdpdC1kYWVtb24tZXhwb3J0LW9rJyAnCisgICAgICAgIChjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkgdG91Y2ggZ2l0LWRhZW1vbi1leHBvcnQtb2sKKwkpICYmCisgICAgICAgIGdldF9zdGF0aWNfZmlsZXMgIjIwMCBPSyIKKycKK1NNQVJUPXNtYXJ0CitHSVRfSFRUUF9FWFBPUlRfQUxMPTEgJiYgZXhwb3J0IEdJVF9IVFRQX0VYUE9SVF9BTEwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXRpYyBmaWxlIGlmIGh0dHAuZ2V0YW55ZmlsZSB0cnVlIGlzIG9rJyAnCisJY29uZmlnIGh0dHAuZ2V0YW55ZmlsZSB0cnVlICYmCisJZ2V0X3N0YXRpY19maWxlcyAiMjAwIE9LIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdGljIGZpbGUgaWYgaHR0cC5nZXRhbnlmaWxlIGZhbHNlIGZhaWxzJyAnCisJY29uZmlnIGh0dHAuZ2V0YW55ZmlsZSBmYWxzZSAmJgorCWdldF9zdGF0aWNfZmlsZXMgIjQwMyBGb3JiaWRkZW4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAudXBsb2FkcGFjayBkZWZhdWx0IGVuYWJsZWQnICcKKwlHRVQgaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrICIyMDAgT0siICAmJgorCVBPU1QgZ2l0LXVwbG9hZC1wYWNrIDAwMDAgIjIwMCBPSyIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAudXBsb2FkcGFjayB0cnVlJyAnCisJY29uZmlnIGh0dHAudXBsb2FkcGFjayB0cnVlICYmCisJR0VUIGluZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayAiMjAwIE9LIiAmJgorCVBPU1QgZ2l0LXVwbG9hZC1wYWNrIDAwMDAgIjIwMCBPSyIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAudXBsb2FkcGFjayBmYWxzZScgJworCWNvbmZpZyBodHRwLnVwbG9hZHBhY2sgZmFsc2UgJiYKKwlHRVQgaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrICI0MDMgRm9yYmlkZGVuIiAmJgorCVBPU1QgZ2l0LXVwbG9hZC1wYWNrIDAwMDAgIjQwMyBGb3JiaWRkZW4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAucmVjZWl2ZXBhY2sgZGVmYXVsdCBkaXNhYmxlZCcgJworCUdFVCBpbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrICI0MDMgRm9yYmlkZGVuIiAgJiYKKwlQT1NUIGdpdC1yZWNlaXZlLXBhY2sgMDAwMCAiNDAzIEZvcmJpZGRlbiIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAucmVjZWl2ZXBhY2sgdHJ1ZScgJworCWNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwlHRVQgaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayAiMjAwIE9LIiAmJgorCVBPU1QgZ2l0LXJlY2VpdmUtcGFjayAwMDAwICIyMDAgT0siCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwLnJlY2VpdmVwYWNrIGZhbHNlJyAnCisJY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgZmFsc2UgJiYKKwlHRVQgaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayAiNDAzIEZvcmJpZGRlbiIgJiYKKwlQT1NUIGdpdC1yZWNlaXZlLXBhY2sgMDAwMCAiNDAzIEZvcmJpZGRlbiIKKycKZGlmZiAtLWdpdCBhL3QvdDU1NzAtZ2l0LWRhZW1vbi5zaCBiL3QvdDU1NzAtZ2l0LWRhZW1vbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNDQ4N2JiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU3MC1naXQtZGFlbW9uLnNoCkBAIC0wLDAgKzEsMjAyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBmZXRjaGluZyBvdmVyIGdpdCBwcm90b2NvbCcKKy4gLi90ZXN0LWxpYi5zaAorCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1naXQtZGFlbW9uLnNoCitzdGFydF9naXRfZGFlbW9uCisKK2NoZWNrX3ZlcmJvc2VfY29ubmVjdCAoKSB7CisJdGVzdF9pMThuZ3JlcCAtRiAiTG9va2luZyB1cCAxMjcuMC4wLjEgLi4uIiBzdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1GICJDb25uZWN0aW5nIHRvIDEyNy4wLjAuMSAocG9ydCAiIHN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgLUYgImRvbmUuIiBzdGRlcnIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeScgJworCWdpdCBjb25maWcgcHVzaC5kZWZhdWx0IG1hdGNoaW5nICYmCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGdpdC1hY2Nlc3NpYmxlIGJhcmUgcmVwb3NpdG9yeScgJworCW1rZGlyICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJKGNkICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJIGdpdCAtLWJhcmUgaW5pdCAmJgorCSA6ID5naXQtZGFlbW9uLWV4cG9ydC1vaworCSkgJiYKKwlnaXQgcmVtb3RlIGFkZCBwdWJsaWMgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBnaXQgcmVwb3NpdG9yeScgJworCWdpdCBjbG9uZSAtdiAiJEdJVF9EQUVNT05fVVJML3JlcG8uZ2l0IiBjbG9uZSAyPnN0ZGVyciAmJgorCWNoZWNrX3ZlcmJvc2VfY29ubmVjdCAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmUvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBjaGFuZ2VzIHZpYSBnaXQgcHJvdG9jb2wnICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0d28gJiYKKwlnaXQgcHVzaCBwdWJsaWMgJiYKKwkoY2QgY2xvbmUgJiYgZ2l0IHB1bGwgLXYpIDI+c3RkZXJyICYmCisJY2hlY2tfdmVyYm9zZV9jb25uZWN0ICYmCisJdGVzdF9jbXAgZmlsZSBjbG9uZS9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vLW9wIGZldGNoIC12IHN0ZGVyciBpcyBhcyBleHBlY3RlZCcgJworCShjZCBjbG9uZSAmJiBnaXQgZmV0Y2ggLXYpIDI+c3RkZXJyICYmCisJY2hlY2tfdmVyYm9zZV9jb25uZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vLW9wIGZldGNoIHdpdGhvdXQgIi12IiBpcyBxdWlldCcgJworCShjZCBjbG9uZSAmJiBnaXQgZmV0Y2ggMj4uLi9zdGRlcnIpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgZGV0ZWN0cyBjb3JyZWN0IEhFQUQnICcKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm90aGVyICYmCisJKGNkIGNsb25lICYmCisJIGdpdCByZW1vdGUgc2V0LWhlYWQgLWQgb3JpZ2luICYmCisJIGdpdCByZW1vdGUgc2V0LWhlYWQgLWEgb3JpZ2luICYmCisJIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEID4gb3V0cHV0ICYmCisJIGVjaG8gcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgPiBleHBlY3QgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBwYWNrIG9iamVjdHMnICcKKwljcCAtUiAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvLmdpdCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX3BhY2suZ2l0ICYmCisJKGNkICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgJiYKKwkgZ2l0IC0tYmFyZSByZXBhY2sgLWEgLWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG5vdGljZXMgY29ycnVwdCBwYWNrJyAnCisJY3AgLVIgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrLmdpdCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX2JhZDEuZ2l0ICYmCisJKGNkICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMS5naXQgJiYKKwkgcD0kKGxzIG9iamVjdHMvcGFjay9wYWNrLSoucGFjaykgJiYKKwkgY2htb2QgdSt3ICRwICYmCisJIHByaW50ZiAlMDI1NmQgMCB8IGRkIG9mPSRwIGJzPTI1NiBjb3VudD0xIHNlZWs9MSBjb252PW5vdHJ1bmMKKwkpICYmCisJbWtkaXIgcmVwb19iYWQxLmdpdCAmJgorCShjZCByZXBvX2JhZDEuZ2l0ICYmCisJIGdpdCAtLWJhcmUgaW5pdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgLS1iYXJlIGZldGNoICIkR0lUX0RBRU1PTl9VUkwvcmVwb19iYWQxLmdpdCIgJiYKKwkgdGVzdCAwID0gJChscyBvYmplY3RzL3BhY2svcGFjay0qLnBhY2sgfCB3YyAtbCkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG5vdGljZXMgY29ycnVwdCBpZHgnICcKKwljcCAtUiAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX3BhY2suZ2l0ICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMi5naXQgJiYKKwkoY2QgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19iYWQyLmdpdCAmJgorCSBybSAtZiBvYmplY3RzL3BhY2svbXVsdGktcGFjay1pbmRleCAmJgorCSBwPSQobHMgb2JqZWN0cy9wYWNrL3BhY2stKi5pZHgpICYmCisJIGNobW9kIHUrdyAkcCAmJgorCSBwcmludGYgJTAyNTZkIDAgfCBkZCBvZj0kcCBicz0yNTYgY291bnQ9MSBzZWVrPTEgY29udj1ub3RydW5jCisJKSAmJgorCW1rZGlyIHJlcG9fYmFkMi5naXQgJiYKKwkoY2QgcmVwb19iYWQyLmdpdCAmJgorCSBnaXQgLS1iYXJlIGluaXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tYmFyZSBmZXRjaCAiJEdJVF9EQUVNT05fVVJML3JlcG9fYmFkMi5naXQiICYmCisJIHRlc3QgMCA9ICQobHMgb2JqZWN0cy9wYWNrIHwgd2MgLWwpCisJKQorJworCit0ZXN0X3JlbW90ZV9lcnJvcigpCit7CisJZG9fZXhwb3J0PVllc1BsZWFzZQorCXdoaWxlIHRlc3QgJCMgLWd0IDAKKwlkbworCQljYXNlICQxIGluCisJCS14KQorCQkJc2hpZnQKKwkJCWNobW9kIC14ICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiCisJCQk7OworCQktbikKKwkJCXNoaWZ0CisJCQlkb19leHBvcnQ9CisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJZXNhYworCWRvbmUKKworCW1zZz0kMQorCXNoaWZ0CisJY21kPSQxCisJc2hpZnQKKwlyZXBvPSQxCisJc2hpZnQgfHwgZXJyb3IgImludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKKworCWlmIHRlc3QgLXggIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC8kcmVwbyIKKwl0aGVuCisJCWlmIHRlc3QgLW4gIiRkb19leHBvcnQiCisJCXRoZW4KKwkJCTogPiIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgvJHJlcG8vZ2l0LWRhZW1vbi1leHBvcnQtb2siCisJCWVsc2UKKwkJCXJtIC1mICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgvJHJlcG8vZ2l0LWRhZW1vbi1leHBvcnQtb2siCisJCWZpCisJZmkKKworCXRlc3RfbXVzdF9mYWlsIGdpdCAiJGNtZCIgIiRHSVRfREFFTU9OX1VSTC8kcmVwbyIgIiRAIiAyPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgImZhdGFsOiByZW1vdGUgZXJyb3I6ICRtc2c6IC8kcmVwbyIgb3V0cHV0ICYmCisJcmV0PSQ/CisJY2htb2QgK3ggIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIKKwkoZXhpdCAkcmV0KQorfQorCittc2c9ImFjY2VzcyBkZW5pZWQgb3IgcmVwb3NpdG9yeSBub3QgZXhwb3J0ZWQiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBub24tZXhpc3RlbnQnICJ0ZXN0X3JlbW90ZV9lcnJvciAgICAnJG1zZycgY2xvbmUgbm93aGVyZS5naXQgICAgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBkaXNhYmxlZCcgICAgICAidGVzdF9yZW1vdGVfZXJyb3IgICAgJyRtc2cnIHB1c2ggIHJlcG8uZ2l0IG1hc3RlciIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgYWNjZXNzIGRlbmllZCcgInRlc3RfcmVtb3RlX2Vycm9yIC14ICckbXNnJyBmZXRjaCByZXBvLmdpdCAgICAgICAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QgZXhwb3J0ZWQnICAgICAgICJ0ZXN0X3JlbW90ZV9lcnJvciAtbiAnJG1zZycgZmV0Y2ggcmVwby5naXQgICAgICAgIgorCitzdG9wX2dpdF9kYWVtb24KK3N0YXJ0X2dpdF9kYWVtb24gLS1pbmZvcm1hdGl2ZS1lcnJvcnMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgbm9uLWV4aXN0ZW50JyAidGVzdF9yZW1vdGVfZXJyb3IgICAgJ25vIHN1Y2ggcmVwb3NpdG9yeScgICAgICBjbG9uZSBub3doZXJlLmdpdCAgICAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGRpc2FibGVkJyAgICAgICJ0ZXN0X3JlbW90ZV9lcnJvciAgICAnc2VydmljZSBub3QgZW5hYmxlZCcgICAgIHB1c2ggIHJlcG8uZ2l0IG1hc3RlciIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgYWNjZXNzIGRlbmllZCcgInRlc3RfcmVtb3RlX2Vycm9yIC14ICdubyBzdWNoIHJlcG9zaXRvcnknICAgICAgZmV0Y2ggcmVwby5naXQgICAgICAgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IGV4cG9ydGVkJyAgICAgICAidGVzdF9yZW1vdGVfZXJyb3IgLW4gJ3JlcG9zaXRvcnkgbm90IGV4cG9ydGVkJyBmZXRjaCByZXBvLmdpdCAgICAgICAiCisKK3N0b3BfZ2l0X2RhZW1vbgorc3RhcnRfZ2l0X2RhZW1vbiAtLWludGVycG9sYXRlZC1wYXRoPSIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgvJUglRCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWNjZXNzIHJlcG8gdmlhIGludGVycG9sYXRlZCBob3N0bmFtZScgJworCXJlcG89IiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC9sb2NhbGhvc3QvaW50ZXJwLmdpdCIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgIiRyZXBvIiAmJgorCWdpdCBwdXNoICIkcmVwbyIgSEVBRCAmJgorCT4iJHJlcG8iL2dpdC1kYWVtb24tZXhwb3J0LW9rICYmCisJR0lUX09WRVJSSURFX1ZJUlRVQUxfSE9TVD1sb2NhbGhvc3QgXAorCQlnaXQgbHMtcmVtb3RlICIkR0lUX0RBRU1PTl9VUkwvaW50ZXJwLmdpdCIgJiYKKwlHSVRfT1ZFUlJJREVfVklSVFVBTF9IT1NUPUxPQ0FMSE9TVCBcCisJCWdpdCBscy1yZW1vdGUgIiRHSVRfREFFTU9OX1VSTC9pbnRlcnAuZ2l0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdob3N0bmFtZSBjYW5ub3QgYnJlYWsgb3V0IG9mIGRpcmVjdG9yeScgJworCXJlcG89IiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC8uLi9lc2NhcGUuZ2l0IiAmJgorCWdpdCBpbml0IC0tYmFyZSAiJHJlcG8iICYmCisJZ2l0IHB1c2ggIiRyZXBvIiBIRUFEICYmCisJPiIkcmVwbyIvZ2l0LWRhZW1vbi1leHBvcnQtb2sgJiYKKwl0ZXN0X211c3RfZmFpbCBcCisJCWVudiBHSVRfT1ZFUlJJREVfVklSVFVBTF9IT1NUPS4uIFwKKwkJZ2l0IGxzLXJlbW90ZSAiJEdJVF9EQUVNT05fVVJML2VzY2FwZS5naXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRkFLRU5DICdob3N0bmFtZSBpbnRlcnBvbGF0aW9uIHdvcmtzIGFmdGVyIExGLXN0cmlwcGluZycgJworCXsKKwkJcHJpbnRmICJnaXQtdXBsb2FkLXBhY2sgL2ludGVycC5naXRcblwwaG9zdD1sb2NhbGhvc3QiIHwgcGFja2V0aXplCisJCXByaW50ZiAiMDAwMCIKKwl9ID5pbnB1dCAmJgorCWZha2VfbmMgIiRHSVRfREFFTU9OX0hPU1RfUE9SVCIgPGlucHV0ID5vdXRwdXQgJiYKKwlkZXBhY2tldGl6ZSA8b3V0cHV0ID5vdXRwdXQucmF3ICYmCisKKwkjIGp1c3QgcGljayBvdXQgdGhlIHZhbHVlIG9mIG1hc3Rlciwgd2hpY2ggYXZvaWRzIGFueSBwcm90b2NvbAorCSMgcGFydGljdWxhcnMKKwlwZXJsIC1sbmUgInByaW50IFwkMSBpZiBte14oXFxTKykgcmVmcy9oZWFkcy9tYXN0ZXJ9IiA8b3V0cHV0LnJhdyA+YWN0dWFsICYmCisJZ2l0IC1DICIkcmVwbyIgcmV2LXBhcnNlIG1hc3RlciA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NzEtcHJlLXB1c2gtaG9vay5zaCBiL3QvdDU1NzEtcHJlLXB1c2gtaG9vay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYzUzZDYzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU3MS1wcmUtcHVzaC1ob29rLnNoCkBAIC0wLDAgKzEsMTI4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2sgcHJlLXB1c2ggaG9va3MnCisuIC4vdGVzdC1saWIuc2gKKworIyBTZXR1cCBob29rIHRoYXQgYWx3YXlzIHN1Y2NlZWRzCitIT09LRElSPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9ob29rcyIKK0hPT0s9IiRIT09LRElSL3ByZS1wdXNoIgorbWtkaXIgLXAgIiRIT09LRElSIgord3JpdGVfc2NyaXB0ICIkSE9PSyIgPDxFT0YKK2NhdCA+L2Rldi9udWxsCitleGl0IDAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBjb25maWcgcHVzaC5kZWZhdWx0IHVwc3RyZWFtICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlcG8xICYmCisJZ2l0IHJlbW90ZSBhZGQgcGFyZW50MSByZXBvMSAmJgorCXRlc3RfY29tbWl0IG9uZSAmJgorCWdpdCBwdXNoIHBhcmVudDEgSEVBRDpmb3JlaWduCisnCit3cml0ZV9zY3JpcHQgIiRIT09LIiA8PEVPRgorY2F0ID4vZGV2L251bGwKK2V4aXQgMQorRU9GCisKK0NPTU1JVDE9IiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKK2V4cG9ydCBDT01NSVQxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBmYWlsaW5nIGhvb2snICcKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBwYXJlbnQxIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgYnlwYXNzZXMgaG9vaycgJworCWdpdCBwdXNoIC0tbm8tdmVyaWZ5IHBhcmVudDEgSEVBRAorJworCitDT01NSVQyPSIkKGdpdCByZXYtcGFyc2UgSEVBRCkiCitleHBvcnQgQ09NTUlUMgorCit3cml0ZV9zY3JpcHQgIiRIT09LIiA8PCdFT0YnCitlY2hvICIkMSIgPmFjdHVhbAorZWNobyAiJDIiID4+YWN0dWFsCitjYXQgPj5hY3R1YWwKK0VPRgorCitjYXQgPmV4cGVjdGVkIDw8RU9GCitwYXJlbnQxCityZXBvMQorcmVmcy9oZWFkcy9tYXN0ZXIgJENPTU1JVDIgcmVmcy9oZWFkcy9mb3JlaWduICRDT01NSVQxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGhvb2snICcKKwlnaXQgcHVzaCBwYXJlbnQxIG1hc3Rlcjpmb3JlaWduICYmCisJZGlmZiBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGEgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyIHBhcmVudDEvZm9yZWlnbiAmJgorCXRlc3RfY29tbWl0IHRocmVlCisnCisKK0NPTU1JVDM9IiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKK2V4cG9ydCBDT01NSVQzCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK3BhcmVudDEKK3JlcG8xCityZWZzL2hlYWRzL290aGVyICRDT01NSVQzIHJlZnMvaGVhZHMvZm9yZWlnbiAkQ09NTUlUMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gZGVmYXVsdCcgJworCWdpdCBwdXNoICYmCisJZGlmZiBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorcGFyZW50MQorcmVwbzEKK3JlZnMvdGFncy9vbmUgJENPTU1JVDEgcmVmcy90YWdzL3RhZzEgJFpFUk9fT0lECitIRUFEfiAkQ09NTUlUMiByZWZzL2hlYWRzL3ByZXYgJFpFUk9fT0lECitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBub24tYnJhbmNoZXMnICcKKwlnaXQgcHVzaCBwYXJlbnQxIG9uZTp0YWcxIEhFQUR+OnJlZnMvaGVhZHMvcHJldiAmJgorCWRpZmYgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK3BhcmVudDEKK3JlcG8xCisoZGVsZXRlKSAkWkVST19PSUQgcmVmcy9oZWFkcy9wcmV2ICRDT01NSVQyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBkZWxldGUnICcKKwlnaXQgcHVzaCBwYXJlbnQxIDpwcmV2ICYmCisJZGlmZiBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorcmVwbzEKK3JlcG8xCitIRUFEICRDT01NSVQzIHJlZnMvaGVhZHMvb3RoZXIgJFpFUk9fT0lECitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBVUkwnICcKKwlnaXQgcHVzaCByZXBvMSBIRUFEICYmCisJZGlmZiBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIG1hbnktcmVmIHRlc3RzJyAnCisJeworCQlucj0xMDAwCisJCXdoaWxlIHRlc3QgJG5yIC1sdCAyMDAwCisJCWRvCisJCQlucj0kKCggJG5yICsgMSApKQorCQkJZWNobyAiY3JlYXRlIHJlZnMvaGVhZHMvYi8kbnIgJENPTU1JVDMiCisJCWRvbmUKKwl9IHwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdwaXBlIGRvZXMgbm90IGNhdXNlIHByZS1wdXNoIGhvb2sgZmFpbHVyZScgJworCWVjaG8gImV4aXQgMCIgfCB3cml0ZV9zY3JpcHQgIiRIT09LIiAmJgorCWdpdCBwdXNoIHBhcmVudDEgInJlZnMvaGVhZHMvYi8qOnJlZnMvaGVhZHMvYi8qIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NzItcHVsbC1zdWJtb2R1bGUuc2ggYi90L3Q1NTcyLXB1bGwtc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5MTY3MjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTcyLXB1bGwtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsMTU2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHVsbCBjYW4gaGFuZGxlIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItc3VibW9kdWxlLXVwZGF0ZS5zaAorCityZXNldF9icmFuY2hfdG9fSEVBRCAoKSB7CisJZ2l0IGJyYW5jaCAtRCAiJDEiICYmCisJZ2l0IGNoZWNrb3V0IC1iICIkMSIgSEVBRCAmJgorCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89Im9yaWdpbi8kMSIgIiQxIgorfQorCitnaXRfcHVsbCAoKSB7CisJcmVzZXRfYnJhbmNoX3RvX0hFQUQgIiQxIiAmJgorCWdpdCBwdWxsCit9CisKKyMgcHVsbHMgd2l0aG91dCBjb25mbGljdHMKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0X3B1bGwiCisKK2dpdF9wdWxsX2ZmICgpIHsKKwlyZXNldF9icmFuY2hfdG9fSEVBRCAiJDEiICYmCisJZ2l0IHB1bGwgLS1mZgorfQorCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdF9wdWxsX2ZmIgorCitnaXRfcHVsbF9mZl9vbmx5ICgpIHsKKwlyZXNldF9icmFuY2hfdG9fSEVBRCAiJDEiICYmCisJZ2l0IHB1bGwgLS1mZi1vbmx5Cit9CisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0X3B1bGxfZmZfb25seSIKKworZ2l0X3B1bGxfbm9mZiAoKSB7CisJcmVzZXRfYnJhbmNoX3RvX0hFQUQgIiQxIiAmJgorCWdpdCBwdWxsIC0tbm8tZmYKK30KKworS05PV05fRkFJTFVSRV9OT0ZGX01FUkdFX0RPRVNOVF9DUkVBVEVfRU1QVFlfU1VCTU9EVUxFX0RJUj0xCitLTk9XTl9GQUlMVVJFX05PRkZfTUVSR0VfQVRURU1QVFNfVE9fTUVSR0VfUkVNT1ZFRF9TVUJNT0RVTEVfRklMRVM9MQordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXRfcHVsbF9ub2ZmIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmVjdXJzZS1zdWJtb2R1bGUgc2V0dXAnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGNoaWxkICYmCisJdGVzdF9jb21taXQgLUMgY2hpbGQgYmFyICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIHBhcmVudCAmJgorCXRlc3RfY29tbWl0IC1DIGNoaWxkIGZvbyAmJgorCisJZ2l0IC1DIHBhcmVudCBzdWJtb2R1bGUgYWRkIC4uL2NoaWxkIHN1YiAmJgorCWdpdCAtQyBwYXJlbnQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIiAmJgorCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIHBhcmVudCBzdXBlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWN1cnNpdmUgcHVsbCB1cGRhdGVzIHdvcmtpbmcgdHJlZScgJworCXRlc3RfY29tbWl0IC1DIGNoaWxkIG1lcmdlX3N0cmF0ZWd5ICYmCisJZ2l0IC1DIHBhcmVudCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlICYmCisJZ2l0IC1DIHBhcmVudCBhZGQgc3ViICYmCisJZ2l0IC1DIHBhcmVudCBjb21taXQgLW0gInVwZGF0ZSBzdWJtb2R1bGUiICYmCisKKwlnaXQgLUMgc3VwZXIgcHVsbCAtLW5vLXJlYmFzZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1cGVyL3N1Yi9tZXJnZV9zdHJhdGVneS50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInN1Ym1vZHVsZS5yZWN1cnNlIG9wdGlvbiB0cmlnZ2VycyByZWN1cnNpdmUgcHVsbCIgJworCXRlc3RfY29tbWl0IC1DIGNoaWxkIG1lcmdlX3N0cmF0ZWd5XzIgJiYKKwlnaXQgLUMgcGFyZW50IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUgJiYKKwlnaXQgLUMgcGFyZW50IGFkZCBzdWIgJiYKKwlnaXQgLUMgcGFyZW50IGNvbW1pdCAtbSAidXBkYXRlIHN1Ym1vZHVsZSIgJiYKKworCWdpdCAtQyBzdXBlciAtYyBzdWJtb2R1bGUucmVjdXJzZSBwdWxsIC0tbm8tcmViYXNlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VwZXIvc3ViL21lcmdlX3N0cmF0ZWd5XzIudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIgLS1bbm8tXXJlY3Vyc2Utc3VibW9kdWxlIGFuZCBzdWJtb2R1bGUucmVjdXJzZSIgJworCXRlc3RfY29tbWl0IC1DIGNoaWxkIG1lcmdlX3N0cmF0ZWd5XzMgJiYKKwlnaXQgLUMgcGFyZW50IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUgJiYKKwlnaXQgLUMgcGFyZW50IGFkZCBzdWIgJiYKKwlnaXQgLUMgcGFyZW50IGNvbW1pdCAtbSAidXBkYXRlIHN1Ym1vZHVsZSIgJiYKKworCWdpdCAtQyBzdXBlciAtYyBzdWJtb2R1bGUucmVjdXJzZSBwdWxsIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzIC0tbm8tcmViYXNlICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VwZXIvc3ViL21lcmdlX3N0cmF0ZWd5XzMudCAmJgorCWdpdCAtQyBzdXBlciAtYyBzdWJtb2R1bGUucmVjdXJzZT1mYWxzZSBwdWxsIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tbm8tcmViYXNlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VwZXIvc3ViL21lcmdlX3N0cmF0ZWd5XzMudCAmJgorCisJdGVzdF9jb21taXQgLUMgY2hpbGQgbWVyZ2Vfc3RyYXRlZ3lfNCAmJgorCWdpdCAtQyBwYXJlbnQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAmJgorCWdpdCAtQyBwYXJlbnQgYWRkIHN1YiAmJgorCWdpdCAtQyBwYXJlbnQgY29tbWl0IC1tICJ1cGRhdGUgc3VibW9kdWxlIiAmJgorCisJZ2l0IC1DIHN1cGVyIC1jIHN1Ym1vZHVsZS5yZWN1cnNlPWZhbHNlIHB1bGwgLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1uby1yZWJhc2UgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdXBlci9zdWIvbWVyZ2Vfc3RyYXRlZ3lfNC50ICYmCisJZ2l0IC1DIHN1cGVyIC1jIHN1Ym1vZHVsZS5yZWN1cnNlPXRydWUgcHVsbCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLW5vLXJlYmFzZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1cGVyL3N1Yi9tZXJnZV9zdHJhdGVneV80LnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjdXJzaXZlIHJlYmFzaW5nIHB1bGwnICcKKwkjIGNoYW5nZSB1cHN0cmVhbQorCXRlc3RfY29tbWl0IC1DIGNoaWxkIHJlYmFzZV9zdHJhdGVneSAmJgorCWdpdCAtQyBwYXJlbnQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAmJgorCWdpdCAtQyBwYXJlbnQgYWRkIHN1YiAmJgorCWdpdCAtQyBwYXJlbnQgY29tbWl0IC1tICJ1cGRhdGUgc3VibW9kdWxlIiAmJgorCisJIyBhbHNvIGhhdmUgbG9jYWwgY29tbWl0cworCXRlc3RfY29tbWl0IC1DIHN1cGVyL3N1YiBsb2NhbF9zdHVmZiAmJgorCisJZ2l0IC1DIHN1cGVyIHB1bGwgLS1yZWJhc2UgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdXBlci9zdWIvcmViYXNlX3N0cmF0ZWd5LnQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdXBlci9zdWIvbG9jYWxfc3R1ZmYudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIHJlYmFzZSByZWN1cnNpbmcgZmFpbHMgd2l0aCBjb25mbGljdHMnICcKKworCSMgbG9jYWwgY2hhbmdlcyBpbiBzdWJtb2R1bGUgcmVjb3JkZWQgaW4gc3VwZXJwcm9qZWN0OgorCXRlc3RfY29tbWl0IC1DIHN1cGVyL3N1YiBsb2NhbF9zdHVmZl8yICYmCisJZ2l0IC1DIHN1cGVyIGFkZCBzdWIgJiYKKwlnaXQgLUMgc3VwZXIgY29tbWl0IC1tICJsb2NhbCB1cGRhdGUgc3VibW9kdWxlIiAmJgorCisJIyBhbmQgaW4gdGhlIHJlbW90ZSBhcyB3ZWxsOgorCXRlc3RfY29tbWl0IC1DIGNoaWxkIGltcG9ydGFudF91cHN0cmVhbV93b3JrICYmCisJZ2l0IC1DIHBhcmVudCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlICYmCisJZ2l0IC1DIHBhcmVudCBhZGQgc3ViICYmCisJZ2l0IC1DIHBhcmVudCBjb21taXQgLW0gInJlbW90ZSB1cGRhdGUgc3VibW9kdWxlIiAmJgorCisJIyBVbmZvcnR1bmF0ZWx5IHdlIGZhaWwgaGVyZSwgZGVzcGl0ZSBubyBjb25mbGljdCBpbiB0aGUKKwkjIHN1Ym1vZHVsZSBpdHNlbGYsIGJ1dCB0aGUgbWVyZ2Ugc3RyYXRlZ3kgaW4gc3VibW9kdWxlcworCSMgZG9lcyBub3Qgc3VwcG9ydCByZWJhc2U6CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1cGVyIHB1bGwgLS1yZWJhc2UgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJsb2NhbGx5IHJlY29yZGVkIHN1Ym1vZHVsZSBtb2RpZmljYXRpb25zIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIGhhcyBubyBtZXJnZSBiYXNlIHdpdGggcmVtb3RlLXRyYWNraW5nIGNvdW50ZXJwYXJ0JyAnCisJcm0gLXJmIHBhcmVudCBjaGlsZCAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyBhLXN1Ym1vZHVsZSAmJgorCXRlc3RfY29tbWl0IC1DIGEtc3VibW9kdWxlIGZvbyAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyBwYXJlbnQgJiYKKwlnaXQgLUMgcGFyZW50IHN1Ym1vZHVsZSBhZGQgIiQocHdkKS9hLXN1Ym1vZHVsZSIgJiYKKwlnaXQgLUMgcGFyZW50IGNvbW1pdCAtbSBmb28gJiYKKworCWdpdCBjbG9uZSBwYXJlbnQgY2hpbGQgJiYKKworCSMgUmVzZXQgbWFzdGVyIHNvIHRoYXQgaXQgaGFzIG5vIG1lcmdlIGJhc2Ugd2l0aAorCSMgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIuCisJT1RIRVI9JChnaXQgLUMgY2hpbGQgY29tbWl0LXRyZWUgLW0gYmFyIFwKKwkJJChnaXQgLUMgY2hpbGQgcmV2LXBhcnNlIEhFQURee3RyZWV9KSkgJiYKKwlnaXQgLUMgY2hpbGQgcmVzZXQgLS1oYXJkICIkT1RIRVIiICYmCisKKwlnaXQgLUMgY2hpbGQgcHVsbCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLXJlYmFzZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NzMtcHVsbC12ZXJpZnktc2lnbmF0dXJlcy5zaCBiL3QvdDU1NzMtcHVsbC12ZXJpZnktc2lnbmF0dXJlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNTNkZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTU3My1wdWxsLXZlcmlmeS1zaWduYXR1cmVzLnNoCkBAIC0wLDAgKzEsMTUyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHVsbCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLWdwZy5zaCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2NyZWF0ZSByZXBvc2l0b3JpZXMgd2l0aCBzaWduZWQgY29tbWl0cycgJworCWVjaG8gMSA+YSAmJiBnaXQgYWRkIGEgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisKKwlnaXQgY2xvbmUgLiBzaWduZWQgJiYKKwkoCisJCWNkIHNpZ25lZCAmJgorCQllY2hvIDIgPmIgJiYgZ2l0IGFkZCBiICYmCisJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1TIC1tICJzaWduZWQiCisJKSAmJgorCisJZ2l0IGNsb25lIC4gdW5zaWduZWQgJiYKKwkoCisJCWNkIHVuc2lnbmVkICYmCisJCWVjaG8gMyA+YyAmJiBnaXQgYWRkIGMgJiYKKwkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gInVuc2lnbmVkIgorCSkgJiYKKworCWdpdCBjbG9uZSAuIGJhZCAmJgorCSgKKwkJY2QgYmFkICYmCisJCWVjaG8gNCA+ZCAmJiBnaXQgYWRkIGQgJiYKKwkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLVMgLW0gImJhZCIgJiYKKwkJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yYXcgJiYKKwkJc2VkIC1lICJzL15iYWQvZm9yZ2VkIGJhZC8iIHJhdyA+Zm9yZ2VkICYmCisJCWdpdCBoYXNoLW9iamVjdCAtdyAtdCBjb21taXQgZm9yZ2VkID5mb3JnZWQuY29tbWl0ICYmCisJCWdpdCBjaGVja291dCAkKGNhdCBmb3JnZWQuY29tbWl0KQorCSkgJiYKKworCWdpdCBjbG9uZSAuIHVudHJ1c3RlZCAmJgorCSgKKwkJY2QgdW50cnVzdGVkICYmCisJCWVjaG8gNSA+ZSAmJiBnaXQgYWRkIGUgJiYKKwkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLVNCNzIyNzE4OSAtbSAidW50cnVzdGVkIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3B1bGwgdW5zaWduZWQgY29tbWl0IHdpdGggLS12ZXJpZnktc2lnbmF0dXJlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLWZmLW9ubHkgLS12ZXJpZnktc2lnbmF0dXJlcyB1bnNpZ25lZCAyPnB1bGxlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlIiBwdWxsZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3B1bGwgY29tbWl0IHdpdGggYmFkIHNpZ25hdHVyZSB3aXRoIC0tdmVyaWZ5LXNpZ25hdHVyZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1mZi1vbmx5IC0tdmVyaWZ5LXNpZ25hdHVyZXMgYmFkIDI+cHVsbGVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUiIHB1bGxlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVsbCBjb21taXQgd2l0aCB1bnRydXN0ZWQgc2lnbmF0dXJlIHdpdGggLS12ZXJpZnktc2lnbmF0dXJlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLWZmLW9ubHkgLS12ZXJpZnktc2lnbmF0dXJlcyB1bnRydXN0ZWQgMj5wdWxsZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUiIHB1bGxlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVsbCBjb21taXQgd2l0aCB1bnRydXN0ZWQgc2lnbmF0dXJlIHdpdGggLS12ZXJpZnktc2lnbmF0dXJlcyBhbmQgbWluVHJ1c3RMZXZlbD11bHRpbWF0ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwl0ZXN0X2NvbmZpZyBncGcubWluVHJ1c3RMZXZlbCB1bHRpbWF0ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzIHVudHJ1c3RlZCAyPnB1bGxlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSIgcHVsbGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdWxsIGNvbW1pdCB3aXRoIHVudHJ1c3RlZCBzaWduYXR1cmUgd2l0aCAtLXZlcmlmeS1zaWduYXR1cmVzIGFuZCBtaW5UcnVzdExldmVsPW1hcmdpbmFsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBpbml0aWFsIiAmJgorCXRlc3RfY29uZmlnIGdwZy5taW5UcnVzdExldmVsIG1hcmdpbmFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1mZi1vbmx5IC0tdmVyaWZ5LXNpZ25hdHVyZXMgdW50cnVzdGVkIDI+cHVsbGVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlIiBwdWxsZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3B1bGwgY29tbWl0IHdpdGggdW50cnVzdGVkIHNpZ25hdHVyZSB3aXRoIC0tdmVyaWZ5LXNpZ25hdHVyZXMgYW5kIG1pblRydXN0TGV2ZWw9dW5kZWZpbmVkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBpbml0aWFsIiAmJgorCXRlc3RfY29uZmlnIGdwZy5taW5UcnVzdExldmVsIHVuZGVmaW5lZCAmJgorCWdpdCBwdWxsIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzIHVudHJ1c3RlZCA+cHVsbG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSIgcHVsbG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVsbCBzaWduZWQgY29tbWl0IHdpdGggLS12ZXJpZnktc2lnbmF0dXJlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwlnaXQgcHVsbCAtLXZlcmlmeS1zaWduYXR1cmVzIHNpZ25lZCA+cHVsbG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSIgcHVsbG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVsbCBjb21taXQgd2l0aCBiYWQgc2lnbmF0dXJlIHdpdGhvdXQgdmVyaWZpY2F0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBpbml0aWFsIiAmJgorCWdpdCBwdWxsIC0tZmYtb25seSBiYWQgMj5wdWxsZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3B1bGwgY29tbWl0IHdpdGggYmFkIHNpZ25hdHVyZSB3aXRoIC0tbm8tdmVyaWZ5LXNpZ25hdHVyZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9jb25maWcgbWVyZ2UudmVyaWZ5U2lnbmF0dXJlcyB0cnVlICYmCisJdGVzdF9jb25maWcgcHVsbC52ZXJpZnlTaWduYXR1cmVzIHRydWUgJiYKKwlnaXQgcHVsbCAtLWZmLW9ubHkgLS1uby12ZXJpZnktc2lnbmF0dXJlcyBiYWQgMj5wdWxsZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3B1bGwgdW5zaWduZWQgY29tbWl0IGludG8gdW5ib3JuIGJyYW5jaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGVtcHR5LXJlcG8iICYmCisJZ2l0IGluaXQgZW1wdHktcmVwbyAmJgorCXRlc3RfbXVzdF9mYWlsIFwKKwkJZ2l0IC1DIGVtcHR5LXJlcG8gcHVsbCAtLXZlcmlmeS1zaWduYXR1cmVzIC4uICAyPnB1bGxlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlIiBwdWxsZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3B1bGwgY29tbWl0IGludG8gdW5ib3JuIGJyYW5jaCB3aXRoIGJhZCBzaWduYXR1cmUgYW5kIC0tdmVyaWZ5LXNpZ25hdHVyZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBlbXB0eS1yZXBvIiAmJgorCWdpdCBpbml0IGVtcHR5LXJlcG8gJiYKKwl0ZXN0X211c3RfZmFpbCBcCisJCWdpdCAtQyBlbXB0eS1yZXBvIHB1bGwgLS1mZi1vbmx5IC0tdmVyaWZ5LXNpZ25hdHVyZXMgLi4vYmFkIDI+cHVsbGVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUiIHB1bGxlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVsbCBjb21taXQgaW50byB1bmJvcm4gYnJhbmNoIHdpdGggdW50cnVzdGVkIHNpZ25hdHVyZSBhbmQgLS12ZXJpZnktc2lnbmF0dXJlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGVtcHR5LXJlcG8iICYmCisJZ2l0IGluaXQgZW1wdHktcmVwbyAmJgorCXRlc3RfbXVzdF9mYWlsIFwKKwkJZ2l0IC1DIGVtcHR5LXJlcG8gcHVsbCAtLWZmLW9ubHkgLS12ZXJpZnktc2lnbmF0dXJlcyAuLi91bnRydXN0ZWQgMj5wdWxsZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUiIHB1bGxlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVsbCBjb21taXQgaW50byB1bmJvcm4gYnJhbmNoIHdpdGggdW50cnVzdGVkIHNpZ25hdHVyZSBhbmQgLS12ZXJpZnktc2lnbmF0dXJlcyBhbmQgbWluVHJ1c3RMZXZlbD11bHRpbWF0ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGVtcHR5LXJlcG8iICYmCisJZ2l0IGluaXQgZW1wdHktcmVwbyAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCBncGcubWluVHJ1c3RMZXZlbCB1bHRpbWF0ZSAmJgorCXRlc3RfbXVzdF9mYWlsIFwKKwkJZ2l0IC1DIGVtcHR5LXJlcG8gcHVsbCAtLWZmLW9ubHkgLS12ZXJpZnktc2lnbmF0dXJlcyAuLi91bnRydXN0ZWQgMj5wdWxsZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUiIHB1bGxlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVsbCBjb21taXQgaW50byB1bmJvcm4gYnJhbmNoIHdpdGggdW50cnVzdGVkIHNpZ25hdHVyZSBhbmQgLS12ZXJpZnktc2lnbmF0dXJlcyBhbmQgbWluVHJ1c3RMZXZlbD1tYXJnaW5hbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGVtcHR5LXJlcG8iICYmCisJZ2l0IGluaXQgZW1wdHktcmVwbyAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCBncGcubWluVHJ1c3RMZXZlbCBtYXJnaW5hbCAmJgorCXRlc3RfbXVzdF9mYWlsIFwKKwkJZ2l0IC1DIGVtcHR5LXJlcG8gcHVsbCAtLWZmLW9ubHkgLS12ZXJpZnktc2lnbmF0dXJlcyAuLi91bnRydXN0ZWQgMj5wdWxsZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUiIHB1bGxlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVsbCBjb21taXQgaW50byB1bmJvcm4gYnJhbmNoIHdpdGggdW50cnVzdGVkIHNpZ25hdHVyZSBhbmQgLS12ZXJpZnktc2lnbmF0dXJlcyBhbmQgbWluVHJ1c3RMZXZlbD11bmRlZmluZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBlbXB0eS1yZXBvIiAmJgorCWdpdCBpbml0IGVtcHR5LXJlcG8gJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZ3BnLm1pblRydXN0TGV2ZWwgdW5kZWZpbmVkICYmCisJZ2l0IC1DIGVtcHR5LXJlcG8gcHVsbCAtLWZmLW9ubHkgLS12ZXJpZnktc2lnbmF0dXJlcyAuLi91bnRydXN0ZWQgPnB1bGxvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUiIHB1bGxvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTgwLXVuYy1wYXRocy5zaCBiL3QvdDU1ODAtdW5jLXBhdGhzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNmNzY4YjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTgwLXVuYy1wYXRocy5zaApAQCAtMCwwICsxLDg5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndmFyaW91cyBXaW5kb3dzLW9ubHkgcGF0aCB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorCitpZiB0ZXN0X2hhdmVfcHJlcmVxIENZR1dJTgordGhlbgorCWFsaWFzIHdpbnB3ZD0nY3lncGF0aCAtYXcgLicKK2VsaWYgdGVzdF9oYXZlX3ByZXJlcSBNSU5HVwordGhlbgorCWFsaWFzIHdpbnB3ZD1wd2QKK2Vsc2UKKwlza2lwX2FsbD0nc2tpcHBpbmcgV2luZG93cy1vbmx5IHBhdGggdGVzdHMnCisJdGVzdF9kb25lCitmaQorCitVTkNQQVRIPSIkKHdpbnB3ZCkiCitjYXNlICIkVU5DUEFUSCIgaW4KK1tBLVpdOiopCisJIyBVc2UgYWRtaW5pc3RyYXRpdmUgc2hhcmUgZS5nLiBcXGxvY2FsaG9zdFxDJFxnaXQtc2RrLTY0XHVzclxzcmNcZ2l0CisJIyAod2UgdXNlIGZvcndhcmQgc2xhc2hlcyBoZXJlIGJlY2F1c2UgTVNZUzIgYW5kIEdpdCBhY2NlcHQgdGhlbSwgYW5kCisJIyB0aGV5IGFyZSBlYXNpZXIgb24gdGhlIGV5ZXMpCisJVU5DUEFUSD0iLy9sb2NhbGhvc3QvJHtVTkNQQVRIJSU6Kn1cJC8ke1VOQ1BBVEgjPzp9IgorCXRlc3QgLWQgIiRVTkNQQVRIIiB8fCB7CisJCXNraXBfYWxsPSdjb3VsZCBub3QgYWNjZXNzIGFkbWluaXN0cmF0aXZlIHNoYXJlOyBza2lwcGluZycKKwkJdGVzdF9kb25lCisJfQorCTs7CisqKQorCXNraXBfYWxsPSdza2lwcGluZyBVTkMgcGF0aCB0ZXN0cywgY2Fubm90IGRldGVybWluZSBjdXJyZW50IHBhdGggYXMgVU5DJworCXRlc3RfZG9uZQorCTs7Citlc2FjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBjbG9uZSAnCisJZ2l0IGNsb25lICJmaWxlOi8vJFVOQ1BBVEgiIGNsb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGhvdXQgZmlsZTovLycgJworCWdpdCBjbG9uZSAiJFVOQ1BBVEgiIGNsb25lLXdpdGhvdXQtZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIGJhY2tzbGFzaGVkIHBhdGgnICcKKwlCQUNLU0xBU0hFRD0iJChlY2hvICIkVU5DUEFUSCIgfCB0ciAvIFxcXFwpIiAmJgorCWdpdCBjbG9uZSAiJEJBQ0tTTEFTSEVEIiBiYWNrc2xhc2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGZldGNoICcKKwlnaXQgaW5pdCB0by1mZXRjaCAmJgorCSgKKwkJY2QgdG8tZmV0Y2ggJiYKKwkJZ2l0IGZldGNoICIkVU5DUEFUSCIgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHB1c2ggJworCSgKKwkJY2QgY2xvbmUgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHRvLXB1c2ggJiYKKwkJdGVzdF9jb21taXQgdG8tcHVzaCAmJgorCQlnaXQgcHVzaCBvcmlnaW4gSEVBRAorCSkgJiYKKwlyZXY9IiQoZ2l0IC1DIGNsb25lIHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3RvLXB1c2gpIiAmJgorCXRlc3QgIiRyZXYiID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3RvLXB1c2gpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICdyZW1vdGUgbmljayBjYW5ub3QgY29udGFpbiBiYWNrc2xhc2hlcycgJworCUJBQ0tTTEFTSEVEPSIkKHdpbnB3ZCB8IHRyIC8gXFxcXCkiICYmCisJZ2l0IGxzLXJlbW90ZSAiJEJBQ0tTTEFTSEVEIiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAidW5hYmxlIHRvIGFjY2VzcyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VuYyBhbHRlcm5hdGVzJyAnCisJdHJlZT0iJChnaXQgcmV2LXBhcnNlIEhFQUQ6KSIgJiYKKwlta2RpciB0ZXN0LXVuYy1hbHRlcm5hdGUgJiYKKwkoCisJCWNkIHRlc3QtdW5jLWFsdGVybmF0ZSAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAkdHJlZSAmJgorCQllY2hvICIkVU5DUEFUSC8uZ2l0L29iamVjdHMiID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJCWdpdCBzaG93ICR0cmVlCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1ODEtaHR0cC1jdXJsLXZlcmJvc2Uuc2ggYi90L3Q1NTgxLWh0dHAtY3VybC12ZXJib3NlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUxMjliMDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTgxLWh0dHAtY3VybC12ZXJib3NlLnNoCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IEdJVF9DVVJMX1ZFUkJPU0UnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCitzdGFydF9odHRwZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5JyAnCisJbWtkaXIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZ2l0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAtLWJhcmUgaW5pdCAmJgorCWdpdCBjb25maWcgcHVzaC5kZWZhdWx0IG1hdGNoaW5nICYmCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwlnaXQgcmVtb3RlIGFkZCBwdWJsaWMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZ2l0IHB1c2ggcHVibGljIG1hc3RlcjptYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHVyZSBpbiBnaXQtdXBsb2FkLXBhY2sgaXMgc2hvd24nICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZW52IEdJVF9DVVJMX1ZFUkJPU0U9MSBcCisJCWdpdCBjbG9uZSAiJEhUVFBEX1VSTC9lcnJvcl9naXRfdXBsb2FkX3BhY2svc21hcnQvcmVwby5naXQiIFwKKwkJMj5jdXJsX2xvZyAmJgorCWdyZXAgIjwgSFRUUC8xLjEgNTAwIEludGVudGlvbmFsIEJyZWFrYWdlIiBjdXJsX2xvZworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MDAtY2xvbmUtZmFpbC1jbGVhbnVwLnNoIGIvdC90NTYwMC1jbG9uZS1mYWlsLWNsZWFudXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGExYTkxMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MDAtY2xvbmUtZmFpbC1jbGVhbnVwLnNoCkBAIC0wLDAgKzEsMTAwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IENhcmwgRC4gV29ydGggPGN3b3J0aEBjd29ydGgub3JnPgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCBjbG9uZSB0byBjbGVhbnVwIGFmdGVyIGZhaWx1cmUKKworVGhpcyB0ZXN0IGNvdmVycyB0aGUgZmFjdCB0aGF0IGlmIGdpdCBjbG9uZSBmYWlscywgaXQgc2hvdWxkIHJlbW92ZQordGhlIGRpcmVjdG9yeSBpdCBjcmVhdGVkLCB0byBhdm9pZCB0aGUgdXNlciBoYXZpbmcgdG8gbWFudWFsbHkKK3JlbW92ZSB0aGUgZGlyZWN0b3J5IGJlZm9yZSBhdHRlbXB0aW5nIGEgY2xvbmUgYWdhaW4uCisKK1VubGVzcyB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLCBpbiB3aGljaCBjYXNlIHdlIGNsZWFuIHVwIG9ubHkgd2hhdCB3ZQord3JvdGUuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb3JydXB0X3JlcG8gKCkgeworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm1kaXIgZm9vLy5naXQvb2JqZWN0cy5iYWsiICYmCisJbWtkaXIgZm9vLy5naXQvb2JqZWN0cy5iYWsvICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJtdiBmb28vLmdpdC9vYmplY3RzLmJhay8qIGZvby8uZ2l0L29iamVjdHMvIiAmJgorCW12IGZvby8uZ2l0L29iamVjdHMvKiBmb28vLmdpdC9vYmplY3RzLmJhay8KK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgb2Ygbm9uLWV4aXN0ZW50IHNvdXJjZSBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSBmb28gYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjbG9uZSBzaG91bGQgbm90IGxlYXZlIGEgZGlyZWN0b3J5JyAnCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBhIHJlcG8gdG8gY2xvbmUnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgb2JqZWN0cyBpbiByZXBvIGZvciBsYXRlciBjb3JydXB0aW9uJyAnCisJdGVzdF9jb21taXQgLUMgZm9vIGZpbGUKKycKKworIyBzb3VyY2UgcmVwb3NpdG9yeSBnaXZlbiB0byBnaXQgY2xvbmUgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZQorIyBjdXJyZW50IHBhdGggbm90IHRvIHRoZSB0YXJnZXQgZGlyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBvZiBub24tZXhpc3RlbnQgKHJlbGF0aXZlIHRvICRQV0QpIHNvdXJjZSBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAuLi9mb28gYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNob3VsZCB3b3JrIG5vdyB0aGF0IHNvdXJjZSBleGlzdHMnICcKKwlnaXQgY2xvbmUgZm9vIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzZnVsIGNsb25lIG11c3QgbGVhdmUgdGhlIGRpcmVjdG9yeScgJworCXRlc3RfcGF0aF9pc19kaXIgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjbG9uZSAtLXNlcGFyYXRlLWdpdC1kaXIgc2hvdWxkIG5vdCBsZWF2ZSBhbnkgZGlyZWN0b3JpZXMnICcKKwljb3JydXB0X3JlcG8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1zZXBhcmF0ZS1naXQtZGlyIGdpdGRpciBmb28gd29ya3RyZWUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBnaXRkaXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB3b3JrdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgY2xvbmUgaW50byBlbXB0eSBsZWF2ZXMgZGlyZWN0b3J5ICh2YW5pbGxhKScgJworCW1rZGlyIC1wIGVtcHR5ICYmCisJY29ycnVwdF9yZXBvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIGZvbyBlbXB0eSAmJgorCXRlc3RfZGlyX2lzX2VtcHR5IGVtcHR5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjbG9uZSBpbnRvIGVtcHR5IGxlYXZlcyBkaXJlY3RvcnkgKGJhcmUpJyAnCisJbWtkaXIgLXAgZW1wdHkgJiYKKwljb3JydXB0X3JlcG8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1iYXJlIGZvbyBlbXB0eSAmJgorCXRlc3RfZGlyX2lzX2VtcHR5IGVtcHR5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjbG9uZSBpbnRvIGVtcHR5IGxlYXZlcyBkaXJlY3RvcnkgKHNlcGFyYXRlKScgJworCW1rZGlyIC1wIGVtcHR5LWdpdCBlbXB0eS13dCAmJgorCWNvcnJ1cHRfcmVwbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLXNlcGFyYXRlLWdpdC1kaXIgZW1wdHktZ2l0IGZvbyBlbXB0eS13dCAmJgorCXRlc3RfZGlyX2lzX2VtcHR5IGVtcHR5LWdpdCAmJgorCXRlc3RfZGlyX2lzX2VtcHR5IGVtcHR5LXd0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjbG9uZSBpbnRvIGVtcHR5IGxlYXZlcyBkaXJlY3RvcnkgKHNlcGFyYXRlLCBnaXQpJyAnCisJbWtkaXIgLXAgZW1wdHktZ2l0ICYmCisJY29ycnVwdF9yZXBvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tc2VwYXJhdGUtZ2l0LWRpciBlbXB0eS1naXQgZm9vIG5vLXd0ICYmCisJdGVzdF9kaXJfaXNfZW1wdHkgZW1wdHktZ2l0ICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgbm8td3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNsb25lIGludG8gZW1wdHkgbGVhdmVzIGRpcmVjdG9yeSAoc2VwYXJhdGUsIHd0KScgJworCW1rZGlyIC1wIGVtcHR5LXd0ICYmCisJY29ycnVwdF9yZXBvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tc2VwYXJhdGUtZ2l0LWRpciBuby1naXQgZm9vIGVtcHR5LXd0ICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgbm8tZ2l0ICYmCisJdGVzdF9kaXJfaXNfZW1wdHkgZW1wdHktd3QKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjAxLWNsb25lLnNoIGIvdC90NTYwMS1jbG9uZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NGVhMmEzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTYwMS1jbG9uZS5zaApAQCAtMCwwICsxLDc0NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Y2xvbmUKKworLiAuL3Rlc3QtbGliLnNoCisKK1g9Cit0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVyB8fCBYPS5leGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlybSAtZnIgLmdpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gc3JjICYmCisJKAorCQljZCBzcmMgJiYKKwkJPmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCQllY2hvIDEgPmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW0gdXBkYXRlZAorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIGV4Y2VzcyBwYXJhbWV0ZXJzICgxKScgJworCisJcm0gLWZyIGRzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtbiBzcmMgZHN0IGp1bmsKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIGV4Y2VzcyBwYXJhbWV0ZXJzICgyKScgJworCisJcm0gLWZyIGRzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtbiAiZmlsZTovLyQocHdkKS9zcmMiIGRzdCBqdW5rCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ291dHB1dCBmcm9tIGNsb25lJyAnCisJcm0gLWZyIGRzdCAmJgorCWdpdCBjbG9uZSAtbiAiZmlsZTovLyQocHdkKS9zcmMiIGRzdCA+b3V0cHV0IDI+JjEgJiYKKwl0ZXN0ICQoZ3JlcCBDbG9uIG91dHB1dCB8IHdjIC1sKSA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZG9lcyBub3Qga2VlcCBwYWNrJyAnCisKKwlybSAtZnIgZHN0ICYmCisJZ2l0IGNsb25lIC1uICJmaWxlOi8vJChwd2QpL3NyYyIgZHN0ICYmCisJISB0ZXN0IC1mIGRzdC9maWxlICYmCisJISAoZWNobyBkc3QvLmdpdC9vYmplY3RzL3BhY2svcGFjay0qIHwgZ3JlcCAiXC5rZWVwIikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBjaGVja3Mgb3V0IGZpbGVzJyAnCisKKwlybSAtZnIgZHN0ICYmCisJZ2l0IGNsb25lIHNyYyBkc3QgJiYKKwl0ZXN0IC1mIGRzdC9maWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVzcGVjdHMgR0lUX1dPUktfVFJFRScgJworCisJR0lUX1dPUktfVFJFRT13b3JrdHJlZSBnaXQgY2xvbmUgc3JjIGJhcmUgJiYKKwl0ZXN0IC1mIGJhcmUvY29uZmlnICYmCisJdGVzdCAtZiB3b3JrdHJlZS9maWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZnJvbSBob29rcycgJworCisJdGVzdF9jcmVhdGVfcmVwbyByMCAmJgorCWNkIHIwICYmCisJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCWNkIC4uICYmCisJZ2l0IGluaXQgcjEgJiYKKwljZCByMSAmJgorCWNhdCA+LmdpdC9ob29rcy9wcmUtY29tbWl0IDw8LVxFT0YgJiYKKwkjIS9iaW4vc2gKKwlnaXQgY2xvbmUgLi4vcjAgLi4vcjIKKwlleGl0IDEKKwlFT0YKKwljaG1vZCB1K3ggLmdpdC9ob29rcy9wcmUtY29tbWl0ICYmCisJOiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gaW52b2tlLWhvb2sgJiYKKwljZCAuLiAmJgorCXRlc3RfY21wIHIwLy5naXQvSEVBRCByMi8uZ2l0L0hFQUQgJiYKKwl0ZXN0X2NtcCByMC9pbml0aWFsLnQgcjIvaW5pdGlhbC50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY3JlYXRlcyBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMnICcKKworCWdpdCBjbG9uZSBzcmMgbG9uZy9wYXRoL3RvL2RzdCAmJgorCXRlc3QgLWYgbG9uZy9wYXRoL3RvL2RzdC9maWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY3JlYXRlcyBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgZm9yIGJhcmUgcmVwbycgJworCisJZ2l0IGNsb25lIC0tYmFyZSBzcmMgbG9uZy9wYXRoL3RvL2JhcmUvZHN0ICYmCisJdGVzdCAtZiBsb25nL3BhdGgvdG8vYmFyZS9kc3QvY29uZmlnCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1taXJyb3InICcKKworCWdpdCBjbG9uZSAtLW1pcnJvciBzcmMgbWlycm9yICYmCisJdGVzdCAtZiBtaXJyb3IvSEVBRCAmJgorCXRlc3QgISAtZiBtaXJyb3IvZmlsZSAmJgorCUZFVENIPSIkKGNkIG1pcnJvciAmJiBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4uZmV0Y2gpIiAmJgorCXRlc3QgIityZWZzLyo6cmVmcy8qIiA9ICIkRkVUQ0giICYmCisJTUlSUk9SPSIkKGNkIG1pcnJvciAmJiBnaXQgY29uZmlnIC0tYm9vbCByZW1vdGUub3JpZ2luLm1pcnJvcikiICYmCisJdGVzdCAiJE1JUlJPUiIgPSB0cnVlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1taXJyb3Igd2l0aCBkZXRhY2hlZCBIRUFEJyAnCisKKwkoIGNkIHNyYyAmJiBnaXQgY2hlY2tvdXQgSEVBRF4gJiYgZ2l0IHJldi1wYXJzZSBIRUFEID4uLi9leHBlY3RlZCApICYmCisJZ2l0IGNsb25lIC0tbWlycm9yIHNyYyBtaXJyb3IuZGV0YWNoZWQgJiYKKwkoIGNkIHNyYyAmJiBnaXQgY2hlY2tvdXQgLSApICYmCisJR0lUX0RJUj1taXJyb3IuZGV0YWNoZWQgZ2l0IHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLWJhcmUgd2l0aCBkZXRhY2hlZCBIRUFEJyAnCisKKwkoIGNkIHNyYyAmJiBnaXQgY2hlY2tvdXQgSEVBRF4gJiYgZ2l0IHJldi1wYXJzZSBIRUFEID4uLi9leHBlY3RlZCApICYmCisJZ2l0IGNsb25lIC0tYmFyZSBzcmMgYmFyZS5kZXRhY2hlZCAmJgorCSggY2Qgc3JjICYmIGdpdCBjaGVja291dCAtICkgJiYKKwlHSVRfRElSPWJhcmUuZGV0YWNoZWQgZ2l0IHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLWJhcmUgbmFtZXMgdGhlIGxvY2FsIHJlcG9zaXRvcnkgPG5hbWU+LmdpdCcgJworCisJZ2l0IGNsb25lIC0tYmFyZSBzcmMgJiYKKwl0ZXN0IC1kIHNyYy5naXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLW1pcnJvciBkb2VzIG5vdCByZXBlYXQgdGFncycgJworCisJKGNkIHNyYyAmJgorCSBnaXQgdGFnIHNvbWUtdGFnIEhFQUQpICYmCisJZ2l0IGNsb25lIC0tbWlycm9yIHNyYyBtaXJyb3IyICYmCisJKGNkIG1pcnJvcjIgJiYKKwkgZ2l0IHNob3ctcmVmIDI+IGNsb25lLmVyciA+IGNsb25lLm91dCkgJiYKKwkhIGdyZXAgRHVwbGljYXRlIG1pcnJvcjIvY2xvbmUuZXJyICYmCisJZ3JlcCBzb21lLXRhZyBtaXJyb3IyL2Nsb25lLm91dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRvIGRlc3RpbmF0aW9uIHdpdGggdHJhaWxpbmcgLycgJworCisJZ2l0IGNsb25lIHNyYyB0YXJnZXQtMS8gJiYKKwlUPSQoIGNkIHRhcmdldC0xICYmIGdpdCByZXYtcGFyc2UgSEVBRCApICYmCisJUz0kKCBjZCBzcmMgJiYgZ2l0IHJldi1wYXJzZSBIRUFEICkgJiYKKwl0ZXN0ICIkVCIgPSAiJFMiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gZGVzdGluYXRpb24gd2l0aCBleHRyYSB0cmFpbGluZyAvJyAnCisKKwlnaXQgY2xvbmUgc3JjIHRhcmdldC0yLy8vICYmCisJVD0kKCBjZCB0YXJnZXQtMiAmJiBnaXQgcmV2LXBhcnNlIEhFQUQgKSAmJgorCVM9JCggY2Qgc3JjICYmIGdpdCByZXYtcGFyc2UgSEVBRCApICYmCisJdGVzdCAiJFQiID0gIiRTIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRvIGFuIGV4aXN0aW5nIGVtcHR5IGRpcmVjdG9yeScgJworCW1rZGlyIHRhcmdldC0zICYmCisJZ2l0IGNsb25lIHNyYyB0YXJnZXQtMyAmJgorCVQ9JCggY2QgdGFyZ2V0LTMgJiYgZ2l0IHJldi1wYXJzZSBIRUFEICkgJiYKKwlTPSQoIGNkIHNyYyAmJiBnaXQgcmV2LXBhcnNlIEhFQUQgKSAmJgorCXRlc3QgIiRUIiA9ICIkUyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gYW4gZXhpc3Rpbmcgbm9uLWVtcHR5IGRpcmVjdG9yeScgJworCW1rZGlyIHRhcmdldC00ICYmCisJPnRhcmdldC00L0Zha2VmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIHNyYyB0YXJnZXQtNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0byBhbiBleGlzdGluZyBwYXRoJyAnCisJPnRhcmdldC01ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIHNyYyB0YXJnZXQtNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBhIHZvaWQnICcKKwlta2RpciBzcmMtMCAmJgorCSgKKwkJY2Qgc3JjLTAgJiYgZ2l0IGluaXQKKwkpICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpL3NyYy0wIiB0YXJnZXQtNiAyPmVyci02ICYmCisJISBncmVwICJmYXRhbDoiIGVyci02ICYmCisJKAorCQljZCBzcmMtMCAmJiB0ZXN0X2NvbW1pdCBBCisJKSAmJgorCWdpdCBjbG9uZSAiZmlsZTovLyQocHdkKS9zcmMtMCIgdGFyZ2V0LTcgMj5lcnItNyAmJgorCSEgZ3JlcCAiZmF0YWw6IiBlcnItNyAmJgorCSMgVGhlcmUgaXMgbm8gcmVhc29uIHRvIGluc2lzdCB0aGV5IGFyZSBiaXQtZm9yLWJpdAorCSMgaWRlbnRpY2FsLCBidXQgdGhpcyB0ZXN0IHNob3VsZCBzdWZmaWNlIGZvciBub3cuCisJdGVzdF9jbXAgdGFyZ2V0LTYvLmdpdC9jb25maWcgdGFyZ2V0LTcvLmdpdC9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVzcGVjdHMgZ2xvYmFsIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UnICcKKwkoCisJCXRlc3RfY29uZmlnPSIkSE9NRS8uZ2l0Y29uZmlnIiAmJgorCQlnaXQgY29uZmlnIC1mICIkdGVzdF9jb25maWciIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgcmVtb3RlICYmCisJCXJtIC1mciBkc3QgJiYKKwkJZ2l0IGNsb25lIHNyYyBkc3QgJiYKKwkJY2QgZHN0ICYmCisJCWFjdHVhbD0ieiQoZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlYmFzZSkiICYmCisJCXRlc3QgenRydWUgPSAkYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNwZWN0IHVybC1lbmNvZGluZyBvZiBmaWxlOi8vJyAnCisJZ2l0IGluaXQgeCt5ICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJFBXRC94K3kiIHh5LXVybC0xICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJFBXRC94JTJCeSIgeHktdXJsLTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IHF1ZXJ5LXN0cmluZy1kZWNvZGUgKyBpbiBVUkxzJyAnCisJcm0gLXJmIHgreSAmJgorCWdpdCBpbml0ICJ4IHkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICJmaWxlOi8vJFBXRC94K3kiIHh5LW5vLXBsdXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IHJlc3BlY3QgdXJsLWVuY29kaW5nIG9mIG5vbi11cmwgcGF0aCcgJworCWdpdCBpbml0IHgreSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSB4JTJCeSB4eS1yZWd1bGFyICYmCisJZ2l0IGNsb25lIHgreSB4eS1yZWd1bGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNlcGFyYXRlIGdpdGRpcicgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgY2xvbmUgLS1zZXBhcmF0ZS1naXQtZGlyIHJlYWxnaXRkaXIgc3JjIGRzdCAmJgorCXRlc3QgLWQgcmVhbGdpdGRpci9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNlcGFyYXRlIGdpdGRpcjogb3V0cHV0JyAnCisJZWNobyAiZ2l0ZGlyOiAkKHB3ZCkvcmVhbGdpdGRpciIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZHN0Ly5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZnJvbSAuZ2l0IGZpbGUnICcKKwlnaXQgY2xvbmUgZHN0Ly5naXQgZHN0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmcm9tIC5naXQgZ2l0ZmlsZScgJworCSgKKwkJY2QgZHN0MiAmJgorCQlnaXQgZmV0Y2ggLi4vZHN0Ly5naXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZyb20gZ2l0ZmlsZSBwYXJlbnQnICcKKwkoCisJCWNkIGRzdDIgJiYKKwkJZ2l0IGZldGNoIC4uL2RzdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2VwYXJhdGUgZ2l0ZGlyIHdoZXJlIHRhcmdldCBhbHJlYWR5IGV4aXN0cycgJworCXJtIC1yZiBkc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1zZXBhcmF0ZS1naXQtZGlyIHJlYWxnaXRkaXIgc3JjIGRzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLXJlZmVyZW5jZSBmcm9tIG9yaWdpbmFsJyAnCisJZ2l0IGNsb25lIC0tc2hhcmVkIC0tYmFyZSBzcmMgc3JjLTEgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIHNyYyBzcmMtMiAmJgorCWdpdCBjbG9uZSAtLXJlZmVyZW5jZT1zcmMtMiAtLWJhcmUgc3JjLTEgdGFyZ2V0LTggJiYKKwlncmVwIC9zcmMtMi8gdGFyZ2V0LTgvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCBtb3JlIHRoYW4gb25lIC0tcmVmZXJlbmNlJyAnCisJZ2l0IGNsb25lIC0tYmFyZSBzcmMgc3JjLTMgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIHNyYyBzcmMtNCAmJgorCWdpdCBjbG9uZSAtLXJlZmVyZW5jZT1zcmMtMyAtLXJlZmVyZW5jZT1zcmMtNCBzcmMgdGFyZ2V0LTkgJiYKKwlncmVwIC9zcmMtMy8gdGFyZ2V0LTkvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCWdyZXAgL3NyYy00LyB0YXJnZXQtOS8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGZyb20gb3JpZ2luYWwgd2l0aCByZWxhdGl2ZSBhbHRlcm5hdGUnICcKKwlta2RpciBuZXN0ICYmCisJZ2l0IGNsb25lIC0tYmFyZSBzcmMgbmVzdC9zcmMtNSAmJgorCWVjaG8gLi4vLi4vLi4vc3JjLy5naXQvb2JqZWN0cyA+bmVzdC9zcmMtNS9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCWdpdCBjbG9uZSAtLWJhcmUgbmVzdC9zcmMtNSB0YXJnZXQtMTAgJiYKKwlncmVwIC9zcmMvXFwuZ2l0L29iamVjdHMgdGFyZ2V0LTEwL29iamVjdHMvaW5mby9hbHRlcm5hdGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNoZWNraW5nIG91dCBhIHRhZycgJworCWdpdCBjbG9uZSAtLWJyYW5jaD1zb21lLXRhZyBzcmMgZHN0LnRhZyAmJgorCUdJVF9ESVI9c3JjLy5naXQgZ2l0IHJldi1wYXJzZSBzb21lLXRhZyA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkc3QudGFnLy5naXQvSEVBRCAmJgorCUdJVF9ESVI9ZHN0LnRhZy8uZ2l0IGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5mZXRjaCA+ZmV0Y2guYWN0dWFsICYmCisJZWNobyAiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiID5mZXRjaC5leHBlY3RlZCAmJgorCXRlc3RfY21wIGZldGNoLmV4cGVjdGVkIGZldGNoLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgc3NoIHdyYXBwZXInICcKKwljcCAiJEdJVF9CVUlMRF9ESVIvdC9oZWxwZXIvdGVzdC1mYWtlLXNzaCRYIiBcCisJCSIkVFJBU0hfRElSRUNUT1JZL3NzaCRYIiAmJgorCUdJVF9TU0g9IiRUUkFTSF9ESVJFQ1RPUlkvc3NoJFgiICYmCisJZXhwb3J0IEdJVF9TU0ggJiYKKwlleHBvcnQgVFJBU0hfRElSRUNUT1JZICYmCisJPiIkVFJBU0hfRElSRUNUT1JZIi9zc2gtb3V0cHV0CisnCisKK2NvcHlfc3NoX3dyYXBwZXJfYXMgKCkgeworCXJtIC1mICIkezElJFh9JFgiICYmCisJY3AgIiRUUkFTSF9ESVJFQ1RPUlkvc3NoJFgiICIkezElJFh9JFgiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAkKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJHsxJSRYfSRYIikiICYmCisJR0lUX1NTSD0iJHsxJSRYfSRYIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiR0lUX1NTSD1cIlwkVFJBU0hfRElSRUNUT1JZL3NzaFwkWFwiIgorfQorCitleHBlY3Rfc3NoICgpIHsKKwl0ZXN0X3doZW5fZmluaXNoZWQgJworCQkoY2QgIiRUUkFTSF9ESVJFQ1RPUlkiICYmIHJtIC1mIHNzaC1leHBlY3QgJiYgPnNzaC1vdXRwdXQpCisJJyAmJgorCXsKKwkJY2FzZSAiJCMiIGluCisJCTEpCisJCQk7OworCQkyKQorCQkJZWNobyAic3NoOiAkMSBnaXQtdXBsb2FkLXBhY2sgJyQyJyIKKwkJCTs7CisJCTMpCisJCQllY2hvICJzc2g6ICQxICQyIGdpdC11cGxvYWQtcGFjayAnJDMnIgorCQkJOzsKKwkJKikKKwkJCWVjaG8gInNzaDogJDEgJDIgZ2l0LXVwbG9hZC1wYWNrICckMycgJDQiCisJCWVzYWMKKwl9ID4iJFRSQVNIX0RJUkVDVE9SWS9zc2gtZXhwZWN0IiAmJgorCShjZCAiJFRSQVNIX0RJUkVDVE9SWSIgJiYgdGVzdF9jbXAgc3NoLWV4cGVjdCBzc2gtb3V0cHV0KQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBteWhvc3Q6c3JjIHVzZXMgc3NoJyAnCisJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIGdpdCBjbG9uZSBteWhvc3Q6c3JjIHNzaC1jbG9uZSAmJgorCWV4cGVjdF9zc2ggbXlob3N0IHNyYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVywhQ1lHV0lOICdjbG9uZSBsb2NhbCBwYXRoIGZvbzpiYXInICcKKwljcCAtUiBzcmMgImZvbzpiYXIiICYmCisJZ2l0IGNsb25lICJmb286YmFyIiBmb29iYXIgJiYKKwlleHBlY3Rfc3NoIG5vbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhY2tldGVkIGhvc3RuYW1lcyBhcmUgc3RpbGwgc3NoJyAnCisJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIGdpdCBjbG9uZSAiW215aG9zdDoxMjNdOnNyYyIgc3NoLWJyYWNrZXQtY2xvbmUgJiYKKwlleHBlY3Rfc3NoICItcCAxMjMiIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT3BlblNTSCB2YXJpYW50IHBhc3NlcyAtNCcgJworCUdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBnaXQgY2xvbmUgLTQgIltteWhvc3Q6MTIzXTpzcmMiIHNzaC1pcHY0LWNsb25lICYmCisJZXhwZWN0X3NzaCAiLTQgLXAgMTIzIiBteWhvc3Qgc3JjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhcmlhbnQgY2FuIGJlIG92ZXJyaWRkZW4nICcKKwljb3B5X3NzaF93cmFwcGVyX2FzICIkVFJBU0hfRElSRUNUT1JZL3B1dHR5IiAmJgorCWdpdCAtYyBzc2gudmFyaWFudD1wdXR0eSBjbG9uZSAtNCAiW215aG9zdDoxMjNdOnNyYyIgc3NoLXB1dHR5LWNsb25lICYmCisJZXhwZWN0X3NzaCAiLTQgLVAgMTIzIiBteWhvc3Qgc3JjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhcmlhbnQ9YXV0byBwaWNrcyBiYXNlZCBvbiBiYXNlbmFtZScgJworCWNvcHlfc3NoX3dyYXBwZXJfYXMgIiRUUkFTSF9ESVJFQ1RPUlkvcGxpbmsiICYmCisJZ2l0IC1jIHNzaC52YXJpYW50PWF1dG8gY2xvbmUgLTQgIltteWhvc3Q6MTIzXTpzcmMiIHNzaC1hdXRvLWNsb25lICYmCisJZXhwZWN0X3NzaCAiLTQgLVAgMTIzIiBteWhvc3Qgc3JjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBkb2VzIG5vdCBzdXBwb3J0IC00Ly02JyAnCisJY29weV9zc2hfd3JhcHBlcl9hcyAiJFRSQVNIX0RJUkVDVE9SWS9zaW1wbGUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC00ICJteWhvc3Q6c3JjIiBzc2gtNC1jbG9uZS1zaW1wbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIGRvZXMgbm90IHN1cHBvcnQgcG9ydCcgJworCWNvcHlfc3NoX3dyYXBwZXJfYXMgIiRUUkFTSF9ESVJFQ1RPUlkvc2ltcGxlIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAiW215aG9zdDoxMjNdOnNyYyIgc3NoLWJyYWNrZXQtY2xvbmUtc2ltcGxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwbGluayBpcyB0cmVhdGVkIGFzIHNpbXBsZScgJworCWNvcHlfc3NoX3dyYXBwZXJfYXMgIiRUUkFTSF9ESVJFQ1RPUlkvdXBsaW5rIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAiW215aG9zdDoxMjNdOnNyYyIgc3NoLWJyYWNrZXQtY2xvbmUtdXBsaW5rICYmCisJZ2l0IGNsb25lICJteWhvc3Q6c3JjIiBzc2gtY2xvbmUtdXBsaW5rICYmCisJZXhwZWN0X3NzaCBteWhvc3Qgc3JjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09wZW5TU0gtbGlrZSB1cGxpbmsgaXMgdHJlYXRlZCBhcyBzc2gnICcKKwl3cml0ZV9zY3JpcHQgIiRUUkFTSF9ESVJFQ1RPUlkvdXBsaW5rIiA8PC1FT0YgJiYKKwlpZiB0ZXN0ICJcJDEiID0gIi1HIgorCXRoZW4KKwkJZXhpdCAwCisJZmkgJiYKKwlleGVjICJcJFRSQVNIX0RJUkVDVE9SWS9zc2gkWCIgIlwkQCIKKwlFT0YKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIFwiXCRUUkFTSF9ESVJFQ1RPUlkvdXBsaW5rXCIiICYmCisJR0lUX1NTSD0iJFRSQVNIX0RJUkVDVE9SWS91cGxpbmsiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJHSVRfU1NIPVwiXCRUUkFTSF9ESVJFQ1RPUlkvc3NoXCRYXCIiICYmCisJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIGdpdCBjbG9uZSAiW215aG9zdDoxMjNdOnNyYyIgc3NoLWJyYWNrZXQtY2xvbmUtc3NobGlrZS11cGxpbmsgJiYKKwlleHBlY3Rfc3NoICItcCAxMjMiIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxpbmsgaXMgdHJlYXRlZCBzcGVjaWFsbHkgKGFzIHB1dHR5KScgJworCWNvcHlfc3NoX3dyYXBwZXJfYXMgIiRUUkFTSF9ESVJFQ1RPUlkvcGxpbmsiICYmCisJZ2l0IGNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZS1wbGluay0wICYmCisJZXhwZWN0X3NzaCAiLVAgMTIzIiBteWhvc3Qgc3JjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsaW5rLmV4ZSBpcyB0cmVhdGVkIHNwZWNpYWxseSAoYXMgcHV0dHkpJyAnCisJY29weV9zc2hfd3JhcHBlcl9hcyAiJFRSQVNIX0RJUkVDVE9SWS9wbGluay5leGUiICYmCisJZ2l0IGNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZS1wbGluay0xICYmCisJZXhwZWN0X3NzaCAiLVAgMTIzIiBteWhvc3Qgc3JjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RvcnRvaXNlcGxpbmsgaXMgbGlrZSBwdXR0eSwgd2l0aCBleHRyYSBhcmd1bWVudHMnICcKKwljb3B5X3NzaF93cmFwcGVyX2FzICIkVFJBU0hfRElSRUNUT1JZL3RvcnRvaXNlcGxpbmsiICYmCisJZ2l0IGNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZS1wbGluay0yICYmCisJZXhwZWN0X3NzaCAiLWJhdGNoIC1QIDEyMyIgbXlob3N0IHNyYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkb3VibGUgcXVvdGVkIHBsaW5rLmV4ZSBpbiBHSVRfU1NIX0NPTU1BTkQnICcKKwljb3B5X3NzaF93cmFwcGVyX2FzICIkVFJBU0hfRElSRUNUT1JZL3BsaW5rLmV4ZSIgJiYKKwlHSVRfU1NIX0NPTU1BTkQ9IlwiJFRSQVNIX0RJUkVDVE9SWS9wbGluay5leGVcIiAtdiIgXAorCQlnaXQgY2xvbmUgIltteWhvc3Q6MTIzXTpzcmMiIHNzaC1icmFja2V0LWNsb25lLXBsaW5rLTMgJiYKKwlleHBlY3Rfc3NoICItdiAtUCAxMjMiIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlIHF1b3RlZCBwbGluay5leGUgaW4gR0lUX1NTSF9DT01NQU5EJyAnCisJY29weV9zc2hfd3JhcHBlcl9hcyAiJFRSQVNIX0RJUkVDVE9SWS9wbGluay5leGUiICYmCisJR0lUX1NTSF9DT01NQU5EPSIkU1EkVFJBU0hfRElSRUNUT1JZL3BsaW5rLmV4ZSRTUSAtdiIgXAorCQlnaXQgY2xvbmUgIltteWhvc3Q6MTIzXTpzcmMiIHNzaC1icmFja2V0LWNsb25lLXBsaW5rLTQgJiYKKwlleHBlY3Rfc3NoICItdiAtUCAxMjMiIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX1NTSF9WQVJJQU5UIG92ZXJyaWRlcyBwbGluayBkZXRlY3Rpb24nICcKKwljb3B5X3NzaF93cmFwcGVyX2FzICIkVFJBU0hfRElSRUNUT1JZL3BsaW5rIiAmJgorCUdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBHSVRfU1NIX1ZBUklBTlQ9c3NoIFwKKwkJZ2l0IGNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZS12YXJpYW50LTEgJiYKKwlleHBlY3Rfc3NoICItcCAxMjMiIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3NoLnZhcmlhbnQgb3ZlcnJpZGVzIHBsaW5rIGRldGVjdGlvbicgJworCWNvcHlfc3NoX3dyYXBwZXJfYXMgIiRUUkFTSF9ESVJFQ1RPUlkvcGxpbmsiICYmCisJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIGdpdCAtYyBzc2gudmFyaWFudD1zc2ggXAorCQljbG9uZSAiW215aG9zdDoxMjNdOnNyYyIgc3NoLWJyYWNrZXQtY2xvbmUtdmFyaWFudC0yICYmCisJZXhwZWN0X3NzaCAiLXAgMTIzIiBteWhvc3Qgc3JjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9TU0hfVkFSSUFOVCBvdmVycmlkZXMgcGxpbmsgZGV0ZWN0aW9uIHRvIHBsaW5rJyAnCisJY29weV9zc2hfd3JhcHBlcl9hcyAiJFRSQVNIX0RJUkVDVE9SWS9wbGluayIgJiYKKwlHSVRfU1NIX1ZBUklBTlQ9cGxpbmsgXAorCWdpdCBjbG9uZSAiW215aG9zdDoxMjNdOnNyYyIgc3NoLWJyYWNrZXQtY2xvbmUtdmFyaWFudC0zICYmCisJZXhwZWN0X3NzaCAiLVAgMTIzIiBteWhvc3Qgc3JjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9TU0hfVkFSSUFOVCBvdmVycmlkZXMgcGxpbmsgdG8gdG9ydG9pc2VwbGluaycgJworCWNvcHlfc3NoX3dyYXBwZXJfYXMgIiRUUkFTSF9ESVJFQ1RPUlkvcGxpbmsiICYmCisJR0lUX1NTSF9WQVJJQU5UPXRvcnRvaXNlcGxpbmsgXAorCWdpdCBjbG9uZSAiW215aG9zdDoxMjNdOnNyYyIgc3NoLWJyYWNrZXQtY2xvbmUtdmFyaWFudC00ICYmCisJZXhwZWN0X3NzaCAiLWJhdGNoIC1QIDEyMyIgbXlob3N0IHNyYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbiBmYWlsdXJlIG9uIGJyb2tlbiBxdW90aW5nJyAnCisJdGVzdF9tdXN0X2ZhaWwgXAorCQllbnYgR0lUX1NTSF9DT01NQU5EPSIke1NRfXBsaW5rLmV4ZSAtdiIgXAorCQlnaXQgY2xvbmUgIltteWhvc3Q6MTIzXTpzcmMiIHNxLWZhaWx1cmUKKycKKworY291bnRlcj0wCisjICQxIHVybAorIyAkMiBub25lfGhvc3QKKyMgJDMgcGF0aAordGVzdF9jbG9uZV91cmwgKCkgeworCWNvdW50ZXI9JCgoJGNvdW50ZXIgKyAxKSkKKwl0ZXN0X21pZ2h0X2ZhaWwgZW52IEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBnaXQgY2xvbmUgIiQxIiB0bXAkY291bnRlciAmJgorCXNoaWZ0ICYmCisJZXhwZWN0X3NzaCAiJEAiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXLCFDWUdXSU4gJ2Nsb25lIGM6dGVtcCBpcyBzc2wnICcKKwl0ZXN0X2Nsb25lX3VybCBjOnRlbXAgYyB0ZW1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ2Nsb25lIGM6dGVtcCBpcyBkb3MgZHJpdmUnICcKKwl0ZXN0X2Nsb25lX3VybCBjOnRlbXAgbm9uZQorJworCisjaXAgdjQKK2ZvciByZXBvIGluIHJlcCByZXAvaG9tZS9wcm9qZWN0IDEyMworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBob3N0OiRyZXBvIiAnCisJCXRlc3RfY2xvbmVfdXJsIGhvc3Q6JHJlcG8gaG9zdCAkcmVwbworCScKK2RvbmUKKworI2lwdjYKK2ZvciByZXBvIGluIHJlcCByZXAvaG9tZS9wcm9qZWN0IDEyMworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBbOjoxXTokcmVwbyIgJworCQl0ZXN0X2Nsb25lX3VybCBbOjoxXTokcmVwbyA6OjEgIiRyZXBvIgorCScKK2RvbmUKKyNob21lIGRpcmVjdG9yeQordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgaG9zdDovfnJlcG8iICcKKwl0ZXN0X2Nsb25lX3VybCBob3N0Oi9+cmVwbyBob3N0ICJ+cmVwbyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgWzo6MV06L35yZXBvIiAnCisJdGVzdF9jbG9uZV91cmwgWzo6MV06L35yZXBvIDo6MSAifnJlcG8iCisnCisKKyMgQ29ybmVyIGNhc2VzCitmb3IgdXJsIGluIGZvby9iYXI6YmF6IFtmb29dYmFyL2JhejpxdXggW2Zvby9iYXJdOmJhegorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSAkdXJsIGlzIG5vdCBzc2giICcKKwkJdGVzdF9jbG9uZV91cmwgJHVybCBub25lCisJJworZG9uZQorCisjd2l0aCBzc2g6Ly8gc2NoZW1lCisjaWdub3JlIHRyYWlsaW5nIGNvbG9uCitmb3IgdGNvbCBpbiAiIiA6CitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIHNzaDovL2hvc3QueHokdGNvbC9ob21lL3VzZXIvcmVwbyIgJworCQl0ZXN0X2Nsb25lX3VybCAic3NoOi8vaG9zdC54eiR0Y29sL2hvbWUvdXNlci9yZXBvIiBob3N0Lnh6IC9ob21lL3VzZXIvcmVwbworCScKKwkjIGZyb20gaG9tZSBkaXJlY3RvcnkKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBzc2g6Ly9ob3N0Lnh6JHRjb2wvfnJlcG8iICcKKwl0ZXN0X2Nsb25lX3VybCAic3NoOi8vaG9zdC54eiR0Y29sL35yZXBvIiBob3N0Lnh6ICJ+cmVwbyIKKycKK2RvbmUKKworIyB3aXRoIHBvcnQgbnVtYmVyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzc2g6Ly9ob3N0Lnh6OjIyL2hvbWUvdXNlci9yZXBvJyAnCisJdGVzdF9jbG9uZV91cmwgInNzaDovL2hvc3QueHo6MjIvaG9tZS91c2VyL3JlcG8iICItcCAyMiBob3N0Lnh6IiAiL2hvbWUvdXNlci9yZXBvIgorJworCisjIGZyb20gaG9tZSBkaXJlY3Rvcnkgd2l0aCBwb3J0IG51bWJlcgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc3NoOi8vaG9zdC54ejoyMi9+cmVwbycgJworCXRlc3RfY2xvbmVfdXJsICJzc2g6Ly9ob3N0Lnh6OjIyL35yZXBvIiAiLXAgMjIgaG9zdC54eiIgIn5yZXBvIgorJworCisjSVB2NgorZm9yIHR1YWggaW4gOjoxIFs6OjFdIFs6OjFdOiB1c2VyQDo6MSB1c2VyQFs6OjFdIHVzZXJAWzo6MV06IFt1c2VyQDo6MV0gW3VzZXJAOjoxXToKK2RvCisJZWhvc3Q9JChlY2hvICR0dWFoIHwgc2VkIC1lICJzLzFdOi8xXS8iIHwgdHIgLWQgIltdIikKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBzc2g6Ly8kdHVhaC9ob21lL3VzZXIvcmVwbyIgIgorCSAgdGVzdF9jbG9uZV91cmwgc3NoOi8vJHR1YWgvaG9tZS91c2VyL3JlcG8gJGVob3N0IC9ob21lL3VzZXIvcmVwbworCSIKK2RvbmUKKworI0lQdjYgZnJvbSBob21lIGRpcmVjdG9yeQorZm9yIHR1YWggaW4gOjoxIFs6OjFdIHVzZXJAOjoxIHVzZXJAWzo6MV0gW3VzZXJAOjoxXQorZG8KKwlldWFoPSQoZWNobyAkdHVhaCB8IHRyIC1kICJbXSIpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgc3NoOi8vJHR1YWgvfnJlcG8iICIKKwkgIHRlc3RfY2xvbmVfdXJsIHNzaDovLyR0dWFoL35yZXBvICRldWFoICd+cmVwbycKKwkiCitkb25lCisKKyNJUHY2IHdpdGggcG9ydCBudW1iZXIKK2ZvciB0dWFoIGluIFs6OjFdIHVzZXJAWzo6MV0gW3VzZXJAOjoxXQorZG8KKwlldWFoPSQoZWNobyAkdHVhaCB8IHRyIC1kICJbXSIpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgc3NoOi8vJHR1YWg6MjIvaG9tZS91c2VyL3JlcG8iICIKKwkgIHRlc3RfY2xvbmVfdXJsIHNzaDovLyR0dWFoOjIyL2hvbWUvdXNlci9yZXBvICctcCAyMicgJGV1YWggL2hvbWUvdXNlci9yZXBvCisJIgorZG9uZQorCisjSVB2NiBmcm9tIGhvbWUgZGlyZWN0b3J5IHdpdGggcG9ydCBudW1iZXIKK2ZvciB0dWFoIGluIFs6OjFdIHVzZXJAWzo6MV0gW3VzZXJAOjoxXQorZG8KKwlldWFoPSQoZWNobyAkdHVhaCB8IHRyIC1kICJbXSIpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgc3NoOi8vJHR1YWg6MjIvfnJlcG8iICIKKwkgIHRlc3RfY2xvbmVfdXJsIHNzaDovLyR0dWFoOjIyL35yZXBvICctcCAyMicgJGV1YWggJ35yZXBvJworCSIKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZnJvbSBhIHJlcG9zaXRvcnkgd2l0aCB0d28gaWRlbnRpY2FsIGJyYW5jaGVzJyAnCisKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYW5vdGhlciBtYXN0ZXIKKwkpICYmCisJZ2l0IGNsb25lIHNyYyB0YXJnZXQtMTEgJiYKKwl0ZXN0ICJ6JCggY2QgdGFyZ2V0LTExICYmIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCApIiA9IHpyZWZzL2hlYWRzL2Fub3RoZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFsbG93IGNsb25lIGxvY2FsbHknICcKKwlnaXQgY2xvbmUgLS1kZXB0aD0xIC0tbm8tbG9jYWwgc3JjIHNzcnJjYyAmJgorCWdpdCBjbG9uZSBzc3JyY2MgZGRzc3R0ICYmCisJdGVzdF9jbXAgc3NycmNjLy5naXQvc2hhbGxvdyBkZHNzdHQvLmdpdC9zaGFsbG93ICYmCisJKCBjZCBkZHNzdHQgJiYgZ2l0IGZzY2sgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfVFJBQ0VfUEFDS0ZJTEUgcHJvZHVjZXMgYSB1c2FibGUgcGFjaycgJworCXJtIC1yZiBkc3QuZ2l0ICYmCisJR0lUX1RSQUNFX1BBQ0tGSUxFPSRQV0QvdG1wLnBhY2sgZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1iYXJlIHNyYyBkc3QuZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlcGxheS5naXQgJiYKKwlnaXQgLUMgcmVwbGF5LmdpdCBpbmRleC1wYWNrIC12IC0tc3RkaW4gPHRtcC5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIG9uIGNhc2UtaW5zZW5zaXRpdmUgZnMnICcKKwlnaXQgaW5pdCBpY2FzZWZzICYmCisJKAorCQljZCBpY2FzZWZzICYmCisJCW89JChnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiA8L2Rldi9udWxsIHwgaGV4Mm9jdCkgJiYKKwkJdD0kKHByaW50ZiAiMTAwNjQ0IFhcMCR7b30xMDA2NDQgeFwwJHtvfSIgfAorCQkJZ2l0IGhhc2gtb2JqZWN0IC13IC10IHRyZWUgLS1zdGRpbikgJiYKKwkJYz0kKGdpdCBjb21taXQtdHJlZSAtbSBib2d1cyAkdCkgJiYKKwkJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9ib2d1cyAkYyAmJgorCQlnaXQgY2xvbmUgLWIgYm9ndXMgLiBib2d1cyAyPndhcm5pbmcKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ0FTRV9JTlNFTlNJVElWRV9GUyAnY29sbGlkaW5nIGZpbGUgZGV0ZWN0aW9uJyAnCisJZ3JlcCBYIGljYXNlZnMvd2FybmluZyAmJgorCWdyZXAgeCBpY2FzZWZzL3dhcm5pbmcgJiYKKwl0ZXN0X2kxOG5ncmVwICJ0aGUgZm9sbG93aW5nIHBhdGhzIGhhdmUgY29sbGlkZWQiIGljYXNlZnMvd2FybmluZworJworCitwYXJ0aWFsX2Nsb25lX3NlcnZlciAoKSB7CisJICAgICAgIFNFUlZFUj0iJDEiICYmCisKKwlybSAtcmYgIiRTRVJWRVIiIGNsaWVudCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRTRVJWRVIiICYmCisJdGVzdF9jb21taXQgLUMgIiRTRVJWRVIiIG9uZSAmJgorCUhBU0gxPSQoZ2l0IC1DICIkU0VSVkVSIiBoYXNoLW9iamVjdCBvbmUudCkgJiYKKwlnaXQgLUMgIiRTRVJWRVIiIHJldmVydCBIRUFEICYmCisJdGVzdF9jb21taXQgLUMgIiRTRVJWRVIiIHR3byAmJgorCUhBU0gyPSQoZ2l0IC1DICIkU0VSVkVSIiBoYXNoLW9iamVjdCB0d28udCkgJiYKKwl0ZXN0X2NvbmZpZyAtQyAiJFNFUlZFUiIgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJdGVzdF9jb25maWcgLUMgIiRTRVJWRVIiIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEKK30KKworcGFydGlhbF9jbG9uZSAoKSB7CisJICAgICAgIFNFUlZFUj0iJDEiICYmCisJICAgICAgIFVSTD0iJDIiICYmCisKKwlwYXJ0aWFsX2Nsb25lX3NlcnZlciAiJHtTRVJWRVJ9IiAmJgorCWdpdCBjbG9uZSAtLWZpbHRlcj1ibG9iOmxpbWl0PTAgIiRVUkwiIGNsaWVudCAmJgorCisJZ2l0IC1DIGNsaWVudCBmc2NrICYmCisKKwkjIEVuc3VyZSB0aGF0IHVubmVlZGVkIGJsb2JzIGFyZSBub3QgaW5hZHZlcnRlbnRseSBmZXRjaGVkLgorCXRlc3RfY29uZmlnIC1DIGNsaWVudCByZW1vdGUub3JpZ2luLnByb21pc29yICJmYWxzZSIgJiYKKwlnaXQgLUMgY2xpZW50IGNvbmZpZyAtLXVuc2V0IHJlbW90ZS5vcmlnaW4ucGFydGlhbGNsb25lZmlsdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGNsaWVudCBjYXQtZmlsZSAtZSAiJEhBU0gxIiAmJgorCisJIyBCdXQgdGhpcyBibG9iIHdhcyBmZXRjaGVkLCBiZWNhdXNlIGNsb25lIHBlcmZvcm1zIGFuIGluaXRpYWwgY2hlY2tvdXQKKwlnaXQgLUMgY2xpZW50IGNhdC1maWxlIC1lICIkSEFTSDIiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgY2xvbmUnICcKKwlwYXJ0aWFsX2Nsb25lIHNlcnZlciAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgY2xvbmUgd2l0aCAtbycgJworCXBhcnRpYWxfY2xvbmVfc2VydmVyIHNlcnZlciAmJgorCWdpdCBjbG9uZSAtbyBibGFoIC0tZmlsdGVyPWJsb2I6bGltaXQ9MCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIGNsb25lOiB3YXJuIGlmIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IG9iamVjdCBmaWx0ZXJpbmcnICcKKwlybSAtcmYgc2VydmVyIGNsaWVudCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gc2VydmVyICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIG9uZSAmJgorCisJZ2l0IGNsb25lIC0tZmlsdGVyPWJsb2I6bGltaXQ9MCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudCAyPiBlcnIgJiYKKworCXRlc3RfaTE4bmdyZXAgImZpbHRlcmluZyBub3QgcmVjb2duaXplZCBieSBzZXJ2ZXIiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXRjaCBtaXNzaW5nIGJsb2IgcmVxdWVzdCBkdXJpbmcgY2hlY2tvdXQnICcKKwlybSAtcmYgc2VydmVyIGNsaWVudCAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyBzZXJ2ZXIgJiYKKwllY2hvIGEgPnNlcnZlci9hICYmCisJZWNobyBiID5zZXJ2ZXIvYiAmJgorCWdpdCAtQyBzZXJ2ZXIgYWRkIGEgYiAmJgorCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLW0geCAmJgorCWVjaG8gYWEgPnNlcnZlci9hICYmCisJZWNobyBiYiA+c2VydmVyL2IgJiYKKwlnaXQgLUMgc2VydmVyIGFkZCBhIGIgJiYKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtbSB4ICYmCisKKwl0ZXN0X2NvbmZpZyAtQyBzZXJ2ZXIgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKworCWdpdCBjbG9uZSAtLWZpbHRlcj1ibG9iOmxpbWl0PTAgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBjbGllbnQgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgbmVnb3RpYXRpb24gYnkgY2hlY2tpbmcgdGhhdCB0aGVyZSBpcworCSMgb25seSAiZG9uZSIgbGluZSBzZW50LiAoImRvbmUiIG1hcmtzIHRoZSBlbmQgb2YgbmVnb3RpYXRpb24uKQorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCBjaGVja291dCBIRUFEXiAmJgorCWdyZXAgImdpdD4gZG9uZSIgdHJhY2UgPmRvbmVfbGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGRvbmVfbGluZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmF0Y2ggbWlzc2luZyBibG9iIHJlcXVlc3QgZG9lcyBub3QgaW5hZHZlcnRlbnRseSB0cnkgdG8gZmV0Y2ggZ2l0bGlua3MnICcKKwlybSAtcmYgc2VydmVyIGNsaWVudCAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvX2Zvcl9zdWJtb2R1bGUgJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvX2Zvcl9zdWJtb2R1bGUgeCAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyBzZXJ2ZXIgJiYKKwllY2hvIGEgPnNlcnZlci9hICYmCisJZWNobyBiID5zZXJ2ZXIvYiAmJgorCWdpdCAtQyBzZXJ2ZXIgYWRkIGEgYiAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1tIHggJiYKKworCWVjaG8gYWEgPnNlcnZlci9hICYmCisJZWNobyBiYiA+c2VydmVyL2IgJiYKKwkjIEFsc28gYWRkIGEgZ2l0bGluayBwb2ludGluZyB0byBhbiBhcmJpdHJhcnkgcmVwb3NpdG9yeQorCWdpdCAtQyBzZXJ2ZXIgc3VibW9kdWxlIGFkZCAiJChwd2QpL3JlcG9fZm9yX3N1Ym1vZHVsZSIgYyAmJgorCWdpdCAtQyBzZXJ2ZXIgYWRkIGEgYiBjICYmCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLW0geCAmJgorCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dmaWx0ZXIgMSAmJgorCXRlc3RfY29uZmlnIC1DIHNlcnZlciB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxICYmCisKKwkjIE1ha2Ugc3VyZSB0aGF0IGl0IHN1Y2NlZWRzCisJZ2l0IGNsb25lIC0tZmlsdGVyPWJsb2I6bGltaXQ9MCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudAorJworCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorc3RhcnRfaHR0cGQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBjbG9uZSB1c2luZyBIVFRQJyAnCisJcGFydGlhbF9jbG9uZSAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9zZXJ2ZXIiICIkSFRUUERfVVJML3NtYXJ0L3NlcnZlciIKKycKKworIyBETyBOT1QgYWRkIG5vbi1odHRwZC1zcGVjaWZpYyB0ZXN0cyBoZXJlLCBiZWNhdXNlIHRoZSBsYXN0IHBhcnQgb2YgdGhpcworIyB0ZXN0IHNjcmlwdCBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gaHR0cGQgaXMgYXZhaWxhYmxlIGFuZCBlbmFibGVkLgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MDItY2xvbmUtcmVtb3RlLWV4ZWMuc2ggYi90L3Q1NjAyLWNsb25lLXJlbW90ZS1leGVjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNiY2NlYWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjAyLWNsb25lLXJlbW90ZS1leGVjLnNoCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPWNsb25lCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvICIjIS9iaW4vc2giID4gbm90X3NzaCAmJgorCWVjaG8gImVjaG8gXCJcJCpcIiA+IG5vdF9zc2hfb3V0cHV0IiA+PiBub3Rfc3NoICYmCisJZWNobyAiZXhpdCAxIiA+PiBub3Rfc3NoICYmCisJY2htb2QgK3ggbm90X3NzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBjYWxscyBnaXQgdXBsb2FkLXBhY2sgdW5xdWFsaWZpZWQgd2l0aCBubyAtdSBvcHRpb24nICcKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1NTSD0uL25vdF9zc2ggZ2l0IGNsb25lIGxvY2FsaG9zdDovcGF0aC90by9yZXBvIGp1bmsgJiYKKwllY2hvICJsb2NhbGhvc3QgZ2l0LXVwbG9hZC1wYWNrICdcJycvcGF0aC90by9yZXBvJ1wnJyIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgbm90X3NzaF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY2FsbHMgc3BlY2lmaWVkIGdpdCB1cGxvYWQtcGFjayB3aXRoIC11IG9wdGlvbicgJworCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfU1NIPS4vbm90X3NzaCBcCisJCWdpdCBjbG9uZSAtdSAuL3NvbWV0aGluZy9iaW4vZ2l0LXVwbG9hZC1wYWNrIGxvY2FsaG9zdDovcGF0aC90by9yZXBvIGp1bmsgJiYKKwllY2hvICJsb2NhbGhvc3QgLi9zb21ldGhpbmcvYmluL2dpdC11cGxvYWQtcGFjayAnXCcnL3BhdGgvdG8vcmVwbydcJyciID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG5vdF9zc2hfb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYwMy1jbG9uZS1kaXJuYW1lLnNoIGIvdC90NTYwMy1jbG9uZS1kaXJuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEzYjVlNWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjAzLWNsb25lLWRpcm5hbWUuc2gKQEAgLTAsMCArMSwxMDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayBvdXRwdXQgZGlyZWN0b3J5IG5hbWVzIHVzZWQgYnkgZ2l0LWNsb25lJworLiAuL3Rlc3QtbGliLnNoCisKKyMgd2UgdXNlIGEgZmFrZSBzc2ggd3JhcHBlciB0aGF0IGlnbm9yZXMgdGhlIGFyZ3VtZW50cworIyBlbnRpcmVseTsgd2UgcmVhbGx5IG9ubHkgY2FyZSB0aGF0IHdlIGdldCBfc29tZV8gcmVwbywKKyMgYXMgdGhlIHJlYWwgdGVzdCBpcyB3aGF0IGNsb25lIGRvZXMgb24gdGhlIGxvY2FsIHNpZGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNzaCB3cmFwcGVyJyAnCisJd3JpdGVfc2NyaXB0ICIkVFJBU0hfRElSRUNUT1JZL3NzaC13cmFwcGVyIiA8PC1cRU9GICYmCisJZ2l0IHVwbG9hZC1wYWNrICIkVFJBU0hfRElSRUNUT1JZIgorCUVPRgorCUdJVF9TU0g9IiRUUkFTSF9ESVJFQ1RPUlkvc3NoLXdyYXBwZXIiICYmCisJR0lUX1NTSF9WQVJJQU5UPXNzaCAmJgorCWV4cG9ydCBHSVRfU1NIICYmCisJZXhwb3J0IEdJVF9TU0hfVkFSSUFOVCAmJgorCWV4cG9ydCBUUkFTSF9ESVJFQ1RPUlkKKycKKworIyBtYWtlIHN1cmUgdGhhdCBjbG9uaW5nICQxIHJlc3VsdHMgaW4gbG9jYWwgZGlyZWN0b3J5ICQyCit0ZXN0X2Nsb25lX2RpciAoKSB7CisJdXJsPSQxOyBzaGlmdAorCWRpcj0kMTsgc2hpZnQKKwlleHBlY3Q9c3VjY2VzcworCWJhcmU9bm9uLWJhcmUKKwljbG9uZV9vcHRzPQorCWZvciBpIGluICIkQCIKKwlkbworCQljYXNlICIkaSIgaW4KKwkJZmFpbCkKKwkJCWV4cGVjdD1mYWlsdXJlCisJCQk7OworCQliYXJlKQorCQkJYmFyZT1iYXJlCisJCQljbG9uZV9vcHRzPS0tYmFyZQorCQkJOzsKKwkJZXNhYworCWRvbmUKKwl0ZXN0X2V4cGVjdF8kZXhwZWN0ICJjbG9uZSBvZiAkdXJsIGdvZXMgdG8gJGRpciAoJGJhcmUpIiAiCisJCXJtIC1yZiAkZGlyICYmCisJCWdpdCBjbG9uZSAkY2xvbmVfb3B0cyAkdXJsICYmCisJCXRlc3RfcGF0aF9pc19kaXIgJGRpcgorCSIKK30KKworIyBiYXNpYyBzeW50YXggd2l0aCBiYXJlIGFuZCBub24tYmFyZSB2YXJpYW50cwordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28gZm9vCit0ZXN0X2Nsb25lX2RpciBob3N0OmZvbyBmb28uZ2l0IGJhcmUKK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLmdpdCBmb28KK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLmdpdCBmb28uZ2l0IGJhcmUKK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLy5naXQgZm9vCit0ZXN0X2Nsb25lX2RpciBob3N0OmZvby8uZ2l0IGZvby5naXQgYmFyZQorCisjIHNpbWlsYXIsIGJ1dCB1c2luZyBzc2ggVVJMIHJhdGhlciB0aGFuIGhvc3Q6cGF0aCBzeW50YXgKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvZm9vIGZvbwordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb28gZm9vLmdpdCBiYXJlCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0L2Zvby5naXQgZm9vCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0L2Zvby5naXQgZm9vLmdpdCBiYXJlCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0L2Zvby8uZ2l0IGZvbwordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb28vLmdpdCBmb28uZ2l0IGJhcmUKKworIyB3ZSBzaG91bGQgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgYW5kIC5naXQgc3VmZml4ZXMKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvZm9vLyBmb28KK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvZm9vLy8vIGZvbwordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb28vLmdpdC8gZm9vCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0L2Zvby5naXQvIGZvbwordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb28uZ2l0Ly8vIGZvbwordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb28vLy8uZ2l0LyBmb28KK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvZm9vLy5naXQvLy8gZm9vCisKK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLyBmb28KK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLy8vIGZvbwordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28uZ2l0LyBmb28KK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLy5naXQvIGZvbwordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28uZ2l0Ly8vIGZvbwordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28vLy8uZ2l0LyBmb28KK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLy5naXQvLy8gZm9vCisKKyMgb21pdHRpbmcgdGhlIHBhdGggc2hvdWxkIGRlZmF1bHQgdG8gdGhlIGhvc3RuYW1lCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0LyBob3N0Cit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0OjEyMzQvIGhvc3QKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL3VzZXJAaG9zdC8gaG9zdAordGVzdF9jbG9uZV9kaXIgaG9zdDovIGhvc3QKKworIyBhdXRoIG1hdGVyaWFscyBzaG91bGQgYmUgcmVkYWN0ZWQKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL3VzZXI6cGFzc3dvcmRAaG9zdC8gaG9zdAordGVzdF9jbG9uZV9kaXIgc3NoOi8vdXNlcjpwYXNzd29yZEBob3N0OjEyMzQvIGhvc3QKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL3VzZXI6cGFzc3dAcmRAaG9zdDoxMjM0LyBob3N0Cit0ZXN0X2Nsb25lX2RpciB1c2VyQGhvc3Q6LyBob3N0Cit0ZXN0X2Nsb25lX2RpciB1c2VyOnBhc3N3b3JkQGhvc3Q6LyBob3N0Cit0ZXN0X2Nsb25lX2RpciB1c2VyOnBhc3N3QHJkQGhvc3Q6LyBob3N0CisKKyMgYXV0aC1saWtlIG1hdGVyaWFsIHNob3VsZCBub3QgYmUgZHJvcHBlZAordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb29AYmFyIGZvb0BiYXIKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvZm9vQGJhci5naXQgZm9vQGJhcgordGVzdF9jbG9uZV9kaXIgc3NoOi8vdXNlcjpwYXNzd29yZEBob3N0L2Zvb0BiYXIgZm9vQGJhcgordGVzdF9jbG9uZV9kaXIgc3NoOi8vdXNlcjpwYXNzd0ByZEBob3N0L2Zvb0BiYXIuZ2l0IGZvb0BiYXIKKwordGVzdF9jbG9uZV9kaXIgaG9zdDovZm9vQGJhciBmb29AYmFyCit0ZXN0X2Nsb25lX2RpciBob3N0Oi9mb29AYmFyLmdpdCBmb29AYmFyCit0ZXN0X2Nsb25lX2RpciB1c2VyOnBhc3N3b3JkQGhvc3Q6L2Zvb0BiYXIgZm9vQGJhcgordGVzdF9jbG9uZV9kaXIgdXNlcjpwYXNzd0ByZEBob3N0Oi9mb29AYmFyLmdpdCBmb29AYmFyCisKKyMgdHJhaWxpbmcgcG9ydC1saWtlIG51bWJlcnMgc2hvdWxkIG5vdCBiZSBzdHJpcHBlZCBmb3IgcGF0aHMKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL3VzZXI6cGFzc3dvcmRAaG9zdC90ZXN0OjEyMzQgMTIzNAordGVzdF9jbG9uZV9kaXIgc3NoOi8vdXNlcjpwYXNzd29yZEBob3N0L3Rlc3Q6MTIzNC5naXQgMTIzNAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MDQtY2xvbmUtcmVmZXJlbmNlLnNoIGIvdC90NTYwNC1jbG9uZS1yZWZlcmVuY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmY3YmUyMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MDQtY2xvbmUtcmVmZXJlbmNlLnNoCkBAIC0wLDAgKzEsMzU4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IE1hcnRpbiBXYWl0eiA8dGFsaUBhZG1pbmdpbGRlLm9yZz4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjbG9uZSAtLXJlZmVyZW5jZScKKy4gLi90ZXN0LWxpYi5zaAorCitiYXNlX2Rpcj0kKHB3ZCkKKworVT0kYmFzZV9kaXIvVVBMT0FEX0xPRworCisjIGNyZWF0ZSBhIGNvbW1pdCBpbiByZXBvICQxIHdpdGggbmFtZSAkMgorY29tbWl0X2luICgpIHsKKwkoCisJCWNkICIkMSIgJiYKKwkJZWNobyAiJDIiID4iJDIiICYmCisJCWdpdCBhZGQgIiQyIiAmJgorCQlnaXQgY29tbWl0IC1tICIkMiIKKwkpCit9CisKKyMgY2hlY2sgdGhhdCB0aGVyZSBhcmUgJDIgbG9vc2Ugb2JqZWN0cyBpbiByZXBvICQxCit0ZXN0X29iamNvdW50ICgpIHsKKwllY2hvICIkMiIgPmV4cGVjdCAmJgorCWdpdCAtQyAiJDEiIGNvdW50LW9iamVjdHMgPmFjdHVhbC5yYXcgJiYKKwljdXQgLWQnICcgLWYxIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBmaXJzdCByZXBvc2l0b3J5JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBBICYmCisJY29tbWl0X2luIEEgZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyaW5nIHNlY29uZCByZXBvc2l0b3J5JyAnCisJZ2l0IGNsb25lIEEgQiAmJgorCWNvbW1pdF9pbiBCIGZpbGUyICYmCisJZ2l0IC1DIEIgcmVwYWNrIC1hZCAmJgorCWdpdCAtQyBCIHBydW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgd2l0aCByZWZlcmVuY2UgKC1sIC1zKScgJworCWdpdCBjbG9uZSAtbCAtcyAtLXJlZmVyZW5jZSBCIEEgQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGlzdGVuY2Ugb2YgaW5mby9hbHRlcm5hdGVzJyAnCisJdGVzdF9saW5lX2NvdW50ID0gMiBDLy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBmcm9tIHJlZmVyZW5jZScgJworCWdpdCAtQyBDIHB1bGwgLi4vQiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhhdCByZWZlcmVuY2UgZ2V0cyB1c2VkJyAnCisJdGVzdF9vYmpjb3VudCBDIDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyB3aXRoIHJlZmVyZW5jZSAobm8gLWwgLXMpJyAnCisJR0lUX1RSQUNFX1BBQ0tFVD0kVS5EIGdpdCBjbG9uZSAtLXJlZmVyZW5jZSBCICJmaWxlOi8vJChwd2QpL0EiIEQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2hlZCBubyBvYmplY3RzJyAnCisJdGVzdCAtcyAiJFUuRCIgJiYKKwkhIGdyZXAgIiB3YW50IiAiJFUuRCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpc3RlbmNlIG9mIGluZm8vYWx0ZXJuYXRlcycgJworCXRlc3RfbGluZV9jb3VudCA9IDEgRC8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgZnJvbSByZWZlcmVuY2UnICcKKwlnaXQgLUMgRCBwdWxsIC4uL0IgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoYXQgcmVmZXJlbmNlIGdldHMgdXNlZCcgJworCXRlc3Rfb2JqY291bnQgRCAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nIG9yaWdpbicgJworCWNvbW1pdF9pbiBBIGZpbGUzICYmCisJZ2l0IC1DIEEgcmVwYWNrIC1hZCAmJgorCWdpdCAtQyBBIHBydW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgY2hhbmdlcyBmcm9tIG9yaWdpbicgJworCWdpdCAtQyBDIHB1bGwgb3JpZ2luCisnCisKKyMgdGhlIDIgbG9jYWwgb2JqZWN0cyBhcmUgY29tbWl0IGFuZCB0cmVlIGZyb20gdGhlIG1lcmdlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGF0IGFsdGVybmF0ZSB0byBvcmlnaW4gZ2V0cyB1c2VkJyAnCisJdGVzdF9vYmpjb3VudCBDIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBjaGFuZ2VzIGZyb20gb3JpZ2luJyAnCisJZ2l0IC1DIEQgcHVsbCBvcmlnaW4KKycKKworIyB0aGUgNSBsb2NhbCBvYmplY3RzIGFyZSBleHBlY3RlZDsgZmlsZTMgYmxvYiwgY29tbWl0IGluIEEgdG8gYWRkIGl0CisjIGFuZCBpdHMgdHJlZSwgYW5kIDIgYXJlIG91ciB0cmVlIGFuZCB0aGUgbWVyZ2UgY29tbWl0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgb2JqZWN0cyBleHBlY3RlZCB0byBleGlzdCBsb2NhbGx5JyAnCisJdGVzdF9vYmpjb3VudCBEIDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyaW5nIGFsdGVybmF0ZSByZXBvc2l0b3J5ICMxJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBGICYmCisJY29tbWl0X2luIEYgZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBhbHRlcm5hdGUgcmVwbyAjMiBhbmQgYWRkaW5nIGNoYW5nZXMgdG8gcmVwbyAjMScgJworCWdpdCBjbG9uZSBGIEcgJiYKKwljb21taXRfaW4gRiBmaWxlMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIGFsdGVybmF0ZSByZXBvICMxLCB1c2luZyAjMiBhcyByZWZlcmVuY2UnICcKKwlnaXQgY2xvbmUgLS1yZWZlcmVuY2UgRyBGIEgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyB3aXRoIHJlZmVyZW5jZSBiZWluZyBzdWJzZXQgb2Ygc291cmNlICgtbCAtcyknICcKKwlnaXQgY2xvbmUgLWwgLXMgLS1yZWZlcmVuY2UgQSBCIEUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyB3aXRoIG11bHRpcGxlIHJlZmVyZW5jZXMgZHJvcHMgZHVwbGljYXRlcycgJworCWdpdCBjbG9uZSAtcyAtLXJlZmVyZW5jZSBCIC0tcmVmZXJlbmNlIEEgLS1yZWZlcmVuY2UgQiBBIGR1cHMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGR1cHMvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIHJlZmVyZW5jZSBmcm9tIGEgdGFnZ2VkIHJlcG9zaXRvcnknICcKKwkoCisJCWNkIEEgJiYgZ2l0IHRhZyAtYSAtbSB0YWdnZWQgSEVBRAorCSkgJiYKKwlnaXQgY2xvbmUgLS1yZWZlcmVuY2U9QSBBIEkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBicmFuY2hlZCByZXBvc2l0b3J5JyAnCisJZ2l0IGNsb25lIEEgSiAmJgorCSgKKwkJY2QgSiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgb3RoZXIgbWFzdGVyXiAmJgorCQllY2hvIG90aGVyID5vdGhlcmZpbGUgJiYKKwkJZ2l0IGFkZCBvdGhlcmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBvdGhlciAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIGluY29tcGxldGUgYWx0ZXJuYXRlcycgJworCWdpdCBpbml0IEsgJiYKKwllY2hvICIkYmFzZV9kaXIvQS8uZ2l0L29iamVjdHMiID5LLy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwkoCisJCWNkIEsgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgSiAiZmlsZTovLyRiYXNlX2Rpci9KIiAmJgorCQlHSVRfVFJBQ0VfUEFDS0VUPSRVLksgZ2l0IGZldGNoIEoKKwkpICYmCisJbWFzdGVyX29iamVjdD0kKGNkIEEgJiYgZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lKSIgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAtcyAiJFUuSyIgJiYKKwkhIGdyZXAgIiB3YW50ICRtYXN0ZXJfb2JqZWN0IiAiJFUuSyIgJiYKKwl0YWdfb2JqZWN0PSQoY2QgQSAmJiBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWUpIiByZWZzL3RhZ3MvSEVBRCkgJiYKKwkhIGdyZXAgIiB3YW50ICR0YWdfb2JqZWN0IiAiJFUuSyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgcmVwbyB3aXRoIGdpdGZpbGUgYXMgYSByZWZlcmVuY2UnICcKKwlnaXQgY2xvbmUgLS1zZXBhcmF0ZS1naXQtZGlyPUwgQSBNICYmCisJZ2l0IGNsb25lIC0tcmVmZXJlbmNlPU0gQSBOICYmCisJZWNobyAiJGJhc2VfZGlyL0wvb2JqZWN0cyIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRiYXNlX2Rpci9OLy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHVzaW5nIHJlcG8gcG9pbnRlZCBhdCBieSBnaXRmaWxlIGFzIHJlZmVyZW5jZScgJworCWdpdCBjbG9uZSAtLXJlZmVyZW5jZT1NLy5naXQgQSBPICYmCisJZWNobyAiJGJhc2VfZGlyL0wvb2JqZWN0cyIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRiYXNlX2Rpci9PLy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGFuZCBkaXNzb2NpYXRlIGZyb20gcmVmZXJlbmNlJyAnCisJZ2l0IGluaXQgUCAmJgorCSgKKwkJY2QgUCAmJiB0ZXN0X2NvbW1pdCBvbmUKKwkpICYmCisJZ2l0IGNsb25lIFAgUSAmJgorCSgKKwkJY2QgUSAmJiB0ZXN0X2NvbW1pdCB0d28KKwkpICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1yZWZlcmVuY2U9UCBRIFIgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAtLXJlZmVyZW5jZT1QIC0tZGlzc29jaWF0ZSBRIFMgJiYKKwkjIHJlbW92aW5nIHRoZSByZWZlcmVuY2UgUCB3b3VsZCBjb3JydXB0IFIgYnV0IG5vdCBTCisJcm0gLWZyIFAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgUiBmc2NrICYmCisJZ2l0IC1DIFMgZnNjaworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUsIGRpc3NvY2lhdGUgZnJvbSBwYXJ0aWFsIHJlZmVyZW5jZSBhbmQgcmVwYWNrJyAnCisJcm0gLWZyIFAgUSBSICYmCisJZ2l0IGluaXQgUCAmJgorCSgKKwkJY2QgUCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IHJlcGFjayAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJZ2l0IHJlcGFjaworCSkgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIFAgUSAmJgorCSgKKwkJY2QgUCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgc2Vjb25kICYmCisJCXRlc3RfY29tbWl0IHRocmVlICYmCisJCWdpdCByZXBhY2sKKwkpICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtLWRpc3NvY2lhdGUgLS1yZWZlcmVuY2U9UCBRIFIgJiYKKwlscyBSL29iamVjdHMvcGFjay8qLnBhY2sgPnBhY2tzLnR4dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgcGFja3MudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lLCBkaXNzb2NpYXRlIGZyb20gYWx0ZXJuYXRlcycgJworCXJtIC1mciBBIEIgQyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gQSAmJgorCWNvbW1pdF9pbiBBIGZpbGUxICYmCisJZ2l0IGNsb25lIC0tcmVmZXJlbmNlPUEgQSBCICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBCLy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwlnaXQgY2xvbmUgLS1sb2NhbCAtLWRpc3NvY2lhdGUgQiBDICYmCisJISB0ZXN0IC1mIEMvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCSggY2QgQyAmJiBnaXQgZnNjayApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBnYXJiYWdlIGluIG9iamVjdHMvKicgJworCWdpdCBpbml0IFMgJiYKKwkoCisJCWNkIFMgJiYKKwkJdGVzdF9jb21taXQgQSAmJgorCisJCWNkIC5naXQvb2JqZWN0cyAmJgorCQk+LnNvbWUtaGlkZGVuLWZpbGUgJiYKKwkJPnNvbWUtZmlsZSAmJgorCQlta2RpciAuc29tZS1oaWRkZW4tZGlyICYmCisJCT4uc29tZS1oaWRkZW4tZGlyL3NvbWUtZmlsZSAmJgorCQk+LnNvbWUtaGlkZGVuLWRpci8uc29tZS1kb3QtZmlsZSAmJgorCQlta2RpciBzb21lLWRpciAmJgorCQk+c29tZS1kaXIvc29tZS1maWxlICYmCisJCT5zb21lLWRpci8uc29tZS1kb3QtZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgYSByZXBvIHdpdGggZ2FyYmFnZSBpbiBvYmplY3RzLyonICcKKwlmb3Igb3B0aW9uIGluIC0tbG9jYWwgLS1uby1oYXJkbGlua3MgLS1zaGFyZWQgLS1kaXNzb2NpYXRlCisJZG8KKwkJZ2l0IGNsb25lICRvcHRpb24gUyBTJG9wdGlvbiB8fCByZXR1cm4gMSAmJgorCQlnaXQgLUMgUyRvcHRpb24gZnNjayB8fCByZXR1cm4gMQorCWRvbmUgJiYKKwlmaW5kIFMtKiAtbmFtZSAiKnNvbWUqIiB8IHNvcnQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJUy0tZGlzc29jaWF0ZS8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWRpcgorCVMtLWRpc3NvY2lhdGUvLmdpdC9vYmplY3RzLy5zb21lLWhpZGRlbi1kaXIvLnNvbWUtZG90LWZpbGUKKwlTLS1kaXNzb2NpYXRlLy5naXQvb2JqZWN0cy8uc29tZS1oaWRkZW4tZGlyL3NvbWUtZmlsZQorCVMtLWRpc3NvY2lhdGUvLmdpdC9vYmplY3RzLy5zb21lLWhpZGRlbi1maWxlCisJUy0tZGlzc29jaWF0ZS8uZ2l0L29iamVjdHMvc29tZS1kaXIKKwlTLS1kaXNzb2NpYXRlLy5naXQvb2JqZWN0cy9zb21lLWRpci8uc29tZS1kb3QtZmlsZQorCVMtLWRpc3NvY2lhdGUvLmdpdC9vYmplY3RzL3NvbWUtZGlyL3NvbWUtZmlsZQorCVMtLWRpc3NvY2lhdGUvLmdpdC9vYmplY3RzL3NvbWUtZmlsZQorCVMtLWxvY2FsLy5naXQvb2JqZWN0cy8uc29tZS1oaWRkZW4tZGlyCisJUy0tbG9jYWwvLmdpdC9vYmplY3RzLy5zb21lLWhpZGRlbi1kaXIvLnNvbWUtZG90LWZpbGUKKwlTLS1sb2NhbC8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWRpci9zb21lLWZpbGUKKwlTLS1sb2NhbC8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWZpbGUKKwlTLS1sb2NhbC8uZ2l0L29iamVjdHMvc29tZS1kaXIKKwlTLS1sb2NhbC8uZ2l0L29iamVjdHMvc29tZS1kaXIvLnNvbWUtZG90LWZpbGUKKwlTLS1sb2NhbC8uZ2l0L29iamVjdHMvc29tZS1kaXIvc29tZS1maWxlCisJUy0tbG9jYWwvLmdpdC9vYmplY3RzL3NvbWUtZmlsZQorCVMtLW5vLWhhcmRsaW5rcy8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWRpcgorCVMtLW5vLWhhcmRsaW5rcy8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWRpci8uc29tZS1kb3QtZmlsZQorCVMtLW5vLWhhcmRsaW5rcy8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWRpci9zb21lLWZpbGUKKwlTLS1uby1oYXJkbGlua3MvLmdpdC9vYmplY3RzLy5zb21lLWhpZGRlbi1maWxlCisJUy0tbm8taGFyZGxpbmtzLy5naXQvb2JqZWN0cy9zb21lLWRpcgorCVMtLW5vLWhhcmRsaW5rcy8uZ2l0L29iamVjdHMvc29tZS1kaXIvLnNvbWUtZG90LWZpbGUKKwlTLS1uby1oYXJkbGlua3MvLmdpdC9vYmplY3RzL3NvbWUtZGlyL3NvbWUtZmlsZQorCVMtLW5vLWhhcmRsaW5rcy8uZ2l0L29iamVjdHMvc29tZS1maWxlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3NldHVwIHJlcG8gd2l0aCBtYW51YWxseSBzeW1saW5rZWQgb3IgdW5rbm93biBmaWxlcyBhdCBvYmplY3RzLycgJworCWdpdCBpbml0IFQgJiYKKwkoCisJCWNkIFQgJiYKKwkJZ2l0IGNvbmZpZyBnYy5hdXRvIDAgJiYKKwkJdGVzdF9jb21taXQgQSAmJgorCQlnaXQgZ2MgJiYKKwkJdGVzdF9jb21taXQgQiAmJgorCisJCWNkIC5naXQvb2JqZWN0cyAmJgorCQltdiBwYWNrIHBhY2tzICYmCisJCWxuIC1zIHBhY2tzIHBhY2sgJiYKKwkJZmluZCA/PyAtdHlwZSBkID5sb29zZS1kaXJzICYmCisJCWxhc3RfbG9vc2U9JCh0YWlsIC1uIDEgbG9vc2UtZGlycykgJiYKKwkJbXYgJGxhc3RfbG9vc2UgYS1sb29zZS1kaXIgJiYKKwkJbG4gLXMgYS1sb29zZS1kaXIgJGxhc3RfbG9vc2UgJiYKKwkJZmlyc3RfbG9vc2U9JChoZWFkIC1uIDEgbG9vc2UtZGlycykgJiYKKwkJcm0gLWYgbG9vc2UtZGlycyAmJgorCisJCWNkICRmaXJzdF9sb29zZSAmJgorCQlvYmo9JChscyAqKSAmJgorCQltdiAkb2JqIC4uL2FuLW9iamVjdCAmJgorCQlsbiAtcyAuLi9hbi1vYmplY3QgJG9iaiAmJgorCisJCWNkIC4uLyAmJgorCQlmaW5kIC4gLXR5cGUgZiB8IHNvcnQgPi4uLy4uLy4uL1Qub2JqZWN0cy1maWxlcy5yYXcgJiYKKwkJZmluZCAuIC10eXBlIGwgfCBzb3J0ID4uLi8uLi8uLi9ULm9iamVjdHMtc3ltbGlua3MucmF3ICYmCisJCWVjaG8gdW5rbm93bl9jb250ZW50ID51bmtub3duX2ZpbGUKKwkpICYmCisJZ2l0IC1DIFQgZnNjayAmJgorCWdpdCAtQyBUIHJldi1saXN0IC0tYWxsIC0tb2JqZWN0cyA+VC5vYmplY3RzCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY2xvbmUgcmVwbyB3aXRoIHN5bWxpbmtlZCBvciB1bmtub3duIGZpbGVzIGF0IG9iamVjdHMvJyAnCisJZm9yIG9wdGlvbiBpbiAtLWxvY2FsIC0tbm8taGFyZGxpbmtzIC0tc2hhcmVkIC0tZGlzc29jaWF0ZQorCWRvCisJCWdpdCBjbG9uZSAkb3B0aW9uIFQgVCRvcHRpb24gfHwgcmV0dXJuIDEgJiYKKwkJZ2l0IC1DIFQkb3B0aW9uIGZzY2sgfHwgcmV0dXJuIDEgJiYKKwkJZ2l0IC1DIFQkb3B0aW9uIHJldi1saXN0IC0tYWxsIC0tb2JqZWN0cyA+VCRvcHRpb24ub2JqZWN0cyAmJgorCQl0ZXN0X2NtcCBULm9iamVjdHMgVCRvcHRpb24ub2JqZWN0cyAmJgorCQkoCisJCQljZCBUJG9wdGlvbi8uZ2l0L29iamVjdHMgJiYKKwkJCWZpbmQgLiAtdHlwZSBmIHwgc29ydCA+Li4vLi4vLi4vVCRvcHRpb24ub2JqZWN0cy1maWxlcy5yYXcgJiYKKwkJCWZpbmQgLiAtdHlwZSBsIHwgc29ydCA+Li4vLi4vLi4vVCRvcHRpb24ub2JqZWN0cy1zeW1saW5rcy5yYXcKKwkJKQorCWRvbmUgJiYKKworCWZvciByYXcgaW4gJChscyBUKi5yYXcpCisJZG8KKwkJc2VkIC1lICJzIS8uLi8hL1kvITsgcyFbMC05YS1mXVx7MzgsXH0hWiEiIC1lICIvY29tbWl0LWdyYXBoL2QiIFwKKwkJICAgIC1lICIvbXVsdGktcGFjay1pbmRleC9kIiA8JHJhdyA+JHJhdy5kZS1zaGEtMSAmJgorCQlzb3J0ICRyYXcuZGUtc2hhLTEgPiRyYXcuZGUtc2hhIHx8IHJldHVybiAxCisJZG9uZSAmJgorCisJY2F0ID5leHBlY3RlZC1maWxlcyA8PC1FT0YgJiYKKwkuL1kvWgorCS4vWS9aCisJLi9ZL1oKKwkuL2EtbG9vc2UtZGlyL1oKKwkuL2FuLW9iamVjdAorCS4vaW5mby9wYWNrcworCS4vcGFjay9wYWNrLVouaWR4CisJLi9wYWNrL3BhY2stWi5wYWNrCisJLi9wYWNrcy9wYWNrLVouaWR4CisJLi9wYWNrcy9wYWNrLVoucGFjaworCS4vdW5rbm93bl9maWxlCisJRU9GCisKKwlmb3Igb3B0aW9uIGluIC0tbG9jYWwgLS1uby1oYXJkbGlua3MgLS1kaXNzb2NpYXRlCisJZG8KKwkJdGVzdF9jbXAgZXhwZWN0ZWQtZmlsZXMgVCRvcHRpb24ub2JqZWN0cy1maWxlcy5yYXcuZGUtc2hhIHx8IHJldHVybiAxICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBUJG9wdGlvbi5vYmplY3RzLXN5bWxpbmtzLnJhdy5kZS1zaGEgfHwgcmV0dXJuIDEKKwlkb25lICYmCisKKwllY2hvIC4vaW5mby9hbHRlcm5hdGVzID5leHBlY3RlZC1maWxlcyAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWZpbGVzIFQtLXNoYXJlZC5vYmplY3RzLWZpbGVzLnJhdyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBULS1zaGFyZWQub2JqZWN0cy1zeW1saW5rcy5yYXcKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjA1LWNsb25lLWxvY2FsLnNoIGIvdC90NTYwNS1jbG9uZS1sb2NhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZjIzNDE5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTYwNS1jbG9uZS1sb2NhbC5zaApAQCAtMCwwICsxLDE0MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgbG9jYWwgY2xvbmUnCisuIC4vdGVzdC1saWIuc2gKKworcmVwb19pc19oYXJkbGlua2VkKCkgeworCWZpbmQgIiQxL29iamVjdHMiIC10eXBlIGYgLWxpbmtzIDEgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0cHV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBvcmlnaW4gcmVwb3NpdG9yeScgJworCTogPmZpbGUgJiYgZ2l0IGFkZCAuICYmIGdpdCBjb21taXQgLW0xICYmCisJZ2l0IGNsb25lIC0tYmFyZSAuIGEuZ2l0ICYmCisJZ2l0IGNsb25lIC0tYmFyZSAuIHggJiYKKwl0ZXN0ICIkKGNkIGEuZ2l0ICYmIGdpdCBjb25maWcgLS1ib29sIGNvcmUuYmFyZSkiID0gdHJ1ZSAmJgorCXRlc3QgIiQoY2QgeCAmJiBnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmJhcmUpIiA9IHRydWUgJiYKKwlnaXQgYnVuZGxlIGNyZWF0ZSBiMS5idW5kbGUgLS1hbGwgJiYKKwlnaXQgYnVuZGxlIGNyZWF0ZSBiMi5idW5kbGUgbWFzdGVyICYmCisJbWtkaXIgZGlyICYmCisJY3AgYjEuYnVuZGxlIGRpci9iMyAmJgorCWNwIGIxLmJ1bmRsZSBiNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NhbCBjbG9uZSB3aXRob3V0IC5naXQgc3VmZml4JyAnCisJZ2l0IGNsb25lIC1sIC1zIGEgYiAmJgorCShjZCBiICYmCisJdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmJhcmUpIiA9IGZhbHNlICYmCisJZ2l0IGZldGNoKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NhbCBjbG9uZSB3aXRoIC5naXQgc3VmZml4JyAnCisJZ2l0IGNsb25lIC1sIC1zIGEuZ2l0IGMgJiYKKwkoY2QgYyAmJiBnaXQgZmV0Y2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIGNsb25lIGZyb20geCcgJworCWdpdCBjbG9uZSAtbCAtcyB4IHkgJiYKKwkoY2QgeSAmJiBnaXQgZmV0Y2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIGNsb25lIGZyb20geC5naXQgdGhhdCBkb2VzIG5vdCBleGlzdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtbCAtcyB4LmdpdCB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1dpdGggLW5vLWhhcmRsaW5rcywgbG9jYWwgd2lsbCBtYWtlIGEgY29weScgJworCWdpdCBjbG9uZSAtLWJhcmUgLS1uby1oYXJkbGlua3MgeCB3ICYmCisJISByZXBvX2lzX2hhcmRsaW5rZWQgdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdFdmVuIHdpdGhvdXQgLWwsIGxvY2FsIHdpbGwgbWFrZSBhIGhhcmRsaW5rJyAnCisJcm0gLWZyIHcgJiYKKwlnaXQgY2xvbmUgLWwgLS1iYXJlIHggdyAmJgorCXJlcG9faXNfaGFyZGxpbmtlZCB3CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIGNsb25lIG9mIHJlcG8gd2l0aCBub25leGlzdGVudCByZWYgaW4gSEVBRCcgJworCWVjaG8gInJlZjogcmVmcy9oZWFkcy9ub25leGlzdGVudCIgPiBhLmdpdC9IRUFEICYmCisJZ2l0IGNsb25lIGEgZCAmJgorCShjZCBkICYmCisJZ2l0IGZldGNoICYmCisJdGVzdCAhIC1lIC5naXQvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidW5kbGUgY2xvbmUgd2l0aG91dCAuYnVuZGxlIHN1ZmZpeCcgJworCWdpdCBjbG9uZSBkaXIvYjMgJiYKKwkoY2QgYjMgJiYgZ2l0IGZldGNoKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidW5kbGUgY2xvbmUgd2l0aCAuYnVuZGxlIHN1ZmZpeCcgJworCWdpdCBjbG9uZSBiMS5idW5kbGUgJiYKKwkoY2QgYjEgJiYgZ2l0IGZldGNoKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidW5kbGUgY2xvbmUgZnJvbSBiNCcgJworCWdpdCBjbG9uZSBiNCBiZGwgJiYKKwkoY2QgYmRsICYmIGdpdCBmZXRjaCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnVuZGxlIGNsb25lIGZyb20gYjQuYnVuZGxlIHRoYXQgZG9lcyBub3QgZXhpc3QnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgYjQuYnVuZGxlIGJiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bmRsZSBjbG9uZSB3aXRoIG5vbmV4aXN0ZW50IEhFQUQnICcKKwlnaXQgY2xvbmUgYjIuYnVuZGxlIGIyICYmCisJKGNkIGIyICYmCisJZ2l0IGZldGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZW1wdHkgcmVwb3NpdG9yeScgJworCW1rZGlyIGVtcHR5ICYmCisJKGNkIGVtcHR5ICYmCisJIGdpdCBpbml0ICYmCisJIGdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuKSAmJgorCWdpdCBjbG9uZSBlbXB0eSBlbXB0eS1jbG9uZSAmJgorCXRlc3RfdGljayAmJgorCShjZCBlbXB0eS1jbG9uZSAmJgorCSBlY2hvICJjb250ZW50IiA+PiBmb28gJiYKKwkgZ2l0IGFkZCBmb28gJiYKKwkgZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisJIGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIgJiYKKwkgZXhwZWN0ZWQ9JChnaXQgcmV2LXBhcnNlIG1hc3RlcikgJiYKKwkgYWN0dWFsPSQoZ2l0IC0tZ2l0LWRpcj0uLi9lbXB0eS8uZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICYmCisJIHRlc3QgJGFjdHVhbCA9ICRleHBlY3RlZCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZW1wdHkgcmVwb3NpdG9yeSwgYW5kIHRoZW4gcHVzaCBzaG91bGQgbm90IHNlZ2ZhdWx0LicgJworCXJtIC1mciBlbXB0eS8gZW1wdHktY2xvbmUvICYmCisJbWtkaXIgZW1wdHkgJiYKKwkoY2QgZW1wdHkgJiYgZ2l0IGluaXQpICYmCisJZ2l0IGNsb25lIGVtcHR5IGVtcHR5LWNsb25lICYmCisJKGNkIGVtcHR5LWNsb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgbm9uLWV4aXN0ZW50IGRpcmVjdG9yeSBmYWlscycgJworCXJtIC1yZiBkb2VzLW5vdC1leGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSBkb2VzLW5vdC1leGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIG5vbi1naXQgZGlyZWN0b3J5IGZhaWxzJyAnCisJcm0gLXJmIG5vdC1hLWdpdC1yZXBvIG5vdC1hLWdpdC1yZXBvLWNsb25lICYmCisJbWtkaXIgbm90LWEtZ2l0LXJlcG8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgbm90LWEtZ2l0LXJlcG8gbm90LWEtZ2l0LXJlcG8tY2xvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBmaWxlOi8vIGRvZXMgbm90IGhhcmRsaW5rJyAnCisJZ2l0IGNsb25lIC0tYmFyZSBmaWxlOi8vIiQocHdkKSIvYSBub24tbG9jYWwgJiYKKwkhIHJlcG9faXNfaGFyZGxpbmtlZCBub24tbG9jYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBhIGxvY2FsIHBhdGggd2l0aCAtLW5vLWxvY2FsIGRvZXMgbm90IGhhcmRsaW5rJyAnCisJZ2l0IGNsb25lIC0tYmFyZSAtLW5vLWxvY2FsIGEgZm9yY2Utbm9ubG9jYWwgJiYKKwkhIHJlcG9faXNfaGFyZGxpbmtlZCBmb3JjZS1ub25sb2NhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIGxvY2FsbHkgcmVzcGVjdHMgIi11IiBmb3IgZmV0Y2hpbmcgcmVmcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLWJhcmUgLXUgZmFsc2UgYSBzaG91bGRfbm90X3dvcmsuZ2l0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYwNi1jbG9uZS1vcHRpb25zLnNoIGIvdC90NTYwNi1jbG9uZS1vcHRpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllMjRlYzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjA2LWNsb25lLW9wdGlvbnMuc2gKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIGNsb25lIG9wdGlvbnMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCW1rZGlyIHBhcmVudCAmJgorCShjZCBwYXJlbnQgJiYgZ2l0IGluaXQgJiYKKwkgZWNobyBvbmUgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLW0gb25lKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC1vJyAnCisKKwlnaXQgY2xvbmUgLW8gZm9vIHBhcmVudCBjbG9uZS1vICYmCisJKGNkIGNsb25lLW8gJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvZm9vL21hc3RlcikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRpcmVjdGVkIGNsb25lIGRvZXMgbm90IHNob3cgcHJvZ3Jlc3MnICcKKworCWdpdCBjbG9uZSAiZmlsZTovLyQocHdkKS9wYXJlbnQiIGNsb25lLXJlZGlyZWN0ZWQgPm91dCAyPmVyciAmJgorCSEgZ3JlcCAlIGVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IiBlcnIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRpcmVjdGVkIGNsb25lIC12IGRvZXMgc2hvdyBwcm9ncmVzcycgJworCisJZ2l0IGNsb25lIC0tcHJvZ3Jlc3MgImZpbGU6Ly8kKHB3ZCkvcGFyZW50IiBjbG9uZS1yZWRpcmVjdGVkLXByb2dyZXNzIFwKKwkJPm91dCAyPmVyciAmJgorCWdyZXAgJSBlcnIKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MDctY2xvbmUtYnVuZGxlLnNoIGIvdC90NTYwNy1jbG9uZS1idW5kbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmQ1YTk3NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MDctY2xvbmUtYnVuZGxlLnNoCkBAIC0wLDAgKzEsOTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzb21lIGJ1bmRsZSByZWxhdGVkIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLW0gdGFnIHRhZyAmJgorCXRlc3RfY29tbWl0IHNlY29uZCAmJgorCXRlc3RfY29tbWl0IHRoaXJkICYmCisJZ2l0IHRhZyAtZCBpbml0aWFsICYmCisJZ2l0IHRhZyAtZCBzZWNvbmQgJiYKKwlnaXQgdGFnIC1kIHRoaXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJ2ZXJpZnkiIG5lZWRzIGEgd29ya3RyZWUnICcKKwlnaXQgYnVuZGxlIGNyZWF0ZSB0aXAuYnVuZGxlIC0xIG1hc3RlciAmJgorCW5vbmdpdCB0ZXN0X211c3RfZmFpbCBnaXQgYnVuZGxlIHZlcmlmeSAuLi90aXAuYnVuZGxlIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAibmVlZCBhIHJlcG9zaXRvcnkiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbm5vdGF0ZWQgdGFncyBjYW4gYmUgZXhjbHVkZWQgYnkgcmV2LWxpc3Qgb3B0aW9ucycgJworCWdpdCBidW5kbGUgY3JlYXRlIGJ1bmRsZSAtLWFsbCAtLXNpbmNlPTcuQXByLjIwMDUuMTU6MTQ6MDAuLTA3MDAgJiYKKwlnaXQgbHMtcmVtb3RlIGJ1bmRsZSA+IG91dHB1dCAmJgorCWdyZXAgdGFnIG91dHB1dCAmJgorCWdpdCBidW5kbGUgY3JlYXRlIGJ1bmRsZSAtLWFsbCAtLXNpbmNlPTcuQXByLjIwMDUuMTU6MTY6MDAuLTA3MDAgJiYKKwlnaXQgbHMtcmVtb3RlIGJ1bmRsZSA+IG91dHB1dCAmJgorCSEgZ3JlcCB0YWcgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZSBpZiBidW5kbGUgZmlsZSBjYW5ub3QgYmUgY3JlYXRlZCcgJworCW1rZGlyIGFkaXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnVuZGxlIGNyZWF0ZSBhZGlyIC0tYWxsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2J1bmRsZSAtLXN0ZGluJyAnCisJZWNobyBtYXN0ZXIgfCBnaXQgYnVuZGxlIGNyZWF0ZSBzdGRpbi1idW5kbGUuYmRsIC0tc3RkaW4gJiYKKwlnaXQgbHMtcmVtb3RlIHN0ZGluLWJ1bmRsZS5iZGwgPm91dHB1dCAmJgorCWdyZXAgbWFzdGVyIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdidW5kbGUgLS1zdGRpbiA8cmV2LWxpc3Qgb3B0aW9ucz4nICcKKwllY2hvIG1hc3RlciB8IGdpdCBidW5kbGUgY3JlYXRlIGh5YnJpZC1idW5kbGUuYmRsIC0tc3RkaW4gdGFnICYmCisJZ2l0IGxzLXJlbW90ZSBoeWJyaWQtYnVuZGxlLmJkbCA+b3V0cHV0ICYmCisJZ3JlcCBtYXN0ZXIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGJ1bmRsZSBmaWxlIGlzIHJlamVjdGVkJyAnCisJOiA+ZW1wdHktYnVuZGxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIGVtcHR5LWJ1bmRsZQorJworCisjIFRoaXMgdHJpZ2dlcnMgYSBidWcgaW4gb2xkZXIgdmVyc2lvbnMgd2hlcmUgdGhlIHJlc3VsdGluZyBsaW5lICh3aXRoCisjIC0tcHJldHR5PW9uZWxpbmUpIHdhcyBsb25nZXIgdGhhbiBhIDEwMjQtY2hhciBidWZmZXIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWRpY3Vsb3VzbHkgbG9uZyBzdWJqZWN0IGluIGJvdW5kYXJ5JyAnCisJOiA+ZmlsZTQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYWRkIGZpbGU0ICYmCisJcHJpbnRmICIlMDEyMDBkXG4iIDAgfCBnaXQgY29tbWl0IC1GIC0gJiYKKwl0ZXN0X2NvbW1pdCBmaWZ0aCAmJgorCWdpdCBidW5kbGUgY3JlYXRlIGxvbmctc3ViamVjdC1idW5kbGUuYmRsIEhFQUReLi5IRUFEICYmCisJZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIGxvbmctc3ViamVjdC1idW5kbGUuYmRsID5oZWFkcyAmJgorCXRlc3QgLXMgaGVhZHMgJiYKKwlnaXQgZmV0Y2ggbG9uZy1zdWJqZWN0LWJ1bmRsZS5iZGwgJiYKKwlzZWQgLW4gIi9eLS97cDtxO30iIGxvbmctc3ViamVjdC1idW5kbGUuYmRsID5ib3VuZGFyeSAmJgorCWdyZXAgIl4tJE9JRF9SRUdFWCAiIGJvdW5kYXJ5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXJlcXVpc2l0ZXMgd2l0aCBhbiBlbXB0eSBjb21taXQgbWVzc2FnZScgJworCTogPmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC1tICIiICYmCisJdGVzdF9jb21taXQgZmlsZTIgJiYKKwlnaXQgYnVuZGxlIGNyZWF0ZSBidW5kbGUgSEVBRF4uLiAmJgorCWdpdCBidW5kbGUgdmVyaWZ5IGJ1bmRsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgYnVuZGxlIGNyZWF0aW9uIGRvZXMgbm90IGxlYXZlIGNydWZ0JyAnCisJIyBUaGlzIGZhaWxzIGJlY2F1c2UgdGhlIGJ1bmRsZSB3b3VsZCBiZSBlbXB0eS4KKwl0ZXN0X211c3RfZmFpbCBnaXQgYnVuZGxlIGNyZWF0ZSBmYWlsLmJ1bmRsZSBtYXN0ZXIuLm1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZhaWwuYnVuZGxlLmxvY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggU0hBLTEgZnJvbSBidW5kbGUnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGZvbyAmJgorCXRlc3RfY29tbWl0IC1DIGZvbyB4ICYmCisJZ2l0IC1DIGZvbyBidW5kbGUgY3JlYXRlIHRpcC5idW5kbGUgLTEgbWFzdGVyICYmCisJZ2l0IC1DIGZvbyByZXYtcGFyc2UgSEVBRCA+aGFzaCAmJgorCisJIyBFeGVyY2lzZSB0byBlbnN1cmUgdGhhdCBmZXRjaGluZyBhIFNIQS0xIGZyb20gYSBidW5kbGUgd29ya3Mgd2l0aCBubworCSMgZXJyb3JzCisJZ2l0IGZldGNoIC0tbm8tdGFncyBmb28vdGlwLmJ1bmRsZSAiJChjYXQgaGFzaCkiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYwOC1jbG9uZS0yZ2Iuc2ggYi90L3Q1NjA4LWNsb25lLTJnYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZWUwODQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTYwOC1jbG9uZS0yZ2Iuc2gKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY2xvbmluZyBhIHJlcG9zaXRvcnkgbGFyZ2VyIHRoYW4gMiBnaWdhYnl0ZScKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfYm9vbF9lbnYgR0lUX1RFU1RfQ0xPTkVfMkdCIGZhbHNlCit0aGVuCisJc2F5ICdTa2lwcGluZyBleHBlbnNpdmUgMkdCIGNsb25lIHRlc3Q7IGVuYWJsZSBpdCB3aXRoIEdJVF9URVNUX0NMT05FXzJHQj10JworZWxzZQorCXRlc3Rfc2V0X3ByZXJlcSBDTE9ORV8yR0IKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ0xPTkVfMkdCICdzZXR1cCcgJworCisJZ2l0IGNvbmZpZyBwYWNrLmNvbXByZXNzaW9uIDAgJiYKKwlnaXQgY29uZmlnIHBhY2suZGVwdGggMCAmJgorCWJsb2JzaXplPSQoKDEwMCoxMDI0KjEwMjQpKSAmJgorCWJsb2Jjb3VudD0kKCgyKjEwMjQqMTAyNCoxMDI0LyRibG9ic2l6ZSsxKSkgJiYKKwlpPTEgJiYKKwkod2hpbGUgdGVzdCAkaSAtbGUgJGJsb2Jjb3VudAorCSBkbworCQlwcmludGYgIkdlbmVyYXRpbmcgYmxvYiAkaS8kYmxvYmNvdW50XHIiID4mMiAmJgorCQlwcmludGYgImJsb2Jcbm1hcmsgOiRpXG5kYXRhICRibG9ic2l6ZVxuIiAmJgorCQkjdGVzdC10b29sIGdlbnJhbmRvbSAkaSAkYmxvYnNpemUgJiYKKwkJcHJpbnRmICIlLSR7YmxvYnNpemV9cyIgJGkgJiYKKwkJZWNobyAiTSAxMDA2NDQgOiRpICRpIiA+PiBjb21taXQgJiYKKwkJaT0kKCgkaSsxKSkgfHwKKwkJZWNobyAkPyA+IGV4aXQtc3RhdHVzCisJIGRvbmUgJiYKKwkgZWNobyAiY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyIiAmJgorCSBlY2hvICJhdXRob3IgQSBVIFRob3IgPGF1dGhvckBlbWFpbC5jb20+IDEyMzQ1Njc4OSArMDAwMCIgJiYKKwkgZWNobyAiY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBlbWFpbC5jb20+IDEyMzQ1Njc4OSArMDAwMCIgJiYKKwkgZWNobyAiZGF0YSA1IiAmJgorCSBlY2hvICI+MmdiIiAmJgorCSBjYXQgY29tbWl0KSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tYmlnLWZpbGUtdGhyZXNob2xkPTIgJiYKKwl0ZXN0ICEgLWYgZXhpdC1zdGF0dXMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENMT05FXzJHQiAnY2xvbmUgLSBiYXJlJyAnCisKKwlnaXQgY2xvbmUgLS1iYXJlIC0tbm8taGFyZGxpbmtzIC4gY2xvbmUtYmFyZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ0xPTkVfMkdCICdjbG9uZSAtIHdpdGggd29ya3RyZWUsIGZpbGU6Ly8gcHJvdG9jb2wnICcKKworCWdpdCBjbG9uZSAiZmlsZTovLyQocHdkKSIgY2xvbmUtd3QKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MDktY2xvbmUtYnJhbmNoLnNoIGIvdC90NTYwOS1jbG9uZS1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmU3YTdiZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MDktY2xvbmUtYnJhbmNoLnNoCkBAIC0wLDAgKzEsNzAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjbG9uZSAtLWJyYW5jaCBvcHRpb24nCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfSEVBRCgpIHsKKwllY2hvIHJlZnMvaGVhZHMvIiQxIiA+ZXhwZWN0ICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK2NoZWNrX2ZpbGUoKSB7CisJZWNobyAiJDEiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIHBhcmVudCAmJgorCShjZCBwYXJlbnQgJiYgZ2l0IGluaXQgJiYKKwkgZWNobyBvbmUgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJIGdpdCBjaGVja291dCAtYiB0d28gJiYKKwkgZWNobyB0d28gPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gdHdvICYmCisJIGdpdCBjaGVja291dCBtYXN0ZXIpICYmCisJbWtkaXIgZW1wdHkgJiYKKwkoY2QgZW1wdHkgJiYgZ2l0IGluaXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbmlsbGEgY2xvbmUgY2hvb3NlcyBIRUFEJyAnCisJZ2l0IGNsb25lIHBhcmVudCBjbG9uZSAmJgorCShjZCBjbG9uZSAmJgorCSBjaGVja19IRUFEIG1hc3RlciAmJgorCSBjaGVja19maWxlIG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLWIgY2hvb3NlcyBzcGVjaWZpZWQgYnJhbmNoJyAnCisJZ2l0IGNsb25lIC1iIHR3byBwYXJlbnQgY2xvbmUtdHdvICYmCisJKGNkIGNsb25lLXR3byAmJgorCSBjaGVja19IRUFEIHR3byAmJgorCSBjaGVja19maWxlIHR3bworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLWIgc2V0cyB1cCB0cmFja2luZycgJworCShjZCBjbG9uZS10d28gJiYKKwkgZWNobyBvcmlnaW4gPmV4cGVjdCAmJgorCSBnaXQgY29uZmlnIGJyYW5jaC50d28ucmVtb3RlID5hY3R1YWwgJiYKKwkgZWNobyByZWZzL2hlYWRzL3R3byA+PmV4cGVjdCAmJgorCSBnaXQgY29uZmlnIGJyYW5jaC50d28ubWVyZ2UgPj5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLWIgZG9lcyBub3QgbXVuZ2UgcmVtb3Rlcy9vcmlnaW4vSEVBRCcgJworCShjZCBjbG9uZS10d28gJiYKKwkgZWNobyByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA+ZXhwZWN0ICYmCisJIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLWIgd2l0aCBib2d1cyBicmFuY2gnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLWIgYm9ndXMgcGFyZW50IGNsb25lLWJvZ3VzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC1iIG5vdCBhbGxvd2VkIHdpdGggZW1wdHkgcmVwb3MnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLWIgYnJhbmNoIGVtcHR5IGNsb25lLWJyYW5jaC1lbXB0eQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MTAtY2xvbmUtZGV0YWNoZWQuc2ggYi90L3Q1NjEwLWNsb25lLWRldGFjaGVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhiMGQ2MDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjEwLWNsb25lLWRldGFjaGVkLnNoCkBAIC0wLDAgKzEsNzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNsb25pbmcgYSByZXBvc2l0b3J5IHdpdGggZGV0YWNoZWQgSEVBRCcKKy4gLi90ZXN0LWxpYi5zaAorCitoZWFkX2lzX2RldGFjaGVkKCkgeworCWdpdCAtLWdpdC1kaXI9JDEvLmdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtLWdpdC1kaXI9JDEvLmdpdCBzeW1ib2xpYy1yZWYgSEVBRAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gb25lID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwllY2hvIHR3byA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdvICYmCisJZ2l0IHRhZyB0d28gJiYKKwllY2hvIHRocmVlID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0aHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZXBvIChkZXRhY2hlZCBIRUFEIHBvaW50cyB0byBicmFuY2gpJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJFBXRCIgZGV0YWNoZWQtYnJhbmNoCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZWQgSEVBRCBtYXRjaGVzJyAnCisJZWNobyB0aHJlZSA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1kZXRhY2hlZC1icmFuY2gvLmdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2Nsb25lZCBIRUFEIGlzIGRldGFjaGVkJyAnCisJaGVhZF9pc19kZXRhY2hlZCBkZXRhY2hlZC1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVwbyAoZGV0YWNoZWQgSEVBRCBwb2ludHMgdG8gdGFnKScgJworCWdpdCBjaGVja291dCB0d29eMCAmJgorCWdpdCBjbG9uZSAiZmlsZTovLyRQV0QiIGRldGFjaGVkLXRhZworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmVkIEhFQUQgbWF0Y2hlcycgJworCWVjaG8gdHdvID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWRldGFjaGVkLXRhZy8uZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmVkIEhFQUQgaXMgZGV0YWNoZWQnICcKKwloZWFkX2lzX2RldGFjaGVkIGRldGFjaGVkLXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZXBvIChkZXRhY2hlZCBIRUFEIHBvaW50cyB0byBoaXN0b3J5KScgJworCWdpdCBjaGVja291dCB0d29eICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJFBXRCIgZGV0YWNoZWQtaGlzdG9yeQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmVkIEhFQUQgbWF0Y2hlcycgJworCWVjaG8gb25lID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWRldGFjaGVkLWhpc3RvcnkvLmdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lZCBIRUFEIGlzIGRldGFjaGVkJyAnCisJaGVhZF9pc19kZXRhY2hlZCBkZXRhY2hlZC1oaXN0b3J5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlcG8gKG9ycGhhbiBkZXRhY2hlZCBIRUFEKScgJworCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCWVjaG8gZm91ciA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gZm91ciAmJgorCWdpdCBjbG9uZSAiZmlsZTovLyRQV0QiIGRldGFjaGVkLW9ycGhhbgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmVkIEhFQUQgbWF0Y2hlcycgJworCWVjaG8gZm91ciA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1kZXRhY2hlZC1vcnBoYW4vLmdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lZCBIRUFEIGlzIGRldGFjaGVkJyAnCisJaGVhZF9pc19kZXRhY2hlZCBkZXRhY2hlZC1vcnBoYW4KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjExLWNsb25lLWNvbmZpZy5zaCBiL3QvdDU2MTEtY2xvbmUtY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlMGZkMzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjExLWNsb25lLWNvbmZpZy5zaApAQCAtMCwwICsxLDEwOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3RzIGZvciBnaXQgY2xvbmUgLWMga2V5PXZhbHVlJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC1jIHNldHMgY29uZmlnIGluIGNsb25lZCByZXBvJyAnCisJcm0gLXJmIGNoaWxkICYmCisJZ2l0IGNsb25lIC1jIGNvcmUuZm9vPWJhciAuIGNoaWxkICYmCisJZWNobyBiYXIgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9Y2hpbGQvLmdpdCBjb25maWcgY29yZS5mb28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLWMgY2FuIHNldCBtdWx0aS1rZXlzJyAnCisJcm0gLXJmIGNoaWxkICYmCisJZ2l0IGNsb25lIC1jIGNvcmUuZm9vPWJhciAtYyBjb3JlLmZvbz1iYXogLiBjaGlsZCAmJgorCXsgZWNobyBiYXI7IGVjaG8gYmF6OyB9ID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWNoaWxkLy5naXQgY29uZmlnIC0tZ2V0LWFsbCBjb3JlLmZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYyBjYW4gc2V0IG11bHRpLWtleXMsIGluY2x1ZGluZyBzb21lIGVtcHR5JyAnCisJcm0gLXJmIGNoaWxkICYmCisJZ2l0IGNsb25lIC1jIGNyZWRlbnRpYWwuaGVscGVyPSAtYyBjcmVkZW50aWFsLmhlbHBlcj1oaSAuIGNoaWxkICYmCisJcHJpbnRmICIlc1xuIiAiIiBoaSA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1jaGlsZC8uZ2l0IGNvbmZpZyAtLWdldC1hbGwgY3JlZGVudGlhbC5oZWxwZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLWMgd2l0aG91dCBhIHZhbHVlIGlzIGJvb2xlYW4gdHJ1ZScgJworCXJtIC1yZiBjaGlsZCAmJgorCWdpdCBjbG9uZSAtYyBjb3JlLmZvbyAuIGNoaWxkICYmCisJZWNobyB0cnVlID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWNoaWxkLy5naXQgY29uZmlnIC0tYm9vbCBjb3JlLmZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYyBjb25maWcgaXMgYXZhaWxhYmxlIGR1cmluZyBjbG9uZScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJcm0gLXJmIGNoaWxkICYmCisJZ2l0IGNsb25lIC1jIGNvcmUuYXV0b2NybGYgLiBjaGlsZCAmJgorCXByaW50ZiAiY29udGVudFxcclxcbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjaGlsZC9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC1jIHJlbW90ZS5vcmlnaW4uZmV0Y2g9PHJlZnNwZWM+IHdvcmtzJyAnCisJcm0gLXJmIGNoaWxkICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ncmFiL2l0IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9sZWF2ZS9vdXQgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2xvbmUgLWMgInJlbW90ZS5vcmlnaW4uZmV0Y2g9K3JlZnMvZ3JhYi8qOnJlZnMvZ3JhYi8qIiAuIGNoaWxkICYmCisJZ2l0IC1DIGNoaWxkIGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXJlZnMvZ3JhYi9pdAorCXJlZnMvaGVhZHMvbWFzdGVyCisJcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECisJcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtYyByZW1vdGUub3JpZ2luLmZldGNoPTxyZWZzcGVjPiBjbG9uZSB3b3JrcycgJworCXJtIC1yZiBjaGlsZCAmJgorCWdpdCAtYyAicmVtb3RlLm9yaWdpbi5mZXRjaD0rcmVmcy9ncmFiLyo6cmVmcy9ncmFiLyoiIGNsb25lIC4gY2hpbGQgJiYKKwlnaXQgLUMgY2hpbGQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiA+YWN0dWFsICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmcy9ncmFiL2l0CisJcmVmcy9oZWFkcy9tYXN0ZXIKKwlyZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKwlyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLWMgcmVtb3RlLjxyZW1vdGU+LmZldGNoPTxyZWZzcGVjPiAtLW9yaWdpbj08bmFtZT4nICcKKwlybSAtcmYgY2hpbGQgJiYKKwlnaXQgY2xvbmUgLS1vcmlnaW49dXBzdHJlYW0gXAorCQkgIC1jICJyZW1vdGUudXBzdHJlYW0uZmV0Y2g9K3JlZnMvZ3JhYi8qOnJlZnMvZ3JhYi8qIiBcCisJCSAgLWMgInJlbW90ZS5vcmlnaW4uZmV0Y2g9K3JlZnMvbGVhdmUvKjpyZWZzL2xlYXZlLyoiIFwKKwkJICAuIGNoaWxkICYmCisJZ2l0IC1DIGNoaWxkIGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXJlZnMvZ3JhYi9pdAorCXJlZnMvaGVhZHMvbWFzdGVyCisJcmVmcy9yZW1vdGVzL3Vwc3RyZWFtL0hFQUQKKwlyZWZzL3JlbW90ZXMvdXBzdHJlYW0vbWFzdGVyCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICdjbG9uZSAtYyBjb3JlLmhpZGVEb3RGaWxlcycgJworCXRlc3RfY29tbWl0IGF0dHJpYnV0ZXMgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKwlybSAtcmYgY2hpbGQgJiYKKwlnaXQgY2xvbmUgLWMgY29yZS5oaWRlRG90RmlsZXM9ZmFsc2UgLiBjaGlsZCAmJgorCSEgdGVzdF9wYXRoX2lzX2hpZGRlbiBjaGlsZC8uZ2l0YXR0cmlidXRlcyAmJgorCXJtIC1yZiBjaGlsZCAmJgorCWdpdCBjbG9uZSAtYyBjb3JlLmhpZGVEb3RGaWxlcz1kb3RHaXRPbmx5IC4gY2hpbGQgJiYKKwkhIHRlc3RfcGF0aF9pc19oaWRkZW4gY2hpbGQvLmdpdGF0dHJpYnV0ZXMgJiYKKwlybSAtcmYgY2hpbGQgJiYKKwlnaXQgY2xvbmUgLWMgY29yZS5oaWRlRG90RmlsZXM9dHJ1ZSAuIGNoaWxkICYmCisJdGVzdF9wYXRoX2lzX2hpZGRlbiBjaGlsZC8uZ2l0YXR0cmlidXRlcworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MTItY2xvbmUtcmVmc3BlYy5zaCBiL3QvdDU2MTItY2xvbmUtcmVmc3BlYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lM2I0MzZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTYxMi1jbG9uZS1yZWZzcGVjLnNoCkBAIC0wLDAgKzEsMjM0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCByZWZzcGVjIHdyaXR0ZW4gYnkgY2xvbmUtY29tbWFuZCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCSMgTWFrZSB0d28gYnJhbmNoZXMsICJtYXN0ZXIiIGFuZCAic2lkZSIKKwllY2hvIG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZWNobyB0d28gPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWdpdCB0YWcgdHdvICYmCisJZWNobyB0aHJlZSA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdGhyZWUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCWVjaG8gZm91ciA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gZm91ciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgdGFnIGZpdmUgJiYKKworCSMgZGVmYXVsdCBjbG9uZQorCWdpdCBjbG9uZSAuIGRpcl9hbGwgJiYKKworCSMgZGVmYXVsdCBjbG9uZSAtLW5vLXRhZ3MKKwlnaXQgY2xvbmUgLS1uby10YWdzIC4gZGlyX2FsbF9ub190YWdzICYmCisKKwkjIGRlZmF1bHQgLS1zaW5nbGUgdGhhdCBmb2xsb3dzIEhFQUQ9bWFzdGVyCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAuIGRpcl9tYXN0ZXIgJiYKKworCSMgZGVmYXVsdCAtLXNpbmdsZSB0aGF0IGZvbGxvd3MgSEVBRD1tYXN0ZXIgd2l0aCBubyB0YWdzCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAtLW5vLXRhZ3MgLiBkaXJfbWFzdGVyX25vX3RhZ3MgJiYKKworCSMgZGVmYXVsdCAtLXNpbmdsZSB0aGF0IGZvbGxvd3MgSEVBRD1zaWRlCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgY2xvbmUgLS1zaW5nbGUtYnJhbmNoIC4gZGlyX3NpZGUgJiYKKworCSMgZXhwbGljaXQgLS1zaW5nbGUgdGhhdCBmb2xsb3dzIHNpZGUKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAtLWJyYW5jaCBzaWRlIC4gZGlyX3NpZGUyICYmCisKKwkjIGRlZmF1bHQgLS1zaW5nbGUgd2l0aCAtLW1pcnJvcgorCWdpdCBjbG9uZSAtLXNpbmdsZS1icmFuY2ggLS1taXJyb3IgLiBkaXJfbWlycm9yICYmCisKKwkjIGRlZmF1bHQgLS1zaW5nbGUgd2l0aCAtLWJyYW5jaCBhbmQgLS1taXJyb3IKKwlnaXQgY2xvbmUgLS1zaW5nbGUtYnJhbmNoIC0tbWlycm9yIC0tYnJhbmNoIHNpZGUgLiBkaXJfbWlycm9yX3NpZGUgJiYKKworCSMgLS1zaW5nbGUgdGhhdCBkb2VzIG5vdCBrbm93IHdoYXQgYnJhbmNoIHRvIGZvbGxvdworCWdpdCBjaGVja291dCB0d29eICYmCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAuIGRpcl9kZXRhY2hlZCAmJgorCisJIyBleHBsaWNpdCAtLXNpbmdsZSB3aXRoIHRhZworCWdpdCBjbG9uZSAtLXNpbmdsZS1icmFuY2ggLS1icmFuY2ggdHdvIC4gZGlyX3RhZyAmJgorCisJIyBleHBsaWNpdCAtLXNpbmdsZSB3aXRoIHRhZyBhbmQgLS1uby10YWdzCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAtLW5vLXRhZ3MgLS1icmFuY2ggdHdvIC4gZGlyX3RhZ19ub190YWdzICYmCisKKwkjIGFkdmFuY2UgYm90aCAibWFzdGVyIiBhbmQgInNpZGUiIGJyYW5jaGVzCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvIGZpdmUgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGZpdmUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBzaXggPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNpeCAmJgorCisJIyB1cGRhdGUgdGFnCisJZ2l0IHRhZyAtZCB0d28gJiYgZ2l0IHRhZyB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnkgZGVmYXVsdCBhbGwgYnJhbmNoZXMgd2lsbCBiZSBrZXB0IHVwZGF0ZWQnICcKKwkoCisJCWNkIGRpcl9hbGwgJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiA+cmVmcyAmJgorCQlzZWQgLWUgIi9IRUFEJC9kIiBcCisJCSAgICAtZSAic3wvcmVtb3Rlcy9vcmlnaW4vfC9oZWFkcy98IiByZWZzID4uLi9hY3R1YWwKKwkpICYmCisJIyBmb2xsb3cgYm90aCBtYXN0ZXIgYW5kIHNpZGUKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnkgZGVmYXVsdCBubyB0YWdzIHdpbGwgYmUga2VwdCB1cGRhdGVkJyAnCisJKAorCQljZCBkaXJfYWxsICYmCisJCWdpdCBmZXRjaCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvdGFncyA+Li4vYWN0dWFsCisJKSAmJgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy90YWdzID5leHBlY3QgJiYKKwkhIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIC0tbm8tdGFncycgJworCSgKKwkJY2QgZGlyX2FsbF9ub190YWdzICYmCisJCWdpdCBmZXRjaCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvdGFncyA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdoaWxlIEhFQUQgcG9pbnRpbmcgYXQgbWFzdGVyJyAnCisJKAorCQljZCBkaXJfbWFzdGVyICYmCisJCWdpdCBmZXRjaCAtLWZvcmNlICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiA+cmVmcyAmJgorCQlzZWQgLWUgIi9IRUFEJC9kIiBcCisJCSAgICAtZSAic3wvcmVtb3Rlcy9vcmlnaW4vfC9oZWFkcy98IiByZWZzID4uLi9hY3R1YWwKKwkpICYmCisJIyBvbmx5IGZvbGxvdyBtYXN0ZXIKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwkjIGdldCAmIGNoZWNrIGxhdGVzdCB0YWdzCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCSgKKwkJY2QgZGlyX21hc3RlciAmJgorCQlnaXQgZmV0Y2ggLS10YWdzIC0tZm9yY2UgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3RhZ3MgPi4uL2FjdHVhbAorCSkgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvdGFncyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2luZ2xlLWJyYW5jaCB3aGlsZSBIRUFEIHBvaW50aW5nIGF0IG1hc3RlciBhbmQgLS1uby10YWdzJyAnCisJKAorCQljZCBkaXJfbWFzdGVyX25vX3RhZ3MgJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiA+cmVmcyAmJgorCQlzZWQgLWUgIi9IRUFEJC9kIiBcCisJCSAgICAtZSAic3wvcmVtb3Rlcy9vcmlnaW4vfC9oZWFkcy98IiByZWZzID4uLi9hY3R1YWwKKwkpICYmCisJIyBvbmx5IGZvbGxvdyBtYXN0ZXIKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJIyBnZXQgdGFncyAobm9vcCkKKwkoCisJCWNkIGRpcl9tYXN0ZXJfbm9fdGFncyAmJgorCQlnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3RhZ3MgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwgJiYKKwkjIGdldCB0YWdzIHdpdGggLS10YWdzIG92ZXJyaWRlcyB0YWdPcHQKKwkoCisJCWNkIGRpcl9tYXN0ZXJfbm9fdGFncyAmJgorCQlnaXQgZmV0Y2ggLS10YWdzICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy90YWdzID4uLi9hY3R1YWwKKwkpICYmCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3RhZ3MgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNpbmdsZS1icmFuY2ggd2hpbGUgSEVBRCBwb2ludGluZyBhdCBzaWRlJyAnCisJKAorCQljZCBkaXJfc2lkZSAmJgorCQlnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luID5yZWZzICYmCisJCXNlZCAtZSAiL0hFQUQkL2QiIFwKKwkJICAgIC1lICJzfC9yZW1vdGVzL29yaWdpbi98L2hlYWRzL3wiIHJlZnMgPi4uL2FjdHVhbAorCSkgJiYKKwkjIG9ubHkgZm9sbG93IHNpZGUKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvc2lkZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNpbmdsZS1icmFuY2ggd2l0aCBleHBsaWNpdCAtLWJyYW5jaCBzaWRlJyAnCisJKAorCQljZCBkaXJfc2lkZTIgJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiA+cmVmcyAmJgorCQlzZWQgLWUgIi9IRUFEJC9kIiBcCisJCSAgICAtZSAic3wvcmVtb3Rlcy9vcmlnaW4vfC9oZWFkcy98IiByZWZzID4uLi9hY3R1YWwKKwkpICYmCisJIyBvbmx5IGZvbGxvdyBzaWRlCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzL3NpZGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdpdGggZXhwbGljaXQgLS1icmFuY2ggd2l0aCB0YWcgZmV0Y2hlcyB1cGRhdGVkIHRhZycgJworCSgKKwkJY2QgZGlyX3RhZyAmJgorCQlnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3RhZ3MgPi4uL2FjdHVhbAorCSkgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvdGFncyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNpbmdsZS1icmFuY2ggd2l0aCBleHBsaWNpdCAtLWJyYW5jaCB3aXRoIHRhZyBmZXRjaGVzIHVwZGF0ZWQgdGFnIGRlc3BpdGUgLS1uby10YWdzJyAnCisJKAorCQljZCBkaXJfdGFnX25vX3RhZ3MgJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy90YWdzID4uLi9hY3R1YWwKKwkpICYmCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3RhZ3MvdHdvID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdpdGggLS1taXJyb3InICcKKwkoCisJCWNkIGRpcl9taXJyb3IgJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcyA+IC4uL2FjdHVhbAorCSkgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdpdGggZXhwbGljaXQgLS1icmFuY2ggYW5kIC0tbWlycm9yJyAnCisJKAorCQljZCBkaXJfbWlycm9yX3NpZGUgJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcyA+IC4uL2FjdHVhbAorCSkgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdpdGggZGV0YWNoZWQnICcKKwkoCisJCWNkIGRpcl9kZXRhY2hlZCAmJgorCQlnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luID5yZWZzICYmCisJCXNlZCAtZSAiL0hFQUQkL2QiIFwKKwkJICAgIC1lICJzfC9yZW1vdGVzL29yaWdpbi98L2hlYWRzL3wiIHJlZnMgPi4uL2FjdHVhbAorCSkgJiYKKwkjIG5vdGhpbmcKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYxMy1pbmZvLWFsdGVybmF0ZS5zaCBiL3QvdDU2MTMtaW5mby1hbHRlcm5hdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODk1ZjQ2YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MTMtaW5mby1hbHRlcm5hdGUuc2gKQEAgLTAsMCArMSwxMzkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgTWFydGluIFdhaXR6IDx0YWxpQGFkbWluZ2lsZGUub3JnPgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHRyYW5zaXRpdmUgaW5mby9hbHRlcm5hdGUgZW50cmllcycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgZmlyc3QgcmVwb3NpdG9yeScgJworCXRlc3RfY3JlYXRlX3JlcG8gQSAmJiAoCisJCWNkIEEgJiYKKwkJZWNobyAiSGVsbG8gV29ybGQiID4gZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgZmlsZTEgJiYKKwkJZ2l0IHJlcGFjayAtYSAtZCAmJgorCQlnaXQgcHJ1bmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBzZWNvbmQgcmVwb3NpdG9yeScgJworCWdpdCBjbG9uZSAtbCAtcyBBIEIgJiYgKAorCQljZCBCICYmCisJCWVjaG8gImZvbyBiYXIiID4gZmlsZTIgJiYKKwkJZ2l0IGFkZCBmaWxlMiAmJgorCQlnaXQgY29tbWl0IC1tICJuZXh0IGNvbW1pdCIgZmlsZTIgJiYKKwkJZ2l0IHJlcGFjayAtYSAtZCAtbCAmJgorCQlnaXQgcHJ1bmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyB0aGlyZCByZXBvc2l0b3J5JyAnCisJZ2l0IGNsb25lIC1sIC1zIEIgQyAmJiAoCisJCWNkIEMgJiYKKwkJZWNobyAiR29vZGJ5ZSwgY3J1ZWwgd29ybGQiID4gZmlsZTMgJiYKKwkJZ2l0IGFkZCBmaWxlMyAmJgorCQlnaXQgY29tbWl0IC1tICJvbmUgbW9yZSIgZmlsZTMgJiYKKwkJZ2l0IHJlcGFjayAtYSAtZCAtbCAmJgorCQlnaXQgcHJ1bmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdW50LW9iamVjdHMgc2hvd3MgdGhlIGFsdGVybmF0ZXMnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlhbHRlcm5hdGU6ICQocHdkKS9CLy5naXQvb2JqZWN0cworCWFsdGVybmF0ZTogJChwd2QpL0EvLmdpdC9vYmplY3RzCisJRU9GCisJZ2l0IC1DIEMgY291bnQtb2JqZWN0cyAtdiA+YWN0dWFsICYmCisJZ3JlcCBeYWx0ZXJuYXRlOiBhY3R1YWwgPmFjdHVhbC5hbHRlcm5hdGVzICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5hbHRlcm5hdGVzCisnCisKKyMgTm90ZTogVGhlc2UgdGVzdHMgZGVwZW5kIG9uIHRoZSBoYXJkLWNvZGVkIHZhbHVlIG9mIDUgYXMgdGhlIG1heGltdW0gZGVwdGgKKyMgd2Ugd2lsbCBmb2xsb3cgcmVjdXJzaW9uLiBXZSBzdGFydCB0aGUgZGVwdGggYXQgMCBhbmQgY291bnQgbGlua3MsIG5vdAorIyByZXBvc2l0b3JpZXMuIFRoaXMgbWVhbnMgdGhhdCBpbiBhIGNoYWluIGxpa2U6CisjCisjICAgQSAtLT4gQiAtLT4gQyAtLT4gRCAtLT4gRSAtLT4gRiAtLT4gRyAtLT4gSAorIyAgICAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAgIDUgICAgIDYKKyMKKyMgd2UgYXJlIE9LIGF0ICJHIiwgYnV0IGJyZWFrIGF0ICJIIiwgZXZlbiB0aG91Z2ggIkgiIGlzIGFjdHVhbGx5IHRoZSA4dGgKKyMgcmVwb3NpdG9yeSwgbm90IHRoZSA2dGgsIHdoaWNoIHlvdSBtaWdodCBleHBlY3QuIENvdW50aW5nIHRoZSBsaW5rcyBhbGxvd3MKKyMgTisxIHJlcG9zaXRvcmllcywgYW5kIGNvdW50aW5nIGZyb20gMCB0byA1IGluY2x1c2l2ZSBhbGxvd3MgNiBsaW5rcy4KKyMKKyMgTm90ZSBhbHNvIHRoYXQgd2UgbXVzdCB1c2UgIi0tYmFyZSAtbCIgdG8gbWFrZSB0aGUgbGluayB0byBILiBUaGUgIi1sIgorIyBlbnN1cmVzIHdlIGRvIG5vdCBkbyBhIGNvbm5lY3Rpdml0eSBjaGVjaywgYW5kIHRoZSAiLS1iYXJlIiBtYWtlcyBzdXJlCisjIHdlIGRvIG5vdCB0cnkgdG8gY2hlY2tvdXQgdGhlIHJlc3VsdCAod2hpY2ggbmVlZHMgb2JqZWN0cyksIGVpdGhlciBvZgorIyB3aGljaCB3b3VsZCBjYXVzZSB0aGUgY2xvbmUgdG8gZmFpbC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIHRvbyBkZWVwIG5lc3RpbmcnICcKKwlnaXQgY2xvbmUgLWwgLXMgQyBEICYmCisJZ2l0IGNsb25lIC1sIC1zIEQgRSAmJgorCWdpdCBjbG9uZSAtbCAtcyBFIEYgJiYKKwlnaXQgY2xvbmUgLWwgLXMgRiBHICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtbCAtcyBHIEgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRpdHkgb2Ygc2V2ZW50aCByZXBvc2l0b3J5JyAnCisJZ2l0IC1DIEcgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkaXR5IG9mIGVpZ2h0aCByZXBvc2l0b3J5JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIEggZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmVha2luZyBvZiBsb29wcycgJworCWVjaG8gIiQocHdkKSIvQi8uZ2l0L29iamVjdHMgPj5BLy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwlnaXQgLUMgQyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoYXQgaW5mby9hbHRlcm5hdGVzIGlzIG5lY2Vzc2FyeScgJworCXJtIC1mIEMvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBDIGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhhdCByZWxhdGl2ZSBhbHRlcm5hdGUgaXMgcG9zc2libGUgZm9yIGN1cnJlbnQgZGlyJyAnCisJZWNobyAiLi4vLi4vLi4vQi8uZ2l0L29iamVjdHMiID5DLy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwlnaXQgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGF0IHJlbGF0aXZlIGFsdGVybmF0ZSBpcyByZWN1cnNpdmUnICcKKwlnaXQgLUMgRCBmc2NrCisnCisKKyMgd2UgY2FuIHJlYWNoICJBIiBmcm9tIG91ciBuZXcgcmVwbyBib3RoIGRpcmVjdGx5LCBhbmQgdmlhICJDIi4KKyMgVGhlIGRlZXAvc3ViZGlyIGlzIHRoZXJlIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgbm90IGRvaW5nIGEgc3R1cGlkCisjIHB1cmUtdGV4dCBjb21wYXJpc29uIG9mIHRoZSBhbHRlcm5hdGUgbmFtZXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBkdXBsaWNhdGVzIGFyZSBlbGltaW5hdGVkJyAnCisJbWtkaXIgLXAgZGVlcC9zdWJkaXIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZGVlcC9zdWJkaXIvZHVwbGljYXRlLmdpdCAmJgorCWNhdCA+ZGVlcC9zdWJkaXIvZHVwbGljYXRlLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyA8PC1cRU9GICYmCisJLi4vLi4vLi4vLi4vQy8uZ2l0L29iamVjdHMKKwkuLi8uLi8uLi8uLi9BLy5naXQvb2JqZWN0cworCUVPRgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWFsdGVybmF0ZTogJChwd2QpL0MvLmdpdC9vYmplY3RzCisJYWx0ZXJuYXRlOiAkKHB3ZCkvQi8uZ2l0L29iamVjdHMKKwlhbHRlcm5hdGU6ICQocHdkKS9BLy5naXQvb2JqZWN0cworCUVPRgorCWdpdCAtQyBkZWVwL3N1YmRpci9kdXBsaWNhdGUuZ2l0IGNvdW50LW9iamVjdHMgLXYgPmFjdHVhbCAmJgorCWdyZXAgXmFsdGVybmF0ZTogYWN0dWFsID5hY3R1YWwuYWx0ZXJuYXRlcyAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuYWx0ZXJuYXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENBU0VfSU5TRU5TSVRJVkVfRlMgJ2R1cCBmaW5kaW5nIGNhbiBiZSBjYXNlLWluc2Vuc2l0aXZlJyAnCisJZ2l0IGluaXQgLS1iYXJlIGluc2Vuc2l0aXZlLmdpdCAmJgorCSMgdGhlIHByZXZpb3VzIGVudHJ5IGZvciAiQSIgd2lsbCBoYXZlIHVzZWQgdXBwZXJjYXNlCisJY2F0ID5pbnNlbnNpdGl2ZS5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgPDwtXEVPRiAmJgorCS4uLy4uL0MvLmdpdC9vYmplY3RzCisJLi4vLi4vYS8uZ2l0L29iamVjdHMKKwlFT0YKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlhbHRlcm5hdGU6ICQocHdkKS9DLy5naXQvb2JqZWN0cworCWFsdGVybmF0ZTogJChwd2QpL0IvLmdpdC9vYmplY3RzCisJYWx0ZXJuYXRlOiAkKHB3ZCkvQS8uZ2l0L29iamVjdHMKKwlFT0YKKwlnaXQgLUMgaW5zZW5zaXRpdmUuZ2l0IGNvdW50LW9iamVjdHMgLXYgPmFjdHVhbCAmJgorCWdyZXAgXmFsdGVybmF0ZTogYWN0dWFsID5hY3R1YWwuYWx0ZXJuYXRlcyAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuYWx0ZXJuYXRlcworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MTQtY2xvbmUtc3VibW9kdWxlcy1zaGFsbG93LnNoIGIvdC90NTYxNC1jbG9uZS1zdWJtb2R1bGVzLXNoYWxsb3cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTRlNmVhNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MTQtY2xvbmUtc3VibW9kdWxlcy1zaGFsbG93LnNoCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBzaGFsbG93IGNsb25pbmcgb2YgcmVwb3Mgd2l0aCBzdWJtb2R1bGVzJworCisuIC4vdGVzdC1saWIuc2gKKworcHdkPSQocHdkKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBjaGVja291dCAtYiBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBjb21taXQxICYmCisJdGVzdF9jb21taXQgY29tbWl0MiAmJgorCW1rZGlyIHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3RfY29tbWl0IHN1YmNvbW1pdDEgJiYKKwkJdGVzdF9jb21taXQgc3ViY29tbWl0MiAmJgorCQl0ZXN0X2NvbW1pdCBzdWJjb21taXQzCisJKSAmJgorCWdpdCBzdWJtb2R1bGUgYWRkICJmaWxlOi8vJHB3ZC9zdWIiIHN1YiAmJgorCWdpdCBjb21taXQgLW0gImFkZCBzdWJtb2R1bGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbnNoYWxsb3cgY2xvbmUgaW1wbGllcyBub25zaGFsbG93IHN1Ym1vZHVsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAiZmlsZTovLyRwd2QvLiIgc3VwZXJfY2xvbmUgJiYKKwlnaXQgLUMgc3VwZXJfY2xvbmUgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzICYmCisJZ2l0IC1DIHN1cGVyX2Nsb25lL3N1YiBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgbGluZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhbGxvdyBjbG9uZSB3aXRoIHNoYWxsb3cgc3VibW9kdWxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXJfY2xvbmUiICYmCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tZGVwdGggMiAtLXNoYWxsb3ctc3VibW9kdWxlcyAiZmlsZTovLyRwd2QvLiIgc3VwZXJfY2xvbmUgJiYKKwlnaXQgLUMgc3VwZXJfY2xvbmUgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzICYmCisJZ2l0IC1DIHN1cGVyX2Nsb25lL3N1YiBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgbGluZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhbGxvdyBjbG9uZSBkb2VzIG5vdCBpbXBseSBzaGFsbG93IHN1Ym1vZHVsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLWRlcHRoIDIgImZpbGU6Ly8kcHdkLy4iIHN1cGVyX2Nsb25lICYmCisJZ2l0IC1DIHN1cGVyX2Nsb25lIGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcyAmJgorCWdpdCAtQyBzdXBlcl9jbG9uZS9zdWIgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYWxsb3cgY2xvbmUgd2l0aCBub24gc2hhbGxvdyBzdWJtb2R1bGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcl9jbG9uZSIgJiYKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1kZXB0aCAyIC0tbm8tc2hhbGxvdy1zdWJtb2R1bGVzICJmaWxlOi8vJHB3ZC8uIiBzdXBlcl9jbG9uZSAmJgorCWdpdCAtQyBzdXBlcl9jbG9uZSBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgbGluZXMgJiYKKwlnaXQgLUMgc3VwZXJfY2xvbmUvc3ViIGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBsaW5lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24gc2hhbGxvdyBjbG9uZSB3aXRoIHNoYWxsb3cgc3VibW9kdWxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXJfY2xvbmUiICYmCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tbm8tbG9jYWwgLS1zaGFsbG93LXN1Ym1vZHVsZXMgImZpbGU6Ly8kcHdkLy4iIHN1cGVyX2Nsb25lICYmCisJZ2l0IC1DIHN1cGVyX2Nsb25lIGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBsaW5lcyAmJgorCWdpdCAtQyBzdXBlcl9jbG9uZS9zdWIgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGxpbmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGZvbGxvd3Mgc2hhbGxvdyByZWNvbW1lbmRhdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5zaGFsbG93IHRydWUgJiYKKwlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJZ2l0IGNvbW1pdCAtbSAicmVjb21tZW5kIHNoYWxsb3cgZm9yIHN1YiIgJiYKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1uby1sb2NhbCAiZmlsZTovLyRwd2QvLiIgc3VwZXJfY2xvbmUgJiYKKwkoCisJCWNkIHN1cGVyX2Nsb25lICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IGxpbmVzCisJKSAmJgorCSgKKwkJY2Qgc3VwZXJfY2xvbmUvc3ViICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGxpbmVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgdW5zaGFsbG93IHJlY29tbWVuZGVkIHNoYWxsb3cgc3VibW9kdWxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXJfY2xvbmUiICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgImZpbGU6Ly8kcHdkLy4iIHN1cGVyX2Nsb25lICYmCisJKAorCQljZCBzdXBlcl9jbG9uZSAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1uby1yZWNvbW1lbmQtc2hhbGxvdyAmJgorCQlnaXQgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBsaW5lcworCSkgJiYKKwkoCisJCWNkIHN1cGVyX2Nsb25lL3N1YiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZm9sbG93cyBub24gc2hhbGxvdyByZWNvbW1lbmRhdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5zaGFsbG93IGZhbHNlICYmCisJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCWdpdCBjb21taXQgLW0gInJlY29tbWVuZCBub24gc2hhbGxvdyBmb3Igc3ViIiAmJgorCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLW5vLWxvY2FsICJmaWxlOi8vJHB3ZC8uIiBzdXBlcl9jbG9uZSAmJgorCSgKKwkJY2Qgc3VwZXJfY2xvbmUgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgbGluZXMKKwkpICYmCisJKAorCQljZCBzdXBlcl9jbG9uZS9zdWIgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgbGluZXMKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYxNS1hbHRlcm5hdGUtZW52LnNoIGIvdC90NTYxNS1hbHRlcm5hdGUtZW52LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI0OTA1YjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjE1LWFsdGVybmF0ZS1lbnYuc2gKQEAgLTAsMCArMSw5MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2hhbmRsaW5nIG9mIGFsdGVybmF0ZXMgaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzJworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX29iaiAoKSB7CisJYWx0PSQxOyBzaGlmdAorCXdoaWxlIHJlYWQgb2JqIGV4cGVjdAorCWRvCisJCWVjaG8gIiRvYmoiID4mNSAmJgorCQllY2hvICIkb2JqICRleHBlY3QiID4mNgorCWRvbmUgNT5pbnB1dCA2PmV4cGVjdCAmJgorCUdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTPSRhbHQgXAorCQlnaXQgIiRAIiBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrPSclKG9iamVjdG5hbWUpICUob2JqZWN0dHlwZSknIFwKKwkJPGlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBhbHRlcm5hdGUgcmVwb3NpdG9yaWVzJyAnCisJZ2l0IGluaXQgLS1iYXJlIG9uZS5naXQgJiYKKwlvbmU9JChlY2hvIG9uZSB8IGdpdCAtQyBvbmUuZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJZ2l0IGluaXQgLS1iYXJlIHR3by5naXQgJiYKKwl0d289JChlY2hvIHR3byB8IGdpdCAtQyB0d28uZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29iamVjdHMgaW5hY2Nlc3NpYmxlIHdpdGhvdXQgYWx0ZXJuYXRlcycgJworCWNoZWNrX29iaiAiIiA8PC1FT0YKKwkkb25lIG1pc3NpbmcKKwkkdHdvIG1pc3NpbmcKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWNjZXNzIGFsdGVybmF0ZSB2aWEgYWJzb2x1dGUgcGF0aCcgJworCWNoZWNrX29iaiAiJFBXRC9vbmUuZ2l0L29iamVjdHMiIDw8LUVPRgorCSRvbmUgYmxvYgorCSR0d28gbWlzc2luZworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhY2Nlc3MgbXVsdGlwbGUgYWx0ZXJuYXRlcycgJworCWNoZWNrX29iaiAiJFBXRC9vbmUuZ2l0L29iamVjdHM6JFBXRC90d28uZ2l0L29iamVjdHMiIDw8LUVPRgorCSRvbmUgYmxvYgorCSR0d28gYmxvYgorCUVPRgorJworCisjIGJhcmUgcGF0aHMgYXJlIHJlbGF0aXZlIGZyb20gJEdJVF9ESVIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FjY2VzcyBhbHRlcm5hdGUgdmlhIHJlbGF0aXZlIHBhdGggKGJhcmUpJyAnCisJZ2l0IGluaXQgLS1iYXJlIGJhcmUuZ2l0ICYmCisJY2hlY2tfb2JqICIuLi9vbmUuZ2l0L29iamVjdHMiIC1DIGJhcmUuZ2l0IDw8LUVPRgorCSRvbmUgYmxvYgorCUVPRgorJworCisjIG5vbi1iYXJlIHBhdGhzIGFyZSByZWxhdGl2ZSB0byB0b3Agb2Ygd29ya3RyZWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FjY2VzcyBhbHRlcm5hdGUgdmlhIHJlbGF0aXZlIHBhdGggKHdvcmt0cmVlKScgJworCWdpdCBpbml0IHdvcmt0cmVlICYmCisJY2hlY2tfb2JqICIuLi9vbmUuZ2l0L29iamVjdHMiIC1DIHdvcmt0cmVlIDw8LUVPRgorCSRvbmUgYmxvYgorCUVPRgorJworCisjIHBhdGggaXMgY29tcHV0ZWQgYWZ0ZXIgbW92aW5nIHRvIHRvcC1sZXZlbCBvZiB3b3JrdHJlZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWNjZXNzIGFsdGVybmF0ZSB2aWEgcmVsYXRpdmUgcGF0aCAoc3ViZGlyKScgJworCW1rZGlyIHN1YmRpciAmJgorCWNoZWNrX29iaiAib25lLmdpdC9vYmplY3RzIiAtQyBzdWJkaXIgPDwtRU9GCisJJG9uZSBibG9iCisJRU9GCisnCisKKyMgc2V0IHZhcmlhYmxlcyBvdXRzaWRlIHRlc3QgdG8gYXZvaWQgcXVvdGUgaW5zYW5pdHk7IHRoZSBcMDU3IGlzICcvJywKKyMgd2hpY2ggZG9lc24ndCBuZWVkIHF1b3RpbmcsIGJ1dCBqdXN0IGNvbmZpcm1zIHRoYXQgZGUtcXVvdGluZworIyBpcyB3b3JraW5nLgorcXVvdGVkPScib25lLmdpdFwwNTdvYmplY3RzIicKK3VucXVvdGVkPSd0d28uZ2l0L29iamVjdHMnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXggb2YgcXVvdGVkIGFuZCB1bnF1b3RlZCBhbHRlcm5hdGVzJyAnCisJY2hlY2tfb2JqICIkcXVvdGVkOiR1bnF1b3RlZCIgPDwtRU9GCisJJG9uZSBibG9iCisJJHR3byBibG9iCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdicm9rZW4gcXVvdGluZyBmYWxscyBiYWNrIHRvIGludGVycHJldGluZyByYXcnICcKKwltdiBvbmUuZ2l0IFwib25lLmdpdCAmJgorCWNoZWNrX29iaiBcIm9uZS5naXQvb2JqZWN0cyA8PC1FT0YKKwkkb25lIGJsb2IKKwlFT0YKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjE2LXBhcnRpYWwtY2xvbmUuc2ggYi90L3Q1NjE2LXBhcnRpYWwtY2xvbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGEyNzQ1MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MTYtcGFydGlhbC1jbG9uZS5zaApAQCAtMCwwICsxLDYwOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwYXJ0aWFsIGNsb25lJworCisuIC4vdGVzdC1saWIuc2gKKworIyBjcmVhdGUgYSBub3JtYWwgInNyYyIgcmVwbyB3aGVyZSB3ZSBjYW4gbGF0ZXIgY3JlYXRlIG5ldyBjb21taXRzLgorIyBleHBlY3RfMS5vaWRzIHdpbGwgY29udGFpbiBhIGxpc3Qgb2YgdGhlIE9JRHMgb2YgYWxsIGJsb2JzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbm9ybWFsIHNyYyByZXBvJyAnCisJZWNobyAie3ByaW50IFwkMX0iID5wcmludF8xLmF3ayAmJgorCWVjaG8gIntwcmludCBcJDJ9IiA+cHJpbnRfMi5hd2sgJiYKKworCWdpdCBpbml0IHNyYyAmJgorCWZvciBuIGluIDEgMiAzIDQKKwlkbworCQllY2hvICJUaGlzIGlzIGZpbGU6ICRuIiA+IHNyYy9maWxlLiRuLnR4dAorCQlnaXQgLUMgc3JjIGFkZCBmaWxlLiRuLnR4dAorCQlnaXQgLUMgc3JjIGNvbW1pdCAtbSAiZmlsZSAkbiIKKwkJZ2l0IC1DIHNyYyBscy1maWxlcyAtcyBmaWxlLiRuLnR4dCA+PnRlbXAKKwlkb25lICYmCisJYXdrIC1mIHByaW50XzIuYXdrIDx0ZW1wIHwgc29ydCA+ZXhwZWN0XzEub2lkcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgZXhwZWN0XzEub2lkcworJworCisjIGJhcmUgY2xvbmUgInNyYyIgZ2l2aW5nICJzcnYuYmFyZSIgZm9yIHVzZSBhcyBvdXIgc2VydmVyLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYmFyZSBjbG9uZSBmb3Igc2VydmVyJyAnCisJZ2l0IGNsb25lIC0tYmFyZSAiZmlsZTovLyQocHdkKS9zcmMiIHNydi5iYXJlICYmCisJZ2l0IC1DIHNydi5iYXJlIGNvbmZpZyAtLWxvY2FsIHVwbG9hZHBhY2suYWxsb3dmaWx0ZXIgMSAmJgorCWdpdCAtQyBzcnYuYmFyZSBjb25maWcgLS1sb2NhbCB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxCisnCisKKyMgZG8gYmFzaWMgcGFydGlhbCBjbG9uZSBmcm9tICJzcnYuYmFyZSIKKyMgY29uZmlybSB3ZSBhcmUgbWlzc2luZyBhbGwgb2YgdGhlIGtub3duIGJsb2JzLgorIyBjb25maXJtIHBhcnRpYWwgY2xvbmUgd2FzIHJlZ2lzdGVyZWQgaW4gdGhlIGxvY2FsIGNvbmZpZy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIHBhcnRpYWwgY2xvbmUgMScgJworCWdpdCBjbG9uZSAtLW5vLWNoZWNrb3V0IC0tZmlsdGVyPWJsb2I6bm9uZSAiZmlsZTovLyQocHdkKS9zcnYuYmFyZSIgcGMxICYmCisKKwlnaXQgLUMgcGMxIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIC0tbWlzc2luZz1wcmludCBIRUFEID5yZXZzICYmCisJYXdrIC1mIHByaW50XzEuYXdrIHJldnMgfAorCXNlZCAicy8/Ly8iIHwKKwlzb3J0ID5vYnNlcnZlZC5vaWRzICYmCisKKwl0ZXN0X2NtcCBleHBlY3RfMS5vaWRzIG9ic2VydmVkLm9pZHMgJiYKKwl0ZXN0ICIkKGdpdCAtQyBwYzEgY29uZmlnIC0tbG9jYWwgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbikiID0gIjEiICYmCisJdGVzdCAiJChnaXQgLUMgcGMxIGNvbmZpZyAtLWxvY2FsIHJlbW90ZS5vcmlnaW4ucHJvbWlzb3IpIiA9ICJ0cnVlIiAmJgorCXRlc3QgIiQoZ2l0IC1DIHBjMSBjb25maWcgLS1sb2NhbCByZW1vdGUub3JpZ2luLnBhcnRpYWxjbG9uZWZpbHRlcikiID0gImJsb2I6bm9uZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgLnByb21pc29yIGZpbGUgY29udGFpbnMgcmVmcyBmZXRjaGVkJyAnCisJbHMgcGMxLy5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wcm9taXNvciA+cHJvbWlzb3JsaXN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBwcm9taXNvcmxpc3QgJiYKKwlnaXQgLUMgc3J2LmJhcmUgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmhlYWRoYXNoICYmCisJZ3JlcCAiJChjYXQgaGVhZGhhc2gpIEhFQUQiICQoY2F0IHByb21pc29ybGlzdCkgJiYKKwlncmVwICIkKGNhdCBoZWFkaGFzaCkgcmVmcy9oZWFkcy9tYXN0ZXIiICQoY2F0IHByb21pc29ybGlzdCkKKycKKworIyBjaGVja291dCBtYXN0ZXIgdG8gZm9yY2UgZHluYW1pYyBvYmplY3QgZmV0Y2ggb2YgYmxvYnMgYXQgSEVBRC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBjaGVja291dCB3aXRoIGR5bmFtaWMgb2JqZWN0IGZldGNoJyAnCisJZ2l0IC1DIHBjMSByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyAtLW1pc3Npbmc9cHJpbnQgSEVBRCA+b2JzZXJ2ZWQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IG9ic2VydmVkICYmCisJZ2l0IC1DIHBjMSBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgLUMgcGMxIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIC0tbWlzc2luZz1wcmludCBIRUFEID5vYnNlcnZlZCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgb2JzZXJ2ZWQKKycKKworIyBjcmVhdGUgbmV3IGNvbW1pdHMgaW4gInNyYyIgcmVwbyB0byBlc3RhYmxpc2ggYSBibGFtZSBoaXN0b3J5IG9uIGZpbGUuMS50eHQKKyMgYW5kIHB1c2ggdG8gInNydi5iYXJlIi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbmV3IGNvbW1pdHMgdG8gc2VydmVyJyAnCisJZ2l0IC1DIHNyYyByZW1vdGUgYWRkIHNydiAiZmlsZTovLyQocHdkKS9zcnYuYmFyZSIgJiYKKwlmb3IgeCBpbiBhIGIgYyBkIGUKKwlkbworCQllY2hvICJNb2QgZmlsZS4xLnR4dCAkeCIgPj5zcmMvZmlsZS4xLnR4dAorCQlnaXQgLUMgc3JjIGFkZCBmaWxlLjEudHh0CisJCWdpdCAtQyBzcmMgY29tbWl0IC1tICJtb2QgJHgiCisJZG9uZSAmJgorCWdpdCAtQyBzcmMgYmxhbWUgbWFzdGVyIC0tIGZpbGUuMS50eHQgPmV4cGVjdC5ibGFtZSAmJgorCWdpdCAtQyBzcmMgcHVzaCAtdSBzcnYgbWFzdGVyCisnCisKKyMgKHBhcnRpYWwpIGZldGNoIGluIHRoZSBwYXJ0aWFsIGNsb25lIHJlcG8gZnJvbSB0aGUgcHJvbWlzb3IgcmVtb3RlLgorIyB2ZXJpZnkgdGhhdCBmZXRjaCBpbmhlcml0ZWQgdGhlIGZpbHRlci1zcGVjIGZyb20gdGhlIGNvbmZpZyBhbmQgRE9FUyBOT1QKKyMgaGF2ZSB0aGUgbmV3IGJsb2JzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBmZXRjaCBpbmhlcml0cyBmaWx0ZXIgc2V0dGluZ3MnICcKKwlnaXQgLUMgcGMxIGZldGNoIG9yaWdpbiAmJgorCWdpdCAtQyBwYzEgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1taXNzaW5nPXByaW50IFwKKwkJbWFzdGVyLi5vcmlnaW4vbWFzdGVyID5vYnNlcnZlZCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgb2JzZXJ2ZWQKKycKKworIyBmb3JjZSBkeW5hbWljIG9iamVjdCBmZXRjaCB1c2luZyBkaWZmLgorIyB3ZSBzaG91bGQgb25seSBnZXQgMSBuZXcgYmxvYiAoZm9yIHRoZSBmaWxlIGluIG9yaWdpbi9tYXN0ZXIpLgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGRpZmYgY2F1c2VzIGR5bmFtaWMgb2JqZWN0IGZldGNoJyAnCisJZ2l0IC1DIHBjMSBkaWZmIG1hc3Rlci4ub3JpZ2luL21hc3RlciAtLSBmaWxlLjEudHh0ICYmCisJZ2l0IC1DIHBjMSByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyAtLW1pc3Npbmc9cHJpbnQgXAorCQkgbWFzdGVyLi5vcmlnaW4vbWFzdGVyID5vYnNlcnZlZCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgb2JzZXJ2ZWQKKycKKworIyBmb3JjZSBmdWxsIGR5bmFtaWMgb2JqZWN0IGZldGNoIG9mIHRoZSBmaWxlJ3MgaGlzdG9yeSB1c2luZyBibGFtZS4KKyMgd2Ugc2hvdWxkIGdldCB0aGUgaW50ZXJtZWRpYXRlIGJsb2JzIGZvciB0aGUgZmlsZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibGFtZSBjYXVzZXMgZHluYW1pYyBvYmplY3QgZmV0Y2gnICcKKwlnaXQgLUMgcGMxIGJsYW1lIG9yaWdpbi9tYXN0ZXIgLS0gZmlsZS4xLnR4dCA+b2JzZXJ2ZWQuYmxhbWUgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYmxhbWUgb2JzZXJ2ZWQuYmxhbWUgJiYKKwlnaXQgLUMgcGMxIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIC0tbWlzc2luZz1wcmludCBcCisJCW1hc3Rlci4ub3JpZ2luL21hc3RlciA+b2JzZXJ2ZWQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIG9ic2VydmVkCisnCisKKyMgY3JlYXRlIG5ldyBjb21taXRzIGluICJzcmMiIHJlcG8gdG8gZXN0YWJsaXNoIGEgaGlzdG9yeSBvbiBmaWxlLjIudHh0CisjIGFuZCBwdXNoIHRvICJzcnYuYmFyZSIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG5ldyBjb21taXRzIHRvIHNlcnZlciBmb3IgZmlsZS4yLnR4dCcgJworCWZvciB4IGluIGEgYiBjIGQgZSBmCisJZG8KKwkJZWNobyAiTW9kIGZpbGUuMi50eHQgJHgiID4+c3JjL2ZpbGUuMi50eHQKKwkJZ2l0IC1DIHNyYyBhZGQgZmlsZS4yLnR4dAorCQlnaXQgLUMgc3JjIGNvbW1pdCAtbSAibW9kICR4IgorCWRvbmUgJiYKKwlnaXQgLUMgc3JjIHB1c2ggLXUgc3J2IG1hc3RlcgorJworCisjIERvIEZVTEwgZmV0Y2ggYnkgZGlzYWJsaW5nIGluaGVyaXRlZCBmaWx0ZXItc3BlYyB1c2luZyAtLW5vLWZpbHRlci4KKyMgVmVyaWZ5IHdlIGhhdmUgYWxsIHRoZSBuZXcgYmxvYnMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZSBpbmhlcml0ZWQgZmlsdGVyLXNwZWMgdXNpbmcgLS1uby1maWx0ZXInICcKKwlnaXQgLUMgcGMxIGZldGNoIC0tbm8tZmlsdGVyIG9yaWdpbiAmJgorCWdpdCAtQyBwYzEgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1taXNzaW5nPXByaW50IFwKKwkJbWFzdGVyLi5vcmlnaW4vbWFzdGVyID5vYnNlcnZlZCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgb2JzZXJ2ZWQKKycKKworIyBjcmVhdGUgbmV3IGNvbW1pdHMgaW4gInNyYyIgcmVwbyB0byBlc3RhYmxpc2ggYSBoaXN0b3J5IG9uIGZpbGUuMy50eHQKKyMgYW5kIHB1c2ggdG8gInNydi5iYXJlIi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbmV3IGNvbW1pdHMgdG8gc2VydmVyIGZvciBmaWxlLjMudHh0JyAnCisJZm9yIHggaW4gYSBiIGMgZCBlIGYKKwlkbworCQllY2hvICJNb2QgZmlsZS4zLnR4dCAkeCIgPj5zcmMvZmlsZS4zLnR4dAorCQlnaXQgLUMgc3JjIGFkZCBmaWxlLjMudHh0CisJCWdpdCAtQyBzcmMgY29tbWl0IC1tICJtb2QgJHgiCisJZG9uZSAmJgorCWdpdCAtQyBzcmMgcHVzaCAtdSBzcnYgbWFzdGVyCisnCisKKyMgRG8gYSBwYXJ0aWFsIGZldGNoIGFuZCB0aGVuIHRyeSB0byBtYW51YWxseSBmZXRjaCB0aGUgbWlzc2luZyBvYmplY3RzLgorIyBUaGlzIGNhbiBiZSB1c2VkIGFzIHRoZSBiYXNpcyBvZiBhIHByZS1jb21tYW5kIGhvb2sgdG8gYnVsayBmZXRjaCBvYmplY3RzCisjIHBlcmhhcHMgY29tYmluZWQgd2l0aCBhIGNvbW1hbmQgaW4gZHJ5LXJ1biBtb2RlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFudWFsIHByZWZldGNoIG9mIG1pc3Npbmcgb2JqZWN0cycgJworCWdpdCAtQyBwYzEgZmV0Y2ggLS1maWx0ZXI9YmxvYjpub25lIG9yaWdpbiAmJgorCisJZ2l0IC1DIHBjMSByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyAtLW1pc3Npbmc9cHJpbnQgXAorCQkgbWFzdGVyLi5vcmlnaW4vbWFzdGVyID5yZXZzICYmCisJYXdrIC1mIHByaW50XzEuYXdrIHJldnMgfAorCXNlZCAicy8/Ly8iIHwKKwlzb3J0ID5vYnNlcnZlZC5vaWRzICYmCisKKwl0ZXN0X2xpbmVfY291bnQgPSA2IG9ic2VydmVkLm9pZHMgJiYKKwlnaXQgLUMgcGMxIGZldGNoLXBhY2sgLS1zdGRpbiAiZmlsZTovLyQocHdkKS9zcnYuYmFyZSIgPG9ic2VydmVkLm9pZHMgJiYKKworCWdpdCAtQyBwYzEgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1taXNzaW5nPXByaW50IFwKKwkJbWFzdGVyLi5vcmlnaW4vbWFzdGVyID5yZXZzICYmCisJYXdrIC1mIHByaW50XzEuYXdrIHJldnMgfAorCXNlZCAicy8/Ly8iIHwKKwlzb3J0ID5vYnNlcnZlZC5vaWRzICYmCisKKwl0ZXN0X2xpbmVfY291bnQgPSAwIG9ic2VydmVkLm9pZHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBjbG9uZSB3aXRoIHRyYW5zZmVyLmZzY2tvYmplY3RzPTEgdXNlcyBpbmRleC1wYWNrIC0tZnNjay1vYmplY3RzJyAnCisJZ2l0IGluaXQgc3JjICYmCisJdGVzdF9jb21taXQgLUMgc3JjIHggJiYKKwl0ZXN0X2NvbmZpZyAtQyBzcmMgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJdGVzdF9jb25maWcgLUMgc3JjIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKworCUdJVF9UUkFDRT0iJChwd2QpL3RyYWNlIiBnaXQgLWMgdHJhbnNmZXIuZnNja29iamVjdHM9MSBcCisJCWNsb25lIC0tZmlsdGVyPSJibG9iOm5vbmUiICJmaWxlOi8vJChwd2QpL3NyYyIgZHN0ICYmCisJZ3JlcCAiZ2l0IGluZGV4LXBhY2suKi0tZnNjay1vYmplY3RzIiB0cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgZnNjayBiZWZvcmUgYW5kIGFmdGVyIG1hbnVhbGx5IGZldGNoaW5nIGEgbWlzc2luZyBzdWJ0cmVlJyAnCisJIyBwdXNoIG5ldyBjb21taXQgc28gc2VydmVyIGhhcyBhIHN1YnRyZWUKKwlta2RpciBzcmMvZGlyICYmCisJZWNobyAiaW4gZGlyIiA+c3JjL2Rpci9maWxlLnR4dCAmJgorCWdpdCAtQyBzcmMgYWRkIGRpci9maWxlLnR4dCAmJgorCWdpdCAtQyBzcmMgY29tbWl0IC1tICJmaWxlIGluIGRpciIgJiYKKwlnaXQgLUMgc3JjIHB1c2ggLXUgc3J2IG1hc3RlciAmJgorCVNVQlRSRUU9JChnaXQgLUMgc3JjIHJldi1wYXJzZSBIRUFEOmRpcikgJiYKKworCXJtIC1yZiBkc3QgJiYKKwlnaXQgY2xvbmUgLS1uby1jaGVja291dCAtLWZpbHRlcj10cmVlOjAgImZpbGU6Ly8kKHB3ZCkvc3J2LmJhcmUiIGRzdCAmJgorCWdpdCAtQyBkc3QgZnNjayAmJgorCisJIyBNYWtlIHN1cmUgd2Ugb25seSBoYXZlIGNvbW1pdHMsIGFuZCBhbGwgdHJlZXMgYW5kIGJsb2JzIGFyZSBtaXNzaW5nLgorCWdpdCAtQyBkc3QgcmV2LWxpc3QgLS1taXNzaW5nPWFsbG93LWFueSAtLW9iamVjdHMgbWFzdGVyIFwKKwkJPmZldGNoZWRfb2JqZWN0cyAmJgorCWF3ayAtZiBwcmludF8xLmF3ayBmZXRjaGVkX29iamVjdHMgfAorCXhhcmdzIC1uMSBnaXQgLUMgZHN0IGNhdC1maWxlIC10ID5mZXRjaGVkX3R5cGVzICYmCisKKwlzb3J0IC11IGZldGNoZWRfdHlwZXMgPnVuaXF1ZV90eXBlcy5vYnNlcnZlZCAmJgorCWVjaG8gY29tbWl0ID51bmlxdWVfdHlwZXMuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCB1bmlxdWVfdHlwZXMuZXhwZWN0ZWQgdW5pcXVlX3R5cGVzLm9ic2VydmVkICYmCisKKwkjIEF1dG8tZmV0Y2ggYSB0cmVlIHdpdGggY2F0LWZpbGUuCisJZ2l0IC1DIGRzdCBjYXQtZmlsZSAtcCAkU1VCVFJFRSA+dHJlZV9jb250ZW50cyAmJgorCWdyZXAgZmlsZS50eHQgdHJlZV9jb250ZW50cyAmJgorCisJIyBmc2NrIHN0aWxsIHdvcmtzIGFmdGVyIGFuIGF1dG8tZmV0Y2ggb2YgYSB0cmVlLgorCWdpdCAtQyBkc3QgZnNjayAmJgorCisJIyBBdXRvLWZldGNoIGFsbCByZW1haW5pbmcgdHJlZXMgYW5kIGJsb2JzIHdpdGggLS1taXNzaW5nPWVycm9yCisJZ2l0IC1DIGRzdCByZXYtbGlzdCAtLW1pc3Npbmc9ZXJyb3IgLS1vYmplY3RzIG1hc3RlciA+ZmV0Y2hlZF9vYmplY3RzICYmCisJdGVzdF9saW5lX2NvdW50ID0gNzAgZmV0Y2hlZF9vYmplY3RzICYmCisKKwlhd2sgLWYgcHJpbnRfMS5hd2sgZmV0Y2hlZF9vYmplY3RzIHwKKwl4YXJncyAtbjEgZ2l0IC1DIGRzdCBjYXQtZmlsZSAtdCA+ZmV0Y2hlZF90eXBlcyAmJgorCisJc29ydCAtdSBmZXRjaGVkX3R5cGVzID51bmlxdWVfdHlwZXMub2JzZXJ2ZWQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGJsb2IgY29tbWl0IHRyZWUgPnVuaXF1ZV90eXBlcy5leHBlY3RlZCAmJgorCXRlc3RfY21wIHVuaXF1ZV90eXBlcy5leHBlY3RlZCB1bmlxdWVfdHlwZXMub2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wbGljaXRseSBjb25zdHJ1Y3QgY29tYmluZTogZmlsdGVyIHdpdGggcmVwZWF0ZWQgZmxhZ3MnICcKKwlHSVRfVFJBQ0U9JChwd2QpL3RyYWNlIGdpdCBjbG9uZSAtLWJhcmUgXAorCQktLWZpbHRlcj1ibG9iOm5vbmUgLS1maWx0ZXI9dHJlZToxIFwKKwkJImZpbGU6Ly8kKHB3ZCkvc3J2LmJhcmUiIHBjMiAmJgorCWdyZXAgInRyYWNlOi4qIGdpdCBwYWNrLW9iamVjdHMgLiotLWZpbHRlcj1jb21iaW5lOmJsb2I6bm9uZSt0cmVlOjEiIFwKKwkJdHJhY2UgJiYKKwlnaXQgLUMgcGMyIHJldi1saXN0IC0tb2JqZWN0cyAtLW1pc3Npbmc9YWxsb3ctYW55IEhFQUQgPm9iamVjdHMgJiYKKworCSMgV2Ugc2hvdWxkIGhhdmUgZ290dGVuIHNvbWUgcm9vdCB0cmVlcy4KKwlncmVwICIgJCIgb2JqZWN0cyAmJgorCSMgU2hvdWxkIG5vdCBoYXZlIGdvdHRlbiBhbnkgbm9uLXJvb3QgdHJlZXMgb3IgYmxvYnMuCisJISBncmVwICIgLiIgb2JqZWN0cyAmJgorCisJeGFyZ3MgLW4gMSBnaXQgLUMgcGMyIGNhdC1maWxlIC10IDxvYmplY3RzID50eXBlcyAmJgorCXNvcnQgLXUgdHlwZXMgPnVuaXF1ZV90eXBlcy5hY3R1YWwgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGNvbW1pdCB0cmVlID51bmlxdWVfdHlwZXMuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCB1bmlxdWVfdHlwZXMuZXhwZWN0ZWQgdW5pcXVlX3R5cGVzLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIGNsb25lIGZldGNoZXMgYmxvYnMgcG9pbnRlZCB0byBieSByZWZzIGV2ZW4gaWYgbm9ybWFsbHkgZmlsdGVyZWQgb3V0JyAnCisJcm0gLXJmIHNyYyBkc3QgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzcmMgeCAmJgorCXRlc3RfY29uZmlnIC1DIHNyYyB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwl0ZXN0X2NvbmZpZyAtQyBzcmMgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCisJIyBDcmVhdGUgYSB0YWcgcG9pbnRpbmcgdG8gYSBibG9iLgorCUJMT0I9JChlY2hvIGJsb2ItY29udGVudHMgfCBnaXQgLUMgc3JjIGhhc2gtb2JqZWN0IC0tc3RkaW4gLXcpICYmCisJZ2l0IC1DIHNyYyB0YWcgbXlibG9iICIkQkxPQiIgJiYKKworCWdpdCBjbG9uZSAtLWZpbHRlcj0iYmxvYjpub25lIiAiZmlsZTovLyQocHdkKS9zcmMiIGRzdCAyPmVyciAmJgorCSEgZ3JlcCAiZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QiIGVyciAmJgorCWdpdCAtQyBkc3QgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aGF0IGlzIHNwZWNpZmllZCBvbiBDTEkgZXZlbiBpZiBhbHJlYWR5IHByb21pc2VkJyAnCisJcm0gLXJmIHNyYyBkc3QuZ2l0ICYmCisJZ2l0IGluaXQgc3JjICYmCisJdGVzdF9jb21taXQgLUMgc3JjIGZvbyAmJgorCXRlc3RfY29uZmlnIC1DIHNyYyB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwl0ZXN0X2NvbmZpZyAtQyBzcmMgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCisJZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPHNyYy9mb28udCA+YmxvYiAmJgorCisJZ2l0IGNsb25lIC0tYmFyZSAtLWZpbHRlcj1ibG9iOm5vbmUgImZpbGU6Ly8kKHB3ZCkvc3JjIiBkc3QuZ2l0ICYmCisJZ2l0IC1DIGRzdC5naXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tcXVpZXQgLS1taXNzaW5nPXByaW50IEhFQUQgPm1pc3NpbmdfYmVmb3JlICYmCisJZ3JlcCAiPyQoY2F0IGJsb2IpIiBtaXNzaW5nX2JlZm9yZSAmJgorCWdpdCAtQyBkc3QuZ2l0IGZldGNoIG9yaWdpbiAkKGNhdCBibG9iKSAmJgorCWdpdCAtQyBkc3QuZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLXF1aWV0IC0tbWlzc2luZz1wcmludCBIRUFEID5taXNzaW5nX2FmdGVyICYmCisJISBncmVwICI/JChjYXQgYmxvYikiIG1pc3NpbmdfYWZ0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3JjIHJlcG8gZm9yIHNwYXJzZSBmaWx0ZXInICcKKwlnaXQgaW5pdCBzcGFyc2Utc3JjICYmCisJZ2l0IC1DIHNwYXJzZS1zcmMgY29uZmlnIC0tbG9jYWwgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJZ2l0IC1DIHNwYXJzZS1zcmMgY29uZmlnIC0tbG9jYWwgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCXRlc3RfY29tbWl0IC1DIHNwYXJzZS1zcmMgb25lICYmCisJdGVzdF9jb21taXQgLUMgc3BhcnNlLXNyYyB0d28gJiYKKwllY2hvIC9vbmUudCA+c3BhcnNlLXNyYy9vbmx5LW9uZSAmJgorCWdpdCAtQyBzcGFyc2Utc3JjIGFkZCAuICYmCisJZ2l0IC1DIHNwYXJzZS1zcmMgY29tbWl0IC1tICJhZGQgc3BhcnNlIGNoZWNrb3V0IGZpbGVzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIGNsb25lIHdpdGggc3BhcnNlIGZpbHRlciBzdWNjZWVkcycgJworCXJtIC1yZiBkc3QuZ2l0ICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1iYXJlIFwKKwkJICAtLWZpbHRlcj1zcGFyc2U6b2lkPW1hc3Rlcjpvbmx5LW9uZSBcCisJCSAgc3BhcnNlLXNyYyBkc3QuZ2l0ICYmCisJKAorCQljZCBkc3QuZ2l0ICYmCisJCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1taXNzaW5nPXByaW50IEhFQUQgPm91dCAmJgorCQlncmVwICJeJChnaXQgcmV2LXBhcnNlIEhFQUQ6b25lLnQpIiBvdXQgJiYKKwkJZ3JlcCAiXj8kKGdpdCByZXYtcGFyc2UgSEVBRDp0d28udCkiIG91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBjbG9uZSB3aXRoIHVucmVzb2x2YWJsZSBzcGFyc2UgZmlsdGVyIGZhaWxzIGNsZWFubHknICcKKwlybSAtcmYgZHN0LmdpdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tYmFyZSBcCisJCQkJIC0tZmlsdGVyPXNwYXJzZTpvaWQ9bWFzdGVyOm5vLXN1Y2gtbmFtZSBcCisJCQkJIHNwYXJzZS1zcmMgZHN0LmdpdCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInVuYWJsZSB0byBhY2Nlc3Mgc3BhcnNlIGJsb2IgaW4gLm1hc3Rlcjpuby1zdWNoLW5hbWUiIGVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tYmFyZSBcCisJCQkJIC0tZmlsdGVyPXNwYXJzZTpvaWQ9bWFzdGVyIFwKKwkJCQkgc3BhcnNlLXNyYyBkc3QuZ2l0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAidW5hYmxlIHRvIHBhcnNlIHNwYXJzZSBmaWx0ZXIgZGF0YSBpbiIgZXJyCisnCisKK3NldHVwX3RyaWFuZ2xlICgpIHsKKwlybSAtcmYgYmlnLWJsb2IudHh0IHNlcnZlciBjbGllbnQgcHJvbWlzb3ItcmVtb3RlICYmCisKKwlwcmludGYgImxpbmUgJWRcbiIgJCh0ZXN0X3NlcSAxIDEwMCkgPmJpZy1ibG9iLnR4dCAmJgorCisJIyBDcmVhdGUgYSBzZXJ2ZXIgd2l0aCAyIGNvbW1pdHM6IGEgY29tbWl0IHdpdGggYSBiaWcgdHJlZSBhbmQgYSBjaGlsZAorCSMgY29tbWl0IHdpdGggYW4gaW5jcmVtZW50YWwgY2hhbmdlLiBBbHNvLCBjcmVhdGUgYSBwYXJ0aWFsIGNsb25lCisJIyBjbGllbnQgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBmaXJzdCBjb21taXQuCisJZ2l0IGluaXQgc2VydmVyICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgLS1sb2NhbCB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMTAwKQorCWRvCisJCWVjaG8gIm1ha2UgdGhlIHRyZWUgYmlnIiA+c2VydmVyL2ZpbGUkaSAmJgorCQlnaXQgLUMgc2VydmVyIGFkZCBmaWxlJGkKKwlkb25lICYmCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLW0gImluaXRpYWwiICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtLWZpbHRlcj10cmVlOjAgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBjbGllbnQgJiYKKwllY2hvIGFub3RoZXIgbGluZSA+PnNlcnZlci9maWxlMSAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1hbSAiaW5jcmVtZW50YWwgY2hhbmdlIiAmJgorCisJIyBDcmVhdGUgYSBwcm9taXNvciByZW1vdGUgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSB0cmVlIGFuZCBibG9iIGZyb20KKwkjIHRoZSBmaXJzdCBjb21taXQuCisJZ2l0IGluaXQgcHJvbWlzb3ItcmVtb3RlICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgLS1sb2NhbCB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxICYmCisJVFJFRV9IQVNIPSQoZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgSEVBRH4xXnt0cmVlfSkgJiYKKwlnaXQgLUMgcHJvbWlzb3ItcmVtb3RlIGZldGNoIC0ta2VlcCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiICIkVFJFRV9IQVNIIiAmJgorCWdpdCAtQyBwcm9taXNvci1yZW1vdGUgY291bnQtb2JqZWN0cyAtdiA+b2JqZWN0LWNvdW50ICYmCisJdGVzdF9pMThuZ3JlcCAiY291bnQ6IDAiIG9iamVjdC1jb3VudCAmJgorCXRlc3RfaTE4bmdyZXAgImluLXBhY2s6IDIiIG9iamVjdC1jb3VudCAmJgorCisJIyBTZXQgaXQgYXMgdGhlIHByb21pc29yIHJlbW90ZSBvZiBjbGllbnQuIFRodXMsIHdoZW5ldmVyCisJIyB0aGUgY2xpZW50IGxhenkgZmV0Y2hlcywgdGhlIGxhenkgZmV0Y2ggd2lsbCBzdWNjZWVkIG9ubHkgaWYgaXQgaXMKKwkjIGZvciB0aGlzIHRyZWUgb3IgYmxvYi4KKwl0ZXN0X2NvbW1pdCAtQyBwcm9taXNvci1yZW1vdGUgb25lICYmICMgc28gdGhhdCByZWYgYWR2ZXJ0aXNlbWVudCBpcyBub3QgZW1wdHkKKwlnaXQgLUMgcHJvbWlzb3ItcmVtb3RlIGNvbmZpZyAtLWxvY2FsIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKwlnaXQgLUMgY2xpZW50IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAiZmlsZTovLyQocHdkKS9wcm9taXNvci1yZW1vdGUiCit9CisKKyMgTkVFRFNXT1JLOiBUaGUgdGVzdHMgYmVnaW5uaW5nIHdpdGggImZldGNoIGxhenktZmV0Y2hlcyIgYmVsb3cgb25seQorIyB0ZXN0IHRoYXQgImZldGNoIiBhdm9pZCBmZXRjaGluZyB0cmVlcyBhbmQgYmxvYnMsIGJ1dCBub3QgY29tbWl0cyBvcgorIyB0YWdzLiBSZXZpc2l0IHRoaXMgaWYgR2l0IGlzIGV2ZXIgdGF1Z2h0IHRvIHN1cHBvcnQgcGFydGlhbCBjbG9uZXMKKyMgd2l0aCBjb21taXRzIGFuZC9vciB0YWdzIGZpbHRlcmVkIG91dC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbGF6eS1mZXRjaGVzIG9ubHkgdG8gcmVzb2x2ZSBkZWx0YXMnICcKKwlzZXR1cF90cmlhbmdsZSAmJgorCisJIyBFeGVyY2lzZSB0byBtYWtlIHN1cmUgaXQgd29ya3MuIEdpdCB3aWxsIG5vdCBmZXRjaCBhbnl0aGluZyBmcm9tIHRoZQorCSMgcHJvbWlzb3IgcmVtb3RlIG90aGVyIHRoYW4gZm9yIHRoZSBiaWcgdHJlZSAoYmVjYXVzZSBpdCBuZWVkcyB0bworCSMgcmVzb2x2ZSB0aGUgZGVsdGEpLgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCBcCisJCWZldGNoICJmaWxlOi8vJChwd2QpL3NlcnZlciIgbWFzdGVyICYmCisKKwkjIFZlcmlmeSB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBjbGllbnQgbmVlZGVkIHRvIGZldGNoIHRoZSBkZWx0YSBiYXNlCisJIyB0byByZXNvbHZlIHRoZSBkZWx0YS4KKwlnaXQgLUMgc2VydmVyIHJldi1wYXJzZSBIRUFEfjFee3RyZWV9ID5oYXNoICYmCisJZ3JlcCAid2FudCAkKGNhdCBoYXNoKSIgdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbGF6eS1mZXRjaGVzIG9ubHkgdG8gcmVzb2x2ZSBkZWx0YXMsIHByb3RvY29sIHYyJyAnCisJc2V0dXBfdHJpYW5nbGUgJiYKKworCWdpdCAtQyBzZXJ2ZXIgY29uZmlnIC0tbG9jYWwgcHJvdG9jb2wudmVyc2lvbiAyICYmCisJZ2l0IC1DIGNsaWVudCBjb25maWcgLS1sb2NhbCBwcm90b2NvbC52ZXJzaW9uIDIgJiYKKwlnaXQgLUMgcHJvbWlzb3ItcmVtb3RlIGNvbmZpZyAtLWxvY2FsIHByb3RvY29sLnZlcnNpb24gMiAmJgorCisJIyBFeGVyY2lzZSB0byBtYWtlIHN1cmUgaXQgd29ya3MuIEdpdCB3aWxsIG5vdCBmZXRjaCBhbnl0aGluZyBmcm9tIHRoZQorCSMgcHJvbWlzb3IgcmVtb3RlIG90aGVyIHRoYW4gZm9yIHRoZSBiaWcgYmxvYiAoYmVjYXVzZSBpdCBuZWVkcyB0bworCSMgcmVzb2x2ZSB0aGUgZGVsdGEpLgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCBcCisJCWZldGNoICJmaWxlOi8vJChwd2QpL3NlcnZlciIgbWFzdGVyICYmCisKKwkjIFZlcmlmeSB0aGF0IHByb3RvY29sIHZlcnNpb24gMiB3YXMgdXNlZC4KKwlncmVwICJmZXRjaDwgdmVyc2lvbiAyIiB0cmFjZSAmJgorCisJIyBWZXJpZnkgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgY2xpZW50IG5lZWRlZCB0byBmZXRjaCB0aGUgZGVsdGEgYmFzZQorCSMgdG8gcmVzb2x2ZSB0aGUgZGVsdGEuCisJZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgSEVBRH4xXnt0cmVlfSA+aGFzaCAmJgorCWdyZXAgIndhbnQgJChjYXQgaGFzaCkiIHRyYWNlCisnCisKKyMgVGhlIGZvbGxvd2luZyB0d28gdGVzdHMgbXVzdCBiZSBpbiB0aGlzIG9yZGVyLiBJdCBpcyBpbXBvcnRhbnQgdGhhdAorIyB0aGUgc3J2LmJhcmUgcmVwb3NpdG9yeSBkaWQgbm90IGhhdmUgdGFncyBkdXJpbmcgY2xvbmUsIGJ1dCBoYXMgdGFncworIyBpbiB0aGUgZmV0Y2guCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBmZXRjaCBzdWNjZWVkcyB3aGVuIGFza2luZyBmb3IgbmV3IHRhZ3MnICcKKwlnaXQgY2xvbmUgLS1maWx0ZXI9YmxvYjpub25lICJmaWxlOi8vJChwd2QpL3Nydi5iYXJlIiB0YWctdGVzdCAmJgorCWZvciBpIGluIEkgSiBLCisJZG8KKwkJdGVzdF9jb21taXQgLUMgc3JjICRpICYmCisJCWdpdCAtQyBzcmMgYnJhbmNoICRpIHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCAtQyBzcnYuYmFyZSBmZXRjaCAtLXRhZ3Mgb3JpZ2luICtyZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy8qICYmCisJZ2l0IC1DIHRhZy10ZXN0IC1jIHByb3RvY29sLnZlcnNpb249MiBmZXRjaCAtLXRhZ3Mgb3JpZ2luCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBmZXRjaCBkb3dubG9hZHMgb25seSBvbmUgcGFjayB3aGVuIHVwZGF0aW5nIHJlZnMnICcKKwlnaXQgY2xvbmUgLS1maWx0ZXI9YmxvYjpub25lICJmaWxlOi8vJChwd2QpL3Nydi5iYXJlIiBwYWNrLXRlc3QgJiYKKwlscyBwYWNrLXRlc3QvLmdpdC9vYmplY3RzL3BhY2svKnBhY2sgPnBhY2stbGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgcGFjay1saXN0ICYmCisJZm9yIGkgaW4gQSBCIEMKKwlkbworCQl0ZXN0X2NvbW1pdCAtQyBzcmMgJGkgJiYKKwkJZ2l0IC1DIHNyYyBicmFuY2ggJGkgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJZ2l0IC1DIHNydi5iYXJlIGZldGNoIG9yaWdpbiArcmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKiAmJgorCWdpdCAtQyBwYWNrLXRlc3QgZmV0Y2ggb3JpZ2luICYmCisJbHMgcGFjay10ZXN0Ly5naXQvb2JqZWN0cy9wYWNrLypwYWNrID5wYWNrLWxpc3QgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIHBhY2stbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUtYnJhbmNoIHRhZyBmb2xsb3dpbmcgcmVzcGVjdHMgcGFydGlhbCBjbG9uZScgJworCWdpdCBjbG9uZSAtLXNpbmdsZS1icmFuY2ggLWIgQiAtLWZpbHRlcj1ibG9iOm5vbmUgXAorCQkiZmlsZTovLyQocHdkKS9zcnYuYmFyZSIgc2luZ2xlICYmCisJZ2l0IC1DIHNpbmdsZSByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy90YWdzL0IgJiYKKwlnaXQgLUMgc2luZ2xlIHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3RhZ3MvQSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzaW5nbGUgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvdGFncy9DCisnCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCitzdGFydF9odHRwZAorCisjIENvbnZlcnRzIGJ5dGVzIGludG8gdGhlaXIgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uIEZvciBleGFtcGxlLAorIyAicHJpbnRmICdhYlxyXG4nIHwgaGV4X3VucGFjayIgcmVzdWx0cyBpbiAnNjE2MjBkMGEnLgoraGV4X3VucGFjayAoKSB7CisJcGVybCAtZSAnJC8gPSB1bmRlZjsgJGlucHV0ID0gPD47IHByaW50IHVucGFjaygiSDIiIHggbGVuZ3RoKCRpbnB1dCksICRpbnB1dCknCit9CisKKyMgSW5zZXJ0cyAkMSBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyBhbmQgZXZlcnkgMiBjaGFyYWN0ZXJzIHRoZXJlYWZ0ZXIuCitpbnRlcnNwZXJzZSAoKSB7CisJc2VkICdzL1woLi5cKS8nJDEnXDEvZycKK30KKworIyBDcmVhdGUgYSBvbmUtdGltZS1wZXJsIGNvbW1hbmQgdG8gcmVwbGFjZSB0aGUgZXhpc3RpbmcgcGFja2ZpbGUgd2l0aCAkMS4KK3JlcGxhY2VfcGFja2ZpbGUgKCkgeworCSMgVGhlIHByb3RvY29sIHJlcXVpcmVzIHRoYXQgdGhlIHBhY2tmaWxlIGJlIHNlbnQgaW4gc2lkZWJhbmQgMSwgaGVuY2UKKwkjIHRoZSBleHRyYSBceDAxIGJ5dGUgYXQgdGhlIGJlZ2lubmluZy4KKwljcCAkMSAiJEhUVFBEX1JPT1RfUEFUSC9vbmUtdGltZS1wYWNrIiAmJgorCWVjaG8gJ2lmICgvcGFja2ZpbGUvKSB7CisJCXByaW50OworCQlteSAkbGVuZ3RoID0gLXMgIm9uZS10aW1lLXBhY2siOworCQlwcmludGYgIiUwNHhceDAxIiwgJGxlbmd0aCArIDU7CisJCXByaW50IGBjYXQgb25lLXRpbWUtcGFja2AgLiAiMDAwMCI7CisJCWxhc3QKKwl9JyA+IiRIVFRQRF9ST09UX1BBVEgvb25lLXRpbWUtcGVybCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBvbiBjbG9uaW5nLCBjaGVjayB0aGF0IGFsbCByZWZzIHBvaW50IHRvIG9iamVjdHMnICcKKwlTRVJWRVI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvc2VydmVyIiAmJgorCXJtIC1yZiAiJFNFUlZFUiIgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRTRVJWRVIiICYmCisJdGVzdF9jb21taXQgLUMgIiRTRVJWRVIiIGZvbyAmJgorCXRlc3RfY29uZmlnIC1DICIkU0VSVkVSIiB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwl0ZXN0X2NvbmZpZyAtQyAiJFNFUlZFUiIgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCisJIyBDcmVhdGUgYSB0YWcgcG9pbnRpbmcgdG8gYSBibG9iLgorCUJMT0I9JChlY2hvIGJsb2ItY29udGVudHMgfCBnaXQgLUMgIiRTRVJWRVIiIGhhc2gtb2JqZWN0IC0tc3RkaW4gLXcpICYmCisJZ2l0IC1DICIkU0VSVkVSIiB0YWcgbXlibG9iICIkQkxPQiIgJiYKKworCSMgQ3JhZnQgYSBwYWNrZmlsZSBub3QgaW5jbHVkaW5nIHRoYXQgYmxvYi4KKwlnaXQgLUMgIiRTRVJWRVIiIHJldi1wYXJzZSBIRUFEIHwKKwlnaXQgLUMgIiRTRVJWRVIiIHBhY2stb2JqZWN0cyAtLXN0ZG91dCA+aW5jb21wbGV0ZS5wYWNrICYmCisKKwkjIFJlcGxhY2UgdGhlIGV4aXN0aW5nIHBhY2tmaWxlIHdpdGggdGhlIGNyYWZ0ZWQgb25lLiBUaGUgcHJvdG9jb2wKKwkjIHJlcXVpcmVzIHRoYXQgdGhlIHBhY2tmaWxlIGJlIHNlbnQgaW4gc2lkZWJhbmQgMSwgaGVuY2UgdGhlIGV4dHJhCisJIyBceDAxIGJ5dGUgYXQgdGhlIGJlZ2lubmluZy4KKwlyZXBsYWNlX3BhY2tmaWxlIGluY29tcGxldGUucGFjayAmJgorCisJIyBVc2UgcHJvdG9jb2wgdjIgYmVjYXVzZSB0aGUgcGVybCBjb21tYW5kIGxvb2tzIGZvciB0aGUgInBhY2tmaWxlIgorCSMgc2VjdGlvbiBoZWFkZXIuCisJdGVzdF9jb25maWcgLUMgIiRTRVJWRVIiIHByb3RvY29sLnZlcnNpb24gMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgY2xvbmUgXAorCQktLWZpbHRlcj1ibG9iOm5vbmUgJEhUVFBEX1VSTC9vbmVfdGltZV9wZXJsL3NlcnZlciByZXBvIDI+ZXJyICYmCisKKwl0ZXN0X2kxOG5ncmVwICJkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIiBlcnIgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIG9uZS10aW1lLXBlcmwgc2NyaXB0IHdhcyB1c2VkLgorCSEgdGVzdCAtZSAiJEhUVFBEX1JPT1RfUEFUSC9vbmUtdGltZS1wZXJsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGVuIHBhcnRpYWwgY2xvbmluZywgdG9sZXJhdGUgc2VydmVyIG5vdCBzZW5kaW5nIHRhcmdldCBvZiB0YWcnICcKKwlTRVJWRVI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvc2VydmVyIiAmJgorCXJtIC1yZiAiJFNFUlZFUiIgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRTRVJWRVIiICYmCisJdGVzdF9jb21taXQgLUMgIiRTRVJWRVIiIGZvbyAmJgorCXRlc3RfY29uZmlnIC1DICIkU0VSVkVSIiB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwl0ZXN0X2NvbmZpZyAtQyAiJFNFUlZFUiIgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCisJIyBDcmVhdGUgYW4gYW5ub3RhdGVkIHRhZyBwb2ludGluZyB0byBhIGJsb2IuCisJQkxPQj0kKGVjaG8gYmxvYi1jb250ZW50cyB8IGdpdCAtQyAiJFNFUlZFUiIgaGFzaC1vYmplY3QgLS1zdGRpbiAtdykgJiYKKwlnaXQgLUMgIiRTRVJWRVIiIHRhZyAtbSBtZXNzYWdlIC1hIG15YmxvYiAiJEJMT0IiICYmCisKKwkjIENyYWZ0IGEgcGFja2ZpbGUgaW5jbHVkaW5nIHRoZSB0YWcsIGJ1dCBub3QgdGhlIGJsb2IgaXQgcG9pbnRzIHRvLgorCSMgQWxzbywgb21pdCBvYmplY3RzIHJlZmVyZW5jZWQgZnJvbSBIRUFEIGluIG9yZGVyIHRvIGZvcmNlIGEgc2Vjb25kCisJIyBmZXRjaCAodG8gZmV0Y2ggbWlzc2luZyBvYmplY3RzKSB1cG9uIHRoZSBhdXRvbWF0aWMgY2hlY2tvdXQgdGhhdAorCSMgaGFwcGVucyBhZnRlciBhIGNsb25lLgorCXByaW50ZiAiJXNcbiVzXG4tLW5vdFxuJXNcbiVzXG4iIFwKKwkJJChnaXQgLUMgIiRTRVJWRVIiIHJldi1wYXJzZSBIRUFEKSBcCisJCSQoZ2l0IC1DICIkU0VSVkVSIiByZXYtcGFyc2UgbXlibG9iKSBcCisJCSQoZ2l0IC1DICIkU0VSVkVSIiByZXYtcGFyc2UgSEVBRF57dHJlZX0pIFwKKwkJJChnaXQgLUMgIiRTRVJWRVIiIHJldi1wYXJzZSBteWJsb2Jee2Jsb2J9KSB8CisJCWdpdCAtQyAiJFNFUlZFUiIgcGFjay1vYmplY3RzIC0tdGhpbiAtLXN0ZG91dCA+aW5jb21wbGV0ZS5wYWNrICYmCisKKwkjIFJlcGxhY2UgdGhlIGV4aXN0aW5nIHBhY2tmaWxlIHdpdGggdGhlIGNyYWZ0ZWQgb25lLiBUaGUgcHJvdG9jb2wKKwkjIHJlcXVpcmVzIHRoYXQgdGhlIHBhY2tmaWxlIGJlIHNlbnQgaW4gc2lkZWJhbmQgMSwgaGVuY2UgdGhlIGV4dHJhCisJIyBceDAxIGJ5dGUgYXQgdGhlIGJlZ2lubmluZy4KKwlyZXBsYWNlX3BhY2tmaWxlIGluY29tcGxldGUucGFjayAmJgorCisJIyBVc2UgcHJvdG9jb2wgdjIgYmVjYXVzZSB0aGUgcGVybCBjb21tYW5kIGxvb2tzIGZvciB0aGUgInBhY2tmaWxlIgorCSMgc2VjdGlvbiBoZWFkZXIuCisJdGVzdF9jb25maWcgLUMgIiRTRVJWRVIiIHByb3RvY29sLnZlcnNpb24gMiAmJgorCisJIyBFeGVyY2lzZSB0byBtYWtlIHN1cmUgaXQgd29ya3MuCisJZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MiBjbG9uZSBcCisJCS0tZmlsdGVyPWJsb2I6bm9uZSAkSFRUUERfVVJML29uZV90aW1lX3Blcmwvc2VydmVyIHJlcG8gMj4gZXJyICYmCisJISBncmVwICJtaXNzaW5nIG9iamVjdCByZWZlcmVuY2VkIGJ5IiBlcnIgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIG9uZS10aW1lLXBlcmwgc2NyaXB0IHdhcyB1c2VkLgorCSEgdGVzdCAtZSAiJEhUVFBEX1JPT1RfUEFUSC9vbmUtdGltZS1wZXJsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0b2xlcmF0ZSBzZXJ2ZXIgc2VuZGluZyBSRUZfREVMVEEgYWdhaW5zdCBtaXNzaW5nIHByb21pc29yIG9iamVjdHMnICcKKwlTRVJWRVI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvc2VydmVyIiAmJgorCXJtIC1yZiAiJFNFUlZFUiIgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRTRVJWRVIiICYmCisJdGVzdF9jb25maWcgLUMgIiRTRVJWRVIiIHVwbG9hZHBhY2suYWxsb3dmaWx0ZXIgMSAmJgorCXRlc3RfY29uZmlnIC1DICIkU0VSVkVSIiB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxICYmCisKKwkjIENyZWF0ZSBhIGNvbW1pdCB3aXRoIDIgYmxvYnMgdG8gYmUgdXNlZCBhcyBkZWx0YSBiYXNlcy4KKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEwKQorCWRvCisJCWVjaG8gInRoaXMgaXMgYSBsaW5lIiA+PiIkU0VSVkVSL2Zvby50eHQiICYmCisJCWVjaG8gInRoaXMgaXMgYW5vdGhlciBsaW5lIiA+PiIkU0VSVkVSL2hhdmUudHh0IgorCWRvbmUgJiYKKwlnaXQgLUMgIiRTRVJWRVIiIGFkZCBmb28udHh0IGhhdmUudHh0ICYmCisJZ2l0IC1DICIkU0VSVkVSIiBjb21taXQgLW0gYmFyICYmCisJZ2l0IC1DICIkU0VSVkVSIiByZXYtcGFyc2UgSEVBRDpmb28udHh0ID5kZWx0YWJhc2VfbWlzc2luZyAmJgorCWdpdCAtQyAiJFNFUlZFUiIgcmV2LXBhcnNlIEhFQUQ6aGF2ZS50eHQgPmRlbHRhYmFzZV9oYXZlICYmCisKKwkjIENsb25lLiBUaGUgY2xpZW50IGhhcyBkZWx0YWJhc2VfaGF2ZSBidXQgbm90IGRlbHRhYmFzZV9taXNzaW5nLgorCWdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgY2xvbmUgLS1uby1jaGVja291dCBcCisJCS0tZmlsdGVyPWJsb2I6bm9uZSAkSFRUUERfVVJML29uZV90aW1lX3Blcmwvc2VydmVyIHJlcG8gJiYKKwlnaXQgLUMgcmVwbyBoYXNoLW9iamVjdCAtdyAtLSAiJFNFUlZFUi9oYXZlLnR4dCIgJiYKKworCSMgU2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBjbGllbnQgZG9lcyBub3QgaGF2ZQorCSMgZGVsdGFiYXNlX21pc3NpbmcuCisJZ2l0IC1DIHJlcG8gcmV2LWxpc3QgLS1vYmplY3RzIC0taWdub3JlLW1pc3NpbmcgXAorCQktLSAkKGNhdCBkZWx0YWJhc2VfbWlzc2luZykgPm9iamxpc3QgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIG9iamxpc3QgJiYKKworCSMgQW5vdGhlciBjb21taXQuIFRoaXMgY29tbWl0IHdpbGwgYmUgZmV0Y2hlZCBieSB0aGUgY2xpZW50LgorCWVjaG8gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiA+PiIkU0VSVkVSL2Zvby50eHQiICYmCisJZWNobyAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiID4+IiRTRVJWRVIvaGF2ZS50eHQiICYmCisJZ2l0IC1DICIkU0VSVkVSIiBhZGQgZm9vLnR4dCBoYXZlLnR4dCAmJgorCWdpdCAtQyAiJFNFUlZFUiIgY29tbWl0IC1tIGJheiAmJgorCisJIyBQYWNrIGEgdGhpbiBwYWNrIGNvbnRhaW5pbmcsIGFtb25nIG90aGVyIHRoaW5ncywgSEVBRDpmb28udHh0CisJIyBkZWx0YS1lZCBhZ2FpbnN0IEhFQUReOmZvby50eHQgYW5kIEhFQUQ6aGF2ZS50eHQgZGVsdGEtZWQgYWdhaW5zdAorCSMgSEVBRF46aGF2ZS50eHQuCisJcHJpbnRmICIlc1xuLS1ub3RcbiVzXG4iIFwKKwkJJChnaXQgLUMgIiRTRVJWRVIiIHJldi1wYXJzZSBIRUFEKSBcCisJCSQoZ2l0IC1DICIkU0VSVkVSIiByZXYtcGFyc2UgSEVBRF4pIHwKKwkJZ2l0IC1DICIkU0VSVkVSIiBwYWNrLW9iamVjdHMgLS10aGluIC0tc3Rkb3V0ID50aGluLnBhY2sgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIHBhY2sgY29udGFpbnMgb25lIGRlbHRhIGFnYWluc3QgSEVBRF46Zm9vLnR4dC4gU2luY2UKKwkjIHRoZSBkZWx0YSBjb250YWlucyBhdCBsZWFzdCAyNiBub3ZlbCBjaGFyYWN0ZXJzLCB0aGUgc2l6ZSBjYW5ub3QgYmUKKwkjIGNvbnRhaW5lZCBpbiA0IGJpdHMsIHNvIHRoZSBvYmplY3QgaGVhZGVyIHdpbGwgdGFrZSB1cCAyIGJ5dGVzLiBUaGUKKwkjIG1vc3Qgc2lnbmlmaWNhbnQgbnliYmxlIG9mIHRoZSBmaXJzdCBieXRlIGlzIDBiMTExMSAoMGIxIHRvIGluZGljYXRlCisJIyB0aGF0IHRoZSBoZWFkZXIgY29udGludWVzLCBhbmQgMGIxMTEgdG8gaW5kaWNhdGUgUkVGX0RFTFRBKSwgZm9sbG93ZWQKKwkjIGJ5IGFueSAzIG55YmJsZXMsIHRoZW4gdGhlIE9JRCBvZiB0aGUgZGVsdGEgYmFzZS4KKwlwcmludGYgImYuLC4uJXMiICQoaW50ZXJzcGVyc2UgIiwiIDxkZWx0YWJhc2VfbWlzc2luZykgPndhbnQgJiYKKwloZXhfdW5wYWNrIDx0aGluLnBhY2sgfCBpbnRlcnNwZXJzZSAiLCIgPmhhdmUgJiYKKwlncmVwICQoY2F0IHdhbnQpIGhhdmUgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIHBhY2sgY29udGFpbnMgb25lIGRlbHRhIGFnYWluc3QgSEVBRF46aGF2ZS50eHQsCisJIyBzaW1pbGFyIHRvIHRoZSBhYm92ZS4KKwlwcmludGYgImYuLC4uJXMiICQoaW50ZXJzcGVyc2UgIiwiIDxkZWx0YWJhc2VfaGF2ZSkgPndhbnQgJiYKKwloZXhfdW5wYWNrIDx0aGluLnBhY2sgfCBpbnRlcnNwZXJzZSAiLCIgPmhhdmUgJiYKKwlncmVwICQoY2F0IHdhbnQpIGhhdmUgJiYKKworCXJlcGxhY2VfcGFja2ZpbGUgdGhpbi5wYWNrICYmCisKKwkjIFVzZSBwcm90b2NvbCB2MiBiZWNhdXNlIHRoZSBwZXJsIGNvbW1hbmQgbG9va3MgZm9yIHRoZSAicGFja2ZpbGUiCisJIyBzZWN0aW9uIGhlYWRlci4KKwl0ZXN0X2NvbmZpZyAtQyAiJFNFUlZFUiIgcHJvdG9jb2wudmVyc2lvbiAyICYmCisKKwkjIEZldGNoIHRoZSB0aGluIHBhY2sgYW5kIGVuc3VyZSB0aGF0IGluZGV4LXBhY2sgaXMgYWJsZSB0byBoYW5kbGUgdGhlCisJIyBSRUZfREVMVEEgb2JqZWN0IHdpdGggYSBtaXNzaW5nIHByb21pc29yIGRlbHRhIGJhc2UuCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLUMgcmVwbyAtYyBwcm90b2NvbC52ZXJzaW9uPTIgZmV0Y2ggJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIG1pc3NpbmcgZGVsdGEgYmFzZSB3YXMgZGlyZWN0bHkgZmV0Y2hlZCwgYnV0IG5vdCB0aGUKKwkjIG9uZSB0aGF0IHRoZSBjbGllbnQgaGFzLgorCWdyZXAgIndhbnQgJChjYXQgZGVsdGFiYXNlX21pc3NpbmcpIiB0cmFjZSAmJgorCSEgZ3JlcCAid2FudCAkKGNhdCBkZWx0YWJhc2VfaGF2ZSkiIHRyYWNlICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSBvbmUtdGltZS1wZXJsIHNjcmlwdCB3YXMgdXNlZC4KKwkhIHRlc3QgLWUgIiRIVFRQRF9ST09UX1BBVEgvb25lLXRpbWUtcGVybCIKKycKKworIyBETyBOT1QgYWRkIG5vbi1odHRwZC1zcGVjaWZpYyB0ZXN0cyBoZXJlLCBiZWNhdXNlIHRoZSBsYXN0IHBhcnQgb2YgdGhpcworIyB0ZXN0IHNjcmlwdCBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gaHR0cGQgaXMgYXZhaWxhYmxlIGFuZCBlbmFibGVkLgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MTctY2xvbmUtc3VibW9kdWxlcy1yZW1vdGUuc2ggYi90L3Q1NjE3LWNsb25lLXN1Ym1vZHVsZXMtcmVtb3RlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFhMDQxZGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjE3LWNsb25lLXN1Ym1vZHVsZXMtcmVtb3RlLnNoCkBAIC0wLDAgKzEsNjUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGNsb25pbmcgcmVwb3Mgd2l0aCBzdWJtb2R1bGVzIHVzaW5nIHJlbW90ZS10cmFja2luZyBicmFuY2hlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3B3ZD0kKHB3ZCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyICYmCisJdGVzdF9jb21taXQgY29tbWl0MSAmJgorCW1rZGlyIHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3RfY29tbWl0IHN1YmNvbW1pdDEgJiYKKwkJZ2l0IHRhZyBzdWJfd2hlbl9hZGRlZF90b19zdXBlciAmJgorCQlnaXQgYnJhbmNoIG90aGVyCisJKSAmJgorCWdpdCBzdWJtb2R1bGUgYWRkICJmaWxlOi8vJHB3ZC9zdWIiIHN1YiAmJgorCWdpdCBjb21taXQgLW0gImFkZCBzdWJtb2R1bGUiICYmCisJKAorCQljZCBzdWIgJiYKKwkJdGVzdF9jb21taXQgc3ViY29tbWl0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCAtLW5vLXJlbW90ZS1zdWJtb2R1bGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXJfY2xvbmUiICYmCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tbm8tcmVtb3RlLXN1Ym1vZHVsZXMgImZpbGU6Ly8kcHdkLy4iIHN1cGVyX2Nsb25lICYmCisJKAorCQljZCBzdXBlcl9jbG9uZS9zdWIgJiYKKwkJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc3ViX3doZW5fYWRkZWRfdG9fc3VwZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggLS1yZW1vdGUtc3VibW9kdWxlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLXJlbW90ZS1zdWJtb2R1bGVzICJmaWxlOi8vJHB3ZC8uIiBzdXBlcl9jbG9uZSAmJgorCSgKKwkJY2Qgc3VwZXJfY2xvbmUvc3ViICYmCisJCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHJlbW90ZXMvb3JpZ2luL21hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdGhlIGRlZmF1bHQgaXMgLS1uby1yZW1vdGUtc3VibW9kdWxlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAiZmlsZTovLyRwd2QvLiIgc3VwZXJfY2xvbmUgJiYKKwkoCisJCWNkIHN1cGVyX2Nsb25lL3N1YiAmJgorCQlnaXQgZGlmZiAtLWV4aXQtY29kZSBzdWJfd2hlbl9hZGRlZF90b19zdXBlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCAtLXNpbmdsZS1icmFuY2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcl9jbG9uZSIgJiYKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1zaW5nbGUtYnJhbmNoICJmaWxlOi8vJHB3ZC8uIiBzdXBlcl9jbG9uZSAmJgorCSgKKwkJY2Qgc3VwZXJfY2xvbmUvc3ViICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgb3JpZ2luL21hc3RlciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG9yaWdpbi9vdGhlcgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjE4LWFsdGVybmF0ZS1yZWZzLnNoIGIvdC90NTYxOC1hbHRlcm5hdGUtcmVmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMzUzMjE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTYxOC1hbHRlcm5hdGUtcmVmcy5zaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBoYW5kbGluZyBvZiAtLWFsdGVybmF0ZS1yZWZzIHRyYXZlcnNhbCcKKy4gLi90ZXN0LWxpYi5zaAorCisjIEF2b2lkIHRlc3RfY29tbWl0IGJlY2F1c2Ugd2Ugd2FudCBhIHNwZWNpZmljIGFuZCBrbm93biBzZXQgb2YgcmVmczoKKyMKKyMgIGJhc2UgLS0gb25lCisjICAgICAgXCAgICAgIFwKKyMgICAgICAgdHdvIC0tIG1lcmdlZAorIworIyB3aGVyZSAib25lIiBhbmQgInR3byIgYXJlIG9uIHNlcGFyYXRlIHJlZnMsIGFuZCAibWVyZ2VkIiBpcyBhdmFpbGFibGUgb25seSBpbgorIyB0aGUgZGVwZW5kZW50IGNoaWxkIHJlcG9zaXRvcnkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgbG9jYWwgcmVmcycgJworCWdpdCBjaGVja291dCAtYiBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYmFzZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdHdvIEhFQUReICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHR3bworJworCisjIFdlJ2xsIGVudGVyIHRoZSBjaGlsZCByZXBvc2l0b3J5IGFmdGVyIGl0J3Mgc2V0IHVwIHNpbmNlIHRoYXQncyB3aGVyZQorIyBhbGwgb2YgdGhlIHN1YnNlcXVlbnQgdGVzdHMgd2lsbCB3YW50IHRvIHJ1biAoYW5kIGl0J3MgZWFzeSB0byBmb3JnZXQgYQorIyAiLUMgY2hpbGQiIGFuZCBnZXQgbm9uc2Vuc2UgcmVzdWx0cykuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgc2hhcmVkIGNsb25lJyAnCisJZ2l0IGNsb25lIC1zIC4gY2hpbGQgJiYKKwljZCBjaGlsZCAmJgorCWdpdCBtZXJnZSBvcmlnaW4vb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYWx0ZXJuYXRlLXJlZnMnICcKKwlnaXQgcmV2LWxpc3QgLS1yZW1vdGVzPW9yaWdpbiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tYWx0ZXJuYXRlLXJlZnMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1ub3QgLS1hbHRlcm5hdGUtcmVmcycgJworCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IEhFQUQgLS1ub3QgLS1hbHRlcm5hdGUtcmVmcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaW1pdGluZyB3aXRoIGFsdGVybmF0ZVJlZnNQcmVmaXhlcycgJworCXRlc3RfY29uZmlnIGNvcmUuYWx0ZXJuYXRlUmVmc1ByZWZpeGVzIHJlZnMvaGVhZHMvb25lICYmCisJZ2l0IHJldi1saXN0IG9yaWdpbi9vbmUgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWFsdGVybmF0ZS1yZWZzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLXNvdXJjZSBzaG93cyAuYWx0ZXJuYXRlIG1hcmtlcicgJworCWdpdCBsb2cgLS1vbmVsaW5lIC0tc291cmNlIC0tcmVtb3Rlcz1vcmlnaW4gPmV4cGVjdC5vcmlnICYmCisJc2VkICJzL29yaWdpbi4qIC8uYWx0ZXJuYXRlIC8iIDxleHBlY3Qub3JpZyA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1zb3VyY2UgLS1hbHRlcm5hdGUtcmVmcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU3MDAtcHJvdG9jb2wtdjEuc2ggYi90L3Q1NzAwLXByb3RvY29sLXYxLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAyMjkwMWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NzAwLXByb3RvY29sLXYxLnNoCkBAIC0wLDAgKzEsMjk5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQgd2lyZS1wcm90b2NvbCB0cmFuc2l0aW9uJworCitURVNUX05PX0NSRUFURV9SRVBPPTEKKworIyBUaGlzIGlzIGEgcHJvdG9jb2wtc3BlY2lmaWMgdGVzdC4KK0dJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MAorZXhwb3J0IEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT04KKworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGVzdCBwcm90b2NvbCB2MSB3aXRoICdnaXQ6Ly8nIHRyYW5zcG9ydAorIworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItZ2l0LWRhZW1vbi5zaAorc3RhcnRfZ2l0X2RhZW1vbiAtLWV4cG9ydC1hbGwgLS1lbmFibGU9cmVjZWl2ZS1wYWNrCitkYWVtb25fcGFyZW50PSRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC9wYXJlbnQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHJlcG8gdG8gYmUgc2VydmVkIGJ5IGdpdC1kYWVtb24nICcKKwlnaXQgaW5pdCAiJGRhZW1vbl9wYXJlbnQiICYmCisJdGVzdF9jb21taXQgLUMgIiRkYWVtb25fcGFyZW50IiBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCBnaXQ6Ly8gdXNpbmcgcHJvdG9jb2wgdjEnICcKKwlHSVRfVFJBQ0VfUEFDS0VUPTEgZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MSBcCisJCWNsb25lICIkR0lUX0RBRU1PTl9VUkwvcGFyZW50IiBkYWVtb25fY2hpbGQgMj5sb2cgJiYKKworCWdpdCAtQyBkYWVtb25fY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlnaXQgLUMgIiRkYWVtb25fcGFyZW50IiBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgQ2xpZW50IHJlcXVlc3RlZCB0byB1c2UgcHJvdG9jb2wgdjEKKwlncmVwICJjbG9uZT4gLipcXFwwXFxcMHZlcnNpb249MVxcXDAkIiBsb2cgJiYKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjEKKwlncmVwICJjbG9uZTwgdmVyc2lvbiAxIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBnaXQ6Ly8gdXNpbmcgcHJvdG9jb2wgdjEnICcKKwl0ZXN0X2NvbW1pdCAtQyAiJGRhZW1vbl9wYXJlbnQiIHR3byAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdCAtQyBkYWVtb25fY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0xIFwKKwkJZmV0Y2ggMj5sb2cgJiYKKworCWdpdCAtQyBkYWVtb25fY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzIG9yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCWdpdCAtQyAiJGRhZW1vbl9wYXJlbnQiIGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBDbGllbnQgcmVxdWVzdGVkIHRvIHVzZSBwcm90b2NvbCB2MQorCWdyZXAgImZldGNoPiAuKlxcXDBcXFwwdmVyc2lvbj0xXFxcMCQiIGxvZyAmJgorCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MQorCWdyZXAgImZldGNoPCB2ZXJzaW9uIDEiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIHdpdGggZ2l0Oi8vIHVzaW5nIHByb3RvY29sIHYxJyAnCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdCAtQyBkYWVtb25fY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0xIFwKKwkJcHVsbCAyPmxvZyAmJgorCisJZ2l0IC1DIGRhZW1vbl9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWdpdCAtQyAiJGRhZW1vbl9wYXJlbnQiIGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBDbGllbnQgcmVxdWVzdGVkIHRvIHVzZSBwcm90b2NvbCB2MQorCWdyZXAgImZldGNoPiAuKlxcXDBcXFwwdmVyc2lvbj0xXFxcMCQiIGxvZyAmJgorCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MQorCWdyZXAgImZldGNoPCB2ZXJzaW9uIDEiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggZ2l0Oi8vIHVzaW5nIHByb3RvY29sIHYxJyAnCisJdGVzdF9jb21taXQgLUMgZGFlbW9uX2NoaWxkIHRocmVlICYmCisKKwkjIFB1c2ggdG8gYW5vdGhlciBicmFuY2gsIGFzIHRoZSB0YXJnZXQgcmVwb3NpdG9yeSBoYXMgdGhlCisJIyBtYXN0ZXIgYnJhbmNoIGNoZWNrZWQgb3V0IGFuZCB3ZSBjYW5ub3QgcHVzaCBpbnRvIGl0LgorCUdJVF9UUkFDRV9QQUNLRVQ9MSBnaXQgLUMgZGFlbW9uX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MSBcCisJCXB1c2ggb3JpZ2luIEhFQUQ6Y2xpZW50X2JyYW5jaCAyPmxvZyAmJgorCisJZ2l0IC1DIGRhZW1vbl9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWdpdCAtQyAiJGRhZW1vbl9wYXJlbnQiIGxvZyAtMSAtLWZvcm1hdD0lcyBjbGllbnRfYnJhbmNoID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIENsaWVudCByZXF1ZXN0ZWQgdG8gdXNlIHByb3RvY29sIHYxCisJZ3JlcCAicHVzaD4gLipcXFwwXFxcMHZlcnNpb249MVxcXDAkIiBsb2cgJiYKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjEKKwlncmVwICJwdXNoPCB2ZXJzaW9uIDEiIGxvZworJworCitzdG9wX2dpdF9kYWVtb24KKworIyBUZXN0IHByb3RvY29sIHYxIHdpdGggJ2ZpbGU6Ly8nIHRyYW5zcG9ydAorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHJlcG8gdG8gYmUgc2VydmVkIGJ5IGZpbGU6Ly8gdHJhbnNwb3J0JyAnCisJZ2l0IGluaXQgZmlsZV9wYXJlbnQgJiYKKwl0ZXN0X2NvbW1pdCAtQyBmaWxlX3BhcmVudCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCBmaWxlOi8vIHVzaW5nIHByb3RvY29sIHYxJyAnCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTEgXAorCQljbG9uZSAiZmlsZTovLyQocHdkKS9maWxlX3BhcmVudCIgZmlsZV9jaGlsZCAyPmxvZyAmJgorCisJZ2l0IC1DIGZpbGVfY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlnaXQgLUMgZmlsZV9wYXJlbnQgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjEKKwlncmVwICJjbG9uZTwgdmVyc2lvbiAxIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBmaWxlOi8vIHVzaW5nIHByb3RvY29sIHYxJyAnCisJdGVzdF9jb21taXQgLUMgZmlsZV9wYXJlbnQgdHdvICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPTEgZ2l0IC1DIGZpbGVfY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0xIFwKKwkJZmV0Y2ggMj5sb2cgJiYKKworCWdpdCAtQyBmaWxlX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyBvcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwlnaXQgLUMgZmlsZV9wYXJlbnQgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjEKKwlncmVwICJmZXRjaDwgdmVyc2lvbiAxIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCB3aXRoIGZpbGU6Ly8gdXNpbmcgcHJvdG9jb2wgdjEnICcKKwlHSVRfVFJBQ0VfUEFDS0VUPTEgZ2l0IC1DIGZpbGVfY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0xIFwKKwkJcHVsbCAyPmxvZyAmJgorCisJZ2l0IC1DIGZpbGVfY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlnaXQgLUMgZmlsZV9wYXJlbnQgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjEKKwlncmVwICJmZXRjaDwgdmVyc2lvbiAxIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGZpbGU6Ly8gdXNpbmcgcHJvdG9jb2wgdjEnICcKKwl0ZXN0X2NvbW1pdCAtQyBmaWxlX2NoaWxkIHRocmVlICYmCisKKwkjIFB1c2ggdG8gYW5vdGhlciBicmFuY2gsIGFzIHRoZSB0YXJnZXQgcmVwb3NpdG9yeSBoYXMgdGhlCisJIyBtYXN0ZXIgYnJhbmNoIGNoZWNrZWQgb3V0IGFuZCB3ZSBjYW5ub3QgcHVzaCBpbnRvIGl0LgorCUdJVF9UUkFDRV9QQUNLRVQ9MSBnaXQgLUMgZmlsZV9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTEgXAorCQlwdXNoIG9yaWdpbiBIRUFEOmNsaWVudF9icmFuY2ggMj5sb2cgJiYKKworCWdpdCAtQyBmaWxlX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0IC1DIGZpbGVfcGFyZW50IGxvZyAtMSAtLWZvcm1hdD0lcyBjbGllbnRfYnJhbmNoID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjEKKwlncmVwICJwdXNoPCB2ZXJzaW9uIDEiIGxvZworJworCisjIFRlc3QgcHJvdG9jb2wgdjEgd2l0aCAnc3NoOi8vJyB0cmFuc3BvcnQKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNzaCB3cmFwcGVyJyAnCisJR0lUX1NTSD0iJEdJVF9CVUlMRF9ESVIvdC9oZWxwZXIvdGVzdC1mYWtlLXNzaCIgJiYKKwlleHBvcnQgR0lUX1NTSCAmJgorCUdJVF9TU0hfVkFSSUFOVD1zc2ggJiYKKwlleHBvcnQgR0lUX1NTSF9WQVJJQU5UICYmCisJZXhwb3J0IFRSQVNIX0RJUkVDVE9SWSAmJgorCT4iJFRSQVNIX0RJUkVDVE9SWSIvc3NoLW91dHB1dAorJworCitleHBlY3Rfc3NoICgpIHsKKwl0ZXN0X3doZW5fZmluaXNoZWQgJyhjZCAiJFRSQVNIX0RJUkVDVE9SWSIgJiYgcm0gLWYgc3NoLWV4cGVjdCAmJiA+c3NoLW91dHB1dCknICYmCisJZWNobyAic3NoOiAtbyBTZW5kRW52PUdJVF9QUk9UT0NPTCBteWhvc3QgJDEgJyRQV0Qvc3NoX3BhcmVudCciID4iJFRSQVNIX0RJUkVDVE9SWS9zc2gtZXhwZWN0IiAmJgorCShjZCAiJFRSQVNIX0RJUkVDVE9SWSIgJiYgdGVzdF9jbXAgc3NoLWV4cGVjdCBzc2gtb3V0cHV0KQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcmVwbyB0byBiZSBzZXJ2ZWQgYnkgc3NoOi8vIHRyYW5zcG9ydCcgJworCWdpdCBpbml0IHNzaF9wYXJlbnQgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzc2hfcGFyZW50IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIHNzaDovLyB1c2luZyBwcm90b2NvbCB2MScgJworCUdJVF9UUkFDRV9QQUNLRVQ9MSBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0xIFwKKwkJY2xvbmUgInNzaDovL215aG9zdDokKHB3ZCkvc3NoX3BhcmVudCIgc3NoX2NoaWxkIDI+bG9nICYmCisJZXhwZWN0X3NzaCBnaXQtdXBsb2FkLXBhY2sgJiYKKworCWdpdCAtQyBzc2hfY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlnaXQgLUMgc3NoX3BhcmVudCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MQorCWdyZXAgImNsb25lPCB2ZXJzaW9uIDEiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIHNzaDovLyB1c2luZyBwcm90b2NvbCB2MScgJworCXRlc3RfY29tbWl0IC1DIHNzaF9wYXJlbnQgdHdvICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPTEgZ2l0IC1DIHNzaF9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTEgXAorCQlmZXRjaCAyPmxvZyAmJgorCWV4cGVjdF9zc2ggZ2l0LXVwbG9hZC1wYWNrICYmCisKKwlnaXQgLUMgc3NoX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyBvcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwlnaXQgLUMgc3NoX3BhcmVudCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MQorCWdyZXAgImZldGNoPCB2ZXJzaW9uIDEiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIHdpdGggc3NoOi8vIHVzaW5nIHByb3RvY29sIHYxJyAnCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdCAtQyBzc2hfY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0xIFwKKwkJcHVsbCAyPmxvZyAmJgorCWV4cGVjdF9zc2ggZ2l0LXVwbG9hZC1wYWNrICYmCisKKwlnaXQgLUMgc3NoX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0IC1DIHNzaF9wYXJlbnQgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjEKKwlncmVwICJmZXRjaDwgdmVyc2lvbiAxIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIHNzaDovLyB1c2luZyBwcm90b2NvbCB2MScgJworCXRlc3RfY29tbWl0IC1DIHNzaF9jaGlsZCB0aHJlZSAmJgorCisJIyBQdXNoIHRvIGFub3RoZXIgYnJhbmNoLCBhcyB0aGUgdGFyZ2V0IHJlcG9zaXRvcnkgaGFzIHRoZQorCSMgbWFzdGVyIGJyYW5jaCBjaGVja2VkIG91dCBhbmQgd2UgY2Fubm90IHB1c2ggaW50byBpdC4KKwlHSVRfVFJBQ0VfUEFDS0VUPTEgZ2l0IC1DIHNzaF9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTEgXAorCQlwdXNoIG9yaWdpbiBIRUFEOmNsaWVudF9icmFuY2ggMj5sb2cgJiYKKwlleHBlY3Rfc3NoIGdpdC1yZWNlaXZlLXBhY2sgJiYKKworCWdpdCAtQyBzc2hfY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlnaXQgLUMgc3NoX3BhcmVudCBsb2cgLTEgLS1mb3JtYXQ9JXMgY2xpZW50X2JyYW5jaCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYxCisJZ3JlcCAicHVzaDwgdmVyc2lvbiAxIiBsb2cKKycKKworIyBUZXN0IHByb3RvY29sIHYxIHdpdGggJ2h0dHA6Ly8nIHRyYW5zcG9ydAorIworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSByZXBvIHRvIGJlIHNlcnZlZCBieSBodHRwOi8vIHRyYW5zcG9ydCcgJworCWdpdCBpbml0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiAmJgorCWdpdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZSAmJgorCXRlc3RfY29tbWl0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCBodHRwOi8vIHVzaW5nIHByb3RvY29sIHYxJyAnCisJR0lUX1RSQUNFX1BBQ0tFVD0xIEdJVF9UUkFDRV9DVVJMPTEgZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MSBcCisJCWNsb25lICIkSFRUUERfVVJML3NtYXJ0L2h0dHBfcGFyZW50IiBodHRwX2NoaWxkIDI+bG9nICYmCisKKwlnaXQgLUMgaHR0cF9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWdpdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIENsaWVudCByZXF1ZXN0ZWQgdG8gdXNlIHByb3RvY29sIHYxCisJZ3JlcCAiR2l0LVByb3RvY29sOiB2ZXJzaW9uPTEiIGxvZyAmJgorCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MQorCWdyZXAgImdpdDwgdmVyc2lvbiAxIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBodHRwOi8vIHVzaW5nIHByb3RvY29sIHYxJyAnCisJdGVzdF9jb21taXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIHR3byAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdCAtQyBodHRwX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MSBcCisJCWZldGNoIDI+bG9nICYmCisKKwlnaXQgLUMgaHR0cF9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJZ2l0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MQorCWdyZXAgImdpdDwgdmVyc2lvbiAxIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCB3aXRoIGh0dHA6Ly8gdXNpbmcgcHJvdG9jb2wgdjEnICcKKwlHSVRfVFJBQ0VfUEFDS0VUPTEgZ2l0IC1DIGh0dHBfY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0xIFwKKwkJcHVsbCAyPmxvZyAmJgorCisJZ2l0IC1DIGh0dHBfY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlnaXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYxCisJZ3JlcCAiZ2l0PCB2ZXJzaW9uIDEiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggaHR0cDovLyB1c2luZyBwcm90b2NvbCB2MScgJworCXRlc3RfY29tbWl0IC1DIGh0dHBfY2hpbGQgdGhyZWUgJiYKKworCSMgUHVzaCB0byBhbm90aGVyIGJyYW5jaCwgYXMgdGhlIHRhcmdldCByZXBvc2l0b3J5IGhhcyB0aGUKKwkjIG1hc3RlciBicmFuY2ggY2hlY2tlZCBvdXQgYW5kIHdlIGNhbm5vdCBwdXNoIGludG8gaXQuCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdCAtQyBodHRwX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MSBcCisJCXB1c2ggb3JpZ2luIEhFQUQ6Y2xpZW50X2JyYW5jaCAmJiAjMj5sb2cgJiYKKworCWdpdCAtQyBodHRwX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiBsb2cgLTEgLS1mb3JtYXQ9JXMgY2xpZW50X2JyYW5jaCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYxCisJZ3JlcCAiZ2l0PCB2ZXJzaW9uIDEiIGxvZworJworCisjIERPIE5PVCBhZGQgbm9uLWh0dHBkLXNwZWNpZmljIHRlc3RzIGhlcmUsIGJlY2F1c2UgdGhlIGxhc3QgcGFydCBvZiB0aGlzCisjIHRlc3Qgc2NyaXB0IGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiBodHRwZCBpcyBhdmFpbGFibGUgYW5kIGVuYWJsZWQuCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwMS1naXQtc2VydmUuc2ggYi90L3Q1NzAxLWdpdC1zZXJ2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZmI5NjEzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwMS1naXQtc2VydmUuc2gKQEAgLTAsMCArMSwyMTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHByb3RvY29sIHYyIHNlcnZlciBjb21tYW5kcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY2FwYWJpbGl0eSBhZHZlcnRpc2VtZW50JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJdmVyc2lvbiAyCisJYWdlbnQ9Z2l0LyQoZ2l0IHZlcnNpb24gfCBjdXQgLWQiICIgLWYzKQorCWxzLXJlZnMKKwlmZXRjaD1zaGFsbG93CisJc2VydmVyLW9wdGlvbgorCTAwMDAKKwlFT0YKKworCUdJVF9URVNUX1NJREVCQU5EX0FMTD0wIHRlc3QtdG9vbCBzZXJ2ZS12MiBcCisJCS0tYWR2ZXJ0aXNlLWNhcGFiaWxpdGllcyA+b3V0ICYmCisJdGVzdC10b29sIHBrdC1saW5lIHVucGFjayA8b3V0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXRlbGVzcy1ycGMgZmxhZyBkb2VzIG5vdCBsaXN0IGNhcGFiaWxpdGllcycgJworCSMgRW1wdHkgcmVxdWVzdAorCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKKwkwMDAwCisJRU9GCisJdGVzdC10b29sIHNlcnZlLXYyIC0tc3RhdGVsZXNzLXJwYyA+b3V0IDxpbiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKKworCSMgRU9GCisJdGVzdC10b29sIHNlcnZlLXYyIC0tc3RhdGVsZXNzLXJwYyA+b3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXF1ZXN0IGludmFsaWQgY2FwYWJpbGl0eScgJworCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKKwlmb29iYXIKKwkwMDAwCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHNlcnZlLXYyIC0tc3RhdGVsZXNzLXJwYyAyPmVyciA8aW4gJiYKKwl0ZXN0X2kxOG5ncmVwICJ1bmtub3duIGNhcGFiaWxpdHkiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXF1ZXN0IHdpdGggbm8gY29tbWFuZCcgJworCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKKwlhZ2VudD1naXQvdGVzdAorCTAwMDAKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgc2VydmUtdjIgLS1zdGF0ZWxlc3MtcnBjIDI+ZXJyIDxpbiAmJgorCXRlc3RfaTE4bmdyZXAgIm5vIGNvbW1hbmQgcmVxdWVzdGVkIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxdWVzdCBpbnZhbGlkIGNvbW1hbmQnICcKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJY29tbWFuZD1mb28KKwlhZ2VudD1naXQvdGVzdAorCTAwMDAKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgc2VydmUtdjIgLS1zdGF0ZWxlc3MtcnBjIDI+ZXJyIDxpbiAmJgorCXRlc3RfaTE4bmdyZXAgImludmFsaWQgY29tbWFuZCIgZXJyCisnCisKKyMgVGVzdCB0aGUgYmFzaWNzIG9mIGxzLXJlZnMKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNvbWUgcmVmcyBhbmQgdGFncycgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCWdpdCBicmFuY2ggZGV2IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9yZWxlYXNlIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IHRhZyAtYSAtbSAiYW5ub3RhdGVkIHRhZyIgYW5ub3RhdGVkLXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpY3Mgb2YgbHMtcmVmcycgJworCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKKwljb21tYW5kPWxzLXJlZnMKKwkwMDAwCisJRU9GCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgSEVBRCkgSEVBRAorCSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL2RldikgcmVmcy9oZWFkcy9kZXYKKwkkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIpIHJlZnMvaGVhZHMvbWFzdGVyCisJJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvcmVsZWFzZSkgcmVmcy9oZWFkcy9yZWxlYXNlCisJJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9hbm5vdGF0ZWQtdGFnKSByZWZzL3RhZ3MvYW5ub3RhdGVkLXRhZworCSQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3Mvb25lKSByZWZzL3RhZ3Mvb25lCisJJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy90d28pIHJlZnMvdGFncy90d28KKwkwMDAwCisJRU9GCisKKwl0ZXN0LXRvb2wgc2VydmUtdjIgLS1zdGF0ZWxlc3MtcnBjIDxpbiA+b3V0ICYmCisJdGVzdC10b29sIHBrdC1saW5lIHVucGFjayA8b3V0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIHJlZi1wcmVmaXhlcycgJworCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKKwljb21tYW5kPWxzLXJlZnMKKwkwMDAxCisJcmVmLXByZWZpeCByZWZzL2hlYWRzL21hc3RlcgorCXJlZi1wcmVmaXggcmVmcy90YWdzL29uZQorCTAwMDAKKwlFT0YKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcikgcmVmcy9oZWFkcy9tYXN0ZXIKKwkkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL29uZSkgcmVmcy90YWdzL29uZQorCTAwMDAKKwlFT0YKKworCXRlc3QtdG9vbCBzZXJ2ZS12MiAtLXN0YXRlbGVzcy1ycGMgPGluID5vdXQgJiYKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgdW5wYWNrIDxvdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcy9oZWFkcyBwcmVmaXgnICcKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJY29tbWFuZD1scy1yZWZzCisJMDAwMQorCXJlZi1wcmVmaXggcmVmcy9oZWFkcy8KKwkwMDAwCisJRU9GCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9kZXYpIHJlZnMvaGVhZHMvZGV2CisJJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKSByZWZzL2hlYWRzL21hc3RlcgorCSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL3JlbGVhc2UpIHJlZnMvaGVhZHMvcmVsZWFzZQorCTAwMDAKKwlFT0YKKworCXRlc3QtdG9vbCBzZXJ2ZS12MiAtLXN0YXRlbGVzcy1ycGMgPGluID5vdXQgJiYKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgdW5wYWNrIDxvdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGVlbCBwYXJhbWV0ZXInICcKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJY29tbWFuZD1scy1yZWZzCisJMDAwMQorCXBlZWwKKwlyZWYtcHJlZml4IHJlZnMvdGFncy8KKwkwMDAwCisJRU9GCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL2Fubm90YXRlZC10YWcpIHJlZnMvdGFncy9hbm5vdGF0ZWQtdGFnIHBlZWxlZDokKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL2Fubm90YXRlZC10YWdee30pCisJJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9vbmUpIHJlZnMvdGFncy9vbmUKKwkkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL3R3bykgcmVmcy90YWdzL3R3bworCTAwMDAKKwlFT0YKKworCXRlc3QtdG9vbCBzZXJ2ZS12MiAtLXN0YXRlbGVzcy1ycGMgPGluID5vdXQgJiYKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgdW5wYWNrIDxvdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltcmVmcyBwYXJhbWV0ZXInICcKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJY29tbWFuZD1scy1yZWZzCisJMDAwMQorCXN5bXJlZnMKKwlyZWYtcHJlZml4IHJlZnMvaGVhZHMvCisJMDAwMAorCUVPRgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvZGV2KSByZWZzL2hlYWRzL2RldgorCSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcikgcmVmcy9oZWFkcy9tYXN0ZXIKKwkkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9yZWxlYXNlKSByZWZzL2hlYWRzL3JlbGVhc2Ugc3ltcmVmLXRhcmdldDpyZWZzL2hlYWRzL21hc3RlcgorCTAwMDAKKwlFT0YKKworCXRlc3QtdG9vbCBzZXJ2ZS12MiAtLXN0YXRlbGVzcy1ycGMgPGluID5vdXQgJiYKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgdW5wYWNrIDxvdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VuZGluZyBzZXJ2ZXItb3B0aW9ucycgJworCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKKwljb21tYW5kPWxzLXJlZnMKKwlzZXJ2ZXItb3B0aW9uPWhlbGxvCisJc2VydmVyLW9wdGlvbj13b3JsZAorCTAwMDEKKwlyZWYtcHJlZml4IEhFQUQKKwkwMDAwCisJRU9GCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgSEVBRCkgSEVBRAorCTAwMDAKKwlFT0YKKworCXRlc3QtdG9vbCBzZXJ2ZS12MiAtLXN0YXRlbGVzcy1ycGMgPGluID5vdXQgJiYKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgdW5wYWNrIDxvdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5leHBlY3RlZCBsaW5lcyBhcmUgbm90IGFsbG93ZWQgaW4gZmV0Y2ggcmVxdWVzdCcgJworCWdpdCBpbml0IHNlcnZlciAmJgorCisJdGVzdC10b29sIHBrdC1saW5lIHBhY2sgPmluIDw8LUVPRiAmJgorCWNvbW1hbmQ9ZmV0Y2gKKwkwMDAxCisJdGhpcy1pcy1ub3QtYS1jb21tYW5kCisJMDAwMAorCUVPRgorCisJKAorCQljZCBzZXJ2ZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHNlcnZlLXYyIC0tc3RhdGVsZXNzLXJwYworCSkgPGluID4vZGV2L251bGwgMj5lcnIgJiYKKwlncmVwICJ1bmV4cGVjdGVkIGxpbmU6IC50aGlzLWlzLW5vdC1hLWNvbW1hbmQuIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NzAyLXByb3RvY29sLXYyLnNoIGIvdC90NTcwMi1wcm90b2NvbC12Mi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MDM5ZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwMi1wcm90b2NvbC12Mi5zaApAQCAtMCwwICsxLDc1NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHdpcmUtcHJvdG9jb2wgdmVyc2lvbiAyJworCitURVNUX05PX0NSRUFURV9SRVBPPTEKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGVzdCBwcm90b2NvbCB2MiB3aXRoICdnaXQ6Ly8nIHRyYW5zcG9ydAorIworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItZ2l0LWRhZW1vbi5zaAorc3RhcnRfZ2l0X2RhZW1vbiAtLWV4cG9ydC1hbGwgLS1lbmFibGU9cmVjZWl2ZS1wYWNrCitkYWVtb25fcGFyZW50PSRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC9wYXJlbnQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHJlcG8gdG8gYmUgc2VydmVkIGJ5IGdpdC1kYWVtb24nICcKKwlnaXQgaW5pdCAiJGRhZW1vbl9wYXJlbnQiICYmCisJdGVzdF9jb21taXQgLUMgIiRkYWVtb25fcGFyZW50IiBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdCByZWZzIHdpdGggZ2l0Oi8vIHVzaW5nIHByb3RvY29sIHYyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJbHMtcmVtb3RlIC0tc3ltcmVmICIkR0lUX0RBRU1PTl9VUkwvcGFyZW50IiA+YWN0dWFsICYmCisKKwkjIENsaWVudCByZXF1ZXN0ZWQgdG8gdXNlIHByb3RvY29sIHYyCisJZ3JlcCAiZ2l0PiAuKlxcXDBcXFwwdmVyc2lvbj0yXFxcMCQiIGxvZyAmJgorCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MgorCWdyZXAgImdpdDwgdmVyc2lvbiAyIiBsb2cgJiYKKworCWdpdCBscy1yZW1vdGUgLS1zeW1yZWYgIiRHSVRfREFFTU9OX1VSTC9wYXJlbnQiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZiBhZHZlcnRpc2VtZW50IGlzIGZpbHRlcmVkIHdpdGggbHMtcmVtb3RlIHVzaW5nIHByb3RvY29sIHYyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJbHMtcmVtb3RlICIkR0lUX0RBRU1PTl9VUkwvcGFyZW50IiBtYXN0ZXIgPmFjdHVhbCAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJChnaXQgLUMgIiRkYWVtb25fcGFyZW50IiByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIpJChwcmludGYgIlx0IilyZWZzL2hlYWRzL21hc3RlcgorCUVPRgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIGdpdDovLyB1c2luZyBwcm90b2NvbCB2MicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWNsb25lICIkR0lUX0RBRU1PTl9VUkwvcGFyZW50IiBkYWVtb25fY2hpbGQgJiYKKworCWdpdCAtQyBkYWVtb25fY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlnaXQgLUMgIiRkYWVtb25fcGFyZW50IiBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgQ2xpZW50IHJlcXVlc3RlZCB0byB1c2UgcHJvdG9jb2wgdjIKKwlncmVwICJjbG9uZT4gLipcXFwwXFxcMHZlcnNpb249MlxcXDAkIiBsb2cgJiYKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjIKKwlncmVwICJjbG9uZTwgdmVyc2lvbiAyIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBnaXQ6Ly8gdXNpbmcgcHJvdG9jb2wgdjInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCXRlc3RfY29tbWl0IC1DICIkZGFlbW9uX3BhcmVudCIgdHdvICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLUMgZGFlbW9uX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWZldGNoICYmCisKKwlnaXQgLUMgZGFlbW9uX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyBvcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwlnaXQgLUMgIiRkYWVtb25fcGFyZW50IiBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgQ2xpZW50IHJlcXVlc3RlZCB0byB1c2UgcHJvdG9jb2wgdjIKKwlncmVwICJmZXRjaD4gLipcXFwwXFxcMHZlcnNpb249MlxcXDAkIiBsb2cgJiYKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjIKKwlncmVwICJmZXRjaDwgdmVyc2lvbiAyIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggYnkgaGFzaCB3aXRob3V0IHRhZyBmb2xsb3dpbmcgd2l0aCBwcm90b2NvbCB2MiBkb2VzIG5vdCBsaXN0IHJlZnMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCXRlc3RfY29tbWl0IC1DICIkZGFlbW9uX3BhcmVudCIgdHdvX2EgJiYKKwlnaXQgLUMgIiRkYWVtb25fcGFyZW50IiByZXYtcGFyc2UgdHdvX2EgPnR3b19hX2hhc2ggJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtQyBkYWVtb25fY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJZmV0Y2ggLS1uby10YWdzIG9yaWdpbiAkKGNhdCB0d29fYV9oYXNoKSAmJgorCisJZ3JlcCAiZmV0Y2g8IHZlcnNpb24gMiIgbG9nICYmCisJISBncmVwICJmZXRjaD4gY29tbWFuZD1scy1yZWZzIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCB3aXRoIGdpdDovLyB1c2luZyBwcm90b2NvbCB2MicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGRhZW1vbl9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlwdWxsICYmCisKKwlnaXQgLUMgZGFlbW9uX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0IC1DICIkZGFlbW9uX3BhcmVudCIgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIENsaWVudCByZXF1ZXN0ZWQgdG8gdXNlIHByb3RvY29sIHYyCisJZ3JlcCAiZmV0Y2g+IC4qXFxcMFxcXDB2ZXJzaW9uPTJcXFwwJCIgbG9nICYmCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYyCisJZ3JlcCAiZmV0Y2g8IHZlcnNpb24gMiIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBnaXQ6Ly8gYW5kIGEgY29uZmlnIG9mIHYyIGRvZXMgbm90IHJlcXVlc3QgdjInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCSMgVGlsbCB2MiBmb3IgcHVzaCBpcyBkZXNpZ25lZCwgbWFrZSBzdXJlIHRoYXQgaWYgYSBjbGllbnQgaGFzCisJIyBwcm90b2NvbC52ZXJzaW9uIGNvbmZpZ3VyZWQgdG8gdXNlIHYyLCB0aGF0IHRoZSBjbGllbnQgaW5zdGVhZCBmYWxscworCSMgYmFjayBhbmQgdXNlcyB2MC4KKworCXRlc3RfY29tbWl0IC1DIGRhZW1vbl9jaGlsZCB0aHJlZSAmJgorCisJIyBQdXNoIHRvIGFub3RoZXIgYnJhbmNoLCBhcyB0aGUgdGFyZ2V0IHJlcG9zaXRvcnkgaGFzIHRoZQorCSMgbWFzdGVyIGJyYW5jaCBjaGVja2VkIG91dCBhbmQgd2UgY2Fubm90IHB1c2ggaW50byBpdC4KKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLUMgZGFlbW9uX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCXB1c2ggb3JpZ2luIEhFQUQ6Y2xpZW50X2JyYW5jaCAmJgorCisJZ2l0IC1DIGRhZW1vbl9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWdpdCAtQyAiJGRhZW1vbl9wYXJlbnQiIGxvZyAtMSAtLWZvcm1hdD0lcyBjbGllbnRfYnJhbmNoID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIENsaWVudCByZXF1ZXN0ZWQgdG8gdXNlIHByb3RvY29sIHYyCisJISBncmVwICJwdXNoPiAuKlxcXDBcXFwwdmVyc2lvbj0yXFxcMCQiIGxvZyAmJgorCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MgorCSEgZ3JlcCAicHVzaDwgdmVyc2lvbiAyIiBsb2cKKycKKworc3RvcF9naXRfZGFlbW9uCisKKyMgVGVzdCBwcm90b2NvbCB2MiB3aXRoICdmaWxlOi8vJyB0cmFuc3BvcnQKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSByZXBvIHRvIGJlIHNlcnZlZCBieSBmaWxlOi8vIHRyYW5zcG9ydCcgJworCWdpdCBpbml0IGZpbGVfcGFyZW50ICYmCisJdGVzdF9jb21taXQgLUMgZmlsZV9wYXJlbnQgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3QgcmVmcyB3aXRoIGZpbGU6Ly8gdXNpbmcgcHJvdG9jb2wgdjInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlscy1yZW1vdGUgLS1zeW1yZWYgImZpbGU6Ly8kKHB3ZCkvZmlsZV9wYXJlbnQiID5hY3R1YWwgJiYKKworCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MgorCWdyZXAgImdpdDwgdmVyc2lvbiAyIiBsb2cgJiYKKworCWdpdCBscy1yZW1vdGUgLS1zeW1yZWYgImZpbGU6Ly8kKHB3ZCkvZmlsZV9wYXJlbnQiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZiBhZHZlcnRpc2VtZW50IGlzIGZpbHRlcmVkIHdpdGggbHMtcmVtb3RlIHVzaW5nIHByb3RvY29sIHYyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJbHMtcmVtb3RlICJmaWxlOi8vJChwd2QpL2ZpbGVfcGFyZW50IiBtYXN0ZXIgPmFjdHVhbCAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJChnaXQgLUMgZmlsZV9wYXJlbnQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKSQocHJpbnRmICJcdCIpcmVmcy9oZWFkcy9tYXN0ZXIKKwlFT0YKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VydmVyLW9wdGlvbnMgYXJlIHNlbnQgd2hlbiB1c2luZyBscy1yZW1vdGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlscy1yZW1vdGUgLW8gaGVsbG8gLW8gd29ybGQgImZpbGU6Ly8kKHB3ZCkvZmlsZV9wYXJlbnQiIG1hc3RlciA+YWN0dWFsICYmCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkKGdpdCAtQyBmaWxlX3BhcmVudCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIpJChwcmludGYgIlx0IilyZWZzL2hlYWRzL21hc3RlcgorCUVPRgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdyZXAgInNlcnZlci1vcHRpb249aGVsbG8iIGxvZyAmJgorCWdyZXAgInNlcnZlci1vcHRpb249d29ybGQiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3YXJuIGlmIHVzaW5nIHNlcnZlci1vcHRpb24gd2l0aCBscy1yZW1vdGUgd2l0aCBsZWdhY3kgcHJvdG9jb2wnICcKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTAgXAorCQlscy1yZW1vdGUgLW8gaGVsbG8gLW8gd29ybGQgImZpbGU6Ly8kKHB3ZCkvZmlsZV9wYXJlbnQiIG1hc3RlciAyPmVyciAmJgorCisJdGVzdF9pMThuZ3JlcCAic2VlIHByb3RvY29sLnZlcnNpb24gaW4iIGVyciAmJgorCXRlc3RfaTE4bmdyZXAgInNlcnZlciBvcHRpb25zIHJlcXVpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGxhdGVyIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCBmaWxlOi8vIHVzaW5nIHByb3RvY29sIHYyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJY2xvbmUgImZpbGU6Ly8kKHB3ZCkvZmlsZV9wYXJlbnQiIGZpbGVfY2hpbGQgJiYKKworCWdpdCAtQyBmaWxlX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0IC1DIGZpbGVfcGFyZW50IGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYyCisJZ3JlcCAiY2xvbmU8IHZlcnNpb24gMiIgbG9nICYmCisKKwkjIENsaWVudCBzZW50IHJlZi1wcmVmaXhlcyB0byBmaWx0ZXIgdGhlIHJlZi1hZHZlcnRpc2VtZW50CisJZ3JlcCAicmVmLXByZWZpeCBIRUFEIiBsb2cgJiYKKwlncmVwICJyZWYtcHJlZml4IHJlZnMvaGVhZHMvIiBsb2cgJiYKKwlncmVwICJyZWYtcHJlZml4IHJlZnMvdGFncy8iIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIGZpbGU6Ly8gdXNpbmcgcHJvdG9jb2wgdjInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCXRlc3RfY29tbWl0IC1DIGZpbGVfcGFyZW50IHR3byAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGZpbGVfY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJZmV0Y2ggb3JpZ2luICYmCisKKwlnaXQgLUMgZmlsZV9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJZ2l0IC1DIGZpbGVfcGFyZW50IGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYyCisJZ3JlcCAiZmV0Y2g8IHZlcnNpb24gMiIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZiBhZHZlcnRpc2VtZW50IGlzIGZpbHRlcmVkIGR1cmluZyBmZXRjaCB1c2luZyBwcm90b2NvbCB2MicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgorCisJdGVzdF9jb21taXQgLUMgZmlsZV9wYXJlbnQgdGhyZWUgJiYKKwlnaXQgLUMgZmlsZV9wYXJlbnQgYnJhbmNoIHVud2FudGVkLWJyYW5jaCB0aHJlZSAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGZpbGVfY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJZmV0Y2ggb3JpZ2luIG1hc3RlciAmJgorCisJZ2l0IC1DIGZpbGVfY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzIG9yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCWdpdCAtQyBmaWxlX3BhcmVudCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdyZXAgInJlZnMvaGVhZHMvbWFzdGVyIiBsb2cgJiYKKwkhIGdyZXAgInJlZnMvaGVhZHMvdW53YW50ZWQtYnJhbmNoIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VydmVyLW9wdGlvbnMgYXJlIHNlbnQgd2hlbiBmZXRjaGluZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgorCisJdGVzdF9jb21taXQgLUMgZmlsZV9wYXJlbnQgZm91ciAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGZpbGVfY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJZmV0Y2ggLW8gaGVsbG8gLW8gd29ybGQgb3JpZ2luIG1hc3RlciAmJgorCisJZ2l0IC1DIGZpbGVfY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzIG9yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCWdpdCAtQyBmaWxlX3BhcmVudCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdyZXAgInNlcnZlci1vcHRpb249aGVsbG8iIGxvZyAmJgorCWdyZXAgInNlcnZlci1vcHRpb249d29ybGQiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3YXJuIGlmIHVzaW5nIHNlcnZlci1vcHRpb24gd2l0aCBmZXRjaCB3aXRoIGxlZ2FjeSBwcm90b2NvbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHRlbXBfY2hpbGQiICYmCisKKwlnaXQgaW5pdCB0ZW1wX2NoaWxkICYmCisKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIGdpdCAtQyB0ZW1wX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MCBcCisJCWZldGNoIC1vIGhlbGxvIC1vIHdvcmxkICJmaWxlOi8vJChwd2QpL2ZpbGVfcGFyZW50IiBtYXN0ZXIgMj5lcnIgJiYKKworCXRlc3RfaTE4bmdyZXAgInNlZSBwcm90b2NvbC52ZXJzaW9uIGluIiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJzZXJ2ZXIgb3B0aW9ucyByZXF1aXJlIHByb3RvY29sIHZlcnNpb24gMiBvciBsYXRlciIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlcnZlci1vcHRpb25zIGFyZSBzZW50IHdoZW4gY2xvbmluZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGxvZyBteWNsb25lIiAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWNsb25lIC0tc2VydmVyLW9wdGlvbj1oZWxsbyAtLXNlcnZlci1vcHRpb249d29ybGQgXAorCQkiZmlsZTovLyQocHdkKS9maWxlX3BhcmVudCIgbXljbG9uZSAmJgorCisJZ3JlcCAic2VydmVyLW9wdGlvbj1oZWxsbyIgbG9nICYmCisJZ3JlcCAic2VydmVyLW9wdGlvbj13b3JsZCIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dhcm4gaWYgdXNpbmcgc2VydmVyLW9wdGlvbiB3aXRoIGNsb25lIHdpdGggbGVnYWN5IHByb3RvY29sJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbXljbG9uZSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MCBcCisJCWNsb25lIC0tc2VydmVyLW9wdGlvbj1oZWxsbyAtLXNlcnZlci1vcHRpb249d29ybGQgXAorCQkiZmlsZTovLyQocHdkKS9maWxlX3BhcmVudCIgbXljbG9uZSAyPmVyciAmJgorCisJdGVzdF9pMThuZ3JlcCAic2VlIHByb3RvY29sLnZlcnNpb24gaW4iIGVyciAmJgorCXRlc3RfaTE4bmdyZXAgInNlcnZlciBvcHRpb25zIHJlcXVpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGxhdGVyIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBsb2FkLXBhY2sgcmVzcGVjdHMgY29uZmlnIHVzaW5nIHByb3RvY29sIHYyJyAnCisJZ2l0IGluaXQgc2VydmVyICYmCisJd3JpdGVfc2NyaXB0IHNlcnZlci8uZ2l0L2hvb2sgPDwtXEVPRiAmJgorCQl0b3VjaCBob29rb3V0CisJCSIkQCIKKwlFT0YKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgb25lICYmCisKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgdXBsb2FkcGFjay5wYWNrb2JqZWN0c2hvb2sgLi9ob29rICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc2VydmVyLy5naXQvaG9va291dCAmJgorCWdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgY2xvbmUgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBjbGllbnQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzZXJ2ZXIvLmdpdC9ob29rb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZpbHRlciB0ZXN0cycgJworCXJtIC1yZiBzZXJ2ZXIgY2xpZW50ICYmCisJZ2l0IGluaXQgc2VydmVyICYmCisKKwkjIDEgY29tbWl0IHRvIGNyZWF0ZSBhIGZpbGUsIGFuZCAxIGNvbW1pdCB0byBtb2RpZnkgaXQKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgbWVzc2FnZTEgYS50eHQgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgbWVzc2FnZTIgYS50eHQgJiYKKwlnaXQgLUMgc2VydmVyIGNvbmZpZyBwcm90b2NvbC52ZXJzaW9uIDIgJiYKKwlnaXQgLUMgc2VydmVyIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwlnaXQgLUMgc2VydmVyIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgcHJvdG9jb2wudmVyc2lvbiAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgY2xvbmUnICcKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQljbG9uZSAtLWZpbHRlcj1ibG9iOm5vbmUgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBjbGllbnQgJiYKKwlncmVwICJ2ZXJzaW9uIDIiIHRyYWNlICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSBvbGQgdmVyc2lvbiBvZiB0aGUgZmlsZSBpcyBtaXNzaW5nCisJZ2l0IC1DIGNsaWVudCByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyAtLW1pc3Npbmc9cHJpbnQgbWFzdGVyIFwKKwkJPm9ic2VydmVkLm9pZHMgJiYKKwlncmVwICIkKGdpdCAtQyBzZXJ2ZXIgcmV2LXBhcnNlIG1lc3NhZ2UxOmEudHh0KSIgb2JzZXJ2ZWQub2lkcyAmJgorCisJIyBFbnN1cmUgdGhhdCBjbGllbnQgcGFzc2VzIGZzY2sKKwlnaXQgLUMgY2xpZW50IGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHluYW1pY2FsbHkgZmV0Y2ggbWlzc2luZyBvYmplY3QnICcKKwlybSAiJChwd2QpL3RyYWNlIiAmJgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQljYXQtZmlsZSAtcCAkKGdpdCAtQyBzZXJ2ZXIgcmV2LXBhcnNlIG1lc3NhZ2UxOmEudHh0KSAmJgorCWdyZXAgInZlcnNpb24gMiIgdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hlbiBkeW5hbWljYWxseSBmZXRjaGluZyBtaXNzaW5nIG9iamVjdCwgZG8gbm90IGxpc3QgcmVmcycgJworCSEgZ3JlcCAiZ2l0PiBjb21tYW5kPWxzLXJlZnMiIHRyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgZmV0Y2gnICcKKwlybSAtcmYgY2xpZW50ICIkKHB3ZCkvdHJhY2UiICYmCisJZ2l0IGluaXQgY2xpZW50ICYmCisJU0VSVkVSPSJmaWxlOi8vJChwd2QpL3NlcnZlciIgJiYKKwl0ZXN0X2NvbmZpZyAtQyBjbGllbnQgZXh0ZW5zaW9ucy5wYXJ0aWFsQ2xvbmUgIiRTRVJWRVIiICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJZmV0Y2ggLS1maWx0ZXI9YmxvYjpub25lICIkU0VSVkVSIiBtYXN0ZXI6cmVmcy9oZWFkcy9vdGhlciAmJgorCWdyZXAgInZlcnNpb24gMiIgdHJhY2UgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIG9sZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGlzIG1pc3NpbmcKKwlnaXQgLUMgY2xpZW50IHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIC0tbWlzc2luZz1wcmludCBvdGhlciBcCisJCT5vYnNlcnZlZC5vaWRzICYmCisJZ3JlcCAiJChnaXQgLUMgc2VydmVyIHJldi1wYXJzZSBtZXNzYWdlMTphLnR4dCkiIG9ic2VydmVkLm9pZHMgJiYKKworCSMgRW5zdXJlIHRoYXQgY2xpZW50IHBhc3NlcyBmc2NrCisJZ2l0IC1DIGNsaWVudCBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBhZHZlcnRpc2UgZmlsdGVyIGlmIG5vdCBjb25maWd1cmVkIHRvIGRvIHNvJyAnCisJU0VSVkVSPSJmaWxlOi8vJChwd2QpL3NlcnZlciIgJiYKKworCXJtICIkKHB3ZCkvdHJhY2UiICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJbHMtcmVtb3RlICIkU0VSVkVSIiAmJgorCWdyZXAgImZldGNoPS4qZmlsdGVyIiB0cmFjZSAmJgorCisJcm0gIiQocHdkKS90cmFjZSIgJiYKKwlnaXQgLUMgc2VydmVyIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDAgJiYKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlscy1yZW1vdGUgIiRTRVJWRVIiICYmCisJZ3JlcCAiZmV0Y2g9IiB0cmFjZSA+ZmV0Y2hfY2FwYWJpbGl0aWVzICYmCisJISBncmVwIGZpbHRlciBmZXRjaF9jYXBhYmlsaXRpZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBjbG9uZSB3YXJucyBpZiBmaWx0ZXIgaXMgbm90IGFkdmVydGlzZWQnICcKKwlybSAtcmYgY2xpZW50ICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAwICYmCisJZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWNsb25lIC0tZmlsdGVyPWJsb2I6bm9uZSAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImZpbHRlcmluZyBub3QgcmVjb2duaXplZCBieSBzZXJ2ZXIsIGlnbm9yaW5nIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXZlbiB3aXRoIGhhbmRjcmFmdGVkIHJlcXVlc3QsIGZpbHRlciBkb2VzIG5vdCB3b3JrIGlmIG5vdCBhZHZlcnRpc2VkJyAnCisJZ2l0IC1DIHNlcnZlciBjb25maWcgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAwICYmCisKKwkjIEN1c3RvbSByZXF1ZXN0IHRoYXQgdHJpZXMgdG8gZmlsdGVyIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCBhZHZlcnRpc2VkLgorCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKKwljb21tYW5kPWZldGNoCisJMDAwMQorCXdhbnQgJChnaXQgLUMgc2VydmVyIHJldi1wYXJzZSBtYXN0ZXIpCisJZmlsdGVyIGJsb2I6bm9uZQorCTAwMDAKKwlFT0YKKworCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCAtQyBzZXJ2ZXIgc2VydmUtdjIgLS1zdGF0ZWxlc3MtcnBjIFwKKwkJPGluID4vZGV2L251bGwgMj5lcnIgJiYKKwlncmVwICJ1bmV4cGVjdGVkIGxpbmU6IC5maWx0ZXIgYmxvYjpub25lLiIgZXJyICYmCisKKwkjIEV4ZXJjaXNlIHRvIGVuc3VyZSB0aGF0IGlmIGFkdmVydGlzZWQsIGZpbHRlciB3b3JrcworCWdpdCAtQyBzZXJ2ZXIgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dmaWx0ZXIgMSAmJgorCXRlc3QtdG9vbCAtQyBzZXJ2ZXIgc2VydmUtdjIgLS1zdGF0ZWxlc3MtcnBjIDxpbiA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgcmVmc3BlYyBpcyB1c2VkIHRvIGZpbHRlciByZWYgd2hlbiBmZXRjaGNpbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtQyBmaWxlX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWZldGNoIG9yaWdpbiAmJgorCisJZ2l0IC1DIGZpbGVfY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzIHRocmVlID5hY3R1YWwgJiYKKwlnaXQgLUMgZmlsZV9wYXJlbnQgbG9nIC0xIC0tZm9ybWF0PSVzIHRocmVlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlncmVwICJyZWYtcHJlZml4IHJlZnMvaGVhZHMvIiBsb2cgJiYKKwlncmVwICJyZWYtcHJlZml4IHJlZnMvdGFncy8iIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBzdXBwb3J0cyB2YXJpb3VzIHdheXMgb2YgaGF2ZSBsaW5lcycgJworCXJtIC1yZiBzZXJ2ZXIgY2xpZW50IHRyYWNlICYmCisJZ2l0IGluaXQgc2VydmVyICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIGR3aW0gJiYKKwlUUkVFPSQoZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgSEVBRF57dHJlZX0pICYmCisJZ2l0IC1DIHNlcnZlciB0YWcgZXhhY3QgXAorCQkkKGdpdCAtQyBzZXJ2ZXIgY29tbWl0LXRyZWUgLW0gYSAiJFRSRUUiKSAmJgorCWdpdCAtQyBzZXJ2ZXIgdGFnIGR3aW0tdW53YW50ZWQgXAorCQkkKGdpdCAtQyBzZXJ2ZXIgY29tbWl0LXRyZWUgLW0gYiAiJFRSRUUiKSAmJgorCWdpdCAtQyBzZXJ2ZXIgdGFnIGV4YWN0LXVud2FudGVkIFwKKwkJJChnaXQgLUMgc2VydmVyIGNvbW1pdC10cmVlIC1tIGMgIiRUUkVFIikgJiYKKwlnaXQgLUMgc2VydmVyIHRhZyBwcmVmaXgxIFwKKwkJJChnaXQgLUMgc2VydmVyIGNvbW1pdC10cmVlIC1tIGQgIiRUUkVFIikgJiYKKwlnaXQgLUMgc2VydmVyIHRhZyBwcmVmaXgyIFwKKwkJJChnaXQgLUMgc2VydmVyIGNvbW1pdC10cmVlIC1tIGUgIiRUUkVFIikgJiYKKwlnaXQgLUMgc2VydmVyIHRhZyBmZXRjaC1ieS1zaGExIFwKKwkJJChnaXQgLUMgc2VydmVyIGNvbW1pdC10cmVlIC1tIGYgIiRUUkVFIikgJiYKKwlnaXQgLUMgc2VydmVyIHRhZyBjb21wbGV0ZWx5LXVucmVsYXRlZCBcCisJCSQoZ2l0IC1DIHNlcnZlciBjb21taXQtdHJlZSAtbSBnICIkVFJFRSIpICYmCisKKwlnaXQgaW5pdCBjbGllbnQgJiYKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJZmV0Y2ggImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBcCisJCWR3aW0gXAorCQlyZWZzL3RhZ3MvZXhhY3QgXAorCQlyZWZzL3RhZ3MvcHJlZml4KjpyZWZzL3RhZ3MvcHJlZml4KiBcCisJCSIkKGdpdCAtQyBzZXJ2ZXIgcmV2LXBhcnNlIGZldGNoLWJ5LXNoYTEpIiAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGUgYXBwcm9wcmlhdGUgcHJlZml4ZXMgYXJlIHNlbnQgKHVzaW5nIGEgc2FtcGxlKQorCWdyZXAgImZldGNoPiByZWYtcHJlZml4IGR3aW0iIHRyYWNlICYmCisJZ3JlcCAiZmV0Y2g+IHJlZi1wcmVmaXggcmVmcy9oZWFkcy9kd2ltIiB0cmFjZSAmJgorCWdyZXAgImZldGNoPiByZWYtcHJlZml4IHJlZnMvdGFncy9wcmVmaXgiIHRyYWNlICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IG9iamVjdHMgYXJlIHJldHVybmVkCisJZ2l0IC1DIGNsaWVudCBjYXQtZmlsZSAtZSAkKGdpdCAtQyBzZXJ2ZXIgcmV2LXBhcnNlIGR3aW0pICYmCisJZ2l0IC1DIGNsaWVudCBjYXQtZmlsZSAtZSAkKGdpdCAtQyBzZXJ2ZXIgcmV2LXBhcnNlIGV4YWN0KSAmJgorCWdpdCAtQyBjbGllbnQgY2F0LWZpbGUgLWUgJChnaXQgLUMgc2VydmVyIHJldi1wYXJzZSBwcmVmaXgxKSAmJgorCWdpdCAtQyBjbGllbnQgY2F0LWZpbGUgLWUgJChnaXQgLUMgc2VydmVyIHJldi1wYXJzZSBwcmVmaXgyKSAmJgorCWdpdCAtQyBjbGllbnQgY2F0LWZpbGUgLWUgJChnaXQgLUMgc2VydmVyIHJldi1wYXJzZSBmZXRjaC1ieS1zaGExKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBjbGllbnQgY2F0LWZpbGUgLWUgXAorCQkkKGdpdCAtQyBzZXJ2ZXIgcmV2LXBhcnNlIGR3aW0tdW53YW50ZWQpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGNsaWVudCBjYXQtZmlsZSAtZSBcCisJCSQoZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgZXhhY3QtdW53YW50ZWQpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGNsaWVudCBjYXQtZmlsZSAtZSBcCisJCSQoZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgY29tcGxldGVseS11bnJlbGF0ZWQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHN1cHBvcnRzIGluY2x1ZGUtdGFnIGFuZCB0YWcgZm9sbG93aW5nJyAnCisJcm0gLXJmIHNlcnZlciBjbGllbnQgdHJhY2UgJiYKKwlnaXQgaW5pdCBzZXJ2ZXIgJiYKKworCXRlc3RfY29tbWl0IC1DIHNlcnZlciB0b19mZXRjaCAmJgorCWdpdCAtQyBzZXJ2ZXIgdGFnIC1hIGFubm90YXRlZF90YWcgLW0gbWVzc2FnZSAmJgorCisJZ2l0IGluaXQgY2xpZW50ICYmCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLUMgY2xpZW50IC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWZldGNoICIkKHB3ZCkvc2VydmVyIiB0b19mZXRjaDp0b19mZXRjaCAmJgorCisJZ3JlcCAiZmV0Y2g+IHJlZi1wcmVmaXggdG9fZmV0Y2giIHRyYWNlICYmCisJZ3JlcCAiZmV0Y2g+IHJlZi1wcmVmaXggcmVmcy90YWdzLyIgdHJhY2UgJiYKKwlncmVwICJmZXRjaD4gaW5jbHVkZS10YWciIHRyYWNlICYmCisKKwlnaXQgLUMgY2xpZW50IGNhdC1maWxlIC1lICQoZ2l0IC1DIGNsaWVudCByZXYtcGFyc2UgYW5ub3RhdGVkX3RhZykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBsb2FkLXBhY2sgcmVzcGVjdHMgY2xpZW50IHNoYWxsb3dzJyAnCisJcm0gLXJmIHNlcnZlciBjbGllbnQgdHJhY2UgJiYKKworCWdpdCBpbml0IHNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBiYXNlICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIGNsaWVudF9oYXMgJiYKKworCWdpdCBjbG9uZSAtLWRlcHRoPTEgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBjbGllbnQgJiYKKworCSMgQWRkIGV4dHJhIGNvbW1pdHMgdG8gdGhlIGNsaWVudCBzbyB0aGF0IHRoZSB3aG9sZSBmZXRjaCB0YWtlcyBtb3JlCisJIyB0aGFuIDEgcmVxdWVzdCAoZHVlIHRvIG5lZ290aWF0aW9uKQorCXRlc3RfY29tbWl0X2J1bGsgLUMgY2xpZW50IC0taWQ9YyAzMiAmJgorCisJZ2l0IC1DIHNlcnZlciBjaGVja291dCAtYiBuZXdicmFuY2ggYmFzZSAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBjbGllbnRfd2FudHMgJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlmZXRjaCBvcmlnaW4gbmV3YnJhbmNoICYmCisJIyBFbnN1cmUgdGhhdCBwcm90b2NvbCB2MiBpcyB1c2VkCisJZ3JlcCAiZmV0Y2g8IHZlcnNpb24gMiIgdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5zdXJlIHRoYXQgbXVsdGlwbGUgZmV0Y2hlcyBpbiBzYW1lIHByb2Nlc3MgZnJvbSBhIHNoYWxsb3cgcmVwbyB3b3JrcycgJworCXJtIC1yZiBzZXJ2ZXIgY2xpZW50IHRyYWNlICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBvbmUgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgdHdvICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIHRocmVlICYmCisJZ2l0IGNsb25lIC0tc2hhbGxvdy1leGNsdWRlIHR3byAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudCAmJgorCisJZ2l0IC1DIHNlcnZlciB0YWcgLWEgLW0gImFuIGFubm90YXRlZCB0YWciIHR3b3RhZyB0d28gJiYKKworCSMgVHJpZ2dlcnMgdGFnIGZvbGxvd2luZyAodGh1cywgMiBmZXRjaGVzIGluIG9uZSBwcm9jZXNzKQorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlmZXRjaCAtLXNoYWxsb3ctZXhjbHVkZSBvbmUgb3JpZ2luICYmCisJIyBFbnN1cmUgdGhhdCBwcm90b2NvbCB2MiBpcyB1c2VkCisJZ3JlcCAiZmV0Y2g8IHZlcnNpb24gMiIgdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVlcGVuLXJlbGF0aXZlJyAnCisJcm0gLXJmIHNlcnZlciBjbGllbnQgdHJhY2UgJiYKKworCXRlc3RfY3JlYXRlX3JlcG8gc2VydmVyICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIG9uZSAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciB0d28gJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgdGhyZWUgJiYKKwlnaXQgY2xvbmUgLS1kZXB0aCAxICJmaWxlOi8vJChwd2QpL3NlcnZlciIgY2xpZW50ICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIGZvdXIgJiYKKworCSMgU2FuaXR5IGNoZWNrIHRoYXQgb25seSAidGhyZWUiIGlzIGRvd25sb2FkZWQKKwlnaXQgLUMgY2xpZW50IGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIG1hc3RlciA+YWN0dWFsICYmCisJZWNobyB0aHJlZSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlmZXRjaCAtLWRlZXBlbj0xIG9yaWdpbiAmJgorCSMgRW5zdXJlIHRoYXQgcHJvdG9jb2wgdjIgaXMgdXNlZAorCWdyZXAgImZldGNoPCB2ZXJzaW9uIDIiIHRyYWNlICYmCisKKwlnaXQgLUMgY2xpZW50IGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIG9yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWZvdXIKKwl0aHJlZQorCXR3bworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisjIFRlc3QgcHJvdG9jb2wgdjIgd2l0aCAnaHR0cDovLycgdHJhbnNwb3J0CisjCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorc3RhcnRfaHR0cGQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHJlcG8gdG8gYmUgc2VydmVkIGJ5IGh0dHA6Ly8gdHJhbnNwb3J0JyAnCisJZ2l0IGluaXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiICYmCisJZ2l0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiBjb25maWcgaHR0cC5yZWNlaXZlcGFjayB0cnVlICYmCisJdGVzdF9jb21taXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIGh0dHA6Ly8gdXNpbmcgcHJvdG9jb2wgdjInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIEdJVF9UUkFDRV9DVVJMPSIkKHB3ZCkvbG9nIiBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJY2xvbmUgIiRIVFRQRF9VUkwvc21hcnQvaHR0cF9wYXJlbnQiIGh0dHBfY2hpbGQgJiYKKworCWdpdCAtQyBodHRwX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgQ2xpZW50IHJlcXVlc3RlZCB0byB1c2UgcHJvdG9jb2wgdjIKKwlncmVwICJHaXQtUHJvdG9jb2w6IHZlcnNpb249MiIgbG9nICYmCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYyCisJZ3JlcCAiZ2l0PCB2ZXJzaW9uIDIiIGxvZyAmJgorCSMgVmVyaWZ5IHRoYXQgdGhlIGNodW5rZWQgZW5jb2Rpbmcgc2VuZGluZyBjb2RlcGF0aCBpcyBOT1QgZXhlcmNpc2VkCisJISBncmVwICJTZW5kIGhlYWRlcjogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBiaWcgcmVwb3NpdG9yeSB3aXRoIGh0dHA6Ly8gdXNpbmcgcHJvdG9jb2wgdjInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCWdpdCBpbml0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2JpZyIgJiYKKwkjIEVuc3VyZSB0aGF0IHRoZSBsaXN0IG9mIHdhbnRzIGlzIGdyZWF0ZXIgdGhhbiBodHRwLnBvc3RidWZmZXIgYmVsb3cKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMTUwMCkKKwlkbworCQkjIGRvIG5vdCB1c2UgaGVyZS1kb2MsIGJlY2F1c2UgaXQgcmVxdWlyZXMgYSBwcm9jZXNzCisJCSMgcGVyIGxvb3AgaXRlcmF0aW9uCisJCWVjaG8gImNvbW1pdCByZWZzL2hlYWRzL3Rvby1tYW55LXJlZnMtJGkiICYmCisJCWVjaG8gImNvbW1pdHRlciBnaXQgPGdpdEBleGFtcGxlLmNvbT4gJGkgKzAwMDAiICYmCisJCWVjaG8gImRhdGEgMCIgJiYKKwkJZWNobyAiTSA2NDQgaW5saW5lIGJsYS50eHQiICYmCisJCWVjaG8gImRhdGEgNCIgJiYKKwkJZWNobyAiYmxhIgorCWRvbmUgfCBnaXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYmlnIiBmYXN0LWltcG9ydCAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgR0lUX1RSQUNFX0NVUkw9IiQocHdkKS9sb2ciIGdpdCBcCisJCS1jIHByb3RvY29sLnZlcnNpb249MiAtYyBodHRwLnBvc3RidWZmZXI9NjU1MzYgXAorCQljbG9uZSAiJEhUVFBEX1VSTC9zbWFydC9iaWciIGJpZ19jaGlsZCAmJgorCisJIyBDbGllbnQgcmVxdWVzdGVkIHRvIHVzZSBwcm90b2NvbCB2MgorCWdyZXAgIkdpdC1Qcm90b2NvbDogdmVyc2lvbj0yIiBsb2cgJiYKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjIKKwlncmVwICJnaXQ8IHZlcnNpb24gMiIgbG9nICYmCisJIyBWZXJpZnkgdGhhdCB0aGUgY2h1bmtlZCBlbmNvZGluZyBzZW5kaW5nIGNvZGVwYXRoIGlzIGV4ZXJjaXNlZAorCWdyZXAgIlNlbmQgaGVhZGVyOiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggaHR0cDovLyB1c2luZyBwcm90b2NvbCB2MicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgorCisJdGVzdF9jb21taXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIHR3byAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGh0dHBfY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJZmV0Y2ggJiYKKworCWdpdCAtQyBodHRwX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyBvcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwlnaXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYyCisJZ3JlcCAiZ2l0PCB2ZXJzaW9uIDIiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIGh0dHA6Ly8gYnkgaGFzaCB3aXRob3V0IHRhZyBmb2xsb3dpbmcgd2l0aCBwcm90b2NvbCB2MiBkb2VzIG5vdCBsaXN0IHJlZnMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCXRlc3RfY29tbWl0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiB0d29fYSAmJgorCWdpdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgcmV2LXBhcnNlIHR3b19hID50d29fYV9oYXNoICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLUMgaHR0cF9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlmZXRjaCAtLW5vLXRhZ3Mgb3JpZ2luICQoY2F0IHR3b19hX2hhc2gpICYmCisKKwlncmVwICJmZXRjaDwgdmVyc2lvbiAyIiBsb2cgJiYKKwkhIGdyZXAgImZldGNoPiBjb21tYW5kPWxzLXJlZnMiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmcm9tIG5hbWVzcGFjZWQgcmVwbyByZXNwZWN0cyBuYW1lc3BhY2VzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwlnaXQgaW5pdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9uc3JlcG8iICYmCisJdGVzdF9jb21taXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvbnNyZXBvIiBvbmUgJiYKKwl0ZXN0X2NvbW1pdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9uc3JlcG8iIHR3byAmJgorCWdpdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9uc3JlcG8iIFwKKwkJdXBkYXRlLXJlZiByZWZzL25hbWVzcGFjZXMvbnMvcmVmcy9oZWFkcy9tYXN0ZXIgb25lICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLUMgaHR0cF9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlmZXRjaCAiJEhUVFBEX1VSTC9zbWFydF9uYW1lc3BhY2UvbnNyZXBvIiBcCisJCXJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvdGhlaXJzICYmCisKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjIKKwlncmVwICJmZXRjaDwgdmVyc2lvbiAyIiBsb2cgJiYKKworCWdpdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9uc3JlcG8iIHJldi1wYXJzZSBvbmUgPmV4cGVjdCAmJgorCWdpdCAtQyBodHRwX2NoaWxkIHJldi1wYXJzZSB0aGVpcnMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtcmVtb3RlIHdpdGggdjIgaHR0cCBzZW5kcyBvbmx5IG9uZSBQT1NUJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwlnaXQgbHMtcmVtb3RlICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiA+ZXhwZWN0ICYmCisJR0lUX1RSQUNFX0NVUkw9IiQocHdkKS9sb2ciIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlscy1yZW1vdGUgIiRIVFRQRF9VUkwvc21hcnQvaHR0cF9wYXJlbnQiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlncmVwICJTZW5kIGhlYWRlcjogUE9TVCIgbG9nID5wb3N0cyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgcG9zdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGh0dHA6Ly8gYW5kIGEgY29uZmlnIG9mIHYyIGRvZXMgbm90IHJlcXVlc3QgdjInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKwkjIFRpbGwgdjIgZm9yIHB1c2ggaXMgZGVzaWduZWQsIG1ha2Ugc3VyZSB0aGF0IGlmIGEgY2xpZW50IGhhcworCSMgcHJvdG9jb2wudmVyc2lvbiBjb25maWd1cmVkIHRvIHVzZSB2MiwgdGhhdCB0aGUgY2xpZW50IGluc3RlYWQgZmFsbHMKKwkjIGJhY2sgYW5kIHVzZXMgdjAuCisKKwl0ZXN0X2NvbW1pdCAtQyBodHRwX2NoaWxkIHRocmVlICYmCisKKwkjIFB1c2ggdG8gYW5vdGhlciBicmFuY2gsIGFzIHRoZSB0YXJnZXQgcmVwb3NpdG9yeSBoYXMgdGhlCisJIyBtYXN0ZXIgYnJhbmNoIGNoZWNrZWQgb3V0IGFuZCB3ZSBjYW5ub3QgcHVzaCBpbnRvIGl0LgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtQyBodHRwX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCXB1c2ggb3JpZ2luIEhFQUQ6Y2xpZW50X2JyYW5jaCAmJgorCisJZ2l0IC1DIGh0dHBfY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlnaXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIGxvZyAtMSAtLWZvcm1hdD0lcyBjbGllbnRfYnJhbmNoID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIENsaWVudCBkaWQgbm90IHJlcXVlc3QgdG8gdXNlIHByb3RvY29sIHYyCisJISBncmVwICJHaXQtUHJvdG9jb2w6IHZlcnNpb249MiIgbG9nICYmCisJIyBTZXJ2ZXIgZGlkIG5vdCByZXNwb25kIHVzaW5nIHByb3RvY29sIHYyCisJISBncmVwICJnaXQ8IHZlcnNpb24gMiIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doZW4gc2VydmVyIHNlbmRzICJyZWFkeSIsIGV4cGVjdCBERUxJTScgJworCXJtIC1yZiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgaHR0cF9jaGlsZCAmJgorCisJZ2l0IGluaXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiICYmCisJdGVzdF9jb21taXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIG9uZSAmJgorCisJZ2l0IGNsb25lICIkSFRUUERfVVJML3NtYXJ0L2h0dHBfcGFyZW50IiBodHRwX2NoaWxkICYmCisKKwl0ZXN0X2NvbW1pdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgdHdvICYmCisKKwkjIEFmdGVyICJyZWFkeSIgaW4gdGhlIGFja25vd2xlZGdtZW50cyBzZWN0aW9uLCBwcmV0ZW5kIHRoYXQgYSBGTFVTSAorCSMgKDAwMDApIHdhcyBzZW50IGluc3RlYWQgb2YgYSBERUxJTSAoMDAwMSkuCisJcHJpbnRmICJcJHJlYWR5ID0gMSBpZiAvcmVhZHkvOyBcJHJlYWR5ICYmIHMvMDAwMS8wMDAwLyIgXAorCQk+IiRIVFRQRF9ST09UX1BBVEgvb25lLXRpbWUtcGVybCIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBodHRwX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWZldGNoICIkSFRUUERfVVJML29uZV90aW1lX3BlcmwvaHR0cF9wYXJlbnQiIDI+IGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImV4cGVjdGVkIHBhY2tmaWxlIHRvIGJlIHNlbnQgYWZ0ZXIgLnJlYWR5LiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doZW4gc2VydmVyIGRvZXMgbm90IHNlbmQgInJlYWR5IiwgZXhwZWN0IEZMVVNIJyAnCisJcm0gLXJmICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiBodHRwX2NoaWxkIGxvZyAmJgorCisJZ2l0IGluaXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiICYmCisJdGVzdF9jb21taXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIG9uZSAmJgorCisJZ2l0IGNsb25lICIkSFRUUERfVVJML3NtYXJ0L2h0dHBfcGFyZW50IiBodHRwX2NoaWxkICYmCisKKwl0ZXN0X2NvbW1pdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgdHdvICYmCisKKwkjIENyZWF0ZSBtYW55IGNvbW1pdHMgdG8gZXh0ZW5kIHRoZSBuZWdvdGlhdGlvbiBwaGFzZSBhY3Jvc3MgbXVsdGlwbGUKKwkjIHJlcXVlc3RzLCBzbyB0aGF0IHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc2VuZCAicmVhZHkiIGluIHRoZSBmaXJzdAorCSMgcmVxdWVzdC4KKwl0ZXN0X2NvbW1pdF9idWxrIC1DIGh0dHBfY2hpbGQgLS1pZD1jIDMyICYmCisKKwkjIEFmdGVyIHRoZSBhY2tub3dsZWRnbWVudHMgc2VjdGlvbiwgcHJldGVuZCB0aGF0IGEgREVMSU0KKwkjICgwMDAxKSB3YXMgc2VudCBpbnN0ZWFkIG9mIGEgRkxVU0ggKDAwMDApLgorCXByaW50ZiAiXCRhY2sgPSAxIGlmIC9hY2tub3dsZWRnbWVudHMvOyBcJGFjayAmJiBzLzAwMDAvMDAwMS8iIFwKKwkJPiIkSFRUUERfUk9PVF9QQVRIL29uZS10aW1lLXBlcmwiICYmCisKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGh0dHBfY2hpbGQgXAorCQktYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlmZXRjaCAiJEhUVFBEX1VSTC9vbmVfdGltZV9wZXJsL2h0dHBfcGFyZW50IiAyPiBlcnIgJiYKKwlncmVwICJmZXRjaDwgLiphY2tub3dsZWRnbWVudHMiIGxvZyAmJgorCSEgZ3JlcCAiZmV0Y2g8IC4qcmVhZHkiIGxvZyAmJgorCXRlc3RfaTE4bmdyZXAgImV4cGVjdGVkIG5vIG90aGVyIHNlY3Rpb25zIHRvIGJlIHNlbnQgYWZ0ZXIgbm8gLnJlYWR5LiIgZXJyCisnCisKKyMgRE8gTk9UIGFkZCBub24taHR0cGQtc3BlY2lmaWMgdGVzdHMgaGVyZSwgYmVjYXVzZSB0aGUgbGFzdCBwYXJ0IG9mIHRoaXMKKyMgdGVzdCBzY3JpcHQgaXMgb25seSBleGVjdXRlZCB3aGVuIGh0dHBkIGlzIGF2YWlsYWJsZSBhbmQgZW5hYmxlZC4KKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NzAzLXVwbG9hZC1wYWNrLXJlZi1pbi13YW50LnNoIGIvdC90NTcwMy11cGxvYWQtcGFjay1yZWYtaW4td2FudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMzQ0NjBmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwMy11cGxvYWQtcGFjay1yZWYtaW4td2FudC5zaApAQCAtMCwwICsxLDM4OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3VwbG9hZC1wYWNrIHJlZi1pbi13YW50JworCisuIC4vdGVzdC1saWIuc2gKKworZ2V0X2FjdHVhbF9yZWZzICgpIHsKKwlzZWQgLW4gLWUgJy93YW50ZWQtcmVmcy8sLzAwMDEveworCQkvd2FudGVkLXJlZnMvZAorCQkvMDAwMS9kCisJCXAKKwkJfScgPG91dCB8IHRlc3QtdG9vbCBwa3QtbGluZSB1bnBhY2sgPmFjdHVhbF9yZWZzCit9CisKK2dldF9hY3R1YWxfY29tbWl0cyAoKSB7CisJdGVzdC10b29sIHBrdC1saW5lIHVucGFjay1zaWRlYmFuZCA8b3V0ID5vLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayBvLnBhY2sgJiYKKwlnaXQgdmVyaWZ5LXBhY2sgLXYgby5pZHggPm9ianMgJiYKKwlncmVwIGNvbW1pdCBvYmpzIHwgY3V0IC1kIiAiIC1mMSB8IHNvcnQgPmFjdHVhbF9jb21taXRzCit9CisKK2NoZWNrX291dHB1dCAoKSB7CisJZ2V0X2FjdHVhbF9yZWZzICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfcmVmcyBhY3R1YWxfcmVmcyAmJgorCWdldF9hY3R1YWxfY29tbWl0cyAmJgorCXNvcnQgZXhwZWN0ZWRfY29tbWl0cyA+c29ydGVkX2NvbW1pdHMgJiYKKwl0ZXN0X2NtcCBzb3J0ZWRfY29tbWl0cyBhY3R1YWxfY29tbWl0cworfQorCisjIGMoby9mb28pIGQoby9iYXIpCisjICAgICAgICBcIC8KKyMgICAgICAgICBiICAgZShiYXopICBmKG1hc3RlcikKKyMgICAgICAgICAgXF9fICB8ICBfXy8KKyMgICAgICAgICAgICAgXCB8IC8KKyMgICAgICAgICAgICAgICBhCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5JyAnCisJdGVzdF9vaWRfaW5pdCAmJgorCXRlc3RfY29tbWl0IGEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgby9mb28gJiYKKwl0ZXN0X2NvbW1pdCBiICYmCisJdGVzdF9jb21taXQgYyAmJgorCWdpdCBjaGVja291dCAtYiBvL2JhciBiICYmCisJdGVzdF9jb21taXQgZCAmJgorCWdpdCBjaGVja291dCAtYiBiYXogYSAmJgorCXRlc3RfY29tbWl0IGUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgY29udHJvbHMgcmVmLWluLXdhbnQgYWR2ZXJ0aXNlbWVudCcgJworCXRlc3QtdG9vbCBzZXJ2ZS12MiAtLWFkdmVydGlzZS1jYXBhYmlsaXRpZXMgPm91dCAmJgorCSEgZ3JlcCAtYSByZWYtaW4td2FudCBvdXQgJiYKKworCWdpdCBjb25maWcgdXBsb2FkcGFjay5hbGxvd1JlZkluV2FudCBmYWxzZSAmJgorCXRlc3QtdG9vbCBzZXJ2ZS12MiAtLWFkdmVydGlzZS1jYXBhYmlsaXRpZXMgPm91dCAmJgorCSEgZ3JlcCAtYSByZWYtaW4td2FudCBvdXQgJiYKKworCWdpdCBjb25maWcgdXBsb2FkcGFjay5hbGxvd1JlZkluV2FudCB0cnVlICYmCisJdGVzdC10b29sIHNlcnZlLXYyIC0tYWR2ZXJ0aXNlLWNhcGFiaWxpdGllcyA+b3V0ICYmCisJZ3JlcCAtYSByZWYtaW4td2FudCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCB3YW50LXJlZiBsaW5lJyAnCisJdGVzdC10b29sIHBrdC1saW5lIHBhY2sgPmluIDw8LUVPRiAmJgorCWNvbW1hbmQ9ZmV0Y2gKKwkwMDAxCisJbm8tcHJvZ3Jlc3MKKwl3YW50LXJlZiByZWZzL2hlYWRzL25vbi1leGlzdGVudAorCWRvbmUKKwkwMDAwCisJRU9GCisKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgc2VydmUtdjIgLS1zdGF0ZWxlc3MtcnBjIDI+b3V0IDxpbiAmJgorCWdyZXAgInVua25vd24gcmVmIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgd2FudC1yZWYnICcKKwlvaWQ9JChnaXQgcmV2LXBhcnNlIGYpICYmCisJY2F0ID5leHBlY3RlZF9yZWZzIDw8LUVPRiAmJgorCSRvaWQgcmVmcy9oZWFkcy9tYXN0ZXIKKwlFT0YKKwlnaXQgcmV2LXBhcnNlIGYgPmV4cGVjdGVkX2NvbW1pdHMgJiYKKworCW9pZD0kKGdpdCByZXYtcGFyc2UgYSkgJiYKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJY29tbWFuZD1mZXRjaAorCTAwMDEKKwluby1wcm9ncmVzcworCXdhbnQtcmVmIHJlZnMvaGVhZHMvbWFzdGVyCisJaGF2ZSAkb2lkCisJZG9uZQorCTAwMDAKKwlFT0YKKworCXRlc3QtdG9vbCBzZXJ2ZS12MiAtLXN0YXRlbGVzcy1ycGMgPm91dCA8aW4gJiYKKwljaGVja19vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgd2FudC1yZWYgbGluZXMnICcKKwlvaWRfYz0kKGdpdCByZXYtcGFyc2UgYykgJiYKKwlvaWRfZD0kKGdpdCByZXYtcGFyc2UgZCkgJiYKKwljYXQgPmV4cGVjdGVkX3JlZnMgPDwtRU9GICYmCisJJG9pZF9jIHJlZnMvaGVhZHMvby9mb28KKwkkb2lkX2QgcmVmcy9oZWFkcy9vL2JhcgorCUVPRgorCWdpdCByZXYtcGFyc2UgYyBkID5leHBlY3RlZF9jb21taXRzICYmCisKKwlvaWQ9JChnaXQgcmV2LXBhcnNlIGIpICYmCisJdGVzdC10b29sIHBrdC1saW5lIHBhY2sgPmluIDw8LUVPRiAmJgorCWNvbW1hbmQ9ZmV0Y2gKKwkwMDAxCisJbm8tcHJvZ3Jlc3MKKwl3YW50LXJlZiByZWZzL2hlYWRzL28vZm9vCisJd2FudC1yZWYgcmVmcy9oZWFkcy9vL2JhcgorCWhhdmUgJG9pZAorCWRvbmUKKwkwMDAwCisJRU9GCisKKwl0ZXN0LXRvb2wgc2VydmUtdjIgLS1zdGF0ZWxlc3MtcnBjID5vdXQgPGluICYmCisJY2hlY2tfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21peCB3YW50IGFuZCB3YW50LXJlZicgJworCW9pZD0kKGdpdCByZXYtcGFyc2UgZikgJiYKKwljYXQgPmV4cGVjdGVkX3JlZnMgPDwtRU9GICYmCisJJG9pZCByZWZzL2hlYWRzL21hc3RlcgorCUVPRgorCWdpdCByZXYtcGFyc2UgZSBmID5leHBlY3RlZF9jb21taXRzICYmCisKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJY29tbWFuZD1mZXRjaAorCTAwMDEKKwluby1wcm9ncmVzcworCXdhbnQtcmVmIHJlZnMvaGVhZHMvbWFzdGVyCisJd2FudCAkKGdpdCByZXYtcGFyc2UgZSkKKwloYXZlICQoZ2l0IHJldi1wYXJzZSBhKQorCWRvbmUKKwkwMDAwCisJRU9GCisKKwl0ZXN0LXRvb2wgc2VydmUtdjIgLS1zdGF0ZWxlc3MtcnBjID5vdXQgPGluICYmCisJY2hlY2tfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dhbnQtcmVmIHdpdGggcmVmIHdlIGFscmVhZHkgaGF2ZSBjb21taXQgZm9yJyAnCisJb2lkPSQoZ2l0IHJldi1wYXJzZSBjKSAmJgorCWNhdCA+ZXhwZWN0ZWRfcmVmcyA8PC1FT0YgJiYKKwkkb2lkIHJlZnMvaGVhZHMvby9mb28KKwlFT0YKKwk+ZXhwZWN0ZWRfY29tbWl0cyAmJgorCisJb2lkPSQoZ2l0IHJldi1wYXJzZSBjKSAmJgorCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKKwljb21tYW5kPWZldGNoCisJMDAwMQorCW5vLXByb2dyZXNzCisJd2FudC1yZWYgcmVmcy9oZWFkcy9vL2ZvbworCWhhdmUgJG9pZAorCWRvbmUKKwkwMDAwCisJRU9GCisKKwl0ZXN0LXRvb2wgc2VydmUtdjIgLS1zdGF0ZWxlc3MtcnBjID5vdXQgPGluICYmCisJY2hlY2tfb3V0cHV0CisnCisKK1JFUE89IiQocHdkKS9yZXBvIgorTE9DQUxfUFJJU1RJTkU9IiQocHdkKS9sb2NhbF9wcmlzdGluZSIKKworIyAkUkVQTworIyBjKG8vZm9vKSBkKG8vYmFyKQorIyAgICAgICAgXCAvCisjICAgICAgICAgYiAgIGUoYmF6KSAgZihtYXN0ZXIpCisjICAgICAgICAgIFxfXyAgfCAgX18vCisjICAgICAgICAgICAgIFwgfCAvCisjICAgICAgICAgICAgICAgYQorIworIyAkTE9DQUxfUFJJU1RJTkUKKyMJCXMzMihzaWRlKQorIwkJfAorIwkJLgorIwkJLgorIwkJfAorIwkJYShtYXN0ZXIpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvcyBmb3IgZmV0Y2hpbmcgd2l0aCByZWYtaW4td2FudCB0ZXN0cycgJworCSgKKwkJZ2l0IGluaXQgIiRSRVBPIiAmJgorCQljZCAiJFJFUE8iICYmCisJCXRlc3RfY29tbWl0IGEgJiYKKworCQkjIExvY2FsIHJlcG8gd2l0aCBtYW55IGNvbW1pdHMgKHNvIHRoYXQgbmVnb3RpYXRpb24gd2lsbCB0YWtlCisJCSMgbW9yZSB0aGFuIDEgcmVxdWVzdC9yZXNwb25zZSBwYWlyKQorCQlybSAtcmYgIiRMT0NBTF9QUklTVElORSIgJiYKKwkJZ2l0IGNsb25lICJmaWxlOi8vJFJFUE8iICIkTE9DQUxfUFJJU1RJTkUiICYmCisJCWNkICIkTE9DQUxfUFJJU1RJTkUiICYmCisJCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJCXRlc3RfY29tbWl0X2J1bGsgLS1pZD1zIDMzICYmCisKKwkJIyBBZGQgbm92ZWwgY29tbWl0cyB0byB1cHN0cmVhbQorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWNkICIkUkVQTyIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIG8vZm9vICYmCisJCXRlc3RfY29tbWl0IGIgJiYKKwkJdGVzdF9jb21taXQgYyAmJgorCQlnaXQgY2hlY2tvdXQgLWIgby9iYXIgYiAmJgorCQl0ZXN0X2NvbW1pdCBkICYmCisJCWdpdCBjaGVja291dCAtYiBiYXogYSAmJgorCQl0ZXN0X2NvbW1pdCBlICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJdGVzdF9jb21taXQgZgorCSkgJiYKKwlnaXQgLUMgIiRSRVBPIiBjb25maWcgdXBsb2FkcGFjay5hbGxvd1JlZkluV2FudCB0cnVlICYmCisJZ2l0IC1DICIkTE9DQUxfUFJJU1RJTkUiIGNvbmZpZyBwcm90b2NvbC52ZXJzaW9uIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2hpbmcgd2l0aCBleGFjdCBPSUQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCXJtIC1yZiBsb2NhbCAmJgorCWNwIC1yICIkTE9DQUxfUFJJU1RJTkUiIGxvY2FsICYmCisJb2lkPSQoZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlIGQpICYmCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGxvY2FsIGZldGNoIG9yaWdpbiBcCisJCSIkb2lkIjpyZWZzL2hlYWRzL2FjdHVhbCAmJgorCisJZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlICJkIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgLUMgbG9jYWwgcmV2LXBhcnNlIHJlZnMvaGVhZHMvYWN0dWFsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlncmVwICJ3YW50ICRvaWQiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyBtdWx0aXBsZSByZWZzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwlybSAtcmYgbG9jYWwgJiYKKwljcCAtciAiJExPQ0FMX1BSSVNUSU5FIiBsb2NhbCAmJgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtQyBsb2NhbCBmZXRjaCBvcmlnaW4gbWFzdGVyIGJheiAmJgorCisJZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlICJtYXN0ZXIiICJiYXoiID5leHBlY3RlZCAmJgorCWdpdCAtQyBsb2NhbCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgcmVmcy9yZW1vdGVzL29yaWdpbi9iYXogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdyZXAgIndhbnQtcmVmIHJlZnMvaGVhZHMvbWFzdGVyIiBsb2cgJiYKKwlncmVwICJ3YW50LXJlZiByZWZzL2hlYWRzL2JheiIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIHJlZiBhbmQgZXhhY3QgT0lEJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwlybSAtcmYgbG9jYWwgJiYKKwljcCAtciAiJExPQ0FMX1BSSVNUSU5FIiBsb2NhbCAmJgorCW9pZD0kKGdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSBiKSAmJgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtQyBsb2NhbCBmZXRjaCBvcmlnaW4gXAorCQltYXN0ZXIgIiRvaWQiOnJlZnMvaGVhZHMvYWN0dWFsICYmCisKKwlnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgIm1hc3RlciIgImIiID5leHBlY3RlZCAmJgorCWdpdCAtQyBsb2NhbCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgcmVmcy9oZWFkcy9hY3R1YWwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdyZXAgIndhbnQgJG9pZCIgbG9nICYmCisJZ3JlcCAid2FudC1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyB3aXRoIHdpbGRjYXJkIHRoYXQgZG9lcyBub3QgbWF0Y2ggYW55IHJlZnMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCXJtIC1yZiBsb2NhbCAmJgorCWNwIC1yICIkTE9DQUxfUFJJU1RJTkUiIGxvY2FsICYmCisJZ2l0IC1DIGxvY2FsIGZldGNoIG9yaWdpbiByZWZzL2hlYWRzL25vbmUqOnJlZnMvaGVhZHMvKiA+b3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyB3aXRoIHdpbGRjYXJkIHRoYXQgbWF0Y2hlcyBtdWx0aXBsZSByZWZzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwlybSAtcmYgbG9jYWwgJiYKKwljcCAtciAiJExPQ0FMX1BSSVNUSU5FIiBsb2NhbCAmJgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtQyBsb2NhbCBmZXRjaCBvcmlnaW4gcmVmcy9oZWFkcy9vKjpyZWZzL2hlYWRzL28qICYmCisKKwlnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgIm8vZm9vIiAiby9iYXIiID5leHBlY3RlZCAmJgorCWdpdCAtQyBsb2NhbCByZXYtcGFyc2UgIm8vZm9vIiAiby9iYXIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlncmVwICJ3YW50LXJlZiByZWZzL2hlYWRzL28vZm9vIiBsb2cgJiYKKwlncmVwICJ3YW50LXJlZiByZWZzL2hlYWRzL28vYmFyIiBsb2cKKycKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK1JFUE89IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwbyIKK0xPQ0FMX1BSSVNUSU5FPSIkKHB3ZCkvbG9jYWxfcHJpc3RpbmUiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zIGZvciBjaGFuZ2Utd2hpbGUtbmVnb3RpYXRpbmcgdGVzdCcgJworCSgKKwkJZ2l0IGluaXQgIiRSRVBPIiAmJgorCQljZCAiJFJFUE8iICYmCisJCT4uZ2l0L2dpdC1kYWVtb24tZXhwb3J0LW9rICYmCisJCXRlc3RfY29tbWl0IG0xICYmCisJCWdpdCB0YWcgLWQgbTEgJiYKKworCQkjIExvY2FsIHJlcG8gd2l0aCBtYW55IGNvbW1pdHMgKHNvIHRoYXQgbmVnb3RpYXRpb24gd2lsbCB0YWtlCisJCSMgbW9yZSB0aGFuIDEgcmVxdWVzdC9yZXNwb25zZSBwYWlyKQorCQlybSAtcmYgIiRMT0NBTF9QUklTVElORSIgJiYKKwkJZ2l0IGNsb25lICJodHRwOi8vMTI3LjAuMC4xOiRMSUJfSFRUUERfUE9SVC9zbWFydC9yZXBvIiAiJExPQ0FMX1BSSVNUSU5FIiAmJgorCQljZCAiJExPQ0FMX1BSSVNUSU5FIiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCQl0ZXN0X2NvbW1pdF9idWxrIC0taWQ9cyAzMyAmJgorCisJCSMgQWRkIG5vdmVsIGNvbW1pdHMgdG8gdXBzdHJlYW0KKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQljZCAiJFJFUE8iICYmCisJCXRlc3RfY29tbWl0IG0yICYmCisJCXRlc3RfY29tbWl0IG0zICYmCisJCWdpdCB0YWcgLWQgbTIgbTMKKwkpICYmCisJZ2l0IC1DICIkTE9DQUxfUFJJU1RJTkUiIHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAiaHR0cDovLzEyNy4wLjAuMTokTElCX0hUVFBEX1BPUlQvb25lX3RpbWVfcGVybC9yZXBvIiAmJgorCWdpdCAtQyAiJExPQ0FMX1BSSVNUSU5FIiBjb25maWcgcHJvdG9jb2wudmVyc2lvbiAyCisnCisKK2luY29uc2lzdGVuY3kgKCkgeworCSMgU2ltdWxhdGUgdGhhdCB0aGUgc2VydmVyIGluaXRpYWxseSByZXBvcnRzICQyIGFzIHRoZSByZWYKKwkjIGNvcnJlc3BvbmRpbmcgdG8gJDEsIGFuZCBhZnRlciB0aGF0LCAkMSBhcyB0aGUgcmVmIGNvcnJlc3BvbmRpbmcgdG8KKwkjICQxLiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSByZWFsLWxpZmUgc2l0dWF0aW9uIHdoZXJlIHRoZSBzZXJ2ZXIncworCSMgcmVwb3NpdG9yeSBhcHBlYXJzIHRvIGNoYW5nZSBkdXJpbmcgbmVnb3RpYXRpb24sIGZvciBleGFtcGxlLCB3aGVuCisJIyBkaWZmZXJlbnQgc2VydmVycyBpbiBhIGxvYWQtYmFsYW5jaW5nIGFycmFuZ2VtZW50IHNlcnZlIChzdGF0ZWxlc3MpCisJIyBSUENzIGR1cmluZyBhIHNpbmdsZSBuZWdvdGlhdGlvbi4KKwlvaWQxPSQoZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlICQxKSAmJgorCW9pZDI9JChnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgJDIpICYmCisJZWNobyAicy8kb2lkMS8kb2lkMi8iID4iJEhUVFBEX1JPT1RfUEFUSC9vbmUtdGltZS1wZXJsIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXJ2ZXIgaXMgaW5pdGlhbGx5IGFoZWFkIC0gbm8gcmVmIGluIHdhbnQnICcKKwlnaXQgLUMgIiRSRVBPIiBjb25maWcgdXBsb2FkcGFjay5hbGxvd1JlZkluV2FudCBmYWxzZSAmJgorCXJtIC1yZiBsb2NhbCAmJgorCWNwIC1yICIkTE9DQUxfUFJJU1RJTkUiIGxvY2FsICYmCisJaW5jb25zaXN0ZW5jeSBtYXN0ZXIgJCh0ZXN0X29pZCBudW1lcmljKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBsb2NhbCBmZXRjaCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImZhdGFsOiByZW1vdGUgZXJyb3I6IHVwbG9hZC1wYWNrOiBub3Qgb3VyIHJlZiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlcnZlciBpcyBpbml0aWFsbHkgYWhlYWQgLSByZWYgaW4gd2FudCcgJworCWdpdCAtQyAiJFJFUE8iIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93UmVmSW5XYW50IHRydWUgJiYKKwlybSAtcmYgbG9jYWwgJiYKKwljcCAtciAiJExPQ0FMX1BSSVNUSU5FIiBsb2NhbCAmJgorCWluY29uc2lzdGVuY3kgbWFzdGVyICQodGVzdF9vaWQgbnVtZXJpYykgJiYKKwlnaXQgLUMgbG9jYWwgZmV0Y2ggJiYKKworCWdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIgPmV4cGVjdGVkICYmCisJZ2l0IC1DIGxvY2FsIHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlcnZlciBpcyBpbml0aWFsbHkgYmVoaW5kIC0gbm8gcmVmIGluIHdhbnQnICcKKwlnaXQgLUMgIiRSRVBPIiBjb25maWcgdXBsb2FkcGFjay5hbGxvd1JlZkluV2FudCBmYWxzZSAmJgorCXJtIC1yZiBsb2NhbCAmJgorCWNwIC1yICIkTE9DQUxfUFJJU1RJTkUiIGxvY2FsICYmCisJaW5jb25zaXN0ZW5jeSBtYXN0ZXIgIm1hc3Rlcl4iICYmCisJZ2l0IC1DIGxvY2FsIGZldGNoICYmCisKKwlnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgLS12ZXJpZnkgIm1hc3Rlcl4iID5leHBlY3RlZCAmJgorCWdpdCAtQyBsb2NhbCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXJ2ZXIgaXMgaW5pdGlhbGx5IGJlaGluZCAtIHJlZiBpbiB3YW50JyAnCisJZ2l0IC1DICIkUkVQTyIgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dSZWZJbldhbnQgdHJ1ZSAmJgorCXJtIC1yZiBsb2NhbCAmJgorCWNwIC1yICIkTE9DQUxfUFJJU1RJTkUiIGxvY2FsICYmCisJaW5jb25zaXN0ZW5jeSBtYXN0ZXIgIm1hc3Rlcl4iICYmCisJZ2l0IC1DIGxvY2FsIGZldGNoICYmCisKKwlnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgLS12ZXJpZnkgIm1hc3RlciIgPmV4cGVjdGVkICYmCisJZ2l0IC1DIGxvY2FsIHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlcnZlciBsb3NlcyBhIHJlZiAtIHJlZiBpbiB3YW50JyAnCisJZ2l0IC1DICIkUkVQTyIgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dSZWZJbldhbnQgdHJ1ZSAmJgorCXJtIC1yZiBsb2NhbCAmJgorCWNwIC1yICIkTE9DQUxfUFJJU1RJTkUiIGxvY2FsICYmCisJZWNobyAicy9tYXN0ZXIvcmFzdGVyLyIgPiIkSFRUUERfUk9PVF9QQVRIL29uZS10aW1lLXBlcmwiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGxvY2FsIGZldGNoIDI+ZXJyICYmCisKKwl0ZXN0X2kxOG5ncmVwICJmYXRhbDogcmVtb3RlIGVycm9yOiB1bmtub3duIHJlZiByZWZzL2hlYWRzL3Jhc3RlciIgZXJyCisnCisKKyMgRE8gTk9UIGFkZCBub24taHR0cGQtc3BlY2lmaWMgdGVzdHMgaGVyZSwgYmVjYXVzZSB0aGUgbGFzdCBwYXJ0IG9mIHRoaXMKKyMgdGVzdCBzY3JpcHQgaXMgb25seSBleGVjdXRlZCB3aGVuIGh0dHBkIGlzIGF2YWlsYWJsZSBhbmQgZW5hYmxlZC4KKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NzA0LXByb3RvY29sLXZpb2xhdGlvbnMuc2ggYi90L3Q1NzA0LXByb3RvY29sLXZpb2xhdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTUwY2ZiMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU3MDQtcHJvdG9jb2wtdmlvbGF0aW9ucy5zaApAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZXNwb25zZXMgdG8gdmlvbGF0aW9ucyBvZiB0aGUgbmV0d29yayBwcm90b2NvbC4gSW4gbW9zdAorb2YgdGhlc2UgY2FzZXMgaXQgd2lsbCBnZW5lcmFsbHkgYmUgYWNjZXB0YWJsZSBmb3Igb25lIHNpZGUgdG8gYnJlYWsgb2ZmCitjb21tdW5pY2F0aW9ucyBpZiB0aGUgb3RoZXIgc2lkZSBzYXlzIHNvbWV0aGluZyB1bmV4cGVjdGVkLiBXZSBhcmUgbW9zdGx5CittYWtpbmcgc3VyZSB0aGF0IHdlIGRvIG5vdCBzZWdmYXVsdCBvciBvdGhlcndpc2UgYmVoYXZlIGJhZGx5LicKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRyYSBkZWxpbSBwYWNrZXQgaW4gdjIgbHMtcmVmcyBhcmdzJyAnCisJeworCQlwYWNrZXRpemUgY29tbWFuZD1scy1yZWZzICYmCisJCXByaW50ZiAwMDAxICYmCisJCSMgcHJvdG9jb2wgZXhwZWN0cyAwMDAwIGZsdXNoIGhlcmUKKwkJcHJpbnRmIDAwMDEKKwl9ID5pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfUFJPVE9DT0w9dmVyc2lvbj0yIFwKKwkJZ2l0IHVwbG9hZC1wYWNrIC4gPGlucHV0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgbHMtcmVmcyBhcmd1bWVudHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRyYSBkZWxpbSBwYWNrZXQgaW4gdjIgZmV0Y2ggYXJncycgJworCXsKKwkJcGFja2V0aXplIGNvbW1hbmQ9ZmV0Y2ggJiYKKwkJcHJpbnRmIDAwMDEgJiYKKwkJIyBwcm90b2NvbCBleHBlY3RzIDAwMDAgZmx1c2ggaGVyZQorCQlwcmludGYgMDAwMQorCX0gPmlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9QUk9UT0NPTD12ZXJzaW9uPTIgXAorCQlnaXQgdXBsb2FkLXBhY2sgLiA8aW5wdXQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJleHBlY3RlZCBmbHVzaCBhZnRlciBmZXRjaCBhcmd1bWVudHMiIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU4MDEtcmVtb3RlLWhlbHBlcnMuc2ggYi90L3Q1ODAxLXJlbW90ZS1oZWxwZXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmMDRiNmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1ODAxLXJlbW90ZS1oZWxwZXJzLnNoCkBAIC0wLDAgKzEsMzIxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIFN2ZXJyZSBSYWJiZWxpZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZW1vdGUtaGVscGVyIGltcG9ydCBhbmQgZXhwb3J0IGNvbW1hbmRzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdwZy5zaAorCitQQVRIPSIkVEVTVF9ESVJFQ1RPUlkvdDU4MDE6JFBBVEgiCisKK2NvbXBhcmVfcmVmcygpIHsKKwlmYWlsPSAmJgorCWlmIHRlc3QgIngkMSIgPSAneCEnCisJdGhlbgorCQlmYWlsPSchJyAmJgorCQlzaGlmdAorCWZpICYmCisJZ2l0IC0tZ2l0LWRpcj0iJDEvLmdpdCIgcmV2LXBhcnNlIC0tdmVyaWZ5ICQyID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPSIkMy8uZ2l0IiByZXYtcGFyc2UgLS12ZXJpZnkgJDQgPmFjdHVhbCAmJgorCWV2YWwgJGZhaWwgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5JyAnCisJZ2l0IGluaXQgc2VydmVyICYmCisJKGNkIHNlcnZlciAmJgorCSBlY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLW0gb25lKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIGZyb20gbG9jYWwgcmVwbycgJworCWdpdCBjbG9uZSAidGVzdGdpdDo6JHtQV0R9L3NlcnZlciIgbG9jYWwgJiYKKwl0ZXN0X2NtcCBzZXJ2ZXIvZmlsZSBsb2NhbC9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBuZXcgY29tbWl0IG9uIHJlbW90ZScgJworCShjZCBzZXJ2ZXIgJiYKKwkgZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tIHR3bykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBmcm9tIGxvY2FsIHJlcG8nICcKKwkoY2QgbG9jYWwgJiYgZ2l0IHB1bGwpICYmCisJdGVzdF9jbXAgc2VydmVyL2ZpbGUgbG9jYWwvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIHRvIGxvY2FsIHJlcG8nICcKKwkoY2QgbG9jYWwgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0aHJlZSAmJgorCWdpdCBwdXNoKSAmJgorCWNvbXBhcmVfcmVmcyBsb2NhbCBIRUFEIHNlcnZlciBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG5ldyBicmFuY2gnICcKKwkoY2Qgc2VydmVyICYmCisJIGdpdCByZXNldCAtLWhhcmQgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIG5ldyAmJgorCSBlY2hvIGNvbnRlbnQgPj5maWxlICYmCisJIGdpdCBjb21taXQgLWEgLW0gZml2ZQorCSkgJiYKKwkoY2QgbG9jYWwgJiYKKwkgZ2l0IGZldGNoIG9yaWdpbiBuZXcKKwkpICYmCisJY29tcGFyZV9yZWZzIHNlcnZlciBIRUFEIGxvY2FsIEZFVENIX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbXVsdGlwbGUgYnJhbmNoZXMnICcKKwkoY2QgbG9jYWwgJiYKKwkgZ2l0IGZldGNoCisJKSAmJgorCWNvbXBhcmVfcmVmcyBzZXJ2ZXIgbWFzdGVyIGxvY2FsIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJY29tcGFyZV9yZWZzIHNlcnZlciBuZXcgbG9jYWwgcmVmcy9yZW1vdGVzL29yaWdpbi9uZXcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aGVuIHJlbW90ZSBoYXMgZXh0cmEgcmVmcycgJworCShjZCBsb2NhbCAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXIgJiYKKwkgZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tIHNpeCAmJgorCSBnaXQgcHVzaAorCSkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwgbWFzdGVyIHNlcnZlciBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBuZXcgYnJhbmNoIGJ5IG5hbWUnICcKKwkoY2QgbG9jYWwgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIG5ldy1uYW1lICAmJgorCSBlY2hvIGNvbnRlbnQgPj5maWxlICYmCisJIGdpdCBjb21taXQgLWEgLW0gc2V2ZW4gJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIG5ldy1uYW1lCisJKSAmJgorCWNvbXBhcmVfcmVmcyBsb2NhbCBIRUFEIHNlcnZlciByZWZzL2hlYWRzL25ldy1uYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbmV3IGJyYW5jaCB3aXRoIG9sZDpuZXcgcmVmc3BlYycgJworCShjZCBsb2NhbCAmJgorCSBnaXQgcHVzaCBvcmlnaW4gbmV3LW5hbWU6bmV3LXJlZnNwZWMKKwkpICYmCisJY29tcGFyZV9yZWZzIGxvY2FsIEhFQUQgc2VydmVyIHJlZnMvaGVhZHMvbmV3LXJlZnNwZWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBuZXcgYnJhbmNoIHdpdGggSEVBRDpuZXcgcmVmc3BlYycgJworCShjZCBsb2NhbCAmJgorCSBnaXQgY2hlY2tvdXQgbmV3LW5hbWUgJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIEhFQUQ6bmV3LXJlZnNwZWMtMgorCSkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwgSEVBRCBzZXJ2ZXIgcmVmcy9oZWFkcy9uZXctcmVmc3BlYy0yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZGVsZXRlIGJyYW5jaCcgJworCShjZCBsb2NhbCAmJgorCSBnaXQgcHVzaCBvcmlnaW4gOm5ldy1uYW1lCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtLWdpdC1kaXI9InNlcnZlci8uZ2l0IiBcCisJIHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL25ldy1uYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmNlZCBwdXNoJyAnCisJKGNkIGxvY2FsICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZvcmNlLXRlc3QgJiYKKwllY2hvIGNvbnRlbnQgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gZWlnaHQgJiYKKwlnaXQgcHVzaCBvcmlnaW4gZm9yY2UtdGVzdCAmJgorCWVjaG8gY29udGVudCA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtLWFtZW5kIC1tIGVpZ2h0LW1vZGlmaWVkICYmCisJZ2l0IHB1c2ggLS1mb3JjZSBvcmlnaW4gZm9yY2UtdGVzdAorCSkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwgcmVmcy9oZWFkcy9mb3JjZS10ZXN0IHNlcnZlciByZWZzL2hlYWRzL2ZvcmNlLXRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyB3aXRob3V0IHJlZnNwZWMnICcKKwlHSVRfUkVNT1RFX1RFU1RHSVRfTk9SRUZTUEVDPTEgXAorCWdpdCBjbG9uZSAidGVzdGdpdDo6JHtQV0R9L3NlcnZlciIgbG9jYWwyIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJ0aGlzIHJlbW90ZSBoZWxwZXIgc2hvdWxkIGltcGxlbWVudCByZWZzcGVjIGNhcGFiaWxpdHkiIGVycm9yICYmCisJY29tcGFyZV9yZWZzIGxvY2FsMiBIRUFEIHNlcnZlciBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgd2l0aG91dCByZWZzcGVjcycgJworCShjZCBsb2NhbDIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJR0lUX1JFTU9URV9URVNUR0lUX05PUkVGU1BFQz0xIGdpdCBwdWxsIDI+Li4vZXJyb3IpICYmCisJdGVzdF9pMThuZ3JlcCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IiBlcnJvciAmJgorCWNvbXBhcmVfcmVmcyBsb2NhbDIgSEVBRCBzZXJ2ZXIgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIHdpdGhvdXQgcmVmc3BlY3MnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIihjZCBsb2NhbDIgJiYgZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4pIiAmJgorCShjZCBsb2NhbDIgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0ZW4gJiYKKwlHSVRfUkVNT1RFX1RFU1RHSVRfTk9SRUZTUEVDPTEgJiYKKwlleHBvcnQgR0lUX1JFTU9URV9URVNUR0lUX05PUkVGU1BFQyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIDI+Li4vZXJyb3IpICYmCisJdGVzdF9pMThuZ3JlcCAicmVtb3RlLWhlbHBlciBkb2Vzbi50IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgd2l0aG91dCBtYXJrcycgJworCShjZCBsb2NhbDIgJiYKKwlHSVRfUkVNT1RFX1RFU1RHSVRfTk9fTUFSS1M9MSBnaXQgcHVsbCkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwyIEhFQUQgc2VydmVyIEhFQUQKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncHVzaGluZyB3aXRob3V0IG1hcmtzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICIoY2QgbG9jYWwyICYmIGdpdCByZXNldCAtLWhhcmQgb3JpZ2luKSIgJiYKKwkoY2QgbG9jYWwyICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdlbHZlICYmCisJR0lUX1JFTU9URV9URVNUR0lUX05PX01BUktTPTEgZ2l0IHB1c2gpICYmCisJY29tcGFyZV9yZWZzIGxvY2FsMiBIRUFEIHNlcnZlciBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggYWxsIHdpdGggZXhpc3Rpbmcgb2JqZWN0JyAnCisJKGNkIGxvY2FsICYmCisJZ2l0IGJyYW5jaCBkdXAyIG1hc3RlciAmJgorCWdpdCBwdXNoIG9yaWdpbiAtLWFsbAorCSkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwgZHVwMiBzZXJ2ZXIgZHVwMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHJlZiB3aXRoIGV4aXN0aW5nIG9iamVjdCcgJworCShjZCBsb2NhbCAmJgorCWdpdCBicmFuY2ggZHVwIG1hc3RlciAmJgorCWdpdCBwdXNoIG9yaWdpbiBkdXAKKwkpICYmCisJY29tcGFyZV9yZWZzIGxvY2FsIGR1cCBzZXJ2ZXIgZHVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdXNoIHNpZ25lZCB0YWcnICcKKwkoY2QgbG9jYWwgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyAtcyAtbSBzaWduZWQtdGFnIHNpZ25lZC10YWcgJiYKKwlnaXQgcHVzaCBvcmlnaW4gc2lnbmVkLXRhZworCSkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwgc2lnbmVkLXRhZ157fSBzZXJ2ZXIgc2lnbmVkLXRhZ157fSAmJgorCWNvbXBhcmVfcmVmcyAhIGxvY2FsIHNpZ25lZC10YWcgc2VydmVyIHNpZ25lZC10YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3B1c2ggc2lnbmVkIHRhZyB3aXRoIHNpZ25lZC10YWdzIGNhcGFiaWxpdHknICcKKwkoY2QgbG9jYWwgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyAtcyAtbSBzaWduZWQtdGFnIHNpZ25lZC10YWctMiAmJgorCUdJVF9SRU1PVEVfVEVTVEdJVF9TSUdORURfVEFHUz0xIGdpdCBwdXNoIG9yaWdpbiBzaWduZWQtdGFnLTIKKwkpICYmCisJY29tcGFyZV9yZWZzIGxvY2FsIHNpZ25lZC10YWctMiBzZXJ2ZXIgc2lnbmVkLXRhZy0yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdXBkYXRlIHJlZnMnICcKKwkoY2QgbG9jYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdXBkYXRlIG1hc3RlciAmJgorCWVjaG8gdXBkYXRlID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdXBkYXRlICYmCisJZ2l0IHB1c2ggb3JpZ2luIHVwZGF0ZSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVtb3Rlcy9vcmlnaW4vdXBkYXRlID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRlc3RnaXQvb3JpZ2luL2hlYWRzL3VwZGF0ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB1cGRhdGUgcmVmcyBkaXNhYmxlZCBieSBuby1wcml2YXRlLXVwZGF0ZScgJworCShjZCBsb2NhbCAmJgorCWVjaG8gbW9yZS11cGRhdGUgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBtb3JlLXVwZGF0ZSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGVzdGdpdC9vcmlnaW4vaGVhZHMvdXBkYXRlID5leHBlY3QgJiYKKwlHSVRfUkVNT1RFX1RFU1RHSVRfTk9fUFJJVkFURV9VUERBVEU9dCBnaXQgcHVzaCBvcmlnaW4gdXBkYXRlICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0ZXN0Z2l0L29yaWdpbi9oZWFkcy91cGRhdGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdXBkYXRlIHJlZnMgZmFpbHVyZScgJworCShjZCBsb2NhbCAmJgorCWdpdCBjaGVja291dCB1cGRhdGUgJiYKKwllY2hvICJ1cGRhdGUgZmFpbCIgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAidXBkYXRlIGZhaWwiICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0ZXN0Z2l0L29yaWdpbi9oZWFkcy91cGRhdGUgPmV4cGVjdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBlbnYgR0lUX1JFTU9URV9URVNUR0lUX0ZBSUxVUkU9Im5vbi1mYXN0IGZvcndhcmQiIFwKKwkJZ2l0IHB1c2ggb3JpZ2luIHVwZGF0ZSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGVzdGdpdC9vcmlnaW4vaGVhZHMvdXBkYXRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCitjbGVhbl9tYXJrICgpIHsKKwljdXQgLWYgMiAtZCAnICcgIiQxIiB8CisJZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgfAorCWdyZXAgY29tbWl0IHwKKwlzb3J0ID4kKGJhc2VuYW1lICIkMSIpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb3BlciBmYWlsdXJlIGNoZWNrcyBmb3IgZmV0Y2hpbmcnICcKKwkoY2QgbG9jYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1JFTU9URV9URVNUR0lUX0ZBSUxVUkU9MSBnaXQgZmV0Y2ggMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgLXEgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1pbXBvcnQiIGVycm9yCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9wZXIgZmFpbHVyZSBjaGVja3MgZm9yIHB1c2hpbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBsb2NhbC9naXQubWFya3MgbG9jYWwvdGVzdGdpdC5tYXJrcyIgJiYKKwkoY2QgbG9jYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY3Jhc2ggbWFzdGVyICYmCisJZWNobyBjcmFzaCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGNyYXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9SRU1PVEVfVEVTVEdJVF9GQUlMVVJFPTEgZ2l0IHB1c2ggLS1hbGwgJiYKKwljbGVhbl9tYXJrICIuZ2l0L3Rlc3RnaXQvb3JpZ2luL2dpdC5tYXJrcyIgJiYKKwljbGVhbl9tYXJrICIuZ2l0L3Rlc3RnaXQvb3JpZ2luL3Rlc3RnaXQubWFya3MiICYmCisJdGVzdF9jbXAgZ2l0Lm1hcmtzIHRlc3RnaXQubWFya3MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWVzc2FnZXMnICcKKwkoY2QgbG9jYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV3X2JyYW5jaCBtYXN0ZXIgJiYKKwllY2hvIG5ldyA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG5ldyAmJgorCWdpdCBwdXNoIG9yaWdpbiBuZXdfYnJhbmNoICYmCisJZ2l0IGZldGNoIG9yaWdpbiAmJgorCWVjaG8gbmV3ID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gbmV3ICYmCisJZ2l0IHB1c2ggb3JpZ2luIG5ld19icmFuY2ggMj4gbXNnICYmCisJISBncmVwICJcW25ldyBicmFuY2hcXSIgbXNnCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBIRUFEJyAnCisJKGNkIHNlcnZlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIG1vcmUgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBtb3JlCisJKSAmJgorCShjZCBsb2NhbCAmJgorCWdpdCBmZXRjaCBvcmlnaW4gSEVBRAorCSkgJiYKKwljb21wYXJlX3JlZnMgc2VydmVyIEhFQUQgbG9jYWwgRkVUQ0hfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB1cmwnICcKKwkoY2Qgc2VydmVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gbW9yZSA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG1vcmUKKwkpICYmCisJKGNkIGxvY2FsICYmCisJZ2l0IGZldGNoICJ0ZXN0Z2l0Ojoke1BXRH0vLi4vc2VydmVyIgorCSkgJiYKKwljb21wYXJlX3JlZnMgc2VydmVyIEhFQUQgbG9jYWwgRkVUQ0hfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB0YWcnICcKKwkoY2Qgc2VydmVyICYmCisJIGdpdCB0YWcgdjEuMAorCSkgJiYKKwkoY2QgbG9jYWwgJiYKKwkgZ2l0IGZldGNoCisJKSAmJgorCWNvbXBhcmVfcmVmcyBsb2NhbCB2MS4wIHNlcnZlciB2MS4wCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTgwMS9naXQtcmVtb3RlLXRlc3RnaXQgYi90L3Q1ODAxL2dpdC1yZW1vdGUtdGVzdGdpdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YjlmMGI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTgwMS9naXQtcmVtb3RlLXRlc3RnaXQKQEAgLTAsMCArMSwxNTEgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMTIgRmVsaXBlIENvbnRyZXJhcworCisjIFRoZSBmaXJzdCBhcmd1bWVudCBjYW4gYmUgYSB1cmwgd2hlbiB0aGUgZmV0Y2gvcHVzaCBjb21tYW5kIHdhcyBhIHVybAorIyBpbnN0ZWFkIG9mIGEgY29uZmlndXJlZCByZW1vdGUuIEluIHRoaXMgY2FzZSwgdXNlIGEgZ2VuZXJpYyBhbGlhcy4KK2lmIHRlc3QgIiQxIiA9ICJ0ZXN0Z2l0OjokMiI7IHRoZW4KKwlhbGlhcz1fCitlbHNlCisJYWxpYXM9JDEKK2ZpCit1cmw9JDIKKworZGlyPSIkR0lUX0RJUi90ZXN0Z2l0LyRhbGlhcyIKKworaF9yZWZzcGVjPSJyZWZzL2hlYWRzLyo6cmVmcy90ZXN0Z2l0LyRhbGlhcy9oZWFkcy8qIgordF9yZWZzcGVjPSJyZWZzL3RhZ3MvKjpyZWZzL3Rlc3RnaXQvJGFsaWFzL3RhZ3MvKiIKKworaWYgdGVzdCAtbiAiJEdJVF9SRU1PVEVfVEVTVEdJVF9OT1JFRlNQRUMiCit0aGVuCisJaF9yZWZzcGVjPSIiCisJdF9yZWZzcGVjPSIiCitmaQorCitHSVRfRElSPSIkdXJsLy5naXQiCitleHBvcnQgR0lUX0RJUgorCitmb3JjZT0KKworbWtkaXIgLXAgIiRkaXIiCisKK2lmIHRlc3QgLXogIiRHSVRfUkVNT1RFX1RFU1RHSVRfTk9fTUFSS1MiCit0aGVuCisJZ2l0bWFya3M9IiRkaXIvZ2l0Lm1hcmtzIgorCXRlc3RnaXRtYXJrcz0iJGRpci90ZXN0Z2l0Lm1hcmtzIgorCXRlc3QgLWUgIiRnaXRtYXJrcyIgfHwgPiIkZ2l0bWFya3MiCisJdGVzdCAtZSAiJHRlc3RnaXRtYXJrcyIgfHwgPiIkdGVzdGdpdG1hcmtzIgorZmkKKword2hpbGUgcmVhZCBsaW5lCitkbworCWNhc2UgJGxpbmUgaW4KKwljYXBhYmlsaXRpZXMpCisJCWVjaG8gJ2ltcG9ydCcKKwkJZWNobyAnZXhwb3J0JworCQl0ZXN0IC1uICIkaF9yZWZzcGVjIiAmJiBlY2hvICJyZWZzcGVjICRoX3JlZnNwZWMiCisJCXRlc3QgLW4gIiR0X3JlZnNwZWMiICYmIGVjaG8gInJlZnNwZWMgJHRfcmVmc3BlYyIKKwkJaWYgdGVzdCAtbiAiJGdpdG1hcmtzIgorCQl0aGVuCisJCQllY2hvICIqaW1wb3J0LW1hcmtzICRnaXRtYXJrcyIKKwkJCWVjaG8gIipleHBvcnQtbWFya3MgJGdpdG1hcmtzIgorCQlmaQorCQl0ZXN0IC1uICIkR0lUX1JFTU9URV9URVNUR0lUX1NJR05FRF9UQUdTIiAmJiBlY2hvICJzaWduZWQtdGFncyIKKwkJdGVzdCAtbiAiJEdJVF9SRU1PVEVfVEVTVEdJVF9OT19QUklWQVRFX1VQREFURSIgJiYgZWNobyAibm8tcHJpdmF0ZS11cGRhdGUiCisJCWVjaG8gJ29wdGlvbicKKwkJZWNobworCQk7OworCWxpc3QpCisJCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9Jz8gJShyZWZuYW1lKScgJ3JlZnMvaGVhZHMvJyAncmVmcy90YWdzLycKKwkJaGVhZD0kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkKKwkJZWNobyAiQCRoZWFkIEhFQUQiCisJCWVjaG8KKwkJOzsKKwlpbXBvcnQqKQorCQkjIHJlYWQgYWxsIGltcG9ydCBsaW5lcworCQl3aGlsZSB0cnVlCisJCWRvCisJCQlyZWY9IiR7bGluZSMqIH0iCisJCQlyZWZzPSIkcmVmcyAkcmVmIgorCQkJcmVhZCBsaW5lCisJCQl0ZXN0ICIke2xpbmUlJSAqfSIgIT0gImltcG9ydCIgJiYgYnJlYWsKKwkJZG9uZQorCisJCWlmIHRlc3QgLW4gIiRnaXRtYXJrcyIKKwkJdGhlbgorCQkJZWNobyAiZmVhdHVyZSBpbXBvcnQtbWFya3M9JGdpdG1hcmtzIgorCQkJZWNobyAiZmVhdHVyZSBleHBvcnQtbWFya3M9JGdpdG1hcmtzIgorCQlmaQorCisJCWlmIHRlc3QgLW4gIiRHSVRfUkVNT1RFX1RFU1RHSVRfRkFJTFVSRSIKKwkJdGhlbgorCQkJZWNobyAiZmVhdHVyZSBkb25lIgorCQkJZXhpdCAxCisJCWZpCisKKwkJZWNobyAiZmVhdHVyZSBkb25lIgorCQlnaXQgZmFzdC1leHBvcnQgXAorCQkJJHtoX3JlZnNwZWM6KyItLXJlZnNwZWM9JGhfcmVmc3BlYyJ9IFwKKwkJCSR7dF9yZWZzcGVjOisiLS1yZWZzcGVjPSR0X3JlZnNwZWMifSBcCisJCQkke3Rlc3RnaXRtYXJrczorIi0taW1wb3J0LW1hcmtzPSR0ZXN0Z2l0bWFya3MifSBcCisJCQkke3Rlc3RnaXRtYXJrczorIi0tZXhwb3J0LW1hcmtzPSR0ZXN0Z2l0bWFya3MifSBcCisJCQkkcmVmcworCQllY2hvICJkb25lIgorCQk7OworCWV4cG9ydCkKKwkJaWYgdGVzdCAtbiAiJEdJVF9SRU1PVEVfVEVTVEdJVF9GQUlMVVJFIgorCQl0aGVuCisJCQkjIGNvbnN1bWUgaW5wdXQgc28gZmFzdC1leHBvcnQgZG9lc24ndCBnZXQgU0lHUElQRTsKKwkJCSMgZ2l0IHdvdWxkIGFsc28gbm90aWNlIHRoYXQgY2FzZSwgYnV0IHdlIHdhbnQKKwkJCSMgdG8gbWFrZSBzdXJlIHdlIGFyZSBleGVyY2lzaW5nIHRoZSBsYXRlcgorCQkJIyBlcnJvciBjaGVja3MKKwkJCXdoaWxlIHJlYWQgbGluZTsgZG8KKwkJCQl0ZXN0ICJkb25lIiA9ICIkbGluZSIgJiYgYnJlYWsKKwkJCWRvbmUKKwkJCWV4aXQgMQorCQlmaQorCisJCWJlZm9yZT0kKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyAlKHJlZm5hbWUpICUob2JqZWN0bmFtZSkgJykKKworCQlnaXQgZmFzdC1pbXBvcnQgXAorCQkJJHtmb3JjZTorLS1mb3JjZX0gXAorCQkJJHt0ZXN0Z2l0bWFya3M6KyItLWltcG9ydC1tYXJrcz0kdGVzdGdpdG1hcmtzIn0gXAorCQkJJHt0ZXN0Z2l0bWFya3M6KyItLWV4cG9ydC1tYXJrcz0kdGVzdGdpdG1hcmtzIn0gXAorCQkJLS1xdWlldAorCisJCSMgZmlndXJlIG91dCB3aGljaCByZWZzIHdlcmUgdXBkYXRlZAorCQlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKHJlZm5hbWUpICUob2JqZWN0bmFtZSknIHwKKwkJd2hpbGUgcmVhZCByZWYgYQorCQlkbworCQkJY2FzZSAiJGJlZm9yZSIgaW4KKwkJCSoiICRyZWYgJGEgIiopCisJCQkJY29udGludWUgOzsJIyB1bmNoYW5nZWQKKwkJCWVzYWMKKwkJCWlmIHRlc3QgLXogIiRHSVRfUkVNT1RFX1RFU1RHSVRfUFVTSF9FUlJPUiIKKwkJCXRoZW4KKwkJCQllY2hvICJvayAkcmVmIgorCQkJZWxzZQorCQkJCWVjaG8gImVycm9yICRyZWYgJEdJVF9SRU1PVEVfVEVTVEdJVF9QVVNIX0VSUk9SIgorCQkJZmkKKwkJZG9uZQorCisJCWVjaG8KKwkJOzsKKwlvcHRpb25cICopCisJCXJlYWQgY21kIG9wdCB2YWwgPDwtRU9GCisJCSRsaW5lCisJCUVPRgorCQljYXNlICRvcHQgaW4KKwkJZm9yY2UpCisJCQl0ZXN0ICR2YWwgPSAidHJ1ZSIgJiYgZm9yY2U9InRydWUiIHx8IGZvcmNlPQorCQkJZWNobyAib2siCisJCQk7OworCQkqKQorCQkJZWNobyAidW5zdXBwb3J0ZWQiCisJCQk7OworCQllc2FjCisJCTs7CisJJycpCisJCWV4aXQKKwkJOzsKKwllc2FjCitkb25lCmRpZmYgLS1naXQgYS90L3Q1ODAyLWNvbm5lY3QtaGVscGVyLnNoIGIvdC90NTgwMi1jb25uZWN0LWhlbHBlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNmMyNjYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTgwMi1jb25uZWN0LWhlbHBlci5zaApAQCAtMCwwICsxLDEwMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2V4dDo6Y21kIHJlbW90ZSAiY29ubmVjdCIgaGVscGVyJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgLS1nbG9iYWwgcHJvdG9jb2wuZXh0LmFsbG93IHVzZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBzZWNvbmQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdGhpcmQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIC1hIC1tICJ0aXAgdGhyZWUiIHRocmVlICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZm91cnRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgY2xvbmUgJworCWNtZD0kKGVjaG8gImVjaG8gPiYyIGV4dDo6c2ggaW52b2tlZCAmJiAlUyAuLiIgfCBzZWQgLWUgInMvIC8lIC9nIikgJiYKKwlnaXQgY2xvbmUgImV4dDo6c2ggLWMgJVMlIC4iIGRzdCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy8gcmVmcy90YWdzLyA+ZXhwZWN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAiZXh0OjpzaCAtYyAkY21kIiAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvIHJlZnMvdGFncy8KKwkpID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBmb2xsb3dpbmcgdGFnJyAnCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGZpZnRoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtYSAtbSAidGlwIGZpdmUiIGZpdmUgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvIHJlZnMvdGFncy8gPmV4cGVjdCAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBwdWxsICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy8gcmVmcy90YWdzLyA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGJhY2tmaWxsZWQgdGFnJyAnCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHNpeHRoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtYSAtbSAidGlwIHR3byIgdHdvIHRocmVlXjEgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvIHJlZnMvdGFncy8gPmV4cGVjdCAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBwdWxsICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy8gcmVmcy90YWdzLyA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGJhY2tmaWxsZWQgdGFnIHdpdGhvdXQgcHJpbWFyeSB0cmFuc2ZlcicgJworCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLWEgLW0gInRpcCBvbmUgIiBvbmUgdHdvXjEgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvIHJlZnMvdGFncy8gPmV4cGVjdCAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBwdWxsICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy8gcmVmcy90YWdzLyA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZmFrZSBnaXQtZGFlbW9uJyAnCisJbWtkaXIgcmVtb3RlICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlbW90ZS9vbmUuZ2l0ICYmCisJbWtkaXIgcmVtb3RlL2hvc3QgJiYKKwlnaXQgaW5pdCAtLWJhcmUgcmVtb3RlL2hvc3QvdHdvLmdpdCAmJgorCXdyaXRlX3NjcmlwdCBmYWtlLWRhZW1vbiA8PC1cRU9GICYmCisJZ2l0IGRhZW1vbiAtLWluZXRkIFwKKwkJLS1pbmZvcm1hdGl2ZS1lcnJvcnMgXAorCQktLWV4cG9ydC1hbGwgXAorCQktLWJhc2UtcGF0aD0iJFRSQVNIX0RJUkVDVE9SWS9yZW1vdGUiIFwKKwkJLS1pbnRlcnBvbGF0ZWQtcGF0aD0iJFRSQVNIX0RJUkVDVE9SWS9yZW1vdGUvJUglRCIgXAorCQkiJFRSQVNIX0RJUkVDVE9SWS9yZW1vdGUiCisJRU9GCisJZXhwb3J0IFRSQVNIX0RJUkVDVE9SWSAmJgorCVBBVEg9JFRSQVNIX0RJUkVDVE9SWTokUEFUSAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHQgY29tbWFuZCBjYW4gY29ubmVjdCB0byBnaXQgZGFlbW9uIChubyB2aG9zdCknICcKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGNsb25lICJleHQ6OmZha2UtZGFlbW9uICVHL29uZS5naXQiIGRzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHQgY29tbWFuZCBjYW4gY29ubmVjdCB0byBnaXQgZGFlbW9uICh2aG9zdCknICcKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGNsb25lICJleHQ6OmZha2UtZGFlbW9uICVHL3R3by5naXQgJVZob3N0IiBkc3QKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1ODEwLXByb3RvLWRpc2FibGUtbG9jYWwuc2ggYi90L3Q1ODEwLXByb3RvLWRpc2FibGUtbG9jYWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzFlZjk5YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU4MTAtcHJvdG8tZGlzYWJsZS1sb2NhbC5zaApAQCAtMCwwICsxLDM3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBkaXNhYmxpbmcgb2YgbG9jYWwgcGF0aHMgaW4gY2xvbmUvZmV0Y2gnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItcHJvdG8tZGlzYWJsZS5zaCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeSB0byBjbG9uZScgJworCXRlc3RfY29tbWl0IG9uZQorJworCit0ZXN0X3Byb3RvICJmaWxlOi8vIiBmaWxlICJmaWxlOi8vJFBXRCIKK3Rlc3RfcHJvdG8gInBhdGgiIGZpbGUgLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvIHdpdGggZGFzaCcgJworCWdpdCBpbml0IC0tYmFyZSByZXBvLmdpdCAmJgorCWdpdCBwdXNoIHJlcG8uZ2l0IEhFQUQgJiYKKwltdiByZXBvLmdpdCAiJFBXRC8tcmVwby5naXQiCisnCisKKyMgVGhpcyB3aWxsIGZhaWwgZXZlbiB3aXRob3V0IG91ciByZWplY3Rpb24gYmVjYXVzZSB1cGxvYWQtcGFjayB3aWxsCisjIGNvbXBsYWluIGFib3V0IHRoZSBib2d1cyBvcHRpb24uIFNvIGxldCdzIG1ha2Ugc3VyZSB0aGF0IEdJVF9UUkFDRQorIyBkb2Vzbid0IHNob3cgdXMgZXZlbiBydW5uaW5nIHVwbG9hZC1wYWNrLgorIworIyBXZSBtdXN0IGFsc28gYmUgc3VyZSB0byB1c2UgImZldGNoIiBhbmQgbm90ICJjbG9uZSIgaGVyZSwgYXMgdGhlIGxhdHRlcgorIyBhY3R1YWxseSBjYW5vbmljYWxpemVzIG91ciBpbnB1dCBpbnRvIGFuIGFic29sdXRlIHBhdGggKHdoaWNoIGlzIGZpbmUKKyMgdG8gYWxsb3cpLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbyBuYW1lcyBzdGFydGluZyB3aXRoIGRhc2ggYXJlIHJlamVjdGVkJyAnCisJcm0gLWYgdHJhY2Uub3V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9UUkFDRT0iJFBXRC90cmFjZS5vdXQiIGdpdCBmZXRjaCAtLSAtcmVwby5naXQgJiYKKwkhIGdyZXAgdXBsb2FkLXBhY2sgdHJhY2Uub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Z1bGwgcGF0aHMgc3RpbGwgd29yaycgJworCWdpdCBmZXRjaCAiJFBXRC8tcmVwby5naXQiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTgxMS1wcm90by1kaXNhYmxlLWdpdC5zaCBiL3QvdDU4MTEtcHJvdG8tZGlzYWJsZS1naXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGFjNmIyYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU4MTEtcHJvdG8tZGlzYWJsZS1naXQuc2gKQEAgLTAsMCArMSwyMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGlzYWJsaW5nIG9mIGdpdC1vdmVyLXRjcCBpbiBjbG9uZS9mZXRjaCcKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1wcm90by1kaXNhYmxlLnNoIgorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1naXQtZGFlbW9uLnNoIgorc3RhcnRfZ2l0X2RhZW1vbgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZ2l0LWFjY2Vzc2libGUgcmVwbycgJworCWJhcmU9IiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwlnaXQgLS1iYXJlIGluaXQgIiRiYXJlIiAmJgorCWdpdCBwdXNoICIkYmFyZSIgSEVBRCAmJgorCT4iJGJhcmUvZ2l0LWRhZW1vbi1leHBvcnQtb2siICYmCisJZ2l0IC1DICIkYmFyZSIgY29uZmlnIGRhZW1vbi5yZWNlaXZlcGFjayB0cnVlCisnCisKK3Rlc3RfcHJvdG8gImdpdDovLyIgZ2l0ICIkR0lUX0RBRU1PTl9VUkwvcmVwby5naXQiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTgxMi1wcm90by1kaXNhYmxlLWh0dHAuc2ggYi90L3Q1ODEyLXByb3RvLWRpc2FibGUtaHR0cC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZjg3NzJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTgxMi1wcm90by1kaXNhYmxlLWh0dHAuc2gKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGlzYWJsaW5nIG9mIGdpdC1vdmVyLWh0dHAgaW4gY2xvbmUvZmV0Y2gnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItcHJvdG8tZGlzYWJsZS5zaCIKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItaHR0cGQuc2giCitzdGFydF9odHRwZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZ2l0LWFjY2Vzc2libGUgcmVwbycgJworCWJhcmU9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJdGVzdF9jb21taXQgb25lICYmCisJZ2l0IC0tYmFyZSBpbml0ICIkYmFyZSIgJiYKKwlnaXQgcHVzaCAiJGJhcmUiIEhFQUQgJiYKKwlnaXQgLUMgIiRiYXJlIiBjb25maWcgaHR0cC5yZWNlaXZlcGFjayB0cnVlCisnCisKK3Rlc3RfcHJvdG8gInNtYXJ0IGh0dHAiIGh0dHAgIiRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N1cmwgcmVkaXJlY3RzIHJlc3BlY3Qgd2hpdGVsaXN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9BTExPV19QUk9UT0NPTD1odHRwOmh0dHBzIFwKKwkJCSAgIEdJVF9TTUFSVF9IVFRQPTAgXAorCQlnaXQgY2xvbmUgIiRIVFRQRF9VUkwvZnRwLXJlZGlyL3JlcG8uZ2l0IiAyPnN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgLUUgIihmdHAuKmRpc2FibGVkfHlvdXIgY3VybCB2ZXJzaW9uIGlzIHRvbyBvbGQpIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VybCBsaW1pdHMgcmVkaXJlY3RzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICIkSFRUUERfVVJML2xvb3AtcmVkaXIvc21hcnQvcmVwby5naXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgY2FuIGJlIGxpbWl0ZWQgdG8gZnJvbS11c2VyJyAnCisJZ2l0IC1jIHByb3RvY29sLmh0dHAuYWxsb3c9dXNlciBcCisJCWNsb25lICIkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IiBwbGFpbi5naXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgcHJvdG9jb2wuaHR0cC5hbGxvdz11c2VyIFwKKwkJY2xvbmUgIiRIVFRQRF9VUkwvc21hcnQtcmVkaXItcGVybS9yZXBvLmdpdCIgcmVkaXIuZ2l0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTgxMy1wcm90by1kaXNhYmxlLXNzaC5zaCBiL3QvdDU4MTMtcHJvdG8tZGlzYWJsZS1zc2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2YwODRlZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU4MTMtcHJvdG8tZGlzYWJsZS1zc2guc2gKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGlzYWJsaW5nIG9mIGdpdC1vdmVyLXNzaCBpbiBjbG9uZS9mZXRjaCcKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1wcm90by1kaXNhYmxlLnNoIgorCitzZXR1cF9zc2hfd3JhcHBlcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5IHRvIGNsb25lJyAnCisJdGVzdF9jb21taXQgb25lICYmCisJbWtkaXIgcmVtb3RlICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlbW90ZS9yZXBvLmdpdCAmJgorCWdpdCBwdXNoIHJlbW90ZS9yZXBvLmdpdCBIRUFECisnCisKK3Rlc3RfcHJvdG8gImhvc3Q6cGF0aCIgc3NoICJyZW1vdGU6cmVwby5naXQiCit0ZXN0X3Byb3RvICJzc2g6Ly8iIHNzaCAic3NoOi8vcmVtb3RlJFBXRC9yZW1vdGUvcmVwby5naXQiCit0ZXN0X3Byb3RvICJnaXQrc3NoOi8vIiBzc2ggImdpdCtzc2g6Ly9yZW1vdGUkUFdEL3JlbW90ZS9yZXBvLmdpdCIKKworIyBEb24ndCBldmVuIGJvdGhlciBzZXR0aW5nIHVwIGEgIi1yZW1vdGUiIGRpcmVjdG9yeSwgYXMgc3NoIHdvdWxkIGdlbmVyYWxseQorIyBjb21wbGFpbiBhYm91dCB0aGUgYm9ndXMgb3B0aW9uIHJhdGhlciB0aGFuIGNvbXBsZXRpbmcgb3VyIHJlcXVlc3QuIE91cgorIyBmYWtlIHdyYXBwZXIgYWN0dWFsbHkgX2Nhbl8gaGFuZGxlIHRoaXMgY2FzZSwgYnV0IGl0J3MgbW9yZSByb2J1c3QgdG8KKyMgc2ltcGx5IGNvbmZpcm0gZnJvbSBpdHMgb3V0cHV0IHRoYXQgaXQgZGlkIG5vdCBydW4gYXQgYWxsLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9zdG5hbWVzIHN0YXJ0aW5nIHdpdGggZGFzaCBhcmUgcmVqZWN0ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgc3NoOi8vLXJlbW90ZS9yZXBvLmdpdCBkYXNoLWhvc3QgMj5zdGRlcnIgJiYKKwkhIGdyZXAgXnNzaDogc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBkYXNoJyAnCisJZ2l0IGluaXQgLS1iYXJlIHJlbW90ZS8tcmVwby5naXQgJiYKKwlnaXQgcHVzaCByZW1vdGUvLXJlcG8uZ2l0IEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbyBuYW1lcyBzdGFydGluZyB3aXRoIGRhc2ggYXJlIHJlamVjdGVkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIHJlbW90ZTotcmVwby5naXQgZGFzaC1wYXRoIDI+c3RkZXJyICYmCisJISBncmVwIF5zc2g6IHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmdWxsIHBhdGhzIHN0aWxsIHdvcmsnICcKKwlnaXQgY2xvbmUgInJlbW90ZTokUFdEL3JlbW90ZS8tcmVwby5naXQiIGRhc2gtcGF0aAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU4MTQtcHJvdG8tZGlzYWJsZS1leHQuc2ggYi90L3Q1ODE0LXByb3RvLWRpc2FibGUtZXh0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkNmY3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1ODE0LXByb3RvLWRpc2FibGUtZXh0LnNoCkBAIC0wLDAgKzEsMTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGRpc2FibGluZyBvZiByZW1vdGUtaGVscGVyIHBhdGhzIGluIGNsb25lL2ZldGNoJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLXByb3RvLWRpc2FibGUuc2giCisKK3NldHVwX2V4dF93cmFwcGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnkgdG8gY2xvbmUnICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwlta2RpciByZW1vdGUgJiYKKwlnaXQgaW5pdCAtLWJhcmUgcmVtb3RlL3JlcG8uZ2l0ICYmCisJZ2l0IHB1c2ggcmVtb3RlL3JlcG8uZ2l0IEhFQUQKKycKKwordGVzdF9wcm90byAicmVtb3RlLWhlbHBlciIgZXh0ICJleHQ6OmZha2UtcmVtb3RlICVTIHJlcG8uZ2l0IgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU4MTUtc3VibW9kdWxlLXByb3Rvcy5zaCBiL3QvdDU4MTUtc3VibW9kdWxlLXByb3Rvcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNmY1NWExCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTgxNS1zdWJtb2R1bGUtcHJvdG9zLnNoCkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHByb3RvY29sIHdoaXRlbGlzdGluZyB3aXRoIHN1Ym1vZHVsZXMnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXByb3RvLWRpc2FibGUuc2gKKworc2V0dXBfZXh0X3dyYXBwZXIKK3NldHVwX3NzaF93cmFwcGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnkgd2l0aCBzdWJtb2R1bGVzJyAnCisJbWtkaXIgcmVtb3RlICYmCisJZ2l0IGluaXQgcmVtb3RlL3JlcG8uZ2l0ICYmCisJKGNkIHJlbW90ZS9yZXBvLmdpdCAmJiB0ZXN0X2NvbW1pdCBvbmUpICYmCisJIyBzdWJtb2R1bGUtYWRkIHNob3VsZCBwcm9iYWJseSB0cnVzdCB3aGF0IHdlIGZlZWQgaXQgb24gdGhlIGNtZGxpbmUsCisJIyBidXQgaXRzIGltcGxlbWVudGF0aW9uIGlzIG92ZXJseSBjb25zZXJ2YXRpdmUuCisJR0lUX0FMTE9XX1BST1RPQ09MPXNzaCBnaXQgc3VibW9kdWxlIGFkZCByZW1vdGU6cmVwby5naXQgc3NoLW1vZHVsZSAmJgorCUdJVF9BTExPV19QUk9UT0NPTD1leHQgZ2l0IHN1Ym1vZHVsZSBhZGQgImV4dDo6ZmFrZS1yZW1vdGUgJVMgcmVwby5naXQiIGV4dC1tb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCByZWN1cnNlLXN1Ym1vZHVsZXMgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLiBkc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgaW5kaXZpZHVhbCB1cGRhdGVzJyAnCisJcm0gLXJmIGRzdCAmJgorCWdpdCBjbG9uZSAuIGRzdCAmJgorCWdpdCAtQyBkc3Qgc3VibW9kdWxlIGluaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIG9mIHNzaCBhbGxvd2VkJyAnCisJZ2l0IC1DIGRzdCBzdWJtb2R1bGUgdXBkYXRlIHNzaC1tb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIG9mIGV4dCBub3QgYWxsb3dlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBkc3Qgc3VibW9kdWxlIHVwZGF0ZSBleHQtbW9kdWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZXIgY2FuIG92ZXJyaWRlIHdoaXRlbGlzdCcgJworCUdJVF9BTExPV19QUk9UT0NPTD1leHQgZ2l0IC1DIGRzdCBzdWJtb2R1bGUgdXBkYXRlIGV4dC1tb2R1bGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1OTAwLXJlcG8tc2VsZWN0aW9uLnNoIGIvdC90NTkwMC1yZXBvLXNlbGVjdGlvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNGU1OWM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTkwMC1yZXBvLXNlbGVjdGlvbi5zaApAQCAtMCwwICsxLDEwMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NlbGVjdGluZyByZW1vdGUgcmVwbyBpbiBhbWJpZ3VvdXMgY2FzZXMnCisuIC4vdGVzdC1saWIuc2gKKworcmVzZXQoKSB7CisJcm0gLXJmIGZvbyBmb28uZ2l0IGZldGNoIGNsb25lCit9CisKK21ha2VfdHJlZSgpIHsKKwlnaXQgaW5pdCAiJDEiICYmCisJKGNkICIkMSIgJiYgdGVzdF9jb21taXQgIiQxIikKK30KKworbWFrZV9iYXJlKCkgeworCWdpdCBpbml0IC0tYmFyZSAiJDEiICYmCisJKGNkICIkMSIgJiYKKwkgdHJlZT0kKGdpdCBoYXNoLW9iamVjdCAtdyAtdCB0cmVlIC9kZXYvbnVsbCkgJiYKKwkgY29tbWl0PSQoZWNobyAiJDEiIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlKSAmJgorCSBnaXQgdXBkYXRlLXJlZiBIRUFEICRjb21taXQKKwkpCit9CisKK2dldCgpIHsKKwlnaXQgaW5pdCAtLWJhcmUgZmV0Y2ggJiYKKwkoY2QgZmV0Y2ggJiYgZ2l0IGZldGNoICIuLi8kMSIpICYmCisJZ2l0IGNsb25lICIkMSIgY2xvbmUKK30KKworY2hlY2soKSB7CisJZWNobyAiJDEiID5leHBlY3QgJiYKKwkoY2QgZmV0Y2ggJiYgZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyBGRVRDSF9IRUFEKSA+YWN0dWFsLmZldGNoICYmCisJKGNkIGNsb25lICYmIGdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgSEVBRCkgPmFjdHVhbC5jbG9uZSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmV0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmNsb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgLmdpdCBkaXIgaW4gd29ya3RyZWUnICcKKwlyZXNldCAmJgorCW1ha2VfdHJlZSBmb28gJiYKKwlnZXQgZm9vICYmCisJY2hlY2sgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9tYWdpY2FsbHkgYWRkIC5naXQgc3VmZml4JyAnCisJcmVzZXQgJiYKKwltYWtlX2JhcmUgZm9vLmdpdCAmJgorCWdldCBmb28gJiYKKwljaGVjayBmb28uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9tYWdpY2FsbHkgYWRkIC5naXQgc3VmZml4IHRvIHdvcmt0cmVlJyAnCisJcmVzZXQgJiYKKwltYWtlX3RyZWUgZm9vLmdpdCAmJgorCWdldCBmb28gJiYKKwljaGVjayBmb28uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWZlciB3b3JrdHJlZSBmb28gb3ZlciBiYXJlIGZvby5naXQnICcKKwlyZXNldCAmJgorCW1ha2VfdHJlZSBmb28gJiYKKwltYWtlX2JhcmUgZm9vLmdpdCAmJgorCWdldCBmb28gJiYKKwljaGVjayBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlZmVyIGJhcmUgZm9vIG92ZXIgYmFyZSBmb28uZ2l0JyAnCisJcmVzZXQgJiYKKwltYWtlX2JhcmUgZm9vICYmCisJbWFrZV9iYXJlIGZvby5naXQgJiYKKwlnZXQgZm9vICYmCisJY2hlY2sgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0ZSB3aXRoIGZ1bGwgZm9vLmdpdCcgJworCXJlc2V0ICYmCisJbWFrZV9iYXJlIGZvbyAmJgorCW1ha2VfYmFyZSBmb28uZ2l0ICYmCisJZ2V0IGZvby5naXQgJiYKKwljaGVjayBmb28uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dlIGFyZSBub3QgZm9vbGVkIGJ5IG5vbi1naXQgZm9vIGRpcmVjdG9yeScgJworCXJlc2V0ICYmCisJbWFrZV9iYXJlIGZvby5naXQgJiYKKwlta2RpciBmb28gJiYKKwlnZXQgZm9vICYmCisJY2hlY2sgZm9vLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVmZXIgaW5uZXIgLmdpdCBvdmVyIG91dGVyIGJhcmUnICcKKwlyZXNldCAmJgorCW1ha2VfdHJlZSBmb28gJiYKKwltYWtlX2JhcmUgZm9vLmdpdCAmJgorCW12IGZvby8uZ2l0IGZvby5naXQgJiYKKwlnZXQgZm9vLmdpdCAmJgorCWNoZWNrIGZvbworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDAtcmV2LWxpc3QtbWlzYy5zaCBiL3QvdDYwMDAtcmV2LWxpc3QtbWlzYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZGMxYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjAwMC1yZXYtbGlzdC1taXNjLnNoCkBAIC0wLDAgKzEsMTY2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWlzY2VsbGFuZW91cyByZXYtbGlzdCB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gY29udGVudDEgPndhbnRlZF9maWxlICYmCisJZWNobyBjb250ZW50MiA+dW53YW50ZWRfZmlsZSAmJgorCWdpdCBhZGQgd2FudGVkX2ZpbGUgdW53YW50ZWRfZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tb2JqZWN0cyBoZWVkcyBwYXRoc3BlY3MnICcKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIEhFQUQgLS0gd2FudGVkX2ZpbGUgPm91dHB1dCAmJgorCWdyZXAgd2FudGVkX2ZpbGUgb3V0cHV0ICYmCisJISBncmVwIHVud2FudGVkX2ZpbGUgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tb2JqZWN0cyB3aXRoIHBhdGhzcGVjcyBhbmQgZGVlcGVyIHBhdGhzJyAnCisJbWtkaXIgZm9vICYmCisJPmZvby9maWxlICYmCisJZ2l0IGFkZCBmb28vZmlsZSAmJgorCWdpdCBjb21taXQgLW0gdHdvICYmCisKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIEhFQUQgLS0gZm9vID5vdXRwdXQgJiYKKwlncmVwIGZvby9maWxlIG91dHB1dCAmJgorCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBIRUFEIC0tIGZvby9maWxlID5vdXRwdXQgJiYKKwlncmVwIGZvby9maWxlIG91dHB1dCAmJgorCSEgZ3JlcCB1bndhbnRlZF9maWxlIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLW9iamVjdHMgd2l0aCBwYXRoc3BlY3MgYW5kIGNvcGllZCBmaWxlcycgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiBqdW5pby10ZXN0Y2FzZSAmJgorCWdpdCBybSAtcmYgLiAmJgorCisJbWtkaXIgdHdvICYmCisJZWNobyBmcm90eiA+b25lICYmCisJY3Agb25lIHR3by90aHJlZSAmJgorCWdpdCBhZGQgb25lIHR3by90aHJlZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGhhdCAmJgorCisJT05FPSQoZ2l0IHJldi1wYXJzZSBIRUFEOm9uZSkgJiYKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIEhFQUQgdHdvID5vdXRwdXQgJiYKKwlncmVwICIkT05FIHR3by90aHJlZSIgb3V0cHV0ICYmCisJISBncmVwIG9uZSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1vYmplY3RzIC0tbm8tb2JqZWN0LW5hbWVzIGhhcyBubyBzcGFjZS9uYW1lcycgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1uby1vYmplY3QtbmFtZXMgSEVBRCA+b3V0cHV0ICYmCisJISBncmVwIHdhbnRlZF9maWxlIG91dHB1dCAmJgorCSEgZ3JlcCB1bndhbnRlZF9maWxlIG91dHB1dCAmJgorCSEgZ3JlcCAiICIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tb2JqZWN0cyAtLW5vLW9iamVjdC1uYW1lcyB3b3JrcyB3aXRoIGNhdC1maWxlJyAnCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLW5vLW9iamVjdC1uYW1lcyAtLWFsbCA+bGlzdC1vdXRwdXQgJiYKKwlnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayA8bGlzdC1vdXRwdXQgPmNhdC1vdXRwdXQgJiYKKwkhIGdyZXAgbWlzc2luZyBjYXQtb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tb2JqZWN0LW5hbWVzIGFuZCAtLW9iamVjdC1uYW1lcyBhcmUgbGFzdC1vbmUtd2lucycgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1uby1vYmplY3QtbmFtZXMgLS1vYmplY3QtbmFtZXMgLS1hbGwgPm91dHB1dCAmJgorCWdyZXAgd2FudGVkX2ZpbGUgb3V0cHV0ICYmCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLW9iamVjdC1uYW1lcyAtLW5vLW9iamVjdC1uYW1lcyAtLWFsbCA+b3V0cHV0ICYmCisJISBncmVwIHdhbnRlZF9maWxlIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBBLi5CIGFuZCByZXYtbGlzdCBeQSBCIGFyZSB0aGUgc2FtZScgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBhbm90aGVyICYmCisJZ2l0IHRhZyAtYSAtbSAiYW5ub3RhdGVkIiB2MS4wICYmCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBedjEuMF4gdjEuMCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyB2MS4wXi4udjEuMCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9wYWdhdGUgdW5pbnRlcmVzdGluZyBmbGFnIGRvd24gY29ycmVjdGx5JyAnCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBeSEVBRF57dHJlZX0gSEVBRF57dHJlZX0gPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltbGVmdCBmbGFnIGJpdCBpcyBwcm9wYWdhdGVkIGRvd24gZnJvbSB0YWcnICcKKwlnaXQgbG9nIC0tZm9ybWF0PSIlbSAlcyIgLS1sZWZ0LXJpZ2h0IHYxLjAuLi5tYXN0ZXIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk+IHR3bworCT4gb25lCisJPCBhbm90aGVyCisJPCB0aGF0CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBjYW4gc2hvdyBpbmRleCBvYmplY3RzJyAnCisJIyBPZiB0aGUgYmxvYnMgYW5kIHRyZWVzIGluIHRoZSBpbmRleCwgbm90ZToKKwkjCisJIyAgIC0gd2UgZG8gbm90IHNob3cgdHdvL3RocmVlLCBiZWNhdXNlIGl0IGlzIHRoZQorCSMgICAgIHNhbWUgYmxvYiBhcyAib25lIiwgYW5kIHdlIHNob3cgb2JqZWN0cyBvbmx5IG9uY2UKKwkjCisJIyAgIC0gd2UgZG8gc2hvdyB0aGUgdHJlZSAidHdvIiwgYmVjYXVzZSBpdCBoYXMgYSB2YWxpZCBjYWNoZSB0cmVlCisJIyAgICAgZnJvbSB0aGUgbGFzdCBjb21taXQKKwkjCisJIyAgIC0gd2UgZG8gbm90IHNob3cgdGhlIHJvb3QgdHJlZTsgc2luY2Ugd2UgdXBkYXRlZCB0aGUgaW5kZXgsIGl0CisJIyAgICAgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGNhY2hlIHRyZWUKKwkjCisJZWNobyBvbmx5LWluLWluZGV4ID5vbmx5LWluLWluZGV4ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCXJldjE9JChnaXQgcmV2LXBhcnNlIEhFQUQ6b25lKSAmJgorCXJldjI9JChnaXQgcmV2LXBhcnNlIEhFQUQ6dHdvKSAmJgorCXJldmk9JChnaXQgaGFzaC1vYmplY3Qgb25seS1pbi1pbmRleCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkcmV2MSBvbmUKKwkkcmV2aSBvbmx5LWluLWluZGV4CisJJHJldjIgdHdvCisJRU9GCisJZ2l0IGFkZCBvbmx5LWluLWluZGV4ICYmCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWluZGV4ZWQtb2JqZWN0cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBjYW4gbmVnYXRlIGluZGV4IG9iamVjdHMnICcKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtMSAtLW9iamVjdHMgSEVBRCAtLW5vdCAtLWluZGV4ZWQtb2JqZWN0cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWJpc2VjdCBhbmQgLS1maXJzdC1wYXJlbnQgY2FuIG5vdCBiZSBjb21iaW5lZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCAtLWJpc2VjdCAtLWZpcnN0LXBhcmVudCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taGVhZGVyIHNob3dzIGEgTlVMIGFmdGVyIGVhY2ggY29tbWl0JyAnCisJIyBXZSBrbm93IHRoYXQgdGhlcmUgaXMgbm8gUSBpbiB0aGUgdHJ1ZSBwYXlsb2FkOyBuYW1lcyBhbmQKKwkjIGFkZHJlc3NlcyBvZiB0aGUgYXV0aG9ycyBhbmQgdGhlIGNvbW1pdHRlcnMgZG8gbm90IGhhdmUKKwkjIGFueSwgYW5kIG9iamVjdCBuYW1lcyBvciBoZWFkZXIgbmFtZXMgZG8gbm90LCBlaXRoZXIuCisJZ2l0IHJldi1saXN0IC0taGVhZGVyIC0tbWF4LWNvdW50PTIgSEVBRCB8CisJbnVsX3RvX3EgfAorCWdyZXAgIl5RIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJUSQoZ2l0IHJldi1wYXJzZSBIRUFEfjEpCisJUQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1lbmQtb2Ytb3B0aW9ucycgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvLS1vdXRwdXQ9eWlrZXMgSEVBRCAmJgorCWdpdCByZXYtbGlzdCAtLWVuZC1vZi1vcHRpb25zIC0tb3V0cHV0PXlpa2VzID5hY3R1YWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB5aWtlcyAmJgorCWdpdCByZXYtbGlzdCBIRUFEID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tY291bnQnICcKKwljb3VudD0kKGdpdCByZXYtbGlzdCAtLWNvdW50IEhFQUQpICYmCisJZ2l0IHJldi1saXN0IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9ICRjb3VudCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1jb3VudCAtLW9iamVjdHMnICcKKwljb3VudD0kKGdpdCByZXYtbGlzdCAtLWNvdW50IC0tb2JqZWN0cyBIRUFEKSAmJgorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gJGNvdW50IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDEtcmV2LWxpc3QtZ3JhZnQuc2ggYi90L3Q2MDAxLXJldi1saXN0LWdyYWZ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc1MDRiYTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDAxLXJldi1saXN0LWdyYWZ0LnNoCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nUmV2aXNpb24gdHJhdmVyc2FsIHZzIGdyYWZ0cyBhbmQgcGF0aCBsaW1pdGVyJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyA+ZmlsZUEgZmlsZUEgJiYKKwllY2hvID5zdWJkaXIvZmlsZUIgZmlsZUIgJiYKKwlnaXQgYWRkIGZpbGVBIHN1YmRpci9maWxlQiAmJgorCWdpdCBjb21taXQgLWEgLW0gIkluaXRpYWwgaW4gb25lIGhpc3RvcnkuIiAmJgorCUEwPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCisJZWNobyA+ZmlsZUEgZmlsZUEgbW9kaWZpZWQgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJTZWNvbmQgaW4gb25lIGhpc3RvcnkuIiAmJgorCUExPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCisJZWNobyA+c3ViZGlyL2ZpbGVCIGZpbGVCIG1vZGlmaWVkICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiVGhpcmQgaW4gb25lIGhpc3RvcnkuIiAmJgorCUEyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCisJcm0gLWYgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L2luZGV4ICYmCisKKwllY2hvID5maWxlQSBmaWxlQSBhZ2FpbiAmJgorCWVjaG8gPnN1YmRpci9maWxlQiBmaWxlQiBhZ2FpbiAmJgorCWdpdCBhZGQgZmlsZUEgc3ViZGlyL2ZpbGVCICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiSW5pdGlhbCBpbiBhbHRlcm5hdGUgaGlzdG9yeS4iICYmCisJQjA9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisKKwllY2hvID5maWxlQSBmaWxlQSBtb2RpZmllZCBpbiBhbHRlcm5hdGUgaGlzdG9yeSAmJgorCWdpdCBjb21taXQgLWEgLW0gIlNlY29uZCBpbiBhbHRlcm5hdGUgaGlzdG9yeS4iICYmCisJQjE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisKKwllY2hvID5zdWJkaXIvZmlsZUIgZmlsZUIgbW9kaWZpZWQgaW4gYWx0ZXJuYXRlIGhpc3RvcnkgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJUaGlyZCBpbiBhbHRlcm5hdGUgaGlzdG9yeS4iICYmCisJQjI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJOiBkb25lCisnCisKK2NoZWNrICgpIHsKKwl0eXBlPSQxCisJc2hpZnQKKworCWFyZz0KKwl3aGljaD1hcmcKKwlybSAtZiB0ZXN0LmV4cGVjdAorCWZvciBhCisJZG8KKwkJaWYgdGVzdCAieiRhIiA9IHotLQorCQl0aGVuCisJCQl3aGljaD1leHBlY3QKKwkJCWNoaWxkPQorCQkJY29udGludWUKKwkJZmkKKwkJaWYgdGVzdCAiJHdoaWNoIiA9IGFyZworCQl0aGVuCisJCQlhcmc9IiRhcmckYSAiCisJCQljb250aW51ZQorCQlmaQorCQlpZiB0ZXN0ICIkdHlwZSIgPSBiYXNpYworCQl0aGVuCisJCQllY2hvICIkYSIKKwkJZWxzZQorCQkJaWYgdGVzdCAieiRjaGlsZCIgIT0gegorCQkJdGhlbgorCQkJCWVjaG8gIiRjaGlsZCAkYSIKKwkJCWZpCisJCQljaGlsZD0iJGEiCisJCWZpCisJZG9uZSA+dGVzdC5leHBlY3QKKwlpZiB0ZXN0ICIkdHlwZSIgIT0gYmFzaWMgJiYgdGVzdCAieiRjaGlsZCIgIT0gegorCXRoZW4KKwkJZWNobyA+PnRlc3QuZXhwZWN0ICRjaGlsZAorCWZpCisJaWYgdGVzdCAkdHlwZSA9IGJhc2ljCisJdGhlbgorCQlnaXQgcmV2LWxpc3QgJGFyZyA+dGVzdC5hY3R1YWwKKwllbGlmIHRlc3QgJHR5cGUgPSBwYXJlbnRzCisJdGhlbgorCQlnaXQgcmV2LWxpc3QgLS1wYXJlbnRzICRhcmcgPnRlc3QuYWN0dWFsCisJZWxpZiB0ZXN0ICR0eXBlID0gcGFyZW50cy1yYXcKKwl0aGVuCisJCWdpdCByZXYtbGlzdCAtLXBhcmVudHMgLS1wcmV0dHk9cmF3ICRhcmcgfAorCQlzZWQgLW4gLWUgJ3MvXmNvbW1pdCAvL3AnID50ZXN0LmFjdHVhbAorCWZpCisJdGVzdF9jbXAgdGVzdC5leHBlY3QgdGVzdC5hY3R1YWwKK30KKworZm9yIHR5cGUgaW4gYmFzaWMgcGFyZW50cyBwYXJlbnRzLXJhdworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRob3V0IGdyYWZ0cycgIgorCQlybSAtZiAuZ2l0L2luZm8vZ3JhZnRzICYmCisJCWNoZWNrICR0eXBlICRCMiAtLSAkQjIgJEIxICRCMAorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZ3JhZnRzJyAiCisJCWVjaG8gJyRCMCAkQTInID4uZ2l0L2luZm8vZ3JhZnRzICYmCisJCWNoZWNrICR0eXBlICRCMiAtLSAkQjIgJEIxICRCMCAkQTIgJEExICRBMAorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGhvdXQgZ3JhZnRzLCB3aXRoIHBhdGhsaW1pdCcgIgorCQlybSAtZiAuZ2l0L2luZm8vZ3JhZnRzICYmCisJCWNoZWNrICR0eXBlICRCMiBzdWJkaXIgLS0gJEIyICRCMAorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZ3JhZnRzLCB3aXRoIHBhdGhsaW1pdCcgIgorCQllY2hvICckQjAgJEEyJyA+LmdpdC9pbmZvL2dyYWZ0cyAmJgorCQljaGVjayAkdHlwZSAkQjIgc3ViZGlyIC0tICRCMiAkQjAgJEEyICRBMAorCSIKKworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IGFkdmljZSB0aGF0IGdyYWZ0cyBhcmUgZGVwcmVjYXRlZCcgJworCWdpdCBzaG93IEhFQUQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJnaXQgcmVwbGFjZSIgZXJyICYmCisJdGVzdF9jb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2UgJiYKKwlnaXQgc2hvdyBIRUFEIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJnaXQgcmVwbGFjZSIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAwMi1yZXYtbGlzdC1iaXNlY3Quc2ggYi90L3Q2MDAyLXJldi1saXN0LWJpc2VjdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNjYxNDA4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjAwMi1yZXYtbGlzdC1iaXNlY3Quc2gKQEAgLTAsMCArMSwyNjYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9uIFNleW1vdXIKKyMKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIGdpdCByZXYtbGlzdCAtLWJpc2VjdCBmdW5jdGlvbmFsaXR5JworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXQ2MDAwLnNoICMgdDZ4eHggc3BlY2lmaWMgZnVuY3Rpb25zCisKKyMgdXNhZ2U6IHRlc3RfYmlzZWN0aW9uIG1heC1kaWZmIGJpc2VjdC1vcHRpb24gaGVhZCBecHJ1bmUuLi4KKyMKKyMgZS5nLiB0ZXN0X2Jpc2VjdGlvbiAxIC0tYmlzZWN0IGwxIF5sMAorIwordGVzdF9iaXNlY3Rpb25fZGlmZigpCit7CisJX21heF9kaWZmPSQxCisJX2Jpc2VjdF9vcHRpb249JDIKKwlzaGlmdCAyCisJX2Jpc2VjdGlvbj0kKGdpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gIiRAIikKKwlfbGlzdF9zaXplPSQoZ2l0IHJldi1saXN0ICIkQCIgfCB3YyAtbCkKKyAgICAgICAgX2hlYWQ9JDEKKwlzaGlmdCAxCisJX2Jpc2VjdGlvbl9zaXplPSQoZ2l0IHJldi1saXN0ICRfYmlzZWN0aW9uICIkQCIgfCB3YyAtbCkKKwlbIC1uICIkX2xpc3Rfc2l6ZSIgLWEgLW4gIiRfYmlzZWN0aW9uX3NpemUiIF0gfHwKKwllcnJvciAidGVzdF9iaXNlY3Rpb25fZGlmZiBmYWlsZWQiCisKKwkjIFRlc3QgaWYgYmlzZWN0aW9uIHNpemUgaXMgY2xvc2UgdG8gaGFsZiBvZiBsaXN0IHNpemUgd2l0aGluCisJIyB0b2xlcmFuY2UuCisJIworCV9iaXNlY3RfZXJyPSQoZXhwciAkX2xpc3Rfc2l6ZSAtICRfYmlzZWN0aW9uX3NpemUgXCogMikKKwl0ZXN0ICIkX2Jpc2VjdF9lcnIiIC1sdCAwICYmIF9iaXNlY3RfZXJyPSQoZXhwciAwIC0gJF9iaXNlY3RfZXJyKQorCV9iaXNlY3RfZXJyPSQoZXhwciAkX2Jpc2VjdF9lcnIgLyAyKSA7ICMgZmxvb3IKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJiaXNlY3Rpb24gZGlmZiAkX2Jpc2VjdF9vcHRpb24gJF9oZWFkICQqIDw9ICRfbWF4X2RpZmYiIFwKKwkndGVzdCAkX2Jpc2VjdF9lcnIgLWxlICRfbWF4X2RpZmYnCit9CisKK2RhdGUgPnBhdGgwCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwCitzYXZlX3RhZyB0cmVlIGdpdCB3cml0ZS10cmVlCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDAiIGhpZGVfZXJyb3Igc2F2ZV90YWcgcm9vdCB1bmlxdWVfY29tbWl0IHJvb3QgdHJlZQorb25fY29tbWl0dGVyX2RhdGUgIjAwOjAxIiBzYXZlX3RhZyBsMCB1bmlxdWVfY29tbWl0IGwwIHRyZWUgLXAgcm9vdAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjAyIiBzYXZlX3RhZyBsMSB1bmlxdWVfY29tbWl0IGwxIHRyZWUgLXAgbDAKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMyIgc2F2ZV90YWcgbDIgdW5pcXVlX2NvbW1pdCBsMiB0cmVlIC1wIGwxCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDQiIHNhdmVfdGFnIGEwIHVuaXF1ZV9jb21taXQgYTAgdHJlZSAtcCBsMgorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA1IiBzYXZlX3RhZyBhMSB1bmlxdWVfY29tbWl0IGExIHRyZWUgLXAgYTAKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowNiIgc2F2ZV90YWcgYjEgdW5pcXVlX2NvbW1pdCBiMSB0cmVlIC1wIGEwCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDciIHNhdmVfdGFnIGMxIHVuaXF1ZV9jb21taXQgYzEgdHJlZSAtcCBiMQorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA4IiBzYXZlX3RhZyBiMiB1bmlxdWVfY29tbWl0IGIyIHRyZWUgLXAgYjEKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowOSIgc2F2ZV90YWcgYjMgdW5pcXVlX2NvbW1pdCBiMiB0cmVlIC1wIGIyCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTAiIHNhdmVfdGFnIGMyIHVuaXF1ZV9jb21taXQgYzIgdHJlZSAtcCBjMSAtcCBiMgorb25fY29tbWl0dGVyX2RhdGUgIjAwOjExIiBzYXZlX3RhZyBjMyB1bmlxdWVfY29tbWl0IGMzIHRyZWUgLXAgYzIKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxMiIgc2F2ZV90YWcgYTIgdW5pcXVlX2NvbW1pdCBhMiB0cmVlIC1wIGExCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTMiIHNhdmVfdGFnIGEzIHVuaXF1ZV9jb21taXQgYTMgdHJlZSAtcCBhMgorb25fY29tbWl0dGVyX2RhdGUgIjAwOjE0IiBzYXZlX3RhZyBiNCB1bmlxdWVfY29tbWl0IGI0IHRyZWUgLXAgYjMgLXAgYTMKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxNSIgc2F2ZV90YWcgYTQgdW5pcXVlX2NvbW1pdCBhNCB0cmVlIC1wIGEzIC1wIGI0IC1wIGMzCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTYiIHNhdmVfdGFnIGwzIHVuaXF1ZV9jb21taXQgbDMgdHJlZSAtcCBhNAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjE3IiBzYXZlX3RhZyBsNCB1bmlxdWVfY29tbWl0IGw0IHRyZWUgLXAgbDMKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxOCIgc2F2ZV90YWcgbDUgdW5pcXVlX2NvbW1pdCBsNSB0cmVlIC1wIGw0CitnaXQgdXBkYXRlLXJlZiBIRUFEICQodGFnIGw1KQorCisKKyMgICAgIEUKKyMgICAgLyBcCisjICAgZTEgIHwKKyMgICB8ICAgfAorIyAgIGUyICB8CisjICAgfCAgIHwKKyMgICBlMyAgfAorIyAgIHwgICB8CisjICAgZTQgIHwKKyMgICB8ICAgfAorIyAgIHwgICBmMQorIyAgIHwgICB8CisjICAgfCAgIGYyCisjICAgfCAgIHwKKyMgICB8ICAgZjMKKyMgICB8ICAgfAorIyAgIHwgICBmNAorIyAgIHwgICB8CisjICAgZTUgIHwKKyMgICB8ICAgfAorIyAgIGU2ICB8CisjICAgfCAgIHwKKyMgICBlNyAgfAorIyAgIHwgICB8CisjICAgZTggIHwKKyMgICAgXCAvCisjICAgICBGCisKKworb25fY29tbWl0dGVyX2RhdGUgIjAwOjAwIiBoaWRlX2Vycm9yIHNhdmVfdGFnIEYgdW5pcXVlX2NvbW1pdCBGIHRyZWUKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMSIgc2F2ZV90YWcgZTggdW5pcXVlX2NvbW1pdCBlOCB0cmVlIC1wIEYKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMiIgc2F2ZV90YWcgZTcgdW5pcXVlX2NvbW1pdCBlNyB0cmVlIC1wIGU4Citvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDMiIHNhdmVfdGFnIGU2IHVuaXF1ZV9jb21taXQgZTYgdHJlZSAtcCBlNworb25fY29tbWl0dGVyX2RhdGUgIjAwOjA0IiBzYXZlX3RhZyBlNSB1bmlxdWVfY29tbWl0IGU1IHRyZWUgLXAgZTYKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowNSIgc2F2ZV90YWcgZjQgdW5pcXVlX2NvbW1pdCBmNCB0cmVlIC1wIEYKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowNiIgc2F2ZV90YWcgZjMgdW5pcXVlX2NvbW1pdCBmMyB0cmVlIC1wIGY0Citvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDciIHNhdmVfdGFnIGYyIHVuaXF1ZV9jb21taXQgZjIgdHJlZSAtcCBmMworb25fY29tbWl0dGVyX2RhdGUgIjAwOjA4IiBzYXZlX3RhZyBmMSB1bmlxdWVfY29tbWl0IGYxIHRyZWUgLXAgZjIKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowOSIgc2F2ZV90YWcgZTQgdW5pcXVlX2NvbW1pdCBlNCB0cmVlIC1wIGU1Citvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTAiIHNhdmVfdGFnIGUzIHVuaXF1ZV9jb21taXQgZTMgdHJlZSAtcCBlNAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjExIiBzYXZlX3RhZyBlMiB1bmlxdWVfY29tbWl0IGUyIHRyZWUgLXAgZTMKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxMiIgc2F2ZV90YWcgZTEgdW5pcXVlX2NvbW1pdCBlMSB0cmVlIC1wIGUyCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTMiIHNhdmVfdGFnIEUgdW5pcXVlX2NvbW1pdCBFIHRyZWUgLXAgZTEgLXAgZjEKKworb25fY29tbWl0dGVyX2RhdGUgIjAwOjAwIiBoaWRlX2Vycm9yIHNhdmVfdGFnIFUgdW5pcXVlX2NvbW1pdCBVIHRyZWUKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMSIgc2F2ZV90YWcgdTAgdW5pcXVlX2NvbW1pdCB1MCB0cmVlIC1wIFUKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMSIgc2F2ZV90YWcgdTEgdW5pcXVlX2NvbW1pdCB1MSB0cmVlIC1wIHUwCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDIiIHNhdmVfdGFnIHUyIHVuaXF1ZV9jb21taXQgdTIgdHJlZSAtcCB1MAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjAzIiBzYXZlX3RhZyB1MyB1bmlxdWVfY29tbWl0IHUzIHRyZWUgLXAgdTAKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowNCIgc2F2ZV90YWcgdTQgdW5pcXVlX2NvbW1pdCB1NCB0cmVlIC1wIHUwCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDUiIHNhdmVfdGFnIHU1IHVuaXF1ZV9jb21taXQgdTUgdHJlZSAtcCB1MAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA2IiBzYXZlX3RhZyBWIHVuaXF1ZV9jb21taXQgViB0cmVlIC1wIHUxIC1wIHUyIC1wIHUzIC1wIHU0IC1wIHU1CisKK3Rlc3Rfc2VxdWVuY2UoKQoreworCV9iaXNlY3Rfb3B0aW9uPSQxCisKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGwwIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBsMSBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gbDIgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGEwIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBhMSBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gYTIgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGEzIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBiMSBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gYjIgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGIzIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBjMSBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gYzIgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGMzIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBFIF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBlMSBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZTIgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGUzIF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBlNCBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZTUgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGU2IF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBlNyBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZjEgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGYyIF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBmMyBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZjQgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIEUgXkYKKworCXRlc3RfYmlzZWN0aW9uX2RpZmYgMSAkX2Jpc2VjdF9vcHRpb24gViBeVQorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gViBeVSBedTEgXnUyIF51MworCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gdTEgXlUKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIHUyIF5VCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiB1MyBeVQorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gdTQgXlUKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIHU1IF5VCisKKyMKKyMgdGhlIGZvbGxvd2luZyBpbGx1c3RyYXRlcyBMaW51cycgYmluYXJ5IGJ1ZyBibGF0dCBpZGVhLgorIworIyBhc3N1bWUgdGhlIGJ1ZyBpcyBhY3R1YWxseSBhdCBsMywgYnV0IHlvdSBkb24ndCBrbm93IHRoYXQgLSBhbGwgeW91IGtub3cgaXMgdGhhdCBsMyBpcyBicm9rZW4KKyMgYW5kIGl0IHdhc24ndCBicm9rZW4gYmVmb3JlCisjCisjIGtlZXAgYmlzZWN0aW5nIHRoZSBsaXN0LCBhZHZhbmNpbmcgdGhlICJiYWQiIGhlYWQgYW5kIGFjY3VtdWxhdGluZyAiZ29vZCIgaGVhZHMgdW50aWwKKyMgdGhlIGJpc2VjdGlvbiBwb2ludCBpcyB0aGUgaGVhZCAtIHRoaXMgaXMgdGhlIGJhZCBwb2ludC4KKyMKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBsNSBecm9vdCIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gbDUgXnJvb3QnIDw8RU9GCitjMworRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gbDUgXnJvb3QgXmMzIiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBsNSBecm9vdCBeYzMnIDw8RU9GCitiNAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gbDUgXnJvb3QgXmMzIF5iNCIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gbDUgXmMzIF5iNCcgPDxFT0YKK2wzCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBsMyBecm9vdCBeYzMgXmI0IiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBsMyBecm9vdCBeYzMgXmI0JyA8PEVPRgorYTQKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGw1IF5iMyBeYTMgXmI0IF5hNCIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gbDMgXmIzIF5hMyBeYTQnIDw8RU9GCitsMworRU9GCisKKyMKKyMgaWYgbDMgaXMgYmFkLCB0aGVuIGw0IGlzIGJhZCB0b28gLSBzbyBhZHZhbmNlIHRoZSBiYWQgcG9pbnRlciBieSBtYWtpbmcgYjQgdGhlIGtub3duIGJhZCBoZWFkCisjCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gbDQgXmEyIF5hMyBeYiBeYTQiICdnaXQgcmV2LWxpc3QgJF9iaXNlY3Rfb3B0aW9uIGw0IF5hMiBeYTMgXmE0JyA8PEVPRgorbDMKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGwzIF5hMiBeYTMgXmIgXmE0IiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBsMyBeYTIgXmEzIF5hNCcgPDxFT0YKK2wzCitFT0YKKworIyBmb3VuZCEKKworIworIyBhcyBhbm90aGVyIGV4YW1wbGUsIGxldCdzIGNvbnNpZGVyIGE0IHRvIGJlIHRoZSBiYWQgaGVhZCwgaW4gd2hpY2ggY2FzZQorIworCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGE0IF5hMiBeYTMgXmI0IiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCcgPDxFT0YKK2MyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCBeYzIiICdnaXQgcmV2LWxpc3QgJF9iaXNlY3Rfb3B0aW9uIGE0IF5hMiBeYTMgXmI0IF5jMicgPDxFT0YKK2MzCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCBeYzIgXmMzIiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCBeYzIgXmMzJyA8PEVPRgorYTQKK0VPRgorCisjIGZvdW5kIQorCisjCisjIG9yIGNvbnNpZGVyIGMzIHRvIGJlIHRoZSBiYWQgaGVhZAorIworCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGE0IF5hMiBeYTMgXmI0IiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCcgPDxFT0YKK2MyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBjMyBeYTIgXmEzIF5iNCBeYzIiICdnaXQgcmV2LWxpc3QgJF9iaXNlY3Rfb3B0aW9uIGMzIF5hMiBeYTMgXmI0IF5jMicgPDxFT0YKK2MzCitFT0YKKworIyBmb3VuZCEKKworfQorCit0ZXN0X3NlcXVlbmNlICItLWJpc2VjdCIKKworIworIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZmFrZSAtLWJpc2VjdCByZWZzJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9iaXNlY3QvYmFkIGMzICYmCisJZ29vZD0kKGdpdCByZXYtcGFyc2UgYjEpICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9iaXNlY3QvZ29vZC0kZ29vZCAkZ29vZCAmJgorCWdvb2Q9JChnaXQgcmV2LXBhcnNlIGMxKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvYmlzZWN0L2dvb2QtJGdvb2QgJGdvb2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1iaXNlY3QgY2FuIGRlZmF1bHQgdG8gZ29vZC9iYWQgcmVmcycgJworCSMgdGhlIG9ubHkgdGhpbmcgYmV0d2VlbiBjMyBhbmQgYzEgaXMgYzIKKwlnaXQgcmV2LXBhcnNlIGMyID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS1iaXNlY3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tYmlzZWN0IGNhbiBkZWZhdWx0IHRvIGdvb2QvYmFkIHJlZnMnICcKKwlnaXQgcmV2LXBhcnNlIGMzIF5iMSBeYzEgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLS1iaXNlY3QgPmFjdHVhbCAmJgorCisJIyBvdXRwdXQgb3JkZXIgZGVwZW5kcyBvbiB0aGUgcmVmbmFtZXMsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbgorCSMgdGhlIGV4YWN0IHNoYTFzLiBXZSBqdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIHNhbWUgc2V0CisJIyBvZiBsaW5lcyBpbiBhbnkgb3JkZXIuCisJc29ydCA8ZXhwZWN0ID5leHBlY3Quc29ydGVkICYmCisJc29ydCA8YWN0dWFsID5hY3R1YWwuc29ydGVkICYmCisJdGVzdF9jbXAgZXhwZWN0LnNvcnRlZCBhY3R1YWwuc29ydGVkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAwMy1yZXYtbGlzdC10b3BvLW9yZGVyLnNoIGIvdC90NjAwMy1yZXYtbGlzdC10b3BvLW9yZGVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI0ZDE4MzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDAzLXJldi1saXN0LXRvcG8tb3JkZXIuc2gKQEAgLTAsMCArMSw0NDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9uIFNleW1vdXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdHMgZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciBmdW5jdGlvbmFsaXR5JworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXQ2MDAwLnNoICMgdDZ4eHggc3BlY2lmaWMgZnVuY3Rpb25zCisKK2xpc3RfZHVwbGljYXRlcygpCit7CisgICAgIiRAIiB8IHNvcnQgfCB1bmlxIC1kCit9CisKK2RhdGUgPnBhdGgwCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwCitzYXZlX3RhZyB0cmVlIGdpdCB3cml0ZS10cmVlCitvbl9kYXRlcyAiMDA6MDAiICIwMDowMCIgaGlkZV9lcnJvciBzYXZlX3RhZyByb290IHVuaXF1ZV9jb21taXQgcm9vdCB0cmVlCitvbl9kYXRlcyAiMDA6MDEiICIwMDowMSIgc2F2ZV90YWcgbDAgdW5pcXVlX2NvbW1pdCBsMCB0cmVlIC1wIHJvb3QKK29uX2RhdGVzICIwMDowMiIgIjAwOjAyIiBzYXZlX3RhZyBsMSB1bmlxdWVfY29tbWl0IGwxIHRyZWUgLXAgbDAKK29uX2RhdGVzICIwMDowMyIgIjAwOjAzIiBzYXZlX3RhZyBsMiB1bmlxdWVfY29tbWl0IGwyIHRyZWUgLXAgbDEKK29uX2RhdGVzICIwMDowNCIgIjAwOjA0IiBzYXZlX3RhZyBhMCB1bmlxdWVfY29tbWl0IGEwIHRyZWUgLXAgbDIKK29uX2RhdGVzICIwMDowNSIgIjAwOjA1IiBzYXZlX3RhZyBhMSB1bmlxdWVfY29tbWl0IGExIHRyZWUgLXAgYTAKK29uX2RhdGVzICIwMDowNiIgIjAwOjA2IiBzYXZlX3RhZyBiMSB1bmlxdWVfY29tbWl0IGIxIHRyZWUgLXAgYTAKK29uX2RhdGVzICIwMDowNyIgIjAwOjA3IiBzYXZlX3RhZyBjMSB1bmlxdWVfY29tbWl0IGMxIHRyZWUgLXAgYjEKK29uX2RhdGVzICIwMDowOCIgIjAwOjA4IiBhc19hdXRob3IgZm9vYmFyQGV4YW1wbGUuY29tIHNhdmVfdGFnIGIyIHVuaXF1ZV9jb21taXQgYjIgdHJlZSAtcCBiMQorb25fZGF0ZXMgIjAwOjA5IiAiMDA6MDkiIHNhdmVfdGFnIGIzIHVuaXF1ZV9jb21taXQgYjMgdHJlZSAtcCBiMgorb25fZGF0ZXMgIjAwOjEwIiAiMDA6MTAiIHNhdmVfdGFnIGMyIHVuaXF1ZV9jb21taXQgYzIgdHJlZSAtcCBjMSAtcCBiMgorb25fZGF0ZXMgIjAwOjExIiAiMDA6MTEiIHNhdmVfdGFnIGMzIHVuaXF1ZV9jb21taXQgYzMgdHJlZSAtcCBjMgorb25fZGF0ZXMgIjAwOjEyIiAiMDA6MDAiIHNhdmVfdGFnIGEyIHVuaXF1ZV9jb21taXQgYTIgdHJlZSAtcCBhMQorb25fZGF0ZXMgIjAwOjEzIiAiMDA6MDEiIHNhdmVfdGFnIGEzIHVuaXF1ZV9jb21taXQgYTMgdHJlZSAtcCBhMgorb25fZGF0ZXMgIjAwOjE0IiAiMDA6MTQiIHNhdmVfdGFnIGI0IHVuaXF1ZV9jb21taXQgYjQgdHJlZSAtcCBiMyAtcCBhMworb25fZGF0ZXMgIjAwOjE1IiAiMDA6MTUiIHNhdmVfdGFnIGE0IHVuaXF1ZV9jb21taXQgYTQgdHJlZSAtcCBhMyAtcCBiNCAtcCBjMworb25fZGF0ZXMgIjAwOjE2IiAiMDA6MTYiIHNhdmVfdGFnIGwzIHVuaXF1ZV9jb21taXQgbDMgdHJlZSAtcCBhNAorb25fZGF0ZXMgIjAwOjE3IiAiMDA6MTciIHNhdmVfdGFnIGw0IHVuaXF1ZV9jb21taXQgbDQgdHJlZSAtcCBsMworb25fZGF0ZXMgIjAwOjE4IiAiMDA6MTgiIHNhdmVfdGFnIGw1IHVuaXF1ZV9jb21taXQgbDUgdHJlZSAtcCBsNAorb25fZGF0ZXMgIjAwOjE5IiAiMDA6MTkiIHNhdmVfdGFnIG0xIHVuaXF1ZV9jb21taXQgbTEgdHJlZSAtcCBhNCAtcCBjMworb25fZGF0ZXMgIjAwOjIwIiAiMDA6MjAiIHNhdmVfdGFnIG0yIHVuaXF1ZV9jb21taXQgbTIgdHJlZSAtcCBjMyAtcCBhNAorb25fZGF0ZXMgIjAwOjIxIiAiMDA6MjEiIGhpZGVfZXJyb3Igc2F2ZV90YWcgYWx0X3Jvb3QgdW5pcXVlX2NvbW1pdCBhbHRfcm9vdCB0cmVlCitvbl9kYXRlcyAiMDA6MjIiICIwMDoyMiIgc2F2ZV90YWcgcjAgdW5pcXVlX2NvbW1pdCByMCB0cmVlIC1wIGFsdF9yb290Citvbl9kYXRlcyAiMDA6MjMiICIwMDoyMyIgc2F2ZV90YWcgcjEgdW5pcXVlX2NvbW1pdCByMSB0cmVlIC1wIHIwCitvbl9kYXRlcyAiMDA6MjQiICIwMDoyNCIgc2F2ZV90YWcgbDVyMSB1bmlxdWVfY29tbWl0IGw1cjEgdHJlZSAtcCBsNSAtcCByMQorb25fZGF0ZXMgIjAwOjI1IiAiMDA6MjUiIHNhdmVfdGFnIHIxbDUgdW5pcXVlX2NvbW1pdCByMWw1IHRyZWUgLXAgcjEgLXAgbDUKKworCitoaWRlX2Vycm9yIHNhdmVfdGFnIGUxIGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTEgdHJlZQorc2F2ZV90YWcgZTIgYXNfYXV0aG9yIGVAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBlMiB0cmVlIC1wIGUxCitzYXZlX3RhZyBmMSBhc19hdXRob3IgZkBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGYxIHRyZWUgLXAgZTEKK3NhdmVfdGFnIGUzIGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTMgdHJlZSAtcCBlMgorc2F2ZV90YWcgZjIgYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmMiB0cmVlIC1wIGYxCitzYXZlX3RhZyBlNCBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGU0IHRyZWUgLXAgZTMgLXAgZjIKK3NhdmVfdGFnIGU1IGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTUgdHJlZSAtcCBlNAorc2F2ZV90YWcgZjMgYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmMyB0cmVlIC1wIGYyCitzYXZlX3RhZyBmNCBhc19hdXRob3IgZkBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGY0IHRyZWUgLXAgZjMKK3NhdmVfdGFnIGU2IGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTYgdHJlZSAtcCBlNSAtcCBmNAorc2F2ZV90YWcgZjUgYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmNSB0cmVlIC1wIGY0CitzYXZlX3RhZyBmNiBhc19hdXRob3IgZkBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGY2IHRyZWUgLXAgZjUgLXAgZTYKK3NhdmVfdGFnIGU3IGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTcgdHJlZSAtcCBlNgorc2F2ZV90YWcgZTggYXNfYXV0aG9yIGVAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBlOCB0cmVlIC1wIGU3CitzYXZlX3RhZyBlOSBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGU5IHRyZWUgLXAgZTgKK3NhdmVfdGFnIGY3IGFzX2F1dGhvciBmQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZjcgdHJlZSAtcCBmNgorc2F2ZV90YWcgZjggYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmOCB0cmVlIC1wIGY3CitzYXZlX3RhZyBmOSBhc19hdXRob3IgZkBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGY5IHRyZWUgLXAgZjgKK3NhdmVfdGFnIGUxMCBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGUxIHRyZWUgLXAgZTkgLXAgZjgKKworaGlkZV9lcnJvciBzYXZlX3RhZyBnMCB1bmlxdWVfY29tbWl0IGcwIHRyZWUKK3NhdmVfdGFnIGcxIHVuaXF1ZV9jb21taXQgZzEgdHJlZSAtcCBnMAorc2F2ZV90YWcgaDEgdW5pcXVlX2NvbW1pdCBnMiB0cmVlIC1wIGcwCitzYXZlX3RhZyBnMiB1bmlxdWVfY29tbWl0IGczIHRyZWUgLXAgZzEgLXAgaDEKK3NhdmVfdGFnIGgyIHVuaXF1ZV9jb21taXQgZzQgdHJlZSAtcCBnMgorc2F2ZV90YWcgZzMgdW5pcXVlX2NvbW1pdCBnNSB0cmVlIC1wIGcyCitzYXZlX3RhZyBnNCB1bmlxdWVfY29tbWl0IGc2IHRyZWUgLXAgZzMgLXAgaDIKKworZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkKHRhZyBsNSkKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IGhhcyBjb3JyZWN0IG51bWJlciBvZiBlbnRyaWVzJyAnZ2l0IHJldi1saXN0IEhFQUQgfCB3YyAtbCB8IHRyIC1kIFwiIFwiJyA8PEVPRgorMTkKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIHRvcG8gb3JkZXInICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBIRUFEJyA8PEVPRgorbDUKK2w0CitsMworYTQKK2MzCitjMgorYzEKK2I0CithMworYTIKK2ExCitiMworYjIKK2IxCithMAorbDIKK2wxCitsMAorcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgZGF0ZSBvcmRlcicgJ2dpdCByZXYtbGlzdCAtLWRhdGUtb3JkZXIgIEhFQUQnIDw8RU9GCitsNQorbDQKK2wzCithNAorYjQKK2EzCithMgorYzMKK2MyCitiMworYjIKK2MxCitiMQorYTEKK2EwCitsMgorbDEKK2wwCityb290CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBhdXRob3ItZGF0ZSBvcmRlcicgJ2dpdCByZXYtbGlzdCAtLWF1dGhvci1kYXRlLW9yZGVyICBIRUFEJyA8PEVPRgorbDUKK2w0CitsMworYTQKK2I0CitjMworYzIKK2IzCitiMgorYzEKK2IxCithMworYTIKK2ExCithMAorbDIKK2wxCitsMAorcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICd0d28gZGlhbW9uZHMgdG9wbyBvcmRlciAoZzYpJyAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgZzQnIDw8RU9GCitnNAoraDIKK2czCitnMgoraDEKK2cxCitnMAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBoZWFkcycgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgYTMgYjMgYzMnIDw8RU9GCithMworYTIKK2ExCitjMworYzIKK2MxCitiMworYjIKK2IxCithMAorbDIKK2wxCitsMAorcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBoZWFkcywgcHJ1bmUgYXQgYTEnICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGEzIGIzIGMzIF5hMScgPDxFT0YKK2EzCithMgorYzMKK2MyCitjMQorYjMKK2IyCitiMQorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBoZWFkcywgcHJ1bmUgYXQgbDEnICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGEzIGIzIGMzIF5sMScgPDxFT0YKK2EzCithMgorYTEKK2MzCitjMgorYzEKK2IzCitiMgorYjEKK2EwCitsMgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdjcm9zcy1lcG9jaCwgaGVhZCBhdCBsNSwgcHJ1bmUgYXQgbDEnICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGw1IF5sMScgPDxFT0YKK2w1CitsNAorbDMKK2E0CitjMworYzIKK2MxCitiNAorYTMKK2EyCithMQorYjMKK2IyCitiMQorYTAKK2wyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ2R1cGxpY2F0ZWQgaGVhZCBhcmd1bWVudHMnICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGw1IGw1IF5sMScgPDxFT0YKK2w1CitsNAorbDMKK2E0CitjMworYzIKK2MxCitiNAorYTMKK2EyCithMQorYjMKK2IyCitiMQorYTAKK2wyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIG5lYXIgdG9wbycgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgYTQgXmMzJyA8PEVPRgorYTQKK2I0CithMworYTIKK2ExCitiMworRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICJoZWFkIGhhcyBubyBwYXJlbnQiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICByb290JyA8PEVPRgorcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICJ0d28gbm9kZXMgLSBvbmUgaGVhZCwgb25lIGJhc2UiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsMCcgPDxFT0YKK2wwCityb290CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgInRocmVlIG5vZGVzIG9uZSBoZWFkLCBvbmUgaW50ZXJuYWwsIG9uZSBiYXNlIiAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgbDEnIDw8RU9GCitsMQorbDAKK3Jvb3QKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAibGluZWFyIHBydW5lIGwyIF5yb290IiAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgbDIgXnJvb3QnIDw8RU9GCitsMgorbDEKK2wwCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImxpbmVhciBwcnVuZSBsMiBebDAiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsMiBebDAnIDw8RU9GCitsMgorbDEKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAibGluZWFyIHBydW5lIGwyIF5sMSIgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGwyIF5sMScgPDxFT0YKK2wyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImxpbmVhciBwcnVuZSBsNSBeYTQiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsNSBeYTQnIDw8RU9GCitsNQorbDQKK2wzCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImxpbmVhciBwcnVuZSBsNSBebDMiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsNSBebDMnIDw8RU9GCitsNQorbDQKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAibGluZWFyIHBydW5lIGw1IF5sNCIgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGw1IF5sNCcgPDxFT0YKK2w1CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIm1heC1jb3VudCAxMCAtIHRvcG8gb3JkZXIiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICAtLW1heC1jb3VudD0xMCBsNScgPDxFT0YKK2w1CitsNAorbDMKK2E0CitjMworYzIKK2MxCitiNAorYTMKK2EyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIm1heC1jb3VudCAxMCAtIG5vbiB0b3BvIG9yZGVyIiAnZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEwIGw1JyA8PEVPRgorbDUKK2w0CitsMworYTQKK2I0CithMworYTIKK2MzCitjMgorYjMKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnLS1tYXgtYWdlPWMzLCBubyAtLXRvcG8tb3JkZXInICJnaXQgcmV2LWxpc3QgLS1tYXgtYWdlPSQoY29tbWl0X2RhdGUgYzMpIGw1IiA8PEVPRgorbDUKK2w0CitsMworYTQKK2I0CithMworYTIKK2MzCitFT0YKKworIworIyB0aGlzIHRlc3QgZmFpbHMgb24gLS10b3BvLW9yZGVyIC0gYSBmaXggaXMgcmVxdWlyZWQKKyMKKyN0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnLS1tYXgtYWdlPWMzLCAtLXRvcG8tb3JkZXInICJnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIC0tbWF4LWFnZT0kKGNvbW1pdF9kYXRlIGMzKSBsNSIgPDxFT0YKKyNsNQorI2w0CisjbDMKKyNhNAorI2MzCisjYjQKKyNhMworI2EyCisjRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdvbmUgc3BlY2lmaWVkIGhlYWQgcmVhY2hhYmxlIGZyb20gYW5vdGhlciBhNCwgYzMsIC0tdG9wby1vcmRlcicgImxpc3RfZHVwbGljYXRlcyBnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGE0IGMzIiA8PEVPRgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdvbmUgc3BlY2lmaWVkIGhlYWQgcmVhY2hhYmxlIGZyb20gYW5vdGhlciBjMywgYTQsIC0tdG9wby1vcmRlcicgImxpc3RfZHVwbGljYXRlcyBnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGMzIGE0IiA8PEVPRgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdvbmUgc3BlY2lmaWVkIGhlYWQgcmVhY2hhYmxlIGZyb20gYW5vdGhlciBhNCwgYzMsIG5vIC0tdG9wby1vcmRlcicgImxpc3RfZHVwbGljYXRlcyBnaXQgcmV2LWxpc3QgYTQgYzMiIDw8RU9GCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ29uZSBzcGVjaWZpZWQgaGVhZCByZWFjaGFibGUgZnJvbSBhbm90aGVyIGMzLCBhNCwgbm8gLS10b3BvLW9yZGVyJyAibGlzdF9kdXBsaWNhdGVzIGdpdCByZXYtbGlzdCBjMyBhNCIgPDxFT0YKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnZ3JhcGggd2l0aCBjMyBhbmQgYTQgcGFyZW50cyBvZiBoZWFkJyAibGlzdF9kdXBsaWNhdGVzIGdpdCByZXYtbGlzdCBtMSIgPDxFT0YKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnZ3JhcGggd2l0aCBhNCBhbmQgYzMgcGFyZW50cyBvZiBoZWFkJyAibGlzdF9kdXBsaWNhdGVzIGdpdCByZXYtbGlzdCBtMiIgPDxFT0YKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWFkIF5oZWFkIC0tdG9wby1vcmRlciIgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGEzIF5hMycgPDxFT0YKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWFkIF5oZWFkIG5vIC0tdG9wby1vcmRlciIgJ2dpdCByZXYtbGlzdCBhMyBeYTMnIDw8RU9GCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSB0b3BvIG9yZGVyIChsNXIxKScgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGw1cjEnIDw8RU9GCitsNXIxCityMQorcjAKK2FsdF9yb290CitsNQorbDQKK2wzCithNAorYzMKK2MyCitjMQorYjQKK2EzCithMgorYTEKK2IzCitiMgorYjEKK2EwCitsMgorbDEKK2wwCityb290CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSB0b3BvIG9yZGVyIChyMWw1KScgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIHIxbDUnIDw8RU9GCityMWw1CitsNQorbDQKK2wzCithNAorYzMKK2MyCitjMQorYjQKK2EzCithMgorYTEKK2IzCitiMgorYjEKK2EwCitsMgorbDEKK2wwCityb290CityMQorcjAKK2FsdF9yb290CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImRvbid0IHByaW50IHRoaW5ncyB1bnJlYWNoYWJsZSBmcm9tIG9uZSBicmFuY2giICJnaXQgcmV2LWxpc3QgYTMgXmIzIC0tdG9wby1vcmRlciIgPDxFT0YKK2EzCithMgorYTEKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiLS10b3BvLW9yZGVyIGE0IGwzIiAiZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciBhNCBsMyIgPDxFT0YKK2wzCithNAorYzMKK2MyCitjMQorYjQKK2EzCithMgorYTEKK2IzCitiMgorYjEKK2EwCitsMgorbDEKK2wwCityb290CitFT0YKKworIworIworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDQtcmV2LWxpc3QtcGF0aC1vcHRpbS5zaCBiL3QvdDYwMDQtcmV2LWxpc3QtcGF0aC1vcHRpbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZThjNDJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAwNC1yZXYtbGlzdC1wYXRoLW9wdGltLnNoCkBAIC0wLDAgKzEsOTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmV2LWxpc3QgdHJpdmlhbCBwYXRoIG9wdGltaXphdGlvbiB0ZXN0CisKKyAgIGQvejEKKyAgIGIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMQorICAgby0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotLS0tbyBtYXN0ZXIKKyAgLyAgICAgICAgICAgICAgICAgICAgICAgIC8KKyBvLS0tLS0tLS0tby0tLS1vLS0tLW8tLS0tbyBzaWRlCisgYTAgICAgICAgIGMwICAgYzEgICBhMSAgIGMyCisgZC9mMCAgICAgIGQvZjEKKyBkL3owCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gSGVsbG8gPmEgJiYKKwlta2RpciBkICYmCisJZWNobyBXb3JsZCA+ZC9mICYmCisJZWNobyBXb3JsZCA+ZC96ICYmCisJZ2l0IGFkZCBhIGQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgJiYKKwlnaXQgdGFnIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBwYXRoLW9wdGltaXphdGlvbiAnCisJdGVzdF90aWNrICYmCisJY29tbWl0PSQoZWNobyAiVW5jaGFuZ2VkIHRyZWUiIHwgZ2l0IGNvbW1pdC10cmVlICJIRUFEXnt0cmVlfSIgLXAgSEVBRCkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1saXN0ICRjb21taXQgfCB3YyAtbCkgPSAyICYmCisJdGVzdCAkKGdpdCByZXYtbGlzdCAkY29tbWl0IC0tIC4gfCB3YyAtbCkgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Z1cnRoZXIgc2V0dXAnICcKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCWVjaG8gSXJyZWxldmFudCA+YyAmJgorCWVjaG8gSXJyZWxldmFudCA+ZC9mICYmCisJZ2l0IGFkZCBjIGQvZiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlNpZGUgbWFrZXMgYW4gaXJyZWxldmFudCBjb21taXQiICYmCisJZ2l0IHRhZyBzaWRlX2MwICYmCisJZWNobyAiTW9yZSBJcnJlbGV2YW5jeSIgPmMgJiYKKwlnaXQgYWRkIGMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIG1ha2VzIGFub3RoZXIgaXJyZWxldmFudCBjb21taXQiICYmCisJZWNobyBCeWUgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIHRvdWNoZXMgYSIgJiYKKwlnaXQgdGFnIHNpZGVfYTEgJiYKKwllY2hvICJZZXQgbW9yZSBJcnJlbGV2YW5jeSIgPmMgJiYKKwlnaXQgYWRkIGMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIG1ha2VzIHlldCBhbm90aGVyIGlycmVsZXZhbnQgY29tbWl0IiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIEFub3RoZXIgPmIgJiYKKwllY2hvIE11bmdlZCA+ZC96ICYmCisJZ2l0IGFkZCBiIGQveiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIk1hc3RlciB0b3VjaGVzIGIiICYmCisJZ2l0IHRhZyBtYXN0ZXJfYjAgJiYKKwlnaXQgbWVyZ2Ugc2lkZSAmJgorCWVjaG8gVG91Y2hlZCA+YiAmJgorCWdpdCBhZGQgYiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIk1hc3RlciB0b3VjaGVzIGIgYWdhaW4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGggb3B0aW1pemF0aW9uIDInICcKKwlnaXQgcmV2LXBhcnNlIHNpZGVfYTEgaW5pdGlhbCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCAtLSBhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aHNwZWMgd2l0aCBsZWFkaW5nIHBhdGgnICcKKwlnaXQgcmV2LXBhcnNlIG1hc3Rlcl4gbWFzdGVyX2IwIHNpZGVfYzAgaW5pdGlhbCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCAtLSBkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aHNwZWMgd2l0aCBnbG9iICgxKScgJworCWdpdCByZXYtcGFyc2UgbWFzdGVyXiBtYXN0ZXJfYjAgc2lkZV9jMCBpbml0aWFsID5leHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCBIRUFEIC0tICJkLyoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aHNwZWMgd2l0aCBnbG9iICgyKScgJworCWdpdCByZXYtcGFyc2Ugc2lkZV9jMCBpbml0aWFsID5leHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCBIRUFEIC0tICJkL1thLW1dKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDUtcmV2LWxpc3QtY291bnQuc2ggYi90L3Q2MDA1LXJldi1saXN0LWNvdW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBiNjQ4MjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDA1LXJldi1saXN0LWNvdW50LnNoCkBAIC0wLDAgKzEsNTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQgYW5kIC0tc2tpcCB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKyAgICBmb3IgbiBpbiAxIDIgMyA0IDUgOyBkbyBcCisgICAgICAgIGVjaG8gJG4gPiBhIDsgXAorICAgICAgICBnaXQgYWRkIGEgOyBcCisgICAgICAgIGdpdCBjb21taXQgLW0gIiRuIiA7IFwKKyAgICBkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIG9wdGlvbnMnICcKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgfCB3YyAtbCkgPSA1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWF4LWNvdW50JyAnCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tbWF4LWNvdW50PTAgfCB3YyAtbCkgPSAwICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tbWF4LWNvdW50PTMgfCB3YyAtbCkgPSAzICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tbWF4LWNvdW50PTUgfCB3YyAtbCkgPSA1ICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tbWF4LWNvdW50PTEwIHwgd2MgLWwpID0gNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1heC1jb3VudCBhbGwgZm9ybXMnICcKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLS1tYXgtY291bnQ9MSB8IHdjIC1sKSA9IDEgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLTEgfCB3YyAtbCkgPSAxICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC1uMSB8IHdjIC1sKSA9IDEgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLW4gMSB8IHdjIC1sKSA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1za2lwJyAnCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0wIHwgd2MgLWwpID0gNSAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyB8IHdjIC1sKSA9IDIgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLS1za2lwPTUgfCB3YyAtbCkgPSAwICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0xMCB8IHdjIC1sKSA9IDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1za2lwIC0tbWF4LWNvdW50JyAnCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0wIC0tbWF4LWNvdW50PTAgfCB3YyAtbCkgPSAwICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0wIC0tbWF4LWNvdW50PTEwIHwgd2MgLWwpID0gNSAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyAtLW1heC1jb3VudD0wIHwgd2MgLWwpID0gMCAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyAtLW1heC1jb3VudD0xIHwgd2MgLWwpID0gMSAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyAtLW1heC1jb3VudD0yIHwgd2MgLWwpID0gMiAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyAtLW1heC1jb3VudD0xMCB8IHdjIC1sKSA9IDIgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLS1za2lwPTUgLS1tYXgtY291bnQ9MTAgfCB3YyAtbCkgPSAwICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0xMCAtLW1heC1jb3VudD0xMCB8IHdjIC1sKSA9IDAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaCBiL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlODJlNDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaApAQCAtMCwwICsxLDUzMSBAQAorIyEvYmluL3NoCisKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEplbnMgTGVobWFubgorIyBDb3B5cmlnaHQgKGMpIDIwMTEgQWxleGV5IFNodW1raW4gKCsgbm9uLVVURi04IGNvbW1pdCBlbmNvZGluZyB0ZXN0cykKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJldi1saXN0IC0tcHJldHR5PWZvcm1hdCB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXRlcm1pbmFsLnNoCisKK3Rlc3RfdGljaworIyBUZXN0ZWQgbm9uLVVURi04IGVuY29kaW5nCit0ZXN0X2VuY29kaW5nPSJJU084ODU5LTEiCisKKyMgU3RyaW5nICJhZGRlZCIgaW4gR2VybWFuCisjICh0cmFuc2xhdGVkIHdpdGggR29vZ2xlIFRyYW5zbGF0ZSksCisjIGVuY29kZWQgaW4gVVRGLTgsIHVzZWQgYXMgYSBjb21taXQgbG9nIG1lc3NhZ2UgYmVsb3cuCithZGRlZF91dGY4X3BhcnQ9JChwcmludGYgIlwzMDNcMjc0IikKK2FkZGVkX3V0ZjhfcGFydF9pc284ODU5MT0kKGVjaG8gIiRhZGRlZF91dGY4X3BhcnQiIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcpCithZGRlZD0kKHByaW50ZiAiYWRkZWQgKGhpbnp1Z2VmJHthZGRlZF91dGY4X3BhcnR9Z3QpIGZvbyIpCithZGRlZF9pc284ODU5MT0kKGVjaG8gIiRhZGRlZCIgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZykKKyMgc2FtZSBidXQgImNoYW5nZWQiCitjaGFuZ2VkX3V0ZjhfcGFydD0kKHByaW50ZiAiXDMwM1wyNDQiKQorY2hhbmdlZF91dGY4X3BhcnRfaXNvODg1OTE9JChlY2hvICIkY2hhbmdlZF91dGY4X3BhcnQiIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcpCitjaGFuZ2VkPSQocHJpbnRmICJjaGFuZ2VkIChnZSR7Y2hhbmdlZF91dGY4X3BhcnR9bmRlcnQpIGZvbyIpCitjaGFuZ2VkX2lzbzg4NTkxPSQoZWNobyAiJGNoYW5nZWQiIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcpCisKKyMgQ291bnQgb2YgY2hhciB0byB0cnVuY2F0ZQorIyBOdW1iZXIgaXMgY2hvc2VuIHNvLCB0aGF0IG5vbi1BQ1NJSSBjaGFyYWN0ZXJzCisjIChzZWUgJGFkZGVkX3V0ZjhfcGFydCBhbmQgJGNoYW5nZWRfdXRmOF9wYXJ0KQorIyBmYWxsIGludG8gdHJ1bmNhdGVkIHBhcnRzIG9mIGFwcHJvcHJpYXRlIHdvcmRzIGJvdGggZnJvbSBsZWZ0IGFuZCByaWdodAordHJ1bmNhdGVfY291bnQ9MjAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X29pZF9pbml0ICYmCisJOiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0RW5jb2RpbmcgJHRlc3RfZW5jb2RpbmcgJiYKKwllY2hvICIkYWRkZWRfaXNvODg1OTEiIHwgZ2l0IGNvbW1pdCAtRiAtICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJaGVhZDFfc2hvcnQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQgJGhlYWQxKSAmJgorCXRyZWUxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOikgJiYKKwl0cmVlMV9zaG9ydD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydCAkdHJlZTEpICYmCisJZWNobyAiJGNoYW5nZWQiID4gZm9vICYmCisJZWNobyAiJGNoYW5nZWRfaXNvODg1OTEiIHwgZ2l0IGNvbW1pdCAtYSAtRiAtICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJaGVhZDJfc2hvcnQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQgJGhlYWQyKSAmJgorCXRyZWUyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOikgJiYKKwl0cmVlMl9zaG9ydD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydCAkdHJlZTIpICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0RW5jb2RpbmcKKycKKworIyB1c2FnZTogdGVzdF9mb3JtYXQgbmFtZSBmb3JtYXRfc3RyaW5nIFtmYWlsdXJlXSA8ZXhwZWN0ZWRfb3V0cHV0Cit0ZXN0X2Zvcm1hdCAoKSB7CisJY2F0ID5leHBlY3QuJDEKKwl0ZXN0X2V4cGVjdF8kezM6LXN1Y2Nlc3N9ICJmb3JtYXQgJDEiICIKKwkJZ2l0IHJldi1saXN0IC0tcHJldHR5PWZvcm1hdDonJDInIG1hc3RlciA+b3V0cHV0LiQxICYmCisJCXRlc3RfY21wIGV4cGVjdC4kMSBvdXRwdXQuJDEKKwkiCit9CisKKyMgRmVlZCB0byAtLWZvcm1hdCB0byBwcm92aWRlIHByZWRpY3RhYmxlIGNvbG9yZWQgc2VxdWVuY2VzLgorQkFTSUNfQ09MT1I9JyVDcmVkZm9vJUNyZXNldCcKK0NPTE9SPSclQyhyZWQpZm9vJUMocmVzZXQpJworQVVUT19DT0xPUj0nJUMoYXV0byxyZWQpZm9vJUMoYXV0byxyZXNldCknCitBTFdBWVNfQ09MT1I9JyVDKGFsd2F5cyxyZWQpZm9vJUMoYWx3YXlzLHJlc2V0KScKK2hhc19jb2xvciAoKSB7CisJdGVzdF9kZWNvZGVfY29sb3IgPCIkMSIgPmRlY29kZWQgJiYKKwllY2hvICI8UkVEPmZvbzxSRVNFVD4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZGVjb2RlZAorfQorCitoYXNfbm9fY29sb3IgKCkgeworCWVjaG8gZm9vID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgIiQxIgorfQorCit0ZXN0X2Zvcm1hdCBwZXJjZW50ICUlaCA8PEVPRgorY29tbWl0ICRoZWFkMgorJWgKK2NvbW1pdCAkaGVhZDEKKyVoCitFT0YKKwordGVzdF9mb3JtYXQgaGFzaCAlSCVuJWggPDxFT0YKK2NvbW1pdCAkaGVhZDIKKyRoZWFkMgorJGhlYWQyX3Nob3J0Citjb21taXQgJGhlYWQxCiskaGVhZDEKKyRoZWFkMV9zaG9ydAorRU9GCisKK3Rlc3RfZm9ybWF0IHRyZWUgJVQlbiV0IDw8RU9GCitjb21taXQgJGhlYWQyCiskdHJlZTIKKyR0cmVlMl9zaG9ydAorY29tbWl0ICRoZWFkMQorJHRyZWUxCiskdHJlZTFfc2hvcnQKK0VPRgorCit0ZXN0X2Zvcm1hdCBwYXJlbnRzICVQJW4lcCA8PEVPRgorY29tbWl0ICRoZWFkMgorJGhlYWQxCiskaGVhZDFfc2hvcnQKK2NvbW1pdCAkaGVhZDEKKworCitFT0YKKworIyB3ZSBkb24ndCB0ZXN0IHJlbGF0aXZlIGhlcmUKK3Rlc3RfZm9ybWF0IGF1dGhvciAlYW4lbiVhZSVuJWFsJW4lYWQlbiVhRCVuJWF0IDw8RU9GCitjb21taXQgJGhlYWQyCiskR0lUX0FVVEhPUl9OQU1FCiskR0lUX0FVVEhPUl9FTUFJTAorJFRFU1RfQVVUSE9SX0xPQ0FMTkFNRQorVGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDAKK1RodSwgNyBBcHIgMjAwNSAxNToxMzoxMyAtMDcwMAorMTExMjkxMTk5MworY29tbWl0ICRoZWFkMQorJEdJVF9BVVRIT1JfTkFNRQorJEdJVF9BVVRIT1JfRU1BSUwKKyRURVNUX0FVVEhPUl9MT0NBTE5BTUUKK1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwCitUaHUsIDcgQXByIDIwMDUgMTU6MTM6MTMgLTA3MDAKKzExMTI5MTE5OTMKK0VPRgorCit0ZXN0X2Zvcm1hdCBjb21taXR0ZXIgJWNuJW4lY2UlbiVjbCVuJWNkJW4lY0QlbiVjdCA8PEVPRgorY29tbWl0ICRoZWFkMgorJEdJVF9DT01NSVRURVJfTkFNRQorJEdJVF9DT01NSVRURVJfRU1BSUwKKyRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKK1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwCitUaHUsIDcgQXByIDIwMDUgMTU6MTM6MTMgLTA3MDAKKzExMTI5MTE5OTMKK2NvbW1pdCAkaGVhZDEKKyRHSVRfQ09NTUlUVEVSX05BTUUKKyRHSVRfQ09NTUlUVEVSX0VNQUlMCiskVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCitUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMAorVGh1LCA3IEFwciAyMDA1IDE1OjEzOjEzIC0wNzAwCisxMTEyOTExOTkzCitFT0YKKwordGVzdF9mb3JtYXQgZW5jb2RpbmcgJWUgPDxFT0YKK2NvbW1pdCAkaGVhZDIKKyR0ZXN0X2VuY29kaW5nCitjb21taXQgJGhlYWQxCiskdGVzdF9lbmNvZGluZworRU9GCisKK3Rlc3RfZm9ybWF0IHN1YmplY3QgJXMgPDxFT0YKK2NvbW1pdCAkaGVhZDIKKyRjaGFuZ2VkCitjb21taXQgJGhlYWQxCiskYWRkZWQKK0VPRgorCit0ZXN0X2Zvcm1hdCBzdWJqZWN0LXRydW5jYXRlZCAiJTwoJHRydW5jYXRlX2NvdW50LHRydW5jKSVzIiA8PEVPRgorY29tbWl0ICRoZWFkMgorY2hhbmdlZCAoZ2Uke2NoYW5nZWRfdXRmOF9wYXJ0fW5kZXJ0KS4uCitjb21taXQgJGhlYWQxCithZGRlZCAoaGluenVnZWYke2FkZGVkX3V0ZjhfcGFydH1ndC4uCitFT0YKKwordGVzdF9mb3JtYXQgYm9keSAlYiA8PEVPRgorY29tbWl0ICRoZWFkMgorY29tbWl0ICRoZWFkMQorRU9GCisKK3Rlc3RfZm9ybWF0IHJhdy1ib2R5ICVCIDw8RU9GCitjb21taXQgJGhlYWQyCiskY2hhbmdlZAorCitjb21taXQgJGhlYWQxCiskYWRkZWQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIGNvbG9ycycgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWNvbW1pdCAkaGVhZDIKKwk8UkVEPmZvbzxHUkVFTj5iYXI8QkxVRT5iYXo8UkVTRVQ+eHl6enkKKwlFT0YKKwlmb3JtYXQ9IiVDcmVkZm9vJUNncmVlbmJhciVDYmx1ZWJheiVDcmVzZXR4eXp6eSIgJiYKKwlnaXQgcmV2LWxpc3QgLS1jb2xvciAtLWZvcm1hdD0iJGZvcm1hdCIgLTEgbWFzdGVyID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJVMgaXMgbm90IGEgcGxhY2Vob2xkZXIgZm9yIHJldi1saXN0IHlldCcgJworCWdpdCByZXYtbGlzdCAtLWZvcm1hdD0iJVMiIC0xIG1hc3RlciB8IGdyZXAgIiVTIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZHZhbmNlZCBjb2xvcnMnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwljb21taXQgJGhlYWQyCisJPEJPTEQ7UkVEO0JZRUxMT1c+Zm9vPFJFU0VUPgorCUVPRgorCWZvcm1hdD0iJUMocmVkIHllbGxvdyBib2xkKWZvbyVDKHJlc2V0KSIgJiYKKwlnaXQgcmV2LWxpc3QgLS1jb2xvciAtLWZvcm1hdD0iJGZvcm1hdCIgLTEgbWFzdGVyID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZm9yIHNwZWMgaW4gXAorCSIlQ3JlZDokQkFTSUNfQ09MT1IiIFwKKwkiJUMoLi4uKTokQ09MT1IiIFwKKwkiJUMoYXV0bywuLi4pOiRBVVRPX0NPTE9SIgorZG8KKwlkZXNjPSR7c3BlYyUlOip9CisJY29sb3I9JHtzcGVjIyo6fQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRkZXNjIGRvZXMgbm90IGVuYWJsZSBjb2xvciBieSBkZWZhdWx0IiAnCisJCWdpdCBsb2cgLS1mb3JtYXQ9JGNvbG9yIC0xID5hY3R1YWwgJiYKKwkJaGFzX25vX2NvbG9yIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRkZXNjIGVuYWJsZXMgY29sb3JzIGZvciBjb2xvci5kaWZmIiAnCisJCWdpdCAtYyBjb2xvci5kaWZmPWFsd2F5cyBsb2cgLS1mb3JtYXQ9JGNvbG9yIC0xID5hY3R1YWwgJiYKKwkJaGFzX2NvbG9yIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRkZXNjIGVuYWJsZXMgY29sb3JzIGZvciBjb2xvci51aSIgJworCQlnaXQgLWMgY29sb3IudWk9YWx3YXlzIGxvZyAtLWZvcm1hdD0kY29sb3IgLTEgPmFjdHVhbCAmJgorCQloYXNfY29sb3IgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGRlc2MgcmVzcGVjdHMgLS1jb2xvciIgJworCQlnaXQgbG9nIC0tZm9ybWF0PSRjb2xvciAtMSAtLWNvbG9yID5hY3R1YWwgJiYKKwkJaGFzX2NvbG9yIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRkZXNjIHJlc3BlY3RzIC0tbm8tY29sb3IiICcKKwkJZ2l0IC1jIGNvbG9yLnVpPWFsd2F5cyBsb2cgLS1mb3JtYXQ9JGNvbG9yIC0xIC0tbm8tY29sb3IgPmFjdHVhbCAmJgorCQloYXNfbm9fY29sb3IgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgIiRkZXNjIHJlc3BlY3RzIC0tY29sb3I9YXV0byAoc3Rkb3V0IGlzIHR0eSkiICcKKwkJdGVzdF90ZXJtaW5hbCBnaXQgbG9nIC0tZm9ybWF0PSRjb2xvciAtMSAtLWNvbG9yPWF1dG8gPmFjdHVhbCAmJgorCQloYXNfY29sb3IgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGRlc2MgcmVzcGVjdHMgLS1jb2xvcj1hdXRvIChzdGRvdXQgbm90IHR0eSkiICcKKwkJKAorCQkJVEVSTT12dDEwMCAmJiBleHBvcnQgVEVSTSAmJgorCQkJZ2l0IGxvZyAtLWZvcm1hdD0kY29sb3IgLTEgLS1jb2xvcj1hdXRvID5hY3R1YWwgJiYKKwkJCWhhc19ub19jb2xvciBhY3R1YWwKKwkJKQorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJUMoYWx3YXlzLC4uLikgZW5hYmxlcyBjb2xvciBldmVuIHdpdGhvdXQgdHR5JyAnCisJZ2l0IGxvZyAtLWZvcm1hdD0kQUxXQVlTX0NPTE9SIC0xID5hY3R1YWwgJiYKKwloYXNfY29sb3IgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVDKGF1dG8pIHJlc3BlY3RzIC0tY29sb3InICcKKwlnaXQgbG9nIC0tY29sb3IgLS1mb3JtYXQ9IiVDKGF1dG8pJUgiIC0xID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCWVjaG8gIjxZRUxMT1c+JChnaXQgcmV2LXBhcnNlIEhFQUQpPFJFU0VUPiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJUMoYXV0bykgcmVzcGVjdHMgLS1uby1jb2xvcicgJworCWdpdCBsb2cgLS1uby1jb2xvciAtLWZvcm1hdD0iJUMoYXV0byklSCIgLTEgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAlQyhhdXRvLC4uLikgcmVzcGVjdHMgLS1jb2xvcicgJworCWdpdCByZXYtbGlzdCAtLWNvbG9yIC0tZm9ybWF0PSIlQyhhdXRvLGdyZWVuKWZvbyVDKGF1dG8scmVzZXQpIiBcCisJCS0xIEhFQUQgPmFjdHVhbC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCTxHUkVFTj5mb288UkVTRVQ+CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+IGNvbW1pdC1tc2cgPDxFT0YKK1Rlc3QgcHJpbnRpbmcgb2YgY29tcGxleCBib2RpZXMKKworVGhpcyBjb21taXQgbWVzc2FnZSBpcyBtdWNoIGxvbmdlciB0aGFuIHRoZSBvdGhlcnMsCithbmQgaXQgd2lsbCBiZSBlbmNvZGVkIGluICR0ZXN0X2VuY29kaW5nLiBXZSBzaG91bGQgdGhlcmVmb3JlCitpbmNsdWRlIGFuIElTTzg4NTkgY2hhcmFjdGVyOiDCoWJ1ZW5vIQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbXBsZXggYm9keScgJworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkdGVzdF9lbmNvZGluZyAmJgorCWVjaG8gY2hhbmdlMiA+Zm9vICYmIGdpdCBjb21taXQgLWEgLUYgY29tbWl0LW1zZyAmJgorCWhlYWQzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWhlYWQzX3Nob3J0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRoZWFkMykKKycKKwordGVzdF9mb3JtYXQgY29tcGxleC1lbmNvZGluZyAlZSA8PEVPRgorY29tbWl0ICRoZWFkMworJHRlc3RfZW5jb2RpbmcKK2NvbW1pdCAkaGVhZDIKKyR0ZXN0X2VuY29kaW5nCitjb21taXQgJGhlYWQxCiskdGVzdF9lbmNvZGluZworRU9GCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtc3ViamVjdCAlcyA8PEVPRgorY29tbWl0ICRoZWFkMworVGVzdCBwcmludGluZyBvZiBjb21wbGV4IGJvZGllcworY29tbWl0ICRoZWFkMgorJGNoYW5nZWRfaXNvODg1OTEKK2NvbW1pdCAkaGVhZDEKKyRhZGRlZF9pc284ODU5MQorRU9GCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtc3ViamVjdC10cnVuYyAiJTwoJHRydW5jYXRlX2NvdW50LHRydW5jKSVzIiA8PEVPRgorY29tbWl0ICRoZWFkMworVGVzdCBwcmludGluZyBvZiBjLi4KK2NvbW1pdCAkaGVhZDIKK2NoYW5nZWQgKGdlJHtjaGFuZ2VkX3V0ZjhfcGFydF9pc284ODU5MX1uZGVydCkuLgorY29tbWl0ICRoZWFkMQorYWRkZWQgKGhpbnp1Z2VmJHthZGRlZF91dGY4X3BhcnRfaXNvODg1OTF9Z3QuLgorRU9GCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtc3ViamVjdC1tdHJ1bmMgIiU8KCR0cnVuY2F0ZV9jb3VudCxtdHJ1bmMpJXMiIDw8RU9GCitjb21taXQgJGhlYWQzCitUZXN0IHByaW4uLmV4IGJvZGllcworY29tbWl0ICRoZWFkMgorY2hhbmdlZCAoLi5kZXJ0KSBmb28KK2NvbW1pdCAkaGVhZDEKK2FkZGVkIChoaS4uZiR7YWRkZWRfdXRmOF9wYXJ0X2lzbzg4NTkxfWd0KSBmb28KK0VPRgorCit0ZXN0X2Zvcm1hdCBjb21wbGV4LXN1YmplY3QtbHRydW5jICIlPCgkdHJ1bmNhdGVfY291bnQsbHRydW5jKSVzIiA8PEVPRgorY29tbWl0ICRoZWFkMworLi4gb2YgY29tcGxleCBib2RpZXMKK2NvbW1pdCAkaGVhZDIKKy4uZ2VkIChnZSR7Y2hhbmdlZF91dGY4X3BhcnRfaXNvODg1OTF9bmRlcnQpIGZvbworY29tbWl0ICRoZWFkMQorLi4gKGhpbnp1Z2VmJHthZGRlZF91dGY4X3BhcnRfaXNvODg1OTF9Z3QpIGZvbworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZXhwZWN0ZWQgbWVzc2FnZXMgKGZvciB0ZXN0ICViKScgJworCWNhdCA8PC1FT0YgPmV4cGVjdGVkLnV0Zi04ICYmCisJY29tbWl0ICRoZWFkMworCVRoaXMgY29tbWl0IG1lc3NhZ2UgaXMgbXVjaCBsb25nZXIgdGhhbiB0aGUgb3RoZXJzLAorCWFuZCBpdCB3aWxsIGJlIGVuY29kZWQgaW4gJHRlc3RfZW5jb2RpbmcuIFdlIHNob3VsZCB0aGVyZWZvcmUKKwlpbmNsdWRlIGFuIElTTzg4NTkgY2hhcmFjdGVyOiDCoWJ1ZW5vIQorCisJY29tbWl0ICRoZWFkMgorCWNvbW1pdCAkaGVhZDEKKwlFT0YKKwlpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyBleHBlY3RlZC51dGYtOCA+ZXhwZWN0ZWQuSVNPODg1OS0xCisnCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtYm9keSAlYiA8ZXhwZWN0ZWQuSVNPODg1OS0xCisKKyMgR2l0IHVzZXMgaTE4bi5jb21taXRFbmNvZGluZyBpZiBubyBpMThuLmxvZ091dHB1dEVuY29kaW5nIHNldAorIyBzbyB1bnNldCBpMThuLmNvbW1pdEVuY29kaW5nIHRvIHRlc3QgZW5jb2RpbmcgY29udmVyc2lvbgorZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0RW5jb2RpbmcKKwordGVzdF9mb3JtYXQgY29tcGxleC1zdWJqZWN0LWNvbW1pdGVuY29kaW5nLXVuc2V0ICVzIDw8RU9GCitjb21taXQgJGhlYWQzCitUZXN0IHByaW50aW5nIG9mIGNvbXBsZXggYm9kaWVzCitjb21taXQgJGhlYWQyCiskY2hhbmdlZAorY29tbWl0ICRoZWFkMQorJGFkZGVkCitFT0YKKwordGVzdF9mb3JtYXQgY29tcGxleC1zdWJqZWN0LWNvbW1pdGVuY29kaW5nLXVuc2V0LXRydW5jICIlPCgkdHJ1bmNhdGVfY291bnQsdHJ1bmMpJXMiIDw8RU9GCitjb21taXQgJGhlYWQzCitUZXN0IHByaW50aW5nIG9mIGMuLgorY29tbWl0ICRoZWFkMgorY2hhbmdlZCAoZ2Uke2NoYW5nZWRfdXRmOF9wYXJ0fW5kZXJ0KS4uCitjb21taXQgJGhlYWQxCithZGRlZCAoaGluenVnZWYke2FkZGVkX3V0ZjhfcGFydH1ndC4uCitFT0YKKwordGVzdF9mb3JtYXQgY29tcGxleC1zdWJqZWN0LWNvbW1pdGVuY29kaW5nLXVuc2V0LW10cnVuYyAiJTwoJHRydW5jYXRlX2NvdW50LG10cnVuYyklcyIgPDxFT0YKK2NvbW1pdCAkaGVhZDMKK1Rlc3QgcHJpbi4uZXggYm9kaWVzCitjb21taXQgJGhlYWQyCitjaGFuZ2VkICguLmRlcnQpIGZvbworY29tbWl0ICRoZWFkMQorYWRkZWQgKGhpLi5mJHthZGRlZF91dGY4X3BhcnR9Z3QpIGZvbworRU9GCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtc3ViamVjdC1jb21taXRlbmNvZGluZy11bnNldC1sdHJ1bmMgIiU8KCR0cnVuY2F0ZV9jb3VudCxsdHJ1bmMpJXMiIDw8RU9GCitjb21taXQgJGhlYWQzCisuLiBvZiBjb21wbGV4IGJvZGllcworY29tbWl0ICRoZWFkMgorLi5nZWQgKGdlJHtjaGFuZ2VkX3V0ZjhfcGFydH1uZGVydCkgZm9vCitjb21taXQgJGhlYWQxCisuLiAoaGluenVnZWYke2FkZGVkX3V0ZjhfcGFydH1ndCkgZm9vCitFT0YKKwordGVzdF9mb3JtYXQgY29tcGxleC1ib2R5LWNvbW1pdGVuY29kaW5nLXVuc2V0ICViIDxleHBlY3RlZC51dGYtOAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcleDAwIHNob3dzIE5VTCcgJworCWVjaG8gID5leHBlY3QgY29tbWl0ICRoZWFkMyAmJgorCWVjaG8gPj5leHBlY3QgZm9vUWJhciAmJgorCWdpdCByZXYtbGlzdCAtMSAtLWZvcm1hdD1mb28leDAwYmFyIEhFQUQgPmFjdHVhbC5udWwgJiYKKwludWxfdG9fcSA8YWN0dWFsLm51bCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclYWQgcmVzcGVjdHMgLS1kYXRlPScgJworCWVjaG8gMjAwNS0wNC0wNyA+ZXhwZWN0LmFkLXNob3J0ICYmCisJZ2l0IGxvZyAtMSAtLWRhdGU9c2hvcnQgLS1wcmV0dHk9dGZvcm1hdDolYWQgPm91dHB1dC5hZC1zaG9ydCBtYXN0ZXIgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYWQtc2hvcnQgb3V0cHV0LmFkLXNob3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGVtYWlsJyAnCisJdGVzdF90aWNrICYmCisJQz0kKEdJVF9BVVRIT1JfRU1BSUw9IGdpdCBjb21taXQtdHJlZSBIRUFEXnt0cmVlfSA8L2Rldi9udWxsKSAmJgorCUE9JChnaXQgc2hvdyAtLXByZXR0eT1mb3JtYXQ6JWFuLCVhZSwlYWQlbiAtcyAkQykgJiYKKwl2ZXJib3NlIHRlc3QgIiRBIiA9ICIkR0lUX0FVVEhPUl9OQU1FLCxUaHUgQXByIDcgMTU6MTQ6MTMgMjAwNSAtMDcwMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsIExGIGJlZm9yZSBlbXB0eSAoMSknICcKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6IiVzJW4lLWIlblRoYW5rcyVuIiBIRUFEXl4gPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbCBMRiBiZWZvcmUgZW1wdHkgKDIpJyAnCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiIlcyVuJS1iJW5UaGFua3MlbiIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNiBhY3R1YWwgJiYKKwlncmVwICJeJCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBMRiBiZWZvcmUgbm9uLWVtcHR5ICgxKScgJworCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMlK2IlblRoYW5rcyVuIiBIRUFEXl4gPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBMRiBiZWZvcmUgbm9uLWVtcHR5ICgyKScgJworCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMlK2IlblRoYW5rcyVuIiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA2IGFjdHVhbCAmJgorCWdyZXAgIl4kIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIFNQIGJlZm9yZSBub24tZW1wdHkgKDEpJyAnCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiIlcyUgYlRoYW5rcyIgSEVBRF5eID5hY3R1YWwgJiYKKwl0ZXN0ICQod2MgLXcgPGFjdHVhbCkgPSAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBTUCBiZWZvcmUgbm9uLWVtcHR5ICgyKScgJworCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMlIHNUaGFua3MiIEhFQUReXiA+YWN0dWFsICYmCisJdGVzdCAkKHdjIC13IDxhY3R1YWwpID0gNgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFiYnJldicgJworCWVjaG8gU0hPUlQgU0hPUlQgU0hPUlQgPmV4cGVjdDIgJiYKKwllY2hvIExPTkcgTE9ORyBMT05HID5leHBlY3QzICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJWggJWggJWgiIEhFQUQgPmFjdHVhbDEgJiYKKwlnaXQgbG9nIC0xIC0tYWJicmV2PTUgLS1mb3JtYXQ9IiVoICVoICVoIiBIRUFEID5hY3R1YWwyICYmCisJZ2l0IGxvZyAtMSAtLWFiYnJldj01IC0tZm9ybWF0PSIlSCAlSCAlSCIgSEVBRCA+YWN0dWFsMyAmJgorCXNlZCAtZSAicy8kT0lEX1JFR0VYL0xPTkcvZyIgLWUgInMvJF94MDUvU0hPUlQvZyIgPGFjdHVhbDIgPmZ1enp5MiAmJgorCXNlZCAtZSAicy8kT0lEX1JFR0VYL0xPTkcvZyIgLWUgInMvJF94MDUvU0hPUlQvZyIgPGFjdHVhbDMgPmZ1enp5MyAmJgorCXRlc3RfY21wIGV4cGVjdDIgZnV6enkyICYmCisJdGVzdF9jbXAgZXhwZWN0MyBmdXp6eTMgJiYKKwkhIHRlc3RfY21wIGFjdHVhbDEgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclSCBpcyBub3QgYWZmZWN0ZWQgYnkgLS1hYmJyZXYtY29tbWl0JyAnCisJZXhwZWN0ZWQ9JCgoJCh0ZXN0X29pZCBoZXhzeikgKyAxKSkgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVIIC0tYWJicmV2LWNvbW1pdCAtLWFiYnJldj0yMCBIRUFEID5hY3R1YWwgJiYKKwlsZW49JCh3YyAtYyA8YWN0dWFsKSAmJgorCXRlc3QgJGxlbiA9ICRleHBlY3RlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclaCBpcyBub3QgYWZmZWN0ZWQgYnkgLS1hYmJyZXYtY29tbWl0JyAnCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0laCAtLWFiYnJldi1jb21taXQgLS1hYmJyZXY9MjAgSEVBRCA+YWN0dWFsICYmCisJbGVuPSQod2MgLWMgPGFjdHVhbCkgJiYKKwl0ZXN0ICRsZW4gPSAyMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciJWggJWdEOiAlZ3MiIGlzIHNhbWUgYXMgZ2l0LXJlZmxvZycgJworCWdpdCByZWZsb2cgPmV4cGVjdCAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9IiVoICVnRDogJWdzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciJWggJWdEOiAlZ3MiIGlzIHNhbWUgYXMgZ2l0LXJlZmxvZyAod2l0aCBkYXRlKScgJworCWdpdCByZWZsb2cgLS1kYXRlPXJhdyA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWggJWdEOiAlZ3MiIC0tZGF0ZT1yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIiVoICVnRDogJWdzIiBpcyBzYW1lIGFzIGdpdC1yZWZsb2cgKHdpdGggLS1hYmJyZXYpJyAnCisJZ2l0IHJlZmxvZyAtLWFiYnJldj0xMyAtLWRhdGU9cmF3ID5leHBlY3QgJiYKKwlnaXQgbG9nIC1nIC0tYWJicmV2PTEzIC0tZm9ybWF0PSIlaCAlZ0Q6ICVncyIgLS1kYXRlPXJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclZ2Qgc2hvcnRlbnMgcmVmIG5hbWUnICcKKwllY2hvICJtYXN0ZXJAezB9IiA+ZXhwZWN0LmdkLXNob3J0ICYmCisJZ2l0IGxvZyAtZyAtMSAtLWZvcm1hdD0lZ2QgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbC5nZC1zaG9ydCAmJgorCXRlc3RfY21wIGV4cGVjdC5nZC1zaG9ydCBhY3R1YWwuZ2Qtc2hvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmbG9nIGlkZW50aXR5JyAnCisJZWNobyAiJEdJVF9DT01NSVRURVJfTkFNRTokR0lUX0NPTU1JVFRFUl9FTUFJTCIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLWcgLTEgLS1mb3JtYXQ9IiVnbjolZ2UiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29uZWxpbmUgd2l0aCBlbXB0eSBtZXNzYWdlJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tY2xlYW51cD12ZXJiYXRpbSAtbSAiJExGIiAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgJiYKKwlnaXQgcmV2LWxpc3QgLS1vbmVsaW5lIEhFQUQgPnRlc3QudHh0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSB0ZXN0LnR4dCAmJgorCWdpdCByZXYtbGlzdCAtLW9uZWxpbmUgLS1ncmFwaCBIRUFEID50ZXN0Zy50eHQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IHRlc3RnLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUtY2hhcmFjdGVyIG5hbWUgaXMgcGFyc2VkIGNvcnJlY3RseScgJworCWdpdCBjb21taXQgLS1hdXRob3I9ImEgPGFAZXhhbXBsZS5jb20+IiAtLWFsbG93LWVtcHR5IC1tIGZvbyAmJgorCWVjaG8gImEgPGFAZXhhbXBsZS5jb20+IiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJWFuIDwlYWU+IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnVzZWQgJUcgcGxhY2Vob2xkZXJzIGFyZSBwYXNzZWQgdGhyb3VnaCcgJworCWVjaG8gIiVHWCAlRyIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVHWCAlRyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDA3LXJldi1saXN0LWNoZXJyeS1waWNrLWZpbGUuc2ggYi90L3Q2MDA3LXJldi1saXN0LWNoZXJyeS1waWNrLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjAyNjgzNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMDctcmV2LWxpc3QtY2hlcnJ5LXBpY2stZmlsZS5zaApAQCAtMCwwICsxLDI2OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHJldi1saXN0IC0tY2hlcnJ5LXBpY2sgLS0gZmlsZScKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgQS0tLUItLS1ELS0tRgorIyAgXAorIyAgIFwKKyMgICAgQy0tLUUKKyMKKyMgQiBjaGFuZ2VzIGEgZmlsZSBmb28uYywgYWRkaW5nIGEgbGluZSBvZiB0ZXh0LiAgQyBjaGFuZ2VzIGZvby5jIGFzCisjIHdlbGwgYXMgYmFyLmMsIGJ1dCB0aGUgY2hhbmdlIGluIGZvby5jIHdhcyBpZGVudGljYWwgdG8gY2hhbmdlIEIuCisjIEQgYW5kIEMgY2hhbmdlIGJhciBpbiB0aGUgc2FtZSB3YXksIEUgYW5kIEYgZGlmZmVyZW50bHkuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gSGFsbG8gPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkEiICYmCisJZ2l0IHRhZyBBICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCAmJgorCWVjaG8gQmVsbG8gPiBmb28gJiYKKwllY2hvIENlbGxvID4gYmFyICYmCisJZ2l0IGFkZCBmb28gYmFyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiQyIgJiYKKwlnaXQgdGFnIEMgJiYKKwllY2hvIERlbGxvID4gYmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJFIiAmJgorCWdpdCB0YWcgRSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgYnJhbmNoIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkIiICYmCisJZ2l0IHRhZyBCICYmCisJZWNobyBDZWxsbyA+IGJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiRCIgJiYKKwlnaXQgdGFnIEQgJiYKKwllY2hvIE5lbGxvID4gYmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJGIiAmJgorCWdpdCB0YWcgRgorJworCitjYXQgPmV4cGVjdCA8PEVPRgorPHRhZ3MvQgorPnRhZ3MvQworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbGVmdC1yaWdodCcgJworCWdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgQi4uLkMgPiBhY3R1YWwgJiYKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9Iip0YWdzLyoiIFwKKwkJPCBhY3R1YWwgPiBhY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLm5hbWVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY291bnQnICcKKwlnaXQgcmV2LWxpc3QgLS1jb3VudCBCLi4uQyA+IGFjdHVhbCAmJgorCXRlc3QgIiQoY2F0IGFjdHVhbCkiID0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeS1waWNrIGZvbyBjb21lcyB1cCBlbXB0eScgJworCXRlc3QgLXogIiQoZ2l0IHJldi1saXN0IC0tbGVmdC1yaWdodCAtLWNoZXJyeS1waWNrIEIuLi5DIC0tIGZvbykiCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCis+dGFncy9DCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktcGljayBiYXIgZG9lcyBub3QgY29tZSB1cCBlbXB0eScgJworCWdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1jaGVycnktcGljayBCLi4uQyAtLSBiYXIgPiBhY3R1YWwgJiYKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9Iip0YWdzLyoiIFwKKwkJPCBhY3R1YWwgPiBhY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLm5hbWVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhciBkb2VzIG5vdCBjb21lIHVwIGVtcHR5JyAnCisJZ2l0IHJldi1saXN0IC0tbGVmdC1yaWdodCBCLi4uQyAtLSBiYXIgPiBhY3R1YWwgJiYKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9Iip0YWdzLyoiIFwKKwkJPCBhY3R1YWwgPiBhY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLm5hbWVkCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCis8dGFncy9GCis+dGFncy9FCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktcGljayBiYXIgZG9lcyBub3QgY29tZSB1cCBlbXB0eSAoSUkpJyAnCisJZ2l0IHJldi1saXN0IC0tbGVmdC1yaWdodCAtLWNoZXJyeS1waWNrIEYuLi5FIC0tIGJhciA+IGFjdHVhbCAmJgorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz0iKnRhZ3MvKiIgXAorCQk8IGFjdHVhbCA+IGFjdHVhbC5uYW1lZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwubmFtZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmFtZS1yZXYgbXVsdGlwbGUgLS1yZWZzIGNvbWJpbmUgaW5jbHVzaXZlJyAnCisJZ2l0IHJldi1saXN0IC0tbGVmdC1yaWdodCAtLWNoZXJyeS1waWNrIEYuLi5FIC0tIGJhciA+YWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy9GIiAtLXJlZnM9Iip0YWdzL0UiIFwKKwkJPGFjdHVhbCA+YWN0dWFsLm5hbWVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5uYW1lZAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorPHRhZ3MvRgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25hbWUtcmV2IC0tcmVmcyBleGNsdWRlcyBub24tbWF0Y2hlZCBwYXR0ZXJucycgJworCWdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1yaWdodC1vbmx5IC0tY2hlcnJ5LXBpY2sgRi4uLkUgLS0gYmFyID4+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tbGVmdC1yaWdodCAtLWNoZXJyeS1waWNrIEYuLi5FIC0tIGJhciA+YWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy9GIiBcCisJCTxhY3R1YWwgPmFjdHVhbC5uYW1lZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwubmFtZWQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzx0YWdzL0YKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduYW1lLXJldiAtLWV4Y2x1ZGUgZXhjbHVkZXMgbWF0Y2hlZCBwYXR0ZXJucycgJworCWdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1yaWdodC1vbmx5IC0tY2hlcnJ5LXBpY2sgRi4uLkUgLS0gYmFyID4+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tbGVmdC1yaWdodCAtLWNoZXJyeS1waWNrIEYuLi5FIC0tIGJhciA+YWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy8qIiAtLWV4Y2x1ZGU9IipFIiBcCisJCTxhY3R1YWwgPmFjdHVhbC5uYW1lZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwubmFtZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmFtZS1yZXYgLS1uby1yZWZzIGNsZWFycyB0aGUgcmVmcyBsaXN0JyAnCisJZ2l0IHJldi1saXN0IC0tbGVmdC1yaWdodCAtLWNoZXJyeS1waWNrIEYuLi5FIC0tIGJhciA+ZXhwZWN0ICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy9GIiAtLXJlZnM9Iip0YWdzL0UiIC0tbm8tcmVmcyAtLXJlZnM9Iip0YWdzL0ciIFwKKwkJPGV4cGVjdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorK3RhZ3MvRgorPXRhZ3MvRAorK3RhZ3MvRQorPXRhZ3MvQworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LW1hcmsnICcKKwlnaXQgcmV2LWxpc3QgLS1jaGVycnktbWFyayBGLi4uRSAtLSBiYXIgPiBhY3R1YWwgJiYKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9Iip0YWdzLyoiIFwKKwkJPCBhY3R1YWwgPiBhY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLm5hbWVkCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCis8dGFncy9GCis9dGFncy9ECis+dGFncy9FCis9dGFncy9DCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktbWFyayAtLWxlZnQtcmlnaHQnICcKKwlnaXQgcmV2LWxpc3QgLS1jaGVycnktbWFyayAtLWxlZnQtcmlnaHQgRi4uLkUgLS0gYmFyID4gYWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy8qIiBcCisJCTwgYWN0dWFsID4gYWN0dWFsLm5hbWVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5uYW1lZAorJworCitjYXQgPmV4cGVjdCA8PEVPRgordGFncy9FCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktcGljayAtLXJpZ2h0LW9ubHknICcKKwlnaXQgcmV2LWxpc3QgLS1jaGVycnktcGljayAtLXJpZ2h0LW9ubHkgRi4uLkUgLS0gYmFyID4gYWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy8qIiBcCisJCTwgYWN0dWFsID4gYWN0dWFsLm5hbWVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5uYW1lZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeS1waWNrIC0tbGVmdC1vbmx5JyAnCisJZ2l0IHJldi1saXN0IC0tY2hlcnJ5LXBpY2sgLS1sZWZ0LW9ubHkgRS4uLkYgLS0gYmFyID4gYWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy8qIiBcCisJCTwgYWN0dWFsID4gYWN0dWFsLm5hbWVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5uYW1lZAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorK3RhZ3MvRQorPXRhZ3MvQworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5JyAnCisJZ2l0IHJldi1saXN0IC0tY2hlcnJ5IEYuLi5FIC0tIGJhciA+IGFjdHVhbCAmJgorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz0iKnRhZ3MvKiIgXAorCQk8IGFjdHVhbCA+IGFjdHVhbC5uYW1lZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwubmFtZWQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzEJMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5IC0tY291bnQnICcKKwlnaXQgcmV2LWxpc3QgLS1jaGVycnkgLS1jb3VudCBGLi4uRSAtLSBiYXIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisyCTIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeS1tYXJrIC0tY291bnQnICcKKwlnaXQgcmV2LWxpc3QgLS1jaGVycnktbWFyayAtLWNvdW50IEYuLi5FIC0tIGJhciA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzEJMQkyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktbWFyayAtLWxlZnQtcmlnaHQgLS1jb3VudCcgJworCWdpdCByZXYtbGlzdCAtLWNoZXJyeS1tYXJrIC0tbGVmdC1yaWdodCAtLWNvdW50IEYuLi5FIC0tIGJhciA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktcGljayB3aXRoIGluZGVwZW5kZW50LCBidXQgaWRlbnRpY2FsIGJyYW5jaGVzJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvaW5kZXBlbmRlbnQgJiYKKwlybSAuZ2l0L2luZGV4ICYmCisJZWNobyBIYWxsbyA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5kZXBlbmRlbnQiICYmCisJZWNobyBCZWxsbyA+IGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImluZGVwZW5kZW50LCB0b28iIGZvbyAmJgorCXRlc3QgLXogIiQoZ2l0IHJldi1saXN0IC0tbGVmdC1yaWdodCAtLWNoZXJyeS1waWNrIFwKKwkJSEVBRC4uLm1hc3RlciAtLSBmb28pIgorJworCitjYXQgPmV4cGVjdCA8PEVPRgorMQkyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb3VudCAtLWxlZnQtcmlnaHQnICcKKwlnaXQgcmV2LWxpc3QgLS1jb3VudCAtLWxlZnQtcmlnaHQgQy4uLkQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgQ29ycnVwdCB0aGUgb2JqZWN0IHN0b3JlIGRlbGliZXJhdGVseSB0byBtYWtlIHN1cmUKKyMgdGhlIG9iamVjdCBpcyBub3QgZXZlbiBjaGVja2VkIGZvciBpdHMgZXhpc3RlbmNlLgorcmVtb3ZlX2xvb3NlX29iamVjdCAoKSB7CisJc2hhMT0iJChnaXQgcmV2LXBhcnNlICIkMSIpIiAmJgorCXJlbWFpbmRlcj0ke3NoYTEjPz99ICYmCisJZmlyc3R0d289JHtzaGExJSRyZW1haW5kZXJ9ICYmCisJcm0gLmdpdC9vYmplY3RzLyRmaXJzdHR3by8kcmVtYWluZGVyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LXBpY2sgYXZvaWRzIGxvb2tpbmcgYXQgZnVsbCBkaWZmcycgJworCWdpdCBjaGVja291dCAtYiBzaHktZGlmZiAmJgorCXRlc3RfY29tbWl0IGRvbnQtbG9vay1hdC1tZSAmJgorCWVjaG8gSGVsbG8gPmRvbnQtbG9vay1hdC1tZS50ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0aXAgZG9udC1sb29rLWF0LW1lLnQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFpbmxpbmUgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCB0by1jaGVycnktcGljayAmJgorCXJlbW92ZV9sb29zZV9vYmplY3Qgc2h5LWRpZmZeOmRvbnQtbG9vay1hdC1tZS50ICYmCisJZ2l0IHJldi1saXN0IC0tY2hlcnJ5LXBpY2sgLi4uc2h5LWRpZmYKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDA4LXJldi1saXN0LXN1Ym1vZHVsZS5zaCBiL3QvdDYwMDgtcmV2LWxpc3Qtc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0YWY5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDA4LXJldi1saXN0LXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDQyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJldi1saXN0IGludm9sdmluZyBzdWJtb2R1bGVzIHRoYXQgdGhpcyByZXBvIGhhcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJOiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvIDEgPiBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgZmlsZSAmJgorCWVjaG8gMiA+IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHRoaXJkIGZpbGUgJiYKKworCXJtIC5naXQvaW5kZXggJiYKKworCTogPiBzdXBlci1maWxlICYmCisJZ2l0IGFkZCBzdXBlci1maWxlICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgIiQocHdkKSIgc3ViICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvc3VwZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHN1cGVyLWluaXRpYWwgJiYKKwllY2hvIDEgPiBzdXBlci1maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzdXBlci1maXJzdCBzdXBlci1maWxlICYmCisJZWNobyAyID4gc3VwZXItZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc3VwZXItc2Vjb25kIHN1cGVyLWZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiSWxhcmkncyB0ZXN0IiAnCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBzdXBlciBtYXN0ZXIgXnN1cGVyXgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDktcmV2LWxpc3QtcGFyZW50LnNoIGIvdC90NjAwOS1yZXYtbGlzdC1wYXJlbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTE2ZDk2OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMDktcmV2LWxpc3QtcGFyZW50LnNoCkBAIC0wLDAgKzEsMTQ5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYW5jZXN0b3IgY3VsbGluZyBhbmQgbGltaXRpbmcgYnkgcGFyZW50IG51bWJlcicKKworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX3Jldmxpc3QgKCkgeworCXJldl9saXN0X2FyZ3M9IiQxIiAmJgorCXNoaWZ0ICYmCisJZ2l0IHJldi1wYXJzZSAiJEAiID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgJHJldl9saXN0X2FyZ3MgLS1hbGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwl0b3VjaCBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKworCXRlc3RfdGljaz0kKCgkdGVzdF90aWNrIC0gMjQwMCkpICYmCisKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCXRlc3RfY29tbWl0IGZvdXIgJiYKKworCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25lIGlzIGFuY2VzdG9yIG9mIG90aGVycyBhbmQgc2hvdWxkIG5vdCBiZSBzaG93bicgJworCisJZ2l0IHJldi1saXN0IG9uZSAtLW5vdCBmb3VyID5yZXN1bHQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgcmVzdWx0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcm9vdHMsIG1lcmdlcyBhbmQgb2N0b3B1c2VzJyAnCisKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3cm9vdCAmJgorCXRlc3RfY29tbWl0IGZpdmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZWJyYW5jaCB0d28gJiYKKwl0ZXN0X2NvbW1pdCBzaXggJiYKKwlnaXQgY2hlY2tvdXQgLWIgYW5vdGhlcmJyYW5jaCB0aHJlZSAmJgorCXRlc3RfY29tbWl0IHNldmVuICYmCisJZ2l0IGNoZWNrb3V0IC1iIHlldGFub3RoZXJicmFuY2ggZm91ciAmJgorCXRlc3RfY29tbWl0IGVpZ2h0ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgLW0gbm9ybWFsbWVyZ2UgbmV3cm9vdCAmJgorCWdpdCB0YWcgbm9ybWFsbWVyZ2UgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLW0gdHJpcHVzIHNpZGVicmFuY2ggYW5vdGhlcmJyYW5jaCAmJgorCWdpdCB0YWcgdHJpcHVzICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRldHJhYnJhbmNoIG5vcm1hbG1lcmdlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1tIHRldHJhcHVzIHNpZGVicmFuY2ggYW5vdGhlcmJyYW5jaCB5ZXRhbm90aGVyYnJhbmNoICYmCisJZ2l0IHRhZyB0ZXRyYXB1cyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgcm9vdHMnICcKKworCWNoZWNrX3Jldmxpc3QgIi0tbWF4LXBhcmVudHM9MCIgb25lIGZpdmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgbm8gbWVyZ2VzJyAnCisKKwljaGVja19yZXZsaXN0ICItLW1heC1wYXJlbnRzPTEiIG9uZSBlaWdodCBzZXZlbiBzaXggZml2ZSBmb3VyIHRocmVlIHR3byAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbm8tbWVyZ2VzIiBvbmUgZWlnaHQgc2V2ZW4gc2l4IGZpdmUgZm91ciB0aHJlZSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgbm8gb2N0b3B1c2VzJyAnCisKKwljaGVja19yZXZsaXN0ICItLW1heC1wYXJlbnRzPTIiIG9uZSBub3JtYWxtZXJnZSBlaWdodCBzZXZlbiBzaXggZml2ZSBmb3VyIHRocmVlIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBubyByb290cycgJworCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0xIiB0ZXRyYXB1cyB0cmlwdXMgbm9ybWFsbWVyZ2UgZWlnaHQgc2V2ZW4gc2l4IGZvdXIgdGhyZWUgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG1lcmdlcycgJworCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0yIiB0ZXRyYXB1cyB0cmlwdXMgbm9ybWFsbWVyZ2UgJiYKKwljaGVja19yZXZsaXN0ICItLW1lcmdlcyIgdGV0cmFwdXMgdHJpcHVzIG5vcm1hbG1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG9jdG9wdXMnICcKKworCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MyIgdGV0cmFwdXMgdHJpcHVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG9yZGluYXJ5IGNvbW1pdHMnICcKKworCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MSAtLW1heC1wYXJlbnRzPTEiIGVpZ2h0IHNldmVuIHNpeCBmb3VyIHRocmVlIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLW1lcmdlcyAtLW5vLW1lcmdlcyB5aWVsZHMgZW1wdHkgc2V0JyAnCisKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTIgLS1uby1tZXJnZXMiICYmCisJY2hlY2tfcmV2bGlzdCAiLS1tZXJnZXMgLS1uby1tZXJnZXMiICYmCisJY2hlY2tfcmV2bGlzdCAiLS1uby1tZXJnZXMgLS1tZXJnZXMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG92ZXJyaWRlIGFuZCBpbmZpbml0aWVzJyAnCisKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTIgLS1tYXgtcGFyZW50cz0xIC0tbWF4LXBhcmVudHM9MyIgdHJpcHVzIG5vcm1hbG1lcmdlICYmCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0xIC0tbWluLXBhcmVudHM9MiAtLW1heC1wYXJlbnRzPTciIHRldHJhcHVzIHRyaXB1cyBub3JtYWxtZXJnZSAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MiAtLW1heC1wYXJlbnRzPTgiIHRldHJhcHVzIHRyaXB1cyBub3JtYWxtZXJnZSAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MiAtLW1heC1wYXJlbnRzPS0xIiB0ZXRyYXB1cyB0cmlwdXMgbm9ybWFsbWVyZ2UgJiYKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTIgLS1uby1tYXgtcGFyZW50cyIgdGV0cmFwdXMgdHJpcHVzIG5vcm1hbG1lcmdlICYmCisJY2hlY2tfcmV2bGlzdCAiLS1tYXgtcGFyZW50cz0wIC0tbWluLXBhcmVudHM9MSAtLW5vLW1pbi1wYXJlbnRzIiBvbmUgZml2ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkb2RlY2FwdXMnICcKKworCXJvb3RzPSAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExCisJZG8KKwkJZ2l0IGNoZWNrb3V0IC1iIHJvb3QkaSBmaXZlICYmCisJCXRlc3RfY29tbWl0ICRpICYmCisJCXJvb3RzPSIkcm9vdHMgcm9vdCRpIiB8fAorCQlyZXR1cm4KKwlkb25lICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtbSBkb2RlY2FwdXMgJHJvb3RzICYmCisJZ2l0IHRhZyBkb2RlY2FwdXMgJiYKKworCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9NCIgZG9kZWNhcHVzIHRldHJhcHVzICYmCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz04IiBkb2RlY2FwdXMgJiYKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTEyIiBkb2RlY2FwdXMgJiYKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTEzIiAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9NCAtLW1heC1wYXJlbnRzPTExIiB0ZXRyYXB1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbmNlc3RvcnMgd2l0aCB0aGUgc2FtZSBjb21taXQgdGltZScgJworCisJdGVzdF90aWNrX2tlZXA9JHRlc3RfdGljayAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgODsgZG8KKwkJdGVzdF90aWNrPSR0ZXN0X3RpY2tfa2VlcAorCQl0ZXN0X2NvbW1pdCB0JGkKKwlkb25lICYmCisJZ2l0IHJldi1saXN0IHQxXiEgLS1ub3QgdCRpID5yZXN1bHQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgcmVzdWx0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAxMC1tZXJnZS1iYXNlLnNoIGIvdC90NjAxMC1tZXJnZS1iYXNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ0YzcyNmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDEwLW1lcmdlLWJhc2Uuc2gKQEAgLTAsMCArMSwzMDggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nTWVyZ2UgYmFzZSBhbmQgcGFyZW50IGxpc3QgY29tcHV0YXRpb24uCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitNPTExMzAwMDAwMDAKK1o9KzAwMDAKKworR0lUX0NPTU1JVFRFUl9FTUFJTD1naXRAY29tbS5pdGVyLnh6CitHSVRfQ09NTUlUVEVSX05BTUU9J0MgTyBNbWl0ZXInCitHSVRfQVVUSE9SX05BTUU9J0EgVSBUaG9yJworR0lUX0FVVEhPUl9FTUFJTD1naXRAYXUudGhvci54egorZXhwb3J0IEdJVF9DT01NSVRURVJfRU1BSUwgR0lUX0NPTU1JVFRFUl9OQU1FIEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMCisKK2RvaXQgKCkgeworCU9GRlNFVD0kMSAmJgorCU5BTUU9JDIgJiYKKwlzaGlmdCAyICYmCisKKwlQQVJFTlRTPSAmJgorCWZvciBQCisJZG8KKwkJUEFSRU5UUz0iJHtQQVJFTlRTfS1wICRQICIKKwlkb25lICYmCisKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IiQoKCRNICsgJE9GRlNFVCkpICRaIiAmJgorCUdJVF9BVVRIT1JfREFURT0kR0lUX0NPTU1JVFRFUl9EQVRFICYmCisJZXhwb3J0IEdJVF9DT01NSVRURVJfREFURSBHSVRfQVVUSE9SX0RBVEUgJiYKKworCWNvbW1pdD0kKGVjaG8gJE5BTUUgfCBnaXQgY29tbWl0LXRyZWUgJFQgJFBBUkVOVFMpICYmCisKKwlnaXQgdXBkYXRlLXJlZiAicmVmcy90YWdzLyROQU1FIiAiJGNvbW1pdCIgJiYKKwllY2hvICRjb21taXQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlUPSQoZ2l0IG1rdHJlZSA8L2Rldi9udWxsKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgRyBhbmQgSCcgJworCSMgRS0tLUQtLS1DLS0tQi0tLUEKKwkjIFwiLV8gICAgICAgICBcICAgXAorCSMgIFwgIGAtLS0tLS0tLS1HICAgXAorCSMgICBcICAgICAgICAgICAgICAgIFwKKwkjICAgIEYtLS0tLS0tLS0tLS0tLS0tSAorCUU9JChkb2l0IDUgRSkgJiYKKwlEPSQoZG9pdCA0IEQgJEUpICYmCisJRj0kKGRvaXQgNiBGICRFKSAmJgorCUM9JChkb2l0IDMgQyAkRCkgJiYKKwlCPSQoZG9pdCAyIEIgJEMpICYmCisJQT0kKGRvaXQgMSBBICRCKSAmJgorCUc9JChkb2l0IDcgRyAkQiAkRSkgJiYKKwlIPSQoZG9pdCA4IEggJEEgJEYpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLWJhc2UgRyBIJyAnCisJZ2l0IG5hbWUtcmV2ICRCID5leHBlY3RlZCAmJgorCisJTUI9JChnaXQgbWVyZ2UtYmFzZSBHIEgpICYmCisJZ2l0IG5hbWUtcmV2ICIkTUIiID5hY3R1YWwuc2luZ2xlICYmCisKKwlNQj0kKGdpdCBtZXJnZS1iYXNlIC0tYWxsIEcgSCkgJiYKKwlnaXQgbmFtZS1yZXYgIiRNQiIgPmFjdHVhbC5hbGwgJiYKKworCU1CPSQoZ2l0IHNob3ctYnJhbmNoIC0tbWVyZ2UtYmFzZSBHIEgpICYmCisJZ2l0IG5hbWUtcmV2ICIkTUIiID5hY3R1YWwuc2IgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC5zaW5nbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwuYWxsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsLnNiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLWJhc2Uvc2hvdy1icmFuY2ggLS1pbmRlcGVuZGVudCcgJworCWdpdCBuYW1lLXJldiAiJEgiID5leHBlY3RlZDEgJiYKKwlnaXQgbmFtZS1yZXYgIiRIIiAiJEciID5leHBlY3RlZDIgJiYKKworCXBhcmVudHM9JChnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IEgpICYmCisJZ2l0IG5hbWUtcmV2ICRwYXJlbnRzID5hY3R1YWwxLm1iICYmCisJcGFyZW50cz0kKGdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgQSBIIEcpICYmCisJZ2l0IG5hbWUtcmV2ICRwYXJlbnRzID5hY3R1YWwyLm1iICYmCisKKwlwYXJlbnRzPSQoZ2l0IHNob3ctYnJhbmNoIC0taW5kZXBlbmRlbnQgSCkgJiYKKwlnaXQgbmFtZS1yZXYgJHBhcmVudHMgPmFjdHVhbDEuc2IgJiYKKwlwYXJlbnRzPSQoZ2l0IHNob3ctYnJhbmNoIC0taW5kZXBlbmRlbnQgQSBIIEcpICYmCisJZ2l0IG5hbWUtcmV2ICRwYXJlbnRzID5hY3R1YWwyLnNiICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZDEgYWN0dWFsMS5tYiAmJgorCXRlc3RfY21wIGV4cGVjdGVkMiBhY3R1YWwyLm1iICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQxIGFjdHVhbDEuc2IgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDIgYWN0dWFsMi5zYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnN5bmNocm9uaXplZCBjbG9ja3MnICcKKwkjIFRoaXMgdGVzdCBpcyB0byBkZW1vbnN0cmF0ZSB0aGF0IHJlbHlpbmcgb24gdGltZXN0YW1wcyBpbiBhIGRpc3RyaWJ1dGVkCisJIyBTQ00gdG8gcHJvdmlkZSBhIF9jb25zaXN0ZW50XyBwYXJ0aWFsIG9yZGVyaW5nIG9mIGNvbW1pdHMgbGVhZHMgdG8KKwkjIGluc2FuaXR5LgorCSMKKwkjICAgICAgICAgICAgICAgUmVsYXRpdmUKKwkjIFN0cnVjdHVyZSAgICAgdGltZXN0YW1wcworCSMKKwkjICAgUEwgIFBSICAgICAgICArNCAgKzQKKwkjICAvICBcLyAgXCAgICAgIC8gIFwvICBcCisJIyBMMiAgQzIgIFIyICAgICszICAtMSAgKzMKKwkjIHwgICB8ICAgfCAgICAgfCAgIHwgICB8CisJIyBMMSAgQzEgIFIxICAgICsyICAtMiAgKzIKKwkjIHwgICB8ICAgfCAgICAgfCAgIHwgICB8CisJIyBMMCAgQzAgIFIwICAgICsxICAtMyAgKzEKKwkjICAgXCB8ICAvICAgICAgICBcIHwgIC8KKwkjICAgICBTICAgICAgICAgICAgIDAKKwkjCisJIyBUaGUgbGVmdCBhbmQgcmlnaHQgY2hhaW5zIG9mIGNvbW1pdHMgY2FuIGJlIG9mIGFueSBsZW5ndGggYW5kIGNvbXBsZXhpdHkgYXMKKwkjIGxvbmcgYXMgYWxsIG9mIHRoZSB0aW1lc3RhbXBzIGFyZSBncmVhdGVyIHRoYW4gdGhhdCBvZiBTLgorCisJUz0kKGRvaXQgIDAgUykgJiYKKworCUMwPSQoZG9pdCAtMyBDMCAkUykgJiYKKwlDMT0kKGRvaXQgLTIgQzEgJEMwKSAmJgorCUMyPSQoZG9pdCAtMSBDMiAkQzEpICYmCisKKwlMMD0kKGRvaXQgIDEgTDAgJFMpICYmCisJTDE9JChkb2l0ICAyIEwxICRMMCkgJiYKKwlMMj0kKGRvaXQgIDMgTDIgJEwxKSAmJgorCisJUjA9JChkb2l0ICAxIFIwICRTKSAmJgorCVIxPSQoZG9pdCAgMiBSMSAkUjApICYmCisJUjI9JChkb2l0ICAzIFIyICRSMSkgJiYKKworCVBMPSQoZG9pdCAgNCBQTCAkTDIgJEMyKSAmJgorCVBSPSQoZG9pdCAgNCBQUiAkQzIgJFIyKSAmJgorCisJZ2l0IG5hbWUtcmV2ICRDMiA+ZXhwZWN0ZWQgJiYKKworCU1CPSQoZ2l0IG1lcmdlLWJhc2UgUEwgUFIpICYmCisJZ2l0IG5hbWUtcmV2ICIkTUIiID5hY3R1YWwuc2luZ2xlICYmCisKKwlNQj0kKGdpdCBtZXJnZS1iYXNlIC0tYWxsIFBMIFBSKSAmJgorCWdpdCBuYW1lLXJldiAiJE1CIiA+YWN0dWFsLmFsbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsLnNpbmdsZSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC5hbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pbmRlcGVuZGVudCB3aXRoIHVuc3luY2hyb25pemVkIGNsb2NrcycgJworCUlCPSQoZG9pdCAwIElCKSAmJgorCUkxPSQoZG9pdCAtMTAgSTEgJElCKSAmJgorCUkyPSQoZG9pdCAgLTkgSTIgJEkxKSAmJgorCUkzPSQoZG9pdCAgLTggSTMgJEkyKSAmJgorCUk0PSQoZG9pdCAgLTcgSTQgJEkzKSAmJgorCUk1PSQoZG9pdCAgLTYgSTUgJEk0KSAmJgorCUk2PSQoZG9pdCAgLTUgSTYgJEk1KSAmJgorCUk3PSQoZG9pdCAgLTQgSTcgJEk2KSAmJgorCUk4PSQoZG9pdCAgLTMgSTggJEk3KSAmJgorCUlIPSQoZG9pdCAgLTIgSUggJEk4KSAmJgorCisJZWNobyAkSUggPmV4cGVjdGVkICYmCisJZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCBJQiBJSCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLWJhc2UgZm9yIG9jdG9wdXMtc3RlcCAoc2V0dXApJyAnCisJIyBBbm90aGVyIHNldCB0byBkZW1vbnN0cmF0ZSBiYXNlIGJldHdlZW4gb25lIGNvbW1pdCBhbmQgYSBtZXJnZQorCSMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisJIworCSMgKiBDIChNTUMpICogQiAoTU1CKSAqIEEgIChNTUEpCisJIyAqIG8gICAgICAgKiBvICAgICAgICogbworCSMgKiBvICAgICAgICogbyAgICAgICAqIG8KKwkjICogbyAgICAgICAqIG8gICAgICAgKiBvCisJIyAqIG8gICAgICAgfCBfX19fX19fLworCSMgfCAgICAgICAgIHwvCisJIyB8ICAgICAgICAgKiAxIChNTTEpCisJIyB8IF9fX19fX18vCisJIyB8LworCSMgKiByb290IChNTVIpCisKKwl0ZXN0X2NvbW1pdCBNTVIgJiYKKwl0ZXN0X2NvbW1pdCBNTTEgJiYKKwl0ZXN0X2NvbW1pdCBNTS1vICYmCisJdGVzdF9jb21taXQgTU0tcCAmJgorCXRlc3RfY29tbWl0IE1NLXEgJiYKKwl0ZXN0X2NvbW1pdCBNTUEgJiYKKwlnaXQgY2hlY2tvdXQgTU0xICYmCisJdGVzdF9jb21taXQgTU0tciAmJgorCXRlc3RfY29tbWl0IE1NLXMgJiYKKwl0ZXN0X2NvbW1pdCBNTS10ICYmCisJdGVzdF9jb21taXQgTU1CICYmCisJZ2l0IGNoZWNrb3V0IE1NUiAmJgorCXRlc3RfY29tbWl0IE1NLXUgJiYKKwl0ZXN0X2NvbW1pdCBNTS12ICYmCisJdGVzdF9jb21taXQgTU0tdyAmJgorCXRlc3RfY29tbWl0IE1NLXggJiYKKwl0ZXN0X2NvbW1pdCBNTUMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtYmFzZSBBIEIgQycgJworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgTU0xID5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgTU1SID5leHBlY3RlZC5zYiAmJgorCisJZ2l0IG1lcmdlLWJhc2UgLS1hbGwgTU1BIE1NQiBNTUMgPmFjdHVhbCAmJgorCWdpdCBtZXJnZS1iYXNlIC0tYWxsIC0tb2N0b3B1cyBNTUEgTU1CIE1NQyA+YWN0dWFsLmNvbW1vbiAmJgorCWdpdCBzaG93LWJyYW5jaCAtLW1lcmdlLWJhc2UgTU1BIE1NQiBNTUMgPmFjdHVhbC5zYiAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc2IgYWN0dWFsLmNvbW1vbiAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnNiIGFjdHVhbC5zYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmlzcy1jcm9zcyBtZXJnZS1iYXNlIGZvciBvY3RvcHVzLXN0ZXAnICcKKwlnaXQgcmVzZXQgLS1oYXJkIE1NUiAmJgorCXRlc3RfY29tbWl0IENDMSAmJgorCWdpdCByZXNldCAtLWhhcmQgRSAmJgorCXRlc3RfY29tbWl0IENDMiAmJgorCXRlc3RfdGljayAmJgorCSMgRSBpcyBhIHJvb3QgY29tbWl0IHVucmVsYXRlZCB0byBNTVIgcm9vdCBvbiB3aGljaCBDQzEgaXMgYmFzZWQKKwlnaXQgbWVyZ2UgLXMgb3VycyAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgQ0MxICYmCisJdGVzdF9jb21taXQgQ0MtbyAmJgorCXRlc3RfY29tbWl0IENDQiAmJgorCWdpdCByZXNldCAtLWhhcmQgQ0MxICYmCisJIyBFIGlzIGEgcm9vdCBjb21taXQgdW5yZWxhdGVkIHRvIE1NUiByb290IG9uIHdoaWNoIENDMSBpcyBiYXNlZAorCWdpdCBtZXJnZSAtcyBvdXJzIC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyBDQzIgJiYKKwl0ZXN0X2NvbW1pdCBDQ0EgJiYKKworCWdpdCByZXYtcGFyc2UgQ0MxIENDMiA+ZXhwZWN0ZWQgJiYKKwlnaXQgbWVyZ2UtYmFzZSAtLWFsbCBDQ0IgQ0NBXl4gQ0NBXl4yID5hY3R1YWwgJiYKKworCXNvcnQgZXhwZWN0ZWQgPmV4cGVjdGVkLnNvcnRlZCAmJgorCXNvcnQgYWN0dWFsID5hY3R1YWwuc29ydGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc29ydGVkIGFjdHVhbC5zb3J0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgcmVmbG9nIHRvIGZpbmQgdGhlIGZvcmsgcG9pbnQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJhc2UgJEUgJiYKKworCSgKKwkJZm9yIGNvdW50IGluIDEgMiAzCisJCWRvCisJCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIkJhc2UgY29tbWl0ICMkY291bnQiICYmCisJCQlnaXQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdCRjb3VudCAmJgorCQkJZ2l0IGNoZWNrb3V0IC1CIGRlcml2ZWQgJiYKKwkJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiRGVyaXZlZCAjJGNvdW50IiAmJgorCQkJZ2l0IHJldi1wYXJzZSBIRUFEID5kZXJpdmVkJGNvdW50ICYmCisJCQlnaXQgY2hlY2tvdXQgLUIgYmFzZSAkRSB8fCBleGl0IDEKKwkJZG9uZSAmJgorCisJCWZvciBjb3VudCBpbiAxIDIgMworCQlkbworCQkJZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IGJhc2UgJChjYXQgZGVyaXZlZCRjb3VudCkgPmFjdHVhbCAmJgorCQkJdGVzdF9jbXAgZXhwZWN0JGNvdW50IGFjdHVhbCB8fCBleGl0IDEKKwkJZG9uZQorCisJKSAmJgorCSMgY2hlY2sgdGhhdCB3ZSBjb3JyZWN0bHkgZGVmYXVsdCB0byBIRUFECisJZ2l0IGNoZWNrb3V0IGRlcml2ZWQgJiYKKwlnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgYmFzZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0MyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1mb3JrLXBvaW50IHdvcmtzIHdpdGggZW1wdHkgcmVmbG9nJyAnCisJZ2l0IC1jIGNvcmUubG9nYWxscmVmdXBkYXRlcz1mYWxzZSBicmFuY2ggbm8tcmVmbG9nIGJhc2UgJiYKKwlnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgbm8tcmVmbG9nIGRlcml2ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QzIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1iYXNlIC0tb2N0b3B1cyAtLWFsbCBmb3IgY29tcGxleCB0cmVlJyAnCisJIyBCZXN0IGNvbW1vbiBhbmNlc3RvciBmb3IgSkUsIEpBQSBhbmQgSkREIGlzIEpDCisJIyAgICAgICAgICAgICBKRQorCSMgICAgICAgICAgICAvIHwKKwkjICAgICAgICAgICAvICB8CisJIyAgICAgICAgICAvICAgfAorCSMgIEpBQSAgICAvICAgIHwKKwkjICAgfFwgICAvICAgICB8CisJIyAgIHwgXCAgfCBKREQgfAorCSMgICB8ICBcIHwvIHwgIHwKKwkjICAgfCAgIEpDIEpEICB8CisJIyAgIHwgICAgfCAvfCAgfAorCSMgICB8ICAgIHwvIHwgIHwKKwkjICBKQSAgICB8ICB8ICB8CisJIyAgIHxcICAvfCAgfCAgfAorCSMgICBYIEpCIHwgIFggIFgKKwkjICAgXCAgXCB8IC8gICAvCisJIyAgICBcX19cfC9fX18vCisJIyAgICAgICAgSgorCXRlc3RfY29tbWl0IEogJiYKKwl0ZXN0X2NvbW1pdCBKQiAmJgorCWdpdCByZXNldCAtLWhhcmQgSiAmJgorCXRlc3RfY29tbWl0IEpDICYmCisJZ2l0IHJlc2V0IC0taGFyZCBKICYmCisJdGVzdF9jb21taXQgSlRFTVAxICYmCisJdGVzdF9tZXJnZSBKQSBKQiAmJgorCXRlc3RfbWVyZ2UgSkFBIEpDICYmCisJZ2l0IHJlc2V0IC0taGFyZCBKICYmCisJdGVzdF9jb21taXQgSlRFTVAyICYmCisJdGVzdF9tZXJnZSBKRCBKQiAmJgorCXRlc3RfbWVyZ2UgSkREIEpDICYmCisJZ2l0IHJlc2V0IC0taGFyZCBKICYmCisJdGVzdF9jb21taXQgSlRFTVAzICYmCisJdGVzdF9tZXJnZSBKRSBKQyAmJgorCWdpdCByZXYtcGFyc2UgSkMgPmV4cGVjdGVkICYmCisJZ2l0IG1lcmdlLWJhc2UgLS1hbGwgLS1vY3RvcHVzIEpBQSBKREQgSkUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMTEtcmV2LWxpc3Qtd2l0aC1iYWQtY29tbWl0LnNoIGIvdC90NjAxMS1yZXYtbGlzdC13aXRoLWJhZC1jb21taXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmFkMDJjZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMTEtcmV2LWxpc3Qtd2l0aC1iYWQtY29tbWl0LnNoCkBAIC0wLDAgKzEsNTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmV2LWxpc3Qgc2hvdWxkIG5vdGljZSBiYWQgY29tbWl0cycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgTm90ZToKKyMgLSBjb21wcmVzc2lvbiBsZXZlbCBpcyBzZXQgdG8gemVybyB0byBtYWtlICJjb3JydXB0aW9ucyIgZWFzaWVyIHRvIHBlcmZvcm0KKyMgLSByZWZsb2cgaXMgZGlzYWJsZWQgdG8gYXZvaWQgZXh0cmEgcmVmZXJlbmNlcyB3aGljaCB3b3VsZCB0d2FydCB0aGUgdGVzdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgXAorICAgJworICAgZ2l0IGluaXQgJiYKKyAgIGdpdCBjb25maWcgY29yZS5jb21wcmVzc2lvbiAwICYmCisgICBnaXQgY29uZmlnIGNvcmUubG9nYWxscmVmdXBkYXRlcyBmYWxzZSAmJgorICAgZWNobyAiZm9vIiA+IGZvbyAmJgorICAgZ2l0IGFkZCBmb28gJiYKKyAgIGdpdCBjb21taXQgLW0gImZpcnN0IGNvbW1pdCIgJiYKKyAgIGVjaG8gImJhciIgPiBiYXIgJiYKKyAgIGdpdCBhZGQgYmFyICYmCisgICBnaXQgY29tbWl0IC1tICJzZWNvbmQgY29tbWl0IiAmJgorICAgZWNobyAiYmF6IiA+IGJheiAmJgorICAgZ2l0IGFkZCBiYXogJiYKKyAgIGdpdCBjb21taXQgLW0gInRoaXJkIGNvbW1pdCIgJiYKKyAgIGVjaG8gImZvbyBhZ2FpbiIgPj4gZm9vICYmCisgICBnaXQgYWRkIGZvbyAmJgorICAgZ2l0IGNvbW1pdCAtbSAiZm91cnRoIGNvbW1pdCIgJiYKKyAgIGdpdCByZXBhY2sgLWEgLWYgLWQKKyAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG51bWJlciBvZiByZXZpc2lvbnMnIFwKKyAgICcKKyAgIHJldnM9JChnaXQgcmV2LWxpc3QgLS1hbGwgfCB3YyAtbCkgJiYKKyAgIHRlc3QgJHJldnMgLWVxIDQgJiYKKyAgIGZpcnN0X2NvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKQorICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JydXB0IHNlY29uZCBjb21taXQgb2JqZWN0JyBcCisgICAnCisgICBwZXJsIC1pLmJhayAtcGUgInMvc2Vjb25kIGNvbW1pdC9zb2NvbmQgY29tbWl0LyIgLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrICYmCisgICB0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAtLWZ1bGwKKyAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfQ09NTUlUX0dSQVBIPTAgZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9ZmFsc2UgcmV2LWxpc3QgLS1hbGwgPiAvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlcGFjayBfTVVTVF8gZmFpbCcgXAorICAgJworICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGFjayAtYSAtZiAtZAorICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXJzdCBjb21taXQgaXMgc3RpbGwgYXZhaWxhYmxlJyBcCisgICAnCisgICBnaXQgbG9nICRmaXJzdF9jb21taXQKKyAgICcKKwordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDYwMTItcmV2LWxpc3Qtc2ltcGxpZnkuc2ggYi90L3Q2MDEyLXJldi1saXN0LXNpbXBsaWZ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI2ZmE0M2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDEyLXJldi1saXN0LXNpbXBsaWZ5LnNoCkBAIC0wLDAgKzEsMjc3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2Ugc2ltcGxpZmljYXRpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCitub3RlICgpIHsKKwlnaXQgdGFnICIkMSIKK30KKwordW5ub3RlICgpIHsKKwlnaXQgbmFtZS1yZXYgLS10YWdzIC0tc3RkaW4gfCBzZWQgLWUgInN8JE9JRF9SRUdFWCAodGFncy9cKFteKV0qXCkpIHxcMSB8ZyIKK30KKworIworIyBDcmVhdGUgYSB0ZXN0IHJlcG8gd2l0aCBpbnRlcmVzdGluZyBjb21taXQgZ3JhcGg6CisjCisjIEEtLUItLS0tLS0tLS0tRy0tSC0tSS0tSy0tTAorIyAgXCAgXCAgICAgICAgICAgLyAgICAgLworIyAgIFwgIFwgICAgICAgICAvICAgICAvCisjICAgIEMtLS0tLS1FLS0tRiAgICAgSgorIyAgICAgICAgXF8vCisjCisjIFRoZSBjb21taXRzIGFyZSBsYWlkIG91dCBmcm9tIGxlZnQtdG8tcmlnaHQgc3RhcnRpbmcgd2l0aAorIyB0aGUgcm9vdCBjb21taXQgQSBhbmQgdGVybWluYXRpbmcgYXQgdGhlIHRpcCBjb21taXQgTC4KKyMKKyMgVGhlcmUgYXJlIGEgZmV3IHBsYWNlcyB3aGVyZSB3ZSBhZGp1c3QgdGhlIGNvbW1pdCBkYXRlIG9yCisjIGF1dGhvciBkYXRlIHRvIG1ha2UgdGhlIC0tdG9wby1vcmRlciwgLS1kYXRlLW9yZGVyLCBhbmQKKyMgLS1hdXRob3ItZGF0ZS1vcmRlciBmbGFncyBwcm9kdWNlIGRpZmZlcmVudCBvdXRwdXQuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gIkhpIHRoZXJlIiA+ZmlsZSAmJgorCWVjaG8gImluaXRpYWwiID5sb3N0ICYmCisJZ2l0IGFkZCBmaWxlIGxvc3QgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBmaWxlIGFuZCBsb3N0IiAmJgorCW5vdGUgQSAmJgorCisJZ2l0IGJyYW5jaCBvdGhlci1icmFuY2ggJiYKKworCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL3VucmVsYXRlZCAmJgorCWdpdCBybSAtZiAiKiIgJiYKKwllY2hvICJVbnJlbGF0ZWQgYnJhbmNoIiA+c2lkZSAmJgorCWdpdCBhZGQgc2lkZSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJTaWRlIHJvb3QiICYmCisJbm90ZSBKICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJZWNobyAiSGVsbG8iID5maWxlICYmCisJZWNobyAic2Vjb25kIiA+bG9zdCAmJgorCWdpdCBhZGQgZmlsZSBsb3N0ICYmCisJdGVzdF90aWNrICYmIEdJVF9BVVRIT1JfREFURT0kKCgkdGVzdF90aWNrICsgMTIwKSkgZ2l0IGNvbW1pdCAtbSAiTW9kaWZpZWQgZmlsZSBhbmQgbG9zdCIgJiYKKwlub3RlIEIgJiYKKworCWdpdCBjaGVja291dCBvdGhlci1icmFuY2ggJiYKKworCWVjaG8gIkhlbGxvIiA+ZmlsZSAmJgorCT5sb3N0ICYmCisJZ2l0IGFkZCBmaWxlIGxvc3QgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiTW9kaWZpZWQgdGhlIGZpbGUgaWRlbnRpY2FsbHkiICYmCisJbm90ZSBDICYmCisKKwllY2hvICJUaGlzIGlzIGEgc3R1cGlkIGV4YW1wbGUiID5hbm90aGVyLWZpbGUgJiYKKwlnaXQgYWRkIGFub3RoZXItZmlsZSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJBZGQgYW5vdGhlciBmaWxlIiAmJgorCW5vdGUgRCAmJgorCisJdGVzdF90aWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1tICJtZXJnZSIgbWFzdGVyICYmCisJPmxvc3QgJiYgZ2l0IGNvbW1pdCAtYSAtbSAibWVyZ2UiICYmCisJbm90ZSBFICYmCisKKwllY2hvICJZZXQgYW5vdGhlciIgPmVsaWYgJiYKKwlnaXQgYWRkIGVsaWYgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiSXJyZWxldmFudCBjaGFuZ2UiICYmCisJbm90ZSBGICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyAiWWV0IGFub3RoZXIiID5lbGlmICYmCisJZ2l0IGFkZCBlbGlmICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIkFub3RoZXIgaXJyZWxldmFudCBjaGFuZ2UiICYmCisJbm90ZSBHICYmCisKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC1tICJtZXJnZSIgb3RoZXItYnJhbmNoICYmCisJbm90ZSBIICYmCisKKwllY2hvICJGaW5hbCBjaGFuZ2UiID5maWxlICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gIkZpbmFsIGNoYW5nZSIgJiYKKwlub3RlIEkgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyAtbSAiQ29vbGVzdCIgdW5yZWxhdGVkICYmCisJbm90ZSBLICYmCisKKwllY2hvICJJbW1hdGVyaWFsIiA+ZWxpZiAmJgorCWdpdCBhZGQgZWxpZiAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJMYXN0IiAmJgorCW5vdGUgTAorJworCitGTVQ9J3Rmb3JtYXQ6JVAgCSVIIHwgJXMnCisKK2NoZWNrX291dGNvbWUgKCkgeworCW91dGNvbWU9JDEKKwlzaGlmdAorCWZvciBjIGluICQxCisJZG8KKwkJZWNobyAiJGMiCisJZG9uZSA+ZXhwZWN0ICYmCisJc2hpZnQgJiYKKwlwYXJhbT0iJCoiICYmCisJdGVzdF9leHBlY3RfJG91dGNvbWUgImxvZyAkcGFyYW0iICcKKwkJZ2l0IGxvZyAtLXByZXR0eT0iJEZNVCIgLS1wYXJlbnRzICRwYXJhbSB8CisJCXVubm90ZSA+YWN0dWFsICYmCisJCXNlZCAtZSAicy9eLioJXChbXiBdKlwpIC4qL1wxLyIgPmNoZWNrIDxhY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGNoZWNrCisJJworfQorCitjaGVja19yZXN1bHQgKCkgeworCWNoZWNrX291dGNvbWUgc3VjY2VzcyAiJEAiCit9CisKK2NoZWNrX3Jlc3VsdCAnTCBLIEogSSBIIEYgRSBEIEMgRyBCIEEnIC0tZnVsbC1oaXN0b3J5IC0tdG9wby1vcmRlcgorY2hlY2tfcmVzdWx0ICdMIEsgSSBIIEcgRiBFIEQgQyBCIEogQScgLS1mdWxsLWhpc3RvcnkKK2NoZWNrX3Jlc3VsdCAnTCBLIEkgSCBHIEYgRSBEIEMgQiBKIEEnIC0tZnVsbC1oaXN0b3J5IC0tZGF0ZS1vcmRlcgorY2hlY2tfcmVzdWx0ICdMIEsgSSBIIEcgRiBFIEQgQiBDIEogQScgLS1mdWxsLWhpc3RvcnkgLS1hdXRob3ItZGF0ZS1vcmRlcgorY2hlY2tfcmVzdWx0ICdLIEkgSCBFIEMgQiBBJyAtLWZ1bGwtaGlzdG9yeSAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0sgSSBIIEUgQyBCIEEnIC0tZnVsbC1oaXN0b3J5IC0tdG9wby1vcmRlciAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0sgSSBIIEUgQyBCIEEnIC0tZnVsbC1oaXN0b3J5IC0tZGF0ZS1vcmRlciAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0sgSSBIIEUgQiBDIEEnIC0tZnVsbC1oaXN0b3J5IC0tYXV0aG9yLWRhdGUtb3JkZXIgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdJIEUgQyBCIEEnIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnSSBFIEMgQiBBJyAtLXNpbXBsaWZ5LW1lcmdlcyAtLXRvcG8tb3JkZXIgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdJIEUgQyBCIEEnIC0tc2ltcGxpZnktbWVyZ2VzIC0tZGF0ZS1vcmRlciAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0kgRSBCIEMgQScgLS1zaW1wbGlmeS1tZXJnZXMgLS1hdXRob3ItZGF0ZS1vcmRlciAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0kgQiBBJyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0kgQiBBJyAtLXRvcG8tb3JkZXIgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdJIEIgQScgLS1kYXRlLW9yZGVyIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnSSBCIEEnIC0tYXV0aG9yLWRhdGUtb3JkZXIgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdIJyAtLWZpcnN0LXBhcmVudCAtLSBhbm90aGVyLWZpbGUKK2NoZWNrX3Jlc3VsdCAnSCcgLS1maXJzdC1wYXJlbnQgLS10b3BvLW9yZGVyIC0tIGFub3RoZXItZmlsZQorCitjaGVja19yZXN1bHQgJ0UgQyBCIEEnIC0tZnVsbC1oaXN0b3J5IEUgLS0gbG9zdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnVsbCBoaXN0b3J5IHNpbXBsaWZpY2F0aW9uIHdpdGhvdXQgcGFyZW50JyAnCisJcHJpbnRmICIlc1xuIiBFIEMgQiBBID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tcHJldHR5PSIkRk1UIiAtLWZ1bGwtaGlzdG9yeSBFIC0tIGxvc3QgfAorCXVubm90ZSA+YWN0dWFsICYmCisJc2VkIC1lICJzL14uKglcKFteIF0qXCkgLiovXDEvIiA+Y2hlY2sgPGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBjaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWZ1bGwtZGlmZiBpcyBub3QgYWZmZWN0ZWQgYnkgLS1wYXJlbnRzJyAnCisJZ2l0IGxvZyAtcCAtLXByZXR0eT0iJUgiIC0tZnVsbC1kaWZmIC0tIGZpbGUgPmV4cGVjdGVkICYmCisJZ2l0IGxvZyAtcCAtLXByZXR0eT0iJUgiIC0tZnVsbC1kaWZmIC0tcGFyZW50cyAtLSBmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworIworIyBDcmVhdGUgYSBuZXcgaGlzdG9yeSB0byBkZW1vbnN0cmF0ZSB0aGUgdmFsdWUgb2YgLS1zaG93LXB1bGxzCisjIHdpdGggcmVzcGVjdCB0byB0aGUgc3VidGxldGllcyBvZiBzaW1wbGlmaWVkIGhpc3RvcnksIC0tZnVsbC1oaXN0b3J5LAorIyBhbmQgLS1zaW1wbGlmeS1tZXJnZXMuCisjCisjICAgLi1BLS0tTS0tLS0tQy0tTi0tLU8tLS1QCisjICAvICAgICAvIFwgIFwgIFwvICAgLyAgIC8KKyMgSSAgICAgQiAgIFwgIFItJ2AtWicgICAvCisjICBcICAgLyAgICAgXC8gICAgICAgICAvCisjICAgXCAvICAgICAgL1wgICAgICAgIC8KKyMgICAgYC0tLVgtLScgIGAtLS1ZLS0nCisjCisjIFRoaXMgZXhhbXBsZSBpcyBleHBsYWluZWQgaW4gRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJ1aWxkIHJlcG8nICcKKwlybSAtcmYgLmdpdCAqICYmCisJZ2l0IGluaXQgJiYKKwlnaXQgc3dpdGNoIC1jIG1haW4gJiYKKworCWVjaG8gYmFzZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfY29tbWl0IEkgJiYKKworCWVjaG8gQSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfY29tbWl0IEEgJiYKKworCWdpdCBzd2l0Y2ggLWMgYnJhbmNoQiBJICYmCisJZWNobyBCID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9jb21taXQgQiAmJgorCisJZ2l0IHN3aXRjaCBtYWluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1tICJNIiBCICYmCisJZWNobyBBID5maWxlICYmCisJZWNobyBCID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBtZXJnZSAtLWNvbnRpbnVlICYmCisJbm90ZSBNICYmCisKKwllY2hvIEMgPm90aGVyICYmCisJZ2l0IGFkZCBvdGhlciAmJgorCXRlc3RfY29tbWl0IEMgJiYKKworCWdpdCBzd2l0Y2ggLWMgYnJhbmNoWCBJICYmCisJZWNobyBYID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9jb21taXQgWCAmJgorCisJZ2l0IHN3aXRjaCAtYyBicmFuY2hSIE0gJiYKKwlnaXQgbWVyZ2UgLW0gUiAtWHRoZWlycyBYICYmCisJbm90ZSBSICYmCisKKwlnaXQgc3dpdGNoIG1haW4gJiYKKwlnaXQgbWVyZ2UgLW0gTiBSICYmCisJbm90ZSBOICYmCisKKwlnaXQgc3dpdGNoIC1jIGJyYW5jaFkgTSAmJgorCWVjaG8gWSA+eSAmJgorCWdpdCBhZGQgeSAmJgorCXRlc3RfY29tbWl0IFkgJiYKKworCWdpdCBzd2l0Y2ggLWMgYnJhbmNoWiBDICYmCisJZWNobyBaID56ICYmCisJZ2l0IGFkZCB6ICYmCisJdGVzdF9jb21taXQgWiAmJgorCisJZ2l0IHN3aXRjaCBtYWluICYmCisJZ2l0IG1lcmdlIC1tIE8gWiAmJgorCW5vdGUgTyAmJgorCisJZ2l0IG1lcmdlIC1tIFAgWSAmJgorCW5vdGUgUAorJworCitjaGVja19yZXN1bHQgJ1ggSScgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdOIFIgWCBJJyAtLXNob3ctcHVsbHMgLS0gZmlsZQorCitjaGVja19yZXN1bHQgJ1AgTyBOIFIgWCBNIEIgQSBJJyAtLWZ1bGwtaGlzdG9yeSAtLXRvcG8tb3JkZXIgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdOIFIgWCBNIEIgQSBJJyAtLXNpbXBsaWZ5LW1lcmdlcyAtLXRvcG8tb3JkZXIgLS1zaG93LXB1bGxzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnUiBYIE0gQiBBIEknIC0tc2ltcGxpZnktbWVyZ2VzIC0tdG9wby1vcmRlciAtLSBmaWxlCitjaGVja19yZXN1bHQgJ04gTSBBIEknIC0tZmlyc3QtcGFyZW50IC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTiBNIEEgSScgLS1maXJzdC1wYXJlbnQgLS1zaG93LXB1bGxzIC0tIGZpbGUKKworIyAtLWFuY2VzdHJ5LXBhdGggaW1wbGllcyAtLWZ1bGwtaGlzdG9yeQorY2hlY2tfcmVzdWx0ICdQIE8gTiBSIE0nIC0tdG9wby1vcmRlciBcCisJLS1hbmNlc3RyeS1wYXRoIEEuLkhFQUQgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdQIE8gTiBSIE0nIC0tdG9wby1vcmRlciBcCisJLS1zaG93LXB1bGxzIFwKKwktLWFuY2VzdHJ5LXBhdGggQS4uSEVBRCAtLSBmaWxlCitjaGVja19yZXN1bHQgJ1AgTyBOIFIgTScgLS10b3BvLW9yZGVyIFwKKwktLWZ1bGwtaGlzdG9yeSBcCisJLS1hbmNlc3RyeS1wYXRoIEEuLkhFQUQgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdSIE0nIC0tdG9wby1vcmRlciBcCisJLS1zaW1wbGlmeS1tZXJnZXMgXAorCS0tYW5jZXN0cnktcGF0aCBBLi5IRUFEIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTiBSIE0nIC0tdG9wby1vcmRlciBcCisJLS1zaW1wbGlmeS1tZXJnZXMgLS1zaG93LXB1bGxzIFwKKwktLWFuY2VzdHJ5LXBhdGggQS4uSEVBRCAtLSBmaWxlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIC0tc2ltcGxpZnktbWVyZ2VzIC0tc2hvdy1wdWxscycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkqIE4KKwkqICAgUgorCXxcICAKKwl8ICogWAorCSogfCAgIE0KKwl8XCBcICAKKwl8ICogfCBCCisJfCB8LyAgCisJKiAvIEEKKwl8LyAgCisJKiBJCisJRU9GCisJZ2l0IGxvZyAtLWdyYXBoIC0tcHJldHR5PSIlcyIgXAorCQktLXNpbXBsaWZ5LW1lcmdlcyAtLXNob3ctcHVsbHMgXAorCQktLSBmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAxMy1yZXYtbGlzdC1yZXZlcnNlLXBhcmVudHMuc2ggYi90L3Q2MDEzLXJldi1saXN0LXJldmVyc2UtcGFyZW50cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OTQ1OGQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxMy1yZXYtbGlzdC1yZXZlcnNlLXBhcmVudHMuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Jy0tcmV2ZXJzZSBjb21iaW5lcyB3aXRoIC0tcGFyZW50cycKKworLiAuL3Rlc3QtbGliLnNoCisKKworY29tbWl0ICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwllY2hvICQxID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIC0tcmV2ZXJzZSBleGFtcGxlJyAnCisJY29tbWl0IG9uZSAmJgorCWdpdCB0YWcgcm9vdCAmJgorCWNvbW1pdCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBIRUFEXiAmJgorCWNvbW1pdCB0aHJlZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyBzaWRlICYmCisJY29tbWl0IGZpdmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmV2ZXJzZSAtLXBhcmVudHMgLS1mdWxsLWhpc3RvcnkgY29tYmluZXMgY29ycmVjdGx5JyAnCisJZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtLWZ1bGwtaGlzdG9yeSBtYXN0ZXIgLS0gZm9vIHwKKwkJcGVybCAtZSAicHJpbnQgcmV2ZXJzZSA8PiIgPiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLXJldmVyc2UgLS1wYXJlbnRzIC0tZnVsbC1oaXN0b3J5IG1hc3RlciAtLSBmb28gXAorCQk+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ib3VuZGFyeSBkb2VzIHRvbycgJworCWdpdCByZXYtbGlzdCAtLWJvdW5kYXJ5IC0tcGFyZW50cyAtLWZ1bGwtaGlzdG9yeSBtYXN0ZXIgXnJvb3QgLS0gZm9vIHwKKwkJcGVybCAtZSAicHJpbnQgcmV2ZXJzZSA8PiIgPiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLWJvdW5kYXJ5IC0tcmV2ZXJzZSAtLXBhcmVudHMgLS1mdWxsLWhpc3RvcnkgXAorCQltYXN0ZXIgXnJvb3QgLS0gZm9vID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMTQtcmV2LWxpc3QtYWxsLnNoIGIvdC90NjAxNC1yZXYtbGlzdC1hbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzliZWRkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMTQtcmV2LWxpc3QtYWxsLnNoCkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSctLWFsbCBpbmNsdWRlcyBkZXRhY2hlZCBIRUFEcycKKworLiAuL3Rlc3QtbGliLnNoCisKKworY29tbWl0ICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwllY2hvICQxID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCWNvbW1pdCBvbmUgJiYKKwljb21taXQgdHdvICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJY29tbWl0IGRldGFjaGVkCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1hbGwgbGlzdHMgZGV0YWNoZWQgSEVBRCcgJworCisJdGVzdCAzID0gJChnaXQgcmV2LWxpc3QgLS1hbGwgfCB3YyAtbCkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgZG9lcyBub3QgbG9zZSBkZXRhY2hlZCBIRUFEJyAnCisKKwlnaXQgZ2MgJiYKKwlnaXQgcHJ1bmUgLS1leHBpcmU9bm93ICYmCisJZ2l0IHNob3cgSEVBRAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tZ3JhcGggLS1uby13YWxrIGlzIGZvcmJpZGRlbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCAtLWdyYXBoIC0tbm8td2FsayBIRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAxNi1yZXYtbGlzdC1ncmFwaC1zaW1wbGlmeS1oaXN0b3J5LnNoIGIvdC90NjAxNi1yZXYtbGlzdC1ncmFwaC1zaW1wbGlmeS1oaXN0b3J5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1ZTZlOTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDE2LXJldi1saXN0LWdyYXBoLXNpbXBsaWZ5LWhpc3Rvcnkuc2gKQEAgLTAsMCArMSwyNjMgQEAKKyMhL2Jpbi9zaAorCisjIFRoZXJlJ3MgbW9yZSB0aGFuIG9uZSAiY29ycmVjdCIgd2F5IHRvIHJlcHJlc2VudCB0aGUgaGlzdG9yeSBncmFwaGljYWxseS4KKyMgVGhlc2UgdGVzdHMgZGVwZW5kIG9uIHRoZSBjdXJyZW50IGJlaGF2aW9yIG9mIHRoZSBncmFwaGluZyBjb2RlLiAgSWYgdGhlCisjIGdyYXBoaW5nIGNvZGUgaXMgZXZlciBjaGFuZ2VkIHRvIGRyYXcgdGhlIG91dHB1dCBkaWZmZXJlbnRseSwgdGhlc2UgdGVzdHMKKyMgY2FzZXMgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8ga25vdyBhYm91dCB0aGUgbmV3IGxheW91dC4KKwordGVzdF9kZXNjcmlwdGlvbj0nLS1ncmFwaCBhbmQgc2ltcGxpZmllZCBoaXN0b3J5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHJldi1saXN0IC0tZ3JhcGggdGVzdCcgJworCSMgMyBjb21taXRzIG9uIGJyYW5jaCBBCisJdGVzdF9jb21taXQgQTEgZm9vLnR4dCAmJgorCXRlc3RfY29tbWl0IEEyIGJhci50eHQgJiYKKwl0ZXN0X2NvbW1pdCBBMyBiYXIudHh0ICYmCisJZ2l0IGJyYW5jaCAtbSBtYXN0ZXIgQSAmJgorCisJIyAyIGNvbW1pdHMgb24gYnJhbmNoIEIsIHN0YXJ0ZWQgZnJvbSBBMQorCWdpdCBjaGVja291dCAtYiBCIEExICYmCisJdGVzdF9jb21taXQgQjEgZm9vLnR4dCAmJgorCXRlc3RfY29tbWl0IEIyIGFiYy50eHQgJiYKKworCSMgMiBjb21taXRzIG9uIGJyYW5jaCBDLCBzdGFydGVkIGZyb20gQTIKKwlnaXQgY2hlY2tvdXQgLWIgQyBBMiAmJgorCXRlc3RfY29tbWl0IEMxIHh5ei50eHQgJiYKKwl0ZXN0X2NvbW1pdCBDMiB4eXoudHh0ICYmCisKKwkjIE9jdG9wdXMgbWVyZ2UgQiBhbmQgQyBpbnRvIGJyYW5jaCBBCisJZ2l0IGNoZWNrb3V0IEEgJiYKKwlnaXQgbWVyZ2UgQiBDICYmCisJZ2l0IHRhZyBBNCAmJgorCisJdGVzdF9jb21taXQgQTUgYmFyLnR4dCAmJgorCisJIyBNb3JlIGNvbW1pdHMgb24gQywgdGhlbiBtZXJnZSBDIGludG8gQQorCWdpdCBjaGVja291dCBDICYmCisJdGVzdF9jb21taXQgQzMgZm9vLnR4dCAmJgorCXRlc3RfY29tbWl0IEM0IGJhci50eHQgJiYKKwlnaXQgY2hlY2tvdXQgQSAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIEMgJiYKKwlnaXQgdGFnIEE2ICYmCisKKwl0ZXN0X2NvbW1pdCBBNyBiYXIudHh0ICYmCisKKwkjIFN0b3JlIGNvbW1pdCBuYW1lcyBpbiB2YXJpYWJsZXMgZm9yIGxhdGVyIHVzZQorCUExPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBBMSkgJiYKKwlBMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQTIpICYmCisJQTM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEEzKSAmJgorCUE0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBBNCkgJiYKKwlBNT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQTUpICYmCisJQTY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEE2KSAmJgorCUE3PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBBNykgJiYKKwlCMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQjEpICYmCisJQjI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEIyKSAmJgorCUMxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDMSkgJiYKKwlDMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQzIpICYmCisJQzM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEMzKSAmJgorCUM0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDNCkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggLS1hbGwnICcKKwlybSAtZiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEE3IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogICAkQTYiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEMzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8ICAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgIFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKi0uIHwgJEE0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCBcXHwgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfCAqICRDMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwgKiAkQzEiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqIHwgJEIyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiB8ICRCMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgfCAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwvfCAgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEEyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTEiID4+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tZ3JhcGggLS1hbGwgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKyMgTWFrZSBzdXJlIHRoZSBncmFwaF9pc19pbnRlcmVzdGluZygpIGNvZGUgc3RpbGwgcmVhbGl6ZXMKKyMgdGhhdCB1bmRlY29yYXRlZCBtZXJnZXMgYXJlIGludGVyZXN0aW5nLCBldmVuIHdpdGggLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYXBoIC0tc2ltcGxpZnktYnktZGVjb3JhdGlvbicgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZ2l0IHRhZyAtZCBBNCAmJgorCWVjaG8gIiogJEE3IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogICAkQTYiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEMzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8ICAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgIFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKi0uIHwgJEE0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCBcXHwgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfCAqICRDMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwgKiAkQzEiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqIHwgJEIyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiB8ICRCMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgfCAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwvfCAgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEEyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTEiID4+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tZ3JhcGggLS1hbGwgLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogZ2V0IHJpZCBvZiBkZWNvcmF0aW9ucyBvbiBCJyAnCisJZ2l0IHRhZyAtZCBCMiAmJgorCWdpdCB0YWcgLWQgQjEgJiYKKwlnaXQgYnJhbmNoIC1kIEIKKycKKworIyBHcmFwaCB3aXRoIGJyYW5jaCBCIHNpbXBsaWZpZWQgYXdheQordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ncmFwaCAtLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24gcHJ1bmUgYnJhbmNoIEInICcKKwlybSAtZiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEE3IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogICAkQTYiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEMzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICRBNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFx8ICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEMyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzEiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICRBMyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEEyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEExIiA+PiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLWdyYXBoIC0tc2ltcGxpZnktYnktZGVjb3JhdGlvbiAtLWFsbCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ncmFwaCAtLWZ1bGwtaGlzdG9yeSAtLSBiYXIudHh0JyAnCisJcm0gLWYgZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICAgJEE2IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICRBNSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEE0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXHwgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLWZ1bGwtaGlzdG9yeSAtLWFsbCAtLSBiYXIudHh0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYXBoIC0tZnVsbC1oaXN0b3J5IC0tc2ltcGxpZnktbWVyZ2VzIC0tIGJhci50eHQnICcKKwlybSAtZiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEE3IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogICAkQTYiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEE1IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLWZ1bGwtaGlzdG9yeSAtLXNpbXBsaWZ5LW1lcmdlcyAtLWFsbCBcCisJCS0tIGJhci50eHQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggLS0gYmFyLnR4dCcgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEEyIiA+PiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLWdyYXBoIC0tYWxsIC0tIGJhci50eHQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggLS1zcGFyc2UgLS0gYmFyLnR4dCcgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTYiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTQiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEMzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzIiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEEyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEExIiA+PiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLWdyYXBoIC0tc3BhcnNlIC0tYWxsIC0tIGJhci50eHQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggXkM0JyAnCisJcm0gLWYgZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICAgJEE0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQjIiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRCMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMyIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLWFsbCBeQzQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggXkMzJyAnCisJcm0gLWYgZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICAgJEE2IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAgICRBNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEIyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQjEiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTMiID4+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tZ3JhcGggLS1hbGwgXkMzID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisjIEkgZG9uJ3QgdGhpbmsgdGhlIG9yZGVyaW5nIG9mIHRoZSBib3VuZGFyeSBjb21taXRzIGlzIHJlYWxseQorIyB0aGF0IGltcG9ydGFudCwgYnV0IHRoaXMgdGVzdCBkZXBlbmRzIG9uIGl0LiAgSWYgdGhlIG9yZGVyaW5nIGV2ZXIgY2hhbmdlcworIyBpbiB0aGUgY29kZSwgd2UnbGwgbmVlZCB0byB1cGRhdGUgdGhpcyB0ZXN0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ncmFwaCAtLWJvdW5kYXJ5IF5DMycgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAgICRBNiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEM0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8ICAgICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAgXFwgICAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiotLiBcXCAgICRBNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgXFwgXFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogfCB8ICRCMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogfCB8ICRCMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgfCB8ICRBMyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJvIHwgfCB8ICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8LyAvIC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJvIC8gLyAkQTEiID4+IGV4cGVjdGVkICYmCisJZWNobyAiIC8gLyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgbyAkQzMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJvICRDMiIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLWJvdW5kYXJ5IC0tYWxsIF5DMyA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDE3LXJldi1saXN0LXN0ZGluLnNoIGIvdC90NjAxNy1yZXYtbGlzdC1zdGRpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NjdiMzc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxNy1yZXYtbGlzdC1zdGRpbi5zaApAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5LCBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdsb2cgZmFtaWx5IGxlYXJucyAtLXN0ZGluJworCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2sgKCkgeworCWZvciBjbWQgaW4gcmV2LWxpc3QgImxvZyAtLXN0YXQiCisJZG8KKwkJZm9yIGkgaW4gIiRAIgorCQlkbworCQkJcHJpbnRmICIlc1xuIiAkaQorCQlkb25lID5pbnB1dCAmJgorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjayAkY21kICQqIiAnCisJCQlnaXQgJGNtZCAkKGNhdCBpbnB1dCkgPmV4cGVjdCAmJgorCQkJZ2l0ICRjbWQgLS1zdGRpbiA8aW5wdXQgPmFjdHVhbCAmJgorCQkJc2VkIC1lICJzL14vaW5wdXQgLyIgaW5wdXQgJiYKKwkJCXNlZCAtZSAicy9eL291dHB1dCAvIiBleHBlY3QgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkJJworCWRvbmUKK30KKwordGhlbT0nMSAyIDMgNCA1IDYgNycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJKAorCQlmb3IgaSBpbiAwICR0aGVtCisJCWRvCisJCQlmb3IgaiBpbiAkdGhlbQorCQkJZG8KKwkJCQllY2hvICRpLiRqID5maWxlLSRqICYmCisJCQkJZ2l0IGFkZCBmaWxlLSRqIHx8IGV4aXQKKwkJCWRvbmUgJiYKKwkJCXRlc3RfdGljayAmJgorCQkJZ2l0IGNvbW1pdCAtbSAkaSB8fCBleGl0CisJCWRvbmUgJiYKKwkJZm9yIGkgaW4gJHRoZW0KKwkJZG8KKwkJCWdpdCBjaGVja291dCAtYiBzaWRlLSRpIG1hc3Rlcn4kaSAmJgorCQkJZWNobyB1cGRhdGVkICRpID5maWxlLSRpICYmCisJCQlnaXQgYWRkIGZpbGUtJGkgJiYKKwkJCXRlc3RfdGljayAmJgorCQkJZ2l0IGNvbW1pdCAtbSBzaWRlLSRpIHx8IGV4aXQKKwkJZG9uZQorCSkKKycKKworY2hlY2sgbWFzdGVyCitjaGVjayBzaWRlLTEgXnNpZGUtNAorY2hlY2sgc2lkZS0xIF5zaWRlLTcgLS0KK2NoZWNrIHNpZGUtMSBec2lkZS03IC0tIGZpbGUtMQorY2hlY2sgc2lkZS0xIF5zaWRlLTcgLS0gZmlsZS0yCitjaGVjayBzaWRlLTMgXnNpZGUtNCAtLSBmaWxlLTMKK2NoZWNrIHNpZGUtMyBec2lkZS0yCitjaGVjayBzaWRlLTMgXnNpZGUtMiAtLSBmaWxlLTEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IG9ubHkgLS1zdGRpbicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTcKKworCWZpbGUtMQorCWZpbGUtMgorCUVPRgorCWNhdCA+aW5wdXQgPDwtRU9GICYmCisJXm1hc3Rlcl4KKwktLQorCWZpbGUtMgorCUVPRgorCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyAtLW5hbWUtb25seSAtLXN0ZGluIG1hc3RlciAtLSBmaWxlLTEgXAorCQk8aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDE4LXJldi1saXN0LWdsb2Iuc2ggYi90L3Q2MDE4LXJldi1saXN0LWdsb2Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmI1YWVhYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMTgtcmV2LWxpc3QtZ2xvYi5zaApAQCAtMCwwICsxLDM4MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jldi1saXN0L3Jldi1wYXJzZSAtLWdsb2InCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb21taXQgKCkgeworCXRlc3RfdGljayAmJgorCWVjaG8gJDEgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gIiQxIgorfQorCitjb21wYXJlICgpIHsKKwkjIFNwbGl0IGFyZ3VtZW50cyBvbiB3aGl0ZXNwYWNlLgorCWdpdCAkMSAkMiA+ZXhwZWN0ZWQgJiYKKwlnaXQgJDEgJDMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJY29tbWl0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBzdWJzcGFjZS9vbmUgbWFzdGVyICYmCisJY29tbWl0IG9uZSAmJgorCWdpdCBjaGVja291dCAtYiBzdWJzcGFjZS90d28gbWFzdGVyICYmCisJY29tbWl0IHR3byAmJgorCWdpdCBjaGVja291dCAtYiBzdWJzcGFjZS14IG1hc3RlciAmJgorCWNvbW1pdCBzdWJzcGFjZS14ICYmCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyL3RocmVlIG1hc3RlciAmJgorCWNvbW1pdCB0aHJlZSAmJgorCWdpdCBjaGVja291dCAtYiBzb21lcmVmIG1hc3RlciAmJgorCWNvbW1pdCBzb21lICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWNvbW1pdCBtYXN0ZXIyICYmCisJZ2l0IHRhZyBmb28vYmFyIG1hc3RlciAmJgorCWNvbW1pdCBtYXN0ZXIzICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL2Zvby9iYXogbWFzdGVyICYmCisJY29tbWl0IG1hc3RlcjQgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvdXBzdHJlYW0vb25lIHN1YnNwYWNlL29uZSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy91cHN0cmVhbS90d28gc3Vic3BhY2UvdHdvICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL3Vwc3RyZWFtL3ggc3Vic3BhY2UteCAmJgorCWdpdCB0YWcgcXV4L29uZSBzdWJzcGFjZS9vbmUgJiYKKwlnaXQgdGFnIHF1eC90d28gc3Vic3BhY2UvdHdvICYmCisJZ2l0IHRhZyBxdXgveCBzdWJzcGFjZS14CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdsb2I9cmVmcy9oZWFkcy9zdWJzcGFjZS8qJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1yZWZzL2hlYWRzL3N1YnNwYWNlLyoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8qJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8qIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdsb2I9cmVmcy9oZWFkcy9zdWJzcGFjZS8nICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1nbG9iPXJlZnMvaGVhZHMvc3Vic3BhY2UvIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdsb2I9aGVhZHMvc3Vic3BhY2UvJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZ2xvYj1oZWFkcy9zdWJzcGFjZScgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9aGVhZHMvc3Vic3BhY2UiCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncmV2LXBhcnNlIGFjY2VwdHMgLS1nbG9iIGFzIGRldGFjaGVkIG9wdGlvbicgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2IgaGVhZHMvc3Vic3BhY2UiCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncmV2LXBhcnNlIGlzIG5vdCBjb25mdXNlZCBieSBvcHRpb24tbGlrZSBnbG9iJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAibWFzdGVyIiAiLS1nbG9iIC0tc3ltYm9saWMgbWFzdGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWJyYW5jaGVzPXN1YnNwYWNlLyonICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1icmFuY2hlcz1zdWJzcGFjZS8qIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWJyYW5jaGVzPXN1YnNwYWNlLycgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWJyYW5jaGVzPXN1YnNwYWNlLyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1icmFuY2hlcz1zdWJzcGFjZScgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWJyYW5jaGVzPXN1YnNwYWNlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdsb2I9aGVhZHMvc3Vic3BhY2UvKiAtLWdsb2I9aGVhZHMvb3RoZXIvKicgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28gb3RoZXIvdGhyZWUiICItLWdsb2I9aGVhZHMvc3Vic3BhY2UvKiAtLWdsb2I9aGVhZHMvb3RoZXIvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1nbG9iPWhlYWRzL3NvbWVyZWYvKiBtYXN0ZXInICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJtYXN0ZXIiICItLWdsb2I9aGVhZHMvc29tZXJlZi8qIG1hc3RlciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1nbG9iPWhlYWRzLyonICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJtYXN0ZXIgb3RoZXIvdGhyZWUgc29tZXJlZiBzdWJzcGFjZS14IHN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9aGVhZHMvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS10YWdzPWZvbycgJworCisJY29tcGFyZSByZXYtcGFyc2UgImZvby9iYXIiICItLXRhZ3M9Zm9vIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLXJlbW90ZXM9Zm9vJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAiZm9vL2JheiIgIi0tcmVtb3Rlcz1mb28iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZXhjbHVkZSB3aXRoIC0tYnJhbmNoZXMnICcKKwljb21wYXJlIHJldi1wYXJzZSAiLS1leGNsdWRlPSovKiAtLWJyYW5jaGVzIiAibWFzdGVyIHNvbWVyZWYgc3Vic3BhY2UteCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZXhjbHVkZSB3aXRoIC0tYWxsJyAnCisJY29tcGFyZSByZXYtcGFyc2UgIi0tZXhjbHVkZT1yZWZzL3JlbW90ZXMvKiAtLWFsbCIgIi0tYnJhbmNoZXMgLS10YWdzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgYWNjdW11bGF0ZXMgbXVsdGlwbGUgLS1leGNsdWRlJyAnCisJY29tcGFyZSByZXYtcGFyc2UgIi0tZXhjbHVkZT1yZWZzL3JlbW90ZXMvKiAtLWV4Y2x1ZGU9cmVmcy90YWdzLyogLS1hbGwiIC0tYnJhbmNoZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tYnJhbmNoZXMgY2xlYXJzIC0tZXhjbHVkZScgJworCWNvbXBhcmUgcmV2LXBhcnNlICItLWV4Y2x1ZGU9KiAtLWJyYW5jaGVzIC0tYnJhbmNoZXMiICItLWJyYW5jaGVzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS10YWdzIGNsZWFycyAtLWV4Y2x1ZGUnICcKKwljb21wYXJlIHJldi1wYXJzZSAiLS1leGNsdWRlPSogLS10YWdzIC0tdGFncyIgIi0tdGFncyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tYWxsIGNsZWFycyAtLWV4Y2x1ZGUnICcKKwljb21wYXJlIHJldi1wYXJzZSAiLS1leGNsdWRlPSogLS1hbGwgLS1hbGwiICItLWFsbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZXhjbHVkZT1nbG9iIHdpdGggLS1icmFuY2hlcz1nbG9iJyAnCisJY29tcGFyZSByZXYtcGFyc2UgIi0tZXhjbHVkZT1zdWJzcGFjZS0qIC0tYnJhbmNoZXM9c3ViKiIgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWV4Y2x1ZGU9Z2xvYiB3aXRoIC0tdGFncz1nbG9iJyAnCisJY29tcGFyZSByZXYtcGFyc2UgIi0tZXhjbHVkZT1xdXgvPyAtLXRhZ3M9cXV4LyoiICJxdXgvb25lIHF1eC90d28iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWV4Y2x1ZGU9Z2xvYiB3aXRoIC0tcmVtb3Rlcz1nbG9iJyAnCisJY29tcGFyZSByZXYtcGFyc2UgIi0tZXhjbHVkZT11cHN0cmVhbS8/IC0tcmVtb3Rlcz11cHN0cmVhbS8qIiAidXBzdHJlYW0vb25lIHVwc3RyZWFtL3R3byIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZXhjbHVkZT1yZWYgd2l0aCAtLWJyYW5jaGVzPWdsb2InICcKKwljb21wYXJlIHJldi1wYXJzZSAiLS1leGNsdWRlPXN1YnNwYWNlLXggLS1icmFuY2hlcz1zdWIqIiAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZXhjbHVkZT1yZWYgd2l0aCAtLXRhZ3M9Z2xvYicgJworCWNvbXBhcmUgcmV2LXBhcnNlICItLWV4Y2x1ZGU9cXV4L3ggLS10YWdzPXF1eC8qIiAicXV4L29uZSBxdXgvdHdvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1leGNsdWRlPXJlZiB3aXRoIC0tcmVtb3Rlcz1nbG9iJyAnCisJY29tcGFyZSByZXYtcGFyc2UgIi0tZXhjbHVkZT11cHN0cmVhbS94IC0tcmVtb3Rlcz11cHN0cmVhbS8qIiAidXBzdHJlYW0vb25lIHVwc3RyZWFtL3R3byIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1leGNsdWRlPWdsb2Igd2l0aCAtLWJyYW5jaGVzPWdsb2InICcKKwljb21wYXJlIHJldi1saXN0ICItLWV4Y2x1ZGU9c3Vic3BhY2UtKiAtLWJyYW5jaGVzPXN1YioiICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWV4Y2x1ZGU9Z2xvYiB3aXRoIC0tdGFncz1nbG9iJyAnCisJY29tcGFyZSByZXYtbGlzdCAiLS1leGNsdWRlPXF1eC8/IC0tdGFncz1xdXgvKiIgInF1eC9vbmUgcXV4L3R3byIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1leGNsdWRlPWdsb2Igd2l0aCAtLXJlbW90ZXM9Z2xvYicgJworCWNvbXBhcmUgcmV2LWxpc3QgIi0tZXhjbHVkZT11cHN0cmVhbS8/IC0tcmVtb3Rlcz11cHN0cmVhbS8qIiAidXBzdHJlYW0vb25lIHVwc3RyZWFtL3R3byIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1leGNsdWRlPXJlZiB3aXRoIC0tYnJhbmNoZXM9Z2xvYicgJworCWNvbXBhcmUgcmV2LWxpc3QgIi0tZXhjbHVkZT1zdWJzcGFjZS14IC0tYnJhbmNoZXM9c3ViKiIgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tZXhjbHVkZT1yZWYgd2l0aCAtLXRhZ3M9Z2xvYicgJworCWNvbXBhcmUgcmV2LWxpc3QgIi0tZXhjbHVkZT1xdXgveCAtLXRhZ3M9cXV4LyoiICJxdXgvb25lIHF1eC90d28iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tZXhjbHVkZT1yZWYgd2l0aCAtLXJlbW90ZXM9Z2xvYicgJworCWNvbXBhcmUgcmV2LWxpc3QgIi0tZXhjbHVkZT11cHN0cmVhbS94IC0tcmVtb3Rlcz11cHN0cmVhbS8qIiAidXBzdHJlYW0vb25lIHVwc3RyZWFtL3R3byIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPXJlZnMvaGVhZHMvc3Vic3BhY2UvKicgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1yZWZzL2hlYWRzL3N1YnNwYWNlLyoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iIHJlZnMvaGVhZHMvc3Vic3BhY2UvKicgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYiByZWZzL2hlYWRzL3N1YnNwYWNlLyoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgbm90IGNvbmZ1c2VkIGJ5IG9wdGlvbi1saWtlIC0tZ2xvYiBhcmcnICcKKworCWNvbXBhcmUgcmV2LWxpc3QgIm1hc3RlciIgIi0tZ2xvYiAtMCBtYXN0ZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzL3N1YnNwYWNlLyonICcKKworCWNvbXBhcmUgcmV2LWxpc3QgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9aGVhZHMvc3Vic3BhY2UvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWdsb2I9cmVmcy9oZWFkcy9zdWJzcGFjZS8nICcKKworCWNvbXBhcmUgcmV2LWxpc3QgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9cmVmcy9oZWFkcy9zdWJzcGFjZS8iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzL3N1YnNwYWNlLycgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzL3N1YnNwYWNlJyAnCisKKwljb21wYXJlIHJldi1saXN0ICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1nbG9iPWhlYWRzL3N1YnNwYWNlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYnJhbmNoZXM9c3Vic3BhY2UvKicgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tYnJhbmNoZXM9c3Vic3BhY2UvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWJyYW5jaGVzPXN1YnNwYWNlLycgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tYnJhbmNoZXM9c3Vic3BhY2UvIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYnJhbmNoZXM9c3Vic3BhY2UnICcKKworCWNvbXBhcmUgcmV2LWxpc3QgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWJyYW5jaGVzPXN1YnNwYWNlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYnJhbmNoZXMnICcKKworCWNvbXBhcmUgcmV2LWxpc3QgIm1hc3RlciBzdWJzcGFjZS14IHNvbWVyZWYgb3RoZXIvdGhyZWUgc3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tYnJhbmNoZXMiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzL3NvbWVyZWYvKiBtYXN0ZXInICcKKworCWNvbXBhcmUgcmV2LWxpc3QgIm1hc3RlciIgIi0tZ2xvYj1oZWFkcy9zb21lcmVmLyogbWFzdGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8qIC0tZ2xvYj1oZWFkcy9vdGhlci8qJyAnCisKKwljb21wYXJlIHJldi1saXN0ICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIG90aGVyL3RocmVlIiAiLS1nbG9iPWhlYWRzL3N1YnNwYWNlLyogLS1nbG9iPWhlYWRzL290aGVyLyoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzLyonICcKKworCWNvbXBhcmUgcmV2LWxpc3QgIm1hc3RlciBvdGhlci90aHJlZSBzb21lcmVmIHN1YnNwYWNlLXggc3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1oZWFkcy8qIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tdGFncz1mb28nICcKKworCWNvbXBhcmUgcmV2LWxpc3QgImZvby9iYXIiICItLXRhZ3M9Zm9vIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tdGFncycgJworCisJY29tcGFyZSByZXYtbGlzdCAiZm9vL2JhciBxdXgveCBxdXgvdHdvIHF1eC9vbmUiICItLXRhZ3MiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1yZW1vdGVzPWZvbycgJworCisJY29tcGFyZSByZXYtbGlzdCAiZm9vL2JheiIgIi0tcmVtb3Rlcz1mb28iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1leGNsdWRlIHdpdGggLS1icmFuY2hlcycgJworCWNvbXBhcmUgcmV2LWxpc3QgIi0tZXhjbHVkZT0qLyogLS1icmFuY2hlcyIgIm1hc3RlciBzb21lcmVmIHN1YnNwYWNlLXgiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tZXhjbHVkZSB3aXRoIC0tYWxsJyAnCisJY29tcGFyZSByZXYtbGlzdCAiLS1leGNsdWRlPXJlZnMvcmVtb3Rlcy8qIC0tYWxsIiAiLS1icmFuY2hlcyAtLXRhZ3MiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IGFjY3VtdWxhdGVzIG11bHRpcGxlIC0tZXhjbHVkZScgJworCWNvbXBhcmUgcmV2LWxpc3QgIi0tZXhjbHVkZT1yZWZzL3JlbW90ZXMvKiAtLWV4Y2x1ZGU9cmVmcy90YWdzLyogLS1hbGwiIC0tYnJhbmNoZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgc2hvdWxkIHN1Y2NlZWQgd2l0aCBlbXB0eSBvdXRwdXQgb24gZW1wdHkgc3RkaW4nICcKKwlnaXQgcmV2LWxpc3QgLS1zdGRpbiA8L2Rldi9udWxsID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IHNob3VsZCBzdWNjZWVkIHdpdGggZW1wdHkgb3V0cHV0IHdpdGggYWxsIHJlZnMgZXhjbHVkZWQnICcKKwlnaXQgcmV2LWxpc3QgLS1leGNsdWRlPSogLS1hbGwgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgc2hvdWxkIHN1Y2NlZWQgd2l0aCBlbXB0eSBvdXRwdXQgd2l0aCBlbXB0eSAtLWFsbCcgJworCSgKKwkJdGVzdF9jcmVhdGVfcmVwbyBlbXB0eSAmJgorCQljZCBlbXB0eSAmJgorCQlnaXQgcmV2LWxpc3QgLS1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBzaG91bGQgc3VjY2VlZCB3aXRoIGVtcHR5IG91dHB1dCB3aXRoIGVtcHR5IGdsb2InICcKKwlnaXQgcmV2LWxpc3QgLS1nbG9iPWRvZXMtbm90LW1hdGNoLWFueXRoaW5nID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0bG9nIGFjY2VwdHMgLS1nbG9iLy0tdGFncy8tLXJlbW90ZXMnICcKKworCWNvbXBhcmUgc2hvcnRsb2cgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iIC0tYnJhbmNoZXM9c3Vic3BhY2UgJiYKKwljb21wYXJlIHNob3J0bG9nIFwKKwkgICJtYXN0ZXIgc3Vic3BhY2UteCBzb21lcmVmIG90aGVyL3RocmVlIHN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iIFwKKwkgIC0tYnJhbmNoZXMgJiYKKwljb21wYXJlIHNob3J0bG9nIG1hc3RlciAiLS1nbG9iPWhlYWRzL3NvbWVyZWYvKiBtYXN0ZXIiICYmCisJY29tcGFyZSBzaG9ydGxvZyAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byBvdGhlci90aHJlZSIgXAorCSAgIi0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8qIC0tZ2xvYj1oZWFkcy9vdGhlci8qIiAmJgorCWNvbXBhcmUgc2hvcnRsb2cgXAorCSAgIm1hc3RlciBvdGhlci90aHJlZSBzb21lcmVmIHN1YnNwYWNlLXggc3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgXAorCSAgIi0tZ2xvYj1oZWFkcy8qIiAmJgorCWNvbXBhcmUgc2hvcnRsb2cgZm9vL2JhciAtLXRhZ3M9Zm9vICYmCisJY29tcGFyZSBzaG9ydGxvZyAiZm9vL2JhciBxdXgvb25lIHF1eC90d28gcXV4L3giIC0tdGFncyAmJgorCWNvbXBhcmUgc2hvcnRsb2cgZm9vL2JheiAtLXJlbW90ZXM9Zm9vCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnc2hvcnRsb2cgYWNjZXB0cyAtLWdsb2IgYXMgZGV0YWNoZWQgb3B0aW9uJyAnCisKKwljb21wYXJlIHNob3J0bG9nIFwKKwkgICJtYXN0ZXIgb3RoZXIvdGhyZWUgc29tZXJlZiBzdWJzcGFjZS14IHN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iIFwKKwkgICItLWdsb2IgaGVhZHMvKiIKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdzaG9ydGxvZyAtLWdsb2IgaXMgbm90IGNvbmZ1c2VkIGJ5IG9wdGlvbi1saWtlIGFyZ3VtZW50JyAnCisKKwljb21wYXJlIHNob3J0bG9nIG1hc3RlciAiLS1nbG9iIC1lIG1hc3RlciIKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMTktcmV2LWxpc3QtYW5jZXN0cnktcGF0aC5zaCBiL3QvdDYwMTktcmV2LWxpc3QtYW5jZXN0cnktcGF0aC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNTNmODQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxOS1yZXYtbGlzdC1hbmNlc3RyeS1wYXRoLnNoCkBAIC0wLDAgKzEsMTU2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nLS1hbmNlc3RyeS1wYXRoJworCisjICAgICAgICAgIEQtLS1FLS0tLS0tLUYKKyMgICAgICAgICAvICAgICBcICAgICAgIFwKKyMgICAgQi0tLUMtLS1HLS0tSC0tLUktLS1KCisjICAgLyAgICAgICAgICAgICAgICAgICAgIFwKKyMgIEEtLS0tLS0tSy0tLS0tLS0tLS0tLS0tLUwtLU0KKyMKKyMgIEQuLk0gICAgICAgICAgICAgICAgID09IEUgRiBHIEggSSBKIEsgTCBNCisjICAtLWFuY2VzdHJ5LXBhdGggRC4uTSA9PSBFIEYgSCBJIEogTCBNCisjCisjICBELi5NIC0tIE0udCAgICAgICAgICAgICAgICAgPT0gTQorIyAgLS1hbmNlc3RyeS1wYXRoIEQuLk0gLS0gTS50ID09IE0KKyMKKyMgIEYuLi5JICAgICAgICAgICAgICAgICA9PSBGIEcgSCBJCisjICAtLWFuY2VzdHJ5LXBhdGggRi4uLkkgPT0gRiBIIEkKKyMKKyMgIEcuLk0gLS0gRy50ICAgICAgICAgICAgICAgICA9PSBbbm90aGluZyAtIHdhcyBkcm9wcGVkIGluICItcyBvdXJzIiBtZXJnZSBMXQorIyAgLS1hbmNlc3RyeS1wYXRoIEcuLk0gLS0gRy50ID09IEwKKyMgIC0tYW5jZXN0cnktcGF0aCAtLXNpbXBsaWZ5LW1lcmdlcyBHXi4uTSAtLSBHLnQgPT0gRyBMCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X21lcmdlICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyAtbSAiJDIiICIkMSIgJiYKKwlnaXQgdGFnICIkMiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgQSAmJgorCXRlc3RfY29tbWl0IEIgJiYKKwl0ZXN0X2NvbW1pdCBDICYmCisJdGVzdF9jb21taXQgRCAmJgorCXRlc3RfY29tbWl0IEUgJiYKKwl0ZXN0X2NvbW1pdCBGICYmCisJZ2l0IHJlc2V0IC0taGFyZCBDICYmCisJdGVzdF9jb21taXQgRyAmJgorCXRlc3RfbWVyZ2UgRSBIICYmCisJdGVzdF9jb21taXQgSSAmJgorCXRlc3RfbWVyZ2UgRiBKICYmCisJZ2l0IHJlc2V0IC0taGFyZCBBICYmCisJdGVzdF9jb21taXQgSyAmJgorCXRlc3RfbWVyZ2UgSiBMICYmCisJdGVzdF9jb21taXQgTQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBELi5NJyAnCisJZm9yIGMgaW4gRSBGIEcgSCBJIEogSyBMIE07IGRvIGVjaG8gJGM7IGRvbmUgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWZvcm1hdD0lcyBELi5NIHwKKwlzZWQgLWUgIi9eY29tbWl0IC9kIiB8CisJc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggRC4uTScgJworCWZvciBjIGluIEUgRiBIIEkgSiBMIE07IGRvIGVjaG8gJGM7IGRvbmUgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggLS1mb3JtYXQ9JXMgRC4uTSB8CisJc2VkIC1lICIvXmNvbW1pdCAvZCIgfAorCXNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgRC4uTSAtLSBNLnQnICcKKwllY2hvIE0gPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWZvcm1hdD0lcyBELi5NIC0tIE0udCB8CisJc2VkIC1lICIvXmNvbW1pdCAvZCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIEQuLk0gLS0gTS50JyAnCisJZWNobyBNID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIC0tZm9ybWF0PSVzIEQuLk0gLS0gTS50IHwKKwlzZWQgLWUgIi9eY29tbWl0IC9kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBGLi4uSScgJworCWZvciBjIGluIEYgRyBIIEk7IGRvIGVjaG8gJGM7IGRvbmUgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWZvcm1hdD0lcyBGLi4uSSB8CisJc2VkIC1lICIvXmNvbW1pdCAvZCIgfAorCXNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIEYuLi5JJyAnCisJZm9yIGMgaW4gRiBIIEk7IGRvIGVjaG8gJGM7IGRvbmUgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggLS1mb3JtYXQ9JXMgRi4uLkkgfAorCXNlZCAtZSAiL15jb21taXQgL2QiIHwKKwlzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgRy50IGlzIGRyb3BwZWQgaW4gYW4gIi1zIG91cnMiIG1lcmdlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBHLi5NIC0tIEcudCcgJworCWdpdCByZXYtbGlzdCAtLWZvcm1hdD0lcyBHLi5NIC0tIEcudCB8CisJc2VkIC1lICIvXmNvbW1pdCAvZCIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIEcuLk0gLS0gRy50JyAnCisJZWNobyBMID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIC0tZm9ybWF0PSVzIEcuLk0gLS0gRy50IHwKKwlzZWQgLWUgIi9eY29tbWl0IC9kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggLS1zaW1wbGlmeS1tZXJnZXMgR14uLk0gLS0gRy50JyAnCisJZm9yIGMgaW4gRyBMOyBkbyBlY2hvICRjOyBkb25lID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIC0tc2ltcGxpZnktbWVyZ2VzIC0tZm9ybWF0PSVzIEdeLi5NIC0tIEcudCB8CisJc2VkIC1lICIvXmNvbW1pdCAvZCIgfAorCXNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyAgIGItLS1iYworIyAgLyBcIC8KKyMgYSAgIFgKKyMgIFwgLyBcCisjICAgYy0tLWNiCisjCisjIEFsbCByZWZuYW1lcyBwcmVmaXhlZCB3aXRoICd4JyB0byBhdm9pZCBjb25mdXNpb24gd2l0aCB0aGUgdGFncworIyBnZW5lcmF0ZWQgYnkgdGVzdF9jb21taXQgb24gY2FzZS1pbnNlbnNpdGl2ZSBzeXN0ZW1zLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY3Jpc3MtY3Jvc3MnICcKKwlta2RpciBjcmlzcy1jcm9zcyAmJgorCShjZCBjcmlzcy1jcm9zcyAmJgorCSBnaXQgaW5pdCAmJgorCSB0ZXN0X2NvbW1pdCBBICYmCisJIGdpdCBjaGVja291dCAtYiB4YiBtYXN0ZXIgJiYKKwkgdGVzdF9jb21taXQgQiAmJgorCSBnaXQgY2hlY2tvdXQgLWIgeGMgbWFzdGVyICYmCisJIHRlc3RfY29tbWl0IEMgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHhiYyB4YiAtLSAmJgorCSBnaXQgbWVyZ2UgeGMgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHhjYiB4YyAtLSAmJgorCSBnaXQgbWVyZ2UgeGIgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlcikKKycKKworIyBubyBjb21taXRzIGluIGJjIGRlc2NlbmQgZnJvbSBjYgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3Jpc3MtY3Jvc3M6IHJldi1saXN0IC0tYW5jZXN0cnktcGF0aCBjYi4uYmMnICcKKwkoY2QgY3Jpc3MtY3Jvc3MgJiYKKwkgZ2l0IHJldi1saXN0IC0tYW5jZXN0cnktcGF0aCB4Y2IuLnhiYyA+IGFjdHVhbCAmJgorCSB0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsKQorJworCisjIG5vIGNvbW1pdHMgaW4gcmVwb3NpdG9yeSBkZXNjZW5kIGZyb20gY2IKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyaXNzLWNyb3NzOiByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggLS1hbGwgXmNiJyAnCisJKGNkIGNyaXNzLWNyb3NzICYmCisJIGdpdCByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggLS1hbGwgXnhjYiA+IGFjdHVhbCAmJgorCSB0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMjAtbWVyZ2UtZGYuc2ggYi90L3Q2MDIwLW1lcmdlLWRmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwMGE0Y2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDIwLW1lcmdlLWRmLnNoCkBAIC0wLDAgKzEsMTUwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEZyZWRyaWsgS3VpdmluZW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBtZXJnZSB3aXRoIGRpcmVjdG9yeS9maWxlIGNvbmZsaWN0cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHJlcG9zaXRvcnknICcKKwllY2hvIEhlbGxvID5pbml0ICYmCisJZ2l0IGFkZCBpbml0ICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgYnJhbmNoIEIgJiYKKwlta2RpciBkaXIgJiYKKwllY2hvIGZvbyA+ZGlyL2ZvbyAmJgorCWdpdCBhZGQgZGlyL2ZvbyAmJgorCWdpdCBjb21taXQgLW0gIkZpbGU6IGRpci9mb28iICYmCisKKwlnaXQgY2hlY2tvdXQgQiAmJgorCWVjaG8gZmlsZSBkaXIgPmRpciAmJgorCWdpdCBhZGQgZGlyICYmCisJZ2l0IGNvbW1pdCAtbSAiRmlsZTogZGlyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNZXJnZSB3aXRoIGQvZiBjb25mbGljdHMnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG1lcmdlIC1tICJtZXJnZSBtc2ciIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGL0QgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXJtIC5naXQvaW5kZXggJiYKKworCW1rZGlyIGJlZm9yZSAmJgorCWVjaG8gRklMRSA+YmVmb3JlL29uZSAmJgorCWVjaG8gRklMRSA+YWZ0ZXIgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGZpcnN0ICYmCisKKwlybSAtZiBhZnRlciAmJgorCWdpdCBtdiBiZWZvcmUgYWZ0ZXIgJiYKKwlnaXQgY29tbWl0IC1tIG1vdmUgJiYKKworCWdpdCBjaGVja291dCAtYiBwYXJhIEhFQUReICYmCisJZWNobyBDT01QTEVURUxZIEFOT1RIRVIgRklMRSA+YW5vdGhlciAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gcGFyYSAmJgorCisJZ2l0IG1lcmdlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtb2RpZnkvZGVsZXRlICsgZGlyZWN0b3J5L2ZpbGUgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbW9kaWZ5ICYmCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisKKwlwcmludGYgImFcbmJcbmNcbmRcbmVcbmZcbmdcbmhcbiIgPmxldHRlcnMgJiYKKwlnaXQgYWRkIGxldHRlcnMgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCSMgVGhyb3cgaW4gbGV0dGVycy50eHQgZm9yIHNvcnRpbmcgb3JkZXIgZnVuCisJIyAoImxldHRlcnMudHh0IiBzb3J0cyBiZXR3ZWVuICJsZXR0ZXJzIiBhbmQgImxldHRlcnMvZmlsZSIpCisJZWNobyBpID4+bGV0dGVycyAmJgorCWVjaG8gInZlcnNpb24gMiIgPmxldHRlcnMudHh0ICYmCisJZ2l0IGFkZCBsZXR0ZXJzIGxldHRlcnMudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSBtb2RpZmllZCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGRlbGV0ZSBIRUFEXiAmJgorCWdpdCBybSBsZXR0ZXJzICYmCisJbWtkaXIgbGV0dGVycyAmJgorCT5sZXR0ZXJzL2ZpbGUgJiYKKwllY2hvICJ2ZXJzaW9uIDEiID5sZXR0ZXJzLnR4dCAmJgorCWdpdCBhZGQgbGV0dGVycyBsZXR0ZXJzLnR4dCAmJgorCWdpdCBjb21taXQgLW0gZGVsZXRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZnkvZGVsZXRlICsgZGlyZWN0b3J5L2ZpbGUgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgZGVsZXRlXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbW9kaWZ5ICYmCisKKwl0ZXN0IDUgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCA0IC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMSAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3RfcGF0aF9pc19maWxlIGxldHRlcnMvZmlsZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGxldHRlcnMudHh0ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbGV0dGVyc35tb2RpZnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZ5L2RlbGV0ZSArIGRpcmVjdG9yeS9maWxlIGNvbmZsaWN0OyBvdGhlciB3YXknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNsZWFuIC1mICYmCisJZ2l0IGNoZWNrb3V0IG1vZGlmeV4wICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZGVsZXRlICYmCisKKwl0ZXN0IDUgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCA0IC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMSAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3RfcGF0aF9pc19maWxlIGxldHRlcnMvZmlsZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGxldHRlcnMudHh0ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbGV0dGVyc35IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NpbXBsZSBtZXJnZSBpbiByZXBvIHdpdGggaW50ZXJlc3RpbmcgcGF0aG5hbWVzJyAnCisJIyBTaW1wbGUgbGV4aWNvZ3JhcGhpYyBvcmRlcmluZyBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd291bGQgYmU6CisJIyAgICAgZm9vCisJIyAgICAgZm9vL2JhcgorCSMgICAgIGZvby9iYXItMgorCSMgICAgIGZvby9iYXIvYmF6CisJIyAgICAgZm9vL2Jhci0yL2JhegorCSMgVGhlIGZhY3QgdGhhdCBmb28vYmFyLTIgYXBwZWFycyBiZXR3ZWVuIGZvby9iYXIgYW5kIGZvby9iYXIvYmF6CisJIyBjYW4gdHJpcCB1cCBzb21lIGNvZGVwYXRocywgYW5kIGlzIHRoZSBwb2ludCBvZiB0aGlzIHRlc3QuCisJdGVzdF9jcmVhdGVfcmVwbyBuYW1lLW9yZGVyaW5nICYmCisJKAorCQljZCBuYW1lLW9yZGVyaW5nICYmCisKKwkJbWtkaXIgLXAgZm9vL2JhciAmJgorCQlta2RpciAtcCBmb28vYmFyLTIgJiYKKwkJPmZvby9iYXIvYmF6ICYmCisJCT5mb28vYmFyLTIvYmF6ICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCQlnaXQgYnJhbmNoIG1haW4gJiYKKwkJZ2l0IGJyYW5jaCBvdGhlciAmJgorCisJCWdpdCBjaGVja291dCBvdGhlciAmJgorCQllY2hvIG90aGVyID5mb28vYmFyLTIvYmF6ICYmCisJCWdpdCBhZGQgLXUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBvdGhlciAmJgorCisJCWdpdCBjaGVja291dCBtYWluICYmCisJCWVjaG8gbWFpbiA+Zm9vL2Jhci9iYXogJiYKKwkJZ2l0IGFkZCAtdSAmJgorCQlnaXQgY29tbWl0IC1tIG1haW4gJiYKKworCQlnaXQgbWVyZ2Ugb3RoZXIgJiYKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKwkJZ2l0IHJldi1wYXJzZSA6MDpmb28vYmFyL2JheiA6MDpmb28vYmFyLTIvYmF6ID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEfjE6Zm9vL2Jhci9iYXogb3RoZXI6Zm9vL2Jhci0yL2JheiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDIxLW1lcmdlLWNyaXNzLWNyb3NzLnNoIGIvdC90NjAyMS1tZXJnZS1jcmlzcy1jcm9zcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZDVlOTkyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAyMS1tZXJnZS1jcmlzcy1jcm9zcy5zaApAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEZyZWRyaWsgS3VpdmluZW4KKyMKKworIyBTZWUgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0L1BpbmUuTE5YLjQuNDQuMDUwNDI3MTI1NDEyMC40Njc4LTEwMDAwMEB3YXguZWRzLm9yZy8gZm9yIGEKKyMgbmljZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoaXMgaXMgYWJvdXQuCisKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBjcmlzcy1jcm9zcyBtZXJnZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHJlcG9zaXRvcnknICcKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgOCA5ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiIGZpbGUgJiYKKworCWdpdCBicmFuY2ggQSAmJgorCWdpdCBicmFuY2ggQiAmJgorCWdpdCBjaGVja291dCBBICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgIjggY2hhbmdlZCBpbiBCOCwgYnJhbmNoIEEiIDkgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJCOCIgZmlsZSAmJgorCWdpdCBjaGVja291dCBCICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAiMyBjaGFuZ2VkIGluIEMzLCBicmFuY2ggQiIgNCA1IDYgNyA4IDkgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJDMyIgZmlsZSAmJgorCWdpdCBicmFuY2ggQzMgJiYKKworCWdpdCBtZXJnZSAtbSAicHJlIEUzIG1lcmdlIiBBICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAiMyBjaGFuZ2VkIGluIEUzLCBicmFuY2ggQi4gTmV3IGZpbGUgc2l6ZSIgNCA1IDYgNyAiOCBjaGFuZ2VkIGluIEI4LCBicmFuY2ggQSIgOSA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIkUzIiBmaWxlICYmCisKKwlnaXQgY2hlY2tvdXQgQSAmJgorCWdpdCBtZXJnZSAtbSAicHJlIEQ4IG1lcmdlIiBDMyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSAyICIzIGNoYW5nZWQgaW4gQzMsIGJyYW5jaCBCIiA0IDUgNiA3ICI4IGNoYW5nZWQgaW4gRDgsIGJyYW5jaCBBLiBOZXcgZmlsZSBzaXplIDIiIDkgPmZpbGUgJiYKKworCWdpdCBjb21taXQgLW0gRDggZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmlzcy1jcm9zcyBtZXJnZScgJworCWdpdCBtZXJnZSAtbSAiZmluYWwgbWVyZ2UiIEIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ3Jpc3MtY3Jvc3MgbWVyZ2UgcmVzdWx0JyAnCisJY2F0IDw8LVxFT0YgPmZpbGUtZXhwZWN0ICYmCisJMQorCTIKKwkzIGNoYW5nZWQgaW4gRTMsIGJyYW5jaCBCLiBOZXcgZmlsZSBzaXplCisJNAorCTUKKwk2CisJNworCTggY2hhbmdlZCBpbiBEOCwgYnJhbmNoIEEuIE5ldyBmaWxlIHNpemUgMgorCTkKKwlFT0YKKworCXRlc3RfY21wIGZpbGUtZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ3Jpc3MtY3Jvc3MgbWVyZ2UgZmFpbHMgKC1zIHJlc29sdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBBXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZXNvbHZlIC1tICJmaW5hbCBtZXJnZSIgQgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMjItbWVyZ2UtcmVuYW1lLnNoIGIvdC90NjAyMi1tZXJnZS1yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmJiYmEzZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMjItbWVyZ2UtcmVuYW1lLnNoCkBAIC0wLDAgKzEsOTEwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nTWVyZ2UtcmVjdXJzaXZlIG1lcmdpbmcgcmVuYW1lcycKKy4gLi90ZXN0LWxpYi5zaAorCittb2RpZnkgKCkgeworCXNlZCAtZSAiJDEiIDwiJDIiID4iJDIueCIgJiYKKwltdiAiJDIueCIgIiQyIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWNhdCA+QSA8PC1cRU9GICYmCisJYSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKwliIGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorCWMgY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisJZCBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQKKwllIGVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZQorCWYgZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmCisJZyBnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cKKwloIGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAorCWkgaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpCisJaiBqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqamoKKwlrIGtra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2traworCWwgbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsCisJbSBtbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW0KKwluIG5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubgorCW8gb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vCisJRU9GCisKKwljYXQgPk0gPDwtXEVPRiAmJgorCUEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisJQiBCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkIKKwlDIENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQworCUQgRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERECisJRSBFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUUKKwlGIEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgorCUcgR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHCisJSCBISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEgKKwlJIElJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSQorCUogSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKCisJSyBLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0sKKwlMIExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAorCU0gTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NCisJTiBOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4KKwlPIE9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTworCUVPRgorCisJZ2l0IGFkZCBBIE0gJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIGhhcyBBIGFuZCBNIiAmJgorCWdpdCBicmFuY2ggd2hpdGUgJiYKKwlnaXQgYnJhbmNoIHJlZCAmJgorCWdpdCBicmFuY2ggYmx1ZSAmJgorCWdpdCBicmFuY2ggeWVsbG93ICYmCisJZ2l0IGJyYW5jaCBjaGFuZ2UgJiYKKwlnaXQgYnJhbmNoIGNoYW5nZStyZW5hbWUgJiYKKworCXNlZCAtZSAiL15nIC9zLy4qL2cgOiBtYXN0ZXIgY2hhbmdlcyBhIGxpbmUvIiA8QSA+QSsgJiYKKwltdiBBKyBBICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibWFzdGVyIHVwZGF0ZXMgQSIgJiYKKworCWdpdCBjaGVja291dCB5ZWxsb3cgJiYKKwlybSAtZiBNICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAieWVsbG93IHJlbW92ZXMgTSIgJiYKKworCWdpdCBjaGVja291dCB3aGl0ZSAmJgorCXNlZCAtZSAiL15nIC9zLy4qL2cgOiB3aGl0ZSBjaGFuZ2VzIGEgbGluZS8iIDxBID5CICYmCisJc2VkIC1lICIvXkcgL3MvLiovRyA6IGNvbG9yZWQgYnJhbmNoIGNoYW5nZXMgYSBsaW5lLyIgPE0gPk4gJiYKKwlybSAtZiBBIE0gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIEEgQiBNIE4gJiYKKwlnaXQgY29tbWl0IC1tICJ3aGl0ZSByZW5hbWVzIEEtPkIsIE0tPk4iICYmCisKKwlnaXQgY2hlY2tvdXQgcmVkICYmCisJc2VkIC1lICIvXmcgL3MvLiovZyA6IHJlZCBjaGFuZ2VzIGEgbGluZS8iIDxBID5CICYmCisJc2VkIC1lICIvXkcgL3MvLiovRyA6IGNvbG9yZWQgYnJhbmNoIGNoYW5nZXMgYSBsaW5lLyIgPE0gPk4gJiYKKwlybSAtZiBBIE0gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIEEgQiBNIE4gJiYKKwlnaXQgY29tbWl0IC1tICJyZWQgcmVuYW1lcyBBLT5CLCBNLT5OIiAmJgorCisJZ2l0IGNoZWNrb3V0IGJsdWUgJiYKKwlzZWQgLWUgIi9eZyAvcy8uKi9nIDogYmx1ZSBjaGFuZ2VzIGEgbGluZS8iIDxBID5DICYmCisJc2VkIC1lICIvXkcgL3MvLiovRyA6IGNvbG9yZWQgYnJhbmNoIGNoYW5nZXMgYSBsaW5lLyIgPE0gPk4gJiYKKwlybSAtZiBBIE0gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIEEgQyBNIE4gJiYKKwlnaXQgY29tbWl0IC1tICJibHVlIHJlbmFtZXMgQS0+QywgTS0+TiIgJiYKKworCWdpdCBjaGVja291dCBjaGFuZ2UgJiYKKwlzZWQgLWUgIi9eZyAvcy8uKi9nIDogY2hhbmdlZCBsaW5lLyIgPEEgPkErICYmCisJbXYgQSsgQSAmJgorCWdpdCBjb21taXQgLXEgLWEgLW0gImNoYW5nZWQiICYmCisKKwlnaXQgY2hlY2tvdXQgY2hhbmdlK3JlbmFtZSAmJgorCXNlZCAtZSAiL15nIC9zLy4qL2cgOiBjaGFuZ2VkIGxpbmUvIiA8QSA+QiAmJgorCXJtIEEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEIgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tICJjaGFuZ2VkIGFuZCByZW5hbWVkIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIHJlbmFtaW5nIGJyYW5jaCBpbnRvIHVucmVuYW1pbmcgb25lJyBcCisnCisJZ2l0IHNob3ctYnJhbmNoICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwdWxsIC4gd2hpdGUgJiYKKwlnaXQgbHMtZmlsZXMgLXMgJiYKKwlnaXQgbHMtZmlsZXMgLXUgQiA+Yi5zdGFnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGIuc3RhZ2VzICYmCisJZ2l0IGxzLWZpbGVzIC1zIE4gPm4uc3RhZ2VzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBuLnN0YWdlcyAmJgorCXNlZCAtbmUgIi9eZy97CisJcAorCXEKKwl9IiBCIHwgZ3JlcCBtYXN0ZXIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSB3aGl0ZSBOCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgcmVuYW1pbmcgYnJhbmNoIGludG8gYW5vdGhlciByZW5hbWluZyBvbmUnIFwKKycKKwlybSAtZiBCICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCByZWQgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHB1bGwgLiB3aGl0ZSAmJgorCWdpdCBscy1maWxlcyAtdSBCID5iLnN0YWdlcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYi5zdGFnZXMgJiYKKwlnaXQgbHMtZmlsZXMgLXMgTiA+bi5zdGFnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG4uc3RhZ2VzICYmCisJc2VkIC1uZSAiL15nL3sKKwlwCisJcQorCX0iIEIgfCBncmVwIHJlZCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHdoaXRlIE4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCB1bnJlbmFtaW5nIGJyYW5jaCBpbnRvIHJlbmFtaW5nIG9uZScgXAorJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc2hvdy1icmFuY2ggJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHB1bGwgLiBtYXN0ZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXUgQiA+Yi5zdGFnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGIuc3RhZ2VzICYmCisJZ2l0IGxzLWZpbGVzIC1zIE4gPm4uc3RhZ2VzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBuLnN0YWdlcyAmJgorCXNlZCAtbmUgIi9eZy97CisJcAorCXEKKwl9IiBCIHwgZ3JlcCByZWQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSB3aGl0ZSBOCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgY29uZmxpY3RpbmcgcmVuYW1lcycgXAorJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc2hvdy1icmFuY2ggJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHB1bGwgLiBibHVlICYmCisJZ2l0IGxzLWZpbGVzIC11IEEgPmEuc3RhZ2VzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhLnN0YWdlcyAmJgorCWdpdCBscy1maWxlcyAtdSBCID5iLnN0YWdlcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYi5zdGFnZXMgJiYKKwlnaXQgbHMtZmlsZXMgLXUgQyA+Yy5zdGFnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGMuc3RhZ2VzICYmCisJZ2l0IGxzLWZpbGVzIC1zIE4gPm4uc3RhZ2VzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBuLnN0YWdlcyAmJgorCXNlZCAtbmUgIi9eZy97CisJcAorCXEKKwl9IiBCIHwgZ3JlcCByZWQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSB3aGl0ZSBOCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVyZmVyZW5jZSB3aXRoIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc2hvdy1icmFuY2ggJiYKKwllY2hvID5BIHRoaXMgZmlsZSBzaG91bGQgbm90IG1hdHRlciAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcHVsbCAuIHdoaXRlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgQQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcmZlcmVuY2Ugd2l0aCB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHdoaXRlICYmCisJZ2l0IHNob3ctYnJhbmNoICYmCisJcm0gLWYgQSAmJgorCWVjaG8gPkEgdGhpcyBmaWxlIHNob3VsZCBub3QgbWF0dGVyICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwdWxsIC4gcmVkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgQQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcmZlcmVuY2Ugd2l0aCB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWYgQSBNICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCB0YWcgLWYgYW5jaG9yICYmCisJZ2l0IHNob3ctYnJhbmNoICYmCisJZ2l0IHB1bGwgLiB5ZWxsb3cgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBNICYmCisJZ2l0IHJlc2V0IC0taGFyZCBhbmNob3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlZCB3b3JraW5nIHRyZWUgZmlsZSBzaG91bGQgcHJldmVudCB0aGUgbWVyZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWYgQSBNICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCB0YWcgLWYgYW5jaG9yICYmCisJZ2l0IHNob3ctYnJhbmNoICYmCisJZWNobyA+Pk0gb25lIGxpbmUgYWRkaXRpb24gJiYKKwljYXQgTSA+TS5zYXZlZCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBwdWxsIC4geWVsbG93ICYmCisJdGVzdF9jbXAgTSBNLnNhdmVkICYmCisJcm0gLWYgTS5zYXZlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGVkIHdvcmtpbmcgdHJlZSBmaWxlIHNob3VsZCBwcmV2ZW50IHRoZSBtZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBBIE0gJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHRhZyAtZiBhbmNob3IgJiYKKwlnaXQgc2hvdy1icmFuY2ggJiYKKwllY2hvID4+TSBvbmUgbGluZSBhZGRpdGlvbiAmJgorCWNhdCBNID5NLnNhdmVkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBNICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IHB1bGwgLiB5ZWxsb3cgJiYKKwl0ZXN0X2NtcCBNIE0uc2F2ZWQgJiYKKwlybSAtZiBNLnNhdmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVyZmVyZW5jZSB3aXRoIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBBIE0gJiYKKwlnaXQgY2hlY2tvdXQgLWYgeWVsbG93ICYmCisJZ2l0IHRhZyAtZiBhbmNob3IgJiYKKwlnaXQgc2hvdy1icmFuY2ggJiYKKwllY2hvID5NIHRoaXMgZmlsZSBzaG91bGQgbm90IG1hdHRlciAmJgorCWdpdCBwdWxsIC4gbWFzdGVyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgTSAmJgorCSEgeworCQlnaXQgbHMtZmlsZXMgLXMgfAorCQlncmVwIE0KKwl9ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBhbmNob3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb2YgaWRlbnRpY2FsIGNoYW5nZXMgaW4gYSByZW5hbWVkIGZpbGUnICcKKwlybSAtZiBBIE0gTiAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgY2hhbmdlK3JlbmFtZSAmJgorCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLTM2MDAgQiA+b2xkLW10aW1lICYmCisJR0lUX01FUkdFX1ZFUkJPU0lUWT0zIGdpdCBtZXJnZSBjaGFuZ2UgPm91dCAmJgorCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgQiA+bmV3LW10aW1lICYmCisJdGVzdF9jbXAgb2xkLW10aW1lIG5ldy1tdGltZSAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWdpdCBjaGVja291dCBjaGFuZ2UgJiYKKworCSMgQSB3aWxsIGJlIHJlbmFtZWQgdG8gQjsgd2UgY2hlY2sgbXRpbWVzIGFuZCBmaWxlIHByZXNlbmNlCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgQiAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC0zNjAwIEEgPm9sZC1tdGltZSAmJgorCUdJVF9NRVJHRV9WRVJCT1NJVFk9MyBnaXQgbWVyZ2UgY2hhbmdlK3JlbmFtZSA+b3V0ICYmCisKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBBICYmCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgQiA+bmV3LW10aW1lICYmCisJdGVzdCAkKGNhdCBvbGQtbXRpbWUpIC1sdCAkKGNhdCBuZXctbXRpbWUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciByZW5hbWUgKyBkL2YgY29uZmxpY3RzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBkaXItaW4td2F5ICYmCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisKKwlta2RpciBzdWIgJiYKKwlta2RpciBkaXIgJiYKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbjdcbjhcbjlcbjEwXG4iID5zdWIvZmlsZSAmJgorCWVjaG8gZm9vID5kaXIvZmlsZS1pbi10aGUtd2F5ICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gIkNvbW1vbiBjb21taXQiICYmCisKKwllY2hvIDExID4+c3ViL2ZpbGUgJiYKKwllY2hvIG1vcmUgPj5kaXIvZmlsZS1pbi10aGUtd2F5ICYmCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBjb21taXQgLW0gIkNvbW1pdCB0byBtZXJnZSwgd2l0aCBkaXIgaW4gdGhlIHdheSIgJiYKKworCWdpdCBjaGVja291dCAtYiBkaXItbm90LWluLXdheSAmJgorCWdpdCByZXNldCAtLXNvZnQgSEVBRF4gJiYKKwlnaXQgcm0gLXJmIGRpciAmJgorCWdpdCBjb21taXQgLW0gIkNvbW1pdCB0byBtZXJnZSwgd2l0aCBkaXIgcmVtb3ZlZCIgLS0gZGlyIHN1Yi9maWxlICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lZC1maWxlLWhhcy1uby1jb25mbGljdHMgZGlyLWluLXdheX4xICYmCisJZ2l0IHJtIC1yZiBkaXIgJiYKKwlnaXQgcm0gc3ViL2ZpbGUgJiYKKwlwcmludGYgIjFcbjJcbjNcbjRcbjU1NTVcbjZcbjdcbjhcbjlcbjEwXG4iID5kaXIgJiYKKwlnaXQgYWRkIGRpciAmJgorCWdpdCBjb21taXQgLW0gIkluZGVwZW5kZW50IGNoYW5nZSIgJiYKKworCWdpdCBjaGVja291dCAtYiByZW5hbWVkLWZpbGUtaGFzLWNvbmZsaWN0cyBkaXItaW4td2F5fjEgJiYKKwlnaXQgcm0gLXJmIGRpciAmJgorCWdpdCBtdiBzdWIvZmlsZSBkaXIgJiYKKwllY2hvIDEyID4+ZGlyICYmCisJZ2l0IGFkZCBkaXIgJiYKKwlnaXQgY29tbWl0IC1tICJDb25mbGljdGluZyBjaGFuZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlbmFtZStEL0YgY29uZmxpY3Q7IHJlbmFtZWQgZmlsZSBtZXJnZXMgKyBkaXIgbm90IGluIHdheScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLXEgcmVuYW1lZC1maWxlLWhhcy1uby1jb25mbGljdHNeMCAmJgorCisJZ2l0IG1lcmdlIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIGRpci1ub3QtaW4td2F5ICYmCisKKwlnaXQgZGlmZiAtLXF1aWV0ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDU1NTUgNiA3IDggOSAxMCAxMSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVuYW1lK0QvRiBjb25mbGljdDsgcmVuYW1lZCBmaWxlIG1lcmdlcyBidXQgZGlyIGluIHdheScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtcmYgZGlyfiogJiYKKwlnaXQgY2hlY2tvdXQgLXEgcmVuYW1lZC1maWxlLWhhcy1uby1jb25mbGljdHNeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSBkaXItaW4td2F5ID5vdXRwdXQgJiYKKworCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChtb2RpZnkvZGVsZXRlKTogZGlyL2ZpbGUtaW4tdGhlLXdheSIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiQXV0by1tZXJnaW5nIGRpciIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiQWRkaW5nIGFzIGRpcn5IRUFEIGluc3RlYWQiIG91dHB1dCAmJgorCisJdGVzdCAzIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkiICYmCisJdGVzdCAyIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgZGlyL2ZpbGUtaW4tdGhlLXdheSB8IHdjIC1sKSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0ICYmCisKKwl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIvZmlsZS1pbi10aGUtd2F5ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyfkhFQUQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaXJ+SEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTYW1lIGFzIHByZXZpb3VzLCBidXQgbWVyZ2VkIG90aGVyIHdheScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtcmYgZGlyfiogJiYKKwlnaXQgY2hlY2tvdXQgLXEgZGlyLWluLXdheV4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIHJlbmFtZWQtZmlsZS1oYXMtbm8tY29uZmxpY3RzID5vdXRwdXQgMj5lcnJvcnMgJiYKKworCSEgZ3JlcCAiZXJyb3I6IHJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQiIGVycm9ycyAmJgorCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChtb2RpZnkvZGVsZXRlKTogZGlyL2ZpbGUtaW4tdGhlLXdheSIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiQXV0by1tZXJnaW5nIGRpciIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiQWRkaW5nIGFzIGRpcn5yZW5hbWVkLWZpbGUtaGFzLW5vLWNvbmZsaWN0cyBpbnN0ZWFkIiBvdXRwdXQgJiYKKworCXRlc3QgMyAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpIiAmJgorCXRlc3QgMiAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IGRpci9maWxlLWluLXRoZS13YXkgfCB3YyAtbCkiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jYWNoZWQgLS1xdWlldCAmJgorCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyL2ZpbGUtaW4tdGhlLXdheSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGRpcn5yZW5hbWVkLWZpbGUtaGFzLW5vLWNvbmZsaWN0cyAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGRpcn5yZW5hbWVkLWZpbGUtaGFzLW5vLWNvbmZsaWN0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZW5hbWUrRC9GIGNvbmZsaWN0OyByZW5hbWVkIGZpbGUgY2Fubm90IG1lcmdlLCBkaXIgbm90IGluIHdheScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtcmYgZGlyfiogJiYKKwlnaXQgY2hlY2tvdXQgLXEgcmVuYW1lZC1maWxlLWhhcy1jb25mbGljdHNeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSBkaXItbm90LWluLXdheSAmJgorCisJdGVzdCAzIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkiICYmCisJdGVzdCAzIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgZGlyIHwgd2MgLWwpIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQgJiYKKworCXRlc3RfcGF0aF9pc19maWxlIGRpciAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTEKKwkyCisJMworCTQKKwk1CisJNgorCTcKKwk4CisJOQorCTEwCisJPDw8PDw8PCBIRUFEOmRpcgorCTEyCisJPT09PT09PQorCTExCisJPj4+Pj4+PiBkaXItbm90LWluLXdheTpzdWIvZmlsZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGRpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZW5hbWUrRC9GIGNvbmZsaWN0OyByZW5hbWVkIGZpbGUgY2Fubm90IG1lcmdlIGFuZCBkaXIgaW4gdGhlIHdheScgJworCW1vZGlmeSBzL2Rpci1ub3QtaW4td2F5L2Rpci1pbi13YXkvIGV4cGVjdGVkICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLXJmIGRpcn4qICYmCisJZ2l0IGNoZWNrb3V0IC1xIHJlbmFtZWQtZmlsZS1oYXMtY29uZmxpY3RzXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1zdHJhdGVneT1yZWN1cnNpdmUgZGlyLWluLXdheSAmJgorCisJdGVzdCA1IC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkiICYmCisJdGVzdCAzIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgZGlyIHwgZ3JlcCAtdiBmaWxlLWluLXRoZS13YXkgfCB3YyAtbCkiICYmCisJdGVzdCAyIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgZGlyL2ZpbGUtaW4tdGhlLXdheSB8IHdjIC1sKSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0ICYmCisKKwl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIvZmlsZS1pbi10aGUtd2F5ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyfkhFQUQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaXJ+SEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTYW1lIGFzIHByZXZpb3VzLCBidXQgbWVyZ2VkIG90aGVyIHdheScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtcmYgZGlyfiogJiYKKwlnaXQgY2hlY2tvdXQgLXEgZGlyLWluLXdheV4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIHJlbmFtZWQtZmlsZS1oYXMtY29uZmxpY3RzICYmCisKKwl0ZXN0IDUgLWVxICIkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDMgLWVxICIkKGdpdCBscy1maWxlcyAtdSBkaXIgfCBncmVwIC12IGZpbGUtaW4tdGhlLXdheSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDIgLWVxICIkKGdpdCBscy1maWxlcyAtdSBkaXIvZmlsZS1pbi10aGUtd2F5IHwgd2MgLWwpIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQgJiYKKworCXRlc3RfcGF0aF9pc19maWxlIGRpci9maWxlLWluLXRoZS13YXkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBkaXJ+cmVuYW1lZC1maWxlLWhhcy1jb25mbGljdHMgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkxCisJMgorCTMKKwk0CisJNQorCTYKKwk3CisJOAorCTkKKwkxMAorCTw8PDw8PDwgSEVBRDpzdWIvZmlsZQorCTExCisJPT09PT09PQorCTEyCisJPj4+Pj4+PiByZW5hbWVkLWZpbGUtaGFzLWNvbmZsaWN0czpkaXIKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaXJ+cmVuYW1lZC1maWxlLWhhcy1jb25mbGljdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYm90aCByZW5hbWUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbnZvbHZlZCBpbiBEL0YgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHJlbmFtZS1kZXN0ICYmCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisKKwlta2RpciBvbmUgJiYKKwllY2hvIHN0dWZmID5vbmUvZmlsZSAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJDb21tb24gY29tbWl0IiAmJgorCisJZ2l0IG12IG9uZS9maWxlIGRlc3RkaXIgJiYKKwlnaXQgY29tbWl0IC1tICJSZW5hbWVkIHRvIGRlc3RkaXIiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc291cmNlLWNvbmZsaWN0IEhFQUR+MSAmJgorCWdpdCBybSAtcmYgb25lICYmCisJbWtkaXIgZGVzdGRpciAmJgorCXRvdWNoIG9uZSBkZXN0ZGlyL2ZvbyAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJDb25mbGljdHMgaW4gdGhlIHdheSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYm90aCByZW5hbWUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbnZvbHZlZCBpbiBEL0YgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLXJmIGRpcn4qICYmCisJZ2l0IGNoZWNrb3V0IC1xIHJlbmFtZS1kZXN0XjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1zdHJhdGVneT1yZWN1cnNpdmUgc291cmNlLWNvbmZsaWN0ICYmCisKKwl0ZXN0IDEgLWVxICIkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKworCXRlc3RfcGF0aF9pc19maWxlIGRlc3RkaXIvZm9vICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgb25lICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGVzdGRpcn5IRUFEICYmCisJdGVzdCAic3R1ZmYiID0gIiQoY2F0IGRlc3RkaXJ+SEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHBhaXIgcmVuYW1lIHRvIHBhcmVudCBvZiBvdGhlciAoRC9GIGNvbmZsaWN0cyknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHJlbmFtZS10d28gJiYKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKworCW1rZGlyIG9uZSAmJgorCW1rZGlyIHR3byAmJgorCWVjaG8gc3R1ZmYgPm9uZS9maWxlICYmCisJZWNobyBvdGhlciA+dHdvL2ZpbGUgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbW9uIGNvbW1pdCIgJiYKKworCWdpdCBybSAtcmYgb25lICYmCisJZ2l0IG12IHR3by9maWxlIG9uZSAmJgorCWdpdCBjb21taXQgLW0gIlJlbmFtZSB0d28vZmlsZSAtPiBvbmUiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lLW9uZSBIRUFEfjEgJiYKKwlnaXQgcm0gLXJmIHR3byAmJgorCWdpdCBtdiBvbmUvZmlsZSB0d28gJiYKKwlybSAtciBvbmUgJiYKKwlnaXQgY29tbWl0IC1tICJSZW5hbWUgb25lL2ZpbGUgLT4gdHdvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWlyIHJlbmFtZSB0byBwYXJlbnQgb2Ygb3RoZXIgKEQvRiBjb25mbGljdHMpIHcvIHVudHJhY2tlZCBkaXInICcKKwlnaXQgY2hlY2tvdXQgLXEgcmVuYW1lLW9uZV4wICYmCisJbWtkaXIgb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIHJlbmFtZS10d28gJiYKKworCXRlc3QgMiAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpIiAmJgorCXRlc3QgMSAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IG9uZSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDEgLWVxICIkKGdpdCBscy1maWxlcyAtdSB0d28gfCB3YyAtbCkiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0ICYmCisKKwl0ZXN0IDQgLWVxICQoZmluZCAuIHwgZ3JlcCAtdiAuZ2l0IHwgd2MgLWwpICYmCisKKwl0ZXN0X3BhdGhfaXNfZGlyIG9uZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG9uZX5yZW5hbWUtdHdvICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdHdvICYmCisJdGVzdCAib3RoZXIiID0gJChjYXQgb25lfnJlbmFtZS10d28pICYmCisJdGVzdCAic3R1ZmYiID0gJChjYXQgdHdvKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWlyIHJlbmFtZSB0byBwYXJlbnQgb2Ygb3RoZXIgKEQvRiBjb25mbGljdHMpIHcvIGNsZWFuIHN0YXJ0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSByZW5hbWUtdHdvICYmCisKKwl0ZXN0IDIgLWVxICIkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDEgLWVxICIkKGdpdCBscy1maWxlcyAtdSBvbmUgfCB3YyAtbCkiICYmCisJdGVzdCAxIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgdHdvIHwgd2MgLWwpIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAmJgorCisJdGVzdCAzIC1lcSAkKGZpbmQgLiB8IGdyZXAgLXYgLmdpdCB8IHdjIC1sKSAmJgorCisJdGVzdF9wYXRoX2lzX2ZpbGUgb25lICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdHdvICYmCisJdGVzdCAib3RoZXIiID0gJChjYXQgb25lKSAmJgorCXRlc3QgInN0dWZmIiA9ICQoY2F0IHR3bykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVuYW1lIG9mIG9uZSBmaWxlIHRvIHR3bywgd2l0aCBkaXJlY3RvcmllcyBpbiB0aGUgd2F5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBmaXJzdC1yZW5hbWUgJiYKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKworCWVjaG8gc3R1ZmYgPm9yaWdpbmFsICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gIkNvbW1vbiBjb21taXQiICYmCisKKwlta2RpciB0d28gJiYKKwk+dHdvL2ZpbGUgJiYKKwlnaXQgYWRkIHR3by9maWxlICYmCisJZ2l0IG12IG9yaWdpbmFsIG9uZSAmJgorCWdpdCBjb21taXQgLW0gIlB1dCB0d28vZmlsZSBpbiB0aGUgd2F5LCByZW5hbWUgdG8gb25lIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNlY29uZC1yZW5hbWUgSEVBRH4xICYmCisJbWtkaXIgb25lICYmCisJPm9uZS9maWxlICYmCisJZ2l0IGFkZCBvbmUvZmlsZSAmJgorCWdpdCBtdiBvcmlnaW5hbCB0d28gJiYKKwlnaXQgY29tbWl0IC1tICJQdXQgb25lL2ZpbGUgaW4gdGhlIHdheSwgcmVuYW1lIHRvIHR3byIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaGFuZGxpbmcgb2YgZGlmZmVyZW50bHkgcmVuYW1lZCBmaWxlIHdpdGggRC9GIGNvbmZsaWN0cycgJworCWdpdCBjaGVja291dCAtcSBmaXJzdC1yZW5hbWVeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSBzZWNvbmQtcmVuYW1lICYmCisKKwl0ZXN0IDUgLWVxICIkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSIgJiYKKwl0ZXN0IDMgLWVxICIkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDEgLWVxICIkKGdpdCBscy1maWxlcyAtdSBvbmUgfCB3YyAtbCkiICYmCisJdGVzdCAxIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgdHdvIHwgd2MgLWwpIiAmJgorCXRlc3QgMSAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IG9yaWdpbmFsIHwgd2MgLWwpIiAmJgorCXRlc3QgMiAtZXEgIiQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpIiAmJgorCisJdGVzdF9wYXRoX2lzX2ZpbGUgb25lL2ZpbGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0d28vZmlsZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG9uZX5IRUFEICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdHdvfnNlY29uZC1yZW5hbWUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBvcmlnaW5hbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW5hbWUgb25lIGZpbGUgdG8gdHdvOyBkaXJlY3RvcmllcyBtb3Zpbmcgb3V0IG9mIHRoZSB3YXknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGZpcnN0LXJlbmFtZS1yZWRvICYmCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisKKwllY2hvIHN0dWZmID5vcmlnaW5hbCAmJgorCW1rZGlyIG9uZSB0d28gJiYKKwl0b3VjaCBvbmUvZmlsZSB0d28vZmlsZSAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJDb21tb24gY29tbWl0IiAmJgorCisJZ2l0IHJtIC1yZiBvbmUgJiYKKwlnaXQgbXYgb3JpZ2luYWwgb25lICYmCisJZ2l0IGNvbW1pdCAtbSAiUmVuYW1lIHRvIG9uZSIgJiYKKworCWdpdCBjaGVja291dCAtYiBzZWNvbmQtcmVuYW1lLXJlZG8gSEVBRH4xICYmCisJZ2l0IHJtIC1yZiB0d28gJiYKKwlnaXQgbXYgb3JpZ2luYWwgdHdvICYmCisJZ2l0IGNvbW1pdCAtbSAiUmVuYW1lIHRvIHR3byIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaGFuZGxpbmcgb2YgZGlmZmVyZW50bHkgcmVuYW1lZCBmaWxlIHdpdGggRC9GIGNvbmZsaWN0cycgJworCWdpdCBjaGVja291dCAtcSBmaXJzdC1yZW5hbWUtcmVkb14wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIHNlY29uZC1yZW5hbWUtcmVkbyAmJgorCisJdGVzdCAzIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkiICYmCisJdGVzdCAxIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgb25lIHwgd2MgLWwpIiAmJgorCXRlc3QgMSAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IHR3byB8IHdjIC1sKSIgJiYKKwl0ZXN0IDEgLWVxICIkKGdpdCBscy1maWxlcyAtdSBvcmlnaW5hbCB8IHdjIC1sKSIgJiYKKwl0ZXN0IDAgLWVxICIkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSIgJiYKKworCXRlc3RfcGF0aF9pc19maWxlIG9uZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIHR3byAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG9yaWdpbmFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGF2b2lkIHVubmVjZXNzYXJ5IHVwZGF0ZSwgbm9ybWFsIHJlbmFtZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gYXZvaWQtdW5uZWNlc3NhcnktdXBkYXRlLTEgJiYKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKworCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuOVxuMTBcbiIgPm9yaWdpbmFsICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gIkNvbW1vbiBjb21taXQiICYmCisKKwlnaXQgbXYgb3JpZ2luYWwgcmVuYW1lICYmCisJZWNobyAxMSA+PnJlbmFtZSAmJgorCWdpdCBhZGQgLXUgJiYKKwlnaXQgY29tbWl0IC1tICJSZW5hbWVkIGFuZCBtb2RpZmllZCIgJiYKKworCWdpdCBjaGVja291dCAtYiBtZXJnZS1icmFuY2gtMSBIRUFEfjEgJiYKKwllY2hvICJyYW5kb20gY29udGVudCIgPnJhbmRvbS1maWxlICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gIlJhbmRvbSwgdW5yZWxhdGVkIGNoYW5nZXMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F2b2lkIHVubmVjZXNzYXJ5IHVwZGF0ZSwgbm9ybWFsIHJlbmFtZScgJworCWdpdCBjaGVja291dCAtcSBhdm9pZC11bm5lY2Vzc2FyeS11cGRhdGUtMV4wICYmCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLTM2MDAgcmVuYW1lID5leHBlY3QgJiYKKwlnaXQgbWVyZ2UgbWVyZ2UtYnJhbmNoLTEgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCByZW5hbWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgIyAicmVuYW1lIiBzaG91bGQgaGF2ZSBzdGF5ZWQgaW50YWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRvIHRlc3QgYXZvaWRpbmcgdW5uZWNlc3NhcnkgdXBkYXRlLCB3aXRoIEQvRiBjb25mbGljdCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gYXZvaWQtdW5uZWNlc3NhcnktdXBkYXRlLTIgJiYKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKworCW1rZGlyIGRmICYmCisJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG43XG44XG45XG4xMFxuIiA+ZGYvZmlsZSAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJDb21tb24gY29tbWl0IiAmJgorCisJZ2l0IG12IGRmL2ZpbGUgdGVtcCAmJgorCXJtIC1yZiBkZiAmJgorCWdpdCBtdiB0ZW1wIGRmICYmCisJZWNobyAxMSA+PmRmICYmCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBjb21taXQgLW0gIlJlbmFtZWQgYW5kIG1vZGlmaWVkIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIG1lcmdlLWJyYW5jaC0yIEhFQUR+MSAmJgorCT51bnJlbGF0ZWQtY2hhbmdlICYmCisJZ2l0IGFkZCB1bnJlbGF0ZWQtY2hhbmdlICYmCisJZ2l0IGNvbW1pdCAtbSAiT25seSB1bnJlbGF0ZWQgY2hhbmdlcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXZvaWQgdW5uZWNlc3NhcnkgdXBkYXRlLCB3aXRoIEQvRiBjb25mbGljdCcgJworCWdpdCBjaGVja291dCAtcSBhdm9pZC11bm5lY2Vzc2FyeS11cGRhdGUtMl4wICYmCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLTM2MDAgZGYgPmV4cGVjdCAmJgorCWdpdCBtZXJnZSBtZXJnZS1icmFuY2gtMiAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IGRmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICMgImRmIiBzaG91bGQgaGF2ZSBzdGF5ZWQgaW50YWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGF2b2lkIHVubmVjZXNzYXJ5IHVwZGF0ZSwgZGlyLT4oZmlsZSxub3RoaW5nKScgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCT5pcnJlbGV2YW50ICYmCisJbWtkaXIgZGYgJiYKKwk+ZGYvZmlsZSAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tQSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwlnaXQgcm0gLXJmIGRmICYmCisJZ2l0IGNvbW1pdCAtbUIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcm0gLXJmIGRmICYmCisJZWNobyBibGEgPmRmICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBhIG5ld2ZpbGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F2b2lkIHVubmVjZXNzYXJ5IHVwZGF0ZSwgZGlyLT4oZmlsZSxub3RoaW5nKScgJworCWdpdCBjaGVja291dCAtcSBtYXN0ZXJeMCAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC0zNjAwIGRmID5leHBlY3QgJiYKKwlnaXQgbWVyZ2Ugc2lkZSAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IGRmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICMgImRmIiBzaG91bGQgaGF2ZSBzdGF5ZWQgaW50YWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGF2b2lkIHVubmVjZXNzYXJ5IHVwZGF0ZSwgbW9kaWZ5L2RlbGV0ZScgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCT5pcnJlbGV2YW50ICYmCisJPmZpbGUgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbUEgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJZ2l0IHJtIC1mIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJEZWxldGUgZmlsZSIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIGJsYSA+ZmlsZSAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJNb2RpZnkgZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXZvaWQgdW5uZWNlc3NhcnkgdXBkYXRlLCBtb2RpZnkvZGVsZXRlJyAnCisJZ2l0IGNoZWNrb3V0IC1xIG1hc3Rlcl4wICYmCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLTM2MDAgZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHNpZGUgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCBmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICMgImZpbGUiIHNob3VsZCBoYXZlIHN0YXllZCBpbnRhY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYXZvaWQgdW5uZWNlc3NhcnkgdXBkYXRlLCByZW5hbWUvYWRkLWRlc3QnICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbjdcbjhcbiIgPmZpbGUgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbUEgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJY3AgZmlsZSBuZXdmaWxlICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBmaWxlIGNvcHkiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG12IGZpbGUgbmV3ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIlJlbmFtZSBmaWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdm9pZCB1bm5lY2Vzc2FyeSB1cGRhdGUsIHJlbmFtZS9hZGQtZGVzdCcgJworCWdpdCBjaGVja291dCAtcSBtYXN0ZXJeMCAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC0zNjAwIG5ld2ZpbGUgPmV4cGVjdCAmJgorCWdpdCBtZXJnZSBzaWRlICYmCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgbmV3ZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAjICJmaWxlIiBzaG91bGQgaGF2ZSBzdGF5ZWQgaW50YWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG1lcmdlIG9mIHJlbmFtZSArIHNtYWxsIGNoYW5nZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gcmVuYW1lLXBsdXMtc21hbGwtY2hhbmdlICYmCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisKKwllY2hvIE9SSUdJTkFMID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lX2JyYW5jaCAmJgorCWdpdCBtdiBmaWxlIHJlbmFtZWRfZmlsZSAmJgorCWdpdCBjb21taXQgLW0gUmVuYW1lICYmCisJZ2l0IGNoZWNrb3V0IHJlbmFtZS1wbHVzLXNtYWxsLWNoYW5nZSAmJgorCWVjaG8gTkVXLVZFUlNJT04gPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFJlZm9ybWF0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHJlbmFtZSArIHNtYWxsIGNoYW5nZScgJworCWdpdCBtZXJnZSByZW5hbWVfYnJhbmNoICYmCisKKwl0ZXN0IDEgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAwIC1lcSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQ6cmVuYW1lZF9maWxlKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjE6ZmlsZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHVzZSBvZiBleHRlbmRlZCBtZXJnZSBtYXJrZXJzJyAnCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisJcm0gLXJmIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCisJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG43XG44XG4iID5vcmlnaW5hbF9maWxlICYmCisJZ2l0IGFkZCBvcmlnaW5hbF9maWxlICYmCisJZ2l0IGNvbW1pdCAtbUEgJiYKKworCWdpdCBjaGVja291dCAtYiByZW5hbWUgJiYKKwllY2hvIDkgPj5vcmlnaW5hbF9maWxlICYmCisJZ2l0IGFkZCBvcmlnaW5hbF9maWxlICYmCisJZ2l0IG12IG9yaWdpbmFsX2ZpbGUgcmVuYW1lZF9maWxlICYmCisJZ2l0IGNvbW1pdCAtbUIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIDguNSA+Pm9yaWdpbmFsX2ZpbGUgJiYKKwlnaXQgYWRkIG9yaWdpbmFsX2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBtYXN0ZXIgaW50byByZW5hbWUgaGFzIGNvcnJlY3QgZXh0ZW5kZWQgbWFya2VycycgJworCWdpdCBjaGVja291dCByZW5hbWVeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgbWFzdGVyXjAgJiYKKworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTEKKwkyCisJMworCTQKKwk1CisJNgorCTcKKwk4CisJPDw8PDw8PCBIRUFEOnJlbmFtZWRfZmlsZQorCTkKKwk9PT09PT09CisJOC41CisJPj4+Pj4+PiBtYXN0ZXJeMDpvcmlnaW5hbF9maWxlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVuYW1lZF9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHJlbmFtZSBpbnRvIG1hc3RlciBoYXMgY29ycmVjdCBleHRlbmRlZCBtYXJrZXJzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgcmVuYW1lXjAgJiYKKworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTEKKwkyCisJMworCTQKKwk1CisJNgorCTcKKwk4CisJPDw8PDw8PCBIRUFEOm9yaWdpbmFsX2ZpbGUKKwk4LjUKKwk9PT09PT09CisJOQorCT4+Pj4+Pj4gcmVuYW1lXjA6cmVuYW1lZF9maWxlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVuYW1lZF9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNwdXJpb3VzICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCIgbWVzc2FnZScgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCT4gaXJyZWxldmFudF9maWxlICYmCisJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG43XG44XG4iID5vcmlnaW5hbF9maWxlICYmCisJZ2l0IGFkZCBpcnJlbGV2YW50X2ZpbGUgb3JpZ2luYWxfZmlsZSAmJgorCWdpdCBjb21taXQgLW1BICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lICYmCisJZ2l0IG12IG9yaWdpbmFsX2ZpbGUgcmVuYW1lZF9maWxlICYmCisJZ2l0IGNvbW1pdCAtbUIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcm0gb3JpZ2luYWxfZmlsZSAmJgorCWdpdCBjb21taXQgLW1DCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHNwdXJpb3VzICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCIgbWVzc2FnZScgJworCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSByZW5hbWVeMCAyPmVycm9ycy50eHQgJiYKKwkhIGdyZXAgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUiIGVycm9ycy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGZvbGxvdyByZW5hbWVzIGZvciBlbXB0eSBmaWxlcycgJworCWdpdCBjaGVja291dCAtZiAtYiBlbXB0eS1iYXNlICYmCisJPmVtcHR5MSAmJgorCWdpdCBhZGQgZW1wdHkxICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJZWNobyBjb250ZW50ID5lbXB0eTEgJiYKKwlnaXQgYWRkIGVtcHR5MSAmJgorCWdpdCBjb21taXQgLW0gZmlsbCAmJgorCWdpdCBjaGVja291dCAtYiBlbXB0eS10b3BpYyBIRUFEXiAmJgorCWdpdCBtdiBlbXB0eTEgZW1wdHkyICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZW1wdHktYmFzZSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlbXB0eTIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDIzLW1lcmdlLWZpbGUuc2ggYi90L3Q2MDIzLW1lcmdlLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmY0MjFkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMjMtbWVyZ2UtZmlsZS5zaApAQCAtMCwwICsxLDM5MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1JDUyBtZXJnZSByZXBsYWNlbWVudDogbWVyZ2UtZmlsZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWNhdCA+b3JpZy50eHQgPDwtXEVPRiAmJgorCURvbWludXMgcmVnaXQgbWUsCisJZXQgbmloaWwgbWloaSBkZWVyaXQuCisJSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorCXN1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lOworCWFuaW1hbSBtZWFtIGNvbnZlcnRpdCwKKwlkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCisJcHJvcHRlciBub21lbiBzdXVtLgorCUVPRgorCisJY2F0ID5uZXcxLnR4dCA8PC1cRU9GICYmCisJRG9taW51cyByZWdpdCBtZSwKKwlldCBuaWhpbCBtaWhpIGRlZXJpdC4KKwlJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCisJc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWU7CisJYW5pbWFtIG1lYW0gY29udmVydGl0LAorCWRlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKKwlwcm9wdGVyIG5vbWVuIHN1dW0uCisJTmFtIGV0IHNpIGFtYnVsYXZlcm8gaW4gbWVkaW8gdW1icmFlIG1vcnRpcywKKwlub24gdGltZWJvIG1hbGEsIHF1b25pYW0gdHUgbWVjdW0gZXM6CisJdmlyZ2EgdHVhIGV0IGJhY3VsdXMgdHV1cyBpcHNhIG1lIGNvbnNvbGF0YSBzdW50LgorCUVPRgorCisJY2F0ID5uZXcyLnR4dCA8PC1cRU9GICYmCisJRG9taW51cyByZWdpdCBtZSwgZXQgbmloaWwgbWloaSBkZWVyaXQuCisJSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorCXN1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lOworCWFuaW1hbSBtZWFtIGNvbnZlcnRpdCwKKwlkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCisJcHJvcHRlciBub21lbiBzdXVtLgorCUVPRgorCisJY2F0ID5uZXczLnR4dCA8PC1cRU9GICYmCisJRE9NSU5VUyByZWdpdCBtZSwKKwlldCBuaWhpbCBtaWhpIGRlZXJpdC4KKwlJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCisJc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWU7CisJYW5pbWFtIG1lYW0gY29udmVydGl0LAorCWRlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKKwlwcm9wdGVyIG5vbWVuIHN1dW0uCisJRU9GCisKKwljYXQgPm5ldzQudHh0IDw8LVxFT0YgJiYKKwlEb21pbnVzIHJlZ2l0IG1lLCBldCBuaWhpbCBtaWhpIGRlZXJpdC4KKwlJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCisJc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWU7CisJYW5pbWFtIG1lYW0gY29udmVydGl0LAorCWRlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKKwlFT0YKKworCXByaW50ZiAicHJvcHRlciBub21lbiBzdXVtLiIgPj5uZXc0LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB3aXRoIG5vIGNoYW5nZXMnICcKKwljcCBvcmlnLnR4dCB0ZXN0LnR4dCAmJgorCWdpdCBtZXJnZS1maWxlIHRlc3QudHh0IG9yaWcudHh0IG9yaWcudHh0ICYmCisJdGVzdF9jbXAgdGVzdC50eHQgb3JpZy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAibWVyZ2Ugd2l0aG91dCBjb25mbGljdCIgJworCWNwIG5ldzEudHh0IHRlc3QudHh0ICYmCisJZ2l0IG1lcmdlLWZpbGUgdGVzdC50eHQgb3JpZy50eHQgbmV3Mi50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd29ya3MgaW4gc3ViZGlyZWN0b3J5JyAnCisJbWtkaXIgZGlyICYmCisJY3AgbmV3MS50eHQgZGlyL2EudHh0ICYmCisJY3Agb3JpZy50eHQgZGlyL28udHh0ICYmCisJY3AgbmV3Mi50eHQgZGlyL2IudHh0ICYmCisJKCBjZCBkaXIgJiYgZ2l0IG1lcmdlLWZpbGUgYS50eHQgby50eHQgYi50eHQgKSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGEudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1lcmdlIHdpdGhvdXQgY29uZmxpY3QgKC0tcXVpZXQpIiAnCisJY3AgbmV3MS50eHQgdGVzdC50eHQgJiYKKwlnaXQgbWVyZ2UtZmlsZSAtLXF1aWV0IHRlc3QudHh0IG9yaWcudHh0IG5ldzIudHh0CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgIm1lcmdlIHdpdGhvdXQgY29uZmxpY3QgKG1pc3NpbmcgTEYgYXQgRU9GKSIgJworCWNwIG5ldzEudHh0IHRlc3QyLnR4dCAmJgorCWdpdCBtZXJnZS1maWxlIHRlc3QyLnR4dCBvcmlnLnR4dCBuZXc0LnR4dAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICJtZXJnZSByZXN1bHQgYWRkZWQgbWlzc2luZyBMRiIgJworCXRlc3RfY21wIHRlc3QudHh0IHRlc3QyLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJtZXJnZSB3aXRob3V0IGNvbmZsaWN0IChtaXNzaW5nIExGIGF0IEVPRiwgYXdheSBmcm9tIGNoYW5nZSBpbiB0aGUgb3RoZXIgZmlsZSkiICcKKwljcCBuZXc0LnR4dCB0ZXN0My50eHQgJiYKKwlnaXQgbWVyZ2UtZmlsZSAtLXF1aWV0IHRlc3QzLnR4dCBuZXcyLnR4dCBuZXczLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJtZXJnZSBkb2VzIG5vdCBhZGQgTEYgYXdheSBvZiBjaGFuZ2UiICcKKwljYXQgPmV4cGVjdC50eHQgPDwtXEVPRiAmJgorCURPTUlOVVMgcmVnaXQgbWUsCisJZXQgbmloaWwgbWloaSBkZWVyaXQuCisJSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorCXN1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lOworCWFuaW1hbSBtZWFtIGNvbnZlcnRpdCwKKwlkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCisJRU9GCisJcHJpbnRmICJwcm9wdGVyIG5vbWVuIHN1dW0uIiA+PmV4cGVjdC50eHQgJiYKKworCXRlc3RfY21wIGV4cGVjdC50eHQgdGVzdDMudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1lcmdlIHdpdGggY29uZmxpY3RzIiAnCisJY3AgdGVzdC50eHQgYmFja3VwLnR4dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIHRlc3QudHh0IG9yaWcudHh0IG5ldzMudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImV4cGVjdGVkIGNvbmZsaWN0IG1hcmtlcnMiICcKKwljYXQgPmV4cGVjdC50eHQgPDwtXEVPRiAmJgorCTw8PDw8PDwgdGVzdC50eHQKKwlEb21pbnVzIHJlZ2l0IG1lLCBldCBuaWhpbCBtaWhpIGRlZXJpdC4KKwk9PT09PT09CisJRE9NSU5VUyByZWdpdCBtZSwKKwlldCBuaWhpbCBtaWhpIGRlZXJpdC4KKwk+Pj4+Pj4+IG5ldzMudHh0CisJSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorCXN1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lOworCWFuaW1hbSBtZWFtIGNvbnZlcnRpdCwKKwlkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCisJcHJvcHRlciBub21lbiBzdXVtLgorCU5hbSBldCBzaSBhbWJ1bGF2ZXJvIGluIG1lZGlvIHVtYnJhZSBtb3J0aXMsCisJbm9uIHRpbWVibyBtYWxhLCBxdW9uaWFtIHR1IG1lY3VtIGVzOgorCXZpcmdhIHR1YSBldCBiYWN1bHVzIHR1dXMgaXBzYSBtZSBjb25zb2xhdGEgc3VudC4KKwlFT0YKKworCXRlc3RfY21wIGV4cGVjdC50eHQgdGVzdC50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAibWVyZ2UgY29uZmxpY3Rpbmcgd2l0aCAtLW91cnMiICcKKwljcCBiYWNrdXAudHh0IHRlc3QudHh0ICYmCisKKwljYXQgPmV4cGVjdC50eHQgPDwtXEVPRiAmJgorCURvbWludXMgcmVnaXQgbWUsIGV0IG5paGlsIG1paGkgZGVlcml0LgorCUluIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdCwKKwlzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKKwlhbmltYW0gbWVhbSBjb252ZXJ0aXQsCisJZGVkdXhpdCBtZSBzdXBlciBzZW1pdGFzIGp1c2l0aWFlLAorCXByb3B0ZXIgbm9tZW4gc3V1bS4KKwlOYW0gZXQgc2kgYW1idWxhdmVybyBpbiBtZWRpbyB1bWJyYWUgbW9ydGlzLAorCW5vbiB0aW1lYm8gbWFsYSwgcXVvbmlhbSB0dSBtZWN1bSBlczoKKwl2aXJnYSB0dWEgZXQgYmFjdWx1cyB0dXVzIGlwc2EgbWUgY29uc29sYXRhIHN1bnQuCisJRU9GCisKKwlnaXQgbWVyZ2UtZmlsZSAtLW91cnMgdGVzdC50eHQgb3JpZy50eHQgbmV3My50eHQgJiYKKwl0ZXN0X2NtcCBleHBlY3QudHh0IHRlc3QudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1lcmdlIGNvbmZsaWN0aW5nIHdpdGggLS10aGVpcnMiICcKKwljcCBiYWNrdXAudHh0IHRlc3QudHh0ICYmCisKKwljYXQgPmV4cGVjdC50eHQgPDwtXEVPRiAmJgorCURPTUlOVVMgcmVnaXQgbWUsCisJZXQgbmloaWwgbWloaSBkZWVyaXQuCisJSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorCXN1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lOworCWFuaW1hbSBtZWFtIGNvbnZlcnRpdCwKKwlkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCisJcHJvcHRlciBub21lbiBzdXVtLgorCU5hbSBldCBzaSBhbWJ1bGF2ZXJvIGluIG1lZGlvIHVtYnJhZSBtb3J0aXMsCisJbm9uIHRpbWVibyBtYWxhLCBxdW9uaWFtIHR1IG1lY3VtIGVzOgorCXZpcmdhIHR1YSBldCBiYWN1bHVzIHR1dXMgaXBzYSBtZSBjb25zb2xhdGEgc3VudC4KKwlFT0YKKworCWdpdCBtZXJnZS1maWxlIC0tdGhlaXJzIHRlc3QudHh0IG9yaWcudHh0IG5ldzMudHh0ICYmCisJdGVzdF9jbXAgZXhwZWN0LnR4dCB0ZXN0LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJtZXJnZSBjb25mbGljdGluZyB3aXRoIC0tdW5pb24iICcKKwljcCBiYWNrdXAudHh0IHRlc3QudHh0ICYmCisKKwljYXQgPmV4cGVjdC50eHQgPDwtXEVPRiAmJgorCURvbWludXMgcmVnaXQgbWUsIGV0IG5paGlsIG1paGkgZGVlcml0LgorCURPTUlOVVMgcmVnaXQgbWUsCisJZXQgbmloaWwgbWloaSBkZWVyaXQuCisJSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorCXN1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lOworCWFuaW1hbSBtZWFtIGNvbnZlcnRpdCwKKwlkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCisJcHJvcHRlciBub21lbiBzdXVtLgorCU5hbSBldCBzaSBhbWJ1bGF2ZXJvIGluIG1lZGlvIHVtYnJhZSBtb3J0aXMsCisJbm9uIHRpbWVibyBtYWxhLCBxdW9uaWFtIHR1IG1lY3VtIGVzOgorCXZpcmdhIHR1YSBldCBiYWN1bHVzIHR1dXMgaXBzYSBtZSBjb25zb2xhdGEgc3VudC4KKwlFT0YKKworCWdpdCBtZXJnZS1maWxlIC0tdW5pb24gdGVzdC50eHQgb3JpZy50eHQgbmV3My50eHQgJiYKKwl0ZXN0X2NtcCBleHBlY3QudHh0IHRlc3QudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1lcmdlIHdpdGggY29uZmxpY3RzLCB1c2luZyAtTCIgJworCWNwIGJhY2t1cC50eHQgdGVzdC50eHQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIC1MIDEgLUwgMiB0ZXN0LnR4dCBvcmlnLnR4dCBuZXczLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJleHBlY3RlZCBjb25mbGljdCBtYXJrZXJzLCB3aXRoIC1MIiAnCisJY2F0ID5leHBlY3QudHh0IDw8LVxFT0YgJiYKKwk8PDw8PDw8IDEKKwlEb21pbnVzIHJlZ2l0IG1lLCBldCBuaWhpbCBtaWhpIGRlZXJpdC4KKwk9PT09PT09CisJRE9NSU5VUyByZWdpdCBtZSwKKwlldCBuaWhpbCBtaWhpIGRlZXJpdC4KKwk+Pj4+Pj4+IG5ldzMudHh0CisJSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorCXN1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lOworCWFuaW1hbSBtZWFtIGNvbnZlcnRpdCwKKwlkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCisJcHJvcHRlciBub21lbiBzdXVtLgorCU5hbSBldCBzaSBhbWJ1bGF2ZXJvIGluIG1lZGlvIHVtYnJhZSBtb3J0aXMsCisJbm9uIHRpbWVibyBtYWxhLCBxdW9uaWFtIHR1IG1lY3VtIGVzOgorCXZpcmdhIHR1YSBldCBiYWN1bHVzIHR1dXMgaXBzYSBtZSBjb25zb2xhdGEgc3VudC4KKwlFT0YKKworCXRlc3RfY21wIGV4cGVjdC50eHQgdGVzdC50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY29uZmxpY3QgaW4gcmVtb3ZlZCB0YWlsIiAnCisJc2VkICJzLyB0dSAvIFRVIC8iIDxuZXcxLnR4dCA+bmV3NS50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSAtcCBvcmlnLnR4dCBuZXcxLnR4dCBuZXc1LnR4dCA+b3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImV4cGVjdGVkIGNvbmZsaWN0IG1hcmtlcnMiICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJRG9taW51cyByZWdpdCBtZSwKKwlldCBuaWhpbCBtaWhpIGRlZXJpdC4KKwlJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCisJc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWU7CisJYW5pbWFtIG1lYW0gY29udmVydGl0LAorCWRlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKKwlwcm9wdGVyIG5vbWVuIHN1dW0uCisJPDw8PDw8PCBvcmlnLnR4dAorCT09PT09PT0KKwlOYW0gZXQgc2kgYW1idWxhdmVybyBpbiBtZWRpbyB1bWJyYWUgbW9ydGlzLAorCW5vbiB0aW1lYm8gbWFsYSwgcXVvbmlhbSBUVSBtZWN1bSBlczoKKwl2aXJnYSB0dWEgZXQgYmFjdWx1cyB0dXVzIGlwc2EgbWUgY29uc29sYXRhIHN1bnQuCisJPj4+Pj4+PiBuZXc1LnR4dAorCUVPRgorCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaW5hcnkgZmlsZXMgY2Fubm90IGJlIG1lcmdlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIC1wIFwKKwkJb3JpZy50eHQgIiRURVNUX0RJUkVDVE9SWSIvdGVzdC1iaW5hcnktMS5wbmcgbmV3MS50eHQgMj4gbWVyZ2UuZXJyICYmCisJZ3JlcCAiQ2Fubm90IG1lcmdlIGJpbmFyeSBmaWxlcyIgbWVyZ2UuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01FUkdFX1pFQUxPVVMgc2ltcGxpZmllcyBub24tY29uZmxpY3RzJyAnCisJc2VkIC1lICJzL2RlZXJpdC5cJC9kZWVyaXQ7LyIgLWUgInMvbWU7XCQvbWUuLyIgPG5ldzUudHh0ID5uZXc2LnR4dCAmJgorCXNlZCAtZSAicy9kZWVyaXQuXCQvZGVlcml0LC8iIC1lICJzL21lO1wkL21lLC8iIDxuZXc1LnR4dCA+bmV3Ny50eHQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIC1wIG5ldzYudHh0IG5ldzUudHh0IG5ldzcudHh0ID4gb3V0cHV0ICYmCisJdGVzdCAxID0gJChncmVwID09PT09PT0gPG91dHB1dCB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdaRUFMT1VTX0FMTlVNJyAnCisJc2VkIC1lICJzL2RlZXJpdC4vJiUlJSUvIiAtZSAicy9sb2Nhdml0LC9sb2Nhdml0Oy8iIDxuZXc2LnR4dCB8IHRyICUgIlwwMTIiID5uZXc4LnR4dCAmJgorCXNlZCAtZSAicy9kZWVyaXQuLyYlJSUlLyIgLWUgInMvbG9jYXZpdCwvbG9jYXZpdCAtLS8iIDxuZXc3LnR4dCB8IHRyICUgIlwwMTIiID5uZXc5LnR4dCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLXAgXAorCQluZXc4LnR4dCBuZXc1LnR4dCBuZXc5LnR4dCA+bWVyZ2Uub3V0ICYmCisJdGVzdCAxID0gJChncmVwID09PT09PT0gPG1lcmdlLm91dCB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZGlmZjMgLW0iIHN0eWxlIG91dHB1dCAoMSknICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJRG9taW51cyByZWdpdCBtZSwKKwk8PDw8PDw8IG5ldzgudHh0CisJZXQgbmloaWwgbWloaSBkZWVyaXQ7CisKKworCisKKwlJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQ7CisJc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWUuCisJfHx8fHx8fCBuZXc1LnR4dAorCWV0IG5paGlsIG1paGkgZGVlcml0LgorCUluIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdCwKKwlzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKKwk9PT09PT09CisJZXQgbmloaWwgbWloaSBkZWVyaXQsCisKKworCisKKwlJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQgLS0KKwlzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZSwKKwk+Pj4+Pj4+IG5ldzkudHh0CisJYW5pbWFtIG1lYW0gY29udmVydGl0LAorCWRlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKKwlwcm9wdGVyIG5vbWVuIHN1dW0uCisJTmFtIGV0IHNpIGFtYnVsYXZlcm8gaW4gbWVkaW8gdW1icmFlIG1vcnRpcywKKwlub24gdGltZWJvIG1hbGEsIHF1b25pYW0gVFUgbWVjdW0gZXM6CisJdmlyZ2EgdHVhIGV0IGJhY3VsdXMgdHV1cyBpcHNhIG1lIGNvbnNvbGF0YSBzdW50LgorCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLXAgLS1kaWZmMyBcCisJCW5ldzgudHh0IG5ldzUudHh0IG5ldzkudHh0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJkaWZmMyAtbSIgc3R5bGUgb3V0cHV0ICgyKScgJworCWdpdCBjb25maWcgbWVyZ2UuY29uZmxpY3RzdHlsZSBkaWZmMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIC1wIFwKKwkJbmV3OC50eHQgbmV3NS50eHQgbmV3OS50eHQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFya2VyIHNpemUnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJRG9taW51cyByZWdpdCBtZSwKKwk8PDw8PDw8PDw8IG5ldzgudHh0CisJZXQgbmloaWwgbWloaSBkZWVyaXQ7CisKKworCisKKwlJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQ7CisJc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWUuCisJfHx8fHx8fHx8fCBuZXc1LnR4dAorCWV0IG5paGlsIG1paGkgZGVlcml0LgorCUluIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdCwKKwlzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKKwk9PT09PT09PT09CisJZXQgbmloaWwgbWloaSBkZWVyaXQsCisKKworCisKKwlJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQgLS0KKwlzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZSwKKwk+Pj4+Pj4+Pj4+IG5ldzkudHh0CisJYW5pbWFtIG1lYW0gY29udmVydGl0LAorCWRlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKKwlwcm9wdGVyIG5vbWVuIHN1dW0uCisJTmFtIGV0IHNpIGFtYnVsYXZlcm8gaW4gbWVkaW8gdW1icmFlIG1vcnRpcywKKwlub24gdGltZWJvIG1hbGEsIHF1b25pYW0gVFUgbWVjdW0gZXM6CisJdmlyZ2EgdHVhIGV0IGJhY3VsdXMgdHV1cyBpcHNhIG1lIGNvbnNvbGF0YSBzdW50LgorCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLXAgLS1tYXJrZXItc2l6ZT0xMCBcCisJCW5ldzgudHh0IG5ldzUudHh0IG5ldzkudHh0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZsaWN0IGF0IEVPRiB3aXRob3V0IExGIHJlc29sdmVkIGJ5IC0tb3VycycgJworCXByaW50ZiAibGluZTFcbmxpbmUyXG5saW5lMyIgPm5vbGYtb3JpZy50eHQgJiYKKwlwcmludGYgImxpbmUxXG5saW5lMlxubGluZTN4IiA+bm9sZi1kaWZmMS50eHQgJiYKKwlwcmludGYgImxpbmUxXG5saW5lMlxubGluZTN5IiA+bm9sZi1kaWZmMi50eHQgJiYKKworCWdpdCBtZXJnZS1maWxlIC1wIC0tb3VycyBub2xmLWRpZmYxLnR4dCBub2xmLW9yaWcudHh0IG5vbGYtZGlmZjIudHh0ID5vdXRwdXQudHh0ICYmCisJcHJpbnRmICJsaW5lMVxubGluZTJcbmxpbmUzeCIgPmV4cGVjdC50eHQgJiYKKwl0ZXN0X2NtcCBleHBlY3QudHh0IG91dHB1dC50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3QgYXQgRU9GIHdpdGhvdXQgTEYgcmVzb2x2ZWQgYnkgLS10aGVpcnMnICcKKwlnaXQgbWVyZ2UtZmlsZSAtcCAtLXRoZWlycyBub2xmLWRpZmYxLnR4dCBub2xmLW9yaWcudHh0IG5vbGYtZGlmZjIudHh0ID5vdXRwdXQudHh0ICYmCisJcHJpbnRmICJsaW5lMVxubGluZTJcbmxpbmUzeSIgPmV4cGVjdC50eHQgJiYKKwl0ZXN0X2NtcCBleHBlY3QudHh0IG91dHB1dC50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3QgYXQgRU9GIHdpdGhvdXQgTEYgcmVzb2x2ZWQgYnkgLS11bmlvbicgJworCWdpdCBtZXJnZS1maWxlIC1wIC0tdW5pb24gbm9sZi1kaWZmMS50eHQgbm9sZi1vcmlnLnR4dCBub2xmLWRpZmYyLnR4dCA+b3V0cHV0LnR4dCAmJgorCXByaW50ZiAibGluZTFcbmxpbmUyXG5saW5lM3hcbmxpbmUzeSIgPmV4cGVjdC50eHQgJiYKKwl0ZXN0X2NtcCBleHBlY3QudHh0IG91dHB1dC50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3Qgc2VjdGlvbnMgbWF0Y2ggZXhpc3RpbmcgbGluZSBlbmRpbmdzJyAnCisJcHJpbnRmICIxXFxyXFxuMlxcclxcbjMiID5jcmxmLW9yaWcudHh0ICYmCisJcHJpbnRmICIxXFxyXFxuMlxcclxcbjQiID5jcmxmLWRpZmYxLnR4dCAmJgorCXByaW50ZiAiMVxcclxcbjJcXHJcXG41IiA+Y3JsZi1kaWZmMi50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgY29yZS5lb2w9Y3JsZiBtZXJnZS1maWxlIC1wIFwKKwkJY3JsZi1kaWZmMS50eHQgY3JsZi1vcmlnLnR4dCBjcmxmLWRpZmYyLnR4dCA+Y3JsZi50eHQgJiYKKwl0ZXN0ICQodHIgIlwwMTUiIFEgPGNybGYudHh0IHwgZ3JlcCAiXls8PT5dLipRJCIgfCB3YyAtbCkgPSAzICYmCisJdGVzdCAkKHRyICJcMDE1IiBRIDxjcmxmLnR4dCB8IGdyZXAgIlszNDVdUSQiIHwgd2MgLWwpID0gMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBjb3JlLmVvbD1jcmxmIG1lcmdlLWZpbGUgLXAgXAorCQlub2xmLWRpZmYxLnR4dCBub2xmLW9yaWcudHh0IG5vbGYtZGlmZjIudHh0ID5ub2xmLnR4dCAmJgorCXRlc3QgJCh0ciAiXDAxNSIgUSA8bm9sZi50eHQgfCBncmVwICJeWzw9Pl0uKlEkIiB8IHdjIC1sKSA9IDAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaCBiL3QvdDYwMjQtcmVjdXJzaXZlLW1lcmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMzMmNmYzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaApAQCAtMCwwICsxLDEzMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgbWVyZ2Ugd2l0aG91dCBjb21tb24gYW5jZXN0b3JzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGhpcyBzY2VuYXJpbyBpcyBiYXNlZCBvbiBhIHJlYWwtd29ybGQgcmVwb3NpdG9yeSBvZiBTaGF3biBQZWFyY2UuCisKKyMgMSAtIEEgLSBEIC0gRgorIyAgIFwgICBYICAgLworIyAgICAgQiAgIFgKKyMgICAgICAgWCAgIFwKKyMgMiAtIEMgLSBFIC0gRworCitHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDYtMTItMTIgMjM6Mjg6MDAgKzAxMDAiCitleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3RzJyAnCisJZWNobyAxID5hMSAmJgorCWdpdCBhZGQgYTEgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDAiIGdpdCBjb21taXQgLW0gMSBhMSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEEgbWFzdGVyICYmCisJZWNobyBBID5hMSAmJgorCUdJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowMSIgZ2l0IGNvbW1pdCAtbSBBIGExICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQiBtYXN0ZXIgJiYKKwllY2hvIEIgPmExICYmCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjAyIiBnaXQgY29tbWl0IC1tIEIgYTEgJiYKKworCWdpdCBjaGVja291dCAtYiBEIEEgJiYKKwlnaXQgcmV2LXBhcnNlIEIgPi5naXQvTUVSR0VfSEVBRCAmJgorCWVjaG8gRCA+YTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGExICYmCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjAzIiBnaXQgY29tbWl0IC1tIEQgJiYKKworCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL290aGVyICYmCisJZWNobyAyID5hMSAmJgorCUdJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowNCIgZ2l0IGNvbW1pdCAtbSAyIGExICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQyAmJgorCWVjaG8gQyA+YTEgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDUiIGdpdCBjb21taXQgLW0gQyBhMSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEUgQyAmJgorCWdpdCByZXYtcGFyc2UgQiA+LmdpdC9NRVJHRV9IRUFEICYmCisJZWNobyBFID5hMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggYTEgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDYiIGdpdCBjb21taXQgLW0gRSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEcgRSAmJgorCWdpdCByZXYtcGFyc2UgQSA+LmdpdC9NRVJHRV9IRUFEICYmCisJZWNobyBHID5hMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggYTEgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDciIGdpdCBjb21taXQgLW0gRyAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEYgRCAmJgorCWdpdCByZXYtcGFyc2UgQyA+LmdpdC9NRVJHRV9IRUFEICYmCisJZWNobyBGID5hMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggYTEgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDgiIGdpdCBjb21taXQgLW0gRiAmJgorCisJdGVzdF9vaWRfY2FjaGUgPDwtRU9GCisJaWR4c3RhZ2UxIHNoYTE6ZWMzZmUyYTc5MTcwNjczM2YyZDhmYTdhZDQ1ZDlhOTY3MjAzMWY1ZQorCWlkeHN0YWdlMSBzaGEyNTY6YjNjODQ4ODkyOTkwM2FhZWJkZWIyMjI3MGNiNmQzNmU1Yjg3MjRiMDFhZTBkNGRhMjQ2MzJmMTU4Yzk5Njc2ZgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5lZCBtZXJnZSBjb25mbGljdHMnICcKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfQ09NTUlUX0dSQVBIPTAgZ2l0IG1lcmdlIC1tIGZpbmFsIEcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdWx0IGNvbnRhaW5zIGEgY29uZmxpY3QnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJPDw8PDw8PCBIRUFECisJRgorCT09PT09PT0KKwlHCisJPj4+Pj4+PiBHCisJRU9GCisKKwl0ZXN0X2NtcCBleHBlY3QgYTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmlydHVhbCB0cmVlcyB3ZXJlIHByb2Nlc3NlZCcgJworCWdpdCBscy1maWxlcyAtLXN0YWdlID5vdXQgJiYKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTEwMDY0NCAkKHRlc3Rfb2lkIGlkeHN0YWdlMSkgMQlhMQorCTEwMDY0NCAkKGdpdCByZXYtcGFyc2UgRjphMSkgMglhMQorCTEwMDY0NCAkKGdpdCByZXYtcGFyc2UgRzphMSkgMwlhMQorCUVPRgorCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2UgdG8gbWVyZ2UgYmluYXJ5IGZpbGVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXByaW50ZiAiXDAiID5iaW5hcnktZmlsZSAmJgorCWdpdCBhZGQgYmluYXJ5LWZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGJpbmFyeSAmJgorCWdpdCBjaGVja291dCBHICYmCisJcHJpbnRmICJcMFwwIiA+YmluYXJ5LWZpbGUgJiYKKwlnaXQgYWRkIGJpbmFyeS1maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBiaW5hcnkyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEYgPm1lcmdlLm91dCAyPm1lcmdlLmVyciAmJgorCWdyZXAgIkNhbm5vdCBtZXJnZSBiaW5hcnkgZmlsZXM6IGJpbmFyeS1maWxlIChIRUFEIHZzLiBGKSIgbWVyZ2UuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hcmsgcmVuYW1lL2RlbGV0ZSBhcyB1bm1lcmdlZCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBkZWxldGUgJiYKKwlnaXQgcm0gYTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGRlbGV0ZSAmJgorCWdpdCBjaGVja291dCAtYiByZW5hbWUgSEVBRF4gJiYKKwlnaXQgbXYgYTEgYTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJlbmFtZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBkZWxldGUgJiYKKwl0ZXN0IDEgPSAkKGdpdCBscy1maWxlcyAtLXVubWVyZ2VkIHwgd2MgLWwpICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6MjphMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgOjM6YTIgJiYKKwlnaXQgY2hlY2tvdXQgLWYgZGVsZXRlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHJlbmFtZSAmJgorCXRlc3QgMSA9ICQoZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQgfCB3YyAtbCkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDoyOmEyICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6MzphMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMjUtbWVyZ2Utc3ltbGlua3Muc2ggYi90L3Q2MDI1LW1lcmdlLXN5bWxpbmtzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjMGE5MGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDI1LW1lcmdlLXN5bWxpbmtzLnNoCkBAIC0wLDAgKzEsNjIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgU2l4dAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnaW5nIHN5bWxpbmtzIG9uIGZpbGVzeXN0ZW0gdy9vIHN5bWxpbmsgc3VwcG9ydC4KKworVGhpcyB0ZXN0cyB0aGF0IGdpdCBtZXJnZS1yZWN1cnNpdmUgd3JpdGVzIG1lcmdlIHJlc3VsdHMgYXMgcGxhaW4gZmlsZXMKK2lmIGNvcmUuc3ltbGlua3MgaXMgZmFsc2UuJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgY29uZmlnIGNvcmUuc3ltbGlua3MgZmFsc2UgJiYKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggYi1zeW1saW5rICYmCisJZ2l0IGJyYW5jaCBiLWZpbGUgJiYKKwlsPSQocHJpbnRmIGZpbGUgfCBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyAtLXN0ZGluKSAmJgorCWVjaG8gIjEyMDAwMCAkbAlzeW1saW5rIiB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJZ2l0IGNvbW1pdCAtbSBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgYi1zeW1saW5rICYmCisJbD0kKHByaW50ZiBmaWxlLWRpZmZlcmVudCB8IGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IC0tc3RkaW4pICYmCisJZWNobyAiMTIwMDAwICRsCXN5bWxpbmsiIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlnaXQgY29tbWl0IC1tIGItc3ltbGluayAmJgorCWdpdCBjaGVja291dCBiLWZpbGUgJiYKKwllY2hvIHBsYWluLWZpbGUgPnN5bWxpbmsgJiYKKwlnaXQgYWRkIHN5bWxpbmsgJiYKKwlnaXQgY29tbWl0IC1tIGItZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBtYXN0ZXIgaW50byBiLXN5bWxpbmssIHdoaWNoIGhhcyBhIGRpZmZlcmVudCBzeW1ib2xpYyBsaW5rJyAnCisJZ2l0IGNoZWNrb3V0IGItc3ltbGluayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhlIG1lcmdlIHJlc3VsdCBtdXN0IGJlIGEgZmlsZScgJworCXRlc3RfcGF0aF9pc19maWxlIHN5bWxpbmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgbWFzdGVyIGludG8gYi1maWxlLCB3aGljaCBoYXMgYSBmaWxlIGluc3RlYWQgb2YgYSBzeW1ib2xpYyBsaW5rJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBiLWZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoZSBtZXJnZSByZXN1bHQgbXVzdCBiZSBhIGZpbGUnICcKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzeW1saW5rCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGItZmlsZSwgd2hpY2ggaGFzIGEgZmlsZSBpbnN0ZWFkIG9mIGEgc3ltYm9saWMgbGluaywgaW50byBtYXN0ZXInICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBiLWZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhlIG1lcmdlIHJlc3VsdCBtdXN0IGJlIGEgZmlsZScgJworCXRlc3RfcGF0aF9pc19maWxlIHN5bWxpbmsKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDI2LW1lcmdlLWF0dHIuc2ggYi90L3Q2MDI2LW1lcmdlLWF0dHIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTkwMDM1OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMjYtbWVyZ2UtYXR0ci5zaApAQCAtMCwwICsxLDIwNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdwZXIgcGF0aCBtZXJnZSBjb250cm9sbGVkIGJ5IG1lcmdlIGF0dHJpYnV0ZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZm9yIGYgaW4gdGV4dCBiaW5hcnkgdW5pb24KKwlkbworCQllY2hvIEluaXRpYWwgPiRmICYmIGdpdCBhZGQgJGYgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBJbml0aWFsICYmCisKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwlmb3IgZiBpbiB0ZXh0IGJpbmFyeSB1bmlvbgorCWRvCisJCWVjaG8gTWFzdGVyID4+JGYgJiYgZ2l0IGFkZCAkZiB8fCByZXR1cm4gMQorCWRvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIE1hc3RlciAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlmb3IgZiBpbiB0ZXh0IGJpbmFyeSB1bmlvbgorCWRvCisJCWVjaG8gU2lkZSA+PiRmICYmIGdpdCBhZGQgJGYgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBTaWRlICYmCisKKwlnaXQgdGFnIGFuY2hvciAmJgorCisJY2F0ID4uL2N1c3RvbS1tZXJnZSA8PC1cRU9GICYmCisJIyEvYmluL3NoCisKKwlvcmlnPSIkMSIgb3Vycz0iJDIiIHRoZWlycz0iJDMiIGV4aXQ9IiQ0IiBwYXRoPSQ1CisJKAorCQllY2hvICJvcmlnIGlzICRvcmlnIgorCQllY2hvICJvdXJzIGlzICRvdXJzIgorCQllY2hvICJ0aGVpcnMgaXMgJHRoZWlycyIKKwkJZWNobyAicGF0aCBpcyAkcGF0aCIKKwkJZWNobyAiPT09IG9yaWcgPT09IgorCQljYXQgIiRvcmlnIgorCQllY2hvICI9PT0gb3VycyA9PT0iCisJCWNhdCAiJG91cnMiCisJCWVjaG8gIj09PSB0aGVpcnMgPT09IgorCQljYXQgIiR0aGVpcnMiCisJKSA+IiRvdXJzKyIKKwljYXQgIiRvdXJzKyIgPiIkb3VycyIKKwlybSAtZiAiJG91cnMrIgorCWV4aXQgIiRleGl0IgorCUVPRgorCWNobW9kICt4IC4vY3VzdG9tLW1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgbWVyZ2UgJworCisJeworCQllY2hvICJiaW5hcnkgLW1lcmdlIgorCQllY2hvICJ1bmlvbiBtZXJnZT11bmlvbiIKKwl9ID4uZ2l0YXR0cmlidXRlcyAmJgorCisJaWYgZ2l0IG1lcmdlIG1hc3RlcgorCXRoZW4KKwkJZWNobyBHYWFoLCBzaG91bGQgaGF2ZSBjb25mbGljdGVkCisJCWZhbHNlCisJZWxzZQorCQllY2hvIE9rLCBjb25mbGljdGVkLgorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIG1lcmdlIHJlc3VsdCBpbiBpbmRleCcgJworCisJZ2l0IGxzLWZpbGVzIC11IHwgZ3JlcCBiaW5hcnkgJiYKKwlnaXQgbHMtZmlsZXMgLXUgfCBncmVwIHRleHQgJiYKKwkhIChnaXQgbHMtZmlsZXMgLXUgfCBncmVwIHVuaW9uKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIG1lcmdlIHJlc3VsdCBpbiB3b3JraW5nIHRyZWUnICcKKworCWdpdCBjYXQtZmlsZSAtcCBIRUFEOmJpbmFyeSA+YmluYXJ5LW9yaWcgJiYKKwlncmVwICI8PDw8PDw8IiB0ZXh0ICYmCisJY21wIGJpbmFyeS1vcmlnIGJpbmFyeSAmJgorCSEgZ3JlcCAiPDw8PDw8PCIgdW5pb24gJiYKKwlncmVwIE1hc3RlciB1bmlvbiAmJgorCWdyZXAgU2lkZSB1bmlvbgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldHJ5IHRoZSBtZXJnZSB3aXRoIGxvbmdlciBjb250ZXh0JyAnCisJZWNobyB0ZXh0IGNvbmZsaWN0LW1hcmtlci1zaXplPTMyID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY2hlY2tvdXQgLW0gdGV4dCAmJgorCXNlZCAtbmUgIi9eXChbPD0+XVwpXDFcMVwxKi97CisJCXMvIC4qJC8vCisJCXAKKwl9IiA+YWN0dWFsIHRleHQgJiYKKwlncmVwICI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiIgYWN0dWFsICYmCisJZ3JlcCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iIGFjdHVhbCAmJgorCWdyZXAgIjw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VzdG9tIG1lcmdlIGJhY2tlbmQnICcKKworCWVjaG8gIiogbWVyZ2U9dW5pb24iID4uZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gInRleHQgbWVyZ2U9Y3VzdG9tIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIGFuY2hvciAmJgorCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBcCisJbWVyZ2UuY3VzdG9tLmRyaXZlciAiLi9jdXN0b20tbWVyZ2UgJU8gJUEgJUIgMCAlUCIgJiYKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgXAorCW1lcmdlLmN1c3RvbS5uYW1lICJjdXN0b20gbWVyZ2UgZHJpdmVyIGZvciB0ZXN0aW5nIiAmJgorCisJZ2l0IG1lcmdlIG1hc3RlciAmJgorCisJY21wIGJpbmFyeSB1bmlvbiAmJgorCXNlZCAtZSAxLDNkIHRleHQgPmNoZWNrLTEgJiYKKwlvPSQoZ2l0IHVucGFjay1maWxlIG1hc3Rlcl46dGV4dCkgJiYKKwlhPSQoZ2l0IHVucGFjay1maWxlIHNpZGVeOnRleHQpICYmCisJYj0kKGdpdCB1bnBhY2stZmlsZSBtYXN0ZXI6dGV4dCkgJiYKKwlzaCAtYyAiLi9jdXN0b20tbWVyZ2UgJG8gJGEgJGIgMCAndGV4dCciICYmCisJc2VkIC1lIDEsM2QgJGEgPmNoZWNrLTIgJiYKKwljbXAgY2hlY2stMSBjaGVjay0yICYmCisJcm0gLWYgJG8gJGEgJGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VzdG9tIG1lcmdlIGJhY2tlbmQnICcKKworCWdpdCByZXNldCAtLWhhcmQgYW5jaG9yICYmCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIFwKKwltZXJnZS5jdXN0b20uZHJpdmVyICIuL2N1c3RvbS1tZXJnZSAlTyAlQSAlQiAxICVQIiAmJgorCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBcCisJbWVyZ2UuY3VzdG9tLm5hbWUgImN1c3RvbSBtZXJnZSBkcml2ZXIgZm9yIHRlc3RpbmciICYmCisKKwlpZiBnaXQgbWVyZ2UgbWFzdGVyCisJdGhlbgorCQllY2hvICJFaD8gc2hvdWxkIGhhdmUgY29uZmxpY3RlZCIKKwkJZmFsc2UKKwllbHNlCisJCWVjaG8gIk9rLCBjb25mbGljdGVkIgorCWZpICYmCisKKwljbXAgYmluYXJ5IHVuaW9uICYmCisJc2VkIC1lIDEsM2QgdGV4dCA+Y2hlY2stMSAmJgorCW89JChnaXQgdW5wYWNrLWZpbGUgbWFzdGVyXjp0ZXh0KSAmJgorCWE9JChnaXQgdW5wYWNrLWZpbGUgYW5jaG9yOnRleHQpICYmCisJYj0kKGdpdCB1bnBhY2stZmlsZSBtYXN0ZXI6dGV4dCkgJiYKKwlzaCAtYyAiLi9jdXN0b20tbWVyZ2UgJG8gJGEgJGIgMCAndGV4dCciICYmCisJc2VkIC1lIDEsM2QgJGEgPmNoZWNrLTIgJiYKKwljbXAgY2hlY2stMSBjaGVjay0yICYmCisJc2VkIC1lIDEsM2QgLWUgNHEgJGEgPmNoZWNrLTMgJiYKKwllY2hvICJwYXRoIGlzIHRleHQiID5leHBlY3QgJiYKKwljbXAgZXhwZWN0IGNoZWNrLTMgJiYKKwlybSAtZiAkbyAkYSAkYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cC10by1kYXRlIG1lcmdlIHdpdGhvdXQgY29tbW9uIGFuY2VzdG9yJyAnCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvMSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbzIgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCWNkIHJlcG8xICYmCisJCT5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tIGluaXRpYWwKKwkpICYmCisJdGVzdF90aWNrICYmCisJKAorCQljZCByZXBvMiAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gaW5pdGlhbAorCSkgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCWNkIHJlcG8xICYmCisJCWdpdCBmZXRjaCAuLi9yZXBvMiBtYXN0ZXIgJiYKKwkJZ2l0IG1lcmdlIC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyBGRVRDSF9IRUFECisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdXN0b20gbWVyZ2UgZG9lcyBub3QgbG9jayBpbmRleCcgJworCWdpdCByZXNldCAtLWhhcmQgYW5jaG9yICYmCisJd3JpdGVfc2NyaXB0IHNsZWVwLWFuLWhvdXIuc2ggPDwtXEVPRiAmJgorCQlzbGVlcCAzNjAwICYKKwkJZWNobyAkISA+c2xlZXAucGlkCisJRU9GCisKKwl0ZXN0X3dyaXRlX2xpbmVzID4uZ2l0YXR0cmlidXRlcyBcCisJCSIqIG1lcmdlPW91cnMiICJ0ZXh0IG1lcmdlPXNsZWVwLWFuLWhvdXIiICYmCisJdGVzdF9jb25maWcgbWVyZ2Uub3Vycy5kcml2ZXIgdHJ1ZSAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnNsZWVwLWFuLWhvdXIuZHJpdmVyIC4vc2xlZXAtYW4taG91ci5zaCAmJgorCisJIyBXZSBhcmUgdGVzdGluZyB0aGF0IHRoZSBjdXN0b20gbWVyZ2UgZHJpdmVyIGRvZXMgbm90IGJsb2NrCisJIyBpbmRleC5sb2NrIG9uIFdpbmRvd3MgZHVlIHRvIGFuIGluaGVyaXRlZCBmaWxlIGhhbmRsZS4KKwkjIFRvIGVuc3VyZSB0aGF0IHRoZSBiYWNrZ3JvdW5kZWQgcHJvY2VzcyByYW4gc3VmZmljaWVudGx5CisJIyBsb25nIChhbmQgaGFzIGJlZW4gc3RhcnRlZCBpbiB0aGUgZmlyc3QgcGxhY2UpLCB3ZSBkbyBub3QKKwkjIGlnbm9yZSB0aGUgcmVzdWx0IG9mIHRoZSBraWxsIGNvbW1hbmQuCisJIyBCeSBwYWNrYWdpbmcgdGhlIGNvbW1hbmQgaW4gdGVzdF93aGVuX2ZpbmlzaGVkLCB3ZSBnZXQgYm90aAorCSMgdGhlIGNvcnJlY3RuZXNzIGNoZWNrIGFuZCB0aGUgY2xlYW4tdXAuCisJdGVzdF93aGVuX2ZpbmlzaGVkICJraWxsIFwkKGNhdCBzbGVlcC5waWQpIiAmJgorCWdpdCBtZXJnZSBtYXN0ZXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDI3LW1lcmdlLWJpbmFyeS5zaCBiL3QvdDYwMjctbWVyZ2UtYmluYXJ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRlNmM3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDI3LW1lcmdlLWJpbmFyeS5zaApAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXNrIG1lcmdlLXJlY3Vyc2l2ZSB0byBtZXJnZSBiaW5hcnkgZmlsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWNhdCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyA+bSAmJgorCWdpdCBhZGQgbSAmJgorCWdpdCBscy1maWxlcyAtcyB8IHNlZCAtZSAicy8gMAkvIDEJLyIgPkUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIgJiYKKworCWdpdCBicmFuY2ggc2lkZSAmJgorCWVjaG8gZnJvdHogPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwllY2hvIG5pdGZvbCA+Pm0gJiYKKwlnaXQgYWRkIGEgbSAmJgorCWdpdCBscy1maWxlcyAtcyBhID5FMCAmJgorCWdpdCBscy1maWxlcyAtcyBtIHwgc2VkIC1lICJzLyAwCS8gMwkvIiA+RTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJtYXN0ZXIgYWRkcyBzb21lIiAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvIHJlenJvdiA+Pm0gJiYKKwlnaXQgYWRkIG0gJiYKKwlnaXQgbHMtZmlsZXMgLXMgbSB8IHNlZCAtZSAicy8gMAkvIDIJLyIgPkUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic2lkZSBtb2RpZmllcyIgJiYKKworCWdpdCB0YWcgYW5jaG9yICYmCisKKwljYXQgRTAgRTEgRTIgRTMgPmV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHJlc29sdmUgJworCisJcm0gLWYgYSogbSogJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGFuY2hvciAmJgorCisJaWYgZ2l0IG1lcmdlIC1zIHJlc29sdmUgbWFzdGVyCisJdGhlbgorCQllY2hvIE9vcHMsIHNob3VsZCBub3QgaGF2ZSBzdWNjZWVkZWQKKwkJZmFsc2UKKwllbHNlCisJCWdpdCBscy1maWxlcyAtcyA+Y3VycmVudAorCQl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgcmVjdXJzaXZlICcKKworCXJtIC1mIGEqIG0qICYmCisJZ2l0IHJlc2V0IC0taGFyZCBhbmNob3IgJiYKKworCWlmIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgbWFzdGVyCisJdGhlbgorCQllY2hvIE9vcHMsIHNob3VsZCBub3QgaGF2ZSBzdWNjZWVkZWQKKwkJZmFsc2UKKwllbHNlCisJCWdpdCBscy1maWxlcyAtcyA+Y3VycmVudAorCQl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorCWZpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAyOC1tZXJnZS11cC10by1kYXRlLnNoIGIvdC90NjAyOC1tZXJnZS11cC10by1kYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc3NjNjMWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDI4LW1lcmdlLXVwLXRvLWRhdGUuc2gKQEAgLTAsMCArMSw5MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlIGZhc3QtZm9yd2FyZCBhbmQgdXAgdG8gZGF0ZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBjMCAmJgorCisJZWNobyBzZWNvbmQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCWdpdCB0YWcgYzEgJiYKKwlnaXQgYnJhbmNoIHRlc3QgJiYKKwllY2hvIHRoaXJkID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCWdpdCB0YWcgYzIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLXMgcmVjdXJzaXZlIHVwLXRvLWRhdGUnICcKKworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIGMwICYmCisJZXhwZWN0PSQoZ2l0IHJldi1wYXJzZSBjMSkgJiYKKwljdXJyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3QgIiRleHBlY3QiID0gIiRjdXJyZW50IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC1zIHJlY3Vyc2l2ZSBmYXN0LWZvcndhcmQnICcKKworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIGMxICYmCisJZXhwZWN0PSQoZ2l0IHJldi1wYXJzZSBjMSkgJiYKKwljdXJyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3QgIiRleHBlY3QiID0gIiRjdXJyZW50IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC1zIG91cnMgdXAtdG8tZGF0ZScgJworCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIGMwICYmCisJZXhwZWN0PSQoZ2l0IHJldi1wYXJzZSBjMSkgJiYKKwljdXJyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3QgIiRleHBlY3QiID0gIiRjdXJyZW50IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC1zIG91cnMgZmFzdC1mb3J3YXJkJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgYzEgJiYKKwlleHBlY3Q9JChnaXQgcmV2LXBhcnNlIGMwXnt0cmVlfSkgJiYKKwljdXJyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSkgJiYKKwl0ZXN0ICIkZXhwZWN0IiA9ICIkY3VycmVudCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtcyBzdWJ0cmVlIHVwLXRvLWRhdGUnICcKKworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLXMgc3VidHJlZSBjMCAmJgorCWV4cGVjdD0kKGdpdCByZXYtcGFyc2UgYzEpICYmCisJY3VycmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0ICIkZXhwZWN0IiA9ICIkY3VycmVudCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBmYXN0LWZvcndhcmQgb2N0b3B1cycgJworCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSBjMSBjMiAmJgorCWV4cGVjdD0kKGdpdCByZXYtcGFyc2UgYzIpICYmCisJY3VycmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0ICIkZXhwZWN0IiA9ICIkY3VycmVudCIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDI5LW1lcmdlLXN1YnRyZWUuc2ggYi90L3Q2MDI5LW1lcmdlLXN1YnRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzkzZjBjOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMjktbWVyZ2Utc3VidHJlZS5zaApAQCAtMCwwICsxLDE1MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3N1YnRyZWUgbWVyZ2Ugc3RyYXRlZ3knCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCXM9IjEgMiAzIDQgNSA2IDcgOCIgJiYKKwlmb3IgaSBpbiAkczsgZG8gZWNobyAkaTsgZG9uZSA+aGVsbG8gJiYKKwlnaXQgYWRkIGhlbGxvICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwllY2hvID4+aGVsbG8gd29ybGQgJiYKKwlnaXQgYWRkIGhlbGxvICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZm9yIGkgaW4gbXVuZG8gJHM7IGRvIGVjaG8gJGk7IGRvbmUgPmhlbGxvICYmCisJZ2l0IGFkZCBoZWxsbyAmJgorCWdpdCBjb21taXQgLW0gbWFzdGVyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VidHJlZSBhdmFpbGFibGUgYW5kIHdvcmtzIGxpa2UgcmVjdXJzaXZlJyAnCisKKwlnaXQgbWVyZ2UgLXMgc3VidHJlZSBzaWRlICYmCisJZm9yIGkgaW4gbXVuZG8gJHMgd29ybGQ7IGRvIGVjaG8gJGk7IGRvbmUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWxsbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJyYW5jaCBzdWInICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gc3ViICYmCisJZ2l0IHJtIC1yZiAuICYmCisJdGVzdF9jb21taXQgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJyYW5jaCBtYWluJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG1haW4gbWFzdGVyICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgLS1uby1jb21taXQgLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIHN1YiAmJgorCWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9ZGlyLyAtdSBzdWIgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIG1lcmdlIG9mIHN1YiBpbnRvIG1haW4iICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyL2Zvby50ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgaGVsbG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGJyYW5jaCBzdWInICcKKwlnaXQgY2hlY2tvdXQgc3ViICYmCisJdGVzdF9jb21taXQgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBicmFuY2ggbWFpbicgJworCWdpdCBjaGVja291dCBtYWluICYmCisJZ2l0IG1lcmdlIC1zIHN1YnRyZWUgc3ViIC1tICJzZWNvbmQgbWVyZ2Ugb2Ygc3ViIGludG8gbWFpbiIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIvYmFyLnQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIvZm9vLnQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBoZWxsbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIGdpdC1ndWkgJiYKKwljZCBnaXQtZ3VpICYmCisJZ2l0IGluaXQgJiYKKwllY2hvIGdpdC1ndWkgPiBnaXQtZ3VpLnNoICYmCisJbzE9JChnaXQgaGFzaC1vYmplY3QgZ2l0LWd1aS5zaCkgJiYKKwlnaXQgYWRkIGdpdC1ndWkuc2ggJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIGdpdC1ndWkiICYmCisJY2QgLi4gJiYKKwlta2RpciBnaXQgJiYKKwljZCBnaXQgJiYKKwlnaXQgaW5pdCAmJgorCWVjaG8gZ2l0ID5naXQuYyAmJgorCW8yPSQoZ2l0IGhhc2gtb2JqZWN0IGdpdC5jKSAmJgorCWdpdCBhZGQgZ2l0LmMgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIGdpdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbCBtZXJnZScgJworCWdpdCByZW1vdGUgYWRkIC1mIGd1aSAuLi9naXQtZ3VpICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgLS1uby1jb21taXQgLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIGd1aS9tYXN0ZXIgJiYKKwlnaXQgcmVhZC10cmVlIC0tcHJlZml4PWdpdC1ndWkvIC11IGd1aS9tYXN0ZXIgJiYKKwlnaXQgY29tbWl0IC1tICJNZXJnZSBnaXQtZ3VpIGFzIG91ciBzdWJkaXJlY3RvcnkiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHdvcmsgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWdpdC1ndWkvZ2l0LWd1aS5zaCIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMiAwCWdpdC5jIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHVwZGF0ZScgJworCWNkIC4uL2dpdC1ndWkgJiYKKwllY2hvIGdpdC1ndWkyID4gZ2l0LWd1aS5zaCAmJgorCW8zPSQoZ2l0IGhhc2gtb2JqZWN0IGdpdC1ndWkuc2gpICYmCisJZ2l0IGFkZCBnaXQtZ3VpLnNoICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlcjIgJiYKKwlnaXQgY29tbWl0IC1tICJ1cGRhdGUgZ2l0LWd1aSIgJiYKKwljZCAuLi9naXQgJiYKKwlnaXQgcHVsbCAtcyBzdWJ0cmVlIGd1aSBtYXN0ZXIyICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzMgMAlnaXQtZ3VpL2dpdC1ndWkuc2giICYmCisJCWVjaG8gIjEwMDY0NCAkbzIgMAlnaXQuYyIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsIGFtYmlndW91cyBzdWJ0cmVlJyAnCisJY2QgLi4vZ2l0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyMiAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIC0tbm8tY29tbWl0IGd1aS9tYXN0ZXIgJiYKKwlnaXQgcmVhZC10cmVlIC0tcHJlZml4PWdpdC1ndWkyLyAtdSBndWkvbWFzdGVyICYmCisJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgZ2l0LWd1aTIgYXMgb3VyIHN1YmRpcmVjdG9yeSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgd29yazIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWdpdC1ndWkvZ2l0LWd1aS5zaCIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWdpdC1ndWkyL2dpdC1ndWkuc2giICYmCisJCWVjaG8gIjEwMDY0NCAkbzIgMAlnaXQuYyIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB1c2luZyBleHBsaWNpdCcgJworCWNkIC4uL2dpdCAmJgorCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyMiAmJgorCWdpdCBwdWxsIC1Yc3VidHJlZT1naXQtZ3VpIGd1aSBtYXN0ZXIyICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzMgMAlnaXQtZ3VpL2dpdC1ndWkuc2giICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlnaXQtZ3VpMi9naXQtZ3VpLnNoIiAmJgorCQllY2hvICIxMDA2NDQgJG8yIDAJZ2l0LmMiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UyIHVzaW5nIGV4cGxpY2l0JyAnCisJY2QgLi4vZ2l0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIyICYmCisJZ2l0IHB1bGwgLVhzdWJ0cmVlPWdpdC1ndWkyIGd1aSBtYXN0ZXIyICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlnaXQtZ3VpL2dpdC1ndWkuc2giICYmCisJCWVjaG8gIjEwMDY0NCAkbzMgMAlnaXQtZ3VpMi9naXQtZ3VpLnNoIiAmJgorCQllY2hvICIxMDA2NDQgJG8yIDAJZ2l0LmMiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2ggYi90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWMzMWZhZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaApAQCAtMCwwICsxLDkyMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBDaHJpc3RpYW4gQ291ZGVyCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyBnaXQgYmlzZWN0IGZ1bmN0aW9uYWxpdHknCisKK2V4ZWMgPC9kZXYvbnVsbAorCisuIC4vdGVzdC1saWIuc2gKKworYWRkX2xpbmVfaW50b19maWxlKCkKK3sKKyAgICBfbGluZT0kMQorICAgIF9maWxlPSQyCisKKyAgICBpZiBbIC1mICIkX2ZpbGUiIF07IHRoZW4KKyAgICAgICAgZWNobyAiJF9saW5lIiA+PiAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIE1TRz0iQWRkIDwkX2xpbmU+IGludG8gPCRfZmlsZT4uIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiJF9saW5lIiA+ICRfZmlsZSB8fCByZXR1cm4gJD8KKyAgICAgICAgZ2l0IGFkZCAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIE1TRz0iQ3JlYXRlIGZpbGUgPCRfZmlsZT4gd2l0aCA8JF9saW5lPiBpbnNpZGUuIgorICAgIGZpCisKKyAgICB0ZXN0X3RpY2sKKyAgICBnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiRNU0ciICRfZmlsZQorfQorCitIQVNIMT0KK0hBU0gyPQorSEFTSDM9CitIQVNIND0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGJhc2ljIHJlcG8gd2l0aCAxIGZpbGUgKGhlbGxvKSBhbmQgNCBjb21taXRzJyAnCisgICAgIGFkZF9saW5lX2ludG9fZmlsZSAiMTogSGVsbG8gV29ybGQiIGhlbGxvICYmCisgICAgIEhBU0gxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBhZGRfbGluZV9pbnRvX2ZpbGUgIjI6IEEgbmV3IGRheSBmb3IgZ2l0IiBoZWxsbyAmJgorICAgICBIQVNIMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgYWRkX2xpbmVfaW50b19maWxlICIzOiBBbm90aGVyIG5ldyBkYXkgZm9yIGdpdCIgaGVsbG8gJiYKKyAgICAgSEFTSDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGFkZF9saW5lX2ludG9fZmlsZSAiNDogQ2lhbyBmb3Igbm93IiBoZWxsbyAmJgorICAgICBIQVNIND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0cyB3aXRoIG9ubHkgb25lIGJhZCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCisJZ2l0IGJpc2VjdCBuZXh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBkb2VzIG5vdCBzdGFydCB3aXRoIG9ubHkgb25lIGdvb2QnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IG5leHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0IHdpdGggb25lIGJhZCBhbmQgZ29vZCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBnb29kICRIQVNIMSAmJgorCWdpdCBiaXNlY3QgYmFkICRIQVNINCAmJgorCWdpdCBiaXNlY3QgbmV4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgZmFpbHMgaWYgZ2l2ZW4gYW55IGp1bmsgaW5zdGVhZCBvZiByZXZzJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgZm9vICRIQVNIMSAtLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSBiYXIgLS0gJiYKKwl0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgInJlZnMvYmlzZWN0LyoiKSIgJiYKKwl0ZXN0IC16ICIkKGxzIC5naXQvQklTRUNUXyogMj4vZGV2L251bGwpIiAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGdvb2QgZm9vICRIQVNIMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBiYWQgZnJvdHogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGJhZCAkSEFTSDMgJEhBU0g0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBza2lwIGJhciAkSEFTSDMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHNraXAgJEhBU0gxIGZvbyAmJgorCXRlc3QgLXogIiQoZ2l0IGZvci1lYWNoLXJlZiAicmVmcy9iaXNlY3QvKiIpIiAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IGJhZCAkSEFTSDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlc2V0OiBiYWNrIGluIHRoZSBtYXN0ZXIgYnJhbmNoJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWVjaG8gIiogbWFzdGVyIiA+IGJyYW5jaC5leHBlY3QgJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWNtcCBicmFuY2guZXhwZWN0IGJyYW5jaC5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlc2V0OiBiYWNrIGluIGFub3RoZXIgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IGJhZCAkSEFTSDMgJiYKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZWNobyAiICBtYXN0ZXIiID4gYnJhbmNoLmV4cGVjdCAmJgorCWVjaG8gIiogb3RoZXIiID4+IGJyYW5jaC5leHBlY3QgJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWNtcCBicmFuY2guZXhwZWN0IGJyYW5jaC5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlc2V0IHdoZW4gbm90IGJpc2VjdGluZycgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWNtcCBicmFuY2guZXhwZWN0IGJyYW5jaC5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlc2V0IHJlbW92ZXMgcGFja2VkIHJlZnMnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IGJhZCAkSEFTSDMgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwlnaXQgYmlzZWN0IG5leHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmICJyZWZzL2Jpc2VjdC8qIikiICYmCisJdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmICJyZWZzL2hlYWRzL2Jpc2VjdCIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgcmVzZXQgcmVtb3ZlcyBiaXNlY3Qgc3RhdGUgYWZ0ZXIgLS1uby1jaGVja291dCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IC0tbm8tY2hlY2tvdXQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBiYWQgJEhBU0gzICYmCisJZ2l0IGJpc2VjdCBuZXh0ICYmCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXRlc3QgLXogIiQoZ2l0IGZvci1lYWNoLXJlZiAicmVmcy9iaXNlY3QvKiIpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGZvci1lYWNoLXJlZiAicmVmcy9oZWFkcy9iaXNlY3QiKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgIkJJU0VDVF9IRUFEIikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydDogYmFjayBpbiBnb29kIGJyYW5jaCcgJworCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJZ3JlcCAiKiBvdGhlciIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAtLSAmJgorCWdpdCBiaXNlY3QgZ29vZCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAtLSAmJgorCWdpdCBiaXNlY3QgYmFkICYmCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJZ3JlcCAiKiBvdGhlciIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQ6IG5vICIuZ2l0L0JJU0VDVF9TVEFSVCIgY3JlYXRlZCBpZiBqdW5rIHJldicgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCBmb28gLS0gJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWdyZXAgIiogb3RoZXIiIGJyYW5jaC5vdXRwdXQgPiAvZGV2L251bGwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L0JJU0VDVF9TVEFSVAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQ6IGV4aXN0aW5nICIuZ2l0L0JJU0VDVF9TVEFSVCIgbm90IG1vZGlmaWVkIGlmIGp1bmsgcmV2JyAnCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxIC0tICYmCisJZ2l0IGJpc2VjdCBnb29kICYmCisJY3AgLmdpdC9CSVNFQ1RfU1RBUlQgc2F2ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCBmb28gLS0gJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIiogKG5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gb3RoZXIpIiBicmFuY2gub3V0cHV0ID4gL2Rldi9udWxsICYmCisJdGVzdF9jbXAgc2F2ZWQgLmdpdC9CSVNFQ1RfU1RBUlQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydDogbm8gIi5naXQvQklTRUNUX1NUQVJUIiBpZiBtaXN0YWtlbiByZXYnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCAkSEFTSDEgLS0gJiYKKwlnaXQgYmlzZWN0IGdvb2QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0ICRIQVNIMSAkSEFTSDQgLS0gJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWdyZXAgIiogb3RoZXIiIGJyYW5jaC5vdXRwdXQgPiAvZGV2L251bGwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L0JJU0VDVF9TVEFSVAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQ6IG5vICIuZ2l0L0JJU0VDVF9TVEFSVCIgaWYgY2hlY2tvdXQgZXJyb3InICcKKwllY2hvICJ0ZW1wIHN0dWZmIiA+IGhlbGxvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxIC0tICYmCisJZ2l0IGJyYW5jaCAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJZ3JlcCAiKiBvdGhlciIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvQklTRUNUX1NUQVJUICYmCisJdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmICJyZWZzL2Jpc2VjdC8qIikiICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgaGVsbG8KKycKKworIyAkSEFTSDEgaXMgZ29vZCwgJEhBU0g0IGlzIGJhZCwgd2Ugc2tpcCAkSEFTSDMKKyMgYnV0ICRIQVNIMiBpcyBiYWQsCisjIHNvIHdlIHNob3VsZCBmaW5kICRIQVNIMiBhcyB0aGUgZmlyc3QgYmFkIGNvbW1pdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHNraXA6IHN1Y2Nlc3NmdWwgcmVzdWx0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBza2lwICYmCisJZ2l0IGJpc2VjdCBiYWQgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIiRIQVNIMiBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQKKycKKworIyAkSEFTSDEgaXMgZ29vZCwgJEhBU0g0IGlzIGJhZCwgd2Ugc2tpcCAkSEFTSDMgYW5kICRIQVNIMgorIyBzbyB3ZSBzaG91bGQgbm90IGJlIGFibGUgdG8gdGVsbCB0aGUgZmlyc3QgYmFkIGNvbW1pdAorIyBhbW9uZyAkSEFTSDIsICRIQVNIMyBhbmQgJEhBU0g0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcDogY2Fubm90IHRlbGwgYmV0d2VlbiAzIGNvbW1pdHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAmJgorCWdpdCBiaXNlY3Qgc2tpcCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgYmlzZWN0IHNraXAgPm15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJISBncmVwICRIQVNIMSBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgJEhBU0gyIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDMgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICRIQVNINCBteV9iaXNlY3RfbG9nLnR4dAorJworCisjICRIQVNIMSBpcyBnb29kLCAkSEFTSDQgaXMgYmFkLCB3ZSBza2lwICRIQVNIMworIyBidXQgJEhBU0gyIGlzIGdvb2QsCisjIHNvIHdlIHNob3VsZCBub3QgYmUgYWJsZSB0byB0ZWxsIHRoZSBmaXJzdCBiYWQgY29tbWl0CisjIGFtb25nICRIQVNIMyBhbmQgJEhBU0g0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcDogY2Fubm90IHRlbGwgYmV0d2VlbiAyIGNvbW1pdHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAmJgorCWdpdCBiaXNlY3Qgc2tpcCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgYmlzZWN0IGdvb2QgPm15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJISBncmVwICRIQVNIMSBteV9iaXNlY3RfbG9nLnR4dCAmJgorCSEgZ3JlcCAkSEFTSDIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICRIQVNIMyBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgJEhBU0g0IG15X2Jpc2VjdF9sb2cudHh0CisnCisKKyMgJEhBU0gxIGlzIGdvb2QsICRIQVNINCBpcyBib3RoIHNraXBwZWQgYW5kIGJhZCwgd2Ugc2tpcCAkSEFTSDMKKyMgYW5kICRIQVNIMiBpcyBnb29kLAorIyBzbyB3ZSBzaG91bGQgbm90IGJlIGFibGUgdG8gdGVsbCB0aGUgZmlyc3QgYmFkIGNvbW1pdAorIyBhbW9uZyAkSEFTSDMgYW5kICRIQVNINAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHNraXA6IHdpdGggY29tbWl0IGJvdGggYmFkIGFuZCBza2lwcGVkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBza2lwICYmCisJZ2l0IGJpc2VjdCBiYWQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBza2lwICYmCisJdGVzdF9leHBlY3RfY29kZSAyIGdpdCBiaXNlY3QgZ29vZCA+bXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICJmaXJzdCBiYWQgY29tbWl0IGNvdWxkIGJlIGFueSBvZiIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkhIGdyZXAgJEhBU0gxIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJISBncmVwICRIQVNIMiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgJEhBU0gzIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQKKycKKworIyBXZSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgZmluZCB0aGUgY29tbWl0IHRoYXQKKyMgaW50cm9kdWNlZCAiQW5vdGhlciIgaW50byBoZWxsby4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICciZ2l0IGJpc2VjdCBydW4iIHNpbXBsZSBjYXNlJyBcCisgICAgJ2VjaG8gIiMiXCEiL2Jpbi9zaCIgPiB0ZXN0X3NjcmlwdC5zaCAmJgorICAgICBlY2hvICJncmVwIEFub3RoZXIgaGVsbG8gPiAvZGV2L251bGwiID4+IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGVjaG8gInRlc3QgXCQ/IC1uZSAwIiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorICAgICBjaG1vZCAreCB0ZXN0X3NjcmlwdC5zaCAmJgorICAgICBnaXQgYmlzZWN0IHN0YXJ0ICYmCisgICAgIGdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKyAgICAgZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCisgICAgIGdpdCBiaXNlY3QgcnVuIC4vdGVzdF9zY3JpcHQuc2ggPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorICAgICBncmVwICIkSEFTSDMgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisgICAgIGdpdCBiaXNlY3QgcmVzZXQnCisKKyMgV2Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IGZpbmQgdGhlIGNvbW1pdCB0aGF0CisjIGludHJvZHVjZWQgIkNpYW8iIGludG8gaGVsbG8uCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnImdpdCBiaXNlY3QgcnVuIiB3aXRoIG1vcmUgY29tcGxleCAiZ2l0IGJpc2VjdCBzdGFydCInIFwKKyAgICAnZWNobyAiIyJcISIvYmluL3NoIiA+IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGVjaG8gImdyZXAgQ2lhbyBoZWxsbyA+IC9kZXYvbnVsbCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKyAgICAgZWNobyAidGVzdCBcJD8gLW5lIDAiID4+IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGNobW9kICt4IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAmJgorICAgICBnaXQgYmlzZWN0IHJ1biAuL3Rlc3Rfc2NyaXB0LnNoID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKyAgICAgZ3JlcCAiJEhBU0g0IGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgorICAgICBnaXQgYmlzZWN0IHJlc2V0JworCisjICRIQVNIMSBpcyBnb29kLCAkSEFTSDUgaXMgYmFkLCB3ZSBza2lwICRIQVNIMworIyBidXQgJEhBU0g0IGlzIGdvb2QsCisjIHNvIHdlIHNob3VsZCBmaW5kICRIQVNINSBhcyB0aGUgZmlyc3QgYmFkIGNvbW1pdAorSEFTSDU9Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcDogYWRkIGxpbmUgYW5kIHRoZW4gYSBuZXcgdGVzdCcgJworCWFkZF9saW5lX2ludG9fZmlsZSAiNTogQW5vdGhlciBuZXcgbGluZS4iIGhlbGxvICYmCisJSEFTSDU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDUgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBza2lwICYmCisJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkSEFTSDUgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCBsb2cgPiBsb2dfdG9fcmVwbGF5LnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHNraXAgYW5kIGJpc2VjdCByZXBsYXknICcKKwlnaXQgYmlzZWN0IHJlcGxheSBsb2dfdG9fcmVwbGF5LnR4dCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJEhBU0g1IGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKworSEFTSDY9Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgcnVuICYgc2tpcDogY2Fubm90IHRlbGwgYmV0d2VlbiAyJyAnCisJYWRkX2xpbmVfaW50b19maWxlICI2OiBZZXQgYSBsaW5lLiIgaGVsbG8gJiYKKwlIQVNINj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwllY2hvICIjIlwhIi9iaW4vc2giID4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJzZWQgLW5lIFxcXCRwIGhlbGxvIHwgZ3JlcCBDaWFvID4gL2Rldi9udWxsICYmIGV4aXQgMTI1IiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorCWVjaG8gImdyZXAgbGluZSBoZWxsbyA+IC9kZXYvbnVsbCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJ0ZXN0IFwkPyAtbmUgMCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwljaG1vZCAreCB0ZXN0X3NjcmlwdC5zaCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g2ICRIQVNIMSAmJgorCWlmIGdpdCBiaXNlY3QgcnVuIC4vdGVzdF9zY3JpcHQuc2ggPiBteV9iaXNlY3RfbG9nLnR4dAorCXRoZW4KKwkJZWNobyBPb3BzLCBzaG91bGQgaGF2ZSBmYWlsZWQuCisJCWZhbHNlCisJZWxzZQorCQl0ZXN0ICQ/IC1lcSAyICYmCisJCWdyZXAgImZpcnN0IGJhZCBjb21taXQgY291bGQgYmUgYW55IG9mIiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCQkhIGdyZXAgJEhBU0gzIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJCSEgZ3JlcCAkSEFTSDYgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJZ3JlcCAkSEFTSDUgbXlfYmlzZWN0X2xvZy50eHQKKwlmaQorJworCitIQVNINz0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBydW4gJiBza2lwOiBmaW5kIGZpcnN0IGJhZCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjc6IFNob3VsZCBiZSB0aGUgbGFzdCBsaW5lLiIgaGVsbG8gJiYKKwlIQVNINz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwllY2hvICIjIlwhIi9iaW4vc2giID4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJzZWQgLW5lIFxcXCRwIGhlbGxvIHwgZ3JlcCBDaWFvID4gL2Rldi9udWxsICYmIGV4aXQgMTI1IiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorCWVjaG8gInNlZCAtbmUgXFxcJHAgaGVsbG8gfCBncmVwIGRheSA+IC9kZXYvbnVsbCAmJiBleGl0IDEyNSIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJncmVwIFlldCBoZWxsbyA+IC9kZXYvbnVsbCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJ0ZXN0IFwkPyAtbmUgMCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwljaG1vZCAreCB0ZXN0X3NjcmlwdC5zaCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g3ICRIQVNIMSAmJgorCWdpdCBiaXNlY3QgcnVuIC4vdGVzdF9zY3JpcHQuc2ggPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIiRIQVNINiBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHNraXAgb25seSBvbmUgcmFuZ2UnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDcgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBza2lwICRIQVNIMS4uJEhBU0g1ICYmCisJdGVzdCAiJEhBU0g2IiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBiYWQgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgImZpcnN0IGJhZCBjb21taXQgY291bGQgYmUgYW55IG9mIiBteV9iaXNlY3RfbG9nLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcCBtYW55IHJhbmdlcycgJworCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g3ICRIQVNIMSAmJgorCXRlc3QgIiRIQVNINCIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAmJgorCWdpdCBiaXNlY3Qgc2tpcCAkSEFTSDIgJEhBU0gyLi4gLi4kSEFTSDUgJiYKKwl0ZXN0ICIkSEFTSDYiID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiIG15X2Jpc2VjdF9sb2cudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydGluZyB3aXRoIGEgZGV0YWNoZWQgSEVBRCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXiAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCXRlc3QgJEhFQUQgPSAkKGNhdCAuZ2l0L0JJU0VDVF9TVEFSVCkgJiYKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgZXJyb3JzIG91dCBpZiBiYWQgYW5kIGdvb2QgYXJlIG1pc3Rha2VuJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0gyICRIQVNINCAyPiByZXZfbGlzdF9lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgIm1pc3Rvb2sgZ29vZCBhbmQgYmFkIiByZXZfbGlzdF9lcnJvciAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGRvZXMgbm90IGNyZWF0ZSBhICJiaXNlY3QiIGJyYW5jaCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINyAkSEFTSDEgJiYKKwlnaXQgYnJhbmNoIGJpc2VjdCAmJgorCXJldl9oYXNoND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcmV2X2hhc2g0IiA9ICIkSEFTSDQiICYmCisJZ2l0IGJyYW5jaCAtRCBiaXNlY3QgJiYKKwlnaXQgYmlzZWN0IGdvb2QgJiYKKwlnaXQgYnJhbmNoIGJpc2VjdCAmJgorCXJldl9oYXNoNj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcmV2X2hhc2g2IiA9ICIkSEFTSDYiICYmCisJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkSEFTSDcgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXJldl9oYXNoNj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYmlzZWN0KSAmJgorCXRlc3QgIiRyZXZfaGFzaDYiID0gIiRIQVNINiIgJiYKKwlnaXQgYnJhbmNoIC1EIGJpc2VjdAorJworCisjIFRoaXMgY3JlYXRlcyBhICJzaWRlIiBicmFuY2ggdG8gdGVzdCAic2libGluZ3MiIGNhc2VzLgorIworIyBIMS1IMi1IMy1INC1INS1INi1INyAgPC0tb3RoZXIKKyMgICAgICAgICAgICBcCisjICAgICAgICAgICAgIFM1LVM2LVM3ICA8LS1zaWRlCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWRlIGJyYW5jaCBjcmVhdGlvbicgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAkSEFTSDQgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjUoc2lkZSk6IGZpcnN0IGxpbmUgb24gYSBzaWRlIGJyYW5jaCIgaGVsbG8yICYmCisJU0lERV9IQVNINT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjYoc2lkZSk6IHNlY29uZCBsaW5lIG9uIGEgc2lkZSBicmFuY2giIGhlbGxvMiAmJgorCVNJREVfSEFTSDY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJYWRkX2xpbmVfaW50b19maWxlICI3KHNpZGUpOiB0aGlyZCBsaW5lIG9uIGEgc2lkZSBicmFuY2giIGhlbGxvMiAmJgorCVNJREVfSEFTSDc9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvb2QgbWVyZ2UgYmFzZSB3aGVuIGdvb2QgYW5kIGJhZCBhcmUgc2libGluZ3MnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICIkSEFTSDciICIkU0lERV9IQVNINyIgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCSEgZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICRIQVNINiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXBwZWQgbWVyZ2UgYmFzZSB3aGVuIGdvb2QgYW5kIGJhZCBhcmUgc2libGluZ3MnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICIkU0lERV9IQVNINyIgIiRIQVNINyIgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IHNraXAgPiBteV9iaXNlY3RfbG9nLnR4dCAyPiYxICYmCisJZ3JlcCAid2FybmluZyIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICRTSURFX0hBU0g2IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYWQgbWVyZ2UgYmFzZSB3aGVuIGdvb2QgYW5kIGJhZCBhcmUgc2libGluZ3MnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICIkSEFTSDciIEhFQUQgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2cudHh0IDI+JjEgJiYKKwl0ZXN0X2kxOG5ncmVwICJtZXJnZSBiYXNlICRIQVNINCBpcyBiYWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJdGVzdF9pMThuZ3JlcCAiZml4ZWQgYmV0d2VlbiAkSEFTSDQgYW5kIFxbJFNJREVfSEFTSDdcXSIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKKyMgVGhpcyBjcmVhdGVzIGEgZmV3IG1vcmUgY29tbWl0cyAoQSBhbmQgQikgdG8gdGVzdCAic2libGluZ3MiIGNhc2VzCisjIHdoZW4gYSBnb29kIGFuZCBhIGJhZCByZXYgaGF2ZSBtYW55IG1lcmdlIGJhc2VzLgorIworIyBXZSBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nOgorIworIyBIMS1IMi1IMy1INC1INS1INi1INworIyAgICAgICAgICAgIFwgIFwgICAgIFwKKyMgICAgICAgICAgICAgUzUtQSAgICAgXAorIyAgICAgICAgICAgICAgXCAgICAgICAgXAorIyAgICAgICAgICAgICAgIFM2LVM3LS0tLUIKKyMKKyMgQW5kIHRoZXJlIEEgYW5kIEIgaGF2ZSAyIG1lcmdlIGJhc2VzIChTNSBhbmQgSDUpIHRoYXQgc2hvdWxkIGJlCisjIHJlcG9ydGVkIGJ5ICJnaXQgbWVyZ2UtYmFzZSAtLWFsbCBBIEIiLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFueSBtZXJnZSBiYXNlcyBjcmVhdGlvbicgJworCWdpdCBjaGVja291dCAiJFNJREVfSEFTSDUiICYmCisJZ2l0IG1lcmdlIC1tICJtZXJnZSBIQVNINSBhbmQgU0lERV9IQVNINSIgIiRIQVNINSIgJiYKKwlBX0hBU0g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgbWVyZ2UgLW0gIm1lcmdlIEhBU0g3IGFuZCBTSURFX0hBU0g3IiAiJEhBU0g3IiAmJgorCUJfSEFTSD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgbWVyZ2UtYmFzZSAtLWFsbCAiJEFfSEFTSCIgIiRCX0hBU0giID4gbWVyZ2VfYmFzZXMudHh0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBtZXJnZV9iYXNlcy50eHQgJiYKKwlncmVwICIkSEFTSDUiIG1lcmdlX2Jhc2VzLnR4dCAmJgorCWdyZXAgIiRTSURFX0hBU0g1IiBtZXJnZV9iYXNlcy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ29vZCBtZXJnZSBiYXNlcyB3aGVuIGdvb2QgYW5kIGJhZCBhcmUgc2libGluZ3MnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICIkQl9IQVNIIiAiJEFfSEFTSCIgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZzIudHh0ICYmCisJdGVzdF9pMThuZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZzIudHh0ICYmCisJeworCQl7CisJCQlncmVwICIkU0lERV9IQVNINSIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJCWdyZXAgIiRIQVNINSIgbXlfYmlzZWN0X2xvZzIudHh0CisJCX0gfHwgeworCQkJZ3JlcCAiJFNJREVfSEFTSDUiIG15X2Jpc2VjdF9sb2cyLnR4dCAmJgorCQkJZ3JlcCAiJEhBU0g1IiBteV9iaXNlY3RfbG9nLnR4dAorCQl9CisJfSAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW1pemVkIG1lcmdlIGJhc2UgY2hlY2tzJyAnCisJZ2l0IGJpc2VjdCBzdGFydCAiJEhBU0g3IiAiJFNJREVfSEFTSDciID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIiRIQVNINCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nMi50eHQgJiYKKwl0ZXN0IC1mICIuZ2l0L0JJU0VDVF9BTkNFU1RPUlNfT0siICYmCisJdGVzdCAiJEhBU0g2IiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBiaXNlY3QgYmFkICYmCisJZ2l0IGJpc2VjdCBnb29kICIkQV9IQVNIIiA+IG15X2Jpc2VjdF9sb2c0LnR4dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2c0LnR4dCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICIuZ2l0L0JJU0VDVF9BTkNFU1RPUlNfT0siCisnCisKKyMgVGhpcyBjcmVhdGVzIGFub3RoZXIgc2lkZSBicmFuY2ggY2FsbGVkICJwYXJhbGxlbCIgd2l0aCBzb21lIGZpbGVzCisjIGluIHNvbWUgZGlyZWN0b3JpZXMsIHRvIHRlc3QgYmlzZWN0aW5nIHdpdGggcGF0aHMuCisjCisjIFdlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmc6CisjCisjICAgIFAxLVAyLVAzLVA0LVA1LVA2LVA3CisjICAgLyAgICAgICAgLyAgICAgICAgLworIyBIMS1IMi1IMy1INC1INS1INi1INworIyAgICAgICAgICAgIFwgIFwgICAgIFwKKyMgICAgICAgICAgICAgUzUtQSAgICAgXAorIyAgICAgICAgICAgICAgXCAgICAgICAgXAorIyAgICAgICAgICAgICAgIFM2LVM3LS0tLUIKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJwYXJhbGxlbCIgc2lkZSBicmFuY2ggY3JlYXRpb24nICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHBhcmFsbGVsICRIQVNIMSAmJgorCW1rZGlyIGRpcjEgZGlyMiAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiMShwYXJhKTogbGluZSAxIG9uIHBhcmFsbGVsIGJyYW5jaCIgZGlyMS9maWxlMSAmJgorCVBBUkFfSEFTSDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJYWRkX2xpbmVfaW50b19maWxlICIyKHBhcmEpOiBsaW5lIDIgb24gcGFyYWxsZWwgYnJhbmNoIiBkaXIyL2ZpbGUyICYmCisJUEFSQV9IQVNIMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjMocGFyYSk6IGxpbmUgMyBvbiBwYXJhbGxlbCBicmFuY2giIGRpcjIvZmlsZTMgJiYKKwlQQVJBX0hBU0gzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBtZXJnZSAtbSAibWVyZ2UgSEFTSDQgYW5kIFBBUkFfSEFTSDMiICIkSEFTSDQiICYmCisJUEFSQV9IQVNIND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjUocGFyYSk6IGFkZCBsaW5lIG9uIHBhcmFsbGVsIGJyYW5jaCIgZGlyMS9maWxlMSAmJgorCVBBUkFfSEFTSDU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJYWRkX2xpbmVfaW50b19maWxlICI2KHBhcmEpOiBhZGQgbGluZSBvbiBwYXJhbGxlbCBicmFuY2giIGRpcjIvZmlsZTIgJiYKKwlQQVJBX0hBU0g2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBtZXJnZSAtbSAibWVyZ2UgSEFTSDcgYW5kIFBBUkFfSEFTSDYiICIkSEFTSDciICYmCisJUEFSQV9IQVNINz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdHJpY3RpbmcgYmlzZWN0aW9uIG9uIG9uZSBkaXInICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCBIRUFEICRIQVNIMSAtLSBkaXIxICYmCisJcGFyYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHBhcmExIiA9ICIkUEFSQV9IQVNIMSIgJiYKKwlnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJFBBUkFfSEFTSDEgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RyaWN0aW5nIGJpc2VjdGlvbiBvbiBvbmUgZGlyIGFuZCBhIGZpbGUnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCBIRUFEICRIQVNIMSAtLSBkaXIxIGhlbGxvICYmCisJcGFyYTQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHBhcmE0IiA9ICIkUEFSQV9IQVNINCIgJiYKKwlnaXQgYmlzZWN0IGJhZCAmJgorCWhhc2gzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRoYXNoMyIgPSAiJEhBU0gzIiAmJgorCWdpdCBiaXNlY3QgZ29vZCAmJgorCWhhc2g0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRoYXNoNCIgPSAiJEhBU0g0IiAmJgorCWdpdCBiaXNlY3QgZ29vZCAmJgorCXBhcmExPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRwYXJhMSIgPSAiJFBBUkFfSEFTSDEiICYmCisJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkUEFSQV9IQVNINCBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2tpcHBpbmcgYXdheSBmcm9tIHNraXBwZWQgY29tbWl0JyAnCisJZ2l0IGJpc2VjdCBzdGFydCAkUEFSQV9IQVNINyAkSEFTSDEgJiYKKwlwYXJhND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcGFyYTQiID0gIiRQQVJBX0hBU0g0IiAmJgorICAgICAgICBnaXQgYmlzZWN0IHNraXAgJiYKKwloYXNoNz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkaGFzaDciID0gIiRIQVNINyIgJiYKKyAgICAgICAgZ2l0IGJpc2VjdCBza2lwICYmCisJcGFyYTM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHBhcmEzIiA9ICIkUEFSQV9IQVNIMyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3Jpbmcgb3V0IHdoZW4gdXNpbmcgYmFkIHBhdGggcGFyYW1ldGVycycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJFBBUkFfSEFTSDcgJEhBU0gxIC0tIGZvb2JhciAyPiBlcnJvci50eHQgJiYKKwl0ZXN0X2kxOG5ncmVwICJiYWQgcGF0aCBwYXJhbWV0ZXJzIiBlcnJvci50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBiaXNlY3Rpb24gb24gYmFyZSByZXBvIC0gLS1uby1jaGVja291dCBzcGVjaWZpZWQnICcKKwlnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZS5ub2NoZWNrb3V0ICYmCisJKAorCQljZCBiYXJlLm5vY2hlY2tvdXQgJiYKKwkJZ2l0IGJpc2VjdCBzdGFydCAtLW5vLWNoZWNrb3V0ICYmCisJCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwkJZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCisJCWdpdCBiaXNlY3QgcnVuIGV2YWwgXAorCQkJInRlc3QgXCQoZ2l0IHJldi1saXN0IEJJU0VDVF9IRUFEIF4kSEFTSDIgLS1tYXgtY291bnQ9MSB8IHdjIC1sKSA9IDAiIFwKKwkJCT4uLi9ub2NoZWNrb3V0LmxvZworCSkgJiYKKwlncmVwICIkSEFTSDMgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG5vY2hlY2tvdXQubG9nCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBiaXNlY3Rpb24gb24gYmFyZSByZXBvIC0gLS1uby1jaGVja291dCBkZWZhdWx0ZWQnICcKKwlnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZS5kZWZhdWx0ZWQgJiYKKwkoCisJCWNkIGJhcmUuZGVmYXVsdGVkICYmCisJCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwkJZ2l0IGJpc2VjdCBnb29kICRIQVNIMSAmJgorCQlnaXQgYmlzZWN0IGJhZCAkSEFTSDQgJiYKKwkJZ2l0IGJpc2VjdCBydW4gZXZhbCBcCisJCQkidGVzdCBcJChnaXQgcmV2LWxpc3QgQklTRUNUX0hFQUQgXiRIQVNIMiAtLW1heC1jb3VudD0xIHwgd2MgLWwpID0gMCIgXAorCQkJPi4uL2RlZmF1bHRlZC5sb2cKKwkpICYmCisJZ3JlcCAiJEhBU0gzIGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBkZWZhdWx0ZWQubG9nCisnCisKKyMKKyMgVGhpcyBjcmVhdGVzIGEgYnJva2VuIGJyYW5jaCB3aGljaCBjYW5ub3QgYmUgY2hlY2tlZCBvdXQgYmVjYXVzZQorIyB0aGUgdHJlZSBjcmVhdGVkIGhhcyBiZWVuIGRlbGV0ZWQuCisjCisjIEgxLUgyLUgzLUg0LUg1LUg2LUg3ICA8LS1vdGhlcgorIyAgICAgICAgICAgIFwKKyMgICAgICAgICAgICAgUzUtUzYnLVM3Jy1TOCctUzkgIDwtLWJyb2tlbgorIworIyBDb21taXRzIG1hcmtlZCB3aXRoICcgaGF2ZSBhIG1pc3NpbmcgdHJlZS4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jyb2tlbiBicmFuY2ggY3JlYXRpb24nICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyb2tlbiAkSEFTSDQgJiYKKwlnaXQgdGFnIEJST0tFTl9IQVNINCAkSEFTSDQgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjUoYnJva2VuKTogZmlyc3QgbGluZSBvbiBhIGJyb2tlbiBicmFuY2giIGhlbGxvMiAmJgorCWdpdCB0YWcgQlJPS0VOX0hBU0g1ICYmCisJbWtkaXIgbWlzc2luZyAmJgorCTo+IG1pc3NpbmcvTUlTU0lORyAmJgorCWdpdCBhZGQgbWlzc2luZy9NSVNTSU5HICYmCisJZ2l0IGNvbW1pdCAtbSAiNihicm9rZW4pOiBBZGRlZCBmaWxlIHRoYXQgd2lsbCBiZSBkZWxldGVkIiAmJgorCWdpdCB0YWcgQlJPS0VOX0hBU0g2ICYmCisJZGVsZXRlZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDptaXNzaW5nKSAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiNyhicm9rZW4pOiBzZWNvbmQgbGluZSBvbiBhIGJyb2tlbiBicmFuY2giIGhlbGxvMiAmJgorCWdpdCB0YWcgQlJPS0VOX0hBU0g3ICYmCisJYWRkX2xpbmVfaW50b19maWxlICI4KGJyb2tlbik6IHRoaXJkIGxpbmUgb24gYSBicm9rZW4gYnJhbmNoIiBoZWxsbzIgJiYKKwlnaXQgdGFnIEJST0tFTl9IQVNIOCAmJgorCWdpdCBybSBtaXNzaW5nL01JU1NJTkcgJiYKKwlnaXQgY29tbWl0IC1tICI5KGJyb2tlbik6IFJlbW92ZSBtaXNzaW5nIGZpbGUiICYmCisJZ2l0IHRhZyBCUk9LRU5fSEFTSDkgJiYKKwlybSAuZ2l0L29iamVjdHMvJCh0ZXN0X29pZF90b19wYXRoICRkZWxldGVkKQorJworCitlY2hvICIiID4gZXhwZWN0ZWQub2sKK2NhdCA+IGV4cGVjdGVkLm1pc3NpbmctdHJlZS5kZWZhdWx0IDw8RU9GCitmYXRhbDogdW5hYmxlIHRvIHJlYWQgdHJlZSAkZGVsZXRlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBmYWlscyBpZiB0cmVlIGlzIGJyb2tlbiBvbiBzdGFydCBjb21taXQnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCBCUk9LRU5fSEFTSDcgQlJPS0VOX0hBU0g0IDI+ZXJyb3IudHh0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQubWlzc2luZy10cmVlLmRlZmF1bHQgZXJyb3IudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBmYWlscyBpZiB0cmVlIGlzIGJyb2tlbiBvbiB0cmlhbCBjb21taXQnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCBCUk9LRU5fSEFTSDkgQlJPS0VOX0hBU0g0IDI+ZXJyb3IudHh0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBicm9rZW4gJiYKKwlnaXQgY2hlY2tvdXQgYnJva2VuICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQubWlzc2luZy10cmVlLmRlZmF1bHQgZXJyb3IudHh0CisnCisKK2NoZWNrX3NhbWUoKQoreworCWVjaG8gIkNoZWNraW5nICQxIGlzIHRoZSBzYW1lIGFzICQyIiAmJgorCXRlc3RfY21wX3JldiAiJDEiICIkMiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0OiAtLW5vLWNoZWNrb3V0IC0gc3RhcnQgY29tbWl0IGJhZCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IEJST0tFTl9IQVNINyBCUk9LRU5fSEFTSDQgLS1uby1jaGVja291dCAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g2IEJJU0VDVF9IRUFEICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Q6IC0tbm8tY2hlY2tvdXQgLSB0cmlhbCBjb21taXQgYmFkJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgYnJva2VuIEJST0tFTl9IQVNINCAtLW5vLWNoZWNrb3V0ICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDYgQklTRUNUX0hFQUQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdDogLS1uby1jaGVja291dCAtIHRhcmdldCBiZWZvcmUgYnJlYWthZ2UnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCBicm9rZW4gQlJPS0VOX0hBU0g0IC0tbm8tY2hlY2tvdXQgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNINiBCSVNFQ1RfSEVBRCAmJgorCWdpdCBiaXNlY3QgYmFkIEJJU0VDVF9IRUFEICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDUgQklTRUNUX0hFQUQgJiYKKwlnaXQgYmlzZWN0IGJhZCBCSVNFQ1RfSEVBRCAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g1IGJpc2VjdC9iYWQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdDogLS1uby1jaGVja291dCAtIHRhcmdldCBpbiBicmVha2FnZScgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IGJyb2tlbiBCUk9LRU5fSEFTSDQgLS1uby1jaGVja291dCAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g2IEJJU0VDVF9IRUFEICYmCisJZ2l0IGJpc2VjdCBiYWQgQklTRUNUX0hFQUQgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNINSBCSVNFQ1RfSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgZ29vZCBCSVNFQ1RfSEVBRCAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g2IGJpc2VjdC9iYWQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdDogLS1uby1jaGVja291dCAtIHRhcmdldCBhZnRlciBicmVha2FnZScgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IGJyb2tlbiBCUk9LRU5fSEFTSDQgLS1uby1jaGVja291dCAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g2IEJJU0VDVF9IRUFEICYmCisJZ2l0IGJpc2VjdCBnb29kIEJJU0VDVF9IRUFEICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDggQklTRUNUX0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGdvb2QgQklTRUNUX0hFQUQgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNIOSBiaXNlY3QvYmFkICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Q6IGRlbW9uc3RyYXRlIGlkZW50aWZpY2F0aW9uIG9mIGRhbWFnZSBib3VuZGFyeScgIgorCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgYnJva2VuICYmCisJZ2l0IGJpc2VjdCBzdGFydCBicm9rZW4gbWFzdGVyIC0tbm8tY2hlY2tvdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHJ1biBcIlwkU0hFTExfUEFUSFwiIC1jICcKKwkJR09PRD1cJChnaXQgZm9yLWVhY2gtcmVmIFwiLS1mb3JtYXQ9JShvYmplY3RuYW1lKVwiIHJlZnMvYmlzZWN0L2dvb2QtKikgJiYKKwkJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBCSVNFQ1RfSEVBRCAtLW5vdCBcJEdPT0QgPnRtcC5cJFwkICYmCisJCWdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgPi9kZXYvbnVsbCA8IHRtcC5cJFwkCisJCXJjPVwkPworCQlybSAtZiB0bXAuXCRcJAorCQl0ZXN0IFwkcmMgPSAwJyAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g2IGJpc2VjdC9iYWQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisiCisKK2NhdCA+IGV4cGVjdGVkLmJpc2VjdC1sb2cgPDxFT0YKKyMgYmFkOiBbJEhBU0g0XSBBZGQgPDQ6IENpYW8gZm9yIG5vdz4gaW50byA8aGVsbG8+LgorIyBnb29kOiBbJEhBU0gyXSBBZGQgPDI6IEEgbmV3IGRheSBmb3IgZ2l0PiBpbnRvIDxoZWxsbz4uCitnaXQgYmlzZWN0IHN0YXJ0ICckSEFTSDQnICckSEFTSDInCisjIGdvb2Q6IFskSEFTSDNdIEFkZCA8MzogQW5vdGhlciBuZXcgZGF5IGZvciBnaXQ+IGludG8gPGhlbGxvPi4KK2dpdCBiaXNlY3QgZ29vZCAkSEFTSDMKKyMgZmlyc3QgYmFkIGNvbW1pdDogWyRIQVNINF0gQWRkIDw0OiBDaWFvIGZvciBub3c+IGludG8gPGhlbGxvPi4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgbG9nOiBzdWNjZXNzZnVsIHJlc3VsdCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCAkSEFTSDIgJiYKKwlnaXQgYmlzZWN0IGdvb2QgJiYKKwlnaXQgYmlzZWN0IGxvZyA+YmlzZWN0LWxvZy50eHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5iaXNlY3QtbG9nIGJpc2VjdC1sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCitjYXQgPiBleHBlY3RlZC5iaXNlY3Qtc2tpcC1sb2cgPDxFT0YKKyMgYmFkOiBbJEhBU0g0XSBBZGQgPDQ6IENpYW8gZm9yIG5vdz4gaW50byA8aGVsbG8+LgorIyBnb29kOiBbJEhBU0gyXSBBZGQgPDI6IEEgbmV3IGRheSBmb3IgZ2l0PiBpbnRvIDxoZWxsbz4uCitnaXQgYmlzZWN0IHN0YXJ0ICckSEFTSDQnICckSEFTSDInCisjIHNraXA6IFskSEFTSDNdIEFkZCA8MzogQW5vdGhlciBuZXcgZGF5IGZvciBnaXQ+IGludG8gPGhlbGxvPi4KK2dpdCBiaXNlY3Qgc2tpcCAkSEFTSDMKKyMgb25seSBza2lwcGVkIGNvbW1pdHMgbGVmdCB0byB0ZXN0CisjIHBvc3NpYmxlIGZpcnN0IGJhZCBjb21taXQ6IFskSEFTSDRdIEFkZCA8NDogQ2lhbyBmb3Igbm93PiBpbnRvIDxoZWxsbz4uCisjIHBvc3NpYmxlIGZpcnN0IGJhZCBjb21taXQ6IFskSEFTSDNdIEFkZCA8MzogQW5vdGhlciBuZXcgZGF5IGZvciBnaXQ+IGludG8gPGhlbGxvPi4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgbG9nOiBvbmx5IHNraXAgY29tbWl0cyBsZWZ0JyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc2tpcCAmJgorCWdpdCBiaXNlY3QgbG9nID5iaXNlY3Qtc2tpcC1sb2cudHh0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuYmlzZWN0LXNraXAtbG9nIGJpc2VjdC1za2lwLWxvZy50eHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgYmlzZWN0IGJhZCBIRUFEIiBiZWhhdmVzIGFzICJnaXQgYmlzZWN0IGJhZCInICcKKwlnaXQgY2hlY2tvdXQgcGFyYWxsZWwgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IEhFQUQgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBnb29kIEhFQUQgJiYKKwlnaXQgYmlzZWN0IGJhZCBIRUFEICYmCisJdGVzdCAiJEhBU0g2IiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0cyB3aXRoIG9ubHkgb25lIG5ldycgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBuZXcgJEhBU0g0ICYmCisJZ2l0IGJpc2VjdCBuZXh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBkb2VzIG5vdCBzdGFydCB3aXRoIG9ubHkgb25lIG9sZCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBvbGQgJEhBU0gxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBuZXh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydCB3aXRoIG9uZSBuZXcgYW5kIG9sZCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBvbGQgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBuZXcgJEhBU0g0ICYmCisJZ2l0IGJpc2VjdCBuZXcgJiYKKwlnaXQgYmlzZWN0IG5ldyA+YmlzZWN0X3Jlc3VsdCAmJgorCWdyZXAgIiRIQVNIMiBpcyB0aGUgZmlyc3QgbmV3IGNvbW1pdCIgYmlzZWN0X3Jlc3VsdCAmJgorCWdpdCBiaXNlY3QgbG9nID5sb2dfdG9fcmVwbGF5LnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlcGxheSB3aXRoIG9sZCBhbmQgbmV3JyAnCisJZ2l0IGJpc2VjdCByZXBsYXkgbG9nX3RvX3JlcGxheS50eHQgPmJpc2VjdF9yZXN1bHQgJiYKKwlncmVwICIkSEFTSDIgaXMgdGhlIGZpcnN0IG5ldyBjb21taXQiIGJpc2VjdF9yZXN1bHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCByZXBsYXkgd2l0aCBDUkxGIGxvZycgJworCWFwcGVuZF9jciA8bG9nX3RvX3JlcGxheS50eHQgPmxvZ190b19yZXBsYXlfY3JsZi50eHQgJiYKKwlnaXQgYmlzZWN0IHJlcGxheSBsb2dfdG9fcmVwbGF5X2NybGYudHh0ID5iaXNlY3RfcmVzdWx0X2NybGYgJiYKKwlncmVwICIkSEFTSDIgaXMgdGhlIGZpcnN0IG5ldyBjb21taXQiIGJpc2VjdF9yZXN1bHRfY3JsZiAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGNhbm5vdCBtaXggb2xkL25ldyBhbmQgZ29vZC9iYWQnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBvbGQgJEhBU0gxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCB0ZXJtcyBuZWVkcyAwIG9yIDEgYXJndW1lbnQnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCB0ZXJtcyBvbmx5LW9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgdGVybXMgMSAyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCB0ZXJtcyAyPmFjdHVhbCAmJgorCWVjaG8gImVycm9yOiBubyB0ZXJtcyBkZWZpbmVkIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCB0ZXJtcyBzaG93cyBnb29kL2JhZCBhZnRlciBzdGFydCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IEhFQUQgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCB0ZXJtcyAtLXRlcm0tZ29vZCA+YWN0dWFsICYmCisJZWNobyBnb29kID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBiaXNlY3QgdGVybXMgLS10ZXJtLWJhZCA+YWN0dWFsICYmCisJZWNobyBiYWQgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydCB3aXRoIG9uZSB0ZXJtMSBhbmQgdGVybTInICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAtLXRlcm0tb2xkIHRlcm0yIC0tdGVybS1uZXcgdGVybTEgJiYKKwlnaXQgYmlzZWN0IHRlcm0yICRIQVNIMSAmJgorCWdpdCBiaXNlY3QgdGVybTEgJEhBU0g0ICYmCisJZ2l0IGJpc2VjdCB0ZXJtMSAmJgorCWdpdCBiaXNlY3QgdGVybTEgPmJpc2VjdF9yZXN1bHQgJiYKKwlncmVwICIkSEFTSDIgaXMgdGhlIGZpcnN0IHRlcm0xIGNvbW1pdCIgYmlzZWN0X3Jlc3VsdCAmJgorCWdpdCBiaXNlY3QgbG9nID5sb2dfdG9fcmVwbGF5LnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlcGxheSB3aXRoIHRlcm0xIGFuZCB0ZXJtMicgJworCWdpdCBiaXNlY3QgcmVwbGF5IGxvZ190b19yZXBsYXkudHh0ID5iaXNlY3RfcmVzdWx0ICYmCisJZ3JlcCAiJEhBU0gyIGlzIHRoZSBmaXJzdCB0ZXJtMSBjb21taXQiIGJpc2VjdF9yZXN1bHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydCB0ZXJtMSB0ZXJtMicgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IC0tdGVybS1uZXcgdGVybTEgLS10ZXJtLW9sZCB0ZXJtMiAkSEFTSDQgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCB0ZXJtMSAmJgorCWdpdCBiaXNlY3QgdGVybTEgPmJpc2VjdF9yZXN1bHQgJiYKKwlncmVwICIkSEFTSDIgaXMgdGhlIGZpcnN0IHRlcm0xIGNvbW1pdCIgYmlzZWN0X3Jlc3VsdCAmJgorCWdpdCBiaXNlY3QgbG9nID5sb2dfdG9fcmVwbGF5LnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGNhbm5vdCBtaXggdGVybXMnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAtLXRlcm0tZ29vZCB0ZXJtMSAtLXRlcm0tYmFkIHRlcm0yICRIQVNINCAkSEFTSDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGJhZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgZ29vZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgbmV3ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBvbGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHRlcm1zIHJlamVjdHMgaW52YWxpZCB0ZXJtcycgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0IC0tdGVybS1nb29kIGludmFsaWQuLnRlcm0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHRlcm1zIC0tdGVybS1iYWQgaW52YWxpZC4udGVybSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgdGVybXMgLS10ZXJtLWdvb2QgYmFkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCB0ZXJtcyAtLXRlcm0tZ29vZCBvbGQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHRlcm1zIC0tdGVybS1nb29kIHNraXAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHRlcm1zIC0tdGVybS1nb29kIHJlc2V0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9CSVNFQ1RfVEVSTVMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0IC0tdGVybS0qIGRvZXMgc3RvcmUgdGVybXMnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAtLXRlcm0tYmFkPW9uZSAtLXRlcm0tZ29vZD10d28gJiYKKwlnaXQgYmlzZWN0IHRlcm1zID5hY3R1YWwgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCVlvdXIgY3VycmVudCB0ZXJtcyBhcmUgdHdvIGZvciB0aGUgb2xkIHN0YXRlCisJYW5kIG9uZSBmb3IgdGhlIG5ldyBzdGF0ZS4KKwlFT0YKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IGJpc2VjdCB0ZXJtcyAtLXRlcm0tYmFkID5hY3R1YWwgJiYKKwllY2hvIG9uZSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgYmlzZWN0IHRlcm1zIC0tdGVybS1nb29kID5hY3R1YWwgJiYKKwllY2hvIHR3byA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0IHRha2VzIG9wdGlvbnMgYW5kIHJldnMgaW4gYW55IG9yZGVyJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgLS10ZXJtLWdvb2Qgb25lICRIQVNINCBcCisJCS0tdGVybS1nb29kIHR3byAtLXRlcm0tYmFkIGJhZC10ZXJtIFwKKwkJJEhBU0gxIC0tdGVybS1nb29kIHRocmVlIC0tICYmCisJKGdpdCBiaXNlY3QgdGVybXMgLS10ZXJtLWJhZCAmJiBnaXQgYmlzZWN0IHRlcm1zIC0tdGVybS1nb29kKSA+YWN0dWFsICYmCisJcHJpbnRmICIlc1xuJXNcbiIgYmFkLXRlcm0gdGhyZWUgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBiaXNlY3QgcmVzZXQgY2xlYW5zIGJpc2VjdGlvbiBzdGF0ZSBwcm9wZXJseScgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBnb29kICRIQVNIMSAmJgorCWdpdCBiaXNlY3QgYmFkICRIQVNINCAmJgorCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwl0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgInJlZnMvYmlzZWN0LyoiKSIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJEdJVF9ESVIvQklTRUNUX0VYUEVDVEVEX1JFViIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJEdJVF9ESVIvQklTRUNUX0FOQ0VTVE9SU19PSyIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJEdJVF9ESVIvQklTRUNUX0xPRyIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJEdJVF9ESVIvQklTRUNUX1JVTiIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJEdJVF9ESVIvQklTRUNUX1RFUk1TIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICIkR0lUX0RJUi9oZWFkLW5hbWUiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgIiRHSVRfRElSL0JJU0VDVF9IRUFEIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzMS1tZXJnZS1maWxlbW9kZS5zaCBiL3QvdDYwMzEtbWVyZ2UtZmlsZW1vZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODc3NDFlZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMzEtbWVyZ2UtZmlsZW1vZGUuc2gKQEAgLTAsMCArMSwxMDAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnZTogaGFuZGxlIGZpbGUgbW9kZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgbW9kZSBjaGFuZ2UgaW4gb25lIGJyYW5jaCcgJworCTogPmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBjaGVja291dCAtYiBhMSBtYXN0ZXIgJiYKKwk6ID5kdW1teSAmJgorCWdpdCBhZGQgZHVtbXkgJiYKKwlnaXQgY29tbWl0IC1tIGEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYjEgbWFzdGVyICYmCisJdGVzdF9jaG1vZCAreCBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tIGIxCisnCisKK2RvX29uZV9tb2RlICgpIHsKKwlzdHJhdGVneT0kMQorCXVzPSQyCisJdGhlbT0kMworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlc29sdmUgc2luZ2xlIG1vZGUgY2hhbmdlICgkc3RyYXRlZ3ksICR1cykiICcKKwkJZ2l0IGNoZWNrb3V0IC1mICR1cyAmJgorCQlnaXQgbWVyZ2UgLXMgJHN0cmF0ZWd5ICR0aGVtICYmCisJCWdpdCBscy1maWxlcyAtcyBmaWxlMSB8IGdyZXAgXjEwMDc1NQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgInZlcmlmeSBleGVjdXRhYmxlIGJpdCBvbiBmaWxlICgkc3RyYXRlZ3ksICR1cykiICcKKwkJdGVzdCAteCBmaWxlMQorCScKK30KKworZG9fb25lX21vZGUgcmVjdXJzaXZlIGExIGIxCitkb19vbmVfbW9kZSByZWN1cnNpdmUgYjEgYTEKK2RvX29uZV9tb2RlIHJlc29sdmUgYTEgYjEKK2RvX29uZV9tb2RlIHJlc29sdmUgYjEgYTEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIG1vZGUgY2hhbmdlIGluIGJvdGggYnJhbmNoZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYTIgbWFzdGVyICYmCisJOiA+ZmlsZTIgJiYKKwlIPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUyKSAmJgorCXRlc3RfY2htb2QgK3ggZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIGEyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGIyIG1hc3RlciAmJgorCTogPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gYjIgJiYKKwl7CisJCWVjaG8gIjEwMDc1NSAkSCAyCWZpbGUyIgorCQllY2hvICIxMDA2NDQgJEggMwlmaWxlMiIKKwl9ID5leHBlY3QKKycKKworZG9fYm90aF9tb2RlcyAoKSB7CisJc3RyYXRlZ3k9JDEKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZXRlY3QgY29uZmxpY3Qgb24gZG91YmxlIG1vZGUgY2hhbmdlICgkc3RyYXRlZ3kpIiAnCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1mIGEyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyAkc3RyYXRlZ3kgYjIgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlnaXQgbHMtZmlsZXMgLXMgZmlsZTIgfCBncmVwIF4xMDA3NTUKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICJ2ZXJpZnkgZXhlY3V0YWJsZSBiaXQgb24gZmlsZSAoJHN0cmF0ZWd5KSIgJworCQl0ZXN0IC14IGZpbGUyCisJJworfQorCisjIGJvdGggc2lkZXMgYXJlIGVxdWl2YWxlbnQsIHNvIG5vIG5lZWQgdG8gcnVuIGJvdGggd2F5cworZG9fYm90aF9tb2RlcyByZWN1cnNpdmUKK2RvX2JvdGhfbW9kZXMgcmVzb2x2ZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZGVsZXRlL21vZGVjaGFuZ2Ugc2NlbmFyaW8nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGRlbGV0aW9uIG1hc3RlciAmJgorCWdpdCBybSBmaWxlMSAmJgorCWdpdCBjb21taXQgLW0gZGVsZXRpb24KKycKKworZG9fZGVsZXRlX21vZGVjaGFuZ2UgKCkgeworCXN0cmF0ZWd5PSQxCisJdXM9JDIKKwl0aGVtPSQzCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZGV0ZWN0IGRlbGV0ZS9tb2RlY2hhbmdlIGNvbmZsaWN0ICgkc3RyYXRlZ3ksICR1cykiICcKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgJHVzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyAkc3RyYXRlZ3kgJHRoZW0KKwknCit9CisKK2RvX2RlbGV0ZV9tb2RlY2hhbmdlIHJlY3Vyc2l2ZSBiMSBkZWxldGlvbgorZG9fZGVsZXRlX21vZGVjaGFuZ2UgcmVjdXJzaXZlIGRlbGV0aW9uIGIxCitkb19kZWxldGVfbW9kZWNoYW5nZSByZXNvbHZlIGIxIGRlbGV0aW9uCitkb19kZWxldGVfbW9kZWNoYW5nZSByZXNvbHZlIGRlbGV0aW9uIGIxCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzMi1tZXJnZS1sYXJnZS1yZW5hbWUuc2ggYi90L3Q2MDMyLW1lcmdlLWxhcmdlLXJlbmFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MDc3NzM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjAzMi1tZXJnZS1sYXJnZS1yZW5hbWUuc2gKQEAgLTAsMCArMSwxMDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnaW5nIHdpdGggbGFyZ2UgcmVuYW1lIG1hdHJpeCcKKy4gLi90ZXN0LWxpYi5zaAorCitjb3VudCgpIHsKKwlpPTEKKwl3aGlsZSB0ZXN0ICRpIC1sZSAkMTsgZG8KKwkJZWNobyAkaQorCQlpPSQoKCRpICsgMSkpCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAoaW5pdGlhbCknICcKKwl0b3VjaCBmaWxlICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsCisnCisKK21ha2VfdGV4dCgpIHsKKwllY2hvICQxOiAkMgorCWZvciBpIGluICQoY291bnQgMjApOyBkbworCQllY2hvICQxOiAkaQorCWRvbmUKKwllY2hvICQxOiAkMworfQorCit0ZXN0X3JlbmFtZSgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZW5hbWUgKCQxLCAkMikiICcKKwluPSckMScgJiYKKwlleHBlY3Q9JyQyJyAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCB0ZXN0JG4gJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlmb3IgaSBpbiAkKGNvdW50ICRuKTsgZG8KKwkJbWFrZV90ZXh0ICRpIGluaXRpYWwgaW5pdGlhbCA+JGkKKwlkb25lICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBhZGQ9JG4gJiYKKwlmb3IgaSBpbiAkKGNvdW50ICRuKTsgZG8KKwkJbWFrZV90ZXh0ICRpIGNoYW5nZWQgaW5pdGlhbCA+JGkKKwlkb25lICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBjaGFuZ2U9JG4gJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCRuIEhFQUReICYmCisJZm9yIGkgaW4gJChjb3VudCAkbik7IGRvCisJCWdpdCBybSAkaQorCQltYWtlX3RleHQgJGkgaW5pdGlhbCBjaGFuZ2VkID4kaS5tb3ZlZAorCWRvbmUgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGNoYW5nZStyZW5hbWU9JG4gJiYKKwljYXNlICIkZXhwZWN0IiBpbgorCQlvaykgZ2l0IG1lcmdlIG1hc3RlciA7OworCQkgKikgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciA7OworCWVzYWMKKwknCit9CisKK3Rlc3RfcmVuYW1lIDUgb2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IGRpZmYucmVuYW1lbGltaXQgdG8gNCcgJworCWdpdCBjb25maWcgZGlmZi5yZW5hbWVsaW1pdCA0CisnCit0ZXN0X3JlbmFtZSA0IG9rCit0ZXN0X3JlbmFtZSA1IGZhaWwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IG1lcmdlLnJlbmFtZWxpbWl0IHRvIDUnICcKKwlnaXQgY29uZmlnIG1lcmdlLnJlbmFtZWxpbWl0IDUKKycKK3Rlc3RfcmVuYW1lIDUgb2sKK3Rlc3RfcmVuYW1lIDYgZmFpbAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBsYXJnZSBzaW1wbGUgcmVuYW1lJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IG1lcmdlLnJlbmFtZWxpbWl0ICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYucmVuYW1lbGltaXQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWZvciBpIGluICQoY291bnQgMjAwKTsgZG8KKwkJbWFrZV90ZXh0IGZvbyBiYXIgYmF6ID4kaQorCWRvbmUgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGNyZWF0ZS1maWxlcyAmJgorCisJZ2l0IGJyYW5jaCBzaW1wbGUtY2hhbmdlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpbXBsZS1yZW5hbWUgJiYKKworCW1rZGlyIGJ1aWx0aW4gJiYKKwlnaXQgbXYgWzAtOV0qIGJ1aWx0aW4vICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWVkICYmCisKKwlnaXQgY2hlY2tvdXQgc2ltcGxlLWNoYW5nZSAmJgorCT51bnJlbGF0ZWQtY2hhbmdlICYmCisJZ2l0IGFkZCB1bnJlbGF0ZWQtY2hhbmdlICYmCisJZ2l0IGNvbW1pdCAtbSB1bnJlbGF0ZWQtY2hhbmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hc3NpdmUgc2ltcGxlIHJlbmFtZSBkb2VzIG5vdCBzcGFtIGFkZGVkIGZpbGVzJyAnCisJc2FuZV91bnNldCBHSVRfTUVSR0VfVkVSQk9TSVRZICYmCisJZ2l0IG1lcmdlIC0tbm8tc3RhdCBzaW1wbGUtcmVuYW1lIHwgZ3JlcCAtdiBSZW1vdmluZyA+b3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50IC1sdCA1IG91dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMzMtbWVyZ2UtY3JsZi5zaCBiL3QvdDYwMzMtbWVyZ2UtY3JsZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lOGQ2NWVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAzMy1tZXJnZS1jcmxmLnNoCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnZSBjb25mbGljdCBpbiBjcmxmIHJlcG8KKworCQliLS0tTQorCSAgICAgICAvICAgLworCWluaXRpYWwtLS1hCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZWNobyBmb28gfCBhcHBlbmRfY3IgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIiAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCWVjaG8gbGluZSBmcm9tIGEgfCBhcHBlbmRfY3IgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbGluZSBmcm9tIGEiIGZpbGUgJiYKKwlnaXQgdGFnIGEgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWVjaG8gbGluZSBmcm9tIGIgfCBhcHBlbmRfY3IgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbGluZSBmcm9tIGIiIGZpbGUgJiYKKwlnaXQgdGFnIGIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrICJvdXJzIiBpcyBDUkxGJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IG1lcmdlIHNpZGUgLXMgb3VycyAmJgorCWNhdCBmaWxlIHwgcmVtb3ZlX2NyIHwgYXBwZW5kX2NyID5maWxlLnRlbXAgJiYKKwl0ZXN0X2NtcCBmaWxlIGZpbGUudGVtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayB0aGF0IGNvbmZsaWN0IGZpbGUgaXMgQ1JMRicgJworCWdpdCByZXNldCAtLWhhcmQgYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzaWRlICYmCisJY2F0IGZpbGUgfCByZW1vdmVfY3IgfCBhcHBlbmRfY3IgPmZpbGUudGVtcCAmJgorCXRlc3RfY21wIGZpbGUgZmlsZS50ZW1wCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzNC1tZXJnZS1yZW5hbWUtbm9jcnVmdC5zaCBiL3QvdDYwMzQtbWVyZ2UtcmVuYW1lLW5vY3J1ZnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTI1ZTczMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMzQtbWVyZ2UtcmVuYW1lLW5vY3J1ZnQuc2gKQEAgLTAsMCArMSw5NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J01lcmdlLXJlY3Vyc2l2ZSBtZXJnaW5nIHJlbmFtZXMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgPkEgPDwtXEVPRiAmJgorCWEgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisJYiBiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKKwljIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworCWQgZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkCisJZSBlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUKKwlmIGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgorCWcgZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnCisJaCBoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGgKKwlpIGlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaQorCWogampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqCisJayBra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2sKKwlsIGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbAorCW0gbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tCisJbiBubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm4KKwlvIG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbworCUVPRgorCisJY2F0ID5NIDw8LVxFT0YgJiYKKwlBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorCUIgQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCCisJQyBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MKKwlEIERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERAorCUUgRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFCisJRiBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKKwlHIEdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRworCUggSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhICisJSSBJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUkKKwlKIEpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSgorCUsgS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLCisJTCBMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwKKwlNIE1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQorCU4gTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCisJTyBPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08KKwlFT0YKKworCWdpdCBhZGQgQSBNICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBoYXMgQSBhbmQgTSIgJiYKKwlnaXQgYnJhbmNoIHdoaXRlICYmCisJZ2l0IGJyYW5jaCByZWQgJiYKKwlnaXQgYnJhbmNoIGJsdWUgJiYKKworCWdpdCBjaGVja291dCB3aGl0ZSAmJgorCXNlZCAtZSAiL15nIC9zLy4qL2cgOiB3aGl0ZSBjaGFuZ2VzIGEgbGluZS8iIDxBID5CICYmCisJc2VkIC1lICIvXkcgL3MvLiovRyA6IGNvbG9yZWQgYnJhbmNoIGNoYW5nZXMgYSBsaW5lLyIgPE0gPk4gJiYKKwlybSAtZiBBIE0gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIEEgQiBNIE4gJiYKKwlnaXQgY29tbWl0IC1tICJ3aGl0ZSByZW5hbWVzIEEtPkIsIE0tPk4iICYmCisKKwlnaXQgY2hlY2tvdXQgcmVkICYmCisJZWNobyBjcmVhdGVkIGJ5IHJlZCA+UiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgUiAmJgorCWdpdCBjb21taXQgLW0gInJlZCBjcmVhdGVzIFIiICYmCisKKwlnaXQgY2hlY2tvdXQgYmx1ZSAmJgorCXNlZCAtZSAiL15vIC9zLy4qL2cgOiBibHVlIGNoYW5nZXMgYSBsaW5lLyIgPEEgPkIgJiYKKwlybSAtZiBBICYmCisJbXYgQiBBICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBBICYmCisJZ2l0IGNvbW1pdCAtbSAiYmx1ZSBtb2RpZnkgQSIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKworIyBUaGlzIHRlc3QgYnJva2UgaW4gNjVhYzZlOWMzZjQ3ODA3Y2I2MDNhZjA3YTZhOWUxYTQzYmMxMTlhZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugd2hpdGUgaW50byByZWQgKEEtPkIsTS0+TiknICcKKwlnaXQgY2hlY2tvdXQgLWIgcmVkLXdoaXRlIHJlZCAmJgorCWdpdCBtZXJnZSB3aGl0ZSAmJgorCWdpdCB3cml0ZS10cmVlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgQiAmJgorCXRlc3RfcGF0aF9pc19maWxlIE4gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBSICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgQSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIE0KKycKKworIyBUaGlzIHRlc3QgYnJva2UgaW4gODM3MTIzNGVjYWFmNmUxNGZlM2YyMDgyYTg1NWVmZjFiYmQ3OWFlOQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYmx1ZSBpbnRvIHdoaXRlIChBLT5CLCBtb2QgQSwgQSB1bnRyYWNrZWQpJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHdoaXRlLWJsdWUgd2hpdGUgJiYKKwllY2hvIGRpcnR5ID5BICYmCisJZ2l0IG1lcmdlIGJsdWUgJiYKKwlnaXQgd3JpdGUtdHJlZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIEEgJiYKKwllY2hvIGRpcnR5ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgQSAmJgorCXRlc3RfcGF0aF9pc19maWxlIEIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBOICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgTQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMzUtbWVyZ2UtZGlyLXRvLXN5bWxpbmsuc2ggYi90L3Q2MDM1LW1lcmdlLWRpci10by1zeW1saW5rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJlZGRjYzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDM1LW1lcmdlLWRpci10by1zeW1saW5rLnNoCkBAIC0wLDAgKzEsMTcyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2luZyB3aGVuIGEgZGlyZWN0b3J5IHdhcyByZXBsYWNlZCB3aXRoIGEgc3ltbGluaycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYSBjb21taXQgd2hlcmUgZGlyIGEvYiBjaGFuZ2VkIHRvIHN5bWxpbmsnICcKKwlta2RpciAtcCBhL2IvYyBhL2ItMi9jICYmCisJPiBhL2IvYy9kICYmCisJPiBhL2ItMi9jL2QgJiYKKwk+IGEveCAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwlnaXQgdGFnIHN0YXJ0ICYmCisJcm0gLXJmIGEvYiAmJgorCWdpdCBhZGQgLUEgJiYKKwl0ZXN0X2xuX3NfYWRkIGItMiBhL2IgJiYKKwlnaXQgY29tbWl0IC1tICJkaXIgdG8gc3ltbGluayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgZG9lcyBub3QgY2xvYmJlciB1bnRyYWNrZWQgc3ltbGluaycgJworCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBybSAtLWNhY2hlZCBhL2IgJiYKKwlnaXQgY29tbWl0IC1tICJ1bnRyYWNrZWQgc3ltbGluayByZW1haW5zIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBzdGFydF4wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2EvYi0yL2MvZCBpcyBrZXB0IHdoZW4gY2xvYmJlcmluZyBzeW1saW5rIGInICcKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgcm0gLS1jYWNoZWQgYS9iICYmCisJZ2l0IGNvbW1pdCAtbSAidW50cmFja2VkIHN5bWxpbmsgcmVtYWlucyIgJiYKKwlnaXQgY2hlY2tvdXQgLWYgc3RhcnReMCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGEvYi0yL2MvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBzaG91bGQgbm90IGhhdmUgZGVsZXRlZCBhL2ItMi9jL2QnICcKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwkgZ2l0IGNoZWNrb3V0IHN0YXJ0XjAgJiYKKwkgdGVzdF9wYXRoX2lzX2ZpbGUgYS9iLTIvYy9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBtZXJnZSB0ZXN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGEvYi0yL2MvZCAmJgorCWVjaG8geCA+IGEveCAmJgorCWdpdCBhZGQgYS94ICYmCisJZ2l0IGNvbW1pdCAtbSB4ICYmCisJZ2l0IHRhZyBiYXNlbGluZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIYW5kbGUgRC9GIGNvbmZsaWN0LCBkbyBub3QgbG9zZSBhL2ItMi9jL2QgaW4gbWVyZ2UgKHJlc29sdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBiYXNlbGluZV4wICYmCisJZ2l0IG1lcmdlIC1zIHJlc29sdmUgbWFzdGVyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYS9iLTIvYy9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2EvYiB3YXMgcmVzb2x2ZWQgYXMgc3ltbGluaycgJworCXRlc3QgLWggYS9iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0hhbmRsZSBEL0YgY29uZmxpY3QsIGRvIG5vdCBsb3NlIGEvYi0yL2MvZCBpbiBtZXJnZSAocmVjdXJzaXZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYmFzZWxpbmVeMCAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgbWFzdGVyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYS9iLTIvYy9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2EvYiB3YXMgcmVzb2x2ZWQgYXMgc3ltbGluaycgJworCXRlc3QgLWggYS9iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0hhbmRsZSBGL0QgY29uZmxpY3QsIGRvIG5vdCBsb3NlIGEvYi0yL2MvZCBpbiBtZXJnZSAocmVzb2x2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZ2l0IG1lcmdlIC1zIHJlc29sdmUgYmFzZWxpbmVeMCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGEvYi0yL2MvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdhL2Igd2FzIHJlc29sdmVkIGFzIHN5bWxpbmsnICcKKwl0ZXN0IC1oIGEvYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIYW5kbGUgRi9EIGNvbmZsaWN0LCBkbyBub3QgbG9zZSBhL2ItMi9jL2QgaW4gbWVyZ2UgKHJlY3Vyc2l2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBiYXNlbGluZV4wICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYS9iLTIvYy9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2EvYiB3YXMgcmVzb2x2ZWQgYXMgc3ltbGluaycgJworCXRlc3QgLWggYS9iCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RvIG5vdCBsb3NlIHVudHJhY2tlZCBpbiBtZXJnZSAocmVzb2x2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKKwk+YS9iL2MvZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZXNvbHZlIG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19maWxlIGEvYi9jL2UgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBhL2ItMi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGxvc2UgdW50cmFja2VkIGluIG1lcmdlIChyZWN1cnNpdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBiYXNlbGluZV4wICYmCisJPmEvYi9jL2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19maWxlIGEvYi9jL2UgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBhL2ItMi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGxvc2UgbW9kaWZpY2F0aW9ucyBpbiBtZXJnZSAocmVzb2x2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKKwllY2hvIG1vcmUgY29udGVudCA+PmEvYi9jL2QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVzb2x2ZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGxvc2UgbW9kaWZpY2F0aW9ucyBpbiBtZXJnZSAocmVjdXJzaXZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYmFzZWxpbmVeMCAmJgorCWVjaG8gbW9yZSBjb250ZW50ID4+YS9iL2MvZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgbWVyZ2Ugd2hlcmUgZGlyIGEvYi0yIGNoYW5nZWQgdG8gc3ltbGluaycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc3RhcnReMCAmJgorCXJtIC1yZiBhL2ItMiAmJgorCWdpdCBhZGQgLUEgJiYKKwl0ZXN0X2xuX3NfYWRkIGIgYS9iLTIgJiYKKwlnaXQgY29tbWl0IC1tICJkaXIgYS9iLTIgdG8gc3ltbGluayIgJiYKKwlnaXQgdGFnIHRlc3QyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHNob3VsZCBub3QgaGF2ZSBEL0YgY29uZmxpY3RzIChyZXNvbHZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYmFzZWxpbmVeMCAmJgorCWdpdCBtZXJnZSAtcyByZXNvbHZlIHRlc3QyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYS9iL2MvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdhL2ItMiB3YXMgcmVzb2x2ZWQgYXMgc3ltbGluaycgJworCXRlc3QgLWggYS9iLTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugc2hvdWxkIG5vdCBoYXZlIEQvRiBjb25mbGljdHMgKHJlY3Vyc2l2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIHRlc3QyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYS9iL2MvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdhL2ItMiB3YXMgcmVzb2x2ZWQgYXMgc3ltbGluaycgJworCXRlc3QgLWggYS9iLTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugc2hvdWxkIG5vdCBoYXZlIEYvRCBjb25mbGljdHMgKHJlY3Vyc2l2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZvbyB0ZXN0MiAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgYmFzZWxpbmVeMCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGEvYi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYS9iLTIgd2FzIHJlc29sdmVkIGFzIHN5bWxpbmsnICcKKwl0ZXN0IC1oIGEvYi0yCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzNi1yZWN1cnNpdmUtY29ybmVyLWNhc2VzLnNoIGIvdC90NjAzNi1yZWN1cnNpdmUtY29ybmVyLWNhc2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIzYmY0NjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDM2LXJlY3Vyc2l2ZS1jb3JuZXItY2FzZXMuc2gKQEAgLTAsMCArMSwxODIwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVjdXJzaXZlIG1lcmdlIGNvcm5lciBjYXNlcyBpbnZvbHZpbmcgY3Jpc3MtY3Jvc3MgbWVyZ2VzJworCisuIC4vdGVzdC1saWIuc2gKKworIworIyAgTDEgIEwyCisjICAgby0tLW8KKyMgIC8gXCAvIFwKKyMgbyAgIFggICA/CisjICBcIC8gXCAvCisjICAgby0tLW8KKyMgIFIxICBSMgorIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBiYXNpYyBjcmlzcy1jcm9zcyArIHJlbmFtZSB3aXRoIG5vIG1vZGlmaWNhdGlvbnMnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGJhc2ljLXJlbmFtZSAmJgorCSgKKwkJY2QgYmFzaWMtcmVuYW1lICYmCisKKwkJdGVuPSIwIDEgMiAzIDQgNSA2IDcgOCA5IiAmJgorCQlmb3IgaSBpbiAkdGVuCisJCWRvCisJCQllY2hvIGxpbmUgJGkgaW4gYSBzYW1wbGUgZmlsZQorCQlkb25lID5vbmUgJiYKKwkJZm9yIGkgaW4gJHRlbgorCQlkbworCQkJZWNobyBsaW5lICRpIGluIGFub3RoZXIgc2FtcGxlIGZpbGUKKwkJZG9uZSA+dHdvICYmCisJCWdpdCBhZGQgb25lIHR3byAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwkJZ2l0IGJyYW5jaCBMMSAmJgorCQlnaXQgY2hlY2tvdXQgLWIgUjEgJiYKKwkJZ2l0IG12IG9uZSB0aHJlZSAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBSMSAmJgorCisJCWdpdCBjaGVja291dCBMMSAmJgorCQlnaXQgbXYgdHdvIHRocmVlICYmCisJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEwxICYmCisKKwkJZ2l0IGNoZWNrb3V0IEwxXjAgJiYKKwkJdGVzdF90aWNrICYmIGdpdCBtZXJnZSAtcyBvdXJzIFIxICYmCisJCWdpdCB0YWcgTDIgJiYKKworCQlnaXQgY2hlY2tvdXQgUjFeMCAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC1zIG91cnMgTDEgJiYKKwkJZ2l0IHRhZyBSMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugc2ltcGxlIHJlbmFtZStjcmlzcy1jcm9zcyB3aXRoIG5vIG1vZGlmaWNhdGlvbnMnICcKKwkoCisJCWNkIGJhc2ljLXJlbmFtZSAmJgorCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IEwyXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIFIyXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCAgICAgICBcCisJCQlMMjp0aHJlZSAgIFIyOnRocmVlICYmCisJCWdpdCByZXYtcGFyc2UgICA+YWN0dWFsICAgICBcCisJCQk6Mjp0aHJlZSAgIDozOnRocmVlICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMKKyMgU2FtZSBhcyBiZWZvcmUsIGJ1dCBtb2RpZnkgTDEgc2xpZ2h0bHk6CisjCisjICBMMW0gTDIKKyMgICBvLS0tbworIyAgLyBcIC8gXAorIyBvICAgWCAgID8KKyMgIFwgLyBcIC8KKyMgICBvLS0tbworIyAgUjEgIFIyCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNyaXNzLWNyb3NzICsgcmVuYW1lIG1lcmdlcyB3aXRoIGJhc2ljIG1vZGlmaWNhdGlvbicgJworCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLW1vZGlmeSAmJgorCSgKKwkJY2QgcmVuYW1lLW1vZGlmeSAmJgorCisJCXRlbj0iMCAxIDIgMyA0IDUgNiA3IDggOSIgJiYKKwkJZm9yIGkgaW4gJHRlbgorCQlkbworCQkJZWNobyBsaW5lICRpIGluIGEgc2FtcGxlIGZpbGUKKwkJZG9uZSA+b25lICYmCisJCWZvciBpIGluICR0ZW4KKwkJZG8KKwkJCWVjaG8gbGluZSAkaSBpbiBhbm90aGVyIHNhbXBsZSBmaWxlCisJCWRvbmUgPnR3byAmJgorCQlnaXQgYWRkIG9uZSB0d28gJiYKKwkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJCWdpdCBicmFuY2ggTDEgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIFIxICYmCisJCWdpdCBtdiBvbmUgdGhyZWUgJiYKKwkJZWNobyBtb3JlID4+dHdvICYmCisJCWdpdCBhZGQgdHdvICYmCisJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIFIxICYmCisKKwkJZ2l0IGNoZWNrb3V0IEwxICYmCisJCWdpdCBtdiB0d28gdGhyZWUgJiYKKwkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gTDEgJiYKKworCQlnaXQgY2hlY2tvdXQgTDFeMCAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC1zIG91cnMgUjEgJiYKKwkJZ2l0IHRhZyBMMiAmJgorCisJCWdpdCBjaGVja291dCBSMV4wICYmCisJCXRlc3RfdGljayAmJiBnaXQgbWVyZ2UgLXMgb3VycyBMMSAmJgorCQlnaXQgdGFnIFIyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjcmlzcy1jcm9zcyArIHJlbmFtZSBtZXJnZXMgd2l0aCBiYXNpYyBtb2RpZmljYXRpb24nICcKKwkoCisJCWNkIHJlbmFtZS1tb2RpZnkgJiYKKworCQlnaXQgY2hlY2tvdXQgTDJeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgUjJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0ICAgICAgIFwKKwkJCUwyOnRocmVlICAgUjI6dGhyZWUgJiYKKwkJZ2l0IHJldi1wYXJzZSAgID5hY3R1YWwgICAgIFwKKwkJCToyOnRocmVlICAgOjM6dGhyZWUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIworIyBGb3IgdGhlIG5leHQgdGVzdCwgd2Ugc3RhcnQgd2l0aCB0aHJlZSBjb21taXRzIGluIHR3byBsaW5lcyBvZiBkZXZlbG9wbWVudAorIyB3aGljaCBzZXR1cCBhIHJlbmFtZS9hZGQgY29uZmxpY3Q6CisjICAgQ29tbWl0IEE6IEZpbGUgJ2EnIGV4aXN0cworIyAgIENvbW1pdCBCOiBSZW5hbWUgJ2EnIC0+ICduZXdfYScKKyMgICBDb21taXQgQzogTW9kaWZ5ICdhJywgY3JlYXRlIGRpZmZlcmVudCAnbmV3X2EnCisjIExhdGVyLCB0d28gZGlmZmVyZW50IHBlb3BsZSBtZXJnZSBhbmQgcmVzb2x2ZSBkaWZmZXJlbnRseToKKyMgICBDb21taXQgRDogTWVyZ2UgQiAmIEMsIGlnbm9yaW5nIHNlcGFyYXRlbHkgY3JlYXRlZCAnbmV3X2EnCisjICAgQ29tbWl0IEU6IE1lcmdlIEIgJiBDIG1ha2luZyB1c2Ugb2Ygc29tZSBwaWVjZSBvZiBzZWNvbmRhcnkgJ25ld19hJworIyBGaW5hbGx5LCBzb21lb25lIGdvZXMgdG8gbWVyZ2UgRCAmIEUuICBEb2VzIGdpdCBkZXRlY3QgdGhlIGNvbmZsaWN0PworIworIyAgICAgIEIgICBECisjICAgICAgby0tLW8KKyMgICAgIC8gXCAvIFwKKyMgIEEgbyAgIFggICA/IEYKKyMgICAgIFwgLyBcIC8KKyMgICAgICBvLS0tbworIyAgICAgIEMgICBFCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpZmZlcmVudGx5IGhhbmRsZWQgbWVyZ2VzIG9mIHJlbmFtZS9hZGQgY29uZmxpY3QnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlbmFtZS1hZGQgJiYKKwkoCisJCWNkIHJlbmFtZS1hZGQgJiYKKworCQlwcmludGYgIjBcbjFcbjJcbjNcbjRcbjVcbjZcbjdcbjhcbjlcbiIgPmEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEEgJiYKKworCQlnaXQgYnJhbmNoIEIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIEMgJiYKKwkJZWNobyAxMCA+PmEgJiYKKwkJdGVzdF93cml0ZV9saW5lcyAwIDEgMiAzIDQgNSA2IDcgZm9vYmFyID5uZXdfYSAmJgorCQlnaXQgYWRkIGEgbmV3X2EgJiYKKwkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gQyAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiBhIG5ld19hICYmCisJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQl4wICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBDICYmCisJCWdpdCBzaG93IDoyOm5ld19hID5uZXdfYSAmJgorCQlnaXQgYWRkIG5ld19hICYmCisJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEQgJiYKKwkJZ2l0IHRhZyBEICYmCisKKwkJZ2l0IGNoZWNrb3V0IENeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQiAmJgorCQl0ZXN0X3dyaXRlX2xpbmVzIDAgMSAyIDMgNCA1IDYgNyBiYWRfbWVyZ2UgPm5ld19hICYmCisJCWdpdCBhZGQgLXUgJiYKKwkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gRSAmJgorCQlnaXQgdGFnIEUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkZXRlY3RzIGRpZmZlcmVudGx5IGhhbmRsZWQgbWVyZ2VzIGNvbmZsaWN0JyAnCisJKAorCQljZCByZW5hbWUtYWRkICYmCisKKwkJZ2l0IGNoZWNrb3V0IEReMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgRV4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgY2F0LWZpbGUgLXAgQzpuZXdfYSA+b3VycyAmJgorCQlnaXQgY2F0LWZpbGUgLXAgQzphID50aGVpcnMgJiYKKwkJPmVtcHR5ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIFwKKwkJCS1MICJUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDEiIFwKKwkJCS1MICIiIFwKKwkJCS1MICJUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDIiIFwKKwkJCW91cnMgZW1wdHkgdGhlaXJzICYmCisJCXNlZCAtZSAicy9eXChbPD0+XVwpL1wxXDFcMS8iIG91cnMgPm91cnMtdHdlYWtlZCAmJgorCQlnaXQgaGFzaC1vYmplY3Qgb3Vycy10d2Vha2VkID5leHBlY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+PmV4cGVjdCAgICAgIFwKKwkJCQkgIEQ6bmV3X2EgIEU6bmV3X2EgJiYKKwkJZ2l0IHJldi1wYXJzZSAgID5hY3R1YWwgICAgIFwKKwkJCToxOm5ld19hIDoyOm5ld19hIDozOm5ld19hICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjIFRlc3QgdGhhdCB0aGUgdHdvLXdheSBtZXJnZSBpbiBuZXdfYSBpcyBhcyBleHBlY3RlZAorCQlnaXQgY2F0LWZpbGUgLXAgRDpuZXdfYSA+b3VycyAmJgorCQlnaXQgY2F0LWZpbGUgLXAgRTpuZXdfYSA+dGhlaXJzICYmCisJCT5lbXB0eSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSBcCisJCQktTCAiSEVBRCIgXAorCQkJLUwgIiIgXAorCQkJLUwgIkVeMCIgXAorCQkJb3VycyBlbXB0eSB0aGVpcnMgJiYKKwkJc2VkIC1lICJzL15cKFs8PT5dXCkvXDFcMVwxLyIgb3VycyA+ZXhwZWN0ICYmCisJCWdpdCBoYXNoLW9iamVjdCBuZXdfYSA+YWN0dWFsICYmCisJCWdpdCBoYXNoLW9iamVjdCBvdXJzICA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgUmVwZWF0IHRoZSBhYm92ZSB0ZXN0Y2FzZSB3aXRoIHByZWNpc2VseSB0aGUgc2FtZSBzZXR1cCwgb3RoZXIgdGhhbiB3aXRoCisjIHRoZSB0d28gbWVyZ2UgYmFzZXMgaGF2aW5nIGRpZmZlcmVudCBvcmRlcmluZ3Mgb2YgY29tbWl0IHRpbWVzdGFtcHMgc28KKyMgdGhhdCB0aGV5IGFyZSByZXZlcnNlZCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgcHJvdmlkZWQgdG8gbWVyZ2UtcmVjdXJzaXZlLAorIyBzbyB0aGF0IHdlIGNhbiBpbXByb3ZlIGNvZGUgY292ZXJhZ2UuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGV0ZWN0cyBkaWZmZXJlbnRseSBoYW5kbGVkIG1lcmdlcyBjb25mbGljdCwgc3dhcHBlZCcgJworCSgKKwkJY2QgcmVuYW1lLWFkZCAmJgorCisJCSMgRGlmZmVyZW5jZSAjMTogRG8gY2xlYW51cCBmcm9tIHByZXZpb3VzIHRlc3RydW4KKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2xlYW4gLWZkcXggJiYKKworCQkjIERpZmZlcmVuY2UgIzI6IENoYW5nZSBjb21taXQgdGltZXN0YW1wcworCQlidGltZT0kKGdpdCBsb2cgLS1uby13YWxrIC0tZGF0ZT1yYXcgLS1mb3JtYXQ9JWNkIEIgfCBhd2sgIntwcmludCBcJDF9IikgJiYKKwkJY3RpbWU9JChnaXQgbG9nIC0tbm8td2FsayAtLWRhdGU9cmF3IC0tZm9ybWF0PSVjZCBDIHwgYXdrICJ7cHJpbnQgXCQxfSIpICYmCisJCW5ld2N0aW1lPSQoKCRidGltZSsxKSkgJiYKKwkJZ2l0IGZhc3QtZXhwb3J0IC0tbm8tZGF0YSAtLWFsbCB8IHNlZCAtZSBzLyRjdGltZS8kbmV3Y3RpbWUvIHwgZ2l0IGZhc3QtaW1wb3J0IC0tZm9yY2UgLS1xdWlldCAmJgorCQkjIEVuZCBvZiBtb3N0IGRpZmZlcmVuY2VzOyByZXN0IGlzIGNvcHktcGFzdGUgb2YgbGFzdCB0ZXN0LAorCQkjIG90aGVyIHRoYW4gc3dhcHBpbmcgQzphIGFuZCBDOm5ld19hIGR1ZSB0byBvcmRlciBzd2l0Y2gKKworCQlnaXQgY2hlY2tvdXQgRF4wICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgRV4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgY2F0LWZpbGUgLXAgQzphID5vdXJzICYmCisJCWdpdCBjYXQtZmlsZSAtcCBDOm5ld19hID50aGVpcnMgJiYKKwkJPmVtcHR5ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIFwKKwkJCS1MICJUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDEiIFwKKwkJCS1MICIiIFwKKwkJCS1MICJUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDIiIFwKKwkJCW91cnMgZW1wdHkgdGhlaXJzICYmCisJCXNlZCAtZSAicy9eXChbPD0+XVwpL1wxXDFcMS8iIG91cnMgPm91cnMtdHdlYWtlZCAmJgorCQlnaXQgaGFzaC1vYmplY3Qgb3Vycy10d2Vha2VkID5leHBlY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+PmV4cGVjdCAgICAgIFwKKwkJCQkgIEQ6bmV3X2EgIEU6bmV3X2EgJiYKKwkJZ2l0IHJldi1wYXJzZSAgID5hY3R1YWwgICAgIFwKKwkJCToxOm5ld19hIDoyOm5ld19hIDozOm5ld19hICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjIFRlc3QgdGhhdCB0aGUgdHdvLXdheSBtZXJnZSBpbiBuZXdfYSBpcyBhcyBleHBlY3RlZAorCQlnaXQgY2F0LWZpbGUgLXAgRDpuZXdfYSA+b3VycyAmJgorCQlnaXQgY2F0LWZpbGUgLXAgRTpuZXdfYSA+dGhlaXJzICYmCisJCT5lbXB0eSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSBcCisJCQktTCAiSEVBRCIgXAorCQkJLUwgIiIgXAorCQkJLUwgIkVeMCIgXAorCQkJb3VycyBlbXB0eSB0aGVpcnMgJiYKKwkJc2VkIC1lICJzL15cKFs8PT5dXCkvXDFcMVwxLyIgb3VycyA+ZXhwZWN0ICYmCisJCWdpdCBoYXNoLW9iamVjdCBuZXdfYSA+YWN0dWFsICYmCisJCWdpdCBoYXNoLW9iamVjdCBvdXJzICA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMKKyMgY3Jpc3MtY3Jvc3MgKyBtb2RpZnkvZGVsZXRlOgorIworIyAgICAgIEIgICBECisjICAgICAgby0tLW8KKyMgICAgIC8gXCAvIFwKKyMgIEEgbyAgIFggICA/IEYKKyMgICAgIFwgLyBcIC8KKyMgICAgICBvLS0tbworIyAgICAgIEMgICBFCisjCisjICAgQ29tbWl0IEE6IGZpbGUgd2l0aCBjb250ZW50cyAnQVxuJworIyAgIENvbW1pdCBCOiBmaWxlIHdpdGggY29udGVudHMgJ0JcbicKKyMgICBDb21taXQgQzogZmlsZSBub3QgcHJlc2VudAorIyAgIENvbW1pdCBEOiBmaWxlIHdpdGggY29udGVudHMgJ0JcbicKKyMgICBDb21taXQgRTogZmlsZSBub3QgcHJlc2VudAorIworIyBNZXJnaW5nIGNvbW1pdHMgRCAmIEUgc2hvdWxkIHJlc3VsdCBpbiBtb2RpZnkvZGVsZXRlIGNvbmZsaWN0LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjcmlzcy1jcm9zcyArIG1vZGlmeS9kZWxldGUgcmVzb2x2ZWQgZGlmZmVyZW50bHknICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIG1vZGlmeS1kZWxldGUgJiYKKwkoCisJCWNkIG1vZGlmeS1kZWxldGUgJiYKKworCQllY2hvIEEgPmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tIEEgJiYKKworCQlnaXQgYnJhbmNoIEIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIEMgJiYKKwkJZ2l0IHJtIGZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gQyAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gQiA+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gQiAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEMgJiYKKwkJZWNobyBCID5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSBEICYmCisJCWdpdCB0YWcgRCAmJgorCisJCWdpdCBjaGVja291dCBDXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEIgJiYKKwkJZ2l0IHJtIGZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gRSAmJgorCQlnaXQgdGFnIEUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkZXRlY3RzIGNvbmZsaWN0IG1lcmdpbmcgY3Jpc3MtY3Jvc3MrbW9kaWZ5L2RlbGV0ZScgJworCSgKKwkJY2QgbW9kaWZ5LWRlbGV0ZSAmJgorCisJCWdpdCBjaGVja291dCBEXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEVeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0ICAgICAgIFwKKwkJCW1hc3RlcjpmaWxlICBCOmZpbGUgJiYKKwkJZ2l0IHJldi1wYXJzZSAgID5hY3R1YWwgICAgICBcCisJCQk6MTpmaWxlICAgICAgOjI6ZmlsZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGV0ZWN0cyBjb25mbGljdCBtZXJnaW5nIGNyaXNzLWNyb3NzK21vZGlmeS9kZWxldGUsIHJldmVyc2UgZGlyZWN0aW9uJyAnCisJKAorCQljZCBtb2RpZnktZGVsZXRlICYmCisKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgRV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBEXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCAgICAgICBcCisJCQltYXN0ZXI6ZmlsZSAgQjpmaWxlICYmCisJCWdpdCByZXYtcGFyc2UgICA+YWN0dWFsICAgICAgXAorCQkJOjE6ZmlsZSAgICAgIDozOmZpbGUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyAgICAgIFNPUlJZIEZPUiBUSEUgU1VQRVIgTE9ORyBERVNDUklQVElPTiwgQlVUIFRISVMgTkVYVCBPTkUgSVMgSEFJUlkKKyMKKyMgY3Jpc3MtY3Jvc3MgKyBkL2YgY29uZmxpY3QgdmlhIGFkZC9hZGQ6CisjICAgQ29tbWl0IEE6IE5laXRoZXIgZmlsZSAnYScgbm9yIGRpcmVjdG9yeSAnYS8nIGV4aXN0cy4KKyMgICBDb21taXQgQjogSW50cm9kdWNlICdhJworIyAgIENvbW1pdCBDOiBJbnRyb2R1Y2UgJ2EvZmlsZScKKyMgICBDb21taXQgRDE6IE1lcmdlIEIgJiBDLCBrZWVwaW5nICdhJyAgICBhbmQgZGVsZXRpbmcgJ2EvJworIyAgIENvbW1pdCBFMTogTWVyZ2UgQiAmIEMsIGRlbGV0aW5nICdhJyBidXQga2VlcGluZyAnYS9maWxlJworIworIyAgICAgIEIgICBEMSBvciBEMgorIyAgICAgIG8tLS1vCisjICAgICAvIFwgLyBcCisjICBBIG8gICBYICAgPyBGCisjICAgICBcIC8gXCAvCisjICAgICAgby0tLW8KKyMgICAgICBDICAgRTEgb3IgRTIgb3IgRTMKKyMKKyMgSSdsbCBkZXNjcmliZSBEMiwgRTIsICYgRTMgKHdoaWNoIGFyZSBhbHRlcm5hdGl2ZXMgZm9yIEQxICYgRTEpIG1vcmUgYmVsb3cuLi4KKyMKKyMgTWVyZ2luZyBEMSAmIEUxIHJlcXVpcmVzIHdlIGZpcnN0IGNyZWF0ZSBhIHZpcnR1YWwgbWVyZ2UgYmFzZSBYIGZyb20KKyMgbWVyZ2luZyBBICYgQiBpbiBtZW1vcnkuICBUaGVyZSBhcmUgc2V2ZXJhbCBwb3NzaWJpbGl0aWVzIGZvciB0aGUgbWVyZ2UtYmFzZToKKyMgICAxOiBLZWVwIGJvdGggJ2EnIGFuZCAnYS9maWxlJyAoYXNzdW1pbmcgY3JhenkgZmlsZXN5c3RlbSBhbGxvd2luZyBhIHRyZWUKKyMgICAgICB3aXRoIGEgZGlyZWN0b3J5IGFuZCBmaWxlIGF0IHNhbWUgcGF0aCk6IHJlc3VsdHMgaW4gbWVyZ2Ugb2YgRDEgJiBFMQorIyAgICAgIGJlaW5nIGNsZWFuIHdpdGggYm90aCBmaWxlcyBkZWxldGVkLiAgQmFkIChubyBjb25mbGljdCBkZXRlY3RlZCkuCisjICAgMjogS2VlcCAnYScgYnV0IG5vdCAnYS9maWxlJzogTWVyZ2luZyBEMSAmIEUxIGlzIGNsZWFuIGFuZCBtYXRjaGVzIEUxLiAgQmFkLgorIyAgIDM6IEtlZXAgJ2EvZmlsZScgYnV0IG5vdCAnYSc6IE1lcmdpbmcgRDEgJiBFMSBpcyBjbGVhbiBhbmQgbWF0Y2hlcyBEMS4gIEJhZC4KKyMgICA0OiBLZWVwIG5laXRoZXIgZmlsZTogTWVyZ2luZyBEMSAmIEUxIHJlcG9ydHMgdGhlIEQvRiBhZGQvYWRkIGNvbmZsaWN0LgorIworIyBTbyA0IHNvdW5kcyBnb29kIGZvciB0aGlzIGNhc2UsIGJ1dCBpZiB3ZSB3ZXJlIHRvIG1lcmdlIEQxICYgRTMsIHdoZXJlIEUzCisjIGlzIGRlZmluZWQgYXM6CisjICAgQ29tbWl0IEUzOiBNZXJnZSBCICYgQywga2VlcGluZyBtb2RpZmllZCBhLCBhbmQgZGVsZXRpbmcgYS8KKyMgdGhlbiB3ZSdkIGdldCBhbiBhZGQvYWRkIGNvbmZsaWN0IGZvciAnYScsIHdoaWNoIHNlZW1zIHN1Ym9wdGltYWwuICBBIGxpdHRsZQorIyBjcmVhdGl2aXR5IGxlYWRzIHVzIHRvIGFuIGFsdGVybmF0ZSBjaG9pY2U6CisjICAgNTogS2VlcCAnYScgYXMgJ2F+JFVOSVFVRScgYW5kIGEvZmlsZTsgcmVzdWx0czoKKyMgICAgICAgIE1lcmdlIEQxICYgRTE6IHJlbmFtZS9kZWxldGUgY29uZmxpY3QgZm9yICdhJzsgYS9maWxlIHNpbGVudGx5IGRlbGV0ZWQKKyMgICAgICAgIE1lcmdlIEQxICYgRTMgaXMgY2xlYW4sIGFzIGV4cGVjdGVkLgorIworIyBTbyBjaG9pY2UgNSBhdCBsZWFzdCBwcm92aWRlcyBzb21lIGtpbmQgb2YgY29uZmxpY3QgZm9yIHRoZSBvcmlnaW5hbCBjYXNlLAorIyBhbmQgY2FuIG1lcmdlIGNsZWFubHkgYXMgZXhwZWN0ZWQgd2l0aCBEMSBhbmQgRTMuICBJdCBhbHNvIG1hZGUgdGhpbmdzIGp1c3QKKyMgc2xpZ2h0bHkgZnVubnkgZm9yIG1lcmdpbmcgRDEgYW5kIGUkLCB3aGVyZSBFNCBpcyBkZWZpbmVkIGFzOgorIyAgIENvbW1pdCBFNDogTWVyZ2UgQiAmIEMsIG1vZGlmeWluZyAnYScgYW5kIHJlbmFtaW5nIHRvICdhMicsIGFuZCBkZWxldGluZyAnYS8nCisjIGluIHRoaXMgY2FzZSwgd2UnbGwgZ2V0IGEgcmVuYW1lL3JlbmFtZSgxdG8yKSBjb25mbGljdCBiZWNhdXNlIGF+JFVOSVFVRQorIyBnZXRzIHJlbmFtZWQgdG8gJ2EnIGluIEQxIGFuZCB0byAnYTInIGluIEU0LiAgQnV0IHRoYXQncyBiZXR0ZXIgdGhhbiBoYXZpbmcKKyMgdHdvIGZpbGVzIChib3RoICdhJyBhbmQgJ2EyJykgc2l0dGluZyBhcm91bmQgd2l0aG91dCB0aGUgdXNlciBiZWluZyBub3RpZmllZAorIyB0aGF0IHdlIGNvdWxkIGRldGVjdCB0aGV5IHdlcmUgcmVsYXRlZCBhbmQgbmVlZCB0byBiZSBtZXJnZWQuICBBbHNvLCBjaG9pY2UKKyMgNSBtYWtlcyB0aGUgaGFuZGxpbmcgb2YgJ2EvZmlsZScgc2VlbSBzdWJvcHRpbWFsLiAgV2hhdCBpZiB3ZSB3ZXJlIHRvIG1lcmdlCisjIEQyIGFuZCBFNCwgd2hlcmUgRDIgaXM6CisjICAgQ29tbWl0IEQyOiBNZXJnZSBCICYgQywgcmVuYW1pbmcgJ2EnLT4nYTInLCBrZWVwaW5nICdhL2ZpbGUnCisjIFRoaXMgd291bGQgcmVzdWx0IGluIGEgY2xlYW4gbWVyZ2Ugd2l0aCAnYTInIGhhdmluZyB0aHJlZS13YXkgbWVyZ2VkCisjIGNvbnRlbnRzIChnb29kKSwgYW5kIGRlbGV0aW5nICdhLycgKGJhZCkgLS0gaXQgZG9lc24ndCBkZXRlY3QgdGhlCisjIGNvbmZsaWN0IGluIGhvdyB0aGUgZGlmZmVyZW50IHNpZGVzIHRyZWF0ZWQgYS9maWxlIGRpZmZlcmVudGx5LgorIyBDb250aW51aW5nIGRvd24gdGhlIGNyZWF0aXZlIHJvdXRlOgorIyAgIDY6IEtlZXAgJ2EnIGFzICdhfiRVTklRVUUxJyBhbmQga2VlcCAnYS8nIGFzICdhfiRVTklRVUUyLyc7IHJlc3VsdHM6CisjICAgICAgICBNZXJnZSBEMSAmIEUxOiByZW5hbWUvZGVsZXRlIGNvbmZsaWN0IGZvciAnYScgYW5kIGVhY2ggcGF0aCB1bmRlciAnYS8nLgorIyAgICAgICAgTWVyZ2UgRDEgJiBFMzogY2xlYW4sIGFzIGV4cGVjdGVkLgorIyAgICAgICAgTWVyZ2UgRDEgJiBFNDogcmVuYW1lL3JlbmFtZSgxdG8yKSBjb25mbGljdCBvbiAnYScgdnMgJ2EyJy4KKyMgICAgICAgIE1lcmdlIEQyICYgRTQ6IGNsZWFuIGZvciAnYTInLCByZW5hbWUvZGVsZXRlIGZvciBhL2ZpbGUKKyMKKyMgQ2hvaWNlIDYgY291bGQgY2F1c2UgcmVuYW1lIGRldGVjdGlvbiB0byB0YWtlIGxvbmdlciAocHJvdmlkaW5nIG1vcmUgdGFyZ2V0cworIyB0aGF0IG5lZWQgdG8gYmUgc2VhcmNoZWQpLiAgQWxzbywgdGhlIGNvbmZsaWN0IG1lc3NhZ2UgZm9yIGVhY2ggcGF0aCB1bmRlcgorIyAnYS8nIG1pZ2h0IGJlIGFubm95aW5nIHVubGVzcyB3ZSBjYW4gZGV0ZWN0IGl0IGF0IHRoZSBkaXJlY3RvcnkgbGV2ZWwsIHByaW50CisjIGl0IG9uY2UsIGFuZCB0aGVuIHN1cHByZXNzIGl0IGZvciBpbmRpdmlkdWFsIGZpbGVwYXRocyB1bmRlcm5lYXRoLgorIworIworIyBBcyBvZiB0aW1lIG9mIHdyaXRpbmcsIGdpdCB1c2VzIGNob2ljZSA1LiAgRGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gYW5kCisjIHJlbmFtZSBkZXRlY3Rpb24gcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIG1pZ2h0IG1ha2UgY2hvaWNlIDYgYSBkZXNpcmFibGUKKyMgaW1wcm92ZW1lbnQuICBCdXQgd2UgY2FuIGF0IGxlYXN0IGRvY3VtZW50IHdoZXJlIHdlIGZhbGwgc2hvcnQgZm9yIG5vdy4uLgorIworIworIyBIaXN0b3JpY2FsbHksIHRoaXMgdGVzdGNhc2UgYWxzbyB1c2VkOgorIyAgIENvbW1pdCBFMjogTWVyZ2UgQiAmIEMsIGRlbGV0aW5nICdhJyBidXQga2VlcGluZyBzbGlnaHRseSBtb2RpZmllZCAnYS9maWxlJworIyBUaGUgbWVyZ2Ugb2YgRDEgJiBFMiBpcyB2ZXJ5IHNpbWlsYXIgdG8gRDEgJiBFMSAtLSBpdCBoYXMgc2ltaWxhciBpc3N1ZXMgZm9yCisjIHBhdGggJ2EnLCBidXQgc2hvdWxkIGFsd2F5cyByZXN1bHQgaW4gYSBtb2RpZnkvZGVsZXRlIGNvbmZsaWN0IGZvciBwYXRoCisjICdhL2ZpbGUnLiAgVGhlc2UgdGVzdHMgcmFuIHRoZSB0d28gbWVyZ2VzCisjICAgRDEgJiBFMQorIyAgIEQxICYgRTIKKyMgaW4gYm90aCBkaXJlY3Rpb25zLCB0byBjaGVjayBmb3IgZGlyZWN0aW9uYWwgaXNzdWVzIHdpdGggRC9GIGNvbmZsaWN0CisjIGhhbmRsaW5nLiBMYXRlciB3ZSBhZGRlZAorIyAgIEQxICYgRTMKKyMgICBEMSAmIEU0CisjICAgRDIgJiBFNAorIyBmb3IgZ29vZCBtZWFzdXJlLCB0aG91Z2ggd2Ugb25seSByYW4gdGhvc2Ugb25lIHdheSBiZWNhdXNlIHdlIGhhZCBwcmV0dHkKKyMgZ29vZCBjb25maWRlbmNlIGluIG1lcmdlLXJlY3Vyc2l2ZSdzIGRpcmVjdGlvbmFsIGhhbmRsaW5nIG9mIEQvRiBpc3N1ZXMuCisjCisjIEp1c3QgdG8gc3VtbWFyaXplIGFsbCB0aGUgaW50ZXJtZWRpYXRlIG1lcmdlIGNvbW1pdHM6CisjICAgQ29tbWl0IEQxOiBNZXJnZSBCICYgQywga2VlcGluZyBhICAgIGFuZCBkZWxldGluZyBhLworIyAgIENvbW1pdCBEMjogTWVyZ2UgQiAmIEMsIHJlbmFtaW5nIGEtPmEyLCBrZWVwaW5nIGEvZmlsZQorIyAgIENvbW1pdCBFMTogTWVyZ2UgQiAmIEMsIGRlbGV0aW5nIGEgYnV0IGtlZXBpbmcgYS9maWxlCisjICAgQ29tbWl0IEUyOiBNZXJnZSBCICYgQywgZGVsZXRpbmcgYSBidXQga2VlcGluZyBzbGlnaHRseSBtb2RpZmllZCBhL2ZpbGUKKyMgICBDb21taXQgRTM6IE1lcmdlIEIgJiBDLCBrZWVwaW5nIG1vZGlmaWVkIGEsIGFuZCBkZWxldGluZyBhLworIyAgIENvbW1pdCBFNDogTWVyZ2UgQiAmIEMsIG1vZGlmeWluZyAnYScgYW5kIHJlbmFtaW5nIHRvICdhMicsIGFuZCBkZWxldGluZyAnYS8nCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpZmZlcmVudGx5IGhhbmRsZWQgbWVyZ2VzIG9mIGRpcmVjdG9yeS9maWxlIGNvbmZsaWN0JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBkaXJlY3RvcnktZmlsZSAmJgorCSgKKwkJY2QgZGlyZWN0b3J5LWZpbGUgJiYKKworCQk+aWdub3JlLW1lICYmCisJCWdpdCBhZGQgaWdub3JlLW1lICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tIEEgJiYKKwkJZ2l0IHRhZyBBICYmCisKKwkJZ2l0IGJyYW5jaCBCICYmCisJCWdpdCBjaGVja291dCAtYiBDICYmCisJCW1rZGlyIGEgJiYKKwkJdGVzdF93cml0ZV9saW5lcyBhIGIgYyBkIGUgZiBnID5hL2ZpbGUgJiYKKwkJZ2l0IGFkZCBhL2ZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gQyAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA+YSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gQiAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKwkJZ2l0IG1lcmdlIC1zIG91cnMgLW0gRDEgQ14wICYmCisJCWdpdCB0YWcgRDEgJiYKKworCQlnaXQgY2hlY2tvdXQgQl4wICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBDXjAgJiYKKwkJZ2l0IGNsZWFuIC1mZCAmJgorCQlnaXQgcm0gLXJmIGEvICYmCisJCWdpdCBybSBhICYmCisJCWdpdCBjYXQtZmlsZSAtcCBCOmEgPmEyICYmCisJCWdpdCBhZGQgYTIgJiYKKwkJZ2l0IGNvbW1pdCAtbSBEMiAmJgorCQlnaXQgdGFnIEQyICYmCisKKwkJZ2l0IGNoZWNrb3V0IENeMCAmJgorCQlnaXQgbWVyZ2UgLXMgb3VycyAtbSBFMSBCXjAgJiYKKwkJZ2l0IHRhZyBFMSAmJgorCisJCWdpdCBjaGVja291dCBDXjAgJiYKKwkJZ2l0IG1lcmdlIC1zIG91cnMgLW0gRTIgQl4wICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgYSBiIGMgZCBlIGYgZyBoID5hL2ZpbGUgJiYKKwkJZ2l0IGFkZCBhL2ZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtLWFtZW5kIC1DIEhFQUQgJiYKKwkJZ2l0IHRhZyBFMiAmJgorCisJCWdpdCBjaGVja291dCBDXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEJeMCAmJgorCQlnaXQgY2xlYW4gLWZkICYmCisJCWdpdCBybSAtcmYgYS8gJiYKKwkJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNiA3IDggPmEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCWdpdCBjb21taXQgLW0gRTMgJiYKKwkJZ2l0IHRhZyBFMyAmJgorCisJCWdpdCBjaGVja291dCBDXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEJeMCAmJgorCQlnaXQgY2xlYW4gLWZkICYmCisJCWdpdCBybSAtcmYgYS8gJiYKKwkJZ2l0IHJtIGEgJiYKKwkJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNiA3IDggPmEyICYmCisJCWdpdCBhZGQgYTIgJiYKKwkJZ2l0IGNvbW1pdCAtbSBFNCAmJgorCQlnaXQgdGFnIEU0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvZiBEMSAmIEUxIGZhaWxzIGJ1dCBoYXMgYXBwcm9wcmlhdGUgY29udGVudHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBkaXJlY3RvcnktZmlsZSByZXNldCAtLWhhcmQiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGlyZWN0b3J5LWZpbGUgY2xlYW4gLWZkcXgiICYmCisJKAorCQljZCBkaXJlY3RvcnktZmlsZSAmJgorCisJCWdpdCBjaGVja291dCBEMV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBFMV4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgICAgXAorCQkJQTppZ25vcmUtbWUgIEI6YSAmJgorCQlnaXQgcmV2LXBhcnNlICAgPmFjdHVhbCAgIFwKKwkJCTowOmlnbm9yZS1tZSA6MjphICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG9mIEUxICYgRDEgZmFpbHMgYnV0IGhhcyBhcHByb3ByaWF0ZSBjb250ZW50cycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGRpcmVjdG9yeS1maWxlIHJlc2V0IC0taGFyZCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBkaXJlY3RvcnktZmlsZSBjbGVhbiAtZmRxeCIgJiYKKwkoCisJCWNkIGRpcmVjdG9yeS1maWxlICYmCisKKwkJZ2l0IGNoZWNrb3V0IEUxXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEQxXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCAgICBcCisJCQlBOmlnbm9yZS1tZSAgQjphICYmCisJCWdpdCByZXYtcGFyc2UgICA+YWN0dWFsICAgXAorCQkJOjA6aWdub3JlLW1lIDozOmEgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb2YgRDEgJiBFMiBmYWlscyBidXQgaGFzIGFwcHJvcHJpYXRlIGNvbnRlbnRzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGlyZWN0b3J5LWZpbGUgcmVzZXQgLS1oYXJkIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGRpcmVjdG9yeS1maWxlIGNsZWFuIC1mZHF4IiAmJgorCSgKKwkJY2QgZGlyZWN0b3J5LWZpbGUgJiYKKworCQlnaXQgY2hlY2tvdXQgRDFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgRTJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0ICAgIFwKKwkJCUI6YSAgIEUyOmEvZmlsZSAgQzphL2ZpbGUgICBBOmlnbm9yZS1tZSAmJgorCQlnaXQgcmV2LXBhcnNlICAgPmFjdHVhbCAgIFwKKwkJCToyOmEgIDozOmEvZmlsZSAgOjE6YS9maWxlICA6MDppZ25vcmUtbWUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIGF+SEVBRAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb2YgRTIgJiBEMSBmYWlscyBidXQgaGFzIGFwcHJvcHJpYXRlIGNvbnRlbnRzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGlyZWN0b3J5LWZpbGUgcmVzZXQgLS1oYXJkIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGRpcmVjdG9yeS1maWxlIGNsZWFuIC1mZHF4IiAmJgorCSgKKwkJY2QgZGlyZWN0b3J5LWZpbGUgJiYKKworCQlnaXQgY2hlY2tvdXQgRTJeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgRDFeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0ICAgIFwKKwkJCUI6YSAgIEUyOmEvZmlsZSAgQzphL2ZpbGUgICBBOmlnbm9yZS1tZSAmJgorCQlnaXQgcmV2LXBhcnNlICAgPmFjdHVhbCAgIFwKKwkJCTozOmEgIDoyOmEvZmlsZSAgOjE6YS9maWxlICA6MDppZ25vcmUtbWUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIGF+RDFeMAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb2YgRDEgJiBFMyBzdWNjZWVkcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGRpcmVjdG9yeS1maWxlIHJlc2V0IC0taGFyZCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBkaXJlY3RvcnktZmlsZSBjbGVhbiAtZmRxeCIgJiYKKwkoCisJCWNkIGRpcmVjdG9yeS1maWxlICYmCisKKwkJZ2l0IGNoZWNrb3V0IEQxXjAgJiYKKworCQlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEUzXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCAgICBcCisJCQlBOmlnbm9yZS1tZSAgRTM6YSAmJgorCQlnaXQgcmV2LXBhcnNlICAgPmFjdHVhbCAgIFwKKwkJCTowOmlnbm9yZS1tZSA6MDphICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG9mIEQxICYgRTQgbm90aWZpZXMgdXNlciBhIGFuZCBhMiBhcmUgcmVsYXRlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGRpcmVjdG9yeS1maWxlIHJlc2V0IC0taGFyZCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBkaXJlY3RvcnktZmlsZSBjbGVhbiAtZmRxeCIgJiYKKwkoCisJCWNkIGRpcmVjdG9yeS1maWxlICYmCisKKwkJZ2l0IGNoZWNrb3V0IEQxXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEU0XjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCAgICAgICAgICAgICAgICAgIFwKKwkJCUE6aWdub3JlLW1lICBCOmEgICBEMTphICBFNDphMiAmJgorCQlnaXQgcmV2LXBhcnNlICAgPmFjdHVhbCAgICAgICAgICAgICAgICBcCisJCQk6MDppZ25vcmUtbWUgOjE6YX5UZW1wb3JhcnlcIG1lcmdlXCBicmFuY2hcIDIgIDoyOmEgIDozOmEyICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ21lcmdlIG9mIEQyICYgRTQgbWVyZ2VzIGEycyAmIHJlcG9ydHMgY29uZmxpY3QgZm9yIGEvZmlsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGRpcmVjdG9yeS1maWxlIHJlc2V0IC0taGFyZCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBkaXJlY3RvcnktZmlsZSBjbGVhbiAtZmRxeCIgJiYKKwkoCisJCWNkIGRpcmVjdG9yeS1maWxlICYmCisKKwkJZ2l0IGNoZWNrb3V0IEQyXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEU0XjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCAgICAgICAgICAgICAgICAgXAorCQkJQTppZ25vcmUtbWUgIEU0OmEyICBEMjphL2ZpbGUgJiYKKwkJZ2l0IHJldi1wYXJzZSAgID5hY3R1YWwgICAgICAgICAgICAgICBcCisJCQk6MDppZ25vcmUtbWUgOjA6YTIgIDoyOmEvZmlsZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjCisjIGNyaXNzLWNyb3NzIHdpdGggcmVuYW1lL3JlbmFtZSgxdG8yKS9tb2RpZnkgZm9sbG93ZWQgYnkKKyMgcmVuYW1lL3JlbmFtZSgydG8xKS9tb2RpZnk6CisjCisjICAgICAgQiAgIEQKKyMgICAgICBvLS0tbworIyAgICAgLyBcIC8gXAorIyAgQSBvICAgWCAgID8gRgorIyAgICAgXCAvIFwgLworIyAgICAgIG8tLS1vCisjICAgICAgQyAgIEUKKyMKKyMgICBDb21taXQgQTogbmV3IGZpbGU6IGEKKyMgICBDb21taXQgQjogcmVuYW1lIGEtPmIsIG1vZGlmeWluZyBieSBhZGRpbmcgYSBsaW5lCisjICAgQ29tbWl0IEM6IHJlbmFtZSBhLT5jCisjICAgQ29tbWl0IEQ6IG1lcmdlIEImQywgcmVzb2x2aW5nIGNvbmZsaWN0IGJ5IGtlZXBpbmcgY29udGVudHMgaW4gbmV3bmFtZQorIyAgIENvbW1pdCBFOiBtZXJnZSBCJkMsIHJlc29sdmluZyBjb25mbGljdCBzaW1pbGFyIHRvIEQgYnV0IGFkZGluZyBhbm90aGVyIGxpbmUKKyMKKyMgVGhlcmUgaXMgYSBjb25mbGljdCBtZXJnaW5nIEIgJiBDLCBidXQgb25lIG9mIGZpbGVuYW1lIG5vdCBvZiBmaWxlCisjIGNvbnRlbnQuICBXaG9ldmVyIGNyZWF0ZWQgRCBhbmQgRSBjaG9zZSBzcGVjaWZpYyByZXNvbHV0aW9ucyBmb3IgdGhhdAorIyBjb25mbGljdCByZXNvbHV0aW9uLiAgTm93LCBzaW5jZTogKDEpIHRoZXJlIGlzIG5vIGNvbnRlbnQgY29uZmxpY3QKKyMgbWVyZ2luZyBCICYgQywgKDIpIEQgZG9lcyBub3QgbW9kaWZ5IHRoYXQgbWVyZ2VkIGNvbnRlbnQgZnVydGhlciwgYW5kICgzKQorIyBib3RoIEQgJiBFIHJlc29sdmUgdGhlIG5hbWUgY29uZmxpY3QgaW4gdGhlIHNhbWUgd2F5LCB0aGUgbW9kaWZpY2F0aW9uIHRvCisjIG5ld25hbWUgaW4gRSBzaG91bGQgbm90IGNhdXNlIGFueSBjb25mbGljdHMgd2hlbiBpdCBpcyBtZXJnZWQgd2l0aCBELgorIyAoTm90ZSB0aGF0IHRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSBoYXZpbmcgdGhlIHZpcnR1YWwgbWVyZ2UgYmFzZSBoYXZlCisjIHRoZSBtZXJnZWQgY29udGVudHMgb2YgYiBhbmQgYyBzdG9yZWQgaW4gYSBmaWxlIG5hbWVkIGEsIHdoaWNoIHNlZW1zIGxpa2UKKyMgdGhlIG1vc3QgbG9naWNhbCBjaG9pY2UgYW55d2F5LikKKyMKKyMgQ29tbWVudCBmcm9tIEp1bmlvOiBJIGRvIG5vdCBuZWNlc3NhcmlseSBhZ3JlZSB3aXRoIHRoZSBjaG9pY2UgImEiLCBidXQKKyMgaXQgZmVlbHMgc291bmQgdG8gc2F5ICJCIGFuZCBDIGRvIG5vdCBhZ3JlZSB3aGF0IHRoZSBmaW5hbCBwYXRobmFtZQorIyBzaG91bGQgYmUsIGJ1dCB3ZSBrbm93IHRoaXMgY29udGVudCB3YXMgZGVyaXZlZCBmcm9tIHRoZSBjb21tb24gQTphIHNvIHdlCisjIHVzZSBvbmUgcGF0aCB3aG9zZSBuYW1lIGlzIGFyYml0cmFyeSBpbiB0aGUgdmlydHVhbCBtZXJnZSBiYXNlIFggYmV0d2VlbgorIyBEIGFuZCBFIiBhbmQgdGhlbiBmdXJ0aGVyIGxldCB0aGUgcmVuYW1lIGRldGVjdGlvbiB0byBub3RpY2UgdGhhdCB0aGF0CisjIGFyYml0cmFyeSBwYXRoIGdldHMgcmVuYW1lZCBiZXR3ZWVuIFgtRCB0byAibmV3bmFtZSIgYW5kIFgtRSBhbHNvIHRvCisjICJuZXduYW1lIiB0byByZXNvbHZlIGl0IGFzIGJvdGggc2lkZXMgcmVuYW1pbmcgaXQgdG8gdGhlIHNhbWUgbmV3CisjIG5hbWUuIEl0IGlzIGFraW4gdG8gd2hhdCB3ZSBkbyBhdCB0aGUgY29udGVudCBsZXZlbCwgaS5lLiAiQiBhbmQgQyBkbyBub3QKKyMgYWdyZWUgd2hhdCB0aGUgZmluYWwgY29udGVudHMgc2hvdWxkIGJlLCBzbyB3ZSBsZWF2ZSB0aGUgY29uZmxpY3QgbWFya2VyCisjIGJ1dCB0aGF0IG1heSBjYW5jZWwgb3V0IGF0IHRoZSBmaW5hbCBtZXJnZSBzdGFnZSIuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbmFtZS9yZW5hbWUoMXRvMikvbW9kaWZ5IGZvbGxvd2VkIGJ5IHdoYXQgbG9va3MgbGlrZSByZW5hbWUvcmVuYW1lKDJ0bzEpL21vZGlmeScgJworCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLXNxdWFyZWQtc3F1YXJlZCAmJgorCSgKKwkJY2QgcmVuYW1lLXNxdWFyZWQtc3F1YXJlZCAmJgorCisJCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuIiA+YSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSBBICYmCisJCWdpdCB0YWcgQSAmJgorCisJCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwkJZ2l0IG12IGEgYiAmJgorCQllY2hvIDcgPj5iICYmCisJCWdpdCBhZGQgLXUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIEMgQSAmJgorCQlnaXQgbXYgYSBjICYmCisJCWdpdCBjb21taXQgLW0gQyAmJgorCisJCWdpdCBjaGVja291dCAtcSBCXjAgJiYKKwkJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IC1zIG91cnMgQ14wICYmCisJCWdpdCBtdiBiIG5ld25hbWUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgY29tbWl0IENeMCBpbnRvIEhFQUQiICYmCisJCWdpdCB0YWcgRCAmJgorCisJCWdpdCBjaGVja291dCAtcSBDXjAgJiYKKwkJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IC1zIG91cnMgQl4wICYmCisJCWdpdCBtdiBjIG5ld25hbWUgJiYKKwkJcHJpbnRmICI3XG44XG4iID4+bmV3bmFtZSAmJgorCQlnaXQgYWRkIC11ICYmCisJCWdpdCBjb21taXQgLW0gIk1lcmdlIGNvbW1pdCBCXjAgaW50byBIRUFEIiAmJgorCQlnaXQgdGFnIEUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhbmRsZSByZW5hbWUvcmVuYW1lKDF0bzIpL21vZGlmeSBmb2xsb3dlZCBieSB3aGF0IGxvb2tzIGxpa2UgcmVuYW1lL3JlbmFtZSgydG8xKS9tb2RpZnknICcKKwkoCisJCWNkIHJlbmFtZS1zcXVhcmVkLXNxdWFyZWQgJiYKKworCQlnaXQgY2hlY2tvdXQgRF4wICYmCisKKwkJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBFXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQ6bmV3bmFtZSkgPSAkKGdpdCByZXYtcGFyc2UgRTpuZXduYW1lKQorCSkKKycKKworIworIyBjcmlzcy1jcm9zcyB3aXRoIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkLXNvdXJjZSArIHJlc29sdmFibGUgbW9kaWZ5L21vZGlmeToKKyMKKyMgICAgICBCICAgRAorIyAgICAgIG8tLS1vCisjICAgICAvIFwgLyBcCisjICBBIG8gICBYICAgPyBGCisjICAgICBcIC8gXCAvCisjICAgICAgby0tLW8KKyMgICAgICBDICAgRQorIworIyAgIENvbW1pdCBBOiBuZXcgZmlsZTogYQorIyAgIENvbW1pdCBCOiByZW5hbWUgYS0+YgorIyAgIENvbW1pdCBDOiByZW5hbWUgYS0+YywgYWRkIGRpZmZlcmVudCBhCisjICAgQ29tbWl0IEQ6IG1lcmdlIEImQywga2VlcGluZyBiJmMgYW5kIChuZXcpIGEgbW9kaWZpZWQgYXQgYmVnaW5uaW5nCisjICAgQ29tbWl0IEU6IG1lcmdlIEImQywga2VlcGluZyBiJmMgYW5kIChuZXcpIGEgbW9kaWZpZWQgYXQgZW5kCisjCisjIE1lcmdpbmcgY29tbWl0cyBEICYgRSBzaG91bGQgcmVzdWx0IGluIG5vIGNvbmZsaWN0OyBkb2luZyBzbyBjb3JyZWN0bHkKKyMgcmVxdWlyZXMgZ2V0dGluZyB0aGUgdmlydHVhbCBtZXJnZSBiYXNlIChmcm9tIG1lcmdpbmcgQiZDKSByaWdodCwgaGFuZGxpbmcKKyMgcmVuYW1pbmcgY2FyZWZ1bGx5IChib3RoIGluIHRoZSB2aXJ0dWFsIG1lcmdlIGJhc2UgYW5kIGxhdGVyKSwgYW5kIGdldHRpbmcKKyMgY29udGVudCBtZXJnZSBoYW5kbGVkLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjcmlzcy1jcm9zcyArIHJlbmFtZS9yZW5hbWUvYWRkLXNvdXJjZSArIG1vZGlmeS9tb2RpZnknICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlbmFtZS1yZW5hbWUtYWRkLXNvdXJjZSAmJgorCSgKKwkJY2QgcmVuYW1lLXJlbmFtZS1hZGQtc291cmNlICYmCisKKwkJcHJpbnRmICJsb3RzXG5vZlxud29yZHNcbmFuZFxuY29udGVudFxuIiA+YSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSBBICYmCisJCWdpdCB0YWcgQSAmJgorCisJCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwkJZ2l0IG12IGEgYiAmJgorCQlnaXQgY29tbWl0IC1tIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJCWdpdCBtdiBhIGMgJiYKKwkJcHJpbnRmICIyXG4zXG40XG41XG42XG43XG4iID5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tIEMgJiYKKworCQlnaXQgY2hlY2tvdXQgQl4wICYmCisJCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtcyBvdXJzIENeMCAmJgorCQlnaXQgY2hlY2tvdXQgQyAtLSBhIGMgJiYKKwkJbXYgYSBvbGRfYSAmJgorCQllY2hvIDEgPmEgJiYKKwkJY2F0IG9sZF9hID4+YSAmJgorCQlybSBvbGRfYSAmJgorCQlnaXQgYWRkIC11ICYmCisJCWdpdCBjb21taXQgLW0gIk1lcmdlIGNvbW1pdCBDXjAgaW50byBIRUFEIiAmJgorCQlnaXQgdGFnIEQgJiYKKworCQlnaXQgY2hlY2tvdXQgQ14wICYmCisJCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtcyBvdXJzIEJeMCAmJgorCQlnaXQgY2hlY2tvdXQgQiAtLSBiICYmCisJCWVjaG8gOCA+PmEgJiYKKwkJZ2l0IGFkZCAtdSAmJgorCQlnaXQgY29tbWl0IC1tICJNZXJnZSBjb21taXQgQl4wIGludG8gSEVBRCIgJiYKKwkJZ2l0IHRhZyBFCisJKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdkZXRlY3QgcmVuYW1lL3JlbmFtZS9hZGQtc291cmNlIGZvciB2aXJ0dWFsIG1lcmdlLWJhc2UnICcKKwkoCisJCWNkIHJlbmFtZS1yZW5hbWUtYWRkLXNvdXJjZSAmJgorCisJCWdpdCBjaGVja291dCBEXjAgJiYKKworCQlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEVeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG43XG44XG4iID5jb3JyZWN0ICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlBOmEgICBBOmEgICAgIFwKKwkJCWNvcnJlY3QgICAgICAgJiYKKwkJZ2l0IHJldi1wYXJzZSAgID5hY3R1YWwgIFwKKwkJCTowOmIgIDowOmMgICAgICAgJiYKKwkJZ2l0IGhhc2gtb2JqZWN0ID4+YWN0dWFsIFwKKwkJCWEgICAgICAgICAgICAgICAgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIworIyBjcmlzcy1jcm9zcyB3aXRoIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkLWRlc3QgKyBzaW1wbGUgbW9kaWZ5OgorIworIyAgICAgIEIgICBECisjICAgICAgby0tLW8KKyMgICAgIC8gXCAvIFwKKyMgIEEgbyAgIFggICA/IEYKKyMgICAgIFwgLyBcIC8KKyMgICAgICBvLS0tbworIyAgICAgIEMgICBFCisjCisjICAgQ29tbWl0IEE6IG5ldyBmaWxlOiBhCisjICAgQ29tbWl0IEI6IHJlbmFtZSBhLT5iLCBhZGQgYworIyAgIENvbW1pdCBDOiByZW5hbWUgYS0+YworIyAgIENvbW1pdCBEOiBtZXJnZSBCJkMsIGtlZXBpbmcgQTphIGFuZCBCOmMKKyMgICBDb21taXQgRTogbWVyZ2UgQiZDLCBrZWVwaW5nIEE6YSBhbmQgc2xpZ2h0bHkgbW9kaWZpZWQgYyBmcm9tIEIKKyMKKyMgTWVyZ2luZyBjb21taXRzIEQgJiBFIHNob3VsZCByZXN1bHQgaW4gbm8gY29uZmxpY3QuICBUaGUgdmlydHVhbCBtZXJnZQorIyBiYXNlIG9mIEIgJiBDIG5lZWRzIHRvIG5vdCBkZWxldGUgQjpjIGZvciB0aGF0IHRvIHdvcmssIHRob3VnaC4uLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjcmlzcy1jcm9zcytyZW5hbWUvcmVuYW1lL2FkZC1kZXN0ICsgc2ltcGxlIG1vZGlmeScgJworCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLXJlbmFtZS1hZGQtZGVzdCAmJgorCSgKKwkJY2QgcmVuYW1lLXJlbmFtZS1hZGQtZGVzdCAmJgorCisJCT5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tIEEgJiYKKwkJZ2l0IHRhZyBBICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIEIgQSAmJgorCQlnaXQgbXYgYSBiICYmCisJCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuIiA+YyAmJgorCQlnaXQgYWRkIGMgJiYKKwkJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIEMgQSAmJgorCQlnaXQgbXYgYSBjICYmCisJCWdpdCBjb21taXQgLW0gQyAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKwkJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IC1zIG91cnMgQ14wICYmCisJCWdpdCBtdiBiIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiRCBpcyBsaWtlIEIgYnV0IHJlbmFtZXMgYiBiYWNrIHRvIGEiICYmCisJCWdpdCB0YWcgRCAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKwkJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IC1zIG91cnMgQ14wICYmCisJCWdpdCBtdiBiIGEgJiYKKwkJZWNobyA4ID4+YyAmJgorCQlnaXQgYWRkIGMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiRSBsaWtlIEQgYnV0IGhhcyBtb2QgaW4gYyIgJiYKKwkJZ2l0IHRhZyBFCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2aXJ0dWFsIG1lcmdlIGJhc2UgaGFuZGxlcyByZW5hbWUvcmVuYW1lKDF0bzIpL2FkZC1kZXN0JyAnCisJKAorCQljZCByZW5hbWUtcmVuYW1lLWFkZC1kZXN0ICYmCisKKwkJZ2l0IGNoZWNrb3V0IEReMCAmJgorCisJCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgRV4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJQTphICAgRTpjICAgICAmJgorCQlnaXQgcmV2LXBhcnNlICAgPmFjdHVhbCBcCisJCQk6MDphICA6MDpjICAgICAgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIworIyBjcmlzcy1jcm9zcyB3aXRoIG1vZGlmeS9tb2RpZnkgb24gYSBzeW1saW5rOgorIworIyAgICAgIEIgICBECisjICAgICAgby0tLW8KKyMgICAgIC8gXCAvIFwKKyMgIEEgbyAgIFggICA/IEYKKyMgICAgIFwgLyBcIC8KKyMgICAgICBvLS0tbworIyAgICAgIEMgICBFCisjCisjICAgQ29tbWl0IEE6IHNpbXBsZSBzaW1saW5rIGZpY2tsZS0+bGFnb29uCisjICAgQ29tbWl0IEI6IHJlZGlyZWN0IGZpY2tsZS0+ZGlzbmV5bGFuZAorIyAgIENvbW1pdCBDOiByZWRpcmVjdCBmaWNrbGUtPmhvbWUKKyMgICBDb21taXQgRDogbWVyZ2UgQiZDLCByZXNvbHZpbmcgaW4gZmF2b3Igb2YgQgorIyAgIENvbW1pdCBFOiBtZXJnZSBCJkMsIHJlc29sdmluZyBpbiBmYXZvciBvZiBDCisjCisjIFRoaXMgaXMgYW4gb2J2aW91cyBtb2RpZnkvbW9kaWZ5IGNvbmZsaWN0IGZvciB0aGUgc3ltbGluayAnZmlja2xlJy4gIENhbgorIyBnaXQgZGV0ZWN0IGl0PworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzeW1saW5rIG1vZGlmeS9tb2RpZnknICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHN5bWxpbmstbW9kaWZ5LW1vZGlmeSAmJgorCSgKKwkJY2Qgc3ltbGluay1tb2RpZnktbW9kaWZ5ICYmCisKKwkJdGVzdF9sbl9zX2FkZCBsYWdvb24gZmlja2xlICYmCisJCWdpdCBjb21taXQgLW0gQSAmJgorCQlnaXQgdGFnIEEgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJCWdpdCBybSBmaWNrbGUgJiYKKwkJdGVzdF9sbl9zX2FkZCBkaXNuZXlsYW5kIGZpY2tsZSAmJgorCQlnaXQgY29tbWl0IC1tIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJCWdpdCBybSBmaWNrbGUgJiYKKwkJdGVzdF9sbl9zX2FkZCBob21lIGZpY2tsZSAmJgorCQlnaXQgYWRkIGZpY2tsZSAmJgorCQlnaXQgY29tbWl0IC1tIEMgJiYKKworCQlnaXQgY2hlY2tvdXQgLXEgQl4wICYmCisJCWdpdCBtZXJnZSAtcyBvdXJzIC1tIEQgQ14wICYmCisJCWdpdCB0YWcgRCAmJgorCisJCWdpdCBjaGVja291dCAtcSBDXjAgJiYKKwkJZ2l0IG1lcmdlIC1zIG91cnMgLW0gRSBCXjAgJiYKKwkJZ2l0IHRhZyBFCisJKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjaGVjayBzeW1saW5rIG1vZGlmeS9tb2RpZnknICcKKwkoCisJCWNkIHN5bWxpbmstbW9kaWZ5LW1vZGlmeSAmJgorCisJCWdpdCBjaGVja291dCBEXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEVeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0CisJKQorJworCisjCisjIGNyaXNzLWNyb3NzIHdpdGggYWRkL2FkZCBvZiBhIHN5bWxpbms6CisjCisjICAgICAgQiAgIEQKKyMgICAgICBvLS0tbworIyAgICAgLyBcIC8gXAorIyAgQSBvICAgWCAgID8gRgorIyAgICAgXCAvIFwgLworIyAgICAgIG8tLS1vCisjICAgICAgQyAgIEUKKyMKKyMgICBDb21taXQgQTogTm8gc3ltbGluayBvciBwYXRoIGV4aXN0cyB5ZXQKKyMgICBDb21taXQgQjogc2V0IHVwIHN5bWxpbms6IGZpY2tsZS0+ZGlzbmV5bGFuZAorIyAgIENvbW1pdCBDOiBzZXQgdXAgc3ltbGluazogZmlja2xlLT5ob21lCisjICAgQ29tbWl0IEQ6IG1lcmdlIEImQywgcmVzb2x2aW5nIGluIGZhdm9yIG9mIEIKKyMgICBDb21taXQgRTogbWVyZ2UgQiZDLCByZXNvbHZpbmcgaW4gZmF2b3Igb2YgQworIworIyBUaGlzIGlzIGFuIG9idmlvdXMgYWRkL2FkZCBjb25mbGljdCBmb3IgdGhlIHN5bWxpbmsgJ2ZpY2tsZScuICBDYW4KKyMgZ2l0IGRldGVjdCBpdD8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ltbGluayBhZGQvYWRkJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzeW1saW5rLWFkZC1hZGQgJiYKKwkoCisJCWNkIHN5bWxpbmstYWRkLWFkZCAmJgorCisJCXRvdWNoIGlnbm9yZW1lICYmCisJCWdpdCBhZGQgaWdub3JlbWUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBBICYmCisJCWdpdCB0YWcgQSAmJgorCisJCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwkJdGVzdF9sbl9zX2FkZCBkaXNuZXlsYW5kIGZpY2tsZSAmJgorCQlnaXQgY29tbWl0IC1tIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJCXRlc3RfbG5fc19hZGQgaG9tZSBmaWNrbGUgJiYKKwkJZ2l0IGFkZCBmaWNrbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBDICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1xIEJeMCAmJgorCQlnaXQgbWVyZ2UgLXMgb3VycyAtbSBEIENeMCAmJgorCQlnaXQgdGFnIEQgJiYKKworCQlnaXQgY2hlY2tvdXQgLXEgQ14wICYmCisJCWdpdCBtZXJnZSAtcyBvdXJzIC1tIEUgQl4wICYmCisJCWdpdCB0YWcgRQorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY2hlY2sgc3ltbGluayBhZGQvYWRkJyAnCisJKAorCQljZCBzeW1saW5rLWFkZC1hZGQgJiYKKworCQlnaXQgY2hlY2tvdXQgRF4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBFXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dAorCSkKKycKKworIworIyBjcmlzcy1jcm9zcyB3aXRoIG1vZGlmeS9tb2RpZnkgb24gYSBzdWJtb2R1bGU6CisjCisjICAgICAgQiAgIEQKKyMgICAgICBvLS0tbworIyAgICAgLyBcIC8gXAorIyAgQSBvICAgWCAgID8gRgorIyAgICAgXCAvIFwgLworIyAgICAgIG8tLS1vCisjICAgICAgQyAgIEUKKyMKKyMgICBDb21taXQgQTogc2ltcGxlIHN1Ym1vZHVsZSByZXBvCisjICAgQ29tbWl0IEI6IHVwZGF0ZSByZXBvCisjICAgQ29tbWl0IEM6IHVwZGF0ZSByZXBvIGRpZmZlcmVudGx5CisjICAgQ29tbWl0IEQ6IG1lcmdlIEImQywgcmVzb2x2aW5nIGluIGZhdm9yIG9mIEIKKyMgICBDb21taXQgRTogbWVyZ2UgQiZDLCByZXNvbHZpbmcgaW4gZmF2b3Igb2YgQworIworIyBUaGlzIGlzIGFuIG9idmlvdXMgbW9kaWZ5L21vZGlmeSBjb25mbGljdCBmb3IgdGhlIHN1Ym1vZHVsZSAncmVwbycuICBDYW4KKyMgZ2l0IGRldGVjdCBpdD8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3VibW9kdWxlIG1vZGlmeS9tb2RpZnknICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHN1Ym1vZHVsZS1tb2RpZnktbW9kaWZ5ICYmCisJKAorCQljZCBzdWJtb2R1bGUtbW9kaWZ5LW1vZGlmeSAmJgorCisJCXRlc3RfY3JlYXRlX3JlcG8gc3VibW9kICYmCisJCSgKKwkJCWNkIHN1Ym1vZCAmJgorCQkJdG91Y2ggZmlsZS1BICYmCisJCQlnaXQgYWRkIGZpbGUtQSAmJgorCQkJZ2l0IGNvbW1pdCAtbSBBICYmCisJCQlnaXQgdGFnIEEgJiYKKworCQkJZ2l0IGNoZWNrb3V0IC1iIEIgQSAmJgorCQkJdG91Y2ggZmlsZS1CICYmCisJCQlnaXQgYWRkIGZpbGUtQiAmJgorCQkJZ2l0IGNvbW1pdCAtbSBCICYmCisJCQlnaXQgdGFnIEIgJiYKKworCQkJZ2l0IGNoZWNrb3V0IC1iIEMgQSAmJgorCQkJdG91Y2ggZmlsZS1DICYmCisJCQlnaXQgYWRkIGZpbGUtQyAmJgorCQkJZ2l0IGNvbW1pdCAtbSBDICYmCisJCQlnaXQgdGFnIEMKKwkJKSAmJgorCisJCWdpdCAtQyBzdWJtb2QgcmVzZXQgLS1oYXJkIEEgJiYKKwkJZ2l0IGFkZCBzdWJtb2QgJiYKKwkJZ2l0IGNvbW1pdCAtbSBBICYmCisJCWdpdCB0YWcgQSAmJgorCisJCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwkJZ2l0IC1DIHN1Ym1vZCByZXNldCAtLWhhcmQgQiAmJgorCQlnaXQgYWRkIHN1Ym1vZCAmJgorCQlnaXQgY29tbWl0IC1tIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJCWdpdCAtQyBzdWJtb2QgcmVzZXQgLS1oYXJkIEMgJiYKKwkJZ2l0IGFkZCBzdWJtb2QgJiYKKwkJZ2l0IGNvbW1pdCAtbSBDICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1xIEJeMCAmJgorCQlnaXQgbWVyZ2UgLXMgb3VycyAtbSBEIENeMCAmJgorCQlnaXQgdGFnIEQgJiYKKworCQlnaXQgY2hlY2tvdXQgLXEgQ14wICYmCisJCWdpdCBtZXJnZSAtcyBvdXJzIC1tIEUgQl4wICYmCisJCWdpdCB0YWcgRQorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY2hlY2sgc3VibW9kdWxlIG1vZGlmeS9tb2RpZnknICcKKwkoCisJCWNkIHN1Ym1vZHVsZS1tb2RpZnktbW9kaWZ5ICYmCisKKwkJZ2l0IGNoZWNrb3V0IEReMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgRV4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQKKwkpCisnCisKKyMKKyMgY3Jpc3MtY3Jvc3Mgd2l0aCBhZGQvYWRkIG9uIGEgc3VibW9kdWxlOgorIworIyAgICAgIEIgICBECisjICAgICAgby0tLW8KKyMgICAgIC8gXCAvIFwKKyMgIEEgbyAgIFggICA/IEYKKyMgICAgIFwgLyBcIC8KKyMgICAgICBvLS0tbworIyAgICAgIEMgICBFCisjCisjICAgQ29tbWl0IEE6IG5vdGhpbmcgb2Ygbm90ZQorIyAgIENvbW1pdCBCOiBpbnRyb2R1Y2Ugc3VibW9kdWxlIHJlcG8KKyMgICBDb21taXQgQzogaW50cm9kdWNlIHN1Ym1vZHVsZSByZXBvIGF0IGRpZmZlcmVudCBjb21taXQKKyMgICBDb21taXQgRDogbWVyZ2UgQiZDLCByZXNvbHZpbmcgaW4gZmF2b3Igb2YgQgorIyAgIENvbW1pdCBFOiBtZXJnZSBCJkMsIHJlc29sdmluZyBpbiBmYXZvciBvZiBDCisjCisjIFRoaXMgaXMgYW4gb2J2aW91cyBhZGQvYWRkIGNvbmZsaWN0IGZvciB0aGUgc3VibW9kdWxlICdyZXBvJy4gIENhbgorIyBnaXQgZGV0ZWN0IGl0PworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdWJtb2R1bGUgYWRkL2FkZCcgJworCXRlc3RfY3JlYXRlX3JlcG8gc3VibW9kdWxlLWFkZC1hZGQgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZS1hZGQtYWRkICYmCisKKwkJdGVzdF9jcmVhdGVfcmVwbyBzdWJtb2QgJiYKKwkJKAorCQkJY2Qgc3VibW9kICYmCisJCQl0b3VjaCBmaWxlLUEgJiYKKwkJCWdpdCBhZGQgZmlsZS1BICYmCisJCQlnaXQgY29tbWl0IC1tIEEgJiYKKwkJCWdpdCB0YWcgQSAmJgorCisJCQlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJCQl0b3VjaCBmaWxlLUIgJiYKKwkJCWdpdCBhZGQgZmlsZS1CICYmCisJCQlnaXQgY29tbWl0IC1tIEIgJiYKKwkJCWdpdCB0YWcgQiAmJgorCisJCQlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJCQl0b3VjaCBmaWxlLUMgJiYKKwkJCWdpdCBhZGQgZmlsZS1DICYmCisJCQlnaXQgY29tbWl0IC1tIEMgJiYKKwkJCWdpdCB0YWcgQworCQkpICYmCisKKwkJdG91Y2ggaXJyZWxldmFudC1maWxlICYmCisJCWdpdCBhZGQgaXJyZWxldmFudC1maWxlICYmCisJCWdpdCBjb21taXQgLW0gQSAmJgorCQlnaXQgdGFnIEEgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJCWdpdCAtQyBzdWJtb2QgcmVzZXQgLS1oYXJkIEIgJiYKKwkJZ2l0IGFkZCBzdWJtb2QgJiYKKwkJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIEMgQSAmJgorCQlnaXQgLUMgc3VibW9kIHJlc2V0IC0taGFyZCBDICYmCisJCWdpdCBhZGQgc3VibW9kICYmCisJCWdpdCBjb21taXQgLW0gQyAmJgorCisJCWdpdCBjaGVja291dCAtcSBCXjAgJiYKKwkJZ2l0IG1lcmdlIC1zIG91cnMgLW0gRCBDXjAgJiYKKwkJZ2l0IHRhZyBEICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1xIENeMCAmJgorCQlnaXQgbWVyZ2UgLXMgb3VycyAtbSBFIEJeMCAmJgorCQlnaXQgdGFnIEUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2NoZWNrIHN1Ym1vZHVsZSBhZGQvYWRkJyAnCisJKAorCQljZCBzdWJtb2R1bGUtYWRkLWFkZCAmJgorCisJCWdpdCBjaGVja291dCBEXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEVeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0CisJKQorJworCisjCisjIGNyaXNzLWNyb3NzIHdpdGggY29uZmxpY3RpbmcgZW50cnkgdHlwZXM6CisjCisjICAgICAgQiAgIEQKKyMgICAgICBvLS0tbworIyAgICAgLyBcIC8gXAorIyAgQSBvICAgWCAgID8gRgorIyAgICAgXCAvIFwgLworIyAgICAgIG8tLS1vCisjICAgICAgQyAgIEUKKyMKKyMgICBDb21taXQgQTogbm90aGluZyBvZiBub3RlCisjICAgQ29tbWl0IEI6IGludHJvZHVjZSBzdWJtb2R1bGUgJ3BhdGgnCisjICAgQ29tbWl0IEM6IGludHJvZHVjZSBzeW1saW5rICdwYXRoJworIyAgIENvbW1pdCBEOiBtZXJnZSBCJkMsIHJlc29sdmluZyBpbiBmYXZvciBvZiBCCisjICAgQ29tbWl0IEU6IG1lcmdlIEImQywgcmVzb2x2aW5nIGluIGZhdm9yIG9mIEMKKyMKKyMgVGhpcyBpcyBhbiBvYnZpb3VzIGFkZC9hZGQgY29uZmxpY3QgZm9yICdwYXRoJy4gIENhbiBnaXQgZGV0ZWN0IGl0PworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb25mbGljdGluZyBlbnRyeSB0eXBlcyAoc3VibW9kdWxlIHZzIHN5bWxpbmspJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzdWJtb2R1bGUtc3ltbGluay1hZGQtYWRkICYmCisJKAorCQljZCBzdWJtb2R1bGUtc3ltbGluay1hZGQtYWRkICYmCisKKwkJdGVzdF9jcmVhdGVfcmVwbyBwYXRoICYmCisJCSgKKwkJCWNkIHBhdGggJiYKKwkJCXRvdWNoIGZpbGUtQiAmJgorCQkJZ2l0IGFkZCBmaWxlLUIgJiYKKwkJCWdpdCBjb21taXQgLW0gQiAmJgorCQkJZ2l0IHRhZyBCCisJCSkgJiYKKworCQl0b3VjaCBpcnJlbGV2YW50LWZpbGUgJiYKKwkJZ2l0IGFkZCBpcnJlbGV2YW50LWZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBBICYmCisJCWdpdCB0YWcgQSAmJgorCisJCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwkJZ2l0IC1DIHBhdGggcmVzZXQgLS1oYXJkIEIgJiYKKwkJZ2l0IGFkZCBwYXRoICYmCisJCWdpdCBjb21taXQgLW0gQiAmJgorCisJCWdpdCBjaGVja291dCAtYiBDIEEgJiYKKwkJcm0gLXJmIHBhdGgvICYmCisJCXRlc3RfbG5fc19hZGQgaXJyZWxldmFudC1maWxlIHBhdGggJiYKKwkJZ2l0IGNvbW1pdCAtbSBDICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1xIEJeMCAmJgorCQlnaXQgbWVyZ2UgLXMgb3VycyAtbSBEIENeMCAmJgorCQlnaXQgdGFnIEQgJiYKKworCQlnaXQgY2hlY2tvdXQgLXEgQ14wICYmCisJCWdpdCBtZXJnZSAtcyBvdXJzIC1tIEUgQl4wICYmCisJCWdpdCB0YWcgRQorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY2hlY2sgY29uZmxpY3RpbmcgZW50cnkgdHlwZXMgKHN1Ym1vZHVsZSB2cyBzeW1saW5rKScgJworCSgKKwkJY2Qgc3VibW9kdWxlLXN5bWxpbmstYWRkLWFkZCAmJgorCisJCWdpdCBjaGVja291dCBEXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEVeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0CisJKQorJworCisjCisjIGNyaXNzLWNyb3NzIHdpdGggcmVndWxhciBmaWxlcyB0aGF0IGhhdmUgY29uZmxpY3RpbmcgbW9kZXM6CisjCisjICAgICAgQiAgIEQKKyMgICAgICBvLS0tbworIyAgICAgLyBcIC8gXAorIyAgQSBvICAgWCAgID8gRgorIyAgICAgXCAvIFwgLworIyAgICAgIG8tLS1vCisjICAgICAgQyAgIEUKKyMKKyMgICBDb21taXQgQTogbm90aGluZyBvZiBub3RlCisjICAgQ29tbWl0IEI6IGludHJvZHVjZSBmaWxlIHNvdXJjZV9tZS5iYXNoLCBub3QgZXhlY3V0YWJsZQorIyAgIENvbW1pdCBDOiBpbnRyb2R1Y2UgZmlsZSBzb3VyY2VfbWUuYmFzaCwgZXhlY3V0YWJsZQorIyAgIENvbW1pdCBEOiBtZXJnZSBCJkMsIHJlc29sdmluZyBpbiBmYXZvciBvZiBCCisjICAgQ29tbWl0IEU6IG1lcmdlIEImQywgcmVzb2x2aW5nIGluIGZhdm9yIG9mIEMKKyMKKyMgVGhpcyBpcyBhbiBvYnZpb3VzIGFkZC9hZGQgbW9kZSBjb25mbGljdC4gIENhbiBnaXQgZGV0ZWN0IGl0PworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb25mbGljdGluZyBtb2RlcyBmb3IgcmVndWxhciBmaWxlJyAnCisJdGVzdF9jcmVhdGVfcmVwbyByZWd1bGFyLWZpbGUtbW9kZS1jb25mbGljdCAmJgorCSgKKwkJY2QgcmVndWxhci1maWxlLW1vZGUtY29uZmxpY3QgJiYKKworCQl0b3VjaCBpcnJlbGV2YW50LWZpbGUgJiYKKwkJZ2l0IGFkZCBpcnJlbGV2YW50LWZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBBICYmCisJCWdpdCB0YWcgQSAmJgorCisJCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwkJZWNobyAiY29tbWFuZF90b19ydW4iID5zb3VyY2VfbWUuYmFzaCAmJgorCQlnaXQgYWRkIHNvdXJjZV9tZS5iYXNoICYmCisJCWdpdCBjb21taXQgLW0gQiAmJgorCisJCWdpdCBjaGVja291dCAtYiBDIEEgJiYKKwkJZWNobyAiY29tbWFuZF90b19ydW4iID5zb3VyY2VfbWUuYmFzaCAmJgorCQlnaXQgYWRkIHNvdXJjZV9tZS5iYXNoICYmCisJCXRlc3RfY2htb2QgK3ggc291cmNlX21lLmJhc2ggJiYKKwkJZ2l0IGNvbW1pdCAtbSBDICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1xIEJeMCAmJgorCQlnaXQgbWVyZ2UgLXMgb3VycyAtbSBEIENeMCAmJgorCQlnaXQgdGFnIEQgJiYKKworCQlnaXQgY2hlY2tvdXQgLXEgQ14wICYmCisJCWdpdCBtZXJnZSAtcyBvdXJzIC1tIEUgQl4wICYmCisJCWdpdCB0YWcgRQorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY2hlY2sgY29uZmxpY3RpbmcgbW9kZXMgZm9yIHJlZ3VsYXIgZmlsZScgJworCSgKKwkJY2QgcmVndWxhci1maWxlLW1vZGUtY29uZmxpY3QgJiYKKworCQlnaXQgY2hlY2tvdXQgRF4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBFXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dAorCSkKKycKKworIyBTZXR1cDoKKyMgICAgICAgICAgTDEtLS1MMgorIyAgICAgICAgIC8gIFwgLyAgXAorIyAgIG1hc3RlciAgICBYICAgID8KKyMgICAgICAgICBcICAvIFwgIC8KKyMgICAgICAgICAgUjEtLS1SMgorIworIyBXaGVyZToKKyMgICBtYXN0ZXIgaGFzIHR3byBmaWxlcywgbmFtZWQgJ2InIGFuZCAnYScKKyMgICBicmFuY2hlcyBMMSBhbmQgUjEgYm90aCBtb2RpZnkgZWFjaCBvZiB0aGUgdHdvIGZpbGVzIGluIGNvbmZsaWN0aW5nIHdheXMKKyMKKyMgICBMMiBpcyBhIG1lcmdlIG9mIFIxIGludG8gTDE7IG1vcmUgb24gaXQgbGF0ZXIuCisjICAgUjIgaXMgYSBtZXJnZSBvZiBMMSBpbnRvIFIxOyBtb3JlIG9uIGl0IGxhdGVyLgorIworIyAgIFggaXMgYW4gYXV0by1nZW5lcmF0ZWQgbWVyZ2UtYmFzZSB1c2VkIHdoZW4gbWVyZ2luZyBMMiBhbmQgUjIuCisjICAgc2luY2UgWCBpcyBhIG1lcmdlIG9mIEwxIGFuZCBSMSwgaXQgaGFzIGNvbmZsaWN0aW5nIHZlcnNpb25zIG9mIGVhY2ggZmlsZQorIworIyAgIE1vcmUgYWJvdXQgTDIgYW5kIFIyOgorIyAgICAgLSBib3RoIHJlc29sdmUgdGhlIGNvbmZsaWN0cyBpbiAnYicgYW5kICdhJyBkaWZmZXJlbnRseQorIyAgICAgLSBMMiByZW5hbWVzICdiJyB0byAnbScKKyMgICAgIC0gUjIgcmVuYW1lcyAnYScgdG8gJ20nCisjCisjICAgSW4gdGhlIGVuZCwgaW4gZmlsZSAnbScgd2UgaGF2ZSBmb3VyIGRpZmZlcmVudCBjb25mbGljdGluZyBmaWxlcyAoZnJvbQorIyAgIHR3byB2ZXJzaW9ucyBvZiAnYicgYW5kIHR3byBvZiAnYScpLiAgSW4gYWRkaXRpb24sIGlmCisjICAgbWVyZ2UuY29uZmxpY3RzdHlsZSBpcyBkaWZmMywgdGhlbiB0aGUgYmFzZSB2ZXJzaW9uIGFsc28gaGFzCisjICAgY29uZmxpY3QgbWFya2VycyBvZiBpdHMgb3duLCBsZWFkaW5nIHRvIGEgdG90YWwgb2YgdGhyZWUgbGV2ZWxzIG9mCisjICAgY29uZmxpY3QgbWFya2Vycy4gIFRoaXMgaXMgYSBwcmV0dHkgd2VpcmQgY29ybmVyIGNhc2UsIGJ1dCB3ZSBqdXN0IHdhbnQKKyMgICB0byBlbnN1cmUgdGhhdCB3ZSBoYW5kbGUgaXQgYXMgd2VsbCBhcyBwcmFjdGljYWwuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG5lc3RlZCBjb25mbGljdHMnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIG5lc3RlZF9jb25mbGljdHMgJiYKKwkoCisJCWNkIG5lc3RlZF9jb25mbGljdHMgJiYKKworCQkjIENyZWF0ZSBzb21lIHJlbGF0ZWQgZmlsZXMgbm93CisJCWZvciBpIGluICQodGVzdF9zZXEgMSAxMCkKKwkJZG8KKwkJCWVjaG8gUmFuZG9tIGJhc2UgY29udGVudCBsaW5lICRpCisJCWRvbmUgPmluaXRpYWwgJiYKKworCQljcCBpbml0aWFsIGJfTDEgJiYKKwkJY3AgaW5pdGlhbCBiX1IxICYmCisJCWNwIGluaXRpYWwgYl9MMiAmJgorCQljcCBpbml0aWFsIGJfUjIgJiYKKwkJY3AgaW5pdGlhbCBhX0wxICYmCisJCWNwIGluaXRpYWwgYV9SMSAmJgorCQljcCBpbml0aWFsIGFfTDIgJiYKKwkJY3AgaW5pdGlhbCBhX1IyICYmCisKKwkJdGVzdF93cml0ZV9saW5lcyBiIGJfTDEgPj5iX0wxICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgYiBiX1IxID4+Yl9SMSAmJgorCQl0ZXN0X3dyaXRlX2xpbmVzIGIgYl9MMiA+PmJfTDIgJiYKKwkJdGVzdF93cml0ZV9saW5lcyBiIGJfUjIgPj5iX1IyICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgYSBhX0wxID4+YV9MMSAmJgorCQl0ZXN0X3dyaXRlX2xpbmVzIGEgYV9SMSA+PmFfUjEgJiYKKwkJdGVzdF93cml0ZV9saW5lcyBhIGFfTDIgPj5hX0wyICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgYSBhX1IyID4+YV9SMiAmJgorCisJCSMgU2V0dXAgb3JpZ2luYWwgY29tbWl0IChvciBtZXJnZS1iYXNlKSwgY29uc2lzdGluZyBvZgorCQkjIGZpbGVzIG5hbWVkICJiIiBhbmQgImEiCisJCWNwIGluaXRpYWwgYiAmJgorCQljcCBpbml0aWFsIGEgJiYKKwkJZWNobyBiID4+YiAmJgorCQllY2hvIGEgPj5hICYmCisJCWdpdCBhZGQgYiBhICYmCisJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCQlnaXQgYnJhbmNoIEwgJiYKKwkJZ2l0IGJyYW5jaCBSICYmCisKKwkJIyBIYW5kbGUgdGhlIGxlZnQgc2lkZQorCQlnaXQgY2hlY2tvdXQgTCAmJgorCQltdiAtZiBiX0wxIGIgJiYKKwkJbXYgLWYgYV9MMSBhICYmCisJCWdpdCBhZGQgYiBhICYmCisJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJ2ZXJzaW9uIEwxIG9mIGZpbGVzIiAmJgorCQlnaXQgdGFnIEwxICYmCisKKwkJIyBIYW5kbGUgdGhlIHJpZ2h0IHNpZGUKKwkJZ2l0IGNoZWNrb3V0IFIgJiYKKwkJbXYgLWYgYl9SMSBiICYmCisJCW12IC1mIGFfUjEgYSAmJgorCQlnaXQgYWRkIGIgYSAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAidmVyc2lvbiBSMSBvZiBmaWxlcyIgJiYKKwkJZ2l0IHRhZyBSMSAmJgorCisJCSMgQ3JlYXRlIGZpcnN0IG1lcmdlIG9uIGxlZnQgc2lkZQorCQlnaXQgY2hlY2tvdXQgTCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgUjEgJiYKKwkJbXYgLWYgYl9MMiBiICYmCisJCW12IC1mIGFfTDIgYSAmJgorCQlnaXQgYWRkIGIgYSAmJgorCQlnaXQgbXYgYiBtICYmCisJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJsZWZ0IG1lcmdlLCByZW5hbWUgYi0+bSIgJiYKKwkJZ2l0IHRhZyBMMiAmJgorCisJCSMgQ3JlYXRlIGZpcnN0IG1lcmdlIG9uIHJpZ2h0IHNpZGUKKwkJZ2l0IGNoZWNrb3V0IFIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEwxICYmCisJCW12IC1mIGJfUjIgYiAmJgorCQltdiAtZiBhX1IyIGEgJiYKKwkJZ2l0IGFkZCBiIGEgJiYKKwkJZ2l0IG12IGEgbSAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAicmlnaHQgbWVyZ2UsIHJlbmFtZSBhLT5tIiAmJgorCQlnaXQgdGFnIFIyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBuZXN0ZWQgY29uZmxpY3RzJyAnCisJKAorCQljZCBuZXN0ZWRfY29uZmxpY3RzICYmCisKKwkJZ2l0IGNsZWFuIC1mICYmCisJCU1BU1RFUj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBtYXN0ZXIpICYmCisJCWdpdCBjaGVja291dCBMMl4wICYmCisKKwkJIyBNZXJnZSBtdXN0IGZhaWw7IHRoZXJlIGlzIGEgY29uZmxpY3QKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmNvbmZsaWN0c3R5bGU9ZGlmZjMgbWVyZ2UgLXMgcmVjdXJzaXZlIFIyXjAgJiYKKworCQkjIE1ha2Ugc3VyZSB0aGUgaW5kZXggaGFzIHRoZSByaWdodCBudW1iZXIgb2YgZW50cmllcworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQkjIEVuc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IG51bWJlciBvZiB1bnRyYWNrZWQgZmlsZXMKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQkjIENyZWF0ZSBhIGFuZCBiIGZyb20gdmlydHVhbCBtZXJnZSBiYXNlIFgKKwkJZ2l0IGNhdC1maWxlIC1wIG1hc3RlcjphID5iYXNlICYmCisJCWdpdCBjYXQtZmlsZSAtcCBMMTphID5vdXJzICYmCisJCWdpdCBjYXQtZmlsZSAtcCBSMTphID50aGVpcnMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLS1kaWZmMyBcCisJCQktTCAiVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAxIiBcCisJCQktTCAiJE1BU1RFUiIgIFwKKwkJCS1MICJUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDIiIFwKKwkJCW91cnMgIFwKKwkJCWJhc2UgIFwKKwkJCXRoZWlycyAmJgorCQlzZWQgLWUgInMvXlwoWzx8PT5dXCkvXDFcMS8iIG91cnMgPnZtYl9hICYmCisKKwkJZ2l0IGNhdC1maWxlIC1wIG1hc3RlcjpiID5iYXNlICYmCisJCWdpdCBjYXQtZmlsZSAtcCBMMTpiID5vdXJzICYmCisJCWdpdCBjYXQtZmlsZSAtcCBSMTpiID50aGVpcnMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLS1kaWZmMyBcCisJCQktTCAiVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAxIiBcCisJCQktTCAiJE1BU1RFUiIgIFwKKwkJCS1MICJUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDIiIFwKKwkJCW91cnMgIFwKKwkJCWJhc2UgIFwKKwkJCXRoZWlycyAmJgorCQlzZWQgLWUgInMvXlwoWzx8PT5dXCkvXDFcMS8iIG91cnMgPnZtYl9iICYmCisKKwkJIyBDb21wYXJlIDoyOm0gdG8gZXhwZWN0ZWQgdmFsdWVzCisJCWdpdCBjYXQtZmlsZSAtcCBMMjptID5vdXJzICYmCisJCWdpdCBjYXQtZmlsZSAtcCBSMjpiID50aGVpcnMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLS1kaWZmMyAgXAorCQkJLUwgIkhFQUQ6bSIgICAgICAgICAgICAgICAgICAgIFwKKwkJCS1MICJtZXJnZWQgY29tbW9uIGFuY2VzdG9yczpiIiBcCisJCQktTCAiUjJeMDpiIiAgICAgICAgICAgICAgICAgICAgXAorCQkJb3VycyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXZtYl9iICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQl0aGVpcnMgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKwkJc2VkIC1lICJzL15cKFs8fD0+XVwpL1wxXDEvIiBvdXJzID5tX3N0YWdlXzIgJiYKKwkJZ2l0IGNhdC1maWxlIC1wIDoyOm0gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBtX3N0YWdlXzIgYWN0dWFsICYmCisKKwkJIyBDb21wYXJlIDozOm0gdG8gZXhwZWN0ZWQgdmFsdWVzCisJCWdpdCBjYXQtZmlsZSAtcCBMMjphID5vdXJzICYmCisJCWdpdCBjYXQtZmlsZSAtcCBSMjptID50aGVpcnMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLS1kaWZmMyAgXAorCQkJLUwgIkhFQUQ6YSIgICAgICAgICAgICAgICAgICAgIFwKKwkJCS1MICJtZXJnZWQgY29tbW9uIGFuY2VzdG9yczphIiBcCisJCQktTCAiUjJeMDptIiAgICAgICAgICAgICAgICAgICAgXAorCQkJb3VycyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXZtYl9hICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQl0aGVpcnMgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKwkJc2VkIC1lICJzL15cKFs8fD0+XVwpL1wxXDEvIiBvdXJzID5tX3N0YWdlXzMgJiYKKwkJZ2l0IGNhdC1maWxlIC1wIDozOm0gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBtX3N0YWdlXzMgYWN0dWFsICYmCisKKwkJIyBDb21wYXJlIG0gdG8gZXhwZWN0ZWQgY29udGVudHMKKwkJPmVtcHR5ICYmCisJCWNwIG1fc3RhZ2VfMiBleHBlY3RlZF9maW5hbF9tICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIC0tZGlmZjMgXAorCQkJLUwgIkhFQUQiICAgICAgICAgICAgICAgICAgICAgXAorCQkJLUwgIm1lcmdlZCBjb21tb24gYW5jZXN0b3JzIiAgXAorCQkJLUwgIlIyXjAiICAgICAgICAgICAgICAgICAgICAgXAorCQkJZXhwZWN0ZWRfZmluYWxfbSAgICAgICAgICAgICAgXAorCQkJZW1wdHkgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJbV9zdGFnZV8zICAgICAgICAgICAgICAgICAgICAgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWRfZmluYWxfbSBtCisJKQorJworCisjIFNldHVwOgorIyAgICAgICAgICBMMS0tLUwyLS0tTDMKKyMgICAgICAgICAvICBcIC8gIFwgLyAgXAorIyAgIG1hc3RlciAgICBYMSAgIFgyICAgPworIyAgICAgICAgIFwgIC8gXCAgLyBcICAvCisjICAgICAgICAgIFIxLS0tUjItLS1SMworIworIyBXaGVyZToKKyMgICBtYXN0ZXIgaGFzIG9uZSBmaWxlIG5hbWVkICdjb250ZW50JworIyAgIGJyYW5jaGVzIEwxIGFuZCBSMSBib3RoIG1vZGlmeSBlYWNoIG9mIHRoZSB0d28gZmlsZXMgaW4gY29uZmxpY3Rpbmcgd2F5cworIworIyAgIEw8bj4gKG4+MSkgaXMgYSBtZXJnZSBvZiBSPG4tMT4gaW50byBMPG4tMT4KKyMgICBSPG4+IChuPjEpIGlzIGEgbWVyZ2Ugb2YgTDxuLTE+IGludG8gUjxuLTE+CisjICAgTDxuPiBhbmQgUjxuPiByZXNvbHZlIHRoZSBjb25mbGljdHMgZGlmZmVyZW50bHkuCisjCisjICAgWDxuPiBpcyBhbiBhdXRvLWdlbmVyYXRlZCBtZXJnZS1iYXNlIHVzZWQgd2hlbiBtZXJnaW5nIEw8bisxPiBhbmQgUjxuKzE+LgorIyAgIEJ5IGNvbnN0cnVjdGlvbiwgWDEgaGFzIGNvbmZsaWN0IG1hcmtlcnMgZHVlIHRvIGNvbmZsaWN0aW5nIHZlcnNpb25zLgorIyAgIFgyLCBkdWUgdG8gdXNpbmcgbWVyZ2UuY29uZmxpY3RzdHlsZT0zLCBoYXMgbmVzdGVkIGNvbmZsaWN0IG1hcmtlcnMuCisjCisjICAgU28sIG1lcmdpbmcgUjMgaW50byBMMyB1c2luZyBtZXJnZS5jb25mbGljdHN0eWxlPTMgc2hvdWxkIHNob3cgdGhlCisjICAgbmVzdGVkIGNvbmZsaWN0IG1hcmtlcnMgZnJvbSBYMiBpbiB0aGUgYmFzZSB2ZXJzaW9uIC0tIHRoYXQgbWVhbnMgd2UKKyMgICBoYXZlIHRocmVlIGxldmVscyBvZiBjb25mbGljdCBtYXJrZXJzLiAgQ2FuIHdlIGRpc3Rpbmd1aXNoIGFsbCB0aHJlZT8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdmlydHVhbCBtZXJnZSBiYXNlIHdpdGggbmVzdGVkIGNvbmZsaWN0cycgJworCXRlc3RfY3JlYXRlX3JlcG8gdmlydHVhbF9tZXJnZV9iYXNlX2hhc19uZXN0ZWRfY29uZmxpY3RzICYmCisJKAorCQljZCB2aXJ0dWFsX21lcmdlX2Jhc2VfaGFzX25lc3RlZF9jb25mbGljdHMgJiYKKworCQkjIENyZWF0ZSBzb21lIHJlbGF0ZWQgZmlsZXMgbm93CisJCWZvciBpIGluICQodGVzdF9zZXEgMSAxMCkKKwkJZG8KKwkJCWVjaG8gUmFuZG9tIGJhc2UgY29udGVudCBsaW5lICRpCisJCWRvbmUgPmNvbnRlbnQgJiYKKworCQkjIFNldHVwIG9yaWdpbmFsIGNvbW1pdAorCQlnaXQgYWRkIGNvbnRlbnQgJiYKKwkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJCWdpdCBicmFuY2ggTCAmJgorCQlnaXQgYnJhbmNoIFIgJiYKKworCQkjIENyZWF0ZSBMMQorCQlnaXQgY2hlY2tvdXQgTCAmJgorCQllY2hvIGxlZnQgPj5jb250ZW50ICYmCisJCWdpdCBhZGQgY29udGVudCAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAidmVyc2lvbiBMMSBvZiBjb250ZW50IiAmJgorCQlnaXQgdGFnIEwxICYmCisKKwkJIyBDcmVhdGUgUjEKKwkJZ2l0IGNoZWNrb3V0IFIgJiYKKwkJZWNobyByaWdodCA+PmNvbnRlbnQgJiYKKwkJZ2l0IGFkZCBjb250ZW50ICYmCisJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJ2ZXJzaW9uIFIxIG9mIGNvbnRlbnQiICYmCisJCWdpdCB0YWcgUjEgJiYKKworCQkjIENyZWF0ZSBMMgorCQlnaXQgY2hlY2tvdXQgTCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuY29uZmxpY3RzdHlsZT1kaWZmMyBtZXJnZSBSMSAmJgorCQlnaXQgY2hlY2tvdXQgTDEgY29udGVudCAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAidmVyc2lvbiBMMiBvZiBjb250ZW50IiAmJgorCQlnaXQgdGFnIEwyICYmCisKKwkJIyBDcmVhdGUgUjIKKwkJZ2l0IGNoZWNrb3V0IFIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmNvbmZsaWN0c3R5bGU9ZGlmZjMgbWVyZ2UgTDEgJiYKKwkJZ2l0IGNoZWNrb3V0IFIxIGNvbnRlbnQgJiYKKwkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gInZlcnNpb24gUjIgb2YgY29udGVudCIgJiYKKwkJZ2l0IHRhZyBSMiAmJgorCisJCSMgQ3JlYXRlIEwzCisJCWdpdCBjaGVja291dCBMICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5jb25mbGljdHN0eWxlPWRpZmYzIG1lcmdlIFIyICYmCisJCWdpdCBjaGVja291dCBMMSBjb250ZW50ICYmCisJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJ2ZXJzaW9uIEwzIG9mIGNvbnRlbnQiICYmCisJCWdpdCB0YWcgTDMgJiYKKworCQkjIENyZWF0ZSBSMworCQlnaXQgY2hlY2tvdXQgUiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuY29uZmxpY3RzdHlsZT1kaWZmMyBtZXJnZSBMMiAmJgorCQlnaXQgY2hlY2tvdXQgUjEgY29udGVudCAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAidmVyc2lvbiBSMyBvZiBjb250ZW50IiAmJgorCQlnaXQgdGFnIFIzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB2aXJ0dWFsIG1lcmdlIGJhc2Ugd2l0aCBuZXN0ZWQgY29uZmxpY3RzJyAnCisJKAorCQljZCB2aXJ0dWFsX21lcmdlX2Jhc2VfaGFzX25lc3RlZF9jb25mbGljdHMgJiYKKworCQlNQVNURVI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgbWFzdGVyKSAmJgorCQlnaXQgY2hlY2tvdXQgTDNeMCAmJgorCisJCSMgTWVyZ2UgbXVzdCBmYWlsOyB0aGVyZSBpcyBhIGNvbmZsaWN0CisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5jb25mbGljdHN0eWxlPWRpZmYzIG1lcmdlIC1zIHJlY3Vyc2l2ZSBSM14wICYmCisKKwkJIyBNYWtlIHN1cmUgdGhlIGluZGV4IGhhcyB0aGUgcmlnaHQgbnVtYmVyIG9mIGVudHJpZXMKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJIyBFbnN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBudW1iZXIgb2YgdW50cmFja2VkIGZpbGVzCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJIyBDb21wYXJlIDpbMjNdOmNvbnRlbnQgdG8gZXhwZWN0ZWQgdmFsdWVzCisJCWdpdCByZXYtcGFyc2UgTDE6Y29udGVudCBSMTpjb250ZW50ID5leHBlY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSA6Mjpjb250ZW50IDozOmNvbnRlbnQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJIyBJbWl0YXRlIFgxIG1lcmdlIGJhc2UsIGV4Y2VwdCB3aXRob3V0IGxvbmcgZW5vdWdoIGNvbmZsaWN0CisJCSMgbWFya2VycyBiZWNhdXNlIGEgc3Vic2VxdWVudCBzZWQgd2lsbCBtb2RpZnkgdGhlbS4gIFB1dAorCQkjIHJlc3VsdCBpbnRvIHZtYi4KKwkJZ2l0IGNhdC1maWxlIC1wIG1hc3Rlcjpjb250ZW50ID5iYXNlICYmCisJCWdpdCBjYXQtZmlsZSAtcCBMOmNvbnRlbnQgPmxlZnQgJiYKKwkJZ2l0IGNhdC1maWxlIC1wIFI6Y29udGVudCA+cmlnaHQgJiYKKwkJY3AgbGVmdCBtZXJnZWQtb25jZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSAtLWRpZmYzIFwKKwkJCS1MICJUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDEiIFwKKwkJCS1MICIkTUFTVEVSIiAgXAorCQkJLUwgIlRlbXBvcmFyeSBtZXJnZSBicmFuY2ggMiIgXAorCQkJbWVyZ2VkLW9uY2UgXAorCQkJYmFzZSAgICAgICAgXAorCQkJcmlnaHQgICAgICAgJiYKKwkJc2VkIC1lICJzL15cKFs8fD0+XVwpL1wxXDFcMS8iIG1lcmdlZC1vbmNlID52bWIgJiYKKworCQkjIEltaXRhdGUgWDIgbWVyZ2UgYmFzZSwgb3ZlcndyaXRpbmcgdm1iLiAgTm90ZSB0aGF0IHdlCisJCSMgZXh0ZW5kIGJvdGggc2V0cyBvZiBjb25mbGljdCBtYXJrZXJzIHRvIG1ha2UgdGhlbSBsb25nZXIKKwkJIyB3aXRoIHRoZSBzZWQgY29tbWFuZC4KKwkJY3AgbGVmdCBtZXJnZWQtdHdpY2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLS1kaWZmMyBcCisJCQktTCAiVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAxIiBcCisJCQktTCAibWVyZ2VkIGNvbW1vbiBhbmNlc3RvcnMiICBcCisJCQktTCAiVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAyIiBcCisJCQltZXJnZWQtdHdpY2UgXAorCQkJdm1iICAgICAgICAgIFwKKwkJCXJpZ2h0ICAgICAgICAmJgorCQlzZWQgLWUgInMvXlwoWzx8PT5dXCkvXDFcMVwxLyIgbWVyZ2VkLXR3aWNlID52bWIgJiYKKworCQkjIENvbXBhcmUgOjE6Y29udGVudCB0byBleHBlY3RlZCB2YWx1ZQorCQlnaXQgY2F0LWZpbGUgLXAgOjE6Y29udGVudCA+YWN0dWFsICYmCisJCXRlc3RfY21wIHZtYiBhY3R1YWwgJiYKKworCQkjIERldGVybWluZSBleHBlY3RlZCBjb250ZW50IGluIGZpbmFsIG91dGVyIG1lcmdlLCBjb21wYXJlIHRvCisJCSMgd2hhdCB0aGUgbWVyZ2UgZ2VuZXJhdGVkLgorCQljcCAtZiBsZWZ0IGV4cGVjdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSAtLWRpZmYzICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCS1MICJIRUFEIiAgLUwgIm1lcmdlZCBjb21tb24gYW5jZXN0b3JzIiAgLUwgIlIzXjAiIFwKKwkJCWV4cGVjdCAgICAgdm1iICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgICAgICYmCisJCXRlc3RfY21wIGV4cGVjdCBjb250ZW50CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMzctbWVyZ2Utb3Vycy10aGVpcnMuc2ggYi90L3Q2MDM3LW1lcmdlLW91cnMtdGhlaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhZWJjNmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDM3LW1lcmdlLW91cnMtdGhlaXJzLnNoCkBAIC0wLDAgKzEsMTA4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nTWVyZ2UtcmVjdXJzaXZlIG91cnMgYW5kIHRoZWlycyB2YXJpYW50cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOQorCWRvCisJCWVjaG8gIiRpIgorCWRvbmUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwljcCBmaWxlIGVsaWYgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCXNlZCAtZSAicy8xL29uZS8iIC1lICJzLzkvbmluZS8iID5maWxlIDxlbGlmICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBvdXJzICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBIRUFEXiAmJgorCisJc2VkIC1lICJzLzkvbnVldmUvIiA+ZmlsZSA8ZWxpZiAmJgorCWdpdCBjb21taXQgLWEgLW0gdGhlaXJzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhaW4gcmVjdXJzaXZlIC0gc2hvdWxkIGNvbmZsaWN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIHNpZGUgJiYKKwlncmVwIG5pbmUgZmlsZSAmJgorCWdyZXAgbnVldmUgZmlsZSAmJgorCSEgZ3JlcCA5IGZpbGUgJiYKKwlncmVwIG9uZSBmaWxlICYmCisJISBncmVwIDEgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWN1cnNpdmUgZmF2b3VyaW5nIHRoZWlycycgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSAtWHRoZWlycyBzaWRlICYmCisJISBncmVwIG5pbmUgZmlsZSAmJgorCWdyZXAgbnVldmUgZmlsZSAmJgorCSEgZ3JlcCA5IGZpbGUgJiYKKwlncmVwIG9uZSBmaWxlICYmCisJISBncmVwIDEgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWN1cnNpdmUgZmF2b3VyaW5nIG91cnMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgLVggb3VycyBzaWRlICYmCisJZ3JlcCBuaW5lIGZpbGUgJiYKKwkhIGdyZXAgbnVldmUgZmlsZSAmJgorCSEgZ3JlcCA5IGZpbGUgJiYKKwlncmVwIG9uZSBmaWxlICYmCisJISBncmVwIDEgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaW5hcnkgZmlsZSB3aXRoIC1Yb3Vycy8tWHRoZWlycycgJworCWVjaG8gZmlsZSBiaW5hcnkgPi5naXRhdHRyaWJ1dGVzICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgLVggdGhlaXJzIHNpZGUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzaWRlIEhFQUQgLS0gZmlsZSAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIC1YIG91cnMgc2lkZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlciBIRUFEIC0tIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCBwYXNzZXMgLVggdG8gdW5kZXJseWluZyBtZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmIGdpdCBwdWxsIC1zIHJlY3Vyc2l2ZSAtWG91cnMgLiBzaWRlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYgZ2l0IHB1bGwgLXMgcmVjdXJzaXZlIC1YIG91cnMgLiBzaWRlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYgZ2l0IHB1bGwgLXMgcmVjdXJzaXZlIC1YdGhlaXJzIC4gc2lkZSAmJgorCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmIGdpdCBwdWxsIC1zIHJlY3Vyc2l2ZSAtWCB0aGVpcnMgLiBzaWRlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLXMgcmVjdXJzaXZlIC1YIGJvcmsgLiBzaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N5bWxpbmsgd2l0aCAtWG91cnMvLVh0aGVpcnMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiB0d28gbWFzdGVyICYmCisJbG4gLXMgdGFyZ2V0LXplcm8gbGluayAmJgorCWdpdCBhZGQgbGluayAmJgorCWdpdCBjb21taXQgLW0gImFkZCBsaW5rIHBvaW50aW5nIHRvIHplcm8iICYmCisKKwlsbiAtZiAtcyB0YXJnZXQtdHdvIGxpbmsgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbGluayBwb2ludGluZyB0byB0d28iIGxpbmsgJiYKKworCWdpdCBjaGVja291dCAtYiBvbmUgSEVBRF4gJiYKKwlsbiAtZiAtcyB0YXJnZXQtb25lIGxpbmsgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbGluayBwb2ludGluZyB0byBvbmUiIGxpbmsgJiYKKworCSMgd2UgZXhwZWN0IHN5bWJvbGljIGxpbmtzIG5vdCB0byByZXNvbHZlIGF1dG9tYXRpY2FsbHksIG9mIGNvdXJzZQorCWdpdCBjaGVja291dCBvbmVeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgdHdvICYmCisKKwkjIGZhdm9yIHRoZWlycyB0byByZXNvbHZlIHRvIHRhcmdldC10d28/CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBvbmVeMCAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgLVggdGhlaXJzIHR3byAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHR3byBIRUFEIGxpbmsgJiYKKworCSMgZmF2b3Igb3VycyB0byByZXNvbHZlIHRvIHRhcmdldC1vbmU/CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBvbmVeMCAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgLVggb3VycyB0d28gJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBvbmUgSEVBRCBsaW5rCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDM4LW1lcmdlLXRleHQtYXV0by5zaCBiL3QvdDYwMzgtbWVyZ2UtdGV4dC1hdXRvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVlOGQ1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDM4LW1lcmdlLXRleHQtYXV0by5zaApAQCAtMCwwICsxLDIxNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0NSTEYgbWVyZ2UgY29uZmxpY3QgYWNyb3NzIHRleHQ9YXV0byBjaGFuZ2UKKworKiBbbWFzdGVyXSByZW1vdmUgLmdpdGF0dHJpYnV0ZXMKKyAhIFtzaWRlXSBhZGQgbGluZSBmcm9tIGIKKy0tCisgKyBbc2lkZV0gYWRkIGxpbmUgZnJvbSBiCisqICBbbWFzdGVyXSByZW1vdmUgLmdpdGF0dHJpYnV0ZXMKKyogIFttYXN0ZXJeXSBhZGQgbGluZSBmcm9tIGEKKyogIFttYXN0ZXJ+Ml0gbm9ybWFsaXplIGZpbGUKKyorIFtzaWRlXl0gSW5pdGlhbAorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9oYXZlX3ByZXJlcSBTRURfU1RSSVBTX0NSICYmIFNFRF9PUFRJT05TPS1iCisKK2NvbXBhcmVfZmlsZXMgKCkgeworCXRyICdcMDE1XDAwMCcgUU4gPCIkMSIgPiIkMSIuZXhwZWN0ICYmCisJdHIgJ1wwMTVcMDAwJyBRTiA8IiQyIiA+IiQyIi5hY3R1YWwgJiYKKwl0ZXN0X2NtcCAiJDEiLmV4cGVjdCAiJDIiLmFjdHVhbCAmJgorCXJtICIkMSIuZXhwZWN0ICIkMiIuYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCisJZWNobyBmaXJzdCBsaW5lIHwgYXBwZW5kX2NyID5maWxlICYmCisJZWNobyBmaXJzdCBsaW5lID5jb250cm9sX2ZpbGUgJiYKKwllY2hvIG9ubHkgbGluZSA+aW5lcnRfZmlsZSAmJgorCisJZ2l0IGFkZCBmaWxlIGNvbnRyb2xfZmlsZSBpbmVydF9maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCIgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKworCWVjaG8gIiogdGV4dD1hdXRvIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvIGZpcnN0IGxpbmUgPmZpbGUgJiYKKwlnaXQgYWRkIC5naXRhdHRyaWJ1dGVzIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJub3JtYWxpemUgZmlsZSIgJiYKKworCWVjaG8gc2FtZSBsaW5lIHwgYXBwZW5kX2NyID4+ZmlsZSAmJgorCWVjaG8gc2FtZSBsaW5lID4+Y29udHJvbF9maWxlICYmCisJZ2l0IGFkZCBmaWxlIGNvbnRyb2xfZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImFkZCBsaW5lIGZyb20gYSIgJiYKKwlnaXQgdGFnIGEgJiYKKworCWdpdCBybSAuZ2l0YXR0cmlidXRlcyAmJgorCXJtIGZpbGUgJiYKKwlnaXQgY2hlY2tvdXQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInJlbW92ZSAuZ2l0YXR0cmlidXRlcyIgJiYKKwlnaXQgdGFnIGMgJiYKKworCWdpdCBjaGVja291dCBzaWRlICYmCisJZWNobyBzYW1lIGxpbmUgfCBhcHBlbmRfY3IgPj5maWxlICYmCisJZWNobyBzYW1lIGxpbmUgPj5jb250cm9sX2ZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgY29udHJvbF9maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgZnJvbSBiIiAmJgorCWdpdCB0YWcgYiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZnV6el9jb25mbGljdCgpIGhlbHBlcicgJworCWZ1enpfY29uZmxpY3QoKSB7CisJCXNlZCAkU0VEX09QVElPTlMgLWUgInMvXlwoWzw+PV0uLi4uLi5cKSAuKi9cMS8iICIkQCIKKwl9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01lcmdlIGFmdGVyIHNldHRpbmcgdGV4dD1hdXRvJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZmlyc3QgbGluZQorCXNhbWUgbGluZQorCUVPRgorCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBOQVRJVkVfQ1JMRjsgdGhlbgorCQlhcHBlbmRfY3IgPGV4cGVjdGVkID5leHBlY3RlZC50ZW1wICYmCisJCW12IGV4cGVjdGVkLnRlbXAgZXhwZWN0ZWQKKwlmaSAmJgorCWdpdCBjb25maWcgbWVyZ2UucmVub3JtYWxpemUgdHJ1ZSAmJgorCWdpdCBybSAtZnIgLiAmJgorCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBhICYmCisJZ2l0IG1lcmdlIGIgJiYKKwljb21wYXJlX2ZpbGVzIGV4cGVjdGVkIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTWVyZ2UgYWRkaXRpb24gb2YgdGV4dD1hdXRvIGVvbD1MRicgJworCWdpdCBjb25maWcgY29yZS5lb2wgbGYgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlmaXJzdCBsaW5lCisJc2FtZSBsaW5lCisJRU9GCisKKwlnaXQgY29uZmlnIG1lcmdlLnJlbm9ybWFsaXplIHRydWUgJiYKKwlnaXQgcm0gLWZyIC4gJiYKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZXNldCAtLWhhcmQgYiAmJgorCWdpdCBtZXJnZSBhICYmCisJY29tcGFyZV9maWxlcyAgZXhwZWN0ZWQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNZXJnZSBhZGRpdGlvbiBvZiB0ZXh0PWF1dG8gZW9sPUNSTEYnICcKKwlnaXQgY29uZmlnIGNvcmUuZW9sIGNybGYgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlmaXJzdCBsaW5lCisJc2FtZSBsaW5lCisJRU9GCisKKwlhcHBlbmRfY3IgPGV4cGVjdGVkID5leHBlY3RlZC50ZW1wICYmCisJbXYgZXhwZWN0ZWQudGVtcCBleHBlY3RlZCAmJgorCWdpdCBjb25maWcgbWVyZ2UucmVub3JtYWxpemUgdHJ1ZSAmJgorCWdpdCBybSAtZnIgLiAmJgorCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBiICYmCisJZWNobyA+JjIgIkFmdGVyIGdpdCByZXNldCAtLWhhcmQgYiIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgLS1lb2wgPiYyICYmCisJZ2l0IG1lcmdlIGEgJiYKKwljb21wYXJlX2ZpbGVzICBleHBlY3RlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0RldGVjdCBDUkxGL0xGIGNvbmZsaWN0IGFmdGVyIHNldHRpbmcgdGV4dD1hdXRvJyAnCisJZ2l0IGNvbmZpZyBjb3JlLmVvbCBuYXRpdmUgJiYKKwllY2hvICI8PDw8PDw8IiA+ZXhwZWN0ZWQgJiYKKwllY2hvIGZpcnN0IGxpbmUgPj5leHBlY3RlZCAmJgorCWVjaG8gc2FtZSBsaW5lID4+ZXhwZWN0ZWQgJiYKKwllY2hvID09PT09PT0gPj5leHBlY3RlZCAmJgorCWVjaG8gZmlyc3QgbGluZSB8IGFwcGVuZF9jciA+PmV4cGVjdGVkICYmCisJZWNobyBzYW1lIGxpbmUgfCBhcHBlbmRfY3IgPj5leHBlY3RlZCAmJgorCWVjaG8gIj4+Pj4+Pj4iID4+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIG1lcmdlLnJlbm9ybWFsaXplIGZhbHNlICYmCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYiAmJgorCWZ1enpfY29uZmxpY3QgZmlsZSA+ZmlsZS5mdXp6eSAmJgorCWNvbXBhcmVfZmlsZXMgZXhwZWN0ZWQgZmlsZS5mdXp6eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEZXRlY3QgTEYvQ1JMRiBjb25mbGljdCBmcm9tIGFkZGl0aW9uIG9mIHRleHQ9YXV0bycgJworCWVjaG8gIjw8PDw8PDwiID5leHBlY3RlZCAmJgorCWVjaG8gZmlyc3QgbGluZSB8IGFwcGVuZF9jciA+PmV4cGVjdGVkICYmCisJZWNobyBzYW1lIGxpbmUgfCBhcHBlbmRfY3IgPj5leHBlY3RlZCAmJgorCWVjaG8gPT09PT09PSA+PmV4cGVjdGVkICYmCisJZWNobyBmaXJzdCBsaW5lID4+ZXhwZWN0ZWQgJiYKKwllY2hvIHNhbWUgbGluZSA+PmV4cGVjdGVkICYmCisJZWNobyAiPj4+Pj4+PiIgPj5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgbWVyZ2UucmVub3JtYWxpemUgZmFsc2UgJiYKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZXNldCAtLWhhcmQgYiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBhICYmCisJZnV6el9jb25mbGljdCBmaWxlID5maWxlLmZ1enp5ICYmCisJY29tcGFyZV9maWxlcyBleHBlY3RlZCBmaWxlLmZ1enp5CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2NoZWNrb3V0IC1tIGFmdGVyIHNldHRpbmcgdGV4dD1hdXRvJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZmlyc3QgbGluZQorCXNhbWUgbGluZQorCUVPRgorCisJZ2l0IGNvbmZpZyBtZXJnZS5yZW5vcm1hbGl6ZSB0cnVlICYmCisJZ2l0IHJtIC1mciAuICYmCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgYSAtLSAuICYmCisJZ2l0IGNoZWNrb3V0IC1tIGIgJiYKKwljb21wYXJlX2ZpbGVzIGV4cGVjdGVkIGZpbGUKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY2hlY2tvdXQgLW0gYWRkaXRpb24gb2YgdGV4dD1hdXRvJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZmlyc3QgbGluZQorCXNhbWUgbGluZQorCUVPRgorCisJZ2l0IGNvbmZpZyBtZXJnZS5yZW5vcm1hbGl6ZSB0cnVlICYmCisJZ2l0IHJtIC1mciAuICYmCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgZmlsZSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBjaGVja291dCBiIC0tIC4gJiYKKwlnaXQgY2hlY2tvdXQgLW0gYSAmJgorCWNvbXBhcmVfZmlsZXMgZXhwZWN0ZWQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjaGVycnktcGljayBwYXRjaCBmcm9tIGFmdGVyIHRleHQ9YXV0byB3YXMgYWRkZWQnICcKKwlhcHBlbmRfY3IgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlmaXJzdCBsaW5lCisJc2FtZSBsaW5lCisJRU9GCisKKwlnaXQgY29uZmlnIG1lcmdlLnJlbm9ybWFsaXplIHRydWUgJiYKKwlnaXQgcm0gLWZyIC4gJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgYSA+ZXJyIDI+JjEgJiYKKwlncmVwICJbTm5db3RoaW5nIGFkZGVkIiBlcnIgJiYKKwljb21wYXJlX2ZpbGVzIGV4cGVjdGVkIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGVzdCBkZWxldGUvbm9ybWFsaXplIGNvbmZsaWN0JyAnCisJZ2l0IGNoZWNrb3V0IC1mIHNpZGUgJiYKKwlnaXQgcm0gLWZyIC4gJiYKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBybSBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIGZpbGUiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgYV4gJiYKKwlnaXQgbWVyZ2Ugc2lkZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMzktbWVyZ2UtaWdub3JlY2FzZS5zaCBiL3QvdDYwMzktbWVyZ2UtaWdub3JlY2FzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MzE4NTBkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAzOS1tZXJnZS1pZ25vcmVjYXNlLnNoCkBAIC0wLDAgKzEsNTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtbWVyZ2Ugd2l0aCBjYXNlLWNoYW5naW5nIHJlbmFtZSBvbiBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtJworCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIENBU0VfSU5TRU5TSVRJVkVfRlMKK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgY2FzZSBpbnNlbnNpdGl2ZSB0ZXN0cyAtIGNhc2Ugc2Vuc2l0aXZlIGZpbGUgc3lzdGVtJworCXRlc3RfZG9uZQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugd2l0aCBjYXNlLWNoYW5naW5nIHJlbmFtZScgJworCXRlc3QgJChnaXQgY29uZmlnIGNvcmUuaWdub3JlY2FzZSkgPSB0cnVlICYmCisJPlRlc3RDYXNlICYmCisJZ2l0IGFkZCBUZXN0Q2FzZSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBUZXN0Q2FzZSIgJiYKKwlnaXQgdGFnIGJhc2VsaW5lICYmCisJZ2l0IGNoZWNrb3V0IC1iIHdpdGgtY2FtZWwgJiYKKwk+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJpbnRlcnZlbmluZyBjb21taXQiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBybSBUZXN0Q2FzZSAmJgorCT50ZXN0Y2FzZSAmJgorCWdpdCBhZGQgdGVzdGNhc2UgJiYKKwlnaXQgY29tbWl0IC1tICJyZW5hbWUgdG8gdGVzdGNhc2UiICYmCisJZ2l0IGNoZWNrb3V0IHdpdGgtY2FtZWwgJiYKKwlnaXQgbWVyZ2UgbWFzdGVyIC1tICJtZXJnZSIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXN0Y2FzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB3aXRoIGNhc2UtY2hhbmdpbmcgcmVuYW1lIG9uIGJvdGggc2lkZXMnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlbGluZSAmJgorCWdpdCBicmFuY2ggLUQgd2l0aC1jYW1lbCAmJgorCWdpdCBjaGVja291dCAtYiB3aXRoLWNhbWVsICYmCisJZ2l0IG12IFRlc3RDYXNlIHRlc3RjYXNlICYmCisJZ2l0IGNvbW1pdCAtbSAicmVjYXNlIG9uIGJyYW5jaCIgJiYKKwk+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJpbnRlcnZlbmluZyBjb21taXQiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBybSBUZXN0Q2FzZSAmJgorCT50ZXN0Y2FzZSAmJgorCWdpdCBhZGQgdGVzdGNhc2UgJiYKKwlnaXQgY29tbWl0IC1tICJyZW5hbWUgdG8gdGVzdGNhc2UiICYmCisJZ2l0IGNoZWNrb3V0IHdpdGgtY2FtZWwgJiYKKwlnaXQgbWVyZ2UgbWFzdGVyIC1tICJtZXJnZSIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXN0Y2FzZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwNDAtdHJhY2tpbmctaW5mby5zaCBiL3QvdDYwNDAtdHJhY2tpbmctaW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZDE5MjJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjA0MC10cmFja2luZy1pbmZvLnNoCkBAIC0wLDAgKzEsMjkyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVtb3RlIHRyYWNraW5nIHN0YXRzJworCisuIC4vdGVzdC1saWIuc2gKKworYWR2YW5jZSAoKSB7CisJZWNobyAiJDEiID4iJDEiICYmCisJZ2l0IGFkZCAiJDEiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWFkdmFuY2UgYSAmJgorCWFkdmFuY2UgYiAmJgorCWFkdmFuY2UgYyAmJgorCWdpdCBjbG9uZSAuIHRlc3QgJiYKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGIxIG9yaWdpbiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJCWFkdmFuY2UgZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYjIgb3JpZ2luICYmCisJCWdpdCByZXNldCAtLWhhcmQgYjEgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGIzIG9yaWdpbiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJCWdpdCBjaGVja291dCAtYiBiNCBvcmlnaW4gJiYKKwkJYWR2YW5jZSBlICYmCisJCWFkdmFuY2UgZiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYnJva2VuYmFzZSBvcmlnaW4gJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGI1IC0tdHJhY2sgYnJva2VuYmFzZSAmJgorCQlhZHZhbmNlIGcgJiYKKwkJZ2l0IGJyYW5jaCAtZCBicm9rZW5iYXNlICYmCisJCWdpdCBjaGVja291dCAtYiBiNiBvcmlnaW4KKwkpICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZvbGxvd2VyIC0tdHJhY2sgbWFzdGVyICYmCisJYWR2YW5jZSBoCisnCisKK3Q2MDQwX3NjcmlwdD0ncy9eLi5cKGIuXCkgKlswLTlhLWZdKiBcKC4qXCkkL1wxIFwyL3AnCitjYXQgPmV4cGVjdCA8PFxFT0YKK2IxIFthaGVhZCAxLCBiZWhpbmQgMV0gZAorYjIgW2FoZWFkIDEsIGJlaGluZCAxXSBkCitiMyBbYmVoaW5kIDFdIGIKK2I0IFthaGVhZCAyXSBmCitiNSBbZ29uZV0gZworYjYgYworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtdicgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgYnJhbmNoIC12CisJKSB8CisJc2VkIC1uIC1lICIkdDYwNDBfc2NyaXB0IiA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitiMSBbb3JpZ2luL21hc3RlcjogYWhlYWQgMSwgYmVoaW5kIDFdIGQKK2IyIFtvcmlnaW4vbWFzdGVyOiBhaGVhZCAxLCBiZWhpbmQgMV0gZAorYjMgW29yaWdpbi9tYXN0ZXI6IGJlaGluZCAxXSBiCitiNCBbb3JpZ2luL21hc3RlcjogYWhlYWQgMl0gZgorYjUgW2Jyb2tlbmJhc2U6IGdvbmVdIGcKK2I2IFtvcmlnaW4vbWFzdGVyXSBjCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC12dicgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgYnJhbmNoIC12dgorCSkgfAorCXNlZCAtbiAtZSAiJHQ2MDQwX3NjcmlwdCIgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IChkaXZlcmdlZCBmcm9tIHVwc3RyZWFtKScgJworCSgKKwkJY2QgdGVzdCAmJiBnaXQgY2hlY2tvdXQgYjEKKwkpID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXZlIDEgYW5kIDEgZGlmZmVyZW50IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2l0aCBsb2NhbCB0cmFja2VkIGJyYW5jaCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgZm9sbG93ZXIgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImlzIGFoZWFkIG9mIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgKHVwc3RyZWFtIGlzIGdvbmUpJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjaGVja291dCBiNQorCSkgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImlzIGJhc2VkIG9uIC4qLCBidXQgdGhlIHVwc3RyZWFtIGlzIGdvbmUuIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgKHVwLXRvLWRhdGUgd2l0aCB1cHN0cmVhbSknICcKKwkoCisJCWNkIHRlc3QgJiYgZ2l0IGNoZWNrb3V0IGI2CisJKSA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiWW91ciBicmFuY2ggaXMgdXAgdG8gZGF0ZSB3aXRoIC5vcmlnaW4vbWFzdGVyIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIChkaXZlcmdlZCBmcm9tIHVwc3RyZWFtKScgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgY2hlY2tvdXQgYjEgPi9kZXYvbnVsbCAmJgorCQkjIHJlcG9ydHMgbm90aGluZyB0byBjb21taXQKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWRyeS1ydW4KKwkpID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXZlIDEgYW5kIDEgZGlmZmVyZW50IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzICh1cHN0cmVhbSBpcyBnb25lKScgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgY2hlY2tvdXQgYjUgPi9kZXYvbnVsbCAmJgorCQkjIHJlcG9ydHMgbm90aGluZyB0byBjb21taXQKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWRyeS1ydW4KKwkpID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJpcyBiYXNlZCBvbiAuKiwgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAodXAtdG8tZGF0ZSB3aXRoIHVwc3RyZWFtKScgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgY2hlY2tvdXQgYjYgPi9kZXYvbnVsbCAmJgorCQkjIHJlcG9ydHMgbm90aGluZyB0byBjb21taXQKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWRyeS1ydW4KKwkpID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJZb3VyIGJyYW5jaCBpcyB1cCB0byBkYXRlIHdpdGggLm9yaWdpbi9tYXN0ZXIiIGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyMjIGIxLi4ub3JpZ2luL21hc3RlciBbYWhlYWQgMSwgYmVoaW5kIDFdCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIC1iIChkaXZlcmdlZCBmcm9tIHVwc3RyZWFtKScgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgY2hlY2tvdXQgYjEgPi9kZXYvbnVsbCAmJgorCQlnaXQgc3RhdHVzIC1zIC1iIHwgaGVhZCAtMQorCSkgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIyMgYjEuLi5vcmlnaW4vbWFzdGVyIFtkaWZmZXJlbnRdCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIC1iIC0tbm8tYWhlYWQtYmVoaW5kIChkaXZlcmdlZCBmcm9tIHVwc3RyZWFtKScgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgY2hlY2tvdXQgYjEgPi9kZXYvbnVsbCAmJgorCQlnaXQgc3RhdHVzIC1zIC1iIC0tbm8tYWhlYWQtYmVoaW5kIHwgaGVhZCAtMQorCSkgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIyMgYjEuLi5vcmlnaW4vbWFzdGVyIFtkaWZmZXJlbnRdCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzLmFoZWFkYmVoaW5kPWZhbHNlIHN0YXR1cyAtcyAtYiAoZGl2ZXJnZWQgZnJvbSB1cHN0cmVhbSknICcKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IGNoZWNrb3V0IGIxID4vZGV2L251bGwgJiYKKwkJZ2l0IC1jIHN0YXR1cy5haGVhZGJlaGluZD1mYWxzZSBzdGF0dXMgLXMgLWIgfCBoZWFkIC0xCisJKSA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitPbiBicmFuY2ggYjEKK1lvdXIgYnJhbmNoIGFuZCAnb3JpZ2luL21hc3RlcicgaGF2ZSBkaXZlcmdlZCwKK2FuZCBoYXZlIDEgYW5kIDEgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLWxvbmcgLS1icmFuY2gnICcKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IGNoZWNrb3V0IGIxID4vZGV2L251bGwgJiYKKwkJZ2l0IHN0YXR1cyAtLWxvbmcgLWIgfCBoZWFkIC0zCisJKSA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC0tbG9uZyAtLWJyYW5jaCcgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgY2hlY2tvdXQgYjEgPi9kZXYvbnVsbCAmJgorCQlnaXQgLWMgc3RhdHVzLmFoZWFkYmVoaW5kPXRydWUgc3RhdHVzIC0tbG9uZyAtYiB8IGhlYWQgLTMKKwkpID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK09uIGJyYW5jaCBiMQorWW91ciBicmFuY2ggYW5kICdvcmlnaW4vbWFzdGVyJyByZWZlciB0byBkaWZmZXJlbnQgY29tbWl0cy4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLS1sb25nIC0tYnJhbmNoIC0tbm8tYWhlYWQtYmVoaW5kJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjaGVja291dCBiMSA+L2Rldi9udWxsICYmCisJCWdpdCBzdGF0dXMgLS1sb25nIC1iIC0tbm8tYWhlYWQtYmVoaW5kIHwgaGVhZCAtMgorCSkgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cy5haGVhZGJlaGluZD1mYWxzZSBzdGF0dXMgLS1sb25nIC0tYnJhbmNoJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjaGVja291dCBiMSA+L2Rldi9udWxsICYmCisJCWdpdCAtYyBzdGF0dXMuYWhlYWRiZWhpbmQ9ZmFsc2Ugc3RhdHVzIC0tbG9uZyAtYiB8IGhlYWQgLTIKKwkpID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyMjIGI1Li4uYnJva2VuYmFzZSBbZ29uZV0KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLWIgKHVwc3RyZWFtIGlzIGdvbmUpJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjaGVja291dCBiNSA+L2Rldi9udWxsICYmCisJCWdpdCBzdGF0dXMgLXMgLWIgfCBoZWFkIC0xCisJKSA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisjIyBiNi4uLm9yaWdpbi9tYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLWIgKHVwLXRvLWRhdGUgd2l0aCB1cHN0cmVhbSknICcKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IGNoZWNrb3V0IGI2ID4vZGV2L251bGwgJiYKKwkJZ2l0IHN0YXR1cyAtcyAtYiB8IGhlYWQgLTEKKwkpID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIHRvIHRyYWNrIGxpZ2h0d2VpZ2h0IHRhZ3MnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyBsaWdodCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS10cmFjayBsaWdodHRyYWNrIGxpZ2h0ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICEgInNldCB1cCB0byB0cmFjayIgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IGxpZ2h0dHJhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCB0byB0cmFjayBhbm5vdGF0ZWQgdGFncycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgdGFnIC1tIGhlYXZ5IGhlYXZ5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXRyYWNrIGhlYXZ5dHJhY2sgaGVhdnkgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgISAic2V0IHVwIHRvIHRyYWNrIiBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgaGVhdnl0cmFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNldC11cHN0cmVhbS10byBkb2VzIG5vdCBjaGFuZ2UgYnJhbmNoJyAnCisJZ2l0IGJyYW5jaCBmcm9tLW1hc3RlciBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIG1hc3RlciBmcm9tLW1hc3RlciAmJgorCWdpdCBicmFuY2ggZnJvbS1tYXN0ZXIyIG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgYnJhbmNoLmZyb20tbWFzdGVyMi5tZXJnZSA+IGFjdHVhbCAmJgorCWdpdCByZXYtbGlzdCBmcm9tLW1hc3RlcjIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2Zyb20tbWFzdGVyMiBmcm9tLW1hc3RlcjJeICYmCisJZ2l0IHJldi1wYXJzZSBmcm9tLW1hc3RlcjIgPmV4cGVjdDIgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIG1hc3RlciBmcm9tLW1hc3RlcjIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5mcm9tLW1hc3Rlci5tZXJnZSA+IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgZnJvbS1tYXN0ZXIyID5hY3R1YWwyICYmCisJZ3JlcCAtcSAiXnJlZnMvaGVhZHMvbWFzdGVyJCIgYWN0dWFsICYmCisJY21wIGV4cGVjdDIgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNldC11cHN0cmVhbS10byBAey0xfScgJworCWdpdCBjaGVja291dCBmb2xsb3dlciAmJgorCWdpdCBjaGVja291dCBmcm9tLW1hc3RlcjIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5mcm9tLW1hc3RlcjIubWVyZ2UgPiBleHBlY3QyICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBAey0xfSBmcm9tLW1hc3RlciAmJgorCWdpdCBjb25maWcgYnJhbmNoLmZyb20tbWFzdGVyLm1lcmdlID4gYWN0dWFsICYmCisJZ2l0IGNvbmZpZyBicmFuY2guZnJvbS1tYXN0ZXIyLm1lcmdlID4gYWN0dWFsMiAmJgorCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gZm9sbG93ZXIgZnJvbS1tYXN0ZXIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5mcm9tLW1hc3Rlci5tZXJnZSA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdDIgYWN0dWFsMiAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDQxLWJpc2VjdC1zdWJtb2R1bGUuc2ggYi90L3Q2MDQxLWJpc2VjdC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjJiOGEyZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwNDEtYmlzZWN0LXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmlzZWN0IGNhbiBoYW5kbGUgc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCisKK2dpdF9iaXNlY3QgKCkgeworCWdpdCBzdGF0dXMgLXN1ID5leHBlY3QgJiYKKwlscyAtMXBSICogPj5leHBlY3QgJiYKKwl0YXIgY2YgIiRUUkFTSF9ESVJFQ1RPUlkvdG1wLnRhciIgKiAmJgorCUdPT0Q9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0ICIkMSIgJiYKKwllY2hvICJmb28iID5iYXIgJiYKKwlnaXQgYWRkIGJhciAmJgorCWdpdCBjb21taXQgLW0gImJpc2VjdCBiYWQiICYmCisJQkFEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF5eICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBnb29kICRHT09EICYmCisJcm0gLXJmICogJiYKKwl0YXIgeGYgIiRUUkFTSF9ESVJFQ1RPUlkvdG1wLnRhciIgJiYKKwlnaXQgc3RhdHVzIC1zdSA+YWN0dWFsICYmCisJbHMgLTFwUiAqID4+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBiaXNlY3QgYmFkICRCQUQKK30KKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXRfYmlzZWN0IgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwNDItbWVyZ2UtcmVuYW1lLWNvcm5lci1jYXNlcy5zaCBiL3QvdDYwNDItbWVyZ2UtcmVuYW1lLWNvcm5lci1jYXNlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMTYzODkzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjA0Mi1tZXJnZS1yZW5hbWUtY29ybmVyLWNhc2VzLnNoCkBAIC0wLDAgKzEsMTQzNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249InJlY3Vyc2l2ZSBtZXJnZSBjb3JuZXIgY2FzZXMgdy8gcmVuYW1lcyBidXQgbm90IGNyaXNzLWNyb3NzZXMiCisjIHQ2MDM2IGhhcyBjb3JuZXIgY2FzZXMgdGhhdCBpbnZvbHZlIGJvdGggY3Jpc3MtY3Jvc3MgbWVyZ2VzIGFuZCByZW5hbWVzCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3NldHVwX3JlbmFtZV9kZWxldGVfdW50cmFja2VkICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlbmFtZS1kZWxldGUtdW50cmFja2VkICYmCisJKAorCQljZCByZW5hbWUtZGVsZXRlLXVudHJhY2tlZCAmJgorCisJCWVjaG8gIkEgcHJldHR5IGluc2NyaXB0aW9uIiA+cmluZyAmJgorCQlnaXQgYWRkIHJpbmcgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gYmVnaW5uaW5nICYmCisKKwkJZ2l0IGJyYW5jaCBwZW9wbGUgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlbmFtZS10aGUtcmluZyAmJgorCQlnaXQgbXYgcmluZyBvbmUtcmluZy10by1ydWxlLXRoZW0tYWxsICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tIGZ1bGxuYW1lICYmCisKKwkJZ2l0IGNoZWNrb3V0IHBlb3BsZSAmJgorCQlnaXQgcm0gcmluZyAmJgorCQllY2hvIGdvbGx1bSA+b3duZXIgJiYKKwkJZ2l0IGFkZCBvd25lciAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSB0cmFjay1wZW9wbGUtaW5zdGVhZC1vZi1vYmplY3RzICYmCisJCWVjaG8gIk15eXkgUFJFQ0lPVVNTUyIgPnJpbmcKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIkRvZXMgZ2l0IHByZXNlcnZlIEdvbGx1bSdzIHByZWNpb3VzIGFydGlmYWN0PyIgJworCXRlc3Rfc2V0dXBfcmVuYW1lX2RlbGV0ZV91bnRyYWNrZWQgJiYKKwkoCisJCWNkIHJlbmFtZS1kZWxldGUtdW50cmFja2VkICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSByZW5hbWUtdGhlLXJpbmcgJiYKKworCQkjIE1ha2Ugc3VyZSBnaXQgZGlkIG5vdCBkZWxldGUgYW4gdW50cmFja2VkIGZpbGUKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgcmluZworCSkKKycKKworIyBUZXN0Y2FzZSBzZXR1cCBmb3IgcmVuYW1lL21vZGlmeS9hZGQtc291cmNlOgorIyAgIENvbW1pdCBBOiBuZXcgZmlsZTogYQorIyAgIENvbW1pdCBCOiBtb2RpZnkgYSBzbGlnaHRseQorIyAgIENvbW1pdCBDOiByZW5hbWUgYS0+YiwgYWRkIGNvbXBsZXRlbHkgZGlmZmVyZW50IGEKKyMKKyMgV2Ugc2hvdWxkIGJlIGFibGUgdG8gbWVyZ2UgQiAmIEMgY2xlYW5seQorCit0ZXN0X3NldHVwX3JlbmFtZV9tb2RpZnlfYWRkX3NvdXJjZSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyByZW5hbWUtbW9kaWZ5LWFkZC1zb3VyY2UgJiYKKwkoCisJCWNkIHJlbmFtZS1tb2RpZnktYWRkLXNvdXJjZSAmJgorCisJCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuIiA+YSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSBBICYmCisJCWdpdCB0YWcgQSAmJgorCisJCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwkJZWNobyA4ID4+YSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIEMgQSAmJgorCQlnaXQgbXYgYSBiICYmCisJCWVjaG8gc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50ID5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tIEMKKwkpCit9CisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3JlbmFtZS9tb2RpZnkvYWRkLXNvdXJjZSBjb25mbGljdCByZXNvbHZhYmxlJyAnCisJdGVzdF9zZXR1cF9yZW5hbWVfbW9kaWZ5X2FkZF9zb3VyY2UgJiYKKwkoCisJCWNkIHJlbmFtZS1tb2RpZnktYWRkLXNvdXJjZSAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKworCQlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIENeMCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlCOmEgICBDOmEgICAgICYmCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQliICAgICBjICAgICAgICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3Rfc2V0dXBfYnJlYWtfZGV0ZWN0aW9uXzEgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gYnJlYWstZGV0ZWN0aW9uLTEgJiYKKwkoCisJCWNkIGJyZWFrLWRldGVjdGlvbi0xICYmCisKKwkJcHJpbnRmICIxXG4yXG4zXG40XG41XG4iID5hICYmCisJCWVjaG8gZm9vID5iICYmCisJCWdpdCBhZGQgYSBiICYmCisJCWdpdCBjb21taXQgLW0gQSAmJgorCQlnaXQgdGFnIEEgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJCWdpdCBtdiBhIGMgJiYKKwkJZWNobyAiQ29tcGxldGVseSBkaWZmZXJlbnQgY29udGVudCIgPmEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCWdpdCBjb21taXQgLW0gQiAmJgorCisJCWdpdCBjaGVja291dCAtYiBDIEEgJiYKKwkJZWNobyA2ID4+YSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSBDCisJKQorfQorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjb25mbGljdCBjYXVzZWQgaWYgcmVuYW1lIG5vdCBkZXRlY3RlZCcgJworCXRlc3Rfc2V0dXBfYnJlYWtfZGV0ZWN0aW9uXzEgJiYKKwkoCisJCWNkIGJyZWFrLWRldGVjdGlvbi0xICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1xIENeMCAmJgorCQlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBjICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlCOmEgICBBOmIgICAgICYmCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDphICA6MDpiICAgICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3Rfc2V0dXBfYnJlYWtfZGV0ZWN0aW9uXzIgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gYnJlYWstZGV0ZWN0aW9uLTIgJiYKKwkoCisJCWNkIGJyZWFrLWRldGVjdGlvbi0yICYmCisKKwkJcHJpbnRmICIxXG4yXG4zXG40XG41XG4iID5hICYmCisJCWVjaG8gZm9vID5iICYmCisJCWdpdCBhZGQgYSBiICYmCisJCWdpdCBjb21taXQgLW0gQSAmJgorCQlnaXQgdGFnIEEgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgRCBBICYmCisJCWVjaG8gNyA+PmEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCWdpdCBtdiBhIGMgJiYKKwkJZWNobyAiQ29tcGxldGVseSBkaWZmZXJlbnQgY29udGVudCIgPmEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCWdpdCBjb21taXQgLW0gRCAmJgorCisJCWdpdCBjaGVja291dCAtYiBFIEEgJiYKKwkJZ2l0IHJtIGEgJiYKKwkJZWNobyAiQ29tcGxldGVseSBkaWZmZXJlbnQgY29udGVudCIgPj5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tIEUKKwkpCit9CisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ21pc3NlZCBjb25mbGljdCBpZiByZW5hbWUgbm90IGRldGVjdGVkJyAnCisJdGVzdF9zZXR1cF9icmVha19kZXRlY3Rpb25fMiAmJgorCSgKKwkJY2QgYnJlYWstZGV0ZWN0aW9uLTIgJiYKKworCQlnaXQgY2hlY2tvdXQgLXEgRV4wICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgRF4wCisJKQorJworCisjIFRlc3RzIGZvciB1bmRldGVjdGVkIHJlbmFtZS9hZGQtc291cmNlIGNhdXNpbmcgYSBmaWxlIHRvIGVycm9uZW91c2x5IGJlCisjIGRlbGV0ZWQgKGFuZCBmb3IgbWlzaGFuZGxlZCByZW5hbWUvcmVuYW1lKDF0bzEpIGNhdXNpbmcgdGhlIHNhbWUgaXNzdWUpLgorIworIyBUaGlzIHRlc3QgdXNlcyBhIHJlbmFtZS9yZW5hbWUoMXRvMSkrYWRkLXNvdXJjZSBjb25mbGljdCAoMXRvMSBtZWFucyB0aGUKKyMgc2FtZSBmaWxlIGlzIHJlbmFtZWQgb24gYm90aCBzaWRlcyB0byB0aGUgc2FtZSB0aGluZzsgaXQgc2hvdWxkIHRyaWdnZXIKKyMgdGhlIDF0bzIgbG9naWMsIHdoaWNoIGl0IHdvdWxkIGRvIGlmIHRoZSBhZGQtc291cmNlIGRpZG4ndCBjYXVzZSBpc3N1ZXMKKyMgZm9yIGdpdCdzIHJlbmFtZSBkZXRlY3Rpb24pOgorIyAgIENvbW1pdCBBOiBuZXcgZmlsZTogYQorIyAgIENvbW1pdCBCOiByZW5hbWUgYS0+YgorIyAgIENvbW1pdCBDOiByZW5hbWUgYS0+YiwgYWRkIHVucmVsYXRlZCBhCisKK3Rlc3Rfc2V0dXBfYnJlYWtfZGV0ZWN0aW9uXzMgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gYnJlYWstZGV0ZWN0aW9uLTMgJiYKKwkoCisJCWNkIGJyZWFrLWRldGVjdGlvbi0zICYmCisKKwkJcHJpbnRmICIxXG4yXG4zXG40XG41XG4iID5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tIEEgJiYKKwkJZ2l0IHRhZyBBICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIEIgQSAmJgorCQlnaXQgbXYgYSBiICYmCisJCWdpdCBjb21taXQgLW0gQiAmJgorCisJCWdpdCBjaGVja291dCAtYiBDIEEgJiYKKwkJZ2l0IG12IGEgYiAmJgorCQllY2hvIGZvb2JhciA+YSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSBDCisJKQorfQorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdkZXRlY3QgcmVuYW1lL2FkZC1zb3VyY2UgYW5kIHByZXNlcnZlIGFsbCBkYXRhJyAnCisJdGVzdF9zZXR1cF9icmVha19kZXRlY3Rpb25fMyAmJgorCSgKKwkJY2QgYnJlYWstZGV0ZWN0aW9uLTMgJiYKKworCQlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwkJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBDXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIGEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYiAmJgorCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlBOmEgICBDOmEgICAgICYmCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDpiICA6MDphICAgICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RldGVjdCByZW5hbWUvYWRkLXNvdXJjZSBhbmQgcHJlc2VydmUgYWxsIGRhdGEsIG1lcmdlIG90aGVyIHdheScgJworCXRlc3Rfc2V0dXBfYnJlYWtfZGV0ZWN0aW9uXzMgJiYKKwkoCisJCWNkIGJyZWFrLWRldGVjdGlvbi0zICYmCisKKwkJZ2l0IGNoZWNrb3V0IENeMCAmJgorCisJCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQl0ZXN0X3BhdGhfaXNfZmlsZSBhICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGIgJiYKKworCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJQTphICAgQzphICAgICAmJgorCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6YiAgOjA6YSAgICAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X3NldHVwX3JlbmFtZV9kaXJlY3RvcnkgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLWRpcmVjdG9yeS0kMSAmJgorCSgKKwkJY2QgcmVuYW1lLWRpcmVjdG9yeS0kMSAmJgorCisJCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuIiA+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCQlnaXQgdGFnIGJhc2UgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgcmlnaHQgJiYKKwkJZWNobyA3ID4+ZmlsZSAmJgorCQlta2RpciBuZXdmaWxlICYmCisJCWVjaG8ganVuayA+bmV3ZmlsZS9yZWFsZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgbmV3ZmlsZS9yZWFsZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSByaWdodCAmJgorCisJCWdpdCBjaGVja291dCAtYiBsZWZ0LWNvbmZsaWN0IGJhc2UgJiYKKwkJZWNobyA4ID4+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IG12IGZpbGUgbmV3ZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSBsZWZ0ICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIGxlZnQtY2xlYW4gYmFzZSAmJgorCQllY2hvIDAgPm5ld2ZpbGUgJiYKKwkJY2F0IGZpbGUgPj5uZXdmaWxlICYmCisJCWdpdCBhZGQgbmV3ZmlsZSAmJgorCQlnaXQgcm0gZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSBsZWZ0CisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUvZGlyZWN0b3J5IGNvbmZsaWN0ICsgY2xlYW4gY29udGVudCBtZXJnZScgJworCXRlc3Rfc2V0dXBfcmVuYW1lX2RpcmVjdG9yeSAxYSAmJgorCSgKKwkJY2QgcmVuYW1lLWRpcmVjdG9yeS0xYSAmJgorCisJCWdpdCBjaGVja291dCBsZWZ0LWNsZWFuXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIHJpZ2h0XjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCisJCWVjaG8gMCA+ZXhwZWN0ICYmCisJCWdpdCBjYXQtZmlsZSAtcCBiYXNlOmZpbGUgPj5leHBlY3QgJiYKKwkJZWNobyA3ID4+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBuZXdmaWxlfkhFQUQgJiYKKworCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MjpuZXdmaWxlKSA9ICQoZ2l0IGhhc2gtb2JqZWN0IGV4cGVjdCkgJiYKKworCQl0ZXN0X3BhdGhfaXNfZmlsZSBuZXdmaWxlL3JlYWxmaWxlICYmCisJCXRlc3RfcGF0aF9pc19maWxlIG5ld2ZpbGV+SEVBRAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lL2RpcmVjdG9yeSBjb25mbGljdCArIGNvbnRlbnQgbWVyZ2UgY29uZmxpY3QnICcKKwl0ZXN0X3NldHVwX3JlbmFtZV9kaXJlY3RvcnkgMWIgJiYKKwkoCisJCWNkIHJlbmFtZS1kaXJlY3RvcnktMWIgJiYKKworCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjbGVhbiAtZmRxeCAmJgorCisJCWdpdCBjaGVja291dCBsZWZ0LWNvbmZsaWN0XjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIHJpZ2h0XjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCisJCWdpdCBjYXQtZmlsZSAtcCBsZWZ0LWNvbmZsaWN0Om5ld2ZpbGUgPmxlZnQgJiYKKwkJZ2l0IGNhdC1maWxlIC1wIGJhc2U6ZmlsZSAgICA+YmFzZSAmJgorCQlnaXQgY2F0LWZpbGUgLXAgcmlnaHQ6ZmlsZSAgID5yaWdodCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSBcCisJCQktTCAiSEVBRDpuZXdmaWxlIiBcCisJCQktTCAiIiBcCisJCQktTCAicmlnaHReMDpmaWxlIiBcCisJCQlsZWZ0IGJhc2UgcmlnaHQgJiYKKwkJdGVzdF9jbXAgbGVmdCBuZXdmaWxlfkhFQUQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQliYXNlOmZpbGUgICBsZWZ0LWNvbmZsaWN0Om5ld2ZpbGUgIHJpZ2h0OmZpbGUgJiYKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJOjE6bmV3ZmlsZSAgOjI6bmV3ZmlsZSAgICAgICAgICAgICA6MzpuZXdmaWxlICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQl0ZXN0X3BhdGhfaXNfZmlsZSBuZXdmaWxlL3JlYWxmaWxlICYmCisJCXRlc3RfcGF0aF9pc19maWxlIG5ld2ZpbGV+SEVBRAorCSkKKycKKwordGVzdF9zZXR1cF9yZW5hbWVfZGlyZWN0b3J5XzIgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLWRpcmVjdG9yeS0yICYmCisJKAorCQljZCByZW5hbWUtZGlyZWN0b3J5LTIgJiYKKworCQlta2RpciBzdWIgJiYKKwkJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG4iID5zdWIvZmlsZSAmJgorCQlnaXQgYWRkIHN1Yi9maWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwkJZ2l0IHRhZyBiYXNlICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIHJpZ2h0ICYmCisJCWVjaG8gNyA+PnN1Yi9maWxlICYmCisJCWdpdCBhZGQgc3ViL2ZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gcmlnaHQgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgbGVmdCBiYXNlICYmCisJCWVjaG8gMCA+bmV3ZmlsZSAmJgorCQljYXQgc3ViL2ZpbGUgPj5uZXdmaWxlICYmCisJCWdpdCBybSBzdWIvZmlsZSAmJgorCQltdiBuZXdmaWxlIHN1YiAmJgorCQlnaXQgYWRkIHN1YiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSBsZWZ0CisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhcHBlYXJpbmcgZGlyIGluIHJlbmFtZS9kaXJlY3RvcnkgY29uZmxpY3QgaGFuZGxlZCcgJworCXRlc3Rfc2V0dXBfcmVuYW1lX2RpcmVjdG9yeV8yICYmCisJKAorCQljZCByZW5hbWUtZGlyZWN0b3J5LTIgJiYKKworCQlnaXQgY2hlY2tvdXQgbGVmdF4wICYmCisKKwkJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSByaWdodF4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQllY2hvIDAgPmV4cGVjdCAmJgorCQlnaXQgY2F0LWZpbGUgLXAgYmFzZTpzdWIvZmlsZSA+PmV4cGVjdCAmJgorCQllY2hvIDcgPj5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHN1YiAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIHN1YgorCSkKKycKKworIyBUZXN0IGZvciBiYXNpYyByZW5hbWUvYWRkLWRlc3QgY29uZmxpY3QsIHdpdGggcmVuYW1lIG5lZWRpbmcgY29udGVudCBtZXJnZToKKyMgICBDb21taXQgTzogYQorIyAgIENvbW1pdCBBOiByZW5hbWUgYS0+YiwgbW9kaWZ5aW5nIGIgdG9vCisjICAgQ29tbWl0IEI6IG1vZGlmeSBhLCBhZGQgZGlmZmVyZW50IGIKKwordGVzdF9zZXR1cF9yZW5hbWVfd2l0aF9jb250ZW50X21lcmdlX2FuZF9hZGQgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLXdpdGgtY29udGVudC1tZXJnZS1hbmQtYWRkLSQxICYmCisJKAorCQljZCByZW5hbWUtd2l0aC1jb250ZW50LW1lcmdlLWFuZC1hZGQtJDEgJiYKKworCQl0ZXN0X3NlcSAxIDUgPmEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCWdpdCBjb21taXQgLW0gTyAmJgorCQlnaXQgdGFnIE8gJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgQSBPICYmCisJCWdpdCBtdiBhIGIgJiYKKwkJdGVzdF9zZXEgMCA1ID5iICYmCisJCWdpdCBhZGQgYiAmJgorCQlnaXQgY29tbWl0IC1tIEEgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgQiBPICYmCisJCWVjaG8gNiA+PmEgJiYKKwkJZWNobyBoZWxsbyB3b3JsZCA+YiAmJgorCQlnaXQgYWRkIGEgYiAmJgorCQlnaXQgY29tbWl0IC1tIEIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhbmRsZSByZW5hbWUtd2l0aC1jb250ZW50LW1lcmdlIHZzLiBhZGQnICcKKwl0ZXN0X3NldHVwX3JlbmFtZV93aXRoX2NvbnRlbnRfbWVyZ2VfYW5kX2FkZCBBQiAmJgorCSgKKwkJY2QgcmVuYW1lLXdpdGgtY29udGVudC1tZXJnZS1hbmQtYWRkLUFCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQkjIEFsc28sIG1ha2Ugc3VyZSBib3RoIHVubWVyZ2VkIGVudHJpZXMgYXJlIGZvciAiYiIKKwkJZ2l0IGxzLWZpbGVzIC11IGIgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYiAmJgorCisJCXRlc3Rfc2VxIDAgNiA+dG1wICYmCisJCWdpdCBoYXNoLW9iamVjdCB0bXAgPmV4cGVjdCAmJgorCQlnaXQgcmV2LXBhcnNlIEI6YiA+PmV4cGVjdCAmJgorCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgIFwKKwkJCToyOmIgICAgOjM6YiAgICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjIFRlc3QgdGhhdCB0aGUgdHdvLXdheSBtZXJnZSBpbiBiIGlzIGFzIGV4cGVjdGVkCisJCWdpdCBjYXQtZmlsZSAtcCA6MjpiID4+b3VycyAmJgorCQlnaXQgY2F0LWZpbGUgLXAgOjM6YiA+PnRoZWlycyAmJgorCQk+ZW1wdHkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgXAorCQkJLUwgIkhFQUQiIFwKKwkJCS1MICIiIFwKKwkJCS1MICJCXjAiIFwKKwkJCW91cnMgZW1wdHkgdGhlaXJzICYmCisJCXRlc3RfY21wIG91cnMgYgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFuZGxlIHJlbmFtZS13aXRoLWNvbnRlbnQtbWVyZ2UgdnMuIGFkZCwgbWVyZ2Ugb3RoZXIgd2F5JyAnCisJdGVzdF9zZXR1cF9yZW5hbWVfd2l0aF9jb250ZW50X21lcmdlX2FuZF9hZGQgQkEgJiYKKwkoCisJCWNkIHJlbmFtZS13aXRoLWNvbnRlbnQtbWVyZ2UtYW5kLWFkZC1CQSAmJgorCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNsZWFuIC1mZHggJiYKKworCQlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBBXjAgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJDT05GTElDVCAocmVuYW1lL2FkZCkiIG91dCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisJCSMgQWxzbywgbWFrZSBzdXJlIGJvdGggdW5tZXJnZWQgZW50cmllcyBhcmUgZm9yICJiIgorCQlnaXQgbHMtZmlsZXMgLXUgYiA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiICYmCisKKwkJdGVzdF9zZXEgMCA2ID50bXAgJiYKKwkJZ2l0IHJldi1wYXJzZSBCOmIgPmV4cGVjdCAmJgorCQlnaXQgaGFzaC1vYmplY3QgdG1wID4+ZXhwZWN0ICYmCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCAgXAorCQkJOjI6YiAgICA6MzpiICAgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCSMgVGVzdCB0aGF0IHRoZSB0d28td2F5IG1lcmdlIGluIGIgaXMgYXMgZXhwZWN0ZWQKKwkJZ2l0IGNhdC1maWxlIC1wIDoyOmIgPj5vdXJzICYmCisJCWdpdCBjYXQtZmlsZSAtcCA6MzpiID4+dGhlaXJzICYmCisJCT5lbXB0eSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSBcCisJCQktTCAiSEVBRCIgXAorCQkJLUwgIiIgXAorCQkJLUwgIkFeMCIgXAorCQkJb3VycyBlbXB0eSB0aGVpcnMgJiYKKwkJdGVzdF9jbXAgb3VycyBiCisJKQorJworCisjIFRlc3QgZm9yIGFsbCBraW5kcyBvZiB0aGluZ3MgdGhhdCBjYW4gZ28gd3Jvbmcgd2l0aCByZW5hbWUvcmVuYW1lICgydG8xKToKKyMgICBDb21taXQgQTogbmV3IGZpbGVzOiBhICYgYgorIyAgIENvbW1pdCBCOiByZW5hbWUgYS0+YywgbW9kaWZ5IGIKKyMgICBDb21taXQgQzogcmVuYW1lIGItPmMsIG1vZGlmeSBhCisjCisjIE1lcmdpbmcgb2YgQiAmIEMgc2hvdWxkIE5PVCBiZSBjbGVhbi4gIFF1ZXN0aW9uczoKKyMgICAqIEJvdGggYSAmIGIgc2hvdWxkIGJlIHJlbW92ZWQgYnkgdGhlIG1lcmdlOyBhcmUgdGhleT8KKyMgICAqIFRoZSB0d28gYydzIHNob3VsZCBjb250YWluIG1vZGlmaWNhdGlvbnMgdG8gYSAmIGI7IGRvIHRoZXk/CisjICAgKiBUaGUgaW5kZXggc2hvdWxkIGNvbnRhaW4gdHdvIGZpbGVzLCBib3RoIGZvciBjOyBkb2VzIGl0PworIyAgICogVGhlIHdvcmtpbmcgY29weSBzaG91bGQgaGF2ZSB0d28gZmlsZXMsIGJvdGggb2YgZm9ybSBjfjx1bmlxdWU+OyBkb2VzIGl0PworIyAgICogTm90aGluZyBlbHNlIHNob3VsZCBiZSBwcmVzZW50LiAgSXMgYW55dGhpbmc/CisKK3Rlc3Rfc2V0dXBfcmVuYW1lX3JlbmFtZV8ydG8xICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlbmFtZS1yZW5hbWUtMnRvMSAmJgorCSgKKwkJY2QgcmVuYW1lLXJlbmFtZS0ydG8xICYmCisKKwkJcHJpbnRmICIxXG4yXG4zXG40XG41XG4iID5hICYmCisJCXByaW50ZiAiNVxuNFxuM1xuMlxuMVxuIiA+YiAmJgorCQlnaXQgYWRkIGEgYiAmJgorCQlnaXQgY29tbWl0IC1tIEEgJiYKKwkJZ2l0IHRhZyBBICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIEIgQSAmJgorCQlnaXQgbXYgYSBjICYmCisJCWVjaG8gMCA+PmIgJiYKKwkJZ2l0IGFkZCBiICYmCisJCWdpdCBjb21taXQgLW0gQiAmJgorCisJCWdpdCBjaGVja291dCAtYiBDIEEgJiYKKwkJZ2l0IG12IGIgYyAmJgorCQllY2hvIDYgPj5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tIEMKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhbmRsZSByZW5hbWUvcmVuYW1lICgydG8xKSBjb25mbGljdCBjb3JyZWN0bHknICcKKwl0ZXN0X3NldHVwX3JlbmFtZV9yZW5hbWVfMnRvMSAmJgorCSgKKwkJY2QgcmVuYW1lLXJlbmFtZS0ydG8xICYmCisKKwkJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQ14wID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgYyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0ICBcCisJCQlDOmEgICAgIEI6YiAgICAmJgorCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgIFwKKwkJCToyOmMgICAgOjM6YyAgICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjIFRlc3QgdGhhdCB0aGUgdHdvLXdheSBtZXJnZSBpbiBuZXdfYSBpcyBhcyBleHBlY3RlZAorCQlnaXQgY2F0LWZpbGUgLXAgOjI6YyA+Pm91cnMgJiYKKwkJZ2l0IGNhdC1maWxlIC1wIDozOmMgPj50aGVpcnMgJiYKKwkJPmVtcHR5ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIFwKKwkJCS1MICJIRUFEIiBcCisJCQktTCAiIiBcCisJCQktTCAiQ14wIiBcCisJCQlvdXJzIGVtcHR5IHRoZWlycyAmJgorCQlnaXQgaGFzaC1vYmplY3QgYyA+YWN0dWFsICYmCisJCWdpdCBoYXNoLW9iamVjdCBvdXJzID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSBzZXR1cCBmb3Igc2ltcGxlIHJlbmFtZS9yZW5hbWUgKDF0bzIpIGNvbmZsaWN0OgorIyAgIENvbW1pdCBBOiBuZXcgZmlsZTogYQorIyAgIENvbW1pdCBCOiByZW5hbWUgYS0+YgorIyAgIENvbW1pdCBDOiByZW5hbWUgYS0+YwordGVzdF9zZXR1cF9yZW5hbWVfcmVuYW1lXzF0bzIgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLXJlbmFtZS0xdG8yICYmCisJKAorCQljZCByZW5hbWUtcmVuYW1lLTF0bzIgJiYKKworCQllY2hvIHN0dWZmID5hICYmCisJCWdpdCBhZGQgYSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSBBICYmCisJCWdpdCB0YWcgQSAmJgorCisJCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwkJZ2l0IG12IGEgYiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIEMgQSAmJgorCQlnaXQgbXYgYSBjICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tIEMKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGhhcyBjb3JyZWN0IHdvcmtpbmcgdHJlZSBjb250ZW50cycgJworCXRlc3Rfc2V0dXBfcmVuYW1lX3JlbmFtZV8xdG8yICYmCisJKAorCQljZCByZW5hbWUtcmVuYW1lLTF0bzIgJiYKKworCQlnaXQgY2hlY2tvdXQgQ14wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGEgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0ICAgXAorCQkJQTphICAgQTphICAgQTphIFwKKwkJCUE6YSAgIEE6YSAgICAgICAmJgorCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgICAgXAorCQkJOjE6YSAgOjM6YiAgOjI6YyAmJgorCQlnaXQgaGFzaC1vYmplY3QgPj5hY3R1YWwgXAorCQkJYiAgICAgYyAgICAgICAgICAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIHNldHVwIGZvciByZW5hbWUvcmVuYW1lKDF0bzIpL2FkZC1zb3VyY2UgY29uZmxpY3Q6CisjICAgQ29tbWl0IEE6IG5ldyBmaWxlOiBhCisjICAgQ29tbWl0IEI6IHJlbmFtZSBhLT5iCisjICAgQ29tbWl0IEM6IHJlbmFtZSBhLT5jLCBhZGQgY29tcGxldGVseSBkaWZmZXJlbnQgYQorIworIyBNZXJnaW5nIG9mIEIgJiBDIHNob3VsZCBOT1QgYmUgY2xlYW47IHRoZXJlJ3MgYSByZW5hbWUvcmVuYW1lIGNvbmZsaWN0CisKK3Rlc3Rfc2V0dXBfcmVuYW1lX3JlbmFtZV8xdG8yX2FkZF9zb3VyY2VfMSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyByZW5hbWUtcmVuYW1lLTF0bzItYWRkLXNvdXJjZS0xICYmCisJKAorCQljZCByZW5hbWUtcmVuYW1lLTF0bzItYWRkLXNvdXJjZS0xICYmCisKKwkJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG43XG4iID5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tIEEgJiYKKwkJZ2l0IHRhZyBBICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIEIgQSAmJgorCQlnaXQgbXYgYSBiICYmCisJCWdpdCBjb21taXQgLW0gQiAmJgorCisJCWdpdCBjaGVja291dCAtYiBDIEEgJiYKKwkJZ2l0IG12IGEgYyAmJgorCQllY2hvIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCA+YSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSBDCisJKQorfQorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdkZXRlY3QgY29uZmxpY3Qgd2l0aCByZW5hbWUvcmVuYW1lKDF0bzIpL2FkZC1zb3VyY2UgbWVyZ2UnICcKKwl0ZXN0X3NldHVwX3JlbmFtZV9yZW5hbWVfMXRvMl9hZGRfc291cmNlXzEgJiYKKwkoCisJCWNkIHJlbmFtZS1yZW5hbWUtMXRvMi1hZGQtc291cmNlLTEgJiYKKworCQlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBDXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCAgICAgICAgIFwKKwkJCUM6YSAgIEE6YSAgIEI6YiAgIEM6QyAmJgorCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgICAgICAgICAgXAorCQkJOjM6YSAgOjE6YSAgOjI6YiAgOjM6YyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGMKKwkpCisnCisKK3Rlc3Rfc2V0dXBfcmVuYW1lX3JlbmFtZV8xdG8yX2FkZF9zb3VyY2VfMiAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyByZW5hbWUtcmVuYW1lLTF0bzItYWRkLXNvdXJjZS0yICYmCisJKAorCQljZCByZW5hbWUtcmVuYW1lLTF0bzItYWRkLXNvdXJjZS0yICYmCisKKwkJPmEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwkJZ2l0IHRhZyBBICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIEIgQSAmJgorCQlnaXQgbXYgYSBiICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tIG9uZSAmJgorCisJCWdpdCBjaGVja291dCAtYiBDIEEgJiYKKwkJZ2l0IG12IGEgYiAmJgorCQllY2hvIGltcG9ydGFudC1pbmZvID5hICYmCisJCWdpdCBhZGQgYSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSB0d28KKwkpCit9CisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3JlbmFtZS9yZW5hbWUvYWRkLXNvdXJjZSBzdGlsbCB0cmFja3MgbmV3IGEgZmlsZScgJworCXRlc3Rfc2V0dXBfcmVuYW1lX3JlbmFtZV8xdG8yX2FkZF9zb3VyY2VfMiAmJgorCSgKKwkJY2QgcmVuYW1lLXJlbmFtZS0xdG8yLWFkZC1zb3VyY2UtMiAmJgorCisJCWdpdCBjaGVja291dCBDXjAgJiYKKwkJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlDOmEgICBBOmEgICAgICYmCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDphICA6MDpiICAgICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3Rfc2V0dXBfcmVuYW1lX3JlbmFtZV8xdG8yX2FkZF9kZXN0ICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlbmFtZS1yZW5hbWUtMXRvMi1hZGQtZGVzdCAmJgorCSgKKwkJY2QgcmVuYW1lLXJlbmFtZS0xdG8yLWFkZC1kZXN0ICYmCisKKwkJZWNobyBzdHVmZiA+YSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCQlnaXQgdGFnIEEgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJCWdpdCBtdiBhIGIgJiYKKwkJZWNobyBwcmVjaW91cy1kYXRhID5jICYmCisJCWdpdCBhZGQgYyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJCWdpdCBtdiBhIGMgJiYKKwkJZWNobyBpbXBvcnRhbnQtaW5mbyA+YiAmJgorCQlnaXQgYWRkIGIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gdHdvCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUvcmVuYW1lL2FkZC1kZXN0IG1lcmdlIHN0aWxsIGtub3dzIGFib3V0IGNvbmZsaWN0aW5nIGZpbGUgdmVyc2lvbnMnICcKKwl0ZXN0X3NldHVwX3JlbmFtZV9yZW5hbWVfMXRvMl9hZGRfZGVzdCAmJgorCSgKKwkJY2QgcmVuYW1lLXJlbmFtZS0xdG8yLWFkZC1kZXN0ICYmCisKKwkJZ2l0IGNoZWNrb3V0IENeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSBiID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11IGMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCAgICAgICAgICAgICAgIFwKKwkJCUE6YSAgIEM6YiAgIEI6YiAgIEM6YyAgIEI6YyAmJgorCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgICAgICAgICAgICAgICAgXAorCQkJOjE6YSAgOjI6YiAgOjM6YiAgOjI6YyAgOjM6YyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJIyBSZWNvcmQgc29tZSBjb250ZW50cyBmb3IgcmUtZG9pbmcgbWVyZ2VzCisJCWdpdCBjYXQtZmlsZSAtcCBBOmEgPnN0dWZmICYmCisJCWdpdCBjYXQtZmlsZSAtcCBDOmIgPmltcG9ydGFudF9pbmZvICYmCisJCWdpdCBjYXQtZmlsZSAtcCBCOmMgPnByZWNpb3VzX2RhdGEgJiYKKwkJPmVtcHR5ICYmCisKKwkJIyBUZXN0IHRoZSBtZXJnZSBpbiBiCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIFwKKwkJCS1MICJIRUFEIiBcCisJCQktTCAiIiBcCisJCQktTCAiQl4wIiBcCisJCQlpbXBvcnRhbnRfaW5mbyBlbXB0eSBzdHVmZiAmJgorCQl0ZXN0X2NtcCBpbXBvcnRhbnRfaW5mbyBiICYmCisKKwkJIyBUZXN0IHRoZSBtZXJnZSBpbiBjCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIFwKKwkJCS1MICJIRUFEIiBcCisJCQktTCAiIiBcCisJCQktTCAiQl4wIiBcCisJCQlzdHVmZiBlbXB0eSBwcmVjaW91c19kYXRhICYmCisJCXRlc3RfY21wIHN0dWZmIGMKKwkpCisnCisKKyMgVGVzdGNhc2UgcmFkLCByZW5hbWUvYWRkL2RlbGV0ZQorIyAgIENvbW1pdCBPOiBmb28KKyMgICBDb21taXQgQTogcm0gZm9vLCBhZGQgZGlmZmVyZW50IGJhcgorIyAgIENvbW1pdCBCOiByZW5hbWUgZm9vLT5iYXIKKyMgICBFeHBlY3RlZDogQ09ORkxJQ1QgKHJlbmFtZS9hZGQvZGVsZXRlKSwgdHdvLXdheSBtZXJnZWQgYmFyCisKK3Rlc3Rfc2V0dXBfcmFkICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJhZCAmJgorCSgKKwkJY2QgcmFkICYmCisJCWVjaG8gIm9yaWdpbmFsIGZpbGUiID5mb28gJiYKKwkJZ2l0IGFkZCBmb28gJiYKKwkJZ2l0IGNvbW1pdCAtbSAib3JpZ2luYWwiICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgcm0gZm9vICYmCisJCWVjaG8gImRpZmZlcmVudCBmaWxlIiA+YmFyICYmCisJCWdpdCBhZGQgYmFyICYmCisJCWdpdCBjb21taXQgLW0gIlJlbW92ZSBmb28sIGFkZCBiYXIiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IGZvbyBiYXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIGZvbyB0byBiYXIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdyYWQtY2hlY2s6IHJlbmFtZS9hZGQvZGVsZXRlIGNvbmZsaWN0JyAnCisJdGVzdF9zZXR1cF9yYWQgJiYKKwkoCisJCWNkIHJhZCAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBBXjAgPm91dCAyPmVyciAmJgorCisJCSMgTm90IHN1cmUgd2hldGhlciB0aGUgb3V0cHV0IHNob3VsZCBjb250YWluIGp1c3Qgb25lCisJCSMgIkNPTkZMSUNUIChyZW5hbWUvYWRkL2RlbGV0ZSkiIGxpbmUsIG9yIGlmIGl0IHNob3VsZCBicmVhaworCQkjIGl0IGludG8gYSBwYWlyIG9mICJDT05GTElDVCAocmVuYW1lL2RlbGV0ZSkiIGFuZAorCQkjICJDT05GTElDVCAocmVuYW1lL2FkZCkiOyBhbGxvdyBmb3IgZWl0aGVyLgorCQl0ZXN0X2kxOG5ncmVwICJDT05GTElDVCAocmVuYW1lLiphZGQpIiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS4qZGVsZXRlKSIgb3V0ICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPmZpbGVfY291bnQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBmaWxlX2NvdW50ICYmCisJCWdpdCBscy1maWxlcyAtdSA+ZmlsZV9jb3VudCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGZpbGVfY291bnQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5maWxlX2NvdW50ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgZmlsZV9jb3VudCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MjpiYXIgOjM6YmFyICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlCOmJhciAgQTpiYXIgICYmCisKKwkJdGVzdF9jbXAgZmlsZV9pc19taXNzaW5nIGZvbyAmJgorCQkjIGJhciBzaG91bGQgaGF2ZSB0d28td2F5IG1lcmdlZCBjb250ZW50cyBvZiB0aGUgZGlmZmVyZW50CisJCSMgdmVyc2lvbnMgb2YgYmFyOyBjaGVjayB0aGF0IGNvbnRlbnQgZnJvbSBib3RoIHNpZGVzIGlzCisJCSMgcHJlc2VudC4KKwkJZ3JlcCBvcmlnaW5hbCBiYXIgJiYKKwkJZ3JlcCBkaWZmZXJlbnQgYmFyCisJKQorJworCisjIFRlc3RjYXNlIHJyZGQsIHJlbmFtZS9yZW5hbWUoMnRvMSkvZGVsZXRlL2RlbGV0ZQorIyAgIENvbW1pdCBPOiBmb28sIGJhcgorIyAgIENvbW1pdCBBOiByZW5hbWUgZm9vLT5iYXosIHJtIGJhcgorIyAgIENvbW1pdCBCOiByZW5hbWUgYmFyLT5iYXosIHJtIGZvbworIyAgIEV4cGVjdGVkOiBDT05GTElDVCAocmVuYW1lL3JlbmFtZS9kZWxldGUvZGVsZXRlKSwgdHdvLXdheSBtZXJnZWQgYmF6CisKK3Rlc3Rfc2V0dXBfcnJkZCAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyBycmRkICYmCisJKAorCQljZCBycmRkICYmCisJCWVjaG8gZm9vID5mb28gJiYKKwkJZWNobyBiYXIgPmJhciAmJgorCQlnaXQgYWRkIGZvbyBiYXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSBPICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgZm9vIGJheiAmJgorCQlnaXQgcm0gYmFyICYmCisJCWdpdCBjb21taXQgLW0gIlJlbmFtZSBmb28sIHJlbW92ZSBiYXIiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IGJhciBiYXogJiYKKwkJZ2l0IHJtIGZvbyAmJgorCQlnaXQgY29tbWl0IC1tICJSZW5hbWUgYmFyLCByZW1vdmUgZm9vIgorCSkKK30KKwordGVzdF9leHBlY3RfZmFpbHVyZSAncnJkZC1jaGVjazogcmVuYW1lL3JlbmFtZSgydG8xKS9kZWxldGUvZGVsZXRlIGNvbmZsaWN0JyAnCisJdGVzdF9zZXR1cF9ycmRkICYmCisJKAorCQljZCBycmRkICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisKKwkJIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBvdXRwdXQgc2hvdWxkIGNvbnRhaW4ganVzdCBvbmUKKwkJIyAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUvZGVsZXRlL2RlbGV0ZSkiIGxpbmUsIG9yIGlmIGl0CisJCSMgc2hvdWxkIGJyZWFrIGl0IGludG8gdGhyZWU6ICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSkiIGFuZAorCQkjIHR3byAiQ09ORkxJQ1QgKHJlbmFtZS9kZWxldGUpIiBsaW5lczsgYWxsb3cgZm9yIGVpdGhlci4KKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpIiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS4qZGVsZXRlKSIgb3V0ICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPmZpbGVfY291bnQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBmaWxlX2NvdW50ICYmCisJCWdpdCBscy1maWxlcyAtdSA+ZmlsZV9jb3VudCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGZpbGVfY291bnQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5maWxlX2NvdW50ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgZmlsZV9jb3VudCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MjpiYXogOjM6YmF6ICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOmZvbyAgTzpiYXIgICYmCisKKwkJdGVzdF9jbXAgZmlsZV9pc19taXNzaW5nIGZvbyAmJgorCQl0ZXN0X2NtcCBmaWxlX2lzX21pc3NpbmcgYmFyICYmCisJCSMgYmF6IHNob3VsZCBoYXZlIHR3by13YXkgbWVyZ2VkIGNvbnRlbnRzIG9mIHRoZSBvcmlnaW5hbAorCQkjIGNvbnRlbnRzIG9mIGZvbyBhbmQgYmFyOyBjaGVjayB0aGF0IGNvbnRlbnQgZnJvbSBib3RoIHNpZGVzCisJCSMgaXMgcHJlc2VudC4KKwkJZ3JlcCBmb28gYmF6ICYmCisJCWdyZXAgYmFyIGJhegorCSkKKycKKworIyBUZXN0Y2FzZSBtb2Q2LCBjaGFpbnMgb2YgcmVuYW1lL3JlbmFtZSgxdG8yKSBhbmQgcmVuYW1lL3JlbmFtZSgydG8xKQorIyAgIENvbW1pdCBPOiBvbmUsICAgICAgdGhyZWUsICAgICAgIGZpdmUKKyMgICBDb21taXQgQTogb25lLT50d28sIHRocmVlLT5mb3VyLCBmaXZlLT5zaXgKKyMgICBDb21taXQgQjogb25lLT5zaXgsIHRocmVlLT50d28sICBmaXZlLT5mb3VyCisjICAgRXhwZWN0ZWQ6IHNpeCBDT05GTElDVChyZW5hbWUvcmVuYW1lKSBtZXNzYWdlcywgZWFjaCBwYXRoIGluIHR3byBvZiB0aGUKKyMgICAgICAgICAgICAgbXVsdGktd2F5IG1lcmdlZCBjb250ZW50cyBmb3VuZCBpbiB0d28sIGZvdXIsIHNpeAorCit0ZXN0X3NldHVwX21vZDYgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gbW9kNiAmJgorCSgKKwkJY2QgbW9kNiAmJgorCQl0ZXN0X3NlcSAxMSAxOSA+b25lICYmCisJCXRlc3Rfc2VxIDMxIDM5ID50aHJlZSAmJgorCQl0ZXN0X3NlcSA1MSA1OSA+Zml2ZSAmJgorCQlnaXQgYWRkIC4gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQl0ZXN0X3NlcSAxMCAxOSA+b25lICYmCisJCWVjaG8gNDAgICAgICAgID4+dGhyZWUgJiYKKwkJZ2l0IGFkZCBvbmUgdGhyZWUgJiYKKwkJZ2l0IG12ICBvbmUgICB0d28gICYmCisJCWdpdCBtdiAgdGhyZWUgZm91ciAmJgorCQlnaXQgbXYgIGZpdmUgIHNpeCAgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZWNobyAyMCAgICA+Pm9uZSAgICAgICAmJgorCQllY2hvIGZvcnR5ID4+dGhyZWUgICAgICYmCisJCWVjaG8gNjAgICAgPj5maXZlICAgICAgJiYKKwkJZ2l0IGFkZCBvbmUgdGhyZWUgZml2ZSAmJgorCQlnaXQgbXYgIG9uZSAgIHNpeCAgJiYKKwkJZ2l0IG12ICB0aHJlZSB0d28gICYmCisJCWdpdCBtdiAgZml2ZSAgZm91ciAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ21vZDYtY2hlY2s6IGNoYWlucyBvZiByZW5hbWUvcmVuYW1lKDF0bzIpIGFuZCByZW5hbWUvcmVuYW1lKDJ0bzEpJyAnCisJdGVzdF9zZXR1cF9tb2Q2ICYmCisJKAorCQljZCBtb2Q2ICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKworCQl0ZXN0X2kxOG5ncmVwICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSkiIG91dCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5maWxlX2NvdW50ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDYgZmlsZV9jb3VudCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPmZpbGVfY291bnQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBmaWxlX2NvdW50ICYmCisJCWdpdCBscy1maWxlcyAtbyA+ZmlsZV9jb3VudCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGZpbGVfY291bnQgJiYKKworCQl0ZXN0X3NlcSAxMCAyMCA+bWVyZ2VkLW9uZSAmJgorCQl0ZXN0X3NlcSA1MSA2MCA+bWVyZ2VkLWZpdmUgJiYKKwkJIyBEZXRlcm1pbmUgd2hhdCB0aGUgbWVyZ2Ugb2YgdGhyZWUgd291bGQgZ2l2ZSB1cy4KKwkJdGVzdF9zZXEgMzAgNDAgPnRocmVlLXNpZGUtQSAmJgorCQl0ZXN0X3NlcSAzMSAzOSA+dGhyZWUtc2lkZS1CICYmCisJCWVjaG8gZm9ydHkgPnRocmVlLXNpZGUtQiAmJgorCQk+ZW1wdHkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgXAorCQkJLUwgIkhFQUQiIFwKKwkJCS1MICIiIFwKKwkJCS1MICJCXjAiIFwKKwkJCXRocmVlLXNpZGUtQSBlbXB0eSB0aHJlZS1zaWRlLUIgJiYKKwkJc2VkIC1lICJzL15cKFs8PT5dXCkvXDFcMVwxLyIgdGhyZWUtc2lkZS1BID5tZXJnZWQtdGhyZWUgJiYKKworCQkjIFZlcmlmeSB0aGUgaW5kZXggaXMgYXMgZXhwZWN0ZWQKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsICAgICAgICAgXAorCQkJOjI6dHdvICAgICAgIDozOnR3byAgIFwKKwkJCToyOmZvdXIgICAgICA6Mzpmb3VyICBcCisJCQk6MjpzaXggICAgICAgOjM6c2l4ICAgJiYKKwkJZ2l0IGhhc2gtb2JqZWN0ID5leHBlY3QgICAgICAgICAgIFwKKwkJCW1lcmdlZC1vbmUgICBtZXJnZWQtdGhyZWUgXAorCQkJbWVyZ2VkLXRocmVlIG1lcmdlZC1maXZlICBcCisJCQltZXJnZWQtZml2ZSAgbWVyZ2VkLW9uZSAgICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgY2F0LWZpbGUgLXAgOjI6dHdvID5leHBlY3QgJiYKKwkJZ2l0IGNhdC1maWxlIC1wIDozOnR3byA+b3RoZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgICAgXAorCQkJLUwgIkhFQUQiICAtTCAiIiAgLUwgIkJeMCIgXAorCQkJZXhwZWN0ICAgICBlbXB0eSAgb3RoZXIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHR3byAmJgorCisJCWdpdCBjYXQtZmlsZSAtcCA6Mjpmb3VyID5leHBlY3QgJiYKKwkJZ2l0IGNhdC1maWxlIC1wIDozOmZvdXIgPm90aGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlICAgIFwKKwkJCS1MICJIRUFEIiAgLUwgIiIgIC1MICJCXjAiIFwKKwkJCWV4cGVjdCAgICAgZW1wdHkgIG90aGVyICYmCisJCXRlc3RfY21wIGV4cGVjdCBmb3VyICYmCisKKwkJZ2l0IGNhdC1maWxlIC1wIDoyOnNpeCA+ZXhwZWN0ICYmCisJCWdpdCBjYXQtZmlsZSAtcCA6MzpzaXggPm90aGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlICAgIFwKKwkJCS1MICJIRUFEIiAgLUwgIiIgIC1MICJCXjAiIFwKKwkJCWV4cGVjdCAgICAgZW1wdHkgIG90aGVyICYmCisJCXRlc3RfY21wIGV4cGVjdCBzaXgKKwkpCisnCisKK3Rlc3RfY29uZmxpY3RzX3dpdGhfYWRkc19hbmRfcmVuYW1lcygpIHsKKwlzaWRlTD0kMQorCXNpZGVSPSQyCisKKwkjIFNldHVwOgorCSMgICAgICAgICAgTAorCSMgICAgICAgICAvIFwKKwkjICAgbWFzdGVyICAgPworCSMgICAgICAgICBcIC8KKwkjICAgICAgICAgIFIKKwkjCisJIyBXaGVyZToKKwkjICAgQm90aCBMIGFuZCBSIGhhdmUgZmlsZXMgbmFtZWQgJ3RocmVlJyB3aGljaCBjb2xsaWRlLiAgRWFjaCBvZgorCSMgICB0aGUgY29sbGlkaW5nIGZpbGVzIGNvdWxkIGhhdmUgYmVlbiBpbnZvbHZlZCBpbiBhIHJlbmFtZSwgaW4KKwkjICAgd2hpY2ggY2FzZSB0aGVyZSB3YXMgYSBmaWxlIG5hbWVkICdvbmUnIG9yICd0d28nIHRoYXQgd2FzCisJIyAgIG1vZGlmaWVkIG9uIHRoZSBvcHBvc2l0ZSBzaWRlIG9mIGhpc3RvcnkgYW5kIHJlbmFtZWQgaW50byB0aGUKKwkjICAgY29sbGlzaW9uIG9uIHRoaXMgc2lkZSBvZiBoaXN0b3J5LgorCSMKKwkjIFF1ZXN0aW9uczoKKwkjICAgMSkgVGhlIGluZGV4IHNob3VsZCBjb250YWluIGJvdGggYSBzdGFnZSAyIGFuZCBzdGFnZSAzIGVudHJ5CisJIyAgICAgIGZvciB0aGUgY29sbGlkaW5nIGZpbGUuICBEb2VzIGl0PworCSMgICAyKSBXaGVuIHJlbmFtZXMgYXJlIGludm9sdmVkLCB0aGUgY29udGVudCBtZXJnZXMgYXJlIGNsZWFuLCBzbworCSMgICAgICB0aGUgaW5kZXggc2hvdWxkIHJlZmxlY3QgdGhlIGNvbnRlbnQgbWVyZ2VzLCBub3QgbWVyZWx5IHRoZQorCSMgICAgICB2ZXJzaW9uIG9mIHRoZSBjb2xsaWRpbmcgZmlsZSBmcm9tIHRoZSBwcmlvciBjb21taXQuICBEb2VzCisJIyAgICAgIGl0PworCSMgICAzKSBUaGVyZSBzaG91bGQgYmUgYSBmaWxlIGluIHRoZSB3b3JrdHJlZSBuYW1lZCAndGhyZWUnCisJIyAgICAgIGNvbnRhaW5pbmcgdGhlIHR3by13YXkgbWVyZ2VkIGNvbnRlbnRzIG9mIHRoZSBjb250ZW50LW1lcmdlZAorCSMgICAgICB2ZXJzaW9ucyBvZiAndGhyZWUnIGZyb20gZWFjaCBvZiB0aGUgdHdvIGNvbGxpZGluZworCSMgICAgICBmaWxlcy4gIElzIGl0IHByZXNlbnQ/CisJIyAgIDQpIFRoZXJlIHNob3VsZCBub3QgYmUgYW55IHRocmVlfiogZmlsZXMgaW4gdGhlIHdvcmtpbmcKKwkjICAgICAgdHJlZQorCXRlc3Rfc2V0dXBfY29sbGlzaW9uX2NvbmZsaWN0ICgpIHsKKwkjdGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgc2ltcGxlICRzaWRlTC8kc2lkZVIgY29uZmxpY3QiICcKKwkJdGVzdF9jcmVhdGVfcmVwbyBzaW1wbGVfJHtzaWRlTH1fJHtzaWRlUn0gJiYKKwkJKAorCQkJY2Qgc2ltcGxlXyR7c2lkZUx9XyR7c2lkZVJ9ICYmCisKKwkJCSMgQ3JlYXRlIHNvbWUgcmVsYXRlZCBmaWxlcyBub3cKKwkJCWZvciBpIGluICQodGVzdF9zZXEgMSAxMCkKKwkJCWRvCisJCQkJZWNobyBSYW5kb20gYmFzZSBjb250ZW50IGxpbmUgJGkKKwkJCWRvbmUgPmZpbGVfdjEgJiYKKwkJCWNwIGZpbGVfdjEgZmlsZV92MiAmJgorCQkJZWNobyBtb2RpZmljYXRpb24gPj5maWxlX3YyICYmCisKKwkJCWNwIGZpbGVfdjEgZmlsZV92MyAmJgorCQkJZWNobyBtb3JlIHN0dWZmID4+ZmlsZV92MyAmJgorCQkJY3AgZmlsZV92MyBmaWxlX3Y0ICYmCisJCQllY2hvIHlldCBtb3JlIHN0dWZmID4+ZmlsZV92NCAmJgorCisJCQkjIFVzZSBhIHRhZyB0byByZWNvcmQgYm90aCB0aGVzZSBmaWxlcyBmb3Igc2ltcGxlCisJCQkjIGFjY2VzcywgYW5kIGNsZWFuIG91dCB0aGVzZSB1bnRyYWNrZWQgZmlsZXMKKwkJCWdpdCB0YWcgZmlsZV92MSAkKGdpdCBoYXNoLW9iamVjdCAtdyBmaWxlX3YxKSAmJgorCQkJZ2l0IHRhZyBmaWxlX3YyICQoZ2l0IGhhc2gtb2JqZWN0IC13IGZpbGVfdjIpICYmCisJCQlnaXQgdGFnIGZpbGVfdjMgJChnaXQgaGFzaC1vYmplY3QgLXcgZmlsZV92MykgJiYKKwkJCWdpdCB0YWcgZmlsZV92NCAkKGdpdCBoYXNoLW9iamVjdCAtdyBmaWxlX3Y0KSAmJgorCQkJZ2l0IGNsZWFuIC1mICYmCisKKwkJCSMgU2V0dXAgb3JpZ2luYWwgY29tbWl0IChvciBtZXJnZS1iYXNlKSwgY29uc2lzdGluZyBvZgorCQkJIyBmaWxlcyBuYW1lZCAib25lIiBhbmQgInR3byIgaWYgcmVuYW1lcyB3ZXJlIGludm9sdmVkLgorCQkJdG91Y2ggaXJyZWxldmFudF9maWxlICYmCisJCQlnaXQgYWRkIGlycmVsZXZhbnRfZmlsZSAmJgorCQkJaWYgWyAkc2lkZUwgPSAicmVuYW1lIiBdCisJCQl0aGVuCisJCQkJZ2l0IHNob3cgZmlsZV92MSA+b25lICYmCisJCQkJZ2l0IGFkZCBvbmUKKwkJCWZpICYmCisJCQlpZiBbICRzaWRlUiA9ICJyZW5hbWUiIF0KKwkJCXRoZW4KKwkJCQlnaXQgc2hvdyBmaWxlX3YzID50d28gJiYKKwkJCQlnaXQgYWRkIHR3bworCQkJZmkgJiYKKwkJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCQkJZ2l0IGJyYW5jaCBMICYmCisJCQlnaXQgYnJhbmNoIFIgJiYKKworCQkJIyBIYW5kbGUgdGhlIGxlZnQgc2lkZQorCQkJZ2l0IGNoZWNrb3V0IEwgJiYKKwkJCWlmIFsgJHNpZGVMID0gInJlbmFtZSIgXQorCQkJdGhlbgorCQkJCWdpdCBtdiBvbmUgdGhyZWUKKwkJCWVsc2UKKwkJCQlnaXQgc2hvdyBmaWxlX3YyID50aHJlZSAmJgorCQkJCWdpdCBhZGQgdGhyZWUKKwkJCWZpICYmCisJCQlpZiBbICRzaWRlUiA9ICJyZW5hbWUiIF0KKwkJCXRoZW4KKwkJCQlnaXQgc2hvdyBmaWxlX3Y0ID50d28gJiYKKwkJCQlnaXQgYWRkIHR3bworCQkJZmkgJiYKKwkJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEwgJiYKKworCQkJIyBIYW5kbGUgdGhlIHJpZ2h0IHNpZGUKKwkJCWdpdCBjaGVja291dCBSICYmCisJCQlpZiBbICRzaWRlTCA9ICJyZW5hbWUiIF0KKwkJCXRoZW4KKwkJCQlnaXQgc2hvdyBmaWxlX3YyID5vbmUgJiYKKwkJCQlnaXQgYWRkIG9uZQorCQkJZmkgJiYKKwkJCWlmIFsgJHNpZGVSID0gInJlbmFtZSIgXQorCQkJdGhlbgorCQkJCWdpdCBtdiB0d28gdGhyZWUKKwkJCWVsc2UKKwkJCQlnaXQgc2hvdyBmaWxlX3Y0ID50aHJlZSAmJgorCQkJCWdpdCBhZGQgdGhyZWUKKwkJCWZpICYmCisJCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBSCisJCSkKKwkjJworCX0KKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrIHNpbXBsZSAkc2lkZUwvJHNpZGVSIGNvbmZsaWN0IiAnCisJCXRlc3Rfc2V0dXBfY29sbGlzaW9uX2NvbmZsaWN0ICYmCisJCSgKKwkJCWNkIHNpbXBsZV8ke3NpZGVMfV8ke3NpZGVSfSAmJgorCisJCQlnaXQgY2hlY2tvdXQgTF4wICYmCisKKwkJCSMgTWVyZ2UgbXVzdCBmYWlsOyB0aGVyZSBpcyBhIGNvbmZsaWN0CisJCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIFJeMCAmJgorCisJCQkjIE1ha2Ugc3VyZSB0aGUgaW5kZXggaGFzIHRoZSByaWdodCBudW1iZXIgb2YgZW50cmllcworCQkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKwkJCSMgRW5zdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHVudHJhY2tlZCBmaWxlcworCQkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJCSMgTm90aGluZyBzaG91bGQgaGF2ZSB0b3VjaGVkIGlycmVsZXZhbnRfZmlsZQorCQkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsICAgICAgXAorCQkJCTowOmlycmVsZXZhbnRfZmlsZSBcCisJCQkJOjI6dGhyZWUgICAgICAgICAgIFwKKwkJCQk6Mzp0aHJlZSAgICAgICAgICAgJiYKKwkJCWdpdCByZXYtcGFyc2UgPmV4cGVjdGVkICAgICAgICBcCisJCQkJbWFzdGVyOmlycmVsZXZhbnRfZmlsZSBcCisJCQkJZmlsZV92MiAgICAgICAgICAgICAgICBcCisJCQkJZmlsZV92NCAgICAgICAgICAgICAgICAmJgorCQkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwkJCSMgTWFrZSBzdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgbWVyZ2VkIGNvbnRlbnRzIGZvcgorCQkJIyB0aHJlZQorCQkJZ2l0IHNob3cgZmlsZV92MSA+ZXhwZWN0ZWQgJiYKKwkJCWNhdCA8PC1cRU9GID4+ZXhwZWN0ZWQgJiYKKwkJCTw8PDw8PDwgSEVBRAorCQkJbW9kaWZpY2F0aW9uCisJCQk9PT09PT09CisJCQltb3JlIHN0dWZmCisJCQl5ZXQgbW9yZSBzdHVmZgorCQkJPj4+Pj4+PiBSXjAKKwkJCUVPRgorCisJCQl0ZXN0X2NtcCBleHBlY3RlZCB0aHJlZQorCQkpCisJJworfQorCit0ZXN0X2NvbmZsaWN0c193aXRoX2FkZHNfYW5kX3JlbmFtZXMgcmVuYW1lIHJlbmFtZQordGVzdF9jb25mbGljdHNfd2l0aF9hZGRzX2FuZF9yZW5hbWVzIHJlbmFtZSBhZGQKK3Rlc3RfY29uZmxpY3RzX3dpdGhfYWRkc19hbmRfcmVuYW1lcyBhZGQgICAgcmVuYW1lCit0ZXN0X2NvbmZsaWN0c193aXRoX2FkZHNfYW5kX3JlbmFtZXMgYWRkICAgIGFkZAorCisjIFNldHVwOgorIyAgICAgICAgICBMCisjICAgICAgICAgLyBcCisjICAgbWFzdGVyICAgPworIyAgICAgICAgIFwgLworIyAgICAgICAgICBSCisjCisjIFdoZXJlOgorIyAgIG1hc3RlciBoYXMgdHdvIGZpbGVzLCBuYW1lZCAnb25lJyBhbmQgJ3R3bycuCisjICAgYnJhbmNoZXMgTCBhbmQgUiBib3RoIG1vZGlmeSAnb25lJywgaW4gY29uZmxpY3Rpbmcgd2F5cy4KKyMgICBicmFuY2hlcyBMIGFuZCBSIGJvdGggbW9kaWZ5ICd0d28nLCBpbiBjb25mbGljdGluZyB3YXlzLgorIyAgIGJyYW5jaCBMIGFsc28gcmVuYW1lcyAnb25lJyB0byAndGhyZWUnLgorIyAgIGJyYW5jaCBSIGFsc28gcmVuYW1lcyAndHdvJyB0byAndGhyZWUnLgorIworIyAgIFNvLCB3ZSBoYXZlIGZvdXIgZGlmZmVyZW50IGNvbmZsaWN0aW5nIGZpbGVzIHRoYXQgYWxsIGVuZCB1cCBhdCBwYXRoCisjICAgJ3RocmVlJy4KK3Rlc3Rfc2V0dXBfbmVzdGVkX2NvbmZsaWN0c19mcm9tX3JlbmFtZV9yZW5hbWUgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gbmVzdGVkX2NvbmZsaWN0c19mcm9tX3JlbmFtZV9yZW5hbWUgJiYKKwkoCisJCWNkIG5lc3RlZF9jb25mbGljdHNfZnJvbV9yZW5hbWVfcmVuYW1lICYmCisKKwkJIyBDcmVhdGUgc29tZSByZWxhdGVkIGZpbGVzIG5vdworCQlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMTApCisJCWRvCisJCQllY2hvIFJhbmRvbSBiYXNlIGNvbnRlbnQgbGluZSAkaQorCQlkb25lID5maWxlX3YxICYmCisKKwkJY3AgZmlsZV92MSBmaWxlX3YyICYmCisJCWNwIGZpbGVfdjEgZmlsZV92MyAmJgorCQljcCBmaWxlX3YxIGZpbGVfdjQgJiYKKwkJY3AgZmlsZV92MSBmaWxlX3Y1ICYmCisJCWNwIGZpbGVfdjEgZmlsZV92NiAmJgorCisJCWVjaG8gb25lICA+PmZpbGVfdjEgJiYKKwkJZWNobyB1bm8gID4+ZmlsZV92MiAmJgorCQllY2hvIGVpbnMgPj5maWxlX3YzICYmCisKKwkJZWNobyB0d28gID4+ZmlsZV92NCAmJgorCQllY2hvIGRvcyAgPj5maWxlX3Y1ICYmCisJCWVjaG8gendlaSA+PmZpbGVfdjYgJiYKKworCQkjIFNldHVwIG9yaWdpbmFsIGNvbW1pdCAob3IgbWVyZ2UtYmFzZSksIGNvbnNpc3Rpbmcgb2YKKwkJIyBmaWxlcyBuYW1lZCAib25lIiBhbmQgInR3byIuCisJCW12IGZpbGVfdjEgb25lICYmCisJCW12IGZpbGVfdjQgdHdvICYmCisJCWdpdCBhZGQgb25lIHR3byAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBlbmdsaXNoICYmCisKKwkJZ2l0IGJyYW5jaCBMICYmCisJCWdpdCBicmFuY2ggUiAmJgorCisJCSMgSGFuZGxlIHRoZSBsZWZ0IHNpZGUKKwkJZ2l0IGNoZWNrb3V0IEwgJiYKKwkJZ2l0IHJtIG9uZSB0d28gJiYKKwkJbXYgLWYgZmlsZV92MiB0aHJlZSAmJgorCQltdiAtZiBmaWxlX3Y1IHR3byAmJgorCQlnaXQgYWRkIHR3byB0aHJlZSAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBzcGFuaXNoICYmCisKKwkJIyBIYW5kbGUgdGhlIHJpZ2h0IHNpZGUKKwkJZ2l0IGNoZWNrb3V0IFIgJiYKKwkJZ2l0IHJtIG9uZSB0d28gJiYKKwkJbXYgLWYgZmlsZV92MyBvbmUgJiYKKwkJbXYgLWYgZmlsZV92NiB0aHJlZSAmJgorCQlnaXQgYWRkIG9uZSB0aHJlZSAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBnZXJtYW4KKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIG5lc3RlZCBjb25mbGljdHMgZnJvbSByZW5hbWUvcmVuYW1lKDJ0bzEpJyAnCisJdGVzdF9zZXR1cF9uZXN0ZWRfY29uZmxpY3RzX2Zyb21fcmVuYW1lX3JlbmFtZSAmJgorCSgKKwkJY2QgbmVzdGVkX2NvbmZsaWN0c19mcm9tX3JlbmFtZV9yZW5hbWUgJiYKKworCQlnaXQgY2hlY2tvdXQgTF4wICYmCisKKwkJIyBNZXJnZSBtdXN0IGZhaWw7IHRoZXJlIGlzIGEgY29uZmxpY3QKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBSXjAgJiYKKworCQkjIE1ha2Ugc3VyZSB0aGUgaW5kZXggaGFzIHRoZSByaWdodCBudW1iZXIgb2YgZW50cmllcworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQkjIEVuc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IG51bWJlciBvZiB1bnRyYWNrZWQgZmlsZXMKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQkjIENvbXBhcmUgOjI6dGhyZWUgdG8gZXhwZWN0ZWQgdmFsdWVzCisJCWdpdCBjYXQtZmlsZSAtcCBtYXN0ZXI6b25lID5iYXNlICYmCisJCWdpdCBjYXQtZmlsZSAtcCBMOnRocmVlID5vdXJzICYmCisJCWdpdCBjYXQtZmlsZSAtcCBSOm9uZSA+dGhlaXJzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlICAgIFwKKwkJCS1MICJIRUFEOnRocmVlIiAgLUwgIiIgIC1MICJSXjA6b25lIiBcCisJCQlvdXJzICAgICAgICAgICAgIGJhc2UgICB0aGVpcnMgJiYKKwkJc2VkIC1lICJzL15cKFs8PT5dXCkvXDFcMS8iIG91cnMgPkwtdGhyZWUgJiYKKwkJZ2l0IGNhdC1maWxlIC1wIDoyOnRocmVlID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IEwtdGhyZWUgJiYKKworCQkjIENvbXBhcmUgOjI6dGhyZWUgdG8gZXhwZWN0ZWQgdmFsdWVzCisJCWdpdCBjYXQtZmlsZSAtcCBtYXN0ZXI6dHdvID5iYXNlICYmCisJCWdpdCBjYXQtZmlsZSAtcCBMOnR3byA+b3VycyAmJgorCQlnaXQgY2F0LWZpbGUgLXAgUjp0aHJlZSA+dGhlaXJzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlICAgIFwKKwkJCS1MICJIRUFEOnR3byIgIC1MICIiICAtTCAiUl4wOnRocmVlIiBcCisJCQlvdXJzICAgICAgICAgICBiYXNlICAgdGhlaXJzICYmCisJCXNlZCAtZSAicy9eXChbPD0+XVwpL1wxXDEvIiBvdXJzID5SLXRocmVlICYmCisJCWdpdCBjYXQtZmlsZSAtcCA6Mzp0aHJlZSA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBSLXRocmVlICYmCisKKwkJIyBDb21wYXJlIHRocmVlIHRvIGV4cGVjdGVkIGNvbnRlbnRzCisJCT5lbXB0eSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSAgICBcCisJCQktTCAiSEVBRCIgIC1MICIiICAtTCAiUl4wIiBcCisJCQlMLXRocmVlICAgIGVtcHR5ICBSLXRocmVlICYmCisJCXRlc3RfY21wIHRocmVlIEwtdGhyZWUKKwkpCisnCisKKyMgVGVzdGNhc2UgcmVuYW1lL3JlbmFtZSgxdG8yKSBvZiBhIGJpbmFyeSBmaWxlCisjICAgQ29tbWl0IE86IG9yaWcKKyMgICBDb21taXQgQTogb3JpZy1BCisjICAgQ29tbWl0IEI6IG9yaWctQgorIyAgIEV4cGVjdGVkOiBDT05GTElDVChyZW5hbWUvcmVuYW1lKSBtZXNzYWdlLCB0aHJlZSB1bnN0YWdlZCBlbnRyaWVzIGluIHRoZQorIyAgICAgICAgICAgICBpbmRleCwgYW5kIGNvbnRlbnRzIG9mIG9yaWctW0FCXSBhdCBwYXRoIG9yaWctW0FCXQordGVzdF9zZXR1cF9yZW5hbWVfcmVuYW1lXzFfdG9fMl9iaW5hcnkgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lX3JlbmFtZV8xX3RvXzJfYmluYXJ5ICYmCisJKAorCQljZCByZW5hbWVfcmVuYW1lXzFfdG9fMl9iaW5hcnkgJiYKKworCQllY2hvICcqIGJpbmFyeScgPi5naXRhdHRyaWJ1dGVzICYmCisJCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgJiYKKworCQl0ZXN0X3NlcSAxIDEwID5vcmlnICYmCisJCWdpdCBhZGQgb3JpZyAmJgorCQlnaXQgY29tbWl0IC1tIG9yaWcgJiYKKworCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IG9yaWcgb3JpZy1BICYmCisJCXRlc3Rfc2VxIDEgMTEgPm9yaWctQSAmJgorCQlnaXQgYWRkIG9yaWctQSAmJgorCQlnaXQgY29tbWl0IC1tIG9yaWctQSAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiBvcmlnIG9yaWctQiAmJgorCQl0ZXN0X3NlcSAwIDEwID5vcmlnLUIgJiYKKwkJZ2l0IGFkZCBvcmlnLUIgJiYKKwkJZ2l0IGNvbW1pdCAtbSBvcmlnLUIKKworCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lL3JlbmFtZSgxdG8yKSB3aXRoIGEgYmluYXJ5IGZpbGUnICcKKwl0ZXN0X3NldHVwX3JlbmFtZV9yZW5hbWVfMV90b18yX2JpbmFyeSAmJgorCSgKKwkJY2QgcmVuYW1lX3JlbmFtZV8xX3RvXzJfYmluYXJ5ICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJIyBNYWtlIHN1cmUgdGhlIGluZGV4IGhhcyB0aGUgcmlnaHQgbnVtYmVyIG9mIGVudHJpZXMKKwkJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBhY3R1YWwgJiYKKworCQlnaXQgcmV2LXBhcnNlIEE6b3JpZy1BIEI6b3JpZy1CID5leHBlY3QgJiYKKwkJZ2l0IGhhc2gtb2JqZWN0IG9yaWctQSBvcmlnLUIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwNDMtbWVyZ2UtcmVuYW1lLWRpcmVjdG9yaWVzLnNoIGIvdC90NjA0My1tZXJnZS1yZW5hbWUtZGlyZWN0b3JpZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODM3OTJjNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwNDMtbWVyZ2UtcmVuYW1lLWRpcmVjdG9yaWVzLnNoCkBAIC0wLDAgKzEsNDY5MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249InJlY3Vyc2l2ZSBtZXJnZSB3aXRoIGRpcmVjdG9yeSByZW5hbWVzIgorIyBpbmNsdWRlcyBjaGVja2luZyBvZiBtYW55IGNvcm5lciBjYXNlcywgd2l0aCBhIHNpbWlsYXIgbWV0aG9kb2xvZ3kgdG86CisjICAgdDYwNDI6IGNvcm5lciBjYXNlcyB3aXRoIHJlbmFtZXMgYnV0IG5vdCBjcmlzcy1jcm9zcyBtZXJnZXMKKyMgICB0NjAzNjogY29ybmVyIGNhc2VzIHdpdGggYm90aCByZW5hbWVzIGFuZCBjcmlzcy1jcm9zcyBtZXJnZXMKKyMKKyMgVGhlIHNldHVwIGZvciBhbGwgb2YgdGhlbSwgcGljdG9yaWFsbHksIGlzOgorIworIyAgICAgIEEKKyMgICAgICBvCisjICAgICAvIFwKKyMgIE8gbyAgID8KKyMgICAgIFwgLworIyAgICAgIG8KKyMgICAgICBCCisjCisjIFRvIGhlbHAgbWFrZSBpdCBlYXNpZXIgdG8gZm9sbG93IHRoZSBmbG93IG9mIHRlc3RzLCB0aGV5IGhhdmUgYmVlbgorIyBkaXZpZGVkIGludG8gc2VjdGlvbnMgYW5kIGVhY2ggdGVzdCB3aWxsIHN0YXJ0IHdpdGggYSBxdWljayBleHBsYW5hdGlvbgorIyBvZiB3aGF0IGNvbW1pdHMgTywgQSwgYW5kIEIgY29udGFpbi4KKyMKKyMgTm90YXRpb246CisjICAgIHove2IsY30gICBtZWFucyAgZmlsZXMgei9iIGFuZCB6L2MgYm90aCBleGlzdAorIyAgICB4L2RfMSAgICAgbWVhbnMgIGZpbGUgeC9kIGV4aXN0cyB3aXRoIGNvbnRlbnQgZDEuICAoUHVycG9zZSBvZiB0aGUKKyMgICAgICAgICAgICAgICAgICAgICB1bmRlcnNjb3JlIG5vdGF0aW9uIGlzIHRvIGRpZmZlcmVudGlhdGUgZGlmZmVyZW50CisjICAgICAgICAgICAgICAgICAgICAgZmlsZXMgdGhhdCBtaWdodCBiZSByZW5hbWVkIGludG8gZWFjaCBvdGhlcidzIHBhdGhzLikKKworLiAuL3Rlc3QtbGliLnNoCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNFQ1RJT04gMTogQmFzaWMgY2FzZXMgd2Ugc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUZXN0Y2FzZSAxYSwgQmFzaWMgZGlyZWN0b3J5IHJlbmFtZS4KKyMgICBDb21taXQgTzogei97YixjfQorIyAgIENvbW1pdCBBOiB5L3tiLGN9CisjICAgQ29tbWl0IEI6IHove2IsYyxkLGUvZn0KKyMgICBFeHBlY3RlZDogeS97YixjLGQsZS9mfQorCit0ZXN0X3NldHVwXzFhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDFhICYmCisJKAorCQljZCAxYSAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHogeSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQllY2hvIGQgPnovZCAmJgorCQlta2RpciB6L2UgJiYKKwkJZWNobyBmID56L2UvZiAmJgorCQlnaXQgYWRkIHovZCB6L2UvZiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFhOiBTaW1wbGUgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24nICcKKwl0ZXN0X3NldHVwXzFhICYmCisJKAorCQljZCAxYSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eS9iIEhFQUQ6eS9jIEhFQUQ6eS9kIEhFQUQ6eS9lL2YgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86ei9iICAgIE86ei9jICAgIEI6ei9kICAgIEI6ei9lL2YgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCB5L2QgPmFjdHVhbCAmJgorCQlnaXQgcmV2LXBhcnNlIEI6ei9kID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDp6L2QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOnovZS9mICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHovZCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB6L2UvZgorCSkKKycKKworIyBUZXN0Y2FzZSAxYiwgTWVyZ2UgYSBkaXJlY3Rvcnkgd2l0aCBhbm90aGVyCisjICAgQ29tbWl0IE86IHove2IsY30sICAgeS9kCisjICAgQ29tbWl0IEE6IHove2IsYyxlfSwgeS9kCisjICAgQ29tbWl0IEI6IHkve2IsYyxkfQorIyAgIEV4cGVjdGVkOiB5L3tiLGMsZCxlfQorCit0ZXN0X3NldHVwXzFiICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDFiICYmCisJKAorCQljZCAxYiAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJbWtkaXIgeSAmJgorCQllY2hvIGQgPnkvZCAmJgorCQlnaXQgYWRkIHogeSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWVjaG8gZSA+ei9lICYmCisJCWdpdCBhZGQgei9lICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB6L2IgeSAmJgorCQlnaXQgbXYgei9jIHkgJiYKKwkJcm1kaXIgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFiOiBNZXJnZSBhIGRpcmVjdG9yeSB3aXRoIGFub3RoZXInICcKKwl0ZXN0X3NldHVwXzFiICYmCisJKAorCQljZCAxYiAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnkvYiBIRUFEOnkvYyBIRUFEOnkvZCBIRUFEOnkvZSAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgICAgTzp6L2MgICAgTzp5L2QgICAgQTp6L2UgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6ei9lCisJKQorJworCisjIFRlc3RjYXNlIDFjLCBUcmFuc2l0aXZlIHJlbmFtaW5nCisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2VzIDNhIGFuZCA2ZCAtLSB3aGVuIHNob3VsZCBhIHRyYW5zaXRpdmUgcmVuYW1lIGFwcGx5PykKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZXMgOWMgYW5kIDlkIC0tIGNhbiB0cmFuc2l0aXZpdHkgcmVwZWF0PykKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZSAxMmIgLS0gam9pbnQtdHJhbnNpdGl2aXR5PykKKyMgICBDb21taXQgTzogei97YixjfSwgICB4L2QKKyMgICBDb21taXQgQTogeS97YixjfSwgICB4L2QKKyMgICBDb21taXQgQjogei97YixjLGR9CisjICAgRXhwZWN0ZWQ6IHkve2IsYyxkfSAgKGJlY2F1c2UgeC9kIC0+IHovZCAtPiB5L2QpCisKK3Rlc3Rfc2V0dXBfMWMgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMWMgJiYKKwkoCisJCWNkIDFjICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlta2RpciB4ICYmCisJCWVjaG8gZCA+eC9kICYmCisJCWdpdCBhZGQgeiB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHogeSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgeC9kIHovZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFjOiBUcmFuc2l0aXZlIHJlbmFtaW5nJyAnCisJdGVzdF9zZXR1cF8xYyAmJgorCSgKKwkJY2QgMWMgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnkvYiBIRUFEOnkvYyBIRUFEOnkvZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgICAgTzp6L2MgICAgTzp4L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6eC9kICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDp6L2QgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgei9kCisJKQorJworCisjIFRlc3RjYXNlIDFkLCBEaXJlY3RvcnkgcmVuYW1lcyAobWVyZ2luZyB0d28gZGlyZWN0b3JpZXMgaW50byBvbmUgbmV3IG9uZSkKKyMgICAgICAgICAgICAgIGNhdXNlIGEgcmVuYW1lL3JlbmFtZSgydG8xKSBjb25mbGljdAorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlcyAxYyBhbmQgN2IpCisjICAgQ29tbWl0IE8uIHove2IsY30sICAgICAgICB5L3tkLGV9CisjICAgQ29tbWl0IEEuIHgve2IsY30sICAgICAgICB5L3tkLGUsbSx3aGFtXzF9CisjICAgQ29tbWl0IEIuIHove2IsYyxuLHdoYW1fMn0sIHgve2QsZX0KKyMgICBFeHBlY3RlZDogeC97YixjLGQsZSxtLG59LCBDT05GTElDVDooeS93aGFtXzEgJiB6L3doYW1fMiAtPiB4L3doYW0pCisjICAgTm90ZTogeS9tICYgei9uIHNob3VsZCBkZWZpbml0ZWx5IG1vdmUgaW50byB4LiAgQnkgdGhlIHNhbWUgdG9rZW4sIGJvdGgKKyMgICAgICAgICB5L3doYW1fMSAmIHovd2hhbV8yIHNob3VsZCB0b28uLi5naXZpbmcgdXMgYSBjb25mbGljdC4KKwordGVzdF9zZXR1cF8xZCAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxZCAmJgorCSgKKwkJY2QgMWQgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCW1rZGlyIHkgJiYKKwkJZWNobyBkID55L2QgJiYKKwkJZWNobyBlID55L2UgJiYKKwkJZ2l0IGFkZCB6IHkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgeiB4ICYmCisJCWVjaG8gbSA+eS9tICYmCisJCWVjaG8gd2hhbTEgPnkvd2hhbSAmJgorCQlnaXQgYWRkIHkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHkgeCAmJgorCQllY2hvIG4gPnovbiAmJgorCQllY2hvIHdoYW0yID56L3doYW0gJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMWQ6IERpcmVjdG9yeSByZW5hbWVzIGNhdXNlIGEgcmVuYW1lL3JlbmFtZSgydG8xKSBjb25mbGljdCcgJworCXRlc3Rfc2V0dXBfMWQgJiYKKwkoCisJCWNkIDFkICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKSIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gOCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eC9iIDowOngvYyA6MDp4L2QgOjA6eC9lIDowOngvbSA6MDp4L24gJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYiAgTzp6L2MgIE86eS9kICBPOnkvZSAgQTp5L20gIEI6ei9uICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDowOngvd2hhbSAmJgorCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjI6eC93aGFtIDozOngvd2hhbSAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIEE6eS93aGFtICBCOnovd2hhbSAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJIyBUZXN0IHRoYXQgdGhlIHR3by13YXkgbWVyZ2UgaW4geC93aGFtIGlzIGFzIGV4cGVjdGVkCisJCWdpdCBjYXQtZmlsZSAtcCA6Mjp4L3doYW0gPmV4cGVjdCAmJgorCQlnaXQgY2F0LWZpbGUgLXAgOjM6eC93aGFtID5vdGhlciAmJgorCQk+ZW1wdHkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgXAorCQkJLUwgIkhFQUQiIFwKKwkJCS1MICIiIFwKKwkJCS1MICJCXjAiIFwKKwkJCWV4cGVjdCBlbXB0eSBvdGhlciAmJgorCQl0ZXN0X2NtcCBleHBlY3QgeC93aGFtCisJKQorJworCisjIFRlc3RjYXNlIDFlLCBSZW5hbWVkIGRpcmVjdG9yeSwgd2l0aCBhbGwgZmlsZW5hbWVzIGJlaW5nIHJlbmFtZWQgdG9vCisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2VzIDlmICYgOWcpCisjICAgQ29tbWl0IE86IHove29sZGIsb2xkY30KKyMgICBDb21taXQgQTogeS97bmV3YixuZXdjfQorIyAgIENvbW1pdCBCOiB6L3tvbGRiLG9sZGMsZH0KKyMgICBFeHBlY3RlZDogeS97bmV3YixuZXdjLGR9CisKK3Rlc3Rfc2V0dXBfMWUgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMWUgJiYKKwkoCisJCWNkIDFlICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovb2xkYiAmJgorCQllY2hvIGMgPnovb2xkYyAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlta2RpciB5ICYmCisJCWdpdCBtdiB6L29sZGIgeS9uZXdiICYmCisJCWdpdCBtdiB6L29sZGMgeS9uZXdjICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gZCA+ei9kICYmCisJCWdpdCBhZGQgei9kICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMWU6IFJlbmFtZWQgZGlyZWN0b3J5LCB3aXRoIGFsbCBmaWxlcyBiZWluZyByZW5hbWVkIHRvbycgJworCXRlc3Rfc2V0dXBfMWUgJiYKKwkoCisJCWNkIDFlICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eS9uZXdiIEhFQUQ6eS9uZXdjIEhFQUQ6eS9kICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovb2xkYiAgICBPOnovb2xkYyAgICBCOnovZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDp6L2QKKwkpCisnCisKKyMgVGVzdGNhc2UgMWYsIFNwbGl0IGEgZGlyZWN0b3J5IGludG8gdHdvIG90aGVyIGRpcmVjdG9yaWVzCisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2VzIDNhLCBhbGwgb2Ygc2VjdGlvbiAyLCBhbmQgYWxsIG9mIHNlY3Rpb24gNCkKKyMgICBDb21taXQgTzogei97YixjLGQsZSxmfQorIyAgIENvbW1pdCBBOiB6L3tiLGMsZCxlLGYsZ30KKyMgICBDb21taXQgQjogeS97YixjfSwgeC97ZCxlLGZ9CisjICAgRXhwZWN0ZWQ6IHkve2IsY30sIHgve2QsZSxmLGd9CisKK3Rlc3Rfc2V0dXBfMWYgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMWYgJiYKKwkoCisJCWNkIDFmICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQllY2hvIGQgPnovZCAmJgorCQllY2hvIGUgPnovZSAmJgorCQllY2hvIGYgPnovZiAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQllY2hvIGcgPnovZyAmJgorCQlnaXQgYWRkIHovZyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlta2RpciB5ICYmCisJCW1rZGlyIHggJiYKKwkJZ2l0IG12IHovYiB5LyAmJgorCQlnaXQgbXYgei9jIHkvICYmCisJCWdpdCBtdiB6L2QgeC8gJiYKKwkJZ2l0IG12IHovZSB4LyAmJgorCQlnaXQgbXYgei9mIHgvICYmCisJCXJtZGlyIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxZjogU3BsaXQgYSBkaXJlY3RvcnkgaW50byB0d28gb3RoZXIgZGlyZWN0b3JpZXMnICcKKwl0ZXN0X3NldHVwXzFmICYmCisJKAorCQljZCAxZiAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnkvYiBIRUFEOnkvYyBIRUFEOngvZCBIRUFEOngvZSBIRUFEOngvZiBIRUFEOngvZyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgICAgTzp6L2MgICAgTzp6L2QgICAgTzp6L2UgICAgTzp6L2YgICAgQTp6L2cgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB6L2cgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOnovZworCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJ1bGVzIHN1Z2dlc3RlZCBieSB0ZXN0Y2FzZXMgaW4gc2VjdGlvbiAxOgorIworIyAgIFdlIHNob3VsZCBzdGlsbCBkZXRlY3QgdGhlIGRpcmVjdG9yeSByZW5hbWUgZXZlbiBpZiBpdCB3YXNuJ3QganVzdAorIyAgIHRoZSBkaXJlY3RvcnkgcmVuYW1lZCwgYnV0IHRoZSBmaWxlcyB3aXRoaW4gaXQuIChzZWUgMWIpCisjCisjICAgSWYgcmVuYW1lcyBzcGxpdCBhIGRpcmVjdG9yeSBpbnRvIHR3byBvciBtb3JlIG90aGVycywgdGhlIGRpcmVjdG9yeQorIyAgIHdpdGggdGhlIG1vc3QgcmVuYW1lcywgIndpbnMiIChzZWUgMWMpLiAgSG93ZXZlciwgc2VlIHRoZSB0ZXN0Y2FzZXMKKyMgICBpbiBzZWN0aW9uIDIsIHBsdXMgdGVzdGNhc2VzIDNhIGFuZCA0YS4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTRUNUSU9OIDI6IFNwbGl0IGludG8gbXVsdGlwbGUgZGlyZWN0b3JpZXMsIHdpdGggZXF1YWwgbnVtYmVyIG9mIHBhdGhzCisjCisjIEV4cGxvcmUgdGhlIHNwbGl0dGluZy1hLWRpcmVjdG9yeSBydWxlcyBhIGJpdDsgd2hhdCBoYXBwZW5zIGluIHRoZQorIyBlZGdlIGNhc2VzPworIworIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBjbG9zZWx5IHJlbGF0ZWQgY2FzZSBvZiBhIGRpcmVjdG9yeSBub3QgYmVpbmcKKyMgc3BsaXQgb24gZWl0aGVyIHNpZGUgb2YgaGlzdG9yeSwgYnV0IGJlaW5nIHJlbmFtZWQgZGlmZmVyZW50bHkgb24KKyMgZWFjaCBzaWRlLiAgU2VlIHRlc3RjYXNlIDhlIGZvciB0aGF0LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGVzdGNhc2UgMmEsIERpcmVjdG9yeSBzcGxpdCBpbnRvIHR3byBvbiBvbmUgc2lkZSwgd2l0aCBlcXVhbCBudW1iZXJzIG9mIHBhdGhzCisjICAgQ29tbWl0IE86IHove2IsY30KKyMgICBDb21taXQgQTogeS9iLCB3L2MKKyMgICBDb21taXQgQjogei97YixjLGR9CisjICAgRXhwZWN0ZWQ6IHkvYiwgdy9jLCB6L2QsIHdpdGggd2FybmluZyBhYm91dCB6LyAtPiAoeS8gdnMuIHcvKSBjb25mbGljdAordGVzdF9zZXR1cF8yYSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAyYSAmJgorCSgKKwkJY2QgMmEgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCW1rZGlyIHkgJiYKKwkJbWtkaXIgdyAmJgorCQlnaXQgbXYgei9iIHkvICYmCisJCWdpdCBtdiB6L2Mgdy8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZWNobyBkID56L2QgJiYKKwkJZ2l0IGFkZCB6L2QgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyYTogRGlyZWN0b3J5IHNwbGl0IGludG8gdHdvIG9uIG9uZSBzaWRlLCB3aXRoIGVxdWFsIG51bWJlcnMgb2YgcGF0aHMnICcKKwl0ZXN0X3NldHVwXzJhICYmCisJKAorCQljZCAyYSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJDT05GTElDVC4qZGlyZWN0b3J5IHJlbmFtZSBzcGxpdCIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9iIDowOncvYyA6MDp6L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYiAgTzp6L2MgIEI6ei9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgMmIsIERpcmVjdG9yeSBzcGxpdCBpbnRvIHR3byBvbiBvbmUgc2lkZSwgd2l0aCBlcXVhbCBudW1iZXJzIG9mIHBhdGhzCisjICAgQ29tbWl0IE86IHove2IsY30KKyMgICBDb21taXQgQTogeS9iLCB3L2MKKyMgICBDb21taXQgQjogei97YixjfSwgeC9kCisjICAgRXhwZWN0ZWQ6IHkvYiwgdy9jLCB4L2Q7IE5vIHdhcm5pbmcgYWJvdXQgei8gLT4gKHkvIHZzLiB3LykgY29uZmxpY3QKK3Rlc3Rfc2V0dXBfMmIgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMmIgJiYKKwkoCisJCWNkIDJiICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlta2RpciB5ICYmCisJCW1rZGlyIHcgJiYKKwkJZ2l0IG12IHovYiB5LyAmJgorCQlnaXQgbXYgei9jIHcvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCW1rZGlyIHggJiYKKwkJZWNobyBkID54L2QgJiYKKwkJZ2l0IGFkZCB4L2QgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyYjogRGlyZWN0b3J5IHNwbGl0IGludG8gdHdvIG9uIG9uZSBzaWRlLCB3aXRoIGVxdWFsIG51bWJlcnMgb2YgcGF0aHMnICcKKwl0ZXN0X3NldHVwXzJiICYmCisJKAorCQljZCAyYiAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCTowOnkvYiA6MDp3L2MgOjA6eC9kICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQkgTzp6L2IgIE86ei9jICBCOngvZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3RfaTE4bmdyZXAgISAiQ09ORkxJQ1QuKmRpcmVjdG9yeSByZW5hbWUgc3BsaXQiIG91dAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJ1bGVzIHN1Z2dlc3RlZCBieSBzZWN0aW9uIDI6CisjCisjICAgTm9uZTsgdGhlIHJ1bGUgd2FzIGFscmVhZHkgY292ZXJlZCBpbiBzZWN0aW9uIDEuICBUaGVzZSB0ZXN0Y2FzZXMgYXJlCisjICAgaGVyZSBqdXN0IHRvIG1ha2Ugc3VyZSB0aGUgY29uZmxpY3QgcmVzb2x1dGlvbiBhbmQgbmVjZXNzYXJ5IHdhcm5pbmcKKyMgICBtZXNzYWdlcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU0VDVElPTiAzOiBQYXRoIGluIHF1ZXN0aW9uIGlzIHRoZSBzb3VyY2UgcGF0aCBmb3Igc29tZSByZW5hbWUgYWxyZWFkeQorIworIyBDb21iaW5pbmcgY2FzZXMgZnJvbSBTZWN0aW9uIDEgYW5kIHRyeWluZyB0byBoYW5kbGUgdGhlbSBjb3VsZCBsZWFkIHRvCisjIGRpcmVjdG9yeSByZW5hbWluZyBkZXRlY3Rpb24gYmVpbmcgb3Zlci1hcHBsaWVkLiAgU28sIHRoaXMgc2VjdGlvbgorIyBwcm92aWRlcyBzb21lIGdvb2QgdGVzdGNhc2VzIHRvIGNoZWNrIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgZ28KKyMgdG9vIGZhci4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRlc3RjYXNlIDNhLCBBdm9pZCBpbXBsaWNpdCByZW5hbWUgaWYgaW52b2x2ZWQgYXMgc291cmNlIG9uIG90aGVyIHNpZGUKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZXMgMWMsIDFmLCBhbmQgOWgpCisjICAgQ29tbWl0IE86IHove2IsYyxkfQorIyAgIENvbW1pdCBBOiB6L3tiLGMsZH0gKG5vIGNoYW5nZSkKKyMgICBDb21taXQgQjogeS97YixjfSwgeC9kCisjICAgRXhwZWN0ZWQ6IHkve2IsY30sIHgvZAordGVzdF9zZXR1cF8zYSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAzYSAmJgorCSgKKwkJY2QgM2EgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWVjaG8gZCA+ei9kICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJbWtkaXIgeSAmJgorCQlta2RpciB4ICYmCisJCWdpdCBtdiB6L2IgeS8gJiYKKwkJZ2l0IG12IHovYyB5LyAmJgorCQlnaXQgbXYgei9kIHgvICYmCisJCXJtZGlyIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczYTogQXZvaWQgaW1wbGljaXQgcmVuYW1lIGlmIGludm9sdmVkIGFzIHNvdXJjZSBvbiBvdGhlciBzaWRlJyAnCisJdGVzdF9zZXR1cF8zYSAmJgorCSgKKwkJY2QgM2EgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJSEVBRDp5L2IgSEVBRDp5L2MgSEVBRDp4L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86ei9iICAgIE86ei9jICAgIE86ei9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgM2IsIEF2b2lkIGltcGxpY2l0IHJlbmFtZSBpZiBpbnZvbHZlZCBhcyBzb3VyY2Ugb24gb3RoZXIgc2lkZQorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlcyA1YyBhbmQgN2MsIGFsc28ga2luZCBvZiAxZSBhbmQgMWYpCisjICAgQ29tbWl0IE86IHove2IsYyxkfQorIyAgIENvbW1pdCBBOiB5L3tiLGN9LCB4L2QKKyMgICBDb21taXQgQjogei97YixjfSwgdy9kCisjICAgRXhwZWN0ZWQ6IHkve2IsY30sIENPTkZMSUNUOih6L2QgLT4geC9kIHZzLiB3L2QpCisjICAgTk9URTogV2UncmUgcGFydGljdWxhcmx5IGNoZWNraW5nIHRoYXQgc2luY2Ugei9kIGlzIGFscmVhZHkgaW52b2x2ZWQgYXMKKyMgICAgICAgICBhIHNvdXJjZSBpbiBhIGZpbGUgcmVuYW1lIG9uIHRoZSBzYW1lIHNpZGUgb2YgaGlzdG9yeSwgdGhhdCB3ZSBkb24ndAorIyAgICAgICAgIGdldCBpdCBpbnZvbHZlZCBpbiBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbi4gIElmIGl0IHdlcmUsIHdlIG1pZ2h0CisjICAgICAgICAgZW5kIHVwIHdpdGggQ09ORkxJQ1Q6KHovZCAtPiB5L2QgdnMuIHgvZCB2cy4gdy9kKSwgaS5lLiBhCisjICAgICAgICAgcmVuYW1lL3JlbmFtZS9yZW5hbWUoMXRvMykgY29uZmxpY3QsIHdoaWNoIGlzIGp1c3Qgd2VpcmQuCit0ZXN0X3NldHVwXzNiICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDNiICYmCisJKAorCQljZCAzYiAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJZWNobyBkID56L2QgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJbWtkaXIgeSAmJgorCQlta2RpciB4ICYmCisJCWdpdCBtdiB6L2IgeS8gJiYKKwkJZ2l0IG12IHovYyB5LyAmJgorCQlnaXQgbXYgei9kIHgvICYmCisJCXJtZGlyIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJbWtkaXIgdyAmJgorCQlnaXQgbXYgei9kIHcvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnM2I6IEF2b2lkIGltcGxpY2l0IHJlbmFtZSBpZiBpbnZvbHZlZCBhcyBzb3VyY2Ugb24gY3VycmVudCBzaWRlJyAnCisJdGVzdF9zZXR1cF8zYiAmJgorCSgKKwkJY2QgM2IgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCBDT05GTElDVC4qcmVuYW1lL3JlbmFtZS4qei9kLip4L2QuKncvZCBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAhIENPTkZMSUNULipyZW5hbWUvcmVuYW1lLip5L2Qgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9iIDowOnkvYyA6MTp6L2QgOjI6eC9kIDozOncvZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9iICBPOnovYyAgTzp6L2QgIE86ei9kICBPOnovZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgei9kICYmCisJCWdpdCBoYXNoLW9iamVjdCA+YWN0dWFsIFwKKwkJCXgvZCAgIHcvZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2QgTzp6L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJ1bGVzIHN1Z2dlc3RlZCBieSBzZWN0aW9uIDM6CisjCisjICAgQXZvaWQgZGlyZWN0b3J5LXJlbmFtZS1kZXRlY3Rpb24gZm9yIGEgcGF0aCwgaWYgdGhhdCBwYXRoIGlzIHRoZSBzb3VyY2UKKyMgICBvZiBhIHJlbmFtZSBvbiBlaXRoZXIgc2lkZSBvZiBhIG1lcmdlLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNFQ1RJT04gNDogUGFydGlhbGx5IHJlbmFtZWQgZGlyZWN0b3J5OyBzdGlsbCBleGlzdHMgb24gYm90aCBzaWRlcyBvZiBtZXJnZQorIworIyBXaGF0IGlmIHdlIHdlcmUgdG8gYXR0ZW1wdCB0byBkbyBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiB3aGVuIHNvbWVvbmUKKyMgIm1vc3RseSIgbW92ZWQgYSBkaXJlY3RvcnkgYnV0IHN0aWxsIGxlZnQgc29tZSBmaWxlcyBhcm91bmQsIG9yLAorIyBlcXVpdmFsZW50bHksIGZ1bGx5IHJlbmFtZWQgYSBkaXJlY3RvcnkgaW4gb25lIGNvbW1pdCBhbmQgdGhlbiByZWNyZWF0ZWQKKyMgdGhhdCBkaXJlY3RvcnkgaW4gYSBsYXRlciBjb21taXQgYWRkaW5nIHNvbWUgbmV3IGZpbGVzIGFuZCB0aGVuIHRyaWVkIHRvCisjIG1lcmdlPworIworIyBJdCdzIGhhcmQgdG8gZGl2aW5lIHVzZXIgaW50ZW50IGluIHRoZXNlIGNhc2VzLCBiZWNhdXNlIHlvdSBjYW4gbWFrZSBhbgorIyBhcmd1bWVudCB0aGF0LCBkZXBlbmRpbmcgb24gdGhlIGludGVybWVkaWF0ZSBoaXN0b3J5IG9mIHRoZSBzaWRlIGJlaW5nCisjIG1lcmdlZCwgdGhhdCBzb21lIHVzZXJzIHdpbGwgd2FudCBmaWxlcyBpbiB0aGF0IGRpcmVjdG9yeSB0bworIyBhdXRvbWF0aWNhbGx5IGJlIGRldGVjdGVkIGFuZCByZW5hbWVkLCB3aGlsZSB1c2VycyB3aXRoIGEgZGlmZmVyZW50CisjIGludGVybWVkaWF0ZSBoaXN0b3J5IHdvdWxkbid0IHdhbnQgdGhhdCByZW5hbWUgdG8gaGFwcGVuLgorIworIyBJIHRoaW5rIHRoYXQgaXQgaXMgYmVzdCB0byBzaW1wbHkgbm90IGhhdmUgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24KKyMgYXBwbHkgdG8gc3VjaCBjYXNlcy4gIE15IHJlYXNvbmluZyBmb3IgdGhpcyBpcyBmb3VyLWZvbGQ6ICgxKSBpdCdzCisjIGVhc2llc3QgZm9yIHVzZXJzIGluIGdlbmVyYWwgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbmVkIGlmIHdlIGRvbid0CisjIGFwcGx5IGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGluIGFueSBzdWNoIGNhc2UsICgyKSBpdCdzIGFuIGVhc3kgcnVsZQorIyB0byBleHBsYWluIFsiV2UgZG9uJ3QgZG8gZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gaWYgdGhlIGRpcmVjdG9yeQorIyBzdGlsbCBleGlzdHMgb24gYm90aCBzaWRlcyBvZiB0aGUgbWVyZ2UiXSwgKDMpIHdlIGNhbiBnZXQgc29tZSBoYWlyeQorIyBlZGdlL2Nvcm5lciBjYXNlcyB0aGF0IHdvdWxkIGJlIHJlYWxseSBjb25mdXNpbmcgYW5kIHBvc3NpYmx5IG5vdCBldmVuCisjIHJlcHJlc2VudGFibGUgaW4gdGhlIGluZGV4IGlmIHdlIHdlcmUgdG8gZXZlbiB0cnksIGFuZCBbcmVsYXRlZCB0byAzXSAoNCkKKyMgYXR0ZW1wdGluZyB0byByZXNvbHZlIHRoaXMgaXNzdWUgb2YgZGl2aW5pbmcgdXNlciBpbnRlbnQgYnkgZXhhbWluaW5nCisjIGludGVybWVkaWF0ZSBoaXN0b3J5IGdvZXMgYWdhaW5zdCB0aGUgc3Bpcml0IG9mIHRocmVlLXdheSBtZXJnZXMgYW5kIGlzIGEKKyMgcGF0aCB0b3dhcmRzIGNyYXp5IGNvcm5lciBjYXNlcyB0aGF0IGFyZSBmYXIgbW9yZSBjb21wbGV4IHRoYW4gd2hhdCB3ZSdyZQorIyBhbHJlYWR5IGRlYWxpbmcgd2l0aC4KKyMKKyMgTm90ZSB0aGF0IHRoZSB3b3JkaW5nIG9mIHRoZSBydWxlICgiV2UgZG9uJ3QgZG8gZGlyZWN0b3J5IHJlbmFtZQorIyBkZXRlY3Rpb24gaWYgdGhlIGRpcmVjdG9yeSBzdGlsbCBleGlzdHMgb24gYm90aCBzaWRlcyBvZiB0aGUgbWVyZ2UuIikKKyMgYWxzbyBleGNsdWRlcyAicmVuYW1pbmciIG9mIGEgZGlyZWN0b3J5IGludG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmCisjIChlLmcuIC9zb21lL2Rpci8qIC0+IC9zb21lL2Rpci9zdWJkaXIvKikuICBJdCBtYXkgYmUgcG9zc2libGUgdG8gY2FydmUKKyMgb3V0IGFuIGV4Y2VwdGlvbiBmb3IgInJlbmFtaW5nIi1iZW5lYXRoLWl0c2VsZiBjYXNlcyB3aXRob3V0IG9wZW5pbmcKKyMgd2VpcmQgZWRnZS9jb3JuZXIgY2FzZXMgZm9yIG90aGVyIHBhcnRpYWwgZGlyZWN0b3J5IHJlbmFtZXMsIGJ1dCBmb3Igbm93CisjIHdlIGFyZSBrZWVwaW5nIHRoZSBydWxlIHNpbXBsZS4KKyMKKyMgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGEgdGVzdCBmb3IgYSBwYXJ0aWFsbHktcmVuYW1lZC1kaXJlY3RvcnkgY2FzZS4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRlc3RjYXNlIDRhLCBEaXJlY3Rvcnkgc3BsaXQsIHdpdGggb3JpZ2luYWwgZGlyZWN0b3J5IHN0aWxsIHByZXNlbnQKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZSAxZikKKyMgICBDb21taXQgTzogei97YixjLGQsZX0KKyMgICBDb21taXQgQTogeS97YixjLGR9LCB6L2UKKyMgICBDb21taXQgQjogei97YixjLGQsZSxmfQorIyAgIEV4cGVjdGVkOiB5L3tiLGMsZH0sIHove2UsZn0KKyMgICBOT1RFOiBFdmVuIHRob3VnaCBtb3N0IGZpbGVzIGZyb20geiBtb3ZlZCB0byB5LCB3ZSBkb24ndCB3YW50IGYgdG8gZm9sbG93LgorCit0ZXN0X3NldHVwXzRhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDRhICYmCisJKAorCQljZCA0YSAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJZWNobyBkID56L2QgJiYKKwkJZWNobyBlID56L2UgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJbWtkaXIgeSAmJgorCQlnaXQgbXYgei9iIHkvICYmCisJCWdpdCBtdiB6L2MgeS8gJiYKKwkJZ2l0IG12IHovZCB5LyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQllY2hvIGYgPnovZiAmJgorCQlnaXQgYWRkIHovZiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzRhOiBEaXJlY3Rvcnkgc3BsaXQsIHdpdGggb3JpZ2luYWwgZGlyZWN0b3J5IHN0aWxsIHByZXNlbnQnICcKKwl0ZXN0X3NldHVwXzRhICYmCisJKAorCQljZCA0YSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnkvYiBIRUFEOnkvYyBIRUFEOnkvZCBIRUFEOnovZSBIRUFEOnovZiAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgICAgTzp6L2MgICAgTzp6L2QgICAgTzp6L2UgICAgQjp6L2YgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJ1bGVzIHN1Z2dlc3RlZCBieSBzZWN0aW9uIDQ6CisjCisjICAgRGlyZWN0b3J5LXJlbmFtZS1kZXRlY3Rpb24gc2hvdWxkIGJlIHR1cm5lZCBvZmYgZm9yIGFueSBkaXJlY3RvcmllcyAoYXMKKyMgICBhIHNvdXJjZSBmb3IgcmVuYW1lcykgdGhhdCBleGlzdCBvbiBib3RoIHNpZGVzIG9mIHRoZSBtZXJnZS4gIChUaGUgImFzCisjICAgYSBzb3VyY2UgZm9yIHJlbmFtZXMiIGNsYXJpZmljYXRpb24gaXMgZHVlIHRvIGNhc2VzIGxpa2UgMWMgd2hlcmUKKyMgICB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMgb24gYm90aCBzaWRlcyBhbmQgd2UgZG8gd2FudCB0aGUgcmVuYW1lCisjICAgZGV0ZWN0aW9uLikgIEJ1dCwgc2FkbHksIHNlZSB0ZXN0Y2FzZSA4Yi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTRUNUSU9OIDU6IEZpbGVzL2RpcmVjdG9yaWVzIGluIHRoZSB3YXkgb2Ygc3Vic2V0IG9mIHRvLWJlLXJlbmFtZWQgcGF0aHMKKyMKKyMgSW1wbGljaXRseSByZW5hbWluZyBmaWxlcyBkdWUgdG8gYSBkZXRlY3RlZCBkaXJlY3RvcnkgcmVuYW1lIGNvdWxkIHJ1bgorIyBpbnRvIHByb2JsZW1zIGlmIHRoZXJlIGFyZSBmaWxlcyBvciBkaXJlY3RvcmllcyBpbiB0aGUgd2F5IG9mIHRoZSBwYXRocworIyB3ZSB3YW50IHRvIHJlbmFtZS4gIEV4cGxvcmUgc3VjaCBjYXNlcyBpbiB0aGlzIHNlY3Rpb24uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUZXN0Y2FzZSA1YSwgTWVyZ2UgZGlyZWN0b3JpZXMsIG90aGVyIHNpZGUgYWRkcyBmaWxlcyB0byBvcmlnaW5hbCBhbmQgdGFyZ2V0CisjICAgQ29tbWl0IE86IHove2IsY30sICAgICAgIHkvZAorIyAgIENvbW1pdCBBOiB6L3tiLGMsZV8xLGZ9LCB5L3tkLGVfMn0KKyMgICBDb21taXQgQjogeS97YixjLGR9CisjICAgRXhwZWN0ZWQ6IHovZV8xLCB5L3tiLGMsZCxlXzIsZn0gKyBDT05GTElDVCB3YXJuaW5nCisjICAgTk9URTogV2hpbGUgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gaXMgYWN0aXZlIGhlcmUgY2F1c2luZyB6L2YgdG8KKyMgICAgICAgICBiZWNvbWUgeS9mLCB3ZSBkaWQgbm90IGFwcGx5IHRoaXMgZm9yIHovZV8xIGJlY2F1c2UgdGhhdCB3b3VsZAorIyAgICAgICAgIGdpdmUgdXMgYW4gYWRkL2FkZCBjb25mbGljdCBmb3IgeS9lXzEgdnMgeS9lXzIuICBUaGlzIHByb2JsZW0gd2l0aAorIyAgICAgICAgIHRoaXMgYWRkL2FkZCwgaXMgdGhhdCBib3RoIHZlcnNpb25zIG9mIHkvZSBhcmUgZnJvbSB0aGUgc2FtZSBzaWRlCisjICAgICAgICAgb2YgaGlzdG9yeSwgZ2l2aW5nIHVzIG5vIHdheSB0byByZXByZXNlbnQgdGhpcyBjb25mbGljdCBpbiB0aGUKKyMgICAgICAgICBpbmRleC4KKwordGVzdF9zZXR1cF81YSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA1YSAmJgorCSgKKwkJY2QgNWEgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCW1rZGlyIHkgJiYKKwkJZWNobyBkID55L2QgJiYKKwkJZ2l0IGFkZCB6IHkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQllY2hvIGUxID56L2UgJiYKKwkJZWNobyBmID56L2YgJiYKKwkJZWNobyBlMiA+eS9lICYmCisJCWdpdCBhZGQgei9lIHovZiB5L2UgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHovYiB5LyAmJgorCQlnaXQgbXYgei9jIHkvICYmCisJCXJtZGlyIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc1YTogTWVyZ2UgZGlyZWN0b3JpZXMsIG90aGVyIHNpZGUgYWRkcyBmaWxlcyB0byBvcmlnaW5hbCBhbmQgdGFyZ2V0JyAnCisJdGVzdF9zZXR1cF81YSAmJgorCSgKKwkJY2QgNWEgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QuKmltcGxpY2l0IGRpciByZW5hbWUiIG91dCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDYgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCTowOnkvYiA6MDp5L2MgOjA6eS9kIDowOnkvZSA6MDp6L2UgOjA6eS9mICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQkgTzp6L2IgIE86ei9jICBPOnkvZCAgQTp5L2UgIEE6ei9lICBBOnovZiAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIDViLCBSZW5hbWUvZGVsZXRlIGluIG9yZGVyIHRvIGdldCBhZGQvYWRkL2FkZCBjb25mbGljdAorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlIDhkOyB0aGVzZSBtYXkgYXBwZWFyIHNsaWdodGx5IGluY29uc2lzdGVudCB0byB1c2VyczsKKyMgICAgQWxzbyByZWxhdGVkIHRvIHRlc3RjYXNlcyA3ZCBhbmQgN2UpCisjICAgQ29tbWl0IE86IHove2IsYyxkXzF9CisjICAgQ29tbWl0IEE6IHkve2IsYyxkXzJ9CisjICAgQ29tbWl0IEI6IHove2IsYyxkXzEsZX0sIHkvZF8zCisjICAgRXhwZWN0ZWQ6IHkve2IsYyxlfSwgQ09ORkxJQ1QoYWRkL2FkZDogeS9kXzIgdnMuIHkvZF8zKQorIyAgIE5PVEU6IElmIHovZF8xIGluIGNvbW1pdCBCIHdlcmUgdG8gYmUgaW52b2x2ZWQgaW4gZGlyIHJlbmFtZSBkZXRlY3Rpb24sIGFzCisjICAgICAgICAgd2Ugbm9ybWFsbHkgd291bGQgc2luY2Ugei8gaXMgYmVpbmcgcmVuYW1lZCB0byB5LywgdGhlbiB0aGlzIHdvdWxkIGJlCisjICAgICAgICAgYSByZW5hbWUvZGVsZXRlICh6L2RfMSAtPiB5L2RfMSB2cy4gZGVsZXRlZCkgQU5EIGFuIGFkZC9hZGQvYWRkCisjICAgICAgICAgY29uZmxpY3Qgb2YgeS9kXzEgdnMuIHkvZF8yIHZzLiB5L2RfMy4gIEFkZC9hZGQvYWRkIGlzIG5vdAorIyAgICAgICAgIHJlcHJlc2VudGFibGUgaW4gdGhlIGluZGV4LCBzbyB0aGUgZXhpc3RlbmNlIG9mIHkvZF8zIG5lZWRzIHRvCisjICAgICAgICAgY2F1c2UgdXMgdG8gYmFpbCBvbiBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBmb3IgdGhhdCBwYXRoLCBmYWxsaW5nCisjICAgICAgICAgYmFjayB0byBnaXQgYmVoYXZpb3Igd2l0aG91dCB0aGUgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24uCisKK3Rlc3Rfc2V0dXBfNWIgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gNWIgJiYKKwkoCisJCWNkIDViICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQllY2hvIGQxID56L2QgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IHJtIHovZCAmJgorCQlnaXQgbXYgeiB5ICYmCisJCWVjaG8gZDIgPnkvZCAmJgorCQlnaXQgYWRkIHkvZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlta2RpciB5ICYmCisJCWVjaG8gZDMgPnkvZCAmJgorCQllY2hvIGUgPnovZSAmJgorCQlnaXQgYWRkIHkvZCB6L2UgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc1YjogUmVuYW1lL2RlbGV0ZSBpbiBvcmRlciB0byBnZXQgYWRkL2FkZC9hZGQgY29uZmxpY3QnICcKKwl0ZXN0X3NldHVwXzViICYmCisJKAorCQljZCA1YiAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJDT05GTElDVCAoYWRkL2FkZCkuKiB5L2QiIG91dCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCTowOnkvYiA6MDp5L2MgOjA6eS9lIDoyOnkvZCA6Mzp5L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYiAgTzp6L2MgIEI6ei9lICBBOnkvZCAgQjp5L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOjE6eS9kICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHkvZAorCSkKKycKKworIyBUZXN0Y2FzZSA1YywgVHJhbnNpdGl2ZSByZW5hbWUgd291bGQgY2F1c2UgcmVuYW1lL3JlbmFtZS9yZW5hbWUvYWRkL2FkZC9hZGQKKyMgICAoRGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gd291bGQgcmVzdWx0IGluIHRyYW5zaXRpdmUgcmVuYW1lIHZzLgorIyAgICByZW5hbWUvcmVuYW1lKDF0bzIpIGFuZCB0dXJuIGl0IGludG8gYSByZW5hbWUvcmVuYW1lKDF0bzMpLiAgRnVydGhlciwKKyMgICAgcmVuYW1lIHBhdGhzIGNvbmZsaWN0IHdpdGggc2VwYXJhdGUgYWRkcyBvbiB0aGUgb3RoZXIgc2lkZSkKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZXMgM2IgYW5kIDdjKQorIyAgIENvbW1pdCBPOiB6L3tiLGN9LCB4L2RfMQorIyAgIENvbW1pdCBBOiB5L3tiLGMsZF8yfSwgdy9kXzEKKyMgICBDb21taXQgQjogei97YixjLGRfMSxlfSwgdy9kXzMsIHkvZF80CisjICAgRXhwZWN0ZWQ6IEEgbWVzcywgYnV0IG9ubHkgYSByZW5hbWUvcmVuYW1lKDF0bzIpL2FkZC9hZGQgbWVzcy4gIFVzZSB0aGUKKyMgICAgICAgICAgICAgcHJlc2VuY2Ugb2YgeS9kXzQgaW4gQiB0byBhdm9pZCBkb2luZyB0cmFuc2l0aXZlIHJlbmFtZSBvZgorIyAgICAgICAgICAgICB4L2RfMSAtPiB6L2RfMSAtPiB5L2RfMSwgc28gdGhhdCB0aGUgb25seSBwYXRocyB3ZSBoYXZlIGF0CisjICAgICAgICAgICAgIHkvZCBhcmUgeS9kXzIgYW5kIHkvZF80LiAgV2Ugc3RpbGwgZG8gdGhlIG1vdmUgZnJvbSB6L2UgdG8geS9lLAorIyAgICAgICAgICAgICB0aG91Z2gsIGJlY2F1c2UgaXQgZG9lc24ndCBoYXZlIGFueXRoaW5nIGluIHRoZSB3YXkuCisKK3Rlc3Rfc2V0dXBfNWMgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gNWMgJiYKKwkoCisJCWNkIDVjICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlta2RpciB4ICYmCisJCWVjaG8gZDEgPngvZCAmJgorCQlnaXQgYWRkIHogeCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJZWNobyBkMiA+eS9kICYmCisJCWdpdCBhZGQgeS9kICYmCisJCWdpdCBtdiB4IHcgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHgvZCB6LyAmJgorCQlta2RpciB3ICYmCisJCW1rZGlyIHkgJiYKKwkJZWNobyBkMyA+dy9kICYmCisJCWVjaG8gZDQgPnkvZCAmJgorCQllY2hvIGUgPnovZSAmJgorCQlnaXQgYWRkIHcvIHkvIHovZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzVjOiBUcmFuc2l0aXZlIHJlbmFtZSB3b3VsZCBjYXVzZSByZW5hbWUvcmVuYW1lL3JlbmFtZS9hZGQvYWRkL2FkZCcgJworCXRlc3Rfc2V0dXBfNWMgJiYKKwkoCisJCWNkIDVjICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKS4qeC9kLip3L2QuKnovZCIgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChhZGQvYWRkKS4qIHkvZCIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gOSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9iIDowOnkvYyA6MDp5L2UgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYiAgTzp6L2MgIEI6ei9lICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDoxOnkvZCAmJgorCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjI6dy9kIDozOncvZCA6MTp4L2QgOjI6eS9kIDozOnkvZCA6Mzp6L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOngvZCAgQjp3L2QgIE86eC9kICBBOnkvZCAgQjp5L2QgIE86eC9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgPmFjdHVhbCBcCisJCQl6L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86eC9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgeC9kICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHkvZCAmJgorCQlncmVwIC1xICI8PDw8IiB5L2QgICMgY29uZmxpY3QgbWFya2VycyBzaG91bGQgYmUgcHJlc2VudAorCSkKKycKKworIyBUZXN0Y2FzZSA1ZCwgRGlyZWN0b3J5L2ZpbGUvZmlsZSBjb25mbGljdCBkdWUgdG8gZGlyZWN0b3J5IHJlbmFtZQorIyAgIENvbW1pdCBPOiB6L3tiLGN9CisjICAgQ29tbWl0IEE6IHkve2IsYyxkXzF9CisjICAgQ29tbWl0IEI6IHove2IsYyxkXzIsZn0sIHkvZC9lCisjICAgRXhwZWN0ZWQ6IHkve2IsYyxkL2UsZn0sIHovZF8yLCBDT05GTElDVChmaWxlL2RpcmVjdG9yeSksIHkvZF8xfkhFQUQKKyMgICBOb3RlOiBUaGUgZmFjdCB0aGF0IHkvZC8gZXhpc3RzIGluIEIgbWFrZXMgdXMgYmFpbCBvbiBkaXJlY3RvcnkgcmVuYW1lCisjICAgICAgICAgZGV0ZWN0aW9uIGZvciB6L2RfMiwgYnV0IHRoYXQgZG9lc24ndCBwcmV2ZW50IHVzIGZyb20gYXBwbHlpbmcgdGhlCisjICAgICAgICAgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gZm9yIHovZiAtPiB5L2YuCisKK3Rlc3Rfc2V0dXBfNWQgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gNWQgJiYKKwkoCisJCWNkIDVkICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgeiB5ICYmCisJCWVjaG8gZDEgPnkvZCAmJgorCQlnaXQgYWRkIHkvZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlta2RpciAtcCB5L2QgJiYKKwkJZWNobyBlID55L2QvZSAmJgorCQllY2hvIGQyID56L2QgJiYKKwkJZWNobyBmID56L2YgJiYKKwkJZ2l0IGFkZCB5L2QvZSB6L2Qgei9mICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNWQ6IERpcmVjdG9yeS9maWxlL2ZpbGUgY29uZmxpY3QgZHVlIHRvIGRpcmVjdG9yeSByZW5hbWUnICcKKwl0ZXN0X3NldHVwXzVkICYmCisJKAorCQljZCA1ZCAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJDT05GTElDVCAoZmlsZS9kaXJlY3RvcnkpLip5L2QiIG91dCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDYgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCTowOnkvYiA6MDp5L2MgOjA6ei9kIDowOnkvZiA6Mjp5L2QgOjA6eS9kL2UgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYiAgTzp6L2MgIEI6ei9kICBCOnovZiAgQTp5L2QgIEI6eS9kL2UgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCB5L2R+SEVBRCA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgQTp5L2QgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUnVsZXMgc3VnZ2VzdGVkIGJ5IHNlY3Rpb24gNToKKyMKKyMgICBJZiBhIHN1YnNldCBvZiB0by1iZS1yZW5hbWVkIGZpbGVzIGhhdmUgYSBmaWxlIG9yIGRpcmVjdG9yeSBpbiB0aGUgd2F5LAorIyAgICJ0dXJuIG9mZiIgdGhlIGRpcmVjdG9yeSByZW5hbWUgZm9yIHRob3NlIHNwZWNpZmljIHN1Yi1wYXRocywgZmFsbGluZworIyAgIGJhY2sgdG8gb2xkIGhhbmRsaW5nLiAgQnV0LCBzYWRseSwgc2VlIHRlc3RjYXNlcyA4YSBhbmQgOGIuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU0VDVElPTiA2OiBTYW1lIHNpZGUgb2YgdGhlIG1lcmdlIHdhcyB0aGUgb25lIHRoYXQgZGlkIHRoZSByZW5hbWUKKyMKKyMgSXQgbWF5IHNvdW5kIG9idmlvdXMgdGhhdCB5b3Ugb25seSB3YW50IHRvIGFwcGx5IGltcGxpY2l0IGRpcmVjdG9yeQorIyByZW5hbWVzIHRvIGRpcmVjdG9yaWVzIGlmIHRoZSBfb3RoZXJfIHNpZGUgb2YgaGlzdG9yeSBkaWQgdGhlIHJlbmFtaW5nLgorIyBJZiB5b3UgZGlkIG1ha2UgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBkaWRuJ3QgZXhwbGljaXRseSBlbmZvcmNlIHRoaXMKKyMgcnVsZSwgdGhlIG1ham9yaXR5IG9mIGNhc2VzIHRoYXQgd291bGQgZmFsbCB1bmRlciB0aGlzIHNlY3Rpb24gd291bGQKKyMgYWxzbyBiZSBzb2x2ZWQgYnkgZm9sbG93aW5nIHRoZSBydWxlcyBmcm9tIHRoZSBhYm92ZSBzZWN0aW9ucy4gIEJ1dAorIyB0aGVyZSBhcmUgc3RpbGwgYSBmZXcgdGhhdCBzdGljayBvdXQsIHNvIHRoaXMgc2VjdGlvbiBjb3ZlcnMgdGhlbSBqdXN0CisjIHRvIG1ha2Ugc3VyZSB3ZSBhbHNvIGdldCB0aGVtIHJpZ2h0LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGVzdGNhc2UgNmEsIFRyaWNreSByZW5hbWUvZGVsZXRlCisjICAgQ29tbWl0IE86IHove2IsYyxkfQorIyAgIENvbW1pdCBBOiB6L2IKKyMgICBDb21taXQgQjogeS97YixjfSwgei9kCisjICAgRXhwZWN0ZWQ6IHkvYiwgQ09ORkxJQ1QocmVuYW1lL2RlbGV0ZSwgei9jIC0+IHkvYyB2cy4gTlVMTCkKKyMgICBOb3RlOiBXZSdyZSBqdXN0IGNoZWNraW5nIGhlcmUgdGhhdCB0aGUgcmVuYW1lIG9mIHovYiBhbmQgei9jIHRvIHB1dAorIyAgICAgICAgIHRoZW0gdW5kZXIgeS8gZG9lc24ndCBhY2NpZGVudGFsbHkgY2F0Y2ggei9kIGFuZCBtYWtlIGl0IGxvb2sgbGlrZQorIyAgICAgICAgIGl0IGlzIGFsc28gaW52b2x2ZWQgaW4gYSByZW5hbWUvZGVsZXRlIGNvbmZsaWN0LgorCit0ZXN0X3NldHVwXzZhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDZhICYmCisJKAorCQljZCA2YSAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJZWNobyBkID56L2QgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IHJtIHovYyAmJgorCQlnaXQgcm0gei9kICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCW1rZGlyIHkgJiYKKwkJZ2l0IG12IHovYiB5LyAmJgorCQlnaXQgbXYgei9jIHkvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNmE6IFRyaWNreSByZW5hbWUvZGVsZXRlJyAnCisJdGVzdF9zZXR1cF82YSAmJgorCSgKKwkJY2QgNmEgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9kZWxldGUpLip6L2MuKnkvYyIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9iIDozOnkvYyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9iICBPOnovYyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIDZiLCBTYW1lIHJlbmFtZSBkb25lIG9uIGJvdGggc2lkZXMKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZXMgNmMgYW5kIDhlKQorIyAgIENvbW1pdCBPOiB6L3tiLGN9CisjICAgQ29tbWl0IEE6IHkve2IsY30KKyMgICBDb21taXQgQjogeS97YixjfSwgei9kCisjICAgRXhwZWN0ZWQ6IHkve2IsY30sIHovZAorIyAgIE5vdGU6IElmIHdlIGRpZCBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBoZXJlLCB3ZSdkIG1vdmUgei9kIGludG8geS8sCisjICAgICAgICAgYnV0IEIgZGlkIHRoYXQgcmVuYW1lIGFuZCBzdGlsbCBkZWNpZGVkIHRvIHB1dCB0aGUgZmlsZSBpbnRvIHovLAorIyAgICAgICAgIHNvIHdlIHByb2JhYmx5IHNob3VsZG4ndCBhcHBseSBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBmb3IgaXQuCisKK3Rlc3Rfc2V0dXBfNmIgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gNmIgJiYKKwkoCisJCWNkIDZiICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgeiB5ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJbWtkaXIgeiAmJgorCQllY2hvIGQgPnovZCAmJgorCQlnaXQgYWRkIHovZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzZiOiBTYW1lIHJlbmFtZSBkb25lIG9uIGJvdGggc2lkZXMnICcKKwl0ZXN0X3NldHVwXzZiICYmCisJKAorCQljZCA2YiAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnkvYiBIRUFEOnkvYyBIRUFEOnovZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgICAgTzp6L2MgICAgQjp6L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSA2YywgUmVuYW1lIG9ubHkgZG9uZSBvbiBzYW1lIHNpZGUKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZXMgNmIgYW5kIDhlKQorIyAgIENvbW1pdCBPOiB6L3tiLGN9CisjICAgQ29tbWl0IEE6IHove2IsY30gKG5vIGNoYW5nZSkKKyMgICBDb21taXQgQjogeS97YixjfSwgei9kCisjICAgRXhwZWN0ZWQ6IHkve2IsY30sIHovZAorIyAgIE5PVEU6IFNlZW1zIG9idmlvdXMsIGJ1dCBqdXN0IGNoZWNraW5nIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QKKyMgICAgICAgICAiYWNjaWRlbnRhbGx5IGRldGVjdCBhIHJlbmFtZSIgYW5kIGdpdmUgdXMgeS97YixjLGR9LgorCit0ZXN0X3NldHVwXzZjICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDZjICYmCisJKAorCQljZCA2YyAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgeiB5ICYmCisJCW1rZGlyIHogJiYKKwkJZWNobyBkID56L2QgJiYKKwkJZ2l0IGFkZCB6L2QgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc2YzogUmVuYW1lIG9ubHkgZG9uZSBvbiBzYW1lIHNpZGUnICcKKwl0ZXN0X3NldHVwXzZjICYmCisJKAorCQljZCA2YyAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnkvYiBIRUFEOnkvYyBIRUFEOnovZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgICAgTzp6L2MgICAgQjp6L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSA2ZCwgV2UgZG9uJ3QgYWx3YXlzIHdhbnQgdHJhbnNpdGl2ZSByZW5hbWluZworIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlIDFjKQorIyAgIENvbW1pdCBPOiB6L3tiLGN9LCB4L2QKKyMgICBDb21taXQgQTogei97YixjfSwgeC9kIChubyBjaGFuZ2UpCisjICAgQ29tbWl0IEI6IHkve2IsY30sIHovZAorIyAgIEV4cGVjdGVkOiB5L3tiLGN9LCB6L2QKKyMgICBOT1RFOiBBZ2FpbiwgdGhpcyBzZWVtcyBvYnZpb3VzIGJ1dCBqdXN0IGNoZWNraW5nIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uCisjICAgICAgICAgZG9lc24ndCAiYWNjaWRlbnRhbGx5IGRldGVjdCBhIHJlbmFtZSIgYW5kIGdpdmUgdXMgeS97YixjLGR9LgorCit0ZXN0X3NldHVwXzZkICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDZkICYmCisJKAorCQljZCA2ZCAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJbWtkaXIgeCAmJgorCQllY2hvIGQgPngvZCAmJgorCQlnaXQgYWRkIHogeCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHogeSAmJgorCQlnaXQgbXYgeCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNmQ6IFdlIGRvIG5vdCBhbHdheXMgd2FudCB0cmFuc2l0aXZlIHJlbmFtaW5nJyAnCisJdGVzdF9zZXR1cF82ZCAmJgorCSgKKwkJY2QgNmQgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJSEVBRDp5L2IgSEVBRDp5L2MgSEVBRDp6L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86ei9iICAgIE86ei9jICAgIE86eC9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgNmUsIEFkZC9hZGQgZnJvbSBvbmUtc2lkZQorIyAgIENvbW1pdCBPOiB6L3tiLGN9CisjICAgQ29tbWl0IEE6IHove2IsY30gKG5vIGNoYW5nZSkKKyMgICBDb21taXQgQjogeS97YixjLGRfMX0sIHovZF8yCisjICAgRXhwZWN0ZWQ6IHkve2IsYyxkXzF9LCB6L2RfMgorIyAgIE5PVEU6IEFnYWluLCB0aGlzIHNlZW1zIG9idmlvdXMgYnV0IGp1c3QgY2hlY2tpbmcgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24KKyMgICAgICAgICBkb2Vzbid0ICJhY2NpZGVudGFsbHkgZGV0ZWN0IGEgcmVuYW1lIiBhbmQgZ2l2ZSB1cyB5L3tiLGN9ICsKKyMgICAgICAgICBhZGQvYWRkIGNvbmZsaWN0IG9uIHkvZF8xIHZzIHkvZF8yLgorCit0ZXN0X3NldHVwXzZlICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDZlICYmCisJKAorCQljZCA2ZSAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgeiB5ICYmCisJCWVjaG8gZDEgPiB5L2QgJiYKKwkJbWtkaXIgeiAmJgorCQllY2hvIGQyID4gei9kICYmCisJCWdpdCBhZGQgeS9kIHovZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzZlOiBBZGQvYWRkIGZyb20gb25lIHNpZGUnICcKKwl0ZXN0X3NldHVwXzZlICYmCisJKAorCQljZCA2ZSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnkvYiBIRUFEOnkvYyBIRUFEOnkvZCBIRUFEOnovZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgICAgTzp6L2MgICAgQjp5L2QgICAgQjp6L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJ1bGVzIHN1Z2dlc3RlZCBieSBzZWN0aW9uIDY6CisjCisjICAgT25seSBhcHBseSBpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lcyB0byBkaXJlY3RvcmllcyBpZiB0aGUgb3RoZXIKKyMgICBzaWRlIG9mIGhpc3RvcnkgaXMgdGhlIG9uZSBkb2luZyB0aGUgcmVuYW1pbmcuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU0VDVElPTiA3OiBNb3JlIGludm9sdmVkIEVkZ2UvQ29ybmVyIGNhc2VzCisjCisjIFRoZSBydWxlc2V0IHdlIGhhdmUgZ2VuZXJhdGVkIGluIHRoZSBhYm92ZSBzZWN0aW9ucyBzZWVtcyB0byBwcm92aWRlCisjIHdlbGwtZGVmaW5lZCBtZXJnZXMuICBCdXQgY2FuIHdlIGZpbmQgZWRnZS9jb3JuZXIgY2FzZXMgdGhhdCBlaXRoZXIgKGEpCisjIGFyZSBoYXJkZXIgZm9yIHVzZXJzIHRvIHVuZGVyc3RhbmQsIG9yIChiKSBoYXZlIGEgcmVzb2x1dGlvbiB0aGF0IGlzCisjIG5vbi1pbnR1aXRpdmUgb3Igc3Vib3B0aW1hbD8KKyMKKyMgVGhlIHRlc3RjYXNlcyBpbiB0aGlzIHNlY3Rpb24gZGl2ZSBpbnRvIGNhc2VzIHRoYXQgSSd2ZSB0cmllZCB0byBjcmFmdCBpbgorIyBhIHdheSB0byBmaW5kIHNvbWUgdGhhdCBtaWdodCBiZSBzdXJwcmlzaW5nIHRvIHVzZXJzIG9yIGRpZmZpY3VsdCBmb3IKKyMgdGhlbSB0byB1bmRlcnN0YW5kICh0aGUgbmV4dCBzZWN0aW9uIHdpbGwgbG9vayBhdCBub24taW50dWl0aXZlIG9yCisjIHN1Ym9wdGltYWwgbWVyZ2UgcmVzdWx0cykuICBTb21lIG9mIHRoZSB0ZXN0Y2FzZXMgYXJlIHNpbWlsYXIgdG8gb25lcworIyBmcm9tIHBhc3Qgc2VjdGlvbnMsIGJ1dCBoYXZlIGJlZW4gc2ltcGxpZmllZCB0byB0cnkgdG8gaGlnaGxpZ2h0IGVycm9yCisjIG1lc3NhZ2VzIHVzaW5nIGEgIm1vZGlmaWVkIiBwYXRoIChkdWUgdG8gdGhlIGRpcmVjdG9yeSByZW5hbWUpLiAgQXJlCisjIHVzZXJzIG9rYXkgd2l0aCB0aGVzZT8KKyMKKyMgSW4gbXkgb3BpbmlvbiwgdGVzdGNhc2VzIHRoYXQgYXJlIGRpZmZpY3VsdCB0byB1bmRlcnN0YW5kIGZyb20gdGhpcworIyBzZWN0aW9uIGlzIGR1ZSB0byBkaWZmaWN1bHR5IGluIHRoZSB0ZXN0Y2FzZSByYXRoZXIgdGhhbiB0aGUgZGlyZWN0b3J5CisjIHJlbmFtaW5nIChzaW1pbGFyIHRvIGhvdyB0NjA0MiBhbmQgdDYwMzYgaGF2ZSBkaWZmaWN1bHQgcmVzb2x1dGlvbnMgZHVlCisjIHRvIHRoZSBwcm9ibGVtIHNldHVwIGl0c2VsZiBiZWluZyBjb21wbGV4KS4gIEFuZCBJIGRvbid0IHRoaW5rIHRoZQorIyBlcnJvciBtZXNzYWdlcyBhcmUgYSBwcm9ibGVtLgorIworIyBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHRlc3RjYXNlcyBpbiBzZWN0aW9uIDggd29ycnkgbWUgc2xpZ2h0bHkgbW9yZS4uLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGVzdGNhc2UgN2EsIHJlbmFtZS1kaXIgdnMuIHJlbmFtZS1kaXIgKE5PVCBzcGxpdCBldmVubHkpIFBMVVMgYWRkLW90aGVyLWZpbGUKKyMgICBDb21taXQgTzogei97YixjfQorIyAgIENvbW1pdCBBOiB5L3tiLGN9CisjICAgQ29tbWl0IEI6IHcvYiwgeC9jLCB6L2QKKyMgICBFeHBlY3RlZDogeS9kLCBDT05GTElDVChyZW5hbWUvcmVuYW1lIGZvciBib3RoIHovYiBhbmQgei9jKQorIyAgIE5PVEU6IFRoZXJlJ3MgYSByZW5hbWUgb2Ygei8gaGVyZSwgeS8gaGFzIG1vcmUgcmVuYW1lcywgc28gei9kIC0+IHkvZC4KKwordGVzdF9zZXR1cF83YSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA3YSAmJgorCSgKKwkJY2QgN2EgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJbWtkaXIgdyAmJgorCQlta2RpciB4ICYmCisJCWdpdCBtdiB6L2Igdy8gJiYKKwkJZ2l0IG12IHovYyB4LyAmJgorCQllY2hvIGQgPiB6L2QgJiYKKwkJZ2l0IGFkZCB6L2QgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc3YTogcmVuYW1lLWRpciB2cy4gcmVuYW1lLWRpciAoTk9UIHNwbGl0IGV2ZW5seSkgUExVUyBhZGQtb3RoZXItZmlsZScgJworCXRlc3Rfc2V0dXBfN2EgJiYKKwkoCisJCWNkIDdhICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKS4qei9iLip5L2IuKncvYiIgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKS4qei9jLip5L2MuKngvYyIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjE6ei9iIDoyOnkvYiA6Mzp3L2IgOjE6ei9jIDoyOnkvYyA6Mzp4L2MgOjA6eS9kICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQkgTzp6L2IgIE86ei9iICBPOnovYiAgTzp6L2MgIE86ei9jICBPOnovYyAgQjp6L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCA+YWN0dWFsIFwKKwkJCXkvYiAgIHcvYiAgIHkvYyAgIHgvYyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgTzp6L2IgTzp6L2MgTzp6L2MgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSA3YiwgcmVuYW1lL3JlbmFtZSgydG8xKSwgYnV0IG9ubHkgZHVlIHRvIHRyYW5zaXRpdmUgcmVuYW1lCisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2UgMWQpCisjICAgQ29tbWl0IE86IHove2IsY30sICAgICB4L2RfMSwgdy9kXzIKKyMgICBDb21taXQgQTogeS97YixjLGRfMn0sIHgvZF8xCisjICAgQ29tbWl0IEI6IHove2IsYyxkXzF9LCAgICAgICAgdy9kXzIKKyMgICBFeHBlY3RlZDogeS97YixjfSwgQ09ORkxJQ1QocmVuYW1lL3JlbmFtZSgydG8xKTogeC9kXzEsIHcvZF8yIC0+IHlfZCkKKwordGVzdF9zZXR1cF83YiAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA3YiAmJgorCSgKKwkJY2QgN2IgJiYKKworCQlta2RpciB6ICYmCisJCW1rZGlyIHggJiYKKwkJbWtkaXIgdyAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQllY2hvIGQxID4geC9kICYmCisJCWVjaG8gZDIgPiB3L2QgJiYKKwkJZ2l0IGFkZCB6IHggdyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJZ2l0IG12IHcvZCB5LyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgeC9kIHovICYmCisJCXJtZGlyIHggJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc3YjogcmVuYW1lL3JlbmFtZSgydG8xKSwgYnV0IG9ubHkgZHVlIHRvIHRyYW5zaXRpdmUgcmVuYW1lJyAnCisJdGVzdF9zZXR1cF83YiAmJgorCSgKKwkJY2QgN2IgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp5L2IgOjA6eS9jIDoyOnkvZCA6Mzp5L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYiAgTzp6L2MgIE86dy9kICBPOngvZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJIyBUZXN0IHRoYXQgdGhlIHR3by13YXkgbWVyZ2UgaW4geS9kIGlzIGFzIGV4cGVjdGVkCisJCWdpdCBjYXQtZmlsZSAtcCA6Mjp5L2QgPmV4cGVjdCAmJgorCQlnaXQgY2F0LWZpbGUgLXAgOjM6eS9kID5vdGhlciAmJgorCQk+ZW1wdHkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgXAorCQkJLUwgIkhFQUQiIFwKKwkJCS1MICIiIFwKKwkJCS1MICJCXjAiIFwKKwkJCWV4cGVjdCBlbXB0eSBvdGhlciAmJgorCQl0ZXN0X2NtcCBleHBlY3QgeS9kCisJKQorJworCisjIFRlc3RjYXNlIDdjLCByZW5hbWUvcmVuYW1lKDF0by4uLjJvcjMpOyB0cmFuc2l0aXZlIHJlbmFtZSBtYXkgYWRkIGNvbXBsZXhpdHkKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZXMgM2IgYW5kIDVjKQorIyAgIENvbW1pdCBPOiB6L3tiLGN9LCB4L2QKKyMgICBDb21taXQgQTogeS97YixjfSwgdy9kCisjICAgQ29tbWl0IEI6IHove2IsYyxkfQorIyAgIEV4cGVjdGVkOiB5L3tiLGN9LCBDT05GTElDVCh4L2QgLT4gdy9kIHZzLiB5L2QpCisjICAgTk9URTogei8gd2FzIHJlbmFtZWQgdG8geS8gc28gd2UgZG8gd2FudCB0byByZXBvcnQKKyMgICAgICAgICBuZWl0aGVyIENPTkZMSUNUKHgvZCAtPiB3L2QgdnMuIHovZCkKKyMgICAgICAgICBub3IgQ09ORkxpQ1QgeC9kIC0+IHcvZCB2cy4geS9kIHZzLiB6L2QpCisKK3Rlc3Rfc2V0dXBfN2MgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gN2MgJiYKKwkoCisJCWNkIDdjICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlta2RpciB4ICYmCisJCWVjaG8gZCA+eC9kICYmCisJCWdpdCBhZGQgeiB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHogeSAmJgorCQlnaXQgbXYgeCB3ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB4L2Qgei8gJiYKKwkJcm1kaXIgeCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzdjOiByZW5hbWUvcmVuYW1lKDF0by4uLjJvcjMpOyB0cmFuc2l0aXZlIHJlbmFtZSBtYXkgYWRkIGNvbXBsZXhpdHknICcKKwl0ZXN0X3NldHVwXzdjICYmCisJKAorCQljZCA3YyAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSkuKngvZC4qdy9kLip5L2QiIG91dCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCTowOnkvYiA6MDp5L2MgOjE6eC9kIDoyOncvZCA6Mzp5L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYiAgTzp6L2MgIE86eC9kICBPOngvZCAgTzp4L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSA3ZCwgdHJhbnNpdGl2ZSByZW5hbWUgaW52b2x2ZWQgaW4gcmVuYW1lL2RlbGV0ZTsgaG93IGlzIGl0IHJlcG9ydGVkPworIyAgIChSZWxhdGVkIHNvbWV3aGF0IHRvIHRlc3RjYXNlcyA1YiBhbmQgOGQpCisjICAgQ29tbWl0IE86IHove2IsY30sIHgvZAorIyAgIENvbW1pdCBBOiB5L3tiLGN9CisjICAgQ29tbWl0IEI6IHove2IsYyxkfQorIyAgIEV4cGVjdGVkOiB5L3tiLGN9LCBDT05GTElDVChkZWxldGUgeC9kIHZzIHJlbmFtZSB0byB5L2QpCisjICAgTk9URTogei0+eSBzbyBOT1QgQ09ORkxJQ1QoZGVsZXRlIHgvZCB2cyByZW5hbWUgdG8gei9kKQorCit0ZXN0X3NldHVwXzdkICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDdkICYmCisJKAorCQljZCA3ZCAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJbWtkaXIgeCAmJgorCQllY2hvIGQgPngvZCAmJgorCQlnaXQgYWRkIHogeCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJZ2l0IHJtIC1yZiB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB4L2Qgei8gJiYKKwkJcm1kaXIgeCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzdkOiB0cmFuc2l0aXZlIHJlbmFtZSBpbnZvbHZlZCBpbiByZW5hbWUvZGVsZXRlOyBob3cgaXMgaXQgcmVwb3J0ZWQ/JyAnCisJdGVzdF9zZXR1cF83ZCAmJgorCSgKKwkJY2QgN2QgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9kZWxldGUpLip4L2QuKnkvZCIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9iIDowOnkvYyA6Mzp5L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYiAgTzp6L2MgIE86eC9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgN2UsIHRyYW5zaXRpdmUgcmVuYW1lIGluIHJlbmFtZS9kZWxldGUgQU5EIGRpcnMgaW4gdGhlIHdheQorIyAgIChWZXJ5IHNpbWlsYXIgdG8gJ2JvdGggcmVuYW1lIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW52b2x2ZWQgaW4gRC9GIGNvbmZsaWN0JyBmcm9tIHQ2MDIyLW1lcmdlLXJlbmFtZS5zaCkKKyMgICAoQWxzbyByZWxhdGVkIHRvIHRlc3RjYXNlcyA5YyBhbmQgOWQpCisjICAgQ29tbWl0IE86IHove2IsY30sICAgICB4L2RfMQorIyAgIENvbW1pdCBBOiB5L3tiLGMsZC9nfSwgeC9kL2YKKyMgICBDb21taXQgQjogei97YixjLGRfMX0KKyMgICBFeHBlY3RlZDogcmVuYW1lL2RlbGV0ZSh4L2RfMS0+eS9kXzEgdnMuIE5vbmUpICsgRC9GIGNvbmZsaWN0IG9uIHkvZAorIyAgICAgICAgICAgICB5L3tiLGMsZC9nfSwgeS9kXzF+Ql4wLCB4L2QvZgorCisjICAgTk9URTogVGhlIG1haW4gcGF0aCBvZiBpbnRlcmVzdCBoZXJlIGlzIGRfMSBhbmQgd2hlcmUgaXQgZW5kcyB1cCwgYnV0CisjICAgICAgICAgdGhpcyBpcyBhY3R1YWxseSBhIGNhc2UgdGhhdCBoYXMgdHdvIHBvdGVudGlhbCBkaXJlY3RvcnkgcmVuYW1lcworIyAgICAgICAgIGludm9sdmVkIGFuZCBEL0YgY29uZmxpY3QocyksIHNvIGl0IG1ha2VzIHNlbnNlIHRvIHdhbGsgdGhyb3VnaAorIyAgICAgICAgIGVhY2ggc3RlcC4KKyMKKyMgICAgICAgICBDb21taXQgQSByZW5hbWVzIHovIC0+IHkvLiAgVGh1cyBldmVyeXRoaW5nIHRoYXQgQiBhZGRzIHRvIHovCisjICAgICAgICAgc2hvdWxkIGJlIGluc3RlYWQgbW92ZWQgdG8geS8uICBUaGlzIGdpdmVzIHVzIHRoZSBEL0YgY29uZmxpY3Qgb24KKyMgICAgICAgICB5L2QgYmVjYXVzZSB4L2RfMSAtPiB6L2RfMSAtPiB5L2RfMSBjb25mbGljdHMgd2l0aCB5L2QvZy4KKyMKKyMgICAgICAgICBGdXJ0aGVyLCBjb21taXQgQiByZW5hbWVzIHgvIC0+IHovLCB0aHVzIGV2ZXJ5dGhpbmcgQSBhZGRzIHRvIHgvCisjICAgICAgICAgc2hvdWxkIGluc3RlYWQgYmUgbW92ZWQgdG8gei8uLi5CVVQgd2UgcmVtb3ZlZCB6LyBhbmQgcmVuYW1lZCBpdAorIyAgICAgICAgIHRvIHkvLCBzbyBtYXliZSBldmVyeXRoaW5nIHNob3VsZCBtb3ZlIG5vdCBmcm9tIHgvIHRvIHovLCBidXQKKyMgICAgICAgICBmcm9tIHgvIHRvIHovIHRvIHkvLiAgRG9pbmcgc28gbWlnaHQgbWFrZSBzZW5zZSBmcm9tIHRoZSBsb2dpYyBzbworIyAgICAgICAgIGZhciwgYnV0IG5vdGUgdGhhdCBjb21taXQgQSBoYWQgYm90aCBhbiB4LyBhbmQgYSB5LzsgaXQgZGlkIHRoZQorIyAgICAgICAgIHJlbmFtaW5nIG9mIHovIHRvIHkvIGFuZCBjcmVhdGVkIHgvZC9mIGFuZCBpdCBjbGVhcmx5IG1hZGUgdGhlc2UKKyMgICAgICAgICB0aGluZ3Mgc2VwYXJhdGUsIHNvIGl0IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHRvIHB1c2ggdGhlc2UKKyMgICAgICAgICB0b2dldGhlci4gIERvaW5nIHNvIGlzIHdoYXQgSSdkIGNhbGwgYSBkb3VibHkgdHJhbnNpdGl2ZSByZW5hbWU7CisjICAgICAgICAgc2VlIHRlc3RjYXNlcyA5YyBhbmQgOWQgZm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbiBvZiB0aGlzIGlzc3VlIGFuZAorIyAgICAgICAgIGhvdyBpdCdzIHJlc29sdmVkLgorCit0ZXN0X3NldHVwXzdlICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDdlICYmCisJKAorCQljZCA3ZSAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJbWtkaXIgeCAmJgorCQllY2hvIGQxID54L2QgJiYKKwkJZ2l0IGFkZCB6IHggJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgeiB5ICYmCisJCWdpdCBybSB4L2QgJiYKKwkJbWtkaXIgLXAgeC9kICYmCisJCW1rZGlyIC1wIHkvZCAmJgorCQllY2hvIGYgPngvZC9mICYmCisJCWVjaG8gZyA+eS9kL2cgJiYKKwkJZ2l0IGFkZCB4L2QvZiB5L2QvZyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgeC9kIHovICYmCisJCXJtZGlyIHggJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc3ZTogdHJhbnNpdGl2ZSByZW5hbWUgaW4gcmVuYW1lL2RlbGV0ZSBBTkQgZGlycyBpbiB0aGUgd2F5JyAnCisJdGVzdF9zZXR1cF83ZSAmJgorCSgKKwkJY2QgN2UgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9kZWxldGUpLip4L2QuKnkvZCIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eC9kL2YgOjA6eS9kL2cgOjA6eS9iIDowOnkvYyA6Mzp5L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBBOngvZC9mICBBOnkvZC9nICBPOnovYiAgTzp6L2MgIE86eC9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgeS9kfkJeMCA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgTzp4L2QgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU0VDVElPTiA4OiBTdWJvcHRpbWFsIG1lcmdlcworIworIyBBcyBhbGx1ZGVkIHRvIGluIHRoZSBsYXN0IHNlY3Rpb24sIHRoZSBydWxlc2V0IHdlIGhhdmUgYnVpbHQgdXAgZm9yCisjIGRldGVjdGluZyBkaXJlY3RvcnkgcmVuYW1lcyB1bmZvcnR1bmF0ZWx5IGhhcyBzb21lIHNwZWNpYWwgY2FzZXMgd2hlcmUgaXQKKyMgcmVzdWx0cyBpbiBzbGlnaHRseSBzdWJvcHRpbWFsIG9yIG5vbi1pbnR1aXRpdmUgYmVoYXZpb3IuICBUaGlzIHNlY3Rpb24KKyMgZXhwbG9yZXMgdGhlc2UgY2FzZXMuCisjCisjIFRvIGJlIGZhaXIsIHdlIGFscmVhZHkgaGFkIG5vbi1pbnR1aXRpdmUgb3Igc3Vib3B0aW1hbCBiZWhhdmlvciBmb3IgbW9zdAorIyBvZiB0aGVzZSBjYXNlcyBpbiBnaXQgYmVmb3JlIGludHJvZHVjaW5nIGltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWUKKyMgZGV0ZWN0aW9uLCBidXQgaXQnZCBiZSBuaWNlIGlmIHRoZXJlIHdhcyBhIG1vZGlmaWVkIHJ1bGVzZXQgb3V0IHRoZXJlCisjIHRoYXQgaGFuZGxlZCB0aGVzZSBjYXNlcyBhIGJpdCBiZXR0ZXIuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUZXN0Y2FzZSA4YSwgRHVhbC1kaXJlY3RvcnkgcmVuYW1lLCBvbmUgaW50byB0aGUgb3RoZXJzJyB3YXkKKyMgICBDb21taXQgTy4geC97YSxifSwgICB5L3tjLGR9CisjICAgQ29tbWl0IEEuIHgve2EsYixlfSwgeS97YyxkLGZ9CisjICAgQ29tbWl0IEIuIHkve2EsYn0sICAgei97YyxkfQorIworIyBQb3NzaWJsZSBSZXNvbHV0aW9uczoKKyMgICB3L28gZGlyLXJlbmFtZSBkZXRlY3Rpb246IHkve2EsYixmfSwgICB6L3tjLGR9LCAgIHgvZQorIyAgIEN1cnJlbnRseSBleHBlY3RlZDogICAgICAgeS97YSxiLGUsZn0sIHove2MsZH0KKyMgICBPcHRpbWFsOiAgICAgICAgICAgICAgICAgIHkve2EsYixlfSwgICB6L3tjLGQsZn0KKyMKKyMgTm90ZTogQm90aCB4IGFuZCB5IGdvdCByZW5hbWVkIGFuZCBpdCdkIGJlIG5pY2UgdG8gZGV0ZWN0IGJvdGgsIGFuZCB3ZSBkbworIyBiZXR0ZXIgd2l0aCBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiB0aGFuIGdpdCBkaWQgd2l0aG91dCwgYnV0IHRoZQorIyBzaW1wbGUgcnVsZSBmcm9tIHNlY3Rpb24gNSBwcmV2ZW50cyBtZSBmcm9tIGhhbmRsaW5nIHRoaXMgYXMgb3B0aW1hbGx5IGFzCisjIHdlIHBvdGVudGlhbGx5IGNvdWxkLgorCit0ZXN0X3NldHVwXzhhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDhhICYmCisJKAorCQljZCA4YSAmJgorCisJCW1rZGlyIHggJiYKKwkJbWtkaXIgeSAmJgorCQllY2hvIGEgPngvYSAmJgorCQllY2hvIGIgPngvYiAmJgorCQllY2hvIGMgPnkvYyAmJgorCQllY2hvIGQgPnkvZCAmJgorCQlnaXQgYWRkIHggeSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWVjaG8gZSA+eC9lICYmCisJCWVjaG8gZiA+eS9mICYmCisJCWdpdCBhZGQgeC9lIHkvZiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgeSB6ICYmCisJCWdpdCBtdiB4IHkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc4YTogRHVhbC1kaXJlY3RvcnkgcmVuYW1lLCBvbmUgaW50byB0aGUgb3RoZXJzIHdheScgJworCXRlc3Rfc2V0dXBfOGEgJiYKKwkoCisJCWNkIDhhICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDYgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eS9hIEhFQUQ6eS9iIEhFQUQ6eS9lIEhFQUQ6eS9mIEhFQUQ6ei9jIEhFQUQ6ei9kICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOngvYSAgICBPOngvYiAgICBBOngvZSAgICBBOnkvZiAgICBPOnkvYyAgICBPOnkvZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIDhiLCBEdWFsLWRpcmVjdG9yeSByZW5hbWUsIG9uZSBpbnRvIHRoZSBvdGhlcnMnIHdheSwgd2l0aCBjb25mbGljdGluZyBmaWxlbmFtZXMKKyMgICBDb21taXQgTy4geC97YV8xLGJfMX0sICAgICB5L3thXzIsYl8yfQorIyAgIENvbW1pdCBBLiB4L3thXzEsYl8xLGVfMX0sIHkve2FfMixiXzIsZV8yfQorIyAgIENvbW1pdCBCLiB5L3thXzEsYl8xfSwgICAgIHove2FfMixiXzJ9CisjCisjICAgdy9vIGRpci1yZW5hbWUgZGV0ZWN0aW9uOiB5L3thXzEsYl8xLGVfMn0sIHove2FfMixiXzJ9LCB4L2VfMQorIyAgIEN1cnJlbnRseSBleHBlY3RlZDogICAgICAgPHNhbWU+CisjICAgU2Nhcnk6ICAgICAgICAgICAgICAgICAgICB5L3thXzEsYl8xfSwgICAgIHove2FfMixiXzJ9LCBDT05GTElDVChhZGQvYWRkLCBlXzEgdnMuIGVfMikKKyMgICBPcHRpbWFsOiAgICAgICAgICAgICAgICAgIHkve2FfMSxiXzEsZV8xfSwgei97YV8yLGJfMixlXzJ9CisjCisjIE5vdGU6IFZlcnkgc2ltaWxhciB0byA4YSwgZXhjZXB0IGluc3RlYWQgb2YgJ2UnIGFuZCAnZicgaW4gZGlyZWN0b3JpZXMgeCBhbmQKKyMgeSwgYm90aCBhcmUgbmFtZWQgJ2UnLiAgV2l0aG91dCBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiwgbmVpdGhlciBmaWxlCisjIG1vdmVzIGRpcmVjdG9yaWVzLiAgSW1wbGVtZW50IGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIHN1Ym9wdGltYWxseSwgYW5kCisjIHlvdSBnZXQgYW4gYWRkL2FkZCBjb25mbGljdCwgYnV0IGJvdGggZmlsZXMgd2VyZSBhZGRlZCBpbiBjb21taXQgQSwgc28gdGhpcworIyBpcyBhbiBhZGQvYWRkIGNvbmZsaWN0IHdoZXJlIG9uZSBzaWRlIG9mIGhpc3RvcnkgYWRkZWQgYm90aCBmaWxlcyAtLQorIyBzb21ldGhpbmcgd2UgY2FuJ3QgcmVwcmVzZW50IGluIHRoZSBpbmRleC4gIE9idmlvdXNseSwgd2UnZCBwcmVmZXIgdGhlIGxhc3QKKyMgcmVzb2x1dGlvbiwgYnV0IG91ciBwcmV2aW91cyBydWxlcyBhcmUgdG9vIGNvYXJzZSB0byBhbGxvdyBpdC4gIFVzaW5nIGJvdGgKKyMgdGhlIHJ1bGVzIGZyb20gc2VjdGlvbiA0IGFuZCBzZWN0aW9uIDUgc2F2ZSB1cyBmcm9tIHRoZSBTY2FyeSByZXNvbHV0aW9uLAorIyBtYWtpbmcgdXMgZmFsbCBiYWNrIHRvIHByZS1kaXJlY3RvcnktcmVuYW1lLWRldGVjdGlvbiBiZWhhdmlvciBmb3IgYm90aAorIyBlXzEgYW5kIGVfMi4KKwordGVzdF9zZXR1cF84YiAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA4YiAmJgorCSgKKwkJY2QgOGIgJiYKKworCQlta2RpciB4ICYmCisJCW1rZGlyIHkgJiYKKwkJZWNobyBhMSA+eC9hICYmCisJCWVjaG8gYjEgPngvYiAmJgorCQllY2hvIGEyID55L2EgJiYKKwkJZWNobyBiMiA+eS9iICYmCisJCWdpdCBhZGQgeCB5ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZWNobyBlMSA+eC9lICYmCisJCWVjaG8gZTIgPnkvZSAmJgorCQlnaXQgYWRkIHgvZSB5L2UgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHkgeiAmJgorCQlnaXQgbXYgeCB5ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnOGI6IER1YWwtZGlyZWN0b3J5IHJlbmFtZSwgb25lIGludG8gdGhlIG90aGVycyB3YXksIHdpdGggY29uZmxpY3RpbmcgZmlsZW5hbWVzJyAnCisJdGVzdF9zZXR1cF84YiAmJgorCSgKKwkJY2QgOGIgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJSEVBRDp5L2EgSEVBRDp5L2IgSEVBRDp6L2EgSEVBRDp6L2IgSEVBRDp4L2UgSEVBRDp5L2UgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86eC9hICAgIE86eC9iICAgIE86eS9hICAgIE86eS9iICAgIEE6eC9lICAgIEE6eS9lICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgOGMsIG1vZGlmeS9kZWxldGUgb3IgcmVuYW1lK21vZGlmeS9kZWxldGU/CisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2VzIDViLCA4ZCwgYW5kIDloKQorIyAgIENvbW1pdCBPOiB6L3tiLGMsZH0KKyMgICBDb21taXQgQTogeS97YixjfQorIyAgIENvbW1pdCBCOiB6L3tiLGMsZF9tb2RpZmllZCxlfQorIyAgIEV4cGVjdGVkOiB5L3tiLGMsZX0sIENPTkZMSUNUKG1vZGlmeS9kZWxldGU6IG9uIHovZCkKKyMKKyMgICBOb3RlOiBJdCBjb3VsZCBlYXNpbHkgYmUgYXJndWVkIHRoYXQgdGhlIGNvcnJlY3QgcmVzb2x1dGlvbiBoZXJlIGlzCisjICAgICAgICAgeS97YixjLGV9LCBDT05GTElDVChyZW5hbWUvZGVsZXRlOiB6L2QgLT4geS9kIHZzIGRlbGV0ZWQpCisjICAgICAgICAgYW5kIHRoYXQgdGhlIG1vZGlmaWVkIHZlcnNpb24gb2YgZCBzaG91bGQgYmUgcHJlc2VudCBpbiB5LyBhZnRlcgorIyAgICAgICAgIHRoZSBtZXJnZSwganVzdCBtYXJrZWQgYXMgY29uZmxpY3RlZC4gIEluZGVlZCwgSSBwcmV2aW91c2x5IGRpZAorIyAgICAgICAgIGFyZ3VlIHRoYXQuICBCdXQgYXBwbHlpbmcgZGlyZWN0b3J5IHJlbmFtZXMgdG8gdGhlIHNpZGUgb2YKKyMgICAgICAgICBoaXN0b3J5IHdoZXJlIGEgZmlsZSBpcyBtZXJlbHkgbW9kaWZpZWQgcmVzdWx0cyBpbiBzcHVyaW91cworIyAgICAgICAgIHJlbmFtZS9yZW5hbWUoMXRvMikgY29uZmxpY3RzIC0tIHNlZSB0ZXN0Y2FzZSA5aC4gIFNlZSBhbHNvCisjICAgICAgICAgbm90ZXMgaW4gOGQuCisKK3Rlc3Rfc2V0dXBfOGMgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gOGMgJiYKKwkoCisJCWNkIDhjICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQl0ZXN0X3NlcSAxIDEwID56L2QgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IHJtIHovZCAmJgorCQlnaXQgbXYgeiB5ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gMTEgPnovZCAmJgorCQl0ZXN0X2NobW9kICt4IHovZCAmJgorCQllY2hvIGUgPnovZSAmJgorCQlnaXQgYWRkIHovZCB6L2UgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc4YzogbW9kaWZ5L2RlbGV0ZSBvciByZW5hbWUrbW9kaWZ5L2RlbGV0ZScgJworCXRlc3Rfc2V0dXBfOGMgJiYKKwkoCisJCWNkIDhjICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChtb2RpZnkvZGVsZXRlKS4qIHovZCIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9iIDowOnkvYyA6MDp5L2UgOjE6ei9kIDozOnovZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9iICBPOnovYyAgQjp6L2UgIE86ei9kICBCOnovZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6Mjp6L2QgJiYKKwkJZ2l0IGxzLWZpbGVzIC1zIHovZCB8IGdyZXAgXjEwMDc1NSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB6L2QgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgeS9kCisJKQorJworCisjIFRlc3RjYXNlIDhkLCByZW5hbWUvZGVsZXRlLi4ub3Igbm90PworIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlIDViOyB0aGVzZSBtYXkgYXBwZWFyIHNsaWdodGx5IGluY29uc2lzdGVudCB0byB1c2VyczsKKyMgICAgQWxzbyByZWxhdGVkIHRvIHRlc3RjYXNlcyA3ZCBhbmQgN2UpCisjICAgQ29tbWl0IE86IHove2IsYyxkfQorIyAgIENvbW1pdCBBOiB5L3tiLGN9CisjICAgQ29tbWl0IEI6IHove2IsYyxkLGV9CisjICAgRXhwZWN0ZWQ6IHkve2IsYyxlfQorIworIyAgIE5vdGU6IEl0IHdvdWxkIGFsc28gYmUgc29tZXdoYXQgcmVhc29uYWJsZSB0byByZXNvbHZlIHRoaXMgYXMKKyMgICAgICAgICAgICAgeS97YixjLGV9LCBDT05GTElDVChyZW5hbWUvZGVsZXRlOiB4L2QgLT4geS9kIG9yIGRlbGV0ZWQpCisjCisjICAgSW4gdGhpcyBjYXNlLCBJJ20gbGVhbmluZyB0b3dhcmRzOiBjb21taXQgQSB3YXMgdGhlIG9uZSB0aGF0IGRlbGV0ZWQgei9kCisjICAgYW5kIGl0IGRpZCB0aGUgcmVuYW1lIG9mIHogdG8geSwgc28gdGhlIHR3byAiY29uZmxpY3RzIiAocmVuYW1lIHZzLgorIyAgIGRlbGV0ZSkgYXJlIGJvdGggY29taW5nIGZyb20gY29tbWl0IEEsIHdoaWNoIGlzIGlsbG9naWNhbC4gIENvbmZsaWN0cworIyAgIGR1cmluZyBtZXJnaW5nIGFyZSBzdXBwb3NlZCB0byBiZSBhYm91dCBvcHBvc2l0ZSBzaWRlcyBkb2luZyB0aGluZ3MKKyMgICBkaWZmZXJlbnRseS4KKwordGVzdF9zZXR1cF84ZCAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA4ZCAmJgorCSgKKwkJY2QgOGQgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCXRlc3Rfc2VxIDEgMTAgPnovZCAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgcm0gei9kICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZWNobyBlID56L2UgJiYKKwkJZ2l0IGFkZCB6L2UgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc4ZDogcmVuYW1lL2RlbGV0ZS4uLm9yIG5vdD8nICcKKwl0ZXN0X3NldHVwXzhkICYmCisJKAorCQljZCA4ZCAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnkvYiBIRUFEOnkvYyBIRUFEOnkvZSAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgICAgTzp6L2MgICAgQjp6L2UgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSA4ZSwgQm90aCBzaWRlcyByZW5hbWUsIG9uZSBzaWRlIGFkZHMgdG8gb3JpZ2luYWwgZGlyZWN0b3J5CisjICAgQ29tbWl0IE86IHove2IsY30KKyMgICBDb21taXQgQTogeS97YixjfQorIyAgIENvbW1pdCBCOiB3L3tiLGN9LCB6L2QKKyMKKyMgUG9zc2libGUgUmVzb2x1dGlvbnM6CisjICAgdy9vIGRpci1yZW5hbWUgZGV0ZWN0aW9uOiB6L2QsIENPTkZMSUNUKHovYiAtPiB5L2IgdnMuIHcvYiksCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTkZMSUNUKHovYyAtPiB5L2MgdnMuIHcvYykKKyMgICBDdXJyZW50bHkgZXhwZWN0ZWQ6ICAgICAgIHkvZCwgQ09ORkxJQ1Qoei9iIC0+IHkvYiB2cy4gdy9iKSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ORkxJQ1Qoei9jIC0+IHkvYyB2cy4gdy9jKQorIyAgIE9wdGltYWw6ICAgICAgICAgICAgICAgICAgPz8KKyMKKyMgTm90ZXM6IEluIGNvbW1pdCBBLCBkaXJlY3RvcnkgeiBnb3QgcmVuYW1lZCB0byB5LiAgSW4gY29tbWl0IEIsIGRpcmVjdG9yeSB6CisjICAgICAgICBkaWQgTk9UIGdldCByZW5hbWVkOyB0aGUgZGlyZWN0b3J5IGlzIHN0aWxsIHByZXNlbnQ7IGluc3RlYWQgaXQgaXMKKyMgICAgICAgIGNvbnNpZGVyZWQgdG8gaGF2ZSBqdXN0IHJlbmFtZWQgYSBzdWJzZXQgb2YgcGF0aHMgaW4gZGlyZWN0b3J5IHoKKyMgICAgICAgIGVsc2V3aGVyZS4gIFRoZXJlZm9yZSwgdGhlIGRpcmVjdG9yeSByZW5hbWUgZG9uZSBpbiBjb21taXQgQSB0byB6LworIyAgICAgICAgYXBwbGllcyB0byB6L2QgYW5kIG1hcHMgaXQgdG8geS9kLgorIworIyAgICAgICAgSXQncyBwb3NzaWJsZSB0aGF0IHVzZXJzIHdvdWxkIGdldCBjb25mdXNlZCBhYm91dCB0aGlzLCBidXQgd2hhdAorIyAgICAgICAgc2hvdWxkIHdlIGRvIGluc3RlYWQ/ICBTaWxlbnRseSBsZWF2aW5nIGF0IHovZCBzZWVtcyBqdXN0IGFzIGJhZCBvcgorIyAgICAgICAgbWF5YmUgZXZlbiB3b3JzZS4gIFBlcmhhcHMgd2UgY291bGQgcHJpbnQgYSBiaWcgd2FybmluZyBhYm91dCB6L2QKKyMgICAgICAgIGFuZCBob3cgd2UncmUgbW92aW5nIHRvIHkvZCBpbiB0aGlzIGNhc2UsIGJ1dCB3aGVuIEkgc3RhcnRlZCB0aGlua2luZworIyAgICAgICAgYWJvdXQgdGhlIHJhbWlmaWNhdGlvbnMgb2YgZG9pbmcgdGhhdCwgSSBkaWRuJ3Qga25vdyBob3cgdG8gcnVsZSBvdXQKKyMgICAgICAgIHRoYXQgb3BlbmluZyBvdGhlciB3ZWlyZCBlZGdlIGFuZCBjb3JuZXIgY2FzZXMgc28gSSBqdXN0IHB1bnRlZC4KKwordGVzdF9zZXR1cF84ZSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA4ZSAmJgorCSgKKwkJY2QgOGUgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHogdyAmJgorCQlta2RpciB6ICYmCisJCWVjaG8gZCA+ei9kICYmCisJCWdpdCBhZGQgei9kICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnOGU6IEJvdGggc2lkZXMgcmVuYW1lLCBvbmUgc2lkZSBhZGRzIHRvIG9yaWdpbmFsIGRpcmVjdG9yeScgJworCXRlc3Rfc2V0dXBfOGUgJiYKKwkoCisJCWNkIDhlICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgQ09ORkxJQ1QuKnJlbmFtZS9yZW5hbWUuKnovYy4qeS9jLip3L2Mgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgQ09ORkxJQ1QuKnJlbmFtZS9yZW5hbWUuKnovYi4qeS9iLip3L2Igb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjE6ei9iIDoyOnkvYiA6Mzp3L2IgOjE6ei9jIDoyOnkvYyA6Mzp3L2MgOjA6eS9kICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQkgTzp6L2IgIE86ei9iICBPOnovYiAgTzp6L2MgIE86ei9jICBPOnovYyAgQjp6L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCA+YWN0dWFsIFwKKwkJCXkvYiAgIHcvYiAgIHkvYyAgIHcvYyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgTzp6L2IgTzp6L2MgTzp6L2MgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHovYiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB6L2MKKwkpCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTRUNUSU9OIDk6IE90aGVyIHRlc3RjYXNlcworIworIyBUaGlzIHNlY3Rpb24gY29uc2lzdHMgb2YgbWlzY2VsbGFuZW91cyB0ZXN0Y2FzZXMgSSB0aG91Z2h0IG9mIGR1cmluZworIyB0aGUgaW1wbGVtZW50YXRpb24gd2hpY2ggcm91bmQgb3V0IHRoZSB0ZXN0aW5nLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGVzdGNhc2UgOWEsIElubmVyIHJlbmFtZWQgZGlyZWN0b3J5IHdpdGhpbiBvdXRlciByZW5hbWVkIGRpcmVjdG9yeQorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlIDFmKQorIyAgIENvbW1pdCBPOiB6L3tiLGMsZC97ZSxmLGd9fQorIyAgIENvbW1pdCBBOiB5L3tiLGN9LCB4L3cve2UsZixnfQorIyAgIENvbW1pdCBCOiB6L3tiLGMsZC97ZSxmLGcsaH0saX0KKyMgICBFeHBlY3RlZDogeS97YixjLGl9LCB4L3cve2UsZixnLGh9CisjICAgTk9URTogVGhlIG9ubHkgcmVhc29uIHRoaXMgb25lIGlzIGludGVyZXN0aW5nIGlzIGJlY2F1c2Ugd2hlbiBhIGRpcmVjdG9yeQorIyAgICAgICAgIGlzIHNwbGl0IGludG8gbXVsdGlwbGUgb3RoZXIgZGlyZWN0b3JpZXMsIHdlIGRldGVybWluZSBieSB0aGUgd2VpZ2h0CisjICAgICAgICAgb2Ygd2hpY2ggb25lIGhhZCB0aGUgbW9zdCBwYXRocyBnb2luZyB0byBpdC4gIEEgbmFpdmUgaW1wbGVtZW50YXRpb24KKyMgICAgICAgICBvZiB0aGF0IGNvdWxkIHRha2UgdGhlIG5ldyBmaWxlIGluIGNvbW1pdCBCIGF0IHovaSB0byB4L3cvaSBvciB4L2kuCisKK3Rlc3Rfc2V0dXBfOWEgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gOWEgJiYKKwkoCisJCWNkIDlhICYmCisKKwkJbWtkaXIgLXAgei9kICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWVjaG8gZSA+ei9kL2UgJiYKKwkJZWNobyBmID56L2QvZiAmJgorCQllY2hvIGcgPnovZC9nICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCW1rZGlyIHggJiYKKwkJZ2l0IG12IHovZCB4L3cgJiYKKwkJZ2l0IG12IHogeSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQllY2hvIGggPnovZC9oICYmCisJCWVjaG8gaSA+ei9pICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzlhOiBJbm5lciByZW5hbWVkIGRpcmVjdG9yeSB3aXRoaW4gb3V0ZXIgcmVuYW1lZCBkaXJlY3RvcnknICcKKwl0ZXN0X3NldHVwXzlhICYmCisJKAorCQljZCA5YSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA3IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnkvYiBIRUFEOnkvYyBIRUFEOnkvaSAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgICAgTzp6L2MgICAgQjp6L2kgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOngvdy9lIEhFQUQ6eC93L2YgSEVBRDp4L3cvZyBIRUFEOngvdy9oICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovZC9lICAgIE86ei9kL2YgICAgTzp6L2QvZyAgICBCOnovZC9oICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgOWIsIFRyYW5zaXRpdmUgcmVuYW1lIHdpdGggY29udGVudCBtZXJnZQorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlIDFjKQorIyAgIENvbW1pdCBPOiB6L3tiLGN9LCAgIHgvZF8xCisjICAgQ29tbWl0IEE6IHkve2IsY30sICAgeC9kXzIKKyMgICBDb21taXQgQjogei97YixjLGRfM30KKyMgICBFeHBlY3RlZDogeS97YixjLGRfbWVyZ2VkfQorCit0ZXN0X3NldHVwXzliICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDliICYmCisJKAorCQljZCA5YiAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJbWtkaXIgeCAmJgorCQl0ZXN0X3NlcSAxIDEwID54L2QgJiYKKwkJZ2l0IGFkZCB6IHggJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgeiB5ICYmCisJCXRlc3Rfc2VxIDEgMTEgPngvZCAmJgorCQlnaXQgYWRkIHgvZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQl0ZXN0X3NlcSAwIDEwID54L2QgJiYKKwkJZ2l0IG12IHgvZCB6L2QgJiYKKwkJZ2l0IGFkZCB6L2QgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc5YjogVHJhbnNpdGl2ZSByZW5hbWUgd2l0aCBjb250ZW50IG1lcmdlJyAnCisJdGVzdF9zZXR1cF85YiAmJgorCSgKKwkJY2QgOWIgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKworCQl0ZXN0X3NlcSAwIDExID5leHBlY3RlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCB5L2QgJiYKKwkJZ2l0IGFkZCBleHBlY3RlZCAmJgorCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJSEVBRDp5L2IgSEVBRDp5L2MgSEVBRDp5L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86ei9iICAgIE86ei9jICAgIDowOmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOngvZCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6ei9kICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHovZCAmJgorCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQ6eS9kKSAhPSAkKGdpdCByZXYtcGFyc2UgTzp4L2QpICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQ6eS9kKSAhPSAkKGdpdCByZXYtcGFyc2UgQTp4L2QpICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQ6eS9kKSAhPSAkKGdpdCByZXYtcGFyc2UgQjp6L2QpCisJKQorJworCisjIFRlc3RjYXNlIDljLCBEb3VibHkgdHJhbnNpdGl2ZSByZW5hbWU/CisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2UgMWMsIDdlLCBhbmQgOWQpCisjICAgQ29tbWl0IE86IHove2IsY30sICAgICB4L3tkLGV9LCAgICB3L2YKKyMgICBDb21taXQgQTogeS97YixjfSwgICAgIHgve2QsZSxmLGd9CisjICAgQ29tbWl0IEI6IHove2IsYyxkLGV9LCAgICAgICAgICAgICB3L2YKKyMgICBFeHBlY3RlZDogeS97YixjLGQsZX0sIHgve2YsZ30KKyMKKyMgICBOT1RFOiB4L2YgYW5kIHgvZyBtYXkgYmUgc2xpZ2h0bHkgY29uZnVzaW5nIGhlcmUuICBUaGUgcmVuYW1lIGZyb20gdy9mIHRvCisjICAgICAgICAgeC9mIGlzIGNsZWFyLiAgTGV0J3MgbG9vayBiZXlvbmQgdGhhdC4gIEhlcmUncyB0aGUgbG9naWM6CisjICAgICAgICAgICAgQ29tbWl0IEIgcmVuYW1lZCB4LyAtPiB6LworIyAgICAgICAgICAgIENvbW1pdCBBIHJlbmFtZWQgei8gLT4geS8KKyMgICAgICAgICBTbywgd2UgY291bGQgcG9zc2libHkgZnVydGhlciByZW5hbWUgeC9mIHRvIHovZiB0byB5L2YsIGEgZG91Ymx5CisjICAgICAgICAgdHJhbnNpZW50IHJlbmFtZS4gIEhvd2V2ZXIsIHdoZXJlIGRvZXMgaXQgZW5kPyAgV2UgY2FuIGNoYWluIHRoZXNlCisjICAgICAgICAgaW5kZWZpbml0ZWx5IChzZWUgdGVzdGNhc2UgOWQpLiAgV2hhdCBpZiB0aGVyZSBpcyBhIEQvRiBjb25mbGljdAorIyAgICAgICAgIGF0IHovZi8gb3IgeS9mLz8gIE9yIGp1c3QgYW5vdGhlciBmaWxlIGNvbmZsaWN0IGF0IG9uZSBvZiB0aG9zZQorIyAgICAgICAgIHBhdGhzPyAgSW4gdGhlIGNhc2Ugb2YgYW4gTi1sb25nIGNoYWluIG9mIHRyYW5zaWVudCByZW5hbWluZ3MsCisjICAgICAgICAgd2hlcmUgZG8gd2UgImFib3J0IiB0aGUgcmVuYW1lIGF0PyAgQ2FuIHRoZSB1c2VyIG1ha2Ugc2Vuc2Ugb2YKKyMgICAgICAgICB0aGUgcmVzdWx0aW5nIGNvbmZsaWN0IGFuZCByZXNvbHZlIGl0PworIworIyAgICAgICAgIFRvIGF2b2lkIHRoaXMgY29uZnVzaW9uIEkgdXNlIHRoZSBzaW1wbGUgcnVsZSB0aGF0IGlmIHRoZSBvdGhlciBzaWRlCisjICAgICAgICAgb2YgaGlzdG9yeSBkaWQgYSBkaXJlY3RvcnkgcmVuYW1lIHRvIGEgcGF0aCB0aGF0IHlvdXIgc2lkZSByZW5hbWVkCisjICAgICAgICAgYXdheSwgdGhlbiBpZ25vcmUgdGhhdCBwYXJ0aWN1bGFyIHJlbmFtZSBmcm9tIHRoZSBvdGhlciBzaWRlIG9mCisjICAgICAgICAgaGlzdG9yeSBmb3IgYW55IGltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzLgorCit0ZXN0X3NldHVwXzljICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDljICYmCisJKAorCQljZCA5YyAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJbWtkaXIgeCAmJgorCQllY2hvIGQgPngvZCAmJgorCQllY2hvIGUgPngvZSAmJgorCQlta2RpciB3ICYmCisJCWVjaG8gZiA+dy9mICYmCisJCWdpdCBhZGQgeiB4IHcgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgeiB5ICYmCisJCWdpdCBtdiB3L2YgeC8gJiYKKwkJZWNobyBnID54L2cgJiYKKwkJZ2l0IGFkZCB4L2cgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHgvZCB6L2QgJiYKKwkJZ2l0IG12IHgvZSB6L2UgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc5YzogRG91Ymx5IHRyYW5zaXRpdmUgcmVuYW1lPycgJworCXRlc3Rfc2V0dXBfOWMgJiYKKwkoCisJCWNkIDljICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nIHggLT4geiByZW5hbWUgdG8geC9mIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnkvYiBIRUFEOnkvYyBIRUFEOnkvZCBIRUFEOnkvZSBIRUFEOngvZiBIRUFEOngvZyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgICAgTzp6L2MgICAgTzp4L2QgICAgTzp4L2UgICAgTzp3L2YgICAgQTp4L2cgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSA5ZCwgTi1mb2xkIHRyYW5zaXRpdmUgcmVuYW1lPworIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlIDljLi4uYW5kIDFjIGFuZCA3ZSkKKyMgICBDb21taXQgTzogei9hLCB5L2IsIHgvYywgdy9kLCB2L2UsIHUvZgorIyAgIENvbW1pdCBBOiAgeS97YSxifSwgIHcve2MsZH0sICB1L3tlLGZ9CisjICAgQ29tbWl0IEI6IHove2EsdH0sIHgve2IsY30sIHYve2QsZX0sIHUvZgorIyAgIEV4cGVjdGVkOiA8c2VlIE5PVEUgZmlyc3Q+CisjCisjICAgTk9URTogei8gLT4geS8gKGluIGNvbW1pdCBBKQorIyAgICAgICAgIHkvIC0+IHgvIChpbiBjb21taXQgQikKKyMgICAgICAgICB4LyAtPiB3LyAoaW4gY29tbWl0IEEpCisjICAgICAgICAgdy8gLT4gdi8gKGluIGNvbW1pdCBCKQorIyAgICAgICAgIHYvIC0+IHUvIChpbiBjb21taXQgQSkKKyMgICAgICAgICBTbywgaWYgd2UgYWRkIGEgZmlsZSB0byB6LCBzYXkgei90LCB3aGVyZSBzaG91bGQgaXQgZW5kIHVwPyAgSW4gdT8KKyMgICAgICAgICBXaGF0IGlmIHRoZXJlJ3MgYW5vdGhlciBmaWxlIG9yIGRpcmVjdG9yeSBuYW1lZCAndCcgaW4gb25lIG9mIHRoZQorIyAgICAgICAgIGludGVydmVuaW5nIGRpcmVjdG9yaWVzIGFuZC9vciBpbiB1IGl0c2VsZj8gIEFsc28sIHNob3VsZG4ndCB0aGUKKyMgICAgICAgICBzYW1lIGxvZ2ljIHRoYXQgcGxhY2VzICd0JyBpbiB1LyBhbHNvIG1vdmUgQUxMIG90aGVyIGZpbGVzIHRvIHUvPworIyAgICAgICAgIFdoYXQgaWYgdGhlcmUgYXJlIGZpbGUgb3IgZGlyZWN0b3J5IGNvbmZsaWN0cyBpbiBhbnkgb2YgdGhlbT8gIElmCisjICAgICAgICAgd2UgYXR0ZW1wdGVkIHRvIGRvIE4td2F5IChOLWZvbGQ/IE4tYXJ5PyBOLXVwbGU/KSB0cmFuc2l0aXZlIHJlbmFtZXMKKyMgICAgICAgICBsaWtlIHRoaXMsIHdvdWxkIHRoZSB1c2VyIGhhdmUgYW55IGhvcGUgb2YgdW5kZXJzdGFuZGluZyBhbnkKKyMgICAgICAgICBjb25mbGljdHMgb3IgaG93IHRoZWlyIHdvcmtpbmcgdHJlZSBlbmRlZCB1cD8gIEkgdGhpbmsgbm90LCBzbyBJJ20KKyMgICAgICAgICBydWxpbmcgb3V0IE4tYXJ5IHRyYW5zaXRpdmUgcmVuYW1lcyBmb3IgTj4xLgorIworIyAgIFRoZXJlZm9yZSBvdXIgZXhwZWN0ZWQgcmVzdWx0IGlzOgorIyAgICAgei90LCB5L2EsIHgvYiwgdy9jLCB1L2QsIHUvZSwgdS9mCisjICAgVGhlIHJlYXNvbiB0aGF0IHYvZCBET0VTIGdldCB0cmFuc2l0aXZlbHkgcmVuYW1lZCB0byB1L2QgaXMgdGhhdCB1LyBpc24ndAorIyAgIHJlbmFtZWQgc29tZXdoZXJlLiAgQSBzbGlnaHRseSBzdWItb3B0aW1hbCByZXN1bHQsIGJ1dCBpdCB1c2VzIGZhaXJseQorIyAgIHNpbXBsZSBydWxlcyB0aGF0IGFyZSBjb25zaXN0ZW50IHdpdGggd2hhdCB3ZSBuZWVkIGZvciBhbGwgdGhlIG90aGVyCisjICAgdGVzdGNhc2VzIGFuZCBzaW1wbGlmaWVzIHRoaW5ncyBmb3IgdGhlIHVzZXIuCisKK3Rlc3Rfc2V0dXBfOWQgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gOWQgJiYKKwkoCisJCWNkIDlkICYmCisKKwkJbWtkaXIgeiB5IHggdyB2IHUgJiYKKwkJZWNobyBhID56L2EgJiYKKwkJZWNobyBiID55L2IgJiYKKwkJZWNobyBjID54L2MgJiYKKwkJZWNobyBkID53L2QgJiYKKwkJZWNobyBlID52L2UgJiYKKwkJZWNobyBmID51L2YgJiYKKwkJZ2l0IGFkZCB6IHkgeCB3IHYgdSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6L2EgeS8gJiYKKwkJZ2l0IG12IHgvYyB3LyAmJgorCQlnaXQgbXYgdi9lIHUvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gdCA+ei90ICYmCisJCWdpdCBtdiB5L2IgeC8gJiYKKwkJZ2l0IG12IHcvZCB2LyAmJgorCQlnaXQgYWRkIHovdCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzlkOiBOLXdheSB0cmFuc2l0aXZlIHJlbmFtZT8nICcKKwl0ZXN0X3NldHVwXzlkICYmCisJKAorCQljZCA5ZCAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJXQVJOSU5HOiBBdm9pZGluZyBhcHBseWluZyB6IC0+IHkgcmVuYW1lIHRvIHovdCIgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nIHkgLT4geCByZW5hbWUgdG8geS9hIiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiV0FSTklORzogQXZvaWRpbmcgYXBwbHlpbmcgeCAtPiB3IHJlbmFtZSB0byB4L2IiIG91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJXQVJOSU5HOiBBdm9pZGluZyBhcHBseWluZyB3IC0+IHYgcmVuYW1lIHRvIHcvYyIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJSEVBRDp6L3QgXAorCQkJSEVBRDp5L2EgSEVBRDp4L2IgSEVBRDp3L2MgXAorCQkJSEVBRDp1L2QgSEVBRDp1L2UgSEVBRDp1L2YgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCUI6ei90ICAgIFwKKwkJCU86ei9hICAgIE86eS9iICAgIE86eC9jICAgIFwKKwkJCU86dy9kICAgIE86di9lICAgIEE6dS9mICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgOWUsIE4tdG8tMSB3aGFtbW8KKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZSA5Yy4uLmFuZCAxYyBhbmQgN2UpCisjICAgQ29tbWl0IE86IGRpcjEve2EsYn0sIGRpcjIve2QsZX0sIGRpcjMve2csaH0sIGRpck4ve2osa30KKyMgICBDb21taXQgQTogZGlyMS97YSxiLGMseW99LCBkaXIyL3tkLGUsZix5b30sIGRpcjMve2csaCxpLHlvfSwgZGlyTi97aixrLGwseW99CisjICAgQ29tbWl0IEI6IGNvbWJpbmVkL3thLGIsZCxlLGcsaCxqLGt9CisjICAgRXhwZWN0ZWQ6IGNvbWJpbmVkL3thLGIsYyxkLGUsZixnLGgsaSxqLGssbH0sIENPTkZMSUNUKE50bzEpIHdhcm5pbmdzLAorIyAgICAgICAgICAgICBkaXIxL3lvLCBkaXIyL3lvLCBkaXIzL3lvLCBkaXJOL3lvCisKK3Rlc3Rfc2V0dXBfOWUgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gOWUgJiYKKwkoCisJCWNkIDllICYmCisKKwkJbWtkaXIgZGlyMSBkaXIyIGRpcjMgZGlyTiAmJgorCQllY2hvIGEgPmRpcjEvYSAmJgorCQllY2hvIGIgPmRpcjEvYiAmJgorCQllY2hvIGQgPmRpcjIvZCAmJgorCQllY2hvIGUgPmRpcjIvZSAmJgorCQllY2hvIGcgPmRpcjMvZyAmJgorCQllY2hvIGggPmRpcjMvaCAmJgorCQllY2hvIGogPmRpck4vaiAmJgorCQllY2hvIGsgPmRpck4vayAmJgorCQlnaXQgYWRkIGRpciogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQllY2hvIGMgID5kaXIxL2MgJiYKKwkJZWNobyB5byA+ZGlyMS95byAmJgorCQllY2hvIGYgID5kaXIyL2YgJiYKKwkJZWNobyB5byA+ZGlyMi95byAmJgorCQllY2hvIGkgID5kaXIzL2kgJiYKKwkJZWNobyB5byA+ZGlyMy95byAmJgorCQllY2hvIGwgID5kaXJOL2wgJiYKKwkJZWNobyB5byA+ZGlyTi95byAmJgorCQlnaXQgYWRkIGRpciogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IGRpcjEgY29tYmluZWQgJiYKKwkJZ2l0IG12IGRpcjIvKiBjb21iaW5lZC8gJiYKKwkJZ2l0IG12IGRpcjMvKiBjb21iaW5lZC8gJiYKKwkJZ2l0IG12IGRpck4vKiBjb21iaW5lZC8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnOWU6IE4tdG8tMSB3aGFtbW8nICcKKwl0ZXN0X3NldHVwXzllICYmCisJKAorCQljZCA5ZSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCQlncmVwICJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IENhbm5vdCBtYXAgbW9yZSB0aGFuIG9uZSBwYXRoIHRvIGNvbWJpbmVkL3lvIiBvdXQgPmVycm9yX2xpbmUgJiYKKwkJZ3JlcCAtcSBkaXIxL3lvIGVycm9yX2xpbmUgJiYKKwkJZ3JlcCAtcSBkaXIyL3lvIGVycm9yX2xpbmUgJiYKKwkJZ3JlcCAtcSBkaXIzL3lvIGVycm9yX2xpbmUgJiYKKwkJZ3JlcCAtcSBkaXJOL3lvIGVycm9yX2xpbmUgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxNiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6Y29tYmluZWQvYSA6MDpjb21iaW5lZC9iIDowOmNvbWJpbmVkL2MgXAorCQkJOjA6Y29tYmluZWQvZCA6MDpjb21iaW5lZC9lIDowOmNvbWJpbmVkL2YgXAorCQkJOjA6Y29tYmluZWQvZyA6MDpjb21iaW5lZC9oIDowOmNvbWJpbmVkL2kgXAorCQkJOjA6Y29tYmluZWQvaiA6MDpjb21iaW5lZC9rIDowOmNvbWJpbmVkL2wgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOmRpcjEvYSAgICAgIE86ZGlyMS9iICAgICAgQTpkaXIxL2MgXAorCQkJIE86ZGlyMi9kICAgICAgTzpkaXIyL2UgICAgICBBOmRpcjIvZiBcCisJCQkgTzpkaXIzL2cgICAgICBPOmRpcjMvaCAgICAgIEE6ZGlyMy9pIFwKKwkJCSBPOmRpck4vaiAgICAgIE86ZGlyTi9rICAgICAgQTpkaXJOL2wgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDpkaXIxL3lvIDowOmRpcjIveW8gOjA6ZGlyMy95byA6MDpkaXJOL3lvICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQkgQTpkaXIxL3lvICBBOmRpcjIveW8gIEE6ZGlyMy95byAgQTpkaXJOL3lvICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgOWYsIFJlbmFtZWQgZGlyZWN0b3J5IHRoYXQgb25seSBjb250YWluZWQgaW1tZWRpYXRlIHN1YmRpcnMKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZXMgMWUgJiA5ZykKKyMgICBDb21taXQgTzogZ29hbC97YSxifS8kbW9yZV9maWxlcworIyAgIENvbW1pdCBBOiBwcmlvcml0eS97YSxifS8kbW9yZV9maWxlcworIyAgIENvbW1pdCBCOiBnb2FsL3thLGJ9LyRtb3JlX2ZpbGVzLCBnb2FsL2MKKyMgICBFeHBlY3RlZDogcHJpb3JpdHkve2EsYn0vJG1vcmVfZmlsZXMsIHByaW9yaXR5L2MKKwordGVzdF9zZXR1cF85ZiAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA5ZiAmJgorCSgKKwkJY2QgOWYgJiYKKworCQlta2RpciAtcCBnb2FsL2EgJiYKKwkJbWtkaXIgLXAgZ29hbC9iICYmCisJCWVjaG8gZm9vID5nb2FsL2EvZm9vICYmCisJCWVjaG8gYmFyID5nb2FsL2IvYmFyICYmCisJCWVjaG8gYmF6ID5nb2FsL2IvYmF6ICYmCisJCWdpdCBhZGQgZ29hbCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiBnb2FsLyBwcmlvcml0eSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQllY2hvIGMgPmdvYWwvYyAmJgorCQlnaXQgYWRkIGdvYWwvYyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzlmOiBSZW5hbWVkIGRpcmVjdG9yeSB0aGF0IG9ubHkgY29udGFpbmVkIGltbWVkaWF0ZSBzdWJkaXJzJyAnCisJdGVzdF9zZXR1cF85ZiAmJgorCSgKKwkJY2QgOWYgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJSEVBRDpwcmlvcml0eS9hL2ZvbyBcCisJCQlIRUFEOnByaW9yaXR5L2IvYmFyIFwKKwkJCUhFQUQ6cHJpb3JpdHkvYi9iYXogXAorCQkJSEVBRDpwcmlvcml0eS9jICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOmdvYWwvYS9mb28gXAorCQkJTzpnb2FsL2IvYmFyIFwKKwkJCU86Z29hbC9iL2JheiBcCisJCQlCOmdvYWwvYyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDpnb2FsL2MKKwkpCisnCisKKyMgVGVzdGNhc2UgOWcsIFJlbmFtZWQgZGlyZWN0b3J5IHRoYXQgb25seSBjb250YWluZWQgaW1tZWRpYXRlIHN1YmRpcnMsIGltbWVkaWF0ZSBzdWJkaXJzIHJlbmFtZWQKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZXMgMWUgJiA5ZikKKyMgICBDb21taXQgTzogZ29hbC97YSxifS8kbW9yZV9maWxlcworIyAgIENvbW1pdCBBOiBwcmlvcml0eS97YWxwaGEsYnJhdm99LyRtb3JlX2ZpbGVzCisjICAgQ29tbWl0IEI6IGdvYWwve2EsYn0vJG1vcmVfZmlsZXMsIGdvYWwvYworIyAgIEV4cGVjdGVkOiBwcmlvcml0eS97YWxwaGEsYnJhdm99LyRtb3JlX2ZpbGVzLCBwcmlvcml0eS9jCisKK3Rlc3Rfc2V0dXBfOWcgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gOWcgJiYKKwkoCisJCWNkIDlnICYmCisKKwkJbWtkaXIgLXAgZ29hbC9hICYmCisJCW1rZGlyIC1wIGdvYWwvYiAmJgorCQllY2hvIGZvbyA+Z29hbC9hL2ZvbyAmJgorCQllY2hvIGJhciA+Z29hbC9iL2JhciAmJgorCQllY2hvIGJheiA+Z29hbC9iL2JheiAmJgorCQlnaXQgYWRkIGdvYWwgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlta2RpciBwcmlvcml0eSAmJgorCQlnaXQgbXYgZ29hbC9hLyBwcmlvcml0eS9hbHBoYSAmJgorCQlnaXQgbXYgZ29hbC9iLyBwcmlvcml0eS9iZXRhICYmCisJCXJtZGlyIGdvYWwvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gYyA+Z29hbC9jICYmCisJCWdpdCBhZGQgZ29hbC9jICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3RfZmFpbHVyZSAnOWc6IFJlbmFtZWQgZGlyZWN0b3J5IHRoYXQgb25seSBjb250YWluZWQgaW1tZWRpYXRlIHN1YmRpcnMsIGltbWVkaWF0ZSBzdWJkaXJzIHJlbmFtZWQnICcKKwkoCisJCWNkIDlnICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6cHJpb3JpdHkvYWxwaGEvZm9vIFwKKwkJCUhFQUQ6cHJpb3JpdHkvYmV0YS9iYXIgIFwKKwkJCUhFQUQ6cHJpb3JpdHkvYmV0YS9iYXogIFwKKwkJCUhFQUQ6cHJpb3JpdHkvYyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzpnb2FsL2EvZm9vIFwKKwkJCU86Z29hbC9iL2JhciBcCisJCQlPOmdvYWwvYi9iYXogXAorCQkJQjpnb2FsL2MgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6Z29hbC9jCisJKQorJworCisjIFRlc3RjYXNlIDloLCBBdm9pZCBpbXBsaWNpdCByZW5hbWUgaWYgaW52b2x2ZWQgYXMgc291cmNlIG9uIG90aGVyIHNpZGUKKyMgICAoRXh0cmVtZWx5IGNsb3NlbHkgcmVsYXRlZCB0byB0ZXN0Y2FzZSAzYSkKKyMgICBDb21taXQgTzogei97YixjLGRfMX0KKyMgICBDb21taXQgQTogei97YixjLGRfMn0KKyMgICBDb21taXQgQjogeS97YixjfSwgeC9kXzEKKyMgICBFeHBlY3RlZDogeS97YixjfSwgeC9kXzIKKyMgICBOT1RFOiBJZiB3ZSBhcHBsaWVkIHRoZSB6LyAtPiB5LyByZW5hbWUgdG8gei9kLCB0aGVuIHdlJ2QgZW5kIHVwIHdpdGgKKyMgICAgICAgICBhIHJlbmFtZS9yZW5hbWUoMXRvMikgY29uZmxpY3QgKHovZCAtPiB5L2QgdnMuIHgvZCkKK3Rlc3Rfc2V0dXBfOWggKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gOWggJiYKKwkoCisJCWNkIDloICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbjdcbjhcbmRcbiIgPnovZCAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZWNobyBtb3JlID4+ei9kICYmCisJCWdpdCBhZGQgei9kICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJbWtkaXIgeSAmJgorCQlta2RpciB4ICYmCisJCWdpdCBtdiB6L2IgeS8gJiYKKwkJZ2l0IG12IHovYyB5LyAmJgorCQlnaXQgbXYgei9kIHgvICYmCisJCXJtZGlyIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc5aDogQXZvaWQgZGlyIHJlbmFtZSBvbiBtZXJlbHkgbW9kaWZpZWQgcGF0aCcgJworCXRlc3Rfc2V0dXBfOWggJiYKKwkoCisJCWNkIDloICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eS9iIEhFQUQ6eS9jIEhFQUQ6eC9kICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovYiAgICBPOnovYyAgICBBOnovZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUnVsZXMgc3VnZ2VzdGVkIGJ5IHNlY3Rpb24gOToKKyMKKyMgICBJZiB0aGUgb3RoZXIgc2lkZSBvZiBoaXN0b3J5IGRpZCBhIGRpcmVjdG9yeSByZW5hbWUgdG8gYSBwYXRoIHRoYXQgeW91cgorIyAgIHNpZGUgcmVuYW1lZCBhd2F5LCB0aGVuIGlnbm9yZSB0aGF0IHBhcnRpY3VsYXIgcmVuYW1lIGZyb20gdGhlIG90aGVyCisjICAgc2lkZSBvZiBoaXN0b3J5IGZvciBhbnkgaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNFQ1RJT04gMTA6IEhhbmRsaW5nIHVudHJhY2tlZCBmaWxlcworIworIyB1bnBhY2tfdHJlZXMoKSwgdXBvbiB3aGljaCB0aGUgcmVjdXJzaXZlIG1lcmdlIGFsZ29yaXRobSBpcyBiYXNlZCwgYWJvcnRzCisjIHRoZSBvcGVyYXRpb24gaWYgdW50cmFja2VkIG9yIGRpcnR5IGZpbGVzIHdvdWxkIGJlIGRlbGV0ZWQgb3Igb3ZlcndyaXR0ZW4KKyMgYnkgdGhlIG1lcmdlLiAgVW5mb3J0dW5hdGVseSwgdW5wYWNrX3RyZWVzKCkgZG9lcyBub3QgdW5kZXJzdGFuZCByZW5hbWVzLAorIyBhbmQgaWYgaXQgZG9lc24ndCBhYm9ydCwgdGhlbiBpdCBtdWRkaWVzIHVwIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBiZWZvcmUKKyMgd2UgZXZlbiBnZXQgdG8gdGhlIHBvaW50IG9mIGRldGVjdGluZyByZW5hbWVzLCBzbyB3ZSBuZWVkIHNvbWUgc3BlY2lhbAorIyBoYW5kbGluZywgYXQgbGVhc3QgaW4gdGhlIGNhc2Ugb2YgZGlyZWN0b3J5IHJlbmFtZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUZXN0Y2FzZSAxMGEsIE92ZXJ3cml0ZSB1bnRyYWNrZWQ6IG5vcm1hbCByZW5hbWUvZGVsZXRlCisjICAgQ29tbWl0IE86IHove2IsY18xfQorIyAgIENvbW1pdCBBOiB6L2IgKyB1bnRyYWNrZWQgei9jICsgdW50cmFja2VkIHovZAorIyAgIENvbW1pdCBCOiB6L3tiLGRfMX0KKyMgICBFeHBlY3RlZDogQWJvcnRlZCBNZXJnZSArCisjICAgICAgIEVSUk9SX01TRyh1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlKQorCit0ZXN0X3NldHVwXzEwYSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxMGEgJiYKKwkoCisJCWNkIDEwYSAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IHJtIHovYyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgei9jIHovZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwYTogT3ZlcndyaXRlIHVudHJhY2tlZCB3aXRoIG5vcm1hbCByZW5hbWUvZGVsZXRlJyAnCisJdGVzdF9zZXR1cF8xMGEgJiYKKwkoCisJCWNkIDEwYSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKwkJZWNobyB2ZXJ5ID56L2MgJiYKKwkJZWNobyBpbXBvcnRhbnQgPnovZCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZSIgZXJyICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBvdXQgJiYKKworCQllY2hvIHZlcnkgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgei9jICYmCisKKwkJZWNobyBpbXBvcnRhbnQgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgei9kICYmCisKKwkJZ2l0IHJldi1wYXJzZSBIRUFEOnovYiA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgTzp6L2IgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIDEwYiwgT3ZlcndyaXRlIHVudHJhY2tlZDogZGlyIHJlbmFtZSArIGRlbGV0ZQorIyAgIENvbW1pdCBPOiB6L3tiLGNfMX0KKyMgICBDb21taXQgQTogeS9iICsgdW50cmFja2VkIHkve2MsZCxlfQorIyAgIENvbW1pdCBCOiB6L3tiLGRfMSxlfQorIyAgIEV4cGVjdGVkOiBGYWlsZWQgTWVyZ2U7IHkvYiArIHVudHJhY2tlZCB5L2MgKyB1bnRyYWNrZWQgeS9kIG9uIGRpc2sgKworIyAgICAgICAgICAgICB6L2NfMSAtPiB6L2RfMSByZW5hbWUgcmVjb3JkZWQgYXQgc3RhZ2UgMyBmb3IgeS9kICsKKyMgICAgICAgRVJST1JfTVNHKHJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJ3kvZCcpCisKK3Rlc3Rfc2V0dXBfMTBiICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEwYiAmJgorCSgKKwkJY2QgMTBiICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgcm0gei9jICYmCisJCWdpdCBtdiB6LyB5LyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgei9jIHovZCAmJgorCQllY2hvIGUgPnovZSAmJgorCQlnaXQgYWRkIHovZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwYjogT3ZlcndyaXRlIHVudHJhY2tlZCB3aXRoIGRpciByZW5hbWUgKyBkZWxldGUnICcKKwl0ZXN0X3NldHVwXzEwYiAmJgorCSgKKwkJY2QgMTBiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCQllY2hvIHZlcnkgPnkvYyAmJgorCQllY2hvIGltcG9ydGFudCA+eS9kICYmCisJCWVjaG8gY29udGVudHMgPnkvZSAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChyZW5hbWUvZGVsZXRlKS4qVmVyc2lvbiBCXF4wIG9mIHkvZCBsZWZ0IGluIHRyZWUgYXQgeS9kfkJcXjAiIG91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJFcnJvcjogUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCB5L2U7IHdyaXRpbmcgdG8geS9lfkJcXjAgaW5zdGVhZCIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9iIDozOnkvZCA6Mzp5L2UgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86ei9iICBPOnovYyAgQjp6L2UgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWVjaG8gdmVyeSA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCB5L2MgJiYKKworCQllY2hvIGltcG9ydGFudCA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCB5L2QgJiYKKworCQllY2hvIGNvbnRlbnRzID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHkvZQorCSkKKycKKworIyBUZXN0Y2FzZSAxMGMsIE92ZXJ3cml0ZSB1bnRyYWNrZWQ6IGRpciByZW5hbWUvcmVuYW1lKDF0bzIpCisjICAgQ29tbWl0IE86IHove2EsYn0sIHgve2MsZH0KKyMgICBDb21taXQgQTogeS97YSxifSwgdy9jLCB4L2QgKyBkaWZmZXJlbnQgdW50cmFja2VkIHkvYworIyAgIENvbW1pdCBCOiB6L3thLGIsY30sIHgvZAorIyAgIEV4cGVjdGVkOiBGYWlsZWQgTWVyZ2U7IHkve2EsYn0gKyB4L2QgKyB1bnRyYWNrZWQgeS9jICsKKyMgICAgICAgICAgICAgQ09ORkxJQ1QocmVuYW1lL3JlbmFtZSkgeC9jIC0+IHcvYyB2cyB5L2MgKworIyAgICAgICAgICAgICB5L2N+Ql4wICsKKyMgICAgICAgICAgICAgRVJST1JfTVNHKFJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgeS9jKQorCit0ZXN0X3NldHVwXzEwYyAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxMGNfJDEgJiYKKwkoCisJCWNkIDEwY18kMSAmJgorCisJCW1rZGlyIHogeCAmJgorCQllY2hvIGEgPnovYSAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPngvYyAmJgorCQllY2hvIGQgPngvZCAmJgorCQlnaXQgYWRkIHogeCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCW1rZGlyIHcgJiYKKwkJZ2l0IG12IHgvYyB3L2MgJiYKKwkJZ2l0IG12IHovIHkvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB4L2Mgei8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMGMxOiBPdmVyd3JpdGUgdW50cmFja2VkIHdpdGggZGlyIHJlbmFtZS9yZW5hbWUoMXRvMiknICcKKwl0ZXN0X3NldHVwXzEwYyAxICYmCisJKAorCQljZCAxMGNfMSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKwkJZWNobyBpbXBvcnRhbnQgPnkvYyAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKSIgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgeS9jOyBhZGRpbmcgYXMgeS9jfkJcXjAgaW5zdGVhZCIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9hIDowOnkvYiA6MDp4L2QgOjE6eC9jIDoyOncvYyA6Mzp5L2MgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYSAgTzp6L2IgIE86eC9kICBPOngvYyAgTzp4L2MgIE86eC9jICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgeS9jfkJeMCA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgTzp4L2MgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZWNobyBpbXBvcnRhbnQgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgeS9jCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMGMyOiBPdmVyd3JpdGUgdW50cmFja2VkIHdpdGggZGlyIHJlbmFtZS9yZW5hbWUoMXRvMiksIG90aGVyIGRpcmVjdGlvbicgJworCXRlc3Rfc2V0dXBfMTBjIDIgJiYKKwkoCisJCWNkIDEwY18yICYmCisKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2xlYW4gLWZkcXggJiYKKworCQlnaXQgY2hlY2tvdXQgQl4wICYmCisJCW1rZGlyIHkgJiYKKwkJZWNobyBpbXBvcnRhbnQgPnkvYyAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEFeMCA+b3V0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKSIgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgeS9jOyBhZGRpbmcgYXMgeS9jfkhFQUQgaW5zdGVhZCIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9hIDowOnkvYiA6MDp4L2QgOjE6eC9jIDozOncvYyA6Mjp5L2MgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYSAgTzp6L2IgIE86eC9kICBPOngvYyAgTzp4L2MgIE86eC9jICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgeS9jfkhFQUQgPmFjdHVhbCAmJgorCQlnaXQgcmV2LXBhcnNlIE86eC9jID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWVjaG8gaW1wb3J0YW50ID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHkvYworCSkKKycKKworIyBUZXN0Y2FzZSAxMGQsIERlbGV0ZSB1bnRyYWNrZWQgdy8gZGlyIHJlbmFtZS9yZW5hbWUoMnRvMSkKKyMgICBDb21taXQgTzogei97YSxiLGNfMX0sICAgICAgICB4L3tkLGUsZl8yfQorIyAgIENvbW1pdCBBOiB5L3thLGJ9LCAgICAgICAgICAgIHgve2QsZSxmXzIsd2hhbV8xfSArIHVudHJhY2tlZCB5L3doYW0KKyMgICBDb21taXQgQjogei97YSxiLGNfMSx3aGFtXzJ9LCB5L3tkLGV9CisjICAgRXhwZWN0ZWQ6IEZhaWxlZCBNZXJnZTsgeS97YSxiLGQsZX0gKyB1bnRyYWNrZWQgeS97d2hhbSx3aGFtfm1lcmdlZH0rCisjICAgICAgICAgICAgIENPTkZMSUNUKHJlbmFtZS9yZW5hbWUpIHovY18xIHZzIHgvZl8yIC0+IHkvd2hhbQorIyAgICAgICAgICAgICBFUlJPUl9NU0coUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCB5L3doYW0pCisKK3Rlc3Rfc2V0dXBfMTBkICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEwZCAmJgorCSgKKwkJY2QgMTBkICYmCisKKwkJbWtkaXIgeiB4ICYmCisJCWVjaG8gYSA+ei9hICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWVjaG8gZCA+eC9kICYmCisJCWVjaG8gZSA+eC9lICYmCisJCWVjaG8gZiA+eC9mICYmCisJCWdpdCBhZGQgeiB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHovYyB4L3doYW0gJiYKKwkJZ2l0IG12IHovIHkvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB4L2Ygei93aGFtICYmCisJCWdpdCBtdiB4LyB5LyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwZDogRGVsZXRlIHVudHJhY2tlZCB3aXRoIGRpciByZW5hbWUvcmVuYW1lKDJ0bzEpJyAnCisJdGVzdF9zZXR1cF8xMGQgJiYKKwkoCisJCWNkIDEwZCAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKwkJZWNobyBpbXBvcnRhbnQgPnkvd2hhbSAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKSIgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgeS93aGFtIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp5L2EgOjA6eS9iIDowOnkvZCA6MDp5L2UgOjI6eS93aGFtIDozOnkvd2hhbSAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9hICBPOnovYiAgTzp4L2QgIE86eC9lICBPOnovYyAgICAgTzp4L2YgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOjE6eS93aGFtICYmCisKKwkJZWNobyBpbXBvcnRhbnQgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgeS93aGFtICYmCisKKwkJIyBUZXN0IHRoYXQgdGhlIHR3by13YXkgbWVyZ2UgaW4geS93aGFtfm1lcmdlZCBpcyBhcyBleHBlY3RlZAorCQlnaXQgY2F0LWZpbGUgLXAgOjI6eS93aGFtID5leHBlY3QgJiYKKwkJZ2l0IGNhdC1maWxlIC1wIDozOnkvd2hhbSA+b3RoZXIgJiYKKwkJPmVtcHR5ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIFwKKwkJCS1MICJIRUFEIiBcCisJCQktTCAiIiBcCisJCQktTCAiQl4wIiBcCisJCQlleHBlY3QgZW1wdHkgb3RoZXIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHkvd2hhbX5tZXJnZWQKKwkpCisnCisKKyMgVGVzdGNhc2UgMTBlLCBEb2VzIGdpdCBjb21wbGFpbiBhYm91dCB1bnRyYWNrZWQgZmlsZSB0aGF0J3Mgbm90IGluIHRoZSB3YXk/CisjICAgQ29tbWl0IE86IHove2EsYn0KKyMgICBDb21taXQgQTogeS97YSxifSArIHVudHJhY2tlZCB6L2MKKyMgICBDb21taXQgQjogei97YSxiLGN9CisjICAgRXhwZWN0ZWQ6IHkve2EsYixjfSArIHVudHJhY2tlZCB6L2MKKwordGVzdF9zZXR1cF8xMGUgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTBlICYmCisJKAorCQljZCAxMGUgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYSA+ei9hICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6LyB5LyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlnaXQgYWRkIHovYyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJzEwZTogRG9lcyBnaXQgY29tcGxhaW4gYWJvdXQgdW50cmFja2VkIGZpbGUgdGhhdCBpcyBub3QgcmVhbGx5IGluIHRoZSB3YXk/JyAnCisJKAorCQljZCAxMGUgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisJCW1rZGlyIHogJiYKKwkJZWNobyByYW5kb20gPnovYyAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgISAiZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UiIGVyciAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCTowOnkvYSA6MDp5L2IgOjA6eS9jICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQkgTzp6L2EgIE86ei9iICBCOnovYyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZWNobyByYW5kb20gPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgei9jCisJKQorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU0VDVElPTiAxMTogSGFuZGxpbmcgZGlydHkgKG5vdCB1cC10by1kYXRlKSBmaWxlcworIworIyB1bnBhY2tfdHJlZXMoKSwgdXBvbiB3aGljaCB0aGUgcmVjdXJzaXZlIG1lcmdlIGFsZ29yaXRobSBpcyBiYXNlZCwgYWJvcnRzCisjIHRoZSBvcGVyYXRpb24gaWYgdW50cmFja2VkIG9yIGRpcnR5IGZpbGVzIHdvdWxkIGJlIGRlbGV0ZWQgb3Igb3ZlcndyaXR0ZW4KKyMgYnkgdGhlIG1lcmdlLiAgVW5mb3J0dW5hdGVseSwgdW5wYWNrX3RyZWVzKCkgZG9lcyBub3QgdW5kZXJzdGFuZCByZW5hbWVzLAorIyBhbmQgaWYgaXQgZG9lc24ndCBhYm9ydCwgdGhlbiBpdCBtdWRkaWVzIHVwIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBiZWZvcmUKKyMgd2UgZXZlbiBnZXQgdG8gdGhlIHBvaW50IG9mIGRldGVjdGluZyByZW5hbWVzLCBzbyB3ZSBuZWVkIHNvbWUgc3BlY2lhbAorIyBoYW5kbGluZy4gIFRoaXMgd2FzIHRydWUgZXZlbiBvZiBub3JtYWwgcmVuYW1lcywgYnV0IHRoZXJlIGFyZSBhZGRpdGlvbmFsCisjIGNvZGVwYXRocyB0aGF0IG5lZWQgc3BlY2lhbCBoYW5kbGluZyB3aXRoIGRpcmVjdG9yeSByZW5hbWVzLiAgQWRkCisjIHRlc3RjYXNlcyBmb3IgYm90aCByZW5hbWVkLWJ5LWRpcmVjdG9yeS1yZW5hbWUtZGV0ZWN0aW9uIGFuZCBzdGFuZGFyZAorIyByZW5hbWUgY2FzZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUZXN0Y2FzZSAxMWEsIEF2b2lkIGxvc2luZyBkaXJ0eSBjb250ZW50cyB3aXRoIHNpbXBsZSByZW5hbWUKKyMgICBDb21taXQgTzogei97YSxiX3YxfSwKKyMgICBDb21taXQgQTogei97YSxjX3YxfSwgYW5kIHovY192MSBoYXMgdW5jb21taXR0ZWQgbW9kcworIyAgIENvbW1pdCBCOiB6L3thLGJfdjJ9CisjICAgRXhwZWN0ZWQ6IEVSUk9SX01TRyhSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgei9jKSArCisjICAgICAgICAgICAgIHovYSwgc3RhZ2VkIHZlcnNpb24gb2Ygei9jIGhhcyBzaGExc3VtIG1hdGNoaW5nIEI6ei9iX3YyLAorIyAgICAgICAgICAgICB6L2N+SEVBRCB3aXRoIGNvbnRlbnRzIG9mIEI6ei9iX3YyLAorIyAgICAgICAgICAgICB6L2Mgd2l0aCB1bmNvbW1pdHRlZCBtb2RzIG9uIHRvcCBvZiBBOnovY192MQorCit0ZXN0X3NldHVwXzExYSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxMWEgJiYKKwkoCisJCWNkIDExYSAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBhID56L2EgJiYKKwkJdGVzdF9zZXEgMSAxMCA+ei9iICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6L2Igei9jICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gMTEgPj56L2IgJiYKKwkJZ2l0IGFkZCB6L2IgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMWE6IEF2b2lkIGxvc2luZyBkaXJ0eSBjb250ZW50cyB3aXRoIHNpbXBsZSByZW5hbWUnICcKKwl0ZXN0X3NldHVwXzExYSAmJgorCSgKKwkJY2QgMTFhICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCQllY2hvIHN0dWZmID4+ei9jICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0IHovYyIgb3V0ICYmCisKKwkJdGVzdF9zZXEgMSAxMCA+ZXhwZWN0ZWQgJiYKKwkJZWNobyBzdHVmZiA+PmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIHovYyAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCTowOnovYSA6Mjp6L2MgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYSAgQjp6L2IgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCB6L2N+SEVBRCA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgQjp6L2IgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIDExYiwgQXZvaWQgbG9zaW5nIGRpcnR5IGZpbGUgaW52b2x2ZWQgaW4gZGlyZWN0b3J5IHJlbmFtZQorIyAgIENvbW1pdCBPOiB6L2EsICAgICAgICAgeC97YixjX3YxfQorIyAgIENvbW1pdCBBOiB6L3thLGNfdjF9LCAgeC9iLCAgICAgICBhbmQgei9jX3YxIGhhcyB1bmNvbW1pdHRlZCBtb2RzCisjICAgQ29tbWl0IEI6IHkvYSwgICAgICAgICB4L3tiLGNfdjJ9CisjICAgRXhwZWN0ZWQ6IHkve2EsY192Mn0sIHgvYiwgei9jX3YxIHdpdGggdW5jb21taXR0ZWQgbW9kcyB1bnRyYWNrZWQsCisjICAgICAgICAgICAgIEVSUk9SX01TRyhSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgei9jKQorCisKK3Rlc3Rfc2V0dXBfMTFiICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDExYiAmJgorCSgKKwkJY2QgMTFiICYmCisKKwkJbWtkaXIgeiB4ICYmCisJCWVjaG8gYSA+ei9hICYmCisJCWVjaG8gYiA+eC9iICYmCisJCXRlc3Rfc2VxIDEgMTAgPngvYyAmJgorCQlnaXQgYWRkIHogeCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB4L2Mgei9jICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJZWNobyAxMSA+PngvYyAmJgorCQlnaXQgYWRkIHgvYyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExYjogQXZvaWQgbG9zaW5nIGRpcnR5IGZpbGUgaW52b2x2ZWQgaW4gZGlyZWN0b3J5IHJlbmFtZScgJworCXRlc3Rfc2V0dXBfMTFiICYmCisJKAorCQljZCAxMWIgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisJCWVjaG8gc3R1ZmYgPj56L2MgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgei9jIiBvdXQgJiYKKworCQlncmVwIC1xIHN0dWZmIHovYyAmJgorCQl0ZXN0X3NlcSAxIDEwID5leHBlY3RlZCAmJgorCQllY2hvIHN0dWZmID4+ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgei9jICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1tID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eC9iIDowOnkvYSA6MDp5L2MgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOngvYiAgTzp6L2EgIEI6eC9jICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgeS9jID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSBCOngvYyA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgMTFjLCBBdm9pZCBsb3Npbmcgbm90LXVwLXRvLWRhdGUgd2l0aCByZW5hbWUgKyBEL0YgY29uZmxpY3QKKyMgICBDb21taXQgTzogeS9hLCAgICAgICAgIHgve2IsY192MX0KKyMgICBDb21taXQgQTogeS97YSxjX3YxfSwgIHgvYiwgICAgICAgYW5kIHkvY192MSBoYXMgdW5jb21taXR0ZWQgbW9kcworIyAgIENvbW1pdCBCOiB5L3thLGMvZH0sICAgeC97YixjX3YyfQorIyAgIEV4cGVjdGVkOiBBYm9ydF9tc2coImZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZSIpICsKKyMgICAgICAgICAgICAgeS9jIGxlZnQgdW50b3VjaGVkIChzdGlsbCBoYXMgdW5jb21taXR0ZWQgbW9kcykKKwordGVzdF9zZXR1cF8xMWMgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTFjICYmCisJKAorCQljZCAxMWMgJiYKKworCQlta2RpciB5IHggJiYKKwkJZWNobyBhID55L2EgJiYKKwkJZWNobyBiID54L2IgJiYKKwkJdGVzdF9zZXEgMSAxMCA+eC9jICYmCisJCWdpdCBhZGQgeSB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHgvYyB5L2MgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJbWtkaXIgeS9jICYmCisJCWVjaG8gZCA+eS9jL2QgJiYKKwkJZWNobyAxMSA+PngvYyAmJgorCQlnaXQgYWRkIHgvYyB5L2MvZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExYzogQXZvaWQgbG9zaW5nIG5vdC11cHRvZGF0ZSB3aXRoIHJlbmFtZSArIEQvRiBjb25mbGljdCcgJworCXRlc3Rfc2V0dXBfMTFjICYmCisJKAorCQljZCAxMWMgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisJCWVjaG8gc3R1ZmYgPj55L2MgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UiIGVyciAmJgorCisJCWdyZXAgLXEgc3R1ZmYgeS9jICYmCisJCXRlc3Rfc2VxIDEgMTAgPmV4cGVjdGVkICYmCisJCWVjaG8gc3R1ZmYgPj5leHBlY3RlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCB5L2MgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW0gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dAorCSkKKycKKworIyBUZXN0Y2FzZSAxMWQsIEF2b2lkIGxvc2luZyBub3QtdXAtdG8tZGF0ZSB3aXRoIHJlbmFtZSArIEQvRiBjb25mbGljdAorIyAgIENvbW1pdCBPOiB6L2EsICAgICAgICAgeC97YixjX3YxfQorIyAgIENvbW1pdCBBOiB6L3thLGNfdjF9LCAgeC9iLCAgICAgICBhbmQgei9jX3YxIGhhcyB1bmNvbW1pdHRlZCBtb2RzCisjICAgQ29tbWl0IEI6IHkve2EsYy9kfSwgICB4L3tiLGNfdjJ9CisjICAgRXhwZWN0ZWQ6IEQvRjogeS9jX3YyIHZzIHkvYy9kKSArCisjICAgICAgICAgICAgIFdhcm5pbmdfTXNnKCJSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgei9jKSArCisjICAgICAgICAgICAgIHkve2EsY35IRUFELGMvZH0sIHgvYiwgbm93LXVudHJhY2tlZCB6L2NfdjEgd2l0aCB1bmNvbW1pdHRlZCBtb2RzCisKK3Rlc3Rfc2V0dXBfMTFkICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDExZCAmJgorCSgKKwkJY2QgMTFkICYmCisKKwkJbWtkaXIgeiB4ICYmCisJCWVjaG8gYSA+ei9hICYmCisJCWVjaG8gYiA+eC9iICYmCisJCXRlc3Rfc2VxIDEgMTAgPngvYyAmJgorCQlnaXQgYWRkIHogeCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB4L2Mgei9jICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJbWtkaXIgeS9jICYmCisJCWVjaG8gZCA+eS9jL2QgJiYKKwkJZWNobyAxMSA+PngvYyAmJgorCQlnaXQgYWRkIHgvYyB5L2MvZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExZDogQXZvaWQgbG9zaW5nIG5vdC11cHRvZGF0ZSB3aXRoIHJlbmFtZSArIEQvRiBjb25mbGljdCcgJworCXRlc3Rfc2V0dXBfMTFkICYmCisJKAorCQljZCAxMWQgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisJCWVjaG8gc3R1ZmYgPj56L2MgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgei9jIiBvdXQgJiYKKworCQlncmVwIC1xIHN0dWZmIHovYyAmJgorCQl0ZXN0X3NlcSAxIDEwID5leHBlY3RlZCAmJgorCQllY2hvIHN0dWZmID4+ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgei9jICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eC9iIDowOnkvYSA6MDp5L2MvZCA6Mzp5L2MgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOngvYiAgTzp6L2EgIEI6eS9jL2QgIEI6eC9jICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgeS9jfkhFQUQgPmFjdHVhbCAmJgorCQlnaXQgcmV2LXBhcnNlIEI6eC9jID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSAxMWUsIEF2b2lkIGRlbGV0aW5nIG5vdC11cC10by1kYXRlIHdpdGggZGlyIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkCisjICAgQ29tbWl0IE86IHove2EsYn0sICAgICAgeC97Y18xLGR9CisjICAgQ29tbWl0IEE6IHkve2EsYixjXzJ9LCAgeC9kLCB3L2NfMSwgYW5kIHkvY18yIGhhcyB1bmNvbW1pdHRlZCBtb2RzCisjICAgQ29tbWl0IEI6IHove2EsYixjXzF9LCAgeC9kCisjICAgRXhwZWN0ZWQ6IEZhaWxlZCBNZXJnZTsgeS97YSxifSArIHgvZCArCisjICAgICAgICAgICAgIENPTkZMSUNUKHJlbmFtZS9yZW5hbWUpIHgvY18xIC0+IHcvY18xIHZzIHkvY18xICsKKyMgICAgICAgICAgICAgRVJST1JfTVNHKFJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCB5L2MpCisjICAgICAgICAgICAgIHkvY35CXjAgaGFzIE86eC9jXzEgY29udGVudHMKKyMgICAgICAgICAgICAgeS9jfkhFQUQgaGFzIEE6eS9jXzIgY29udGVudHMKKyMgICAgICAgICAgICAgeS9jIGhhcyBkaXJ0eSBmaWxlIGZyb20gYmVmb3JlIG1lcmdlCisKK3Rlc3Rfc2V0dXBfMTFlICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDExZSAmJgorCSgKKwkJY2QgMTFlICYmCisKKwkJbWtkaXIgeiB4ICYmCisJCWVjaG8gYSA+ei9hICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+eC9jICYmCisJCWVjaG8gZCA+eC9kICYmCisJCWdpdCBhZGQgeiB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHovIHkvICYmCisJCWVjaG8gZGlmZmVyZW50ID55L2MgJiYKKwkJbWtkaXIgdyAmJgorCQlnaXQgbXYgeC9jIHcvICYmCisJCWdpdCBhZGQgeS9jICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB4L2Mgei8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMWU6IEF2b2lkIGRlbGV0aW5nIG5vdC11cHRvZGF0ZSB3aXRoIGRpciByZW5hbWUvcmVuYW1lKDF0bzIpL2FkZCcgJworCXRlc3Rfc2V0dXBfMTFlICYmCisJKAorCQljZCAxMWUgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisJCWVjaG8gbW9kcyA+PnkvYyAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKSIgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCB5L2MiIG91dCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDcgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisKKwkJZWNobyBkaWZmZXJlbnQgPmV4cGVjdGVkICYmCisJCWVjaG8gbW9kcyA+PmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIHkvYyAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp5L2EgOjA6eS9iIDowOngvZCA6MTp4L2MgOjI6dy9jIDoyOnkvYyA6Mzp5L2MgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYSAgTzp6L2IgIE86eC9kICBPOngvYyAgTzp4L2MgIEE6eS9jICBPOngvYyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJIyBTZWUgaWYgeS9jfm1lcmdlZCBoYXMgZXhwZWN0ZWQgY29udGVudHM7IHJlcXVpcmVzIG1hbnVhbGx5CisJCSMgZG9pbmcgdGhlIGV4cGVjdGVkIGZpbGUgbWVyZ2UKKwkJZ2l0IGNhdC1maWxlIC1wIEE6eS9jID5jMSAmJgorCQlnaXQgY2F0LWZpbGUgLXAgQjp6L2MgPmMyICYmCisJCT5lbXB0eSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSBcCisJCQktTCAiSEVBRCIgXAorCQkJLUwgIiIgXAorCQkJLUwgIkJeMCIgXAorCQkJYzEgZW1wdHkgYzIgJiYKKwkJdGVzdF9jbXAgYzEgeS9jfm1lcmdlZAorCSkKKycKKworIyBUZXN0Y2FzZSAxMWYsIEF2b2lkIGRlbGV0aW5nIG5vdC11cC10by1kYXRlIHcvIGRpciByZW5hbWUvcmVuYW1lKDJ0bzEpCisjICAgQ29tbWl0IE86IHove2EsYn0sICAgICAgICB4L3tjXzEsZF8yfQorIyAgIENvbW1pdCBBOiB5L3thLGIsd2hhbV8xfSwgeC9kXzIsIGV4Y2VwdCB5L3doYW0gaGFzIHVuY29tbWl0dGVkIG1vZHMKKyMgICBDb21taXQgQjogei97YSxiLHdoYW1fMn0sIHgvY18xCisjICAgRXhwZWN0ZWQ6IEZhaWxlZCBNZXJnZTsgeS97YSxifSArIHVudHJhY2tlZCB5L3t3aGFtfm1lcmdlZH0gKworIyAgICAgICAgICAgICB5L3doYW0gd2l0aCBkaXJ0eSBjaGFuZ2VzIGZyb20gYmVmb3JlIG1lcmdlICsKKyMgICAgICAgICAgICAgQ09ORkxJQ1QocmVuYW1lL3JlbmFtZSkgeC9jIHZzIHgvZCAtPiB5L3doYW0KKyMgICAgICAgICAgICAgRVJST1JfTVNHKFJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCB5L3doYW0pCisKK3Rlc3Rfc2V0dXBfMTFmICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDExZiAmJgorCSgKKwkJY2QgMTFmICYmCisKKwkJbWtkaXIgeiB4ICYmCisJCWVjaG8gYSA+ei9hICYmCisJCWVjaG8gYiA+ei9iICYmCisJCXRlc3Rfc2VxIDEgMTAgPngvYyAmJgorCQllY2hvIGQgPngvZCAmJgorCQlnaXQgYWRkIHogeCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6LyB5LyAmJgorCQlnaXQgbXYgeC9jIHkvd2hhbSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgeC9kIHovd2hhbSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExZjogQXZvaWQgZGVsZXRpbmcgbm90LXVwdG9kYXRlIHdpdGggZGlyIHJlbmFtZS9yZW5hbWUoMnRvMSknICcKKwl0ZXN0X3NldHVwXzExZiAmJgorCSgKKwkJY2QgMTFmICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCQllY2hvIGltcG9ydGFudCA+Pnkvd2hhbSAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKSIgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCB5L3doYW0iIG91dCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisKKwkJdGVzdF9zZXEgMSAxMCA+ZXhwZWN0ZWQgJiYKKwkJZWNobyBpbXBvcnRhbnQgPj5leHBlY3RlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCB5L3doYW0gJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDoxOnkvd2hhbSAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp5L2EgOjA6eS9iIDoyOnkvd2hhbSA6Mzp5L3doYW0gJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYSAgTzp6L2IgIE86eC9jICAgICBPOngvZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJIyBUZXN0IHRoYXQgdGhlIHR3by13YXkgbWVyZ2UgaW4geS93aGFtfm1lcmdlZCBpcyBhcyBleHBlY3RlZAorCQlnaXQgY2F0LWZpbGUgLXAgOjI6eS93aGFtID5leHBlY3QgJiYKKwkJZ2l0IGNhdC1maWxlIC1wIDozOnkvd2hhbSA+b3RoZXIgJiYKKwkJPmVtcHR5ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIFwKKwkJCS1MICJIRUFEIiBcCisJCQktTCAiIiBcCisJCQktTCAiQl4wIiBcCisJCQlleHBlY3QgZW1wdHkgb3RoZXIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHkvd2hhbX5tZXJnZWQKKwkpCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTRUNUSU9OIDEyOiBFdmVyeXRoaW5nIGVsc2UKKyMKKyMgVGVzdHMgc3VnZ2VzdGVkIGJ5IG90aGVycy4gIFRlc3RzIGFkZGVkIGFmdGVyIGltcGxlbWVudGF0aW9uIGNvbXBsZXRlZAorIyBhbmQgc3VibWl0dGVkLiAgR3JhYiBiYWcuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUZXN0Y2FzZSAxMmEsIE1vdmluZyBvbmUgZGlyZWN0b3J5IGhpZXJhcmNoeSBpbnRvIGFub3RoZXIKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZSA5YSkKKyMgICBDb21taXQgTzogbm9kZTEve2xlYWYxLGxlYWYyfSwgbm9kZTIve2xlYWYzLGxlYWY0fQorIyAgIENvbW1pdCBBOiBub2RlMS97bGVhZjEsbGVhZjIsbm9kZTIve2xlYWYzLGxlYWY0fX0KKyMgICBDb21taXQgQjogbm9kZTEve2xlYWYxLGxlYWYyLGxlYWY1fSwgbm9kZTIve2xlYWYzLGxlYWY0LGxlYWY2fQorIyAgIEV4cGVjdGVkOiBub2RlMS97bGVhZjEsbGVhZjIsbGVhZjUsbm9kZTIve2xlYWYzLGxlYWY0LGxlYWY2fX0KKwordGVzdF9zZXR1cF8xMmEgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTJhICYmCisJKAorCQljZCAxMmEgJiYKKworCQlta2RpciAtcCBub2RlMSBub2RlMiAmJgorCQllY2hvIGxlYWYxID5ub2RlMS9sZWFmMSAmJgorCQllY2hvIGxlYWYyID5ub2RlMS9sZWFmMiAmJgorCQllY2hvIGxlYWYzID5ub2RlMi9sZWFmMyAmJgorCQllY2hvIGxlYWY0ID5ub2RlMi9sZWFmNCAmJgorCQlnaXQgYWRkIG5vZGUxIG5vZGUyICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IG5vZGUyLyBub2RlMS8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZWNobyBsZWFmNSA+bm9kZTEvbGVhZjUgJiYKKwkJZWNobyBsZWFmNiA+bm9kZTIvbGVhZjYgJiYKKwkJZ2l0IGFkZCBub2RlMSBub2RlMiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEyYTogTW92aW5nIG9uZSBkaXJlY3RvcnkgaGllcmFyY2h5IGludG8gYW5vdGhlcicgJworCXRlc3Rfc2V0dXBfMTJhICYmCisJKAorCQljZCAxMmEgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJSEVBRDpub2RlMS9sZWFmMSBIRUFEOm5vZGUxL2xlYWYyIEhFQUQ6bm9kZTEvbGVhZjUgXAorCQkJSEVBRDpub2RlMS9ub2RlMi9sZWFmMyBcCisJCQlIRUFEOm5vZGUxL25vZGUyL2xlYWY0IFwKKwkJCUhFQUQ6bm9kZTEvbm9kZTIvbGVhZjYgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86bm9kZTEvbGVhZjEgICAgTzpub2RlMS9sZWFmMiAgICBCOm5vZGUxL2xlYWY1IFwKKwkJCU86bm9kZTIvbGVhZjMgXAorCQkJTzpub2RlMi9sZWFmNCBcCisJCQlCOm5vZGUyL2xlYWY2ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgMTJiLCBNb3ZpbmcgdHdvIGRpcmVjdG9yeSBoaWVyYXJjaGllcyBpbnRvIGVhY2ggb3RoZXIKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZXMgMWMgYW5kIDEyYykKKyMgICBDb21taXQgTzogbm9kZTEve2xlYWYxLCBsZWFmMn0sIG5vZGUyL3tsZWFmMywgbGVhZjR9CisjICAgQ29tbWl0IEE6IG5vZGUxL3tsZWFmMSwgbGVhZjIsIG5vZGUyL3tsZWFmMywgbGVhZjR9fQorIyAgIENvbW1pdCBCOiBub2RlMi97bGVhZjMsIGxlYWY0LCBub2RlMS97bGVhZjEsIGxlYWYyfX0KKyMgICBFeHBlY3RlZDogbm9kZTEvbm9kZTIvbm9kZTEve2xlYWYxLCBsZWFmMn0sCisjICAgICAgICAgICAgIG5vZGUyL25vZGUxL25vZGUyL3tsZWFmMywgbGVhZjR9CisjICAgTk9URTogV2l0aG91dCBkaXJlY3RvcnkgcmVuYW1lcywgd2Ugd291bGQgZXhwZWN0CisjICAgICAgICAgICAgICAgICAgIG5vZGUyL25vZGUxL3tsZWFmMSwgbGVhZjJ9LAorIyAgICAgICAgICAgICAgICAgICBub2RlMS9ub2RlMi97bGVhZjMsIGxlYWY0fQorIyAgICAgICAgIHdpdGggZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24sIHdlIG5vdGUgdGhhdAorIyAgICAgICAgICAgICBjb21taXQgQSByZW5hbWVzIG5vZGUyLyAtPiBub2RlMS9ub2RlMi8KKyMgICAgICAgICAgICAgY29tbWl0IEIgcmVuYW1lcyBub2RlMS8gLT4gbm9kZTIvbm9kZTEvCisjICAgICAgICAgdGhlcmVmb3JlLCBhcHBseWluZyB0aG9zZSBkaXJlY3RvcnkgcmVuYW1lcyB0byB0aGUgaW5pdGlhbCByZXN1bHQKKyMgICAgICAgICAobWFraW5nIGFsbCBmb3VyIHBhdGhzIGV4cGVyaWVuY2UgYSB0cmFuc2l0aXZlIHJlbmFtaW5nKSwgeWllbGRzCisjICAgICAgICAgdGhlIGV4cGVjdGVkIHJlc3VsdC4KKyMKKyMgICAgICAgICBZb3UgbWF5IGFzaywgaXMgaXQgd2VpcmQgdG8gaGF2ZSB0d28gZGlyZWN0b3JpZXMgcmVuYW1lIGVhY2ggb3RoZXI/CisjICAgICAgICAgVG8gd2hpY2gsIEkgY2FuIGRvIG5vIG1vcmUgdGhhbiBzaHJ1ZyBteSBzaG91bGRlcnMgYW5kIHNheSB0aGF0CisjICAgICAgICAgZXZlbiBzaW1wbGUgcnVsZXMgZ2l2ZSB3ZWlyZCByZXN1bHRzIHdoZW4gZ2l2ZW4gd2VpcmQgaW5wdXRzLgorCit0ZXN0X3NldHVwXzEyYiAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxMmIgJiYKKwkoCisJCWNkIDEyYiAmJgorCisJCW1rZGlyIC1wIG5vZGUxIG5vZGUyICYmCisJCWVjaG8gbGVhZjEgPm5vZGUxL2xlYWYxICYmCisJCWVjaG8gbGVhZjIgPm5vZGUxL2xlYWYyICYmCisJCWVjaG8gbGVhZjMgPm5vZGUyL2xlYWYzICYmCisJCWVjaG8gbGVhZjQgPm5vZGUyL2xlYWY0ICYmCisJCWdpdCBhZGQgbm9kZTEgbm9kZTIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgbm9kZTIvIG5vZGUxLyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgbm9kZTEvIG5vZGUyLyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEyYjogTW92aW5nIHR3byBkaXJlY3RvcnkgaGllcmFyY2hpZXMgaW50byBlYWNoIG90aGVyJyAnCisJdGVzdF9zZXR1cF8xMmIgJiYKKwkoCisJCWNkIDEyYiAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOm5vZGUxL25vZGUyL25vZGUxL2xlYWYxIFwKKwkJCUhFQUQ6bm9kZTEvbm9kZTIvbm9kZTEvbGVhZjIgXAorCQkJSEVBRDpub2RlMi9ub2RlMS9ub2RlMi9sZWFmMyBcCisJCQlIRUFEOm5vZGUyL25vZGUxL25vZGUyL2xlYWY0ICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOm5vZGUxL2xlYWYxIFwKKwkJCU86bm9kZTEvbGVhZjIgXAorCQkJTzpub2RlMi9sZWFmMyBcCisJCQlPOm5vZGUyL2xlYWY0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgMTJjLCBNb3ZpbmcgdHdvIGRpcmVjdG9yeSBoaWVyYXJjaGllcyBpbnRvIGVhY2ggb3RoZXIgdy8gY29udGVudCBtZXJnZQorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlIDEyYikKKyMgICBDb21taXQgTzogbm9kZTEveyAgICAgICBsZWFmMV8xLCBsZWFmMl8xfSwgbm9kZTIve2xlYWYzXzEsIGxlYWY0XzF9CisjICAgQ29tbWl0IEE6IG5vZGUxL3sgICAgICAgbGVhZjFfMiwgbGVhZjJfMiwgIG5vZGUyL3tsZWFmM18yLCBsZWFmNF8yfX0KKyMgICBDb21taXQgQjogbm9kZTIve25vZGUxL3tsZWFmMV8zLCBsZWFmMl8zfSwgICAgICAgIGxlYWYzXzMsIGxlYWY0XzN9CisjICAgRXhwZWN0ZWQ6IENvbnRlbnQgbWVyZ2UgY29uZmxpY3RzIGZvciBlYWNoIG9mOgorIyAgICAgICAgICAgICAgIG5vZGUxL25vZGUyL25vZGUxL3tsZWFmMSwgbGVhZjJ9LAorIyAgICAgICAgICAgICAgIG5vZGUyL25vZGUxL25vZGUyL3tsZWFmMywgbGVhZjR9CisjICAgTk9URTogVGhpcyBpcyAqZXhhY3RseSogbGlrZSAxMmMsIGV4Y2VwdCB0aGF0IGV2ZXJ5IHBhdGggaXMgbW9kaWZpZWQgb24KKyMgICAgICAgICBlYWNoIHNpZGUgb2YgdGhlIG1lcmdlLgorCit0ZXN0X3NldHVwXzEyYyAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxMmMgJiYKKwkoCisJCWNkIDEyYyAmJgorCisJCW1rZGlyIC1wIG5vZGUxIG5vZGUyICYmCisJCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxubGVhZjFcbiIgPm5vZGUxL2xlYWYxICYmCisJCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxubGVhZjJcbiIgPm5vZGUxL2xlYWYyICYmCisJCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxubGVhZjNcbiIgPm5vZGUyL2xlYWYzICYmCisJCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxubGVhZjRcbiIgPm5vZGUyL2xlYWY0ICYmCisJCWdpdCBhZGQgbm9kZTEgbm9kZTIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgbm9kZTIvIG5vZGUxLyAmJgorCQlmb3IgaSBpbiBgZ2l0IGxzLWZpbGVzYDsgZG8gZWNobyBzaWRlIEEgPj4kaTsgZG9uZSAmJgorCQlnaXQgYWRkIC11ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiBub2RlMS8gbm9kZTIvICYmCisJCWZvciBpIGluIGBnaXQgbHMtZmlsZXNgOyBkbyBlY2hvIHNpZGUgQiA+PiRpOyBkb25lICYmCisJCWdpdCBhZGQgLXUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMmM6IE1vdmluZyBvbmUgZGlyZWN0b3J5IGhpZXJhcmNoeSBpbnRvIGFub3RoZXIgdy8gY29udGVudCBtZXJnZScgJworCXRlc3Rfc2V0dXBfMTJjICYmCisJKAorCQljZCAxMmMgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMTIgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCToxOm5vZGUxL25vZGUyL25vZGUxL2xlYWYxIFwKKwkJCToxOm5vZGUxL25vZGUyL25vZGUxL2xlYWYyIFwKKwkJCToxOm5vZGUyL25vZGUxL25vZGUyL2xlYWYzIFwKKwkJCToxOm5vZGUyL25vZGUxL25vZGUyL2xlYWY0IFwKKwkJCToyOm5vZGUxL25vZGUyL25vZGUxL2xlYWYxIFwKKwkJCToyOm5vZGUxL25vZGUyL25vZGUxL2xlYWYyIFwKKwkJCToyOm5vZGUyL25vZGUxL25vZGUyL2xlYWYzIFwKKwkJCToyOm5vZGUyL25vZGUxL25vZGUyL2xlYWY0IFwKKwkJCTozOm5vZGUxL25vZGUyL25vZGUxL2xlYWYxIFwKKwkJCTozOm5vZGUxL25vZGUyL25vZGUxL2xlYWYyIFwKKwkJCTozOm5vZGUyL25vZGUxL25vZGUyL2xlYWYzIFwKKwkJCTozOm5vZGUyL25vZGUxL25vZGUyL2xlYWY0ICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOm5vZGUxL2xlYWYxIFwKKwkJCU86bm9kZTEvbGVhZjIgXAorCQkJTzpub2RlMi9sZWFmMyBcCisJCQlPOm5vZGUyL2xlYWY0IFwKKwkJCUE6bm9kZTEvbGVhZjEgXAorCQkJQTpub2RlMS9sZWFmMiBcCisJCQlBOm5vZGUxL25vZGUyL2xlYWYzIFwKKwkJCUE6bm9kZTEvbm9kZTIvbGVhZjQgXAorCQkJQjpub2RlMi9ub2RlMS9sZWFmMSBcCisJCQlCOm5vZGUyL25vZGUxL2xlYWYyIFwKKwkJCUI6bm9kZTIvbGVhZjMgXAorCQkJQjpub2RlMi9sZWFmNCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIDEyZCwgUmVuYW1lL21lcmdlIG9mIHN1YmRpcmVjdG9yeSBpbnRvIHRoZSByb290CisjICAgQ29tbWl0IE86IGEvYi9zdWJkaXIvZm9vCisjICAgQ29tbWl0IEE6IHN1YmRpci9mb28KKyMgICBDb21taXQgQjogYS9iL3N1YmRpci9mb28sIGEvYi9iYXIKKyMgICBFeHBlY3RlZDogc3ViZGlyL2ZvbywgYmFyCisKK3Rlc3Rfc2V0dXBfMTJkICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEyZCAmJgorCSgKKwkJY2QgMTJkICYmCisKKwkJbWtkaXIgLXAgYS9iL3N1YmRpciAmJgorCQl0ZXN0X2NvbW1pdCBhL2Ivc3ViZGlyL2ZvbyAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJbWtkaXIgc3ViZGlyICYmCisJCWdpdCBtdiBhL2Ivc3ViZGlyL2Zvby50IHN1YmRpci9mb28udCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQl0ZXN0X2NvbW1pdCBhL2IvYmFyCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMmQ6IFJlbmFtZS9tZXJnZSBzdWJkaXIgaW50byB0aGUgcm9vdCwgdmFyaWFudCAxJyAnCisJdGVzdF9zZXR1cF8xMmQgJiYKKwkoCisJCWNkIDEyZCAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnN1YmRpci9mb28udCAgIEhFQUQ6YmFyLnQgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86YS9iL3N1YmRpci9mb28udCAgQjphL2IvYmFyLnQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCBiYXIudCA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgQjphL2IvYmFyLnQgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmEvYi9zdWJkaXIvZm9vLnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmEvYi9iYXIudCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhLyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiYXIudAorCSkKKycKKworIyBUZXN0Y2FzZSAxMmUsIFJlbmFtZS9tZXJnZSBvZiBzdWJkaXJlY3RvcnkgaW50byB0aGUgcm9vdAorIyAgIENvbW1pdCBPOiBhL2IvZm9vCisjICAgQ29tbWl0IEE6IGZvbworIyAgIENvbW1pdCBCOiBhL2IvZm9vLCBhL2IvYmFyCisjICAgRXhwZWN0ZWQ6IGZvbywgYmFyCisKK3Rlc3Rfc2V0dXBfMTJlICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEyZSAmJgorCSgKKwkJY2QgMTJlICYmCisKKwkJbWtkaXIgLXAgYS9iICYmCisJCXRlc3RfY29tbWl0IGEvYi9mb28gJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCW1rZGlyIHN1YmRpciAmJgorCQlnaXQgbXYgYS9iL2Zvby50IGZvby50ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCXRlc3RfY29tbWl0IGEvYi9iYXIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEyZTogUmVuYW1lL21lcmdlIHN1YmRpciBpbnRvIHRoZSByb290LCB2YXJpYW50IDInICcKKwl0ZXN0X3NldHVwXzEyZSAmJgorCSgKKwkJY2QgMTJlICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6Zm9vLnQgICBIRUFEOmJhci50ICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOmEvYi9mb28udCAgQjphL2IvYmFyLnQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCBiYXIudCA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgQjphL2IvYmFyLnQgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmEvYi9mb28udCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6YS9iL2Jhci50ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGEvICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGJhci50CisJKQorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU0VDVElPTiAxMzogQ2hlY2tpbmcgaW5mb3JtYXRpb25hbCBhbmQgY29uZmxpY3QgbWVzc2FnZXMKKyMKKyMgQSB5ZWFyIGFmdGVyIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGJlY2FtZSB0aGUgZGVmYXVsdCwgaXQgd2FzCisjIGluc3RlYWQgZGVjaWRlZCB0byByZXBvcnQgY29uZmxpY3RzIG9uIHRoZSBwYXRobmFtZSBvbiB0aGUgYmFzaXMgdGhhdAorIyBzb21lIHVzZXJzIG1heSBleHBlY3QgdGhlIG5ldyBmaWxlcyBhZGRlZCBvciBtb3ZlZCBpbnRvIGEgZGlyZWN0b3J5IHRvCisjIGJlIHVucmVsYXRlZCB0byBhbGwgdGhlIG90aGVyIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5LCBhbmQgdGh1cyB0aGF0CisjIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGlzIHVuZXhwZWN0ZWQuICBUZXN0IHRoYXQgdGhlIG1lc3NhZ2VzIHByaW50ZWQKKyMgbWF0Y2ggb3VyIGV4cGVjdGF0aW9uLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGVzdGNhc2UgMTNhLCBCYXNpYyBkaXJlY3RvcnkgcmVuYW1lIHdpdGggbmV3bHkgYWRkZWQgZmlsZXMKKyMgICBDb21taXQgTzogei97YixjfQorIyAgIENvbW1pdCBBOiB5L3tiLGN9CisjICAgQ29tbWl0IEI6IHove2IsYyxkLGUvZn0KKyMgICBFeHBlY3RlZDogeS97YixjLGQsZS9mfSwgd2l0aCBub3RpY2VzL2NvbmZsaWN0cyBmb3IgYm90aCB5L2QgYW5kIHkvZS9mCisKK3Rlc3Rfc2V0dXBfMTNhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEzYV8kMSAmJgorCSgKKwkJY2QgMTNhXyQxICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgeiB5ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gZCA+ei9kICYmCisJCW1rZGlyIHovZSAmJgorCQllY2hvIGYgPnovZS9mICYmCisJCWdpdCBhZGQgei9kIHovZS9mICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNhKGNvbmZsaWN0KTogbWVzc2FnZXMgZm9yIG5ld2x5IGFkZGVkIGZpbGVzJyAnCisJdGVzdF9zZXR1cF8xM2EgY29uZmxpY3QgJiYKKwkoCisJCWNkIDEzYV9jb25mbGljdCAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisKKwkJdGVzdF9pMThuZ3JlcCBDT05GTElDVC4uZmlsZS5sb2NhdGlvbi4qei9lL2YuYWRkZWQuaW4uQl4wLip5L2UvZiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCBDT05GTElDVC4uZmlsZS5sb2NhdGlvbi4qei9kLmFkZGVkLmluLkJeMC4qeS9kIG91dCAmJgorCisJCWdpdCBscy1maWxlcyA+cGF0aHMgJiYKKwkJISBncmVwIHovIHBhdGhzICYmCisJCWdyZXAgInkvW2RlXSIgcGF0aHMgJiYKKworCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB6L2QgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgICAgeS9kICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHovZS9mICYmCisJCXRlc3RfcGF0aF9pc19maWxlICAgIHkvZS9mCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2EoaW5mbyk6IG1lc3NhZ2VzIGZvciBuZXdseSBhZGRlZCBmaWxlcycgJworCXRlc3Rfc2V0dXBfMTNhIGluZm8gJiYKKwkoCisJCWNkIDEzYV9pbmZvICYmCisKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKworCQl0ZXN0X2kxOG5ncmVwIFBhdGgudXBkYXRlZDouKnovZS9mLmFkZGVkLmluLkJeMC4qeS9lL2Ygb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgUGF0aC51cGRhdGVkOi4qei9kLmFkZGVkLmluLkJeMC4qeS9kIG91dCAmJgorCisJCWdpdCBscy1maWxlcyA+cGF0aHMgJiYKKwkJISBncmVwIHovIHBhdGhzICYmCisJCWdyZXAgInkvW2RlXSIgcGF0aHMgJiYKKworCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB6L2QgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgICAgeS9kICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHovZS9mICYmCisJCXRlc3RfcGF0aF9pc19maWxlICAgIHkvZS9mCisJKQorJworCisjIFRlc3RjYXNlIDEzYiwgVHJhbnNpdGl2ZSByZW5hbWUgd2l0aCBjb25mbGljdGVkIGNvbnRlbnQgbWVyZ2UgYW5kIGRlZmF1bHQKKyMgICAgICAgICAgICAgICAiY29uZmxpY3QiIHNldHRpbmcKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZSAxYywgOWIpCisjICAgQ29tbWl0IE86IHove2IsY30sICAgeC9kXzEKKyMgICBDb21taXQgQTogeS97YixjfSwgICB4L2RfMgorIyAgIENvbW1pdCBCOiB6L3tiLGMsZF8zfQorIyAgIEV4cGVjdGVkOiB5L3tiLGMsZF9tZXJnZWR9LCB3aXRoIHR3byBjb25mbGljdCBtZXNzYWdlcyBmb3IgeS9kLAorIyAgICAgICAgICAgICBvbmUgYWJvdXQgY29udGVudCwgYW5kIG9uZSBhYm91dCBmaWxlIGxvY2F0aW9uCisKK3Rlc3Rfc2V0dXBfMTNiICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEzYl8kMSAmJgorCSgKKwkJY2QgMTNiXyQxICYmCisKKwkJbWtkaXIgeCAmJgorCQlta2RpciB6ICYmCisJCXRlc3Rfc2VxIDEgMTAgPngvZCAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlnaXQgYWRkIHggeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJZWNobyAxMSA+PngvZCAmJgorCQlnaXQgYWRkIHgvZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQllY2hvIGVsZXZlbiA+PngvZCAmJgorCQlnaXQgbXYgeC9kIHovZCAmJgorCQlnaXQgYWRkIHovZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYihjb25mbGljdCk6IG1lc3NhZ2VzIGZvciB0cmFuc2l0aXZlIHJlbmFtZSB3aXRoIGNvbmZsaWN0ZWQgY29udGVudCcgJworCXRlc3Rfc2V0dXBfMTNiIGNvbmZsaWN0ICYmCisJKAorCQljZCAxM2JfY29uZmxpY3QgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfaTE4bmdyZXAgQ09ORkxJQ1QuKmNvbnRlbnQuKk1lcmdlLmNvbmZsaWN0LmluLnkvZCBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCBDT05GTElDVC4uZmlsZS5sb2NhdGlvbi4qeC9kLnJlbmFtZWQudG8uei9kLiptb3ZlZC50by55L2Qgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzID5wYXRocyAmJgorCQkhIGdyZXAgei8gcGF0aHMgJiYKKwkJZ3JlcCAieS9kIiBwYXRocyAmJgorCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHovZCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAgICB5L2QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYihpbmZvKTogbWVzc2FnZXMgZm9yIHRyYW5zaXRpdmUgcmVuYW1lIHdpdGggY29uZmxpY3RlZCBjb250ZW50JyAnCisJdGVzdF9zZXR1cF8xM2IgaW5mbyAmJgorCSgKKwkJY2QgMTNiX2luZm8gJiYKKworCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfaTE4bmdyZXAgQ09ORkxJQ1QuKmNvbnRlbnQuKk1lcmdlLmNvbmZsaWN0LmluLnkvZCBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCBQYXRoLnVwZGF0ZWQ6Lip4L2QucmVuYW1lZC50by56L2QuaW4uQl4wLiptb3ZpbmcuaXQudG8ueS9kIG91dCAmJgorCisJCWdpdCBscy1maWxlcyA+cGF0aHMgJiYKKwkJISBncmVwIHovIHBhdGhzICYmCisJCWdyZXAgInkvZCIgcGF0aHMgJiYKKworCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB6L2QgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgICAgeS9kCisJKQorJworCisjIFRlc3RjYXNlIDEzYywgUmVuYW1lL3JlbmFtZSgxdG8xKSBkdWUgdG8gZGlyZWN0b3J5IHJlbmFtZQorIyAgIENvbW1pdCBPOiB6L3tiLGN9LCAgIHgve2QsZX0KKyMgICBDb21taXQgQTogeS97YixjLGR9LCB4L2UKKyMgICBDb21taXQgQjogei97YixjLGR9LCB4L2UKKyMgICBFeHBlY3RlZDogeS97YixjLGR9LCB3aXRoIGluZm8gb3IgY29uZmxpY3QgbWVzc2FnZXMgZm9yIGQgKAorIyAgICAgICAgICAgICBBOiByZW5hbWVkIHgvZCAtPiB6L2Q7IEI6IHJlbmFtZWQgei8gLT4geS8gQU5EIHJlbmFtZWQgeC9kIHRvIHkvZAorIyAgICAgICAgICAgICBPbmUgY291bGQgYXJndWUgQSBoYWQgcGFydGlhbCBrbm93bGVkZ2Ugb2Ygd2hhdCB3YXMgZG9uZSB3aXRoCisjICAgICAgICAgICAgIGQgYW5kIEIgaGFkIGZ1bGwga25vd2xlZGdlLCBidXQgdGhhdCdzIGEgc2xpcHBlcnkgc2xvcGUgYXMKKyMgICAgICAgICAgICAgc2hvd24gaW4gdGVzdGNhc2UgMTNkLgorCit0ZXN0X3NldHVwXzEzYyAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxM2NfJDEgJiYKKwkoCisJCWNkIDEzY18kMSAmJgorCisJCW1rZGlyIHggJiYKKwkJbWtkaXIgeiAmJgorCQl0ZXN0X3NlcSAxIDEwID54L2QgJiYKKwkJZWNobyBlID54L2UgJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJZ2l0IGFkZCB4IHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgeiB5ICYmCisJCWdpdCBtdiB4L2QgeS8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHgvZCB6L2QgJiYKKwkJZ2l0IGFkZCB6L2QgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2MoY29uZmxpY3QpOiBtZXNzYWdlcyBmb3IgcmVuYW1lL3JlbmFtZSgxdG8xKSB2aWEgdHJhbnNpdGl2ZSByZW5hbWUnICcKKwl0ZXN0X3NldHVwXzEzYyBjb25mbGljdCAmJgorCSgKKwkJY2QgMTNjX2NvbmZsaWN0ICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKworCQl0ZXN0X2kxOG5ncmVwIENPTkZMSUNULi5maWxlLmxvY2F0aW9uLip4L2QucmVuYW1lZC50by56L2QuKm1vdmVkLnRvLnkvZCBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgPnBhdGhzICYmCisJCSEgZ3JlcCB6LyBwYXRocyAmJgorCQlncmVwICJ5L2QiIHBhdGhzICYmCisKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgei9kICYmCisJCXRlc3RfcGF0aF9pc19maWxlICAgIHkvZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNjKGluZm8pOiBtZXNzYWdlcyBmb3IgcmVuYW1lL3JlbmFtZSgxdG8xKSB2aWEgdHJhbnNpdGl2ZSByZW5hbWUnICcKKwl0ZXN0X3NldHVwXzEzYyBpbmZvICYmCisJKAorCQljZCAxM2NfaW5mbyAmJgorCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisKKwkJdGVzdF9pMThuZ3JlcCBQYXRoLnVwZGF0ZWQ6Lip4L2QucmVuYW1lZC50by56L2QuaW4uQl4wLiptb3ZpbmcuaXQudG8ueS9kIG91dCAmJgorCisJCWdpdCBscy1maWxlcyA+cGF0aHMgJiYKKwkJISBncmVwIHovIHBhdGhzICYmCisJCWdyZXAgInkvZCIgcGF0aHMgJiYKKworCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB6L2QgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgICAgeS9kCisJKQorJworCisjIFRlc3RjYXNlIDEzZCwgUmVuYW1lL3JlbmFtZSgxdG8xKSBkdWUgdG8gZGlyZWN0b3J5IHJlbmFtZSBvbiBib3RoIHNpZGVzCisjICAgQ29tbWl0IE86IGEve3oseX0sIGIveCwgICAgIGMvdworIyAgIENvbW1pdCBBOiBhL3osICAgICBiL3t5LHh9LCBkL3cKKyMgICBDb21taXQgQjogYS96LCAgICAgZC94LCAgICAgYy97eSx3fQorIyAgIEV4cGVjdGVkOiBhL3osIGQve3kseCx3fSB3aXRoIG5vIGZpbGUgbG9jYXRpb24gY29uZmxpY3QgZm9yIHgKKyMgICAgICAgICAgICAgRWFzeSBjYXNlczoKKyMgICAgICAgICAgICAgICAqIHogaXMgYWx3YXlzIGluIGE7IHNvIGl0IHN0YXlzIGluIGEuCisjICAgICAgICAgICAgICAgKiB4IHN0YXJ0cyBpbiBiLCBvbmx5IG1vZGlmaWVkIG9uIG9uZSBzaWRlIHRvIG1vdmUgaW50byBkLworIyAgICAgICAgICAgICAgICogdyBzdGFydHMgaW4gYywgb25seSBtb2RpZmllZCBvbiBvbmUgc2lkZSB0byBtb3ZlIGludG8gZC8KKyMgICAgICAgICAgICAgSGFyZCBjYXNlOgorIyAgICAgICAgICAgICAgICogQSByZW5hbWVzIGEveSB0byBiL3ksIGFuZCBCIHJlbmFtZXMgYi8tPmQvID0+IGEveSAtPiBkL3kKKyMgICAgICAgICAgICAgICAqIEIgcmVuYW1lcyBhL3kgdG8gYy95LCBhbmQgQSByZW5hbWVzIGMvLT5kLyA9PiBhL3kgLT4gZC95CisjICAgICAgICAgICAgICAgTm8gY29uZmxpY3QgaW4gd2hlcmUgYS95IGVuZHMgdXAsIHNvIHB1dCBpdCBpbiBkL3kuCisKK3Rlc3Rfc2V0dXBfMTNkICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEzZF8kMSAmJgorCSgKKwkJY2QgMTNkXyQxICYmCisKKwkJbWtkaXIgYSAmJgorCQlta2RpciBiICYmCisJCW1rZGlyIGMgJiYKKwkJZWNobyB6ID5hL3ogJiYKKwkJZWNobyB5ID5hL3kgJiYKKwkJZWNobyB4ID5iL3ggJiYKKwkJZWNobyB3ID5jL3cgJiYKKwkJZ2l0IGFkZCBhIGIgYyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiBhL3kgYi8gJiYKKwkJZ2l0IG12IGMvIGQvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiBhL3kgYy8gJiYKKwkJZ2l0IG12IGIvIGQvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNkKGNvbmZsaWN0KTogbWVzc2FnZXMgZm9yIHJlbmFtZS9yZW5hbWUoMXRvMSkgdmlhIGR1YWwgdHJhbnNpdGl2ZSByZW5hbWUnICcKKwl0ZXN0X3NldHVwXzEzZCBjb25mbGljdCAmJgorCSgKKwkJY2QgMTNkX2NvbmZsaWN0ICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKworCQl0ZXN0X2kxOG5ncmVwIENPTkZMSUNULi5maWxlLmxvY2F0aW9uLiphL3kucmVuYW1lZC50by5iL3kuKm1vdmVkLnRvLmQveSBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCBDT05GTElDVC4uZmlsZS5sb2NhdGlvbi4qYS95LnJlbmFtZWQudG8uYy95Liptb3ZlZC50by5kL3kgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzID5wYXRocyAmJgorCQkhIGdyZXAgYi8gcGF0aHMgJiYKKwkJISBncmVwIGMvIHBhdGhzICYmCisJCWdyZXAgImQveSIgcGF0aHMgJiYKKworCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiL3kgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYy95ICYmCisJCXRlc3RfcGF0aF9pc19maWxlICAgIGQveQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNkKGluZm8pOiBtZXNzYWdlcyBmb3IgcmVuYW1lL3JlbmFtZSgxdG8xKSB2aWEgZHVhbCB0cmFuc2l0aXZlIHJlbmFtZScgJworCXRlc3Rfc2V0dXBfMTNkIGluZm8gJiYKKwkoCisJCWNkIDEzZF9pbmZvICYmCisKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKworCQl0ZXN0X2kxOG5ncmVwIFBhdGgudXBkYXRlZC4qYS95LnJlbmFtZWQudG8uYi95Liptb3ZpbmcuaXQudG8uZC95IG91dCAmJgorCQl0ZXN0X2kxOG5ncmVwIFBhdGgudXBkYXRlZC4qYS95LnJlbmFtZWQudG8uYy95Liptb3ZpbmcuaXQudG8uZC95IG91dCAmJgorCisJCWdpdCBscy1maWxlcyA+cGF0aHMgJiYKKwkJISBncmVwIGIvIHBhdGhzICYmCisJCSEgZ3JlcCBjLyBwYXRocyAmJgorCQlncmVwICJkL3kiIHBhdGhzICYmCisKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYi95ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGMveSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAgICBkL3kKKwkpCisnCisKKyMgVGVzdGNhc2UgMTNlLCBkaXJlY3RvcnkgcmVuYW1lIGluIHZpcnR1YWwgbWVyZ2UgYmFzZQorIworIyBUaGlzIHRlc3RjYXNlIGhhcyBhIHNsaWdodGx5IGRpZmZlcmVudCBzZXR1cCB0aGFuIGFsbCB0aGUgYWJvdmUgY2FzZXMsIGluCisjIG9yZGVyIHRvIGluY2x1ZGUgYSByZWN1cnNpdmUgY2FzZToKKyMKKyMgICAgICBBICAgQworIyAgICAgIG8gLSBvCisjICAgICAvIFwgLyBcCisjICBPIG8gICBYICAgPworIyAgICAgXCAvIFwgLworIyAgICAgIG8gICBvCisjICAgICAgQiAgIEQKKyMKKyMgICBDb21taXQgTzogYS97eix5fQorIyAgIENvbW1pdCBBOiBiL3t6LHl9CisjICAgQ29tbWl0IEI6IGEve3oseSx4fQorIyAgIENvbW1pdCBDOiBiL3t6LHkseH0KKyMgICBDb21taXQgRDogYi97eix5fSwgYS94CisjICAgRXhwZWN0ZWQ6IGIve3oseSx4fSAgKHNvcnQgb2Y7IHNlZSBiZWxvdyBmb3Igd2h5IHRoaXMgbWlnaHQgbm90IGJlIGV4cGVjdGVkKQorIworIyAgIE5PVEVTOiAnWCcgcmVwcmVzZW50cyBhIHZpcnR1YWwgbWVyZ2UgYmFzZS4gIFdpdGggdGhlIGRlZmF1bHQgb2YKKyMgICAgICAgICAgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24geWllbGRpbmcgY29uZmxpY3RzLCBtZXJnaW5nIEEgYW5kIEIKKyMgICAgICAgICAgcmVzdWx0cyBpbiBhIGNvbmZsaWN0IGNvbXBsYWluaW5nIGFib3V0IHdoZXRoZXIgJ3gnIHNob3VsZCBiZQorIyAgICAgICAgICB1bmRlciAnYS8nIG9yICdiLycuICBIb3dldmVyLCB3aGVuIGNyZWF0aW5nIHRoZSB2aXJ0dWFsIG1lcmdlCisjICAgICAgICAgIGJhc2UgJ1gnLCBzaW5jZSB2aXJ0dWFsIG1lcmdlIGJhc2VzIG5lZWQgdG8gYmUgd3JpdHRlbiBvdXQgYXMgYQorIyAgICAgICAgICB0cmVlLCB3ZSBjYW5ub3QgaGF2ZSBhIGNvbmZsaWN0LCBzbyBzb21lIHJlc29sdXRpb24gaGFzIHRvIGJlCisjICAgICAgICAgIHBpY2tlZC4KKyMKKyMgICAgICAgICAgSW4gY2hvb3NpbmcgdGhlIHJpZ2h0IHJlc29sdXRpb24sIGl0J3Mgd29ydGggbm90aW5nIGhlcmUgdGhhdAorIyAgICAgICAgICBjb21taXRzIEMgJiBEIGFyZSBtZXJnZXMgb2YgQSAmIEIgdGhhdCBjaG9vc2UgZGlmZmVyZW50CisjICAgICAgICAgIGxvY2F0aW9ucyBmb3IgJ3gnIChpLmUuIHRoZXkgcmVzb2x2ZSB0aGUgY29uZmxpY3QgZGlmZmVyZW50bHkpLAorIyAgICAgICAgICBhbmQgc28gaXQgd291bGQgYmUgbmljZSB3aGVuIG1lcmdpbmcgQyAmIEQgaWYgZ2l0IGNvdWxkIGRldGVjdAorIyAgICAgICAgICB0aGlzIGRpZmZlcmVuY2Ugb2Ygb3BpbmlvbiBhbmQgcmVwb3J0IGEgY29uZmxpY3QuICBCdXQgdGhlIG9ubHkKKyMgICAgICAgICAgd2F5IHRvIGRvIHNvIHRoYXQgSSBjYW4gdGhpbmsgb2Ygd291bGQgYmUgdG8gaGF2ZSB0aGUgdmlydHVhbAorIyAgICAgICAgICBtZXJnZSBiYXNlIHBsYWNlICd4JyBpbiBzb21lIGRpcmVjdG9yeSBvdGhlciB0aGFuIGVpdGhlciAnYS8nIG9yCisjICAgICAgICAgICdiLycsIHdoaWNoIHNlZW1zIGEgbGl0dGxlIHdlaXJkIC0tIGVzcGVjaWFsbHkgc2luY2UgaXQnZCByZXN1bHQKKyMgICAgICAgICAgaW4gYSByZW5hbWUvcmVuYW1lKDF0bzIpIGNvbmZsaWN0IHdpdGggYSBzb3VyY2UgcGF0aCB0aGF0IG5ldmVyCisjICAgICAgICAgIGV4aXN0ZWQgaW4gYW55IHZlcnNpb24uCisjCisjICAgICAgICAgIFNvLCBmb3Igbm93LCB3aGVuIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGlzIHNldCB0bworIyAgICAgICAgICAnY29uZmxpY3QnIGp1c3QgYXZvaWQgZG9pbmcgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gYXQgYWxsIGluCisjICAgICAgICAgIHRoZSByZWN1cnNpdmUgY2FzZS4gIFRoaXMgd2lsbCBub3QgYWxsb3cgdXMgdG8gZGV0ZWN0IGEgY29uZmxpY3QKKyMgICAgICAgICAgaW4gdGhlIG91dGVyIG1lcmdlIGZvciB0aGlzIHNwZWNpYWwga2luZCBvZiBzZXR1cCwgYnV0IGl0IGF0CisjICAgICAgICAgIGxlYXN0IGF2b2lkcyBoaXR0aW5nIGEgQlVHKCkuCisjCit0ZXN0X3NldHVwXzEzZSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxM2UgJiYKKwkoCisJCWNkIDEzZSAmJgorCisJCW1rZGlyIGEgJiYKKwkJZWNobyB6ID5hL3ogJiYKKwkJZWNobyB5ID5hL3kgJiYKKwkJZ2l0IGFkZCBhICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IGEvIGIvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8geCA+YS94ICYmCisJCWdpdCBhZGQgYSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIgJiYKKworCQlnaXQgYnJhbmNoIEMgQSAmJgorCQlnaXQgYnJhbmNoIEQgQiAmJgorCisJCWdpdCBjaGVja291dCBDICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPWNvbmZsaWN0IG1lcmdlIEIgJiYKKwkJZ2l0IGFkZCBiL3ggJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkMiICYmCisKKworCQlnaXQgY2hlY2tvdXQgRCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz1jb25mbGljdCBtZXJnZSBBICYmCisJCWdpdCBhZGQgYi94ICYmCisJCW1rZGlyIGEgJiYKKwkJZ2l0IG12IGIveCBhL3ggJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkQiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2U6IGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGluIHJlY3Vyc2l2ZSBjYXNlJyAnCisJdGVzdF9zZXR1cF8xM2UgJiYKKwkoCisJCWNkIDEzZSAmJgorCisJCWdpdCBjaGVja291dCAtLXF1aWV0IEReMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPWNvbmZsaWN0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBDXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfaTE4bmdyZXAgISBDT05GTElDVCBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAhIEJVRzogZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgISBjb3JlLmR1bXBlZCBlcnIgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCisJCWdpdCBscy1maWxlcyA+cGF0aHMgJiYKKwkJISBncmVwIGEveCBwYXRocyAmJgorCQlncmVwIGIveCBwYXRocworCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDQ0LW1lcmdlLXVucmVsYXRlZC1pbmRleC1jaGFuZ2VzLnNoIGIvdC90NjA0NC1tZXJnZS11bnJlbGF0ZWQtaW5kZXgtY2hhbmdlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZTM3NzllCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjA0NC1tZXJnZS11bnJlbGF0ZWQtaW5kZXgtY2hhbmdlcy5zaApAQCAtMCwwICsxLDIxNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Im1lcmdlcyB3aXRoIHVucmVsYXRlZCBpbmRleCBjaGFuZ2VzIgorCisuIC4vdGVzdC1saWIuc2gKKworIyBUZXN0Y2FzZSBmb3Igc29tZSBzaW1wbGUgbWVyZ2VzCisjICAgQQorIyAgIG8tLS0tLS0tbyBCCisjICAgIFwKKyMgICAgIFwtLS0tLW8gQworIyAgICAgIFwKKyMgICAgICAgXC0tLW8gRAorIyAgICAgICAgXAorIyAgICAgICAgIFwtbyBFCisjICAgICAgICAgIFwKKyMgICAgICAgICAgIG8gRgorIyAgIENvbW1pdCBBOiBzb21lIGZpbGUgYQorIyAgIENvbW1pdCBCOiBhZGRzIGZpbGUgYiwgbW9kaWZpZXMgZW5kIG9mIGEKKyMgICBDb21taXQgQzogYWRkcyBmaWxlIGMKKyMgICBDb21taXQgRDogYWRkcyBmaWxlIGQsIG1vZGlmaWVzIGJlZ2lubmluZyBvZiBhCisjICAgQ29tbWl0IEU6IHJlbmFtZXMgYS0+c3ViZGlyL2EsIGFkZHMgc3ViZGlyL2UKKyMgICBDb21taXQgRjogZW1wdHkgY29tbWl0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRyaXZpYWwgbWVyZ2VzJyAnCisJdGVzdF9zZXEgMSAxMCA+YSAmJgorCWdpdCBhZGQgYSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEEgJiYKKworCWdpdCBicmFuY2ggQSAmJgorCWdpdCBicmFuY2ggQiAmJgorCWdpdCBicmFuY2ggQyAmJgorCWdpdCBicmFuY2ggRCAmJgorCWdpdCBicmFuY2ggRSAmJgorCWdpdCBicmFuY2ggRiAmJgorCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwllY2hvIGIgPmIgJiYKKwllY2hvIDExID4+YSAmJgorCWdpdCBhZGQgYSBiICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gQiAmJgorCisJZ2l0IGNoZWNrb3V0IEMgJiYKKwllY2hvIGMgPmMgJiYKKwlnaXQgYWRkIGMgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBDICYmCisKKwlnaXQgY2hlY2tvdXQgRCAmJgorCXRlc3Rfc2VxIDIgMTAgPmEgJiYKKwllY2hvIGQgPmQgJiYKKwlnaXQgYWRkIGEgZCAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEQgJiYKKworCWdpdCBjaGVja291dCBFICYmCisJbWtkaXIgc3ViZGlyICYmCisJZ2l0IG12IGEgc3ViZGlyL2EgJiYKKwllY2hvIGUgPnN1YmRpci9lICYmCisJZ2l0IGFkZCBzdWJkaXIgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBFICYmCisKKwlnaXQgY2hlY2tvdXQgRiAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZiB1cGRhdGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJdG91Y2ggcmFuZG9tX2ZpbGUgJiYgZ2l0IGFkZCByYW5kb21fZmlsZSAmJgorCisJZ2l0IG1lcmdlIEVeMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOnJhbmRvbV9maWxlICYmCisJdGVzdCAiJChnaXQgZGlmZiAtLW5hbWUtb25seSAtLWNhY2hlZCBFKSIgPSAicmFuZG9tX2ZpbGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZmIHVwZGF0ZSwgaW1wb3J0YW50IGZpbGUgbW9kaWZpZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJbWtkaXIgc3ViZGlyICYmCisJdG91Y2ggc3ViZGlyL2UgJiYKKwlnaXQgYWRkIHN1YmRpci9lICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRV4wICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc29sdmUsIHRyaXZpYWwnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJdG91Y2ggcmFuZG9tX2ZpbGUgJiYgZ2l0IGFkZCByYW5kb21fZmlsZSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlc29sdmUgQ14wICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc29sdmUsIG5vbi10cml2aWFsJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBCXjAgJiYKKworCXRvdWNoIHJhbmRvbV9maWxlICYmIGdpdCBhZGQgcmFuZG9tX2ZpbGUgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZXNvbHZlIEReMCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWN1cnNpdmUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJdG91Y2ggcmFuZG9tX2ZpbGUgJiYgZ2l0IGFkZCByYW5kb21fZmlsZSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBDXjAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjdXJzaXZlLCB3aGVuIG1lcmdlIGJyYW5jaCBtYXRjaGVzIG1lcmdlIGJhc2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJdG91Y2ggcmFuZG9tX2ZpbGUgJiYgZ2l0IGFkZCByYW5kb21fZmlsZSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBGXjAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlLCB3aGVuIGluZGV4PT1oZWFkIGJ1dCBoZWFkIT1IRUFEJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBDXjAgJiYKKworCSMgTWFrZSBpbmRleCBtYXRjaCBCCisJZ2l0IGRpZmYgQyBCIC0tIHwgZ2l0IGFwcGx5IC0tY2FjaGVkICYmCisJIyBNZXJnZSBCICYgRiwgd2l0aCBCIGFzICJoZWFkIgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgQSAtLSBCIEYgPiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJBbHJlYWR5IHVwIHRvIGRhdGUiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWN1cnNpdmUsIHdoZW4gZmlsZSBoYXMgc3RhZ2VkIGNoYW5nZXMgbm90IG1hdGNoaW5nIEhFQUQgbm9yIHdoYXQgYSBtZXJnZSB3b3VsZCBnaXZlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBCXjAgJiYKKworCW1rZGlyIHN1YmRpciAmJgorCXRlc3Rfc2VxIDEgMTAgPnN1YmRpci9hICYmCisJZ2l0IGFkZCBzdWJkaXIvYSAmJgorCisJIyBXZSBoYXZlIHN0YWdlZCBjaGFuZ2VzOyBtZXJnZSBzaG91bGQgZXJyb3Igb3V0CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBFXjAgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWN1cnNpdmUsIHdoZW4gZmlsZSBoYXMgc3RhZ2VkIGNoYW5nZXMgbWF0Y2hpbmcgd2hhdCBhIG1lcmdlIHdvdWxkIGdpdmUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJbWtkaXIgc3ViZGlyICYmCisJdGVzdF9zZXEgMSAxMSA+c3ViZGlyL2EgJiYKKwlnaXQgYWRkIHN1YmRpci9hICYmCisKKwkjIFdlIGhhdmUgc3RhZ2VkIGNoYW5nZXM7IG1lcmdlIHNob3VsZCBlcnJvciBvdXQKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEVeMCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29jdG9wdXMsIHVucmVsYXRlZCBmaWxlIHRvdWNoZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJdG91Y2ggcmFuZG9tX2ZpbGUgJiYgZ2l0IGFkZCByYW5kb21fZmlsZSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIENeMCBEXjAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb2N0b3B1cywgcmVsYXRlZCBmaWxlIHJlbW92ZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJZ2l0IHJtIGIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBDXjAgRF4wICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29jdG9wdXMsIHJlbGF0ZWQgZmlsZSBtb2RpZmllZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwllY2hvIDEyID4+YSAmJiBnaXQgYWRkIGEgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBDXjAgRF4wICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291cnMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJdG91Y2ggcmFuZG9tX2ZpbGUgJiYgZ2l0IGFkZCByYW5kb21fZmlsZSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIG91cnMgQ14wICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YnRyZWUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJdG91Y2ggcmFuZG9tX2ZpbGUgJiYgZ2l0IGFkZCByYW5kb21fZmlsZSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHN1YnRyZWUgRV4wICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjA0NS1tZXJnZS1yZW5hbWUtZGVsZXRlLnNoIGIvdC90NjA0NS1tZXJnZS1yZW5hbWUtZGVsZXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkMzM1NzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDQ1LW1lcmdlLXJlbmFtZS1kZWxldGUuc2gKQEAgLTAsMCArMSwyMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J01lcmdlLXJlY3Vyc2l2ZSByZW5hbWUvZGVsZXRlIGNvbmZsaWN0IG1lc3NhZ2UnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lL2RlbGV0ZScgJworCWVjaG8gZm9vID5BICYmCisJZ2l0IGFkZCBBICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIgJiYKKworCWdpdCBjaGVja291dCAtYiByZW5hbWUgJiYKKwlnaXQgbXYgQSBCICYmCisJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBybSBBICYmCisJZ2l0IGNvbW1pdCAtbSAiZGVsZXRlIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIHJlbmFtZSA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9kZWxldGUpOiBBIGRlbGV0ZWQgaW4gSEVBRCBhbmQgcmVuYW1lZCB0byBCIGluIHJlbmFtZS4gVmVyc2lvbiByZW5hbWUgb2YgQiBsZWZ0IGluIHRyZWUuIiBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDQ2LW1lcmdlLXNraXAtdW5uZWVkZWQtdXBkYXRlcy5zaCBiL3QvdDYwNDYtbWVyZ2Utc2tpcC11bm5lZWRlZC11cGRhdGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFkZGM5ZTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDQ2LW1lcmdlLXNraXAtdW5uZWVkZWQtdXBkYXRlcy5zaApAQCAtMCwwICsxLDc3MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Im1lcmdlIGNhc2VzIgorCisjIFRoZSBzZXR1cCBmb3IgYWxsIG9mIHRoZW0sIHBpY3RvcmlhbGx5LCBpczoKKyMKKyMgICAgICBBCisjICAgICAgbworIyAgICAgLyBcCisjICBPIG8gICA/CisjICAgICBcIC8KKyMgICAgICBvCisjICAgICAgQgorIworIyBUbyBoZWxwIG1ha2UgaXQgZWFzaWVyIHRvIGZvbGxvdyB0aGUgZmxvdyBvZiB0ZXN0cywgdGhleSBoYXZlIGJlZW4KKyMgZGl2aWRlZCBpbnRvIHNlY3Rpb25zIGFuZCBlYWNoIHRlc3Qgd2lsbCBzdGFydCB3aXRoIGEgcXVpY2sgZXhwbGFuYXRpb24KKyMgb2Ygd2hhdCBjb21taXRzIE8sIEEsIGFuZCBCIGNvbnRhaW4uCisjCisjIE5vdGF0aW9uOgorIyAgICB6L3tiLGN9ICAgbWVhbnMgIGZpbGVzIHovYiBhbmQgei9jIGJvdGggZXhpc3QKKyMgICAgeC9kXzEgICAgIG1lYW5zICBmaWxlIHgvZCBleGlzdHMgd2l0aCBjb250ZW50IGQxLiAgKFB1cnBvc2Ugb2YgdGhlCisjICAgICAgICAgICAgICAgICAgICAgdW5kZXJzY29yZSBub3RhdGlvbiBpcyB0byBkaWZmZXJlbnRpYXRlIGRpZmZlcmVudAorIyAgICAgICAgICAgICAgICAgICAgIGZpbGVzIHRoYXQgbWlnaHQgYmUgcmVuYW1lZCBpbnRvIGVhY2ggb3RoZXIncyBwYXRocy4pCisKKy4gLi90ZXN0LWxpYi5zaAorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTRUNUSU9OIDE6IENhc2VzIGludm9sdmluZyBubyByZW5hbWVzIChvbmUgc2lkZSBoYXMgc3Vic2V0IG9mIGNoYW5nZXMgb2YKKyMgICAgICAgICAgICB0aGUgb3RoZXIgc2lkZSkKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRlc3RjYXNlIDFhLCBDaGFuZ2VzIG9uIEEsIHN1YnNldCBvZiBjaGFuZ2VzIG9uIEIKKyMgICBDb21taXQgTzogYl8xCisjICAgQ29tbWl0IEE6IGJfMgorIyAgIENvbW1pdCBCOiBiXzMKKyMgICBFeHBlY3RlZDogYl8yCisKK3Rlc3Rfc2V0dXBfMWEgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMWFfJDEgJiYKKwkoCisJCWNkIDFhXyQxICYmCisKKwkJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNiA3IDggOSAxMCA+YiAmJgorCQlnaXQgYWRkIGIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA1LjUgNiA3IDggOSAxMCAxMC41ID5iICYmCisJCWdpdCBhZGQgYiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA1LjUgNiA3IDggOSAxMCA+YiAmJgorCQlnaXQgYWRkIGIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxYS1MOiBNb2RpZnkoQSkvTW9kaWZ5KEIpLCBjaGFuZ2Ugb24gQiBzdWJzZXQgb2YgQScgJworCXRlc3Rfc2V0dXBfMWEgTCAmJgorCSgKKwkJY2QgMWFfTCAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCAtMzYwMCBiID5vbGQtbXRpbWUgJiYKKworCQlHSVRfTUVSR0VfVkVSQk9TSVRZPTMgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKworCQkjIE1ha2Ugc3VyZSBiIHdhcyBOT1QgdXBkYXRlZAorCQl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCBiID5uZXctbXRpbWUgJiYKKwkJdGVzdF9jbXAgb2xkLW10aW1lIG5ldy1tdGltZSAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+aW5kZXhfZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBpbmRleF9maWxlcyAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBIRUFEOmIgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IEE6YiAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0IGIgICA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgICBBOmIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxYS1SOiBNb2RpZnkoQSkvTW9kaWZ5KEIpLCBjaGFuZ2Ugb24gQiBzdWJzZXQgb2YgQScgJworCXRlc3Rfc2V0dXBfMWEgUiAmJgorCSgKKwkJY2QgMWFfUiAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKworCQl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCAtMzYwMCBiID5vbGQtbXRpbWUgJiYKKwkJR0lUX01FUkdFX1ZFUkJPU0lUWT0zIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQV4wID5vdXQgMj5lcnIgJiYKKworCQkjIE1ha2Ugc3VyZSBiIFdBUyB1cGRhdGVkCisJCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IGIgPm5ldy1tdGltZSAmJgorCQl0ZXN0ICQoY2F0IG9sZC1tdGltZSkgLWx0ICQoY2F0IG5ldy1tdGltZSkgJiYKKworCQl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5pbmRleF9maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGluZGV4X2ZpbGVzICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIEhFQUQ6YiAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgQTpiICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgYiAgID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSAgIEE6YiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNFQ1RJT04gMjogQ2FzZXMgaW52b2x2aW5nIGJhc2ljIHJlbmFtZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRlc3RjYXNlIDJhLCBDaGFuZ2VzIG9uIEEsIHJlbmFtZSBvbiBCCisjICAgQ29tbWl0IE86IGJfMQorIyAgIENvbW1pdCBBOiBiXzIKKyMgICBDb21taXQgQjogY18xCisjICAgRXhwZWN0ZWQ6IGNfMgorCit0ZXN0X3NldHVwXzJhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDJhXyQxICYmCisJKAorCQljZCAyYV8kMSAmJgorCisJCXRlc3Rfc2VxIDEgMTAgPmIgJiYKKwkJZ2l0IGFkZCBiICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJdGVzdF9zZXEgMSAxMSA+YiAmJgorCQlnaXQgYWRkIGIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IGIgYyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJhLUw6IE1vZGlmeS9yZW5hbWUsIG1lcmdlIGludG8gbW9kaWZ5IHNpZGUnICcKKwl0ZXN0X3NldHVwXzJhIEwgJiYKKwkoCisJCWNkIDJhX0wgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYyAmJgorCQlHSVRfTUVSR0VfVkVSQk9TSVRZPTMgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIGMgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPmluZGV4X2ZpbGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgaW5kZXhfZmlsZXMgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgSEVBRDpjICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBBOmIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCBjICAgPmFjdHVhbCAmJgorCQlnaXQgcmV2LXBhcnNlICAgQTpiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDpiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJhLVI6IE1vZGlmeS9yZW5hbWUsIG1lcmdlIGludG8gcmVuYW1lIHNpZGUnICcKKwl0ZXN0X3NldHVwXzJhIFIgJiYKKwkoCisJCWNkIDJhX1IgJiYKKworCQlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwkJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLTM2MDAgYyA+b2xkLW10aW1lICYmCisJCUdJVF9NRVJHRV9WRVJCT1NJVFk9MyBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEFeMCA+b3V0IDI+ZXJyICYmCisKKwkJIyBNYWtlIHN1cmUgYyBXQVMgdXBkYXRlZAorCQl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCBjID5uZXctbXRpbWUgJiYKKwkJdGVzdCAkKGNhdCBvbGQtbXRpbWUpIC1sdCAkKGNhdCBuZXctbXRpbWUpICYmCisKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+aW5kZXhfZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBpbmRleF9maWxlcyAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBIRUFEOmMgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IEE6YiAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0IGMgICA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgICBBOmIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYgorCSkKKycKKworIyBUZXN0Y2FzZSAyYiwgQ2hhbmdlZCBhbmQgcmVuYW1lZCBvbiBBLCBzdWJzZXQgb2YgY2hhbmdlcyBvbiBCCisjICAgQ29tbWl0IE86IGJfMQorIyAgIENvbW1pdCBBOiBjXzIKKyMgICBDb21taXQgQjogYl8zCisjICAgRXhwZWN0ZWQ6IGNfMgorCit0ZXN0X3NldHVwXzJiICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDJiXyQxICYmCisJKAorCQljZCAyYl8kMSAmJgorCisJCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA4IDkgMTAgPmIgJiYKKwkJZ2l0IGFkZCBiICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNS41IDYgNyA4IDkgMTAgMTAuNSA+YiAmJgorCQlnaXQgYWRkIGIgJiYKKwkJZ2l0IG12IGIgYyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA1LjUgNiA3IDggOSAxMCA+YiAmJgorCQlnaXQgYWRkIGIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyYi1MOiBSZW5hbWUrTW9kKEEpL01vZChCKSwgQiBtb2RzIHN1YnNldCBvZiBBJyAnCisJdGVzdF9zZXR1cF8yYiBMICYmCisJKAorCQljZCAyYl9MICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC0zNjAwIGMgPm9sZC1tdGltZSAmJgorCQlHSVRfTUVSR0VfVkVSQk9TSVRZPTMgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKworCQkjIE1ha2Ugc3VyZSBjIFdBUyB1cGRhdGVkCisJCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IGMgPm5ldy1tdGltZSAmJgorCQl0ZXN0X2NtcCBvbGQtbXRpbWUgbmV3LW10aW1lICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5pbmRleF9maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGluZGV4X2ZpbGVzICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIEhFQUQ6YyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgQTpjICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgYyAgID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSAgIEE6YyA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6YiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyYi1SOiBSZW5hbWUrTW9kKEEpL01vZChCKSwgQiBtb2RzIHN1YnNldCBvZiBBJyAnCisJdGVzdF9zZXR1cF8yYiBSICYmCisJKAorCQljZCAyYl9SICYmCisKKwkJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGMgJiYKKwkJR0lUX01FUkdFX1ZFUkJPU0lUWT0zIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQV4wID5vdXQgMj5lcnIgJiYKKworCQkjIE1ha2Ugc3VyZSBjIG5vdyBwcmVzZW50IChhbmQgdGh1cyB3YXMgdXBkYXRlZCkKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYyAmJgorCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPmluZGV4X2ZpbGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgaW5kZXhfZmlsZXMgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgSEVBRDpjICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBBOmMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCBjICAgPmFjdHVhbCAmJgorCQlnaXQgcmV2LXBhcnNlICAgQTpjID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDpiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGIKKwkpCisnCisKKyMgVGVzdGNhc2UgMmMsIENoYW5nZXMgb24gQSwgcmVuYW1lIG9uIEIKKyMgICBDb21taXQgTzogYl8xCisjICAgQ29tbWl0IEE6IGJfMiwgY18zCisjICAgQ29tbWl0IEI6IGNfMQorIyAgIEV4cGVjdGVkOiByZW5hbWUvYWRkIGNvbmZsaWN0IGNfMiB2cyBjXzMKKyMKKyMgICBOT1RFOiBTaW5jZSBBIG1vZGlmaWVkIGJfMS0+Yl8yLCBhbmQgQiByZW5hbWVkIGJfMS0+Y18xLCB0aGUgdGhyZWV3YXkKKyMgICAgICAgICBtZXJnZSBvZiB0aG9zZSBmaWxlcyBzaG91bGQgcmVzdWx0IGluIGNfMi4gIFdlIHRoZW4gc2hvdWxkIGhhdmUgYQorIyAgICAgICAgIHJlbmFtZS9hZGQgY29uZmxpY3QgYmV0d2VlbiBjXzIgYW5kIGNfMy4gIEhvd2V2ZXIsIGlmIHdlIG5vdGUgaW4KKyMgICAgICAgICBtZXJnZV9jb250ZW50KCkgdGhhdCBBIGhhZCB0aGUgcmlnaHQgY29udGVudHMgKGJfMiBoYXMgc2FtZQorIyAgICAgICAgIGNvbnRlbnRzIGFzIGNfMiwganVzdCBhdCBhIGRpZmZlcmVudCBuYW1lKSwgYW5kIHRoYXQgQSBoYWQgdGhlCisjICAgICAgICAgcmlnaHQgcGF0aCBwcmVzZW50IChjXzMgZXhpc3RlZCkgYW5kIHRodXMgZGVjaWRlcyB0aGF0IGl0IGNhbgorIyAgICAgICAgIHNraXAgdGhlIHVwZGF0ZSwgdGhlbiB3ZSdyZSBpbiB0cm91YmxlLiAgVGhpcyB0ZXN0IHZlcmlmaWVzIHdlIGRvCisjICAgICAgICAgbm90IG1ha2UgdGhhdCBwYXJ0aWN1bGFyIG1pc3Rha2UuCisKK3Rlc3Rfc2V0dXBfMmMgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMmMgJiYKKwkoCisJCWNkIDJjICYmCisKKwkJdGVzdF9zZXEgMSAxMCA+YiAmJgorCQlnaXQgYWRkIGIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQl0ZXN0X3NlcSAxIDExID5iICYmCisJCWVjaG8gd2hhdGV2ZXIgPmMgJiYKKwkJZ2l0IGFkZCBiIGMgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IGIgYyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJjOiBNb2RpZnkgYiAmIGFkZCBjIFZTIHJlbmFtZSBiLT5jJyAnCisJdGVzdF9zZXR1cF8yYyAmJgorCSgKKwkJY2QgMmMgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLTM2MDAgYyA+b2xkLW10aW1lICYmCisJCUdJVF9NRVJHRV9WRVJCT1NJVFk9MyAmJgorCQlleHBvcnQgR0lUX01FUkdFX1ZFUkJPU0lUWSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgYi0+YyIgb3V0ICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKworCQkjIE1ha2Ugc3VyZSBjIFdBUyB1cGRhdGVkCisJCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IGMgPm5ldy1tdGltZSAmJgorCQl0ZXN0ICQoY2F0IG9sZC1tdGltZSkgLWx0ICQoY2F0IG5ldy1tdGltZSkKKworCQkjIEZJWE1FOiByZW5hbWUvYWRkIGNvbmZsaWN0cyBhcmUgaG9ycmlibHkgYnJva2VuIHJpZ2h0IG5vdzsKKwkJIyB3aGVuIEkgZ2V0IGJhY2sgdG8gbXkgcGF0Y2ggc2VyaWVzIGZpeGluZyBpdCBhbmQKKwkJIyByZW5hbWUvcmVuYW1lKDJ0bzEpIGNvbmZsaWN0cyB0byBicmluZyB0aGVtIGluIGxpbmUgd2l0aAorCQkjIGhvdyBhZGQvYWRkIGNvbmZsaWN0cyBiZWhhdmUsIHRoZW4gY2hlY2tzIGxpa2UgdGhlIGJlbG93CisJCSMgY291bGQgYmUgYWRkZWQuICBCdXQgdGhhdCBwYXRjaCBzZXJpZXMgaXMgd2FpdGluZyB1bnRpbAorCQkjIHRoZSByZW5hbWUtZGlyZWN0b3J5LWRldGVjdGlvbiBzZXJpZXMgbGFuZHMsIHdoaWNoIHRoaXMKKwkJIyBpcyBwYXJ0IG9mLiAgQW5kIGluIHRoZSBtZWFuIHRpbWUsIEkgZG8gbm90IHdhbnQgdG8gZnVydGhlcgorCQkjIGVuZm9yY2UgYnJva2VuIGJlaGF2aW9yLiAgU28gZm9yIG5vdywgdGhlIG1haW4gdGVzdCBpcyB0aGUKKwkJIyBvbmUgYWJvdmUgdGhhdCBlcnIgaXMgYW4gZW1wdHkgZmlsZS4KKworCQkjZ2l0IGxzLWZpbGVzIC1zID5pbmRleF9maWxlcyAmJgorCQkjdGVzdF9saW5lX2NvdW50ID0gMiBpbmRleF9maWxlcyAmJgorCisJCSNnaXQgcmV2LXBhcnNlID5hY3R1YWwgOjI6YyA6MzpjICYmCisJCSNnaXQgcmV2LXBhcnNlID5leHBlY3QgQTpiICBBOmMgICYmCisJCSN0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJI2dpdCBjYXQtZmlsZSAtcCBBOmIgPj5tZXJnZWQgJiYKKwkJI2dpdCBjYXQtZmlsZSAtcCBBOmMgPj5tZXJnZS1tZSAmJgorCQkjPmVtcHR5ICYmCisJCSN0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSBcCisJCSMJLUwgIlRlbXBvcmFyeSBtZXJnZSBicmFuY2ggMSIgXAorCQkjCS1MICIiIFwKKwkJIwktTCAiVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAyIiBcCisJCSMJbWVyZ2VkIGVtcHR5IG1lcmdlLW1lICYmCisJCSNzZWQgLWUgInMvXlwoWzw9Pl1cKS9cMVwxXDEvIiBtZXJnZWQgPm1lcmdlZC1pbnRlcm5hbCAmJgorCisJCSNnaXQgaGFzaC1vYmplY3QgYyAgICAgICAgICAgICAgID5hY3R1YWwgJiYKKwkJI2dpdCBoYXNoLW9iamVjdCBtZXJnZWQtaW50ZXJuYWwgPmV4cGVjdCAmJgorCQkjdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCSN0ZXN0X3BhdGhfaXNfbWlzc2luZyBiCisJKQorJworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTRUNUSU9OIDM6IENhc2VzIGludm9sdmluZyBkaXJlY3RvcnkgcmVuYW1lcworIworIyBOT1RFOgorIyAgIERpcmVjdG9yeSByZW5hbWVzIG9ubHkgYXBwbHkgd2hlbiBvbmUgc2lkZSByZW5hbWVzIGEgZGlyZWN0b3J5LCBhbmQgdGhlCisjICAgb3RoZXIgc2lkZSBhZGRzIG9yIHJlbmFtZXMgYSBwYXRoIGludG8gdGhhdCBkaXJlY3RvcnkuICBBcHBseWluZyB0aGUKKyMgICBkaXJlY3RvcnkgcmVuYW1lIHRvIHRoYXQgbmV3IHBhdGggY3JlYXRlcyBhIG5ldyBwYXRobmFtZSB0aGF0IGRpZG4ndAorIyAgIGV4aXN0IG9uIGVpdGhlciBzaWRlIG9mIGhpc3RvcnkuICBUaHVzLCBpdCBpcyBpbXBvc3NpYmxlIGZvciB0aGUKKyMgICBtZXJnZSBjb250ZW50cyB0byBhbHJlYWR5IGJlIGF0IHRoZSByaWdodCBwYXRoLCBzbyBhbGwgb2YgdGhlc2UgY2hlY2tzCisjICAgZXhpc3QganVzdCB0byBtYWtlIHN1cmUgdGhhdCB1cGRhdGVzIGFyZSBub3Qgc2tpcHBlZC4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRlc3RjYXNlIDNhLCBDaGFuZ2UgKyByZW5hbWUgaW50byBkaXIgZm9vIG9uIEEsIGRpciByZW5hbWUgZm9vLT5iYXIgb24gQgorIyAgIENvbW1pdCBPOiBicV8xLCBmb28vd2hhdGV2ZXIKKyMgICBDb21taXQgQTogZm9vL3ticV8yLCB3aGF0ZXZlcn0KKyMgICBDb21taXQgQjogYnFfMSwgYmFyL3doYXRldmVyCisjICAgRXhwZWN0ZWQ6IGJhci97YnFfMiwgd2hhdGV2ZXJ9CisKK3Rlc3Rfc2V0dXBfM2EgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gM2FfJDEgJiYKKwkoCisJCWNkIDNhXyQxICYmCisKKwkJbWtkaXIgZm9vICYmCisJCXRlc3Rfc2VxIDEgMTAgPmJxICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgYSBiIGMgZCBlIGYgZyBoIGkgaiBrID5mb28vd2hhdGV2ZXIgJiYKKwkJZ2l0IGFkZCBicSBmb28vd2hhdGV2ZXIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQl0ZXN0X3NlcSAxIDExID5icSAmJgorCQlnaXQgYWRkIGJxICYmCisJCWdpdCBtdiBicSBmb28vICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiBmb28vIGJhci8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczYS1MOiBicV8xLT5mb28vYnFfMiBvbiBBLCBmb28vLT5iYXIvIG9uIEInICcKKwl0ZXN0X3NldHVwXzNhIEwgJiYKKwkoCisJCWNkIDNhX0wgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYmFyL2JxICYmCisJCUdJVF9NRVJHRV9WRVJCT1NJVFk9MyBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKworCQl0ZXN0X3BhdGhfaXNfZmlsZSBiYXIvYnEgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPmluZGV4X2ZpbGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgaW5kZXhfZmlsZXMgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgSEVBRDpiYXIvYnEgSEVBRDpiYXIvd2hhdGV2ZXIgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IEE6Zm9vL2JxICAgIEE6Zm9vL3doYXRldmVyICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgYmFyL2JxICAgYmFyL3doYXRldmVyICAgPmFjdHVhbCAmJgorCQlnaXQgcmV2LXBhcnNlICAgQTpmb28vYnEgQTpmb28vd2hhdGV2ZXIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmJxIEhFQUQ6Zm9vL2JxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGJxIGZvby9icSBmb28vd2hhdGV2ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNhLVI6IGJxXzEtPmZvby9icV8yIG9uIEEsIGZvby8tPmJhci8gb24gQicgJworCXRlc3Rfc2V0dXBfM2EgUiAmJgorCSgKKwkJY2QgM2FfUiAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKworCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiYXIvYnEgJiYKKwkJR0lUX01FUkdFX1ZFUkJPU0lUWT0zIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEFeMCA+b3V0IDI+ZXJyICYmCisKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIGJhci9icSAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+aW5kZXhfZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBpbmRleF9maWxlcyAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBIRUFEOmJhci9icSBIRUFEOmJhci93aGF0ZXZlciAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgQTpmb28vYnEgICAgQTpmb28vd2hhdGV2ZXIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCBiYXIvYnEgICBiYXIvd2hhdGV2ZXIgICA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgICBBOmZvby9icSBBOmZvby93aGF0ZXZlciA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6YnEgSEVBRDpmb28vYnEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYnEgZm9vL2JxIGZvby93aGF0ZXZlcgorCSkKKycKKworIyBUZXN0Y2FzZSAzYiwgcmVuYW1lIGludG8gZGlyIGZvbyBvbiBBLCBkaXIgcmVuYW1lIGZvby0+YmFyICsgY2hhbmdlIG9uIEIKKyMgICBDb21taXQgTzogYnFfMSwgZm9vL3doYXRldmVyCisjICAgQ29tbWl0IEE6IGZvby97YnFfMSwgd2hhdGV2ZXJ9CisjICAgQ29tbWl0IEI6IGJxXzIsIGJhci93aGF0ZXZlcgorIyAgIEV4cGVjdGVkOiBiYXIve2JxXzIsIHdoYXRldmVyfQorCit0ZXN0X3NldHVwXzNiICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDNiXyQxICYmCisJKAorCQljZCAzYl8kMSAmJgorCisJCW1rZGlyIGZvbyAmJgorCQl0ZXN0X3NlcSAxIDEwID5icSAmJgorCQl0ZXN0X3dyaXRlX2xpbmVzIGEgYiBjIGQgZSBmIGcgaCBpIGogayA+Zm9vL3doYXRldmVyICYmCisJCWdpdCBhZGQgYnEgZm9vL3doYXRldmVyICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IGJxIGZvby8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJdGVzdF9zZXEgMSAxMSA+YnEgJiYKKwkJZ2l0IGFkZCBicSAmJgorCQlnaXQgbXYgZm9vLyBiYXIvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnM2ItTDogYnFfMS0+Zm9vL2JxXzIgb24gQSwgZm9vLy0+YmFyLyBvbiBCJyAnCisJdGVzdF9zZXR1cF8zYiBMICYmCisJKAorCQljZCAzYl9MICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGJhci9icSAmJgorCQlHSVRfTUVSR0VfVkVSQk9TSVRZPTMgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKworCQl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYmFyL2JxICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5pbmRleF9maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGluZGV4X2ZpbGVzICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIEhFQUQ6YmFyL2JxIEhFQUQ6YmFyL3doYXRldmVyICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBCOmJxICAgICAgICBBOmZvby93aGF0ZXZlciAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0IGJhci9icSBiYXIvd2hhdGV2ZXIgICA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgICBCOmJxICAgQTpmb28vd2hhdGV2ZXIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmJxIEhFQUQ6Zm9vL2JxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGJxIGZvby9icSBmb28vd2hhdGV2ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNiLVI6IGJxXzEtPmZvby9icV8yIG9uIEEsIGZvby8tPmJhci8gb24gQicgJworCXRlc3Rfc2V0dXBfM2IgUiAmJgorCSgKKwkJY2QgM2JfUiAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKworCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiYXIvYnEgJiYKKwkJR0lUX01FUkdFX1ZFUkJPU0lUWT0zIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEFeMCA+b3V0IDI+ZXJyICYmCisKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIGJhci9icSAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+aW5kZXhfZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBpbmRleF9maWxlcyAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBIRUFEOmJhci9icSBIRUFEOmJhci93aGF0ZXZlciAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgQjpicSAgICAgICAgQTpmb28vd2hhdGV2ZXIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCBiYXIvYnEgYmFyL3doYXRldmVyICAgPmFjdHVhbCAmJgorCQlnaXQgcmV2LXBhcnNlICAgQjpicSAgIEE6Zm9vL3doYXRldmVyID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDpicSBIRUFEOmZvby9icSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBicSBmb28vYnEgZm9vL3doYXRldmVyCisJKQorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU0VDVElPTiA0OiBDYXNlcyBpbnZvbHZpbmcgZGlydHkgY2hhbmdlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGVzdGNhc2UgNGEsIENoYW5nZWQgb24gQSwgc3Vic2V0IG9mIGNoYW5nZXMgb24gQiwgbG9jYWxseSBtb2RpZmllZAorIyAgIENvbW1pdCBPOiBiXzEKKyMgICBDb21taXQgQTogYl8yCisjICAgQ29tbWl0IEI6IGJfMworIyAgIFdvcmtpbmcgY29weTogYl80CisjICAgRXhwZWN0ZWQ6IGJfMiBmb3IgbWVyZ2UsIGJfNCBpbiB3b3JraW5nIGNvcHkKKwordGVzdF9zZXR1cF80YSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA0YSAmJgorCSgKKwkJY2QgNGEgJiYKKworCQl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgOCA5IDEwID5iICYmCisJCWdpdCBhZGQgYiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDUuNSA2IDcgOCA5IDEwIDEwLjUgPmIgJiYKKwkJZ2l0IGFkZCBiICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDUuNSA2IDcgOCA5IDEwID5iICYmCisJCWdpdCBhZGQgYiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKKyMgTk9URTogRm9yIGFzIGxvbmcgYXMgd2UgY29udGludWUgdXNpbmcgdW5wYWNrX3RyZWVzKCkgd2l0aG91dCBpbmRleF9vbmx5CisjICAgc2V0IHRvIHRydWUsIGl0IHdpbGwgZXJyb3Igb3V0IG9uIGEgY2FzZSBsaWtlIHRoaXMgY2xhaW1pbmcgdGhlIHRoZSBsb2NhbGx5CisjICAgbW9kaWZpZWQgZmlsZSB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgbWVyZ2UuICBHZXR0aW5nIHRoaXMgdGVzdGNhc2UKKyMgICBjb3JyZWN0IHJlcXVpcmVzIGRvaW5nIHRoZSBtZXJnZSBpbi1tZW1vcnkgZmlyc3QsIHRoZW4gcmVhbGl6aW5nIHRoYXQgbm8KKyMgICB1cGRhdGVzIHRvIHRoZSBmaWxlIGFyZSBuZWNlc3NhcnksIGFuZCB0aHVzIHRoYXQgd2UgY2FuIGp1c3QgbGVhdmUgdGhlIHBhdGgKKyMgICBhbG9uZS4KK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJzRhOiBDaGFuZ2Ugb24gQSwgY2hhbmdlIG9uIEIgc3Vic2V0IG9mIEEsIGRpcnR5IG1vZHMgcHJlc2VudCcgJworCXRlc3Rfc2V0dXBfNGEgJiYKKwkoCisJCWNkIDRhICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCQllY2hvICJGaWxlIHJld3JpdHRlbiIgPmIgJiYKKworCQl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCAtMzYwMCBiID5vbGQtbXRpbWUgJiYKKworCQlHSVRfTUVSR0VfVkVSQk9TSVRZPTMgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKworCQkjIE1ha2Ugc3VyZSBiIHdhcyBOT1QgdXBkYXRlZAorCQl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCBiID5uZXctbXRpbWUgJiYKKwkJdGVzdF9jbXAgb2xkLW10aW1lIG5ldy1tdGltZSAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+aW5kZXhfZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBpbmRleF9maWxlcyAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCA6MDpiICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBBOmIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCBiID5hY3R1YWwgJiYKKwkJZWNobyAiRmlsZSByZXdyaXR0ZW4iIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIDRiLCBDaGFuZ2VkK3JlbmFtZWQgb24gQSwgc3Vic2V0IG9mIGNoYW5nZXMgb24gQiwgbG9jYWxseSBtb2RpZmllZAorIyAgIENvbW1pdCBPOiBiXzEKKyMgICBDb21taXQgQTogY18yCisjICAgQ29tbWl0IEI6IGJfMworIyAgIFdvcmtpbmcgY29weTogY180CisjICAgRXhwZWN0ZWQ6IGNfMgorCit0ZXN0X3NldHVwXzRiICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDRiICYmCisJKAorCQljZCA0YiAmJgorCisJCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA4IDkgMTAgPmIgJiYKKwkJZ2l0IGFkZCBiICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNS41IDYgNyA4IDkgMTAgMTAuNSA+YiAmJgorCQlnaXQgYWRkIGIgJiYKKwkJZ2l0IG12IGIgYyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA1LjUgNiA3IDggOSAxMCA+YiAmJgorCQlnaXQgYWRkIGIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc0YjogUmVuYW1lK01vZChBKS9Nb2QoQiksIGNoYW5nZSBvbiBCIHN1YnNldCBvZiBBLCBkaXJ0eSBtb2RzIHByZXNlbnQnICcKKwl0ZXN0X3NldHVwXzRiICYmCisJKAorCQljZCA0YiAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKwkJZWNobyAiRmlsZSByZXdyaXR0ZW4iID5jICYmCisKKwkJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLTM2MDAgYyA+b2xkLW10aW1lICYmCisKKwkJR0lUX01FUkdFX1ZFUkJPU0lUWT0zIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKworCQl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisKKwkJIyBNYWtlIHN1cmUgYyB3YXMgTk9UIHVwZGF0ZWQKKwkJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgYyA+bmV3LW10aW1lICYmCisJCXRlc3RfY21wIG9sZC1tdGltZSBuZXctbXRpbWUgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPmluZGV4X2ZpbGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgaW5kZXhfZmlsZXMgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgOjA6YyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgQTpjICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgYyA+YWN0dWFsICYmCisJCWVjaG8gIkZpbGUgcmV3cml0dGVuIiB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDpiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjA0Ny1kaWZmMy1jb25mbGljdC1tYXJrZXJzLnNoIGIvdC90NjA0Ny1kaWZmMy1jb25mbGljdC1tYXJrZXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY0NjU1YmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDQ3LWRpZmYzLWNvbmZsaWN0LW1hcmtlcnMuc2gKQEAgLTAsMCArMSwyMTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWN1cnNpdmUgbWVyZ2UgZGlmZjMgc3R5bGUgY29uZmxpY3QgbWFya2VycycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgU2V0dXA6CisjICAgICAgICAgIEwxCisjICAgICAgICAgICAgXAorIyAgICAgICAgICAgICA/CisjICAgICAgICAgICAgLworIyAgICAgICAgICBSMQorIworIyBXaGVyZToKKyMgICBMMSBhbmQgUjEgYm90aCBoYXZlIGEgZmlsZSBuYW1lZCAnY29udGVudCcgYnV0IGhhdmUgbm8gY29tbW9uIGhpc3RvcnkKKyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbm8gbWVyZ2UgYmFzZScgJworCXRlc3RfY3JlYXRlX3JlcG8gbm9fbWVyZ2VfYmFzZSAmJgorCSgKKwkJY2Qgbm9fbWVyZ2VfYmFzZSAmJgorCisJCWdpdCBjaGVja291dCAtYiBMICYmCisJCXRlc3RfY29tbWl0IEEgY29udGVudCBBICYmCisKKwkJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIFIgJiYKKwkJdGVzdF9jb21taXQgQiBjb250ZW50IEIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIG5vIG1lcmdlIGJhc2UnICcKKwkoCisJCWNkIG5vX21lcmdlX2Jhc2UgJiYKKworCQlnaXQgY2hlY2tvdXQgTF4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmNvbmZsaWN0c3R5bGU9ZGlmZjMgbWVyZ2UgLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIC1zIHJlY3Vyc2l2ZSBSXjAgJiYKKworCQlncmVwICJ8fHx8fHwgZW1wdHkgdHJlZSIgY29udGVudAorCSkKKycKKworIyBTZXR1cDoKKyMgICAgICAgICAgTDEKKyMgICAgICAgICAvICBcCisjICAgbWFzdGVyICAgID8KKyMgICAgICAgICBcICAvCisjICAgICAgICAgIFIxCisjCisjIFdoZXJlOgorIyAgIEwxIGFuZCBSMSBoYXZlIG1vZGlmaWVkIHRoZSBzYW1lIGZpbGUgKCdjb250ZW50JykgaW4gY29uZmxpY3Rpbmcgd2F5cworIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB1bmlxdWUgbWVyZ2UgYmFzZScgJworCXRlc3RfY3JlYXRlX3JlcG8gdW5pcXVlX21lcmdlX2Jhc2UgJiYKKwkoCisJCWNkIHVuaXF1ZV9tZXJnZV9iYXNlICYmCisKKwkJdGVzdF9jb21taXQgYmFzZSBjb250ZW50ICIxCisyCiszCis0Cis1CisiICYmCisKKwkJZ2l0IGJyYW5jaCBMICYmCisJCWdpdCBicmFuY2ggUiAmJgorCisJCWdpdCBjaGVja291dCBMICYmCisJCXRlc3RfY29tbWl0IEwgY29udGVudCAiMQorMgorMworNAorNQorNyIgJiYKKworCQlnaXQgY2hlY2tvdXQgUiAmJgorCQlnaXQgcm0gY29udGVudCAmJgorCQl0ZXN0X2NvbW1pdCBSIHJlbmFtZWQgIjEKKzIKKzMKKzQKKzUKK3NpeCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHVuaXF1ZSBtZXJnZSBiYXNlJyAnCisJKAorCQljZCB1bmlxdWVfbWVyZ2VfYmFzZSAmJgorCisJCWdpdCBjaGVja291dCBMXjAgJiYKKwkJTUFTVEVSPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IG1hc3RlcikgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuY29uZmxpY3RzdHlsZT1kaWZmMyBtZXJnZSAtcyByZWN1cnNpdmUgUl4wICYmCisKKwkJZ3JlcCAifHx8fHx8ICRNQVNURVI6Y29udGVudCIgcmVuYW1lZAorCSkKKycKKworIyBTZXR1cDoKKyMgICAgICAgICAgTDEtLS1MMi0tTDMKKyMgICAgICAgICAvICBcIC8gICAgICBcCisjICAgbWFzdGVyICAgIFgxICAgICAgID8KKyMgICAgICAgICBcICAvIFwgICAgICAvCisjICAgICAgICAgIFIxLS0tUjItLVIzCisjCisjIFdoZXJlOgorIyAgIGNvbW1pdHMgTDEgYW5kIFIxIGhhdmUgbW9kaWZpZWQgdGhlIHNhbWUgZmlsZSBpbiBub24tY29uZmxpY3Rpbmcgd2F5cworIyAgIFgxIGlzIGFuIGF1dG8tZ2VuZXJhdGVkIG1lcmdlLWJhc2UgdXNlZCB3aGVuIG1lcmdpbmcgTDEgYW5kIFIxCisjICAgY29tbWl0cyBMMiBhbmQgUjIgYXJlIG1lcmdlcyBvZiBSMSBhbmQgTDEgaW50byBMMSBhbmQgUjEsIHJlc3BlY3RpdmVseQorIyAgIGNvbW1pdHMgTDMgYW5kIFIzIGJvdGggbW9kaWZ5ICdjb250ZW50JyBpbiBjb25mbGljdGluZyB3YXlzCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG11bHRpcGxlIG1lcmdlIGJhc2VzJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBtdWx0aXBsZV9tZXJnZV9iYXNlcyAmJgorCSgKKwkJY2QgbXVsdGlwbGVfbWVyZ2VfYmFzZXMgJiYKKworCQl0ZXN0X2NvbW1pdCBpbml0aWFsIGNvbnRlbnQgIjEKKzIKKzMKKzQKKzUiICYmCisKKwkJZ2l0IGJyYW5jaCBMICYmCisJCWdpdCBicmFuY2ggUiAmJgorCisJCSMgQ3JlYXRlIEwxCisJCWdpdCBjaGVja291dCBMICYmCisJCXRlc3RfY29tbWl0IEwxIGNvbnRlbnQgIjAKKzEKKzIKKzMKKzQKKzUiICYmCisKKwkJIyBDcmVhdGUgUjEKKwkJZ2l0IGNoZWNrb3V0IFIgJiYKKwkJdGVzdF9jb21taXQgUjEgY29udGVudCAiMQorMgorMworNAorNQorNiIgJiYKKworCQkjIENyZWF0ZSBMMgorCQlnaXQgY2hlY2tvdXQgTCAmJgorCQlnaXQgbWVyZ2UgUjEgJiYKKworCQkjIENyZWF0ZSBSMgorCQlnaXQgY2hlY2tvdXQgUiAmJgorCQlnaXQgbWVyZ2UgTDEgJiYKKworCQkjIENyZWF0ZSBMMworCQlnaXQgY2hlY2tvdXQgTCAmJgorCQl0ZXN0X2NvbW1pdCBMMyBjb250ZW50ICIwCisxCisyCiszCis0Cis1CitBIiAmJgorCisJCSMgQ3JlYXRlIFIzCisJCWdpdCBjaGVja291dCBSICYmCisJCWdpdCBybSBjb250ZW50ICYmCisJCXRlc3RfY29tbWl0IFIzIHJlbmFtZWQgIjAKKzIKKzMKKzQKKzUKK3NpeCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIG11bHRpcGxlIG1lcmdlIGJhc2VzJyAnCisJKAorCQljZCBtdWx0aXBsZV9tZXJnZV9iYXNlcyAmJgorCisJCWdpdCBjaGVja291dCBMXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuY29uZmxpY3RzdHlsZT1kaWZmMyBtZXJnZSAtcyByZWN1cnNpdmUgUl4wICYmCisKKwkJZ3JlcCAifHx8fHx8IG1lcmdlZCBjb21tb24gYW5jZXN0b3JzOmNvbnRlbnQiIHJlbmFtZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIGRlc2NyaWJlcyBwYXJlbnQgb2YgY29tbWl0IGJlaW5nIHBpY2tlZCcgJworCXRlc3RfY3JlYXRlX3JlcG8gcmViYXNlICYmCisJKAorCQljZCByZWJhc2UgJiYKKwkJdGVzdF9jb21taXQgYmFzZSBmaWxlICYmCisJCXRlc3RfY29tbWl0IG1hc3RlciBmaWxlICYmCisJCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUReICYmCisJCXRlc3RfY29tbWl0IHNpZGUgZmlsZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuY29uZmxpY3RzdHlsZT1kaWZmMyByZWJhc2UgLS1tZXJnZSBtYXN0ZXIgJiYKKwkJZ3JlcCAifHx8fHx8fCBwYXJlbnQgb2YiIGZpbGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWFwcGx5IGRlc2NyaWJlcyBmYWtlIGFuY2VzdG9yIGJhc2UnICcKKwkoCisJCWNkIHJlYmFzZSAmJgorCQlnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmNvbmZsaWN0c3R5bGU9ZGlmZjMgcmViYXNlIC0tYXBwbHkgbWFzdGVyICYmCisJCWdyZXAgInx8fHx8fHwgY29uc3RydWN0ZWQgbWVyZ2UgYmFzZSIgZmlsZQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDUwLXJlcGxhY2Uuc2ggYi90L3Q2MDUwLXJlcGxhY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTdlNjRlMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwNTAtcmVwbGFjZS5zaApAQCAtMCwwICsxLDUwNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBDaHJpc3RpYW4gQ291ZGVyCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyByZXBsYWNlIHJlZnMgZnVuY3Rpb25hbGl0eScKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLWdwZy5zaCIKKworYWRkX2FuZF9jb21taXRfZmlsZSAoKQoreworICAgIF9maWxlPSIkMSIKKyAgICBfbXNnPSIkMiIKKworICAgIGdpdCBhZGQgJF9maWxlIHx8IHJldHVybiAkPworICAgIHRlc3RfdGljayB8fCByZXR1cm4gJD8KKyAgICBnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiRfZmlsZTogJF9tc2ciCit9CisKK2NvbW1pdF9idWZmZXJfY29udGFpbnNfcGFyZW50cyAoKQoreworICAgIGdpdCBjYXQtZmlsZSBjb21taXQgIiQxIiA+cGF5bG9hZCAmJgorICAgIHNlZCAtbiAtZSAnL14kL3EnIC1lICcvXnBhcmVudCAvcCcgPHBheWxvYWQgPmFjdHVhbCAmJgorICAgIHNoaWZ0ICYmCisgICAgZm9yIF9wYXJlbnQKKyAgICBkbworCWVjaG8gInBhcmVudCAkX3BhcmVudCIKKyAgICBkb25lID5leHBlY3RlZCAmJgorICAgIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorfQorCitjb21taXRfcGVlbGluZ19zaG93c19wYXJlbnRzICgpCit7CisgICAgX3BhcmVudF9udW1iZXI9MQorICAgIF9jb21taXQ9IiQxIgorICAgIHNoaWZ0ICYmCisgICAgZm9yIF9wYXJlbnQKKyAgICBkbworCV9mb3VuZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJF9jb21taXReJF9wYXJlbnRfbnVtYmVyKSB8fCByZXR1cm4gMQorCXRlc3QgIiRfZm91bmQiID0gIiRfcGFyZW50IiB8fCByZXR1cm4gMQorCV9wYXJlbnRfbnVtYmVyPSQoKCAkX3BhcmVudF9udW1iZXIgKyAxICkpCisgICAgZG9uZSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJF9jb21taXReJF9wYXJlbnRfbnVtYmVyIDI+ZXJyICYmCisgICAgdGVzdF9pMThuZ3JlcCAiTmVlZGVkIGEgc2luZ2xlIHJldmlzaW9uIiBlcnIKK30KKworY29tbWl0X2hhc19wYXJlbnRzICgpCit7CisgICAgY29tbWl0X2J1ZmZlcl9jb250YWluc19wYXJlbnRzICIkQCIgJiYKKyAgICBjb21taXRfcGVlbGluZ19zaG93c19wYXJlbnRzICIkQCIKK30KKworSEFTSDE9CitIQVNIMj0KK0hBU0gzPQorSEFTSDQ9CitIQVNINT0KK0hBU0g2PQorSEFTSDc9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBidWdneSBicmFuY2gnICcKKyAgICAgZWNobyAibGluZSAxIiA+PmhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgMiIgPj5oZWxsbyAmJgorICAgICBlY2hvICJsaW5lIDMiID4+aGVsbG8gJiYKKyAgICAgZWNobyAibGluZSA0IiA+PmhlbGxvICYmCisgICAgIGFkZF9hbmRfY29tbWl0X2ZpbGUgaGVsbG8gIjQgbGluZXMiICYmCisgICAgIEhBU0gxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBlY2hvICJsaW5lIEJVRyIgPj5oZWxsbyAmJgorICAgICBlY2hvICJsaW5lIDYiID4+aGVsbG8gJiYKKyAgICAgZWNobyAibGluZSA3IiA+PmhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgOCIgPj5oZWxsbyAmJgorICAgICBhZGRfYW5kX2NvbW1pdF9maWxlIGhlbGxvICI0IG1vcmUgbGluZXMgd2l0aCBhIEJVRyIgJiYKKyAgICAgSEFTSDI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGVjaG8gImxpbmUgOSIgPj5oZWxsbyAmJgorICAgICBlY2hvICJsaW5lIDEwIiA+PmhlbGxvICYmCisgICAgIGFkZF9hbmRfY29tbWl0X2ZpbGUgaGVsbG8gIjIgbW9yZSBsaW5lcyIgJiYKKyAgICAgSEFTSDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGVjaG8gImxpbmUgMTEiID4+aGVsbG8gJiYKKyAgICAgYWRkX2FuZF9jb21taXRfZmlsZSBoZWxsbyAiMSBtb3JlIGxpbmUiICYmCisgICAgIEhBU0g0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBzZWQgLWUgInMvQlVHLzUvIiBoZWxsbyA+aGVsbG8ubmV3ICYmCisgICAgIG12IGhlbGxvLm5ldyBoZWxsbyAmJgorICAgICBhZGRfYW5kX2NvbW1pdF9maWxlIGhlbGxvICJCVUcgZml4ZWQiICYmCisgICAgIEhBU0g1PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBlY2hvICJsaW5lIDEyIiA+PmhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgMTMiID4+aGVsbG8gJiYKKyAgICAgYWRkX2FuZF9jb21taXRfZmlsZSBoZWxsbyAiMiBtb3JlIGxpbmVzIiAmJgorICAgICBIQVNINj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgZWNobyAibGluZSAxNCIgPj5oZWxsbyAmJgorICAgICBlY2hvICJsaW5lIDE1IiA+PmhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgMTYiID4+aGVsbG8gJiYKKyAgICAgYWRkX2FuZF9jb21taXRfZmlsZSBoZWxsbyAiYWdhaW4gMyBtb3JlIGxpbmVzIiAmJgorICAgICBIQVNINz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZSB0aGUgYXV0aG9yJyAnCisgICAgIGdpdCBjYXQtZmlsZSBjb21taXQgJEhBU0gyIHwgZ3JlcCAiYXV0aG9yIEEgVSBUaG9yIiAmJgorICAgICBSPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCAkSEFTSDIgfCBzZWQgLWUgInMvQSBVL08vIiB8IGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLS1zdGRpbiAtdykgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGNvbW1pdCAkUiB8IGdyZXAgImF1dGhvciBPIFRob3IiICYmCisgICAgIGdpdCB1cGRhdGUtcmVmIHJlZnMvcmVwbGFjZS8kSEFTSDIgJFIgJiYKKyAgICAgZ2l0IHNob3cgSEVBRH41IHwgZ3JlcCAiTyBUaG9yIiAmJgorICAgICBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJPIFRob3IiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1uby1yZXBsYWNlLW9iamVjdHMgb3B0aW9uJyAnCisgICAgIGdpdCBjYXQtZmlsZSBjb21taXQgJEhBU0gyIHwgZ3JlcCAiYXV0aG9yIE8gVGhvciIgJiYKKyAgICAgZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIGNhdC1maWxlIGNvbW1pdCAkSEFTSDIgfCBncmVwICJhdXRob3IgQSBVIFRob3IiICYmCisgICAgIGdpdCBzaG93ICRIQVNIMiB8IGdyZXAgIk8gVGhvciIgJiYKKyAgICAgZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIHNob3cgJEhBU0gyIHwgZ3JlcCAiQSBVIFRob3IiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgR0lUX05PX1JFUExBQ0VfT0JKRUNUUyBlbnYgdmFyaWFibGUnICcKKyAgICAgR0lUX05PX1JFUExBQ0VfT0JKRUNUUz0xIGdpdCBjYXQtZmlsZSBjb21taXQgJEhBU0gyIHwgZ3JlcCAiYXV0aG9yIEEgVSBUaG9yIiAmJgorICAgICBHSVRfTk9fUkVQTEFDRV9PQkpFQ1RTPTEgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiQSBVIFRob3IiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY29yZS51c2VyZXBsYWNlcmVmcyBjb25maWcgb3B0aW9uJyAnCisJdGVzdF9jb25maWcgY29yZS51c2VyZXBsYWNlcmVmcyBmYWxzZSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgJEhBU0gyIHwgZ3JlcCAiYXV0aG9yIEEgVSBUaG9yIiAmJgorCWdpdCBzaG93ICRIQVNIMiB8IGdyZXAgIkEgVSBUaG9yIgorJworCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkSEFTSDIKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlciBUIEEgR2dlciA8PiAwICswMDAwCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWcgcmVwbGFjZWQgY29tbWl0JyAnCisgICAgIGdpdCBta3RhZyA8dGFnLnNpZyA+LmdpdC9yZWZzL3RhZ3MvbXl0YWcgMj5tZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgZnNjayIgd29ya3MnICcKKyAgICAgZ2l0IGZzY2sgbWFzdGVyID5mc2NrX21hc3Rlci5vdXQgJiYKKyAgICAgdGVzdF9pMThuZ3JlcCAiZGFuZ2xpbmcgY29tbWl0ICRSIiBmc2NrX21hc3Rlci5vdXQgJiYKKyAgICAgdGVzdF9pMThuZ3JlcCAiZGFuZ2xpbmcgdGFnICQoY2F0IC5naXQvcmVmcy90YWdzL215dGFnKSIgZnNja19tYXN0ZXIub3V0ICYmCisgICAgIHRlc3QgLXogIiQoZ2l0IGZzY2spIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2ssIGNsb25lIGFuZCBmZXRjaCB3b3JrJyAnCisgICAgIGdpdCByZXBhY2sgLWEgLWQgJiYKKyAgICAgZ2l0IGNsb25lIC0tbm8taGFyZGxpbmtzIC4gY2xvbmVfZGlyICYmCisgICAgICgKKwkgIGNkIGNsb25lX2RpciAmJgorCSAgZ2l0IHNob3cgSEVBRH41IHwgZ3JlcCAiQSBVIFRob3IiICYmCisJICBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJBIFUgVGhvciIgJiYKKwkgIGdpdCBjYXQtZmlsZSBjb21taXQgJFIgJiYKKwkgIGdpdCByZXBhY2sgLWEgLWQgJiYKKwkgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBjb21taXQgJFIgJiYKKwkgIGdpdCBmZXRjaCAuLi8gInJlZnMvcmVwbGFjZS8qOnJlZnMvcmVwbGFjZS8qIiAmJgorCSAgZ2l0IHNob3cgSEVBRH41IHwgZ3JlcCAiTyBUaG9yIiAmJgorCSAgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiTyBUaG9yIiAmJgorCSAgZ2l0IGNhdC1maWxlIGNvbW1pdCAkUgorICAgICApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgcmVwbGFjZSIgbGlzdGluZyBhbmQgZGVsZXRpbmcnICcKKyAgICAgdGVzdCAiJEhBU0gyIiA9ICIkKGdpdCByZXBsYWNlIC1sKSIgJiYKKyAgICAgdGVzdCAiJEhBU0gyIiA9ICIkKGdpdCByZXBsYWNlKSIgJiYKKyAgICAgYWE9JHtIQVNIMiU/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P30gJiYKKyAgICAgdGVzdCAiJEhBU0gyIiA9ICIkKGdpdCByZXBsYWNlIC0tbGlzdCAiJGFhKiIpIiAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSAtZCAkUiAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSAtLWRlbGV0ZSAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSAtbCAtZCAkSEFTSDIgJiYKKyAgICAgZ2l0IHJlcGxhY2UgLWQgJEhBU0gyICYmCisgICAgIGdpdCBzaG93ICRIQVNIMiB8IGdyZXAgIkEgVSBUaG9yIiAmJgorICAgICB0ZXN0IC16ICIkKGdpdCByZXBsYWNlIC1sKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCByZXBsYWNlIiByZXBsYWNpbmcnICcKKyAgICAgZ2l0IHJlcGxhY2UgJEhBU0gyICRSICYmCisgICAgIGdpdCBzaG93ICRIQVNIMiB8IGdyZXAgIk8gVGhvciIgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgJEhBU0gyICRSICYmCisgICAgIGdpdCByZXBsYWNlIC1mICRIQVNIMiAkUiAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSAtZiAmJgorICAgICB0ZXN0ICIkSEFTSDIiID0gIiQoZ2l0IHJlcGxhY2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHJlcGxhY2UiIHJlc29sdmVzIHNoYTEnICcKKyAgICAgU0hPUlRIQVNIMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydD04ICRIQVNIMikgJiYKKyAgICAgZ2l0IHJlcGxhY2UgLWQgJFNIT1JUSEFTSDIgJiYKKyAgICAgZ2l0IHJlcGxhY2UgJFNIT1JUSEFTSDIgJFIgJiYKKyAgICAgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiTyBUaG9yIiAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSAkSEFTSDIgJFIgJiYKKyAgICAgZ2l0IHJlcGxhY2UgLWYgJEhBU0gyICRSICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIC0tZm9yY2UgJiYKKyAgICAgdGVzdCAiJEhBU0gyIiA9ICIkKGdpdCByZXBsYWNlKSIKKycKKworIyBUaGlzIGNyZWF0ZXMgYSBzaWRlIGJyYW5jaCB3aGVyZSB0aGUgYnVnIGluIEgyCisjIGRvZXMgbm90IGFwcGVhciBiZWNhdXNlIFAyIGlzIGNyZWF0ZWQgYnkgYXBwbHlpbmcKKyMgSDIgYW5kIHNxdWFzaGluZyBINSBpbnRvIGl0LgorIyBQMywgUDQgYW5kIFA2IGFyZSBjcmVhdGVkIGJ5IGNoZXJyeS1waWNraW5nIEgzLCBINAorIyBhbmQgSDYgcmVzcGVjdGl2ZWx5LgorIworIyBBdCB0aGlzIHBvaW50LCB3ZSBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nOgorIworIyAgICBQMi0tUDMtLVA0LS1QNgorIyAgIC8KKyMgSDEtSDItSDMtSDQtSDUtSDYtSDcKKyMKKyMgVGhlbiB3ZSByZXBsYWNlIEg2IHdpdGggUDYuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcGFyYWxsZWwgYnJhbmNoIHdpdGhvdXQgdGhlIGJ1ZycgJworICAgICBnaXQgcmVwbGFjZSAtZCAkSEFTSDIgJiYKKyAgICAgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiQSBVIFRob3IiICYmCisgICAgIGdpdCBjaGVja291dCAkSEFTSDEgJiYKKyAgICAgZ2l0IGNoZXJyeS1waWNrICRIQVNIMiAmJgorICAgICBnaXQgc2hvdyAkSEFTSDUgfCBnaXQgYXBwbHkgJiYKKyAgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJoZWxsbzogNCBtb3JlIGxpbmVzIFdJVEhPVVQgdGhlIGJ1ZyIgaGVsbG8gJiYKKyAgICAgUEFSQTI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGdpdCBjaGVycnktcGljayAkSEFTSDMgJiYKKyAgICAgUEFSQTM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGdpdCBjaGVycnktcGljayAkSEFTSDQgJiYKKyAgICAgUEFSQTQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGdpdCBjaGVycnktcGljayAkSEFTSDYgJiYKKyAgICAgUEFSQTY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGdpdCByZXBsYWNlICRIQVNINiAkUEFSQTYgJiYKKyAgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorICAgICBjdXI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIHRlc3QgIiRjdXIiID0gIiRIQVNINyIgJiYKKyAgICAgZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAkUEFSQTIgJiYKKyAgICAgZ2l0IHJlbW90ZSBhZGQgY2xvbmVkIC4vY2xvbmVfZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gY2xvbmVkIHJlcG8nICcKKyAgICAgZ2l0IHB1c2ggY2xvbmVkICRIQVNINl46cmVmcy9oZWFkcy9wYXJhbGxlbCAmJgorICAgICAoCisJICBjZCBjbG9uZV9kaXIgJiYKKwkgIGdpdCBjaGVja291dCBwYXJhbGxlbCAmJgorCSAgZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAkUEFSQTIKKyAgICAgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGJyYW5jaCB3aXRoIHJlcGxhY2VtZW50JyAnCisgICAgIGdpdCBjYXQtZmlsZSBjb21taXQgJFBBUkEzIHwgZ3JlcCAiYXV0aG9yIEEgVSBUaG9yIiAmJgorICAgICBTPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCAkUEFSQTMgfCBzZWQgLWUgInMvQSBVL08vIiB8IGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLS1zdGRpbiAtdykgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGNvbW1pdCAkUyB8IGdyZXAgImF1dGhvciBPIFRob3IiICYmCisgICAgIGdpdCByZXBsYWNlICRQQVJBMyAkUyAmJgorICAgICBnaXQgc2hvdyAkSEFTSDZ+MiB8IGdyZXAgIk8gVGhvciIgJiYKKyAgICAgZ2l0IHNob3cgJFBBUkEzIHwgZ3JlcCAiTyBUaG9yIiAmJgorICAgICBnaXQgcHVzaCBjbG9uZWQgJEhBU0g2XjpyZWZzL2hlYWRzL3BhcmFsbGVsMiAmJgorICAgICAoCisJICBjZCBjbG9uZV9kaXIgJiYKKwkgIGdpdCBjaGVja291dCBwYXJhbGxlbDIgJiYKKwkgIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgJFBBUkEzICYmCisJICBnaXQgc2hvdyAkUEFSQTMgfCBncmVwICJBIFUgVGhvciIKKyAgICAgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBicmFuY2ggd2l0aCByZXBsYWNlbWVudCcgJworICAgICBnaXQgYnJhbmNoIHRvZmV0Y2ggJEhBU0g2ICYmCisgICAgICgKKwkgIGNkIGNsb25lX2RpciAmJgorCSAgZ2l0IGZldGNoIG9yaWdpbiByZWZzL2hlYWRzL3RvZmV0Y2g6cmVmcy9oZWFkcy9wYXJhbGxlbDMgJiYKKwkgIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSBwYXJhbGxlbDMgPm91dHB1dC50eHQgJiYKKwkgICEgZ3JlcCAkUEFSQTMgb3V0cHV0LnR4dCAmJgorCSAgZ2l0IHNob3cgJFBBUkEzID5wYXJhMy50eHQgJiYKKwkgIGdyZXAgIkEgVSBUaG9yIiBwYXJhMy50eHQgJiYKKwkgIGdpdCBmZXRjaCBvcmlnaW4gInJlZnMvcmVwbGFjZS8qOnJlZnMvcmVwbGFjZS8qIiAmJgorCSAgZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHBhcmFsbGVsMyA+b3V0cHV0LnR4dCAmJgorCSAgZ3JlcCAkUEFSQTMgb3V0cHV0LnR4dCAmJgorCSAgZ2l0IHNob3cgJFBBUkEzID5wYXJhMy50eHQgJiYKKwkgIGdyZXAgIk8gVGhvciIgcGFyYTMudHh0CisgICAgICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGFuZCByZXBsYWNlbWVudHMnICcKKyAgICAgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDcgJEhBU0gxICYmCisgICAgIHRlc3QgIiRQQVJBMyIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAmJgorICAgICBnaXQgYmlzZWN0IHJlc2V0ICYmCisgICAgIEdJVF9OT19SRVBMQUNFX09CSkVDVFM9MSBnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINyAkSEFTSDEgJiYKKyAgICAgdGVzdCAiJEhBU0g0IiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisgICAgIGdpdCBiaXNlY3QgcmVzZXQgJiYKKyAgICAgZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIGJpc2VjdCBzdGFydCAkSEFTSDcgJEhBU0gxICYmCisgICAgIHRlc3QgIiRIQVNINCIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAmJgorICAgICBnaXQgYmlzZWN0IHJlc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgYW5kIHJlcGxhY2VtZW50cycgJworCWdpdCAtLW5vLXJlcGxhY2Utb2JqZWN0cyByZXYtbGlzdCAtLW9iamVjdHMgSEVBRCB8CisJZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIHBhY2stb2JqZWN0cyB0ZXN0LSAmJgorCWdpdCBpbmRleC1wYWNrIHRlc3QtKi5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBqdXN0IGNvbW1pdHMnICcKKwllY2hvIHJlcGxhY2VkID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJUkVQTEFDRUQ9JChnaXQgcmV2LXBhcnNlIDpmaWxlKSAmJgorCW12IGZpbGUgZmlsZS5yZXBsYWNlZCAmJgorCisJZWNobyBvcmlnaW5hbCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCU9SSUdJTkFMPSQoZ2l0IHJldi1wYXJzZSA6ZmlsZSkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlcGxhY2UvJE9SSUdJTkFMICRSRVBMQUNFRCAmJgorCW12IGZpbGUgZmlsZS5vcmlnaW5hbCAmJgorCisJZ2l0IGNoZWNrb3V0IGZpbGUgJiYKKwl0ZXN0X2NtcCBmaWxlLnJlcGxhY2VkIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZWQgYW5kIHJlcGxhY2VtZW50IG9iamVjdHMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgbXl0YWcgJEhBU0gxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgSEVBRF57dHJlZX0gSEVBRH4xICYmCisJQkxPQj0kKGdpdCByZXYtcGFyc2UgOmZpbGUpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgSEVBRF4gJEJMT0IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLWYgb3B0aW9uIGJ5cGFzc2VzIHRoZSB0eXBlIGNoZWNrJyAnCisJZ2l0IHJlcGxhY2UgLWYgbXl0YWcgJEhBU0gxICYmCisJZ2l0IHJlcGxhY2UgLS1mb3JjZSBIRUFEXnt0cmVlfSBIRUFEfjEgJiYKKwlnaXQgcmVwbGFjZSAtZiBIRUFEXiAkQkxPQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2F0LWZpbGUgLS1iYXRjaCB3b3JrcyBvbiByZXBsYWNlIG9iamVjdHMnICcKKwlnaXQgcmVwbGFjZSB8IGdyZXAgJFBBUkEzICYmCisJZWNobyAkUEFSQTMgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tZm9ybWF0IGJvZ3VzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgLS1mb3JtYXQgYm9ndXMgPi9kZXYvbnVsbCAyPiYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1mb3JtYXQgc2hvcnQnICcKKwlnaXQgcmVwbGFjZSAtLWZvcm1hdD1zaG9ydCA+YWN0dWFsICYmCisJZ2l0IHJlcGxhY2UgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1mb3JtYXQgbWVkaXVtJyAnCisJSDE9JChnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgcmV2LXBhcnNlIEhFQUR+MSkgJiYKKwlIVD0kKGdpdCAtLW5vLXJlcGxhY2Utb2JqZWN0cyByZXYtcGFyc2UgSEVBRF57dHJlZX0pICYmCisJTVlUQUc9JChnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgcmV2LXBhcnNlIG15dGFnKSAmJgorCXsKKwkJZWNobyAiJEgxIC0+ICRCTE9CIiAmJgorCQllY2hvICIkQkxPQiAtPiAkUkVQTEFDRUQiICYmCisJCWVjaG8gIiRIVCAtPiAkSDEiICYmCisJCWVjaG8gIiRQQVJBMyAtPiAkUyIgJiYKKwkJZWNobyAiJE1ZVEFHIC0+ICRIQVNIMSIKKwl9IHwgc29ydCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmVwbGFjZSAtbCAtLWZvcm1hdCBtZWRpdW0gfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLWZvcm1hdCBsb25nJyAnCisJeworCQllY2hvICIkSDEgKGNvbW1pdCkgLT4gJEJMT0IgKGJsb2IpIiAmJgorCQllY2hvICIkQkxPQiAoYmxvYikgLT4gJFJFUExBQ0VEIChibG9iKSIgJiYKKwkJZWNobyAiJEhUICh0cmVlKSAtPiAkSDEgKGNvbW1pdCkiICYmCisJCWVjaG8gIiRQQVJBMyAoY29tbWl0KSAtPiAkUyAoY29tbWl0KSIgJiYKKwkJZWNobyAiJE1ZVEFHICh0YWcpIC0+ICRIQVNIMSAoY29tbWl0KSIKKwl9IHwgc29ydCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmVwbGFjZSAtLWZvcm1hdD1sb25nIHwgc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZha2UgZWRpdG9ycycgJworCXdyaXRlX3NjcmlwdCBmYWtlZWRpdG9yIDw8LVxFT0YgJiYKKwkJc2VkIC1lICJzL0EgVSBUaG9yL0EgZmFrZSBUaG9yLyIgIiQxIiA+IiQxLm5ldyIKKwkJbXYgIiQxLm5ldyIgIiQxIgorCUVPRgorCXdyaXRlX3NjcmlwdCBmYWlsaW5nZmFrZWVkaXRvciA8PC1cRU9GCisJCS4vZmFrZWVkaXRvciAiJEAiCisJCWZhbHNlCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZWRpdCB3aXRoIGFuZCB3aXRob3V0IGFscmVhZHkgcmVwbGFjZWQgb2JqZWN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9FRElUT1I9Li9mYWtlZWRpdG9yIGdpdCByZXBsYWNlIC0tZWRpdCAiJFBBUkEzIiAmJgorCUdJVF9FRElUT1I9Li9mYWtlZWRpdG9yIGdpdCByZXBsYWNlIC0tZm9yY2UgLS1lZGl0ICIkUEFSQTMiICYmCisJZ2l0IHJlcGxhY2UgLWwgfCBncmVwICIkUEFSQTMiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJFBBUkEzIiB8IGdyZXAgIkEgZmFrZSBUaG9yIiAmJgorCWdpdCByZXBsYWNlIC1kICIkUEFSQTMiICYmCisJR0lUX0VESVRPUj0uL2Zha2VlZGl0b3IgZ2l0IHJlcGxhY2UgLS1lZGl0ICIkUEFSQTMiICYmCisJZ2l0IHJlcGxhY2UgLWwgfCBncmVwICIkUEFSQTMiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJFBBUkEzIiB8IGdyZXAgIkEgZmFrZSBUaG9yIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWVkaXQgYW5kIGNoYW5nZSBub3RoaW5nIG9yIGNvbW1hbmQgZmFpbGVkJyAnCisJZ2l0IHJlcGxhY2UgLWQgIiRQQVJBMyIgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX0VESVRPUj10cnVlIGdpdCByZXBsYWNlIC0tZWRpdCAiJFBBUkEzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfRURJVE9SPSIuL2ZhaWxpbmdmYWtlZWRpdG9yIiBnaXQgcmVwbGFjZSAtLWVkaXQgIiRQQVJBMyIgJiYKKwlHSVRfRURJVE9SPS4vZmFrZWVkaXRvciBnaXQgcmVwbGFjZSAtLWVkaXQgIiRQQVJBMyIgJiYKKwlnaXQgcmVwbGFjZSAtbCB8IGdyZXAgIiRQQVJBMyIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICIkUEFSQTMiIHwgZ3JlcCAiQSBmYWtlIFRob3IiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2UgcmVmIGNsZWFudXAnICcKKwl0ZXN0IC1uICIkKGdpdCByZXBsYWNlKSIgJiYKKwlnaXQgcmVwbGFjZSAtZCAkKGdpdCByZXBsYWNlKSAmJgorCXRlc3QgLXogIiQoZ2l0IHJlcGxhY2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYWZ0IHdpdGggYW5kIHdpdGhvdXQgYWxyZWFkeSByZXBsYWNlZCBvYmplY3QnICcKKwlnaXQgbG9nIC0tb25lbGluZSA+bG9nICYmCisJdGVzdF9saW5lX2NvdW50ID0gNyBsb2cgJiYKKwlnaXQgcmVwbGFjZSAtLWdyYWZ0ICRIQVNINSAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5sb2cgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGxvZyAmJgorCWNvbW1pdF9oYXNfcGFyZW50cyAkSEFTSDUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSAtLWdyYWZ0ICRIQVNINSAkSEFTSDQgJEhBU0gzICYmCisJZ2l0IHJlcGxhY2UgLS1mb3JjZSAtZyAkSEFTSDUgJEhBU0g0ICRIQVNIMyAmJgorCWNvbW1pdF9oYXNfcGFyZW50cyAkSEFTSDUgJEhBU0g0ICRIQVNIMyAmJgorCWdpdCByZXBsYWNlIC1kICRIQVNINQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYWZ0IHVzaW5nIGEgdGFnIGFzIHRoZSBuZXcgcGFyZW50JyAnCisJZ2l0IHRhZyBuZXdfcGFyZW50ICRIQVNINSAmJgorCWdpdCByZXBsYWNlIC0tZ3JhZnQgJEhBU0g3IG5ld19wYXJlbnQgJiYKKwljb21taXRfaGFzX3BhcmVudHMgJEhBU0g3ICRIQVNINSAmJgorCWdpdCByZXBsYWNlIC1kICRIQVNINyAmJgorCWdpdCB0YWcgLWEgLW0gImFubm90YXRlZCBuZXcgcGFyZW50IHRhZyIgYW5ub3RhdGVkX25ld19wYXJlbnQgJEhBU0g1ICYmCisJZ2l0IHJlcGxhY2UgLS1ncmFmdCAkSEFTSDcgYW5ub3RhdGVkX25ld19wYXJlbnQgJiYKKwljb21taXRfaGFzX3BhcmVudHMgJEhBU0g3ICRIQVNINSAmJgorCWdpdCByZXBsYWNlIC1kICRIQVNINworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYWZ0IHVzaW5nIGEgdGFnIGFzIHRoZSByZXBsYWNlZCBvYmplY3QnICcKKwlnaXQgdGFnIHJlcGxhY2VkX29iamVjdCAkSEFTSDcgJiYKKwlnaXQgcmVwbGFjZSAtLWdyYWZ0IHJlcGxhY2VkX29iamVjdCAkSEFTSDUgJiYKKwljb21taXRfaGFzX3BhcmVudHMgJEhBU0g3ICRIQVNINSAmJgorCWdpdCByZXBsYWNlIC1kICRIQVNINyAmJgorCWdpdCB0YWcgLWEgLW0gImFubm90YXRlZCByZXBsYWNlZCBvYmplY3QgdGFnIiBhbm5vdGF0ZWRfcmVwbGFjZWRfb2JqZWN0ICRIQVNINyAmJgorCWdpdCByZXBsYWNlIC0tZ3JhZnQgYW5ub3RhdGVkX3JlcGxhY2VkX29iamVjdCAkSEFTSDUgJiYKKwljb21taXRfaGFzX3BhcmVudHMgJEhBU0g3ICRIQVNINSAmJgorCWdpdCByZXBsYWNlIC1kICRIQVNINworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2V0IHVwIGEgc2lnbmVkIGNvbW1pdCcgJworCWVjaG8gImxpbmUgMTciID4+aGVsbG8gJiYKKwllY2hvICJsaW5lIDE4IiA+PmhlbGxvICYmCisJZ2l0IGFkZCBoZWxsbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1xdWlldCAtUyAtbSAiaGVsbG86IDIgbW9yZSBsaW5lcyBpbiBhIHNpZ25lZCBjb21taXQiICYmCisJSEFTSDg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IHZlcmlmeS1jb21taXQgJEhBU0g4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICctLWdyYWZ0IHdpdGggYSBzaWduZWQgY29tbWl0JyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCAkSEFTSDggPm9yaWcgJiYKKwlnaXQgcmVwbGFjZSAtLWdyYWZ0ICRIQVNIOCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgJEhBU0g4ID5yZXBsICYmCisJY29tbWl0X2hhc19wYXJlbnRzICRIQVNIOCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktY29tbWl0ICRIQVNIOCAmJgorCXNlZCAtbiAtZSAiL150cmVlIC9wIiAtZSAiL15hdXRob3IgL3AiIC1lICIvXmNvbW1pdHRlciAvcCIgb3JpZyA+ZXhwZWN0ZWQgJiYKKwllY2hvID4+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgIi9eJC9xIiByZXBsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgcmVwbGFjZSAtZCAkSEFTSDgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3NldCB1cCBhIG1lcmdlIGNvbW1pdCB3aXRoIGEgbWVyZ2V0YWcnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdF9icmFuY2ggSEVBRH4yICYmCisJZWNobyAibGluZSAxIGZyb20gdGVzdCBicmFuY2giID4+aGVsbG8gJiYKKwllY2hvICJsaW5lIDIgZnJvbSB0ZXN0IGJyYW5jaCIgPj5oZWxsbyAmJgorCWdpdCBhZGQgaGVsbG8gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJoZWxsbzogMiBtb3JlIGxpbmVzIGZyb20gYSB0ZXN0IGJyYW5jaCIgJiYKKwlIQVNIOT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgdGFnIC1zIC1tICJ0YWcgZm9yIHRlc3Rpbmcgd2l0aCBhIG1lcmdldGFnIiB0ZXN0X3RhZyBIRUFEICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIHRlc3RfdGFnICYmCisJSEFTSDEwPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgJEhBU0gxMCB8IGdyZXAgIl5tZXJnZXRhZyBvYmplY3QiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICctLWdyYWZ0IG9uIGEgY29tbWl0IHdpdGggYSBtZXJnZXRhZycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIC0tZ3JhZnQgJEhBU0gxMCAkSEFTSDheMSAmJgorCWdpdCByZXBsYWNlIC0tZ3JhZnQgJEhBU0gxMCAkSEFTSDheMSAkSEFTSDkgJiYKKwlnaXQgcmVwbGFjZSAtZCAkSEFTSDEwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udmVydC1ncmFmdC1maWxlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHdpdGgtZ3JhZnQtZmlsZSAmJgorCXRlc3RfY29tbWl0IHJvb3QyICYmCisJZ2l0IHJlc2V0IC0taGFyZCByb290Ml4gJiYKKwl0ZXN0X2NvbW1pdCByb290MSAmJgorCXRlc3RfY29tbWl0IGFmdGVyLXJvb3QxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1tIG1lcmdlLXJvb3QyIHJvb3QyICYmCisKKwk6IGFkZCBhbmQgY29udmVydCBncmFmdCBmaWxlICYmCisJcHJpbnRmICIlc1xuJXMgJXNcblxuIyBjb21tZW50XG4lc1xuIiBcCisJCSQoZ2l0IHJldi1wYXJzZSBIRUFEXl4gSEVBRF4gSEVBRF5eIEhFQUReMikgXAorCQk+LmdpdC9pbmZvL2dyYWZ0cyAmJgorCWdpdCBzdGF0dXMgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJoaW50Oi4qZ3JhZnRzIGlzIGRlcHJlY2F0ZWQiIHN0ZGVyciAmJgorCWdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlIDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJoaW50Oi4qZ3JhZnRzIGlzIGRlcHJlY2F0ZWQiIHN0ZGVyciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvaW5mby9ncmFmdHMgJiYKKworCTogdmVyaWZ5IHRoYXQgdGhlIGhpc3RvcnkgaXMgbm93ICJncmFmdGVkIiAmJgorCWdpdCByZXYtbGlzdCBIRUFEID5vdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IG91dCAmJgorCisJOiBjcmVhdGUgaW52YWxpZCBncmFmdCBmaWxlIGFuZCB2ZXJpZnkgdGhhdCBpdCBpcyBub3QgZGVsZXRlZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9pbmZvL2dyYWZ0cyIgJiYKKwllY2hvICRFTVBUWV9CTE9CICRFTVBUWV9UUkVFID4uZ2l0L2luZm8vZ3JhZnRzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICIkRU1QVFlfQkxPQiAkRU1QVFlfVFJFRSIgZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiJEVNUFRZX0JMT0IgJEVNUFRZX1RSRUUiIC5naXQvaW5mby9ncmFmdHMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDYwLW1lcmdlLWluZGV4LnNoIGIvdC90NjA2MC1tZXJnZS1pbmRleC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZGYzNGYwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjA2MC1tZXJnZS1pbmRleC5zaApAQCAtMCwwICsxLDk5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgZ2l0IG1lcmdlLWluZGV4IC8gZ2l0LW1lcmdlLW9uZS1maWxlIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpdmVyZ2luZyBicmFuY2hlcycgJworCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwOyBkbworCQllY2hvICRpCisJZG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCWdpdCB0YWcgYmFzZSAmJgorCXNlZCBzLzIvdHdvLyA8ZmlsZSA+dG1wICYmCisJbXYgdG1wIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWdpdCB0YWcgdHdvICYmCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyIEhFQUReICYmCisJc2VkIHMvMTAvdGVuLyA8ZmlsZSA+dG1wICYmCisJbXYgdG1wIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHRlbiAmJgorCWdpdCB0YWcgdGVuCisnCisKK2NhdCA+ZXhwZWN0LW1lcmdlZCA8PCdFT0YnCisxCit0d28KKzMKKzQKKzUKKzYKKzcKKzgKKzkKK3RlbgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSBkb2VzIG5vdCByZXNvbHZlIGNvbnRlbnQgbWVyZ2UnICcKKwlnaXQgcmVhZC10cmVlIC1pIC1tIGJhc2UgdGVuIHR3byAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLS1kaWZmLWZpbHRlcj1VID51bm1lcmdlZCAmJgorCXRlc3RfY21wIGV4cGVjdCB1bm1lcmdlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIHJlc29sdmVzJyAnCisJZ2l0IG1lcmdlLWluZGV4IGdpdC1tZXJnZS1vbmUtZmlsZSAtYSAmJgorCWdpdCBkaWZmLWZpbGVzIC0tbmFtZS1vbmx5IC0tZGlmZi1maWx0ZXI9VSA+dW5tZXJnZWQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgdW5tZXJnZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QtbWVyZ2VkIGZpbGUgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiA6ZmlsZSA+ZmlsZS1pbmRleCAmJgorCXRlc3RfY21wIGV4cGVjdC1tZXJnZWQgZmlsZS1pbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBiYXJlIG1lcmdlJyAnCisJZ2l0IGNsb25lIC0tYmFyZSAuIGJhcmUuZ2l0ICYmCisJKGNkIGJhcmUuZ2l0ICYmCisJIEdJVF9JTkRFWF9GSUxFPSRQV0QvbWVyZ2UuaW5kZXggJiYKKwkgZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJIGdpdCByZWFkLXRyZWUgLWkgLW0gYmFzZSB0ZW4gdHdvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1vbmUtZmlsZSBmYWlscyB3aXRob3V0IGEgd29yayB0cmVlJyAnCisJKGNkIGJhcmUuZ2l0ICYmCisJIEdJVF9JTkRFWF9GSUxFPSRQV0QvbWVyZ2UuaW5kZXggJiYKKwkgZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1pbmRleCBnaXQtbWVyZ2Utb25lLWZpbGUgLWEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW9uZS1maWxlIHJlc3BlY3RzIEdJVF9XT1JLX1RSRUUnICcKKwkoY2QgYmFyZS5naXQgJiYKKwkgbWtkaXIgd29yayAmJgorCSBHSVRfV09SS19UUkVFPSRQV0Qvd29yayAmJgorCSBleHBvcnQgR0lUX1dPUktfVFJFRSAmJgorCSBHSVRfSU5ERVhfRklMRT0kUFdEL21lcmdlLmluZGV4ICYmCisJIGV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCSBnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIC1hICYmCisJIGdpdCBjYXQtZmlsZSBibG9iIDpmaWxlID53b3JrL2ZpbGUtaW5kZXgKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0LW1lcmdlZCBiYXJlLmdpdC93b3JrL2ZpbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3QtbWVyZ2VkIGJhcmUuZ2l0L3dvcmsvZmlsZS1pbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1vbmUtZmlsZSByZXNwZWN0cyBjb3JlLndvcmt0cmVlJyAnCisJbWtkaXIgc3ViZGlyICYmCisJZ2l0IGNsb25lIC4gc3ViZGlyL2NoaWxkICYmCisJKGNkIHN1YmRpciAmJgorCSBHSVRfRElSPSRQV0QvY2hpbGQvLmdpdCAmJgorCSBleHBvcnQgR0lUX0RJUiAmJgorCSBnaXQgY29uZmlnIGNvcmUud29ya3RyZWUgIiRQV0QvY2hpbGQiICYmCisJIGdpdCByZWFkLXRyZWUgLWkgLW0gYmFzZSB0ZW4gdHdvICYmCisJIGdpdCBtZXJnZS1pbmRleCBnaXQtbWVyZ2Utb25lLWZpbGUgLWEgJiYKKwkgZ2l0IGNhdC1maWxlIGJsb2IgOmZpbGUgPmZpbGUtaW5kZXgKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0LW1lcmdlZCBzdWJkaXIvY2hpbGQvZmlsZSAmJgorCXRlc3RfY21wIGV4cGVjdC1tZXJnZWQgc3ViZGlyL2ZpbGUtaW5kZXgKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MTAwLXJldi1saXN0LWluLW9yZGVyLnNoIGIvdC90NjEwMC1yZXYtbGlzdC1pbi1vcmRlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMmJiMGE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjEwMC1yZXYtbGlzdC1pbi1vcmRlci5zaApAQCAtMCwwICsxLDc3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmV2LWxpc3QgdGVzdGluZyBpbi1jb21taXQtb3JkZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIGNvbW1pdCBoaXN0b3J5IHdpdGggdHJlZXMsIGJsb2JzJyAnCisJZm9yIHggaW4gb25lIHR3byB0aHJlZSBmb3VyCisJZG8KKwkJZWNobyAkeCA+JHggJiYKKwkJZ2l0IGFkZCAkeCAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgZmlsZSAkeCIgfHwKKwkJcmV0dXJuIDEKKwlkb25lICYmCisJZm9yIHggaW4gZm91ciB0aHJlZQorCWRvCisJCWdpdCBybSAkeCAmJgorCQlnaXQgY29tbWl0IC1tICJyZW1vdmUgJHgiIHx8CisJCXJldHVybiAxCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWluLWNvbW1pdC1vcmRlcicgJworCWdpdCByZXYtbGlzdCAtLWluLWNvbW1pdC1vcmRlciAtLW9iamVjdHMgSEVBRCA+YWN0dWFsLnJhdyAmJgorCWN1dCAtYyAxLTQwID5hY3R1YWwgPGFjdHVhbC5yYXcgJiYKKworCWdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrPSIlKG9iamVjdG5hbWUpIiA+ZXhwZWN0LnJhdyA8PC1cRU9GICYmCisJCUhFQURee2NvbW1pdH0KKwkJSEVBRF57dHJlZX0KKwkJSEVBRF57dHJlZX06b25lCisJCUhFQURee3RyZWV9OnR3bworCQlIRUFEfjFee2NvbW1pdH0KKwkJSEVBRH4xXnt0cmVlfQorCQlIRUFEfjFee3RyZWV9OnRocmVlCisJCUhFQUR+Ml57Y29tbWl0fQorCQlIRUFEfjJee3RyZWV9CisJCUhFQUR+Ml57dHJlZX06Zm91cgorCQlIRUFEfjNee2NvbW1pdH0KKwkJIyBIRUFEfjNee3RyZWV9IHNraXBwZWQsIHNhbWUgYXMgSEVBRH4xXnt0cmVlfQorCQlIRUFEfjRee2NvbW1pdH0KKwkJIyBIRUFEfjRee3RyZWV9IHNraXBwZWQsIHNhbWUgYXMgSEVBRF57dHJlZX0KKwkJSEVBRH41Xntjb21taXR9CisJCUhFQUR+NV57dHJlZX0KKwlFT0YKKwlncmVwIC12ICIjIiA+ZXhwZWN0IDxleHBlY3QucmF3ICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IGxpc3RzIGJsb2JzIGFuZCB0cmVlcyBhZnRlciBjb21taXRzJyAnCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBIRUFEID5hY3R1YWwucmF3ICYmCisJY3V0IC1jIDEtNDAgPmFjdHVhbCA8YWN0dWFsLnJhdyAmJgorCisJZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2s9IiUob2JqZWN0bmFtZSkiID5leHBlY3QucmF3IDw8LVxFT0YgJiYKKwkJSEVBRF57Y29tbWl0fQorCQlIRUFEfjFee2NvbW1pdH0KKwkJSEVBRH4yXntjb21taXR9CisJCUhFQUR+M157Y29tbWl0fQorCQlIRUFEfjRee2NvbW1pdH0KKwkJSEVBRH41Xntjb21taXR9CisJCUhFQURee3RyZWV9CisJCUhFQURee3RyZWV9Om9uZQorCQlIRUFEXnt0cmVlfTp0d28KKwkJSEVBRH4xXnt0cmVlfQorCQlIRUFEfjFee3RyZWV9OnRocmVlCisJCUhFQUR+Ml57dHJlZX0KKwkJSEVBRH4yXnt0cmVlfTpmb3VyCisJCSMgSEVBRH4zXnt0cmVlfSBza2lwcGVkLCBzYW1lIGFzIEhFQUR+MV57dHJlZX0KKwkJIyBIRUFEfjRee3RyZWV9IHNraXBwZWQsIHNhbWUgYXMgSEVBRF57dHJlZX0KKwkJSEVBRH41Xnt0cmVlfQorCUVPRgorCWdyZXAgLXYgIiMiID5leHBlY3QgPGV4cGVjdC5yYXcgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MTAxLXJldi1wYXJzZS1wYXJlbnRzLnNoIGIvdC90NjEwMS1yZXYtcGFyc2UtcGFyZW50cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NjgzZTRhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjEwMS1yZXYtcGFyc2UtcGFyZW50cy5zaApAQCAtMCwwICsxLDIyNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKb2hhbm5lcyBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IHJldi1wYXJzZSB3aXRoIGRpZmZlcmVudCBwYXJlbnQgb3B0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfY21wX3Jldl9vdXRwdXQgKCkgeworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIiA+ZXhwZWN0ICYmCisJZXZhbCAiJDIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgc3RhcnQgJiYKKwl0ZXN0X2NvbW1pdCBzZWNvbmQgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gdG1wICYmCisJdGVzdF9jb21taXQgc3RhcnQyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSAtbSBuZXh0IC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyBzdGFydDIgJiYKKwl0ZXN0X2NvbW1pdCBmaW5hbCAmJgorCisJdGVzdF9zZXEgNDAgfAorCXdoaWxlIHJlYWQgaQorCWRvCisJCWdpdCBjaGVja291dCAtLW9ycGhhbiAiYiRpIiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICIkaSIgJiYKKwkJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCQlwcmludGYgIiRjb21taXQgIiA+Pi5naXQvaW5mby9ncmFmdHMKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IGlzIHZhbGlkJyAnCisJZ2l0IHJldi1wYXJzZSBzdGFydCB8IGdyZXAgIl5bMC05YS1mXVx7NDBcfSQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0XjAnICcKKwl0ZXN0X2NtcF9yZXZfb3V0cHV0IHRhZ3Mvc3RhcnQgImdpdCByZXYtcGFyc2Ugc3RhcnReMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnReMSBub3QgdmFsaWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHN0YXJ0XjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2Vjb25kXjEgPSBzZWNvbmReJyAnCisJdGVzdF9jbXBfcmV2X291dHB1dCBzZWNvbmReICJnaXQgcmV2LXBhcnNlIHNlY29uZF4xIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5hbF4xXjFeMScgJworCXRlc3RfY21wX3Jldl9vdXRwdXQgc3RhcnQgImdpdCByZXYtcGFyc2UgZmluYWxeMV4xXjEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeMV4xID0gZmluYWxeXl4nICcKKwl0ZXN0X2NtcF9yZXZfb3V0cHV0IGZpbmFsXl5eICJnaXQgcmV2LXBhcnNlIGZpbmFsXjFeMV4xIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5hbF4xXjInICcKKwl0ZXN0X2NtcF9yZXZfb3V0cHV0IHN0YXJ0MiAiZ2l0IHJldi1wYXJzZSBmaW5hbF4xXjIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeMiAhPSBmaW5hbF4xXjEnICcKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBmaW5hbF4xXjIpICE9ICQoZ2l0IHJldi1wYXJzZSBmaW5hbF4xXjEpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeMyBub3QgdmFsaWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGZpbmFsXjFeMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXZlcmlmeSBzdGFydDJeMScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc3RhcnQyXjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS12ZXJpZnkgc3RhcnQyXjAnICcKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHN0YXJ0Ml4wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeQCA9IGZpbmFsXjFeMSBmaW5hbF4xXjInICcKKwlnaXQgcmV2LXBhcnNlIGZpbmFsXjFeMSBmaW5hbF4xXjIgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgZmluYWxeMV5AID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljIGZpbmFsXjFeQCA9IGZpbmFsXjFeMSBmaW5hbF4xXjInICcKKwlnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgZmluYWxeMV4xIGZpbmFsXjFeMiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIGZpbmFsXjFeQCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5hbF4xXiEgPSBmaW5hbF4xIF5maW5hbF4xXjEgXmZpbmFsXjFeMicgJworCWdpdCByZXYtcGFyc2UgZmluYWxeMSBeZmluYWxeMV4xIF5maW5hbF4xXjIgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgZmluYWxeMV4hID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljIGZpbmFsXjFeISA9IGZpbmFsXjEgXmZpbmFsXjFeMSBeZmluYWxeMV4yJyAnCisJZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIGZpbmFsXjEgXmZpbmFsXjFeMSBeZmluYWxeMV4yID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgZmluYWxeMV4hID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhcmdlIGdyYWZ0IG9jdG9wdXMnICcKKwl0ZXN0X2NtcF9yZXZfb3V0cHV0IGIzMSAiZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBiMV4zMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrIGZvciBuZXh0IHRlc3QnICcKKwlnaXQgcmVwYWNrIC1hIC1kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0IFNIQS0xIHdvcmtzJyAnCisJc3RhcnQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHN0YXJ0KSAmJgorCXRlc3RfY21wX3Jldl9vdXRwdXQgc3RhcnQgImdpdCByZXYtcGFyc2UgJHtzdGFydCU/fSIKKycKKworIyByZXZeLSB0ZXN0czsgd2UgY2FuIHVzZSBhIHNpbXBsZXIgc2V0dXAgZm9yIHRoZXNlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciByZXZeLSB0ZXN0cycgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmCisKKwkjIE1lcmdlIGluIGEgYnJhbmNoIGZvciB0ZXN0aW5nIHJldl4tCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCAmJgorCWdpdCBjaGVja291dCBIRUFEXl4gJiYKKwlnaXQgbWVyZ2UgLW0gbWVyZ2UgLS1uby1lZGl0IC0tbm8tZmYgYnJhbmNoICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1lcmdlCisnCisKKyMgVGhlIG1lcmdlZCBicmFuY2ggaGFzIDIgY29tbWl0cyArIHRoZSBtZXJnZQordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1jb3VudCBtZXJnZV4tID0gbWVyZ2VeLi5tZXJnZScgJworCWdpdCByZXYtbGlzdCAtLWNvdW50IG1lcmdlXi4ubWVyZ2UgPmV4cGVjdCAmJgorCWVjaG8gMyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIEFsbCByZXZeLSByZXYtcGFyc2UgdGVzdHMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIG1lcmdlXi0gPSBtZXJnZV4uLm1lcmdlJyAnCisJZ2l0IHJldi1wYXJzZSBtZXJnZV4uLm1lcmdlID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIG1lcmdlXi0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIG1lcmdlXi0xID0gbWVyZ2VeLi5tZXJnZScgJworCWdpdCByZXYtcGFyc2UgbWVyZ2VeMS4ubWVyZ2UgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgbWVyZ2VeLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIG1lcmdlXi0yID0gbWVyZ2VeMi4ubWVyZ2UnICcKKwlnaXQgcmV2LXBhcnNlIG1lcmdlXjIuLm1lcmdlID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIG1lcmdlXi0yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljIG1lcmdlXi0xID0gbWVyZ2VeMS4ubWVyZ2UnICcKKwlnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgbWVyZ2VeMS4ubWVyZ2UgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYyBtZXJnZV4tMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgbWVyZ2VeLTAgKGludmFsaWQgcGFyZW50KScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWVyZ2VeLTAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIG1lcmdlXi0zIChpbnZhbGlkIHBhcmVudCknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIG1lcmdlXi0zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSBtZXJnZV4tXiAoZ2FyYmFnZSBhZnRlciBeLSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIG1lcmdlXi1eCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSBtZXJnZV4tMXggKGdhcmJhZ2UgYWZ0ZXIgXi0xKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWVyZ2VeLTF4CisnCisKKyMgQWxsIHJldl4tIHJldi1saXN0IHRlc3RzIChzaG91bGQgYmUgbW9zdGx5IHRoZSBzYW1lIGFzIHJldi1wYXJzZTsgdGhlIHJlYXNvbgorIyBmb3IgdGhlIGR1cGxpY2F0aW9uIGlzIHRoYXQgcmV2LXBhcnNlIGFuZCByZXYtbGlzdCB1c2UgZGlmZmVyZW50IHBhcnNlcnMpLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBtZXJnZV4tID0gbWVyZ2VeLi5tZXJnZScgJworCWdpdCByZXYtbGlzdCBtZXJnZV4uLm1lcmdlID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgbWVyZ2VeLSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBtZXJnZV4tMSA9IG1lcmdlXjEuLm1lcmdlJyAnCisJZ2l0IHJldi1saXN0IG1lcmdlXjEuLm1lcmdlID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgbWVyZ2VeLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgbWVyZ2VeLTIgPSBtZXJnZV4yLi5tZXJnZScgJworCWdpdCByZXYtbGlzdCBtZXJnZV4yLi5tZXJnZSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IG1lcmdlXi0yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG1lcmdlXi0wIChpbnZhbGlkIHBhcmVudCknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgbWVyZ2VeLTAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgbWVyZ2VeLTMgKGludmFsaWQgcGFyZW50KScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCBtZXJnZV4tMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBtZXJnZV4tXiAoZ2FyYmFnZSBhZnRlciBeLSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgbWVyZ2VeLV4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgbWVyZ2VeLTF4IChnYXJiYWdlIGFmdGVyIF4tMSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgbWVyZ2VeLTF4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAkZ2FyYmFnZV5AIGRvZXMgbm90IHNlZ2ZhdWx0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAkRU1QVFlfVFJFRV5ACisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAkZ2FyYmFnZS4uLiRnYXJiYWdlIGRvZXMgbm90IHNlZ2ZhdWx0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAkRU1QVFlfVFJFRS4uLiRFTVBUWV9CTE9CCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjEwMi1yZXYtbGlzdC11bmV4cGVjdGVkLW9iamVjdHMuc2ggYi90L3Q2MTAyLXJldi1saXN0LXVuZXhwZWN0ZWQtb2JqZWN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MmNkZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjEwMi1yZXYtbGlzdC11bmV4cGVjdGVkLW9iamVjdHMuc2gKQEAgLTAsMCArMSwxMjcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmV2LWxpc3Qgc2hvdWxkIGhhbmRsZSB1bmV4cGVjdGVkIG9iamVjdCB0eXBlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHdlbGwtZm9ybWVkIG9iamVjdHMnICcKKwlibG9iPSIkKHByaW50ZiAiZm9vIiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSIgJiYKKwl0cmVlPSIkKHByaW50ZiAiMTAwNjQ0IGJsb2IgJGJsb2JcdGZvbyIgfCBnaXQgbWt0cmVlKSIgJiYKKwljb21taXQ9IiQoZ2l0IGNvbW1pdC10cmVlICR0cmVlIC1tICJmaXJzdCBjb21taXQiKSIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICRjb21taXQgPmdvb2QtY29tbWl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHVuZXhwZWN0ZWQgbm9uLWJsb2IgZW50cnknICcKKwlwcmludGYgIjEwMDY0NCBmb29cMCQoZWNobyAkdHJlZSB8IGhleDJvY3QpIiA+YnJva2VuLXRyZWUgJiYKKwlicm9rZW5fdHJlZT0iJChnaXQgaGFzaC1vYmplY3QgLXcgLS1saXRlcmFsbHkgLXQgdHJlZSBicm9rZW4tdHJlZSkiCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3RyYXZlcnNlIHVuZXhwZWN0ZWQgbm9uLWJsb2IgZW50cnkgKGxvbmUpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkYnJva2VuX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhdmVyc2UgdW5leHBlY3RlZCBub24tYmxvYiBlbnRyeSAoc2VlbiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzICR0cmVlICRicm9rZW5fdHJlZSA+b3V0cHV0IDI+JjEgJiYKKwl0ZXN0X2kxOG5ncmVwICJpcyBub3QgYSBibG9iIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdW5leHBlY3RlZCBub24tdHJlZSBlbnRyeScgJworCXByaW50ZiAiNDAwMDAgZm9vXDAkKGVjaG8gJGJsb2IgfCBoZXgyb2N0KSIgPmJyb2tlbi10cmVlICYmCisJYnJva2VuX3RyZWU9IiQoZ2l0IGhhc2gtb2JqZWN0IC13IC0tbGl0ZXJhbGx5IC10IHRyZWUgYnJva2VuLXRyZWUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmF2ZXJzZSB1bmV4cGVjdGVkIG5vbi10cmVlIGVudHJ5IChsb25lKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgJGJyb2tlbl90cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYXZlcnNlIHVuZXhwZWN0ZWQgbm9uLXRyZWUgZW50cnkgKHNlZW4pJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkYmxvYiAkYnJva2VuX3RyZWUgPm91dHB1dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAiaXMgbm90IGEgdHJlZSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHVuZXhwZWN0ZWQgbm9uLWNvbW1pdCBwYXJlbnQnICcKKwlzZWQgIi9eYXV0aG9yLyB7IGg7IHMvLiovcGFyZW50ICRibG9iLzsgRzsgfSIgPGdvb2QtY29tbWl0IFwKKwkJPmJyb2tlbi1jb21taXQgJiYKKwlicm9rZW5fY29tbWl0PSIkKGdpdCBoYXNoLW9iamVjdCAtdyAtLWxpdGVyYWxseSAtdCBjb21taXQgXAorCQlicm9rZW4tY29tbWl0KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhdmVyc2UgdW5leHBlY3RlZCBub24tY29tbWl0IHBhcmVudCAobG9uZSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzICRicm9rZW5fY29tbWl0ID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdCBhIGNvbW1pdCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYXZlcnNlIHVuZXhwZWN0ZWQgbm9uLWNvbW1pdCBwYXJlbnQgKHNlZW4pJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkYmxvYiAkYnJva2VuX2NvbW1pdCBcCisJCT5vdXRwdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdCBhIGNvbW1pdCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHVuZXhwZWN0ZWQgbm9uLXRyZWUgcm9vdCcgJworCXNlZCAtZSAicy8kdHJlZS8kYmxvYi8iIDxnb29kLWNvbW1pdCA+YnJva2VuLWNvbW1pdCAmJgorCWJyb2tlbl9jb21taXQ9IiQoZ2l0IGhhc2gtb2JqZWN0IC13IC0tbGl0ZXJhbGx5IC10IGNvbW1pdCBcCisJCWJyb2tlbi1jb21taXQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmF2ZXJzZSB1bmV4cGVjdGVkIG5vbi10cmVlIHJvb3QgKGxvbmUpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkYnJva2VuX2NvbW1pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmF2ZXJzZSB1bmV4cGVjdGVkIG5vbi10cmVlIHJvb3QgKHNlZW4pJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkYmxvYiAkYnJva2VuX2NvbW1pdCBcCisJCT5vdXRwdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdCBhIHRyZWUiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB1bmV4cGVjdGVkIG5vbi1jb21taXQgdGFnJyAnCisJZ2l0IHRhZyAtYSAtbSAidGFnZ2VkIGNvbW1pdCIgdGFnICRjb21taXQgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIHRhZyA+Z29vZC10YWcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB0YWcgLWQgdGFnIiAmJgorCXNlZCAtZSAicy8kY29tbWl0LyRibG9iLyIgPGdvb2QtdGFnID5icm9rZW4tdGFnICYmCisJdGFnPSQoZ2l0IGhhc2gtb2JqZWN0IC13IC0tbGl0ZXJhbGx5IC10IHRhZyBicm9rZW4tdGFnKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmF2ZXJzZSB1bmV4cGVjdGVkIG5vbi1jb21taXQgdGFnIChsb25lKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgJHRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmF2ZXJzZSB1bmV4cGVjdGVkIG5vbi1jb21taXQgdGFnIChzZWVuKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgJGJsb2IgJHRhZyA+b3V0cHV0IDI+JjEgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3QgYSBjb21taXQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB1bmV4cGVjdGVkIG5vbi10cmVlIHRhZycgJworCWdpdCB0YWcgLWEgLW0gInRhZ2dlZCB0cmVlIiB0YWcgJHRyZWUgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIHRhZyA+Z29vZC10YWcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB0YWcgLWQgdGFnIiAmJgorCXNlZCAtZSAicy8kdHJlZS8kYmxvYi8iIDxnb29kLXRhZyA+YnJva2VuLXRhZyAmJgorCXRhZz0kKGdpdCBoYXNoLW9iamVjdCAtdyAtLWxpdGVyYWxseSAtdCB0YWcgYnJva2VuLXRhZykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhdmVyc2UgdW5leHBlY3RlZCBub24tdHJlZSB0YWcgKGxvbmUpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYXZlcnNlIHVuZXhwZWN0ZWQgbm9uLXRyZWUgdGFnIChzZWVuKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgJGJsb2IgJHRhZyA+b3V0cHV0IDI+JjEgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3QgYSB0cmVlIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdW5leHBlY3RlZCBub24tYmxvYiB0YWcnICcKKwlnaXQgdGFnIC1hIC1tICJ0YWdnZWQgYmxvYiIgdGFnICRibG9iICYmCisJZ2l0IGNhdC1maWxlIHRhZyB0YWcgPmdvb2QtdGFnICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdGFnIC1kIHRhZyIgJiYKKwlzZWQgLWUgInMvJGJsb2IvJGNvbW1pdC8iIDxnb29kLXRhZyA+YnJva2VuLXRhZyAmJgorCXRhZz0kKGdpdCBoYXNoLW9iamVjdCAtdyAtLWxpdGVyYWxseSAtdCB0YWcgYnJva2VuLXRhZykKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAndHJhdmVyc2UgdW5leHBlY3RlZCBub24tYmxvYiB0YWcgKGxvbmUpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYXZlcnNlIHVuZXhwZWN0ZWQgbm9uLWJsb2IgdGFnIChzZWVuKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgJGNvbW1pdCAkdGFnID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdCBhIGJsb2IiIG91dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYxMTAtcmV2LWxpc3Qtc3BhcnNlLnNoIGIvdC90NjExMC1yZXYtbGlzdC1zcGFyc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjU2YWM3ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMTAtcmV2LWxpc3Qtc3BhcnNlLnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdvcGVyYXRpb25zIHRoYXQgY3VsbCBoaXN0b3JpZXMgaW4gdW51c3VhbCB3YXlzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IEEgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJdGVzdF9jb21taXQgQyAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUReICYmCisJdGVzdF9jb21taXQgRCAmJgorCXRlc3RfY29tbWl0IEUgJiYKKwlnaXQgbWVyZ2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tZmlyc3QtcGFyZW50IC0tYm91bmRhcnknICcKKwlnaXQgcmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS1ib3VuZGFyeSBIRUFEXi4uCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjExMS1yZXYtbGlzdC10cmVlc2FtZS5zaCBiL3QvdDYxMTEtcmV2LWxpc3QtdHJlZXNhbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDI0NDYzOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMTEtcmV2LWxpc3QtdHJlZXNhbWUuc2gKQEAgLTAsMCArMSwxOTMgQEAKKyMhL2Jpbi9zaAorIworIyAgICAgICAgLC0tLUUtLS4gICAqSC0tLS0tLS0tLS0uICAgICAgICAgICAgICogbWFya3MgIVRSRUVTQU1FIHBhcmVudCBwYXRocworIyAgICAgICAvICAgICAgICBcIC8gICAgICAgICAgICAgXCoKKyMgKkEtLSpCLS0tRC0tKkYtKkctLS0tLS0tLS1LLSpMLSpNCisjICAgXCAgICAgLyogICAgICAgXCAgICAgICAvCisjICAgIGAtQy0nICAgICAgICAgIGAtKkktKkoKKyMKKyMgQSBjcmVhdGVzICJmaWxlIiwgQiBhbmQgRiBjaGFuZ2UgaXQuCisjIE9kZCBtZXJnZSBHIHRha2VzIHRoZSBvbGQgdmVyc2lvbiBmcm9tIEIuCisjIEkgY2hhbmdlcyBpdCwgYnV0IEogcmV2ZXJ0cyBpdCwgc28gSyBpcyBUUkVFU0FNRSB0byBib3RoIHBhcmVudHMuCisjIEggYW5kIEwgYm90aCBjaGFuZ2UgImZpbGUiLCBhbmQgTSBtZXJnZXMgdGhvc2UgY2hhbmdlcy4KKwordGVzdF9kZXNjcmlwdGlvbj0nVFJFRVNBTUUgYW5kIGxpbWl0aW5nJworCisuIC4vdGVzdC1saWIuc2gKKworbm90ZSAoKSB7CisJZ2l0IHRhZyAiJDEiCit9CisKK3Vubm90ZSAoKSB7CisJZ2l0IG5hbWUtcmV2IC0tdGFncyAtLXN0ZGluIHwgc2VkIC1lICJzfCRPSURfUkVHRVggKHRhZ3MvXChbXildKlwpKVwoWyAJXVwpfFwxXDJ8ZyIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgIkluaXRpYWwgZmlsZSIgZmlsZSAiSGkgdGhlcmUiIEEgJiYKKwlnaXQgYnJhbmNoIG90aGVyLWJyYW5jaCAmJgorCisJdGVzdF9jb21taXQgImZpbGU9SGVsbG8iIGZpbGUgIkhlbGxvIiBCICYmCisJZ2l0IGJyYW5jaCB0aGlyZC1icmFuY2ggJiYKKworCWdpdCBjaGVja291dCBvdGhlci1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCAiQWRkZWQgb3RoZXIiIG90aGVyICJIZWxsbyIgQyAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbWVyZ2UgRCBvdGhlci1icmFuY2ggJiYKKworCWdpdCBjaGVja291dCB0aGlyZC1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCAiVGhpcmQgZmlsZSIgdGhpcmQgIk5vdGhpbmciIEUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCAiZmlsZT1CbGFoIiBmaWxlICJCbGFoIiBGICYmCisKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC0tbm8tY29tbWl0IHRoaXJkLWJyYW5jaCAmJgorCWdpdCBjaGVja291dCB0aGlyZC1icmFuY2ggZmlsZSAmJgorCWdpdCBjb21taXQgJiYKKwlub3RlIEcgJiYKKwlnaXQgYnJhbmNoIGZpZGRsZXItYnJhbmNoICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcGFydDItYnJhbmNoICYmCisJdGVzdF9jb21taXQgImZpbGU9UGFydCAyIiBmaWxlICJQYXJ0IDIiIEggJiYKKworCWdpdCBjaGVja291dCBmaWRkbGVyLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0ICJCYWQgY29tbWl0IiBmaWxlICJTaWxseSIgSSAmJgorCisJdGVzdF90aWNrICYmIGdpdCByZXZlcnQgSSAmJiBub3RlIEogJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgZmlkZGxlci1icmFuY2ggJiYKKwlub3RlIEsgJiYKKworCXRlc3RfY29tbWl0ICJmaWxlPVBhcnQgMSIgZmlsZSAiUGFydCAxIiBMICYmCisKKwl0ZXN0X3RpY2sgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHBhcnQyLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0IE0gZmlsZSAiUGFydHMgMSsyIgorJworCitjaGVja19vdXRjb21lICgpIHsKKwlvdXRjb21lPSQxCisJc2hpZnQKKworCWNhc2UgIiQxIiBpbgorCSoiKCIqKQorCQlGTVQ9IiVQCSVIIHwgJXMiCisJCW11bmdlX2FjdHVhbD0iCisJCQlzL15cKFteCV0qXCkJXChbXiBdKlwpIC4qLyhcMSlcMi8KKwkJCXMvIC8vZworCQkJcy8oKS8vCisJCSIKKwkJOzsKKwkqKQorCQlGTVQ9IiVIIHwgJXMiCisJCW11bmdlX2FjdHVhbD0icy9eXChbXiBdKlwpIC4qL1wxLyIKKwkJOzsKKwllc2FjICYmCisJcHJpbnRmICIlc1xuIiAkMSA+ZXhwZWN0ICYmCisJc2hpZnQKKworCXBhcmFtPSIkKiIgJiYKKwl0ZXN0X2V4cGVjdF8kb3V0Y29tZSAibG9nICRwYXJhbSIgJworCQlnaXQgbG9nIC0tZm9ybWF0PSIkRk1UIiAkcGFyYW0gfAorCQl1bm5vdGUgPmFjdHVhbCAmJgorCQlzZWQgLWUgIiRtdW5nZV9hY3R1YWwiIDxhY3R1YWwgPmNoZWNrICYmCisJCXRlc3RfY21wIGV4cGVjdCBjaGVjaworCScKK30KKworY2hlY2tfcmVzdWx0ICgpIHsKKwljaGVja19vdXRjb21lIHN1Y2Nlc3MgIiRAIgorfQorCisjIE9kZCBtZXJnZSBHIGRyb3BzIGEgY2hhbmdlIGluIEYuIEltcG9ydGFudCB0aGF0IEcgaXMgbGlzdGVkIGluIGFsbAorIyBleGNlcHQgdGhlIG1vc3QgYmFzaWMgbGlzdC4gQWNoaWV2aW5nIHRoaXMgbWVhbnMgbm9ybWFsIG1lcmdlIEQgd2lsbCBhbHNvIGJlCisjIHNob3duIGluIG5vcm1hbCBmdWxsLWhpc3RvcnksIGFzIHdlIGNhbid0IGRpc3Rpbmd1aXNoIHVubGVzcyB3ZSBkbyBhCisjIHNpbXBsaWZpY2F0aW9uIHBhc3MuIEFmdGVyIHNpbXBsaWZpY2F0aW9uLCBEIGlzIGRyb3BwZWQgYnV0IEcgcmVtYWlucy4KKyMgQWxzbywgbWVyZ2Ugc2ltcGxpZmljYXRpb24gb2YgRyBzaG91bGQgbm90IGRyb3AgdGhlIHBhcmVudCBCIHRoYXQgdGhlIGRlZmF1bHQKKyMgc2ltcGxlIGhpc3RvcnkgZm9sbG93cy4KK2NoZWNrX3Jlc3VsdCAnTSBMIEsgSiBJIEggRyBGIEUgRCBDIEIgQScKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEspTCAoR0opSyAoSSlKIChHKUkgKEcpSCAoRkUpRyAoRClGIChCKUUgKEJDKUQgKEEpQyAoQSlCIEEnCitjaGVja19yZXN1bHQgJ00gSCBMIEsgSiBJIEcgRSBGIEQgQyBCIEEnIC0tdG9wby1vcmRlcgorY2hlY2tfcmVzdWx0ICdNIEwgSCBCIEEnIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEIpTCAoQilIIChBKUIgQScgLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTSBMIEogSSBIIEcgRiBEIEIgQScgLS1mdWxsLWhpc3RvcnkgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoSylMIChHSilLIChJKUogKEcpSSAoRylIIChGQilHIChEKUYgKEJBKUQgKEEpQiBBJyAtLWZ1bGwtaGlzdG9yeSAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoRylIIChKKUwgKEkpSiAoRylJIChGQilHIChCKUYgKEEpQiBBJyAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gTCBLIEcgRiBEIEIgQScgLS1maXJzdC1wYXJlbnQKK2NoZWNrX3Jlc3VsdCAnTSBMIEcgRiBCIEEnIC0tZmlyc3QtcGFyZW50IC0tIGZpbGUKKworIyBDaGVjayB0aGF0IG9kZCBtZXJnZSBHIHJlbWFpbnMgc2hvd24gd2hlbiBGIGlzIHRoZSBib3R0b20uCitjaGVja19yZXN1bHQgJ00gTCBLIEogSSBIIEcgRScgRi4uTQorY2hlY2tfcmVzdWx0ICdNIEggTCBLIEogSSBHIEUnIEYuLk0gLS10b3BvLW9yZGVyCitjaGVja19yZXN1bHQgJ00gTCBIJyBGLi5NIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEIpTCAoQilIJyAtLXBhcmVudHMgRi4uTSAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gTCBKIEkgSCBHJyBGLi5NIC0tZnVsbC1oaXN0b3J5IC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEspTCAoR0opSyAoSSlKIChHKUkgKEcpSCAoRkIpRycgRi4uTSAtLWZ1bGwtaGlzdG9yeSAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoRylIIChKKUwgKEkpSiAoRylJIChGQilHJyBGLi5NIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTSBMIEsgSiBJIEggRycgRi4uTSAtLWFuY2VzdHJ5LXBhdGgKK2NoZWNrX3Jlc3VsdCAnTSBMIEogSSBIIEcnIEYuLk0gLS1hbmNlc3RyeS1wYXRoIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEspTCAoR0opSyAoSSlKIChHKUkgKEcpSCAoRkUpRycgRi4uTSAtLWFuY2VzdHJ5LXBhdGggLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEcpSCAoSilMIChJKUogKEcpSSAoRkUpRycgRi4uTSAtLWFuY2VzdHJ5LXBhdGggLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdNIEwgSyBHJyBGLi5NIC0tZmlyc3QtcGFyZW50CitjaGVja19yZXN1bHQgJ00gTCBHJyBGLi5NIC0tZmlyc3QtcGFyZW50IC0tIGZpbGUKKworIyBOb3RlIHRoYXQgRyBpcyBwcnVuZWQgd2hlbiBFIGlzIHRoZSBib3R0b20sIGV2ZW4gaWYgaXQncyB0aGUgc2FtZSBjb21taXQgbGlzdAorIyBJZiB3ZSB3YW50IGhpc3Rvcnkgc2luY2UgRSwgdGhlbiB3ZSdyZSBxdWl0ZSBoYXBweSB0byBpZ25vcmUgRyB0aGF0IHRvb2sgRS4KK2NoZWNrX3Jlc3VsdCAnTSBMIEsgSiBJIEggRycgRS4uTSAtLWFuY2VzdHJ5LXBhdGgKK2NoZWNrX3Jlc3VsdCAnTSBMIEogSSBIJyBFLi5NIC0tYW5jZXN0cnktcGF0aCAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhMSClNIChLKUwgKEVKKUsgKEkpSiAoRSlJIChFKUgnIEUuLk0gLS1hbmNlc3RyeS1wYXRoIC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhMSClNIChFKUggKEopTCAoSSlKIChFKUknIEUuLk0gLS1hbmNlc3RyeS1wYXRoIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKKworIyBTaG91bGQgc3RpbGwgYmUgYWJsZSB0byBpZ25vcmUgSS1KIGJyYW5jaCBpbiBzaW1wbGUgbG9nLCBkZXNwaXRlIGxpbWl0aW5nCisjIHRvIEcuCitjaGVja19yZXN1bHQgJ00gTCBLIEogSSBIJyBHLi5NCitjaGVja19yZXN1bHQgJ00gSCBMIEsgSiBJJyBHLi5NIC0tdG9wby1vcmRlcgorY2hlY2tfcmVzdWx0ICdNIEwgSCcgRy4uTSAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhMSClNIChHKUwgKEcpSCcgRy4uTSAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdNIEwgSiBJIEgnIEcuLk0gLS1mdWxsLWhpc3RvcnkgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdNIEwgSyBKIEkgSCcgRy4uTSAtLWZ1bGwtaGlzdG9yeSAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdNIEggTCBKIEknIEcuLk0gLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdNIEwgSyBKIEkgSCcgRy4uTSAtLWFuY2VzdHJ5LXBhdGgKK2NoZWNrX3Jlc3VsdCAnTSBMIEogSSBIJyBHLi5NIC0tYW5jZXN0cnktcGF0aCAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gTCBLIEogSSBIJyBHLi5NIC0tYW5jZXN0cnktcGF0aCAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdNIEggTCBKIEknIEcuLk0gLS1hbmNlc3RyeS1wYXRoIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKKworIyBCLi5GIHNob3VsZCBiZSBhYmxlIHRvIHNpbXBsaWZ5IHRoZSBtZXJnZSBEIGZyb20gaXJyZWxldmFudCBzaWRlIGJyYW5jaCBDLgorIyBEZWZhdWx0IGxvZyBzaG91bGQgYWxzbyBiZSBmcmVlIHRvIGZvbGxvdyBCLUQsIGFuZCBpZ25vcmUgQy4KKyMgQnV0IC0tZnVsbC1oaXN0b3J5IHNob3VsZG4ndCBkcm9wIEQgb24gaXRzIG93biAtIHdpdGhvdXQgc2ltcGxpZmljYXRpb24sCisjIHdlIGNhbid0IGRlY2lkZSBpZiB0aGUgbWVyZ2UgZnJvbSBJTlRFUkVTVElORyBjb21taXQgQyB3YXMgc2Vuc2libGUuCitjaGVja19yZXN1bHQgJ0YgRCBDJyBCLi5GCitjaGVja19yZXN1bHQgJ0YnIEIuLkYgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoQilGJyBCLi5GIC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0YgRCcgQi4uRiAtLWZ1bGwtaGlzdG9yeSAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhEKUYgKEJBKUQnIEIuLkYgLS1mdWxsLWhpc3RvcnkgLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKEIpRicgQi4uRiAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0YgRCcgQi4uRiAtLWFuY2VzdHJ5LXBhdGgKK2NoZWNrX3Jlc3VsdCAnRicgQi4uRiAtLWFuY2VzdHJ5LXBhdGggLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdGJyBCLi5GIC0tYW5jZXN0cnktcGF0aCAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdGJyBCLi5GIC0tYW5jZXN0cnktcGF0aCAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0YgRCcgQi4uRiAtLWZpcnN0LXBhcmVudAorY2hlY2tfcmVzdWx0ICdGJyBCLi5GIC0tZmlyc3QtcGFyZW50IC0tIGZpbGUKKworIyBFLi4uRiBzaG91bGQgYmUgZXF1aXZhbGVudCB0byBFIEYgXkIsIGFuZCBiZSBhYmxlIHRvIGRyb3AgRCBhcyBhYm92ZS4KK2NoZWNrX3Jlc3VsdCAnRicgRSBGIF5CIC0tIGZpbGUgIyBpbmNsdWRlcyBECitjaGVja19yZXN1bHQgJ0YnIEUuLi5GIC0tIGZpbGUgIyBpbmNsdWRlcyBECisKKyMgQW55IHNvcnQgb2YgZnVsbCBoaXN0b3J5IG9mIEMuLkYgc2hvdWxkIHNob3cgRCwgYXMgaXQncyB0aGUgY29ubmVjdGlvbiB0byBDLAorIyBhbmQgaXQgZGlmZmVycyBmcm9tIGl0LgorY2hlY2tfcmVzdWx0ICdGIEQgQicgQy4uRgorY2hlY2tfcmVzdWx0ICdGIEInIEMuLkYgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoQilGIChBKUInIEMuLkYgLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnRiBEIEInIEMuLkYgLS1mdWxsLWhpc3RvcnkgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoRClGIChCQylEIChBKUInIEMuLkYgLS1mdWxsLWhpc3RvcnkgLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKEQpRiAoQkMpRCAoQSlCJyBDLi5GIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnRiBEJyBDLi5GIC0tYW5jZXN0cnktcGF0aAorY2hlY2tfcmVzdWx0ICdGIEQnIEMuLkYgLS1hbmNlc3RyeS1wYXRoIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnRiBEJyBDLi5GIC0tYW5jZXN0cnktcGF0aCAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdGIEQnIEMuLkYgLS1hbmNlc3RyeS1wYXRoIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnRiBEIEInIEMuLkYgLS1maXJzdC1wYXJlbnQKK2NoZWNrX3Jlc3VsdCAnRiBCJyBDLi5GIC0tZmlyc3QtcGFyZW50IC0tIGZpbGUKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYxMTItcmV2LWxpc3QtZmlsdGVycy1vYmplY3RzLnNoIGIvdC90NjExMi1yZXYtbGlzdC1maWx0ZXJzLW9iamVjdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGUwZTVhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMTItcmV2LWxpc3QtZmlsdGVycy1vYmplY3RzLnNoCkBAIC0wLDAgKzEsNjI5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJldi1saXN0IHVzaW5nIG9iamVjdCBmaWx0ZXJpbmcnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRlc3QgdGhlIGJsb2I6bm9uZSBmaWx0ZXIuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHIxJyAnCisJZWNobyAie3ByaW50IFwkMX0iID5wcmludF8xLmF3ayAmJgorCWVjaG8gIntwcmludCBcJDJ9IiA+cHJpbnRfMi5hd2sgJiYKKworCWdpdCBpbml0IHIxICYmCisJZm9yIG4gaW4gMSAyIDMgNCA1CisJZG8KKwkJZWNobyAiVGhpcyBpcyBmaWxlOiAkbiIgPiByMS9maWxlLiRuCisJCWdpdCAtQyByMSBhZGQgZmlsZS4kbgorCQlnaXQgLUMgcjEgY29tbWl0IC1tICIkbiIKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iOm5vbmUgb21pdHMgYWxsIDUgYmxvYnMnICcKKwlnaXQgLUMgcjEgbHMtZmlsZXMgLXMgZmlsZS4xIGZpbGUuMiBmaWxlLjMgZmlsZS40IGZpbGUuNSBcCisJCT5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZ2l0IC1DIHIxIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIC0tZmlsdGVyLXByaW50LW9taXR0ZWQgXAorCQktLWZpbHRlcj1ibG9iOm5vbmUgSEVBRCA+cmV2cyAmJgorCWF3ayAtZiBwcmludF8xLmF3ayByZXZzIHwKKwlzZWQgInMvfi8vIiB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwZWNpZnkgYmxvYiBleHBsaWNpdGx5IHByZXZlbnRzIGZpbHRlcmluZycgJworCWZpbGVfMz0kKGdpdCAtQyByMSBscy1maWxlcyAtcyBmaWxlLjMgfAorCQkgYXdrIC1mIHByaW50XzIuYXdrKSAmJgorCisJZmlsZV80PSQoZ2l0IC1DIHIxIGxzLWZpbGVzIC1zIGZpbGUuNCB8CisJCSBhd2sgLWYgcHJpbnRfMi5hd2spICYmCisKKwlnaXQgLUMgcjEgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyPWJsb2I6bm9uZSBIRUFEICRmaWxlXzMgPm9ic2VydmVkICYmCisJZ3JlcCAiJGZpbGVfMyIgb2JzZXJ2ZWQgJiYKKwkhIGdyZXAgIiRmaWxlXzQiIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBlbWl0dGVkK29taXR0ZWQgPT0gYWxsJyAnCisJZ2l0IC1DIHIxIHJldi1saXN0IC0tb2JqZWN0cyBIRUFEID5yZXZzICYmCisJYXdrIC1mIHByaW50XzEuYXdrIHJldnMgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjEgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyLXByaW50LW9taXR0ZWQgLS1maWx0ZXI9YmxvYjpub25lIFwKKwkJSEVBRCA+cmV2cyAmJgorCWF3ayAtZiBwcmludF8xLmF3ayByZXZzIHwKKwlzZWQgInMvfi8vIiB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKKworIyBUZXN0IGJsb2I6bGltaXQ9PG4+W2ttZ10gZmlsdGVyLgorIyBXZSBib3VuZGFyeSB0ZXN0IGFyb3VuZCB0aGUgc2l6ZSBwYXJhbWV0ZXIuICBUaGUgZmlsdGVyIGlzIHN0cmljdGx5IGxlc3MgdGhhbgorIyB0aGUgdmFsdWUsIHNvIHNpemUgNTAwIGFuZCAxMDAwIHNob3VsZCBoYXZlIHRoZSBzYW1lIHJlc3VsdHMsIGJ1dCAxMDAxIHNob3VsZAorIyBmaWx0ZXIgbW9yZS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcjInICcKKwlnaXQgaW5pdCByMiAmJgorCWZvciBuIGluIDEwMDAgMTAwMDAKKwlkbworCQlwcmludGYgIiUiJG4icyIgWCA+IHIyL2xhcmdlLiRuCisJCWdpdCAtQyByMiBhZGQgbGFyZ2UuJG4KKwkJZ2l0IC1DIHIyIGNvbW1pdCAtbSAiJG4iCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgYmxvYjpsaW1pdD01MDAgb21pdHMgYWxsIGJsb2JzJyAnCisJZ2l0IC1DIHIyIGxzLWZpbGVzIC1zIGxhcmdlLjEwMDAgbGFyZ2UuMTAwMDAgPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjIgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1maWx0ZXItcHJpbnQtb21pdHRlZCBcCisJCS0tZmlsdGVyPWJsb2I6bGltaXQ9NTAwIEhFQUQgPnJldnMgJiYKKwlhd2sgLWYgcHJpbnRfMS5hd2sgcmV2cyB8CisJc2VkICJzL34vLyIgfAorCXNvcnQgPm9ic2VydmVkICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBvYnNlcnZlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgZW1pdHRlZCtvbWl0dGVkID09IGFsbCcgJworCWdpdCAtQyByMiByZXYtbGlzdCAtLW9iamVjdHMgSEVBRCA+cmV2cyAmJgorCWF3ayAtZiBwcmludF8xLmF3ayByZXZzIHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZ2l0IC1DIHIyIHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlci1wcmludC1vbWl0dGVkIFwKKwkJLS1maWx0ZXI9YmxvYjpsaW1pdD01MDAgSEVBRCA+cmV2cyAmJgorCWF3ayAtZiBwcmludF8xLmF3ayByZXZzIHwKKwlzZWQgInMvfi8vIiB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iOmxpbWl0PTEwMDAnICcKKwlnaXQgLUMgcjIgbHMtZmlsZXMgLXMgbGFyZ2UuMTAwMCBsYXJnZS4xMDAwMCA+bHNfZmlsZXNfcmVzdWx0ICYmCisJYXdrIC1mIHByaW50XzIuYXdrIGxzX2ZpbGVzX3Jlc3VsdCB8CisJc29ydCA+ZXhwZWN0ZWQgJiYKKworCWdpdCAtQyByMiByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyAtLWZpbHRlci1wcmludC1vbWl0dGVkIFwKKwkJLS1maWx0ZXI9YmxvYjpsaW1pdD0xMDAwIEhFQUQgPnJldnMgJiYKKwlhd2sgLWYgcHJpbnRfMS5hd2sgcmV2cyB8CisJc2VkICJzL34vLyIgfAorCXNvcnQgPm9ic2VydmVkICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBvYnNlcnZlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgYmxvYjpsaW1pdD0xMDAxJyAnCisJZ2l0IC1DIHIyIGxzLWZpbGVzIC1zIGxhcmdlLjEwMDAwID5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZ2l0IC1DIHIyIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIC0tZmlsdGVyLXByaW50LW9taXR0ZWQgXAorCQktLWZpbHRlcj1ibG9iOmxpbWl0PTEwMDEgSEVBRCA+cmV2cyAmJgorCWF3ayAtZiBwcmludF8xLmF3ayByZXZzIHwKKwlzZWQgInMvfi8vIiB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iOmxpbWl0PTFrJyAnCisJZ2l0IC1DIHIyIGxzLWZpbGVzIC1zIGxhcmdlLjEwMDAwID5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZ2l0IC1DIHIyIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIC0tZmlsdGVyLXByaW50LW9taXR0ZWQgXAorCQktLWZpbHRlcj1ibG9iOmxpbWl0PTFrIEhFQUQgPnJldnMgJiYKKwlhd2sgLWYgcHJpbnRfMS5hd2sgcmV2cyB8CisJc2VkICJzL34vLyIgfAorCXNvcnQgPm9ic2VydmVkICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBvYnNlcnZlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgYmxvYjpsaW1pdD0xbScgJworCWdpdCAtQyByMiByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyAtLWZpbHRlci1wcmludC1vbWl0dGVkIFwKKwkJLS1maWx0ZXI9YmxvYjpsaW1pdD0xbSBIRUFEID5yZXZzICYmCisJYXdrIC1mIHByaW50XzEuYXdrIHJldnMgfAorCXNlZCAicy9+Ly8iIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9tdXN0X2JlX2VtcHR5IG9ic2VydmVkCisnCisKKyMgVGVzdCBzcGFyc2U6cGF0aD08cGF0aD4gZmlsdGVyLgorIyAhISEhCisjIE5PVEU6IHNwYXJzZTpwYXRoIGZpbHRlciBzdXBwb3J0IGhhcyBiZWVuIGRyb3BwZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMsCisjIHNvIHRoZSB0ZXN0cyBoYXZlIGJlZW4gY2hhbmdlZCB0byBtYWtlIHN1cmUgdGhhdCB1c2luZyBpdCBmYWlscy4KKyMgISEhIQorIyBVc2UgYSBsb2NhbCBmaWxlIGNvbnRhaW5pbmcgYSBzcGFyc2UtY2hlY2tvdXQgc3BlY2lmaWNhdGlvbiB0byBmaWx0ZXIKKyMgb3V0IGJsb2JzIG5vdCByZXF1aXJlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc3BhcnNlLWNoZWNrb3V0LiAgV2UgZG8gbm90CisjIHJlcXVpcmUgc3BhcnNlLWNoZWNrb3V0IHRvIGFjdHVhbGx5IGJlIGVuYWJsZWQuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHIzJyAnCisJZ2l0IGluaXQgcjMgJiYKKwlta2RpciByMy9kaXIxICYmCisJZm9yIG4gaW4gc3BhcnNlMSBzcGFyc2UyCisJZG8KKwkJZWNobyAiVGhpcyBpcyBmaWxlOiAkbiIgPiByMy8kbgorCQlnaXQgLUMgcjMgYWRkICRuCisJCWVjaG8gIlRoaXMgaXMgZmlsZTogZGlyMS8kbiIgPiByMy9kaXIxLyRuCisJCWdpdCAtQyByMyBhZGQgZGlyMS8kbgorCWRvbmUgJiYKKwlnaXQgLUMgcjMgY29tbWl0IC1tICJzcGFyc2UiICYmCisJZWNobyBkaXIxLyA+cGF0dGVybjEgJiYKKwllY2hvIHNwYXJzZTEgPnBhdHRlcm4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzcGFyc2U6cGF0aD1wYXR0ZXJuMSBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyByMyByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyBcCisJCS0tZmlsdGVyLXByaW50LW9taXR0ZWQgLS1maWx0ZXI9c3BhcnNlOnBhdGg9Li4vcGF0dGVybjEgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgc3BhcnNlOnBhdGg9cGF0dGVybjIgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgcjMgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgXAorCQktLWZpbHRlci1wcmludC1vbWl0dGVkIC0tZmlsdGVyPXNwYXJzZTpwYXRoPS4uL3BhdHRlcm4yIEhFQUQKKycKKworIyBUZXN0IHNwYXJzZTpvaWQ9PG9pZC1pc2g+IGZpbHRlci4KKyMgVXNlIGEgYmxvYiBjb250YWluaW5nIGEgc3BhcnNlLWNoZWNrb3V0IHNwZWNpZmljYXRpb24gdG8gZmlsdGVyCisjIG91dCBibG9icyBub3QgcmVxdWlyZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHNwYXJzZS1jaGVja291dC4gIFdlIGRvIG5vdAorIyByZXF1aXJlIHNwYXJzZS1jaGVja291dCB0byBhY3R1YWxseSBiZSBlbmFibGVkLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByMyBwYXJ0IDInICcKKwllY2hvIGRpcjEvID5yMy9wYXR0ZXJuICYmCisJZ2l0IC1DIHIzIGFkZCBwYXR0ZXJuICYmCisJZ2l0IC1DIHIzIGNvbW1pdCAtbSAicGF0dGVybiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNwYXJzZTpvaWQ9T0lEIG9taXRzIHRvcC1sZXZlbCBmaWxlcycgJworCWdpdCAtQyByMyBscy1maWxlcyAtcyBwYXR0ZXJuIHNwYXJzZTEgc3BhcnNlMiA+bHNfZmlsZXNfcmVzdWx0ICYmCisJYXdrIC1mIHByaW50XzIuYXdrIGxzX2ZpbGVzX3Jlc3VsdCB8CisJc29ydCA+ZXhwZWN0ZWQgJiYKKworCW9pZD0kKGdpdCAtQyByMyBscy1maWxlcyAtcyBwYXR0ZXJuIHwgYXdrIC1mIHByaW50XzIuYXdrKSAmJgorCisJZ2l0IC1DIHIzIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIC0tZmlsdGVyLXByaW50LW9taXR0ZWQgXAorCQktLWZpbHRlcj1zcGFyc2U6b2lkPSRvaWQgSEVBRCA+cmV2cyAmJgorCWF3ayAtZiBwcmludF8xLmF3ayByZXZzIHwKKwlzZWQgInMvfi8vIiB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzcGFyc2U6b2lkPW9pZC1pc2ggb21pdHMgdG9wLWxldmVsIGZpbGVzJyAnCisJZ2l0IC1DIHIzIGxzLWZpbGVzIC1zIHBhdHRlcm4gc3BhcnNlMSBzcGFyc2UyID5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZ2l0IC1DIHIzIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIC0tZmlsdGVyLXByaW50LW9taXR0ZWQgXAorCQktLWZpbHRlcj1zcGFyc2U6b2lkPW1hc3RlcjpwYXR0ZXJuIEhFQUQgPnJldnMgJiYKKwlhd2sgLWYgcHJpbnRfMS5hd2sgcmV2cyB8CisJc2VkICJzL34vLyIgfAorCXNvcnQgPm9ic2VydmVkICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBvYnNlcnZlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBXLyAtLW1pc3Npbmc9cHJpbnQgYW5kIC0tbWlzc2luZz1hbGxvdy1hbnkgZm9yIHRyZWVzJyAnCisJVFJFRT0kKGdpdCAtQyByMyByZXYtcGFyc2UgSEVBRDpkaXIxKSAmJgorCisJIyBDcmVhdGUgYSBzcGFyZSByZXBvIGJlY2F1c2Ugd2Ugd2lsbCBiZSBkZWxldGluZyBvYmplY3RzIGZyb20gdGhpcyBvbmUuCisJZ2l0IGNsb25lIHIzIHIzLmIgJiYKKworCXJtIHIzLmIvLmdpdC9vYmplY3RzLyQoZWNobyAkVFJFRSB8IHNlZCAic3xeLi58Ji98IikgJiYKKworCWdpdCAtQyByMy5iIHJldi1saXN0IC0tcXVpZXQgLS1taXNzaW5nPXByaW50IC0tb2JqZWN0cyBIRUFEIFwKKwkJPm1pc3Npbmdfb2JqcyAyPnJldl9saXN0X2VyciAmJgorCWVjaG8gIj8kVFJFRSIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgbWlzc2luZ19vYmpzICYmCisKKwkjIGRvIG5vdCBjb21wbGFpbiB3aGVuIGEgbWlzc2luZyB0cmVlIGNhbm5vdCBiZSBwYXJzZWQKKwl0ZXN0X211c3RfYmVfZW1wdHkgcmV2X2xpc3RfZXJyICYmCisKKwlnaXQgLUMgcjMuYiByZXYtbGlzdCAtLW1pc3Npbmc9YWxsb3ctYW55IC0tb2JqZWN0cyBIRUFEIFwKKwkJPm9ianMgMj5yZXZfbGlzdF9lcnIgJiYKKwkhIGdyZXAgJFRSRUUgb2JqcyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSByZXZfbGlzdF9lcnIKKycKKworIyBUZXN0IHRyZWU6MCBmaWx0ZXIuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0cmVlOjAgaW5jbHVkZXMgdHJlZXMgaW4gImZpbHRlcmVkIiBvdXRwdXQnICcKKwlnaXQgLUMgcjMgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1maWx0ZXItcHJpbnQtb21pdHRlZCBcCisJCS0tZmlsdGVyPXRyZWU6MCBIRUFEID5yZXZzICYmCisKKwlhd2sgLWYgcHJpbnRfMS5hd2sgcmV2cyB8CisJc2VkIHMvfi8vIHwKKwl4YXJncyAtbjEgZ2l0IC1DIHIzIGNhdC1maWxlIC10ID51bnNvcnRlZF9maWx0ZXJlZF90eXBlcyAmJgorCisJc29ydCAtdSB1bnNvcnRlZF9maWx0ZXJlZF90eXBlcyA+ZmlsdGVyZWRfdHlwZXMgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGJsb2IgdHJlZSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWx0ZXJlZF90eXBlcworJworCisjIE1ha2Ugc3VyZSB0cmVlOjAgZG9lcyBub3QgaXRlcmF0ZSB0aHJvdWdoIGFueSB0cmVlcy4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNraXBwaW5nIHRyZWUgaXRlcmF0aW9uIHdoZW4gbm90IGNvbGxlY3Rpbmcgb21pdHMnICcKKwlHSVRfVFJBQ0U9MSBnaXQgLUMgcjMgcmV2LWxpc3QgXAorCQktLW9iamVjdHMgLS1maWx0ZXI9dHJlZTowIEhFQUQgMj5maWx0ZXJfdHJhY2UgJiYKKwlncmVwICJTa2lwcGluZyBjb250ZW50cyBvZiB0cmVlIFsuXVsuXVsuXSIgZmlsdGVyX3RyYWNlID5hY3R1YWwgJiYKKwkjIE9uZSBsaW5lIGZvciBlYWNoIGNvbW1pdCB0cmF2ZXJzZWQuCisJdGVzdF9saW5lX2NvdW50ID0gMiBhY3R1YWwgJiYKKworCSMgTWFrZSBzdXJlIG5vIG90aGVyIHRyZWVzIHdlcmUgY29uc2lkZXJlZCBiZXNpZGVzIHRoZSByb290LgorCSEgZ3JlcCAiU2tpcHBpbmcgY29udGVudHMgb2YgdHJlZSBbXi5dIiBmaWx0ZXJfdHJhY2UgJiYKKworCSMgVHJ5IHRoaXMgYWdhaW4gd2l0aCAiY29tYmluZToiLiBJZiBib3RoIHN1Yi1maWx0ZXJzIGFyZSBza2lwcGluZworCSMgdHJlZXMsIHRoZSBjb21wb3NpdGUgZmlsdGVyIHNob3VsZCBhbHNvIHNraXAgdHJlZXMuIFRoaXMgaXMgbm90CisJIyBpbXBvcnRhbnQgdW5sZXNzIHRoZSB1c2VyIGRvZXMgY29tYmluZTp0cmVlOlgrdHJlZTpZIG9yIGFub3RoZXIgZmlsdGVyCisJIyBiZXNpZGVzICJ0cmVlOiIgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGZ1dHVyZSB3aGljaCBjYW4gc2tpcCB0cmVlcy4KKwlHSVRfVFJBQ0U9MSBnaXQgLUMgcjMgcmV2LWxpc3QgXAorCQktLW9iamVjdHMgLS1maWx0ZXI9Y29tYmluZTp0cmVlOjErdHJlZTozIEhFQUQgMj5maWx0ZXJfdHJhY2UgJiYKKworCSMgT25seSBza2lwIHRoZSBkaXIxLyB0cmVlLCB3aGljaCBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgdHdvIGNvbW1pdHMuCisJZ3JlcCAiU2tpcHBpbmcgY29udGVudHMgb2YgdHJlZSAiIGZpbHRlcl90cmFjZSA+YWN0dWFsICYmCisJdGVzdF93cml0ZV9saW5lcyAiU2tpcHBpbmcgY29udGVudHMgb2YgdHJlZSBkaXIxLy4uLiIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKyMgVGVzdCB0cmVlOiMgZmlsdGVycy4KKworZXhwZWN0X2hhcyAoKSB7CisJY29tbWl0PSQxICYmCisJbmFtZT0kMiAmJgorCisJaGFzaD0kKGdpdCAtQyByMyByZXYtcGFyc2UgJGNvbW1pdDokbmFtZSkgJiYKKwlncmVwICJeJGhhc2ggJG5hbWUkIiBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRyZWU6MSBpbmNsdWRlcyByb290IHRyZWVzJyAnCisJZ2l0IC1DIHIzIHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlcj10cmVlOjEgSEVBRCA+YWN0dWFsICYmCisKKwkjIFdlIHNob3VsZCBnZXQgdHdvIHJvb3QgZGlyZWN0b3JpZXMgYW5kIHR3byBjb21taXRzLgorCWV4cGVjdF9oYXMgSEVBRCAiIiAmJgorCWV4cGVjdF9oYXMgSEVBRH4xICIiICAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0cmVlOjIgaW5jbHVkZXMgcm9vdCB0cmVlcyBhbmQgaW1tZWRpYXRlIGNoaWxkcmVuJyAnCisJZ2l0IC1DIHIzIHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlcj10cmVlOjIgSEVBRCA+YWN0dWFsICYmCisKKwlleHBlY3RfaGFzIEhFQUQgIiIgJiYKKwlleHBlY3RfaGFzIEhFQUR+MSAiIiAmJgorCWV4cGVjdF9oYXMgSEVBRCBkaXIxICYmCisJZXhwZWN0X2hhcyBIRUFEIHBhdHRlcm4gJiYKKwlleHBlY3RfaGFzIEhFQUQgc3BhcnNlMSAmJgorCWV4cGVjdF9oYXMgSEVBRCBzcGFyc2UyICYmCisKKwkjIFRoZXJlIGFyZSBhbHNvIDIgY29tbWl0IG9iamVjdHMKKwl0ZXN0X2xpbmVfY291bnQgPSA4IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdHJlZTozIGluY2x1ZGVzIGV2ZXJ5dGhpbmcgZXhwZWN0ZWQnICcKKwlnaXQgLUMgcjMgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyPXRyZWU6MyBIRUFEID5hY3R1YWwgJiYKKworCWV4cGVjdF9oYXMgSEVBRCAiIiAmJgorCWV4cGVjdF9oYXMgSEVBRH4xICIiICYmCisJZXhwZWN0X2hhcyBIRUFEIGRpcjEgJiYKKwlleHBlY3RfaGFzIEhFQUQgZGlyMS9zcGFyc2UxICYmCisJZXhwZWN0X2hhcyBIRUFEIGRpcjEvc3BhcnNlMiAmJgorCWV4cGVjdF9oYXMgSEVBRCBwYXR0ZXJuICYmCisJZXhwZWN0X2hhcyBIRUFEIHNwYXJzZTEgJiYKKwlleHBlY3RfaGFzIEhFQUQgc3BhcnNlMiAmJgorCisJIyBUaGVyZSBhcmUgYWxzbyAyIGNvbW1pdCBvYmplY3RzCisJdGVzdF9saW5lX2NvdW50ID0gMTAgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmU6Li4uIGZvciBhIHNpbXBsZSBjb21iaW5hdGlvbicgJworCWdpdCAtQyByMyByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXI9Y29tYmluZTp0cmVlOjIrYmxvYjpub25lIEhFQUQgXAorCQk+YWN0dWFsICYmCisKKwlleHBlY3RfaGFzIEhFQUQgIiIgJiYKKwlleHBlY3RfaGFzIEhFQUR+MSAiIiAmJgorCWV4cGVjdF9oYXMgSEVBRCBkaXIxICYmCisKKwkjIFRoZXJlIGFyZSBhbHNvIDIgY29tbWl0IG9iamVjdHMKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCisJY3AgYWN0dWFsIGV4cGVjdGVkICYmCisKKwkjIFRyeSBhZ2FpbiB1c2luZyByZXBlYXRlZCAtLWZpbHRlciAtIHRoaXMgaXMgZXF1aXZhbGVudCB0byBhIG1hbnVhbAorCSMgY29tYmluZSB3aXRoICJjb21iaW5lOi4uLisuLi4iCisJZ2l0IC1DIHIzIHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlcj1jb21iaW5lOnRyZWU6MiBcCisJCS0tZmlsdGVyPWJsb2I6bm9uZSBIRUFEID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5lOi4uLiB3aXRoIFVSTCBlbmNvZGluZycgJworCWdpdCAtQyByMyByZXYtbGlzdCAtLW9iamVjdHMgXAorCQktLWZpbHRlcj1jb21iaW5lOnRyZWUlM2EyK2Jsb2I6JTZFb24lNjUgSEVBRCA+YWN0dWFsICYmCisKKwlleHBlY3RfaGFzIEhFQUQgIiIgJiYKKwlleHBlY3RfaGFzIEhFQUR+MSAiIiAmJgorCWV4cGVjdF9oYXMgSEVBRCBkaXIxICYmCisKKwkjIFRoZXJlIGFyZSBhbHNvIDIgY29tbWl0IG9iamVjdHMKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbAorJworCitleHBlY3RfaW52YWxpZF9maWx0ZXJfc3BlYyAoKSB7CisJc3BlYz0iJDEiICYmCisJZXJyPSIkMiIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyByMyByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXI9IiRzcGVjIiBIRUFEIFwKKwkJPmFjdHVhbCAyPmFjdHVhbF9zdGRlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiJGVyciIgYWN0dWFsX3N0ZGVycgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5lOi4uLiB3aGlsZSBVUkwtZW5jb2RpbmcgdGhpbmdzIHRoYXQgc2hvdWxkIG5vdCBiZScgJworCWV4cGVjdF9pbnZhbGlkX2ZpbHRlcl9zcGVjIGNvbWJpbmUlM0F0cmVlOjIrYmxvYjpub25lIFwKKwkJImludmFsaWQgZmlsdGVyLXNwZWMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmU6IHdpdGggbm90aGluZyBhZnRlciB0aGUgOicgJworCWV4cGVjdF9pbnZhbGlkX2ZpbHRlcl9zcGVjIGNvbWJpbmU6ICJleHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgY29tYmluZToiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnNlIGVycm9yIGluIGZpcnN0IHN1Yi1maWx0ZXIgaW4gY29tYmluZTonICcKKwlleHBlY3RfaW52YWxpZF9maWx0ZXJfc3BlYyBjb21iaW5lOnRyZWU6YXNkZitibG9iOm5vbmUgXAorCQkiZXhwZWN0ZWQgLnRyZWU6PGRlcHRoPi4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmU6Li4uIHdpdGggbm9uLWVuY29kZWQgcmVzZXJ2ZWQgY2hhcnMnICcKKwlleHBlY3RfaW52YWxpZF9maWx0ZXJfc3BlYyBjb21iaW5lOnRyZWU6MitzcGFyc2U6QHh5eiBcCisJCSJtdXN0IGVzY2FwZSBjaGFyIGluIHN1Yi1maWx0ZXItc3BlYzogLkAuIiAmJgorCWV4cGVjdF9pbnZhbGlkX2ZpbHRlcl9zcGVjIGNvbWJpbmU6dHJlZToyK3NwYXJzZTpcYCBcCisJCSJtdXN0IGVzY2FwZSBjaGFyIGluIHN1Yi1maWx0ZXItc3BlYzogLlxgLiIgJiYKKwlleHBlY3RfaW52YWxpZF9maWx0ZXJfc3BlYyBjb21iaW5lOnRyZWU6MitzcGFyc2U6fmFiYyBcCisJCSJtdXN0IGVzY2FwZSBjaGFyIGluIHN1Yi1maWx0ZXItc3BlYzogLlx+LiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgZXJyIG1zZyBmb3IgImNvbWJpbmU6PHZhbGlkLWZpbHRlcj4rIicgJworCWV4cGVjdF9pbnZhbGlkX2ZpbHRlcl9zcGVjIGNvbWJpbmU6dHJlZToyKyAiZXhwZWN0ZWQgLnRyZWU6PGRlcHRoPi4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmU6Li4uIHdpdGggZWRnZS1jYXNlIGhleCBkaWdpdHM6IEZmIEFhIDAgOScgJworCWdpdCAtQyByMyByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXI9ImNvbWJpbmU6dHJlZToyK2JsJTZGYjpuJTZmbmUiIFwKKwkJSEVBRCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBhY3R1YWwgJiYKKwlnaXQgLUMgcjMgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyPSJjb21iaW5lOnRyZWUlM0EyK2Jsb2IlM2Fub25lIiBcCisJCUhFQUQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsICYmCisJZ2l0IC1DIHIzIHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlcj0iY29tYmluZTp0cmVlOiUzMCIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBhY3R1YWwgJiYKKwlnaXQgLUMgcjMgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyPSJjb21iaW5lOnRyZWU6JTM5K2Jsb2I6bm9uZSIgXAorCQlIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3BhcnNlIHBhdHRlcm4gYmxvYnMgd2hvc2UgcGF0aHMgaGF2ZSByZXNlcnZlZCBjaGFycycgJworCWNwIHIzL3BhdHRlcm4gcjMvcGF0dGVybjErcmVuYW1lZCUgJiYKKwljcCByMy9wYXR0ZXJuICJyMy9wO2F0JXRlcituIiAmJgorCWNwIHIzL3BhdHRlcm4gcjMvXn5wYXR0ZXJuICYmCisJZ2l0IC1DIHIzIGFkZCBwYXR0ZXJuMStyZW5hbWVkJSAicDthdCV0ZXIrbiIgXn5wYXR0ZXJuICYmCisJZ2l0IC1DIHIzIGNvbW1pdCAtbSAiYWRkIHNwYXJzZSBwYXR0ZXJuIGZpbGVzIHdpdGggcmVzZXJ2ZWQgY2hhcnMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmU6Li4uIHdpdGggbW9yZSB0aGFuIHR3byBzdWItZmlsdGVycycgJworCWdpdCAtQyByMyByZXYtbGlzdCAtLW9iamVjdHMgXAorCQktLWZpbHRlcj1jb21iaW5lOnRyZWU6MytibG9iOmxpbWl0PTQwK3NwYXJzZTpvaWQ9bWFzdGVyOnBhdHRlcm4gXAorCQlIRUFEID5hY3R1YWwgJiYKKworCWV4cGVjdF9oYXMgSEVBRCAiIiAmJgorCWV4cGVjdF9oYXMgSEVBRH4xICIiICYmCisJZXhwZWN0X2hhcyBIRUFEfjIgIiIgJiYKKwlleHBlY3RfaGFzIEhFQUQgZGlyMSAmJgorCWV4cGVjdF9oYXMgSEVBRCBkaXIxL3NwYXJzZTEgJiYKKwlleHBlY3RfaGFzIEhFQUQgZGlyMS9zcGFyc2UyICYmCisKKwkjIFNob3VsZCBhbHNvIGhhdmUgMyBjb21taXRzCisJdGVzdF9saW5lX2NvdW50ID0gOSBhY3R1YWwgJiYKKworCSMgVHJ5IGFnYWluLCB0aGlzIHRpbWUgbWFraW5nIHN1cmUgdGhlIGxhc3Qgc3ViLWZpbHRlciBpcyBvbmx5CisJIyBVUkwtZGVjb2RlZCBvbmNlLgorCWNwIGFjdHVhbCBleHBlY3QgJiYKKworCWdpdCAtQyByMyByZXYtbGlzdCAtLW9iamVjdHMgXAorCQktLWZpbHRlcj1jb21iaW5lOnRyZWU6MytibG9iOmxpbWl0PTQwK3NwYXJzZTpvaWQ9bWFzdGVyOnBhdHRlcm4xJTJicmVuYW1lZCUyNSBcCisJCUhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgVXNlIHRoZSBzYW1lIGNvbXBvc2l0ZSBmaWx0ZXIgYWdhaW4sIGJ1dCB3aXRoIGEgcGF0dGVybiBmaWxlIG5hbWUgdGhhdAorCSMgcmVxdWlyZXMgZW5jb2RpbmcgbXVsdGlwbGUgY2hhcmFjdGVycywgYW5kIHVzZSBpbXBsaWNpdCBmaWx0ZXIKKwkjIGNvbWJpbmluZy4KKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIHRyYWNlMSIgJiYKKwlHSVRfVFJBQ0U9JChwd2QpL3RyYWNlMSBnaXQgLUMgcjMgcmV2LWxpc3QgLS1vYmplY3RzIFwKKwkJLS1maWx0ZXI9dHJlZTozIC0tZmlsdGVyPWJsb2I6bGltaXQ9NDAgXAorCQktLWZpbHRlcj1zcGFyc2U6b2lkPSJtYXN0ZXI6cDthdCV0ZXIrbiIgXAorCQlIRUFEID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlncmVwICJBZGQgdG8gY29tYmluZSBmaWx0ZXItc3BlYzogc3BhcnNlOm9pZD1tYXN0ZXI6cCUzYmF0JTI1dGVyJTJibiIgXAorCQl0cmFjZTEgJiYKKworCSMgUmVwZWF0IHRoZSBhYm92ZSB0ZXN0LCBidXQgdGhpcyB0aW1lLCB0aGUgY2hhcmFjdGVycyB0byBlbmNvZGUgYXJlIGluCisJIyB0aGUgTEhTIG9mIHRoZSBjb21iaW5lZCBmaWx0ZXIuCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiB0cmFjZTIiICYmCisJR0lUX1RSQUNFPSQocHdkKS90cmFjZTIgZ2l0IC1DIHIzIHJldi1saXN0IC0tb2JqZWN0cyBcCisJCS0tZmlsdGVyPXNwYXJzZTpvaWQ9bWFzdGVyOl5+cGF0dGVybiBcCisJCS0tZmlsdGVyPXRyZWU6MyAtLWZpbHRlcj1ibG9iOmxpbWl0PTQwIFwKKwkJSEVBRCA+YWN0dWFsICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ3JlcCAiQWRkIHRvIGNvbWJpbmUgZmlsdGVyLXNwZWM6IHNwYXJzZTpvaWQ9bWFzdGVyOiU1ZSU3ZXBhdHRlcm4iIFwKKwkJdHJhY2UyCisnCisKKyMgVGVzdCBwcm92aXNpb25hbCBvbWl0IGNvbGxlY3Rpb24gbG9naWMgd2l0aCBhIHJlcG8gdGhhdCBoYXMgb2JqZWN0cyBhcHBlYXJpbmcKKyMgYXQgbXVsdGlwbGUgZGVwdGhzIC0gZmlyc3QgZGVlcGVyIHRoYW4gdGhlIGZpbHRlcidzIHRocmVzaG9sZCwgdGhlbiBzaGFsbG93LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByNCcgJworCWdpdCBpbml0IHI0ICYmCisKKwllY2hvIGZvbyA+IHI0L2ZvbyAmJgorCW1rZGlyIHI0L3N1YmRpciAmJgorCWVjaG8gYmFyID4gcjQvc3ViZGlyL2JhciAmJgorCisJbWtkaXIgcjQvZmlsdCAmJgorCWNwIC1yIHI0L2ZvbyByNC9zdWJkaXIgcjQvZmlsdCAmJgorCisJZ2l0IC1DIHI0IGFkZCBmb28gc3ViZGlyIGZpbHQgJiYKKwlnaXQgLUMgcjQgY29tbWl0IC1tICJjb21taXQgbXNnIgorJworCitleHBlY3RfaGFzX3dpdGhfZGlmZmVyZW50X25hbWUgKCkgeworCXJlcG89JDEgJiYKKwluYW1lPSQyICYmCisKKwloYXNoPSQoZ2l0IC1DICRyZXBvIHJldi1wYXJzZSBIRUFEOiRuYW1lKSAmJgorCSEgZ3JlcCAiXiRoYXNoICRuYW1lJCIgYWN0dWFsICYmCisJZ3JlcCAiXiRoYXNoICIgYWN0dWFsICYmCisJISBncmVwICJ+JGhhc2giIGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRyZWU6IyBmaWx0ZXIgcHJvdmlzaW9uYWwgb21pdCBmb3IgYmxvYiBhbmQgdHJlZScgJworCWdpdCAtQyByNCByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXItcHJpbnQtb21pdHRlZCAtLWZpbHRlcj10cmVlOjIgXAorCQlIRUFEID5hY3R1YWwgJiYKKwlleHBlY3RfaGFzX3dpdGhfZGlmZmVyZW50X25hbWUgcjQgZmlsdC9mb28gJiYKKwlleHBlY3RfaGFzX3dpdGhfZGlmZmVyZW50X25hbWUgcjQgZmlsdC9zdWJkaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNraXBwaW5nIHRyZWUgaXRlcmF0aW9uIHdoZW4gY29sbGVjdGluZyBvbWl0cycgJworCUdJVF9UUkFDRT0xIGdpdCAtQyByNCByZXYtbGlzdCAtLWZpbHRlci1wcmludC1vbWl0dGVkIFwKKwkJLS1vYmplY3RzIC0tZmlsdGVyPXRyZWU6MCBIRUFEIDI+ZmlsdGVyX3RyYWNlICYmCisJZ3JlcCAiXlNraXBwaW5nIGNvbnRlbnRzIG9mIHRyZWUgIiBmaWx0ZXJfdHJhY2UgPmFjdHVhbCAmJgorCisJZWNobyAiU2tpcHBpbmcgY29udGVudHMgb2YgdHJlZSBzdWJkaXIvLi4uIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByNScgJworCWdpdCBpbml0IHI1ICYmCisJbWtkaXIgLXAgcjUvc3ViZGlyICYmCisKKwllY2hvIDEgICAgID5yNS9zaG9ydC1yb290ICAgICAgICAgICYmCisJZWNobyAxMjM0NSA+cjUvbG9uZy1yb290ICAgICAgICAgICAmJgorCWVjaG8gYSAgICAgPnI1L3N1YmRpci9zaG9ydC1zdWJkaXIgJiYKKwllY2hvIGFiY2RlID5yNS9zdWJkaXIvbG9uZy1zdWJkaXIgICYmCisKKwlnaXQgLUMgcjUgYWRkIHNob3J0LXJvb3QgbG9uZy1yb290IHN1YmRpciAmJgorCWdpdCAtQyByNSBjb21taXQgLW0gImNvbW1pdCBtc2ciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBjb2xsZWN0aW5nIG9taXRzIGluIGNvbWJpbmVkOiBmaWx0ZXInICcKKwkjIE5vdGUgdGhhdCB0aGlzIHRlc3QgZ3VhcmRzIGFnYWluc3QgdGhlIG5haXZlIGltcGxlbWVudGF0aW9uIG9mIHNpbXBseQorCSMgZ2l2aW5nIGJvdGggZmlsdGVycyB0aGUgc2FtZSAib21pdHMiIHNldCBhbmQgZXhwZWN0aW5nIGl0IHRvCisJIyBhdXRvbWF0aWNhbGx5IG1lcmdlIHRoZW0uCisJZ2l0IC1DIHI1IHJldi1saXN0IC0tb2JqZWN0cyAtLXF1aWV0IC0tZmlsdGVyLXByaW50LW9taXR0ZWQgXAorCQktLWZpbHRlcj1jb21iaW5lOnRyZWU6MitibG9iOmxpbWl0PTMgSEVBRCA+YWN0dWFsICYmCisKKwkjIEV4cGVjdCAwIHRyZWVzL2NvbW1pdHMsIDMgYmxvYnMgb21pdHRlZCAoYWxsIGJsb2JzIGV4Y2VwdCBzaG9ydC1yb290KQorCW9taXR0ZWRfMT0kKGVjaG8gMTIzNDUgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwlvbWl0dGVkXzI9JChlY2hvIGEgICAgIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJb21pdHRlZF8zPSQoZWNobyBhYmNkZSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSAmJgorCisJZ3JlcCB+JG9taXR0ZWRfMSBhY3R1YWwgJiYKKwlncmVwIH4kb21pdHRlZF8yIGFjdHVhbCAmJgorCWdyZXAgfiRvbWl0dGVkXzMgYWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwKKycKKworIyBUZXN0IHRyZWU6PGRlcHRoPiB3aGVyZSBhIHRyZWUgaXMgaXRlcmF0ZWQgdG8gdHdpY2UgLSBvbmNlIHdoZXJlIGEgc3ViZW50cnkgaXMKKyMgdG9vIGRlZXAgdG8gYmUgaW5jbHVkZWQsIGFuZCBhZ2FpbiB3aGVyZSB0aGUgYmxvYiBpbnNpZGUgaXQgaXMgc2hhbGxvdyBlbm91Z2gKKyMgdG8gYmUgaW5jbHVkZWQuIFRoaXMgbWFrZXMgc3VyZSB3ZSBkb24ndCB1c2UgTE9GUl9NQVJLX1NFRU4gaW5jb3JyZWN0bHkgKHdlCisjIGNhbid0IHVzZSBpdCBiZWNhdXNlIGEgdHJlZSBjYW4gYmUgaXRlcmF0ZWQgb3ZlciBhZ2FpbiBhdCBhIGxvd2VyIGRlcHRoKS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZTo8ZGVwdGg+IHdoZXJlIHdlIGl0ZXJhdGUgb3ZlciB0cmVlIGF0IHR3byBsZXZlbHMnICcKKwlnaXQgaW5pdCByNSAmJgorCisJbWtkaXIgLXAgcjUvYS9zdWJkaXIvYiAmJgorCWVjaG8gZm9vID4gcjUvYS9zdWJkaXIvYi9mb28gJiYKKworCW1rZGlyIC1wIHI1L3N1YmRpci9iICYmCisJZWNobyBmb28gPiByNS9zdWJkaXIvYi9mb28gJiYKKworCWdpdCAtQyByNSBhZGQgYSBzdWJkaXIgJiYKKwlnaXQgLUMgcjUgY29tbWl0IC1tICJjb21taXQgbXNnIiAmJgorCisJZ2l0IC1DIHI1IHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlcj10cmVlOjQgSEVBRCA+YWN0dWFsICYmCisJZXhwZWN0X2hhc193aXRoX2RpZmZlcmVudF9uYW1lIHI1IGEvc3ViZGlyL2IvZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWU6PGRlcHRoPiB3aGljaCBmaWx0ZXJzIG91dCBibG9iIGJ1dCBnaXZlbiBhcyBhcmcnICcKKwlibG9iX2hhc2g9JChnaXQgLUMgcjQgcmV2LXBhcnNlIEhFQUQ6c3ViZGlyL2JhcikgJiYKKworCWdpdCAtQyByNCByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXI9dHJlZToxIEhFQUQgJGJsb2JfaGFzaCA+YWN0dWFsICYmCisJZ3JlcCBeJGJsb2JfaGFzaCBhY3R1YWwKKycKKworIyBEZWxldGUgc29tZSBsb29zZSBvYmplY3RzIGFuZCB1c2UgcmV2LWxpc3QsIGJ1dCBXSVRIT1VUIGFueSBmaWx0ZXJpbmcuCisjIFRoaXMgbW9kZWxzIHByZXZpb3VzbHkgb21pdHRlZCBvYmplY3RzIHRoYXQgd2UgZGlkIG5vdCByZWNlaXZlLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBXLyAtLW1pc3Npbmc9cHJpbnQnICcKKwlnaXQgLUMgcjEgbHMtZmlsZXMgLXMgZmlsZS4xIGZpbGUuMiBmaWxlLjMgZmlsZS40IGZpbGUuNSBcCisJCT5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZm9yIGlkIGluIGBjYXQgZXhwZWN0ZWQgfCBzZWQgInN8Li58Ji98ImAKKwlkbworCQlybSByMS8uZ2l0L29iamVjdHMvJGlkCisJZG9uZSAmJgorCisJZ2l0IC1DIHIxIHJldi1saXN0IC0tcXVpZXQgLS1taXNzaW5nPXByaW50IC0tb2JqZWN0cyBIRUFEID5yZXZzICYmCisJYXdrIC1mIHByaW50XzEuYXdrIHJldnMgfAorCXNlZCAicy8/Ly8iIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgVy9PIC0tbWlzc2luZyBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyByMSByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IFcvIG1pc3Npbmc9YWxsb3ctYW55JyAnCisJZ2l0IC1DIHIxIHJldi1saXN0IC0tcXVpZXQgLS1taXNzaW5nPWFsbG93LWFueSAtLW9iamVjdHMgSEVBRAorJworCisjIFRlc3QgZXhwYW5zaW9uIG9mIGZpbHRlciBzcGVjcy4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwYW5kIGJsb2IgbGltaXQgaW4gcHJvdG9jb2wnICcKKwlnaXQgLUMgcjIgY29uZmlnIC0tbG9jYWwgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIGNsb25lIFwKKwkJLS1maWx0ZXI9YmxvYjpsaW1pdD0xayAiZmlsZTovLyQocHdkKS9yMiIgbGltaXQgJiYKKwkhIGdyZXAgImJsb2I6bGltaXQ9MWsiIHRyYWNlICYmCisJZ3JlcCAiYmxvYjpsaW1pdD0xMDI0IiB0cmFjZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYxMTMtcmV2LWxpc3QtYml0bWFwLWZpbHRlcnMuc2ggYi90L3Q2MTEzLXJldi1saXN0LWJpdG1hcC1maWx0ZXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJiNTUxZTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MTEzLXJldi1saXN0LWJpdG1hcC1maWx0ZXJzLnNoCkBAIC0wLDAgKzEsNzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXYtbGlzdCBjb21iaW5pbmcgYml0bWFwcyBhbmQgZmlsdGVycycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYml0bWFwcGVkIHJlcG8nICcKKwkjIG9uZSBjb21taXQgd2lsbCBoYXZlIGJpdG1hcHMsIHRoZSBvdGhlciB3aWxsIG5vdAorCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IG11Y2gtbGFyZ2VyLWJsb2Itb25lICYmCisJZ2l0IHJlcGFjayAtYWRiICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJdGVzdF9jb21taXQgbXVjaC1sYXJnZXItYmxvYi10d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsdGVycyBmYWxsYmFjayB0byBub24tYml0bWFwIHRyYXZlcnNhbCcgJworCSMgdXNlIGEgcGF0aC1iYXNlZCBmaWx0ZXIsIHNpbmNlIHRoZXkgYXJlIGluaGVyZW50bHkgaW5jb21wYXRpYmxlIHdpdGgKKwkjIGJpdG1hcHMgKGkuZS4sIHRoaXMgdGVzdCB3aWxsIG5ldmVyIGdldCBjb25mdXNlZCBieSBsYXRlciBjb2RlIHRvCisJIyBjb21iaW5lIHRoZSBmZWF0dXJlcykKKwlmaWx0ZXI9JChlY2hvICIhb25lIiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXI9c3BhcnNlOm9pZD0kZmlsdGVyIEhFQUQgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLXVzZS1iaXRtYXAtaW5kZXggXAorCQkgICAgIC0tb2JqZWN0cyAtLWZpbHRlcj1zcGFyc2U6b2lkPSRmaWx0ZXIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iOm5vbmUgZmlsdGVyJyAnCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlcj1ibG9iOm5vbmUgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCBcCisJCSAgICAgLS1vYmplY3RzIC0tZmlsdGVyPWJsb2I6bm9uZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2JpdG1hcF90cmF2ZXJzYWwgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iOm5vbmUgZmlsdGVyIHdpdGggc3BlY2lmaWVkIGJsb2InICcKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyPWJsb2I6bm9uZSBIRUFEIEhFQUQ6dHdvLnQgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLXVzZS1iaXRtYXAtaW5kZXggXAorCQkgICAgIC0tb2JqZWN0cyAtLWZpbHRlcj1ibG9iOm5vbmUgSEVBRCBIRUFEOnR3by50ID5hY3R1YWwgJiYKKwl0ZXN0X2JpdG1hcF90cmF2ZXJzYWwgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iOmxpbWl0IGZpbHRlcicgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXI9YmxvYjpsaW1pdD01IEhFQUQgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLXVzZS1iaXRtYXAtaW5kZXggXAorCQkgICAgIC0tb2JqZWN0cyAtLWZpbHRlcj1ibG9iOmxpbWl0PTUgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9iaXRtYXBfdHJhdmVyc2FsIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxvYjpsaW1pdCBmaWx0ZXIgd2l0aCBzcGVjaWZpZWQgYmxvYicgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXI9YmxvYjpsaW1pdD01IFwKKwkJICAgICBIRUFEIEhFQUQ6bXVjaC1sYXJnZXItYmxvYi10d28udCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCBcCisJCSAgICAgLS1vYmplY3RzIC0tZmlsdGVyPWJsb2I6bGltaXQ9NSBcCisJCSAgICAgSEVBRCBIRUFEOm11Y2gtbGFyZ2VyLWJsb2ItdHdvLnQgPmFjdHVhbCAmJgorCXRlc3RfYml0bWFwX3RyYXZlcnNhbCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWU6MCBmaWx0ZXInICcKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyPXRyZWU6MCBIRUFEID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS11c2UtYml0bWFwLWluZGV4IFwKKwkJICAgICAtLW9iamVjdHMgLS1maWx0ZXI9dHJlZTowIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfYml0bWFwX3RyYXZlcnNhbCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWU6MCBmaWx0ZXIgd2l0aCBzcGVjaWZpZWQgYmxvYiwgdHJlZScgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXI9dHJlZTowIEhFQUQgSEVBRDp0d28udCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCBcCisJCSAgICAgLS1vYmplY3RzIC0tZmlsdGVyPXRyZWU6MCBIRUFEIEhFQUQ6dHdvLnQgPmFjdHVhbCAmJgorCXRlc3RfYml0bWFwX3RyYXZlcnNhbCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWU6MSBmaWx0ZXInICcKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyPXRyZWU6MSBIRUFEID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS11c2UtYml0bWFwLWluZGV4IFwKKwkJICAgICAtLW9iamVjdHMgLS1maWx0ZXI9dHJlZToxIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MTIwLWRlc2NyaWJlLnNoIGIvdC90NjEyMC1kZXNjcmliZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mODIyZDVkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjEyMC1kZXNjcmliZS5zaApAQCAtMCwwICsxLDU1MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGVzY3JpYmUnCisKKyMgIG8tLS1vLS0tLS1vLS0tLW8tLS0tby0tLS0tLS1vLS0tLXgKKyMgICAgICAgXCAgIEQsUiAgIGUgICAgICAgICAgIC8KKyMgICAgICAgIFwtLS1vLS0tLS0tLS0tLS0tLW8tJworIyAgICAgICAgIFwgIEIgICAgICAgICAgICAvCisjICAgICAgICAgIGAtby0tLS1vLS0tLW8tJworIyAgICAgICAgICAgICAgICAgQSAgICBjCisjCisjIEZpcnN0IHBhcmVudCBvZiBhIG1lcmdlIGNvbW1pdCBpcyBvbiB0aGUgc2FtZSBsaW5lLCBzZWNvbmQgcGFyZW50IGJlbG93LgorCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfZGVzY3JpYmUgKCkgeworCWV4cGVjdD0iJDEiCisJc2hpZnQKKwlkZXNjcmliZV9vcHRzPSIkQCIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZXNjcmliZSAkZGVzY3JpYmVfb3B0cyIgJworCVI9JChnaXQgZGVzY3JpYmUgJGRlc2NyaWJlX29wdHMgMj5lcnIuYWN0dWFsKSAmJgorCWNhc2UgIiRSIiBpbgorCSRleHBlY3QpCWVjaG8gaGFwcHkgOzsKKwkqKQllY2hvICJPb3BzIC0gJFIgaXMgbm90ICRleHBlY3QiICYmCisJCWZhbHNlIDs7CisJZXNhYworCScKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIG9uZSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJb25lPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJZ2l0IGRlc2NyaWJlIC0tYWx3YXlzIEhFQUQgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gdHdvID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCXR3bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gdGhyZWUgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gdGhpcmQgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gQSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBBICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtYSAtbSBBIEEgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gYyA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBjICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyBjICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICR0d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIEIgPnNpZGUgJiYgZ2l0IGFkZCBzaWRlICYmIGdpdCBjb21taXQgLW0gQiAmJgorCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLWEgLW0gQiBCICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLW0gTWVyZ2VkIGMgJiYKKwltZXJnZWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICR0d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIEQgPmFub3RoZXIgJiYgZ2l0IGFkZCBhbm90aGVyICYmIGdpdCBjb21taXQgLW0gRCAmJgorCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLWEgLW0gRCBEICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtYSAtbSBSIFIgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gREQgPmFub3RoZXIgJiYgZ2l0IGNvbW1pdCAtYSAtbSBhbm90aGVyICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIGUgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gREREID5hbm90aGVyICYmIGdpdCBjb21taXQgLWEgLW0gInlldCBhbm90aGVyIiAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1tIE1lcmdlZCAkbWVyZ2VkICYmCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIFggPmZpbGUgJiYgZWNobyBYID5zaWRlICYmIGdpdCBhZGQgZmlsZSBzaWRlICYmCisJZ2l0IGNvbW1pdCAtbSB4CisKKycKKworY2hlY2tfZGVzY3JpYmUgQS0qIEhFQUQKK2NoZWNrX2Rlc2NyaWJlIEEtKiBIRUFEXgorY2hlY2tfZGVzY3JpYmUgUi0qIEhFQUReXgorY2hlY2tfZGVzY3JpYmUgQS0qIEhFQUReXjIKK2NoZWNrX2Rlc2NyaWJlIEIgSEVBRF5eMl4KK2NoZWNrX2Rlc2NyaWJlIFItKiBIRUFEXl5eCisKK2NoZWNrX2Rlc2NyaWJlIGMtKiAtLXRhZ3MgSEVBRAorY2hlY2tfZGVzY3JpYmUgYy0qIC0tdGFncyBIRUFEXgorY2hlY2tfZGVzY3JpYmUgZS0qIC0tdGFncyBIRUFEXl4KK2NoZWNrX2Rlc2NyaWJlIGMtKiAtLXRhZ3MgSEVBRF5eMgorY2hlY2tfZGVzY3JpYmUgQiAtLXRhZ3MgSEVBRF5eMl4KK2NoZWNrX2Rlc2NyaWJlIGUgLS10YWdzIEhFQUReXl4KKworY2hlY2tfZGVzY3JpYmUgaGVhZHMvbWFzdGVyIC0tYWxsIEhFQUQKK2NoZWNrX2Rlc2NyaWJlIHRhZ3MvYy0qIC0tYWxsIEhFQUReCitjaGVja19kZXNjcmliZSB0YWdzL2UgLS1hbGwgSEVBRF5eXgorCitjaGVja19kZXNjcmliZSBCLTAtKiAtLWxvbmcgSEVBRF5eMl4KK2NoZWNrX2Rlc2NyaWJlIEEtMy0qIC0tbG9uZyBIRUFEXl4yCisKK2NoZWNrX2Rlc2NyaWJlIGMtNy0qIC0tdGFncworY2hlY2tfZGVzY3JpYmUgZS0zLSogLS1maXJzdC1wYXJlbnQgLS10YWdzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaWJlIC0tY29udGFpbnMgZGVmYXVsdHMgdG8gSEVBRCB3aXRob3V0IGNvbW1pdC1pc2gnICcKKwllY2hvICJBXjAiID5leHBlY3QgJiYKKwlnaXQgY2hlY2tvdXQgQSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC0iICYmCisJZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2hlY2tfZGVzY3JpYmUgdGFncy9BIC0tYWxsIEFeMAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gd2FybmluZyB3YXMgZGlzcGxheWVkIGZvciBBJyAnCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVyci5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHRhZyBBIHRvIFEgbG9jYWxseScgJworCW12IC5naXQvcmVmcy90YWdzL0EgLmdpdC9yZWZzL3RhZ3MvUQorJworY2F0IC0gPmVyci5leHBlY3QgPDxFT0YKK3dhcm5pbmc6IHRhZyAnUScgaXMgZXh0ZXJuYWxseSBrbm93biBhcyAnQScKK0VPRgorY2hlY2tfZGVzY3JpYmUgQS0qIEhFQUQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dhcm5pbmcgd2FzIGRpc3BsYXllZCBmb3IgUScgJworCXRlc3RfaTE4bmNtcCBlcnIuZXhwZWN0IGVyci5hY3R1YWwKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc25hbWVkIGFubm90YXRlZCB0YWcgZm9yY2VzIGxvbmcgb3V0cHV0JyAnCisJZGVzY3JpcHRpb249JChnaXQgZGVzY3JpYmUgLS1uby1sb25nIFFeMCkgJiYKKwlleHByICIkZGVzY3JpcHRpb24iIDogIkEtMC1nWzAtOWEtZl0qJCIgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkZGVzY3JpcHRpb24iID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFFeMCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYmJyZXY9MCB3aWxsIG5vdCBicmVhayBtaXNwbGFjZWQgdGFnICgxKScgJworCWRlc2NyaXB0aW9uPSQoZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTAgUV4wKSAmJgorCWV4cHIgIiRkZXNjcmlwdGlvbiIgOiAiQS0wLWdbMC05YS1mXSokIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYmJyZXY9MCB3aWxsIG5vdCBicmVhayBtaXNwbGFjZWQgdGFnICgyKScgJworCWRlc2NyaXB0aW9uPSQoZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTAgY14wKSAmJgorCWV4cHIgIiRkZXNjcmlwdGlvbiIgOiAiQS0xLWdbMC05YS1mXSokIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgdGFnIFEgYmFjayB0byBBJyAnCisJbXYgLmdpdC9yZWZzL3RhZ3MvUSAuZ2l0L3JlZnMvdGFncy9BCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgdGFnIHJlZnMnICdnaXQgcGFjay1yZWZzJworY2hlY2tfZGVzY3JpYmUgQS0qIEhFQUQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVzY3JpYmUgd29ya3MgZnJvbSBvdXRzaWRlIHJlcG8gdXNpbmcgLS1naXQtZGlyJyAnCisJZ2l0IGNsb25lIC0tYmFyZSAiJFRSQVNIX0RJUkVDVE9SWSIgIiRUUkFTSF9ESVJFQ1RPUlkvYmFyZSIgJiYKKwlnaXQgLS1naXQtZGlyICIkVFJBU0hfRElSRUNUT1JZL2JhcmUiIGRlc2NyaWJlID5vdXQgJiYKKwlncmVwIC1FICJeQS1bMS05XVswLTldPy1nWzAtOWEtZl0rJCIgb3V0CisnCisKK2NoZWNrX2Rlc2NyaWJlICJBLSpbMC05YS1mXSIgLS1kaXJ0eQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmliZSAtLWRpcnR5IHdpdGggLS13b3JrLXRyZWUnICcKKwkoCisJCWNkICIkVEVTVF9ESVJFQ1RPUlkiICYmCisJCWdpdCAtLWdpdC1kaXIgIiRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgLS13b3JrLXRyZWUgIiRUUkFTSF9ESVJFQ1RPUlkiIGRlc2NyaWJlIC0tZGlydHkgPiIkVFJBU0hfRElSRUNUT1JZL291dCIKKwkpICYmCisJZ3JlcCAtRSAiXkEtWzEtOV1bMC05XT8tZ1swLTlhLWZdKyQiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQtdXAgZGlydHkgd29yayB0cmVlJyAnCisJZWNobyA+PmZpbGUKKycKKworY2hlY2tfZGVzY3JpYmUgIkEtKlswLTlhLWZdLWRpcnR5IiAtLWRpcnR5CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaWJlIC0tZGlydHkgd2l0aCAtLXdvcmstdHJlZSAoZGlydHkpJyAnCisJKAorCQljZCAiJFRFU1RfRElSRUNUT1JZIiAmJgorCQlnaXQgLS1naXQtZGlyICIkVFJBU0hfRElSRUNUT1JZLy5naXQiIC0td29yay10cmVlICIkVFJBU0hfRElSRUNUT1JZIiBkZXNjcmliZSAtLWRpcnR5ID4iJFRSQVNIX0RJUkVDVE9SWS9vdXQiCisJKSAmJgorCWdyZXAgLUUgIl5BLVsxLTldWzAtOV0/LWdbMC05YS1mXSstZGlydHkkIiBvdXQKKycKKworY2hlY2tfZGVzY3JpYmUgIkEtKlswLTlhLWZdLm1vZCIgLS1kaXJ0eT0ubW9kCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaWJlIC0tZGlydHk9Lm1vZCB3aXRoIC0td29yay10cmVlIChkaXJ0eSknICcKKwkoCisJCWNkICIkVEVTVF9ESVJFQ1RPUlkiICYmCisJCWdpdCAtLWdpdC1kaXIgIiRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgLS13b3JrLXRyZWUgIiRUUkFTSF9ESVJFQ1RPUlkiIGRlc2NyaWJlIC0tZGlydHk9Lm1vZCA+IiRUUkFTSF9ESVJFQ1RPUlkvb3V0IgorCSkgJiYKKwlncmVwIC1FICJeQS1bMS05XVswLTldPy1nWzAtOWEtZl0rLm1vZCQiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmliZSAtLWRpcnR5IEhFQUQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGVzY3JpYmUgLS1kaXJ0eSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldC11cCBtYXRjaGluZyBwYXR0ZXJuIHRlc3RzJyAnCisJZ2l0IHRhZyAtYSAtbSB0ZXN0LWFubm90YXRlZCB0ZXN0LWFubm90YXRlZCAmJgorCWVjaG8gPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAib25lIG1vcmUiICYmCisJZ2l0IHRhZyB0ZXN0MS1saWdodHdlaWdodCAmJgorCWVjaG8gPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAieWV0IGFub3RoZXIiICYmCisJZ2l0IHRhZyB0ZXN0Mi1saWdodHdlaWdodCAmJgorCWVjaG8gPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiZXZlbiBtb3JlIgorCisnCisKK2NoZWNrX2Rlc2NyaWJlICJ0ZXN0LWFubm90YXRlZC0qIiAtLW1hdGNoPSJ0ZXN0LSoiCisKK2NoZWNrX2Rlc2NyaWJlICJ0ZXN0MS1saWdodHdlaWdodC0qIiAtLXRhZ3MgLS1tYXRjaD0idGVzdDEtKiIKKworY2hlY2tfZGVzY3JpYmUgInRlc3QyLWxpZ2h0d2VpZ2h0LSoiIC0tdGFncyAtLW1hdGNoPSJ0ZXN0Mi0qIgorCitjaGVja19kZXNjcmliZSAidGVzdDItbGlnaHR3ZWlnaHQtKiIgLS1sb25nIC0tdGFncyAtLW1hdGNoPSJ0ZXN0Mi0qIiBIRUFEXgorCitjaGVja19kZXNjcmliZSAidGVzdDItbGlnaHR3ZWlnaHQtKiIgLS1sb25nIC0tdGFncyAtLW1hdGNoPSJ0ZXN0MS0qIiAtLW1hdGNoPSJ0ZXN0Mi0qIiBIRUFEXgorCitjaGVja19kZXNjcmliZSAidGVzdDItbGlnaHR3ZWlnaHQtKiIgLS1sb25nIC0tdGFncyAtLW1hdGNoPSJ0ZXN0MS0qIiAtLW5vLW1hdGNoIC0tbWF0Y2g9InRlc3QyLSoiIEhFQUReCisKK2NoZWNrX2Rlc2NyaWJlICJ0ZXN0MS1saWdodHdlaWdodC0qIiAtLWxvbmcgLS10YWdzIC0tbWF0Y2g9InRlc3QxLSoiIC0tbWF0Y2g9InRlc3QzLSoiIEhFQUQKKworY2hlY2tfZGVzY3JpYmUgInRlc3QxLWxpZ2h0d2VpZ2h0LSoiIC0tbG9uZyAtLXRhZ3MgLS1tYXRjaD0idGVzdDMtKiIgLS1tYXRjaD0idGVzdDEtKiIgSEVBRAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQtdXAgYnJhbmNoZXMnICcKKwlnaXQgYnJhbmNoIGJyYW5jaF9BIEEgJiYKKwlnaXQgYnJhbmNoIGJyYW5jaF9DIGMgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL3JlbW90ZV9icmFuY2hfQSAiQV57Y29tbWl0fSIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL3JlbW90ZV9icmFuY2hfQyAiY157Y29tbWl0fSIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL29yaWdpbmFsL29yaWdpbmFsX2JyYW5jaF9BIHRlc3QtYW5ub3RhdGVkfjIKKycKKworY2hlY2tfZGVzY3JpYmUgImhlYWRzL2JyYW5jaF9BKiIgLS1hbGwgLS1tYXRjaD0iYnJhbmNoXyoiIC0tZXhjbHVkZT0iYnJhbmNoX0MiIEhFQUQKKworY2hlY2tfZGVzY3JpYmUgInJlbW90ZXMvb3JpZ2luL3JlbW90ZV9icmFuY2hfQSoiIC0tYWxsIC0tbWF0Y2g9Im9yaWdpbi9yZW1vdGVfYnJhbmNoXyoiIC0tZXhjbHVkZT0ib3JpZ2luL3JlbW90ZV9icmFuY2hfQyIgSEVBRAorCitjaGVja19kZXNjcmliZSAib3JpZ2luYWwvb3JpZ2luYWxfYnJhbmNoX0EqIiAtLWFsbCB0ZXN0LWFubm90YXRlZH4xCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWF0Y2ggZG9lcyBub3Qgd29yayBmb3Igb3RoZXIgdHlwZXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGVzY3JpYmUgLS1hbGwgLS1tYXRjaD0iKm9yaWdpbmFsX2JyYW5jaF8qIiB0ZXN0LWFubm90YXRlZH4xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZXhjbHVkZSBkb2VzIG5vdCB3b3JrIGZvciBvdGhlciB0eXBlcycgJworCVI9JChnaXQgZGVzY3JpYmUgLS1hbGwgLS1leGNsdWRlPSJhbnlfcGF0dGVybl9ldmVuX25vdF9tYXRjaGluZyIgdGVzdC1hbm5vdGF0ZWR+MSkgJiYKKwljYXNlICIkUiIgaW4KKwkqb3JpZ2luYWxfYnJhbmNoX0EqKSBlY2hvICJmYWlsOiBGb3VuZCB1bmtub3duIHJlZmVyZW5jZSAkUiB3aXRoIC0tZXhjbHVkZSIKKwkJZmFsc2U7OworCSopIGVjaG8gb2s6IEZvdW5kIHNvbWUga25vd24gdHlwZTs7CisJZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduYW1lLXJldiB3aXRoIGV4YWN0IHRhZ3MnICcKKwllY2hvIEEgPmV4cGVjdCAmJgorCXRhZ19vYmplY3Q9JChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9BKSAmJgorCWdpdCBuYW1lLXJldiAtLXRhZ3MgLS1uYW1lLW9ubHkgJHRhZ19vYmplY3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gIkFeMCIgPmV4cGVjdCAmJgorCXRhZ2dlZF9jb21taXQ9JChnaXQgcmV2LXBhcnNlICJyZWZzL3RhZ3MvQV4wIikgJiYKKwlnaXQgbmFtZS1yZXYgLS10YWdzIC0tbmFtZS1vbmx5ICR0YWdnZWRfY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25hbWUtcmV2IC0tYWxsJyAnCisJPmV4cGVjdC51bnNvcnRlZCAmJgorCWZvciByZXYgaW4gJChnaXQgcmV2LWxpc3QgLS1hbGwpCisJZG8KKwkJZ2l0IG5hbWUtcmV2ICRyZXYgPj5leHBlY3QudW5zb3J0ZWQKKwlkb25lICYmCisJc29ydCA8ZXhwZWN0LnVuc29ydGVkID5leHBlY3QgJiYKKwlnaXQgbmFtZS1yZXYgLS1hbGwgPmFjdHVhbC51bnNvcnRlZCAmJgorCXNvcnQgPGFjdHVhbC51bnNvcnRlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduYW1lLXJldiAtLXN0ZGluJyAnCisJPmV4cGVjdC51bnNvcnRlZCAmJgorCWZvciByZXYgaW4gJChnaXQgcmV2LWxpc3QgLS1hbGwpCisJZG8KKwkJbmFtZT0kKGdpdCBuYW1lLXJldiAtLW5hbWUtb25seSAkcmV2KSAmJgorCQllY2hvICIkcmV2ICgkbmFtZSkiID4+ZXhwZWN0LnVuc29ydGVkCisJZG9uZSAmJgorCXNvcnQgPGV4cGVjdC51bnNvcnRlZCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tYWxsIHwgZ2l0IG5hbWUtcmV2IC0tc3RkaW4gPmFjdHVhbC51bnNvcnRlZCAmJgorCXNvcnQgPGFjdHVhbC51bnNvcnRlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmliZSAtLWNvbnRhaW5zIHdpdGggdGhlIGV4YWN0IHRhZ3MnICcKKwllY2hvICJBXjAiID5leHBlY3QgJiYKKwl0YWdfb2JqZWN0PSQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvQSkgJiYKKwlnaXQgZGVzY3JpYmUgLS1jb250YWlucyAkdGFnX29iamVjdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyAiQV4wIiA+ZXhwZWN0ICYmCisJdGFnZ2VkX2NvbW1pdD0kKGdpdCByZXYtcGFyc2UgInJlZnMvdGFncy9BXjAiKSAmJgorCWdpdCBkZXNjcmliZSAtLWNvbnRhaW5zICR0YWdnZWRfY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaWJlIC0tY29udGFpbnMgYW5kIC0tbWF0Y2gnICcKKwllY2hvICJBXjAiID5leHBlY3QgJiYKKwl0YWdnZWRfY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAicmVmcy90YWdzL0FeMCIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMgLS1tYXRjaD0iQiIgJHRhZ2dlZF9jb21taXQgJiYKKwlnaXQgZGVzY3JpYmUgLS1jb250YWlucyAtLW1hdGNoPSJCIiAtLW1hdGNoPSJBIiAkdGFnZ2VkX2NvbW1pdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmliZSAtLWV4Y2x1ZGUnICcKKwllY2hvICJjfjEiID5leHBlY3QgJiYKKwl0YWdnZWRfY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAicmVmcy90YWdzL0FeMCIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMgLS1tYXRjaD0iQiIgJHRhZ2dlZF9jb21taXQgJiYKKwlnaXQgZGVzY3JpYmUgLS1jb250YWlucyAtLW1hdGNoPSI/IiAtLWV4Y2x1ZGU9IkEiICR0YWdnZWRfY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaWJlIC0tY29udGFpbnMgYW5kIC0tbm8tbWF0Y2gnICcKKwllY2hvICJBXjAiID5leHBlY3QgJiYKKwl0YWdnZWRfY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAicmVmcy90YWdzL0FeMCIpICYmCisJZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMgLS1tYXRjaD0iQiIgLS1uby1tYXRjaCAkdGFnZ2VkX2NvbW1pdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhbmQgYWJzb3JiIGEgc3VibW9kdWxlJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzdWIxICYmCisJdGVzdF9jb21taXQgLUMgc3ViMSBpbml0aWFsICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi9zdWIxICYmCisJZ2l0IHN1Ym1vZHVsZSBhYnNvcmJnaXRkaXJzICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiYWRkIHN1Ym1vZHVsZSIgJiYKKwlnaXQgZGVzY3JpYmUgLS1kaXJ0eSA+ZXhwZWN0ICYmCisJZ2l0IGRlc2NyaWJlIC0tYnJva2VuID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaWJlIGNob2tlcyBvbiBzZXZlcmVseSBicm9rZW4gc3VibW9kdWxlcycgJworCW12IC5naXQvbW9kdWxlcy9zdWIxLyAuZ2l0L21vZHVsZXMvc3ViX21vdmVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRlc2NyaWJlIC0tZGlydHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVzY3JpYmUgaWdub3JpbmcgYSBicm9rZW4gc3VibW9kdWxlJyAnCisJZ2l0IGRlc2NyaWJlIC0tYnJva2VuID5vdXQgJiYKKwlncmVwIGJyb2tlbiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVzY3JpYmUgd2l0aCAtLXdvcmstdHJlZSBpZ25vcmluZyBhIGJyb2tlbiBzdWJtb2R1bGUnICcKKwkoCisJCWNkICIkVEVTVF9ESVJFQ1RPUlkiICYmCisJCWdpdCAtLWdpdC1kaXIgIiRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgLS13b3JrLXRyZWUgIiRUUkFTSF9ESVJFQ1RPUlkiIGRlc2NyaWJlIC0tYnJva2VuID4iJFRSQVNIX0RJUkVDVE9SWS9vdXQiCisJKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgLmdpdC9tb2R1bGVzL3N1Yl9tb3ZlZCAuZ2l0L21vZHVsZXMvc3ViMSIgJiYKKwlncmVwIGJyb2tlbiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVzY3JpYmUgYSBibG9iIGF0IGEgZGlyZWN0bHkgdGFnZ2VkIGNvbW1pdCcgJworCWVjaG8gIm1ha2UgaXQgYSB1bmlxdWUgYmxvYiIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSAiY29udGVudCBpbiBmaWxlIiAmJgorCWdpdCB0YWcgLWEgLW0gImxhdGVzdCBhbm5vdGF0ZWQgdGFnIiB1bmlxdWUtZmlsZSAmJgorCWdpdCBkZXNjcmliZSBIRUFEOmZpbGUgPmFjdHVhbCAmJgorCWVjaG8gInVuaXF1ZS1maWxlOmZpbGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaWJlIGEgYmxvYiB3aXRoIGl0cyBmaXJzdCBpbnRyb2R1Y3Rpb24nICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImVtcHR5IGNvbW1pdCIgJiYKKwlnaXQgcm0gZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImRlbGV0ZSBibG9iIiAmJgorCWdpdCByZXZlcnQgSEVBRCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZW1wdHkgY29tbWl0IiAmJgorCWdpdCBkZXNjcmliZSBIRUFEOmZpbGUgPmFjdHVhbCAmJgorCWVjaG8gInVuaXF1ZS1maWxlOmZpbGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaWJlIGRpcmVjdGx5IHRhZ2dlZCBibG9iJyAnCisJZ2l0IHRhZyB0ZXN0LWJsb2IgdW5pcXVlLWZpbGU6ZmlsZSAmJgorCWdpdCBkZXNjcmliZSB0ZXN0LWJsb2IgPmFjdHVhbCAmJgorCWVjaG8gInVuaXF1ZS1maWxlOmZpbGUiID5leHBlY3QgJiYKKwkjIHN1Ym9wdGltYWw6IHdlIHJhdGhlciB3YW50IHRvIHNlZSAidGVzdC1ibG9iIgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVzY3JpYmUgdGFnIG9iamVjdCcgJworCWdpdCB0YWcgdGVzdC1ibG9iLTEgLWEgLW0gbXNnIHVuaXF1ZS1maWxlOmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGVzY3JpYmUgdGVzdC1ibG9iLTEgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJmYXRhbDogdGVzdC1ibG9iLTEgaXMgbmVpdGhlciBhIGNvbW1pdCBub3IgYmxvYiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVUxJTUlUX1NUQUNLX1NJWkUgJ25hbWUtcmV2IHdvcmtzIGluIGEgZGVlcCByZXBvJyAnCisJaT0xICYmCisJd2hpbGUgdGVzdCAkaSAtbHQgODAwMAorCWRvCisJCWVjaG8gImNvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+ICQoKDEwMDAwMDAwMDAgKyAkaSAqIDEwMCkpICswMjAwCitkYXRhIDw8RU9GCitjb21taXQgIyRpCitFT0YiCisJCXRlc3QgJGkgPSAxICYmIGVjaG8gImZyb20gcmVmcy9oZWFkcy9tYXN0ZXJeMCIKKwkJaT0kKCgkaSArIDEpKQorCWRvbmUgfCBnaXQgZmFzdC1pbXBvcnQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyBmYXItZmFyLWF3YXkgSEVBRF4gJiYKKwllY2hvICJIRUFEfjQwMDAgdGFncy9mYXItZmFyLWF3YXl+Mzk5OSIgPmV4cGVjdCAmJgorCWdpdCBuYW1lLXJldiBIRUFEfjQwMDAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlydW5fd2l0aF9saW1pdGVkX3N0YWNrIGdpdCBuYW1lLXJldiBIRUFEfjQwMDAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBVTElNSVRfU1RBQ0tfU0laRSAnZGVzY3JpYmUgd29ya3MgaW4gYSBkZWVwIHJlcG8nICcKKwlnaXQgdGFnIC1mIGZhci1mYXItYXdheSBIRUFEfjc5OTkgJiYKKwllY2hvICJmYXItZmFyLWF3YXkiID5leHBlY3QgJiYKKwlnaXQgZGVzY3JpYmUgLS10YWdzIC0tYWJicmV2PTAgSEVBRH40MDAwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJcnVuX3dpdGhfbGltaXRlZF9zdGFjayBnaXQgZGVzY3JpYmUgLS10YWdzIC0tYWJicmV2PTAgSEVBRH40MDAwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NoZWNrX2Rlc2NyaWJlIHRhZ3MvQSAtLWFsbCBBCitjaGVja19kZXNjcmliZSB0YWdzL2MgLS1hbGwgYworY2hlY2tfZGVzY3JpYmUgaGVhZHMvYnJhbmNoX0EgLS1hbGwgLS1tYXRjaD0nYnJhbmNoXyonIGJyYW5jaF9BCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaWJlIGNvbXBsYWlucyBhYm91dCB0cmVlIG9iamVjdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBkZXNjcmliZSBIRUFEXnt0cmVlfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmliZSBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBvYmplY3QnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGVzY3JpYmUgJFpFUk9fT0lECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25hbWUtcmV2IGEgcmV2IHNob3J0bHkgYWZ0ZXIgZXBvY2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbm8tdGltZXN0YW1wLXVuZGVyZmxvdyAmJgorCSMgQW55IGRhdGUgY2xvc2VyIHRvIGVwb2NoIHRoYW4gdGhlIENVVE9GRl9EQVRFX1NMT1AgY29uc3RhbnQKKwkjIGluIGJ1aWx0aW4vbmFtZS1yZXYuYy4KKwlHSVRfQ09NTUlUVEVSX0RBVEU9IkAxMjM0ICswMDAwIiBcCisJZ2l0IGNvbW1pdCAtbSAiY29tbWl0dGVyIGRhdGUgc2hvcnRseSBhZnRlciBlcG9jaCIgJiYKKwlvbGRfY29tbWl0X29pZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCWVjaG8gIiRvbGRfY29tbWl0X29pZCBuby10aW1lc3RhbXAtdW5kZXJmbG93IiA+ZXhwZWN0ICYmCisJZ2l0IG5hbWUtcmV2ICRvbGRfY29tbWl0X29pZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIEEtLS0tLS0tLS0tLS0tLW1hc3RlcgorIyAgXCAgICAgICAgICAgIC8KKyMgICBcLS0tLS0tLS0tLU0yCisjICAgIFwgICAgICAgIC8KKyMgICAgIFwtLS1NMS1DCisjICAgICAgXCAvCisjICAgICAgIEIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25hbWUtcmV2IGNvdmVycyBhbGwgY29uZGl0aW9ucyB3aGlsZSBsb29raW5nIGF0IHBhcmVudHMnICcKKwlnaXQgaW5pdCByZXBvICYmCisJKAorCQljZCByZXBvICYmCisKKwkJZWNobyBBID5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIEEgJiYKKwkJQT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCQlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggJiYKKwkJZWNobyBCID5maWxlICYmCisJCWdpdCBjb21taXQgLW0gQiBmaWxlICYmCisJCUI9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwkJZ2l0IGNoZWNrb3V0ICRBICYmCisJCWdpdCBtZXJnZSAtLW5vLWZmICRCICYmICAjIE0xCisKKwkJZWNobyBDID5maWxlICYmCisJCWdpdCBjb21taXQgLW0gQyBmaWxlICYmCisKKwkJZ2l0IGNoZWNrb3V0ICRBICYmCisJCWdpdCBtZXJnZSAtLW5vLWZmIEhFQURAezF9ICYmICMgTTIKKworCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBtZXJnZSAtLW5vLWZmIEhFQURAezF9ICYmCisKKwkJZWNobyAiJEIgbWFzdGVyXjJeMn4xXjIiID5leHBlY3QgJiYKKwkJZ2l0IG5hbWUtcmV2ICRCID5hY3R1YWwgJiYKKworCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjICAgICAgICAgICAgICAgQgorIyAgICAgICAgICAgICAgIG8KKyMgICAgICAgICAgICAgICAgXAorIyAgby0tLS0tby0tLW8tLS0teAorIyAgICAgICAgQQorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVzY3JpYmUgY29tbWl0cyB3aXRoIGRpc2pvaW50IGJhc2VzJyAnCisJZ2l0IGluaXQgZGlzam9pbnQxICYmCisJKAorCQljZCBkaXNqb2ludDEgJiYKKworCQllY2hvIG8gPj4gZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBvICYmCisJCWVjaG8gQSA+PiBmaWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIEEgJiYKKwkJZ2l0IHRhZyBBIC1hIC1tIEEgJiYKKwkJZWNobyBvID4+IGZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gbyAmJgorCisJCWdpdCBjaGVja291dCAtLW9ycGhhbiBicmFuY2ggJiYgcm0gZmlsZSAmJgorCQllY2hvIEIgPiBmaWxlMiAmJiBnaXQgYWRkIGZpbGUyICYmIGdpdCBjb21taXQgLW0gQiAmJgorCQlnaXQgdGFnIEIgLWEgLW0gQiAmJgorCQlnaXQgbWVyZ2UgLS1uby1mZiAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgbWFzdGVyIC1tIHggJiYKKworCQljaGVja19kZXNjcmliZSAiQS0zLSoiIEhFQUQKKwkpCisnCisKKyMgICAgICAgICAgIEIKKyMgICBvLS0tby0tLW8tLS0tLS0tLS0tLS0uCisjICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyMgICAgICAgICAgICAgICAgICBvLS0tby0tLXgKKyMgICAgICAgICAgICAgICAgICBBCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmliZSBjb21taXRzIHdpdGggZGlzam9pbnQgYmFzZXMgMicgJworCWdpdCBpbml0IGRpc2pvaW50MiAmJgorCSgKKwkJY2QgZGlzam9pbnQyICYmCisKKwkJZWNobyBBID4+IGZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIEdJVF9DT01NSVRURVJfREFURT0iMjAyMC0wMS0wMSAxODowMCIgZ2l0IGNvbW1pdCAtbSBBICYmCisJCWdpdCB0YWcgQSAtYSAtbSBBICYmCisJCWVjaG8gbyA+PiBmaWxlICYmIGdpdCBhZGQgZmlsZSAmJiBHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMjAtMDEtMDEgMTg6MDEiIGdpdCBjb21taXQgLW0gbyAmJgorCisJCWdpdCBjaGVja291dCAtLW9ycGhhbiBicmFuY2ggJiYKKwkJZWNobyBvID4+IGZpbGUyICYmIGdpdCBhZGQgZmlsZTIgJiYgR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDIwLTAxLTAxIDE1OjAwIiBnaXQgY29tbWl0IC1tIG8gJiYKKwkJZWNobyBvID4+IGZpbGUyICYmIGdpdCBhZGQgZmlsZTIgJiYgR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDIwLTAxLTAxIDE1OjAxIiBnaXQgY29tbWl0IC1tIG8gJiYKKwkJZWNobyBCID4+IGZpbGUyICYmIGdpdCBhZGQgZmlsZTIgJiYgR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDIwLTAxLTAxIDE1OjAyIiBnaXQgY29tbWl0IC1tIEIgJiYKKwkJZ2l0IHRhZyBCIC1hIC1tIEIgJiYKKwkJZ2l0IG1lcmdlIC0tbm8tZmYgLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIG1hc3RlciAtbSB4ICYmCisKKwkJY2hlY2tfZGVzY3JpYmUgIkItMy0qIiBIRUFECisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYxMzAtcGF0aHNwZWMtbm9nbG9iLnNoIGIvdC90NjEzMC1wYXRoc3BlYy1ub2dsb2Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmE3OTAyYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMzAtcGF0aHNwZWMtbm9nbG9iLnNoCkBAIC0wLDAgKzEsMTYwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnbG9iYmluZyAoYW5kIG5vZ2xvYikgb2YgcGF0aHNwZWMgbGltaXRpbmcnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGNvbW1pdHMgd2l0aCBnbG9iIGNoYXJhY3RlcnMnICcKKwl0ZXN0X2NvbW1pdCB1bnJlbGF0ZWQgYmFyICYmCisJdGVzdF9jb21taXQgdmFuaWxsYSBmb28gJiYKKwkjIGluc2VydCBmaWxlICJmKiIgaW4gdGhlIGNvbW1pdCwgYnV0IGluIGEgd2F5IHRoYXQgYXZvaWRzCisJIyB0aGUgbmFtZSAiZioiIGluIHRoZSB3b3JrdHJlZSwgYmVjYXVzZSBpdCBpcyBub3QgYWxsb3dlZAorCSMgb24gV2luZG93cyAodGhlIHRlc3RzIGJlbG93IGRvIG5vdCBkZXBlbmQgb24gdGhlIHByZXNlbmNlCisJIyBvZiB0aGUgZmlsZSBpbiB0aGUgd29ya3RyZWUpCisJZ2l0IGNvbmZpZyBjb3JlLnByb3RlY3ROVEZTIGZhbHNlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgIiQoZ2l0IHJldi1wYXJzZSBIRUFEOmZvbykiICJmKiIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHN0YXIgJiYKKwl0ZXN0X2NvbW1pdCBicmFja2V0ICJmW29dW29dIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YW5pbGxhIHBhdGhzcGVjIG1hdGNoZXMgbGl0ZXJhbGx5JyAnCisJZWNobyB2YW5pbGxhID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIC0tIGZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFyIHBhdGhzcGVjIGdsb2JzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWJyYWNrZXQKKwlzdGFyCisJdmFuaWxsYQorCUVPRgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgLS0gImYqIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFyIHBhdGhzcGVjIGdsb2JzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWJyYWNrZXQKKwlzdGFyCisJdmFuaWxsYQorCUVPRgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgLS0gIjooZ2xvYilmKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhY2tldCBwYXRoc3BlYyBnbG9icyBhbmQgbWF0Y2hlcyBsaXRlcmFsIGJyYWNrZXRzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWJyYWNrZXQKKwl2YW5pbGxhCisJRU9GCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyAtLSAiZltvXVtvXSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhY2tldCBwYXRoc3BlYyBnbG9icyBhbmQgbWF0Y2hlcyBsaXRlcmFsIGJyYWNrZXRzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWJyYWNrZXQKKwl2YW5pbGxhCisJRU9GCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyAtLSAiOihnbG9iKWZbb11bb10iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vLWdsb2Igb3B0aW9uIG1hdGNoZXMgbGl0ZXJhbGx5ICh2YW5pbGxhKScgJworCWVjaG8gdmFuaWxsYSA+ZXhwZWN0ICYmCisJZ2l0IC0tbGl0ZXJhbC1wYXRoc3BlY3MgbG9nIC0tZm9ybWF0PSVzIC0tIGZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduby1nbG9iIG9wdGlvbiBtYXRjaGVzIGxpdGVyYWxseSAodmFuaWxsYSknICcKKwllY2hvIHZhbmlsbGEgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgLS0gIjoobGl0ZXJhbClmb28iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vLWdsb2Igb3B0aW9uIG1hdGNoZXMgbGl0ZXJhbGx5IChzdGFyKScgJworCWVjaG8gc3RhciA+ZXhwZWN0ICYmCisJZ2l0IC0tbGl0ZXJhbC1wYXRoc3BlY3MgbG9nIC0tZm9ybWF0PSVzIC0tICJmKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8tZ2xvYiBvcHRpb24gbWF0Y2hlcyBsaXRlcmFsbHkgKHN0YXIpJyAnCisJZWNobyBzdGFyID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIC0tICI6KGxpdGVyYWwpZioiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vLWdsb2Igb3B0aW9uIG1hdGNoZXMgbGl0ZXJhbGx5IChicmFja2V0KScgJworCWVjaG8gYnJhY2tldCA+ZXhwZWN0ICYmCisJZ2l0IC0tbGl0ZXJhbC1wYXRoc3BlY3MgbG9nIC0tZm9ybWF0PSVzIC0tICJmW29dW29dIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduby1nbG9iIG9wdGlvbiBtYXRjaGVzIGxpdGVyYWxseSAoYnJhY2tldCknICcKKwllY2hvIGJyYWNrZXQgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgLS0gIjoobGl0ZXJhbClmW29dW29dIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduby1nbG9iIG9wdGlvbiBkaXNhYmxlcyA6KGxpdGVyYWwpJyAnCisJZ2l0IC0tbGl0ZXJhbC1wYXRoc3BlY3MgbG9nIC0tZm9ybWF0PSVzIC0tICI6KGxpdGVyYWwpZm9vIiA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduby1nbG9iIGVudmlyb25tZW50IHZhcmlhYmxlIHdvcmtzJyAnCisJZWNobyBzdGFyID5leHBlY3QgJiYKKwlHSVRfTElURVJBTF9QQVRIU1BFQ1M9MSBnaXQgbG9nIC0tZm9ybWF0PSVzIC0tICJmKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgdGFrZXMgZ2xvYmFsIHBhdGhzcGVjIGZsYWdzJyAnCisJZ2l0IC0tbGl0ZXJhbC1wYXRoc3BlY3MgYmxhbWUgLS0gZm9vICYmCisJZ2l0IC0taWNhc2UtcGF0aHNwZWNzICAgYmxhbWUgLS0gZm9vICYmCisJZ2l0IC0tZ2xvYi1wYXRoc3BlY3MgICAgYmxhbWUgLS0gZm9vICYmCisJZ2l0IC0tbm9nbG9iLXBhdGhzcGVjcyAgYmxhbWUgLS0gZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHh4eC9iYXInICcKKwlta2RpciB4eHggJiYKKwl0ZXN0X2NvbW1pdCB4eHggeHh4L2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcqKi8gd29ya3Mgd2l0aCA6KGdsb2IpJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXh4eAorCXVucmVsYXRlZAorCUVPRgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgLS0gIjooZ2xvYikqKi9iYXIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyoqLyBkb2VzIG5vdCB3b3JrIHdpdGggLS1ub2dsb2ItcGF0aHNwZWNzJyAnCisJZ2l0IC0tbm9nbG9iLXBhdGhzcGVjcyBsb2cgLS1mb3JtYXQ9JXMgLS0gIioqL2JhciIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnKiovIHdvcmtzIHdpdGggOihnbG9iKSBhbmQgLS1ub2dsb2ItcGF0aHNwZWNzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXh4eAorCXVucmVsYXRlZAorCUVPRgorCWdpdCAtLW5vZ2xvYi1wYXRoc3BlY3MgbG9nIC0tZm9ybWF0PSVzIC0tICI6KGdsb2IpKiovYmFyIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcqKi8gd29ya3Mgd2l0aCAtLWdsb2ItcGF0aHNwZWNzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXh4eAorCXVucmVsYXRlZAorCUVPRgorCWdpdCAtLWdsb2ItcGF0aHNwZWNzIGxvZyAtLWZvcm1hdD0lcyAtLSAiKiovYmFyIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcqKi8gZG9lcyBub3Qgd29yayB3aXRoIDoobGl0ZXJhbCkgYW5kIC0tZ2xvYi1wYXRoc3BlY3MnICcKKwlnaXQgLS1nbG9iLXBhdGhzcGVjcyBsb2cgLS1mb3JtYXQ9JXMgLS0gIjoobGl0ZXJhbCkqKi9iYXIiID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjEzMS1wYXRoc3BlYy1pY2FzZS5zaCBiL3QvdDYxMzEtcGF0aHNwZWMtaWNhc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzlmYzNmNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMzEtcGF0aHNwZWMtaWNhc2Uuc2gKQEAgLTAsMCArMSwxMDkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNhc2UgaW5zZW5zaXRpdmUgcGF0aHNwZWMgbGltaXRpbmcnCisuIC4vdGVzdC1saWIuc2gKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBDQVNFX0lOU0VOU0lUSVZFX0ZTCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGNhc2Ugc2Vuc2l0aXZlIHRlc3RzIC0gY2FzZSBpbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbScKKwl0ZXN0X2RvbmUKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBjb21taXRzIHdpdGggZ2xvYiBjaGFyYWN0ZXJzJyAnCisJdGVzdF9jb21taXQgYmFyIGJhciAmJgorCXRlc3RfY29tbWl0IGJBciBiQXIgJiYKKwl0ZXN0X2NvbW1pdCBCQVIgQkFSICYmCisJbWtkaXIgZm9vICYmCisJdGVzdF9jb21taXQgZm9vL2JhciBmb28vYmFyICYmCisJdGVzdF9jb21taXQgZm9vL2JBciBmb28vYkFyICYmCisJdGVzdF9jb21taXQgZm9vL0JBUiBmb28vQkFSICYmCisJbWtkaXIgZk9vICYmCisJdGVzdF9jb21taXQgZk9vL2JhciBmT28vYmFyICYmCisJdGVzdF9jb21taXQgZk9vL2JBciBmT28vYkFyICYmCisJdGVzdF9jb21taXQgZk9vL0JBUiBmT28vQkFSICYmCisJbWtkaXIgRk9PICYmCisJdGVzdF9jb21taXQgRk9PL2JhciBGT08vYmFyICYmCisJdGVzdF9jb21taXQgRk9PL2JBciBGT08vYkFyICYmCisJdGVzdF9jb21taXQgRk9PL0JBUiBGT08vQkFSCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWVfZW50cnlfaW50ZXJlc3RpbmcgbWF0Y2hlcyBiYXInICcKKwllY2hvIGJhciA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyAtLSAiYmFyIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlX2VudHJ5X2ludGVyZXN0aW5nIG1hdGNoZXMgOihpY2FzZSliYXInICcKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwlCQVIKKwliQXIKKwliYXIKKwlFT0YKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIC0tICI6KGljYXNlKWJhciIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZV9lbnRyeV9pbnRlcmVzdGluZyBtYXRjaGVzIDooaWNhc2UpYmFyIHdpdGggcHJlZml4JyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJZk9vL0JBUgorCWZPby9iQXIKKwlmT28vYmFyCisJRU9GCisJKCBjZCBmT28gJiYgZ2l0IGxvZyAtLWZvcm1hdD0lcyAtLSAiOihpY2FzZSliYXIiICkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZV9lbnRyeV9pbnRlcmVzdGluZyBtYXRjaGVzIDooaWNhc2UpYmFyIHdpdGggZW1wdHkgcHJlZml4JyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJRk9PL0JBUgorCUZPTy9iQXIKKwlGT08vYmFyCisJZk9vL0JBUgorCWZPby9iQXIKKwlmT28vYmFyCisJZm9vL0JBUgorCWZvby9iQXIKKwlmb28vYmFyCisJRU9GCisJKCBjZCBmT28gJiYgZ2l0IGxvZyAtLWZvcm1hdD0lcyAtLSAiOihpY2FzZSkuLi9mb28vYmFyIiApID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hdGNoX3BhdGhzcGVjIG1hdGNoZXMgOihpY2FzZSliYXInICcKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwlCQVIKKwliQXIKKwliYXIKKwlFT0YKKwlnaXQgbHMtZmlsZXMgIjooaWNhc2UpYmFyIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaF9wYXRoc3BlYyBtYXRjaGVzIDooaWNhc2UpYmFyIHdpdGggcHJlZml4JyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJZk9vL0JBUgorCWZPby9iQXIKKwlmT28vYmFyCisJRU9GCisJKCBjZCBmT28gJiYgZ2l0IGxzLWZpbGVzIC0tZnVsbC1uYW1lICI6KGljYXNlKWJhciIgKSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaF9wYXRoc3BlYyBtYXRjaGVzIDooaWNhc2UpYmFyIHdpdGggZW1wdHkgcHJlZml4JyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJYmFyCisJZk9vL0JBUgorCWZPby9iQXIKKwlmT28vYmFyCisJRU9GCisJKCBjZCBmT28gJiYgZ2l0IGxzLWZpbGVzIC0tZnVsbC1uYW1lICI6KGljYXNlKWJhciIgLi4vYmFyICkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBkaWZmIiBjYW4gdGFrZSBtYWdpYyA6KGljYXNlKSBwYXRoc3BlYycgJworCWVjaG8gRk9PL0JBUiA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgSEVBRF4gSEVBRCAtLSAiOihpY2FzZSlmb28vYmFyIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYxMzItcGF0aHNwZWMtZXhjbHVkZS5zaCBiL3QvdDYxMzItcGF0aHNwZWMtZXhjbHVkZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNDYyYjE5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjEzMi1wYXRoc3BlYy1leGNsdWRlLnNoCkBAIC0wLDAgKzEsMjE0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjYXNlIGV4Y2x1ZGUgcGF0aHNwZWMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWZvciBwIGluIGZpbGUgc3ViL2ZpbGUgc3ViL3N1Yi9maWxlIHN1Yi9maWxlMiBzdWIvc3ViL3N1Yi9maWxlIHN1YjIvZmlsZTsgZG8KKwkJaWYgZWNobyAkcCB8IGdyZXAgLzsgdGhlbgorCQkJbWtkaXIgLXAgJChkaXJuYW1lICRwKQorCQlmaSAmJgorCQk6ID4kcCAmJgorCQlnaXQgYWRkICRwICYmCisJCWdpdCBjb21taXQgLW0gJHAKKwlkb25lICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitzdWIyL2ZpbGUKK3N1Yi9zdWIvc3ViL2ZpbGUKK3N1Yi9maWxlMgorc3ViL3N1Yi9maWxlCitzdWIvZmlsZQorZmlsZQorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGNsdWRlIG9ubHkgcGF0aHNwZWMgdXNlcyBkZWZhdWx0IGltcGxpY2l0IHBhdGhzcGVjJyAnCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1mb3JtYXQ9JXMgLS0gLiAiOihleGNsdWRlKXN1YiIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tZm9ybWF0PSVzIC0tICI6KGV4Y2x1ZGUpc3ViIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0X2VfaSgpIGV4Y2x1ZGUgc3ViJyAnCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1mb3JtYXQ9JXMgLS0gLiAiOihleGNsdWRlKXN1YiIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitzdWIyL2ZpbGUKK2ZpbGUKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndF9lX2koKSBleGNsdWRlIHN1Yi9zdWIvZmlsZScgJworCWdpdCBsb2cgLS1vbmVsaW5lIC0tZm9ybWF0PSVzIC0tIC4gIjooZXhjbHVkZSlzdWIvc3ViL2ZpbGUiID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorc3ViMi9maWxlCitzdWIvc3ViL3N1Yi9maWxlCitzdWIvZmlsZTIKK3N1Yi9maWxlCitmaWxlCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RfZV9pKCkgZXhjbHVkZSBzdWIgdXNpbmcgbW5lbW9uaWMnICcKKwlnaXQgbG9nIC0tb25lbGluZSAtLWZvcm1hdD0lcyAtLSAuICI6IXN1YiIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitzdWIyL2ZpbGUKK2ZpbGUKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndF9lX2koKSBleGNsdWRlIDooaWNhc2UpU1VCJyAnCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1mb3JtYXQ9JXMgLS0gLiAiOihleGNsdWRlLGljYXNlKVNVQiIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitzdWIyL2ZpbGUKK2ZpbGUKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndF9lX2koKSBleGNsdWRlIHN1YjIgZnJvbSBzdWInICcKKwkoCisJY2Qgc3ViICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1mb3JtYXQ9JXMgLS0gOi8gIjovIXN1YjIiID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorc3ViL3N1Yi9zdWIvZmlsZQorc3ViL2ZpbGUyCitzdWIvc3ViL2ZpbGUKK3N1Yi9maWxlCitmaWxlCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0X2VfaSgpIGV4Y2x1ZGUgc3ViLypmaWxlJyAnCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1mb3JtYXQ9JXMgLS0gLiAiOihleGNsdWRlKXN1Yi8qZmlsZSIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitzdWIyL2ZpbGUKK3N1Yi9maWxlMgorZmlsZQorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0X2VfaSgpIGV4Y2x1ZGUgOihnbG9iKXN1Yi8qL2ZpbGUnICcKKwlnaXQgbG9nIC0tb25lbGluZSAtLWZvcm1hdD0lcyAtLSAuICI6KGV4Y2x1ZGUsZ2xvYilzdWIvKi9maWxlIiA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKK3N1YjIvZmlsZQorc3ViL3N1Yi9zdWIvZmlsZQorc3ViL2ZpbGUyCitzdWIvZmlsZQorZmlsZQorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtX3BfZCgpIGV4Y2x1ZGUgc3ViJyAnCisJZ2l0IGxzLWZpbGVzIC0tIC4gIjooZXhjbHVkZSlzdWIiID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorZmlsZQorc3ViMi9maWxlCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21fcF9kKCkgZXhjbHVkZSBzdWIvc3ViL2ZpbGUnICcKKwlnaXQgbHMtZmlsZXMgLS0gLiAiOihleGNsdWRlKXN1Yi9zdWIvZmlsZSIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitmaWxlCitzdWIvZmlsZQorc3ViL2ZpbGUyCitzdWIvc3ViL3N1Yi9maWxlCitzdWIyL2ZpbGUKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbV9wX2QoKSBleGNsdWRlIHN1YiB1c2luZyBtbmVtb25pYycgJworCWdpdCBscy1maWxlcyAtLSAuICI6IXN1YiIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitmaWxlCitzdWIyL2ZpbGUKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbV9wX2QoKSBleGNsdWRlIDooaWNhc2UpU1VCJyAnCisJZ2l0IGxzLWZpbGVzIC0tIC4gIjooZXhjbHVkZSxpY2FzZSlTVUIiID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorZmlsZQorc3ViMi9maWxlCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21fcF9kKCkgZXhjbHVkZSBzdWIyIGZyb20gc3ViJyAnCisJKAorCWNkIHN1YiAmJgorCWdpdCBscy1maWxlcyAtLSA6LyAiOi8hc3ViMiIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCisuLi9maWxlCitmaWxlCitmaWxlMgorc3ViL2ZpbGUKK3N1Yi9zdWIvZmlsZQorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbV9wX2QoKSBleGNsdWRlIHN1Yi8qZmlsZScgJworCWdpdCBscy1maWxlcyAtLSAuICI6KGV4Y2x1ZGUpc3ViLypmaWxlIiA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKK2ZpbGUKK3N1Yi9maWxlMgorc3ViMi9maWxlCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21fcF9kKCkgZXhjbHVkZSA6KGdsb2Ipc3ViLyovZmlsZScgJworCWdpdCBscy1maWxlcyAtLSAuICI6KGV4Y2x1ZGUsZ2xvYilzdWIvKi9maWxlIiA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKK2ZpbGUKK3N1Yi9maWxlCitzdWIvZmlsZTIKK3N1Yi9zdWIvc3ViL2ZpbGUKK3N1YjIvZmlsZQorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBleGNsdXNpb25zJyAnCisJZ2l0IGxzLWZpbGVzIC0tICI6XiovZmlsZTIiICI6XnN1YjIiID5hY3R1YWwgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJZmlsZQorCXN1Yi9maWxlCisJc3ViL3N1Yi9maWxlCisJc3ViL3N1Yi9zdWIvZmlsZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndF9lX2koKSBleGNsdWRlIGNhc2UgIzgnICcKKwlnaXQgaW5pdCBjYXNlOCAmJgorCSgKKwkJY2QgY2FzZTggJiYKKwkJZWNobyBmaWxlID5maWxlMSAmJgorCQllY2hvIGZpbGUgPmZpbGUyICYmCisJCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwkJZ2l0IGNvbW1pdCAtbSB0d29maWxlcyAmJgorCQlnaXQgZ3JlcCAtbCBmaWxlIEhFQUQgOl5maWxlMiA+YWN0dWFsICYmCisJCWVjaG8gSEVBRDpmaWxlMSA+ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJCWdpdCBncmVwIC1sIGZpbGUgSEVBRCA6XmZpbGUxID5hY3R1YWwgJiYKKwkJZWNobyBIRUFEOmZpbGUyID5leHBlY3RlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjEzMy1wYXRoc3BlYy1yZXYtZHdpbS5zaCBiL3QvdDYxMzMtcGF0aHNwZWMtcmV2LWR3aW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTI5MGZmYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMzMtcGF0aHNwZWMtcmV2LWR3aW0uc2gKQEAgLTAsMCArMSw0OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZHdpbSBvZiByZXZzIHZlcnN1cyBwYXRoc3BlY3MgaW4gcmV2aXNpb24gcGFyc2VyJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgYmFzZSAmJgorCWVjaG8gY29udGVudCA+ImJyW2Fja11ldHMiICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBicmFja2V0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tcmV2IHdpbGRjYXJkIGR3aW1zIHRvIHBhdGhzcGVjJyAnCisJZ2l0IGxvZyAtLSAiKi50IiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAgICAiKi50IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlOnBhdGggd2l0aCBtZXRhY2hhcmFjdGVycyBkd2ltcyB0byByZXYnICcKKwlnaXQgc2hvdyAiSEVBRDpiclthY2tdZXRzIiAtLSA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgIkhFQUQ6YnJbYWNrXWV0cyIgICAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnXntmb299IHdpdGggbWV0YWNoYXJhY3RlcnMgZHdpbXMgdG8gcmV2JyAnCisJZ2l0IGxvZyAiSEVBRF57L2IuKn0iIC0tID5leHBlY3QgJiYKKwlnaXQgbG9nICJIRUFEXnsvYi4qfSIgICAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHtmb299IHdpdGggbWV0YWNoYXJhY3RlcnMgZHdpbXMgdG8gcmV2JyAnCisJZ2l0IGxvZyAiSEVBREB7bm93IFtvciB0aGVyZWFib3V0c119IiAtLSA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAiSEVBREB7bm93IFtvciB0aGVyZWFib3V0c119IiAgICA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc6LyoudCBmcm9tIGEgc3ViZGlyIGR3aW1zIHRvIGEgcGF0aHNwZWMnICcKKwlta2RpciBzdWJkaXIgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgbG9nIC0tICI6LyoudCIgPmV4cGVjdCAmJgorCQlnaXQgbG9nICAgICI6LyoudCIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYxMzQtcGF0aHNwZWMtaW4tc3VibW9kdWxlLnNoIGIvdC90NjEzNC1wYXRoc3BlYy1pbi1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzY3MDY2OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMzQtcGF0aHNwZWMtaW4tc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNhc2UgZXhjbHVkZSBwYXRoc3BlYycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgc3VibW9kdWxlJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBwcmV0emVsICYmCisJOiA+cHJldHplbC9hICYmCisJZ2l0IC1DIHByZXR6ZWwgYWRkIGEgJiYKKwlnaXQgLUMgcHJldHplbCBjb21taXQgLW0gImFkZCBhIGZpbGUiIC0tIGEgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuL3ByZXR6ZWwgc3ViICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiYWRkIHN1Ym1vZHVsZSIgJiYKKwlnaXQgc3VibW9kdWxlIGRlaW5pdCAtLWFsbAorJworCitjYXQgPDxFT0YgPmV4cGVjdAorZmF0YWw6IFBhdGhzcGVjICdzdWIvYScgaXMgaW4gc3VibW9kdWxlICdzdWInCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3IgbWVzc2FnZSBmb3IgcGF0aCBpbnNpZGUgc3VibW9kdWxlJyAnCisJZWNobyBhID5zdWIvYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgc3ViL2EgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBtZXNzYWdlIGZvciBwYXRoIGluc2lkZSBzdWJtb2R1bGUgZnJvbSB3aXRoaW4gc3VibW9kdWxlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1YiBhZGQgLiAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSIgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjEzNS1wYXRoc3BlYy13aXRoLWF0dHJzLnNoIGIvdC90NjEzNS1wYXRoc3BlYy13aXRoLWF0dHJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ1N2NjMTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MTM1LXBhdGhzcGVjLXdpdGgtYXR0cnMuc2gKQEAgLTAsMCArMSwyNTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGxhYmVscyBpbiBwYXRoc3BlY3MnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYSB0cmVlJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCWZpbGVBCisJZmlsZUFCCisJZmlsZUFDCisJZmlsZUIKKwlmaWxlQkMKKwlmaWxlQworCWZpbGVOb0xhYmVsCisJZmlsZVNldExhYmVsCisJZmlsZVVuc2V0TGFiZWwKKwlmaWxlVmFsdWUKKwlmaWxlV3JvbmdMYWJlbAorCXN1Yi9maWxlQQorCXN1Yi9maWxlQUIKKwlzdWIvZmlsZUFDCisJc3ViL2ZpbGVCCisJc3ViL2ZpbGVCQworCXN1Yi9maWxlQworCXN1Yi9maWxlTm9MYWJlbAorCXN1Yi9maWxlU2V0TGFiZWwKKwlzdWIvZmlsZVVuc2V0TGFiZWwKKwlzdWIvZmlsZVZhbHVlCisJc3ViL2ZpbGVXcm9uZ0xhYmVsCisJRU9GCisJbWtkaXIgc3ViICYmCisJd2hpbGUgcmVhZCBwYXRoCisJZG8KKwkJZWNobyBjb250ZW50ID4kcGF0aCAmJgorCQlnaXQgYWRkICRwYXRoIHx8IHJldHVybiAxCisJZG9uZSA8ZXhwZWN0ICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiICYmCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGhzcGVjIHdpdGggbm8gYXR0cicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAiOihhdHRyOikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGhzcGVjIHdpdGggbGFiZWxzIGFuZCBub24gZXhpc3RlbnQgLmdpdGF0dHJpYnV0ZXMnICcKKwlnaXQgbHMtZmlsZXMgIjooYXR0cjpsYWJlbCkiID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGhzcGVjIHdpdGggbGFiZWxzIGFuZCBub24gZXhpc3RlbnQgLmdpdGF0dHJpYnV0ZXMgKDIpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgY29udGVudCBIRUFEIC0tICI6KGF0dHI6bGFiZWwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAuZ2l0YXR0cmlidXRlcycgJworCWNhdCA8PC1cRU9GID4uZ2l0YXR0cmlidXRlcyAmJgorCWZpbGVBIGxhYmVsQQorCWZpbGVCIGxhYmVsQgorCWZpbGVDIGxhYmVsQworCWZpbGVBQiBsYWJlbEEgbGFiZWxCCisJZmlsZUFDIGxhYmVsQSBsYWJlbEMKKwlmaWxlQkMgbGFiZWxCIGxhYmVsQworCWZpbGVVbnNldExhYmVsIC1sYWJlbAorCWZpbGVTZXRMYWJlbCBsYWJlbAorCWZpbGVWYWx1ZSBsYWJlbD1mb28KKwlmaWxlV3JvbmdMYWJlbCBsYWJlbOKYugorCUVPRgorCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgYXR0cmlidXRlcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BlY2lmaWMgc2V0IGF0dHInICcKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJZmlsZVNldExhYmVsCisJc3ViL2ZpbGVTZXRMYWJlbAorCUVPRgorCWdpdCBscy1maWxlcyAiOihhdHRyOmxhYmVsKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BlY2lmaWMgc2V0IGF0dHIgKDIpJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCUhFQUQ6ZmlsZVNldExhYmVsCisJSEVBRDpzdWIvZmlsZVNldExhYmVsCisJRU9GCisJZ2l0IGdyZXAgLWwgY29udGVudCBIRUFEICI6KGF0dHI6bGFiZWwpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzcGVjaWZpYyB1bnNldCBhdHRyJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCWZpbGVVbnNldExhYmVsCisJc3ViL2ZpbGVVbnNldExhYmVsCisJRU9GCisJZ2l0IGxzLWZpbGVzICI6KGF0dHI6LWxhYmVsKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BlY2lmaWMgdW5zZXQgYXR0ciAoMiknICcKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJSEVBRDpmaWxlVW5zZXRMYWJlbAorCUhFQUQ6c3ViL2ZpbGVVbnNldExhYmVsCisJRU9GCisJZ2l0IGdyZXAgLWwgY29udGVudCBIRUFEICI6KGF0dHI6LWxhYmVsKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BlY2lmaWMgdmFsdWUgYXR0cicgJworCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwlmaWxlVmFsdWUKKwlzdWIvZmlsZVZhbHVlCisJRU9GCisJZ2l0IGxzLWZpbGVzICI6KGF0dHI6bGFiZWw9Zm9vKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgbHMtZmlsZXMgIjooYXR0cjpsYWJlbD1iYXIpIiA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzcGVjaWZpYyB2YWx1ZSBhdHRyICgyKScgJworCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwlIRUFEOmZpbGVWYWx1ZQorCUhFQUQ6c3ViL2ZpbGVWYWx1ZQorCUVPRgorCWdpdCBncmVwIC1sIGNvbnRlbnQgSEVBRCAiOihhdHRyOmxhYmVsPWZvbykiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLWwgY29udGVudCBIRUFEICI6KGF0dHI6bGFiZWw9YmFyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdW5zcGVjaWZpZWQgYXR0cicgJworCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwkuZ2l0YXR0cmlidXRlcworCWZpbGVBCisJZmlsZUFCCisJZmlsZUFDCisJZmlsZUIKKwlmaWxlQkMKKwlmaWxlQworCWZpbGVOb0xhYmVsCisJZmlsZVdyb25nTGFiZWwKKwlzdWIvZmlsZUEKKwlzdWIvZmlsZUFCCisJc3ViL2ZpbGVBQworCXN1Yi9maWxlQgorCXN1Yi9maWxlQkMKKwlzdWIvZmlsZUMKKwlzdWIvZmlsZU5vTGFiZWwKKwlzdWIvZmlsZVdyb25nTGFiZWwKKwlFT0YKKwlnaXQgbHMtZmlsZXMgIjooYXR0cjohbGFiZWwpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB1bnNwZWNpZmllZCBhdHRyICgyKScgJworCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwlIRUFEOi5naXRhdHRyaWJ1dGVzCisJSEVBRDpmaWxlQQorCUhFQUQ6ZmlsZUFCCisJSEVBRDpmaWxlQUMKKwlIRUFEOmZpbGVCCisJSEVBRDpmaWxlQkMKKwlIRUFEOmZpbGVDCisJSEVBRDpmaWxlTm9MYWJlbAorCUhFQUQ6ZmlsZVdyb25nTGFiZWwKKwlIRUFEOnN1Yi9maWxlQQorCUhFQUQ6c3ViL2ZpbGVBQgorCUhFQUQ6c3ViL2ZpbGVBQworCUhFQUQ6c3ViL2ZpbGVCCisJSEVBRDpzdWIvZmlsZUJDCisJSEVBRDpzdWIvZmlsZUMKKwlIRUFEOnN1Yi9maWxlTm9MYWJlbAorCUhFQUQ6c3ViL2ZpbGVXcm9uZ0xhYmVsCisJRU9GCisJZ2l0IGdyZXAgLWwgXiBIRUFEICI6KGF0dHI6IWxhYmVsKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbXVsdGlwbGUgdW5zcGVjaWZpZWQgYXR0cicgJworCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwkuZ2l0YXR0cmlidXRlcworCWZpbGVDCisJZmlsZU5vTGFiZWwKKwlmaWxlV3JvbmdMYWJlbAorCXN1Yi9maWxlQworCXN1Yi9maWxlTm9MYWJlbAorCXN1Yi9maWxlV3JvbmdMYWJlbAorCUVPRgorCWdpdCBscy1maWxlcyAiOihhdHRyOiFsYWJlbEIgIWxhYmVsQSAhbGFiZWwpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBsYWJlbCB3aXRoIG1vcmUgbGFiZWxzIGJ1dCBleGNsdWRlZCBwYXRoJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCWZpbGVBQgorCWZpbGVCCisJZmlsZUJDCisJRU9GCisJZ2l0IGxzLWZpbGVzICI6KGF0dHI6bGFiZWxCKSIgIjooZXhjbHVkZSlzdWIvIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBsYWJlbCBleGNsdWRpbmcgb3RoZXIgbGFiZWxzJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCWZpbGVBQgorCWZpbGVCCisJZmlsZUJDCisJc3ViL2ZpbGVBQgorCXN1Yi9maWxlQgorCUVPRgorCWdpdCBscy1maWxlcyAiOihhdHRyOmxhYmVsQikiICI6KGV4Y2x1ZGUsYXR0cjpsYWJlbEMpc3ViLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBvbiBtdWx0aXBsZSBhdHRyIHNwZWNpZmllcnMgaW4gb25lIHBhdGhzcGVjIGl0ZW0nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLiAiOihhdHRyOmxhYmVsQixhdHRyOmxhYmVsQykiIDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiT25seSBvbmUiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIGlmIGF0dHIgbWFnaWMgaXMgdXNlZCBwbGFjZXMgbm90IGltcGxlbWVudGVkJyAnCisJIyBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byBjaGVjayB0aGF0IHdlIGFjdHVhbGx5IGZhaWwKKwkjIHdoZW4geW91IGF0dGVtcHQgdG8gdXNlIGF0dHIgbWFnaWMgaW4gY29tbWFuZHMgdGhhdCBkbyBub3QgaW1wbGVtZW50CisJIyBhdHRyIG1hZ2ljLiBUaGlzIHRlc3QgZG9lcyBub3QgYWR2b2NhdGUgZ2l0LWFkZCB0byBzdGF5IHRoYXQgd2F5LAorCSMgdGhvdWdoLCBidXQgZ2l0LWFkZCBpcyBjb252ZW5pZW50IGFzIGl0IGhhcyBpdHMgb3duIGludGVybmFsIHBhdGhzcGVjCisJIyBwYXJzaW5nLgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIjooYXR0cjpsYWJlbEIpIiAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIm1hZ2ljIG5vdCBzdXBwb3J0ZWQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYm9ydCBvbiBnaXZpbmcgaW52YWxpZCBsYWJlbCBvbiB0aGUgY29tbWFuZCBsaW5lJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC4gIjooYXR0cjrimLopIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYm9ydCBvbiBhc2tpbmcgZm9yIHdyb25nIG1hZ2ljJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC4gIjooYXR0cjotbGFiZWw9Zm9vKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLiAiOihhdHRyOiFsYWJlbD1mb28pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBhdHRyaWJ1dGUgbGlzdCcgJworCWNhdCA8PC1FT0YgPj4uZ2l0YXR0cmlidXRlcyAmJgorCSogd2hpdGVzcGFjZT1pbmRlbnQsdHJhaWwsc3BhY2UKKwlFT0YKKwlnaXQgbHMtZmlsZXMgIjooYXR0cjp3aGl0ZXNwYWNlPWluZGVudFwsdHJhaWxcLHNwYWNlKSIgPmFjdHVhbCAmJgorCWdpdCBscy1maWxlcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYWNrc2xhc2ggY2Fubm90IGJlIHRoZSBsYXN0IGNoYXJhY3RlcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAiOihhdHRyOmxhYmVsPWZvb1xcIGxhYmVsQT1iYXIpIiAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdCBhbGxvd2VkIGFzIGxhc3QgY2hhcmFjdGVyIGluIGF0dHIgdmFsdWUiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYWNrc2xhc2ggY2Fubm90IGJlIHVzZWQgYXMgYSB2YWx1ZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAiOihhdHRyOmxhYmVsPWZcXFxvbykiIDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiZm9yIHZhbHVlIG1hdGNoaW5nIiBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MTM2LXBhdGhzcGVjLWluLWJhcmUuc2ggYi90L3Q2MTM2LXBhdGhzcGVjLWluLWJhcmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjExNzI1MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMzYtcGF0aHNwZWMtaW4tYmFyZS5zaApAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGlhZ25vc2luZyBvdXQtb2Ytc2NvcGUgcGF0aHNwZWMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIGJhcmUgYW5kIG5vbi1iYXJlIHJlcG9zaXRvcnknICcKKwl0ZXN0X2NvbW1pdCBmaWxlMSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBhbmQgbHMtZmlsZXMgaW4gYSBiYXJlIHJlcG9zaXRvcnknICcKKwkoCisJCWNkIGJhcmUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtLSAuLiA+b3V0IDI+ZXJyICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAib3V0c2lkZSByZXBvc2l0b3J5IiBlcnIgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS0gLi4gPm91dCAyPmVyciAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIm91dHNpZGUgcmVwb3NpdG9yeSIgZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgYW5kIGxzLWZpbGVzIGluIC5naXQgZGlyZWN0b3J5JyAnCisJKAorCQljZCAuZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLS0gLi4gPm91dCAyPmVyciAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIm91dHNpZGUgcmVwb3NpdG9yeSIgZXJyICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tIC4uID5vdXQgMj5lcnIgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJvdXRzaWRlIHJlcG9zaXRvcnkiIGVycgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MjAwLWZtdC1tZXJnZS1tc2cuc2ggYi90L3Q2MjAwLWZtdC1tZXJnZS1tc2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjE1NTgyYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYyMDAtZm10LW1lcmdlLW1zZy5zaApAQCAtMCwwICsxLDU0NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiwgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZm10LW1lcmdlLW1zZyB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItZ3BnLnNoIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIiAmJgorCisJZ2l0IGNsb25lIC4gcmVtb3RlICYmCisKKwllY2hvIHVubyA+b25lICYmCisJZWNobyBkb3MgPnR3byAmJgorCWdpdCBhZGQgdHdvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiU2Vjb25kIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGxlZnQgJiYKKworCWVjaG8gImMxIiA+b25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiQ29tbW9uICMxIiAmJgorCisJZWNobyAiYzIiID5vbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJDb21tb24gIzIiICYmCisKKwlnaXQgYnJhbmNoIHJpZ2h0ICYmCisKKwllY2hvICJsMyIgPnR3byAmJgorCXRlc3RfdGljayAmJgorCUdJVF9DT01NSVRURVJfTkFNRT0iQW5vdGhlciBDb21taXR0ZXIiIFwKKwlHSVRfQVVUSE9SX05BTUU9IkFub3RoZXIgQXV0aG9yIiBnaXQgY29tbWl0IC1hIC1tICJMZWZ0ICMzIiAmJgorCisJZWNobyAibDQiID50d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQ09NTUlUVEVSX05BTUU9IkFub3RoZXIgQ29tbWl0dGVyIiBcCisJR0lUX0FVVEhPUl9OQU1FPSJBbm90aGVyIEF1dGhvciIgZ2l0IGNvbW1pdCAtYSAtbSAiTGVmdCAjNCIgJiYKKworCWVjaG8gImw1IiA+dHdvICYmCisJdGVzdF90aWNrICYmCisJR0lUX0NPTU1JVFRFUl9OQU1FPSJBbm90aGVyIENvbW1pdHRlciIgXAorCUdJVF9BVVRIT1JfTkFNRT0iQW5vdGhlciBBdXRob3IiIGdpdCBjb21taXQgLWEgLW0gIkxlZnQgIzUiICYmCisJZ2l0IHRhZyB0YWctbDUgJiYKKworCWdpdCBjaGVja291dCByaWdodCAmJgorCisJZWNobyAicjMiID50aHJlZSAmJgorCWdpdCBhZGQgdGhyZWUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJSaWdodCAjMyIgJiYKKwlnaXQgdGFnIHRhZy1yMyAmJgorCisJZWNobyAicjQiID50aHJlZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIlJpZ2h0ICM0IiAmJgorCisJZWNobyAicjUiID50aHJlZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIlJpZ2h0ICM1IiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGxvbmcgJiYKKwl0ZXN0X2NvbW1pdF9idWxrIC0tc3RhcnQ9MCAtLW1lc3NhZ2U9JXMgLS1maWxlbmFtZT1vbmUgMzAgJiYKKworCWdpdCBzaG93LWJyYW5jaCAmJgorCisJYXBvcz0iJ1wnJyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3NldCB1cCBhIHNpZ25lZCB0YWcnICcKKwlnaXQgdGFnIC1zIC1tIHNpZ25lZC10YWctbXNnIHNpZ25lZC1nb29kLXRhZyBsZWZ0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lc3NhZ2UgZm9yIG1lcmdpbmcgbG9jYWwgYnJhbmNoJyAnCisJZWNobyAiTWVyZ2UgYnJhbmNoICR7YXBvc31sZWZ0JHthcG9zfSIgPmV4cGVjdGVkICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGZldGNoIC4gbGVmdCAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdtZXNzYWdlIGZvciBtZXJnaW5nIGxvY2FsIHRhZyBzaWduZWQgYnkgZ29vZCBrZXknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGZldGNoIC4gc2lnbmVkLWdvb2QtdGFnICYmCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsIDI+JjEgJiYKKwlncmVwICJeTWVyZ2UgdGFnICR7YXBvc31zaWduZWQtZ29vZC10YWcke2Fwb3N9IiBhY3R1YWwgJiYKKwlncmVwICJeIyBncGc6IFNpZ25hdHVyZSBtYWRlIiBhY3R1YWwgJiYKKwlncmVwICJeIyBncGc6IEdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVzc2FnZSBmb3IgbWVyZ2luZyBsb2NhbCB0YWcgc2lnbmVkIGJ5IHVua25vd24ga2V5JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBmZXRjaCAuIHNpZ25lZC1nb29kLXRhZyAmJgorCUdOVVBHSE9NRT0uIGdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAyPiYxICYmCisJZ3JlcCAiXk1lcmdlIHRhZyAke2Fwb3N9c2lnbmVkLWdvb2QtdGFnJHthcG9zfSIgYWN0dWFsICYmCisJZ3JlcCAiXiMgZ3BnOiBTaWduYXR1cmUgbWFkZSIgYWN0dWFsICYmCisJZ3JlcCAiXiMgZ3BnOiBDYW4ke2Fwb3N9dCBjaGVjayBzaWduYXR1cmU6IFwocHVibGljIGtleSBub3QgZm91bmRcfE5vIHB1YmxpYyBrZXlcKSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lc3NhZ2UgZm9yIG1lcmdpbmcgZXh0ZXJuYWwgYnJhbmNoJyAnCisJZWNobyAiTWVyZ2UgYnJhbmNoICR7YXBvc31sZWZ0JHthcG9zfSBvZiAkKHB3ZCkiID5leHBlY3RlZCAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBmZXRjaCAiJChwd2QpIiBsZWZ0ICYmCisKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnW21lcmdlXSBzdW1tYXJ5L2xvZyBjb25maWd1cmF0aW9uJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9CisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCUVPRgorCisJdGVzdF9jb25maWcgbWVyZ2UubG9nIHRydWUgJiYKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLnN1bW1hcnkgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0ICYmCisKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwxICYmCisKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLmxvZyAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnN1bW1hcnkgdHJ1ZSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBmZXRjaCAuIGxlZnQgJiYKKworCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbDIgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDEgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIEZFVENIX0hFQUQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbGVmdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS5sb2c9MyBsaW1pdHMgc2hvcnRsb2cgbGVuZ3RoJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9CisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6ICg1IGNvbW1pdHMpCisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICAuLi4KKwlFT0YKKworCWdpdCAtYyBtZXJnZS5sb2c9MyBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS5sb2c9NSBzaG93cyBhbGwgNSBjb21taXRzJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9CisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCUVPRgorCisJZ2l0IC1jIG1lcmdlLmxvZz01IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbG9nPTUgd2l0aCBjdXN0b20gY29tbWVudCBjaGFyYWN0ZXInICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCU1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30KKworCXggQnkgQW5vdGhlciBBdXRob3IgKDMpIGFuZCBBIFUgVGhvciAoMikKKwl4IFZpYSBBbm90aGVyIENvbW1pdHRlcgorCSogbGVmdDoKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisKKwlnaXQgLWMgY29yZS5jb21tZW50Y2hhcj0ieCIgZm10LW1lcmdlLW1zZyAtLWxvZz01IDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS5sb2c9MCBkaXNhYmxlcyBzaG9ydGxvZycgJworCWVjaG8gIk1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30iID5leHBlY3RlZCAmJgorCWdpdCAtYyBtZXJnZS5sb2c9MCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxvZz0zIGxpbWl0cyBzaG9ydGxvZyBsZW5ndGgnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCU1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30KKworCSMgQnkgQW5vdGhlciBBdXRob3IgKDMpIGFuZCBBIFUgVGhvciAoMikKKwkjIFZpYSBBbm90aGVyIENvbW1pdHRlcgorCSogbGVmdDogKDUgY29tbWl0cykKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIC4uLgorCUVPRgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgLS1sb2c9MyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1sb2c9NSBzaG93cyBhbGwgNSBjb21taXRzJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9CisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCUVPRgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgLS1sb2c9NSA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1sb2cgZGlzYWJsZXMgc2hvcnRsb2cnICcKKwllY2hvICJNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9IiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZm10LW1lcmdlLW1zZyAtLW5vLWxvZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1sb2c9MCBkaXNhYmxlcyBzaG9ydGxvZycgJworCWVjaG8gIk1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30iID5leHBlY3RlZCAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIC0tbm8tbG9nIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmbXQtbWVyZ2UtbXNnIC1tJyAnCisJZWNobyAiU3luYyB3aXRoIGxlZnQiID5leHBlY3RlZCAmJgorCWNhdCA+ZXhwZWN0ZWQubG9nIDw8LUVPRiAmJgorCVN5bmMgd2l0aCBsZWZ0CisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqICR7YXBvc31sZWZ0JHthcG9zfSBvZiAkKHB3ZCk6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCUVPRgorCisJdGVzdF91bmNvbmZpZyBtZXJnZS5sb2cgJiYKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLnN1bW1hcnkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGZldGNoICIkKHB3ZCkiIGxlZnQgJiYKKwlnaXQgZm10LW1lcmdlLW1zZyAtbSAiU3luYyB3aXRoIGxlZnQiIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIC0tbG9nIC1tICJTeW5jIHdpdGggbGVmdCIgXAorCQkJCQk8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwubG9nICYmCisJdGVzdF9jb25maWcgbWVyZ2UubG9nIHRydWUgJiYKKwlnaXQgZm10LW1lcmdlLW1zZyAtbSAiU3luYyB3aXRoIGxlZnQiIFwKKwkJCQkJPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsLmxvZy1jb25maWcgJiYKKwlnaXQgZm10LW1lcmdlLW1zZyAtLW5vLWxvZyAtbSAiU3luYyB3aXRoIGxlZnQiIFwKKwkJCQkJPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsLm5vbG9nICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5sb2cgYWN0dWFsLmxvZyAmJgorCXRlc3RfY21wIGV4cGVjdGVkLmxvZyBhY3R1YWwubG9nLWNvbmZpZyAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC5ub2xvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogZXhwZWN0ZWQgc2hvcnRsb2cgZm9yIHR3byBicmFuY2hlcycgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GCisJTWVyZ2UgYnJhbmNoZXMgJHthcG9zfWxlZnQke2Fwb3N9IGFuZCAke2Fwb3N9cmlnaHQke2Fwb3N9CisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCisJKiByaWdodDoKKwkgIFJpZ2h0ICM1CisJICBSaWdodCAjNAorCSAgUmlnaHQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0bG9nIGZvciB0d28gYnJhbmNoZXMnICcKKwl0ZXN0X2NvbmZpZyBtZXJnZS5sb2cgdHJ1ZSAmJgorCXRlc3RfdW5jb25maWcgbWVyZ2Uuc3VtbWFyeSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsMSAmJgorCisJdGVzdF91bmNvbmZpZyBtZXJnZS5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5zdW1tYXJ5IHRydWUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbDIgJiYKKworCXRlc3RfY29uZmlnIG1lcmdlLmxvZyB5ZXMgJiYKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLnN1bW1hcnkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbDMgJiYKKworCXRlc3RfdW5jb25maWcgbWVyZ2UubG9nICYmCisJdGVzdF9jb25maWcgbWVyZ2Uuc3VtbWFyeSB5ZXMgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbDQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDEgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsMyAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIC1GJyAnCisJdGVzdF91bmNvbmZpZyBtZXJnZS5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5zdW1tYXJ5IHllcyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJZ2l0IGZtdC1tZXJnZS1tc2cgLUYgLmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIC1GIGluIHN1YmRpcmVjdG9yeScgJworCXRlc3RfdW5jb25maWcgbWVyZ2UubG9nICYmCisJdGVzdF9jb25maWcgbWVyZ2Uuc3VtbWFyeSB5ZXMgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCW1rZGlyIHN1YiAmJgorCWNwIC5naXQvRkVUQ0hfSEVBRCBzdWIvRkVUQ0hfSEVBRCAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBmbXQtbWVyZ2UtbXNnIC1GIEZFVENIX0hFQUQgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHdpdGggbm90aGluZyB0byBtZXJnZScgJworCXRlc3RfdW5jb25maWcgbWVyZ2UubG9nICYmCisJdGVzdF9jb25maWcgbWVyZ2Uuc3VtbWFyeSB5ZXMgJiYKKworCSgKKwkJY2QgcmVtb3RlICYmCisJCWdpdCBjaGVja291dCAtYiB1bnJlbGF0ZWQgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBmZXRjaCBvcmlnaW4gJiYKKwkJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+Li4vYWN0dWFsCisJKSAmJgorCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgdGFnJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSB0YWcgJHthcG9zfXRhZy1yMyR7YXBvc30KKworCSogdGFnICR7YXBvc310YWctcjMke2Fwb3N9OgorCSAgUmlnaHQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLmxvZyAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gdGFnIHRhZy1yMyAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB0d28gdGFncycgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJTWVyZ2UgdGFncyAke2Fwb3N9dGFnLXIzJHthcG9zfSBhbmQgJHthcG9zfXRhZy1sNSR7YXBvc30KKworCSogdGFnICR7YXBvc310YWctcjMke2Fwb3N9OgorCSAgUmlnaHQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIHRhZyAke2Fwb3N9dGFnLWw1JHthcG9zfToKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLmxvZyAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gdGFnIHRhZy1yMyB0YWcgdGFnLWw1ICYmCisKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHRhZyBhbmQgYnJhbmNoJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9LCB0YWcgJHthcG9zfXRhZy1yMyR7YXBvc30KKworCSogdGFnICR7YXBvc310YWctcjMke2Fwb3N9OgorCSAgUmlnaHQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCUVPRgorCisJdGVzdF91bmNvbmZpZyBtZXJnZS5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5zdW1tYXJ5IHllcyAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBmZXRjaCAuIHRhZyB0YWctcjMgbGVmdCAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyBsb3RzIG9mIGNvbW1pdHMnICcKKwl7CisJCWNhdCA8PC1FT0YgJiYKKwkJTWVyZ2UgYnJhbmNoICR7YXBvc31sb25nJHthcG9zfQorCisJCSogbG9uZzogKDM1IGNvbW1pdHMpCisJCUVPRgorCisJCWk9MjkgJiYKKwkJd2hpbGUgdGVzdCAkaSAtZ3QgOQorCQlkbworCQkJZWNobyAiICAkaSIgJiYKKwkJCWk9JCgoJGktMSkpCisJCWRvbmUgJiYKKwkJZWNobyAiICAuLi4iCisJfSA+ZXhwZWN0ZWQgJiYKKworCXRlc3RfY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbG9uZyAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB3aXRoICJtZXJnaW5nIiBhbiBhbm5vdGF0ZWQgdGFnJyAnCisJdGVzdF9jb25maWcgbWVyZ2UubG9nIHRydWUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiT25lIHN0ZXAgYWhlYWQiICYmCisJZ2l0IHRhZyAtYSAtbSAiQW4gYW5ub3RhdGVkIG9uZSIgYW5ub3RlIEhFQUQgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgZmV0Y2ggLiBhbm5vdGUgJiYKKworCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXsKKwkJY2F0IDw8LVxFT0YKKwkJTWVyZ2UgdGFnICdcJydhbm5vdGUnXCcnCisKKwkJQW4gYW5ub3RhdGVkIG9uZQorCisJCSogdGFnICdcJydhbm5vdGUnXCcnOgorCQkgIE9uZSBzdGVwIGFoZWFkCisJCUVPRgorCX0gPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJYW5ub3RlPSQoZ2l0IHJldi1wYXJzZSBhbm5vdGUpICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IC0tbm8tZmYgJGFubm90ZSAmJgorCXsKKwkJY2F0IDw8LUVPRgorCQlNZXJnZSB0YWcgJ1wnJyRhbm5vdGUnXCcnCisKKwkJQW4gYW5ub3RhdGVkIG9uZQorCisJCSogdGFnICdcJyckYW5ub3RlJ1wnJzoKKwkJICBPbmUgc3RlcCBhaGVhZAorCQlFT0YKKwl9ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIC5naXQvTUVSR0VfTVNHCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjMwMC1mb3ItZWFjaC1yZWYuc2ggYi90L3Q2MzAwLWZvci1lYWNoLXJlZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYTU5ZmFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjMwMC1mb3ItZWFjaC1yZWYuc2gKQEAgLTAsMCArMSw5ODAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQW5keSBQYXJraW5zCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2Zvci1lYWNoLXJlZiB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdwZy5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItdGVybWluYWwuc2gKKworIyBNb24gSnVsIDMgMjM6MTg6NDMgMjAwNiArMDAwMAorZGF0ZXN0YW1wPTExNTE5Njg3MjMKK3NldGRhdGVfYW5kX2luY3JlbWVudCAoKSB7CisgICAgR0lUX0NPTU1JVFRFUl9EQVRFPSIkZGF0ZXN0YW1wICswMjAwIgorICAgIGRhdGVzdGFtcD0kKGV4cHIgIiRkYXRlc3RhbXAiICsgMSkKKyAgICBHSVRfQVVUSE9SX0RBVEU9IiRkYXRlc3RhbXAgKzAyMDAiCisgICAgZGF0ZXN0YW1wPSQoZXhwciAiJGRhdGVzdGFtcCIgKyAxKQorICAgIGV4cG9ydCBHSVRfQ09NTUlUVEVSX0RBVEUgR0lUX0FVVEhPUl9EQVRFCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3Rfb2lkX2NhY2hlIDw8LUVPRiAmJgorCWRpc2tsZW4gc2hhMToxMzgKKwlkaXNrbGVuIHNoYTI1NjoxNTQKKwlFT0YKKwlzZXRkYXRlX2FuZF9pbmNyZW1lbnQgJiYKKwllY2hvICJVc2luZyAkZGF0ZXN0YW1wIiA+IG9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCIgJiYKKwlzZXRkYXRlX2FuZF9pbmNyZW1lbnQgJiYKKwlnaXQgdGFnIC1hIC1tICJUYWdnaW5nIGF0ICRkYXRlc3RhbXAiIHRlc3R0YWcgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciBtYXN0ZXIgJiYKKwlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gbm93aGVyZSAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgb3JpZ2luICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IHJlbW90ZSBhZGQgbXlmb3JrIGVsc2V3aGVyZSAmJgorCWdpdCBjb25maWcgcmVtb3RlLnB1c2hkZWZhdWx0IG15Zm9yayAmJgorCWdpdCBjb25maWcgcHVzaC5kZWZhdWx0IGN1cnJlbnQKKycKKwordGVzdF9hdG9tKCkgeworCWNhc2UgIiQxIiBpbgorCQloZWFkKSByZWY9cmVmcy9oZWFkcy9tYXN0ZXIgOzsKKwkJIHRhZykgcmVmPXJlZnMvdGFncy90ZXN0dGFnIDs7CisJCSBzeW0pIHJlZj1yZWZzL2hlYWRzL3N5bSA7OworCQkgICAqKSByZWY9JDEgOzsKKwllc2FjCisJcHJpbnRmICclc1xuJyAiJDMiID5leHBlY3RlZAorCXRlc3RfZXhwZWN0XyR7NDotc3VjY2Vzc30gJFBSRVJFUSAiYmFzaWMgYXRvbTogJDEgJDIiICIKKwkJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJSgkMiknICRyZWYgPmFjdHVhbCAmJgorCQlzYW5pdGl6ZV9wZ3AgPGFjdHVhbCA+YWN0dWFsLmNsZWFuICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC5jbGVhbgorCSIKK30KKworaGV4bGVuPSQodGVzdF9vaWQgaGV4c3opCitkaXNrbGVuPSQodGVzdF9vaWQgZGlza2xlbikKKwordGVzdF9hdG9tIGhlYWQgcmVmbmFtZSByZWZzL2hlYWRzL21hc3RlcgordGVzdF9hdG9tIGhlYWQgcmVmbmFtZTogcmVmcy9oZWFkcy9tYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHJlZm5hbWU6c2hvcnQgbWFzdGVyCit0ZXN0X2F0b20gaGVhZCByZWZuYW1lOmxzdHJpcD0xIGhlYWRzL21hc3RlcgordGVzdF9hdG9tIGhlYWQgcmVmbmFtZTpsc3RyaXA9MiBtYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHJlZm5hbWU6bHN0cmlwPS0xIG1hc3RlcgordGVzdF9hdG9tIGhlYWQgcmVmbmFtZTpsc3RyaXA9LTIgaGVhZHMvbWFzdGVyCit0ZXN0X2F0b20gaGVhZCByZWZuYW1lOnJzdHJpcD0xIHJlZnMvaGVhZHMKK3Rlc3RfYXRvbSBoZWFkIHJlZm5hbWU6cnN0cmlwPTIgcmVmcwordGVzdF9hdG9tIGhlYWQgcmVmbmFtZTpyc3RyaXA9LTEgcmVmcwordGVzdF9hdG9tIGhlYWQgcmVmbmFtZTpyc3RyaXA9LTIgcmVmcy9oZWFkcwordGVzdF9hdG9tIGhlYWQgcmVmbmFtZTpzdHJpcD0xIGhlYWRzL21hc3RlcgordGVzdF9hdG9tIGhlYWQgcmVmbmFtZTpzdHJpcD0yIG1hc3RlcgordGVzdF9hdG9tIGhlYWQgcmVmbmFtZTpzdHJpcD0tMSBtYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHJlZm5hbWU6c3RyaXA9LTIgaGVhZHMvbWFzdGVyCit0ZXN0X2F0b20gaGVhZCB1cHN0cmVhbSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgordGVzdF9hdG9tIGhlYWQgdXBzdHJlYW06c2hvcnQgb3JpZ2luL21hc3RlcgordGVzdF9hdG9tIGhlYWQgdXBzdHJlYW06bHN0cmlwPTIgb3JpZ2luL21hc3RlcgordGVzdF9hdG9tIGhlYWQgdXBzdHJlYW06bHN0cmlwPS0yIG9yaWdpbi9tYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHVwc3RyZWFtOnJzdHJpcD0yIHJlZnMvcmVtb3RlcwordGVzdF9hdG9tIGhlYWQgdXBzdHJlYW06cnN0cmlwPS0yIHJlZnMvcmVtb3RlcwordGVzdF9hdG9tIGhlYWQgdXBzdHJlYW06c3RyaXA9MiBvcmlnaW4vbWFzdGVyCit0ZXN0X2F0b20gaGVhZCB1cHN0cmVhbTpzdHJpcD0tMiBvcmlnaW4vbWFzdGVyCit0ZXN0X2F0b20gaGVhZCBwdXNoIHJlZnMvcmVtb3Rlcy9teWZvcmsvbWFzdGVyCit0ZXN0X2F0b20gaGVhZCBwdXNoOnNob3J0IG15Zm9yay9tYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHB1c2g6bHN0cmlwPTEgcmVtb3Rlcy9teWZvcmsvbWFzdGVyCit0ZXN0X2F0b20gaGVhZCBwdXNoOmxzdHJpcD0tMSBtYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHB1c2g6cnN0cmlwPTEgcmVmcy9yZW1vdGVzL215Zm9yawordGVzdF9hdG9tIGhlYWQgcHVzaDpyc3RyaXA9LTEgcmVmcwordGVzdF9hdG9tIGhlYWQgcHVzaDpzdHJpcD0xIHJlbW90ZXMvbXlmb3JrL21hc3RlcgordGVzdF9hdG9tIGhlYWQgcHVzaDpzdHJpcD0tMSBtYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIG9iamVjdHR5cGUgY29tbWl0Cit0ZXN0X2F0b20gaGVhZCBvYmplY3RzaXplICQoKDEzMSArIGhleGxlbikpCit0ZXN0X2F0b20gaGVhZCBvYmplY3RzaXplOmRpc2sgJGRpc2tsZW4KK3Rlc3RfYXRvbSBoZWFkIGRlbHRhYmFzZSAkWkVST19PSUQKK3Rlc3RfYXRvbSBoZWFkIG9iamVjdG5hbWUgJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKQordGVzdF9hdG9tIGhlYWQgb2JqZWN0bmFtZTpzaG9ydCAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCByZWZzL2hlYWRzL21hc3RlcikKK3Rlc3RfYXRvbSBoZWFkIG9iamVjdG5hbWU6c2hvcnQ9MSAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydD0xIHJlZnMvaGVhZHMvbWFzdGVyKQordGVzdF9hdG9tIGhlYWQgb2JqZWN0bmFtZTpzaG9ydD0xMCAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydD0xMCByZWZzL2hlYWRzL21hc3RlcikKK3Rlc3RfYXRvbSBoZWFkIHRyZWUgJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyXnt0cmVlfSkKK3Rlc3RfYXRvbSBoZWFkIHBhcmVudCAnJwordGVzdF9hdG9tIGhlYWQgbnVtcGFyZW50IDAKK3Rlc3RfYXRvbSBoZWFkIG9iamVjdCAnJwordGVzdF9hdG9tIGhlYWQgdHlwZSAnJwordGVzdF9hdG9tIGhlYWQgJypvYmplY3RuYW1lJyAnJwordGVzdF9hdG9tIGhlYWQgJypvYmplY3R0eXBlJyAnJwordGVzdF9hdG9tIGhlYWQgYXV0aG9yICdBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiAxMTUxOTY4NzI0ICswMjAwJwordGVzdF9hdG9tIGhlYWQgYXV0aG9ybmFtZSAnQSBVIFRob3InCit0ZXN0X2F0b20gaGVhZCBhdXRob3JlbWFpbCAnPGF1dGhvckBleGFtcGxlLmNvbT4nCit0ZXN0X2F0b20gaGVhZCBhdXRob3JkYXRlICdUdWUgSnVsIDQgMDE6MTg6NDQgMjAwNiArMDIwMCcKK3Rlc3RfYXRvbSBoZWFkIGNvbW1pdHRlciAnQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTUxOTY4NzIzICswMjAwJwordGVzdF9hdG9tIGhlYWQgY29tbWl0dGVybmFtZSAnQyBPIE1pdHRlcicKK3Rlc3RfYXRvbSBoZWFkIGNvbW1pdHRlcmVtYWlsICc8Y29tbWl0dGVyQGV4YW1wbGUuY29tPicKK3Rlc3RfYXRvbSBoZWFkIGNvbW1pdHRlcmRhdGUgJ1R1ZSBKdWwgNCAwMToxODo0MyAyMDA2ICswMjAwJwordGVzdF9hdG9tIGhlYWQgdGFnICcnCit0ZXN0X2F0b20gaGVhZCB0YWdnZXIgJycKK3Rlc3RfYXRvbSBoZWFkIHRhZ2dlcm5hbWUgJycKK3Rlc3RfYXRvbSBoZWFkIHRhZ2dlcmVtYWlsICcnCit0ZXN0X2F0b20gaGVhZCB0YWdnZXJkYXRlICcnCit0ZXN0X2F0b20gaGVhZCBjcmVhdG9yICdDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExNTE5Njg3MjMgKzAyMDAnCit0ZXN0X2F0b20gaGVhZCBjcmVhdG9yZGF0ZSAnVHVlIEp1bCA0IDAxOjE4OjQzIDIwMDYgKzAyMDAnCit0ZXN0X2F0b20gaGVhZCBzdWJqZWN0ICdJbml0aWFsJwordGVzdF9hdG9tIGhlYWQgY29udGVudHM6c3ViamVjdCAnSW5pdGlhbCcKK3Rlc3RfYXRvbSBoZWFkIGJvZHkgJycKK3Rlc3RfYXRvbSBoZWFkIGNvbnRlbnRzOmJvZHkgJycKK3Rlc3RfYXRvbSBoZWFkIGNvbnRlbnRzOnNpZ25hdHVyZSAnJwordGVzdF9hdG9tIGhlYWQgY29udGVudHMgJ0luaXRpYWwKKycKK3Rlc3RfYXRvbSBoZWFkIEhFQUQgJyonCisKK3Rlc3RfYXRvbSB0YWcgcmVmbmFtZSByZWZzL3RhZ3MvdGVzdHRhZwordGVzdF9hdG9tIHRhZyByZWZuYW1lOnNob3J0IHRlc3R0YWcKK3Rlc3RfYXRvbSB0YWcgdXBzdHJlYW0gJycKK3Rlc3RfYXRvbSB0YWcgcHVzaCAnJwordGVzdF9hdG9tIHRhZyBvYmplY3R0eXBlIHRhZwordGVzdF9hdG9tIHRhZyBvYmplY3RzaXplICQoKDExNCArIGhleGxlbikpCit0ZXN0X2F0b20gdGFnIG9iamVjdHNpemU6ZGlzayAkZGlza2xlbgordGVzdF9hdG9tIHRhZyAnKm9iamVjdHNpemU6ZGlzaycgJGRpc2tsZW4KK3Rlc3RfYXRvbSB0YWcgZGVsdGFiYXNlICRaRVJPX09JRAordGVzdF9hdG9tIHRhZyAnKmRlbHRhYmFzZScgJFpFUk9fT0lECit0ZXN0X2F0b20gdGFnIG9iamVjdG5hbWUgJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy90ZXN0dGFnKQordGVzdF9hdG9tIHRhZyBvYmplY3RuYW1lOnNob3J0ICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHJlZnMvdGFncy90ZXN0dGFnKQordGVzdF9hdG9tIGhlYWQgb2JqZWN0bmFtZTpzaG9ydD0xICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0PTEgcmVmcy9oZWFkcy9tYXN0ZXIpCit0ZXN0X2F0b20gaGVhZCBvYmplY3RuYW1lOnNob3J0PTEwICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0PTEwIHJlZnMvaGVhZHMvbWFzdGVyKQordGVzdF9hdG9tIHRhZyB0cmVlICcnCit0ZXN0X2F0b20gdGFnIHBhcmVudCAnJwordGVzdF9hdG9tIHRhZyBudW1wYXJlbnQgJycKK3Rlc3RfYXRvbSB0YWcgb2JqZWN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvdGVzdHRhZ14wKQordGVzdF9hdG9tIHRhZyB0eXBlICdjb21taXQnCit0ZXN0X2F0b20gdGFnICcqb2JqZWN0bmFtZScgJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy90ZXN0dGFnXnt9KQordGVzdF9hdG9tIHRhZyAnKm9iamVjdHR5cGUnICdjb21taXQnCit0ZXN0X2F0b20gdGFnIGF1dGhvciAnJwordGVzdF9hdG9tIHRhZyBhdXRob3JuYW1lICcnCit0ZXN0X2F0b20gdGFnIGF1dGhvcmVtYWlsICcnCit0ZXN0X2F0b20gdGFnIGF1dGhvcmRhdGUgJycKK3Rlc3RfYXRvbSB0YWcgY29tbWl0dGVyICcnCit0ZXN0X2F0b20gdGFnIGNvbW1pdHRlcm5hbWUgJycKK3Rlc3RfYXRvbSB0YWcgY29tbWl0dGVyZW1haWwgJycKK3Rlc3RfYXRvbSB0YWcgY29tbWl0dGVyZGF0ZSAnJwordGVzdF9hdG9tIHRhZyB0YWcgJ3Rlc3R0YWcnCit0ZXN0X2F0b20gdGFnIHRhZ2dlciAnQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTUxOTY4NzI1ICswMjAwJwordGVzdF9hdG9tIHRhZyB0YWdnZXJuYW1lICdDIE8gTWl0dGVyJwordGVzdF9hdG9tIHRhZyB0YWdnZXJlbWFpbCAnPGNvbW1pdHRlckBleGFtcGxlLmNvbT4nCit0ZXN0X2F0b20gdGFnIHRhZ2dlcmRhdGUgJ1R1ZSBKdWwgNCAwMToxODo0NSAyMDA2ICswMjAwJwordGVzdF9hdG9tIHRhZyBjcmVhdG9yICdDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExNTE5Njg3MjUgKzAyMDAnCit0ZXN0X2F0b20gdGFnIGNyZWF0b3JkYXRlICdUdWUgSnVsIDQgMDE6MTg6NDUgMjAwNiArMDIwMCcKK3Rlc3RfYXRvbSB0YWcgc3ViamVjdCAnVGFnZ2luZyBhdCAxMTUxOTY4NzI3JwordGVzdF9hdG9tIHRhZyBjb250ZW50czpzdWJqZWN0ICdUYWdnaW5nIGF0IDExNTE5Njg3MjcnCit0ZXN0X2F0b20gdGFnIGJvZHkgJycKK3Rlc3RfYXRvbSB0YWcgY29udGVudHM6Ym9keSAnJwordGVzdF9hdG9tIHRhZyBjb250ZW50czpzaWduYXR1cmUgJycKK3Rlc3RfYXRvbSB0YWcgY29udGVudHMgJ1RhZ2dpbmcgYXQgMTE1MTk2ODcyNworJwordGVzdF9hdG9tIHRhZyBIRUFEICcgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBpbnZhbGlkIGF0b21zIG5hbWVzIGFyZSBlcnJvcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKElOVkFMSUQpIiByZWZzL2hlYWRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCBzcGVjaWZpZXJzIGFyZSBpZ25vcmVkIGluIG5hbWluZyBkYXRlIGF0b21zJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShhdXRob3JkYXRlKSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpkZWZhdWx0KSAlKGF1dGhvcmRhdGUpIiByZWZzL2hlYWRzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShhdXRob3JkYXRlKSAlKGF1dGhvcmRhdGU6ZGVmYXVsdCkiIHJlZnMvaGVhZHMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6ZGVmYXVsdCkgJShhdXRob3JkYXRlOmRlZmF1bHQpIiByZWZzL2hlYWRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIHZhbGlkIGZvcm1hdCBzcGVjaWZpZXJzIGZvciBkYXRlIGZpZWxkcycgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpkZWZhdWx0KSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpyZWxhdGl2ZSkiIHJlZnMvaGVhZHMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6c2hvcnQpIiByZWZzL2hlYWRzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShhdXRob3JkYXRlOmxvY2FsKSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTppc284NjAxKSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpyZmMyODIyKSIgcmVmcy9oZWFkcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBpbnZhbGlkIGZvcm1hdCBzcGVjaWZpZXJzIGFyZSBlcnJvcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6SU5WQUxJRCkiIHJlZnMvaGVhZHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXJndW1lbnRzIHRvICUob2JqZWN0bmFtZTpzaG9ydD0pIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWU6c2hvcnQ9MCkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lOnNob3J0PS0xKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWU6c2hvcnQ9Zm9vKSIKKycKKwordGVzdF9kYXRlICgpIHsKKwlmPSQxICYmCisJY29tbWl0dGVyX2RhdGU9JDIgJiYKKwlhdXRob3JfZGF0ZT0kMyAmJgorCXRhZ2dlcl9kYXRlPSQ0ICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkncmVmcy9oZWFkcy9tYXN0ZXInICckY29tbWl0dGVyX2RhdGUnICckYXV0aG9yX2RhdGUnCisJJ3JlZnMvdGFncy90ZXN0dGFnJyAnJHRhZ2dlcl9kYXRlJworCUVPRgorCSgKKwkJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIFwKKwkJCS0tZm9ybWF0PSIlKHJlZm5hbWUpICUoY29tbWl0dGVyZGF0ZSR7ZjorOiRmfSkgJShhdXRob3JkYXRlJHtmOis6JGZ9KSIgXAorCQkJcmVmcy9oZWFkcyAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgXAorCQkJLS1mb3JtYXQ9IiUocmVmbmFtZSkgJSh0YWdnZXJkYXRlJHtmOis6JGZ9KSIgXAorCQkJcmVmcy90YWdzCisJKSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIHVuZm9ybWF0dGVkIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSAiIiBcCisJCSJUdWUgSnVsIDQgMDE6MTg6NDMgMjAwNiArMDIwMCIgXAorCQkiVHVlIEp1bCA0IDAxOjE4OjQ0IDIwMDYgKzAyMDAiIFwKKwkJIlR1ZSBKdWwgNCAwMToxODo0NSAyMDA2ICswMjAwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgImRlZmF1bHQiIGZvcm1hdHRlZCBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwl0ZXN0X2RhdGUgZGVmYXVsdCBcCisJCSJUdWUgSnVsIDQgMDE6MTg6NDMgMjAwNiArMDIwMCIgXAorCQkiVHVlIEp1bCA0IDAxOjE4OjQ0IDIwMDYgKzAyMDAiIFwKKwkJIlR1ZSBKdWwgNCAwMToxODo0NSAyMDA2ICswMjAwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgImRlZmF1bHQtbG9jYWwiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSBkZWZhdWx0LWxvY2FsICJNb24gSnVsIDMgMjM6MTg6NDMgMjAwNiIgIk1vbiBKdWwgMyAyMzoxODo0NCAyMDA2IiAiTW9uIEp1bCAzIDIzOjE4OjQ1IDIwMDYiCisnCisKKyMgRG9uJ3Qga25vdyBob3cgdG8gZG8gcmVsYXRpdmUgY2hlY2sgYmVjYXVzZSBJIGNhbid0IGtub3cgd2hlbiB0aGlzIHNjcmlwdAorIyBpcyBnb2luZyB0byBiZSBydW4gYW5kIGNhbid0IGZha2UgdGhlIGN1cnJlbnQgdGltZSB0byBnaXQsIGFuZCBoZW5jZSBjYW4ndAorIyBwcm92aWRlIGV4cGVjdGVkIG91dHB1dC4gIEluc3RlYWQsIEknbGwganVzdCBtYWtlIHN1cmUgdGhhdCAicmVsYXRpdmUiCisjIGRvZXNuJ3QgZXhpdCBpbiBlcnJvcgordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJyZWxhdGl2ZSIgZGF0ZSBmaWVsZHMgb3V0cHV0JyAnCisJZj1yZWxhdGl2ZSAmJgorCShnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJShjb21taXR0ZXJkYXRlOiRmKSAlKGF1dGhvcmRhdGU6JGYpIiByZWZzL2hlYWRzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUodGFnZ2VyZGF0ZTokZikiIHJlZnMvdGFncykgPmFjdHVhbAorJworCisjIFdlIGp1c3QgY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzICJyZWxhdGl2ZSIgZm9yIG5vdy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAicmVsYXRpdmUtbG9jYWwiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSByZWxhdGl2ZS1sb2NhbCBcCisJCSIkKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoY29tbWl0dGVyZGF0ZTpyZWxhdGl2ZSkiIHJlZnMvaGVhZHMpIiBcCisJCSIkKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpyZWxhdGl2ZSkiIHJlZnMvaGVhZHMpIiBcCisJCSIkKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUodGFnZ2VyZGF0ZTpyZWxhdGl2ZSkiIHJlZnMvdGFncykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAic2hvcnQiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSBzaG9ydCAyMDA2LTA3LTA0IDIwMDYtMDctMDQgMjAwNi0wNy0wNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgInNob3J0LWxvY2FsIiBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwl0ZXN0X2RhdGUgc2hvcnQtbG9jYWwgMjAwNi0wNy0wMyAyMDA2LTA3LTAzIDIwMDYtMDctMDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJsb2NhbCIgZGF0ZSBmaWVsZHMgb3V0cHV0JyAnCisJdGVzdF9kYXRlIGxvY2FsIFwKKwkJIk1vbiBKdWwgMyAyMzoxODo0MyAyMDA2IiBcCisJCSJNb24gSnVsIDMgMjM6MTg6NDQgMjAwNiIgXAorCQkiTW9uIEp1bCAzIDIzOjE4OjQ1IDIwMDYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAiaXNvODYwMSIgZGF0ZSBmaWVsZHMgb3V0cHV0JyAnCisJdGVzdF9kYXRlIGlzbzg2MDEgXAorCQkiMjAwNi0wNy0wNCAwMToxODo0MyArMDIwMCIgXAorCQkiMjAwNi0wNy0wNCAwMToxODo0NCArMDIwMCIgXAorCQkiMjAwNi0wNy0wNCAwMToxODo0NSArMDIwMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJpc284NjAxLWxvY2FsIiBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwl0ZXN0X2RhdGUgaXNvODYwMS1sb2NhbCAiMjAwNi0wNy0wMyAyMzoxODo0MyArMDAwMCIgIjIwMDYtMDctMDMgMjM6MTg6NDQgKzAwMDAiICIyMDA2LTA3LTAzIDIzOjE4OjQ1ICswMDAwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgInJmYzI4MjIiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSByZmMyODIyIFwKKwkJIlR1ZSwgNCBKdWwgMjAwNiAwMToxODo0MyArMDIwMCIgXAorCQkiVHVlLCA0IEp1bCAyMDA2IDAxOjE4OjQ0ICswMjAwIiBcCisJCSJUdWUsIDQgSnVsIDIwMDYgMDE6MTg6NDUgKzAyMDAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAicmZjMjgyMi1sb2NhbCIgZGF0ZSBmaWVsZHMgb3V0cHV0JyAnCisJdGVzdF9kYXRlIHJmYzI4MjItbG9jYWwgIk1vbiwgMyBKdWwgMjAwNiAyMzoxODo0MyArMDAwMCIgIk1vbiwgMyBKdWwgMjAwNiAyMzoxODo0NCArMDAwMCIgIk1vbiwgMyBKdWwgMjAwNiAyMzoxODo0NSArMDAwMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJyYXciIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSByYXcgIjExNTE5Njg3MjMgKzAyMDAiICIxMTUxOTY4NzI0ICswMjAwIiAiMTE1MTk2ODcyNSArMDIwMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJyYXctbG9jYWwiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSByYXctbG9jYWwgIjExNTE5Njg3MjMgKzAwMDAiICIxMTUxOTY4NzI0ICswMDAwIiAiMTE1MTk2ODcyNSArMDAwMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0IG9mIHN0cmZ0aW1lIGRhdGUgZmllbGRzJyAnCisJZWNobyAibXkgZGF0ZSBpcyAyMDA2LTA3LTA0IiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIFwKKwkgIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6Zm9ybWF0Om15IGRhdGUgaXMgJVktJW0tJWQpIiBcCisJICByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0IG9mIHN0cmZ0aW1lLWxvY2FsIGRhdGUgZmllbGRzJyAnCisJZWNobyAibXkgZGF0ZSBpcyAyMDA2LTA3LTAzIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIFwKKwkgIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6Zm9ybWF0LWxvY2FsOm15IGRhdGUgaXMgJVktJW0tJWQpIiBcCisJICByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhlcmNpc2Ugc3RyZnRpbWUgd2l0aCBvZGQgZmllbGRzJyAnCisJZWNobyA+ZXhwZWN0ZWQgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6Zm9ybWF0OikiIHJlZnMvaGVhZHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWxvbmc9ImxvbmcgZm9ybWF0IC0tICRaRVJPX09JRCRaRVJPX09JRCRaRVJPX09JRCRaRVJPX09JRCRaRVJPX09JRCRaRVJPX09JRCRaRVJPX09JRCIgJiYKKwllY2hvICRsb25nID5leHBlY3RlZCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpmb3JtYXQ6JGxvbmcpIiByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK3JlZnMvaGVhZHMvbWFzdGVyCityZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorcmVmcy90YWdzL3Rlc3R0YWcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgYXNjZW5kaW5nIHNvcnQnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiAtLXNvcnQ9cmVmbmFtZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK3JlZnMvdGFncy90ZXN0dGFnCityZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorcmVmcy9oZWFkcy9tYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgZGVzY2VuZGluZyBzb3J0JyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgLS1zb3J0PS1yZWZuYW1lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK3JlZnMvdGFncy90ZXN0dGFnCityZWZzL3RhZ3MvdGVzdHRhZy0yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhlcmNpc2UgcGF0dGVybnMgd2l0aCBwcmVmaXhlcycgJworCWdpdCB0YWcgdGVzdHRhZy0yICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdGFnIC1kIHRlc3R0YWctMiIgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiBcCisJCXJlZnMvdGFncy90ZXN0dGFnIHJlZnMvdGFncy90ZXN0dGFnLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorcmVmcy90YWdzL3Rlc3R0YWcKK3JlZnMvdGFncy90ZXN0dGFnLTIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGVyY2lzZSBnbG9iIHBhdHRlcm5zIHdpdGggcHJlZml4ZXMnICcKKwlnaXQgdGFnIHRlc3R0YWctMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHRhZyAtZCB0ZXN0dGFnLTIiICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgXAorCQlyZWZzL3RhZ3MvdGVzdHRhZyAicmVmcy90YWdzL3Rlc3R0YWctKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorJ3JlZnMvaGVhZHMvbWFzdGVyJworJ3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyJworJ3JlZnMvdGFncy90ZXN0dGFnJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1F1b3Rpbmcgc3R5bGU6IHNoZWxsJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1F1b3Rpbmcgc3R5bGU6IHBlcmwnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tcGVybCAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdW90aW5nIHN0eWxlOiBweXRob24nICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tcHl0aG9uIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCisicmVmcy9oZWFkcy9tYXN0ZXIiCisicmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiCisicmVmcy90YWdzL3Rlc3R0YWciCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVvdGluZyBzdHlsZTogdGNsJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLXRjbCAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitmb3IgaSBpbiAiLS1wZXJsIC0tc2hlbGwiICItcyAtLXB5dGhvbiIgIi0tcHl0aG9uIC0tdGNsIiAiLS10Y2wgLS1wZXJsIjsgZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJtb3JlIHRoYW4gb25lIHF1b3Rpbmcgc3R5bGU6ICRpIiAiCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgJGkgMj5lcnIgJiYKKwkJZ3JlcCAnXmVycm9yOiBtb3JlIHRoYW4gb25lIHF1b3Rpbmcgc3R5bGUnIGVycgorCSIKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHVwc3RyZWFtOnRyYWNrW3Nob3J0XScgJworCXRlc3RfY29tbWl0IHR3bworJworCit0ZXN0X2F0b20gaGVhZCB1cHN0cmVhbTp0cmFjayAnW2FoZWFkIDFdJwordGVzdF9hdG9tIGhlYWQgdXBzdHJlYW06dHJhY2tzaG9ydCAnPicKK3Rlc3RfYXRvbSBoZWFkIHVwc3RyZWFtOnRyYWNrLG5vYnJhY2tldCAnYWhlYWQgMScKK3Rlc3RfYXRvbSBoZWFkIHVwc3RyZWFtOm5vYnJhY2tldCx0cmFjayAnYWhlYWQgMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHB1c2g6dHJhY2tbc2hvcnRdJyAnCisJdGVzdF9jb21taXQgdGhpcmQgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvbXlmb3JrL21hc3RlciBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgbWFzdGVyfjEKKycKKwordGVzdF9hdG9tIGhlYWQgcHVzaDp0cmFjayAnW2JlaGluZCAxXScKK3Rlc3RfYXRvbSBoZWFkIHB1c2g6dHJhY2tzaG9ydCAnPCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgdGhhdCA6dHJhY2tbc2hvcnRdIGNhbm5vdCBiZSB1c2VkIHdpdGggb3RoZXIgYXRvbXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWU6dHJhY2spIiAyPi9kZXYvbnVsbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZTp0cmFja3Nob3J0KSIgMj4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgdGhhdCA6dHJhY2tbc2hvcnRdIHdvcmtzIHdoZW4gdXBzdHJlYW0gaXMgaW52YWxpZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCVtnb25lXQorCisJRU9GCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIiICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvZG9lcy1ub3QtZXhpc3QgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIFwKKwkJLS1mb3JtYXQ9IiUodXBzdHJlYW06dHJhY2spJExGJSh1cHN0cmVhbTp0cmFja3Nob3J0KSIgXAorCQlyZWZzL2hlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9yIGludmFsaWQgcmVmbmFtZSBmb3JtYXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWU6SU5WQUxJRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBjb2xvciB0ZXN0cycgJworCWNhdCA+ZXhwZWN0ZWQuY29sb3IgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmVmcy9oZWFkcy9tYXN0ZXIpIDxHUkVFTj5tYXN0ZXI8UkVTRVQ+CisJJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmVmcy9yZW1vdGVzL215Zm9yay9tYXN0ZXIpIDxHUkVFTj5teWZvcmsvbWFzdGVyPFJFU0VUPgorCSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSA8R1JFRU4+b3JpZ2luL21hc3RlcjxSRVNFVD4KKwkkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCByZWZzL3RhZ3MvdGVzdHRhZykgPEdSRUVOPnRlc3R0YWc8UkVTRVQ+CisJJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmVmcy90YWdzL3RoaXJkKSA8R1JFRU4+dGhpcmQ8UkVTRVQ+CisJJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmVmcy90YWdzL3R3bykgPEdSRUVOPnR3bzxSRVNFVD4KKwlFT0YKKwlzZWQgInMvPFtePl0qPi8vZyIgPGV4cGVjdGVkLmNvbG9yID5leHBlY3RlZC5iYXJlICYmCisJY29sb3JfZm9ybWF0PSIlKG9iamVjdG5hbWU6c2hvcnQpICUoY29sb3I6Z3JlZW4pJShyZWZuYW1lOnNob3J0KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJyUoY29sb3IpIHNob3dzIGNvbG9yIHdpdGggYSB0dHknICcKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiRjb2xvcl9mb3JtYXQiID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLmNvbG9yIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKGNvbG9yKSBkb2VzIG5vdCBzaG93IGNvbG9yIHdpdGhvdXQgdHR5JyAnCisJVEVSTT12dDEwMCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIkY29sb3JfZm9ybWF0IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuYmFyZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb2xvciBjYW4gb3ZlcnJpZGUgdHR5IGNoZWNrJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWNvbG9yIC0tZm9ybWF0PSIkY29sb3JfZm9ybWF0IiA+YWN0dWFsLnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5jb2xvciBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29sb3IudWk9YWx3YXlzIGRvZXMgbm90IG92ZXJyaWRlIHR0eSBjaGVjaycgJworCWdpdCAtYyBjb2xvci51aT1hbHdheXMgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIkY29sb3JfZm9ybWF0IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuYmFyZSBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK2hlYWRzL21hc3RlcgordGFncy9tYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBhbWJpZ3VvdXMgaGVhZCBhbmQgdGFnIHJlZnMgKHN0cmljdCknICcKKwlnaXQgY29uZmlnIC0tYm9vbCBjb3JlLndhcm5hbWJpZ3VvdXNyZWZzIHRydWUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV3dGFnICYmCisJZWNobyAiVXNpbmcgJGRhdGVzdGFtcCIgPiBvbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWdpdCBjb21taXQgLW0gIkJyYW5jaCIgJiYKKwlzZXRkYXRlX2FuZF9pbmNyZW1lbnQgJiYKKwlnaXQgdGFnIC1tICJUYWdnaW5nIGF0ICRkYXRlc3RhbXAiIG1hc3RlciAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQgIiUocmVmbmFtZTpzaG9ydCkiIHJlZnMvaGVhZHMvbWFzdGVyIHJlZnMvdGFncy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgoraGVhZHMvbWFzdGVyCittYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBhbWJpZ3VvdXMgaGVhZCBhbmQgdGFnIHJlZnMgKGxvb3NlKScgJworCWdpdCBjb25maWcgLS1ib29sIGNvcmUud2FybmFtYmlndW91c3JlZnMgZmFsc2UgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0ICIlKHJlZm5hbWU6c2hvcnQpIiByZWZzL2hlYWRzL21hc3RlciByZWZzL3RhZ3MvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK2hlYWRzL2FtYmlndW91cworYW1iaWd1b3VzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgYW1iaWd1b3VzIGhlYWQgYW5kIHRhZyByZWZzIElJIChsb29zZSknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyBhbWJpZ3VvdXMgdGVzdHRhZ14wICYmCisJZ2l0IGJyYW5jaCBhbWJpZ3VvdXMgdGVzdHRhZ14wICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdCAiJShyZWZuYW1lOnNob3J0KSIgcmVmcy9oZWFkcy9hbWJpZ3VvdXMgcmVmcy90YWdzL2FtYmlndW91cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSB0YWcgd2l0aG91dCB0YWdnZXInICcKKwlnaXQgdGFnIC1hIC1tICJCcm9rZW4gdGFnIiB0YWdnZXJsZXNzICYmCisJZ2l0IHRhZyAtZiB0YWdnZXJsZXNzICQoZ2l0IGNhdC1maWxlIHRhZyB0YWdnZXJsZXNzIHwKKwkJc2VkIC1lICIvXnRhZ2dlciAvZCIgfAorCQlnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiAtdyAtdCB0YWcpCisnCisKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvdGFnZ2VybGVzcyB0eXBlICdjb21taXQnCit0ZXN0X2F0b20gcmVmcy90YWdzL3RhZ2dlcmxlc3MgdGFnICd0YWdnZXJsZXNzJwordGVzdF9hdG9tIHJlZnMvdGFncy90YWdnZXJsZXNzIHRhZ2dlciAnJwordGVzdF9hdG9tIHJlZnMvdGFncy90YWdnZXJsZXNzIHRhZ2dlcm5hbWUgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvdGFnZ2VybGVzcyB0YWdnZXJlbWFpbCAnJwordGVzdF9hdG9tIHJlZnMvdGFncy90YWdnZXJsZXNzIHRhZ2dlcmRhdGUgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvdGFnZ2VybGVzcyBjb21taXR0ZXIgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvdGFnZ2VybGVzcyBjb21taXR0ZXJuYW1lICcnCit0ZXN0X2F0b20gcmVmcy90YWdzL3RhZ2dlcmxlc3MgY29tbWl0dGVyZW1haWwgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvdGFnZ2VybGVzcyBjb21taXR0ZXJkYXRlICcnCit0ZXN0X2F0b20gcmVmcy90YWdzL3RhZ2dlcmxlc3Mgc3ViamVjdCAnQnJva2VuIHRhZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW4gdW51c3VhbCB0YWcgd2l0aCBhbiBpbmNvbXBsZXRlIGxpbmUnICcKKworCWdpdCB0YWcgLW0gImJvZ28iIGJvZ28gJiYKKwlib2dvPSQoZ2l0IGNhdC1maWxlIHRhZyBib2dvKSAmJgorCWJvZ289JChwcmludGYgIiVzIiAiJGJvZ28iIHwgZ2l0IG1rdGFnKSAmJgorCWdpdCB0YWcgLWYgYm9nbyAiJGJvZ28iICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdCAiJShib2R5KSIgcmVmcy90YWdzL2JvZ28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgdGFnIHdpdGggc3ViamVjdCBhbmQgYm9keSBjb250ZW50JyAnCisJY2F0ID4+bXNnIDw8LVxFT0YgJiYKKwkJdGhlIHN1YmplY3QgbGluZQorCisJCWZpcnN0IGJvZHkgbGluZQorCQlzZWNvbmQgYm9keSBsaW5lCisJRU9GCisJZ2l0IHRhZyAtRiBtc2cgc3ViamVjdC1ib2R5CisnCit0ZXN0X2F0b20gcmVmcy90YWdzL3N1YmplY3QtYm9keSBzdWJqZWN0ICd0aGUgc3ViamVjdCBsaW5lJwordGVzdF9hdG9tIHJlZnMvdGFncy9zdWJqZWN0LWJvZHkgYm9keSAnZmlyc3QgYm9keSBsaW5lCitzZWNvbmQgYm9keSBsaW5lCisnCit0ZXN0X2F0b20gcmVmcy90YWdzL3N1YmplY3QtYm9keSBjb250ZW50cyAndGhlIHN1YmplY3QgbGluZQorCitmaXJzdCBib2R5IGxpbmUKK3NlY29uZCBib2R5IGxpbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHRhZyB3aXRoIG11bHRpbGluZSBzdWJqZWN0JyAnCisJY2F0ID5tc2cgPDwtXEVPRiAmJgorCQlmaXJzdCBzdWJqZWN0IGxpbmUKKwkJc2Vjb25kIHN1YmplY3QgbGluZQorCisJCWZpcnN0IGJvZHkgbGluZQorCQlzZWNvbmQgYm9keSBsaW5lCisJRU9GCisJZ2l0IHRhZyAtRiBtc2cgbXVsdGlsaW5lCisnCit0ZXN0X2F0b20gcmVmcy90YWdzL211bHRpbGluZSBzdWJqZWN0ICdmaXJzdCBzdWJqZWN0IGxpbmUgc2Vjb25kIHN1YmplY3QgbGluZScKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvbXVsdGlsaW5lIGNvbnRlbnRzOnN1YmplY3QgJ2ZpcnN0IHN1YmplY3QgbGluZSBzZWNvbmQgc3ViamVjdCBsaW5lJwordGVzdF9hdG9tIHJlZnMvdGFncy9tdWx0aWxpbmUgYm9keSAnZmlyc3QgYm9keSBsaW5lCitzZWNvbmQgYm9keSBsaW5lCisnCit0ZXN0X2F0b20gcmVmcy90YWdzL211bHRpbGluZSBjb250ZW50czpib2R5ICdmaXJzdCBib2R5IGxpbmUKK3NlY29uZCBib2R5IGxpbmUKKycKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvbXVsdGlsaW5lIGNvbnRlbnRzOnNpZ25hdHVyZSAnJwordGVzdF9hdG9tIHJlZnMvdGFncy9tdWx0aWxpbmUgY29udGVudHMgJ2ZpcnN0IHN1YmplY3QgbGluZQorc2Vjb25kIHN1YmplY3QgbGluZQorCitmaXJzdCBib2R5IGxpbmUKK3NlY29uZCBib2R5IGxpbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2NyZWF0ZSBzaWduZWQgdGFncycgJworCWdpdCB0YWcgLXMgLW0gIiIgc2lnbmVkLWVtcHR5ICYmCisJZ2l0IHRhZyAtcyAtbSAic3ViamVjdCBsaW5lIiBzaWduZWQtc2hvcnQgJiYKKwljYXQgPm1zZyA8PC1cRU9GICYmCisJc3ViamVjdCBsaW5lCisKKwlib2R5IGNvbnRlbnRzCisJRU9GCisJZ2l0IHRhZyAtcyAtRiBtc2cgc2lnbmVkLWxvbmcKKycKKworc2lnPSctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLQorLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tCisnCisKK1BSRVJFUT1HUEcKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWVtcHR5IHN1YmplY3QgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWVtcHR5IGNvbnRlbnRzOnN1YmplY3QgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWVtcHR5IGJvZHkgIiRzaWciCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1lbXB0eSBjb250ZW50czpib2R5ICcnCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1lbXB0eSBjb250ZW50czpzaWduYXR1cmUgIiRzaWciCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1lbXB0eSBjb250ZW50cyAiJHNpZyIKKwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtc2hvcnQgc3ViamVjdCAnc3ViamVjdCBsaW5lJwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtc2hvcnQgY29udGVudHM6c3ViamVjdCAnc3ViamVjdCBsaW5lJwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtc2hvcnQgYm9keSAiJHNpZyIKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLXNob3J0IGNvbnRlbnRzOmJvZHkgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLXNob3J0IGNvbnRlbnRzOnNpZ25hdHVyZSAiJHNpZyIKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLXNob3J0IGNvbnRlbnRzICJzdWJqZWN0IGxpbmUKKyRzaWciCisKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWxvbmcgc3ViamVjdCAnc3ViamVjdCBsaW5lJwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtbG9uZyBjb250ZW50czpzdWJqZWN0ICdzdWJqZWN0IGxpbmUnCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1sb25nIGJvZHkgImJvZHkgY29udGVudHMKKyRzaWciCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1sb25nIGNvbnRlbnRzOmJvZHkgJ2JvZHkgY29udGVudHMKKycKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWxvbmcgY29udGVudHM6c2lnbmF0dXJlICIkc2lnIgordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtbG9uZyBjb250ZW50cyAic3ViamVjdCBsaW5lCisKK2JvZHkgY29udGVudHMKKyRzaWciCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBtdWx0aXBsZS1zb3J0IHRhZ3MnICcKKwlmb3Igd2hlbiBpbiAxMDAwMDAgMjAwMDAwCisJZG8KKwkJZm9yIGVtYWlsIGluIHVzZXIxIHVzZXIyCisJCWRvCisJCQlmb3IgcmVmIGluIHJlZjEgcmVmMgorCQkJZG8KKwkJCQlHSVRfQ09NTUlUVEVSX0RBVEU9IkAkd2hlbiArMDAwMCIgXAorCQkJCUdJVF9DT01NSVRURVJfRU1BSUw9IiRlbWFpbEBleGFtcGxlLmNvbSIgXAorCQkJCWdpdCB0YWcgLW0gInRhZyAkcmVmLSR3aGVuLSRlbWFpbCIgXAorCQkJCW11bHRpLSRyZWYtJHdoZW4tJGVtYWlsIHx8IHJldHVybiAxCisJCQlkb25lCisJCWRvbmUKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSBzb3J0IHdpdGggbXVsdGlwbGUga2V5cycgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTEwMDAwMCA8dXNlcjFAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYyLTEwMDAwMC11c2VyMQorCTEwMDAwMCA8dXNlcjFAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYxLTEwMDAwMC11c2VyMQorCTEwMDAwMCA8dXNlcjJAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYyLTEwMDAwMC11c2VyMgorCTEwMDAwMCA8dXNlcjJAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYxLTEwMDAwMC11c2VyMgorCTIwMDAwMCA8dXNlcjFAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYyLTIwMDAwMC11c2VyMQorCTIwMDAwMCA8dXNlcjFAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYxLTIwMDAwMC11c2VyMQorCTIwMDAwMCA8dXNlcjJAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYyLTIwMDAwMC11c2VyMgorCTIwMDAwMCA8dXNlcjJAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYxLTIwMDAwMC11c2VyMgorCUVPRgorCWdpdCBmb3ItZWFjaC1yZWYgXAorCQktLWZvcm1hdD0iJSh0YWdnZXJkYXRlOnVuaXgpICUodGFnZ2VyZW1haWwpICUocmVmbmFtZSkiIFwKKwkJLS1zb3J0PS1yZWZuYW1lIFwKKwkJLS1zb3J0PXRhZ2dlcmVtYWlsIFwKKwkJLS1zb3J0PXRhZ2dlcmRhdGUgXAorCQkicmVmcy90YWdzL211bHRpLSoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXF1aXZhbGVudCBzb3J0cyBmYWxsIGJhY2sgb24gcmVmbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTEwMDAwMCA8dXNlcjFAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYxLTEwMDAwMC11c2VyMQorCTEwMDAwMCA8dXNlcjJAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYxLTEwMDAwMC11c2VyMgorCTEwMDAwMCA8dXNlcjFAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYyLTEwMDAwMC11c2VyMQorCTEwMDAwMCA8dXNlcjJAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYyLTEwMDAwMC11c2VyMgorCTIwMDAwMCA8dXNlcjFAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYxLTIwMDAwMC11c2VyMQorCTIwMDAwMCA8dXNlcjJAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYxLTIwMDAwMC11c2VyMgorCTIwMDAwMCA8dXNlcjFAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYyLTIwMDAwMC11c2VyMQorCTIwMDAwMCA8dXNlcjJAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tdWx0aS1yZWYyLTIwMDAwMC11c2VyMgorCUVPRgorCWdpdCBmb3ItZWFjaC1yZWYgXAorCQktLWZvcm1hdD0iJSh0YWdnZXJkYXRlOnVuaXgpICUodGFnZ2VyZW1haWwpICUocmVmbmFtZSkiIFwKKwkJLS1zb3J0PXRhZ2dlcmRhdGUgXAorCQkicmVmcy90YWdzL211bHRpLSoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGRlcmVmZXJlbmNlIE5VTEwgdXBvbiAlKEhFQUQpIG9uIHVuYm9ybiBicmFuY2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShIRUFEKSAlKHJlZm5hbWU6c2hvcnQpIiByZWZzL2hlYWRzLyA+YWN0dWFsICYmCisJc2VkIC1lICJzL15cKiAvICAvIiBhY3R1YWwgPmV4cGVjdCAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBvcnBoYW5lZC1icmFuY2ggJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKEhFQUQpICUocmVmbmFtZTpzaG9ydCkiIHJlZnMvaGVhZHMvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+dHJhaWxlcnMgPDxFT0YKK1Jldmlld2VkLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorU2lnbmVkLW9mZi1ieTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK1sgdjIgdXBkYXRlZCBwYXRjaCBkZXNjcmlwdGlvbiBdCitBY2tlZC1ieTogQSBVIFRob3IKKyAgPGF1dGhvckBleGFtcGxlLmNvbT4KK0VPRgorCit1bmZvbGQgKCkgeworCXBlcmwgLTBwZSAncy9cblxzKy8gL2cnCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCB0cmFpbGVycyBmb3IgbmV4dCB0ZXN0JyAnCisJZWNobyAiU29tZSBjb250ZW50cyIgPiB0d28gJiYKKwlnaXQgYWRkIHR3byAmJgorCWdpdCBjb21taXQgLUYgLSA8PC1FT0YKKwl0cmFpbGVyczogdGhpcyBjb21taXQgbWVzc2FnZSBoYXMgdHJhaWxlcnMKKworCVNvbWUgbWVzc2FnZSBjb250ZW50cworCisJJChjYXQgdHJhaWxlcnMpCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6dW5mb2xkKSB1bmZvbGRzIHRyYWlsZXJzJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJSh0cmFpbGVyczp1bmZvbGQpIiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJeworCQl1bmZvbGQgPHRyYWlsZXJzCisJCWVjaG8KKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6b25seSkgc2hvd3Mgb25seSAia2V5OiB2YWx1ZSIgdHJhaWxlcnMnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHRyYWlsZXJzOm9ubHkpIiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJeworCQlncmVwIC12IHBhdGNoLmRlc2NyaXB0aW9uIDx0cmFpbGVycyAmJgorCQllY2hvCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKHRyYWlsZXJzOm9ubHkpIGFuZCAlKHRyYWlsZXJzOnVuZm9sZCkgd29yayB0b2dldGhlcicgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUodHJhaWxlcnM6b25seSx1bmZvbGQpIiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJSh0cmFpbGVyczp1bmZvbGQsb25seSkiIHJlZnMvaGVhZHMvbWFzdGVyID5yZXZlcnNlICYmCisJdGVzdF9jbXAgYWN0dWFsIHJldmVyc2UgJiYKKwl7CisJCWdyZXAgLXYgcGF0Y2guZGVzY3JpcHRpb24gPHRyYWlsZXJzIHwgdW5mb2xkICYmCisJCWVjaG8KKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUoY29udGVudHM6dHJhaWxlcnM6dW5mb2xkKSB1bmZvbGRzIHRyYWlsZXJzJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShjb250ZW50czp0cmFpbGVyczp1bmZvbGQpIiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJeworCQl1bmZvbGQgPHRyYWlsZXJzCisJCWVjaG8KKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUoY29udGVudHM6dHJhaWxlcnM6b25seSkgc2hvd3Mgb25seSAia2V5OiB2YWx1ZSIgdHJhaWxlcnMnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGNvbnRlbnRzOnRyYWlsZXJzOm9ubHkpIiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJeworCQlncmVwIC12IHBhdGNoLmRlc2NyaXB0aW9uIDx0cmFpbGVycyAmJgorCQllY2hvCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKGNvbnRlbnRzOnRyYWlsZXJzOm9ubHkpIGFuZCAlKGNvbnRlbnRzOnRyYWlsZXJzOnVuZm9sZCkgd29yayB0b2dldGhlcicgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoY29udGVudHM6dHJhaWxlcnM6b25seSx1bmZvbGQpIiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShjb250ZW50czp0cmFpbGVyczp1bmZvbGQsb25seSkiIHJlZnMvaGVhZHMvbWFzdGVyID5yZXZlcnNlICYmCisJdGVzdF9jbXAgYWN0dWFsIHJldmVyc2UgJiYKKwl7CisJCWdyZXAgLXYgcGF0Y2guZGVzY3JpcHRpb24gPHRyYWlsZXJzIHwgdW5mb2xkICYmCisJCWVjaG8KKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnMpIHJlamVjdHMgdW5rbm93biB0cmFpbGVycyBhcmd1bWVudHMnICcKKwkjIGVycm9yIG1lc3NhZ2UgY2Fubm90IGJlIGNoZWNrZWQgdW5kZXIgaTE4bgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWZhdGFsOiB1bmtub3duICUodHJhaWxlcnMpIGFyZ3VtZW50OiB1bnN1cHBvcnRlZAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUodHJhaWxlcnM6dW5zdXBwb3J0ZWQpIiAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUoY29udGVudHM6dHJhaWxlcnMpIHJlamVjdHMgdW5rbm93biB0cmFpbGVycyBhcmd1bWVudHMnICcKKwkjIGVycm9yIG1lc3NhZ2UgY2Fubm90IGJlIGNoZWNrZWQgdW5kZXIgaTE4bgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWZhdGFsOiB1bmtub3duICUodHJhaWxlcnMpIGFyZ3VtZW50OiB1bnN1cHBvcnRlZAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoY29udGVudHM6dHJhaWxlcnM6dW5zdXBwb3J0ZWQpIiAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIGF0b206IGhlYWQgY29udGVudHM6dHJhaWxlcnMnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGNvbnRlbnRzOnRyYWlsZXJzKSIgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXNhbml0aXplX3BncCA8YWN0dWFsID5hY3R1YWwuY2xlYW4gJiYKKwkjIGdpdCBmb3ItZWFjaC1yZWYgZW5kcyB3aXRoIGEgYmxhbmsgbGluZQorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSQoY2F0IHRyYWlsZXJzKQorCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5jbGVhbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFpbGVyIHBhcnNpbmcgbm90IGZvb2xlZCBieSAtLS0gbGluZScgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtRiAtIDw8LVxFT0YgJiYKKwl0aGlzIGlzIHRoZSBzdWJqZWN0CisKKwlUaGlzIGlzIHRoZSBib2R5LiBUaGUgbWVzc2FnZSBoYXMgYSAiLS0tIiBsaW5lIHdoaWNoIHdvdWxkIGNvbmZ1c2UgYQorCW1lc3NhZ2UrcGF0Y2ggcGFyc2VyLiBCdXQgaGVyZSB3ZSBrbm93IHdlIGhhdmUgb25seSBhIGNvbW1pdCBtZXNzYWdlLAorCXNvIHdlIGdldCBpdCByaWdodC4KKworCXRyYWlsZXI6IHdyb25nCisJLS0tCisJVGhpcyBpcyBtb3JlIGJvZHkuCisKKwl0cmFpbGVyOiByaWdodAorCUVPRgorCisJeworCQllY2hvICJ0cmFpbGVyOiByaWdodCIgJiYKKwkJZWNobworCX0gPmV4cGVjdCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUodHJhaWxlcnMpIiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBZGQgc3ltYm9saWMgcmVmIGZvciB0aGUgZm9sbG93aW5nIHRlc3RzJyAnCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL3N5bSByZWZzL2hlYWRzL21hc3RlcgorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCityZWZzL2hlYWRzL21hc3RlcgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSB1c2FnZSBvZiAlKHN5bXJlZikgYXRvbScgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoc3ltcmVmKSIgcmVmcy9oZWFkcy9zeW0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWFkcy9tYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgdXNhZ2Ugb2YgJShzeW1yZWY6c2hvcnQpIGF0b20nICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHN5bXJlZjpzaG9ydCkiIHJlZnMvaGVhZHMvc3ltID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorbWFzdGVyCitoZWFkcy9tYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgdXNhZ2Ugb2YgJShzeW1yZWY6bHN0cmlwKSBhdG9tJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShzeW1yZWY6bHN0cmlwPTIpIiByZWZzL2hlYWRzL3N5bSA+IGFjdHVhbCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoc3ltcmVmOmxzdHJpcD0tMikiIHJlZnMvaGVhZHMvc3ltID4+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShzeW1yZWY6c3RyaXA9MikiIHJlZnMvaGVhZHMvc3ltID4gYWN0dWFsICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShzeW1yZWY6c3RyaXA9LTIpIiByZWZzL2hlYWRzL3N5bSA+PiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorcmVmcworcmVmcy9oZWFkcworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSB1c2FnZSBvZiAlKHN5bXJlZjpyc3RyaXApIGF0b20nICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHN5bXJlZjpyc3RyaXA9MikiIHJlZnMvaGVhZHMvc3ltID4gYWN0dWFsICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShzeW1yZWY6cnN0cmlwPS0yKSIgcmVmcy9oZWFkcy9zeW0gPj4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzpyZW1vdGVuYW1lIGFuZCA6cmVtb3RlcmVmJyAnCisJZ2l0IGluaXQgcmVtb3RlLXRlc3RzICYmCisJKAorCQljZCByZW1vdGUtdGVzdHMgJiYKKwkJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCQlnaXQgcmVtb3RlIGFkZCBmcm9tIGZpZnRoLmNvZmZlZTpibHViICYmCisJCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgZnJvbSAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9zdGFibGUgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgdG8gc291dGhyaWRnZS5hdWRpbzpyZXBvICYmCisJCWdpdCBjb25maWcgcmVtb3RlLnRvLnB1c2ggInJlZnMvaGVhZHMvKjpyZWZzL2hlYWRzL3B1c2hlZC8qIiAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucHVzaFJlbW90ZSB0byAmJgorCQlmb3IgcGFpciBpbiAiJSh1cHN0cmVhbSk9cmVmcy9yZW1vdGVzL2Zyb20vc3RhYmxlIiBcCisJCQkiJSh1cHN0cmVhbTpyZW1vdGVuYW1lKT1mcm9tIiBcCisJCQkiJSh1cHN0cmVhbTpyZW1vdGVyZWYpPXJlZnMvaGVhZHMvc3RhYmxlIiBcCisJCQkiJShwdXNoKT1yZWZzL3JlbW90ZXMvdG8vcHVzaGVkL21hc3RlciIgXAorCQkJIiUocHVzaDpyZW1vdGVuYW1lKT10byIgXAorCQkJIiUocHVzaDpyZW1vdGVyZWYpPXJlZnMvaGVhZHMvcHVzaGVkL21hc3RlciIKKwkJZG8KKwkJCWVjaG8gIiR7cGFpciMqPX0iID5leHBlY3QgJiYKKwkJCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiR7cGFpciU9Kn0iIFwKKwkJCQlyZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJCWRvbmUgJiYKKwkJZ2l0IGJyYW5jaCBwdXNoLXNpbXBsZSAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5wdXNoLXNpbXBsZS5wdXNoUmVtb3RlIGZyb20gJiYKKwkJYWN0dWFsPSIkKGdpdCBmb3ItZWFjaC1yZWYgXAorCQkJLS1mb3JtYXQ9IiUocHVzaDpyZW1vdGVuYW1lKSwlKHB1c2g6cmVtb3RlcmVmKSIgXAorCQkJcmVmcy9oZWFkcy9wdXNoLXNpbXBsZSkiICYmCisJCXRlc3QgZnJvbSwgPSAiJGFjdHVhbCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvci1lYWNoLXJlZiAtLWlnbm9yZS1jYXNlIGlnbm9yZXMgY2FzZScgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiIHJlZnMvaGVhZHMvTUFTVEVSID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwllY2hvIHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiAtLWlnbm9yZS1jYXNlIFwKKwkJcmVmcy9oZWFkcy9NQVNURVIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yLWVhY2gtcmVmIC0taWdub3JlLWNhc2Ugd29ya3Mgb24gbXVsdGlwbGUgc29ydCBrZXlzJyAnCisJIyBuYW1lIHJlZnMgbnVtZXJpY2FsbHkgdG8gYXZvaWQgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtIGNvbmZsaWN0cworCW5yPTAgJiYKKwlmb3IgZW1haWwgaW4gYSBBIGIgQgorCWRvCisJCWZvciBzdWJqZWN0IGluIGEgQSBiIEIKKwkJZG8KKwkJCUdJVF9DT01NSVRURVJfRU1BSUw9IiRlbWFpbEBleGFtcGxlLmNvbSIgXAorCQkJZ2l0IHRhZyAtbSAidGFnICRzdWJqZWN0IiBpY2FzZS0kKHByaW50ZiAlMDJkICRucikgJiYKKwkJCW5yPSQoKG5yKzEpKXx8CisJCQlyZXR1cm4gMQorCQlkb25lCisJZG9uZSAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1pZ25vcmUtY2FzZSBcCisJCS0tZm9ybWF0PSIlKHRhZ2dlcmVtYWlsKSAlKHN1YmplY3QpICUocmVmbmFtZSkiIFwKKwkJLS1zb3J0PXJlZm5hbWUgXAorCQktLXNvcnQ9c3ViamVjdCBcCisJCS0tc29ydD10YWdnZXJlbWFpbCBcCisJCXJlZnMvdGFncy9pY2FzZS0qID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJPGFAZXhhbXBsZS5jb20+IHRhZyBhIHJlZnMvdGFncy9pY2FzZS0wMAorCTxhQGV4YW1wbGUuY29tPiB0YWcgQSByZWZzL3RhZ3MvaWNhc2UtMDEKKwk8QUBleGFtcGxlLmNvbT4gdGFnIGEgcmVmcy90YWdzL2ljYXNlLTA0CisJPEFAZXhhbXBsZS5jb20+IHRhZyBBIHJlZnMvdGFncy9pY2FzZS0wNQorCTxhQGV4YW1wbGUuY29tPiB0YWcgYiByZWZzL3RhZ3MvaWNhc2UtMDIKKwk8YUBleGFtcGxlLmNvbT4gdGFnIEIgcmVmcy90YWdzL2ljYXNlLTAzCisJPEFAZXhhbXBsZS5jb20+IHRhZyBiIHJlZnMvdGFncy9pY2FzZS0wNgorCTxBQGV4YW1wbGUuY29tPiB0YWcgQiByZWZzL3RhZ3MvaWNhc2UtMDcKKwk8YkBleGFtcGxlLmNvbT4gdGFnIGEgcmVmcy90YWdzL2ljYXNlLTA4CisJPGJAZXhhbXBsZS5jb20+IHRhZyBBIHJlZnMvdGFncy9pY2FzZS0wOQorCTxCQGV4YW1wbGUuY29tPiB0YWcgYSByZWZzL3RhZ3MvaWNhc2UtMTIKKwk8QkBleGFtcGxlLmNvbT4gdGFnIEEgcmVmcy90YWdzL2ljYXNlLTEzCisJPGJAZXhhbXBsZS5jb20+IHRhZyBiIHJlZnMvdGFncy9pY2FzZS0xMAorCTxiQGV4YW1wbGUuY29tPiB0YWcgQiByZWZzL3RhZ3MvaWNhc2UtMTEKKwk8QkBleGFtcGxlLmNvbT4gdGFnIGIgcmVmcy90YWdzL2ljYXNlLTE0CisJPEJAZXhhbXBsZS5jb20+IHRhZyBCIHJlZnMvdGFncy9pY2FzZS0xNQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MzAxLWZvci1lYWNoLXJlZi1lcnJvcnMuc2ggYi90L3Q2MzAxLWZvci1lYWNoLXJlZi1lcnJvcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDljYzY1YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYzMDEtZm9yLWVhY2gtcmVmLWVycm9ycy5zaApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZm9yLWVhY2gtcmVmIGVycm9ycyBmb3IgYnJva2VuIHJlZnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitaRVJPUz0kWkVST19PSUQKK01JU1NJTkc9YWJhYmFiYWJhYmFiYWJhYmFiYWJhYmFiYWJhYmFiYWJhYmFiYWJhYgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIkluaXRpYWwiICYmCisJZ2l0IHRhZyB0ZXN0dGFnICYmCisJZ2l0IGZvci1lYWNoLXJlZiA+ZnVsbC1saXN0ICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lKSAlKHJlZm5hbWUpIiA+YnJpZWYtbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCcm9rZW4gcmVmcyBhcmUgcmVwb3J0ZWQgY29ycmVjdGx5JyAnCisJcj1yZWZzL2hlYWRzL2JvZ3VzICYmCisJOiA+LmdpdC8kciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC8kciIgJiYKKwllY2hvICJ3YXJuaW5nOiBpZ25vcmluZyBicm9rZW4gcmVmICRyIiA+YnJva2VuLWVyciAmJgorCWdpdCBmb3ItZWFjaC1yZWYgPm91dCAyPmVyciAmJgorCXRlc3RfaTE4bmNtcCBmdWxsLWxpc3Qgb3V0ICYmCisJdGVzdF9pMThuY21wIGJyb2tlbi1lcnIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTExfU0hBMSByZWZzIGFyZSByZXBvcnRlZCBjb3JyZWN0bHknICcKKwlyPXJlZnMvaGVhZHMvemVyb3MgJiYKKwllY2hvICRaRVJPUyA+LmdpdC8kciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC8kciIgJiYKKwllY2hvICJ3YXJuaW5nOiBpZ25vcmluZyBicm9rZW4gcmVmICRyIiA+emVyb3MtZXJyICYmCisJZ2l0IGZvci1lYWNoLXJlZiA+b3V0IDI+ZXJyICYmCisJdGVzdF9jbXAgZnVsbC1saXN0IG91dCAmJgorCXRlc3RfaTE4bmNtcCB6ZXJvcy1lcnIgZXJyICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lKSAlKHJlZm5hbWUpIiA+YnJpZWYtb3V0IDI+YnJpZWYtZXJyICYmCisJdGVzdF9jbXAgYnJpZWYtbGlzdCBicmllZi1vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgemVyb3MtZXJyIGJyaWVmLWVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNaXNzaW5nIG9iamVjdHMgYXJlIHJlcG9ydGVkIGNvcnJlY3RseScgJworCXI9cmVmcy9oZWFkcy9taXNzaW5nICYmCisJZWNobyAkTUlTU0lORyA+LmdpdC8kciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC8kciIgJiYKKwllY2hvICJmYXRhbDogbWlzc2luZyBvYmplY3QgJE1JU1NJTkcgZm9yICRyIiA+bWlzc2luZy1lcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIDI+ZXJyICYmCisJdGVzdF9pMThuY21wIG1pc3NpbmctZXJyIGVyciAmJgorCSgKKwkJY2F0IGJyaWVmLWxpc3QgJiYKKwkJZWNobyAiJE1JU1NJTkcgJHIiCisJKSB8IHNvcnQgLWsgMiA+bWlzc2luZy1icmllZi1leHBlY3RlZCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUob2JqZWN0bmFtZSkgJShyZWZuYW1lKSIgPmJyaWVmLW91dCAyPmJyaWVmLWVyciAmJgorCXRlc3RfY21wIG1pc3NpbmctYnJpZWYtZXhwZWN0ZWQgYnJpZWYtb3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGJyaWVmLWVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYzMDItZm9yLWVhY2gtcmVmLWZpbHRlci5zaCBiL3QvdDYzMDItZm9yLWVhY2gtcmVmLWZpbHRlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNTQwOGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjMwMi1mb3ItZWFjaC1yZWYtZmlsdGVyLnNoCkBAIC0wLDAgKzEsNDU3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBmb3ItZWFjaC1yZWZzIHVzYWdlIG9mIHJlZi1maWx0ZXIgQVBJcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1ncGcuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc29tZSBoaXN0b3J5IGFuZCByZWZzJyAnCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCXRlc3RfY29tbWl0IGZvdXIgJiYKKwlnaXQgdGFnIC1tICJBbiBhbm5vdGF0ZWQgdGFnIiBhbm5vdGF0ZWQtdGFnICYmCisJZ2l0IHRhZyAtbSAiQW5ub25hdGVkIGRvdWJseSIgZG91Ymx5LWFubm90YXRlZC10YWcgYW5ub3RhdGVkLXRhZyAmJgorCisJIyBOb3RlIHRoYXQgdGhlc2UgInNpZ25lZCIgdGFncyBtaWdodCBub3QgYWN0dWFsbHkgYmUgc2lnbmVkLgorCSMgVGVzdHMgd2hpY2ggY2FyZSBhYm91dCB0aGUgZGlzdGluY3Rpb24gc2hvdWxkIGJlIG1hcmtlZAorCSMgd2l0aCB0aGUgR1BHIHByZXJlcS4KKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIEdQRworCXRoZW4KKwkJc2lnbj0tcworCWVsc2UKKwkJc2lnbj0KKwlmaSAmJgorCWdpdCB0YWcgJHNpZ24gLW0gIkEgc2lnbmVkIHRhZyIgc2lnbmVkLXRhZyAmJgorCWdpdCB0YWcgJHNpZ24gLW0gIlNpZ25lZCBkb3VibHkiIGRvdWJseS1zaWduZWQtdGFnIHNpZ25lZC10YWcgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL29kZC9zcG90IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWx0ZXJpbmcgd2l0aCAtLXBvaW50cy1hdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlyZWZzL2hlYWRzL21hc3RlcgorCXJlZnMvb2RkL3Nwb3QKKwlyZWZzL3RhZ3MvdGhyZWUKKwlFT0YKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiAtLXBvaW50cy1hdD1tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc2lnbmVkIHRhZ3Mgd2l0aCAtLXBvaW50cy1hdCcgJworCXNlZCAtZSAicy9aJC8vIiA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlyZWZzL2hlYWRzL3NpZGUgWgorCXJlZnMvdGFncy9hbm5vdGF0ZWQtdGFnIGZvdXIKKwlyZWZzL3RhZ3MvZm91ciBaCisJcmVmcy90YWdzL3NpZ25lZC10YWcgZm91cgorCUVPRgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJSgqc3ViamVjdCkiIC0tcG9pbnRzLWF0PXNpZGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsdGVyaW5nIHdpdGggLS1tZXJnZWQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmcy9oZWFkcy9tYXN0ZXIKKwlyZWZzL29kZC9zcG90CisJcmVmcy90YWdzL29uZQorCXJlZnMvdGFncy90aHJlZQorCXJlZnMvdGFncy90d28KKwlFT0YKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiAtLW1lcmdlZD1tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsdGVyaW5nIHdpdGggLS1uby1tZXJnZWQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmcy9oZWFkcy9zaWRlCisJcmVmcy90YWdzL2Fubm90YXRlZC10YWcKKwlyZWZzL3RhZ3MvZG91Ymx5LWFubm90YXRlZC10YWcKKwlyZWZzL3RhZ3MvZG91Ymx5LXNpZ25lZC10YWcKKwlyZWZzL3RhZ3MvZm91cgorCXJlZnMvdGFncy9zaWduZWQtdGFnCisJRU9GCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgLS1uby1tZXJnZWQ9bWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbHRlcmluZyB3aXRoIC0tY29udGFpbnMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmcy9oZWFkcy9tYXN0ZXIKKwlyZWZzL2hlYWRzL3NpZGUKKwlyZWZzL29kZC9zcG90CisJcmVmcy90YWdzL2Fubm90YXRlZC10YWcKKwlyZWZzL3RhZ3MvZG91Ymx5LWFubm90YXRlZC10YWcKKwlyZWZzL3RhZ3MvZG91Ymx5LXNpZ25lZC10YWcKKwlyZWZzL3RhZ3MvZm91cgorCXJlZnMvdGFncy9zaWduZWQtdGFnCisJcmVmcy90YWdzL3RocmVlCisJcmVmcy90YWdzL3R3bworCUVPRgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiIC0tY29udGFpbnM9dHdvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbHRlcmluZyB3aXRoIC0tbm8tY29udGFpbnMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmcy90YWdzL29uZQorCUVPRgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiIC0tbm8tY29udGFpbnM9dHdvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbHRlcmluZyB3aXRoIC0tY29udGFpbnMgYW5kIC0tbm8tY29udGFpbnMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmcy90YWdzL3R3bworCUVPRgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiIC0tY29udGFpbnM9dHdvIC0tbm8tY29udGFpbnM9dGhyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJShjb2xvcikgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShjb2xvciklKHJlZm5hbWUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBpcyBkZWZhdWx0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXJlZm5hbWUgaXMgcmVmcy9oZWFkcy9tYXN0ZXIgIHxyZWZzL2hlYWRzL21hc3RlcgorCXJlZm5hbWUgaXMgcmVmcy9oZWFkcy9zaWRlICAgIHxyZWZzL2hlYWRzL3NpZGUKKwlyZWZuYW1lIGlzIHJlZnMvb2RkL3Nwb3QgICAgICB8cmVmcy9vZGQvc3BvdAorCXJlZm5hbWUgaXMgcmVmcy90YWdzL2Fubm90YXRlZC10YWd8cmVmcy90YWdzL2Fubm90YXRlZC10YWcKKwlyZWZuYW1lIGlzIHJlZnMvdGFncy9kb3VibHktYW5ub3RhdGVkLXRhZ3xyZWZzL3RhZ3MvZG91Ymx5LWFubm90YXRlZC10YWcKKwlyZWZuYW1lIGlzIHJlZnMvdGFncy9kb3VibHktc2lnbmVkLXRhZ3xyZWZzL3RhZ3MvZG91Ymx5LXNpZ25lZC10YWcKKwlyZWZuYW1lIGlzIHJlZnMvdGFncy9mb3VyICAgICB8cmVmcy90YWdzL2ZvdXIKKwlyZWZuYW1lIGlzIHJlZnMvdGFncy9vbmUgICAgICB8cmVmcy90YWdzL29uZQorCXJlZm5hbWUgaXMgcmVmcy90YWdzL3NpZ25lZC10YWd8cmVmcy90YWdzL3NpZ25lZC10YWcKKwlyZWZuYW1lIGlzIHJlZnMvdGFncy90aHJlZSAgICB8cmVmcy90YWdzL3RocmVlCisJcmVmbmFtZSBpcyByZWZzL3RhZ3MvdHdvICAgICAgfHJlZnMvdGFncy90d28KKwlFT0YKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGFsaWduOjMwKXJlZm5hbWUgaXMgJShyZWZuYW1lKSUoZW5kKXwlKHJlZm5hbWUpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaWRkbGUgYWxpZ25tZW50JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXwgcmVmbmFtZSBpcyByZWZzL2hlYWRzL21hc3RlciB8cmVmcy9oZWFkcy9tYXN0ZXIKKwl8ICByZWZuYW1lIGlzIHJlZnMvaGVhZHMvc2lkZSAgfHJlZnMvaGVhZHMvc2lkZQorCXwgICByZWZuYW1lIGlzIHJlZnMvb2RkL3Nwb3QgICB8cmVmcy9vZGQvc3BvdAorCXxyZWZuYW1lIGlzIHJlZnMvdGFncy9hbm5vdGF0ZWQtdGFnfHJlZnMvdGFncy9hbm5vdGF0ZWQtdGFnCisJfHJlZm5hbWUgaXMgcmVmcy90YWdzL2RvdWJseS1hbm5vdGF0ZWQtdGFnfHJlZnMvdGFncy9kb3VibHktYW5ub3RhdGVkLXRhZworCXxyZWZuYW1lIGlzIHJlZnMvdGFncy9kb3VibHktc2lnbmVkLXRhZ3xyZWZzL3RhZ3MvZG91Ymx5LXNpZ25lZC10YWcKKwl8ICByZWZuYW1lIGlzIHJlZnMvdGFncy9mb3VyICAgfHJlZnMvdGFncy9mb3VyCisJfCAgIHJlZm5hbWUgaXMgcmVmcy90YWdzL29uZSAgIHxyZWZzL3RhZ3Mvb25lCisJfHJlZm5hbWUgaXMgcmVmcy90YWdzL3NpZ25lZC10YWd8cmVmcy90YWdzL3NpZ25lZC10YWcKKwl8ICByZWZuYW1lIGlzIHJlZnMvdGFncy90aHJlZSAgfHJlZnMvdGFncy90aHJlZQorCXwgICByZWZuYW1lIGlzIHJlZnMvdGFncy90d28gICB8cmVmcy90YWdzL3R3bworCUVPRgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9InwlKGFsaWduOm1pZGRsZSwzMClyZWZuYW1lIGlzICUocmVmbmFtZSklKGVuZCl8JShyZWZuYW1lKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmlnaHQgYWxpZ25tZW50JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXwgIHJlZm5hbWUgaXMgcmVmcy9oZWFkcy9tYXN0ZXJ8cmVmcy9oZWFkcy9tYXN0ZXIKKwl8ICAgIHJlZm5hbWUgaXMgcmVmcy9oZWFkcy9zaWRlfHJlZnMvaGVhZHMvc2lkZQorCXwgICAgICByZWZuYW1lIGlzIHJlZnMvb2RkL3Nwb3R8cmVmcy9vZGQvc3BvdAorCXxyZWZuYW1lIGlzIHJlZnMvdGFncy9hbm5vdGF0ZWQtdGFnfHJlZnMvdGFncy9hbm5vdGF0ZWQtdGFnCisJfHJlZm5hbWUgaXMgcmVmcy90YWdzL2RvdWJseS1hbm5vdGF0ZWQtdGFnfHJlZnMvdGFncy9kb3VibHktYW5ub3RhdGVkLXRhZworCXxyZWZuYW1lIGlzIHJlZnMvdGFncy9kb3VibHktc2lnbmVkLXRhZ3xyZWZzL3RhZ3MvZG91Ymx5LXNpZ25lZC10YWcKKwl8ICAgICByZWZuYW1lIGlzIHJlZnMvdGFncy9mb3VyfHJlZnMvdGFncy9mb3VyCisJfCAgICAgIHJlZm5hbWUgaXMgcmVmcy90YWdzL29uZXxyZWZzL3RhZ3Mvb25lCisJfHJlZm5hbWUgaXMgcmVmcy90YWdzL3NpZ25lZC10YWd8cmVmcy90YWdzL3NpZ25lZC10YWcKKwl8ICAgIHJlZm5hbWUgaXMgcmVmcy90YWdzL3RocmVlfHJlZnMvdGFncy90aHJlZQorCXwgICAgICByZWZuYW1lIGlzIHJlZnMvdGFncy90d298cmVmcy90YWdzL3R3bworCUVPRgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9InwlKGFsaWduOjMwLHJpZ2h0KXJlZm5hbWUgaXMgJShyZWZuYW1lKSUoZW5kKXwlKHJlZm5hbWUpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PC1cRU9GCit8ICAgICAgIHJlZm5hbWUgaXMgcmVmcy9oZWFkcy9tYXN0ZXIgICAgICAgfHJlZnMvaGVhZHMvbWFzdGVyCit8ICAgICAgICByZWZuYW1lIGlzIHJlZnMvaGVhZHMvc2lkZSAgICAgICAgfHJlZnMvaGVhZHMvc2lkZQorfCAgICAgICAgIHJlZm5hbWUgaXMgcmVmcy9vZGQvc3BvdCAgICAgICAgIHxyZWZzL29kZC9zcG90Cit8ICAgIHJlZm5hbWUgaXMgcmVmcy90YWdzL2Fubm90YXRlZC10YWcgICAgfHJlZnMvdGFncy9hbm5vdGF0ZWQtdGFnCit8cmVmbmFtZSBpcyByZWZzL3RhZ3MvZG91Ymx5LWFubm90YXRlZC10YWcgfHJlZnMvdGFncy9kb3VibHktYW5ub3RhdGVkLXRhZworfCAgcmVmbmFtZSBpcyByZWZzL3RhZ3MvZG91Ymx5LXNpZ25lZC10YWcgIHxyZWZzL3RhZ3MvZG91Ymx5LXNpZ25lZC10YWcKK3wgICAgICAgIHJlZm5hbWUgaXMgcmVmcy90YWdzL2ZvdXIgICAgICAgICB8cmVmcy90YWdzL2ZvdXIKK3wgICAgICAgICByZWZuYW1lIGlzIHJlZnMvdGFncy9vbmUgICAgICAgICB8cmVmcy90YWdzL29uZQorfCAgICAgcmVmbmFtZSBpcyByZWZzL3RhZ3Mvc2lnbmVkLXRhZyAgICAgIHxyZWZzL3RhZ3Mvc2lnbmVkLXRhZworfCAgICAgICAgcmVmbmFtZSBpcyByZWZzL3RhZ3MvdGhyZWUgICAgICAgIHxyZWZzL3RhZ3MvdGhyZWUKK3wgICAgICAgICByZWZuYW1lIGlzIHJlZnMvdGFncy90d28gICAgICAgICB8cmVmcy90YWdzL3R3bworRU9GCisKK3Rlc3RfYWxpZ25fcGVybXV0YXRpb25zKCkgeworCXdoaWxlIHJlYWQgLXIgb3B0aW9uCisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAiYWxpZ246JG9wdGlvbiIgJworCQkJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0ifCUoYWxpZ246JG9wdGlvbilyZWZuYW1lIGlzICUocmVmbmFtZSklKGVuZCl8JShyZWZuYW1lKSIgPmFjdHVhbCAmJgorCQkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCQknCisJZG9uZQorfQorCit0ZXN0X2FsaWduX3Blcm11dGF0aW9ucyA8PC1cRU9GCisJbWlkZGxlLDQyCisJNDIsbWlkZGxlCisJcG9zaXRpb249bWlkZGxlLDQyCisJNDIscG9zaXRpb249bWlkZGxlCisJbWlkZGxlLHdpZHRoPTQyCisJd2lkdGg9NDIsbWlkZGxlCisJcG9zaXRpb249bWlkZGxlLHdpZHRoPTQyCisJd2lkdGg9NDIscG9zaXRpb249bWlkZGxlCitFT0YKKworIyBMYXN0IG9uZSB3aW5zIChzaWxlbnRseSkgd2hlbiBtdWx0aXBsZSBhcmd1bWVudHMgb2YgdGhlIHNhbWUgdHlwZSBhcmUgZ2l2ZW4KKwordGVzdF9hbGlnbl9wZXJtdXRhdGlvbnMgPDwtXEVPRgorCTMyLHdpZHRoPTQyLG1pZGRsZQorCXdpZHRoPTMwLDQyLG1pZGRsZQorCXdpZHRoPTQyLHBvc2l0aW9uPXJpZ2h0LG1pZGRsZQorCTQyLHJpZ2h0LHBvc2l0aW9uPW1pZGRsZQorRU9GCisKKyMgSW5kaXZpZHVhbCBhdG9tcyBpbnNpZGUgJShhbGlnbjouLi4pIGFuZCAlKGVuZCkgbXVzdCBub3QgYmUgcXVvdGVkLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlnbm1lbnQgd2l0aCBmb3JtYXQgcXVvdGUnICIKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJfCcgICAgICAnXCcnbWFzdGVyfCBBIFUgVGhvcidcJycgICAgICAnfAorCXwnICAgICAgICdcJydzaWRlfCBBIFUgVGhvcidcJycgICAgICAgJ3wKKwl8JyAgICAgJ1wnJ29kZC9zcG90fCBBIFUgVGhvcidcJycgICAgICd8CisJfCcgICAgICAnXCcnYW5ub3RhdGVkLXRhZ3wgJ1wnJyAgICAgICAnfAorCXwnICAgJ1wnJ2RvdWJseS1hbm5vdGF0ZWQtdGFnfCAnXCcnICAgJ3wKKwl8JyAgICAnXCcnZG91Ymx5LXNpZ25lZC10YWd8ICdcJycgICAgICd8CisJfCcgICAgICAgJ1wnJ2ZvdXJ8IEEgVSBUaG9yJ1wnJyAgICAgICAnfAorCXwnICAgICAgICdcJydvbmV8IEEgVSBUaG9yJ1wnJyAgICAgICAgJ3wKKwl8JyAgICAgICAgJ1wnJ3NpZ25lZC10YWd8ICdcJycgICAgICAgICd8CisJfCcgICAgICAnXCcndGhyZWV8IEEgVSBUaG9yJ1wnJyAgICAgICAnfAorCXwnICAgICAgICdcJyd0d298IEEgVSBUaG9yJ1wnJyAgICAgICAgJ3wKKwlFT0YKKwlnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9XCJ8JShhbGlnbjozMCxtaWRkbGUpJyUocmVmbmFtZTpzaG9ydCl8ICUoYXV0aG9ybmFtZSknJShlbmQpfFwiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lc3RlZCBhbGlnbm1lbnQgd2l0aCBxdW90ZSBmb3JtYXR0aW5nJyAiCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXwnICAgICAgICAgbWFzdGVyICAgICAgICAgICAgICAgJ3wKKwl8JyAgICAgICAgICAgc2lkZSAgICAgICAgICAgICAgICd8CisJfCcgICAgICAgb2RkL3Nwb3QgICAgICAgICAgICAgICAnfAorCXwnICBhbm5vdGF0ZWQtdGFnICAgICAgICAgICAgICAgJ3wKKwl8J2RvdWJseS1hbm5vdGF0ZWQtdGFnICAgICAgICAgICd8CisJfCdkb3VibHktc2lnbmVkLXRhZyAgICAgICAgICAgICAnfAorCXwnICAgICAgICAgICBmb3VyICAgICAgICAgICAgICAgJ3wKKwl8JyAgICAgICAgICAgIG9uZSAgICAgICAgICAgICAgICd8CisJfCcgICAgIHNpZ25lZC10YWcgICAgICAgICAgICAgICAnfAorCXwnICAgICAgICAgIHRocmVlICAgICAgICAgICAgICAgJ3wKKwl8JyAgICAgICAgICAgIHR3byAgICAgICAgICAgICAgICd8CisJRU9GCisJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSd8JShhbGlnbjozMCxsZWZ0KSUoYWxpZ246MTUscmlnaHQpJShyZWZuYW1lOnNob3J0KSUoZW5kKSUoZW5kKXwnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGAlKGNvbnRlbnRzOmxpbmVzPTEpYCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwltYXN0ZXIgfHRocmVlCisJc2lkZSB8Zm91cgorCW9kZC9zcG90IHx0aHJlZQorCWFubm90YXRlZC10YWcgfEFuIGFubm90YXRlZCB0YWcKKwlkb3VibHktYW5ub3RhdGVkLXRhZyB8QW5ub25hdGVkIGRvdWJseQorCWRvdWJseS1zaWduZWQtdGFnIHxTaWduZWQgZG91Ymx5CisJZm91ciB8Zm91cgorCW9uZSB8b25lCisJc2lnbmVkLXRhZyB8QSBzaWduZWQgdGFnCisJdGhyZWUgfHRocmVlCisJdHdvIHx0d28KKwlFT0YKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWU6c2hvcnQpIHwlKGNvbnRlbnRzOmxpbmVzPTEpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBgJShjb250ZW50czpsaW5lcz0wKWAnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbWFzdGVyIHwKKwlzaWRlIHwKKwlvZGQvc3BvdCB8CisJYW5ub3RhdGVkLXRhZyB8CisJZG91Ymx5LWFubm90YXRlZC10YWcgfAorCWRvdWJseS1zaWduZWQtdGFnIHwKKwlmb3VyIHwKKwlvbmUgfAorCXNpZ25lZC10YWcgfAorCXRocmVlIHwKKwl0d28gfAorCUVPRgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZTpzaG9ydCkgfCUoY29udGVudHM6bGluZXM9MCkiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGAlKGNvbnRlbnRzOmxpbmVzPTk5OTk5KWAnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbWFzdGVyIHx0aHJlZQorCXNpZGUgfGZvdXIKKwlvZGQvc3BvdCB8dGhyZWUKKwlhbm5vdGF0ZWQtdGFnIHxBbiBhbm5vdGF0ZWQgdGFnCisJZG91Ymx5LWFubm90YXRlZC10YWcgfEFubm9uYXRlZCBkb3VibHkKKwlkb3VibHktc2lnbmVkLXRhZyB8U2lnbmVkIGRvdWJseQorCWZvdXIgfGZvdXIKKwlvbmUgfG9uZQorCXNpZ25lZC10YWcgfEEgc2lnbmVkIHRhZworCXRocmVlIHx0aHJlZQorCXR3byB8dHdvCisJRU9GCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lOnNob3J0KSB8JShjb250ZW50czpsaW5lcz05OTk5OSkiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2AlKGNvbnRlbnRzOmxpbmVzPS0xKWAgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWU6c2hvcnQpIHwlKGNvbnRlbnRzOmxpbmVzPS0xKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHZlcnNpb24gc29ydCcgJworCXRlc3RfY29tbWl0IGZvbzEuMyAmJgorCXRlc3RfY29tbWl0IGZvbzEuNiAmJgorCXRlc3RfY29tbWl0IGZvbzEuMTAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyc2lvbiBzb3J0JyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLXNvcnQ9dmVyc2lvbjpyZWZuYW1lIC0tZm9ybWF0PSIlKHJlZm5hbWU6c2hvcnQpIiByZWZzL3RhZ3MvIHwgZ3JlcCAiZm9vIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuMworCWZvbzEuNgorCWZvbzEuMTAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcnNpb24gc29ydCAoc2hvcnRlbmVkKScgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1zb3J0PXY6cmVmbmFtZSAtLWZvcm1hdD0iJShyZWZuYW1lOnNob3J0KSIgcmVmcy90YWdzLyB8IGdyZXAgImZvbyIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmb28xLjMKKwlmb28xLjYKKwlmb28xLjEwCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnNlIHZlcnNpb24gc29ydCcgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1zb3J0PS12ZXJzaW9uOnJlZm5hbWUgLS1mb3JtYXQ9IiUocmVmbmFtZTpzaG9ydCkiIHJlZnMvdGFncy8gfCBncmVwICJmb28iID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZm9vMS4xMAorCWZvbzEuNgorCWZvbzEuMworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wcm9wZXIgdXNhZ2Ugb2YgJShpZiksICUodGhlbiksICUoZWxzZSkgYW5kICUoZW5kKSBhdG9tcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoaWYpIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUodGhlbikgJShlbmQpIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoZWxzZSkgJShlbmQpIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoaWYpICUoZWxzZSkgJShlbmQpIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoaWYpICUodGhlbikgJSh0aGVuKSAlKGVuZCkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJSh0aGVuKSAlKGVsc2UpICUoZW5kKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGlmKSAlKGVsc2UpICUoZW5kKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGlmKSAlKHRoZW4pICUoZWxzZSkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShpZikgJShlbHNlKSAlKHRoZW4pICUoZW5kKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGlmKSAlKHRoZW4pICUoZWxzZSkgJShlbHNlKSAlKGVuZCkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShpZikgJShlbmQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayAlKGlmKS4uLiUodGhlbikuLi4lKGVuZCkgYXRvbXMnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpJShpZiklKGF1dGhvcm5hbWUpJSh0aGVuKSBBdXRob3I6ICUoYXV0aG9ybmFtZSklKGVuZCkiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmcy9oZWFkcy9tYXN0ZXIgQXV0aG9yOiBBIFUgVGhvcgorCXJlZnMvaGVhZHMvc2lkZSBBdXRob3I6IEEgVSBUaG9yCisJcmVmcy9vZGQvc3BvdCBBdXRob3I6IEEgVSBUaG9yCisJcmVmcy90YWdzL2Fubm90YXRlZC10YWcKKwlyZWZzL3RhZ3MvZG91Ymx5LWFubm90YXRlZC10YWcKKwlyZWZzL3RhZ3MvZG91Ymx5LXNpZ25lZC10YWcKKwlyZWZzL3RhZ3MvZm9vMS4xMCBBdXRob3I6IEEgVSBUaG9yCisJcmVmcy90YWdzL2ZvbzEuMyBBdXRob3I6IEEgVSBUaG9yCisJcmVmcy90YWdzL2ZvbzEuNiBBdXRob3I6IEEgVSBUaG9yCisJcmVmcy90YWdzL2ZvdXIgQXV0aG9yOiBBIFUgVGhvcgorCXJlZnMvdGFncy9vbmUgQXV0aG9yOiBBIFUgVGhvcgorCXJlZnMvdGFncy9zaWduZWQtdGFnCisJcmVmcy90YWdzL3RocmVlIEF1dGhvcjogQSBVIFRob3IKKwlyZWZzL3RhZ3MvdHdvIEF1dGhvcjogQSBVIFRob3IKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrICUoaWYpLi4uJSh0aGVuKS4uLiUoZWxzZSkuLi4lKGVuZCkgYXRvbXMnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGlmKSUoYXV0aG9ybmFtZSklKHRoZW4pJShhdXRob3JuYW1lKSUoZWxzZSlObyBhdXRob3IlKGVuZCk6ICUocmVmbmFtZSkiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQSBVIFRob3I6IHJlZnMvaGVhZHMvbWFzdGVyCisJQSBVIFRob3I6IHJlZnMvaGVhZHMvc2lkZQorCUEgVSBUaG9yOiByZWZzL29kZC9zcG90CisJTm8gYXV0aG9yOiByZWZzL3RhZ3MvYW5ub3RhdGVkLXRhZworCU5vIGF1dGhvcjogcmVmcy90YWdzL2RvdWJseS1hbm5vdGF0ZWQtdGFnCisJTm8gYXV0aG9yOiByZWZzL3RhZ3MvZG91Ymx5LXNpZ25lZC10YWcKKwlBIFUgVGhvcjogcmVmcy90YWdzL2ZvbzEuMTAKKwlBIFUgVGhvcjogcmVmcy90YWdzL2ZvbzEuMworCUEgVSBUaG9yOiByZWZzL3RhZ3MvZm9vMS42CisJQSBVIFRob3I6IHJlZnMvdGFncy9mb3VyCisJQSBVIFRob3I6IHJlZnMvdGFncy9vbmUKKwlObyBhdXRob3I6IHJlZnMvdGFncy9zaWduZWQtdGFnCisJQSBVIFRob3I6IHJlZnMvdGFncy90aHJlZQorCUEgVSBUaG9yOiByZWZzL3RhZ3MvdHdvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWdub3JlIHNwYWNlcyBpbiAlKGlmKSBhdG9tIHVzYWdlJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lOnNob3J0KTogJShpZiklKEhFQUQpJSh0aGVuKUhlYWQgcmVmJShlbHNlKU5vdCBIZWFkIHJlZiUoZW5kKSIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwltYXN0ZXI6IEhlYWQgcmVmCisJc2lkZTogTm90IEhlYWQgcmVmCisJb2RkL3Nwb3Q6IE5vdCBIZWFkIHJlZgorCWFubm90YXRlZC10YWc6IE5vdCBIZWFkIHJlZgorCWRvdWJseS1hbm5vdGF0ZWQtdGFnOiBOb3QgSGVhZCByZWYKKwlkb3VibHktc2lnbmVkLXRhZzogTm90IEhlYWQgcmVmCisJZm9vMS4xMDogTm90IEhlYWQgcmVmCisJZm9vMS4zOiBOb3QgSGVhZCByZWYKKwlmb28xLjY6IE5vdCBIZWFkIHJlZgorCWZvdXI6IE5vdCBIZWFkIHJlZgorCW9uZTogTm90IEhlYWQgcmVmCisJc2lnbmVkLXRhZzogTm90IEhlYWQgcmVmCisJdGhyZWU6IE5vdCBIZWFkIHJlZgorCXR3bzogTm90IEhlYWQgcmVmCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayAlKGlmOmVxdWFscz08c3RyaW5nPiknICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGlmOmVxdWFscz1tYXN0ZXIpJShyZWZuYW1lOnNob3J0KSUodGhlbilGb3VuZCBtYXN0ZXIlKGVsc2UpTm90IG1hc3RlciUoZW5kKSIgcmVmcy9oZWFkcy8gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlGb3VuZCBtYXN0ZXIKKwlOb3QgbWFzdGVyCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayAlKGlmOm5vdGVxdWFscz08c3RyaW5nPiknICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGlmOm5vdGVxdWFscz1tYXN0ZXIpJShyZWZuYW1lOnNob3J0KSUodGhlbilOb3QgbWFzdGVyJShlbHNlKUZvdW5kIG1hc3RlciUoZW5kKSIgcmVmcy9oZWFkcy8gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlGb3VuZCBtYXN0ZXIKKwlOb3QgbWFzdGVyCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1lcmdlZCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLW1lcmdlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1tZXJnZWQgSEVBRCAtLW5vLW1lcmdlZCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIHdvcmt0cmVlIGF0b20nICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwltYXN0ZXI6ICQocHdkKQorCW1hc3Rlcl93b3JrdHJlZTogJChwd2QpL3dvcmt0cmVlX2RpcgorCXNpZGU6IG5vdCBjaGVja2VkIG91dAorCUVPRgorCWdpdCB3b3JrdHJlZSBhZGQgLWIgbWFzdGVyX3dvcmt0cmVlIHdvcmt0cmVlX2RpciBtYXN0ZXIgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWU6c2hvcnQpOiAlKGlmKSUod29ya3RyZWVwYXRoKSUodGhlbiklKHdvcmt0cmVlcGF0aCklKGVsc2Upbm90IGNoZWNrZWQgb3V0JShlbmQpIiByZWZzL2hlYWRzLyA+YWN0dWFsICYmCisJcm0gLXIgd29ya3RyZWVfZGlyICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDY1MDAtZ2Muc2ggYi90L3Q2NTAwLWdjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhNjlhNjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2NTAwLWdjLnNoCkBAIC0wLDAgKzEsMjA1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgZ2l0IGdjIHRlc3RzCisnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItdGVybWluYWwuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwkjIGRvIG5vdCBsZXQgdGhlIGFtb3VudCBvZiBwaHlzaWNhbCBtZW1vcnkgYWZmZWN0cyBnYworCSMgYmVoYXZpb3IsIG1ha2Ugc3VyZSB3ZSBhbHdheXMgcGFjayBldmVyeXRoaW5nIHRvIG9uZSBwYWNrIGJ5CisJIyBkZWZhdWx0CisJZ2l0IGNvbmZpZyBnYy5iaWdQYWNrVGhyZXNob2xkIDJnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIGVtcHR5IHJlcG9zaXRvcnknICcKKwlnaXQgZ2MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgZG9lcyBub3QgbGVhdmUgYmVoaW5kIHBpZCBmaWxlJyAnCisJZ2l0IGdjICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9nYy5waWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgLS1nb2JibGVkZWdvb2snICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgZ2MgLS1ub25zZW5zZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlOiBnaXQgZ2MiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyAtaCB3aXRoIGludmFsaWQgY29uZmlndXJhdGlvbicgJworCW1rZGlyIGJyb2tlbiAmJgorCSgKKwkJY2QgYnJva2VuICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gIltnY10gcHJ1bmVleHBpcmUgPSBDT1JSVVBUIiA+Pi5naXQvY29uZmlnICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBnYyAtaCA+dXNhZ2UgMj4mMQorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZSIgYnJva2VuL3VzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIGlzIG5vdCBhYm9ydGVkIGR1ZSB0byBhIHN0YWxlIHN5bXJlZicgJworCWdpdCBpbml0IHJlbW90ZSAmJgorCSgKKwkJY2QgcmVtb3RlICYmCisJCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwkJZ2l0IGNsb25lIC4gLi4vY2xpZW50ICYmCisJCWdpdCBicmFuY2ggLW0gZGV2ZWxvcCAmJgorCQljZCAuLi9jbGllbnQgJiYKKwkJZ2l0IGZldGNoIC0tcHJ1bmUgJiYKKwkJZ2l0IGdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyAtLWtlZXAtbGFyZ2VzdC1wYWNrJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBrZWVwLXBhY2sgJiYKKwkoCisJCWNkIGtlZXAtcGFjayAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCXRlc3RfY29tbWl0IHRocmVlICYmCisJCWdpdCBnYyAmJgorCQkoIGNkIC5naXQvb2JqZWN0cy9wYWNrICYmIGxzICoucGFjayApID5wYWNrLWxpc3QgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBwYWNrLWxpc3QgJiYKKwkJQkFTRV9QQUNLPS5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrICYmCisJCXRlc3RfY29tbWl0IGZvdXIgJiYKKwkJZ2l0IHJlcGFjayAtZCAmJgorCQl0ZXN0X2NvbW1pdCBmaXZlICYmCisJCWdpdCByZXBhY2sgLWQgJiYKKwkJKCBjZCAuZ2l0L29iamVjdHMvcGFjayAmJiBscyAqLnBhY2sgKSA+cGFjay1saXN0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgcGFjay1saXN0ICYmCisJCWdpdCBnYyAtLWtlZXAtbGFyZ2VzdC1wYWNrICYmCisJCSggY2QgLmdpdC9vYmplY3RzL3BhY2sgJiYgbHMgKi5wYWNrICkgPnBhY2stbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIHBhY2stbGlzdCAmJgorCQlhd2sgIi9eUCAve3ByaW50IFwkMn0iIDwuZ2l0L29iamVjdHMvaW5mby9wYWNrcyA+cGFjay1pbmZvICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgcGFjay1pbmZvICYmCisJCXRlc3RfcGF0aF9pc19maWxlICRCQVNFX1BBQ0sgJiYKKwkJZ2l0IGZzY2sKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gZ2Mgd2l0aCB0b28gbWFueSBsb29zZSBvYmplY3RzIGRvZXMgbm90IGF0dGVtcHQgdG8gY3JlYXRlIGJpdG1hcHMnICcKKwl0ZXN0X2NvbmZpZyBnYy5hdXRvIDMgJiYKKwl0ZXN0X2NvbmZpZyBnYy5hdXRvZGV0YWNoIGZhbHNlICYmCisJdGVzdF9jb25maWcgcGFjay53cml0ZWJpdG1hcHMgdHJ1ZSAmJgorCSMgV2UgbmVlZCB0byBjcmVhdGUgdHdvIG9iamVjdCB3aG9zZSBzaGExcyBzdGFydCB3aXRoIDE3CisJIyBzaW5jZSB0aGlzIGlzIHdoYXQgZ2l0IGdjIGNvdW50cy4gIEFzIGl0IGhhcHBlbnMsIHRoZXNlCisJIyB0d28gYmxvYnMgd2lsbCBkbyBzby4KKwl0ZXN0X2NvbW1pdCAyNjMgJiYKKwl0ZXN0X2NvbW1pdCA0MTAgJiYKKwkjIE91ciBmaXJzdCBnYyB3aWxsIGNyZWF0ZSBhIHBhY2s7IG91ciBzZWNvbmQgd2lsbCBjcmVhdGUgYSBzZWNvbmQgcGFjaworCWdpdCBnYyAtLWF1dG8gJiYKKwlscyAuZ2l0L29iamVjdHMvcGFjayB8IHNvcnQgPmV4aXN0aW5nX3BhY2tzICYmCisJdGVzdF9jb21taXQgNTIzICYmCisJdGVzdF9jb21taXQgNzkwICYmCisKKwlnaXQgZ2MgLS1hdXRvIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJed2FybmluZzoiIGVyciAmJgorCWxzIC5naXQvb2JqZWN0cy9wYWNrLyB8IHNvcnQgPnBvc3RfcGFja3MgJiYKKwljb21tIC0xIC0zIGV4aXN0aW5nX3BhY2tzIHBvc3RfcGFja3MgPm5ldyAmJgorCWNvbW0gLTIgLTMgZXhpc3RpbmdfcGFja3MgcG9zdF9wYWNrcyA+ZGVsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBkZWwgJiYgIyBObyBwYWNrcyBhcmUgZGVsZXRlZAorCXRlc3RfbGluZV9jb3VudCA9IDIgbmV3ICMgVGhlcmUgaXMgb25lIG5ldyBwYWNrIGFuZCBpdHMgLmlkeAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyAtLW5vLXF1aWV0JyAnCisJR0lUX1BST0dSRVNTX0RFTEFZPTAgZ2l0IC1jIGdjLndyaXRlQ29tbWl0R3JhcGg9dHJ1ZSBnYyAtLW5vLXF1aWV0ID5zdGRvdXQgMj5zdGRlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgc3Rkb3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiQ29tcHV0aW5nIGNvbW1pdCBncmFwaCBnZW5lcmF0aW9uIG51bWJlcnMiIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnd2l0aCBUVFk6IGdjIC0tbm8tcXVpZXQnICcKKwl0ZXN0X3Rlcm1pbmFsIGVudiBHSVRfUFJPR1JFU1NfREVMQVk9MCBcCisJCWdpdCAtYyBnYy53cml0ZUNvbW1pdEdyYXBoPXRydWUgZ2MgLS1uby1xdWlldCA+c3Rkb3V0IDI+c3RkZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHN0ZG91dCAmJgorCXRlc3RfaTE4bmdyZXAgIkVudW1lcmF0aW5nIG9iamVjdHMiIHN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgIkNvbXB1dGluZyBjb21taXQgZ3JhcGggZ2VuZXJhdGlvbiBudW1iZXJzIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgLS1xdWlldCcgJworCWdpdCAtYyBnYy53cml0ZUNvbW1pdEdyYXBoPXRydWUgZ2MgLS1xdWlldCA+c3Rkb3V0IDI+c3RkZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHN0ZG91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MucmVmbG9nRXhwaXJle1VucmVhY2hhYmxlLH09bmV2ZXIgc2tpcHMgImV4cGlyZSIgdmlhICJnYyInICcKKwl0ZXN0X2NvbmZpZyBnYy5yZWZsb2dFeHBpcmUgbmV2ZXIgJiYKKwl0ZXN0X2NvbmZpZyBnYy5yZWZsb2dFeHBpcmVVbnJlYWNoYWJsZSBuZXZlciAmJgorCisJR0lUX1RSQUNFPSQocHdkKS90cmFjZS5vdXQgZ2l0IGdjICYmCisKKwkjIENoZWNrIHRoYXQgZ2l0LXBhY2stcmVmcyBpcyBydW4gYXMgYSBzYW5pdHkgY2hlY2sgKGRvbmUgdmlhCisJIyBnY19iZWZvcmVfcmVwYWNrKCkpIGJ1dCB0aGF0IGdpdC1leHBpcmUgaXMgbm90LgorCWdyZXAgLUUgIl50cmFjZTogKGJ1aWx0LWlufGV4ZWN8cnVuX2NvbW1hbmQpOiBnaXQgcGFjay1yZWZzIC0tIiB0cmFjZS5vdXQgJiYKKwkhIGdyZXAgLUUgIl50cmFjZTogKGJ1aWx0LWlufGV4ZWN8cnVuX2NvbW1hbmQpOiBnaXQgcmVmbG9nIGV4cGlyZSAtLSIgdHJhY2Uub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29uZSBvZiBnYy5yZWZsb2dFeHBpcmV7VW5yZWFjaGFibGUsfT1uZXZlciBkb2VzIG5vdCBza2lwICJleHBpcmUiIHZpYSAiZ2MiJyAnCisJPnRyYWNlLm91dCAmJgorCXRlc3RfY29uZmlnIGdjLnJlZmxvZ0V4cGlyZSBuZXZlciAmJgorCUdJVF9UUkFDRT0kKHB3ZCkvdHJhY2Uub3V0IGdpdCBnYyAmJgorCWdyZXAgLUUgIl50cmFjZTogKGJ1aWx0LWlufGV4ZWN8cnVuX2NvbW1hbmQpOiBnaXQgcmVmbG9nIGV4cGlyZSAtLSIgdHJhY2Uub3V0CisnCisKK3J1bl9hbmRfd2FpdF9mb3JfYXV0b19nYyAoKSB7CisJIyBXZSByZWFkIHN0ZG91dCBmcm9tIGdjIGZvciB0aGUgc2lkZSBlZmZlY3Qgb2Ygd2FpdGluZyB1bnRpbCB0aGUKKwkjIGJhY2tncm91bmQgZ2MgcHJvY2VzcyBleGl0cywgY2xvc2luZyBpdHMgZmQgOS4gIEZ1cnRoZXJtb3JlLCB0aGUKKwkjIHZhcmlhYmxlIGFzc2lnbm1lbnQgZnJvbSBhIGNvbW1hbmQgc3Vic3RpdHV0aW9uIHByZXNlcnZlcyB0aGUKKwkjIGV4aXQgc3RhdHVzIG9mIHRoZSBtYWluIGdjIHByb2Nlc3MuCisJIyBOb3RlOiB0aGlzIGZkIHRyaWNrZXJ5IGRvZXNuJ3Qgd29yayBvbiBXaW5kb3dzLCBidXQgdGhlcmUgaXMgbm8KKwkjIG5lZWQgdG8sIGJlY2F1c2Ugb24gV2luIHRoZSBhdXRvIGdjIGFsd2F5cyBydW5zIGluIHRoZSBmb3JlZ3JvdW5kLgorCWRvZXNudF9tYXR0ZXI9JChnaXQgZ2MgLS1hdXRvIDk+JjEpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhY2tncm91bmQgYXV0byBnYyBkb2VzIG5vdCBydW4gaWYgZ2MubG9nIGlzIHByZXNlbnQgYW5kIHJlY2VudCBidXQgZG9lcyBpZiBpdCBpcyBvbGQnICcKKwl0ZXN0X2NvbW1pdCBmb28gJiYKKwl0ZXN0X2NvbW1pdCBiYXIgJiYKKwlnaXQgcmVwYWNrICYmCisJdGVzdF9jb25maWcgZ2MuYXV0b3BhY2tsaW1pdCAxICYmCisJdGVzdF9jb25maWcgZ2MuYXV0b2RldGFjaCB0cnVlICYmCisJZWNobyBmbGVlbSA+LmdpdC9nYy5sb2cgJiYKKwlnaXQgZ2MgLS1hdXRvIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiXndhcm5pbmc6IiBlcnIgJiYKKwl0ZXN0X2NvbmZpZyBnYy5sb2dleHBpcnkgNS5kYXlzICYmCisJdGVzdC10b29sIGNobXRpbWUgPS0zNDU2MDAgLmdpdC9nYy5sb2cgJiYKKwlnaXQgZ2MgLS1hdXRvICYmCisJdGVzdF9jb25maWcgZ2MubG9nZXhwaXJ5IDIuZGF5cyAmJgorCXJ1bl9hbmRfd2FpdF9mb3JfYXV0b19nYyAmJgorCWxzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrID5wYWNrcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgcGFja3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFja2dyb3VuZCBhdXRvIGdjIHJlc3BlY3RzIGxvY2sgZm9yIGFsbCBvcGVyYXRpb25zJyAnCisJIyBtYWtlIHN1cmUgd2UgcnVuIGEgYmFja2dyb3VuZCBhdXRvLWdjCisJdGVzdF9jb21taXQgbWFrZS1wYWNrICYmCisJZ2l0IHJlcGFjayAmJgorCXRlc3RfY29uZmlnIGdjLmF1dG9wYWNrbGltaXQgMSAmJgorCXRlc3RfY29uZmlnIGdjLmF1dG9kZXRhY2ggdHJ1ZSAmJgorCisJIyBjcmVhdGUgYSByZWYgd2hvc2UgbG9vc2UgcHJlc2VuY2Ugd2UgY2FuIHVzZSB0byBkZXRlY3QgYSBwYWNrLXJlZnMgcnVuCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9zaG91bGQtYmUtbG9vc2UgSEVBRCAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9zaG91bGQtYmUtbG9vc2UgJiYKKworCSMgbm93IGZha2UgYSBjb25jdXJyZW50IGdjIHRoYXQgaG9sZHMgdGhlIGxvY2s7IHdlIGNhbiB1c2Ugb3VyCisJIyBzaGVsbCBwaWQgc28gdGhhdCBpdCBsb29rcyB2YWxpZC4KKwlob3N0bmFtZT0kKGhvc3RuYW1lIHx8IGVjaG8gdW5rbm93bikgJiYKKwlzaGVsbF9waWQ9JCQgJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIE1JTkdXICYmIHRlc3QgLWYgL3Byb2MvJHNoZWxsX3BpZC93aW5waWQKKwl0aGVuCisJCSMgSW4gR2l0IGZvciBXaW5kb3dzLCBCYXNoIChhY3R1YWxseSwgdGhlIE1TWVMyIHJ1bnRpbWUpIGhhcyBhCisJCSMgZGlmZmVyZW50IGlkZWEgb2YgUElEcyB0aGFuIGdpdC5leGUgKGFjdHVhbGx5IFdpbmRvd3MpLiBVc2UKKwkJIyB0aGUgV2luZG93cyBQSUQgaW4gdGhpcyBjYXNlLgorCQlzaGVsbF9waWQ9JChjYXQgL3Byb2MvJHNoZWxsX3BpZC93aW5waWQpCisJZmkgJiYKKwlwcmludGYgIiVkICVzIiAiJHNoZWxsX3BpZCIgIiRob3N0bmFtZSIgPi5naXQvZ2MucGlkICYmCisKKwkjIG91ciBnYyBzaG91bGQgZXhpdCB6ZXJvIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcKKwlydW5fYW5kX3dhaXRfZm9yX2F1dG9fZ2MgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvc2hvdWxkLWJlLWxvb3NlCisnCisKKyMgRE8gTk9UIGxlYXZlIGEgZGV0YWNoZWQgYXV0byBnYyBwcm9jZXNzIHJ1bm5pbmcgbmVhciB0aGUgZW5kIG9mIHRoZQorIyB0ZXN0IHNjcmlwdDogaXQgY2FuIHJ1biBsb25nIGVub3VnaCBpbiB0aGUgYmFja2dyb3VuZCB0byByYWNpbHkKKyMgaW50ZXJmZXJlIHdpdGggdGhlIGNsZWFudXAgaW4gJ3Rlc3RfZG9uZScuCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjUwMS1mcmVzaGVuLW9iamVjdHMuc2ggYi90L3Q2NTAxLWZyZXNoZW4tb2JqZWN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMzBiNDg0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjUwMS1mcmVzaGVuLW9iamVjdHMuc2gKQEAgLTAsMCArMSwxNzAgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIHRlc3QgY292ZXJzIHRoZSBoYW5kbGluZyBvZiBvYmplY3RzIHdoaWNoIG1pZ2h0IGhhdmUgb2xkCisjIG10aW1lcyBpbiB0aGUgZmlsZXN5c3RlbSAoYmVjYXVzZSB0aGV5IHdlcmUgdXNlZCBwcmV2aW91c2x5KQorIyBhbmQgYXJlIGp1c3Qgbm93IGJlY29taW5nIHJlZmVyZW5jZWQgYWdhaW4uCisjCisjIFdlJ3JlIGdvaW5nIHRvIGRvIHR3byB0aGluZ3MgdGhhdCBhcmUgYSBsaXR0bGUgYml0ICJmYWtlIiB0bworIyBoZWxwIG1ha2Ugb3VyIHNpbXVsYXRpb24gZWFzaWVyOgorIworIyAgIDEuIFdlJ2xsIHR1cm4gb2ZmIHJlZmxvZ3MuIFlvdSBjYW4gc3RpbGwgcnVuIGludG8KKyMgICAgICBwcm9ibGVtcyB3aXRoIHJlZmxvZ3Mgb24sIGJ1dCB5b3VyIG9iamVjdHMKKyMgICAgICBkb24ndCBnZXQgcHJ1bmVkIHVudGlsIGJvdGggdGhlIHJlZmxvZyBleHBpcmF0aW9uCisjICAgICAgaGFzIHBhc3NlZCBvbiB0aGVpciByZWZlcmVuY2VzLCBfYW5kXyB0aGV5IGFyZSBvdXQKKyMgICAgICBvZiBwcnVuZSdzIGV4cGlyYXRpb24gcGVyaW9kLiBEcm9wcGluZyByZWZsb2dzCisjICAgICAgbWVhbnMgd2Ugb25seSBoYXZlIHRvIGRlYWwgd2l0aCBvbmUgdmFyaWFibGUgaW4gb3VyIHRlc3RzLAorIyAgICAgIGJ1dCB0aGUgcmVzdWx0cyBnZW5lcmFsaXplLgorIworIyAgIDIuIFdlJ2xsIHVzZSBhIHRlbXBvcmFyeSBpbmRleCBmaWxlIHRvIGNyZWF0ZSBvdXIKKyMgICAgICB3b3Jrcy1pbi1wcm9ncmVzcy4gTW9zdCB3b3JrZmxvd3Mgd291bGQgbWVudGlvbgorIyAgICAgIHJlZmVyZW5jZWQgb2JqZWN0cyBpbiB0aGUgaW5kZXgsIHdoaWNoIHBydW5lIHRha2VzCisjICAgICAgaW50byBhY2NvdW50LiBIb3dldmVyLCBtYW55IG9wZXJhdGlvbnMgZG9uJ3QuIEZvcgorIyAgICAgIGV4YW1wbGUsIGEgcGFydGlhbCBjb21taXQgd2l0aCAiZ2l0IGNvbW1pdCBmb28iCisjICAgICAgd2lsbCB1c2UgYSB0ZW1wb3JhcnkgaW5kZXguIE9yIHRoZXkgbWF5IG5vdCBuZWVkCisjICAgICAgYW4gaW5kZXggYXQgYWxsIChlLmcuLCBjcmVhdGluZyBhIG5ldyBjb21taXQKKyMgICAgICB0byByZWZlciB0byBhbiBleGlzdGluZyB0cmVlKS4KKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2sgcHJ1bmluZyBvZiBkZXBlbmRlbnQgb2JqZWN0cycKKy4gLi90ZXN0LWxpYi5zaAorCisjIFdlIGNhcmUgYWJvdXQgcmVhY2hhYmlsaXR5LCBzbyB3ZSBkbyBub3Qgd2FudCB0byB1c2UKKyMgdGhlIG5vcm1hbCB0ZXN0X2NvbW1pdCwgd2hpY2ggY3JlYXRlcyBleHRyYSB0YWdzLgorYWRkICgpIHsKKwllY2hvICIkMSIgPiIkMSIgJiYKKwlnaXQgYWRkICIkMSIKK30KK2NvbW1pdCAoKSB7CisJdGVzdF90aWNrICYmCisJYWRkICIkMSIgJiYKKwlnaXQgY29tbWl0IC1tICIkMSIKK30KKworbWF5YmVfcmVwYWNrICgpIHsKKwlpZiB0ZXN0IC1uICIkcmVwYWNrIjsgdGhlbgorCQlnaXQgcmVwYWNrIC1hZAorCWZpCit9CisKK2ZvciByZXBhY2sgaW4gJycgdHJ1ZTsgZG8KKwl0aXRsZT0ke3JlcGFjazorcmVwYWNrfQorCXRpdGxlPSR7dGl0bGU6LWxvb3NlfQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAibWFrZSByZXBvIGNvbXBsZXRlbHkgZW1wdHkgKCR0aXRsZSkiICcKKwkJcm0gLXJmIC5naXQgJiYKKwkJZ2l0IGluaXQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJkaXNhYmxlIHJlZmxvZ3MgKCR0aXRsZSkiICcKKwkJZ2l0IGNvbmZpZyBjb3JlLmxvZ2FsbHJlZnVwZGF0ZXMgZmFsc2UgJiYKKwkJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9YWxsIC0tYWxsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgYmFzaWMgaGlzdG9yeSAoJHRpdGxlKSIgJworCQljb21taXQgYmFzZQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSBhbmQgYWJhbmRvbiBzb21lIG9iamVjdHMgKCR0aXRsZSkiICcKKwkJZ2l0IGNoZWNrb3V0IC1iIGV4cGVyaW1lbnQgJiYKKwkJY29tbWl0IGFiYW5kb24gJiYKKwkJbWF5YmVfcmVwYWNrICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGJyYW5jaCAtRCBleHBlcmltZW50CisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic2ltdWxhdGUgdGltZSBwYXNzaW5nICgkdGl0bGUpIiAnCisJCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC04NjQwMCAkKGZpbmQgLmdpdC9vYmplY3RzIC10eXBlIGYpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic3RhcnQgd3JpdGluZyBuZXcgY29tbWl0IHdpdGggb2xkIGJsb2IgKCR0aXRsZSkiICcKKwkJdHJlZT0kKAorCQkJR0lUX0lOREVYX0ZJTEU9aW5kZXgudG1wICYmCisJCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKKwkJCWdpdCByZWFkLXRyZWUgSEVBRCAmJgorCQkJYWRkIHVucmVsYXRlZCAmJgorCQkJYWRkIGFiYW5kb24gJiYKKwkJCWdpdCB3cml0ZS10cmVlCisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJzaW11bHRhbmVvdXMgZ2MgKCR0aXRsZSkiICcKKwkJZ2l0IGdjIC0tcHJ1bmU9MTIuaG91cnMuYWdvCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmluaXNoIHdyaXRpbmcgb3V0IGNvbW1pdCAoJHRpdGxlKSIgJworCQljb21taXQ9JChlY2hvIGZvbyB8IGdpdCBjb21taXQtdHJlZSAtcCBIRUFEICR0cmVlKSAmJgorCQlnaXQgdXBkYXRlLXJlZiBIRUFEICRjb21taXQKKwknCisKKwkjICJhYmFuZG9uIiBibG9iIHNob3VsZCBoYXZlIGJlZW4gcmVzY3VlZCBieSByZWZlcmVuY2UgZnJvbSBuZXcgdHJlZQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlcG9zaXRvcnkgcGFzc2VzIGZzY2sgKCR0aXRsZSkiICcKKwkJZ2l0IGZzY2sKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJhYmFuZG9uIG9iamVjdHMgYWdhaW4gKCR0aXRsZSkiICcKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCQl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCAtODY0MDAgJChmaW5kIC5naXQvb2JqZWN0cyAtdHlwZSBmKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInN0YXJ0IHdyaXRpbmcgbmV3IGNvbW1pdCB3aXRoIHNhbWUgdHJlZSAoJHRpdGxlKSIgJworCQl0cmVlPSQoCisJCQlHSVRfSU5ERVhfRklMRT1pbmRleC50bXAgJiYKKwkJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCQkJZ2l0IHJlYWQtdHJlZSBIRUFEICYmCisJCQlhZGQgYWJhbmRvbiAmJgorCQkJYWRkIHVucmVsYXRlZCAmJgorCQkJZ2l0IHdyaXRlLXRyZWUKKwkJKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNpbXVsdGFuZW91cyBnYyAoJHRpdGxlKSIgJworCQlnaXQgZ2MgLS1wcnVuZT0xMi5ob3Vycy5hZ28KKwknCisKKwkjIHRyZWUgc2hvdWxkIGhhdmUgYmVlbiByZWZyZXNoZWQgYnkgd3JpdGUtdHJlZQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZpbmlzaCB3cml0aW5nIG91dCBjb21taXQgKCR0aXRsZSkiICcKKwkJY29tbWl0PSQoZWNobyBmb28gfCBnaXQgY29tbWl0LXRyZWUgLXAgSEVBRCAkdHJlZSkgJiYKKwkJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkY29tbWl0CisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgY29tcGxhaW4gYWJvdXQgZXhpc3RpbmcgYnJva2VuIGxpbmtzIChjb21taXQpJyAnCisJY2F0ID5icm9rZW4tY29tbWl0IDw8LVxFT0YgJiYKKwl0cmVlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKKwlwYXJlbnQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorCWF1dGhvciB3aGF0ZXZlciA8d2hhdGV2ZXJAZXhhbXBsZS5jb20+IDEyMzQgLTAwMDAKKwljb21taXR0ZXIgd2hhdGV2ZXIgPHdoYXRldmVyQGV4YW1wbGUuY29tPiAxMjM0IC0wMDAwCisKKwlzb21lIG1lc3NhZ2UKKwlFT0YKKwljb21taXQ9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IGJyb2tlbi1jb21taXQpICYmCisJZ2l0IGdjIC1xIDI+c3RkZXJyICYmCisJdmVyYm9zZSBnaXQgY2F0LWZpbGUgLWUgJGNvbW1pdCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGNvbXBsYWluIGFib3V0IGV4aXN0aW5nIGJyb2tlbiBsaW5rcyAodHJlZSknICcKKwljYXQgPmJyb2tlbi10cmVlIDw8LVxFT0YgJiYKKwkxMDA2NDQgYmxvYiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCWZvbworCUVPRgorCXRyZWU9JChnaXQgbWt0cmVlIC0tbWlzc2luZyA8YnJva2VuLXRyZWUpICYmCisJZ2l0IGdjIC1xIDI+c3RkZXJyICYmCisJZ2l0IGNhdC1maWxlIC1lICR0cmVlICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgY29tcGxhaW4gYWJvdXQgZXhpc3RpbmcgYnJva2VuIGxpbmtzICh0YWcpJyAnCisJY2F0ID5icm9rZW4tdGFnIDw8LVxFT0YgJiYKKwlvYmplY3QgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorCXR5cGUgY29tbWl0CisJdGFnIGJyb2tlbgorCXRhZ2dlciB3aGF0ZXZlciA8d2hhdGV2ZXJAZXhhbXBsZS5jb20+IDEyMzQgLTAwMDAKKworCXRoaXMgaXMgYSBicm9rZW4gdGFnCisJRU9GCisJdGFnPSQoZ2l0IGhhc2gtb2JqZWN0IC10IHRhZyAtdyBicm9rZW4tdGFnKSAmJgorCWdpdCBnYyAtcSAyPnN0ZGVyciAmJgorCWdpdCBjYXQtZmlsZSAtZSAkdGFnICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHN0ZGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDY2MDAtdGVzdC1yZWFjaC5zaCBiL3QvdDY2MDAtdGVzdC1yZWFjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NzU1NjRiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjYwMC10ZXN0LXJlYWNoLnNoCkBAIC0wLDAgKzEsNDEwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgY29tbWl0IHJlYWNoYWJpbGl0eSB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgQ29uc3RydWN0IGEgZ3JpZC1saWtlIGNvbW1pdCBncmFwaCB3aXRoIHBvaW50cyAoeCx5KQorIyB3aXRoIDEgPD0geCA8PSAxMCwgMSA8PSB5IDw9IDEwLCB3aGVyZSAoeCx5KSBoYXMKKyMgcGFyZW50cyAoeC0xLCB5KSBhbmQgKHgsIHktMSksIGtlZXBpbmcgaW4gbWluZCB0aGF0CisjIHdlIGRyb3AgYSBwYXJlbnQgaWYgYSBjb29yZGluYXRlIGlzIG5vbnBvc2l0aXZlLgorIworIyAgICAgICAgICAgICAoMTAsMTApCisjICAgICAgICAgICAgLyAgICAgICBcCisjICAgICAgICAgKDEwLDkpICAgICg5LDEwKQorIyAgICAgICAgLyAgICAgXCAgIC8gICAgICBcCisjICAgICgxMCw4KSAgICAoOSw5KSAgICAgICg4LDEwKQorIyAgIC8gICAgIFwgICAgLyAgIFwgICAgICAvICAgIFwKKyMgICAgICAgICAoIGNvbnRpbnVlZC4uLikKKyMgICBcICAgICAvICAgIFwgICAvICAgICAgXCAgICAvCisjICAgICgzLDEpICAgICAoMiwyKSAgICAgICgxLDMpCisjICAgICAgICBcICAgICAvICAgIFwgICAgIC8KKyMgICAgICAgICAoMiwxKSAgICAgICgyLDEpCisjICAgICAgICAgICAgICBcICAgIC8KKyMgICAgICAgICAgICAgICgxLDEpCisjCisjIFdlIHVzZSBicmFuY2ggJ2NvbW1pdC14LXknIHRvIHJlZmVyIHRvICh4LHkpLgorIyBUaGlzIGdyaWQgYWxsb3dzIGludGVyZXN0aW5nIHJlYWNoYWJpbGl0eSBhbmQKKyMgbm9uLXJlYWNoYWJpbGl0eSBxdWVyaWVzOiAoeCx5KSBjYW4gcmVhY2ggKHgnLHknKQorIyBpZiBhbmQgb25seSBpZiB4JyA8PSB4IGFuZCB5JyA8PSB5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMTApCisJZG8KKwkJdGVzdF9jb21taXQgIjEtJGkiICYmCisJCWdpdCBicmFuY2ggLWYgY29tbWl0LTEtJGkgJiYKKwkJZ2l0IHRhZyAtYSAtbSAiMS0kaSIgdGFnLTEtJGkgY29tbWl0LTEtJGkKKwlkb25lICYmCisJZm9yIGogaW4gJCh0ZXN0X3NlcSAxIDkpCisJZG8KKwkJZ2l0IHJlc2V0IC0taGFyZCBjb21taXQtJGotMSAmJgorCQl4PSQoKCRqICsgMSkpICYmCisJCXRlc3RfY29tbWl0ICIkeC0xIiAmJgorCQlnaXQgYnJhbmNoIC1mIGNvbW1pdC0keC0xICYmCisJCWdpdCB0YWcgLWEgLW0gIiR4LTEiIHRhZy0keC0xIGNvbW1pdC0keC0xICYmCisKKwkJZm9yIGkgaW4gJCh0ZXN0X3NlcSAyIDEwKQorCQlkbworCQkJZ2l0IG1lcmdlIGNvbW1pdC0kai0kaSAtbSAiJHgtJGkiICYmCisJCQlnaXQgYnJhbmNoIC1mIGNvbW1pdC0keC0kaSAmJgorCQkJZ2l0IHRhZyAtYSAtbSAiJHgtJGkiIHRhZy0keC0kaSBjb21taXQtJHgtJGkKKwkJZG9uZQorCWRvbmUgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlICYmCisJbXYgLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBoIGNvbW1pdC1ncmFwaC1mdWxsICYmCisJY2htb2QgdSt3IGNvbW1pdC1ncmFwaC1mdWxsICYmCisJZ2l0IHNob3ctcmVmIC1zIGNvbW1pdC01LTUgfCBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tY29tbWl0cyAmJgorCW12IC5naXQvb2JqZWN0cy9pbmZvL2NvbW1pdC1ncmFwaCBjb21taXQtZ3JhcGgtaGFsZiAmJgorCWNobW9kIHUrdyBjb21taXQtZ3JhcGgtaGFsZiAmJgorCWdpdCBjb25maWcgY29yZS5jb21taXRHcmFwaCB0cnVlCisnCisKK3J1bl90aHJlZV9tb2RlcyAoKSB7CisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yZiAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGggJiYKKwkiJEAiIDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWNwIGNvbW1pdC1ncmFwaC1mdWxsIC5naXQvb2JqZWN0cy9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCSIkQCIgPGlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJY3AgY29tbWl0LWdyYXBoLWhhbGYgLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBoICYmCisJIiRAIiA8aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF90aHJlZV9tb2RlcyAoKSB7CisJcnVuX3RocmVlX21vZGVzIHRlc3QtdG9vbCByZWFjaCAiJEAiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZl9uZXdlcjptaXNzJyAnCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJQTpjb21taXQtNS03CisJQjpjb21taXQtNC05CisJRU9GCisJZWNobyAicmVmX25ld2VyKEEsQik6MCIgPmV4cGVjdCAmJgorCXRlc3RfdGhyZWVfbW9kZXMgcmVmX25ld2VyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZl9uZXdlcjpoaXQnICcKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlBOmNvbW1pdC01LTcKKwlCOmNvbW1pdC0yLTMKKwlFT0YKKwllY2hvICJyZWZfbmV3ZXIoQSxCKToxIiA+ZXhwZWN0ICYmCisJdGVzdF90aHJlZV9tb2RlcyByZWZfbmV3ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5fbWVyZ2VfYmFzZXM6aGl0JyAnCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJQTpjb21taXQtNS03CisJQjpjb21taXQtOC04CisJRU9GCisJZWNobyAiaW5fbWVyZ2VfYmFzZXMoQSxCKToxIiA+ZXhwZWN0ICYmCisJdGVzdF90aHJlZV9tb2RlcyBpbl9tZXJnZV9iYXNlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbl9tZXJnZV9iYXNlczptaXNzJyAnCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJQTpjb21taXQtNi04CisJQjpjb21taXQtNS05CisJRU9GCisJZWNobyAiaW5fbWVyZ2VfYmFzZXMoQSxCKTowIiA+ZXhwZWN0ICYmCisJdGVzdF90aHJlZV9tb2RlcyBpbl9tZXJnZV9iYXNlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpc19kZXNjZW5kYW50X29mOmhpdCcgJworCWNhdCA+aW5wdXQgPDwtXEVPRiAmJgorCUE6Y29tbWl0LTUtNworCVg6Y29tbWl0LTQtOAorCVg6Y29tbWl0LTYtNgorCVg6Y29tbWl0LTEtMQorCUVPRgorCWVjaG8gImlzX2Rlc2NlbmRhbnRfb2YoQSxYKToxIiA+ZXhwZWN0ICYmCisJdGVzdF90aHJlZV9tb2RlcyBpc19kZXNjZW5kYW50X29mCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzX2Rlc2NlbmRhbnRfb2Y6bWlzcycgJworCWNhdCA+aW5wdXQgPDwtXEVPRiAmJgorCUE6Y29tbWl0LTYtOAorCVg6Y29tbWl0LTUtOQorCVg6Y29tbWl0LTQtMTAKKwlYOmNvbW1pdC03LTYKKwlFT0YKKwllY2hvICJpc19kZXNjZW5kYW50X29mKEEsWCk6MCIgPmV4cGVjdCAmJgorCXRlc3RfdGhyZWVfbW9kZXMgaXNfZGVzY2VuZGFudF9vZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXRfbWVyZ2VfYmFzZXNfbWFueScgJworCWNhdCA+aW5wdXQgPDwtXEVPRiAmJgorCUE6Y29tbWl0LTUtNworCVg6Y29tbWl0LTQtOAorCVg6Y29tbWl0LTYtNgorCVg6Y29tbWl0LTgtMworCUVPRgorCXsKKwkJZWNobyAiZ2V0X21lcmdlX2Jhc2VzX21hbnkoQSxYKToiICYmCisJCWdpdCByZXYtcGFyc2UgY29tbWl0LTUtNiBcCisJCQkgICAgICBjb21taXQtNC03IHwgc29ydAorCX0gPmV4cGVjdCAmJgorCXRlc3RfdGhyZWVfbW9kZXMgZ2V0X21lcmdlX2Jhc2VzX21hbnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVkdWNlX2hlYWRzJyAnCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJWDpjb21taXQtMS0xMAorCVg6Y29tbWl0LTItOAorCVg6Y29tbWl0LTMtNgorCVg6Y29tbWl0LTQtNAorCVg6Y29tbWl0LTEtNworCVg6Y29tbWl0LTItNQorCVg6Y29tbWl0LTMtMworCVg6Y29tbWl0LTUtMQorCUVPRgorCXsKKwkJZWNobyAicmVkdWNlX2hlYWRzKFgpOiIgJiYKKwkJZ2l0IHJldi1wYXJzZSBjb21taXQtNS0xIFwKKwkJCSAgICAgIGNvbW1pdC00LTQgXAorCQkJICAgICAgY29tbWl0LTMtNiBcCisJCQkgICAgICBjb21taXQtMi04IFwKKwkJCSAgICAgIGNvbW1pdC0xLTEwIHwgc29ydAorCX0gPmV4cGVjdCAmJgorCXRlc3RfdGhyZWVfbW9kZXMgcmVkdWNlX2hlYWRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nhbl9hbGxfZnJvbV9yZWFjaDpoaXQnICcKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlYOmNvbW1pdC0yLTEwCisJWDpjb21taXQtMy05CisJWDpjb21taXQtNC04CisJWDpjb21taXQtNS03CisJWDpjb21taXQtNi02CisJWDpjb21taXQtNy01CisJWDpjb21taXQtOC00CisJWDpjb21taXQtOS0zCisJWTpjb21taXQtMS05CisJWTpjb21taXQtMi04CisJWTpjb21taXQtMy03CisJWTpjb21taXQtNC02CisJWTpjb21taXQtNS01CisJWTpjb21taXQtNi00CisJWTpjb21taXQtNy0zCisJWTpjb21taXQtOC0xCisJRU9GCisJZWNobyAiY2FuX2FsbF9mcm9tX3JlYWNoKFgsWSk6MSIgPmV4cGVjdCAmJgorCXRlc3RfdGhyZWVfbW9kZXMgY2FuX2FsbF9mcm9tX3JlYWNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nhbl9hbGxfZnJvbV9yZWFjaDptaXNzJyAnCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJWDpjb21taXQtMi0xMAorCVg6Y29tbWl0LTMtOQorCVg6Y29tbWl0LTQtOAorCVg6Y29tbWl0LTUtNworCVg6Y29tbWl0LTYtNgorCVg6Y29tbWl0LTctNQorCVg6Y29tbWl0LTgtNAorCVg6Y29tbWl0LTktMworCVk6Y29tbWl0LTEtOQorCVk6Y29tbWl0LTItOAorCVk6Y29tbWl0LTMtNworCVk6Y29tbWl0LTQtNgorCVk6Y29tbWl0LTUtNQorCVk6Y29tbWl0LTYtNAorCVk6Y29tbWl0LTgtNQorCUVPRgorCWVjaG8gImNhbl9hbGxfZnJvbV9yZWFjaChYLFkpOjAiID5leHBlY3QgJiYKKwl0ZXN0X3RocmVlX21vZGVzIGNhbl9hbGxfZnJvbV9yZWFjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5fYWxsX2Zyb21fcmVhY2hfd2l0aF9mbGFnOiB0YWdzIGNhc2UnICcKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlYOnRhZy0yLTEwCisJWDp0YWctMy05CisJWDp0YWctNC04CisJWDpjb21taXQtNS03CisJWDpjb21taXQtNi02CisJWDpjb21taXQtNy01CisJWDpjb21taXQtOC00CisJWDpjb21taXQtOS0zCisJWTp0YWctMS05CisJWTp0YWctMi04CisJWTp0YWctMy03CisJWTpjb21taXQtNC02CisJWTpjb21taXQtNS01CisJWTpjb21taXQtNi00CisJWTpjb21taXQtNy0zCisJWTpjb21taXQtOC0xCisJRU9GCisJZWNobyAiY2FuX2FsbF9mcm9tX3JlYWNoX3dpdGhfZmxhZyhYLF8sXywwLDApOjEiID5leHBlY3QgJiYKKwl0ZXN0X3RocmVlX21vZGVzIGNhbl9hbGxfZnJvbV9yZWFjaF93aXRoX2ZsYWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0X2NvbnRhaW5zOmhpdCcgJworCWNhdCA+aW5wdXQgPDwtXEVPRiAmJgorCUE6Y29tbWl0LTctNworCVg6Y29tbWl0LTItMTAKKwlYOmNvbW1pdC0zLTkKKwlYOmNvbW1pdC00LTgKKwlYOmNvbW1pdC01LTcKKwlYOmNvbW1pdC02LTYKKwlYOmNvbW1pdC03LTUKKwlYOmNvbW1pdC04LTQKKwlYOmNvbW1pdC05LTMKKwlFT0YKKwllY2hvICJjb21taXRfY29udGFpbnMoXyxBLFgsXyk6MSIgPmV4cGVjdCAmJgorCXRlc3RfdGhyZWVfbW9kZXMgY29tbWl0X2NvbnRhaW5zICYmCisJdGVzdF90aHJlZV9tb2RlcyBjb21taXRfY29udGFpbnMgLS10YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0X2NvbnRhaW5zOm1pc3MnICcKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlBOmNvbW1pdC02LTUKKwlYOmNvbW1pdC0yLTEwCisJWDpjb21taXQtMy05CisJWDpjb21taXQtNC04CisJWDpjb21taXQtNS03CisJWDpjb21taXQtNi02CisJWDpjb21taXQtNy01CisJWDpjb21taXQtOC00CisJWDpjb21taXQtOS0zCisJRU9GCisJZWNobyAiY29tbWl0X2NvbnRhaW5zKF8sQSxYLF8pOjAiID5leHBlY3QgJiYKKwl0ZXN0X3RocmVlX21vZGVzIGNvbW1pdF9jb250YWlucyAmJgorCXRlc3RfdGhyZWVfbW9kZXMgY29tbWl0X2NvbnRhaW5zIC0tdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0OiBiYXNpYyB0b3BvLW9yZGVyJyAnCisJZ2l0IHJldi1wYXJzZSBcCisJCWNvbW1pdC02LTYgY29tbWl0LTUtNiBjb21taXQtNC02IGNvbW1pdC0zLTYgY29tbWl0LTItNiBjb21taXQtMS02IFwKKwkJY29tbWl0LTYtNSBjb21taXQtNS01IGNvbW1pdC00LTUgY29tbWl0LTMtNSBjb21taXQtMi01IGNvbW1pdC0xLTUgXAorCQljb21taXQtNi00IGNvbW1pdC01LTQgY29tbWl0LTQtNCBjb21taXQtMy00IGNvbW1pdC0yLTQgY29tbWl0LTEtNCBcCisJCWNvbW1pdC02LTMgY29tbWl0LTUtMyBjb21taXQtNC0zIGNvbW1pdC0zLTMgY29tbWl0LTItMyBjb21taXQtMS0zIFwKKwkJY29tbWl0LTYtMiBjb21taXQtNS0yIGNvbW1pdC00LTIgY29tbWl0LTMtMiBjb21taXQtMi0yIGNvbW1pdC0xLTIgXAorCQljb21taXQtNi0xIGNvbW1pdC01LTEgY29tbWl0LTQtMSBjb21taXQtMy0xIGNvbW1pdC0yLTEgY29tbWl0LTEtMSBcCisJPmV4cGVjdCAmJgorCXJ1bl90aHJlZV9tb2RlcyBnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGNvbW1pdC02LTYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Q6IGZpcnN0LXBhcmVudCB0b3BvLW9yZGVyJyAnCisJZ2l0IHJldi1wYXJzZSBcCisJCWNvbW1pdC02LTYgXAorCQljb21taXQtNi01IFwKKwkJY29tbWl0LTYtNCBcCisJCWNvbW1pdC02LTMgXAorCQljb21taXQtNi0yIFwKKwkJY29tbWl0LTYtMSBjb21taXQtNS0xIGNvbW1pdC00LTEgY29tbWl0LTMtMSBjb21taXQtMi0xIGNvbW1pdC0xLTEgXAorCT5leHBlY3QgJiYKKwlydW5fdGhyZWVfbW9kZXMgZ2l0IHJldi1saXN0IC0tZmlyc3QtcGFyZW50IC0tdG9wby1vcmRlciBjb21taXQtNi02CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0OiByYW5nZSB0b3BvLW9yZGVyJyAnCisJZ2l0IHJldi1wYXJzZSBcCisJCWNvbW1pdC02LTYgY29tbWl0LTUtNiBjb21taXQtNC02IGNvbW1pdC0zLTYgY29tbWl0LTItNiBjb21taXQtMS02IFwKKwkJY29tbWl0LTYtNSBjb21taXQtNS01IGNvbW1pdC00LTUgY29tbWl0LTMtNSBjb21taXQtMi01IGNvbW1pdC0xLTUgXAorCQljb21taXQtNi00IGNvbW1pdC01LTQgY29tbWl0LTQtNCBjb21taXQtMy00IGNvbW1pdC0yLTQgY29tbWl0LTEtNCBcCisJCWNvbW1pdC02LTMgY29tbWl0LTUtMyBjb21taXQtNC0zIFwKKwkJY29tbWl0LTYtMiBjb21taXQtNS0yIGNvbW1pdC00LTIgXAorCQljb21taXQtNi0xIGNvbW1pdC01LTEgY29tbWl0LTQtMSBcCisJPmV4cGVjdCAmJgorCXJ1bl90aHJlZV9tb2RlcyBnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGNvbW1pdC0zLTMuLmNvbW1pdC02LTYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Q6IHJhbmdlIHRvcG8tb3JkZXInICcKKwlnaXQgcmV2LXBhcnNlIFwKKwkJY29tbWl0LTYtNiBjb21taXQtNS02IGNvbW1pdC00LTYgXAorCQljb21taXQtNi01IGNvbW1pdC01LTUgY29tbWl0LTQtNSBcCisJCWNvbW1pdC02LTQgY29tbWl0LTUtNCBjb21taXQtNC00IFwKKwkJY29tbWl0LTYtMyBjb21taXQtNS0zIGNvbW1pdC00LTMgXAorCQljb21taXQtNi0yIGNvbW1pdC01LTIgY29tbWl0LTQtMiBcCisJCWNvbW1pdC02LTEgY29tbWl0LTUtMSBjb21taXQtNC0xIFwKKwk+ZXhwZWN0ICYmCisJcnVuX3RocmVlX21vZGVzIGdpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgY29tbWl0LTMtOC4uY29tbWl0LTYtNgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdDogZmlyc3QtcGFyZW50IHJhbmdlIHRvcG8tb3JkZXInICcKKwlnaXQgcmV2LXBhcnNlIFwKKwkJY29tbWl0LTYtNiBcCisJCWNvbW1pdC02LTUgXAorCQljb21taXQtNi00IFwKKwkJY29tbWl0LTYtMyBcCisJCWNvbW1pdC02LTIgXAorCQljb21taXQtNi0xIGNvbW1pdC01LTEgY29tbWl0LTQtMSBcCisJPmV4cGVjdCAmJgorCXJ1bl90aHJlZV9tb2RlcyBnaXQgcmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS10b3BvLW9yZGVyIGNvbW1pdC0zLTguLmNvbW1pdC02LTYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Q6IGFuY2VzdHJ5LXBhdGggdG9wby1vcmRlcicgJworCWdpdCByZXYtcGFyc2UgXAorCQljb21taXQtNi02IGNvbW1pdC01LTYgY29tbWl0LTQtNiBjb21taXQtMy02IFwKKwkJY29tbWl0LTYtNSBjb21taXQtNS01IGNvbW1pdC00LTUgY29tbWl0LTMtNSBcCisJCWNvbW1pdC02LTQgY29tbWl0LTUtNCBjb21taXQtNC00IGNvbW1pdC0zLTQgXAorCQljb21taXQtNi0zIGNvbW1pdC01LTMgY29tbWl0LTQtMyBcCisJPmV4cGVjdCAmJgorCXJ1bl90aHJlZV9tb2RlcyBnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIC0tYW5jZXN0cnktcGF0aCBjb21taXQtMy0zLi5jb21taXQtNi02CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0OiBzeW1tZXRyaWMgZGlmZmVyZW5jZSB0b3BvLW9yZGVyJyAnCisJZ2l0IHJldi1wYXJzZSBcCisJCWNvbW1pdC02LTYgY29tbWl0LTUtNiBjb21taXQtNC02IFwKKwkJY29tbWl0LTYtNSBjb21taXQtNS01IGNvbW1pdC00LTUgXAorCQljb21taXQtNi00IGNvbW1pdC01LTQgY29tbWl0LTQtNCBcCisJCWNvbW1pdC02LTMgY29tbWl0LTUtMyBjb21taXQtNC0zIFwKKwkJY29tbWl0LTYtMiBjb21taXQtNS0yIGNvbW1pdC00LTIgXAorCQljb21taXQtNi0xIGNvbW1pdC01LTEgY29tbWl0LTQtMSBcCisJCWNvbW1pdC0zLTggY29tbWl0LTItOCBjb21taXQtMS04IFwKKwkJY29tbWl0LTMtNyBjb21taXQtMi03IGNvbW1pdC0xLTcgXAorCT5leHBlY3QgJiYKKwlydW5fdGhyZWVfbW9kZXMgZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciBjb21taXQtMy04Li4uY29tbWl0LTYtNgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXRfcmVhY2hhYmxlX3N1YnNldDphbGwnICcKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlYOmNvbW1pdC05LTEKKwlYOmNvbW1pdC04LTMKKwlYOmNvbW1pdC03LTUKKwlYOmNvbW1pdC02LTYKKwlYOmNvbW1pdC0xLTcKKwlZOmNvbW1pdC0zLTMKKwlZOmNvbW1pdC0xLTcKKwlZOmNvbW1pdC01LTYKKwlFT0YKKwkoCisJCWVjaG8gImdldF9yZWFjaGFibGVfc3Vic2V0KFgsWSkiICYmCisJCWdpdCByZXYtcGFyc2UgY29tbWl0LTMtMyBcCisJCQkgICAgICBjb21taXQtMS03IFwKKwkJCSAgICAgIGNvbW1pdC01LTYgfCBzb3J0CisJKSA+ZXhwZWN0ICYmCisJdGVzdF90aHJlZV9tb2RlcyBnZXRfcmVhY2hhYmxlX3N1YnNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXRfcmVhY2hhYmxlX3N1YnNldDpzb21lJyAnCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJWDpjb21taXQtOS0xCisJWDpjb21taXQtOC0zCisJWDpjb21taXQtNy01CisJWDpjb21taXQtMS03CisJWTpjb21taXQtMy0zCisJWTpjb21taXQtMS03CisJWTpjb21taXQtNS02CisJRU9GCisJKAorCQllY2hvICJnZXRfcmVhY2hhYmxlX3N1YnNldChYLFkpIiAmJgorCQlnaXQgcmV2LXBhcnNlIGNvbW1pdC0zLTMgXAorCQkJICAgICAgY29tbWl0LTEtNyB8IHNvcnQKKwkpID5leHBlY3QgJiYKKwl0ZXN0X3RocmVlX21vZGVzIGdldF9yZWFjaGFibGVfc3Vic2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldF9yZWFjaGFibGVfc3Vic2V0Om5vbmUnICcKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlYOmNvbW1pdC05LTEKKwlYOmNvbW1pdC04LTMKKwlYOmNvbW1pdC03LTUKKwlYOmNvbW1pdC0xLTcKKwlZOmNvbW1pdC05LTMKKwlZOmNvbW1pdC03LTYKKwlZOmNvbW1pdC0yLTgKKwlFT0YKKwllY2hvICJnZXRfcmVhY2hhYmxlX3N1YnNldChYLFkpIiA+ZXhwZWN0ICYmCisJdGVzdF90aHJlZV9tb2RlcyBnZXRfcmVhY2hhYmxlX3N1YnNldAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDEtbXYuc2ggYi90L3Q3MDAxLW12LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM2YjUwZDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDAxLW12LnNoCkBAIC0wLDAgKzEsNTIzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG12IGluIHN1YmRpcnMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgcmVmZXJlbmNlIHRyZWUnIFwKKyAgICAnbWtkaXIgcGF0aDAgcGF0aDEgJiYKKyAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyBwYXRoMC9DT1BZSU5HICYmCisgICAgIGdpdCBhZGQgcGF0aDAvQ09QWUlORyAmJgorICAgICBnaXQgY29tbWl0IC1tIGFkZCAtYScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ21vdmluZyB0aGUgZmlsZSBvdXQgb2Ygc3ViZGlyZWN0b3J5JyBcCisgICAgJ2NkIHBhdGgwICYmIGdpdCBtdiBDT1BZSU5HIC4uL3BhdGgxL0NPUFlJTkcnCisKKyMgaW4gcGF0aDAgY3VycmVudGx5Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29tbWl0aW5nIHRoZSBjaGFuZ2UnIFwKKyAgICAnY2QgLi4gJiYgZ2l0IGNvbW1pdCAtbSBtb3ZlLW91dCAtYScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIHRoZSBjb21taXQnIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAtciAtTSAtLW5hbWUtc3RhdHVzICBIRUFEXiBIRUFEID5hY3R1YWwgJiYKKyAgICBncmVwICJeUjEwMC4uKnBhdGgwL0NPUFlJTkcuLipwYXRoMS9DT1BZSU5HIiBhY3R1YWwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdtb3ZpbmcgdGhlIGZpbGUgYmFjayBpbnRvIHN1YmRpcmVjdG9yeScgXAorICAgICdjZCBwYXRoMCAmJiBnaXQgbXYgLi4vcGF0aDEvQ09QWUlORyBDT1BZSU5HJworCisjIGluIHBhdGgwIGN1cnJlbnRseQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvbW1pdGluZyB0aGUgY2hhbmdlJyBcCisgICAgJ2NkIC4uICYmIGdpdCBjb21taXQgLW0gbW92ZS1pbiAtYScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIHRoZSBjb21taXQnIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAtciAtTSAtLW5hbWUtc3RhdHVzICBIRUFEXiBIRUFEID5hY3R1YWwgJiYKKyAgICBncmVwICJeUjEwMC4uKnBhdGgxL0NPUFlJTkcuLipwYXRoMC9DT1BZSU5HIiBhY3R1YWwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdtdiAtLWRyeS1ydW4gZG9lcyBub3QgbW92ZSBmaWxlJyBcCisgICAgJ2dpdCBtdiAtbiBwYXRoMC9DT1BZSU5HIE1PVkVEICYmCisgICAgIHRlc3QgLWYgcGF0aDAvQ09QWUlORyAmJgorICAgICB0ZXN0ICEgLWYgTU9WRUQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyAtayBvbiBub24tZXhpc3RpbmcgZmlsZScgXAorICAgICdnaXQgbXYgLWsgaWRvbnRleGlzdCBwYXRoMCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIC1rIG9uIHVudHJhY2tlZCBmaWxlJyBcCisgICAgJ3RvdWNoIHVudHJhY2tlZDEgJiYKKyAgICAgZ2l0IG12IC1rIHVudHJhY2tlZDEgcGF0aDAgJiYKKyAgICAgdGVzdCAtZiB1bnRyYWNrZWQxICYmCisgICAgIHRlc3QgISAtZiBwYXRoMC91bnRyYWNrZWQxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgLWsgb24gbXVsdGlwbGUgdW50cmFja2VkIGZpbGVzJyBcCisgICAgJ3RvdWNoIHVudHJhY2tlZDIgJiYKKyAgICAgZ2l0IG12IC1rIHVudHJhY2tlZDEgdW50cmFja2VkMiBwYXRoMCAmJgorICAgICB0ZXN0IC1mIHVudHJhY2tlZDEgJiYKKyAgICAgdGVzdCAtZiB1bnRyYWNrZWQyICYmCisgICAgIHRlc3QgISAtZiBwYXRoMC91bnRyYWNrZWQxICYmCisgICAgIHRlc3QgISAtZiBwYXRoMC91bnRyYWNrZWQyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgLWYgb24gdW50cmFja2VkIGZpbGUgd2l0aCBleGlzdGluZyB0YXJnZXQnIFwKKyAgICAndG91Y2ggcGF0aDAvdW50cmFja2VkMSAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgbXYgLWYgdW50cmFja2VkMSBwYXRoMCAmJgorICAgICB0ZXN0ICEgLWYgLmdpdC9pbmRleC5sb2NrICYmCisgICAgIHRlc3QgLWYgdW50cmFja2VkMSAmJgorICAgICB0ZXN0IC1mIHBhdGgwL3VudHJhY2tlZDEnCisKKyMgY2xlYW4gdXAgdGhlIG1lc3MgaW4gY2FzZSBiYWQgdGhpbmdzIGhhcHBlbgorcm0gLWYgaWRvbnRleGlzdCB1bnRyYWNrZWQxIHVudHJhY2tlZDIgXAorICAgICBwYXRoMC9pZG9udGV4aXN0IHBhdGgwL3VudHJhY2tlZDEgcGF0aDAvdW50cmFja2VkMiBcCisgICAgIC5naXQvaW5kZXgubG9jaworcm1kaXIgcGF0aDEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ21vdmluZyB0byBhYnNlbnQgdGFyZ2V0IHdpdGggdHJhaWxpbmcgc2xhc2gnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IG12IHBhdGgwL0NPUFlJTkcgbm8tc3VjaC1kaXIvICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBtdiBwYXRoMC9DT1BZSU5HIG5vLXN1Y2gtZGlyLy8gJiYKKyAgICAgZ2l0IG12IHBhdGgwLyBuby1zdWNoLWRpci8gJiYKKyAgICAgdGVzdF9wYXRoX2lzX2RpciBuby1zdWNoLWRpcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NsZWFuIHVwJyBcCisgICAgJ2dpdCByZXNldCAtLWhhcmQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdtb3ZpbmcgdG8gZXhpc3RpbmcgdW50cmFja2VkIHRhcmdldCB3aXRoIHRyYWlsaW5nIHNsYXNoJyBcCisgICAgJ21rZGlyIHBhdGgxICYmCisgICAgIGdpdCBtdiBwYXRoMC8gcGF0aDEvICYmCisgICAgIHRlc3RfcGF0aF9pc19kaXIgcGF0aDEvcGF0aDAvJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbW92aW5nIHRvIGV4aXN0aW5nIHRyYWNrZWQgdGFyZ2V0IHdpdGggdHJhaWxpbmcgc2xhc2gnIFwKKyAgICAnbWtkaXIgcGF0aDIgJiYKKyAgICAgPnBhdGgyL2ZpbGUgJiYgZ2l0IGFkZCBwYXRoMi9maWxlICYmCisgICAgIGdpdCBtdiBwYXRoMS9wYXRoMC8gcGF0aDIvICYmCisgICAgIHRlc3RfcGF0aF9pc19kaXIgcGF0aDIvcGF0aDAvJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2xlYW4gdXAnIFwKKyAgICAnZ2l0IHJlc2V0IC0taGFyZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FkZGluZyBhbm90aGVyIGZpbGUnIFwKKyAgICAnY3AgIiRURVNUX0RJUkVDVE9SWSIvLi4vUkVBRE1FLm1kIHBhdGgwL1JFQURNRSAmJgorICAgICBnaXQgYWRkIHBhdGgwL1JFQURNRSAmJgorICAgICBnaXQgY29tbWl0IC1tIGFkZDIgLWEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdtb3Zpbmcgd2hvbGUgc3ViZGlyZWN0b3J5JyBcCisgICAgJ2dpdCBtdiBwYXRoMCBwYXRoMicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvbW1pdGluZyB0aGUgY2hhbmdlJyBcCisgICAgJ2dpdCBjb21taXQgLW0gZGlyLW1vdmUgLWEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyB0aGUgY29tbWl0JyBcCisgICAgJ2dpdCBkaWZmLXRyZWUgLXIgLU0gLS1uYW1lLXN0YXR1cyAgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisgICAgIGdyZXAgIl5SMTAwLi4qcGF0aDAvQ09QWUlORy4uKnBhdGgyL0NPUFlJTkciIGFjdHVhbCAmJgorICAgICBncmVwICJeUjEwMC4uKnBhdGgwL1JFQURNRS4uKnBhdGgyL1JFQURNRSIgYWN0dWFsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc3VjY2VlZCB3aGVuIHNvdXJjZSBpcyBhIHByZWZpeCBvZiBkZXN0aW5hdGlvbicgXAorICAgICdnaXQgbXYgcGF0aDIvQ09QWUlORyBwYXRoMi9DT1BZSU5HLXJlbmFtZWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdtb3Zpbmcgd2hvbGUgc3ViZGlyZWN0b3J5IGludG8gc3ViZGlyZWN0b3J5JyBcCisgICAgJ2dpdCBtdiBwYXRoMiBwYXRoMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvbW1pdGluZyB0aGUgY2hhbmdlJyBcCisgICAgJ2dpdCBjb21taXQgLW0gZGlyLW1vdmUgLWEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyB0aGUgY29tbWl0JyBcCisgICAgJ2dpdCBkaWZmLXRyZWUgLXIgLU0gLS1uYW1lLXN0YXR1cyAgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisgICAgIGdyZXAgIl5SMTAwLi4qcGF0aDIvQ09QWUlORy4uKnBhdGgxL3BhdGgyL0NPUFlJTkciIGFjdHVhbCAmJgorICAgICBncmVwICJeUjEwMC4uKnBhdGgyL1JFQURNRS4uKnBhdGgxL3BhdGgyL1JFQURNRSIgYWN0dWFsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZG8gbm90IG1vdmUgZGlyZWN0b3J5IG92ZXIgZXhpc3RpbmcgZGlyZWN0b3J5JyBcCisgICAgJ21rZGlyIHBhdGgwICYmIG1rZGlyIHBhdGgwL3BhdGgyICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBtdiBwYXRoMiBwYXRoMCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ21vdmUgaW50byAiLiInIFwKKyAgICAnZ2l0IG12IHBhdGgxL3BhdGgyLyAuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJNaWNoYWVsIENhc3NhcidzIHRlc3QgY2FzZSIgJworCXJtIC1mciAuZ2l0IHBhcGVycyBwYXJ0QSAmJgorCWdpdCBpbml0ICYmCisJbWtkaXIgLXAgcGFwZXJzL3Vuc29ydGVkIHBhcGVycy9hbGwtcGFwZXJzIHBhcnRBICYmCisJZWNobyBhID4gcGFwZXJzL3Vuc29ydGVkL1RoZXNpcy5wZGYgJiYKKwllY2hvIGIgPiBwYXJ0QS9vdXRsaW5lLnR4dCAmJgorCWVjaG8gYyA+IHBhcGVycy91bnNvcnRlZC9fYW5vdGhlciAmJgorCWdpdCBhZGQgcGFwZXJzIHBhcnRBICYmCisJVDE9JChnaXQgd3JpdGUtdHJlZSkgJiYKKworCWdpdCBtdiBwYXBlcnMvdW5zb3J0ZWQvVGhlc2lzLnBkZiBwYXBlcnMvYWxsLXBhcGVycy9tb28tYmxhaC5wZGYgJiYKKworCVQ9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlnaXQgbHMtdHJlZSAtciAkVCB8IHZlcmJvc2UgZ3JlcCBwYXJ0QS9vdXRsaW5lLnR4dAorJworCitybSAtZnIgcGFwZXJzIHBhcnRBIHBhdGg/CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlNlcmdleSBWbGFzb3YncyB0ZXN0IGNhc2UiICcKKwlybSAtZnIgLmdpdCAmJgorCWdpdCBpbml0ICYmCisJbWtkaXIgYWIgJiYKKwlkYXRlID5hYi5jICYmCisJZGF0ZSA+YWIvZCAmJgorCWdpdCBhZGQgYWIuYyBhYiAmJgorCWdpdCBjb21taXQgLW0gJ2luaXRpYWwnICYmCisJZ2l0IG12IGFiIGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb2x1dGUgcGF0aG5hbWUnICcoCisKKwlybSAtZnIgbWluZSAmJgorCW1rZGlyIG1pbmUgJiYKKwljZCBtaW5lICYmCisJdGVzdF9jcmVhdGVfcmVwbyBvbmUgJiYKKwljZCBvbmUgJiYKKwlta2RpciBzdWIgJiYKKwk+c3ViL2ZpbGUgJiYKKwlnaXQgYWRkIHN1Yi9maWxlICYmCisKKwlnaXQgbXYgc3ViICIkKHB3ZCkvaW4iICYmCisJISB0ZXN0IC1kIHN1YiAmJgorCXRlc3QgLWQgaW4gJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGluL2ZpbGUKKworCispJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYnNvbHV0ZSBwYXRobmFtZSBvdXRzaWRlIHNob3VsZCBmYWlsJyAnKAorCisJcm0gLWZyIG1pbmUgJiYKKwlta2RpciBtaW5lICYmCisJY2QgbWluZSAmJgorCW91dD0kKHB3ZCkgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIG9uZSAmJgorCWNkIG9uZSAmJgorCW1rZGlyIHN1YiAmJgorCT5zdWIvZmlsZSAmJgorCWdpdCBhZGQgc3ViL2ZpbGUgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtdiBzdWIgIiRvdXQvb3V0IiAmJgorCXRlc3QgLWQgc3ViICYmCisJISB0ZXN0IC1kIC4uL2luICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBzdWIvZmlsZQorCispJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbXYgdG8gbW92ZSBtdWx0aXBsZSBzb3VyY2VzIGludG8gYSBkaXJlY3RvcnknICcKKwlybSAtZnIgLmdpdCAmJiBnaXQgaW5pdCAmJgorCW1rZGlyIGRpciBvdGhlciAmJgorCT5kaXIvYS50eHQgJiYKKwk+ZGlyL2IudHh0ICYmCisJZ2l0IGFkZCBkaXIvPy50eHQgJiYKKwlnaXQgbXYgZGlyL2EudHh0IGRpci9iLnR4dCBvdGhlciAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJeyBlY2hvIG90aGVyL2EudHh0OyBlY2hvIG90aGVyL2IudHh0OyB9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtdiBzaG91bGQgbm90IGNoYW5nZSBzaGExIG9mIG1vdmVkIGNhY2hlIGVudHJ5JyAnCisKKwlybSAtZnIgLmdpdCAmJgorCWdpdCBpbml0ICYmCisJZWNobyAxID5kaXJ0eSAmJgorCWdpdCBhZGQgZGlydHkgJiYKKwllbnRyeT0iJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBkaXJ0eSB8IGN1dCAtZiAxKSIgJiYKKwlnaXQgbXYgZGlydHkgZGlydHkyICYmCisJWyAiJGVudHJ5IiA9ICIkKGdpdCBscy1maWxlcyAtLXN0YWdlIGRpcnR5MiB8IGN1dCAtZiAxKSIgXSAmJgorCWVjaG8gMiA+ZGlydHkyICYmCisJZ2l0IG12IGRpcnR5MiBkaXJ0eSAmJgorCVsgIiRlbnRyeSIgPSAiJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBkaXJ0eSB8IGN1dCAtZiAxKSIgXQorCisnCisKK3JtIC1mIGRpcnR5IGRpcnR5MgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbXYgc2hvdWxkIG92ZXJ3cml0ZSBzeW1saW5rIHRvIGEgZmlsZScgJworCisJcm0gLWZyIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCWVjaG8gMSA+bW92ZWQgJiYKKwl0ZXN0X2xuX3NfYWRkIG1vdmVkIHN5bWxpbmsgJiYKKwlnaXQgYWRkIG1vdmVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG12IG1vdmVkIHN5bWxpbmsgJiYKKwlnaXQgbXYgLWYgbW92ZWQgc3ltbGluayAmJgorCSEgdGVzdCAtZSBtb3ZlZCAmJgorCXRlc3QgLWYgc3ltbGluayAmJgorCXRlc3QgIiQoY2F0IHN5bWxpbmspIiA9IDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQKKworJworCitybSAtZiBtb3ZlZCBzeW1saW5rCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtdiBzaG91bGQgb3ZlcndyaXRlIGZpbGUgd2l0aCBhIHN5bWxpbmsnICcKKworCXJtIC1mciAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKwllY2hvIDEgPm1vdmVkICYmCisJdGVzdF9sbl9zX2FkZCBtb3ZlZCBzeW1saW5rICYmCisJZ2l0IGFkZCBtb3ZlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtdiBzeW1saW5rIG1vdmVkICYmCisJZ2l0IG12IC1mIHN5bWxpbmsgbW92ZWQgJiYKKwkhIHRlc3QgLWUgc3ltbGluayAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NoZWNrIG1vdmVkIHN5bWxpbmsnICcKKworCXRlc3QgLWggbW92ZWQKKycKKworcm0gLWYgbW92ZWQgc3ltbGluaworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdWJtb2R1bGUnICcKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi8uIHN1YiAmJgorCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIHN1YiBhbmQgZmlsZSIgJiYKKwlta2RpciAtcCBkZWVwL2RpcmVjdG9yeS9oaWVyYXJjaHkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuLy4gZGVlcC9kaXJlY3RvcnkvaGllcmFyY2h5L3N1YiAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIGFub3RoZXIgc3VibW9kdWxlIiAmJgorCWdpdCBicmFuY2ggc3VibW9kdWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtdiBjYW5ub3QgbW92ZSBhIHN1Ym1vZHVsZSBpbiBhIGZpbGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbXYgc3ViIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG12IG1vdmVzIGEgc3VibW9kdWxlIHdpdGggYSAuZ2l0IGRpcmVjdG9yeSBhbmQgbm8gLmdpdG1vZHVsZXMnICcKKwllbnRyeT0iJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBzdWIgfCBjdXQgLWYgMSkiICYmCisJZ2l0IHJtIC5naXRtb2R1bGVzICYmCisJKAorCQljZCBzdWIgJiYKKwkJcm0gLWYgLmdpdCAmJgorCQljcCAtUiAtUCAtcCAuLi8uZ2l0L21vZHVsZXMvc3ViIC5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT0uIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlCisJKSAmJgorCW1rZGlyIG1vZCAmJgorCWdpdCBtdiBzdWIgbW9kL3N1YiAmJgorCSEgdGVzdCAtZSBzdWIgJiYKKwlbICIkZW50cnkiID0gIiQoZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgbW9kL3N1YiB8IGN1dCAtZiAxKSIgXSAmJgorCSgKKwkJY2QgbW9kL3N1YiAmJgorCQlnaXQgc3RhdHVzCisJKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbXYgbW92ZXMgYSBzdWJtb2R1bGUgd2l0aCBhIC5naXQgZGlyZWN0b3J5IGFuZCAuZ2l0bW9kdWxlcycgJworCXJtIC1yZiBtb2QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwllbnRyeT0iJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBzdWIgfCBjdXQgLWYgMSkiICYmCisJKAorCQljZCBzdWIgJiYKKwkJcm0gLWYgLmdpdCAmJgorCQljcCAtUiAtUCAtcCAuLi8uZ2l0L21vZHVsZXMvc3ViIC5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT0uIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlCisJKSAmJgorCW1rZGlyIG1vZCAmJgorCWdpdCBtdiBzdWIgbW9kL3N1YiAmJgorCSEgdGVzdCAtZSBzdWIgJiYKKwlbICIkZW50cnkiID0gIiQoZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgbW9kL3N1YiB8IGN1dCAtZiAxKSIgXSAmJgorCSgKKwkJY2QgbW9kL3N1YiAmJgorCQlnaXQgc3RhdHVzCisJKSAmJgorCWVjaG8gbW9kL3N1YiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIucGF0aCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtdiBtb3ZlcyBhIHN1Ym1vZHVsZSB3aXRoIGdpdGZpbGUnICcKKwlybSAtcmYgbW9kICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZW50cnk9IiQoZ2l0IGxzLWZpbGVzIC0tc3RhZ2Ugc3ViIHwgY3V0IC1mIDEpIiAmJgorCW1rZGlyIG1vZCAmJgorCSgKKwkJY2QgbW9kICYmCisJCWdpdCBtdiAuLi9zdWIvIC4KKwkpICYmCisJISB0ZXN0IC1lIHN1YiAmJgorCVsgIiRlbnRyeSIgPSAiJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBtb2Qvc3ViIHwgY3V0IC1mIDEpIiBdICYmCisJKAorCQljZCBtb2Qvc3ViICYmCisJCWdpdCBzdGF0dXMKKwkpICYmCisJZWNobyBtb2Qvc3ViID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXYgZG9lcyBub3QgY29tcGxhaW4gd2hlbiBubyAuZ2l0bW9kdWxlcyBmaWxlIGlzIGZvdW5kJyAnCisJcm0gLXJmIG1vZCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCBybSAuZ2l0bW9kdWxlcyAmJgorCWVudHJ5PSIkKGdpdCBscy1maWxlcyAtLXN0YWdlIHN1YiB8IGN1dCAtZiAxKSIgJiYKKwlta2RpciBtb2QgJiYKKwlnaXQgbXYgc3ViIG1vZC9zdWIgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIgJiYKKwkhIHRlc3QgLWUgc3ViICYmCisJWyAiJGVudHJ5IiA9ICIkKGdpdCBscy1maWxlcyAtLXN0YWdlIG1vZC9zdWIgfCBjdXQgLWYgMSkiIF0gJiYKKwkoCisJCWNkIG1vZC9zdWIgJiYKKwkJZ2l0IHN0YXR1cworCSkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXYgd2lsbCBlcnJvciBvdXQgb24gYSBtb2RpZmllZCAuZ2l0bW9kdWxlcyBmaWxlIHVubGVzcyBzdGFnZWQnICcKKwlybSAtcmYgbW9kICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBmb28uYmFyIHRydWUgJiYKKwllbnRyeT0iJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBzdWIgfCBjdXQgLWYgMSkiICYmCisJbWtkaXIgbW9kICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG12IHN1YiBtb2Qvc3ViIDI+YWN0dWFsLmVyciAmJgorCXRlc3QgLXMgYWN0dWFsLmVyciAmJgorCXRlc3QgLWUgc3ViICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAtLSBzdWIgJiYKKwlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJZ2l0IG12IHN1YiBtb2Qvc3ViIDI+YWN0dWFsLmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZXJyICYmCisJISB0ZXN0IC1lIHN1YiAmJgorCVsgIiRlbnRyeSIgPSAiJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBtb2Qvc3ViIHwgY3V0IC1mIDEpIiBdICYmCisJKAorCQljZCBtb2Qvc3ViICYmCisJCWdpdCBzdGF0dXMKKwkpICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ212IGlzc3VlcyBhIHdhcm5pbmcgd2hlbiBzZWN0aW9uIGlzIG5vdCBmb3VuZCBpbiAuZ2l0bW9kdWxlcycgJworCXJtIC1yZiBtb2QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1YiAmJgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwllbnRyeT0iJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBzdWIgfCBjdXQgLWYgMSkiICYmCisJZWNobyAid2FybmluZzogQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPXN1YiIgPmV4cGVjdC5lcnIgJiYKKwlta2RpciBtb2QgJiYKKwlnaXQgbXYgc3ViIG1vZC9zdWIgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVyciAmJgorCSEgdGVzdCAtZSBzdWIgJiYKKwlbICIkZW50cnkiID0gIiQoZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgbW9kL3N1YiB8IGN1dCAtZiAxKSIgXSAmJgorCSgKKwkJY2QgbW9kL3N1YiAmJgorCQlnaXQgc3RhdHVzCisJKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdiAtLWRyeS1ydW4gZG9lcyBub3QgdG91Y2ggdGhlIHN1Ym1vZHVsZSBvciAuZ2l0bW9kdWxlcycgJworCXJtIC1yZiBtb2QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlta2RpciBtb2QgJiYKKwlnaXQgbXYgLW4gc3ViIG1vZC9zdWIgMj5hY3R1YWwuZXJyICYmCisJdGVzdCAtZiBzdWIvLmdpdCAmJgorCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS0gc3ViIC5naXRtb2R1bGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIG91dCBhIGNvbW1pdCBiZWZvcmUgc3VibW9kdWxlIG1vdmVkIG5lZWRzIG1hbnVhbCB1cGRhdGVzJyAnCisJZ2l0IG12IHN1YiBzdWIyICYmCisJZ2l0IGNvbW1pdCAtbSAibW92ZWQgc3ViIHRvIHN1YjIiICYmCisJZ2l0IGNoZWNrb3V0IC1xIEhFQUReIDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiXndhcm5pbmc6IHVuYWJsZSB0byBybWRpciAnXCcnc3ViMidcJyc6IiBhY3R1YWwgJiYKKwlnaXQgc3RhdHVzIC1zIHN1YjIgPmFjdHVhbCAmJgorCWVjaG8gIj8/IHN1YjIvIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkhIHRlc3QgLWYgc3ViLy5naXQgJiYKKwl0ZXN0IC1mIHN1YjIvLmdpdCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJdGVzdCAtZiBzdWIvLmdpdCAmJgorCXJtIC1yZiBzdWIyICYmCisJZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgSEVBRCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAtLSBzdWIgLmdpdG1vZHVsZXMgJiYKKwlnaXQgc3RhdHVzIC1zIHN1YjIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXYgLWsgZG9lcyBub3QgYWNjaWRlbnRhbGx5IGRlc3Ryb3kgc3VibW9kdWxlcycgJworCWdpdCBjaGVja291dCBzdWJtb2R1bGUgJiYKKwlta2RpciBkdW1teSBkZXN0ICYmCisJZ2l0IG12IC1rIGR1bW15IHN1YiBkZXN0ICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+YWN0dWFsICYmCisJZ3JlcCAiXlIgIHN1YiAtPiBkZXN0L3N1YiIgYWN0dWFsICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmluZyBhIHN1Ym1vZHVsZSBpbiBuZXN0ZWQgZGlyZWN0b3JpZXMnICcKKwkoCisJCWNkIGRlZXAgJiYKKwkJZ2l0IG12IGRpcmVjdG9yeSAuLi8gJiYKKwkJIyBnaXQgc3RhdHVzIHdvdWxkIGZhaWwgaWYgdGhlIHVwZGF0ZSBvZiBsaW5raW5nIGdpdCBkaXIgdG8KKwkJIyB3b3JrIGRpciBvZiB0aGUgc3VibW9kdWxlIGZhaWxlZC4KKwkJZ2l0IHN0YXR1cyAmJgorCQlnaXQgY29uZmlnIC1mIC4uLy5naXRtb2R1bGVzIHN1Ym1vZHVsZS5kZWVwL2RpcmVjdG9yeS9oaWVyYXJjaHkvc3ViLnBhdGggPi4uL2FjdHVhbCAmJgorCQllY2hvICJkaXJlY3RvcnkvaGllcmFyY2h5L3N1YiIgPi4uL2V4cGVjdAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmluZyBuZXN0ZWQgc3VibW9kdWxlcycgJworCWdpdCBjb21taXQgLWFtICJjbGVhbnVwIGNvbW1pdCIgJiYKKwlta2RpciBzdWJfbmVzdGVkX25lc3RlZCAmJgorCShjZCBzdWJfbmVzdGVkX25lc3RlZCAmJgorCQl0b3VjaCBuZXN0ZWRfbGV2ZWwyICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgY29tbWl0IC1tICJuZXN0ZWQgbGV2ZWwgMiIKKwkpICYmCisJbWtkaXIgc3ViX25lc3RlZCAmJgorCShjZCBzdWJfbmVzdGVkICYmCisJCXRvdWNoIG5lc3RlZF9sZXZlbDEgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLW0gIm5lc3RlZCBsZXZlbCAxIiAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJfbmVzdGVkX25lc3RlZCAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgbmVzdGVkIGxldmVsIDIiCisJKSAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIC4vc3ViX25lc3RlZCBuZXN0ZWRfbW92ZSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBuZXN0ZWRfbW92ZSIgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgJiYKKwlnaXQgbXYgbmVzdGVkX21vdmUgc3ViX25lc3RlZF9tb3ZlZCAmJgorCWdpdCBzdGF0dXMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDAzLWZpbHRlci1icmFuY2guc2ggYi90L3Q3MDAzLWZpbHRlci1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTIzZGU3ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMDMtZmlsdGVyLWJyYW5jaC5zaApAQCAtMCwwICsxLDUwNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBmaWx0ZXItYnJhbmNoJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLWdwZy5zaCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBBICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSJAMCArMDAwMCIgR0lUX0FVVEhPUl9EQVRFPSJAMCArMDAwMCIgJiYKKwl0ZXN0X2NvbW1pdCAtLW5vdGljayBCICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCBCICYmCisJdGVzdF9jb21taXQgRCAmJgorCW1rZGlyIGRpciAmJgorCXRlc3RfY29tbWl0IGRpci9EICYmCisJdGVzdF9jb21taXQgRSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBDICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaCAmJgorCWdpdCBtZXJnZSBDICYmCisJZ2l0IHRhZyBGICYmCisJdGVzdF9jb21taXQgRyAmJgorCXRlc3RfY29tbWl0IEgKKycKKyMgKiAoSEVBRCwgYnJhbmNoKSBICisjICogRworIyAqICAgTWVyZ2UgY29tbWl0ICdDJyBpbnRvIGJyYW5jaAorIyB8XAorIyB8ICogKG1hc3RlcikgQworIyAqIHwgRQorIyAqIHwgZGlyL0QKKyMgKiB8IEQKKyMgfC8KKyMgKiBCCisjICogQQorCisKK0g9JChnaXQgcmV2LXBhcnNlIEgpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld3JpdGUgaWRlbnRpY2FsbHknICcKKwlnaXQgZmlsdGVyLWJyYW5jaCBicmFuY2gKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3VsdCBpcyByZWFsbHkgaWRlbnRpY2FsJyAnCisJdGVzdCAkSCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlIGJhcmUgcmVwb3NpdG9yeSBpZGVudGljYWxseScgJworCShnaXQgY29uZmlnIGNvcmUuYmFyZSB0cnVlICYmIGNkIC5naXQgJiYKKwkgZ2l0IGZpbHRlci1icmFuY2ggYnJhbmNoID4gZmlsdGVyLW91dHB1dCAyPiYxICYmCisJISBmZ3JlcCBmYXRhbCBmaWx0ZXItb3V0cHV0KQorJworZ2l0IGNvbmZpZyBjb3JlLmJhcmUgZmFsc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3VsdCBpcyByZWFsbHkgaWRlbnRpY2FsJyAnCisJdGVzdCAkSCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCitUUkFTSERJUj0kKHB3ZCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgR0lUX0RJUiB3aGlsZSB1c2luZyAtZCcgJworCW1rZGlyIGRyZXBvICYmCisJKCBjZCBkcmVwbyAmJgorCWdpdCBpbml0ICYmCisJdGVzdF9jb21taXQgZHJlcG8gJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZCAiJFRSQVNIRElSL2Rmb28iIFwKKwkJLS1pbmRleC1maWx0ZXIgImNwIFwiJFRSQVNIRElSXCIvZGZvby9iYWNrdXAtcmVmcyBcIiRUUkFTSERJUlwiIiBcCisJKSAmJgorCWdyZXAgZHJlcG8gIiRUUkFTSERJUi9iYWNrdXAtcmVmcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZS1maWx0ZXIgd29ya3Mgd2l0aCAtZCcgJworCWdpdCBpbml0IGRyZXBvLXRyZWUgJiYKKwkoCisJCWNkIGRyZXBvLXRyZWUgJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBmaWx0ZXItYnJhbmNoIC1kICIkVFJBU0hESVIvZGZvbyIgXAorCQkJLS10cmVlLWZpbHRlciAiZWNobyBjaGFuZ2VkID5vbmUudCIgJiYKKwkJZWNobyBjaGFuZ2VkID5leHBlY3QgJiYKKwkJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRDpvbmUudCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJdGVzdF9jbXAgb25lLnQgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGYWlsIGlmIGNvbW1pdCBmaWx0ZXIgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLWNvbW1pdC1maWx0ZXIgImV4aXQgMSIgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlLCByZW5hbWluZyBhIHNwZWNpZmljIGZpbGUnICcKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXRyZWUtZmlsdGVyICJtdiBELnQgZG9oIHx8IDoiIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0aGF0IHRoZSBmaWxlIHdhcyByZW5hbWVkJyAnCisJdGVzdCBEID0gIiQoZ2l0IHNob3cgSEVBRDpkb2ggLS0pIiAmJgorCSEgdGVzdCAtZiBELnQgJiYKKwl0ZXN0IC1mIGRvaCAmJgorCXRlc3QgRCA9ICIkKGNhdCBkb2gpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlLCByZW5hbWluZyBhIHNwZWNpZmljIGRpcmVjdG9yeScgJworCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tdHJlZS1maWx0ZXIgIm12IGRpciBkaXJvaCB8fCA6IiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdGhhdCB0aGUgZGlyZWN0b3J5IHdhcyByZW5hbWVkJyAnCisJdGVzdCBkaXIvRCA9ICIkKGdpdCBzaG93IEhFQUQ6ZGlyb2gvRC50IC0tKSIgJiYKKwkhIHRlc3QgLWQgZGlyICYmCisJdGVzdCAtZCBkaXJvaCAmJgorCSEgdGVzdCAtZCBkaXJvaC9kaXIgJiYKKwl0ZXN0IC1mIGRpcm9oL0QudCAmJgorCXRlc3QgZGlyL0QgPSAiJChjYXQgZGlyb2gvRC50KSIKKycKKworVj0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9wdWxhdGUgLS1zdGF0ZS1icmFuY2gnICcKKwlnaXQgZmlsdGVyLWJyYW5jaCAtLXN0YXRlLWJyYW5jaCBzdGF0ZSAtZiAtLXRyZWUtZmlsdGVyICJ0b3VjaCBmaWxlIHx8IDoiIEhFQUQKKycKKworVz0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgLS1zdGF0ZS1icmFuY2ggdG8gc2tpcCBhbHJlYWR5IHJld3JpdHRlbiBjb21taXRzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCByZXNldCAtLWhhcmQgJFYgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICRWICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLS1zdGF0ZS1icmFuY2ggc3RhdGUgLWYgLS10cmVlLWZpbHRlciAidG91Y2ggZmlsZSB8fCA6IiBIRUFEICYmCisJdGVzdF9jbXBfcmV2ICRXIEhFQUQKKycKKworZ2l0IHRhZyBvbGREIEhFQUR+NAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3cml0ZSBvbmUgYnJhbmNoLCBrZWVwaW5nIGEgc2lkZSBicmFuY2gnICcKKwlnaXQgYnJhbmNoIG1vZEQgb2xkRCAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tdHJlZS1maWx0ZXIgIm12IEIudCBib2ggfHwgOiIgRC4ubW9kRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21tb24gYW5jZXN0b3IgaXMgc3RpbGwgY29tbW9uICh1bmNoYW5nZWQpJyAnCisJdGVzdCAiJChnaXQgbWVyZ2UtYmFzZSBtb2REIEQpIiA9ICIkKGdpdCByZXYtcGFyc2UgQikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbHRlciBzdWJkaXJlY3Rvcnkgb25seScgJworCW1rZGlyIHN1YmRpciAmJgorCXRvdWNoIHN1YmRpci9uZXcgJiYKKwlnaXQgYWRkIHN1YmRpci9uZXcgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzdWJkaXIiICYmCisJZWNobyBIID4gQS50ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAibm90IHN1YmRpciIgQS50ICYmCisJZWNobyBBID4gc3ViZGlyL25ldyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImFnYWluIHN1YmRpciIgc3ViZGlyL25ldyAmJgorCWdpdCBybSBBLnQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZ2FpbiBub3Qgc3ViZGlyIiAmJgorCWdpdCBicmFuY2ggc3ViICYmCisJZ2l0IGJyYW5jaCBzdWItZWFybGllciBIRUFEfjIgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXN1YmRpcmVjdG9yeS1maWx0ZXIgc3ViZGlyIFwKKwkJcmVmcy9oZWFkcy9zdWIgcmVmcy9oZWFkcy9zdWItZWFybGllcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXJlY3RvcnkgZmlsdGVyIHJlc3VsdCBsb29rcyBva2F5JyAnCisJdGVzdCAyID0gJChnaXQgcmV2LWxpc3Qgc3ViIHwgd2MgLWwpICYmCisJZ2l0IHNob3cgc3ViOm5ldyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93IHN1YjpzdWJkaXIgJiYKKwlnaXQgc2hvdyBzdWItZWFybGllcjpuZXcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyBzdWItZWFybGllcjpzdWJkaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9yZSBzZXR1cCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlta2RpciBzdWJkaXIgJiYKKwllY2hvIEEgPiBzdWJkaXIvbmV3ICYmCisJZ2l0IGFkZCBzdWJkaXIvbmV3ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3ViZGlyIG9uIG1hc3RlciIgc3ViZGlyL25ldyAmJgorCWdpdCBybSBBLnQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZ2FpbiBzdWJkaXIgb24gbWFzdGVyIiAmJgorCWdpdCBtZXJnZSBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIGluZGV4LWZpbHRlciB0byBtb3ZlIGludG8gYSBzdWJkaXJlY3RvcnknICcKKwlnaXQgYnJhbmNoIGRpcmVjdG9yeW1vdmVkICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgLS1pbmRleC1maWx0ZXIgXAorCQkgImdpdCBscy1maWxlcyAtcyB8IHNlZCBcInMtCS0mbmV3c3ViZGlyLy1cIiB8CisJICAgICAgICAgIEdJVF9JTkRFWF9GSUxFPVwkR0lUX0lOREVYX0ZJTEUubmV3IFwKKwkJCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJCSAgbXYgXCJcJEdJVF9JTkRFWF9GSUxFLm5ld1wiIFwiXCRHSVRfSU5ERVhfRklMRVwiIiBkaXJlY3Rvcnltb3ZlZCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgZGlyZWN0b3J5bW92ZWQ6bmV3c3ViZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0b3BzIHdoZW4gbXNnIGZpbHRlciBmYWlscycgJworCW9sZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLW1zZy1maWx0ZXIgZmFsc2UgSEVBRCAmJgorCXRlc3QgJG9sZCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXJtIC1yZiAuZ2l0LXJld3JpdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9yIGluZm9ybWF0aW9uIGlzIHByZXNlcnZlZCcgJworCTogPiBpICYmCisJZ2l0IGFkZCBpICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPSJCIFYgVWlwcyIgZ2l0IGNvbW1pdCAtbSBidnVpcHMgJiYKKwlnaXQgYnJhbmNoIHByZXNlcnZlZC1hdXRob3IgJiYKKwkoc2FuZV91bnNldCBHSVRfQVVUSE9SX05BTUUgJiYKKwkgZ2l0IGZpbHRlci1icmFuY2ggLWYgLS1tc2ctZmlsdGVyICJjYXQ7IFwKKwkJCXRlc3QgXCRHSVRfQ09NTUlUICE9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpIHx8IFwKKwkJCWVjaG8gSGFsbG8iIFwKKwkJcHJlc2VydmVkLWF1dGhvcikgJiYKKwlnaXQgcmV2LWxpc3QgLS1hdXRob3I9IkIgViBVaXBzIiBwcmVzZXJ2ZWQtYXV0aG9yID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZW1vdmUgYSBjZXJ0YWluIGF1dGhvcidzIGNvbW1pdHMiICcKKwllY2hvIGkgPiBpICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpIGkgJiYKKwlnaXQgYnJhbmNoIHJlbW92ZWQtYXV0aG9yICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgLS1jb21taXQtZmlsdGVyICJcCisJCWlmIFsgXCJcJEdJVF9BVVRIT1JfTkFNRVwiID0gXCJCIFYgVWlwc1wiIF07XAorCQl0aGVuXAorCQkJc2tpcF9jb21taXQgXCJcJEBcIjsKKwkJZWxzZVwKKwkJCWdpdCBjb21taXQtdHJlZSBcIlwkQFwiO1wKKwkJZmkiIHJlbW92ZWQtYXV0aG9yICYmCisJY250MT0kKGdpdCByZXYtbGlzdCBtYXN0ZXIgfCB3YyAtbCkgJiYKKwljbnQyPSQoZ2l0IHJldi1saXN0IHJlbW92ZWQtYXV0aG9yIHwgd2MgLWwpICYmCisJdGVzdCAkY250MSAtZXEgJCgoJGNudDIgKyAxKSkgJiYKKwlnaXQgcmV2LWxpc3QgLS1hdXRob3I9IkIgViBVaXBzIiByZW1vdmVkLWF1dGhvciA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZiBvbiBpbnZhbGlkIG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmlsdGVyLWJyYW5jaCAtZiBtYXN0ZXIgeHktcHJvYmxlbSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmaWx0ZXItYnJhbmNoIC1mIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJtYXAiIHdvcmtzIGluIGNvbW1pdCBmaWx0ZXInICcKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLWNvbW1pdC1maWx0ZXIgIlwKKwkJcGFyZW50PVwkKGdpdCByZXYtcGFyc2UgXCRHSVRfQ09NTUlUXikgJiYKKwkJbWFwcGVkPVwkKG1hcCBcJHBhcmVudCkgJiYKKwkJYWN0dWFsPVwkKGVjaG8gXCJcJEBcIiB8IHNlZCBcInMvXi4qLXAgLy9cIikgJiYKKwkJdGVzdCBcJG1hcHBlZCA9IFwkYWN0dWFsICYmCisJCWdpdCBjb21taXQtdHJlZSBcIlwkQFwiOyIgbWFzdGVyfjIuLm1hc3RlciAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05hbWUgbmVlZGluZyBxdW90ZXMnICcKKworCWdpdCBjaGVja291dCAtYiByZXJlcmUgQSAmJgorCW1rZGlyIGZvbyAmJgorCW5hbWU9IuOCjOOCjOOCjCIgJiYKKwk+Zm9vLyRuYW1lICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJBZGRpbmcgYSBmaWxlIiAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC0tdHJlZS1maWx0ZXIgInJtIC1mciBmb28iICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCAiZm9vLyRuYW1lIiAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlcmVyZSkgIT0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEEpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU3ViZGlyZWN0b3J5IGZpbHRlciB3aXRoIGRpc2FwcGVhcmluZyB0cmVlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlta2RpciBmb28gJiYKKwl0b3VjaCBmb28vYmFyICYmCisJZ2l0IGFkZCBmb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJBZGRpbmcgZm9vIiAmJgorCisJZ2l0IHJtIC1yIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlJlbW92aW5nIGZvbyIgJiYKKworCW1rZGlyIGZvbyAmJgorCXRvdWNoIGZvby9iYXIgJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlJlLWFkZGluZyBmb28iICYmCisKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXN1YmRpcmVjdG9yeS1maWx0ZXIgZm9vICYmCisJZ2l0IHJldi1saXN0IG1hc3RlciA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGFnIG5hbWUgZmlsdGVyaW5nIHJldGFpbnMgdGFnIG1lc3NhZ2UnICcKKwlnaXQgdGFnIC1tIGF0YWcgVCAmJgorCWdpdCBjYXQtZmlsZSB0YWcgVCA+IGV4cGVjdCAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tdGFnLW5hbWUtZmlsdGVyIGNhdCAmJgorCWdpdCBjYXQtZmlsZSB0YWcgVCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZmF1eF9ncGdfdGFnPSdvYmplY3QgWFhYWFhYCit0eXBlIGNvbW1pdAordGFnIFMKK3RhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPiAxMjA2MDI2MzM5IC0wNTAwCisKK1RoaXMgaXMgYSBmYXV4IGdwZyBzaWduZWQgdGFnLgorLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KK1ZlcnNpb246IEZhdXhHUEcgdjAuMC4wIChGQVVYL0xpbnV4KQorCitnZHNmb2V3aHh1LzZsMDZmMWt4eXhoS2Raa3JjYmFpT010a0pVQTlJVEFjMW1sYW1oMG9vYXN4a0gxWHdNYllRCithY213WGFXRVQyMEgwR2VBR1ArN3Zvdz0KKz1hZ3BPCistLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0KKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1RhZyBuYW1lIGZpbHRlcmluZyBzdHJpcHMgZ3BnIHNpZ25hdHVyZScgJworCXNoYTE9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJc2hhMXQ9JChlY2hvICIkZmF1eF9ncGdfdGFnIiB8IHNlZCAtZSBzL1hYWFhYWC8kc2hhMS8gfCBnaXQgbWt0YWcpICYmCisJZ2l0IHVwZGF0ZS1yZWYgInJlZnMvdGFncy9TIiAiJHNoYTF0IiAmJgorCWVjaG8gIiRmYXV4X2dwZ190YWciIHwgc2VkIC1lIHMvWFhYWFhYLyRzaGExLyB8IGhlYWQgLW4gNiA+IGV4cGVjdCAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tdGFnLW5hbWUtZmlsdGVyIGNhdCAmJgorCWdpdCBjYXQtZmlsZSB0YWcgUyA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ0ZpbHRlcmluZyByZXRhaW5zIG1lc3NhZ2Ugb2YgZ3BnIHNpZ25lZCBjb21taXQnICcKKwlta2RpciBncGcgJiYKKwl0b3VjaCBncGcvZm9vICYmCisJZ2l0IGFkZCBncGcgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1TIC1tICJBZGRpbmcgZ3BnIiAmJgorCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJXMiID4gZXhwZWN0ICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgLS1tc2ctZmlsdGVyICJjYXQiICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJXMiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUYWcgbmFtZSBmaWx0ZXJpbmcgYWxsb3dzIHNsYXNoZXMgaW4gdGFnIG5hbWVzJyAnCisJZ2l0IHRhZyAtbSB0YWctd2l0aC1zbGFzaCBYLzEgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIFgvMSB8IHNlZCAtZSBzLFgvMSxYLzIsID4gZXhwZWN0ICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgLS10YWctbmFtZS1maWx0ZXIgImVjaG8gWC8yIiAmJgorCWdpdCBjYXQtZmlsZSB0YWcgWC8yID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLS1wcnVuZS1lbXB0eSBjb21wYXJpc29ucycgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiBtYXN0ZXItbm8tYSAmJgorCWdpdCBybSAtcmYgLiAmJgorCXVuc2V0IHRlc3RfdGljayAmJgorCXRlc3RfdGljayAmJgorCUdJVF9DT01NSVRURVJfREFURT0iQDAgKzAwMDAiIEdJVF9BVVRIT1JfREFURT0iQDAgKzAwMDAiICYmCisJdGVzdF9jb21taXQgLS1ub3RpY2sgQiBCLnQgQiBCeCAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gtbm8tYSBCeCAmJgorCXRlc3RfY29tbWl0IEQgRC50IEQgRHggJiYKKwlta2RpciBkaXIgJiYKKwl0ZXN0X2NvbW1pdCBkaXIvRCBkaXIvRC50IGRpci9EIGRpci9EeCAmJgorCXRlc3RfY29tbWl0IEUgRS50IEUgRXggJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyLW5vLWEgJiYKKwl0ZXN0X2NvbW1pdCBDIEMudCBDIEN4ICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaC1uby1hICYmCisJZ2l0IG1lcmdlIEN4IC1tICJNZXJnZSB0YWcgJ1wnJ0MnXCcnIGludG8gYnJhbmNoIiAmJgorCWdpdCB0YWcgRnggJiYKKwl0ZXN0X2NvbW1pdCBHIEcudCBHIEd4ICYmCisJdGVzdF9jb21taXQgSCBILnQgSCBIeCAmJgorCWdpdCBjaGVja291dCBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUHJ1bmUgZW1wdHkgY29tbWl0cycgJworCWdpdCByZXYtbGlzdCBIRUFEID4gZXhwZWN0ICYmCisJdGVzdF9jb21taXQgdG9fcmVtb3ZlICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgLS1pbmRleC1maWx0ZXIgImdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgdG9fcmVtb3ZlLnQiIC0tcHJ1bmUtZW1wdHkgSEVBRCAmJgorCWdpdCByZXYtbGlzdCBIRUFEID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSBlbXB0eSBjb2xsYXBzZWQgbWVyZ2VzJyAnCisJdGVzdF9jb25maWcgbWVyZ2UuZmYgZmFsc2UgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCA+ZXhwZWN0ICYmCisJdGVzdF9jb21taXQgdG9fcmVtb3ZlXzIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJdGVzdF9tZXJnZSBub24tZmYgdG9fcmVtb3ZlXzIgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLWluZGV4LWZpbHRlciAiZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSB0b19yZW1vdmVfMi50IiAtLXBydW5lLWVtcHR5IEhFQUQgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSBlbXB0eSB3b3JrcyBldmVuIHdpdGhvdXQgaW5kZXgvdHJlZSBmaWx0ZXJzJyAnCisJZ2l0IHJldi1saXN0IEhFQUQgPmV4cGVjdCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBlbXB0eSAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tcHJ1bmUtZW1wdHkgSEVBRCAmJgorCWdpdCByZXYtbGlzdCBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcHJ1bmUtZW1wdHkgaXMgYWJsZSB0byBwcnVuZSByb290IGNvbW1pdCcgJworCWdpdCByZXYtbGlzdCBicmFuY2gtbm8tYSA+ZXhwZWN0ICYmCisJZ2l0IGJyYW5jaCB0ZXN0aW5nIEggJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXBydW5lLWVtcHR5IC0taW5kZXgtZmlsdGVyICJnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIEEudCIgdGVzdGluZyAmJgorCWdpdCByZXYtbGlzdCB0ZXN0aW5nID5hY3R1YWwgJiYKKwlnaXQgYnJhbmNoIC1EIHRlc3RpbmcgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcHJ1bmUtZW1wdHkgaXMgYWJsZSB0byBwcnVuZSBlbnRpcmUgYnJhbmNoJyAnCisJZ2l0IGJyYW5jaCBwcnVuZS1lbnRpcmUgQiAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tcHJ1bmUtZW1wdHkgLS1pbmRleC1maWx0ZXIgImdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgQS50IEIudCIgcHJ1bmUtZW50aXJlICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL3BydW5lLWVudGlyZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvcHJ1bmUtZW50aXJlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVtYXAtdG8tYW5jZXN0b3Igd2l0aCBmaWxlbmFtZSBmaWx0ZXJzJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgQSAmJgorCXRlc3RfY29tbWl0IGFkZC1mb28gZm9vIDEgJiYKKwlnaXQgYnJhbmNoIG1vdmVkLWZvbyAmJgorCXRlc3RfY29tbWl0IGFkZC1iYXIgYmFyIGEgJiYKKwlnaXQgYnJhbmNoIGludmFyaWFudCAmJgorCW9yaWdfaW52YXJpYW50PSQoZ2l0IHJldi1wYXJzZSBpbnZhcmlhbnQpICYmCisJZ2l0IGJyYW5jaCBtb3ZlZC1iYXIgJiYKKwl0ZXN0X2NvbW1pdCBjaGFuZ2UtZm9vIGZvbyAyICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgLS1yZW1hcC10by1hbmNlc3RvciBcCisJCW1vdmVkLWZvbyBtb3ZlZC1iYXIgQS4ubWFzdGVyIFwKKwkJLS0gLS0gZm9vICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgbW92ZWQtZm9vKSA9ICQoZ2l0IHJldi1wYXJzZSBtb3ZlZC1iYXIpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgbW92ZWQtZm9vKSA9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXJeKSAmJgorCXRlc3QgJG9yaWdfaW52YXJpYW50ID0gJChnaXQgcmV2LXBhcnNlIGludmFyaWFudCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b21hdGljIHJlbWFwcGluZyB0byBhbmNlc3RvciB3aXRoIGZpbGVuYW1lIGZpbHRlcnMnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBBICYmCisJdGVzdF9jb21taXQgYWRkLWZvbzIgZm9vIDEgJiYKKwlnaXQgYnJhbmNoIG1vdmVkLWZvbzIgJiYKKwl0ZXN0X2NvbW1pdCBhZGQtYmFyMiBiYXIgYSAmJgorCWdpdCBicmFuY2ggaW52YXJpYW50MiAmJgorCW9yaWdfaW52YXJpYW50PSQoZ2l0IHJldi1wYXJzZSBpbnZhcmlhbnQyKSAmJgorCWdpdCBicmFuY2ggbW92ZWQtYmFyMiAmJgorCXRlc3RfY29tbWl0IGNoYW5nZS1mb28yIGZvbyAyICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgXAorCQltb3ZlZC1mb28yIG1vdmVkLWJhcjIgQS4ubWFzdGVyIFwKKwkJLS0gLS0gZm9vICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgbW92ZWQtZm9vMikgPSAkKGdpdCByZXYtcGFyc2UgbW92ZWQtYmFyMikgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtb3ZlZC1mb28yKSA9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXJeKSAmJgorCXRlc3QgJG9yaWdfaW52YXJpYW50ID0gJChnaXQgcmV2LXBhcnNlIGludmFyaWFudDIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN1Ym1vZHVsZScgJworCXJtIC1mciA/KiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKwl0ZXN0X2NvbW1pdCBmaWxlICYmCisJbWtkaXIgc3VibW9kICYmCisJc3VibW9kdXJsPSIkUFdEL3N1Ym1vZCIgJiYKKwkoIGNkIHN1Ym1vZCAmJgorCSAgZ2l0IGluaXQgJiYKKwkgIHRlc3RfY29tbWl0IGZpbGUtaW4tc3VibW9kICkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybCIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCBzdWJtb2R1bGUiICYmCisJdGVzdF9jb21taXQgYWRkLWZpbGUgJiYKKwkoIGNkIHN1Ym1vZCAmJiB0ZXN0X2NvbW1pdCBhZGQtaW4tc3VibW9kdWxlICkgJiYKKwlnaXQgYWRkIHN1Ym1vZCAmJgorCWdpdCBjb21taXQgLW0gImNoYW5nZWQgc3VibW9kdWxlIiAmJgorCWdpdCBicmFuY2ggb3JpZ2luYWwgSEVBRAorJworCitvcmlnX2hlYWQ9JChnaXQgc2hvdy1yZWYgLS1oYXNoIC0taGVhZCBIRUFEKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlIHN1Ym1vZHVsZSB3aXRoIGFub3RoZXIgY29udGVudCcgJworCWdpdCBmaWx0ZXItYnJhbmNoIC0tdHJlZS1maWx0ZXIgInRlc3QgLWQgc3VibW9kICYmIHsKKwkJCQkJIHJtIC1yZiBzdWJtb2QgJiYKKwkJCQkJIGdpdCBybSAtcmYgLS1xdWlldCBzdWJtb2QgJiYKKwkJCQkJIG1rZGlyIHN1Ym1vZCAmJgorCQkJCQkgOiA+IHN1Ym1vZC9maWxlCisJCQkJCSB9IHx8IDoiIEhFQUQgJiYKKwl0ZXN0ICRvcmlnX2hlYWQgIT0gJChnaXQgc2hvdy1yZWYgLS1oYXNoIC0taGVhZCBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBsYWNlIHN1Ym1vZHVsZSByZXZpc2lvbicgJworCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luYWwgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXRyZWUtZmlsdGVyIFwKKwkgICAgImlmIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggLS0gc3VibW9kID4gL2Rldi9udWxsIDI+JjEKKwkgICAgIHRoZW4gZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSBzdWJtb2QKKwkgICAgIGZpIiBIRUFEICYmCisJdGVzdCAkb3JpZ19oZWFkICE9ICQoZ2l0IHNob3ctcmVmIC0taGFzaCAtLWhlYWQgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsdGVyIGNvbW1pdCBtZXNzYWdlIHdpdGhvdXQgdHJhaWxpbmcgbmV3bGluZScgJworCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luYWwgJiYKKwljb21taXQ9JChwcmludGYgIm5vIG5ld2xpbmUiIHwgZ2l0IGNvbW1pdC10cmVlIEhFQURee3RyZWV9KSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbm8tbmV3bGluZSAkY29tbWl0ICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgcmVmcy9oZWFkcy9uby1uZXdsaW5lICYmCisJZWNobyAkY29tbWl0ID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbm8tbmV3bGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlLWZpbHRlciBkZWFscyB3aXRoIG9iamVjdCBuYW1lIHZzIHBhdGhuYW1lIGFtYmlndWl0eScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW5hbCIgJiYKKwlhbWJpZ3VvdXM9JChnaXQgcmV2LWxpc3QgLTEgSEVBRCkgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtLXRyZWUtZmlsdGVyICJtdiBmaWxlLnQgJGFtYmlndW91cyIgSEVBRF4uLiAmJgorCWdpdCBzaG93IEhFQUQ6JGFtYmlndW91cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlIHJlcG9zaXRvcnkgaW5jbHVkaW5nIHJlZnMgdGhhdCBwb2ludCBhdCBub24tY29tbWl0IG9iamVjdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW5hbCIgJiYKKwl0cmVlPSQoZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXBsYWNlIC1kICR0cmVlIiAmJgorCWVjaG8gQSA+bmV3ICYmCisJZ2l0IGFkZCBuZXcgJiYKKwluZXdfdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWdpdCByZXBsYWNlICR0cmVlICRuZXdfdHJlZSAmJgorCWdpdCB0YWcgLWEgLW0gInRhZyB0byBhIHRyZWUiIHRyZWV0YWcgJG5ld190cmVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgLS0gLS1hbGwgPmZpbHRlci1vdXRwdXQgMj4mMSAmJgorCSEgZmdyZXAgZmF0YWwgZmlsdGVyLW91dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDQtdGFnLnNoIGIvdC90NzAwNC10YWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzRiNjM3ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMDQtdGFnLnNoCkBAIC0wLDAgKzEsMjA5NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBDYXJsb3MgUmljYQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgdGFnCisKK1Rlc3RzIGZvciBvcGVyYXRpb25zIHdpdGggdGFncy4nCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItZ3BnLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorCisjIGNyZWF0aW5nIGFuZCBsaXN0aW5nIGxpZ2h0d2VpZ2h0IHRhZ3M6CisKK3RhZ19leGlzdHMgKCkgeworCWdpdCBzaG93LXJlZiAtLXF1aWV0IC0tdmVyaWZ5IHJlZnMvdGFncy8iJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgYWxsIHRhZ3MgaW4gYW4gZW1wdHkgdHJlZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLWwgJiYKKwlnaXQgdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgYWxsIHRhZ3MgaW4gYW4gZW1wdHkgdHJlZSBzaG91bGQgb3V0cHV0IG5vdGhpbmcnICcKKwl0ZXN0ICQoZ2l0IHRhZyAtbCB8IHdjIC1sKSAtZXEgMCAmJgorCXRlc3QgJChnaXQgdGFnIHwgd2MgLWwpIC1lcSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NvcnQgdGFncywgaWdub3JlIGNhc2UnICcKKwkoCisJCWdpdCBpbml0IHNvcnQgJiYKKwkJY2Qgc29ydCAmJgorCQl0ZXN0X2NvbW1pdCBpbml0aWFsICYmCisJCWdpdCB0YWcgdGFnLW9uZSAmJgorCQlnaXQgdGFnIFRBRy10d28gJiYKKwkJZ2l0IHRhZyAtbCA+YWN0dWFsICYmCisJCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlUQUctdHdvCisJCWluaXRpYWwKKwkJdGFnLW9uZQorCQlFT0YKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJCWdpdCB0YWcgLWwgLWkgPmFjdHVhbCAmJgorCQljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJaW5pdGlhbAorCQl0YWctb25lCisJCVRBRy10d28KKwkJRU9GCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9va2luZyBmb3IgYSB0YWcgaW4gYW4gZW1wdHkgdHJlZSBzaG91bGQgZmFpbCcgXAorCSchICh0YWdfZXhpc3RzIG15dGFnKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgYSB0YWcgaW4gYW4gZW1wdHkgdHJlZSBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgbXlub3RhZyAmJgorCSEgdGFnX2V4aXN0cyBteW5vdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIGEgdGFnIGZvciBIRUFEIGluIGFuIGVtcHR5IHRyZWUgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIG15dGFnaGVhZCBIRUFEICYmCisJISB0YWdfZXhpc3RzIG15dGFnaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBhIHRhZyBmb3IgYW4gdW5rbm93biByZXZpc2lvbiBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgbXl0YWdub3JldiBhYWFhYWFhYWFhYSAmJgorCSEgdGFnX2V4aXN0cyBteXRhZ25vcmV2CisnCisKKyMgY29tbWl0IHVzZWQgaW4gdGhlIHRlc3RzLCB0ZXN0X3RpY2sgaXMgYWxzbyBjYWxsZWQgaGVyZSB0byBmcmVlemUgdGhlIGRhdGU6Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBhIHRhZyB1c2luZyBkZWZhdWx0IEhFQUQgc2hvdWxkIHN1Y2NlZWQnICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgdHJ1ZSAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gZm9vID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gRm9vICYmCisJZ2l0IHRhZyBteXRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWZsb2cgZXhpc3RzIHJlZnMvdGFncy9teXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBhIHRhZyB3aXRoIC0tY3JlYXRlLXJlZmxvZyBzaG91bGQgY3JlYXRlIHJlZmxvZycgJworCWdpdCBsb2cgLTEgXAorCQktLWZvcm1hdD0iZm9ybWF0OnRhZzogdGFnZ2luZyAlaCAoJXMsICVjZCklbiIgXAorCQktLWRhdGU9Zm9ybWF0OiVZLSVtLSVkID5leHBlY3RlZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHRhZyAtZCB0YWdfd2l0aF9yZWZsb2ciICYmCisJZ2l0IHRhZyAtLWNyZWF0ZS1yZWZsb2cgdGFnX3dpdGhfcmVmbG9nICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy90YWdzL3RhZ193aXRoX3JlZmxvZyAmJgorCXNlZCAtZSAicy9eLioJLy8iIC5naXQvbG9ncy9yZWZzL3RhZ3MvdGFnX3dpdGhfcmVmbG9nID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fubm90YXRlZCB0YWcgd2l0aCAtLWNyZWF0ZS1yZWZsb2cgaGFzIGNvcnJlY3QgbWVzc2FnZScgJworCWdpdCBsb2cgLTEgXAorCQktLWZvcm1hdD0iZm9ybWF0OnRhZzogdGFnZ2luZyAlaCAoJXMsICVjZCklbiIgXAorCQktLWRhdGU9Zm9ybWF0OiVZLSVtLSVkID5leHBlY3RlZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHRhZyAtZCB0YWdfd2l0aF9yZWZsb2ciICYmCisJZ2l0IHRhZyAtbSAiYW5ub3RhdGVkIHRhZyIgLS1jcmVhdGUtcmVmbG9nIHRhZ193aXRoX3JlZmxvZyAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvdGFncy90YWdfd2l0aF9yZWZsb2cgJiYKKwlzZWQgLWUgInMvXi4qCS8vIiAuZ2l0L2xvZ3MvcmVmcy90YWdzL3RhZ193aXRoX3JlZmxvZyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNyZWF0ZS1yZWZsb2cgZG9lcyBub3QgY3JlYXRlIHJlZmxvZyBvbiBmYWlsdXJlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtLWNyZWF0ZS1yZWZsb2cgbXl0YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVmbG9nIGV4aXN0cyByZWZzL3RhZ3MvbXl0YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW9uIGNvcmUubG9nQWxsUmVmVXBkYXRlcz1hbHdheXMgY3JlYXRlcyByZWZsb2cnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB0YWcgLWQgdGFnX3dpdGhfcmVmbG9nIiAmJgorCXRlc3RfY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyBhbHdheXMgJiYKKwlnaXQgdGFnIHRhZ193aXRoX3JlZmxvZyAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvdGFncy90YWdfd2l0aF9yZWZsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdGluZyBhbGwgdGFncyBpZiBvbmUgZXhpc3RzIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtbCAmJgorCWdpdCB0YWcKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK215dGFnCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ011bHRpcGxlIC1sIG9yIC0tbGlzdCBvcHRpb25zIGFyZSBlcXVpdmFsZW50IHRvIG9uZSAtbCBvcHRpb24nICcKKwlnaXQgdGFnIC1sIC1sID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtLWxpc3QgLS1saXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtLWxpc3QgLWwgLS1saXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgYWxsIHRhZ3MgaWYgb25lIGV4aXN0cyBzaG91bGQgb3V0cHV0IHRoYXQgdGFnJyAnCisJdGVzdCAkKGdpdCB0YWcgLWwpID0gbXl0YWcgJiYKKwl0ZXN0ICQoZ2l0IHRhZykgPSBteXRhZworJworCisjIHBhdHRlcm4gbWF0Y2hpbmc6CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgYSB0YWcgdXNpbmcgYSBtYXRjaGluZyBwYXR0ZXJuIHNob3VsZCBzdWNjZWVkJyBcCisJJ2dpdCB0YWcgLWwgbXl0YWcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgYSB0YWcgd2l0aCAtLWlnbm9yZS1jYXNlJyBcCisJJ3Rlc3QgJChnaXQgdGFnIC1sIC0taWdub3JlLWNhc2UgTVlUQUcpID0gbXl0YWcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIGEgdGFnIHVzaW5nIGEgbWF0Y2hpbmcgcGF0dGVybiBzaG91bGQgb3V0cHV0IHRoYXQgdGFnJyBcCisJJ3Rlc3QgJChnaXQgdGFnIC1sIG15dGFnKSA9IG15dGFnJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbGlzdGluZyB0YWdzIHVzaW5nIGEgbm9uLW1hdGNoaW5nIHBhdHRlcm4gc2hvdWxkIHN1Y2NlZWQnIFwKKwknZ2l0IHRhZyAtbCB4eHgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIHRhZ3MgdXNpbmcgYSBub24tbWF0Y2hpbmcgcGF0dGVybiBzaG91bGQgb3V0cHV0IG5vdGhpbmcnIFwKKwkndGVzdCAkKGdpdCB0YWcgLWwgeHh4IHwgd2MgLWwpIC1lcSAwJworCisjIHNwZWNpYWwgY2FzZXMgZm9yIGNyZWF0aW5nIHRhZ3M6CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSd0cnlpbmcgdG8gY3JlYXRlIGEgdGFnIHdpdGggdGhlIG5hbWUgb2Ygb25lIGV4aXN0aW5nIHNob3VsZCBmYWlsJyBcCisJJ3Rlc3RfbXVzdF9mYWlsIGdpdCB0YWcgbXl0YWcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSd0cnlpbmcgdG8gY3JlYXRlIGEgdGFnIHdpdGggYSBub24tdmFsaWQgbmFtZSBzaG91bGQgZmFpbCcgJworCXRlc3QgJChnaXQgdGFnIC1sIHwgd2MgLWwpIC1lcSAxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAiIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLm90aGVydGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAib3RoZXIgdGFnIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgIm90aGVydGFnXiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnICJvdGhlcn50YWciICYmCisJdGVzdCAkKGdpdCB0YWcgLWwgfCB3YyAtbCkgLWVxIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgYSB0YWcgdXNpbmcgSEVBRCBkaXJlY3RseSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgbXloZWFkIEhFQUQgJiYKKwl0YWdfZXhpc3RzIG15aGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWZvcmNlIGNhbiBjcmVhdGUgYSB0YWcgd2l0aCB0aGUgbmFtZSBvZiBvbmUgZXhpc3RpbmcnICcKKwl0YWdfZXhpc3RzIG15dGFnICYmCisJZ2l0IHRhZyAtLWZvcmNlIG15dGFnICYmCisJdGFnX2V4aXN0cyBteXRhZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1mb3JjZSBpcyBtb290IHdpdGggYSBub24tZXhpc3RpbmcgdGFnIG5hbWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHRhZyAtZCBuZXd0YWcgZm9yY2V0YWcgJiYKKwlnaXQgdGFnIG5ld3RhZyA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtLWZvcmNlIGZvcmNldGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgZGVsZXRpbmcgdGFnczoKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJ5aW5nIHRvIGRlbGV0ZSBhbiB1bmtub3duIHRhZyBzaG91bGQgZmFpbCcgJworCSEgdGFnX2V4aXN0cyB1bmtub3duLXRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLWQgdW5rbm93bi10YWcKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK215aGVhZAorbXl0YWcKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RyeWluZyB0byBkZWxldGUgdGFncyB3aXRob3V0IHBhcmFtcyBzaG91bGQgc3VjY2VlZCBhbmQgZG8gbm90aGluZycgJworCWdpdCB0YWcgLWwgPiBhY3R1YWwgJiYgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLWQgJiYKKwlnaXQgdGFnIC1sID4gYWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2RlbGV0aW5nIHR3byBleGlzdGluZyB0YWdzIGluIG9uZSBjb21tYW5kIHNob3VsZCBzdWNjZWVkJyAnCisJdGFnX2V4aXN0cyBteXRhZyAmJgorCXRhZ19leGlzdHMgbXloZWFkICYmCisJZ2l0IHRhZyAtZCBteXRhZyBteWhlYWQgJiYKKwkhIHRhZ19leGlzdHMgbXl0YWcgJiYKKwkhIHRhZ19leGlzdHMgbXloZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjcmVhdGluZyBhIHRhZyB3aXRoIHRoZSBuYW1lIG9mIGFub3RoZXIgZGVsZXRlZCBvbmUgc2hvdWxkIHN1Y2NlZWQnICcKKwkhIHRhZ19leGlzdHMgbXl0YWcgJiYKKwlnaXQgdGFnIG15dGFnICYmCisJdGFnX2V4aXN0cyBteXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndHJ5aW5nIHRvIGRlbGV0ZSB0d28gdGFncywgZXhpc3RpbmcgYW5kIG5vdCwgc2hvdWxkIGZhaWwgaW4gdGhlIDJuZCcgJworCXRhZ19leGlzdHMgbXl0YWcgJiYKKwkhIHRhZ19leGlzdHMgbm9uZXhpc3Rpbmd0YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1kIG15dGFnIG5vbmV4aXN0aW5ndGFnICYmCisJISB0YWdfZXhpc3RzIG15dGFnICYmCisJISB0YWdfZXhpc3RzIG5vbmV4aXN0aW5ndGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyeWluZyB0byBkZWxldGUgYW4gYWxyZWFkeSBkZWxldGVkIHRhZyBzaG91bGQgZmFpbCcgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1kIG15dGFnJworCisjIGxpc3RpbmcgdmFyaW91cyB0YWdzIHdpdGggcGF0dGVybiBtYXRjaGluZzoKKworY2F0ID5leHBlY3QgPDxFT0YKK2ExCithYTEKK2NiYQordDIxMAordDIxMQordjAuMi4xCit2MS4wCit2MS4wLjEKK3YxLjEuMworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0aW5nIGFsbCB0YWdzIHNob3VsZCBwcmludCB0aGVtIG9yZGVyZWQnICcKKwlnaXQgdGFnIHYxLjAuMSAmJgorCWdpdCB0YWcgdDIxMSAmJgorCWdpdCB0YWcgYWExICYmCisJZ2l0IHRhZyB2MC4yLjEgJiYKKwlnaXQgdGFnIHYxLjEuMyAmJgorCWdpdCB0YWcgY2JhICYmCisJZ2l0IHRhZyBhMSAmJgorCWdpdCB0YWcgdjEuMCAmJgorCWdpdCB0YWcgdDIxMCAmJgorCWdpdCB0YWcgLWwgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2ExCithYTEKK2NiYQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbGlzdGluZyB0YWdzIHdpdGggc3Vic3RyaW5nIGFzIHBhdHRlcm4gbXVzdCBwcmludCB0aG9zZSBtYXRjaGluZycgJworCXJtICphKiAmJgorCWdpdCB0YWcgLWwgIiphKiIgPiBjdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0IGN1cnJlbnQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK3YwLjIuMQordjEuMC4xCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIHRhZ3Mgd2l0aCBhIHN1ZmZpeCBhcyBwYXR0ZXJuIG11c3QgcHJpbnQgdGhvc2UgbWF0Y2hpbmcnICcKKwlnaXQgdGFnIC1sICIqLjEiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgordDIxMAordDIxMQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbGlzdGluZyB0YWdzIHdpdGggYSBwcmVmaXggYXMgcGF0dGVybiBtdXN0IHByaW50IHRob3NlIG1hdGNoaW5nJyAnCisJZ2l0IHRhZyAtbCAidDIxKiIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCithMQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbGlzdGluZyB0YWdzIHVzaW5nIGEgbmFtZSBhcyBwYXR0ZXJuIG11c3QgcHJpbnQgdGhhdCBvbmUgbWF0Y2hpbmcnICcKKwlnaXQgdGFnIC1sIGExID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgordjEuMAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbGlzdGluZyB0YWdzIHVzaW5nIGEgbmFtZSBhcyBwYXR0ZXJuIG11c3QgcHJpbnQgdGhhdCBvbmUgbWF0Y2hpbmcnICcKKwlnaXQgdGFnIC1sIHYxLjAgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCit2MS4wLjEKK3YxLjEuMworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbGlzdGluZyB0YWdzIHdpdGggPyBpbiB0aGUgcGF0dGVybiBzaG91bGQgcHJpbnQgdGhvc2UgbWF0Y2hpbmcnICcKKwlnaXQgdGFnIC1sICJ2MS4/Lj8iID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbGlzdGluZyB0YWdzIHVzaW5nIHYuKiBzaG91bGQgcHJpbnQgbm90aGluZyBiZWNhdXNlIG5vbmUgaGF2ZSB2LicgJworCWdpdCB0YWcgLWwgInYuKiIgPiBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCit2MC4yLjEKK3YxLjAKK3YxLjAuMQordjEuMS4zCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIHRhZ3MgdXNpbmcgdiogc2hvdWxkIHByaW50IG9ubHkgdGhvc2UgaGF2aW5nIHYnICcKKwlnaXQgdGFnIC1sICJ2KiIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyAtbCBjYW4gYWNjZXB0IG11bHRpcGxlIHBhdHRlcm5zJyAnCisJZ2l0IHRhZyAtbCAidjEqIiAidjAqIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIEJldHdlZW4gdjEuNy43ICYgdjIuMTMuMCBhIGZhaXIgcmVhZGluZyBvZiB0aGUgZ2l0LXRhZyBkb2N1bWVudGF0aW9uCisjIGNvdWxkIGxlYXZlIHlvdSB3aXRoIHRoZSBpbXByZXNzaW9uIHRoYXQgIi1sIDxwYXR0ZXJuPiAtbCA8cGF0dGVybj4iCisjIHdhcyBob3cgd2Ugd2FudGVkIHRvIGFjY2VwdCBtdWx0aXBsZSBwYXR0ZXJucy4KKyMKKyMgVGhpcyB0ZXN0IHNob3VsZCBub3QgaW1wbHkgdGhhdCB0aGlzIGlzIGEgc2FuZSB0aGluZyB0byBzdXBwb3J0LiBidXQKKyMgc2luY2UgdGhlIGRvY3VtZW50YXRpb24gd2FzIHdvcmRlZCBsaWtlIGl0IHdhcyBsZXQncyBhdCBsZWFzdCBmaW5kCisjIG91dCBpZiB3ZSdyZSBnb2luZyB0byBicmVhayB0aGlzIGxvbmctZG9jdW1lbnRlZCBmb3JtIG9mIHRha2luZworIyBtdWx0aXBsZSBwYXR0ZXJucy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyAtbCA8cGF0dGVybj4gLWwgPHBhdHRlcm4+IHdvcmtzLCBhcyBvdXIgYnVnZ3kgZG9jdW1lbnRhdGlvbiBwcmV2aW91c2x5IHN1Z2dlc3RlZCcgJworCWdpdCB0YWcgLWwgInYxKiIgLWwgInYwKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdGluZyB0YWdzIGluIGNvbHVtbicgJworCUNPTFVNTlM9NDEgZ2l0IHRhZyAtbCAtLWNvbHVtbj1yb3cgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCithMSAgICAgIGFhMSAgICAgY2JhICAgICB0MjEwICAgIHQyMTEKK3YwLjIuMSAgdjEuMCAgICB2MS4wLjEgIHYxLjEuMworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgdGFncyBpbiBjb2x1bW4gd2l0aCBjb2x1bW4uKicgJworCXRlc3RfY29uZmlnIGNvbHVtbi50YWcgcm93ICYmCisJdGVzdF9jb25maWcgY29sdW1uLnVpIGRlbnNlICYmCisJQ09MVU1OUz00MCBnaXQgdGFnIC1sID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorYTEgICAgICBhYTEgICBjYmEgICAgIHQyMTAgICAgdDIxMQordjAuMi4xICB2MS4wICB2MS4wLjEgIHYxLjEuMworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgdGFnIHdpdGggLW4gLS1jb2x1bW4gc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC0tY29sdW1uIC1uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgdGFncyAtbiBpbiBjb2x1bW4gd2l0aCBjb2x1bW4udWkgaWdub3JlZCcgJworCXRlc3RfY29uZmlnIGNvbHVtbi51aSAicm93IGRlbnNlIiAmJgorCUNPTFVNTlM9NDAgZ2l0IHRhZyAtbCAtbiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK2ExICAgICAgICAgICAgICBGb28KK2FhMSAgICAgICAgICAgICBGb28KK2NiYSAgICAgICAgICAgICBGb28KK3QyMTAgICAgICAgICAgICBGb28KK3QyMTEgICAgICAgICAgICBGb28KK3YwLjIuMSAgICAgICAgICBGb28KK3YxLjAgICAgICAgICAgICBGb28KK3YxLjAuMSAgICAgICAgICBGb28KK3YxLjEuMyAgICAgICAgICBGb28KK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisjIGNyZWF0aW5nIGFuZCB2ZXJpZnlpbmcgbGlnaHR3ZWlnaHQgdGFnczoKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2Egbm9uLWFubm90YXRlZCB0YWcgY3JlYXRlZCB3aXRob3V0IHBhcmFtZXRlcnMgc2hvdWxkIHBvaW50IHRvIEhFQUQnICcKKwlnaXQgdGFnIG5vbi1hbm5vdGF0ZWQtdGFnICYmCisJdGVzdCAkKGdpdCBjYXQtZmlsZSAtdCBub24tYW5ub3RhdGVkLXRhZykgPSBjb21taXQgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBub24tYW5ub3RhdGVkLXRhZykgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJ5aW5nIHRvIHZlcmlmeSBhbiB1bmtub3duIHRhZyBzaG91bGQgZmFpbCcgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IHVua25vd24tdGFnJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndHJ5aW5nIHRvIHZlcmlmeSBhIG5vbi1hbm5vdGF0ZWQgYW5kIG5vbi1zaWduZWQgdGFnIHNob3VsZCBmYWlsJyBcCisJJ3Rlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXYgbm9uLWFubm90YXRlZC10YWcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSd0cnlpbmcgdG8gdmVyaWZ5IG1hbnkgbm9uLWFubm90YXRlZCBvciB1bmtub3duIHRhZ3MsIHNob3VsZCBmYWlsJyBcCisJJ3Rlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXYgdW5rbm93bi10YWcxIG5vbi1hbm5vdGF0ZWQtdGFnIHVua25vd24tdGFnMicKKworIyBjcmVhdGluZyBhbm5vdGF0ZWQgdGFnczoKKworZ2V0X3RhZ19tc2cgKCkgeworCWdpdCBjYXQtZmlsZSB0YWcgIiQxIiB8IHNlZCAtZSAiL0JFR0lOIFBHUC9xIgorfQorCisjIHJ1biB0ZXN0X3RpY2sgYmVmb3JlIGNvbW1pdHRpbmcgYWx3YXlzIGdpdmVzIHRoZSB0aW1lIGluIHRoYXQgdGltZXpvbmUKK2dldF90YWdfaGVhZGVyICgpIHsKK2NhdCA8PEVPRgorb2JqZWN0ICQyCit0eXBlICQzCit0YWcgJDEKK3RhZ2dlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+ICQ0IC0wNzAwCisKK0VPRgorfQorCitjb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpCit0aW1lPSR0ZXN0X3RpY2sKKworZ2V0X3RhZ19oZWFkZXIgYW5ub3RhdGVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICJBIG1lc3NhZ2UiID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3JlYXRpbmcgYW4gYW5ub3RhdGVkIHRhZyB3aXRoIC1tIG1lc3NhZ2Ugc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1tICJBIG1lc3NhZ2UiIGFubm90YXRlZC10YWcgJiYKKwlnZXRfdGFnX21zZyBhbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2dldF90YWdfaGVhZGVyIGFubm90YXRlZC10YWctZWRpdCAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICJBbiBlZGl0ZWQgbWVzc2FnZSIgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBlZGl0b3InICcKKwl3cml0ZV9zY3JpcHQgZmFrZWVkaXRvciA8PC1cRU9GCisJc2VkIC1lICJzL0EgbWVzc2FnZS9BbiBlZGl0ZWQgbWVzc2FnZS9nIiA8IiQxIiA+IiQxLSIKKwltdiAiJDEtIiAiJDEiCisJRU9GCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3JlYXRpbmcgYW4gYW5ub3RhdGVkIHRhZyB3aXRoIC1tIG1lc3NhZ2UgLS1lZGl0IHNob3VsZCBzdWNjZWVkJyAnCisJR0lUX0VESVRPUj0uL2Zha2VlZGl0b3IgZ2l0IHRhZyAtbSAiQSBtZXNzYWdlIiAtLWVkaXQgYW5ub3RhdGVkLXRhZy1lZGl0ICYmCisJZ2V0X3RhZ19tc2cgYW5ub3RhdGVkLXRhZy1lZGl0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+bXNnZmlsZSA8PEVPRgorQW5vdGhlciBtZXNzYWdlCitpbiBhIGZpbGUuCitFT0YKK2dldF90YWdfaGVhZGVyIGZpbGUtYW5ub3RhdGVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitjYXQgbXNnZmlsZSA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NyZWF0aW5nIGFuIGFubm90YXRlZCB0YWcgd2l0aCAtRiBtZXNzYWdlZmlsZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLUYgbXNnZmlsZSBmaWxlLWFubm90YXRlZC10YWcgJiYKKwlnZXRfdGFnX21zZyBmaWxlLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZ2V0X3RhZ19oZWFkZXIgZmlsZS1hbm5vdGF0ZWQtdGFnLWVkaXQgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorc2VkIC1lICJzL0Fub3RoZXIgbWVzc2FnZS9Bbm90aGVyIGVkaXRlZCBtZXNzYWdlL2ciIG1zZ2ZpbGUgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBlZGl0b3InICcKKwl3cml0ZV9zY3JpcHQgZmFrZWVkaXRvciA8PC1cRU9GCisJc2VkIC1lICJzL0Fub3RoZXIgbWVzc2FnZS9Bbm90aGVyIGVkaXRlZCBtZXNzYWdlL2ciIDwiJDEiID4iJDEtIgorCW12ICIkMS0iICIkMSIKKwlFT0YKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjcmVhdGluZyBhbiBhbm5vdGF0ZWQgdGFnIHdpdGggLUYgbWVzc2FnZWZpbGUgLS1lZGl0IHNob3VsZCBzdWNjZWVkJyAnCisJR0lUX0VESVRPUj0uL2Zha2VlZGl0b3IgZ2l0IHRhZyAtRiBtc2dmaWxlIC0tZWRpdCBmaWxlLWFubm90YXRlZC10YWctZWRpdCAmJgorCWdldF90YWdfbXNnIGZpbGUtYW5ub3RhdGVkLXRhZy1lZGl0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+aW5wdXRtc2cgPDxFT0YKK0EgbWVzc2FnZSBmcm9tIHRoZQorc3RhbmRhcmQgaW5wdXQKK0VPRgorZ2V0X3RhZ19oZWFkZXIgc3RkaW4tYW5ub3RhdGVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitjYXQgaW5wdXRtc2cgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIGFuIGFubm90YXRlZCB0YWcgd2l0aCAtRiAtIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtRiAtIHN0ZGluLWFubm90YXRlZC10YWcgPGlucHV0bXNnICYmCisJZ2V0X3RhZ19tc2cgc3RkaW4tYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndHJ5aW5nIHRvIGNyZWF0ZSBhIHRhZyB3aXRoIGEgbm9uLWV4aXN0aW5nIC1GIGZpbGUgc2hvdWxkIGZhaWwnICcKKwkhIHRlc3QgLWYgbm9uZXhpc3RpbmdmaWxlICYmCisJISB0YWdfZXhpc3RzIG5vdGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtRiBub25leGlzdGluZ2ZpbGUgbm90YWcgJiYKKwkhIHRhZ19leGlzdHMgbm90YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RyeWluZyB0byBjcmVhdGUgdGFncyBnaXZpbmcgYm90aCAtbSBvciAtRiBvcHRpb25zIHNob3VsZCBmYWlsJyAnCisJZWNobyAibWVzc2FnZSBmaWxlIDEiID5tc2dmaWxlMSAmJgorCSEgdGFnX2V4aXN0cyBtc2d0YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1tICJtZXNzYWdlIDEiIC1GIG1zZ2ZpbGUxIG1zZ3RhZyAmJgorCSEgdGFnX2V4aXN0cyBtc2d0YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1GIG1zZ2ZpbGUxIC1tICJtZXNzYWdlIDEiIG1zZ3RhZyAmJgorCSEgdGFnX2V4aXN0cyBtc2d0YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1tICJtZXNzYWdlIDEiIC1GIG1zZ2ZpbGUxIFwKKwkJLW0gIm1lc3NhZ2UgMiIgbXNndGFnICYmCisJISB0YWdfZXhpc3RzIG1zZ3RhZworJworCisjIGJsYW5rIGFuZCBlbXB0eSBtZXNzYWdlczoKKworZ2V0X3RhZ19oZWFkZXIgZW1wdHktYW5ub3RhdGVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3JlYXRpbmcgYSB0YWcgd2l0aCBhbiBlbXB0eSAtbSBtZXNzYWdlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtbSAiIiBlbXB0eS1hbm5vdGF0ZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgZW1wdHktYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCis+ZW1wdHlmaWxlCitnZXRfdGFnX2hlYWRlciBlbXB0eWZpbGUtYW5ub3RhdGVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3JlYXRpbmcgYSB0YWcgd2l0aCBhbiBlbXB0eSAtRiBtZXNzYWdlZmlsZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLUYgZW1wdHlmaWxlIGVtcHR5ZmlsZS1hbm5vdGF0ZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgZW1wdHlmaWxlLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworcHJpbnRmICdcblxuICBcblx0XG5MZWFkaW5nIGJsYW5rIGxpbmVzXG4nID5ibGFua3NmaWxlCitwcmludGYgJ1xuXHQgXHQgIFxuUmVwZWF0ZWQgYmxhbmsgbGluZXNcbicgPj5ibGFua3NmaWxlCitwcmludGYgJ1xuXG5cblRyYWlsaW5nIHNwYWNlcyAgICAgIFx0ICBcbicgPj5ibGFua3NmaWxlCitwcmludGYgJ1xuVHJhaWxpbmcgYmxhbmsgbGluZXNcblxuXHQgXG5cbicgPj5ibGFua3NmaWxlCitnZXRfdGFnX2hlYWRlciBibGFua3MtYW5ub3RhdGVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitjYXQgPj5leHBlY3QgPDxFT0YKK0xlYWRpbmcgYmxhbmsgbGluZXMKKworUmVwZWF0ZWQgYmxhbmsgbGluZXMKKworVHJhaWxpbmcgc3BhY2VzCisKK1RyYWlsaW5nIGJsYW5rIGxpbmVzCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdleHRyYSBibGFua3MgaW4gdGhlIG1lc3NhZ2UgZm9yIGFuIGFubm90YXRlZCB0YWcgc2hvdWxkIGJlIHJlbW92ZWQnICcKKwlnaXQgdGFnIC1GIGJsYW5rc2ZpbGUgYmxhbmtzLWFubm90YXRlZC10YWcgJiYKKwlnZXRfdGFnX21zZyBibGFua3MtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitnZXRfdGFnX2hlYWRlciBibGFuay1hbm5vdGF0ZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjcmVhdGluZyBhIHRhZyB3aXRoIGJsYW5rIC1tIG1lc3NhZ2Ugd2l0aCBzcGFjZXMgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1tICIgICAgICIgYmxhbmstYW5ub3RhdGVkLXRhZyAmJgorCWdldF90YWdfbXNnIGJsYW5rLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZWNobyAnICAgICAnID5ibGFua2ZpbGUKK2VjaG8gJycgICAgICA+PmJsYW5rZmlsZQorZWNobyAnICAnICAgID4+YmxhbmtmaWxlCitnZXRfdGFnX2hlYWRlciBibGFua2ZpbGUtYW5ub3RhdGVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3JlYXRpbmcgYSB0YWcgd2l0aCBibGFuayAtRiBtZXNzYWdlZmlsZSB3aXRoIHNwYWNlcyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLUYgYmxhbmtmaWxlIGJsYW5rZmlsZS1hbm5vdGF0ZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgYmxhbmtmaWxlLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworcHJpbnRmICcgICAgICAnID5ibGFua25vbmxmaWxlCitnZXRfdGFnX2hlYWRlciBibGFua25vbmxmaWxlLWFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NyZWF0aW5nIGEgdGFnIHdpdGggLUYgZmlsZSBvZiBzcGFjZXMgYW5kIG5vIG5ld2xpbmUgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1GIGJsYW5rbm9ubGZpbGUgYmxhbmtub25sZmlsZS1hbm5vdGF0ZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgYmxhbmtub25sZmlsZS1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgbWVzc2FnZXMgd2l0aCBjb21tZW50ZWQgbGluZXM6CisKK2NhdCA+Y29tbWVudHNmaWxlIDw8RU9GCisjIEEgY29tbWVudAorCisjIyMjIyMjIyMjIyMKK1RoZSBtZXNzYWdlLgorIyMjIyMjIyMjIyMjCitPbmUgbGluZS4KKworCisjIGNvbW1lbnRlZCBsaW5lcworIyBjb21tZW50ZWQgbGluZXMKKworQW5vdGhlciBsaW5lLgorIyBjb21tZW50cworCitMYXN0IGxpbmUuCitFT0YKK2dldF90YWdfaGVhZGVyIGNvbW1lbnRzLWFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorY2F0ID4+ZXhwZWN0IDw8RU9GCitUaGUgbWVzc2FnZS4KK09uZSBsaW5lLgorCitBbm90aGVyIGxpbmUuCisKK0xhc3QgbGluZS4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NyZWF0aW5nIGEgdGFnIHVzaW5nIGEgLUYgbWVzc2FnZWZpbGUgd2l0aCAjY29tbWVudHMgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1GIGNvbW1lbnRzZmlsZSBjb21tZW50cy1hbm5vdGF0ZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgY29tbWVudHMtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitnZXRfdGFnX2hlYWRlciBjb21tZW50LWFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NyZWF0aW5nIGEgdGFnIHdpdGggYSAjY29tbWVudCBpbiB0aGUgLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLW0gIiNjb21tZW50IiBjb21tZW50LWFubm90YXRlZC10YWcgJiYKKwlnZXRfdGFnX21zZyBjb21tZW50LWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZWNobyAnI2NvbW1lbnQnID5jb21tZW50ZmlsZQorZWNobyAnJyAgICAgICAgID4+Y29tbWVudGZpbGUKK2VjaG8gJyMjIyMnICAgICA+PmNvbW1lbnRmaWxlCitnZXRfdGFnX2hlYWRlciBjb21tZW50ZmlsZS1hbm5vdGF0ZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjcmVhdGluZyBhIHRhZyB3aXRoICNjb21tZW50cyBpbiB0aGUgLUYgbWVzc2FnZWZpbGUgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1GIGNvbW1lbnRmaWxlIGNvbW1lbnRmaWxlLWFubm90YXRlZC10YWcgJiYKKwlnZXRfdGFnX21zZyBjb21tZW50ZmlsZS1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3ByaW50ZiAnI2NvbW1lbnQnID5jb21tZW50bm9ubGZpbGUKK2dldF90YWdfaGVhZGVyIGNvbW1lbnRub25sZmlsZS1hbm5vdGF0ZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjcmVhdGluZyBhIHRhZyB3aXRoIGEgZmlsZSBvZiAjY29tbWVudCBhbmQgbm8gbmV3bGluZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLUYgY29tbWVudG5vbmxmaWxlIGNvbW1lbnRub25sZmlsZS1hbm5vdGF0ZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgY29tbWVudG5vbmxmaWxlLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBsaXN0aW5nIG1lc3NhZ2VzIGZvciBhbm5vdGF0ZWQgbm9uLXNpZ25lZCB0YWdzOgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbGlzdGluZyB0aGUgb25lLWxpbmUgbWVzc2FnZSBvZiBhIG5vbi1zaWduZWQgdGFnIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtbSAiQSBtc2ciIHRhZy1vbmUtbGluZSAmJgorCisJZWNobyAidGFnLW9uZS1saW5lIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbCB8IGdyZXAgIl50YWctb25lLWxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjAgLWwgfCBncmVwICJedGFnLW9uZS1saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4wIC1sIHRhZy1vbmUtbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHRhZyAtbjAgfCBncmVwICJedGFnLW9uZS1saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4wIHRhZy1vbmUtbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyAidGFnLW9uZS1saW5lICAgIEEgbXNnIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbjEgLWwgfCBncmVwICJedGFnLW9uZS1saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4gLWwgfCBncmVwICJedGFnLW9uZS1saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4xIC1sIHRhZy1vbmUtbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4yIC1sIHRhZy1vbmUtbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW45OTkgLWwgdGFnLW9uZS1saW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1RoZSAtbiAxMDAgaW52b2NhdGlvbiBtZWFucyAtbiAtLWxpc3QgMTAwLCBub3QgLW4xMDAnICcKKwlnaXQgdGFnIC1uIDEwMCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisJZ2l0IHRhZyAtbSAiQSBtc2ciIDEwMCAmJgorCWVjaG8gIjEwMCAgICAgICAgICAgICBBIG1zZyIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLW4gMTAwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIHRoZSB6ZXJvLWxpbmVzIG1lc3NhZ2Ugb2YgYSBub24tc2lnbmVkIHRhZyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLW0gIiIgdGFnLXplcm8tbGluZXMgJiYKKworCWVjaG8gInRhZy16ZXJvLWxpbmVzIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbCB8IGdyZXAgIl50YWctemVyby1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMCAtbCB8IGdyZXAgIl50YWctemVyby1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMCAtbCB0YWctemVyby1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyAidGFnLXplcm8tbGluZXMgICIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLW4xIC1sIHwgZ3JlcCAiXnRhZy16ZXJvLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4gLWwgfCBncmVwICJedGFnLXplcm8tbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjEgLWwgdGFnLXplcm8tbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMiAtbCB0YWctemVyby1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW45OTkgLWwgdGFnLXplcm8tbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZWNobyAndGFnIGxpbmUgb25lJyA+YW5ub3RhZ21zZworZWNobyAndGFnIGxpbmUgdHdvJyA+PmFubm90YWdtc2cKK2VjaG8gJ3RhZyBsaW5lIHRocmVlJyA+PmFubm90YWdtc2cKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsaXN0aW5nIG1hbnkgbWVzc2FnZSBsaW5lcyBvZiBhIG5vbi1zaWduZWQgdGFnIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtRiBhbm5vdGFnbXNnIHRhZy1saW5lcyAmJgorCisJZWNobyAidGFnLWxpbmVzIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbCB8IGdyZXAgIl50YWctbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjAgLWwgfCBncmVwICJedGFnLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4wIC1sIHRhZy1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyAidGFnLWxpbmVzICAgICAgIHRhZyBsaW5lIG9uZSIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLW4xIC1sIHwgZ3JlcCAiXnRhZy1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uIC1sIHwgZ3JlcCAiXnRhZy1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMSAtbCB0YWctbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gIiAgICB0YWcgbGluZSB0d28iID4+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbjIgLWwgfCBncmVwICJeICp0YWcubGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMiAtbCB0YWctbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gIiAgICB0YWcgbGluZSB0aHJlZSIgPj5leHBlY3QgJiYKKwlnaXQgdGFnIC1uMyAtbCB8IGdyZXAgIl4gKnRhZy5saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4zIC1sIHRhZy1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW40IC1sIHwgZ3JlcCAiXiAqdGFnLmxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjQgLWwgdGFnLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjk5IC1sIHwgZ3JlcCAiXiAqdGFnLmxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjk5IC1sIHRhZy1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbm5vdGF0aW9ucyBmb3IgYmxvYnMgYXJlIGVtcHR5JyAnCisJYmxvYj0kKGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluIDw8LVxFT0YKKwlCbG9iIHBhcmFncmFwaCAxLgorCisJQmxvYiBwYXJhZ3JhcGggMi4KKwlFT0YKKwkpICYmCisJZ2l0IHRhZyB0YWctYmxvYiAkYmxvYiAmJgorCWVjaG8gInRhZy1ibG9iICAgICAgICAiID5leHBlY3QgJiYKKwlnaXQgdGFnIC1uMSAtbCB0YWctYmxvYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIHRyeWluZyB0byB2ZXJpZnkgYW5ub3RhdGVkIG5vbi1zaWduZWQgdGFnczoKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSd0cnlpbmcgdG8gdmVyaWZ5IGFuIGFubm90YXRlZCBub24tc2lnbmVkIHRhZyBzaG91bGQgZmFpbCcgJworCXRhZ19leGlzdHMgYW5ub3RhdGVkLXRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXYgYW5ub3RhdGVkLXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ3RyeWluZyB0byB2ZXJpZnkgYSBmaWxlLWFubm90YXRlZCBub24tc2lnbmVkIHRhZyBzaG91bGQgZmFpbCcgJworCXRhZ19leGlzdHMgZmlsZS1hbm5vdGF0ZWQtdGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBmaWxlLWFubm90YXRlZC10YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSd0cnlpbmcgdG8gdmVyaWZ5IHR3byBhbm5vdGF0ZWQgbm9uLXNpZ25lZCB0YWdzIHNob3VsZCBmYWlsJyAnCisJdGFnX2V4aXN0cyBhbm5vdGF0ZWQtdGFnIGZpbGUtYW5ub3RhdGVkLXRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXYgYW5ub3RhdGVkLXRhZyBmaWxlLWFubm90YXRlZC10YWcKKycKKworIyBjcmVhdGluZyBhbmQgdmVyaWZ5aW5nIHNpZ25lZCB0YWdzOgorCitnZXRfdGFnX2hlYWRlciBzaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2VjaG8gJ0Egc2lnbmVkIHRhZyBtZXNzYWdlJyA+PmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLW0gIkEgc2lnbmVkIHRhZyBtZXNzYWdlIiBzaWduZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitnZXRfdGFnX2hlYWRlciB1LXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAnQW5vdGhlciBtZXNzYWdlJyA+PmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2lnbiB3aXRoIGEgZ2l2ZW4ga2V5IGlkJyAnCisKKwlnaXQgdGFnIC11IGNvbW1pdHRlckBleGFtcGxlLmNvbSAtbSAiQW5vdGhlciBtZXNzYWdlIiB1LXNpZ25lZC10YWcgJiYKKwlnZXRfdGFnX21zZyB1LXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2lnbiB3aXRoIGFuIHVua25vd24gaWQgKDEpJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC11IGF1dGhvckBleGFtcGxlLmNvbSBcCisJCS1tICJBbm90aGVyIG1lc3NhZ2UiIG8tc2lnbmVkLXRhZworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaWduIHdpdGggYW4gdW5rbm93biBpZCAoMiknICcKKworCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXUgREVBREJFRUYgLW0gIkFub3RoZXIgbWVzc2FnZSIgby1zaWduZWQtdGFnCisKKycKKworY2F0ID5mYWtlZWRpdG9yIDw8J0VPRicKKyMhL2Jpbi9zaAordGVzdCAtbiAiJDEiICYmIGV4ZWMgPiIkMSIKK2VjaG8gQSBzaWduZWQgdGFnIG1lc3NhZ2UKK2VjaG8gZnJvbSBhIGZha2UgZWRpdG9yLgorRU9GCitjaG1vZCAreCBmYWtlZWRpdG9yCisKK2dldF90YWdfaGVhZGVyIGltcGxpZWQtc2lnbiAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CisuL2Zha2VlZGl0b3IgPj5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJy11IGltcGxpZXMgc2lnbmVkIHRhZycgJworCUdJVF9FRElUT1I9Li9mYWtlZWRpdG9yIGdpdCB0YWcgLXUgQ0RERTQzMEQgaW1wbGllZC1zaWduICYmCisJZ2V0X3RhZ19tc2cgaW1wbGllZC1zaWduID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+c2lnbXNnZmlsZSA8PEVPRgorQW5vdGhlciBzaWduZWQgdGFnCittZXNzYWdlIGluIGEgZmlsZS4KK0VPRgorZ2V0X3RhZ19oZWFkZXIgZmlsZS1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2NhdCBzaWdtc2dmaWxlID4+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggLUYgbWVzc2FnZWZpbGUgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1GIHNpZ21zZ2ZpbGUgZmlsZS1zaWduZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgZmlsZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+c2lnaW5wdXRtc2cgPDxFT0YKK0Egc2lnbmVkIHRhZyBtZXNzYWdlIGZyb20KK3RoZSBzdGFuZGFyZCBpbnB1dAorRU9GCitnZXRfdGFnX2hlYWRlciBzdGRpbi1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2NhdCBzaWdpbnB1dG1zZyA+PmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggLUYgLSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLUYgLSBzdGRpbi1zaWduZWQtdGFnIDxzaWdpbnB1dG1zZyAmJgorCWdldF90YWdfbXNnIHN0ZGluLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZ2V0X3RhZ19oZWFkZXIgaW1wbGllZC1hbm5vdGF0ZSAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CisuL2Zha2VlZGl0b3IgPj5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJy1zIGltcGxpZXMgYW5ub3RhdGVkIHRhZycgJworCUdJVF9FRElUT1I9Li9mYWtlZWRpdG9yIGdpdCB0YWcgLXMgaW1wbGllZC1hbm5vdGF0ZSAmJgorCWdldF90YWdfbXNnIGltcGxpZWQtYW5ub3RhdGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZ2V0X3RhZ19oZWFkZXIgZm9yY2VzaWduYW5ub3RhdGVkLWltcGxpZWQtc2lnbiAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICJBIG1lc3NhZ2UiID4+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknZ2l0IHRhZyAtcyBpbXBsaWVkIGlmIGNvbmZpZ3VyZWQgd2l0aCB0YWcuZm9yY2VzaWduYW5ub3RhdGVkJyBcCisJJ3Rlc3RfY29uZmlnIHRhZy5mb3JjZXNpZ25hbm5vdGF0ZWQgdHJ1ZSAmJgorCWdpdCB0YWcgLW0gIkEgbWVzc2FnZSIgZm9yY2VzaWduYW5ub3RhdGVkLWltcGxpZWQtc2lnbiAmJgorCWdldF90YWdfbXNnIGZvcmNlc2lnbmFubm90YXRlZC1pbXBsaWVkLXNpZ24gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdsaWdodHdlaWdodCB3aXRoIG5vIG1lc3NhZ2Ugd2hlbiBjb25maWd1cmVkIHdpdGggdGFnLmZvcmNlc2lnbmFubm90YXRlZCcgXAorCSd0ZXN0X2NvbmZpZyB0YWcuZm9yY2VzaWduYW5ub3RhdGVkIHRydWUgJiYKKwlnaXQgdGFnIGZvcmNlc2lnbmFubm90YXRlZC1saWdodHdlaWdodCAmJgorCXRhZ19leGlzdHMgZm9yY2VzaWduYW5ub3RhdGVkLWxpZ2h0d2VpZ2h0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBmb3JjZXNpZ25hbm5vdGF0ZWQtbm8tbWVzc2FnZQorJworCitnZXRfdGFnX2hlYWRlciBmb3JjZXNpZ25hbm5vdGF0ZWQtYW5ub3RhdGUgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAiQSBtZXNzYWdlIiA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdnaXQgdGFnIC1hIGRpc2FibGUgY29uZmlndXJlZCB0YWcuZm9yY2VzaWduYW5ub3RhdGVkJyBcCisJJ3Rlc3RfY29uZmlnIHRhZy5mb3JjZXNpZ25hbm5vdGF0ZWQgdHJ1ZSAmJgorCWdpdCB0YWcgLWEgLW0gIkEgbWVzc2FnZSIgZm9yY2VzaWduYW5ub3RhdGVkLWFubm90YXRlICYmCisJZ2V0X3RhZ19tc2cgZm9yY2VzaWduYW5ub3RhdGVkLWFubm90YXRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBmb3JjZXNpZ25hbm5vdGF0ZWQtYW5ub3RhdGUKKycKKworZ2V0X3RhZ19oZWFkZXIgZm9yY2VzaWduYW5ub3RhdGVkLWRpc2FibGVkICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2VjaG8gIkEgbWVzc2FnZSIgPj5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdnaXQgdGFnIC0tc2lnbiBlbmFibGUgR1BHIHNpZ24nIFwKKwkndGVzdF9jb25maWcgdGFnLmZvcmNlc2lnbmFubm90YXRlZCBmYWxzZSAmJgorCWdpdCB0YWcgLS1zaWduIC1tICJBIG1lc3NhZ2UiIGZvcmNlc2lnbmFubm90YXRlZC1kaXNhYmxlZCAmJgorCWdldF90YWdfbXNnIGZvcmNlc2lnbmFubm90YXRlZC1kaXNhYmxlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitnZXRfdGFnX2hlYWRlciBncGdzaWduLWVuYWJsZWQgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAiQSBtZXNzYWdlIiA+PmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2dpdCB0YWcgY29uZmlndXJlZCB0YWcuZ3Bnc2lnbiBlbmFibGVzIEdQRyBzaWduJyBcCisJJ3Rlc3RfY29uZmlnIHRhZy5ncGdzaWduIHRydWUgJiYKKwlnaXQgdGFnIC1tICJBIG1lc3NhZ2UiIGdwZ3NpZ24tZW5hYmxlZCAmJgorCWdldF90YWdfbXNnIGdwZ3NpZ24tZW5hYmxlZD5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2dldF90YWdfaGVhZGVyIG5vLXNpZ24gJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAiQSBtZXNzYWdlIiA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdnaXQgdGFnIC0tbm8tc2lnbiBjb25maWd1cmVkIHRhZy5ncGdzaWduIHNraXAgR1BHIHNpZ24nIFwKKwkndGVzdF9jb25maWcgdGFnLmdwZ3NpZ24gdHJ1ZSAmJgorCWdpdCB0YWcgLWEgLS1uby1zaWduIC1tICJBIG1lc3NhZ2UiIG5vLXNpZ24gJiYKKwlnZXRfdGFnX21zZyBuby1zaWduPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSd0cnlpbmcgdG8gY3JlYXRlIGEgc2lnbmVkIHRhZyB3aXRoIG5vbi1leGlzdGluZyAtRiBmaWxlIHNob3VsZCBmYWlsJyAnCisJISB0ZXN0IC1mIG5vbmV4aXN0aW5nZmlsZSAmJgorCSEgdGFnX2V4aXN0cyBub3NpZ3RhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXMgLUYgbm9uZXhpc3RpbmdmaWxlIG5vc2lndGFnICYmCisJISB0YWdfZXhpc3RzIG5vc2lndGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICd2ZXJpZnlpbmcgYSBzaWduZWQgdGFnIHNob3VsZCBzdWNjZWVkJyBcCisJJ2dpdCB0YWcgLXYgc2lnbmVkLXRhZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeWluZyB0d28gc2lnbmVkIHRhZ3MgaW4gb25lIGNvbW1hbmQgc2hvdWxkIHN1Y2NlZWQnIFwKKwknZ2l0IHRhZyAtdiBzaWduZWQtdGFnIGZpbGUtc2lnbmVkLXRhZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSd2ZXJpZnlpbmcgbWFueSBzaWduZWQgYW5kIG5vbi1zaWduZWQgdGFncyBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXYgc2lnbmVkLXRhZyBhbm5vdGF0ZWQtdGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBmaWxlLWFubm90YXRlZC10YWcgZmlsZS1zaWduZWQtdGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBhbm5vdGF0ZWQtdGFnIFwKKwkJZmlsZS1zaWduZWQtdGFnIGZpbGUtYW5ub3RhdGVkLXRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXYgc2lnbmVkLXRhZyBhbm5vdGF0ZWQtdGFnIGZpbGUtc2lnbmVkLXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5aW5nIGEgZm9yZ2VkIHRhZyBzaG91bGQgZmFpbCcgJworCWZvcmdlZD0kKGdpdCBjYXQtZmlsZSB0YWcgc2lnbmVkLXRhZyB8CisJCXNlZCAtZSAicy9zaWduZWQtdGFnL2ZvcmdlZC10YWcvIiB8CisJCWdpdCBta3RhZykgJiYKKwlnaXQgdGFnIGZvcmdlZC10YWcgJGZvcmdlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXYgZm9yZ2VkLXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5aW5nIGEgcHJvcGVyIHRhZyB3aXRoIC0tZm9ybWF0IHBhc3MgYW5kIGZvcm1hdCBhY2NvcmRpbmdseScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl0YWduYW1lIDogc2lnbmVkLXRhZworCUVPRgorCWdpdCB0YWcgLXYgLS1mb3JtYXQ9InRhZ25hbWUgOiAlKHRhZykiICJzaWduZWQtdGFnIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5aW5nIGEgZm9yZ2VkIHRhZyB3aXRoIC0tZm9ybWF0IHNob3VsZCBmYWlsIHNpbGVudGx5JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiAtLWZvcm1hdD0idGFnbmFtZSA6ICUodGFnKSIgImZvcmdlZC10YWciID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKKyMgYmxhbmsgYW5kIGVtcHR5IG1lc3NhZ2VzIGZvciBzaWduZWQgdGFnczoKKworZ2V0X3RhZ19oZWFkZXIgZW1wdHktc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYW4gZW1wdHkgLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLW0gIiIgZW1wdHktc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIGVtcHR5LXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC12IGVtcHR5LXNpZ25lZC10YWcKKycKKworPnNpZ2VtcHR5ZmlsZQorZ2V0X3RhZ19oZWFkZXIgZW1wdHlmaWxlLXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIGFuIGVtcHR5IC1GIG1lc3NhZ2VmaWxlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtRiBzaWdlbXB0eWZpbGUgZW1wdHlmaWxlLXNpZ25lZC10YWcgJiYKKwlnZXRfdGFnX21zZyBlbXB0eWZpbGUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLXYgZW1wdHlmaWxlLXNpZ25lZC10YWcKKycKKworcHJpbnRmICdcblxuICBcblx0XG5MZWFkaW5nIGJsYW5rIGxpbmVzXG4nID4gc2lnYmxhbmtzZmlsZQorcHJpbnRmICdcblx0IFx0ICBcblJlcGVhdGVkIGJsYW5rIGxpbmVzXG4nID4+c2lnYmxhbmtzZmlsZQorcHJpbnRmICdcblxuXG5UcmFpbGluZyBzcGFjZXMgICAgICBcdCAgXG4nID4+c2lnYmxhbmtzZmlsZQorcHJpbnRmICdcblRyYWlsaW5nIGJsYW5rIGxpbmVzXG5cblx0IFxuXG4nID4+c2lnYmxhbmtzZmlsZQorZ2V0X3RhZ19oZWFkZXIgYmxhbmtzLXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorY2F0ID4+ZXhwZWN0IDw8RU9GCitMZWFkaW5nIGJsYW5rIGxpbmVzCisKK1JlcGVhdGVkIGJsYW5rIGxpbmVzCisKK1RyYWlsaW5nIHNwYWNlcworCitUcmFpbGluZyBibGFuayBsaW5lcworRU9GCitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknZXh0cmEgYmxhbmtzIGluIHRoZSBtZXNzYWdlIGZvciBhIHNpZ25lZCB0YWcgc2hvdWxkIGJlIHJlbW92ZWQnICcKKwlnaXQgdGFnIC1zIC1GIHNpZ2JsYW5rc2ZpbGUgYmxhbmtzLXNpZ25lZC10YWcgJiYKKwlnZXRfdGFnX21zZyBibGFua3Mtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLXYgYmxhbmtzLXNpZ25lZC10YWcKKycKKworZ2V0X3RhZ19oZWFkZXIgYmxhbmstc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYSBibGFuayAtbSBtZXNzYWdlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtbSAiICAgICAiIGJsYW5rLXNpZ25lZC10YWcgJiYKKwlnZXRfdGFnX21zZyBibGFuay1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtdiBibGFuay1zaWduZWQtdGFnCisnCisKK2VjaG8gJyAgICAgJyA+c2lnYmxhbmtmaWxlCitlY2hvICcnICAgICAgPj5zaWdibGFua2ZpbGUKK2VjaG8gJyAgJyAgICA+PnNpZ2JsYW5rZmlsZQorZ2V0X3RhZ19oZWFkZXIgYmxhbmtmaWxlLXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIGJsYW5rIC1GIGZpbGUgd2l0aCBzcGFjZXMgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1GIHNpZ2JsYW5rZmlsZSBibGFua2ZpbGUtc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIGJsYW5rZmlsZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtdiBibGFua2ZpbGUtc2lnbmVkLXRhZworJworCitwcmludGYgJyAgICAgICcgPnNpZ2JsYW5rbm9ubGZpbGUKK2dldF90YWdfaGVhZGVyIGJsYW5rbm9ubGZpbGUtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggc3BhY2VzIGFuZCBubyBuZXdsaW5lIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtRiBzaWdibGFua25vbmxmaWxlIGJsYW5rbm9ubGZpbGUtc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIGJsYW5rbm9ubGZpbGUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLXYgYmxhbmtub25sZmlsZS1zaWduZWQtdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaWduZWQgdGFnIHdpdGggZW1iZWRkZWQgUEdQIG1lc3NhZ2UnICcKKwljYXQgPm1zZyA8PC1cRU9GICYmCisJLS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tCisKKwl0aGlzIGlzIG5vdCBhIHJlYWwgUEdQIG1lc3NhZ2UKKwktLS0tLUVORCBQR1AgTUVTU0FHRS0tLS0tCisJRU9GCisJZ2l0IHRhZyAtcyAtRiBtc2cgY29uZnVzaW5nLXBncC1tZXNzYWdlICYmCisJZ2l0IHRhZyAtdiBjb25mdXNpbmctcGdwLW1lc3NhZ2UKKycKKworIyBtZXNzYWdlcyB3aXRoIGNvbW1lbnRlZCBsaW5lcyBmb3Igc2lnbmVkIHRhZ3M6CisKK2NhdCA+c2lnY29tbWVudHNmaWxlIDw8RU9GCisjIEEgY29tbWVudAorCisjIyMjIyMjIyMjIyMKK1RoZSBtZXNzYWdlLgorIyMjIyMjIyMjIyMjCitPbmUgbGluZS4KKworCisjIGNvbW1lbnRlZCBsaW5lcworIyBjb21tZW50ZWQgbGluZXMKKworQW5vdGhlciBsaW5lLgorIyBjb21tZW50cworCitMYXN0IGxpbmUuCitFT0YKK2dldF90YWdfaGVhZGVyIGNvbW1lbnRzLXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorY2F0ID4+ZXhwZWN0IDw8RU9GCitUaGUgbWVzc2FnZS4KK09uZSBsaW5lLgorCitBbm90aGVyIGxpbmUuCisKK0xhc3QgbGluZS4KK0VPRgorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIGEgLUYgZmlsZSB3aXRoICNjb21tZW50cyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLUYgc2lnY29tbWVudHNmaWxlIGNvbW1lbnRzLXNpZ25lZC10YWcgJiYKKwlnZXRfdGFnX21zZyBjb21tZW50cy1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtdiBjb21tZW50cy1zaWduZWQtdGFnCisnCisKK2dldF90YWdfaGVhZGVyIGNvbW1lbnQtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggI2NvbW1lbnRlZCAtbSBtZXNzYWdlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtbSAiI2NvbW1lbnQiIGNvbW1lbnQtc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIGNvbW1lbnQtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLXYgY29tbWVudC1zaWduZWQtdGFnCisnCisKK2VjaG8gJyNjb21tZW50JyA+c2lnY29tbWVudGZpbGUKK2VjaG8gJycgICAgICAgICA+PnNpZ2NvbW1lbnRmaWxlCitlY2hvICcjIyMjJyAgICAgPj5zaWdjb21tZW50ZmlsZQorZ2V0X3RhZ19oZWFkZXIgY29tbWVudGZpbGUtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggI2NvbW1lbnRlZCAtRiBtZXNzYWdlZmlsZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLUYgc2lnY29tbWVudGZpbGUgY29tbWVudGZpbGUtc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIGNvbW1lbnRmaWxlLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC12IGNvbW1lbnRmaWxlLXNpZ25lZC10YWcKKycKKworcHJpbnRmICcjY29tbWVudCcgPnNpZ2NvbW1lbnRub25sZmlsZQorZ2V0X3RhZ19oZWFkZXIgY29tbWVudG5vbmxmaWxlLXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIGEgI2NvbW1lbnQgYW5kIG5vIG5ld2xpbmUgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1GIHNpZ2NvbW1lbnRub25sZmlsZSBjb21tZW50bm9ubGZpbGUtc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIGNvbW1lbnRub25sZmlsZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtdiBjb21tZW50bm9ubGZpbGUtc2lnbmVkLXRhZworJworCisjIGxpc3RpbmcgbWVzc2FnZXMgZm9yIHNpZ25lZCB0YWdzOgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2xpc3RpbmcgdGhlIG9uZS1saW5lIG1lc3NhZ2Ugb2YgYSBzaWduZWQgdGFnIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtbSAiQSBtZXNzYWdlIGxpbmUgc2lnbmVkIiBzdGFnLW9uZS1saW5lICYmCisKKwllY2hvICJzdGFnLW9uZS1saW5lIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbCB8IGdyZXAgIl5zdGFnLW9uZS1saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4wIC1sIHwgZ3JlcCAiXnN0YWctb25lLWxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjAgLWwgc3RhZy1vbmUtbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyAic3RhZy1vbmUtbGluZSAgIEEgbWVzc2FnZSBsaW5lIHNpZ25lZCIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLW4xIC1sIHwgZ3JlcCAiXnN0YWctb25lLWxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbiAtbCB8IGdyZXAgIl5zdGFnLW9uZS1saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4xIC1sIHN0YWctb25lLWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMiAtbCBzdGFnLW9uZS1saW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjk5OSAtbCBzdGFnLW9uZS1saW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknbGlzdGluZyB0aGUgemVyby1saW5lcyBtZXNzYWdlIG9mIGEgc2lnbmVkIHRhZyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLW0gIiIgc3RhZy16ZXJvLWxpbmVzICYmCisKKwllY2hvICJzdGFnLXplcm8tbGluZXMiID5leHBlY3QgJiYKKwlnaXQgdGFnIC1sIHwgZ3JlcCAiXnN0YWctemVyby1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMCAtbCB8IGdyZXAgIl5zdGFnLXplcm8tbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjAgLWwgc3RhZy16ZXJvLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICJzdGFnLXplcm8tbGluZXMgIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbjEgLWwgfCBncmVwICJec3RhZy16ZXJvLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4gLWwgfCBncmVwICJec3RhZy16ZXJvLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4xIC1sIHN0YWctemVyby1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4yIC1sIHN0YWctemVyby1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW45OTkgLWwgc3RhZy16ZXJvLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2VjaG8gJ3N0YWcgbGluZSBvbmUnID5zaWd0YWdtc2cKK2VjaG8gJ3N0YWcgbGluZSB0d28nID4+c2lndGFnbXNnCitlY2hvICdzdGFnIGxpbmUgdGhyZWUnID4+c2lndGFnbXNnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2xpc3RpbmcgbWFueSBtZXNzYWdlIGxpbmVzIG9mIGEgc2lnbmVkIHRhZyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLUYgc2lndGFnbXNnIHN0YWctbGluZXMgJiYKKworCWVjaG8gInN0YWctbGluZXMiID5leHBlY3QgJiYKKwlnaXQgdGFnIC1sIHwgZ3JlcCAiXnN0YWctbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjAgLWwgfCBncmVwICJec3RhZy1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMCAtbCBzdGFnLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICJzdGFnLWxpbmVzICAgICAgc3RhZyBsaW5lIG9uZSIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLW4xIC1sIHwgZ3JlcCAiXnN0YWctbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbiAtbCB8IGdyZXAgIl5zdGFnLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4xIC1sIHN0YWctbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gIiAgICBzdGFnIGxpbmUgdHdvIiA+PmV4cGVjdCAmJgorCWdpdCB0YWcgLW4yIC1sIHwgZ3JlcCAiXiAqc3RhZy5saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4yIC1sIHN0YWctbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gIiAgICBzdGFnIGxpbmUgdGhyZWUiID4+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbjMgLWwgfCBncmVwICJeICpzdGFnLmxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjMgLWwgc3RhZy1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW40IC1sIHwgZ3JlcCAiXiAqc3RhZy5saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW40IC1sIHN0YWctbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uOTkgLWwgfCBncmVwICJeICpzdGFnLmxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjk5IC1sIHN0YWctbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyB0YWdzIHBvaW50aW5nIHRvIG9iamVjdHMgZGlmZmVyZW50IGZyb20gY29tbWl0czoKKwordHJlZT0kKGdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0pCitibG9iPSQoZ2l0IHJldi1wYXJzZSBIRUFEOmZvbykKK3RhZz0kKGdpdCByZXYtcGFyc2Ugc2lnbmVkLXRhZyAyPi9kZXYvbnVsbCkKKworZ2V0X3RhZ19oZWFkZXIgdHJlZS1zaWduZWQtdGFnICR0cmVlIHRyZWUgJHRpbWUgPmV4cGVjdAorZWNobyAiQSBtZXNzYWdlIGZvciBhIHRyZWUiID4+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHBvaW50aW5nIHRvIGEgdHJlZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLW0gIkEgbWVzc2FnZSBmb3IgYSB0cmVlIiB0cmVlLXNpZ25lZC10YWcgSEVBRF57dHJlZX0gJiYKKwlnZXRfdGFnX21zZyB0cmVlLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZ2V0X3RhZ19oZWFkZXIgYmxvYi1zaWduZWQtdGFnICRibG9iIGJsb2IgJHRpbWUgPmV4cGVjdAorZWNobyAiQSBtZXNzYWdlIGZvciBhIGJsb2IiID4+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHBvaW50aW5nIHRvIGEgYmxvYiBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLW0gIkEgbWVzc2FnZSBmb3IgYSBibG9iIiBibG9iLXNpZ25lZC10YWcgSEVBRDpmb28gJiYKKwlnZXRfdGFnX21zZyBibG9iLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZ2V0X3RhZ19oZWFkZXIgdGFnLXNpZ25lZC10YWcgJHRhZyB0YWcgJHRpbWUgPmV4cGVjdAorZWNobyAiQSBtZXNzYWdlIGZvciBhbm90aGVyIHRhZyIgPj5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgcG9pbnRpbmcgdG8gYW5vdGhlciB0YWcgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1tICJBIG1lc3NhZ2UgZm9yIGFub3RoZXIgdGFnIiB0YWctc2lnbmVkLXRhZyBzaWduZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgdGFnLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyB1c2FnZSB3aXRoIHJmYzE5OTEgc2lnbmF0dXJlcworZ2V0X3RhZ19oZWFkZXIgcmZjMTk5MS1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2VjaG8gIlJGQzE5OTEgc2lnbmVkIHRhZyIgPj5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIE1FU1NBR0UtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHLFJGQzE5OTEgXAorCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCByZmMxOTkxJyAnCisJZWNobyAicmZjMTk5MSIgPmdwZ2hvbWUvZ3BnLmNvbmYgJiYKKwlnaXQgdGFnIC1zIC1tICJSRkMxOTkxIHNpZ25lZCB0YWciIHJmYzE5OTEtc2lnbmVkLXRhZyAkY29tbWl0ICYmCisJZ2V0X3RhZ19tc2cgcmZjMTk5MS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZmFrZWVkaXRvciA8PCdFT0YnCisjIS9iaW4vc2gKK2NwICIkMSIgYWN0dWFsCitFT0YKK2NobW9kICt4IGZha2VlZGl0b3IKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcsUkZDMTk5MSBcCisJJ3JlZWRpdGluZyBhIHNpZ25lZCB0YWcgYm9keSBvbWl0cyBzaWduYXR1cmUnICcKKwllY2hvICJyZmMxOTkxIiA+Z3BnaG9tZS9ncGcuY29uZiAmJgorCWVjaG8gIlJGQzE5OTEgc2lnbmVkIHRhZyIgPmV4cGVjdCAmJgorCUdJVF9FRElUT1I9Li9mYWtlZWRpdG9yIGdpdCB0YWcgLWYgLXMgcmZjMTk5MS1zaWduZWQtdGFnICRjb21taXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHLFJGQzE5OTEgXAorCSd2ZXJpZnlpbmcgcmZjMTk5MSBzaWduYXR1cmUnICcKKwllY2hvICJyZmMxOTkxIiA+Z3BnaG9tZS9ncGcuY29uZiAmJgorCWdpdCB0YWcgLXYgcmZjMTk5MS1zaWduZWQtdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHLFJGQzE5OTEgXAorCSdsaXN0IHRhZyB3aXRoIHJmYzE5OTEgc2lnbmF0dXJlJyAnCisJZWNobyAicmZjMTk5MSIgPmdwZ2hvbWUvZ3BnLmNvbmYgJiYKKwllY2hvICJyZmMxOTkxLXNpZ25lZC10YWcgUkZDMTk5MSBzaWduZWQgdGFnIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbCAtbjEgcmZjMTk5MS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbCAtbjIgcmZjMTk5MS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbCAtbjk5OSByZmMxOTkxLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworcm0gLWYgZ3BnaG9tZS9ncGcuY29uZgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyxSRkMxOTkxIFwKKwkndmVyaWZ5aW5nIHJmYzE5OTEgc2lnbmF0dXJlIHdpdGhvdXQgLS1yZmMxOTkxJyAnCisJZ2l0IHRhZyAtdiByZmMxOTkxLXNpZ25lZC10YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcsUkZDMTk5MSBcCisJJ2xpc3QgdGFnIHdpdGggcmZjMTk5MSBzaWduYXR1cmUgd2l0aG91dCAtLXJmYzE5OTEnICcKKwllY2hvICJyZmMxOTkxLXNpZ25lZC10YWcgUkZDMTk5MSBzaWduZWQgdGFnIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbCAtbjEgcmZjMTk5MS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbCAtbjIgcmZjMTk5MS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbCAtbjk5OSByZmMxOTkxLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcsUkZDMTk5MSBcCisJJ3JlZWRpdGluZyBhIHNpZ25lZCB0YWcgYm9keSBvbWl0cyBzaWduYXR1cmUnICcKKwllY2hvICJSRkMxOTkxIHNpZ25lZCB0YWciID5leHBlY3QgJiYKKwlHSVRfRURJVE9SPS4vZmFrZWVkaXRvciBnaXQgdGFnIC1mIC1zIHJmYzE5OTEtc2lnbmVkLXRhZyAkY29tbWl0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIHRyeSB0byBzaWduIHdpdGggYmFkIHVzZXIuc2lnbmluZ2tleQordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdnaXQgdGFnIC1zIGZhaWxzIGlmIGdwZyBpcyBtaXNjb25maWd1cmVkIChiYWQga2V5KScgXAorCSd0ZXN0X2NvbmZpZyB1c2VyLnNpZ25pbmdrZXkgQm9iVGhlTW91c2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1zIC1tIHRhaWwgdGFnLWdwZy1mYWlsdXJlJworCisjIHRyeSB0byBwcm9kdWNlIGludmFsaWQgc2lnbmF0dXJlCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2dpdCB0YWcgLXMgZmFpbHMgaWYgZ3BnIGlzIG1pc2NvbmZpZ3VyZWQgKGJhZCBzaWduYXR1cmUgZm9ybWF0KScgXAorCSd0ZXN0X2NvbmZpZyBncGcucHJvZ3JhbSBlY2hvICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXMgLW0gdGFpbCB0YWctZ3BnLWZhaWx1cmUnCisKKyMgdHJ5IHRvIHNpZ24gd2l0aCBiYWQgdXNlci5zaWduaW5na2V5Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNIFwKKwknZ2l0IHRhZyAtcyBmYWlscyBpZiBncGdzbSBpcyBtaXNjb25maWd1cmVkIChiYWQga2V5KScgXAorCSd0ZXN0X2NvbmZpZyB1c2VyLnNpZ25pbmdrZXkgQm9iVGhlTW91c2UgJiYKKwkgdGVzdF9jb25maWcgZ3BnLmZvcm1hdCB4NTA5ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXMgLW0gdGFpbCB0YWctZ3BnLWZhaWx1cmUnCisKKyMgdHJ5IHRvIHByb2R1Y2UgaW52YWxpZCBzaWduYXR1cmUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gXAorCSdnaXQgdGFnIC1zIGZhaWxzIGlmIGdwZ3NtIGlzIG1pc2NvbmZpZ3VyZWQgKGJhZCBzaWduYXR1cmUgZm9ybWF0KScgXAorCSd0ZXN0X2NvbmZpZyBncGcueDUwOS5wcm9ncmFtIGVjaG8gJiYKKwkgdGVzdF9jb25maWcgZ3BnLmZvcm1hdCB4NTA5ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXMgLW0gdGFpbCB0YWctZ3BnLWZhaWx1cmUnCisKKyMgdHJ5IHRvIHZlcmlmeSB3aXRob3V0IGdwZzoKKworcm0gLXJmIGdwZ2hvbWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwkndmVyaWZ5IHNpZ25lZCB0YWcgZmFpbHMgd2hlbiBwdWJsaWMga2V5IGlzIG5vdCBwcmVzZW50JyBcCisJJ3Rlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXYgc2lnbmVkLXRhZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2dpdCB0YWcgLWEgZmFpbHMgaWYgdGFnIGFubm90YXRpb24gaXMgZW1wdHknICcKKwkhIChHSVRfRURJVE9SPWNhdCBnaXQgdGFnIC1hIGluaXRpYWwtY29tbWVudCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ21lc3NhZ2UgaW4gZWRpdG9yIGhhcyBpbml0aWFsIGNvbW1lbnQnICcKKwkhIChHSVRfRURJVE9SPWNhdCBnaXQgdGFnIC1hIGluaXRpYWwtY29tbWVudCA+IGFjdHVhbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVzc2FnZSBpbiBlZGl0b3IgaGFzIGluaXRpYWwgY29tbWVudDogZmlyc3QgbGluZScgJworCSMgY2hlY2sgdGhlIGZpcnN0IGxpbmUgLS0tIHNob3VsZCBiZSBlbXB0eQorCWVjaG8gPmZpcnN0LmV4cGVjdCAmJgorCXNlZCAtZSAxcSA8YWN0dWFsID5maXJzdC5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZmlyc3QuZXhwZWN0IGZpcnN0LmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbWVzc2FnZSBpbiBlZGl0b3IgaGFzIGluaXRpYWwgY29tbWVudDogcmVtYWluZGVyJyAnCisJIyByZW1vdmUgY29tbWVudGVkIGxpbmVzIGZyb20gdGhlIHJlbWFpbmRlciAtLSBzaG91bGQgYmUgZW1wdHkKKwlzZWQgLWUgMWQgLWUgIi9eIy9kIiA8YWN0dWFsID5yZXN0LmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSByZXN0LmFjdHVhbAorJworCitnZXRfdGFnX2hlYWRlciByZXVzZSAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICJBbiBhbm5vdGF0aW9uIHRvIGJlIHJldXNlZCIgPj4gZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknb3ZlcndyaXRpbmcgYW4gYW5ub3RhdGVkIHRhZyBzaG91bGQgdXNlIGl0cyBwcmV2aW91cyBib2R5JyAnCisJZ2l0IHRhZyAtYSAtbSAiQW4gYW5ub3RhdGlvbiB0byBiZSByZXVzZWQiIHJldXNlICYmCisJR0lUX0VESVRPUj10cnVlIGdpdCB0YWcgLWYgLWEgcmV1c2UgJiYKKwlnZXRfdGFnX21zZyByZXVzZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlbmFtZSBmb3IgdGhlIG1lc3NhZ2UgaXMgcmVsYXRpdmUgdG8gY3dkJyAnCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyAiVGFnIG1lc3NhZ2UgaW4gdG9wIGRpcmVjdG9yeSIgPm1zZ2ZpbGUtNSAmJgorCWVjaG8gIlRhZyBtZXNzYWdlIGluIHN1YiBkaXJlY3RvcnkiID5zdWJkaXIvbXNnZmlsZS01ICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHRhZyAtYSAtRiBtc2dmaWxlLTUgdGFnLWZyb20tc3ViZGlyCisJKSAmJgorCWdpdCBjYXQtZmlsZSB0YWcgdGFnLWZyb20tc3ViZGlyIHwgZ3JlcCAiaW4gc3ViIGRpcmVjdG9yeSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZW5hbWUgZm9yIHRoZSBtZXNzYWdlIGlzIHJlbGF0aXZlIHRvIGN3ZCcgJworCWVjaG8gIlRhZyBtZXNzYWdlIGluIHN1YiBkaXJlY3RvcnkiID5zdWJkaXIvbXNnZmlsZS02ICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHRhZyAtYSAtRiBtc2dmaWxlLTYgdGFnLWZyb20tc3ViZGlyLTIKKwkpICYmCisJZ2l0IGNhdC1maWxlIHRhZyB0YWctZnJvbS1zdWJkaXItMiB8IGdyZXAgImluIHN1YiBkaXJlY3RvcnkiCisnCisKKyMgY3JlYXRlIGEgZmV3IG1vcmUgY29tbWl0cyB0byB0ZXN0IC0tY29udGFpbnMKKworaGFzaDE9JChnaXQgcmV2LXBhcnNlIEhFQUQpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIHNlY29uZCBjb21taXQgYW5kIHRhZycgJworCWVjaG8gZm9vLTIuMCA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCWdpdCB0YWcgdjIuMAorJworCitoYXNoMj0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgdGhpcmQgY29tbWl0IHdpdGhvdXQgdGFnJyAnCisJZWNobyBmb28tZGV2ID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQKKycKKworaGFzaDM9JChnaXQgcmV2LXBhcnNlIEhFQUQpCisKKyMgc2ltcGxlIGxpbmVhciBjaGVja3Mgb2YgLS1jb250aW51ZQorCitjYXQgPiBleHBlY3RlZCA8PEVPRgordjAuMi4xCit2MS4wCit2MS4wLjEKK3YxLjEuMwordjIuMAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIHRoYXQgZmlyc3QgY29tbWl0IGlzIGluIGFsbCB0YWdzIChoYXNoKScgIgorCWdpdCB0YWcgLWwgLS1jb250YWlucyAkaGFzaDEgdiogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCisjIG90aGVyIHdheXMgb2Ygc3BlY2lmeWluZyB0aGUgY29tbWl0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyB0aGF0IGZpcnN0IGNvbW1pdCBpcyBpbiBhbGwgdGFncyAodGFnKScgIgorCWdpdCB0YWcgLWwgLS1jb250YWlucyB2MS4wIHYqID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgdGhhdCBmaXJzdCBjb21taXQgaXMgaW4gYWxsIHRhZ3MgKHJlbGF0aXZlKScgIgorCWdpdCB0YWcgLWwgLS1jb250YWlucyBIRUFEfjIgdiogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCisjIEFsbCB0aGUgLS1jb250YWlucyB0ZXN0cyBhYm92ZSwgYnV0IHdpdGggLS1uby1jb250YWlucwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgdGhhdCBmaXJzdCBjb21taXQgaXMgbm90IGxpc3RlZCBpbiBhbnkgdGFnIHdpdGggLS1uby1jb250YWlucyAgKGhhc2gpJyAiCisJZ2l0IHRhZyAtbCAtLW5vLWNvbnRhaW5zICRoYXNoMSB2KiA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyB0aGF0IGZpcnN0IGNvbW1pdCBpcyBpbiBhbGwgdGFncyAodGFnKScgIgorCWdpdCB0YWcgLWwgLS1uby1jb250YWlucyB2MS4wIHYqID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIHRoYXQgZmlyc3QgY29tbWl0IGlzIGluIGFsbCB0YWdzIChyZWxhdGl2ZSknICIKKwlnaXQgdGFnIC1sIC0tbm8tY29udGFpbnMgSEVBRH4yIHYqID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisiCisKK2NhdCA+IGV4cGVjdGVkIDw8RU9GCit2Mi4wCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgdGhhdCBzZWNvbmQgY29tbWl0IG9ubHkgaGFzIG9uZSB0YWcnICIKKwlnaXQgdGFnIC1sIC0tY29udGFpbnMgJGhhc2gyIHYqID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworY2F0ID4gZXhwZWN0ZWQgPDxFT0YKK3YwLjIuMQordjEuMAordjEuMC4xCit2MS4xLjMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZlcnNlIG9mIHRoZSBsYXN0IHRlc3QsIHdpdGggLS1uby1jb250YWlucycgIgorCWdpdCB0YWcgLWwgLS1uby1jb250YWlucyAkaGFzaDIgdiogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyB0aGF0IHRoaXJkIGNvbW1pdCBoYXMgbm8gdGFncycgIgorCWdpdCB0YWcgLWwgLS1jb250YWlucyAkaGFzaDMgdiogPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKyIKKworY2F0ID4gZXhwZWN0ZWQgPDxFT0YKK3YwLjIuMQordjEuMAordjEuMC4xCit2MS4xLjMKK3YyLjAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb252ZXJzZWx5IC0tbm8tY29udGFpbnMgb24gdGhlIHRoaXJkIGNvbW1pdCBsaXN0cyBhbGwgdGFncycgIgorCWdpdCB0YWcgLWwgLS1uby1jb250YWlucyAkaGFzaDMgdiogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCisjIGhvdyBhYm91dCBhIHNpbXBsZSBtZXJnZT8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgc2ltcGxlIGJyYW5jaCcgJworCWdpdCBicmFuY2ggc3RhYmxlIHYyLjAgJiYKKyAgICAgICAgZ2l0IGNoZWNrb3V0IHN0YWJsZSAmJgorCWVjaG8gZm9vLTMuMCA+IGZvbyAmJgorCWdpdCBjb21taXQgZm9vIC1tIGZvdXJ0aCAmJgorCWdpdCB0YWcgdjMuMAorJworCitoYXNoND0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKworY2F0ID4gZXhwZWN0ZWQgPDxFT0YKK3YzLjAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyB0aGF0IGJyYW5jaCBoZWFkIG9ubHkgaGFzIG9uZSB0YWcnICIKKwlnaXQgdGFnIC1sIC0tY29udGFpbnMgJGhhc2g0IHYqID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworY2F0ID4gZXhwZWN0ZWQgPDxFT0YKK3YwLjIuMQordjEuMAordjEuMC4xCit2MS4xLjMKK3YyLjAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyB0aGF0IGJyYW5jaCBoZWFkIHdpdGggLS1uby1jb250YWlucyBsaXN0cyBhbGwgYnV0IG9uZSB0YWcnICIKKwlnaXQgdGFnIC1sIC0tbm8tY29udGFpbnMgJGhhc2g0IHYqID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2luZyBvcmlnaW5hbCBicmFuY2ggaW50byB0aGlzIGJyYW5jaCcgJworCWdpdCBtZXJnZSAtLXN0cmF0ZWd5PW91cnMgbWFzdGVyICYmCisgICAgICAgIGdpdCB0YWcgdjQuMAorJworCitjYXQgPiBleHBlY3RlZCA8PEVPRgordjQuMAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIHRoYXQgb3JpZ2luYWwgYnJhbmNoIGhlYWQgaGFzIG9uZSB0YWcgbm93JyAiCisJZ2l0IHRhZyAtbCAtLWNvbnRhaW5zICRoYXNoMyB2KiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2NhdCA+IGV4cGVjdGVkIDw8RU9GCit2MC4yLjEKK3YxLjAKK3YxLjAuMQordjEuMS4zCit2Mi4wCit2My4wCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgdGhhdCBvcmlnaW5hbCBicmFuY2ggaGVhZCB3aXRoIC0tbm8tY29udGFpbnMgbGlzdHMgYWxsIGJ1dCBvbmUgdGFnIG5vdycgIgorCWdpdCB0YWcgLWwgLS1uby1jb250YWlucyAkaGFzaDMgdiogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCitjYXQgPiBleHBlY3RlZCA8PEVPRgordjAuMi4xCit2MS4wCit2MS4wLjEKK3YxLjEuMwordjIuMAordjMuMAordjQuMAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIHRoYXQgaW5pdGlhbCBjb21taXQgaXMgaW4gYWxsIHRhZ3MnICIKKwlnaXQgdGFnIC1sIC0tY29udGFpbnMgJGhhc2gxIHYqID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgdGhhdCAtLWNvbnRhaW5zIGNhbiBiZSB1c2VkIGluIG5vbi1saXN0IG1vZGUnICcKKwlnaXQgdGFnIC0tY29udGFpbnMgJGhhc2gxIHYqID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgdGhhdCBpbml0aWFsIGNvbW1pdCBpcyBpbiBhbGwgdGFncyB3aXRoIC0tbm8tY29udGFpbnMnICIKKwlnaXQgdGFnIC1sIC0tbm8tY29udGFpbnMgJGhhc2gxIHYqID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisiCisKKyMgbWl4aW5nIG1vZGVzIGFuZCBvcHRpb25zOgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXhpbmcgaW5jb21wYXRpYmxlcyBtb2RlcyBhbmQgb3B0aW9ucyBpcyBmb3JiaWRkZW4nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1hICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtYSAtbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1zIC1sICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtbSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLW0gLWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1tICJobGFnaCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1tICJobGFnaCIgLWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1GICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtRiAtbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLWYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1mIC1sICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtYSAtcyAtbSAtRiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLWEgLXMgLW0gLUYgLWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1sIC12ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtbCAtZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLWwgLXYgLWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1uIDEwMCAtdiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLWwgLW0gbXNnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtbCAtRiBzb21lIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IC1zICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtLWNvbnRhaW5zIHRhZy10cmVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtLWNvbnRhaW5zIHRhZy1ibG9iICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtLW5vLWNvbnRhaW5zIHRhZy10cmVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtLW5vLWNvbnRhaW5zIHRhZy1ibG9iICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtLWNvbnRhaW5zIC0tbm8tY29udGFpbnMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC0tbm8td2l0aCBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtLW5vLXdpdGhvdXQgSEVBRAorJworCitmb3Igb3B0aW9uIGluIC0tY29udGFpbnMgLS13aXRoIC0tbm8tY29udGFpbnMgLS13aXRob3V0IC0tbWVyZ2VkIC0tbm8tbWVyZ2VkIC0tcG9pbnRzLWF0CitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1peGluZyBpbmNvbXBhdGlibGUgbW9kZXMgd2l0aCAkb3B0aW9uIGlzIGZvcmJpZGRlbiIgIgorCQl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1kICRvcHRpb24gSEVBRCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1kICRvcHRpb24gSEVBRCBzb21lLXRhZyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12ICRvcHRpb24gSEVBRAorCSIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJEb2luZyAnZ2l0IHRhZyAtLWxpc3QtbGlrZSAkb3B0aW9uIDxjb21taXQ+IDxwYXR0ZXJuPiBpcyBwZXJtaXR0ZWQiICIKKwkJZ2l0IHRhZyAtbiAkb3B0aW9uIEhFQUQgSEVBRCAmJgorCQlnaXQgdGFnICRvcHRpb24gSEVBRCBIRUFEICYmCisJCWdpdCB0YWcgJG9wdGlvbgorCSIKK2RvbmUKKworIyBjaGVjayBwb2ludHMtYXQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wb2ludHMtYXQgY2FuIGJlIHVzZWQgaW4gbm9uLWxpc3QgbW9kZScgJworCWVjaG8gdjQuMCA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtLXBvaW50cy1hdD12NC4wICJ2KiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wb2ludHMtYXQgaXMgYSBzeW5vbnltIGZvciAtLXBvaW50cy1hdCBIRUFEJyAnCisJZWNobyB2NC4wID5leHBlY3QgJiYKKwlnaXQgdGFnIC0tcG9pbnRzLWF0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcG9pbnRzLWF0IGZpbmRzIGxpZ2h0d2VpZ2h0IHRhZ3MnICcKKwllY2hvIHY0LjAgPmV4cGVjdCAmJgorCWdpdCB0YWcgLS1wb2ludHMtYXQgdjQuMCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBvaW50cy1hdCBmaW5kcyBhbm5vdGF0ZWQgdGFncyBvZiBjb21taXRzJyAnCisJZ2l0IHRhZyAtbSAidjQuMCwgYW5ub3RhdGVkIiBhbm5vdGF0ZWQtdjQuMCB2NC4wICYmCisJZWNobyBhbm5vdGF0ZWQtdjQuMCA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbCAtLXBvaW50cy1hdCB2NC4wICJhbm5vdGF0ZWQqIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBvaW50cy1hdCBmaW5kcyBhbm5vdGF0ZWQgdGFncyBvZiB0YWdzJyAnCisJZ2l0IHRhZyAtbSAiZGVzY3JpYmluZyB0aGUgdjQuMCB0YWcgb2JqZWN0IiBcCisJCWFubm90YXRlZC1hZ2Fpbi12NC4wIGFubm90YXRlZC12NC4wICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWFubm90YXRlZC1hZ2Fpbi12NC4wCisJYW5ub3RhdGVkLXY0LjAKKwlFT0YKKwlnaXQgdGFnIC0tcG9pbnRzLWF0PWFubm90YXRlZC12NC4wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY3Vyc2l2ZSB0YWdnaW5nIHNob3VsZCBnaXZlIGFkdmljZScgJworCXNlZCAtZSAicy98JC8vIiA8PC1FT0YgPmV4cGVjdCAmJgorCWhpbnQ6IFlvdSBoYXZlIGNyZWF0ZWQgYSBuZXN0ZWQgdGFnLiBUaGUgb2JqZWN0IHJlZmVycmVkIHRvIGJ5IHlvdXIgbmV3IHRhZyBpcworCWhpbnQ6IGFscmVhZHkgYSB0YWcuIElmIHlvdSBtZWFudCB0byB0YWcgdGhlIG9iamVjdCB0aGF0IGl0IHBvaW50cyB0bywgdXNlOgorCWhpbnQ6IHwKKwloaW50OiAJZ2l0IHRhZyAtZiBuZXN0ZWQgYW5ub3RhdGVkLXY0LjBee30KKwloaW50OiBEaXNhYmxlIHRoaXMgbWVzc2FnZSB3aXRoICJnaXQgY29uZmlnIGFkdmljZS5uZXN0ZWRUYWcgZmFsc2UiCisJRU9GCisJZ2l0IHRhZyAtbSBuZXN0ZWQgbmVzdGVkIGFubm90YXRlZC12NC4wIDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgLS1wb2ludHMtYXQgYXJlIE9SLWVkIHRvZ2V0aGVyJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXYyLjAKKwl2My4wCisJRU9GCisJZ2l0IHRhZyAtLXBvaW50cy1hdD12Mi4wIC0tcG9pbnRzLWF0PXYzLjAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGV4aWNhbCBzb3J0JyAnCisJZ2l0IHRhZyBmb28xLjMgJiYKKwlnaXQgdGFnIGZvbzEuNiAmJgorCWdpdCB0YWcgZm9vMS4xMCAmJgorCWdpdCB0YWcgLWwgLS1zb3J0PXJlZm5hbWUgImZvbyoiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZm9vMS4xMAorCWZvbzEuMworCWZvbzEuNgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyc2lvbiBzb3J0JyAnCisJZ2l0IHRhZyAtbCAtLXNvcnQ9dmVyc2lvbjpyZWZuYW1lICJmb28qIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuMworCWZvbzEuNgorCWZvbzEuMTAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVyc2UgdmVyc2lvbiBzb3J0JyAnCisJZ2l0IHRhZyAtbCAtLXNvcnQ9LXZlcnNpb246cmVmbmFtZSAiZm9vKiIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmb28xLjEwCisJZm9vMS42CisJZm9vMS4zCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnNlIGxleGljYWwgc29ydCcgJworCWdpdCB0YWcgLWwgLS1zb3J0PS1yZWZuYW1lICJmb28qIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuNgorCWZvbzEuMworCWZvbzEuMTAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZ3VyZWQgbGV4aWNhbCBzb3J0JyAnCisJdGVzdF9jb25maWcgdGFnLnNvcnQgInY6cmVmbmFtZSIgJiYKKwlnaXQgdGFnIC1sICJmb28qIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuMworCWZvbzEuNgorCWZvbzEuMTAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbiBvdmVycmlkZSBjb25maWd1cmVkIHNvcnQnICcKKwl0ZXN0X2NvbmZpZyB0YWcuc29ydCAidjpyZWZuYW1lIiAmJgorCWdpdCB0YWcgLWwgLS1zb3J0PS1yZWZuYW1lICJmb28qIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuNgorCWZvbzEuMworCWZvbzEuMTAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgc29ydCBwYXJhbWV0ZXIgb24gY29tbWFuZCBsaW5lJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtbCAtLXNvcnQ9bm90dmFsaWQgImZvbyoiID5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBzb3J0IHBhcmFtZXRlciBpbiBjb25maWd1cmF0b2luJyAnCisJdGVzdF9jb25maWcgdGFnLnNvcnQgInY6bm90dmFsaWQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtbCAiZm9vKiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyc2lvbiBzb3J0IHdpdGggcHJlcmVsZWFzZSByZW9yZGVyaW5nJyAnCisJdGVzdF9jb25maWcgdmVyc2lvbnNvcnQucHJlcmVsZWFzZVN1ZmZpeCAtcmMgJiYKKwlnaXQgdGFnIGZvbzEuNi1yYzEgJiYKKwlnaXQgdGFnIGZvbzEuNi1yYzIgJiYKKwlnaXQgdGFnIC1sIC0tc29ydD12ZXJzaW9uOnJlZm5hbWUgImZvbyoiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZm9vMS4zCisJZm9vMS42LXJjMQorCWZvbzEuNi1yYzIKKwlmb28xLjYKKwlmb28xLjEwCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnNlIHZlcnNpb24gc29ydCB3aXRoIHByZXJlbGVhc2UgcmVvcmRlcmluZycgJworCXRlc3RfY29uZmlnIHZlcnNpb25zb3J0LnByZXJlbGVhc2VTdWZmaXggLXJjICYmCisJZ2l0IHRhZyAtbCAtLXNvcnQ9LXZlcnNpb246cmVmbmFtZSAiZm9vKiIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmb28xLjEwCisJZm9vMS42CisJZm9vMS42LXJjMgorCWZvbzEuNi1yYzEKKwlmb28xLjMKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcnNpb24gc29ydCB3aXRoIHByZXJlbGVhc2UgcmVvcmRlcmluZyBhbmQgY29tbW9uIGxlYWRpbmcgY2hhcmFjdGVyJyAnCisJdGVzdF9jb25maWcgdmVyc2lvbnNvcnQucHJlcmVsZWFzZVN1ZmZpeCAtYmVmb3JlICYmCisJZ2l0IHRhZyBmb28xLjctYmVmb3JlMSAmJgorCWdpdCB0YWcgZm9vMS43ICYmCisJZ2l0IHRhZyBmb28xLjctYWZ0ZXIxICYmCisJZ2l0IHRhZyAtbCAtLXNvcnQ9dmVyc2lvbjpyZWZuYW1lICJmb28xLjcqIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuNy1iZWZvcmUxCisJZm9vMS43CisJZm9vMS43LWFmdGVyMQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyc2lvbiBzb3J0IHdpdGggcHJlcmVsZWFzZSByZW9yZGVyaW5nLCBtdWx0aXBsZSBzdWZmaXhlcyBhbmQgY29tbW9uIGxlYWRpbmcgY2hhcmFjdGVyJyAnCisJdGVzdF9jb25maWcgdmVyc2lvbnNvcnQucHJlcmVsZWFzZVN1ZmZpeCAtYmVmb3JlICYmCisJZ2l0IGNvbmZpZyAtLWFkZCB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IC1hZnRlciAmJgorCWdpdCB0YWcgLWwgLS1zb3J0PXZlcnNpb246cmVmbmFtZSAiZm9vMS43KiIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmb28xLjctYmVmb3JlMQorCWZvbzEuNy1hZnRlcjEKKwlmb28xLjcKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcnNpb24gc29ydCB3aXRoIHByZXJlbGVhc2UgcmVvcmRlcmluZywgbXVsdGlwbGUgc3VmZml4ZXMgbWF0Y2ggdGhlIHNhbWUgdGFnJyAnCisJdGVzdF9jb25maWcgdmVyc2lvbnNvcnQucHJlcmVsZWFzZVN1ZmZpeCAtYmFyICYmCisJZ2l0IGNvbmZpZyAtLWFkZCB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IC1mb28tYmF6ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IC1mb28tYmFyICYmCisJZ2l0IHRhZyBmb28xLjgtZm9vLWJhciAmJgorCWdpdCB0YWcgZm9vMS44LWZvby1iYXogJiYKKwlnaXQgdGFnIGZvbzEuOCAmJgorCWdpdCB0YWcgLWwgLS1zb3J0PXZlcnNpb246cmVmbmFtZSAiZm9vMS44KiIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmb28xLjgtZm9vLWJhegorCWZvbzEuOC1mb28tYmFyCisJZm9vMS44CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJzaW9uIHNvcnQgd2l0aCBwcmVyZWxlYXNlIHJlb3JkZXJpbmcsIG11bHRpcGxlIHN1ZmZpeGVzIG1hdGNoIHN0YXJ0aW5nIGF0IHRoZSBzYW1lIHBvc2l0aW9uJyAnCisJdGVzdF9jb25maWcgdmVyc2lvbnNvcnQucHJlcmVsZWFzZVN1ZmZpeCAtcHJlICYmCisJZ2l0IGNvbmZpZyAtLWFkZCB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IC1wcmVyZWxlYXNlICYmCisJZ2l0IHRhZyBmb28xLjktcHJlMSAmJgorCWdpdCB0YWcgZm9vMS45LXByZTIgJiYKKwlnaXQgdGFnIGZvbzEuOS1wcmVyZWxlYXNlMSAmJgorCWdpdCB0YWcgLWwgLS1zb3J0PXZlcnNpb246cmVmbmFtZSAiZm9vMS45KiIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmb28xLjktcHJlMQorCWZvbzEuOS1wcmUyCisJZm9vMS45LXByZXJlbGVhc2UxCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJzaW9uIHNvcnQgd2l0aCBnZW5lcmFsIHN1ZmZpeCByZW9yZGVyaW5nJyAnCisJdGVzdF9jb25maWcgdmVyc2lvbnNvcnQuc3VmZml4IC1hbHBoYSAmJgorCWdpdCBjb25maWcgLS1hZGQgdmVyc2lvbnNvcnQuc3VmZml4IC1iZXRhICYmCisJZ2l0IGNvbmZpZyAtLWFkZCB2ZXJzaW9uc29ydC5zdWZmaXggIiIgICYmCisJZ2l0IGNvbmZpZyAtLWFkZCB2ZXJzaW9uc29ydC5zdWZmaXggLWdhbW1hICYmCisJZ2l0IGNvbmZpZyAtLWFkZCB2ZXJzaW9uc29ydC5zdWZmaXggLWRlbHRhICYmCisJZ2l0IHRhZyBmb28xLjEwLWFscGhhICYmCisJZ2l0IHRhZyBmb28xLjEwLWJldGEgJiYKKwlnaXQgdGFnIGZvbzEuMTAtZ2FtbWEgJiYKKwlnaXQgdGFnIGZvbzEuMTAtZGVsdGEgJiYKKwlnaXQgdGFnIGZvbzEuMTAtdW5saXN0ZWQtc3VmZml4ICYmCisJZ2l0IHRhZyAtbCAtLXNvcnQ9dmVyc2lvbjpyZWZuYW1lICJmb28xLjEwKiIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmb28xLjEwLWFscGhhCisJZm9vMS4xMC1iZXRhCisJZm9vMS4xMAorCWZvbzEuMTAtdW5saXN0ZWQtc3VmZml4CisJZm9vMS4xMC1nYW1tYQorCWZvbzEuMTAtZGVsdGEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcnNpb25zb3J0LnN1ZmZpeCBvdmVycmlkZXMgdmVyc2lvbnNvcnQucHJlcmVsZWFzZVN1ZmZpeCcgJworCXRlc3RfY29uZmlnIHZlcnNpb25zb3J0LnN1ZmZpeCAtYmVmb3JlICYmCisJdGVzdF9jb25maWcgdmVyc2lvbnNvcnQucHJlcmVsZWFzZVN1ZmZpeCAtYWZ0ZXIgJiYKKwlnaXQgdGFnIC1sIC0tc29ydD12ZXJzaW9uOnJlZm5hbWUgImZvbzEuNyoiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZm9vMS43LWJlZm9yZTEKKwlmb28xLjcKKwlmb28xLjctYWZ0ZXIxCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJzaW9uIHNvcnQgd2l0aCB2ZXJ5IGxvbmcgcHJlcmVsZWFzZSBzdWZmaXgnICcKKwl0ZXN0X2NvbmZpZyB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IC12ZXJ5LWxvb29vb29vb29vb29vb29vb29vb29vb29vbmctcHJlcmVsZWFzZS1zdWZmaXggJiYKKwlnaXQgdGFnIC1sIC0tc29ydD12ZXJzaW9uOnJlZm5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBVTElNSVRfU1RBQ0tfU0laRSAnLS1jb250YWlucyBhbmQgLS1uby1jb250YWlucyB3b3JrIGluIGEgZGVlcCByZXBvJyAnCisJaT0xICYmCisJd2hpbGUgdGVzdCAkaSAtbHQgODAwMAorCWRvCisJCWVjaG8gImNvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+ICQoKDEwMDAwMDAwMDAgKyAkaSAqIDEwMCkpICswMjAwCitkYXRhIDw8RU9GCitjb21taXQgIyRpCitFT0YiCisJCXRlc3QgJGkgPSAxICYmIGVjaG8gImZyb20gcmVmcy9oZWFkcy9tYXN0ZXJeMCIKKwkJaT0kKCgkaSArIDEpKQorCWRvbmUgfCBnaXQgZmFzdC1pbXBvcnQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyBmYXItZmFyLWF3YXkgSEVBRF4gJiYKKwlydW5fd2l0aF9saW1pdGVkX3N0YWNrIGdpdCB0YWcgLS1jb250YWlucyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisJcnVuX3dpdGhfbGltaXRlZF9zdGFjayBnaXQgdGFnIC0tbm8tY29udGFpbnMgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ICItZ3QiIDEwIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWZvcm1hdCBzaG91bGQgbGlzdCB0YWdzIGFzIHBlciBmb3JtYXQgZ2l2ZW4nICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmbmFtZSA6IHJlZnMvdGFncy92MS4wCisJcmVmbmFtZSA6IHJlZnMvdGFncy92MS4wLjEKKwlyZWZuYW1lIDogcmVmcy90YWdzL3YxLjEuMworCUVPRgorCWdpdCB0YWcgLWwgLS1mb3JtYXQ9InJlZm5hbWUgOiAlKHJlZm5hbWUpIiAidjEqIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXQgdXAgY29sb3IgdGVzdHMiICcKKwllY2hvICI8UkVEPnYxLjA8UkVTRVQ+IiA+ZXhwZWN0LmNvbG9yICYmCisJZWNobyAidjEuMCIgPmV4cGVjdC5iYXJlICYmCisJY29sb3JfYXJncz0iLS1mb3JtYXQ9JShjb2xvcjpyZWQpJShyZWZuYW1lOnNob3J0KSAtLWxpc3QgdjEuMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJShjb2xvcikgb21pdHRlZCB3aXRob3V0IHR0eScgJworCVRFUk09dnQxMDAgZ2l0IHRhZyAkY29sb3JfYXJncyA+YWN0dWFsLnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYmFyZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJyUoY29sb3IpIHByZXNlbnQgd2l0aCB0dHknICcKKwl0ZXN0X3Rlcm1pbmFsIGdpdCB0YWcgJGNvbG9yX2FyZ3MgPmFjdHVhbC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmNvbG9yIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbG9yIG92ZXJyaWRlcyBhdXRvLWNvbG9yJyAnCisJZ2l0IHRhZyAtLWNvbG9yICRjb2xvcl9hcmdzID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5jb2xvciBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29sb3IudWk9YWx3YXlzIG92ZXJyaWRlcyBhdXRvLWNvbG9yJyAnCisJZ2l0IC1jIGNvbG9yLnVpPWFsd2F5cyB0YWcgJGNvbG9yX2FyZ3MgPmFjdHVhbC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmNvbG9yIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtLW1lcmdlZCB0ZXN0IHRhZ3MnICcKKwlnaXQgdGFnIG1lcmdldGVzdC0xIEhFQUR+MiAmJgorCWdpdCB0YWcgbWVyZ2V0ZXN0LTIgSEVBRH4xICYmCisJZ2l0IHRhZyBtZXJnZXRlc3QtMyBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWVyZ2VkIGNhbiBiZSB1c2VkIGluIG5vbi1saXN0IG1vZGUnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbWVyZ2V0ZXN0LTEKKwltZXJnZXRlc3QtMgorCUVPRgorCWdpdCB0YWcgLS1tZXJnZWQ9bWVyZ2V0ZXN0LTIgIm1lcmdldGVzdCoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWVyZ2VkIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8tbWVyZ2VkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtLW1lcmdlZCBIRUFEIC0tbm8tbWVyZ2VkIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1tZXJnZWQgc2hvd3MgbWVyZ2VkIHRhZ3MnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbWVyZ2V0ZXN0LTEKKwltZXJnZXRlc3QtMgorCUVPRgorCWdpdCB0YWcgLWwgLS1tZXJnZWQ9bWVyZ2V0ZXN0LTIgbWVyZ2V0ZXN0LSogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1tZXJnZWQgc2hvdyB1bm1lcmdlZCB0YWdzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCW1lcmdldGVzdC0zCisJRU9GCisJZ2l0IHRhZyAtbCAtLW5vLW1lcmdlZD1tZXJnZXRlc3QtMiBtZXJnZXRlc3QtKiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLW1lcmdlZCBjYW4gYmUgdXNlZCBpbiBub24tbGlzdCBtb2RlJyAnCisJZ2l0IHRhZyAtLW5vLW1lcmdlZD1tZXJnZXRlc3QtMiBtZXJnZXRlc3QtKiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWJpZ3VvdXMgYnJhbmNoL3RhZ3Mgbm90IG1hcmtlZCcgJworCWdpdCB0YWcgYW1iaWd1b3VzICYmCisJZ2l0IGJyYW5jaCBhbWJpZ3VvdXMgJiYKKwllY2hvIGFtYmlndW91cyA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbCBhbWJpZ3VvdXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250YWlucyBjb21iaW5lZCB3aXRoIC0tbm8tY29udGFpbnMnICcKKwkoCisJCWdpdCBpbml0IG5vLWNvbnRhaW5zICYmCisJCWNkIG5vLWNvbnRhaW5zICYmCisJCXRlc3RfY29tbWl0IHYwLjEgJiYKKwkJdGVzdF9jb21taXQgdjAuMiAmJgorCQl0ZXN0X2NvbW1pdCB2MC4zICYmCisJCXRlc3RfY29tbWl0IHYwLjQgJiYKKwkJdGVzdF9jb21taXQgdjAuNSAmJgorCQljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJdjAuMgorCQl2MC4zCisJCXYwLjQKKwkJRU9GCisJCWdpdCB0YWcgLS1jb250YWlucyB2MC4yIC0tbm8tY29udGFpbnMgdjAuNSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKworIyBBcyB0aGUgZG9jcyBzYXksIGxpc3QgdGFncyB3aGljaCBjb250YWluIGEgc3BlY2lmaWVkICpjb21taXQqLiBXZQorIyBkb24ndCByZWN1cnNlIGRvd24gdG8gdGFncyBmb3IgdHJlZXMgb3IgYmxvYnMgcG9pbnRlZCB0byBieSAqdGhvc2UqCisjIGNvbW1pdHMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEb2VzIC0tW25vLV1jb250YWlucyBzdG9wIGF0IGNvbW1pdHM/IFllcyEnICcKKwljZCBuby1jb250YWlucyAmJgorCWJsb2I9JChnaXQgcmV2LXBhcnNlIHYwLjM6djAuMy50KSAmJgorCXRyZWU9JChnaXQgcmV2LXBhcnNlIHYwLjNee3RyZWV9KSAmJgorCWdpdCB0YWcgdGFnLWJsb2IgJGJsb2IgJiYKKwlnaXQgdGFnIHRhZy10cmVlICR0cmVlICYmCisJZ2l0IHRhZyAtLWNvbnRhaW5zIHYwLjMgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCXYwLjMKKwl2MC40CisJdjAuNQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCB0YWcgLS1uby1jb250YWlucyB2MC4zID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwl2MC4xCisJdjAuMgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDUtZWRpdG9yLnNoIGIvdC90NzAwNS1lZGl0b3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWZjZjI4MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMDUtZWRpdG9yLnNoCkBAIC0wLDAgKzEsMTMxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nR0lUX0VESVRPUiwgY29yZS5lZGl0b3IsIGFuZCBzdHVmZicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Vuc2V0IEVESVRPUiBWSVNVQUwgR0lUX0VESVRPUgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlcm1pbmUgZGVmYXVsdCBlZGl0b3InICcKKworCXZpPSQoVEVSTT12dDEwMCBnaXQgdmFyIEdJVF9FRElUT1IpICYmCisJdGVzdCAtbiAiJHZpIgorCisnCisKK2lmICEgZXhwciAiJHZpIiA6ICdbYS16XSokJyA+L2Rldi9udWxsCit0aGVuCisJdmk9CitmaQorCitmb3IgaSBpbiBHSVRfRURJVE9SIGNvcmVfZWRpdG9yIEVESVRPUiBWSVNVQUwgJHZpCitkbworCWNhdCA+ZS0kaS5zaCA8PC1FT0YKKwkjISRTSEVMTF9QQVRICisJZWNobyAiRWRpdGVkIGJ5ICRpIiA+IlwkMSIKKwlFT0YKKwljaG1vZCAreCBlLSRpLnNoCitkb25lCisKK2lmICEgdGVzdCAteiAiJHZpIgordGhlbgorCW12IGUtJHZpLnNoICR2aQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwltc2c9IkhhbmQtZWRpdGVkIiAmJgorCXRlc3RfY29tbWl0ICIkbXNnIiAmJgorCWVjaG8gIiRtc2ciID5leHBlY3QgJiYKKwlnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcyA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCitURVJNPWR1bWIKK2V4cG9ydCBURVJNCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkdW1iIHNob3VsZCBlcnJvciBvdXQgd2hlbiBmYWxsaW5nIGJhY2sgb24gdmknICcKKworCWlmIGdpdCBjb21taXQgLS1hbWVuZAorCXRoZW4KKwkJZWNobyAiT29wcz8iCisJCWZhbHNlCisJZWxzZQorCQk6IGhhcHB5CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHVtYiBzaG91bGQgcHJlZmVyIEVESVRPUiB0byBWSVNVQUwnICcKKworCUVESVRPUj0uL2UtRURJVE9SLnNoICYmCisJVklTVUFMPS4vZS1WSVNVQUwuc2ggJiYKKwlleHBvcnQgRURJVE9SIFZJU1VBTCAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAmJgorCXRlc3QgIiQoZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JXMpIiA9ICJFZGl0ZWQgYnkgRURJVE9SIgorCisnCisKK1RFUk09dnQxMDAKK2V4cG9ydCBURVJNCitmb3IgaSBpbiAkdmkgRURJVE9SIFZJU1VBTCBjb3JlX2VkaXRvciBHSVRfRURJVE9SCitkbworCWVjaG8gIkVkaXRlZCBieSAkaSIgPmV4cGVjdAorCXVuc2V0IEVESVRPUiBWSVNVQUwgR0lUX0VESVRPUgorCWdpdCBjb25maWcgLS11bnNldC1hbGwgY29yZS5lZGl0b3IKKwljYXNlICIkaSIgaW4KKwljb3JlX2VkaXRvcikKKwkJZ2l0IGNvbmZpZyBjb3JlLmVkaXRvciAuL2UtY29yZV9lZGl0b3Iuc2gKKwkJOzsKKwlbQS1aXSopCisJCWV2YWwgIiRpPS4vZS0kaS5zaCIKKwkJZXhwb3J0ICRpCisJCTs7CisJZXNhYworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlVzaW5nICRpIiAnCisJCWdpdCAtLWV4ZWMtcGF0aD0uIGNvbW1pdCAtLWFtZW5kICYmCisJCWdpdCBzaG93IC1zIC0tcHJldHR5PW9uZWxpbmUgfAorCQlzZWQgLWUgInMvXlswLTlhLWZdKiAvLyIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworZG9uZQorCit1bnNldCBFRElUT1IgVklTVUFMIEdJVF9FRElUT1IKK2dpdCBjb25maWcgLS11bnNldC1hbGwgY29yZS5lZGl0b3IKK2ZvciBpIGluICR2aSBFRElUT1IgVklTVUFMIGNvcmVfZWRpdG9yIEdJVF9FRElUT1IKK2RvCisJZWNobyAiRWRpdGVkIGJ5ICRpIiA+ZXhwZWN0CisJY2FzZSAiJGkiIGluCisJY29yZV9lZGl0b3IpCisJCWdpdCBjb25maWcgY29yZS5lZGl0b3IgLi9lLWNvcmVfZWRpdG9yLnNoCisJCTs7CisJW0EtWl0qKQorCQlldmFsICIkaT0uL2UtJGkuc2giCisJCWV4cG9ydCAkaQorCQk7OworCWVzYWMKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJVc2luZyAkaSAob3ZlcnJpZGUpIiAnCisJCWdpdCAtLWV4ZWMtcGF0aD0uIGNvbW1pdCAtLWFtZW5kICYmCisJCWdpdCBzaG93IC1zIC0tcHJldHR5PW9uZWxpbmUgfAorCQlzZWQgLWUgInMvXlswLTlhLWZdKiAvLyIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0b3Igd2l0aCBhIHNwYWNlJyAnCisJZWNobyAiZWNobyBzcGFjZSA+XCJcJDFcIiIgPiJlIHNwYWNlLnNoIiAmJgorCWNobW9kIGEreCAiZSBzcGFjZS5zaCIgJiYKKwlHSVRfRURJVE9SPSIuL2VcIHNwYWNlLnNoIiBnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwl0ZXN0IHNwYWNlID0gIiQoZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzKSIKKworJworCit1bnNldCBHSVRfRURJVE9SCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JlLmVkaXRvciB3aXRoIGEgc3BhY2UnICcKKworCWdpdCBjb25maWcgY29yZS5lZGl0b3IgXCIuL2VcIHNwYWNlLnNoXCIgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwl0ZXN0IHNwYWNlID0gIiQoZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzKSIKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDYtcGFnZXIuc2ggYi90L3Q3MDA2LXBhZ2VyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwZTA5YTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDA2LXBhZ2VyLnNoCkBAIC0wLDAgKzEsNjU5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBhdXRvbWF0aWMgdXNlIG9mIGEgcGFnZXIuJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXBhZ2VyLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXNhbmVfdW5zZXQgR0lUX1BBR0VSIEdJVF9QQUdFUl9JTl9VU0UgJiYKKwl0ZXN0X3VuY29uZmlnIGNvcmUucGFnZXIgJiYKKworCVBBR0VSPSJjYXQgPnBhZ2luYXRlZC5vdXQiICYmCisJZXhwb3J0IFBBR0VSICYmCisKKwl0ZXN0X2NvbW1pdCBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdzb21lIGNvbW1hbmRzIHVzZSBhIHBhZ2VyJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IGxvZyAmJgorCXRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFRUWSAncGFnZXIgcnVucyBmcm9tIHN1YmRpcicgJworCWVjaG8gc3ViZGlyL3BhZ2luYXRlZC5vdXQgPmV4cGVjdGVkICYmCisJbWtkaXIgLXAgc3ViZGlyICYmCisJcm0gLWYgcGFnaW5hdGVkLm91dCBzdWJkaXIvcGFnaW5hdGVkLm91dCAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCXRlc3RfdGVybWluYWwgZ2l0IGxvZworCSkgJiYKKwl7CisJCWxzIHBhZ2luYXRlZC5vdXQgc3ViZGlyL3BhZ2luYXRlZC5vdXQgfHwKKwkJOgorCX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnTEVTUyBhbmQgTFYgZW52dmFycyBhcmUgc2V0IGZvciBwYWdpbmF0aW9uJyAnCisJKAorCQlzYW5lX3Vuc2V0IExFU1MgTFYgJiYKKwkJUEFHRVI9ImVudiA+cGFnZXItZW52Lm91dDsgd2MiICYmCisJCWV4cG9ydCBQQUdFUiAmJgorCisJCXRlc3RfdGVybWluYWwgZ2l0IGxvZworCSkgJiYKKwlncmVwIF5MRVNTPSBwYWdlci1lbnYub3V0ICYmCisJZ3JlcCBeTFY9IHBhZ2VyLWVudi5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1csVFRZICdMRVNTIGFuZCBMViBlbnZ2YXJzIHNldCBieSBnaXQtc2gtc2V0dXAnICcKKwkoCisJCXNhbmVfdW5zZXQgTEVTUyBMViAmJgorCQlQQUdFUj0iZW52ID5wYWdlci1lbnYub3V0OyB3YyIgJiYKKwkJZXhwb3J0IFBBR0VSICYmCisJCVBBVEg9IiQoZ2l0IC0tZXhlYy1wYXRoKTokUEFUSCIgJiYKKwkJZXhwb3J0IFBBVEggJiYKKwkJdGVzdF90ZXJtaW5hbCBzaCAtYyAiLiBnaXQtc2gtc2V0dXAgJiYgZ2l0X3BhZ2VyIgorCSkgJiYKKwlncmVwIF5MRVNTPSBwYWdlci1lbnYub3V0ICYmCisJZ3JlcCBeTFY9IHBhZ2VyLWVudi5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3NvbWUgY29tbWFuZHMgZG8gbm90IHVzZSBhIHBhZ2VyJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IHJldi1saXN0IEhFQUQgJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBwYWdlciB3aGVuIHN0ZG91dCBpcyBhIHBpcGUnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJZ2l0IGxvZyB8IGNhdCAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHBhZ2VyIHdoZW4gc3Rkb3V0IGlzIGEgcmVndWxhciBmaWxlJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCWdpdCBsb2cgPmZpbGUgJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZ2l0IC0tcGFnaW5hdGUgcmV2LWxpc3QgdXNlcyBhIHBhZ2VyJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC0tcGFnaW5hdGUgcmV2LWxpc3QgSEVBRCAmJgorCXRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBwYWdlciBldmVuIHdpdGggLS1wYWdpbmF0ZSB3aGVuIHN0ZG91dCBpcyBhIHBpcGUnICcKKwlybSAtZiBmaWxlIHBhZ2luYXRlZC5vdXQgJiYKKwlnaXQgLS1wYWdpbmF0ZSBsb2cgfCBjYXQgJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnbm8gcGFnZXIgd2l0aCAtLW5vLXBhZ2VyJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC0tbm8tcGFnZXIgbG9nICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2NvbmZpZ3VyYXRpb24gY2FuIGRpc2FibGUgcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF91bmNvbmZpZyBwYWdlci5ncmVwICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgZ3JlcCBpbml0aWFsICYmCisJdGVzdCAtZSBwYWdpbmF0ZWQub3V0ICYmCisKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF9jb25maWcgcGFnZXIuZ3JlcCBmYWxzZSAmJgorCXRlc3RfdGVybWluYWwgZ2l0IGdyZXAgaW5pdGlhbCAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb25maWd1cmF0aW9uIGNhbiBlbmFibGUgcGFnZXIgKGZyb20gc3ViZGlyKScgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwlta2RpciAtcCBzdWJkaXIgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5idW5kbGUgdHJ1ZSAmJgorCisJZ2l0IGJ1bmRsZSBjcmVhdGUgdGVzdC5idW5kbGUgLS1hbGwgJiYKKwlybSAtZiBwYWdpbmF0ZWQub3V0IHN1YmRpci9wYWdpbmF0ZWQub3V0ICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJdGVzdF90ZXJtaW5hbCBnaXQgYnVuZGxlIHVuYnVuZGxlIC4uL3Rlc3QuYnVuZGxlCisJKSAmJgorCXsKKwkJdGVzdCAtZSBwYWdpbmF0ZWQub3V0IHx8CisJCXRlc3QgLWUgc3ViZGlyL3BhZ2luYXRlZC5vdXQKKwl9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgdGFnIC1sIGRlZmF1bHRzIHRvIHBhZ2luZycgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCB0YWcgLWwgJiYKKwl0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCB0YWcgLWwgcmVzcGVjdHMgcGFnZXIudGFnJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC1jIHBhZ2VyLnRhZz1mYWxzZSB0YWcgLWwgJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZ2l0IHRhZyAtbCByZXNwZWN0cyAtLW5vLXBhZ2VyJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC1jIHBhZ2VyLnRhZyAtLW5vLXBhZ2VyIHRhZyAtbCAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgdGFnIHdpdGggbm8gYXJncyBkZWZhdWx0cyB0byBwYWdpbmcnICcKKwkjIG5vIGFyZ3MgaW1wbGllcyAtbCBzbyB0aGlzIHNob3VsZCBwYWdlIGxpa2UgLWwKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgdGFnICYmCisJdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgdGFnIHdpdGggbm8gYXJncyByZXNwZWN0cyBwYWdlci50YWcnICcKKwkjIG5vIGFyZ3MgaW1wbGllcyAtbCBzbyB0aGlzIHNob3VsZCBwYWdlIGxpa2UgLWwKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLWMgcGFnZXIudGFnPWZhbHNlIHRhZyAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgdGFnIC0tY29udGFpbnMgZGVmYXVsdHMgdG8gcGFnaW5nJyAnCisJIyAtLWNvbnRhaW5zIGltcGxpZXMgLWwgc28gdGhpcyBzaG91bGQgcGFnZSBsaWtlIC1sCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IHRhZyAtLWNvbnRhaW5zICYmCisJdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgdGFnIC0tY29udGFpbnMgcmVzcGVjdHMgcGFnZXIudGFnJyAnCisJIyAtLWNvbnRhaW5zIGltcGxpZXMgLWwgc28gdGhpcyBzaG91bGQgcGFnZSBsaWtlIC1sCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC1jIHBhZ2VyLnRhZz1mYWxzZSB0YWcgLS1jb250YWlucyAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgdGFnIC1hIGRlZmF1bHRzIHRvIG5vdCBwYWdpbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB0YWcgLWQgbmV3dGFnIiAmJgorCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCB0YWcgLWFtIG1lc3NhZ2UgbmV3dGFnICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCB0YWcgLWEgaWdub3JlcyBwYWdlci50YWcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB0YWcgLWQgbmV3dGFnIiAmJgorCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCAtYyBwYWdlci50YWcgdGFnIC1hbSBtZXNzYWdlIG5ld3RhZyAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgdGFnIC1hIHJlc3BlY3RzIC0tcGFnaW5hdGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB0YWcgLWQgbmV3dGFnIiAmJgorCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCAtLXBhZ2luYXRlIHRhZyAtYW0gbWVzc2FnZSBuZXd0YWcgJiYKKwl0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCB0YWcgYXMgYWxpYXMgaWdub3JlcyBwYWdlci50YWcgd2l0aCAtYScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHRhZyAtZCBuZXd0YWciICYmCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC1jIHBhZ2VyLnRhZyAtYyBhbGlhcy50PXRhZyB0IC1hbSBtZXNzYWdlIG5ld3RhZyAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgdGFnIGFzIGFsaWFzIHJlc3BlY3RzIHBhZ2VyLnRhZyB3aXRoIC1sJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC1jIHBhZ2VyLnRhZz1mYWxzZSAtYyBhbGlhcy50PXRhZyB0IC1sICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCBicmFuY2ggZGVmYXVsdHMgdG8gcGFnaW5nJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IGJyYW5jaCAmJgorCXRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZ2l0IGJyYW5jaCByZXNwZWN0cyBwYWdlci5icmFuY2gnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLWMgcGFnZXIuYnJhbmNoPWZhbHNlIGJyYW5jaCAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgYnJhbmNoIHJlc3BlY3RzIC0tbm8tcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLS1uby1wYWdlciBicmFuY2ggJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZ2l0IGJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24gaWdub3JlcyBwYWdlci5icmFuY2gnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0IGVkaXRvci51c2VkICYmCisJd3JpdGVfc2NyaXB0IGVkaXRvciA8PC1cRU9GICYmCisJCWVjaG8gIk5ldyBkZXNjcmlwdGlvbiIgPiIkMSIKKwkJdG91Y2ggZWRpdG9yLnVzZWQKKwlFT0YKKwlFRElUT1I9Li9lZGl0b3IgdGVzdF90ZXJtaW5hbCBnaXQgLWMgcGFnZXIuYnJhbmNoIGJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24gJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dCAmJgorCXRlc3QgLWUgZWRpdG9yLnVzZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gaWdub3JlcyBwYWdlci5icmFuY2gnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJZ2l0IGJyYW5jaCBvdGhlciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGJyYW5jaCAtRCBvdGhlciIgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCAtYyBwYWdlci5icmFuY2ggYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPW90aGVyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW0iICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCBjb25maWcgaWdub3JlcyBwYWdlci5jb25maWcgd2hlbiBzZXR0aW5nJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC1jIHBhZ2VyLmNvbmZpZyBjb25maWcgZm9vLmJhciBiYXIgJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZ2l0IGNvbmZpZyAtLWVkaXQgaWdub3JlcyBwYWdlci5jb25maWcnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0IGVkaXRvci51c2VkICYmCisJd3JpdGVfc2NyaXB0IGVkaXRvciA8PC1cRU9GICYmCisJCXRvdWNoIGVkaXRvci51c2VkCisJRU9GCisJRURJVE9SPS4vZWRpdG9yIHRlc3RfdGVybWluYWwgZ2l0IC1jIHBhZ2VyLmNvbmZpZyBjb25maWcgLS1lZGl0ICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0IC1lIGVkaXRvci51c2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgY29uZmlnIC0tZ2V0IGlnbm9yZXMgcGFnZXIuY29uZmlnJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC1jIHBhZ2VyLmNvbmZpZyBjb25maWcgLS1nZXQgZm9vLmJhciAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgY29uZmlnIC0tZ2V0LXVybG1hdGNoIGRlZmF1bHRzIHRvIHBhZ2luZycgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCAtYyBodHRwLiJodHRwczovL2Zvby5jb20vIi5iYXI9Zm9vIFwKKwkJCSAgY29uZmlnIC0tZ2V0LXVybG1hdGNoIGh0dHAgaHR0cHM6Ly9mb28uY29tICYmCisJdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgY29uZmlnIC0tZ2V0LWFsbCByZXNwZWN0cyBwYWdlci5jb25maWcnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLWMgcGFnZXIuY29uZmlnPWZhbHNlIGNvbmZpZyAtLWdldC1hbGwgZm9vLmJhciAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgY29uZmlnIC0tbGlzdCBkZWZhdWx0cyB0byBwYWdpbmcnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgY29uZmlnIC0tbGlzdCAmJgorCXRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCisKKyMgQSBjb2xvcmVkIGNvbW1pdCBsb2cgd2lsbCBiZWdpbiB3aXRoIGFuIGFwcHJvcHJpYXRlIEFOU0kgZXNjYXBlCisjIGZvciB0aGUgZmlyc3QgY29sb3I7IHRoZSB0ZXh0ICJjb21taXQiIGNvbWVzIGxhdGVyLgorY29sb3JmdWwoKSB7CisJcmVhZCBmaXJzdGxpbmUgPCQxCisJISBleHByICIkZmlyc3RsaW5lIiA6ICJbYS16QS1aXSIgPi9kZXYvbnVsbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0cyBjYW4gZGV0ZWN0IGNvbG9yJyAnCisJcm0gLWYgY29sb3JmdWwubG9nIGNvbG9ybGVzcy5sb2cgJiYKKwlnaXQgbG9nIC0tbm8tY29sb3IgPmNvbG9ybGVzcy5sb2cgJiYKKwlnaXQgbG9nIC0tY29sb3IgPmNvbG9yZnVsLmxvZyAmJgorCSEgY29sb3JmdWwgY29sb3JsZXNzLmxvZyAmJgorCWNvbG9yZnVsIGNvbG9yZnVsLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjb2xvciB3aGVuIHN0ZG91dCBpcyBhIHJlZ3VsYXIgZmlsZScgJworCXJtIC1mIGNvbG9ybGVzcy5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci51aSBhdXRvICYmCisJZ2l0IGxvZyA+Y29sb3JsZXNzLmxvZyAmJgorCSEgY29sb3JmdWwgY29sb3JsZXNzLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29sb3Igd2hlbiB3cml0aW5nIHRvIGEgcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF9jb25maWcgY29sb3IudWkgYXV0byAmJgorCXRlc3RfdGVybWluYWwgZ2l0IGxvZyAmJgorCWNvbG9yZnVsIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2NvbG9ycyBhcmUgc3VwcHJlc3NlZCBieSBjb2xvci5wYWdlcicgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci51aSBhdXRvICYmCisJdGVzdF9jb25maWcgY29sb3IucGFnZXIgZmFsc2UgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBsb2cgJiYKKwkhIGNvbG9yZnVsIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29sb3Igd2hlbiB3cml0aW5nIHRvIGEgZmlsZSBpbnRlbmRlZCBmb3IgYSBwYWdlcicgJworCXJtIC1mIGNvbG9yZnVsLmxvZyAmJgorCXRlc3RfY29uZmlnIGNvbG9yLnVpIGF1dG8gJiYKKwkoCisJCVRFUk09dnQxMDAgJiYKKwkJR0lUX1BBR0VSX0lOX1VTRT10cnVlICYmCisJCWV4cG9ydCBURVJNIEdJVF9QQUdFUl9JTl9VU0UgJiYKKwkJZ2l0IGxvZyA+Y29sb3JmdWwubG9nCisJKSAmJgorCWNvbG9yZnVsIGNvbG9yZnVsLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29sb3JzIGFyZSBzZW50IHRvIHBhZ2VyIGZvciBleHRlcm5hbCBjb21tYW5kcycgJworCXRlc3RfY29uZmlnIGFsaWFzLmV4dGVybmFsbG9nICIhZ2l0IGxvZyIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci51aSBhdXRvICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLXAgZXh0ZXJuYWxsb2cgJiYKKwljb2xvcmZ1bCBwYWdpbmF0ZWQub3V0CisnCisKKyMgVXNlIHRoaXMgaGVscGVyIHRvIG1ha2UgaXQgZWFzeSBmb3IgdGhlIGNhbGxlciBvZiB5b3VyCisjIHRlcm1pbmFsLXVzaW5nIGZ1bmN0aW9uIHRvIHNwZWNpZnkgd2hldGhlciBpdCBzaG91bGQgZmFpbC4KKyMgSWYgeW91IHdyaXRlCisjCisjCXlvdXJfdGVzdCgpIHsKKyMJCXBhcnNlX2FyZ3MgIiRAIgorIworIwkJJHRlc3RfZXhwZWN0YXRpb24gIiRjbWQgLSBiZWhhdmVzIHdlbGwiICIKKyMJCQkuLi4KKyMJCQkkZnVsbF9jb21tYW5kICYmCisjCQkJLi4uCisjCQkiCisjCX0KKyMKKyMgdGhlbiB5b3VyIHRlc3QgY2FuIGJlIHVzZWQgbGlrZSB0aGlzOgorIworIwl5b3VyX3Rlc3QgZXhwZWN0XyhzdWNjZXNzfGZhaWx1cmUpIFt0ZXN0X211c3RfZmFpbF0gJ2dpdCBmb28nCisjCitwYXJzZV9hcmdzKCkgeworCXRlc3RfZXhwZWN0YXRpb249InRlc3RfJDEiCisJc2hpZnQKKwlpZiB0ZXN0ICIkMSIgPSB0ZXN0X211c3RfZmFpbAorCXRoZW4KKwkJZnVsbF9jb21tYW5kPSJ0ZXN0X211c3RfZmFpbCB0ZXN0X3Rlcm1pbmFsICIKKwkJc2hpZnQKKwllbHNlCisJCWZ1bGxfY29tbWFuZD0idGVzdF90ZXJtaW5hbCAiCisJZmkKKwljbWQ9JDEKKwlmdWxsX2NvbW1hbmQ9IiRmdWxsX2NvbW1hbmQgJDEiCit9CisKK3Rlc3RfZGVmYXVsdF9wYWdlcigpIHsKKwlwYXJzZV9hcmdzICIkQCIKKworCSR0ZXN0X2V4cGVjdGF0aW9uIFNJTVBMRVBBR0VSLFRUWSAiJGNtZCAtIGRlZmF1bHQgcGFnZXIgaXMgdXNlZCBieSBkZWZhdWx0IiAiCisJCXNhbmVfdW5zZXQgUEFHRVIgR0lUX1BBR0VSICYmCisJCXRlc3RfdW5jb25maWcgY29yZS5wYWdlciAmJgorCQlybSAtZiBkZWZhdWx0X3BhZ2VyX3VzZWQgJiYKKwkJY2F0ID5cJGxlc3MgPDwtXEVPRiAmJgorCQkjIS9iaW4vc2gKKwkJd2MgPmRlZmF1bHRfcGFnZXJfdXNlZAorCQlFT0YKKwkJY2htb2QgK3ggXCRsZXNzICYmCisJCSgKKwkJCVBBVEg9LjpcJFBBVEggJiYKKwkJCWV4cG9ydCBQQVRIICYmCisJCQkkZnVsbF9jb21tYW5kCisJCSkgJiYKKwkJdGVzdCAtZSBkZWZhdWx0X3BhZ2VyX3VzZWQKKwkiCit9CisKK3Rlc3RfUEFHRVJfb3ZlcnJpZGVzKCkgeworCXBhcnNlX2FyZ3MgIiRAIgorCisJJHRlc3RfZXhwZWN0YXRpb24gVFRZICIkY21kIC0gUEFHRVIgb3ZlcnJpZGVzIGRlZmF1bHQgcGFnZXIiICIKKwkJc2FuZV91bnNldCBHSVRfUEFHRVIgJiYKKwkJdGVzdF91bmNvbmZpZyBjb3JlLnBhZ2VyICYmCisJCXJtIC1mIFBBR0VSX3VzZWQgJiYKKwkJUEFHRVI9J3djID5QQUdFUl91c2VkJyAmJgorCQlleHBvcnQgUEFHRVIgJiYKKwkJJGZ1bGxfY29tbWFuZCAmJgorCQl0ZXN0IC1lIFBBR0VSX3VzZWQKKwkiCit9CisKK3Rlc3RfY29yZV9wYWdlcl9vdmVycmlkZXMoKSB7CisJaWZfbG9jYWxfY29uZmlnPQorCXVzZWRfaWZfd2FudGVkPSdvdmVycmlkZXMgUEFHRVInCisJdGVzdF9jb3JlX3BhZ2VyICIkQCIKK30KKwordGVzdF9sb2NhbF9jb25maWdfaWdub3JlZCgpIHsKKwlpZl9sb2NhbF9jb25maWc9JyEgJworCXVzZWRfaWZfd2FudGVkPSdpcyBub3QgdXNlZCcKKwl0ZXN0X2NvcmVfcGFnZXIgIiRAIgorfQorCit0ZXN0X2NvcmVfcGFnZXIoKSB7CisJcGFyc2VfYXJncyAiJEAiCisKKwkkdGVzdF9leHBlY3RhdGlvbiBUVFkgIiRjbWQgLSByZXBvc2l0b3J5LWxvY2FsIGNvcmUucGFnZXIgc2V0dGluZyAkdXNlZF9pZl93YW50ZWQiICIKKwkJc2FuZV91bnNldCBHSVRfUEFHRVIgJiYKKwkJcm0gLWYgY29yZS5wYWdlcl91c2VkICYmCisJCVBBR0VSPXdjICYmCisJCWV4cG9ydCBQQUdFUiAmJgorCQl0ZXN0X2NvbmZpZyBjb3JlLnBhZ2VyICd3YyA+Y29yZS5wYWdlcl91c2VkJyAmJgorCQkkZnVsbF9jb21tYW5kICYmCisJCSR7aWZfbG9jYWxfY29uZmlnfXRlc3QgLWUgY29yZS5wYWdlcl91c2VkCisJIgorfQorCit0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyKCkgeworCWlmX2xvY2FsX2NvbmZpZz0KKwl1c2VkX2lmX3dhbnRlZD0nb3ZlcnJpZGVzIFBBR0VSJworCXRlc3RfcGFnZXJfc3ViZGlyX2hlbHBlciAiJEAiCit9CisKK3Rlc3Rfbm9fbG9jYWxfY29uZmlnX3N1YmRpcigpIHsKKwlpZl9sb2NhbF9jb25maWc9JyEgJworCXVzZWRfaWZfd2FudGVkPSdpcyBub3QgdXNlZCcKKwl0ZXN0X3BhZ2VyX3N1YmRpcl9oZWxwZXIgIiRAIgorfQorCit0ZXN0X3BhZ2VyX3N1YmRpcl9oZWxwZXIoKSB7CisJcGFyc2VfYXJncyAiJEAiCisKKwkkdGVzdF9leHBlY3RhdGlvbiBUVFkgIiRjbWQgLSBjb3JlLnBhZ2VyICR1c2VkX2lmX3dhbnRlZCBmcm9tIHN1YmRpcmVjdG9yeSIgIgorCQlzYW5lX3Vuc2V0IEdJVF9QQUdFUiAmJgorCQlybSAtZiBjb3JlLnBhZ2VyX3VzZWQgJiYKKwkJcm0gLWZyIHN1YiAmJgorCQlQQUdFUj13YyAmJgorCQlzdGFtcG5hbWU9XCQocHdkKS9jb3JlLnBhZ2VyX3VzZWQgJiYKKwkJZXhwb3J0IFBBR0VSIHN0YW1wbmFtZSAmJgorCQl0ZXN0X2NvbmZpZyBjb3JlLnBhZ2VyICd3YyA+XCJcJHN0YW1wbmFtZVwiJyAmJgorCQlta2RpciBzdWIgJiYKKwkJKAorCQkJY2Qgc3ViICYmCisJCQkkZnVsbF9jb21tYW5kCisJCSkgJiYKKwkJJHtpZl9sb2NhbF9jb25maWd9dGVzdCAtZSBjb3JlLnBhZ2VyX3VzZWQKKwkiCit9CisKK3Rlc3RfR0lUX1BBR0VSX292ZXJyaWRlcygpIHsKKwlwYXJzZV9hcmdzICIkQCIKKworCSR0ZXN0X2V4cGVjdGF0aW9uIFRUWSAiJGNtZCAtIEdJVF9QQUdFUiBvdmVycmlkZXMgY29yZS5wYWdlciIgIgorCQlybSAtZiBHSVRfUEFHRVJfdXNlZCAmJgorCQl0ZXN0X2NvbmZpZyBjb3JlLnBhZ2VyIHdjICYmCisJCUdJVF9QQUdFUj0nd2MgPkdJVF9QQUdFUl91c2VkJyAmJgorCQlleHBvcnQgR0lUX1BBR0VSICYmCisJCSRmdWxsX2NvbW1hbmQgJiYKKwkJdGVzdCAtZSBHSVRfUEFHRVJfdXNlZAorCSIKK30KKwordGVzdF9kb2VzbnRfcGFnaW5hdGUoKSB7CisJcGFyc2VfYXJncyAiJEAiCisKKwkkdGVzdF9leHBlY3RhdGlvbiBUVFkgIm5vIHBhZ2VyIGZvciAnJGNtZCciICIKKwkJcm0gLWYgR0lUX1BBR0VSX3VzZWQgJiYKKwkJR0lUX1BBR0VSPSd3YyA+R0lUX1BBR0VSX3VzZWQnICYmCisJCWV4cG9ydCBHSVRfUEFHRVIgJiYKKwkJJGZ1bGxfY29tbWFuZCAmJgorCQkhIHRlc3QgLWUgR0lUX1BBR0VSX3VzZWQKKwkiCit9CisKK3Rlc3RfcGFnZXJfY2hvaWNlcygpIHsKKwl0ZXN0X2RlZmF1bHRfcGFnZXIgICAgICAgIGV4cGVjdF9zdWNjZXNzICIkQCIKKwl0ZXN0X1BBR0VSX292ZXJyaWRlcyAgICAgIGV4cGVjdF9zdWNjZXNzICIkQCIKKwl0ZXN0X2NvcmVfcGFnZXJfb3ZlcnJpZGVzIGV4cGVjdF9zdWNjZXNzICIkQCIKKwl0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyICAgIGV4cGVjdF9zdWNjZXNzICIkQCIKKwl0ZXN0X0dJVF9QQUdFUl9vdmVycmlkZXMgIGV4cGVjdF9zdWNjZXNzICIkQCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IHNvbWUgYWxpYXNlcycgJworCWdpdCBjb25maWcgYWxpYXMuYWxpYXNlZGxvZyBsb2cgJiYKKwlnaXQgY29uZmlnIGFsaWFzLnRydWUgIiF0cnVlIgorJworCit0ZXN0X3BhZ2VyX2Nob2ljZXMgICAgICAgICAgICAgICAgICAgICAgICdnaXQgbG9nJwordGVzdF9wYWdlcl9jaG9pY2VzICAgICAgICAgICAgICAgICAgICAgICAnZ2l0IC1wIGxvZycKK3Rlc3RfcGFnZXJfY2hvaWNlcyAgICAgICAgICAgICAgICAgICAgICAgJ2dpdCBhbGlhc2VkbG9nJworCit0ZXN0X2RlZmF1bHRfcGFnZXIgICAgICAgIGV4cGVjdF9zdWNjZXNzICdnaXQgLXAgYWxpYXNlZGxvZycKK3Rlc3RfUEFHRVJfb3ZlcnJpZGVzICAgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCBhbGlhc2VkbG9nJwordGVzdF9jb3JlX3BhZ2VyX292ZXJyaWRlcyBleHBlY3Rfc3VjY2VzcyAnZ2l0IC1wIGFsaWFzZWRsb2cnCit0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyICAgIGV4cGVjdF9zdWNjZXNzICdnaXQgLXAgYWxpYXNlZGxvZycKK3Rlc3RfR0lUX1BBR0VSX292ZXJyaWRlcyAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCBhbGlhc2VkbG9nJworCit0ZXN0X2RlZmF1bHRfcGFnZXIgICAgICAgIGV4cGVjdF9zdWNjZXNzICdnaXQgLXAgdHJ1ZScKK3Rlc3RfUEFHRVJfb3ZlcnJpZGVzICAgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCB0cnVlJwordGVzdF9jb3JlX3BhZ2VyX292ZXJyaWRlcyBleHBlY3Rfc3VjY2VzcyAnZ2l0IC1wIHRydWUnCit0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyICAgIGV4cGVjdF9zdWNjZXNzICdnaXQgLXAgdHJ1ZScKK3Rlc3RfR0lUX1BBR0VSX292ZXJyaWRlcyAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCB0cnVlJworCit0ZXN0X2RlZmF1bHRfcGFnZXIgICAgICAgIGV4cGVjdF9zdWNjZXNzIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAgcmVxdWVzdC1wdWxsJwordGVzdF9QQUdFUl9vdmVycmlkZXMgICAgICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wIHJlcXVlc3QtcHVsbCcKK3Rlc3RfY29yZV9wYWdlcl9vdmVycmlkZXMgZXhwZWN0X3N1Y2Nlc3MgdGVzdF9tdXN0X2ZhaWwgJ2dpdCAtcCByZXF1ZXN0LXB1bGwnCit0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyICAgIGV4cGVjdF9zdWNjZXNzIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAgcmVxdWVzdC1wdWxsJwordGVzdF9HSVRfUEFHRVJfb3ZlcnJpZGVzICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wIHJlcXVlc3QtcHVsbCcKKwordGVzdF9kZWZhdWx0X3BhZ2VyICAgICAgICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wJwordGVzdF9QQUdFUl9vdmVycmlkZXMgICAgICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wJwordGVzdF9sb2NhbF9jb25maWdfaWdub3JlZCBleHBlY3RfZmFpbHVyZSB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wJwordGVzdF9HSVRfUEFHRVJfb3ZlcnJpZGVzICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29yZS5wYWdlciBpbiByZXBvIGNvbmZpZyB3b3JrcyBhbmQgcmV0YWlucyBjd2QnICcKKwlzYW5lX3Vuc2V0IEdJVF9QQUdFUiAmJgorCXRlc3RfY29uZmlnIGNvcmUucGFnZXIgImNhdCA+Y3dkLXJldGFpbmVkIiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCXJtIC1mIGN3ZC1yZXRhaW5lZCAmJgorCQl0ZXN0X3Rlcm1pbmFsIGdpdCAtcCByZXYtcGFyc2UgSEVBRCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBjd2QtcmV0YWluZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb3JlLnBhZ2VyIGlzIGZvdW5kIHZpYSBhbGlhcyBpbiBzdWJkaXJlY3RvcnknICcKKwlzYW5lX3Vuc2V0IEdJVF9QQUdFUiAmJgorCXRlc3RfY29uZmlnIGNvcmUucGFnZXIgImNhdCA+dmlhLWFsaWFzIiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCXJtIC1mIHZpYS1hbGlhcyAmJgorCQl0ZXN0X3Rlcm1pbmFsIGdpdCAtYyBhbGlhcy5yPSItcCByZXYtcGFyc2UiIHIgSEVBRCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB2aWEtYWxpYXMKKwkpCisnCisKK3Rlc3RfZG9lc250X3BhZ2luYXRlICAgICAgZXhwZWN0X2ZhaWx1cmUgdGVzdF9tdXN0X2ZhaWwgJ2dpdCAtcCBub25zZW5zZScKKwordGVzdF9wYWdlcl9jaG9pY2VzICAgICAgICAgICAgICAgICAgICAgICAnZ2l0IHNob3J0bG9nJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGNvbmZpZ3VyZSBzaG9ydGxvZyBub3QgdG8gcGFnaW5hdGUnICcKKwlnaXQgY29uZmlnIHBhZ2VyLnNob3J0bG9nIGZhbHNlCisnCit0ZXN0X2RvZXNudF9wYWdpbmF0ZSAgICAgIGV4cGVjdF9zdWNjZXNzICdnaXQgc2hvcnRsb2cnCit0ZXN0X25vX2xvY2FsX2NvbmZpZ19zdWJkaXIgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG9ydGxvZycKK3Rlc3RfZGVmYXVsdF9wYWdlciAgICAgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCBzaG9ydGxvZycKK3Rlc3RfY29yZV9wYWdlcl9zdWJkaXIgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCBzaG9ydGxvZycKKwordGVzdF9jb3JlX3BhZ2VyX3N1YmRpciAgICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCBcCisJCQkJCSAnZ2l0IC1wIGFwcGx5IDwvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb21tYW5kLXNwZWNpZmljIHBhZ2VyJyAnCisJc2FuZV91bnNldCBQQUdFUiBHSVRfUEFHRVIgJiYKKwllY2hvICJmb286aW5pdGlhbCIgPmV4cGVjdCAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X3VuY29uZmlnIGNvcmUucGFnZXIgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5sb2cgInNlZCBzL14vZm9vOi8gPmFjdHVhbCIgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBsb2cgLS1mb3JtYXQ9JXMgLTEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb21tYW5kLXNwZWNpZmljIHBhZ2VyIG92ZXJyaWRlcyBjb3JlLnBhZ2VyJyAnCisJc2FuZV91bnNldCBQQUdFUiBHSVRfUEFHRVIgJiYKKwllY2hvICJmb286aW5pdGlhbCIgPmV4cGVjdCAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLnBhZ2VyICJleGl0IDEiICYmCisJdGVzdF9jb25maWcgcGFnZXIubG9nICJzZWQgcy9eL2ZvbzovID5hY3R1YWwiICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgbG9nIC0tZm9ybWF0PSVzIC0xICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29tbWFuZC1zcGVjaWZpYyBwYWdlciBvdmVycmlkZGVuIGJ5IGVudmlyb25tZW50JyAnCisJR0lUX1BBR0VSPSJzZWQgcy9eL2ZvbzovID5hY3R1YWwiICYmIGV4cG9ydCBHSVRfUEFHRVIgJiYKKwk+YWN0dWFsICYmCisJZWNobyAiZm9vOmluaXRpYWwiID5leHBlY3QgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5sb2cgImV4aXQgMSIgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBsb2cgLS1mb3JtYXQ9JXMgLTEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4dGVybmFsIGNvbW1hbmQnICcKKwljYXQgPmdpdC1leHRlcm5hbCA8PC1cRU9GICYmCisJIyEvYmluL3NoCisJZ2l0ICIkQCIKKwlFT0YKKwljaG1vZCAreCBnaXQtZXh0ZXJuYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2NvbW1hbmQtc3BlY2lmaWMgcGFnZXIgd29ya3MgZm9yIGV4dGVybmFsIGNvbW1hbmRzJyAnCisJc2FuZV91bnNldCBQQUdFUiBHSVRfUEFHRVIgJiYKKwllY2hvICJmb286aW5pdGlhbCIgPmV4cGVjdCAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5leHRlcm5hbCAic2VkIHMvXi9mb286LyA+YWN0dWFsIiAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC0tZXhlYy1wYXRoPSIkKHB3ZCkiIGV4dGVybmFsIGxvZyAtLWZvcm1hdD0lcyAtMSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3N1Yi1jb21tYW5kcyBvZiBleHRlcm5hbHMgdXNlIHRoZWlyIG93biBwYWdlcicgJworCXNhbmVfdW5zZXQgUEFHRVIgR0lUX1BBR0VSICYmCisJZWNobyAiZm9vOmluaXRpYWwiID5leHBlY3QgJiYKKwk+YWN0dWFsICYmCisJdGVzdF9jb25maWcgcGFnZXIubG9nICJzZWQgcy9eL2ZvbzovID5hY3R1YWwiICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLS1leGVjLXBhdGg9LiBleHRlcm5hbCBsb2cgLS1mb3JtYXQ9JXMgLTEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdleHRlcm5hbCBjb21tYW5kIHBhZ2VycyBvdmVycmlkZSBzdWItY29tbWFuZHMnICcKKwlzYW5lX3Vuc2V0IFBBR0VSIEdJVF9QQUdFUiAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5leHRlcm5hbCBmYWxzZSAmJgorCXRlc3RfY29uZmlnIHBhZ2VyLmxvZyAic2VkIHMvXi9sb2c6LyA+YWN0dWFsIiAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC0tZXhlYy1wYXRoPS4gZXh0ZXJuYWwgbG9nIC0tZm9ybWF0PSVzIC0xICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21tYW5kIHdpdGggdW5kZXJzY29yZXMgZG9lcyBub3QgY29tcGxhaW4nICcKKwl3cml0ZV9zY3JpcHQgZ2l0LXVuZGVyX3Njb3JlIDw8LVxFT0YgJiYKKwllY2hvIG9rCisJRU9GCisJZ2l0IC0tZXhlYy1wYXRoPS4gdW5kZXJfc2NvcmUgPmFjdHVhbCAyPiYxICYmCisJZWNobyBvayA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZ2l0IHRhZyB3aXRoIGF1dG8tY29sdW1ucyAnICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCXRlc3RfY29tbWl0IGZvdXIgJiYKKwl0ZXN0X2NvbW1pdCBmaXZlICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWluaXRpYWwgIG9uZSAgICAgIHR3byAgICAgIHRocmVlICAgIGZvdXIgICAgIGZpdmUKKwlFT0YKKwl0ZXN0X3Rlcm1pbmFsIGVudiBQQUdFUj0iY2F0ID5hY3R1YWwiIENPTFVNTlM9ODAgXAorCQlnaXQgLWMgY29sdW1uLnVpPWF1dG8gdGFnIC0tc29ydD1hdXRob3JkYXRlICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDctc2hvdy5zaCBiL3QvdDcwMDctc2hvdy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MmQzZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzAwNy1zaG93LnNoCkBAIC0wLDAgKzEsMTMxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHNob3cnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGhlbGxvIHdvcmxkID5mb28gJiYKKwlIPSQoZ2l0IGhhc2gtb2JqZWN0IC13IGZvbykgJiYKKwlnaXQgdGFnIC1hIGZvby10YWcgLW0gIlRhZ3MgJEgiICRIICYmCisJSEg9JChleHByICIkSCIgOiAiXCguLlwpIikgJiYKKwlIMzg9JChleHByICIkSCIgOiAiLi5cKC4qXCkiKSAmJgorCXJtIC1mIC5naXQvb2JqZWN0cy8kSEgvJEgzOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIGEgdGFnIHRoYXQgcG9pbnQgYXQgYSBtaXNzaW5nIG9iamVjdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtLW5vLXBhZ2VyIHNob3cgZm9vLXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYSBiaXQgb2YgaGlzdG9yeScgJworCXRlc3RfY29tbWl0IG1haW4xICYmCisJdGVzdF9jb21taXQgbWFpbjIgJiYKKwl0ZXN0X2NvbW1pdCBtYWluMyAmJgorCWdpdCB0YWcgLW0gImFubm90YXRlZCB0YWciIGFubm90YXRlZCAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUReXiAmJgorCXRlc3RfY29tbWl0IHNpZGUyICYmCisJdGVzdF9jb21taXQgc2lkZTMgJiYKKwl0ZXN0X21lcmdlIG1lcmdlIG1haW4zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgdHdvIGNvbW1pdHMnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4yKQorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjMpCisJRU9GCisJZ2l0IHNob3cgbWFpbjIgbWFpbjMgPmFjdHVhbCAmJgorCWdyZXAgXmNvbW1pdCBhY3R1YWwgPmFjdHVhbC5maWx0ZXJlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmlsdGVyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyBhIHJhbmdlIHdhbGtzIChsaW5lYXIpJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMykKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4yKQorCUVPRgorCWdpdCBzaG93IG1haW4xLi5tYWluMyA+YWN0dWFsICYmCisJZ3JlcCBeY29tbWl0IGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIGEgcmFuZ2Ugd2Fsa3MgKFkgc2hhcGUsIF4gZmlyc3QpJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMykKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4yKQorCUVPRgorCWdpdCBzaG93IF5zaWRlMyBtYWluMyA+YWN0dWFsICYmCisJZ3JlcCBeY29tbWl0IGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIGEgcmFuZ2Ugd2Fsa3MgKFkgc2hhcGUsIF4gbGFzdCknICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4zKQorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjIpCisJRU9GCisJZ2l0IHNob3cgbWFpbjMgXnNpZGUzID5hY3R1YWwgJiYKKwlncmVwIF5jb21taXQgYWN0dWFsID5hY3R1YWwuZmlsdGVyZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmZpbHRlcmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgd2l0aCAtTiB3YWxrcycgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjMpCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMikKKwlFT0YKKwlnaXQgc2hvdyAtMiBtYWluMyA+YWN0dWFsICYmCisJZ3JlcCBeY29tbWl0IGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIGFubm90YXRlZCB0YWcnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwl0YWcgYW5ub3RhdGVkCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBhbm5vdGF0ZWRee2NvbW1pdH0pCisJRU9GCisJZ2l0IHNob3cgYW5ub3RhdGVkID5hY3R1YWwgJiYKKwlncmVwIC1FICJeKGNvbW1pdHx0YWcpIiBhY3R1YWwgPmFjdHVhbC5maWx0ZXJlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmlsdGVyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyBhbm5vdGF0ZWQgdGFnIHBsdXMgY29tbWl0JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJdGFnIGFubm90YXRlZAorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgYW5ub3RhdGVkXntjb21taXR9KQorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2Ugc2lkZTMpCisJRU9GCisJZ2l0IHNob3cgYW5ub3RhdGVkIHNpZGUzID5hY3R1YWwgJiYKKwlncmVwIC1FICJeKGNvbW1pdHx0YWcpIiBhY3R1YWwgPmFjdHVhbC5maWx0ZXJlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmlsdGVyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyByYW5nZScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjMpCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMikKKwlFT0YKKwlnaXQgc2hvdyBec2lkZTMgYW5ub3RhdGVkID5hY3R1YWwgJiYKKwlncmVwIC1FICJeKGNvbW1pdHx0YWcpIiBhY3R1YWwgPmFjdHVhbC5maWx0ZXJlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmlsdGVyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLXMgc3VwcHJlc3NlcyBkaWZmJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCW1lcmdlCisJbWFpbjMKKwlFT0YKKwlnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcyBtZXJnZSBtYWluMyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXF1aWV0IHN1cHByZXNzZXMgZGlmZicgJworCWVjaG8gbWFpbjMgPmV4cGVjdCAmJgorCWdpdCBzaG93IC0tcXVpZXQgLS1mb3JtYXQ9JXMgbWFpbjMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyAtLWdyYXBoIGlzIGZvcmJpZGRlbicgJworICB0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAtLWdyYXBoIEhFQUQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDA4LWZpbHRlci1icmFuY2gtbnVsbC1zaGExLnNoIGIvdC90NzAwOC1maWx0ZXItYnJhbmNoLW51bGwtc2hhMS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YmE5ZjI0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzAwOC1maWx0ZXItYnJhbmNoLW51bGwtc2hhMS5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZmlsdGVyLWJyYW5jaCByZW1vdmFsIG9mIHRyZWVzIHdpdGggbnVsbCBzaGExJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBiYXNlIGNvbW1pdHMnICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogYSBjb21taXQgd2l0aCBhIGJvZ3VzIG51bGwgc2hhMSBpbiB0aGUgdHJlZScgJworCXsKKwkJZ2l0IGxzLXRyZWUgSEVBRCAmJgorCQlwcmludGYgIjE2MDAwMCBjb21taXQgJFpFUk9fT0lEXFx0YnJva2VuXFxuIgorCX0gPmJyb2tlbi10cmVlICYmCisJZWNobyAiYWRkIGJyb2tlbiBlbnRyeSIgPm1zZyAmJgorCisJdHJlZT0kKGdpdCBta3RyZWUgPGJyb2tlbi10cmVlKSAmJgorCXRlc3RfdGljayAmJgorCWNvbW1pdD0kKGdpdCBjb21taXQtdHJlZSAkdHJlZSAtcCBIRUFEIDxtc2cpICYmCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAiJGNvbW1pdCIKKycKKworIyB3ZSBoYXZlIHRvIG1ha2Ugb25lIG1vcmUgY29tbWl0IG9uIHRvcCByZW1vdmluZyB0aGUgYnJva2VuCisjIGVudHJ5LCBzaW5jZSBvdGhlcndpc2Ugb3VyIGluZGV4IGRvZXMgbm90IG1hdGNoIEhFQUQgKGFuZCBmaWx0ZXItYnJhbmNoIHdpbGwKKyMgY29tcGxhaW4pLiBXZSBjb3VsZCBtYWtlIHRoZSBpbmRleCBtYXRjaCBIRUFELCBidXQgZG9pbmcgc28gd291bGQgaW52b2x2ZQorIyB3cml0aW5nIGEgbnVsbCBzaGExIGludG8gdGhlIGluZGV4LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGJyaW5nIEhFQUQgYW5kIGluZGV4IGluIHN5bmMnICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJiYWNrIHRvIG5vcm1hbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9vcCBmaWx0ZXItYnJhbmNoIGNvbXBsYWlucycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmaWx0ZXItYnJhbmNoIFwKKwkJLS1mb3JjZSAtLXBydW5lLWVtcHR5IFwKKwkJLS1pbmRleC1maWx0ZXIgInRydWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbHRlciBjb21tYW5kcyBhcmUgc3RpbGwgY2hlY2tlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmaWx0ZXItYnJhbmNoIFwKKwkJLS1mb3JjZSAtLXBydW5lLWVtcHR5IFwKKwkJLS1pbmRleC1maWx0ZXIgImdpdCBybSAtLWNhY2hlZCAtLWlnbm9yZS11bm1hdGNoIHRocmVlLnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92aW5nIHRoZSBicm9rZW4gZW50cnkgd29ya3MnICcKKwllY2hvIHRocmVlID5leHBlY3QgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCBcCisJCS0tZm9yY2UgLS1wcnVuZS1lbXB0eSBcCisJCS0taW5kZXgtZmlsdGVyICJnaXQgcm0gLS1jYWNoZWQgLS1pZ25vcmUtdW5tYXRjaCBicm9rZW4iICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMTAtc2V0dXAuc2ggYi90L3Q3MDEwLXNldHVwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAzMzVhOWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDEwLXNldHVwLnNoCkBAIC0wLDAgKzEsMTYxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc2V0dXAgdGFraW5nIGFuZCBzYW5pdGl6aW5nIGZ1bm55IHBhdGhzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlta2RpciAtcCBhL2IvYyBhL2UgJiYKKwlEPSQocHdkKSAmJgorCT5hL2IvYy9kICYmCisJPmEvZS9mCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAoYWJzb2x1dGUpJyAnCisKKwlnaXQgYWRkICIkRC9hL2IvYy9kIiAmJgorCWdpdCBscy1maWxlcyA+Y3VycmVudCAmJgorCWVjaG8gYS9iL2MvZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGN1cnJlbnQKKworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgKGZ1bm55IHJlbGF0aXZlKScgJworCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCSgKKwkJY2QgYS9iICYmCisJCWdpdCBhZGQgIi4uL2UvLi9mIgorCSkgJiYKKwlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYKKwllY2hvIGEvZS9mID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBybSAoYWJzb2x1dGUpJyAnCisKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IHJtIC1mIC0tY2FjaGVkICIkRC9hL2IvYy9kIiAmJgorCWdpdCBscy1maWxlcyA+Y3VycmVudCAmJgorCWVjaG8gYS9lL2YgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJtIChmdW5ueSByZWxhdGl2ZSknICcKKworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgJiYKKwkoCisJCWNkIGEvYiAmJgorCQlnaXQgcm0gLWYgLS1jYWNoZWQgIi4uL2UvLi9mIgorCSkgJiYKKwlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYKKwllY2hvIGEvYi9jL2QgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIChhYnNvbHV0ZSknICcKKworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgbHMtZmlsZXMgIiREL2EvZS8uLi9iIiA+Y3VycmVudCAmJgorCWVjaG8gYS9iL2MvZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgKHJlbGF0aXZlICMxKScgJworCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgYSAmJgorCSgKKwkJY2QgYS9iICYmCisJCWdpdCBscy1maWxlcyAiLi4vYi9jIgorCSkgID5jdXJyZW50ICYmCisJZWNobyBjL2QgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIChyZWxhdGl2ZSAjMiknICcKKworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgJiYKKwkoCisJCWNkIGEvYiAmJgorCQlnaXQgbHMtZmlsZXMgLS1mdWxsLW5hbWUgIi4uL2UvZiIKKwkpICA+Y3VycmVudCAmJgorCWVjaG8gYS9lL2YgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIChyZWxhdGl2ZSAjMyknICcKKworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgJiYKKwkoCisJCWNkIGEvYiAmJgorCQlnaXQgbHMtZmlsZXMgIi4uL2UvZiIKKwkpICA+Y3VycmVudCAmJgorCWVjaG8gLi4vZS9mID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB1c2luZyBhYnNvbHV0ZSBwYXRoIG5hbWVzJyAnCisJZ2l0IGNvbW1pdCAtbSAiZm9vIiAmJgorCWVjaG8gYWEgPj5hL2IvYy9kICYmCisJZ2l0IGNvbW1pdCAtbSAiYWEiICIkKHB3ZCkvYS9iL2MvZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIHVzaW5nIGFic29sdXRlIHBhdGggbmFtZXMnICcKKwllY2hvIGJiID4+YS9iL2MvZCAmJgorCWdpdCBjb21taXQgLW0gImJiIiAiJChwd2QpL2EvYi9jL2QiICYmCisKKwlnaXQgbG9nIGEvYi9jL2QgPmYxLnR4dCAmJgorCWdpdCBsb2cgIiQocHdkKS9hL2IvYy9kIiA+ZjIudHh0ICYmCisJdGVzdF9jbXAgZjEudHh0IGYyLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSB1c2luZyBhYnNvbHV0ZSBwYXRoIG5hbWVzJyAnCisJZ2l0IGJsYW1lIGEvYi9jL2QgPmYxLnR4dCAmJgorCWdpdCBibGFtZSAiJChwd2QpL2EvYi9jL2QiID5mMi50eHQgJiYKKwl0ZXN0X2NtcCBmMS50eHQgZjIudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRlZXBlciB3b3JrIHRyZWUnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHRlc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYSBkaXJlY3Rvcnkgb3V0c2lkZSB0aGUgd29yayB0cmVlJyAnKAorCWNkIHRlc3RlciAmJgorCWQxPSIkKGNkIC4uIDsgcHdkKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkICIkZDEiCispJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhIGZpbGUgb3V0c2lkZSB0aGUgd29yayB0cmVlLCBuYXN0eSBjYXNlIDEnICcoCisJY2QgdGVzdGVyICYmCisJZj0iJChwd2QpeCIgJiYKKwllY2hvICIkZiIgJiYKKwl0b3VjaCAiJGYiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAiJGYiCispJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYSBmaWxlIG91dHNpZGUgdGhlIHdvcmsgdHJlZSwgbmFzdHkgY2FzZSAyJyAnKAorCWNkIHRlc3RlciAmJgorCWY9IiQocHdkIHwgc2VkICJzLy4kLy8iKXgiICYmCisJZWNobyAiJGYiICYmCisJdG91Y2ggIiRmIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRmIgorKScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDExLXNraXAtd29ya3RyZWUtcmVhZGluZy5zaCBiL3QvdDcwMTEtc2tpcC13b3JrdHJlZS1yZWFkaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3NTI1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDExLXNraXAtd29ya3RyZWUtcmVhZGluZy5zaApAQCAtMCwwICsxLDE2MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3NraXAtd29ya3RyZWUgYml0IHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdC5mdWxsIDw8RU9GCitIIDEKK0ggMgorSCBpbml0LnQKK0ggc3ViLzEKK0ggc3ViLzIKK0VPRgorCitjYXQgPmV4cGVjdC5za2lwIDw8RU9GCitTIDEKK0ggMgorSCBpbml0LnQKK1Mgc3ViLzEKK0ggc3ViLzIKK0VPRgorCitzZXR1cF9hYnNlbnQoKSB7CisJdGVzdCAtZiAxICYmIHJtIDEKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkRU1QVFlfQkxPQiAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMQorfQorCit0ZXN0X2Fic2VudCgpIHsKKwllY2hvICIxMDA2NDQgJEVNUFRZX0JMT0IgMAkxIiA+IGV4cGVjdGVkICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgMSA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgorCXRlc3QgISAtZiAxCit9CisKK3NldHVwX2RpcnR5KCkgeworCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgMSAmJgorCWVjaG8gZGlydHkgPiAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJEVNUFRZX0JMT0IgMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIDEKK30KKwordGVzdF9kaXJ0eSgpIHsKKwllY2hvICIxMDA2NDQgJEVNUFRZX0JMT0IgMAkxIiA+IGV4cGVjdGVkICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgMSA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgorCWVjaG8gZGlydHkgPiBleHBlY3RlZAorCXRlc3RfY21wIGV4cGVjdGVkIDEKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0ICYmCisJbWtkaXIgc3ViICYmCisJdG91Y2ggLi8xIC4vMiBzdWIvMSBzdWIvMiAmJgorCWdpdCBhZGQgMSAyIHN1Yi8xIHN1Yi8yICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMSBzdWIvMSAmJgorCWdpdCBscy1maWxlcyAtdCA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdC5za2lwIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXgnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IDEgJiYKKwl0ZXN0X2Fic2VudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXgnICcKKwlzZXR1cF9kaXJ0eSAmJgorCWdpdCB1cGRhdGUtaW5kZXggMSAmJgorCXRlc3RfZGlydHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tcmVtb3ZlJyAnCisJc2V0dXBfYWJzZW50ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAxICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgMSkiICYmCisJdGVzdCAhIC1mIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tcmVtb3ZlJyAnCisJc2V0dXBfZGlydHkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIDEgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAxKSIgJiYKKwllY2hvIGRpcnR5ID4gZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC0tZGVsZXRlZCcgJworCXNldHVwX2Fic2VudCAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC1kKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1kZWxldGVkJyAnCisJc2V0dXBfZGlydHkgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC0tbW9kaWZpZWQnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtbSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC0tbW9kaWZpZWQnICcKKwlzZXR1cF9kaXJ0eSAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC1tKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCB3aXRoIHNraXAtd29ya3RyZWUgZmlsZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1uby1za2lwLXdvcmt0cmVlIDEgJiYKKwllY2hvIHRlc3QgPiAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMSAmJgorCXJtIDEgJiYKKwl0ZXN0ICIkKGdpdCBncmVwIC0tbm8tZXh0LWdyZXAgdGVzdCkiID0gIjE6dGVzdCIKKycKKworZWNobyAiOjAwMDAwMCAxMDA2NDQgJFpFUk9fT0lEICRFTVBUWV9CTE9CIEEJMSIgPiBleHBlY3RlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCBkb2VzIG5vdCBleGFtaW5lIHNraXAtd29ya3RyZWUgYWJzZW50IGVudHJpZXMnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwlnaXQgZGlmZi1pbmRleCBIRUFEIC0tIDEgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCBkb2VzIG5vdCBleGFtaW5lIHNraXAtd29ya3RyZWUgZGlydHkgZW50cmllcycgJworCXNldHVwX2RpcnR5ICYmCisJZ2l0IGRpZmYtaW5kZXggSEVBRCAtLSAxID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgZG9lcyBub3QgZXhhbWluZSBza2lwLXdvcmt0cmVlIGFic2VudCBlbnRyaWVzJyAnCisJc2V0dXBfYWJzZW50ICYmCisJdGVzdCAteiAiJChnaXQgZGlmZi1maWxlcyAtLSBvbmUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIGRvZXMgbm90IGV4YW1pbmUgc2tpcC13b3JrdHJlZSBkaXJ0eSBlbnRyaWVzJyAnCisJc2V0dXBfZGlydHkgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmLWZpbGVzIC0tIG9uZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1ybSBzdWNjZWVkcyBvbiBza2lwLXdvcmt0cmVlIGFic2VudCBlbnRyaWVzJyAnCisJc2V0dXBfYWJzZW50ICYmCisJZ2l0IHJtIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG9uIHNraXAtd29ya3RyZWUgYWJzZW50IGVudHJpZXMnICcKKwlnaXQgcmVzZXQgJiYKKwlzZXR1cF9hYnNlbnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIG51bGwgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgb24gc2tpcC13b3JrdHJlZSBkaXJ0eSBlbnRyaWVzJyAnCisJZ2l0IHJlc2V0ICYmCisJc2V0dXBfZGlydHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIG51bGwgMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMTItc2tpcC13b3JrdHJlZS13cml0aW5nLnNoIGIvdC90NzAxMi1za2lwLXdvcmt0cmVlLXdyaXRpbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzQ3Njc4MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMTItc2tpcC13b3JrdHJlZS13cml0aW5nLnNoCkBAIC0wLDAgKzEsMTU5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IE5ndXnhu4VuIFRow6FpIE5n4buNYyBEdXkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB3b3JrdHJlZSB3cml0aW5nIG9wZXJhdGlvbnMgd2hlbiBza2lwLXdvcmt0cmVlIGlzIHVzZWQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXQgJiYKKwllY2hvIG1vZGlmaWVkID4+IGluaXQudCAmJgorCXRvdWNoIGFkZGVkICYmCisJZ2l0IGFkZCBpbml0LnQgYWRkZWQgJiYKKwlnaXQgY29tbWl0IC1tICJtb2RpZmllZCBhbmQgYWRkZWQiICYmCisJZ2l0IHRhZyB0b3AKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIHVwZGF0ZXMgd29ya3RyZWUsIGFic2VudCBjYXNlJyAnCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIGluaXQudCAmJgorCXJtIGluaXQudCAmJgorCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRF4gJiYKKwllY2hvIGluaXQgPiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGluaXQudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgdXBkYXRlcyB3b3JrdHJlZSwgZGlydHkgY2FzZScgJworCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSBpbml0LnQgJiYKKwllY2hvIGRpcnR5ID4+IGluaXQudCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRF4gJiYKKwlncmVwIC1xIGRpcnR5IGluaXQudCAmJgorCXRlc3QgIiQoZ2l0IGxzLWZpbGVzIC10IGluaXQudCkiID0gIlMgaW5pdC50IiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1uby1za2lwLXdvcmt0cmVlIGluaXQudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgcmVtb3ZlcyB3b3JrdHJlZSwgYWJzZW50IGNhc2UnICcKKwlnaXQgY2hlY2tvdXQgLWYgdG9wICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgYWRkZWQgJiYKKwlybSBhZGRlZCAmJgorCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRF4gJiYKKwl0ZXN0ICEgLWYgYWRkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIHJlbW92ZXMgd29ya3RyZWUsIGRpcnR5IGNhc2UnICcKKwlnaXQgY2hlY2tvdXQgLWYgdG9wICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgYWRkZWQgJiYKKwllY2hvIGRpcnR5ID4+IGFkZGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAtbSAtdSBIRUFEXiAmJgorCWdyZXAgLXEgZGlydHkgYWRkZWQgJiYKKwl0ZXN0ICIkKGdpdCBscy1maWxlcyAtdCBhZGRlZCkiID0gIlMgYWRkZWQiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLXNraXAtd29ya3RyZWUgYWRkZWQKKycKKworc2V0dXBfYWJzZW50KCkgeworCXRlc3QgLWYgMSAmJiBybSAxCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJEVNUFRZX0JMT0IgMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIDEKK30KKwordGVzdF9hYnNlbnQoKSB7CisJZWNobyAiMTAwNjQ0ICRFTVBUWV9CTE9CIDAJMSIgPiBleHBlY3RlZCAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlIDEgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQgJiYKKwl0ZXN0ICEgLWYgMQorfQorCitzZXR1cF9kaXJ0eSgpIHsKKwlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIDEgJiYKKwllY2hvIGRpcnR5ID4gMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTAwNjQ0ICRFTVBUWV9CTE9CIDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAxCit9CisKK3Rlc3RfZGlydHkoKSB7CisJZWNobyAiMTAwNjQ0ICRFTVBUWV9CTE9CIDAJMSIgPiBleHBlY3RlZCAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlIDEgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQgJiYKKwllY2hvIGRpcnR5ID4gZXhwZWN0ZWQKKwl0ZXN0X2NtcCBleHBlY3RlZCAxCit9CisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK1MgMQorSCAyCitIIGluaXQudAorUyBzdWIvMQorSCBzdWIvMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4IHNldHVwJyAnCisJZ2l0IGNoZWNrb3V0IC1mIGluaXQgJiYKKwlta2RpciBzdWIgJiYKKwl0b3VjaCAuLzEgLi8yIHN1Yi8xIHN1Yi8yICYmCisJZ2l0IGFkZCAxIDIgc3ViLzEgc3ViLzIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAxIHN1Yi8xICYmCisJZ2l0IGxzLWZpbGVzIC10ID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1hZGQgaWdub3JlcyB3b3JrdHJlZSBjb250ZW50JyAnCisJc2V0dXBfYWJzZW50ICYmCisJZ2l0IGFkZCAxICYmCisJdGVzdF9hYnNlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFkZCBpZ25vcmVzIHdvcmt0cmVlIGNvbnRlbnQnICcKKwlzZXR1cF9kaXJ0eSAmJgorCWdpdCBhZGQgMSAmJgorCXRlc3RfZGlydHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LXJtIGZhaWxzIGlmIHdvcmt0cmVlIGlzIGRpcnR5JyAnCisJc2V0dXBfZGlydHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gMSAmJgorCXRlc3RfZGlydHkKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorV291bGQgcmVtb3ZlIGV4cGVjdGVkCitXb3VsZCByZW1vdmUgcmVzdWx0CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1jbGVhbiwgYWJzZW50IGNhc2UnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwlnaXQgY2xlYW4gLW4gPiByZXN1bHQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1jbGVhbiwgZGlydHkgY2FzZScgJworCXNldHVwX2RpcnR5ICYmCisJZ2l0IGNsZWFuIC1uID4gcmVzdWx0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1za2lwLXdvcmt0cmVlLWVudHJpZXMgbGVhdmVzIHdvcmt0cmVlIGFsb25lJyAnCisJdGVzdF9jb21taXQga2VlcC1tZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIGtlZXAtbWUudCAmJgorCXJtIGtlZXAtbWUudCAmJgorCisJOiBpZ25vcmluZyB0aGUgd29ya3RyZWUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0taWdub3JlLXNraXAtd29ya3RyZWUtZW50cmllcyBrZWVwLW1lLnQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWV4aXQtY29kZSBIRUFEICYmCisKKwk6IG5vdCBpZ25vcmluZyB0aGUgd29ya3RyZWUsIGEgZGVsZXRpb24gaXMgc3RhZ2VkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBrZWVwLW1lLnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWV4aXQtY29kZSBIRUFEIFwKKwkJLS1kaWZmLWZpbHRlcj1EIC0tIGtlZXAtbWUudAorJworCisjVE9ETyB0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQtYXBwbHkgYWRkcyBmaWxlJyBmYWxzZQorI1RPRE8gdGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0LWFwcGx5IHVwZGF0ZXMgZmlsZScgZmFsc2UKKyNUT0RPIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdC1hcHBseSByZW1vdmVzIGZpbGUnIGZhbHNlCisjVE9ETyB0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQtbXYgdG8gc2tpcC13b3JrdHJlZScgZmFsc2UKKyNUT0RPIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdC1tdiBmcm9tIHNraXAtd29ya3RyZWUnIGZhbHNlCisjVE9ETyB0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQtY2hlY2tvdXQnIGZhbHNlCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAzMC12ZXJpZnktdGFnLnNoIGIvdC90NzAzMC12ZXJpZnktdGFnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVjNWJjMzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDMwLXZlcmlmeS10YWcuc2gKQEAgLTAsMCArMSwxOTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzaWduZWQgdGFnIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLWdwZy5zaCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2NyZWF0ZSBzaWduZWQgdGFncycgJworCWVjaG8gMSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyAtcyAtbSBpbml0aWFsIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKworCWVjaG8gMiA+ZmlsZSAmJiB0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtbSBzZWNvbmQgJiYKKwlnaXQgdGFnIC1zIC1tIHNlY29uZCBzZWNvbmQgJiYKKworCWdpdCBjaGVja291dCBzaWRlICYmCisJZWNobyAzID5lbGlmICYmIGdpdCBhZGQgZWxpZiAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJ0aGlyZCBvbiBzaWRlIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJiBnaXQgbWVyZ2UgLVMgc2lkZSAmJgorCWdpdCB0YWcgLXMgLW0gbWVyZ2UgbWVyZ2UgJiYKKworCWVjaG8gNCA+ZmlsZSAmJiB0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtUyAtbSAiZm91cnRoIHVuc2lnbmVkIiAmJgorCWdpdCB0YWcgLWEgLW0gZm91cnRoLXVuc2lnbmVkIGZvdXJ0aC11bnNpZ25lZCAmJgorCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLS1hbWVuZCAtUyAtbSAiZm91cnRoIHNpZ25lZCIgJiYKKwlnaXQgdGFnIC1zIC1tIGZvdXJ0aCBmb3VydGgtc2lnbmVkICYmCisKKwllY2hvIDUgPmZpbGUgJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gImZpZnRoIiAmJgorCWdpdCB0YWcgZmlmdGgtdW5zaWduZWQgJiYKKworCWdpdCBjb25maWcgY29tbWl0LmdwZ3NpZ24gdHJ1ZSAmJgorCWVjaG8gNiA+ZmlsZSAmJiB0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtbSAic2l4dGgiICYmCisJZ2l0IHRhZyAtYSAtbSBzaXh0aCBzaXh0aC11bnNpZ25lZCAmJgorCisJdGVzdF90aWNrICYmIGdpdCByZWJhc2UgLWYgSEVBRF5eICYmIGdpdCB0YWcgLXMgLW0gNnRoIHNpeHRoLXNpZ25lZCBIRUFEXiAmJgorCWdpdCB0YWcgLW0gc2V2ZW50aCAtcyBzZXZlbnRoLXNpZ25lZCAmJgorCisJZWNobyA4ID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tIGVpZ2h0aCAmJgorCWdpdCB0YWcgLXVCNzIyNzE4OSAtbSBlaWdodGggZWlnaHRoLXNpZ25lZC1hbHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEdTTSAnY3JlYXRlIHNpZ25lZCB0YWdzIHg1MDkgJyAnCisJdGVzdF9jb25maWcgZ3BnLmZvcm1hdCB4NTA5ICYmCisJdGVzdF9jb25maWcgdXNlci5zaWduaW5na2V5ICRHSVRfQ09NTUlUVEVSX0VNQUlMICYmCisJZWNobyA5ID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tICJuaW50aCBncGdzbS1zaWduZWQiICYmCisJZ2l0IHRhZyAtcyAtbSBuaW50aCBuaW50aC1zaWduZWQteDUwOQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5IGFuZCBzaG93IHNpZ25hdHVyZXMnICcKKwkoCisJCWZvciB0YWcgaW4gaW5pdGlhbCBzZWNvbmQgbWVyZ2UgZm91cnRoLXNpZ25lZCBzaXh0aC1zaWduZWQgc2V2ZW50aC1zaWduZWQKKwkJZG8KKwkJCWdpdCB2ZXJpZnktdGFnICR0YWcgMj5hY3R1YWwgJiYKKwkJCWdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCQkJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCQkJZWNobyAkdGFnIE9LIHx8IGV4aXQgMQorCQlkb25lCisJKSAmJgorCSgKKwkJZm9yIHRhZyBpbiBmb3VydGgtdW5zaWduZWQgZmlmdGgtdW5zaWduZWQgc2l4dGgtdW5zaWduZWQKKwkJZG8KKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktdGFnICR0YWcgMj5hY3R1YWwgJiYKKwkJCSEgZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJCQkhIGdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJCQllY2hvICR0YWcgT0sgfHwgZXhpdCAxCisJCWRvbmUKKwkpICYmCisJKAorCQlmb3IgdGFnIGluIGVpZ2h0aC1zaWduZWQtYWx0CisJCWRvCisJCQlnaXQgdmVyaWZ5LXRhZyAkdGFnIDI+YWN0dWFsICYmCisJCQlncmVwICJHb29kIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkJCSEgZ3JlcCAiQkFEIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkJCWdyZXAgIm5vdCBjZXJ0aWZpZWQiIGFjdHVhbCAmJgorCQkJZWNobyAkdGFnIE9LIHx8IGV4aXQgMQorCQlkb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICd2ZXJpZnkgYW5kIHNob3cgc2lnbmF0dXJlcyB4NTA5JyAnCisJZ2l0IHZlcmlmeS10YWcgbmludGgtc2lnbmVkLXg1MDkgMj5hY3R1YWwgJiYKKwlncmVwICJHb29kIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkhIGdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJZWNobyBuaW50aC1zaWduZWQteDUwOSBPSworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICd2ZXJpZnkgYW5kIHNob3cgc2lnbmF0dXJlcyB4NTA5IHdpdGggbG93IG1pblRydXN0TGV2ZWwnICcKKwl0ZXN0X2NvbmZpZyBncGcubWluVHJ1c3RMZXZlbCB1bmRlZmluZWQgJiYKKwlnaXQgdmVyaWZ5LXRhZyBuaW50aC1zaWduZWQteDUwOSAyPmFjdHVhbCAmJgorCWdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCSEgZ3JlcCAiQkFEIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwllY2hvIG5pbnRoLXNpZ25lZC14NTA5IE9LCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ3ZlcmlmeSBhbmQgc2hvdyBzaWduYXR1cmVzIHg1MDkgd2l0aCBtYXRjaGluZyBtaW5UcnVzdExldmVsJyAnCisJdGVzdF9jb25maWcgZ3BnLm1pblRydXN0TGV2ZWwgZnVsbHkgJiYKKwlnaXQgdmVyaWZ5LXRhZyBuaW50aC1zaWduZWQteDUwOSAyPmFjdHVhbCAmJgorCWdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCSEgZ3JlcCAiQkFEIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwllY2hvIG5pbnRoLXNpZ25lZC14NTA5IE9LCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ3ZlcmlmeSBhbmQgc2hvdyBzaWduYXR1cmVzIHg1MDkgd2l0aCBoaWdoIG1pblRydXN0TGV2ZWwnICcKKwl0ZXN0X2NvbmZpZyBncGcubWluVHJ1c3RMZXZlbCB1bHRpbWF0ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktdGFnIG5pbnRoLXNpZ25lZC14NTA5IDI+YWN0dWFsICYmCisJZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCWVjaG8gbmludGgtc2lnbmVkLXg1MDkgT0sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2RldGVjdCBmdWRnZWQgc2lnbmF0dXJlJyAnCisJZ2l0IGNhdC1maWxlIHRhZyBzZXZlbnRoLXNpZ25lZCA+cmF3ICYmCisJc2VkIC1lICIvXnRhZyAvIHMvc2V2ZW50aC83dGggZm9yZ2VkLyIgcmF3ID5mb3JnZWQxICYmCisJZ2l0IGhhc2gtb2JqZWN0IC13IC10IHRhZyBmb3JnZWQxID5mb3JnZWQxLnRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktdGFnICQoY2F0IGZvcmdlZDEudGFnKSAyPmFjdHVhbDEgJiYKKwlncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbDEgJiYKKwkhIGdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeSBzaWduYXR1cmVzIHdpdGggLS1yYXcnICcKKwkoCisJCWZvciB0YWcgaW4gaW5pdGlhbCBzZWNvbmQgbWVyZ2UgZm91cnRoLXNpZ25lZCBzaXh0aC1zaWduZWQgc2V2ZW50aC1zaWduZWQKKwkJZG8KKwkJCWdpdCB2ZXJpZnktdGFnIC0tcmF3ICR0YWcgMj5hY3R1YWwgJiYKKwkJCWdyZXAgIkdPT0RTSUciIGFjdHVhbCAmJgorCQkJISBncmVwICJCQURTSUciIGFjdHVhbCAmJgorCQkJZWNobyAkdGFnIE9LIHx8IGV4aXQgMQorCQlkb25lCisJKSAmJgorCSgKKwkJZm9yIHRhZyBpbiBmb3VydGgtdW5zaWduZWQgZmlmdGgtdW5zaWduZWQgc2l4dGgtdW5zaWduZWQKKwkJZG8KKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktdGFnIC0tcmF3ICR0YWcgMj5hY3R1YWwgJiYKKwkJCSEgZ3JlcCAiR09PRFNJRyIgYWN0dWFsICYmCisJCQkhIGdyZXAgIkJBRFNJRyIgYWN0dWFsICYmCisJCQllY2hvICR0YWcgT0sgfHwgZXhpdCAxCisJCWRvbmUKKwkpICYmCisJKAorCQlmb3IgdGFnIGluIGVpZ2h0aC1zaWduZWQtYWx0CisJCWRvCisJCQlnaXQgdmVyaWZ5LXRhZyAtLXJhdyAkdGFnIDI+YWN0dWFsICYmCisJCQlncmVwICJHT09EU0lHIiBhY3R1YWwgJiYKKwkJCSEgZ3JlcCAiQkFEU0lHIiBhY3R1YWwgJiYKKwkJCWdyZXAgIlRSVVNUX1VOREVGSU5FRCIgYWN0dWFsICYmCisJCQllY2hvICR0YWcgT0sgfHwgZXhpdCAxCisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ3ZlcmlmeSBzaWduYXR1cmVzIHdpdGggLS1yYXcgeDUwOScgJworCWdpdCB2ZXJpZnktdGFnIC0tcmF3IG5pbnRoLXNpZ25lZC14NTA5IDI+YWN0dWFsICYmCisJZ3JlcCAiR09PRFNJRyIgYWN0dWFsICYmCisJISBncmVwICJCQURTSUciIGFjdHVhbCAmJgorCWVjaG8gbmludGgtc2lnbmVkLXg1MDkgT0sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeSBtdWx0aXBsZSB0YWdzJyAnCisJdGFncz0iZm91cnRoLXNpZ25lZCBzaXh0aC1zaWduZWQgc2V2ZW50aC1zaWduZWQiICYmCisJZm9yIGkgaW4gJHRhZ3MKKwlkbworCQlnaXQgdmVyaWZ5LXRhZyAtdiAtLXJhdyAkaSB8fCByZXR1cm4gMQorCWRvbmUgPmV4cGVjdC5zdGRvdXQgMj5leHBlY3Quc3RkZXJyLjEgJiYKKwlncmVwICJeLkdOVVBHOi4iIDxleHBlY3Quc3RkZXJyLjEgPmV4cGVjdC5zdGRlcnIgJiYKKwlnaXQgdmVyaWZ5LXRhZyAtdiAtLXJhdyAkdGFncyA+YWN0dWFsLnN0ZG91dCAyPmFjdHVhbC5zdGRlcnIuMSAmJgorCWdyZXAgIl4uR05VUEc6LiIgPGFjdHVhbC5zdGRlcnIuMSA+YWN0dWFsLnN0ZGVyciAmJgorCXRlc3RfY21wIGV4cGVjdC5zdGRvdXQgYWN0dWFsLnN0ZG91dCAmJgorCXRlc3RfY21wIGV4cGVjdC5zdGRlcnIgYWN0dWFsLnN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICd2ZXJpZnkgbXVsdGlwbGUgdGFncyB4NTA5JyAnCisJdGFncz0ic2V2ZW50aC1zaWduZWQgbmludGgtc2lnbmVkLXg1MDkiICYmCisJZm9yIGkgaW4gJHRhZ3MKKwlkbworCQlnaXQgdmVyaWZ5LXRhZyAtdiAtLXJhdyAkaSB8fCByZXR1cm4gMQorCWRvbmUgPmV4cGVjdC5zdGRvdXQgMj5leHBlY3Quc3RkZXJyLjEgJiYKKwlncmVwICJeLkdOVVBHOi4iIDxleHBlY3Quc3RkZXJyLjEgPmV4cGVjdC5zdGRlcnIgJiYKKwlnaXQgdmVyaWZ5LXRhZyAtdiAtLXJhdyAkdGFncyA+YWN0dWFsLnN0ZG91dCAyPmFjdHVhbC5zdGRlcnIuMSAmJgorCWdyZXAgIl4uR05VUEc6LiIgPGFjdHVhbC5zdGRlcnIuMSA+YWN0dWFsLnN0ZGVyciAmJgorCXRlc3RfY21wIGV4cGVjdC5zdGRvdXQgYWN0dWFsLnN0ZG91dCAmJgorCXRlc3RfY21wIGV4cGVjdC5zdGRlcnIgYWN0dWFsLnN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5aW5nIHRhZyB3aXRoIC0tZm9ybWF0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXRhZ25hbWUgOiBmb3VydGgtc2lnbmVkCisJRU9GCisJZ2l0IHZlcmlmeS10YWcgLS1mb3JtYXQ9InRhZ25hbWUgOiAlKHRhZykiICJmb3VydGgtc2lnbmVkIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5aW5nIGEgZm9yZ2VkIHRhZyB3aXRoIC0tZm9ybWF0IHNob3VsZCBmYWlsIHNpbGVudGx5JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS10YWcgLS1mb3JtYXQ9InRhZ25hbWUgOiAlKHRhZykiICQoY2F0IGZvcmdlZDEudGFnKSA+YWN0dWFsLWZvcmdlZCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwtZm9yZ2VkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzA2MC13dHN0YXR1cy5zaCBiL3QvdDcwNjAtd3RzdGF0dXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDUyMTg3NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwNjAtd3RzdGF0dXMuc2gKQEAgLTAsMCArMSwyNTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyB3b3JrIHRyZWUgc3RhdHVzIHJlcG9ydGluZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgLS1nbG9iYWwgYWR2aWNlLnN0YXR1c3VvcHRpb24gZmFsc2UgJiYKKwl0ZXN0X2NvbW1pdCBBICYmCisJdGVzdF9jb21taXQgQiBvbmVzaWRlIGFkZGVkICYmCisJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCXRlc3RfY29tbWl0IEMgb25lc2lkZSBjcmVhdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0EvQSBjb25mbGljdCcgJworCWdpdCBjaGVja291dCBCXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXBvcnQgcGF0aCB3aXRoIGNvbmZsaWN0JyAnCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLXN0YXR1cyA+YWN0dWFsICYmCisJZWNobyAiVQlvbmVzaWRlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXBvcnQgbmV3IHBhdGggd2l0aCBjb25mbGljdCcgJworCWdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1zdGF0dXMgSEVBRF4gPmFjdHVhbCAmJgorCWVjaG8gIlUJb25lc2lkZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTS9EIGNvbmZsaWN0IGRvZXMgbm90IHNlZ2ZhdWx0JyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK09uIGJyYW5jaCBzaWRlCitZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4KKyAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biAiZ2l0IGNvbW1pdCIpCisgICh1c2UgImdpdCBtZXJnZSAtLWFib3J0IiB0byBhYm9ydCB0aGUgbWVyZ2UpCisKK1VubWVyZ2VkIHBhdGhzOgorICAodXNlICJnaXQgYWRkL3JtIDxmaWxlPi4uLiIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKQorCWRlbGV0ZWQgYnkgdXM6ICAgZm9vCisKK25vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCitFT0YKKwlta2RpciBtZGNvbmZsaWN0ICYmCisJKAorCQljZCBtZGNvbmZsaWN0ICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3RfY29tbWl0IGluaXRpYWwgZm9vICIiICYmCisJCXRlc3RfY29tbWl0IG1vZGlmeSBmb28gZm9vICYmCisJCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUReICYmCisJCWdpdCBybSBmb28gJiYKKwkJZ2l0IGNvbW1pdCAtbSBkZWxldGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZHJ5LXJ1biA+Li4vYWN0dWFsICYmCisJCXRlc3RfaTE4bmNtcCAuLi9leHBlY3QgLi4vYWN0dWFsICYmCisJCWdpdCBzdGF0dXMgPi4uL2FjdHVhbCAmJgorCQl0ZXN0X2kxOG5jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lICYgdW5tZXJnZWQgc2V0dXAnICcKKwlnaXQgcm0gLWYgLXIgLiAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZL1JFQURNRSIgPk9ORSAmJgorCWdpdCBhZGQgT05FICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiT25lIGNvbW1pdCB3aXRoIE9ORSIgJiYKKworCWVjaG8gTW9kaWZpZWQgPlRXTyAmJgorCWNhdCBPTkUgPj5UV08gJiYKKwljYXQgT05FID4+VEhSRUUgJiYKKwlnaXQgYWRkIFRXTyBUSFJFRSAmJgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIDpPTkUpICYmCisJZ2l0IHJtIC0tY2FjaGVkIE9ORSAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRzaGExIDEJT05FIiAmJgorCQllY2hvICIxMDA2NDQgJHNoYTEgMglPTkUiICYmCisJCWVjaG8gIjEwMDY0NCAkc2hhMSAzCU9ORSIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwllY2hvIEZ1cnRoZXIgPj5USFJFRQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgJiB1bm1lcmdlZCBzdGF0dXMnICcKKwlnaXQgc3RhdHVzIC1zdW5vID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlVVSBPTkUKKwlBTSBUSFJFRQorCUEgIFRXTworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgc2hvd3MgMiBhZGRlZCArIDEgdW5tZXJnZWQnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVUJT05FCisJQQlUSFJFRQorCUEJVFdPCisJRU9GCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1uYW1lLXN0YXR1cyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLU0gc2hvd3MgMiBhZGRlZCArIDEgdW5tZXJnZWQnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVUJT05FCisJQQlUSFJFRQorCUEJVFdPCisJRU9GCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLU0gLS1uYW1lLXN0YXR1cyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLUMgc2hvd3MgMiBjb3BpZXMgKyAxIHVubWVyZ2VkJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlVCU9ORQorCUMJT05FCVRIUkVFCisJQwlPTkUJVFdPCisJRU9GCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLUMgLS1uYW1lLXN0YXR1cyBIRUFEIHwKKwlzZWQgInMvXkNbMC05XSovQy9nIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gY29uZmxpY3RzIHdpdGggYWRkIGFuZCBybSBhZHZpY2UgKGRlbGV0ZWQgYnkgdGhlbSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IGluaXQgbWFpbi50eHQgaW5pdCAmJgorCWdpdCBjaGVja291dCAtYiBzZWNvbmRfYnJhbmNoICYmCisJZ2l0IHJtIG1haW4udHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAibWFpbi50eHQgZGVsZXRlZCBvbiBzZWNvbmRfYnJhbmNoIiAmJgorCXRlc3RfY29tbWl0IHNlY29uZCBjb25mbGljdC50eHQgc2Vjb25kICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG9uX3NlY29uZCBtYWluLnR4dCBvbl9zZWNvbmQgJiYKKwl0ZXN0X2NvbW1pdCBtYXN0ZXIgY29uZmxpY3QudHh0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzZWNvbmRfYnJhbmNoICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK1lvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLgorICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuICJnaXQgY29tbWl0IikKKyAgKHVzZSAiZ2l0IG1lcmdlIC0tYWJvcnQiIHRvIGFib3J0IHRoZSBtZXJnZSkKKworVW5tZXJnZWQgcGF0aHM6CisgICh1c2UgImdpdCBhZGQvcm0gPGZpbGU+Li4uIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pCisJYm90aCBhZGRlZDogICAgICBjb25mbGljdC50eHQKKwlkZWxldGVkIGJ5IHRoZW06IG1haW4udHh0CisKK25vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBmb3IgY29uZmxpY3RzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBjb25mbGljdCAmJgorCXRlc3RfY29tbWl0IG9uZSBtYWluLnR4dCBvbmUgJiYKKwlnaXQgYnJhbmNoIGNvbmZsaWN0X3NlY29uZCAmJgorCWdpdCBtdiBtYWluLnR4dCBzdWJfbWFzdGVyLnR4dCAmJgorCWdpdCBjb21taXQgLW0gIm1haW4udHh0IHJlbmFtZWQgaW4gc3ViX21hc3Rlci50eHQiICYmCisJZ2l0IGNoZWNrb3V0IGNvbmZsaWN0X3NlY29uZCAmJgorCWdpdCBtdiBtYWluLnR4dCBzdWJfc2Vjb25kLnR4dCAmJgorCWdpdCBjb21taXQgLW0gIm1haW4udHh0IHJlbmFtZWQgaW4gc3ViX3NlY29uZC50eHQiCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gY29uZmxpY3RzIHdpdGggYWRkIGFuZCBybSBhZHZpY2UgKGJvdGggZGVsZXRlZCknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3QgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorT24gYnJhbmNoIGNvbmZsaWN0X3NlY29uZAorWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuCisgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorICAodXNlICJnaXQgbWVyZ2UgLS1hYm9ydCIgdG8gYWJvcnQgdGhlIG1lcmdlKQorCitVbm1lcmdlZCBwYXRoczoKKyAgKHVzZSAiZ2l0IGFkZC9ybSA8ZmlsZT4uLi4iIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikKKwlib3RoIGRlbGV0ZWQ6ICAgIG1haW4udHh0CisJYWRkZWQgYnkgdGhlbTogICBzdWJfbWFzdGVyLnR4dAorCWFkZGVkIGJ5IHVzOiAgICAgc3ViX3NlY29uZC50eHQKKworbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjb25mbGljdHMgd2l0aCBvbmx5IHJtIGFkdmljZSAoYm90aCBkZWxldGVkKScgJworCWdpdCByZXNldCAtLWhhcmQgY29uZmxpY3Rfc2Vjb25kICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0ICYmCisJZ2l0IGFkZCBzdWJfbWFzdGVyLnR4dCAmJgorCWdpdCBhZGQgc3ViX3NlY29uZC50eHQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorT24gYnJhbmNoIGNvbmZsaWN0X3NlY29uZAorWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuCisgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorICAodXNlICJnaXQgbWVyZ2UgLS1hYm9ydCIgdG8gYWJvcnQgdGhlIG1lcmdlKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKwluZXcgZmlsZTogICBzdWJfbWFzdGVyLnR4dAorCitVbm1lcmdlZCBwYXRoczoKKyAgKHVzZSAiZ2l0IHJtIDxmaWxlPi4uLiIgdG8gbWFyayByZXNvbHV0aW9uKQorCWJvdGggZGVsZXRlZDogICAgbWFpbi50eHQKKworVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC0tYnJhbmNoIHdpdGggZGV0YWNoZWQgSEVBRCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwlnaXQgc3RhdHVzIC0tYnJhbmNoIC0tcG9yY2VsYWluID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCSMjIEhFQUQgKG5vIGJyYW5jaCkKKwk/PyAuZ2l0Y29uZmlnCisJPz8gYWN0dWFsCisJPz8gZXhwZWN0CisJPz8gZXhwZWN0ZWQKKwk/PyBtZGNvbmZsaWN0LworCUVPRgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworIyMgRHVwbGljYXRlIHRoZSBhYm92ZSB0ZXN0IGFuZCB2ZXJpZnkgLS1wb3JjZWxhaW49djEgYXJnIHBhcnNpbmcuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLS1wb3JjZWxhaW49djEgLS1icmFuY2ggd2l0aCBkZXRhY2hlZCBIRUFEJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCWdpdCBzdGF0dXMgLS1icmFuY2ggLS1wb3JjZWxhaW49djEgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJIyMgSEVBRCAobm8gYnJhbmNoKQorCT8/IC5naXRjb25maWcKKwk/PyBhY3R1YWwKKwk/PyBleHBlY3QKKwk/PyBleHBlY3RlZAorCT8/IG1kY29uZmxpY3QvCisJRU9GCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisjIyBWZXJpZnkgcGFyc2VyIGVycm9yIG9uIGludmFsaWQgLS1wb3JjZWxhaW4gYXJndW1lbnQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLS1wb3JjZWxhaW49Ym9ndXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3RhdHVzIC0tcG9yY2VsYWluPWJvZ3VzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzA2MS13dHN0YXR1cy1pZ25vcmUuc2ggYi90L3Q3MDYxLXd0c3RhdHVzLWlnbm9yZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNGNmNTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzA2MS13dHN0YXR1cy1pZ25vcmUuc2gKQEAgLTAsMCArMSwyOTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtc3RhdHVzIGlnbm9yZWQgZmlsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorPz8gdW50cmFja2VkLworISEgdW50cmFja2VkL2lnbm9yZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgdW50cmFja2VkIGRpcmVjdG9yeSB3aXRoIC0taWdub3JlZCcgJworCWVjaG8gImlnbm9yZWQiID4uZ2l0aWdub3JlICYmCisJbWtkaXIgdW50cmFja2VkICYmCisJOiA+dW50cmFja2VkL2lnbm9yZWQgJiYKKwk6ID51bnRyYWNrZWQvdW5jb21taXR0ZWQgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUgd2l0aCBnaXRpZ25vcmUgc3RhcnRpbmcgd2l0aCBCT00nICcKKwlwcmludGYgIlwzNTdcMjczXDI3N2lnbm9yZWRcbiIgPi5naXRpZ25vcmUgJiYKKwlta2RpciAtcCB1bnRyYWNrZWQgJiYKKwk6ID51bnRyYWNrZWQvaWdub3JlZCAmJgorCTogPnVudHJhY2tlZC91bmNvbW1pdHRlZCAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKKz8/IHVudHJhY2tlZC91bmNvbW1pdHRlZAorISEgdW50cmFja2VkL2lnbm9yZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgdW50cmFja2VkIGRpcmVjdG9yeSB3aXRoIC0taWdub3JlZCAtdScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkIC11ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyB1bnRyYWNrZWQvCishISB1bnRyYWNrZWQvaWdub3JlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBvZiB1bnRyYWNrZWQgZGlyZWN0b3J5IHdpdGggLS1pZ25vcmVkIHdvcmtzIHdpdGggb3Igd2l0aG91dCBwcmVmaXgnICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCA+dG1wICYmCisJZ3JlcCB1bnRyYWNrZWQvIHRtcCA+YWN0dWFsICYmCisJcm0gdG1wICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCB1bnRyYWNrZWQvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IHVudHJhY2tlZC91bmNvbW1pdHRlZAorISEgdW50cmFja2VkL2lnbm9yZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgcHJlZml4ZWQgdW50cmFja2VkIHN1Yi1kaXJlY3Rvcnkgd2l0aCAtLWlnbm9yZWQgLXUnICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCAtdSB1bnRyYWNrZWQvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKKyEhIGlnbm9yZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGlnbm9yZWQgZGlyZWN0b3J5IHdpdGggLS1pZ25vcmUnICcKKwlybSAtcmYgdW50cmFja2VkICYmCisJbWtkaXIgaWdub3JlZCAmJgorCTogPmlnbm9yZWQvdW5jb21taXR0ZWQgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCishISBpZ25vcmVkL3VuY29tbWl0dGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGlnbm9yZWQgZGlyZWN0b3J5IHdpdGggLS1pZ25vcmUgLXUnICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGVtcHR5IHVudHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCAtLWlnbm9yZScgJworCXJtIC1yZiBpZ25vcmVkICYmCisJbWtkaXIgdW50cmFja2VkLWlnbm9yZWQgJiYKKwlta2RpciB1bnRyYWNrZWQtaWdub3JlZC90ZXN0ICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBlbXB0eSB1bnRyYWNrZWQgZGlyZWN0b3J5IHdpdGggLS1pZ25vcmUgLXUnICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCishISB1bnRyYWNrZWQtaWdub3JlZC8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgdW50cmFja2VkIGRpcmVjdG9yeSB3aXRoIGlnbm9yZWQgZmlsZXMgd2l0aCAtLWlnbm9yZScgJworCTogPnVudHJhY2tlZC1pZ25vcmVkL2lnbm9yZWQgJiYKKwk6ID51bnRyYWNrZWQtaWdub3JlZC90ZXN0L2lnbm9yZWQgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCishISB1bnRyYWNrZWQtaWdub3JlZC9pZ25vcmVkCishISB1bnRyYWNrZWQtaWdub3JlZC90ZXN0L2lnbm9yZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgdW50cmFja2VkIGRpcmVjdG9yeSB3aXRoIGlnbm9yZWQgZmlsZXMgd2l0aCAtLWlnbm9yZSAtdScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkIC11ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaWdub3JlZCB0cmFja2VkIGRpcmVjdG9yeSB3aXRoIC0taWdub3JlJyAnCisJcm0gLXJmIHVudHJhY2tlZC1pZ25vcmVkICYmCisJbWtkaXIgdHJhY2tlZCAmJgorCTogPnRyYWNrZWQvY29tbWl0dGVkICYmCisJZ2l0IGFkZCB0cmFja2VkL2NvbW1pdHRlZCAmJgorCWdpdCBjb21taXQgLW0uICYmCisJZWNobyAidHJhY2tlZCIgPi5naXRpZ25vcmUgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGlnbm9yZWQgdHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCAtLWlnbm9yZSAtdScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkIC11ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaWdub3JlZCB0cmFja2VkIGRpcmVjdG9yeSBhbmQgaWdub3JlZCBmaWxlIHdpdGggLS1pZ25vcmUnICcKKwllY2hvICJjb21taXR0ZWQiID4+LmdpdGlnbm9yZSAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaWdub3JlZCB0cmFja2VkIGRpcmVjdG9yeSBhbmQgaWdub3JlZCBmaWxlIHdpdGggLS1pZ25vcmUgLXUnICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCishISB0cmFja2VkL3VuY29tbWl0dGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGlnbm9yZWQgdHJhY2tlZCBkaXJlY3RvcnkgYW5kIHVuY29tbWl0dGVkIGZpbGUgd2l0aCAtLWlnbm9yZScgJworCWVjaG8gInRyYWNrZWQiID4uZ2l0aWdub3JlICYmCisJOiA+dHJhY2tlZC91bmNvbW1pdHRlZCAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKKyEhIHRyYWNrZWQvdW5jb21taXR0ZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaWdub3JlZCB0cmFja2VkIGRpcmVjdG9yeSBhbmQgdW5jb21taXR0ZWQgZmlsZSB3aXRoIC0taWdub3JlIC11JyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgLXUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorISEgdHJhY2tlZC9pZ25vcmVkLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpZ25vcmVkIHRyYWNrZWQgZGlyZWN0b3J5IHdpdGggdW5jb21taXR0ZWQgZmlsZSBpbiB1bnRyYWNrZWQgc3ViZGlyIHdpdGggLS1pZ25vcmUnICcKKwlybSAtcmYgdHJhY2tlZC91bmNvbW1pdHRlZCAmJgorCW1rZGlyIHRyYWNrZWQvaWdub3JlZCAmJgorCTogPnRyYWNrZWQvaWdub3JlZC91bmNvbW1pdHRlZCAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKKyEhIHRyYWNrZWQvaWdub3JlZC91bmNvbW1pdHRlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpZ25vcmVkIHRyYWNrZWQgZGlyZWN0b3J5IHdpdGggdW5jb21taXR0ZWQgZmlsZSBpbiB1bnRyYWNrZWQgc3ViZGlyIHdpdGggLS1pZ25vcmUgLXUnICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCishISB0cmFja2VkL2lnbm9yZWQvdW5jb21taXR0ZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaWdub3JlZCB0cmFja2VkIGRpcmVjdG9yeSB3aXRoIHVuY29tbWl0dGVkIGZpbGUgaW4gdHJhY2tlZCBzdWJkaXIgd2l0aCAtLWlnbm9yZScgJworCTogPnRyYWNrZWQvaWdub3JlZC9jb21taXR0ZWQgJiYKKwlnaXQgYWRkIC1mIHRyYWNrZWQvaWdub3JlZC9jb21taXR0ZWQgJiYKKwlnaXQgY29tbWl0IC1tLiAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKKyEhIHRyYWNrZWQvaWdub3JlZC91bmNvbW1pdHRlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpZ25vcmVkIHRyYWNrZWQgZGlyZWN0b3J5IHdpdGggdW5jb21taXR0ZWQgZmlsZSBpbiB0cmFja2VkIHN1YmRpciB3aXRoIC0taWdub3JlIC11JyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgLXUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorISEgdHJhY2tlZC9zdWJtb2R1bGUvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGlnbm9yZXMgc3VibW9kdWxlIGluIGV4Y2x1ZGVkIGRpcmVjdG9yeScgJworCWdpdCBpbml0IHRyYWNrZWQvc3VibW9kdWxlICYmCisJdGVzdF9jb21taXQgLUMgdHJhY2tlZC9zdWJtb2R1bGUgaW5pdGlhbCAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkIC11IHRyYWNrZWQvc3VibW9kdWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDYyLXd0c3RhdHVzLWlnbm9yZWNhc2Uuc2ggYi90L3Q3MDYyLXd0c3RhdHVzLWlnbm9yZWNhc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzM3MDlkYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwNjItd3RzdGF0dXMtaWdub3JlY2FzZS5zaApAQCAtMCwwICsxLDIwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LXN0YXR1cyB3aXRoIGNvcmUuaWdub3JlY2FzZT10cnVlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggaGFzaCBjb2xsaXNpb25zJyAnCisJIyBub3RlOiAiVi8iLCAiVi9YUUFOWS8iIGFuZCAiV1VSWkFVUC8iIHByb2R1Y2UgdGhlIHNhbWUgaGFzaCBjb2RlCisJIyBpbiBuYW1lLWhhc2guYzo6aGFzaF9uYW1lCisJbWtkaXIgViAmJgorCW1rZGlyIFYvWFFBTlkgJiYKKwlta2RpciBXVVJaQVVQICYmCisJdG91Y2ggVi9YUUFOWS90ZXN0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLmlnbm9yZWNhc2UgdHJ1ZSAmJgorCWdpdCBhZGQgLiAmJgorCSMgdGVzdCBpcyBzdWNjZXNzZnVsIGlmIGdpdCBzdGF0dXMgY29tcGxldGVzIChubyBlbmRsZXNzIGxvb3ApCisJZ2l0IHN0YXR1cworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwNjMtc3RhdHVzLXVudHJhY2tlZC1jYWNoZS5zaCBiL3QvdDcwNjMtc3RhdHVzLXVudHJhY2tlZC1jYWNoZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MjhjZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzA2My1zdGF0dXMtdW50cmFja2VkLWNhY2hlLnNoCkBAIC0wLDAgKzEsODI3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB1bnRyYWNrZWQgY2FjaGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIE9uIHNvbWUgZmlsZXN5c3RlbXMgKGUuZy4gRnJlZUJTRCdzIGV4dDIgYW5kIHVmcykgZGlyZWN0b3J5IG10aW1lCisjIGlzIHVwZGF0ZWQgbGF6aWx5IGFmdGVyIGNvbnRlbnRzIGluIHRoZSBkaXJlY3RvcnkgY2hhbmdlcywgd2hpY2gKKyMgZm9yY2VzIHRoZSB1bnRyYWNrZWQgY2FjaGUgY29kZSB0byB0YWtlIHRoZSBzbG93IHBhdGguICBBIHRlc3QKKyMgdGhhdCB3YW50cyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZmFzdCBwYXRoIHdvcmtzIGNvcnJlY3RseSBzaG91bGQKKyMgY2FsbCB0aGlzIGhlbHBlciB0byBtYWtlIG10aW1lIG9mIHRoZSBjb250YWluaW5nIGRpcmVjdG9yeSBpbiBzeW5jCisjIHdpdGggdGhlIHJlYWxpdHkgYmVmb3JlIGNoZWNraW5nIHRoZSBmYXN0IHBhdGggYmVoYXZpb3VyLgorIworIyBTZWUgPDIwMTYwODAzMTc0NTIyLjU1NzEtMS1wY2xvdWRzQGdtYWlsLmNvbT4gaWYgeW91IHdhbnQgdG8ga25vdworIyBtb3JlLgorCitHSVRfRk9SQ0VfVU5UUkFDS0VEX0NBQ0hFPXRydWUKK2V4cG9ydCBHSVRfRk9SQ0VfVU5UUkFDS0VEX0NBQ0hFCisKK3N5bmNfbXRpbWUgKCkgeworCWZpbmQgLiAtdHlwZSBkIC1leGVjIGxzIC1sZCB7fSArID4vZGV2L251bGwKK30KKworYXZvaWRfcmFjeSgpIHsKKwlzbGVlcCAxCit9CisKK3N0YXR1c19pc19jbGVhbigpIHsKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9zdGF0dXMuYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IC4uL3N0YXR1cy5hY3R1YWwKK30KKworIyBJZ25vcmVfVW50cmFja2VkX0NhY2hlLCBhYmJyZXZpYXRlZCB0byAzIGxldHRlcnMgYmVjYXVzZSB0aGVuIHBlb3BsZSBjYW4KKyMgY29tcGFyZSBjb21tYW5kcyBzaWRlLWJ5LXNpZGUsIGUuZy4KKyMgICAgaXVjIHN0YXR1cyAtLXBvcmNlbGFpbiA+ZXhwZWN0ICYmCisjICAgIGdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPmFjdHVhbCAmJgorIyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCitpdWMgKCkgeworCWdpdCBscy1maWxlcyAtcyA+Li4vY3VycmVudC1pbmRleC1lbnRyaWVzCisJZ2l0IGxzLWZpbGVzIC10IHwgc2VkIC1uZSBzL15TLi8vcCA+Li4vY3VycmVudC1zcGFyc2UtZW50cmllcworCisJR0lUX0lOREVYX0ZJTEU9LmdpdC90bXBfaW5kZXgKKwlleHBvcnQgR0lUX0lOREVYX0ZJTEUKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8Li4vY3VycmVudC1pbmRleC1lbnRyaWVzCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgJChjYXQgLi4vY3VycmVudC1zcGFyc2UtZW50cmllcykKKworCWdpdCAtYyBjb3JlLnVudHJhY2tlZENhY2hlPWZhbHNlICIkQCIKKwlyZXQ9JD8KKworCXJtIC4uL2N1cnJlbnQtaW5kZXgtZW50cmllcworCXJtICRHSVRfSU5ERVhfRklMRQorCXVuc2V0IEdJVF9JTkRFWF9GSUxFCisKKwlyZXR1cm4gJHJldAorfQorCit0ZXN0X2xhenlfcHJlcmVxIFVOVFJBQ0tFRF9DQUNIRSAnCisJeyBnaXQgdXBkYXRlLWluZGV4IC0tdGVzdC11bnRyYWNrZWQtY2FjaGU7IHJldD0kPzsgfSAmJgorCXRlc3QgJHJldCAtbmUgMQorJworCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgVU5UUkFDS0VEX0NBQ0hFOyB0aGVuCisJc2tpcF9hbGw9J1RoaXMgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgdW50cmFja2VkIGNhY2hlJworCXRlc3RfZG9uZQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29yZS51bnRyYWNrZWRDYWNoZSBpcyB1bnNldCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQgY29yZS51bnRyYWNrZWRDYWNoZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBpbml0IHdvcmt0cmVlICYmCisJY2Qgd29ya3RyZWUgJiYKKwlta2RpciBkb25lIGR0d28gZHRocmVlICYmCisJdG91Y2ggb25lIHR3byB0aHJlZSBkb25lL29uZSBkdHdvL3R3byBkdGhyZWUvdGhyZWUgJiYKKwlnaXQgYWRkIG9uZSB0d28gZG9uZS9vbmUgJiYKKwk6ID4uZ2l0L2luZm8vZXhjbHVkZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS11bnRyYWNrZWQtY2FjaGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW50cmFja2VkIGNhY2hlIGlzIGVtcHR5JyAnCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL2V4cGVjdC1lbXB0eSA8PEVPRiAmJgoraW5mby9leGNsdWRlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0LWVtcHR5IC4uL2FjdHVhbAorJworCitjYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKK0EgIGRvbmUvb25lCitBICBvbmUKK0EgIHR3bworPz8gZHRocmVlLworPz8gZHR3by8KKz8/IHRocmVlCitFT0YKKworY2F0ID4uLi9kdW1wLmV4cGVjdCA8PEVPRiAmJgoraW5mby9leGNsdWRlICRFTVBUWV9CTE9CCitjb3JlLmV4Y2x1ZGVzZmlsZSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitleGNsdWRlX3Blcl9kaXIgLmdpdGlnbm9yZQorZmxhZ3MgMDAwMDAwMDYKKy8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIHZhbGlkCitkdGhyZWUvCitkdHdvLwordGhyZWUKKy9kb25lLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgdmFsaWQKKy9kdGhyZWUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCit0aHJlZQorL2R0d28vIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCit0d28KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgZmlyc3QgdGltZSAoZW1wdHkgY2FjaGUpJyAnCisJYXZvaWRfcmFjeSAmJgorCTogPi4uL3RyYWNlICYmCisJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgXAorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL2FjdHVhbCAmJgorCWl1YyBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL3N0YXR1cy5pdWMgJiYKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5pdWMgJiYKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL2FjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAzCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAxCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAwCitvcGVuZGlyOiA0CitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW50cmFja2VkIGNhY2hlIGFmdGVyIGZpcnN0IHN0YXR1cycgJworCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJdGVzdF9jbXAgLi4vZHVtcC5leHBlY3QgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzZWNvbmQgdGltZSAoZnVsbHkgcG9wdWxhdGVkIGNhY2hlKScgJworCWF2b2lkX3JhY3kgJiYKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9hY3R1YWwgJiYKKwlpdWMgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9zdGF0dXMuaXVjICYmCisJdGVzdF9jbXAgLi4vc3RhdHVzLmV4cGVjdCAuLi9zdGF0dXMuaXVjICYmCisJdGVzdF9jbXAgLi4vc3RhdHVzLmV4cGVjdCAuLi9hY3R1YWwgJiYKKwljYXQgPi4uL3RyYWNlLmV4cGVjdCA8PEVPRiAmJgorbm9kZSBjcmVhdGlvbjogMAorZ2l0aWdub3JlIGludmFsaWRhdGlvbjogMAorZGlyZWN0b3J5IGludmFsaWRhdGlvbjogMAorb3BlbmRpcjogMAorRU9GCisJdGVzdF9jbXAgLi4vdHJhY2UuZXhwZWN0IC4uL3RyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VudHJhY2tlZCBjYWNoZSBhZnRlciBzZWNvbmQgc3RhdHVzJyAnCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9kdW1wLmV4cGVjdCAuLi9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZ5IGluIHJvb3QgZGlyZWN0b3J5LCBvbmUgZGlyIGludmFsaWRhdGlvbicgJworCWF2b2lkX3JhY3kgJiYKKwk6ID5mb3VyICYmCisJOiA+Li4vdHJhY2UgJiYKKwlHSVRfVFJBQ0VfVU5UUkFDS0VEX1NUQVRTPSIkVFJBU0hfRElSRUNUT1JZL3RyYWNlIiBcCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+Li4vYWN0dWFsICYmCisJaXVjIHN0YXR1cyAtLXBvcmNlbGFpbiA+Li4vc3RhdHVzLml1YyAmJgorCWNhdCA+Li4vc3RhdHVzLmV4cGVjdCA8PEVPRiAmJgorQSAgZG9uZS9vbmUKK0EgIG9uZQorQSAgdHdvCis/PyBkdGhyZWUvCis/PyBkdHdvLworPz8gZm91cgorPz8gdGhyZWUKK0VPRgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vc3RhdHVzLml1YyAmJgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vYWN0dWFsICYmCisJY2F0ID4uLi90cmFjZS5leHBlY3QgPDxFT0YgJiYKK25vZGUgY3JlYXRpb246IDAKK2dpdGlnbm9yZSBpbnZhbGlkYXRpb246IDAKK2RpcmVjdG9yeSBpbnZhbGlkYXRpb246IDEKK29wZW5kaXI6IDEKK0VPRgorCXRlc3RfY21wIC4uL3RyYWNlLmV4cGVjdCAuLi90cmFjZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB1bnRyYWNrZWQgY2FjaGUgZHVtcCcgJworCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJY2F0ID4uLi9leHBlY3QgPDxFT0YgJiYKK2luZm8vZXhjbHVkZSAkRU1QVFlfQkxPQgorY29yZS5leGNsdWRlc2ZpbGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZXhjbHVkZV9wZXJfZGlyIC5naXRpZ25vcmUKK2ZsYWdzIDAwMDAwMDA2CisvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSB2YWxpZAorZHRocmVlLworZHR3by8KK2ZvdXIKK3RocmVlCisvZG9uZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIHZhbGlkCisvZHRocmVlLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordGhyZWUKKy9kdHdvLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordHdvCitFT0YKKwl0ZXN0X2NtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyAuZ2l0aWdub3JlIGludmFsaWRhdGVzIHJlY3Vyc2l2ZWx5JyAnCisJYXZvaWRfcmFjeSAmJgorCWVjaG8gZm91ciA+LmdpdGlnbm9yZSAmJgorCTogPi4uL3RyYWNlICYmCisJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgXAorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL2FjdHVhbCAmJgorCWl1YyBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL3N0YXR1cy5pdWMgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKK0EgIGRvbmUvb25lCitBICBvbmUKK0EgIHR3bworPz8gLmdpdGlnbm9yZQorPz8gZHRocmVlLworPz8gZHR3by8KKz8/IHRocmVlCitFT0YKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5pdWMgJiYKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL2FjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAwCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAxCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAxCitvcGVuZGlyOiA0CitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdW50cmFja2VkIGNhY2hlIGR1bXAnICcKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vZXhwZWN0IDw8RU9GICYmCitpbmZvL2V4Y2x1ZGUgJEVNUFRZX0JMT0IKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UgdmFsaWQKKy5naXRpZ25vcmUKK2R0aHJlZS8KK2R0d28vCit0aHJlZQorL2RvbmUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSB2YWxpZAorL2R0aHJlZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3RocmVlCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgaW5mby9leGNsdWRlIGludmFsaWRhdGVzIGV2ZXJ5dGhpbmcnICcKKwlhdm9pZF9yYWN5ICYmCisJZWNobyB0aHJlZSA+Pi5naXQvaW5mby9leGNsdWRlICYmCisJOiA+Li4vdHJhY2UgJiYKKwlHSVRfVFJBQ0VfVU5UUkFDS0VEX1NUQVRTPSIkVFJBU0hfRElSRUNUT1JZL3RyYWNlIiBcCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+Li4vYWN0dWFsICYmCisJaXVjIHN0YXR1cyAtLXBvcmNlbGFpbiA+Li4vc3RhdHVzLml1YyAmJgorCWNhdCA+Li4vc3RhdHVzLmV4cGVjdCA8PEVPRiAmJgorQSAgZG9uZS9vbmUKK0EgIG9uZQorQSAgdHdvCis/PyAuZ2l0aWdub3JlCis/PyBkdHdvLworRU9GCisJdGVzdF9jbXAgLi4vc3RhdHVzLmV4cGVjdCAuLi9zdGF0dXMuaXVjICYmCisJdGVzdF9jbXAgLi4vc3RhdHVzLmV4cGVjdCAuLi9hY3R1YWwgJiYKKwljYXQgPi4uL3RyYWNlLmV4cGVjdCA8PEVPRiAmJgorbm9kZSBjcmVhdGlvbjogMAorZ2l0aWdub3JlIGludmFsaWRhdGlvbjogMQorZGlyZWN0b3J5IGludmFsaWRhdGlvbjogMAorb3BlbmRpcjogNAorRU9GCisJdGVzdF9jbXAgLi4vdHJhY2UuZXhwZWN0IC4uL3RyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB1bnRyYWNrZWQgY2FjaGUgZHVtcCcgJworCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJY2F0ID4uLi9leHBlY3QgPDxFT0YgJiYKK2luZm8vZXhjbHVkZSAxMzI2M2MwOTc4ZmI5ZmFkMTZiMmQ1ODBmYjgwMGI2ZDgxMWMzZmYwCitjb3JlLmV4Y2x1ZGVzZmlsZSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitleGNsdWRlX3Blcl9kaXIgLmdpdGlnbm9yZQorZmxhZ3MgMDAwMDAwMDYKKy8gZTZmY2M4ZjJlZTMxYmFlMzIxZDY2YWZkMTgzZmNiNzIzN2FmYWU2ZSByZWN1cnNlIHZhbGlkCisuZ2l0aWdub3JlCitkdHdvLworL2RvbmUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSB2YWxpZAorL2R0aHJlZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKKy9kdHdvLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordHdvCitFT0YKKwl0ZXN0X2NtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmUgdHdvIGZyb20gdHJhY2tlZCB0byB1bnRyYWNrZWQnICcKKwlnaXQgcm0gLS1jYWNoZWQgdHdvICYmCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL2V4cGVjdCA8PEVPRiAmJgoraW5mby9leGNsdWRlIDEzMjYzYzA5NzhmYjlmYWQxNmIyZDU4MGZiODAwYjZkODExYzNmZjAKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UKKy9kb25lLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgdmFsaWQKKy9kdGhyZWUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgYWZ0ZXIgdGhlIG1vdmUnICcKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9hY3R1YWwgJiYKKwlpdWMgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9zdGF0dXMuaXVjICYmCisJY2F0ID4uLi9zdGF0dXMuZXhwZWN0IDw8RU9GICYmCitBICBkb25lL29uZQorQSAgb25lCis/PyAuZ2l0aWdub3JlCis/PyBkdHdvLworPz8gdHdvCitFT0YKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5pdWMgJiYKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL2FjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAwCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAwCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAwCitvcGVuZGlyOiAxCitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHVudHJhY2tlZCBjYWNoZSBkdW1wJyAnCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL2V4cGVjdCA8PEVPRiAmJgoraW5mby9leGNsdWRlIDEzMjYzYzA5NzhmYjlmYWQxNmIyZDU4MGZiODAwYjZkODExYzNmZjAKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UgdmFsaWQKKy5naXRpZ25vcmUKK2R0d28vCit0d28KKy9kb25lLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgdmFsaWQKKy9kdGhyZWUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3ZlIHR3byBmcm9tIHVudHJhY2tlZCB0byB0cmFja2VkJyAnCisJZ2l0IGFkZCB0d28gJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vZXhwZWN0IDw8RU9GICYmCitpbmZvL2V4Y2x1ZGUgMTMyNjNjMDk3OGZiOWZhZDE2YjJkNTgwZmI4MDBiNmQ4MTFjM2ZmMAorY29yZS5leGNsdWRlc2ZpbGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZXhjbHVkZV9wZXJfZGlyIC5naXRpZ25vcmUKK2ZsYWdzIDAwMDAwMDA2CisvIGU2ZmNjOGYyZWUzMWJhZTMyMWQ2NmFmZDE4M2ZjYjcyMzdhZmFlNmUgcmVjdXJzZQorL2RvbmUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSB2YWxpZAorL2R0aHJlZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKKy9kdHdvLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordHdvCitFT0YKKwl0ZXN0X2NtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBhZnRlciB0aGUgbW92ZScgJworCTogPi4uL3RyYWNlICYmCisJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgXAorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL2FjdHVhbCAmJgorCWl1YyBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL3N0YXR1cy5pdWMgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKK0EgIGRvbmUvb25lCitBICBvbmUKK0EgIHR3bworPz8gLmdpdGlnbm9yZQorPz8gZHR3by8KK0VPRgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vc3RhdHVzLml1YyAmJgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vYWN0dWFsICYmCisJY2F0ID4uLi90cmFjZS5leHBlY3QgPDxFT0YgJiYKK25vZGUgY3JlYXRpb246IDAKK2dpdGlnbm9yZSBpbnZhbGlkYXRpb246IDAKK2RpcmVjdG9yeSBpbnZhbGlkYXRpb246IDAKK29wZW5kaXI6IDEKK0VPRgorCXRlc3RfY21wIC4uL3RyYWNlLmV4cGVjdCAuLi90cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdW50cmFja2VkIGNhY2hlIGR1bXAnICcKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vZXhwZWN0IDw8RU9GICYmCitpbmZvL2V4Y2x1ZGUgMTMyNjNjMDk3OGZiOWZhZDE2YjJkNTgwZmI4MDBiNmQ4MTFjM2ZmMAorY29yZS5leGNsdWRlc2ZpbGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZXhjbHVkZV9wZXJfZGlyIC5naXRpZ25vcmUKK2ZsYWdzIDAwMDAwMDA2CisvIGU2ZmNjOGYyZWUzMWJhZTMyMWQ2NmFmZDE4M2ZjYjcyMzdhZmFlNmUgcmVjdXJzZSB2YWxpZAorLmdpdGlnbm9yZQorZHR3by8KKy9kb25lLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgdmFsaWQKKy9kdGhyZWUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZm9yIHNwYXJzZSBjaGVja291dCB0ZXN0aW5nJyAnCisJZWNobyB0d28gPmRvbmUvLmdpdGlnbm9yZSAmJgorCWVjaG8gdGhyZWUgPj5kb25lLy5naXRpZ25vcmUgJiYKKwllY2hvIHR3byA+ZG9uZS90d28gJiYKKwlnaXQgYWRkIC1mIGRvbmUvdHdvIGRvbmUvLmdpdGlnbm9yZSAmJgorCWdpdCBjb21taXQgLW0gImZpcnN0IGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGFmdGVyIGNvbW1pdCcgJworCTogPi4uL3RyYWNlICYmCisJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgXAorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL2FjdHVhbCAmJgorCWl1YyBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL3N0YXR1cy5pdWMgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKKz8/IC5naXRpZ25vcmUKKz8/IGR0d28vCitFT0YKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5pdWMgJiYKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL2FjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAwCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAwCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAwCitvcGVuZGlyOiAyCitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW50cmFja2VkIGNhY2hlIGNvcnJlY3QgYWZ0ZXIgY29tbWl0JyAnCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL2V4cGVjdCA8PEVPRiAmJgoraW5mby9leGNsdWRlIDEzMjYzYzA5NzhmYjlmYWQxNmIyZDU4MGZiODAwYjZkODExYzNmZjAKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UgdmFsaWQKKy5naXRpZ25vcmUKK2R0d28vCisvZG9uZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIHZhbGlkCisvZHRocmVlLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAorL2R0d28vIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCit0d28KK0VPRgorCXRlc3RfY21wIC4uL2V4cGVjdCAuLi9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHNwYXJzZSBjaGVja291dCcgJworCWVjaG8gImRvbmUvW2Etel0qIiA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCXRlc3RfY29uZmlnIGNvcmUuc3BhcnNlY2hlY2tvdXQgdHJ1ZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtdW50cmFja2VkLWNhY2hlICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+L2Rldi9udWxsICYmICMgcHJpbWUgdGhlIGNhY2hlCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZG9uZS8uZ2l0aWdub3JlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZG9uZS9vbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlL21vZGlmeSBmaWxlcywgc29tZSBvZiB3aGljaCBhcmUgZ2l0aWdub3JlZCcgJworCWVjaG8gdHdvIGJpcyA+ZG9uZS90d28gJiYKKwllY2hvIHRocmVlID5kb25lL3RocmVlICYmICMgdGhyZWUgaXMgZ2l0aWdub3JlZAorCWVjaG8gZm91ciA+ZG9uZS9mb3VyICYmICMgZm91ciBpcyBnaXRpZ25vcmVkIGF0IGEgaGlnaGVyIGxldmVsCisJZWNobyBmaXZlID5kb25lL2ZpdmUgJiYgIyBmaXZlIGlzIG5vdCBnaXRpZ25vcmVkCisJZWNobyB0ZXN0ID5iYXNlICYmICN3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSByb290IGRpciBpcyB0b3VjaGVkCisJcm0gYmFzZSAmJgorCXN5bmNfbXRpbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzcGFyc2Ugc3RhdHVzIHdpdGggdW50cmFja2VkIGNhY2hlJyAnCisJOiA+Li4vdHJhY2UgJiYKKwlhdm9pZF9yYWN5ICYmCisJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgXAorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL3N0YXR1cy5hY3R1YWwgJiYKKwlpdWMgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9zdGF0dXMuaXVjICYmCisJY2F0ID4uLi9zdGF0dXMuZXhwZWN0IDw8RU9GICYmCisgTSBkb25lL3R3bworPz8gLmdpdGlnbm9yZQorPz8gZG9uZS9maXZlCis/PyBkdHdvLworRU9GCisJdGVzdF9jbXAgLi4vc3RhdHVzLmV4cGVjdCAuLi9zdGF0dXMuaXVjICYmCisJdGVzdF9jbXAgLi4vc3RhdHVzLmV4cGVjdCAuLi9zdGF0dXMuYWN0dWFsICYmCisJY2F0ID4uLi90cmFjZS5leHBlY3QgPDxFT0YgJiYKK25vZGUgY3JlYXRpb246IDAKK2dpdGlnbm9yZSBpbnZhbGlkYXRpb246IDEKK2RpcmVjdG9yeSBpbnZhbGlkYXRpb246IDIKK29wZW5kaXI6IDIKK0VPRgorCXRlc3RfY21wIC4uL3RyYWNlLmV4cGVjdCAuLi90cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnRyYWNrZWQgY2FjaGUgY29ycmVjdCBhZnRlciBzdGF0dXMnICcKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vZXhwZWN0IDw8RU9GICYmCitpbmZvL2V4Y2x1ZGUgMTMyNjNjMDk3OGZiOWZhZDE2YjJkNTgwZmI4MDBiNmQ4MTFjM2ZmMAorY29yZS5leGNsdWRlc2ZpbGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZXhjbHVkZV9wZXJfZGlyIC5naXRpZ25vcmUKK2ZsYWdzIDAwMDAwMDA2CisvIGU2ZmNjOGYyZWUzMWJhZTMyMWQ2NmFmZDE4M2ZjYjcyMzdhZmFlNmUgcmVjdXJzZSB2YWxpZAorLmdpdGlnbm9yZQorZHR3by8KKy9kb25lLyAxOTQ2ZjA0MzdmOTBjNTAwNTUzM2NiZTE3MzZhNjQ1MWNhMzAxNzE0IHJlY3Vyc2UgdmFsaWQKK2ZpdmUKKy9kdGhyZWUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNwYXJzZSBzdGF0dXMgYWdhaW4gd2l0aCB1bnRyYWNrZWQgY2FjaGUnICcKKwlhdm9pZF9yYWN5ICYmCisJOiA+Li4vdHJhY2UgJiYKKwlHSVRfVFJBQ0VfVU5UUkFDS0VEX1NUQVRTPSIkVFJBU0hfRElSRUNUT1JZL3RyYWNlIiBcCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+Li4vc3RhdHVzLmFjdHVhbCAmJgorCWl1YyBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL3N0YXR1cy5pdWMgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKKyBNIGRvbmUvdHdvCis/PyAuZ2l0aWdub3JlCis/PyBkb25lL2ZpdmUKKz8/IGR0d28vCitFT0YKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5pdWMgJiYKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5hY3R1YWwgJiYKKwljYXQgPi4uL3RyYWNlLmV4cGVjdCA8PEVPRiAmJgorbm9kZSBjcmVhdGlvbjogMAorZ2l0aWdub3JlIGludmFsaWRhdGlvbjogMAorZGlyZWN0b3J5IGludmFsaWRhdGlvbjogMAorb3BlbmRpcjogMAorRU9GCisJdGVzdF9jbXAgLi4vdHJhY2UuZXhwZWN0IC4uL3RyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBmb3IgdGVzdCBvZiBzdWJkaXIgYW5kIHNwYXJzZSBjaGVja291dHMnICcKKwlta2RpciBkb25lL3N1YiAmJgorCW1rZGlyIGRvbmUvc3ViL3N1YiAmJgorCWVjaG8gInN1YiIgPiBkb25lL3N1Yi9zdWIvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNwYXJzZSBzdGF0dXMgd2l0aCB1bnRyYWNrZWQgY2FjaGUgYW5kIHN1YmRpcicgJworCWF2b2lkX3JhY3kgJiYKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9zdGF0dXMuYWN0dWFsICYmCisJaXVjIHN0YXR1cyAtLXBvcmNlbGFpbiA+Li4vc3RhdHVzLml1YyAmJgorCWNhdCA+Li4vc3RhdHVzLmV4cGVjdCA8PEVPRiAmJgorIE0gZG9uZS90d28KKz8/IC5naXRpZ25vcmUKKz8/IGRvbmUvZml2ZQorPz8gZG9uZS9zdWIvCis/PyBkdHdvLworRU9GCisJdGVzdF9jbXAgLi4vc3RhdHVzLmV4cGVjdCAuLi9zdGF0dXMuaXVjICYmCisJdGVzdF9jbXAgLi4vc3RhdHVzLmV4cGVjdCAuLi9zdGF0dXMuYWN0dWFsICYmCisJY2F0ID4uLi90cmFjZS5leHBlY3QgPDxFT0YgJiYKK25vZGUgY3JlYXRpb246IDIKK2dpdGlnbm9yZSBpbnZhbGlkYXRpb246IDAKK2RpcmVjdG9yeSBpbnZhbGlkYXRpb246IDEKK29wZW5kaXI6IDMKK0VPRgorCXRlc3RfY21wIC4uL3RyYWNlLmV4cGVjdCAuLi90cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdW50cmFja2VkIGNhY2hlIGR1bXAgKHNwYXJzZS9zdWJkaXJzKScgJworCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJY2F0ID4uLi9leHBlY3QtZnJvbS10ZXN0LWR1bXAgPDxFT0YgJiYKK2luZm8vZXhjbHVkZSAxMzI2M2MwOTc4ZmI5ZmFkMTZiMmQ1ODBmYjgwMGI2ZDgxMWMzZmYwCitjb3JlLmV4Y2x1ZGVzZmlsZSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitleGNsdWRlX3Blcl9kaXIgLmdpdGlnbm9yZQorZmxhZ3MgMDAwMDAwMDYKKy8gZTZmY2M4ZjJlZTMxYmFlMzIxZDY2YWZkMTgzZmNiNzIzN2FmYWU2ZSByZWN1cnNlIHZhbGlkCisuZ2l0aWdub3JlCitkdHdvLworL2RvbmUvIDE5NDZmMDQzN2Y5MGM1MDA1NTMzY2JlMTczNmE2NDUxY2EzMDE3MTQgcmVjdXJzZSB2YWxpZAorZml2ZQorc3ViLworL2RvbmUvc3ViLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAorc3ViLworL2RvbmUvc3ViL3N1Yi8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK2ZpbGUKKy9kdGhyZWUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0LWZyb20tdGVzdC1kdW1wIC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNwYXJzZSBzdGF0dXMgYWdhaW4gd2l0aCB1bnRyYWNrZWQgY2FjaGUgYW5kIHN1YmRpcicgJworCWF2b2lkX3JhY3kgJiYKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9zdGF0dXMuYWN0dWFsICYmCisJaXVjIHN0YXR1cyAtLXBvcmNlbGFpbiA+Li4vc3RhdHVzLml1YyAmJgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vc3RhdHVzLml1YyAmJgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vc3RhdHVzLmFjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAwCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAwCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAwCitvcGVuZGlyOiAwCitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSBlbnRyeSBpbiBzdWJkaXIgZnJvbSB1bnRyYWNrZWQgdG8gY2FjaGVkJyAnCisJZ2l0IGFkZCBkdHdvL3R3byAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL3N0YXR1cy5hY3R1YWwgJiYKKwlpdWMgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9zdGF0dXMuaXVjICYmCisJY2F0ID4uLi9zdGF0dXMuZXhwZWN0IDw8RU9GICYmCisgTSBkb25lL3R3bworQSAgZHR3by90d28KKz8/IC5naXRpZ25vcmUKKz8/IGRvbmUvZml2ZQorPz8gZG9uZS9zdWIvCitFT0YKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5pdWMgJiYKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSBlbnRyeSBpbiBzdWJkaXIgZnJvbSBjYWNoZWQgdG8gdW50cmFja2VkJyAnCisJZ2l0IHJtIC0tY2FjaGVkIGR0d28vdHdvICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+Li4vc3RhdHVzLmFjdHVhbCAmJgorCWl1YyBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL3N0YXR1cy5pdWMgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKKyBNIGRvbmUvdHdvCis/PyAuZ2l0aWdub3JlCis/PyBkb25lL2ZpdmUKKz8/IGRvbmUvc3ViLworPz8gZHR3by8KK0VPRgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vc3RhdHVzLml1YyAmJgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vc3RhdHVzLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXVudHJhY2tlZC1jYWNoZSByZW1vdmVzIHRoZSBjYWNoZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1uby11bnRyYWNrZWQtY2FjaGUgJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWVjaG8gIm5vIHVudHJhY2tlZCBjYWNoZSIgPi4uL2V4cGVjdC1uby11YyAmJgorCXRlc3RfY21wIC4uL2V4cGVjdC1uby11YyAuLi9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN0YXR1cyBkb2VzIG5vdCBjaGFuZ2UgYW55dGhpbmcnICcKKwlnaXQgc3RhdHVzICYmCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9leHBlY3Qtbm8tdWMgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgY29yZS51bnRyYWNrZWRDYWNoZSB0byB0cnVlIGFuZCB1c2luZyBnaXQgc3RhdHVzIGNyZWF0ZXMgdGhlIGNhY2hlJyAnCisJZ2l0IGNvbmZpZyBjb3JlLnVudHJhY2tlZENhY2hlIHRydWUgJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCXRlc3RfY21wIC4uL2V4cGVjdC1uby11YyAuLi9hY3R1YWwgJiYKKwlnaXQgc3RhdHVzICYmCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9leHBlY3QtZnJvbS10ZXN0LWR1bXAgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIC0tbm8tdW50cmFja2VkLWNhY2hlIGRvZXMgbm90IGZhaWwgd2hlbiBjb3JlLnVudHJhY2tlZENhY2hlIGlzIHRydWUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tdW50cmFja2VkLWNhY2hlICYmCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9leHBlY3Qtbm8tdWMgLi4vYWN0dWFsICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXVudHJhY2tlZC1jYWNoZSAmJgorCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJdGVzdF9jbXAgLi4vZXhwZWN0LWVtcHR5IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR0aW5nIGNvcmUudW50cmFja2VkQ2FjaGUgdG8gZmFsc2UgYW5kIHVzaW5nIGdpdCBzdGF0dXMgcmVtb3ZlcyB0aGUgY2FjaGUnICcKKwlnaXQgY29uZmlnIGNvcmUudW50cmFja2VkQ2FjaGUgZmFsc2UgJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCXRlc3RfY21wIC4uL2V4cGVjdC1lbXB0eSAuLi9hY3R1YWwgJiYKKwlnaXQgc3RhdHVzICYmCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9leHBlY3Qtbm8tdWMgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIC0tdW50cmFja2VkLWNhY2hlIGRvZXMgbm90IGZhaWwgd2hlbiBjb3JlLnVudHJhY2tlZENhY2hlIGlzIGZhbHNlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXVudHJhY2tlZC1jYWNoZSAmJgorCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJdGVzdF9jbXAgLi4vZXhwZWN0LWVtcHR5IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR0aW5nIGNvcmUudW50cmFja2VkQ2FjaGUgdG8ga2VlcCcgJworCWdpdCBjb25maWcgY29yZS51bnRyYWNrZWRDYWNoZSBrZWVwICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXVudHJhY2tlZC1jYWNoZSAmJgorCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJdGVzdF9jbXAgLi4vZXhwZWN0LWVtcHR5IC4uL2FjdHVhbCAmJgorCWdpdCBzdGF0dXMgJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCXRlc3RfY21wIC4uL2V4cGVjdC1mcm9tLXRlc3QtZHVtcCAuLi9hY3R1YWwgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tdW50cmFja2VkLWNhY2hlICYmCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9leHBlY3Qtbm8tdWMgLi4vYWN0dWFsICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXVudHJhY2tlZC1jYWNoZSAmJgorCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJdGVzdF9jbXAgLi4vZXhwZWN0LWVtcHR5IC4uL2FjdHVhbCAmJgorCWdpdCBzdGF0dXMgJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCXRlc3RfY21wIC4uL2V4cGVjdC1mcm9tLXRlc3QtZHVtcCAuLi9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBpZGVudCBmaWVsZCBpcyB3b3JraW5nJyAnCisJbWtkaXIgLi4vb3RoZXJfd29ya3RyZWUgJiYKKwljcCAtUiBkb25lIGR0aHJlZSBkdHdvIGZvdXIgdGhyZWUgLi4vb3RoZXJfd29ya3RyZWUgJiYKKwlHSVRfV09SS19UUkVFPS4uL290aGVyX3dvcmt0cmVlIGdpdCBzdGF0dXMgMj4uLi9lcnIgJiYKKwllY2hvICJ3YXJuaW5nOiB1bnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24iID4uLi9leHBlY3QgJiYKKwl0ZXN0X2kxOG5jbXAgLi4vZXhwZWN0IC4uL2VycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnRyYWNrZWQgY2FjaGUgc3Vydml2ZXMgYSBjaGVja291dCcgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBlbXB0eSAmJgorCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYmVmb3JlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgb3RoZXJfYnJhbmNoICYmCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hZnRlciAmJgorCXRlc3RfY21wIC4uL2JlZm9yZSAuLi9hZnRlciAmJgorCXRlc3RfY29tbWl0IHRlc3QgJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2JlZm9yZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FmdGVyICYmCisJdGVzdF9jbXAgLi4vYmVmb3JlIC4uL2FmdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VudHJhY2tlZCBjYWNoZSBzdXJ2aXZlcyBhIGNvbW1pdCcgJworCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYmVmb3JlICYmCisJZ2l0IGFkZCBkb25lL3R3byAmJgorCWdpdCBjb21taXQgLW0gY29tbWl0ICYmCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hZnRlciAmJgorCXRlc3RfY21wIC4uL2JlZm9yZSAuLi9hZnRlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZWFyZG93biB3b3JrdHJlZScgJworCWNkIC4uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3NldHVwIHdvcmt0cmVlIGZvciBzeW1saW5rIHRlc3QnICcKKwlnaXQgaW5pdCB3b3JrdHJlZS1zeW1saW5rICYmCisJY2Qgd29ya3RyZWUtc3ltbGluayAmJgorCWdpdCBjb25maWcgY29yZS51bnRyYWNrZWRDYWNoZSB0cnVlICYmCisJbWtkaXIgb25lIHR3byAmJgorCXRvdWNoIG9uZS9maWxlIHR3by9maWxlICYmCisJZ2l0IGFkZCBvbmUvZmlsZSB0d28vZmlsZSAmJgorCWdpdCBjb21taXQgLW0iZmlyc3QgY29tbWl0IiAmJgorCWdpdCBybSAtcmYgb25lICYmCisJbG4gLXMgdHdvIG9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZ2l0IGNvbW1pdCAtbSJzZWNvbmQgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICcic3RhdHVzIiBhZnRlciBzeW1saW5rIHJlcGxhY2VtZW50IHNob3VsZCBiZSBjbGVhbiB3aXRoIFVDPXRydWUnICcKKwlnaXQgY2hlY2tvdXQgSEVBRH4gJiYKKwlzdGF0dXNfaXNfY2xlYW4gJiYKKwlzdGF0dXNfaXNfY2xlYW4gJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJYXZvaWRfcmFjeSAmJgorCXN0YXR1c19pc19jbGVhbiAmJgorCXN0YXR1c19pc19jbGVhbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICcic3RhdHVzIiBhZnRlciBzeW1saW5rIHJlcGxhY2VtZW50IHNob3VsZCBiZSBjbGVhbiB3aXRoIFVDPWZhbHNlJyAnCisJZ2l0IGNvbmZpZyBjb3JlLnVudHJhY2tlZENhY2hlIGZhbHNlICYmCisJZ2l0IGNoZWNrb3V0IEhFQUR+ICYmCisJc3RhdHVzX2lzX2NsZWFuICYmCisJc3RhdHVzX2lzX2NsZWFuICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWF2b2lkX3JhY3kgJiYKKwlzdGF0dXNfaXNfY2xlYW4gJiYKKwlzdGF0dXNfaXNfY2xlYW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgd29ya3RyZWUgZm9yIG5vbi1zeW1saW5rIHRlc3QnICcKKwlnaXQgaW5pdCB3b3JrdHJlZS1ub24tc3ltbGluayAmJgorCWNkIHdvcmt0cmVlLW5vbi1zeW1saW5rICYmCisJZ2l0IGNvbmZpZyBjb3JlLnVudHJhY2tlZENhY2hlIHRydWUgJiYKKwlta2RpciBvbmUgdHdvICYmCisJdG91Y2ggb25lL2ZpbGUgdHdvL2ZpbGUgJiYKKwlnaXQgYWRkIG9uZS9maWxlIHR3by9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSJmaXJzdCBjb21taXQiICYmCisJZ2l0IHJtIC1yZiBvbmUgJiYKKwljcCB0d28vZmlsZSBvbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWdpdCBjb21taXQgLW0ic2Vjb25kIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cyIgYWZ0ZXIgZmlsZSByZXBsYWNlbWVudCBzaG91bGQgYmUgY2xlYW4gd2l0aCBVQz10cnVlJyAnCisJZ2l0IGNoZWNrb3V0IEhFQUR+ICYmCisJc3RhdHVzX2lzX2NsZWFuICYmCisJc3RhdHVzX2lzX2NsZWFuICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWF2b2lkX3JhY3kgJiYKKwlzdGF0dXNfaXNfY2xlYW4gJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWdyZXAgLUYgInJlY3Vyc2UgdmFsaWQiIC4uL2FjdHVhbCA+Li4vYWN0dWFsLmdyZXAgJiYKKwljYXQgPi4uL2V4cGVjdC5ncmVwIDw8RU9GICYmCisvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSB2YWxpZAorL3R3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIHZhbGlkCitFT0YKKwlzdGF0dXNfaXNfY2xlYW4gJiYKKwl0ZXN0X2NtcCAuLi9leHBlY3QuZ3JlcCAuLi9hY3R1YWwuZ3JlcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic3RhdHVzIiBhZnRlciBmaWxlIHJlcGxhY2VtZW50IHNob3VsZCBiZSBjbGVhbiB3aXRoIFVDPWZhbHNlJyAnCisJZ2l0IGNvbmZpZyBjb3JlLnVudHJhY2tlZENhY2hlIGZhbHNlICYmCisJZ2l0IGNoZWNrb3V0IEhFQUR+ICYmCisJc3RhdHVzX2lzX2NsZWFuICYmCisJc3RhdHVzX2lzX2NsZWFuICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWF2b2lkX3JhY3kgJiYKKwlzdGF0dXNfaXNfY2xlYW4gJiYKKwlzdGF0dXNfaXNfY2xlYW4KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDY0LXd0c3RhdHVzLXB2Mi5zaCBiL3QvdDcwNjQtd3RzdGF0dXMtcHYyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzNzc4N2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDY0LXd0c3RhdHVzLXB2Mi5zaApAQCAtMCwwICsxLDY2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIKKworVGhpcyB0ZXN0IGV4ZXJjaXNlcyBwb3JjZWxhaW4gVjIgb3V0cHV0IGZvciBnaXQgc3RhdHVzLicKKworCisuIC4vdGVzdC1saWIuc2gKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UgJiYKKwllY2hvIHggPmZpbGVfeCAmJgorCWVjaG8geSA+ZmlsZV95ICYmCisJZWNobyB6ID5maWxlX3ogJiYKKwlta2RpciBkaXIxICYmCisJZWNobyBhID5kaXIxL2ZpbGVfYSAmJgorCWVjaG8gYiA+ZGlyMS9maWxlX2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmVmb3JlIGluaXRpYWwgY29tbWl0LCBub3RoaW5nIGFkZGVkLCBvbmx5IHVudHJhY2tlZCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSMgYnJhbmNoLm9pZCAoaW5pdGlhbCkKKwkjIGJyYW5jaC5oZWFkIG1hc3RlcgorCT8gYWN0dWFsCisJPyBkaXIxLworCT8gZXhwZWN0CisJPyBmaWxlX3gKKwk/IGZpbGVfeQorCT8gZmlsZV96CisJRU9GCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPW5vcm1hbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiZWZvcmUgaW5pdGlhbCBjb21taXQsIHRoaW5ncyBhZGRlZCcgJworCWdpdCBhZGQgZmlsZV94IGZpbGVfeSBmaWxlX3ogZGlyMSAmJgorCU9JRF9BPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gZGlyMS9maWxlX2EpICYmCisJT0lEX0I9JChnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtLSBkaXIxL2ZpbGVfYikgJiYKKwlPSURfWD0kKGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC0tIGZpbGVfeCkgJiYKKwlPSURfWT0kKGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC0tIGZpbGVfeSkgJiYKKwlPSURfWj0kKGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC0tIGZpbGVfeikgJiYKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSMgYnJhbmNoLm9pZCAoaW5pdGlhbCkKKwkjIGJyYW5jaC5oZWFkIG1hc3RlcgorCTEgQS4gTi4uLiAwMDAwMDAgMTAwNjQ0IDEwMDY0NCAkWkVST19PSUQgJE9JRF9BIGRpcjEvZmlsZV9hCisJMSBBLiBOLi4uIDAwMDAwMCAxMDA2NDQgMTAwNjQ0ICRaRVJPX09JRCAkT0lEX0IgZGlyMS9maWxlX2IKKwkxIEEuIE4uLi4gMDAwMDAwIDEwMDY0NCAxMDA2NDQgJFpFUk9fT0lEICRPSURfWCBmaWxlX3gKKwkxIEEuIE4uLi4gMDAwMDAwIDEwMDY0NCAxMDA2NDQgJFpFUk9fT0lEICRPSURfWSBmaWxlX3kKKwkxIEEuIE4uLi4gMDAwMDAwIDEwMDY0NCAxMDA2NDQgJFpFUk9fT0lEICRPSURfWiBmaWxlX3oKKwk/IGFjdHVhbAorCT8gZXhwZWN0CisJRU9GCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiZWZvcmUgaW5pdGlhbCBjb21taXQsIHRoaW5ncyBhZGRlZCAoLXopJyAnCisJbGZfdG9fbnVsID5leHBlY3QgPDwtRU9GICYmCisJIyBicmFuY2gub2lkIChpbml0aWFsKQorCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJMSBBLiBOLi4uIDAwMDAwMCAxMDA2NDQgMTAwNjQ0ICRaRVJPX09JRCAkT0lEX0EgZGlyMS9maWxlX2EKKwkxIEEuIE4uLi4gMDAwMDAwIDEwMDY0NCAxMDA2NDQgJFpFUk9fT0lEICRPSURfQiBkaXIxL2ZpbGVfYgorCTEgQS4gTi4uLiAwMDAwMDAgMTAwNjQ0IDEwMDY0NCAkWkVST19PSUQgJE9JRF9YIGZpbGVfeAorCTEgQS4gTi4uLiAwMDAwMDAgMTAwNjQ0IDEwMDY0NCAkWkVST19PSUQgJE9JRF9ZIGZpbGVfeQorCTEgQS4gTi4uLiAwMDAwMDAgMTAwNjQ0IDEwMDY0NCAkWkVST19PSUQgJE9JRF9aIGZpbGVfegorCT8gYWN0dWFsCisJPyBleHBlY3QKKwlFT0YKKworCWdpdCBzdGF0dXMgLXogLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgZmlyc3QgY29tbWl0LCBjb21maXJtIEhFQUQgb2lkIGFuZCBicmFuY2gnICcKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlIMD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkjIGJyYW5jaC5vaWQgJEgwCisJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwk/IGFjdHVhbAorCT8gZXhwZWN0CisJRU9GCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZnRlciBmaXJzdCBjb21taXQsIGNyZWF0ZSB1bnN0YWdlZCBjaGFuZ2VzJyAnCisJZWNobyB4ID4+ZmlsZV94ICYmCisJT0lEX1gxPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gZmlsZV94KSAmJgorCXJtIGZpbGVfeiAmJgorCUgwPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJIyBicmFuY2gub2lkICRIMAorCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJMSAuTSBOLi4uIDEwMDY0NCAxMDA2NDQgMTAwNjQ0ICRPSURfWCAkT0lEX1ggZmlsZV94CisJMSAuRCBOLi4uIDEwMDY0NCAxMDA2NDQgMDAwMDAwICRPSURfWiAkT0lEX1ogZmlsZV96CisJPyBhY3R1YWwKKwk/IGV4cGVjdAorCUVPRgorCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWZ0ZXIgZmlyc3QgY29tbWl0IGJ1dCBvbWl0IHVudHJhY2tlZCBmaWxlcyBhbmQgYnJhbmNoJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJMSAuTSBOLi4uIDEwMDY0NCAxMDA2NDQgMTAwNjQ0ICRPSURfWCAkT0lEX1ggZmlsZV94CisJMSAuRCBOLi4uIDEwMDY0NCAxMDA2NDQgMDAwMDAwICRPSURfWiAkT0lEX1ogZmlsZV96CisJRU9GCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FmdGVyIGZpcnN0IGNvbW1pdCwgc3RhZ2UgZXhpc3RpbmcgY2hhbmdlcycgJworCWdpdCBhZGQgZmlsZV94ICYmCisJZ2l0IHJtIGZpbGVfeiAmJgorCUgwPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJIyBicmFuY2gub2lkICRIMAorCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJMSBNLiBOLi4uIDEwMDY0NCAxMDA2NDQgMTAwNjQ0ICRPSURfWCAkT0lEX1gxIGZpbGVfeAorCTEgRC4gTi4uLiAxMDA2NDQgMDAwMDAwIDAwMDAwMCAkT0lEX1ogJFpFUk9fT0lEIGZpbGVfegorCT8gYWN0dWFsCisJPyBleHBlY3QKKwlFT0YKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBjYXVzZXMgMiBwYXRoIGxpbmVzJyAnCisJZ2l0IG12IGZpbGVfeSByZW5hbWVkX3kgJiYKKwlIMD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCXFfdG9fdGFiID5leHBlY3QgPDwtRU9GICYmCisJIyBicmFuY2gub2lkICRIMAorCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJMSBNLiBOLi4uIDEwMDY0NCAxMDA2NDQgMTAwNjQ0ICRPSURfWCAkT0lEX1gxIGZpbGVfeAorCTEgRC4gTi4uLiAxMDA2NDQgMDAwMDAwIDAwMDAwMCAkT0lEX1ogJFpFUk9fT0lEIGZpbGVfegorCTIgUi4gTi4uLiAxMDA2NDQgMTAwNjQ0IDEwMDY0NCAkT0lEX1kgJE9JRF9ZIFIxMDAgcmVuYW1lZF95UWZpbGVfeQorCT8gYWN0dWFsCisJPyBleHBlY3QKKwlFT0YKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBjYXVzZXMgMiBwYXRoIGxpbmVzICgteiknICcKKwlIMD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCSMjIExpbmVzIHVzZSBOVUwgcGF0aCBzZXBhcmF0b3IgYW5kIGxpbmUgdGVybWluYXRvciwgc28gZG91YmxlIHRyYW5zZm9ybSBoZXJlLgorCXFfdG9fbnVsIDw8LUVPRiB8IGxmX3RvX251bCA+ZXhwZWN0ICYmCisJIyBicmFuY2gub2lkICRIMAorCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJMSBNLiBOLi4uIDEwMDY0NCAxMDA2NDQgMTAwNjQ0ICRPSURfWCAkT0lEX1gxIGZpbGVfeAorCTEgRC4gTi4uLiAxMDA2NDQgMDAwMDAwIDAwMDAwMCAkT0lEX1ogJFpFUk9fT0lEIGZpbGVfegorCTIgUi4gTi4uLiAxMDA2NDQgMTAwNjQ0IDEwMDY0NCAkT0lEX1kgJE9JRF9ZIFIxMDAgcmVuYW1lZF95UWZpbGVfeQorCT8gYWN0dWFsCisJPyBleHBlY3QKKwlFT0YKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsIC16ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2Ugc2Vjb25kIGNvbW1pdCwgY29uZmlybSBjbGVhbiBhbmQgbmV3IEhFQUQgb2lkJyAnCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwlIMT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSMgYnJhbmNoLm9pZCAkSDEKKwkjIGJyYW5jaC5oZWFkIG1hc3RlcgorCT8gYWN0dWFsCisJPyBleHBlY3QKKwlFT0YKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpcm0gaWdub3JlZCBmaWxlcyBhcmUgbm90IHByaW50ZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIHguaWduIC5naXRpZ25vcmUiICYmCisJZWNobyB4LmlnbiA+LmdpdGlnbm9yZSAmJgorCWVjaG8gImlnbm9yZSBtZSIgPnguaWduICYmCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk/IC5naXRpZ25vcmUKKwk/IGFjdHVhbAorCT8gZXhwZWN0CisJRU9GCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZ25vcmVkIGZpbGVzIGFyZSBwcmludGVkIHdpdGggLS1pZ25vcmVkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiB4LmlnbiAuZ2l0aWdub3JlIiAmJgorCWVjaG8geC5pZ24gPi5naXRpZ25vcmUgJiYKKwllY2hvICJpZ25vcmUgbWUiID54LmlnbiAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJPyAuZ2l0aWdub3JlCisJPyBhY3R1YWwKKwk/IGV4cGVjdAorCSEgeC5pZ24KKwlFT0YKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1pZ25vcmVkIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYW5kIGNvbW1pdCBwZXJtYW5lbnQgaWdub3JlIGZpbGUnICcKKwljYXQgPi5naXRpZ25vcmUgPDwtRU9GICYmCisJYWN0dWFsKgorCWV4cGVjdCoKKwlFT0YKKworCWdpdCBhZGQgLmdpdGlnbm9yZSAmJgorCWdpdCBjb21taXQgLW0gaWdub3JlX3RyYXNoICYmCisJSDE9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkjIGJyYW5jaC5vaWQgJEgxCisJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwlFT0YKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IC0taW50ZW50LXRvLWFkZCBvdXRwdXQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBybSAtZiBpbnRlbnQxLmFkZCBpbnRlbnQyLmFkZCIgJiYKKwl0b3VjaCBpbnRlbnQxLmFkZCAmJgorCWVjaG8gdGVzdCA+aW50ZW50Mi5hZGQgJiYKKworCWdpdCBhZGQgLS1pbnRlbnQtdG8tYWRkIGludGVudDEuYWRkIGludGVudDIuYWRkICYmCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkxIC5BIE4uLi4gMDAwMDAwIDAwMDAwMCAxMDA2NDQgJFpFUk9fT0lEICRaRVJPX09JRCBpbnRlbnQxLmFkZAorCTEgLkEgTi4uLiAwMDAwMDAgMDAwMDAwIDEwMDY0NCAkWkVST19PSUQgJFpFUk9fT0lEIGludGVudDIuYWRkCisJRU9GCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBBQSAoYWRkLWFkZCkgY29uZmxpY3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisKKwlnaXQgYnJhbmNoIEFBX0EgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IEFBX0EgJiYKKwllY2hvICJCcmFuY2ggQUFfQSIgPmNvbmZsaWN0LnR4dCAmJgorCU9JRF9BQV9BPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gY29uZmxpY3QudHh0KSAmJgorCWdpdCBhZGQgY29uZmxpY3QudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoIGFhX2EiICYmCisKKwlnaXQgYnJhbmNoIEFBX0IgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IEFBX0IgJiYKKwllY2hvICJCcmFuY2ggQUFfQiIgPmNvbmZsaWN0LnR4dCAmJgorCU9JRF9BQV9CPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gY29uZmxpY3QudHh0KSAmJgorCWdpdCBhZGQgY29uZmxpY3QudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoIGFhX2IiICYmCisKKwlnaXQgYnJhbmNoIEFBX00gQUFfQiAmJgorCWdpdCBjaGVja291dCBBQV9NICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEFBX0EgJiYKKworCUhNPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJIyBicmFuY2gub2lkICRITQorCSMgYnJhbmNoLmhlYWQgQUFfTQorCXUgQUEgTi4uLiAwMDAwMDAgMTAwNjQ0IDEwMDY0NCAxMDA2NDQgJFpFUk9fT0lEICRPSURfQUFfQiAkT0lEX0FBX0EgY29uZmxpY3QudHh0CisJRU9GCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgVVUgKGVkaXQtZWRpdCkgY29uZmxpY3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisKKwlnaXQgYnJhbmNoIFVVX0FOQyBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgVVVfQU5DICYmCisJZWNobyAiQW5jZXN0b3IiID5jb25mbGljdC50eHQgJiYKKwlPSURfVVVfQU5DPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gY29uZmxpY3QudHh0KSAmJgorCWdpdCBhZGQgY29uZmxpY3QudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiVVVfQU5DIiAmJgorCisJZ2l0IGJyYW5jaCBVVV9BIFVVX0FOQyAmJgorCWdpdCBjaGVja291dCBVVV9BICYmCisJZWNobyAiQnJhbmNoIFVVX0EiID5jb25mbGljdC50eHQgJiYKKwlPSURfVVVfQT0kKGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC0tIGNvbmZsaWN0LnR4dCkgJiYKKwlnaXQgYWRkIGNvbmZsaWN0LnR4dCAmJgorCWdpdCBjb21taXQgLW0gImJyYW5jaCB1dV9hIiAmJgorCisJZ2l0IGJyYW5jaCBVVV9CIFVVX0FOQyAmJgorCWdpdCBjaGVja291dCBVVV9CICYmCisJZWNobyAiQnJhbmNoIFVVX0IiID5jb25mbGljdC50eHQgJiYKKwlPSURfVVVfQj0kKGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC0tIGNvbmZsaWN0LnR4dCkgJiYKKwlnaXQgYWRkIGNvbmZsaWN0LnR4dCAmJgorCWdpdCBjb21taXQgLW0gImJyYW5jaCB1dV9iIiAmJgorCisJZ2l0IGJyYW5jaCBVVV9NIFVVX0IgJiYKKwlnaXQgY2hlY2tvdXQgVVVfTSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBVVV9BICYmCisKKwlITT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSMgYnJhbmNoLm9pZCAkSE0KKwkjIGJyYW5jaC5oZWFkIFVVX00KKwl1IFVVIE4uLi4gMTAwNjQ0IDEwMDY0NCAxMDA2NDQgMTAwNjQ0ICRPSURfVVVfQU5DICRPSURfVVVfQiAkT0lEX1VVX0EgY29uZmxpY3QudHh0CisJRU9GCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdXBzdHJlYW0gZmllbGRzIGluIGJyYW5jaCBoZWFkZXInICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3ViX3JlcG8iICYmCisJZ2l0IGNsb25lIC4gc3ViX3JlcG8gJiYKKwkoCisJCSMjIENvbmZpcm0gbG9jYWwgbWFzdGVyIHRyYWNrcyByZW1vdGUgbWFzdGVyLgorCQljZCBzdWJfcmVwbyAmJgorCQlIVUY9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCSMgYnJhbmNoLm9pZCAkSFVGCisJCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJCSMgYnJhbmNoLnVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIKKwkJIyBicmFuY2guYWIgKzAgLTAKKwkJRU9GCisKKwkJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJIyMgVGVzdCBhaGVhZC9iZWhpbmQuCisJCWVjaG8geHl6ID5maWxlX3h5eiAmJgorCQlnaXQgYWRkIGZpbGVfeHl6ICYmCisJCWdpdCBjb21taXQgLW0geHl6ICYmCisKKwkJSFVGPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkjIGJyYW5jaC5vaWQgJEhVRgorCQkjIGJyYW5jaC5oZWFkIG1hc3RlcgorCQkjIGJyYW5jaC51cHN0cmVhbSBvcmlnaW4vbWFzdGVyCisJCSMgYnJhbmNoLmFiICsxIC0wCisJCUVPRgorCisJCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCSMjIFJlcGVhdCB0aGUgYWJvdmUgYnV0IHdpdGhvdXQgLS1icmFuY2guCisJCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisJCSMjIFRlc3QgdXBzdHJlYW0tZ29uZSBjYXNlLiBGYWtlIHRoaXMgYnkgcG9pbnRpbmcgb3JpZ2luL21hc3RlciBhdAorCQkjIyBhIG5vbi1leGlzdGluZyBjb21taXQuCisJCU9MRD0kKGdpdCByZXYtcGFyc2Ugb3JpZ2luL21hc3RlcikgJiYKKwkJTkVXPSRaRVJPX09JRCAmJgorCQltdiAuZ2l0L3BhY2tlZC1yZWZzIC5naXQvb2xkLXBhY2tlZC1yZWZzICYmCisJCXNlZCAicy8kT0xELyRORVcvZyIgPC5naXQvb2xkLXBhY2tlZC1yZWZzID4uZ2l0L3BhY2tlZC1yZWZzICYmCisKKwkJSFVGPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkjIGJyYW5jaC5vaWQgJEhVRgorCQkjIGJyYW5jaC5oZWFkIG1hc3RlcgorCQkjIGJyYW5jaC51cHN0cmVhbSBvcmlnaW4vbWFzdGVyCisJCUVPRgorCisJCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IC0tW25vLV1haGVhZC1iZWhpbmQgd2l0aCBWMiBmb3JtYXQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3ViX3JlcG8iICYmCisJZ2l0IGNsb25lIC4gc3ViX3JlcG8gJiYKKwkoCisJCSMjIENvbmZpcm0gbG9jYWwgbWFzdGVyIHRyYWNrcyByZW1vdGUgbWFzdGVyLgorCQljZCBzdWJfcmVwbyAmJgorCQlIVUY9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwkJIyBDb25maXJtIC0tbm8tYWhlYWQtYmVoaW5kIHJlcG9ydHMgdHJhZGl0aW9uYWwgYnJhbmNoLmFiIHdpdGggMC8wIGZvciBlcXVhbCBicmFuY2hlcy4KKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCSMgYnJhbmNoLm9pZCAkSFVGCisJCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJCSMgYnJhbmNoLnVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIKKwkJIyBicmFuY2guYWIgKzAgLTAKKwkJRU9GCisKKwkJZ2l0IHN0YXR1cyAtLW5vLWFoZWFkLWJlaGluZCAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJIyBDb25maXJtIC0tYWhlYWQtYmVoaW5kIHJlcG9ydHMgdHJhZGl0aW9uYWwgYnJhbmNoLmFiIHdpdGggMC8wLgorCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJIyBicmFuY2gub2lkICRIVUYKKwkJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkJIyBicmFuY2gudXBzdHJlYW0gb3JpZ2luL21hc3RlcgorCQkjIGJyYW5jaC5hYiArMCAtMAorCQlFT0YKKworCQlnaXQgc3RhdHVzIC0tYWhlYWQtYmVoaW5kIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjIyBUZXN0IG5vbi1lcXVhbCBhaGVhZC9iZWhpbmQuCisJCWVjaG8geHl6ID5maWxlX3h5eiAmJgorCQlnaXQgYWRkIGZpbGVfeHl6ICYmCisJCWdpdCBjb21taXQgLW0geHl6ICYmCisKKwkJSFVGPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJCSMgQ29uZmlybSAtLW5vLWFoZWFkLWJlaGluZCByZXBvcnRzIGJyYW5jaC5hYiB3aXRoID8vPyBmb3Igbm9uLWVxdWFsIGJyYW5jaGVzLgorCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJIyBicmFuY2gub2lkICRIVUYKKwkJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkJIyBicmFuY2gudXBzdHJlYW0gb3JpZ2luL21hc3RlcgorCQkjIGJyYW5jaC5hYiArPyAtPworCQlFT0YKKworCQlnaXQgc3RhdHVzIC0tbm8tYWhlYWQtYmVoaW5kIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjIENvbmZpcm0gLS1haGVhZC1iZWhpbmQgcmVwb3J0cyB0cmFkaXRpb25hbCBicmFuY2guYWIgd2l0aCAxLzAuCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkjIGJyYW5jaC5vaWQgJEhVRgorCQkjIGJyYW5jaC5oZWFkIG1hc3RlcgorCQkjIGJyYW5jaC51cHN0cmVhbSBvcmlnaW4vbWFzdGVyCisJCSMgYnJhbmNoLmFiICsxIC0wCisJCUVPRgorCisJCWdpdCBzdGF0dXMgLS1haGVhZC1iZWhpbmQgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCSMgQ29uZmlybSB0aGF0ICJzdGF0dXMuYWhlYWRiZWhpbmQiIERPRVMgTk9UIHdvcmsgb24gVjIgZm9ybWF0LgorCQlnaXQgLWMgc3RhdHVzLmFoZWFkYmVoaW5kPWZhbHNlIHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJIyBDb25maXJtIHRoYXQgInN0YXR1cy5haGVhZGJlaGluZCIgRE9FUyBOT1Qgd29yayBvbiBWMiBmb3JtYXQuCisJCWdpdCAtYyBzdGF0dXMuYWhlYWRiZWhpbmQ9dHJ1ZSBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGFuZCBhZGQgc3VibW9kdWxlLCBzdWJtb2R1bGUgYXBwZWFycyBjbGVhbiAoQS4gUy4uLiknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNsb25lIC4gc3ViX3JlcG8gJiYKKwlnaXQgY2xvbmUgLiBzdXBlcl9yZXBvICYmCisJKAljZCBzdXBlcl9yZXBvICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Yl9yZXBvIHN1YjEgJiYKKworCQkjIyBDb25maXJtIHN0YWdlL2FkZCBvZiBjbGVhbiBzdWJtb2R1bGUuCisJCUhNT0Q9JChnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtLSAuZ2l0bW9kdWxlcykgJiYKKwkJSFNVUD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJSFNVQj0kSFNVUCAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkjIGJyYW5jaC5vaWQgJEhTVVAKKwkJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkJIyBicmFuY2gudXBzdHJlYW0gb3JpZ2luL21hc3RlcgorCQkjIGJyYW5jaC5hYiArMCAtMAorCQkxIEEuIE4uLi4gMDAwMDAwIDEwMDY0NCAxMDA2NDQgJFpFUk9fT0lEICRITU9EIC5naXRtb2R1bGVzCisJCTEgQS4gUy4uLiAwMDAwMDAgMTYwMDAwIDE2MDAwMCAkWkVST19PSUQgJEhTVUIgc3ViMQorCQlFT0YKKworCQlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VudHJhY2tlZCBjaGFuZ2VzIGluIGFkZGVkIHN1Ym1vZHVsZSAoQU0gUy4uVSknICcKKwkoCWNkIHN1cGVyX3JlcG8gJiYKKwkJIyMgY3JlYXRlIHVudHJhY2tlZCBmaWxlIGluIHRoZSBzdWJtb2R1bGUuCisJCSgJY2Qgc3ViMSAmJgorCQkJZWNobyAieHh4eCIgPmZpbGVfaW5fc3ViCisJCSkgJiYKKworCQlITU9EPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gLmdpdG1vZHVsZXMpICYmCisJCUhTVVA9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCUhTVUI9JEhTVVAgJiYKKworCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJIyBicmFuY2gub2lkICRIU1VQCisJCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJCSMgYnJhbmNoLnVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIKKwkJIyBicmFuY2guYWIgKzAgLTAKKwkJMSBBLiBOLi4uIDAwMDAwMCAxMDA2NDQgMTAwNjQ0ICRaRVJPX09JRCAkSE1PRCAuZ2l0bW9kdWxlcworCQkxIEFNIFMuLlUgMDAwMDAwIDE2MDAwMCAxNjAwMDAgJFpFUk9fT0lEICRIU1VCIHN1YjEKKwkJRU9GCisKKwkJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFnZWQgY2hhbmdlcyBpbiBhZGRlZCBzdWJtb2R1bGUgKEFNIFMuTS4pJyAnCisJKAljZCBzdXBlcl9yZXBvICYmCisJCSMjIHN0YWdlIHRoZSBjaGFuZ2VzIGluIHRoZSBzdWJtb2R1bGUuCisJCSgJY2Qgc3ViMSAmJgorCQkJZ2l0IGFkZCBmaWxlX2luX3N1YgorCQkpICYmCisKKwkJSE1PRD0kKGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC0tIC5naXRtb2R1bGVzKSAmJgorCQlIU1VQPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQlIU1VCPSRIU1VQICYmCisKKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCSMgYnJhbmNoLm9pZCAkSFNVUAorCQkjIGJyYW5jaC5oZWFkIG1hc3RlcgorCQkjIGJyYW5jaC51cHN0cmVhbSBvcmlnaW4vbWFzdGVyCisJCSMgYnJhbmNoLmFiICswIC0wCisJCTEgQS4gTi4uLiAwMDAwMDAgMTAwNjQ0IDEwMDY0NCAkWkVST19PSUQgJEhNT0QgLmdpdG1vZHVsZXMKKwkJMSBBTSBTLk0uIDAwMDAwMCAxNjAwMDAgMTYwMDAwICRaRVJPX09JRCAkSFNVQiBzdWIxCisJCUVPRgorCisJCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhZ2VkIGFuZCB1bnN0YWdlZCBjaGFuZ2VzIGluIGFkZGVkIChBTSBTLk0uKScgJworCSgJY2Qgc3VwZXJfcmVwbyAmJgorCQkoCWNkIHN1YjEgJiYKKwkJCSMjIG1ha2UgYWRkaXRpb25hbCB1bnN0YWdlZCBjaGFuZ2VzIChvbiB0aGUgc2FtZSBmaWxlKSBpbiB0aGUgc3VibW9kdWxlLgorCQkJIyMgVGhpcyBkb2VzIG5vdCBjYXVzZSB1cyB0byBnZXQgUy5NVSAoYmVjYXVzZSB0aGUgc3VibW9kdWxlIGRvZXMgbm90IHJlcG9ydAorCQkJIyMgYSAiPyIgbGluZSBmb3IgdGhlIHVuc3RhZ2VkIGNoYW5nZXMpLgorCQkJZWNobyAibW9yZSBjaGFuZ2VzIiA+PmZpbGVfaW5fc3ViCisJCSkgJiYKKworCQlITU9EPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gLmdpdG1vZHVsZXMpICYmCisJCUhTVVA9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCUhTVUI9JEhTVVAgJiYKKworCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJIyBicmFuY2gub2lkICRIU1VQCisJCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJCSMgYnJhbmNoLnVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIKKwkJIyBicmFuY2guYWIgKzAgLTAKKwkJMSBBLiBOLi4uIDAwMDAwMCAxMDA2NDQgMTAwNjQ0ICRaRVJPX09JRCAkSE1PRCAuZ2l0bW9kdWxlcworCQkxIEFNIFMuTS4gMDAwMDAwIDE2MDAwMCAxNjAwMDAgJFpFUk9fT0lEICRIU1VCIHN1YjEKKwkJRU9GCisKKwkJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFnZWQgYW5kIHVudHJhY2tlZCBjaGFuZ2VzIGluIGFkZGVkIHN1Ym1vZHVsZSAoQU0gUy5NVSknICcKKwkoCWNkIHN1cGVyX3JlcG8gJiYKKwkJKAljZCBzdWIxICYmCisJCQkjIyBzdGFnZSBuZXcgY2hhbmdlcyBpbiB0cmFja2VkIGZpbGUuCisJCQlnaXQgYWRkIGZpbGVfaW5fc3ViICYmCisJCQkjIyBjcmVhdGUgbmV3IHVudHJhY2tlZCBmaWxlLgorCQkJZWNobyAieXl5eSIgPj5hbm90aGVyX2ZpbGVfaW5fc3ViCisJCSkgJiYKKworCQlITU9EPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gLmdpdG1vZHVsZXMpICYmCisJCUhTVVA9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCUhTVUI9JEhTVVAgJiYKKworCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJIyBicmFuY2gub2lkICRIU1VQCisJCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJCSMgYnJhbmNoLnVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIKKwkJIyBicmFuY2guYWIgKzAgLTAKKwkJMSBBLiBOLi4uIDAwMDAwMCAxMDA2NDQgMTAwNjQ0ICRaRVJPX09JRCAkSE1PRCAuZ2l0bW9kdWxlcworCQkxIEFNIFMuTVUgMDAwMDAwIDE2MDAwMCAxNjAwMDAgJFpFUk9fT0lEICRIU1VCIHN1YjEKKwkJRU9GCisKKwkJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgd2l0aGluIHRoZSBzdWJtb2R1bGUgYXBwZWFycyBhcyBuZXcgY29tbWl0IGluIHN1cGVyIChBTSBTQy4uKScgJworCSgJY2Qgc3VwZXJfcmVwbyAmJgorCQkoCWNkIHN1YjEgJiYKKwkJCSMjIE1ha2UgYSBuZXcgY29tbWl0IGluIHRoZSBzdWJtb2R1bGUuCisJCQlnaXQgYWRkIGZpbGVfaW5fc3ViICYmCisJCQlybSAtZiBhbm90aGVyX2ZpbGVfaW5fc3ViICYmCisJCQlnaXQgY29tbWl0IC1tICJuZXcgY29tbWl0IgorCQkpICYmCisKKwkJSE1PRD0kKGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC0tIC5naXRtb2R1bGVzKSAmJgorCQlIU1VQPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQlIU1VCPSRIU1VQICYmCisKKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCSMgYnJhbmNoLm9pZCAkSFNVUAorCQkjIGJyYW5jaC5oZWFkIG1hc3RlcgorCQkjIGJyYW5jaC51cHN0cmVhbSBvcmlnaW4vbWFzdGVyCisJCSMgYnJhbmNoLmFiICswIC0wCisJCTEgQS4gTi4uLiAwMDAwMDAgMTAwNjQ0IDEwMDY0NCAkWkVST19PSUQgJEhNT0QgLmdpdG1vZHVsZXMKKwkJMSBBTSBTQy4uIDAwMDAwMCAxNjAwMDAgMTYwMDAwICRaRVJPX09JRCAkSFNVQiBzdWIxCisJCUVPRgorCisJCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhZ2Ugc3VibW9kdWxlIGluIHN1cGVyIGFuZCBjb21taXQnICcKKwkoCWNkIHN1cGVyX3JlcG8gJiYKKwkJIyMgU3RhZ2UgdGhlIG5ldyBzdWJtb2R1bGUgY29tbWl0IGluIHRoZSBzdXBlci4KKwkJZ2l0IGFkZCBzdWIxICYmCisJCSMjIENvbW1pdCB0aGUgc3VwZXIgc28gdGhhdCB0aGUgc3ViIG5vIGxvbmdlciBhcHBlYXJzIGFzIGFkZGVkLgorCQlnaXQgY29tbWl0IC1tICJzdXBlciBjb21taXQiICYmCisKKwkJSFNVUD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJIyBicmFuY2gub2lkICRIU1VQCisJCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJCSMgYnJhbmNoLnVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIKKwkJIyBicmFuY2guYWIgKzEgLTAKKwkJRU9GCisKKwkJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIHVuc3RhZ2VkIGNoYW5nZXMgaW4gZXhpc3Rpbmcgc3VibW9kdWxlICguTSBTLk0uKScgJworCSgJY2Qgc3VwZXJfcmVwbyAmJgorCQkoCWNkIHN1YjEgJiYKKwkJCWVjaG8gInp6enoiID4+ZmlsZV9pbl9zdWIKKwkJKSAmJgorCisJCUhTVVA9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCUhTVUI9JChjZCBzdWIxICYmIGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJIyBicmFuY2gub2lkICRIU1VQCisJCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJCSMgYnJhbmNoLnVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIKKwkJIyBicmFuY2guYWIgKzEgLTAKKwkJMSAuTSBTLk0uIDE2MDAwMCAxNjAwMDAgMTYwMDAwICRIU1VCICRIU1VCIHN1YjEKKwkJRU9GCisKKwkJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcxMDEtcmVzZXQtZW1wdHktc3ViZGlycy5zaCBiL3QvdDcxMDEtcmVzZXQtZW1wdHktc3ViZGlycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NmUxNjNmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzEwMS1yZXNldC1lbXB0eS1zdWJkaXJzLnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgU2hhd24gUGVhcmNlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXNldCBzaG91bGQgY3VsbCBlbXB0eSBzdWJkaXJzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGluZyBpbml0aWFsIGZpbGVzJyBcCisgICAgJ21rZGlyIHBhdGgwICYmCisgICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgcGF0aDAvQ09QWUlORyAmJgorICAgICBnaXQgYWRkIHBhdGgwL0NPUFlJTkcgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSBhZGQgLWEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGluZyBzZWNvbmQgZmlsZXMnIFwKKyAgICAnbWtkaXIgcGF0aDEgJiYKKyAgICAgbWtkaXIgcGF0aDEvcGF0aDIgJiYKKyAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyBwYXRoMS9wYXRoMi9DT1BZSU5HICYmCisgICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgcGF0aDEvQ09QWUlORyAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HIENPUFlJTkcgJiYKKyAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyBwYXRoMC9DT1BZSU5HLVRPTyAmJgorICAgICBnaXQgYWRkIHBhdGgxL3BhdGgyL0NPUFlJTkcgJiYKKyAgICAgZ2l0IGFkZCBwYXRoMS9DT1BZSU5HICYmCisgICAgIGdpdCBhZGQgQ09QWUlORyAmJgorICAgICBnaXQgYWRkIHBhdGgwL0NPUFlJTkctVE9PICYmCisgICAgIGdpdCBjb21taXQgLW0gY2hhbmdlIC1hJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncmVzZXR0aW5nIHRyZWUgSEVBRF4nIFwKKyAgICAnZ2l0IHJlc2V0IC0taGFyZCBIRUFEXicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIGluaXRpYWwgZmlsZXMgZXhpc3QgYWZ0ZXIgcmV3aW5kJyBcCisgICAgJ3Rlc3QgLWQgcGF0aDAgJiYKKyAgICAgdGVzdCAtZiBwYXRoMC9DT1BZSU5HJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgbGFjayBvZiBwYXRoMS9wYXRoMi9DT1BZSU5HJyBcCisgICAgJyEgdGVzdCAtZiBwYXRoMS9wYXRoMi9DT1BZSU5HJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgbGFjayBvZiBwYXRoMS9DT1BZSU5HJyBcCisgICAgJyEgdGVzdCAtZiBwYXRoMS9DT1BZSU5HJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgbGFjayBvZiBDT1BZSU5HJyBcCisgICAgJyEgdGVzdCAtZiBDT1BZSU5HJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgY2hlY2tpbmcgbGFjayBvZiBwYXRoMS9DT1BZSU5HLVRPTycgXAorICAgICchIHRlc3QgLWYgcGF0aDAvQ09QWUlORy1UT08nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyBsYWNrIG9mIHBhdGgxL3BhdGgyJyBcCisgICAgJyEgdGVzdCAtZCBwYXRoMS9wYXRoMicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIGxhY2sgb2YgcGF0aDEnIFwKKyAgICAnISB0ZXN0IC1kIHBhdGgxJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcxMDItcmVzZXQuc2ggYi90L3Q3MTAyLXJlc2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk3YmUwZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MTAyLXJlc2V0LnNoCkBAIC0wLDAgKzEsNTY5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IENhcmxvcyBSaWNhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXNldAorCitEb2N1bWVudGVkIHRlc3RzIGZvciBnaXQgcmVzZXQnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb21taXRfbXNnICgpIHsKKwkjIFN0cmluZyAibW9kaWZ5IDJuZCBmaWxlIChjaGFuZ2VkKSIgcGFydGx5IGluIEdlcm1hbgorCSMgKHRyYW5zbGF0ZWQgd2l0aCBHb29nbGUgVHJhbnNsYXRlKSwKKwkjIGVuY29kZWQgaW4gVVRGLTgsIHVzZWQgYXMgYSBjb21taXQgbG9nIG1lc3NhZ2UgYmVsb3cuCisJbXNnPSJtb2RpZnkgMm5kIGZpbGUgKGdlXDMwM1wyNDRuZGVydClcbiIKKwlpZiB0ZXN0IC1uICIkMSIKKwl0aGVuCisJCXByaW50ZiAiJG1zZyIgfCBpY29udiAtZiB1dGYtOCAtdCAiJDEiCisJZWxzZQorCQlwcmludGYgIiRtc2ciCisJZmkKK30KKworIyBUZXN0ZWQgbm9uLVVURi04IGVuY29kaW5nCit0ZXN0X2VuY29kaW5nPSJJU084ODU5LTEiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIGluaXRpYWwgZmlsZXMgYW5kIGNvbW1pdHMnICcKKwl0ZXN0X3RpY2sgJiYKKwllY2hvICIxc3QgZmlsZSIgPmZpcnN0ICYmCisJZ2l0IGFkZCBmaXJzdCAmJgorCWdpdCBjb21taXQgLW0gImNyZWF0ZSAxc3QgZmlsZSIgJiYKKworCWVjaG8gIjJuZCBmaWxlIiA+c2Vjb25kICYmCisJZ2l0IGFkZCBzZWNvbmQgJiYKKwlnaXQgY29tbWl0IC1tICJjcmVhdGUgMm5kIGZpbGUiICYmCisKKwllY2hvICIybmQgbGluZSAxc3QgZmlsZSIgPj5maXJzdCAmJgorCWdpdCBjb21taXQgLWEgLW0gIm1vZGlmeSAxc3QgZmlsZSIgJiYKKworCWdpdCBybSBmaXJzdCAmJgorCWdpdCBtdiBzZWNvbmQgc2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gInJlbW92ZSAxc3QgYW5kIHJlbmFtZSAybmQiICYmCisKKwllY2hvICIxc3QgbGluZSAybmQgZmlsZSIgPnNlY29uZGZpbGUgJiYKKwllY2hvICIybmQgbGluZSAybmQgZmlsZSIgPj5zZWNvbmRmaWxlICYmCisJIyAiZ2l0IGNvbW1pdCAtbSIgd291bGQgYnJlYWsgTWluR1csIGFzIFdpbmRvd3MgcmVmdXNlIHRvIHBhc3MKKwkjICR0ZXN0X2VuY29kaW5nIGVuY29kZWQgcGFyYW1ldGVyIHRvIGdpdC4KKwljb21taXRfbXNnICR0ZXN0X2VuY29kaW5nIHwgZ2l0IC1jICJpMThuLmNvbW1pdEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIiBjb21taXQgLWEgLUYgLSAmJgorCWhlYWQ1PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworIyBnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgIyB0byBzZWUgdGhvc2UgU0hBMSBpbnZvbHZlZAorCitjaGVja19jaGFuZ2VzICgpIHsKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQxIiAmJgorCWdpdCBkaWZmIHwgdGVzdF9jbXAgLmRpZmZfZXhwZWN0IC0gJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCB8IHRlc3RfY21wIC5jYWNoZWRfZXhwZWN0IC0gJiYKKwlmb3IgRklMRSBpbiAqCisJZG8KKwkJZWNobyAkRklMRSc6JworCQljYXQgJEZJTEUgfHwgcmV0dXJuCisJZG9uZSB8IHRlc3RfY21wIC5jYXRfZXhwZWN0IC0KK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1oYXJkIG1lc3NhZ2UnICcKKwloZXg9JChnaXQgbG9nIC0xIC0tZm9ybWF0PSIlaCIpICYmCisJZ2l0IHJlc2V0IC0taGFyZCA+IC5hY3R1YWwgJiYKKwllY2hvIEhFQUQgaXMgbm93IGF0ICRoZXggJChjb21taXRfbXNnKSA+IC5leHBlY3RlZCAmJgorCXRlc3RfaTE4bmNtcCAuZXhwZWN0ZWQgLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWhhcmQgbWVzc2FnZSAoSVNPODg1OS0xIGxvZ291dHB1dGVuY29kaW5nKScgJworCWhleD0kKGdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVoIikgJiYKKwlnaXQgLWMgImkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmciIHJlc2V0IC0taGFyZCA+IC5hY3R1YWwgJiYKKwllY2hvIEhFQUQgaXMgbm93IGF0ICRoZXggJChjb21taXRfbXNnICR0ZXN0X2VuY29kaW5nKSA+IC5leHBlY3RlZCAmJgorCXRlc3RfaTE4bmNtcCAuZXhwZWN0ZWQgLmFjdHVhbAorJworCis+LmRpZmZfZXhwZWN0Cis+LmNhY2hlZF9leHBlY3QKK2NhdCA+LmNhdF9leHBlY3QgPDxFT0YKK3NlY29uZGZpbGU6Cisxc3QgbGluZSAybmQgZmlsZQorMm5kIGxpbmUgMm5kIGZpbGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXZpbmcgYSBub24gZXhpc3RpbmcgcmV2aXNpb24gc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgYWFhYWFhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tbWl4ZWQgYWFhYWFhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tc29mdCBhYWFhYWEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1oYXJkIGFhYWFhYSAmJgorCWNoZWNrX2NoYW5nZXMgJGhlYWQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0tc29mdCB3aXRoIHVubWVyZ2VkIGluZGV4IHNob3VsZCBmYWlsJyAnCisJdG91Y2ggLmdpdC9NRVJHRV9IRUFEICYmCisJZWNobyAiMTAwNjQ0IDQ0YzViNTg4NDU1MGMxNzc1ODczN2VkY2NlZDQ2MzQ0N2I5MWQ0MmIgMQl1biIgfAorCQlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXNvZnQgSEVBRCAmJgorCXJtIC5naXQvTUVSR0VfSEVBRCAmJgorCWdpdCBybSAtLWNhY2hlZCAtLSB1bgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZ2l2aW5nIHBhdGhzIHdpdGggb3B0aW9ucyBkaWZmZXJlbnQgdGhhbiAtLW1peGVkIHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tc29mdCAtLSBmaXJzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWhhcmQgLS0gZmlyc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReIC0tIGZpcnN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAtLSBmaXJzdCAmJgorCWNoZWNrX2NoYW5nZXMgJGhlYWQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmluZyB1bnJlY29nbml6ZWQgb3B0aW9ucyBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLW90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC1vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tbWl4ZWQgLS1vdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLW1peGVkIC1vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tc29mdCAtLW90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tc29mdCAtbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWhhcmQgLS1vdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWhhcmQgLW8gJiYKKwljaGVja19jaGFuZ2VzICRoZWFkNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndHJ5aW5nIHRvIGRvIHJlc2V0IC0tc29mdCB3aXRoIHBlbmRpbmcgbWVyZ2Ugc2hvdWxkIGZhaWwnICcKKwlnaXQgYnJhbmNoIGJyYW5jaDEgJiYKKwlnaXQgYnJhbmNoIGJyYW5jaDIgJiYKKworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisJZWNobyAiM3JkIGxpbmUgaW4gYnJhbmNoMSIgPj5zZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIGluIGJyYW5jaDEiICYmCisKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMiAmJgorCWVjaG8gIjNyZCBsaW5lIGluIGJyYW5jaDIiID4+c2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImNoYW5nZSBpbiBicmFuY2gyIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGJyYW5jaDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1zb2Z0ICYmCisKKwlwcmludGYgIjFzdCBsaW5lIDJuZCBmaWxlXG4ybmQgbGluZSAybmQgZmlsZVxuM3JkIGxpbmUiID5zZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAidGhlIGNoYW5nZSBpbiBicmFuY2gyIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUQgYnJhbmNoMSBicmFuY2gyICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RyeWluZyB0byBkbyByZXNldCAtLXNvZnQgd2l0aCBwZW5kaW5nIGNoZWNrb3V0IG1lcmdlIHNob3VsZCBmYWlsJyAnCisJZ2l0IGJyYW5jaCBicmFuY2gzICYmCisJZ2l0IGJyYW5jaCBicmFuY2g0ICYmCisKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMyAmJgorCWVjaG8gIjNyZCBsaW5lIGluIGJyYW5jaDMiID4+c2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImxpbmUgaW4gYnJhbmNoMyIgJiYKKworCWdpdCBjaGVja291dCBicmFuY2g0ICYmCisJZWNobyAiM3JkIGxpbmUgaW4gYnJhbmNoNCIgPj5zZWNvbmRmaWxlICYmCisKKwlnaXQgY2hlY2tvdXQgLW0gYnJhbmNoMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXNvZnQgJiYKKworCXByaW50ZiAiMXN0IGxpbmUgMm5kIGZpbGVcbjJuZCBsaW5lIDJuZCBmaWxlXG4zcmQgbGluZSIgPnNlY29uZGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ0aGUgbGluZSBpbiBicmFuY2gzIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUQgYnJhbmNoMyBicmFuY2g0ICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3Jlc2V0dGluZyB0byBIRUFEIHdpdGggbm8gY2hhbmdlcyBzaG91bGQgc3VjY2VlZCBhbmQgZG8gbm90aGluZycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJY2hlY2tfY2hhbmdlcyAkaGVhZDUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwkJY2hlY2tfY2hhbmdlcyAkaGVhZDUgJiYKKwlnaXQgcmVzZXQgLS1zb2Z0ICYmCisJCWNoZWNrX2NoYW5nZXMgJGhlYWQ1ICYmCisJZ2l0IHJlc2V0IC0tc29mdCBIRUFEICYmCisJCWNoZWNrX2NoYW5nZXMgJGhlYWQ1ICYmCisJZ2l0IHJlc2V0IC0tbWl4ZWQgJiYKKwkJY2hlY2tfY2hhbmdlcyAkaGVhZDUgJiYKKwlnaXQgcmVzZXQgLS1taXhlZCBIRUFEICYmCisJCWNoZWNrX2NoYW5nZXMgJGhlYWQ1ICYmCisJZ2l0IHJlc2V0ICYmCisJCWNoZWNrX2NoYW5nZXMgJGhlYWQ1ICYmCisJZ2l0IHJlc2V0IEhFQUQgJiYKKwkJY2hlY2tfY2hhbmdlcyAkaGVhZDUKKycKKworPi5kaWZmX2V4cGVjdAorY2F0ID4uY2FjaGVkX2V4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL3NlY29uZGZpbGUgYi9zZWNvbmRmaWxlCitpbmRleCAxYmJiYTc5Li40NGM1YjU4IDEwMDY0NAorLS0tIGEvc2Vjb25kZmlsZQorKysrIGIvc2Vjb25kZmlsZQorQEAgLTEgKzEsMiBAQAorLTJuZCBmaWxlCisrMXN0IGxpbmUgMm5kIGZpbGUKKysybmQgbGluZSAybmQgZmlsZQorRU9GCitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitzZWNvbmRmaWxlOgorMXN0IGxpbmUgMm5kIGZpbGUKKzJuZCBsaW5lIDJuZCBmaWxlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc29mdCByZXNldCBvbmx5IHNob3VsZCBzaG93IGNoYW5nZXMgaW4gZGlmZiAtLWNhY2hlZCcgJworCWdpdCByZXNldCAtLXNvZnQgSEVBRF4gJiYKKwljaGVja19jaGFuZ2VzIGQxYTRiYzNhYmNlNDgyOTYyOGFlMmRjYjBkNjBlZjNkMWE3OGIxYzQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgT1JJR19IRUFEKSIgPSBcCisJCQkkaGVhZDUKKycKKworPi5kaWZmX2V4cGVjdAorPi5jYWNoZWRfZXhwZWN0CitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitzZWNvbmRmaWxlOgorMXN0IGxpbmUgMm5kIGZpbGUKKzJuZCBsaW5lIDJuZCBmaWxlCiszcmQgbGluZSAybmQgZmlsZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY2hhbmdpbmcgZmlsZXMgYW5kIHJlZG8gdGhlIGxhc3QgY29tbWl0IHNob3VsZCBzdWNjZWVkJyAnCisJZWNobyAiM3JkIGxpbmUgMm5kIGZpbGUiID4+c2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLUMgT1JJR19IRUFEICYmCisJaGVhZDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgT1JJR19IRUFEKSIgPSBcCisJCQkkaGVhZDUKKycKKworPi5kaWZmX2V4cGVjdAorPi5jYWNoZWRfZXhwZWN0CitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitmaXJzdDoKKzFzdCBmaWxlCisybmQgbGluZSAxc3QgZmlsZQorc2Vjb25kOgorMm5kIGZpbGUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy0taGFyZCByZXNldCBzaG91bGQgY2hhbmdlIHRoZSBmaWxlcyBhbmQgdW5kbyBjb21taXRzIHBlcm1hbmVudGx5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjIgJiYKKwljaGVja19jaGFuZ2VzIGRkYWVmZTAwZjFkYTE2ODY0NTkxYzYxZmRjN2FkYjVkN2NkNmI3NGUgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgT1JJR19IRUFEKSIgPSBcCisJCQkkaGVhZDQKKycKKworPi5kaWZmX2V4cGVjdAorY2F0ID4uY2FjaGVkX2V4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL2ZpcnN0IGIvZmlyc3QKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggODIwNmMyMi4uMDAwMDAwMAorLS0tIGEvZmlyc3QKKysrKyAvZGV2L251bGwKK0BAIC0xLDIgKzAsMCBAQAorLTFzdCBmaWxlCistMm5kIGxpbmUgMXN0IGZpbGUKK2RpZmYgLS1naXQgYS9zZWNvbmQgYi9zZWNvbmQKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMWJiYmE3OS4uMDAwMDAwMAorLS0tIGEvc2Vjb25kCisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistMm5kIGZpbGUKK2RpZmYgLS1naXQgYS9zZWNvbmRmaWxlIGIvc2Vjb25kZmlsZQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ0YzViNTgKKy0tLSAvZGV2L251bGwKKysrKyBiL3NlY29uZGZpbGUKK0BAIC0wLDAgKzEsMiBAQAorKzFzdCBsaW5lIDJuZCBmaWxlCisrMm5kIGxpbmUgMm5kIGZpbGUKK0VPRgorY2F0ID4uY2F0X2V4cGVjdCA8PEVPRgorc2Vjb25kZmlsZToKKzFzdCBsaW5lIDJuZCBmaWxlCisybmQgbGluZSAybmQgZmlsZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncmVkb2luZyBjaGFuZ2VzIGFkZGluZyB0aGVtIHdpdGhvdXQgY29tbWl0IHRoZW0gc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgcm0gZmlyc3QgJiYKKwlnaXQgbXYgc2Vjb25kIHNlY29uZGZpbGUgJiYKKworCWVjaG8gIjFzdCBsaW5lIDJuZCBmaWxlIiA+c2Vjb25kZmlsZSAmJgorCWVjaG8gIjJuZCBsaW5lIDJuZCBmaWxlIiA+PnNlY29uZGZpbGUgJiYKKwlnaXQgYWRkIHNlY29uZGZpbGUgJiYKKwljaGVja19jaGFuZ2VzIGRkYWVmZTAwZjFkYTE2ODY0NTkxYzYxZmRjN2FkYjVkN2NkNmI3NGUKKycKKworY2F0ID4uZGlmZl9leHBlY3QgPDxFT0YKK2RpZmYgLS1naXQgYS9maXJzdCBiL2ZpcnN0CitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDgyMDZjMjIuLjAwMDAwMDAKKy0tLSBhL2ZpcnN0CisrKysgL2Rldi9udWxsCitAQCAtMSwyICswLDAgQEAKKy0xc3QgZmlsZQorLTJuZCBsaW5lIDFzdCBmaWxlCitkaWZmIC0tZ2l0IGEvc2Vjb25kIGIvc2Vjb25kCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDFiYmJhNzkuLjAwMDAwMDAKKy0tLSBhL3NlY29uZAorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLTJuZCBmaWxlCitFT0YKKz4uY2FjaGVkX2V4cGVjdAorY2F0ID4uY2F0X2V4cGVjdCA8PEVPRgorc2Vjb25kZmlsZToKKzFzdCBsaW5lIDJuZCBmaWxlCisybmQgbGluZSAybmQgZmlsZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1peGVkIHJlc2V0IHRvIEhFQUQgc2hvdWxkIHVuYWRkIHRoZSBmaWxlcycgJworCWdpdCByZXNldCAmJgorCWNoZWNrX2NoYW5nZXMgZGRhZWZlMDBmMWRhMTY4NjQ1OTFjNjFmZGM3YWRiNWQ3Y2Q2Yjc0ZSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBPUklHX0hFQUQpIiA9IFwKKwkJCWRkYWVmZTAwZjFkYTE2ODY0NTkxYzYxZmRjN2FkYjVkN2NkNmI3NGUKKycKKworPi5kaWZmX2V4cGVjdAorPi5jYWNoZWRfZXhwZWN0CitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitzZWNvbmRmaWxlOgorMXN0IGxpbmUgMm5kIGZpbGUKKzJuZCBsaW5lIDJuZCBmaWxlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZG9pbmcgdGhlIGxhc3QgdHdvIGNvbW1pdHMgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgYWRkIHNlY29uZGZpbGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGRkYWVmZTAwZjFkYTE2ODY0NTkxYzYxZmRjN2FkYjVkN2NkNmI3NGUgJiYKKworCWdpdCBybSBmaXJzdCAmJgorCWdpdCBtdiBzZWNvbmQgc2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gInJlbW92ZSAxc3QgYW5kIHJlbmFtZSAybmQiICYmCisKKwllY2hvICIxc3QgbGluZSAybmQgZmlsZSIgPnNlY29uZGZpbGUgJiYKKwllY2hvICIybmQgbGluZSAybmQgZmlsZSIgPj5zZWNvbmRmaWxlICYmCisJIyAiZ2l0IGNvbW1pdCAtbSIgd291bGQgYnJlYWsgTWluR1csIGFzIFdpbmRvd3MgcmVmdXNlIHRvIHBhc3MKKwkjICR0ZXN0X2VuY29kaW5nIGVuY29kZWQgcGFyYW1ldGVyIHRvIGdpdC4KKwljb21taXRfbXNnICR0ZXN0X2VuY29kaW5nIHwgZ2l0IC1jICJpMThuLmNvbW1pdEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIiBjb21taXQgLWEgLUYgLSAmJgorCWNoZWNrX2NoYW5nZXMgJGhlYWQ1CisnCisKKz4uZGlmZl9leHBlY3QKKz4uY2FjaGVkX2V4cGVjdAorY2F0ID4uY2F0X2V4cGVjdCA8PEVPRgorc2Vjb25kZmlsZToKKzFzdCBsaW5lIDJuZCBmaWxlCisybmQgbGluZSAybmQgZmlsZQorM3JkIGxpbmUgaW4gYnJhbmNoMgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWhhcmQgcmVzZXQgdG8gSEVBRCBzaG91bGQgY2xlYXIgYSBmYWlsZWQgbWVyZ2UnICcKKwlnaXQgYnJhbmNoIGJyYW5jaDEgJiYKKwlnaXQgYnJhbmNoIGJyYW5jaDIgJiYKKworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisJZWNobyAiM3JkIGxpbmUgaW4gYnJhbmNoMSIgPj5zZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIGluIGJyYW5jaDEiICYmCisKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMiAmJgorCWVjaG8gIjNyZCBsaW5lIGluIGJyYW5jaDIiID4+c2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImNoYW5nZSBpbiBicmFuY2gyIiAmJgorCWhlYWQzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLiBicmFuY2gxICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNoZWNrX2NoYW5nZXMgJGhlYWQzCisnCisKKz4uZGlmZl9leHBlY3QKKz4uY2FjaGVkX2V4cGVjdAorY2F0ID4uY2F0X2V4cGVjdCA8PEVPRgorc2Vjb25kZmlsZToKKzFzdCBsaW5lIDJuZCBmaWxlCisybmQgbGluZSAybmQgZmlsZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLS1oYXJkIHJlc2V0IHRvIE9SSUdfSEVBRCBzaG91bGQgY2xlYXIgYSBmYXN0LWZvcndhcmQgbWVyZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDUgJiYKKworCWdpdCBwdWxsIC4gYnJhbmNoMSAmJgorCWdpdCByZXNldCAtLWhhcmQgT1JJR19IRUFEICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1EIGJyYW5jaDEgYnJhbmNoMiAmJgorCWNoZWNrX2NoYW5nZXMgJGhlYWQ1CisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCitpbmRleCBkMDA0OTFmLi43ZWQ2ZmY4IDEwMDY0NAorLS0tIGEvZmlsZTEKKysrKyBiL2ZpbGUxCitAQCAtMSArMSBAQAorLTEKKys1CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwY2ZiZjA4Li4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLTIKK0VPRgorY2F0ID4gY2FjaGVkX2V4cGVjdCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlNCBiL2ZpbGU0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjg2MjZjNAorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTQKK0BAIC0wLDAgKzEgQEAKKys0CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1taXhlZCA8cGF0aHM+JyAnCisJZWNobyAxID4gZmlsZTEgJiYKKwllY2hvIDIgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGZpbGVzICYmCisJZ2l0IHJtIGZpbGUyICYmCisJZWNobyAzID4gZmlsZTMgJiYKKwllY2hvIDQgPiBmaWxlNCAmJgorCWVjaG8gNSA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSBmaWxlMyBmaWxlNCAmJgorCWdpdCByZXNldCBIRUFEIC0tIGZpbGUxIGZpbGUyIGZpbGUzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAmJgorCWdpdCBkaWZmID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgY2FjaGVkX2V4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCByZXNldHRpbmcgdGhlIGluZGV4IGF0IGdpdmUgcGF0aHMnICcKKworCW1rZGlyIHN1YiAmJgorCT5zdWIvZmlsZTEgJiYKKwk+c3ViL2ZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBzdWIvZmlsZTEgc3ViL2ZpbGUyICYmCisJVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWdpdCByZXNldCBIRUFEIHN1Yi9maWxlMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKwlVPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZWNobyAiJFQiICYmCisJZWNobyAiJFUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1leGl0LWNvZGUgIiRUIiAmJgorCXRlc3QgIiRUIiAhPSAiJFUiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXR0aW5nIGFuIHVubW9kaWZpZWQgcGF0aCBpcyBhIG5vLW9wJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCByZXNldCAtLSBmaWxlMSAmJgorCWdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlICYmCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1leGl0LWNvZGUgSEVBRAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OgorTQlmaWxlMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWl4ZWQgcmVmcmVzaGVzIHRoZSBpbmRleCcgJworCWVjaG8gMTIzID4+IGZpbGUyICYmCisJZ2l0IHJlc2V0IC0tbWl4ZWQgSEVBRCA+IG91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0dGluZyBzcGVjaWZpYyBwYXRoIHRoYXQgaXMgdW5tZXJnZWQnICcKKwlnaXQgcm0gLS1jYWNoZWQgZmlsZTIgJiYKKwlGMT0kKGdpdCByZXYtcGFyc2UgSEVBRDpmaWxlMSkgJiYKKwlGMj0kKGdpdCByZXYtcGFyc2UgSEVBRDpmaWxlMikgJiYKKwlGMz0kKGdpdCByZXYtcGFyc2UgSEVBRDpzZWNvbmRmaWxlKSAmJgorCXsKKwkJZWNobyAiMTAwNjQ0ICRGMSAxCWZpbGUyIiAmJgorCQllY2hvICIxMDA2NDQgJEYyIDIJZmlsZTIiICYmCisJCWVjaG8gIjEwMDY0NCAkRjMgMwlmaWxlMiIKKwl9IHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlnaXQgbHMtZmlsZXMgLXUgJiYKKwlnaXQgcmVzZXQgSEVBRCBmaWxlMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSAtLWNhY2hlZCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0aW9uICgxKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5zZWNvbmRmaWxlICYmCisJZ2l0IGFkZCBzZWNvbmRmaWxlICYmCisJZ2l0IHJlc2V0IHNlY29uZGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0IC0tIHNlY29uZGZpbGUgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5KSIgJiYKKwl0ZXN0IC1mIHNlY29uZGZpbGUgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgc2Vjb25kZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0aW9uICgyKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5zZWNvbmRmaWxlICYmCisJZ2l0IGFkZCBzZWNvbmRmaWxlICYmCisJcm0gLWYgc2Vjb25kZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCBzZWNvbmRmaWxlICYmCisJdGVzdCAtbiAiJChnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtb25seSAtLSBzZWNvbmRmaWxlKSIgJiYKKwl0ZXN0ICEgLWYgc2Vjb25kZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0aW9uICgzKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5zZWNvbmRmaWxlICYmCisJZ2l0IGFkZCBzZWNvbmRmaWxlICYmCisJcm0gLWYgc2Vjb25kZmlsZSAmJgorCWdpdCByZXNldCBIRUFEIHNlY29uZGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0ICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtb25seSkiICYmCisJdGVzdCAhIC1mIHNlY29uZGZpbGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhbWJpZ3VhdGlvbiAoNCknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk+c2Vjb25kZmlsZSAmJgorCWdpdCBhZGQgc2Vjb25kZmlsZSAmJgorCXJtIC1mIHNlY29uZGZpbGUgJiYKKwlnaXQgcmVzZXQgLS0gc2Vjb25kZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5KSIgJiYKKwl0ZXN0ICEgLWYgc2Vjb25kZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB3aXRoIHBhdGhzIGFjY2VwdHMgdHJlZScgJworCSMgZm9yIHNpbXBsZXIgdGVzdHMsIGRyb3AgbGFzdCBjb21taXQgY29udGFpbmluZyBhZGRlZCBmaWxlcworCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgcmVzZXQgSEVBRF5ee3RyZWV9IC0tIC4gJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCBIRUFEXiAtLWV4aXQtY29kZSAmJgorCWdpdCBkaWZmIEhFQUQgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLU4ga2VlcHMgcmVtb3ZlZCBmaWxlcyBhcyBpbnRlbnQtdG8tYWRkJyAnCisJZWNobyBuZXctZmlsZSA+bmV3LWZpbGUgJiYKKwlnaXQgYWRkIG5ldy1maWxlICYmCisJZ2l0IHJlc2V0IC1OIEhFQUQgJiYKKworCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlnaXQgbHMtdHJlZSAkdHJlZSBuZXctZmlsZSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgPmFjdHVhbCAmJgorCWVjaG8gbmV3LWZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1taXhlZCBzZXRzIHVwIHdvcmsgdHJlZScgJworCWdpdCBpbml0IG1peGVkX3dvcmt0cmVlICYmCisJKAorCQljZCBtaXhlZF93b3JrdHJlZSAmJgorCQl0ZXN0X2NvbW1pdCBkdW1teQorCSkgJiYKKwlnaXQgLS1naXQtZGlyPW1peGVkX3dvcmt0cmVlLy5naXQgLS13b3JrLXRyZWU9bWl4ZWRfd29ya3RyZWUgcmVzZXQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MTAzLXJlc2V0LWJhcmUuc2ggYi90L3Q3MTAzLXJlc2V0LWJhcmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWZlMzZhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMDMtcmVzZXQtYmFyZS5zaApAQCAtMCwwICsxLDY5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlc2V0IGluIGEgYmFyZSByZXBvc2l0b3J5JworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG5vbi1iYXJlJyAnCisJZWNobyBvbmUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWVjaG8gdHdvID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImhhcmQiIHJlc2V0IHJlcXVpcmVzIGEgd29ya3RyZWUnICcKKwkoY2QgLmdpdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1oYXJkKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcibWVyZ2UiIHJlc2V0IHJlcXVpcmVzIGEgd29ya3RyZWUnICcKKwkoY2QgLmdpdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1tZXJnZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImtlZXAiIHJlc2V0IHJlcXVpcmVzIGEgd29ya3RyZWUnICcKKwkoY2QgLmdpdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1rZWVwKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcibWl4ZWQiIHJlc2V0IGlzIG9rJyAnCisJKGNkIC5naXQgJiYgZ2l0IHJlc2V0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic29mdCIgcmVzZXQgaXMgb2snICcKKwkoY2QgLmdpdCAmJiBnaXQgcmVzZXQgLS1zb2Z0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXJkIHJlc2V0IHdvcmtzIHdpdGggR0lUX1dPUktfVFJFRScgJworCW1rZGlyIHdvcmt0cmVlICYmCisJR0lUX1dPUktfVFJFRT0kUFdEL3dvcmt0cmVlIEdJVF9ESVI9JFBXRC8uZ2l0IGdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X2NtcCBmaWxlIHdvcmt0cmVlL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYmFyZScgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLmdpdCAmJgorCWNkIGJhcmUuZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJoYXJkIiByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBiYXJlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcibWVyZ2UiIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGJhcmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1tZXJnZSBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcia2VlcCIgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYmFyZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXAgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIm1peGVkIiByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBiYXJlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tbWl4ZWQgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInNvZnQiIHJlc2V0IGlzIGFsbG93ZWQgaW4gYmFyZScgJworCWdpdCByZXNldCAtLXNvZnQgSEVBRF4gJiYKKwl0ZXN0ICIkKGdpdCBzaG93IC0tcHJldHR5PWZvcm1hdDolcyB8IGhlYWQgLW4gMSkiID0gIm9uZSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MTA0LXJlc2V0LWhhcmQuc2ggYi90L3Q3MTA0LXJlc2V0LWhhcmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTZmYWEwNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMDQtcmVzZXQtaGFyZC5zaApAQCAtMCwwICsxLDQ2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVzZXQgLS1oYXJkIHVubWVyZ2VkJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlta2RpciBiZWZvcmUgbGF0ZXIgJiYKKwk+YmVmb3JlLzEgJiYKKwk+YmVmb3JlLzIgJiYKKwk+aGVsbG8gJiYKKwk+bGF0ZXIvMyAmJgorCWdpdCBhZGQgYmVmb3JlIGhlbGxvIGxhdGVyICYmCisJZ2l0IGNvbW1pdCAtbSB3b3JsZCAmJgorCisJSD0kKGdpdCByZXYtcGFyc2UgOmhlbGxvKSAmJgorCWdpdCBybSAtLWNhY2hlZCBoZWxsbyAmJgorCWVjaG8gIjEwMDY0NCAkSCAyCWhlbGxvIiB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisKKwlybSAtZiBoZWxsbyAmJgorCW1rZGlyIC1wIGhlbGxvICYmCisJPmhlbGxvL3dvcmxkICYmCisJdGVzdCAiJChnaXQgbHMtZmlsZXMgLW8pIiA9IGhlbGxvL3dvcmxkCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1oYXJkIHNob3VsZCByZXN0b3JlIHVubWVyZ2VkIG9uZXMnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGJlZm9yZS8xIGJlZm9yZS8yIGhlbGxvIGxhdGVyLzMgJiYKKwl0ZXN0IC1mIGhlbGxvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1oYXJkIGRpZCBub3QgY29ycnVwdCBpbmRleCBvciBjYWNoZWQtdHJlZScgJworCisJVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGJlZm9yZSBoZWxsbyBsYXRlciAmJgorCVU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwl0ZXN0ICIkVCIgPSAiJFUiCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MTA1LXJlc2V0LXBhdGNoLnNoIGIvdC90NzEwNS1yZXNldC1wYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYzJhNmNmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzEwNS1yZXNldC1wYXRjaC5zaApAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlc2V0IC0tcGF0Y2gnCisuIC4vbGliLXBhdGNoLW1vZGUuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCcgJworCW1rZGlyIGRpciAmJgorCWVjaG8gcGFyZW50ID4gZGlyL2ZvbyAmJgorCWVjaG8gZHVtbXkgPiBiYXIgJiYKKwlnaXQgYWRkIGRpciAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfY29tbWl0IHNlY29uZCBkaXIvZm9vIGhlYWQgJiYKKwlzZXRfYW5kX3NhdmVfc3RhdGUgYmFyIGJhcl93b3JrIGJhcl9pbmRleCAmJgorCXNhdmVfaGVhZAorJworCisjIG5vdGU6IGJhciBzb3J0cyBiZWZvcmUgZm9vLCBzbyB0aGUgZmlyc3QgJ24nIGlzIGFsd2F5cyB0byBza2lwICdiYXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2F5aW5nICJuIiBkb2VzIG5vdGhpbmcnICcKKwlzZXRfYW5kX3NhdmVfc3RhdGUgZGlyL2ZvbyB3b3JrIHdvcmsgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIG4gbiB8IGdpdCByZXNldCAtcCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBkaXIvZm9vICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCByZXNldCAtcCcgJworCXRlc3Rfd3JpdGVfbGluZXMgbiB5IHwgZ2l0IHJlc2V0IC1wID5vdXRwdXQgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdGVzdF9pMThuZ3JlcCAiVW5zdGFnZSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc2V0IC1wIEhFQUReJyAnCisJdGVzdF93cml0ZV9saW5lcyBuIHkgfCBnaXQgcmVzZXQgLXAgSEVBRF4gPm91dHB1dCAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHdvcmsgcGFyZW50ICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXRlc3RfaTE4bmdyZXAgIkFwcGx5IiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzZXQgLXAgSEVBRF5ee3RyZWV9JyAnCisJdGVzdF93cml0ZV9saW5lcyBuIHkgfCBnaXQgcmVzZXQgLXAgSEVBRF5ee3RyZWV9ID5vdXRwdXQgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIHBhcmVudCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl0ZXN0X2kxOG5ncmVwICJBcHBseSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc2V0IC1wIEhFQUReOmRpci9mb28gKGJsb2IgZmFpbHMpJyAnCisJc2V0X2FuZF9zYXZlX3N0YXRlIGRpci9mb28gd29yayB3b3JrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC1wIEhFQUReOmRpci9mb28gJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgZGlyL2ZvbyAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzZXQgLXAgYWFhYWFhYWEgKHVua25vd24gZmFpbHMpJyAnCisJc2V0X2FuZF9zYXZlX3N0YXRlIGRpci9mb28gd29yayB3b3JrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC1wIGFhYWFhYWFhICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGRpci9mb28gJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyCisnCisKKyMgVGhlIGlkZWEgaW4gdGhlIHJlc3QgaXMgdGhhdCBiYXIgc29ydHMgZmlyc3QsIHNvIHdlIGFsd2F5cyBzYXkgJ3knCisjIGZpcnN0IGFuZCBpZiB0aGUgcGF0aCBsaW1pdGVyIGZhaWxzIGl0J2xsIGFwcGx5IHRvIGJhciBpbnN0ZWFkIG9mCisjIGRpci9mb28uICBUaGVyZSdzIGFsd2F5cyBhbiBleHRyYSAnbicgdG8gcmVqZWN0IGVkaXRzIHRvIGRpci9mb28gaW4KKyMgdGhlIGZhaWx1cmUgY2FzZSAoYW5kIHRodXMgZ2V0IG91dCBvZiB0aGUgbG9vcCkuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc2V0IC1wIGRpcicgJworCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgd29yayAmJgorCXRlc3Rfd3JpdGVfbGluZXMgeSBuIHwgZ2l0IHJlc2V0IC1wIGRpciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzZXQgLXAgLS0gZm9vIChpbnNpZGUgZGlyKScgJworCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgd29yayAmJgorCXRlc3Rfd3JpdGVfbGluZXMgeSBuIHwgKGNkIGRpciAmJiBnaXQgcmVzZXQgLXAgLS0gZm9vKSAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzZXQgLXAgSEVBRF4gLS0gZGlyJyAnCisJdGVzdF93cml0ZV9saW5lcyB5IG4gfCBnaXQgcmVzZXQgLXAgSEVBRF4gLS0gZGlyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBwYXJlbnQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnbm9uZSBvZiB0aGlzIG1vdmVkIEhFQUQnICcKKwl2ZXJpZnlfc2F2ZWRfaGVhZAorJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzEwNi1yZXNldC11bmJvcm4tYnJhbmNoLnNoIGIvdC90NzEwNi1yZXNldC11bmJvcm4tYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVjYjg1YzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MTA2LXJlc2V0LXVuYm9ybi1icmFuY2guc2gKQEAgLTAsMCArMSw2NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXNldCBzaG91bGQgd29yayBvbiB1bmJvcm4gYnJhbmNoJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBhID5hICYmCisJZWNobyBiID5iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0JyAnCisJZ2l0IGFkZCBhIGIgJiYKKwlnaXQgcmVzZXQgJiYKKworCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCBIRUFEJyAnCisJcm0gLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgYSBiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgJGZpbGUnICcKKwlybSAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCBhIGIgJiYKKwlnaXQgcmVzZXQgYSAmJgorCisJZWNobyBiID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdyZXNldCAtcCcgJworCXJtIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgJiYKKwllY2hvIHkgPnllcyAmJgorCWdpdCByZXNldCAtcCA8eWVzID5vdXRwdXQgJiYKKworCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIlVuc3RhZ2UiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLXNvZnQgaXMgYSBuby1vcCcgJworCXJtIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgcmVzZXQgLS1zb2Z0ICYmCisKKwllY2hvIGEgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWhhcmQnICcKKwlybSAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCBhICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJlY2hvIGEgPmEiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcxMDctcmVzZXQtcGF0aHNwZWMtZmlsZS5zaCBiL3QvdDcxMDctcmVzZXQtcGF0aHNwZWMtZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYWQzYTlkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzEwNy1yZXNldC1wYXRoc3BlYy1maWxlLnNoCkBAIC0wLDAgKzEsMTczIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVzZXQgLS1wYXRoc3BlYy1mcm9tLWZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3RpY2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBBID5maWxlQS50ICYmCisJZWNobyBCID5maWxlQi50ICYmCisJZWNobyBDID5maWxlQy50ICYmCisJZWNobyBEID5maWxlRC50ICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtLWluY2x1ZGUgLiAtbSAiQ29tbWl0IiAmJgorCWdpdCB0YWcgY2hlY2twb2ludAorJworCityZXN0b3JlX2NoZWNrcG9pbnQgKCkgeworCWdpdCByZXNldCAtLWhhcmQgY2hlY2twb2ludAorfQorCit2ZXJpZnlfZXhwZWN0ICgpIHsKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0tIGZpbGVBLnQgZmlsZUIudCBmaWxlQy50IGZpbGVELnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wYXRoc3BlYy1mcm9tLWZpbGUgZnJvbSBzdGRpbicgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJZ2l0IHJtIGZpbGVBLnQgJiYKKwllY2hvIGZpbGVBLnQgfCBnaXQgcmVzZXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBEIGZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcGF0aHNwZWMtZnJvbS1maWxlIGZyb20gZmlsZScgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJZ2l0IHJtIGZpbGVBLnQgJiYKKwllY2hvIGZpbGVBLnQgPmxpc3QgJiYKKwlnaXQgcmVzZXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBEIGZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTCBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlnaXQgcm0gZmlsZUEudCBmaWxlQi50ICYmCisJcHJpbnRmICJmaWxlQS50XDBmaWxlQi50XDAiIHwgZ2l0IHJlc2V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1wYXRoc3BlYy1maWxlLW51bCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBEIGZpbGVBLnQKKwkgRCBmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMRiBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlnaXQgcm0gZmlsZUEudCBmaWxlQi50ICYmCisJcHJpbnRmICJmaWxlQS50XG5maWxlQi50XG4iIHwgZ2l0IHJlc2V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgRCBmaWxlQS50CisJIEQgZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gdHJhaWxpbmcgZGVsaW1pdGVyJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlnaXQgcm0gZmlsZUEudCBmaWxlQi50ICYmCisJcHJpbnRmICJmaWxlQS50XG5maWxlQi50IiB8IGdpdCByZXNldCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIEQgZmlsZUEudAorCSBEIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NSTEYgZGVsaW1pdGVycycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJZ2l0IHJtIGZpbGVBLnQgZmlsZUIudCAmJgorCXByaW50ZiAiZmlsZUEudFxyXG5maWxlQi50XHJcbiIgfCBnaXQgcmVzZXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBEIGZpbGVBLnQKKwkgRCBmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWNhdCA+bGlzdCA8PC1cRU9GICYmCisJImZpbGVcMTAxLnQiCisJRU9GCisKKwlnaXQgcm0gZmlsZUEudCAmJgorCWdpdCByZXNldCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0ICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIEQgZmlsZUEudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGVzIG5vdCBjb21wYXRpYmxlIHdpdGggLS1wYXRoc3BlYy1maWxlLW51bCcgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJY2F0ID5saXN0IDw8LVxFT0YgJiYKKwkiZmlsZVwxMDEudCIKKwlFT0YKKworCSMgTm90ZTogImdpdCByZXNldCIgaGFzIG5vdCB5ZXQgbGVhcm5lZCB0byBmYWlsIG9uIHdyb25nIHBhdGhzcGVjcworCWdpdCByZXNldCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tcGF0aHNwZWMtZmlsZS1udWwgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgRCBmaWxlQS50CisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmx5IHRvdWNoZXMgd2hhdCB3YXMgbGlzdGVkJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlnaXQgcm0gZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudCAmJgorCXByaW50ZiAiZmlsZUIudFxuZmlsZUMudFxuIiB8IGdpdCByZXNldCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJRCAgZmlsZUEudAorCSBEIGZpbGVCLnQKKwkgRCBmaWxlQy50CisJRCAgZmlsZUQudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3IgY29uZGl0aW9ucycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCWVjaG8gZmlsZUEudCA+bGlzdCAmJgorCWdpdCBybSBmaWxlQS50ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtLXBhdGNoIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1wYXRjaCIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtLSBmaWxlQS50IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXBhdGhzcGVjLWZpbGUtbnVsIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1zb2Z0IC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICJmYXRhbDogQ2Fubm90IGRvIHNvZnQgcmVzZXQgd2l0aCBwYXRocyIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1oYXJkIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICJmYXRhbDogQ2Fubm90IGRvIGhhcmQgcmVzZXQgd2l0aCBwYXRocyIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzExMC1yZXNldC1tZXJnZS5zaCBiL3QvdDcxMTAtcmVzZXQtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTgyYTA3YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMTAtcmVzZXQtbWVyZ2Uuc2gKQEAgLTAsMCArMSwyOTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgQ2hyaXN0aWFuIENvdWRlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyBmb3IgImdpdCByZXNldCIgd2l0aCAiLS1tZXJnZSIgYW5kICItLWtlZXAiIG9wdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKyAgICBmb3IgaSBpbiAxIDIgMzsgZG8gZWNobyBsaW5lICRpOyBkb25lID5maWxlMSAmJgorICAgIGNhdCBmaWxlMSA+ZmlsZTIgJiYKKyAgICBnaXQgYWRkIGZpbGUxIGZpbGUyICYmCisgICAgdGVzdF90aWNrICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisgICAgZ2l0IHRhZyBpbml0aWFsICYmCisgICAgZWNobyBsaW5lIDQgPj5maWxlMSAmJgorICAgIGNhdCBmaWxlMSA+ZmlsZTIgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1tICJhZGQgbGluZSA0IHRvIGZpbGUxIiBmaWxlMSAmJgorICAgIGdpdCB0YWcgc2Vjb25kCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBDICAgICAgIEMgICAgIEMgICAgRCAgICAgLS1tZXJnZSAgRCAgICAgICBEICAgICBECisjIGZpbGUyOiAgICAgQyAgICAgICBEICAgICBEICAgIEQgICAgIC0tbWVyZ2UgIEMgICAgICAgRCAgICAgRAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBpcyBvayB3aXRoIGNoYW5nZXMgaW4gZmlsZSBpdCBkb2VzIG5vdCB0b3VjaCcgJworICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUReICYmCisgICAgISBncmVwIDQgZmlsZTEgJiYKKyAgICBncmVwIDQgZmlsZTIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBpbml0aWFsKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBpcyBvayB3aGVuIHN3aXRjaGluZyBiYWNrJyAnCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2Ugc2Vjb25kICYmCisgICAgZ3JlcCA0IGZpbGUxICYmCisgICAgZ3JlcCA0IGZpbGUyICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIEMgICAgICAgQyAgICAgQyAgICBEICAgICAtLWtlZXAgICBEICAgICAgIEQgICAgIEQKKyMgZmlsZTI6ICAgICBDICAgICAgIEQgICAgIEQgICAgRCAgICAgLS1rZWVwICAgQyAgICAgICBEICAgICBECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWtlZXAgaXMgb2sgd2l0aCBjaGFuZ2VzIGluIGZpbGUgaXQgZG9lcyBub3QgdG91Y2gnICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIHNlY29uZCAmJgorICAgIGNhdCBmaWxlMSA+ZmlsZTIgJiYKKyAgICBnaXQgcmVzZXQgLS1rZWVwIEhFQUReICYmCisgICAgISBncmVwIDQgZmlsZTEgJiYKKyAgICBncmVwIDQgZmlsZTIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBpbml0aWFsKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1rZWVwIGlzIG9rIHdoZW4gc3dpdGNoaW5nIGJhY2snICcKKyAgICBnaXQgcmVzZXQgLS1rZWVwIHNlY29uZCAmJgorICAgIGdyZXAgNCBmaWxlMSAmJgorICAgIGdyZXAgNCBmaWxlMiAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBCICAgICAgIEIgICAgIEMgICAgRCAgICAgLS1tZXJnZSAgRCAgICAgICBEICAgICBECisjIGZpbGUyOiAgICAgQyAgICAgICBEICAgICBEICAgIEQgICAgIC0tbWVyZ2UgIEMgICAgICAgRCAgICAgRAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBkaXNjYXJkcyBjaGFuZ2VzIGFkZGVkIHRvIGluZGV4ICgxKScgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgY2F0IGZpbGUxID5maWxlMiAmJgorICAgIGVjaG8gImxpbmUgNSIgPj4gZmlsZTEgJiYKKyAgICBnaXQgYWRkIGZpbGUxICYmCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2UgSEVBRF4gJiYKKyAgICAhIGdyZXAgNCBmaWxlMSAmJgorICAgICEgZ3JlcCA1IGZpbGUxICYmCisgICAgZ3JlcCA0IGZpbGUyICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgaW5pdGlhbCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0tbWVyZ2UgaXMgb2sgYWdhaW4gd2hlbiBzd2l0Y2hpbmcgYmFjayAoMSknICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKyAgICBlY2hvICJsaW5lIDUiID4+IGZpbGUyICYmCisgICAgZ2l0IGFkZCBmaWxlMiAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIHNlY29uZCAmJgorICAgICEgZ3JlcCA0IGZpbGUyICYmCisgICAgISBncmVwIDUgZmlsZTEgJiYKKyAgICBncmVwIDQgZmlsZTEgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQpIgorJworCisjIFRoZSBuZXh0IHRlc3Qgd2lsbCB0ZXN0IHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisjICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbGUxOiAgICAgQiAgICAgICBCICAgICBDICAgIEQgICAgIC0ta2VlcCAgIChkaXNhbGxvd2VkKQordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1rZWVwIGZhaWxzIHdpdGggY2hhbmdlcyBpbiBpbmRleCBpbiBmaWxlcyBpdCB0b3VjaGVzJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCBzZWNvbmQgJiYKKyAgICBlY2hvICJsaW5lIDUiID4+IGZpbGUxICYmCisgICAgZ2l0IGFkZCBmaWxlMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXAgSEVBRF4KKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIEMgICAgICAgQyAgICAgQyAgICBEICAgICAtLW1lcmdlICBEICAgICAgIEQgICAgIEQKKyMgZmlsZTI6ICAgICBDICAgICAgIEMgICAgIEQgICAgRCAgICAgLS1tZXJnZSAgRCAgICAgICBEICAgICBECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLW1lcmdlIGRpc2NhcmRzIGNoYW5nZXMgYWRkZWQgdG8gaW5kZXggKDIpJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCBzZWNvbmQgJiYKKyAgICBlY2hvICJsaW5lIDQiID4+IGZpbGUyICYmCisgICAgZ2l0IGFkZCBmaWxlMiAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUReICYmCisgICAgISBncmVwIDQgZmlsZTIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBpbml0aWFsKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBpcyBvayBhZ2FpbiB3aGVuIHN3aXRjaGluZyBiYWNrICgyKScgJworICAgIGdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIHNlY29uZCAmJgorICAgICEgZ3JlcCA0IGZpbGUyICYmCisgICAgZ3JlcCA0IGZpbGUxICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIEMgICAgICAgQyAgICAgQyAgICBEICAgICAtLWtlZXAgICBEICAgICAgIEQgICAgIEQKKyMgZmlsZTI6ICAgICBDICAgICAgIEMgICAgIEQgICAgRCAgICAgLS1rZWVwICAgQyAgICAgICBEICAgICBECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWtlZXAga2VlcHMgY2hhbmdlcyBpdCBkb2VzIG5vdCB0b3VjaCcgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgZWNobyAibGluZSA0IiA+PiBmaWxlMiAmJgorICAgIGdpdCBhZGQgZmlsZTIgJiYKKyAgICBnaXQgcmVzZXQgLS1rZWVwIEhFQUReICYmCisgICAgZ3JlcCA0IGZpbGUyICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgaW5pdGlhbCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0ta2VlcCBrZWVwcyBjaGFuZ2VzIHdoZW4gc3dpdGNoaW5nIGJhY2snICcKKyAgICBnaXQgcmVzZXQgLS1rZWVwIHNlY29uZCAmJgorICAgIGdyZXAgNCBmaWxlMiAmJgorICAgIGdyZXAgNCBmaWxlMSAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBBICAgICAgIEIgICAgIEIgICAgQyAgICAgLS1tZXJnZSAgKGRpc2FsbG93ZWQpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLW1lcmdlIGZhaWxzIHdpdGggY2hhbmdlcyBpbiBmaWxlIGl0IHRvdWNoZXMnICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIHNlY29uZCAmJgorICAgIGVjaG8gImxpbmUgNSIgPj4gZmlsZTEgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1tICJhZGQgbGluZSA1IiBmaWxlMSAmJgorICAgIHNlZCAtZSAicy9saW5lIDEvY2hhbmdlZCBsaW5lIDEvIiA8ZmlsZTEgPmZpbGUzICYmCisgICAgbXYgZmlsZTMgZmlsZTEgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1tZXJnZSBIRUFEXiAyPmVyci5sb2cgJiYKKyAgICBncmVwIGZpbGUxIGVyci5sb2cgfCBncmVwICJub3QgdXB0b2RhdGUiCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBBICAgICAgIEIgICAgIEIgICAgQyAgICAgLS1rZWVwICAgKGRpc2FsbG93ZWQpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWtlZXAgZmFpbHMgd2l0aCBjaGFuZ2VzIGluIGZpbGUgaXQgdG91Y2hlcycgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgZWNobyAibGluZSA1IiA+PiBmaWxlMSAmJgorICAgIHRlc3RfdGljayAmJgorICAgIGdpdCBjb21taXQgLW0gImFkZCBsaW5lIDUiIGZpbGUxICYmCisgICAgc2VkIC1lICJzL2xpbmUgMS9jaGFuZ2VkIGxpbmUgMS8iIDxmaWxlMSA+ZmlsZTMgJiYKKyAgICBtdiBmaWxlMyBmaWxlMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXAgSEVBRF4gMj5lcnIubG9nICYmCisgICAgZ3JlcCBmaWxlMSBlcnIubG9nIHwgZ3JlcCAibm90IHVwdG9kYXRlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAzIGRpZmZlcmVudCBicmFuY2hlcycgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgZ2l0IGJyYW5jaCBicmFuY2gxICYmCisgICAgZ2l0IGJyYW5jaCBicmFuY2gyICYmCisgICAgZ2l0IGJyYW5jaCBicmFuY2gzICYmCisgICAgZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKyAgICBlY2hvICJsaW5lIDUgaW4gYnJhbmNoMSIgPj4gZmlsZTEgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgaW4gYnJhbmNoMSIgJiYKKyAgICBnaXQgY2hlY2tvdXQgYnJhbmNoMiAmJgorICAgIGVjaG8gImxpbmUgNSBpbiBicmFuY2gyIiA+PiBmaWxlMSAmJgorICAgIHRlc3RfdGljayAmJgorICAgIGdpdCBjb21taXQgLWEgLW0gImNoYW5nZSBpbiBicmFuY2gyIiAmJgorICAgIGdpdCB0YWcgdGhpcmQgJiYKKyAgICBnaXQgY2hlY2tvdXQgYnJhbmNoMyAmJgorICAgIGVjaG8gYSBuZXcgZmlsZSA+ZmlsZTMgJiYKKyAgICBybSAtZiBmaWxlMSAmJgorICAgIGdpdCBhZGQgZmlsZTMgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgaW4gYnJhbmNoMyIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIFggICAgICAgVSAgICAgQiAgICBDICAgICAtLW1lcmdlICBDICAgICAgIEMgICAgIEMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJyZXNldCAtLW1lcmdlIEhFQUReIiBpcyBvayB3aXRoIHBlbmRpbmcgbWVyZ2UnICcKKyAgICBnaXQgY2hlY2tvdXQgdGhpcmQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUReICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmKSIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIFggICAgICAgVSAgICAgQiAgICBDICAgICAtLWtlZXAgICAoZGlzYWxsb3dlZCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJyZXNldCAtLWtlZXAgSEVBRF4iIGZhaWxzIHdpdGggcGVuZGluZyBtZXJnZScgJworICAgIGdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXAgSEVBRF4gMj5lcnIubG9nICYmCisgICAgdGVzdF9pMThuZ3JlcCAibWlkZGxlIG9mIGEgbWVyZ2UiIGVyci5sb2cKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIFggICAgICAgVSAgICAgQiAgICBCICAgICAtLW1lcmdlICBCICAgICAgIEIgICAgIEIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJyZXNldCAtLW1lcmdlIEhFQUQiIGlzIG9rIHdpdGggcGVuZGluZyBtZXJnZScgJworICAgIGdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUQgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSB0aGlyZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZikiCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBYICAgICAgIFUgICAgIEIgICAgQiAgICAgLS1rZWVwICAgKGRpc2FsbG93ZWQpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcicmVzZXQgLS1rZWVwIEhFQUQiIGZhaWxzIHdpdGggcGVuZGluZyBtZXJnZScgJworICAgIGdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXAgSEVBRCAyPmVyci5sb2cgJiYKKyAgICB0ZXN0X2kxOG5ncmVwICJtaWRkbGUgb2YgYSBtZXJnZSIgZXJyLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1lcmdlIGlzIG9rIHdpdGggYWRkZWQvZGVsZXRlZCBtZXJnZScgJworICAgIGdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKyAgICBybSAtZiBmaWxlMiAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2gzICYmCisgICAgISB0ZXN0IC1mIGZpbGUyICYmCisgICAgdGVzdCAtZiBmaWxlMyAmJgorICAgIGdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbGUzICYmCisgICAgZ2l0IGRpZmYgLS1leGl0LWNvZGUgYnJhbmNoMyBmaWxlMyAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUQgJiYKKyAgICAhIHRlc3QgLWYgZmlsZTMgJiYKKyAgICAhIHRlc3QgLWYgZmlsZTIgJiYKKyAgICBnaXQgZGlmZiAtLWV4aXQtY29kZSAtLWNhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWtlZXAgZmFpbHMgd2l0aCBhZGRlZC9kZWxldGVkIG1lcmdlJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCB0aGlyZCAmJgorICAgIHJtIC1mIGZpbGUyICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGJyYW5jaDMgJiYKKyAgICAhIHRlc3QgLWYgZmlsZTIgJiYKKyAgICB0ZXN0IC1mIGZpbGUzICYmCisgICAgZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmlsZTMgJiYKKyAgICBnaXQgZGlmZiAtLWV4aXQtY29kZSBicmFuY2gzIGZpbGUzICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0ta2VlcCBIRUFEIDI+ZXJyLmxvZyAmJgorICAgIHRlc3RfaTE4bmdyZXAgIm1pZGRsZSBvZiBhIG1lcmdlIiBlcnIubG9nCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzExMS1yZXNldC10YWJsZS5zaCBiL3QvdDcxMTEtcmVzZXQtdGFibGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2U0MjFhZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMTEtcmVzZXQtdGFibGUuc2gKQEAgLTAsMCArMSwxMjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgQ2hyaXN0aWFuIENvdWRlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyB0byBjaGVjayB0aGF0ICJyZXNldCIgb3B0aW9ucyBmb2xsb3cgYSBrbm93biB0YWJsZScKKworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgaW5pdGlhbCBjb21taXRzJyAnCisgICAgdGVzdF9jb21taXQgRSBmaWxlMSAmJgorICAgIHRlc3RfY29tbWl0IEQgZmlsZTEgJiYKKyAgICB0ZXN0X2NvbW1pdCBDIGZpbGUxCisnCisKK3doaWxlIHJlYWQgVzEgSTEgSDEgVCBvcHQgVzIgSTIgSDIKK2RvCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2s6ICRXMSAkSTEgJEgxICRUIC0tJG9wdCAkVzIgJEkyICRIMiIgJworCWdpdCByZXNldCAtLWhhcmQgQyAmJgorCWlmIHRlc3QgIiRJMSIgIT0gIiRIMSIKKwl0aGVuCisJICAgIGVjaG8gIiRJMSIgPmZpbGUxICYmCisJICAgIGdpdCBhZGQgZmlsZTEKKwlmaSAmJgorCWlmIHRlc3QgIiRXMSIgIT0gIiRJMSIKKwl0aGVuCisJICAgIGVjaG8gIiRXMSIgPmZpbGUxCisJZmkgJiYKKwlpZiB0ZXN0ICIkVzIiICE9ICJYWFhYWCIKKwl0aGVuCisJICAgIGdpdCByZXNldCAtLSRvcHQgJFQgJiYKKwkgICAgdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkVzIiICYmCisJICAgIGdpdCBjaGVja291dC1pbmRleCAtZiAtLSBmaWxlMSAmJgorCSAgICB0ZXN0ICIkKGNhdCBmaWxlMSkiID0gIiRJMiIgJiYKKwkgICAgZ2l0IGNoZWNrb3V0IC1mIEhFQUQgLS0gZmlsZTEgJiYKKwkgICAgdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkSDIiCisJZWxzZQorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS0kb3B0ICRUCisJZmkKKyAgICAnCitkb25lIDw8XEVPRgorQSBCIEMgRCBzb2Z0ICAgQSBCIEQKK0EgQiBDIEQgbWl4ZWQgIEEgRCBECitBIEIgQyBEIGhhcmQgICBEIEQgRAorQSBCIEMgRCBtZXJnZSAgWFhYWFgKK0EgQiBDIEQga2VlcCAgIFhYWFhYCitBIEIgQyBDIHNvZnQgICBBIEIgQworQSBCIEMgQyBtaXhlZCAgQSBDIEMKK0EgQiBDIEMgaGFyZCAgIEMgQyBDCitBIEIgQyBDIG1lcmdlICBYWFhYWAorQSBCIEMgQyBrZWVwICAgQSBDIEMKK0IgQiBDIEQgc29mdCAgIEIgQiBECitCIEIgQyBEIG1peGVkICBCIEQgRAorQiBCIEMgRCBoYXJkICAgRCBEIEQKK0IgQiBDIEQgbWVyZ2UgIEQgRCBECitCIEIgQyBEIGtlZXAgICBYWFhYWAorQiBCIEMgQyBzb2Z0ICAgQiBCIEMKK0IgQiBDIEMgbWl4ZWQgIEIgQyBDCitCIEIgQyBDIGhhcmQgICBDIEMgQworQiBCIEMgQyBtZXJnZSAgQyBDIEMKK0IgQiBDIEMga2VlcCAgIEIgQyBDCitCIEMgQyBEIHNvZnQgICBCIEMgRAorQiBDIEMgRCBtaXhlZCAgQiBEIEQKK0IgQyBDIEQgaGFyZCAgIEQgRCBECitCIEMgQyBEIG1lcmdlICBYWFhYWAorQiBDIEMgRCBrZWVwICAgWFhYWFgKK0IgQyBDIEMgc29mdCAgIEIgQyBDCitCIEMgQyBDIG1peGVkICBCIEMgQworQiBDIEMgQyBoYXJkICAgQyBDIEMKK0IgQyBDIEMgbWVyZ2UgIEIgQyBDCitCIEMgQyBDIGtlZXAgICBCIEMgQworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgdXAgYnJhbmNoZXMgdG8gdGVzdCB3aXRoIHVubWVyZ2VkIGVudHJpZXMnICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIEMgJiYKKyAgICBnaXQgYnJhbmNoIGJyYW5jaDEgJiYKKyAgICBnaXQgYnJhbmNoIGJyYW5jaDIgJiYKKyAgICBnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorICAgIHRlc3RfY29tbWl0IEIxIGZpbGUxICYmCisgICAgZ2l0IGNoZWNrb3V0IGJyYW5jaDIgJiYKKyAgICB0ZXN0X2NvbW1pdCBCIGZpbGUxCisnCisKK3doaWxlIHJlYWQgVzEgSTEgSDEgVCBvcHQgVzIgSTIgSDIKK2RvCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2s6ICRXMSAkSTEgJEgxICRUIC0tJG9wdCAkVzIgJEkyICRIMiIgJworCWdpdCByZXNldCAtLWhhcmQgQiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2gxICYmCisJY2F0IGZpbGUxID5YX2ZpbGUxICYmCisJaWYgdGVzdCAiJFcyIiAhPSAiWFhYWFgiCisJdGhlbgorCSAgICBnaXQgcmVzZXQgLS0kb3B0ICRUICYmCisJICAgIGlmIHRlc3QgIiRXMiIgPSAiWCIKKwkgICAgdGhlbgorCQl0ZXN0X2NtcCBmaWxlMSBYX2ZpbGUxCisJICAgIGVsc2UKKwkJdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkVzIiCisJICAgIGZpICYmCisJICAgIGdpdCBjaGVja291dC1pbmRleCAtZiAtLSBmaWxlMSAmJgorCSAgICB0ZXN0ICIkKGNhdCBmaWxlMSkiID0gIiRJMiIgJiYKKwkgICAgZ2l0IGNoZWNrb3V0IC1mIEhFQUQgLS0gZmlsZTEgJiYKKwkgICAgdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkSDIiCisJZWxzZQorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS0kb3B0ICRUCisJZmkKKyAgICAnCitkb25lIDw8XEVPRgorWCBVIEIgQyBzb2Z0ICAgWFhYWFgKK1ggVSBCIEMgbWl4ZWQgIFggQyBDCitYIFUgQiBDIGhhcmQgICBDIEMgQworWCBVIEIgQyBtZXJnZSAgQyBDIEMKK1ggVSBCIEMga2VlcCAgIFhYWFhYCitYIFUgQiBCIHNvZnQgICBYWFhYWAorWCBVIEIgQiBtaXhlZCAgWCBCIEIKK1ggVSBCIEIgaGFyZCAgIEIgQiBCCitYIFUgQiBCIG1lcmdlICBCIEIgQgorWCBVIEIgQiBrZWVwICAgWFhYWFgKK0VPRgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcxMTItcmVzZXQtc3VibW9kdWxlLnNoIGIvdC90NzExMi1yZXNldC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjczNDY0MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMTItcmVzZXQtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsMjEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXNldCBjYW4gaGFuZGxlIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItc3VibW9kdWxlLXVwZGF0ZS5zaAorCitLTk9XTl9GQUlMVVJFX0RJUkVDVE9SWV9TVUJNT0RVTEVfQ09ORkxJQ1RTPTEKK0tOT1dOX0ZBSUxVUkVfU1VCTU9EVUxFX09WRVJXUklURV9JR05PUkVEX1VOVFJBQ0tFRD0xCisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaF9yZWN1cnNpbmdfd2l0aF9hcmdzICJyZXNldCAtLWtlZXAiCisKK3Rlc3Rfc3VibW9kdWxlX2ZvcmNlZF9zd2l0Y2hfcmVjdXJzaW5nX3dpdGhfYXJncyAicmVzZXQgLS1oYXJkIgorCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdCByZXNldCAtLWtlZXAiCisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0IHJlc2V0IC0tbWVyZ2UiCisKK3Rlc3Rfc3VibW9kdWxlX2ZvcmNlZF9zd2l0Y2ggImdpdCByZXNldCAtLWhhcmQiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzExMy1wb3N0LWluZGV4LWNoYW5nZS1ob29rLnNoIGIvdC90NzExMy1wb3N0LWluZGV4LWNoYW5nZS1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwMTFhZDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MTEzLXBvc3QtaW5kZXgtY2hhbmdlLWhvb2suc2gKQEAgLTAsMCArMSwxNDQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwb3N0IGluZGV4IGNoYW5nZSBob29rJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciAtcCBkaXIxICYmCisJdG91Y2ggZGlyMS9maWxlMS50eHQgJiYKKwllY2hvIHRlc3RpbmcgPmRpcjEvZmlsZTIudHh0ICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzdGF0dXMsIGFkZCwgY29tbWl0LCBvdGhlcnMgdHJpZ2dlciBob29rIHdpdGhvdXQgZmxhZ3Mgc2V0JyAnCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3Bvc3QtaW5kZXgtY2hhbmdlIDw8LVxFT0YgJiYKKwkJaWYgdGVzdCAiJDEiIC1lcSAxOyB0aGVuCisJCQllY2hvICJJbnZhbGlkIGNvbWJpbmF0aW9uIG9mIGZsYWdzIHBhc3NlZCB0byBob29rOyB1cGRhdGVkX3dvcmtkaXIgaXMgc2V0LiIgPnRlc3RmYWlsdXJlCisJCQlleGl0IDEKKwkJZmkKKwkJaWYgdGVzdCAiJDIiIC1lcSAxOyB0aGVuCisJCQllY2hvICJJbnZhbGlkIGNvbWJpbmF0aW9uIG9mIGZsYWdzIHBhc3NlZCB0byBob29rOyB1cGRhdGVkX3NraXB3b3JrdHJlZSBpcyBzZXQuIiA+dGVzdGZhaWx1cmUKKwkJCWV4aXQgMQorCQlmaQorCQlpZiB0ZXN0IC1mICIuZ2l0L2luZGV4LmxvY2siOyB0aGVuCisJCQllY2hvICIuZ2l0L2luZGV4LmxvY2sgZXhpc3RzIiA+dGVzdGZhaWx1cmUKKwkJCWV4aXQgMworCQlmaQorCQlpZiAhIHRlc3QgLWYgIi5naXQvaW5kZXgiOyB0aGVuCisJCQllY2hvICIuZ2l0L2luZGV4IGRvZXMgbm90IGV4aXN0IiA+dGVzdGZhaWx1cmUKKwkJCWV4aXQgMworCQlmaQorCQllY2hvICJzdWNjZXNzIiA+dGVzdHN1Y2Nlc3MKKwlFT0YKKwlta2RpciAtcCBkaXIyICYmCisJdG91Y2ggZGlyMi9maWxlMS50eHQgJiYKKwl0b3VjaCBkaXIyL2ZpbGUyLnR4dCAmJgorCTogZm9yY2UgaW5kZXggdG8gYmUgZGlydHkgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSArNjAgZGlyMS9maWxlMS50eHQgJiYKKwlnaXQgc3RhdHVzICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdGVzdHN1Y2Nlc3MgJiYgcm0gLWYgdGVzdHN1Y2Nlc3MgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXN0ZmFpbHVyZSAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRlc3RzdWNjZXNzICYmIHJtIC1mIHRlc3RzdWNjZXNzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGVzdGZhaWx1cmUgJiYKKwlnaXQgY29tbWl0IC1tICJzZWNvbmQiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdGVzdHN1Y2Nlc3MgJiYgcm0gLWYgdGVzdHN1Y2Nlc3MgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXN0ZmFpbHVyZSAmJgorCWdpdCBjaGVja291dCAtLSBkaXIxL2ZpbGUxLnR4dCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRlc3RzdWNjZXNzICYmIHJtIC1mIHRlc3RzdWNjZXNzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGVzdGZhaWx1cmUgJiYKKwlnaXQgdXBkYXRlLWluZGV4ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGVzdHN1Y2Nlc3MgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXN0ZmFpbHVyZSAmJgorCWdpdCByZXNldCAtLXNvZnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXN0c3VjY2VzcyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRlc3RmYWlsdXJlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY2hlY2tvdXQgYW5kIHJlc2V0IHRyaWdnZXIgdGhlIGhvb2snICcKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9wb3N0LWluZGV4LWNoYW5nZSA8PC1cRU9GICYmCisJCWlmIHRlc3QgIiQxIiAtZXEgMSAmJiB0ZXN0ICIkMiIgLWVxIDE7IHRoZW4KKwkJCWVjaG8gIkludmFsaWQgY29tYmluYXRpb24gb2YgZmxhZ3MgcGFzc2VkIHRvIGhvb2s7IHVwZGF0ZWRfd29ya2RpciBhbmQgdXBkYXRlZF9za2lwd29ya3RyZWUgYXJlIGJvdGggc2V0LiIgPnRlc3RmYWlsdXJlCisJCQlleGl0IDEKKwkJZmkKKwkJaWYgdGVzdCAiJDEiIC1lcSAwICYmIHRlc3QgIiQyIiAtZXEgMDsgdGhlbgorCQkJZWNobyAiSW52YWxpZCBjb21iaW5hdGlvbiBvZiBmbGFncyBwYXNzZWQgdG8gaG9vazsgbmVpdGhlciB1cGRhdGVkX3dvcmtkaXIgb3IgdXBkYXRlZF9za2lwd29ya3RyZWUgYXJlIHNldC4iID50ZXN0ZmFpbHVyZQorCQkJZXhpdCAyCisJCWZpCisJCWlmIHRlc3QgIiQxIiAtZXEgMTsgdGhlbgorCQkJaWYgdGVzdCAtZiAiLmdpdC9pbmRleC5sb2NrIjsgdGhlbgorCQkJCWVjaG8gInVwZGF0ZWRfd29ya2RpciBzZXQgYnV0IC5naXQvaW5kZXgubG9jayBleGlzdHMiID50ZXN0ZmFpbHVyZQorCQkJCWV4aXQgMworCQkJZmkKKwkJCWlmICEgdGVzdCAtZiAiLmdpdC9pbmRleCI7IHRoZW4KKwkJCQllY2hvICJ1cGRhdGVkX3dvcmtkaXIgc2V0IGJ1dCAuZ2l0L2luZGV4IGRvZXMgbm90IGV4aXN0IiA+dGVzdGZhaWx1cmUKKwkJCQlleGl0IDMKKwkJCWZpCisJCWVsc2UKKwkJCWVjaG8gInVwZGF0ZV93b3JrZGlyIHNob3VsZCBiZSBzZXQgZm9yIGNoZWNrb3V0IiA+dGVzdGZhaWx1cmUKKwkJCWV4aXQgNAorCQlmaQorCQllY2hvICJzdWNjZXNzIiA+dGVzdHN1Y2Nlc3MKKwlFT0YKKwk6IGZvcmNlIGluZGV4IHRvIGJlIGRpcnR5ICYmCisJdGVzdC10b29sIGNobXRpbWUgKzYwIGRpcjEvZmlsZTEudHh0ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRlc3RzdWNjZXNzICYmIHJtIC1mIHRlc3RzdWNjZXNzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGVzdGZhaWx1cmUgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSArNjAgZGlyMS9maWxlMS50eHQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRlc3RzdWNjZXNzICYmIHJtIC1mIHRlc3RzdWNjZXNzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGVzdGZhaWx1cmUgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSArNjAgZGlyMS9maWxlMS50eHQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdGVzdHN1Y2Nlc3MgJiYgcm0gLWYgdGVzdHN1Y2Nlc3MgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXN0ZmFpbHVyZSAmJgorCWdpdCBjaGVja291dCAtQiB0ZXN0ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdGVzdHN1Y2Nlc3MgJiYgcm0gLWYgdGVzdHN1Y2Nlc3MgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXN0ZmFpbHVyZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJlc2V0IC0tbWl4ZWQgYW5kIHVwZGF0ZS1pbmRleCB0cmlnZ2VycyB0aGUgaG9vaycgJworCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3Bvc3QtaW5kZXgtY2hhbmdlIDw8LVxFT0YgJiYKKwkJaWYgdGVzdCAiJDEiIC1lcSAxICYmIHRlc3QgIiQyIiAtZXEgMTsgdGhlbgorCQkJZWNobyAiSW52YWxpZCBjb21iaW5hdGlvbiBvZiBmbGFncyBwYXNzZWQgdG8gaG9vazsgdXBkYXRlZF93b3JrZGlyIGFuZCB1cGRhdGVkX3NraXB3b3JrdHJlZSBhcmUgYm90aCBzZXQuIiA+dGVzdGZhaWx1cmUKKwkJCWV4aXQgMQorCQlmaQorCQlpZiB0ZXN0ICIkMSIgLWVxIDAgJiYgdGVzdCAiJDIiIC1lcSAwOyB0aGVuCisJCQllY2hvICJJbnZhbGlkIGNvbWJpbmF0aW9uIG9mIGZsYWdzIHBhc3NlZCB0byBob29rOyBuZWl0aGVyIHVwZGF0ZWRfd29ya2RpciBvciB1cGRhdGVkX3NraXB3b3JrdHJlZSBhcmUgc2V0LiIgPnRlc3RmYWlsdXJlCisJCQlleGl0IDIKKwkJZmkKKwkJaWYgdGVzdCAiJDIiIC1lcSAxOyB0aGVuCisJCQlpZiB0ZXN0IC1mICIuZ2l0L2luZGV4LmxvY2siOyB0aGVuCisJCQkJZWNobyAidXBkYXRlZF9za2lwd29ya3RyZWUgc2V0IGJ1dCAuZ2l0L2luZGV4LmxvY2sgZXhpc3RzIiA+dGVzdGZhaWx1cmUKKwkJCQlleGl0IDMKKwkJCWZpCisJCQlpZiAhIHRlc3QgLWYgIi5naXQvaW5kZXgiOyB0aGVuCisJCQkJZWNobyAidXBkYXRlZF9za2lwd29ya3RyZWUgc2V0IGJ1dCAuZ2l0L2luZGV4IGRvZXMgbm90IGV4aXN0IiA+dGVzdGZhaWx1cmUKKwkJCQlleGl0IDMKKwkJCWZpCisJCWVsc2UKKwkJCWVjaG8gInVwZGF0ZWRfc2tpcHdvcmt0cmVlIHNob3VsZCBiZSBzZXQgZm9yIHJlc2V0IC0tbWl4ZWQgYW5kIHVwZGF0ZS1pbmRleCIgPnRlc3RmYWlsdXJlCisJCQlleGl0IDQKKwkJZmkKKwkJZWNobyAic3VjY2VzcyIgPnRlc3RzdWNjZXNzCisJRU9GCisJOiBmb3JjZSBpbmRleCB0byBiZSBkaXJ0eSAmJgorCXRlc3QtdG9vbCBjaG10aW1lICs2MCBkaXIxL2ZpbGUxLnR4dCAmJgorCWdpdCByZXNldCAtLW1peGVkIC0tcXVpZXQgSEVBRH4xICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdGVzdHN1Y2Nlc3MgJiYgcm0gLWYgdGVzdHN1Y2Nlc3MgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXN0ZmFpbHVyZSAmJgorCWdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluIDxkaXIxL2ZpbGUyLnR4dCA+ZXhwZWN0ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxMDA2NDQgIiQoY2F0IGV4cGVjdCkiIGRpcjEvZmlsZTEudHh0ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdGVzdHN1Y2Nlc3MgJiYgcm0gLWYgdGVzdHN1Y2Nlc3MgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXN0ZmFpbHVyZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIGRpcjEvZmlsZTIudHh0ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBkaXIxL2ZpbGUyLnR4dCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRlc3RzdWNjZXNzICYmIHJtIC1mIHRlc3RzdWNjZXNzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGVzdGZhaWx1cmUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MjAxLWNvLnNoIGIvdC90NzIwMS1jby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNjk2YmFlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzIwMS1jby5zaApAQCAtMCwwICsxLDY3NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2hlY2tvdXQgdGVzdHMuCisKK0NyZWF0ZXMgbWFzdGVyLCBmb3JrcyByZW5hbWVyIGFuZCBzaWRlIGJyYW5jaGVzIGZyb20gaXQuCitUZXN0IHN3aXRjaGluZyBhY3Jvc3MgdGhlbS4KKworICAhIFttYXN0ZXJdIEluaXRpYWwgQSBvbmUsIEEgdHdvCisgICAqIFtyZW5hbWVyXSBSZW5hbWVyIFIgb25lLT51bm8sIE0gdHdvCisgICAgISBbc2lkZV0gU2lkZSBNIG9uZSwgRCB0d28sIEEgdGhyZWUKKyAgICAgISBbc2ltcGxlXSBTaW1wbGUgRCBvbmUsIE0gdHdvCisgIC0tLS0KKyAgICAgKyBbc2ltcGxlXSBTaW1wbGUgRCBvbmUsIE0gdHdvCisgICAgKyAgW3NpZGVdIFNpZGUgTSBvbmUsIEQgdHdvLCBBIHRocmVlCisgICAqICAgW3JlbmFtZXJdIFJlbmFtZXIgUiBvbmUtPnVubywgTSB0d28KKyAgKyorKyBbbWFzdGVyXSBJbml0aWFsIEEgb25lLCBBIHR3bworCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3RpY2sKKworZmlsbCAoKSB7CisJZm9yIGkKKwlkbworCQllY2hvICIkaSIKKwlkb25lCit9CisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlmaWxsIHggeSB6ID4gc2FtZSAmJgorCWZpbGwgMSAyIDMgNCA1IDYgNyA4ID5vbmUgJiYKKwlmaWxsIGEgYiBjIGQgZSA+dHdvICYmCisJZ2l0IGFkZCBzYW1lIG9uZSB0d28gJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIEEgb25lLCBBIHR3byIgJiYKKworCWdpdCBjaGVja291dCAtYiByZW5hbWVyICYmCisJcm0gLWYgb25lICYmCisJZmlsbCAxIDMgNCA1IDYgNyA4ID51bm8gJiYKKwlnaXQgYWRkIHVubyAmJgorCWZpbGwgYSBiIGMgZCBlIGYgPnR3byAmJgorCWdpdCBjb21taXQgLWEgLW0gIlJlbmFtZXIgUiBvbmUtPnVubywgTSB0d28iICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBtYXN0ZXIgJiYKKwlmaWxsIDEgMiAzIDQgNSA2IDcgPm9uZSAmJgorCWZpbGwgQSBCIEMgRCBFID50aHJlZSAmJgorCXJtIC1mIHR3byAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgb25lIHR3byB0aHJlZSAmJgorCWdpdCBjb21taXQgLW0gIlNpZGUgTSBvbmUsIEQgdHdvLCBBIHRocmVlIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpbXBsZSBtYXN0ZXIgJiYKKwlybSAtZiBvbmUgJiYKKwlmaWxsIGEgYyBlID4gdHdvICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiU2ltcGxlIEQgb25lLCBNIHR3byIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2tvdXQgZnJvbSBub24tZXhpc3RpbmcgYnJhbmNoIiAnCisKKwlnaXQgY2hlY2tvdXQgLWIgZGVsZXRlLW1lIG1hc3RlciAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIC0tbm8tZGVyZWYgcmVmcy9oZWFkcy9kZWxldGUtbWUgJiYKKwl0ZXN0IHJlZnMvaGVhZHMvZGVsZXRlLW1lID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdCByZWZzL2hlYWRzL21hc3RlciA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrb3V0IHdpdGggZGlydHkgdHJlZSB3aXRob3V0IC1tIiAnCisKKwlmaWxsIDAgMSAyIDMgNCA1IDYgNyA4ID5vbmUgJiYKKwlpZiBnaXQgY2hlY2tvdXQgc2lkZQorCXRoZW4KKwkJZWNobyBOb3QgaGFwcHkKKwkJZmFsc2UKKwllbHNlCisJCWVjaG8gImhhcHB5IC0gZmFpbGVkIGNvcnJlY3RseSIKKwlmaQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrb3V0IHdpdGggdW5yZWxhdGVkIGRpcnR5IHRyZWUgd2l0aG91dCAtbSIgJworCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWZpbGwgMCAxIDIgMyA0IDUgNiA3IDggPnNhbWUgJiYKKwljcCBzYW1lIGtlcHQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSA+bWVzc2FnZXMgJiYKKwl0ZXN0X2NtcCBzYW1lIGtlcHQgJiYKKwlwcmludGYgIk1cdCVzXG4iIHNhbWUgPm1lc3NhZ2VzLmV4cGVjdCAmJgorCXRlc3RfY21wIG1lc3NhZ2VzLmV4cGVjdCBtZXNzYWdlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCAtbSB3aXRoIGRpcnR5IHRyZWUiICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgY2xlYW4gLWYgJiYKKworCWZpbGwgMCAxIDIgMyA0IDUgNiA3IDggPm9uZSAmJgorCWdpdCBjaGVja291dCAtbSBzaWRlID4gbWVzc2FnZXMgJiYKKworCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAicmVmcy9oZWFkcy9zaWRlIiAmJgorCisJcHJpbnRmICJNXHQlc1xuIiBvbmUgPmV4cGVjdC5tZXNzYWdlcyAmJgorCXRlc3RfY21wIGV4cGVjdC5tZXNzYWdlcyBtZXNzYWdlcyAmJgorCisJZmlsbCAiTQlvbmUiICJBCXRocmVlIiAiRAl0d28iID5leHBlY3QubWFzdGVyICYmCisJZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyBtYXN0ZXIgPmN1cnJlbnQubWFzdGVyICYmCisJdGVzdF9jbXAgZXhwZWN0Lm1hc3RlciBjdXJyZW50Lm1hc3RlciAmJgorCisJZmlsbCAiTQlvbmUiID5leHBlY3Quc2lkZSAmJgorCWdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgc2lkZSA+Y3VycmVudC5zaWRlICYmCisJdGVzdF9jbXAgZXhwZWN0LnNpZGUgY3VycmVudC5zaWRlICYmCisKKwlnaXQgZGlmZiAtLWNhY2hlZCA+Y3VycmVudC5pbmRleCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBjdXJyZW50LmluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrb3V0IC1tIHdpdGggZGlydHkgdHJlZSwgcmVuYW1lZCIgJworCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJiBnaXQgY2xlYW4gLWYgJiYKKworCWZpbGwgMSAyIDMgNCA1IDcgOCA+b25lICYmCisJaWYgZ2l0IGNoZWNrb3V0IHJlbmFtZXIKKwl0aGVuCisJCWVjaG8gTm90IGhhcHB5CisJCWZhbHNlCisJZWxzZQorCQllY2hvICJoYXBweSAtIGZhaWxlZCBjb3JyZWN0bHkiCisJZmkgJiYKKworCWdpdCBjaGVja291dCAtbSByZW5hbWVyICYmCisJZmlsbCAxIDMgNCA1IDcgOCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHVubyAmJgorCSEgdGVzdCAtZiBvbmUgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+Y3VycmVudCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLW0gd2l0aCBtZXJnZSBjb25mbGljdCcgJworCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJiBnaXQgY2xlYW4gLWYgJiYKKworCWZpbGwgMSBUIDMgNCA1IDYgUyA4ID5vbmUgJiYKKwlpZiBnaXQgY2hlY2tvdXQgcmVuYW1lcgorCXRoZW4KKwkJZWNobyBOb3QgaGFwcHkKKwkJZmFsc2UKKwllbHNlCisJCWVjaG8gImhhcHB5IC0gZmFpbGVkIGNvcnJlY3RseSIKKwlmaSAmJgorCisJZ2l0IGNoZWNrb3V0IC1tIHJlbmFtZXIgJiYKKworCWdpdCBkaWZmIG1hc3RlcjpvbmUgOjM6dW5vIHwKKwlzZWQgLWUgIjEsL15AQC9kIiAtZSAiL14gL2QiIC1lICJzL14tL2QvIiAtZSAicy9eKy9hLyIgPmN1cnJlbnQgJiYKKwlmaWxsIGQyIGFUIGQ3IGFTID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIHR3byA+Y3VycmVudCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdCBvZiBtZXJnZSBjb25mbGljdCBmcm9tIGNoZWNrb3V0IC1tJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmIGdpdCBjbGVhbiAtZiAmJgorCisJZmlsbCBiIGQgPiB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLW0gc2ltcGxlICYmCisKKwlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYKKwlmaWxsIHNhbWUgdHdvIHR3byB0d28gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50ICYmCisKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwk8PDw8PDw8IHNpbXBsZQorCWEKKwljCisJZQorCT09PT09PT0KKwliCisJZAorCT4+Pj4+Pj4gbG9jYWwKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tbWVyZ2UgLS1jb25mbGljdD1kaWZmMyA8YnJhbmNoPicgJworCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjbGVhbiAtZiAmJgorCisJZmlsbCBiIGQgPiB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLS1tZXJnZSAtLWNvbmZsaWN0PWRpZmYzIHNpbXBsZSAmJgorCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJPDw8PDw8PCBzaW1wbGUKKwlhCisJYworCWUKKwl8fHx8fHx8IG1hc3RlcgorCWEKKwliCisJYworCWQKKwllCisJPT09PT09PQorCWIKKwlkCisJPj4+Pj4+PiBsb2NhbAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIHRvIGFub3RoZXIgYnJhbmNoIHdoaWxlIGNhcnJ5aW5nIGEgZGVsZXRpb24nICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2xlYW4gLWYgJiYKKwlnaXQgcm0gdHdvICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgc2ltcGxlIDI+ZXJycyAmJgorCXRlc3RfaTE4bmdyZXAgb3ZlcndyaXR0ZW4gZXJycyAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAtLXF1aWV0IC1tIC11IEhFQUQgc2ltcGxlIDI+ZXJycyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHRvIGRldGFjaCBIRUFEICh3aXRoIGFkdmljZSBkZWNsaW5lZCknICcKKworCWdpdCBjb25maWcgYWR2aWNlLmRldGFjaGVkSGVhZCBmYWxzZSAmJgorCWdpdCBjaGVja291dCAtZiByZW5hbWVyICYmIGdpdCBjbGVhbiAtZiAmJgorCWdpdCBjaGVja291dCByZW5hbWVyXiAyPm1lc3NhZ2VzICYmCisJdGVzdF9pMThuZ3JlcCAiSEVBRCBpcyBub3cgYXQgNzMyOTM4OCIgbWVzc2FnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG1lc3NhZ2VzICYmCisJSD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlNPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCXRlc3QgInokSCIgPSAieiRNIiAmJgorCWlmIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+L2Rldi9udWxsIDI+JjEKKwl0aGVuCisJCWVjaG8gIk9PUFMsIEhFQUQgaXMgc3RpbGwgc3ltYm9saWM/Pz8iCisJCWZhbHNlCisJZWxzZQorCQk6IGhhcHB5CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdG8gZGV0YWNoIEhFQUQnICcKKwlnaXQgY29uZmlnIGFkdmljZS5kZXRhY2hlZEhlYWQgdHJ1ZSAmJgorCWdpdCBjaGVja291dCAtZiByZW5hbWVyICYmIGdpdCBjbGVhbiAtZiAmJgorCUdJVF9URVNUX0dFVFRFWFRfUE9JU09OPWZhbHNlIGdpdCBjaGVja291dCByZW5hbWVyXiAyPm1lc3NhZ2VzICYmCisJZ3JlcCAiSEVBRCBpcyBub3cgYXQgNzMyOTM4OCIgbWVzc2FnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgLWd0IDEgbWVzc2FnZXMgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCU09JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAieiRIIiA9ICJ6JE0iICYmCisJaWYgZ2l0IHN5bWJvbGljLXJlZiBIRUFEID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJZWNobyAiT09QUywgSEVBRCBpcyBzdGlsbCBzeW1ib2xpYz8/PyIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB0byBkZXRhY2ggSEVBRCB3aXRoIGJyYW5jaG5hbWVeJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmIGdpdCBjbGVhbiAtZiAmJgorCWdpdCBjaGVja291dCByZW5hbWVyXiAmJgorCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJTT0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICJ6JEgiID0gInokTSIgJiYKKwlpZiBnaXQgc3ltYm9saWMtcmVmIEhFQUQgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQllY2hvICJPT1BTLCBIRUFEIGlzIHN0aWxsIHN5bWJvbGljPz8/IgorCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHRvIGRldGFjaCBIRUFEIHdpdGggOi9tZXNzYWdlJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmIGdpdCBjbGVhbiAtZiAmJgorCWdpdCBjaGVja291dCAiOi9Jbml0aWFsIiAmJgorCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJTT0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICJ6JEgiID0gInokTSIgJiYKKwlpZiBnaXQgc3ltYm9saWMtcmVmIEhFQUQgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQllY2hvICJPT1BTLCBIRUFEIGlzIHN0aWxsIHN5bWJvbGljPz8/IgorCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHRvIGRldGFjaCBIRUFEIHdpdGggSEVBRF4wJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmIGdpdCBjbGVhbiAtZiAmJgorCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCU09JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAieiRIIiA9ICJ6JE0iICYmCisJaWYgZ2l0IHN5bWJvbGljLXJlZiBIRUFEID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJZWNobyAiT09QUywgSEVBRCBpcyBzdGlsbCBzeW1ib2xpYz8/PyIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGFtYmlndW91cyB0YWcvYnJhbmNoIG5hbWVzJyAnCisKKwlnaXQgdGFnIGJvdGggc2lkZSAmJgorCWdpdCBicmFuY2ggYm90aCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJZ2l0IGNoZWNrb3V0IGJvdGggJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCU09JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAieiRIIiA9ICJ6JE0iICYmCisJbmFtZT0kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPi9kZXYvbnVsbCkgJiYKKwl0ZXN0ICJ6JG5hbWUiID0genJlZnMvaGVhZHMvYm90aAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggYW1iaWd1b3VzIHRhZy9icmFuY2ggbmFtZXMnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlnaXQgdGFnIGZyb3R6IHNpZGUgJiYKKwlnaXQgYnJhbmNoIGZyb3R6IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlnaXQgY2hlY2tvdXQgdGFncy9mcm90eiAmJgorCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJUz0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL3NpZGUpICYmCisJdGVzdCAieiRIIiA9ICJ6JFMiICYmCisJaWYgbmFtZT0kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPi9kZXYvbnVsbCkKKwl0aGVuCisJCWVjaG8gIkJhZCAtLSBzaG91bGQgaGF2ZSBkZXRhY2hlZCIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCBicmFuY2hlcyB3aGlsZSBpbiBzdWJkaXJlY3RvcnknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlta2RpciBzdWJzICYmCisJKAorCQljZCBzdWJzICYmCisJCWdpdCBjaGVja291dCBzaWRlCisJKSAmJgorCSEgdGVzdCAtZiBzdWJzL29uZSAmJgorCXJtIC1mciBzdWJzCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgc3BlY2lmaWMgcGF0aCB3aGlsZSBpbiBzdWJkaXJlY3RvcnknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCW1rZGlyIHN1YnMgJiYKKwk+c3Vicy9iZXJvICYmCisJZ2l0IGFkZCBzdWJzL2Jlcm8gJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgc3Vicy9iZXJvIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCW1rZGlyIC1wIHN1YnMgJiYKKwkoCisJCWNkIHN1YnMgJiYKKwkJZ2l0IGNoZWNrb3V0IHNpZGUgLS0gYmVybworCSkgJiYKKwl0ZXN0IC1mIHN1YnMvYmVybworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja291dCB3Ly0tdHJhY2sgc2V0cyB1cCB0cmFja2luZycgJworICAgIGdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIGZhbHNlICYmCisgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorICAgIGdpdCBjaGVja291dCAtLXRyYWNrIC1iIHRyYWNrMSAmJgorICAgIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gudHJhY2sxLnJlbW90ZSkiICYmCisgICAgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC50cmFjazEubWVyZ2UpIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrb3V0IHcvYXV0b3NldHVwbWVyZ2U9YWx3YXlzIHNldHMgdXAgdHJhY2tpbmcnICcKKyAgICB0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgZmFsc2UgJiYKKyAgICBnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBhbHdheXMgJiYKKyAgICBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRyYWNrMiAmJgorICAgIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gudHJhY2syLnJlbW90ZSkiICYmCisgICAgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC50cmFjazIubWVyZ2UpIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdy8tLXRyYWNrIGZyb20gbm9uLWJyYW5jaCBIRUFEIGZhaWxzJyAnCisgICAgZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFEICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgLWIgdHJhY2sgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRyYWNrICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFEICYmCisgICAgdGVzdCAieiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXJeMCkiID0gInokKGdpdCByZXYtcGFyc2UgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHcvLS10cmFjayBmcm9tIHRhZyBmYWlscycgJworICAgIGdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLXRyYWNrIC1iIHRyYWNrIGZyb3R6ICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0cmFjayAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAmJgorICAgIHRlc3QgInokKGdpdCByZXYtcGFyc2UgbWFzdGVyXjApIiA9ICJ6JChnaXQgcmV2LXBhcnNlIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRhY2ggYSBzeW1ib2xpYyBsaW5rIEhFQUQnICcKKyAgICBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisgICAgZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5wcmVmZXJzeW1saW5rcmVmcyB5ZXMgJiYKKyAgICBnaXQgY2hlY2tvdXQgc2lkZSAmJgorICAgIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKyAgICBpdD0kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgJiYKKyAgICB0ZXN0ICJ6JGl0IiA9IHpyZWZzL2hlYWRzL21hc3RlciAmJgorICAgIGhlcmU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorICAgIGdpdCBjaGVja291dCBzaWRlXiAmJgorICAgIHRlc3QgInokKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpIiA9ICJ6JGhlcmUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja291dCB3aXRoIC0tdHJhY2sgZmFrZXMgYSBzZW5zaWJsZSAtYiA8bmFtZT4nICcKKyAgICBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4uZmV0Y2ggIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiAmJgorICAgIGdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4va29hbGEvYmVhciByZW5hbWVyICYmCisKKyAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4va29hbGEvYmVhciAmJgorICAgIHRlc3QgInJlZnMvaGVhZHMva29hbGEvYmVhciIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlbmFtZXIpIiAmJgorCisgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJiBnaXQgYnJhbmNoIC1EIGtvYWxhL2JlYXIgJiYKKworICAgIGdpdCBjaGVja291dCAtLXRyYWNrIHJlZnMvcmVtb3Rlcy9vcmlnaW4va29hbGEvYmVhciAmJgorICAgIHRlc3QgInJlZnMvaGVhZHMva29hbGEvYmVhciIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlbmFtZXIpIiAmJgorCisgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJiBnaXQgYnJhbmNoIC1EIGtvYWxhL2JlYXIgJiYKKworICAgIGdpdCBjaGVja291dCAtLXRyYWNrIHJlbW90ZXMvb3JpZ2luL2tvYWxhL2JlYXIgJiYKKyAgICB0ZXN0ICJyZWZzL2hlYWRzL2tvYWxhL2JlYXIiID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSByZW5hbWVyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrb3V0IHdpdGggLS10cmFjaywgYnV0IHdpdGhvdXQgLWIsIGZhaWxzIHdpdGggdG9vIHNob3J0IHRyYWNrZWQgbmFtZScgJworICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLXRyYWNrIHJlbmFtZXInCisKK3NldHVwX2NvbmZsaWN0aW5nX2luZGV4ICgpIHsKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJTz0kKGVjaG8gb3JpZ2luYWwgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlBPSQoZWNobyBvdXJzaWRlIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJQj0kKGVjaG8gdGhlaXJzaWRlIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJKAorCQllY2hvICIxMDA2NDQgJEEgMAlmaWxkIiAmJgorCQllY2hvICIxMDA2NDQgJE8gMQlmaWxlIiAmJgorCQllY2hvICIxMDA2NDQgJEEgMglmaWxlIiAmJgorCQllY2hvICIxMDA2NDQgJEIgMwlmaWxlIiAmJgorCQllY2hvICIxMDA2NDQgJEEgMAlmaWxmIgorCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBhbiB1bm1lcmdlZCBwYXRoIHNob3VsZCBmYWlsJyAnCisJc2V0dXBfY29uZmxpY3RpbmdfaW5kZXggJiYKKwllY2hvICJub25lIG9mIHRoZSBhYm92ZSIgPnNhbXBsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGQgJiYKKwljYXQgc2FtcGxlID5maWxlICYmCisJY2F0IHNhbXBsZSA+ZmlsZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBmaWxkIGZpbGUgZmlsZiAmJgorCXRlc3RfY21wIHNhbXBsZSBmaWxkICYmCisJdGVzdF9jbXAgc2FtcGxlIGZpbGYgJiYKKwl0ZXN0X2NtcCBzYW1wbGUgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGFuIHVubWVyZ2VkIHBhdGggY2FuIGJlIGlnbm9yZWQnICcKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLWYgZmlsZCBmaWxlIGZpbGYgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxmICYmCisJdGVzdF9jbXAgc2FtcGxlIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdW5tZXJnZWQgc3RhZ2UnICcKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLS1vdXJzIC4gJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxmICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwlnaXQgY2hlY2tvdXQgLS10aGVpcnMgZmlsZSAmJgorCXRlc3QgenRoZWlyc2lkZSA9ICJ6JChjYXQgZmlsZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggLS1tZXJnZScgJworCXNldHVwX2NvbmZsaWN0aW5nX2luZGV4ICYmCisJZWNobyAibm9uZSBvZiB0aGUgYWJvdmUiID5zYW1wbGUgJiYKKwllY2hvIG91cnNpZGUgPmV4cGVjdCAmJgorCWNhdCBzYW1wbGUgPmZpbGQgJiYKKwljYXQgc2FtcGxlID5maWxlICYmCisJY2F0IHNhbXBsZSA+ZmlsZiAmJgorCWdpdCBjaGVja291dCAtbSAtLSBmaWxkIGZpbGUgZmlsZiAmJgorCSgKKwkJZWNobyAiPDw8PDw8PCBvdXJzIiAmJgorCQllY2hvIG91cnNpZGUgJiYKKwkJZWNobyAiPT09PT09PSIgJiYKKwkJZWNobyB0aGVpcnNpZGUgJiYKKwkJZWNobyAiPj4+Pj4+PiB0aGVpcnMiCisJKSA+bWVyZ2VkICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZiAmJgorCXRlc3RfY21wIG1lcmdlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggLS1tZXJnZSwgaW4gZGlmZjMgLW0gc3R5bGUnICcKKwlnaXQgY29uZmlnIG1lcmdlLmNvbmZsaWN0c3R5bGUgZGlmZjMgJiYKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLW0gLS0gZmlsZCBmaWxlIGZpbGYgJiYKKwkoCisJCWVjaG8gIjw8PDw8PDwgb3VycyIgJiYKKwkJZWNobyBvdXJzaWRlICYmCisJCWVjaG8gInx8fHx8fHwgYmFzZSIgJiYKKwkJZWNobyBvcmlnaW5hbCAmJgorCQllY2hvICI9PT09PT09IiAmJgorCQllY2hvIHRoZWlyc2lkZSAmJgorCQllY2hvICI+Pj4+Pj4+IHRoZWlycyIKKwkpID5tZXJnZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxmICYmCisJdGVzdF9jbXAgbWVyZ2VkIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1jb25mbGljdD1tZXJnZSwgb3ZlcnJpZGluZyBjb25maWcnICcKKwlnaXQgY29uZmlnIG1lcmdlLmNvbmZsaWN0c3R5bGUgZGlmZjMgJiYKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLS1jb25mbGljdD1tZXJnZSAtLSBmaWxkIGZpbGUgZmlsZiAmJgorCSgKKwkJZWNobyAiPDw8PDw8PCBvdXJzIiAmJgorCQllY2hvIG91cnNpZGUgJiYKKwkJZWNobyAiPT09PT09PSIgJiYKKwkJZWNobyB0aGVpcnNpZGUgJiYKKwkJZWNobyAiPj4+Pj4+PiB0aGVpcnMiCisJKSA+bWVyZ2VkICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZiAmJgorCXRlc3RfY21wIG1lcmdlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tY29uZmxpY3Q9ZGlmZjMnICcKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLmNvbmZsaWN0c3R5bGUgJiYKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLS1jb25mbGljdD1kaWZmMyAtLSBmaWxkIGZpbGUgZmlsZiAmJgorCSgKKwkJZWNobyAiPDw8PDw8PCBvdXJzIiAmJgorCQllY2hvIG91cnNpZGUgJiYKKwkJZWNobyAifHx8fHx8fCBiYXNlIiAmJgorCQllY2hvIG9yaWdpbmFsICYmCisJCWVjaG8gIj09PT09PT0iICYmCisJCWVjaG8gdGhlaXJzaWRlICYmCisJCWVjaG8gIj4+Pj4+Pj4gdGhlaXJzIgorCSkgPm1lcmdlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxkICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGYgJiYKKwl0ZXN0X2NtcCBtZXJnZWQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsaW5nIGNoZWNrb3V0IC1iIHNob3VsZCBub3QgYnJlYWsgd29ya2luZyB0cmVlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLWIgcmVuYW1lciBzaWRlXiAmJgorCXRlc3QgJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpID0gcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIC0tZXhpdC1jb2RlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIG91dCBvZiBub24tYnJhbmNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwllY2hvIG1vZGlmaWVkID5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgcmVuYW1lciAyPmVycm9yLmxvZyAmJgorCSEgZ3JlcCAiXlByZXZpb3VzIEhFQUQiIGVycm9yLmxvZworJworCisoCisgZWNobyAiIyEkU0hFTExfUEFUSCIKKyBjYXQgPDxcRU9GCitPPSQxIEE9JDIgQj0kMworY2F0ICIkQSIgPi50bXAKK2V4ZWMgPiIkQSIKK2VjaG8gJzw8PDw8PDwgZmlsZnJlLXRoZWlycycKK2NhdCAiJEIiCitlY2hvICd8fHx8fHx8IGZpbGZyZS1jb21tb24nCitjYXQgIiRPIgorZWNobyAnPT09PT09PScKK2NhdCAiLnRtcCIKK2VjaG8gJz4+Pj4+Pj4gZmlsZnJlLW91cnMnCitybSAtZiAudG1wCitleGl0IDEKK0VPRgorKSA+ZmlsZnJlLnNoCitjaG1vZCAreCBmaWxmcmUuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VzdG9tIG1lcmdlIGRyaXZlciB3aXRoIGNoZWNrb3V0IC1tJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZ2l0IGNvbmZpZyBtZXJnZS5maWxmcmUuZHJpdmVyICIuL2ZpbGZyZS5zaCAlTyAlQSAlQiIgJiYKKwlnaXQgY29uZmlnIG1lcmdlLmZpbGZyZS5uYW1lICJGZWVsLWZyZWUgbWVyZ2UgZHJpdmVyIiAmJgorCWdpdCBjb25maWcgbWVyZ2UuZmlsZnJlLnJlY3Vyc2l2ZSBiaW5hcnkgJiYKKwllY2hvICJhcm0gbWVyZ2U9ZmlsZnJlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCWdpdCBjaGVja291dCAtYiBsZWZ0ICYmCisJZWNobyBuZXV0cmFsID5hcm0gJiYKKwlnaXQgYWRkIGFybSAuZ2l0YXR0cmlidXRlcyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gbmV1dHJhbCAmJgorCWdpdCBicmFuY2ggcmlnaHQgJiYKKworCWVjaG8gbGVmdCA+YXJtICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBsZWZ0ICYmCisJZ2l0IGNoZWNrb3V0IHJpZ2h0ICYmCisKKwllY2hvIHJpZ2h0ID5hcm0gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHJpZ2h0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbGVmdCAmJgorCSgKKwkJZm9yIHQgaW4gZmlsZnJlLWNvbW1vbiBsZWZ0IHJpZ2h0CisJCWRvCisJCQlncmVwICR0IGFybSB8fCBleGl0IDEKKwkJZG9uZQorCSkgJiYKKworCW12IGFybSBleHBlY3QgJiYKKwlnaXQgY2hlY2tvdXQgLW0gYXJtICYmCisJdGVzdF9jbXAgZXhwZWN0IGFybQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDczMDAtY2xlYW4uc2ggYi90L3Q3MzAwLWNsZWFuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNiNWUzNGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MzAwLWNsZWFuLnNoCkBAIC0wLDAgKzEsNzQ5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IE1pY2hhZWwgU3BhbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNsZWFuIGJhc2ljIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKworZ2l0IGNvbmZpZyBjbGVhbi5yZXF1aXJlRm9yY2Ugbm8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCW1rZGlyIC1wIHNyYyAmJgorCXRvdWNoIHNyYy9wYXJ0MS5jIE1ha2VmaWxlICYmCisJZWNobyBidWlsZCA+LmdpdGlnbm9yZSAmJgorCWVjaG8gXCoubyA+Pi5naXRpZ25vcmUgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIHNldHVwICYmCisJdG91Y2ggc3JjL3BhcnQyLmMgUkVBRE1FICYmCisJZ2l0IGFkZCAuCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIHdpdGggc2tpcC13b3JrdHJlZSAuZ2l0aWdub3JlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgLmdpdGlnbm9yZSAmJgorCXJtIC5naXRpZ25vcmUgJiYKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCBjbGVhbiAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tc2tpcC13b3JrdHJlZSAuZ2l0aWdub3JlICYmCisJZ2l0IGNoZWNrb3V0IC5naXRpZ25vcmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCBjbGVhbiAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gc3JjLycgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gc3JjLyAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIHNyYy8gc3JjLycgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gc3JjLyBzcmMvICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gd2l0aCBwcmVmaXgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3Mgc3JjL3Rlc3QgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvIHNyYy90ZXN0LzEuYyAmJgorCShjZCBzcmMvICYmIGdpdCBjbGVhbikgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy90ZXN0LzEuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2dpdCBjbGVhbiB3aXRoIHJlbGF0aXZlIHByZWZpeCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwl3b3VsZF9jbGVhbj0kKAorCQljZCBkb2NzICYmCisJCWdpdCBjbGVhbiAtbiAuLi9zcmMgfAorCQlncmVwIHBhcnQzIHwKKwkJc2VkIC1uIC1lICJzfF5Xb3VsZCByZW1vdmUgfHxwIgorCSkgJiYKKwl2ZXJib3NlIHRlc3QgIiR3b3VsZF9jbGVhbiIgPSAuLi9zcmMvcGFydDMuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnZ2l0IGNsZWFuIHdpdGggYWJzb2x1dGUgcGF0aCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwl3b3VsZF9jbGVhbj0kKAorCQljZCBkb2NzICYmCisJCWdpdCBjbGVhbiAtbiAiJChwd2QpLy4uL3NyYyIgfAorCQlncmVwIHBhcnQzIHwKKwkJc2VkIC1uIC1lICJzfF5Xb3VsZCByZW1vdmUgfHxwIgorCSkgJiYKKwl2ZXJib3NlIHRlc3QgIiR3b3VsZF9jbGVhbiIgPSAuLi9zcmMvcGFydDMuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gd2l0aCBvdXQgb2Ygd29yayB0cmVlIHJlbGF0aXZlIHBhdGgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKAorCQljZCBkb2NzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjbGVhbiAtbiAuLi8uLgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIHdpdGggb3V0IG9mIHdvcmsgdHJlZSBhYnNvbHV0ZSBwYXRoJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWRkPSQoY2QgLi4gJiYgcHdkKSAmJgorCSgKKwkJY2QgZG9jcyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2xlYW4gLW4gJGRkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWQgd2l0aCBwcmVmaXggYW5kIHBhdGgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3Mgc3JjL2ZlYXR1cmUgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvZmVhdHVyZS9maWxlLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCShjZCBzcmMvICYmIGdpdCBjbGVhbiAtZCBmZWF0dXJlLykgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIHNyYy9mZWF0dXJlL2ZpbGUuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZ2l0IGNsZWFuIHN5bWJvbGljIGxpbmsnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJbG4gLXMgZG9jcy9tYW51YWwudHh0IHNyYy9wYXJ0NC5jICYmCisJZ2l0IGNsZWFuICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiB3aXRoIHdpbGRjYXJkJyAnCisKKwl0b3VjaCBhLmNsZWFuIGIuY2xlYW4gb3RoZXIuYyAmJgorCWdpdCBjbGVhbiAiKi5jbGVhbiIgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLmNsZWFuICYmCisJdGVzdCAhIC1mIGIuY2xlYW4gJiYKKwl0ZXN0IC1mIG90aGVyLmMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLW4nICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIC1uICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1kJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCBjbGVhbiAtZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1kIGRvY3MgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWQgc3JjLyBleGFtcGxlcy8nICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgZXhhbXBsZXMgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvIGV4YW1wbGVzLzEuYyAmJgorCWdpdCBjbGVhbiAtZCBzcmMvIGV4YW1wbGVzLyAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBleGFtcGxlcy8xLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAteCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gLXggJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWQgLXgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIC1kIC14ICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWQgZG9jcyAmJgorCXRlc3QgISAtZiBvYmoubyAmJgorCXRlc3QgISAtZCBidWlsZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtZCAteCB3aXRoIGlnbm9yZWQgdHJhY2tlZCBkaXJlY3RvcnknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIC1kIC14IC1lIHNyYyAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZCBkb2NzICYmCisJdGVzdCAhIC1mIG9iai5vICYmCisJdGVzdCAhIC1kIGJ1aWxkCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1YJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCBjbGVhbiAtWCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1kIC1YJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCBjbGVhbiAtZCAtWCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBvYmoubyAmJgorCXRlc3QgISAtZCBidWlsZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtZCAtWCB3aXRoIGlnbm9yZWQgdHJhY2tlZCBkaXJlY3RvcnknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIC1kIC1YIC1lIHNyYyAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIG9iai5vICYmCisJdGVzdCAhIC1kIGJ1aWxkCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUnICcKKworCWdpdCBjb25maWcgLS11bnNldCBjbGVhbi5yZXF1aXJlRm9yY2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xlYW4KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbi5yZXF1aXJlRm9yY2UnICcKKworCWdpdCBjb25maWcgY2xlYW4ucmVxdWlyZUZvcmNlIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xlYW4KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbi5yZXF1aXJlRm9yY2UgYW5kIC1uJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCBjbGVhbiAtbiAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuLnJlcXVpcmVGb3JjZSBhbmQgLWYnICcKKworCWdpdCBjbGVhbiAtZiAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdjb3JlLmV4Y2x1ZGVzZmlsZScgJworCisJZWNobyBleGNsdWRlcyA+ZXhjbHVkZXMgJiYKKwllY2hvIGluY2x1ZGVkID5pbmNsdWRlZCAmJgorCWdpdCBjb25maWcgY29yZS5leGNsdWRlc2ZpbGUgZXhjbHVkZXMgJiYKKwlvdXRwdXQ9JChnaXQgY2xlYW4gLW4gZXhjbHVkZXMgaW5jbHVkZWQgMj4mMSkgJiYKKwlleHByICIkb3V0cHV0IiA6ICIuKmluY2x1ZGVkIiA+L2Rldi9udWxsICYmCisJISBleHByICIkb3V0cHV0IiA6ICIuKmV4Y2x1ZGVzIiA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTQU5JVFkgJ3JlbW92YWwgZmFpbHVyZScgJworCisJbWtkaXIgZm9vICYmCisJdG91Y2ggZm9vL2JhciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2htb2QgNzU1IGZvbyIgJiYKKwkoZXhlYyA8Zm9vL2JhciAmJgorCSBjaG1vZCAwIGZvbyAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgY2xlYW4gLWYgLWQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lc3RlZCBnaXQgd29yayB0cmVlJyAnCisJcm0gLWZyIGZvbyBiYXIgYmF6ICYmCisJbWtkaXIgLXAgZm9vIGJhciBiYXovYm9vICYmCisJKAorCQljZCBmb28gJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdF9jb21taXQgbmVzdGVkIGhlbGxvLndvcmxkCisJKSAmJgorCSgKKwkJY2QgYmFyICYmCisJCT5nb29kYnllLnBlb3BsZQorCSkgJiYKKwkoCisJCWNkIGJhei9ib28gJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdF9jb21taXQgZGVlcGx5Lm5lc3RlZCBkZWVwZXIud29ybGQKKwkpICYmCisJZ2l0IGNsZWFuIC1mIC1kICYmCisJdGVzdCAtZiBmb28vLmdpdC9pbmRleCAmJgorCXRlc3QgLWYgZm9vL2hlbGxvLndvcmxkICYmCisJdGVzdCAtZiBiYXovYm9vLy5naXQvaW5kZXggJiYKKwl0ZXN0IC1mIGJhei9ib28vZGVlcGVyLndvcmxkICYmCisJISB0ZXN0IC1kIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG91bGQgY2xlYW4gdGhpbmdzIHRoYXQgYWxtb3N0IGxvb2sgbGlrZSBnaXQgYnV0IGFyZSBub3QnICcKKwlybSAtZnIgYWxtb3N0X2dpdCBhbG1vc3RfYmFyZV9naXQgYWxtb3N0X3N1Ym1vZHVsZSAmJgorCW1rZGlyIC1wIGFsbW9zdF9naXQvLmdpdC9vYmplY3RzICYmCisJbWtkaXIgLXAgYWxtb3N0X2dpdC8uZ2l0L3JlZnMgJiYKKwljYXQgPmFsbW9zdF9naXQvLmdpdC9IRUFEIDw8LVxFT0YgJiYKKwlnYXJiYWdlCisJRU9GCisJY3AgLXIgYWxtb3N0X2dpdC8uZ2l0LyBhbG1vc3RfYmFyZV9naXQgJiYKKwlta2RpciBhbG1vc3Rfc3VibW9kdWxlLyAmJgorCWNhdCA+YWxtb3N0X3N1Ym1vZHVsZS8uZ2l0IDw8LVxFT0YgJiYKKwlnYXJiYWdlCisJRU9GCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgYWxtb3N0XyoiICYmCisJZ2l0IGNsZWFuIC1mIC1kICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYWxtb3N0X2dpdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFsbW9zdF9iYXJlX2dpdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFsbW9zdF9zdWJtb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdWxkIG5vdCBjbGVhbiBzdWJtb2R1bGVzJyAnCisJcm0gLWZyIHJlcG8gdG9fY2xlYW4gc3ViMSBzdWIyICYmCisJbWtkaXIgcmVwbyB0b19jbGVhbiAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X2NvbW1pdCBtc2cgaGVsbG8ud29ybGQKKwkpICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi9yZXBvLy5naXQgc3ViMSAmJgorCWdpdCBjb21taXQgLW0gInN1YjEiICYmCisJZ2l0IGJyYW5jaCBiZWZvcmVfc3ViMiAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIC4vcmVwby8uZ2l0IHN1YjIgJiYKKwlnaXQgY29tbWl0IC1tICJzdWIyIiAmJgorCWdpdCBjaGVja291dCBiZWZvcmVfc3ViMiAmJgorCT50b19jbGVhbi9zaG91bGRfY2xlYW4udGhpcyAmJgorCWdpdCBjbGVhbiAtZiAtZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHJlcG8vLmdpdC9pbmRleCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHJlcG8vaGVsbG8ud29ybGQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWIxLy5naXQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWIxL2hlbGxvLndvcmxkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3ViMi8uZ2l0ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3ViMi9oZWxsby53b3JsZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRvX2NsZWFuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnc2hvdWxkIGF2b2lkIGNsZWFuaW5nIHBvc3NpYmxlIHN1Ym1vZHVsZXMnICcKKwlybSAtZnIgdG9fY2xlYW4gcG9zc2libGVfc3ViMSAmJgorCW1rZGlyIHRvX2NsZWFuIHBvc3NpYmxlX3N1YjEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBwb3NzaWJsZV9zdWIqIiAmJgorCWVjaG8gImdpdGRpcjogZm9vIiA+cG9zc2libGVfc3ViMS8uZ2l0ICYmCisJPnBvc3NpYmxlX3N1YjEvaGVsbG8ud29ybGQgJiYKKwljaG1vZCAwIHBvc3NpYmxlX3N1YjEvLmdpdCAmJgorCT50b19jbGVhbi9zaG91bGRfY2xlYW4udGhpcyAmJgorCWdpdCBjbGVhbiAtZiAtZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHBvc3NpYmxlX3N1YjEvLmdpdCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHBvc3NpYmxlX3N1YjEvaGVsbG8ud29ybGQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0b19jbGVhbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXN0ZWQgKGVtcHR5KSBnaXQgc2hvdWxkIGJlIGtlcHQnICcKKwlybSAtZnIgZW1wdHlfcmVwbyB0b19jbGVhbiAmJgorCWdpdCBpbml0IGVtcHR5X3JlcG8gJiYKKwlta2RpciB0b19jbGVhbiAmJgorCT50b19jbGVhbi9zaG91bGRfY2xlYW4udGhpcyAmJgorCWdpdCBjbGVhbiAtZiAtZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGVtcHR5X3JlcG8vLmdpdC9IRUFEICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdG9fY2xlYW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVzdGVkIGJhcmUgcmVwb3NpdG9yaWVzIHNob3VsZCBiZSBjbGVhbmVkJyAnCisJcm0gLWZyIGJhcmUxIGJhcmUyIHN1YmRpciAmJgorCWdpdCBpbml0IC0tYmFyZSBiYXJlMSAmJgorCWdpdCBjbG9uZSAtLWxvY2FsIC0tYmFyZSAuIGJhcmUyICYmCisJbWtkaXIgc3ViZGlyICYmCisJY3AgLXIgYmFyZTIgc3ViZGlyL2JhcmUzICYmCisJZ2l0IGNsZWFuIC1mIC1kICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYmFyZTEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiYXJlMiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1YmRpcgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICduZXN0ZWQgKGVtcHR5KSBiYXJlIHJlcG9zaXRvcmllcyBzaG91bGQgYmUgY2xlYW5lZCBldmVuIHdoZW4gaW4gLmdpdCcgJworCXJtIC1mciBzdHJhbmdlX2JhcmUgJiYKKwlta2RpciBzdHJhbmdlX2JhcmUgJiYKKwlnaXQgaW5pdCAtLWJhcmUgc3RyYW5nZV9iYXJlLy5naXQgJiYKKwlnaXQgY2xlYW4gLWYgLWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdHJhbmdlX2JhcmUKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbmVzdGVkIChub24tZW1wdHkpIGJhcmUgcmVwb3NpdG9yaWVzIHNob3VsZCBiZSBjbGVhbmVkIGV2ZW4gd2hlbiBpbiAuZ2l0JyAnCisJcm0gLWZyIHN0cmFuZ2VfYmFyZSAmJgorCW1rZGlyIHN0cmFuZ2VfYmFyZSAmJgorCWdpdCBjbG9uZSAtLWxvY2FsIC0tYmFyZSAuIHN0cmFuZ2VfYmFyZS8uZ2l0ICYmCisJZ2l0IGNsZWFuIC1mIC1kICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3RyYW5nZV9iYXJlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmluZyBwYXRoIGluIG5lc3RlZCBnaXQgd29yayB0cmVlIHdpbGwgTk9UIHJlbW92ZSBpdCcgJworCXJtIC1mciByZXBvICYmCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCQlta2RpciAtcCBiYXIvYmF6ICYmCisJCXRlc3RfY29tbWl0IG1zZyBiYXIvYmF6L2hlbGxvLndvcmxkCisJKSAmJgorCWdpdCBjbGVhbiAtZiAtZCByZXBvL2Jhci9iYXogJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSByZXBvLy5naXQvSEVBRCAmJgorCXRlc3RfcGF0aF9pc19kaXIgcmVwby9iYXIvICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgcmVwby9iYXIvYmF6L2hlbGxvLndvcmxkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmluZyBwYXRoIHRvIG5lc3RlZCAuZ2l0IHdpbGwgbm90IHJlbW92ZSBpdCcgJworCXJtIC1mciByZXBvICYmCisJbWtkaXIgcmVwbyB1bnRyYWNrZWQgJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdF9jb21taXQgbXNnIGhlbGxvLndvcmxkCisJKSAmJgorCWdpdCBjbGVhbiAtZiAtZCByZXBvLy5naXQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSByZXBvLy5naXQvSEVBRCAmJgorCXRlc3RfcGF0aF9pc19kaXIgcmVwby8uZ2l0L3JlZnMgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHJlcG8vLmdpdC9vYmplY3RzICYmCisJdGVzdF9wYXRoX2lzX2RpciB1bnRyYWNrZWQvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmluZyBwYXRoIHRvIG5lc3RlZCAuZ2l0LyB3aWxsIE5PVCByZW1vdmUgY29udGVudHMnICcKKwlybSAtZnIgcmVwbyB1bnRyYWNrZWQgJiYKKwlta2RpciByZXBvIHVudHJhY2tlZCAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X2NvbW1pdCBtc2cgaGVsbG8ud29ybGQKKwkpICYmCisJZ2l0IGNsZWFuIC1mIC1kIHJlcG8vLmdpdC8gJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHJlcG8vLmdpdCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHJlcG8vLmdpdC9IRUFEICYmCisJdGVzdF9wYXRoX2lzX2RpciB1bnRyYWNrZWQvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmNlIHJlbW92YWwgb2YgbmVzdGVkIGdpdCB3b3JrIHRyZWUnICcKKwlybSAtZnIgZm9vIGJhciBiYXogJiYKKwlta2RpciAtcCBmb28gYmFyIGJhei9ib28gJiYKKwkoCisJCWNkIGZvbyAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X2NvbW1pdCBuZXN0ZWQgaGVsbG8ud29ybGQKKwkpICYmCisJKAorCQljZCBiYXIgJiYKKwkJPmdvb2RieWUucGVvcGxlCisJKSAmJgorCSgKKwkJY2QgYmF6L2JvbyAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X2NvbW1pdCBkZWVwbHkubmVzdGVkIGRlZXBlci53b3JsZAorCSkgJiYKKwlnaXQgY2xlYW4gLWYgLWYgLWQgJiYKKwkhIHRlc3QgLWQgZm9vICYmCisJISB0ZXN0IC1kIGJhciAmJgorCSEgdGVzdCAtZCBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1lJyAnCisJcm0gLWZyIHJlcG8gJiYKKwlta2RpciByZXBvICYmCisJKAorCQljZCByZXBvICYmCisJCWdpdCBpbml0ICYmCisJCXRvdWNoIGtub3duIDEgMiAzICYmCisJCWdpdCBhZGQga25vd24gJiYKKwkJZ2l0IGNsZWFuIC1mIC1lIDEgLWUgMiAmJgorCQl0ZXN0IC1lIDEgJiYKKwkJdGVzdCAtZSAyICYmCisJCSEgKHRlc3QgLWUgMykgJiYKKwkJdGVzdCAtZSBrbm93bgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTQU5JVFkgJ2dpdCBjbGVhbiAtZCB3aXRoIGFuIHVucmVhZGFibGUgZW1wdHkgZGlyZWN0b3J5JyAnCisJbWtkaXIgZm9vICYmCisJY2htb2QgYT0gZm9vICYmCisJZ2l0IGNsZWFuIC1kZnggZm9vICYmCisJISB0ZXN0IC1kIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWQgcmVzcGVjdHMgcGF0aHNwZWNzIChkaXIgaXMgcHJlZml4IG9mIHBhdGhzcGVjKScgJworCW1rZGlyIC1wIGZvbyAmJgorCW1rZGlyIC1wIGZvb2JhciAmJgorCWdpdCBjbGVhbiAtZGYgZm9vYmFyICYmCisJdGVzdF9wYXRoX2lzX2RpciBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmb29iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1kIHJlc3BlY3RzIHBhdGhzcGVjcyAocGF0aHNwZWMgaXMgcHJlZml4IG9mIGRpciknICcKKwlta2RpciAtcCBmb28gJiYKKwlta2RpciAtcCBmb29iYXIgJiYKKwlnaXQgY2xlYW4gLWRmIGZvbyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZvbyAmJgorCXRlc3RfcGF0aF9pc19kaXIgZm9vYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtZCBza2lwcyB1bnRyYWNrZWQgZGlycyBjb250YWluaW5nIGlnbm9yZWQgZmlsZXMnICcKKwllY2hvIC9mb28vYmFyID4uZ2l0aWdub3JlICYmCisJZWNobyBpZ25vcmVtZSA+Pi5naXRpZ25vcmUgJiYKKwlybSAtcmYgZm9vICYmCisJbWtkaXIgLXAgZm9vL2EvYWEvYWFhIGZvby9iL2JiL2JiYiAmJgorCXRvdWNoIGZvby9iYXIgZm9vL2JheiBmb28vYS9hYS9pZ25vcmVtZSBmb28vYi9pZ25vcmVtZSBmb28vYi9iYi8xIGZvby9iL2JiLzIgJiYKKwlnaXQgY2xlYW4gLWRmICYmCisJdGVzdF9wYXRoX2lzX2RpciBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28vYmFyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZm9vL2JheiAmJgorCXRlc3RfcGF0aF9pc19maWxlIGZvby9hL2FhL2lnbm9yZW1lICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZm9vL2EvYWEvYWFhICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZm9vL2IvaWdub3JlbWUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmb28vYi9iYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWQgc2tpcHMgbmVzdGVkIHJlcG8gY29udGFpbmluZyBpZ25vcmVkIGZpbGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbmVzdGVkLXJlcG8td2l0aC1pZ25vcmVkLWZpbGUiICYmCisKKwlnaXQgaW5pdCBuZXN0ZWQtcmVwby13aXRoLWlnbm9yZWQtZmlsZSAmJgorCSgKKwkJY2QgbmVzdGVkLXJlcG8td2l0aC1pZ25vcmVkLWZpbGUgJiYKKwkJPmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCisJCSMgVGhpcyBmaWxlIGlzIGlnbm9yZWQgYnkgYSAuZ2l0aWdub3JlIHJ1bGUgaW4gdGhlIG91dGVyIHJlcG8KKwkJIyBhZGRlZCBpbiB0aGUgcHJldmlvdXMgdGVzdC4KKwkJPmlnbm9yZW1lCisJKSAmJgorCisJZ2l0IGNsZWFuIC1mZCAmJgorCisJdGVzdF9wYXRoX2lzX2ZpbGUgbmVzdGVkLXJlcG8td2l0aC1pZ25vcmVkLWZpbGUvLmdpdC9pbmRleCAmJgorCXRlc3RfcGF0aF9pc19maWxlIG5lc3RlZC1yZXBvLXdpdGgtaWdub3JlZC1maWxlL2lnbm9yZW1lICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbmVzdGVkLXJlcG8td2l0aC1pZ25vcmVkLWZpbGUvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gaGFuZGxlcyBiZWluZyB0b2xkIHdoYXQgdG8gY2xlYW4nICcKKwlta2RpciAtcCBkMSBkMiAmJgorCXRvdWNoIGQxL3V0IGQyL3V0ICYmCisJZ2l0IGNsZWFuIC1mICovdXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkMS91dCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGQyL3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiBoYW5kbGVzIGJlaW5nIHRvbGQgd2hhdCB0byBjbGVhbiwgd2l0aCAtZCcgJworCW1rZGlyIC1wIGQxIGQyICYmCisJdG91Y2ggZDEvdXQgZDIvdXQgJiYKKwlnaXQgY2xlYW4gLWZmZCAqL3V0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZDEvdXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkMi91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gd29ya3MgaWYgYSBnbG9iIGlzIHBhc3NlZCB3aXRob3V0IC1kJyAnCisJbWtkaXIgLXAgZDEgZDIgJiYKKwl0b3VjaCBkMS91dCBkMi91dCAmJgorCWdpdCBjbGVhbiAtZiAiKnV0IiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGQxL3V0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZDIvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIHdvcmtzIGlmIGEgZ2xvYiBpcyBwYXNzZWQgd2l0aCAtZCcgJworCW1rZGlyIC1wIGQxIGQyICYmCisJdG91Y2ggZDEvdXQgZDIvdXQgJiYKKwlnaXQgY2xlYW4gLWZmZCAiKnV0IiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGQxL3V0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZDIvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBNSU5HVyAnaGFuZGxlIGNsZWFuICYgY29yZS5sb25ncGF0aHMgPSBmYWxzZSBuaWNlbHknICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmxvbmdwYXRocyBmYWxzZSAmJgorCWE1MD1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAmJgorCW1rZGlyIC1wICRhNTAkYTUwLyRhNTAkYTUwLyRhNTAkYTUwICYmCisJOiA+IiRhNTAkYTUwL3Rlc3QudHh0IiAyPiIkYTUwJGE1MC8kYTUwJGE1MC8kYTUwJGE1MC90ZXN0LnR4dCIgJiYKKwkjIGNyZWF0ZSBhIHRlbXBvcmFyeSBvdXRzaWRlIHRoZSB3b3JraW5nIHRyZWUgdG8gaGlkZSBmcm9tICJnaXQgY2xlYW4iCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsZWFuIC14ZGYgMj4uZ2l0L2VyciAmJgorCSMgZ3JlcHBpbmcgZm9yIGEgc3RyZXJyb3Igc3RyaW5nIGlzIHVucG9ydGFibGUgYnV0IGl0IGlzIE9LIGhlcmUgd2l0aAorCSMgTUlOR1cgcHJlcmVxCisJdGVzdF9pMThuZ3JlcCAidG9vIGxvbmciIC5naXQvZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuIHVudHJhY2tlZCBwYXRocyBieSBwYXRoc3BlYycgJworCWdpdCBpbml0IHVudHJhY2tlZCAmJgorCW1rZGlyIHVudHJhY2tlZC9kaXIgJiYKKwllY2hvID51bnRyYWNrZWQvZGlyL2ZpbGUudHh0ICYmCisJZ2l0IC1DIHVudHJhY2tlZCBjbGVhbiAtZiBkaXIvZmlsZS50eHQgJiYKKwlscyB1bnRyYWNrZWQvZGlyID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzMwMS1jbGVhbi1pbnRlcmFjdGl2ZS5zaCBiL3QvdDczMDEtY2xlYW4taW50ZXJhY3RpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTA3ZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDczMDEtY2xlYW4taW50ZXJhY3RpdmUuc2gKQEAgLTAsMCArMSw0ODUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2xlYW4gLWkgYmFzaWMgdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItdGVybWluYWwuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCW1rZGlyIC1wIHNyYyAmJgorCXRvdWNoIHNyYy9wYXJ0MS5jIE1ha2VmaWxlICYmCisJZWNobyBidWlsZCA+LmdpdGlnbm9yZSAmJgorCWVjaG8gXCoubyA+Pi5naXRpZ25vcmUgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIHNldHVwICYmCisJdG91Y2ggc3JjL3BhcnQyLmMgUkVBRE1FICYmCisJZ2l0IGFkZCAuCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pIChjOiBjbGVhbiBob3RrZXkpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwllY2hvIGMgfCBnaXQgY2xlYW4gLWkgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pIChjbDogY2xlYW4gcHJlZml4KScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZWNobyBjbCB8IGdpdCBjbGVhbiAtaSAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWkgKHF1aXQpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwllY2hvIHF1aXQgfCBnaXQgY2xlYW4gLWkgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWkgKEN0cmwrRCknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWVjaG8gIlwwNCIgfCBnaXQgY2xlYW4gLWkgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChmaWx0ZXIgYWxsKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJdGVzdF93cml0ZV9saW5lcyBmICIqIiAiIiBjIHwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoZmlsdGVyIHBhdHRlcm5zKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJdGVzdF93cml0ZV9saW5lcyBmICJwYXJ0My4qICoub3V0IiAiIiBjIHwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoZmlsdGVyIHBhdHRlcm5zIDIpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGYgIiogISoub3V0IiAiIiBjIHwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChzZWxlY3QgLSBhbGwpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHMgIioiICIiIGMgfAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChzZWxlY3QgLSBub25lKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJdGVzdF93cml0ZV9saW5lcyBzICIiIGMgfAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChzZWxlY3QgLSBudW1iZXIpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHMgMyAiIiBjIHwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChzZWxlY3QgLSBudW1iZXIgMiknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgcyAiMiAzIiA1ICIiIGMgfAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChzZWxlY3QgLSBudW1iZXIgMyknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgcyAiMyw0IDUiICIiIGMgfAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChzZWxlY3QgLSBmaWxlbmFtZXMpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgZm9vLnR4dCBiYXIudHh0IGJhei50eHQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHMgImEub3V0IGZvIGJhIGJhciIgIiIgYyB8CisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgZm9vLnR4dCAmJgorCXRlc3QgISAtZiBiYXIudHh0ICYmCisJdGVzdCAtZiBiYXoudHh0ICYmCisJcm0gYmF6LnR4dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgKHNlbGVjdCAtIHJhbmdlKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJdGVzdF93cml0ZV9saW5lcyBzICIxLDMtNCIgMiAiIiBjIHwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgISAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChzZWxlY3QgLSByYW5nZSAyKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJdGVzdF93cml0ZV9saW5lcyBzICI0LSAxIiAiIiBjIHwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChpbnZlcnNlIHNlbGVjdCknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgcyAiKiIgIi01LSAxIC0yIiAiIiBjIHwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoYXNrKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJdGVzdF93cml0ZV9saW5lcyBhIFkgeSBubyB5ZXMgYmFkICIiIHwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoYXNrIC0gQ3RybCtEKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJdGVzdF93cml0ZV9saW5lcyBhIFkgbm8geWVzICJcMDQiIHwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgd2l0aCBwcmVmaXggYW5kIHBhdGggKGZpbHRlciknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCShjZCBidWlsZC8gJiYKKwkgdGVzdF93cml0ZV9saW5lcyBmIGRvY3MgIiouaCIgIiIgYyB8CisJIGdpdCBjbGVhbiAtaWQgLi4pICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCB3aXRoIHByZWZpeCBhbmQgcGF0aCAoc2VsZWN0IGJ5IG5hbWUpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoY2QgYnVpbGQvICYmCisJIHRlc3Rfd3JpdGVfbGluZXMgcyAuLi9kb2NzLyAuLi9zcmMvcGFydDMuYyAuLi9zcmMvcGFydDQuYyAiIiBjIHwKKwkgZ2l0IGNsZWFuIC1pZCAuLikgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIHdpdGggcHJlZml4IGFuZCBwYXRoIChhc2spJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoY2QgYnVpbGQvICYmCisJIHRlc3Rfd3JpdGVfbGluZXMgYSBZIHkgbm8geWVzIGJhZCAiIiB8CisJIGdpdCBjbGVhbiAtaWQgLi4pICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCBjbGVhbiAtaSBwYWludHMgdGhlIGhlYWRlciBpbiBIRUFERVIgY29sb3InICcKKwk+YS5vdXQgJiYKKwllY2hvIHEgfAorCXRlc3RfdGVybWluYWwgZ2l0IGNsZWFuIC1pIHwKKwl0ZXN0X2RlY29kZV9jb2xvciB8CisJaGVhZCAtbiAxID5oZWFkZXIgJiYKKwkjIG5vdCBpMThuZ3JlcAorCWdyZXAgIl48Qk9MRD4iIGhlYWRlcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoIGIvdC90NzQwMC1zdWJtb2R1bGUtYmFzaWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTU2ZTE3YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCkBAIC0wLDAgKzEsMTQwNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBMYXJzIEhqZW1saQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdCYXNpYyBwb3JjZWxhaW4gc3VwcG9ydCBmb3Igc3VibW9kdWxlcworCitUaGlzIHRlc3QgdHJpZXMgdG8gdmVyaWZ5IGJhc2ljIHNhbml0eSBvZiB0aGUgaW5pdCwgdXBkYXRlIGFuZCBzdGF0dXMKK3N1YmNvbW1hbmRzIG9mIGdpdCBzdWJtb2R1bGUuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgZGVpbml0IHdvcmtzIG9uIGVtcHR5IHJlcG9zaXRvcnknICcKKwlnaXQgc3VibW9kdWxlIGRlaW5pdCAtLWFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtIGluaXRpYWwgY29tbWl0JyAnCisJPnQgJiYKKwlnaXQgYWRkIHQgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIgJiYKKwlnaXQgYnJhbmNoIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGluaXQgYWJvcnRzIG9uIG1pc3NpbmcgLmdpdG1vZHVsZXMgZmlsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBzdWIiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxNjAwMDAsJChnaXQgcmV2LXBhcnNlIEhFQUQpLHN1YiAmJgorCSMgbWlzc2luZyB0aGUgLmdpdG1vZHVsZXMgZmlsZSBoZXJlCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBpbml0IDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgYWJvcnRzIG9uIG1pc3NpbmcgLmdpdG1vZHVsZXMgZmlsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBzdWIiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxNjAwMDAsJChnaXQgcmV2LXBhcnNlIEhFQUQpLHN1YiAmJgorCSMgbWlzc2luZyB0aGUgLmdpdG1vZHVsZXMgZmlsZSBoZXJlCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3ViIDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiU3VibW9kdWxlIHBhdGggLnN1Yi4gbm90IGluaXRpYWxpemVkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBhYm9ydHMgb24gbWlzc2luZyBnaXRtb2R1bGVzIHVybCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBzdWIiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxNjAwMDAsJChnaXQgcmV2LXBhcnNlIEhFQUQpLHN1YiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdG1vZHVsZXMiICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucy5wYXRoIHN1YiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYWJvcnRzIG9uIHJlcG9zaXRvcnkgd2l0aCBubyBjb21taXRzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSciJ3JlcG8tbm8tY29tbWl0cyciJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0CisJRU9GCisJZ2l0IGluaXQgcmVwby1uby1jb21taXRzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vYSAuL3JlcG8tbm8tY29tbWl0cyAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG91bGQgaWdub3JlIGlubmVyIGdpdCByZXBvIHdoZW4gbm90IGFkZGVkJyAnCisJcm0gLWZyIGlubmVyICYmCisJbWtkaXIgaW5uZXIgJiYKKwkoCisJCWNkIGlubmVyICYmCisJCWdpdCBpbml0ICYmCisJCT50ICYmCisJCWdpdCBhZGQgdCAmJgorCQlnaXQgY29tbWl0IC1tICJpbml0aWFsIgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHN0YXR1cyBpbm5lciAyPm91dHB1dC5lcnIgJiYKKwlybSAtZnIgaW5uZXIgJiYKKwl0ZXN0X2kxOG5ncmVwICJeZXJyb3I6IC4qZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQiIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLSByZXBvc2l0b3J5IGluIGluaXQgc3ViZGlyZWN0b3J5JyAnCisJbWtkaXIgaW5pdCAmJgorCSgKKwkJY2QgaW5pdCAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIGEgPmEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCWdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSBjb21taXQgMSIgJiYKKwkJZ2l0IHRhZyAtYSAtbSAicmV2LTEiIHJldi0xCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtIGNvbW1pdCB3aXRoIGdpdGxpbmsnICcKKwllY2hvIGEgPmEgJiYKKwllY2hvIHogPnogJiYKKwlnaXQgYWRkIGEgaW5pdCB6ICYmCisJZ2l0IGNvbW1pdCAtbSAic3VwZXIgY29tbWl0IDEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gaGlkZSBpbml0IHN1YmRpcmVjdG9yeScgJworCW12IGluaXQgLnN1YnJlcG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLSByZXBvc2l0b3J5IHRvIGFkZCBzdWJtb2R1bGVzIHRvJyAnCisJZ2l0IGluaXQgYWRkdGVzdCAmJgorCWdpdCBpbml0IGFkZHRlc3QtaWdub3JlCisnCisKKyMgVGhlICdzdWJtb2R1bGUgYWRkJyB0ZXN0cyBuZWVkIHNvbWUgcmVwb3NpdG9yeSB0byBhZGQgYXMgYSBzdWJtb2R1bGUuCisjIFRoZSB0cmFzaCBkaXJlY3RvcnkgaXMgYSBnb29kIG9uZSBhcyBhbnkuIFdlIG5lZWQgdG8gY2Fub25pY2FsaXplCisjIHRoZSBuYW1lLCB0aG91Z2gsIGFzIHNvbWUgdGVzdHMgY29tcGFyZSBpdCB0byB0aGUgYWJzb2x1dGUgcGF0aCBnaXQKKyMgZ2VuZXJhdGVzLCB3aGljaCB3aWxsIGV4cGFuZCBzeW1ib2xpYyBsaW5rcy4KK3N1Ym1vZHVybD0kKHB3ZCAtUCkKKworbGlzdGJyYW5jaGVzKCkgeworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUocmVmbmFtZSknICdyZWZzL2hlYWRzLyonCit9CisKK2luc3BlY3QoKSB7CisJZGlyPSQxICYmCisJZG90ZG90PSIkezI6LS4ufSIgJiYKKworCSgKKwkJY2QgIiRkaXIiICYmCisJCWxpc3RicmFuY2hlcyA+IiRkb3Rkb3QvaGVhZHMiICYmCisJCXsgZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHx8IDo7IH0gPiIkZG90ZG90L2hlYWQiICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRCA+IiRkb3Rkb3QvaGVhZC1zaGExIiAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCQlnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZSAmJgorCQlnaXQgY2xlYW4gLW4gLWQgLXggPiIkZG90ZG90L3VudHJhY2tlZCIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQnICcKKwllY2hvICJyZWZzL2hlYWRzL21hc3RlciIgPmV4cGVjdCAmJgorCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC1xICIkc3VibW9kdXJsIiBzdWJtb2QgPmFjdHVhbCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisJCWVjaG8gImdpdGRpcjogLi4vLmdpdC9tb2R1bGVzL3N1Ym1vZCIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kLy5naXQgJiYKKwkJKAorCQkJY2Qgc3VibW9kICYmCisJCQlnaXQgY29uZmlnIGNvcmUud29ya3RyZWUgPmFjdHVhbCAmJgorCQkJZWNobyAiLi4vLi4vLi4vc3VibW9kIiA+ZXhwZWN0ICYmCisJCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCQlybSAtZiBhY3R1YWwgZXhwZWN0CisJCSkgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0CisJKSAmJgorCisJcm0gLWYgaGVhZHMgaGVhZCB1bnRyYWNrZWQgJiYKKwlpbnNwZWN0IGFkZHRlc3Qvc3VibW9kIC4uLy4uICYmCisJdGVzdF9jbXAgZXhwZWN0IGhlYWRzICYmCisJdGVzdF9jbXAgZXhwZWN0IGhlYWQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHBhcmVudCBhbmQgb25lIHJlcG9zaXRvcnknICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHBhcmVudCAmJgorCXRlc3RfY29tbWl0IC1DIHBhcmVudCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVkaXJlY3RlZCBzdWJtb2R1bGUgYWRkIGRvZXMgbm90IHNob3cgcHJvZ3Jlc3MnICcKKwlnaXQgLUMgYWRkdGVzdCBzdWJtb2R1bGUgYWRkICJmaWxlOi8vJHN1Ym1vZHVybC9wYXJlbnQiIHN1Ym1vZC1yZWRpcmVjdGVkIFwKKwkJMj5lcnIgJiYKKwkhIGdyZXAgJSBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZGlyZWN0ZWQgc3VibW9kdWxlIGFkZCAtLXByb2dyZXNzIGRvZXMgc2hvdyBwcm9ncmVzcycgJworCWdpdCAtQyBhZGR0ZXN0IHN1Ym1vZHVsZSBhZGQgLS1wcm9ncmVzcyAiZmlsZTovLyRzdWJtb2R1cmwvcGFyZW50IiBcCisJCXN1Ym1vZC1yZWRpcmVjdGVkLXByb2dyZXNzIDI+ZXJyICYmIFwKKwlncmVwICUgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgdG8gLmdpdGlnbm9yZWQgcGF0aCBmYWlscycgJworCSgKKwkJY2QgYWRkdGVzdC1pZ25vcmUgJiYKKwkJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCQlUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6CisJCXN1Ym1vZAorCQloaW50OiBVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLgorCQloaW50OiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZworCQloaW50OiAiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkSWdub3JlZEZpbGUgZmFsc2UiCisJCUVPRgorCQkjIERvZXMgbm90IHVzZSB0ZXN0X2NvbW1pdCBkdWUgdG8gdGhlIGlnbm9yZQorCQllY2hvICIqIiA+IC5naXRpZ25vcmUgJiYKKwkJZ2l0IGFkZCAtLWZvcmNlIC5naXRpZ25vcmUgJiYKKwkJZ2l0IGNvbW1pdCAtbSJJZ25vcmUgZXZlcnl0aGluZyIgJiYKKwkJISBnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybCIgc3VibW9kID5hY3R1YWwgMj4mMSAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCB0byAuZ2l0aWdub3JlZCBwYXRoIHdpdGggLS1mb3JjZScgJworCSgKKwkJY2QgYWRkdGVzdC1pZ25vcmUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLS1mb3JjZSAiJHN1Ym1vZHVybCIgc3VibW9kCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHRvIHJlY29uZmlndXJlIGV4aXN0aW5nIHN1Ym1vZHVsZSB3aXRoIC0tZm9yY2UnICcKKwkoCisJCWNkIGFkZHRlc3QtaWdub3JlICYmCisJCWJvZ3VzX3VybD0iJChwd2QpL2JvZ3VzLXVybCIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLS1mb3JjZSAiJGJvZ3VzX3VybCIgc3VibW9kICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC0tZm9yY2UgLWIgaW5pdGlhbCAiJHN1Ym1vZHVybCIgc3VibW9kLWJyYW5jaCAmJgorCQl0ZXN0ICIkYm9ndXNfdXJsIiA9ICIkKGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZC51cmwpIiAmJgorCQl0ZXN0ICIkYm9ndXNfdXJsIiA9ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZC51cmwpIiAmJgorCQkjIFJlc3RvcmUgdGhlIHVybAorCQlnaXQgc3VibW9kdWxlIGFkZCAtLWZvcmNlICIkc3VibW9kdXJsIiBzdWJtb2QgJiYKKwkJdGVzdCAiJHN1Ym1vZHVybCIgPSAiJChnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2QudXJsKSIgJiYKKwkJdGVzdCAiJHN1Ym1vZHVybCIgPSAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2QudXJsKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgcmVsYXlzIGFkZCAtLWRyeS1ydW4gc3RkZXJyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgYWRkdGVzdC8uZ2l0L2luZGV4LmxvY2siICYmCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCTogPi5naXQvaW5kZXgubG9jayAmJgorCQkhIGdpdCBzdWJtb2R1bGUgYWRkICIkc3VibW9kdXJsIiBzdWItd2hpbGUtbG9ja2VkIDI+b3V0cHV0LmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJeZmF0YWw6IC4qaW5kZXhcLmxvY2siIG91dHB1dC5lcnIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3ViLXdoaWxlLWxvY2tlZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCAtLWJyYW5jaCcgJworCWVjaG8gInJlZnMvaGVhZHMvaW5pdGlhbCIgPmV4cGVjdC1oZWFkICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdC1oZWFkcyAmJgorCXJlZnMvaGVhZHMvaW5pdGlhbAorCXJlZnMvaGVhZHMvbWFzdGVyCisJRU9GCisKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLWIgaW5pdGlhbCAiJHN1Ym1vZHVybCIgc3VibW9kLWJyYW5jaCAmJgorCQl0ZXN0ICJpbml0aWFsIiA9ICIkKGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZC1icmFuY2guYnJhbmNoKSIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0CisJKSAmJgorCisJcm0gLWYgaGVhZHMgaGVhZCB1bnRyYWNrZWQgJiYKKwlpbnNwZWN0IGFkZHRlc3Qvc3VibW9kLWJyYW5jaCAuLi8uLiAmJgorCXRlc3RfY21wIGV4cGVjdC1oZWFkcyBoZWFkcyAmJgorCXRlc3RfY21wIGV4cGVjdC1oZWFkIGhlYWQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgd2l0aCAuLyBpbiBwYXRoJyAnCisJZWNobyAicmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QgJiYKKworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybCIgLi8uL2RvdHN1Ym1vZC8uL2Zyb3R6Ly4vICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L2RvdHN1Ym1vZC9mcm90eiAuLi8uLi8uLiAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkcyAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHVudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHdpdGggLy4vLi8gaW4gcGF0aCcgJworCWVjaG8gInJlZnMvaGVhZHMvbWFzdGVyIiA+ZXhwZWN0ICYmCisKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIGRvdHNsYXNoZG90c3VibW9kLy4vLi9mcm90ei8uLyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQKKwkpICYmCisKKwlybSAtZiBoZWFkcyBoZWFkIHVudHJhY2tlZCAmJgorCWluc3BlY3QgYWRkdGVzdC9kb3RzbGFzaGRvdHN1Ym1vZC9mcm90eiAuLi8uLi8uLiAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkcyAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHVudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHdpdGggLy8gaW4gcGF0aCcgJworCWVjaG8gInJlZnMvaGVhZHMvbWFzdGVyIiA+ZXhwZWN0ICYmCisKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIHNsYXNoc2xhc2hzdWJtb2QvLy9mcm90ei8vICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L3NsYXNoc2xhc2hzdWJtb2QvZnJvdHogLi4vLi4vLi4gJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB1bnRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCB3aXRoIC8uLiBpbiBwYXRoJyAnCisJZWNobyAicmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QgJiYKKworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybCIgZG90ZG90c3VibW9kLy4uL3JlYWxzdWJtb2QvZnJvdHovLi4gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0CisJKSAmJgorCisJcm0gLWYgaGVhZHMgaGVhZCB1bnRyYWNrZWQgJiYKKwlpbnNwZWN0IGFkZHRlc3QvcmVhbHN1Ym1vZCAuLi8uLiAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkcyAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHVudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHdpdGggLi8sIC8uLiBhbmQgLy8gaW4gcGF0aCcgJworCWVjaG8gInJlZnMvaGVhZHMvbWFzdGVyIiA+ZXhwZWN0ICYmCisKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIGRvdC9kb3RzbGFzaHN1Ym1vZC8uLy4uLy4uLy8vL3JlYWxzdWJtb2QyL2EvYi9jL2QvLi4vLi4vLi4vLi4vZnJvdHovLy4uICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L3JlYWxzdWJtb2QyIC4uLy4uICYmCisJdGVzdF9jbXAgZXhwZWN0IGhlYWRzICYmCisJdGVzdF9jbXAgZXhwZWN0IGhlYWQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIUNZR1dJTiAnc3VibW9kdWxlIGFkZCB3aXRoIFxcIGluIHBhdGgnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBwYXJlbnQgc3ViXFx3aXRoXFxiYWNrc2xhc2giICYmCisKKwkjIEluaXRpYWxpemUgYSByZXBvIHdpdGggYSBiYWNrc2xhc2ggaW4gaXRzIG5hbWUKKwlnaXQgaW5pdCBzdWJcXHdpdGhcXGJhY2tzbGFzaCAmJgorCXRvdWNoIHN1Ylxcd2l0aFxcYmFja3NsYXNoL2VtcHR5LmZpbGUgJiYKKwlnaXQgLUMgc3ViXFx3aXRoXFxiYWNrc2xhc2ggYWRkIGVtcHR5LmZpbGUgJiYKKwlnaXQgLUMgc3ViXFx3aXRoXFxiYWNrc2xhc2ggY29tbWl0IC1tICJBZGRlZCBlbXB0eS5maWxlIiAmJgorCisJIyBBZGQgdGhhdCByZXBvc2l0b3J5IGFzIGEgc3VibW9kdWxlCisJZ2l0IGluaXQgcGFyZW50ICYmCisJZ2l0IC1DIHBhcmVudCBzdWJtb2R1bGUgYWRkIC4uL3N1Ylxcd2l0aFxcYmFja3NsYXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgaW4gc3ViZGlyZWN0b3J5JyAnCisJZWNobyAicmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QgJiYKKworCW1rZGlyIGFkZHRlc3Qvc3ViICYmCisJKAorCQljZCBhZGR0ZXN0L3N1YiAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybCIgLi4vcmVhbHN1Ym1vZDMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0CisJKSAmJgorCisJcm0gLWYgaGVhZHMgaGVhZCB1bnRyYWNrZWQgJiYKKwlpbnNwZWN0IGFkZHRlc3QvcmVhbHN1Ym1vZDMgLi4vLi4gJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB1bnRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCBpbiBzdWJkaXJlY3Rvcnkgd2l0aCByZWxhdGl2ZSBwYXRoIHNob3VsZCBmYWlsJyAnCisJKAorCQljZCBhZGR0ZXN0L3N1YiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIGFkZCAuLi8uLi8gc3VibW9kMyAyPi4uLy4uL291dHB1dC5lcnIKKwkpICYmCisJdGVzdF9pMThuZ3JlcCB0b3BsZXZlbCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gYWRkIGFuIGV4YW1wbGUgZW50cnkgdG8gLmdpdG1vZHVsZXMnICcKKwlnaXQgY29uZmlnIC0tZmlsZT0uZ2l0bW9kdWxlcyBzdWJtb2R1bGUuZXhhbXBsZS51cmwgZ2l0Oi8vZXhhbXBsZS5jb20vaW5pdC5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNob3VsZCBmYWlsIGZvciB1bm1hcHBlZCBwYXRocycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgc3RhdHVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gbWFwIHBhdGggaW4gLmdpdG1vZHVsZXMnICcKKwljYXQgPDxcRU9GID5leHBlY3QgJiYKK1tzdWJtb2R1bGUgImV4YW1wbGUiXQorCXVybCA9IGdpdDovL2V4YW1wbGUuY29tL2luaXQuZ2l0CisJcGF0aCA9IGluaXQKK0VPRgorCisJZ2l0IGNvbmZpZyAtLWZpbGU9LmdpdG1vZHVsZXMgc3VibW9kdWxlLmV4YW1wbGUucGF0aCBpbml0ICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdG1vZHVsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNob3VsZCBvbmx5IHByaW50IG9uZSBsaW5lJyAnCisJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPmxpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBsaW5lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgZnJvbSBzdWJkaXJlY3Rvcnkgc2hvdWxkIGhhdmUgdGhlIHNhbWUgU0hBMScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm1kaXIgYWRkdGVzdC9zdWJkaXIiICYmCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCW1rZGlyIHN1YmRpciAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyA+b3V0cHV0ICYmCisJCWF3ayAie3ByaW50IFwkMX0iIDxvdXRwdXQgPmV4cGVjdCAmJgorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPi4uL291dHB1dCAmJgorCQlhd2sgIntwcmludCBcJDF9IiA8Li4vb3V0cHV0ID4uLi9hY3R1YWwgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbCAmJgorCQlnaXQgLUMgLi4vc3VibW9kIGNoZWNrb3V0IEhFQUReICYmCisJCWdpdCBzdWJtb2R1bGUgc3RhdHVzID4uLi9vdXRwdXQgJiYKKwkJYXdrICJ7cHJpbnQgXCQxfSIgPC4uL291dHB1dCA+Li4vYWN0dWFsMiAmJgorCQljZCAuLiAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyA+b3V0cHV0ICYmCisJCWF3ayAie3ByaW50IFwkMX0iIDxvdXRwdXQgPmV4cGVjdDIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBhY3R1YWwyICYmCisJCSEgdGVzdF9jbXAgYWN0dWFsIGFjdHVhbDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gZmV0Y2ggY29tbWl0IG5hbWUgZnJvbSBzdWJtb2R1bGUnICcKKwlyZXYxPSQoY2QgLnN1YnJlcG8gJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXByaW50ZiAicmV2MTogJXNcbiIgIiRyZXYxIiAmJgorCXRlc3QgLW4gIiRyZXYxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2hvdWxkIGluaXRpYWxseSBiZSAibWlzc2luZyInICcKKwlnaXQgc3VibW9kdWxlIHN0YXR1cyA+bGluZXMgJiYKKwlncmVwICJeLSRyZXYxIiBsaW5lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHNob3VsZCByZWdpc3RlciBzdWJtb2R1bGUgdXJsIGluIC5naXQvY29uZmlnJyAnCisJZWNobyBnaXQ6Ly9leGFtcGxlLmNvbS9pbml0LmdpdCA+ZXhwZWN0ICYmCisKKwlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5leGFtcGxlLnVybCA+dXJsICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZS51cmwgLi8uc3VicmVwbyAmJgorCisJdGVzdF9jbXAgZXhwZWN0IHVybAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2hvdWxkIHN0aWxsIGJlICJtaXNzaW5nIiBhZnRlciBpbml0aWFsaXppbmcnICcKKwlybSAtZnIgaW5pdCAmJgorCW1rZGlyIGluaXQgJiYKKwlnaXQgc3VibW9kdWxlIHN0YXR1cyA+bGluZXMgJiYKKwlybSAtZnIgaW5pdCAmJgorCWdyZXAgIl4tJHJldjEiIGxpbmVzCisnCisKK3Rlc3RfZmFpbHVyZV93aXRoX3Vua25vd25fc3VibW9kdWxlICgpIHsKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlICQxIG5vLXN1Y2gtc3VibW9kdWxlIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIl5lcnJvcjogLipuby1zdWNoLXN1Ym1vZHVsZSIgb3V0cHV0LmVycgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHNob3VsZCBmYWlsIHdpdGggdW5rbm93biBzdWJtb2R1bGUnICcKKwl0ZXN0X2ZhaWx1cmVfd2l0aF91bmtub3duX3N1Ym1vZHVsZSBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBzaG91bGQgZmFpbCB3aXRoIHVua25vd24gc3VibW9kdWxlJyAnCisJdGVzdF9mYWlsdXJlX3dpdGhfdW5rbm93bl9zdWJtb2R1bGUgdXBkYXRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG91bGQgZmFpbCB3aXRoIHVua25vd24gc3VibW9kdWxlJyAnCisJdGVzdF9mYWlsdXJlX3dpdGhfdW5rbm93bl9zdWJtb2R1bGUgc3RhdHVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bmMgc2hvdWxkIGZhaWwgd2l0aCB1bmtub3duIHN1Ym1vZHVsZScgJworCXRlc3RfZmFpbHVyZV93aXRoX3Vua25vd25fc3VibW9kdWxlIHN5bmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHNob3VsZCBmYWlsIHdoZW4gcGF0aCBpcyB1c2VkIGJ5IGEgZmlsZScgJworCWVjaG8gaGVsbG8gPmV4cGVjdCAmJgorCisJZWNobyAiaGVsbG8iID5pbml0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKworCXRlc3RfY21wIGV4cGVjdCBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBzaG91bGQgZmFpbCB3aGVuIHBhdGggaXMgdXNlZCBieSBhIG5vbmVtcHR5IGRpcmVjdG9yeScgJworCWVjaG8gaGVsbG8gPmV4cGVjdCAmJgorCisJcm0gLWZyIGluaXQgJiYKKwlta2RpciBpbml0ICYmCisJZWNobyAiaGVsbG8iID5pbml0L2EgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgaW5pdC9hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBzaG91bGQgd29yayB3aGVuIHBhdGggaXMgYW4gZW1wdHkgZGlyJyAnCisJcm0gLWZyIGluaXQgJiYKKwlybSAtZiBoZWFkLXNoYTEgJiYKKwllY2hvICIkcmV2MSIgPmV4cGVjdCAmJgorCisJbWtkaXIgaW5pdCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1xID51cGRhdGUub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHVwZGF0ZS5vdXQgJiYKKworCWluc3BlY3QgaW5pdCAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkLXNoYTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNob3VsZCBiZSAidXAtdG8tZGF0ZSIgYWZ0ZXIgdXBkYXRlJyAnCisJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPmxpc3QgJiYKKwlncmVwICJeICRyZXYxIiBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAidXAtdG8tZGF0ZSIgZnJvbSBzdWJkaXJlY3RvcnknICcKKwlta2RpciAtcCBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyA+Li4vbGlzdAorCSkgJiYKKwlncmVwICJeICRyZXYxIiBsaXN0ICYmCisJZ3JlcCAiXFwuXFwuL2luaXQiIGxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzICJ1cC10by1kYXRlIiBmcm9tIHN1YmRpcmVjdG9yeSB3aXRoIHBhdGgnICcKKwlta2RpciAtcCBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyAuLi9pbml0ID4uLi9saXN0CisJKSAmJgorCWdyZXAgIl4gJHJldjEiIGxpc3QgJiYKKwlncmVwICJcXC5cXC4vaW5pdCIgbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2hvdWxkIGJlICJtb2RpZmllZCIgYWZ0ZXIgc3VibW9kdWxlIGNvbW1pdCcgJworCSgKKwkJY2QgaW5pdCAmJgorCQllY2hvIGIgPmIgJiYKKwkJZ2l0IGFkZCBiICYmCisJCWdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSBjb21taXQgMiIKKwkpICYmCisKKwlyZXYyPSQoY2QgaW5pdCAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdCAtbiAiJHJldjIiICYmCisJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPmxpc3QgJiYKKworCWdyZXAgIl4rJHJldjIiIGxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhlIC0tY2FjaGVkIHNoYTEgc2hvdWxkIGJlIHJldjEnICcKKwlnaXQgc3VibW9kdWxlIC0tY2FjaGVkIHN0YXR1cyA+bGlzdCAmJgorCWdyZXAgIl4rJHJldjEiIGxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgc2hvdWxkIHJlcG9ydCB0aGUgU0hBMSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSBjb21taXQnICcKKwlnaXQgZGlmZiA+ZGlmZiAmJgorCWdyZXAgIl4rU3VicHJvamVjdCBjb21taXQgJHJldjIiIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHNob3VsZCBjaGVja291dCByZXYxJyAnCisJcm0gLWYgaGVhZC1zaGExICYmCisJZWNobyAiJHJldjEiID5leHBlY3QgJiYKKworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIGluaXQgJiYKKwlpbnNwZWN0IGluaXQgJiYKKworCXRlc3RfY21wIGV4cGVjdCBoZWFkLXNoYTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNob3VsZCBiZSAidXAtdG8tZGF0ZSIgYWZ0ZXIgdXBkYXRlJyAnCisJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPmxpc3QgJiYKKwlncmVwICJeICRyZXYxIiBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHN1cGVycHJvamVjdCB3aXRoIHN1YnByb2plY3QgYWxyZWFkeSBwcmVzZW50JyAnCisJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHN1Ym1vZHVsZSBkaWZmJyAnCisJZ2l0IGJyYW5jaCBzZWNvbmQgJiYKKwkoCisJCWNkIGluaXQgJiYKKwkJZWNobyBzID5zICYmCisJCWdpdCBhZGQgcyAmJgorCQlnaXQgY29tbWl0IC1tICJjaGFuZ2Ugc3VicHJvamVjdCIKKwkpICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBpbml0ICYmCisJZ2l0IGNvbW1pdCAtbSAiY2hhbmdlIGluaXQiICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+UC5kaWZmICYmCisJZ2l0IGNoZWNrb3V0IHNlY29uZCAmJgorCWdpdCBhcHBseSAtLWluZGV4IFAuZGlmZiAmJgorCisJZ2l0IGRpZmYgLS1jYWNoZWQgbWFzdGVyID5zdGFnZWQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgc3RhZ2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSAtLWluaXQnICcKKwltdiBpbml0IGluaXQyICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuZXhhbXBsZS51cmwgIiQocHdkKS9pbml0MiIgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLmV4YW1wbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIHN1Ym1vZHVsZS5leGFtcGxlLnVybCAmJgorCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgaW5pdCAyPiB1cGRhdGUub3V0ICYmCisJdGVzdF9pMThuZ3JlcCAibm90IGluaXRpYWxpemVkIiB1cGRhdGUub3V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBpbml0Ly5naXQgJiYKKworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCBpbml0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBpbml0Ly5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIC0taW5pdCBmcm9tIHN1YmRpcmVjdG9yeScgJworCW12IGluaXQgaW5pdDIgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5leGFtcGxlLnVybCAiJChwd2QpL2luaXQyIiAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuZXhhbXBsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgc3VibW9kdWxlLmV4YW1wbGUudXJsICYmCisKKwlta2RpciAtcCBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAuLi9pbml0IDI+dXBkYXRlLm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJub3QgaW5pdGlhbGl6ZWQiIHVwZGF0ZS5vdXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciAuLi9pbml0Ly5naXQgJiYKKworCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLi4vaW5pdAorCSkgJiYKKwlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIGluaXQvLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgYWRkIGZpbGVzIGZyb20gYSBzdWJtb2R1bGUnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGluaXQvYQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyYWNlZnVsbHkgYWRkL3Jlc2V0IHN1Ym1vZHVsZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2gnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY29tbWl0IC1tICJjb21taXQgc3VicHJvamVjdCIgaW5pdCAmJgorCShjZCBpbml0ICYmCisJIGVjaG8gYiA+IGEpICYmCisJZ2l0IGFkZCBpbml0LyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIC0tY2FjaGVkIGluaXQgJiYKKwljb21taXQ9JChjZCBpbml0ICYmCisJIGdpdCBjb21taXQgLW0gdXBkYXRlIGEgPi9kZXYvbnVsbCAmJgorCSBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGFkZCBpbml0LyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tZXhpdC1jb2RlIC0tY2FjaGVkIGluaXQgJiYKKwl0ZXN0ICRjb21taXQgPSAkKGdpdCBscy1maWxlcyAtLXN0YWdlIHwKKwkJc2VkIC1uICJzL14xNjAwMDAgXChbXiBdKlwpLiovXDEvcCIpICYmCisJZ2l0IHJlc2V0IGluaXQvICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgLS1jYWNoZWQgaW5pdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIGdyYWNlZnVsbHkgaGFuZGxlcyB0cmFpbGluZyBzbGFzaCcgJworCisJdGVzdCAiaW5pdCIgPSAiJChnaXQgbHMtZmlsZXMgaW5pdC8pIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmluZyB0byBhIGNvbW1pdCB3aXRob3V0IHN1Ym1vZHVsZSBkb2VzIG5vdCBsZWF2ZSBlbXB0eSBkaXInICcKKwlybSAtcmYgaW5pdCAmJgorCW1rZGlyIGluaXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwl0ZXN0ICEgLWQgaW5pdCAmJgorCWdpdCBjaGVja291dCBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIDxpbnZhbGlkLXN1YmNvbW1hbmQ+IGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBuby1zdWNoLXN1YmNvbW1hbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHN1Ym1vZHVsZXMgd2l0aG91dCBzcGVjaWZ5aW5nIGFuIGV4cGxpY2l0IHBhdGgnICcKKwlta2RpciByZXBvICYmCisJKAorCQljZCByZXBvICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gciA+ciAmJgorCQlnaXQgYWRkIHIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicmVwbyBjb21taXQgMSIKKwkpICYmCisJZ2l0IGNsb25lIC0tYmFyZSByZXBvLyBiYXJlLmdpdCAmJgorCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybC9yZXBvIiAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5yZXBvLnBhdGggcmVwbyAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybC9iYXJlLmdpdCIgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuYmFyZS5wYXRoIGJhcmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzaG91bGQgZmFpbCB3aGVuIHBhdGggaXMgdXNlZCBieSBhIGZpbGUnICcKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJdG91Y2ggZmlsZSAmJgorCQl0ZXN0X211c3RfZmFpbAlnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybC9yZXBvIiBmaWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc2hvdWxkIGZhaWwgd2hlbiBwYXRoIGlzIHVzZWQgYnkgYW4gZXhpc3RpbmcgZGlyZWN0b3J5JyAnCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCW1rZGlyIGVtcHR5LWRpciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybC9yZXBvIiBlbXB0eS1kaXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSBzdXBlcnByb2plY3QgYXMgdXBzdHJlYW0gd2hlbiBwYXRoIGlzIHJlbGF0aXZlIGFuZCBubyB1cmwgaXMgc2V0IHRoZXJlJyAnCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3JlcG8gcmVsYXRpdmUgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5yZWxhdGl2ZS51cmwpIiA9IC4uL3JlcG8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jIHJlbGF0aXZlICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUucmVsYXRpdmUudXJsKSIgPSAiJHN1Ym1vZHVybC9yZXBvIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZvciByZWxhdGl2ZSBwYXRoIHRlc3RzJyAnCisJbWtkaXIgcmVsdGVzdCAmJgorCSgKKwkJY2QgcmVsdGVzdCAmJgorCQlnaXQgaW5pdCAmJgorCQlta2RpciBzdWIgJiYKKwkJKAorCQkJY2Qgc3ViICYmCisJCQlnaXQgaW5pdCAmJgorCQkJdGVzdF9jb21taXQgZm9vCisJCSkgJiYKKwkJZ2l0IGFkZCBzdWIgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGggc3ViICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi51cmwgLi4vc3VicmVwbyAmJgorCQljcCAuZ2l0L2NvbmZpZyBwcmlzdGluZS0uZ2l0LWNvbmZpZyAmJgorCQljcCAuZ2l0bW9kdWxlcyBwcmlzdGluZS0uZ2l0bW9kdWxlcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIFVSTCAtIHNzaDovL2hvc3RuYW1lL3JlcG8nICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCBzc2g6Ly9ob3N0bmFtZS9yZXBvICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IHNzaDovL2hvc3RuYW1lL3N1YnJlcG8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCBwb3J0LXF1YWxpZmllZCBVUkwgLSBzc2g6Ly9ob3N0bmFtZToyMi9yZXBvJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgc3NoOi8vaG9zdG5hbWU6MjIvcmVwbyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSBzc2g6Ly9ob3N0bmFtZToyMi9zdWJyZXBvCisJKQorJworCisjIEFib3V0IHRoZSBjaG9pY2Ugb2YgdGhlIHBhdGggaW4gdGhlIG5leHQgdGVzdDoKKyMgLSBkb3VibGUtc2xhc2ggc2lkZS1zdGVwcyBwYXRoIG1hbmdsaW5nIGlzc3VlcyBvbiBXaW5kb3dzCisjIC0gaXQgaXMgc3RpbGwgYW4gYWJzb2x1dGUgbG9jYWwgcGF0aAorIyAtIHRoZXJlIGNhbm5vdCBiZSBhIHNlcnZlciB3aXRoIGEgYmxhbmsgaW4gaXRzIG5hbWUganVzdCBpbiBjYXNlIHRoZQorIyAgIHBhdGggaXMgdXNlZCBlcnJvbmVvdXNseSB0byBhY2Nlc3MgYSAvL3NlcnZlci9zaGFyZSBzdHlsZSBwYXRoCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHBhdGggd29ya3Mgd2l0aCBsb2NhbCBwYXRoIC0gLy9zb21ld2hlcmUgZWxzZS9yZXBvJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgIi8vc29tZXdoZXJlIGVsc2UvcmVwbyIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gIi8vc29tZXdoZXJlIGVsc2Uvc3VicmVwbyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCBmaWxlIFVSTCAtIGZpbGU6Ly8vdG1wL3JlcG8nICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCBmaWxlOi8vL3RtcC9yZXBvICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IGZpbGU6Ly8vdG1wL3N1YnJlcG8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCBoZWxwZXIgVVJMLSBoZWxwZXI6Oi8vaG9zdG5hbWUvcmVwbycgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIGhlbHBlcjo6Ly9ob3N0bmFtZS9yZXBvICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IGhlbHBlcjo6Ly9ob3N0bmFtZS9zdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggc2NwLXN0eWxlIFVSTCAtIHVzZXJAaG9zdDpyZXBvJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgdXNlckBob3N0OnJlcG8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gdXNlckBob3N0OnN1YnJlcG8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCBzY3Atc3R5bGUgVVJMIC0gdXNlckBob3N0OnBhdGgvdG8vcmVwbycgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIHVzZXJAaG9zdDpwYXRoL3RvL3JlcG8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gdXNlckBob3N0OnBhdGgvdG8vc3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIHJlbGF0aXZlIGxvY2FsIHBhdGggLSBmb28nICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCBmb28gJiYKKwkJIyBhY3R1YWw6IGZhaWxzIHdpdGggYW4gZXJyb3IKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gc3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIHJlbGF0aXZlIGxvY2FsIHBhdGggLSBmb28vYmFyJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgZm9vL2JhciAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSBmb28vc3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIHJlbGF0aXZlIGxvY2FsIHBhdGggLSAuL2ZvbycgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIC4vZm9vICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IHN1YnJlcG8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCByZWxhdGl2ZSBsb2NhbCBwYXRoIC0gLi9mb28vYmFyJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgLi9mb28vYmFyICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IGZvby9zdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggcmVsYXRpdmUgbG9jYWwgcGF0aCAtIC4uL2ZvbycgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIC4uL2ZvbyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSAuLi9zdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggcmVsYXRpdmUgbG9jYWwgcGF0aCAtIC4uL2Zvby9iYXInICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAuLi9mb28vYmFyICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IC4uL2Zvby9zdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9iYXIvYS9iL2Mgd29ya3Mgd2l0aCByZWxhdGl2ZSBsb2NhbCBwYXRoIC0gLi4vZm9vL2Jhci5naXQnICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJbWtkaXIgLXAgYS9iL2MgJiYKKwkJKGNkIGEvYi9jICYmIGdpdCBpbml0ICYmIHRlc3RfY29tbWl0IG1zZykgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAuLi9mb28vYmFyLmdpdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9iYXIvYS9iL2MgLi9hL2IvYyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5hL2IvYy51cmwpIiA9IC4uL2Zvby9iYXIvYS9iL2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmluZyB0aGUgc3VwZXJwcm9qZWN0IGRvZXMgbm90IGJyZWFrIHN1Ym1vZHVsZXMnICcKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPmV4cGVjdAorCSkgJiYKKwltdiBhZGR0ZXN0IGFkZHRlc3QyICYmCisJKAorCQljZCBhZGR0ZXN0MiAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmluZyB0aGUgc3VibW9kdWxlIGRvZXMgbm90IGJyZWFrIHRoZSBzdXBlcnByb2plY3QnICcKKwkoCisJCWNkIGFkZHRlc3QyICYmCisJCWdpdCBzdWJtb2R1bGUgc3RhdHVzCisJKSA+YWN0dWFsICYmCisJc2VkIC1lICJzL14gXChbXiBdKiByZXBvXCkgLiovLVwxLyIgPGFjdHVhbCA+ZXhwZWN0ICYmCisJbXYgYWRkdGVzdDIvcmVwbyBhZGR0ZXN0Mi9yZXBvLmJhayAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgYWRkdGVzdDIvcmVwby5iYWsgYWRkdGVzdDIvcmVwbyIgJiYKKwkoCisJCWNkIGFkZHRlc3QyICYmCisJCWdpdCBzdWJtb2R1bGUgc3RhdHVzCisJKSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIC0tbmFtZSBhbGxvd3MgdG8gcmVwbGFjZSBhIHN1Ym1vZHVsZSB3aXRoIGFub3RoZXIgYXQgdGhlIHNhbWUgcGF0aCcgJworCSgKKwkJY2QgYWRkdGVzdDIgJiYKKwkJKAorCQkJY2QgcmVwbyAmJgorCQkJZWNobyAiJHN1Ym1vZHVybC9yZXBvIiA+ZXhwZWN0ICYmCisJCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsID5hY3R1YWwgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJCWVjaG8gImdpdGRpcjogLi4vLmdpdC9tb2R1bGVzL3JlcG8iID5leHBlY3QgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCAuZ2l0CisJCSkgJiYKKwkJcm0gLXJmIHJlcG8gJiYKKwkJZ2l0IHJtIHJlcG8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLXEgLS1uYW1lIHJlcG9fbmV3ICIkc3VibW9kdXJsL2JhcmUuZ2l0IiByZXBvID5hY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCQllY2hvICJnaXRkaXI6IC4uLy5naXQvbW9kdWxlcy9zdWJtb2QiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC8uZ2l0ICYmCisJCSgKKwkJCWNkIHJlcG8gJiYKKwkJCWVjaG8gIiRzdWJtb2R1cmwvYmFyZS5naXQiID5leHBlY3QgJiYKKwkJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgPmFjdHVhbCAmJgorCQkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQkJZWNobyAiZ2l0ZGlyOiAuLi8uZ2l0L21vZHVsZXMvcmVwb19uZXciID5leHBlY3QgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCAuZ2l0CisJCSkgJiYKKwkJZWNobyAicmVwbyIgPmV4cGVjdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5yZXBvLnBhdGggJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmVwb19uZXcucGF0aCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJZWNobyAiJHN1Ym1vZHVybC9yZXBvIiA+ZXhwZWN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnJlcG8udXJsICYmCisJCWVjaG8gIiRzdWJtb2R1cmwvYmFyZS5naXQiID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmVwb19uZXcudXJsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQllY2hvICIkc3VibW9kdXJsL3JlcG8iID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUucmVwby51cmwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWVjaG8gIiRzdWJtb2R1cmwvYmFyZS5naXQiID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUucmVwb19uZXcudXJsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjdXJzaXZlIHJlbGF0aXZlIHN1Ym1vZHVsZXMgc3RheSByZWxhdGl2ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyIGNsb25lMiBzdWJzdWIgc3ViMyIgJiYKKwlta2RpciBzdWJzdWIgJiYKKwkoCisJCWNkIHN1YnN1YiAmJgorCQlnaXQgaW5pdCAmJgorCQk+dCAmJgorCQlnaXQgYWRkIHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiCisJKSAmJgorCW1rZGlyIHN1YjMgJiYKKwkoCisJCWNkIHN1YjMgJiYKKwkJZ2l0IGluaXQgJiYKKwkJPnQgJiYKKwkJZ2l0IGFkZCB0ICYmCisJCWdpdCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IiAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJzdWIgZGlyZGlyL3N1YnN1YiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIHN1YnN1YiIKKwkpICYmCisJbWtkaXIgc3VwZXIgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBpbml0ICYmCisJCT50ICYmCisJCWdpdCBhZGQgdCAmJgorCQlnaXQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3ViMyAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIHN1YiIKKwkpICYmCisJZ2l0IGNsb25lIHN1cGVyIGNsb25lMiAmJgorCSgKKwkJY2QgY2xvbmUyICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQllY2hvICJnaXRkaXI6IC4uLy5naXQvbW9kdWxlcy9zdWIzIiA+Li9zdWIzLy5naXRfZXhwZWN0ICYmCisJCWVjaG8gImdpdGRpcjogLi4vLi4vLi4vLmdpdC9tb2R1bGVzL3N1YjMvbW9kdWxlcy9kaXJkaXIvc3Vic3ViIiA+Li9zdWIzL2RpcmRpci9zdWJzdWIvLmdpdF9leHBlY3QKKwkpICYmCisJdGVzdF9jbXAgY2xvbmUyL3N1YjMvLmdpdF9leHBlY3QgY2xvbmUyL3N1YjMvLmdpdCAmJgorCXRlc3RfY21wIGNsb25lMi9zdWIzL2RpcmRpci9zdWJzdWIvLmdpdF9leHBlY3QgY2xvbmUyL3N1YjMvZGlyZGlyL3N1YnN1Yi8uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgd2l0aCBhbiBleGlzdGluZyBuYW1lIGZhaWxzIHVubGVzcyBmb3JjZWQnICcKKwkoCisJCWNkIGFkZHRlc3QyICYmCisJCXJtIC1yZiByZXBvICYmCisJCWdpdCBybSByZXBvICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgYWRkIC1xIC0tbmFtZSByZXBvX25ldyAiJHN1Ym1vZHVybC9yZXBvLmdpdCIgcmVwbyAmJgorCQl0ZXN0ICEgLWQgcmVwbyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5yZXBvX25ldy5wYXRoICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnJlcG9fbmV3LnVybCAmJgorCQllY2hvICIkc3VibW9kdXJsL2JhcmUuZ2l0IiA+ZXhwZWN0ICYmCisJCWdpdCBjb25maWcgc3VibW9kdWxlLnJlcG9fbmV3LnVybCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLWYgLXEgLS1uYW1lIHJlcG9fbmV3ICIkc3VibW9kdXJsL3JlcG8uZ2l0IiByZXBvICYmCisJCXRlc3QgLWQgcmVwbyAmJgorCQllY2hvICJyZXBvIiA+ZXhwZWN0ICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnJlcG9fbmV3LnBhdGggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWVjaG8gIiRzdWJtb2R1cmwvcmVwby5naXQiID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmVwb19uZXcudXJsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQllY2hvICIkc3VibW9kdXJsL3JlcG8uZ2l0IiA+ZXhwZWN0ICYmCisJCWdpdCBjb25maWcgc3VibW9kdWxlLnJlcG9fbmV3LnVybCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBhIHNlY29uZCBzdWJtb2R1bGUnICcKKwlnaXQgc3VibW9kdWxlIGFkZCAuL2luaXQyIGV4YW1wbGUyICYmCisJZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlIGV4YW1wbGUyIGFkZGVkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgZGVpbml0IHdvcmtzIG9uIHJlcG9zaXRvcnkgd2l0aG91dCBzdWJtb2R1bGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbmV3ZGlyZWN0b3J5IiAmJgorCW1rZGlyIG5ld2RpcmVjdG9yeSAmJgorCSgKKwkJY2QgbmV3ZGlyZWN0b3J5ICYmCisJCWdpdCBpbml0ICYmCisJCT5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tICJyZXBvIHNob3VsZCBub3QgYmUgZW1wdHkiICYmCisJCWdpdCBzdWJtb2R1bGUgZGVpbml0IC4gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBkZWluaXQgLS1hbGwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBkZWluaXQgc2hvdWxkIHJlbW92ZSB0aGUgd2hvbGUgc3VibW9kdWxlIHNlY3Rpb24gZnJvbSAuZ2l0L2NvbmZpZycgJworCWdpdCBjb25maWcgc3VibW9kdWxlLmV4YW1wbGUuZm9vIGJhciAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLmV4YW1wbGUyLmZyb3R6IG5pdGZvbCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IGluaXQgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGVcLiIpIiAmJgorCXRlc3QgLW4gIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZTJcLiIpIiAmJgorCXRlc3QgLWYgZXhhbXBsZTIvLmdpdCAmJgorCXJtZGlyIGluaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCBzaG91bGQgdW5zZXQgY29yZS53b3JrdHJlZScgJworCXRlc3RfcGF0aF9pc19maWxlIC5naXQvbW9kdWxlcy9leGFtcGxlL2NvbmZpZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdC9tb2R1bGVzL2V4YW1wbGUvY29uZmlnIGNvcmUud29ya3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCBmcm9tIHN1YmRpcmVjdG9yeScgJworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLmV4YW1wbGUuZm9vIGJhciAmJgorCW1rZGlyIC1wIHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBzdWJtb2R1bGUgZGVpbml0IC4uL2luaXQgPi4uL291dHB1dAorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJcXC5cXC4vaW5pdCIgb3V0cHV0ICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlXC4iKSIgJiYKKwl0ZXN0IC1uICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGUyXC4iKSIgJiYKKwl0ZXN0IC1mIGV4YW1wbGUyLy5naXQgJiYKKwlybWRpciBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBkZWluaXQgLiBkZWluaXRzIGFsbCBpbml0aWFsaXplZCBzdWJtb2R1bGVzJyAnCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZS5mb28gYmFyICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZTIuZnJvdHogbml0Zm9sICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBkZWluaXQgJiYKKwlnaXQgc3VibW9kdWxlIGRlaW5pdCAuID5hY3R1YWwgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGVcLiIpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZTJcLiIpIiAmJgorCXRlc3RfaTE4bmdyZXAgIkNsZWFyZWQgZGlyZWN0b3J5IC5pbml0IiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJDbGVhcmVkIGRpcmVjdG9yeSAuZXhhbXBsZTIiIGFjdHVhbCAmJgorCXJtZGlyIGluaXQgZXhhbXBsZTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCAtLWFsbCBkZWluaXRzIGFsbCBpbml0aWFsaXplZCBzdWJtb2R1bGVzJyAnCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZS5mb28gYmFyICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZTIuZnJvdHogbml0Zm9sICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBkZWluaXQgJiYKKwlnaXQgc3VibW9kdWxlIGRlaW5pdCAtLWFsbCA+YWN0dWFsICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlXC4iKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGUyXC4iKSIgJiYKKwl0ZXN0X2kxOG5ncmVwICJDbGVhcmVkIGRpcmVjdG9yeSAuaW5pdCIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmV4YW1wbGUyIiBhY3R1YWwgJiYKKwlybWRpciBpbml0IGV4YW1wbGUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBkZWluaXQgZGVpbml0cyBhIHN1Ym1vZHVsZSB3aGVuIGl0cyB3b3JrIHRyZWUgaXMgbWlzc2luZyBvciBlbXB0eScgJworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCXJtIC1yZiBpbml0IGV4YW1wbGUyLyogZXhhbXBsZTIvLmdpdCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IGluaXQgZXhhbXBsZTIgPmFjdHVhbCAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZVwuIikiICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlMlwuIikiICYmCisJdGVzdF9pMThuZ3JlcCAhICJDbGVhcmVkIGRpcmVjdG9yeSAuaW5pdCIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmV4YW1wbGUyIiBhY3R1YWwgJiYKKwlybWRpciBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBkZWluaXQgZmFpbHMgd2hlbiB0aGUgc3VibW9kdWxlIGNvbnRhaW5zIG1vZGlmaWNhdGlvbnMgdW5sZXNzIGZvcmNlZCcgJworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCWVjaG8gWCA+PmluaXQvcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgZGVpbml0IGluaXQgJiYKKwl0ZXN0IC1uICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGVcLiIpIiAmJgorCXRlc3QgLWYgZXhhbXBsZTIvLmdpdCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IC1mIGluaXQgPmFjdHVhbCAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZVwuIikiICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmluaXQiIGFjdHVhbCAmJgorCXJtZGlyIGluaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCBmYWlscyB3aGVuIHRoZSBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGZpbGVzIHVubGVzcyBmb3JjZWQnICcKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwllY2hvIFggPj5pbml0L3VudHJhY2tlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgZGVpbml0IGluaXQgJiYKKwl0ZXN0IC1uICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGVcLiIpIiAmJgorCXRlc3QgLWYgZXhhbXBsZTIvLmdpdCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IC1mIGluaXQgPmFjdHVhbCAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZVwuIikiICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmluaXQiIGFjdHVhbCAmJgorCXJtZGlyIGluaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCBmYWlscyB3aGVuIHRoZSBzdWJtb2R1bGUgSEVBRCBkb2VzIG5vdCBtYXRjaCB1bmxlc3MgZm9yY2VkJyAnCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJKAorCQljZCBpbml0ICYmCisJCWdpdCBjaGVja291dCBIRUFEXgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIGRlaW5pdCBpbml0ICYmCisJdGVzdCAtbiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlXC4iKSIgJiYKKwl0ZXN0IC1mIGV4YW1wbGUyLy5naXQgJiYKKwlnaXQgc3VibW9kdWxlIGRlaW5pdCAtZiBpbml0ID5hY3R1YWwgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGVcLiIpIiAmJgorCXRlc3RfaTE4bmdyZXAgIkNsZWFyZWQgZGlyZWN0b3J5IC5pbml0IiBhY3R1YWwgJiYKKwlybWRpciBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBkZWluaXQgaXMgc2lsZW50IHdoZW4gdXNlZCBvbiBhbiB1bmluaXRpYWxpemVkIHN1Ym1vZHVsZScgJworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IGluaXQgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIlN1Ym1vZHVsZSAuZXhhbXBsZS4gKC4qKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggLmluaXQiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIkNsZWFyZWQgZGlyZWN0b3J5IC5pbml0IiBhY3R1YWwgJiYKKwlnaXQgc3VibW9kdWxlIGRlaW5pdCBpbml0ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIlN1Ym1vZHVsZSAuZXhhbXBsZS4gKC4qKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggLmluaXQiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIkNsZWFyZWQgZGlyZWN0b3J5IC5pbml0IiBhY3R1YWwgJiYKKwlnaXQgc3VibW9kdWxlIGRlaW5pdCAuID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIlN1Ym1vZHVsZSAuZXhhbXBsZS4gKC4qKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggLmluaXQiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIlN1Ym1vZHVsZSAuZXhhbXBsZTIuICguKikgdW5yZWdpc3RlcmVkIGZvciBwYXRoIC5leGFtcGxlMiIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmluaXQiIGFjdHVhbCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IC4gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgISAiU3VibW9kdWxlIC5leGFtcGxlLiAoLiopIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAuaW5pdCIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAhICJTdWJtb2R1bGUgLmV4YW1wbGUyLiAoLiopIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAuZXhhbXBsZTIiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIkNsZWFyZWQgZGlyZWN0b3J5IC5pbml0IiBhY3R1YWwgJiYKKwlnaXQgc3VibW9kdWxlIGRlaW5pdCAtLWFsbCA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAhICJTdWJtb2R1bGUgLmV4YW1wbGUuICguKikgdW5yZWdpc3RlcmVkIGZvciBwYXRoIC5pbml0IiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIlN1Ym1vZHVsZSAuZXhhbXBsZTIuICguKikgdW5yZWdpc3RlcmVkIGZvciBwYXRoIC5leGFtcGxlMiIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmluaXQiIGFjdHVhbCAmJgorCXJtZGlyIGluaXQgZXhhbXBsZTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCBmYWlscyB3aGVuIHN1Ym1vZHVsZSBoYXMgYSAuZ2l0IGRpcmVjdG9yeSBldmVuIHdoZW4gZm9yY2VkJyAnCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJKAorCQljZCBpbml0ICYmCisJCXJtIC5naXQgJiYKKwkJY3AgLVIgLi4vLmdpdC9tb2R1bGVzL2V4YW1wbGUgLmdpdCAmJgorCQlHSVRfV09SS19UUkVFPS4gZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud29ya3RyZWUKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBkZWluaXQgaW5pdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgZGVpbml0IC1mIGluaXQgJiYKKwl0ZXN0IC1kIGluaXQvLmdpdCAmJgorCXRlc3QgLW4gIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZVwuIikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB3aXRoIFVURi04IG5hbWUnICcKKwlzdm5hbWU9JChwcmludGYgIlwzMDNcMjQ1IFwzMDNcMjQ0XDMwM1wyNjYiKSAmJgorCW1rZGlyICIkc3ZuYW1lIiAmJgorCSgKKwkJY2QgIiRzdm5hbWUiICYmCisJCWdpdCBpbml0ICYmCisJCT5zdWIgJiYKKwkJZ2l0IGFkZCBzdWIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiaW5pdCBzdWIiCisJKSAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIC4vIiRzdm5hbWUiICYmCisJZ2l0IHN1Ym1vZHVsZSA+JjIgJiYKKwl0ZXN0IC1uICIkKGdpdCBzdWJtb2R1bGUgfCBncmVwICIkc3ZuYW1lIikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgY2xvbmUgc2hhbGxvdyBzdWJtb2R1bGUnICcKKwlta2RpciBzdXBlciAmJgorCXB3ZD0kKHB3ZCkgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC0tZGVwdGg9MSBmaWxlOi8vIiRwd2QiL2V4YW1wbGUyIHN1Ym1vZHVsZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCXRlc3QgMSA9ICQoZ2l0IGxvZyAtLW9uZWxpbmUgfCB3YyAtbCkKKwkJKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGhlbHBlciBsaXN0IGlzIG5vdCBjb25mdXNlZCBieSBjb21tb24gcHJlZml4ZXMnICcKKwlta2RpciAtcCBkaXIxL2IgJiYKKwkoCisJCWNkIGRpcjEvYiAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIGhpID50ZXN0ZmlsZTIgJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLW0gInRlc3QxIgorCSkgJiYKKwlta2RpciAtcCBkaXIyL2IgJiYKKwkoCisJCWNkIGRpcjIvYiAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIGhlbGxvID50ZXN0ZmlsZTEgJiYKKwkJZ2l0IGFkZCAuICAmJgorCQlnaXQgY29tbWl0IC1tICJ0ZXN0MiIKKwkpICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgL2RpcjEvYiBkaXIxL2IgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAvZGlyMi9iIGRpcjIvYiAmJgorCWdpdCBjb21taXQgLW0gImZpcnN0IHN1Ym1vZHVsZSBjb21taXQiICYmCisJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgZGlyMS9iIHxjdXQgLWM1MS0gPmFjdHVhbCAmJgorCWVjaG8gImRpcjEvYiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3VwZXJwcm9qZWN0IHdpdGggc3VibW9kdWxlcycgJworCWdpdCBpbml0IHN1YjEgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdWIxIHRlc3QgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdWIxIHRlc3QyICYmCisJZ2l0IGluaXQgbXVsdGlzdXBlciAmJgorCWdpdCAtQyBtdWx0aXN1cGVyIHN1Ym1vZHVsZSBhZGQgLi4vc3ViMSBzdWIwICYmCisJZ2l0IC1DIG11bHRpc3VwZXIgc3VibW9kdWxlIGFkZCAuLi9zdWIxIHN1YjEgJiYKKwlnaXQgLUMgbXVsdGlzdXBlciBzdWJtb2R1bGUgYWRkIC4uL3N1YjEgc3ViMiAmJgorCWdpdCAtQyBtdWx0aXN1cGVyIHN1Ym1vZHVsZSBhZGQgLi4vc3ViMSBzdWIzICYmCisJZ2l0IC1DIG11bHRpc3VwZXIgY29tbWl0IC1tICJhZGQgc29tZSBzdWJtb2R1bGVzIgorJworCitjYXQgPmV4cGVjdCA8PC1FT0YKKy1zdWIwCisgc3ViMSAodGVzdDIpCisgc3ViMiAodGVzdDIpCisgc3ViMyAodGVzdDIpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgd2l0aCBhIHNwZWNpZmljYXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBtdWx0aXN1cGVyX2Nsb25lIiAmJgorCXB3ZD0kKHB3ZCkgJiYKKwlnaXQgY2xvbmUgZmlsZTovLyIkcHdkIi9tdWx0aXN1cGVyIG11bHRpc3VwZXJfY2xvbmUgJiYKKwlnaXQgLUMgbXVsdGlzdXBlcl9jbG9uZSBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAuICI6KGV4Y2x1ZGUpc3ViMCIgJiYKKwlnaXQgLUMgbXVsdGlzdXBlcl9jbG9uZSBzdWJtb2R1bGUgc3RhdHVzIHxjdXQgLWMgMSw0My0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgd2l0aCBzdWJtb2R1bGUuYWN0aXZlIHNldCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG11bHRpc3VwZXJfY2xvbmUiICYmCisJcHdkPSQocHdkKSAmJgorCWdpdCBjbG9uZSBmaWxlOi8vIiRwd2QiL211bHRpc3VwZXIgbXVsdGlzdXBlcl9jbG9uZSAmJgorCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIGNvbmZpZyBzdWJtb2R1bGUuYWN0aXZlICIuIiAmJgorCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuYWN0aXZlICI6KGV4Y2x1ZGUpc3ViMCIgJiYKKwlnaXQgLUMgbXVsdGlzdXBlcl9jbG9uZSBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIHN1Ym1vZHVsZSBzdGF0dXMgfGN1dCAtYyAxLDQzLSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGFuZCBzZXR0aW5nIHN1Ym1vZHVsZS48bmFtZT4uYWN0aXZlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbXVsdGlzdXBlcl9jbG9uZSIgJiYKKwlwd2Q9JChwd2QpICYmCisJZ2l0IGNsb25lIGZpbGU6Ly8iJHB3ZCIvbXVsdGlzdXBlciBtdWx0aXN1cGVyX2Nsb25lICYmCisJZ2l0IC1DIG11bHRpc3VwZXJfY2xvbmUgY29uZmlnIC0tYm9vbCBzdWJtb2R1bGUuc3ViMC5hY3RpdmUgInRydWUiICYmCisJZ2l0IC1DIG11bHRpc3VwZXJfY2xvbmUgY29uZmlnIC0tYm9vbCBzdWJtb2R1bGUuc3ViMS5hY3RpdmUgImZhbHNlIiAmJgorCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIGNvbmZpZyAtLWJvb2wgc3VibW9kdWxlLnN1YjIuYWN0aXZlICJ0cnVlIiAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBzdWIwICh0ZXN0MikKKwktc3ViMQorCSBzdWIyICh0ZXN0MikKKwktc3ViMworCUVPRgorCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgLUMgbXVsdGlzdXBlcl9jbG9uZSBzdWJtb2R1bGUgc3RhdHVzIHxjdXQgLWMgMSw0My0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgYWN0aXZlIHN1Ym1vZHVsZSB3aXRob3V0IHN1Ym1vZHVsZSB1cmwgc2V0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgdGVzdC90ZXN0IiAmJgorCW1rZGlyIHRlc3QgJiYKKwkjIGFub3RoZXIgZGlyIGJyZWFrcyBhY2NpZGVudGFsIHJlbGF0aXZlIHBhdGhzIHN0aWxsIGJlaW5nIGNvcnJlY3QKKwlnaXQgY2xvbmUgZmlsZTovLyIkcHdkIi9tdWx0aXN1cGVyIHRlc3QvdGVzdCAmJgorCSgKKwkJY2QgdGVzdC90ZXN0ICYmCisJCWdpdCBjb25maWcgc3VibW9kdWxlLmFjdGl2ZSAiLiIgJiYKKworCQkjIGRvIG5vdCBwYXNzIC0taW5pdCBmbGFnLCBhcyB0aGUgc3VibW9kdWxlIGlzIGFscmVhZHkgYWN0aXZlOgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyA+YWN0dWFsX3JhdyAmJgorCisJCWN1dCAtYyAxLDQzLSBhY3R1YWxfcmF3ID5hY3R1YWwgJiYKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQkgc3ViMCAodGVzdDIpCisJCSBzdWIxICh0ZXN0MikKKwkJIHN1YjIgKHRlc3QyKQorCQkgc3ViMyAodGVzdDIpCisJCUVPRgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyB3aXRoIGEgcGF0aHNwZWMgd29ya3MnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBtdWx0aXN1cGVyX2Nsb25lIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSBzdWIwICh0ZXN0MikKKwktc3ViMQorCS1zdWIyCisJLXN1YjMKKwlFT0YKKworCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcz0ic3ViMCIgbXVsdGlzdXBlciBtdWx0aXN1cGVyX2Nsb25lICYmCisJZ2l0IC1DIG11bHRpc3VwZXJfY2xvbmUgc3VibW9kdWxlIHN0YXR1cyB8Y3V0IC1jMSw0My0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIG11bHRpcGxlIC0tcmVjdXJzZS1zdWJtb2R1bGVzIG9wdGlvbnMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBtdWx0aXN1cGVyX2Nsb25lIiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwktc3ViMAorCSBzdWIxICh0ZXN0MikKKwktc3ViMgorCSBzdWIzICh0ZXN0MikKKwlFT0YKKworCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcz0iLiIgXAorCQkgIC0tcmVjdXJzZS1zdWJtb2R1bGVzPSI6KGV4Y2x1ZGUpc3ViMCIgXAorCQkgIC0tcmVjdXJzZS1zdWJtb2R1bGVzPSI6KGV4Y2x1ZGUpc3ViMiIgXAorCQkgIG11bHRpc3VwZXIgbXVsdGlzdXBlcl9jbG9uZSAmJgorCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIHN1Ym1vZHVsZSBzdGF0dXMgfGN1dCAtYzEsNDMtID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGFuZCBzdWJzZXF1ZW50IHVwZGF0ZXMgY29ycmVjdGx5IGF1dG8taW5pdGlhbGl6ZSBzdWJtb2R1bGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbXVsdGlzdXBlcl9jbG9uZSIgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJLXN1YjAKKwkgc3ViMSAodGVzdDIpCisJLXN1YjIKKwkgc3ViMyAodGVzdDIpCisJRU9GCisKKwljYXQgPDwtXEVPRiA+ZXhwZWN0MiAmJgorCS1zdWIwCisJIHN1YjEgKHRlc3QyKQorCS1zdWIyCisJIHN1YjMgKHRlc3QyKQorCS1zdWI0CisJIHN1YjUgKHRlc3QyKQorCUVPRgorCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzPSIuIiBcCisJCSAgLS1yZWN1cnNlLXN1Ym1vZHVsZXM9IjooZXhjbHVkZSlzdWIwIiBcCisJCSAgLS1yZWN1cnNlLXN1Ym1vZHVsZXM9IjooZXhjbHVkZSlzdWIyIiBcCisJCSAgLS1yZWN1cnNlLXN1Ym1vZHVsZXM9IjooZXhjbHVkZSlzdWI0IiBcCisJCSAgbXVsdGlzdXBlciBtdWx0aXN1cGVyX2Nsb25lICYmCisKKwlnaXQgLUMgbXVsdGlzdXBlcl9jbG9uZSBzdWJtb2R1bGUgc3RhdHVzIHxjdXQgLWMxLDQzLSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IC1DIG11bHRpc3VwZXIgc3VibW9kdWxlIGFkZCAuLi9zdWIxIHN1YjQgJiYKKwlnaXQgLUMgbXVsdGlzdXBlciBzdWJtb2R1bGUgYWRkIC4uL3N1YjEgc3ViNSAmJgorCWdpdCAtQyBtdWx0aXN1cGVyIGNvbW1pdCAtbSAiYWRkIG1vcmUgc3VibW9kdWxlcyIgJiYKKwkjIG9idGFpbiB0aGUgbmV3IHN1cGVycHJvamVjdAorCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIHB1bGwgJiYKKwlnaXQgLUMgbXVsdGlzdXBlcl9jbG9uZSBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIHN1Ym1vZHVsZSBzdGF0dXMgfGN1dCAtYzEsNDMtID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHByb3Blcmx5IHNldHMgdGhlIGNvbmZpZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG11bHRpc3VwZXJfY2xvbmUiICYmCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzPSIuIiBcCisJCSAgLS1yZWN1cnNlLXN1Ym1vZHVsZXM9IjooZXhjbHVkZSlzdWIwIiBcCisJCSAgbXVsdGlzdXBlciBtdWx0aXN1cGVyX2Nsb25lICYmCisKKwlnaXQgLUMgbXVsdGlzdXBlcl9jbG9uZSBzdWJtb2R1bGUgaW5pdCAtLSBzdWIwIHN1YjEgJiYKKwlnaXQgLUMgbXVsdGlzdXBlcl9jbG9uZSBjb25maWcgLS1nZXQgc3VibW9kdWxlLnN1YjAuYWN0aXZlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIG11bHRpc3VwZXJfY2xvbmUgY29uZmlnIC0tZ2V0IHN1Ym1vZHVsZS5zdWIxLmFjdGl2ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWN1cnNpdmUgY2xvbmUgcmVzcGVjdHMgLXEnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBtdWx0aXN1cGVyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtcSAtLXJlY3Vyc2Utc3VibW9kdWxlcyBtdWx0aXN1cGVyIG11bHRpc3VwZXJfY2xvbmUgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDAxLXN1Ym1vZHVsZS1zdW1tYXJ5LnNoIGIvdC90NzQwMS1zdWJtb2R1bGUtc3VtbWFyeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YmM4NDFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwMS1zdWJtb2R1bGUtc3VtbWFyeS5zaApAQCAtMCwwICsxLDMwNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBQaW5nIFlpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdTdW1tYXJ5IHN1cHBvcnQgZm9yIHN1Ym1vZHVsZXMKKworVGhpcyB0ZXN0IHRyaWVzIHRvIHZlcmlmeSB0aGUgc2FuaXR5IG9mIHN1bW1hcnkgc3ViY29tbWFuZCBvZiBnaXQgc3VibW9kdWxlLgorJworCisuIC4vdGVzdC1saWIuc2gKKworYWRkX2ZpbGUgKCkgeworCXNtPSQxCisJc2hpZnQKKwlvd2Q9JChwd2QpCisJY2QgIiRzbSIKKwlmb3IgbmFtZTsgZG8KKwkJZWNobyAiJG5hbWUiID4gIiRuYW1lIiAmJgorCQlnaXQgYWRkICIkbmFtZSIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCAkbmFtZSIKKwlkb25lID4vZGV2L251bGwKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgfCBjdXQgLWMxLTcKKwljZCAiJG93ZCIKK30KK2NvbW1pdF9maWxlICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0ICIkQCIgLW0gIkNvbW1pdCAkKiIgPi9kZXYvbnVsbAorfQorCit0ZXN0X2NyZWF0ZV9yZXBvIHNtMSAmJgorYWRkX2ZpbGUgLiBmb28gPi9kZXYvbnVsbAorCitoZWFkMT0kKGFkZF9maWxlIHNtMSBmb28xIGZvbzIpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGVkIHN1Ym1vZHVsZScgIgorCWdpdCBhZGQgc20xICYmCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgMDAwMDAwMC4uLiRoZWFkMSAoMik6CisgID4gQWRkIGZvbzIKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGVkIHN1Ym1vZHVsZSAoc3ViZGlyZWN0b3J5KScgIgorCW1rZGlyIHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+Li4vYWN0dWFsCisJKSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIC4uL3NtMSAwMDAwMDAwLi4uJGhlYWQxICgyKToKKyAgPiBBZGQgZm9vMgorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkZWQgc3VibW9kdWxlIChzdWJkaXJlY3Rvcnkgb25seSknICIKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHN1bW1hcnkgLiA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkZWQgc3VibW9kdWxlIChzdWJkaXJlY3Rvcnkgd2l0aCBleHBsaWNpdCBwYXRoKScgIgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSAuLi9zbTEgPi4uL2FjdHVhbAorCSkgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiAuLi9zbTEgMDAwMDAwMC4uLiRoZWFkMSAoMik6CisgID4gQWRkIGZvbzIKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2NvbW1pdF9maWxlIHNtMSAmJgoraGVhZDI9JChhZGRfZmlsZSBzbTEgZm9vMykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGZvcndhcmQpJyAiCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQxLi4uJGhlYWQyICgxKToKKyAgPiBBZGQgZm9vMworCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGZvcndhcmQpLCAtLWZpbGVzJyAiCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC0tZmlsZXMgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDEuLi4kaGVhZDIgKDEpOgorICA+IEFkZCBmb28zCisKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBpZ25vcmU9YWxsIHNldHRpbmcgaGFzIGFueSBlZmZlY3QnICIKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zbTEucGF0aCBzbTEgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zbTEuaWdub3JlIGFsbCAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnNtMS5pZ25vcmUgYWxsICYmCisJZ2l0IGNvbmZpZyBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMgYWxsICYmCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQxLi4uJGhlYWQyICgxKToKKyAgPiBBZGQgZm9vMworCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZi5pZ25vcmVTdWJtb2R1bGVzICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zbTEgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnNtMQorIgorCisKK2NvbW1pdF9maWxlIHNtMSAmJgoraGVhZDM9JCgKKwljZCBzbTEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MiA+L2Rldi9udWxsICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIHwgY3V0IC1jMS03CispCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShiYWNrd2FyZCknICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDIuLi4kaGVhZDMgKDIpOgorICA8IEFkZCBmb28zCisgIDwgQWRkIGZvbzIKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2hlYWQ0PSQoYWRkX2ZpbGUgc20xIGZvbzQgZm9vNSkgJiYKK2hlYWQ0X2Z1bGw9JChHSVRfRElSPXNtMS8uZ2l0IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShiYWNrd2FyZCBhbmQgZm9yd2FyZCknICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDIuLi4kaGVhZDQgKDQpOgorICA+IEFkZCBmb281CisgID4gQWRkIGZvbzQKKyAgPCBBZGQgZm9vMworICA8IEFkZCBmb28yCisKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN1bW1hcnktbGltaXQnICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgLW4gMyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkMi4uLiRoZWFkNCAoNCk6CisgID4gQWRkIGZvbzUKKyAgPiBBZGQgZm9vNAorICA8IEFkZCBmb28zCisKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCitjb21taXRfZmlsZSBzbTEgJiYKK212IHNtMSBzbTEtYmFrICYmCitlY2hvIHNtMSA+c20xICYmCitoZWFkNT0kKGdpdCBoYXNoLW9iamVjdCBzbTEgfCBjdXQgLWMxLTcpICYmCitnaXQgYWRkIHNtMSAmJgorcm0gLWYgc20xICYmCittdiBzbTEtYmFrIHNtMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0eXBlY2hhbmdlZCBzdWJtb2R1bGUoc3VibW9kdWxlLT5ibG9iKSwgLS1jYWNoZWQnICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgLS1jYWNoZWQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDQoc3VibW9kdWxlKS0+JGhlYWQ1KGJsb2IpICgzKToKKyAgPCBBZGQgZm9vNQorCitFT0YKKwl0ZXN0X2kxOG5jbXAgYWN0dWFsIGV4cGVjdGVkCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZShzdWJtb2R1bGUtPmJsb2IpLCAtLWZpbGVzJyAiCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC0tZmlsZXMgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDUoYmxvYiktPiRoZWFkNChzdWJtb2R1bGUpICgzKToKKyAgPiBBZGQgZm9vNQorCitFT0YKKwl0ZXN0X2kxOG5jbXAgYWN0dWFsIGV4cGVjdGVkCisiCisKK3JtIC1yZiBzbTEgJiYKK2dpdCBjaGVja291dC1pbmRleCBzbTEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZShzdWJtb2R1bGUtPmJsb2IpJyAiCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQ0KHN1Ym1vZHVsZSktPiRoZWFkNShibG9iKToKKworRU9GCisJdGVzdF9pMThuY21wIGFjdHVhbCBleHBlY3RlZAorIgorCitybSAtZiBzbTEgJiYKK3Rlc3RfY3JlYXRlX3JlcG8gc20xICYmCitoZWFkNj0kKGFkZF9maWxlIHNtMSBmb282IGZvbzcpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25leGlzdGVudCBjb21taXQnICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDQuLi4kaGVhZDY6CisgIFdhcm46IHNtMSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRoZWFkNF9mdWxsCisKK0VPRgorCXRlc3RfaTE4bmNtcCBhY3R1YWwgZXhwZWN0ZWQKKyIKKworY29tbWl0X2ZpbGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZShibG9iLT5zdWJtb2R1bGUpJyAiCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQ1KGJsb2IpLT4kaGVhZDYoc3VibW9kdWxlKSAoMik6CisgID4gQWRkIGZvbzcKKworRU9GCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCitjb21taXRfZmlsZSBzbTEgJiYKK3JtIC1yZiBzbTEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZWQgc3VibW9kdWxlJyAiCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQ2Li4uMDAwMDAwMDoKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBzZWNvbmQgc3VibW9kdWxlJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzbTIgJiYKKwloZWFkNz0kKGFkZF9maWxlIHNtMiBmb284IGZvbzkpICYmCisJZ2l0IGFkZCBzbTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgc3VibW9kdWxlcycgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkNi4uLjAwMDAwMDA6CisKKyogc20yIDAwMDAwMDAuLi4kaGVhZDcgKDIpOgorICA+IEFkZCBmb285CisKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRoIGZpbHRlcicgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSBzbTIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMiAwMDAwMDAwLi4uJGhlYWQ3ICgyKToKKyAgPiBBZGQgZm9vOQorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworY29tbWl0X2ZpbGUgc20yCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXZlbiBjb21taXQnICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgSEVBRF4gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDYuLi4wMDAwMDAwOgorCisqIHNtMiAwMDAwMDAwLi4uJGhlYWQ3ICgyKToKKyAgPiBBZGQgZm9vOQorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1mb3Itc3RhdHVzJyAiCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC0tZm9yLXN0YXR1cyBIRUFEXiA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGFjdHVhbCAtIDw8RU9GCisqIHNtMSAkaGVhZDYuLi4wMDAwMDAwOgorCisqIHNtMiAwMDAwMDAwLi4uJGhlYWQ3ICgyKToKKyAgPiBBZGQgZm9vOQorCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCB3aGVuIHVzaW5nIC0tZmlsZXMgdG9nZXRoZXIgd2l0aCAtLWNhY2hlZCcgIgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSAtLWZpbGVzIC0tY2FjaGVkCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3VsZCBub3QgZmFpbCBpbiBhbiBlbXB0eSByZXBvJyAiCisJZ2l0IGluaXQgeHl6enkgJiYKKwljZCB4eXp6eSAmJgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+b3V0cHV0IDI+JjEgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0CisiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwMi1zdWJtb2R1bGUtcmViYXNlLnNoIGIvdC90NzQwMi1zdWJtb2R1bGUtcmViYXNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlMzJmMTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDAyLXN1Ym1vZHVsZS1yZWJhc2Uuc2gKQEAgLTAsMCArMSwxMTggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJlYmFzaW5nLCBzdGFzaGluZywgZXRjLiB3aXRoIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWVjaG8gZmlsZSA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgY2xvbmUgLiBzdWJtb2R1bGUgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc3VibW9kdWxlICYmCisJZWNobyBzZWNvbmQgbGluZSA+PiBmaWxlICYmCisJKGNkIHN1Ym1vZHVsZSAmJiBnaXQgcHVsbCkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGZpbGUtYW5kLXN1Ym1vZHVsZSAtYSAmJgorCWdpdCBicmFuY2ggYWRkZWQtc3VibW9kdWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHdpdGggYSBkaXJ0eSBzdWJtb2R1bGUnICcKKworCShjZCBzdWJtb2R1bGUgJiYKKwkgZWNobyAzcmQgbGluZSA+PiBmaWxlICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1tIGZvcmsgLWEpICYmCisJZWNobyB1bnJlbGF0ZWQgPj4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB1bnJlbGF0ZWQgZmlsZTIgJiYKKwllY2hvIG90aGVyIGxpbmUgPj4gZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdXBkYXRlIGZpbGUgJiYKKwlDVVJSRU5UPSQoY2Qgc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlFWFBFQ1RFRD0kKGdpdCByZXYtcGFyc2UgSEVBRH4yOnN1Ym1vZHVsZSkgJiYKKwlHSVRfVFJBQ0U9MSBnaXQgcmViYXNlIC0tb250byBIRUFEfjIgSEVBRF4gJiYKKwlTVE9SRUQ9JChnaXQgcmV2LXBhcnNlIEhFQUQ6c3VibW9kdWxlKSAmJgorCXRlc3QgJEVYUEVDVEVEID0gJFNUT1JFRCAmJgorCXRlc3QgJENVUlJFTlQgPSAkKGNkIHN1Ym1vZHVsZSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCisKKycKKworY2F0ID4gZmFrZS1lZGl0b3Iuc2ggPDwgXEVPRgorIyEvYmluL3NoCitlY2hvICRFRElUT1JfVEVYVAorRU9GCitjaG1vZCBhK3ggZmFrZS1lZGl0b3Iuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJhY3RpdmUgcmViYXNlIHdpdGggYSBkaXJ0eSBzdWJtb2R1bGUnICcKKworCXRlc3Qgc3VibW9kdWxlID0gJChnaXQgZGlmZiAtLW5hbWUtb25seSkgJiYKKwlIRUFEPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCUdJVF9FRElUT1I9IlwiJChwd2QpL2Zha2UtZWRpdG9yLnNoXCIiIEVESVRPUl9URVhUPSJwaWNrICRIRUFEIiBcCisJCWdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwl0ZXN0IHN1Ym1vZHVsZSA9ICQoZ2l0IGRpZmYgLS1uYW1lLW9ubHkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHdpdGggZGlydHkgZmlsZSBhbmQgc3VibW9kdWxlIGZhaWxzJyAnCisKKwllY2hvIHlldCBhbm90aGVyIGxpbmUgPj4gZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gbmV4dCBmaWxlICYmCisJZWNobyByZXdyaXRlID4gZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gcmV3cml0ZSBmaWxlICYmCisJZWNobyBkaXJ0eSA+IGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tb250byBIRUFEfjIgSEVBRF4KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCB3aXRoIGEgZGlydHkgc3VibW9kdWxlJyAnCisKKwllY2hvIG5ldyA+IGZpbGUgJiYKKwlDVVJSRU5UPSQoY2Qgc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0IG5ldyAhPSAkKGNhdCBmaWxlKSAmJgorCXRlc3Qgc3VibW9kdWxlID0gJChnaXQgZGlmZiAtLW5hbWUtb25seSkgJiYKKwl0ZXN0ICRDVVJSRU5UID0gJChjZCBzdWJtb2R1bGUgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgbmV3ID0gJChjYXQgZmlsZSkgJiYKKwl0ZXN0ICRDVVJSRU5UID0gJChjZCBzdWJtb2R1bGUgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzaW5nIHN1Ym1vZHVsZSB0aGF0IHNob3VsZCBjb25mbGljdCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYWRkZWQtc3VibW9kdWxlICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHRoaXJkICYmCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGV4dHJhCisJKSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBmb3VydGggJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1vbnRvIEhFQUReXiBIRUFEXiBIRUFEXjAgJiYKKwlnaXQgbHMtZmlsZXMgLXMgc3VibW9kdWxlID5hY3R1YWwgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQllY2hvICIxNjAwMDAgJChnaXQgcmV2LXBhcnNlIEhFQUReKSAxCXN1Ym1vZHVsZSIgJiYKKwkJZWNobyAiMTYwMDAwICQoZ2l0IHJldi1wYXJzZSBIRUFEXl4pIDIJc3VibW9kdWxlIiAmJgorCQllY2hvICIxNjAwMDAgJChnaXQgcmV2LXBhcnNlIEhFQUQpIDMJc3VibW9kdWxlIgorCSkgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDAzLXN1Ym1vZHVsZS1zeW5jLnNoIGIvdC90NzQwMy1zdWJtb2R1bGUtc3luYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNzI2Nzk5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwMy1zdWJtb2R1bGUtc3luYy5zaApAQCAtMCwwICsxLDM1MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBEYXZpZCBBZ3VpbGFyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdWJtb2R1bGUgc3luYworCitUaGVzZSB0ZXN0cyBleGVyY2lzZSB0aGUgImdpdCBzdWJtb2R1bGUgc3luYyIgc3ViY29tbWFuZC4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gZmlsZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdXBzdHJlYW0gJiYKKwlnaXQgY2xvbmUgLiBzdXBlciAmJgorCWdpdCBjbG9uZSBzdXBlciBzdWJtb2R1bGUgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3ViLXN1Ym1vZHVsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3ViLXN1Ym1vZHVsZSIKKwkpICYmCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3VibW9kdWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUiCisJKSAmJgorCWdpdCBjbG9uZSBzdXBlciBzdXBlci1jbG9uZSAmJgorCSgKKwkJY2Qgc3VwZXItY2xvbmUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlCisJKSAmJgorCWdpdCBjbG9uZSBzdXBlciBlbXB0eS1jbG9uZSAmJgorCSgKKwkJY2QgZW1wdHktY2xvbmUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0CisJKSAmJgorCWdpdCBjbG9uZSBzdXBlciB0b3Atb25seS1jbG9uZSAmJgorCWdpdCBjbG9uZSBzdXBlciByZWxhdGl2ZS1jbG9uZSAmJgorCSgKKwkJY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlCisJKSAmJgorCWdpdCBjbG9uZSBzdXBlciByZWN1cnNpdmUtY2xvbmUgJiYKKwkoCisJCWNkIHJlY3Vyc2l2ZS1jbG9uZSAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBzdWJtb2R1bGUnICcKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQllY2hvIHNlY29uZCBsaW5lID4+ZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIHN1Ym1vZHVsZSIKKwkpCisnCisKK3Jlc2V0X3N1Ym1vZHVsZV91cmxzICgpIHsKKwkoCisJCXJvb3Q9JChwd2QpICYmCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsICIkcm9vdC9zdWJtb2R1bGUiCisJKSAmJgorCSgKKwkJcm9vdD0kKHB3ZCkgJiYKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAiJHJvb3Qvc3VibW9kdWxlIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIHN1Ym1vZHVsZSB1cmwnICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWNkIHN1Ym1vZHVsZSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBwdWxsCisJKSAmJgorCW12IHN1Ym1vZHVsZSBtb3ZlZC1zdWJtb2R1bGUgJiYKKwkoCisJCWNkIG1vdmVkLXN1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWItc3VibW9kdWxlLnVybCAuLi9tb3ZlZC1zdWJtb2R1bGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gbW92ZWQtc3ViLXN1Ym1vZHVsZQorCSkgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwgLi4vbW92ZWQtc3VibW9kdWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tIG1vdmVkLXN1Ym1vZHVsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgc2hvdWxkIHVwZGF0ZSBzdWJtb2R1bGUgVVJMcycgJworCSgKKwkJY2Qgc3VwZXItY2xvbmUgJiYKKwkJZ2l0IHB1bGwgLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jCisJKSAmJgorCXRlc3QgLWQgIiQoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCisJKSIgJiYKKwl0ZXN0ICEgLWQgIiQoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZS9zdWItc3VibW9kdWxlICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwKKwkpIiAmJgorCSgKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHB1bGwKKwkpICYmCisJKAorCQljZCBzdXBlci1jbG9uZSAmJgorCQl0ZXN0IC1kICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwpIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyAtLXJlY3Vyc2l2ZSIgc2hvdWxkIHVwZGF0ZSBhbGwgc3VibW9kdWxlIFVSTHMnICcKKwkoCisJCWNkIHN1cGVyLWNsb25lICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJZ2l0IHB1bGwgLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMKKwkJKSAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgLS1yZWN1cnNpdmUKKwkpICYmCisJdGVzdCAtZCAiJCgKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwKKwkpIiAmJgorCXRlc3QgLWQgIiQoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZS9zdWItc3VibW9kdWxlICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwKKwkpIiAmJgorCSgKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgcHVsbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgc3VibW9kdWxlIFVSTHMnICcKKwlyZXNldF9zdWJtb2R1bGVfdXJscyBzdXBlci1jbG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIiBzaG91bGQgdXBkYXRlIHN1Ym1vZHVsZSBVUkxzIC0gc3ViZGlyZWN0b3J5JyAnCisJKAorCQljZCBzdXBlci1jbG9uZSAmJgorCQlnaXQgcHVsbCAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyAmJgorCQlta2RpciAtcCBzdWIgJiYKKwkJY2Qgc3ViICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyA+Li4vLi4vb3V0cHV0CisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIlxcLlxcLi9zdWJtb2R1bGUiIG91dHB1dCAmJgorCXRlc3QgLWQgIiQoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCisJKSIgJiYKKwl0ZXN0ICEgLWQgIiQoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZS9zdWItc3VibW9kdWxlICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwKKwkpIiAmJgorCSgKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHB1bGwKKwkpICYmCisJKAorCQljZCBzdXBlci1jbG9uZSAmJgorCQl0ZXN0IC1kICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwpIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyAtLXJlY3Vyc2l2ZSIgc2hvdWxkIHVwZGF0ZSBhbGwgc3VibW9kdWxlIFVSTHMgLSBzdWJkaXJlY3RvcnknICcKKwkoCisJCWNkIHN1cGVyLWNsb25lICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJZ2l0IHB1bGwgLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMKKwkJKSAmJgorCQlta2RpciAtcCBzdWIgJiYKKwkJY2Qgc3ViICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAtLXJlY3Vyc2l2ZSA+Li4vLi4vb3V0cHV0CisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIlxcLlxcLi9zdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSIgb3V0cHV0ICYmCisJdGVzdCAtZCAiJCgKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwKKwkpIiAmJgorCXRlc3QgLWQgIiQoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZS9zdWItc3VibW9kdWxlICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwKKwkpIiAmJgorCSgKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgcHVsbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgc2hvdWxkIHVwZGF0ZSBrbm93biBzdWJtb2R1bGUgVVJMcycgJworCSgKKwkJY2QgZW1wdHktY2xvbmUgJiYKKwkJZ2l0IHB1bGwgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCisJCXRlc3QgLWQgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIiBzaG91bGQgbm90IHZpdmlmeSB1bmludGVyZXN0aW5nIHN1Ym1vZHVsZScgJworCSgKKwkJY2QgdG9wLW9ubHktY2xvbmUgJiYKKwkJZ2l0IHB1bGwgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCisJCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCkiICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyBzdWJtb2R1bGUgJiYKKwkJdGVzdCAteiAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIGhhbmRsZXMgb3JpZ2luIFVSTCBvZiB0aGUgZm9ybSBmb28nICcKKwkoCisJCWNkIHJlbGF0aXZlLWNsb25lICYmCisJCWdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gZm9vICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCSNhY3R1YWwgZmFpbHMgd2l0aDogImNhbm5vdCBzdHJpcCBvZmYgdXJsIGZvbworCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vc3VibW9kdWxlIgorCQkpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIiBoYW5kbGVzIG9yaWdpbiBVUkwgb2YgdGhlIGZvcm0gZm9vL2JhcicgJworCSgKKwkJY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiBmb28vYmFyICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCSNhY3R1YWwgZm9vL3N1Ym1vZHVsZQorCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vZm9vL3N1Ym1vZHVsZSIKKwkJKSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgorCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgIT0gIi4uLy4uL2Zvby9zdWJtb2R1bGUiCisJCSkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMgLS1yZWN1cnNpdmUiIHByb3BhZ2F0ZXMgY2hhbmdlcyBpbiBvcmlnaW4nICcKKwkoCisJCWNkIHJlY3Vyc2l2ZS1jbG9uZSAmJgorCQlnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIGZvby9iYXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jIC0tcmVjdXJzaXZlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJI2FjdHVhbCBmb28vc3VibW9kdWxlCisJCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi9mb28vc3VibW9kdWxlIgorCQkpICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZS9zdWItc3VibW9kdWxlICYmCisJCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi8uLi9mb28vc3VibW9kdWxlIgorCQkpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIiBoYW5kbGVzIG9yaWdpbiBVUkwgb2YgdGhlIGZvcm0gLi9mb28nICcKKwkoCisJCWNkIHJlbGF0aXZlLWNsb25lICYmCisJCWdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gLi9mb28gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJI2FjdHVhbCAuL3N1Ym1vZHVsZQorCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vc3VibW9kdWxlIgorCQkpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIiBoYW5kbGVzIG9yaWdpbiBVUkwgb2YgdGhlIGZvcm0gLi9mb28vYmFyJyAnCisJKAorCQljZCByZWxhdGl2ZS1jbG9uZSAmJgorCQlnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIC4vZm9vL2JhciAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQkjYWN0dWFsIC4vZm9vL3N1Ym1vZHVsZQorCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vZm9vL3N1Ym1vZHVsZSIKKwkJKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIC4uL2ZvbycgJworCSgKKwkJY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAuLi9mb28gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJI2FjdHVhbCAuLi9zdWJtb2R1bGUKKwkJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uLy4uL3N1Ym1vZHVsZSIKKwkJKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIC4uL2Zvby9iYXInICcKKwkoCisJCWNkIHJlbGF0aXZlLWNsb25lICYmCisJCWdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gLi4vZm9vL2JhciAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQkjYWN0dWFsIC4uL2Zvby9zdWJtb2R1bGUKKwkJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uLy4uL2Zvby9zdWJtb2R1bGUiCisJCSkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIGhhbmRsZXMgb3JpZ2luIFVSTCBvZiB0aGUgZm9ybSAuLi9mb28vYmFyIHdpdGggZGVlcGx5IG5lc3RlZCBzdWJtb2R1bGUnICcKKwkoCisJCWNkIHJlbGF0aXZlLWNsb25lICYmCisJCWdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gLi4vZm9vL2JhciAmJgorCQlta2RpciAtcCBhL2IvYyAmJgorCQkoCisJCQljZCBhL2IvYyAmJgorCQkJZ2l0IGluaXQgJiYKKwkJCT4uZ2l0aWdub3JlICYmCisJCQlnaXQgYWRkIC5naXRpZ25vcmUgJiYKKwkJCXRlc3RfdGljayAmJgorCQkJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiCisJCSkgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vYmFyL2EvYi9jIC4vYS9iL2MgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCisJCSgKKwkJCWNkIGEvYi9jICYmCisJCQkjYWN0dWFsIC4uL2Zvby9iYXIvYS9iL2MKKwkJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uLy4uLy4uLy4uL2Zvby9iYXIvYS9iL2MiCisJCSkKKwkpCisnCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDA1LXN1Ym1vZHVsZS1tZXJnZS5zaCBiL3QvdDc0MDUtc3VibW9kdWxlLW1lcmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFhMzM5NzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDA1LXN1Ym1vZHVsZS1tZXJnZS5zaApAQCAtMCwwICsxLDQ1NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdpbmcgd2l0aCBzdWJtb2R1bGVzJworCisuIC4vdGVzdC1saWIuc2gKKworIworIyBoaXN0b3J5CisjCisjICAgICAgICBhIC0tLSBjCisjICAgICAgLyAgIFwgLworIyByb290ICAgICAgWAorIyAgICAgIFwgICAvIFwKKyMgICAgICAgIGIgLS0tIGQKKyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlta2RpciBzdWIgJiYKKwkoY2Qgc3ViICYmCisJIGdpdCBpbml0ICYmCisJIGVjaG8gb3JpZ2luYWwgPiBmaWxlICYmCisJIGdpdCBhZGQgZmlsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSBzdWItcm9vdCkgJiYKKwlnaXQgYWRkIHN1YiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gcm9vdCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGEgbWFzdGVyICYmCisJKGNkIHN1YiAmJgorCSBlY2hvIEEgPiBmaWxlICYmCisJIGdpdCBhZGQgZmlsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSBzdWItYSkgJiYKKwlnaXQgYWRkIHN1YiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gYSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGIgbWFzdGVyICYmCisJKGNkIHN1YiAmJgorCSBlY2hvIEIgPiBmaWxlICYmCisJIGdpdCBhZGQgZmlsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSBzdWItYikgJiYKKwlnaXQgYWRkIHN1YiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gYiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGMgYSAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIGIgJiYKKworCWdpdCBjaGVja291dCAtYiBkIGIgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyBhCisnCisKKyMgSGlzdG9yeSBzZXR1cAorIworIyAgICAgICAgICAgICBiCisjICAgICAgICAgICAvICAgXAorIyAgaW5pdCAtLSBhICAgICBkCisjICAgIFwgICAgICBcICAgLworIyAgICAgZyAgICAgICBjCisjCisjIGEgaW4gdGhlIG1haW4gcmVwb3NpdG9yeSByZWNvcmRzIHRvIHN1Yi1hIGluIHRoZSBzdWJtb2R1bGUgYW5kCisjIGFuYWxvZ291cyBiIGFuZCBjLiBkIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IGZvdW5kIGJ5IG1lcmdpbmcgYyBpbnRvCisjIGIgaW4gdGhlIG1haW4gcmVwb3NpdG9yeS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBtZXJnZSBzZWFyY2gnICcKKwlta2RpciBtZXJnZS1zZWFyY2ggJiYKKwkoY2QgbWVyZ2Utc2VhcmNoICYmCisJZ2l0IGluaXQgJiYKKwlta2RpciBzdWIgJiYKKwkoY2Qgc3ViICYmCisJIGdpdCBpbml0ICYmCisJIGVjaG8gImZpbGUtYSIgPiBmaWxlLWEgJiYKKwkgZ2l0IGFkZCBmaWxlLWEgJiYKKwkgZ2l0IGNvbW1pdCAtbSAic3ViLWEiICYmCisJIGdpdCBicmFuY2ggc3ViLWEpICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGluaXQgJiYKKwlnaXQgYnJhbmNoIGluaXQgJiYKKwlnaXQgYWRkIHN1YiAmJgorCWdpdCBjb21taXQgLW0gImEiICYmCisJZ2l0IGJyYW5jaCBhICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYiAmJgorCShjZCBzdWIgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHN1Yi1iICYmCisJIGVjaG8gImZpbGUtYiIgPiBmaWxlLWIgJiYKKwkgZ2l0IGFkZCBmaWxlLWIgJiYKKwkgZ2l0IGNvbW1pdCAtbSAic3ViLWIiKSAmJgorCWdpdCBjb21taXQgLWEgLW0gImIiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYyBhICYmCisJKGNkIHN1YiAmJgorCSBnaXQgY2hlY2tvdXQgLWIgc3ViLWMgc3ViLWEgJiYKKwkgZWNobyAiZmlsZS1jIiA+IGZpbGUtYyAmJgorCSBnaXQgYWRkIGZpbGUtYyAmJgorCSBnaXQgY29tbWl0IC1tICJzdWItYyIpICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiYyIgJiYKKworCWdpdCBjaGVja291dCAtYiBkIGEgJiYKKwkoY2Qgc3ViICYmCisJIGdpdCBjaGVja291dCAtYiBzdWItZCBzdWItYiAmJgorCSBnaXQgbWVyZ2Ugc3ViLWMpICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiZCIgJiYKKwlnaXQgYnJhbmNoIHRlc3QgYiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGcgaW5pdCAmJgorCShjZCBzdWIgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHN1Yi1nIHN1Yi1jKSAmJgorCWdpdCBhZGQgc3ViICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiZyIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHdpdGggb25lIHNpZGUgYXMgYSBmYXN0LWZvcndhcmQgb2YgdGhlIG90aGVyJyAnCisJKGNkIG1lcmdlLXNlYXJjaCAmJgorCSBnaXQgY2hlY2tvdXQgLWIgdGVzdC1mb3J3YXJkIGIgJiYKKwkgZ2l0IG1lcmdlIGQgJiYKKwkgZ2l0IGxzLXRyZWUgdGVzdC1mb3J3YXJkIHN1YiB8IGN1dCAtZjEgfCBjdXQgLWYzIC1kIiAiID4gYWN0dWFsICYmCisJIChjZCBzdWIgJiYKKwkgIGdpdCByZXYtcGFyc2Ugc3ViLWQgPiAuLi9leHBlY3QpICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdpbmcgc2hvdWxkIGNvbmZsaWN0IGZvciBub24gZmFzdC1mb3J3YXJkJyAnCisJKGNkIG1lcmdlLXNlYXJjaCAmJgorCSBnaXQgY2hlY2tvdXQgLWIgdGVzdC1ub25mb3J3YXJkIGIgJiYKKwkgKGNkIHN1YiAmJgorCSAgZ2l0IHJldi1wYXJzZSBzdWItZCA+IC4uL2V4cGVjdCkgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMgMj4gYWN0dWFsICAmJgorCSBncmVwICQoY2F0IGV4cGVjdCkgYWN0dWFsID4gL2Rldi9udWxsICYmCisJIGdpdCByZXNldCAtLWhhcmQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdpbmcgc2hvdWxkIGZhaWwgZm9yIGFtYmlndW91cyBjb21tb24gcGFyZW50JyAnCisJKGNkIG1lcmdlLXNlYXJjaCAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0LWFtYmlndW91cyBiICYmCisJKGNkIHN1YiAmJgorCSBnaXQgY2hlY2tvdXQgLWIgYW1iaWd1b3VzIHN1Yi1iICYmCisJIGdpdCBtZXJnZSBzdWItYyAmJgorCSBnaXQgcmV2LXBhcnNlIHN1Yi1kID4gLi4vZXhwZWN0MSAmJgorCSBnaXQgcmV2LXBhcnNlIGFtYmlndW91cyA+IC4uL2V4cGVjdDIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMgMj4gYWN0dWFsICYmCisJZ3JlcCAkKGNhdCBleHBlY3QxKSBhY3R1YWwgPiAvZGV2L251bGwgJiYKKwlncmVwICQoY2F0IGV4cGVjdDIpIGFjdHVhbCA+IC9kZXYvbnVsbCAmJgorCWdpdCByZXNldCAtLWhhcmQpCisnCisKKyMgaW4gYSBzaXR1YXRpb24gbGlrZSB0aGlzCisjCisjIHN1Ym1vZHVsZSB0cmVlOgorIworIyAgICBzdWItYSAtLS0gc3ViLWIgLS0tIHN1Yi1kCisjCisjIG1haW4gdHJlZToKKyMKKyMgICAgZSAoc3ViLWEpCisjICAgLworIyAgYmIgKHN1Yi1iKQorIyAgIFwKKyMgICAgZiAoc3ViLWQpCisjCisjIEEgbWVyZ2UgYmV0d2VlbiBlIGFuZCBmIHNob3VsZCBmYWlsIGJlY2F1c2Ugb25lIG9mIHRoZSBzdWJtb2R1bGUKKyMgY29tbWl0cyAoc3ViLWEpIGRvZXMgbm90IGRlc2NlbmQgZnJvbSB0aGUgc3VibW9kdWxlIG1lcmdlLWJhc2UgKHN1Yi1iKS4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdpbmcgc2hvdWxkIGZhaWwgZm9yIGNoYW5nZXMgdGhhdCBhcmUgYmFja3dhcmRzJyAnCisJKGNkIG1lcmdlLXNlYXJjaCAmJgorCWdpdCBjaGVja291dCAtYiBiYiBhICYmCisJKGNkIHN1YiAmJgorCSBnaXQgY2hlY2tvdXQgc3ViLWIpICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiYmIiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgZSBiYiAmJgorCShjZCBzdWIgJiYKKwkgZ2l0IGNoZWNrb3V0IHN1Yi1hKSAmJgorCWdpdCBjb21taXQgLWEgLW0gImUiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgZiBiYiAmJgorCShjZCBzdWIgJiYKKwkgZ2l0IGNoZWNrb3V0IHN1Yi1kKSAmJgorCWdpdCBjb21taXQgLWEgLW0gImYiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdC1iYWNrd2FyZCBlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGYpCisnCisKKworIyBDaGVjayB0aGF0IHRoZSBjb25mbGljdGluZyBzdWJtb2R1bGUgaXMgZGV0ZWN0ZWQgd2hlbiBpdCBpcworIyBpbiB0aGUgY29tbW9uIGFuY2VzdG9yLiBzdGF0dXMgc2hvdWxkIGJlICdVMDAuLi4wMCIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdWJtb2R1bGUgc3RhdHVzIHNob3VsZCBkaXNwbGF5IHRoZSBtZXJnZSBjb25mbGljdCBwcm9wZXJseSB3aXRoIG1lcmdlIGJhc2UnICcKKyAgICAgICAoY2QgbWVyZ2Utc2VhcmNoICYmCisgICAgICAgY2F0ID4uZ2l0bW9kdWxlcyA8PEVPRiAmJgorW3N1Ym1vZHVsZSAic3ViIl0KKyAgICAgICBwYXRoID0gc3ViCisgICAgICAgdXJsID0gJFRSQVNIX0RJUkVDVE9SWS9zdWIKK0VPRgorICAgICAgIGNhdCA+ZXhwZWN0IDw8RU9GICYmCitVMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBzdWIKK0VPRgorICAgICAgIGdpdCBzdWJtb2R1bGUgc3RhdHVzID4gYWN0dWFsICYmCisgICAgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXNldCAtLWhhcmQpCisnCisKKyMgQ2hlY2sgdGhhdCB0aGUgY29uZmxpY3Rpbmcgc3VibW9kdWxlIGlzIGRldGVjdGVkIHdoZW4gaXQgaXMKKyMgbm90IGluIHRoZSBjb21tb24gYW5jZXN0b3IuIHN0YXR1cyBzaG91bGQgYmUgJ1UwMC4uLjAwIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgc2hvdWxkIGRpc3BsYXkgdGhlIG1lcmdlIGNvbmZsaWN0IHByb3Blcmx5IHdpdGhvdXQgbWVyZ2UtYmFzZScgJworICAgICAgIChjZCBtZXJnZS1zZWFyY2ggJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdC1uby1tZXJnZS1iYXNlIGcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYiAmJgorICAgICAgIGNhdCA+LmdpdG1vZHVsZXMgPDxFT0YgJiYKK1tzdWJtb2R1bGUgInN1YiJdCisgICAgICAgcGF0aCA9IHN1YgorICAgICAgIHVybCA9ICRUUkFTSF9ESVJFQ1RPUlkvc3ViCitFT0YKKyAgICAgICBjYXQgPmV4cGVjdCA8PEVPRiAmJgorVTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgc3ViCitFT0YKKyAgICAgICBnaXQgc3VibW9kdWxlIHN0YXR1cyA+IGFjdHVhbCAmJgorICAgICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKyAgICAgICBnaXQgcmVzZXQgLS1oYXJkKQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdpbmcgd2l0aCBhIG1vZGlmeS9tb2RpZnkgY29uZmxpY3QgYmV0d2VlbiBtZXJnZSBiYXNlcycgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0MiBjICYmCisJZ2l0IG1lcmdlIGQKKycKKworIyBjYW5vbmljYWwgY3Jpc3MtY3Jvc3MgaGlzdG9yeSBpbiB0b3AgYW5kIHN1Ym1vZHVsZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHJlY3Vyc2l2ZSBtZXJnZSB3aXRoIHN1Ym1vZHVsZScgJworCW1rZGlyIG1lcmdlLXJlY3Vyc2l2ZSAmJgorCShjZCBtZXJnZS1yZWN1cnNpdmUgJiYKKwkgZ2l0IGluaXQgJiYKKwkgbWtkaXIgc3ViICYmCisJIChjZCBzdWIgJiYKKwkgIGdpdCBpbml0ICYmCisJICB0ZXN0X2NvbW1pdCBhICYmCisJICBnaXQgY2hlY2tvdXQgLWIgc3ViLWIgbWFzdGVyICYmCisJICB0ZXN0X2NvbW1pdCBiICYmCisJICBnaXQgY2hlY2tvdXQgLWIgc3ViLWMgbWFzdGVyICYmCisJICB0ZXN0X2NvbW1pdCBjICYmCisJICBnaXQgY2hlY2tvdXQgLWIgc3ViLWJjIHN1Yi1iICYmCisJICBnaXQgbWVyZ2Ugc3ViLWMgJiYKKwkgIGdpdCBjaGVja291dCAtYiBzdWItY2Igc3ViLWMgJiYKKwkgIGdpdCBtZXJnZSBzdWItYiAmJgorCSAgZ2l0IGNoZWNrb3V0IG1hc3RlcikgJiYKKwkgZ2l0IGFkZCBzdWIgJiYKKwkgZ2l0IGNvbW1pdCAtbSBhICYmCisJIGdpdCBjaGVja291dCAtYiB0b3AtYiBtYXN0ZXIgJiYKKwkgKGNkIHN1YiAmJiBnaXQgY2hlY2tvdXQgc3ViLWIpICYmCisJIGdpdCBhZGQgc3ViICYmCisJIGdpdCBjb21taXQgLW0gYiAmJgorCSBnaXQgY2hlY2tvdXQgLWIgdG9wLWMgbWFzdGVyICYmCisJIChjZCBzdWIgJiYgZ2l0IGNoZWNrb3V0IHN1Yi1jKSAmJgorCSBnaXQgYWRkIHN1YiAmJgorCSBnaXQgY29tbWl0IC1tIGMgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHRvcC1iYyB0b3AtYiAmJgorCSBnaXQgbWVyZ2UgLXMgb3VycyAtLW5vLWNvbW1pdCB0b3AtYyAmJgorCSAoY2Qgc3ViICYmIGdpdCBjaGVja291dCBzdWItYmMpICYmCisJIGdpdCBhZGQgc3ViICYmCisJIGdpdCBjb21taXQgLW0gYmMgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHRvcC1jYiB0b3AtYyAmJgorCSBnaXQgbWVyZ2UgLXMgb3VycyAtLW5vLWNvbW1pdCB0b3AtYiAmJgorCSAoY2Qgc3ViICYmIGdpdCBjaGVja291dCBzdWItY2IpICYmCisJIGdpdCBhZGQgc3ViICYmCisJIGdpdCBjb21taXQgLW0gY2IpCisnCisKKyMgbWVyZ2Ugc2hvdWxkIGxlYXZlIHN1Ym1vZHVsZSB1bm1lcmdlZCBpbiBpbmRleAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjdXJzaXZlIG1lcmdlIHdpdGggc3VibW9kdWxlJyAnCisJKGNkIG1lcmdlLXJlY3Vyc2l2ZSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdG9wLWJjICYmCisJIGVjaG8gIjE2MDAwMCAkKGdpdCByZXYtcGFyc2UgdG9wLWNiOnN1YikgMglzdWIiID4gZXhwZWN0MiAmJgorCSBlY2hvICIxNjAwMDAgJChnaXQgcmV2LXBhcnNlIHRvcC1iYzpzdWIpIDMJc3ViIiA+IGV4cGVjdDMgJiYKKwkgZ2l0IGxzLWZpbGVzIC11ID4gYWN0dWFsICYmCisJIGdyZXAgIiQoY2F0IGV4cGVjdDIpIiBhY3R1YWwgPiAvZGV2L251bGwgJiYKKwkgZ3JlcCAiJChjYXQgZXhwZWN0MykiIGFjdHVhbCA+IC9kZXYvbnVsbCkKKycKKworIyBGaWxlL3N1Ym1vZHVsZSBjb25mbGljdAorIyAgIENvbW1pdCBPOiA8ZW1wdHk+CisjICAgQ29tbWl0IEE6IHBhdGggKHN1Ym1vZHVsZSkKKyMgICBDb21taXQgQjogcGF0aAorIyAgIEV4cGVjdGVkOiBwYXRoLyBpcyBzdWJtb2R1bGUgYW5kIGZpbGUgY29udGVudHMgZm9yIEIncyBwYXRoIGFyZSBzb21ld2hlcmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZmlsZS9zdWJtb2R1bGUgY29uZmxpY3QnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGZpbGUtc3VibW9kdWxlICYmCisJKAorCQljZCBmaWxlLXN1Ym1vZHVsZSAmJgorCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBPICYmCisKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gY29udGVudCA+cGF0aCAmJgorCQlnaXQgYWRkIHBhdGggJiYKKwkJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJdGVzdF9jcmVhdGVfcmVwbyBwYXRoICYmCisJCXRlc3RfY29tbWl0IC1DIHBhdGggd29ybGQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi9wYXRoICYmCisJCWdpdCBjb21taXQgLW0gQQorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZmlsZS9zdWJtb2R1bGUgY29uZmxpY3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBmaWxlLXN1Ym1vZHVsZSByZXNldCAtLWhhcmQiICYmCisJKAorCQljZCBmaWxlLXN1Ym1vZHVsZSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisKKwkJIyBwYXRoLyBpcyBzdGlsbCBhIHN1Ym1vZHVsZQorCQl0ZXN0X3BhdGhfaXNfZGlyIHBhdGgvLmdpdCAmJgorCisJCSMgVGhlcmUgaXMgYSBzdWJtb2R1bGUgYXQgInBhdGgiLCBzbyBCOnBhdGggY2Fubm90IGJlIHdyaXR0ZW4KKwkJIyB0aGVyZS4gIFdlIGV4cGVjdCBpdCB0byBiZSB3cml0dGVuIHNvbWV3aGVyZSBpbiB0aGUgc2FtZQorCQkjIGRpcmVjdG9yeSwgdGhvdWdoLCBzbyBqdXN0IGdyZXAgZm9yIGl0cyBjb250ZW50IGluIGFsbAorCQkjIGZpbGVzLCBhbmQgaWdub3JlICJncmVwOiBwYXRoOiBJcyBhIGRpcmVjdG9yeSIgbWVzc2FnZQorCQllY2hvIENoZWNraW5nIGlmIGNvbnRlbnRzIGZyb20gQjpwYXRoIHNob3dlZCB1cCBhbnl3aGVyZSAmJgorCQlncmVwIC1xIGNvbnRlbnQgKiAyPi9kZXYvbnVsbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZS9zdWJtb2R1bGUgY29uZmxpY3Q7IG1lcmdlIC0tYWJvcnQgd29ya3MgYWZ0ZXJ3YXJkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZmlsZS1zdWJtb2R1bGUgcmVzZXQgLS1oYXJkIiAmJgorCSgKKwkJY2QgZmlsZS1zdWJtb2R1bGUgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBCXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIC5naXQvTUVSR0VfSEVBRCAmJgorCQlnaXQgbWVyZ2UgLS1hYm9ydAorCSkKKycKKworIyBEaXJlY3Rvcnkvc3VibW9kdWxlIGNvbmZsaWN0CisjICAgQ29tbWl0IE86IDxlbXB0eT4KKyMgICBDb21taXQgQTogcGF0aCAoc3VibW9kdWxlKSwgd2l0aCBzb2xlIHRyYWNrZWQgZmlsZSBuYW1lZCAnd29ybGQnCisjICAgQ29tbWl0IEIxOiBwYXRoL2ZpbGUKKyMgICBDb21taXQgQjI6IHBhdGgvd29ybGQKKyMKKyMgICBFeHBlY3RlZCBmcm9tIG1lcmdlIG9mIEEgJiBCMToKKyMgICAgIENvbnRlbnRzIHVuZGVyIHBhdGgvIGZyb20gY29tbWl0IEIxIGFyZSByZW5hbWVkIGVsc2V3aGVyZTsgd2UgZG8gbm90CisjICAgICB3YW50IHRvIHdyaXRlIGZpbGVzIGZyb20gb25lIG9mIG91ciB0cmFja2VkIGRpcmVjdG9yaWVzIGludG8gYSBzdWJtb2R1bGUKKyMKKyMgICBFeHBlY3RlZCBmcm9tIG1lcmdlIG9mIEEgJiBCMjoKKyMgICAgIFNpbWlsYXIgdG8gbGFzdCBtZXJnZSwgYnV0IHdpdGggYSBzbGlnaHQgdHdpc3Q6IHdlIGRvbid0IHdhbnQgcGF0aHMKKyMgICAgIHVuZGVyIHRoZSBzdWJtb2R1bGUgdG8gYmUgdHJlYXRlZCBhcyB1bnRyYWNrZWQgb3IgaW4gdGhlIHdheS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZGlyZWN0b3J5L3N1Ym1vZHVsZSBjb25mbGljdCcgJworCXRlc3RfY3JlYXRlX3JlcG8gZGlyZWN0b3J5LXN1Ym1vZHVsZSAmJgorCSgKKwkJY2QgZGlyZWN0b3J5LXN1Ym1vZHVsZSAmJgorCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBPICYmCisKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQjEgJiYKKwkJZ2l0IGJyYW5jaCBCMiAmJgorCisJCWdpdCBjaGVja291dCBCMSAmJgorCQlta2RpciBwYXRoICYmCisJCWVjaG8gY29udGVudHMgPnBhdGgvZmlsZSAmJgorCQlnaXQgYWRkIHBhdGgvZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIEIxICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIyICYmCisJCW1rZGlyIHBhdGggJiYKKwkJZWNobyBjb250ZW50cyA+cGF0aC93b3JsZCAmJgorCQlnaXQgYWRkIHBhdGgvd29ybGQgJiYKKwkJZ2l0IGNvbW1pdCAtbSBCMiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCXRlc3RfY3JlYXRlX3JlcG8gcGF0aCAmJgorCQl0ZXN0X2NvbW1pdCAtQyBwYXRoIGhlbGxvIHdvcmxkICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4vcGF0aCAmJgorCQlnaXQgY29tbWl0IC1tIEEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RpcmVjdG9yeS9zdWJtb2R1bGUgY29uZmxpY3Q7IGtlZXAgc3VibW9kdWxlIGNsZWFuJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGlyZWN0b3J5LXN1Ym1vZHVsZSByZXNldCAtLWhhcmQiICYmCisJKAorCQljZCBkaXJlY3Rvcnktc3VibW9kdWxlICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQjFeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJIyBwYXRoLyBpcyBzdGlsbCBhIHN1Ym1vZHVsZQorCQl0ZXN0X3BhdGhfaXNfZGlyIHBhdGgvLmdpdCAmJgorCisJCWVjaG8gQ2hlY2tpbmcgaWYgY29udGVudHMgZnJvbSBCMTpwYXRoL2ZpbGUgc2hvd2VkIHVwICYmCisJCSMgV291bGQgcmF0aGVyIHVzZSBncmVwIC1yLCBidXQgdGhhdCBpcyBHTlUgZXh0ZW5zaW9uLi4uCisJCWdpdCBscy1maWxlcyAtY28gfCB4YXJncyBncmVwIC1xIGNvbnRlbnRzIDI+L2Rldi9udWxsICYmCisKKwkJIyBIb3dldmVyLCBCMTpwYXRoL2ZpbGUgc2hvdWxkIE5PVCBoYXZlIHNob3duIHVwIGF0IHBhdGgvZmlsZSwKKwkJIyBiZWNhdXNlIHdlIHNob3VsZCBub3Qgd3JpdGUgaW50byB0aGUgc3VibW9kdWxlCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHBhdGgvZmlsZQorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAhRkFJTF9QUkVSRVFTICdkaXJlY3Rvcnkvc3VibW9kdWxlIGNvbmZsaWN0OyBzaG91bGQgbm90IHRyZWF0IHN1Ym1vZHVsZSBmaWxlcyBhcyB1bnRyYWNrZWQgb3IgaW4gdGhlIHdheScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGRpcmVjdG9yeS1zdWJtb2R1bGUvcGF0aCByZXNldCAtLWhhcmQiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGlyZWN0b3J5LXN1Ym1vZHVsZSByZXNldCAtLWhhcmQiICYmCisJKAorCQljZCBkaXJlY3Rvcnktc3VibW9kdWxlICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQjJeMCA+b3V0IDI+ZXJyICYmCisKKwkJIyBXZSBkbyBub3Qgd2FudCBmaWxlcyB3aXRoaW4gdGhlIHN1Ym1vZHVsZSB0byBwcmV2ZW50IHRoZQorCQkjIG1lcmdlIGZyb20gc3RhcnRpbmc7IHdlIHNob3VsZCBub3QgYmUgd3JpdGluZyB0byBzdWNoIHBhdGhzCisJCSMgYW55d2F5LgorCQl0ZXN0X2kxOG5ncmVwICEgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQiIGVycgorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZGlyZWN0b3J5L3N1Ym1vZHVsZSBjb25mbGljdDsgbWVyZ2UgLS1hYm9ydCB3b3JrcyBhZnRlcndhcmQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBkaXJlY3Rvcnktc3VibW9kdWxlL3BhdGggcmVzZXQgLS1oYXJkIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGRpcmVjdG9yeS1zdWJtb2R1bGUgcmVzZXQgLS1oYXJkIiAmJgorCSgKKwkJY2QgZGlyZWN0b3J5LXN1Ym1vZHVsZSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEIyXjAgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9NRVJHRV9IRUFEICYmCisKKwkJIyBtZXJnZSAtLWFib3J0IHNob3VsZCBzdWNjZWVkLCBzaG91bGQgY2xlYXIgLmdpdC9NRVJHRV9IRUFELAorCQkjIGFuZCBzaG91bGQgbm90IGxlYXZlIGJlaGluZCBhbnkgY29uZmxpY3RlZCBmaWxlcworCQlnaXQgbWVyZ2UgLS1hYm9ydCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5jb25mbGljdHMgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGNvbmZsaWN0cworCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDA2LXN1Ym1vZHVsZS11cGRhdGUuc2ggYi90L3Q3NDA2LXN1Ym1vZHVsZS11cGRhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGZiNDQ3YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MDYtc3VibW9kdWxlLXVwZGF0ZS5zaApAQCAtMCwwICsxLDEwMDkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgUmVkIEhhdCwgSW5jLgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHVwZGF0aW5nIHN1Ym1vZHVsZXMKKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBkZXRhY2hlcyB0aGUgSEVBRCBvZiB0aGUKK3N1Ym1vZHVsZSBhbmQgImdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmViYXNlLy0tbWVyZ2UiIGRvZXMgbm90IGRldGFjaCB0aGUgSEVBRC4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKKworY29tcGFyZV9oZWFkKCkKK3sKKyAgICBzaGFfbWFzdGVyPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgbWFzdGVyKQorICAgIHNoYV9oZWFkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCkKKworICAgIHRlc3QgIiRzaGFfbWFzdGVyIiA9ICIkc2hhX2hlYWQiCit9CisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYSBzdWJtb2R1bGUgdHJlZScgJworCWVjaG8gZmlsZSA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHVwc3RyZWFtICYmCisJZ2l0IGNsb25lIC4gc3VwZXIgJiYKKwlnaXQgY2xvbmUgc3VwZXIgc3VibW9kdWxlICYmCisJZ2l0IGNsb25lIHN1cGVyIHJlYmFzaW5nICYmCisJZ2l0IGNsb25lIHN1cGVyIG1lcmdpbmcgJiYKKwlnaXQgY2xvbmUgc3VwZXIgbm9uZSAmJgorCShjZCBzdXBlciAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3VibW9kdWxlICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUiICYmCisJIGdpdCBzdWJtb2R1bGUgaW5pdCBzdWJtb2R1bGUKKwkpICYmCisJKGNkIHN1Ym1vZHVsZSAmJgorCWVjaG8gImxpbmUyIiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJDb21taXQgMiIKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGdpdCBwdWxsIC0tcmViYXNlIG9yaWdpbgorCSApICYmCisJIGdpdCBhZGQgc3VibW9kdWxlICYmCisJIGdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSB1cGRhdGUiCisJKSAmJgorCShjZCBzdXBlciAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9yZWJhc2luZyByZWJhc2luZyAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSAicmViYXNpbmciCisJKSAmJgorCShjZCBzdXBlciAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9tZXJnaW5nIG1lcmdpbmcgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gInJlYmFzaW5nIgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vbm9uZSBub25lICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1tICJub25lIgorCSkgJiYKKwlnaXQgY2xvbmUgLiByZWN1cnNpdmVzdXBlciAmJgorCSggY2QgcmVjdXJzaXZlc3VwZXIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VwZXIgc3VwZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgZGV0YWNoaW5nIHRoZSBIRUFEICcgJworCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgISBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgZnJvbSBzdWJkaXJlY3RvcnknICcKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCW1rZGlyIHN1cGVyL3N1YiAmJgorCShjZCBzdXBlci9zdWIgJiYKKwkgKGNkIC4uL3N1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLi4vc3VibW9kdWxlICYmCisJIGNkIC4uL3N1Ym1vZHVsZSAmJgorCSAhIGNvbXBhcmVfaGVhZAorCSkKKycKKworc3VwZXJzaGExPSQoZ2l0IC1DIHN1cGVyIHJldi1wYXJzZSBIRUFEKQorbWVyZ2luZ3NoYTE9JChnaXQgLUMgc3VwZXIvbWVyZ2luZyByZXYtcGFyc2UgSEVBRCkKK25vbmVzaGExPSQoZ2l0IC1DIHN1cGVyL25vbmUgcmV2LXBhcnNlIEhFQUQpCityZWJhc2luZ3NoYTE9JChnaXQgLUMgc3VwZXIvcmViYXNpbmcgcmV2LXBhcnNlIEhFQUQpCitzdWJtb2R1bGVzaGExPSQoZ2l0IC1DIHN1cGVyL3N1Ym1vZHVsZSByZXYtcGFyc2UgSEVBRCkKK3B3ZD0kKHB3ZCkKKworY2F0IDw8RU9GID5leHBlY3QKK1N1Ym1vZHVsZSBwYXRoICcuLi9zdXBlcic6IGNoZWNrZWQgb3V0ICckc3VwZXJzaGExJworU3VibW9kdWxlIHBhdGggJy4uL3N1cGVyL21lcmdpbmcnOiBjaGVja2VkIG91dCAnJG1lcmdpbmdzaGExJworU3VibW9kdWxlIHBhdGggJy4uL3N1cGVyL25vbmUnOiBjaGVja2VkIG91dCAnJG5vbmVzaGExJworU3VibW9kdWxlIHBhdGggJy4uL3N1cGVyL3JlYmFzaW5nJzogY2hlY2tlZCBvdXQgJyRyZWJhc2luZ3NoYTEnCitTdWJtb2R1bGUgcGF0aCAnLi4vc3VwZXIvc3VibW9kdWxlJzogY2hlY2tlZCBvdXQgJyRzdWJtb2R1bGVzaGExJworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0MgorQ2xvbmluZyBpbnRvICckcHdkL3JlY3Vyc2l2ZXN1cGVyL3N1cGVyL21lcmdpbmcnLi4uCitDbG9uaW5nIGludG8gJyRwd2QvcmVjdXJzaXZlc3VwZXIvc3VwZXIvbm9uZScuLi4KK0Nsb25pbmcgaW50byAnJHB3ZC9yZWN1cnNpdmVzdXBlci9zdXBlci9yZWJhc2luZycuLi4KK0Nsb25pbmcgaW50byAnJHB3ZC9yZWN1cnNpdmVzdXBlci9zdXBlci9zdWJtb2R1bGUnLi4uCitTdWJtb2R1bGUgJ21lcmdpbmcnICgkcHdkL21lcmdpbmcpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJy4uL3N1cGVyL21lcmdpbmcnCitTdWJtb2R1bGUgJ25vbmUnICgkcHdkL25vbmUpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJy4uL3N1cGVyL25vbmUnCitTdWJtb2R1bGUgJ3JlYmFzaW5nJyAoJHB3ZC9yZWJhc2luZykgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnLi4vc3VwZXIvcmViYXNpbmcnCitTdWJtb2R1bGUgJ3N1Ym1vZHVsZScgKCRwd2Qvc3VibW9kdWxlKSByZWdpc3RlcmVkIGZvciBwYXRoICcuLi9zdXBlci9zdWJtb2R1bGUnCitkb25lLgorZG9uZS4KK2RvbmUuCitkb25lLgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlIGZyb20gc3ViZGlyZWN0b3J5JyAnCisJZ2l0IC1DIHJlY3Vyc2l2ZXN1cGVyL3N1cGVyIHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCShjZCByZWN1cnNpdmVzdXBlciAmJgorCSBta2RpciB0bXAgJiYKKwkgY2QgdG1wICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAuLi9zdXBlciA+Li4vLi4vYWN0dWFsIDI+Li4vLi4vYWN0dWFsMgorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXNvcnQgYWN0dWFsMiA+YWN0dWFsMi5zb3J0ZWQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0MiBhY3R1YWwyLnNvcnRlZAorJworCitjYXQgPDxFT0YgPmV4cGVjdDIKK1N1Ym1vZHVsZSAnZm9vL3N1YicgKCRwd2Qvd2l0aHN1YnMvLi4vcmViYXNpbmcpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJ3N1YicKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCBmcm9tIGFuZCBvZiBzdWJkaXJlY3RvcnknICcKKwlnaXQgaW5pdCB3aXRoc3VicyAmJgorCShjZCB3aXRoc3VicyAmJgorCSBta2RpciBmb28gJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgIiQocHdkKS8uLi9yZWJhc2luZyIgZm9vL3N1YiAmJgorCSAoY2QgZm9vICYmCisJICBnaXQgc3VibW9kdWxlIGRlaW5pdCAtZiBzdWIgJiYKKwkgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCBzdWIgMj4uLi8uLi9hY3R1YWwyCisJICkKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdDIgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGRvZXMgbm90IGZldGNoIGFscmVhZHkgcHJlc2VudCBjb21taXRzJyAnCisJKGNkIHN1Ym1vZHVsZSAmJgorCSAgZWNobyBsaW5lMyA+PiBmaWxlICYmCisJICBnaXQgYWRkIGZpbGUgJiYKKwkgIHRlc3RfdGljayAmJgorCSAgZ2l0IGNvbW1pdCAtbSAidXBzdHJlYW0gbGluZTMiCisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGhlYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJICBlY2hvICJTdWJtb2R1bGUgcGF0aCAke1NRfXN1Ym1vZHVsZSRTUTogY2hlY2tlZCBvdXQgJFNRJGhlYWQkU1EiID4gLi4vLi4vZXhwZWN0ZWQgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgPiAuLi9hY3R1YWwgMj4gLi4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBzaG91bGQgZmFpbCBkdWUgdG8gbG9jYWwgY2hhbmdlcycgJworCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEgJiYKKwkgZWNobyAibG9jYWwgY2hhbmdlIiA+IGZpbGUKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZQorCSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgc2hvdWxkIHRocm93IGF3YXkgY2hhbmdlcyB3aXRoIC0tZm9yY2UgJyAnCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tZm9yY2Ugc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSAhIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLWZvcmNlIGZvcmNpYmx5IGNoZWNrcyBvdXQgc3VibW9kdWxlcycgJworCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBybSAtZiBmaWxlCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1mb3JjZSBzdWJtb2R1bGUgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgdGVzdCAiJChnaXQgc3RhdHVzIC1zIGZpbGUpIiA9ICIiCisJICkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUgc2hvdWxkIGZldGNoIHVwc3RyZWFtIGNoYW5nZXMnICcKKwkoY2Qgc3VibW9kdWxlICYmCisJIGVjaG8gbGluZTQgPj4gZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gInVwc3RyZWFtIGxpbmU0IgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUgLS1mb3JjZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIHRlc3QgIiQoZ2l0IGxvZyAtMSAtLW9uZWxpbmUpIiA9ICIkKEdJVF9ESVI9Li4vLi4vc3VibW9kdWxlLy5naXQgZ2l0IGxvZyAtMSAtLW9uZWxpbmUpIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSBzaG91bGQgZmV0Y2ggdXBzdHJlYW0gY2hhbmdlcyB3aXRoIC4nICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLiJzdWJtb2R1bGUiLmJyYW5jaCAiLiIgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGVzOiB1cGRhdGUgZnJvbSB0aGUgcmVzcGVjdGl2ZSBzdXBlcnByb2plY3QgYnJhbmNoIgorCSkgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQllY2hvIGxpbmU0YSA+PiBmaWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAidXBzdHJlYW0gbGluZTRhIiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdGVzdC1icmFuY2ggJiYKKwkJdGVzdF9jb21taXQgb24tdGVzdC1icmFuY2gKKwkpICYmCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAtLWZvcmNlIHN1Ym1vZHVsZSAmJgorCQlnaXQgLUMgc3VibW9kdWxlIGxvZyAtMSAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCQlnaXQgLUMgLi4vc3VibW9kdWxlIGxvZyAtMSAtLW9uZWxpbmUgbWFzdGVyID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdGVzdC1icmFuY2ggJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUgLS1mb3JjZSBzdWJtb2R1bGUgJiYKKwkJZ2l0IC1DIHN1Ym1vZHVsZSBsb2cgLTEgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwkJZ2l0IC1DIC4uL3N1Ym1vZHVsZSBsb2cgLTEgLS1vbmVsaW5lIHRlc3QtYnJhbmNoID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBicmFuY2ggLWQgdGVzdC1icmFuY2ggJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgY29uZmlnIHNob3VsZCBvdmVycmlkZSAuZ2l0bW9kdWxlcyBicmFuY2gnICcKKwkoY2Qgc3VibW9kdWxlICYmCisJIGdpdCBjaGVja291dCB0ZXN0LWJyYW5jaCAmJgorCSBlY2hvIGxpbmU1ID4+IGZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1tICJ1cHN0cmVhbSBsaW5lNSIgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLmJyYW5jaCB0ZXN0LWJyYW5jaCAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAtLWZvcmNlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgdGVzdCAiJChnaXQgbG9nIC0xIC0tb25lbGluZSkiID0gIiQoR0lUX0RJUj0uLi8uLi9zdWJtb2R1bGUvLmdpdCBnaXQgbG9nIC0xIC0tb25lbGluZSB0ZXN0LWJyYW5jaCkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0tcmViYXNlIHN0YXlpbmcgb24gbWFzdGVyJyAnCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWJhc2Ugc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLS1tZXJnZSBzdGF5aW5nIG9uIG1hc3RlcicgJworCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLW1lcmdlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gcmViYXNlIGluIC5naXQvY29uZmlnJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgcmViYXNlCisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIGNoZWNrb3V0IGluIC5naXQvY29uZmlnIGJ1dCAtLXJlYmFzZSBnaXZlbicgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIGNoZWNrb3V0CisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlYmFzZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIG1lcmdlIGluIC5naXQvY29uZmlnJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgbWVyZ2UKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY2hlY2tvdXQgaW4gLmdpdC9jb25maWcgYnV0IC0tbWVyZ2UgZ2l2ZW4nICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBjaGVja291dAorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1tZXJnZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIGNoZWNrb3V0IGluIC5naXQvY29uZmlnJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgY2hlY2tvdXQKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSAhIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIGNvbW1hbmQgaW4gLmdpdC9jb25maWcnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSAiIWdpdCBjaGVja291dCIKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSAhIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIGNvbW1hbmQgaW4gLmdpdG1vZHVsZXMgaXMgcmVqZWN0ZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBzdXBlciByZXNldCAtLWhhcmQgSEVBRF4iICYmCisJZ2l0IC1DIHN1cGVyIGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSAiIWZhbHNlIiAmJgorCWdpdCAtQyBzdXBlciBjb21taXQgLWEgLW0gImFkZCBjb21tYW5kIHRvIC5naXRtb2R1bGVzIGZpbGUiICYmCisJZ2l0IC1DIHN1cGVyL3N1Ym1vZHVsZSByZXNldCAtLWhhcmQgJHN1Ym1vZHVsZXNoYTFeICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgZGV0ZWN0cyBjb21tYW5kIGluIC5naXRtb2R1bGVzJyAnCisJZ2l0IGluaXQgY29tbWFuZC1pbi1naXRtb2R1bGVzICYmCisJKAorCQljZCBjb21tYW5kLWluLWdpdG1vZHVsZXMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1Ym1vZHVsZSAmJgorCQl0ZXN0X2NvbW1pdCBhZGRpbmctc3VibW9kdWxlICYmCisKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSAiIWZhbHNlIiAmJgorCQlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJCXRlc3RfY29tbWl0IGNvbmZpZ3VyaW5nLXVwZGF0ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZnNjaworCSkKKycKKworY2F0IDw8IEVPRiA+ZXhwZWN0CitFeGVjdXRpb24gb2YgJ2ZhbHNlICRzdWJtb2R1bGVzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJ3N1Ym1vZHVsZScKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY29tbWFuZCBpbiAuZ2l0L2NvbmZpZyBjYXRjaGVzIGZhaWx1cmUnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSAiIWZhbHNlIgorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkICRzdWJtb2R1bGVzaGExXgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlIDI+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfaTE4bmNtcCBhY3R1YWwgZXhwZWN0CisnCisKK2NhdCA8PCBFT0YgPmV4cGVjdAorRXhlY3V0aW9uIG9mICdmYWxzZSAkc3VibW9kdWxlc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICcuLi9zdWJtb2R1bGUnCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIGNvbW1hbmQgaW4gLmdpdC9jb25maWcgY2F0Y2hlcyBmYWlsdXJlIC0tIHN1YmRpcmVjdG9yeScgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlICIhZmFsc2UiCisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgJHN1Ym1vZHVsZXNoYTFeCisJKSAmJgorCShjZCBzdXBlciAmJgorCSBta2RpciB0bXAgJiYgY2QgdG1wICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC4uL3N1Ym1vZHVsZSAyPi4uLy4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgYWN0dWFsIGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY29tbWFuZCBydW4gZm9yIGluaXRpYWwgcG9wdWxhdGlvbiBvZiBzdWJtb2R1bGUnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlFeGVjdXRpb24gb2YgJ1wnJ2ZhbHNlICRzdWJtb2R1bGVzaGExJ1wnJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJ1wnJ3N1Ym1vZHVsZSdcJycKKwlFT0YKKwlybSAtcmYgc3VwZXIvc3VibW9kdWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZSB1cGRhdGUgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCAtQyBzdXBlciBzdWJtb2R1bGUgdXBkYXRlIC0tY2hlY2tvdXQKKycKKworY2F0IDw8IEVPRiA+ZXhwZWN0CitFeGVjdXRpb24gb2YgJ2ZhbHNlICRzdWJtb2R1bGVzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJy4uL3N1cGVyL3N1Ym1vZHVsZScKK0ZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJy4uL3N1cGVyJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY3Vyc2l2ZSBzdWJtb2R1bGUgdXBkYXRlIC0gY29tbWFuZCBpbiAuZ2l0L2NvbmZpZyBjYXRjaGVzIGZhaWx1cmUgLS0gc3ViZGlyZWN0b3J5JyAnCisJKGNkIHJlY3Vyc2l2ZXN1cGVyICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlIHN1cGVyICYmCisJIGdpdCBhZGQgc3VwZXIgJiYKKwkgZ2l0IGNvbW1pdCAtbSAidXBkYXRlIHRvIGxhdGVzdCB0byBoYXZlIG1vcmUgdGhhbiBvbmUgY29tbWl0IGluIHN1Ym1vZHVsZXMiCisJKSAmJgorCWdpdCAtQyByZWN1cnNpdmVzdXBlci9zdXBlciBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgIiFmYWxzZSIgJiYKKwlnaXQgLUMgcmVjdXJzaXZlc3VwZXIvc3VwZXIvc3VibW9kdWxlIHJlc2V0IC0taGFyZCAkc3VibW9kdWxlc2hhMV4gJiYKKwkoY2QgcmVjdXJzaXZlc3VwZXIgJiYKKwkgbWtkaXIgLXAgdG1wICYmIGNkIHRtcCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSAuLi9zdXBlciAyPi4uLy4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgYWN0dWFsIGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaW5pdCBkb2VzIG5vdCBjb3B5IGNvbW1hbmQgaW50byAuZ2l0L2NvbmZpZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSBzdWJtb2R1bGUxIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgY29uZmlnIC1mIHN1cGVyLy5naXRtb2R1bGVzIFwKKwkJLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibW9kdWxlMSAmJgorCShjZCBzdXBlciAmJgorCSBnaXQgbHMtZmlsZXMgLXMgc3VibW9kdWxlID5vdXQgJiYKKwkgSD0kKGN1dCAtZCIgIiAtZjIgb3V0KSAmJgorCSBta2RpciBzdWJtb2R1bGUxICYmCisJIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICRIIHN1Ym1vZHVsZTEgJiYKKwkgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibW9kdWxlMS5wYXRoIHN1Ym1vZHVsZTEgJiYKKwkgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibW9kdWxlMS51cmwgLi4vc3VibW9kdWxlICYmCisJIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZTEudXBkYXRlICFmYWxzZSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIGluaXQgc3VibW9kdWxlMSAmJgorCSB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlMS51cGRhdGUgPmFjdHVhbCAmJgorCSB0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaW5pdCBwaWNrcyB1cCByZWJhc2UnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmViYXNpbmcudXBkYXRlIHJlYmFzZSAmJgorCSBnaXQgc3VibW9kdWxlIGluaXQgcmViYXNpbmcgJiYKKwkgdGVzdCAicmViYXNlIiA9ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnJlYmFzaW5nLnVwZGF0ZSkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaW5pdCBwaWNrcyB1cCBtZXJnZScgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5tZXJnaW5nLnVwZGF0ZSBtZXJnZSAmJgorCSBnaXQgc3VibW9kdWxlIGluaXQgbWVyZ2luZyAmJgorCSB0ZXN0ICJtZXJnZSIgPSAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5tZXJnaW5nLnVwZGF0ZSkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0tbWVyZ2UgIC0gaWdub3JlcyAtLW1lcmdlICBmb3IgbmV3IHN1Ym1vZHVsZXMnICcKKwl0ZXN0X2NvbmZpZyAtQyBzdXBlciBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBjaGVja291dCAmJgorCShjZCBzdXBlciAmJgorCSBybSAtcmYgc3VibW9kdWxlICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3RhdHVzIC1zIHN1Ym1vZHVsZSA+ZXhwZWN0ICYmCisJIHJtIC1yZiBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1tZXJnZSBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN0YXR1cyAtcyBzdWJtb2R1bGUgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0tcmViYXNlIC0gaWdub3JlcyAtLXJlYmFzZSBmb3IgbmV3IHN1Ym1vZHVsZXMnICcKKwl0ZXN0X2NvbmZpZyAtQyBzdXBlciBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBjaGVja291dCAmJgorCShjZCBzdXBlciAmJgorCSBybSAtcmYgc3VibW9kdWxlICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3RhdHVzIC1zIHN1Ym1vZHVsZSA+ZXhwZWN0ICYmCisJIHJtIC1yZiBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWJhc2Ugc3VibW9kdWxlICYmCisJIGdpdCBzdGF0dXMgLXMgc3VibW9kdWxlID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBpZ25vcmVzIHVwZGF0ZT1tZXJnZSBjb25maWcgZm9yIG5ldyBzdWJtb2R1bGVzJyAnCisJKGNkIHN1cGVyICYmCisJIHJtIC1yZiBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGdpdCBzdGF0dXMgLXMgc3VibW9kdWxlID5leHBlY3QgJiYKKwkgcm0gLXJmIHN1Ym1vZHVsZSAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIG1lcmdlICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3RhdHVzIC1zIHN1Ym1vZHVsZSA+YWN0dWFsICYmCisJIGdpdCBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGlnbm9yZXMgdXBkYXRlPXJlYmFzZSBjb25maWcgZm9yIG5ldyBzdWJtb2R1bGVzJyAnCisJKGNkIHN1cGVyICYmCisJIHJtIC1yZiBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGdpdCBzdGF0dXMgLXMgc3VibW9kdWxlID5leHBlY3QgJiYKKwkgcm0gLXJmIHN1Ym1vZHVsZSAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIHJlYmFzZSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN0YXR1cyAtcyBzdWJtb2R1bGUgPmFjdHVhbCAmJgorCSBnaXQgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGluaXQgcGlja3MgdXAgdXBkYXRlPW5vbmUnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUubm9uZS51cGRhdGUgbm9uZSAmJgorCSBnaXQgc3VibW9kdWxlIGluaXQgbm9uZSAmJgorCSB0ZXN0ICJub25lIiA9ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLm5vbmUudXBkYXRlKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSB1cGRhdGU9bm9uZSBpbiAuZ2l0L2NvbmZpZycgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIG5vbmUgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IGRpZmYgLS1uYW1lLW9ubHkgPm91dCAmJgorCSBncmVwIF5zdWJtb2R1bGUkIG91dCAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSBnaXQgZGlmZiAtLW5hbWUtb25seSA+b3V0ICYmCisJIGdyZXAgXnN1Ym1vZHVsZSQgb3V0ICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSB1cGRhdGU9bm9uZSBpbiAuZ2l0L2NvbmZpZyBidXQgLS1jaGVja291dCBnaXZlbicgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIG5vbmUgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IGRpZmYgLS1uYW1lLW9ubHkgPm91dCAmJgorCSBncmVwIF5zdWJtb2R1bGUkIG91dCAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWNoZWNrb3V0ICYmCisJIGdpdCBkaWZmIC0tbmFtZS1vbmx5ID5vdXQgJiYKKwkgISBncmVwIF5zdWJtb2R1bGUkIG91dCAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICAhIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgc2tpcHMgc3VibW9kdWxlIHdpdGggdXBkYXRlPW5vbmUnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCSBnaXQgY29tbWl0IC1tICIuZ2l0bW9kdWxlcyIKKwkpICYmCisJZ2l0IGNsb25lIHN1cGVyIGNsb25lZCAmJgorCShjZCBjbG9uZWQgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJIHRlc3RfcGF0aF9leGlzdHMgc3VibW9kdWxlLy5naXQgJiYKKwkgdGVzdF9wYXRoX2lzX21pc3Npbmcgbm9uZS8uZ2l0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGNvbnRpbnVlcyBhZnRlciBjaGVja291dCBlcnJvcicgJworCShjZCBzdXBlciAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1Ym1vZHVsZTIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJIGdpdCBjb21taXQgLWFtICJuZXdfc3VibW9kdWxlIiAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9leHBlY3QKKwkgKSAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1Ym1vZHVsZSIgZmlsZQorCSApICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1Ym1vZHVsZTIiIGZpbGUKKwkgKSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZTIgJiYKKwkgZ2l0IGNvbW1pdCAtbSAidHdvX25ld19zdWJtb2R1bGVfY29tbWl0cyIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZWNobyAiIiA+IGZpbGUKKwkgKSAmJgorCSBnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkgKGNkIHN1Ym1vZHVsZTIgJiYKKwkgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+Li4vYWN0dWFsCisJICkgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgY29udGludWVzIGFmdGVyIHJlY3Vyc2l2ZSBjaGVja291dCBlcnJvcicgJworCShjZCBzdXBlciAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3Vic3VibW9kdWxlICYmCisJICBnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkgIGdpdCBjb21taXQgLW0gIm5ld19zdWJzdWJtb2R1bGUiCisJICkgJiYKKwkgZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSAidXBkYXRlX3N1Ym1vZHVsZSIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgKGNkIHN1YnN1Ym1vZHVsZSAmJgorCSAgIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3Vic3VibW9kdWxlIiBmaWxlCisJICApICYmCisJICBnaXQgYWRkIHN1YnN1Ym1vZHVsZSAmJgorCSAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJtb2R1bGVfYWdhaW4iIGZpbGUgJiYKKwkgIChjZCBzdWJzdWJtb2R1bGUgJiYKKwkgICB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1YnN1Ym1vZHVsZV9hZ2FpbiIgZmlsZQorCSAgKSAmJgorCSAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJtb2R1bGVfYWdhaW5fYWdhaW4iIGZpbGUKKwkgKSAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9leHBlY3QgJiYKKwkgIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3VibW9kdWxlMl9hZ2FpbiIgZmlsZQorCSApICYmCisJIGdpdCBhZGQgc3VibW9kdWxlICYmCisJIGdpdCBhZGQgc3VibW9kdWxlMiAmJgorCSBnaXQgY29tbWl0IC1tICJuZXdfY29tbWl0cyIgJiYKKwkgZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGdpdCBjaGVja291dCBIRUFEXiAmJgorCSAgKGNkIHN1YnN1Ym1vZHVsZSAmJgorCSAgIGVjaG8gIiIgPiBmaWxlCisJICApCisJICkgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWN1cnNpdmUgJiYKKwkgKGNkIHN1Ym1vZHVsZTIgJiYKKwkgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+Li4vYWN0dWFsCisJICkgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBleGl0IGltbWVkaWF0ZWx5IGluIGNhc2Ugb2YgbWVyZ2UgY29uZmxpY3QnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgKGNkIHN1YnN1Ym1vZHVsZSAmJgorCSAgIGdpdCByZXNldCAtLWhhcmQgSEVBRAorCSAgKQorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3VibW9kdWxlXzIiIGZpbGUKKwkgKSAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJtb2R1bGUyXzIiIGZpbGUKKwkgKSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZTIgJiYKKwkgZ2l0IGNvbW1pdCAtbSAidHdvX25ld19zdWJtb2R1bGVfY29tbWl0cyIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSAgdGVzdF9jb21taXQgImNvbmZsaWN0IiBmaWxlICYmCisJICBlY2hvICJjb25mbGljdCIgPiBmaWxlCisJICkgJiYKKwkgZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi4uL2V4cGVjdAorCSApICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgbWVyZ2UgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkgKGNkIHN1Ym1vZHVsZTIgJiYKKwkgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+Li4vYWN0dWFsCisJICkgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBleGl0IGltbWVkaWF0ZWx5IGFmdGVyIHJlY3Vyc2l2ZSByZWJhc2UgZXJyb3InICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZQorCSApICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3VibW9kdWxlXzMiIGZpbGUKKwkgKSAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJtb2R1bGUyXzMiIGZpbGUKKwkgKSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZTIgJiYKKwkgZ2l0IGNvbW1pdCAtbSAidHdvX25ld19zdWJtb2R1bGVfY29tbWl0cyIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSAgdGVzdF9jb21taXQgImNvbmZsaWN0MiIgZmlsZSAmJgorCSAgZWNobyAiY29uZmxpY3QiID4gZmlsZQorCSApICYmCisJIGdpdCBjaGVja291dCBIRUFEXiAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9leHBlY3QKKwkgKSAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIHJlYmFzZSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9hY3R1YWwKKwkgKSAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZGlmZmVyZW50IHN1Ym1vZHVsZXMgdG8gdGhlIHNhbWUgcGF0aCcgJworCShjZCBzdXBlciAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgczEgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vbWVyZ2luZyBzMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCBwbGFjZXMgZ2l0LWRpciBpbiBzdXBlcnByb2plY3RzIGdpdC1kaXInICcKKwkoY2Qgc3VwZXIgJiYKKwkgbWtkaXIgZGVlcGVyICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBkZWVwZXIvc3VibW9kdWxlICYmCisJIChjZCBkZWVwZXIvc3VibW9kdWxlICYmCisJICBnaXQgbG9nID4gLi4vLi4vZXhwZWN0ZWQKKwkgKSAmJgorCSAoY2QgLmdpdC9tb2R1bGVzL2RlZXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCBsb2cgPiAuLi8uLi8uLi8uLi9hY3R1YWwKKwkgKSAmJgorCSB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgcGxhY2VzIGdpdC1kaXIgaW4gc3VwZXJwcm9qZWN0cyBnaXQtZGlyJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb21taXQgLW0gImFkZGVkIHN1Ym1vZHVsZSIKKwkpICYmCisJZ2l0IGNsb25lIHN1cGVyIHN1cGVyMiAmJgorCShjZCBzdXBlcjIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0IGRlZXBlci9zdWJtb2R1bGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkgKGNkIGRlZXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCBsb2cgPiAuLi8uLi9leHBlY3RlZAorCSApICYmCisJIChjZCAuZ2l0L21vZHVsZXMvZGVlcGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IGxvZyA+IC4uLy4uLy4uLy4uL2FjdHVhbAorCSApICYmCisJIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCBwbGFjZXMgZ2l0LWRpciBpbiBzdXBlcnByb2plY3RzIGdpdC1kaXIgcmVjdXJzaXZlJyAnCisJKGNkIHN1cGVyMiAmJgorCSAoY2QgZGVlcGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1YnN1Ym1vZHVsZSAmJgorCSAgKGNkIHN1YnN1Ym1vZHVsZSAmJgorCSAgIGdpdCBsb2cgPiAuLi8uLi8uLi9leHBlY3RlZAorCSAgKSAmJgorCSAgZ2l0IGNvbW1pdCAtbSAiYWRkZWQgc3Vic3VibW9kdWxlIiAmJgorCSAgZ2l0IHB1c2ggb3JpZ2luIDoKKwkgKSAmJgorCSAoY2QgLmdpdC9tb2R1bGVzL2RlZXBlci9zdWJtb2R1bGUvbW9kdWxlcy9zdWJzdWJtb2R1bGUgJiYKKwkgIGdpdCBsb2cgPiAuLi8uLi8uLi8uLi8uLi9hY3R1YWwKKwkgKSAmJgorCSBnaXQgYWRkIGRlZXBlci9zdWJtb2R1bGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSAidXBkYXRlIHN1Ym1vZHVsZSIgJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIDogJiYKKwkgdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIHBsYWNlcyBnaXQtZGlyIGluIHN1cGVycHJvamVjdHMgZ2l0LWRpciByZWN1cnNpdmUnICcKKwlta2RpciBzdXBlcl91cGRhdGVfciAmJgorCShjZCBzdXBlcl91cGRhdGVfciAmJgorCSBnaXQgaW5pdCAtLWJhcmUKKwkpICYmCisJbWtkaXIgc3Vic3VwZXJfdXBkYXRlX3IgJiYKKwkoY2Qgc3Vic3VwZXJfdXBkYXRlX3IgJiYKKwkgZ2l0IGluaXQgLS1iYXJlCisJKSAmJgorCW1rZGlyIHN1YnN1YnN1cGVyX3VwZGF0ZV9yICYmCisJKGNkIHN1YnN1YnN1cGVyX3VwZGF0ZV9yICYmCisJIGdpdCBpbml0IC0tYmFyZQorCSkgJiYKKwlnaXQgY2xvbmUgc3Vic3Vic3VwZXJfdXBkYXRlX3Igc3Vic3Vic3VwZXJfdXBkYXRlX3IyICYmCisJKGNkIHN1YnN1YnN1cGVyX3VwZGF0ZV9yMiAmJgorCSB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1YnN1YnN1cGVyIiBmaWxlICYmCisJIGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIKKwkpICYmCisJZ2l0IGNsb25lIHN1YnN1cGVyX3VwZGF0ZV9yIHN1YnN1cGVyX3VwZGF0ZV9yMiAmJgorCShjZCBzdWJzdXBlcl91cGRhdGVfcjIgJiYKKwkgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJzdXBlciIgZmlsZSAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJzdWJzdXBlcl91cGRhdGVfciBzdWJzdWJtb2R1bGUgJiYKKwkgZ2l0IGNvbW1pdCAtYW0gInN1YnN1Ym1vZHVsZSIgJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcgorCSkgJiYKKwlnaXQgY2xvbmUgc3VwZXJfdXBkYXRlX3Igc3VwZXJfdXBkYXRlX3IyICYmCisJKGNkIHN1cGVyX3VwZGF0ZV9yMiAmJgorCSB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1cGVyIiBmaWxlICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1YnN1cGVyX3VwZGF0ZV9yIHN1Ym1vZHVsZSAmJgorCSBnaXQgY29tbWl0IC1hbSAic3VibW9kdWxlIiAmJgorCSBnaXQgcHVzaCBvcmlnaW4gbWFzdGVyCisJKSAmJgorCXJtIC1yZiBzdXBlcl91cGRhdGVfcjIgJiYKKwlnaXQgY2xvbmUgc3VwZXJfdXBkYXRlX3Igc3VwZXJfdXBkYXRlX3IyICYmCisJKGNkIHN1cGVyX3VwZGF0ZV9yMiAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgPmFjdHVhbCAmJgorCSB0ZXN0X2kxOG5ncmVwICJTdWJtb2R1bGUgcGF0aCAuc3VibW9kdWxlL3N1YnN1Ym1vZHVsZS46IGNoZWNrZWQgb3V0IiBhY3R1YWwgJiYKKwkgKGNkIHN1Ym1vZHVsZS9zdWJzdWJtb2R1bGUgJiYKKwkgIGdpdCBsb2cgPiAuLi8uLi9leHBlY3RlZAorCSApICYmCisJIChjZCAuZ2l0L21vZHVsZXMvc3VibW9kdWxlL21vZHVsZXMvc3Vic3VibW9kdWxlICYmCisJICBnaXQgbG9nID4gLi4vLi4vLi4vLi4vLi4vYWN0dWFsCisJICkgJiYKKwkgdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHByb3Blcmx5IHJlLWNyZWF0ZXMgZGVlcGVyIGxldmVsIHN1Ym1vZHVsZXMnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwkgcm0gLXJmIGRlZXBlci8gJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLS1mb3JjZSAuLi9zdWJtb2R1bGUgZGVlcGVyL3N1Ym1vZHVsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBwcm9wZXJseSByZXZpdmVzIGEgbW92ZWQgc3VibW9kdWxlJyAnCisJKGNkIHN1cGVyICYmCisJIEg9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwkgZ2l0IGNvbW1pdCAtYW0gInByZSBtb3ZlIiAmJgorCSBIMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCSBnaXQgc3RhdHVzID5vdXQgJiYKKwkgc2VkICJzLyRIL1hYWC8iIG91dCA+ZXhwZWN0ICYmCisJIEg9JChjZCBzdWJtb2R1bGUyICYmIGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkgZ2l0IHJtIC0tY2FjaGVkIHN1Ym1vZHVsZTIgJiYKKwkgcm0gLXJmIHN1Ym1vZHVsZTIgJiYKKwkgbWtkaXIgLXAgIm1vdmVkL3N1YiBtb2R1bGUiICYmCisJIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICRIICJtb3ZlZC9zdWIgbW9kdWxlIiAmJgorCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUyLnBhdGggIm1vdmVkL3N1YiBtb2R1bGUiICYmCisJIGdpdCBjb21taXQgLWFtICJwb3N0IG1vdmUiICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJIGdpdCBzdGF0dXMgPiBvdXQgJiYKKwkgc2VkICJzLyRIMi9YWFgvIiBvdXQgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzdWJtb2R1bGUgdXBkYXRlIGNhbiBoYW5kbGUgc3ltYm9saWMgbGlua3MgaW4gcHdkJyAnCisJbWtkaXIgLXAgbGlua2VkL2RpciAmJgorCWxuIC1zIGxpbmtlZC9kaXIgbGlua3RvICYmCisJKGNkIGxpbmt0byAmJgorCSBnaXQgY2xvbmUgIiRUUkFTSF9ESVJFQ1RPUlkiL3N1cGVyX3VwZGF0ZV9yMiBzdXBlciAmJgorCSAoY2Qgc3VwZXIgJiYKKwkgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZQorCSApCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGNsb25lIHNoYWxsb3cgc3VibW9kdWxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXIzIiAmJgorCWZpcnN0PSQoZ2l0IC1DIGNsb25lZCByZXYtcGFyc2UgSEVBRDpzdWJtb2R1bGUpICYmCisJc2Vjb25kPSQoZ2l0IC1DIHN1Ym1vZHVsZSByZXYtcGFyc2UgSEVBRCkgJiYKKwljb21taXRfY291bnQ9JChnaXQgLUMgc3VibW9kdWxlIHJldi1saXN0IC0tY291bnQgJGZpcnN0Xi4uJHNlY29uZCkgJiYKKwlnaXQgY2xvbmUgY2xvbmVkIHN1cGVyMyAmJgorCXB3ZD0kKHB3ZCkgJiYKKwkoCisJCWNkIHN1cGVyMyAmJgorCQlzZWQgLWUgInMjdXJsID0gLi4vI3VybCA9IGZpbGU6Ly8kcHdkLyMiIDwuZ2l0bW9kdWxlcyA+LmdpdG1vZHVsZXMudG1wICYmCisJCW12IC1mIC5naXRtb2R1bGVzLnRtcCAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1kZXB0aD0kY29tbWl0X2NvdW50ICYmCisJCWdpdCAtQyBzdWJtb2R1bGUgbG9nIC0tb25lbGluZSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGNsb25lIHNoYWxsb3cgc3VibW9kdWxlIG91dHNpZGUgb2YgZGVwdGgnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcjMiICYmCisJZ2l0IGNsb25lIGNsb25lZCBzdXBlcjMgJiYKKwlwd2Q9JChwd2QpICYmCisJKAorCQljZCBzdXBlcjMgJiYKKwkJc2VkIC1lICJzI3VybCA9IC4uLyN1cmwgPSBmaWxlOi8vJHB3ZC8jIiA8LmdpdG1vZHVsZXMgPi5naXRtb2R1bGVzLnRtcCAmJgorCQltdiAtZiAuZ2l0bW9kdWxlcy50bXAgLmdpdG1vZHVsZXMgJiYKKwkJIyBTb21lIHByb3RvY29sIHZlcnNpb25zIChlLmcuIDIpIHN1cHBvcnQgZmV0Y2hpbmcKKwkJIyB1bmFkdmVydGlzZWQgb2JqZWN0cywgc28gcmVzdHJpY3QgdGhpcyB0ZXN0IHRvIHYwLgorCQl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIFwKKwkJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLWRlcHRoPTEgMj5hY3R1YWwgJiYKKwkJdGVzdF9pMThuZ3JlcCAiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iIGFjdHVhbCAmJgorCQlnaXQgLUMgLi4vc3VibW9kdWxlIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93UmVhY2hhYmxlU0hBMUluV2FudCB0cnVlICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLWRlcHRoPTEgPmFjdHVhbCAmJgorCQlnaXQgLUMgc3VibW9kdWxlIGxvZyAtLW9uZWxpbmUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSBkcm9wcyBtb2R1bGUgbmFtZSBiZWZvcmUgcmVjdXJzaW5nJyAnCisJKGNkIHN1cGVyMiAmJgorCSAoY2QgZGVlcGVyL3N1Ym1vZHVsZS9zdWJzdWJtb2R1bGUgJiYKKwkgIGdpdCBjaGVja291dCBIRUFEXgorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlIGRlZXBlci9zdWJtb2R1bGUgPmFjdHVhbCAmJgorCSB0ZXN0X2kxOG5ncmVwICJTdWJtb2R1bGUgcGF0aCAuZGVlcGVyL3N1Ym1vZHVsZS9zdWJzdWJtb2R1bGUuOiBjaGVja2VkIG91dCIgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGNhbiBiZSBydW4gaW4gcGFyYWxsZWwnICcKKwkoY2Qgc3VwZXIyICYmCisJIEdJVF9UUkFDRT0kKHB3ZCkvdHJhY2Uub3V0IGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tam9icyA3ICYmCisJIGdyZXAgIjcgdGFza3MiIHRyYWNlLm91dCAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5mZXRjaEpvYnMgOCAmJgorCSBHSVRfVFJBQ0U9JChwd2QpL3RyYWNlLm91dCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSBncmVwICI4IHRhc2tzIiB0cmFjZS5vdXQgJiYKKwkgR0lUX1RSQUNFPSQocHdkKS90cmFjZS5vdXQgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1qb2JzIDkgJiYKKwkgZ3JlcCAiOSB0YXNrcyIgdHJhY2Uub3V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xvbmUgcGFzc2VzIHRoZSBwYXJhbGxlbCBqb2JzIGNvbmZpZyBvbiB0byBzdWJtb2R1bGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXI0IiAmJgorCUdJVF9UUkFDRT0kKHB3ZCkvdHJhY2Uub3V0IGdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLWpvYnMgNyAuIHN1cGVyNCAmJgorCWdyZXAgIjcgdGFza3MiIHRyYWNlLm91dCAmJgorCXJtIC1yZiBzdXBlcjQgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHN1Ym1vZHVsZS5mZXRjaEpvYnMgOCAmJgorCUdJVF9UUkFDRT0kKHB3ZCkvdHJhY2Uub3V0IGdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAuIHN1cGVyNCAmJgorCWdyZXAgIjggdGFza3MiIHRyYWNlLm91dCAmJgorCXJtIC1yZiBzdXBlcjQgJiYKKwlHSVRfVFJBQ0U9JChwd2QpL3RyYWNlLm91dCBnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1qb2JzIDkgLiBzdXBlcjQgJiYKKwlncmVwICI5IHRhc2tzIiB0cmFjZS5vdXQgJiYKKwlybSAtcmYgc3VwZXI0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwNy1zdWJtb2R1bGUtZm9yZWFjaC5zaCBiL3QvdDc0MDctc3VibW9kdWxlLWZvcmVhY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmIyYWE5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MDctc3VibW9kdWxlLWZvcmVhY2guc2gKQEAgLTAsMCArMSw0MzEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgSm9oYW4gSGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0ICJnaXQgc3VibW9kdWxlIGZvcmVhY2giCisKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0ICJnaXQgc3VibW9kdWxlIGZvcmVhY2giIGNvcnJlY3RseSB2aXNpdHMgYWxsIHN1Ym1vZHVsZXMKK3RoYXQgYXJlIGN1cnJlbnRseSBjaGVja2VkIG91dC4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYSBzdWJtb2R1bGUgdHJlZScgJworCWVjaG8gZmlsZSA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHVwc3RyZWFtICYmCisJZ2l0IGNsb25lIC4gc3VwZXIgJiYKKwlnaXQgY2xvbmUgc3VwZXIgc3VibW9kdWxlICYmCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3ViMSAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3ViMiAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3ViMyAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIC0tcmVuYW1lLXNlY3Rpb24gXAorCQkJc3VibW9kdWxlLnN1YjEgc3VibW9kdWxlLmZvbzEgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAtLXJlbmFtZS1zZWN0aW9uIFwKKwkJCXN1Ym1vZHVsZS5zdWIyIHN1Ym1vZHVsZS5mb28yICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgLS1yZW5hbWUtc2VjdGlvbiBcCisJCQlzdWJtb2R1bGUuc3ViMyBzdWJtb2R1bGUuZm9vMyAmJgorCQlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGVzIiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgc3ViMSAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgc3ViMiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgc3ViMworCSkgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQllY2hvIGRpZmZlcmVudCA+IGZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJkaWZmZXJlbnQiCisJKSAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJKAorCQkJY2Qgc3ViMyAmJgorCQkJZ2l0IHB1bGwKKwkJKSAmJgorCQlnaXQgYWRkIHN1YjMgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gInVwZGF0ZSBzdWIzIgorCSkKKycKKworc3ViMXNoYTE9JChjZCBzdXBlci9zdWIxICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1YjNzaGExPSQoY2Qgc3VwZXIvc3ViMyAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCisKK3B3ZD0kKHB3ZCkKKworY2F0ID4gZXhwZWN0IDw8RU9GCitFbnRlcmluZyAnc3ViMScKKyRwd2QvY2xvbmUtZm9vMS1zdWIxLSRzdWIxc2hhMQorRW50ZXJpbmcgJ3N1YjMnCiskcHdkL2Nsb25lLWZvbzMtc3ViMy0kc3ViM3NoYTEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGJhc2ljICJzdWJtb2R1bGUgZm9yZWFjaCIgdXNhZ2UnICcKKwlnaXQgY2xvbmUgc3VwZXIgY2xvbmUgJiYKKwkoCisJCWNkIGNsb25lICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLSBzdWIxIHN1YjMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoICJlY2hvIFwkdG9wbGV2ZWwtXCRuYW1lLVwkcGF0aC1cJHNoYTEiID4gLi4vYWN0dWFsICYmCisJCWdpdCBjb25maWcgZm9vLmJhciB6YXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoICJnaXQgY29uZmlnIC0tZmlsZSBcIlwkdG9wbGV2ZWwvLmdpdC9jb25maWdcIiBmb28uYmFyIgorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorRW50ZXJpbmcgJy4uL3N1YjEnCiskcHdkL2Nsb25lLWZvbzEtc3ViMS0uLi9zdWIxLSRzdWIxc2hhMQorRW50ZXJpbmcgJy4uL3N1YjMnCiskcHdkL2Nsb25lLWZvbzMtc3ViMy0uLi9zdWIzLSRzdWIzc2hhMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgInN1Ym1vZHVsZSBmb3JlYWNoIiBmcm9tIHN1YmRpcmVjdG9yeScgJworCW1rZGlyIGNsb25lL3N1YiAmJgorCSgKKwkJY2QgY2xvbmUvc3ViICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAiZWNobyBcJHRvcGxldmVsLVwkbmFtZS1cJHNtX3BhdGgtXCRkaXNwbGF5cGF0aC1cJHNoYTEiID4uLi8uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbmVzdGVkIHN1Ym1vZHVsZXMnICcKKwlnaXQgY2xvbmUgc3VibW9kdWxlIG5lc3RlZDEgJiYKKwlnaXQgY2xvbmUgc3VibW9kdWxlIG5lc3RlZDIgJiYKKwlnaXQgY2xvbmUgc3VibW9kdWxlIG5lc3RlZDMgJiYKKwkoCisJCWNkIG5lc3RlZDMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1Ym1vZHVsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlIiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgc3VibW9kdWxlCisJKSAmJgorCSgKKwkJY2QgbmVzdGVkMiAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9uZXN0ZWQzIG5lc3RlZDMgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIm5lc3RlZDMiICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCBuZXN0ZWQzCisJKSAmJgorCSgKKwkJY2QgbmVzdGVkMSAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9uZXN0ZWQyIG5lc3RlZDIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIm5lc3RlZDIiICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCBuZXN0ZWQyCisJKSAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vbmVzdGVkMSBuZXN0ZWQxICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJuZXN0ZWQxIiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgbmVzdGVkMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlICJzdWJtb2R1bGUgZm9yZWFjaCIgdG8gY2hlY2tvdXQgMm5kIGxldmVsIHN1Ym1vZHVsZScgJworCWdpdCBjbG9uZSBzdXBlciBjbG9uZTIgJiYKKwkoCisJCWNkIGNsb25lMiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjEvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjIvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjMvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvLmdpdCAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIxLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIyLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIzLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvLmdpdCAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggImdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzLy5naXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAiZm9yZWFjaCAtLXJlY3Vyc2l2ZSIgdG8gY2hlY2tvdXQgYWxsIHN1Ym1vZHVsZXMnICcKKwkoCisJCWNkIGNsb25lMiAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggLS1yZWN1cnNpdmUgImdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlLy5naXQKKwkpCisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorRW50ZXJpbmcgJ25lc3RlZDEnCitFbnRlcmluZyAnbmVzdGVkMS9uZXN0ZWQyJworRW50ZXJpbmcgJ25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzJworRW50ZXJpbmcgJ25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzL3N1Ym1vZHVsZScKK0VudGVyaW5nICdzdWIxJworRW50ZXJpbmcgJ3N1YjInCitFbnRlcmluZyAnc3ViMycKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG1lc3NhZ2VzIGZyb20gImZvcmVhY2ggLS1yZWN1cnNpdmUiJyAnCisJKAorCQljZCBjbG9uZTIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIC0tcmVjdXJzaXZlICJ0cnVlIiA+IC4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK0VudGVyaW5nICcuLi9uZXN0ZWQxJworRW50ZXJpbmcgJy4uL25lc3RlZDEvbmVzdGVkMicKK0VudGVyaW5nICcuLi9uZXN0ZWQxL25lc3RlZDIvbmVzdGVkMycKK0VudGVyaW5nICcuLi9uZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUnCitFbnRlcmluZyAnLi4vc3ViMScKK0VudGVyaW5nICcuLi9zdWIyJworRW50ZXJpbmcgJy4uL3N1YjMnCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBtZXNzYWdlcyBmcm9tICJmb3JlYWNoIC0tcmVjdXJzaXZlIiBmcm9tIHN1YmRpcmVjdG9yeScgJworCSgKKwkJY2QgY2xvbmUyICYmCisJCW1rZGlyIHVudHJhY2tlZCAmJgorCQljZCB1bnRyYWNrZWQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIC0tcmVjdXJzaXZlID4uLi8uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKK3N1YjFzaGExPSQoY2QgY2xvbmUyL3N1YjEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorc3ViMnNoYTE9JChjZCBjbG9uZTIvc3ViMiAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCitzdWIzc2hhMT0kKGNkIGNsb25lMi9zdWIzICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK25lc3RlZDFzaGExPSQoY2QgY2xvbmUyL25lc3RlZDEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorbmVzdGVkMnNoYTE9JChjZCBjbG9uZTIvbmVzdGVkMS9uZXN0ZWQyICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK25lc3RlZDNzaGExPSQoY2QgY2xvbmUyL25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1Ym1vZHVsZXNoYTE9JChjZCBjbG9uZTIvbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKKworY2F0ID5leHBlY3QgPDxFT0YKK0VudGVyaW5nICcuLi9uZXN0ZWQxJwordG9wbGV2ZWw6ICRwd2QvY2xvbmUyIG5hbWU6IG5lc3RlZDEgcGF0aDogbmVzdGVkMSBkaXNwbGF5cGF0aDogLi4vbmVzdGVkMSBoYXNoOiAkbmVzdGVkMXNoYTEKK0VudGVyaW5nICcuLi9uZXN0ZWQxL25lc3RlZDInCit0b3BsZXZlbDogJHB3ZC9jbG9uZTIvbmVzdGVkMSBuYW1lOiBuZXN0ZWQyIHBhdGg6IG5lc3RlZDIgZGlzcGxheXBhdGg6IC4uL25lc3RlZDEvbmVzdGVkMiBoYXNoOiAkbmVzdGVkMnNoYTEKK0VudGVyaW5nICcuLi9uZXN0ZWQxL25lc3RlZDIvbmVzdGVkMycKK3RvcGxldmVsOiAkcHdkL2Nsb25lMi9uZXN0ZWQxL25lc3RlZDIgbmFtZTogbmVzdGVkMyBwYXRoOiBuZXN0ZWQzIGRpc3BsYXlwYXRoOiAuLi9uZXN0ZWQxL25lc3RlZDIvbmVzdGVkMyBoYXNoOiAkbmVzdGVkM3NoYTEKK0VudGVyaW5nICcuLi9uZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUnCit0b3BsZXZlbDogJHB3ZC9jbG9uZTIvbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMgbmFtZTogc3VibW9kdWxlIHBhdGg6IHN1Ym1vZHVsZSBkaXNwbGF5cGF0aDogLi4vbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlIGhhc2g6ICRzdWJtb2R1bGVzaGExCitFbnRlcmluZyAnLi4vc3ViMScKK3RvcGxldmVsOiAkcHdkL2Nsb25lMiBuYW1lOiBmb28xIHBhdGg6IHN1YjEgZGlzcGxheXBhdGg6IC4uL3N1YjEgaGFzaDogJHN1YjFzaGExCitFbnRlcmluZyAnLi4vc3ViMicKK3RvcGxldmVsOiAkcHdkL2Nsb25lMiBuYW1lOiBmb28yIHBhdGg6IHN1YjIgZGlzcGxheXBhdGg6IC4uL3N1YjIgaGFzaDogJHN1YjJzaGExCitFbnRlcmluZyAnLi4vc3ViMycKK3RvcGxldmVsOiAkcHdkL2Nsb25lMiBuYW1lOiBmb28zIHBhdGg6IHN1YjMgZGlzcGxheXBhdGg6IC4uL3N1YjMgaGFzaDogJHN1YjNzaGExCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAic3VibW9kdWxlIGZvcmVhY2ggLS1yZWN1cnNpdmUiIGZyb20gc3ViZGlyZWN0b3J5JyAnCisJKAorCQljZCBjbG9uZTIvdW50cmFja2VkICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAtLXJlY3Vyc2l2ZSAiZWNobyB0b3BsZXZlbDogXCR0b3BsZXZlbCBuYW1lOiBcJG5hbWUgcGF0aDogXCRzbV9wYXRoIGRpc3BsYXlwYXRoOiBcJGRpc3BsYXlwYXRoIGhhc2g6IFwkc2hhMSIgPi4uLy4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK25lc3RlZDEtbmVzdGVkMQorbmVzdGVkMi1uZXN0ZWQyCituZXN0ZWQzLW5lc3RlZDMKK3N1Ym1vZHVsZS1zdWJtb2R1bGUKK2ZvbzEtc3ViMQorZm9vMi1zdWIyCitmb28zLXN1YjMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0ICJmb3JlYWNoIC0tcXVpZXQgLS1yZWN1cnNpdmUiJyAnCisJKAorCQljZCBjbG9uZTIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIC1xIC0tcmVjdXJzaXZlICJlY2hvIFwkbmFtZS1cJHBhdGgiID4gLi4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlICJ1cGRhdGUgLS1yZWN1cnNpdmUiIHRvIGNoZWNrb3V0IGFsbCBzdWJtb2R1bGVzJyAnCisJZ2l0IGNsb25lIHN1cGVyIGNsb25lMyAmJgorCSgKKwkJY2QgY2xvbmUzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMS8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMi8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMy8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS8uZ2l0ICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjEvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjIvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjMvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzL3N1Ym1vZHVsZS8uZ2l0CisJKQorJworCituZXN0ZWQxc2hhMT0kKGNkIGNsb25lMy9uZXN0ZWQxICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK25lc3RlZDJzaGExPSQoY2QgY2xvbmUzL25lc3RlZDEvbmVzdGVkMiAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCituZXN0ZWQzc2hhMT0kKGNkIGNsb25lMy9uZXN0ZWQxL25lc3RlZDIvbmVzdGVkMyAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCitzdWJtb2R1bGVzaGExPSQoY2QgY2xvbmUzL25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzL3N1Ym1vZHVsZSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCitzdWIxc2hhMT0kKGNkIGNsb25lMy9zdWIxICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1YjJzaGExPSQoY2QgY2xvbmUzL3N1YjIgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorc3ViM3NoYTE9JChjZCBjbG9uZTMvc3ViMyAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCitzdWIxc2hhMV9zaG9ydD0kKGNkIGNsb25lMy9zdWIxICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKQorc3ViMnNoYTFfc2hvcnQ9JChjZCBjbG9uZTMvc3ViMiAmJiBnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkKKworY2F0ID4gZXhwZWN0IDw8RU9GCisgJG5lc3RlZDFzaGExIG5lc3RlZDEgKGhlYWRzL21hc3RlcikKKyAkbmVzdGVkMnNoYTEgbmVzdGVkMS9uZXN0ZWQyIChoZWFkcy9tYXN0ZXIpCisgJG5lc3RlZDNzaGExIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzIChoZWFkcy9tYXN0ZXIpCisgJHN1Ym1vZHVsZXNoYTEgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlIChoZWFkcy9tYXN0ZXIpCisgJHN1YjFzaGExIHN1YjEgKCRzdWIxc2hhMV9zaG9ydCkKKyAkc3ViMnNoYTEgc3ViMiAoJHN1YjJzaGExX3Nob3J0KQorICRzdWIzc2hhMSBzdWIzIChoZWFkcy9tYXN0ZXIpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAic3RhdHVzIC0tcmVjdXJzaXZlIicgJworCSgKKwkJY2QgY2xvbmUzICYmCisJCWdpdCBzdWJtb2R1bGUgc3RhdHVzIC0tcmVjdXJzaXZlID4gLi4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCisgJG5lc3RlZDFzaGExIG5lc3RlZDEgKGhlYWRzL21hc3RlcikKKyskbmVzdGVkMnNoYTEgbmVzdGVkMS9uZXN0ZWQyIChmaWxlMn4xKQorICRuZXN0ZWQzc2hhMSBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMyAoaGVhZHMvbWFzdGVyKQorICRzdWJtb2R1bGVzaGExIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzL3N1Ym1vZHVsZSAoaGVhZHMvbWFzdGVyKQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vuc3VyZSAic3RhdHVzIC0tY2FjaGVkIC0tcmVjdXJzaXZlIiBwcmVzZXJ2ZXMgdGhlIC0tY2FjaGVkIGZsYWcnICcKKwkoCisJCWNkIGNsb25lMyAmJgorCQkoCisJCQljZCBuZXN0ZWQxL25lc3RlZDIgJiYKKwkJCXRlc3RfY29tbWl0IGZpbGUyCisJCSkgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgLS1jYWNoZWQgLS1yZWN1cnNpdmUgLS0gbmVzdGVkMSA+IC4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK25lc3RlZDJzaGExPSQoZ2l0IC1DIGNsb25lMy9uZXN0ZWQxL25lc3RlZDIgcmV2LXBhcnNlIEhFQUQpCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorICRuZXN0ZWQxc2hhMSAuLi9uZXN0ZWQxIChoZWFkcy9tYXN0ZXIpCisrJG5lc3RlZDJzaGExIC4uL25lc3RlZDEvbmVzdGVkMiAoZmlsZTIpCisgJG5lc3RlZDNzaGExIC4uL25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzIChoZWFkcy9tYXN0ZXIpCisgJHN1Ym1vZHVsZXNoYTEgLi4vbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlIChoZWFkcy9tYXN0ZXIpCisgJHN1YjFzaGExIC4uL3N1YjEgKCRzdWIxc2hhMV9zaG9ydCkKKyAkc3ViMnNoYTEgLi4vc3ViMiAoJHN1YjJzaGExX3Nob3J0KQorICRzdWIzc2hhMSAuLi9zdWIzIChoZWFkcy9tYXN0ZXIpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAic3RhdHVzIC0tcmVjdXJzaXZlIiBmcm9tIHN1YiBkaXJlY3RvcnknICcKKwkoCisJCWNkIGNsb25lMyAmJgorCQlta2RpciB0bXAgJiYgY2QgdG1wICYmCisJCWdpdCBzdWJtb2R1bGUgc3RhdHVzIC0tcmVjdXJzaXZlID4gLi4vLi4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlICJnaXQgY2xvbmUgLS1yZWN1cnNpdmUiIHRvIGNoZWNrb3V0IGFsbCBzdWJtb2R1bGVzJyAnCisJZ2l0IGNsb25lIC0tcmVjdXJzaXZlIHN1cGVyIGNsb25lNCAmJgorCSgKKwkJY2QgY2xvbmU0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjEvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjIvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjMvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzL3N1Ym1vZHVsZS8uZ2l0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0ICJ1cGRhdGUgLS1yZWN1cnNpdmUiIHdpdGggYSBmbGFnIHdpdGggc3BhY2VzJyAnCisJZ2l0IGNsb25lIHN1cGVyICJjb21tb24gb2JqZWN0cyIgJiYKKwlnaXQgY2xvbmUgc3VwZXIgY2xvbmU1ICYmCisJKAorCQljZCBjbG9uZTUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBkIG5lc3RlZDEvLmdpdCAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgLS1yZWZlcmVuY2U9IiQoZGlybmFtZSAiJFBXRCIpL2NvbW1vbiBvYmplY3RzIiAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvLmdpdCAmJgorCQl0ZXN0IC1mIC5naXQvbW9kdWxlcy9uZXN0ZWQxL29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJCXRlc3QgLWYgLmdpdC9tb2R1bGVzL25lc3RlZDEvbW9kdWxlcy9uZXN0ZWQyL29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJCXRlc3QgLWYgLmdpdC9tb2R1bGVzL25lc3RlZDEvbW9kdWxlcy9uZXN0ZWQyL21vZHVsZXMvbmVzdGVkMy9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlICJ1cGRhdGUgLS1yZWN1cnNpdmUgbmVzdGVkMSIgdG8gY2hlY2tvdXQgYWxsIHN1Ym1vZHVsZXMgcm9vdGVkIGluIG5lc3RlZDEnICcKKwlnaXQgY2xvbmUgc3VwZXIgY2xvbmU2ICYmCisJKAorCQljZCBjbG9uZTYgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIxLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIyLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIzLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxLy5naXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlIC0tIG5lc3RlZDEgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIxLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIyLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIzLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUvLmdpdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWFuZCBwYXNzZWQgdG8gZm9yZWFjaCByZXRhaW5zIG5vdGlvbiBvZiBzdGRpbicgJworCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIGVjaG8gc3VjY2VzcyA+Li4vZXhwZWN0ZWQgJiYKKwkJeWVzIHwgZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoICJyZWFkIHkgJiYgdGVzdCBcInhcJHlcIiA9IHh5ICYmIGVjaG8gc3VjY2VzcyIgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWFuZCBwYXNzZWQgdG8gZm9yZWFjaCAtLXJlY3Vyc2l2ZSByZXRhaW5zIG5vdGlvbiBvZiBzdGRpbicgJworCSgKKwkJY2QgY2xvbmUyICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAtLXJlY3Vyc2l2ZSBlY2hvIHN1Y2Nlc3MgPi4uL2V4cGVjdGVkICYmCisJCXllcyB8IGdpdCBzdWJtb2R1bGUgZm9yZWFjaCAtLXJlY3Vyc2l2ZSAicmVhZCB5ICYmIHRlc3QgXCJ4XCR5XCIgPSB4eSAmJiBlY2hvIHN1Y2Nlc3MiID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpLWFyZ3VtZW50IGNvbW1hbmQgcGFzc2VkIHRvIGZvcmVhY2ggaXMgbm90IHNoZWxsLWV2YWx1YXRlZCB0d2ljZScgJworCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoICJlY2hvIFxcXCJxdW90ZWRcXFwiIiA+IC4uL2V4cGVjdGVkICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCBlY2hvIFwicXVvdGVkXCIgPiAuLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbi1saWtlIGFyZ3VtZW50cyBwYXNzZWQgdG8gZm9yZWFjaCBjb21tYW5kcyBhcmUgbm90IGxvc3QnICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAiZWNobyBiZSAtLXF1aWV0IiA+IC4uL2V4cGVjdGVkICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCBlY2hvIGJlIC0tcXVpZXQgPiAuLi9hY3R1YWwKKwkpICYmCisJZ3JlcCAtc3EgLWUgIi0tcXVpZXQiIGV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbi1saWtlIGFyZ3VtZW50cyBwYXNzZWQgdG8gZm9yZWFjaCByZWN1cnNlIGNvcnJlY3RseScgJworCWdpdCAtQyBjbG9uZTIgc3VibW9kdWxlIGZvcmVhY2ggLS1yZWN1cnNpdmUgImVjaG8gYmUgLS1hbi1vcHRpb24iID5leHBlY3QgJiYKKwlnaXQgLUMgY2xvbmUyIHN1Ym1vZHVsZSBmb3JlYWNoIC0tcmVjdXJzaXZlIGVjaG8gYmUgLS1hbi1vcHRpb24gPmFjdHVhbCAmJgorCWdyZXAgLWUgIi0tYW4tb3B0aW9uIiBleHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwOC1zdWJtb2R1bGUtcmVmZXJlbmNlLnNoIGIvdC90NzQwOC1zdWJtb2R1bGUtcmVmZXJlbmNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEzODkyZjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDA4LXN1Ym1vZHVsZS1yZWZlcmVuY2Uuc2gKQEAgLTAsMCArMSwyMTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDksIFJlZCBIYXQgSW5jLCBBdXRob3I6IE1pY2hhZWwgUy4gVHNpcmtpbiAobXN0QHJlZGhhdC5jb20pCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2xvbmUgLS1yZWZlcmVuY2UnCisuIC4vdGVzdC1saWIuc2gKKworYmFzZV9kaXI9JChwd2QpCisKK3Rlc3RfYWx0ZXJuYXRlX2lzX3VzZWQgKCkgeworCWFsdGVybmF0ZXNfZmlsZT0iJDEiICYmCisJd29ya2luZ19kaXI9IiQyIiAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgIiRhbHRlcm5hdGVzX2ZpbGUiICYmCisJZWNobyAiMCBvYmplY3RzLCAwIGtpbG9ieXRlcyIgPmV4cGVjdCAmJgorCWdpdCAtQyAiJHdvcmtpbmdfZGlyIiBjb3VudC1vYmplY3RzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBmaXJzdCByZXBvc2l0b3J5JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBBICYmCisJKAorCQljZCBBICYmCisJCWVjaG8gZmlyc3QgPmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSBBLWluaXRpYWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBzZWNvbmQgcmVwb3NpdG9yeScgJworCWdpdCBjbG9uZSBBIEIgJiYKKwkoCisJCWNkIEIgJiYKKwkJZWNobyBzZWNvbmQgPmZpbGUyICYmCisJCWdpdCBhZGQgZmlsZTIgJiYKKwkJZ2l0IGNvbW1pdCAtbSBCLWFkZGl0aW9uICYmCisJCWdpdCByZXBhY2sgLWEgLWQgJiYKKwkJZ2l0IHBydW5lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgc3VwZXJwcm9qZWN0JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzdXBlciAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZWNobyBmaWxlID5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIEItc3VwZXItaW5pdGlhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCAtLXJlZmVyZW5jZSB1c2VzIGFsdGVybmF0ZXMnICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC0tcmVmZXJlbmNlIC4uL0IgImZpbGU6Ly8kYmFzZV9kaXIvQSIgc3ViICYmCisJCWdpdCBjb21taXQgLW0gQi1zdXBlci1hZGRlZCAmJgorCQlnaXQgcmVwYWNrIC1hZAorCSkgJiYKKwl0ZXN0X2FsdGVybmF0ZV9pc191c2VkIHN1cGVyLy5naXQvbW9kdWxlcy9zdWIvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgc3VwZXIvc3ViCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgLS1yZWZlcmVuY2Ugd2l0aCAtLWRpc3NvY2lhdGUgZG9lcyBub3QgdXNlIGFsdGVybmF0ZXMnICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC0tcmVmZXJlbmNlIC4uL0IgLS1kaXNzb2NpYXRlICJmaWxlOi8vJGJhc2VfZGlyL0EiIHN1Yi1kaXNzb2NpYXRlICYmCisJCWdpdCBjb21taXQgLW0gQi1zdXBlci1hZGRlZCAmJgorCQlnaXQgcmVwYWNrIC1hZAorCSkgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdXBlci8uZ2l0L21vZHVsZXMvc3ViLWRpc3NvY2lhdGUvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhhdCByZWZlcmVuY2UgZ2V0cyB1c2VkIHdpdGggYWRkJyAnCisJKAorCQljZCBzdXBlci9zdWIgJiYKKwkJZWNobyAiMCBvYmplY3RzLCAwIGtpbG9ieXRlcyIgPmV4cGVjdGVkICYmCisJCWdpdCBjb3VudC1vYmplY3RzID5jdXJyZW50ICYmCisJCWRpZmYgZXhwZWN0ZWQgY3VycmVudAorCSkKKycKKworIyBUaGUgdGVzdHMgdXAgdG8gdGhpcyBwb2ludCwgYW5kIHJlcG9zaXRvcmllcyBjcmVhdGVkIGJ5IHRoZW0KKyMgKEEsIEIsIHN1cGVyIGFuZCBzdXBlci9zdWIpLCBhcmUgYWJvdXQgc2V0dGluZyB1cCB0aGUgc3RhZ2UKKyMgZm9yIHN1YnNlcXVlbnQgdGVzdHMgYW5kIG1lYW50IHRvIGJlIGtlcHQgdGhyb3VnaG91dCB0aGUKKyMgcmVtYWluZGVyIG9mIHRoZSB0ZXN0LgorIyBUZXN0cyBmcm9tIGhlcmUgb24sIGlmIHRoZXkgY3JlYXRlIHRoZWlyIG93biB0ZXN0IHJlcG9zaXRvcnksCisjIGFyZSBleHBlY3RlZCB0byBjbGVhbiBhZnRlciB0aGVtc2VsdmVzLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGluZyBzdXBlcnByb2plY3Qga2VlcHMgYWx0ZXJuYXRlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyLWNsb25lIiAmJgorCWdpdCBjbG9uZSBzdXBlciBzdXBlci1jbG9uZSAmJgorCWdpdCAtQyBzdXBlci1jbG9uZSBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlZmVyZW5jZSAuLi9CICYmCisJdGVzdF9hbHRlcm5hdGVfaXNfdXNlZCBzdXBlci1jbG9uZS8uZ2l0L21vZHVsZXMvc3ViL29iamVjdHMvaW5mby9hbHRlcm5hdGVzIHN1cGVyLWNsb25lL3N1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGluZyBzdXBlcnByb2plY3Qgd2l0aCAtLWRpc3NvY2lhdGUgZG9lcyBub3Qga2VlcCBhbHRlcm5hdGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXItY2xvbmUiICYmCisJZ2l0IGNsb25lIHN1cGVyIHN1cGVyLWNsb25lICYmCisJZ2l0IC1DIHN1cGVyLWNsb25lIHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVmZXJlbmNlIC4uL0IgLS1kaXNzb2NpYXRlICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VwZXItY2xvbmUvLmdpdC9tb2R1bGVzL3N1Yi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGVzIHVzZSBhbHRlcm5hdGVzIHdoZW4gY2xvbmluZyBhIHN1cGVycHJvamVjdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyLWNsb25lIiAmJgorCWdpdCBjbG9uZSAtLXJlZmVyZW5jZSBzdXBlciAtLXJlY3Vyc2l2ZSBzdXBlciBzdXBlci1jbG9uZSAmJgorCSgKKwkJY2Qgc3VwZXItY2xvbmUgJiYKKwkJIyB0ZXN0IHN1cGVycHJvamVjdCBoYXMgYWx0ZXJuYXRlcyBzZXR1cCBjb3JyZWN0bHkKKwkJdGVzdF9hbHRlcm5hdGVfaXNfdXNlZCAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIC4gJiYKKwkJIyB0ZXN0IHN1Ym1vZHVsZSBoYXMgY29ycmVjdCBzZXR1cAorCQl0ZXN0X2FsdGVybmF0ZV9pc191c2VkIC5naXQvbW9kdWxlcy9zdWIvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgc3ViCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIHN1Ym1vZHVsZSBhbHRlcm5hdGUgZmFpbHMgY2xvbmUgYW5kIHN1Ym1vZHVsZSB1cGRhdGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlci1jbG9uZSIgJiYKKwlnaXQgY2xvbmUgc3VwZXIgc3VwZXIyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tcmVjdXJzaXZlIC0tcmVmZXJlbmNlIHN1cGVyMiBzdXBlcjIgc3VwZXItY2xvbmUgJiYKKwkoCisJCWNkIHN1cGVyLWNsb25lICYmCisJCSMgdGVzdCBzdXBlcnByb2plY3QgaGFzIGFsdGVybmF0ZXMgc2V0dXAgY29ycmVjdGx5CisJCXRlc3RfYWx0ZXJuYXRlX2lzX3VzZWQgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAuICYmCisJCSMgdXBkYXRlIG9mIHRoZSBzdWJtb2R1bGUgc3VjY2VlZHMKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJCSMgYW5kIHdlIGhhdmUgbm8gYWx0ZXJuYXRlczoKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9tb2R1bGVzL3N1Yi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWIvZmlsZTEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lnbm9yaW5nIG1pc3Npbmcgc3VibW9kdWxlIGFsdGVybmF0ZXMgcGFzc2VzIGNsb25lIGFuZCBzdWJtb2R1bGUgdXBkYXRlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXItY2xvbmUiICYmCisJZ2l0IGNsb25lIC0tcmVmZXJlbmNlLWlmLWFibGUgc3VwZXIyIC0tcmVjdXJzaXZlIHN1cGVyMiBzdXBlci1jbG9uZSAmJgorCSgKKwkJY2Qgc3VwZXItY2xvbmUgJiYKKwkJIyB0ZXN0IHN1cGVycHJvamVjdCBoYXMgYWx0ZXJuYXRlcyBzZXR1cCBjb3JyZWN0bHkKKwkJdGVzdF9hbHRlcm5hdGVfaXNfdXNlZCAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIC4gJiYKKwkJIyB1cGRhdGUgb2YgdGhlIHN1Ym1vZHVsZSBzdWNjZWVkcworCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwkJIyBhbmQgd2UgaGF2ZSBubyBhbHRlcm5hdGVzOgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L21vZHVsZXMvc3ViL29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHN1Yi9maWxlMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyaW5nIHNlY29uZCBzdXBlcnByb2plY3Qgd2l0aCBhIG5lc3RlZCBzdWJtb2R1bGUgcGx1cyBwYXJ0aWFsIGNsb25lJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzdXBlcnN1cGVyICYmCisJKAorCQljZCBzdXBlcnN1cGVyICYmCisJCWVjaG8gIkkgYW0gc3VwZXIgc3VwZXIuIiA+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBCLXN1cGVyLXN1cGVyLWluaXRpYWwgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgImZpbGU6Ly8kYmFzZV9kaXIvc3VwZXIiIHN1YndpdGhzdWIgJiYKKwkJZ2l0IGNvbW1pdCAtbSBCLXN1cGVyLXN1cGVyLWFkZGVkICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQlnaXQgcmVwYWNrIC1hZAorCSkgJiYKKwlnaXQgY2xvbmUgc3VwZXJzdXBlciBzdXBlcnN1cGVyMiAmJgorCSgKKwkJY2Qgc3VwZXJzdXBlcjIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0CisJKQorJworCisjIEF0IHRoaXMgcG9pbnQgdGhlcmUgYXJlIHRocmVlIHJvb3QtbGV2ZWwgcG9zaXRvcmllczogQSwgQiwgc3VwZXIgYW5kIHN1cGVyMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXN0ZWQgc3VibW9kdWxlIGFsdGVybmF0ZSBpbiB3b3JrcyBhbmQgaXMgYWN0dWFsbHkgdXNlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyc3VwZXItY2xvbmUiICYmCisJZ2l0IGNsb25lIC0tcmVjdXJzaXZlIC0tcmVmZXJlbmNlIHN1cGVyc3VwZXIgc3VwZXJzdXBlciBzdXBlcnN1cGVyLWNsb25lICYmCisJKAorCQljZCBzdXBlcnN1cGVyLWNsb25lICYmCisJCSMgdGVzdCBzdXBlcnByb2plY3QgaGFzIGFsdGVybmF0ZXMgc2V0dXAgY29ycmVjdGx5CisJCXRlc3RfYWx0ZXJuYXRlX2lzX3VzZWQgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAuICYmCisJCSMgaW1tZWRpYXRlIHN1Ym1vZHVsZSBoYXMgYWx0ZXJuYXRlOgorCQl0ZXN0X2FsdGVybmF0ZV9pc191c2VkIC5naXQvbW9kdWxlcy9zdWJ3aXRoc3ViL29iamVjdHMvaW5mby9hbHRlcm5hdGVzIHN1YndpdGhzdWIgJiYKKwkJIyBuZXN0ZWQgc3VibW9kdWxlIGFsc28gaGFzIGFsdGVybmF0ZToKKwkJdGVzdF9hbHRlcm5hdGVfaXNfdXNlZCAuZ2l0L21vZHVsZXMvc3Vid2l0aHN1Yi9tb2R1bGVzL3N1Yi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBzdWJ3aXRoc3ViL3N1YgorCSkKKycKKworY2hlY2tfdGhhdF90d29fb2ZfdGhyZWVfYWx0ZXJuYXRlc19hcmVfdXNlZCgpIHsKKwl0ZXN0X2FsdGVybmF0ZV9pc191c2VkIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgLiAmJgorCSMgaW1tZWRpYXRlIHN1Ym1vZHVsZSBoYXMgYWx0ZXJuYXRlOgorCXRlc3RfYWx0ZXJuYXRlX2lzX3VzZWQgLmdpdC9tb2R1bGVzL3N1YndpdGhzdWIvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgc3Vid2l0aHN1YiAmJgorCSMgYnV0IG5lc3RlZCBzdWJtb2R1bGUgaGFzIG5vIGFsdGVybmF0ZToKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L21vZHVsZXMvc3Vid2l0aHN1Yi9tb2R1bGVzL3N1Yi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworfQorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgbmVzdGVkIHN1Ym1vZHVsZSBhbHRlcm5hdGUgZmFpbHMgY2xvbmUgYW5kIHN1Ym1vZHVsZSB1cGRhdGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcnN1cGVyLWNsb25lIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLXJlY3Vyc2l2ZSAtLXJlZmVyZW5jZSBzdXBlcnN1cGVyMiBzdXBlcnN1cGVyMiBzdXBlcnN1cGVyLWNsb25lICYmCisJKAorCQljZCBzdXBlcnN1cGVyLWNsb25lICYmCisJCWNoZWNrX3RoYXRfdHdvX29mX3RocmVlX2FsdGVybmF0ZXNfYXJlX3VzZWQgJiYKKwkJIyB1cGRhdGUgb2YgdGhlIHN1Ym1vZHVsZSBmYWlscworCQl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgbmVzdGVkIHN1Ym1vZHVsZSBhbHRlcm5hdGUgaW4gLS1yZWZlcmVuY2UtaWYtYWJsZSBtb2RlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXJzdXBlci1jbG9uZSIgJiYKKwlnaXQgY2xvbmUgLS1yZWN1cnNpdmUgLS1yZWZlcmVuY2UtaWYtYWJsZSBzdXBlcnN1cGVyMiBzdXBlcnN1cGVyMiBzdXBlcnN1cGVyLWNsb25lICYmCisJKAorCQljZCBzdXBlcnN1cGVyLWNsb25lICYmCisJCWNoZWNrX3RoYXRfdHdvX29mX3RocmVlX2FsdGVybmF0ZXNfYXJlX3VzZWQgJiYKKwkJIyB1cGRhdGUgb2YgdGhlIHN1Ym1vZHVsZSBzdWNjZWVkcworCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwOS1zdWJtb2R1bGUtZGV0YWNoZWQtd29yay10cmVlLnNoIGIvdC90NzQwOS1zdWJtb2R1bGUtZGV0YWNoZWQtd29yay10cmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZjMDE4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDA5LXN1Ym1vZHVsZS1kZXRhY2hlZC13b3JrLXRyZWUuc2gKQEAgLTAsMCArMSw4NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBEYW5pZWwgR3Jhw7FhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgc3VibW9kdWxlcyBvbiBkZXRhY2hlZCB3b3JraW5nIHRyZWUKKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgImdpdCBzdWJtb2R1bGUiIGluaXRpYWxpemF0aW9uLCB1cGRhdGUgYW5kIGFkZGl0aW9uIHdvcmtzCitvbiBkZXRhY2hlZCB3b3JraW5nIHRyZWVzCisnCisKK1RFU1RfTk9fQ1JFQVRFX1JFUE89MQorLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBvbiBkZXRhY2hlZCB3b3JraW5nIHRyZWUnICcKKwlnaXQgaW5pdCAtLWJhcmUgcmVtb3RlICYmCisJdGVzdF9jcmVhdGVfcmVwbyBidW5kbGUxICYmCisJKAorCQljZCBidW5kbGUxICYmCisJCXRlc3RfY29tbWl0ICJzaG9vdCIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9leHBlY3QKKwkpICYmCisJbWtkaXIgaG9tZSAmJgorCSgKKwkJY2QgaG9tZSAmJgorCQlHSVRfV09SS19UUkVFPSIkKHB3ZCkiICYmCisJCUdJVF9ESVI9IiQocHdkKS8uZG90ZmlsZXMiICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFIEdJVF9ESVIgJiYKKwkJZ2l0IGNsb25lIC0tYmFyZSAuLi9yZW1vdGUgLmRvdGZpbGVzICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL2J1bmRsZTEgLnZpbS9idW5kbGUvc29nb29kICYmCisJCXRlc3RfY29tbWl0ICJzb2dvb2QiICYmCisJCSgKKwkJCXVuc2V0IEdJVF9XT1JLX1RSRUUgR0lUX0RJUiAmJgorCQkJY2QgLnZpbS9idW5kbGUvc29nb29kICYmCisJCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmFjdHVhbCAmJgorCQkJdGVzdF9jbXAgLi4vLi4vLi4vLi4vZXhwZWN0IGFjdHVhbAorCQkpICYmCisJCWdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIKKwkpICYmCisJbWtkaXIgaG9tZTIgJiYKKwkoCisJCWNkIGhvbWUyICYmCisJCWdpdCBjbG9uZSAtLWJhcmUgLi4vcmVtb3RlIC5kb3RmaWxlcyAmJgorCQlHSVRfV09SS19UUkVFPSIkKHB3ZCkiICYmCisJCUdJVF9ESVI9IiQocHdkKS8uZG90ZmlsZXMiICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFIEdJVF9ESVIgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwkJKAorCQkJdW5zZXQgR0lUX1dPUktfVFJFRSBHSVRfRElSICYmCisJCQljZCAudmltL2J1bmRsZS9zb2dvb2QgJiYKKwkJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+YWN0dWFsICYmCisJCQl0ZXN0X2NtcCAuLi8uLi8uLi8uLi9leHBlY3QgYWN0dWFsCisJCSkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBvbiBkZXRhY2hlZCB3b3JraW5nIHBvaW50ZWQgYnkgY29yZS53b3JrdHJlZScgJworCW1rZGlyIGhvbWUzICYmCisJKAorCQljZCBob21lMyAmJgorCQlHSVRfRElSPSIkKHB3ZCkvLmRvdGZpbGVzIiAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQlnaXQgY2xvbmUgLS1iYXJlIC4uL3JlbW90ZSAiJEdJVF9ESVIiICYmCisJCWdpdCBjb25maWcgY29yZS5iYXJlIGZhbHNlICYmCisJCWdpdCBjb25maWcgY29yZS53b3JrdHJlZSAuLiAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL2J1bmRsZTEgLnZpbS9idW5kbGUvZHVwZSAmJgorCQl0ZXN0X2NvbW1pdCAiZHVwZSIgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIGhvbWUgJiYKKwkJR0lUX0RJUj0iJChwd2QpLy5kb3RmaWxlcyIgJiYKKwkJZXhwb3J0IEdJVF9ESVIgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmJhcmUgZmFsc2UgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlIC4uICYmCisJCWdpdCBwdWxsICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCQl0ZXN0IC1mIC52aW0vYnVuZGxlL2R1cGUvc2hvb3QudAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDExLXN1Ym1vZHVsZS1jb25maWcuc2ggYi90L3Q3NDExLXN1Ym1vZHVsZS1jb25maWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWQyOGU5MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MTEtc3VibW9kdWxlLWNvbmZpZy5zaApAQCAtMCwwICsxLDI1OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBIZWlrbyBWb2lndAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHN1Ym1vZHVsZXMgY29uZmlnIGNhY2hlIGluZnJhc3RydWN0dXJlCisKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IHBhcnNpbmcgLmdpdG1vZHVsZXMgY29uZmlndXJhdGlvbnMgZGlyZWN0bHkKK2Zyb20gdGhlIGRhdGFiYXNlIGFuZCBmcm9tIHRoZSB3b3JrdHJlZSB3b3Jrcy4KKycKKworVEVTVF9OT19DUkVBVEVfUkVQTz0xCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbmZpZyBjYWNoZSBzZXR1cCcgJworCW1rZGlyIHN1Ym1vZHVsZSAmJgorCShjZCBzdWJtb2R1bGUgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBhID5hICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgY29tbWl0IC1tYQorCSkgJiYKKwlta2RpciBzdXBlciAmJgorCShjZCBzdXBlciAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGFzIHN1Ym1vZHVsZSBhbmQgYXMgYSIgJiYKKwkJZ2l0IG12IGEgYiAmJgorCQlnaXQgY29tbWl0IC1tICJtb3ZlIGEgdG8gYiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZ3VyYXRpb24gcGFyc2luZyB3aXRoIGVycm9yJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgcmVwbyIgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlcG8gJiYKKwljYXQgPnJlcG8vLmdpdG1vZHVsZXMgPDwtXEVPRiAmJgorCVtzdWJtb2R1bGUgInMiXQorCQlwYXRoCisJCWlnbm9yZQorCUVPRgorCSgKKwkJY2QgcmVwbyAmJgorCQl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgc3VibW9kdWxlLWNvbmZpZyAiIiBzIDI+YWN0dWFsICYmCisJCXRlc3RfaTE4bmdyZXAgImJhZCBjb25maWciIGFjdHVhbAorCSkKKycKKworY2F0ID5zdXBlci9leHBlY3QgPDxFT0YKK1N1Ym1vZHVsZSBuYW1lOiAnYScgZm9yIHBhdGggJ2EnCitTdWJtb2R1bGUgbmFtZTogJ2EnIGZvciBwYXRoICdiJworU3VibW9kdWxlIG5hbWU6ICdzdWJtb2R1bGUnIGZvciBwYXRoICdzdWJtb2R1bGUnCitTdWJtb2R1bGUgbmFtZTogJ3N1Ym1vZHVsZScgZm9yIHBhdGggJ3N1Ym1vZHVsZScKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHBhcnNpbmcgYW5kIGxvb2t1cCBvZiBzdWJtb2R1bGUgY29uZmlnIGJ5IHBhdGgnICcKKwkoY2Qgc3VwZXIgJiYKKwkJdGVzdC10b29sIHN1Ym1vZHVsZS1jb25maWcgXAorCQkJSEVBRF4gYSBcCisJCQlIRUFEIGIgXAorCQkJSEVBRF4gc3VibW9kdWxlIFwKKwkJCUhFQUQgc3VibW9kdWxlIFwKKwkJCQk+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcGFyc2luZyBhbmQgbG9va3VwIG9mIHN1Ym1vZHVsZSBjb25maWcgYnkgbmFtZScgJworCShjZCBzdXBlciAmJgorCQl0ZXN0LXRvb2wgc3VibW9kdWxlLWNvbmZpZyAtLW5hbWUgXAorCQkJSEVBRF4gYSBcCisJCQlIRUFEIGEgXAorCQkJSEVBRF4gc3VibW9kdWxlIFwKKwkJCUhFQUQgc3VibW9kdWxlIFwKKwkJCQk+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK2NhdCA+c3VwZXIvZXhwZWN0X2Vycm9yIDw8RU9GCitTdWJtb2R1bGUgbmFtZTogJ2EnIGZvciBwYXRoICdiJworU3VibW9kdWxlIG5hbWU6ICdzdWJtb2R1bGUnIGZvciBwYXRoICdzdWJtb2R1bGUnCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3IgaW4gaGlzdG9yeSBvZiBvbmUgc3VibW9kdWxlIGNvbmZpZyBsZXRzIGNvbnRpbnVlLCBzdGRlcnIgbWVzc2FnZSBjb250YWlucyBibG9iIHJlZicgJworCU9SSUc9JChnaXQgLUMgc3VwZXIgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgc3VwZXIgcmVzZXQgLS1oYXJkICRPUklHIiAmJgorCShjZCBzdXBlciAmJgorCQljcCAuZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcy5iYWsgJiYKKwkJZWNobyAiCXZhbHVlID0gXCIiID4+LmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCQltdiAuZ2l0bW9kdWxlcy5iYWsgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGVycm9yIiAmJgorCQlzaGExPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQl0ZXN0LXRvb2wgc3VibW9kdWxlLWNvbmZpZyBcCisJCQlIRUFEIGIgXAorCQkJSEVBRCBzdWJtb2R1bGUgXAorCQkJCT5hY3R1YWwgXAorCQkJCTI+YWN0dWFsX3N0ZGVyciAmJgorCQl0ZXN0X2NtcCBleHBlY3RfZXJyb3IgYWN0dWFsICYmCisJCXRlc3RfaTE4bmdyZXAgInN1Ym1vZHVsZS1ibG9iICRzaGExOi5naXRtb2R1bGVzIiBhY3R1YWxfc3RkZXJyID4vZGV2L251bGwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIGRpZmZlcmVudCB0cmVlaXNocyB3b3JrcycgJworCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IHRhZyBuZXdfdGFnICYmCisJCXRyZWU9JChnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9KSAmJgorCQljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQURee2NvbW1pdH0pICYmCisJCXRlc3QtdG9vbCBzdWJtb2R1bGUtY29uZmlnICRjb21taXQgYiA+ZXhwZWN0ICYmCisJCXRlc3QtdG9vbCBzdWJtb2R1bGUtY29uZmlnICR0cmVlIGIgPmFjdHVhbC4xICYmCisJCXRlc3QtdG9vbCBzdWJtb2R1bGUtY29uZmlnIG5ld190YWcgYiA+YWN0dWFsLjIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC4xICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3IgaW4gaGlzdG9yeSBpbiBmZXRjaHJlY3Vyc2VzdWJtb2R1bGUgbGV0cyBjb250aW51ZScgJworCU9SSUc9JChnaXQgLUMgc3VwZXIgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgc3VwZXIgcmVzZXQgLS1oYXJkICRPUklHIiAmJgorCShjZCBzdXBlciAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIFwKKwkJCXN1Ym1vZHVsZS5zdWJtb2R1bGUuZmV0Y2hyZWN1cnNlc3VibW9kdWxlcyBibGFibGEgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgLWYgLmdpdG1vZHVsZXMgXAorCQkJc3VibW9kdWxlLnN1Ym1vZHVsZS5mZXRjaHJlY3Vyc2VzdWJtb2R1bGVzICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBlcnJvciBpbiBmZXRjaHJlY3Vyc2VzdWJtb2R1bGVzIiAmJgorCQl0ZXN0LXRvb2wgc3VibW9kdWxlLWNvbmZpZyBcCisJCQlIRUFEIGIgXAorCQkJSEVBRCBzdWJtb2R1bGUgXAorCQkJCT5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0X2Vycm9yIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZGluZyBzdWJtb2R1bGVzIGNvbmZpZyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgd2l0aCAic3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIicgJworCShjZCBzdXBlciAmJgorCQllY2hvICIuLi9zdWJtb2R1bGUiID5leHBlY3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc2V0dGluZyBzdWJtb2R1bGVzIGNvbmZpZyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgd2l0aCAic3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQiJyAnCisJKGNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCAmJgorCQlnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsID5hY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorCSkKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0aW5nIHN1Ym1vZHVsZXMgY29uZmlnIHdpdGggInN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyInICcKKwkoY2Qgc3VwZXIgJiYKKwkJZWNobyAibmV3X3VybCIgPmV4cGVjdCAmJgorCQlnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsICJuZXdfdXJsIiAmJgorCQlnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcndyaXRpbmcgdW5zdGFnZWQgc3VibW9kdWxlcyBjb25maWcgd2l0aCAic3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIGNoZWNrb3V0IC5naXRtb2R1bGVzIiAmJgorCShjZCBzdXBlciAmJgorCQllY2hvICJuZXdlcl91cmwiID5leHBlY3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCAibmV3ZXJfdXJsIiAmJgorCQlnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGVhYmxlIC5naXRtb2R1bGVzIHdoZW4gaXQgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZScgJworCWdpdCAtQyBzdXBlciBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGVhYmxlIC5naXRtb2R1bGVzIHdoZW4gaXQgaXMgbm93aGVyZSBpbiB0aGUgcmVwb3NpdG9yeScgJworCU9SSUc9JChnaXQgLUMgc3VwZXIgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgc3VwZXIgcmVzZXQgLS1oYXJkICRPUklHIiAmJgorCShjZCBzdXBlciAmJgorCQlnaXQgcm0gLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIC5naXRtb2R1bGVzIGZyb20gdGhlIGN1cnJlbnQgYnJhbmNoIiAmJgorCQlnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24td3JpdGVhYmxlIC5naXRtb2R1bGVzIHdoZW4gaXQgaXMgaW4gdGhlIGluZGV4IGJ1dCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIGNoZWNrb3V0IC5naXRtb2R1bGVzIiAmJgorCShjZCBzdXBlciAmJgorCQlybSAtZiAuZ2l0bW9kdWxlcyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24td3JpdGVhYmxlIC5naXRtb2R1bGVzIHdoZW4gaXQgaXMgaW4gdGhlIGN1cnJlbnQgYnJhbmNoIGJ1dCBub3QgaW4gdGhlIGluZGV4JyAnCisJT1JJRz0kKGdpdCAtQyBzdXBlciByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBzdXBlciByZXNldCAtLWhhcmQgJE9SSUciICYmCisJKGNkIHN1cGVyICYmCisJCWdpdCBybSAuZ2l0bW9kdWxlcyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkaW5nIHN1Ym1vZHVsZXMgY29uZmlnIGZyb20gdGhlIGluZGV4IHdoZW4gLmdpdG1vZHVsZXMgaXMgbm90IGluIHRoZSB3b3JraW5nIHRyZWUnICcKKwlPUklHPSQoZ2l0IC1DIHN1cGVyIHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIHJlc2V0IC0taGFyZCAkT1JJRyIgJiYKKwkoY2Qgc3VwZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCAic3RhZ2VkX3VybCIgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCQlybSAtZiAuZ2l0bW9kdWxlcyAmJgorCQllY2hvICJzdGFnZWRfdXJsIiA+ZXhwZWN0ICYmCisJCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkaW5nIHN1Ym1vZHVsZXMgY29uZmlnIGZyb20gdGhlIGN1cnJlbnQgYnJhbmNoIHdoZW4gLmdpdG1vZHVsZXMgaXMgbm90IGluIHRoZSBpbmRleCcgJworCU9SSUc9JChnaXQgLUMgc3VwZXIgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgc3VwZXIgcmVzZXQgLS1oYXJkICRPUklHIiAmJgorCShjZCBzdXBlciAmJgorCQlnaXQgcm0gLmdpdG1vZHVsZXMgJiYKKwkJZWNobyAiLi4vc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkaW5nIG5lc3RlZCBzdWJtb2R1bGVzIGNvbmZpZycgJworCShjZCBzdXBlciAmJgorCQlnaXQgaW5pdCBzdWJtb2R1bGUvbmVzdGVkX3N1Ym1vZHVsZSAmJgorCQllY2hvICJhIiA+c3VibW9kdWxlL25lc3RlZF9zdWJtb2R1bGUvYSAmJgorCQlnaXQgLUMgc3VibW9kdWxlL25lc3RlZF9zdWJtb2R1bGUgYWRkIGEgJiYKKwkJZ2l0IC1DIHN1Ym1vZHVsZS9uZXN0ZWRfc3VibW9kdWxlIGNvbW1pdCAtbSAiYWRkIGEiICYmCisJCWdpdCAtQyBzdWJtb2R1bGUgc3VibW9kdWxlIGFkZCAuL25lc3RlZF9zdWJtb2R1bGUgJiYKKwkJZ2l0IC1DIHN1Ym1vZHVsZSBhZGQgbmVzdGVkX3N1Ym1vZHVsZSAmJgorCQlnaXQgLUMgc3VibW9kdWxlIGNvbW1pdCAtbSAiYWRkZWQgbmVzdGVkX3N1Ym1vZHVsZSIgJiYKKwkJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAidXBkYXRlZCBzdWJtb2R1bGUiICYmCisJCWVjaG8gIi4vbmVzdGVkX3N1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCQl0ZXN0LXRvb2wgc3VibW9kdWxlLW5lc3RlZC1yZXBvLWNvbmZpZyBcCisJCQlzdWJtb2R1bGUgc3VibW9kdWxlLm5lc3RlZF9zdWJtb2R1bGUudXJsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZGluZyBuZXN0ZWQgc3VibW9kdWxlcyBjb25maWcgd2hlbiAuZ2l0bW9kdWxlcyBpcyBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyL3N1Ym1vZHVsZSBjaGVja291dCAuZ2l0bW9kdWxlcyIgJiYKKwkoY2Qgc3VwZXIgJiYKKwkJZWNobyAiLi9uZXN0ZWRfc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJCXJtIHN1Ym1vZHVsZS8uZ2l0bW9kdWxlcyAmJgorCQl0ZXN0LXRvb2wgc3VibW9kdWxlLW5lc3RlZC1yZXBvLWNvbmZpZyBcCisJCQlzdWJtb2R1bGUgc3VibW9kdWxlLm5lc3RlZF9zdWJtb2R1bGUudXJsID5hY3R1YWwgMj53YXJuaW5nICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSB3YXJuaW5nICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQxMi1zdWJtb2R1bGUtYWJzb3JiZ2l0ZGlycy5zaCBiL3QvdDc0MTItc3VibW9kdWxlLWFic29yYmdpdGRpcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWNmYTE1MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MTItc3VibW9kdWxlLWFic29yYmdpdGRpcnMuc2gKQEAgLTAsMCArMSwxMzMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHN1Ym1vZHVsZSBhYnNvcmJnaXRkaXJzCisKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGBnaXQgc3VibW9kdWUgYWJzb3JiZ2l0ZGlyc2AgbW92ZXMgYSBzdWJtb2R1bGVzIGdpdAorZGlyZWN0b3J5IGludG8gdGhlIHN1cGVycHJvamVjdC4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgcmVhbCBzdWJtb2R1bGUnICcKKwlnaXQgaW5pdCBzdWIxICYmCisJdGVzdF9jb21taXQgLUMgc3ViMSBmaXJzdCAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIC4vc3ViMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc3VwZXJwcm9qZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fic29yYiB0aGUgZ2l0IGRpcicgJworCT5leHBlY3QuMSAmJgorCT5leHBlY3QuMiAmJgorCT5hY3R1YWwuMSAmJgorCT5hY3R1YWwuMiAmJgorCWdpdCBzdGF0dXMgPmV4cGVjdC4xICYmCisJZ2l0IC1DIHN1YjEgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdC4yICYmCisJZ2l0IHN1Ym1vZHVsZSBhYnNvcmJnaXRkaXJzICYmCisJZ2l0IGZzY2sgJiYKKwl0ZXN0IC1mIHN1YjEvLmdpdCAmJgorCXRlc3QgLWQgLmdpdC9tb2R1bGVzL3N1YjEgJiYKKwlnaXQgc3RhdHVzID5hY3R1YWwuMSAmJgorCWdpdCAtQyBzdWIxIHJldi1wYXJzZSBIRUFEID5hY3R1YWwuMiAmJgorCXRlc3RfY21wIGV4cGVjdC4xIGFjdHVhbC4xICYmCisJdGVzdF9jbXAgZXhwZWN0LjIgYWN0dWFsLjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb3JiaW5nIGRvZXMgbm90IGZhaWwgZm9yIGRlaW5pdGlhbGl6ZWQgc3VibW9kdWxlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IiAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IC0tYWxsICYmCisJZ2l0IHN1Ym1vZHVsZSBhYnNvcmJnaXRkaXJzICYmCisJdGVzdCAtZCAuZ2l0L21vZHVsZXMvc3ViMSAmJgorCXRlc3QgLWQgc3ViMSAmJgorCSEgdGVzdCAtZSBzdWIxLy5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbmVzdGVkIHN1Ym1vZHVsZScgJworCWdpdCBpbml0IHN1YjEvbmVzdGVkICYmCisJdGVzdF9jb21taXQgLUMgc3ViMS9uZXN0ZWQgZmlyc3RfbmVzdGVkICYmCisJZ2l0IC1DIHN1YjEgc3VibW9kdWxlIGFkZCAuL25lc3RlZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCAtQyBzdWIxIGNvbW1pdCAtbSAiYWRkIG5lc3RlZCIgJiYKKwlnaXQgYWRkIHN1YjEgJiYKKwlnaXQgY29tbWl0IC1tICJzdWIxIHRvIGluY2x1ZGUgbmVzdGVkIHN1Ym1vZHVsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb3JiIHRoZSBnaXQgZGlyIGluIGEgbmVzdGVkIHN1Ym1vZHVsZScgJworCWdpdCBzdGF0dXMgPmV4cGVjdC4xICYmCisJZ2l0IC1DIHN1YjEvbmVzdGVkIHJldi1wYXJzZSBIRUFEID5leHBlY3QuMiAmJgorCWdpdCBzdWJtb2R1bGUgYWJzb3JiZ2l0ZGlycyAmJgorCXRlc3QgLWYgc3ViMS9uZXN0ZWQvLmdpdCAmJgorCXRlc3QgLWQgLmdpdC9tb2R1bGVzL3N1YjEvbW9kdWxlcy9uZXN0ZWQgJiYKKwlnaXQgc3RhdHVzID5hY3R1YWwuMSAmJgorCWdpdCAtQyBzdWIxL25lc3RlZCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsLjIgJiYKKwl0ZXN0X2NtcCBleHBlY3QuMSBhY3R1YWwuMSAmJgorCXRlc3RfY21wIGV4cGVjdC4yIGFjdHVhbC4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlLXNldHVwIG5lc3RlZCBzdWJtb2R1bGUnICcKKwkjIHVuLWFic29yYiB0aGUgZGlyZWN0IHN1Ym1vZHVsZSwgdG8gdGVzdCBpZiB0aGUgbmVzdGVkIHN1Ym1vZHVsZQorCSMgaXMgc3RpbGwgY29ycmVjdCAobmVlZHMgYSByZXdyaXRlIG9mIHRoZSBnaXRmaWxlIG9ubHkpCisJcm0gLXJmIHN1YjEvLmdpdCAmJgorCW12IC5naXQvbW9kdWxlcy9zdWIxIHN1YjEvLmdpdCAmJgorCUdJVF9XT1JLX1RSRUU9LiBnaXQgLUMgc3ViMSBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlICYmCisJIyBmaXh1cCB0aGUgbmVzdGVkIHN1Ym1vZHVsZQorCWVjaG8gImdpdGRpcjogLi4vLmdpdC9tb2R1bGVzL25lc3RlZCIgPnN1YjEvbmVzdGVkLy5naXQgJiYKKwlHSVRfV09SS19UUkVFPS4uLy4uLy4uL25lc3RlZCBnaXQgLUMgc3ViMS8uZ2l0L21vZHVsZXMvbmVzdGVkIGNvbmZpZyBcCisJCWNvcmUud29ya3RyZWUgIi4uLy4uLy4uL25lc3RlZCIgJiYKKwkjIG1ha2Ugc3VyZSB0aGlzIHJlLXNldHVwIGlzIGNvcnJlY3QKKwlnaXQgc3RhdHVzIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSAmJgorCisJIyBhbHNvIG1ha2Ugc3VyZSB0aGlzIG9sZCBzZXR1cCBkb2VzIG5vdCByZWdyZXNzCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlID5vdXQgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYnNvcmIgdGhlIGdpdCBkaXIgaW4gYSBuZXN0ZWQgc3VibW9kdWxlJyAnCisJZ2l0IHN0YXR1cyA+ZXhwZWN0LjEgJiYKKwlnaXQgLUMgc3ViMS9uZXN0ZWQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdC4yICYmCisJZ2l0IHN1Ym1vZHVsZSBhYnNvcmJnaXRkaXJzICYmCisJdGVzdCAtZiBzdWIxLy5naXQgJiYKKwl0ZXN0IC1mIHN1YjEvbmVzdGVkLy5naXQgJiYKKwl0ZXN0IC1kIC5naXQvbW9kdWxlcy9zdWIxL21vZHVsZXMvbmVzdGVkICYmCisJZ2l0IHN0YXR1cyA+YWN0dWFsLjEgJiYKKwlnaXQgLUMgc3ViMS9uZXN0ZWQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbC4yICYmCisJdGVzdF9jbXAgZXhwZWN0LjEgYWN0dWFsLjEgJiYKKwl0ZXN0X2NtcCBleHBlY3QuMiBhY3R1YWwuMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIGdpdGxpbmsgd2l0aCBtaXNzaW5nIC5naXRtb2R1bGVzIGVudHJ5JyAnCisJZ2l0IGluaXQgc3ViMiAmJgorCXRlc3RfY29tbWl0IC1DIHN1YjIgZmlyc3QgJiYKKwlnaXQgYWRkIHN1YjIgJiYKKwlnaXQgY29tbWl0IC1tIHN1cGVycHJvamVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYnNvcmJpbmcgdGhlIGdpdCBkaXIgZmFpbHMgZm9yIGluY29tcGxldGUgc3VibW9kdWxlcycgJworCWdpdCBzdGF0dXMgPmV4cGVjdC4xICYmCisJZ2l0IC1DIHN1YjIgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdC4yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBhYnNvcmJnaXRkaXJzICYmCisJZ2l0IC1DIHN1YjIgZnNjayAmJgorCXRlc3QgLWQgc3ViMi8uZ2l0ICYmCisJZ2l0IHN0YXR1cyA+YWN0dWFsICYmCisJZ2l0IC1DIHN1YjIgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbC4yICYmCisJdGVzdF9jbXAgZXhwZWN0LjEgYWN0dWFsLjEgJiYKKwl0ZXN0X2NtcCBleHBlY3QuMiBhY3R1YWwuMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIHN1Ym1vZHVsZSB3aXRoIG11bHRpcGxlIHdvcmt0cmVlcycgJworCSMgZmlyc3QgY3JlYXRlIGFub3RoZXIgdW5lbWJlZGRlZCBnaXQgZGlyIGluIGEgbmV3IHN1Ym1vZHVsZQorCWdpdCBpbml0IHN1YjMgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdWIzIGZpcnN0ICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi9zdWIzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGFub3RoZXIgc3VibW9kdWxlIiAmJgorCWdpdCAtQyBzdWIzIHdvcmt0cmVlIGFkZCAuLi9zdWIzX3NlY29uZF93b3JrX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb3JiaW5nIGZhaWxzIGZvciBhIHN1Ym1vZHVsZSB3aXRoIG11bHRpcGxlIHdvcmt0cmVlcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgYWJzb3JiZ2l0ZGlycyBzdWIzIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3Qgc3VwcG9ydGVkIiBlcnJvcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MTMtc3VibW9kdWxlLWlzLWFjdGl2ZS5zaCBiL3QvdDc0MTMtc3VibW9kdWxlLWlzLWFjdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jOGU3ZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzQxMy1zdWJtb2R1bGUtaXMtYWN0aXZlLnNoCkBAIC0wLDAgKzEsMTA3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBzdWJtb2R1bGUtLWhlbHBlciBpcy1hY3RpdmUKKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgYGdpdCBzdWJtb2R1ZS0taGVscGVyIGlzLWFjdGl2ZWAgY29ycmVjdGx5IGlkZW50aWZpZXMKK3N1Ym1vZHVsZXMgd2hpY2ggYXJlICJhY3RpdmUiIGFuZCBpbnRlcmVzdGluZyB0byB0aGUgdXNlci4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGluaXQgc3ViICYmCisJdGVzdF9jb21taXQgLUMgc3ViIGluaXRpYWwgJiYKKwlnaXQgaW5pdCBzdXBlciAmJgorCXRlc3RfY29tbWl0IC1DIHN1cGVyIGluaXRpYWwgJiYKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlIGFkZCAuLi9zdWIgc3ViMSAmJgorCWdpdCAtQyBzdXBlciBzdWJtb2R1bGUgYWRkIC4uL3N1YiBzdWIyICYmCisKKwkjIFJlbW92ZSBzdWJtb2R1bGUuPG5hbWU+LmFjdGl2ZSBlbnRyaWVzIGluIG9yZGVyIHRvIHRlc3QgaW4gYW4KKwkjIGVudmlyb25tZW50IHdoZXJlIG9ubHkgVVJMcyBhcmUgcHJlc2VudCBpbiB0aGUgY29uaWZnCisJZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLXVuc2V0IHN1Ym1vZHVsZS5zdWIxLmFjdGl2ZSAmJgorCWdpdCAtQyBzdXBlciBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3ViMi5hY3RpdmUgJiYKKworCWdpdCAtQyBzdXBlciBjb21taXQgLWEgLW0gImFkZCAyIHN1Ym1vZHVsZXMgYXQgc3ViezEsMn0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzLWFjdGl2ZSB3b3JrcyB3aXRoIHVybHMnICcKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlLS1oZWxwZXIgaXMtYWN0aXZlIHN1YjEgJiYKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlLS1oZWxwZXIgaXMtYWN0aXZlIHN1YjIgJiYKKworCWdpdCAtQyBzdXBlciBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3ViMS5VUkwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc3VwZXIgc3VibW9kdWxlLS1oZWxwZXIgaXMtYWN0aXZlIHN1YjEgJiYKKwlnaXQgLUMgc3VwZXIgY29uZmlnIHN1Ym1vZHVsZS5zdWIxLlVSTCAuLi9zdWIgJiYKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlLS1oZWxwZXIgaXMtYWN0aXZlIHN1YjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaXMtYWN0aXZlIHdvcmtzIHdpdGggc3VibW9kdWxlLjxuYW1lPi5hY3RpdmUgY29uZmlnJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgc3VwZXIgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1YjEuYWN0aXZlIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIGNvbmZpZyBzdWJtb2R1bGUuc3ViMS5VUkwgLi4vc3ViIiAmJgorCisJZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLWJvb2wgc3VibW9kdWxlLnN1YjEuYWN0aXZlICJmYWxzZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc3VwZXIgc3VibW9kdWxlLS1oZWxwZXIgaXMtYWN0aXZlIHN1YjEgJiYKKworCWdpdCAtQyBzdXBlciBjb25maWcgLS1ib29sIHN1Ym1vZHVsZS5zdWIxLmFjdGl2ZSAidHJ1ZSIgJiYKKwlnaXQgLUMgc3VwZXIgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1YjEuVVJMICYmCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZS0taGVscGVyIGlzLWFjdGl2ZSBzdWIxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzLWFjdGl2ZSB3b3JrcyB3aXRoIGJhc2ljIHN1Ym1vZHVsZS5hY3RpdmUgY29uZmlnJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgc3VwZXIgY29uZmlnIHN1Ym1vZHVsZS5zdWIxLlVSTCAuLi9zdWIiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgc3VwZXIgY29uZmlnIC0tdW5zZXQtYWxsIHN1Ym1vZHVsZS5hY3RpdmUiICYmCisKKwlnaXQgLUMgc3VwZXIgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5hY3RpdmUgIi4iICYmCisJZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLXVuc2V0IHN1Ym1vZHVsZS5zdWIxLlVSTCAmJgorCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZS0taGVscGVyIGlzLWFjdGl2ZSBzdWIxICYmCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZS0taGVscGVyIGlzLWFjdGl2ZSBzdWIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzLWFjdGl2ZSBjb3JyZWN0bHkgd29ya3Mgd2l0aCBwYXRocyB0aGF0IGFyZSBub3Qgc3VibW9kdWxlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLXVuc2V0LWFsbCBzdWJtb2R1bGUuYWN0aXZlIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZS0taGVscGVyIGlzLWFjdGl2ZSBub3QtYS1zdWJtb2R1bGUgJiYKKworCWdpdCAtQyBzdXBlciBjb25maWcgLS1hZGQgc3VibW9kdWxlLmFjdGl2ZSAiLiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc3VwZXIgc3VibW9kdWxlLS1oZWxwZXIgaXMtYWN0aXZlIG5vdC1hLXN1Ym1vZHVsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpcy1hY3RpdmUgd29ya3Mgd2l0aCBleGNsdXNpb25zIGluIHN1Ym1vZHVsZS5hY3RpdmUgY29uZmlnJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgc3VwZXIgY29uZmlnIC0tdW5zZXQtYWxsIHN1Ym1vZHVsZS5hY3RpdmUiICYmCisKKwlnaXQgLUMgc3VwZXIgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5hY3RpdmUgIi4iICYmCisJZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuYWN0aXZlICI6KGV4Y2x1ZGUpc3ViMSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdXBlciBzdWJtb2R1bGUtLWhlbHBlciBpcy1hY3RpdmUgc3ViMSAmJgorCWdpdCAtQyBzdXBlciBzdWJtb2R1bGUtLWhlbHBlciBpcy1hY3RpdmUgc3ViMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpcy1hY3RpdmUgd2l0aCBzdWJtb2R1bGUuYWN0aXZlIGFuZCBzdWJtb2R1bGUuPG5hbWU+LmFjdGl2ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLXVuc2V0LWFsbCBzdWJtb2R1bGUuYWN0aXZlIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLXVuc2V0IHN1Ym1vZHVsZS5zdWIxLmFjdGl2ZSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBzdXBlciBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3ViMi5hY3RpdmUiICYmCisKKwlnaXQgLUMgc3VwZXIgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5hY3RpdmUgInN1YjEiICYmCisJZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLWJvb2wgc3VibW9kdWxlLnN1YjEuYWN0aXZlICJmYWxzZSIgJiYKKwlnaXQgLUMgc3VwZXIgY29uZmlnIC0tYm9vbCBzdWJtb2R1bGUuc3ViMi5hY3RpdmUgInRydWUiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc3VwZXIgc3VibW9kdWxlLS1oZWxwZXIgaXMtYWN0aXZlIHN1YjEgJiYKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlLS1oZWxwZXIgaXMtYWN0aXZlIHN1YjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaXMtYWN0aXZlLCBzdWJtb2R1bGUuYWN0aXZlIGFuZCBzdWJtb2R1bGUgYWRkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXIyIiAmJgorCWdpdCBpbml0IHN1cGVyMiAmJgorCXRlc3RfY29tbWl0IC1DIHN1cGVyMiBpbml0aWFsICYmCisJZ2l0IC1DIHN1cGVyMiBjb25maWcgLS1hZGQgc3VibW9kdWxlLmFjdGl2ZSAic3ViKiIgJiYKKworCSMgc3VibW9kdWxlIGFkZCBzaG91bGQgb25seSBhZGQgc3VibW9kdWxlLjxuYW1lPi5hY3RpdmUKKwkjIHRvIHRoZSBjb25maWcgaWYgbm90IG1hdGNoZWQgYnkgdGhlIHBhdGhzcGVjCisJZ2l0IC1DIHN1cGVyMiBzdWJtb2R1bGUgYWRkIC4uL3N1YiBzdWIxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1cGVyMiBjb25maWcgLS1nZXQgc3VibW9kdWxlLnN1YjEuYWN0aXZlICYmCisKKwlnaXQgLUMgc3VwZXIyIHN1Ym1vZHVsZSBhZGQgLi4vc3ViIG1vZCAmJgorCWdpdCAtQyBzdXBlcjIgY29uZmlnIC0tZ2V0IHN1Ym1vZHVsZS5tb2QuYWN0aXZlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQxNC1zdWJtb2R1bGUtbWlzdGFrZXMuc2ggYi90L3Q3NDE0LXN1Ym1vZHVsZS1taXN0YWtlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMmU3ZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzQxNC1zdWJtb2R1bGUtbWlzdGFrZXMuc2gKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2hhbmRsaW5nIG9mIGNvbW1vbiBtaXN0YWtlcyBwZW9wbGUgbWF5IG1ha2Ugd2l0aCBzdWJtb2R1bGVzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBlbWJlZGRlZCByZXBvc2l0b3J5JyAnCisJZ2l0IGluaXQgZW1iZWQgJiYKKwl0ZXN0X2NvbW1pdCAtQyBlbWJlZCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFkZCBvbiBlbWJlZGRlZCByZXBvc2l0b3J5IHdhcm5zJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcm0gLS1jYWNoZWQgLWYgZW1iZWQiICYmCisJZ2l0IGFkZCBlbWJlZCAyPnN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgd2FybmluZyBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby13YXJuLWVtYmVkZGVkLXJlcG8gc3VwcHJlc3NlcyB3YXJuaW5nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcm0gLS1jYWNoZWQgLWYgZW1iZWQiICYmCisJZ2l0IGFkZCAtLW5vLXdhcm4tZW1iZWRkZWQtcmVwbyBlbWJlZCAyPnN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgISB3YXJuaW5nIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB3YXJuaW5nIHdoZW4gdXBkYXRpbmcgZW50cnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBybSAtLWNhY2hlZCAtZiBlbWJlZCIgJiYKKwlnaXQgYWRkIGVtYmVkICYmCisJZ2l0IC1DIGVtYmVkIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHR3byAmJgorCWdpdCBhZGQgZW1iZWQgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgd2FybmluZyBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCBkb2VzIG5vdCB3YXJuJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcm0gLXJmIHN1Ym1vZHVsZSAuZ2l0bW9kdWxlcyIgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuL2VtYmVkIHN1Ym1vZHVsZSAyPnN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgISB3YXJuaW5nIHN0ZGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MTUtc3VibW9kdWxlLW5hbWVzLnNoIGIvdC90NzQxNS1zdWJtb2R1bGUtbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjcwMzY4YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MTUtc3VibW9kdWxlLW5hbWVzLnNoCkBAIC0wLDAgKzEsMjUxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2sgaGFuZGxpbmcgb2YgLi4gaW4gc3VibW9kdWxlIG5hbWVzCisKK0V4ZXJjaXNlIHRoZSBuYW1lLWNoZWNraW5nIGZ1bmN0aW9uIG9uIGEgdmFyaWV0eSBvZiBuYW1lcywgYW5kIHRoZW4gZ2l2ZSBhCityZWFsLXdvcmxkIHNldHVwIHRoYXQgY29uZmlybXMgd2UgY2F0Y2ggdGhpcyBpbiBwcmFjdGljZS4KKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcGFjay5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBuYW1lcycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl2YWxpZAorCXZhbGlkL3dpdGgvcGF0aHMKKwlFT0YKKworCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjaGVjay1uYW1lID5hY3R1YWwgPDwtXEVPRiAmJgorCXZhbGlkCisJdmFsaWQvd2l0aC9wYXRocworCisJLi4vZm9vCisJLy4uL2ZvbworCS4uXGZvbworCVwuLlxmb28KKwlmb28vLi4KKwlmb28vLi4vCisJZm9vXC4uCisJZm9vXC4uXAorCWZvby8uLi9iYXIKKwlFT0YKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGlubm9jZW50IHN1YnJlcG8nICcKKwlnaXQgaW5pdCBpbm5vY2VudCAmJgorCWdpdCAtQyBpbm5vY2VudCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCByZWZ1c2VzIGludmFsaWQgbmFtZXMnICcKKwl0ZXN0X211c3RfZmFpbCBcCisJCWdpdCBzdWJtb2R1bGUgYWRkIC0tbmFtZSAuLi8uLi9tb2R1bGVzL2V2aWwgIiRQV0QvaW5ub2NlbnQiIGV2aWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGV2aWwgc3VibW9kdWxlJyAnCisJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRQV0QvaW5ub2NlbnQiIGV2aWwgJiYKKworCW1rZGlyIG1vZHVsZXMgJiYKKwljcCAtciAuZ2l0L21vZHVsZXMvZXZpbCBtb2R1bGVzICYmCisJd3JpdGVfc2NyaXB0IG1vZHVsZXMvZXZpbC9ob29rcy9wb3N0LWNoZWNrb3V0IDw8LVxFT0YgJiYKKwllY2hvID4mMiAiUlVOTklORyBQT1NUIENIRUNLT1VUIgorCUVPRgorCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuZXZpbC51cGRhdGUgY2hlY2tvdXQgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIC0tcmVuYW1lLXNlY3Rpb24gXAorCQlzdWJtb2R1bGUuZXZpbCBzdWJtb2R1bGUuLi4vLi4vbW9kdWxlcy9ldmlsICYmCisJZ2l0IGFkZCBtb2R1bGVzICYmCisJZ2l0IGNvbW1pdCAtYW0gZXZpbAorJworCisjIFRoaXMgc3RlcCBzZWVtcyBsaWtlIGl0IHNob3VsZG4ndCBiZSBuZWNlc3NhcnksIHNpbmNlIHRoZSBwYXlsb2FkIGlzCisjIGNvbnRhaW5lZCBlbnRpcmVseSBpbiB0aGUgZXZpbCBzdWJtb2R1bGUuIEJ1dCBkdWUgdG8gdGhlIHZhZ2FyaWVzIG9mIHRoZQorIyBzdWJtb2R1bGUgY29kZSwgY2hlY2tpbmcgb3V0IHRoZSBldmlsIG1vZHVsZSB3aWxsIGZhaWwgdW5sZXNzICIuZ2l0L21vZHVsZXMiCisjIGV4aXN0cy4gQWRkaW5nIGFub3RoZXIgc3VibW9kdWxlICh3aXRoIGEgbmFtZSB0aGF0IHNvcnRzIGJlZm9yZSAiZXZpbCIpIGlzIGFuCisjIGVhc3kgd2F5IHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBjYXNlIGluIHRoZSB2aWN0aW0gY2xvbmUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgb3RoZXIgc3VibW9kdWxlJyAnCisJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRQV0QvaW5ub2NlbnQiIGFub3RoZXItbW9kdWxlICYmCisJZ2l0IGFkZCBhbm90aGVyLW1vZHVsZSAmJgorCWdpdCBjb21taXQgLWFtIGFub3RoZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZXZpbCBzdXBlcnByb2plY3QnICcKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLiB2aWN0aW0gPm91dHB1dCAyPiYxICYmCisJISBncmVwICJSVU5OSU5HIFBPU1QgQ0hFQ0tPVVQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGRldGVjdHMgZXZpbCBzdXBlcnByb2plY3QnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFuc2Zlci5mc2NrT2JqZWN0cyBkZXRlY3RzIGV2aWwgc3VwZXJwcm9qZWN0ICh1bnBhY2spJyAnCisJcm0gLXJmIGRzdC5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0LmdpdCAmJgorCWdpdCAtQyBkc3QuZ2l0IGNvbmZpZyB0cmFuc2Zlci5mc2NrT2JqZWN0cyB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggZHN0LmdpdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYW5zZmVyLmZzY2tPYmplY3RzIGRldGVjdHMgZXZpbCBzdXBlcnByb2plY3QgKGluZGV4KScgJworCXJtIC1yZiBkc3QuZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIGRzdC5naXQgJiYKKwlnaXQgLUMgZHN0LmdpdCBjb25maWcgdHJhbnNmZXIuZnNja09iamVjdHMgdHJ1ZSAmJgorCWdpdCAtQyBkc3QuZ2l0IGNvbmZpZyB0cmFuc2Zlci51bnBhY2tMaW1pdCAxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggZHN0LmdpdCBIRUFECisnCisKKyMgTm9ybWFsbHkgb3VyIHBhY2tzIGNvbnRhaW4gY29tbWl0cyBmb2xsb3dlZCBieSB0cmVlcyBmb2xsb3dlZCBieSBibG9icy4gVGhpcworIyByZXZlcnNlcyB0aGUgb3JkZXIsIHdoaWNoIHJlcXVpcmVzIGJhY2t0cmFja2luZyB0byBmaW5kIHRoZSBjb250ZXh0IG9mIGEKKyMgYmxvYi4gV2UnbGwgc3RhcnQgd2l0aCBhIGZyZXNoIGdpdG1vZHVsZXMtb25seSB0cmVlIHRvIG1ha2UgaXQgc2ltcGxlci4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBvZGRseSBvcmRlcmVkIHBhY2snICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gb2RkICYmCisJZ2l0IHJtIC1yZiAtLWNhY2hlZCAuICYmCisJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCWdpdCBjb21taXQgLW0gb2RkICYmCisJeworCQlwYWNrX2hlYWRlciAzICYmCisJCXBhY2tfb2JqICQoZ2l0IHJldi1wYXJzZSBIRUFEOi5naXRtb2R1bGVzKSAmJgorCQlwYWNrX29iaiAkKGdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0pICYmCisJCXBhY2tfb2JqICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCX0gPm9kZC5wYWNrICYmCisJcGFja190cmFpbGVyIG9kZC5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYW5zZmVyLmZzY2tPYmplY3RzIGhhbmRsZXMgb2RkIHBhY2sgKHVucGFjayknICcKKwlybSAtcmYgZHN0LmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QuZ2l0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGRzdC5naXQgdW5wYWNrLW9iamVjdHMgLS1zdHJpY3QgPG9kZC5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYW5zZmVyLmZzY2tPYmplY3RzIGhhbmRsZXMgb2RkIHBhY2sgKGluZGV4KScgJworCXJtIC1yZiBkc3QuZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIGRzdC5naXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgZHN0LmdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IC0tc3RkaW4gPG9kZC5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgLS1zdHJpY3Qgd29ya3MgZm9yIG5vbi1yZXBvIHBhY2snICcKKwlybSAtcmYgZHN0LmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QuZ2l0ICYmCisJY3Agb2RkLnBhY2sgZHN0LmdpdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBkc3QuZ2l0IGluZGV4LXBhY2sgLS1zdHJpY3Qgb2RkLnBhY2sgMj5vdXRwdXQgJiYKKwkjIE1ha2Ugc3VyZSB3ZSBmYWlsIGR1ZSB0byBiYWQgZ2l0bW9kdWxlcyBjb250ZW50LCBub3QgYmVjYXVzZSB3ZQorCSMgY291bGQgbm90IHJlYWQgdGhlIGJsb2IgaW4gdGhlIGZpcnN0IHBsYWNlLgorCWdyZXAgZ2l0bW9kdWxlc05hbWUgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgZGV0ZWN0cyBzeW1saW5rZWQgLmdpdG1vZHVsZXMgZmlsZScgJworCWdpdCBpbml0IHN5bWxpbmsgJiYKKwkoCisJCWNkIHN5bWxpbmsgJiYKKworCQkjIE1ha2UgdGhlIHRyZWUgZGlyZWN0bHkgdG8gYXZvaWQgaW5kZXggcmVzdHJpY3Rpb25zLgorCQkjCisJCSMgQmVjYXVzZSBzeW1saW5rcyBzdG9yZSB0aGUgdGFyZ2V0IGFzIGEgYmxvYiwgY2hvb3NlCisJCSMgYSBwYXRobmFtZSB0aGF0IGNvdWxkIGJlIHBhcnNlZCBhcyBhIC5naXRtb2R1bGVzIGZpbGUKKwkJIyB0byB0cmljayBuYWl2ZSBub24tc3ltbGluay1hd2FyZSBjaGVja2luZy4KKwkJdHJpY2t5PSJbZm9vXWJhcj10cnVlIiAmJgorCQljb250ZW50PSQoZ2l0IGhhc2gtb2JqZWN0IC13IC4uLy5naXRtb2R1bGVzKSAmJgorCQl0YXJnZXQ9JChwcmludGYgIiR0cmlja3kiIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJCXsKKwkJCXByaW50ZiAiMTAwNjQ0IGJsb2IgJGNvbnRlbnRcdCR0cmlja3lcbiIgJiYKKwkJCXByaW50ZiAiMTIwMDAwIGJsb2IgJHRhcmdldFx0LmdpdG1vZHVsZXNcbiIKKwkJfSB8IGdpdCBta3RyZWUgJiYKKworCQkjIENoZWNrIG5vdCBvbmx5IHRoYXQgd2UgZmFpbCwgYnV0IHRoYXQgaXQgaXMgZHVlIHRvIHRoZQorCQkjIHN5bWxpbmsgZGV0ZWN0b3I7IHRoaXMgZ3JlcCBzdHJpbmcgY29tZXMgZnJvbSB0aGUgY29uZmlnCisJCSMgdmFyaWFibGUgbmFtZSBhbmQgd2lsbCBub3QgYmUgdHJhbnNsYXRlZC4KKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXRwdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCBnaXRtb2R1bGVzU3ltbGluayBvdXRwdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgZGV0ZWN0cyBub24tYmxvYiAuZ2l0bW9kdWxlcycgJworCWdpdCBpbml0IG5vbi1ibG9iICYmCisJKAorCQljZCBub24tYmxvYiAmJgorCisJCSMgQXMgYWJvdmUsIG1ha2UgdGhlIGZ1bm55IHRyZWUgZGlyZWN0bHkgdG8gYXZvaWQgaW5kZXgKKwkJIyByZXN0cmljdGlvbnMuCisJCW1rZGlyIHN1YmRpciAmJgorCQljcCAuLi8uZ2l0bW9kdWxlcyBzdWJkaXIvZmlsZSAmJgorCQlnaXQgYWRkIHN1YmRpci9maWxlICYmCisJCWdpdCBjb21taXQgLW0gb2sgJiYKKwkJZ2l0IGxzLXRyZWUgSEVBRCB8IHNlZCBzL3N1YmRpci8uZ2l0bW9kdWxlcy8gfCBnaXQgbWt0cmVlICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXRwdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCBnaXRtb2R1bGVzQmxvYiBvdXRwdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgZGV0ZWN0cyBjb3JydXB0IC5naXRtb2R1bGVzJyAnCisJZ2l0IGluaXQgY29ycnVwdCAmJgorCSgKKwkJY2QgY29ycnVwdCAmJgorCisJCWVjaG8gIlticm9rZW4iID4uZ2l0bW9kdWxlcyAmJgorCQlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb21taXQgLW0gImJyb2tlbiBnaXRtb2R1bGVzIiAmJgorCisJCWdpdCBmc2NrIDI+b3V0cHV0ICYmCisJCXRlc3RfaTE4bmdyZXAgZ2l0bW9kdWxlc1BhcnNlIG91dHB1dCAmJgorCQl0ZXN0X2kxOG5ncmVwICEgImJhZCBjb25maWciIG91dHB1dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBNSU5HVyAncHJldmVudCBnaXR+MSBzcXVhdHRpbmcgb24gV2luZG93cycgJworCWdpdCBpbml0IHNxdWF0dGluZyAmJgorCSgKKwkJY2Qgc3F1YXR0aW5nICYmCisJCW1rZGlyIGEgJiYKKwkJdG91Y2ggYS8uLmdpdCAmJgorCQlnaXQgYWRkIGEvLi5naXQgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJCW1vZHVsZXM9IiQodGVzdF93cml0ZV9saW5lcyBcCisJCQkiW3N1Ym1vZHVsZSBcImIuXCJdIiAidXJsID0gLiIgInBhdGggPSBjIiBcCisJCQkiW3N1Ym1vZHVsZSBcImJcIl0iICJ1cmwgPSAuIiAicGF0aCA9IGRcXFxcYSIgfAorCQkJZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pIiAmJgorCQlyZXY9IiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgJiYKKwkJaGFzaD0iJChlY2hvIHggfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikiICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgXAorCQkJLS1jYWNoZWluZm8gMTYwMDAwLCRyZXYsZFxcYSAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJJbnZhbGlkIHBhdGgiIGVyciAmJgorCQlnaXQgLWMgY29yZS5wcm90ZWN0TlRGUz1mYWxzZSB1cGRhdGUtaW5kZXggLS1hZGQgXAorCQkJLS1jYWNoZWluZm8gMTAwNjQ0LCRtb2R1bGVzLC5naXRtb2R1bGVzIFwKKwkJCS0tY2FjaGVpbmZvIDE2MDAwMCwkcmV2LGMgXAorCQkJLS1jYWNoZWluZm8gMTYwMDAwLCRyZXYsZFxcYSBcCisJCQktLWNhY2hlaW5mbyAxMDA2NDQsJGhhc2gsZC4vYS94IFwKKwkJCS0tY2FjaGVpbmZvIDEwMDY0NCwkaGFzaCxkLi9hLy4uZ2l0ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgLWMgY29yZS5wcm90ZWN0TlRGUz1mYWxzZSBjb21taXQgLW0gIm1vZHVsZSIKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGNvcmUucHJvdGVjdE5URlM9ZmFsc2UgXAorCQljbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyBzcXVhdHRpbmcgc3F1YXR0aW5nLWNsb25lIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiZGlyZWN0b3J5IG5vdCBlbXB0eSIgLWUgIm5vdCBhbiBlbXB0eSBkaXJlY3RvcnkiIGVyciAmJgorCSEgZ3JlcCBnaXRkaXIgc3F1YXR0aW5nLWNsb25lL2QvYS9naXR+MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlycyBvZiBzaWJsaW5nIHN1Ym1vZHVsZXMgbXVzdCBub3QgYmUgbmVzdGVkJyAnCisJZ2l0IGluaXQgbmVzdGVkICYmCisJdGVzdF9jb21taXQgLUMgbmVzdGVkIG5lc3RlZCAmJgorCSgKKwkJY2QgbmVzdGVkICYmCisJCWNhdCA+LmdpdG1vZHVsZXMgPDwtRU9GICYmCisJCVtzdWJtb2R1bGUgImhpcHBvIl0KKwkJCXVybCA9IC4KKwkJCXBhdGggPSB0aGluZzEKKwkJW3N1Ym1vZHVsZSAiaGlwcG8vaG9va3MiXQorCQkJdXJsID0gLgorCQkJcGF0aCA9IHRoaW5nMgorCQlFT0YKKwkJZ2l0IGNsb25lIC4gdGhpbmcxICYmCisJCWdpdCBjbG9uZSAuIHRoaW5nMiAmJgorCQlnaXQgYWRkIC5naXRtb2R1bGVzIHRoaW5nMSB0aGluZzIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gbmVzdGVkCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyBuZXN0ZWQgY2xvbmUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJpcyBpbnNpZGUgZ2l0IGRpciIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQxNi1zdWJtb2R1bGUtZGFzaC11cmwuc2ggYi90L3Q3NDE2LXN1Ym1vZHVsZS1kYXNoLXVybC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZWM5NmUwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQxNi1zdWJtb2R1bGUtZGFzaC11cmwuc2gKQEAgLTAsMCArMSwyMDQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayBoYW5kbGluZyBvZiBkaXNhbGxvd2VkIC5naXRtb2R1bGUgdXJscycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgc3VibW9kdWxlIHdpdGggcHJvdGVjdGVkIGRhc2ggaW4gdXJsJyAnCisJZ2l0IGluaXQgdXBzdHJlYW0gJiYKKwlnaXQgLUMgdXBzdHJlYW0gY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYmFzZSAmJgorCW12IHVwc3RyZWFtIC4vLXVwc3RyZWFtICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi8tdXBzdHJlYW0gc3ViICYmCisJZ2l0IGFkZCBzdWIgLmdpdG1vZHVsZXMgJiYKKwlnaXQgY29tbWl0IC1tIHN1Ym1vZHVsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBjYW4gcmVjdXJzZSBzdWJtb2R1bGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBkc3QiICYmCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC4gZHN0ICYmCisJZWNobyBiYXNlID5leHBlY3QgJiYKKwlnaXQgLUMgZHN0L3N1YiBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBhY2NlcHRzIHByb3RlY3RlZCBkYXNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZHN0IiAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QgJiYKKwlnaXQgLUMgZHN0IGNvbmZpZyB0cmFuc2Zlci5mc2NrT2JqZWN0cyB0cnVlICYmCisJZ2l0IHB1c2ggZHN0IEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIC4vIHByb3RlY3Rpb24gZnJvbSAuZ2l0bW9kdWxlcyB1cmwnICcKKwlwZXJsIC1pIC1wZSAic3tcLi99e30iIC5naXRtb2R1bGVzICYmCisJZ2l0IGNvbW1pdCAtYW0gImRyb3AgcHJvdGVjdGlvbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVqZWN0cyB1bnByb3RlY3RlZCBkYXNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZHN0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAuIGRzdCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgaWdub3JpbmcgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgcmVqZWN0cyB1bnByb3RlY3RlZCBkYXNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZHN0IiAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QgJiYKKwlnaXQgLUMgZHN0IGNvbmZpZyB0cmFuc2Zlci5mc2NrT2JqZWN0cyB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggZHN0IEhFQUQgMj5lcnIgJiYKKwlncmVwIGdpdG1vZHVsZXNVcmwgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWlsaW5nIGJhY2tzbGFzaCBpcyBoYW5kbGVkIGNvcnJlY3RseScgJworCWdpdCBpbml0IHRlc3Rtb2R1bGUgJiYKKwl0ZXN0X2NvbW1pdCAtQyB0ZXN0bW9kdWxlIGMgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuL3Rlc3Rtb2R1bGUgJiYKKwk6IGVuc3VyZSB0aGF0IHRoZSBuYW1lIGVuZHMgaW4gYSBkb3VibGUgYmFja3NsYXNoICYmCisJc2VkIC1lICJzfFxcKHN1Ym1vZHVsZSBcInRlc3Rtb2R1bGVcXClcInxcXDFcXFxcXFxcXFwifCIgXAorCQktZSAic3x1cmwgPSAuKnx1cmwgPSBcIiAtLXNob3VsZC1ub3QtYmUtYW4tb3B0aW9uXCJ8IiBcCisJCTwuZ2l0bW9kdWxlcyA+Lm5ldyAmJgorCW12IC5uZXcgLmdpdG1vZHVsZXMgJiYKKwlnaXQgY29tbWl0IC1hbSAiQWRkIHRlc3Rtb2R1bGUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tdmVyYm9zZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAuIGRvbGx5IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJ1bmtub3duIG9wdGlvbiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgcmVqZWN0cyBtaXNzaW5nIFVSTCBzY2hlbWUnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbWlzc2luZy1zY2hlbWUgJiYKKwljYXQgPi5naXRtb2R1bGVzIDw8LVxFT0YgJiYKKwlbc3VibW9kdWxlICJmb28iXQorCQl1cmwgPSBodHRwOjpvbmUuZXhhbXBsZS5jb20vZm9vLmdpdAorCUVPRgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJnaXRtb2R1bGVzIHdpdGggbWlzc2luZyBVUkwgc2NoZW1lIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGRzdCIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0ICYmCisJZ2l0IC1DIGRzdCBjb25maWcgdHJhbnNmZXIuZnNja09iamVjdHMgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIGRzdCBIRUFEIDI+ZXJyICYmCisJZ3JlcCBnaXRtb2R1bGVzVXJsIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIHJlamVjdHMgcmVsYXRpdmUgVVJMIHJlc29sdmluZyB0byBtaXNzaW5nIHNjaGVtZScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiByZWxhdGl2ZS1taXNzaW5nLXNjaGVtZSAmJgorCWNhdCA+LmdpdG1vZHVsZXMgPDwtXEVPRiAmJgorCVtzdWJtb2R1bGUgImZvbyJdCisJCXVybCA9ICIuLlxcLi4vLlxcLi4vOm9uZS5leGFtcGxlLmNvbS9mb28uZ2l0IgorCUVPRgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJnaXRtb2R1bGVzIHdpdGggcmVsYXRpdmUgVVJMIHRoYXQgc3RyaXBzIG9mZiBzY2hlbWUiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZHN0IiAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QgJiYKKwlnaXQgLUMgZHN0IGNvbmZpZyB0cmFuc2Zlci5mc2NrT2JqZWN0cyB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggZHN0IEhFQUQgMj5lcnIgJiYKKwlncmVwIGdpdG1vZHVsZXNVcmwgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgcmVqZWN0cyBlbXB0eSBVUkwgc2NoZW1lJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGVtcHR5LXNjaGVtZSAmJgorCWNhdCA+LmdpdG1vZHVsZXMgPDwtXEVPRiAmJgorCVtzdWJtb2R1bGUgImZvbyJdCisJCXVybCA9IGh0dHA6OjovL29uZS5leGFtcGxlLmNvbS9mb28uZ2l0CisJRU9GCisJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImdpdG1vZHVsZXMgd2l0aCBlbXB0eSBVUkwgc2NoZW1lIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGRzdCIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0ICYmCisJZ2l0IC1DIGRzdCBjb25maWcgdHJhbnNmZXIuZnNja09iamVjdHMgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIGRzdCBIRUFEIDI+ZXJyICYmCisJZ3JlcCBnaXRtb2R1bGVzVXJsIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIHJlamVjdHMgcmVsYXRpdmUgVVJMIHJlc29sdmluZyB0byBlbXB0eSBzY2hlbWUnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gcmVsYXRpdmUtZW1wdHktc2NoZW1lICYmCisJY2F0ID4uZ2l0bW9kdWxlcyA8PC1cRU9GICYmCisJW3N1Ym1vZHVsZSAiZm9vIl0KKwkJdXJsID0gLi4vLi4vLi4vOjovL29uZS5leGFtcGxlLmNvbS9mb28uZ2l0CisJRU9GCisJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInJlbGF0aXZlIGdpdG1vZHVsZXMgVVJMIHJlc29sdmluZyB0byBlbXB0eSBzY2hlbWUiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZHN0IiAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QgJiYKKwlnaXQgLUMgZHN0IGNvbmZpZyB0cmFuc2Zlci5mc2NrT2JqZWN0cyB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggZHN0IEhFQUQgMj5lcnIgJiYKKwlncmVwIGdpdG1vZHVsZXNVcmwgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgcmVqZWN0cyBlbXB0eSBob3N0bmFtZScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiBlbXB0eS1ob3N0ICYmCisJY2F0ID4uZ2l0bW9kdWxlcyA8PC1cRU9GICYmCisJW3N1Ym1vZHVsZSAiZm9vIl0KKwkJdXJsID0gaHR0cDovLy9vbmUuZXhhbXBsZS5jb20vZm9vLmdpdAorCUVPRgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJnaXRtb2R1bGVzIHdpdGggZXh0cmEgc2xhc2hlcyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBkc3QiICYmCisJZ2l0IGluaXQgLS1iYXJlIGRzdCAmJgorCWdpdCAtQyBkc3QgY29uZmlnIHRyYW5zZmVyLmZzY2tPYmplY3RzIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBkc3QgSEVBRCAyPmVyciAmJgorCWdyZXAgZ2l0bW9kdWxlc1VybCBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayByZWplY3RzIHJlbGF0aXZlIHVybCB0aGF0IHByb2R1Y2VkIGVtcHR5IGhvc3RuYW1lJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG1lc3N5LXJlbGF0aXZlICYmCisJY2F0ID4uZ2l0bW9kdWxlcyA8PC1cRU9GICYmCisJW3N1Ym1vZHVsZSAiZm9vIl0KKwkJdXJsID0gLi4vLi4vLi4vL29uZS5leGFtcGxlLmNvbS9mb28uZ2l0CisJRU9GCisJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImdpdG1vZHVsZXMgYWJ1c2luZyByZWxhdGl2ZV9wYXRoIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGRzdCIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0ICYmCisJZ2l0IC1DIGRzdCBjb25maWcgdHJhbnNmZXIuZnNja09iamVjdHMgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIGRzdCBIRUFEIDI+ZXJyICYmCisJZ3JlcCBnaXRtb2R1bGVzVXJsIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIHBlcm1pdHMgZW1iZWRkZWQgbmV3bGluZSB3aXRoIHVucmVjb2duaXplZCBzY2hlbWUnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3c2NoZW1lICYmCisJY2F0ID4uZ2l0bW9kdWxlcyA8PC1cRU9GICYmCisJW3N1Ym1vZHVsZSAiZm9vIl0KKwkJdXJsID0gImRhdGE6Ly9hY2pia2QlMGFrYWpmZGlja2Fqa2QiCisJRU9GCisJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCWdpdCBjb21taXQgLW0gImdpdG1vZHVsZXMgd2l0aCB1bnJlY29nbml6ZWQgc2NoZW1lIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGRzdCIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0ICYmCisJZ2l0IC1DIGRzdCBjb25maWcgdHJhbnNmZXIuZnNja09iamVjdHMgdHJ1ZSAmJgorCWdpdCBwdXNoIGRzdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgcmVqZWN0cyBlbWJlZGRlZCBuZXdsaW5lIGluIHVybCcgJworCSMgY3JlYXRlIGFuIG9ycGhhbiBicmFuY2ggdG8gYXZvaWQgZXhpc3RpbmcgLmdpdG1vZHVsZXMgb2JqZWN0cworCWdpdCBjaGVja291dCAtLW9ycGhhbiBuZXdsaW5lICYmCisJY2F0ID4uZ2l0bW9kdWxlcyA8PC1cRU9GICYmCisJW3N1Ym1vZHVsZSAiZm9vIl0KKwl1cmwgPSAiaHR0cHM6Ly9vbmUuZXhhbXBsZS5jb20/JTBhaG9zdD10d28uZXhhbXBsZS5jb20vZm9vLmdpdCIKKwlFT0YKKwlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJZ2l0IGNvbW1pdCAtbSAiZ2l0bW9kdWxlcyB3aXRoIG5ld2xpbmUiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZHN0IiAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QgJiYKKwlnaXQgLUMgZHN0IGNvbmZpZyB0cmFuc2Zlci5mc2NrT2JqZWN0cyB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggZHN0IEhFQUQgMj5lcnIgJiYKKwlncmVwIGdpdG1vZHVsZXNVcmwgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgcmVqZWN0cyBlbWJlZGRlZCBuZXdsaW5lIGluIHJlbGF0aXZlIHVybCcgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiByZWxhdGl2ZS1uZXdsaW5lICYmCisJY2F0ID4uZ2l0bW9kdWxlcyA8PC1cRU9GICYmCisJW3N1Ym1vZHVsZSAiZm9vIl0KKwkJdXJsID0gIi4vJTBhaG9zdD10d28uZXhhbXBsZS5jb20vZm9vLmdpdCIKKwlFT0YKKwlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJZ2l0IGNvbW1pdCAtbSAicmVsYXRpdmUgdXJsIHdpdGggbmV3bGluZSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBkc3QiICYmCisJZ2l0IGluaXQgLS1iYXJlIGRzdCAmJgorCWdpdCAtQyBkc3QgY29uZmlnIHRyYW5zZmVyLmZzY2tPYmplY3RzIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBkc3QgSEVBRCAyPmVyciAmJgorCWdyZXAgZ2l0bW9kdWxlc1VybCBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDE3LXN1Ym1vZHVsZS1wYXRoLXVybC5zaCBiL3QvdDc0MTctc3VibW9kdWxlLXBhdGgtdXJsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY3ZTdlOTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDE3LXN1Ym1vZHVsZS1wYXRoLXVybC5zaApAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2sgaGFuZGxpbmcgb2YgLmdpdG1vZHVsZSBwYXRoIHdpdGggZGFzaCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgc3VibW9kdWxlIHdpdGggZGFzaCBpbiBwYXRoJyAnCisJZ2l0IGluaXQgdXBzdHJlYW0gJiYKKwlnaXQgLUMgdXBzdHJlYW0gY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYmFzZSAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIC4vdXBzdHJlYW0gc3ViICYmCisJZ2l0IG12IHN1YiAuLy1zdWIgJiYKKwlnaXQgY29tbWl0IC1tIHN1Ym1vZHVsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZWplY3RzIHVucHJvdGVjdGVkIGRhc2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBkc3QiICYmCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC4gZHN0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCBpZ25vcmluZyBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayByZWplY3RzIHVucHJvdGVjdGVkIGRhc2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBkc3QiICYmCisJZ2l0IGluaXQgLS1iYXJlIGRzdCAmJgorCWdpdCAtQyBkc3QgY29uZmlnIHRyYW5zZmVyLmZzY2tPYmplY3RzIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBkc3QgSEVBRCAyPmVyciAmJgorCWdyZXAgZ2l0bW9kdWxlc1BhdGggZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ3N1Ym1vZHVsZSBwYXRocyBkaXNhbGxvd3MgdHJhaWxpbmcgc3BhY2VzJyAnCisJZ2l0IGluaXQgc3VwZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc3VwZXIgc3VibW9kdWxlIGFkZCAuLi91cHN0cmVhbSAic3ViICIgJiYKKworCTogYWRkICJzdWIiLCB0aGVuIHJlbmFtZSAic3ViIiB0byAic3ViICIsIHRoZSBoYXJkIHdheSAmJgorCWdpdCAtQyBzdXBlciBzdWJtb2R1bGUgYWRkIC4uL3Vwc3RyZWFtIHN1YiAmJgorCXRyZWU9JChnaXQgLUMgc3VwZXIgd3JpdGUtdHJlZSkgJiYKKwlnaXQgLUMgc3VwZXIgbHMtdHJlZSAkdHJlZSA+dHJlZSAmJgorCXNlZCAicy9zdWIvc3ViIC8iIDx0cmVlID50cmVlLm5ldyAmJgorCXRyZWU9JChnaXQgLUMgc3VwZXIgbWt0cmVlIDx0cmVlLm5ldykgJiYKKwljb21taXQ9JChlY2hvIHdpdGggc3BhY2UgfCBnaXQgLUMgc3VwZXIgY29tbWl0LXRyZWUgJHRyZWUpICYmCisJZ2l0IC1DIHN1cGVyIHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJGNvbW1pdCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIHN1cGVyIGRzdCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInN1YiAiIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MTgtc3VibW9kdWxlLXNwYXJzZS1naXRtb2R1bGVzLnNoIGIvdC90NzQxOC1zdWJtb2R1bGUtc3BhcnNlLWdpdG1vZHVsZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2Y3ZjI3MTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDE4LXN1Ym1vZHVsZS1zcGFyc2UtZ2l0bW9kdWxlcy5zaApAQCAtMCwwICsxLDEyMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoQykgMjAxOCAgQW50b25pbyBPc3BpdGUgPGFvMkBhbzIuaXQ+CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcmVhZGluZy93cml0aW5nIC5naXRtb2R1bGVzIHdoZW4gbm90IGluIHRoZSB3b3JraW5nIHRyZWUKKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQsIHdoZW4gLmdpdG1vZHVsZXMgaXMgaW4gdGhlIGN1cnJlbnQgYnJhbmNoIGJ1dCBpcyBub3QKK2luIHRoZSB3b3JraW5nIHRyZWUgcmVhZGluZyBmcm9tIGl0IHN0aWxsIHdvcmtzIGJ1dCB3cml0aW5nIHRvIGl0IGRvZXMgbm90LgorCitUaGUgdGVzdCBzZXR1cCB1c2VzIGEgc3BhcnNlIGNoZWNrb3V0LCBob3dldmVyIHRoZSBzYW1lIHNjZW5hcmlvIGNhbiBiZSBzZXQgdXAKK2Fsc28gYnkgY29tbWl0dGluZyAuZ2l0bW9kdWxlcyBhbmQgdGhlbiBqdXN0IHJlbW92aW5nIGl0IGZyb20gdGhlIGZpbGVzeXN0ZW0uCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGFyc2UgY2hlY2tvdXQgc2V0dXAgd2hpY2ggaGlkZXMgLmdpdG1vZHVsZXMnICcKKwlnaXQgaW5pdCB1cHN0cmVhbSAmJgorCWdpdCBpbml0IHN1Ym1vZHVsZSAmJgorCShjZCBzdWJtb2R1bGUgJiYKKwkJZWNobyBmaWxlID5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIGZpbGUiCisJKSAmJgorCShjZCB1cHN0cmVhbSAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCBzdWJtb2R1bGUiCisJKSAmJgorCWdpdCBjbG9uZSB1cHN0cmVhbSBzdXBlciAmJgorCShjZCBzdXBlciAmJgorCQljYXQgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPDwtXEVPRiAmJgorCQkvKgorCQkhLy5naXRtb2R1bGVzCisJCUVPRgorCQlnaXQgY29uZmlnIGNvcmUuc3BhcnNlY2hlY2tvdXQgdHJ1ZSAmJgorCQlnaXQgcmVhZC10cmVlIC1tIC11IEhFQUQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdG1vZHVsZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWRpbmcgZ2l0bW9kdWxlcyBjb25maWcgZmlsZSB3aGVuIGl0IGlzIG5vdCBjaGVja2VkIG91dCcgJworCWVjaG8gIi4uL3N1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCWdpdCAtQyBzdXBlciBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IHdyaXRpbmcgZ2l0bW9kdWxlcyBjb25maWcgZmlsZSB3aGVuIGl0IGlzIG5vdCBjaGVja2VkIG91dCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdXBlciBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwgbmV3dXJsICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VwZXIvLmdpdG1vZHVsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGlzaW5nIHN1Ym1vZHVsZSB3aGVuIHRoZSBnaXRtb2R1bGVzIGNvbmZpZyBpcyBub3QgY2hlY2tlZCBvdXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc3VwZXIgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsICYmCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZSBpbml0ICYmCisJZ2l0IC1DIHN1cGVyIGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCA+YWN0dWFsICYmCisJZWNobyAiJChwd2QpL3N1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgc3VibW9kdWxlIHdoZW4gdGhlIGdpdG1vZHVsZXMgY29uZmlnIGlzIG5vdCBjaGVja2VkIG91dCcgJworCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1cGVyL3N1Ym1vZHVsZS9maWxlICYmCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwl0ZXN0X2NtcCBzdWJtb2R1bGUvZmlsZSBzdXBlci9zdWJtb2R1bGUvZmlsZQorJworCitPUklHX1NVQk1PRFVMRT0kKGdpdCAtQyBzdWJtb2R1bGUgcmV2LXBhcnNlIEhFQUQpCitPUklHX1VQU1RSRUFNPSQoZ2l0IC1DIHVwc3RyZWFtIHJldi1wYXJzZSBIRUFEKQorT1JJR19TVVBFUj0kKGdpdCAtQyBzdXBlciByZXYtcGFyc2UgSEVBRCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtdXBkYXRpbmcgc3VibW9kdWxlIHdoZW4gdGhlIGdpdG1vZHVsZXMgY29uZmlnIGlzIG5vdCBjaGVja2VkIG91dCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1Ym1vZHVsZSByZXNldCAtLWhhcmQgJE9SSUdfU1VCTU9EVUxFOworCQkJICAgIGdpdCAtQyB1cHN0cmVhbSByZXNldCAtLWhhcmQgJE9SSUdfVVBTVFJFQU07CisJCQkgICAgZ2l0IC1DIHN1cGVyIHJlc2V0IC0taGFyZCAkT1JJR19TVVBFUjsKKwkJCSAgICBnaXQgLUMgdXBzdHJlYW0gc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZTsKKwkJCSAgICBnaXQgLUMgc3VwZXIgcHVsbDsKKwkJCSAgICBnaXQgLUMgc3VwZXIgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSIgJiYKKwkoY2Qgc3VibW9kdWxlICYmCisJCWVjaG8gZmlsZTIgPmZpbGUyICYmCisJCWdpdCBhZGQgZmlsZTIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCBmaWxlMiB0byBzdWJtb2R1bGUiCisJKSAmJgorCShjZCB1cHN0cmVhbSAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAmJgorCQlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiVXBkYXRlIHN1Ym1vZHVsZSIKKwkpICYmCisJZ2l0IC1DIHN1cGVyIHB1bGwgJiYKKwkjIFRoZSAtLWZvci1zdGF0dXMgb3B0aW9ucyByZWFkcyB0aGUgZ2l0bW9kdWxlcyBjb25maWcKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlIHN1bW1hcnkgLS1mb3Itc3RhdHVzID5hY3R1YWwgJiYKKwlyZXYxPSQoZ2l0IC1DIHN1Ym1vZHVsZSByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCXJldjI9JChnaXQgLUMgc3VibW9kdWxlIHJldi1wYXJzZSAtLXNob3J0IEhFQUReKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSogc3VibW9kdWxlICR7cmV2MX0uLi4ke3JldjJ9ICgxKToKKwkgIDwgQWRkIGZpbGUyIHRvIHN1Ym1vZHVsZQorCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCSMgVGVzdCB0aGF0IHRoZSB1cGRhdGUgYWN0dWFsbHkgc3VjY2VlZHMKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdXBlci9zdWJtb2R1bGUvZmlsZTIgJiYKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlIHVwZGF0ZSAmJgorCXRlc3RfY21wIHN1Ym1vZHVsZS9maWxlMiBzdXBlci9zdWJtb2R1bGUvZmlsZTIgJiYKKwlnaXQgLUMgc3VwZXIgc3RhdHVzIC0tc2hvcnQgPm91dHB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IGFkZGluZyBzdWJtb2R1bGVzIHdoZW4gdGhlIGdpdG1vZHVsZXMgY29uZmlnIGlzIG5vdCBjaGVja2VkIG91dCcgJworCWdpdCBjbG9uZSBzdWJtb2R1bGUgbmV3X3N1Ym1vZHVsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdXBlciBzdWJtb2R1bGUgYWRkIC4uL25ld19zdWJtb2R1bGUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0bW9kdWxlcworJworCisjIFRoaXMgdGVzdCBjaGVja3MgdGhhdCB0aGUgcHJldmlvdXMgImdpdCBzdWJtb2R1bGUgYWRkIiBkaWQgbm90IGxlYXZlIHRoZQorIyByZXBvc2l0b3J5IGluIGEgc3B1cmlvdXMgc3RhdGUgd2hlbiBpdCBmYWlsZWQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHN1Ym1vZHVsZSBzdGlsbCB3b3JrcyBldmVuIGFmdGVyIHRoZSBwcmV2aW91cyBhZGQgZmFpbGVkJyAnCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZSBpbml0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQxOS1zdWJtb2R1bGUtc2V0LWJyYW5jaC5zaCBiL3QvdDc0MTktc3VibW9kdWxlLXNldC1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmQyNWY3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MTktc3VibW9kdWxlLXNldC1icmFuY2guc2gKQEAgLTAsMCArMSw5MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxOSBEZW50b24gTGl1CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgc3VibW9kdWxlcyBzZXQtYnJhbmNoIHN1YmNvbW1hbmQKKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgdGhlIHNldC1icmFuY2ggc3ViY29tbWFuZCBvZiBnaXQtc3VibW9kdWxlIGlzIHdvcmtpbmcKK2FzIGV4cGVjdGVkLgorJworCitURVNUX05PX0NSRUFURV9SRVBPPTEKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29uZmlnIGNhY2hlIHNldHVwJyAnCisJbWtkaXIgc3VibW9kdWxlICYmCisJKGNkIHN1Ym1vZHVsZSAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIGEgPmEgJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLW1hICYmCisJCWdpdCBjaGVja291dCAtYiB0b3BpYyAmJgorCQllY2hvIGIgPmEgJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLW1iCisJKSAmJgorCW1rZGlyIHN1cGVyICYmCisJKGNkIHN1cGVyICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5zdXJlIHN1Ym1vZHVsZSBicmFuY2ggaXMgdW5zZXQnICcKKwkoY2Qgc3VwZXIgJiYKKwkJISBncmVwIGJyYW5jaCAuZ2l0bW9kdWxlcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzdWJtb2R1bGUgc2V0LWJyYW5jaCAtLWJyYW5jaCcgJworCShjZCBzdXBlciAmJgorCQlnaXQgc3VibW9kdWxlIHNldC1icmFuY2ggLS1icmFuY2ggdG9waWMgc3VibW9kdWxlICYmCisJCWdyZXAgImJyYW5jaCA9IHRvcGljIiAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAmJgorCQljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJCWIKKwkJRU9GCisJCWdpdCAtQyBzdWJtb2R1bGUgc2hvdyAtcyAtLXByZXR0eT0lcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc3VibW9kdWxlIHNldC1icmFuY2ggLS1kZWZhdWx0JyAnCisJKGNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgc2V0LWJyYW5jaCAtLWRlZmF1bHQgc3VibW9kdWxlICYmCisJCSEgZ3JlcCBicmFuY2ggLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUgJiYKKwkJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCQlhCisJCUVPRgorCQlnaXQgLUMgc3VibW9kdWxlIHNob3cgLXMgLS1wcmV0dHk9JXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHN1Ym1vZHVsZSBzZXQtYnJhbmNoIC1iJyAnCisJKGNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgc2V0LWJyYW5jaCAtYiB0b3BpYyBzdWJtb2R1bGUgJiYKKwkJZ3JlcCAiYnJhbmNoID0gdG9waWMiIC5naXRtb2R1bGVzICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlICYmCisJCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwkJYgorCQlFT0YKKwkJZ2l0IC1DIHN1Ym1vZHVsZSBzaG93IC1zIC0tcHJldHR5PSVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzdWJtb2R1bGUgc2V0LWJyYW5jaCAtZCcgJworCShjZCBzdXBlciAmJgorCQlnaXQgc3VibW9kdWxlIHNldC1icmFuY2ggLWQgc3VibW9kdWxlICYmCisJCSEgZ3JlcCBicmFuY2ggLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUgJiYKKwkJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCQlhCisJCUVPRgorCQlnaXQgLUMgc3VibW9kdWxlIHNob3cgLXMgLS1wcmV0dHk9JXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MjAtc3VibW9kdWxlLXNldC11cmwuc2ggYi90L3Q3NDIwLXN1Ym1vZHVsZS1zZXQtdXJsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVmMGNiNmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDIwLXN1Ym1vZHVsZS1zZXQtdXJsLnNoCkBAIC0wLDAgKzEsNTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTkgRGVudG9uIExpdQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHN1Ym1vZHVsZXMgc2V0LXVybCBzdWJjb21tYW5kCisKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IHRoZSBzZXQtdXJsIHN1YmNvbW1hbmQgb2YgZ2l0LXN1Ym1vZHVsZSBpcyB3b3JraW5nCithcyBleHBlY3RlZC4KKycKKworVEVTVF9OT19DUkVBVEVfUkVQTz0xCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbmZpZyBjYWNoZSBzZXR1cCcgJworCW1rZGlyIHN1Ym1vZHVsZSAmJgorCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gYSA+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbWEKKwkpICYmCisJbWtkaXIgc3VwZXIgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzdWJtb2R1bGUgc2V0LXVybCcgJworCSMgYWRkIGEgY29tbWl0IGFuZCBtb3ZlIHRoZSBzdWJtb2R1bGUgKGNoYW5nZSB0aGUgdXJsKQorCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCWVjaG8gYiA+PmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW1iCisJKSAmJgorCW12IHN1Ym1vZHVsZSBuZXdzdWJtb2R1bGUgJiYKKworCWdpdCAtQyBuZXdzdWJtb2R1bGUgc2hvdyA+ZXhwZWN0ICYmCisJKAorCQljZCBzdXBlciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAmJgorCQlnaXQgc3VibW9kdWxlIHNldC11cmwgc3VibW9kdWxlIC4uL25ld3N1Ym1vZHVsZSAmJgorCQlncmVwIC1GICJ1cmwgPSAuLi9uZXdzdWJtb2R1bGUiIC5naXRtb2R1bGVzICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlCisJKSAmJgorCWdpdCAtQyBzdXBlci9zdWJtb2R1bGUgc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDAtY29tbWl0LXRlbXBsYXRlLXNxdWFzaC1zaWdub2ZmLnNoIGIvdC90NzUwMC1jb21taXQtdGVtcGxhdGUtc3F1YXNoLXNpZ25vZmYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmQxOWVjZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDAtY29tbWl0LXRlbXBsYXRlLXNxdWFzaC1zaWdub2ZmLnNoCkBAIC0wLDAgKzEsMzk0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IFN0ZXZlbiBHcmltbQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY29tbWl0CisKK1Rlc3RzIGZvciB0ZW1wbGF0ZSwgc2lnbm9mZiwgc3F1YXNoIGFuZCAtRiBmdW5jdGlvbnMuJworCisuIC4vdGVzdC1saWIuc2gKKworY29tbWl0X21zZ19pcyAoKSB7CisJZXhwZWN0PWNvbW1pdF9tc2dfaXMuZXhwZWN0CisJYWN0dWFsPWNvbW1pdF9tc2dfaXMuYWN0dWFsCisKKwlwcmludGYgIiVzIiAiJChnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolcyViIC0xKSIgPiIkYWN0dWFsIiAmJgorCXByaW50ZiAiJXMiICIkMSIgPiIkZXhwZWN0IiAmJgorCXRlc3RfaTE4bmNtcCAiJGV4cGVjdCIgIiRhY3R1YWwiCit9CisKKyMgQSBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIGNvbW1pdCBpcyB3b3JraW5nIGF0IGFsbC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2EgYmFzaWMgY29tbWl0IGluIGFuIGVtcHR5IHRyZWUgc2hvdWxkIHN1Y2NlZWQnICcKKwllY2hvIGNvbnRlbnQgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25leGlzdGVudCB0ZW1wbGF0ZSBmaWxlIHNob3VsZCByZXR1cm4gZXJyb3InICcKKwllY2hvIGNoYW5nZXMgPj4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwkoCisJCUdJVF9FRElUT1I9ImVjaG8gaGVsbG8gPlwiXCQxXCIiICYmCisJCWV4cG9ydCBHSVRfRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS10ZW1wbGF0ZSAiJFBXRCIvbm90ZXhpc3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbmV4aXN0ZW50IHRlbXBsYXRlIGZpbGUgaW4gY29uZmlnIHNob3VsZCByZXR1cm4gZXJyb3InICcKKwl0ZXN0X2NvbmZpZyBjb21taXQudGVtcGxhdGUgIiRQV0QiL25vdGV4aXN0ICYmCisJKAorCQlHSVRfRURJVE9SPSJlY2hvIGhlbGxvID5cIlwkMVwiIiAmJgorCQlleHBvcnQgR0lUX0VESVRPUiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0CisJKQorJworCisjIEZyb20gbm93IG9uIHdlJ2xsIHVzZSBhIHRlbXBsYXRlIGZpbGUgdGhhdCBleGlzdHMuCitURU1QTEFURT0iJFBXRCIvdGVtcGxhdGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5lZGl0ZWQgdGVtcGxhdGUgc2hvdWxkIG5vdCBjb21taXQnICcKKwllY2hvICJ0ZW1wbGF0ZSBsaW5lIiA+ICIkVEVNUExBVEUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXRlbXBsYXRlICIkVEVNUExBVEUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VuZWRpdGVkIHRlbXBsYXRlIHdpdGggY29tbWVudHMgc2hvdWxkIG5vdCBjb21taXQnICcKKwllY2hvICIjIGNvbW1lbnQgaW4gdGVtcGxhdGUiID4+ICIkVEVNUExBVEUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXRlbXBsYXRlICIkVEVNUExBVEUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2EgU2lnbmVkLW9mZi1ieSBsaW5lIGJ5IGl0c2VsZiBzaG91bGQgbm90IGNvbW1pdCcgJworCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1zaWduZWQtb2ZmICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS10ZW1wbGF0ZSAiJFRFTVBMQVRFIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkaW5nIGNvbW1lbnRzIHRvIGEgdGVtcGxhdGUgc2hvdWxkIG5vdCBjb21taXQnICcKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAiJFRFU1RfRElSRUNUT1JZIi90NzUwMC9hZGQtY29tbWVudHMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXRlbXBsYXRlICIkVEVNUExBVEUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRpbmcgcmVhbCBjb250ZW50IHRvIGEgdGVtcGxhdGUgc2hvdWxkIGNvbW1pdCcgJworCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50ICYmCisJCWdpdCBjb21taXQgLS10ZW1wbGF0ZSAiJFRFTVBMQVRFIgorCSkgJiYKKwljb21taXRfbXNnX2lzICJ0ZW1wbGF0ZSBsaW5lY29tbWl0IG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy10IG9wdGlvbiBzaG91bGQgYmUgc2hvcnQgZm9yIC0tdGVtcGxhdGUnICcKKwllY2hvICJzaG9ydCB0ZW1wbGF0ZSIgPiAiJFRFTVBMQVRFIiAmJgorCWVjaG8gIm5ldyBjb250ZW50IiA+PiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50ICYmCisJCWdpdCBjb21taXQgLXQgIiRURU1QTEFURSIKKwkpICYmCisJY29tbWl0X21zZ19pcyAic2hvcnQgdGVtcGxhdGVjb21taXQgbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnLXNwZWNpZmllZCB0ZW1wbGF0ZSBzaG91bGQgY29tbWl0JyAnCisJZWNobyAibmV3IHRlbXBsYXRlIiA+ICIkVEVNUExBVEUiICYmCisJdGVzdF9jb25maWcgY29tbWl0LnRlbXBsYXRlICIkVEVNUExBVEUiICYmCisJZWNobyAibW9yZSBjb250ZW50IiA+PiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50ICYmCisJCWdpdCBjb21taXQKKwkpICYmCisJY29tbWl0X21zZ19pcyAibmV3IHRlbXBsYXRlY29tbWl0IG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGxpY2l0IGNvbW1pdCBtZXNzYWdlIHNob3VsZCBvdmVycmlkZSB0ZW1wbGF0ZScgJworCWVjaG8gInN0aWxsIG1vcmUgY29udGVudCIgPj4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlHSVRfRURJVE9SPSIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50IGdpdCBjb21taXQgLS10ZW1wbGF0ZSAiJFRFTVBMQVRFIiBcCisJCS1tICJjb21tYW5kIGxpbmUgbXNnIiAmJgorCWNvbW1pdF9tc2dfaXMgImNvbW1hbmQgbGluZSBtc2ciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZXNzYWdlIGZyb20gZmlsZSBzaG91bGQgb3ZlcnJpZGUgdGVtcGxhdGUnICcKKwllY2hvICJjb250ZW50IGdhbG9yZSIgPj4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwllY2hvICJzdGFuZGFyZCBpbnB1dCBtc2ciIHwKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAiJFRFU1RfRElSRUNUT1JZIi90NzUwMC9hZGQtY29udGVudCAmJgorCQlnaXQgY29tbWl0IC0tdGVtcGxhdGUgIiRURU1QTEFURSIgLS1maWxlIC0KKwkpICYmCisJY29tbWl0X21zZ19pcyAic3RhbmRhcmQgaW5wdXQgbXNnIgorJworCitjYXQgPiIkVEVNUExBVEUiIDw8XEVPRgorCisKKyMjIyB0ZW1wbGF0ZQorCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZXNzYWdlIGZyb20gdGVtcGxhdGUgd2l0aCB3aGl0ZXNwYWNlIGlzc3VlJyAnCisJZWNobyAiY29udGVudCBnYWxvcmUiID4+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlHSVRfRURJVE9SPVwiIiRURVNUX0RJUkVDVE9SWSJcIi90NzUwMC9hZGQtd2hpdGVzcGFjZWQtY29udGVudCBcCisJZ2l0IGNvbW1pdCAtLXRlbXBsYXRlICIkVEVNUExBVEUiICYmCisJY29tbWl0X21zZ19pcyAiY29tbWl0IG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIGFsdGVybmF0ZSBHSVRfSU5ERVhfRklMRSAoMSknICcKKworCWNwIC5naXQvaW5kZXggc2F2ZWQtaW5kZXggJiYKKwkoCisJCWVjaG8gc29tZSBuZXcgY29udGVudCA+ZmlsZSAmJgorCSAgICAgICAgR0lUX0lOREVYX0ZJTEU9LmdpdC9hbm90aGVyX2luZGV4ICYmCisJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IHVzaW5nIGFub3RoZXIgaW5kZXgiICYmCisJCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQgJiYKKwkJZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUKKwkpICYmCisJY21wIC5naXQvaW5kZXggc2F2ZWQtaW5kZXggPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIGFsdGVybmF0ZSBHSVRfSU5ERVhfRklMRSAoMiknICcKKworCWNwIC5naXQvaW5kZXggc2F2ZWQtaW5kZXggJiYKKwkoCisJCXJtIC1mIC5naXQvbm8tc3VjaC1pbmRleCAmJgorCQlHSVRfSU5ERVhfRklMRT0uZ2l0L25vLXN1Y2gtaW5kZXggJiYKKwkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJCWdpdCBjb21taXQgLW0gImNvbW1pdCB1c2luZyBub25leGlzdGVudCBpbmRleCIgJiYKKwkJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMpIiAmJgorCQl0ZXN0IC16ICIkKGdpdCBscy10cmVlIEhFQUQpIgorCisJKSAmJgorCWNtcCAuZ2l0L2luZGV4IHNhdmVkLWluZGV4ID4vZGV2L251bGwKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorem9ydAorCitTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaWdub2ZmJyAnCisJZWNobyAieWV0IGFub3RoZXIgY29udGVudCAqbmFyZioiID4+IGZvbyAmJgorCWVjaG8gInpvcnQiIHwgZ2l0IGNvbW1pdCAtcyAtRiAtIGZvbyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAiMSwvXlwkL2QiID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSBmcm9tIGZpbGUgKDEpJyAnCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyAiTG9nIGluIHRvcCBkaXJlY3RvcnkiID5sb2cgJiYKKwllY2hvICJMb2cgaW4gc3ViIGRpcmVjdG9yeSIgPnN1YmRpci9sb2cgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLUYgbG9nCisJKSAmJgorCWNvbW1pdF9tc2dfaXMgIkxvZyBpbiBzdWIgZGlyZWN0b3J5IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSBmcm9tIGZpbGUgKDIpJyAnCisJcm0gLWYgbG9nICYmCisJZWNobyAiTG9nIGluIHN1YiBkaXJlY3RvcnkiID5zdWJkaXIvbG9nICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1GIGxvZworCSkgJiYKKwljb21taXRfbXNnX2lzICJMb2cgaW4gc3ViIGRpcmVjdG9yeSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgZnJvbSBzdGRpbicgJworCSgKKwkJY2Qgc3ViZGlyICYmCisJCWVjaG8gIkxvZyB3aXRoIGZvbyB3b3JkIiB8IGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtRiAtCisJKSAmJgorCWNvbW1pdF9tc2dfaXMgIkxvZyB3aXRoIGZvbyB3b3JkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLUYgb3ZlcnJpZGVzIC10JyAnCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZWNobyAiLUYgbG9nIiA+IGYubG9nICYmCisJCWVjaG8gIi10IHRlbXBsYXRlIiA+IHQudGVtcGxhdGUgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1GIGYubG9nIC10IHQudGVtcGxhdGUKKwkpICYmCisJY29tbWl0X21zZ19pcyAiLUYgbG9nIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDb21taXQgd2l0aG91dCBtZXNzYWdlIGlzIGFsbG93ZWQgd2l0aCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UnICcKKwllY2hvICJtb3JlIGNvbnRlbnQiID4+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwk+ZW1wdHkgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHktbWVzc2FnZSA8ZW1wdHkgJiYKKwljb21taXRfbXNnX2lzICIiICYmCisJZ2l0IHRhZyBlbXB0eS1tZXNzYWdlLWNvbW1pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDb21taXQgd2l0aG91dCBtZXNzYWdlIGlzIG5vLW5vIHdpdGhvdXQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlJyAnCisJZWNobyAibW9yZSBjb250ZW50IiA+PmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJPmVtcHR5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCA8ZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ29tbWl0IGEgbWVzc2FnZSB3aXRoIC0tYWxsb3ctZW1wdHktbWVzc2FnZScgJworCWVjaG8gImV2ZW4gbW9yZSBjb250ZW50IiA+PmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLW0iaGVsbG8gdGhlcmUiICYmCisJY29tbWl0X21zZ19pcyAiaGVsbG8gdGhlcmUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtQyBlbXB0eSByZXNwZWN0cyAtLWFsbG93LWVtcHR5LW1lc3NhZ2UnICcKKwllY2hvIG1vcmUgPj5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLUMgZW1wdHktbWVzc2FnZS1jb21taXQgJiYKKwlnaXQgY29tbWl0IC1DIGVtcHR5LW1lc3NhZ2UtY29tbWl0IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAmJgorCWNvbW1pdF9tc2dfaXMgIiIKKycKKworY29tbWl0X2Zvcl9yZWJhc2VfYXV0b3NxdWFzaF9zZXR1cCAoKSB7CisJZWNobyAiZmlyc3QgY29udGVudCBsaW5lIiA+PmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJY2F0ID5sb2cgPDxFT0YgJiYKK3RhcmdldCBtZXNzYWdlIHN1YmplY3QgbGluZQorCit0YXJnZXQgbWVzc2FnZSBib2R5IGxpbmUgMQordGFyZ2V0IG1lc3NhZ2UgYm9keSBsaW5lIDIKK0VPRgorCWdpdCBjb21taXQgLUYgbG9nICYmCisJZWNobyAic2Vjb25kIGNvbnRlbnQgbGluZSIgPj5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gImludGVybWVkaWF0ZSBjb21taXQiICYmCisJZWNobyAidGhpcmQgY29udGVudCBsaW5lIiA+PmZvbyAmJgorCWdpdCBhZGQgZm9vCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLWZpeHVwIHByb3ZpZGVzIGNvcnJlY3Qgb25lLWxpbmUgY29tbWl0IG1lc3NhZ2UnICcKKwljb21taXRfZm9yX3JlYmFzZV9hdXRvc3F1YXNoX3NldHVwICYmCisJZ2l0IGNvbW1pdCAtLWZpeHVwIEhFQUR+MSAmJgorCWNvbW1pdF9tc2dfaXMgImZpeHVwISB0YXJnZXQgbWVzc2FnZSBzdWJqZWN0IGxpbmUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLWZpeHVwIC1tInNvbWV0aGluZyIgLW0iZXh0cmEiJyAnCisJY29tbWl0X2Zvcl9yZWJhc2VfYXV0b3NxdWFzaF9zZXR1cCAmJgorCWdpdCBjb21taXQgLS1maXh1cCBIRUFEfjEgLW0ic29tZXRoaW5nIiAtbSJleHRyYSIgJiYKKwljb21taXRfbXNnX2lzICJmaXh1cCEgdGFyZ2V0IG1lc3NhZ2Ugc3ViamVjdCBsaW5lc29tZXRoaW5nCisKK2V4dHJhIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zcXVhc2ggd29ya3Mgd2l0aCAtRicgJworCWNvbW1pdF9mb3JfcmViYXNlX2F1dG9zcXVhc2hfc2V0dXAgJiYKKwllY2hvICJsb2cgbWVzc2FnZSBmcm9tIGZpbGUiID5tc2dmaWxlICYmCisJZ2l0IGNvbW1pdCAtLXNxdWFzaCBIRUFEfjEgLUYgbXNnZmlsZSAgJiYKKwljb21taXRfbXNnX2lzICJzcXVhc2ghIHRhcmdldCBtZXNzYWdlIHN1YmplY3QgbGluZWxvZyBtZXNzYWdlIGZyb20gZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3F1YXNoIHdvcmtzIHdpdGggLW0nICcKKwljb21taXRfZm9yX3JlYmFzZV9hdXRvc3F1YXNoX3NldHVwICYmCisJZ2l0IGNvbW1pdCAtLXNxdWFzaCBIRUFEfjEgLW0gImZvbyBiYXJcbmJheiIgJiYKKwljb21taXRfbXNnX2lzICJzcXVhc2ghIHRhcmdldCBtZXNzYWdlIHN1YmplY3QgbGluZWZvbyBiYXJcbmJheiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3F1YXNoIHdvcmtzIHdpdGggLUMnICcKKwljb21taXRfZm9yX3JlYmFzZV9hdXRvc3F1YXNoX3NldHVwICYmCisJZ2l0IGNvbW1pdCAtLXNxdWFzaCBIRUFEfjEgLUMgSEVBRCAmJgorCWNvbW1pdF9tc2dfaXMgInNxdWFzaCEgdGFyZ2V0IG1lc3NhZ2Ugc3ViamVjdCBsaW5laW50ZXJtZWRpYXRlIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3F1YXNoIHdvcmtzIHdpdGggLWMnICcKKwljb21taXRfZm9yX3JlYmFzZV9hdXRvc3F1YXNoX3NldHVwICYmCisJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2VkaXQtY29udGVudCAmJgorCWdpdCBjb21taXQgLS1zcXVhc2ggSEVBRH4xIC1jIEhFQUQgJiYKKwljb21taXRfbXNnX2lzICJzcXVhc2ghIHRhcmdldCBtZXNzYWdlIHN1YmplY3QgbGluZWVkaXRlZCBjb21taXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLXNxdWFzaCB3b3JrcyB3aXRoIC1DIGZvciBzYW1lIGNvbW1pdCcgJworCWNvbW1pdF9mb3JfcmViYXNlX2F1dG9zcXVhc2hfc2V0dXAgJiYKKwlnaXQgY29tbWl0IC0tc3F1YXNoIEhFQUQgLUMgSEVBRCAmJgorCWNvbW1pdF9tc2dfaXMgInNxdWFzaCEgaW50ZXJtZWRpYXRlIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3F1YXNoIHdvcmtzIHdpdGggLWMgZm9yIHNhbWUgY29tbWl0JyAnCisJY29tbWl0X2Zvcl9yZWJhc2VfYXV0b3NxdWFzaF9zZXR1cCAmJgorCXRlc3Rfc2V0X2VkaXRvciAiJFRFU1RfRElSRUNUT1JZIi90NzUwMC9lZGl0LWNvbnRlbnQgJiYKKwlnaXQgY29tbWl0IC0tc3F1YXNoIEhFQUQgLWMgSEVBRCAmJgorCWNvbW1pdF9tc2dfaXMgInNxdWFzaCEgZWRpdGVkIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3F1YXNoIHdvcmtzIHdpdGggZWRpdG9yJyAnCisJY29tbWl0X2Zvcl9yZWJhc2VfYXV0b3NxdWFzaF9zZXR1cCAmJgorCXRlc3Rfc2V0X2VkaXRvciAiJFRFU1RfRElSRUNUT1JZIi90NzUwMC9hZGQtY29udGVudCAmJgorCWdpdCBjb21taXQgLS1zcXVhc2ggSEVBRH4xICYmCisJY29tbWl0X21zZ19pcyAic3F1YXNoISB0YXJnZXQgbWVzc2FnZSBzdWJqZWN0IGxpbmVjb21taXQgbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBtZXNzYWdlIG9wdGlvbnMgd2hlbiB1c2luZyAtLWZpeHVwJyAnCisJZWNobyBjaGFuZ2VzID4+Zm9vICYmCisJZWNobyAibWVzc2FnZSIgPmxvZyAmJgorCWdpdCBhZGQgZm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWZpeHVwIEhFQUR+MSAtLXNxdWFzaCBIRUFEfjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZml4dXAgSEVBRH4xIC1DIEhFQUR+MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1maXh1cCBIRUFEfjEgLWMgSEVBRH4yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWZpeHVwIEhFQUR+MSAtRiBsb2cKKycKKworY2F0ID5leHBlY3RlZC10ZW1wbGF0ZSA8PEVPRgorCisjIFBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmcKKyMgd2l0aCAnIycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC4KKyMKKyMgQXV0aG9yOiAgICBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorIworIyBPbiBicmFuY2ggY29tbWl0LXRlbXBsYXRlLWNoZWNrCisjIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorIwluZXcgZmlsZTogICBjb21taXQtdGVtcGxhdGUtY2hlY2sKKyMKKyMgVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgbGluZSBmb3VuZCBiZWZvcmUgc3RhdHVzIG1lc3NhZ2UgaW4gY29tbWl0IHRlbXBsYXRlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvbW1pdC10ZW1wbGF0ZS1jaGVjayAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCXRvdWNoIGNvbW1pdC10ZW1wbGF0ZS1jaGVjayAmJgorCWdpdCBhZGQgY29tbWl0LXRlbXBsYXRlLWNoZWNrICYmCisJR0lUX0VESVRPUj0iY2F0ID5lZGl0b3ItaW5wdXQiIGdpdCBjb21taXQgLS11bnRyYWNrZWQtZmlsZXM9bm8gLS1hbGxvdy1lbXB0eS1tZXNzYWdlICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkLXRlbXBsYXRlIGVkaXRvci1pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBlbXB0eSBjb21taXQgd2l0aCB1bnN0YWdlZCByZW5hbWUgYW5kIGNvcHknICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHVuc3RhZ2VkX3JlbmFtZV9hbmRfY29weSAmJgorCSgKKwkJY2QgdW5zdGFnZWRfcmVuYW1lX2FuZF9jb3B5ICYmCisKKwkJZWNobyBjb250ZW50ID5vcmlnICYmCisJCWdpdCBhZGQgb3JpZyAmJgorCQl0ZXN0X2NvbW1pdCBvcmlnICYmCisKKwkJY3Agb3JpZyBuZXdfY29weSAmJgorCQltdiBvcmlnIG5ld19yZW5hbWUgJiYKKwkJZ2l0IGFkZCAtTiBuZXdfY29weSBuZXdfcmVuYW1lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBjb21taXQgd2l0aCB1bnN0YWdlZCByZW5hbWUgYW5kIGNvcHknICcKKwkoCisJCWNkIHVuc3RhZ2VkX3JlbmFtZV9hbmRfY29weSAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBkaWZmLnJlbmFtZXM9Y29weSBjb21taXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB3aXRob3V0IHN0YWdpbmcgZmlsZXMgZmFpbHMgYW5kIGRpc3BsYXlzIGhpbnRzJyAnCisJZWNobyAiaW5pdGlhbCIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvICJjaGFuZ2VzIiA+PmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIHVwZGF0ZSA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpIiBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTAwL2FkZC1jb21tZW50cyBiL3QvdDc1MDAvYWRkLWNvbW1lbnRzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3MmU2NWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTAwL2FkZC1jb21tZW50cwpAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9zaAorZWNobyAiIyB0aGlzIGlzIGEgbmV3IGNvbW1lbnQiID4+ICIkMSIKK2VjaG8gIiMgYW5kIHNvIGlzIHRoaXMiID4+ICIkMSIKK2V4aXQgMApkaWZmIC0tZ2l0IGEvdC90NzUwMC9hZGQtY29udGVudCBiL3QvdDc1MDAvYWRkLWNvbnRlbnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmZhM2Q4NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDAvYWRkLWNvbnRlbnQKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKK2VjaG8gImNvbW1pdCBtZXNzYWdlIiA+PiAiJDEiCitleGl0IDAKZGlmZiAtLWdpdCBhL3QvdDc1MDAvYWRkLWNvbnRlbnQtYW5kLWNvbW1lbnQgYi90L3Q3NTAwL2FkZC1jb250ZW50LWFuZC1jb21tZW50Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0ZGNjZmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTAwL2FkZC1jb250ZW50LWFuZC1jb21tZW50CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCitlY2hvICJjb21taXQgbWVzc2FnZSIgPj4gIiQxIgorZWNobyAiIyBjb21tZW50IiA+PiAiJDEiCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEvdC90NzUwMC9hZGQtc2lnbmVkLW9mZiBiL3QvdDc1MDAvYWRkLXNpZ25lZC1vZmYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTFkODU2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDAvYWRkLXNpZ25lZC1vZmYKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKK2VjaG8gIlNpZ25lZC1vZmYtYnk6IGZvbyA8YmFyQGZyb3R6PiIgPj4gIiQxIgorZXhpdCAwCmRpZmYgLS1naXQgYS90L3Q3NTAwL2FkZC13aGl0ZXNwYWNlZC1jb250ZW50IGIvdC90NzUwMC9hZGQtd2hpdGVzcGFjZWQtY29udGVudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jY2YwN2M2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwMC9hZGQtd2hpdGVzcGFjZWQtY29udGVudApAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorc2VkIC1lICdzL3wkLy8nID4+IiQxIiA8PFxFT0YKKworIHwKK2NvbW1pdCBtZXNzYWdlICAJIHwKKworRU9GCitleGl0IDAKZGlmZiAtLWdpdCBhL3QvdDc1MDAvZWRpdC1jb250ZW50IGIvdC90NzUwMC9lZGl0LWNvbnRlbnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDhkYjlmZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDAvZWRpdC1jb250ZW50CkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCitzZWQgLWUgInMvaW50ZXJtZWRpYXRlL2VkaXRlZC9nIiA8IiQxIiA+IiQxLSIKK212ICIkMS0iICIkMSIKK2V4aXQgMApkaWZmIC0tZ2l0IGEvdC90NzUwMS1jb21taXQtYmFzaWMtZnVuY3Rpb25hbGl0eS5zaCBiL3QvdDc1MDEtY29tbWl0LWJhc2ljLWZ1bmN0aW9uYWxpdHkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTEwYjRiZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDEtY29tbWl0LWJhc2ljLWZ1bmN0aW9uYWxpdHkuc2gKQEAgLTAsMCArMSw3MTYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgS3Jpc3RpYW4gSMO4Z3NiZXJnIDxrcmhAcmVkaGF0LmNvbT4KKyMKKworIyBGSVhNRTogVGVzdCB0aGUgdmFyaW91cyBpbmRleCB1c2FnZXMsIC1pIGFuZCAtbywgdGVzdCByZWZsb2csCisjIHNpZ25vZmYKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNvbW1pdCcKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZL2RpZmYtbGliLnNoIgorCithdXRob3I9J1RoZSBSZWFsIEF1dGhvciA8c29tZWd1eUBoaXMuZW1haWwub3JnPicKKwordGVzdF90aWNrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWwgc3RhdHVzJyAnCisJZWNobyBib25nbyBib25nbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBzdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIk5vIGNvbW1pdHMgeWV0IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBpbml0aWFsIGFtZW5kJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWFtZW5kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBpbml0aWFsIGNvbW1pdCcgJworCWdpdCBjb21taXQgLW0gaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctbSBhbmQgLUYgZG8gbm90IG1peCcgJworCWdpdCBjaGVja291dCBIRUFEIGZpbGUgJiYgZWNobyA+PmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBmb28gLW0gYmFyIC1GIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLW0gYW5kIC1DIGRvIG5vdCBtaXgnICcKKwlnaXQgY2hlY2tvdXQgSEVBRCBmaWxlICYmIGVjaG8gPj5maWxlICYmIGdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLUMgSEVBRCAtbSBpbGxlZ2FsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGhzIGFuZCAtYSBkbyBub3QgbWl4JyAnCisJZWNobyBLaW5nIG9mIHRoZSBib25nbyA+ZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gZm9vIC1hIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjYW4gdXNlIHBhdGhzIHdpdGggLS1pbnRlcmFjdGl2ZScgJworCWVjaG8gYm9uZy1vLWJvbmcgPmZpbGUgJiYKKwkjIDI6IHVwZGF0ZSwgMTpzdCBwYXRoLCB0aGF0IGlzIGFsbCwgNzogcXVpdAorCXRlc3Rfd3JpdGVfbGluZXMgMiAxICIiIDcgfAorCWdpdCBjb21taXQgLW0gZm9vIC0taW50ZXJhY3RpdmUgZmlsZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlZCBmaWxlcyBhbmQgcmVsYXRpdmUgcGF0aHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBmb28iICYmCisJZ2l0IGluaXQgZm9vICYmCisJPmZvby9mb28udHh0ICYmCisJZ2l0IC1DIGZvbyBhZGQgZm9vLnR4dCAmJgorCWdpdCAtQyBmb28gY29tbWl0IC1tIGZpcnN0ICYmCisJZ2l0IC1DIGZvbyBybSBmb28udHh0ICYmCisKKwlta2RpciAtcCBmb28vYmFyICYmCisJZ2l0IC1DIGZvby9iYXIgY29tbWl0IC1tIHNlY29uZCAuLi9mb28udHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIGludmFsaWQgY29tbWl0IHdpdGggLUMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLUMgYm9ndXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90aGluZyB0byBjb21taXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZHJ5LXJ1biBmYWlscyB3aXRoIG5vdGhpbmcgdG8gY29tbWl0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBpbml0aWFsIC0tZHJ5LXJ1bgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3J0IGZhaWxzIHdpdGggbm90aGluZyB0byBjb21taXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIGluaXRpYWwgLS1zaG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBvcmNlbGFpbiBmYWlscyB3aXRoIG5vdGhpbmcgdG8gY29tbWl0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBpbml0aWFsIC0tcG9yY2VsYWluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbG9uZyBmYWlscyB3aXRoIG5vdGhpbmcgdG8gY29tbWl0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBpbml0aWFsIC0tbG9uZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogbm9uLWluaXRpYWwgY29tbWl0JyAnCisJZWNobyBib25nbyBib25nbyBib25nbyA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gbmV4dCAtYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRyeS1ydW4gd2l0aCBzdHVmZiB0byBjb21taXQgcmV0dXJucyBvaycgJworCWVjaG8gYm9uZ28gYm9uZ28gYm9uZ28gPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBuZXh0IC1hIC0tZHJ5LXJ1bgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3J0IHdpdGggc3R1ZmYgdG8gY29tbWl0IHJldHVybnMgb2snICcKKwllY2hvIGJvbmdvIGJvbmdvIGJvbmdvID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gbmV4dCAtYSAtLXNob3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcG9yY2VsYWluIHdpdGggc3R1ZmYgdG8gY29tbWl0IHJldHVybnMgb2snICcKKwllY2hvIGJvbmdvIGJvbmdvIGJvbmdvID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gbmV4dCAtYSAtLXBvcmNlbGFpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxvbmcgd2l0aCBzdHVmZiB0byBjb21taXQgcmV0dXJucyBvaycgJworCWVjaG8gYm9uZ28gYm9uZ28gYm9uZ28gPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBuZXh0IC1hIC0tbG9uZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSBmcm9tIG5vbi1leGlzdGluZyBmaWxlJyAnCisJZWNobyBtb3JlIGJvbmdvOiBib25nbyBib25nbyBib25nbyBib25nbyA+ZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLUYgZ2FoIC1hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGNvbW1pdCBtZXNzYWdlJyAnCisJIyBFbXB0eSBleGNlcHQgc3RyYXkgdGFicyBhbmQgc3BhY2VzIG9uIGEgZmV3IGxpbmVzLgorCXNlZCAtZSAicy9ALy9nIiA+bXNnIDw8LVxFT0YgJiYKKwkJQAkJQAorCQlAQAorCQlAICBACisJCUBTaWduZWQtb2ZmLWJ5OiBodWxhQAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLUYgbXNnIC1hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RlbXBsYXRlICJlbXB0eW5lc3MiIGNoZWNrIGRvZXMgbm90IGtpY2sgaW4gd2l0aCAtRicgJworCWdpdCBjaGVja291dCBIRUFEIGZpbGUgJiYgZWNobyA+PmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtdCBmaWxlIC1GIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVtcGxhdGUgImVtcHR5bmVzcyIgY2hlY2snICcKKwlnaXQgY2hlY2tvdXQgSEVBRCBmaWxlICYmIGVjaG8gPj5maWxlICYmIGdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLXQgZmlsZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImRpZCBub3QgZWRpdCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBjb21taXQgbWVzc2FnZSBmcm9tIGZpbGUnICcKKwlnaXQgY2hlY2tvdXQgSEVBRCBmaWxlICYmIGVjaG8gPj5maWxlICYmIGdpdCBhZGQgZmlsZSAmJgorCWVjaG8gdGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UsIGNvbWluZyBmcm9tIGEgZmlsZSA+bXNnICYmCisJZ2l0IGNvbW1pdCAtRiBtc2cgLWEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1lbmQgY29tbWl0JyAnCisJY2F0ID5lZGl0b3IgPDwtXEVPRiAmJgorCSMhL2Jpbi9zaAorCXNlZCAtZSAicy9hIGZpbGUvYW4gYW1lbmQgY29tbWl0L2ciIDwiJDEiID4iJDEtIgorCW12ICIkMS0iICIkMSIKKwlFT0YKKwljaG1vZCA3NTUgZWRpdG9yICYmCisJRURJVE9SPS4vZWRpdG9yIGdpdCBjb21taXQgLS1hbWVuZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCAtLW9ubHkgaWdub3JlcyBzdGFnZWQgY29udGVudHMnICcKKwljcCBmaWxlIGZpbGUuZXhwZWN0ICYmCisJZWNobyBjaGFuZ2VkID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLWVkaXQgLS1hbWVuZCAtLW9ubHkgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEOmZpbGUgPmZpbGUuYWN0dWFsICYmCisJdGVzdF9jbXAgZmlsZS5leHBlY3QgZmlsZS5hY3R1YWwgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdy1lbXB0eSAtLW9ubHkgaWdub3JlcyBzdGFnZWQgY29udGVudHMnICcKKwllY2hvIGNoYW5nZWQtYWdhaW4gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1vbmx5IC1tICJlbXB0eSIgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEOmZpbGUgPmZpbGUuYWN0dWFsICYmCisJdGVzdF9jbXAgZmlsZS5leHBlY3QgZmlsZS5hY3R1YWwgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZWRpdG9yJyAnCisJY2F0ID5lZGl0b3IgPDwtXEVPRiAmJgorCSMhL2Jpbi9zaAorCXNlZCAtZSAicy91bmFtZW5kZWQvYW1lbmRlZC9nIiA8IiQxIiA+IiQxLSIKKwltdiAiJDEtIiAiJDEiCisJRU9GCisJY2htb2QgNzU1IGVkaXRvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCB3aXRob3V0IGxhdW5jaGluZyBlZGl0b3InICcKKwllY2hvIHVuYW1lbmRlZCA+ZXhwZWN0ICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJ1bmFtZW5kZWQiICYmCisJZWNobyBuZWVkcyBtb3JlIGJvbmdvID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJRURJVE9SPS4vZWRpdG9yIGdpdCBjb21taXQgLS1uby1lZGl0IC0tYW1lbmQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEIC0tIGZpbGUgJiYKKwlnaXQgZGlmZi10cmVlIC1zIC0tZm9ybWF0PSVzIEhFQUQgPm1zZyAmJgorCXRlc3RfY21wIGV4cGVjdCBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hbWVuZCAtLWVkaXQnICcKKwllY2hvIGFtZW5kZWQgPmV4cGVjdCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAidW5hbWVuZGVkIiAmJgorCWVjaG8gYm9uZ28gYWdhaW4gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlFRElUT1I9Li9lZGl0b3IgZ2l0IGNvbW1pdCAtLWVkaXQgLS1hbWVuZCAmJgorCWdpdCBkaWZmLXRyZWUgLXMgLS1mb3JtYXQ9JXMgSEVBRCA+bXNnICYmCisJdGVzdF9jbXAgZXhwZWN0IG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFtZW5kIC0tZWRpdCBvZiBlbXB0eSBtZXNzYWdlJyAnCisJY2F0ID5yZXBsYWNlIDw8LVxFT0YgJiYKKwkjIS9iaW4vc2gKKwllY2hvICJhbWVuZGVkIiA+IiQxIgorCUVPRgorCWNobW9kIDc1NSByZXBsYWNlICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAtbSAiIiAmJgorCWVjaG8gbW9yZSBib25nbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCUVESVRPUj0uL3JlcGxhY2UgZ2l0IGNvbW1pdCAtLWVkaXQgLS1hbWVuZCAmJgorCWdpdCBkaWZmLXRyZWUgLXMgLS1mb3JtYXQ9JXMgSEVBRCA+bXNnICYmCisJLi9yZXBsYWNlIGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hbWVuZCB0byBzZXQgbWVzc2FnZSB0byBlbXB0eScgJworCWVjaG8gYmF0YSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gInVuYW1lbmRlZCIgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC1tICIiICYmCisJZ2l0IGRpZmYtdHJlZSAtcyAtLWZvcm1hdD0lcyBIRUFEID5tc2cgJiYKKwllY2hvICIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYW1lbmQgdG8gc2V0IGVtcHR5IG1lc3NhZ2UgbmVlZHMgLS1hbGxvdy1lbXB0eS1tZXNzYWdlJyAnCisJZWNobyBjb25nYSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gInVuYW1lbmRlZCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tYW1lbmQgLW0gIiIgJiYKKwlnaXQgZGlmZi10cmVlIC1zIC0tZm9ybWF0PSVzIEhFQUQgPm1zZyAmJgorCWVjaG8gInVuYW1lbmRlZCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLW0gLS1lZGl0JyAnCisJZWNobyBhbWVuZGVkID5leHBlY3QgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYnVmZmVyICYmCisJZWNobyBib25nbyBib25nbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCUVESVRPUj0uL2VkaXRvciBnaXQgY29tbWl0IC1tIHVuYW1lbmRlZCAtLWVkaXQgJiYKKwlnaXQgZGlmZi10cmVlIC1zICAtLWZvcm1hdD0lcyBIRUFEID5tc2cgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1tIGFuZCAtRiBkbyBub3QgbWl4JyAnCisJZWNobyBlbm91Z2ggd2l0aCB0aGUgYm9uZ29zID5maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtRiBtc2cgLW0gYW1lbmRpbmcgLgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyBtZXNzYWdlIGZyb20gb3RoZXIgY29tbWl0JyAnCisJZ2l0IGNvbW1pdCAtQyBIRUFEXiAuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VkaXRpbmcgbWVzc2FnZSBmcm9tIG90aGVyIGNvbW1pdCcgJworCWNhdCA+ZWRpdG9yIDw8LVxFT0YgJiYKKwkjIS9iaW4vc2gKKwlzZWQgLWUgInMvYW1lbmQvb2xkZXIvZyIgIDwiJDEiID4iJDEtIgorCW12ICIkMS0iICIkMSIKKwlFT0YKKwljaG1vZCA3NTUgZWRpdG9yICYmCisJZWNobyBodWxhIGh1bGEgPmZpbGUgJiYKKwlFRElUT1I9Li9lZGl0b3IgZ2l0IGNvbW1pdCAtYyBIRUFEXiAtYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXNzYWdlIGZyb20gc3RkaW4nICcKKwllY2hvIHNpbGx5IG5ldyBjb250ZW50cyA+ZmlsZSAmJgorCWVjaG8gY29tbWl0IG1lc3NhZ2UgZnJvbSBzdGRpbiB8CisJZ2l0IGNvbW1pdCAtRiAtIC1hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJyaWRpbmcgYXV0aG9yIGZyb20gY29tbWFuZCBsaW5lJyAnCisJZWNobyBnYWsgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGF1dGhvciBcCisJCS0tYXV0aG9yICJSdWJiZXIgRHVjayA8cmR1Y2tAY29udm95Lm9yZz4iIC1hID5vdXRwdXQgMj4mMSAmJgorCWdyZXAgUnViYmVyLkR1Y2sgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnaW50ZXJhY3RpdmUgYWRkJyAnCisJZWNobyA3IHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWludGVyYWN0aXZlID5vdXQgJiYKKwlncmVwICJXaGF0IG5vdyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAiY29tbWl0IC0taW50ZXJhY3RpdmUgZG9lc24ndCBjaGFuZ2UgaW5kZXggaWYgZWRpdG9yIGFib3J0cyIgJworCWVjaG8gem9vID5maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1leGl0LWNvZGUgPmRpZmYxICYmCisJdGVzdF93cml0ZV9saW5lcyB1ICIqIiBxIHwKKwkoCisJCUVESVRPUj06ICYmCisJCWV4cG9ydCBFRElUT1IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWludGVyYWN0aXZlCisJKSAmJgorCWdpdCBkaWZmID5kaWZmMiAmJgorCWNvbXBhcmVfZGlmZl9wYXRjaCBkaWZmMSBkaWZmMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0b3Igbm90IGludm9rZWQgaWYgLUYgaXMgZ2l2ZW4nICcKKwljYXQgPmVkaXRvciA8PC1cRU9GICYmCisJIyEvYmluL3NoCisJc2VkIC1lIHMvZ29vZC9iYWQvZyA8IiQxIiA+IiQxLSIKKwltdiAiJDEtIiAiJDEiCisJRU9GCisJY2htb2QgNzU1IGVkaXRvciAmJgorCisJZWNobyBBIGdvb2QgY29tbWl0IG1lc3NhZ2UuID5tc2cgJiYKKwllY2hvIG1vbyA+ZmlsZSAmJgorCisJRURJVE9SPS4vZWRpdG9yIGdpdCBjb21taXQgLWEgLUYgbXNnICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzID5zdWJqZWN0ICYmCisJZ3JlcCAtcSBnb29kIHN1YmplY3QgJiYKKworCWVjaG8gcXVhY2sgPmZpbGUgJiYKKwllY2hvIEFub3RoZXIgZ29vZCBtZXNzYWdlLiB8CisJRURJVE9SPS4vZWRpdG9yIGdpdCBjb21taXQgLWEgLUYgLSAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolcyA+c3ViamVjdCAmJgorCWdyZXAgLXEgZ29vZCBzdWJqZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgY29tbWl0IHRoYXQgaW52b2x2ZXMgcmVtb3ZhbCAoMSknICcKKworCWdpdCBybSAtLWNhY2hlZCBmaWxlICYmCisJbXYgZmlsZSBlbGlmICYmCisJZ2l0IGFkZCBlbGlmICYmCisJZ2l0IGNvbW1pdCAtbSAiUGFydGlhbDogYWRkIGVsaWYiIGVsaWYgJiYKKwlnaXQgZGlmZi10cmVlIC0tbmFtZS1zdGF0dXMgSEVBRF4gSEVBRCA+Y3VycmVudCAmJgorCWVjaG8gIkEJZWxpZiIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgY29tbWl0IHRoYXQgaW52b2x2ZXMgcmVtb3ZhbCAoMiknICcKKworCWdpdCBjb21taXQgLW0gIlBhcnRpYWw6IHJlbW92ZSBmaWxlIiBmaWxlICYmCisJZ2l0IGRpZmYtdHJlZSAtLW5hbWUtc3RhdHVzIEhFQUReIEhFQUQgPmN1cnJlbnQgJiYKKwllY2hvICJECWZpbGUiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIGNvbW1pdCB0aGF0IGludm9sdmVzIHJlbW92YWwgKDMpJyAnCisKKwlnaXQgcm0gLS1jYWNoZWQgZWxpZiAmJgorCWVjaG8gZWxpZiA+ZWxpZiAmJgorCWdpdCBjb21taXQgLW0gIlBhcnRpYWw6IG1vZGlmeSBlbGlmIiBlbGlmICYmCisJZ2l0IGRpZmYtdHJlZSAtLW5hbWUtc3RhdHVzIEhFQUReIEhFQUQgPmN1cnJlbnQgJiYKKwllY2hvICJNCWVsaWYiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCBjb21taXQgdG8gZml4IGF1dGhvcicgJworCisJb2xkdGljaz0kR0lUX0FVVEhPUl9EQVRFICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID5jb21taXQgJiYKKwlzZWQgLWUgInMvYXV0aG9yLiovYXV0aG9yICRhdXRob3IgJG9sZHRpY2svIiBcCisJCS1lICJzL15cKGNvbW1pdHRlci4qPiBcKS4qJC9cMSRHSVRfQ09NTUlUVEVSX0RBVEUvIiBcCisJCWNvbW1pdCA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1hdXRob3I9IiRhdXRob3IiICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1lbmQgY29tbWl0IHRvIGZpeCBkYXRlJyAnCisKKwl0ZXN0X3RpY2sgJiYKKwluZXd0aWNrPSRHSVRfQVVUSE9SX0RBVEUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPmNvbW1pdCAmJgorCXNlZCAtZSAicy9hdXRob3IuKi9hdXRob3IgJGF1dGhvciAkbmV3dGljay8iIFwKKwkJLWUgInMvXlwoY29tbWl0dGVyLio+IFwpLiokL1wxJEdJVF9DT01NSVRURVJfREFURS8iIFwKKwkJY29tbWl0ID5leHBlY3RlZCAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtLWRhdGU9IiRuZXd0aWNrIiAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZW50aW9ucyBmb3JjZWQgZGF0ZSBpbiBvdXRwdXQnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1kYXRlPTIwMTAtMDEtMDJUMDM6MDQ6MDUgPm91dHB1dCAmJgorCWdyZXAgIkRhdGU6ICpTYXQgSmFuIDIgMDM6MDQ6MDUgMjAxMCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBjb21wbGFpbnMgYWJvdXQgY29tcGxldGVseSBib2d1cyBkYXRlcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1hbWVuZCAtLWRhdGU9c2V2ZW50ZWVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLWRhdGUgYWxsb3dzIGFwcHJveGlkYXRlJyAnCisJZ2l0IGNvbW1pdCAtLWFtZW5kIFwKKwkJLS1kYXRlPSJtaWRuaWdodCB0aGUgMTJ0aCBvZiBvY3RvYmVyLCBhbm5vIGRvbWluaSAxOTc5IiAmJgorCWVjaG8gIkZyaSBPY3QgMTIgMDA6MDA6MDAgMTk3OSArMDAwMCIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JWFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ24gb2ZmICgxKScgJworCisJZWNobyAxID5wb3NpdGl2ZSAmJgorCWdpdCBhZGQgcG9zaXRpdmUgJiYKKwlnaXQgY29tbWl0IC1zIC1tICJ0aGFuayB5b3UiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiBjb21taXQgPmFjdHVhbCAmJgorCSgKKwkJZWNobyB0aGFuayB5b3UgJiYKKwkJZWNobyAmJgorCQlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgPmlkZW50ICYmCisJCXNlZCAtZSAicy8+LiovPi8iIC1lICJzL14vU2lnbmVkLW9mZi1ieTogLyIgaWRlbnQKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ24gb2ZmICgyKScgJworCisJZWNobyAyID5wb3NpdGl2ZSAmJgorCWdpdCBhZGQgcG9zaXRpdmUgJiYKKwlleGlzdGluZz0iU2lnbmVkLW9mZi1ieTogV2F0Y2ggVGhpcyA8d2F0Y2h0aGlzQGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgY29tbWl0IC1zIC1tICJ0aGFuayB5b3UKKworJGV4aXN0aW5nIiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+Y29tbWl0ICYmCisJc2VkIC1lICIxLC9eXCQvZCIgY29tbWl0ID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gdGhhbmsgeW91ICYmCisJCWVjaG8gJiYKKwkJZWNobyAkZXhpc3RpbmcgJiYKKwkJZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID5pZGVudCAmJgorCQlzZWQgLWUgInMvPi4qLz4vIiAtZSAicy9eL1NpZ25lZC1vZmYtYnk6IC8iIGlkZW50CisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmIGdhcCcgJworCisJZWNobyAzID5wb3NpdGl2ZSAmJgorCWdpdCBhZGQgcG9zaXRpdmUgJiYKKwlhbHQ9IkFsdC1SRkMtODIyLUhlYWRlcjogVmFsdWUiICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAid2VsY29tZQorCiskYWx0IiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+Y29tbWl0ICYmCisJc2VkIC1lICIxLC9eXCQvZCIgY29tbWl0ID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gd2VsY29tZSAmJgorCQllY2hvICYmCisJCWVjaG8gJGFsdCAmJgorCQlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgPmlkZW50ICYmCisJCXNlZCAtZSAicy8+LiovPi8iIC1lICJzL14vU2lnbmVkLW9mZi1ieTogLyIgaWRlbnQKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmIGdhcCAyJyAnCisKKwllY2hvIDQgPnBvc2l0aXZlICYmCisJZ2l0IGFkZCBwb3NpdGl2ZSAmJgorCWFsdD0iZml4ZWQ6IDM0IiAmJgorCWdpdCBjb21taXQgLXMgLW0gIndlbGNvbWUKKworV2UgaGF2ZSBub3cKKyRhbHQiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiBjb21taXQgPmFjdHVhbCAmJgorCSgKKwkJZWNobyB3ZWxjb21lICYmCisJCWVjaG8gJiYKKwkJZWNobyBXZSBoYXZlIG5vdyAmJgorCQllY2hvICRhbHQgJiYKKwkJZWNobyAmJgorCQlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgPmlkZW50ICYmCisJCXNlZCAtZSAicy8+LiovPi8iIC1lICJzL14vU2lnbmVkLW9mZi1ieTogLyIgaWRlbnQKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmIHJlc3BlY3RzIHRyYWlsZXIgY29uZmlnJyAnCisKKwllY2hvIDUgPnBvc2l0aXZlICYmCisJZ2l0IGFkZCBwb3NpdGl2ZSAmJgorCWdpdCBjb21taXQgLXMgLW0gInN1YmplY3QKKworbm9uLXRyYWlsZXIgbGluZQorTXlmb290ZXI6IHgiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiBjb21taXQgPmFjdHVhbCAmJgorCSgKKwkJZWNobyBzdWJqZWN0ICYmCisJCWVjaG8gJiYKKwkJZWNobyBub24tdHJhaWxlciBsaW5lICYmCisJCWVjaG8gTXlmb290ZXI6IHggJiYKKwkJZWNobyAmJgorCQllY2hvICJTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCWVjaG8gNiA+cG9zaXRpdmUgJiYKKwlnaXQgYWRkIHBvc2l0aXZlICYmCisJZ2l0IC1jICJ0cmFpbGVyLk15Zm9vdGVyLmlmZXhpc3RzPWFkZCIgY29tbWl0IC1zIC1tICJzdWJqZWN0CisKK25vbi10cmFpbGVyIGxpbmUKK015Zm9vdGVyOiB4IiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+Y29tbWl0ICYmCisJc2VkIC1lICIxLC9eXCQvZCIgY29tbWl0ID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gc3ViamVjdCAmJgorCQllY2hvICYmCisJCWVjaG8gbm9uLXRyYWlsZXIgbGluZSAmJgorCQllY2hvIE15Zm9vdGVyOiB4ICYmCisJCWVjaG8gIlNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmIG5vdCBjb25mdXNlZCBieSAtLS0nICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCQlzdWJqZWN0CisKKwkJYm9keQorCQktLS0KKwkJdGhlc2UgZGFzaGVzIGNvbmZ1c2UgdGhlIHBhcnNlciEKKworCQlTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KKwlFT0YKKwkjIHNob3VsZCBiZSBhIG5vb3AsIHNpbmNlIHdlIGFscmVhZHkgc2lnbmVkCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tc2lnbm9mZiAtRiBleHBlY3RlZCAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgLW0nICcKKworCT5uZWdhdGl2ZSAmJgorCWdpdCBhZGQgbmVnYXRpdmUgJiYKKwlnaXQgY29tbWl0IC1tICJvbmUiIC1tICJ0d28iIC1tICJ0aHJlZSIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdCAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIGNvbW1pdCA+YWN0dWFsICYmCisJKAorCQllY2hvIG9uZSAmJgorCQllY2hvICYmCisJCWVjaG8gdHdvICYmCisJCWVjaG8gJiYKKwkJZWNobyB0aHJlZQorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1lbmQgY29tbWl0IHRvIGZpeCBhdXRob3InICcKKworCW9sZHRpY2s9JEdJVF9BVVRIT1JfREFURSAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+Y29tbWl0ICYmCisJc2VkIC1lICJzL2F1dGhvci4qL2F1dGhvciAkYXV0aG9yICRvbGR0aWNrLyIgXAorCQktZSAicy9eXChjb21taXR0ZXIuKj4gXCkuKiQvXDEkR0lUX0NPTU1JVFRFUl9EQVRFLyIgXAorCQljb21taXQgPmV4cGVjdGVkICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tYXV0aG9yPSIkYXV0aG9yIiAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQgPGZpbGU+IHdpdGggZGlydHkgaW5kZXgnICcKKwllY2hvIHRhY29jYXQgPmVsaWYgJiYKKwllY2hvIHRlaGx1bHogPmNoeiAmJgorCWdpdCBhZGQgY2h6ICYmCisJZ2l0IGNvbW1pdCBlbGlmIC1tICJ0YWNvY2F0IGlzIGEgcGFsaW5kcm9tZSIgJiYKKwlnaXQgc2hvdyAtLXN0YXQgPnN0YXQgJiYKKwlncmVwIGVsaWYgc3RhdCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5kaWZmICYmCisJZ3JlcCBjaHogZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIHRyZWUgKHNpbmdsZSBwYXJlbnQpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBlbXB0eQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUgdHJlZSAoc2luZ2xlIHBhcmVudCkgLS1hbGxvdy1lbXB0eScgJworCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJmb3JjZWQgZW1wdHkiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQgJiYKKwlncmVwIGZvcmNlZCBjb21taXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIHRyZWUgKG1lcmdlIGFuZCBhbWVuZCBtZXJnZSknICcKKworCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUReICYmCisJZWNobyB6ZXJvID56ZXJvICYmCisJZ2l0IGFkZCB6ZXJvICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIHplcm8iICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJZ2l0IG1lcmdlIC1zIG91cnMgc2lkZSAtbSAiZW1wdHkgb2siICYmCisJZ2l0IGRpZmYgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJlbXB0eSByZWFsbHkgb2siICYmCisJZ2l0IGRpZmYgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtZW5kIHVzaW5nIHRoZSBtZXNzYWdlIGZyb20gYW5vdGhlciBjb21taXQnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIm9sZCBjb21taXQiICYmCisJb2xkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAibmV3IGNvbW1pdCIgJiYKKwluZXc9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tYW1lbmQgLUMgIiRvbGQiICYmCisJZ2l0IHNob3cgLS1wcmV0dHk9ImZvcm1hdDolYWQgJXMiICIkb2xkIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgc2hvdyAtLXByZXR0eT0iZm9ybWF0OiVhZCAlcyIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1lbmQgdXNpbmcgdGhlIG1lc3NhZ2UgZnJvbSBhIGNvbW1pdCBuYW1lZCB3aXRoIHRhZycgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAib2xkIGNvbW1pdCIgJiYKKwlvbGQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IHRhZyAtYSAtbSAidGFnIG9uIG9sZCIgdGFnZ2VkLW9sZCBIRUFEICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJuZXcgY29tbWl0IiAmJgorCW5ldz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1hbWVuZCAtQyB0YWdnZWQtb2xkICYmCisJZ2l0IHNob3cgLS1wcmV0dHk9ImZvcm1hdDolYWQgJXMiICIkb2xkIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgc2hvdyAtLXByZXR0eT0iZm9ybWF0OiVhZCAlcyIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1lbmQgY2FuIGNvcHkgbm90ZXMnICcKKworCWdpdCBjb25maWcgbm90ZXMucmV3cml0ZS5hbWVuZCB0cnVlICYmCisJZ2l0IGNvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCisJdGVzdF9jb21taXQgZm9vICYmCisJZ2l0IG5vdGVzIGFkZCAtbSJhIG5vdGUiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tIm5ldyBmb28iICYmCisJdGVzdCAiJChnaXQgbm90ZXMgc2hvdykiID0gImEgbm90ZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgYSBmaWxlIHdob3NlIG5hbWUgaXMgYSBkYXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWZvciBpIGluIDEgMiAzIDQgNQorCWRvCisJCWVjaG8gJGkKKwlkb25lID4uLy0gJiYKKwlnaXQgYWRkIC4vLSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImFkZCBkYXNoIiA+b3V0cHV0IDwvZGV2L251bGwgJiYKKwl0ZXN0X2kxOG5ncmVwICIgY2hhbmdlZCwgNSBpbnNlcnRpb25zIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vbmx5IHdvcmtzIG9uIHRvLWJlLWJvcm4gYnJhbmNoJyAnCisJIyBUaGlzIHRlc3QgcmVsaWVzIG9uIGhhdmluZyBzb21ldGhpbmcgaW4gdGhlIGluZGV4LCBhcyBpdAorCSMgd291bGQgbm90IG90aGVyd2lzZSBhY3R1YWxseSBwcm92ZSBtdWNoLiAgU28gY2hlY2sgdGhpcy4KKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcykiICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG9ycGhhbiAmJgorCWVjaG8gZm9vID5uZXdmaWxlICYmCisJZ2l0IGFkZCBuZXdmaWxlICYmCisJZ2l0IGNvbW1pdCAtLW9ubHkgbmV3ZmlsZSAtbSItLW9ubHkgb24gdW5ib3JuIGJyYW5jaCIgJiYKKwllY2hvIG5ld2ZpbGUgPmV4cGVjdGVkICYmCisJZ2l0IGxzLXRyZWUgLXIgLS1uYW1lLW9ubHkgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZHJ5LXJ1biB3aXRoIGNvbmZsaWN0cyBmaXhlZCBmcm9tIGEgbWVyZ2UnICcKKwkjIHNldHVwIHR3byBicmFuY2hlcyB3aXRoIGNvbmZsaWN0aW5nIGluZm9ybWF0aW9uCisJIyBpbiB0aGUgc2FtZSBmaWxlLCByZXNvbHZlIHRoZSBjb25mbGljdCwKKwkjIGNhbGwgY29tbWl0IHdpdGggLS1kcnktcnVuCisJZWNobyAiSW5pdGlhbCBjb250ZW50cywgdW5pbXBvcnRhbnQiID50ZXN0LWZpbGUgJiYKKwlnaXQgYWRkIHRlc3QtZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0IiAmJgorCWVjaG8gImNvbW1pdC0xLXN0YXRlIiA+dGVzdC1maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IDEiIC1pIHRlc3QtZmlsZSAmJgorCWdpdCB0YWcgY29tbWl0LTEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoLTIgSEVBRF4xICYmCisJZWNobyAiY29tbWl0LTItc3RhdGUiID50ZXN0LWZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJjb21taXQgMiIgLWkgdGVzdC1maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tY29tbWl0IGNvbW1pdC0xICYmCisJZWNobyAiY29tbWl0LTItc3RhdGUiID50ZXN0LWZpbGUgJiYKKwlnaXQgYWRkIHRlc3QtZmlsZSAmJgorCWdpdCBjb21taXQgLS1kcnktcnVuICYmCisJZ2l0IGNvbW1pdCAtbSAiY29uZmxpY3RzIGZpeGVkIGZyb20gbWVyZ2UuIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRyeS1ydW4gLS1zaG9ydCcgJworCT50ZXN0LWZpbGUgJiYKKwlnaXQgYWRkIHRlc3QtZmlsZSAmJgorCWdpdCBjb21taXQgLS1kcnktcnVuIC0tc2hvcnQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTAyLWNvbW1pdC1wb3JjZWxhaW4uc2ggYi90L3Q3NTAyLWNvbW1pdC1wb3JjZWxhaW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTRjOTJlNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDItY29tbWl0LXBvcmNlbGFpbi5zaApAQCAtMCwwICsxLDYyOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjb21taXQgcG9yY2VsYWluLWlzaCcKKworLiAuL3Rlc3QtbGliLnNoCisKK2NvbW1pdF9tc2dfaXMgKCkgeworCWV4cGVjdD1jb21taXRfbXNnX2lzLmV4cGVjdAorCWFjdHVhbD1jb21taXRfbXNnX2lzLmFjdHVhbAorCisJcHJpbnRmICIlcyIgIiQoZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JXMlYiAtMSkiID4kYWN0dWFsICYmCisJcHJpbnRmICIlcyIgIiQxIiA+JGV4cGVjdCAmJgorCXRlc3RfaTE4bmNtcCAkZXhwZWN0ICRhY3R1YWwKK30KKworIyBBcmd1bWVudHM6IFs8cHJlZml4XSBbPGNvbW1pdCBtZXNzYWdlPl0gWzxjb21taXQgb3B0aW9ucz5dCitjaGVja19zdW1tYXJ5X29uZWxpbmUoKSB7CisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAkezMrIiQzIn0gLW0gIiQyIiA+cmF3ICYmCisJaGVhZCAtbiAxIHJhdyA+YWN0ICYmCisKKwkjIGJyYW5jaCBuYW1lCisJU1VNTUFSWV9QUkVGSVg9IiQoZ2l0IG5hbWUtcmV2IC0tbmFtZS1vbmx5IEhFQUQpIiAmJgorCisJIyBhcHBlbmQgdGhlICJzcGVjaWFsIiBwcmVmaXgsIGxpa2UgInJvb3QtY29tbWl0IiwgImRldGFjaGVkIEhFQUQiCisJaWYgdGVzdCAtbiAiJDEiCisJdGhlbgorCQlTVU1NQVJZX1BSRUZJWD0iJFNVTU1BUllfUFJFRklYICgkMSkiCisJZmkKKworCSMgYWJicmV2IFNIQS0xCisJU1VNTUFSWV9QT1NURklYPSIkKGdpdCBsb2cgLTEgLS1wcmV0dHk9J2Zvcm1hdDolaCcpIgorCWVjaG8gIlskU1VNTUFSWV9QUkVGSVggJFNVTU1BUllfUE9TVEZJWF0gJDIiID5leHAgJiYKKworCXRlc3RfaTE4bmNtcCBleHAgYWN0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291dHB1dCBzdW1tYXJ5IGZvcm1hdCcgJworCisJZWNobyBuZXcgPmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWNoZWNrX3N1bW1hcnlfb25lbGluZSAicm9vdC1jb21taXQiICJpbml0aWFsIiAmJgorCisJZWNobyBjaGFuZ2UgPj5maWxlMSAmJgorCWdpdCBhZGQgZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0cHV0IHN1bW1hcnkgZm9ybWF0OiByb290LWNvbW1pdCcgJworCWNoZWNrX3N1bW1hcnlfb25lbGluZSAiIiAiYSBjaGFuZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291dHB1dCBzdW1tYXJ5IGZvcm1hdCBmb3IgY29tbWl0IHdpdGggYW4gZW1wdHkgZGlmZicgJworCisJY2hlY2tfc3VtbWFyeV9vbmVsaW5lICIiICJlbXB0eSIgIi0tYWxsb3ctZW1wdHkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291dHB1dCBzdW1tYXJ5IGZvcm1hdCBmb3IgbWVyZ2VzJyAnCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVjdXJzaXZlLWJhc2UgJiYKKwl0ZXN0X2NvbW1pdCBiYXNlIGZpbGUxICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVjdXJzaXZlLWEgcmVjdXJzaXZlLWJhc2UgJiYKKwl0ZXN0X2NvbW1pdCBjb21taXQtYSBmaWxlMSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHJlY3Vyc2l2ZS1iIHJlY3Vyc2l2ZS1iYXNlICYmCisJdGVzdF9jb21taXQgY29tbWl0LWIgZmlsZTEgJiYKKworCSMgY29uZmxpY3QKKwlnaXQgY2hlY2tvdXQgcmVjdXJzaXZlLWEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgcmVjdXJzaXZlLWIgJiYKKwkjIHJlc29sdmUgdGhlIGNvbmZsaWN0CisJZWNobyBjb21taXQtYSA+ZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJY2hlY2tfc3VtbWFyeV9vbmVsaW5lICIiICJNZXJnZSIKKycKKworb3V0cHV0X3Rlc3RzX2NsZWFudXAoKSB7CisJIyB0aGlzIGlzIG5lZWRlZCBmb3IgImRvIG5vdCBmaXJlIGVkaXRvciBpbiB0aGUgcHJlc2VuY2Ugb2YgY29uZmxpY3RzIgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCSMgdGhpcyBpcyBuZWVkZWQgZm9yIHRoZSAicGFydGlhbCByZW1vdmFsIiB0ZXN0IHRvIHBhc3MKKwlnaXQgcm0gZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tICJjbGVhbnVwIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGUgYmFzaWNzJyAnCisKKwlvdXRwdXRfdGVzdHNfY2xlYW51cCAmJgorCisJZWNobyBkb2luZyBwYXJ0aWFsID4iY29tbWl0IGlzIiAmJgorCW1rZGlyIG5vdCAmJgorCWVjaG8gdmVyeSBtdWNoIGVuY291cmFnZWQgYnV0IHdlIHNob3VsZCA+bm90L2ZvcmJpZCAmJgorCWdpdCBhZGQgImNvbW1pdCBpcyIgbm90ICYmCisJZWNobyB1cGRhdGUgYWRkZWQgImNvbW1pdCBpcyIgZmlsZSA+ImNvbW1pdCBpcyIgJiYKKwllY2hvIGFsc28gdXBkYXRlIGFub3RoZXIgPm5vdC9mb3JiaWQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJpbml0aWFsIHdpdGggLWEiICYmCisKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEOiJjb21taXQgaXMiID5jdXJyZW50LjEgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEOm5vdC9mb3JiaWQgPmN1cnJlbnQuMiAmJgorCisJY21wIGN1cnJlbnQuMSAiY29tbWl0IGlzIiAmJgorCWNtcCBjdXJyZW50LjIgbm90L2ZvcmJpZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwnICcKKworCWVjaG8gYW5vdGhlciA+ImNvbW1pdCBpcyIgJiYKKwllY2hvIGFub3RoZXIgPm5vdC9mb3JiaWQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJwYXJ0aWFsIGNvbW1pdCB0byBoYW5kbGUgYSBmaWxlIiAiY29tbWl0IGlzIiAmJgorCisJY2hhbmdlZD0kKGdpdCBkaWZmLXRyZWUgLS1uYW1lLW9ubHkgSEVBRF4gSEVBRCkgJiYKKwl0ZXN0ICIkY2hhbmdlZCIgPSAiY29tbWl0IGlzIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgbW9kaWZpY2F0aW9uIGluIGEgc3ViZGlyZWN0b3J5JyAnCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJwYXJ0aWFsIGNvbW1pdCB0byBzdWJkaXJlY3RvcnkiIG5vdCAmJgorCisJY2hhbmdlZD0kKGdpdCBkaWZmLXRyZWUgLXIgLS1uYW1lLW9ubHkgSEVBRF4gSEVBRCkgJiYKKwl0ZXN0ICIkY2hhbmdlZCIgPSAibm90L2ZvcmJpZCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIHJlbW92YWwnICcKKworCWdpdCBybSBub3QvZm9yYmlkICYmCisJZ2l0IGNvbW1pdCAtbSAicGFydGlhbCBjb21taXQgdG8gcmVtb3ZlIG5vdC9mb3JiaWQiIG5vdCAmJgorCisJY2hhbmdlZD0kKGdpdCBkaWZmLXRyZWUgLXIgLS1uYW1lLW9ubHkgSEVBRF4gSEVBRCkgJiYKKwl0ZXN0ICIkY2hhbmdlZCIgPSAibm90L2ZvcmJpZCIgJiYKKwlyZW1haW49JChnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEKSAmJgorCXRlc3QgIiRyZW1haW4iID0gImNvbW1pdCBpcyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWduIG9mZicgJworCisJPnBvc2l0aXZlICYmCisJZ2l0IGFkZCBwb3NpdGl2ZSAmJgorCWdpdCBjb21taXQgLXMgLW0gInRoYW5rIHlvdSIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdC5tc2cgJiYKKwlzZWQgLW5lICJzL1NpZ25lZC1vZmYtYnk6IC8vcCIgY29tbWl0Lm1zZyA+YWN0dWFsICYmCisJZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID5pZGVudCAmJgorCXNlZCAtZSAicy8+LiovPi8iIGlkZW50ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIC1tJyAnCisKKwk+bmVnYXRpdmUgJiYKKwlnaXQgYWRkIG5lZ2F0aXZlICYmCisJZ2l0IGNvbW1pdCAtbSAib25lIiAtbSAidHdvIiAtbSAidGhyZWUiICYmCisJYWN0dWFsPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID50bXAgJiYgc2VkIC1lICIxLC9eXCQvZCIgdG1wICYmIHJtIHRtcCkgJiYKKwlleHBlY3RlZD0kKHRlc3Rfd3JpdGVfbGluZXMgIm9uZSIgIiIgInR3byIgIiIgInRocmVlIikgJiYKKwl0ZXN0ICJ6JGFjdHVhbCIgPSAieiRleHBlY3RlZCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJib3NlJyAnCisKKwllY2hvIG1pbnVzID5uZWdhdGl2ZSAmJgorCWdpdCBhZGQgbmVnYXRpdmUgJiYKKwlnaXQgc3RhdHVzIC12ID5yYXcgJiYKKwlzZWQgLW5lICIvXmRpZmYgLS1naXQgL3AiIHJhdyA+YWN0dWFsICYmCisJZWNobyAiZGlmZiAtLWdpdCBhL25lZ2F0aXZlIGIvbmVnYXRpdmUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyYm9zZSByZXNwZWN0cyBkaWZmIGNvbmZpZycgJworCisJdGVzdF9jb25maWcgZGlmZi5ub3ByZWZpeCB0cnVlICYmCisJZ2l0IHN0YXR1cyAtdiA+YWN0dWFsICYmCisJZ3JlcCAiZGlmZiAtLWdpdCBuZWdhdGl2ZSBuZWdhdGl2ZSIgYWN0dWFsCisnCisKK21lc2dfd2l0aF9jb21tZW50X2FuZF9uZXdsaW5lcz0nCisjIHRleHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGZpbGUgd2l0aCBjb21tZW50IGxpbmUgYW5kIHRyYWlsaW5nIG5ld2xpbmVzJyAgJworCXByaW50ZiAiJXMiICIkbWVzZ193aXRoX2NvbW1lbnRfYW5kX25ld2xpbmVzIiA+ZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzICh2ZXJiYXRpbSBvcHRpb24sLXQpJyAnCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwlnaXQgY29tbWl0IC0tY2xlYW51cD12ZXJiYXRpbSAtLW5vLXN0YXR1cyAtdCBleHBlY3QgLWEgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+cmF3ICYmCisJc2VkIC1lICIxLC9eXCQvZCIgcmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZXMgKHZlcmJhdGltIG9wdGlvbiwtRiknICcKKworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCWdpdCBjb21taXQgLS1jbGVhbnVwPXZlcmJhdGltIC1GIGV4cGVjdCAtYSAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID5yYXcgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiByYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlcyAodmVyYmF0aW0gb3B0aW9uLC1tKScgJworCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJZ2l0IGNvbW1pdCAtLWNsZWFudXA9dmVyYmF0aW0gLW0gIiRtZXNnX3dpdGhfY29tbWVudF9hbmRfbmV3bGluZXMiIC1hICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPnJhdyAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIHJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzICh3aGl0ZXNwYWNlIG9wdGlvbiwtRiknICcKKworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgIiIgIiMgdGV4dCIgIiIgPnRleHQgJiYKKwllY2hvICIjIHRleHQiID5leHBlY3QgJiYKKwlnaXQgY29tbWl0IC0tY2xlYW51cD13aGl0ZXNwYWNlIC1GIHRleHQgLWEgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+cmF3ICYmCisJc2VkIC1lICIxLC9eXCQvZCIgcmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZXMgKHNjaXNzb3JzIG9wdGlvbiwtRiwtZSknICcKKworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCWNhdCA+dGV4dCA8PC1cRU9GICYmCisKKwkjIHRvIGJlIGtlcHQKKworCSAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJIyB0byBiZSBrZXB0LCB0b28KKwkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwl0byBiZSByZW1vdmVkCisJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJdG8gYmUgcmVtb3ZlZCwgdG9vCisJRU9GCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIyB0byBiZSBrZXB0CisKKwkgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSMgdG8gYmUga2VwdCwgdG9vCisJRU9GCisJZ2l0IGNvbW1pdCAtLWNsZWFudXA9c2Npc3NvcnMgLWUgLUYgdGV4dCAtYSAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID5yYXcgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiByYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZXMgKHNjaXNzb3JzIG9wdGlvbiwtRiwtZSwgc2Npc3NvcnMgb24gZmlyc3QgbGluZSknICcKKworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCWNhdCA+dGV4dCA8PC1cRU9GICYmCisJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJdG8gYmUgcmVtb3ZlZAorCUVPRgorCWdpdCBjb21taXQgLS1jbGVhbnVwPXNjaXNzb3JzIC1lIC1GIHRleHQgLWEgLS1hbGxvdy1lbXB0eS1tZXNzYWdlICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPnJhdyAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIHJhdyA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlcyAoc3RyaXAgb3B0aW9uLC1GKScgJworCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJdGVzdF93cml0ZV9saW5lcyAiIiAiIyB0ZXh0IiAic2FtcGxlIiAiIiA+dGV4dCAmJgorCWVjaG8gc2FtcGxlID5leHBlY3QgJiYKKwlnaXQgY29tbWl0IC0tY2xlYW51cD1zdHJpcCAtRiB0ZXh0IC1hICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPnJhdyAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIHJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzIChzdHJpcCBvcHRpb24sLUYsLWUpJyAnCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICIiICJzYW1wbGUiICIiID50ZXh0ICYmCisJZ2l0IGNvbW1pdCAtZSAtRiB0ZXh0IC1hICYmCisJaGVhZCAtbiA0IC5naXQvQ09NTUlUX0VESVRNU0cgPmFjdHVhbAorJworCitlY2hvICJzYW1wbGUKKworIyBQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nCisjIHdpdGggJyMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuIiA+ZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzIChzdHJpcCBvcHRpb24sLUYsLWUpOiBvdXRwdXQnICcKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlIChmYWlsIG9uIGludmFsaWQgY2xlYW51cCBtb2RlIG9wdGlvbiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tY2xlYW51cD1ub24tZXhpc3RlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZSAoZmFpbCBvbiBpbnZhbGlkIGNsZWFudXAgbW9kZSBjb25maWd1cmF0aW9uKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBjb21taXQuY2xlYW51cD1ub24tZXhpc3RlbnQgY29tbWl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2UgKG5vIGNvbmZpZyBhbmQgbm8gb3B0aW9uIHVzZXMgZGVmYXVsdCknICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJKAorCSAgdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50LWFuZC1jb21tZW50ICYmCisJICBnaXQgY29tbWl0IC0tbm8tc3RhdHVzCisJKSAmJgorCWNvbW1pdF9tc2dfaXMgImNvbW1pdCBtZXNzYWdlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlIChvcHRpb24gb3ZlcnJpZGVzIGRlZmF1bHQpJyAnCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCSgKKwkgIHRlc3Rfc2V0X2VkaXRvciAiJFRFU1RfRElSRUNUT1JZIi90NzUwMC9hZGQtY29udGVudC1hbmQtY29tbWVudCAmJgorCSAgZ2l0IGNvbW1pdCAtLWNsZWFudXA9d2hpdGVzcGFjZSAtLW5vLXN0YXR1cworCSkgJiYKKwljb21taXRfbXNnX2lzICJjb21taXQgbWVzc2FnZSAjIGNvbW1lbnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2UgKGNvbmZpZyBvdmVycmlkZXMgZGVmYXVsdCknICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJKAorCSAgdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50LWFuZC1jb21tZW50ICYmCisJICBnaXQgLWMgY29tbWl0LmNsZWFudXA9d2hpdGVzcGFjZSBjb21taXQgLS1uby1zdGF0dXMKKwkpICYmCisJY29tbWl0X21zZ19pcyAiY29tbWl0IG1lc3NhZ2UgIyBjb21tZW50IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlIChvcHRpb24gb3ZlcnJpZGVzIGNvbmZpZyknICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJKAorCSAgdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50LWFuZC1jb21tZW50ICYmCisJICBnaXQgLWMgY29tbWl0LmNsZWFudXA9d2hpdGVzcGFjZSBjb21taXQgLS1jbGVhbnVwPWRlZmF1bHQKKwkpICYmCisJY29tbWl0X21zZ19pcyAiY29tbWl0IG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2UgKGRlZmF1bHQsIC1tKScgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJtZXNzYWdlICNjb21tZW50ICIgJiYKKwljb21taXRfbXNnX2lzICJtZXNzYWdlICNjb21tZW50IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlICh3aGl0ZXNwYWNlIG9wdGlvbiwgLW0pJyAnCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1jbGVhbnVwPXdoaXRlc3BhY2UgLS1uby1zdGF0dXMgLW0gIm1lc3NhZ2UgI2NvbW1lbnQgIiAmJgorCWNvbW1pdF9tc2dfaXMgIm1lc3NhZ2UgI2NvbW1lbnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2UgKHdoaXRlc3BhY2UgY29uZmlnLCAtbSknICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IC1jIGNvbW1pdC5jbGVhbnVwPXdoaXRlc3BhY2UgY29tbWl0IC0tbm8tc3RhdHVzIC1tICJtZXNzYWdlICNjb21tZW50ICIgJiYKKwljb21taXRfbXNnX2lzICJtZXNzYWdlICNjb21tZW50IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXNzYWdlIHNob3dzIGF1dGhvciB3aGVuIGl0IGlzIG5vdCBlcXVhbCB0byBjb21taXR0ZXInICcKKwllY2hvID4+bmVnYXRpdmUgJiYKKwlnaXQgY29tbWl0IC1lIC1tICJzYW1wbGUiIC1hICYmCisJdGVzdF9pMThuZ3JlcCBcCisJICAiXiMgQXV0aG9yOiAqQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT5cJCIgXAorCSAgLmdpdC9DT01NSVRfRURJVE1TRworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXNzYWdlIHNob3dzIGRhdGUgd2hlbiBpdCBpcyBleHBsaWNpdGx5IHNldCcgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtZSAtbSBmb28gLS1kYXRlPSIyMDEwLTAxLTAyVDAzOjA0OjA1IiAmJgorCXRlc3RfaTE4bmdyZXAgXAorCSAgIl4jIERhdGU6ICpTYXQgSmFuIDIgMDM6MDQ6MDUgMjAxMCArMDAwMCIgXAorCSAgLmdpdC9DT01NSVRfRURJVE1TRworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEFVVE9JREVOVCAnbWVzc2FnZSBzaG93cyBjb21taXR0ZXIgd2hlbiBpdCBpcyBhdXRvbWF0aWMnICcKKworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCSgKKwkJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX0VNQUlMICYmCisJCXNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9OQU1FICYmCisJCWdpdCBjb21taXQgLWUgLW0gInNhbXBsZSIgLWEKKwkpICYmCisJIyB0aGUgaWRlbnQgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBzeXN0ZW0sIHNvIHdlIGNhbm5vdAorCSMgY2hlY2sgdGhlIGFjdHVhbCB2YWx1ZSwgb25seSB0aGF0IGl0IGlzIHRoZXJlCisJdGVzdF9pMThuZ3JlcCAiXiMgQ29tbWl0dGVyOiAiIC5naXQvQ09NTUlUX0VESVRNU0cKKycKKword3JpdGVfc2NyaXB0IC5naXQvRkFLRV9FRElUT1IgPDxFT0YKK2VjaG8gZWRpdG9yIHN0YXJ0ZWQgPiIkKHB3ZCkvLmdpdC9yZXN1bHQiCitleGl0IDAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFGQUlMX1BSRVJFUVMsIUFVVE9JREVOVCAnZG8gbm90IGZpcmUgZWRpdG9yIHdoZW4gY29tbWl0dGVyIGlzIGJvZ3VzJyAnCisJPi5naXQvcmVzdWx0ICYmCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwkoCisJCXNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9FTUFJTCAmJgorCQlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfTkFNRSAmJgorCQlHSVRfRURJVE9SPSJcIiQocHdkKS8uZ2l0L0ZBS0VfRURJVE9SXCIiICYmCisJCWV4cG9ydCBHSVRfRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLWUgLW0gc2FtcGxlIC1hCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSAuZ2l0L3Jlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgZmlyZSBlZGl0b3IgaWYgLW0gPG1zZz4gd2FzIGdpdmVuJyAnCisJZWNobyB0aWNrID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAiZWRpdG9yIG5vdCBzdGFydGVkIiA+LmdpdC9yZXN1bHQgJiYKKwkoR0lUX0VESVRPUj0iXCIkKHB3ZCkvLmdpdC9GQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC1tIHRpY2spICYmCisJdGVzdCAiJChjYXQgLmdpdC9yZXN1bHQpIiA9ICJlZGl0b3Igbm90IHN0YXJ0ZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBmaXJlIGVkaXRvciBpZiAtbSAiIiB3YXMgZ2l2ZW4nICcKKwllY2hvIHRvY2sgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJlZGl0b3Igbm90IHN0YXJ0ZWQiID4uZ2l0L3Jlc3VsdCAmJgorCShHSVRfRURJVE9SPSJcIiQocHdkKS8uZ2l0L0ZBS0VfRURJVE9SXCIiIFwKKwkgZ2l0IGNvbW1pdCAtbSAiIiAtLWFsbG93LWVtcHR5LW1lc3NhZ2UpICYmCisJdGVzdCAiJChjYXQgLmdpdC9yZXN1bHQpIiA9ICJlZGl0b3Igbm90IHN0YXJ0ZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBmaXJlIGVkaXRvciBpbiB0aGUgcHJlc2VuY2Ugb2YgY29uZmxpY3RzJyAnCisKKwlnaXQgY2xlYW4gLWYgJiYKKwllY2hvIGYgPmcgJiYKKwlnaXQgYWRkIGcgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZyIgJiYKKwlnaXQgYnJhbmNoIHNlY29uZCAmJgorCWVjaG8gbWFzdGVyID5nICYmCisJZWNobyBnID5oICYmCisJZ2l0IGFkZCBnIGggJiYKKwlnaXQgY29tbWl0IC1tICJtb2RpZnkgZyBhbmQgYWRkIGgiICYmCisJZ2l0IGNoZWNrb3V0IHNlY29uZCAmJgorCWVjaG8gc2Vjb25kID5nICYmCisJZ2l0IGFkZCBnICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwkjIE11c3QgZmFpbCBkdWUgdG8gY29uZmxpY3QKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLW4gbWFzdGVyICYmCisJZWNobyAiZWRpdG9yIG5vdCBzdGFydGVkIiA+LmdpdC9yZXN1bHQgJiYKKwkoCisJCUdJVF9FRElUT1I9IlwiJChwd2QpLy5naXQvRkFLRV9FRElUT1JcIiIgJiYKKwkJZXhwb3J0IEdJVF9FRElUT1IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdAorCSkgJiYKKwl0ZXN0ICIkKGNhdCAuZ2l0L3Jlc3VsdCkiID0gImVkaXRvciBub3Qgc3RhcnRlZCIKKycKKword3JpdGVfc2NyaXB0IC5naXQvRkFLRV9FRElUT1IgPDxFT0YKKyMga2lsbCAtVEVSTSBjb21tYW5kIGFkZGVkIGJlbG93LgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRVhFQ0tFRVBTUElEICdhIFNJR1RFUk0gc2hvdWxkIGJyZWFrIGxvY2tzJyAnCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJISAiJFNIRUxMX1BBVEgiIC1jICdcJycKKwkgIGVjaG8ga2lsbCAtVEVSTSAkJCA+Pi5naXQvRkFLRV9FRElUT1IKKwkgIEdJVF9FRElUT1I9LmdpdC9GQUtFX0VESVRPUgorCSAgZXhwb3J0IEdJVF9FRElUT1IKKwkgIGV4ZWMgZ2l0IGNvbW1pdCAtYSdcJycgJiYKKwl0ZXN0ICEgLWYgLmdpdC9pbmRleC5sb2NrCisnCisKK3JtIC1mIC5naXQvTUVSR0VfTVNHIC5naXQvQ09NTUlUX0VESVRNU0cKK2dpdCByZXNldCAtcSAtLWhhcmQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSGFuZCBjb21taXR0aW5nIG9mIGEgcmVkdW5kYW50IG1lcmdlIHJlbW92ZXMgZHVwcycgJworCisJZ2l0IHJldi1wYXJzZSBzZWNvbmQgbWFzdGVyID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2Vjb25kIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgZyAmJgorCUVESVRPUj06IGdpdCBjb21taXQgLWEgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPnJhdyAmJgorCXNlZCAtbiAtZSAicy9ecGFyZW50IC8vcCIgLWUgIi9eJC9xIiByYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBIHNpbmdsZS1saW5lciBzdWJqZWN0IHdpdGggYSB0b2tlbiBwbHVzIGNvbG9uIGlzIG5vdCBhIGZvb3RlcicgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjb21taXQgLXMgLW0gImhlbGxvOiBraXR0eSIgLS1hbGxvdy1lbXB0eSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+cmF3ICYmCisJc2VkIC1lICIxLC9eJC9kIiByYXcgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC1zIHBsYWNlcyBzb2Igb24gdGhpcmQgbGluZSBhZnRlciB0d28gZW1wdHkgbGluZXMnICcKKwlnaXQgY29tbWl0IC1zIC0tYWxsb3ctZW1wdHkgLS1hbGxvdy1lbXB0eS1tZXNzYWdlICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisKKworCVNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCisJRU9GCisJc2VkIC1lICIvXiMvZCIgLWUgInMvXjouKi8vIiAuZ2l0L0NPTU1JVF9FRElUTVNHID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3dyaXRlX3NjcmlwdCAuZ2l0L0ZBS0VfRURJVE9SIDw8XEVPRgorbXYgIiQxIiAiJDEub3JpZyIKKygKKwllY2hvIG1lc3NhZ2UKKwljYXQgIiQxLm9yaWciCispID4iJDEiCitFT0YKKworZWNobyAnIyMgQ3VzdG9tIHRlbXBsYXRlJyA+dGVtcGxhdGUKKwordHJ5X2NvbW1pdCAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gPj5uZWdhdGl2ZSAmJgorCUdJVF9FRElUT1I9LmdpdC9GQUtFX0VESVRPUiBnaXQgY29tbWl0IC1hICQqICR1c2VfdGVtcGxhdGUgJiYKKwljYXNlICIkdXNlX3RlbXBsYXRlIiBpbgorCScnKQorCQl0ZXN0X2kxOG5ncmVwICEgIl4jIyBDdXN0b20gdGVtcGxhdGUiIC5naXQvQ09NTUlUX0VESVRNU0cgOzsKKwkqKQorCQl0ZXN0X2kxOG5ncmVwICJeIyMgQ3VzdG9tIHRlbXBsYXRlIiAuZ2l0L0NPTU1JVF9FRElUTVNHIDs7CisJZXNhYworfQorCit0cnlfY29tbWl0X3N0YXR1c19jb21ibyAoKSB7CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQnICcKKwkJdHJ5X2NvbW1pdCAiIiAmJgorCQl0ZXN0X2kxOG5ncmVwICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zdGF0dXMnICcKKwkJdHJ5X2NvbW1pdCAtLXN0YXR1cyAmJgorCQl0ZXN0X2kxOG5ncmVwICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1uby1zdGF0dXMnICcKKwkJdHJ5X2NvbW1pdCAtLW5vLXN0YXR1cyAmJgorCQl0ZXN0X2kxOG5ncmVwICEgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB3aXRoIGNvbW1pdC5zdGF0dXMgPSB5ZXMnICcKKwkJdGVzdF9jb25maWcgY29tbWl0LnN0YXR1cyB5ZXMgJiYKKwkJdHJ5X2NvbW1pdCAiIiAmJgorCQl0ZXN0X2kxOG5ncmVwICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgd2l0aCBjb21taXQuc3RhdHVzID0gbm8nICcKKwkJdGVzdF9jb25maWcgY29tbWl0LnN0YXR1cyBubyAmJgorCQl0cnlfY29tbWl0ICIiICYmCisJCXRlc3RfaTE4bmdyZXAgISAiXiMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IiAuZ2l0L0NPTU1JVF9FRElUTVNHCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3RhdHVzIHdpdGggY29tbWl0LnN0YXR1cyA9IHllcycgJworCQl0ZXN0X2NvbmZpZyBjb21taXQuc3RhdHVzIHllcyAmJgorCQl0cnlfY29tbWl0IC0tc3RhdHVzICYmCisJCXRlc3RfaTE4bmdyZXAgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLW5vLXN0YXR1cyB3aXRoIGNvbW1pdC5zdGF0dXMgPSB5ZXMnICcKKwkJdGVzdF9jb25maWcgY29tbWl0LnN0YXR1cyB5ZXMgJiYKKwkJdHJ5X2NvbW1pdCAtLW5vLXN0YXR1cyAmJgorCQl0ZXN0X2kxOG5ncmVwICEgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLXN0YXR1cyB3aXRoIGNvbW1pdC5zdGF0dXMgPSBubycgJworCQl0ZXN0X2NvbmZpZyBjb21taXQuc3RhdHVzIG5vICYmCisJCXRyeV9jb21taXQgLS1zdGF0dXMgJiYKKwkJdGVzdF9pMThuZ3JlcCAiXiMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IiAuZ2l0L0NPTU1JVF9FRElUTVNHCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tbm8tc3RhdHVzIHdpdGggY29tbWl0LnN0YXR1cyA9IG5vJyAnCisJCXRlc3RfY29uZmlnIGNvbW1pdC5zdGF0dXMgbm8gJiYKKwkJdHJ5X2NvbW1pdCAtLW5vLXN0YXR1cyAmJgorCQl0ZXN0X2kxOG5ncmVwICEgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworfQorCit0cnlfY29tbWl0X3N0YXR1c19jb21ibworCit1c2VfdGVtcGxhdGU9Ii10IHRlbXBsYXRlIgorCit0cnlfY29tbWl0X3N0YXR1c19jb21ibworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zdGF0dXMgd2l0aCBjdXN0b20gY29tbWVudCBjaGFyYWN0ZXInICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmNvbW1lbnRjaGFyICI7IiAmJgorCXRyeV9jb21taXQgLS1zdGF0dXMgJiYKKwl0ZXN0X2kxOG5ncmVwICJeOyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIGNvcmUuY29tbWVudGNoYXInICcKKwl0ZXN0X2NvbW1pdCAiI2ZvbyIgZm9vICYmCisJR0lUX0VESVRPUj0uZ2l0L0ZBS0VfRURJVE9SIGdpdCAtYyBjb3JlLmNvbW1lbnRDaGFyPWF1dG8gY29tbWl0IC0tYW1lbmQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeOyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIGNvcmUuY29tbWVudGNoYXIgYnV0IG91dCBvZiBvcHRpb25zJyAnCisJY2F0ID50ZXh0IDw8XEVPRiAmJgorIyAxCis7IDIKK0AgMworISA0CiskIDUKKyUgNgorXiA3CismIDgKK3wgOQorOiAxMAorRU9GCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1GIHRleHQgJiYKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAuZ2l0L0ZBS0VfRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBjb3JlLmNvbW1lbnRDaGFyPWF1dG8gY29tbWl0IC0tYW1lbmQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwMy1wcmUtY29tbWl0LWFuZC1wcmUtbWVyZ2UtY29tbWl0LWhvb2tzLnNoIGIvdC90NzUwMy1wcmUtY29tbWl0LWFuZC1wcmUtbWVyZ2UtY29tbWl0LWhvb2tzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIzNDg1NDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTAzLXByZS1jb21taXQtYW5kLXByZS1tZXJnZS1jb21taXQtaG9va3Muc2gKQEAgLTAsMCArMSwyODEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwcmUtY29tbWl0IGFuZCBwcmUtbWVyZ2UtY29tbWl0IGhvb2tzJworCisuIC4vdGVzdC1saWIuc2gKKworSE9PS0RJUj0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvaG9va3MiCitQUkVDT01NSVQ9IiRIT09LRElSL3ByZS1jb21taXQiCitQUkVNRVJHRT0iJEhPT0tESVIvcHJlLW1lcmdlLWNvbW1pdCIKKworIyBQcmVwYXJlIHNhbXBsZSBzY3JpcHRzIHRoYXQgd3JpdGUgdGhlaXIgJDAgdG8gYWN0dWFsX2hvb2tzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1wbGUgc2NyaXB0IHNldHVwJyAnCisJbWtkaXIgLXAgIiRIT09LRElSIiAmJgorCXdyaXRlX3NjcmlwdCAiJEhPT0tESVIvc3VjY2Vzcy5zYW1wbGUiIDw8LVxFT0YgJiYKKwllY2hvICQwID4+YWN0dWFsX2hvb2tzCisJZXhpdCAwCisJRU9GCisJd3JpdGVfc2NyaXB0ICIkSE9PS0RJUi9mYWlsLnNhbXBsZSIgPDwtXEVPRiAmJgorCWVjaG8gJDAgPj5hY3R1YWxfaG9va3MKKwlleGl0IDEKKwlFT0YKKwl3cml0ZV9zY3JpcHQgIiRIT09LRElSL25vbi1leGVjLnNhbXBsZSIgPDwtXEVPRiAmJgorCWVjaG8gJDAgPj5hY3R1YWxfaG9va3MKKwlleGl0IDEKKwlFT0YKKwljaG1vZCAteCAiJEhPT0tESVIvbm9uLWV4ZWMuc2FtcGxlIiAmJgorCXdyaXRlX3NjcmlwdCAiJEhPT0tESVIvcmVxdWlyZS1wcmVmaXguc2FtcGxlIiA8PC1cRU9GICYmCisJZWNobyAkMCA+PmFjdHVhbF9ob29rcworCXRlc3QgJEdJVF9QUkVGSVggPSAic3VjY2Vzcy8iCisJRU9GCisJd3JpdGVfc2NyaXB0ICIkSE9PS0RJUi9jaGVjay1hdXRob3Iuc2FtcGxlIiA8PC1cRU9GCisJZWNobyAkMCA+PmFjdHVhbF9ob29rcworCXRlc3QgIiRHSVRfQVVUSE9SX05BTUUiID0gIk5ldyBBdXRob3IiICYmCisJdGVzdCAiJEdJVF9BVVRIT1JfRU1BSUwiID0gIm5ld2F1dGhvckBleGFtcGxlLmNvbSIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm9vdCBjb21taXQnICcKKwllY2hvICJyb290IiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gInplcm90aCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCWVjaG8gImZvbyIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAibWFrZSBpdCBub24tZmYiICYmCisJZ2l0IGJyYW5jaCBzaWRlLW9yaWcgc2lkZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29uZmxpY3RpbmcgYnJhbmNoZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0aW5nLWEgbWFzdGVyICYmCisJZWNobyBhID5jb25mbGljdGluZyAmJgorCWdpdCBhZGQgY29uZmxpY3RpbmcgJiYKKwlnaXQgY29tbWl0IC1tIGNvbmZsaWN0aW5nLWEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3RpbmctYiBtYXN0ZXIgJiYKKwllY2hvIGIgPmNvbmZsaWN0aW5nICYmCisJZ2l0IGFkZCBjb25mbGljdGluZyAmJgorCWdpdCBjb21taXQgLW0gY29uZmxpY3RpbmctYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG5vIGhvb2snICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGFjdHVhbF9ob29rcyIgJiYKKwllY2hvICJmb28iID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlyc3QiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYWN0dWFsX2hvb2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggbm8gaG9vayAobWVyZ2UpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBhY3R1YWxfaG9va3MiICYmCisJZ2l0IGJyYW5jaCAtZiBzaWRlIHNpZGUtb3JpZyAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IG1lcmdlIC1tICJtZXJnZSBtYXN0ZXIiIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhY3R1YWxfaG9va3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgd2l0aCBubyBob29rJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBhY3R1YWxfaG9va3MiICYmCisJZWNobyAiYmFyIiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1uby12ZXJpZnkgLW0gImJhciIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhY3R1YWxfaG9va3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgd2l0aCBubyBob29rIChtZXJnZSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGFjdHVhbF9ob29rcyIgJiYKKwlnaXQgYnJhbmNoIC1mIHNpZGUgc2lkZS1vcmlnICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgbWVyZ2UgLS1uby12ZXJpZnkgLW0gIm1lcmdlIG1hc3RlciIgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFjdHVhbF9ob29rcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIHN1Y2NlZWRpbmcgaG9vaycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCIkUFJFQ09NTUlUXCIgZXhwZWN0ZWRfaG9va3MgYWN0dWFsX2hvb2tzIiAmJgorCWNwICIkSE9PS0RJUi9zdWNjZXNzLnNhbXBsZSIgIiRQUkVDT01NSVQiICYmCisJZWNobyAiJFBSRUNPTU1JVCIgPmV4cGVjdGVkX2hvb2tzICYmCisJZWNobyAibW9yZSIgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibW9yZSIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9ob29rcyBhY3R1YWxfaG9va3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBzdWNjZWVkaW5nIGhvb2sgKG1lcmdlKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCIkUFJFTUVSR0VcIiBleHBlY3RlZF9ob29rcyBhY3R1YWxfaG9va3MiICYmCisJY3AgIiRIT09LRElSL3N1Y2Nlc3Muc2FtcGxlIiAiJFBSRU1FUkdFIiAmJgorCWVjaG8gIiRQUkVNRVJHRSIgPmV4cGVjdGVkX2hvb2tzICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgbWVyZ2UgLW0gIm1lcmdlIG1hc3RlciIgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY21wIGV4cGVjdGVkX2hvb2tzIGFjdHVhbF9ob29rcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvbWF0aWMgbWVyZ2UgZmFpbHM7IGJvdGggaG9va3MgYXJlIGF2YWlsYWJsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCIkUFJFTUVSR0VcIiBcIiRQUkVDT01NSVRcIiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGV4cGVjdGVkX2hvb2tzIGFjdHVhbF9ob29rcyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJY3AgIiRIT09LRElSL3N1Y2Nlc3Muc2FtcGxlIiAiJFBSRU1FUkdFIiAmJgorCWNwICIkSE9PS0RJUi9zdWNjZXNzLnNhbXBsZSIgIiRQUkVDT01NSVQiICYmCisKKwlnaXQgY2hlY2tvdXQgY29uZmxpY3RpbmctYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtbSAibWVyZ2UgY29uZmxpY3RpbmctYiIgY29uZmxpY3RpbmctYiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFjdHVhbF9ob29rcyAmJgorCisJZWNobyAiJFBSRUNPTU1JVCIgPmV4cGVjdGVkX2hvb2tzICYmCisJZWNobyBhK2IgPmNvbmZsaWN0aW5nICYmCisJZ2l0IGFkZCBjb25mbGljdGluZyAmJgorCWdpdCBjb21taXQgLW0gInJlc29sdmUgY29uZmxpY3QiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfaG9va3MgYWN0dWFsX2hvb2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggc3VjY2VlZGluZyBob29rJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIiRQUkVDT01NSVRcIiBhY3R1YWxfaG9va3MiICYmCisJY3AgIiRIT09LRElSL3N1Y2Nlc3Muc2FtcGxlIiAiJFBSRUNPTU1JVCIgJiYKKwllY2hvICJldmVuIG1vcmUiID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1uby12ZXJpZnkgLW0gImV2ZW4gbW9yZSIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhY3R1YWxfaG9va3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgd2l0aCBzdWNjZWVkaW5nIGhvb2sgKG1lcmdlKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCIkUFJFTUVSR0VcIiBhY3R1YWxfaG9va3MiICYmCisJY3AgIiRIT09LRElSL3N1Y2Nlc3Muc2FtcGxlIiAiJFBSRU1FUkdFIiAmJgorCWdpdCBicmFuY2ggLWYgc2lkZSBzaWRlLW9yaWcgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBtZXJnZSAtLW5vLXZlcmlmeSAtbSAibWVyZ2UgbWFzdGVyIiBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYWN0dWFsX2hvb2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZmFpbGluZyBob29rJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIiRQUkVDT01NSVRcIiBleHBlY3RlZF9ob29rcyBhY3R1YWxfaG9va3MiICYmCisJY3AgIiRIT09LRElSL2ZhaWwuc2FtcGxlIiAiJFBSRUNPTU1JVCIgJiYKKwllY2hvICIkUFJFQ09NTUlUIiA+ZXhwZWN0ZWRfaG9va3MgJiYKKwllY2hvICJhbm90aGVyIiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tICJhbm90aGVyIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkX2hvb2tzIGFjdHVhbF9ob29rcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIGZhaWxpbmcgaG9vaycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCIkUFJFQ09NTUlUXCIgYWN0dWFsX2hvb2tzIiAmJgorCWNwICIkSE9PS0RJUi9mYWlsLnNhbXBsZSIgIiRQUkVDT01NSVQiICYmCisJZWNobyAic3R1ZmYiID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1uby12ZXJpZnkgLW0gInN0dWZmIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFjdHVhbF9ob29rcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGZhaWxpbmcgaG9vayAobWVyZ2UpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIiRQUkVNRVJHRVwiIGV4cGVjdGVkX2hvb2tzIGFjdHVhbF9ob29rcyIgJiYKKwljcCAiJEhPT0tESVIvZmFpbC5zYW1wbGUiICIkUFJFTUVSR0UiICYmCisJZWNobyAiJFBSRU1FUkdFIiA+ZXhwZWN0ZWRfaG9va3MgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtbSAibWVyZ2UgbWFzdGVyIiBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfaG9va3MgYWN0dWFsX2hvb2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggZmFpbGluZyBob29rIChtZXJnZSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIFwiJFBSRU1FUkdFXCIgYWN0dWFsX2hvb2tzIiAmJgorCWNwICIkSE9PS0RJUi9mYWlsLnNhbXBsZSIgIiRQUkVNRVJHRSIgJiYKKwlnaXQgYnJhbmNoIC1mIHNpZGUgc2lkZS1vcmlnICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgbWVyZ2UgLS1uby12ZXJpZnkgLW0gIm1lcmdlIG1hc3RlciIgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFjdHVhbF9ob29rcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnd2l0aCBub24tZXhlY3V0YWJsZSBob29rJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIiRQUkVDT01NSVRcIiBhY3R1YWxfaG9va3MiICYmCisJY3AgIiRIT09LRElSL25vbi1leGVjLnNhbXBsZSIgIiRQUkVDT01NSVQiICYmCisJZWNobyAiY29udGVudCIgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiY29udGVudCIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhY3R1YWxfaG9va3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJy0tbm8tdmVyaWZ5IHdpdGggbm9uLWV4ZWN1dGFibGUgaG9vaycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCIkUFJFQ09NTUlUXCIgYWN0dWFsX2hvb2tzIiAmJgorCWNwICIkSE9PS0RJUi9ub24tZXhlYy5zYW1wbGUiICIkUFJFQ09NTUlUIiAmJgorCWVjaG8gIm1vcmUgY29udGVudCIgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtbSAibW9yZSBjb250ZW50IiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFjdHVhbF9ob29rcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnd2l0aCBub24tZXhlY3V0YWJsZSBob29rIChtZXJnZSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIFwiJFBSRU1FUkdFXCIgYWN0dWFsX2hvb2tzIiAmJgorCWNwICIkSE9PS0RJUi9ub24tZXhlYy5zYW1wbGUiICIkUFJFTUVSR0UiICYmCisJZ2l0IGJyYW5jaCAtZiBzaWRlIHNpZGUtb3JpZyAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IG1lcmdlIC1tICJtZXJnZSBtYXN0ZXIiIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhY3R1YWxfaG9va3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJy0tbm8tdmVyaWZ5IHdpdGggbm9uLWV4ZWN1dGFibGUgaG9vayAobWVyZ2UpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIiRQUkVNRVJHRVwiIGFjdHVhbF9ob29rcyIgJiYKKwljcCAiJEhPT0tESVIvbm9uLWV4ZWMuc2FtcGxlIiAiJFBSRU1FUkdFIiAmJgorCWdpdCBicmFuY2ggLWYgc2lkZSBzaWRlLW9yaWcgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBtZXJnZSAtLW5vLXZlcmlmeSAtbSAibWVyZ2UgbWFzdGVyIiBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYWN0dWFsX2hvb2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayByZXF1aXJpbmcgR0lUX1BSRUZJWCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIFwiJFBSRUNPTU1JVFwiIGV4cGVjdGVkX2hvb2tzIGFjdHVhbF9ob29rcyBzdWNjZXNzIiAmJgorCWNwICIkSE9PS0RJUi9yZXF1aXJlLXByZWZpeC5zYW1wbGUiICIkUFJFQ09NTUlUIiAmJgorCWVjaG8gIiRQUkVDT01NSVQiID5leHBlY3RlZF9ob29rcyAmJgorCWVjaG8gIm1vcmUgY29udGVudCIgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJbWtkaXIgc3VjY2VzcyAmJgorCSgKKwkJY2Qgc3VjY2VzcyAmJgorCQlnaXQgY29tbWl0IC1tICJob29rIHJlcXVpcmVzIEdJVF9QUkVGSVggPSBzdWNjZXNzLyIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfaG9va3MgYWN0dWFsX2hvb2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZmFpbGluZyBob29rIHJlcXVpcmluZyBHSVRfUFJFRklYJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgXCIkUFJFQ09NTUlUXCIgZXhwZWN0ZWRfaG9va3MgYWN0dWFsX2hvb2tzIGZhaWwiICYmCisJY3AgIiRIT09LRElSL3JlcXVpcmUtcHJlZml4LnNhbXBsZSIgIiRQUkVDT01NSVQiICYmCisJZWNobyAiJFBSRUNPTU1JVCIgPmV4cGVjdGVkX2hvb2tzICYmCisJZWNobyAibW9yZSBjb250ZW50IiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlta2RpciBmYWlsICYmCisJKAorCQljZCBmYWlsICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gImhvb2sgbXVzdCBmYWlsIgorCSkgJiYKKwlnaXQgY2hlY2tvdXQgLS0gZmlsZSAmJgorCXRlc3RfY21wIGV4cGVjdGVkX2hvb2tzIGFjdHVhbF9ob29rcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0aGUgYXV0aG9yIGluIGhvb2snICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIFwiJFBSRUNPTU1JVFwiIGV4cGVjdGVkX2hvb2tzIGFjdHVhbF9ob29rcyIgJiYKKwljcCAiJEhPT0tESVIvY2hlY2stYXV0aG9yLnNhbXBsZSIgIiRQUkVDT01NSVQiICYmCisJY2F0ID5leHBlY3RlZF9ob29rcyA8PC1FT0YgJiYKKwkkUFJFQ09NTUlUCisJJFBSRUNPTU1JVAorCSRQUkVDT01NSVQKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImJ5IGEudS50aG9yIiAmJgorCSgKKwkJR0lUX0FVVEhPUl9OQU1FPSJOZXcgQXV0aG9yIiAmJgorCQlHSVRfQVVUSE9SX0VNQUlMPSJuZXdhdXRob3JAZXhhbXBsZS5jb20iICYmCisJCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTCAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImJ5IG5ldy5hdXRob3IgdmlhIGVudiIgJiYKKwkJZ2l0IHNob3cgLXMKKwkpICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvcj0iTmV3IEF1dGhvciA8bmV3YXV0aG9yQGV4YW1wbGUuY29tPiIgXAorCQktLWFsbG93LWVtcHR5IC1tICJieSBuZXcuYXV0aG9yIHZpYSBjb21tYW5kIGxpbmUiICYmCisJZ2l0IHNob3cgLXMgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9ob29rcyBhY3R1YWxfaG9va3MKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTA0LWNvbW1pdC1tc2ctaG9vay5zaCBiL3QvdDc1MDQtY29tbWl0LW1zZy1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMxYjljNmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTA0LWNvbW1pdC1tc2ctaG9vay5zaApAQCAtMCwwICsxLDI5OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NvbW1pdC1tc2cgaG9vaycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggbm8gaG9vaycgJworCisJZWNobyAiZm9vIiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJmaXJzdCIKKworJworCisjIHNldCB1cCBmYWtlIGVkaXRvciBmb3IgaW50ZXJhY3RpdmUgZWRpdGluZworY2F0ID4gZmFrZS1lZGl0b3IgPDwnRU9GJworIyEvYmluL3NoCitjcCBGQUtFX01TRyAiJDEiCitleGl0IDAKK0VPRgorY2htb2QgK3ggZmFrZS1lZGl0b3IKKworIyMgTm90IHVzaW5nIHRlc3Rfc2V0X2VkaXRvciBoZXJlIHNvIHdlIGNhbiBlYXNpbHkgZW5zdXJlIHRoZSBlZGl0b3IgdmFyaWFibGUKKyMjIGlzIG9ubHkgc2V0IGZvciB0aGUgZWRpdG9yIHRlc3RzCitGQUtFX0VESVRPUj0iJChwd2QpL2Zha2UtZWRpdG9yIgorZXhwb3J0IEZBS0VfRURJVE9SCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggbm8gaG9vayAoZWRpdG9yKScgJworCisJZWNobyAibW9yZSBmb28iID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJtb3JlIGZvbyIgPiBGQUtFX01TRyAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgd2l0aCBubyBob29rJyAnCisKKwllY2hvICJiYXIiID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1uby12ZXJpZnkgLW0gImJhciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIG5vIGhvb2sgKGVkaXRvciknICcKKworCWVjaG8gIm1vcmUgYmFyIiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJtb3JlIGJhciIgPiBGQUtFX01TRyAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5CisKKycKKworIyBub3cgaW5zdGFsbCBob29rIHRoYXQgYWx3YXlzIHN1Y2NlZWRzCitIT09LRElSPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9ob29rcyIKK0hPT0s9IiRIT09LRElSL2NvbW1pdC1tc2ciCitta2RpciAtcCAiJEhPT0tESVIiCitjYXQgPiAiJEhPT0siIDw8RU9GCisjIS9iaW4vc2gKK2V4aXQgMAorRU9GCitjaG1vZCAreCAiJEhPT0siCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggc3VjY2VlZGluZyBob29rJyAnCisKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibW9yZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIHN1Y2NlZWRpbmcgaG9vayAoZWRpdG9yKScgJworCisJZWNobyAibW9yZSBtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAibW9yZSBtb3JlIiA+IEZBS0VfTVNHICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIHN1Y2NlZWRpbmcgaG9vaycgJworCisJZWNobyAiZXZlbiBtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtbSAiZXZlbiBtb3JlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggc3VjY2VlZGluZyBob29rIChlZGl0b3IpJyAnCisKKwllY2hvICJldmVuIG1vcmUgbW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gImV2ZW4gbW9yZSBtb3JlIiA+IEZBS0VfTVNHICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLS1uby12ZXJpZnkKKworJworCisjIG5vdyBhIGhvb2sgdGhhdCBmYWlscworY2F0ID4gIiRIT09LIiA8PEVPRgorIyEvYmluL3NoCitleGl0IDEKK0VPRgorCitjb21taXRfbXNnX2lzICgpIHsKKwl0ZXN0ICIkKGdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVzJWIgLTEpIiA9ICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBmYWlsaW5nIGhvb2snICcKKworCWVjaG8gImFub3RoZXIiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tICJhbm90aGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZmFpbGluZyBob29rIChlZGl0b3IpJyAnCisKKwllY2hvICJtb3JlIGFub3RoZXIiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJtb3JlIGFub3RoZXIiID4gRkFLRV9NU0cgJiYKKwkhIChHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIGZhaWxpbmcgaG9vaycgJworCisJZWNobyAic3R1ZmYiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1tICJzdHVmZiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIGZhaWxpbmcgaG9vayAoZWRpdG9yKScgJworCisJZWNobyAibW9yZSBzdHVmZiIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gIm1vcmUgc3R1ZmYiID4gRkFLRV9NU0cgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGZhaWxzIHdpdGggZmFpbGluZyBob29rJyAnCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLUQgbmV3YnJhbmNoIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3YnJhbmNoICYmCisJOiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSBmaWxlMiAtbSBpbi1zaWRlLWJyYW5jaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgbWFzdGVyICYmCisJY29tbWl0X21zZ19pcyAiaW4tc2lkZS1icmFuY2giICMgSEVBRCBiZWZvcmUgbWVyZ2UKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBieXBhc3NlcyBmYWlsaW5nIGhvb2sgd2l0aCAtLW5vLXZlcmlmeScgJworCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC1EIG5ld2JyYW5jaCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ld2JyYW5jaCAmJgorCWdpdCBybSAtZiBmaWxlICYmCisJOiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSBmaWxlMiAtbSBpbi1zaWRlLWJyYW5jaCAmJgorCWdpdCBtZXJnZSAtLW5vLXZlcmlmeSAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgbWFzdGVyICYmCisJY29tbWl0X21zZ19pcyAiTWVyZ2UgYnJhbmNoICdcJydtYXN0ZXInXCcnIGludG8gbmV3YnJhbmNoIgorJworCisKK2NobW9kIC14ICIkSE9PSyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICd3aXRoIG5vbi1leGVjdXRhYmxlIGhvb2snICcKKworCWVjaG8gImNvbnRlbnQiID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiY29udGVudCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnd2l0aCBub24tZXhlY3V0YWJsZSBob29rIChlZGl0b3IpJyAnCisKKwllY2hvICJjb250ZW50IGFnYWluIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAiY29udGVudCBhZ2FpbiIgPiBGQUtFX01TRyAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC1tICJjb250ZW50IGFnYWluIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICctLW5vLXZlcmlmeSB3aXRoIG5vbi1leGVjdXRhYmxlIGhvb2snICcKKworCWVjaG8gIm1vcmUgY29udGVudCIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1uby12ZXJpZnkgLW0gIm1vcmUgY29udGVudCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnLS1uby12ZXJpZnkgd2l0aCBub24tZXhlY3V0YWJsZSBob29rIChlZGl0b3IpJyAnCisKKwllY2hvICJldmVuIG1vcmUgY29udGVudCIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gImV2ZW4gbW9yZSBjb250ZW50IiA+IEZBS0VfTVNHICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLS1uby12ZXJpZnkKKworJworCisjIG5vdyBhIGhvb2sgdGhhdCBlZGl0cyB0aGUgY29tbWl0IG1lc3NhZ2UKK2NhdCA+ICIkSE9PSyIgPDwnRU9GJworIyEvYmluL3NoCitlY2hvICJuZXcgbWVzc2FnZSIgPiAiJDEiCitleGl0IDAKK0VPRgorY2htb2QgK3ggIiRIT09LIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdob29rIGVkaXRzIGNvbW1pdCBtZXNzYWdlJyAnCisKKwllY2hvICJhZGRpdGlvbmFsIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkaXRpb25hbCIgJiYKKwljb21taXRfbXNnX2lzICJuZXcgbWVzc2FnZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdob29rIGVkaXRzIGNvbW1pdCBtZXNzYWdlIChlZGl0b3IpJyAnCisKKwllY2hvICJhZGRpdGlvbmFsIGNvbnRlbnQiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJhZGRpdGlvbmFsIGNvbnRlbnQiID4gRkFLRV9NU0cgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAmJgorCWNvbW1pdF9tc2dfaXMgIm5ldyBtZXNzYWdlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImhvb2sgZG9lc24ndCBlZGl0IGNvbW1pdCBtZXNzYWdlIiAnCisKKwllY2hvICJwbHVzIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtbSAicGx1cyIgJiYKKwljb21taXRfbXNnX2lzICJwbHVzIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImhvb2sgZG9lc24ndCBlZGl0IGNvbW1pdCBtZXNzYWdlIChlZGl0b3IpIiAnCisKKwllY2hvICJtb3JlIHBsdXMiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJtb3JlIHBsdXMiID4gRkFLRV9NU0cgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAmJgorCWNvbW1pdF9tc2dfaXMgIm1vcmUgcGx1cyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9vayBjYWxsZWQgaW4gZ2l0LW1lcmdlIHBpY2tzIHVwIGNvbW1pdCBtZXNzYWdlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC1EIG5ld2JyYW5jaCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ld2JyYW5jaCAmJgorCWdpdCBybSAtZiBmaWxlICYmCisJOiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSBmaWxlMiAtbSBpbi1zaWRlLWJyYW5jaCAmJgorCWdpdCBtZXJnZSAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgbWFzdGVyICYmCisJY29tbWl0X21zZ19pcyAibmV3IG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ21lcmdlIC0tY29udGludWUgcmVtZW1iZXJzIC0tbm8tdmVyaWZ5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC1EIG5ld2JyYW5jaCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gYSA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtbSAiYWRkIGZpbGUyIHRvIG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV3YnJhbmNoIG1hc3Rlcl4gJiYKKwllY2hvIGIgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLS1uby12ZXJpZnkgZmlsZTIgLW0gaW4tc2lkZS1icmFuY2ggJiYKKwlnaXQgbWVyZ2UgLS1uby12ZXJpZnkgLW0gbm90LXJld3JpdHRlbi1ieS1ob29rIG1hc3RlciAmJgorCSMgcmVzb2x2ZSBjb25mbGljdDoKKwllY2hvIGMgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBtZXJnZSAtLWNvbnRpbnVlICYmCisJY29tbWl0X21zZ19pcyBub3QtcmV3cml0dGVuLWJ5LWhvb2sKKycKKworIyBzZXQgdXAgZmFrZSBlZGl0b3IgdG8gcmVwbGFjZSBgcGlja2AgYnkgYHJld29yZGAKK2NhdCA+IHJld29yZC1lZGl0b3IgPDwnRU9GJworIyEvYmluL3NoCittdiAiJDEiICIkMSIuYnVwICYmCitzZWQgJ3MvXnBpY2svcmV3b3JkLycgPCIkMSIuYnVwID4iJDEiCitFT0YKK2NobW9kICt4IHJld29yZC1lZGl0b3IKK1JFV09SRF9FRElUT1I9IiQocHdkKS9yZXdvcmQtZWRpdG9yIgorZXhwb3J0IFJFV09SRF9FRElUT1IKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9vayBpcyBjYWxsZWQgZm9yIHJld29yZCBkdXJpbmcgYHJlYmFzZSAtaWAnICcKKworCUdJVF9TRVFVRU5DRV9FRElUT1I9IlwiJFJFV09SRF9FRElUT1JcIiIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCWNvbW1pdF9tc2dfaXMgIm5ldyBtZXNzYWdlIgorCisnCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTA1LXByZXBhcmUtY29tbWl0LW1zZy1ob29rLnNoIGIvdC90NzUwNS1wcmVwYXJlLWNvbW1pdC1tc2ctaG9vay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NGY4NWNkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwNS1wcmVwYXJlLWNvbW1pdC1tc2ctaG9vay5zaApAQCAtMCwwICsxLDMxNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3ByZXBhcmUtY29tbWl0LW1zZyBob29rJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGNvbW1pdHMgZm9yIHJlYmFzaW5nJyAnCisJdGVzdF9jb21taXQgcm9vdCAmJgorCXRlc3RfY29tbWl0IGEgYSBhICYmCisJdGVzdF9jb21taXQgYiBiIGIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmViYXNlLW1lIHJvb3QgJiYKKwl0ZXN0X2NvbW1pdCByZWJhc2UtYSBhIGFhICYmCisJdGVzdF9jb21taXQgcmViYXNlLWIgYiBiYiAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMSAxMykKKwlkbworCQl0ZXN0X2NvbW1pdCByZWJhc2UtJGkgYyAkaQorCWRvbmUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwljYXQgPnJlYmFzZS10b2RvIDw8LUVPRgorCXBpY2sgJChnaXQgcmV2LXBhcnNlIHJlYmFzZS1hKQorCXBpY2sgJChnaXQgcmV2LXBhcnNlIHJlYmFzZS1iKQorCWZpeHVwICQoZ2l0IHJldi1wYXJzZSByZWJhc2UtMSkKKwlmaXh1cCAkKGdpdCByZXYtcGFyc2UgcmViYXNlLTIpCisJcGljayAkKGdpdCByZXYtcGFyc2UgcmViYXNlLTMpCisJZml4dXAgJChnaXQgcmV2LXBhcnNlIHJlYmFzZS00KQorCXNxdWFzaCAkKGdpdCByZXYtcGFyc2UgcmViYXNlLTUpCisJcmV3b3JkICQoZ2l0IHJldi1wYXJzZSByZWJhc2UtNikKKwlzcXVhc2ggJChnaXQgcmV2LXBhcnNlIHJlYmFzZS03KQorCWZpeHVwICQoZ2l0IHJldi1wYXJzZSByZWJhc2UtOCkKKwlmaXh1cCAkKGdpdCByZXYtcGFyc2UgcmViYXNlLTkpCisJZWRpdCAkKGdpdCByZXYtcGFyc2UgcmViYXNlLTEwKQorCXNxdWFzaCAkKGdpdCByZXYtcGFyc2UgcmViYXNlLTExKQorCXNxdWFzaCAkKGdpdCByZXYtcGFyc2UgcmViYXNlLTEyKQorCWVkaXQgJChnaXQgcmV2LXBhcnNlIHJlYmFzZS0xMykKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBubyBob29rJyAnCisKKwllY2hvICJmb28iID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImZpcnN0IgorCisnCisKKyMgc2V0IHVwIGZha2UgZWRpdG9yIGZvciBpbnRlcmFjdGl2ZSBlZGl0aW5nCitjYXQgPiBmYWtlLWVkaXRvciA8PCdFT0YnCisjIS9iaW4vc2gKK2V4aXQgMAorRU9GCitjaG1vZCAreCBmYWtlLWVkaXRvcgorCisjIyBOb3QgdXNpbmcgdGVzdF9zZXRfZWRpdG9yIGhlcmUgc28gd2UgY2FuIGVhc2lseSBlbnN1cmUgdGhlIGVkaXRvciB2YXJpYWJsZQorIyMgaXMgb25seSBzZXQgZm9yIHRoZSBlZGl0b3IgdGVzdHMKK0ZBS0VfRURJVE9SPSIkKHB3ZCkvZmFrZS1lZGl0b3IiCitleHBvcnQgRkFLRV9FRElUT1IKKworIyBub3cgaW5zdGFsbCBob29rIHRoYXQgYWx3YXlzIHN1Y2NlZWRzIGFuZCBhZGRzIGEgbWVzc2FnZQorSE9PS0RJUj0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvaG9va3MiCitIT09LPSIkSE9PS0RJUi9wcmVwYXJlLWNvbW1pdC1tc2ciCitta2RpciAtcCAiJEhPT0tESVIiCitlY2hvICIjISRTSEVMTF9QQVRIIiA+ICIkSE9PSyIKK2NhdCA+PiAiJEhPT0siIDw8J0VPRicKKworR0lUX0RJUj0kKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKQoraWYgdGVzdCAtZCAiJEdJVF9ESVIvcmViYXNlLW1lcmdlIgordGhlbgorCXJlYmFzaW5nPTEKK2Vsc2UKKwlyZWJhc2luZz0wCitmaQorCitnZXRfbGFzdF9jbWQgKCkgeworCXRhaWwgLW4xICIkR0lUX0RJUi9yZWJhc2UtbWVyZ2UvZG9uZSIgfCB7CisJCXJlYWQgY21kIGlkIF8KKwkJZ2l0IGxvZyAtLXByZXR0eT0iWyRjbWQgJXNdIiAtbjEgJGlkCisJfQorfQorCitpZiB0ZXN0ICIkMiIgPSBjb21taXQKK3RoZW4KKwlpZiB0ZXN0ICRyZWJhc2luZyA9IDEKKwl0aGVuCisJCXNvdXJjZT0iJDMiCisJZWxzZQorCQlzb3VyY2U9JChnaXQgcmV2LXBhcnNlICIkMyIpCisJZmkKK2Vsc2UKKwlzb3VyY2U9JHsyLWRlZmF1bHR9CitmaQordGVzdCAiJEdJVF9FRElUT1IiID0gOiAmJiBzb3VyY2U9IiRzb3VyY2UgKG5vIGVkaXRvcikiCisKK2lmIHRlc3QgJHJlYmFzaW5nID0gMQordGhlbgorCWVjaG8gIiRzb3VyY2UgJChnZXRfbGFzdF9jbWQpIiA+IiQxIgorZWxzZQorCXNlZCAtZSAiMXMvLiovJHNvdXJjZS8iICIkMSIgPm1zZy50bXAKKwltdiBtc2cudG1wICIkMSIKK2ZpCitleGl0IDAKK0VPRgorY2htb2QgK3ggIiRIT09LIgorCitlY2hvIGR1bW15IHRlbXBsYXRlID4gIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL3RlbXBsYXRlIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGhvb2sgKC1tKScgJworCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIm1vcmUiICYmCisJdGVzdCAiJChnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolcykiID0gIm1lc3NhZ2UgKG5vIGVkaXRvcikiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rICgtbSBlZGl0b3IpJyAnCisKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLWUgLW0gIm1vcmUgbW9yZSIgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzKSIgPSBtZXNzYWdlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rICgtdCknICcKKworCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC10ICIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS90ZW1wbGF0ZSIgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzKSIgPSB0ZW1wbGF0ZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoLUYpJyAnCisKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJKGVjaG8gbW9yZSB8IGdpdCBjb21taXQgLUYgLSkgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzKSIgPSAibWVzc2FnZSAobm8gZWRpdG9yKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGhvb2sgKC1GIGVkaXRvciknICcKKworCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwkoZWNobyBtb3JlIG1vcmUgfCBHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtZSAtRiAtKSAmJgorCXRlc3QgIiQoZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXMpIiA9IG1lc3NhZ2UKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGhvb2sgKC1DKScgJworCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtQyAkaGVhZCAmJgorCXRlc3QgIiQoZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXMpIiA9ICIkaGVhZCAobm8gZWRpdG9yKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGhvb2sgKGVkaXRvciknICcKKworCWVjaG8gIm1vcmUgbW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0ICYmCisJdGVzdCAiJChnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolcykiID0gZGVmYXVsdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoLS1hbWVuZCknICcKKworCWhlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzKSIgPSAiJGhlYWQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rICgtYyknICcKKworCWhlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC1jICRoZWFkICYmCisJdGVzdCAiJChnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolcykiID0gIiRoZWFkIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAobWVyZ2UpJyAnCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1CIG90aGVyIEhFQURAezF9ICYmCisJZWNobyAibW9yZSIgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvdGhlciAmJgorCWdpdCBjaGVja291dCAtICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgb3RoZXIgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzKSIgPSAibWVyZ2UgKG5vIGVkaXRvcikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayBhbmQgZWRpdG9yIChtZXJnZSknICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLUIgb3RoZXIgSEVBREB7MX0gJiYKKwllY2hvICJtb3JlIiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG90aGVyICYmCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwllbnYgR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBtZXJnZSAtLW5vLWZmIC1lIG90aGVyICYmCisJdGVzdCAiJChnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolcykiID0gIm1lcmdlIgorJworCit0ZXN0X3JlYmFzZSAoKSB7CisJZXhwZWN0PSQxICYmCisJbW9kZT0kMiAmJgorCXRlc3RfZXhwZWN0XyRleHBlY3QgQ19MT0NBTEVfT1VUUFVUICJ3aXRoIGhvb2sgKHJlYmFzZSAke21vZGU6LS1pfSkiICcKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICJcCisJCQlnaXQgcmViYXNlIC0tYWJvcnQKKwkJCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKwkJCWdpdCBicmFuY2ggLUQgdG1wIiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdG1wIHJlYmFzZS1tZSAmJgorCQlHSVRfU0VRVUVOQ0VfRURJVE9SPSJjcCByZWJhc2UtdG9kbyIgJiYKKwkJR0lUX0VESVRPUj0iXCIkRkFLRV9FRElUT1JcIiIgJiYKKwkJKAorCQkJZXhwb3J0IEdJVF9TRVFVRU5DRV9FRElUT1IgR0lUX0VESVRPUiAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAkbW9kZSBiICYmCisJCQllY2hvIHggPmEgJiYKKwkJCWdpdCBhZGQgYSAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJCQllY2hvIHggPmIgJiYKKwkJCWdpdCBhZGQgYiAmJgorCQkJZ2l0IGNvbW1pdCAmJgorCQkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJCQllY2hvIHkgPmEgJiYKKwkJCWdpdCBhZGQgYSAmJgorCQkJZ2l0IGNvbW1pdCAmJgorCQkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJCQllY2hvIHkgPmIgJiYKKwkJCWdpdCBhZGQgYiAmJgorCQkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJCSkgJiYKKwkJZ2l0IGxvZyAtLXByZXR0eT0lcyAtZyAtbjE4IEhFQURAezF9ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWS90NzUwNS9leHBlY3RlZC1yZWJhc2Uke21vZGU6LS1pfSIgYWN0dWFsCisJJworfQorCit0ZXN0X3JlYmFzZSBzdWNjZXNzCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3JlYmFzZSBzdWNjZXNzIC1wCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoY2hlcnJ5LXBpY2spJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtQiBvdGhlciBiICYmCisJZ2l0IGNoZXJyeS1waWNrIHJlYmFzZS0xICYmCisJdGVzdCAiJChnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolcykiID0gIm1lc3NhZ2UgKG5vIGVkaXRvcikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayBhbmQgZWRpdG9yIChjaGVycnktcGljayknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1CIG90aGVyIGIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLWUgcmViYXNlLTEgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzKSIgPSBtZXJnZQorJworCitjYXQgPiAiJEhPT0siIDw8J0VPRicKKyMhL2Jpbi9zaAorZXhpdCAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBmYWlsaW5nIGhvb2snICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwloZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLWMgJGhlYWQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGZhaWxpbmcgaG9vayAoLS1uby12ZXJpZnkpJyAnCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBtYXN0ZXIiICYmCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1jICRoZWFkCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBmYWlsaW5nIGhvb2sgKG1lcmdlKScgJworCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtQiBvdGhlciBIRUFEQHsxfSAmJgorCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlybSAtZiAiJEhPT0siICYmCisJZ2l0IGNvbW1pdCAtbSBvdGhlciAmJgorCXdyaXRlX3NjcmlwdCAiJEhPT0siIDw8LUVPRiAmJgorCWV4aXQgMQorCUVPRgorCWdpdCBjaGVja291dCAtICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tZmYgb3RoZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnd2l0aCBmYWlsaW5nIGhvb2sgKGNoZXJyeS1waWNrKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLUIgb3RoZXIgYiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayByZWJhc2UtMSAyPmFjdHVhbCAmJgorCXRlc3QgJChncmVwIC1jIHByZXBhcmUtY29tbWl0LW1zZyBhY3R1YWwpID0gMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDUvZXhwZWN0ZWQtcmViYXNlLWkgYi90L3Q3NTA1L2V4cGVjdGVkLXJlYmFzZS1pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYmFkYTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTA1L2V4cGVjdGVkLXJlYmFzZS1pCkBAIC0wLDAgKzEsMTggQEAKK21lc3NhZ2UgW2VkaXQgcmViYXNlLTEzXQorbWVzc2FnZSAobm8gZWRpdG9yKSBbZWRpdCByZWJhc2UtMTNdCittZXNzYWdlIFtzcXVhc2ggcmViYXNlLTEyXQorbWVzc2FnZSAobm8gZWRpdG9yKSBbc3F1YXNoIHJlYmFzZS0xMV0KK2RlZmF1bHQgW2VkaXQgcmViYXNlLTEwXQorbWVzc2FnZSAobm8gZWRpdG9yKSBbZWRpdCByZWJhc2UtMTBdCittZXNzYWdlIFtmaXh1cCByZWJhc2UtOV0KK21lc3NhZ2UgKG5vIGVkaXRvcikgW2ZpeHVwIHJlYmFzZS04XQorbWVzc2FnZSAobm8gZWRpdG9yKSBbc3F1YXNoIHJlYmFzZS03XQorSEVBRCBbcmV3b3JkIHJlYmFzZS02XQorbWVzc2FnZSAobm8gZWRpdG9yKSBbcmV3b3JkIHJlYmFzZS02XQorbWVzc2FnZSBbc3F1YXNoIHJlYmFzZS01XQorbWVzc2FnZSAobm8gZWRpdG9yKSBbZml4dXAgcmViYXNlLTRdCittZXNzYWdlIChubyBlZGl0b3IpIFtwaWNrIHJlYmFzZS0zXQorbWVzc2FnZSAobm8gZWRpdG9yKSBbZml4dXAgcmViYXNlLTJdCittZXNzYWdlIChubyBlZGl0b3IpIFtmaXh1cCByZWJhc2UtMV0KK21lcmdlIFtwaWNrIHJlYmFzZS1iXQorbWVzc2FnZSBbcGljayByZWJhc2UtYV0KZGlmZiAtLWdpdCBhL3QvdDc1MDUvZXhwZWN0ZWQtcmViYXNlLXAgYi90L3Q3NTA1L2V4cGVjdGVkLXJlYmFzZS1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYmFkYTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTA1L2V4cGVjdGVkLXJlYmFzZS1wCkBAIC0wLDAgKzEsMTggQEAKK21lc3NhZ2UgW2VkaXQgcmViYXNlLTEzXQorbWVzc2FnZSAobm8gZWRpdG9yKSBbZWRpdCByZWJhc2UtMTNdCittZXNzYWdlIFtzcXVhc2ggcmViYXNlLTEyXQorbWVzc2FnZSAobm8gZWRpdG9yKSBbc3F1YXNoIHJlYmFzZS0xMV0KK2RlZmF1bHQgW2VkaXQgcmViYXNlLTEwXQorbWVzc2FnZSAobm8gZWRpdG9yKSBbZWRpdCByZWJhc2UtMTBdCittZXNzYWdlIFtmaXh1cCByZWJhc2UtOV0KK21lc3NhZ2UgKG5vIGVkaXRvcikgW2ZpeHVwIHJlYmFzZS04XQorbWVzc2FnZSAobm8gZWRpdG9yKSBbc3F1YXNoIHJlYmFzZS03XQorSEVBRCBbcmV3b3JkIHJlYmFzZS02XQorbWVzc2FnZSAobm8gZWRpdG9yKSBbcmV3b3JkIHJlYmFzZS02XQorbWVzc2FnZSBbc3F1YXNoIHJlYmFzZS01XQorbWVzc2FnZSAobm8gZWRpdG9yKSBbZml4dXAgcmViYXNlLTRdCittZXNzYWdlIChubyBlZGl0b3IpIFtwaWNrIHJlYmFzZS0zXQorbWVzc2FnZSAobm8gZWRpdG9yKSBbZml4dXAgcmViYXNlLTJdCittZXNzYWdlIChubyBlZGl0b3IpIFtmaXh1cCByZWJhc2UtMV0KK21lcmdlIFtwaWNrIHJlYmFzZS1iXQorbWVzc2FnZSBbcGljayByZWJhc2UtYV0KZGlmZiAtLWdpdCBhL3QvdDc1MDYtc3RhdHVzLXN1Ym1vZHVsZS5zaCBiL3QvdDc1MDYtc3RhdHVzLXN1Ym1vZHVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wODYyOWE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwNi1zdGF0dXMtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsNDA4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN0YXR1cyBmb3Igc3VibW9kdWxlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9jcmVhdGVfcmVwb193aXRoX2NvbW1pdCAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAiJDEiICYmCisJKAorCQljZCAiJDEiICYmCisJCTogPmJhciAmJgorCQlnaXQgYWRkIGJhciAmJgorCQlnaXQgY29tbWl0IC1tICIgQWRkIGJhciIgJiYKKwkJOiA+Zm9vICYmCisJCWdpdCBhZGQgZm9vICYmCisJCWdpdCBjb21taXQgLW0gIiBBZGQgZm9vIgorCSkKK30KKworc2FuaXRpemVfb3V0cHV0ICgpIHsKKwlzZWQgLWUgInMvJE9JRF9SRUdFWC9IQVNILyIgLWUgInMvJE9JRF9SRUdFWC9IQVNILyIgb3V0cHV0ID5vdXRwdXQyICYmCisJbXYgb3V0cHV0MiBvdXRwdXQKK30KKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY3JlYXRlX3JlcG9fd2l0aF9jb21taXQgc3ViICYmCisJZWNobyBvdXRwdXQgPiAuZ2l0aWdub3JlICYmCisJZ2l0IGFkZCBzdWIgLmdpdGlnbm9yZSAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBzdWJtb2R1bGUgc3ViIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgY2xlYW4nICcKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3RoaW5nIHRvIGNvbW1pdCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLWRyeS1ydW4gLWEgY2xlYW4nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZHJ5LXJ1biAtYSA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibm90aGluZyB0byBjb21taXQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBtb2RpZmllZCBmaWxlIGluIHN1Ym1vZHVsZScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCkgJiYKKwllY2hvICJjaGFuZ2VkIiA+c3ViL2ZvbyAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobW9kaWZpZWQgY29udGVudCkiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBtb2RpZmllZCBmaWxlIGluIHN1Ym1vZHVsZSAocG9yY2VsYWluKScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCkgJiYKKwllY2hvICJjaGFuZ2VkIiA+c3ViL2ZvbyAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBNIHN1YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBtb2RpZmllZCBmaWxlIGluIHN1Ym1vZHVsZSAoc2hvcnQpJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkKSAmJgorCWVjaG8gImNoYW5nZWQiID5zdWIvZm9vICYmCisJZ2l0IHN0YXR1cyAtLXNob3J0ID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgbSBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgZmlsZSBpbiBzdWJtb2R1bGUnICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQgJiYgZWNobyA+Zm9vICYmIGdpdCBhZGQgZm9vKSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobW9kaWZpZWQgY29udGVudCkiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBhZGRlZCBmaWxlIGluIHN1Ym1vZHVsZSAocG9yY2VsYWluKScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBlY2hvID5mb28gJiYgZ2l0IGFkZCBmb28pICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIE0gc3ViCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGZpbGUgaW4gc3VibW9kdWxlIChzaG9ydCknICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQgJiYgZWNobyA+Zm9vICYmIGdpdCBhZGQgZm9vKSAmJgorCWdpdCBzdGF0dXMgLS1zaG9ydCA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIG0gc3ViCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIHVudHJhY2tlZCBmaWxlIGluIHN1Ym1vZHVsZScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCkgJiYKKwllY2hvICJjb250ZW50IiA+c3ViL25ldy1maWxlICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibW9kaWZpZWQ6ICAgc3ViICh1bnRyYWNrZWQgY29udGVudCkiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXVubyB3aXRoIHVudHJhY2tlZCBmaWxlIGluIHN1Ym1vZHVsZScgJworCWdpdCBzdGF0dXMgLXVubyA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiXm5vdGhpbmcgdG8gY29tbWl0IiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggdW50cmFja2VkIGZpbGUgaW4gc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIE0gc3ViCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIHVudHJhY2tlZCBmaWxlIGluIHN1Ym1vZHVsZSAoc2hvcnQpJyAnCisJZ2l0IHN0YXR1cyAtLXNob3J0ID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgPyBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgYW5kIHVudHJhY2tlZCBmaWxlIGluIHN1Ym1vZHVsZScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBlY2hvID5mb28gJiYgZ2l0IGFkZCBmb28pICYmCisJZWNobyAiY29udGVudCIgPnN1Yi9uZXctZmlsZSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobW9kaWZpZWQgY29udGVudCwgdW50cmFja2VkIGNvbnRlbnQpIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgYW5kIHVudHJhY2tlZCBmaWxlIGluIHN1Ym1vZHVsZSAocG9yY2VsYWluKScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBlY2hvID5mb28gJiYgZ2l0IGFkZCBmb28pICYmCisJZWNobyAiY29udGVudCIgPnN1Yi9uZXctZmlsZSAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBNIHN1YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBtb2RpZmllZCBmaWxlIGluIG1vZGlmaWVkIHN1Ym1vZHVsZScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCkgJiYKKwlybSBzdWIvbmV3LWZpbGUgJiYKKwkoY2Qgc3ViICYmIGVjaG8gIm5leHQgY2hhbmdlIiA+Zm9vICYmIGdpdCBjb21taXQgLW0gIm5leHQgY2hhbmdlIiBmb28pICYmCisJZWNobyAiY2hhbmdlZCIgPnN1Yi9mb28gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtb2RpZmllZDogICBzdWIgKG5ldyBjb21taXRzLCBtb2RpZmllZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIG1vZGlmaWVkIGZpbGUgaW4gbW9kaWZpZWQgc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkKSAmJgorCWVjaG8gImNoYW5nZWQiID5zdWIvZm9vICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIE0gc3ViCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGZpbGUgaW4gbW9kaWZpZWQgc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtb2RpZmllZDogICBzdWIgKG5ldyBjb21taXRzLCBtb2RpZmllZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGZpbGUgaW4gbW9kaWZpZWQgc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgTSBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggdW50cmFja2VkIGZpbGUgaW4gbW9kaWZpZWQgc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkKSAmJgorCWVjaG8gImNvbnRlbnQiID5zdWIvbmV3LWZpbGUgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtb2RpZmllZDogICBzdWIgKG5ldyBjb21taXRzLCB1bnRyYWNrZWQgY29udGVudCkiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCB1bnRyYWNrZWQgZmlsZSBpbiBtb2RpZmllZCBzdWJtb2R1bGUgKHBvcmNlbGFpbiknICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgTSBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgYW5kIHVudHJhY2tlZCBmaWxlIGluIG1vZGlmaWVkIHN1Ym1vZHVsZScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBlY2hvID5mb28gJiYgZ2l0IGFkZCBmb28pICYmCisJZWNobyAiY29udGVudCIgPnN1Yi9uZXctZmlsZSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobmV3IGNvbW1pdHMsIG1vZGlmaWVkIGNvbnRlbnQsIHVudHJhY2tlZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGFuZCB1bnRyYWNrZWQgZmlsZSBpbiBtb2RpZmllZCBzdWJtb2R1bGUgKHBvcmNlbGFpbiknICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQgJiYgZWNobyA+Zm9vICYmIGdpdCBhZGQgZm9vKSAmJgorCWVjaG8gImNvbnRlbnQiID5zdWIvbmV3LWZpbGUgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgTSBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLmdpdCBmaWxlIGZvciBzdWInICcKKwkoY2Qgc3ViICYmCisJIHJtIC1mIG5ldy1maWxlICYmCisJIFJFQUw9IiQocHdkKS8uLi8ucmVhbCIgJiYKKwkgbXYgLmdpdCAiJFJFQUwiICYmCisJIGVjaG8gImdpdGRpcjogJFJFQUwiID4uZ2l0KSAmJgorCSBlY2hvIC5yZWFsID4+LmdpdGlnbm9yZSAmJgorCSBnaXQgY29tbWl0IC1tICJhZGRlZCAucmVhbCB0byAuZ2l0aWdub3JlIiAuZ2l0aWdub3JlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGZpbGUgaW4gbW9kaWZpZWQgc3VibW9kdWxlIHdpdGggLmdpdCBmaWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtb2RpZmllZDogICBzdWIgKG5ldyBjb21taXRzLCBtb2RpZmllZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGEgbG90IG9mIHVudHJhY2tlZCBmaWxlcyBpbiB0aGUgc3VibW9kdWxlJyAnCisJKAorCQljZCBzdWIgJiYKKwkJaT0wICYmCisJCXdoaWxlIHRlc3QgJGkgLWx0IDEwMjQKKwkJZG8KKwkJCT5zb21lLWZpbGUtJGkgJiYKKwkJCWk9JCgoICRpICsgMSApKSB8fCBleGl0IDEKKwkJZG9uZQorCSkgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIHN1YiAyPmVyci5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyLmFjdHVhbCAmJgorCXJtIGVyci5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gc3VibW9kdWxlIGNvbnRlbnRzJyAnCisJcm0gLXJmIHN1YiAmJgorCW1rZGlyIHN1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgY2xlYW4gKGVtcHR5IHN1Ym1vZHVsZSBkaXIpJyAnCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibm90aGluZyB0byBjb21taXQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLWEgY2xlYW4gKGVtcHR5IHN1Ym1vZHVsZSBkaXIpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWRyeS1ydW4gLWEgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdGhpbmcgdG8gY29tbWl0IiBvdXRwdXQKKycKKworY2F0ID5zdGF0dXNfZXhwZWN0IDw8XEVPRgorQUEgLmdpdG1vZHVsZXMKK0EgIHN1YjEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBtZXJnZSBjb25mbGljdCBpbiAuZ2l0bW9kdWxlcycgJworCWdpdCBjbG9uZSAuIHN1cGVyICYmCisJdGVzdF9jcmVhdGVfcmVwb193aXRoX2NvbW1pdCBzdWIxICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9jcmVhdGVfcmVwb193aXRoX2NvbW1pdCBzdWIyICYmCisJKAorCQljZCBzdXBlciAmJgorCQlwcmV2PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYWRkX3N1YjEgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3ViMSAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc3ViMSIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGFkZF9zdWIyICRwcmV2ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1YjIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIHN1YjIiICYmCisJCWdpdCBjaGVja291dCAtYiBtZXJnZV9jb25mbGljdF9naXRtb2R1bGVzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBhZGRfc3ViMSAmJgorCQlnaXQgc3RhdHVzIC1zID4uLi9zdGF0dXNfYWN0dWFsIDI+JjEKKwkpICYmCisJdGVzdF9jbXAgc3RhdHVzX2FjdHVhbCBzdGF0dXNfZXhwZWN0CisnCisKK3NoYTFfbWVyZ2Vfc3ViMT0kKGNkIHN1YjEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorc2hhMV9tZXJnZV9zdWIyPSQoY2Qgc3ViMiAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCitzaG9ydF9zaGExX21lcmdlX3N1YjE9JChjZCBzdWIxICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKQorc2hvcnRfc2hhMV9tZXJnZV9zdWIyPSQoY2Qgc3ViMiAmJiBnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkKK2NhdCA+ZGlmZl9leHBlY3QgPDxcRU9GCitkaWZmIC0tY2MgLmdpdG1vZHVsZXMKK2luZGV4IGJhZGFhNGMsNDRmOTk5YS4uMDAwMDAwMAorLS0tIGEvLmdpdG1vZHVsZXMKKysrKyBiLy5naXRtb2R1bGVzCitAQEAgLTEsMyAtMSwzICsxLDkgQEBACisrKzw8PDw8PDwgSEVBRAorICtbc3VibW9kdWxlICJzdWIyIl0KKyArCXBhdGggPSBzdWIyCisgKwl1cmwgPSAuLi9zdWIyCisrKz09PT09PT0KKysgW3N1Ym1vZHVsZSAic3ViMSJdCisrIAlwYXRoID0gc3ViMQorKyAJdXJsID0gLi4vc3ViMQorKys+Pj4+Pj4+IGFkZF9zdWIxCitFT0YKKworY2F0ID5kaWZmX3N1Ym1vZHVsZV9leHBlY3QgPDxcRU9GCitkaWZmIC0tY2MgLmdpdG1vZHVsZXMKK2luZGV4IGJhZGFhNGMsNDRmOTk5YS4uMDAwMDAwMAorLS0tIGEvLmdpdG1vZHVsZXMKKysrKyBiLy5naXRtb2R1bGVzCitAQEAgLTEsMyAtMSwzICsxLDkgQEBACisrKzw8PDw8PDwgSEVBRAorICtbc3VibW9kdWxlICJzdWIyIl0KKyArCXBhdGggPSBzdWIyCisgKwl1cmwgPSAuLi9zdWIyCisrKz09PT09PT0KKysgW3N1Ym1vZHVsZSAic3ViMSJdCisrIAlwYXRoID0gc3ViMQorKyAJdXJsID0gLi4vc3ViMQorKys+Pj4+Pj4+IGFkZF9zdWIxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiB3aXRoIG1lcmdlIGNvbmZsaWN0IGluIC5naXRtb2R1bGVzJyAnCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgZGlmZiA+Li4vZGlmZl9hY3R1YWwgMj4mMQorCSkgJiYKKwl0ZXN0X2NtcCBkaWZmX2V4cGVjdCBkaWZmX2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tc3VibW9kdWxlIHdpdGggbWVyZ2UgY29uZmxpY3QgaW4gLmdpdG1vZHVsZXMnICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBkaWZmIC0tc3VibW9kdWxlID4uLi9kaWZmX3N1Ym1vZHVsZV9hY3R1YWwgMj4mMQorCSkgJiYKKwl0ZXN0X2NtcCBkaWZmX3N1Ym1vZHVsZV9leHBlY3QgZGlmZl9zdWJtb2R1bGVfYWN0dWFsCisnCisKKyMgV2UnbGwgc2V0dXAgZGlmZmVyZW50IGNhc2VzIGZvciBmdXJ0aGVyIHRlc3Rpbmc6CisjIHN1YjEgd2lsbCBjb250YWluIGEgbmVzdGVkIHN1Ym1vZHVsZSwKKyMgc3ViMiB3aWxsIGhhdmUgYW4gdW50cmFja2VkIGZpbGUKKyMgc3ViMyB3aWxsIGhhdmUgYW4gdW50cmFja2VkIHJlcG9zaXRvcnkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN1cGVycHJvamVjdCB3aXRoIHVudHJhY2tlZCBmaWxlIGluIG5lc3RlZCBzdWJtb2R1bGUnICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBjbGVhbiAtZGZ4ICYmCisJCWdpdCBybSAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29tbWl0IC1tICJyZW1vdmUgLmdpdG1vZHVsZXMiICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC1mIC4vc3ViMSAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAtZiAuL3N1YjIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLWYgLi9zdWIxIHN1YjMgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAibWVzc3kgbWVyZ2UgaW4gc3VwZXJwcm9qZWN0IiAmJgorCQkoCisJCQljZCBzdWIxICYmCisJCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWIyICYmCisJCQlnaXQgY29tbWl0IC1hIC1tICJhZGQgc3ViMiB0byBzdWIxIgorCQkpICYmCisJCWdpdCBhZGQgc3ViMSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJ1cGRhdGUgc3ViMSB0byBjb250YWluIG5lc3RlZCBzdWIiCisJKSAmJgorCWVjaG8gY29udGVudCA+c3VwZXIvc3ViMS9zdWIyL2ZpbGUgJiYKKwllY2hvIGNvbnRlbnQgPnN1cGVyL3N1YjIvZmlsZSAmJgorCWdpdCAtQyBzdXBlci9zdWIzIGNsb25lIC4uLy4uL3N1YjIgdW50cmFja2VkX3JlcG9zaXRvcnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggdW50cmFja2VkIGZpbGUgaW4gbmVzdGVkIHN1Ym1vZHVsZSAocG9yY2VsYWluKScgJworCWdpdCAtQyBzdXBlciBzdGF0dXMgLS1wb3JjZWxhaW4gPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBNIHN1YjEKKwkgTSBzdWIyCisJIE0gc3ViMworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCB1bnRyYWNrZWQgZmlsZSBpbiBuZXN0ZWQgc3VibW9kdWxlIChwb3JjZWxhaW49MiknICcKKwlnaXQgLUMgc3VwZXIgc3RhdHVzIC0tcG9yY2VsYWluPTIgPm91dHB1dCAmJgorCXNhbml0aXplX291dHB1dCBvdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkxIC5NIFMuLlUgMTYwMDAwIDE2MDAwMCAxNjAwMDAgSEFTSCBIQVNIIHN1YjEKKwkxIC5NIFMuLlUgMTYwMDAwIDE2MDAwMCAxNjAwMDAgSEFTSCBIQVNIIHN1YjIKKwkxIC5NIFMuLlUgMTYwMDAwIDE2MDAwMCAxNjAwMDAgSEFTSCBIQVNIIHN1YjMKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggdW50cmFja2VkIGZpbGUgaW4gbmVzdGVkIHN1Ym1vZHVsZSAoc2hvcnQpJyAnCisJZ2l0IC1DIHN1cGVyIHN0YXR1cyAtLXNob3J0ID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgPyBzdWIxCisJID8gc3ViMgorCSA/IHN1YjMKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3VwZXJwcm9qZWN0IHdpdGggbW9kaWZpZWQgZmlsZSBpbiBuZXN0ZWQgc3VibW9kdWxlJyAnCisJZ2l0IC1DIHN1cGVyL3N1YjEvc3ViMiBhZGQgZmlsZSAmJgorCWdpdCAtQyBzdXBlci9zdWIyIGFkZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGZpbGUgaW4gbmVzdGVkIHN1Ym1vZHVsZSAocG9yY2VsYWluKScgJworCWdpdCAtQyBzdXBlciBzdGF0dXMgLS1wb3JjZWxhaW4gPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBNIHN1YjEKKwkgTSBzdWIyCisJIE0gc3ViMworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBhZGRlZCBmaWxlIGluIG5lc3RlZCBzdWJtb2R1bGUgKHBvcmNlbGFpbj0yKScgJworCWdpdCAtQyBzdXBlciBzdGF0dXMgLS1wb3JjZWxhaW49MiA+b3V0cHV0ICYmCisJc2FuaXRpemVfb3V0cHV0IG91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCTEgLk0gUy5NLiAxNjAwMDAgMTYwMDAwIDE2MDAwMCBIQVNIIEhBU0ggc3ViMQorCTEgLk0gUy5NLiAxNjAwMDAgMTYwMDAwIDE2MDAwMCBIQVNIIEhBU0ggc3ViMgorCTEgLk0gUy4uVSAxNjAwMDAgMTYwMDAwIDE2MDAwMCBIQVNIIEhBU0ggc3ViMworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBhZGRlZCBmaWxlIGluIG5lc3RlZCBzdWJtb2R1bGUgKHNob3J0KScgJworCWdpdCAtQyBzdXBlciBzdGF0dXMgLS1zaG9ydCA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIG0gc3ViMQorCSBtIHN1YjIKKwkgPyBzdWIzCisJRU9GCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwNy1jb21taXQtdmVyYm9zZS5zaCBiL3QvdDc1MDctY29tbWl0LXZlcmJvc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWQyNjUzZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDctY29tbWl0LXZlcmJvc2Uuc2gKQEAgLTAsMCArMSwxNTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd2ZXJib3NlIGNvbW1pdCB0ZW1wbGF0ZScKKy4gLi90ZXN0LWxpYi5zaAorCit3cml0ZV9zY3JpcHQgImNoZWNrLWZvci1kaWZmIiA8PFxFT0YgJiYKK2dyZXAgJ15kaWZmIC0tZ2l0JyAiJDEiID5vdXQKK2V4aXQgMAorRU9GCit0ZXN0X3NldF9lZGl0b3IgIiRQV0QvY2hlY2stZm9yLWRpZmYiCisKK2NhdCA+bWVzc2FnZSA8PCdFT0YnCitzdWJqZWN0CisKK2JvZHkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLUYgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsIGNvbW1pdCBzaG93cyB2ZXJib3NlIGRpZmYnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgLXYgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWNvbmQgY29tbWl0JyAnCisJZWNobyBjb250ZW50IG1vZGlmaWVkID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtRiBtZXNzYWdlCisnCisKK2NoZWNrX21lc3NhZ2UoKSB7CisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXMlbiVuJWIgPmFjdHVhbCAmJgorCXRlc3RfY21wICIkMSIgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmJvc2UgZGlmZiBpcyBzdHJpcHBlZCBvdXQnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgLXYgJiYKKwljaGVja19tZXNzYWdlIG1lc3NhZ2UgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJib3NlIGRpZmYgaXMgc3RyaXBwZWQgb3V0IChtbmVtb25pY3ByZWZpeCknICcKKwlnaXQgY29uZmlnIGRpZmYubW5lbW9uaWNwcmVmaXggdHJ1ZSAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtdiAmJgorCWNoZWNrX21lc3NhZ2UgbWVzc2FnZSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0CisnCisKK2NhdCA+ZGlmZiA8PCdFT0YnCitUaGlzIGlzIGFuIGV4YW1wbGUgY29tbWl0IG1lc3NhZ2UgdGhhdCBjb250YWlucyBhIGRpZmYuCisKK2RpZmYgLS1naXQgYy9maWxlIGkvZmlsZQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmY5NWMxMWQKKy0tLSAvZGV2L251bGwKKysrKyBpL2ZpbGUKK0BAIC0wLDAgKzEgQEAKKyt0aGlzIGlzIHNvbWUgY29udGVudAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgaW4gbWVzc2FnZSBpcyByZXRhaW5lZCB3aXRob3V0IC12JyAnCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1GIGRpZmYgJiYKKwljaGVja19tZXNzYWdlIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBpbiBtZXNzYWdlIGlzIHJldGFpbmVkIHdpdGggLXYnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgLUYgZGlmZiAtdiAmJgorCWNoZWNrX21lc3NhZ2UgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgbG9nIGlzIHN0cmlwcGVkIG91dCB0b28gd2l0aCAtdicgJworCWdpdCBjb25maWcgZGlmZi5zdWJtb2R1bGUgbG9nICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi8uIHN1YiAmJgorCWdpdCBjb21taXQgLW0gInN1YiBhZGRlZCIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQllY2hvICJtb3JlIiA+PmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAic3VibW9kdWxlIGNvbW1pdCIKKwkpICYmCisJKAorCQlHSVRfRURJVE9SPWNhdCAmJgorCQlleHBvcnQgR0lUX0VESVRPUiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1hIC12IDI+ZXJyCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyYm9zZSBkaWZmIGlzIHN0cmlwcGVkIG91dCB3aXRoIHNldCBjb3JlLmNvbW1lbnRDaGFyJyAnCisJKAorCQlHSVRfRURJVE9SPWNhdCAmJgorCQlleHBvcnQgR0lUX0VESVRPUiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgY29yZS5jb21tZW50Y2hhcj0iOyIgY29tbWl0IC1hIC12IDI+ZXJyCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGRvZXMgbm90IHZlcmJvc2Ugd2l0aG91dCAtLXZlcmJvc2UnICcKKwlnaXQgc3RhdHVzID5hY3R1YWwgJiYKKwkhIGdyZXAgIl5kaWZmIC0tZ2l0IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLXYgLXYnICcKKwllY2hvIGRpcnR5ID5maWxlCisnCisKK2ZvciBpIGluIHRydWUgMQorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21taXQudmVyYm9zZT0kaSBhbmQgLS12ZXJib3NlIG9taXR0ZWQiICIKKwkJZ2l0IC1jIGNvbW1pdC52ZXJib3NlPSRpIGNvbW1pdCAtLWFtZW5kICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0CisJIgorZG9uZQorCitmb3IgaSBpbiBmYWxzZSAtMiAtMSAwCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbW1pdC52ZXJib3NlPSRpIGFuZCAtLXZlcmJvc2Ugb21pdHRlZCIgIgorCQlnaXQgLWMgY29tbWl0LnZlcmJvc2U9JGkgY29tbWl0IC0tYW1lbmQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBvdXQKKwkiCitkb25lCisKK2ZvciBpIGluIDIgMworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21taXQudmVyYm9zZT0kaSBhbmQgLS12ZXJib3NlIG9taXR0ZWQiICIKKwkJZ2l0IC1jIGNvbW1pdC52ZXJib3NlPSRpIGNvbW1pdCAtLWFtZW5kICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0CisJIgorZG9uZQorCitmb3IgaSBpbiB0cnVlIGZhbHNlIC0yIC0xIDAgMSAyIDMKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tbWl0LnZlcmJvc2U9JGkgYW5kIC0tdmVyYm9zZSIgIgorCQlnaXQgLWMgY29tbWl0LnZlcmJvc2U9JGkgY29tbWl0IC0tYW1lbmQgLS12ZXJib3NlICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0CisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tbWl0LnZlcmJvc2U9JGkgYW5kIC0tbm8tdmVyYm9zZSIgIgorCQlnaXQgLWMgY29tbWl0LnZlcmJvc2U9JGkgY29tbWl0IC0tYW1lbmQgLS1uby12ZXJib3NlICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0CisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tbWl0LnZlcmJvc2U9JGkgYW5kIC12IC12IiAiCisJCWdpdCAtYyBjb21taXQudmVyYm9zZT0kaSBjb21taXQgLS1hbWVuZCAtdiAtdiAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dAorCSIKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic3RhdHVzIGlnbm9yZXMgY29tbWl0LnZlcmJvc2U9dHJ1ZSIgJworCWdpdCAtYyBjb21taXQudmVyYm9zZT10cnVlIHN0YXR1cyA+YWN0dWFsICYmCisJISBncmVwICJeZGlmZiAtLWdpdCBhY3R1YWwiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwOC1zdGF0dXMuc2ggYi90L3Q3NTA4LXN0YXR1cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZTk2OWYzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwOC1zdGF0dXMuc2gKQEAgLTAsMCArMSwxNjIwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN0YXR1cycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLWggaW4gYnJva2VuIHJlcG9zaXRvcnknICcKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIGFkdmljZS5zdGF0dXN1b3B0aW9uIGZhbHNlICYmCisJbWtkaXIgYnJva2VuICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgYnJva2VuIiAmJgorCSgKKwkJY2QgYnJva2VuICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gIltzdGF0dXNdIHNob3d1bnRyYWNrZWRmaWxlcyA9IENPUlJVUFQiID4+LmdpdC9jb25maWcgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IHN0YXR1cyAtaCA+dXNhZ2UgMj4mMQorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZSIgYnJva2VuL3VzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtaCBpbiBicm9rZW4gcmVwb3NpdG9yeScgJworCW1rZGlyIGJyb2tlbiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIGJyb2tlbiIgJiYKKwkoCisJCWNkIGJyb2tlbiAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvICJbc3RhdHVzXSBzaG93dW50cmFja2VkZmlsZXMgPSBDT1JSVVBUIiA+Pi5naXQvY29uZmlnICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBjb21taXQgLWggPnVzYWdlIDI+JjEKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiW1V1XXNhZ2UiIGJyb2tlbi91c2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgdXBzdHJlYW0gYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHVwc3RyZWFtICYmCisJdGVzdF9jb21taXQgdXBzdHJlYW0xICYmCisJdGVzdF9jb21taXQgdXBzdHJlYW0yICYmCisJIyBsZWF2ZSB0aGUgZmlyc3QgY29tbWl0IG9uIG1hc3RlciBhcyByb290IGJlY2F1c2Ugc2V2ZXJhbAorCSMgdGVzdHMgZGVwZW5kIG9uIHRoaXMgY2FzZTsgZm9yIG91ciB1cHN0cmVhbSB3ZSBvbmx5CisJIyBjYXJlIGFib3V0IGNvbW1pdCBjb3VudHMgYW55d2F5LCBzbyBhIHRvdGFsbHkgZGl2ZXJnZW50CisJIyBoaXN0b3J5IGlzIE9LCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCTogPnRyYWNrZWQgJiYKKwk6ID5tb2RpZmllZCAmJgorCW1rZGlyIGRpcjEgJiYKKwk6ID5kaXIxL3RyYWNrZWQgJiYKKwk6ID5kaXIxL21vZGlmaWVkICYmCisJbWtkaXIgZGlyMiAmJgorCTogPmRpcjEvdHJhY2tlZCAmJgorCTogPmRpcjEvbW9kaWZpZWQgJiYKKwlnaXQgYWRkIC4gJiYKKworCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJOiA+dW50cmFja2VkICYmCisJOiA+ZGlyMS91bnRyYWNrZWQgJiYKKwk6ID5kaXIyL3VudHJhY2tlZCAmJgorCWVjaG8gMSA+ZGlyMS9tb2RpZmllZCAmJgorCWVjaG8gMiA+ZGlyMi9tb2RpZmllZCAmJgorCWVjaG8gMyA+ZGlyMi9hZGRlZCAmJgorCWdpdCBhZGQgZGlyMi9hZGRlZCAmJgorCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz11cHN0cmVhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgKDEpJyAnCisJdGVzdF9pMThuZ3JlcCAidXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPlwuXC5cLlwiIHRvIHVuc3RhZ2UiIG91dHB1dAorJworCitzdHJpcF9jb21tZW50cyAoKSB7CisJdGFiPScJJworCXNlZCAicy9eXCMgLy87IHMvXlwjJC8vOyBzL14jJHRhYi8kdGFiLyIgPCIkMSIgPiIkMSIudG1wICYmCisJcm0gIiQxIiAmJiBtdiAiJDEiLnRtcCAiJDEiCit9CisKK2NhdCA+LmdpdGlnbm9yZSA8PFxFT0YKKy5naXRpZ25vcmUKK2V4cGVjdCoKK291dHB1dCoKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLS1jb2x1bW4nICcKKwljYXQgPmV4cGVjdCA8PFxFT0YgJiYKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorIyBhbmQgaGF2ZSAxIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKyMgICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKyMKKyMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisjICAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorIwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisjCisjIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMgICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKyMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMJZGlyMS91bnRyYWNrZWQgZGlyMi91bnRyYWNrZWQKKyMJZGlyMi9tb2RpZmllZCAgdW50cmFja2VkCisjCitFT0YKKwlDT0xVTU5TPTUwIGdpdCAtYyBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9dHJ1ZSBzdGF0dXMgLS1jb2x1bW49ImNvbHVtbiBkZW5zZSIgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLWNvbHVtbiBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9ZmFsc2UnICcKKwlzdHJpcF9jb21tZW50cyBleHBlY3QgJiYKKwlDT0xVTU5TPTQ5IGdpdCAtYyBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9ZmFsc2Ugc3RhdHVzIC0tY29sdW1uPSJjb2x1bW4gZGVuc2UiID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBZb3VyIGJyYW5jaCBhbmQgJ3Vwc3RyZWFtJyBoYXZlIGRpdmVyZ2VkLAorIyBhbmQgaGF2ZSAxIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKyMgICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKyMKKyMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisjICAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorIwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisjCisjIENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMgICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKyMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMJZGlyMS91bnRyYWNrZWQKKyMJZGlyMi9tb2RpZmllZAorIwlkaXIyL3VudHJhY2tlZAorIwl1bnRyYWNrZWQKKyMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9dHJ1ZScgJworCWdpdCAtYyBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9dHJ1ZSBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD1mYWxzZScgJworCXN0cmlwX2NvbW1lbnRzIGV4cGVjdCAmJgorCWdpdCAtYyBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9ZmFsc2Ugc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXYnICcKKwkoY2F0IGV4cGVjdCAmJiBnaXQgZGlmZiAtLWNhY2hlZCkgPmV4cGVjdC13aXRoLXYgJiYKKwlnaXQgc3RhdHVzIC12ID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LXdpdGgtdiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC12IC12JyAnCisJKGNhdCBleHBlY3QgJiYKKwkgZWNobyAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IiAmJgorCSBnaXQgLWMgZGlmZi5tbmVtb25pY3ByZWZpeD10cnVlIGRpZmYgLS1jYWNoZWQgJiYKKwkgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iICYmCisJIGVjaG8gIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIgJiYKKwkgZ2l0IC1jIGRpZmYubW5lbW9uaWNwcmVmaXg9dHJ1ZSBkaWZmKSA+ZXhwZWN0LXdpdGgtdiAmJgorCWdpdCBzdGF0dXMgLXYgLXYgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qtd2l0aC12IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmYWtlIGVkaXRvcicgJworCWNhdCA+LmdpdC9lZGl0b3IgPDwtXEVPRiAmJgorCSMhIC9iaW4vc2gKKwljcCAiJDEiIG91dHB1dAorRU9GCisJY2htb2QgNzU1IC5naXQvZWRpdG9yCisnCisKK2NvbW1pdF90ZW1wbGF0ZV9jb21tZW50ZWQgKCkgeworCSgKKwkJRURJVE9SPS5naXQvZWRpdG9yICYmCisJCWV4cG9ydCBFRElUT1IgJiYKKwkJIyBGYWlscyBkdWUgdG8gZW1wdHkgbWVzc2FnZQorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0CisJKSAmJgorCSEgZ3JlcCAnXlteI10nIG91dHB1dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgaWdub3JlcyBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9ZmFsc2UgaW4gQ09NTUlUX0VESVRNU0cnICcKKwljb21taXRfdGVtcGxhdGVfY29tbWVudGVkCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorT24gYnJhbmNoIG1hc3RlcgorWW91ciBicmFuY2ggYW5kICd1cHN0cmVhbScgaGF2ZSBkaXZlcmdlZCwKK2FuZCBoYXZlIDEgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworVW50cmFja2VkIGZpbGVzOgorCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJdW50cmFja2VkCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgKGFkdmljZS5zdGF0dXNIaW50cyBmYWxzZSknICcKKwl0ZXN0X2NvbmZpZyBhZHZpY2Uuc3RhdHVzSGludHMgZmFsc2UgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyB1bnRyYWNrZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMnICcKKworCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBnaXRpZ25vcmUnICcKKwl7CisJCWVjaG8gIi5naXRpZ25vcmUiICYmCisJCWVjaG8gImV4cGVjdCoiICYmCisJCWVjaG8gIm91dHB1dCIgJiYKKwkJZWNobyAidW50cmFja2VkIgorCX0gPi5naXRpZ25vcmUgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgTSBkaXIxL21vZGlmaWVkCisJQSAgZGlyMi9hZGRlZAorCT8/IGRpcjIvbW9kaWZpZWQKKwlFT0YKKwlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0ICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZGlyMS9tb2RpZmllZAorCUEgIGRpcjIvYWRkZWQKKwk/PyBkaXIyL21vZGlmaWVkCisJISEgLmdpdGlnbm9yZQorCSEhIGRpcjEvdW50cmFja2VkCisJISEgZGlyMi91bnRyYWNrZWQKKwkhISBleHBlY3QKKwkhISBleHBlY3Qtd2l0aC12CisJISEgb3V0cHV0CisJISEgdW50cmFja2VkCisJRU9GCisJZ2l0IHN0YXR1cyAtcyAtLWlnbm9yZWQgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQgJiYKKworCWNhdCA+ZXhwZWN0IDw8XEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91ciBicmFuY2ggYW5kICdcJyd1cHN0cmVhbSdcJycgaGF2ZSBkaXZlcmdlZCwKK2FuZCBoYXZlIDEgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworVW50cmFja2VkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCWRpcjIvbW9kaWZpZWQKKworSWdub3JlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCAtZiA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKwkuZ2l0aWdub3JlCisJZGlyMS91bnRyYWNrZWQKKwlkaXIyL3VudHJhY2tlZAorCWV4cGVjdAorCWV4cGVjdC13aXRoLXYKKwlvdXRwdXQKKwl1bnRyYWNrZWQKKworRU9GCisJZ2l0IHN0YXR1cyAtLWlnbm9yZWQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGdpdGlnbm9yZSAobm90aGluZyB1bnRyYWNrZWQpJyAnCisJeworCQllY2hvICIuZ2l0aWdub3JlIiAmJgorCQllY2hvICJleHBlY3QqIiAmJgorCQllY2hvICJkaXIyL21vZGlmaWVkIiAmJgorCQllY2hvICJvdXRwdXQiICYmCisJCWVjaG8gInVudHJhY2tlZCIKKwl9ID4uZ2l0aWdub3JlICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZGlyMS9tb2RpZmllZAorCUEgIGRpcjIvYWRkZWQKKwlFT0YKKwlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0ICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZGlyMS9tb2RpZmllZAorCUEgIGRpcjIvYWRkZWQKKwkhISAuZ2l0aWdub3JlCisJISEgZGlyMS91bnRyYWNrZWQKKwkhISBkaXIyL21vZGlmaWVkCisJISEgZGlyMi91bnRyYWNrZWQKKwkhISBleHBlY3QKKwkhISBleHBlY3Qtd2l0aC12CisJISEgb3V0cHV0CisJISEgdW50cmFja2VkCisJRU9GCisJZ2l0IHN0YXR1cyAtcyAtLWlnbm9yZWQgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQgJiYKKworCWNhdCA+ZXhwZWN0IDw8XEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91ciBicmFuY2ggYW5kICdcJyd1cHN0cmVhbSdcJycgaGF2ZSBkaXZlcmdlZCwKK2FuZCBoYXZlIDEgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworSWdub3JlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCAtZiA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKwkuZ2l0aWdub3JlCisJZGlyMS91bnRyYWNrZWQKKwlkaXIyL21vZGlmaWVkCisJZGlyMi91bnRyYWNrZWQKKwlleHBlY3QKKwlleHBlY3Qtd2l0aC12CisJb3V0cHV0CisJdW50cmFja2VkCisKK0VPRgorCWdpdCBzdGF0dXMgLS1pZ25vcmVkID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPi5naXRpZ25vcmUgPDxcRU9GCisuZ2l0aWdub3JlCitleHBlY3QqCitvdXRwdXQqCitFT0YKKworY2F0ID5leHBlY3QgPDxcRU9GCisjIyBtYXN0ZXIuLi51cHN0cmVhbSBbYWhlYWQgMSwgYmVoaW5kIDJdCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IHVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyAtYicgJworCisJZ2l0IHN0YXR1cyAtcyAtYiA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLXogLWInICcKKwl0ciAiXFxuIiBRIDxleHBlY3QgPmV4cGVjdC5xICYmCisJbXYgZXhwZWN0LnEgZXhwZWN0ICYmCisJZ2l0IHN0YXR1cyAtcyAteiAtYiA+b3V0cHV0ICYmCisJbnVsX3RvX3EgPG91dHB1dCA+b3V0cHV0LnEgJiYKKwltdiBvdXRwdXQucSBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkaXIzJyAnCisJbWtkaXIgZGlyMyAmJgorCTogPmRpcjMvdW50cmFja2VkMSAmJgorCTogPmRpcjMvdW50cmFja2VkMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXVubycgJworCWNhdCA+ZXhwZWN0IDw8RU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMSBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLXVubyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIChzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzIG5vKScgJworCXRlc3RfY29uZmlnIHN0YXR1cy5zaG93dW50cmFja2VkZmlsZXMgbm8gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXVubyAoYWR2aWNlLnN0YXR1c0hpbnRzIGZhbHNlKScgJworCWNhdCA+ZXhwZWN0IDw8RU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMSBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZAorRU9GCisJdGVzdF9jb25maWcgYWR2aWNlLnN0YXR1c0hpbnRzIGZhbHNlICYmCisJZ2l0IHN0YXR1cyAtdW5vID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PCBFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIC11bm8nICcKKwlnaXQgc3RhdHVzIC1zIC11bm8gPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIChzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzIG5vKScgJworCWdpdCBjb25maWcgc3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyBubyAmJgorCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC11bm9ybWFsJyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK1lvdXIgYnJhbmNoIGFuZCAnXCcndXBzdHJlYW0nXCcnIGhhdmUgZGl2ZXJnZWQsCithbmQgaGF2ZSAxIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKyAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1VudHJhY2tlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCWRpcjMvCisJdW50cmFja2VkCisKK0VPRgorCWdpdCBzdGF0dXMgLXVub3JtYWwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAoc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlcyBub3JtYWwpJyAnCisJdGVzdF9jb25maWcgc3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyBub3JtYWwgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyBkaXIzLworPz8gdW50cmFja2VkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyAtdW5vcm1hbCcgJworCWdpdCBzdGF0dXMgLXMgLXVub3JtYWwgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIChzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzIG5vcm1hbCknICcKKwlnaXQgY29uZmlnIHN0YXR1cy5zaG93dW50cmFja2VkZmlsZXMgbm9ybWFsICYmCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXVhbGwnICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91ciBicmFuY2ggYW5kICdcJyd1cHN0cmVhbSdcJycgaGF2ZSBkaXZlcmdlZCwKK2FuZCBoYXZlIDEgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworVW50cmFja2VkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJZGlyMy91bnRyYWNrZWQxCisJZGlyMy91bnRyYWNrZWQyCisJdW50cmFja2VkCisKK0VPRgorCWdpdCBzdGF0dXMgLXVhbGwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAoc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlcyBhbGwpJyAnCisJdGVzdF9jb25maWcgc3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyBhbGwgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZWFyZG93biBkaXIzJyAnCisJcm0gLXJmIGRpcjMKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gdW50cmFja2VkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyAtdWFsbCcgJworCXRlc3RfdW5jb25maWcgc3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyAmJgorCWdpdCBzdGF0dXMgLXMgLXVhbGwgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyAoc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlcyBhbGwpJyAnCisJdGVzdF9jb25maWcgc3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyBhbGwgJiYKKwlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwlybSAtcmYgZGlyMyAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggcmVsYXRpdmUgcGF0aHMnICcKKwljYXQgPmV4cGVjdCA8PFxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK1lvdXIgYnJhbmNoIGFuZCAnXCcndXBzdHJlYW0nXCcnIGhhdmUgZGl2ZXJnZWQsCithbmQgaGF2ZSAxIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKyAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisJbmV3IGZpbGU6ICAgLi4vZGlyMi9hZGRlZAorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwltb2RpZmllZDogICBtb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisJdW50cmFja2VkCisJLi4vZGlyMi9tb2RpZmllZAorCS4uL2RpcjIvdW50cmFja2VkCisJLi4vdW50cmFja2VkCisKK0VPRgorCShjZCBkaXIxICYmIGdpdCBzdGF0dXMpID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyBNIG1vZGlmaWVkCitBICAuLi9kaXIyL2FkZGVkCis/PyB1bnRyYWNrZWQKKz8/IC4uL2RpcjIvbW9kaWZpZWQKKz8/IC4uL2RpcjIvdW50cmFja2VkCis/PyAuLi91bnRyYWNrZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIHdpdGggcmVsYXRpdmUgcGF0aHMnICcKKworCShjZCBkaXIxICYmIGdpdCBzdGF0dXMgLXMpID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IHVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLXBvcmNlbGFpbiBpZ25vcmVzIHJlbGF0aXZlIHBhdGhzIHNldHRpbmcnICcKKworCShjZCBkaXIxICYmIGdpdCBzdGF0dXMgLS1wb3JjZWxhaW4pID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdW5pcXVlIGNvbG9ycycgJworCisJZ2l0IGNvbmZpZyBzdGF0dXMuY29sb3IudW50cmFja2VkIGJsdWUgJiYKKwlnaXQgY29uZmlnIHN0YXR1cy5jb2xvci5icmFuY2ggZ3JlZW4gJiYKKwlnaXQgY29uZmlnIHN0YXR1cy5jb2xvci5sb2NhbEJyYW5jaCB5ZWxsb3cgJiYKKwlnaXQgY29uZmlnIHN0YXR1cy5jb2xvci5yZW1vdGVCcmFuY2ggY3lhbgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdzdGF0dXMgd2l0aCBjb2xvci51aScgJworCWNhdCA+ZXhwZWN0IDw8XEVPRiAmJgorT24gYnJhbmNoIDxHUkVFTj5tYXN0ZXI8UkVTRVQ+CitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMSBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCTxHUkVFTj5uZXcgZmlsZTogICBkaXIyL2FkZGVkPFJFU0VUPgorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwk8UkVEPm1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQ8UkVTRVQ+CisKK1VudHJhY2tlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKwk8QkxVRT5kaXIxL3VudHJhY2tlZDxSRVNFVD4KKwk8QkxVRT5kaXIyL21vZGlmaWVkPFJFU0VUPgorCTxCTFVFPmRpcjIvdW50cmFja2VkPFJFU0VUPgorCTxCTFVFPnVudHJhY2tlZDxSRVNFVD4KKworRU9GCisJdGVzdF9jb25maWcgY29sb3IudWkgYXV0byAmJgorCXRlc3RfdGVybWluYWwgZ2l0IHN0YXR1cyB8IHRlc3RfZGVjb2RlX2NvbG9yID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnc3RhdHVzIHdpdGggY29sb3Iuc3RhdHVzJyAnCisJdGVzdF9jb25maWcgY29sb3Iuc3RhdHVzIGF1dG8gJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBzdGF0dXMgfCB0ZXN0X2RlY29kZV9jb2xvciA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisgPFJFRD5NPFJFU0VUPiBkaXIxL21vZGlmaWVkCis8R1JFRU4+QTxSRVNFVD4gIGRpcjIvYWRkZWQKKzxCTFVFPj8/PFJFU0VUPiBkaXIxL3VudHJhY2tlZAorPEJMVUU+Pz88UkVTRVQ+IGRpcjIvbW9kaWZpZWQKKzxCTFVFPj8/PFJFU0VUPiBkaXIyL3VudHJhY2tlZAorPEJMVUU+Pz88UkVTRVQ+IHVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdzdGF0dXMgLXMgd2l0aCBjb2xvci51aScgJworCisJZ2l0IGNvbmZpZyBjb2xvci51aSBhdXRvICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgc3RhdHVzIC1zIHwgdGVzdF9kZWNvZGVfY29sb3IgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnc3RhdHVzIC1zIHdpdGggY29sb3Iuc3RhdHVzJyAnCisKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29sb3IudWkgJiYKKwlnaXQgY29uZmlnIGNvbG9yLnN0YXR1cyBhdXRvICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgc3RhdHVzIC1zIHwgdGVzdF9kZWNvZGVfY29sb3IgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyMjIDxZRUxMT1c+bWFzdGVyPFJFU0VUPi4uLjxDWUFOPnVwc3RyZWFtPFJFU0VUPiBbYWhlYWQgPFlFTExPVz4xPFJFU0VUPiwgYmVoaW5kIDxDWUFOPjI8UkVTRVQ+XQorIDxSRUQ+TTxSRVNFVD4gZGlyMS9tb2RpZmllZAorPEdSRUVOPkE8UkVTRVQ+ICBkaXIyL2FkZGVkCis8QkxVRT4/PzxSRVNFVD4gZGlyMS91bnRyYWNrZWQKKzxCTFVFPj8/PFJFU0VUPiBkaXIyL21vZGlmaWVkCis8QkxVRT4/PzxSRVNFVD4gZGlyMi91bnRyYWNrZWQKKzxCTFVFPj8/PFJFU0VUPiB1bnRyYWNrZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnc3RhdHVzIC1zIC1iIHdpdGggY29sb3Iuc3RhdHVzJyAnCisKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBzdGF0dXMgLXMgLWIgfCB0ZXN0X2RlY29kZV9jb2xvciA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gdW50cmFja2VkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3N0YXR1cyAtLXBvcmNlbGFpbiBpZ25vcmVzIGNvbG9yLnVpJyAnCisKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29sb3Iuc3RhdHVzICYmCisJZ2l0IGNvbmZpZyBjb2xvci51aSBhdXRvICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgc3RhdHVzIC0tcG9yY2VsYWluIHwgdGVzdF9kZWNvZGVfY29sb3IgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnc3RhdHVzIC0tcG9yY2VsYWluIGlnbm9yZXMgY29sb3Iuc3RhdHVzJyAnCisKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29sb3IudWkgJiYKKwlnaXQgY29uZmlnIGNvbG9yLnN0YXR1cyBhdXRvICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgc3RhdHVzIC0tcG9yY2VsYWluIHwgdGVzdF9kZWNvZGVfY29sb3IgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCisjIHJlY292ZXIgdW5jb25kaXRpb25hbGx5IGZyb20gY29sb3IgdGVzdHMKK2dpdCBjb25maWcgLS11bnNldCBjb2xvci5zdGF0dXMKK2dpdCBjb25maWcgLS11bnNldCBjb2xvci51aQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLS1wb3JjZWxhaW4gcmVzcGVjdHMgLWInICcKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLWIgPm91dHB1dCAmJgorCXsKKwkJZWNobyAiIyMgbWFzdGVyLi4udXBzdHJlYW0gW2FoZWFkIDEsIGJlaGluZCAyXSIgJiYKKwkJY2F0IGV4cGVjdAorCX0gPnRtcCAmJgorCW12IHRtcCBleHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRob3V0IHJlbGF0aXZlIHBhdGhzJyAnCisJY2F0ID5leHBlY3QgPDxcRU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMSBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisJZGlyMS91bnRyYWNrZWQKKwlkaXIyL21vZGlmaWVkCisJZGlyMi91bnRyYWNrZWQKKwl1bnRyYWNrZWQKKworRU9GCisJdGVzdF9jb25maWcgc3RhdHVzLnJlbGF0aXZlUGF0aHMgZmFsc2UgJiYKKwkoY2QgZGlyMSAmJiBnaXQgc3RhdHVzKSA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gdW50cmFja2VkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIHdpdGhvdXQgcmVsYXRpdmUgcGF0aHMnICcKKworCXRlc3RfY29uZmlnIHN0YXR1cy5yZWxhdGl2ZVBhdGhzIGZhbHNlICYmCisJKGNkIGRpcjEgJiYgZ2l0IHN0YXR1cyAtcykgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkcnktcnVuIG9mIHBhcnRpYWwgY29tbWl0IGV4Y2x1ZGluZyBuZXcgZmlsZSBpbiBpbmRleCcgJworCWNhdCA+ZXhwZWN0IDw8RU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMSBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworVW50cmFja2VkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCWRpcjEvdW50cmFja2VkCisJZGlyMi8KKwl1bnRyYWNrZWQKKworRU9GCisJZ2l0IGNvbW1pdCAtLWRyeS1ydW4gZGlyMS9tb2RpZmllZCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzoxMDA2NDQgMTAwNjQ0ICRFTVBUWV9CTE9CIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTQlkaXIxL21vZGlmaWVkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyByZWZyZXNoZXMgdGhlIGluZGV4JyAnCisJdG91Y2ggZGlyMi9hZGRlZCAmJgorCWdpdCBzdGF0dXMgJiYKKwlnaXQgZGlmZi1maWxlcyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdGF0dXMgc3VibW9kdWxlIHN1bW1hcnknICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNtICYmICgKKwkJY2Qgc20gJiYKKwkJPmZvbyAmJgorCQlnaXQgYWRkIGZvbyAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgZm9vIgorCSkgJiYKKwlnaXQgYWRkIHNtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzdWJtb2R1bGUgc3VtbWFyeSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0JyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK1lvdXIgYnJhbmNoIGFuZCAnXCcndXBzdHJlYW0nXCcnIGhhdmUgZGl2ZXJnZWQsCithbmQgaGF2ZSAxIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKyAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAorCW5ldyBmaWxlOiAgIHNtCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworVW50cmFja2VkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJdW50cmFja2VkCisKK0VPRgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKKyMgd2UgZXhwZWN0IHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyB0ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9YWxsIGRvZXMgbm90IHNob3cgc3VibW9kdWxlJyAnCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1hbGwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCitBICBzbQorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyB1bnRyYWNrZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIHN1Ym1vZHVsZSBzdW1tYXJ5IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQnICcKKwlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKKyMgd2UgZXhwZWN0IHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyB0ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLS11bnRyYWNrZWQtZmlsZXM9YWxsIGRvZXMgbm90IHNob3cgc3VibW9kdWxlJyAnCisJZ2l0IHN0YXR1cyAtcyAtLXVudHJhY2tlZC1maWxlcz1hbGwgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworaGVhZD0kKGNkIHNtICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydD03IC0tdmVyaWZ5IEhFQUQpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzdWJtb2R1bGUgc3VtbWFyeScgJworCWNhdCA+ZXhwZWN0IDw8RU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMSBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKwluZXcgZmlsZTogICBzbQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1N1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKworKiBzbSAwMDAwMDAwLi4uJGhlYWQgKDEpOgorICA+IEFkZCBmb28KKworVW50cmFja2VkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJdW50cmFja2VkCisKK0VPRgorCWdpdCBjb25maWcgc3RhdHVzLnN1Ym1vZHVsZXN1bW1hcnkgMTAgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc3VibW9kdWxlIHN1bW1hcnkgd2l0aCBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9ZmFsc2UnICcKKwlzdHJpcF9jb21tZW50cyBleHBlY3QgJiYKKwlnaXQgLWMgc3RhdHVzLmRpc3BsYXlDb21tZW50UHJlZml4PWZhbHNlIHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IHdpdGggc3VibW9kdWxlIHN1bW1hcnkgaWdub3JlcyBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXgnICcKKwljb21taXRfdGVtcGxhdGVfY29tbWVudGVkCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCitBICBzbQorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyB1bnRyYWNrZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIHN1Ym1vZHVsZSBzdW1tYXJ5JyAnCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc3VibW9kdWxlIHN1bW1hcnkgKGNsZWFuIHN1Ym1vZHVsZSk6IGNvbW1pdCcgJworCWNhdCA+ZXhwZWN0IDw8RU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMiBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1VudHJhY2tlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCXVudHJhY2tlZAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IHN1Ym1vZHVsZSIgJiYKKwlnaXQgY29uZmlnIHN0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5IDEwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWRyeS1ydW4gPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gdW50cmFja2VkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyBzdWJtb2R1bGUgc3VtbWFyeSAoY2xlYW4gc3VibW9kdWxlKScgJworCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC16IGltcGxpZXMgcG9yY2VsYWluJyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiB8CisJcGVybCAtcGUgInMvXDAxMi9cMDAwL2ciID5leHBlY3QgJiYKKwlnaXQgc3RhdHVzIC16ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLWRyeS1ydW4gc3VibW9kdWxlIHN1bW1hcnkgKC0tYW1lbmQpJyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK1lvdXIgYnJhbmNoIGFuZCAnXCcndXBzdHJlYW0nXCcnIGhhdmUgZGl2ZXJnZWQsCithbmQgaGF2ZSAyIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKyAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEXjEgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKwluZXcgZmlsZTogICBzbQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1N1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKworKiBzbSAwMDAwMDAwLi4uJGhlYWQgKDEpOgorICA+IEFkZCBmb28KKworVW50cmFja2VkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJdW50cmFja2VkCisKK0VPRgorCWdpdCBjb25maWcgc3RhdHVzLnN1Ym1vZHVsZXN1bW1hcnkgMTAgJiYKKwlnaXQgY29tbWl0IC0tZHJ5LXJ1biAtLWFtZW5kID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ3N0YXR1cyBzdWNjZWVkcyBpbiBhIHJlYWQtb25seSByZXBvc2l0b3J5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjaG1vZCA3NzUgLmdpdCIgJiYKKwkoCisJCWNobW9kIGEtdyAuZ2l0ICYmCisJCSMgbWFrZSBkaXIxL3RyYWNrZWQgc3RhdC1kaXJ0eQorCQk+ZGlyMS90cmFja2VkMSAmJiBtdiAtZiBkaXIxL3RyYWNrZWQxIGRpcjEvdHJhY2tlZCAmJgorCQlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwkJISBncmVwIGRpcjEvdHJhY2tlZCBvdXRwdXQgJiYKKwkJIyBtYWtlIHN1cmUgInN0YXR1cyIgc3VjY2VlZGVkIHdpdGhvdXQgd3JpdGluZyBpbmRleCBvdXQKKwkJZ2l0IGRpZmYtZmlsZXMgfCBncmVwIGRpcjEvdHJhY2tlZAorCSkKKycKKworKGNkIHNtICYmIGVjaG8gPiBiYXIgJiYgZ2l0IGFkZCBiYXIgJiYgZ2l0IGNvbW1pdCAtcSAtbSAnQWRkIGJhcicpICYmIGdpdCBhZGQgc20KK25ld19oZWFkPSQoY2Qgc20gJiYgZ2l0IHJldi1wYXJzZSAtLXNob3J0PTcgLS12ZXJpZnkgSEVBRCkKK3RvdWNoIC5naXRtb2R1bGVzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkIHN1cHByZXNzZXMgc3VibW9kdWxlcyB3aXRoIHVudHJhY2tlZCBjb250ZW50JyAnCisJY2F0ID4gZXhwZWN0IDw8IEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91ciBicmFuY2ggYW5kICdcJyd1cHN0cmVhbSdcJycgaGF2ZSBkaXZlcmdlZCwKK2FuZCBoYXZlIDIgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKwltb2RpZmllZDogICBzbQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1N1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKworKiBzbSAkaGVhZC4uLiRuZXdfaGVhZCAoMSk6CisgID4gQWRkIGJhcgorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisJLmdpdG1vZHVsZXMKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCXVudHJhY2tlZAorCitFT0YKKwllY2hvIG1vZGlmaWVkICBzbS91bnRyYWNrZWQgJiYKKwlnaXQgc3RhdHVzIC0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0bW9kdWxlcyBpZ25vcmU9dW50cmFja2VkIHN1cHByZXNzZXMgc3VibW9kdWxlcyB3aXRoIHVudHJhY2tlZCBjb250ZW50JyAnCisJdGVzdF9jb25maWcgZGlmZi5pZ25vcmVTdWJtb2R1bGVzIGRpcnR5ICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSB1bnRyYWNrZWQgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdC9jb25maWcgaWdub3JlPXVudHJhY2tlZCBzdXBwcmVzc2VzIHN1Ym1vZHVsZXMgd2l0aCB1bnRyYWNrZWQgY29udGVudCcgJworCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIG5vbmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSB1bnRyYWNrZWQgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IHN1cHByZXNzZXMgc3VibW9kdWxlcyB3aXRoIHVudHJhY2tlZCBjb250ZW50JyAnCisJZ2l0IHN0YXR1cyAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0bW9kdWxlcyBpZ25vcmU9ZGlydHkgc3VwcHJlc3NlcyBzdWJtb2R1bGVzIHdpdGggdW50cmFja2VkIGNvbnRlbnQnICcKKwl0ZXN0X2NvbmZpZyBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMgZGlydHkgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwkhIHRlc3QgLXMgYWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdC9jb25maWcgaWdub3JlPWRpcnR5IHN1cHByZXNzZXMgc3VibW9kdWxlcyB3aXRoIHVudHJhY2tlZCBjb250ZW50JyAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGRpcnR5ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgc3VwcHJlc3NlcyBzdWJtb2R1bGVzIHdpdGggbW9kaWZpZWQgY29udGVudCcgJworCWVjaG8gbW9kaWZpZWQgPnNtL2ZvbyAmJgorCWdpdCBzdGF0dXMgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdG1vZHVsZXMgaWdub3JlPWRpcnR5IHN1cHByZXNzZXMgc3VibW9kdWxlcyB3aXRoIG1vZGlmaWVkIGNvbnRlbnQnICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBkaXJ0eSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0L2NvbmZpZyBpZ25vcmU9ZGlydHkgc3VwcHJlc3NlcyBzdWJtb2R1bGVzIHdpdGggbW9kaWZpZWQgY29udGVudCcgJworCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIG5vbmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBkaXJ0eSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWlnbm9yZS1zdWJtb2R1bGVzPXVudHJhY2tlZCBkb2Vzbid0IHN1cHByZXNzIHN1Ym1vZHVsZXMgd2l0aCBtb2RpZmllZCBjb250ZW50IiAnCisJY2F0ID4gZXhwZWN0IDw8IEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91ciBicmFuY2ggYW5kICdcJyd1cHN0cmVhbSdcJycgaGF2ZSBkaXZlcmdlZCwKK2FuZCBoYXZlIDIgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKwltb2RpZmllZDogICBzbQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKyAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKQorCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKwltb2RpZmllZDogICBzbSAobW9kaWZpZWQgY29udGVudCkKKworU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorCisqIHNtICRoZWFkLi4uJG5ld19oZWFkICgxKToKKyAgPiBBZGQgYmFyCisKK1VudHJhY2tlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKwkuZ2l0bW9kdWxlcworCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJdW50cmFja2VkCisKK0VPRgorCWdpdCBzdGF0dXMgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgPiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIuZ2l0bW9kdWxlcyBpZ25vcmU9dW50cmFja2VkIGRvZXNuJ3Qgc3VwcHJlc3Mgc3VibW9kdWxlcyB3aXRoIG1vZGlmaWVkIGNvbnRlbnQiICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSB1bnRyYWNrZWQgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLmdpdC9jb25maWcgaWdub3JlPXVudHJhY2tlZCBkb2Vzbid0IHN1cHByZXNzIHN1Ym1vZHVsZXMgd2l0aCBtb2RpZmllZCBjb250ZW50IiAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCitoZWFkMj0kKGNkIHNtICYmIGdpdCBjb21taXQgLXEgLW0gIjJuZCBjb21taXQiIGZvbyAmJiBnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9NyAtLXZlcmlmeSBIRUFEKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWlnbm9yZS1zdWJtb2R1bGVzPXVudHJhY2tlZCBkb2Vzbid0IHN1cHByZXNzIHN1Ym1vZHVsZSBzdW1tYXJ5IiAnCisJY2F0ID4gZXhwZWN0IDw8IEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91ciBicmFuY2ggYW5kICdcJyd1cHN0cmVhbSdcJycgaGF2ZSBkaXZlcmdlZCwKK2FuZCBoYXZlIDIgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKwltb2RpZmllZDogICBzbQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisJbW9kaWZpZWQ6ICAgc20gKG5ldyBjb21taXRzKQorCitTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisKKyogc20gJGhlYWQuLi4kbmV3X2hlYWQgKDEpOgorICA+IEFkZCBiYXIKKworU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoKKworKiBzbSAkbmV3X2hlYWQuLi4kaGVhZDIgKDEpOgorICA+IDJuZCBjb21taXQKKworVW50cmFja2VkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCS5naXRtb2R1bGVzCisJZGlyMS91bnRyYWNrZWQKKwlkaXIyL21vZGlmaWVkCisJZGlyMi91bnRyYWNrZWQKKwl1bnRyYWNrZWQKKworRU9GCisJZ2l0IHN0YXR1cyAtLWlnbm9yZS1zdWJtb2R1bGVzPXVudHJhY2tlZCA+IG91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi5naXRtb2R1bGVzIGlnbm9yZT11bnRyYWNrZWQgZG9lc24ndCBzdXBwcmVzcyBzdWJtb2R1bGUgc3VtbWFyeSIgJworCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIuZ2l0L2NvbmZpZyBpZ25vcmU9dW50cmFja2VkIGRvZXNuJ3Qgc3VwcHJlc3Mgc3VibW9kdWxlIHN1bW1hcnkiICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBub25lICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgdW50cmFja2VkICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgZG9lc24ndCBzdXBwcmVzcyBzdWJtb2R1bGUgc3VtbWFyeSIgJworCWdpdCBzdGF0dXMgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSA+IG91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIuZ2l0bW9kdWxlcyBpZ25vcmU9ZGlydHkgZG9lc24ndCBzdXBwcmVzcyBzdWJtb2R1bGUgc3VtbWFyeSIgJworCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGRpcnR5ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi5naXQvY29uZmlnIGlnbm9yZT1kaXJ0eSBkb2Vzbid0IHN1cHByZXNzIHN1Ym1vZHVsZSBzdW1tYXJ5IiAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGRpcnR5ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKzsgT24gYnJhbmNoIG1hc3RlcgorOyBZb3VyIGJyYW5jaCBhbmQgJ3Vwc3RyZWFtJyBoYXZlIGRpdmVyZ2VkLAorOyBhbmQgaGF2ZSAyIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKzsgICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKzsKKzsgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6Cis7ICAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorOwltb2RpZmllZDogICBzbQorOworOyBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKzsgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCis7ICAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCis7CW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKzsJbW9kaWZpZWQ6ICAgc20gKG5ldyBjb21taXRzKQorOworOyBTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6Cis7Cis7ICogc20gJGhlYWQuLi4kbmV3X2hlYWQgKDEpOgorOyAgID4gQWRkIGJhcgorOworOyBTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOgorOworOyAqIHNtICRuZXdfaGVhZC4uLiRoZWFkMiAoMSk6Cis7ICAgPiAybmQgY29tbWl0Cis7Cis7IFVudHJhY2tlZCBmaWxlczoKKzsgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorOwkuZ2l0bW9kdWxlcworOwlkaXIxL3VudHJhY2tlZAorOwlkaXIyL21vZGlmaWVkCis7CWRpcjIvdW50cmFja2VkCis7CXVudHJhY2tlZAorOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInN0YXR1cyAoY29yZS5jb21tZW50Y2hhciB3aXRoIHN1Ym1vZHVsZSBzdW1tYXJ5KSIgJworCXRlc3RfY29uZmlnIGNvcmUuY29tbWVudGNoYXIgIjsiICYmCisJZ2l0IC1jIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD10cnVlIHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic3RhdHVzIChjb3JlLmNvbW1lbnRjaGFyIHdpdGggdHdvIGNoYXJzIHdpdGggc3VibW9kdWxlIHN1bW1hcnkpIiAnCisJdGVzdF9jb25maWcgY29yZS5jb21tZW50Y2hhciAiOzsiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD10cnVlIHN0YXR1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWlnbm9yZS1zdWJtb2R1bGVzPWFsbCBzdXBwcmVzc2VzIHN1Ym1vZHVsZSBzdW1tYXJ5IiAnCisJY2F0ID4gZXhwZWN0IDw8IEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91ciBicmFuY2ggYW5kICdcJyd1cHN0cmVhbSdcJycgaGF2ZSBkaXZlcmdlZCwKK2FuZCBoYXZlIDIgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisJLmdpdG1vZHVsZXMKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCXVudHJhY2tlZAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLWlnbm9yZS1zdWJtb2R1bGVzPWFsbCA+IG91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRtb2R1bGVzIGlnbm9yZT1hbGwgc3VwcHJlc3NlcyB1bnN0YWdlZCBzdWJtb2R1bGUgc3VtbWFyeScgJworCWNhdCA+IGV4cGVjdCA8PCBFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK1lvdXIgYnJhbmNoIGFuZCAnXCcndXBzdHJlYW0nXCcnIGhhdmUgZGl2ZXJnZWQsCithbmQgaGF2ZSAyIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKyAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisJbW9kaWZpZWQ6ICAgc20KKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisJLmdpdG1vZHVsZXMKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCXVudHJhY2tlZAorCitFT0YKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBhbGwgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID4gb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXQvY29uZmlnIGlnbm9yZT1hbGwgc3VwcHJlc3NlcyB1bnN0YWdlZCBzdWJtb2R1bGUgc3VtbWFyeScgJworCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIG5vbmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBhbGwgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID4gb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9mIHRlc3QgZW52aXJvbm1lbnQnICcKKwlnaXQgY29uZmlnIHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMgbm8gJiYKKwlnaXQgc3RhdHVzIC1zID5leHBlY3RlZF9zaG9ydCAmJgorCWdpdCBzdGF0dXMgLS1uby1zaG9ydCA+ZXhwZWN0ZWRfbm9zaG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic3RhdHVzLnNob3J0PXRydWUiIHNhbWUgYXMgIi1zIicgJworCWdpdCAtYyBzdGF0dXMuc2hvcnQ9dHJ1ZSBzdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX3Nob3J0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic3RhdHVzLnNob3J0PXRydWUiIHdlYWtlciB0aGFuICItLW5vLXNob3J0IicgJworCWdpdCAtYyBzdGF0dXMuc2hvcnQ9dHJ1ZSBzdGF0dXMgLS1uby1zaG9ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfbm9zaG9ydCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5zaG9ydD1mYWxzZSIgc2FtZSBhcyAiLS1uby1zaG9ydCInICcKKwlnaXQgLWMgc3RhdHVzLnNob3J0PWZhbHNlIHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfbm9zaG9ydCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5zaG9ydD1mYWxzZSIgd2Vha2VyIHRoYW4gIi1zIicgJworCWdpdCAtYyBzdGF0dXMuc2hvcnQ9ZmFsc2Ugc3RhdHVzIC1zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9zaG9ydCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5icmFuY2g9dHJ1ZSIgc2FtZSBhcyAiLWIiJyAnCisJZ2l0IHN0YXR1cyAtc2IgPmV4cGVjdGVkX2JyYW5jaCAmJgorCWdpdCAtYyBzdGF0dXMuYnJhbmNoPXRydWUgc3RhdHVzIC1zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9icmFuY2ggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzdGF0dXMuYnJhbmNoPXRydWUiIGRpZmZlcmVudCBmcm9tICItLW5vLWJyYW5jaCInICcKKwlnaXQgc3RhdHVzIC1zIC0tbm8tYnJhbmNoICA+ZXhwZWN0ZWRfbm9icmFuY2ggJiYKKwlnaXQgLWMgc3RhdHVzLmJyYW5jaD10cnVlIHN0YXR1cyAtcyA+YWN0dWFsICYmCisJISB0ZXN0X2NtcCBleHBlY3RlZF9ub2JyYW5jaCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5icmFuY2g9dHJ1ZSIgd2Vha2VyIHRoYW4gIi0tbm8tYnJhbmNoIicgJworCWdpdCAtYyBzdGF0dXMuYnJhbmNoPXRydWUgc3RhdHVzIC1zIC0tbm8tYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9ub2JyYW5jaCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5icmFuY2g9dHJ1ZSIgd2Vha2VyIHRoYW4gIi0tcG9yY2VsYWluIicgJworICAgICAgIGdpdCAtYyBzdGF0dXMuYnJhbmNoPXRydWUgc3RhdHVzIC0tcG9yY2VsYWluID5hY3R1YWwgJiYKKyAgICAgICB0ZXN0X2NtcCBleHBlY3RlZF9ub2JyYW5jaCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5icmFuY2g9ZmFsc2UiIHNhbWUgYXMgIi0tbm8tYnJhbmNoIicgJworCWdpdCAtYyBzdGF0dXMuYnJhbmNoPWZhbHNlIHN0YXR1cyAtcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfbm9icmFuY2ggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzdGF0dXMuYnJhbmNoPWZhbHNlIiB3ZWFrZXIgdGhhbiAiLWIiJyAnCisJZ2l0IC1jIHN0YXR1cy5icmFuY2g9ZmFsc2Ugc3RhdHVzIC1zYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfYnJhbmNoIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXN0b3JlIGRlZmF1bHQgdGVzdCBlbnZpcm9ubWVudCcgJworCWdpdCBjb25maWcgLS11bnNldCBzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQgd2lsbCBjb21taXQgYSBzdGFnZWQgYnV0IGlnbm9yZWQgc3VibW9kdWxlJyAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IHN0YXR1cyAtcyAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeTS4gc20iIG91dHB1dCAmJgorCUdJVF9FRElUT1I9ImVjaG8gaGVsbG8gPj5cIlwkMVwiIiAmJgorCWV4cG9ydCBHSVRfRURJVE9SICYmCisJZ2l0IGNvbW1pdCAtdW5vICYmCisJZ2l0IHN0YXR1cyAtcyAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIl5NLiBzbSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQgLS1kcnktcnVuIHdpbGwgc2hvdyBhIHN0YWdlZCBidXQgaWdub3JlZCBzdWJtb2R1bGUnICcKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwlnaXQgYWRkIHNtICYmCisJY2F0ID5leHBlY3QgPDwgRU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMiBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCW1vZGlmaWVkOiAgIHNtCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgY29tbWl0IC11bm8gLS1kcnktcnVuID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBzdGF0dXMgLXMgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiXk0uIHNtIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbW1pdCAtbSB3aWxsIGNvbW1pdCBhIHN0YWdlZCBidXQgaWdub3JlZCBzdWJtb2R1bGUnICcKKwlnaXQgY29tbWl0IC11bm8gLW0gbWVzc2FnZSAmJgorCWdpdCBzdGF0dXMgLXMgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAhICJeTS4gc20iIG91dHB1dCAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBzdGFzaCBpbmZvIHdpdGggIi0tc2hvdy1zdGFzaCInICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJZWNobyAxID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXR1cyA+ZXhwZWN0ZWRfZGVmYXVsdCAmJgorCWdpdCBzdGF0dXMgLS1zaG93LXN0YXNoID5leHBlY3RlZF93aXRoX3N0YXNoICYmCisJdGVzdF9pMThuZ3JlcCAiXllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAxIGVudHJ5JCIgZXhwZWN0ZWRfd2l0aF9zdGFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBzdGFzaCBpbmZvIHdpdGggIi0tc2hvdy1zdGFzaCAtLW5vLXNob3ctc3Rhc2giJyAnCisJZ2l0IHN0YXR1cyAtLXNob3ctc3Rhc2ggLS1uby1zaG93LXN0YXNoID5leHBlY3RlZF93aXRob3V0X3N0YXNoICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfZGVmYXVsdCBleHBlY3RlZF93aXRob3V0X3N0YXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzdGF0dXMuc2hvd1N0YXNoPWZhbHNlIiB3ZWFrZXIgdGhhbiAiLS1zaG93LXN0YXNoIicgJworCWdpdCAtYyBzdGF0dXMuc2hvd1N0YXNoPWZhbHNlIHN0YXR1cyAtLXNob3ctc3Rhc2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX3dpdGhfc3Rhc2ggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzdGF0dXMuc2hvd1N0YXNoPXRydWUiIHdlYWtlciB0aGFuICItLW5vLXNob3ctc3Rhc2giJyAnCisJZ2l0IC1jIHN0YXR1cy5zaG93U3Rhc2g9dHJ1ZSBzdGF0dXMgLS1uby1zaG93LXN0YXNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF93aXRob3V0X3N0YXNoIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBhZGRpdGlvbmFsIGluZm8gaWYgbm8gc3Rhc2ggZW50cmllcycgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCWdpdCAtYyBzdGF0dXMuc2hvd1N0YXNoPXRydWUgc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF93aXRob3V0X3N0YXNoIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciTm8gY29tbWl0cyB5ZXQiIHNob3VsZCBiZSBub3RlZCBpbiBzdGF0dXMgb3V0cHV0JyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGVtcHR5LWJyYW5jaC0xICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiTm8gY29tbWl0cyB5ZXQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciTm8gY29tbWl0cyB5ZXQiIHNob3VsZCBub3QgYmUgbm90ZWQgaW4gc3RhdHVzIG91dHB1dCcgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiBlbXB0eS1icmFuY2gtMiAmJgorCXRlc3RfY29tbWl0IHRlc3QtY29tbWl0LTEgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIk5vIGNvbW1pdHMgeWV0IiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIkluaXRpYWwgY29tbWl0IiBzaG91bGQgYmUgbm90ZWQgaW4gY29tbWl0IHRlbXBsYXRlJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGVtcHR5LWJyYW5jaC0zICYmCisJdG91Y2ggdG9fYmVfY29tbWl0dGVkXzEgJiYKKwlnaXQgYWRkIHRvX2JlX2NvbW1pdHRlZF8xICYmCisJZ2l0IGNvbW1pdCAtLWRyeS1ydW4gPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIkluaXRpYWwgY29tbWl0IiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIkluaXRpYWwgY29tbWl0IiBzaG91bGQgbm90IGJlIG5vdGVkIGluIGNvbW1pdCB0ZW1wbGF0ZScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiBlbXB0eS1icmFuY2gtNCAmJgorCXRlc3RfY29tbWl0IHRlc3QtY29tbWl0LTIgJiYKKwl0b3VjaCB0b19iZV9jb21taXR0ZWRfMiAmJgorCWdpdCBhZGQgdG9fYmVfY29tbWl0dGVkXzIgJiYKKwlnaXQgY29tbWl0IC0tZHJ5LXJ1biA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAhICJJbml0aWFsIGNvbW1pdCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tb3B0aW9uYWwtbG9ja3MgcHJldmVudHMgaW5kZXggdXBkYXRlJyAnCisJdGVzdC10b29sIGNobXRpbWUgPTEyMzQ1Njc4OTAgLmdpdC9pbmRleCAmJgorCWdpdCAtLW5vLW9wdGlvbmFsLWxvY2tzIHN0YXR1cyAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC5naXQvaW5kZXggPm91dCAmJgorCWdyZXAgXjEyMzQ1Njc4OTAgb3V0ICYmCisJZ2l0IHN0YXR1cyAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC5naXQvaW5kZXggPm91dCAmJgorCSEgZ3JlcCBeMTIzNDU2Nzg5MCBvdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTA5LWNvbW1pdC1hdXRob3JzaGlwLnNoIGIvdC90NzUwOS1jb21taXQtYXV0aG9yc2hpcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MDBhYjJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwOS1jb21taXQtYXV0aG9yc2hpcC5zaApAQCAtMCwwICsxLDE3NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljayBNYXR0b3MKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tbWl0IHRlc3RzIG9mIHZhcmlvdXMgYXV0aG9yaGlwIG9wdGlvbnMuICcKKworLiAuL3Rlc3QtbGliLnNoCisKK2F1dGhvcl9oZWFkZXIgKCkgeworCWdpdCBjYXQtZmlsZSBjb21taXQgIiQxIiB8CisJc2VkIC1uIC1lICcvXiQvcScgLWUgJy9eYXV0aG9yIC9wJworfQorCittZXNzYWdlX2JvZHkgKCkgeworCWdpdCBjYXQtZmlsZSBjb21taXQgIiQxIiB8CisJc2VkIC1lICcxLC9eJC9kJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctQyBvcHRpb24gY29waWVzIGF1dGhvcnNoaXAgYW5kIG1lc3NhZ2UnICcKKwllY2hvICJJbml0aWFsIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIENvbW1pdCIgLS1hdXRob3IgRnJpZ2F0ZVwgXDxmbHlpbmdAb3Zlci53b3JsZFw+ICYmCisJZ2l0IHRhZyBJbml0aWFsICYmCisJZWNobyAiVGVzdCAxIiA+PmZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLUMgSW5pdGlhbCAmJgorCWF1dGhvcl9oZWFkZXIgSW5pdGlhbCA+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwltZXNzYWdlX2JvZHkgSW5pdGlhbCA+ZXhwZWN0ICYmCisJbWVzc2FnZV9ib2R5IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLUMgb3B0aW9uIGNvcGllcyBvbmx5IHRoZSBtZXNzYWdlIHdpdGggLS1yZXNldC1hdXRob3InICcKKwllY2hvICJUZXN0IDIiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtQyBJbml0aWFsIC0tcmVzZXQtYXV0aG9yICYmCisJZWNobyAiYXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiAkR0lUX0FVVEhPUl9EQVRFIiA+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwltZXNzYWdlX2JvZHkgSW5pdGlhbCA+ZXhwZWN0ICYmCisJbWVzc2FnZV9ib2R5IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLWMgb3B0aW9uIGNvcGllcyBhdXRob3JzaGlwIGFuZCBtZXNzYWdlJyAnCisJZWNobyAiVGVzdCAzIiA+PmZvbyAmJgorCXRlc3RfdGljayAmJgorCUVESVRPUj06IFZJU1VBTD06IGdpdCBjb21taXQgLWEgLWMgSW5pdGlhbCAmJgorCWF1dGhvcl9oZWFkZXIgSW5pdGlhbCA+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1jIG9wdGlvbiBjb3BpZXMgb25seSB0aGUgbWVzc2FnZSB3aXRoIC0tcmVzZXQtYXV0aG9yJyAnCisJZWNobyAiVGVzdCA0IiA+PmZvbyAmJgorCXRlc3RfdGljayAmJgorCUVESVRPUj06IFZJU1VBTD06IGdpdCBjb21taXQgLWEgLWMgSW5pdGlhbCAtLXJlc2V0LWF1dGhvciAmJgorCWVjaG8gImF1dGhvciAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gJEdJVF9BVVRIT1JfREFURSIgPmV4cGVjdCAmJgorCWF1dGhvcl9oZWFkZXIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJbWVzc2FnZV9ib2R5IEluaXRpYWwgPmV4cGVjdCAmJgorCW1lc3NhZ2VfYm9keSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYW1lbmQgb3B0aW9uIGNvcGllcyBhdXRob3JzaGlwJyAnCisJZ2l0IGNoZWNrb3V0IEluaXRpYWwgJiYKKwllY2hvICJUZXN0IDUiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtLWFtZW5kIC1tICJhbWVuZCB0ZXN0IiAmJgorCWF1dGhvcl9oZWFkZXIgSW5pdGlhbCA+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICJhbWVuZCB0ZXN0IiA+ZXhwZWN0ICYmCisJbWVzc2FnZV9ib2R5IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworc2hhMV9maWxlKCkgeworCWVjaG8gIiQqIiB8IHNlZCAicyMuLiMuZ2l0L29iamVjdHMvJi8jIgorfQorcmVtb3ZlX29iamVjdCgpIHsKKwlybSAtZiAkKHNoYTFfZmlsZSAiJCoiKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFtZW5kIG9wdGlvbiB3aXRoIGVtcHR5IGF1dGhvcicgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSW5pdGlhbCA+dG1wICYmCisJc2VkICJzL2F1dGhvciBbXjxdKiA8L2F1dGhvciAgPC8iIHRtcCA+ZW1wdHktYXV0aG9yICYmCisJc2hhPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyBlbXB0eS1hdXRob3IpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRzaGEiICYmCisJZ2l0IGNoZWNrb3V0ICRzaGEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBJbml0aWFsIiAmJgorCWVjaG8gIkVtcHR5IGF1dGhvciB0ZXN0IiA+PmZvbyAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLWEgLW0gImVtcHR5IGF1dGhvciIgLS1hbWVuZCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImVtcHR5IGlkZW50IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hbWVuZCBvcHRpb24gd2l0aCBtaXNzaW5nIGF1dGhvcicgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSW5pdGlhbCA+dG1wICYmCisJc2VkICJzL2F1dGhvciBbXjxdKiA8L2F1dGhvciA8LyIgdG1wID5tYWxmb3JtZWQgJiYKKwlzaGE9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IG1hbGZvcm1lZCkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHNoYSIgJiYKKwlnaXQgY2hlY2tvdXQgJHNoYSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IEluaXRpYWwiICYmCisJZWNobyAiTWlzc2luZyBhdXRob3IgdGVzdCIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1hIC1tICJtYWxmb3JtZWQgYXV0aG9yIiAtLWFtZW5kIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZW1wdHkgaWRlbnQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlc2V0LWF1dGhvciBtYWtlcyB0aGUgY29tbWl0IG91cnMgZXZlbiB3aXRoIC0tYW1lbmQgb3B0aW9uJyAnCisJZ2l0IGNoZWNrb3V0IEluaXRpYWwgJiYKKwllY2hvICJUZXN0IDYiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtLXJlc2V0LWF1dGhvciAtbSAiQ2hhbmdlZCBhZ2FpbiIgLS1hbWVuZCAmJgorCWVjaG8gImF1dGhvciAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gJEdJVF9BVVRIT1JfREFURSIgPmV4cGVjdCAmJgorCWF1dGhvcl9oZWFkZXIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyAiQ2hhbmdlZCBhZ2FpbiIgPmV4cGVjdCAmJgorCW1lc3NhZ2VfYm9keSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJyAnCisJZ2l0IGNoZWNrb3V0IEluaXRpYWwgJiYKKwllY2hvICJUZXN0IDciID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtYSAtLXJlc2V0LWF1dGhvciAtLWF1dGhvcj0iWHl6enkgPGZyb3R6QG5pdGZvbC54ej4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVzZXQtYXV0aG9yIHNob3VsZCBiZSByZWplY3RlZCB3aXRob3V0IC1jLy1DLy0tYW1lbmQnICcKKwlnaXQgY2hlY2tvdXQgSW5pdGlhbCAmJgorCWVjaG8gIlRlc3QgNyIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1hIC0tcmVzZXQtYXV0aG9yIC1tIGRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IHJlc3BlY3RzIENIRVJSWV9QSUNLX0hFQUQgYW5kIE1FUkdFX01TRycgJworCWVjaG8gImNoZXJyeS1waWNrIDFhIiA+PmZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWFtICJjaGVycnktcGljayAxIiAtLWF1dGhvcj0iQ2hlcnJ5IDxjaGVycnlAcGljay5lcj4iICYmCisJZ2l0IHRhZyBjaGVycnktcGljay1oZWFkICYmCisJZ2l0IHJldi1wYXJzZSBjaGVycnktcGljay1oZWFkID4uZ2l0L0NIRVJSWV9QSUNLX0hFQUQgJiYKKwllY2hvICJUaGlzIGlzIGEgTUVSR0VfTVNHIiA+LmdpdC9NRVJHRV9NU0cgJiYKKwllY2hvICJjaGVycnktcGljayAxYiIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hICYmCisJYXV0aG9yX2hlYWRlciBjaGVycnktcGljay1oZWFkID5leHBlY3QgJiYKKwlhdXRob3JfaGVhZGVyIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gIlRoaXMgaXMgYSBNRVJHRV9NU0ciID5leHBlY3QgJiYKKwltZXNzYWdlX2JvZHkgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlc2V0LWF1dGhvciB3aXRoIENIRVJSWV9QSUNLX0hFQUQnICcKKwlnaXQgcmV2LXBhcnNlIGNoZXJyeS1waWNrLWhlYWQgPi5naXQvQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCWVjaG8gImNoZXJyeS1waWNrIDIiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYW0gImNoZXJyeS1waWNrIDIiIC0tcmVzZXQtYXV0aG9yICYmCisJZWNobyAiYXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiAkR0lUX0FVVEhPUl9EQVRFIiA+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUxMC1zaWduZWQtY29tbWl0LnNoIGIvdC90NzUxMC1zaWduZWQtY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZiYWFhMWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTEwLXNpZ25lZC1jb21taXQuc2gKQEAgLTAsMCArMSwzMzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzaWduZWQgY29tbWl0IHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCitHTlVQR0hPTUVfTk9UX1VTRUQ9JEdOVVBHSE9NRQorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1ncGcuc2giCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdjcmVhdGUgc2lnbmVkIGNvbW1pdHMnICcKKwl0ZXN0X29pZF9jYWNoZSA8PC1cRU9GICYmCisJaGVhZGVyIHNoYTE6Z3Bnc2lnCisJaGVhZGVyIHNoYTI1NjpncGdzaWctc2hhMjU2CisJRU9GCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfdW5jb25maWcgY29tbWl0LmdwZ3NpZ24iICYmCisKKwllY2hvIDEgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLVMgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCisJZWNobyAyID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1TIC1tIHNlY29uZCAmJgorCWdpdCB0YWcgc2Vjb25kICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWVjaG8gMyA+ZWxpZiAmJiBnaXQgYWRkIGVsaWYgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAidGhpcmQgb24gc2lkZSIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC1TIHNpZGUgJiYKKwlnaXQgdGFnIG1lcmdlICYmCisKKwllY2hvIDQgPmZpbGUgJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gImZvdXJ0aCB1bnNpZ25lZCIgJiYKKwlnaXQgdGFnIGZvdXJ0aC11bnNpZ25lZCAmJgorCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLS1hbWVuZCAtUyAtbSAiZm91cnRoIHNpZ25lZCIgJiYKKwlnaXQgdGFnIGZvdXJ0aC1zaWduZWQgJiYKKworCWdpdCBjb25maWcgY29tbWl0LmdwZ3NpZ24gdHJ1ZSAmJgorCWVjaG8gNSA+ZmlsZSAmJiB0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtbSAiZmlmdGggc2lnbmVkIiAmJgorCWdpdCB0YWcgZmlmdGgtc2lnbmVkICYmCisKKwlnaXQgY29uZmlnIGNvbW1pdC5ncGdzaWduIGZhbHNlICYmCisJZWNobyA2ID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tICJzaXh0aCIgJiYKKwlnaXQgdGFnIHNpeHRoLXVuc2lnbmVkICYmCisKKwlnaXQgY29uZmlnIGNvbW1pdC5ncGdzaWduIHRydWUgJiYKKwllY2hvIDcgPmZpbGUgJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gInNldmVudGgiIC0tbm8tZ3BnLXNpZ24gJiYKKwlnaXQgdGFnIHNldmVudGgtdW5zaWduZWQgJiYKKworCXRlc3RfdGljayAmJiBnaXQgcmViYXNlIC1mIEhFQUReXiAmJiBnaXQgdGFnIHNpeHRoLXNpZ25lZCBIRUFEXiAmJgorCWdpdCB0YWcgc2V2ZW50aC1zaWduZWQgJiYKKworCWVjaG8gOCA+ZmlsZSAmJiB0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtbSBlaWdodGggLVNCNzIyNzE4OSAmJgorCWdpdCB0YWcgZWlnaHRoLXNpZ25lZC1hbHQgJiYKKworCSMgY29tbWl0LmdwZ3NpZ24gaXMgc3RpbGwgb24gYnV0IHRoaXMgbXVzdCBub3QgYmUgc2lnbmVkCisJZWNobyA5IHwgZ2l0IGNvbW1pdC10cmVlIEhFQURee3RyZWV9ID5vaWQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG9pZCAmJgorCWdpdCB0YWcgbmludGgtdW5zaWduZWQgJChjYXQgb2lkKSAmJgorCSMgZXhwbGljaXQgLVMgb2YgY291cnNlIG11c3Qgc2lnbi4KKwllY2hvIDEwIHwgZ2l0IGNvbW1pdC10cmVlIC1TIEhFQURee3RyZWV9ID5vaWQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG9pZCAmJgorCWdpdCB0YWcgdGVudGgtc2lnbmVkICQoY2F0IG9pZCkgJiYKKworCSMgLS1ncGctc2lnbls9PGtleS1pZD5dIG11c3Qgc2lnbi4KKwllY2hvIDExIHwgZ2l0IGNvbW1pdC10cmVlIC0tZ3BnLXNpZ24gSEVBRF57dHJlZX0gPm9pZCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgb2lkICYmCisJZ2l0IHRhZyBlbGV2ZW50aC1zaWduZWQgJChjYXQgb2lkKSAmJgorCWVjaG8gMTIgfCBnaXQgY29tbWl0LXRyZWUgLS1ncGctc2lnbj1CNzIyNzE4OSBIRUFEXnt0cmVlfSA+b2lkICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBvaWQgJiYKKwlnaXQgdGFnIHR3ZWxmdGgtc2lnbmVkLWFsdCAkKGNhdCBvaWQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICd2ZXJpZnkgYW5kIHNob3cgc2lnbmF0dXJlcycgJworCSgKKwkJZm9yIGNvbW1pdCBpbiBpbml0aWFsIHNlY29uZCBtZXJnZSBmb3VydGgtc2lnbmVkIFwKKwkJCWZpZnRoLXNpZ25lZCBzaXh0aC1zaWduZWQgc2V2ZW50aC1zaWduZWQgdGVudGgtc2lnbmVkIFwKKwkJCWVsZXZlbnRoLXNpZ25lZAorCQlkbworCQkJZ2l0IHZlcmlmeS1jb21taXQgJGNvbW1pdCAmJgorCQkJZ2l0IHNob3cgLS1wcmV0dHk9c2hvcnQgLS1zaG93LXNpZ25hdHVyZSAkY29tbWl0ID5hY3R1YWwgJiYKKwkJCWdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCQkJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCQkJZWNobyAkY29tbWl0IE9LIHx8IGV4aXQgMQorCQlkb25lCisJKSAmJgorCSgKKwkJZm9yIGNvbW1pdCBpbiBtZXJnZV4yIGZvdXJ0aC11bnNpZ25lZCBzaXh0aC11bnNpZ25lZCBcCisJCQlzZXZlbnRoLXVuc2lnbmVkIG5pbnRoLXVuc2lnbmVkCisJCWRvCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgdmVyaWZ5LWNvbW1pdCAkY29tbWl0ICYmCisJCQlnaXQgc2hvdyAtLXByZXR0eT1zaG9ydCAtLXNob3ctc2lnbmF0dXJlICRjb21taXQgPmFjdHVhbCAmJgorCQkJISBncmVwICJHb29kIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkJCSEgZ3JlcCAiQkFEIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkJCWVjaG8gJGNvbW1pdCBPSyB8fCBleGl0IDEKKwkJZG9uZQorCSkgJiYKKwkoCisJCWZvciBjb21taXQgaW4gZWlnaHRoLXNpZ25lZC1hbHQgdHdlbGZ0aC1zaWduZWQtYWx0CisJCWRvCisJCQlnaXQgc2hvdyAtLXByZXR0eT1zaG9ydCAtLXNob3ctc2lnbmF0dXJlICRjb21taXQgPmFjdHVhbCAmJgorCQkJZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJCQkhIGdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJCQlncmVwICJub3QgY2VydGlmaWVkIiBhY3R1YWwgJiYKKwkJCWVjaG8gJGNvbW1pdCBPSyB8fCBleGl0IDEKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeS1jb21taXQgZXhpdHMgc3VjY2VzcyBvbiB1bnRydXN0ZWQgc2lnbmF0dXJlJyAnCisJZ2l0IHZlcmlmeS1jb21taXQgZWlnaHRoLXNpZ25lZC1hbHQgMj5hY3R1YWwgJiYKKwlncmVwICJHb29kIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkhIGdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJZ3JlcCAibm90IGNlcnRpZmllZCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICd2ZXJpZnktY29tbWl0IGV4aXRzIHN1Y2Nlc3Mgd2l0aCBtYXRjaGluZyBtaW5UcnVzdExldmVsJyAnCisJdGVzdF9jb25maWcgZ3BnLm1pblRydXN0TGV2ZWwgdWx0aW1hdGUgJiYKKwlnaXQgdmVyaWZ5LWNvbW1pdCBzaXh0aC1zaWduZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeS1jb21taXQgZXhpdHMgc3VjY2VzcyB3aXRoIGxvdyBtaW5UcnVzdExldmVsJyAnCisJdGVzdF9jb25maWcgZ3BnLm1pblRydXN0TGV2ZWwgZnVsbHkgJiYKKwlnaXQgdmVyaWZ5LWNvbW1pdCBzaXh0aC1zaWduZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeS1jb21taXQgZXhpdHMgZmFpbHVyZSB3aXRoIGhpZ2ggbWluVHJ1c3RMZXZlbCcgJworCXRlc3RfY29uZmlnIGdwZy5taW5UcnVzdExldmVsIHVsdGltYXRlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS1jb21taXQgZWlnaHRoLXNpZ25lZC1hbHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeSBzaWduYXR1cmVzIHdpdGggLS1yYXcnICcKKwkoCisJCWZvciBjb21taXQgaW4gaW5pdGlhbCBzZWNvbmQgbWVyZ2UgZm91cnRoLXNpZ25lZCBmaWZ0aC1zaWduZWQgc2l4dGgtc2lnbmVkIHNldmVudGgtc2lnbmVkCisJCWRvCisJCQlnaXQgdmVyaWZ5LWNvbW1pdCAtLXJhdyAkY29tbWl0IDI+YWN0dWFsICYmCisJCQlncmVwICJHT09EU0lHIiBhY3R1YWwgJiYKKwkJCSEgZ3JlcCAiQkFEU0lHIiBhY3R1YWwgJiYKKwkJCWVjaG8gJGNvbW1pdCBPSyB8fCBleGl0IDEKKwkJZG9uZQorCSkgJiYKKwkoCisJCWZvciBjb21taXQgaW4gbWVyZ2VeMiBmb3VydGgtdW5zaWduZWQgc2l4dGgtdW5zaWduZWQgc2V2ZW50aC11bnNpZ25lZAorCQlkbworCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS1jb21taXQgLS1yYXcgJGNvbW1pdCAyPmFjdHVhbCAmJgorCQkJISBncmVwICJHT09EU0lHIiBhY3R1YWwgJiYKKwkJCSEgZ3JlcCAiQkFEU0lHIiBhY3R1YWwgJiYKKwkJCWVjaG8gJGNvbW1pdCBPSyB8fCBleGl0IDEKKwkJZG9uZQorCSkgJiYKKwkoCisJCWZvciBjb21taXQgaW4gZWlnaHRoLXNpZ25lZC1hbHQKKwkJZG8KKwkJCWdpdCB2ZXJpZnktY29tbWl0IC0tcmF3ICRjb21taXQgMj5hY3R1YWwgJiYKKwkJCWdyZXAgIkdPT0RTSUciIGFjdHVhbCAmJgorCQkJISBncmVwICJCQURTSUciIGFjdHVhbCAmJgorCQkJZ3JlcCAiVFJVU1RfVU5ERUZJTkVEIiBhY3R1YWwgJiYKKwkJCWVjaG8gJGNvbW1pdCBPSyB8fCBleGl0IDEKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3Byb3BlciBoZWFkZXIgaXMgdXNlZCBmb3IgaGFzaCBhbGdvcml0aG0nICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IGZvdXJ0aC1zaWduZWQgPm91dHB1dCAmJgorCWdyZXAgIl4kKHRlc3Rfb2lkIGhlYWRlcikgLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0iIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2hvdyBzaWduZWQgY29tbWl0IHdpdGggc2lnbmF0dXJlJyAnCisJZ2l0IHNob3cgLXMgaW5pdGlhbCA+Y29tbWl0ICYmCisJZ2l0IHNob3cgLXMgLS1zaG93LXNpZ25hdHVyZSBpbml0aWFsID5zaG93ICYmCisJZ2l0IHZlcmlmeS1jb21taXQgLXYgaW5pdGlhbCA+dmVyaWZ5LjEgMj52ZXJpZnkuMiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgaW5pdGlhbCA+Y2F0ICYmCisJZ3JlcCAtdiAtZSAiZ3BnOiAiIC1lICJXYXJuaW5nOiAiIHNob3cgPnNob3cuY29tbWl0ICYmCisJZ3JlcCAtZSAiZ3BnOiAiIC1lICJXYXJuaW5nOiAiIHNob3cgPnNob3cuZ3BnICYmCisJZ3JlcCAtdiAiXiAiIGNhdCB8IGdyZXAgLXYgIl4kKHRlc3Rfb2lkIGhlYWRlcikgIiA+Y2F0LmNvbW1pdCAmJgorCXRlc3RfY21wIHNob3cuY29tbWl0IGNvbW1pdCAmJgorCXRlc3RfY21wIHNob3cuZ3BnIHZlcmlmeS4yICYmCisJdGVzdF9jbXAgY2F0LmNvbW1pdCB2ZXJpZnkuMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnZGV0ZWN0IGZ1ZGdlZCBzaWduYXR1cmUnICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHNldmVudGgtc2lnbmVkID5yYXcgJiYKKwlzZWQgLWUgInMvXnNldmVudGgvN3RoIGZvcmdlZC8iIHJhdyA+Zm9yZ2VkMSAmJgorCWdpdCBoYXNoLW9iamVjdCAtdyAtdCBjb21taXQgZm9yZ2VkMSA+Zm9yZ2VkMS5jb21taXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdmVyaWZ5LWNvbW1pdCAkKGNhdCBmb3JnZWQxLmNvbW1pdCkgJiYKKwlnaXQgc2hvdyAtLXByZXR0eT1zaG9ydCAtLXNob3ctc2lnbmF0dXJlICQoY2F0IGZvcmdlZDEuY29tbWl0KSA+YWN0dWFsMSAmJgorCWdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsMSAmJgorCSEgZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnZGV0ZWN0IGZ1ZGdlZCBzaWduYXR1cmUgd2l0aCBOVUwnICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHNldmVudGgtc2lnbmVkID5yYXcgJiYKKwljYXQgcmF3ID5mb3JnZWQyICYmCisJZWNobyBRd2lrIHwgdHIgIlEiICJcMDAwIiA+PmZvcmdlZDIgJiYKKwlnaXQgaGFzaC1vYmplY3QgLXcgLXQgY29tbWl0IGZvcmdlZDIgPmZvcmdlZDIuY29tbWl0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS1jb21taXQgJChjYXQgZm9yZ2VkMi5jb21taXQpICYmCisJZ2l0IHNob3cgLS1wcmV0dHk9c2hvcnQgLS1zaG93LXNpZ25hdHVyZSAkKGNhdCBmb3JnZWQyLmNvbW1pdCkgPmFjdHVhbDIgJiYKKwlncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbDIgJiYKKwkhIGdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2FtZW5kaW5nIGFscmVhZHkgc2lnbmVkIGNvbW1pdCcgJworCWdpdCBjaGVja291dCBmb3VydGgtc2lnbmVkXjAgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLVMgLS1uby1lZGl0ICYmCisJZ2l0IHZlcmlmeS1jb21taXQgSEVBRCAmJgorCWdpdCBzaG93IC1zIC0tc2hvdy1zaWduYXR1cmUgSEVBRCA+YWN0dWFsICYmCisJZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2hvdyBnb29kIHNpZ25hdHVyZSB3aXRoIGN1c3RvbSBmb3JtYXQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJRworCTEzQjZGNTFFQ0RERTQzMEQKKwlDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJNzNENzU4NzQ0QkU3MjE2OThFQzU0RTg3MTNCNkY1MUVDRERFNDMwRAorCTczRDc1ODc0NEJFNzIxNjk4RUM1NEU4NzEzQjZGNTFFQ0RERTQzMEQKKwlFT0YKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSIlRz8lbiVHSyVuJUdTJW4lR0YlbiVHUCIgc2l4dGgtc2lnbmVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaG93IGJhZCBzaWduYXR1cmUgd2l0aCBjdXN0b20gZm9ybWF0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUIKKwkxM0I2RjUxRUNEREU0MzBECisJQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCisKKwlFT0YKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSIlRz8lbiVHSyVuJUdTJW4lR0YlbiVHUCIgJChjYXQgZm9yZ2VkMS5jb21taXQpID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaG93IHVudHJ1c3RlZCBzaWduYXR1cmUgd2l0aCBjdXN0b20gZm9ybWF0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCVUKKwk2NUEwRUVBMDJFMzBDQUQ3CisJRXJpcyBEaXNjb3JkaWEgPGRpc2NvcmRAZXhhbXBsZS5uZXQ+CisJRjgzNjRBNTlFMDdGRkU5RjRENjMwMDVBNjVBMEVFQTAyRTMwQ0FENworCUQ0QkUyMjMxMUFEMzEzMUU1RURBMjlBNDYxMDkyRTg1QjcyMjcxODkKKwlFT0YKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSIlRz8lbiVHSyVuJUdTJW4lR0YlbiVHUCIgZWlnaHRoLXNpZ25lZC1hbHQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3Nob3cgdW50cnVzdGVkIHNpZ25hdHVyZSB3aXRoIHVuZGVmaW5lZCB0cnVzdCBsZXZlbCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl1bmRlZmluZWQKKwk2NUEwRUVBMDJFMzBDQUQ3CisJRXJpcyBEaXNjb3JkaWEgPGRpc2NvcmRAZXhhbXBsZS5uZXQ+CisJRjgzNjRBNTlFMDdGRkU5RjRENjMwMDVBNjVBMEVFQTAyRTMwQ0FENworCUQ0QkUyMjMxMUFEMzEzMUU1RURBMjlBNDYxMDkyRTg1QjcyMjcxODkKKwlFT0YKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSIlR1QlbiVHSyVuJUdTJW4lR0YlbiVHUCIgZWlnaHRoLXNpZ25lZC1hbHQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3Nob3cgdW50cnVzdGVkIHNpZ25hdHVyZSB3aXRoIHVsdGltYXRlIHRydXN0IGxldmVsJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXVsdGltYXRlCisJMTNCNkY1MUVDRERFNDMwRAorCUMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwk3M0Q3NTg3NDRCRTcyMTY5OEVDNTRFODcxM0I2RjUxRUNEREU0MzBECisJNzNENzU4NzQ0QkU3MjE2OThFQzU0RTg3MTNCNkY1MUVDRERFNDMwRAorCUVPRgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVHVCVuJUdLJW4lR1MlbiVHRiVuJUdQIiBzaXh0aC1zaWduZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3Nob3cgdW5rbm93biBzaWduYXR1cmUgd2l0aCBjdXN0b20gZm9ybWF0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUUKKwk2NUEwRUVBMDJFMzBDQUQ3CisKKworCisJRU9GCisJR05VUEdIT01FPSIkR05VUEdIT01FX05PVF9VU0VEIiBnaXQgbG9nIC0xIC0tZm9ybWF0PSIlRz8lbiVHSyVuJUdTJW4lR0YlbiVHUCIgZWlnaHRoLXNpZ25lZC1hbHQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3Nob3cgbGFjayBvZiBzaWduYXR1cmUgd2l0aCBjdXN0b20gZm9ybWF0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU4KKworCisKKworCUVPRgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVHPyVuJUdLJW4lR1MlbiVHRiVuJUdQIiBzZXZlbnRoLXVuc2lnbmVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdsb2cuc2hvd3NpZ25hdHVyZSBiZWhhdmVzIGxpa2UgLS1zaG93LXNpZ25hdHVyZScgJworCXRlc3RfY29uZmlnIGxvZy5zaG93c2lnbmF0dXJlIHRydWUgJiYKKwlnaXQgc2hvdyBpbml0aWFsID5hY3R1YWwgJiYKKwlncmVwICJncGc6IFNpZ25hdHVyZSBtYWRlIiBhY3R1YWwgJiYKKwlncmVwICJncGc6IEdvb2Qgc2lnbmF0dXJlIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2NoZWNrIGNvbmZpZyBncGcuZm9ybWF0IHZhbHVlcycgJworCXRlc3RfY29uZmlnIGdwZy5mb3JtYXQgb3BlbnBncCAmJgorCWdpdCBjb21taXQgLVMgLS1hbWVuZCAtbSAic3VjY2VzcyIgJiYKKwl0ZXN0X2NvbmZpZyBncGcuZm9ybWF0IE9wRW5QZ1AgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1TIC0tYW1lbmQgLW0gImZhaWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdkZXRlY3QgZnVkZ2VkIGNvbW1pdCB3aXRoIGRvdWJsZSBzaWduYXR1cmUnICcKKwlzZWQgLWUgIi9ncGdzaWcvLC9FTkQgUEdQL2QiIGZvcmdlZDEgPmRvdWJsZS1iYXNlICYmCisJc2VkIC1uIC1lICIvZ3Bnc2lnLywvRU5EIFBHUC9wIiBmb3JnZWQxIHwgXAorCQlzZWQgLWUgInMvXiQodGVzdF9vaWQgaGVhZGVyKS8vO3MvXiAvLyIgfCBncGcgLS1kZWFybW9yID5kb3VibGUtc2lnMS5zaWcgJiYKKwlncGcgLW8gZG91YmxlLXNpZzIuc2lnIC11IDI5NDcyNzg0IC0tZGV0YWNoLXNpZ24gZG91YmxlLWJhc2UgJiYKKwljYXQgZG91YmxlLXNpZzEuc2lnIGRvdWJsZS1zaWcyLnNpZyB8IGdwZyAtLWVuYXJtb3IgPmRvdWJsZS1jb21iaW5lZC5hc2MgJiYKKwlzZWQgLWUgInMvXlwoLS4qXClBUk1PUkVEIEZJTEUvXDFTSUdOQVRVUkUvOzFzL14vJCh0ZXN0X29pZCBoZWFkZXIpIC87MixcJHMvXi8gLyIgXAorCQlkb3VibGUtY29tYmluZWQuYXNjID4gZG91YmxlLWdwZ3NpZyAmJgorCXNlZCAtZSAiL2NvbW1pdHRlci9yIGRvdWJsZS1ncGdzaWciIGRvdWJsZS1iYXNlID5kb3VibGUtY29tbWl0ICYmCisJZ2l0IGhhc2gtb2JqZWN0IC13IC10IGNvbW1pdCBkb3VibGUtY29tbWl0ID5kb3VibGUtY29tbWl0LmNvbW1pdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktY29tbWl0ICQoY2F0IGRvdWJsZS1jb21taXQuY29tbWl0KSAmJgorCWdpdCBzaG93IC0tcHJldHR5PXNob3J0IC0tc2hvdy1zaWduYXR1cmUgJChjYXQgZG91YmxlLWNvbW1pdC5jb21taXQpID5kb3VibGUtYWN0dWFsICYmCisJZ3JlcCAiQkFEIHNpZ25hdHVyZSBmcm9tIiBkb3VibGUtYWN0dWFsICYmCisJZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgZG91YmxlLWFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2hvdyBkb3VibGUgc2lnbmF0dXJlIHdpdGggY3VzdG9tIGZvcm1hdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlFCisKKworCisKKwlFT0YKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSIlRz8lbiVHSyVuJUdTJW4lR0YlbiVHUCIgJChjYXQgZG91YmxlLWNvbW1pdC5jb21taXQpID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUxMS1zdGF0dXMtaW5kZXguc2ggYi90L3Q3NTExLXN0YXR1cy1pbmRleC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNWZkYzA0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzUxMS1zdGF0dXMtaW5kZXguc2gKQEAgLTAsMCArMSw1MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdGF0dXMgd2l0aCBjZXJ0YWluIGZpbGUgbmFtZSBsZW5ndGhzJworCisuIC4vdGVzdC1saWIuc2gKKworZmlsZXM9IjAgMSAyIDMgNCA1IDYgNyA4IDkgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IgorCitjaGVjaygpIHsKKwlsZW49JDEKKwlwcmVmaXg9JDIKKworCWZvciBpIGluICRmaWxlcworCWRvCisJCTogPiRwcmVmaXgkaQorCWRvbmUKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInN0YXR1cywgZmlsZW5hbWUgbGVuZ3RoICRsZW4iICIKKwkJZ2l0IGFkZCAkcHJlZml4KiAmJgorCQlnaXQgc3RhdHVzCisJIgorCXJtICRwcmVmaXgqIC5naXQvaW5kZXgKK30KKworY2hlY2sgIDEKK2NoZWNrICAyIHAKK2NoZWNrICAzIHB4CitjaGVjayAgNCBwcmUKK2NoZWNrICA1IHByZWYKK2NoZWNrICA2IHByZWZpCitjaGVjayAgNyBwcmVmaXgKK2NoZWNrICA4IHByZWZpeC0KK2NoZWNrICA5IHByZWZpeC1wCitjaGVjayAxMCBwcmVmaXgtcHIKK2NoZWNrIDExIHByZWZpeC1wcmUKK2NoZWNrIDEyIHByZWZpeC1wcmVmCitjaGVjayAxMyBwcmVmaXgtcHJlZmkKK2NoZWNrIDE0IHByZWZpeC1wcmVmaXgKK2NoZWNrIDE1IHByZWZpeC1wcmVmaXgtCitjaGVjayAxNiBwcmVmaXgtcHJlZml4LXAKK2NoZWNrIDE3IHByZWZpeC1wcmVmaXgtcHIKK2NoZWNrIDE4IHByZWZpeC1wcmVmaXgtcHJlCitjaGVjayAxOSBwcmVmaXgtcHJlZml4LXByZWYKK2NoZWNrIDIwIHByZWZpeC1wcmVmaXgtcHJlZmkKK2NoZWNrIDIxIHByZWZpeC1wcmVmaXgtcHJlZml4CitjaGVjayAyMiBwcmVmaXgtcHJlZml4LXByZWZpeC0KK2NoZWNrIDIzIHByZWZpeC1wcmVmaXgtcHJlZml4LXAKK2NoZWNrIDI0IHByZWZpeC1wcmVmaXgtcHJlZml4LXByCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUxMi1zdGF0dXMtaGVscC5zaCBiL3QvdDc1MTItc3RhdHVzLWhlbHAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjk1MThlMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MTItc3RhdHVzLWhlbHAuc2gKQEAgLTAsMCArMSwxMDEwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyIFZhbGVudGluIER1cGVycmF5LCBMdWNpZW4gS29uZywgRnJhbmNrIEpvbmFzLAorIwkJICAgICBUaG9tYXMgTmd1eSwgS2hvaSBOZ3V5ZW4KKyMJCSAgICAgR3Jlbm9ibGUgSU5QIEVuc2ltYWcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN0YXR1cyBhZHZpY2UnCisKKy4gLi90ZXN0LWxpYi5zaAorCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKworc2V0X2Zha2VfZWRpdG9yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZm9yIGNvbmZsaWN0cycgJworCWdpdCBjb25maWcgLS1nbG9iYWwgYWR2aWNlLnN0YXR1c3VvcHRpb24gZmFsc2UgJiYKKwl0ZXN0X2NvbW1pdCBpbml0IG1haW4udHh0IGluaXQgJiYKKwlnaXQgYnJhbmNoIGNvbmZsaWN0cyAmJgorCXRlc3RfY29tbWl0IG9uX21hc3RlciBtYWluLnR4dCBvbl9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgY29uZmxpY3RzICYmCisJdGVzdF9jb21taXQgb25fY29uZmxpY3RzIG1haW4udHh0IG9uX2NvbmZsaWN0cworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIGNvbmZsaWN0cyB1bnJlc29sdmVkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitPbiBicmFuY2ggY29uZmxpY3RzCitZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4KKyAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biAiZ2l0IGNvbW1pdCIpCisgICh1c2UgImdpdCBtZXJnZSAtLWFib3J0IiB0byBhYm9ydCB0aGUgbWVyZ2UpCisKK1VubWVyZ2VkIHBhdGhzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gbWFyayByZXNvbHV0aW9uKQorCWJvdGggbW9kaWZpZWQ6ICAgbWFpbi50eHQKKworbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjb25mbGljdHMgcmVzb2x2ZWQgYmVmb3JlIGNvbW1pdCcgJworCWdpdCByZXNldCAtLWhhcmQgY29uZmxpY3RzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCWVjaG8gb25lID5tYWluLnR4dCAmJgorCWdpdCBhZGQgbWFpbi50eHQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorT24gYnJhbmNoIGNvbmZsaWN0cworQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLgorICAodXNlICJnaXQgY29tbWl0IiB0byBjb25jbHVkZSBtZXJnZSkKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisJbW9kaWZpZWQ6ICAgbWFpbi50eHQKKworVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBmb3IgcmViYXNlIGNvbmZsaWN0cycgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZV9jb25mbGljdHMgJiYKKwl0ZXN0X2NvbW1pdCBvbmVfcmViYXNlIG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19yZWJhc2UgbWFpbi50eHQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWVfcmViYXNlIG1haW4udHh0IHRocmVlCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gcmViYXNlIC0tYXBwbHkgaW4gcHJvZ3Jlc3MgYmVmb3JlIHJlc29sdmluZyBjb25mbGljdHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReXikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tYXBwbHkgSEVBRF4gLS1vbnRvIEhFQUReXiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK3JlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICdcJydyZWJhc2VfY29uZmxpY3RzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIpCisgICh1c2UgImdpdCByZWJhc2UgLS1za2lwIiB0byBza2lwIHRoaXMgcGF0Y2gpCisgICh1c2UgImdpdCByZWJhc2UgLS1hYm9ydCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpCisKK1VubWVyZ2VkIHBhdGhzOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBtYXJrIHJlc29sdXRpb24pCisJYm90aCBtb2RpZmllZDogICBtYWluLnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIHJlYmFzZSAtLWFwcGx5IGluIHByb2dyZXNzIGJlZm9yZSByZWJhc2UgLS1jb250aW51ZScgJworCWdpdCByZXNldCAtLWhhcmQgcmViYXNlX2NvbmZsaWN0cyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF5eKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1hcHBseSBIRUFEXiAtLW9udG8gSEVBRF5eICYmCisJZWNobyB0aHJlZSA+bWFpbi50eHQgJiYKKwlnaXQgYWRkIG1haW4udHh0ICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJ1wnJ3JlYmFzZV9jb25mbGljdHMnXCcnIG9uICdcJyckT05UTydcJycuCisgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIpCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisJbW9kaWZpZWQ6ICAgbWFpbi50eHQKKworVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBmb3IgcmViYXNlX2lfY29uZmxpY3RzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmViYXNlX2lfY29uZmxpY3RzICYmCisJdGVzdF9jb21taXQgb25lX3VubWVyZ2UgbWFpbi50eHQgb25lX3VubWVyZ2UgJiYKKwlnaXQgYnJhbmNoIHJlYmFzZV9pX2NvbmZsaWN0c19zZWNvbmQgJiYKKwl0ZXN0X2NvbW1pdCBvbmVfbWFzdGVyIG1haW4udHh0IG9uZV9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgcmViYXNlX2lfY29uZmxpY3RzX3NlY29uZCAmJgorCXRlc3RfY29tbWl0IG9uZV9zZWNvbmQgbWFpbi50eHQgb25lX3NlY29uZAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBkdXJpbmcgcmViYXNlIC1pIHdoZW4gY29uZmxpY3RzIHVucmVzb2x2ZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHJlYmFzZV9pX2NvbmZsaWN0cykgJiYKKwlMQVNUX0NPTU1JVD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCByZWJhc2VfaV9jb25mbGljdHNfc2Vjb25kKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgcmViYXNlX2lfY29uZmxpY3RzICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmQgZG9uZSAoMSBjb21tYW5kIGRvbmUpOgorICAgcGljayAkTEFTVF9DT01NSVQgb25lX3NlY29uZAorTm8gY29tbWFuZHMgcmVtYWluaW5nLgorWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICdcJydyZWJhc2VfaV9jb25mbGljdHNfc2Vjb25kJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIpCisgICh1c2UgImdpdCByZWJhc2UgLS1za2lwIiB0byBza2lwIHRoaXMgcGF0Y2gpCisgICh1c2UgImdpdCByZWJhc2UgLS1hYm9ydCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpCisKK1VubWVyZ2VkIHBhdGhzOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBtYXJrIHJlc29sdXRpb24pCisJYm90aCBtb2RpZmllZDogICBtYWluLnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBkdXJpbmcgcmViYXNlIC1pIGFmdGVyIHJlc29sdmluZyBjb25mbGljdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHJlYmFzZV9pX2NvbmZsaWN0c19zZWNvbmQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHJlYmFzZV9pX2NvbmZsaWN0cykgJiYKKwlMQVNUX0NPTU1JVD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCByZWJhc2VfaV9jb25mbGljdHNfc2Vjb25kKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgcmViYXNlX2lfY29uZmxpY3RzICYmCisJZ2l0IGFkZCBtYWluLnR4dCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kIGRvbmUgKDEgY29tbWFuZCBkb25lKToKKyAgIHBpY2sgJExBU1RfQ09NTUlUIG9uZV9zZWNvbmQKK05vIGNvbW1hbmRzIHJlbWFpbmluZy4KK1lvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnXCcncmViYXNlX2lfY29uZmxpY3RzX3NlY29uZCdcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKwltb2RpZmllZDogICBtYWluLnR4dAorCitVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiByZWJhc2luZyAtaSBpbiBlZGl0IG1vZGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiByZWJhc2VfaV9lZGl0ICYmCisJdGVzdF9jb21taXQgb25lX3JlYmFzZV9pIG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19yZWJhc2VfaSBtYWluLnR4dCB0d28gJiYKKwlDT01NSVQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHJlYmFzZV9pX2VkaXQpICYmCisJdGVzdF9jb21taXQgdGhyZWVfcmViYXNlX2kgbWFpbi50eHQgdGhyZWUgJiYKKwlDT01NSVQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHJlYmFzZV9pX2VkaXQpICYmCisJRkFLRV9MSU5FUz0iMSBlZGl0IDIiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MikgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kcyBkb25lICgyIGNvbW1hbmRzIGRvbmUpOgorICAgcGljayAkQ09NTUlUMiB0d29fcmViYXNlX2kKKyAgIGVkaXQgJENPTU1JVDMgdGhyZWVfcmViYXNlX2kKK05vIGNvbW1hbmRzIHJlbWFpbmluZy4KK1lvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydyZWJhc2VfaV9lZGl0J1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAodXNlICJnaXQgY29tbWl0IC0tYW1lbmQiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKQorCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIHNwbGl0dGluZyBhIGNvbW1pdCcgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNwbGl0X2NvbW1pdCAmJgorCXRlc3RfY29tbWl0IG9uZV9zcGxpdCBtYWluLnR4dCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d29fc3BsaXQgbWFpbi50eHQgdHdvICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzcGxpdF9jb21taXQpICYmCisJdGVzdF9jb21taXQgdGhyZWVfc3BsaXQgbWFpbi50eHQgdGhyZWUgJiYKKwlDT01NSVQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNwbGl0X2NvbW1pdCkgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyX3NwbGl0IG1haW4udHh0IGZvdXIgJiYKKwlDT01NSVQ0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNwbGl0X2NvbW1pdCkgJiYKKwlGQUtFX0xJTkVTPSIxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjMpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMiBjb21tYW5kcyBkb25lKToKKyAgIHBpY2sgJENPTU1JVDIgdHdvX3NwbGl0CisgICBlZGl0ICRDT01NSVQzIHRocmVlX3NwbGl0CitOZXh0IGNvbW1hbmQgdG8gZG8gKDEgcmVtYWluaW5nIGNvbW1hbmQpOgorICAgcGljayAkQ09NTUlUNCBmb3VyX3NwbGl0CisgICh1c2UgImdpdCByZWJhc2UgLS1lZGl0LXRvZG8iIHRvIHZpZXcgYW5kIGVkaXQpCitZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzcGxpdF9jb21taXQnXCcnIG9uICdcJyckT05UTydcJycuCisgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisJbW9kaWZpZWQ6ICAgbWFpbi50eHQKKworbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgYWZ0ZXIgZWRpdGluZyB0aGUgbGFzdCBjb21taXQgd2l0aCAtLWFtZW5kIGR1cmluZyBhIHJlYmFzZSAtaScgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGFtZW5kX2xhc3QgJiYKKwl0ZXN0X2NvbW1pdCBvbmVfYW1lbmQgbWFpbi50eHQgb25lICYmCisJdGVzdF9jb21taXQgdHdvX2FtZW5kIG1haW4udHh0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlX2FtZW5kIG1haW4udHh0IHRocmVlICYmCisJQ09NTUlUMz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBhbWVuZF9sYXN0KSAmJgorCXRlc3RfY29tbWl0IGZvdXJfYW1lbmQgbWFpbi50eHQgZm91ciAmJgorCUNPTU1JVDQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgYW1lbmRfbGFzdCkgJiYKKwlGQUtFX0xJTkVTPSIxIDIgZWRpdCAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjMpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImZvbyIgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMyBjb21tYW5kcyBkb25lKToKKyAgIHBpY2sgJENPTU1JVDMgdGhyZWVfYW1lbmQKKyAgIGVkaXQgJENPTU1JVDQgZm91cl9hbWVuZAorICAoc2VlIG1vcmUgaW4gZmlsZSAuZ2l0L3JlYmFzZS1tZXJnZS9kb25lKQorTm8gY29tbWFuZHMgcmVtYWluaW5nLgorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ2FtZW5kX2xhc3QnXCcnIG9uICdcJyckT05UTydcJycuCisgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBmb3Igc2V2ZXJhbCBlZGl0cycgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNldmVyYWxfZWRpdHMgJiYKKwl0ZXN0X2NvbW1pdCBvbmVfZWRpdHMgbWFpbi50eHQgb25lICYmCisJdGVzdF9jb21taXQgdHdvX2VkaXRzIG1haW4udHh0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlX2VkaXRzIG1haW4udHh0IHRocmVlICYmCisJdGVzdF9jb21taXQgZm91cl9lZGl0cyBtYWluLnR4dCBmb3VyCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiAoY29udGludWUgZmlyc3QgZWRpdCkgc2Vjb25kIGVkaXQnICcKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZWRpdCAyIDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlDT01NSVQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeXikgJiYKKwlDT01NSVQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeKSAmJgorCUNPTU1JVDQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0cykgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MykgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kcyBkb25lICgyIGNvbW1hbmRzIGRvbmUpOgorICAgZWRpdCAkQ09NTUlUMiB0d29fZWRpdHMKKyAgIGVkaXQgJENPTU1JVDMgdGhyZWVfZWRpdHMKK05leHQgY29tbWFuZCB0byBkbyAoMSByZW1haW5pbmcgY29tbWFuZCk6CisgICBwaWNrICRDT01NSVQ0IGZvdXJfZWRpdHMKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyIgdG8gdmlldyBhbmQgZWRpdCkKK1lvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2VkaXRzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAodXNlICJnaXQgY29tbWl0IC0tYW1lbmQiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKQorCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogKGNvbnRpbnVlIGZpcnN0IGVkaXQpIHNlY29uZCBlZGl0IGFuZCBzcGxpdCcgJworCWdpdCByZXNldCAtLWhhcmQgc2V2ZXJhbF9lZGl0cyAmJgorCUZBS0VfTElORVM9ImVkaXQgMSBlZGl0IDIgMyIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCUNPTU1JVDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c15eKSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c14pICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzKSAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4zKSAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IHJlc2V0IEhFQUReICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmRzIGRvbmUgKDIgY29tbWFuZHMgZG9uZSk6CisgICBlZGl0ICRDT01NSVQyIHR3b19lZGl0cworICAgZWRpdCAkQ09NTUlUMyB0aHJlZV9lZGl0cworTmV4dCBjb21tYW5kIHRvIGRvICgxIHJlbWFpbmluZyBjb21tYW5kKToKKyAgIHBpY2sgJENPTU1JVDQgZm91cl9lZGl0cworICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc2V2ZXJhbF9lZGl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwltb2RpZmllZDogICBtYWluLnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogKGNvbnRpbnVlIGZpcnN0IGVkaXQpIHNlY29uZCBlZGl0IGFuZCBhbWVuZCcgJworCWdpdCByZXNldCAtLWhhcmQgc2V2ZXJhbF9lZGl0cyAmJgorCUZBS0VfTElORVM9ImVkaXQgMSBlZGl0IDIgMyIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCUNPTU1JVDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c15eKSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c14pICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzKSAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4zKSAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJmb28iICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmRzIGRvbmUgKDIgY29tbWFuZHMgZG9uZSk6CisgICBlZGl0ICRDT01NSVQyIHR3b19lZGl0cworICAgZWRpdCAkQ09NTUlUMyB0aHJlZV9lZGl0cworTmV4dCBjb21tYW5kIHRvIGRvICgxIHJlbWFpbmluZyBjb21tYW5kKToKKyAgIHBpY2sgJENPTU1JVDQgZm91cl9lZGl0cworICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfZWRpdHMnXCcnIG9uICdcJyckT05UTydcJycuCisgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiAoYW1lbmQgZmlyc3QgZWRpdCkgc2Vjb25kIGVkaXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHNldmVyYWxfZWRpdHMgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZWRpdCAyIDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlDT01NSVQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeXikgJiYKKwlDT01NSVQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeKSAmJgorCUNPTU1JVDQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0cykgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MykgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiYSIgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMiBjb21tYW5kcyBkb25lKToKKyAgIGVkaXQgJENPTU1JVDIgdHdvX2VkaXRzCisgICBlZGl0ICRDT01NSVQzIHRocmVlX2VkaXRzCitOZXh0IGNvbW1hbmQgdG8gZG8gKDEgcmVtYWluaW5nIGNvbW1hbmQpOgorICAgcGljayAkQ09NTUlUNCBmb3VyX2VkaXRzCisgICh1c2UgImdpdCByZWJhc2UgLS1lZGl0LXRvZG8iIHRvIHZpZXcgYW5kIGVkaXQpCitZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc2V2ZXJhbF9lZGl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IChhbWVuZCBmaXJzdCBlZGl0KSBzZWNvbmQgZWRpdCBhbmQgc3BsaXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHNldmVyYWxfZWRpdHMgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZWRpdCAyIDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MykgJiYKKwlDT01NSVQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeXikgJiYKKwlDT01NSVQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeKSAmJgorCUNPTU1JVDQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0cykgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiYiIgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMiBjb21tYW5kcyBkb25lKToKKyAgIGVkaXQgJENPTU1JVDIgdHdvX2VkaXRzCisgICBlZGl0ICRDT01NSVQzIHRocmVlX2VkaXRzCitOZXh0IGNvbW1hbmQgdG8gZG8gKDEgcmVtYWluaW5nIGNvbW1hbmQpOgorICAgcGljayAkQ09NTUlUNCBmb3VyX2VkaXRzCisgICh1c2UgImdpdCByZWJhc2UgLS1lZGl0LXRvZG8iIHRvIHZpZXcgYW5kIGVkaXQpCitZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2VkaXRzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIpCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCW1vZGlmaWVkOiAgIG1haW4udHh0CisKK25vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiAoYW1lbmQgZmlyc3QgZWRpdCkgc2Vjb25kIGVkaXQgYW5kIGFtZW5kJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBzZXZlcmFsX2VkaXRzICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXl4pICYmCisJQ09NTUlUMz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXikgJiYKKwlDT01NSVQ0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHMpICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjMpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImMiICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJkIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kcyBkb25lICgyIGNvbW1hbmRzIGRvbmUpOgorICAgZWRpdCAkQ09NTUlUMiB0d29fZWRpdHMKKyAgIGVkaXQgJENPTU1JVDMgdGhyZWVfZWRpdHMKK05leHQgY29tbWFuZCB0byBkbyAoMSByZW1haW5pbmcgY29tbWFuZCk6CisgICBwaWNrICRDT01NSVQ0IGZvdXJfZWRpdHMKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyIgdG8gdmlldyBhbmQgZWRpdCkKK1lvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2VkaXRzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAodXNlICJnaXQgY29tbWl0IC0tYW1lbmQiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKQorCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogKHNwbGl0IGZpcnN0IGVkaXQpIHNlY29uZCBlZGl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBzZXZlcmFsX2VkaXRzICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXl4pICYmCisJQ09NTUlUMz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXikgJiYKKwlDT01NSVQ0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHMpICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjMpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwlnaXQgYWRkIG1haW4udHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiZSIgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMiBjb21tYW5kcyBkb25lKToKKyAgIGVkaXQgJENPTU1JVDIgdHdvX2VkaXRzCisgICBlZGl0ICRDT01NSVQzIHRocmVlX2VkaXRzCitOZXh0IGNvbW1hbmQgdG8gZG8gKDEgcmVtYWluaW5nIGNvbW1hbmQpOgorICAgcGljayAkQ09NTUlUNCBmb3VyX2VkaXRzCisgICh1c2UgImdpdCByZWJhc2UgLS1lZGl0LXRvZG8iIHRvIHZpZXcgYW5kIGVkaXQpCitZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc2V2ZXJhbF9lZGl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IChzcGxpdCBmaXJzdCBlZGl0KSBzZWNvbmQgZWRpdCBhbmQgc3BsaXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHNldmVyYWxfZWRpdHMgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZWRpdCAyIDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlDT01NSVQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeXikgJiYKKwlDT01NSVQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeKSAmJgorCUNPTU1JVDQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0cykgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MykgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCByZXNldCBIRUFEXiAmJgorCWdpdCBhZGQgbWFpbi50eHQgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImYiICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IHJlc2V0IEhFQUReICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmRzIGRvbmUgKDIgY29tbWFuZHMgZG9uZSk6CisgICBlZGl0ICRDT01NSVQyIHR3b19lZGl0cworICAgZWRpdCAkQ09NTUlUMyB0aHJlZV9lZGl0cworTmV4dCBjb21tYW5kIHRvIGRvICgxIHJlbWFpbmluZyBjb21tYW5kKToKKyAgIHBpY2sgJENPTU1JVDQgZm91cl9lZGl0cworICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc2V2ZXJhbF9lZGl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwltb2RpZmllZDogICBtYWluLnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogKHNwbGl0IGZpcnN0IGVkaXQpIHNlY29uZCBlZGl0IGFuZCBhbWVuZCcgJworCWdpdCByZXNldCAtLWhhcmQgc2V2ZXJhbF9lZGl0cyAmJgorCUZBS0VfTElORVM9ImVkaXQgMSBlZGl0IDIgMyIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCUNPTU1JVDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c15eKSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c14pICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzKSAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4zKSAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJZ2l0IHJlc2V0IEhFQUReICYmCisJZ2l0IGFkZCBtYWluLnR4dCAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZyIgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImgiICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmRzIGRvbmUgKDIgY29tbWFuZHMgZG9uZSk6CisgICBlZGl0ICRDT01NSVQyIHR3b19lZGl0cworICAgZWRpdCAkQ09NTUlUMyB0aHJlZV9lZGl0cworTmV4dCBjb21tYW5kIHRvIGRvICgxIHJlbWFpbmluZyBjb21tYW5kKToKKyAgIHBpY2sgJENPTU1JVDQgZm91cl9lZGl0cworICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfZWRpdHMnXCcnIG9uICdcJyckT05UTydcJycuCisgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBhbV9zZXNzaW9uJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYW1fc2Vzc2lvbiAmJgorCXRlc3RfY29tbWl0IG9uZV9hbSBvbmUudHh0ICJvbmUiICYmCisJdGVzdF9jb21taXQgdHdvX2FtIHR3by50eHQgInR3byIgJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9hbSB0aHJlZS50eHQgInRocmVlIgorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpbiBhbiBhbSBzZXNzaW9uOiBmaWxlIGFscmVhZHkgZXhpc3RzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGFtX2FscmVhZHlfZXhpc3RzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBNYWlsZGlyLyogJiYgZ2l0IGFtIC0tYWJvcnQiICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtb01haWxkaXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gTWFpbGRpci8qLnBhdGNoICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK09uIGJyYW5jaCBhbV9hbHJlYWR5X2V4aXN0cworWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uCisgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biAiZ2l0IGFtIC0tY29udGludWUiKQorICAodXNlICJnaXQgYW0gLS1za2lwIiB0byBza2lwIHRoaXMgcGF0Y2gpCisgICh1c2UgImdpdCBhbSAtLWFib3J0IiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGluIGFuIGFtIHNlc3Npb246IGZpbGUgZG9lcyBub3QgZXhpc3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGFtX3Nlc3Npb24gJiYKKwlnaXQgY2hlY2tvdXQgLWIgYW1fbm90X2V4aXN0cyAmJgorCWdpdCBybSB0aHJlZS50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJkZWxldGUgdGhyZWUudHh0IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gTWFpbGRpci8qICYmIGdpdCBhbSAtLWFib3J0IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLW9NYWlsZGlyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIE1haWxkaXIvKi5wYXRjaCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitPbiBicmFuY2ggYW1fbm90X2V4aXN0cworWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uCisgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biAiZ2l0IGFtIC0tY29udGludWUiKQorICAodXNlICJnaXQgYW0gLS1za2lwIiB0byBza2lwIHRoaXMgcGF0Y2gpCisgICh1c2UgImdpdCBhbSAtLWFib3J0IiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGluIGFuIGFtIHNlc3Npb246IGVtcHR5IHBhdGNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBhbV9zZXNzaW9uICYmCisJZ2l0IGNoZWNrb3V0IC1iIGFtX2VtcHR5ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBNYWlsZGlyLyogJiYgZ2l0IGFtIC0tYWJvcnQiICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMyAtb01haWxkaXIgJiYKKwlnaXQgcm0gb25lLnR4dCB0d28udHh0IHRocmVlLnR4dCAmJgorCWdpdCBjb21taXQgLW0gImRlbGV0ZSBhbGwgYW1fZW1wdHkiICYmCisJZWNobyBlcnJvciA+TWFpbGRpci8wMDAyLXR3b19hbS5wYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSBNYWlsZGlyLyoucGF0Y2ggJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorT24gYnJhbmNoIGFtX2VtcHR5CitZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4KK1RoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LgorICAodXNlICJnaXQgYW0gLS1za2lwIiB0byBza2lwIHRoaXMgcGF0Y2gpCisgICh1c2UgImdpdCBhbSAtLWFib3J0IiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gYmlzZWN0aW5nJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYmlzZWN0ICYmCisJdGVzdF9jb21taXQgb25lX2Jpc2VjdCBtYWluLnR4dCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d29fYmlzZWN0IG1haW4udHh0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlX2Jpc2VjdCBtYWluLnR4dCB0aHJlZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGJpc2VjdCByZXNldCIgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBiYWQgJiYKKwlnaXQgYmlzZWN0IGdvb2Qgb25lX2Jpc2VjdCAmJgorCVRHVD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCB0d29fYmlzZWN0KSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK0hFQUQgZGV0YWNoZWQgYXQgJFRHVAorWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLCBzdGFydGVkIGZyb20gYnJhbmNoICdcJydiaXNlY3QnXCcnLgorICAodXNlICJnaXQgYmlzZWN0IHJlc2V0IiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKQorCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIHJlYmFzZSAtLWFwcGx5IGNvbmZsaWN0cyB3aXRoIHN0YXR1c2hpbnRzIGRpc2FibGVkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc3RhdHVzaGludHNfZGlzYWJsZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjb25maWcgLS1sb2NhbCBhZHZpY2Uuc3RhdHVzaGludHMgdHJ1ZSIgJiYKKwlnaXQgY29uZmlnIC0tbG9jYWwgYWR2aWNlLnN0YXR1c2hpbnRzIGZhbHNlICYmCisJdGVzdF9jb21taXQgb25lX3N0YXR1c2hpbnRzIG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19zdGF0dXNoaW50cyBtYWluLnR4dCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9zdGF0dXNoaW50cyBtYWluLnR4dCB0aHJlZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF5eKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1hcHBseSBIRUFEXiAtLW9udG8gSEVBRF5eICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJ1wnJ3N0YXR1c2hpbnRzX2Rpc2FibGVkJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorCitVbm1lcmdlZCBwYXRoczoKKwlib3RoIG1vZGlmaWVkOiAgIG1haW4udHh0CisKK25vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0CitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBmb3IgY2hlcnJ5LXBpY2sgY29uZmxpY3RzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY2hlcnJ5X2JyYW5jaCAmJgorCXRlc3RfY29tbWl0IG9uZV9jaGVycnkgbWFpbi50eHQgb25lICYmCisJdGVzdF9jb21taXQgdHdvX2NoZXJyaWVzIG1haW4udHh0IHR3byAmJgorCWdpdCBjaGVja291dCAtYiBjaGVycnlfYnJhbmNoX3NlY29uZCAmJgorCXRlc3RfY29tbWl0IHNlY29uZF9jaGVycnkgbWFpbi50eHQgc2Vjb25kICYmCisJZ2l0IGNoZWNrb3V0IGNoZXJyeV9icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9jaGVycmllcyBtYWluLnR4dCB0aHJlZQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIGNoZXJyeS1waWNraW5nIGJlZm9yZSByZXNvbHZpbmcgY29uZmxpY3RzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgY2hlcnJ5X2JyYW5jaF9zZWNvbmQgJiYKKwlUT19DSEVSUllfUElDSz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBDSEVSUllfUElDS19IRUFEKSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK09uIGJyYW5jaCBjaGVycnlfYnJhbmNoCitZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJFRPX0NIRVJSWV9QSUNLLgorICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuICJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSIpCisgICh1c2UgImdpdCBjaGVycnktcGljayAtLXNraXAiIHRvIHNraXAgdGhpcyBwYXRjaCkKKyAgKHVzZSAiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKQorCitVbm1lcmdlZCBwYXRoczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIG1hcmsgcmVzb2x1dGlvbikKKwlib3RoIG1vZGlmaWVkOiAgIG1haW4udHh0CisKK25vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gY2hlcnJ5LXBpY2tpbmcgYWZ0ZXIgcmVzb2x2aW5nIGNvbmZsaWN0cycgJworCWdpdCByZXNldCAtLWhhcmQgY2hlcnJ5X2JyYW5jaCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGNoZXJyeV9icmFuY2hfc2Vjb25kICYmCisJVE9fQ0hFUlJZX1BJQ0s9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgQ0hFUlJZX1BJQ0tfSEVBRCkgJiYKKwllY2hvIGVuZCA+bWFpbi50eHQgJiYKKwlnaXQgYWRkIG1haW4udHh0ICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorT24gYnJhbmNoIGNoZXJyeV9icmFuY2gKK1lvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAkVE9fQ0hFUlJZX1BJQ0suCisgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlIikKKyAgKHVzZSAiZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQorICAodXNlICJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorCW1vZGlmaWVkOiAgIG1haW4udHh0CisKK1VudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjaGVycnktcGlja2luZyBhZnRlciBjb21taXR0aW5nIGNvbmZsaWN0IHJlc29sdXRpb24nICcKKwlnaXQgcmVzZXQgLS1oYXJkIGNoZXJyeV9icmFuY2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVycnktcGljayAtLWFib3J0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBjaGVycnlfYnJhbmNoX3NlY29uZCBvbmVfY2hlcnJ5ICYmCisJZWNobyBlbmQgPm1haW4udHh0ICYmCisJZ2l0IGNvbW1pdCAtYSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK09uIGJyYW5jaCBjaGVycnlfYnJhbmNoCitDaGVycnktcGljayBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuCisgIChydW4gImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlIiB0byBjb250aW51ZSkKKyAgKHVzZSAiZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQorICAodXNlICJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG93cyBjaGVycnktcGljayB3aXRoIGludmFsaWQgb2lkJyAnCisJbWtkaXIgLmdpdC9zZXF1ZW5jZXIgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICJwaWNrIGludmFsaWQtb2lkIiA+LmdpdC9zZXF1ZW5jZXIvdG9kbyAmJgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAyPmVyciAmJgorCWdpdCBjaGVycnktcGljayAtLXF1aXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgZG9lcyBub3Qgc2hvdyBlcnJvciBpZiAuZ2l0L3NlcXVlbmNlciBpcyBhIGZpbGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC5naXQvc2VxdWVuY2VyIiAmJgorCXRlc3Rfd3JpdGVfbGluZXMgaGVsbG8gPi5naXQvc2VxdWVuY2VyICYmCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNob3dpbmcgZGV0YWNoZWQgYXQgYW5kIGZyb20gYSB0YWcnICcKKwl0ZXN0X2NvbW1pdCBhdGFnIHRhZ2dpbmcgJiYKKwlnaXQgY2hlY2tvdXQgYXRhZyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitIRUFEIGRldGFjaGVkIGF0IGF0YWcKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK0hFQUQgZGV0YWNoZWQgZnJvbSBhdGFnCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hpbGUgcmV2ZXJ0aW5nIGNvbW1pdCAoY29uZmxpY3RzKScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIGJlZm9yZSA+dG8tcmV2ZXJ0LnR4dCAmJgorCXRlc3RfY29tbWl0IGJlZm9yZSB0by1yZXZlcnQudHh0ICYmCisJZWNobyBvbGQgPnRvLXJldmVydC50eHQgJiYKKwl0ZXN0X2NvbW1pdCBvbGQgdG8tcmV2ZXJ0LnR4dCAmJgorCWVjaG8gbmV3ID50by1yZXZlcnQudHh0ICYmCisJdGVzdF9jb21taXQgbmV3IHRvLXJldmVydC50eHQgJiYKKwlUT19SRVZFUlQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCAkVE9fUkVWRVJUICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAkVE9fUkVWRVJULgorICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuICJnaXQgcmV2ZXJ0IC0tY29udGludWUiKQorICAodXNlICJnaXQgcmV2ZXJ0IC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQorICAodXNlICJnaXQgcmV2ZXJ0IC0tYWJvcnQiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikKKworVW5tZXJnZWQgcGF0aHM6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIG1hcmsgcmVzb2x1dGlvbikKKwlib3RoIG1vZGlmaWVkOiAgIHRvLXJldmVydC50eHQKKworbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoaWxlIHJldmVydGluZyBjb21taXQgKGNvbmZsaWN0cyByZXNvbHZlZCknICcKKwllY2hvIHJldmVydGVkID50by1yZXZlcnQudHh0ICYmCisJZ2l0IGFkZCB0by1yZXZlcnQudHh0ICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAkVE9fUkVWRVJULgorICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuICJnaXQgcmV2ZXJ0IC0tY29udGludWUiKQorICAodXNlICJnaXQgcmV2ZXJ0IC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQorICAodXNlICJnaXQgcmV2ZXJ0IC0tYWJvcnQiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKwltb2RpZmllZDogICB0by1yZXZlcnQudHh0CisKK1VudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgYWZ0ZXIgcmV2ZXJ0aW5nIGNvbW1pdCcgJworCWdpdCByZXZlcnQgLS1jb250aW51ZSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hpbGUgcmV2ZXJ0aW5nIGFmdGVyIGNvbW1pdHRpbmcgY29uZmxpY3QgcmVzb2x1dGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJldmVydCAtLWFib3J0IiAmJgorCWdpdCByZXNldCAtLWhhcmQgbmV3ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBvbGQgbmV3ICYmCisJZWNobyByZXZlcnRlZCA+dG8tcmV2ZXJ0LnR4dCAmJgorCWdpdCBjb21taXQgLWEgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitSZXZlcnQgY3VycmVudGx5IGluIHByb2dyZXNzLgorICAocnVuICJnaXQgcmV2ZXJ0IC0tY29udGludWUiIHRvIGNvbnRpbnVlKQorICAodXNlICJnaXQgcmV2ZXJ0IC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQorICAodXNlICJnaXQgcmV2ZXJ0IC0tYWJvcnQiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBmb3IgZGlmZmVyZW50IG51bWJlciBvZiBjb21taXRzIHJlYmFzZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBzZXZlcmFsX2NvbW1pdHMgJiYKKwl0ZXN0X2NvbW1pdCBvbmVfY29tbWl0IG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19jb21taXQgbWFpbi50eHQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWVfY29tbWl0IG1haW4udHh0IHRocmVlICYmCisJdGVzdF9jb21taXQgZm91cl9jb21taXQgbWFpbi50eHQgZm91cgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IG9uZSBjb21tYW5kIGRvbmUgbm90aGluZyByZW1haW5pbmcnICcKKwlGQUtFX0xJTkVTPSJleGVjX2V4aXRfMTUiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MykgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kIGRvbmUgKDEgY29tbWFuZCBkb25lKToKKyAgIGV4ZWMgZXhpdCAxNQorTm8gY29tbWFuZHMgcmVtYWluaW5nLgorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfY29tbWl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiB0d28gY29tbWFuZHMgZG9uZSB3aXRoIHNvbWUgd2hpdGUgbGluZXMgaW4gZG9uZSBmaWxlJyAnCisJRkFLRV9MSU5FUz0iMSA+IGV4ZWNfZXhpdF8xNSAgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjMpICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXl4pICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMiBjb21tYW5kcyBkb25lKToKKyAgIHBpY2sgJENPTU1JVDIgdHdvX2NvbW1pdAorICAgZXhlYyBleGl0IDE1CitOZXh0IGNvbW1hbmRzIHRvIGRvICgyIHJlbWFpbmluZyBjb21tYW5kcyk6CisgICBwaWNrICRDT01NSVQzIHRocmVlX2NvbW1pdAorICAgcGljayAkQ09NTUlUNCBmb3VyX2NvbW1pdAorICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfY29tbWl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiB0d28gcmVtYWluaW5nIGNvbW1hbmRzIHdpdGggc29tZSB3aGl0ZSBsaW5lcyBpbiB0b2RvIGZpbGUnICcKKwlGQUtFX0xJTkVTPSIxIDIgZXhlY19leGl0XzE1IDMgPiA0IiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjQpICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXl4pICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBIRUFEfjQgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMyBjb21tYW5kcyBkb25lKToKKyAgIHBpY2sgJENPTU1JVDIgdHdvX2NvbW1pdAorICAgZXhlYyBleGl0IDE1CisgIChzZWUgbW9yZSBpbiBmaWxlIC5naXQvcmViYXNlLW1lcmdlL2RvbmUpCitOZXh0IGNvbW1hbmRzIHRvIGRvICgyIHJlbWFpbmluZyBjb21tYW5kcyk6CisgICBwaWNrICRDT01NSVQzIHRocmVlX2NvbW1pdAorICAgcGljayAkQ09NTUlUNCBmb3VyX2NvbW1pdAorICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfY29tbWl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiBoYW5kbGUgbm90LXlldC1zdGFydGVkIHJlYmFzZSAtaSBncmFjZWZ1bGx5JyAnCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXikgJiYKKwlDT01NSVQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlFRElUT1I9ImdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK09uIGJyYW5jaCBzZXZlcmFsX2NvbW1pdHMKK05vIGNvbW1hbmRzIGRvbmUuCitOZXh0IGNvbW1hbmQgdG8gZG8gKDEgcmVtYWluaW5nIGNvbW1hbmQpOgorICAgcGljayAkQ09NTUlUIGZvdXJfY29tbWl0CisgICh1c2UgImdpdCByZWJhc2UgLS1lZGl0LXRvZG8iIHRvIHZpZXcgYW5kIGVkaXQpCitZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc2V2ZXJhbF9jb21taXRzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAodXNlICJnaXQgY29tbWl0IC0tYW1lbmQiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKQorCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MTMtaW50ZXJwcmV0LXRyYWlsZXJzLnNoIGIvdC90NzUxMy1pbnRlcnByZXQtdHJhaWxlcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjYwMjc5MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MTMtaW50ZXJwcmV0LXRyYWlsZXJzLnNoCkBAIC0wLDAgKzEsMTQ3OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMywgMjAxNCBDaHJpc3RpYW4gQ291ZGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBpbnRlcnByZXQtdHJhaWxlcnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFdoZW4gd2Ugd2FudCBvbmUgdHJhaWxpbmcgc3BhY2UgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUsIGxldCdzIHVzZSBzZWQKKyMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2Ugc3BhY2VzIGFyZSBub3QgcmVtb3ZlZCBieSBhbnkgYXV0b21hdGljIHRvb2wuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJOiA+ZW1wdHkgJiYKKwljYXQgPmJhc2ljX21lc3NhZ2UgPDwtXEVPRiAmJgorCQlzdWJqZWN0CisKKwkJYm9keQorCUVPRgorCWNhdCA+Y29tcGxleF9tZXNzYWdlX2JvZHkgPDwtXEVPRiAmJgorCQlteSBzdWJqZWN0CisKKwkJbXkgYm9keSB3aGljaCBpcyBsb25nCisJCWFuZCBjb250YWlucyBzb21lIHNwZWNpYWwKKwkJY2hhcnMgbGlrZSA6ID0gPyAhCisKKwlFT0YKKwlzZWQgLWUgInMvIFpcJC8gLyIgPmNvbXBsZXhfbWVzc2FnZV90cmFpbGVycyA8PC1cRU9GICYmCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5OiBaCisJCVJldmlld2VkLWJ5OiBaCisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwljYXQgPmJhc2ljX3BhdGNoIDw8LVxFT0YKKwkJLS0tCisJCSBmb28udHh0IHwgMiArLQorCQkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKwkJZGlmZiAtLWdpdCBhL2Zvby50eHQgYi9mb28udHh0CisJCWluZGV4IDAzNTM3NjcuLjFkOTFhYTEgMTAwNjQ0CisJCS0tLSBhL2Zvby50eHQKKwkJKysrIGIvZm9vLnR4dAorCQlAQCAtMSwzICsxLDMgQEAKKworCQktYmFyCisJCStiYXoKKworCQktLQorCQkxLjkucmMwLjExLmdhNTYyZGRjCisKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aG91dCBjb25maWcnICcKKwlzZWQgLWUgInMvIFpcJC8gLyIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlhY2s6IFBlZmYKKwkJUmV2aWV3ZWQtYnk6IFoKKwkJQWNrZWQtYnk6IEpvaGFuCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjayA9IFBlZmYiIC0tdHJhaWxlciAiUmV2aWV3ZWQtYnkiIFwKKwkJLS10cmFpbGVyICJBY2tlZC1ieTogSm9oYW4iIGVtcHR5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aG91dCBjb25maWcgaW4gYW5vdGhlciBvcmRlcicgJworCXNlZCAtZSAicy8gWlwkLyAvIiA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCUFja2VkLWJ5OiBKb2hhbgorCQlSZXZpZXdlZC1ieTogWgorCQlhY2s6IFBlZmYKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiQWNrZWQtYnk6IEpvaGFuIiAtLXRyYWlsZXIgIlJldmlld2VkLWJ5IiBcCisJCS0tdHJhaWxlciAiYWNrID0gUGVmZiIgZW1wdHkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXRyaW0tZW1wdHkgd2l0aG91dCBjb25maWcnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlhY2s6IFBlZmYKKwkJQWNrZWQtYnk6IEpvaGFuCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyaW0tZW1wdHkgLS10cmFpbGVyIGFjaz1QZWZmIFwKKwkJLS10cmFpbGVyICJSZXZpZXdlZC1ieSIgLS10cmFpbGVyICJBY2tlZC1ieTogSm9oYW4iIFwKKwkJLS10cmFpbGVyICJzb2I6IiBlbXB0eSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29uZmlnIG9wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJQWNrZWQtYnk6IEpvaGFuCisJCVJldmlld2VkLWJ5OiBQZWZmCisJRU9GCisJeyBlY2hvOyBlY2hvICJBY2tlZC1ieTogSm9oYW4iOyB9IHwKKwlnaXQgLWMgInRyYWlsZXIuQWNrZWQtYnkuaWZleGlzdHM9YWRkaWZkaWZmZXJlbnQiIGludGVycHJldC10cmFpbGVycyBcCisJCS0tdHJhaWxlciAiUmV2aWV3ZWQtYnk6IFBlZmYiIC0tdHJhaWxlciAiQWNrZWQtYnk6IEpvaGFuIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggb25seSBhIHRpdGxlIGluIHRoZSBtZXNzYWdlJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJCWFyZWE6IGNoYW5nZQorCisJCVJldmlld2VkLWJ5OiBQZWZmCisJCUFja2VkLWJ5OiBKb2hhbgorCUVPRgorCWVjaG8gImFyZWE6IGNoYW5nZSIgfAorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJSZXZpZXdlZC1ieTogUGVmZiIgXAorCQktLXRyYWlsZXIgIkFja2VkLWJ5OiBKb2hhbiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG11bHRpbGluZSB0aXRsZSBpbiB0aGUgbWVzc2FnZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlwbGFjZSBvZgorCQljb2RlOiBjaGFuZ2UKKworCQlSZXZpZXdlZC1ieTogUGVmZgorCQlBY2tlZC1ieTogSm9oYW4KKwlFT0YKKwlwcmludGYgIiVzXG4iICJwbGFjZSBvZiIgImNvZGU6IGNoYW5nZSIgfAorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJSZXZpZXdlZC1ieTogUGVmZiIgXAorCQktLXRyYWlsZXIgIkFja2VkLWJ5OiBKb2hhbiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG5vbi10cmFpbGVyIGxpbmVzIG1peGVkIHdpdGggU2lnbmVkLW9mZi1ieScgJworCWNhdCA+cGF0Y2ggPDwtXEVPRiAmJgorCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJU2lnbmVkLW9mZi1ieTogYSA8YUBleGFtcGxlLmNvbT4KKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJRU9GCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQlTaWduZWQtb2ZmLWJ5OiBhIDxhQGV4YW1wbGUuY29tPgorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJdG9rZW46IHZhbHVlCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInRva2VuOiB2YWx1ZSIgcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG5vbi10cmFpbGVyIGxpbmVzIG1peGVkIHdpdGggY2hlcnJ5IHBpY2tlZCBmcm9tJyAnCisJY2F0ID5wYXRjaCA8PC1cRU9GICYmCisKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQkoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCB4KQorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwlFT0YKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCShjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IHgpCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQl0b2tlbjogdmFsdWUKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAidG9rZW46IHZhbHVlIiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggbm9uLXRyYWlsZXIgbGluZXMgbWl4ZWQgd2l0aCBhIGNvbmZpZ3VyZWQgdHJhaWxlcicgJworCWNhdCA+cGF0Y2ggPDwtXEVPRiAmJgorCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJTXktdHJhaWxlcjogeAorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwlFT0YKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCU15LXRyYWlsZXI6IHgKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCXRva2VuOiB2YWx1ZQorCUVPRgorCXRlc3RfY29uZmlnIHRyYWlsZXIubXkua2V5ICJNeS10cmFpbGVyOiAiICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInRva2VuOiB2YWx1ZSIgcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG5vbi10cmFpbGVyIGxpbmVzIG1peGVkIHdpdGggYSBub24tY29uZmlndXJlZCB0cmFpbGVyJyAnCisJY2F0ID5wYXRjaCA8PC1cRU9GICYmCisKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQlJLWFtLW5vdC1jb25maWd1cmVkOiB4CisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCUVPRgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJSS1hbS1ub3QtY29uZmlndXJlZDogeAorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKworCQl0b2tlbjogdmFsdWUKKwlFT0YKKwl0ZXN0X2NvbmZpZyB0cmFpbGVyLm15LmtleSAiTXktdHJhaWxlcjogIiAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJ0b2tlbjogdmFsdWUiIHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBhbGwgbm9uLWNvbmZpZ3VyZWQgdHJhaWxlcnMnICcKKwljYXQgPnBhdGNoIDw8LVxFT0YgJiYKKworCQlJLWFtLW5vdC1jb25maWd1cmVkOiB4CisJCUktYW0tYWxzby1ub3QtY29uZmlndXJlZDogeAorCUVPRgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCUktYW0tbm90LWNvbmZpZ3VyZWQ6IHgKKwkJSS1hbS1hbHNvLW5vdC1jb25maWd1cmVkOiB4CisJCXRva2VuOiB2YWx1ZQorCUVPRgorCXRlc3RfY29uZmlnIHRyYWlsZXIubXkua2V5ICJNeS10cmFpbGVyOiAiICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInRva2VuOiB2YWx1ZSIgcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG5vbi10cmFpbGVyIGxpbmVzIG9ubHknICcKKwljYXQgPnBhdGNoIDw8LVxFT0YgJiYKKworCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwlFT0YKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKworCQl0b2tlbjogdmFsdWUKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAidG9rZW46IHZhbHVlIiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpbmUgd2l0aCBsZWFkaW5nIHdoaXRlc3BhY2UgaXMgbm90IHRyYWlsZXInICcKKwlxX3RvX3RhYiA+cGF0Y2ggPDwtXEVPRiAmJgorCisJCVF0b2tlbjogdmFsdWUKKwlFT0YKKwlxX3RvX3RhYiA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCVF0b2tlbjogdmFsdWUKKworCQl0b2tlbjogdmFsdWUKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAidG9rZW46IHZhbHVlIiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpbGluZSBmaWVsZCB0cmVhdGVkIGFzIG9uZSB0cmFpbGVyIGZvciAyNSUgY2hlY2snICcKKwlxX3RvX3RhYiA+cGF0Y2ggPDwtXEVPRiAmJgorCisJCVNpZ25lZC1vZmYtYnk6IGEgPGFAZXhhbXBsZS5jb20+CisJCW5hbWU6IHZhbHVlIG9uCisJCVFtdWx0aXBsZSBsaW5lcworCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCUVPRgorCXFfdG9fdGFiID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJU2lnbmVkLW9mZi1ieTogYSA8YUBleGFtcGxlLmNvbT4KKwkJbmFtZTogdmFsdWUgb24KKwkJUW11bHRpcGxlIGxpbmVzCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCW5hbWU6IHZhbHVlCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgIm5hbWU6IHZhbHVlIiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpbGluZSBmaWVsZCB0cmVhdGVkIGFzIGF0b21pYyBmb3IgcGxhY2VtZW50JyAnCisJcV90b190YWIgPnBhdGNoIDw8LVxFT0YgJiYKKworCQlhbm90aGVyOiB0cmFpbGVyCisJCW5hbWU6IHZhbHVlIG9uCisJCVFtdWx0aXBsZSBsaW5lcworCQlhbm90aGVyOiB0cmFpbGVyCisJRU9GCisJcV90b190YWIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlhbm90aGVyOiB0cmFpbGVyCisJCW5hbWU6IHZhbHVlIG9uCisJCVFtdWx0aXBsZSBsaW5lcworCQluYW1lOiB2YWx1ZQorCQlhbm90aGVyOiB0cmFpbGVyCisJRU9GCisJdGVzdF9jb25maWcgdHJhaWxlci5uYW1lLndoZXJlIGFmdGVyICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgIm5hbWU6IHZhbHVlIiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpbGluZSBmaWVsZCB0cmVhdGVkIGFzIGF0b21pYyBmb3IgcmVwbGFjZW1lbnQnICcKKwlxX3RvX3RhYiA+cGF0Y2ggPDwtXEVPRiAmJgorCisJCWFub3RoZXI6IHRyYWlsZXIKKwkJbmFtZTogdmFsdWUgb24KKwkJUW11bHRpcGxlIGxpbmVzCisJCWFub3RoZXI6IHRyYWlsZXIKKwlFT0YKKwlxX3RvX3RhYiA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCWFub3RoZXI6IHRyYWlsZXIKKwkJYW5vdGhlcjogdHJhaWxlcgorCQluYW1lOiB2YWx1ZQorCUVPRgorCXRlc3RfY29uZmlnIHRyYWlsZXIubmFtZS5pZmV4aXN0cyByZXBsYWNlICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgIm5hbWU6IHZhbHVlIiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpbGluZSBmaWVsZCB0cmVhdGVkIGFzIGF0b21pYyBmb3IgZGlmZmVyZW5jZSBjaGVjaycgJworCXFfdG9fdGFiID5wYXRjaCA8PC1cRU9GICYmCisKKwkJYW5vdGhlcjogdHJhaWxlcgorCQluYW1lOiBmaXJzdCBsaW5lCisJCVFzZWNvbmQgbGluZQorCQlhbm90aGVyOiB0cmFpbGVyCisJRU9GCisJdGVzdF9jb25maWcgdHJhaWxlci5uYW1lLmlmZXhpc3RzIGFkZElmRGlmZmVyZW50ICYmCisKKwlxX3RvX3RhYiA+dHJhaWxlciA8PC1cRU9GICYmCisJCW5hbWU6IGZpcnN0IGxpbmUKKwkJUXNlY29uZCBsaW5lCisJRU9GCisJcV90b190YWIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlhbm90aGVyOiB0cmFpbGVyCisJCW5hbWU6IGZpcnN0IGxpbmUKKwkJUXNlY29uZCBsaW5lCisJCWFub3RoZXI6IHRyYWlsZXIKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiJChjYXQgdHJhaWxlcikiIHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCXFfdG9fdGFiID50cmFpbGVyIDw8LVxFT0YgJiYKKwkJbmFtZTogZmlyc3QgbGluZQorCQlRUVFRUXNlY29uZCBsaW5lCisJRU9GCisJcV90b190YWIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlhbm90aGVyOiB0cmFpbGVyCisJCW5hbWU6IGZpcnN0IGxpbmUKKwkJUXNlY29uZCBsaW5lCisJCWFub3RoZXI6IHRyYWlsZXIKKwkJbmFtZTogZmlyc3QgbGluZQorCQlRUVFRUXNlY29uZCBsaW5lCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgIiQoY2F0IHRyYWlsZXIpIiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlxX3RvX3RhYiA+dHJhaWxlciA8PC1cRU9GICYmCisJCW5hbWU6IGZpcnN0IGxpbmUgKkRJRkZFUkVOVCoKKwkJUXNlY29uZCBsaW5lCisJRU9GCisJcV90b190YWIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlhbm90aGVyOiB0cmFpbGVyCisJCW5hbWU6IGZpcnN0IGxpbmUKKwkJUXNlY29uZCBsaW5lCisJCWFub3RoZXI6IHRyYWlsZXIKKwkJbmFtZTogZmlyc3QgbGluZSAqRElGRkVSRU5UKgorCQlRc2Vjb25kIGxpbmUKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiJChjYXQgdHJhaWxlcikiIHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlsaW5lIGZpZWxkIHRyZWF0ZWQgYXMgYXRvbWljIGZvciBuZWlnaGJvciBjaGVjaycgJworCXFfdG9fdGFiID5wYXRjaCA8PC1cRU9GICYmCisKKwkJYW5vdGhlcjogdHJhaWxlcgorCQluYW1lOiBmaXJzdCBsaW5lCisJCVFzZWNvbmQgbGluZQorCQlhbm90aGVyOiB0cmFpbGVyCisJRU9GCisJdGVzdF9jb25maWcgdHJhaWxlci5uYW1lLndoZXJlIGFmdGVyICYmCisJdGVzdF9jb25maWcgdHJhaWxlci5uYW1lLmlmZXhpc3RzIGFkZElmRGlmZmVyZW50TmVpZ2hib3IgJiYKKworCXFfdG9fdGFiID50cmFpbGVyIDw8LVxFT0YgJiYKKwkJbmFtZTogZmlyc3QgbGluZQorCQlRc2Vjb25kIGxpbmUKKwlFT0YKKwlxX3RvX3RhYiA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCWFub3RoZXI6IHRyYWlsZXIKKwkJbmFtZTogZmlyc3QgbGluZQorCQlRc2Vjb25kIGxpbmUKKwkJYW5vdGhlcjogdHJhaWxlcgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICIkKGNhdCB0cmFpbGVyKSIgcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJcV90b190YWIgPnRyYWlsZXIgPDwtXEVPRiAmJgorCQluYW1lOiBmaXJzdCBsaW5lCisJCVFRUVFRc2Vjb25kIGxpbmUKKwlFT0YKKwlxX3RvX3RhYiA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCWFub3RoZXI6IHRyYWlsZXIKKwkJbmFtZTogZmlyc3QgbGluZQorCQlRc2Vjb25kIGxpbmUKKwkJbmFtZTogZmlyc3QgbGluZQorCQlRUVFRUXNlY29uZCBsaW5lCisJCWFub3RoZXI6IHRyYWlsZXIKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiJChjYXQgdHJhaWxlcikiIHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjb25maWcgc2V0dXAnICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLmtleSAiQWNrZWQtYnk6ICIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlBY2tlZC1ieTogUGVmZgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiYWNrID0gUGVmZiIgZW1wdHkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiQWNrZWQtYnkgPSBQZWZmIiBlbXB0eSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyaW0tZW1wdHkgLS10cmFpbGVyICJBY2tlZC1ieSA6UGVmZiIgZW1wdHkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbmZpZyBzZXR1cCBhbmQgIjo9IiBhcyBzZXBhcmF0b3JzJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnNlcGFyYXRvcnMgIjo9IiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5hY2sua2V5ICJBY2tlZC1ieT0gIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCUFja2VkLWJ5PSBQZWZmCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyaW0tZW1wdHkgLS10cmFpbGVyICJhY2sgPSBQZWZmIiBlbXB0eSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyaW0tZW1wdHkgLS10cmFpbGVyICJBY2tlZC1ieT0gUGVmZiIgZW1wdHkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiQWNrZWQtYnkgOiBQZWZmIiBlbXB0eSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29uZmlnIHNldHVwIGFuZCAiJSIgYXMgc2VwYXJhdG9ycycgJworCWdpdCBjb25maWcgdHJhaWxlci5zZXBhcmF0b3JzICIlIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCWJ1ZyUgNDIKKwkJY291bnQlIDEwCisJCWJ1ZyUgNDIyCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyaW0tZW1wdHkgLS10cmFpbGVyICJidWcgPSA0MiIgXAorCQktLXRyYWlsZXIgY291bnQlMTAgLS10cmFpbGVyICJ0ZXN0OiBzdHVmZiIgXAorCQktLXRyYWlsZXIgImJ1ZyAlIDQyMiIgZW1wdHkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoICIlIiBhcyBzZXBhcmF0b3JzIGFuZCBhIG1lc3NhZ2Ugd2l0aCB0cmFpbGVycycgJworCWNhdCA+c3BlY2lhbF9tZXNzYWdlIDw8LVxFT0YgJiYKKwkJU3BlY2lhbCBNZXNzYWdlCisKKwkJYnVnJSA0MgorCQljb3VudCUgMTAKKwkJYnVnJSA0MjIKKwlFT0YKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJU3BlY2lhbCBNZXNzYWdlCisKKwkJYnVnJSA0MgorCQljb3VudCUgMTAKKwkJYnVnJSA0MjIKKwkJY291bnQlIDEwMAorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyIGNvdW50JTEwMCBcCisJCXNwZWNpYWxfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29uZmlnIHNldHVwIGFuZCAiOj0jIiBhcyBzZXBhcmF0b3JzJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnNlcGFyYXRvcnMgIjo9IyIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuYnVnLmtleSAiQnVnICMiICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJQnVnICM0MgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiYnVnID0gNDIiIGVtcHR5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjb21taXQgYmFzaWMgbWVzc2FnZScgJworCWNhdCBiYXNpY19tZXNzYWdlID5leHBlY3RlZCAmJgorCWVjaG8gPj5leHBlY3RlZCAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgPGJhc2ljX21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGJhc2ljIHBhdGNoJyAnCisJY2F0IGJhc2ljX21lc3NhZ2UgPmlucHV0ICYmCisJY2F0IGJhc2ljX3BhdGNoID4+aW5wdXQgJiYKKwljYXQgYmFzaWNfbWVzc2FnZSA+ZXhwZWN0ZWQgJiYKKwllY2hvID4+ZXhwZWN0ZWQgJiYKKwljYXQgYmFzaWNfcGF0Y2ggPj5leHBlY3RlZCAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgPGlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjb21taXQgY29tcGxleCBtZXNzYWdlIGFzIGFyZ3VtZW50JyAnCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5IGNvbXBsZXhfbWVzc2FnZV90cmFpbGVycyA+Y29tcGxleF9tZXNzYWdlICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJUmV2aWV3ZWQtYnk6IFoKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgY29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCAyIGZpbGVzIGFyZ3VtZW50cycgJworCWNhdCBiYXNpY19tZXNzYWdlID4+ZXhwZWN0ZWQgJiYKKwllY2hvID4+ZXhwZWN0ZWQgJiYKKwljYXQgYmFzaWNfcGF0Y2ggPj5leHBlY3RlZCAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgY29tcGxleF9tZXNzYWdlIGlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworIyBDb3ZlciBtdWx0aXBsZSBjb21tZW50IGNoYXJhY3RlcnMgd2l0aCB0aGUgc2FtZSB0ZXN0IGlucHV0LgorZm9yIGNoYXIgaW4gIiMiICI7IgorZG8KKwljYXNlICIkY2hhciIgaW4KKwkiIyIpCisJCSMgVGhpcyBpcyB0aGUgZGVmYXVsdCwgc28gbGV0J3MgZXhwbGljaXRseSBfbm90XworCQkjIHNldCBhbnkgY29uZmlnIHRvIG1ha2Ugc3VyZSBpdCBiZWhhdmVzIGFzIHdlIGV4cGVjdC4KKwkJOzsKKwkqKQorCQljb25maWc9Ii1jIGNvcmUuY29tbWVudENoYXI9JGNoYXIiCisJCTs7CisJZXNhYworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAid2l0aCBtZXNzYWdlIHRoYXQgaGFzIGNvbW1lbnRzICgkY2hhcikiICcKKwkJY2F0IGJhc2ljX21lc3NhZ2UgPm1lc3NhZ2Vfd2l0aF9jb21tZW50cyAmJgorCQlzZWQgLWUgInMvIFpcJC8gLyIgXAorCQkgICAgLWUgInMvIy8kY2hhci9nIiA+Pm1lc3NhZ2Vfd2l0aF9jb21tZW50cyA8PC1FT0YgJiYKKwkJCSMgY29tbWVudAorCisJCQkjIG90aGVyIGNvbW1lbnQKKwkJCUNjOiBaCisJCQkjIHlldCBhbm90aGVyIGNvbW1lbnQKKwkJCVJldmlld2VkLWJ5OiBKb2hhbgorCQkJUmV2aWV3ZWQtYnk6IFoKKwkJCSMgbGFzdCBjb21tZW50CisKKwkJRU9GCisJCWNhdCBiYXNpY19wYXRjaCA+Pm1lc3NhZ2Vfd2l0aF9jb21tZW50cyAmJgorCQljYXQgYmFzaWNfbWVzc2FnZSA+ZXhwZWN0ZWQgJiYKKwkJc2VkIC1lICJzLyMvJGNoYXIvZyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCQkjIGNvbW1lbnQKKworCQkJUmV2aWV3ZWQtYnk6IEpvaGFuCisJCQlDYzogUGVmZgorCQkJIyBsYXN0IGNvbW1lbnQKKworCQlFT0YKKwkJY2F0IGJhc2ljX3BhdGNoID4+ZXhwZWN0ZWQgJiYKKwkJZ2l0ICRjb25maWcgaW50ZXJwcmV0LXRyYWlsZXJzIFwKKwkJCS0tdHJpbS1lbXB0eSAtLXRyYWlsZXIgIkNjOiBQZWZmIiBcCisJCQltZXNzYWdlX3dpdGhfY29tbWVudHMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggbWVzc2FnZSB0aGF0IGhhcyBhbiBvbGQgc3R5bGUgY29uZmxpY3QgYmxvY2snICcKKwljYXQgYmFzaWNfbWVzc2FnZSA+bWVzc2FnZV93aXRoX2NvbW1lbnRzICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+bWVzc2FnZV93aXRoX2NvbW1lbnRzIDw8LVxFT0YgJiYKKwkJIyBjb21tZW50CisKKwkJIyBvdGhlciBjb21tZW50CisJCUNjOiBaCisJCSMgeWV0IGFub3RoZXIgY29tbWVudAorCQlSZXZpZXdlZC1ieTogSm9oYW4KKwkJUmV2aWV3ZWQtYnk6IFoKKwkJIyBsYXN0IGNvbW1lbnQKKworCQlDb25mbGljdHM6CisKKwlFT0YKKwljYXQgYmFzaWNfbWVzc2FnZSA+ZXhwZWN0ZWQgJiYKKwljYXQgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCSMgY29tbWVudAorCisJCVJldmlld2VkLWJ5OiBKb2hhbgorCQlDYzogUGVmZgorCQkjIGxhc3QgY29tbWVudAorCisJCUNvbmZsaWN0czoKKworCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiQ2M6IFBlZmYiIG1lc3NhZ2Vfd2l0aF9jb21tZW50cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29tbWl0IGNvbXBsZXggbWVzc2FnZSBhbmQgdHJhaWxlciBhcmdzJyAnCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJUmV2aWV3ZWQtYnk6IFoKKwkJU2lnbmVkLW9mZi1ieTogWgorCQlBY2tlZC1ieT0gUGVmZgorCQlCdWcgIzQyCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIDxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbXBsZXggcGF0Y2gsIGFyZ3MgYW5kIC0tdHJpbS1lbXB0eScgJworCWNhdCBjb21wbGV4X21lc3NhZ2UgPmNvbXBsZXhfcGF0Y2ggJiYKKwljYXQgYmFzaWNfcGF0Y2ggPj5jb21wbGV4X3BhdGNoICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCWNhdCA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQWNrZWQtYnk9IFBlZmYKKwkJQnVnICM0MgorCUVPRgorCWNhdCBiYXNpY19wYXRjaCA+PmV4cGVjdGVkICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyaW0tZW1wdHkgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJLS10cmFpbGVyICJidWc6IDQyIiA8Y29tcGxleF9wYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luLXBsYWNlIGVkaXRpbmcgd2l0aCBiYXNpYyBwYXRjaCcgJworCWNhdCBiYXNpY19tZXNzYWdlID5tZXNzYWdlICYmCisJY2F0IGJhc2ljX3BhdGNoID4+bWVzc2FnZSAmJgorCWNhdCBiYXNpY19tZXNzYWdlID5leHBlY3RlZCAmJgorCWVjaG8gPj5leHBlY3RlZCAmJgorCWNhdCBiYXNpY19wYXRjaCA+PmV4cGVjdGVkICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLWluLXBsYWNlIG1lc3NhZ2UgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luLXBsYWNlIGVkaXRpbmcgd2l0aCBhZGRpdGlvbmFsIHRyYWlsZXInICcKKwljYXQgYmFzaWNfbWVzc2FnZSA+bWVzc2FnZSAmJgorCWNhdCBiYXNpY19wYXRjaCA+Pm1lc3NhZ2UgJiYKKwljYXQgYmFzaWNfbWVzc2FnZSA+ZXhwZWN0ZWQgJiYKKwllY2hvID4+ZXhwZWN0ZWQgJiYKKwljYXQgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCVJldmlld2VkLWJ5OiBBbGljZQorCUVPRgorCWNhdCBiYXNpY19wYXRjaCA+PmV4cGVjdGVkICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgIlJldmlld2VkLWJ5OiBBbGljZSIgLS1pbi1wbGFjZSBtZXNzYWdlICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbi1wbGFjZSBlZGl0aW5nIG9uIHN0ZGluIGRpc2FsbG93ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiUmV2aWV3ZWQtYnk6IEFsaWNlIiAtLWluLXBsYWNlIDwgYmFzaWNfbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbi1wbGFjZSBlZGl0aW5nIG9uIG5vbi1leGlzdGluZyBmaWxlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgIlJldmlld2VkLWJ5OiBBbGljZSIgLS1pbi1wbGFjZSBub25leGlzdGluZyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG5vbmV4aXN0aW5nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAiaW4tcGxhY2UgZWRpdGluZyBkb2Vzbid0IGNsb2JiZXIgb3JpZ2luYWwgZmlsZSBvbiBlcnJvciIgJworCWNhdCBiYXNpY19tZXNzYWdlID5tZXNzYWdlICYmCisJY2htb2QgLXIgbWVzc2FnZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJSZXZpZXdlZC1ieTogQWxpY2UiIC0taW4tcGxhY2UgbWVzc2FnZSAmJgorCWNobW9kICtyIG1lc3NhZ2UgJiYKKwl0ZXN0X2NtcCBtZXNzYWdlIGJhc2ljX21lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgIndoZXJlID0gYmVmb3JlIicgJworCWdpdCBjb25maWcgdHJhaWxlci5idWcud2hlcmUgImJlZm9yZSIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OiBaCisJCVNpZ25lZC1vZmYtYnk6IFoKKwkJQWNrZWQtYnk9IFBlZmYKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgY29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGluZyBjb25maWd1cmF0aW9uIHdpdGggIi0td2hlcmUgYWZ0ZXIiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay53aGVyZSAiYmVmb3JlIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OiBaCisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0td2hlcmUgYWZ0ZXIgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJY29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgIndoZXJlID0gYmVmb3JlIiB3aXRoICItLW5vLXdoZXJlIicgJworCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFBlZmYKKwkJQWNrZWQtYnk9IFoKKwkJUmV2aWV3ZWQtYnk6IFoKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS13aGVyZSBhZnRlciAtLW5vLXdoZXJlIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgY29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgIndoZXJlID0gYWZ0ZXIiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay53aGVyZSAiYWZ0ZXIiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJ3aGVyZSA9IGVuZCInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIucmV2aWV3LmtleSAiUmV2aWV3ZWQtYnkiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnJldmlldy53aGVyZSAiZW5kIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OiBaCisJCVNpZ25lZC1vZmYtYnk6IFoKKwkJUmV2aWV3ZWQtYnk6IEp1bmlvCisJCVJldmlld2VkLWJ5OiBKb2hhbm5lcworCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJLS10cmFpbGVyICJSZXZpZXdlZC1ieTogSnVuaW8iIC0tdHJhaWxlciAiUmV2aWV3ZWQtYnk6IEpvaGFubmVzIiBcCisJCWNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJ3aGVyZSA9IHN0YXJ0IicgJworCWdpdCBjb25maWcgdHJhaWxlci5yZXZpZXcua2V5ICJSZXZpZXdlZC1ieSIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIucmV2aWV3LndoZXJlICJzdGFydCIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlSZXZpZXdlZC1ieTogSm9oYW5uZXMKKwkJUmV2aWV3ZWQtYnk6IEp1bmlvCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OiBaCisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiUmV2aWV3ZWQtYnk6IEp1bmlvIiAtLXRyYWlsZXIgIlJldmlld2VkLWJ5OiBKb2hhbm5lcyIgXAorCQljb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAid2hlcmUgPSBiZWZvcmUiIGZvciBhIHRva2VuIGluIHRoZSBtaWRkbGUgb2YgdGhlIG1lc3NhZ2UnICcKKwlnaXQgY29uZmlnIHRyYWlsZXIucmV2aWV3LmtleSAiUmV2aWV3ZWQtYnk6IiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5yZXZpZXcud2hlcmUgImJlZm9yZSIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OkpvaGFuCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgLS10cmFpbGVyICJidWc6IDQyIiBcCisJCS0tdHJhaWxlciAicmV2aWV3OiBKb2hhbiIgPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJ3aGVyZSA9IGJlZm9yZSIgYW5kIC0tdHJpbS1lbXB0eScgJworCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwljYXQgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDYKKwkJQnVnICM0MgorCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieTpKb2hhbgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJyZXZpZXc6IEpvaGFuIiBcCisJCS0tdHJhaWxlciAiQnVnOiA0NiIgPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoZSBkZWZhdWx0IGlzICJpZkV4aXN0cyA9IGFkZElmRGlmZmVyZW50TmVpZ2hib3IiJyAnCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gUGVmZgorCQlBY2tlZC1ieT0gSnVuaW8KKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiYWNrOiBQZWZmIiAtLXRyYWlsZXIgInJldmlldzoiIFwKKwkJLS10cmFpbGVyICJhY2s6IEp1bmlvIiAtLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiYWNrOiBQZWZmIiA8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCAiaWZFeGlzdHMiIGlzIG5vdyAiYWRkSWZEaWZmZXJlbnQiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmlmZXhpc3RzICJhZGRJZkRpZmZlcmVudCIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBKdW5pbworCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2s6IFBlZmYiIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJLS10cmFpbGVyICJhY2s6IFBlZmYiIDxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAiaWZFeGlzdHMgPSBhZGRJZkRpZmZlcmVudCIgd2l0aCAid2hlcmUgPSBlbmQiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay5pZkV4aXN0cyAiYWRkSWZEaWZmZXJlbnQiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay53aGVyZSAiZW5kIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwkJQWNrZWQtYnk9IFBlZmYKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiYWNrOiBQZWZmIiAtLXRyYWlsZXIgInJldmlldzoiIFwKKwkJLS10cmFpbGVyICJidWc6IDQyIiAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgImlmRXhpc3RzID0gYWRkSWZEaWZmZXJlbnQiIHdpdGggIndoZXJlID0gYmVmb3JlIicgJworCWdpdCBjb25maWcgdHJhaWxlci5hY2suaWZFeGlzdHMgImFkZElmRGlmZmVyZW50IiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5hY2sud2hlcmUgImJlZm9yZSIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZkV4aXN0cyA9IGFkZElmRGlmZmVyZW50TmVpZ2hib3IiIHdpdGggIndoZXJlID0gZW5kIicgJworCWdpdCBjb25maWcgdHJhaWxlci5hY2suaWZFeGlzdHMgImFkZElmRGlmZmVyZW50TmVpZ2hib3IiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay53aGVyZSAiZW5kIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwkJQWNrZWQtYnk9IFBlZmYKKwkJQWNrZWQtYnk9IEp1bmlvCisJCVRlc3RlZC1ieTogSmFrdWIKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiYWNrOiBKdW5pbyIgLS10cmFpbGVyICJidWc6IDQyIiBcCisJCS0tdHJhaWxlciAiVGVzdGVkLWJ5OiBKYWt1YiIgLS10cmFpbGVyICJhY2s6IEp1bmlvIiBcCisJCS0tdHJhaWxlciAiYWNrOiBKdW5pbyIgLS10cmFpbGVyICJhY2s6IFBlZmYiIDxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAiaWZFeGlzdHMgPSBhZGRJZkRpZmZlcmVudE5laWdoYm9yIiAgd2l0aCAid2hlcmUgPSBhZnRlciInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLmlmRXhpc3RzICJhZGRJZkRpZmZlcmVudE5laWdoYm9yIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5hY2sud2hlcmUgImFmdGVyIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IFBlZmYKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCVRlc3RlZC1ieTogSmFrdWIKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiYWNrOiBQZWZmIiAtLXRyYWlsZXIgInJldmlldzoiIFwKKwkJLS10cmFpbGVyICJhY2s6IEp1bmlvIiAtLXRyYWlsZXIgImJ1ZzogNDIiIFwKKwkJLS10cmFpbGVyICJUZXN0ZWQtYnk6IEpha3ViIiAtLXRyYWlsZXIgImFjazogSnVuaW8iIFwKKwkJLS10cmFpbGVyICJhY2s6IEp1bmlvIiAtLXRyYWlsZXIgImFjazogUGVmZiIgPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZkV4aXN0cyA9IGFkZElmRGlmZmVyZW50TmVpZ2hib3IiIGFuZCAtLXRyaW0tZW1wdHknICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLmlmRXhpc3RzICJhZGRJZkRpZmZlcmVudE5laWdoYm9yIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwljYXQgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJQWNrZWQtYnk9IFBlZmYKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyaW0tZW1wdHkgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJLS10cmFpbGVyICJBY2tlZC1ieT0gUGVmZiIgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiYWNrOiBKdW5pbyIgLS10cmFpbGVyICJidWc6IDQyIiBcCisJCS0tdHJhaWxlciAiYWNrOiBQZWZmIiA8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgImlmRXhpc3RzID0gYWRkIiB3aXRoICJ3aGVyZSA9IGVuZCInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLmlmRXhpc3RzICJhZGQiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay53aGVyZSAiZW5kIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwkJQWNrZWQtYnk9IFBlZmYKKwkJQWNrZWQtYnk9IFBlZmYKKwkJVGVzdGVkLWJ5OiBKYWt1YgorCQlBY2tlZC1ieT0gSnVuaW8KKwkJVGVzdGVkLWJ5OiBKb2hhbm5lcworCQlBY2tlZC1ieT0gUGVmZgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJLS10cmFpbGVyICJBY2tlZC1ieT0gUGVmZiIgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiVGVzdGVkLWJ5OiBKYWt1YiIgLS10cmFpbGVyICJhY2s6IEp1bmlvIiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJUZXN0ZWQtYnk6IEpvaGFubmVzIiBcCisJCS0tdHJhaWxlciAiYWNrOiBQZWZmIiA8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgImlmRXhpc3RzID0gYWRkIiB3aXRoICJ3aGVyZSA9IGFmdGVyIicgJworCWdpdCBjb25maWcgdHJhaWxlci5hY2suaWZFeGlzdHMgImFkZCIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLndoZXJlICJhZnRlciIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJLS10cmFpbGVyICJBY2tlZC1ieT0gUGVmZiIgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiYWNrOiBKdW5pbyIgLS10cmFpbGVyICJidWc6IDQyIiBcCisJCS0tdHJhaWxlciAiYWNrOiBQZWZmIiA8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGluZyBjb25maWd1cmF0aW9uIHdpdGggIi0taWYtZXhpc3RzIHJlcGxhY2UiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmZpeC5rZXkgIkZpeGVzOiAiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmZpeC5pZkV4aXN0cyAiYWRkIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJQWNrZWQtYnk9IFoKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwkJRml4ZXM6IDIyCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLWlmLWV4aXN0cyByZXBsYWNlIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgImZpeD01MyIgLS10cmFpbGVyICJmaXg9MjIiIC0tdHJhaWxlciAiYnVnOiA0MiIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgImlmRXhpc3RzID0gcmVwbGFjZSInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuZml4LmtleSAiRml4ZXM6ICIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuZml4LmlmRXhpc3RzICJyZXBsYWNlIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCUZpeGVzOiAyMgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiZml4PTUzIiAtLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiZml4PTIyIiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZkV4aXN0cyA9IHJlcGxhY2UiIHdpdGggIndoZXJlID0gYWZ0ZXIiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmZpeC53aGVyZSAiYWZ0ZXIiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogMjIKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzoiIFwKKwkJLS10cmFpbGVyICJmaXg9NTMiIC0tdHJhaWxlciAiYWNrOiBKdW5pbyIgLS10cmFpbGVyICJmaXg9MjIiIFwKKwkJLS10cmFpbGVyICJidWc6IDQyIiAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgImlmRXhpc3RzID0gZG9Ob3RoaW5nIicgJworCWdpdCBjb25maWcgdHJhaWxlci5maXguaWZFeGlzdHMgImRvTm90aGluZyIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiAtLXRyYWlsZXIgImZpeD01MyIgXAorCQktLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiZml4PTIyIiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoZSBkZWZhdWx0IGlzICJpZk1pc3NpbmcgPSBhZGQiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmNjLmtleSAiQ2M6ICIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuY2Mud2hlcmUgImJlZm9yZSIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUNjOiBMaW51cworCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gSnVuaW8KKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAicmV2aWV3OiIgLS10cmFpbGVyICJmaXg9NTMiIFwKKwkJLS10cmFpbGVyICJjYz1MaW51cyIgLS10cmFpbGVyICJhY2s6IEp1bmlvIiBcCisJCS0tdHJhaWxlciAiZml4PTIyIiAtLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkaW5nIGNvbmZpZ3VyYXRpb24gd2l0aCAiLS1pZi1taXNzaW5nIGRvTm90aGluZyInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuaWZtaXNzaW5nICJhZGQiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLWlmLW1pc3NpbmcgZG9Ob3RoaW5nIFwKKwkJLS10cmFpbGVyICJyZXZpZXc6IiAtLXRyYWlsZXIgImZpeD01MyIgXAorCQktLXRyYWlsZXIgImNjPUxpbnVzIiAtLXRyYWlsZXIgImFjazogSnVuaW8iIFwKKwkJLS10cmFpbGVyICJmaXg9MjIiIC0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doZW4gZGVmYXVsdCAiaWZNaXNzaW5nIiBpcyAiZG9Ob3RoaW5nIicgJworCWdpdCBjb25maWcgdHJhaWxlci5pZm1pc3NpbmcgImRvTm90aGluZyIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gSnVuaW8KKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAicmV2aWV3OiIgLS10cmFpbGVyICJmaXg9NTMiIFwKKwkJLS10cmFpbGVyICJjYz1MaW51cyIgLS10cmFpbGVyICJhY2s6IEp1bmlvIiBcCisJCS0tdHJhaWxlciAiZml4PTIyIiAtLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBjb25maWcgdHJhaWxlci5pZm1pc3NpbmcgImFkZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgImlmTWlzc2luZyA9IGFkZCIgd2l0aCAid2hlcmUgPSBlbmQiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmNjLmtleSAiQ2M6ICIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuY2Mud2hlcmUgImVuZCIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuY2MuaWZNaXNzaW5nICJhZGQiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gSnVuaW8KKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwkJQ2M6IExpbnVzCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzoiIC0tdHJhaWxlciAiZml4PTUzIiBcCisJCS0tdHJhaWxlciAiYWNrOiBKdW5pbyIgLS10cmFpbGVyICJmaXg9MjIiIFwKKwkJLS10cmFpbGVyICJidWc6IDQyIiAtLXRyYWlsZXIgImNjPUxpbnVzIiAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgImlmTWlzc2luZyA9IGFkZCIgd2l0aCAid2hlcmUgPSBiZWZvcmUiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmNjLmtleSAiQ2M6ICIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuY2Mud2hlcmUgImJlZm9yZSIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuY2MuaWZNaXNzaW5nICJhZGQiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQ2M6IExpbnVzCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzoiIC0tdHJhaWxlciAiZml4PTUzIiBcCisJCS0tdHJhaWxlciAiYWNrOiBKdW5pbyIgLS10cmFpbGVyICJmaXg9MjIiIFwKKwkJLS10cmFpbGVyICJidWc6IDQyIiAtLXRyYWlsZXIgImNjPUxpbnVzIiAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgImlmTWlzc2luZyA9IGRvTm90aGluZyInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuY2MuaWZNaXNzaW5nICJkb05vdGhpbmciICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gSnVuaW8KKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAicmV2aWV3OiIgLS10cmFpbGVyICJmaXg9NTMiIFwKKwkJLS10cmFpbGVyICJjYz1MaW51cyIgLS10cmFpbGVyICJhY2s6IEp1bmlvIiBcCisJCS0tdHJhaWxlciAiZml4PTIyIiAtLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWZhdWx0ICJ3aGVyZSIgaXMgbm93ICJhZnRlciInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIud2hlcmUgImFmdGVyIiAmJgorCWdpdCBjb25maWcgLS11bnNldCB0cmFpbGVyLmFjay53aGVyZSAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IFBlZmYKKwkJQWNrZWQtYnk9IFBlZmYKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCVRlc3RlZC1ieTogSmFrdWIKKwkJVGVzdGVkLWJ5OiBKb2hhbm5lcworCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJLS10cmFpbGVyICJBY2tlZC1ieT0gUGVmZiIgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiVGVzdGVkLWJ5OiBKYWt1YiIgLS10cmFpbGVyICJhY2s6IEp1bmlvIiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJUZXN0ZWQtYnk6IEpvaGFubmVzIiBcCisJCS0tdHJhaWxlciAiYWNrOiBQZWZmIiA8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBzaW1wbGUgY29tbWFuZCcgJworCWdpdCBjb25maWcgdHJhaWxlci5zaWduLmtleSAiU2lnbmVkLW9mZi1ieTogIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5zaWduLndoZXJlICJhZnRlciIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5pZkV4aXN0cyAiYWRkSWZEaWZmZXJlbnROZWlnaGJvciIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5jb21tYW5kICJlY2hvIFwiQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT5cIiIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiAtLXRyYWlsZXIgImZpeD0yMiIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjb21tYW5kIHVzaW5nIGNvbW1pdHRlciBpbmZvcm1hdGlvbicgJworCWdpdCBjb25maWcgdHJhaWxlci5zaWduLmlmRXhpc3RzICJhZGRJZkRpZmZlcmVudCIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5jb21tYW5kICJlY2hvIFwiXCRHSVRfQ09NTUlUVEVSX05BTUUgPFwkR0lUX0NPTU1JVFRFUl9FTUFJTD5cIiIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzoiIC0tdHJhaWxlciAiZml4PTIyIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbW1hbmQgdXNpbmcgYXV0aG9yIGluZm9ybWF0aW9uJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24ua2V5ICJTaWduZWQtb2ZmLWJ5OiAiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24ud2hlcmUgImFmdGVyIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5zaWduLmlmRXhpc3RzICJhZGRJZkRpZmZlcmVudE5laWdoYm9yIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5zaWduLmNvbW1hbmQgImVjaG8gXCJcJEdJVF9BVVRIT1JfTkFNRSA8XCRHSVRfQVVUSE9SX0VNQUlMPlwiIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCVNpZ25lZC1vZmYtYnk6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzoiIC0tdHJhaWxlciAiZml4PTIyIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIGNvbW1pdCcgJworCWVjaG8gIkNvbnRlbnQgb2YgdGhlIGZpcnN0IGNvbW1pdC4iID4gYS50eHQgJiYKKwlnaXQgYWRkIGEudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIGZpbGUgYS50eHQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29tbWFuZCB1c2luZyAkQVJHJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmZpeC5pZkV4aXN0cyAicmVwbGFjZSIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuZml4LmNvbW1hbmQgImdpdCBsb2cgLTEgLS1vbmVsaW5lIC0tZm9ybWF0PVwiJWggKCVzKVwiIC0tYWJicmV2LWNvbW1pdCAtLWFiYnJldj0xNCBcJEFSRyIgJiYKKwlGSVhFRD0kKGdpdCBsb2cgLTEgLS1vbmVsaW5lIC0tZm9ybWF0PSIlaCAoJXMpIiAtLWFiYnJldi1jb21taXQgLS1hYmJyZXY9MTQgSEVBRCkgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtRU9GICYmCisJCUZpeGVzOiAkRklYRUQKKwkJQWNrZWQtYnk9IFoKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwkJU2lnbmVkLW9mZi1ieTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAicmV2aWV3OiIgLS10cmFpbGVyICJmaXg9SEVBRCIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBmYWlsaW5nIGNvbW1hbmQgdXNpbmcgJEFSRycgJworCWdpdCBjb25maWcgdHJhaWxlci5maXguaWZFeGlzdHMgInJlcGxhY2UiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmZpeC5jb21tYW5kICJmYWxzZSBcJEFSRyIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtRU9GICYmCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCVNpZ25lZC1vZmYtYnk6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzoiIC0tdHJhaWxlciAiZml4PUhFQUQiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZW1wdHkgdG9rZW5zJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHRyYWlsZXIuZml4LmNvbW1hbmQgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCisJCVNpZ25lZC1vZmYtYnk6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgIjoiIC0tdHJhaWxlciAiOnRlc3QiID5hY3R1YWwgPDwtRU9GICYmCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29tbWFuZCBidXQgbm8ga2V5JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHRyYWlsZXIuc2lnbi5rZXkgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCisJCXNpZ246IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyA+YWN0dWFsIDw8LUVPRiAmJgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG5vIGNvbW1hbmQgYW5kIG5vIGtleScgJworCWdpdCBjb25maWcgLS11bnNldCB0cmFpbGVyLnJldmlldy5rZXkgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCisJCXJldmlldzogSnVuaW8KKwkJc2lnbjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAicmV2aWV3Okp1bmlvIiA+YWN0dWFsIDw8LUVPRiAmJgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGN1dCBsaW5lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJCW15IHN1YmplY3QKKworCQlyZXZpZXc6IEJyaWFuCisJCXNpZ246IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlpZ25vcmUgdGhpcworCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyIHJldmlldzpCcmlhbiA+YWN0dWFsIDw8LVxFT0YgJiYKKwkJbXkgc3ViamVjdAorCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJaWdub3JlIHRoaXMKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25seSB0cmFpbGVycycgJworCWdpdCBjb25maWcgdHJhaWxlci5zaWduLmNvbW1hbmQgImVjaG8gY29uZmlnLXZhbHVlIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlleGlzdGluZzogZXhpc3RpbmctdmFsdWUKKwkJc2lnbjogY29uZmlnLXZhbHVlCisJCWFkZGVkOiBhZGRlZC12YWx1ZQorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgXAorCQktLXRyYWlsZXIgYWRkZWQ6YWRkZWQtdmFsdWUgXAorCQktLW9ubHktdHJhaWxlcnMgPmFjdHVhbCA8PC1cRU9GICYmCisJCW15IHN1YmplY3QKKworCQlteSBib2R5CisKKwkJZXhpc3Rpbmc6IGV4aXN0aW5nLXZhbHVlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29ubHktdHJhaWxlcnMgb21pdHMgbm9uLXRyYWlsZXIgaW4gbWlkZGxlIG9mIGJsb2NrJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24uY29tbWFuZCAiZWNobyBjb25maWctdmFsdWUiICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJCVNpZ25lZC1vZmYtYnk6IG5vYm9keSA8bm9ib2R5QG5vd2hlcmU+CisJCVNpZ25lZC1vZmYtYnk6IHNvbWVib2R5IDxzb21lYm9keUBzb21ld2hlcmU+CisJCXNpZ246IGNvbmZpZy12YWx1ZQorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS1vbmx5LXRyYWlsZXJzID5hY3R1YWwgPDwtXEVPRiAmJgorCQlzdWJqZWN0CisKKwkJaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIHRyYWlsZXJzIGJlbG93IGFyZSBzaWduZWQtb2ZmLWJ5CisJCXNvIHRoYXQgdGhleSBtZWV0IHRoZSAiMjUlIHRyYWlsZXJzIEdpdCBrbm93cyBhYm91dCIgaGV1cmlzdGljCisKKwkJU2lnbmVkLW9mZi1ieTogbm9ib2R5IDxub2JvZHlAbm93aGVyZT4KKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCVNpZ25lZC1vZmYtYnk6IHNvbWVib2R5IDxzb21lYm9keUBzb21ld2hlcmU+CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29ubHkgaW5wdXQnICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5jb21tYW5kICJlY2hvIGNvbmZpZy12YWx1ZSIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJZXhpc3Rpbmc6IGV4aXN0aW5nLXZhbHVlCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyBcCisJCS0tb25seS10cmFpbGVycyAtLW9ubHktaW5wdXQgPmFjdHVhbCA8PC1cRU9GICYmCisJCW15IHN1YmplY3QKKworCQlteSBib2R5CisKKwkJZXhpc3Rpbmc6IGV4aXN0aW5nLXZhbHVlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VuZm9sZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlmb286IGNvbnRpbnVlZCBhY3Jvc3Mgc2V2ZXJhbCBsaW5lcworCUVPRgorCSMgcGFzcyB0aHJvdWdoIHRyIHRvIG1ha2UgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBtb3JlIG9idmlvdXMKKwl0ciBfICIgIiA8PC1cRU9GIHwKKwkJbXkgc3ViamVjdAorCisJCW15IGJvZHkKKworCQlmb286XworCQlfX2NvbnRpbnVlZAorCQlfX19hY3Jvc3MKKwkJX19fX3NldmVyYWwKKwkJX19fX19saW5lcworCQlfX18KKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tb25seS10cmFpbGVycyAtLW9ubHktaW5wdXQgLS11bmZvbGQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYW5kbGluZyBvZiAtLS0gbGluZXMgaW4gaW5wdXQnICcKKwllY2hvICJyZWFsLXRyYWlsZXI6IGp1c3QgcmlnaHQiID5leHBlY3RlZCAmJgorCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXBhcnNlID5hY3R1YWwgPDwtXEVPRiAmJgorCXN1YmplY3QKKworCWJvZHkKKworCW5vdC1hLXRyYWlsZXI6IHRvbyBzb29uCisJLS0tLS0tIHRoaXMgaXMganVzdCBhIGxpbmUgaW4gdGhlIGNvbW1pdCBtZXNzYWdlIHdpdGggYSBidW5jaCBvZgorCS0tLS0tLSBkYXNoZXM7IGl0IGRvZXMgbm90IGhhdmUgYW55IHN5bnRhY3RpYyBtZWFuaW5nLgorCisJcmVhbC10cmFpbGVyOiBqdXN0IHJpZ2h0CisJLS0tCisJYmVsb3cgdGhlIGRhc2hlZCBsaW5lIG1heSBiZSBhIHBhdGNoLCBldGMuCisKKwlub3QtYS10cmFpbGVyOiB0b28gbGF0ZQorCUVPRgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1cHByZXNzIC0tLSBoYW5kbGluZycgJworCWVjaG8gInJlYWwtdHJhaWxlcjoganVzdCByaWdodCIgPmV4cGVjdGVkICYmCisKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tcGFyc2UgLS1uby1kaXZpZGVyID5hY3R1YWwgPDwtXEVPRiAmJgorCXN1YmplY3QKKworCVRoaXMgY29tbWl0IG1lc3NhZ2UgaGFzIGEgIi0tLSIgaW4gaXQsIGJ1dCBiZWNhdXNlIHdlIHRlbGwKKwlpbnRlcnByZXQtdHJhaWxlcnMgbm90IHRvIHJlc3BlY3QgdGhhdCwgaXQgaGFzIG5vIGVmZmVjdC4KKworCW5vdC1hLXRyYWlsZXI6IHRvbyBzb29uCisJLS0tCisKKwlUaGlzIGlzIHN0aWxsIHRoZSBjb21taXQgbWVzc2FnZSBib2R5LgorCisJcmVhbC10cmFpbGVyOiBqdXN0IHJpZ2h0CisJRU9GCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTE0LWNvbW1pdC1wYXRjaC5zaCBiL3QvdDc1MTQtY29tbWl0LXBhdGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5OGEyMTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTE0LWNvbW1pdC1wYXRjaC5zaApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0naHVuayBlZGl0IHdpdGggImNvbW1pdCAtcCAtbSInCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkwKK3RoZW4KKwlza2lwX2FsbD0ic2tpcHBpbmcgJyR0ZXN0X2Rlc2NyaXB0aW9uJyB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlIgorCXRlc3RfZG9uZQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgKGluaXRpYWwpJyAnCisJZWNobyBsaW5lMSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gY29tbWl0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0IGh1bmsgImNvbW1pdCAtcCAtbSBtZXNzYWdlIicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgZWRpdG9yX3dhc19zdGFydGVkIiAmJgorCXJtIC1mIGVkaXRvcl93YXNfc3RhcnRlZCAmJgorCWVjaG8gbW9yZSA+PmZpbGUgJiYKKwllY2hvIGUgfCBlbnYgR0lUX0VESVRPUj0iOiA+ZWRpdG9yX3dhc19zdGFydGVkIiBnaXQgY29tbWl0IC1wIC1tIGNvbW1pdDIgZmlsZSAmJgorCXRlc3QgLXIgZWRpdG9yX3dhc19zdGFydGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VkaXQgaHVuayAiY29tbWl0IC0tZHJ5LXJ1biAtcCAtbSBtZXNzYWdlIicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgZWRpdG9yX3dhc19zdGFydGVkIiAmJgorCXJtIC1mIGVkaXRvcl93YXNfc3RhcnRlZCAmJgorCWVjaG8gbW9yZSA+PmZpbGUgJiYKKwllY2hvIGUgfCBlbnYgR0lUX0VESVRPUj0iOiA+ZWRpdG9yX3dhc19zdGFydGVkIiBnaXQgY29tbWl0IC1wIC1tIGNvbW1pdDMgZmlsZSAmJgorCXRlc3QgLXIgZWRpdG9yX3dhc19zdGFydGVkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUxNS1zdGF0dXMtc3ltbGlua3Muc2ggYi90L3Q3NTE1LXN0YXR1cy1zeW1saW5rcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45Zjk4OWJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUxNS1zdGF0dXMtc3ltbGlua3Muc2gKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdGF0dXMgYW5kIHN5bWxpbmtzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIC5naXRpZ25vcmUgPi5naXRpZ25vcmUgJiYKKwllY2hvIGFjdHVhbCA+Pi5naXRpZ25vcmUgJiYKKwllY2hvIGV4cGVjdCA+Pi5naXRpZ25vcmUgJiYKKwlta2RpciBkaXIgJiYKKwllY2hvIHggPmRpci9maWxlMSAmJgorCWVjaG8geSA+ZGlyL2ZpbGUyICYmCisJZ2l0IGFkZCBkaXIgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3ltbGluayB0byBhIGRpcmVjdG9yeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gc3ltbGluayIgJiYKKwlsbiAtcyBkaXIgc3ltbGluayAmJgorCWVjaG8gIj8/IHN5bWxpbmsiID5leHBlY3QgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N5bWxpbmsgcmVwbGFjaW5nIGEgZGlyZWN0b3J5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgY29weSAmJiBnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwiICYmCisJbWtkaXIgY29weSAmJgorCWNwIGRpci9maWxlMSBjb3B5L2ZpbGUxICYmCisJZWNobyAiY2hhbmdlZCBpbiBjb3B5IiA+Y29weS9maWxlMiAmJgorCWdpdCBhZGQgY29weSAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJcm0gLXJmIGNvcHkgJiYKKwlsbiAtcyBkaXIgY29weSAmJgorCWVjaG8gIiBEIGNvcHkvZmlsZTEiID5leHBlY3QgJiYKKwllY2hvICIgRCBjb3B5L2ZpbGUyIiA+PmV4cGVjdCAmJgorCWVjaG8gIj8/IGNvcHkiID4+ZXhwZWN0ICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MTYtY29tbWl0LXJhY2VzLnNoIGIvdC90NzUxNi1jb21taXQtcmFjZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjJjZTE0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MTYtY29tbWl0LXJhY2VzLnNoCkBAIC0wLDAgKzEsMzAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY29tbWl0IHJhY2VzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JhY2UgdG8gY3JlYXRlIG9ycGhhbiBjb21taXQnICcKKwl3cml0ZV9zY3JpcHQgaGFyZS1lZGl0b3IgPDwtXEVPRiAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBoYXJlCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZW52IEVESVRPUj0uL2hhcmUtZWRpdG9yIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0b3J0b2lzZSAtZSAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolcyA+c3ViamVjdCAmJgorCWdyZXAgaGFyZSBzdWJqZWN0ICYmCisJdGVzdCAteiAiJChnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JVApIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYWNlIHRvIGNyZWF0ZSBub24tb3JwaGFuIGNvbW1pdCcgJworCXdyaXRlX3NjcmlwdCBhaXJwbGFuZS1lZGl0b3IgPDwtXEVPRiAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBhaXJwbGFuZQorCUVPRgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBicmFuY2ggJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYmFzZSAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+YmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBFRElUT1I9Li9haXJwbGFuZS1lZGl0b3IgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHNoaXAgLWUgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JXMgPnN1YmplY3QgJiYKKwlncmVwIGFpcnBsYW5lIHN1YmplY3QgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReID5wYXJlbnQgJiYKKwl0ZXN0X2NtcCBiYXNlIHBhcmVudAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MTctcGVyLXJlcG8tZW1haWwuc2ggYi90L3Q3NTE3LXBlci1yZXBvLWVtYWlsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIyNDAxY2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTE3LXBlci1yZXBvLWVtYWlsLnNoCkBAIC0wLDAgKzEsMTYyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE2IERhbiBBbG9uaQorIyBDb3B5cmlnaHQgKGMpIDIwMTYgSmVmZiBLaW5nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Blci1yZXBvIGZvcmNlZCBzZXR0aW5nIG9mIGVtYWlsIGFkZHJlc3MnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIGxpa2VseSB1c2VyLnVzZUNvbmZpZ09ubHkgdXNlIGNhc2UnICcKKwkjIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGEgcmVmbG9nIGlzIHdyaXR0ZW4sIHNpbmNlIHRoYXQgbmVlZHMKKwkjIGEgbm9uLXN0cmljdCBpZGVudC4gU28gYmUgc3VyZSB3ZSBoYXZlIGFuIGFjdHVhbCBjb21taXQuCisJdGVzdF9jb21taXQgZm9vICYmCisKKwlzYW5lX3Vuc2V0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMICYmCisJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX05BTUUgR0lUX0NPTU1JVFRFUl9FTUFJTCAmJgorCWdpdCBjb25maWcgdXNlci5uYW1lICJ0ZXN0IiAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgdXNlci51c2VDb25maWdPbmx5IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgY29tbWl0dGluZyBpZiBjbG9uZSBlbWFpbCBpcyBub3Qgc2V0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlscyBjb21taXR0aW5nIGlmIGNsb25lIGVtYWlsIGlzIG5vdCBzZXQsIGJ1dCBFTUFJTCBzZXQnICcKKwl0ZXN0X211c3RfZmFpbCBlbnYgRU1BSUw9dGVzdEBmYWlsLmNvbSBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Y2NlZWRzIGNvbW1pdHRpbmcgaWYgY2xvbmUgZW1haWwgaXMgc2V0JyAnCisJdGVzdF9jb25maWcgdXNlci5lbWFpbCAidGVzdEBvay5jb20iICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZWVkcyBjbG9uaW5nIGlmIGdsb2JhbCBlbWFpbCBpcyBub3Qgc2V0JyAnCisJZ2l0IGNsb25lIC4gY2xvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHJlYmFzZSBzY2VuYXJpb3MnICcKKwkjIHRlbXBvcmFyaWx5IGVuYWJsZSBhbiBhY3R1YWwgaWRlbnQgZm9yIHRoaXMgc2V0dXAKKwl0ZXN0X2NvbmZpZyB1c2VyLmVtYWlsIGZvb0BleGFtcGxlLmNvbSAmJgorCXRlc3RfY29tbWl0IG5ldyAmJgorCWdpdCBicmFuY2ggc2lkZS13aXRob3V0LWNvbW1pdCBIRUFEXiAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlLXdpdGgtY29tbWl0IEhFQUReICYmCisJdGVzdF9jb21taXQgc2lkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWZvcndhcmQgcmViYXNlIGRvZXMgbm90IGNhcmUgYWJvdXQgaWRlbnQnICcKKwlnaXQgY2hlY2tvdXQgLUIgdG1wIHNpZGUtd2l0aG91dC1jb21taXQgJiYKKwlnaXQgcmViYXNlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tZmFzdC1mb3J3YXJkIHJlYmFzZSByZWZ1c2VzIHRvIHdyaXRlIGNvbW1pdHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCB8fCB0cnVlIiAmJgorCWdpdCBjaGVja291dCAtQiB0bXAgc2lkZS13aXRoLWNvbW1pdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZm9yd2FyZCByZWJhc2UgZG9lcyBub3QgY2FyZSBhYm91dCBpZGVudCAoaW50ZXJhY3RpdmUpJyAnCisJZ2l0IGNoZWNrb3V0IC1CIHRtcCBzaWRlLXdpdGhvdXQtY29tbWl0ICYmCisJZ2l0IHJlYmFzZSAtaSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLWZhc3QtZm9yd2FyZCByZWJhc2UgcmVmdXNlcyB0byB3cml0ZSBjb21taXRzIChpbnRlcmFjdGl2ZSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCB8fCB0cnVlIiAmJgorCWdpdCBjaGVja291dCAtQiB0bXAgc2lkZS13aXRoLWNvbW1pdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vb3AgaW50ZXJhY3RpdmUgcmViYXNlIGRvZXMgbm90IGNhcmUgYWJvdXQgaWRlbnQnICcKKwlnaXQgY2hlY2tvdXQgLUIgdG1wIHNpZGUtd2l0aC1jb21taXQgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVCQVNFX1AgXAorCSdmYXN0LWZvcndhcmQgcmViYXNlIGRvZXMgbm90IGNhcmUgYWJvdXQgaWRlbnQgKHByZXNlcnZlKScgJworCWdpdCBjaGVja291dCAtQiB0bXAgc2lkZS13aXRob3V0LWNvbW1pdCAmJgorCWdpdCByZWJhc2UgLXAgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVCQVNFX1AgXAorCSdub24tZmFzdC1mb3J3YXJkIHJlYmFzZSByZWZ1c2VzIHRvIHdyaXRlIGNvbW1pdHMgKHByZXNlcnZlKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IHx8IHRydWUiICYmCisJZ2l0IGNoZWNrb3V0IC1CIHRtcCBzaWRlLXdpdGgtY29tbWl0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtcCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9yLm5hbWUgb3ZlcnJpZGVzIHVzZXIubmFtZScgJworCXRlc3RfY29uZmlnIHVzZXIubmFtZSB1c2VyICYmCisJdGVzdF9jb25maWcgdXNlci5lbWFpbCB1c2VyQGV4YW1wbGUuY29tICYmCisJdGVzdF9jb25maWcgYXV0aG9yLm5hbWUgYXV0aG9yICYmCisJdGVzdF9jb21taXQgYXV0aG9yLW5hbWUtb3ZlcnJpZGUtdXNlciAmJgorCWVjaG8gYXV0aG9yIHVzZXJAZXhhbXBsZS5jb20gPiBleHBlY3RlZC1hdXRob3IgJiYKKwllY2hvIHVzZXIgdXNlckBleGFtcGxlLmNvbSA+IGV4cGVjdGVkLWNvbW1pdHRlciAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9IiVhbiAlYWUiIC0xID4gYWN0dWFsLWF1dGhvciAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9IiVjbiAlY2UiIC0xID4gYWN0dWFsLWNvbW1pdHRlciAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWF1dGhvciBhY3R1YWwtYXV0aG9yICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtY29tbWl0dGVyIGFjdHVhbC1jb21taXR0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9yLmVtYWlsIG92ZXJyaWRlcyB1c2VyLmVtYWlsJyAnCisJdGVzdF9jb25maWcgdXNlci5uYW1lIHVzZXIgJiYKKwl0ZXN0X2NvbmZpZyB1c2VyLmVtYWlsIHVzZXJAZXhhbXBsZS5jb20gJiYKKwl0ZXN0X2NvbmZpZyBhdXRob3IuZW1haWwgYXV0aG9yQGV4YW1wbGUuY29tICYmCisJdGVzdF9jb21taXQgYXV0aG9yLWVtYWlsLW92ZXJyaWRlLXVzZXIgJiYKKwllY2hvIHVzZXIgYXV0aG9yQGV4YW1wbGUuY29tID4gZXhwZWN0ZWQtYXV0aG9yICYmCisJZWNobyB1c2VyIHVzZXJAZXhhbXBsZS5jb20gPiBleHBlY3RlZC1jb21taXR0ZXIgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSIlYW4gJWFlIiAtMSA+IGFjdHVhbC1hdXRob3IgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSIlY24gJWNlIiAtMSA+IGFjdHVhbC1jb21taXR0ZXIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1hdXRob3IgYWN0dWFsLWF1dGhvciAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWNvbW1pdHRlciBhY3R1YWwtY29tbWl0dGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdHRlci5uYW1lIG92ZXJyaWRlcyB1c2VyLm5hbWUnICcKKwl0ZXN0X2NvbmZpZyB1c2VyLm5hbWUgdXNlciAmJgorCXRlc3RfY29uZmlnIHVzZXIuZW1haWwgdXNlckBleGFtcGxlLmNvbSAmJgorCXRlc3RfY29uZmlnIGNvbW1pdHRlci5uYW1lIGNvbW1pdHRlciAmJgorCXRlc3RfY29tbWl0IGNvbW1pdHRlci1uYW1lLW92ZXJyaWRlLXVzZXIgJiYKKwllY2hvIHVzZXIgdXNlckBleGFtcGxlLmNvbSA+IGV4cGVjdGVkLWF1dGhvciAmJgorCWVjaG8gY29tbWl0dGVyIHVzZXJAZXhhbXBsZS5jb20gPiBleHBlY3RlZC1jb21taXR0ZXIgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSIlYW4gJWFlIiAtMSA+IGFjdHVhbC1hdXRob3IgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSIlY24gJWNlIiAtMSA+IGFjdHVhbC1jb21taXR0ZXIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1hdXRob3IgYWN0dWFsLWF1dGhvciAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWNvbW1pdHRlciBhY3R1YWwtY29tbWl0dGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdHRlci5lbWFpbCBvdmVycmlkZXMgdXNlci5lbWFpbCcgJworCXRlc3RfY29uZmlnIHVzZXIubmFtZSB1c2VyICYmCisJdGVzdF9jb25maWcgdXNlci5lbWFpbCB1c2VyQGV4YW1wbGUuY29tICYmCisJdGVzdF9jb25maWcgY29tbWl0dGVyLmVtYWlsIGNvbW1pdHRlckBleGFtcGxlLmNvbSAmJgorCXRlc3RfY29tbWl0IGNvbW1pdHRlci1lbWFpbC1vdmVycmlkZS11c2VyICYmCisJZWNobyB1c2VyIHVzZXJAZXhhbXBsZS5jb20gPiBleHBlY3RlZC1hdXRob3IgJiYKKwllY2hvIHVzZXIgY29tbWl0dGVyQGV4YW1wbGUuY29tID4gZXhwZWN0ZWQtY29tbWl0dGVyICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWFuICVhZSIgLTEgPiBhY3R1YWwtYXV0aG9yICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWNuICVjZSIgLTEgPiBhY3R1YWwtY29tbWl0dGVyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtYXV0aG9yIGFjdHVhbC1hdXRob3IgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1jb21taXR0ZXIgYWN0dWFsLWNvbW1pdHRlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRob3IgYW5kIGNvbW1pdHRlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3ZlcnJpZGUgY29uZmlnIHNldHRpbmdzJyAnCisJdGVzdF9jb25maWcgdXNlci5uYW1lIHVzZXIgJiYKKwl0ZXN0X2NvbmZpZyB1c2VyLmVtYWlsIHVzZXJAZXhhbXBsZS5jb20gJiYKKwl0ZXN0X2NvbmZpZyBhdXRob3IubmFtZSBhdXRob3IgJiYKKwl0ZXN0X2NvbmZpZyBhdXRob3IuZW1haWwgYXV0aG9yQGV4YW1wbGUuY29tICYmCisJdGVzdF9jb25maWcgY29tbWl0dGVyLm5hbWUgY29tbWl0dGVyICYmCisJdGVzdF9jb25maWcgY29tbWl0dGVyLmVtYWlsIGNvbW1pdHRlckBleGFtcGxlLmNvbSAmJgorCUdJVF9BVVRIT1JfTkFNRT1lbnZfYXV0aG9yICYmIGV4cG9ydCBHSVRfQVVUSE9SX05BTUUgJiYKKwlHSVRfQVVUSE9SX0VNQUlMPWVudl9hdXRob3JAZXhhbXBsZS5jb20gJiYgZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwgJiYKKwlHSVRfQ09NTUlUVEVSX05BTUU9ZW52X2NvbW1pdCAmJiBleHBvcnQgR0lUX0NPTU1JVFRFUl9OQU1FICYmCisJR0lUX0NPTU1JVFRFUl9FTUFJTD1lbnZfY29tbWl0QGV4YW1wbGUuY29tICYmIGV4cG9ydCBHSVRfQ09NTUlUVEVSX0VNQUlMICYmCisJdGVzdF9jb21taXQgZW52LW92ZXJyaWRlLWNvbmYgJiYKKwllY2hvIGVudl9hdXRob3IgZW52X2F1dGhvckBleGFtcGxlLmNvbSA+IGV4cGVjdGVkLWF1dGhvciAmJgorCWVjaG8gZW52X2NvbW1pdCBlbnZfY29tbWl0QGV4YW1wbGUuY29tID4gZXhwZWN0ZWQtY29tbWl0dGVyICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWFuICVhZSIgLTEgPiBhY3R1YWwtYXV0aG9yICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWNuICVjZSIgLTEgPiBhY3R1YWwtY29tbWl0dGVyICYmCisJc2FuZV91bnNldCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTCAmJgorCXNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9OQU1FIEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1hdXRob3IgYWN0dWFsLWF1dGhvciAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWNvbW1pdHRlciBhY3R1YWwtY29tbWl0dGVyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUxOC1pZGVudC1jb3JuZXItY2FzZXMuc2ggYi90L3Q3NTE4LWlkZW50LWNvcm5lci1jYXNlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMjJmNjMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUxOC1pZGVudC1jb3JuZXItY2FzZXMuc2gKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Nvcm5lciBjYXNlcyBpbiBpZGVudCBzdHJpbmdzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgY29uZmlybSB0aGF0IHdlIGRvIG5vdCBzZWdmYXVsdCBfYW5kXyB0aGF0IHdlIGRvIG5vdCBzYXkgIihudWxsKSIsIGFzCisjIGdsaWJjIHN5c3RlbXMgd2lsbCBxdWlldGx5IGhhbmRsZSBvdXIgTlVMTCBwb2ludGVyCisjCisjIE5vdGUgYWxzbyB0aGF0IHdlIGNhbid0IHVzZSAiZW52IiBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byB1bnNldCBhIHZhcmlhYmxlLAorIyBhbmQgIi11IiBpcyBub3QgcG9ydGFibGUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBuYW1lIGFuZCBtaXNzaW5nIGVtYWlsJyAnCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9BVVRIT1JfRU1BSUwgJiYKKwkJR0lUX0FVVEhPUl9OQU1FPSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZm9vIDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgISBudWxsIGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IHJlamVjdHMgYWxsLWNydWQgbmFtZScgJworCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfQVVUSE9SX05BTUU9IiAuOzw+IiBcCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBmb28KKycKKworIyBXZSBtdXN0IHRlc3QgdGhlIGFjdHVhbCBlcnJvciBtZXNzYWdlIGhlcmUsIGFzIGFuIHVud2FudGVkCisjIGF1dG8tZGV0ZWN0aW9uIGNvdWxkIGZhaWwgZm9yIG90aGVyIHJlYXNvbnMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBjb25maWd1cmVkIG5hbWUgZG9lcyBub3QgYXV0by1kZXRlY3QnICcKKwkoCisJCXNhbmVfdW5zZXQgR0lUX0FVVEhPUl9OQU1FICYmCisJCXRlc3RfbXVzdF9mYWlsIFwKKwkJCWdpdCAtYyB1c2VyLm5hbWU9IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGZvbyAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJlbXB0eSBpZGVudCBuYW1lIiBlcnIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUxOS1zdGF0dXMtZnNtb25pdG9yLnNoIGIvdC90NzUxOS1zdGF0dXMtZnNtb25pdG9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZiZmRjY2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTE5LXN0YXR1cy1mc21vbml0b3Iuc2gKQEAgLTAsMCArMSwzODYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3RhdHVzIHdpdGggZmlsZSBzeXN0ZW0gd2F0Y2hlcicKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgTm90ZSwgYWZ0ZXIgImdpdCByZXNldCAtLWhhcmQgSEVBRCIgbm8gZXh0ZW5zaW9ucyBleGlzdCBvdGhlciB0aGFuICdUUkVFJworIyAiZ2l0IHVwZGF0ZS1pbmRleCAtLWZzbW9uaXRvciIgY2FuIGJlIHVzZWQgdG8gZ2V0IHRoZSBleHRlbnNpb24gd3JpdHRlbgorIyBiZWZvcmUgdGVzdGluZyB0aGUgcmVzdWx0cy4KKworY2xlYW5fcmVwbyAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJZ2l0IGNsZWFuIC1mZAorfQorCitkaXJ0eV9yZXBvICgpIHsKKwk6ID51bnRyYWNrZWQgJiYKKwk6ID5kaXIxL3VudHJhY2tlZCAmJgorCTogPmRpcjIvdW50cmFja2VkICYmCisJZWNobyAxID5tb2RpZmllZCAmJgorCWVjaG8gMiA+ZGlyMS9tb2RpZmllZCAmJgorCWVjaG8gMyA+ZGlyMi9tb2RpZmllZCAmJgorCWVjaG8gNCA+bmV3ICYmCisJZWNobyA1ID5kaXIxL25ldyAmJgorCWVjaG8gNiA+ZGlyMi9uZXcKK30KKword3JpdGVfaW50ZWdyYXRpb25fc2NyaXB0ICgpIHsKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9mc21vbml0b3ItdGVzdDw8LVxFT0YKKwlpZiB0ZXN0ICIkIyIgLW5lIDIKKwl0aGVuCisJCWVjaG8gIiQwOiBleGFjdGx5IDIgYXJndW1lbnRzIGV4cGVjdGVkIgorCQlleGl0IDIKKwlmaQorCWlmIHRlc3QgIiQxIiAhPSAyCisJdGhlbgorCQllY2hvICJVbnN1cHBvcnRlZCBjb3JlLmZzbW9uaXRvciBob29rIHZlcnNpb24uIiA+JjIKKwkJZXhpdCAxCisJZmkKKwlwcmludGYgImxhc3RfdXBkYXRlX3Rva2VuXDAiCisJcHJpbnRmICJ1bnRyYWNrZWRcMCIKKwlwcmludGYgImRpcjEvdW50cmFja2VkXDAiCisJcHJpbnRmICJkaXIyL3VudHJhY2tlZFwwIgorCXByaW50ZiAibW9kaWZpZWRcMCIKKwlwcmludGYgImRpcjEvbW9kaWZpZWRcMCIKKwlwcmludGYgImRpcjIvbW9kaWZpZWRcMCIKKwlwcmludGYgIm5ld1wwIgorCXByaW50ZiAiZGlyMS9uZXdcMCIKKwlwcmludGYgImRpcjIvbmV3XDAiCisJRU9GCit9CisKK3Rlc3RfbGF6eV9wcmVyZXEgVU5UUkFDS0VEX0NBQ0hFICcKKwl7IGdpdCB1cGRhdGUtaW5kZXggLS10ZXN0LXVudHJhY2tlZC1jYWNoZTsgcmV0PSQ/OyB9ICYmCisJdGVzdCAkcmV0IC1uZSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCTogPnRyYWNrZWQgJiYKKwk6ID5tb2RpZmllZCAmJgorCW1rZGlyIGRpcjEgJiYKKwk6ID5kaXIxL3RyYWNrZWQgJiYKKwk6ID5kaXIxL21vZGlmaWVkICYmCisJbWtkaXIgZGlyMiAmJgorCTogPmRpcjIvdHJhY2tlZCAmJgorCTogPmRpcjIvbW9kaWZpZWQgJiYKKwlnaXQgLWMgY29yZS5mc21vbml0b3I9IGFkZCAuICYmCisJZ2l0IC1jIGNvcmUuZnNtb25pdG9yPSBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBjb25maWcgY29yZS5mc21vbml0b3IgLmdpdC9ob29rcy9mc21vbml0b3ItdGVzdCAmJgorCWNhdCA+LmdpdGlnbm9yZSA8PC1cRU9GCisJLmdpdGlnbm9yZQorCWV4cGVjdCoKKwlhY3R1YWwqCisJbWFya2VyKgorCUVPRgorJworCisjIHRlc3QgdGhhdCB0aGUgZnNtb25pdG9yIGV4dGVuc2lvbiBpcyBvZmYgYnkgZGVmYXVsdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNtb25pdG9yIGV4dGVuc2lvbiBpcyBvZmYgYnkgZGVmYXVsdCcgJworCXRlc3QtdG9vbCBkdW1wLWZzbW9uaXRvciA+YWN0dWFsICYmCisJZ3JlcCAiXm5vIGZzbW9uaXRvciIgYWN0dWFsCisnCisKKyMgdGVzdCB0aGF0ICJ1cGRhdGUtaW5kZXggLS1mc21vbml0b3IiIGFkZHMgdGhlIGZzbW9uaXRvciBleHRlbnNpb24KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtLWZzbW9uaXRvciIgYWRkcyB0aGUgZnNtb25pdG9yIGV4dGVuc2lvbicgJworCWdpdCB1cGRhdGUtaW5kZXggLS1mc21vbml0b3IgJiYKKwl0ZXN0LXRvb2wgZHVtcC1mc21vbml0b3IgPmFjdHVhbCAmJgorCWdyZXAgIl5mc21vbml0b3IgbGFzdCB1cGRhdGUiIGFjdHVhbAorJworCisjIHRlc3QgdGhhdCAidXBkYXRlLWluZGV4IC0tbm8tZnNtb25pdG9yIiByZW1vdmVzIHRoZSBmc21vbml0b3IgZXh0ZW5zaW9uCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1uby1mc21vbml0b3IiIHJlbW92ZXMgdGhlIGZzbW9uaXRvciBleHRlbnNpb24nICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tZnNtb25pdG9yICYmCisJdGVzdC10b29sIGR1bXAtZnNtb25pdG9yID5hY3R1YWwgJiYKKwlncmVwICJebm8gZnNtb25pdG9yIiBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YgJiYKK2ggZGlyMS9tb2RpZmllZAorSCBkaXIxL3RyYWNrZWQKK2ggZGlyMi9tb2RpZmllZAorSCBkaXIyL3RyYWNrZWQKK2ggbW9kaWZpZWQKK0ggdHJhY2tlZAorRU9GCisKKyMgdGVzdCB0aGF0ICJ1cGRhdGUtaW5kZXggLS1mc21vbml0b3ItdmFsaWQiIHNldHMgdGhlIGZzbW9uaXRvciB2YWxpZCBiaXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtLWZzbW9uaXRvci12YWxpZCIgc2V0cyB0aGUgZnNtb25pdG9yIHZhbGlkIGJpdCcgJworCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL2ZzbW9uaXRvci10ZXN0PDwtXEVPRiAmJgorCQlwcmludGYgImxhc3RfdXBkYXRlX3Rva2VuXDAiCisJRU9GCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZzbW9uaXRvciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1mc21vbml0b3ItdmFsaWQgZGlyMS9tb2RpZmllZCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1mc21vbml0b3ItdmFsaWQgZGlyMi9tb2RpZmllZCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1mc21vbml0b3ItdmFsaWQgbW9kaWZpZWQgJiYKKwlnaXQgbHMtZmlsZXMgLWYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YgJiYKK0ggZGlyMS9tb2RpZmllZAorSCBkaXIxL3RyYWNrZWQKK0ggZGlyMi9tb2RpZmllZAorSCBkaXIyL3RyYWNrZWQKK0ggbW9kaWZpZWQKK0ggdHJhY2tlZAorRU9GCisKKyMgdGVzdCB0aGF0ICJ1cGRhdGUtaW5kZXggLS1uby1mc21vbml0b3ItdmFsaWQiIGNsZWFycyB0aGUgZnNtb25pdG9yIHZhbGlkIGJpdAordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tbm8tZnNtb25pdG9yLXZhbGlkIiBjbGVhcnMgdGhlIGZzbW9uaXRvciB2YWxpZCBiaXQnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tZnNtb25pdG9yLXZhbGlkIGRpcjEvbW9kaWZpZWQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tZnNtb25pdG9yLXZhbGlkIGRpcjIvbW9kaWZpZWQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tZnNtb25pdG9yLXZhbGlkIG1vZGlmaWVkICYmCisJZ2l0IGxzLWZpbGVzIC1mID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GICYmCitIIGRpcjEvbW9kaWZpZWQKK0ggZGlyMS90cmFja2VkCitIIGRpcjIvbW9kaWZpZWQKK0ggZGlyMi90cmFja2VkCitIIG1vZGlmaWVkCitIIHRyYWNrZWQKK0VPRgorCisjIHRlc3QgdGhhdCBhbGwgZmlsZXMgcmV0dXJuZWQgYnkgdGhlIHNjcmlwdCBnZXQgZmxhZ2dlZCBhcyBpbnZhbGlkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGwgZmlsZXMgcmV0dXJuZWQgYnkgaW50ZWdyYXRpb24gc2NyaXB0IGdldCBmbGFnZ2VkIGFzIGludmFsaWQnICcKKwl3cml0ZV9pbnRlZ3JhdGlvbl9zY3JpcHQgJiYKKwlkaXJ0eV9yZXBvICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZzbW9uaXRvciAmJgorCWdpdCBscy1maWxlcyAtZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRiAmJgorSCBkaXIxL21vZGlmaWVkCitoIGRpcjEvbmV3CitIIGRpcjEvdHJhY2tlZAorSCBkaXIyL21vZGlmaWVkCitoIGRpcjIvbmV3CitIIGRpcjIvdHJhY2tlZAorSCBtb2RpZmllZAoraCBuZXcKK0ggdHJhY2tlZAorRU9GCisKKyMgdGVzdCB0aGF0IG5ld2x5IGFkZGVkIGZpbGVzIGFyZSBtYXJrZWQgdmFsaWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ld2x5IGFkZGVkIGZpbGVzIGFyZSBtYXJrZWQgdmFsaWQnICcKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9mc21vbml0b3ItdGVzdDw8LVxFT0YgJiYKKwkJcHJpbnRmICJsYXN0X3VwZGF0ZV90b2tlblwwIgorCUVPRgorCWdpdCBhZGQgbmV3ICYmCisJZ2l0IGFkZCBkaXIxL25ldyAmJgorCWdpdCBhZGQgZGlyMi9uZXcgJiYKKwlnaXQgbHMtZmlsZXMgLWYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YgJiYKK0ggZGlyMS9tb2RpZmllZAoraCBkaXIxL25ldworaCBkaXIxL3RyYWNrZWQKK0ggZGlyMi9tb2RpZmllZAoraCBkaXIyL25ldworaCBkaXIyL3RyYWNrZWQKK0ggbW9kaWZpZWQKK2ggbmV3CitoIHRyYWNrZWQKK0VPRgorCisjIHRlc3QgdGhhdCBhbGwgdW5tb2RpZmllZCBmaWxlcyBnZXQgbWFya2VkIHZhbGlkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGwgdW5tb2RpZmllZCBmaWxlcyBnZXQgbWFya2VkIHZhbGlkJyAnCisJIyBtb2RpZmllZCBmaWxlcyByZXN1bHQgaW4gdXBkYXRlLWluZGV4IHJldHVybmluZyAxCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLS1mb3JjZS13cml0ZS1pbmRleCAmJgorCWdpdCBscy1maWxlcyAtZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRiAmJgorSCBkaXIxL21vZGlmaWVkCitoIGRpcjEvdHJhY2tlZAoraCBkaXIyL21vZGlmaWVkCitoIGRpcjIvdHJhY2tlZAoraCBtb2RpZmllZAoraCB0cmFja2VkCitFT0YKKworIyB0ZXN0IHRoYXQgKm9ubHkqIGZpbGVzIHJldHVybmVkIGJ5IHRoZSBpbnRlZ3JhdGlvbiBzY3JpcHQgZ2V0IGZsYWdnZWQgYXMgaW52YWxpZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnKm9ubHkqIGZpbGVzIHJldHVybmVkIGJ5IHRoZSBpbnRlZ3JhdGlvbiBzY3JpcHQgZ2V0IGZsYWdnZWQgYXMgaW52YWxpZCcgJworCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL2ZzbW9uaXRvci10ZXN0PDwtXEVPRiAmJgorCXByaW50ZiAibGFzdF91cGRhdGVfdG9rZW5cMCIKKwlwcmludGYgImRpcjEvbW9kaWZpZWRcMCIKKwlFT0YKKwljbGVhbl9yZXBvICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLS1mb3JjZS13cml0ZS1pbmRleCAmJgorCWVjaG8gMSA+bW9kaWZpZWQgJiYKKwllY2hvIDIgPmRpcjEvbW9kaWZpZWQgJiYKKwllY2hvIDMgPmRpcjIvbW9kaWZpZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtLWZvcmNlLXdyaXRlLWluZGV4ICYmCisJZ2l0IGxzLWZpbGVzIC1mID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgRW5zdXJlIGNvbW1hbmRzIHRoYXQgY2FsbCByZWZyZXNoX2luZGV4KCkgdG8gbW92ZSB0aGUgaW5kZXggYmFjayBpbiB0aW1lCisjIHByb3Blcmx5IGludmFsaWRhdGUgdGhlIGZzbW9uaXRvciBjYWNoZQordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcmVzaF9pbmRleCgpIGludmFsaWRhdGVzIGZzbW9uaXRvciBjYWNoZScgJworCWNsZWFuX3JlcG8gJiYKKwlkaXJ0eV9yZXBvICYmCisJd3JpdGVfaW50ZWdyYXRpb25fc2NyaXB0ICYmCisJZ2l0IGFkZCAuICYmCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvZnNtb25pdG9yLXRlc3Q8PC1cRU9GICYmCisJRU9GCisJZ2l0IGNvbW1pdCAtbSAidG8gcmVzZXQiICYmCisJZ2l0IHJlc2V0IEhFQUR+MSAmJgorCWdpdCBzdGF0dXMgPmFjdHVhbCAmJgorCWdpdCAtYyBjb3JlLmZzbW9uaXRvcj0gc3RhdHVzID5leHBlY3QgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIHRlc3QgZnNtb25pdG9yIHdpdGggYW5kIHdpdGhvdXQgcHJlbG9hZEluZGV4CitwcmVsb2FkX3ZhbHVlcz0iZmFsc2UgdHJ1ZSIKK2ZvciBwcmVsb2FkX3ZhbCBpbiAkcHJlbG9hZF92YWx1ZXMKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgcHJlbG9hZEluZGV4IHRvICRwcmVsb2FkX3ZhbCIgJworCQlnaXQgY29uZmlnIGNvcmUucHJlbG9hZEluZGV4ICRwcmVsb2FkX3ZhbCAmJgorCQlpZiB0ZXN0ICRwcmVsb2FkX3ZhbCA9IHRydWUKKwkJdGhlbgorCQkJR0lUX1RFU1RfUFJFTE9BRF9JTkRFWD0kcHJlbG9hZF92YWw7IGV4cG9ydCBHSVRfVEVTVF9QUkVMT0FEX0lOREVYCisJCWVsc2UKKwkJCXNhbmVfdW5zZXQgR0lUX1RFU1RfUFJFTE9BRF9JTkRFWAorCQlmaQorCScKKworCSMgdGVzdCBmc21vbml0b3Igd2l0aCBhbmQgd2l0aG91dCB0aGUgdW50cmFja2VkIGNhY2hlIChpZiBhdmFpbGFibGUpCisJdWNfdmFsdWVzPSJmYWxzZSIKKwl0ZXN0X2hhdmVfcHJlcmVxIFVOVFJBQ0tFRF9DQUNIRSAmJiB1Y192YWx1ZXM9ImZhbHNlIHRydWUiCisJZm9yIHVjX3ZhbCBpbiAkdWNfdmFsdWVzCisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgdW50cmFja2VkIGNhY2hlIHRvICR1Y192YWwiICcKKwkJCWdpdCBjb25maWcgY29yZS51bnRyYWNrZWRjYWNoZSAkdWNfdmFsCisJCScKKworCQkjIFN0YXR1cyBpcyB3ZWxsIHRlc3RlZCBlbHNld2hlcmUgc28gd2UnbGwganVzdCBlbnN1cmUgdGhhdCB0aGUgcmVzdWx0cyBhcmUKKwkJIyB0aGUgc2FtZSB3aGVuIHVzaW5nIGNvcmUuZnNtb25pdG9yLgorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wYXJlIHN0YXR1cyB3aXRoIGFuZCB3aXRob3V0IGZzbW9uaXRvcicgJworCQkJd3JpdGVfaW50ZWdyYXRpb25fc2NyaXB0ICYmCisJCQljbGVhbl9yZXBvICYmCisJCQlkaXJ0eV9yZXBvICYmCisJCQlnaXQgYWRkIG5ldyAmJgorCQkJZ2l0IGFkZCBkaXIxL25ldyAmJgorCQkJZ2l0IGFkZCBkaXIyL25ldyAmJgorCQkJZ2l0IHN0YXR1cyA+YWN0dWFsICYmCisJCQlnaXQgLWMgY29yZS5mc21vbml0b3I9IHN0YXR1cyA+ZXhwZWN0ICYmCisJCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorCQknCisKKwkJIyBNYWtlIHN1cmUgaXQncyBhY3R1YWxseSBza2lwcGluZyB0aGUgY2hlY2sgZm9yIG1vZGlmaWVkIGFuZCB1bnRyYWNrZWQKKwkJIyAoaWYgZW5hYmxlZCkgZmlsZXMgdW5sZXNzIGl0IGlzIHRvbGQgYWJvdXQgdGhlbS4KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAic3RhdHVzIGRvZXNuJ3QgZGV0ZWN0IHVucmVwb3J0ZWQgbW9kaWZpY2F0aW9ucyIgJworCQkJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvZnNtb25pdG9yLXRlc3Q8PC1cRU9GICYmCisJCQlwcmludGYgImxhc3RfdXBkYXRlX3Rva2VuXDAiCisJCQk6Pm1hcmtlcgorCQkJRU9GCisJCQljbGVhbl9yZXBvICYmCisJCQlnaXQgc3RhdHVzICYmCisJCQl0ZXN0X3BhdGhfaXNfZmlsZSBtYXJrZXIgJiYKKwkJCWRpcnR5X3JlcG8gJiYKKwkJCXJtIC1mIG1hcmtlciAmJgorCQkJZ2l0IHN0YXR1cyA+YWN0dWFsICYmCisJCQl0ZXN0X3BhdGhfaXNfZmlsZSBtYXJrZXIgJiYKKwkJCXRlc3RfaTE4bmdyZXAgISAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IiBhY3R1YWwgJiYKKwkJCWlmIHRlc3QgJHVjX3ZhbCA9IHRydWUKKwkJCXRoZW4KKwkJCQl0ZXN0X2kxOG5ncmVwICEgIlVudHJhY2tlZCBmaWxlczoiIGFjdHVhbAorCQkJZmkgJiYKKwkJCWlmIHRlc3QgJHVjX3ZhbCA9IGZhbHNlCisJCQl0aGVuCisJCQkJdGVzdF9pMThuZ3JlcCAiVW50cmFja2VkIGZpbGVzOiIgYWN0dWFsCisJCQlmaSAmJgorCQkJcm0gLWYgbWFya2VyCisJCScKKwlkb25lCitkb25lCisKKyMgdGVzdCB0aGF0IHNwbGl0dGluZyB0aGUgaW5kZXggZG9lc24ndCBpbnRlcmZlcmUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwbGl0dGluZyB0aGUgaW5kZXggcmVzdWx0cyBpbiB0aGUgc2FtZSBzdGF0ZScgJworCXdyaXRlX2ludGVncmF0aW9uX3NjcmlwdCAmJgorCWRpcnR5X3JlcG8gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tZnNtb25pdG9yICAmJgorCWdpdCBscy1maWxlcyAtZiA+ZXhwZWN0ICYmCisJdGVzdC10b29sIGR1bXAtZnNtb25pdG9yID4mMiAmJiBlY2hvICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZzbW9uaXRvciAtLXNwbGl0LWluZGV4ICYmCisJdGVzdC10b29sIGR1bXAtZnNtb25pdG9yID4mMiAmJiBlY2hvICYmCisJZ2l0IGxzLWZpbGVzIC1mID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5UUkFDS0VEX0NBQ0hFICdpZ25vcmUgLmdpdCBjaGFuZ2VzIHdoZW4gaW52YWxpZGF0aW5nIFVOVFInICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGRvdC1naXQgJiYKKwkoCisJCWNkIGRvdC1naXQgJiYKKwkJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCQk6ID50cmFja2VkICYmCisJCTogPm1vZGlmaWVkICYmCisJCW1rZGlyIGRpcjEgJiYKKwkJOiA+ZGlyMS90cmFja2VkICYmCisJCTogPmRpcjEvbW9kaWZpZWQgJiYKKwkJbWtkaXIgZGlyMiAmJgorCQk6ID5kaXIyL3RyYWNrZWQgJiYKKwkJOiA+ZGlyMi9tb2RpZmllZCAmJgorCQl3cml0ZV9pbnRlZ3JhdGlvbl9zY3JpcHQgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmZzbW9uaXRvciAuZ2l0L2hvb2tzL2ZzbW9uaXRvci10ZXN0ICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS11bnRyYWNrZWQtY2FjaGUgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWZzbW9uaXRvciAmJgorCQlHSVRfVFJBQ0VfVU5UUkFDS0VEX1NUQVRTPSIkVFJBU0hfRElSRUNUT1JZL3RyYWNlLWJlZm9yZSIgXAorCQlnaXQgc3RhdHVzICYmCisJCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYmVmb3JlCisJKSAmJgorCWNhdCA+PmRvdC1naXQvLmdpdC9ob29rcy9mc21vbml0b3ItdGVzdCA8PC1cRU9GICYmCisJcHJpbnRmICIuZ2l0XDAiCisJcHJpbnRmICIuZ2l0L2luZGV4XDAiCisJcHJpbnRmICJkaXIxLy5naXRcMCIKKwlwcmludGYgImRpcjEvLmdpdC9pbmRleFwwIgorCUVPRgorCSgKKwkJY2QgZG90LWdpdCAmJgorCQlHSVRfVFJBQ0VfVU5UUkFDS0VEX1NUQVRTPSIkVFJBU0hfRElSRUNUT1JZL3RyYWNlLWFmdGVyIiBcCisJCWdpdCBzdGF0dXMgJiYKKwkJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hZnRlcgorCSkgJiYKKwlncmVwICJkaXJlY3RvcnkgaW52YWxpZGF0aW9uIiB0cmFjZS1iZWZvcmUgPj5iZWZvcmUgJiYKKwlncmVwICJkaXJlY3RvcnkgaW52YWxpZGF0aW9uIiB0cmFjZS1hZnRlciA+PmFmdGVyICYmCisJIyBVTlRSIGV4dGVuc2lvbiB1bmNoYW5nZWQsIGRpciBpbnZhbGlkYXRpb24gY291bnQgdW5jaGFuZ2VkCisJdGVzdF9jbXAgYmVmb3JlIGFmdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2NhcmRfaW5kZXgoKSBhbHNvIGRpc2NhcmRzIGZzbW9uaXRvciBpbmZvJyAnCisJdGVzdF9jb25maWcgY29yZS5mc21vbml0b3IgIiRURVNUX0RJUkVDVE9SWS90NzUxOS9mc21vbml0b3ItYWxsIiAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCXRlc3QtdG9vbCByZWFkLWNhY2hlIC0tcHJpbnQtYW5kLXJlZnJlc2g9dHJhY2tlZCAyID5hY3R1YWwgJiYKKwlwcmludGYgInRyYWNrZWQgaXMlcyB1cCB0byBkYXRlXG4iICIiICIgbm90IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFRlc3QgdW5zdGFnaW5nIGVudHJpZXMgdGhhdDoKKyMgIC0gQXJlIG5vdCBmbGFnZ2VkIHdpdGggQ0VfRlNNT05JVE9SX1ZBTElECisjICAtIEhhdmUgYSBwb3NpdGlvbiBpbiB0aGUgaW5kZXggPj0gdGhlIG51bWJlciBvZiBlbnRyaWVzIHByZXNlbnQgaW4gdGhlIGluZGV4CisjICAgIGFmdGVyIHVuc3RhZ2luZy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzdWNjZWVkcyBhZnRlciBzdGFnaW5nL3Vuc3RhZ2luZycgJworCXRlc3RfY3JlYXRlX3JlcG8gZnNtb25pdG9yLXN0YWdlLXVuc3RhZ2UgJiYKKwkoCisJCWNkIGZzbW9uaXRvci1zdGFnZS11bnN0YWdlICYmCisJCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWZzbW9uaXRvciAmJgorCQlyZW1vdmVkPSQodGVzdF9zZXEgMSAxMDAgfCBzZWQgInMvXi96LyIpICYmCisJCXRvdWNoICRyZW1vdmVkICYmCisJCWdpdCBhZGQgJHJlbW92ZWQgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmZzbW9uaXRvciAiJFRFU1RfRElSRUNUT1JZL3Q3NTE5L2ZzbW9uaXRvci1lbnYiICYmCisJCUZTTU9OSVRPUl9MSVNUPSIkcmVtb3ZlZCIgZ2l0IHJlc3RvcmUgLVMgJHJlbW92ZWQgJiYKKwkJRlNNT05JVE9SX0xJU1Q9IiRyZW1vdmVkIiBnaXQgc3RhdHVzCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MTkvZnNtb25pdG9yLWFsbCBiL3QvdDc1MTkvZnNtb25pdG9yLWFsbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NGFiNjZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUxOS9mc21vbml0b3ItYWxsCkBAIC0wLDAgKzEsMjMgQEAKKyMhL2Jpbi9zaAorIworIyBBbiB0ZXN0IGhvb2sgc2NyaXB0IHRvIGludGVncmF0ZSB3aXRoIGdpdCB0byB0ZXN0IGZzbW9uaXRvci4KKyMKKyMgVGhlIGhvb2sgaXMgcGFzc2VkIGEgdmVyc2lvbiAoY3VycmVudGx5IDEpIGFuZCBhIHRpbWUgaW4gbmFub3NlY29uZHMKKyMgZm9ybWF0dGVkIGFzIGEgc3RyaW5nIGFuZCBvdXRwdXRzIHRvIHN0ZG91dCBhbGwgZmlsZXMgdGhhdCBoYXZlIGJlZW4KKyMgbW9kaWZpZWQgc2luY2UgdGhlIGdpdmVuIHRpbWUuIFBhdGhzIG11c3QgYmUgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YKKyMgdGhlIHdvcmtpbmcgdHJlZSBhbmQgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIE5VTC4KKyMKKyNlY2hvICIkMCAkKiIgPiYyCisKK2lmIHRlc3QgIiQjIiAtbmUgMgordGhlbgorCWVjaG8gIiQwOiBleGFjdGx5IDIgYXJndW1lbnRzIGV4cGVjdGVkIiA+JjIKKwlleGl0IDIKK2ZpCisKK2lmIHRlc3QgIiQxIiAhPSAxCit0aGVuCisJZXhpdCAxCitmaQorCitlY2hvICIvIgpkaWZmIC0tZ2l0IGEvdC90NzUxOS9mc21vbml0b3ItYWxsLXYyIGIvdC90NzUxOS9mc21vbml0b3ItYWxsLXYyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA2MTkwN2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTE5L2ZzbW9uaXRvci1hbGwtdjIKQEAgLTAsMCArMSwyMSBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisjCisjIEFuIHRlc3QgaG9vayBzY3JpcHQgdG8gaW50ZWdyYXRlIHdpdGggZ2l0IHRvIHRlc3QgZnNtb25pdG9yLgorIworIyBUaGUgaG9vayBpcyBwYXNzZWQgYSB2ZXJzaW9uIChjdXJyZW50bHkgMikgYW5kIHNpbmNlIHRva2VuCisjIGZvcm1hdHRlZCBhcyBhIHN0cmluZyBhbmQgb3V0cHV0cyB0byBzdGRvdXQgYWxsIGZpbGVzIHRoYXQgaGF2ZSBiZWVuCisjIG1vZGlmaWVkIHNpbmNlIHRoZSBnaXZlbiB0aW1lLiBQYXRocyBtdXN0IGJlIHJlbGF0aXZlIHRvIHRoZSByb290IG9mCisjIHRoZSB3b3JraW5nIHRyZWUgYW5kIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBOVUwuCisjCisjZWNobyAiJDAgJCoiID4mMgorbXkgKCR2ZXJzaW9uLCAkbGFzdF91cGRhdGVfdG9rZW4pID0gQEFSR1Y7CisKK2lmICgkdmVyc2lvbiBuZSAyKSB7CisJcHJpbnQgIlVuc3VwcG9ydGVkIHF1ZXJ5LWZzbW9uaXRvciBob29rIHZlcnNpb24gJyR2ZXJzaW9uJy5cbiI7CisJZXhpdCAxOworfQorCitwcmludCAibGFzdF91cGRhdGVfdG9rZW5cMC9cMCIKZGlmZiAtLWdpdCBhL3QvdDc1MTkvZnNtb25pdG9yLWVudiBiL3QvdDc1MTkvZnNtb25pdG9yLWVudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZjFmN2FiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUxOS9mc21vbml0b3ItZW52CkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIworIyBBbiB0ZXN0IGhvb2sgc2NyaXB0IHRvIGludGVncmF0ZSB3aXRoIGdpdCB0byB0ZXN0IGZzbW9uaXRvci4KKyMKKyMgVGhlIGhvb2sgaXMgcGFzc2VkIGEgdmVyc2lvbiAoY3VycmVudGx5IDEpIGFuZCBhIHRpbWUgaW4gbmFub3NlY29uZHMKKyMgZm9ybWF0dGVkIGFzIGEgc3RyaW5nIGFuZCBvdXRwdXRzIHRvIHN0ZG91dCBhbGwgZmlsZXMgdGhhdCBoYXZlIGJlZW4KKyMgbW9kaWZpZWQgc2luY2UgdGhlIGdpdmVuIHRpbWUuIFBhdGhzIG11c3QgYmUgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YKKyMgdGhlIHdvcmtpbmcgdHJlZSBhbmQgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIE5VTC4KKyMKKyNlY2hvICIkMCAkKiIgPiYyCisKK2lmIHRlc3QgIiQjIiAtbmUgMgordGhlbgorCWVjaG8gIiQwOiBleGFjdGx5IDIgYXJndW1lbnRzIGV4cGVjdGVkIiA+JjIKKwlleGl0IDIKK2ZpCisKK2lmIHRlc3QgIiQxIiAhPSAxCit0aGVuCisJZWNobyAiVW5zdXBwb3J0ZWQgY29yZS5mc21vbml0b3IgaG9vayB2ZXJzaW9uLiIgPiYyCisJZXhpdCAxCitmaQorCitwcmludGYgJyVzXG4nICRGU01PTklUT1JfTElTVApkaWZmIC0tZ2l0IGEvdC90NzUxOS9mc21vbml0b3Itbm9uZSBiL3QvdDc1MTkvZnNtb25pdG9yLW5vbmUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWQ5Y2Y1YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MTkvZnNtb25pdG9yLW5vbmUKQEAgLTAsMCArMSwyMiBAQAorIyEvYmluL3NoCisjCisjIEFuIHRlc3QgaG9vayBzY3JpcHQgdG8gaW50ZWdyYXRlIHdpdGggZ2l0IHRvIHRlc3QgZnNtb25pdG9yLgorIworIyBUaGUgaG9vayBpcyBwYXNzZWQgYSB2ZXJzaW9uIChjdXJyZW50bHkgMSkgYW5kIGEgdGltZSBpbiBuYW5vc2Vjb25kcworIyBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcgYW5kIG91dHB1dHMgdG8gc3Rkb3V0IGFsbCBmaWxlcyB0aGF0IGhhdmUgYmVlbgorIyBtb2RpZmllZCBzaW5jZSB0aGUgZ2l2ZW4gdGltZS4gUGF0aHMgbXVzdCBiZSByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZgorIyB0aGUgd29ya2luZyB0cmVlIGFuZCBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgTlVMLgorIworI2VjaG8gIiQwICQqIiA+JjIKKworaWYgdGVzdCAiJCMiIC1uZSAyCit0aGVuCisJZWNobyAiJDA6IGV4YWN0bHkgMiBhcmd1bWVudHMgZXhwZWN0ZWQiID4mMgorCWV4aXQgMgorZmkKKworaWYgdGVzdCAiJDEiICE9IDEKK3RoZW4KKwllY2hvICJVbnN1cHBvcnRlZCBjb3JlLmZzbW9uaXRvciBob29rIHZlcnNpb24uIiA+JjIKKwlleGl0IDEKK2ZpCmRpZmYgLS1naXQgYS90L3Q3NTE5L2ZzbW9uaXRvci13YXRjaG1hbiBiL3QvdDc1MTkvZnNtb25pdG9yLXdhdGNobWFuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI2NGI5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTE5L2ZzbW9uaXRvci13YXRjaG1hbgpAQCAtMCwwICsxLDEyNyBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgSVBDOjpPcGVuMjsKKworIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIGludGVncmF0ZSBXYXRjaG1hbgorIyAoaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vd2F0Y2htYW4vKSB3aXRoIGdpdCB0byBzcGVlZCB1cCBkZXRlY3RpbmcKKyMgbmV3IGFuZCBtb2RpZmllZCBmaWxlcy4KKyMKKyMgVGhlIGhvb2sgaXMgcGFzc2VkIGEgdmVyc2lvbiAoY3VycmVudGx5IDEpIGFuZCBhIHRpbWUgaW4gbmFub3NlY29uZHMKKyMgZm9ybWF0dGVkIGFzIGEgc3RyaW5nIGFuZCBvdXRwdXRzIHRvIHN0ZG91dCBhbGwgZmlsZXMgdGhhdCBoYXZlIGJlZW4KKyMgbW9kaWZpZWQgc2luY2UgdGhlIGdpdmVuIHRpbWUuIFBhdGhzIG11c3QgYmUgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YKKyMgdGhlIHdvcmtpbmcgdHJlZSBhbmQgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIE5VTC4KKyMKKyMgVG8gZW5hYmxlIHRoaXMgaG9vaywgcmVuYW1lIHRoaXMgZmlsZSB0byAicXVlcnktd2F0Y2htYW4iIGFuZCBzZXQKKyMgJ2dpdCBjb25maWcgY29yZS5mc21vbml0b3IgLmdpdC9ob29rcy9xdWVyeS13YXRjaG1hbicKKyMKK215ICgkdmVyc2lvbiwgJHRpbWUpID0gQEFSR1Y7CisjcHJpbnQgU1RERVJSICIkMCAkdmVyc2lvbiAkdGltZVxuIjsKKworIyBDaGVjayB0aGUgaG9vayBpbnRlcmZhY2UgdmVyc2lvbgorCitpZiAoJHZlcnNpb24gPT0gMSkgeworCSMgY29udmVydCBuYW5vc2Vjb25kcyB0byBzZWNvbmRzCisJIyBzdWJ0cmFjdCBvbmUgc2Vjb25kIHRvIG1ha2Ugc3VyZSB3YXRjaG1hbiB3aWxsIHJldHVybiBhbGwgY2hhbmdlcworCSR0aW1lID0gaW50ICgkdGltZSAvIDEwMDAwMDAwMDApIC0gMTsKK30gZWxzZSB7CisJZXhpdCAxOworfQorCitteSAkZ2l0X3dvcmtfdHJlZTsKK2lmICgkXk8gPX4gJ21zeXMnIHx8ICReTyA9fiAnY3lnd2luJykgeworCSRnaXRfd29ya190cmVlID0gV2luMzI6OkdldEN3ZCgpOworCSRnaXRfd29ya190cmVlID1+IHRyL1xcL1wvLzsKK30gZWxzZSB7CisJcmVxdWlyZSBDd2Q7CisJJGdpdF93b3JrX3RyZWUgPSBDd2Q6OmN3ZCgpOworfQorCitteSAkcmV0cnkgPSAxOworCitsYXVuY2hfd2F0Y2htYW4oKTsKKworc3ViIGxhdW5jaF93YXRjaG1hbiB7CisKKwlteSAkcGlkID0gb3BlbjIoXCpDSExEX09VVCwgXCpDSExEX0lOLCAnd2F0Y2htYW4gLWonKQorCSAgICBvciBkaWUgIm9wZW4yKCkgZmFpbGVkOiAkIVxuIiAuCisJICAgICJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiI7CisKKwkjIEluIHRoZSBxdWVyeSBleHByZXNzaW9uIGJlbG93IHdlJ3JlIGFza2luZyBmb3IgbmFtZXMgb2YgZmlsZXMgdGhhdAorCSMgY2hhbmdlZCBzaW5jZSAkdGltZSBidXQgd2VyZSBub3QgdHJhbnNpZW50IChpZSBjcmVhdGVkIGFmdGVyCisJIyAkdGltZSBidXQgbm8gbG9uZ2VyIGV4aXN0KS4KKwkjCisJIyBUbyBhY2NvbXBsaXNoIHRoaXMsIHdlJ3JlIHVzaW5nIHRoZSAic2luY2UiIGdlbmVyYXRvciB0byB1c2UgdGhlCisJIyByZWNlbmN5IGluZGV4IHRvIHNlbGVjdCBjYW5kaWRhdGUgbm9kZXMgYW5kICJmaWVsZHMiIHRvIGxpbWl0IHRoZQorCSMgb3V0cHV0IHRvIGZpbGUgbmFtZXMgb25seS4KKworCW15ICRxdWVyeSA9IDw8IglFTkQiOworCQlbInF1ZXJ5IiwgIiRnaXRfd29ya190cmVlIiwgeworCQkJInNpbmNlIjogJHRpbWUsCisJCQkiZmllbGRzIjogWyJuYW1lIl0KKwkJfV0KKwlFTkQKKwkKKwlvcGVuIChteSAkZmgsICI+IiwgIi5naXQvd2F0Y2htYW4tcXVlcnkuanNvbiIpOworCXByaW50ICRmaCAkcXVlcnk7CisJY2xvc2UgJGZoOworCisJcHJpbnQgQ0hMRF9JTiAkcXVlcnk7CisJY2xvc2UgQ0hMRF9JTjsKKwlteSAkcmVzcG9uc2UgPSBkbyB7bG9jYWwgJC87IDxDSExEX09VVD59OworCisJb3BlbiAoJGZoLCAiPiIsICIuZ2l0L3dhdGNobWFuLXJlc3BvbnNlLmpzb24iKTsKKwlwcmludCAkZmggJHJlc3BvbnNlOworCWNsb3NlICRmaDsKKworCWRpZSAiV2F0Y2htYW46IGNvbW1hbmQgcmV0dXJuZWQgbm8gb3V0cHV0LlxuIiAuCisJICAgICJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiIgaWYgJHJlc3BvbnNlIGVxICIiOworCWRpZSAiV2F0Y2htYW46IGNvbW1hbmQgcmV0dXJuZWQgaW52YWxpZCBvdXRwdXQ6ICRyZXNwb25zZVxuIiAuCisJICAgICJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiIgdW5sZXNzICRyZXNwb25zZSA9fiAvXlx7LzsKKworCW15ICRqc29uX3BrZzsKKwlldmFsIHsKKwkJcmVxdWlyZSBKU09OOjpYUzsKKwkJJGpzb25fcGtnID0gIkpTT046OlhTIjsKKwkJMTsKKwl9IG9yIGRvIHsKKwkJcmVxdWlyZSBKU09OOjpQUDsKKwkJJGpzb25fcGtnID0gIkpTT046OlBQIjsKKwl9OworCisJbXkgJG8gPSAkanNvbl9wa2ctPm5ldy0+dXRmOC0+ZGVjb2RlKCRyZXNwb25zZSk7CisKKwlpZiAoJHJldHJ5ID4gMCBhbmQgJG8tPntlcnJvcn0gYW5kICRvLT57ZXJyb3J9ID1+IG0vdW5hYmxlIHRvIHJlc29sdmUgcm9vdCAuKiBkaXJlY3RvcnkgKC4qKSBpcyBub3Qgd2F0Y2hlZC8pIHsKKwkJcHJpbnQgU1RERVJSICJBZGRpbmcgJyRnaXRfd29ya190cmVlJyB0byB3YXRjaG1hbidzIHdhdGNoIGxpc3QuXG4iOworCQkkcmV0cnktLTsKKwkJcXgvd2F0Y2htYW4gd2F0Y2ggIiRnaXRfd29ya190cmVlIi87CisJCWRpZSAiRmFpbGVkIHRvIG1ha2Ugd2F0Y2htYW4gd2F0Y2ggJyRnaXRfd29ya190cmVlJy5cbiIgLgorCQkgICAgIkZhbGxpbmcgYmFjayB0byBzY2FubmluZy4uLlxuIiBpZiAkPyAhPSAwOworCisJCSMgV2F0Y2htYW4gd2lsbCBhbHdheXMgcmV0dXJuIGFsbCBmaWxlcyBvbiB0aGUgZmlyc3QgcXVlcnkgc28KKwkJIyByZXR1cm4gdGhlIGZhc3QgImV2ZXJ5dGhpbmcgaXMgZGlydHkiIGZsYWcgdG8gZ2l0IGFuZCBkbyB0aGUKKwkJIyBXYXRjaG1hbiBxdWVyeSBqdXN0IHRvIGdldCBpdCBvdmVyIHdpdGggbm93IHNvIHdlIHdvbid0IHBheQorCQkjIHRoZSBjb3N0IGluIGdpdCB0byBsb29rIHVwIGVhY2ggaW5kaXZpZHVhbCBmaWxlLgorCisJCW9wZW4gKCRmaCwgIj4iLCAiLmdpdC93YXRjaG1hbi1vdXRwdXQub3V0Iik7CisJCXByaW50ICIvXDAiOworCQljbG9zZSAkZmg7CisKKwkJcHJpbnQgIi9cMCI7CisJCWV2YWwgeyBsYXVuY2hfd2F0Y2htYW4oKSB9OworCQlleGl0IDA7CisJfQorCisJZGllICJXYXRjaG1hbjogJG8tPntlcnJvcn0uXG4iIC4KKwkgICAgIkZhbGxpbmcgYmFjayB0byBzY2FubmluZy4uLlxuIiBpZiAkby0+e2Vycm9yfTsKKworCW9wZW4gKCRmaCwgIj4iLCAiLmdpdC93YXRjaG1hbi1vdXRwdXQub3V0Iik7CisJYmlubW9kZSAkZmgsICI6dXRmOCI7CisJcHJpbnQgJGZoIEB7JG8tPntmaWxlc319OworCWNsb3NlICRmaDsKKworCWJpbm1vZGUgU1RET1VULCAiOnV0ZjgiOworCWxvY2FsICQsID0gIlwwIjsKKwlwcmludCBAeyRvLT57ZmlsZXN9fTsKK30KZGlmZiAtLWdpdCBhL3QvdDc1MTkvZnNtb25pdG9yLXdhdGNobWFuLXYyIGIvdC90NzUxOS9mc21vbml0b3Itd2F0Y2htYW4tdjIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTRlZDBhYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MTkvZnNtb25pdG9yLXdhdGNobWFuLXYyCkBAIC0wLDAgKzEsMTczIEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBJUEM6Ok9wZW4yOworCisjIEFuIGV4YW1wbGUgaG9vayBzY3JpcHQgdG8gaW50ZWdyYXRlIFdhdGNobWFuCisjIChodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby93YXRjaG1hbi8pIHdpdGggZ2l0IHRvIHNwZWVkIHVwIGRldGVjdGluZworIyBuZXcgYW5kIG1vZGlmaWVkIGZpbGVzLgorIworIyBUaGUgaG9vayBpcyBwYXNzZWQgYSB2ZXJzaW9uIChjdXJyZW50bHkgMikgYW5kIGxhc3QgdXBkYXRlIHRva2VuCisjIGZvcm1hdHRlZCBhcyBhIHN0cmluZyBhbmQgb3V0cHV0cyB0byBzdGRvdXQgYSBuZXcgdXBkYXRlIHRva2VuIGFuZAorIyBhbGwgZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIHVwZGF0ZSB0b2tlbi4gUGF0aHMgbXVzdAorIyBiZSByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiB0aGUgd29ya2luZyB0cmVlIGFuZCBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgTlVMLgorIworIyBUbyBlbmFibGUgdGhpcyBob29rLCByZW5hbWUgdGhpcyBmaWxlIHRvICJxdWVyeS13YXRjaG1hbiIgYW5kIHNldAorIyAnZ2l0IGNvbmZpZyBjb3JlLmZzbW9uaXRvciAuZ2l0L2hvb2tzL3F1ZXJ5LXdhdGNobWFuJworIworbXkgKCR2ZXJzaW9uLCAkbGFzdF91cGRhdGVfdG9rZW4pID0gQEFSR1Y7CisKKyMgVW5jb21tZW50IGZvciBkZWJ1Z2dpbmcKKyMgcHJpbnQgU1RERVJSICIkMCAkdmVyc2lvbiAkbGFzdF91cGRhdGVfdG9rZW5cbiI7CisKKyMgQ2hlY2sgdGhlIGhvb2sgaW50ZXJmYWNlIHZlcnNpb24KK2lmICgkdmVyc2lvbiBuZSAyKSB7CisJZGllICJVbnN1cHBvcnRlZCBxdWVyeS1mc21vbml0b3IgaG9vayB2ZXJzaW9uICckdmVyc2lvbicuXG4iIC4KKwkgICAgIkZhbGxpbmcgYmFjayB0byBzY2FubmluZy4uLlxuIjsKK30KKworbXkgJGdpdF93b3JrX3RyZWUgPSBnZXRfd29ya2luZ19kaXIoKTsKKworbXkgJHJldHJ5ID0gMTsKKworbXkgJGpzb25fcGtnOworZXZhbCB7CisJcmVxdWlyZSBKU09OOjpYUzsKKwkkanNvbl9wa2cgPSAiSlNPTjo6WFMiOworCTE7Cit9IG9yIGRvIHsKKwlyZXF1aXJlIEpTT046OlBQOworCSRqc29uX3BrZyA9ICJKU09OOjpQUCI7Cit9OworCitsYXVuY2hfd2F0Y2htYW4oKTsKKworc3ViIGxhdW5jaF93YXRjaG1hbiB7CisJbXkgJG8gPSB3YXRjaG1hbl9xdWVyeSgpOworCWlmIChpc193b3JrX3RyZWVfd2F0Y2hlZCgkbykpIHsKKwkJb3V0cHV0X3Jlc3VsdCgkby0+e2Nsb2NrfSwgQHskby0+e2ZpbGVzfX0pOworCX0KK30KKworc3ViIG91dHB1dF9yZXN1bHQgeworCW15ICgkY2xvY2tpZCwgQGZpbGVzKSA9IEBfOworCisJIyBVbmNvbW1lbnQgZm9yIGRlYnVnZ2luZyB3YXRjaG1hbiBvdXRwdXQKKwkjIG9wZW4gKG15ICRmaCwgIj4iLCAiLmdpdC93YXRjaG1hbi1vdXRwdXQub3V0Iik7CisJIyBiaW5tb2RlICRmaCwgIjp1dGY4IjsKKwkjIHByaW50ICRmaCAiJGNsb2NraWRcbkBmaWxlc1xuIjsKKwkjIGNsb3NlICRmaDsKKworCWJpbm1vZGUgU1RET1VULCAiOnV0ZjgiOworCXByaW50ICRjbG9ja2lkOworCXByaW50ICJcMCI7CisJbG9jYWwgJCwgPSAiXDAiOworCXByaW50IEBmaWxlczsKK30KKworc3ViIHdhdGNobWFuX2Nsb2NrIHsKKwlteSAkcmVzcG9uc2UgPSBxeC93YXRjaG1hbiBjbG9jayAiJGdpdF93b3JrX3RyZWUiLzsKKwlkaWUgIkZhaWxlZCB0byBnZXQgY2xvY2sgaWQgb24gJyRnaXRfd29ya190cmVlJy5cbiIgLgorCQkiRmFsbGluZyBiYWNrIHRvIHNjYW5uaW5nLi4uXG4iIGlmICQ/ICE9IDA7CisKKwlyZXR1cm4gJGpzb25fcGtnLT5uZXctPnV0ZjgtPmRlY29kZSgkcmVzcG9uc2UpOworfQorCitzdWIgd2F0Y2htYW5fcXVlcnkgeworCW15ICRwaWQgPSBvcGVuMihcKkNITERfT1VULCBcKkNITERfSU4sICd3YXRjaG1hbiAtaiAtLW5vLXByZXR0eScpCisJb3IgZGllICJvcGVuMigpIGZhaWxlZDogJCFcbiIgLgorCSJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiI7CisKKwkjIEluIHRoZSBxdWVyeSBleHByZXNzaW9uIGJlbG93IHdlJ3JlIGFza2luZyBmb3IgbmFtZXMgb2YgZmlsZXMgdGhhdAorCSMgY2hhbmdlZCBzaW5jZSAkbGFzdF91cGRhdGVfdG9rZW4gYnV0IG5vdCBmcm9tIHRoZSAuZ2l0IGZvbGRlci4KKwkjCisJIyBUbyBhY2NvbXBsaXNoIHRoaXMsIHdlJ3JlIHVzaW5nIHRoZSAic2luY2UiIGdlbmVyYXRvciB0byB1c2UgdGhlCisJIyByZWNlbmN5IGluZGV4IHRvIHNlbGVjdCBjYW5kaWRhdGUgbm9kZXMgYW5kICJmaWVsZHMiIHRvIGxpbWl0IHRoZQorCSMgb3V0cHV0IHRvIGZpbGUgbmFtZXMgb25seS4gVGhlbiB3ZSdyZSB1c2luZyB0aGUgImV4cHJlc3Npb24iIHRlcm0gdG8KKwkjIGZ1cnRoZXIgY29uc3RyYWluIHRoZSByZXN1bHRzLgorCWlmIChzdWJzdHIoJGxhc3RfdXBkYXRlX3Rva2VuLCAwLCAxKSBlcSAiYyIpIHsKKwkJJGxhc3RfdXBkYXRlX3Rva2VuID0gIlwiJGxhc3RfdXBkYXRlX3Rva2VuXCIiOworCX0KKwlteSAkcXVlcnkgPSA8PCIJRU5EIjsKKwkJWyJxdWVyeSIsICIkZ2l0X3dvcmtfdHJlZSIsIHsKKwkJCSJzaW5jZSI6ICRsYXN0X3VwZGF0ZV90b2tlbiwKKwkJCSJmaWVsZHMiOiBbIm5hbWUiXSwKKwkJCSJleHByZXNzaW9uIjogWyJub3QiLCBbImRpcm5hbWUiLCAiLmdpdCJdXQorCQl9XQorCUVORAorCisJIyBVbmNvbW1lbnQgZm9yIGRlYnVnZ2luZyB0aGUgd2F0Y2htYW4gcXVlcnkKKwkjIG9wZW4gKG15ICRmaCwgIj4iLCAiLmdpdC93YXRjaG1hbi1xdWVyeS5qc29uIik7CisJIyBwcmludCAkZmggJHF1ZXJ5OworCSMgY2xvc2UgJGZoOworCisJcHJpbnQgQ0hMRF9JTiAkcXVlcnk7CisJY2xvc2UgQ0hMRF9JTjsKKwlteSAkcmVzcG9uc2UgPSBkbyB7bG9jYWwgJC87IDxDSExEX09VVD59OworCisJIyBVbmNvbW1lbnQgZm9yIGRlYnVnZ2luZyB0aGUgd2F0Y2ggcmVzcG9uc2UKKwkjIG9wZW4gKCRmaCwgIj4iLCAiLmdpdC93YXRjaG1hbi1yZXNwb25zZS5qc29uIik7CisJIyBwcmludCAkZmggJHJlc3BvbnNlOworCSMgY2xvc2UgJGZoOworCisJZGllICJXYXRjaG1hbjogY29tbWFuZCByZXR1cm5lZCBubyBvdXRwdXQuXG4iIC4KKwkiRmFsbGluZyBiYWNrIHRvIHNjYW5uaW5nLi4uXG4iIGlmICRyZXNwb25zZSBlcSAiIjsKKwlkaWUgIldhdGNobWFuOiBjb21tYW5kIHJldHVybmVkIGludmFsaWQgb3V0cHV0OiAkcmVzcG9uc2VcbiIgLgorCSJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiIgdW5sZXNzICRyZXNwb25zZSA9fiAvXlx7LzsKKworCXJldHVybiAkanNvbl9wa2ctPm5ldy0+dXRmOC0+ZGVjb2RlKCRyZXNwb25zZSk7Cit9CisKK3N1YiBpc193b3JrX3RyZWVfd2F0Y2hlZCB7CisJbXkgKCRvdXRwdXQpID0gQF87CisJbXkgJGVycm9yID0gJG91dHB1dC0+e2Vycm9yfTsKKwlpZiAoJHJldHJ5ID4gMCBhbmQgJGVycm9yIGFuZCAkZXJyb3IgPX4gbS91bmFibGUgdG8gcmVzb2x2ZSByb290IC4qIGRpcmVjdG9yeSAoLiopIGlzIG5vdCB3YXRjaGVkLykgeworCQkkcmV0cnktLTsKKwkJbXkgJHJlc3BvbnNlID0gcXgvd2F0Y2htYW4gd2F0Y2ggIiRnaXRfd29ya190cmVlIi87CisJCWRpZSAiRmFpbGVkIHRvIG1ha2Ugd2F0Y2htYW4gd2F0Y2ggJyRnaXRfd29ya190cmVlJy5cbiIgLgorCQkgICAgIkZhbGxpbmcgYmFjayB0byBzY2FubmluZy4uLlxuIiBpZiAkPyAhPSAwOworCQkkb3V0cHV0ID0gJGpzb25fcGtnLT5uZXctPnV0ZjgtPmRlY29kZSgkcmVzcG9uc2UpOworCQkkZXJyb3IgPSAkb3V0cHV0LT57ZXJyb3J9OworCQlkaWUgIldhdGNobWFuOiAkZXJyb3IuXG4iIC4KKwkJIkZhbGxpbmcgYmFjayB0byBzY2FubmluZy4uLlxuIiBpZiAkZXJyb3I7CisKKwkJIyBVbmNvbW1lbnQgZm9yIGRlYnVnZ2luZyB3YXRjaG1hbiBvdXRwdXQKKwkJIyBvcGVuIChteSAkZmgsICI+IiwgIi5naXQvd2F0Y2htYW4tb3V0cHV0Lm91dCIpOworCQkjIGNsb3NlICRmaDsKKworCQkjIFdhdGNobWFuIHdpbGwgYWx3YXlzIHJldHVybiBhbGwgZmlsZXMgb24gdGhlIGZpcnN0IHF1ZXJ5IHNvCisJCSMgcmV0dXJuIHRoZSBmYXN0ICJldmVyeXRoaW5nIGlzIGRpcnR5IiBmbGFnIHRvIGdpdCBhbmQgZG8gdGhlCisJCSMgV2F0Y2htYW4gcXVlcnkganVzdCB0byBnZXQgaXQgb3ZlciB3aXRoIG5vdyBzbyB3ZSB3b24ndCBwYXkKKwkJIyB0aGUgY29zdCBpbiBnaXQgdG8gbG9vayB1cCBlYWNoIGluZGl2aWR1YWwgZmlsZS4KKwkJbXkgJG8gPSB3YXRjaG1hbl9jbG9jaygpOworCQkkZXJyb3IgPSAkb3V0cHV0LT57ZXJyb3J9OworCisJCWRpZSAiV2F0Y2htYW46ICRlcnJvci5cbiIgLgorCQkiRmFsbGluZyBiYWNrIHRvIHNjYW5uaW5nLi4uXG4iIGlmICRlcnJvcjsKKworCQlvdXRwdXRfcmVzdWx0KCRvLT57Y2xvY2t9LCAoIi8iKSk7CisJCSRsYXN0X3VwZGF0ZV90b2tlbiA9ICRvLT57Y2xvY2t9OworCisJCWV2YWwgeyBsYXVuY2hfd2F0Y2htYW4oKSB9OworCQlyZXR1cm4gMDsKKwl9CisKKwlkaWUgIldhdGNobWFuOiAkZXJyb3IuXG4iIC4KKwkiRmFsbGluZyBiYWNrIHRvIHNjYW5uaW5nLi4uXG4iIGlmICRlcnJvcjsKKworCXJldHVybiAxOworfQorCitzdWIgZ2V0X3dvcmtpbmdfZGlyIHsKKwlteSAkd29ya2luZ19kaXI7CisJaWYgKCReTyA9fiAnbXN5cycgfHwgJF5PID1+ICdjeWd3aW4nKSB7CisJCSR3b3JraW5nX2RpciA9IFdpbjMyOjpHZXRDd2QoKTsKKwkJJHdvcmtpbmdfZGlyID1+IHRyL1xcL1wvLzsKKwl9IGVsc2UgeworCQlyZXF1aXJlIEN3ZDsKKwkJJHdvcmtpbmdfZGlyID0gQ3dkOjpjd2QoKTsKKwl9CisKKwlyZXR1cm4gJHdvcmtpbmdfZGlyOworfQpkaWZmIC0tZ2l0IGEvdC90NzUyMC1pZ25vcmVkLWhvb2std2FybmluZy5zaCBiL3QvdDc1MjAtaWdub3JlZC1ob29rLXdhcm5pbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjM0ZmI3ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MjAtaWdub3JlZC1ob29rLXdhcm5pbmcuc2gKQEAgLTAsMCArMSw0MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2lnbm9yZWQgaG9vayB3YXJuaW5nJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJaG9va2Rpcj0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvaG9va3MiICYmCisJaG9vaz0iJGhvb2tkaXIvcHJlLWNvbW1pdCIgJiYKKwlta2RpciAtcCAiJGhvb2tkaXIiICYmCisJd3JpdGVfc2NyaXB0ICIkaG9vayIgPDwtXEVPRgorCWV4aXQgMAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB3YXJuaW5nIGlmIGhvb2sgaXMgbm90IGlnbm9yZWQnICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIm1vcmUiIDI+bWVzc2FnZSAmJgorCXRlc3RfaTE4bmdyZXAgISAtZSAiaG9vayB3YXMgaWdub3JlZCIgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnd2FybmluZyBpZiBob29rIGlzIGlnbm9yZWQnICcKKwljaG1vZCAteCAiJGhvb2siICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJldmVuIG1vcmUiIDI+bWVzc2FnZSAmJgorCXRlc3RfaTE4bmdyZXAgLWUgImhvb2sgd2FzIGlnbm9yZWQiIG1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ25vIHdhcm5pbmcgaWYgYWR2aWNlLmlnbm9yZWRIb29rIHNldCB0byBmYWxzZScgJworCXRlc3RfY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZSAmJgorCWNobW9kIC14ICIkaG9vayIgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImV2ZW4gbW9yZSIgMj5tZXNzYWdlICYmCisJdGVzdF9pMThuZ3JlcCAhIC1lICJob29rIHdhcyBpZ25vcmVkIiBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHdhcm5pbmcgaWYgdW5zZXQgYWR2aWNlLmlnbm9yZWRIb29rIGFuZCBob29rIHJlbW92ZWQnICcKKwlybSAtZiAiJGhvb2siICYmCisJdGVzdF91bmNvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImV2ZW4gbW9yZSIgMj5tZXNzYWdlICYmCisJdGVzdF9pMThuZ3JlcCAhIC1lICJob29rIHdhcyBpZ25vcmVkIiBtZXNzYWdlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUyMS1pZ25vcmVkLW1vZGUuc2ggYi90L3Q3NTIxLWlnbm9yZWQtbW9kZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MTc5MDk0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzUyMS1pZ25vcmVkLW1vZGUuc2gKQEAgLTAsMCArMSwyMzMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3RhdHVzIGlnbm9yZWQgbW9kZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBpbml0aWFsIGNvbW1pdCBhbmQgaWdub3JlIGZpbGUnICcKKwljYXQgPi5naXRpZ25vcmUgPDwtXEVPRiAmJgorCSouaWduCisJaWdub3JlZF9kaXIvCisJISoudW5pZ25vcmUKKwlFT0YKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVmVyaWZ5IGJlaGF2aW9yIG9mIHN0YXR1cyBvbiBkaXJlY3RvcmllcyB3aXRoIGlnbm9yZWQgZmlsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjbGVhbiAtZmR4IiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk/IGV4cGVjdAorCT8gb3V0cHV0CisJISBkaXIvaWdub3JlZC9pZ25vcmVkXzEuaWduCisJISBkaXIvaWdub3JlZC9pZ25vcmVkXzIuaWduCisJISBpZ25vcmVkL2lnbm9yZWRfMS5pZ24KKwkhIGlnbm9yZWQvaWdub3JlZF8yLmlnbgorCUVPRgorCisJbWtkaXIgLXAgaWdub3JlZCBkaXIvaWdub3JlZCAmJgorCXRvdWNoIGlnbm9yZWQvaWdub3JlZF8xLmlnbiBpZ25vcmVkL2lnbm9yZWRfMi5pZ24gXAorCQlkaXIvaWdub3JlZC9pZ25vcmVkXzEuaWduIGRpci9pZ25vcmVkL2lnbm9yZWRfMi5pZ24gJiYKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1pZ25vcmVkPW1hdGNoaW5nIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVmVyaWZ5IHN0YXR1cyBiZWhhdmlvciBvbiBkaXJlY3Rvcnkgd2l0aCB0cmFja2VkICYgaWdub3JlZCBmaWxlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNsZWFuIC1mZHggJiYgZ2l0IHJlc2V0IEhFQUR+MSAtLWhhcmQiICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCT8gZXhwZWN0CisJPyBvdXRwdXQKKwkhIGRpci90cmFja2VkX2lnbm9yZWQvaWdub3JlZF8xLmlnbgorCSEgZGlyL3RyYWNrZWRfaWdub3JlZC9pZ25vcmVkXzIuaWduCisJISB0cmFja2VkX2lnbm9yZWQvaWdub3JlZF8xLmlnbgorCSEgdHJhY2tlZF9pZ25vcmVkL2lnbm9yZWRfMi5pZ24KKwlFT0YKKworCW1rZGlyIC1wIHRyYWNrZWRfaWdub3JlZCBkaXIvdHJhY2tlZF9pZ25vcmVkICYmCisJdG91Y2ggdHJhY2tlZF9pZ25vcmVkL3RyYWNrZWRfMSB0cmFja2VkX2lnbm9yZWQvdHJhY2tlZF8yIFwKKwkJdHJhY2tlZF9pZ25vcmVkL2lnbm9yZWRfMS5pZ24gdHJhY2tlZF9pZ25vcmVkL2lnbm9yZWRfMi5pZ24gXAorCQlkaXIvdHJhY2tlZF9pZ25vcmVkL3RyYWNrZWRfMSBkaXIvdHJhY2tlZF9pZ25vcmVkL3RyYWNrZWRfMiBcCisJCWRpci90cmFja2VkX2lnbm9yZWQvaWdub3JlZF8xLmlnbiBkaXIvdHJhY2tlZF9pZ25vcmVkL2lnbm9yZWRfMi5pZ24gJiYKKworCWdpdCBhZGQgdHJhY2tlZF9pZ25vcmVkL3RyYWNrZWRfMSB0cmFja2VkX2lnbm9yZWQvdHJhY2tlZF8yIFwKKwkJZGlyL3RyYWNrZWRfaWdub3JlZC90cmFja2VkXzEgZGlyL3RyYWNrZWRfaWdub3JlZC90cmFja2VkXzIgJiYKKwlnaXQgY29tbWl0IC1tICJjb21taXQgdHJhY2tlZCBmaWxlcyIgJiYKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1pZ25vcmVkPW1hdGNoaW5nIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVmVyaWZ5IHN0YXR1cyBiZWhhdmlvciBvbiBkaXJlY3Rvcnkgd2l0aCB1bnRyYWNrZWQgYW5kIGlnbm9yZWQgZmlsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjbGVhbiAtZmR4IiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk/IGRpci91bnRyYWNrZWRfaWdub3JlZC91bnRyYWNrZWRfMQorCT8gZGlyL3VudHJhY2tlZF9pZ25vcmVkL3VudHJhY2tlZF8yCisJPyBleHBlY3QKKwk/IG91dHB1dAorCT8gdW50cmFja2VkX2lnbm9yZWQvdW50cmFja2VkXzEKKwk/IHVudHJhY2tlZF9pZ25vcmVkL3VudHJhY2tlZF8yCisJISBkaXIvdW50cmFja2VkX2lnbm9yZWQvaWdub3JlZF8xLmlnbgorCSEgZGlyL3VudHJhY2tlZF9pZ25vcmVkL2lnbm9yZWRfMi5pZ24KKwkhIHVudHJhY2tlZF9pZ25vcmVkL2lnbm9yZWRfMS5pZ24KKwkhIHVudHJhY2tlZF9pZ25vcmVkL2lnbm9yZWRfMi5pZ24KKwlFT0YKKworCW1rZGlyIC1wIHVudHJhY2tlZF9pZ25vcmVkIGRpci91bnRyYWNrZWRfaWdub3JlZCAmJgorCXRvdWNoIHVudHJhY2tlZF9pZ25vcmVkL3VudHJhY2tlZF8xIHVudHJhY2tlZF9pZ25vcmVkL3VudHJhY2tlZF8yIFwKKwkJdW50cmFja2VkX2lnbm9yZWQvaWdub3JlZF8xLmlnbiB1bnRyYWNrZWRfaWdub3JlZC9pZ25vcmVkXzIuaWduIFwKKwkJZGlyL3VudHJhY2tlZF9pZ25vcmVkL3VudHJhY2tlZF8xIGRpci91bnRyYWNrZWRfaWdub3JlZC91bnRyYWNrZWRfMiBcCisJCWRpci91bnRyYWNrZWRfaWdub3JlZC9pZ25vcmVkXzEuaWduIGRpci91bnRyYWNrZWRfaWdub3JlZC9pZ25vcmVkXzIuaWduICYmCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0taWdub3JlZD1tYXRjaGluZyAtLXVudHJhY2tlZC1maWxlcz1hbGwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSBzdGF0dXMgbWF0Y2hpbmcgaWdub3JlZCBmaWxlcyBvbiBpZ25vcmVkIGRpcmVjdG9yeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNsZWFuIC1mZHgiICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCT8gZXhwZWN0CisJPyBvdXRwdXQKKwkhIGlnbm9yZWRfZGlyLworCUVPRgorCisJbWtkaXIgaWdub3JlZF9kaXIgJiYKKwl0b3VjaCBpZ25vcmVkX2Rpci9pZ25vcmVkXzEgaWdub3JlZF9kaXIvaWdub3JlZF8yIFwKKwkJaWdub3JlZF9kaXIvaWdub3JlZF8xLmlnbiBpZ25vcmVkX2Rpci9pZ25vcmVkXzIuaWduICYmCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0taWdub3JlZD1tYXRjaGluZyAtLXVudHJhY2tlZC1maWxlcz1hbGwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSBzdGF0dXMgYmVoYXZpb3Igb24gaWdub3JlZCBkaXJlY3RvcnkgY29udGFpbmluZyB0cmFja2VkIGZpbGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjbGVhbiAtZmR4ICYmIGdpdCByZXNldCBIRUFEfjEgLS1oYXJkIiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk/IGV4cGVjdAorCT8gb3V0cHV0CisJISBpZ25vcmVkX2Rpci9pZ25vcmVkXzEKKwkhIGlnbm9yZWRfZGlyL2lnbm9yZWRfMS5pZ24KKwkhIGlnbm9yZWRfZGlyL2lnbm9yZWRfMgorCSEgaWdub3JlZF9kaXIvaWdub3JlZF8yLmlnbgorCUVPRgorCisJbWtkaXIgaWdub3JlZF9kaXIgJiYKKwl0b3VjaCBpZ25vcmVkX2Rpci9pZ25vcmVkXzEgaWdub3JlZF9kaXIvaWdub3JlZF8yIFwKKwkJaWdub3JlZF9kaXIvaWdub3JlZF8xLmlnbiBpZ25vcmVkX2Rpci9pZ25vcmVkXzIuaWduIFwKKwkJaWdub3JlZF9kaXIvdHJhY2tlZCAmJgorCWdpdCBhZGQgLWYgaWdub3JlZF9kaXIvdHJhY2tlZCAmJgorCWdpdCBjb21taXQgLW0gIkZvcmNlIGFkZCBmaWxlIGluIGlnbm9yZWQgZGlyZWN0b3J5IiAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1pZ25vcmVkPW1hdGNoaW5nIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVmVyaWZ5IG1hdGNoaW5nIGlnbm9yZWQgZmlsZXMgd2l0aCAtLXVudHJhY2tlZC1maWxlcz1ub3JtYWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjbGVhbiAtZmR4IiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk/IGV4cGVjdAorCT8gb3V0cHV0CisJPyB1bnRyYWNrZWRfZGlyLworCSEgaWdub3JlZF9kaXIvCisJISBpZ25vcmVkX2ZpbGVzL2lnbm9yZWRfMS5pZ24KKwkhIGlnbm9yZWRfZmlsZXMvaWdub3JlZF8yLmlnbgorCUVPRgorCisJbWtkaXIgaWdub3JlZF9kaXIgaWdub3JlZF9maWxlcyB1bnRyYWNrZWRfZGlyICYmCisJdG91Y2ggaWdub3JlZF9kaXIvaWdub3JlZF8xIGlnbm9yZWRfZGlyL2lnbm9yZWRfMiBcCisJCWlnbm9yZWRfZmlsZXMvaWdub3JlZF8xLmlnbiBpZ25vcmVkX2ZpbGVzL2lnbm9yZWRfMi5pZ24gXAorCQl1bnRyYWNrZWRfZGlyL3VudHJhY2tlZCAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1pZ25vcmVkPW1hdGNoaW5nIC0tdW50cmFja2VkLWZpbGVzPW5vcm1hbCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVmVyaWZ5IG1hdGNoaW5nIGlnbm9yZWQgZmlsZXMgd2l0aCAtLXVudHJhY2tlZC1maWxlcz1ub3JtYWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjbGVhbiAtZmR4IiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk/IGV4cGVjdAorCT8gb3V0cHV0CisJPyB1bnRyYWNrZWRfZGlyLworCSEgaWdub3JlZF9kaXIvCisJISBpZ25vcmVkX2ZpbGVzL2lnbm9yZWRfMS5pZ24KKwkhIGlnbm9yZWRfZmlsZXMvaWdub3JlZF8yLmlnbgorCUVPRgorCisJbWtkaXIgaWdub3JlZF9kaXIgaWdub3JlZF9maWxlcyB1bnRyYWNrZWRfZGlyICYmCisJdG91Y2ggaWdub3JlZF9kaXIvaWdub3JlZF8xIGlnbm9yZWRfZGlyL2lnbm9yZWRfMiBcCisJCWlnbm9yZWRfZmlsZXMvaWdub3JlZF8xLmlnbiBpZ25vcmVkX2ZpbGVzL2lnbm9yZWRfMi5pZ24gXAorCQl1bnRyYWNrZWRfZGlyL3VudHJhY2tlZCAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1pZ25vcmVkPW1hdGNoaW5nIC0tdW50cmFja2VkLWZpbGVzPW5vcm1hbCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVmVyaWZ5IHN0YXR1cyBiZWhhdmlvciBvbiBpZ25vcmVkIGRpcmVjdG9yeSBjb250YWluaW5nIHRyYWNrZWQgZmlsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNsZWFuIC1mZHggJiYgZ2l0IHJlc2V0IEhFQUR+MSAtLWhhcmQiICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCT8gZXhwZWN0CisJPyBvdXRwdXQKKwkhIGlnbm9yZWRfZGlyL2lnbm9yZWRfMQorCSEgaWdub3JlZF9kaXIvaWdub3JlZF8xLmlnbgorCSEgaWdub3JlZF9kaXIvaWdub3JlZF8yCisJISBpZ25vcmVkX2Rpci9pZ25vcmVkXzIuaWduCisJRU9GCisKKwlta2RpciBpZ25vcmVkX2RpciAmJgorCXRvdWNoIGlnbm9yZWRfZGlyL2lnbm9yZWRfMSBpZ25vcmVkX2Rpci9pZ25vcmVkXzIgXAorCQlpZ25vcmVkX2Rpci9pZ25vcmVkXzEuaWduIGlnbm9yZWRfZGlyL2lnbm9yZWRfMi5pZ24gXAorCQlpZ25vcmVkX2Rpci90cmFja2VkICYmCisJZ2l0IGFkZCAtZiBpZ25vcmVkX2Rpci90cmFja2VkICYmCisJZ2l0IGNvbW1pdCAtbSAiRm9yY2UgYWRkIGZpbGUgaW4gaWdub3JlZCBkaXJlY3RvcnkiICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWlnbm9yZWQ9bWF0Y2hpbmcgLS11bnRyYWNrZWQtZmlsZXM9bm9ybWFsID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgYmVoYXZpb3Igb2Ygc3RhdHVzIHdpdGggLS1pZ25vcmVkPW5vJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2xlYW4gLWZkeCIgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJPyBleHBlY3QKKwk/IG91dHB1dAorCUVPRgorCisJbWtkaXIgLXAgaWdub3JlZCBkaXIvaWdub3JlZCAmJgorCXRvdWNoIGlnbm9yZWQvaWdub3JlZF8xLmlnbiBpZ25vcmVkL2lnbm9yZWRfMi5pZ24gXAorCQlkaXIvaWdub3JlZC9pZ25vcmVkXzEuaWduIGRpci9pZ25vcmVkL2lnbm9yZWRfMi5pZ24gJiYKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1pZ25vcmVkPW5vIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVmVyaWZ5IGJlaGF2aW9yIG9mIHN0YXR1cyB3aXRoIC0taWdub3JlZD10cmFkaXRpb25hbCBhbmQgLS11bnRyYWNrZWQtZmlsZXM9YWxsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2xlYW4gLWZkeCIgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJPyBleHBlY3QKKwk/IG91dHB1dAorCSEgZGlyL2lnbm9yZWQvaWdub3JlZF8xLmlnbgorCSEgZGlyL2lnbm9yZWQvaWdub3JlZF8yLmlnbgorCSEgaWdub3JlZC9pZ25vcmVkXzEuaWduCisJISBpZ25vcmVkL2lnbm9yZWRfMi5pZ24KKwlFT0YKKworCW1rZGlyIC1wIGlnbm9yZWQgZGlyL2lnbm9yZWQgJiYKKwl0b3VjaCBpZ25vcmVkL2lnbm9yZWRfMS5pZ24gaWdub3JlZC9pZ25vcmVkXzIuaWduIFwKKwkJZGlyL2lnbm9yZWQvaWdub3JlZF8xLmlnbiBkaXIvaWdub3JlZC9pZ25vcmVkXzIuaWduICYmCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0taWdub3JlZD10cmFkaXRpb25hbCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSBiZWhhdmlvciBvZiBzdGF0dXMgd2l0aCAtLWlnbm9yZWQ9dHJhZGl0aW9uYWwgYW5kIC0tdW50cmFja2VkLWZpbGVzPW5vcm1hbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNsZWFuIC1mZHgiICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCT8gZXhwZWN0CisJPyBvdXRwdXQKKwkhIGRpci8KKwkhIGlnbm9yZWQvCisJRU9GCisKKwlta2RpciAtcCBpZ25vcmVkIGRpci9pZ25vcmVkICYmCisJdG91Y2ggaWdub3JlZC9pZ25vcmVkXzEuaWduIGlnbm9yZWQvaWdub3JlZF8yLmlnbiBcCisJCWRpci9pZ25vcmVkL2lnbm9yZWRfMS5pZ24gZGlyL2lnbm9yZWQvaWdub3JlZF8yLmlnbiAmJgorCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWlnbm9yZWQ9dHJhZGl0aW9uYWwgLS11bnRyYWNrZWQtZmlsZXM9bm9ybWFsID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MjUtc3RhdHVzLXJlbmFtZS5zaCBiL3QvdDc1MjUtc3RhdHVzLXJlbmFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNjI3MzZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUyNS1zdGF0dXMtcmVuYW1lLnNoCkBAIC0wLDAgKzEsMTEzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN0YXR1cyByZW5hbWUgZGV0ZWN0aW9uIG9wdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gMSA+b3JpZ2luYWwgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIkFkZGluZyBvcmlnaW5hbCBmaWxlLiIgJiYKKwltdiBvcmlnaW5hbCByZW5hbWVkICYmCisJZWNobyAyID4+IHJlbmFtZWQgJiYKKwlnaXQgYWRkIC4gJiYKKwljYXQgPi5naXRpZ25vcmUgPDwtXEVPRgorCS5naXRpZ25vcmUKKwlleHBlY3QqCisJYWN0dWFsKgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgbm8tb3B0aW9ucycgJworCWdpdCBzdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgInJlbmFtZWQ6IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC0tbm8tcmVuYW1lcycgJworCWdpdCBzdGF0dXMgLS1uby1yZW5hbWVzID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJkZWxldGVkOiIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAibmV3IGZpbGU6IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzLnJlbmFtZXMgaW5oZXJpdHMgZnJvbSBkaWZmLnJlbmFtZXMgZmFsc2UnICcKKwlnaXQgLWMgZGlmZi5yZW5hbWVzPWZhbHNlIHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiZGVsZXRlZDoiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIm5ldyBmaWxlOiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cy5yZW5hbWVzIGluaGVyaXRzIGZyb20gZGlmZi5yZW5hbWVzIHRydWUnICcKKwlnaXQgLWMgZGlmZi5yZW5hbWVzPXRydWUgc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJyZW5hbWVkOiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cy5yZW5hbWVzIG92ZXJyaWRlcyBkaWZmLnJlbmFtZXMgZmFsc2UnICcKKwlnaXQgLWMgZGlmZi5yZW5hbWVzPXRydWUgLWMgc3RhdHVzLnJlbmFtZXM9ZmFsc2Ugc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJkZWxldGVkOiIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAibmV3IGZpbGU6IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzLnJlbmFtZXMgb3ZlcnJpZGVzIGZyb20gZGlmZi5yZW5hbWVzIHRydWUnICcKKwlnaXQgLWMgZGlmZi5yZW5hbWVzPWZhbHNlIC1jIHN0YXR1cy5yZW5hbWVzPXRydWUgc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJyZW5hbWVkOiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzdGF0dXMucmVuYW1lcz1mYWxzZScgJworCWdpdCAtYyBzdGF0dXMucmVuYW1lcz1mYWxzZSBzdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImRlbGV0ZWQ6IiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJuZXcgZmlsZToiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc3RhdHVzLnJlbmFtZXM9dHJ1ZScgJworCWdpdCAtYyBzdGF0dXMucmVuYW1lcz10cnVlIHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAicmVuYW1lZDoiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgaG9ub3JzIHN0YXR1cy5yZW5hbWVzPWZhbHNlJyAnCisJZ2l0IC1jIHN0YXR1cy5yZW5hbWVzPWZhbHNlIGNvbW1pdCAtLWRyeS1ydW4gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImRlbGV0ZWQ6IiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJuZXcgZmlsZToiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgaG9ub3JzIHN0YXR1cy5yZW5hbWVzPXRydWUnICcKKwlnaXQgLWMgc3RhdHVzLnJlbmFtZXM9dHJ1ZSBjb21taXQgLS1kcnktcnVuID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJyZW5hbWVkOiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBjb25maWcgb3ZlcnJpZGRlbicgJworCWdpdCAtYyBzdGF0dXMucmVuYW1lcz10cnVlIHN0YXR1cyAtLW5vLXJlbmFtZXMgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImRlbGV0ZWQ6IiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJuZXcgZmlsZToiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2NvcmU9MTAwJScgJworCWdpdCBzdGF0dXMgLU09MTAwJSA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiZGVsZXRlZDoiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIm5ldyBmaWxlOiIgYWN0dWFsICYmCisKKwlnaXQgc3RhdHVzIC0tZmluZC1yZW5hbWVzPTEwMCUgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImRlbGV0ZWQ6IiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJuZXcgZmlsZToiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2NvcmU9MDElJyAnCisJZ2l0IHN0YXR1cyAtTT0wMSUgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgInJlbmFtZWQ6IiBhY3R1YWwgJiYKKworCWdpdCBzdGF0dXMgLS1maW5kLXJlbmFtZXM9MDElID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJyZW5hbWVkOiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcGllcyBub3Qgb3ZlcnJpZGRlbiBieSBmaW5kLXJlbmFtZXMnICcKKwljcCByZW5hbWVkIGNvcHkgJiYKKwlnaXQgYWRkIGNvcHkgJiYKKworCWdpdCAtYyBzdGF0dXMucmVuYW1lcz1jb3BpZXMgc3RhdHVzIC1NPTAxJSA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiY29waWVkOiIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAicmVuYW1lZDoiIGFjdHVhbCAmJgorCisJZ2l0IC1jIHN0YXR1cy5yZW5hbWVzPWNvcGllcyBzdGF0dXMgLS1maW5kLXJlbmFtZXM9MDElID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJjb3BpZWQ6IiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJyZW5hbWVkOiIgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUyNi1jb21taXQtcGF0aHNwZWMtZmlsZS5zaCBiL3QvdDc1MjYtY29tbWl0LXBhdGhzcGVjLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWZiZTQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MjYtY29tbWl0LXBhdGhzcGVjLWZpbGUuc2gKQEAgLTAsMCArMSwxNjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjb21taXQgLS1wYXRoc3BlYy1mcm9tLWZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3RpY2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgZmlsZTAgJiYKKwlnaXQgdGFnIGNoZWNrcG9pbnQgJiYKKworCWVjaG8gQSA+ZmlsZUEudCAmJgorCWVjaG8gQiA+ZmlsZUIudCAmJgorCWVjaG8gQyA+ZmlsZUMudCAmJgorCWVjaG8gRCA+ZmlsZUQudCAmJgorCWdpdCBhZGQgZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudAorJworCityZXN0b3JlX2NoZWNrcG9pbnQgKCkgeworCWdpdCByZXNldCAtLXNvZnQgY2hlY2twb2ludAorfQorCit2ZXJpZnlfZXhwZWN0ICgpIHsKKwlnaXQgZGlmZi10cmVlIC0tbm8tY29tbWl0LWlkIC0tbmFtZS1zdGF0dXMgLXIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBmcm9tIHN0ZGluJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwllY2hvIGZpbGVBLnQgfCBnaXQgY29tbWl0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLW0gIkNvbW1pdCIgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBCWZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcGF0aHNwZWMtZnJvbS1maWxlIGZyb20gZmlsZScgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJZWNobyBmaWxlQS50ID5saXN0ICYmCisJZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC1tICJDb21taXQiICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQQlmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgZGVsaW1pdGVycycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XDBmaWxlQi50XDAiIHwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC0tcGF0aHNwZWMtZmlsZS1udWwgLW0gIkNvbW1pdCIgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBCWZpbGVBLnQKKwlBCWZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xGIGRlbGltaXRlcnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUEudFxuZmlsZUIudFxuIiB8IGdpdCBjb21taXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtbSAiQ29tbWl0IiAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEJZmlsZUEudAorCUEJZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gdHJhaWxpbmcgZGVsaW1pdGVyJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnQiIHwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC1tICJDb21taXQiICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQQlmaWxlQS50CisJQQlmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDUkxGIGRlbGltaXRlcnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUEudFxyXG5maWxlQi50XHJcbiIgfCBnaXQgY29tbWl0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLW0gIkNvbW1pdCIgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBCWZpbGVBLnQKKwlBCWZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJY2F0ID5saXN0IDw8LVxFT0YgJiYKKwkiZmlsZVwxMDEudCIKKwlFT0YKKworCWdpdCBjb21taXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtbSAiQ29tbWl0IiAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEJZmlsZUEudAorCUVPRgorCXZlcmlmeV9leHBlY3QgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcyBub3QgY29tcGF0aWJsZSB3aXRoIC0tcGF0aHNwZWMtZmlsZS1udWwnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWNhdCA+bGlzdCA8PC1cRU9GICYmCisJImZpbGVcMTAxLnQiCisJRU9GCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1wYXRoc3BlYy1maWxlLW51bCAtbSAiQ29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmx5IHRvdWNoZXMgd2hhdCB3YXMgbGlzdGVkJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVCLnRcbmZpbGVDLnRcbiIgfCBnaXQgY29tbWl0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLW0gIkNvbW1pdCIgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBCWZpbGVCLnQKKwlBCWZpbGVDLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIGNvbmRpdGlvbnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKwllY2hvIGZpbGVBLnQgPmxpc3QgJiYKKwk+ZW1wdHlfbGlzdCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0taW50ZXJhY3RpdmUgLW0gIkNvbW1pdCIgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tcGF0Y2ggLW0gIkNvbW1pdCIgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tYWxsIC1tICJDb21taXQiIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtbSAiQ29tbWl0IiAtLSBmaWxlQS50IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1wYXRoc3BlYy1maWxlLW51bCAtbSAiQ29tbWl0IiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWlyZXMgLS1wYXRoc3BlYy1mcm9tLWZpbGUiIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT1lbXB0eV9saXN0IC0taW5jbHVkZSAtbSAiQ29tbWl0IiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tcGF0aHNwZWMtZnJvbS1maWxlPWVtcHR5X2xpc3QgLS1vbmx5IC1tICJDb21taXQiIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjAwLW1lcmdlLnNoIGIvdC90NzYwMC1tZXJnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ODgzYTZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzYwMC1tZXJnZS5zaApAQCAtMCwwICsxLDEwNTQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgTGFycyBIamVtbGkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG1lcmdlCisKK1Rlc3RpbmcgYmFzaWMgbWVyZ2Ugb3BlcmF0aW9ucy9vcHRpb24gcGFyc2luZy4KKworISBbYzBdIGNvbW1pdCAwCisgISBbYzFdIGNvbW1pdCAxCisgICEgW2MyXSBjb21taXQgMgorICAgISBbYzNdIGNvbW1pdCAzCisgICAgISBbYzRdIGM0CisgICAgICEgW2M1XSBjNQorICAgICAgISBbYzZdIGM2CisgICAgICAgKiBbbWFzdGVyXSBNZXJnZSBjb21taXQgJ2MxJworLS0tLS0tLS0KKyAgICAgICAtIFttYXN0ZXJdIE1lcmdlIGNvbW1pdCAnYzEnCisgKyAgICAgKiBbYzFdIGNvbW1pdCAxCisgICAgICArICBbYzZdIGM2CisgICAgICsgICBbYzVdIGM1CisgICAgKysgICBbYzRdIGM0CisgICArKysrICBbYzNdIGNvbW1pdCAzCisgICsgICAgICBbYzJdIGNvbW1pdCAyCisrKysrKysrKiBbYzBdIGNvbW1pdCAwCisnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItZ3BnLnNoCisKK3Rlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA4IDkgPmZpbGUKK2NwIGZpbGUgZmlsZS5vcmlnCit0ZXN0X3dyaXRlX2xpbmVzICcxIFgnIDIgMyA0IDUgNiA3IDggOSA+ZmlsZS4xCit0ZXN0X3dyaXRlX2xpbmVzIDEgMiAnMyBYJyA0IDUgNiA3IDggOSA+ZmlsZS4zCit0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgJzUgWCcgNiA3IDggOSA+ZmlsZS41Cit0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgOCAnOSBYJyA+ZmlsZS45Cit0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgOCAnOSBZJyA+ZmlsZS45eQordGVzdF93cml0ZV9saW5lcyAnMSBYJyAyIDMgNCA1IDYgNyA4IDkgPnJlc3VsdC4xCit0ZXN0X3dyaXRlX2xpbmVzICcxIFgnIDIgMyA0ICc1IFgnIDYgNyA4IDkgPnJlc3VsdC4xLTUKK3Rlc3Rfd3JpdGVfbGluZXMgJzEgWCcgMiAzIDQgNSA2IDcgOCAnOSBYJyA+cmVzdWx0LjEtOQordGVzdF93cml0ZV9saW5lcyAnMSBYJyAyIDMgNCAnNSBYJyA2IDcgOCAnOSBYJyA+cmVzdWx0LjEtNS05Cit0ZXN0X3dyaXRlX2xpbmVzICcxIFgnIDIgJzMgWCcgNCAnNSBYJyA2IDcgOCAnOSBYJyA+cmVzdWx0LjEtMy01LTkKK3Rlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA4ICc5IFonID5yZXN1bHQuOXoKKworY3JlYXRlX21lcmdlX21zZ3MgKCkgeworCWVjaG8gIk1lcmdlIHRhZyAnYzInIiA+bXNnLjEtNSAmJgorCWVjaG8gIk1lcmdlIHRhZ3MgJ2MyJyBhbmQgJ2MzJyIgPm1zZy4xLTUtOSAmJgorCXsKKwkJZWNobyAiU3F1YXNoZWQgY29tbWl0IG9mIHRoZSBmb2xsb3dpbmc6IiAmJgorCQllY2hvICYmCisJCWdpdCBsb2cgLS1uby1tZXJnZXMgXkhFQUQgYzEKKwl9ID5zcXVhc2guMSAmJgorCXsKKwkJZWNobyAiU3F1YXNoZWQgY29tbWl0IG9mIHRoZSBmb2xsb3dpbmc6IiAmJgorCQllY2hvICYmCisJCWdpdCBsb2cgLS1uby1tZXJnZXMgXkhFQUQgYzIKKwl9ID5zcXVhc2guMS01ICYmCisJeworCQllY2hvICJTcXVhc2hlZCBjb21taXQgb2YgdGhlIGZvbGxvd2luZzoiICYmCisJCWVjaG8gJiYKKwkJZ2l0IGxvZyAtLW5vLW1lcmdlcyBeSEVBRCBjMiBjMworCX0gPnNxdWFzaC4xLTUtOSAmJgorCXsKKwkJZWNobyAiKiB0YWcgJ2MzJzoiICYmCisJCWVjaG8gIiAgY29tbWl0IDMiCisJfSA+bXNnLmxvZworfQorCit2ZXJpZnlfbWVyZ2UgKCkgeworCXRlc3RfY21wICIkMiIgIiQxIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwlpZiB0ZXN0IC1uICIkMyIKKwl0aGVuCisJCWdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMgSEVBRCA+bXNnLmFjdCAmJgorCQl0ZXN0X2NtcCAiJDMiIG1zZy5hY3QKKwlmaQorfQorCit2ZXJpZnlfaGVhZCAoKSB7CisJZWNobyAiJDEiID5oZWFkLmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5oZWFkLmFjdHVhbCAmJgorCXRlc3RfY21wIGhlYWQuZXhwZWN0ZWQgaGVhZC5hY3R1YWwKK30KKwordmVyaWZ5X3BhcmVudHMgKCkgeworCXRlc3Rfd3JpdGVfbGluZXMgIiRAIiA+cGFyZW50cy5leHBlY3RlZCAmJgorCT5wYXJlbnRzLmFjdHVhbCAmJgorCWk9MSAmJgorCXdoaWxlIHRlc3QgJGkgLWxlICQjCisJZG8KKwkJZ2l0IHJldi1wYXJzZSBIRUFEXiRpID4+cGFyZW50cy5hY3R1YWwgJiYKKwkJaT0kKGV4cHIgJGkgKyAxKSB8fAorCQlyZXR1cm4gMQorCWRvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJIRUFEXiRpIiAmJgorCXRlc3RfY21wIHBhcmVudHMuZXhwZWN0ZWQgcGFyZW50cy5hY3R1YWwKK30KKwordmVyaWZ5X21lcmdlaGVhZHMgKCkgeworCXRlc3Rfd3JpdGVfbGluZXMgIiRAIiA+bWVyZ2VoZWFkLmV4cGVjdGVkICYmCisJd2hpbGUgcmVhZCBzaGExIHJlc3QKKwlkbworCQlnaXQgcmV2LXBhcnNlICRzaGExCisJZG9uZSA8LmdpdC9NRVJHRV9IRUFEID5tZXJnZWhlYWQuYWN0dWFsICYmCisJdGVzdF9jbXAgbWVyZ2VoZWFkLmV4cGVjdGVkIG1lcmdlaGVhZC5hY3R1YWwKK30KKwordmVyaWZ5X25vX21lcmdlaGVhZCAoKSB7CisJISB0ZXN0IC1lIC5naXQvTUVSR0VfSEVBRAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImNvbW1pdCAwIiAmJgorCWdpdCB0YWcgYzAgJiYKKwljMD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljcCBmaWxlLjEgZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImNvbW1pdCAxIiAmJgorCWdpdCB0YWcgYzEgJiYKKwljMT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICIkYzAiICYmCisJY3AgZmlsZS41IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJjb21taXQgMiIgJiYKKwlnaXQgdGFnIGMyICYmCisJYzI9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAiJGMwIiAmJgorCWNwIGZpbGUuOXkgZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImNvbW1pdCA3IiAmJgorCWdpdCB0YWcgYzcgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICIkYzAiICYmCisJY3AgZmlsZS45IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJjb21taXQgMyIgJiYKKwlnaXQgdGFnIGMzICYmCisJYzM9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAiJGMwIiAmJgorCWNyZWF0ZV9tZXJnZV9tc2dzCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBvcHRpb24gcGFyc2luZycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtJCBjMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLXN1Y2ggYzEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgZm9vYmFyIGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zPWZvb2JhciBjMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtbSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWFib3J0IGZvb2JhciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWFib3J0IC0tcXVpZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1jb250aW51ZSBmb29iYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1jb250aW51ZSAtLXF1aWV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC1oIHdpdGggaW52YWxpZCBpbmRleCcgJworCW1rZGlyIGJyb2tlbiAmJgorCSgKKwkJY2QgYnJva2VuICYmCisJCWdpdCBpbml0ICYmCisJCT4uZ2l0L2luZGV4ICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBtZXJnZSAtaCAyPnVzYWdlCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlOiBnaXQgbWVyZ2UiIGJyb2tlbi91c2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3Qgbm9uLXN0cmF0ZWd5IHdpdGggYSBnaXQtbWVyZ2UtZm9vIG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgaW5kZXggYzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMScgJworCWVjaG8gIk9CSklEIEhFQURAezB9OiBtZXJnZSBjMTogRmFzdC1mb3J3YXJkIiA+cmVmbG9nLmV4cGVjdGVkICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfaGVhZCAiJGMxIiAmJgorCisJZ2l0IHJlZmxvZyAtMSA+cmVmbG9nLmFjdHVhbCAmJgorCXNlZCAicy8kX3gwNVswLTlhLWZdKi9PQkpJRC9nIiByZWZsb2cuYWN0dWFsID5yZWZsb2cuZnV6enkgJiYKKwl0ZXN0X2NtcCByZWZsb2cuZXhwZWN0ZWQgcmVmbG9nLmZ1enp5CisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMSB3aXRoIC0tZmYtb25seScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgLS1mZi1vbmx5IGMxICYmCisJZ2l0IG1lcmdlIC0tZmYtb25seSBIRUFEIGMwIGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfaGVhZCAiJGMxIgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGZyb20gdW5ib3JuIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBraWQgJiYKKworCWVjaG8gIk9CSklEIEhFQURAezB9OiBpbml0aWFsIHB1bGwiID5yZWZsb2cuZXhwZWN0ZWQgJiYKKworCWdpdCBjaGVja291dCAtLW9ycGhhbiBraWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBtYXN0ZXIiICYmCisJZ2l0IHJtIC1mciAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC0tZmYtb25seSBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X2hlYWQgIiRjMSIgJiYKKworCWdpdCByZWZsb2cgLTEgPnJlZmxvZy5hY3R1YWwgJiYKKwlzZWQgInMvJF94MDVbMC05YS1mXVswLTlhLWZdL09CSklEL2ciIHJlZmxvZy5hY3R1YWwgPnJlZmxvZy5mdXp6eSAmJgorCXRlc3RfY21wIHJlZmxvZy5leHBlY3RlZCByZWZsb2cuZnV6enkKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSBjMiAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgbXNnLjEtNSAmJgorCXZlcmlmeV9wYXJlbnRzICRjMSAkYzIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLS1zcXVhc2ggYzMgd2l0aCBjNycgJworCWdpdCByZXNldCAtLWhhcmQgYzMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1zcXVhc2ggYzcgJiYKKwljYXQgcmVzdWx0Ljl6ID5maWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLWVkaXQgLWEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCVNxdWFzaGVkIGNvbW1pdCBvZiB0aGUgZm9sbG93aW5nOgorCisJJChnaXQgc2hvdyAtcyBjNykKKworCSMgQ29uZmxpY3RzOgorCSMJZmlsZQorCUVPRgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+cmF3ICYmCisJc2VkIC1lICcxLC9eJC9kJyByYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzMgd2l0aCBjNyB3aXRoIGNvbW1pdC5jbGVhbnVwID0gc2Npc3NvcnMnICcKKwlnaXQgY29uZmlnIGNvbW1pdC5jbGVhbnVwIHNjaXNzb3JzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjNyAmJgorCWNhdCByZXN1bHQuOXogPmZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tZWRpdCAtYSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU1lcmdlIHRhZyAnIiciJ2M3JyInIicKKworCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSMgRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuCisJIyBFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4KKwkjCisJIyBDb25mbGljdHM6CisJIwlmaWxlCisJRU9GCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yYXcgJiYKKwlzZWQgLWUgJzEsL14kL2QnIHJhdyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzMgd2l0aCBjNyB3aXRoIC0tc3F1YXNoIGNvbW1pdC5jbGVhbnVwID0gc2Npc3NvcnMnICcKKwlnaXQgY29uZmlnIGNvbW1pdC5jbGVhbnVwIHNjaXNzb3JzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXNxdWFzaCBjNyAmJgorCWNhdCByZXN1bHQuOXogPmZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tZWRpdCAtYSAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJU3F1YXNoZWQgY29tbWl0IG9mIHRoZSBmb2xsb3dpbmc6CisKKwkkKGdpdCBzaG93IC1zIGM3KQorCisJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJIyBEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS4KKwkjIEV2ZXJ5dGhpbmcgYmVsb3cgaXQgd2lsbCBiZSBpZ25vcmVkLgorCSMKKwkjIENvbmZsaWN0czoKKwkjCWZpbGUKKwlFT0YKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPnJhdyAmJgorCXNlZCAtZSAnMSwvXiQvZCcgcmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgYW5kIGMzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSBjMiBjMyAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUtOSBtc2cuMS01LTkgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzEgJGMyICRjMworJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlcyB3aXRoIC0tZmYtb25seScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IGMyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tZmYtb25seSBjMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWZmLW9ubHkgYzIgYzMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIGMzICYmCisJdmVyaWZ5X2hlYWQgJGMzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlcyB3aXRoIG1lcmdlLmZmPW9ubHknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9jb25maWcgbWVyZ2UuZmYgIm9ubHkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMyIGMzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSBjMyAmJgorCXZlcmlmeV9oZWFkICRjMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMCB3aXRoIGMxIChuby1jb21taXQpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X2hlYWQgJGMxCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAobm8tY29tbWl0KScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgYzIgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01ICYmCisJdmVyaWZ5X2hlYWQgJGMxICYmCisJdmVyaWZ5X21lcmdlaGVhZHMgJGMyCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiBhbmQgYzMgKG5vLWNvbW1pdCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IGMyIGMzICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNS05ICYmCisJdmVyaWZ5X2hlYWQgJGMxICYmCisJdmVyaWZ5X21lcmdlaGVhZHMgJGMyICRjMworJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMwIHdpdGggYzEgKHNxdWFzaCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIC0tc3F1YXNoIGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfaGVhZCAkYzAgJiYKKwl2ZXJpZnlfbm9fbWVyZ2VoZWFkICYmCisJdGVzdF9jbXAgc3F1YXNoLjEgLmdpdC9TUVVBU0hfTVNHCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMSAoc3F1YXNoLCBmZi1vbmx5KScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgLS1zcXVhc2ggLS1mZi1vbmx5IGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfaGVhZCAkYzAgJiYKKwl2ZXJpZnlfbm9fbWVyZ2VoZWFkICYmCisJdGVzdF9jbXAgc3F1YXNoLjEgLmdpdC9TUVVBU0hfTVNHCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAoc3F1YXNoKScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgLS1zcXVhc2ggYzIgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01ICYmCisJdmVyaWZ5X2hlYWQgJGMxICYmCisJdmVyaWZ5X25vX21lcmdlaGVhZCAmJgorCXRlc3RfY21wIHNxdWFzaC4xLTUgLmdpdC9TUVVBU0hfTVNHCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zdWNjZXNzZnVsIG1lcmdlIG9mIGMxIHdpdGggYzIgKHNxdWFzaCwgZmYtb25seSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3F1YXNoIC0tZmYtb25seSBjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgYW5kIGMzIChzcXVhc2gpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSAtLXNxdWFzaCBjMiBjMyAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUtOSAmJgorCXZlcmlmeV9oZWFkICRjMSAmJgorCXZlcmlmeV9ub19tZXJnZWhlYWQgJiYKKwl0ZXN0X2NtcCBzcXVhc2guMS01LTkgLmdpdC9TUVVBU0hfTVNHCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAobm8tY29tbWl0IGluIGNvbmZpZyknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi0tbm8tY29tbWl0IiAmJgorCWdpdCBtZXJnZSBjMiAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgJiYKKwl2ZXJpZnlfaGVhZCAkYzEgJiYKKwl2ZXJpZnlfbWVyZ2VoZWFkcyAkYzIKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyIChsb2cgaW4gY29uZmlnKScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgLS1sb2cgYzIgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT10Zm9ybWF0OiVzJW4lYiA+ZXhwZWN0ICYmCisKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1sb2ciICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSBjMiAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMlbiViID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAobG9nIGluIGNvbmZpZyBnZXRzIG92ZXJyaWRkZW4pJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSBjMiAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMlbiViID5leHBlY3QgJiYKKworCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItLW5vLWxvZyIgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5sb2cgInRydWUiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSBjMiAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMlbiViID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAoc3F1YXNoIGluIGNvbmZpZyknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi0tc3F1YXNoIiAmJgorCWdpdCBtZXJnZSBjMiAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgJiYKKwl2ZXJpZnlfaGVhZCAkYzEgJiYKKwl2ZXJpZnlfbm9fbWVyZ2VoZWFkICYmCisJdGVzdF9jbXAgc3F1YXNoLjEtNSAuZ2l0L1NRVUFTSF9NU0cKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZSBjb25maWcgb3B0aW9uIC1uIHdpdGggLS1zdW1tYXJ5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItbiIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLS1zdW1tYXJ5IGMyID5kaWZmc3RhdC50eHQgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01IG1zZy4xLTUgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzEgJGMyICYmCisJaWYgISBncmVwICJeIGZpbGUgfCAgKjIgKy0kIiBkaWZmc3RhdC50eHQKKwl0aGVuCisJCWVjaG8gIltPT1BTXSBkaWZmc3RhdCB3YXMgbm90IGdlbmVyYXRlZCB3aXRoIC0tc3VtbWFyeSIKKwkJZmFsc2UKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZSBjb25maWcgb3B0aW9uIC1uIHdpdGggLS1zdGF0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItbiIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLS1zdGF0IGMyID5kaWZmc3RhdC50eHQgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01IG1zZy4xLTUgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzEgJGMyICYmCisJaWYgISBncmVwICJeIGZpbGUgfCAgKjIgKy0kIiBkaWZmc3RhdC50eHQKKwl0aGVuCisJCWVjaG8gIltPT1BTXSBkaWZmc3RhdCB3YXMgbm90IGdlbmVyYXRlZCB3aXRoIC0tc3RhdCIKKwkJZmFsc2UKKwlmaQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJyaWRlIGNvbmZpZyBvcHRpb24gLS1zdGF0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItLXN0YXQiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1uIGMyID5kaWZmc3RhdC50eHQgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01IG1zZy4xLTUgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzEgJGMyICYmCisJaWYgZ3JlcCAiXiBmaWxlIHwgICoyICstJCIgZGlmZnN0YXQudHh0CisJdGhlbgorCQllY2hvICJbT09QU10gZGlmZnN0YXQgd2FzIGdlbmVyYXRlZCIKKwkJZmFsc2UKKwlmaQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKG92ZXJyaWRlIC0tbm8tY29tbWl0KScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1uby1jb21taXQiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC0tY29tbWl0IGMyICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSBtc2cuMS01ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMxICRjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKG92ZXJyaWRlIC0tc3F1YXNoKScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1zcXVhc2giICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC0tbm8tc3F1YXNoIGMyICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSBtc2cuMS01ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMxICRjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMwIHdpdGggYzEgKG5vLWZmKScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X3BhcmVudHMgJGMwICRjMQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMwIHdpdGggYzEgKG1lcmdlLmZmPWZhbHNlKScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5mZiAiZmFsc2UiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzAgJGMxCisnCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmUgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgd2l0aCBtZXJnZS5mZicgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1mZiIgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5mZiAiZmFsc2UiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfcGFyZW50cyAiJGMwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0b2xlcmF0ZSB1bmtub3duIHZhbHVlcyBmb3IgbWVyZ2UuZmYnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF9jb25maWcgbWVyZ2UuZmYgInNvbWV0aGluZy1uZXciICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIGMxIDI+bWVzc2FnZSAmJgorCXZlcmlmeV9oZWFkICIkYzEiICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluaW5nIC0tc3F1YXNoIGFuZCAtLW5vLWZmIGlzIHJlZnVzZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3F1YXNoIC0tbm8tZmYgYzEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1mZiAtLXNxdWFzaCBjMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5pbmcgLS1zcXVhc2ggYW5kIC0tY29tbWl0IGlzIHJlZnVzZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3F1YXNoIC0tY29tbWl0IGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tY29tbWl0IC0tc3F1YXNoIGMxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbiAtLWZmLW9ubHkgb3ZlcndyaXRlcyAtLW5vLWZmJyAnCisJZ2l0IG1lcmdlIC0tbm8tZmYgLS1mZi1vbmx5IGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tZmYgLS1mZi1vbmx5IGMyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbiAtLW5vLWZmIG92ZXJyaWRlcyBtZXJnZS5mZj1vbmx5IGNvbmZpZycgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5mZiBvbmx5ICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgYzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMSAoZmYgb3ZlcnJpZGVzIG5vLWZmKScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1uby1mZiIgJiYKKwlnaXQgbWVyZ2UgLS1mZiBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X2hlYWQgJGMxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGxvZyBtZXNzYWdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSAtLW5vLWxvZyBjMiAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolYiBIRUFEID5tc2cuYWN0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG1zZy5hY3QgJiYKKworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1uby1mZiIgJiYKKwlnaXQgbWVyZ2UgLS1uby1sb2cgYzIgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JWIgSEVBRCA+bXNnLmFjdCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBtc2cuYWN0ICYmCisKKwlnaXQgbWVyZ2UgLS1sb2cgYzMgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JWIgSEVBRCA+bXNnLmFjdCAmJgorCXRlc3RfY21wIG1zZy5sb2cgbXNnLmFjdCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3RfY29uZmlnIG1lcmdlLmxvZyAieWVzIiAmJgorCWdpdCBtZXJnZSBjMyAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolYiBIRUFEID5tc2cuYWN0ICYmCisJdGVzdF9jbXAgbXNnLmxvZyBtc2cuYWN0CisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMCwgYzIsIGMwLCBhbmQgYzEnICcKKyAgICAgICBnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisgICAgICAgdGVzdF90aWNrICYmCisgICAgICAgZ2l0IG1lcmdlIGMwIGMyIGMwIGMxICYmCisgICAgICAgdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSAmJgorICAgICAgIHZlcmlmeV9wYXJlbnRzICRjMSAkYzIKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMwLCBjMiwgYzAsIGFuZCBjMScgJworICAgICAgIGdpdCByZXNldCAtLWhhcmQgYzEgJiYKKyAgICAgICB0ZXN0X3RpY2sgJiYKKyAgICAgICBnaXQgbWVyZ2UgYzAgYzIgYzAgYzEgJiYKKyAgICAgICB2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01ICYmCisgICAgICAgdmVyaWZ5X3BhcmVudHMgJGMxICRjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzEgYW5kIGMyJyAnCisgICAgICAgZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorICAgICAgIHRlc3RfdGljayAmJgorICAgICAgIGdpdCBtZXJnZSBjMSBjMiAmJgorICAgICAgIHZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgJiYKKyAgICAgICB2ZXJpZnlfcGFyZW50cyAkYzEgJGMyCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZmFzdC1mb3J3YXJkIGluIGEgZGlydHkgdHJlZScgJworICAgICAgIGdpdCByZXNldCAtLWhhcmQgYzAgJiYKKyAgICAgICBtdiBmaWxlIGZpbGUxICYmCisgICAgICAgY2F0IGZpbGUxID5maWxlICYmCisgICAgICAgcm0gLWYgZmlsZTEgJiYKKyAgICAgICBnaXQgbWVyZ2UgYzIKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbi1pbmRleCBtZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiAtcyByZXNvbHZlIGMxID5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJXb25kZXJmdWwuIiBvdXQgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzAgJGMxCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcmVzaCB0aGUgaW5kZXggYmVmb3JlIG1lcmdpbmcnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJY3AgZmlsZSBmaWxlLm4gJiYgbXYgLWYgZmlsZS5uIGZpbGUgJiYKKwlnaXQgbWVyZ2UgYzMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugd2l0aCAtLWF1dG9zdGFzaCcgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UtZmlsZSBmaWxlIGZpbGUub3JpZyBmaWxlLjkgJiYKKwlnaXQgbWVyZ2UgLS1hdXRvc3Rhc2ggYzIgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJBcHBsaWVkIGF1dG9zdGFzaC4iIGVyciAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZSA+bWVyZ2UtcmVzdWx0ICYmCisJdGVzdF9jbXAgcmVzdWx0LjEtNSBtZXJnZS1yZXN1bHQgJiYKKwl0ZXN0X2NtcCByZXN1bHQuMS01LTkgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB3aXRoIG1lcmdlLmF1dG9TdGFzaCcgJworCXRlc3RfY29uZmlnIG1lcmdlLmF1dG9TdGFzaCB0cnVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZS1maWxlIGZpbGUgZmlsZS5vcmlnIGZpbGUuOSAmJgorCWdpdCBtZXJnZSBjMiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIkFwcGxpZWQgYXV0b3N0YXNoLiIgZXJyICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlID5tZXJnZS1yZXN1bHQgJiYKKwl0ZXN0X2NtcCByZXN1bHQuMS01IG1lcmdlLXJlc3VsdCAmJgorCXRlc3RfY21wIHJlc3VsdC4xLTUtOSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZm9yd2FyZCBtZXJnZSB3aXRoIC0tYXV0b3N0YXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZS1maWxlIGZpbGUgZmlsZS5vcmlnIGZpbGUuNSAmJgorCWdpdCBtZXJnZSAtLWF1dG9zdGFzaCBjMSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIkFwcGxpZWQgYXV0b3N0YXNoLiIgZXJyICYmCisJdGVzdF9jbXAgcmVzdWx0LjEtNSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29jdG9wdXMgbWVyZ2Ugd2l0aCAtLWF1dG9zdGFzaCcgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UtZmlsZSBmaWxlIGZpbGUub3JpZyBmaWxlLjMgJiYKKwlnaXQgbWVyZ2UgLS1hdXRvc3Rhc2ggYzIgYzMgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJBcHBsaWVkIGF1dG9zdGFzaC4iIGVyciAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZSA+bWVyZ2UtcmVzdWx0ICYmCisJdGVzdF9jbXAgcmVzdWx0LjEtNS05IG1lcmdlLXJlc3VsdCAmJgorCXRlc3RfY21wIHJlc3VsdC4xLTMtNS05IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3RlZCBtZXJnZSB3aXRoIC0tYXV0b3N0YXNoLCAtLWFib3J0IHJlc3RvcmVzIHN0YXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMyAmJgorCWNwIGZpbGUuMSBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tYXV0b3N0YXNoIGM3ICYmCisJZ2l0IG1lcmdlIC0tYWJvcnQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJBcHBsaWVkIGF1dG9zdGFzaC4iIGVyciAmJgorCXRlc3RfY21wIGZpbGUuMSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXBsZXRlZCBtZXJnZSAoZ2l0IGNvbW1pdCkgd2l0aCAtLW5vLWNvbW1pdCBhbmQgLS1hdXRvc3Rhc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlLWZpbGUgZmlsZSBmaWxlLm9yaWcgZmlsZS45ICYmCisJZ2l0IGRpZmYgPmV4cGVjdCAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtLWF1dG9zdGFzaCBjMiAmJgorCWdpdCBzdGFzaCBzaG93IC1wIE1FUkdFX0FVVE9TVEFTSCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjb21taXQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJBcHBsaWVkIGF1dG9zdGFzaC4iIGVyciAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZSA+bWVyZ2UtcmVzdWx0ICYmCisJdGVzdF9jbXAgcmVzdWx0LjEtNSBtZXJnZS1yZXN1bHQgJiYKKwl0ZXN0X2NtcCByZXN1bHQuMS01LTkgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wbGV0ZWQgbWVyZ2UgKGdpdCBtZXJnZSAtLWNvbnRpbnVlKSB3aXRoIC0tbm8tY29tbWl0IGFuZCAtLWF1dG9zdGFzaCcgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UtZmlsZSBmaWxlIGZpbGUub3JpZyBmaWxlLjkgJiYKKwlnaXQgZGlmZiA+ZXhwZWN0ICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IC0tYXV0b3N0YXNoIGMyICYmCisJZ2l0IHN0YXNoIHNob3cgLXAgTUVSR0VfQVVUT1NUQVNIID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IG1lcmdlIC0tY29udGludWUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJBcHBsaWVkIGF1dG9zdGFzaC4iIGVyciAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZSA+bWVyZ2UtcmVzdWx0ICYmCisJdGVzdF9jbXAgcmVzdWx0LjEtNSBtZXJnZS1yZXN1bHQgJiYKKwl0ZXN0X2NtcCByZXN1bHQuMS01LTkgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYm9ydGVkIG1lcmdlIChtZXJnZSAtLWFib3J0KSB3aXRoIC0tbm8tY29tbWl0IGFuZCAtLWF1dG9zdGFzaCcgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UtZmlsZSBmaWxlIGZpbGUub3JpZyBmaWxlLjkgJiYKKwlnaXQgZGlmZiA+ZXhwZWN0ICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IC0tYXV0b3N0YXNoIGMyICYmCisJZ2l0IHN0YXNoIHNob3cgLXAgTUVSR0VfQVVUT1NUQVNIID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IG1lcmdlIC0tYWJvcnQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJBcHBsaWVkIGF1dG9zdGFzaC4iIGVyciAmJgorCWdpdCBkaWZmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fib3J0ZWQgbWVyZ2UgKHJlc2V0IC0taGFyZCkgd2l0aCAtLW5vLWNvbW1pdCBhbmQgLS1hdXRvc3Rhc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlLWZpbGUgZmlsZSBmaWxlLm9yaWcgZmlsZS45ICYmCisJZ2l0IGRpZmYgPmV4cGVjdCAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtLWF1dG9zdGFzaCBjMiAmJgorCWdpdCBzdGFzaCBzaG93IC1wIE1FUkdFX0FVVE9TVEFTSCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXNldCAtLWhhcmQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJBdXRvc3Rhc2ggZXhpc3RzOyBjcmVhdGluZyBhIG5ldyBzdGFzaCBlbnRyeS4iIGVyciAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1aXQgbWVyZ2Ugd2l0aCAtLW5vLWNvbW1pdCBhbmQgLS1hdXRvc3Rhc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlLWZpbGUgZmlsZSBmaWxlLm9yaWcgZmlsZS45ICYmCisJZ2l0IGRpZmYgPmV4cGVjdCAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtLWF1dG9zdGFzaCBjMiAmJgorCWdpdCBzdGFzaCBzaG93IC1wIE1FUkdFX0FVVE9TVEFTSCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBkaWZmIEhFQUQgPmV4cGVjdCAmJgorCWdpdCBtZXJnZSAtLXF1aXQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJBdXRvc3Rhc2ggZXhpc3RzOyBjcmVhdGluZyBhIG5ldyBzdGFzaCBlbnRyeS4iIGVyciAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugd2l0aCBjb25mbGljdGVkIC0tYXV0b3N0YXNoIGNoYW5nZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlLWZpbGUgZmlsZSBmaWxlLm9yaWcgZmlsZS45eSAmJgorCWdpdCBkaWZmID5leHBlY3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfbWlnaHRfZmFpbCBnaXQgc3Rhc2ggZHJvcCIgJiYKKwlnaXQgbWVyZ2UgLS1hdXRvc3Rhc2ggYzMgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLiIgZXJyICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlID5tZXJnZS1yZXN1bHQgJiYKKwl0ZXN0X2NtcCByZXN1bHQuMS05IG1lcmdlLXJlc3VsdCAmJgorCWdpdCBzdGFzaCBzaG93IC1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQuYnJhbmNoIDw8XEVPRgorTWVyZ2UgYnJhbmNoICdjNS1icmFuY2gnIChlYXJseSBwYXJ0KQorRU9GCitjYXQgPmV4cGVjdGVkLnRhZyA8PFxFT0YKK01lcmdlIGNvbW1pdCAnYzV+MScKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBlYXJseSBwYXJ0IG9mIGMyJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMyAmJgorCWVjaG8gYzQgPmM0LmMgJiYKKwlnaXQgYWRkIGM0LmMgJiYKKwlnaXQgY29tbWl0IC1tIGM0ICYmCisJZ2l0IHRhZyBjNCAmJgorCWVjaG8gYzUgPmM1LmMgJiYKKwlnaXQgYWRkIGM1LmMgJiYKKwlnaXQgY29tbWl0IC1tIGM1ICYmCisJZ2l0IHRhZyBjNSAmJgorCWdpdCByZXNldCAtLWhhcmQgYzMgJiYKKwllY2hvIGM2ID5jNi5jICYmCisJZ2l0IGFkZCBjNi5jICYmCisJZ2l0IGNvbW1pdCAtbSBjNiAmJgorCWdpdCB0YWcgYzYgJiYKKwlnaXQgYnJhbmNoIC1mIGM1LWJyYW5jaCBjNSAmJgorCWdpdCBtZXJnZSBjNS1icmFuY2h+MSAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMgSEVBRCA+YWN0dWFsLmJyYW5jaCAmJgorCWdpdCByZXNldCAtLWtlZXAgSEVBRF4gJiYKKwlnaXQgbWVyZ2UgYzV+MSAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMgSEVBRCA+YWN0dWFsLnRhZyAmJgorCXRlc3RfY21wIGV4cGVjdGVkLmJyYW5jaCBhY3R1YWwuYnJhbmNoICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQudGFnIGFjdHVhbC50YWcKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtLW5vLWZmIC0tbm8tY29tbWl0ICYmIGNvbW1pdCcgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiAtLW5vLWNvbW1pdCBjMSAmJgorCUVESVRPUj06IGdpdCBjb21taXQgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzAgJGMxCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1lbmRpbmcgbm8tZmYgbWVyZ2UgY29tbWl0JyAnCisJRURJVE9SPTogZ2l0IGNvbW1pdCAtLWFtZW5kICYmCisJdmVyaWZ5X3BhcmVudHMgJGMwICRjMQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK2NhdCA+ZWRpdG9yIDw8XEVPRgorIyEvYmluL3NoCisjIEFkZCBhIG5ldyBtZXNzYWdlIHN0cmluZyB0aGF0IHdhcyBub3QgaW4gdGhlIHRlbXBsYXRlCisoCisJZWNobyAiTWVyZ2Ugd29yayBkb25lIG9uIHRoZSBzaWRlIGJyYW5jaCBjMSIKKwllY2hvCisJY2F0ICIkMSIKKykgPiIkMS50bXAiICYmIG12ICIkMS50bXAiICIkMSIKKyMgc3RyaXAgY29tbWVudHMgYW5kIGJsYW5rIGxpbmVzIGZyb20gZW5kIG9mIG1lc3NhZ2UKK3NlZCAtZSAnL14jL2QnICIkMSIgfCBzZWQgLWUgOmEgLWUgJy9eXG4qJC97JGQ7TjtiYScgLWUgJ30nID5leHBlY3RlZAorRU9GCitjaG1vZCA3NTUgZWRpdG9yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC0tbm8tZmYgLS1lZGl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCUVESVRPUj0uL2VkaXRvciBnaXQgbWVyZ2UgLS1uby1mZiAtLWVkaXQgYzEgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzAgJGMxICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yYXcgJiYKKwlncmVwICJ3b3JrIGRvbmUgb24gdGhlIHNpZGUgYnJhbmNoIiByYXcgJiYKKwlzZWQgIjEsL14kL2QiID5hY3R1YWwgcmF3ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGFubm90YXRlZC9zaWduZWQgdGFnIHcvbyB0cmFja2luZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGRzdDsgZ2l0IHRhZyAtZCBhbm5vMSIgJiYKKwlnaXQgdGFnIC1hIC1tICJhbm5vIGMxIiBhbm5vMSBjMSAmJgorCWdpdCBpbml0IGRzdCAmJgorCWdpdCByZXYtcGFyc2UgYzEgPmRzdC9leHBlY3QgJiYKKwkoCisJCSMgYzAgZmFzdC1mb3J3YXJkcyB0byBjMSBidXQgYmVjYXVzZSB0aGlzIHJlcG9zaXRvcnkKKwkJIyBpcyBub3QgYSAiZG93bnN0cmVhbSIgd2hvc2UgcmVmcy90YWdzIGZvbGxvd3MgYWxvbmcKKwkJIyB0YWcgZnJvbSB0aGUgInVwc3RyZWFtIiwgdGhpcyBwdWxsIGRlZmF1bHRzIHRvIC0tbm8tZmYKKwkJY2QgZHN0ICYmCisJCWdpdCBwdWxsIC4uIGMwICYmCisJCWdpdCBwdWxsIC4uIGFubm8xICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRF4yID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYW5ub3RhdGVkL3NpZ25lZCB0YWcgdy8gdHJhY2tpbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBkc3Q7IGdpdCB0YWcgLWQgYW5ubzEiICYmCisJZ2l0IHRhZyAtYSAtbSAiYW5ubyBjMSIgYW5ubzEgYzEgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwlnaXQgcmV2LXBhcnNlIGMxID5kc3QvZXhwZWN0ICYmCisJKAorCQkjIGMwIGZhc3QtZm9yd2FyZHMgdG8gYzEgYW5kIGJlY2F1c2UgdGhpcyByZXBvc2l0b3J5CisJCSMgaXMgYSAiZG93bnN0cmVhbSIgd2hvc2UgcmVmcy90YWdzIGZvbGxvd3MgYWxvbmcKKwkJIyB0YWcgZnJvbSB0aGUgInVwc3RyZWFtIiwgdGhpcyBwdWxsIGRlZmF1bHRzIHRvIC0tZmYKKwkJY2QgZHN0ICYmCisJCWdpdCByZW1vdGUgYWRkIG9yaWdpbiAuLiAmJgorCQlnaXQgcHVsbCBvcmlnaW4gYzAgJiYKKwkJZ2l0IGZldGNoIG9yaWdpbiAmJgorCQlnaXQgbWVyZ2UgYW5ubzEgJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIC0tZmYtb25seSB0YWcnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJBIG5ld2VyIGNvbW1pdCIgJiYKKwlnaXQgdGFnIC1zIC1tICJBIG5ld2VyIGNvbW1pdCIgc2lnbmVkICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCisJZ2l0IG1lcmdlIC0tZmYtb25seSBzaWduZWQgJiYKKwlnaXQgcmV2LXBhcnNlIHNpZ25lZF4wID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIC0tbm8tZWRpdCB0YWcgc2hvdWxkIHNraXAgZWRpdG9yJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiQSBuZXdlciBjb21taXQiICYmCisJZ2l0IHRhZyAtZiAtcyAtbSAiQSBuZXdlciBjb21taXQiIHNpZ25lZCAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKworCUVESVRPUj1mYWxzZSBnaXQgbWVyZ2UgLS1uby1lZGl0IC0tbm8tZmYgc2lnbmVkICYmCisJZ2l0IHJldi1wYXJzZSBzaWduZWReMCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIG1vZC0yNTYgY29uZmxpY3Qgc2NlbmFyaW8nICcKKwkjIDI1NiBuZWFyLWlkZW50aWNhbCBzdGFuemFzLi4uCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDI1Nik7IGRvCisJCWZvciBqIGluIDEgMiAzIDQgNTsgZG8KKwkJCWVjaG8gJGktJGoKKwkJZG9uZQorCWRvbmUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKworCSMgb25lIHNpZGUgY2hhbmdlcyB0aGUgZmlyc3QgbGluZSBvZiBlYWNoIHRvICJtYXN0ZXIiCisJc2VkIHMvLTEvLW1hc3Rlci8gZmlsZSA+dG1wICYmCisJbXYgdG1wIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hbSBtYXN0ZXIgJiYKKworCSMgYW5kIHRoZSBvdGhlciB0byAic2lkZSI7IG1lcmdpbmcgdGhlIHR3byB3aWxsCisJIyB5aWVsZCAyNTYgc2VwYXJhdGUgY29uZmxpY3RzCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwlzZWQgcy8tMS8tc2lkZS8gZmlsZSA+dG1wICYmCisJbXYgdG1wIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hbSBzaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGRldGVjdHMgbW9kLTI1NiBjb25mbGljdHMgKHJlY3Vyc2l2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZGV0ZWN0cyBtb2QtMjU2IGNvbmZsaWN0cyAocmVzb2x2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlc29sdmUgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG5vdGhpbmcgaW50byB2b2lkJyAnCisJZ2l0IGluaXQgdm9pZCAmJgorCSgKKwkJY2Qgdm9pZCAmJgorCQlnaXQgcmVtb3RlIGFkZCB1cCAuLiAmJgorCQlnaXQgZmV0Y2ggdXAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEZFVENIX0hFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGNhbiBiZSBjb21wbGV0ZWQgd2l0aCAtLWNvbnRpbnVlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIC0tbm8tY29tbWl0IGMxICYmCisJZ2l0IG1lcmdlIC0tY29udGludWUgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzAgJGMxCisnCisKK3dyaXRlX3NjcmlwdCAuZ2l0L0ZBS0VfRURJVE9SIDw8RU9GCisjIGtpbGwgLVRFUk0gY29tbWFuZCBhZGRlZCBiZWxvdy4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEVYRUNLRUVQU1BJRCAna2lsbGVkIG1lcmdlIGNhbiBiZSBjb21wbGV0ZWQgd2l0aCAtLWNvbnRpbnVlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCSEgIiRTSEVMTF9QQVRIIiAtYyAnXCcnCisJICBlY2hvIGtpbGwgLVRFUk0gJCQgPj4uZ2l0L0ZBS0VfRURJVE9SCisJICBHSVRfRURJVE9SPS5naXQvRkFLRV9FRElUT1IKKwkgIGV4cG9ydCBHSVRfRURJVE9SCisJICBleGVjIGdpdCBtZXJnZSAtLW5vLWZmIC0tZWRpdCBjMSdcJycgJiYKKwlnaXQgbWVyZ2UgLS1jb250aW51ZSAmJgorCXZlcmlmeV9wYXJlbnRzICRjMCAkYzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLS1xdWl0JyAnCisJZ2l0IGluaXQgbWVyZ2UtcXVpdCAmJgorCSgKKwkJY2QgbWVyZ2UtcXVpdCAmJgorCQl0ZXN0X2NvbW1pdCBiYXNlICYmCisJCWVjaG8gb25lID4+YmFzZS50ICYmCisJCWdpdCBjb21taXQgLWFtIG9uZSAmJgorCQlnaXQgYnJhbmNoIG9uZSAmJgorCQlnaXQgY2hlY2tvdXQgYmFzZSAmJgorCQllY2hvIHR3byA+PmJhc2UudCAmJgorCQlnaXQgY29tbWl0IC1hbSB0d28gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHJlcmVyZS5lbmFibGVkPXRydWUgbWVyZ2Ugb25lICYmCisJCXRlc3RfcGF0aF9pc19maWxlIC5naXQvTUVSR0VfSEVBRCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L01FUkdFX01PREUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9NRVJHRV9NU0cgJiYKKwkJZ2l0IHJlcmVyZSBzdGF0dXMgPnJlcmVyZS5iZWZvcmUgJiYKKwkJZ2l0IG1lcmdlIC0tcXVpdCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9NT0RFICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfTVNHICYmCisJCWdpdCByZXJlcmUgc3RhdHVzID5yZXJlcmUuYWZ0ZXIgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IHJlcmVyZS5hZnRlciAmJgorCQkhIHRlc3RfY21wIHJlcmVyZS5hZnRlciByZXJlcmUuYmVmb3JlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBzdWdnZXN0cyBtYXRjaGluZyByZW1vdGUgcmVmbmFtZScgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBub3QtbG9jYWwgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL25vdC1sb2NhbCBIRUFEICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCisJIyBUaGlzIGlzIHdoaXRlLWJveCB0ZXN0aW5nIGhhY2tlcnk7IHdlIGhhcHBlbiB0byBrbm93CisJIyB0aGF0IHJlYWRpbmcgcGFja2VkIHJlZnMgaXMgbW9yZSBwaWNreSBhYm91dCB0aGUgbWVtb3J5CisJIyBvd25lcnNoaXAgb2Ygc3RyaW5ncyB3ZSBwYXNzIHRvIGZvcl9lYWNoX3JlZigpIGNhbGxiYWNrcy4KKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBub3QtbG9jYWwgMj5zdGRlcnIgJiYKKwlncmVwIG9yaWdpbi9ub3QtbG9jYWwgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Z2dlc3RlZCBuYW1lcyBhcmUgbm90IGFtYmlndW91cycgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvb3JpZ2luL25vdC1sb2NhbCBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG5vdC1sb2NhbCAyPnN0ZGVyciAmJgorCWdyZXAgcmVtb3Rlcy9vcmlnaW4vbm90LWxvY2FsIHN0ZGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDEtbWVyZ2UtcHVsbC1jb25maWcuc2ggYi90L3Q3NjAxLW1lcmdlLXB1bGwtY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmOTc4MjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjAxLW1lcmdlLXB1bGwtY29uZmlnLnNoCkBAIC0wLDAgKzEsMjIzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG1lcmdlCisKK1Rlc3RpbmcgcHVsbC4qIGNvbmZpZ3VyYXRpb24gcGFyc2luZy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gYzAgPmMwLmMgJiYKKwlnaXQgYWRkIGMwLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMwICYmCisJZ2l0IHRhZyBjMCAmJgorCWVjaG8gYzEgPmMxLmMgJiYKKwlnaXQgYWRkIGMxLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMxICYmCisJZ2l0IHRhZyBjMSAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwllY2hvIGMyID5jMi5jICYmCisJZ2l0IGFkZCBjMi5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMiAmJgorCWdpdCB0YWcgYzIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZWNobyBjMyA+YzMuYyAmJgorCWdpdCBhZGQgYzMuYyAmJgorCWdpdCBjb21taXQgLW0gYzMgJiYKKwlnaXQgdGFnIGMzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwucmViYXNlIG5vdCBzZXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IHB1bGwgLiBjMSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIlB1bGxpbmcgd2l0aG91dCBzcGVjaWZ5aW5nIGhvdyB0byByZWNvbmNpbGUiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsLnJlYmFzZSBub3Qgc2V0IGFuZCBwdWxsLmZmPWZhbHNlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfY29uZmlnIHB1bGwuZmYgZmFsc2UgJiYKKwlnaXQgcHVsbCAuIGMxIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiUHVsbGluZyB3aXRob3V0IHNwZWNpZnlpbmcgaG93IHRvIHJlY29uY2lsZSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwucmViYXNlIG5vdCBzZXQgYW5kIHB1bGwuZmY9b25seScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLmZmIG9ubHkgJiYKKwlnaXQgcHVsbCAuIGMxIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJQdWxsaW5nIHdpdGhvdXQgc3BlY2lmeWluZyBob3cgdG8gcmVjb25jaWxlIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbC5yZWJhc2Ugbm90IHNldCBhbmQgLS1yZWJhc2UgZ2l2ZW4nICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgLiBjMSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAiUHVsbGluZyB3aXRob3V0IHNwZWNpZnlpbmcgaG93IHRvIHJlY29uY2lsZSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwucmViYXNlIG5vdCBzZXQgYW5kIC0tbm8tcmViYXNlIGdpdmVuJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBwdWxsIC0tbm8tcmViYXNlIC4gYzEgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIlB1bGxpbmcgd2l0aG91dCBzcGVjaWZ5aW5nIGhvdyB0byByZWNvbmNpbGUiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsLnJlYmFzZSBub3Qgc2V0IGFuZCAtLWZmLW9ubHkgZ2l2ZW4nICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IHB1bGwgLS1mZi1vbmx5IC4gYzEgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIlB1bGxpbmcgd2l0aG91dCBzcGVjaWZ5aW5nIGhvdyB0byByZWNvbmNpbGUiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3QgLWYgYzAuYyAmJgorCXRlc3QgLWYgYzEuYyAmJgorCXRlc3QgISAtZiBjMi5jICYmCisJdGVzdCAhIC1mIGMzLmMgJiYKKwlnaXQgbWVyZ2UgYzIgJiYKKwl0ZXN0IC1mIGMxLmMgJiYKKwl0ZXN0IC1mIGMyLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1mb3J3YXJkIHB1bGwgc3VjY2VlZHMgd2l0aCAidHJ1ZSIgaW4gcHVsbC5mZicgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLmZmIHRydWUgJiYKKwlnaXQgcHVsbCAuIGMxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgYzEpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsLmZmPXRydWUgb3ZlcnJpZGVzIG1lcmdlLmZmPWZhbHNlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfY29uZmlnIG1lcmdlLmZmIGZhbHNlICYmCisJdGVzdF9jb25maWcgcHVsbC5mZiB0cnVlICYmCisJZ2l0IHB1bGwgLiBjMSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIGMxKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1mb3J3YXJkIHB1bGwgY3JlYXRlcyBtZXJnZSB3aXRoICJmYWxzZSIgaW4gcHVsbC5mZicgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLmZmIGZhbHNlICYmCisJZ2l0IHB1bGwgLiBjMSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgYzApIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiA9ICIkKGdpdCByZXYtcGFyc2UgYzEpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIHByZXZlbnRzIG5vbi1mYXN0LWZvcndhcmQgd2l0aCAib25seSIgaW4gcHVsbC5mZicgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLmZmIG9ubHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuIGMzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKG91cnMgaW4gcHVsbC50d29oZWFkKScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgY29uZmlnIHB1bGwudHdvaGVhZCBvdXJzICYmCisJZ2l0IG1lcmdlIGMyICYmCisJdGVzdCAtZiBjMS5jICYmCisJISB0ZXN0IC1mIGMyLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiBhbmQgYzMgKHJlY3Vyc2l2ZSBpbiBwdWxsLm9jdG9wdXMpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBjb25maWcgcHVsbC5vY3RvcHVzICJyZWN1cnNpdmUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMyIGMzICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyIGFuZCBjMyAocmVjdXJzaXZlIGFuZCBvY3RvcHVzIGluIHB1bGwub2N0b3B1cyknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IGNvbmZpZyBwdWxsLm9jdG9wdXMgInJlY3Vyc2l2ZSBvY3RvcHVzIiAmJgorCWdpdCBtZXJnZSBjMiBjMyAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMSkiICE9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMyKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMikiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMzKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMykiICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwl0ZXN0IC1mIGMwLmMgJiYKKwl0ZXN0IC1mIGMxLmMgJiYKKwl0ZXN0IC1mIGMyLmMgJiYKKwl0ZXN0IC1mIGMzLmMKKycKKworY29uZmxpY3RfY291bnQoKQoreworCXsKKwkJZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkKKwkJZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQKKwl9IHwgd2MgLWwKK30KKworIyBjNCAtIGM1CisjICAgIFwgYzYKKyMKKyMgVGhlcmUgYXJlIHR3byBjb25mbGljdHMgaGVyZToKKyMKKyMgMSkgQmVjYXVzZSBmb28uYyBpcyByZW5hbWVkIHRvIGJhci5jLCByZWN1cnNpdmUgd2lsbCBoYW5kbGUgdGhpcywKKyMgcmVzb2x2ZSB3b24ndC4KKyMKKyMgMikgT25lIGluIGNvbmZsaWN0LmMgYW5kIHRoYXQgd2lsbCBhbHdheXMgZmFpbC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29uZmxpY3RlZCBtZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwllY2hvIEEgPmNvbmZsaWN0LmMgJiYKKwlnaXQgYWRkIGNvbmZsaWN0LmMgJiYKKwllY2hvIGNvbnRlbnRzID5mb28uYyAmJgorCWdpdCBhZGQgZm9vLmMgJiYKKwlnaXQgY29tbWl0IC1tIGM0ICYmCisJZ2l0IHRhZyBjNCAmJgorCWVjaG8gQiA+Y29uZmxpY3QuYyAmJgorCWdpdCBhZGQgY29uZmxpY3QuYyAmJgorCWdpdCBtdiBmb28uYyBiYXIuYyAmJgorCWdpdCBjb21taXQgLW0gYzUgJiYKKwlnaXQgdGFnIGM1ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNCAmJgorCWVjaG8gQyA+Y29uZmxpY3QuYyAmJgorCWdpdCBhZGQgY29uZmxpY3QuYyAmJgorCWVjaG8gc2Vjb25kbGluZSA+PiBmb28uYyAmJgorCWdpdCBhZGQgZm9vLmMgJiYKKwlnaXQgY29tbWl0IC1tIGM2ICYmCisJZ2l0IHRhZyBjNgorJworCisjIEZpcnN0IGRvIHRoZSBtZXJnZSB3aXRoIHJlc29sdmUgYW5kIHJlY3Vyc2l2ZSB0aGVuIHZlcmlmeSB0aGF0CisjIHJlY3Vyc2l2ZSBpcyBjaG9zZW4uCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHBpY2tzIHVwIHRoZSBiZXN0IHJlc3VsdCcgJworCWdpdCBjb25maWcgLS11bnNldC1hbGwgcHVsbC50d29oZWFkICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZXNvbHZlIGM2ICYmCisJcmVzb2x2ZV9jb3VudD0kKGNvbmZsaWN0X2NvdW50KSAmJgorCWdpdCByZXNldCAtLWhhcmQgYzUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIGM2ICYmCisJcmVjdXJzaXZlX2NvdW50PSQoY29uZmxpY3RfY291bnQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgLXMgcmVzb2x2ZSBjNiAmJgorCWF1dG9fY291bnQ9JChjb25mbGljdF9jb3VudCkgJiYKKwl0ZXN0ICRhdXRvX2NvdW50ID0gJHJlY3Vyc2l2ZV9jb3VudCAmJgorCXRlc3QgJGF1dG9fY291bnQgIT0gJHJlc29sdmVfY291bnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgcGlja3MgdXAgdGhlIGJlc3QgcmVzdWx0IChmcm9tIGNvbmZpZyknICcKKwlnaXQgY29uZmlnIHB1bGwudHdvaGVhZCAicmVjdXJzaXZlIHJlc29sdmUiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZXNvbHZlIGM2ICYmCisJcmVzb2x2ZV9jb3VudD0kKGNvbmZsaWN0X2NvdW50KSAmJgorCWdpdCByZXNldCAtLWhhcmQgYzUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIGM2ICYmCisJcmVjdXJzaXZlX2NvdW50PSQoY29uZmxpY3RfY291bnQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjNiAmJgorCWF1dG9fY291bnQ9JChjb25mbGljdF9jb3VudCkgJiYKKwl0ZXN0ICRhdXRvX2NvdW50ID0gJHJlY3Vyc2l2ZV9jb3VudCAmJgorCXRlc3QgJGF1dG9fY291bnQgIT0gJHJlc29sdmVfY291bnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZXJyb3JzIG91dCBvbiBpbnZhbGlkIHN0cmF0ZWd5JyAnCisJZ2l0IGNvbmZpZyBwdWxsLnR3b2hlYWQgImZvb2JhciIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGM1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGM2CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGVycm9ycyBvdXQgb24gaW52YWxpZCBzdHJhdGVneScgJworCWdpdCBjb25maWcgLS11bnNldC1hbGwgcHVsbC50d29oZWFkICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyAicmVzb2x2ZSByZWN1cnNpdmUiIGM2CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwMi1tZXJnZS1vY3RvcHVzLW1hbnkuc2ggYi90L3Q3NjAyLW1lcmdlLW9jdG9wdXMtbWFueS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YWJlNDQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzYwMi1tZXJnZS1vY3RvcHVzLW1hbnkuc2gKQEAgLTAsMCArMSwxMDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWVyZ2UKKworVGVzdGluZyBvY3RvcHVzIG1lcmdlIHdpdGggbW9yZSB0aGFuIDI1IHJlZnMuJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGMwID4gYzAuYyAmJgorCWdpdCBhZGQgYzAuYyAmJgorCWdpdCBjb21taXQgLW0gYzAgJiYKKwlnaXQgdGFnIGMwICYmCisJaT0xICYmCisJd2hpbGUgdGVzdCAkaSAtbGUgMzAKKwlkbworCQlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJCWVjaG8gYyRpID4gYyRpLmMgJiYKKwkJZ2l0IGFkZCBjJGkuYyAmJgorCQlnaXQgY29tbWl0IC1tIGMkaSAmJgorCQlnaXQgdGFnIGMkaSAmJgorCQlpPSQoZXhwciAkaSArIDEpIHx8IHJldHVybiAxCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyLCBjMywgYzQsIC4uLiBjMjknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJaT0yICYmCisJcmVmcz0iIiAmJgorCXdoaWxlIHRlc3QgJGkgLWxlIDMwCisJZG8KKwkJcmVmcz0iJHJlZnMgYyRpIgorCQlpPSQoZXhwciAkaSArIDEpCisJZG9uZSAmJgorCWdpdCBtZXJnZSAkcmVmcyAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMSkiICE9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJaT0xICYmCisJd2hpbGUgdGVzdCAkaSAtbGUgMzAKKwlkbworCQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYyRpKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReJGkpIiAmJgorCQlpPSQoZXhwciAkaSArIDEpIHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlICYmCisJaT0xICYmCisJd2hpbGUgdGVzdCAkaSAtbGUgMzAKKwlkbworCQl0ZXN0IC1mIGMkaS5jICYmCisJCWk9JChleHByICRpICsgMSkgfHwgcmV0dXJuIDEKKwlkb25lCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitUcnlpbmcgc2ltcGxlIG1lcmdlIHdpdGggYzIKK1RyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCBjMworVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoIGM0CitNZXJnZSBtYWRlIGJ5IHRoZSAnb2N0b3B1cycgc3RyYXRlZ3kuCisgYzIuYyB8IDEgKworIGMzLmMgfCAxICsKKyBjNC5jIHwgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYzIuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBjMy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGM0LmMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvdXRwdXQgdXNlcyBwcmV0dHkgbmFtZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlIGMyIGMzIGM0ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitNZXJnZSBtYWRlIGJ5IHRoZSAncmVjdXJzaXZlJyBzdHJhdGVneS4KKyBjNS5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGM1LmMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSByZWR1Y2VzIGlycmVsZXZhbnQgcmVtb3RlIGhlYWRzJyAnCisJR0lUX01FUkdFX1ZFUkJPU0lUWT0wIGdpdCBtZXJnZSBjNCBjNSA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorRmFzdC1mb3J3YXJkaW5nIHRvOiBjMQorVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoIGMyCitNZXJnZSBtYWRlIGJ5IHRoZSAnb2N0b3B1cycgc3RyYXRlZ3kuCisgYzEuYyB8IDEgKworIGMyLmMgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBjMS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGMyLmMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBmYXN0LWZvcndhcmQgb3V0cHV0IHVzZXMgcHJldHR5IG5hbWVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSBjMSBjMiA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDMtbWVyZ2UtcmVkdWNlLWhlYWRzLnNoIGIvdC90NzYwMy1tZXJnZS1yZWR1Y2UtaGVhZHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTg5NDg5NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MDMtbWVyZ2UtcmVkdWNlLWhlYWRzLnNoCkBAIC0wLDAgKzEsMTY0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG1lcmdlCisKK1Rlc3Rpbmcgb2N0b3B1cyBtZXJnZSB3aGVuIHJlZHVjaW5nIHBhcmVudHMgdG8gaW5kZXBlbmRlbnQgYnJhbmNoZXMuJworCisuIC4vdGVzdC1saWIuc2gKKworIyAwIC0gMQorIyAgIFwgMgorIyAgIFwgMworIyAgIFwgNCAtIDUKKyMKKyMgU28gMSwgMiwgMyBhbmQgNSBzaG91bGQgYmUga2VwdCwgNCBzaG91bGQgYmUgYXZvaWRlZC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGMwID4gYzAuYyAmJgorCWdpdCBhZGQgYzAuYyAmJgorCWdpdCBjb21taXQgLW0gYzAgJiYKKwlnaXQgdGFnIGMwICYmCisJZWNobyBjMSA+IGMxLmMgJiYKKwlnaXQgYWRkIGMxLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMxICYmCisJZ2l0IHRhZyBjMSAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwllY2hvIGMyID4gYzIuYyAmJgorCWdpdCBhZGQgYzIuYyAmJgorCWdpdCBjb21taXQgLW0gYzIgJiYKKwlnaXQgdGFnIGMyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWVjaG8gYzMgPiBjMy5jICYmCisJZ2l0IGFkZCBjMy5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMyAmJgorCWdpdCB0YWcgYzMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZWNobyBjNCA+IGM0LmMgJiYKKwlnaXQgYWRkIGM0LmMgJiYKKwlnaXQgY29tbWl0IC1tIGM0ICYmCisJZ2l0IHRhZyBjNCAmJgorCWVjaG8gYzUgPiBjNS5jICYmCisJZ2l0IGFkZCBjNS5jICYmCisJZ2l0IGNvbW1pdCAtbSBjNSAmJgorCWdpdCB0YWcgYzUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiwgYzMsIGM0LCBjNScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgYzIgYzMgYzQgYzUgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzEpIiAhPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjEpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMykiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjMpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjNSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjQpIiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlICYmCisJdGVzdCAtZiBjMC5jICYmCisJdGVzdCAtZiBjMS5jICYmCisJdGVzdCAtZiBjMi5jICYmCisJdGVzdCAtZiBjMy5jICYmCisJdGVzdCAtZiBjNC5jICYmCisJdGVzdCAtZiBjNS5jICYmCisJZ2l0IHNob3cgLS1mb3JtYXQ9JXMgLXMgPmFjdHVhbCAmJgorCSEgZ3JlcCBjMSBhY3R1YWwgJiYKKwlncmVwIGMyIGFjdHVhbCAmJgorCWdyZXAgYzMgYWN0dWFsICYmCisJISBncmVwIGM0IGFjdHVhbCAmJgorCWdyZXAgYzUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgYzIsIGMzLCBjNCwgYzUgaW50byBjMScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgcHVsbCAuIGMyIGMzIGM0IGM1ICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgIT0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzIpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzMpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4zKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzUpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF40KSIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAmJgorCXRlc3QgLWYgYzAuYyAmJgorCXRlc3QgLWYgYzEuYyAmJgorCXRlc3QgLWYgYzIuYyAmJgorCXRlc3QgLWYgYzMuYyAmJgorCXRlc3QgLWYgYzQuYyAmJgorCXRlc3QgLWYgYzUuYyAmJgorCWdpdCBzaG93IC0tZm9ybWF0PSVzIC1zID5hY3R1YWwgJiYKKwkhIGdyZXAgYzEgYWN0dWFsICYmCisJZ3JlcCBjMiBhY3R1YWwgJiYKKwlncmVwIGMzIGFjdHVhbCAmJgorCSEgZ3JlcCBjNCBhY3R1YWwgJiYKKwlncmVwIGM1IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWZvciBpIGluIEEgQiBDIEQgRQorCWRvCisJCWVjaG8gJGkgPiAkaS5jICYmCisJCWdpdCBhZGQgJGkuYyAmJgorCQlnaXQgY29tbWl0IC1tICRpICYmCisJCWdpdCB0YWcgJGkKKwlkb25lICYmCisJZ2l0IHJlc2V0IC0taGFyZCBBICYmCisJZm9yIGkgaW4gRiBHIEggSQorCWRvCisJCWVjaG8gJGkgPiAkaS5jICYmCisJCWdpdCBhZGQgJGkuYyAmJgorCQlnaXQgY29tbWl0IC1tICRpICYmCisJCWdpdCB0YWcgJGkKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIEUgYW5kIEknICcKKwlnaXQgcmVzZXQgLS1oYXJkIEEgJiYKKwlnaXQgbWVyZ2UgRSBJCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXJnZSByZXN1bHQnICcKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXjEpID0gJChnaXQgcmV2LXBhcnNlIEUpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSA9ICQoZ2l0IHJldi1wYXJzZSBJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgY29uZmxpY3RzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBFICYmCisJZWNobyBmb28gPiBmaWxlLmMgJiYKKwlnaXQgYWRkIGZpbGUuYyAmJgorCWdpdCBjb21taXQgLW0gRTIgJiYKKwlnaXQgdGFnIEUyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBJICYmCisJZWNobyBiYXIgPmZpbGUuYyAmJgorCWdpdCBhZGQgZmlsZS5jICYmCisJZ2l0IGNvbW1pdCAtbSBJMiAmJgorCWdpdCB0YWcgSTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgRTIgYW5kIEkyLCBjYXVzaW5nIGEgY29uZmxpY3QgYW5kIHJlc29sdmUgaXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRTIgSTIgJiYKKwllY2hvIGJheiA+IGZpbGUuYyAmJgorCWdpdCBhZGQgZmlsZS5jICYmCisJZ2l0IGNvbW1pdCAtbSAicmVzb2x2ZSBjb25mbGljdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1lcmdlIHJlc3VsdCcgJworCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReMSkgPSAkKGdpdCByZXYtcGFyc2UgRTIpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSA9ICQoZ2l0IHJldi1wYXJzZSBJMikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1mb3J3YXJkIHRvIHJlZHVuZGFudCByZWZzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSBjNCBjNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWVyZ2UgcmVzdWx0JyAnCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgYzUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHVwLXRvLWRhdGUgcmVkdW5kYW50IHJlZnMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGM1ICYmCisJZ2l0IG1lcmdlIGMwIGM0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXJnZSByZXN1bHQnICcKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBjNSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjA0LW1lcmdlLWN1c3RvbS1tZXNzYWdlLnNoIGIvdC90NzYwNC1tZXJnZS1jdXN0b20tbWVzc2FnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZDRmOTYwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzYwNC1tZXJnZS1jdXN0b20tbWVzc2FnZS5zaApAQCAtMCwwICsxLDExNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBtZXJnZQorCitUZXN0aW5nIG1lcmdlIHdoZW4gdXNpbmcgYSBjdXN0b20gbWVzc2FnZSBmb3IgdGhlIG1lcmdlIGNvbW1pdC4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitjcmVhdGVfbWVyZ2VfbXNncygpIHsKKwllY2hvID5leHAuc3ViamVjdCAiY3VzdG9tIG1lc3NhZ2UiCisKKwljcCBleHAuc3ViamVjdCBleHAubG9nICYmCisJZWNobyA+PmV4cC5sb2cgIiIgJiYKKwllY2hvID4+ZXhwLmxvZyAiKiB0YWcgJ2MyJzoiICYmCisJZWNobyA+PmV4cC5sb2cgIiAgYzIiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBjMCA+YzAuYyAmJgorCWdpdCBhZGQgYzAuYyAmJgorCWdpdCBjb21taXQgLW0gYzAgJiYKKwlnaXQgdGFnIGMwICYmCisJZWNobyBjMSA+YzEuYyAmJgorCWdpdCBhZGQgYzEuYyAmJgorCWdpdCBjb21taXQgLW0gYzEgJiYKKwlnaXQgdGFnIGMxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWVjaG8gYzIgPmMyLmMgJiYKKwlnaXQgYWRkIGMyLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMyICYmCisJZ2l0IHRhZyBjMiAmJgorCWNyZWF0ZV9tZXJnZV9tc2dzCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzIgd2l0aCBhIGN1c3RvbSBtZXNzYWdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSAtbSAiJChjYXQgZXhwLnN1YmplY3QpIiBjMiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+cmF3ICYmCisJc2VkIC1lICIxLC9eJC9kIiByYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cC5zdWJqZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtLWxvZyBhcHBlbmRzIHRvIGN1c3RvbSBtZXNzYWdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSAtLWxvZyAtbSAiJChjYXQgZXhwLnN1YmplY3QpIiBjMiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+cmF3ICYmCisJc2VkIC1lICIxLC9eJC9kIiByYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cC5sb2cgYWN0dWFsCisnCisKK21lc2dfd2l0aF9jb21tZW50X2FuZF9uZXdsaW5lcz0nCisjIHRleHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGZpbGUgd2l0aCBjb21tZW50IGxpbmUgYW5kIHRyYWlsaW5nIG5ld2xpbmVzJyAgJworCXByaW50ZiAiJXMiICIkbWVzZ193aXRoX2NvbW1lbnRfYW5kX25ld2xpbmVzIiA+ZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzICh2ZXJiYXRpbSBvcHRpb24pJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSAtLWNsZWFudXA9dmVyYmF0aW0gLUYgZXhwZWN0IGMyICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yYXcgJiYKKwlzZWQgLWUgIjEsL14kL2QiIHJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlcyAod2hpdGVzcGFjZSBvcHRpb24pJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgIiIgIiMgdGV4dCIgIiIgPnRleHQgJiYKKwllY2hvICIjIHRleHQiID5leHBlY3QgJiYKKwlnaXQgbWVyZ2UgLS1jbGVhbnVwPXdoaXRlc3BhY2UgLUYgdGV4dCBjMiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+cmF3ICYmCisJc2VkIC1lICIxLC9eJC9kIiByYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBtZXJnZSBtZXNzYWdlcyAoc2Npc3NvcnMgb3B0aW9uKScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwljYXQgPnRleHQgPDwtXEVPRiAmJgorCisJIyB0byBiZSBrZXB0CisKKwkgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSMgdG8gYmUga2VwdCwgdG9vCisJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJdG8gYmUgcmVtb3ZlZAorCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXRvIGJlIHJlbW92ZWQsIHRvbworCUVPRgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSMgdG8gYmUga2VwdAorCisJICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkjIHRvIGJlIGtlcHQsIHRvbworCUVPRgorCWdpdCBtZXJnZSAtLWNsZWFudXA9c2Npc3NvcnMgLWUgLUYgdGV4dCBjMiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+cmF3ICYmCisJc2VkIC1lICIxLC9eJC9kIiByYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZXMgKHN0cmlwIG9wdGlvbiknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF93cml0ZV9saW5lcyAiIiAiIyB0ZXh0IiAic2FtcGxlIiAiIiA+dGV4dCAmJgorCWVjaG8gc2FtcGxlID5leHBlY3QgJiYKKwlnaXQgbWVyZ2UgLS1jbGVhbnVwPXN0cmlwIC1GIHRleHQgYzIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPnJhdyAmJgorCXNlZCAtZSAiMSwvXiQvZCIgcmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwNS1tZXJnZS1yZXNvbHZlLnNoIGIvdC90NzYwNS1tZXJnZS1yZXNvbHZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkNTZjMzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjA1LW1lcmdlLXJlc29sdmUuc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBtZXJnZQorCitUZXN0aW5nIHRoZSByZXNvbHZlIHN0cmF0ZWd5LicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBjMCA+IGMwLmMgJiYKKwlnaXQgYWRkIGMwLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMwICYmCisJZ2l0IHRhZyBjMCAmJgorCWVjaG8gYzEgPiBjMS5jICYmCisJZ2l0IGFkZCBjMS5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMSAmJgorCWdpdCB0YWcgYzEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZWNobyBjMiA+IGMyLmMgJiYKKwlnaXQgYWRkIGMyLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMyICYmCisJZ2l0IHRhZyBjMiAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwllY2hvIGMzID4gYzIuYyAmJgorCWdpdCBhZGQgYzIuYyAmJgorCWdpdCBjb21taXQgLW0gYzMgJiYKKwlnaXQgdGFnIGMzCisnCisKK21lcmdlX2MxX3RvX2MyX2NtZHM9JworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgLXMgcmVzb2x2ZSBjMiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMSkiICE9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMyKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMikiICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwl0ZXN0IC1mIGMwLmMgJiYKKwl0ZXN0IC1mIGMxLmMgJiYKKwl0ZXN0IC1mIGMyLmMgJiYKKwl0ZXN0IDMgPSAkKGdpdCBscy10cmVlIC1yIEhFQUQgfCB3YyAtbCkgJiYKKwl0ZXN0IDMgPSAkKGdpdCBscy1maWxlcyB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB0byBjMicgICAgICAgICIkbWVyZ2VfYzFfdG9fYzJfY21kcyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgdG8gYzIsIGFnYWluJyAiJG1lcmdlX2MxX3RvX2MyX2NtZHMiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMyIHRvIGMzIChmYWlscyknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlc29sdmUgYzMKKycKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwNi1tZXJnZS1jdXN0b20uc2ggYi90L3Q3NjA2LW1lcmdlLWN1c3RvbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZThjNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzYwNi1tZXJnZS1jdXN0b20uc2gKQEAgLTAsMCArMSw5MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249ImdpdCBtZXJnZQorCitUZXN0aW5nIGEgY3VzdG9tIHN0cmF0ZWd5LgorCisqICAgKEhFQUQsIG1hc3RlcikgTWVyZ2UgY29tbWl0ICdjMycKK3xcCit8ICogKHRhZzogYzMpIGMzCisqIHwgKHRhZzogYzEpIGMxCit8LworfCAqIHRhZzogYzIpIGMyCit8LworKiAodGFnOiBjMCkgYzAKKyIKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBjdXN0b20gc3RyYXRlZ3knICcKKwljYXQgPmdpdC1tZXJnZS10aGVpcnMgPDwtRU9GICYmCisJIyEkU0hFTExfUEFUSAorCWV2YWwgZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IFxcXCRcJCMKKwlFT0YKKworCWNobW9kICt4IGdpdC1tZXJnZS10aGVpcnMgJiYKKwlQQVRIPS46JFBBVEggJiYKKwlleHBvcnQgUEFUSAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGMwIGMwLmMgJiYKKwl0ZXN0X2NvbW1pdCBjMSBjMS5jICYmCisJZ2l0IHJlc2V0IC0ta2VlcCBjMCAmJgorCWVjaG8gYzFjMSA+YzEuYyAmJgorCWdpdCBhZGQgYzEuYyAmJgorCXRlc3RfY29tbWl0IGMyIGMyLmMgJiYKKwlnaXQgcmVzZXQgLS1rZWVwIGMwICYmCisJdGVzdF9jb21taXQgYzMgYzMuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMiB3aXRoIGEgY3VzdG9tIHN0cmF0ZWd5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCisJZ2l0IHJldi1wYXJzZSBjMSA+aGVhZC5vbGQgJiYKKwlnaXQgcmV2LXBhcnNlIGMyID5zZWNvbmQtcGFyZW50LmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSBjMl57dHJlZX0gPnRyZWUuZXhwZWN0ZWQgJiYKKwlnaXQgbWVyZ2UgLXMgdGhlaXJzIGMyICYmCisKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmhlYWQubmV3ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgPmZpcnN0LXBhcmVudCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4yID5zZWNvbmQtcGFyZW50ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSA+dHJlZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjMiBIRUFEICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYzIgJiYKKworCSEgdGVzdF9jbXAgaGVhZC5vbGQgaGVhZC5uZXcgJiYKKwl0ZXN0X2NtcCBoZWFkLm9sZCBmaXJzdC1wYXJlbnQgJiYKKwl0ZXN0X2NtcCBzZWNvbmQtcGFyZW50LmV4cGVjdGVkIHNlY29uZC1wYXJlbnQgJiYKKwl0ZXN0X2NtcCB0cmVlLmV4cGVjdGVkIHRyZWUgJiYKKwl0ZXN0IC1mIGMwLmMgJiYKKwlncmVwIGMxYzEgYzEuYyAmJgorCXRlc3QgLWYgYzIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cml2aWFsIG1lcmdlIHdpdGggY3VzdG9tIHN0cmF0ZWd5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCisJZ2l0IHJldi1wYXJzZSBjMSA+aGVhZC5vbGQgJiYKKwlnaXQgcmV2LXBhcnNlIGMzID5zZWNvbmQtcGFyZW50LmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSBjM157dHJlZX0gPnRyZWUuZXhwZWN0ZWQgJiYKKwlnaXQgbWVyZ2UgLXMgdGhlaXJzIGMzICYmCisKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmhlYWQubmV3ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgPmZpcnN0LXBhcmVudCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4yID5zZWNvbmQtcGFyZW50ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSA+dHJlZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjMyBIRUFEICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYzMgJiYKKworCSEgdGVzdF9jbXAgaGVhZC5vbGQgaGVhZC5uZXcgJiYKKwl0ZXN0X2NtcCBoZWFkLm9sZCBmaXJzdC1wYXJlbnQgJiYKKwl0ZXN0X2NtcCBzZWNvbmQtcGFyZW50LmV4cGVjdGVkIHNlY29uZC1wYXJlbnQgJiYKKwl0ZXN0X2NtcCB0cmVlLmV4cGVjdGVkIHRyZWUgJiYKKwl0ZXN0IC1mIGMwLmMgJiYKKwkhIHRlc3QgLWUgYzEuYyAmJgorCXRlc3QgLWYgYzMuYworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDctbWVyZ2Utb3ZlcndyaXRlLnNoIGIvdC90NzYwNy1tZXJnZS1vdmVyd3JpdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGQ4YWI3ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MDctbWVyZ2Utb3ZlcndyaXRlLnNoCkBAIC0wLDAgKzEsMTk1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LW1lcmdlCisKK0RvIG5vdCBvdmVyd3JpdGUgY2hhbmdlcy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGMwIGMwLmMgJiYKKwl0ZXN0X2NvbW1pdCBjMSBjMS5jICYmCisJdGVzdF9jb21taXQgYzFhIGMxLmMgImMxIGEiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfY29tbWl0IGMyIGMyLmMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJbWtkaXIgc3ViICYmCisJZWNobyAic3ViL2YiID4gc3ViL2YgJiYKKwlta2RpciBzdWIyICYmCisJZWNobyAic3ViMi9mIiA+IHN1YjIvZiAmJgorCWdpdCBhZGQgc3ViL2Ygc3ViMi9mICYmCisJZ2l0IGNvbW1pdCAtbSBzdWIgJiYKKwlnaXQgdGFnIHN1YiAmJgorCWVjaG8gIlZFUlkgSU1QT1JUQU5UIENIQU5HRVMiID4gaW1wb3J0YW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwljcCBpbXBvcnRhbnQgYzIuYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3RfY21wIGltcG9ydGFudCBjMi5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgb3ZlcndyaXRlIHRyYWNrZWQgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwljcCBpbXBvcnRhbnQgYzIuYyAmJgorCWdpdCBhZGQgYzIuYyAmJgorCWdpdCBjb21taXQgLW0gaW1wb3J0YW50ICYmCisJZ2l0IGNoZWNrb3V0IGMyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSBuZXcgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwljcCBpbXBvcnRhbnQgYzIuYyAmJgorCWdpdCBhZGQgYzIuYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3RfY21wIGltcG9ydGFudCBjMi5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSBzdGFnZWQgY2hhbmdlcycgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwljcCBpbXBvcnRhbnQgYzIuYyAmJgorCWdpdCBhZGQgYzIuYyAmJgorCXJtIGMyLmMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYzIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwlnaXQgY2hlY2tvdXQgYzIuYyAmJgorCXRlc3RfY21wIGltcG9ydGFudCBjMi5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSByZW1vdmVkIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IHJtIGMxLmMgJiYKKwlnaXQgY29tbWl0IC1tICJybSBjMS5jIiAmJgorCWNwIGltcG9ydGFudCBjMS5jICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMxYSAmJgorCXRlc3RfY21wIGltcG9ydGFudCBjMS5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSByZS1hZGRlZCBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBybSBjMS5jICYmCisJZ2l0IGNvbW1pdCAtbSAicm0gYzEuYyIgJiYKKwljcCBpbXBvcnRhbnQgYzEuYyAmJgorCWdpdCBhZGQgYzEuYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMWEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgYzEuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxsIG5vdCBvdmVyd3JpdGUgcmVtb3ZlZCBmaWxlIHdpdGggc3RhZ2VkIGNoYW5nZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IHJtIGMxLmMgJiYKKwlnaXQgY29tbWl0IC1tICJybSBjMS5jIiAmJgorCWNwIGltcG9ydGFudCBjMS5jICYmCisJZ2l0IGFkZCBjMS5jICYmCisJcm0gYzEuYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMWEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwlnaXQgY2hlY2tvdXQgYzEuYyAmJgorCXRlc3RfY21wIGltcG9ydGFudCBjMS5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSB1bnN0YWdlZCBjaGFuZ2VzIGluIHJlbmFtZWQgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbXYgYzEuYyBvdGhlci5jICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWUgJiYKKwljcCBpbXBvcnRhbnQgb3RoZXIuYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMWEgPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCBvdGhlci5jIiBvdXQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBvdGhlci5jfkhFQUQgJiYKKwl0ZXN0ICQoZ2l0IGhhc2gtb2JqZWN0IG90aGVyLmN+SEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgYzFhOmMxLmMpICYmCisJdGVzdF9jbXAgaW1wb3J0YW50IG90aGVyLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIHVudHJhY2tlZCBzdWJ0cmVlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXJtIC1yZiBzdWIgJiYKKwlta2RpciAtcCBzdWIvZiAmJgorCWNwIGltcG9ydGFudCBzdWIvZi9pbXBvcnRhbnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc3ViICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdF9jbXAgaW1wb3J0YW50IHN1Yi9mL2ltcG9ydGFudAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2Vycm9yOiBUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6CisJc3ViCisJc3ViMgorUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4KK0Fib3J0aW5nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIHVudHJhY2tlZCBmaWxlIGluIGxlYWRpbmcgcGF0aCcgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlybSAtcmYgc3ViICYmCisJY3AgaW1wb3J0YW50IHN1YiAmJgorCWNwIGltcG9ydGFudCBzdWIyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHN1YiAyPm91dCAmJgorCXRlc3RfaTE4bmNtcCBvdXQgZXhwZWN0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdF9jbXAgaW1wb3J0YW50IHN1YiAmJgorCXRlc3RfY21wIGltcG9ydGFudCBzdWIyICYmCisJcm0gLWYgc3ViIHN1YjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnd2lsbCBub3Qgb3ZlcndyaXRlIHVudHJhY2tlZCBzeW1saW5rIGluIGxlYWRpbmcgcGF0aCcgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlybSAtcmYgc3ViICYmCisJbWtkaXIgc3ViMiAmJgorCWxuIC1zIHN1YjIgc3ViICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHN1YiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxsIG5vdCBiZSBjb25mdXNlZCBieSBzeW1saW5rIGluIGxlYWRpbmcgcGF0aCcgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlybSAtcmYgc3ViICYmCisJdGVzdF9sbl9zX2FkZCBzdWIyIHN1YiAmJgorCWdpdCBjb21taXQgLW0gbG4gJiYKKwlnaXQgY2hlY2tvdXQgc3ViCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorZXJyb3I6IFVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZSAnYzAuYycgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UuCitmYXRhbDogcmVhZC10cmVlIGZhaWxlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZSBvbiB1bmJvcm4gYnJhbmNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBybSAtZnIgLiAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBuZXcgJiYKKwljcCBpbXBvcnRhbnQgYzAuYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMCAyPm91dCAmJgorCXRlc3RfaTE4bmNtcCBvdXQgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZSBvbiB1bmJvcm4gYnJhbmNoIC5naXQvTUVSR0VfSEVBRCBzYW5pdHkgZXRjLicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gYzAuYyIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgYzAuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgbWVyZ2UgbGVhdmVzIHVuYm9ybiBicmFuY2ggaW4gdGhlIHdvbWInICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHVuYm9ybiBicmFuY2ggYW5kIGNvbnRlbnQnICcKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy91bmJvcm4gJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZWNobyBmb28gPiB0cmFja2VkLWZpbGUgJiYKKwlnaXQgYWRkIHRyYWNrZWQtZmlsZSAmJgorCWVjaG8gYmFyID4gdW50cmFja2VkLWZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3QgY2xvYmJlciBXVC9pbmRleCB3aGVuIG1lcmdpbmcgaW50byB1bmJvcm4nICcKKwlnaXQgbWVyZ2UgbWFzdGVyICYmCisJZ3JlcCBmb28gdHJhY2tlZC1maWxlICYmCisJZ2l0IHNob3cgOnRyYWNrZWQtZmlsZSA+ZXhwZWN0ICYmCisJZ3JlcCBmb28gZXhwZWN0ICYmCisJZ3JlcCBiYXIgdW50cmFja2VkLWZpbGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjA4LW1lcmdlLW1lc3NhZ2VzLnNoIGIvdC90NzYwOC1tZXJnZS1tZXNzYWdlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZTdlMGE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzYwOC1tZXJnZS1tZXNzYWdlcy5zaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBhdXRvLWdlbmVyYXRlZCBtZXJnZSBtZXNzYWdlcycKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19vbmVsaW5lKCkgeworCWVjaG8gIiQxIiB8IHNlZCAicy9RLycvZyIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBsb2NhbCBicmFuY2gnICcKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItMSAmJgorCWdpdCBjaGVja291dCAtYiBsb2NhbC1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCBicmFuY2gtMSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItMiAmJgorCWdpdCBtZXJnZSBsb2NhbC1icmFuY2ggJiYKKwljaGVja19vbmVsaW5lICJNZXJnZSBicmFuY2ggUWxvY2FsLWJyYW5jaFEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG9jdG9wdXMgYnJhbmNoZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgb2N0b3B1cy1hIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG9jdG9wdXMtMSAmJgorCWdpdCBjaGVja291dCAtYiBvY3RvcHVzLWIgbWFzdGVyICYmCisJdGVzdF9jb21taXQgb2N0b3B1cy0yICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSBvY3RvcHVzLWEgb2N0b3B1cy1iICYmCisJY2hlY2tfb25lbGluZSAiTWVyZ2UgYnJhbmNoZXMgUW9jdG9wdXMtYVEgYW5kIFFvY3RvcHVzLWJRIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB0YWcnICcKKwlnaXQgY2hlY2tvdXQgLWIgdGFnLWJyYW5jaCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCB0YWctMSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItMyAmJgorCWdpdCBtZXJnZSB0YWctMSAmJgorCWNoZWNrX29uZWxpbmUgIk1lcmdlIHRhZyBRdGFnLTFRIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWJpZ3VvdXMgdGFnJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGFtYmlndW91cyBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBhbWJpZ3VvdXMgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgbWFzdGVyLTQgJiYKKwlnaXQgbWVyZ2UgYW1iaWd1b3VzICYmCisJY2hlY2tfb25lbGluZSAiTWVyZ2UgdGFnIFFhbWJpZ3VvdXNRIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUtdHJhY2tpbmcgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHJlbW90ZSBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCByZW1vdGUtMSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIHJlbW90ZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItNSAmJgorCWdpdCBtZXJnZSBvcmlnaW4vbWFzdGVyICYmCisJY2hlY2tfb25lbGluZSAiTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBRb3JpZ2luL21hc3RlclEiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwOS1tZXJnZS1jby1lcnJvci1tc2dzLnNoIGIvdC90NzYwOS1tZXJnZS1jby1lcnJvci1tc2dzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVjODg5NGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjA5LW1lcmdlLWNvLWVycm9yLW1zZ3Muc2gKQEAgLTAsMCArMSwxMzggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd1bnBhY2stdHJlZXMgZXJyb3IgbWVzc2FnZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBvbmUgPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBGaXJzdCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCAmJgorCWVjaG8gdHdvID50d28gJiYKKwllY2hvIHRocmVlID50aHJlZSAmJgorCWVjaG8gZm91ciA+Zm91ciAmJgorCWVjaG8gZml2ZSA+Zml2ZSAmJgorCWdpdCBhZGQgdHdvIHRocmVlIGZvdXIgZml2ZSAmJgorCWdpdCBjb21taXQgLW0gU2Vjb25kICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBvdGhlciA+dHdvICYmCisJZWNobyBvdGhlciA+dGhyZWUgJiYKKwllY2hvIG90aGVyID5mb3VyICYmCisJZWNobyBvdGhlciA+Zml2ZQorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2Vycm9yOiBUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6CisJZml2ZQorCWZvdXIKKwl0aHJlZQorCXR3bworUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4KK0Fib3J0aW5nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW50cmFja2VkIGZpbGVzIG92ZXJ3cml0dGVuIGJ5IG1lcmdlIChmYXN0IGFuZCBub24tZmFzdCBmb3J3YXJkKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2ggMj5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgb3V0IGV4cGVjdCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBlbXB0eSAmJgorCSgKKwkJR0lUX01FUkdFX1ZFUkJPU0lUWT0wICYmCisJCWV4cG9ydCBHSVRfTUVSR0VfVkVSQk9TSVRZICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2ggMj5vdXQyCisJKSAmJgorCXRlc3RfaTE4bmNtcCBvdXQyIGV4cGVjdCAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitlcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6CisJZm91cgorCXRocmVlCisJdHdvCitQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuCitlcnJvcjogVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOgorCWZpdmUKK1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuCitBYm9ydGluZworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VudHJhY2tlZCBmaWxlcyBvciBsb2NhbCBjaGFuZ2VzIG92ZXdyaXR0ZW4gYnkgbWVyZ2UnICcKKwlnaXQgYWRkIHR3byAmJgorCWdpdCBhZGQgdGhyZWUgJiYKKwlnaXQgYWRkIGZvdXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoIDI+b3V0ICYmCisJdGVzdF9pMThuY21wIG91dCBleHBlY3QKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitlcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6CisJcmVwL29uZQorCXJlcC90d28KK1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuCitBYm9ydGluZworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nhbm5vdCBzd2l0Y2ggYnJhbmNoZXMgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzJyAnCisJZ2l0IGFkZCBmaXZlICYmCisJbWtkaXIgcmVwICYmCisJZWNobyBvbmUgPnJlcC9vbmUgJiYKKwllY2hvIHR3byA+cmVwL3R3byAmJgorCWdpdCBhZGQgcmVwL29uZSByZXAvdHdvICYmCisJZ2l0IGNvbW1pdCAtbSBGb3VydGggJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyB1bm8gPnJlcC9vbmUgJiYKKwllY2hvIGRvcyA+cmVwL3R3byAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBicmFuY2ggMj5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgb3V0IGV4cGVjdAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2Vycm9yOiBZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDoKKwlyZXAvb25lCisJcmVwL3R3bworUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4KK0Fib3J0aW5nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IHVwdG9kYXRlIGZpbGUgcG9yY2VsYWluIGNoZWNrb3V0IGVycm9yJyAnCisJZ2l0IGFkZCByZXAvb25lIHJlcC90d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgYnJhbmNoIDI+b3V0ICYmCisJdGVzdF9pMThuY21wIG91dCBleHBlY3QKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitlcnJvcjogVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVtOgorCXJlcAorCXJlcDIKKworQWJvcnRpbmcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RfdXB0b2RhdGVfZGlyIHBvcmNlbGFpbiBjaGVja291dCBlcnJvcicgJworCWdpdCBpbml0IHVwdG9kYXRlICYmCisJY2QgdXB0b2RhdGUgJiYKKwlta2RpciByZXAgJiYKKwlta2RpciByZXAyICYmCisJdG91Y2ggcmVwL2ZvbyAmJgorCXRvdWNoIHJlcDIvZm9vICYmCisJZ2l0IGFkZCByZXAvZm9vIHJlcDIvZm9vICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCAmJgorCWdpdCBybSByZXAgLXIgJiYKKwlnaXQgcm0gcmVwMiAtciAmJgorCT5yZXAgJiYKKwk+cmVwMiAmJgorCWdpdCBhZGQgcmVwIHJlcDIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCB0ZXN0IGFzIGEgZmlsZSIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJPnJlcC91bnRyYWNrZWQtZmlsZSAmJgorCT5yZXAyL3VudHJhY2tlZC1maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IGJyYW5jaCAyPm91dCAmJgorCXRlc3RfaTE4bmNtcCBvdXQgLi4vZXhwZWN0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYxMC1tZXJnZXRvb2wuc2ggYi90L3Q3NjEwLW1lcmdldG9vbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZDI4OGRkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzYxMC1tZXJnZXRvb2wuc2gKQEAgLTAsMCArMSw4MDUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggQ2hhcmxlcyBCYWlsZXkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG1lcmdldG9vbAorCitUZXN0aW5nIGJhc2ljIG1lcmdlIHRvb2wgaW52b2NhdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgQWxsIHRoZSBtZXJnZXRvb2wgdGVzdCB3b3JrIGJ5IGNoZWNraW5nIG91dCBhIHRlbXBvcmFyeSBicmFuY2ggYmFzZWQKKyMgb2ZmICdicmFuY2gxJyBhbmQgdGhlbiBtZXJnaW5nIGluIG1hc3RlciBhbmQgY2hlY2tpbmcgdGhlIHJlc3VsdHMgb2YKKyMgcnVubmluZyBtZXJnZXRvb2wKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisJZWNobyBtYXN0ZXIgPmZpbGUxICYmCisJZWNobyBtYXN0ZXIgc3BhY2VkID4ic3BhY2VkIG5hbWUiICYmCisJZWNobyBtYXN0ZXIgZmlsZTExID5maWxlMTEgJiYKKwllY2hvIG1hc3RlciBmaWxlMTIgPmZpbGUxMiAmJgorCWVjaG8gbWFzdGVyIGZpbGUxMyA+ZmlsZTEzICYmCisJZWNobyBtYXN0ZXIgZmlsZTE0ID5maWxlMTQgJiYKKwlta2RpciBzdWJkaXIgJiYKKwllY2hvIG1hc3RlciBzdWIgPnN1YmRpci9maWxlMyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gc3VibW9kICYmCisJKAorCQljZCBzdWJtb2QgJiYKKwkJOiA+Zm9vICYmCisJCWdpdCBhZGQgZm9vICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCBmb28iCisJKSAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIGdpdDovL2V4YW1wbGUuY29tL3N1Ym1vZCBzdWJtb2QgJiYKKwlnaXQgYWRkIGZpbGUxICJzcGFjZWQgbmFtZSIgZmlsZTFbMS00XSBzdWJkaXIvZmlsZTMgLmdpdG1vZHVsZXMgc3VibW9kICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGluaXRpYWwgdmVyc2lvbnMiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMSBtYXN0ZXIgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCWVjaG8gYnJhbmNoMSBjaGFuZ2UgPmZpbGUxICYmCisJZWNobyBicmFuY2gxIG5ld2ZpbGUgPmZpbGUyICYmCisJZWNobyBicmFuY2gxIHNwYWNlZCA+InNwYWNlZCBuYW1lIiAmJgorCWVjaG8gYnJhbmNoMSBib3RoIGFkZGVkID5ib3RoICYmCisJZWNobyBicmFuY2gxIGNoYW5nZSBmaWxlMTEgPmZpbGUxMSAmJgorCWVjaG8gYnJhbmNoMSBjaGFuZ2UgZmlsZTEzID5maWxlMTMgJiYKKwllY2hvIGJyYW5jaDEgc3ViID5zdWJkaXIvZmlsZTMgJiYKKwkoCisJCWNkIHN1Ym1vZCAmJgorCQllY2hvIGJyYW5jaDEgc3VibW9kdWxlID5iYXIgJiYKKwkJZ2l0IGFkZCBiYXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIGJhciBvbiBicmFuY2gxIiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgc3VibW9kLWJyYW5jaDEKKwkpICYmCisJZ2l0IGFkZCBmaWxlMSAic3BhY2VkIG5hbWUiIGZpbGUxMSBmaWxlMTMgZmlsZTIgc3ViZGlyL2ZpbGUzIHN1Ym1vZCAmJgorCWdpdCBhZGQgYm90aCAmJgorCWdpdCBybSBmaWxlMTIgJiYKKwlnaXQgY29tbWl0IC1tICJicmFuY2gxIGNoYW5nZXMiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgZGVsZXRlLWJhc2UgYnJhbmNoMSAmJgorCW1rZGlyIC1wIGEvYSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgb25lIHR3byAzIDQgPmEvYS9maWxlLnR4dCAmJgorCWdpdCBhZGQgYS9hL2ZpbGUudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSJiYXNlIGZpbGUiICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1vdmUtdG8tYiBkZWxldGUtYmFzZSAmJgorCW1rZGlyIC1wIGIvYiAmJgorCWdpdCBtdiBhL2EvZmlsZS50eHQgYi9iL2ZpbGUudHh0ICYmCisJdGVzdF93cml0ZV9saW5lcyBvbmUgdHdvIDQgPmIvYi9maWxlLnR4dCAmJgorCWdpdCBjb21taXQgLWEgLW0ibW92ZSB0byBiIiAmJgorCWdpdCBjaGVja291dCAtYiBtb3ZlLXRvLWMgZGVsZXRlLWJhc2UgJiYKKwlta2RpciAtcCBjL2MgJiYKKwlnaXQgbXYgYS9hL2ZpbGUudHh0IGMvYy9maWxlLnR4dCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgb25lIHR3byAzID5jL2MvZmlsZS50eHQgJiYKKwlnaXQgY29tbWl0IC1hIC1tIm1vdmUgdG8gYyIgJiYKKworCWdpdCBjaGVja291dCAtYiBzdGFzaDEgbWFzdGVyICYmCisJZWNobyBzdGFzaDEgY2hhbmdlIGZpbGUxMSA+ZmlsZTExICYmCisJZ2l0IGFkZCBmaWxlMTEgJiYKKwlnaXQgY29tbWl0IC1tICJzdGFzaDEgY2hhbmdlcyIgJiYKKworCWdpdCBjaGVja291dCAtYiBzdGFzaDIgbWFzdGVyICYmCisJZWNobyBzdGFzaDIgY2hhbmdlIGZpbGUxMSA+ZmlsZTExICYmCisJZ2l0IGFkZCBmaWxlMTEgJiYKKwlnaXQgY29tbWl0IC1tICJzdGFzaDIgY2hhbmdlcyIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCWVjaG8gbWFzdGVyIHVwZGF0ZWQgPmZpbGUxICYmCisJZWNobyBtYXN0ZXIgbmV3ID5maWxlMiAmJgorCWVjaG8gbWFzdGVyIHVwZGF0ZWQgc3BhY2VkID4ic3BhY2VkIG5hbWUiICYmCisJZWNobyBtYXN0ZXIgYm90aCBhZGRlZCA+Ym90aCAmJgorCWVjaG8gbWFzdGVyIHVwZGF0ZWQgZmlsZTEyID5maWxlMTIgJiYKKwllY2hvIG1hc3RlciB1cGRhdGVkIGZpbGUxNCA+ZmlsZTE0ICYmCisJZWNobyBtYXN0ZXIgbmV3IHN1YiA+c3ViZGlyL2ZpbGUzICYmCisJKAorCQljZCBzdWJtb2QgJiYKKwkJZWNobyBtYXN0ZXIgc3VibW9kdWxlID5iYXIgJiYKKwkJZ2l0IGFkZCBiYXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIGJhciBvbiBtYXN0ZXIiICYmCisJCWdpdCBjaGVja291dCAtYiBzdWJtb2QtbWFzdGVyCisJKSAmJgorCWdpdCBhZGQgZmlsZTEgInNwYWNlZCBuYW1lIiBmaWxlMTIgZmlsZTE0IGZpbGUyIHN1YmRpci9maWxlMyBzdWJtb2QgJiYKKwlnaXQgYWRkIGJvdGggJiYKKwlnaXQgcm0gZmlsZTExICYmCisJZ2l0IGNvbW1pdCAtbSAibWFzdGVyIHVwZGF0ZXMiICYmCisKKwlnaXQgY2xlYW4gLWZkeCAmJgorCWdpdCBjaGVja291dCAtYiBvcmRlci1maWxlLXN0YXJ0IG1hc3RlciAmJgorCWVjaG8gc3RhcnQgPmEgJiYKKwllY2hvIHN0YXJ0ID5iICYmCisJZ2l0IGFkZCBhIGIgJiYKKwlnaXQgY29tbWl0IC1tIHN0YXJ0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIG9yZGVyLWZpbGUtc2lkZTEgb3JkZXItZmlsZS1zdGFydCAmJgorCWVjaG8gc2lkZTEgPmEgJiYKKwllY2hvIHNpZGUxID5iICYmCisJZ2l0IGFkZCBhIGIgJiYKKwlnaXQgY29tbWl0IC1tIHNpZGUxICYmCisJZ2l0IGNoZWNrb3V0IC1iIG9yZGVyLWZpbGUtc2lkZTIgb3JkZXItZmlsZS1zdGFydCAmJgorCWVjaG8gc2lkZTIgPmEgJiYKKwllY2hvIHNpZGUyID5iICYmCisJZ2l0IGFkZCBhIGIgJiYKKwlnaXQgY29tbWl0IC1tIHNpZGUyICYmCisKKwlnaXQgY29uZmlnIG1lcmdlLnRvb2wgbXl0b29sICYmCisJZ2l0IGNvbmZpZyBtZXJnZXRvb2wubXl0b29sLmNtZCAiY2F0IFwiXCRSRU1PVEVcIiA+XCJcJE1FUkdFRFwiIiAmJgorCWdpdCBjb25maWcgbWVyZ2V0b29sLm15dG9vbC50cnVzdEV4aXRDb2RlIHRydWUgJiYKKwlnaXQgY29uZmlnIG1lcmdldG9vbC5teWJhc2UuY21kICJjYXQgXCJcJEJBU0VcIiA+XCJcJE1FUkdFRFwiIiAmJgorCWdpdCBjb25maWcgbWVyZ2V0b29sLm15YmFzZS50cnVzdEV4aXRDb2RlIHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VzdG9tIG1lcmdldG9vbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUxICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMiAic3BhY2VkIG5hbWUiICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTIgJiYKKwl5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgJiYKKwllY2hvICJtYXN0ZXIgdXBkYXRlZCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMSAmJgorCWVjaG8gIm1hc3RlciBuZXciID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTIgJiYKKwllY2hvICJtYXN0ZXIgbmV3IHN1YiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJkaXIvZmlsZTMgJiYKKwllY2hvICJicmFuY2gxIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSByZXNvbHZlZCB3aXRoIG1lcmdldG9vbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3VpIG1lcmdldG9vbCcgJworCXRlc3RfY29uZmlnIG1lcmdlLmd1aXRvb2wgbXlndWl0b29sICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLm15Z3VpdG9vbC5jbWQgIihwcmludGYgXCJndWkgXCIgJiYgY2F0IFwiXCRSRU1PVEVcIikgPlwiXCRNRVJHRURcIiIgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZXRvb2wubXlndWl0b29sLnRydXN0RXhpdENvZGUgdHJ1ZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIC0tZ3VpIGJvdGggJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIC1nIGZpbGUxIGZpbGUxICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBmaWxlMiAic3BhY2VkIG5hbWUiICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBmaWxlMTEgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBmaWxlMTIgJiYKKwl5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBzdWJtb2QgJiYKKwllY2hvICJndWkgbWFzdGVyIHVwZGF0ZWQiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTEgJiYKKwllY2hvICJndWkgbWFzdGVyIG5ldyIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMiAmJgorCWVjaG8gImd1aSBtYXN0ZXIgbmV3IHN1YiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJkaXIvZmlsZTMgJiYKKwllY2hvICJicmFuY2gxIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSByZXNvbHZlZCB3aXRoIG1lcmdldG9vbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3VpIG1lcmdldG9vbCB3aXRob3V0IG1lcmdlLmd1aXRvb2wgc2V0IGZhbGxzIGJhY2sgdG8gbWVyZ2UudG9vbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIC0tZ3VpIGJvdGggJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIC1nIGZpbGUxIGZpbGUxICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBmaWxlMiAic3BhY2VkIG5hbWUiICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBmaWxlMTEgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBmaWxlMTIgJiYKKwl5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBzdWJtb2QgJiYKKwllY2hvICJtYXN0ZXIgdXBkYXRlZCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMSAmJgorCWVjaG8gIm1hc3RlciBuZXciID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTIgJiYKKwllY2hvICJtYXN0ZXIgbmV3IHN1YiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJkaXIvZmlsZTMgJiYKKwllY2hvICJicmFuY2gxIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSByZXNvbHZlZCB3aXRoIG1lcmdldG9vbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2V0b29sIGNybGYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJIyBUaGlzIHRlc3RfY29uZmlnIGxpbmUgbXVzdCBnbyBhZnRlciB0aGUgYWJvdmUgcmVzZXQgbGluZSBzbyB0aGF0CisJIyBjb3JlLmF1dG9jcmxmIGlzIHVuY29uZmlndXJlZCBiZWZvcmUgcmVzZXQgcnVucy4gIChUaGUKKwkjIHRlc3RfY29uZmlnIGNvbW1hbmQgdXNlcyB0ZXN0X3doZW5fZmluaXNoZWQgaW50ZXJuYWxseSBhbmQKKwkjIHRlc3Rfd2hlbl9maW5pc2hlZCBpcyBMSUZPLikKKwl0ZXN0X2NvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTIgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sICJzcGFjZWQgbmFtZSIgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIHN1YmRpci9maWxlMyAmJgorCXllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSAmJgorCXllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMiAmJgorCXllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCXRlc3QgIiQocHJpbnRmIHggfCBjYXQgZmlsZTEgLSkiID0gIiQocHJpbnRmICJtYXN0ZXIgdXBkYXRlZFxyXG54IikiICYmCisJdGVzdCAiJChwcmludGYgeCB8IGNhdCBmaWxlMiAtKSIgPSAiJChwcmludGYgIm1hc3RlciBuZXdcclxueCIpIiAmJgorCXRlc3QgIiQocHJpbnRmIHggfCBjYXQgc3ViZGlyL2ZpbGUzIC0pIiA9ICIkKHByaW50ZiAibWFzdGVyIG5ldyBzdWJcclxueCIpIiAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJZWNobyAibWFzdGVyIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSByZXNvbHZlZCB3aXRoIG1lcmdldG9vbCAtIGF1dG9jcmxmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgaW4gc3ViZGlyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgYnJhbmNoMSAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCQl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUzICYmCisJCWVjaG8gIm1hc3RlciBuZXcgc3ViIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBmaWxlMworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2V0b29sIG9uIGZpbGUgaW4gcGFyZW50IGRpcicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwkJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMyAmJgorCQl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIC4uL2ZpbGUxICYmCisJCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLi4vZmlsZTIgLi4vc3BhY2VkXCBuYW1lICYmCisJCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLi4vYm90aCAmJgorCQl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCAuLi9maWxlMTEgJiYKKwkJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgLi4vZmlsZTEyICYmCisJCXllcyAibCIgfCBnaXQgbWVyZ2V0b29sIC4uL3N1Ym1vZCAmJgorCQllY2hvICJtYXN0ZXIgdXBkYXRlZCIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLi4vZmlsZTEgJiYKKwkJZWNobyAibWFzdGVyIG5ldyIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLi4vZmlsZTIgJiYKKwkJZWNobyAiYnJhbmNoMSBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC4uL3N1Ym1vZC9iYXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSByZXNvbHZlZCB3aXRoIG1lcmdldG9vbCAtIHN1YmRpciIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdldG9vbCBza2lwcyBhdXRvcmVzb2x2ZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBicmFuY2gxICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCXllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSAmJgorCXllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMiAmJgorCXllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCW91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKwl0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdldG9vbCBtZXJnZXMgYWxsIGZyb20gc3ViZGlyIChyZXJlcmUgZGlzYWJsZWQpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgYnJhbmNoMSAmJgorCXRlc3RfY29uZmlnIHJlcmVyZS5lbmFibGVkIGZhbHNlICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCQl5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCAuLi9zdWJtb2QgJiYKKwkJeWVzICJkIiAiZCIgfCBnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0ICYmCisJCWVjaG8gIm1hc3RlciB1cGRhdGVkIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCAuLi9maWxlMSAmJgorCQllY2hvICJtYXN0ZXIgbmV3IiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCAuLi9maWxlMiAmJgorCQllY2hvICJtYXN0ZXIgbmV3IHN1YiIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgZmlsZTMgJiYKKwkJKCBjZCAuLiAmJiBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiApICYmCisJCWVjaG8gIm1hc3RlciBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC4uL3N1Ym1vZC9iYXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMiByZXNvbHZlZCBieSBtZXJnZXRvb2wgZnJvbSBzdWJkaXIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgbWVyZ2VzIGFsbCBmcm9tIHN1YmRpciAocmVyZXJlIGVuYWJsZWQpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgYnJhbmNoMSAmJgorCXRlc3RfY29uZmlnIHJlcmVyZS5lbmFibGVkIHRydWUgJiYKKwlybSAtcmYgLmdpdC9yci1jYWNoZSAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwkJeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgLi4vc3VibW9kICYmCisJCXllcyAiZCIgImQiIHwgZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCAmJgorCQllY2hvICJtYXN0ZXIgdXBkYXRlZCIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLi4vZmlsZTEgJiYKKwkJZWNobyAibWFzdGVyIG5ldyIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLi4vZmlsZTIgJiYKKwkJZWNobyAibWFzdGVyIG5ldyBzdWIiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGZpbGUzICYmCisJCSggY2QgLi4gJiYgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gKSAmJgorCQllY2hvICJtYXN0ZXIgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCAuLi9zdWJtb2QvYmFyICYmCisJCWdpdCBjb21taXQgLW0gImJyYW5jaDIgcmVzb2x2ZWQgYnkgbWVyZ2V0b29sIGZyb20gc3ViZGlyIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2V0b29sIHNraXBzIHJlc29sdmVkIHBhdGhzIHdoZW4gcmVyZXJlIGlzIGFjdGl2ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwl0ZXN0X2NvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisJcm0gLXJmIC5naXQvcnItY2FjaGUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwl5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCBzdWJtb2QgJiYKKwl5ZXMgImQiICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCW91dHB1dD0iJCh5ZXMgIm4iIHwgZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdGVkIHN0YXNoIHNldHMgdXAgcmVyZXJlJyAgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwl0ZXN0X2NvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisJZ2l0IGNoZWNrb3V0IHN0YXNoMSAmJgorCWVjaG8gIkNvbmZsaWN0aW5nIHN0YXNoIGNvbnRlbnQiID5maWxlMTEgJiYKKwlnaXQgc3Rhc2ggJiYKKworCWdpdCBjaGVja291dCAtLWRldGFjaCBzdGFzaDIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggYXBwbHkgJiYKKworCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwljb25mbGljdHM9IiQoZ2l0IHJlcmVyZSByZW1haW5pbmcpIiAmJgorCXRlc3QgIiRjb25mbGljdHMiID0gImZpbGUxMSIgJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgIT0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKKworCWdpdCBjb21taXQgLWFtICJzYXZlIHRoZSBzdGFzaCByZXNvbHV0aW9uIiAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBzdGFzaDIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggYXBwbHkgJiYKKworCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwljb25mbGljdHM9IiQoZ2l0IHJlcmVyZSByZW1haW5pbmcpIiAmJgorCXRlc3QgLXogIiRjb25mbGljdHMiICYmCisJb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgorCXRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2V0b29sIHRha2VzIHBhcnRpYWwgcGF0aCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwl0ZXN0X2NvbmZpZyByZXJlcmUuZW5hYmxlZCBmYWxzZSAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgYnJhbmNoMSAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXIgJiYKKworCWVjaG8gIm1hc3RlciBuZXcgc3ViIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1YmRpci9maWxlMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgZGVsZXRlL2RlbGV0ZSBjb25mbGljdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IG1vdmUtdG8tYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtb3ZlLXRvLWIgJiYKKwllY2hvIGQgfCBnaXQgbWVyZ2V0b29sIGEvYS9maWxlLnR4dCAmJgorCSEgdGVzdCAtZiBhL2EvZmlsZS50eHQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1vdmUtdG8tYiAmJgorCWVjaG8gbSB8IGdpdCBtZXJnZXRvb2wgYS9hL2ZpbGUudHh0ICYmCisJdGVzdCAtZiBiL2IvZmlsZS50eHQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1vdmUtdG8tYiAmJgorCSEgZWNobyBhIHwgZ2l0IG1lcmdldG9vbCBhL2EvZmlsZS50eHQgJiYKKwkhIHRlc3QgLWYgYS9hL2ZpbGUudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdldG9vbCBwcm9kdWNlcyBubyBlcnJvcnMgd2hlbiBrZWVwQmFja3VwIGlzIHVzZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBtb3ZlLXRvLWMgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZXRvb2wua2VlcEJhY2t1cCB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1vdmUtdG8tYiAmJgorCWVjaG8gZCB8IGdpdCBtZXJnZXRvb2wgYS9hL2ZpbGUudHh0IDI+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCSEgdGVzdCAtZCBhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdldG9vbCBob25vcnMgdGVtcGZpbGUgY29uZmlnIGZvciBkZWxldGVkIGZpbGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgbW92ZS10by1jICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLmtlZXBUZW1wb3JhcmllcyBmYWxzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtb3ZlLXRvLWIgJiYKKwllY2hvIGQgfCBnaXQgbWVyZ2V0b29sIGEvYS9maWxlLnR4dCAmJgorCSEgdGVzdCAtZCBhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdldG9vbCBrZWVwcyB0ZW1wZmlsZXMgd2hlbiBhYm9ydGluZyBkZWxldGUvZGVsZXRlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNsZWFuIC1mZHgiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBtb3ZlLXRvLWMgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZXRvb2wua2VlcFRlbXBvcmFyaWVzIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbW92ZS10by1iICYmCisJISB0ZXN0X3dyaXRlX2xpbmVzIGEgbiB8IGdpdCBtZXJnZXRvb2wgYS9hL2ZpbGUudHh0ICYmCisJdGVzdCAtZCBhL2EgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZmlsZV9CQVNFXy50eHQKKwlmaWxlX0xPQ0FMXy50eHQKKwlmaWxlX1JFTU9URV8udHh0CisJRU9GCisJbHMgLTEgYS9hIHwgc2VkIC1lICJzL1swLTldKi8vZyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlZCB2cyBtb2RpZmllZCBzdWJtb2R1bGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBicmFuY2gxICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwltdiBzdWJtb2Qgc3VibW9kLW1vdmVkYXNpZGUgJiYKKwlnaXQgcm0gLS1jYWNoZWQgc3VibW9kICYmCisJZ2l0IGNvbW1pdCAtbSAiU3VibW9kdWxlIGRlbGV0ZWQgZnJvbSBicmFuY2giICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudC5hIHRlc3QkdGVzdF9jb3VudCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiAmJgorCXllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCXJtZGlyIHN1Ym1vZCAmJiBtdiBzdWJtb2QtbW92ZWRhc2lkZSBzdWJtb2QgJiYKKwllY2hvICJicmFuY2gxIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwllY2hvICJtYXN0ZXIgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC9iYXIgJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIHJlc29sdmVkIGJ5IGtlZXBpbmcgbW9kdWxlIiAmJgorCisJbXYgc3VibW9kIHN1Ym1vZC1tb3ZlZGFzaWRlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudC5iIHRlc3QkdGVzdF9jb3VudCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyICYmCisJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICYmCisJdGVzdCAhIC1lIHN1Ym1vZCAmJgorCW91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKwl0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCisJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgcmVzb2x2ZWQgYnkgZGVsZXRpbmcgbW9kdWxlIiAmJgorCisJbXYgc3VibW9kLW1vdmVkYXNpZGUgc3VibW9kICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudC5jIG1hc3RlciAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRlc3QkdGVzdF9jb3VudCAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyICYmCisJeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICYmCisJdGVzdCAhIC1lIHN1Ym1vZCAmJgorCXRlc3QgLWQgc3VibW9kLm9yaWcgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCW91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKwl0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCisJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgcmVzb2x2ZWQgYnkgZGVsZXRpbmcgbW9kdWxlIiAmJgorCW12IHN1Ym1vZC5vcmlnIHN1Ym1vZCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudC5kIG1hc3RlciAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRlc3QkdGVzdF9jb3VudCAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyICYmCisJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICYmCisJZWNobyAibWFzdGVyIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwllY2hvICJtYXN0ZXIgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC9iYXIgJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIHJlc29sdmVkIGJ5IGtlZXBpbmcgbW9kdWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIHZzIG1vZGlmaWVkIHN1Ym1vZHVsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCW12IHN1Ym1vZCBzdWJtb2QtbW92ZWRhc2lkZSAmJgorCWdpdCBybSAtLWNhY2hlZCBzdWJtb2QgJiYKKwllY2hvIG5vdCBhIHN1Ym1vZHVsZSA+c3VibW9kICYmCisJZ2l0IGFkZCBzdWJtb2QgJiYKKwlnaXQgY29tbWl0IC1tICJTdWJtb2R1bGUgcGF0aCBiZWNvbWVzIGZpbGUiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudC5hIGJyYW5jaDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgc3BhY2VkXCBuYW1lIHN1YmRpci9maWxlMyAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgYm90aCAmJgorCXllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSBmaWxlMTIgJiYKKwl5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgJiYKKwlybWRpciBzdWJtb2QgJiYgbXYgc3VibW9kLW1vdmVkYXNpZGUgc3VibW9kICYmCisJZWNobyAiYnJhbmNoMSBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJZWNobyAibWFzdGVyIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCisJb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgorCXRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKKwlnaXQgY29tbWl0IC1tICJNZXJnZSByZXNvbHZlZCBieSBrZWVwaW5nIG1vZHVsZSIgJiYKKworCW12IHN1Ym1vZCBzdWJtb2QtbW92ZWRhc2lkZSAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQuYiB0ZXN0JHRlc3RfY291bnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgc3BhY2VkXCBuYW1lIHN1YmRpci9maWxlMyAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgYm90aCAmJgorCXllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSBmaWxlMTIgJiYKKwl5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCWVjaG8gIm5vdCBhIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QgJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIHJlc29sdmVkIGJ5IGtlZXBpbmcgZmlsZSIgJiYKKworCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQuYyBtYXN0ZXIgJiYKKwlybWRpciBzdWJtb2QgJiYgbXYgc3VibW9kLW1vdmVkYXNpZGUgc3VibW9kICYmCisJdGVzdCAhIC1lIHN1Ym1vZC5vcmlnICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGVzdCR0ZXN0X2NvdW50ICYmCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgc3BhY2VkXCBuYW1lIHN1YmRpci9maWxlMyAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgYm90aCAmJgorCXllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSBmaWxlMTIgJiYKKwl5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgJiYKKwl0ZXN0IC1kIHN1Ym1vZC5vcmlnICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwllY2hvICJub3QgYSBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kICYmCisJb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgorCXRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKKwlnaXQgY29tbWl0IC1tICJNZXJnZSByZXNvbHZlZCBieSBrZWVwaW5nIGZpbGUiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50LmQgbWFzdGVyICYmCisJcm1kaXIgc3VibW9kICYmIG12IHN1Ym1vZC5vcmlnIHN1Ym1vZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRlc3QkdGVzdF9jb3VudCAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyICYmCisJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICYmCisJZWNobyAibWFzdGVyIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwllY2hvICJtYXN0ZXIgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC9iYXIgJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIHJlc29sdmVkIGJ5IGtlZXBpbmcgbW9kdWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaW4gc3ViZGlyZWN0b3J5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgYnJhbmNoMSAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJdGVzdF9jcmVhdGVfcmVwbyBzdWJkaXJfbW9kdWxlICYmCisJCSgKKwkJY2Qgc3ViZGlyX21vZHVsZSAmJgorCQk6ID5maWxlMTUgJiYKKwkJZ2l0IGFkZCBmaWxlMTUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGluaXRpYWwgdmVyc2lvbnMiCisJCSkKKwkpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3ViZGlyL3N1YmRpcl9tb2R1bGUiICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgZ2l0Oi8vZXhhbXBsZS5jb20vc3Vic3VibW9kdWxlIHN1YmRpci9zdWJkaXJfbW9kdWxlICYmCisJZ2l0IGFkZCBzdWJkaXIvc3ViZGlyX21vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBzdWJtb2R1bGUgaW4gc3ViZGlyZWN0b3J5IiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudC5hIHRlc3QkdGVzdF9jb3VudCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJKAorCWNkIHN1YmRpci9zdWJkaXJfbW9kdWxlICYmCisJCWdpdCBjaGVja291dCAtYiBzdXBlcjEwLmEgJiYKKwkJZWNobyB0ZXN0JHRlc3RfY291bnQuYSA+ZmlsZTE1ICYmCisJCWdpdCBhZGQgZmlsZTE1ICYmCisJCWdpdCBjb21taXQgLW0gIm9uIGJyYW5jaCAxMC5hIgorCSkgJiYKKwlnaXQgYWRkIHN1YmRpci9zdWJkaXJfbW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiY2hhbmdlIHN1Ym1vZHVsZSBpbiBzdWJkaXJlY3Rvcnkgb24gdGVzdCR0ZXN0X2NvdW50LmEiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50LmIgdGVzdCR0ZXN0X2NvdW50ICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwkoCisJCWNkIHN1YmRpci9zdWJkaXJfbW9kdWxlICYmCisJCWdpdCBjaGVja291dCAtYiBzdXBlcjEwLmIgJiYKKwkJZWNobyB0ZXN0JHRlc3RfY291bnQuYiA+ZmlsZTE1ICYmCisJCWdpdCBhZGQgZmlsZTE1ICYmCisJCWdpdCBjb21taXQgLW0gIm9uIGJyYW5jaCAxMC5iIgorCSkgJiYKKwlnaXQgYWRkIHN1YmRpci9zdWJkaXJfbW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiY2hhbmdlIHN1Ym1vZHVsZSBpbiBzdWJkaXJlY3Rvcnkgb24gdGVzdCR0ZXN0X2NvdW50LmIiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGVzdCR0ZXN0X2NvdW50LmEgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQl5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXJfbW9kdWxlCisJKSAmJgorCWVjaG8gInRlc3QkdGVzdF9jb3VudC5iIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1YmRpci9zdWJkaXJfbW9kdWxlL2ZpbGUxNSAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJZWNobyAidGVzdCR0ZXN0X2NvdW50LmIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3ViZGlyL3N1YmRpcl9tb2R1bGUvZmlsZTE1ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGVzdCR0ZXN0X2NvdW50LmEgJiYKKwl5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXIvc3ViZGlyX21vZHVsZSAmJgorCWVjaG8gInRlc3QkdGVzdF9jb3VudC5iIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1YmRpci9zdWJkaXJfbW9kdWxlL2ZpbGUxNSAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJZWNobyAidGVzdCR0ZXN0X2NvdW50LmEiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3ViZGlyL3N1YmRpcl9tb2R1bGUvZmlsZTE1ICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSByZXNvbHZlZCB3aXRoIG1lcmdldG9vbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlyZWN0b3J5IHZzIG1vZGlmaWVkIHN1Ym1vZHVsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwltdiBzdWJtb2Qgc3VibW9kLW1vdmVkYXNpZGUgJiYKKwlnaXQgcm0gLS1jYWNoZWQgc3VibW9kICYmCisJbWtkaXIgc3VibW9kICYmCisJZWNobyBub3QgYSBzdWJtb2R1bGUgPnN1Ym1vZC9maWxlMTYgJiYKKwlnaXQgYWRkIHN1Ym1vZC9maWxlMTYgJiYKKwlnaXQgY29tbWl0IC1tICJTdWJtb2R1bGUgcGF0aCBiZWNvbWVzIGRpcmVjdG9yeSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICYmCisJZWNobyAibm90IGEgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC9maWxlMTYgJiYKKwlybSAtcmYgc3VibW9kLm9yaWcgJiYKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCXRlc3QgISAtZSBzdWJtb2Qub3JpZyAmJgorCXllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCXRlc3QgLWQgc3VibW9kLm9yaWcgJiYKKwllY2hvICJub3QgYSBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kLm9yaWcvZmlsZTE2ICYmCisJcm0gLXIgc3VibW9kLm9yaWcgJiYKKwltdiBzdWJtb2QtbW92ZWRhc2lkZS8uZ2l0IHN1Ym1vZCAmJgorCSggY2Qgc3VibW9kICYmIGdpdCBjbGVhbiAtZiAmJiBnaXQgcmVzZXQgLS1oYXJkICkgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCWVjaG8gIm1hc3RlciBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtcmYgc3VibW9kLW1vdmVkYXNpZGUgJiYKKworCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQuYyBtYXN0ZXIgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0ZXN0JHRlc3RfY291bnQgJiYKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwllY2hvICJtYXN0ZXIgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC9iYXIgJiYKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0ZXN0JHRlc3RfY291bnQgJiYKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJdGVzdCAhIC1lIHN1Ym1vZC5vcmlnICYmCisJeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICYmCisJZWNobyAibm90IGEgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC9maWxlMTYgJiYKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJKCBjZCBzdWJtb2QgJiYgZ2l0IGNsZWFuIC1mICYmIGdpdCByZXNldCAtLWhhcmQgKSAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgd2l0aCBubyBiYXNlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgYnJhbmNoMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0IC0tdG9vbCBteWJhc2UgLS0gYm90aCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBib3RoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N1c3RvbSBjb21tYW5kcyBvdmVycmlkZSBidWlsdC1pbnMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBicmFuY2gxICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLmRlZmF1bHRzLmNtZCAiY2F0IFwiXCRSRU1PVEVcIiA+XCJcJE1FUkdFRFwiIiAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC5kZWZhdWx0cy50cnVzdEV4aXRDb2RlIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCAtLXRvb2wgZGVmYXVsdHMgLS0gYm90aCAmJgorCWVjaG8gbWFzdGVyIGJvdGggYWRkZWQgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYm90aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlbmFtZXMgc2VlbiBieSB0b29scyBzdGFydCB3aXRoIC4vJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgYnJhbmNoMSAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC53cml0ZVRvVGVtcCBmYWxzZSAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC5teWVjaG8uY21kICJlY2hvIFwiXCRMT0NBTFwiIiAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC5teWVjaG8udHJ1c3RFeGl0Q29kZSB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCWdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQgLS10b29sIG15ZWNobyAtLSBib3RoID5hY3R1YWwgJiYKKwlncmVwIF5cLi9ib3RoX0xPQ0FMXyBhY3R1YWwKKycKKwordGVzdF9sYXp5X3ByZXJlcSBNS1RFTVAgJworCXRlbXBkaXI9JChta3RlbXAgLWQgLXQgZm9vLlhYWFhYWCkgJiYKKwl0ZXN0IC1kICIkdGVtcGRpciIgJiYKKwlybWRpciAiJHRlbXBkaXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUtURU1QICd0ZW1wb3JhcnkgZmlsZW5hbWVzIGFyZSB1c2VkIHdpdGggbWVyZ2V0b29sLndyaXRlVG9UZW1wJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgYnJhbmNoMSAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC53cml0ZVRvVGVtcCB0cnVlICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLm15ZWNoby5jbWQgImVjaG8gXCJcJExPQ0FMXCIiICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLm15ZWNoby50cnVzdEV4aXRDb2RlIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCAtLXRvb2wgbXllY2hvIC0tIGJvdGggPmFjdHVhbCAmJgorCSEgZ3JlcCBeXC4vYm90aF9MT0NBTF8gYWN0dWFsICYmCisJZ3JlcCAvYm90aF9MT0NBTF8gYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYub3JkZXJGaWxlIGNvbmZpZ3VyYXRpb24gaXMgaG9ub3JlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IG9yZGVyLWZpbGUtc2lkZTIgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLm9yZGVyRmlsZSBvcmRlci1maWxlICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLm15ZWNoby5jbWQgImVjaG8gXCJcJExPQ0FMXCIiICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLm15ZWNoby50cnVzdEV4aXRDb2RlIHRydWUgJiYKKwllY2hvIGIgPm9yZGVyLWZpbGUgJiYKKwllY2hvIGEgPj5vcmRlci1maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG9yZGVyLWZpbGUtc2lkZTEgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCU1lcmdpbmc6CisJCWIKKwkJYQorCUVPRgorCisJIyBtYWtlIHN1cmUgIm9yZGVyLWZpbGUiIHRoYXQgaXMgYW1iaWd1b3VzIGJldHdlZW4KKwkjIHJldiBhbmQgcGF0aCBpcyB1bmRlcnN0b29kIGNvcnJlY3RseS4KKwlnaXQgYnJhbmNoIG9yZGVyLWZpbGUgSEVBRCAmJgorCisJZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCAtLXRvb2wgbXllY2hvID5vdXRwdXQgJiYKKwlnaXQgZ3JlcCAtLW5vLWluZGV4IC1oIC1BMiBNZXJnaW5nOiBvdXRwdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdldG9vbCAtT29yZGVyLWZpbGUgaXMgaG9ub3JlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IG9yZGVyLWZpbGUtc2lkZTIgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLm9yZGVyRmlsZSBvcmRlci1maWxlICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLm15ZWNoby5jbWQgImVjaG8gXCJcJExPQ0FMXCIiICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLm15ZWNoby50cnVzdEV4aXRDb2RlIHRydWUgJiYKKwllY2hvIGIgPm9yZGVyLWZpbGUgJiYKKwllY2hvIGEgPj5vcmRlci1maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG9yZGVyLWZpbGUtc2lkZTEgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCU1lcmdpbmc6CisJCWEKKwkJYgorCUVPRgorCWdpdCBtZXJnZXRvb2wgLU8vZGV2L251bGwgLS1uby1wcm9tcHQgLS10b29sIG15ZWNobyA+b3V0cHV0ICYmCisJZ2l0IGdyZXAgLS1uby1pbmRleCAtaCAtQTIgTWVyZ2luZzogb3V0cHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYub3JkZXJGaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG9yZGVyLWZpbGUtc2lkZTEgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCU1lcmdpbmc6CisJCWIKKwkJYQorCUVPRgorCWdpdCBtZXJnZXRvb2wgLU9vcmRlci1maWxlIC0tbm8tcHJvbXB0IC0tdG9vbCBteWVjaG8gPm91dHB1dCAmJgorCWdpdCBncmVwIC0tbm8taW5kZXggLWggLUEyIE1lcmdpbmc6IG91dHB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MTEtbWVyZ2UtYWJvcnQuc2ggYi90L3Q3NjExLW1lcmdlLWFib3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdjODRhNTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjExLW1lcmdlLWFib3J0LnNoCkBAIC0wLDAgKzEsMjAxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBhYm9ydGluZyBpbi1wcm9ncmVzcyBtZXJnZXMKKworU2V0IHVwIHJlcG8gd2l0aCBjb25mbGljdGluZyBhbmQgbm9uLWNvbmZsaWN0aW5nIGJyYW5jaGVzOgorCitUaGVyZSBhcmUgdGhyZWUgZmlsZXMgZm9vL2Jhci9iYXosIGFuZCB0aGUgZm9sbG93aW5nIGdyYXBoIGlsbHVzdHJhdGVzIHRoZQorY29udGVudCBvZiB0aGVzZSBmaWxlcyBpbiBlYWNoIGNvbW1pdDoKKworIyBmb28vYmFyL2JheiAtLS0gZm9vL2Jhci9iYXp6ICAgICA8LS0gbWFzdGVyCisjICAgICAgICAgICAgIFwKKyMgICAgICAgICAgICAgIC0tLSBmb28vYmFyZi9iYXpmICAgPC0tIGNvbmZsaWN0X2JyYW5jaAorIyAgICAgICAgICAgICAgIFwKKyMgICAgICAgICAgICAgICAgLS0tIGZvby9iYXJ0L2JheiAgPC0tIGNsZWFuX2JyYW5jaAorCitOZXh0LCB0ZXN0IGdpdCBtZXJnZSAtLWFib3J0IHdpdGggdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CistIGJlZm9yZS9hZnRlciBzdWNjZXNzZnVsIG1lcmdlIChzaG91bGQgZmFpbCB3aGVuIG5vdCBpbiBtZXJnZSBjb250ZXh0KQorLSB3aXRoL3dpdGhvdXQgY29uZmxpY3RzCistIGNsZWFuL2RpcnR5IGluZGV4IGJlZm9yZSBtZXJnZQorLSBjbGVhbi9kaXJ0eSB3b3JrdHJlZSBiZWZvcmUgbWVyZ2UKKy0gZGlydHkgaW5kZXggYmVmb3JlIG1lcmdlIG1hdGNoZXMgY29udGVudHMgb24gcmVtb3RlIGJyYW5jaAorLSBjaGFuZ2VkL3VuY2hhbmdlZCB3b3JrdHJlZSBhZnRlciBtZXJnZQorLSBjaGFuZ2VkL3VuY2hhbmdlZCBpbmRleCBhZnRlciBtZXJnZQorJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJIyBDcmVhdGUgdGhlIGFib3ZlIHJlcG8KKwllY2hvIGZvbyA+IGZvbyAmJgorCWVjaG8gYmFyID4gYmFyICYmCisJZWNobyBiYXogPiBiYXogJiYKKwlnaXQgYWRkIGZvbyBiYXIgYmF6ICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyBiYXp6ID4gYmF6ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAic2Vjb25kIiAmJgorCWdpdCBjaGVja291dCAtYiBjb25mbGljdF9icmFuY2ggSEVBRF4gJiYKKwllY2hvIGJhcmYgPiBiYXIgJiYKKwllY2hvIGJhemYgPiBiYXogJiYKKwlnaXQgY29tbWl0IC1hIC1tICJjb25mbGljdCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY2xlYW5fYnJhbmNoIEhFQUReICYmCisJZWNobyBiYXJ0ID4gYmFyICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiY2xlYW4iICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCitwcmVfbWVyZ2VfaGVhZD0iJChnaXQgcmV2LXBhcnNlIEhFQUQpIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlscyB3aXRob3V0IE1FUkdFX0hFQUQgKHVuc3RhcnRlZCBtZXJnZSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1hYm9ydCAyPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgTUVSR0VfSEVBRCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgd2l0aG91dCBNRVJHRV9IRUFEICh1bnN0YXJ0ZWQgbWVyZ2UpOiAuZ2l0L01FUkdFX0hFQUQgc2FuaXR5JyAnCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlscyB3aXRob3V0IE1FUkdFX0hFQUQgKGNvbXBsZXRlZCBtZXJnZSknICcKKwlnaXQgbWVyZ2UgY2xlYW5fYnJhbmNoICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCSMgTWVyZ2Ugc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZAorCXBvc3RfbWVyZ2VfaGVhZD0iJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWFib3J0IDI+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCBNRVJHRV9IRUFEIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlscyB3aXRob3V0IE1FUkdFX0hFQUQgKGNvbXBsZXRlZCBtZXJnZSk6IC5naXQvTUVSR0VfSEVBRCBzYW5pdHknICcKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHBvc3RfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGb3JnZXQgcHJldmlvdXMgbWVyZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkICIkcHJlX21lcmdlX2hlYWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Fib3J0IGFmdGVyIC0tbm8tY29tbWl0JyAnCisJIyBSZWRvIG1lcmdlLCBidXQgc3RvcCBiZWZvcmUgY3JlYXRpbmcgbWVyZ2UgY29tbWl0CisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IGNsZWFuX2JyYW5jaCAmJgorCXRlc3QgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJIyBBYm9ydCBub24tY29uZmxpY3RpbmcgbWVyZ2UKKwlnaXQgbWVyZ2UgLS1hYm9ydCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tc3RhZ2VkKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWJvcnQgYWZ0ZXIgY29uZmxpY3RzJyAnCisJIyBDcmVhdGUgY29uZmxpY3RpbmcgbWVyZ2UKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3RfYnJhbmNoICYmCisJdGVzdCAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwkjIEFib3J0IGNvbmZsaWN0aW5nIG1lcmdlCisJZ2l0IG1lcmdlIC0tYWJvcnQgJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZikiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLXN0YWdlZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NsZWFuIG1lcmdlIHdpdGggZGlydHkgaW5kZXggZmFpbHMnICcKKwllY2hvIHh5enp5ID4+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGRpZmYgLS1zdGFnZWQgPiBleHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY2xlYW5fYnJhbmNoICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYpIiAmJgorCWdpdCBkaWZmIC0tc3RhZ2VkID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDb25mbGljdGluZyBtZXJnZSB3aXRoIGRpcnR5IGluZGV4IGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmKSIgJiYKKwlnaXQgZGlmZiAtLXN0YWdlZCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVzZXQgaW5kZXggKGJ1dCBwcmVzZXJ2ZSB3b3JrdHJlZSBjaGFuZ2VzKScgJworCWdpdCByZXNldCAiJHByZV9tZXJnZV9oZWFkIiAmJgorCWdpdCBkaWZmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBYm9ydCBjbGVhbiBtZXJnZSB3aXRoIG5vbi1jb25mbGljdGluZyBkaXJ0eSB3b3JrdHJlZScgJworCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBjbGVhbl9icmFuY2ggJiYKKwl0ZXN0IC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCSMgQWJvcnQgbWVyZ2UKKwlnaXQgbWVyZ2UgLS1hYm9ydCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tc3RhZ2VkKSIgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWJvcnQgY29uZmxpY3RpbmcgbWVyZ2Ugd2l0aCBub24tY29uZmxpY3RpbmcgZGlydHkgd29ya3RyZWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3RfYnJhbmNoICYmCisJdGVzdCAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwkjIEFib3J0IG1lcmdlCisJZ2l0IG1lcmdlIC0tYWJvcnQgJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLXN0YWdlZCkiICYmCisJZ2l0IGRpZmYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Jlc2V0IHdvcmt0cmVlIGNoYW5nZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICIkcHJlX21lcmdlX2hlYWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0ZhaWwgY2xlYW4gbWVyZ2Ugd2l0aCBjb25mbGljdGluZyBkaXJ0eSB3b3JrdHJlZScgJworCWVjaG8geHl6enkgPj4gYmFyICYmCisJZ2l0IGRpZmYgPiBleHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgY2xlYW5fYnJhbmNoICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1zdGFnZWQpIiAmJgorCWdpdCBkaWZmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGYWlsIGNvbmZsaWN0aW5nIG1lcmdlIHdpdGggY29uZmxpY3RpbmcgZGlydHkgd29ya3RyZWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3RfYnJhbmNoICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1zdGFnZWQpIiAmJgorCWdpdCBkaWZmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXNldCB3b3JrdHJlZSBjaGFuZ2VzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAiJHByZV9tZXJnZV9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGYWlsIGNsZWFuIG1lcmdlIHdpdGggbWF0Y2hpbmcgZGlydHkgd29ya3RyZWUnICcKKwllY2hvIGJhcnQgPiBiYXIgJiYKKwlnaXQgZGlmZiA+IGV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCBjbGVhbl9icmFuY2ggJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLXN0YWdlZCkiICYmCisJZ2l0IGRpZmYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0ZhaWwgY29uZmxpY3RpbmcgbWVyZ2Ugd2l0aCBtYXRjaGluZyBkaXJ0eSB3b3JrdHJlZScgJworCWVjaG8gYmFyZiA+IGJhciAmJgorCWdpdCBkaWZmID4gZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tc3RhZ2VkKSIgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjEyLW1lcmdlLXZlcmlmeS1zaWduYXR1cmVzLnNoIGIvdC90NzYxMi1tZXJnZS12ZXJpZnktc2lnbmF0dXJlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNDI2ZjNhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzYxMi1tZXJnZS12ZXJpZnktc2lnbmF0dXJlcy5zaApAQCAtMCwwICsxLDEzNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItZ3BnLnNoIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnY3JlYXRlIHNpZ25lZCBjb21taXRzJyAnCisJZWNobyAxID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlLXNpZ25lZCAmJgorCWVjaG8gMyA+ZWxpZiAmJiBnaXQgYWRkIGVsaWYgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtUyAtbSAic2lnbmVkIG9uIHNpZGUiICYmCisJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlLXVuc2lnbmVkICYmCisJZWNobyAzID5mb28gJiYgZ2l0IGFkZCBmb28gJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAidW5zaWduZWQgb24gc2lkZSIgJiYKKwlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUtYmFkICYmCisJZWNobyAzID5iYXIgJiYgZ2l0IGFkZCBiYXIgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtUyAtbSAiYmFkIG9uIHNpZGUiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBzaWRlLWJhZCA+cmF3ICYmCisJc2VkIC1lICJzL15iYWQvZm9yZ2VkIGJhZC8iIHJhdyA+Zm9yZ2VkICYmCisJZ2l0IGhhc2gtb2JqZWN0IC13IC10IGNvbW1pdCBmb3JnZWQgPmZvcmdlZC5jb21taXQgJiYKKwlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUtdW50cnVzdGVkICYmCisJZWNobyAzID5iYXogJiYgZ2l0IGFkZCBiYXogJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtU0I3MjI3MTg5IC1tICJ1bnRydXN0ZWQgb24gc2lkZSIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIHVuc2lnbmVkIGNvbW1pdCB3aXRoIHZlcmlmaWNhdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IC0tdmVyaWZ5LXNpZ25hdHVyZXMgc2lkZS11bnNpZ25lZCAyPm1lcmdlZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZSIgbWVyZ2VlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2UgdW5zaWduZWQgY29tbWl0IHdpdGggbWVyZ2UudmVyaWZ5U2lnbmF0dXJlcz10cnVlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBpbml0aWFsIiAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnZlcmlmeVNpZ25hdHVyZXMgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWZmLW9ubHkgc2lkZS11bnNpZ25lZCAyPm1lcmdlZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZSIgbWVyZ2VlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2UgY29tbWl0IHdpdGggYmFkIHNpZ25hdHVyZSB3aXRoIHZlcmlmaWNhdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IC0tdmVyaWZ5LXNpZ25hdHVyZXMgJChjYXQgZm9yZ2VkLmNvbW1pdCkgMj5tZXJnZWVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUiIG1lcmdlZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIGNvbW1pdCB3aXRoIGJhZCBzaWduYXR1cmUgd2l0aCBtZXJnZS52ZXJpZnlTaWduYXR1cmVzPXRydWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9jb25maWcgbWVyZ2UudmVyaWZ5U2lnbmF0dXJlcyB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tZmYtb25seSAkKGNhdCBmb3JnZWQuY29tbWl0KSAyPm1lcmdlZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXMgYSBiYWQgR1BHIHNpZ25hdHVyZSIgbWVyZ2VlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2UgY29tbWl0IHdpdGggdW50cnVzdGVkIHNpZ25hdHVyZSB3aXRoIHZlcmlmaWNhdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IC0tdmVyaWZ5LXNpZ25hdHVyZXMgc2lkZS11bnRydXN0ZWQgMj5tZXJnZWVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlIiBtZXJnZWVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdtZXJnZSBjb21taXQgd2l0aCB1bnRydXN0ZWQgc2lnbmF0dXJlIHdpdGggdmVyaWZpY2F0aW9uIGFuZCBoaWdoIG1pblRydXN0TGV2ZWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9jb25maWcgZ3BnLm1pblRydXN0TGV2ZWwgbWFyZ2luYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IC0tdmVyaWZ5LXNpZ25hdHVyZXMgc2lkZS11bnRydXN0ZWQgMj5tZXJnZWVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlIiBtZXJnZWVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdtZXJnZSBjb21taXQgd2l0aCB1bnRydXN0ZWQgc2lnbmF0dXJlIHdpdGggdmVyaWZpY2F0aW9uIGFuZCBsb3cgbWluVHJ1c3RMZXZlbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwl0ZXN0X2NvbmZpZyBncGcubWluVHJ1c3RMZXZlbCB1bmRlZmluZWQgJiYKKwlnaXQgbWVyZ2UgLS1mZi1vbmx5IC0tdmVyaWZ5LXNpZ25hdHVyZXMgc2lkZS11bnRydXN0ZWQgPm1lcmdlb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIiBtZXJnZW91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2UgY29tbWl0IHdpdGggdW50cnVzdGVkIHNpZ25hdHVyZSB3aXRoIG1lcmdlLnZlcmlmeVNpZ25hdHVyZXM9dHJ1ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS52ZXJpZnlTaWduYXR1cmVzIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IHNpZGUtdW50cnVzdGVkIDI+bWVyZ2VlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSIgbWVyZ2VlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2UgY29tbWl0IHdpdGggdW50cnVzdGVkIHNpZ25hdHVyZSB3aXRoIG1lcmdlLnZlcmlmeVNpZ25hdHVyZXM9dHJ1ZSBhbmQgbWluVHJ1c3RMZXZlbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS52ZXJpZnlTaWduYXR1cmVzIHRydWUgJiYKKwl0ZXN0X2NvbmZpZyBncGcubWluVHJ1c3RMZXZlbCBtYXJnaW5hbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWZmLW9ubHkgc2lkZS11bnRydXN0ZWQgMj5tZXJnZWVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlIiBtZXJnZWVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdtZXJnZSBzaWduZWQgY29tbWl0IHdpdGggdmVyaWZpY2F0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBpbml0aWFsIiAmJgorCWdpdCBtZXJnZSAtLXZlcmJvc2UgLS1mZi1vbmx5IC0tdmVyaWZ5LXNpZ25hdHVyZXMgc2lkZS1zaWduZWQgPm1lcmdlb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIiBtZXJnZW91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2Ugc2lnbmVkIGNvbW1pdCB3aXRoIG1lcmdlLnZlcmlmeVNpZ25hdHVyZXM9dHJ1ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS52ZXJpZnlTaWduYXR1cmVzIHRydWUgJiYKKwlnaXQgbWVyZ2UgLS12ZXJib3NlIC0tZmYtb25seSBzaWRlLXNpZ25lZCA+bWVyZ2VvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUiIG1lcmdlb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdtZXJnZSBjb21taXQgd2l0aCBiYWQgc2lnbmF0dXJlIHdpdGhvdXQgdmVyaWZpY2F0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBpbml0aWFsIiAmJgorCWdpdCBtZXJnZSAkKGNhdCBmb3JnZWQuY29tbWl0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2UgY29tbWl0IHdpdGggYmFkIHNpZ25hdHVyZSB3aXRoIG1lcmdlLnZlcmlmeVNpZ25hdHVyZXM9ZmFsc2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9jb25maWcgbWVyZ2UudmVyaWZ5U2lnbmF0dXJlcyBmYWxzZSAmJgorCWdpdCBtZXJnZSAkKGNhdCBmb3JnZWQuY29tbWl0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2UgY29tbWl0IHdpdGggYmFkIHNpZ25hdHVyZSB3aXRoIG1lcmdlLnZlcmlmeVNpZ25hdHVyZXM9dHJ1ZSBhbmQgLS1uby12ZXJpZnktc2lnbmF0dXJlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS52ZXJpZnlTaWduYXR1cmVzIHRydWUgJiYKKwlnaXQgbWVyZ2UgLS1uby12ZXJpZnktc2lnbmF0dXJlcyAkKGNhdCBmb3JnZWQuY29tbWl0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2UgdW5zaWduZWQgY29tbWl0IGludG8gdW5ib3JuIGJyYW5jaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHVuYm9ybiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXZlcmlmeS1zaWduYXR1cmVzIHNpZGUtdW5zaWduZWQgMj5tZXJnZWVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUiIG1lcmdlZXJyb3IKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjEzLW1lcmdlLXN1Ym1vZHVsZS5zaCBiL3QvdDc2MTMtbWVyZ2Utc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQxZTlmY2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjEzLW1lcmdlLXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDE5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UgY2FuIGhhbmRsZSBzdWJtb2R1bGVzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXN1Ym1vZHVsZS11cGRhdGUuc2gKKworIyBtZXJnZXMgd2l0aG91dCBjb25mbGljdHMKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0IG1lcmdlIgorCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdCBtZXJnZSAtLWZmIgorCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdCBtZXJnZSAtLWZmLW9ubHkiCisKK0tOT1dOX0ZBSUxVUkVfTk9GRl9NRVJHRV9ET0VTTlRfQ1JFQVRFX0VNUFRZX1NVQk1PRFVMRV9ESVI9MQorS05PV05fRkFJTFVSRV9OT0ZGX01FUkdFX0FUVEVNUFRTX1RPX01FUkdFX1JFTU9WRURfU1VCTU9EVUxFX0ZJTEVTPTEKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0IG1lcmdlIC0tbm8tZmYiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYxNC1tZXJnZS1zaWdub2ZmLnNoIGIvdC90NzYxNC1tZXJnZS1zaWdub2ZmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxYjg0NDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjE0LW1lcmdlLXNpZ25vZmYuc2gKQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBtZXJnZSAtLXNpZ25vZmYKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IG1lcmdlIC0tc2lnbm9mZiBhbmQgbWFrZXMgc3VyZSB0aGF0IGl0IHdvcmtzLgorJworCisuIC4vdGVzdC1saWIuc2gKKworIyBTZXR1cCB0ZXN0IGZpbGVzCit0ZXN0X3NldHVwKCkgeworCSMgRXhwZWN0ZWQgY29tbWl0IG1lc3NhZ2UgYWZ0ZXIgbWVyZ2UgLS1zaWdub2ZmCisJY2F0ID5leHBlY3RlZC1zaWduZWQgPDxFT0YgJiYKK01lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIG90aGVyLWJyYW5jaAorCitTaWduZWQtb2ZmLWJ5OiAkKGdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8IHNlZCAtZSAicy8+LiovPi8iKQorRU9GCisKKwkjIEV4cGVjdGVkIGNvbW1pdCBtZXNzYWdlIGFmdGVyIG1lcmdlIHdpdGhvdXQgLS1zaWdub2ZmIChvciB3aXRoIC0tbm8tc2lnbm9mZikKKwljYXQgPmV4cGVjdGVkLXVuc2lnbmVkIDw8RU9GICYmCitNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byBvdGhlci1icmFuY2gKK0VPRgorCisJIyBJbml0aWFsIGNvbW1pdCBhbmQgZmVhdHVyZSBicmFuY2ggdG8gbWVyZ2UgbWFzdGVyIGludG8gaXQuCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJJbml0aWFsIGVtcHR5IGNvbW1pdCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgb3RoZXItYnJhbmNoICYmCisJdGVzdF9jb21taXQgb3RoZXItYnJhbmNoIGZpbGUxIDEKK30KKworIyBTZXR1cCByZXBvc2l0b3J5LCBmaWxlcyAmIGZlYXR1cmUgYnJhbmNoCisjIFRoaXMgc3RlcCBtdXN0IGJlIHJ1biBpZiBZb3Ugd2FudCB0byB0ZXN0IDIsMyBvciA0CisjIE9yZGVyIG9mIDIsMyw0IGlzIG5vdCBpbXBvcnRhbnQsIGJ1dCAxIG11c3QgYmUgcnVuIGJlZm9yZQorIyBGb3IgZXhhbXBsZSBgLXIgMSw0YCBvciBgLXIgMSw0LDIgLXZgIGV0YworIyBCdXQgbm90IGAtciAyYCBvciBgLXIgNCwzLDIsMWAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9zZXR1cAorJworCisjIFRlc3Qgd2l0aCAtLXNpZ25vZmYgZmxhZwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG1lcmdlIC0tc2lnbm9mZiBhZGRzIGEgc2lnbi1vZmYgbGluZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItYnJhbmNoLTIgZmlsZTIgMiAmJgorCWdpdCBjaGVja291dCBvdGhlci1icmFuY2ggJiYKKwlnaXQgbWVyZ2UgbWFzdGVyIC0tc2lnbm9mZiAtLW5vLWVkaXQgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtc2lnbmVkIGFjdHVhbAorJworCisjIFRlc3Qgd2l0aG91dCAtLXNpZ25vZmYgZmxhZwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG1lcmdlIGRvZXMgbm90IGFkZCBhIHNpZ24tb2ZmIGxpbmUnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgbWFzdGVyLWJyYW5jaC0zIGZpbGUzIDMgJiYKKwlnaXQgY2hlY2tvdXQgb3RoZXItYnJhbmNoICYmCisJZ2l0IG1lcmdlIG1hc3RlciAtLW5vLWVkaXQgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtdW5zaWduZWQgYWN0dWFsCisnCisKKyMgVGVzdCBmb3IgLS1uby1zaWdub2ZmIGZsYWcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtZXJnZSAtLW5vLXNpZ25vZmYgZmxhZyBjYW5jZWxzIC0tc2lnbm9mZiBmbGFnJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG1hc3Rlci1icmFuY2gtNCBmaWxlNCA0ICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyLWJyYW5jaCAmJgorCWdpdCBtZXJnZSBtYXN0ZXIgLS1uby1lZGl0IC0tc2lnbm9mZiAtLW5vLXNpZ25vZmYgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtdW5zaWduZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzcwMC1yZXBhY2suc2ggYi90L3Q3NzAwLXJlcGFjay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNWIyMzVjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzcwMC1yZXBhY2suc2gKQEAgLTAsMCArMSwyMzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmVwYWNrIHdvcmtzIGNvcnJlY3RseScKKworLiAuL3Rlc3QtbGliLnNoCisKK2NvbW1pdF9hbmRfcGFjayAoKSB7CisJdGVzdF9jb21taXQgIiRAIiAxPiYyICYmCisJaW5jcnBhY2tpZD0kKGdpdCBwYWNrLW9iamVjdHMgLS1hbGwgLS11bnBhY2tlZCAtLWluY3JlbWVudGFsIC5naXQvb2JqZWN0cy9wYWNrL3BhY2sgPC9kZXYvbnVsbCkgJiYKKwllY2hvIHBhY2stJHtpbmNycGFja2lkfS5wYWNrCit9CisKK3Rlc3Rfbm9fbWlzc2luZ19pbl9wYWNrcyAoKSB7CisJbXlpZHg9JChscyAtMSAuZ2l0L29iamVjdHMvcGFjay8qLmlkeCkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiJG15aWR4IiAmJgorCWdpdCB2ZXJpZnktcGFjayAtdiBhbHRfb2JqZWN0cy9wYWNrLyouaWR4ID5vcmlnLnJhdyAmJgorCXNlZCAtbiAtZSAicy9eXCgkT0lEX1JFR0VYXCkuKi9cMS9wIiBvcmlnLnJhdyB8IHNvcnQgPm9yaWcgJiYKKwlnaXQgdmVyaWZ5LXBhY2sgLXYgJG15aWR4ID5kZXN0LnJhdyAmJgorCWN1dCAtZCIgIiAtZjEgZGVzdC5yYXcgfCBzb3J0ID5kZXN0ICYmCisJY29tbSAtMjMgb3JpZyBkZXN0ID5taXNzaW5nICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG1pc3NpbmcKK30KKworIyB3ZSBleHBlY3QgJHBhY2tpZCBhbmQgJG9pZCB0byBiZSBkZWZpbmVkCit0ZXN0X2hhc19kdXBsaWNhdGVfb2JqZWN0ICgpIHsKKwl3YW50X2R1cGxpY2F0ZV9vYmplY3Q9IiQxIgorCWZvdW5kX2R1cGxpY2F0ZV9vYmplY3Q9ZmFsc2UKKwlmb3IgcCBpbiAuZ2l0L29iamVjdHMvcGFjay8qLmlkeAorCWRvCisJCWlkeD0kKGJhc2VuYW1lICRwKQorCQl0ZXN0ICJwYWNrLSRwYWNraWQuaWR4IiA9ICIkaWR4IiAmJiBjb250aW51ZQorCQlnaXQgdmVyaWZ5LXBhY2sgLXYgJHAgPnBhY2tsaXN0IHx8IHJldHVybiAkPworCQlpZiBncmVwICJeJG9pZCIgcGFja2xpc3QKKwkJdGhlbgorCQkJZm91bmRfZHVwbGljYXRlX29iamVjdD10cnVlCisJCQllY2hvICJEVVBMSUNBVEUgT0JKRUNUIEZPVU5EIgorCQkJYnJlYWsKKwkJZmkKKwlkb25lICYmCisJdGVzdCAiJHdhbnRfZHVwbGljYXRlX29iamVjdCIgPSAiJGZvdW5kX2R1cGxpY2F0ZV9vYmplY3QiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29iamVjdHMgaW4gcGFja3MgbWFya2VkIC5rZWVwIGFyZSBub3QgcmVwYWNrZWQnICcKKwllY2hvIGNvbnRlbnQxID5maWxlMSAmJgorCWVjaG8gY29udGVudDIgPmZpbGUyICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsX2NvbW1pdCAmJgorCSMgQ3JlYXRlIHR3byBwYWNrcworCSMgVGhlIGZpcnN0IHBhY2sgd2lsbCBjb250YWluIGFsbCBvZiB0aGUgb2JqZWN0cyBleGNlcHQgb25lCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWFsbCA+b2JqcyAmJgorCWdyZXAgLXYgZmlsZTIgb2JqcyB8IGdpdCBwYWNrLW9iamVjdHMgcGFjayAmJgorCSMgVGhlIHNlY29uZCBwYWNrIHdpbGwgY29udGFpbiB0aGUgZXhjbHVkZWQgb2JqZWN0CisJcGFja2lkPSQoZ3JlcCBmaWxlMiBvYmpzIHwgZ2l0IHBhY2stb2JqZWN0cyBwYWNrKSAmJgorCT5wYWNrLSRwYWNraWQua2VlcCAmJgorCWdpdCB2ZXJpZnktcGFjayAtdiBwYWNrLSRwYWNraWQuaWR4ID5wYWNrbGlzdCAmJgorCW9pZD0kKGhlYWQgLW4gMSBwYWNrbGlzdCB8IHNlZCAtZSAicy9eXCgkT0lEX1JFR0VYXCkuKi9cMS8iKSAmJgorCW12IHBhY2stKiAuZ2l0L29iamVjdHMvcGFjay8gJiYKKwlnaXQgcmVwYWNrIC1BIC1kIC1sICYmCisJZ2l0IHBydW5lLXBhY2tlZCAmJgorCXRlc3RfaGFzX2R1cGxpY2F0ZV9vYmplY3QgZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyBiaXRtYXBzIHZpYSBjb21tYW5kLWxpbmUgY2FuIGR1cGxpY2F0ZSAua2VlcCBvYmplY3RzJyAnCisJIyBidWlsZCBvbiAkb2lkLCAkcGFja2lkLCBhbmQgLmtlZXAgc3RhdGUgZnJvbSBwcmV2aW91cworCWdpdCByZXBhY2sgLUFkYmwgJiYKKwl0ZXN0X2hhc19kdXBsaWNhdGVfb2JqZWN0IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyBiaXRtYXBzIHZpYSBjb25maWcgY2FuIGR1cGxpY2F0ZSAua2VlcCBvYmplY3RzJyAnCisJIyBidWlsZCBvbiAkb2lkLCAkcGFja2lkLCBhbmQgLmtlZXAgc3RhdGUgZnJvbSBwcmV2aW91cworCWdpdCAtYyByZXBhY2sud3JpdGViaXRtYXBzPXRydWUgcmVwYWNrIC1BZGwgJiYKKwl0ZXN0X2hhc19kdXBsaWNhdGVfb2JqZWN0IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9vc2Ugb2JqZWN0cyBpbiBhbHRlcm5hdGUgT0RCIGFyZSBub3QgcmVwYWNrZWQnICcKKwlta2RpciBhbHRfb2JqZWN0cyAmJgorCWVjaG8gJChwd2QpL2FsdF9vYmplY3RzID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJZWNobyBjb250ZW50MyA+ZmlsZTMgJiYKKwlvaWQ9JChHSVRfT0JKRUNUX0RJUkVDVE9SWT1hbHRfb2JqZWN0cyBnaXQgaGFzaC1vYmplY3QgLXcgZmlsZTMpICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gY29tbWl0X2ZpbGUzICYmCisJZ2l0IHJlcGFjayAtYSAtZCAtbCAmJgorCWdpdCBwcnVuZS1wYWNrZWQgJiYKKwl0ZXN0X2hhc19kdXBsaWNhdGVfb2JqZWN0IGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2tlZCBvYnMgaW4gYWx0IE9EQiBhcmUgcmVwYWNrZWQgZXZlbiB3aGVuIGxvY2FsIHJlcG8gaXMgcGFja2xlc3MnICcKKwlta2RpciBhbHRfb2JqZWN0cy9wYWNrICYmCisJbXYgLmdpdC9vYmplY3RzL3BhY2svKiBhbHRfb2JqZWN0cy9wYWNrICYmCisJZ2l0IHJlcGFjayAtYSAmJgorCXRlc3Rfbm9fbWlzc2luZ19pbl9wYWNrcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrZWQgb2JzIGluIGFsdCBPREIgYXJlIHJlcGFja2VkIHdoZW4gbG9jYWwgcmVwbyBoYXMgcGFja3MnICcKKwlybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCisJZWNobyBuZXdfY29udGVudCA+PmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gbW9yZV9jb250ZW50ICYmCisJZ2l0IHJlcGFjayAmJgorCWdpdCByZXBhY2sgLWEgLWQgJiYKKwl0ZXN0X25vX21pc3NpbmdfaW5fcGFja3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFja2VkIG9icyBpbiBhbHRlcm5hdGUgT0RCIGtlcHQgcGFjayBhcmUgcmVwYWNrZWQnICcKKwkjIHN3YXAgdGhlIC5rZWVwIHNvIHRoZSBjb21taXQgb2JqZWN0IGlzIGluIHRoZSBwYWNrIHdpdGggLmtlZXAKKwlmb3IgcCBpbiBhbHRfb2JqZWN0cy9wYWNrLyoucGFjaworCWRvCisJCWJhc2VfbmFtZT0kKGJhc2VuYW1lICRwIC5wYWNrKSAmJgorCQlpZiB0ZXN0X3BhdGhfaXNfZmlsZSBhbHRfb2JqZWN0cy9wYWNrLyRiYXNlX25hbWUua2VlcAorCQl0aGVuCisJCQlybSBhbHRfb2JqZWN0cy9wYWNrLyRiYXNlX25hbWUua2VlcAorCQllbHNlCisJCQl0b3VjaCBhbHRfb2JqZWN0cy9wYWNrLyRiYXNlX25hbWUua2VlcAorCQlmaQorCWRvbmUgJiYKKwlnaXQgcmVwYWNrIC1hIC1kICYmCisJdGVzdF9ub19taXNzaW5nX2luX3BhY2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2tlZCB1bnJlYWNoYWJsZSBvYnMgaW4gYWx0ZXJuYXRlIE9EQiBhcmUgbm90IGxvb3NlbmVkJyAnCisJcm0gLWYgYWx0X29iamVjdHMvcGFjay8qLmtlZXAgJiYKKwltdiAuZ2l0L29iamVjdHMvcGFjay8qIGFsdF9vYmplY3RzL3BhY2svICYmCisJY29pZD0kKGdpdCByZXYtcGFyc2UgSEVBRF57Y29tbWl0fSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9JHRlc3RfdGljayAtLWV4cGlyZS11bnJlYWNoYWJsZT0kdGVzdF90aWNrIC0tYWxsICYmCisJIyBUaGUgcGFjay1vYmplY3RzIGNhbGwgb24gdGhlIG5leHQgbGluZSBpcyBlcXVpdmFsZW50IHRvCisJIyBnaXQgcmVwYWNrIC1BIC1kIHdpdGhvdXQgdGhlIGNhbGwgdG8gcHJ1bmUtcGFja2VkCisJZ2l0IHBhY2stb2JqZWN0cyAtLWhvbm9yLXBhY2sta2VlcCAtLW5vbi1lbXB0eSAtLWFsbCAtLXJlZmxvZyBcCisJICAgIC0tdW5wYWNrLXVucmVhY2hhYmxlIDwvZGV2L251bGwgcGFjayAmJgorCXJtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyogJiYKKwltdiBwYWNrLSogLmdpdC9vYmplY3RzL3BhY2svICYmCisJZ2l0IHZlcmlmeS1wYWNrIC12IC0tIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4ID5wYWNrbGlzdCAmJgorCSEgZ3JlcCAiXiRjb2lkICIgcGFja2xpc3QgJiYKKwllY2hvID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3cgJGNvaWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgcGFja2VkIHVucmVhY2hhYmxlIG9icyB0aGF0IGV4aXN0IGluIGFsdGVybmF0ZSBPREIgYXJlIG5vdCBsb29zZW5lZCcgJworCWVjaG8gJChwd2QpL2FsdF9vYmplY3RzID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJZWNobyAiJGNvaWQiIHwgZ2l0IHBhY2stb2JqZWN0cyAtLW5vbi1lbXB0eSAtLWFsbCAtLXJlZmxvZyBwYWNrICYmCisJcm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKiAmJgorCW12IHBhY2stKiAuZ2l0L29iamVjdHMvcGFjay8gJiYKKwkjIFRoZSBwYWNrLW9iamVjdHMgY2FsbCBvbiB0aGUgbmV4dCBsaW5lIGlzIGVxdWl2YWxlbnQgdG8KKwkjIGdpdCByZXBhY2sgLUEgLWQgd2l0aG91dCB0aGUgY2FsbCB0byBwcnVuZS1wYWNrZWQKKwlnaXQgcGFjay1vYmplY3RzIC0taG9ub3ItcGFjay1rZWVwIC0tbm9uLWVtcHR5IC0tYWxsIC0tcmVmbG9nIFwKKwkgICAgLS11bnBhY2stdW5yZWFjaGFibGUgPC9kZXYvbnVsbCBwYWNrICYmCisJcm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKiAmJgorCW12IHBhY2stKiAuZ2l0L29iamVjdHMvcGFjay8gJiYKKwlnaXQgdmVyaWZ5LXBhY2sgLXYgLS0gLmdpdC9vYmplY3RzL3BhY2svKi5pZHggPnBhY2tsaXN0ICYmCisJISBncmVwICJeJGNvaWQgIiAmJgorCWVjaG8gPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAkY29pZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvYmplY3RzIG1hZGUgdW5yZWFjaGFibGUgYnkgZ3JhZnRzIG9ubHkgYXJlIGtlcHQnICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImNvbW1pdCA0IiAmJgorCUgwPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCUgxPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwlIMj0kKGdpdCByZXYtcGFyc2UgSEVBRF5eKSAmJgorCWVjaG8gIiRIMCAkSDIiID4uZ2l0L2luZm8vZ3JhZnRzICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9JHRlc3RfdGljayAtLWV4cGlyZS11bnJlYWNoYWJsZT0kdGVzdF90aWNrIC0tYWxsICYmCisJZ2l0IHJlcGFjayAtYSAtZCAmJgorCWdpdCBjYXQtZmlsZSAtdCAkSDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrIC0ta2VlcC1wYWNrJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBrZWVwLXBhY2sgJiYKKwkoCisJCWNkIGtlZXAtcGFjayAmJgorCQlQMT0kKGNvbW1pdF9hbmRfcGFjayAxKSAmJgorCQlQMj0kKGNvbW1pdF9hbmRfcGFjayAyKSAmJgorCQlQMz0kKGNvbW1pdF9hbmRfcGFjayAzKSAmJgorCQlQND0kKGNvbW1pdF9hbmRfcGFjayA0KSAmJgorCQlscyAuZ2l0L29iamVjdHMvcGFjay8qLnBhY2sgPm9sZC1jb3VudHMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBvbGQtY291bnRzICYmCisJCWdpdCByZXBhY2sgLWEgLWQgLS1rZWVwLXBhY2sgJFAxIC0ta2VlcC1wYWNrICRQNCAmJgorCQlscyAuZ2l0L29iamVjdHMvcGFjay8qLnBhY2sgPm5ldy1jb3VudHMgJiYKKwkJZ3JlcCAtcSAkUDEgbmV3LWNvdW50cyAmJgorCQlncmVwIC1xICRQNCBuZXctY291bnRzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgbmV3LWNvdW50cyAmJgorCQlnaXQgZnNjaworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYml0bWFwcyBhcmUgY3JlYXRlZCBieSBkZWZhdWx0IGluIGJhcmUgcmVwb3MnICcKKwlnaXQgY2xvbmUgLS1iYXJlIC5naXQgYmFyZS5naXQgJiYKKwlnaXQgLUMgYmFyZS5naXQgcmVwYWNrIC1hZCAmJgorCWJpdG1hcD0kKGxzIGJhcmUuZ2l0L29iamVjdHMvcGFjay8qLmJpdG1hcCkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiJGJpdG1hcCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jcmVtZW50YWwgcmVwYWNrIGRvZXMgbm90IGNvbXBsYWluJyAnCisJZ2l0IC1DIGJhcmUuZ2l0IHJlcGFjayAtcSAyPnJlcGFjay5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgcmVwYWNrLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXRtYXBzIGNhbiBiZSBkaXNhYmxlZCBvbiBiYXJlIHJlcG9zJyAnCisJZ2l0IC1jIHJlcGFjay53cml0ZUJpdG1hcHM9ZmFsc2UgLUMgYmFyZS5naXQgcmVwYWNrIC1hZCAmJgorCWJpdG1hcD0kKGxzIGJhcmUuZ2l0L29iamVjdHMvcGFjay8qLmJpdG1hcCB8fCA6KSAmJgorCXRlc3QgLXogIiRiaXRtYXAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGJpdG1hcHMgY3JlYXRlZCBpZiAua2VlcCBmaWxlcyBwcmVzZW50JyAnCisJcGFjaz0kKGxzIGJhcmUuZ2l0L29iamVjdHMvcGFjay8qLnBhY2spICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRwYWNrIiAmJgorCWtlZXA9JHtwYWNrJS5wYWNrfS5rZWVwICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIlwka2VlcFwiIiAmJgorCT4iJGtlZXAiICYmCisJZ2l0IC1DIGJhcmUuZ2l0IHJlcGFjayAtYWQgMj5zdGRlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgc3RkZXJyICYmCisJZmluZCBiYXJlLmdpdC9vYmplY3RzL3BhY2svIC10eXBlIGYgLW5hbWUgIiouYml0bWFwIiA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvLWJpdG1hcHMgZG8gbm90IGNvbXBsYWluIGlmIHVuYXZhaWxhYmxlJyAnCisJdGVzdF9jb25maWcgLUMgYmFyZS5naXQgcGFjay5wYWNrU2l6ZUxpbWl0IDFNICYmCisJYmxvYj0kKHRlc3QtdG9vbCBnZW5yYW5kb20gYmlnICQoKDEwMjQqMTAyNCkpIHwKKwkgICAgICAgZ2l0IC1DIGJhcmUuZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJZ2l0IC1DIGJhcmUuZ2l0IHVwZGF0ZS1yZWYgcmVmcy90YWdzL2JpZyAkYmxvYiAmJgorCWdpdCAtQyBiYXJlLmdpdCByZXBhY2sgLWFkIDI+c3RkZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHN0ZGVyciAmJgorCWZpbmQgYmFyZS5naXQvb2JqZWN0cy9wYWNrIC10eXBlIGYgLW5hbWUgIiouYml0bWFwIiA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc3MDEtcmVwYWNrLXVucGFjay11bnJlYWNoYWJsZS5zaCBiL3QvdDc3MDEtcmVwYWNrLXVucGFjay11bnJlYWNoYWJsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ODI2MWJhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzcwMS1yZXBhY2stdW5wYWNrLXVucmVhY2hhYmxlLnNoCkBAIC0wLDAgKzEsMTUzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlcGFjayB3b3JrcyBjb3JyZWN0bHknCisKKy4gLi90ZXN0LWxpYi5zaAorCitmc2hhMT0KK2NzaGExPQordHNoYTE9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1BIHdpdGggLWQgb3B0aW9uIGxlYXZlcyB1bnJlYWNoYWJsZSBvYmplY3RzIHVucGFja2VkJyAnCisJZWNobyBjb250ZW50ID4gZmlsZTEgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWxfY29tbWl0ICYmCisJIyBjcmVhdGUgYSB0cmFuc2llbnQgYnJhbmNoIHdpdGggdW5pcXVlIGNvbnRlbnQKKwlnaXQgY2hlY2tvdXQgLWIgdHJhbnNpZW50X2JyYW5jaCAmJgorCWVjaG8gbW9yZSBjb250ZW50ID4+IGZpbGUxICYmCisJIyByZWNvcmQgdGhlIG9iamVjdHMgY3JlYXRlZCBpbiB0aGUgZGF0YWJhc2UgZm9yIGZpbGUsIGNvbW1pdCwgdHJlZQorCWZzaGExPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUxKSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gbW9yZV9jb250ZW50ICYmCisJY3NoYTE9JChnaXQgcmV2LXBhcnNlIEhFQURee2NvbW1pdH0pICYmCisJdHNoYTE9JChnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9KSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIGV2ZW4gbW9yZSBjb250ZW50ID4+IGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBldmVuX21vcmVfY29udGVudCAmJgorCSMgZGVsZXRlIHRoZSB0cmFuc2llbnQgYnJhbmNoCisJZ2l0IGJyYW5jaCAtRCB0cmFuc2llbnRfYnJhbmNoICYmCisJIyBwYWNrIHRoZSByZXBvCisJZ2l0IHJlcGFjayAtQSAtZCAtbCAmJgorCSMgdmVyaWZ5IG9iamVjdHMgYXJlIHBhY2tlZCBpbiByZXBvc2l0b3J5CisJdGVzdCAzID0gJChnaXQgdmVyaWZ5LXBhY2sgLXYgLS0gLmdpdC9vYmplY3RzL3BhY2svKi5pZHggfAorCQkgICBlZ3JlcCAiXigkZnNoYTF8JGNzaGExfCR0c2hhMSkgIiB8CisJCSAgIHNvcnQgfCB1bmlxIHwgd2MgLWwpICYmCisJZ2l0IHNob3cgJGZzaGExICYmCisJZ2l0IHNob3cgJGNzaGExICYmCisJZ2l0IHNob3cgJHRzaGExICYmCisJIyBub3cgZXhwaXJlIHRoZSByZWZsb2csIHdoaWxlIGtlZXBpbmcgcmVhY2hhYmxlIG9uZXMgYnV0IGV4cGlyaW5nCisJIyB1bnJlYWNoYWJsZXMgaW1tZWRpYXRlbHkKKwl0ZXN0X3RpY2sgJiYKKwlzb21ldGltZWFnbz0kKCggJHRlc3RfdGljayAtIDEwMDAwICkpICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9JHNvbWV0aW1lYWdvIC0tZXhwaXJlLXVucmVhY2hhYmxlPSR0ZXN0X3RpY2sgLS1hbGwgJiYKKwkjIGFuZCByZXBhY2sKKwlnaXQgcmVwYWNrIC1BIC1kIC1sICYmCisJIyB2ZXJpZnkgb2JqZWN0cyBhcmUgcmV0YWluZWQgdW5wYWNrZWQKKwl0ZXN0IDAgPSAkKGdpdCB2ZXJpZnktcGFjayAtdiAtLSAuZ2l0L29iamVjdHMvcGFjay8qLmlkeCB8CisJCSAgIGVncmVwICJeKCRmc2hhMXwkY3NoYTF8JHRzaGExKSAiIHwKKwkJICAgc29ydCB8IHVuaXEgfCB3YyAtbCkgJiYKKwlnaXQgc2hvdyAkZnNoYTEgJiYKKwlnaXQgc2hvdyAkY3NoYTEgJiYKKwlnaXQgc2hvdyAkdHNoYTEKKycKKworY29tcGFyZV9tdGltZXMgKCkKK3sKKwlyZWFkIHRyZWYgJiYKKwl3aGlsZSByZWFkIHQ7IGRvCisJCXRlc3QgIiR0cmVmIiA9ICIkdCIgfHwgcmV0dXJuIDEKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1BIHdpdGhvdXQgLWQgb3B0aW9uIGxlYXZlcyB1bnJlYWNoYWJsZSBvYmplY3RzIHBhY2tlZCcgJworCWZzaGExcGF0aD0kKGVjaG8gIiRmc2hhMSIgfCBzZWQgLWUgInN8XCguLlwpfFwxL3wiKSAmJgorCWZzaGExcGF0aD0iLmdpdC9vYmplY3RzLyRmc2hhMXBhdGgiICYmCisJY3NoYTFwYXRoPSQoZWNobyAiJGNzaGExIiB8IHNlZCAtZSAic3xcKC4uXCl8XDEvfCIpICYmCisJY3NoYTFwYXRoPSIuZ2l0L29iamVjdHMvJGNzaGExcGF0aCIgJiYKKwl0c2hhMXBhdGg9JChlY2hvICIkdHNoYTEiIHwgc2VkIC1lICJzfFwoLi5cKXxcMS98IikgJiYKKwl0c2hhMXBhdGg9Ii5naXQvb2JqZWN0cy8kdHNoYTFwYXRoIiAmJgorCWdpdCBicmFuY2ggdHJhbnNpZW50X2JyYW5jaCAkY3NoYTEgJiYKKwlnaXQgcmVwYWNrIC1hIC1kIC1sICYmCisJdGVzdCAhIC1mICIkZnNoYTFwYXRoIiAmJgorCXRlc3QgISAtZiAiJGNzaGExcGF0aCIgJiYKKwl0ZXN0ICEgLWYgIiR0c2hhMXBhdGgiICYmCisJdGVzdCAxID0gJChscyAtMSAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucGFjayB8IHdjIC1sKSAmJgorCXBhY2tmaWxlPSQobHMgLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLnBhY2spICYmCisJZ2l0IGJyYW5jaCAtRCB0cmFuc2llbnRfYnJhbmNoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlcGFjayAtQSAtbCAmJgorCXRlc3QgISAtZiAiJGZzaGExcGF0aCIgJiYKKwl0ZXN0ICEgLWYgIiRjc2hhMXBhdGgiICYmCisJdGVzdCAhIC1mICIkdHNoYTFwYXRoIiAmJgorCWdpdCBzaG93ICRmc2hhMSAmJgorCWdpdCBzaG93ICRjc2hhMSAmJgorCWdpdCBzaG93ICR0c2hhMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnBhY2tlZCBvYmplY3RzIHJlY2VpdmUgdGltZXN0YW1wIG9mIHBhY2sgZmlsZScgJworCXRtcHBhY2s9Ii5naXQvb2JqZWN0cy9wYWNrL3RtcF9wYWNrIiAmJgorCWxuICIkcGFja2ZpbGUiICIkdG1wcGFjayIgJiYKKwlnaXQgcmVwYWNrIC1BIC1sIC1kICYmCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgIiR0bXBwYWNrIiAiJGZzaGExcGF0aCIgIiRjc2hhMXBhdGgiICIkdHNoYTFwYXRoIiBcCisJCT4gbXRpbWVzICYmCisJY29tcGFyZV9tdGltZXMgPCBtdGltZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGJvdGhlciBsb29zZW5pbmcgb2xkIG9iamVjdHMnICcKKwlvYmoxPSQoZWNobyBvbmUgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlvYmoyPSQoZWNobyB0d28gfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlwYWNrMT0kKGVjaG8gJG9iajEgfCBnaXQgcGFjay1vYmplY3RzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2spICYmCisJcGFjazI9JChlY2hvICRvYmoyIHwgZ2l0IHBhY2stb2JqZWN0cyAuZ2l0L29iamVjdHMvcGFjay9wYWNrKSAmJgorCWdpdCBwcnVuZS1wYWNrZWQgJiYKKwlnaXQgY2F0LWZpbGUgLXAgJG9iajEgJiYKKwlnaXQgY2F0LWZpbGUgLXAgJG9iajIgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9LTg2NDAwIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHBhY2syLnBhY2sgJiYKKwlnaXQgcmVwYWNrIC1BIC1kIC0tdW5wYWNrLXVucmVhY2hhYmxlPTEuaG91ci5hZ28gJiYKKwlnaXQgY2F0LWZpbGUgLXAgJG9iajEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLXAgJG9iajIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2VlcCBwYWNrZWQgb2JqZWN0cyBmb3VuZCBvbmx5IGluIGluZGV4JyAnCisJZWNobyBteS11bmlxdWUtY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIm1ha2UgaXQgcmVhY2hhYmxlIiAmJgorCWdpdCBnYyAmJgorCWdpdCByZXNldCBIRUFEXiAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPW5vdyAtLWFsbCAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0tODY0MDAgLmdpdC9vYmplY3RzL3BhY2svKiAmJgorCWdpdCBnYyAtLXBydW5lPTEuaG91ci5hZ28gJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiA6ZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgLWsga2VlcHMgdW5yZWFjaGFibGUgcGFja2VkIG9iamVjdHMnICcKKwkjIGNyZWF0ZSBwYWNrZWQtYnV0LXVucmVhY2hhYmxlIG9iamVjdAorCXNoYTE9JChlY2hvIHVucmVhY2hhYmxlLXBhY2tlZCB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCXBhY2s9JChlY2hvICRzaGExIHwgZ2l0IHBhY2stb2JqZWN0cyAuZ2l0L29iamVjdHMvcGFjay9wYWNrKSAmJgorCWdpdCBwcnVuZS1wYWNrZWQgJiYKKworCSMgLWsgc2hvdWxkIGtlZXAgaXQKKwlnaXQgcmVwYWNrIC1hZGsgJiYKKwlnaXQgY2F0LWZpbGUgLXAgJHNoYTEgJiYKKworCSMgYW5kIGRvdWJsZSBjaGVjayB0aGF0IHdpdGhvdXQgLWsgaXQgd291bGQgaGF2ZSBiZWVuIHJlbW92ZWQKKwlnaXQgcmVwYWNrIC1hZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtcCAkc2hhMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgLWsgcGFja3MgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0cycgJworCSMgY3JlYXRlIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdAorCXNoYTE9JChlY2hvIHdvdWxkLWJlLWRlbGV0ZWQtbG9vc2UgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlvYmpwYXRoPS5naXQvb2JqZWN0cy8kKGVjaG8gJHNoYTEgfCBzZWQgInMsLi4sJi8sIikgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkb2JqcGF0aCAmJgorCisJIyBhbmQgY29uZmlybSB0aGF0IHRoZSBsb29zZSBvYmplY3QgZ29lcyBhd2F5LCBidXQgd2UgY2FuCisJIyBzdGlsbCBhY2Nlc3MgaXQgKGVyZ28sIGl0IGlzIHBhY2tlZCkKKwlnaXQgcmVwYWNrIC1hZGsgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkb2JqcGF0aCAmJgorCWdpdCBjYXQtZmlsZSAtcCAkc2hhMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc3MDItcmVwYWNrLWN5Y2xpYy1hbHRlcm5hdGUuc2ggYi90L3Q3NzAyLXJlcGFjay1jeWNsaWMtYWx0ZXJuYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkzYjc0ODYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NzAyLXJlcGFjay1jeWNsaWMtYWx0ZXJuYXRlLnNoCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgRXBocmltIEtob25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlcGFjayBpbnZvbHZpbmcgY3ljbGljIGFsdGVybmF0ZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlHSVRfT0JKRUNUX0RJUkVDVE9SWT0uZ2l0Ly8uLi8uZ2l0L29iamVjdHMgJiYKKwlleHBvcnQgR0lUX09CSkVDVF9ESVJFQ1RPUlkgJiYKKwl0b3VjaCBhICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSAxICYmCisJZ2l0IHJlcGFjayAtYWRsICYmCisJZWNobyAiJChwd2QpIi8uZ2l0L29iamVjdHMvLi4vb2JqZWN0cyA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1wYWNraW5nIHJlcG9zaXRvcnkgd2l0aCBpdHNzZWxmIGFzIGFsdGVybmF0ZScgJworCWdpdCByZXBhY2sgLWFkbCAmJgorCWdpdCBmc2NrCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzgwMC1kaWZmdG9vbC5zaCBiL3QvdDc4MDAtZGlmZnRvb2wuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjliOTI5MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc4MDAtZGlmZnRvb2wuc2gKQEAgLTAsMCArMSw3NDEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgRGF2aWQgQWd1aWxhcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtZGlmZnRvb2wKKworVGVzdGluZyBiYXNpYyBkaWZmIHRvb2wgaW52b2NhdGlvbgorJworCisuIC4vdGVzdC1saWIuc2gKKworZGlmZnRvb2xfdGVzdF9zZXR1cCAoKQoreworCXRlc3RfY29uZmlnIGRpZmYudG9vbCB0ZXN0LXRvb2wgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC50ZXN0LXRvb2wuY21kICdjYXQgIiRMT0NBTCInICYmCisJdGVzdF9jb25maWcgZGlmZnRvb2wuYm9ndXMtdG9vbC5jbWQgZmFsc2UKK30KKworcHJvbXB0X2dpdmVuICgpCit7CisJcHJvbXB0PSIkMSIKKwl0ZXN0ICIkcHJvbXB0IiA9ICJMYXVuY2ggJ3Rlc3QtdG9vbCcgW1kvbl0/IGJyYW5jaCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgdXNhZ2UgcmVxdWlyZXMgbm8gcmVwbycgJworCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBkaWZmdG9vbCAtaCA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCBedXNhZ2U6IG91dHB1dCAmJgorCSMgY3JlYXRlIGEgY2VpbGluZyBkaXJlY3RvcnkgdG8gcHJldmVudCBHaXQgZnJvbSBmaW5kaW5nIGEgcmVwbworCW1rZGlyIC1wIG5vdC9yZXBvICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yIG5vdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI5IFwKKwllbnYgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiQocHdkKS9ub3QiIFwKKwlnaXQgLUMgbm90L3JlcG8gZGlmZnRvb2wgLWggPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgXnVzYWdlOiBvdXRwdXQKKycKKworIyBDcmVhdGUgYSBmaWxlIG9uIG1hc3RlciBhbmQgY2hhbmdlIGl0IG9uIGJyYW5jaAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIG1hc3RlciA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIGZpbGUiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoIG1hc3RlciAmJgorCWVjaG8gYnJhbmNoID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiYnJhbmNoIGNoYW5nZWQgZmlsZSIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKKyMgQ29uZmlndXJlIGEgY3VzdG9tIGRpZmZ0b29sLjx0b29sPi5jbWQgYW5kIHVzZSBpdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VzdG9tIGNvbW1hbmRzJyAnCisJZGlmZnRvb2xfdGVzdF9zZXR1cCAmJgorCXRlc3RfY29uZmlnIGRpZmZ0b29sLnRlc3QtdG9vbC5jbWQgImNhdCBcIlwkUkVNT1RFXCIiICYmCisJZWNobyBtYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXRlc3RfY29uZmlnIGRpZmZ0b29sLnRlc3QtdG9vbC5jbWQgImNhdCBcIlwkTE9DQUxcIiIgJiYKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdXN0b20gdG9vbCBjb21tYW5kcyBvdmVycmlkZSBidWlsdC1pbnMnICcKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC52aW1kaWZmLmNtZCAiY2F0IFwiXCRSRU1PVEVcIiIgJiYKKwllY2hvIG1hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC0tdG9vbCB2aW1kaWZmIC0tbm8tcHJvbXB0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCBpZ25vcmVzIGJhZCAtLXRvb2wgdmFsdWVzJyAnCisJOiA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgXAorCQlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS10b29sPWJhZC10b29sIGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCBmb3J3YXJkcyBhcmd1bWVudHMgdG8gZGlmZicgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwk+Zm9yLWRpZmYgJiYKKwlnaXQgYWRkIGZvci1kaWZmICYmCisJZWNobyBjaGFuZ2VzPmZvci1kaWZmICYmCisJZ2l0IGFkZCBmb3ItZGlmZiAmJgorCTogPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLWNhY2hlZCAtLW5vLXByb21wdCAtLSBmb3ItZGlmZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXNldCAtLSBmb3ItZGlmZiAmJgorCXJtIGZvci1kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIGlnbm9yZXMgZXhpdCBjb2RlJyAnCisJdGVzdF9jb25maWcgZGlmZnRvb2wuZXJyb3IuY21kIGZhbHNlICYmCisJZ2l0IGRpZmZ0b29sIC15IC10IGVycm9yIGJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCBmb3J3YXJkcyBleGl0IGNvZGUgd2l0aCAtLXRydXN0LWV4aXQtY29kZScgJworCXRlc3RfY29uZmlnIGRpZmZ0b29sLmVycm9yLmNtZCBmYWxzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmdG9vbCAteSAtLXRydXN0LWV4aXQtY29kZSAtdCBlcnJvciBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgZm9yd2FyZHMgZXhpdCBjb2RlIHdpdGggLS10cnVzdC1leGl0LWNvZGUgZm9yIGJ1aWx0LWlucycgJworCXRlc3RfY29uZmlnIGRpZmZ0b29sLnZpbWRpZmYucGF0aCBmYWxzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmdG9vbCAteSAtLXRydXN0LWV4aXQtY29kZSAtdCB2aW1kaWZmIGJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCBob25vcnMgZGlmZnRvb2wudHJ1c3RFeGl0Q29kZSA9IHRydWUnICcKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC5lcnJvci5jbWQgZmFsc2UgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC50cnVzdEV4aXRDb2RlIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZnRvb2wgLXkgLXQgZXJyb3IgYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIGhvbm9ycyBkaWZmdG9vbC50cnVzdEV4aXRDb2RlID0gZmFsc2UnICcKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC5lcnJvci5jbWQgZmFsc2UgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC50cnVzdEV4aXRDb2RlIGZhbHNlICYmCisJZ2l0IGRpZmZ0b29sIC15IC10IGVycm9yIGJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCBpZ25vcmVzIGV4aXQgY29kZSB3aXRoIC0tbm8tdHJ1c3QtZXhpdC1jb2RlJyAnCisJdGVzdF9jb25maWcgZGlmZnRvb2wuZXJyb3IuY21kIGZhbHNlICYmCisJdGVzdF9jb25maWcgZGlmZnRvb2wudHJ1c3RFeGl0Q29kZSB0cnVlICYmCisJZ2l0IGRpZmZ0b29sIC15IC0tbm8tdHJ1c3QtZXhpdC1jb2RlIC10IGVycm9yIGJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCBzdG9wcyBvbiBlcnJvciB3aXRoIC0tdHJ1c3QtZXhpdC1jb2RlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBmb3ItZGlmZiAuZ2l0L2ZhaWwtcmlnaHQtZmlsZSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLSBmb3ItZGlmZiIgJiYKKwl3cml0ZV9zY3JpcHQgLmdpdC9mYWlsLXJpZ2h0LWZpbGUgPDwtXEVPRiAmJgorCWVjaG8gZmFpbGVkCisJZXhpdCAxCisJRU9GCisJPmZvci1kaWZmICYmCisJZ2l0IGFkZCBmb3ItZGlmZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmdG9vbCAteSAtLXRydXN0LWV4aXQtY29kZSBcCisJCS0tZXh0Y21kIC5naXQvZmFpbC1yaWdodC1maWxlIGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgaG9ub3JzIGV4aXQgc3RhdHVzIGlmIGNvbW1hbmQgbm90IGZvdW5kJyAnCisJdGVzdF9jb25maWcgZGlmZnRvb2wubm9uZXhpc3RlbnQuY21kIGktZG9udC1leGlzdCAmJgorCXRlc3RfY29uZmlnIGRpZmZ0b29sLnRydXN0RXhpdENvZGUgZmFsc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZnRvb2wgLXkgLXQgbm9uZXhpc3RlbnQgYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIGhvbm9ycyAtLWd1aScgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS50b29sIGJvZ3VzLXRvb2wgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLnRvb2wgYm9ndXMtdG9vbCAmJgorCXRlc3RfY29uZmlnIGRpZmYuZ3VpdG9vbCB0ZXN0LXRvb2wgJiYKKworCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1ndWkgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC0tZ3VpIGxhc3Qgc2V0dGluZyB3aW5zJyAnCisJZGlmZnRvb2xfdGVzdF9zZXR1cCAmJgorCTogPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAtLWd1aSAtLW5vLWd1aSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdF9jb25maWcgbWVyZ2UudG9vbCBib2d1cy10b29sICYmCisJdGVzdF9jb25maWcgZGlmZi50b29sIGJvZ3VzLXRvb2wgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLmd1aXRvb2wgdGVzdC10b29sICYmCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAtLW5vLWd1aSAtLWd1aSBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgLS1ndWkgd29ya3Mgd2l0aG91dCBjb25maWd1cmVkIGRpZmYuZ3VpdG9vbCcgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tZ3VpIGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFNwZWNpZnkgdGhlIGRpZmYgdG9vbCB1c2luZyAkR0lUX0RJRkZfVE9PTAordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0RJRkZfVE9PTCB2YXJpYWJsZScgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZi50b29sICYmCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCUdJVF9ESUZGX1RPT0w9dGVzdC10b29sIGdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBUZXN0IHRoZSAkR0lUXypfVE9PTCB2YXJpYWJsZXMgYW5kIGVuc3VyZQorIyB0aGF0ICRHSVRfRElGRl9UT09MIGFsd2F5cyB3aW5zIHVubGVzcyAtLXRvb2wgaXMgc3BlY2lmaWVkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRElGRl9UT09MIG92ZXJyaWRlcycgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLnRvb2wgYm9ndXMtdG9vbCAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnRvb2wgYm9ndXMtdG9vbCAmJgorCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCUdJVF9ESUZGX1RPT0w9dGVzdC10b29sIGdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXRlc3RfY29uZmlnIGRpZmYudG9vbCBib2d1cy10b29sICYmCisJdGVzdF9jb25maWcgbWVyZ2UudG9vbCBib2d1cy10b29sICYmCisJR0lUX0RJRkZfVE9PTD1ib2d1cy10b29sIFwKKwkJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tdG9vbD10ZXN0LXRvb2wgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVGVzdCB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcGFzcyAtLW5vLXByb21wdCB0byBkaWZmdG9vbAorIyB3aGVuICRHSVRfRElGRlRPT0xfTk9fUFJPTVBUIGlzIHRydWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESUZGVE9PTF9OT19QUk9NUFQgdmFyaWFibGUnICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCUdJVF9ESUZGVE9PTF9OT19QUk9NUFQ9dHJ1ZSBnaXQgZGlmZnRvb2wgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgZ2l0LWRpZmZ0b29sIHN1cHBvcnRzIHRoZSBkaWZmdG9vbC5wcm9tcHQgdmFyaWFibGUuCisjIFRlc3QgdGhhdCBHSVRfRElGRlRPT0xfUFJPTVBUIGNhbiBvdmVycmlkZSBkaWZmdG9vbC5wcm9tcHQgPSBmYWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0RJRkZUT09MX1BST01QVCB2YXJpYWJsZScgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC5wcm9tcHQgZmFsc2UgJiYKKwllY2hvID5pbnB1dCAmJgorCUdJVF9ESUZGVE9PTF9QUk9NUFQ9dHJ1ZSBnaXQgZGlmZnRvb2wgYnJhbmNoIDxpbnB1dCA+b3V0cHV0ICYmCisJcHJvbXB0PSQodGFpbCAtMSA8b3V0cHV0KSAmJgorCXByb21wdF9naXZlbiAiJHByb21wdCIKKycKKworIyBUZXN0IHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIC0tbm8tcHJvbXB0IHdoZW4gZGlmZnRvb2wucHJvbXB0IGlzIGZhbHNlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbC5wcm9tcHQgY29uZmlnIHZhcmlhYmxlIGlzIGZhbHNlJyAnCisJZGlmZnRvb2xfdGVzdF9zZXR1cCAmJgorCXRlc3RfY29uZmlnIGRpZmZ0b29sLnByb21wdCBmYWxzZSAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVGVzdCB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcGFzcyAtLW5vLXByb21wdCB3aGVuIG1lcmdldG9vbC5wcm9tcHQgaXMgZmFsc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIG1lcmdlLnByb21wdCA9IGZhbHNlJyAnCisJZGlmZnRvb2xfdGVzdF9zZXR1cCAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgZGlmZnRvb2wucHJvbXB0ICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLnByb21wdCBmYWxzZSAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVGVzdCB0aGF0IHRoZSAteSBmbGFnIGNhbiBvdmVycmlkZSBkaWZmdG9vbC5wcm9tcHQgPSB0cnVlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbC5wcm9tcHQgY2FuIG92ZXJyaWRkZW4gd2l0aCAteScgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC5wcm9tcHQgdHJ1ZSAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLXkgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVGVzdCB0aGF0IHRoZSAtLXByb21wdCBmbGFnIGNhbiBvdmVycmlkZSBkaWZmdG9vbC5wcm9tcHQgPSBmYWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wucHJvbXB0IGNhbiBvdmVycmlkZGVuIHdpdGggLS1wcm9tcHQnICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJdGVzdF9jb25maWcgZGlmZnRvb2wucHJvbXB0IGZhbHNlICYmCisJZWNobyA+aW5wdXQgJiYKKwlnaXQgZGlmZnRvb2wgLS1wcm9tcHQgYnJhbmNoIDxpbnB1dCA+b3V0cHV0ICYmCisJcHJvbXB0PSQodGFpbCAtMSA8b3V0cHV0KSAmJgorCXByb21wdF9naXZlbiAiJHByb21wdCIKKycKKworIyBUZXN0IHRoYXQgdGhlIGxhc3QgZmxhZyBwYXNzZWQgb24gdGhlIGNvbW1hbmQtbGluZSB3aW5zCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCBsYXN0IGZsYWcgd2lucycgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC0tcHJvbXB0IC0tbm8tcHJvbXB0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gPmlucHV0ICYmCisJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tcHJvbXB0IGJyYW5jaCA8aW5wdXQgPm91dHB1dCAmJgorCXByb21wdD0kKHRhaWwgLTEgPG91dHB1dCkgJiYKKwlwcm9tcHRfZ2l2ZW4gIiRwcm9tcHQiCisnCisKKyMgZ2l0LWRpZmZ0b29sIGZhbGxzIGJhY2sgdG8gZ2l0LW1lcmdldG9vbCBjb25maWcgdmFyaWFibGVzCisjIHNvIHRlc3QgdGhhdCBiZWhhdmlvciBoZXJlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCArIG1lcmdldG9vbCBjb25maWcgdmFyaWFibGVzJyAnCisJdGVzdF9jb25maWcgbWVyZ2UudG9vbCB0ZXN0LXRvb2wgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZXRvb2wudGVzdC10b29sLmNtZCAiY2F0IFwkTE9DQUwiICYmCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgZGlmZnRvb2wgLS1ndWkgLS1uby1wcm9tcHQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIHNldCBtZXJnZS50b29sIHRvIHNvbWV0aGluZyBib2d1cywgZGlmZi50b29sIHRvIHRlc3QtdG9vbAorCXRlc3RfY29uZmlnIG1lcmdlLnRvb2wgYm9ndXMtdG9vbCAmJgorCXRlc3RfY29uZmlnIGRpZmYudG9vbCB0ZXN0LXRvb2wgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGRpZmZ0b29sIC0tZ3VpIC0tbm8tcHJvbXB0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBzZXQgbWVyZ2UudG9vbCwgZGlmZi50b29sIHRvIHNvbWV0aGluZyBib2d1cywgbWVyZ2UuZ3VpdG9vbCB0byB0ZXN0LXRvb2wKKwl0ZXN0X2NvbmZpZyBkaWZmLnRvb2wgYm9ndXMtdG9vbCAmJgorCXRlc3RfY29uZmlnIG1lcmdlLmd1aXRvb2wgdGVzdC10b29sICYmCisJZ2l0IGRpZmZ0b29sIC0tZ3VpIC0tbm8tcHJvbXB0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBzZXQgbWVyZ2UudG9vbCwgZGlmZi50b29sLCBtZXJnZS5ndWl0b29sIHRvIHNvbWV0aGluZyBib2d1cywgZGlmZi5ndWl0b29sIHRvIHRlc3QtdG9vbAorCXRlc3RfY29uZmlnIG1lcmdlLmd1aXRvb2wgYm9ndXMtdG9vbCAmJgorCXRlc3RfY29uZmlnIGRpZmYuZ3VpdG9vbCB0ZXN0LXRvb2wgJiYKKwlnaXQgZGlmZnRvb2wgLS1ndWkgLS1uby1wcm9tcHQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sLjx0b29sPi5wYXRoJyAnCisJdGVzdF9jb25maWcgZGlmZnRvb2wudGtkaWZmLnBhdGggZWNobyAmJgorCWdpdCBkaWZmdG9vbCAtLXRvb2w9dGtkaWZmIC0tbm8tcHJvbXB0IGJyYW5jaCA+b3V0cHV0ICYmCisJZ3JlcCBmaWxlIG91dHB1dCA+Z3JlcC1vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGdyZXAtb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC0tZXh0Y21kPWNhdCcgJworCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwllY2hvIG1hc3RlciA+PmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAtLWV4dGNtZD1jYXQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC0tZXh0Y21kIGNhdCcgJworCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwllY2hvIG1hc3RlciA+PmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAtLWV4dGNtZD1jYXQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC14IGNhdCcgJworCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwllY2hvIG1hc3RlciA+PmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAteCBjYXQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC0tZXh0Y21kIGVjaG8gYXJnMScgJworCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IFwKKwkJLS1leHRjbWQgc2hcIC1jXCBcImVjaG9cIFwkMVwiIGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCAtLWV4dGNtZCBjYXQgYXJnMScgJworCWVjaG8gbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgXAorCQktLWV4dGNtZCBzaFwgLWNcIFwiY2F0XCBcJDFcIiBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgLS1leHRjbWQgY2F0IGFyZzInICcKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IFwKKwkJLS1leHRjbWQgc2hcIC1jXCBcImNhdFwgXFxcIlwkMlxcXCJcIiBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBDcmVhdGUgYSBzZWNvbmQgZmlsZSBvbiBtYXN0ZXIgYW5kIGEgZGlmZmVyZW50IHZlcnNpb24gb24gYnJhbmNoCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB3aXRoIDIgZmlsZXMgZGlmZmVyZW50JyAnCisJZWNobyBtMiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkZWQgZmlsZTIiICYmCisKKwlnaXQgY2hlY2tvdXQgYnJhbmNoICYmCisJZWNobyBicjIgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLWEgLW0gImJyYW5jaCBjaGFuZ2VkIGZpbGUyIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2F5IG5vIHRvIHRoZSBmaXJzdCBmaWxlJyAnCisJKGVjaG8gbiAmJiBlY2hvKSA+aW5wdXQgJiYKKwlnaXQgZGlmZnRvb2wgLXggY2F0IGJyYW5jaCA8aW5wdXQgPm91dHB1dCAmJgorCWdyZXAgbTIgb3V0cHV0ICYmCisJZ3JlcCBicjIgb3V0cHV0ICYmCisJISBncmVwIG1hc3RlciBvdXRwdXQgJiYKKwkhIGdyZXAgYnJhbmNoIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYXkgbm8gdG8gdGhlIHNlY29uZCBmaWxlJyAnCisJKGVjaG8gJiYgZWNobyBuKSA+aW5wdXQgJiYKKwlnaXQgZGlmZnRvb2wgLXggY2F0IGJyYW5jaCA8aW5wdXQgPm91dHB1dCAmJgorCWdyZXAgbWFzdGVyIG91dHB1dCAmJgorCWdyZXAgYnJhbmNoIG91dHB1dCAmJgorCSEgZ3JlcCBtMiBvdXRwdXQgJiYKKwkhIGdyZXAgYnIyIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbmRpbmcgcHJvbXB0IGlucHV0IHdpdGggRU9GJyAnCisJZ2l0IGRpZmZ0b29sIC14IGNhdCBicmFuY2ggPC9kZXYvbnVsbCA+b3V0cHV0ICYmCisJISBncmVwIG1hc3RlciBvdXRwdXQgJiYKKwkhIGdyZXAgYnJhbmNoIG91dHB1dCAmJgorCSEgZ3JlcCBtMiBvdXRwdXQgJiYKKwkhIGdyZXAgYnIyIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCAtLXRvb2wtaGVscCcgJworCWdpdCBkaWZmdG9vbCAtLXRvb2wtaGVscCA+b3V0cHV0ICYmCisJZ3JlcCB0b29sIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjaGFuZ2UgaW4gc3ViZGlyZWN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCW1rZGlyIHN1YiAmJgorCWVjaG8gbWFzdGVyID5zdWIvc3ViICYmCisJZ2l0IGFkZCBzdWIvc3ViICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkZWQgc3ViL3N1YiIgJiYKKwlnaXQgdGFnIHYxICYmCisJZWNobyB0ZXN0ID4+ZmlsZSAmJgorCWVjaG8gdGVzdCA+PnN1Yi9zdWIgJiYKKwlnaXQgYWRkIGZpbGUgc3ViL3N1YiAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmaWVkIGJvdGgiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC1kIHdpdGggZ3Jvd2luZyBwYXRocycgJworCWE9YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAmJgorCWdpdCBpbml0IGdyb3dpbmcgJiYKKwkoCisJCWNkIGdyb3dpbmcgJiYKKwkJZWNobyAidGVzdCAtZiBcIlwkMi9iXCIiIHwgd3JpdGVfc2NyaXB0IC5naXQvdGVzdC1mb3ItYi5zaCAmJgorCQlvbmU9JChwcmludGYgMSB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCQl0d289JChwcmludGYgMiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIFwKKwkJCS0tY2FjaGVpbmZvIDEwMDY0NCwkb25lLCRhIC0tY2FjaGVpbmZvIDEwMDY0NCwkdHdvLGIgJiYKKwkJdHJlZTE9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBcCisJCQktLWNhY2hlaW5mbyAxMDA2NDQsJHR3bywkYSAtLWNhY2hlaW5mbyAxMDA2NDQsJG9uZSxiICYmCisJCXRyZWUyPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJCWdpdCBjaGVja291dCAtLSAkYSAmJgorCQlnaXQgZGlmZnRvb2wgLWQgLS1leHRjbWQgLmdpdC90ZXN0LWZvci1iLnNoICR0cmVlMSAkdHJlZTIKKwkpCisnCisKK3J1bl9kaXJfZGlmZl90ZXN0ICgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkMSAtLW5vLXN5bWxpbmtzIiAiCisJCXN5bWxpbmtzPS0tbm8tc3ltbGlua3MgJiYKKwkJJDIKKwkiCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAiJDEgLS1zeW1saW5rcyIgIgorCQlzeW1saW5rcz0tLXN5bWxpbmtzICYmCisJCSQyCisJIgorfQorCitydW5fZGlyX2RpZmZfdGVzdCAnZGlmZnRvb2wgLWQnICcKKwlnaXQgZGlmZnRvb2wgLWQgJHN5bWxpbmtzIC0tZXh0Y21kIGxzIGJyYW5jaCA+b3V0cHV0ICYmCisJZ3JlcCBzdWIgb3V0cHV0ICYmCisJZ3JlcCBmaWxlIG91dHB1dAorJworCitydW5fZGlyX2RpZmZfdGVzdCAnZGlmZnRvb2wgLS1kaXItZGlmZicgJworCWdpdCBkaWZmdG9vbCAtLWRpci1kaWZmICRzeW1saW5rcyAtLWV4dGNtZCBscyBicmFuY2ggPm91dHB1dCAmJgorCWdyZXAgc3ViIG91dHB1dCAmJgorCWdyZXAgZmlsZSBvdXRwdXQKKycKKworcnVuX2Rpcl9kaWZmX3Rlc3QgJ2RpZmZ0b29sIC0tZGlyLWRpZmYgaWdub3JlcyAtLXByb21wdCcgJworCWdpdCBkaWZmdG9vbCAtLWRpci1kaWZmICRzeW1saW5rcyAtLXByb21wdCAtLWV4dGNtZCBscyBicmFuY2ggPm91dHB1dCAmJgorCWdyZXAgc3ViIG91dHB1dCAmJgorCWdyZXAgZmlsZSBvdXRwdXQKKycKKworcnVuX2Rpcl9kaWZmX3Rlc3QgJ2RpZmZ0b29sIC0tZGlyLWRpZmYgYnJhbmNoIGZyb20gc3ViZGlyZWN0b3J5JyAnCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYgJHN5bWxpbmtzIC0tZXh0Y21kIGxzIGJyYW5jaCA+b3V0cHV0ICYmCisJCSMgInN1YiIgbXVzdCBvbmx5IGV4aXN0IGluICJyaWdodCIKKwkJIyAiZmlsZSIgYW5kICJmaWxlMiIgbXVzdCBiZSBsaXN0ZWQgaW4gYm90aCAibGVmdCIgYW5kICJyaWdodCIKKwkJZ3JlcCBzdWIgb3V0cHV0ID5zdWItb3V0cHV0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgc3ViLW91dHB1dCAmJgorCQlncmVwIGZpbGUiJCIgb3V0cHV0ID5maWxlLW91dHB1dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGZpbGUtb3V0cHV0ICYmCisJCWdyZXAgZmlsZTIgb3V0cHV0ID5maWxlMi1vdXRwdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBmaWxlMi1vdXRwdXQKKwkpCisnCisKK3J1bl9kaXJfZGlmZl90ZXN0ICdkaWZmdG9vbCAtLWRpci1kaWZmIHYxIGZyb20gc3ViZGlyZWN0b3J5JyAnCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYgJHN5bWxpbmtzIC0tZXh0Y21kIGxzIHYxID5vdXRwdXQgJiYKKwkJIyAic3ViIiBhbmQgImZpbGUiIGV4aXN0IGluIGJvdGggdjEgYW5kIEhFQUQuCisJCSMgImZpbGUyIiBpcyB1bmNoYW5nZWQuCisJCWdyZXAgc3ViIG91dHB1dCA+c3ViLW91dHB1dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIHN1Yi1vdXRwdXQgJiYKKwkJZ3JlcCBmaWxlIG91dHB1dCA+ZmlsZS1vdXRwdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBmaWxlLW91dHB1dCAmJgorCQkhIGdyZXAgZmlsZTIgb3V0cHV0CisJKQorJworCitydW5fZGlyX2RpZmZfdGVzdCAnZGlmZnRvb2wgLS1kaXItZGlmZiBicmFuY2ggZnJvbSBzdWJkaXJlY3Rvcnkgdy8gcGF0aHNwZWMnICcKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiAkc3ltbGlua3MgLS1leHRjbWQgbHMgYnJhbmNoIC0tIC4+b3V0cHV0ICYmCisJCSMgInN1YiIgb25seSBleGlzdHMgaW4gInJpZ2h0IgorCQkjICJmaWxlIiBhbmQgImZpbGUyIiBtdXN0IG5vdCBiZSBsaXN0ZWQKKwkJZ3JlcCBzdWIgb3V0cHV0ID5zdWItb3V0cHV0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgc3ViLW91dHB1dCAmJgorCQkhIGdyZXAgZmlsZSBvdXRwdXQKKwkpCisnCisKK3J1bl9kaXJfZGlmZl90ZXN0ICdkaWZmdG9vbCAtLWRpci1kaWZmIHYxIGZyb20gc3ViZGlyZWN0b3J5IHcvIHBhdGhzcGVjJyAnCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYgJHN5bWxpbmtzIC0tZXh0Y21kIGxzIHYxIC0tIC4+b3V0cHV0ICYmCisJCSMgInN1YiIgZXhpc3RzIGluIHYxIGFuZCBIRUFECisJCSMgImZpbGUiIGlzIGZpbHRlcmVkIG91dCBieSB0aGUgcGF0aHNwZWMKKwkJZ3JlcCBzdWIgb3V0cHV0ID5zdWItb3V0cHV0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgc3ViLW91dHB1dCAmJgorCQkhIGdyZXAgZmlsZSBvdXRwdXQKKwkpCisnCisKK3J1bl9kaXJfZGlmZl90ZXN0ICdkaWZmdG9vbCAtLWRpci1kaWZmIGZyb20gc3ViZGlyZWN0b3J5IHdpdGggR0lUX0RJUiBzZXQnICcKKwkoCisJCUdJVF9ESVI9JChwd2QpLy5naXQgJiYKKwkJZXhwb3J0IEdJVF9ESVIgJiYKKwkJR0lUX1dPUktfVFJFRT0kKHB3ZCkgJiYKKwkJZXhwb3J0IEdJVF9XT1JLX1RSRUUgJiYKKwkJY2Qgc3ViICYmCisJCWdpdCBkaWZmdG9vbCAtLWRpci1kaWZmICRzeW1saW5rcyAtLWV4dGNtZCBscyBcCisJCQlicmFuY2ggLS0gc3ViID5vdXRwdXQgJiYKKwkJZ3JlcCBzdWIgb3V0cHV0ICYmCisJCSEgZ3JlcCBmaWxlIG91dHB1dAorCSkKKycKKworcnVuX2Rpcl9kaWZmX3Rlc3QgJ2RpZmZ0b29sIC0tZGlyLWRpZmYgd2hlbiB3b3JrdHJlZSBmaWxlIGlzIG1pc3NpbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIGZpbGUyICYmCisJZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYgJHN5bWxpbmtzIC0tZXh0Y21kIGxzIGJyYW5jaCBtYXN0ZXIgPm91dHB1dCAmJgorCWdyZXAgZmlsZTIgb3V0cHV0CisnCisKK3J1bl9kaXJfZGlmZl90ZXN0ICdkaWZmdG9vbCAtLWRpci1kaWZmIHdpdGggdW5tZXJnZWQgZmlsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfY29uZmlnIGRpZmZ0b29sLmVjaG8uY21kICJlY2hvIG9rIiAmJgorCWdpdCBjaGVja291dCAtQiBjb25mbGljdC1hICYmCisJZ2l0IGNoZWNrb3V0IC1CIGNvbmZsaWN0LWIgJiYKKwlnaXQgY2hlY2tvdXQgY29uZmxpY3QtYSAmJgorCWVjaG8gYSA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGNvbmZsaWN0LWEgJiYKKwlnaXQgY2hlY2tvdXQgY29uZmxpY3QtYiAmJgorCWVjaG8gYiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGNvbmZsaWN0LWIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIGNvbmZsaWN0LWEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3QtYiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQlvaworCUVPRgorCWdpdCBkaWZmdG9vbCAtLWRpci1kaWZmICRzeW1saW5rcyAtdCBlY2hvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3dyaXRlX3NjcmlwdCAuZ2l0L0NIRUNLX1NZTUxJTktTIDw8XEVPRgorZm9yIGYgaW4gZmlsZSBmaWxlMiBzdWIvc3ViCitkbworCWVjaG8gIiRmIgorCWxzIC1sZCAiJDIvJGYiIHwgc2VkIC1lICdzLy4qIC0+IC8vJworZG9uZSA+YWN0dWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZGlmZnRvb2wgLS1kaXItZGlmZiAtLXN5bWxpbmtzIHdpdGhvdXQgdW5zdGFnZWQgY2hhbmdlcycgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWZpbGUKKwkkUFdEL2ZpbGUKKwlmaWxlMgorCSRQV0QvZmlsZTIKKwlzdWIvc3ViCisJJFBXRC9zdWIvc3ViCisJRU9GCisJZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYgLS1zeW1saW5rcyBcCisJCS0tZXh0Y21kICIuLy5naXQvQ0hFQ0tfU1lNTElOS1MiIGJyYW5jaCBIRUFEICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit3cml0ZV9zY3JpcHQgbW9kaWZ5LXJpZ2h0LWZpbGUgPDxcRU9GCitlY2hvICJuZXcgY29udGVudCIgPiIkMi9maWxlIgorRU9GCisKK3J1bl9kaXJfZGlmZl90ZXN0ICdkaWZmdG9vbCAtLWRpci1kaWZmIHN5bmNzIHdvcmt0cmVlIHdpdGggdW5zdGFnZWQgY2hhbmdlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvICJvcmlnIGNvbnRlbnQiID5maWxlICYmCisJZ2l0IGRpZmZ0b29sIC1kICRzeW1saW5rcyAtLWV4dGNtZCAiJFBXRC9tb2RpZnktcmlnaHQtZmlsZSIgYnJhbmNoICYmCisJZWNobyAibmV3IGNvbnRlbnQiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCitydW5fZGlyX2RpZmZfdGVzdCAnZGlmZnRvb2wgLS1kaXItZGlmZiBzeW5jcyB3b3JrdHJlZSB3aXRob3V0IHVuc3RhZ2VkIGNoYW5nZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGRpZmZ0b29sIC1kICRzeW1saW5rcyAtLWV4dGNtZCAiJFBXRC9tb2RpZnktcmlnaHQtZmlsZSIgYnJhbmNoICYmCisJZWNobyAibmV3IGNvbnRlbnQiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit3cml0ZV9zY3JpcHQgbW9kaWZ5LWZpbGUgPDxcRU9GCitlY2hvICJuZXcgY29udGVudCIgPmZpbGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCAtLW5vLXN5bWxpbmtzIGRvZXMgbm90IG92ZXJ3cml0ZSB3b3JraW5nIHRyZWUgZmlsZSAnICcKKwllY2hvICJvcmlnIGNvbnRlbnQiID5maWxlICYmCisJZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYgLS1uby1zeW1saW5rcyAtLWV4dGNtZCAiJFBXRC9tb2RpZnktZmlsZSIgYnJhbmNoICYmCisJZWNobyAibmV3IGNvbnRlbnQiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit3cml0ZV9zY3JpcHQgbW9kaWZ5LWJvdGgtZmlsZXMgPDxcRU9GCitlY2hvICJ3dCBjb250ZW50IiA+ZmlsZSAmJgorZWNobyAidG1wIGNvbnRlbnQiID4iJDIvZmlsZSIgJiYKK2VjaG8gIiQyIiA+dG1wZGlyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgLS1uby1zeW1saW5rcyBkZXRlY3RzIGNvbmZsaWN0ICcgJworCSgKKwkJVE1QRElSPSRUUkFTSF9ESVJFQ1RPUlkgJiYKKwkJZXhwb3J0IFRNUERJUiAmJgorCQllY2hvICJvcmlnIGNvbnRlbnQiID5maWxlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmdG9vbCAtLWRpci1kaWZmIC0tbm8tc3ltbGlua3MgLS1leHRjbWQgIiRQV0QvbW9kaWZ5LWJvdGgtZmlsZXMiIGJyYW5jaCAmJgorCQllY2hvICJ3dCBjb250ZW50IiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJCWVjaG8gInRtcCBjb250ZW50IiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCAiJChjYXQgdG1wZGlyKS9maWxlIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgcHJvcGVybHkgaG9ub3JzIGdpdGxpbmsgYW5kIGNvcmUud29ya3RyZWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIHN1Ym1vZC91bGUgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuLy4gc3VibW9kL3VsZSAmJgorCXRlc3RfY29uZmlnIC1DIHN1Ym1vZC91bGUgZGlmZi50b29sIGNoZWNrdHJlZXMgJiYKKwl0ZXN0X2NvbmZpZyAtQyBzdWJtb2QvdWxlIGRpZmZ0b29sLmNoZWNrdHJlZXMuY21kICdcJycKKwkJdGVzdCAtZCAiJExPQ0FMIiAmJiB0ZXN0IC1kICIkUkVNT1RFIiAmJiBlY2hvIGdvb2QKKwkJJ1wnJyAmJgorCSgKKwkJY2Qgc3VibW9kL3VsZSAmJgorCQllY2hvIGdvb2QgPmV4cGVjdCAmJgorCQlnaXQgZGlmZnRvb2wgLS10b29sPWNoZWNrdHJlZXMgLS1kaXItZGlmZiBIRUFEfiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJcm0gLWYgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZGlmZnRvb2wgLS1kaXItZGlmZiBzeW1saW5rZWQgZGlyZWN0b3JpZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBpbml0IGRpcmxpbmtzICYmCisJKAorCQljZCBkaXJsaW5rcyAmJgorCQlnaXQgY29uZmlnIGRpZmYudG9vbCBjaGVja3RyZWVzICYmCisJCWdpdCBjb25maWcgZGlmZnRvb2wuY2hlY2t0cmVlcy5jbWQgImVjaG8gZ29vZCIgJiYKKwkJbWtkaXIgZm9vICYmCisJCTogPmZvby9iYXIgJiYKKwkJZ2l0IGFkZCBmb28vYmFyICYmCisJCXRlc3RfY29tbWl0IHN5bWxpbmstb25lICYmCisJCWxuIC1zIGZvbyBsaW5rICYmCisJCWdpdCBhZGQgbGluayAmJgorCQl0ZXN0X2NvbW1pdCBzeW1saW5rLXR3byAmJgorCQllY2hvIGdvb2QgPmV4cGVjdCAmJgorCQlnaXQgZGlmZnRvb2wgLS10b29sPWNoZWNrdHJlZXMgLS1kaXItZGlmZiBIRUFEfiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RpZmZ0b29sIC0tZGlyLWRpZmYgaGFuZGxlcyBtb2RpZmllZCBzeW1saW5rcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgcmVzZXQgLS1oYXJkICYmCisJdG91Y2ggYiAmJgorCWxuIC1zIGIgYyAmJgorCWdpdCBhZGQgYiBjICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJdG91Y2ggZCAmJgorCXJtIGMgJiYKKwlsbiAtcyBkIGMgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJYgorCQljCisKKwkJYworCUVPRgorCWdpdCBkaWZmdG9vbCAtLXN5bWxpbmtzIC0tZGlyLWRpZmYgLS1leHRjbWQgbHMgPm91dHB1dCAmJgorCWdyZXAgLXYgXi8gb3V0cHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgZGlmZnRvb2wgLS1uby1zeW1saW5rcyAtLWRpci1kaWZmIC0tZXh0Y21kIGxzID5vdXRwdXQgJiYKKwlncmVwIC12IF4vIG91dHB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBUaGUgbGVmdCBzaWRlIGNvbnRhaW5zIHN5bWxpbmsgImMiIHRoYXQgcG9pbnRzIHRvICJiIgorCXRlc3RfY29uZmlnIGRpZmZ0b29sLmNhdC5jbWQgImNhdCBcJExPQ0FML2MiICYmCisJcHJpbnRmICIlc1xuIiBiID5leHBlY3QgJiYKKworCWdpdCBkaWZmdG9vbCAtLXN5bWxpbmtzIC0tZGlyLWRpZmYgLS10b29sIGNhdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IGRpZmZ0b29sIC0tc3ltbGlua3MgLS1uby1zeW1saW5rcyAtLWRpci1kaWZmIC0tdG9vbCBjYXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgVGhlIHJpZ2h0IHNpZGUgY29udGFpbnMgc3ltbGluayAiYyIgdGhhdCBwb2ludHMgdG8gImQiCisJdGVzdF9jb25maWcgZGlmZnRvb2wuY2F0LmNtZCAiY2F0IFwkUkVNT1RFL2MiICYmCisJcHJpbnRmICIlc1xuIiBkID5leHBlY3QgJiYKKworCWdpdCBkaWZmdG9vbCAtLXN5bWxpbmtzIC0tZGlyLWRpZmYgLS10b29sIGNhdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IGRpZmZ0b29sIC0tbm8tc3ltbGlua3MgLS1kaXItZGlmZiAtLXRvb2wgY2F0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIERlbGV0ZWQgc3ltbGlua3MKKwlybSAtZiBjICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWIKKwkJYworCisJRU9GCisJZ2l0IGRpZmZ0b29sIC0tc3ltbGlua3MgLS1kaXItZGlmZiAtLWV4dGNtZCBscyA+b3V0cHV0ICYmCisJZ3JlcCAtdiBeLyBvdXRwdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBkaWZmdG9vbCAtLW5vLXN5bWxpbmtzIC0tZGlyLWRpZmYgLS1leHRjbWQgbHMgPm91dHB1dCAmJgorCWdyZXAgLXYgXi8gb3V0cHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291dHNpZGUgd29ya3RyZWUnICcKKwllY2hvIDEgPjEgJiYKKwllY2hvIDIgPjIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgbm9uZ2l0IGdpdCBcCisJCS1jIGRpZmYudG9vbD1lY2hvIC1jIGRpZmZ0b29sLmVjaG8uY21kPSJlY2hvIFwkTE9DQUwgXCRSRU1PVEUiIFwKKwkJZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1uby1pbmRleCAuLi8xIC4uLzIgPmFjdHVhbCAmJgorCWVjaG8gIi4uLzEgLi4vMiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgLS1ndWksIC0tdG9vbCBhbmQgLS1leHRjbWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZnRvb2wgLS1ndWkgLS10b29sPXRlc3QtdG9vbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmdG9vbCAtLWd1aSAtLWV4dGNtZD1jYXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZnRvb2wgLS10b29sPXRlc3QtdG9vbCAtLWV4dGNtZD1jYXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZnRvb2wgLS1ndWkgLS10b29sPXRlc3QtdG9vbCAtLWV4dGNtZD1jYXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3ODEwLWdyZXAuc2ggYi90L3Q3ODEwLWdyZXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTkxZDViZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc4MTAtZ3JlcC5zaApAQCAtMCwwICsxLDE3NTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGdyZXAgdmFyaW91cy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+aGVsbG8uYyA8PEVPRgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlwcmludGYoIkhlbGxvIHdvcmxkLlxuIik7CisJcmV0dXJuIDA7CisJLyogY2hhciA/PyAqLworfQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXsKKwkJZWNobyBmb28gbW1hcCBiYXIKKwkJZWNobyBmb29fbW1hcCBiYXIKKwkJZWNobyBmb29fbW1hcCBiYXIgbW1hcAorCQllY2hvIGZvbyBtbWFwIGJhcl9tbWFwCisJCWVjaG8gZm9vX21tYXAgYmFyIG1tYXAgYmF6CisJfSA+ZmlsZSAmJgorCXsKKwkJZWNobyBIZWxsbyB3b3JsZAorCQllY2hvIEhlTExvIHdvcmxkCisJCWVjaG8gSGVsbG9fd29ybGQKKwkJZWNobyBIZUxMb193b3JsZAorCX0gPmhlbGxvX3dvcmxkICYmCisJeworCQllY2hvICJhK2IqYyIKKwkJZWNobyAiYStiYyIKKwkJZWNobyAiYWJjIgorCX0gPmFiICYmCisJeworCQllY2hvIGQgJiYKKwkJZWNobyAwCisJfSA+ZDAgJiYKKwllY2hvIHZ2diA+diAmJgorCWVjaG8gd3cgdyA+dyAmJgorCWVjaG8geCB4IHh4IHggPnggJiYKKwllY2hvIHkgeXkgPnkgJiYKKwllY2hvIHp6eiA+IHogJiYKKwlta2RpciB0ICYmCisJZWNobyB0ZXN0ID50L3QgJiYKKwllY2hvIHZ2diA+dC92ICYmCisJbWtkaXIgdC9hICYmCisJZWNobyB2dnYgPnQvYS92ICYmCisJeworCQllY2hvICJsaW5lIHdpdGhvdXQgbGVhZGluZyBzcGFjZTEiCisJCWVjaG8gIiBsaW5lIHdpdGggbGVhZGluZyBzcGFjZTEiCisJCWVjaG8gIiBsaW5lIHdpdGggbGVhZGluZyBzcGFjZTIiCisJCWVjaG8gIiBsaW5lIHdpdGggbGVhZGluZyBzcGFjZTMiCisJCWVjaG8gImxpbmUgd2l0aG91dCBsZWFkaW5nIHNwYWNlMiIKKwl9ID5zcGFjZSAmJgorCWNhdCA+aGVsbG8ucHMxIDw8LVxFT0YgJiYKKwkjIE5vLW9wLgorCWZ1bmN0aW9uIGR1bW15KCkge30KKworCSMgU2F5IGhlbGxvLgorCWZ1bmN0aW9uIGhlbGxvKCkgeworCSAgZWNobyAiSGVsbG8gd29ybGQuIgorCX0gIyBoZWxsbworCisJIyBTdGlsbCBhIG5vLW9wLgorCWZ1bmN0aW9uIGR1bW15KCkge30KKwlFT0YKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIEZVTk5ZTkFNRVMKKwl0aGVuCisJCWVjaG8gdW51c3VhbCA+IlwidW51c3VhbFwiIHBhdGhuYW1lIiAmJgorCQllY2hvIHVudXN1YWwgPiJ0L25lc3RlZCBcInVudXN1YWxcIiBwYXRobmFtZSIKKwlmaSAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIHNob3VsZCBub3Qgc2VnZmF1bHQgd2l0aCBhIGJhZCBpbnB1dCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwICIoIgorJworCitmb3IgSCBpbiBIRUFEICcnCitkbworCWNhc2UgIiRIIiBpbgorCUhFQUQpCUhDPSdIRUFEOicgTD0nSEVBRCcgOzsKKwknJykJSEM9IEw9J2luIHdvcmtpbmcgdHJlZScgOzsKKwllc2FjCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC13ICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ31maWxlOjE6Zm9vIG1tYXAgYmFyCisJCQllY2hvICR7SEN9ZmlsZTozOmZvb19tbWFwIGJhciBtbWFwCisJCQllY2hvICR7SEN9ZmlsZTo0OmZvbyBtbWFwIGJhcl9tbWFwCisJCQllY2hvICR7SEN9ZmlsZTo1OmZvb19tbWFwIGJhciBtbWFwIGJhegorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgLWMgZ3JlcC5saW5lbnVtYmVyPWZhbHNlIGdyZXAgLW4gLXcgLWUgbW1hcCAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwgKHdpdGggLS1jb2x1bW4pIiAnCisJCXsKKwkJCWVjaG8gJHtIQ31maWxlOjU6Zm9vIG1tYXAgYmFyCisJCQllY2hvICR7SEN9ZmlsZToxNDpmb29fbW1hcCBiYXIgbW1hcAorCQkJZWNobyAke0hDfWZpbGU6NTpmb28gbW1hcCBiYXJfbW1hcAorCQkJZWNobyAke0hDfWZpbGU6MTQ6Zm9vX21tYXAgYmFyIG1tYXAgYmF6CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tY29sdW1uIC13IC1lIG1tYXAgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC13ICRMICh3aXRoIC0tY29sdW1uLCBleHRlbmRlZCBPUikiICcKKwkJeworCQkJZWNobyAke0hDfWZpbGU6MTQ6Zm9vX21tYXAgYmFyIG1tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjE5OmZvb19tbWFwIGJhciBtbWFwIGJhegorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLWNvbHVtbiAtdyAtZSBtbWFwJCAtLW9yIC1lIGJheiAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwgKHdpdGggLS1jb2x1bW4sIC0taW52ZXJ0LW1hdGNoKSIgJworCQl7CisJCQllY2hvICR7SEN9ZmlsZToxOmZvbyBtbWFwIGJhcgorCQkJZWNobyAke0hDfWZpbGU6MTpmb29fbW1hcCBiYXIKKwkJCWVjaG8gJHtIQ31maWxlOjE6Zm9vX21tYXAgYmFyIG1tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjE6Zm9vIG1tYXAgYmFyX21tYXAKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1jb2x1bW4gLS1pbnZlcnQtbWF0Y2ggLXcgLWUgYmF6ICRIIC0tIGZpbGUgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMICh3aXRoIC0tY29sdW1uLCAtLWludmVydC1tYXRjaCwgZXh0ZW5kZWQgT1IpIiAnCisJCXsKKwkJCWVjaG8gJHtIQ31oZWxsb193b3JsZDo2OkhlTExvX3dvcmxkCisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tY29sdW1uIC0taW52ZXJ0LW1hdGNoIC1lIGxsIC0tb3IgLS1ub3QgLWUgXyAkSCAtLSBoZWxsb193b3JsZCBcCisJCQk+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgKHdpdGggLS1jb2x1bW4sIC0taW52ZXJ0LW1hdGNoLCBleHRlbmRlZCBBTkQpIiAnCisJCXsKKwkJCWVjaG8gJHtIQ31oZWxsb193b3JsZDozOkhlbGxvIHdvcmxkCisJCQllY2hvICR7SEN9aGVsbG9fd29ybGQ6MzpIZWxsb193b3JsZAorCQkJZWNobyAke0hDfWhlbGxvX3dvcmxkOjY6SGVMTG9fd29ybGQKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1jb2x1bW4gLS1pbnZlcnQtbWF0Y2ggLS1ub3QgLWUgXyAtLWFuZCAtLW5vdCAtZSBsbCAkSCAtLSBoZWxsb193b3JsZCBcCisJCQk+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgKHdpdGggLS1jb2x1bW4sIGRvdWJsZS1uZWdhdGlvbikiICcKKwkJeworCQkJZWNobyAke0hDfWZpbGU6MTpmb29fbW1hcCBiYXIgbW1hcCBiYXoKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1jb2x1bW4gLS1ub3QgXCggLS1ub3QgLWUgZm9vIC0tb3IgLS1ub3QgLWUgYmF6IFwpICRIIC0tIGZpbGUgXAorCQkJPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC13ICRMICh3aXRoIC0tY29sdW1uLCAtQykiICcKKwkJeworCQkJZWNobyAke0hDfWZpbGU6NTpmb28gbW1hcCBiYXIKKwkJCWVjaG8gJHtIQ31maWxlLWZvb19tbWFwIGJhcgorCQkJZWNobyAke0hDfWZpbGU6MTQ6Zm9vX21tYXAgYmFyIG1tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjU6Zm9vIG1tYXAgYmFyX21tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjE0OmZvb19tbWFwIGJhciBtbWFwIGJhegorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLWNvbHVtbiAtdyAtQzEgLWUgbW1hcCAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwgKHdpdGggLS1saW5lLW51bWJlciwgLS1jb2x1bW4pIiAnCisJCXsKKwkJCWVjaG8gJHtIQ31maWxlOjE6NTpmb28gbW1hcCBiYXIKKwkJCWVjaG8gJHtIQ31maWxlOjM6MTQ6Zm9vX21tYXAgYmFyIG1tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjQ6NTpmb28gbW1hcCBiYXJfbW1hcAorCQkJZWNobyAke0hDfWZpbGU6NToxNDpmb29fbW1hcCBiYXIgbW1hcCBiYXoKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLW4gLS1jb2x1bW4gLXcgLWUgbW1hcCAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwgKHdpdGggbm9uLWV4dGVuZGVkIHBhdHRlcm5zLCAtLWNvbHVtbikiICcKKwkJeworCQkJZWNobyAke0hDfWZpbGU6NTpmb28gbW1hcCBiYXIKKwkJCWVjaG8gJHtIQ31maWxlOjEwOmZvb19tbWFwIGJhcgorCQkJZWNobyAke0hDfWZpbGU6MTA6Zm9vX21tYXAgYmFyIG1tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjU6Zm9vIG1tYXAgYmFyX21tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjEwOmZvb19tbWFwIGJhciBtbWFwIGJhegorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLWNvbHVtbiAtdyAtZSBiYXIgLWUgbW1hcCAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwiICcKKwkJeworCQkJZWNobyAke0hDfWZpbGU6MTpmb28gbW1hcCBiYXIKKwkJCWVjaG8gJHtIQ31maWxlOjM6Zm9vX21tYXAgYmFyIG1tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjQ6Zm9vIG1tYXAgYmFyX21tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjU6Zm9vX21tYXAgYmFyIG1tYXAgYmF6CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCAtYyBncmVwLmxpbmVudW1iZXI9dHJ1ZSBncmVwIC13IC1lIG1tYXAgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC13ICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ31maWxlOmZvbyBtbWFwIGJhcgorCQkJZWNobyAke0hDfWZpbGU6Zm9vX21tYXAgYmFyIG1tYXAKKwkJCWVjaG8gJHtIQ31maWxlOmZvbyBtbWFwIGJhcl9tbWFwCisJCQllY2hvICR7SEN9ZmlsZTpmb29fbW1hcCBiYXIgbW1hcCBiYXoKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IC1jIGdyZXAubGluZW51bWJlcj10cnVlIGdyZXAgLS1uby1saW5lLW51bWJlciAtdyAtZSBtbWFwICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtdyAkTCAodykiICcKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLW4gLXcgLWUgIl53IiAkSCA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC13ICRMICh4KSIgJworCQl7CisJCQllY2hvICR7SEN9eDoxOnggeCB4eCB4CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC1uIC13IC1lICJ4IHh4KiB4IiAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwgKHktMSkiICcKKwkJeworCQkJZWNobyAke0hDfXk6MTp5IHl5CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC1uIC13IC1lICJeeSIgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC13ICRMICh5LTIpIiAnCisJCWlmIGdpdCBncmVwIC1uIC13IC1lICJeeSB5IiAkSCA+YWN0dWFsCisJCXRoZW4KKwkJCWVjaG8gc2hvdWxkIG5vdCBoYXZlIG1hdGNoZWQKKwkJCWNhdCBhY3R1YWwKKwkJCWZhbHNlCisJCWVsc2UKKwkJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKwkJZmkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC13ICRMICh6KSIgJworCQlpZiBnaXQgZ3JlcCAtbiAtdyAtZSAiXnoiICRIID5hY3R1YWwKKwkJdGhlbgorCQkJZWNobyBzaG91bGQgbm90IGhhdmUgbWF0Y2hlZAorCQkJY2F0IGFjdHVhbAorCQkJZmFsc2UKKwkJZWxzZQorCQkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorCQlmaQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgKHdpdGggLS1jb2x1bW4sIC0tb25seS1tYXRjaGluZykiICcKKwkJeworCQkJZWNobyAke0hDfWZpbGU6MTo1Om1tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjI6NTptbWFwCisJCQllY2hvICR7SEN9ZmlsZTozOjU6bW1hcAorCQkJZWNobyAke0hDfWZpbGU6MzoxMzptbWFwCisJCQllY2hvICR7SEN9ZmlsZTo0OjU6bW1hcAorCQkJZWNobyAke0hDfWZpbGU6NDoxMzptbWFwCisJCQllY2hvICR7SEN9ZmlsZTo1OjU6bW1hcAorCQkJZWNobyAke0hDfWZpbGU6NToxMzptbWFwCisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tY29sdW1uIC1uIC1vIC1lIG1tYXAgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMICh0LTEpIiAnCisJCWVjaG8gIiR7SEN9dC90OjE6dGVzdCIgPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC1uIC1lIHRlc3QgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMICh0LTIpIiAnCisJCWVjaG8gIiR7SEN9dDoxOnRlc3QiID5leHBlY3RlZCAmJgorCQkoCisJCQljZCB0ICYmCisJCQlnaXQgZ3JlcCAtbiAtZSB0ZXN0ICRICisJCSkgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMICh0LTMpIiAnCisJCWVjaG8gIiR7SEN9dC90OjE6dGVzdCIgPmV4cGVjdGVkICYmCisJCSgKKwkJCWNkIHQgJiYKKwkJCWdpdCBncmVwIC0tZnVsbC1uYW1lIC1uIC1lIHRlc3QgJEgKKwkJKSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLWMgJEwgKG5vIC9kZXYvbnVsbCkiICcKKwkJISBnaXQgZ3JlcCAtYyB0ZXN0ICRIIHwgZ3JlcCAvZGV2L251bGwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tbWF4LWRlcHRoIC0xICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ310L2EvdjoxOnZ2dgorCQkJZWNobyAke0hDfXQvdjoxOnZ2dgorCQkJZWNobyAke0hDfXY6MTp2dnYKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1tYXgtZGVwdGggLTEgLW4gLWUgdnZ2ICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJCWdpdCBncmVwIC0tcmVjdXJzaXZlIC1uIC1lIHZ2diAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLS1tYXgtZGVwdGggMCAkTCIgJworCQl7CisJCQllY2hvICR7SEN9djoxOnZ2dgorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLW1heC1kZXB0aCAwIC1uIC1lIHZ2diAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCQlnaXQgZ3JlcCAtLW5vLXJlY3Vyc2l2ZSAtbiAtZSB2dnYgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tbWF4LWRlcHRoIDAgLS0gJyonICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ310L2EvdjoxOnZ2dgorCQkJZWNobyAke0hDfXQvdjoxOnZ2dgorCQkJZWNobyAke0hDfXY6MTp2dnYKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1tYXgtZGVwdGggMCAtbiAtZSB2dnYgJEggLS0gIioiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJCWdpdCBncmVwIC0tbm8tcmVjdXJzaXZlIC1uIC1lIHZ2diAkSCAtLSAiKiIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tbWF4LWRlcHRoIDEgJEwiICcKKwkJeworCQkJZWNobyAke0hDfXQvdjoxOnZ2dgorCQkJZWNobyAke0hDfXY6MTp2dnYKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1tYXgtZGVwdGggMSAtbiAtZSB2dnYgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tbWF4LWRlcHRoIDAgLS0gdCAkTCIgJworCQl7CisJCQllY2hvICR7SEN9dC92OjE6dnZ2CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tbWF4LWRlcHRoIDAgLW4gLWUgdnZ2ICRIIC0tIHQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkJZ2l0IGdyZXAgLS1uby1yZWN1cnNpdmUgLW4gLWUgdnZ2ICRIIC0tIHQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tbWF4LWRlcHRoIDAgLS0gLiB0ICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ310L3Y6MTp2dnYKKwkJCWVjaG8gJHtIQ312OjE6dnZ2CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tbWF4LWRlcHRoIDAgLW4gLWUgdnZ2ICRIIC0tIC4gdCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCQlnaXQgZ3JlcCAtLW5vLXJlY3Vyc2l2ZSAtbiAtZSB2dnYgJEggLS0gLiB0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtLW1heC1kZXB0aCAwIC0tIHQgLiAkTCIgJworCQl7CisJCQllY2hvICR7SEN9dC92OjE6dnZ2CisJCQllY2hvICR7SEN9djoxOnZ2dgorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLW1heC1kZXB0aCAwIC1uIC1lIHZ2diAkSCAtLSB0IC4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkJZ2l0IGdyZXAgLS1uby1yZWN1cnNpdmUgLW4gLWUgdnZ2ICRIIC0tIHQgLiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5leHRlbmRlZFJlZ2V4cD1mYWxzZSIgJworCQllY2hvICIke0hDfWFiOmErYmMiID5leHBlY3RlZCAmJgorCQlnaXQgLWMgZ3JlcC5leHRlbmRlZFJlZ2V4cD1mYWxzZSBncmVwICJhK2IqYyIgJEggYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIiAnCisJCWVjaG8gIiR7SEN9YWI6YWJjIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IC1jIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSBncmVwICJhK2IqYyIgJEggYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5wYXR0ZXJudHlwZT1iYXNpYyIgJworCQllY2hvICIke0hDfWFiOmErYmMiID5leHBlY3RlZCAmJgorCQlnaXQgLWMgZ3JlcC5wYXR0ZXJudHlwZT1iYXNpYyBncmVwICJhK2IqYyIgJEggYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5wYXR0ZXJudHlwZT1leHRlbmRlZCIgJworCQllY2hvICIke0hDfWFiOmFiYyIgPmV4cGVjdGVkICYmCisJCWdpdCAtYyBncmVwLnBhdHRlcm50eXBlPWV4dGVuZGVkIGdyZXAgImErYipjIiAkSCBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgd2l0aCBncmVwLnBhdHRlcm50eXBlPWZpeGVkIiAnCisJCWVjaG8gIiR7SEN9YWI6YStiKmMiID5leHBlY3RlZCAmJgorCQlnaXQgLWMgZ3JlcC5wYXR0ZXJudHlwZT1maXhlZCBncmVwICJhK2IqYyIgJEggYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFBDUkUgImdyZXAgJEwgd2l0aCBncmVwLnBhdHRlcm50eXBlPXBlcmwiICcKKwkJZWNobyAiJHtIQ31hYjphK2IqYyIgPmV4cGVjdGVkICYmCisJCWdpdCAtYyBncmVwLnBhdHRlcm50eXBlPXBlcmwgZ3JlcCAiYVx4ezJifWJceHsyYX1jIiAkSCBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIUZBSUxfUFJFUkVRUywhUENSRSAiZ3JlcCAkTCB3aXRoIGdyZXAucGF0dGVybnR5cGU9cGVybCBlcnJvcnMgd2l0aG91dCBQQ1JFIiAnCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBncmVwLnBhdHRlcm50eXBlPXBlcmwgZ3JlcCAiZm9vLipiYXIiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCB3aXRoIGdyZXAucGF0dGVyblR5cGU9ZGVmYXVsdCBhbmQgZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIiAnCisJCWVjaG8gIiR7SEN9YWI6YWJjIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IFwKKwkJCS1jIGdyZXAucGF0dGVyblR5cGU9ZGVmYXVsdCBcCisJCQktYyBncmVwLmV4dGVuZGVkUmVnZXhwPXRydWUgXAorCQkJZ3JlcCAiYStiKmMiICRIIGFiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCB3aXRoIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSBhbmQgZ3JlcC5wYXR0ZXJuVHlwZT1kZWZhdWx0IiAnCisJCWVjaG8gIiR7SEN9YWI6YWJjIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IFwKKwkJCS1jIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSBcCisJCQktYyBncmVwLnBhdHRlcm5UeXBlPWRlZmF1bHQgXAorCQkJZ3JlcCAiYStiKmMiICRIIGFiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCB3aXRoIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQgYW5kIGdyZXAuZXh0ZW5kZWRSZWdleHA9ZmFsc2UiICcKKwkJZWNobyAiJHtIQ31hYjphYmMiID5leHBlY3RlZCAmJgorCQlnaXQgXAorCQkJLWMgZ3JlcC5wYXR0ZXJuVHlwZT1leHRlbmRlZCBcCisJCQktYyBncmVwLmV4dGVuZGVkUmVnZXhwPWZhbHNlIFwKKwkJCWdyZXAgImErYipjIiAkSCBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgd2l0aCBncmVwLnBhdHRlcm5UeXBlPWJhc2ljIGFuZCBncmVwLmV4dGVuZGVkUmVnZXhwPXRydWUiICcKKwkJZWNobyAiJHtIQ31hYjphK2JjIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IFwKKwkJCS1jIGdyZXAucGF0dGVyblR5cGU9YmFzaWMgXAorCQkJLWMgZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIFwKKwkJCWdyZXAgImErYipjIiAkSCBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgd2l0aCBncmVwLmV4dGVuZGVkUmVnZXhwPWZhbHNlIGFuZCBncmVwLnBhdHRlcm5UeXBlPWV4dGVuZGVkIiAnCisJCWVjaG8gIiR7SEN9YWI6YWJjIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IFwKKwkJCS1jIGdyZXAuZXh0ZW5kZWRSZWdleHA9ZmFsc2UgXAorCQkJLWMgZ3JlcC5wYXR0ZXJuVHlwZT1leHRlbmRlZCBcCisJCQlncmVwICJhK2IqYyIgJEggYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIGFuZCBncmVwLnBhdHRlcm5UeXBlPWJhc2ljIiAnCisJCWVjaG8gIiR7SEN9YWI6YStiYyIgPmV4cGVjdGVkICYmCisJCWdpdCBcCisJCQktYyBncmVwLmV4dGVuZGVkUmVnZXhwPXRydWUgXAorCQkJLWMgZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYyBcCisJCQlncmVwICJhK2IqYyIgJEggYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tY291bnQgJEwiICcKKwkJZWNobyAke0hDfWFiOjMgPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tY291bnQgLWUgYiAkSCAtLSBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLS1jb3VudCAtaCAkTCIgJworCQllY2hvIDMgPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tY291bnQgLWggLWUgYiAkSCAtLSBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgRlVOTllOQU1FUyAiZ3JlcCAkTCBzaG91bGQgcXVvdGUgdW51c3VhbCBwYXRobmFtZXMiICcKKwkJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkJJHtIQ30iXCJ1bnVzdWFsXCIgcGF0aG5hbWUiOnVudXN1YWwKKwkJJHtIQ30idC9uZXN0ZWQgXCJ1bnVzdWFsXCIgcGF0aG5hbWUiOnVudXN1YWwKKwkJRU9GCisJCWdpdCBncmVwIHVudXN1YWwgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIEZVTk5ZTkFNRVMgImdyZXAgJEwgaW4gc3ViZGlyIHNob3VsZCBxdW90ZSB1bnVzdWFsIHJlbGF0aXZlIHBhdGhuYW1lcyIgJworCQljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCQkke0hDfSJuZXN0ZWQgXCJ1bnVzdWFsXCIgcGF0aG5hbWUiOnVudXN1YWwKKwkJRU9GCisJCSgKKwkJCWNkIHQgJiYKKwkJCWdpdCBncmVwIHVudXN1YWwgJEgKKwkJKSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgRlVOTllOQU1FUyAiZ3JlcCAteiAkTCB3aXRoIHVudXN1YWwgcGF0aG5hbWVzIiAnCisJCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJCSR7SEN9InVudXN1YWwiIHBhdGhuYW1lOnVudXN1YWwKKwkJJHtIQ310L25lc3RlZCAidW51c3VhbCIgcGF0aG5hbWU6dW51c3VhbAorCQlFT0YKKwkJZ2l0IGdyZXAgLXogdW51c3VhbCAkSCA+YWN0dWFsICYmCisJCXRyICJcMCIgIjoiIDxhY3R1YWwgPmFjdHVhbC1yZXBsYWNlLW51bGwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsLXJlcGxhY2UtbnVsbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgRlVOTllOQU1FUyAiZ3JlcCAteiAkTCBpbiBzdWJkaXIgd2l0aCB1bnVzdWFsIHJlbGF0aXZlIHBhdGhuYW1lcyIgJworCQljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCQkke0hDfW5lc3RlZCAidW51c3VhbCIgcGF0aG5hbWU6dW51c3VhbAorCQlFT0YKKwkJKAorCQkJY2QgdCAmJgorCQkJZ2l0IGdyZXAgLXogdW51c3VhbCAkSAorCQkpID5hY3R1YWwgJiYKKwkJdHIgIlwwIiAiOiIgPGFjdHVhbCA+YWN0dWFsLXJlcGxhY2UtbnVsbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwtcmVwbGFjZS1udWxsCisJJworZG9uZQorCitjYXQgPmV4cGVjdGVkIDw8RU9GCitmaWxlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWwgLUMnICcKKwlnaXQgZ3JlcCAtbCAtQzEgZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorZmlsZTo1CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWMgLUMnICcKKwlnaXQgZ3JlcCAtYyAtQzEgZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtTCAtQycgJworCWdpdCBscy1maWxlcyA+ZXhwZWN0ZWQgJiYKKwlnaXQgZ3JlcCAtTCAtQzEgbm9uZXhpc3RlbnRfc3RyaW5nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtLWZpbGVzLXdpdGhvdXQtbWF0Y2ggLS1xdWlldCcgJworCWdpdCBncmVwIC0tZmlsZXMtd2l0aG91dC1tYXRjaCAtLXF1aWV0IG5vbmV4aXN0ZW50X3N0cmluZyA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitmaWxlOmZvbyBtbWFwIGJhcl9tbWFwCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZSBBIC0tYW5kIC1lIEInICcKKwlnaXQgZ3JlcCAtZSAiZm9vIG1tYXAiIC0tYW5kIC1lIGJhcl9tbWFwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorZmlsZTpmb29fbW1hcCBiYXIgbW1hcAorZmlsZTpmb29fbW1hcCBiYXIgbW1hcCBiYXoKK0VPRgorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgKCAtZSBBIC0tb3IgLWUgQiApIC0tYW5kIC1lIEInICcKKwlnaXQgZ3JlcCBcKCAtZSBmb29fIC0tb3IgLWUgYmF6IFwpIFwKKwkJLS1hbmQgLWUgIiBtbWFwIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2ZpbGU6Zm9vIG1tYXAgYmFyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZSBBIC0tYW5kIC0tbm90IC1lIEInICcKKwlnaXQgZ3JlcCAtZSAiZm9vIG1tYXAiIC0tYW5kIC0tbm90IC1lIGJhcl9tbWFwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBzaG91bGQgaWdub3JlIEdSRVBfT1BUSU9OUycgJworCUdSRVBfT1BUSU9OUz0tdiBnaXQgZ3JlcCAiIG1tYXAgYmFyXCQiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZiwgbm9uLWV4aXN0ZW50IGZpbGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtZiBwYXR0ZXJucworJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitmaWxlOmZvbyBtbWFwIGJhcgorZmlsZTpmb29fbW1hcCBiYXIKK2ZpbGU6Zm9vX21tYXAgYmFyIG1tYXAKK2ZpbGU6Zm9vIG1tYXAgYmFyX21tYXAKK2ZpbGU6Zm9vX21tYXAgYmFyIG1tYXAgYmF6CitFT0YKKworY2F0ID5wYXR0ZXJuIDw8RU9GCittbWFwCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZiwgb25lIHBhdHRlcm4nICcKKwlnaXQgZ3JlcCAtZiBwYXR0ZXJuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorZmlsZTpmb28gbW1hcCBiYXIKK2ZpbGU6Zm9vX21tYXAgYmFyCitmaWxlOmZvb19tbWFwIGJhciBtbWFwCitmaWxlOmZvbyBtbWFwIGJhcl9tbWFwCitmaWxlOmZvb19tbWFwIGJhciBtbWFwIGJhegordC9hL3Y6dnZ2Cit0L3Y6dnZ2Cit2OnZ2dgorRU9GCisKK2NhdCA+cGF0dGVybnMgPDxFT0YKK21tYXAKK3Z2dgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWYsIG11bHRpcGxlIHBhdHRlcm5zJyAnCisJZ2l0IGdyZXAgLWYgcGF0dGVybnMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwLCBtdWx0aXBsZSBwYXR0ZXJucycgJworCWdpdCBncmVwICIkKGNhdCBwYXR0ZXJucykiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorZmlsZTpmb28gbW1hcCBiYXIKK2ZpbGU6Zm9vX21tYXAgYmFyCitmaWxlOmZvb19tbWFwIGJhciBtbWFwCitmaWxlOmZvbyBtbWFwIGJhcl9tbWFwCitmaWxlOmZvb19tbWFwIGJhciBtbWFwIGJhegordC9hL3Y6dnZ2Cit0L3Y6dnZ2Cit2OnZ2dgorRU9GCisKK2NhdCA+cGF0dGVybnMgPDxFT0YKKworbW1hcAorCit2dnYKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWYsIGlnbm9yZSBlbXB0eSBsaW5lcycgJworCWdpdCBncmVwIC1mIHBhdHRlcm5zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZiwgaWdub3JlIGVtcHR5IGxpbmVzLCByZWFkIHBhdHRlcm5zIGZyb20gc3RkaW4nICcKKwlnaXQgZ3JlcCAtZiAtIDxwYXR0ZXJucyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK3k6eSB5eQorLS0KK3o6enp6CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtcSwgc2lsZW50bHkgcmVwb3J0IG1hdGNoZXMnICcKKwlnaXQgZ3JlcCAtcSBtbWFwID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLXEgcWZ3ZnEgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtQzEgaHVuayBtYXJrIGJldHdlZW4gZmlsZXMnICcKKwlnaXQgZ3JlcCAtQzEgIl5beXpdIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBncmVwIHNldHVwJyAnCisJZWNobyBhID4+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0iV2l0aCAqIEFzdGVyaXNrIiBcCisJR0lUX0FVVEhPUl9FTUFJTD0ieHl6enlAZnJvdHouY29tIiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAic2Vjb25kIiAmJgorCisJZWNobyBhID4+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gInRoaXJkIiAmJgorCisJZWNobyBhID4+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0iTmlnaHQgRmFsbCIgXAorCUdJVF9BVVRIT1JfRU1BSUw9Im5pdGZvbEBmcm9ib3p6LmNvbSIgXAorCWdpdCBjb21taXQgLWEgLW0gImZvdXJ0aCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGdyZXAgKDEpJyAnCisJZ2l0IGxvZyAtLWF1dGhvcj1hdXRob3IgLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCisJeworCQllY2hvIHRoaXJkICYmIGVjaG8gaW5pdGlhbAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGdyZXAgKDIpJyAnCisJZ2l0IGxvZyAtLWF1dGhvcj0iICogIiAtRiAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gc2Vjb25kCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZ3JlcCAoMyknICcKKwlnaXQgbG9nIC0tYXV0aG9yPSJeQSBVIiAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gdGhpcmQgJiYgZWNobyBpbml0aWFsCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZ3JlcCAoNCknICcKKwlnaXQgbG9nIC0tYXV0aG9yPSJmcm90elwuY29tPiQiIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCXsKKwkJZWNobyBzZWNvbmQKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBncmVwICg1KScgJworCWdpdCBsb2cgLS1hdXRob3I9VGhvciAtRiAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gdGhpcmQgJiYgZWNobyBpbml0aWFsCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZ3JlcCAoNiknICcKKwlnaXQgbG9nIC0tYXV0aG9yPS0wNzAwICAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBncmVwICg3KScgJworCWdpdCBsb2cgLWcgLS1ncmVwLXJlZmxvZz0iY29tbWl0OiB0aGlyZCIgLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCisJZWNobyB0aGlyZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZ3JlcCAoOCknICcKKwlnaXQgbG9nIC1nIC0tZ3JlcC1yZWZsb2c9ImNvbW1pdDogdGhpcmQiIC0tZ3JlcC1yZWZsb2c9ImNvbW1pdDogc2Vjb25kIiAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gdGhpcmQgJiYgZWNobyBzZWNvbmQKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBncmVwICg5KScgJworCWdpdCBsb2cgLWcgLS1ncmVwLXJlZmxvZz0iY29tbWl0OiB0aGlyZCIgLS1hdXRob3I9IlRob3IiIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCWVjaG8gdGhpcmQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGdyZXAgKDkpJyAnCisJZ2l0IGxvZyAtZyAtLWdyZXAtcmVmbG9nPSJjb21taXQ6IHRoaXJkIiAtLWF1dGhvcj0ibm9uLWV4aXN0ZW50IiAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyZXAtcmVmbG9nIGNhbiBvbmx5IGJlIHVzZWQgdW5kZXIgLWcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC0tZ3JlcC1yZWZsb2c9ImNvbW1pdDogdGhpcmQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyB3aXRoIG11bHRpcGxlIC0tZ3JlcCB1c2VzIHVuaW9uJyAnCisJZ2l0IGxvZyAtLWdyZXA9aSAtLWdyZXA9ciAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJeworCQllY2hvIGZvdXJ0aCAmJiBlY2hvIHRoaXJkICYmIGVjaG8gaW5pdGlhbAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tYWxsLW1hdGNoIHdpdGggbXVsdGlwbGUgLS1ncmVwIHVzZXMgaW50ZXJzZWN0aW9uJyAnCisJZ2l0IGxvZyAtLWFsbC1tYXRjaCAtLWdyZXA9aSAtLWdyZXA9ciAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJeworCQllY2hvIHRoaXJkCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgd2l0aCBtdWx0aXBsZSAtLWF1dGhvciB1c2VzIHVuaW9uJyAnCisJZ2l0IGxvZyAtLWF1dGhvcj0iVGhvciIgLS1hdXRob3I9IkFzdGVyIiAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJeworCSAgICBlY2hvIHRoaXJkICYmIGVjaG8gc2Vjb25kICYmIGVjaG8gaW5pdGlhbAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tYWxsLW1hdGNoIHdpdGggbXVsdGlwbGUgLS1hdXRob3Igc3RpbGwgdXNlcyB1bmlvbicgJworCWdpdCBsb2cgLS1hbGwtbWF0Y2ggLS1hdXRob3I9IlRob3IiIC0tYXV0aG9yPSJBc3RlciIgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXsKKwkgICAgZWNobyB0aGlyZCAmJiBlY2hvIHNlY29uZCAmJiBlY2hvIGluaXRpYWwKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyZXAgLS1hdXRob3IgdXNlcyBpbnRlcnNlY3Rpb24nICcKKwkjIGdyZXAgbWF0Y2hlcyBvbmx5IHRoaXJkIGFuZCBmb3VydGgKKwkjIGF1dGhvciBtYXRjaGVzIG9ubHkgaW5pdGlhbCBhbmQgdGhpcmQKKwlnaXQgbG9nIC0tYXV0aG9yPSJBIFUgVGhvciIgLS1ncmVwPXIgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXsKKwkJZWNobyB0aGlyZAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JlcCAtLWdyZXAgLS1hdXRob3IgdGFrZXMgdW5pb24gb2YgZ3JlcHMgYW5kIGludGVyc2VjdHMgd2l0aCBhdXRob3InICcKKwkjIGdyZXAgbWF0Y2hlcyBpbml0aWFsIGFuZCBzZWNvbmQgYnV0IG5vdCB0aGlyZAorCSMgYXV0aG9yIG1hdGNoZXMgb25seSBpbml0aWFsIGFuZCB0aGlyZAorCWdpdCBsb2cgLS1hdXRob3I9IkEgVSBUaG9yIiAtLWdyZXA9cyAtLWdyZXA9bCAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJeworCQllY2hvIGluaXRpYWwKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLS1hbGwtbWF0Y2ggLWdyZXAgLS1hdXRob3IgLS1hdXRob3Igc3RpbGwgdGFrZXMgdW5pb24gb2YgYXV0aG9ycyBhbmQgaW50ZXJzZWN0cyB3aXRoIGdyZXAnICcKKwkjIGdyZXAgbWF0Y2hlcyBvbmx5IGluaXRpYWwgYW5kIHRoaXJkCisJIyBhdXRob3IgbWF0Y2hlcyBhbGwgYnV0IHNlY29uZAorCWdpdCBsb2cgLS1hbGwtbWF0Y2ggLS1hdXRob3I9IlRob3IiIC0tYXV0aG9yPSJOaWdodCIgLS1ncmVwPWkgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXsKKwkgICAgZWNobyB0aGlyZCAmJiBlY2hvIGluaXRpYWwKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyZXAgLS1hdXRob3IgLS1hdXRob3IgdGFrZXMgdW5pb24gb2YgYXV0aG9ycyBhbmQgaW50ZXJzZWN0cyB3aXRoIGdyZXAnICcKKwkjIGdyZXAgbWF0Y2hlcyBvbmx5IGluaXRpYWwgYW5kIHRoaXJkCisJIyBhdXRob3IgbWF0Y2hlcyBhbGwgYnV0IHNlY29uZAorCWdpdCBsb2cgLS1hdXRob3I9IlRob3IiIC0tYXV0aG9yPSJOaWdodCIgLS1ncmVwPWkgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXsKKwkgICAgZWNobyB0aGlyZCAmJiBlY2hvIGluaXRpYWwKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWFsbC1tYXRjaCAtLWdyZXAgLS1ncmVwIC0tYXV0aG9yIHRha2VzIGludGVyc2VjdGlvbicgJworCSMgZ3JlcCBtYXRjaGVzIG9ubHkgdGhpcmQKKwkjIGF1dGhvciBtYXRjaGVzIG9ubHkgaW5pdGlhbCBhbmQgdGhpcmQKKwlnaXQgbG9nIC0tYWxsLW1hdGNoIC0tYXV0aG9yPSJBIFUgVGhvciIgLS1ncmVwPWkgLS1ncmVwPXIgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXsKKwkJZWNobyB0aGlyZAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tYXV0aG9yIGRvZXMgbm90IHNlYXJjaCBpbiB0aW1lc3RhbXAnICcKKwlnaXQgbG9nIC0tYXV0aG9yPSIkR0lUX0FVVEhPUl9EQVRFIiA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1jb21taXR0ZXIgZG9lcyBub3Qgc2VhcmNoIGluIHRpbWVzdGFtcCcgJworCWdpdCBsb2cgLS1jb21taXR0ZXI9IiRHSVRfQ09NTUlUVEVSX0RBVEUiID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgd2l0aCBDRV9WQUxJRCBmaWxlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFzc3VtZS11bmNoYW5nZWQgdC90ICYmCisJcm0gdC90ICYmCisJdGVzdCAiJChnaXQgZ3JlcCB0ZXN0KSIgPSAidC90OnRlc3QiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLWFzc3VtZS11bmNoYW5nZWQgdC90ICYmCisJZ2l0IGNoZWNrb3V0IHQvdAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jPSNpbmNsdWRlIDxzdGRpby5oPgoraGVsbG8uYzoJcmV0dXJuIDA7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtcCB3aXRoIHVzZXJkaWZmJyAnCisJZ2l0IGNvbmZpZyBkaWZmLmN1c3RvbS5mdW5jbmFtZSAiXiMiICYmCisJZWNobyAiaGVsbG8uYyBkaWZmPWN1c3RvbSIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGdyZXAgLXAgcmV0dXJuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgoraGVsbG8uYz1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitoZWxsby5jOglyZXR1cm4gMDsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1wJyAnCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgZ3JlcCAtcCByZXR1cm4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jLSNpbmNsdWRlIDxzdGRpby5oPgoraGVsbG8uYy0KK2hlbGxvLmM9aW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoraGVsbG8uYy17CitoZWxsby5jLQlwcmludGYoIkhlbGxvIHdvcmxkLlxuIik7CitoZWxsby5jOglyZXR1cm4gMDsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1wIC1CNScgJworCWdpdCBncmVwIC1wIC1CNSByZXR1cm4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jPWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK2hlbGxvLmMteworaGVsbG8uYy0JcHJpbnRmKCJIZWxsbyB3b3JsZC5cbiIpOworaGVsbG8uYzoJcmV0dXJuIDA7CitoZWxsby5jLQkvKiBjaGFyID8/ICovCitoZWxsby5jLX0KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1XJyAnCisJZ2l0IGdyZXAgLVcgcmV0dXJuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgoraGVsbG8uYy0jaW5jbHVkZSA8YXNzZXJ0Lmg+CitoZWxsby5jOiNpbmNsdWRlIDxzdGRpby5oPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLVcgc2hvd3Mgbm8gdHJhaWxpbmcgZW1wdHkgbGluZXMnICcKKwlnaXQgZ3JlcCAtVyBzdGRpbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLVcgd2l0aCB1c2VyZGlmZicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdGF0dHJpYnV0ZXMiICYmCisJZ2l0IGNvbmZpZyBkaWZmLmN1c3RvbS54ZnVuY25hbWUgIl5mdW5jdGlvbiAuKiQiICYmCisJZWNobyAiaGVsbG8ucHMxIGRpZmY9Y3VzdG9tIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgZ3JlcCAtVyBlY2hvID5mdW5jdGlvbi1jb250ZXh0LXVzZXJkaWZmLWFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcgaW5jbHVkZXMgcHJlY2VkaW5nIGNvbW1lbnQnICcKKwlncmVwICIjIFNheSBoZWxsbyIgZnVuY3Rpb24tY29udGV4dC11c2VyZGlmZi1hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGluY2x1ZGVzIGZ1bmN0aW9uIGxpbmUnICcKKwlncmVwICI9ZnVuY3Rpb24gaGVsbG8iIGZ1bmN0aW9uLWNvbnRleHQtdXNlcmRpZmYtYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyBpbmNsdWRlcyBtYXRjaGluZyBsaW5lJyAnCisJZ3JlcCAiOiAgZWNobyIgZnVuY3Rpb24tY29udGV4dC11c2VyZGlmZi1hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIGluY2x1ZGVzIGxhc3QgbGluZSBvZiB0aGUgZnVuY3Rpb24nICcKKwlncmVwICJ9ICMgaGVsbG8iIGZ1bmN0aW9uLWNvbnRleHQtdXNlcmRpZmYtYWN0dWFsCisnCisKK2ZvciB0aHJlYWRzIGluICQodGVzdF9zZXEgMCAxMCkKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtLXRocmVhZHM9JHRocmVhZHMgJiAtYyBncmVwLnRocmVhZHM9JHRocmVhZHMiICIKKwkJZ2l0IGdyZXAgLS10aHJlYWRzPSR0aHJlYWRzIC4gPmFjdHVhbC4kdGhyZWFkcyAmJgorCQlpZiB0ZXN0ICR0aHJlYWRzIC1nZSAxCisJCXRoZW4KKwkJCXRlc3RfY21wIGFjdHVhbC5cJCgoJHRocmVhZHMgLSAxKSkgYWN0dWFsLiR0aHJlYWRzCisJCWZpICYmCisJCWdpdCAtYyBncmVwLnRocmVhZHM9JHRocmVhZHMgZ3JlcCAuID5hY3R1YWwuJHRocmVhZHMgJiYKKwkJaWYgdGVzdCAkdGhyZWFkcyAtZ2UgMQorCQl0aGVuCisJCQl0ZXN0X2NtcCBhY3R1YWwuXCQoKCR0aHJlYWRzIC0gMSkpIGFjdHVhbC4kdGhyZWFkcworCQlmaQorCSIKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhUFRIUkVBRFMsQ19MT0NBTEVfT1VUUFVUICdncmVwIC0tdGhyZWFkcz1OIG9yIHBhY2sudGhyZWFkcz1OIHdhcm5zIHdoZW4gbm8gcHRocmVhZHMnICcKKwlnaXQgZ3JlcCAtLXRocmVhZHM9MiBIZWxsbyBoZWxsb193b3JsZCAyPmVyciAmJgorCWdyZXAgXndhcm5pbmc6IGVyciA+d2FybmluZ3MgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHdhcm5pbmdzICYmCisJZ3JlcCAtRiAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHMiIGVyciAmJgorCWdpdCAtYyBncmVwLnRocmVhZHM9MiBncmVwIEhlbGxvIGhlbGxvX3dvcmxkIDI+ZXJyICYmCisJZ3JlcCBed2FybmluZzogZXJyID53YXJuaW5ncyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgd2FybmluZ3MgJiYKKwlncmVwIC1GICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIGdyZXAudGhyZWFkcyIgZXJyICYmCisJZ2l0IC1jIGdyZXAudGhyZWFkcz0yIGdyZXAgLS10aHJlYWRzPTQgSGVsbG8gaGVsbG9fd29ybGQgMj5lcnIgJiYKKwlncmVwIF53YXJuaW5nOiBlcnIgPndhcm5pbmdzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiB3YXJuaW5ncyAmJgorCWdyZXAgLUYgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIiBlcnIgJiYKKwlncmVwIC1GICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIGdyZXAudGhyZWFkcyIgZXJyICYmCisJZ2l0IC1jIGdyZXAudGhyZWFkcz0wIGdyZXAgLS10aHJlYWRzPTAgSGVsbG8gaGVsbG9fd29ybGQgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGZyb20gYSBzdWJkaXJlY3RvcnkgdG8gc2VhcmNoIHdpZGVyIGFyZWEgKDEpJyAnCisJbWtkaXIgLXAgcyAmJgorCSgKKwkJY2QgcyAmJiBnaXQgZ3JlcCAieCB4IHgiIC4uCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGZyb20gYSBzdWJkaXJlY3RvcnkgdG8gc2VhcmNoIHdpZGVyIGFyZWEgKDIpJyAnCisJbWtkaXIgLXAgcyAmJgorCSgKKwkJY2QgcyAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGdyZXAgeHh5eXp6IC4uID5vdXQgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IG91dAorCSkKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgoraGVsbG8uYzppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtRmknICcKKwlnaXQgZ3JlcCAtRmkgIkNIQVIgKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRzaWRlIG9mIGdpdCByZXBvc2l0b3J5JyAnCisJcm0gLWZyIG5vbiAmJgorCW1rZGlyIC1wIG5vbi9naXQvc3ViICYmCisJZWNobyBoZWxsbyA+bm9uL2dpdC9maWxlMSAmJgorCWVjaG8gd29ybGQgPm5vbi9naXQvc3ViL2ZpbGUyICYmCisJeworCQllY2hvIGZpbGUxOmhlbGxvICYmCisJCWVjaG8gc3ViL2ZpbGUyOndvcmxkCisJfSA+bm9uL2V4cGVjdC5mdWxsICYmCisJZWNobyBmaWxlMjp3b3JsZCA+bm9uL2V4cGVjdC5zdWIgJiYKKwkoCisJCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkKHB3ZCkvbm9uIiAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJY2Qgbm9uL2dpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCBvICYmCisJCWdpdCBncmVwIC0tbm8taW5kZXggbyA+Li4vYWN0dWFsLmZ1bGwgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0LmZ1bGwgLi4vYWN0dWFsLmZ1bGwgJiYKKwkJY2Qgc3ViICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIG8gJiYKKwkJZ2l0IGdyZXAgLS1uby1pbmRleCBvID4uLi8uLi9hY3R1YWwuc3ViICYmCisJCXRlc3RfY21wIC4uLy4uL2V4cGVjdC5zdWIgLi4vLi4vYWN0dWFsLnN1YgorCSkgJiYKKworCWVjaG8gIi4qbyoiID5ub24vZ2l0Ly5naXRpZ25vcmUgJiYKKwkoCisJCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkKHB3ZCkvbm9uIiAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJY2Qgbm9uL2dpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCBvICYmCisJCWdpdCBncmVwIC0tbm8taW5kZXggLS1leGNsdWRlLXN0YW5kYXJkIG8gPi4uL2FjdHVhbC5mdWxsICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdC5mdWxsIC4uL2FjdHVhbC5mdWxsICYmCisKKwkJeworCQkJZWNobyAiLmdpdGlnbm9yZTouKm8qIiAmJgorCQkJY2F0IC4uL2V4cGVjdC5mdWxsCisJCX0gPi4uL2V4cGVjdC53aXRoLmlnbm9yZWQgJiYKKwkJZ2l0IGdyZXAgLS1uby1pbmRleCAtLW5vLWV4Y2x1ZGUtc3RhbmRhcmQgbyA+Li4vYWN0dWFsLmZ1bGwgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0LndpdGguaWdub3JlZCAuLi9hY3R1YWwuZnVsbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0c2lkZSBvZiBnaXQgcmVwb3NpdG9yeSB3aXRoIGZhbGxiYWNrVG9Ob0luZGV4JyAnCisJcm0gLWZyIG5vbiAmJgorCW1rZGlyIC1wIG5vbi9naXQvc3ViICYmCisJZWNobyBoZWxsbyA+bm9uL2dpdC9maWxlMSAmJgorCWVjaG8gd29ybGQgPm5vbi9naXQvc3ViL2ZpbGUyICYmCisJY2F0IDw8LVxFT0YgPm5vbi9leHBlY3QuZnVsbCAmJgorCWZpbGUxOmhlbGxvCisJc3ViL2ZpbGUyOndvcmxkCisJRU9GCisJZWNobyBmaWxlMjp3b3JsZCA+bm9uL2V4cGVjdC5zdWIgJiYKKwkoCisJCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkKHB3ZCkvbm9uIiAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJY2Qgbm9uL2dpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZ3JlcC5mYWxsYmFja1RvTm9JbmRleD1mYWxzZSBncmVwIG8gJiYKKwkJZ2l0IC1jIGdyZXAuZmFsbGJhY2tUb05vSW5kZXg9dHJ1ZSBncmVwIG8gPi4uL2FjdHVhbC5mdWxsICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdC5mdWxsIC4uL2FjdHVhbC5mdWxsICYmCisJCWNkIHN1YiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZ3JlcC5mYWxsYmFja1RvTm9JbmRleD1mYWxzZSBncmVwIG8gJiYKKwkJZ2l0IC1jIGdyZXAuZmFsbGJhY2tUb05vSW5kZXg9dHJ1ZSBncmVwIG8gPi4uLy4uL2FjdHVhbC5zdWIgJiYKKwkJdGVzdF9jbXAgLi4vLi4vZXhwZWN0LnN1YiAuLi8uLi9hY3R1YWwuc3ViCisJKSAmJgorCisJZWNobyAiLipvKiIgPm5vbi9naXQvLmdpdGlnbm9yZSAmJgorCSgKKwkJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiQocHdkKS9ub24iICYmCisJCWV4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyAmJgorCQljZCBub24vZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBncmVwLmZhbGxiYWNrVG9Ob0luZGV4PWZhbHNlIGdyZXAgbyAmJgorCQlnaXQgLWMgZ3JlcC5mYWxsYmFja1RvTm9JbmRleD10cnVlIGdyZXAgLS1leGNsdWRlLXN0YW5kYXJkIG8gPi4uL2FjdHVhbC5mdWxsICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdC5mdWxsIC4uL2FjdHVhbC5mdWxsICYmCisKKwkJeworCQkJZWNobyAiLmdpdGlnbm9yZTouKm8qIiAmJgorCQkJY2F0IC4uL2V4cGVjdC5mdWxsCisJCX0gPi4uL2V4cGVjdC53aXRoLmlnbm9yZWQgJiYKKwkJZ2l0IC1jIGdyZXAuZmFsbGJhY2tUb05vSW5kZXggZ3JlcCAtLW5vLWV4Y2x1ZGUtc3RhbmRhcmQgbyA+Li4vYWN0dWFsLmZ1bGwgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0LndpdGguaWdub3JlZCAuLi9hY3R1YWwuZnVsbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5zaWRlIGdpdCByZXBvc2l0b3J5IGJ1dCB3aXRoIC0tbm8taW5kZXgnICcKKwlybSAtZnIgaXMgJiYKKwlta2RpciAtcCBpcy9naXQvc3ViICYmCisJZWNobyBoZWxsbyA+aXMvZ2l0L2ZpbGUxICYmCisJZWNobyB3b3JsZCA+aXMvZ2l0L3N1Yi9maWxlMiAmJgorCWVjaG8gIi4qbyoiID5pcy9naXQvLmdpdGlnbm9yZSAmJgorCXsKKwkJZWNobyBmaWxlMTpoZWxsbyAmJgorCQllY2hvIHN1Yi9maWxlMjp3b3JsZAorCX0gPmlzL2V4cGVjdC51bmlnbm9yZWQgJiYKKwl7CisJCWVjaG8gIi5naXRpZ25vcmU6LipvKiIgJiYKKwkJY2F0IGlzL2V4cGVjdC51bmlnbm9yZWQKKwl9ID5pcy9leHBlY3QuZnVsbCAmJgorCWVjaG8gZmlsZTI6d29ybGQgPmlzL2V4cGVjdC5zdWIgJiYKKwkoCisJCWNkIGlzL2dpdCAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCBvID4uLi9hY3R1YWwuZnVsbCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgLi4vYWN0dWFsLmZ1bGwgJiYKKworCQlnaXQgZ3JlcCAtLXVudHJhY2tlZCBvID4uLi9hY3R1YWwudW5pZ25vcmVkICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdC51bmlnbm9yZWQgLi4vYWN0dWFsLnVuaWdub3JlZCAmJgorCisJCWdpdCBncmVwIC0tbm8taW5kZXggbyA+Li4vYWN0dWFsLmZ1bGwgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0LmZ1bGwgLi4vYWN0dWFsLmZ1bGwgJiYKKworCQlnaXQgZ3JlcCAtLW5vLWluZGV4IC0tZXhjbHVkZS1zdGFuZGFyZCBvID4uLi9hY3R1YWwudW5pZ25vcmVkICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdC51bmlnbm9yZWQgLi4vYWN0dWFsLnVuaWdub3JlZCAmJgorCisJCWNkIHN1YiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCBvID4uLi8uLi9hY3R1YWwuc3ViICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSAuLi8uLi9hY3R1YWwuc3ViICYmCisKKwkJZ2l0IGdyZXAgLS1uby1pbmRleCBvID4uLi8uLi9hY3R1YWwuc3ViICYmCisJCXRlc3RfY21wIC4uLy4uL2V4cGVjdC5zdWIgLi4vLi4vYWN0dWFsLnN1YiAmJgorCisJCWdpdCBncmVwIC0tdW50cmFja2VkIG8gPi4uLy4uL2FjdHVhbC5zdWIgJiYKKwkJdGVzdF9jbXAgLi4vLi4vZXhwZWN0LnN1YiAuLi8uLi9hY3R1YWwuc3ViCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tbm8taW5kZXggZGVzY2VuZHMgaW50byByZXBvcywgYnV0IG5vdCAuZ2l0JyAnCisJcm0gLWZyIG5vbiAmJgorCW1rZGlyIC1wIG5vbi9naXQgJiYKKwkoCisJCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkKHB3ZCkvbm9uIiAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJY2Qgbm9uL2dpdCAmJgorCisJCWVjaG8gbWFnaWMgPmZpbGUgJiYKKwkJZ2l0IGluaXQgcmVwbyAmJgorCQkoCisJCQljZCByZXBvICYmCisJCQllY2hvIG1hZ2ljID5maWxlICYmCisJCQlnaXQgYWRkIGZpbGUgJiYKKwkJCWdpdCBjb21taXQgLW0gZm9vICYmCisJCQllY2hvIG1hZ2ljID4uZ2l0L2ZpbGUKKwkJKSAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJZmlsZQorCQlyZXBvL2ZpbGUKKwkJRU9GCisJCWdpdCBncmVwIC1sIC0tbm8taW5kZXggbWFnaWMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkb3VibGUtZGFzaCB0ZXN0cycgJworY2F0ID5kb3VibGUtZGFzaCA8PEVPRiAmJgorLS0KKy0+CitvdGhlcgorRU9GCitnaXQgYWRkIGRvdWJsZS1kYXNoCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2RvdWJsZS1kYXNoOi0+CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS0gcGF0dGVybicgJworCWdpdCBncmVwIC0tICItPiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtLSBwYXR0ZXJuIC0tIHBhdGhzcGVjJyAnCisJZ2l0IGdyZXAgLS0gIi0+IiAtLSBkb3VibGUtZGFzaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1lIHBhdHRlcm4gLS0gcGF0aCcgJworCWdpdCBncmVwIC1lICItPiIgLS0gZG91YmxlLWRhc2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitkb3VibGUtZGFzaDotLQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1lIC0tIC0tIHBhdGgnICcKKwlnaXQgZ3JlcCAtZSAtLSAtLSBkb3VibGUtZGFzaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rhc2hkYXNoIGRpc2FtYmlndWF0ZXMgcmV2IGFzIHJldicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbWFzdGVyIiAmJgorCWVjaG8gY29udGVudCA+bWFzdGVyICYmCisJZWNobyBtYXN0ZXI6aGVsbG8uYyA+ZXhwZWN0ICYmCisJZ2l0IGdyZXAgLWwgbyBtYXN0ZXIgLS0gaGVsbG8uYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkYXNoZGFzaCBkaXNhbWJpZ3VhdGVzIHBhdGhzcGVjIGFzIHBhdGhzcGVjJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcm0gLWYgbWFzdGVyIiAmJgorCWVjaG8gY29udGVudCA+bWFzdGVyICYmCisJZ2l0IGFkZCBtYXN0ZXIgJiYKKwllY2hvIG1hc3Rlcjpjb250ZW50ID5leHBlY3QgJiYKKwlnaXQgZ3JlcCBvIC0tIG1hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBvcnQgYm9ndXMgYXJnIHdpdGhvdXQgZGFzaGRhc2gnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCBvIGRvZXMtbm90LWV4aXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcG9ydCBib2d1cyByZXYgd2l0aCBkYXNoZGFzaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIG8gaGVsbG8uYyAtLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBub24tZXhpc3RlbnQgcGF0aCB3aXRoIGRhc2hkYXNoJyAnCisJIyBXZSBuZWVkIGEgcmVhbCBtYXRjaCBzbyBncmVwIGV4aXRzIHdpdGggc3VjY2Vzcy4KKwl0cmVlPSQoZ2l0IGxzLXRyZWUgSEVBRCB8CisJICAgICAgIHNlZCBzL2hlbGxvLmMvbm90LWluLXdvcmtpbmctdHJlZS8gfAorCSAgICAgICBnaXQgbWt0cmVlKSAmJgorCWdpdCBncmVwIG8gIiR0cmVlIiAtLSBub3QtaW4td29ya2luZy10cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1uby1pbmRleCBwYXR0ZXJuIC0tIHBhdGgnICcKKwlybSAtZnIgbm9uICYmCisJbWtkaXIgLXAgbm9uL2dpdCAmJgorCSgKKwkJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiQocHdkKS9ub24iICYmCisJCWV4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyAmJgorCQljZCBub24vZ2l0ICYmCisJCWVjaG8gaGVsbG8gPmhlbGxvICYmCisJCWVjaG8gZ29vZGJ5ZSA+Z29vZGJ5ZSAmJgorCQllY2hvIGhlbGxvOmhlbGxvID5leHBlY3QgJiYKKwkJZ2l0IGdyZXAgLS1uby1pbmRleCBvIC0tIGhlbGxvID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtLW5vLWluZGV4IGNvbXBsYWlucyBvZiByZXZzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1uby1pbmRleCBvIG1hc3RlciAtLSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1uby1pbmRleCBwcmVmZXJzIHBhdGhzIHRvIHJldnMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIG1hc3RlciIgJiYKKwllY2hvIGNvbnRlbnQgPm1hc3RlciAmJgorCWVjaG8gbWFzdGVyOmNvbnRlbnQgPmV4cGVjdCAmJgorCWdpdCBncmVwIC0tbm8taW5kZXggbyBtYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtLW5vLWluZGV4IGRvZXMgbm90ICJkaWFnbm9zZSIgcmV2cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC0tbm8taW5kZXggbyA6MTpoZWxsby5jIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhIC1pICJkaWQgeW91IG1lYW4iIGVycgorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jOmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK2hlbGxvLmM6CXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBDUkUgJ2dyZXAgLS1wZXJsLXJlZ2V4cCBwYXR0ZXJuJyAnCisJZ2l0IGdyZXAgLS1wZXJsLXJlZ2V4cCAiXHB7UHN9Lio/XHB7UGV9IiBoZWxsby5jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhRkFJTF9QUkVSRVFTLCFQQ1JFICdncmVwIC0tcGVybC1yZWdleHAgcGF0dGVybiBlcnJvcnMgd2l0aG91dCBQQ1JFJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1wZXJsLXJlZ2V4cCAiZm9vLipiYXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUENSRSAnZ3JlcCAtUCBwYXR0ZXJuJyAnCisJZ2l0IGdyZXAgLVAgIlxwe1BzfS4qP1xwe1BlfSIgaGVsbG8uYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTElCUENSRTIgImdyZXAgLVAgd2l0aCAoKk5PX0pJVCkgZG9lc24ndCBlcnJvciBvdXQiICcKKwlnaXQgZ3JlcCAtUCAiKCpOT19KSVQpXHB7UHN9Lio/XHB7UGV9IiBoZWxsby5jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFGQUlMX1BSRVJFUVMsIVBDUkUgJ2dyZXAgLVAgcGF0dGVybiBlcnJvcnMgd2l0aG91dCBQQ1JFJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLVAgImZvby4qYmFyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIHBhdHRlcm4gd2l0aCBncmVwLmV4dGVuZGVkUmVnZXhwPXRydWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZ3JlcC5leHRlbmRlZHJlZ2V4cD10cnVlIFwKKwkJZ3JlcCAiXHB7UHN9Lio/XHB7UGV9IiBoZWxsby5jID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUENSRSAnZ3JlcCAtUCBwYXR0ZXJuIHdpdGggZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlJyAnCisJZ2l0IC1jIGdyZXAuZXh0ZW5kZWRyZWdleHA9dHJ1ZSBcCisJCWdyZXAgLVAgIlxwe1BzfS4qP1xwe1BlfSIgaGVsbG8uYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUENSRSAnZ3JlcCAtUCAtdiBwYXR0ZXJuJyAnCisJeworCQllY2hvICJhYjphK2IqYyIKKwkJZWNobyAiYWI6YStiYyIKKwl9ID5leHBlY3RlZCAmJgorCWdpdCBncmVwIC1QIC12ICJhYmMiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQQ1JFICdncmVwIC1QIC1pIHBhdHRlcm4nICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWhlbGxvLmM6CXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKKwlFT0YKKwlnaXQgZ3JlcCAtUCAtaSAiUFJJTlRGXChbXlxkXStcKSIgaGVsbG8uYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUENSRSAnZ3JlcCAtUCAtdyBwYXR0ZXJuJyAnCisJeworCQllY2hvICJoZWxsb193b3JsZDpIZWxsbyB3b3JsZCIKKwkJZWNobyAiaGVsbG9fd29ybGQ6SGVMTG8gd29ybGQiCisJfSA+ZXhwZWN0ZWQgJiYKKwlnaXQgZ3JlcCAtUCAtdyAiSGUoKD9pKWxsKW8iIGhlbGxvX3dvcmxkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQQ1JFICdncmVwIC1QIGJhY2tyZWZlcmVuY2VzIHdvcmsgKHRoZSBQQ1JFIE5PX0FVVE9fQ0FQVFVSRSBmbGFnIGlzIG5vdCBzZXQpJyAnCisJZ2l0IGdyZXAgLVAgLWggIig/UDxvbmU+LikoP1A9b25lKSIgaGVsbG9fd29ybGQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGhlbGxvX3dvcmxkIGFjdHVhbCAmJgorCWdpdCBncmVwIC1QIC1oICIoLilcMSIgaGVsbG9fd29ybGQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGhlbGxvX3dvcmxkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1HIGludmFsaWRwYXR0ZXJuIHByb3Blcmx5IGRpZXMgJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLUcgImFbIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGludmFsaWRwYXR0ZXJuIHByb3Blcmx5IGRpZXMgd2l0aCBncmVwLnBhdHRlcm5UeXBlPWJhc2ljJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGdyZXAucGF0dGVybnR5cGU9YmFzaWMgZ3JlcCAiYVsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUUgaW52YWxpZHBhdHRlcm4gcHJvcGVybHkgZGllcyAnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtRSAiYVsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgaW52YWxpZHBhdHRlcm4gcHJvcGVybHkgZGllcyB3aXRoIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZ3JlcC5wYXR0ZXJudHlwZT1leHRlbmRlZCBncmVwICJhWyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQQ1JFICdncmVwIC1QIGludmFsaWRwYXR0ZXJuIHByb3Blcmx5IGRpZXMgJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLVAgImFbIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBDUkUgJ2dyZXAgaW52YWxpZHBhdHRlcm4gcHJvcGVybHkgZGllcyB3aXRoIGdyZXAucGF0dGVyblR5cGU9cGVybCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBncmVwLnBhdHRlcm50eXBlPXBlcmwgZ3JlcCAiYVsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUcgLUUgLUYgcGF0dGVybicgJworCWVjaG8gImFiOmErYipjIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZ3JlcCAtRyAtRSAtRiAiYStiKmMiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBwYXR0ZXJuIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYywgPWV4dGVuZGVkLCA9Zml4ZWQnICcKKwllY2hvICJhYjphK2IqYyIgPmV4cGVjdGVkICYmCisJZ2l0IFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1iYXNpYyBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9ZXh0ZW5kZWQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWZpeGVkIFwKKwkJZ3JlcCAiYStiKmMiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtRSAtRiAtRyBwYXR0ZXJuJyAnCisJZWNobyAiYWI6YStiYyIgPmV4cGVjdGVkICYmCisJZ2l0IGdyZXAgLUUgLUYgLUcgImErYipjIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgcGF0dGVybiB3aXRoIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQsID1maXhlZCwgPWJhc2ljJyAnCisJZWNobyAiYWI6YStiYyIgPmV4cGVjdGVkICYmCisJZ2l0IFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1leHRlbmRlZCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWJhc2ljIFwKKwkJZ3JlcCAiYStiKmMiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtRiAtRyAtRSBwYXR0ZXJuJyAnCisJZWNobyAiYWI6YWJjIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZ3JlcCAtRiAtRyAtRSAiYStiKmMiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBwYXR0ZXJuIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1maXhlZCwgPWJhc2ljLCA9ZXh0ZW5kZWQnICcKKwllY2hvICJhYjphYmMiID5leHBlY3RlZCAmJgorCWdpdCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWJhc2ljIFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1leHRlbmRlZCBcCisJCWdyZXAgImErYipjIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUcgLUYgLVAgLUUgcGF0dGVybicgJworCWVjaG8gImQwOmQiID5leHBlY3RlZCAmJgorCWdpdCBncmVwIC1HIC1GIC1QIC1FICJbXGRdIiBkMCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgcGF0dGVybiB3aXRoIGdyZXAucGF0dGVyblR5cGU9Zml4ZWQsID1iYXNpYywgPXBlcmwsID1leHRlbmRlZCcgJworCWVjaG8gImQwOmQiID5leHBlY3RlZCAmJgorCWdpdCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWJhc2ljIFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1wZXJsIFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1leHRlbmRlZCBcCisJCWdyZXAgIltcZF0iIGQwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQQ1JFICdncmVwIC1HIC1GIC1FIC1QIHBhdHRlcm4nICcKKwllY2hvICJkMDowIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZ3JlcCAtRyAtRiAtRSAtUCAiW1xkXSIgZDAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBDUkUgJ2dyZXAgcGF0dGVybiB3aXRoIGdyZXAucGF0dGVyblR5cGU9Zml4ZWQsID1iYXNpYywgPWV4dGVuZGVkLCA9cGVybCcgJworCWVjaG8gImQwOjAiID5leHBlY3RlZCAmJgorCWdpdCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWJhc2ljIFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1leHRlbmRlZCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9cGVybCBcCisJCWdyZXAgIltcZF0iIGQwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQQ1JFICdncmVwIC1QIHBhdHRlcm4gd2l0aCBncmVwLnBhdHRlcm5UeXBlPWZpeGVkJyAnCisJZWNobyAiYWI6YStiKmMiID5leHBlY3RlZCAmJgorCWdpdCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCQlncmVwIC1QICJhXHh7MmJ9Ylx4ezJhfWMiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtRiBwYXR0ZXJuIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYycgJworCWVjaG8gImFiOmErYipjIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWJhc2ljIFwKKwkJZ3JlcCAtRiAiKmMiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtRyBwYXR0ZXJuIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1maXhlZCcgJworCXsKKwkJZWNobyAiYWI6YStiKmMiCisJCWVjaG8gImFiOmErYmMiCisJfSA+ZXhwZWN0ZWQgJiYKKwlnaXQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWZpeGVkIFwKKwkJZ3JlcCAtRyAiYStiIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUUgcGF0dGVybiB3aXRoIGdyZXAucGF0dGVyblR5cGU9Zml4ZWQnICcKKwl7CisJCWVjaG8gImFiOmErYipjIgorCQllY2hvICJhYjphK2JjIgorCQllY2hvICJhYjphYmMiCisJfSA+ZXhwZWN0ZWQgJiYKKwlnaXQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWZpeGVkIFwKKwkJZ3JlcCAtRSAiYSsiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgoraGVsbG8uYzxSRUQ+OjxSRVNFVD5pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitoZWxsby5jPFJFRD4tPFJFU0VUPnsKKzxSRUQ+LS08UkVTRVQ+CitoZWxsby5jPFJFRD46PFJFU0VUPgkvKiBjaGFyID8/ICovCitoZWxsby5jPFJFRD4tPFJFU0VUPn0KKzxSRUQ+LS08UkVTRVQ+CitoZWxsb193b3JsZDxSRUQ+OjxSRVNFVD5IZWxsb193b3JsZAoraGVsbG9fd29ybGQ8UkVEPi08UkVTRVQ+SGVMTG9fd29ybGQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tY29sb3IsIHNlcGFyYXRvcicgJworCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuY29udGV4dAkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5maWxlbmFtZQkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5mdW5jdGlvbgkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5saW5lbnVtYmVyCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAubWF0Y2gJCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuc2VsZWN0ZWQJCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuc2VwYXJhdG9yCXJlZCAmJgorCisJZ2l0IGdyZXAgLS1jb2xvcj1hbHdheXMgLUExIC1lIGNoYXIgLWUgbG9fdyBoZWxsby5jIGhlbGxvX3dvcmxkIHwKKwl0ZXN0X2RlY29kZV9jb2xvciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2hlbGxvLmM6aW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoraGVsbG8uYzoJLyogY2hhciA/PyAqLworCitoZWxsb193b3JsZDpIZWxsb193b3JsZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1icmVhaycgJworCWdpdCBncmVwIC0tYnJlYWsgLWUgY2hhciAtZSBsb193IGhlbGxvLmMgaGVsbG9fd29ybGQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jOmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK2hlbGxvLmMteworLS0KK2hlbGxvLmM6CS8qIGNoYXIgPz8gKi8KK2hlbGxvLmMtfQorCitoZWxsb193b3JsZDpIZWxsb193b3JsZAoraGVsbG9fd29ybGQtSGVMTG9fd29ybGQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tYnJlYWsgd2l0aCBjb250ZXh0JyAnCisJZ2l0IGdyZXAgLS1icmVhayAtQTEgLWUgY2hhciAtZSBsb193IGhlbGxvLmMgaGVsbG9fd29ybGQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCisJLyogY2hhciA/PyAqLworaGVsbG9fd29ybGQKK0hlbGxvX3dvcmxkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtLWhlYWRpbmcnICcKKwlnaXQgZ3JlcCAtLWhlYWRpbmcgLWUgY2hhciAtZSBsb193IGhlbGxvLmMgaGVsbG9fd29ybGQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCis8Qk9MRDtHUkVFTj5oZWxsby5jPFJFU0VUPgorNDppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgPEJMQUNLO0JZRUxMT1c+Y2hhcjxSRVNFVD4gKiphcmd2KQorODoJLyogPEJMQUNLO0JZRUxMT1c+Y2hhcjxSRVNFVD4gPz8gKi8KKworPEJPTEQ7R1JFRU4+aGVsbG9fd29ybGQ8UkVTRVQ+CiszOkhlbDxCTEFDSztCWUVMTE9XPmxvX3c8UkVTRVQ+b3JsZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pbWljIGFjay1ncmVwIC0tZ3JvdXAnICcKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmNvbnRleHQJCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuZmlsZW5hbWUJCSJib2xkIGdyZWVuIiAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuZnVuY3Rpb24JCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAubGluZW51bWJlcglub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLm1hdGNoCQkiYmxhY2sgeWVsbG93IiAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuc2VsZWN0ZWQJCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuc2VwYXJhdG9yCW5vcm1hbCAmJgorCisJZ2l0IGdyZXAgLS1icmVhayAtLWhlYWRpbmcgLW4gLS1jb2xvciBcCisJCS1lIGNoYXIgLWUgbG9fdyBoZWxsby5jIGhlbGxvX3dvcmxkIHwKKwl0ZXN0X2RlY29kZV9jb2xvciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK3NwYWNlOiBsaW5lIHdpdGggbGVhZGluZyBzcGFjZTEKK3NwYWNlOiBsaW5lIHdpdGggbGVhZGluZyBzcGFjZTIKK3NwYWNlOiBsaW5lIHdpdGggbGVhZGluZyBzcGFjZTMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBDUkUgJ2dyZXAgLUUgIl4gIicgJworCWdpdCBncmVwIC1FICJeICIgc3BhY2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBDUkUgJ2dyZXAgLVAgIl4gIicgJworCWdpdCBncmVwIC1QICJeICIgc3BhY2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitzcGFjZS1saW5lIHdpdGhvdXQgbGVhZGluZyBzcGFjZTEKK3NwYWNlOiBsaW5lIDxSRUQ+d2l0aCA8UkVTRVQ+bGVhZGluZyBzcGFjZTEKK3NwYWNlOiBsaW5lIDxSRUQ+d2l0aCA8UkVTRVQ+bGVhZGluZyA8UkVEPnNwYWNlMjxSRVNFVD4KK3NwYWNlOiBsaW5lIDxSRUQ+d2l0aCA8UkVTRVQ+bGVhZGluZyBzcGFjZTMKK3NwYWNlOmxpbmUgd2l0aG91dCBsZWFkaW5nIDxSRUQ+c3BhY2UyPFJFU0VUPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1jb2xvciAtZSBBIC1lIEIgd2l0aCBjb250ZXh0JyAnCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5jb250ZXh0CQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmZpbGVuYW1lCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmZ1bmN0aW9uCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmxpbmVudW1iZXIJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5tYXRjaENvbnRleHQJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5tYXRjaFNlbGVjdGVkCXJlZCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuc2VsZWN0ZWQJCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuc2VwYXJhdG9yCW5vcm1hbCAmJgorCisJZ2l0IGdyZXAgLS1jb2xvcj1hbHdheXMgLUMyIC1lICJ3aXRoICIgLWUgc3BhY2UyICBzcGFjZSB8CisJdGVzdF9kZWNvZGVfY29sb3IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitzcGFjZS1saW5lIHdpdGhvdXQgbGVhZGluZyBzcGFjZTEKK3NwYWNlLSBsaW5lIHdpdGggbGVhZGluZyBzcGFjZTEKK3NwYWNlOiBsaW5lIDxSRUQ+d2l0aCA8UkVTRVQ+bGVhZGluZyA8UkVEPnNwYWNlMjxSRVNFVD4KK3NwYWNlLSBsaW5lIHdpdGggbGVhZGluZyBzcGFjZTMKK3NwYWNlLWxpbmUgd2l0aG91dCBsZWFkaW5nIHNwYWNlMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1jb2xvciAtZSBBIC0tYW5kIC1lIEIgd2l0aCBjb250ZXh0JyAnCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5jb250ZXh0CQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmZpbGVuYW1lCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmZ1bmN0aW9uCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmxpbmVudW1iZXIJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5tYXRjaENvbnRleHQJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5tYXRjaFNlbGVjdGVkCXJlZCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuc2VsZWN0ZWQJCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuc2VwYXJhdG9yCW5vcm1hbCAmJgorCisJZ2l0IGdyZXAgLS1jb2xvcj1hbHdheXMgLUMyIC1lICJ3aXRoICIgLS1hbmQgLWUgc3BhY2UyICBzcGFjZSB8CisJdGVzdF9kZWNvZGVfY29sb3IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitzcGFjZS1saW5lIHdpdGhvdXQgbGVhZGluZyBzcGFjZTEKK3NwYWNlOiBsaW5lIDxSRUQ+d2l0aCA8UkVTRVQ+bGVhZGluZyBzcGFjZTEKK3NwYWNlLSBsaW5lIHdpdGggbGVhZGluZyBzcGFjZTIKK3NwYWNlOiBsaW5lIDxSRUQ+d2l0aCA8UkVTRVQ+bGVhZGluZyBzcGFjZTMKK3NwYWNlLWxpbmUgd2l0aG91dCBsZWFkaW5nIHNwYWNlMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1jb2xvciAtZSBBIC0tYW5kIC0tbm90IC1lIEIgd2l0aCBjb250ZXh0JyAnCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5jb250ZXh0CQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmZpbGVuYW1lCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmZ1bmN0aW9uCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmxpbmVudW1iZXIJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5tYXRjaENvbnRleHQJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5tYXRjaFNlbGVjdGVkCXJlZCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuc2VsZWN0ZWQJCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuc2VwYXJhdG9yCW5vcm1hbCAmJgorCisJZ2l0IGdyZXAgLS1jb2xvcj1hbHdheXMgLUMyIC1lICJ3aXRoICIgLS1hbmQgLS1ub3QgLWUgc3BhY2UyICBzcGFjZSB8CisJdGVzdF9kZWNvZGVfY29sb3IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jLQoraGVsbG8uYz1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitoZWxsby5jLXsKK2hlbGxvLmM6CXByPFJFRD5pbnQ8UkVTRVQ+ZigiPFJFRD5IZWxsbzxSRVNFVD4gd29ybGQuXG4iKTsKK2hlbGxvLmMtCXJldHVybiAwOworaGVsbG8uYy0JLyogY2hhciA/PyAqLworaGVsbG8uYy19CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtLWNvbG9yIC1lIEEgLS1hbmQgLWUgQiAtcCB3aXRoIGNvbnRleHQnICcKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmNvbnRleHQJCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuZmlsZW5hbWUJCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuZnVuY3Rpb24JCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAubGluZW51bWJlcglub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLm1hdGNoQ29udGV4dAlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLm1hdGNoU2VsZWN0ZWQJcmVkICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5zZWxlY3RlZAkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5zZXBhcmF0b3IJbm9ybWFsICYmCisKKwlnaXQgZ3JlcCAtLWNvbG9yPWFsd2F5cyAtcCAtQzMgLWUgaW50IC0tYW5kIC1lIEhlbGxvIC0tbm8taW5kZXggaGVsbG8uYyB8CisJdGVzdF9kZWNvZGVfY29sb3IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGNhbiBmaW5kIHRoaW5ncyBvbmx5IGluIHRoZSB3b3JrIHRyZWUnICcKKwk6ID53b3JrLXRyZWUtb25seSAmJgorCWdpdCBhZGQgd29yay10cmVlLW9ubHkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBybSAtZiB3b3JrLXRyZWUtb25seSIgJiYKKwllY2hvICJmaW5kIGluIHdvcmsgdHJlZSIgPndvcmstdHJlZS1vbmx5ICYmCisJZ2l0IGdyZXAgLS1xdWlldCAiZmluZCBpbiB3b3JrIHRyZWUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1xdWlldCAtLWNhY2hlZCAiZmluZCBpbiB3b3JrIHRyZWUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1xdWlldCAiZmluZCBpbiB3b3JrIHRyZWUiIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBjYW4gZmluZCB0aGluZ3Mgb25seSBpbiB0aGUgd29yayB0cmVlIChpLXQtYSknICcKKwllY2hvICJpbnRlbmQgdG8gYWRkIHRoaXMiID5pbnRlbmQtdG8tYWRkICYmCisJZ2l0IGFkZCAtTiBpbnRlbmQtdG8tYWRkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcm0gLWYgaW50ZW5kLXRvLWFkZCIgJiYKKwlnaXQgZ3JlcCAtLXF1aWV0ICJpbnRlbmQgdG8gYWRkIHRoaXMiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1xdWlldCAtLWNhY2hlZCAiaW50ZW5kIHRvIGFkZCB0aGlzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC0tcXVpZXQgImludGVuZCB0byBhZGQgdGhpcyIgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGRvZXMgbm90IHNlYXJjaCB3b3JrIHRyZWUgd2l0aCBhc3N1bWUgdW5jaGFuZ2VkJyAnCisJZWNobyAiaW50ZW5kIHRvIGFkZCB0aGlzIiA+aW50ZW5kLXRvLWFkZCAmJgorCWdpdCBhZGQgLU4gaW50ZW5kLXRvLWFkZCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hc3N1bWUtdW5jaGFuZ2VkIGludGVuZC10by1hZGQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBybSAtZiBpbnRlbmQtdG8tYWRkIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC0tcXVpZXQgImludGVuZCB0byBhZGQgdGhpcyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtLXF1aWV0IC0tY2FjaGVkICJpbnRlbmQgdG8gYWRkIHRoaXMiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1xdWlldCAiaW50ZW5kIHRvIGFkZCB0aGlzIiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgY2FuIGZpbmQgdGhpbmdzIG9ubHkgaW4gdGhlIGluZGV4JyAnCisJZWNobyAib25seSBpbiB0aGUgaW5kZXgiID5jYWNoZS10aGlzICYmCisJZ2l0IGFkZCBjYWNoZS10aGlzICYmCisJcm0gY2FjaGUtdGhpcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJtIC0tY2FjaGVkIGNhY2hlLXRoaXMiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1xdWlldCAib25seSBpbiB0aGUgaW5kZXgiICYmCisJZ2l0IGdyZXAgLS1xdWlldCAtLWNhY2hlZCAib25seSBpbiB0aGUgaW5kZXgiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1xdWlldCAib25seSBpbiB0aGUgaW5kZXgiIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBkb2VzIG5vdCByZXBvcnQgaS10LWEgd2l0aCAtTCAtLWNhY2hlZCcgJworCWVjaG8gImludGVuZCB0byBhZGQgdGhpcyIgPmludGVuZC10by1hZGQgJiYKKwlnaXQgYWRkIC1OIGludGVuZC10by1hZGQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBybSAtZiBpbnRlbmQtdG8tYWRkIiAmJgorCWdpdCBscy1maWxlcyB8IGdyZXAgLXYgIl5pbnRlbmQtdG8tYWRkXCQiID5leHBlY3RlZCAmJgorCWdpdCBncmVwIC1MIC0tY2FjaGVkICJub25leGlzdGVudF9zdHJpbmciID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBkb2VzIG5vdCByZXBvcnQgaS10LWEgYW5kIGFzc3VtZSB1bmNoYW5nZWQgd2l0aCAtTCcgJworCWVjaG8gImludGVuZCB0byBhZGQgdGhpcyIgPmludGVuZC10by1hZGQtYXNzdW1lLXVuY2hhbmdlZCAmJgorCWdpdCBhZGQgLU4gaW50ZW5kLXRvLWFkZC1hc3N1bWUtdW5jaGFuZ2VkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcm0gLWYgaW50ZW5kLXRvLWFkZC1hc3N1bWUtdW5jaGFuZ2VkIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hc3N1bWUtdW5jaGFuZ2VkIGludGVuZC10by1hZGQtYXNzdW1lLXVuY2hhbmdlZCAmJgorCWdpdCBscy1maWxlcyB8IGdyZXAgLXYgIl5pbnRlbmQtdG8tYWRkLWFzc3VtZS11bmNoYW5nZWRcJCIgPmV4cGVjdGVkICYmCisJZ2l0IGdyZXAgLUwgIm5vbmV4aXN0ZW50X3N0cmluZyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc4MTEtZ3JlcC1vcGVuLnNoIGIvdC90NzgxMS1ncmVwLW9wZW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTk4Nzg1ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc4MTEtZ3JlcC1vcGVuLnNoCkBAIC0wLDAgKzEsMTU4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGdyZXAgLS1vcGVuLWZpbGVzLWluLXBhZ2VyCisnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcGFnZXIuc2gKK3Vuc2V0IFBBR0VSIEdJVF9QQUdFUgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXRpYWwgZ3JlcC5oICIKK2VudW0gZ3JlcF9wYXRfdG9rZW4geworCUdSRVBfUEFUVEVSTiwKKwlHUkVQX1BBVFRFUk5fSEVBRCwKKwlHUkVQX1BBVFRFUk5fQk9EWSwKKwlHUkVQX0FORCwKKwlHUkVQX09QRU5fUEFSRU4sCisJR1JFUF9DTE9TRV9QQVJFTiwKKwlHUkVQX05PVCwKKwlHUkVQX09SLAorfTsiICYmCisKKwl0ZXN0X2NvbW1pdCBhZGQtdXNlciByZXZpc2lvbi5jICIKKwl9CisJaWYgKHNlZW5fZGFzaGRhc2gpCisJCXJlYWRfcGF0aHNwZWNfZnJvbV9zdGRpbihyZXZzLCAmc2IsIHBydW5lKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgdm9pZCBhZGRfZ3JlcChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IGNoYXIgKnB0biwgZW51bSBncmVwX3BhdF90b2tlbiB3aGF0KQoreworCWFwcGVuZF9ncmVwX3BhdHRlcm4oJnJldnMtPmdyZXBfZmlsdGVyLCBwdG4sIFwiY29tbWFuZCBsaW5lXCIsIDAsIHdoYXQpOworIiAmJgorCisJbWtkaXIgc3ViZGlyICYmCisJdGVzdF9jb21taXQgc3ViZGlyIHN1YmRpci9ncmVwLmMgImVudW0gZ3JlcF9wYXRfdG9rZW4iICYmCisKKwl0ZXN0X2NvbW1pdCB1bmludGVyZXN0aW5nIHVucmVsYXRlZCAiaGVsbG8sIHdvcmxkIiAmJgorCisJZWNobyBHUkVQX1BBVFRFUk4gPnVudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNJTVBMRVBBR0VSICdnaXQgZ3JlcCAtTycgJworCWNhdCA+JGxlc3MgPDwtXEVPRiAmJgorCSMhL2Jpbi9zaAorCXByaW50ZiAiJXNcbiIgIiRAIiA+cGFnZXItYXJncworCUVPRgorCWNobW9kICt4ICRsZXNzICYmCisJY2F0ID5leHBlY3QubGVzcyA8PC1cRU9GICYmCisJKy8qR1JFUF9QQVRURVJOCisJZ3JlcC5oCisJRU9GCisJZWNobyBncmVwLmggPmV4cGVjdC5ub3RsZXNzICYmCisKKwlQQVRIPS46JFBBVEggZ2l0IGdyZXAgLU8gR1JFUF9QQVRURVJOID5vdXQgJiYKKwl7CisJCXRlc3RfY21wIGV4cGVjdC5sZXNzIHBhZ2VyLWFyZ3MgfHwKKwkJdGVzdF9jbXAgZXhwZWN0Lm5vdGxlc3MgcGFnZXItYXJncworCX0gJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1PIC0tY2FjaGVkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1jYWNoZWQgLU8gR1JFUF9QQVRURVJOID5vdXQgMj5tc2cgJiYKKwl0ZXN0X2kxOG5ncmVwIG9wZW4tZmlsZXMtaW4tcGFnZXIgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1PIC0tbm8taW5kZXgnICcKKwlybSAtZiBleHBlY3QubGVzcyBwYWdlci1hcmdzIG91dCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlncmVwLmgKKwl1bnRyYWNrZWQKKwlFT0YKKworCSgKKwkJR0lUX1BBR0VSPSdcJydwcmludGYgIiVzXG4iID5wYWdlci1hcmdzJ1wnJyAmJgorCQlleHBvcnQgR0lUX1BBR0VSICYmCisJCWdpdCBncmVwIC0tbm8taW5kZXggLU8gR1JFUF9QQVRURVJOID5vdXQKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IHBhZ2VyLWFyZ3MgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBmYWtlICJsZXNzIicgJworCWNhdCA+bGVzcyA8PC1cRU9GICYmCisJIyEvYmluL3NoCisJcHJpbnRmICIlc1xuIiAiJEAiID5hY3R1YWwKKwlFT0YKKwljaG1vZCAreCBsZXNzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1PIGp1bXBzIHRvIGxpbmUgaW4gbGVzcycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkrLypHUkVQX1BBVFRFUk4KKwlncmVwLmgKKwlFT0YKKworCUdJVF9QQUdFUj0uL2xlc3MgZ2l0IGdyZXAgLU8gR1JFUF9QQVRURVJOID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgorCisJZ2l0IGdyZXAgLU8uL2xlc3MgR1JFUF9QQVRURVJOID5vdXQyICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIGZpbGUnICcKKwlybSAtZiBhY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJKy8qZW51bSBncmVwX3BhdF90b2tlbgorCWdyZXAuaAorCXJldmlzaW9uLmMKKwlzdWJkaXIvZ3JlcC5jCisJdW5yZWxhdGVkCisJRU9GCisKKwllY2hvICJlbnVtIGdyZXBfcGF0X3Rva2VuIiA+dW5yZWxhdGVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgSEVBRCB1bnJlbGF0ZWQiICYmCisJR0lUX1BBR0VSPS4vbGVzcyBnaXQgZ3JlcCAtRiAtTyAiZW51bSBncmVwX3BhdF90b2tlbiIgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcGVzIHdpdGggY29sb3Igc2V0dGluZ3MnICcKKwlybSAtZiBhY3R1YWwgJiYKKwllY2hvIGdyZXAuaCA+ZXhwZWN0ICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcCBhbHdheXMgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmZpbGVuYW1lIHllbGxvdyAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuc2VwYXJhdG9yIGdyZWVuICYmCisJZ2l0IGdyZXAgLU8nXCcncHJpbnRmICIlc1xuIiA+YWN0dWFsJ1wnJyBHUkVQX0FORCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuIGZyb20gc3ViZGlyJyAnCisJcm0gLWYgYWN0dWFsICYmCisJZWNobyBncmVwLmMgPmV4cGVjdCAmJgorCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZXhwb3J0IEdJVF9QQUdFUiAmJgorCQlHSVRfUEFHRVI9J1wnJ3ByaW50ZiAiJXNcbiIgPi4uL2FyZ3MnXCcnICYmCisJCWdpdCBncmVwIC1PICJlbnVtIGdyZXBfcGF0X3Rva2VuIiA+Li4vb3V0ICYmCisJCWdpdCBncmVwIC1PInB3ZCA+Li4vZGlyOyA6IiAiZW51bSBncmVwX3BhdF90b2tlbiIgPi4uL291dDIKKwkpICYmCisJY2FzZSAkKGNhdCBkaXIpIGluCisJKnN1YmRpcikKKwkJOiBnb29kCisJCTs7CisJKikKKwkJZmFsc2UKKwkJOzsKKwllc2FjICYmCisJdGVzdF9jbXAgZXhwZWN0IGFyZ3MgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dDIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3ODEyLWdyZXAtaWNhc2Utbm9uLWFzY2lpLnNoIGIvdC90NzgxMi1ncmVwLWljYXNlLW5vbi1hc2NpaS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wM2RiYTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzgxMi1ncmVwLWljYXNlLW5vbi1hc2NpaS5zaApAQCAtMCwwICsxLDg3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ3JlcCBpY2FzZSBvbiBub24tRW5nbGlzaCBsb2NhbGVzJworCisuIC4vbGliLWdldHRleHQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAnc2V0dXAnICcKKwl0ZXN0X3dyaXRlX2xpbmVzICJUSUxSQVVOOiBIYWxsw7MgSGVpbXVyISIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlMQ19BTEw9IiRpc19JU19sb2NhbGUiICYmCisJZXhwb3J0IExDX0FMTAorJworCit0ZXN0X2hhdmVfcHJlcmVxIEdFVFRFWFRfTE9DQUxFICYmCit0ZXN0LXRvb2wgcmVnZXggIkhBTEzDkyIgIkhhbGzDsyIgSUNBU0UgJiYKK3Rlc3Rfc2V0X3ByZXJlcSBSRUdFWF9MT0NBTEUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRUdFWF9MT0NBTEUgJ2dyZXAgbGl0ZXJhbCBzdHJpbmcsIG5vIC1GJyAnCisJZ2l0IGdyZXAgLWkgIlRJTFJBVU46IEhhbGzDsyBIZWltdXIhIiAmJgorCWdpdCBncmVwIC1pICJUSUxSQVVOOiBIQUxMw5MgSEVJTVVSISIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSxQQ1JFICdncmVwIHBjcmUgdXRmLTggaWNhc2UnICcKKwlnaXQgZ3JlcCAtLXBlcmwtcmVnZXhwICAgICJUSUxSQVVOOiBILmxsw7MgSGVpbXVyISIgJiYKKwlnaXQgZ3JlcCAtLXBlcmwtcmVnZXhwIC1pICJUSUxSQVVOOiBILmxsw7MgSGVpbXVyISIgJiYKKwlnaXQgZ3JlcCAtLXBlcmwtcmVnZXhwIC1pICJUSUxSQVVOOiBILkxMw5MgSEVJTVVSISIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSxQQ1JFICdncmVwIHBjcmUgdXRmLTggc3RyaW5nIHdpdGggIisiJyAnCisJdGVzdF93cml0ZV9saW5lcyAiVElMUkFVTjogSGFsbMOzw7MgSGVpbXVyISIgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBncmVwIC1sIC0tcGVybC1yZWdleHAgIlRJTFJBVU46IEgubGzDsysgSGVpbXVyISIgPmFjdHVhbCAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ZWQgJiYKKwllY2hvIGZpbGUyID4+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRUdFWF9MT0NBTEUgJ2dyZXAgbGl0ZXJhbCBzdHJpbmcsIHdpdGggLUYnICcKKwlnaXQgZ3JlcCAtaSAtRiAiVElMUkFVTjogSGFsbMOzIEhlaW11ciEiICYmCisJZ2l0IGdyZXAgLWkgLUYgIlRJTFJBVU46IEhBTEzDkyBIRUlNVVIhIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFR0VYX0xPQ0FMRSAnZ3JlcCBzdHJpbmcgd2l0aCByZWdleCwgd2l0aCAtRicgJworCXRlc3Rfd3JpdGVfbGluZXMgIlRJTFJBVU46IEhhbGzDsyBIZWltdXIgW2FiY10hIiA+ZmlsZTMgJiYKKwlnaXQgYWRkIGZpbGUzICYmCisJZ2l0IGdyZXAgLWkgLUYgIlRJTFJBVU46IEhhbGzDsyBIZWltdXIgW2FiY10hIiBmaWxlMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFR0VYX0xPQ0FMRSAncGlja2F4ZSAtaSBvbiBub24tYXNjaWknICcKKwlnaXQgY29tbWl0IC1tIGZpcnN0ICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lZiAtaSAtUyJUSUxSQVVOOiBIQUxMw5MgSEVJTVVSISIgPmFjdHVhbCAmJgorCWVjaG8gZmlyc3QgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUsTElCUENSRTIgJ1BDUkUgdjI6IHNldHVwIGludmFsaWQgVVRGLTggZGF0YScgJworCXByaW50ZiAiXFwyMDBcXG4iID5pbnZhbGlkLTB4ODAgJiYKKwllY2hvICLDpnZhciIgPmV4cGVjdGVkICYmCisJY2F0IGV4cGVjdGVkID4+aW52YWxpZC0weDgwICYmCisJZ2l0IGFkZCBpbnZhbGlkLTB4ODAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSxMSUJQQ1JFMiAnUENSRSB2MjogZ3JlcCBBU0NJSSBmcm9tIGludmFsaWQgVVRGLTggZGF0YScgJworCWdpdCBncmVwIC1oICJ2YXIiIGludmFsaWQtMHg4MCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IGdyZXAgLWggIigqTk9fSklUKXZhciIgaW52YWxpZC0weDgwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSxMSUJQQ1JFMiAnUENSRSB2MjogZ3JlcCBub24tQVNDSUkgZnJvbSBpbnZhbGlkIFVURi04IGRhdGEnICcKKwlnaXQgZ3JlcCAtaCAiw6YiIGludmFsaWQtMHg4MCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IGdyZXAgLWggIigqTk9fSklUKcOmIiBpbnZhbGlkLTB4ODAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFLExJQlBDUkUyICdQQ1JFIHYyOiBncmVwIG5vbi1BU0NJSSBmcm9tIGludmFsaWQgVVRGLTggZGF0YSB3aXRoIC1pJyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBncmVwIC1oaSAiw4YiIGludmFsaWQtMHg4MCA+YWN0dWFsICYmCisJaWYgdGVzdCAtcyBhY3R1YWwKKwl0aGVuCisJICAgIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCWZpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLWhpICIoKk5PX0pJVCnDhiIgaW52YWxpZC0weDgwID5hY3R1YWwgJiYKKwkhIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc4MTMtZ3JlcC1pY2FzZS1pc28uc2ggYi90L3Q3ODEzLWdyZXAtaWNhc2UtaXNvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcwMWUwOGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3ODEzLWdyZXAtaWNhc2UtaXNvLnNoCkBAIC0wLDAgKzEsMTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdncmVwIGljYXNlIG9uIG5vbi1FbmdsaXNoIGxvY2FsZXMnCisKKy4gLi9saWItZ2V0dGV4dC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfSVNPX0xPQ0FMRSAnc2V0dXAnICcKKwlwcmludGYgIlRJTFJBVU46IEhhbGzzIEhlaW11ciEiID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJTENfQUxMPSIkaXNfSVNfaXNvX2xvY2FsZSIgJiYKKwlleHBvcnQgTENfQUxMCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9JU09fTE9DQUxFLFBDUkUgJ2dyZXAgcGNyZSBzdHJpbmcnICcKKwlnaXQgZ3JlcCAtLXBlcmwtcmVnZXhwIC1pICJUSUxSQVVOOiBILmxs8yBIZWltdXIhIiAmJgorCWdpdCBncmVwIC0tcGVybC1yZWdleHAgLWkgIlRJTFJBVU46IEguTEzTIEhFSU1VUiEiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzgxNC1ncmVwLXJlY3Vyc2Utc3VibW9kdWxlcy5zaCBiL3QvdDc4MTQtZ3JlcC1yZWN1cnNlLXN1Ym1vZHVsZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODI4Y2IzYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc4MTQtZ3JlcC1yZWN1cnNlLXN1Ym1vZHVsZXMuc2gKQEAgLTAsMCArMSw0NDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdyZXAgcmVjdXJzZS1zdWJtb2R1bGVzIGZlYXR1cmUKKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoZSByZWN1cnNlLXN1Ym1vZHVsZXMgZmVhdHVyZSBjb3JyZWN0bHkgZ3JlcHMgYWNyb3NzCitzdWJtb2R1bGVzLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgc3VibW9kdWxlJyAnCisJZWNobyAiKDF8MilkKDN8NCkiID5hICYmCisJbWtkaXIgYiAmJgorCWVjaG8gIigzfDQpIiA+Yi9iICYmCisJZ2l0IGFkZCBhIGIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgYSBhbmQgYiIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgaW5pdCBzdWJtb2R1bGUgJiYKKwllY2hvICIoMXwyKWQoM3w0KSIgPnN1Ym1vZHVsZS9hICYmCisJZ2l0IC1DIHN1Ym1vZHVsZSBhZGQgYSAmJgorCWdpdCAtQyBzdWJtb2R1bGUgY29tbWl0IC1tICJhZGQgYSIgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuL3N1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIHN1Ym1vZHVsZSIgJiYKKwl0ZXN0X3RpY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBjb3JyZWN0bHkgZmluZHMgcGF0dGVybnMgaW4gYSBzdWJtb2R1bGUnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJYTooMXwyKWQoM3w0KQorCWIvYjooM3w0KQorCXN1Ym1vZHVsZS9hOigxfDIpZCgzfDQpCisJRU9GCisKKwlnaXQgZ3JlcCAtZSAiKDN8NCkiIC0tcmVjdXJzZS1zdWJtb2R1bGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgZmluZHMgcGF0dGVybnMgaW4gYSBzdWJtb2R1bGUgdmlhIGNvbmZpZycgJworCXRlc3RfY29uZmlnIHN1Ym1vZHVsZS5yZWN1cnNlIHRydWUgJiYKKwkjIGV4cGVjdCBmcm9tIHByZXZpb3VzIHRlc3QKKwlnaXQgZ3JlcCAtZSAiKDN8NCkiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgb3ZlcnJpZGVzIGNvbmZpZycgJworCXRlc3RfY29uZmlnIHN1Ym1vZHVsZS5yZWN1cnNlIHRydWUgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJYTooMXwyKWQoM3w0KQorCWIvYjooM3w0KQorCUVPRgorCisJZ2l0IGdyZXAgLWUgIigzfDQpIiAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGFuZCBiYXNpYyBwYXRoc3BlY3MnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJc3VibW9kdWxlL2E6KDF8MilkKDN8NCkKKwlFT0YKKworCWdpdCBncmVwIC1lLiAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLSBzdWJtb2R1bGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBhbmQgbmVzdGVkIHN1Ym1vZHVsZXMnICcKKwlnaXQgaW5pdCBzdWJtb2R1bGUvc3ViICYmCisJZWNobyAiKDF8MilkKDN8NCkiID5zdWJtb2R1bGUvc3ViL2EgJiYKKwlnaXQgLUMgc3VibW9kdWxlL3N1YiBhZGQgYSAmJgorCWdpdCAtQyBzdWJtb2R1bGUvc3ViIGNvbW1pdCAtbSAiYWRkIGEiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IC1DIHN1Ym1vZHVsZSBzdWJtb2R1bGUgYWRkIC4vc3ViICYmCisJZ2l0IC1DIHN1Ym1vZHVsZSBhZGQgc3ViICYmCisJZ2l0IC1DIHN1Ym1vZHVsZSBjb21taXQgLW0gImFkZGVkIHN1YiIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gInVwZGF0ZWQgc3VibW9kdWxlIiAmJgorCXRlc3RfdGljayAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWE6KDF8MilkKDN8NCkKKwliL2I6KDN8NCkKKwlzdWJtb2R1bGUvYTooMXwyKWQoM3w0KQorCXN1Ym1vZHVsZS9zdWIvYTooMXwyKWQoM3w0KQorCUVPRgorCisJZ2l0IGdyZXAgLWUgIigzfDQpIiAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGFuZCBtdWx0aXBsZSBwYXR0ZXJucycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlhOigxfDIpZCgzfDQpCisJc3VibW9kdWxlL2E6KDF8MilkKDN8NCkKKwlzdWJtb2R1bGUvc3ViL2E6KDF8MilkKDN8NCkKKwlFT0YKKworCWdpdCBncmVwIC1lICIoM3w0KSIgLS1hbmQgLWUgIigxfDIpIiAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGFuZCBtdWx0aXBsZSBwYXR0ZXJucycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwliL2I6KDN8NCkKKwlFT0YKKworCWdpdCBncmVwIC1lICIoM3w0KSIgLS1hbmQgLS1ub3QgLWUgIigxfDIpIiAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyBncmVwIHRyZWUnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJSEVBRDphOigxfDIpZCgzfDQpCisJSEVBRDpiL2I6KDN8NCkKKwlIRUFEOnN1Ym1vZHVsZS9hOigxfDIpZCgzfDQpCisJSEVBRDpzdWJtb2R1bGUvc3ViL2E6KDF8MilkKDN8NCkKKwlFT0YKKworCWdpdCBncmVwIC1lICIoM3w0KSIgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIHRyZWUgSEVBRF4nICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJSEVBRF46YTooMXwyKWQoM3w0KQorCUhFQUReOmIvYjooM3w0KQorCUhFQUReOnN1Ym1vZHVsZS9hOigxfDIpZCgzfDQpCisJRU9GCisKKwlnaXQgZ3JlcCAtZSAiKDN8NCkiIC0tcmVjdXJzZS1zdWJtb2R1bGVzIEhFQUReID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgdHJlZSBIRUFEXl4nICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJSEVBRF5eOmE6KDF8MilkKDN8NCkKKwlIRUFEXl46Yi9iOigzfDQpCisJRU9GCisKKwlnaXQgZ3JlcCAtZSAiKDN8NCkiIC0tcmVjdXJzZS1zdWJtb2R1bGVzIEhFQUReXiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIHRyZWUgYW5kIHBhdGhzcGVjcycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlIRUFEOnN1Ym1vZHVsZS9hOigxfDIpZCgzfDQpCisJSEVBRDpzdWJtb2R1bGUvc3ViL2E6KDF8MilkKDN8NCkKKwlFT0YKKworCWdpdCBncmVwIC1lICIoM3w0KSIgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgSEVBRCAtLSBzdWJtb2R1bGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCB0cmVlIGFuZCBwYXRoc3BlY3MnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJSEVBRDpzdWJtb2R1bGUvYTooMXwyKWQoM3w0KQorCUhFQUQ6c3VibW9kdWxlL3N1Yi9hOigxfDIpZCgzfDQpCisJRU9GCisKKwlnaXQgZ3JlcCAtZSAiKDN8NCkiIC0tcmVjdXJzZS1zdWJtb2R1bGVzIEhFQUQgLS0gInN1Ym1vZHVsZSphIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIHRyZWUgYW5kIG1vcmUgcGF0aHNwZWNzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUhFQUQ6c3VibW9kdWxlL2E6KDF8MilkKDN8NCkKKwlFT0YKKworCWdpdCBncmVwIC1lICIoM3w0KSIgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgSEVBRCAtLSAic3VibW9kdWw/L2EiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgdHJlZSBhbmQgbW9yZSBwYXRoc3BlY3MnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJSEVBRDpzdWJtb2R1bGUvc3ViL2E6KDF8MilkKDN8NCkKKwlFT0YKKworCWdpdCBncmVwIC1lICIoM3w0KSIgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgSEVBRCAtLSAic3VibW9kdWwqL3N1Yi9hIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnZ3JlcCByZWN1cnNlIHN1Ym1vZHVsZSBjb2xvbiBpbiBuYW1lJyAnCisJZ2l0IGluaXQgcGFyZW50ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgcGFyZW50IiAmJgorCWVjaG8gIigxfDIpZCgzfDQpIiA+InBhcmVudC9maTpsZSIgJiYKKwlnaXQgLUMgcGFyZW50IGFkZCAiZmk6bGUiICYmCisJZ2l0IC1DIHBhcmVudCBjb21taXQgLW0gImFkZCBmaTpsZSIgJiYKKwl0ZXN0X3RpY2sgJiYKKworCWdpdCBpbml0ICJzdTpiIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1OmIiICYmCisJZWNobyAiKDF8MilkKDN8NCkiID4ic3U6Yi9maTpsZSIgJiYKKwlnaXQgLUMgInN1OmIiIGFkZCAiZmk6bGUiICYmCisJZ2l0IC1DICJzdTpiIiBjb21taXQgLW0gImFkZCBmaTpsZSIgJiYKKwl0ZXN0X3RpY2sgJiYKKworCWdpdCAtQyBwYXJlbnQgc3VibW9kdWxlIGFkZCAiLi4vc3U6YiIgInN1OmIiICYmCisJZ2l0IC1DIHBhcmVudCBjb21taXQgLW0gImFkZCBzdWJtb2R1bGUiICYmCisJdGVzdF90aWNrICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZmk6bGU6KDF8MilkKDN8NCkKKwlzdTpiL2ZpOmxlOigxfDIpZCgzfDQpCisJRU9GCisJZ2l0IC1DIHBhcmVudCBncmVwIC1lICIoMXwyKWQoM3w0KSIgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlIRUFEOmZpOmxlOigxfDIpZCgzfDQpCisJSEVBRDpzdTpiL2ZpOmxlOigxfDIpZCgzfDQpCisJRU9GCisJZ2l0IC1DIHBhcmVudCBncmVwIC1lICIoMXwyKWQoM3w0KSIgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGhpc3Rvcnkgd2l0aCBtb3ZlZCBzdWJtb3VsZXMnICcKKwlnaXQgaW5pdCBwYXJlbnQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBwYXJlbnQiICYmCisJZWNobyAiKDF8MilkKDN8NCkiID5wYXJlbnQvZmlsZSAmJgorCWdpdCAtQyBwYXJlbnQgYWRkIGZpbGUgJiYKKwlnaXQgLUMgcGFyZW50IGNvbW1pdCAtbSAiYWRkIGZpbGUiICYmCisJdGVzdF90aWNrICYmCisKKwlnaXQgaW5pdCBzdWIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdWIiICYmCisJZWNobyAiKDF8MilkKDN8NCkiID5zdWIvZmlsZSAmJgorCWdpdCAtQyBzdWIgYWRkIGZpbGUgJiYKKwlnaXQgLUMgc3ViIGNvbW1pdCAtbSAiYWRkIGZpbGUiICYmCisJdGVzdF90aWNrICYmCisKKwlnaXQgLUMgcGFyZW50IHN1Ym1vZHVsZSBhZGQgLi4vc3ViIGRpci9zdWIgJiYKKwlnaXQgLUMgcGFyZW50IGNvbW1pdCAtbSAiYWRkIHN1Ym1vZHVsZSIgJiYKKwl0ZXN0X3RpY2sgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlkaXIvc3ViL2ZpbGU6KDF8MilkKDN8NCkKKwlmaWxlOigxfDIpZCgzfDQpCisJRU9GCisJZ2l0IC1DIHBhcmVudCBncmVwIC1lICIoMXwyKWQoM3w0KSIgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCAtQyBwYXJlbnQgbXYgZGlyL3N1YiBzdWItbW92ZWQgJiYKKwlnaXQgLUMgcGFyZW50IGNvbW1pdCAtbSAibW92ZWQgc3VibW9kdWxlIiAmJgorCXRlc3RfdGljayAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZpbGU6KDF8MilkKDN8NCkKKwlzdWItbW92ZWQvZmlsZTooMXwyKWQoM3w0KQorCUVPRgorCWdpdCAtQyBwYXJlbnQgZ3JlcCAtZSAiKDF8MilkKDN8NCkiIC0tcmVjdXJzZS1zdWJtb2R1bGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJSEVBRF46ZGlyL3N1Yi9maWxlOigxfDIpZCgzfDQpCisJSEVBRF46ZmlsZTooMXwyKWQoM3w0KQorCUVPRgorCWdpdCAtQyBwYXJlbnQgZ3JlcCAtZSAiKDF8MilkKDN8NCkiIC0tcmVjdXJzZS1zdWJtb2R1bGVzIEhFQUReID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgdXNpbmcgcmVsYXRpdmUgcGF0aCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHBhcmVudCBzdWIiICYmCisJZ2l0IGluaXQgc3ViICYmCisJZWNobyAiKDF8MilkKDN8NCkiID5zdWIvZmlsZSAmJgorCWdpdCAtQyBzdWIgYWRkIGZpbGUgJiYKKwlnaXQgLUMgc3ViIGNvbW1pdCAtbSAiYWRkIGZpbGUiICYmCisJdGVzdF90aWNrICYmCisKKwlnaXQgaW5pdCBwYXJlbnQgJiYKKwllY2hvICIoMXwyKWQoM3w0KSIgPnBhcmVudC9maWxlICYmCisJZ2l0IC1DIHBhcmVudCBhZGQgZmlsZSAmJgorCW1rZGlyIHBhcmVudC9zcmMgJiYKKwllY2hvICIoMXwyKWQoM3w0KSIgPnBhcmVudC9zcmMvZmlsZTIgJiYKKwlnaXQgLUMgcGFyZW50IGFkZCBzcmMvZmlsZTIgJiYKKwlnaXQgLUMgcGFyZW50IHN1Ym1vZHVsZSBhZGQgLi4vc3ViICYmCisJZ2l0IC1DIHBhcmVudCBjb21taXQgLW0gImFkZCBmaWxlcyBhbmQgc3VibW9kdWxlIiAmJgorCXRlc3RfdGljayAmJgorCisJIyBGcm9tIHRvcCB3b3JrcworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmaWxlOigxfDIpZCgzfDQpCisJc3JjL2ZpbGUyOigxfDIpZCgzfDQpCisJc3ViL2ZpbGU6KDF8MilkKDN8NCkKKwlFT0YKKwlnaXQgLUMgcGFyZW50IGdyZXAgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLWUgIigxfDIpZCgzfDQpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBSZWxhdGl2ZSBwYXRoIHRvIHRvcAorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkuLi9maWxlOigxfDIpZCgzfDQpCisJZmlsZTI6KDF8MilkKDN8NCkKKwkuLi9zdWIvZmlsZTooMXwyKWQoM3w0KQorCUVPRgorCWdpdCAtQyBwYXJlbnQvc3JjIGdyZXAgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLWUgIigxfDIpZCgzfDQpIiAtLSAuLiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBSZWxhdGl2ZSBwYXRoIHRvIHN1Ym1vZHVsZQorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkuLi9zdWIvZmlsZTooMXwyKWQoM3w0KQorCUVPRgorCWdpdCAtQyBwYXJlbnQvc3JjIGdyZXAgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLWUgIigxfDIpZCgzfDQpIiAtLSAuLi9zdWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBmcm9tIGEgc3ViZGlyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgcGFyZW50IHN1YiIgJiYKKwlnaXQgaW5pdCBzdWIgJiYKKwllY2hvICIoMXwyKWQoM3w0KSIgPnN1Yi9maWxlICYmCisJZ2l0IC1DIHN1YiBhZGQgZmlsZSAmJgorCWdpdCAtQyBzdWIgY29tbWl0IC1tICJhZGQgZmlsZSIgJiYKKwl0ZXN0X3RpY2sgJiYKKworCWdpdCBpbml0IHBhcmVudCAmJgorCW1rZGlyIHBhcmVudC9zcmMgJiYKKwllY2hvICIoMXwyKWQoM3w0KSIgPnBhcmVudC9zcmMvZmlsZSAmJgorCWdpdCAtQyBwYXJlbnQgYWRkIHNyYy9maWxlICYmCisJZ2l0IC1DIHBhcmVudCBzdWJtb2R1bGUgYWRkIC4uL3N1YiBzcmMvc3ViICYmCisJZ2l0IC1DIHBhcmVudCBzdWJtb2R1bGUgYWRkIC4uL3N1YiBzdWIgJiYKKwlnaXQgLUMgcGFyZW50IGNvbW1pdCAtbSAiYWRkIGZpbGVzIGFuZCBzdWJtb2R1bGVzIiAmJgorCXRlc3RfdGljayAmJgorCisJIyBWZXJpZnkgZ3JlcCBmcm9tIHJvb3Qgd29ya3MKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJc3JjL2ZpbGU6KDF8MilkKDN8NCkKKwlzcmMvc3ViL2ZpbGU6KDF8MilkKDN8NCkKKwlzdWIvZmlsZTooMXwyKWQoM3w0KQorCUVPRgorCWdpdCAtQyBwYXJlbnQgZ3JlcCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtZSAiKDF8MilkKDN8NCkiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFZlcmlmeSBncmVwIGZyb20gYSBzdWJkaXIgd29ya3MKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZmlsZTooMXwyKWQoM3w0KQorCXN1Yi9maWxlOigxfDIpZCgzfDQpCisJRU9GCisJZ2l0IC1DIHBhcmVudC9zcmMgZ3JlcCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtZSAiKDF8MilkKDN8NCkiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfaW5jb21wYXRpYmxlX3dpdGhfcmVjdXJzZV9zdWJtb2R1bGVzICgpCit7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMgYW5kICQxIGFyZSBpbmNvbXBhdGlibGUiICIKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLWUuIC0tcmVjdXJzZS1zdWJtb2R1bGVzICQxIDI+YWN0dWFsICYmCisJCXRlc3RfaTE4bmdyZXAgJ25vdCBzdXBwb3J0ZWQgd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcycgYWN0dWFsCisJIgorfQorCit0ZXN0X2luY29tcGF0aWJsZV93aXRoX3JlY3Vyc2Vfc3VibW9kdWxlcyAtLXVudHJhY2tlZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tbm8taW5kZXggaWdub3JlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcycgJworCWdpdCBncmVwIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tbm8taW5kZXggLWUgIl4oLnwuKVtcZF0iID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJYTooMXwyKWQoM3w0KQorCXN1Ym1vZHVsZS9hOigxfDIpZCgzfDQpCisJc3VibW9kdWxlL3N1Yi9hOigxfDIpZCgzfDQpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tcmVjdXJzZS1zdWJtb2R1bGVzIHNob3VsZCBwYXNzIHRoZSBwYXR0ZXJuIHR5cGUgYWxvbmcnICcKKwkjIEZpeGVkCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLUYgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLWUgIigufC4pW1xkXSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1maXhlZCBncmVwIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC1lICIoLnwuKVtcZF0iICYmCisKKwkjIEJhc2ljCisJZ2l0IGdyZXAgLUcgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLWUgIigufC4pW1xkXSIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlhOigxfDIpZCgzfDQpCisJc3VibW9kdWxlL2E6KDF8MilkKDN8NCkKKwlzdWJtb2R1bGUvc3ViL2E6KDF8MilkKDN8NCkKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9YmFzaWMgZ3JlcCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtZSAiKC58LilbXGRdIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBFeHRlbmRlZAorCWdpdCBncmVwIC1FIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC1lICIoLnwuKVtcZF0iID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLmdpdG1vZHVsZXM6W3N1Ym1vZHVsZSAic3VibW9kdWxlIl0KKwkuZ2l0bW9kdWxlczoJcGF0aCA9IHN1Ym1vZHVsZQorCS5naXRtb2R1bGVzOgl1cmwgPSAuL3N1Ym1vZHVsZQorCWE6KDF8MilkKDN8NCkKKwlzdWJtb2R1bGUvLmdpdG1vZHVsZXM6W3N1Ym1vZHVsZSAic3ViIl0KKwlzdWJtb2R1bGUvYTooMXwyKWQoM3w0KQorCXN1Ym1vZHVsZS9zdWIvYTooMXwyKWQoM3w0KQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1leHRlbmRlZCBncmVwIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC1lICIoLnwuKVtcZF0iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IC1jIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSBncmVwIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC1lICIoLnwuKVtcZF0iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFBlcmwKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFBDUkUKKwl0aGVuCisJCWdpdCBncmVwIC1QIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC1lICIoLnwuKVtcZF0iID5hY3R1YWwgJiYKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlhOigxfDIpZCgzfDQpCisJCWIvYjooM3w0KQorCQlzdWJtb2R1bGUvYTooMXwyKWQoM3w0KQorCQlzdWJtb2R1bGUvc3ViL2E6KDF8MilkKDN8NCkKKwkJRU9GCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9cGVybCBncmVwIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC1lICIoLnwuKVtcZF0iID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgd2l0aCBzdWJtb2R1bGVzIHdpdGhvdXQgLmdpdG1vZHVsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1Ym1vZHVsZSBjaGVja291dCAuZ2l0bW9kdWxlcyIgJiYKKwlybSBzdWJtb2R1bGUvLmdpdG1vZHVsZXMgJiYKKwlnaXQgZ3JlcCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtZSAiKC58LilbXGRdIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWE6KDF8MilkKDN8NCkKKwlzdWJtb2R1bGUvYTooMXwyKWQoM3w0KQorCXN1Ym1vZHVsZS9zdWIvYTooMXwyKWQoM3w0KQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworcmVzZXRfYW5kX2NsZWFuICgpIHsKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNsZWFuIC1mZCAmJgorCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAtLXJlY3Vyc2l2ZSAnZ2l0IHJlc2V0IC0taGFyZCcgJiYKKwlnaXQgc3VibW9kdWxlIGZvcmVhY2ggLS1yZWN1cnNpdmUgJ2dpdCBjbGVhbiAtZmQnCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgd2l0aG91dCAtLWNhY2hlZCBjb25zaWRlcnMgd29ya3RyZWUgbW9kaWZpY2F0aW9ucycgJworCXJlc2V0X2FuZF9jbGVhbiAmJgorCWVjaG8gIkEgbW9kaWZpZWQgbGluZSBpbiBzdWJtb2R1bGUiID4+c3VibW9kdWxlL2EgJiYKKwllY2hvICJzdWJtb2R1bGUvYTpBIG1vZGlmaWVkIGxpbmUgaW4gc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJZ2l0IGdyZXAgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgIkEgbW9kaWZpZWQgbGluZSBpbiBzdWJtb2R1bGUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgd2l0aCAtLWNhY2hlZCBpZ25vcmVzIHdvcmt0cmVlIG1vZGlmaWNhdGlvbnMnICcKKwlyZXNldF9hbmRfY2xlYW4gJiYKKwllY2hvICJBIG1vZGlmaWVkIGxpbmUgaW4gc3VibW9kdWxlIiA+PnN1Ym1vZHVsZS9hICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1jYWNoZWQgIkEgbW9kaWZpZWQgbGluZSBpbiBzdWJtb2R1bGUiID5hY3R1YWwgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzgxNS1ncmVwLWJpbmFyeS5zaCBiL3QvdDc4MTUtZ3JlcC1iaW5hcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTBlYmI2NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc4MTUtZ3JlcC1iaW5hcnkuc2gKQEAgLTAsMCArMSwxNDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgZ3JlcCBpbiBiaW5hcnkgZmlsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgIgorCWVjaG8gJ2JpbmFyeVFmaWxlUW1bKl1jUSrDplHDsCcgfCBxX3RvX251bCA+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0uCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIGluYSBhJyAnCisJZWNobyBCaW5hcnkgZmlsZSBhIG1hdGNoZXMgPmV4cGVjdCAmJgorCWdpdCBncmVwIGluYSBhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1haCBpbmEgYScgJworCWdpdCBncmVwIC1haCBpbmEgYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgYSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgLUkgaW5hIGEnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtSSBpbmEgYSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtYyBpbmEgYScgJworCWVjaG8gYToxID5leHBlY3QgJiYKKwlnaXQgZ3JlcCAtYyBpbmEgYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtbCBpbmEgYScgJworCWVjaG8gYSA+ZXhwZWN0ICYmCisJZ2l0IGdyZXAgLWwgaW5hIGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgLUwgYmFyIGEnICcKKwllY2hvIGEgPmV4cGVjdCAmJgorCWdpdCBncmVwIC1MIGJhciBhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1xIGluYSBhJyAnCisJZ2l0IGdyZXAgLXEgaW5hIGEgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgLUYgaWxlIGEnICcKKwlnaXQgZ3JlcCAtRiBpbGUgYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtRmkgaUxFIGEnICcKKwlnaXQgZ3JlcCAtRmkgaUxFIGEKKycKKworIyBUaGlzIHRlc3QgYWN0dWFsbHkgcGFzc2VzIG9uIHBsYXRmb3JtcyB3aGVyZSByZWdleGVjKCkgc3VwcG9ydHMgdGhlCisjIGZsYWcgUkVHX1NUQVJURU5ELgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgaWxlIGEnICcKKwlnaXQgZ3JlcCBpbGUgYQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQgZ3JlcCAuZmkgYScgJworCWdpdCBncmVwIC5maSBhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgcmVzcGVjdHMgYmluYXJ5IGRpZmYgYXR0cmlidXRlJyAnCisJZWNobyB0ZXh0ID50ICYmCisJZ2l0IGFkZCB0ICYmCisJZWNobyB0OnRleHQgPmV4cGVjdCAmJgorCWdpdCBncmVwIHRleHQgdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gInQgLWRpZmYiID4uZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gIkJpbmFyeSBmaWxlIHQgbWF0Y2hlcyIgPmV4cGVjdCAmJgorCWdpdCBncmVwIHRleHQgdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tY2FjaGVkIHJlc3BlY3RzIGJpbmFyeSBkaWZmIGF0dHJpYnV0ZScgJworCWdpdCBncmVwIC0tY2FjaGVkIHRleHQgdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tY2FjaGVkIHJlc3BlY3RzIGJpbmFyeSBkaWZmIGF0dHJpYnV0ZSAoMiknICcKKwlnaXQgYWRkIC5naXRhdHRyaWJ1dGVzICYmCisJcm0gLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgZ3JlcCAtLWNhY2hlZCB0ZXh0IHQgPmFjdHVhbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJtIC0tY2FjaGVkIC5naXRhdHRyaWJ1dGVzIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC5naXRhdHRyaWJ1dGVzIiAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCByZXZpc2lvbiByZXNwZWN0cyBiaW5hcnkgZGlmZiBhdHRyaWJ1dGUnICcKKwlnaXQgY29tbWl0IC1tIG5ldyAmJgorCWVjaG8gIkJpbmFyeSBmaWxlIEhFQUQ6dCBtYXRjaGVzIiA+ZXhwZWN0ICYmCisJZ2l0IGdyZXAgdGV4dCBIRUFEIC0tIHQgPmFjdHVhbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IEhFQUReIiAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCByZXNwZWN0cyBub3QtYmluYXJ5IGRpZmYgYXR0cmlidXRlJyAnCisJZWNobyBiaW5RYXJ5IHwgcV90b19udWwgPmIgJiYKKwlnaXQgYWRkIGIgJiYKKwllY2hvICJCaW5hcnkgZmlsZSBiIG1hdGNoZXMiID5leHBlY3QgJiYKKwlnaXQgZ3JlcCBiaW4gYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gImIgZGlmZiIgPi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiYjpiaW5RYXJ5IiA+ZXhwZWN0ICYmCisJZ2l0IGdyZXAgYmluIGIgPmFjdHVhbC5yYXcgJiYKKwludWxfdG9fcSA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPm51bF90b19xX3RleHRjb252IDw8J0VPRicKKyMhL2Jpbi9zaAorIiRQRVJMX1BBVEgiIC1wZSAneS9cMDAwL1EvJyA8ICIkMSIKK0VPRgorY2htb2QgK3ggbnVsX3RvX3FfdGV4dGNvbnYKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGV4dGNvbnYgZmlsdGVycycgJworCWVjaG8gYSBkaWZmPWZvbyA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29uZmlnIGRpZmYuZm9vLnRleHRjb252ICJcIiQocHdkKVwiIi9udWxfdG9fcV90ZXh0Y29udgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGRvZXMgbm90IGhvbm9yIHRleHRjb252JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgUWZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtLXRleHRjb252IGhvbm9ycyB0ZXh0Y29udicgJworCWVjaG8gImE6YmluYXJ5UWZpbGVRbVsqXWNRKsOmUcOwIiA+ZXhwZWN0ICYmCisJZ2l0IGdyZXAgLS10ZXh0Y29udiBRZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tbm8tdGV4dGNvbnYgZG9lcyBub3QgaG9ub3IgdGV4dGNvbnYnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtLW5vLXRleHRjb252IFFmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS10ZXh0Y29udiBibG9iIGhvbm9ycyB0ZXh0Y29udicgJworCWVjaG8gIkhFQUQ6YTpiaW5hcnlRZmlsZVFtWypdY1Eqw6ZRw7AiID5leHBlY3QgJiYKKwlnaXQgZ3JlcCAtLXRleHRjb252IFFmaWxlIEhFQUQ6YSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc4MTYtZ3JlcC1iaW5hcnktcGF0dGVybi5zaCBiL3QvdDc4MTYtZ3JlcC1iaW5hcnktcGF0dGVybi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MGJhYjI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzgxNi1ncmVwLWJpbmFyeS1wYXR0ZXJuLnNoCkBAIC0wLDAgKzEsMTI3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGdyZXAgd2l0aCBhIGJpbmFyeSBwYXR0ZXJuIGZpbGVzJworCisuIC4vbGliLWdldHRleHQuc2gKKworbnVsX21hdGNoX2ludGVybmFsICgpIHsKKwltYXRjaGVzPSQxCisJcHJlcmVxcz0kMgorCWxjX2FsbD0kMworCWV4dHJhX2ZsYWdzPSQ0CisJZmxhZ3M9JDUKKwlwYXR0ZXJuPSQ2CisJcGF0dGVybl9odW1hbj0kKGVjaG8gIiRwYXR0ZXJuIiB8IHNlZCAncy9RLzxOVUw+L2cnKQorCisJaWYgdGVzdCAiJG1hdGNoZXMiID0gMQorCXRoZW4KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHJlcmVxcyAiTENfQUxMPSckbGNfYWxsJyBnaXQgZ3JlcCAkZXh0cmFfZmxhZ3MgLWYgZiAkZmxhZ3MgJyRwYXR0ZXJuX2h1bWFuJyBhIiAiCisJCQlwcmludGYgJyRwYXR0ZXJuJyB8IHFfdG9fbnVsID5mICYmCisJCQlMQ19BTEw9JyRsY19hbGwnIGdpdCBncmVwICRleHRyYV9mbGFncyAtZiBmICRmbGFncyBhCisJCSIKKwllbGlmIHRlc3QgIiRtYXRjaGVzIiA9IDAKKwl0aGVuCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByZXJlcXMgIkxDX0FMTD0nJGxjX2FsbCcgZ2l0IGdyZXAgJGV4dHJhX2ZsYWdzIC1mIGYgJGZsYWdzICckcGF0dGVybl9odW1hbicgYSIgIgorCQkJPnN0ZGVyciAmJgorCQkJcHJpbnRmICckcGF0dGVybicgfCBxX3RvX251bCA+ZiAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZW52IExDX0FMTD1cIiRsY19hbGxcIiBnaXQgZ3JlcCAkZXh0cmFfZmxhZ3MgLWYgZiAkZmxhZ3MgYSAyPnN0ZGVyciAmJgorCQkJdGVzdF9pMThuZ3JlcCAhICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIHdpdGggLVAgdW5kZXIgUENSRSB2Micgc3RkZXJyCisJCSIKKwllbGlmIHRlc3QgIiRtYXRjaGVzIiA9IFAKKwl0aGVuCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByZXJlcXMgImVycm9yLCBQQ1JFIHYyIG9ubHk6IExDX0FMTD0nJGxjX2FsbCcgZ2l0IGdyZXAgLWYgZiAkZmxhZ3MgJyRwYXR0ZXJuX2h1bWFuJyBhIiAiCisJCQk+c3RkZXJyICYmCisJCQlwcmludGYgJyRwYXR0ZXJuJyB8IHFfdG9fbnVsID5mICYmCisJCQl0ZXN0X211c3RfZmFpbCBlbnYgTENfQUxMPVwiJGxjX2FsbFwiIGdpdCBncmVwIC1mIGYgJGZsYWdzIGEgMj5zdGRlcnIgJiYKKwkJCXRlc3RfaTE4bmdyZXAgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgd2l0aCAtUCB1bmRlciBQQ1JFIHYyJyBzdGRlcnIKKwkJIgorCWVsc2UKKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAiUEFOSUM6IFRlc3QgZnJhbWV3b3JrIGVycm9yLiBVbmtub3duIG1hdGNoZXMgdmFsdWUgJG1hdGNoZXMiICdmYWxzZScKKwlmaQorfQorCitudWxfbWF0Y2ggKCkgeworCW1hdGNoZXM9JDEKKwltYXRjaGVzX3BjcmUyPSQyCisJbWF0Y2hlc19wY3JlMl9sb2NhbGU9JDMKKwlmbGFncz0kNAorCXBhdHRlcm49JDUKKwlwYXR0ZXJuX2h1bWFuPSQoZWNobyAiJHBhdHRlcm4iIHwgc2VkICdzL1EvPE5VTD4vZycpCisKKwludWxfbWF0Y2hfaW50ZXJuYWwgIiRtYXRjaGVzIiAiIiAiQyIgIiIgIiRmbGFncyIgIiRwYXR0ZXJuIgorCW51bF9tYXRjaF9pbnRlcm5hbCAiJG1hdGNoZXNfcGNyZTIiICJMSUJQQ1JFMiIgIkMiICItUCIgIiRmbGFncyIgIiRwYXR0ZXJuIgorCW51bF9tYXRjaF9pbnRlcm5hbCAiJG1hdGNoZXNfcGNyZTJfbG9jYWxlIiAiTElCUENSRTIsR0VUVEVYVF9MT0NBTEUiICIkaXNfSVNfbG9jYWxlIiAiLVAiICIkZmxhZ3MiICIkcGF0dGVybiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICIKKwllY2hvICdiaW5hcnlRZmlsZVFtWypdY1Eqw6ZRw7AnIHwgcV90b19udWwgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tLgorIgorCisjIFNpbXBsZSBmaXhlZC1zdHJpbmcgbWF0Y2hpbmcgdGhhdCBjYW4gdXNlIGt3c2V0IChubyAtaSAmJiBub24tQVNDSUkpCitudWxfbWF0Y2ggUCBQIFAgJy1GJyAneVFmJworbnVsX21hdGNoIFAgUCBQICctRicgJ3lReCcKK251bF9tYXRjaCBQIFAgUCAnLUZpJyAnWVFmJworbnVsX21hdGNoIFAgUCBQICctRmknICdZUXgnCitudWxfbWF0Y2ggUCBQIDEgJycgJ3lRZicKK251bF9tYXRjaCBQIFAgMCAnJyAneVF4JworbnVsX21hdGNoIFAgUCAxICcnICfDplHDsCcKK251bF9tYXRjaCBQIFAgUCAnLUYnICdlUW1bKl1jJworbnVsX21hdGNoIFAgUCBQICctRmknICdFUU1bKl1DJworCisjIFJlZ2V4IHBhdHRlcm5zIHRoYXQgd291bGQgbWF0Y2ggYnV0IHNob3VsZG4ndCB3aXRoIC1GCitudWxfbWF0Y2ggUCBQIFAgJy1GJyAneVFbZl0nCitudWxfbWF0Y2ggUCBQIFAgJy1GJyAnW3ldUWYnCitudWxfbWF0Y2ggUCBQIFAgJy1GaScgJ1lRW0ZdJworbnVsX21hdGNoIFAgUCBQICctRmknICdbWV1RRicKK251bF9tYXRjaCBQIFAgUCAnLUYnICfDplFbw7BdJworbnVsX21hdGNoIFAgUCBQICctRicgJ1vDpl1Rw7AnCisKKyMgVGhlIC1GIGt3c2V0IGNvZGVwYXRoIGNhbid0IGhhbmRsZSAtaSAmJiBub24tQVNDSUkuLi4KK251bF9tYXRjaCBQIDEgMSAnLWknICdbw6ZdUcOwJworCisjIC4uLlBDUkUgdjIgb25seSBtYXRjaGVzIG5vbi1BU0NJSSB3aXRoIC1pIGNhc2Vmb2xkaW5nIHVuZGVyIFVURi04CisjIHNlbWFudGljcworbnVsX21hdGNoIFAgUCBQICctRmknICfDhlFbw5BdJworbnVsX21hdGNoIFAgMCAxICctaScgICfDhlFbw5BdJworbnVsX21hdGNoIFAgMCAxICctaScgICdbw4ZdUcOQJworbnVsX21hdGNoIFAgMCAxICctaScgJ1vDhl1Rw7AnCitudWxfbWF0Y2ggUCAwIDEgJy1pJyAnw4ZRw5AnCisKKyMgXDAgaW4gcmVnZXhlcyBjYW4gb25seSB3b3JrIHdpdGggLVAgJiBQQ1JFIHYyCitudWxfbWF0Y2ggUCBQIDEgJycgJ3lRW2ZdJworbnVsX21hdGNoIFAgUCAxICcnICdbeV1RZicKK251bF9tYXRjaCBQIFAgMSAnLWknICdZUVtGXScKK251bF9tYXRjaCBQIFAgMSAnLWknICdbWV1RZicKK251bF9tYXRjaCBQIFAgMSAnJyAnw6ZRW8OwXScKK251bF9tYXRjaCBQIFAgMSAnJyAnW8OmXVHDsCcKK251bF9tYXRjaCBQIFAgMSAnLWknICfDhlFbw5BdJworbnVsX21hdGNoIFAgUCAxICcnICdlUW0uKmNRJworbnVsX21hdGNoIFAgUCAxICctaScgJ0VRTS4qY1EnCitudWxfbWF0Y2ggUCBQIDAgJycgJ2VRbVsqXWMnCitudWxfbWF0Y2ggUCBQIDAgJy1pJyAnRVFNWypdQycKKworIyBBc3NlcnQgdGhhdCB3ZSdyZSB1c2luZyBSRUdfU1RBUlRFTkQgYW5kIHRoZSBwYXR0ZXJuIGRvZXNuJ3QgbWF0Y2gKKyMganVzdCBiZWNhdXNlIGl0J3MgY3V0IG9mZiBhdCB0aGUgZmlyc3QgXDAuCitudWxfbWF0Y2ggUCBQIDAgJy1pJyAnTk9NQVRDSFHDsCcKK251bF9tYXRjaCBQIFAgMCAnLWknICdbw4ZdUU5PTUFUQ0gnCitudWxfbWF0Y2ggUCBQIDAgJy1pJyAnW8OmXVFOT01BVENIJworCisjIEVuc3VyZSB0aGF0IHRoZSBtYXRjaGVyIGRvZXNuJ3QgcmVncmVzcyB0byBzb21ldGhpbmcgdGhhdCBzdG9wcyBhdAorIyBcMAorbnVsX21hdGNoIFAgUCBQICctRicgJ3lRW2ZdJworbnVsX21hdGNoIFAgUCBQICctRmknICdZUVtGXScKK251bF9tYXRjaCBQIFAgMCAnJyAneVFOT01BVENIJworbnVsX21hdGNoIFAgUCAwICcnICdRTk9NQVRDSCcKK251bF9tYXRjaCBQIFAgMCAnLWknICdZUU5PTUFUQ0gnCitudWxfbWF0Y2ggUCBQIDAgJy1pJyAnUU5PTUFUQ0gnCitudWxfbWF0Y2ggUCBQIFAgJy1GJyAnw6ZRW8OwXScKK251bF9tYXRjaCBQIFAgUCAnLUZpJyAnw4ZRW8OQXScKK251bF9tYXRjaCBQIFAgMSAnLWknICfDhlFbw5BdJworbnVsX21hdGNoIFAgUCAwICcnICd5UU7Dk01BVENIJworbnVsX21hdGNoIFAgUCAwICcnICdRTsOTTUFUQ0gnCitudWxfbWF0Y2ggUCBQIDAgJy1pJyAnWVFOw5NNQVRDSCcKK251bF9tYXRjaCBQIFAgMCAnLWknICdRTsOTTUFUQ0gnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ODAwMS1hbm5vdGF0ZS5zaCBiL3QvdDgwMDEtYW5ub3RhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzIxNzZlNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDgwMDEtYW5ub3RhdGUuc2gKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhbm5vdGF0ZScKKy4gLi90ZXN0LWxpYi5zaAorCitQUk9HPSdnaXQgYW5ub3RhdGUnCisuICIkVEVTVF9ESVJFQ1RPUlkiL2Fubm90YXRlLXRlc3RzLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fubm90YXRlIG9sZCByZXZpc2lvbicgJworCWdpdCBhbm5vdGF0ZSBmaWxlIG1hc3RlciA+YWN0dWFsICYmCisJYXdrICJ7IHByaW50IFwkMzsgfSIgPGFjdHVhbCA+YXV0aG9ycyAmJgorCXRlc3QgMiA9ICQoZ3JlcCBBIDxhdXRob3JzIHwgd2MgLWwpICYmCisJdGVzdCAyID0gJChncmVwIEIgPGF1dGhvcnMgfCB3YyAtbCkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q4MDAyLWJsYW1lLnNoIGIvdC90ODAwMi1ibGFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZWEwNDhlCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwMi1ibGFtZS5zaApAQCAtMCwwICsxLDEyNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBibGFtZScKKy4gLi90ZXN0LWxpYi5zaAorCitQUk9HPSdnaXQgYmxhbWUgLWMnCisuICIkVEVTVF9ESVJFQ1RPUlkiL2Fubm90YXRlLXRlc3RzLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIHVudHJhY2tlZCBmaWxlIGluIGVtcHR5IHJlcG8nICcKKwk+dW50cmFja2VkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJsYW1lIHVudHJhY2tlZAorJworCitQUk9HPSdnaXQgYmxhbWUgLWMgLWUnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtLXNob3ctZW1haWwnICcKKwljaGVja19jb3VudCBcCisJCSI8QUB0ZXN0LmdpdD4iIDEgXAorCQkiPEJAdGVzdC5naXQ+IiAxIFwKKwkJIjxCMUB0ZXN0LmdpdD4iIDEgXAorCQkiPEIyQHRlc3QuZ2l0PiIgMSBcCisJCSI8YXV0aG9yQGV4YW1wbGUuY29tPiIgMSBcCisJCSI8Q0B0ZXN0LmdpdD4iIDEgXAorCQkiPERAdGVzdC5naXQ+IiAxIFwKKwkJIjxFIGF0IHRlc3QgZG90IGdpdD4iIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2hvd0VtYWlsIHRlc3RzJyAnCisJZWNobyAiYmluOiB0ZXN0IG51bWJlciAxIiA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlHSVRfQVVUSE9SX05BTUU9bmFtZTEgXAorCUdJVF9BVVRIT1JfRU1BSUw9ZW1haWwxQHRlc3QuZ2l0IFwKKwlnaXQgY29tbWl0IC1tIEZpcnN0IC0tZGF0ZT0iMjAxMC0wMS0wMSAwMTowMDowMCIgJiYKKwljYXQgPmV4cGVjdGVkX24gPDwtXEVPRiAmJgorCShuYW1lMSAyMDEwLTAxLTAxIDAxOjAwOjAwICswMDAwIDEpIGJpbjogdGVzdCBudW1iZXIgMQorCUVPRgorCWNhdCA+ZXhwZWN0ZWRfZSA8PC1cRU9GCisJKDxlbWFpbDFAdGVzdC5naXQ+IDIwMTAtMDEtMDEgMDE6MDA6MDAgKzAwMDAgMSkgYmluOiB0ZXN0IG51bWJlciAxCisJRU9GCisnCisKK2ZpbmRfYmxhbWUgKCkgeworCXNlZCAtZSAncy9eW14oXSovLycKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgd2l0aCBubyBvcHRpb25zIGFuZCBubyBjb25maWcnICcKKwlnaXQgYmxhbWUgb25lID5ibGFtZSAmJgorCWZpbmRfYmxhbWUgPGJsYW1lID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9uIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSB3aXRoIHNob3dlbWFpbCBvcHRpb25zJyAnCisJZ2l0IGJsYW1lIC0tc2hvdy1lbWFpbCBvbmUgPmJsYW1lMSAmJgorCWZpbmRfYmxhbWUgPGJsYW1lMSA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfZSByZXN1bHQgJiYKKwlnaXQgYmxhbWUgLWUgb25lID5ibGFtZTIgJiYKKwlmaW5kX2JsYW1lIDxibGFtZTIgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX2UgcmVzdWx0ICYmCisJZ2l0IGJsYW1lIC0tbm8tc2hvdy1lbWFpbCBvbmUgPmJsYW1lMyAmJgorCWZpbmRfYmxhbWUgPGJsYW1lMyA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfbiByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgd2l0aCBzaG93RW1haWwgY29uZmlnIGZhbHNlJyAnCisJZ2l0IGNvbmZpZyBibGFtZS5zaG93RW1haWwgZmFsc2UgJiYKKwlnaXQgYmxhbWUgb25lID5ibGFtZTEgJiYKKwlmaW5kX2JsYW1lIDxibGFtZTEgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX24gcmVzdWx0ICYmCisJZ2l0IGJsYW1lIC0tc2hvdy1lbWFpbCBvbmUgPmJsYW1lMiAmJgorCWZpbmRfYmxhbWUgPGJsYW1lMiA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfZSByZXN1bHQgJiYKKwlnaXQgYmxhbWUgLWUgb25lID5ibGFtZTMgJiYKKwlmaW5kX2JsYW1lIDxibGFtZTMgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX2UgcmVzdWx0ICYmCisJZ2l0IGJsYW1lIC0tbm8tc2hvdy1lbWFpbCBvbmUgPmJsYW1lNCAmJgorCWZpbmRfYmxhbWUgPGJsYW1lNCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfbiByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgd2l0aCBzaG93RW1haWwgY29uZmlnIHRydWUnICcKKwlnaXQgY29uZmlnIGJsYW1lLnNob3dFbWFpbCB0cnVlICYmCisJZ2l0IGJsYW1lIG9uZSA+YmxhbWUxICYmCisJZmluZF9ibGFtZSA8YmxhbWUxID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9lIHJlc3VsdCAmJgorCWdpdCBibGFtZSAtLW5vLXNob3ctZW1haWwgb25lID5ibGFtZTIgJiYKKwlmaW5kX2JsYW1lIDxibGFtZTIgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX24gcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBhYmJyZXYgdGVzdHMnICcKKwl0ZXN0X2NvbW1pdCBhYmJyZXYgJiYKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWNoZWNrX2FiYnJldiAoKSB7CisJCWV4cGVjdD0kMTsgc2hpZnQKKwkJZWNobyAkc2hhMSB8IGN1dCAtYyAxLSRleHBlY3QgPmV4cGVjdCAmJgorCQlnaXQgYmxhbWUgIiRAIiBhYmJyZXYudCA+YWN0dWFsICYmCisJCXBlcmwgLWxuZSAiL1swLTlhLWZdKy8gYW5kIHByaW50IFwkJiIgPGFjdHVhbCA+YWN0dWFsLnNoYSAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLnNoYQorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLS1hYmJyZXY9PG4+IHdvcmtzJyAnCisJIyBub24tYm91bmRhcnkgY29tbWl0cyBnZXQgKzEgZm9yIGFsaWdubWVudAorCWNoZWNrX2FiYnJldiAzMSAtLWFiYnJldj0zMCBIRUFEICYmCisJY2hlY2tfYWJicmV2IDMwIC0tYWJicmV2PTMwIF5IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1sIGFsaWducyByZWd1bGFyIGFuZCBib3VuZGFyeSBjb21taXRzJyAnCisJY2hlY2tfYWJicmV2IDQwIC1sIEhFQUQgJiYKKwljaGVja19hYmJyZXYgMzkgLWwgXkhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLS1hYmJyZXY9NDAgYmVoYXZlcyBsaWtlIC1sJyAnCisJY2hlY2tfYWJicmV2IDQwIC0tYWJicmV2PTQwIEhFQUQgJiYKKwljaGVja19hYmJyZXYgMzkgLS1hYmJyZXY9NDAgXkhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1hYmJyZXYgd29ya3MgbGlrZSAtLWFiYnJldj00MCcgJworCWNoZWNrX2FiYnJldiA0MCAtLW5vLWFiYnJldgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBkb2VzIG5vdCBCVUctY3Jhc2gnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmxhbWUgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgb25lCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ODAwMy1ibGFtZS1jb3JuZXItY2FzZXMuc2ggYi90L3Q4MDAzLWJsYW1lLWNvcm5lci1jYXNlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MTMwYjg4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwMy1ibGFtZS1jb3JuZXItY2FzZXMuc2gKQEAgLTAsMCArMSwzMTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYmxhbWUgY29ybmVyIGNhc2VzJworLiAuL3Rlc3QtbGliLnNoCisKK3BpY2tfZmM9J3MvXlswLTlhLWZeXSogKlwoW14gXSpcKSAqKFwoW14gXSpcKSAuKi9cMS1cMi8nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZWNobyBBIEEgQSBBIEEgPm9uZSAmJgorCWVjaG8gQiBCIEIgQiBCID50d28gJiYKKwllY2hvIEMgQyBDIEMgQyA+dHJlcyAmJgorCWVjaG8gQUJDID5tb3VzZSAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPm5pbmVfbGluZXMgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOSBhCisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnRlbl9saW5lcyAmJgorCWdpdCBhZGQgb25lIHR3byB0cmVzIG1vdXNlIG5pbmVfbGluZXMgdGVuX2xpbmVzICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPUluaXRpYWwgZ2l0IGNvbW1pdCAtbSBJbml0aWFsICYmCisKKwljYXQgb25lID51bm8gJiYKKwltdiB0d28gZG9zICYmCisJY2F0IG9uZSA+PnRyZXMgJiYKKwllY2hvIERFRiA+Pm1vdXNlICYmCisJZ2l0IGFkZCB1bm8gZG9zIHRyZXMgbW91c2UgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9U2Vjb25kIGdpdCBjb21taXQgLWEgLW0gU2Vjb25kICYmCisKKwllY2hvIEdISUpLID4+bW91c2UgJiYKKwlnaXQgYWRkIG1vdXNlICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPVRoaXJkIGdpdCBjb21taXQgLW0gVGhpcmQgJiYKKworCWNhdCBtb3VzZSA+Y293ICYmCisJZ2l0IGFkZCBjb3cgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9Rm91cnRoIGdpdCBjb21taXQgLW0gRm91cnRoICYmCisKKwljYXQgPmNvdyA8PC1cRU9GICYmCisJQUJDCisJREVGCisJWFhYWAorCUdISUpLCisJRU9GCisJZ2l0IGFkZCBjb3cgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9RmlmdGggZ2l0IGNvbW1pdCAtbSBGaWZ0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJhaWdodCBjb3B5IHdpdGhvdXQgLUMnICcKKworCWdpdCBibGFtZSB1bm8gfCBncmVwIFNlY29uZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmFpZ2h0IG1vdmUgd2l0aG91dCAtQycgJworCisJZ2l0IGJsYW1lIGRvcyB8IGdyZXAgSW5pdGlhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmFpZ2h0IGNvcHkgd2l0aCAtQycgJworCisJZ2l0IGJsYW1lIC1DMSB1bm8gfCBncmVwIFNlY29uZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmFpZ2h0IG1vdmUgd2l0aCAtQycgJworCisJZ2l0IGJsYW1lIC1DMSBkb3MgfCBncmVwIEluaXRpYWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJhaWdodCBjb3B5IHdpdGggLUMgLUMnICcKKworCWdpdCBibGFtZSAtQyAtQzEgdW5vIHwgZ3JlcCBJbml0aWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyYWlnaHQgbW92ZSB3aXRoIC1DIC1DJyAnCisKKwlnaXQgYmxhbWUgLUMgLUMxIGRvcyB8IGdyZXAgSW5pdGlhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGVuZCB3aXRob3V0IC1DJyAnCisKKwlnaXQgYmxhbWUgLUwyIHRyZXMgfCBncmVwIFNlY29uZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGVuZCB3aXRoIC1DJyAnCisKKwlnaXQgYmxhbWUgLUwyIC1DMSB0cmVzIHwgZ3JlcCBTZWNvbmQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBlbmQgd2l0aCAtQyAtQycgJworCisJZ2l0IGJsYW1lIC1MMiAtQyAtQzEgdHJlcyB8IGdyZXAgU2Vjb25kCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwZW5kIHdpdGggLUMgLUMgLUMnICcKKworCWdpdCBibGFtZSAtTDIgLUMgLUMgLUMxIHRyZXMgfCBncmVwIEluaXRpYWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSB3aG9sZXNhbGUgY29weScgJworCisJZ2l0IGJsYW1lIC1mIC1DIC1DMSBIRUFEXiAtLSBjb3cgfCBzZWQgLWUgIiRwaWNrX2ZjIiA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCW1vdXNlLUluaXRpYWwKKwltb3VzZS1TZWNvbmQKKwltb3VzZS1UaGlyZAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSB3aG9sZXNhbGUgY29weSBhbmQgbW9yZScgJworCisJZ2l0IGJsYW1lIC1mIC1DIC1DMSBIRUFEIC0tIGNvdyB8IHNlZCAtZSAiJHBpY2tfZmMiID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJbW91c2UtSW5pdGlhbAorCW1vdXNlLVNlY29uZAorCWNvdy1GaWZ0aAorCW1vdXNlLVRoaXJkCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIHdob2xlc2FsZSBjb3B5IGFuZCBtb3JlIGluIHRoZSBpbmRleCcgJworCisJY2F0ID5ob3JzZSA8PC1cRU9GICYmCisJQUJDCisJREVGCisJWFhYWAorCVlZWVkKKwlHSElKSworCUVPRgorCWdpdCBhZGQgaG9yc2UgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBybSAtZiBob3JzZSIgJiYKKwlnaXQgYmxhbWUgLWYgLUMgLUMxIC0tIGhvcnNlIHwgc2VkIC1lICIkcGlja19mYyIgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwltb3VzZS1Jbml0aWFsCisJbW91c2UtU2Vjb25kCisJY293LUZpZnRoCisJaG9yc2UtTm90CisJbW91c2UtVGhpcmQKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgZHVyaW5nIGNoZXJyeS1waWNrIHdpdGggZmlsZSByZW5hbWUgY29uZmxpY3QnICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCBIRUFEfjMgJiYKKwllY2hvIE1PVVNFID4+IG1vdXNlICYmCisJZ2l0IG12IG1vdXNlIHJvZGVudCAmJgorCWdpdCBhZGQgcm9kZW50ICYmCisJR0lUX0FVVEhPUl9OQU1FPVJvZGVudCBnaXQgY29tbWl0IC1tICJyb2RlbnQiICYmCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIG1hc3RlciAmJgorCShnaXQgY2hlcnJ5LXBpY2sgSEVBREB7MX0gfHwgdGVzdCAkPyAtZXEgMSkgJiYKKwlnaXQgc2hvdyBIRUFEQHsxfTpyb2RlbnQgPiByb2RlbnQgJiYKKwlnaXQgYWRkIHJvZGVudCAmJgorCWdpdCBibGFtZSAtZiAtQyAtQzEgcm9kZW50IHwgc2VkIC1lICIkcGlja19mYyIgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwltb3VzZS1Jbml0aWFsCisJbW91c2UtU2Vjb25kCisJcm9kZW50LU5vdAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgcGF0aCB0aGF0IHVzZWQgdG8gYmUgYSBkaXJlY3RvcnknICcKKwlta2RpciBwYXRoICYmCisJZWNobyBBIEEgQSBBIEEgPnBhdGgvZmlsZSAmJgorCWVjaG8gQiBCIEIgQiBCID5wYXRoL2VsaWYgJiYKKwlnaXQgYWRkIHBhdGggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJwYXRoIHdhcyBhIGRpcmVjdG9yeSIgJiYKKwlybSAtZnIgcGF0aCAmJgorCWVjaG8gQSBBIEEgQSBBID5wYXRoICYmCisJZ2l0IGFkZCBwYXRoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSIgJiYKKwlnaXQgYmxhbWUgSEVBRF4uLiAtLSBwYXRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIHRvIGEgY29tbWl0IHdpdGggbm8gYXV0aG9yIG5hbWUnICcKKyAgVFJFRT0kKGdpdCByZXYtcGFyc2UgSEVBRDopICYmCisgIGNhdCA+YmFkY29tbWl0IDw8RU9GICYmCit0cmVlICRUUkVFCithdXRob3IgPG5vbmFtZT4gMTIzNDU2Nzg5MCArMDAwMAorY29tbWl0dGVyIERhdmlkIFJlaXNzIDxkcmVpc3NAZmFjZWJvb2suY29tPiAxMjM0NTY3ODkwICswMDAwCisKK3NvbWUgbWVzc2FnZQorRU9GCisgIENPTU1JVD0kKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgYmFkY29tbWl0KSAmJgorICBnaXQgLS1uby1wYWdlciBibGFtZSAkQ09NTUlUIC0tIHVubyA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIHdpdGggaW52YWxpZCBzdGFydCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBibGFtZSAtTDUgdHJlcyAyPmVycm9ycyAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBvbmx5IDIgbGluZXMiIGVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCB3aXRoIGludmFsaWQgZW5kJyAnCisJZ2l0IGJsYW1lIC1MMSw1IHRyZXMgPm91dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIHBhcnNlcyA8ZW5kPiBwYXJ0IG9mIC1MJyAnCisJZ2l0IGJsYW1lIC1MMSwxIHRyZXMgPm91dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MbiwtKG4rMSknICcKKwlnaXQgYmxhbWUgLUwzLC00IG5pbmVfbGluZXMgPm91dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGVudCBvZiBsaW5lIG51bWJlcnMsIG5pbmUgbGluZXMnICcKKwlnaXQgYmxhbWUgbmluZV9saW5lcyA+YWN0dWFsICYmCisJdGVzdCAkKGdyZXAgLWMgIiAgIiBhY3R1YWwpID0gMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRlbnQgb2YgbGluZSBudW1iZXJzLCB0ZW4gbGluZXMnICcKKwlnaXQgYmxhbWUgdGVuX2xpbmVzID5hY3R1YWwgJiYKKwl0ZXN0ICQoZ3JlcCAtYyAiICAiIGFjdHVhbCkgPSA5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZpbGUgd2l0aCBDUkxGIG5ld2xpbmVzJyAnCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGZhbHNlICYmCisJcHJpbnRmICJ0ZXN0Y2FzZVxuIiA+Y3JsZmZpbGUgJiYKKwlnaXQgYWRkIGNybGZmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSB0ZXN0Y2FzZSAmJgorCXByaW50ZiAidGVzdGNhc2VcclxuIiA+Y3JsZmZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgZmlsZSB3aXRoIENSTEYgY29yZS5hdXRvY3JsZiB0cnVlJyAnCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgYmxhbWUgY3JsZmZpbGUgPmFjdHVhbCAmJgorCWdyZXAgIkEgVSBUaG9yIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgZmlsZSB3aXRoIENSTEYgYXR0cmlidXRlcyB0ZXh0JyAnCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGZhbHNlICYmCisJZWNobyAiY3JsZmZpbGUgdGV4dCIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGJsYW1lIGNybGZmaWxlID5hY3R1YWwgJiYKKwlncmVwICJBIFUgVGhvciIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGZpbGUgd2l0aCBDUkxGIGNvcmUuYXV0b2NybGY9dHJ1ZScgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCXByaW50ZiAidGVzdGNhc2VcclxuIiA+Y3JsZmlucmVwbyAmJgorCT4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBhZGQgY3JsZmlucmVwbyAmJgorCWdpdCBjb21taXQgLW0gImFkZCBjcmxmaW5yZXBvIiAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJbXYgY3JsZmlucmVwbyB0bXAgJiYKKwlnaXQgY2hlY2tvdXQgY3JsZmlucmVwbyAmJgorCXJtIHRtcCAmJgorCWdpdCBibGFtZSBjcmxmaW5yZXBvID5hY3R1YWwgJiYKKwlncmVwICJBIFUgVGhvciIgYWN0dWFsCisnCisKKyMgVGVzdHMgdGhlIHNwbGl0dGluZyBhbmQgbWVyZ2luZyBvZiBibGFtZSBlbnRyaWVzIGluIGJsYW1lX2NvYWxlc2NlKCkuCisjIFRoZSBvdXRwdXQgb2YgYmxhbWUgaXMgdGhlIHNhbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBibGFtZV9jb2FsZXNjZSgpIHJ1bnMKKyMgb3Igbm90LCBzbyB3ZSdkIGxpa2VseSBvbmx5IG5vdGljZSBhIHByb2JsZW0gaWYgYmxhbWUgY3Jhc2hlcyBvciBhc3NpZ25lZAorIyBibGFtZSB0byB0aGUgInNwbGl0dGluZyIgY29tbWl0ICgnU1BMSVQnIGJlbG93KS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGNvYWxlc2NlJyAnCisJY2F0ID5naXJhZmZlIDw8LVxFT0YgJiYKKwlBQkMKKwlERUYKKwlFT0YKKwlnaXQgYWRkIGdpcmFmZmUgJiYKKwlnaXQgY29tbWl0IC1tICJvcmlnaW5hbCBmaWxlIiAmJgorCW9pZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCWNhdCA+Z2lyYWZmZSA8PC1cRU9GICYmCisJQUJDCisJU1BMSVQKKwlERUYKKwlFT0YKKwlnaXQgYWRkIGdpcmFmZmUgJiYKKwlnaXQgY29tbWl0IC1tICJpbnRlcmlvciBTUExJVCBsaW5lIiAmJgorCisJY2F0ID5naXJhZmZlIDw8LVxFT0YgJiYKKwlBQkMKKwlERUYKKwlFT0YKKwlnaXQgYWRkIGdpcmFmZmUgJiYKKwlnaXQgY29tbWl0IC1tICJzYW1lIGNvbnRlbnRzIGFzIG9yaWdpbmFsIiAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJG9pZCAxKSBBQkMKKwkkb2lkIDIpIERFRgorCUVPRgorCWdpdCAtYyBjb3JlLmFiYnJldj00MCBibGFtZSAtcyBnaXJhZmZlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ODAwNC1ibGFtZS13aXRoLWNvbmZsaWN0cy5zaCBiL3QvdDgwMDQtYmxhbWUtd2l0aC1jb25mbGljdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWMzNTNhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDgwMDQtYmxhbWUtd2l0aC1jb25mbGljdHMuc2gKQEAgLTAsMCArMSw3MyBAQAorIyEvYmluL3NoCisKKyMgQmFzZWQgb24gYSB0ZXN0IGNhc2Ugc3VibWl0dGVkIGJ5IEJqw7ZybiBTdGVpbmJyaW5rLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYmxhbWUgb24gY29uZmxpY3RlZCBmaWxlcycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmaXJzdCBjYXNlJyAnCisJIyBDcmVhdGUgdGhlIG9sZCBmaWxlCisJZWNobyAiT2xkIGxpbmUiID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAiT2xkIExpbmUgPG9sQGxvY2FsaG9zdD4iIC1tIGZpbGUxLmEgJiYKKworCSMgQnJhbmNoCisJZ2l0IGNoZWNrb3V0IC1iIGZvbyAmJgorCisJIyBEbyBhbiB1Z2x5IG1vdmUgYW5kIGNoYW5nZQorCWdpdCBybSBmaWxlMSAmJgorCWVjaG8gIk5ldyBsaW5lIC4uLiIgID4gZmlsZTIgJiYKKwllY2hvICIuLi4gYW5kIG1vcmUiID4+IGZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIlUgR2x5IDx1Z0Bsb2NhbGhvc3Q+IiAtbSB1Z2x5ICYmCisKKwkjIEJhY2sgdG8gbWFzdGVyIGFuZCBjaGFuZ2Ugc29tZXRoaW5nCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gIgorCitibGEiID4+IGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAiT2xkIExpbmUgPG9sQGxvY2FsaG9zdD4iIC1hIC1tIGZpbGUxLmIgJiYKKworCSMgQmFjayB0byBmb28gYW5kIG1lcmdlIG1hc3RlcgorCWdpdCBjaGVja291dCBmb28gJiYKKwlpZiBnaXQgbWVyZ2UgbWFzdGVyOyB0aGVuCisJCWVjaG8gbmVlZGVkIGNvbmZsaWN0IGhlcmUKKwkJZXhpdCAxCisJZWxzZQorCQllY2hvIG1lcmdlIGZhaWxlZCAtIHJlc29sdmluZyBhdXRvbWF0aWNhbGx5CisJZmkgJiYKKwllY2hvICJOZXcgbGluZSAuLi4KKy4uLiBhbmQgbW9yZQorCitibGEKK0V2ZW4gbW9yZSIgPiBmaWxlMiAmJgorCWdpdCBybSBmaWxlMSAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIk0gUmVzdWx0IDxtckBsb2NhbGhvc3Q+IiAtYSAtbSBtZXJnZWQgJiYKKworCSMgQmFjayB0byBtYXN0ZXIgYW5kIGNoYW5nZSBmaWxlMSBhZ2FpbgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlzZWQgcy9ibGEvZm9vLyA8ZmlsZTEgPlggJiYKKwlybSBmaWxlMSAmJgorCW12IFggZmlsZTEgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICJObyBCbGEgPG5iQGxvY2FsaG9zdD4iIC1hIC1tIHJlcGxhY2UgJiYKKworCSMgVHJ5IHRvIG1lcmdlIGludG8gZm9vIGFnYWluCisJZ2l0IGNoZWNrb3V0IGZvbyAmJgorCWlmIGdpdCBtZXJnZSBtYXN0ZXI7IHRoZW4KKwkJZWNobyBuZWVkZWQgY29uZmxpY3QgaGVyZQorCQlleGl0IDEKKwllbHNlCisJCWVjaG8gbWVyZ2UgZmFpbGVkIC0gdGVzdCBpcyBzZXR1cAorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdibGFtZSBydW5zIG9uIHVuY29uZmxpY3RlZCBmaWxlIHdoaWxlIG90aGVyIGZpbGUgaGFzIGNvbmZsaWN0cycgJworCWdpdCBibGFtZSBmaWxlMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBkb2VzIG5vdCBjcmFzaCB3aXRoIGNvbmZsaWN0ZWQgZmlsZSBpbiBzdGFnZXMgMSwzJyAnCisJZ2l0IGJsYW1lIGZpbGUxCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ODAwNS1ibGFtZS1pMThuLnNoIGIvdC90ODAwNS1ibGFtZS1pMThuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc1ZGEyMTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q4MDA1LWJsYW1lLWkxOG4uc2gKQEAgLTAsMCArMSw5NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBibGFtZSBlbmNvZGluZyBjb252ZXJzaW9uJworLiAuL3Rlc3QtbGliLnNoCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvdDgwMDUvdXRmOC50eHQKKy4gIiRURVNUX0RJUkVDVE9SWSIvdDgwMDUvZXVjLWphcGFuLnR4dAorLiAiJFRFU1RfRElSRUNUT1JZIi90ODAwNS9zamlzLnR4dAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0aGUgcmVwb3NpdG9yeScgJworCSMgQ3JlYXRlIHRoZSBmaWxlCisJZWNobyAiVVRGLTggTElORSIgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAiJFVURjhfTkFNRSA8dXRmOEBsb2NhbGhvc3Q+IiAtbSAiJFVURjhfTVNHIiAmJgorCisJZWNobyAiRVVDLUpBUEFOIExJTkUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgZXVjSlAgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICIkRVVDX0pBUEFOX05BTUUgPGV1Yy1qYXBhbkBsb2NhbGhvc3Q+IiAtbSAiJEVVQ19KQVBBTl9NU0ciICYmCisKKwllY2hvICJTSklTIExJTkUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgU0pJUyAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIiRTSklTX05BTUUgPHNqaXNAbG9jYWxob3N0PiIgLW0gIiRTSklTX01TRyIKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorYXV0aG9yICRTSklTX05BTUUKK3N1bW1hcnkgJFNKSVNfTVNHCithdXRob3IgJFNKSVNfTkFNRQorc3VtbWFyeSAkU0pJU19NU0cKK2F1dGhvciAkU0pJU19OQU1FCitzdW1tYXJ5ICRTSklTX01TRworRU9GCisKK2ZpbHRlcl9hdXRob3Jfc3VtbWFyeSAoKSB7CisJc2VkIC1uIC1lICcvXmF1dGhvciAvcCcgLWUgJy9ec3VtbWFyeSAvcCcgIiRAIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyBcCisJJ2JsYW1lIHJlc3BlY3RzIGkxOG4uY29tbWl0ZW5jb2RpbmcnICcKKwlnaXQgYmxhbWUgLS1pbmNyZW1lbnRhbCBmaWxlID5vdXRwdXQgJiYKKwlmaWx0ZXJfYXV0aG9yX3N1bW1hcnkgb3V0cHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorYXV0aG9yICRFVUNfSkFQQU5fTkFNRQorc3VtbWFyeSAkRVVDX0pBUEFOX01TRworYXV0aG9yICRFVUNfSkFQQU5fTkFNRQorc3VtbWFyeSAkRVVDX0pBUEFOX01TRworYXV0aG9yICRFVUNfSkFQQU5fTkFNRQorc3VtbWFyeSAkRVVDX0pBUEFOX01TRworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXIFwKKwknYmxhbWUgcmVzcGVjdHMgaTE4bi5sb2dvdXRwdXRlbmNvZGluZycgJworCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBldWNKUCAmJgorCWdpdCBibGFtZSAtLWluY3JlbWVudGFsIGZpbGUgPm91dHB1dCAmJgorCWZpbHRlcl9hdXRob3Jfc3VtbWFyeSBvdXRwdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCithdXRob3IgJFVURjhfTkFNRQorc3VtbWFyeSAkVVRGOF9NU0cKK2F1dGhvciAkVVRGOF9OQU1FCitzdW1tYXJ5ICRVVEY4X01TRworYXV0aG9yICRVVEY4X05BTUUKK3N1bW1hcnkgJFVURjhfTVNHCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgXAorCSdibGFtZSByZXNwZWN0cyAtLWVuY29kaW5nPVVURi04JyAnCisJZ2l0IGJsYW1lIC0taW5jcmVtZW50YWwgLS1lbmNvZGluZz1VVEYtOCBmaWxlID5vdXRwdXQgJiYKKwlmaWx0ZXJfYXV0aG9yX3N1bW1hcnkgb3V0cHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorYXV0aG9yICRTSklTX05BTUUKK3N1bW1hcnkgJFNKSVNfTVNHCithdXRob3IgJEVVQ19KQVBBTl9OQU1FCitzdW1tYXJ5ICRFVUNfSkFQQU5fTVNHCithdXRob3IgJFVURjhfTkFNRQorc3VtbWFyeSAkVVRGOF9NU0cKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyBcCisJJ2JsYW1lIHJlc3BlY3RzIC0tZW5jb2Rpbmc9bm9uZScgJworCWdpdCBibGFtZSAtLWluY3JlbWVudGFsIC0tZW5jb2Rpbmc9bm9uZSBmaWxlID5vdXRwdXQgJiYKKwlmaWx0ZXJfYXV0aG9yX3N1bW1hcnkgb3V0cHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q4MDA1L2V1Yy1qYXBhbi50eHQgYi90L3Q4MDA1L2V1Yy1qYXBhbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg4ZjA0MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDgwMDUvZXVjLWphcGFuLnR4dApAQCAtMCwwICsxLDIgQEAKK0VVQ19KQVBBTl9OQU1FPSK7s8XEIMLAz7oiCitFVUNfSkFQQU5fTVNHPSKl1qXsobyl4KTOpcaluaXIpMekuaGjIgpkaWZmIC0tZ2l0IGEvdC90ODAwNS9zamlzLnR4dCBiL3QvdDgwMDUvc2ppcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkZWZlYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDgwMDUvc2ppcy50eHQKQEAgLTAsMCArMSwyIEBACitTSklTX05BTUU9Io5Sk2Mgkb6YWSIKK1NKSVNfTVNHPSKDdYOMgVuDgILMg2WDWINngsWCt4FCIgpkaWZmIC0tZ2l0IGEvdC90ODAwNS91dGY4LnR4dCBiL3QvdDgwMDUvdXRmOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwMGRiZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDgwMDUvdXRmOC50eHQKQEAgLTAsMCArMSwyIEBACitVVEY4X05BTUU9IuWxseeUsCDlpKrpg44iCitVVEY4X01TRz0i44OW44Os44O844Og44Gu44OG44K544OI44Gn44GZ44CCIgpkaWZmIC0tZ2l0IGEvdC90ODAwNi1ibGFtZS10ZXh0Y29udi5zaCBiL3QvdDgwMDYtYmxhbWUtdGV4dGNvbnYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzY4MzUxNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDgwMDYtYmxhbWUtdGV4dGNvbnYuc2gKQEAgLTAsMCArMSwxNTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYmxhbWUgdGV4dGNvbnYgc3VwcG9ydCcKKy4gLi90ZXN0LWxpYi5zaAorCitmaW5kX2JsYW1lKCkgeworCXNlZCAtZSAncy9eW14oXSovLycKK30KKworY2F0ID5oZWxwZXIgPDwnRU9GJworIyEvYmluL3NoCitncmVwIC1xICdeYmluOiAnICIkMSIgfHwgeyBlY2hvICJFOiAkMSBpcyBub3QgXCJiaW5hcnlcIiBmaWxlIiAxPiYyOyBleGl0IDE7IH0KKyIkUEVSTF9QQVRIIiAtcCAtZSAncy9eYmluOiAvY29udmVydGVkOiAvJyAiJDEiCitFT0YKK2NobW9kICt4IGhlbHBlcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAnICcKKwllY2hvICJiaW46IHRlc3QgbnVtYmVyIDAiID56ZXJvLmJpbiAmJgorCWVjaG8gImJpbjogdGVzdCAxIiA+b25lLmJpbiAmJgorCWVjaG8gImJpbjogdGVzdCBudW1iZXIgMiIgPnR3by5iaW4gJiYKKwl0ZXN0X2xuX3NfYWRkIG9uZS5iaW4gc3ltbGluay5iaW4gJiYKKwlnaXQgYWRkIC4gJiYKKwlHSVRfQVVUSE9SX05BTUU9TnVtYmVyMSBnaXQgY29tbWl0IC1hIC1tIEZpcnN0IC0tZGF0ZT0iMjAxMC0wMS0wMSAxODowMDowMCIgJiYKKwllY2hvICJiaW46IHRlc3QgMSB2ZXJzaW9uIDIiID5vbmUuYmluICYmCisJZWNobyAiYmluOiB0ZXN0IG51bWJlciAyIHZlcnNpb24gMiIgPj50d28uYmluICYmCisJcm0gLWYgc3ltbGluay5iaW4gJiYKKwl0ZXN0X2xuX3NfYWRkIHR3by5iaW4gc3ltbGluay5iaW4gJiYKKwlHSVRfQVVUSE9SX05BTUU9TnVtYmVyMiBnaXQgY29tbWl0IC1hIC1tIFNlY29uZCAtLWRhdGU9IjIwMTAtMDEtMDEgMjA6MDA6MDAiCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKyhOdW1iZXIyIDIwMTAtMDEtMDEgMjA6MDA6MDAgKzAwMDAgMSkgYmluOiB0ZXN0IDEgdmVyc2lvbiAyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZmlsdGVyIHNwZWNpZmllZCcgJworCWdpdCBibGFtZSBvbmUuYmluID5ibGFtZSAmJgorCWZpbmRfYmxhbWUgTnVtYmVyMiA8YmxhbWUgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXh0Y29udiBmaWx0ZXJzJyAnCisJZWNobyAiKi5iaW4gZGlmZj10ZXN0IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJ6ZXJvLmJpbiBlb2w9Y3JsZiIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgZGlmZi50ZXN0LnRleHRjb252IC4vaGVscGVyICYmCisJZ2l0IGNvbmZpZyBkaWZmLnRlc3QuY2FjaGV0ZXh0Y29udiBmYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSB3aXRoIC0tbm8tdGV4dGNvbnYnICcKKwlnaXQgYmxhbWUgLS1uby10ZXh0Y29udiBvbmUuYmluID5ibGFtZSAmJgorCWZpbmRfYmxhbWUgPGJsYW1lPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorKE51bWJlcjIgMjAxMC0wMS0wMSAyMDowMDowMCArMDAwMCAxKSBjb252ZXJ0ZWQ6IHRlc3QgMSB2ZXJzaW9uIDIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyBibGFtZSBvbiBsYXN0IGNvbW1pdCcgJworCWdpdCBibGFtZSBvbmUuYmluID5ibGFtZSAmJgorCWZpbmRfYmxhbWUgIDxibGFtZSA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKyhOdW1iZXIxIDIwMTAtMDEtMDEgMTg6MDA6MDAgKzAwMDAgMSkgY29udmVydGVkOiB0ZXN0IG51bWJlciAyCisoTnVtYmVyMiAyMDEwLTAxLTAxIDIwOjAwOjAwICswMDAwIDIpIGNvbnZlcnRlZDogdGVzdCBudW1iZXIgMiB2ZXJzaW9uIDIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtLXRleHRjb252IGdvaW5nIHRocm91Z2ggcmV2aXNpb25zJyAnCisJZ2l0IGJsYW1lIC0tdGV4dGNvbnYgdHdvLmJpbiA+YmxhbWUgJiYKKwlmaW5kX2JsYW1lIDxibGFtZSA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC0tdGV4dGNvbnYgd2l0aCBsb2NhbCBjaGFuZ2VzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgemVyby5iaW4iICYmCisJcHJpbnRmICJiaW46IHVwZGF0ZWQgbnVtYmVyIDBcMDE1IiA+emVyby5iaW4gJiYKKwlnaXQgYmxhbWUgLS10ZXh0Y29udiB6ZXJvLmJpbiA+YmxhbWUgJiYKKwlleHBlY3Q9IihOb3QgQ29tbWl0dGVkIFlldCAuLi4uLS4uLS4uIC4uOi4uOi4uICswMDAwIDEpIiAmJgorCWV4cGVjdD0iJGV4cGVjdCBjb252ZXJ0ZWQ6IHVwZGF0ZWQgbnVtYmVyIDAiICYmCisJZXhwciAiJChmaW5kX2JsYW1lIDxibGFtZSkiIDogIl4kZXhwZWN0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCArY2FjaGV0ZXh0Y29udicgJworCWdpdCBjb25maWcgZGlmZi50ZXN0LmNhY2hldGV4dGNvbnYgdHJ1ZQorJworCitjYXQgPmV4cGVjdGVkX29uZSA8PEVPRgorKE51bWJlcjIgMjAxMC0wMS0wMSAyMDowMDowMCArMDAwMCAxKSBjb252ZXJ0ZWQ6IHRlc3QgMSB2ZXJzaW9uIDIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtLXRleHRjb252IHdvcmtzIHdpdGggdGV4dGNvbnZjYWNoZScgJworCWdpdCBibGFtZSAtLXRleHRjb252IHR3by5iaW4gPmJsYW1lICYmCisJZmluZF9ibGFtZSA8YmxhbWUgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgorCWdpdCBibGFtZSAtLXRleHRjb252IG9uZS5iaW4gPmJsYW1lICYmCisJZmluZF9ibGFtZSAgPGJsYW1lID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9vbmUgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC1jYWNoZXRleHRjb252JyAnCisJZ2l0IGNvbmZpZyBkaWZmLnRlc3QuY2FjaGV0ZXh0Y29udiBmYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGEgbmV3IGNvbW1pdCcgJworCWVjaG8gImJpbjogdGVzdCBudW1iZXIgMiB2ZXJzaW9uIDMiID4+dHdvLmJpbiAmJgorCUdJVF9BVVRIT1JfTkFNRT1OdW1iZXIzIGdpdCBjb21taXQgLWEgLW0gVGhpcmQgLS1kYXRlPSIyMDEwLTAxLTAxIDIyOjAwOjAwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBmcm9tIHByZXZpb3VzIHJldmlzaW9uJyAnCisJZ2l0IGJsYW1lIEhFQUReIHR3by5iaW4gPmJsYW1lICYmCisJZmluZF9ibGFtZSA8YmxhbWUgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCisoTnVtYmVyMiAyMDEwLTAxLTAxIDIwOjAwOjAwICswMDAwIDEpIHR3by5iaW4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdibGFtZSB3aXRoIC0tbm8tdGV4dGNvbnYgKG9uIHN5bWxpbmspJyAnCisJZ2l0IGJsYW1lIC0tbm8tdGV4dGNvbnYgc3ltbGluay5iaW4gPmJsYW1lICYmCisJZmluZF9ibGFtZSA8YmxhbWUgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdibGFtZSAtLXRleHRjb252IChvbiBzeW1saW5rKScgJworCWdpdCBibGFtZSAtLXRleHRjb252IHN5bWxpbmsuYmluID5ibGFtZSAmJgorCWZpbmRfYmxhbWUgPGJsYW1lID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKworIyBjcCB0d28uYmluIHRocmVlLmJpbiAgYW5kIG1ha2Ugc21hbGwgdHdlYWsKKyMgKHRoaXMgd2lsbCBkaXJlY3QgYmxhbWUgLUMgLUMgdGhyZWUuYmluIHRvIGNvbnNpZGVyIHR3by5iaW4gYW5kIHN5bWxpbmsuYmluKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBhbm90aGVyIG5ldyBjb21taXQnICcKKwljYXQgPnRocmVlLmJpbiA8PFxFT0YgJiYKK2JpbjogdGVzdCBudW1iZXIgMgorYmluOiB0ZXN0IG51bWJlciAyIHZlcnNpb24gMgorYmluOiB0ZXN0IG51bWJlciAyIHZlcnNpb24gMworYmluOiB0ZXN0IG51bWJlciAzCitFT0YKKwlnaXQgYWRkIHRocmVlLmJpbiAmJgorCUdJVF9BVVRIT1JfTkFNRT1OdW1iZXI0IGdpdCBjb21taXQgLWEgLW0gRm91cnRoIC0tZGF0ZT0iMjAxMC0wMS0wMSAyMzowMDowMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgb24gbGFzdCBjb21taXQgKC1DIC1DLCBzeW1saW5rKScgJworCWdpdCBibGFtZSAtQyAtQyB0aHJlZS5iaW4gPmJsYW1lICYmCisJZmluZF9ibGFtZSA8YmxhbWUgPnJlc3VsdCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisoTnVtYmVyMSAyMDEwLTAxLTAxIDE4OjAwOjAwICswMDAwIDEpIGNvbnZlcnRlZDogdGVzdCBudW1iZXIgMgorKE51bWJlcjIgMjAxMC0wMS0wMSAyMDowMDowMCArMDAwMCAyKSBjb252ZXJ0ZWQ6IHRlc3QgbnVtYmVyIDIgdmVyc2lvbiAyCisoTnVtYmVyMyAyMDEwLTAxLTAxIDIyOjAwOjAwICswMDAwIDMpIGNvbnZlcnRlZDogdGVzdCBudW1iZXIgMiB2ZXJzaW9uIDMKKyhOdW1iZXI0IDIwMTAtMDEtMDEgMjM6MDA6MDAgKzAwMDAgNCkgY29udmVydGVkOiB0ZXN0IG51bWJlciAzCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q4MDA3LWNhdC1maWxlLXRleHRjb252LnNoIGIvdC90ODAwNy1jYXQtZmlsZS10ZXh0Y29udi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYWNkNDlhCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwNy1jYXQtZmlsZS10ZXh0Y29udi5zaApAQCAtMCwwICsxLDg2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNhdC1maWxlIHRleHRjb252IHN1cHBvcnQnCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5oZWxwZXIgPDwnRU9GJworIyEvYmluL3NoCitncmVwIC1xICdeYmluOiAnICIkMSIgfHwgeyBlY2hvICJFOiAkMSBpcyBub3QgXCJiaW5hcnlcIiBmaWxlIiAxPiYyOyBleGl0IDE7IH0KK3NlZCAncy9eYmluOiAvY29udmVydGVkOiAvJyAiJDEiCitFT0YKK2NobW9kICt4IGhlbHBlcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAnICcKKwllY2hvICJiaW46IHRlc3QiID5vbmUuYmluICYmCisJdGVzdF9sbl9zX2FkZCBvbmUuYmluIHN5bWxpbmsuYmluICYmCisJZ2l0IGFkZCAuICYmCisJR0lUX0FVVEhPUl9OQU1FPU51bWJlcjEgZ2l0IGNvbW1pdCAtYSAtbSBGaXJzdCAtLWRhdGU9IjIwMTAtMDEtMDEgMTg6MDA6MDAiICYmCisJZWNobyAiYmluOiB0ZXN0IHZlcnNpb24gMiIgPm9uZS5iaW4gJiYKKwlHSVRfQVVUSE9SX05BTUU9TnVtYmVyMiBnaXQgY29tbWl0IC1hIC1tIFNlY29uZCAtLWRhdGU9IjIwMTAtMDEtMDEgMjA6MDA6MDAiCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2JpbjogdGVzdCB2ZXJzaW9uIDIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBmaWx0ZXIgc3BlY2lmaWVkJyAnCisJZ2l0IGNhdC1maWxlIC0tdGV4dGNvbnYgOm9uZS5iaW4gPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXh0Y29udiBmaWx0ZXJzJyAnCisJZWNobyAiKi5iaW4gZGlmZj10ZXN0IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29uZmlnIGRpZmYudGVzdC50ZXh0Y29udiAuL2hlbHBlciAmJgorCWdpdCBjb25maWcgZGlmZi50ZXN0LmNhY2hldGV4dGNvbnYgZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgd2l0aG91dCAtLXRleHRjb252JyAnCisJZ2l0IGNhdC1maWxlIGJsb2IgOm9uZS5iaW4gPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitiaW46IHRlc3QKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZSB3aXRob3V0IC0tdGV4dGNvbnYgb24gcHJldmlvdXMgY29tbWl0JyAnCisJZ2l0IGNhdC1maWxlIC1wIEhFQUReOm9uZS5iaW4gPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitjb252ZXJ0ZWQ6IHRlc3QgdmVyc2lvbiAyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgLS10ZXh0Y29udiBvbiBsYXN0IGNvbW1pdCcgJworCWdpdCBjYXQtZmlsZSAtLXRleHRjb252IDpvbmUuYmluID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorY29udmVydGVkOiB0ZXN0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgLS10ZXh0Y29udiBvbiBwcmV2aW91cyBjb21taXQnICcKKwlnaXQgY2F0LWZpbGUgLS10ZXh0Y29udiBIRUFEXjpvbmUuYmluID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgd2l0aG91dCAtLXRleHRjb252IChzeW1saW5rKScgJworCXByaW50ZiAiJXMiICJvbmUuYmluIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiA6c3ltbGluay5iaW4gPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhdC1maWxlIC0tdGV4dGNvbnYgb24gaW5kZXggKHN5bWxpbmspJyAnCisJZ2l0IGNhdC1maWxlIC0tdGV4dGNvbnYgOnN5bWxpbmsuYmluID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgLS10ZXh0Y29udiBvbiBIRUFEIChzeW1saW5rKScgJworCWdpdCBjYXQtZmlsZSAtLXRleHRjb252IEhFQUQ6c3ltbGluay5iaW4gPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDgwMDgtYmxhbWUtZm9ybWF0cy5zaCBiL3QvdDgwMDgtYmxhbWUtZm9ybWF0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZTRiNTc5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwOC1ibGFtZS1mb3JtYXRzLnNoCkBAIC0wLDAgKzEsMTA5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmxhbWUgb3V0cHV0IGluIHZhcmlvdXMgZm9ybWF0cyBvbiBhIHNpbXBsZSBjYXNlJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBhID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwllY2hvIGIgPj5maWxlICYmCisJZWNobyBjID4+ZmlsZSAmJgorCWVjaG8gZCA+PmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCUlEMT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJc2hvcnRJRDE9Il4kKGdpdCByZXYtcGFyc2UgSEVBRF4gfGN1dCAtYyAxLTE3KSIgJiYKKwlJRDI9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJc2hvcnRJRDI9IiQoZ2l0IHJldi1wYXJzZSBIRUFEIHxjdXQgLWMgMS0xOCkiCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCiskc2hvcnRJRDEgKEEgVSBUaG9yIDIwMDUtMDQtMDcgMTU6MTM6MTMgLTA3MDAgMSkgYQorJHNob3J0SUQyIChBIFUgVGhvciAyMDA1LTA0LTA3IDE1OjE0OjEzIC0wNzAwIDIpIGIKKyRzaG9ydElEMiAoQSBVIFRob3IgMjAwNS0wNC0wNyAxNToxNDoxMyAtMDcwMCAzKSBjCiskc2hvcnRJRDIgKEEgVSBUaG9yIDIwMDUtMDQtMDcgMTU6MTQ6MTMgLTA3MDAgNCkgZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3JtYWwgYmxhbWUgb3V0cHV0JyAnCisJZ2l0IGJsYW1lIC0tYWJicmV2PTE3IGZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworQ09NTUlUMT0iYXV0aG9yIEEgVSBUaG9yCithdXRob3ItbWFpbCA8YXV0aG9yQGV4YW1wbGUuY29tPgorYXV0aG9yLXRpbWUgMTExMjkxMTk5MworYXV0aG9yLXR6IC0wNzAwCitjb21taXR0ZXIgQyBPIE1pdHRlcgorY29tbWl0dGVyLW1haWwgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK2NvbW1pdHRlci10aW1lIDExMTI5MTE5OTMKK2NvbW1pdHRlci10eiAtMDcwMAorc3VtbWFyeSBvbmUKK2JvdW5kYXJ5CitmaWxlbmFtZSBmaWxlIgorQ09NTUlUMj0iYXV0aG9yIEEgVSBUaG9yCithdXRob3ItbWFpbCA8YXV0aG9yQGV4YW1wbGUuY29tPgorYXV0aG9yLXRpbWUgMTExMjkxMjA1MworYXV0aG9yLXR6IC0wNzAwCitjb21taXR0ZXIgQyBPIE1pdHRlcgorY29tbWl0dGVyLW1haWwgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK2NvbW1pdHRlci10aW1lIDExMTI5MTIwNTMKK2NvbW1pdHRlci10eiAtMDcwMAorc3VtbWFyeSB0d28KK3ByZXZpb3VzICRJRDEgZmlsZQorZmlsZW5hbWUgZmlsZSIKKworY2F0ID5leHBlY3QgPDxFT0YKKyRJRDEgMSAxIDEKKyRDT01NSVQxCisJYQorJElEMiAyIDIgMworJENPTU1JVDIKKwliCiskSUQyIDMgMworCWMKKyRJRDIgNCA0CisJZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtLXBvcmNlbGFpbiBvdXRwdXQnICcKKwlnaXQgYmxhbWUgLS1wb3JjZWxhaW4gZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorJElEMSAxIDEgMQorJENPTU1JVDEKKwlhCiskSUQyIDIgMiAzCiskQ09NTUlUMgorCWIKKyRJRDIgMyAzCiskQ09NTUlUMgorCWMKKyRJRDIgNCA0CiskQ09NTUlUMgorCWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLS1saW5lLXBvcmNlbGFpbiBvdXRwdXQnICcKKwlnaXQgYmxhbWUgLS1saW5lLXBvcmNlbGFpbiBmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcG9yY2VsYWluIGRldGVjdHMgZmlyc3Qgbm9uLWJsYW5rIGxpbmUgYXMgc3ViamVjdCcgJworCSgKKwkJR0lUX0lOREVYX0ZJTEU9LmdpdC90bXAtaW5kZXggJiYKKwkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJCWVjaG8gIlRoaXMgaXMgaXQiID5zaW5nbGUtZmlsZSAmJgorCQlnaXQgYWRkIHNpbmdsZS1maWxlICYmCisJCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJY29tbWl0PSQocHJpbnRmICIlc1xuJXNcbiVzXG5cblxuICBcbm9uZWxpbmVcblxuYm9keVxuIiBcCisJCQkidHJlZSAkdHJlZSIgXAorCQkJImF1dGhvciBBIDxhQGIuYz4gMTIzNDU2Nzg5ICswMDAwIiBcCisJCQkiY29tbWl0dGVyIEMgPGNAZC5lPiAxMjM0NTY3ODkgKzAwMDAiIHwKKwkJZ2l0IGhhc2gtb2JqZWN0IC13IC10IGNvbW1pdCAtLXN0ZGluKSAmJgorCQlnaXQgYmxhbWUgLS1wb3JjZWxhaW4gJGNvbW1pdCAtLSBzaW5nbGUtZmlsZSA+b3V0cHV0ICYmCisJCWdyZXAgIl5zdW1tYXJ5IG9uZWxpbmUkIiBvdXRwdXQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ODAwOS1ibGFtZS12cy10b3BpY2JyYW5jaGVzLnNoIGIvdC90ODAwOS1ibGFtZS12cy10b3BpY2JyYW5jaGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcyNTk2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q4MDA5LWJsYW1lLXZzLXRvcGljYnJhbmNoZXMuc2gKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2JsYW1pbmcgdHJvdWdoIGhpc3Rvcnkgd2l0aCB0b3BpYyBicmFuY2hlcycKKy4gLi90ZXN0LWxpYi5zaAorCisjIENyZWF0ZXMgdGhlIGhpc3Rvcnkgc2hvd24gYmVsb3cuICcqJ3MgbWFyayB0aGUgZmlyc3QgcGFyZW50IGluIHRoZSBtZXJnZXMuCisjIFRoZSBvbmx5IGxpbmUgb2YgZmlsZS50IGlzIGNoYW5nZWQgaW4gY29tbWl0IEIyCisjCisjICAgICAgICArLS0tQzEKKyMgICAgICAgLyAgICAgIFwKKyMgQTAtLUExLS0qQTItLSpBMworIyAgIFwgICAgIC8KKyMgICAgQjEtQjIKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IEEwIGZpbGUudCBsaW5lMCAmJgorCXRlc3RfY29tbWl0IEExICYmCisJZ2l0IHJlc2V0IC0taGFyZCBBMCAmJgorCXRlc3RfY29tbWl0IEIxICYmCisJdGVzdF9jb21taXQgQjIgZmlsZS50IGxpbmUwY2hhbmdlZCAmJgorCWdpdCByZXNldCAtLWhhcmQgQTEgJiYKKwl0ZXN0X21lcmdlIEEyIEIyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBBMSAmJgorCXRlc3RfY29tbWl0IEMxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBBMiAmJgorCXRlc3RfbWVyZ2UgQTMgQzEKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCBmaW5kcyBBMScgJworCWdpdCBibGFtZSAtLXBvcmNlbGFpbiAtLXJldmVyc2UgLS1maXJzdC1wYXJlbnQgQTAuLkEzIC0tIGZpbGUudCA+YWN0dWFsX2Z1bGwgJiYKKwloZWFkIC1uIDEgPGFjdHVhbF9mdWxsIHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBBMSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q4MDEwLWNhdC1maWxlLWZpbHRlcnMuc2ggYi90L3Q4MDEwLWNhdC1maWxlLWZpbHRlcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzFkZTRiNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDgwMTAtY2F0LWZpbGUtZmlsdGVycy5zaApAQCAtMCwwICsxLDY5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNhdC1maWxlIGZpbHRlcnMgc3VwcG9ydCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAnICcKKwllY2hvICIqLnR4dCBlb2w9Y3JsZiBkaWZmPXR4dCIgPi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiaGVsbG8iIHwgYXBwZW5kX2NyID53b3JsZC50eHQgJiYKKwlnaXQgYWRkIC5naXRhdHRyaWJ1dGVzIHdvcmxkLnR4dCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0IgorJworCitoYXNfY3IgKCkgeworCXRyICdcMDE1JyBRIDwiJDEiIHwgZ3JlcCBRID4vZGV2L251bGwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZmlsdGVycyB3aXRoIGBnaXQgc2hvd2AnICcKKwlnaXQgc2hvdyBIRUFEOndvcmxkLnR4dCA+YWN0dWFsICYmCisJISBoYXNfY3IgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZmlsdGVycyB3aXRoIGNhdC1maWxlJyAnCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRDp3b3JsZC50eHQgPmFjdHVhbCAmJgorCSEgaGFzX2NyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZSAtLWZpbHRlcnMgY29udmVydHMgdG8gd29ya3RyZWUgdmVyc2lvbicgJworCWdpdCBjYXQtZmlsZSAtLWZpbHRlcnMgSEVBRDp3b3JsZC50eHQgPmFjdHVhbCAmJgorCWhhc19jciBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgLS1maWx0ZXJzIC0tcGF0aD08cGF0aD4gd29ya3MnICcKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSBIRUFEOndvcmxkLnR4dCkgJiYKKwlnaXQgY2F0LWZpbGUgLS1maWx0ZXJzIC0tcGF0aD13b3JsZC50eHQgJHNoYTEgPmFjdHVhbCAmJgorCWhhc19jciBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgLS10ZXh0Y29udiAtLXBhdGg9PHBhdGg+IHdvcmtzJyAnCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgSEVBRDp3b3JsZC50eHQpICYmCisJdGVzdF9jb25maWcgZGlmZi50eHQudGV4dGNvbnYgInRyIEEtWmEteiBOLVpBLU1uLXphLW0gPCIgJiYKKwlnaXQgY2F0LWZpbGUgLS10ZXh0Y29udiAtLXBhdGg9aGVsbG8udHh0ICRzaGExID5yb3QxMyAmJgorCXRlc3QgdXJ5eWIgPSAiJChjYXQgcm90MTMgfCByZW1vdmVfY3IpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGg9PHBhdGg+IGNvbXBsYWlucyB3aXRob3V0IC0tdGV4dGNvbnYvLS1maWx0ZXJzJyAnCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgSEVBRDp3b3JsZC50eHQpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC0tcGF0aD1oZWxsby50eHQgYmxvYiAkc2hhMSA+YWN0dWFsIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCWdyZXAgInBhdGguKm5lZWRzLipmaWx0ZXJzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS10ZXh0Y29udi8tLWZpbHRlcnMgY29tcGxhaW4gd2l0aG91dCBwYXRoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC0tdGV4dGNvbnYgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtLWZpbHRlcnMgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZSAtLXRleHRjb252IC0tYmF0Y2ggd29ya3MnICcKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSBIRUFEOndvcmxkLnR4dCkgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLnR4dC50ZXh0Y29udiAidHIgQS1aYS16IE4tWkEtTW4temEtbSA8IiAmJgorCXByaW50ZiAiJXMgaGVsbG8udHh0XG4lcyBoZWxsb1xuIiAkc2hhMSAkc2hhMSB8CisJZ2l0IGNhdC1maWxlIC0tdGV4dGNvbnYgLS1iYXRjaCA+YWN0dWFsICYmCisJcHJpbnRmICIlcyBibG9iIDZcbnVyeXliXHJcblxuJXMgYmxvYiA2XG5oZWxsb1xuXG4iIFwKKwkJJHNoYTEgJHNoYTEgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q4MDExLWJsYW1lLXNwbGl0LWZpbGUuc2ggYi90L3Q4MDExLWJsYW1lLXNwbGl0LWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODMxMTI1MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDgwMTEtYmxhbWUtc3BsaXQtZmlsZS5zaApAQCAtMCwwICsxLDExNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249JworVGhlIGdlbmVyYWwgaWRlYSBpcyB0aGF0IHdlIGhhdmUgYSBzaW5nbGUgZmlsZSB3aG9zZSBsaW5lcyBjb21lIGZyb20KK211bHRpcGxlIG90aGVyIGZpbGVzLCBhbmQgdGhvc2UgaW5kaXZpZHVhbCBmaWxlcyB3ZXJlIG1vZGlmaWVkIGluIHRoZSBzYW1lCitjb21taXRzLiBUaGF0IG1lYW5zIHRoYXQgd2Ugd2lsbCBzZWUgdGhlIHNhbWUgY29tbWl0IGluIG11bHRpcGxlIGNvbnRleHRzLAorYW5kIGVhY2ggb25lIHNob3VsZCBiZSBhdHRyaWJ1dGVkIHRvIHRoZSBjb3JyZWN0IGZpbGUuCisKK05vdGUgdGhhdCB3ZSBuZWVkIHRvIHVzZSAiYmxhbWUgLUMiIHRvIGZpbmQgdGhlIGNvbW1pdCBmb3IgYWxsIGxpbmVzLiBXZSB3aWxsCitub3QgYm90aGVyIHRlc3RpbmcgdGhhdCB0aGUgbm9uLUMgY2FzZSBmYWlscyB0byBmaW5kIGl0LiBUaGF0IGlzIGhvdyBibGFtZQorYmVoYXZlcyBub3csIGJ1dCBpdCBpcyBub3QgYSBwcm9wZXJ0eSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBpcyByZXRhaW5lZC4KKycKKy4gLi90ZXN0LWxpYi5zaAorCisjIGhlbHAgYXZvaWQgdHlwaW5nIGFuZCByZWFkaW5nIGxvbmcgc3RyaW5ncyBvZiBzaW1pbGFyIGxpbmVzCisjIGluIHRoZSB0ZXN0cyBiZWxvdworZ2VuZXJhdGVfZXhwZWN0ICgpIHsKKwl3aGlsZSByZWFkIG5yIGRhdGEKKwlkbworCQlpPTAKKwkJd2hpbGUgdGVzdCAkaSAtbHQgJG5yCisJCWRvCisJCQllY2hvICRkYXRhCisJCQlpPSQoKGkgKyAxKSkKKwkJZG9uZQorCWRvbmUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3BsaXQgZmlsZSBjYXNlJyAnCisJIyB1c2UgbGluZXMgbG9uZyBlbm91Z2ggdG8gdHJpZ2dlciBjb250ZW50IGRldGVjdGlvbgorCXRlc3Rfc2VxIDEwMDAgMTAxMCA+b25lICYmCisJdGVzdF9zZXEgMjAwMCAyMDEwID50d28gJiYKKwlnaXQgYWRkIG9uZSB0d28gJiYKKwl0ZXN0X2NvbW1pdCBiYXNlICYmCisKKwlzZWQgIjZzL14vbW9kaWZpZWQgLyIgPG9uZSA+b25lLnRtcCAmJgorCW12IG9uZS50bXAgb25lICYmCisJc2VkICI2cy9eL21vZGlmaWVkIC8iIDx0d28gPnR3by50bXAgJiYKKwltdiB0d28udG1wIHR3byAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X2NvbW1pdCBtb2RpZmllZCAmJgorCisJY2F0IG9uZSB0d28gPmNvbWJpbmVkICYmCisJZ2l0IGFkZCBjb21iaW5lZCAmJgorCWdpdCBybSBvbmUgdHdvICYmCisJdGVzdF9jb21taXQgY29tYmluZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2ltdWxhdGVkIHBvcmNlbGFpbicgJworCSMgVGhpcyBqdXN0IHJlYWRzIHBvcmNlbGFpbi1pc2ggb3V0cHV0IGFuZCB0cmllcworCSMgdG8gb3V0cHV0IHRoZSB2YWx1ZSBvZiBhIGdpdmVuIGZpZWxkIGZvciBlYWNoIGxpbmUgKGVpdGhlciBieQorCSMgcmVhZGluZyB0aGUgZmllbGQgdGhhdCBhY2NvbXBhbmllcyB0aGlzIGxpbmUsIG9yIHJlZmVyZW5jaW5nCisJIyB0aGUgaW5mb3JtYXRpb24gZm91bmQgbGFzdCB0aW1lIHRoZSBjb21taXQgd2FzIG1lbnRpb25lZCkuCisJY2F0ID5yZWFkLXBvcmNlbGFpbi5wbCA8PC1cRU9GCisJbXkgJGZpZWxkID0gc2hpZnQ7CisJd2hpbGUgKDw+KSB7CisJCWlmICgvXlswLTlhLWZdezQwfSAvKSB7CisJCQlmbHVzaCgpOworCQkJJGhhc2ggPSAkJjsKKwkJfSBlbHNpZiAoL14kZmllbGQgKC4qKS8pIHsKKwkJCSRjYWNoZXskaGFzaH0gPSAkMTsKKwkJfQorCX0KKwlmbHVzaCgpOworCisJc3ViIGZsdXNoIHsKKwkJcmV0dXJuIHVubGVzcyBkZWZpbmVkICRoYXNoOworCQlpZiAoZGVmaW5lZCAkY2FjaGV7JGhhc2h9KSB7CisJCQlwcmludCAiJGNhY2hleyRoYXNofVxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICJOT05FXG4iOworCQl9CisJfQorCUVPRgorJworCitmb3Igb3V0cHV0IGluIHBvcmNlbGFpbiBsaW5lLXBvcmNlbGFpbgorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJnZW5lcmF0ZSAtLSRvdXRwdXQgb3V0cHV0IiAnCisJCWdpdCBibGFtZSAtLXJvb3QgLUMgLS0kb3V0cHV0IGNvbWJpbmVkID5vdXRwdXQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkb3V0cHV0IG91dHB1dCBmaW5kcyBjb3JyZWN0IGNvbW1pdHMiICcKKwkJZ2VuZXJhdGVfZXhwZWN0ID5leHBlY3QgPDwtXEVPRiAmJgorCQk1IGJhc2UKKwkJMSBtb2RpZmllZAorCQkxMCBiYXNlCisJCTEgbW9kaWZpZWQKKwkJNSBiYXNlCisJCUVPRgorCQlwZXJsIHJlYWQtcG9yY2VsYWluLnBsIHN1bW1hcnkgPG91dHB1dCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkb3V0cHV0IG91dHB1dCBzaG93cyBjb3JyZWN0IGZpbGVuYW1lcyIgJworCQlnZW5lcmF0ZV9leHBlY3QgPmV4cGVjdCA8PC1cRU9GICYmCisJCTExIG9uZQorCQkxMSB0d28KKwkJRU9GCisJCXBlcmwgcmVhZC1wb3JjZWxhaW4ucGwgZmlsZW5hbWUgPG91dHB1dCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkb3V0cHV0IG91dHB1dCBzaG93cyBjb3JyZWN0IHByZXZpb3VzIHBvaW50ZXIiICcKKwkJZ2VuZXJhdGVfZXhwZWN0ID5leHBlY3QgPDwtRU9GICYmCisJCTUgTk9ORQorCQkxICQoZ2l0IHJldi1wYXJzZSBtb2RpZmllZF4pIG9uZQorCQkxMCBOT05FCisJCTEgJChnaXQgcmV2LXBhcnNlIG1vZGlmaWVkXikgdHdvCisJCTUgTk9ORQorCQlFT0YKKwkJcGVybCByZWFkLXBvcmNlbGFpbi5wbCBwcmV2aW91cyA8b3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q4MDEyLWJsYW1lLWNvbG9ycy5zaCBiL3QvdDgwMTItYmxhbWUtY29sb3JzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVkMzhmNzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q4MDEyLWJsYW1lLWNvbG9ycy5zaApAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29sb3JlZCBnaXQgYmxhbWUnCisuIC4vdGVzdC1saWIuc2gKKworUFJPRz0nZ2l0IGJsYW1lIC1jJworLiAiJFRFU1RfRElSRUNUT1JZIi9hbm5vdGF0ZS10ZXN0cy5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb2xvcmVkIGJsYW1lIGNvbG9ycyBjb250aWd1b3VzIGxpbmVzJyAnCisJZ2l0IC1jIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXM9eWVsbG93IGJsYW1lIC0tY29sb3ItbGluZXMgLS1hYmJyZXY9MTIgaGVsbG8uYyA+YWN0dWFsLnJhdyAmJgorCWdpdCAtYyBjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVzPXllbGxvdyAtYyBibGFtZS5jb2xvcmluZz1yZXBlYXRlZExpbmVzIGJsYW1lIC0tYWJicmV2PTEyIGhlbGxvLmMgPmFjdHVhbC5yYXcuMiAmJgorCXRlc3RfY21wIGFjdHVhbC5yYXcgYWN0dWFsLnJhdy4yICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCWdyZXAgIjxZRUxMT1c+IiA8YWN0dWFsID5kYXJrZW5lZCAmJgorCWdyZXAgIihGIiBkYXJrZW5lZCA+IEYuZXhwZWN0ICYmCisJZ3JlcCAiKEgiIGRhcmtlbmVkID4gSC5leHBlY3QgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIEYuZXhwZWN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBILmV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb2xvciBieSBhZ2UgY29uc2lzdGVudGx5IGNvbG9ycyBvbGQgY29kZScgJworCWdpdCBibGFtZSAtLWNvbG9yLWJ5LWFnZSBoZWxsby5jID5hY3R1YWwucmF3ICYmCisJZ2l0IC1jIGJsYW1lLmNvbG9yaW5nPWhpZ2hsaWdodFJlY2VudCBibGFtZSBoZWxsby5jID5hY3R1YWwucmF3LjIgJiYKKwl0ZXN0X2NtcCBhY3R1YWwucmF3IGFjdHVhbC5yYXcuMiAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwlncmVwICI8QkxVRT4iIDxhY3R1YWwgPmNvbG9yZWQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxMCBjb2xvcmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGNvbG9yIGJ5IGFnZTogbmV3IGNvZGUgaXMgZGlmZmVyZW50JyAnCisJY2F0ID4+aGVsbG8uYyA8PC1FT0YgJiYKKwkJdm9pZCBxZnVuYygpOworCUVPRgorCWdpdCBhZGQgaGVsbG8uYyAmJgorCUdJVF9BVVRIT1JfREFURT0iIiBnaXQgY29tbWl0IC1tICJuZXcgY29tbWl0IiAmJgorCisJZ2l0IC1jIGNvbG9yLmJsYW1lLmhpZ2hsaWdodFJlY2VudD0ieWVsbG93LDEgbW9udGggYWdvLCBjeWFuIiBibGFtZSAtLWNvbG9yLWJ5LWFnZSBoZWxsby5jID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCisJZ3JlcCAiPFlFTExPVz4iIDxhY3R1YWwgPmNvbG9yZWQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxMCBjb2xvcmVkICYmCisKKwlncmVwICI8Q1lBTj4iIDxhY3R1YWwgPmNvbG9yZWQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGNvbG9yZWQgJiYKKwlncmVwIHFmdW5jIGNvbG9yZWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q4MDEzLWJsYW1lLWlnbm9yZS1yZXZzLnNoIGIvdC90ODAxMy1ibGFtZS1pZ25vcmUtcmV2cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNmRjMzFlCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAxMy1ibGFtZS1pZ25vcmUtcmV2cy5zaApAQCAtMCwwICsxLDI3NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2lnbm9yZSByZXZpc2lvbnMgd2hlbiBibGFtaW5nJworLiAuL3Rlc3QtbGliLnNoCisKKyMgQ3JlYXRlczoKKyMgCUEtLUItLVgKKyMgQSBhZGRlZCBsaW5lIDEgYW5kIEIgYWRkZWQgbGluZSAyLiAgWCBtYWtlcyBjaGFuZ2VzIHRvIHRob3NlIGxpbmVzLiAgU2FuaXR5CisjIGNoZWNrIHRoYXQgWCBpcyBibGFtZWQgZm9yIGJvdGggbGluZXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBBIGZpbGUgbGluZTEgJiYKKworCWVjaG8gbGluZTIgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisJZ2l0IHRhZyBCICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIGxpbmUtb25lIGxpbmUtdHdvID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBYICYmCisJZ2l0IHRhZyBYICYmCisKKwlnaXQgYmxhbWUgLS1saW5lLXBvcmNlbGFpbiBmaWxlID5ibGFtZV9yYXcgJiYKKworCWdyZXAgLUUgIl5bMC05YS1mXSsgWzAtOV0rIDEiIGJsYW1lX3JhdyB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgWCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ3JlcCAtRSAiXlswLTlhLWZdKyBbMC05XSsgMiIgYmxhbWVfcmF3IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBYID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisjIElnbm9yZSBYLCBtYWtlIHN1cmUgQSBpcyBibGFtZWQgZm9yIGxpbmUgMSBhbmQgQiBmb3IgbGluZSAyLgordGVzdF9leHBlY3Rfc3VjY2VzcyBpZ25vcmVfcmV2X2NoYW5naW5nX2xpbmVzICcKKwlnaXQgYmxhbWUgLS1saW5lLXBvcmNlbGFpbiAtLWlnbm9yZS1yZXYgWCBmaWxlID5ibGFtZV9yYXcgJiYKKworCWdyZXAgLUUgIl5bMC05YS1mXSsgWzAtOV0rIDEiIGJsYW1lX3JhdyB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgQSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ3JlcCAtRSAiXlswLTlhLWZdKyBbMC05XSsgMiIgYmxhbWVfcmF3IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBCID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisjIEZvciBpZ25vcmVkIHJldnMgdGhhdCBoYXZlIGFkZGVkICd1bmJsYW1hYmxlJyBsaW5lcywgYXR0cmlidXRlIHRob3NlIHRvIHRoZQorIyBpZ25vcmVkIGNvbW1pdC4KKyMgCUEtLUItLVgtLVkKKyMgV2hlcmUgWSBjaGFuZ2VzIGxpbmVzIDEgYW5kIDIsIGFuZCBhZGRzIGxpbmVzIDMgYW5kIDQuICBUaGUgYWRkZWQgbGluZXMgb3VnaHQKKyMgdG8gaGF2ZSBub3RoaW5nIGluIGNvbW1vbiB3aXRoICJsaW5lLW9uZSIgb3IgImxpbmUtdHdvIiwgdG8ga2VlcCBhbnkKKyMgaGV1cmlzdGljcyBmcm9tIG1hdGNoaW5nIHRoZW0gd2l0aCBhbnkgbGluZXMgaW4gdGhlIHBhcmVudC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgaWdub3JlX3Jldl9hZGRpbmdfdW5ibGFtYWJsZV9saW5lcyAnCisJdGVzdF93cml0ZV9saW5lcyBsaW5lLW9uZS1jaGFuZ2UgbGluZS10d28tY2hhbmdlZCB5MyB5NCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gWSAmJgorCWdpdCB0YWcgWSAmJgorCisJZ2l0IHJldi1wYXJzZSBZID5leHBlY3QgJiYKKwlnaXQgYmxhbWUgLS1saW5lLXBvcmNlbGFpbiBmaWxlIC0taWdub3JlLXJldiBZID5ibGFtZV9yYXcgJiYKKworCWdyZXAgLUUgIl5bMC05YS1mXSsgWzAtOV0rIDMiIGJsYW1lX3JhdyB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdyZXAgLUUgIl5bMC05YS1mXSsgWzAtOV0rIDQiIGJsYW1lX3JhdyB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKyMgSWdub3JlIFggYW5kIFksIGJvdGggaW4gc2VwYXJhdGUgZmlsZXMuICBMaW5lcyAxID09IEEsIDIgPT0gQi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgaWdub3JlX3JldnNfZnJvbV9maWxlcyAnCisJZ2l0IHJldi1wYXJzZSBYID5pZ25vcmVfeCAmJgorCWdpdCByZXYtcGFyc2UgWSA+aWdub3JlX3kgJiYKKwlnaXQgYmxhbWUgLS1saW5lLXBvcmNlbGFpbiBmaWxlIC0taWdub3JlLXJldnMtZmlsZSBpZ25vcmVfeCAtLWlnbm9yZS1yZXZzLWZpbGUgaWdub3JlX3kgPmJsYW1lX3JhdyAmJgorCisJZ3JlcCAtRSAiXlswLTlhLWZdKyBbMC05XSsgMSIgYmxhbWVfcmF3IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBBID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlncmVwIC1FICJeWzAtOWEtZl0rIFswLTldKyAyIiBibGFtZV9yYXcgfCBzZWQgLWUgInMvIC4qLy8iID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIEIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKyMgSWdub3JlIFggZnJvbSB0aGUgY29uZmlnIG9wdGlvbiwgWSBmcm9tIGEgZmlsZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgaWdub3JlX3JldnNfZnJvbV9jb25maWdzX2FuZF9maWxlcyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBibGFtZS5pZ25vcmVSZXZzRmlsZSBpZ25vcmVfeCAmJgorCWdpdCBibGFtZSAtLWxpbmUtcG9yY2VsYWluIGZpbGUgLS1pZ25vcmUtcmV2cy1maWxlIGlnbm9yZV95ID5ibGFtZV9yYXcgJiYKKworCWdyZXAgLUUgIl5bMC05YS1mXSsgWzAtOV0rIDEiIGJsYW1lX3JhdyB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgQSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ3JlcCAtRSAiXlswLTlhLWZdKyBbMC05XSsgMiIgYmxhbWVfcmF3IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBCID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisjIE92ZXJyaWRlIGJsYW1lLmlnbm9yZVJldnNGaWxlIChpZ25vcmVfeCkgd2l0aCBhbiBlbXB0eSBzdHJpbmcuICBYIHNob3VsZCBiZQorIyBibGFtZWQgbm93IGZvciBsaW5lcyAxIGFuZCAyLCBzaW5jZSB3ZSBhcmUgbm8gbG9uZ2VyIGlnbm9yaW5nIFguCit0ZXN0X2V4cGVjdF9zdWNjZXNzIG92ZXJyaWRlX2lnbm9yZV9yZXZzX2ZpbGUgJworCWdpdCBibGFtZSAtLWxpbmUtcG9yY2VsYWluIGZpbGUgLS1pZ25vcmUtcmV2cy1maWxlICIiIC0taWdub3JlLXJldnMtZmlsZSBpZ25vcmVfeSA+YmxhbWVfcmF3ICYmCisJZ2l0IHJldi1wYXJzZSBYID5leHBlY3QgJiYKKworCWdyZXAgLUUgIl5bMC05YS1mXSsgWzAtOV0rIDEiIGJsYW1lX3JhdyB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdyZXAgLUUgIl5bMC05YS1mXSsgWzAtOV0rIDIiIGJsYW1lX3JhdyB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGJhZF9maWxlc19hbmRfcmV2cyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJsYW1lIGZpbGUgLS1pZ25vcmUtcmV2IE5PUkVWIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiY2Fubm90IGZpbmQgcmV2aXNpb24gTk9SRVYgdG8gaWdub3JlIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBibGFtZSBmaWxlIC0taWdub3JlLXJldnMtZmlsZSBOT0ZJTEUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJjb3VsZCBub3Qgb3Blbi4qOiBOT0ZJTEUiIGVyciAmJgorCisJZWNobyBOT1JFViA+aWdub3JlX25vcmV2ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJsYW1lIGZpbGUgLS1pZ25vcmUtcmV2cy1maWxlIGlnbm9yZV9ub3JldiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImludmFsaWQgb2JqZWN0IG5hbWU6IE5PUkVWIiBlcnIKKwknCisKKyMgRm9yIGlnbm9yZWQgcmV2cyB0aGF0IGhhdmUgYWRkZWQgJ3VuYmxhbWFibGUnIGxpbmVzLCBtYXJrIHRob3NlIGxpbmVzIHdpdGggYQorIyAnKicKKyMgCUEtLUItLVgtLVkKKyMgTGluZXMgMyBhbmQgNCBhcmUgZnJvbSBZIGFuZCB1bmJsYW1hYmxlLiAgVGhpcyB3YXMgc2V0IHVwIGluCisjIGlnbm9yZV9yZXZfYWRkaW5nX3VuYmxhbWFibGVfbGluZXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIG1hcmtfdW5ibGFtYWJsZV9saW5lcyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBibGFtZS5tYXJrVW5ibGFtYWJsZUxpbmVzIHRydWUgJiYKKworCWdpdCBibGFtZSAtLWlnbm9yZS1yZXYgWSBmaWxlID5ibGFtZV9yYXcgJiYKKwllY2hvICIqIiA+ZXhwZWN0ICYmCisKKwlzZWQgLW4gIjNwIiBibGFtZV9yYXcgfCBjdXQgLWMxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlzZWQgLW4gIjRwIiBibGFtZV9yYXcgfCBjdXQgLWMxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisjIENvbW1pdCBaIHdpbGwgdG91Y2ggdGhlIGZpcnN0IHR3byBsaW5lcy4gIFkgdG91Y2hlZCBhbGwgZm91ci4KKyMgCUEtLUItLVgtLVktLVoKKyMgVGhlIGJsYW1lIG91dHB1dCB3aGVuIGlnbm9yaW5nIFogc2hvdWxkIGJlOgorIyA/WSAuLi4gMSkKKyMgP1kgLi4uIDIpCisjIFkgIC4uLiAzKQorIyBZICAuLi4gNCkKKyMgV2UncmUgY2hlY2tpbmcgb25seSB0aGUgZmlyc3QgY2hhcmFjdGVyCit0ZXN0X2V4cGVjdF9zdWNjZXNzIG1hcmtfaWdub3JlZF9saW5lcyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBibGFtZS5tYXJrSWdub3JlZExpbmVzIHRydWUgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgbGluZS1vbmUtWiBsaW5lLXR3by1aIHkzIHk0ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBaICYmCisJZ2l0IHRhZyBaICYmCisKKwlnaXQgYmxhbWUgLS1pZ25vcmUtcmV2IFogZmlsZSA+YmxhbWVfcmF3ICYmCisJZWNobyAiPyIgPmV4cGVjdCAmJgorCisJc2VkIC1uICIxcCIgYmxhbWVfcmF3IHwgY3V0IC1jMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJc2VkIC1uICIycCIgYmxhbWVfcmF3IHwgY3V0IC1jMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJc2VkIC1uICIzcCIgYmxhbWVfcmF3IHwgY3V0IC1jMSA+YWN0dWFsICYmCisJISB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlzZWQgLW4gIjRwIiBibGFtZV9yYXcgfCBjdXQgLWMxID5hY3R1YWwgJiYKKwkhIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKyMgRm9yIGlnbm9yZWQgcmV2cyB0aGF0IGFkZGVkICd1bmJsYW1hYmxlJyBsaW5lcyBhbmQgbW9yZSByZWNlbnQgY29tbWl0cyBjaGFuZ2VkCisjIHRoZSBibGFtYWJsZSBsaW5lcywgbWFyayB0aGUgdW5ibGFtYWJsZSBsaW5lcyB3aXRoIGEKKyMgJyonCisjIAlBLS1CLS1YLS1ZLS1aCisjIExpbmVzIDMgYW5kIDQgYXJlIGZyb20gWSBhbmQgdW5ibGFtYWJsZSwgYXMgc2V0IHVwIGluCisjIGlnbm9yZV9yZXZfYWRkaW5nX3VuYmxhbWFibGVfbGluZXMuICBaIGNoYW5nZWQgbGluZXMgMSBhbmQgMi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgbWFya191bmJsYW1hYmxlX2xpbmVzX2ludGVybWVkaWF0ZSAnCisJZ2l0IGNvbmZpZyAtLWFkZCBibGFtZS5tYXJrVW5ibGFtYWJsZUxpbmVzIHRydWUgJiYKKworCWdpdCBibGFtZSAtLWlnbm9yZS1yZXYgWSBmaWxlID5ibGFtZV9yYXcgMj5zdGRlcnIgJiYKKwllY2hvICIqIiA+ZXhwZWN0ICYmCisKKwlzZWQgLW4gIjNwIiBibGFtZV9yYXcgfCBjdXQgLWMxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlzZWQgLW4gIjRwIiBibGFtZV9yYXcgfCBjdXQgLWMxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisjIFRoZSBoZXVyaXN0aWMgY2FsbGVkIGJ5IGd1ZXNzX2xpbmVfYmxhbWVzKCkgdHJpZXMgdG8gZmluZCB0aGUgc2l6ZSBvZiBhCisjIGJsYW1lX2VudHJ5ICdlJyBpbiB0aGUgcGFyZW50J3MgYWRkcmVzcyBzcGFjZS4gIFRob3NlIGNhbGN1bGF0aW9ucyBuZWVkIHRvCisjIGNoZWNrIGZvciBuZWdhdGl2ZSBvciB6ZXJvIHZhbHVlcyBmb3Igd2hlbiBhIGJsYW1lIGVudHJ5IGlzIGNvbXBsZXRlbHkgb3V0c2lkZQorIyB0aGUgd2luZG93IG9mIHRoZSBwYXJlbnQncyB2ZXJzaW9uIG9mIGEgZmlsZS4KKyMKKyMgVGhpcyBoYXBwZW5zIHdoZW4gb25lIGNvbW1pdCBhZGRzIHNldmVyYWwgbGluZXMgKGNvbW1pdCBCIGJlbG93KS4gIEEgbGF0ZXIKKyMgY29tbWl0IChDKSBjaGFuZ2VzIG9uZSBsaW5lIGluIHRoZSBtaWRkbGUgb2YgQidzIGNoYW5nZS4gIENvbW1pdCBDIGdldHMgYmxhbWVkCisjIGZvciBpdHMgY2hhbmdlLCBhbmQgdGhhdCBicmVha3MgdXAgQidzIGNoYW5nZSBpbnRvIG11bHRpcGxlIGJsYW1lIGVudHJpZXMuCisjIFdoZW4gcHJvY2Vzc2luZyBCLCBvbmUgb2YgdGhlIGJsYW1lX2VudHJpZXMgaXMgb3V0c2lkZSBBJ3Mgd2luZG93ICh3aGljaCB3YXMKKyMgemVybyAtIGl0IGhhZCBubyBsaW5lcyBhZGRlZCBvbiBpdHMgc2lkZSBvZiB0aGUgZGlmZikuCisjCisjIEEtLUItLUMsIGlnbm9yZSBCIHRvIHRlc3QgdGhlIGlnbm9yZSBoZXVyaXN0aWMncyBib3VuZGFyeSBjaGVja3MuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGlnbm9yZWRfY2h1bmtfbmVnYXRpdmVfcGFyZW50X3NpemUgJworCXJtIC1yZiAuZ2l0LyAmJgorCWdpdCBpbml0ICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEwxIEwyIEw3IEw4IEw5ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBBICYmCisJZ2l0IHRhZyBBICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEwxIEwyIEwzIEw0IEw1IEw2IEw3IEw4IEw5ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisJZ2l0IHRhZyBCICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEwxIEwyIEwzIEw0IHh4eCBMNiBMNyBMOCBMOSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gQyAmJgorCWdpdCB0YWcgQyAmJgorCisJZ2l0IGJsYW1lIGZpbGUgLS1pZ25vcmUtcmV2IEIgPmJsYW1lX3JhdworCScKKworIyBSZXNldHRpbmcgdGhlIHJlcG8gYW5kIGNyZWF0aW5nOgorIworIyBBLS1CLS1NCisjICBcICAgLworIyAgIEMtKworIworIyAnQScgY3JlYXRlcyBhIGZpbGUuICBCIGNoYW5nZXMgbGluZSAxLCBhbmQgQyBjaGFuZ2VzIGxpbmUgOS4gIE0gbWVyZ2VzLgordGVzdF9leHBlY3Rfc3VjY2VzcyBpZ25vcmVfbWVyZ2UgJworCXJtIC1yZiAuZ2l0LyAmJgorCWdpdCBpbml0ICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEwxIEwyIEwzIEw0IEw1IEw2IEw3IEw4IEw5ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBBICYmCisJZ2l0IHRhZyBBICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEJCIEwyIEwzIEw0IEw1IEw2IEw3IEw4IEw5ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisJZ2l0IHRhZyBCICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIEEgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIEwxIEwyIEwzIEw0IEw1IEw2IEw3IEw4IENDID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBDICYmCisJZ2l0IHRhZyBDICYmCisKKwl0ZXN0X21lcmdlIE0gQiAmJgorCWdpdCBibGFtZSAtLWxpbmUtcG9yY2VsYWluIGZpbGUgLS1pZ25vcmUtcmV2IE0gPmJsYW1lX3JhdyAmJgorCisJZ3JlcCAtRSAiXlswLTlhLWZdKyBbMC05XSsgMSIgYmxhbWVfcmF3IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBCID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlncmVwIC1FICJeWzAtOWEtZl0rIFswLTldKyA5IiBibGFtZV9yYXcgfCBzZWQgLWUgInMvIC4qLy8iID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIEMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ODAxNC1ibGFtZS1pZ25vcmUtZnV6enkuc2ggYi90L3Q4MDE0LWJsYW1lLWlnbm9yZS1mdXp6eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZTYxODgyCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAxNC1ibGFtZS1pZ25vcmUtZnV6enkuc2gKQEAgLTAsMCArMSw0MzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYmxhbWUgaWdub3JlIGZ1enp5IGhldXJpc3RpYycKKy4gLi90ZXN0LWxpYi5zaAorCitwaWNrX2F1dGhvcj0ncy9eWzAtOWEtZl5dKiAqKFwoW14gXSpcKSAuKi9cMS8nCisKKyMgRWFjaCB0ZXN0IGlzIGNvbXBvc2VkIG9mIDQgdmFyaWFibGVzOgorIyB0aXRsZU4gLSB0aGUgdGVzdCBuYW1lCisjIGFOIC0gdGhlIGluaXRpYWwgY29udGVudAorIyBiTiAtIHRoZSBmaW5hbCBjb250ZW50CisjIGV4cGVjdGVkTiAtIHRoZSBsaW5lIG51bWJlcnMgZnJvbSBhTiB0aGF0IHdlIGV4cGVjdCBnaXQgYmxhbWUKKyMgICAgICAgICAgICAgb24gYk4gdG8gaWRlbnRpZnksIG9yICJGaW5hbCIgaWYgYk4gaXRzZWxmIHNob3VsZAorIyAgICAgICAgICAgICBiZSBpZGVudGlmaWVkIGFzIHRoZSBvcmlnaW4gb2YgdGhhdCBsaW5lLgorCisjIFdlIHN0YXJ0IGF0IHRlc3QgMiBiZWNhdXNlIHNldHVwIHdpbGwgc2hvdyBhcyB0ZXN0IDEKK3RpdGxlMj0iUmVncmVzc2lvbiB0ZXN0IGZvciBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgc2VhcmNoIHJhbmdlcyIKK2NhdCA8PEVPRiA+YTIKKzEKKzIKKzMKK2FiY2RlZgorNQorNgorNworaWprbAorOQorMTAKKzExCitwcXJzCisxMworMTQKKzE1Cit3eHl6CisxNworMTgKKzE5CitFT0YKK2NhdCA8PEVPRiA+YjIKK2FiY2RlCitpamsKK3Bxcgord3h5CitFT0YKK2NhdCA8PEVPRiA+ZXhwZWN0ZWQyCis0Cis4CisxMgorMTYKK0VPRgorCit0aXRsZTM9IkNvbWJpbmUgMyBsaW5lcyBpbnRvIDIiCitjYXQgPDxFT0YgPmEzCitpZiAoKG1heGdyb3c9PTApIHx8CisJKCBzaW5nbGVfbGluZV9maWVsZCAmJiAoZmllbGQtPmRjb2xzIDwgbWF4Z3JvdykpIHx8CisJKCFzaW5nbGVfbGluZV9maWVsZCAmJiAoZmllbGQtPmRyb3dzIDwgbWF4Z3JvdykpKQorRU9GCitjYXQgPDxFT0YgPmIzCitpZiAoKG1heGdyb3cgPT0gMCkgfHwgKHNpbmdsZV9saW5lX2ZpZWxkICYmIChmaWVsZC0+ZGNvbHMgPCBtYXhncm93KSkgfHwKKwkoIXNpbmdsZV9saW5lX2ZpZWxkICYmIChmaWVsZC0+ZHJvd3MgPCBtYXhncm93KSkpIHsKK0VPRgorY2F0IDw8RU9GID5leHBlY3RlZDMKKzIKKzMKK0VPRgorCit0aXRsZTQ9IkFkZCBjdXJseSBicmFja2V0cyIKK2NhdCA8PEVPRiA+YTQKKwlpZiAocm93cykgKnJvd3MgPSBmaWVsZC0+cm93czsKKwlpZiAoY29scykgKmNvbHMgPSBmaWVsZC0+Y29sczsKKwlpZiAoZnJvdykgKmZyb3cgPSBmaWVsZC0+ZnJvdzsKKwlpZiAoZmNvbCkgKmZjb2wgPSBmaWVsZC0+ZmNvbDsKK0VPRgorY2F0IDw8RU9GID5iNAorCWlmIChyb3dzKSB7CisJCSpyb3dzID0gZmllbGQtPnJvd3M7CisJfQorCWlmIChjb2xzKSB7CisJCSpjb2xzID0gZmllbGQtPmNvbHM7CisJfQorCWlmIChmcm93KSB7CisJCSpmcm93ID0gZmllbGQtPmZyb3c7CisJfQorCWlmIChmY29sKSB7CisJCSpmY29sID0gZmllbGQtPmZjb2w7CisJfQorRU9GCitjYXQgPDxFT0YgPmV4cGVjdGVkNAorMQorMQorRmluYWwKKzIKKzIKK0ZpbmFsCiszCiszCitGaW5hbAorNAorNAorRmluYWwKK0VPRgorCisKK3RpdGxlNT0iQ29tYmluZSBtYW55IGxpbmVzIGFuZCBjaGFuZ2UgY2FzZSIKK2NhdCA8PEVPRiA+YTUKK2Zvcihyb3c9MCxwQnVmZmVyPWZpZWxkLT5idWY7CisJcm93PGhlaWdodDsKKwlyb3crKyxwQnVmZmVyKz13aWR0aCApCit7CisJaWYgKChsZW4gPSAoaW50KSggQWZ0ZXJfRW5kX09mX0RhdGEoIHBCdWZmZXIsIHdpZHRoICkgLSBwQnVmZmVyICkpID4gMCkKKwl7CisJCXdtb3ZlKCB3aW4sIHJvdywgMCApOworCQl3YWRkbnN0ciggd2luLCBwQnVmZmVyLCBsZW4gKTsKK0VPRgorY2F0IDw8RU9GID5iNQorZm9yIChSb3cgPSAwLCBQQnVmZmVyID0gZmllbGQtPmJ1ZjsgUm93IDwgSGVpZ2h0OyBSb3crKywgUEJ1ZmZlciArPSBXaWR0aCkgeworCWlmICgoTGVuID0gKGludCkoYWZ0ZXJFbmRPZkRhdGEoUEJ1ZmZlciwgV2lkdGgpIC0gUEJ1ZmZlcikpID4gMCkgeworCQl3bW92ZSh3aW4sIFJvdywgMCk7CisJCXdhZGRuc3RyKHdpbiwgUEJ1ZmZlciwgTGVuKTsKK0VPRgorY2F0IDw8RU9GID5leHBlY3RlZDUKKzEKKzUKKzcKKzgKK0VPRgorCit0aXRsZTY9IlJlbmFtZSBhbmQgY29tYmluZSBsaW5lcyIKK2NhdCA8PEVPRiA+YTYKK2Jvb2wgbmVlZF92aXN1YWxfdXBkYXRlID0gKChmb3JtICE9IChGT1JNICopMCkgICAgICAmJgorCShmb3JtLT5zdGF0dXMgJiBfUE9TVEVEKSAmJgorCShmb3JtLT5jdXJyZW50PT1maWVsZCkpOworCitpZiAobmVlZF92aXN1YWxfdXBkYXRlKQorCVN5bmNocm9uaXplX0J1ZmZlcihmb3JtKTsKKworaWYgKHNpbmdsZV9saW5lX2ZpZWxkKQoreworCWdyb3d0aCA9IGZpZWxkLT5jb2xzICogYW1vdW50OworCWlmIChmaWVsZC0+bWF4Z3JvdykKKwkJZ3Jvd3RoID0gTWluaW11bShmaWVsZC0+bWF4Z3JvdyAtIGZpZWxkLT5kY29scyxncm93dGgpOworCWZpZWxkLT5kY29scyArPSBncm93dGg7CisJaWYgKGZpZWxkLT5kY29scyA9PSBmaWVsZC0+bWF4Z3JvdykKK0VPRgorY2F0IDw8RU9GID5iNgorYm9vbCBOZWVkVmlzdWFsVXBkYXRlID0gKChGb3JtICE9IChGT1JNICopMCkgJiYgKEZvcm0tPnN0YXR1cyAmIF9QT1NURUQpICYmCisJKEZvcm0tPmN1cnJlbnQgPT0gZmllbGQpKTsKKworaWYgKE5lZWRWaXN1YWxVcGRhdGUpIHsKKwlzeW5jaHJvbml6ZUJ1ZmZlcihGb3JtKTsKK30KKworaWYgKFNpbmdsZUxpbmVGaWVsZCkgeworCUdyb3d0aCA9IGZpZWxkLT5jb2xzICogYW1vdW50OworCWlmIChmaWVsZC0+bWF4Z3JvdykgeworCQlHcm93dGggPSBNaW5pbXVtKGZpZWxkLT5tYXhncm93IC0gZmllbGQtPmRjb2xzLCBHcm93dGgpOworCX0KKwlmaWVsZC0+ZGNvbHMgKz0gR3Jvd3RoOworCWlmIChmaWVsZC0+ZGNvbHMgPT0gZmllbGQtPm1heGdyb3cpIHsKK0VPRgorY2F0IDw8RU9GID5leHBlY3RlZDYKKzEKKzMKKzQKKzUKKzYKK0ZpbmFsCis3Cis4CisxMAorMTEKKzEyCitGaW5hbAorMTMKKzE0CitFT0YKKworIyBCb3RoIGxpbmVzIG1hdGNoIGlkZW50aWNhbGx5IHNvIHBvc2l0aW9uIG11c3QgYmUgdXNlZCB0byB0aWUtYnJlYWsuCit0aXRsZTc9IlNhbWUgbGluZSB0d2ljZSIKK2NhdCA8PEVPRiA+YTcKK2FiYworYWJjCitFT0YKK2NhdCA8PEVPRiA+YjcKK2FiY2QKK2FiY2QKK0VPRgorY2F0IDw8RU9GID5leHBlY3RlZDcKKzEKKzIKK0VPRgorCit0aXRsZTg9IkVuZm9yY2UgbGluZSBvcmRlciIKK2NhdCA8PEVPRiA+YTgKK2FiY2RlZgorZ2hpamtsCithYgorRU9GCitjYXQgPDxFT0YgPmI4CitnaGlqaworYWJjZAorRU9GCitjYXQgPDxFT0YgPmV4cGVjdGVkOAorMgorMworRU9GCisKK3RpdGxlOT0iRXhwYW5kIGxpbmVzIGFuZCByZW5hbWUgdmFyaWFibGVzIgorY2F0IDw8RU9GID5hOQoraW50IG15RnVuY3Rpb24oaW50IEFyZ3VtZW50T25lLCBUaGluZyAqQXJnVHdvLCBCbGFoIFh1Z2x5QnVnKSB7CisJU3F1aWdnbGUgRmFidWxvdXNSZXN1bHQgPSBzcXVhcmdsZShBcmd1bWVudE9uZSwgKkFyZ1R3bywKKwkJWHVnbHlCdWcpICsgRXd3d0dsb2JhbFdpdGhBUmVhbGx5TG9uZ05hbWVZZXBUb29Mb25nOworCXJldHVybiBGYWJ1bG91c1Jlc3VsdCAqIDQyOworfQorRU9GCitjYXQgPDxFT0YgPmI5CitpbnQgbXlGdW5jdGlvbihpbnQgYXJndW1lbnRfb25lLCBUaGluZyAqYXJnX2FzZGZnaCwKKwlCbGFoIHh1Z2x5X2J1ZykgeworCVNxdWlnZ2xlIGZhYnVsb3VzX3Jlc3VsdCA9IHNxdWFyZ2xlKGFyZ3VtZW50X29uZSwKKwkJKmFyZ19hc2RmZ2gsIHh1Z2x5X2J1ZykKKwkJKyBnX2V3d3dfZ2xvYmFsX3dpdGhfYV9yZWFsbHlfbG9uZ19uYW1lX3llcF90b29fbG9uZzsKKwlyZXR1cm4gZmFidWxvdXNfcmVzdWx0ICogNDI7Cit9CitFT0YKK2NhdCA8PEVPRiA+ZXhwZWN0ZWQ5CisxCisxCisyCiszCiszCis0Cis1CitFT0YKKwordGl0bGUxMD0iVHdvIGNsb3NlIG1hdGNoZXMgdmVyc3VzIG9uZSBsZXNzIGNsb3NlIG1hdGNoIgorY2F0IDw8RU9GID5hMTAKK2FiY2RlZgorYWJjZGVmCitnaGlqa2wKK0VPRgorY2F0IDw8RU9GID5iMTAKK2doCithYmNkZWZ4CitFT0YKK2NhdCA8PEVPRiA+ZXhwZWN0ZWQxMAorRmluYWwKKzIKK0VPRgorCisjIFRoZSBmaXJzdCBsaW5lIG9mIGIgbWF0Y2hlcyBiZXN0IHdpdGggdGhlIGxhc3QgbGluZSBvZiBhLCBidXQgdGhlIG92ZXJhbGwKKyMgbWF0Y2ggaXMgYmV0dGVyIGlmIHdlIG1hdGNoIGl0IHdpdGggdGhlIHRoZSBmaXJzdCBsaW5lIG9mIGEuCit0aXRsZTExPSJQaWdneSBpbiB0aGUgbWlkZGxlIgorY2F0IDw8RU9GID5hMTEKK2FiY2RlZmcKK2lqa2xtbgorYWJjZGVmZ2gKK0VPRgorY2F0IDw8RU9GID5iMTEKK2FiY2RlZmdoeAoraWprbG0KK0VPRgorY2F0IDw8RU9GID5leHBlY3RlZDExCisxCisyCitFT0YKKwordGl0bGUxMj0iTm8gdHJhaWxpbmcgbmV3bGluZSIKK3ByaW50ZiAiYWJjXG5kZWYiID5hMTIKK3ByaW50ZiAiYWJ4XG5zdHUiID5iMTIKK2NhdCA8PEVPRiA+ZXhwZWN0ZWQxMgorMQorRmluYWwKK0VPRgorCit0aXRsZTEzPSJSZW9yZGVyIGluY2x1ZGVzIgorY2F0IDw8RU9GID5hMTMKKyNpbmNsdWRlICJjLmgiCisjaW5jbHVkZSAiYi5oIgorI2luY2x1ZGUgImEuaCIKKyNpbmNsdWRlICJlLmgiCisjaW5jbHVkZSAiZC5oIgorRU9GCitjYXQgPDxFT0YgPmIxMworI2luY2x1ZGUgImEuaCIKKyNpbmNsdWRlICJiLmgiCisjaW5jbHVkZSAiYy5oIgorI2luY2x1ZGUgImQuaCIKKyNpbmNsdWRlICJlLmgiCitFT0YKK2NhdCA8PEVPRiA+ZXhwZWN0ZWQxMworMworMgorMQorNQorNAorRU9GCisKK2xhc3RfdGVzdD0xMworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDIgJGxhc3RfdGVzdCkKKwlkbworCQkjIEFwcGVuZCBlYWNoIGxpbmUgaW4gYSBzZXBhcmF0ZSBjb21taXQgdG8gbWFrZSBpdCBlYXN5IHRvCisJCSMgY2hlY2sgd2hpY2ggb3JpZ2luYWwgbGluZSB0aGUgYmxhbWUgb3V0cHV0IHJlbGF0ZXMgdG8uCisKKwkJbGluZV9jb3VudD0wICYmCisJCXdoaWxlIElGUz0gcmVhZCBsaW5lCisJCWRvCisJCQlsaW5lX2NvdW50PSQoKGxpbmVfY291bnQrMSkpICYmCisJCQllY2hvICIkbGluZSIgPj4iJGkiICYmCisJCQlnaXQgYWRkICIkaSIgJiYKKwkJCXRlc3RfdGljayAmJgorCQkJR0lUX0FVVEhPUl9OQU1FPSIkbGluZV9jb3VudCIgZ2l0IGNvbW1pdCAtbSAiJGxpbmVfY291bnQiCisJCWRvbmUgPCJhJGkiCisJZG9uZSAmJgorCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAyICRsYXN0X3Rlc3QpCisJZG8KKwkJIyBPdmVyd3JpdGUgdGhlIGZpbGVzIHdpdGggdGhlIGZpbmFsIGNvbnRlbnQuCisJCWNwIGIkaSAkaSAmJgorCQlnaXQgYWRkICRpCisJZG9uZSAmJgorCXRlc3RfdGljayAmJgorCisJIyBDb21taXQgdGhlIGZpbmFsIGNvbnRlbnQgYWxsIGF0IG9uY2Ugc28gaXQgY2FuIGFsbCBiZQorCSMgcmVmZXJyZWQgdG8gd2l0aCB0aGUgc2FtZSBjb21taXQgSUQuCisJR0lUX0FVVEhPUl9OQU1FPUZpbmFsIGdpdCBjb21taXQgLW0gRmluYWwgJiYKKworCUlHTk9SRU1FPSQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCitmb3IgaSBpbiAkKHRlc3Rfc2VxIDIgJGxhc3RfdGVzdCk7IGRvCisJZXZhbCB0aXRsZT0iXCR0aXRsZSRpIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiR0aXRsZSIgXAorCSJnaXQgYmxhbWUgLU05IC0taWdub3JlLXJldiAkSUdOT1JFTUUgJGkgPm91dHB1dCAmJgorCXNlZCAtZSBcIiRwaWNrX2F1dGhvclwiIG91dHB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQkaSBhY3R1YWwiCitkb25lCisKKyMgVGhpcyBpbnZva2VkIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gdGhlIGNodW5rIGNhbGxiYWNrIHdhcyBjYWxsZWQKKyMgd2l0aCBhIHplcm8gbGVuZ3RoIHBhcmVudCBjaHVuayBhbmQgdGhlcmUgd2VyZSBubyBtb3JlIHN1c3BlY3RzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnRGlmZiBjaHVua3Mgd2l0aCBubyBzdXNwZWN0cycgJworCXRlc3Rfd3JpdGVfbGluZXMgeHkxIEEgQiBDIHh5MSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0xIGdpdCBjb21taXQgLW0gMSAmJgorCisJdGVzdF93cml0ZV9saW5lcyB4eTIgQSBCIHh5MiBDIHh5MiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0yIGdpdCBjb21taXQgLW0gMiAmJgorCVJFVl8yPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJdGVzdF93cml0ZV9saW5lcyB4eTMgQSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0zIGdpdCBjb21taXQgLW0gMyAmJgorCVJFVl8zPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJdGVzdF93cml0ZV9saW5lcyAxIDEgPmV4cGVjdGVkICYmCisKKwlnaXQgYmxhbWUgLS1pZ25vcmUtcmV2ICRSRVZfMiAtLWlnbm9yZS1yZXYgJFJFVl8zIGZpbGUgPm91dHB1dCAmJgorCXNlZCAtZSAiJHBpY2tfYXV0aG9yIiBvdXRwdXQgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3NpdGlvbiBtYXRjaGluZycgJworCXRlc3Rfd3JpdGVfbGluZXMgYWJjIGRlZiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPTEgZ2l0IGNvbW1pdCAtbSAxICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIGFiYyBkZWYgYWJjIGRlZiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPTIgZ2l0IGNvbW1pdCAtbSAyICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIGFiY3ggZGVmeCBhYmN4IGRlZnggPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0zIGdpdCBjb21taXQgLW0gMyAmJgorCVJFVl8zPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJdGVzdF93cml0ZV9saW5lcyBhYmN5IGRlZnkgYWJjeCBkZWZ4ID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9NCBnaXQgY29tbWl0IC1tIDQgJiYKKwlSRVZfND0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgMSAxIDIgMiA+ZXhwZWN0ZWQgJiYKKworCWdpdCBibGFtZSAtLWlnbm9yZS1yZXYgJFJFVl8zIC0taWdub3JlLXJldiAkUkVWXzQgZmlsZTIgPm91dHB1dCAmJgorCXNlZCAtZSAiJHBpY2tfYXV0aG9yIiBvdXRwdXQgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisjIFRoaXMgZmFpbHMgaWYgZWFjaCBibGFtZSBlbnRyeSBpcyBwcm9jZXNzZWQgaW5kZXBlbmRlbnRseSBpbnN0ZWFkIG9mCisjIHByb2Nlc3NpbmcgZWFjaCBkaWZmIGNoYW5nZSBpbiBmdWxsLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2VydmUgb3JkZXInICcKKwl0ZXN0X3dyaXRlX2xpbmVzIGJjZGUgPmZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0xIGdpdCBjb21taXQgLW0gMSAmJgorCisJdGVzdF93cml0ZV9saW5lcyBiY2RlIGZnaGlqID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9MiBnaXQgY29tbWl0IC1tIDIgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgYmNkZSBmZ2hpaiBhYmNkID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9MyBnaXQgY29tbWl0IC1tIDMgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgYWJjZHggZmdoaWp4IGJjZGV4ID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9NCBnaXQgY29tbWl0IC1tIDQgJiYKKwlSRVZfND0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgYWJjZHggZmdoaWp5IGJjZGV4ID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9NSBnaXQgY29tbWl0IC1tIDUgJiYKKwlSRVZfNT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgPmV4cGVjdGVkICYmCisKKwlnaXQgYmxhbWUgLS1pZ25vcmUtcmV2ICRSRVZfNCAtLWlnbm9yZS1yZXYgJFJFVl81IGZpbGUzID5vdXRwdXQgJiYKKwlzZWQgLWUgIiRwaWNrX2F1dGhvciIgb3V0cHV0ID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDAxLXNlbmQtZW1haWwuc2ggYi90L3Q5MDAxLXNlbmQtZW1haWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTBmNjFjMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkwMDEtc2VuZC1lbWFpbC5zaApAQCAtMCwwICsxLDIxMzMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc2VuZC1lbWFpbCcKKy4gLi90ZXN0LWxpYi5zaAorCisjIE1heSBiZSBhbHRlcmVkIGxhdGVyIGluIHRoZSB0ZXN0CitQUkVSRVE9IlBFUkwiCisKK3JlcGxhY2VfdmFyaWFibGVfZmllbGRzICgpIHsKKwlzZWQJLWUgInMvXlwoRGF0ZTpcKS4qL1wxIERBVEUtU1RSSU5HLyIgXAorCQktZSAicy9eXChNZXNzYWdlLUlkOlwpLiovXDEgTUVTU0FHRS1JRC1TVFJJTkcvIiBcCisJCS1lICJzL15cKFgtTWFpbGVyOlwpLiovXDEgWC1NQUlMRVItU1RSSU5HLyIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdwcmVwYXJlIHJlZmVyZW5jZSB0cmVlJyAnCisJZWNobyAiMUEgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIiA+ZmlsZSAmJgorCWVjaG8gImxhenkgZG9nIiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkEiIGdpdCBjb21taXQgLWEgLW0gIkluaXRpYWwuIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ1NldHVwIGhlbHBlciB0b29sJyAnCisJd3JpdGVfc2NyaXB0IGZha2Uuc2VuZG1haWwgPDwtXEVPRiAmJgorCXNoaWZ0CisJb3V0cHV0PTEKKwl3aGlsZSB0ZXN0IC1mIGNvbW1hbmRsaW5lJG91dHB1dAorCWRvCisJCW91dHB1dD0kKCgkb3V0cHV0KzEpKQorCWRvbmUKKwlmb3IgYQorCWRvCisJCWVjaG8gIiEkYSEiCisJZG9uZSA+Y29tbWFuZGxpbmUkb3V0cHV0CisJY2F0ID4ibXNndHh0JG91dHB1dCIKKwlFT0YKKwlnaXQgYWRkIGZha2Uuc2VuZG1haWwgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkEiIGdpdCBjb21taXQgLWEgLW0gIlNlY29uZC4iCisnCisKK2NsZWFuX2Zha2Vfc2VuZG1haWwgKCkgeworCXJtIC1mIGNvbW1hbmRsaW5lKiBtc2d0eHQqCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnRXh0cmFjdCBwYXRjaGVzJyAnCisJcGF0Y2hlcz0kKGdpdCBmb3JtYXQtcGF0Y2ggLXMgLS1jYz0iT25lIDxvbmVAZXhhbXBsZS5jb20+IiAtLWNjPXR3b0BleGFtcGxlLmNvbSAtbiBIRUFEXjEpCisnCisKKyMgVGVzdCBubyBjb25maXJtIGVhcmx5IHRvIGVuc3VyZSByZW1haW5pbmcgdGVzdHMgd2lsbCBub3QgaGFuZwordGVzdF9ub19jb25maXJtICgpIHsKKwlybSAtZiBub19jb25maXJtX29rYXkKKwllY2hvIG4gfCBcCisJCUdJVF9TRU5EX0VNQUlMX05PVFRZPTEgXAorCQlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkQCBcCisJCSRwYXRjaGVzID5zdGRvdXQgJiYKKwkJISBncmVwICJTZW5kIHRoaXMgZW1haWwiIHN0ZG91dCAmJgorCQk+bm9fY29uZmlybV9va2F5Cit9CisKKyMgRXhpdCBpbW1lZGlhdGVseSB0byBwcmV2ZW50IGhhbmcgaWYgYSBuby1jb25maXJtIHRlc3QgZmFpbHMKK2NoZWNrX25vX2NvbmZpcm0gKCkgeworCWlmICEgdGVzdCAtZiBub19jb25maXJtX29rYXkKKwl0aGVuCisJCXNheSAnY29uZmlybSB0ZXN0IGZhaWxlZDsgc2tpcHBpbmcgcmVtYWluaW5nIHRlc3RzIHRvIHByZXZlbnQgaGFuZ2luZycKKwkJUFJFUkVRPSIkUFJFUkVRLENIRUNLX05PX0NPTkZJUk0iCisJZmkKKwlyZXR1cm4gMAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ05vIGNvbmZpcm0gd2l0aCAtLXN1cHByZXNzLWNjJyAnCisJdGVzdF9ub19jb25maXJtIC0tc3VwcHJlc3MtY2M9c29iICYmCisJY2hlY2tfbm9fY29uZmlybQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnTm8gY29uZmlybSB3aXRoIC0tY29uZmlybT1uZXZlcicgJworCXRlc3Rfbm9fY29uZmlybSAtLWNvbmZpcm09bmV2ZXIgJiYKKwljaGVja19ub19jb25maXJtCisnCisKKyMgbGVhdmUgc2VuZGVtYWlsLmNvbmZpcm0gc2V0IHRvIG5ldmVyIGFmdGVyIHRoaXMgc28gdGhhdCBub25lIG9mIHRoZQorIyByZW1haW5pbmcgdGVzdHMgcHJvbXB0IHVuaW50ZW50aW9uYWxseS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnTm8gY29uZmlybSB3aXRoIHNlbmRlbWFpbC5jb25maXJtPW5ldmVyJyAnCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuY29uZmlybSBuZXZlciAmJgorCXRlc3Rfbm9fY29uZmlybSAtLWNvbXBvc2UgLS1zdWJqZWN0PWZvbyAmJgorCWNoZWNrX25vX2NvbmZpcm0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdTZW5kIHBhdGNoZXMnICcKKwlnaXQgc2VuZC1lbWFpbCAtLXN1cHByZXNzLWNjPXNvYiAtLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIC0tdG89bm9ib2R5QGV4YW1wbGUuY29tIC0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiAkcGF0Y2hlcyAyPmVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRgorCSFub2JvZHlAZXhhbXBsZS5jb20hCisJIWF1dGhvckBleGFtcGxlLmNvbSEKKwkhb25lQGV4YW1wbGUuY29tIQorCSF0d29AZXhhbXBsZS5jb20hCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnVmVyaWZ5IGNvbW1hbmRsaW5lJyAnCisJdGVzdF9jbXAgZXhwZWN0ZWQgY29tbWFuZGxpbmUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnU2VuZCBwYXRjaGVzIHdpdGggLS1lbnZlbG9wZS1zZW5kZXInICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZ2l0IHNlbmQtZW1haWwgLS1lbnZlbG9wZS1zZW5kZXI9IlBhdGNoIENvbnRyaWJ1dG9yIDxwYXRjaEBleGFtcGxlLmNvbT4iIC0tc3VwcHJlc3MtY2M9c29iIC0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiICRwYXRjaGVzIDI+ZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GCisJIXBhdGNoQGV4YW1wbGUuY29tIQorCSEtaSEKKwkhbm9ib2R5QGV4YW1wbGUuY29tIQorCSFhdXRob3JAZXhhbXBsZS5jb20hCisJIW9uZUBleGFtcGxlLmNvbSEKKwkhdHdvQGV4YW1wbGUuY29tIQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ1ZlcmlmeSBjb21tYW5kbGluZScgJworCXRlc3RfY21wIGV4cGVjdGVkIGNvbW1hbmRsaW5lMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ1NlbmQgcGF0Y2hlcyB3aXRoIC0tZW52ZWxvcGUtc2VuZGVyPWF1dG8nICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZ2l0IHNlbmQtZW1haWwgLS1lbnZlbG9wZS1zZW5kZXI9YXV0byAtLXN1cHByZXNzLWNjPXNvYiAtLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIC0tdG89bm9ib2R5QGV4YW1wbGUuY29tIC0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiAkcGF0Y2hlcyAyPmVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRgorCSFub2JvZHlAZXhhbXBsZS5jb20hCisJIS1pIQorCSFub2JvZHlAZXhhbXBsZS5jb20hCisJIWF1dGhvckBleGFtcGxlLmNvbSEKKwkhb25lQGV4YW1wbGUuY29tIQorCSF0d29AZXhhbXBsZS5jb20hCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnVmVyaWZ5IGNvbW1hbmRsaW5lJyAnCisJdGVzdF9jbXAgZXhwZWN0ZWQgY29tbWFuZGxpbmUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0IGZvciBjYyB0cmFpbGVyJyAiCitjYXQgPmV4cGVjdGVkLWNjIDw8XEVPRgorIXJlY2lwaWVudEBleGFtcGxlLmNvbSEKKyFhdXRob3JAZXhhbXBsZS5jb20hCishb25lQGV4YW1wbGUuY29tIQorIXR3b0BleGFtcGxlLmNvbSEKKyF0aHJlZUBleGFtcGxlLmNvbSEKKyFmb3VyQGV4YW1wbGUuY29tIQorIWZpdmVAZXhhbXBsZS5jb20hCishc2l4QGV4YW1wbGUuY29tIQorRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnY2MgdHJhaWxlciB3aXRoIHZhcmlvdXMgc3ludGF4JyAnCisJdGVzdF9jb21taXQgY2MtdHJhaWxlciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiIgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLUYgLSA8PC1FT0YgJiYKKwlUZXN0IENjOiB0cmFpbGVycy4KKworCUNjOiBvbmVAZXhhbXBsZS5jb20KKwlDYzogPHR3b0BleGFtcGxlLmNvbT4gIyB0cmFpbGluZyBjb21tZW50cyBhcmUgaWdub3JlZAorCUNjOiA8dGhyZWVAZXhhbXBsZS5jb20+LCA8bm90LmZvdXJAZXhhbXBsZS5jb20+IG9uZSBhZGRyZXNzIHBlciBsaW5lCisJQ2M6ICJTb21lICMgQm9keSIgPGZvdXJAZXhhbXBsZS5jb20+IFsgPGFsc28uYS5jb21tZW50PiBdCisJQ2M6IGZpdmVAZXhhbXBsZS5jb20gIyBub3Quc2l4QGV4YW1wbGUuY29tCisJQ2M6IHNpeEBleGFtcGxlLmNvbSwgbm90LnNldmVuQGV4YW1wbGUuY29tCisJRU9GCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIC0xIC0tdG89cmVjaXBpZW50QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtY2MgY29tbWFuZGxpbmUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZmFrZSBnZXRfbWFpbnRhaW5lci5wbCBzY3JpcHQgZm9yIGNjIHRyYWlsZXInICIKKwl3cml0ZV9zY3JpcHQgZXhwZWN0ZWQtY2Mtc2NyaXB0LnNoIDw8LUVPRgorCWVjaG8gJ09uZSBQZXJzb24gPG9uZUBleGFtcGxlLmNvbT4gKHN1cHBvcnRlcjpUSElTIChGT08vYmFyKSknCisJZWNobyAnVHdvIFBlcnNvbiA8dHdvQGV4YW1wbGUuY29tPiAobWFpbnRhaW5lcjpUSElTIFRISU5HKScKKwllY2hvICdUaGlyZCBMaXN0IDx0aHJlZUBleGFtcGxlLmNvbT4gKG1vZGVyYXRlZCBsaXN0OlRISVMgVEhJTkcgKEZPTy9iYXIpKScKKwllY2hvICc8Zm91ckBleGFtcGxlLmNvbT4gKG1vZGVyYXRlZCBsaXN0OkZPUiBUSElORyknCisJZWNobyAnZml2ZUBleGFtcGxlLmNvbSAob3BlbiBsaXN0OkZPUiBUSElORyAoRk9PL2JhcikpJworCWVjaG8gJ3NpeEBleGFtcGxlLmNvbSAob3BlbiBsaXN0KScKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdjYyB0cmFpbGVyIHdpdGggZ2V0X21haW50YWluZXIucGwgb3V0cHV0JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIC0xIC0tdG89cmVjaXBpZW50QGV4YW1wbGUuY29tIFwKKwkJLS1jYy1jbWQ9Li9leHBlY3RlZC1jYy1zY3JpcHQuc2ggXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1jYyBjb21tYW5kbGluZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICIKK2NhdCA+ZXhwZWN0ZWQtc2hvdy1hbGwtaGVhZGVycyA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhtYm94KSBBZGRpbmcgY2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhtYm94KSBBZGRpbmcgY2M6IHR3b0BleGFtcGxlLmNvbSBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGNjQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8YXV0aG9yQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8b25lQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dHdvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8YmNjQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IGNjQGV4YW1wbGUuY29tLAorCUEgPGF1dGhvckBleGFtcGxlLmNvbT4sCisJT25lIDxvbmVAZXhhbXBsZS5jb20+LAorCXR3b0BleGFtcGxlLmNvbQorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCitJbi1SZXBseS1UbzogPHVuaXF1ZS1tZXNzYWdlLWlkQGV4YW1wbGUuY29tPgorUmVmZXJlbmNlczogPHVuaXF1ZS1tZXNzYWdlLWlkQGV4YW1wbGUuY29tPgorUmVwbHktVG86IFJlcGx5IDxyZXBseUBleGFtcGxlLmNvbT4KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1Jlc3VsdDogT0sKK0VPRgorIgorCit0ZXN0X3N1cHByZXNzX3NlbGYgKCkgeworCXRlc3RfY29tbWl0ICQzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUReIiAmJgorCisJd3JpdGVfc2NyaXB0IGNjY21kLXNlZCA8PC1FT0YgJiYKKwkJc2VkIC1uIC1lIHMvXmNjY21kLS0vL3AgIlwkMSIKKwlFT0YKKworCWdpdCBjb21taXQgLS1hbWVuZCAtLWF1dGhvcj0iJDEgPCQyPiIgLUYgLSAmJgorCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID4ic3VwcHJlc3Mtc2VsZi0kMy5wYXRjaCIgJiYKKworCWdpdCBzZW5kLWVtYWlsIC0tZnJvbT0iJDEgPCQyPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tY2MtY21kPS4vY2NjbWQtc2VkIFwKKwkJLS1zdXBwcmVzcy1jYz1zZWxmIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJc3VwcHJlc3Mtc2VsZi0kMy5wYXRjaCAmJgorCisJbXYgbXNndHh0MSBtc2d0eHQxLSQzICYmCisJc2VkIC1lICcvXiQvcScgbXNndHh0MS0kMyA+Im1zZ2hkcjEtJDMiICYmCisKKwkoZ3JlcCAnXkNjOicgbXNnaGRyMS0kMyA+ImFjdHVhbC1uby1jYy0kMyI7CisJIHRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwtbm8tY2MtJDMpCit9CisKK3Rlc3Rfc3VwcHJlc3Nfc2VsZl91bnF1b3RlZCAoKSB7CisJdGVzdF9zdXBwcmVzc19zZWxmICIkMSIgIiQyIiAidW5xdW90ZWQtJDMiIDw8LUVPRgorCQl0ZXN0IHN1cHByZXNzLWNjLnNlbGYgdW5xdW90ZWQtJDMgd2l0aCBuYW1lICQxIGVtYWlsICQyCisKKwkJdW5xdW90ZWQtJDMKKworCQljY2NtZC0tJDEgPCQyPgorCisJCUNjOiAkMSA8JDI+CisJCVNpZ25lZC1vZmYtYnk6ICQxIDwkMj4KKwlFT0YKK30KKwordGVzdF9zdXBwcmVzc19zZWxmX3F1b3RlZCAoKSB7CisJdGVzdF9zdXBwcmVzc19zZWxmICIkMSIgIiQyIiAicXVvdGVkLSQzIiA8PC1FT0YKKwkJdGVzdCBzdXBwcmVzcy1jYy5zZWxmIHF1b3RlZC0kMyB3aXRoIG5hbWUgJDEgZW1haWwgJDIKKworCQlxdW90ZWQtJDMKKworCQljY2NtZC0tIiQxIiA8JDI+CisKKwkJQ2M6ICQxIDwkMj4KKwkJQ2M6ICIkMSIgPCQyPgorCQlTaWduZWQtb2ZmLWJ5OiAkMSA8JDI+CisJCVNpZ25lZC1vZmYtYnk6ICIkMSIgPCQyPgorCUVPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbGYgbmFtZSBpcyBzdXBwcmVzc2VkJyAiCisJdGVzdF9zdXBwcmVzc19zZWxmX3VucXVvdGVkICdBIFUgVGhvcicgJ2F1dGhvckBleGFtcGxlLmNvbScgXAorCQknc2VsZl9uYW1lX3N1cHByZXNzZWQnCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VsZiBuYW1lIHdpdGggZG90IGlzIHN1cHByZXNzZWQnICIKKwl0ZXN0X3N1cHByZXNzX3NlbGZfcXVvdGVkICdBIFUuIFRob3InICdhdXRob3JAZXhhbXBsZS5jb20nIFwKKwkJJ3NlbGZfbmFtZV9kb3Rfc3VwcHJlc3NlZCcKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdub24tYXNjaWkgc2VsZiBuYW1lIGlzIHN1cHByZXNzZWQnICIKKwl0ZXN0X3N1cHByZXNzX3NlbGZfcXVvdGVkICdGw7zDsW7DvSBOw6Jtw6knICdvZGRfPz1tYWlsQGV4YW1wbGUuY29tJyBcCisJCSdub25fYXNjaWlfc2VsZl9zdXBwcmVzc2VkJworIgorCisjIFRoaXMgbmFtZSBpcyBsb25nIGVub3VnaCB0byBmb3JjZSBmb3JtYXQtcGF0Y2ggdG8gc3BsaXQgaXQgaW50byBtdWx0aXBsZQorIyBlbmNvZGVkLXdvcmRzLCBhc3N1bWluZyBpdCB1c2VzIFVURi04IHdpdGggdGhlICJRIiBlbmNvZGluZy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnbG9uZyBub24tYXNjaWkgc2VsZiBuYW1lIGlzIHN1cHByZXNzZWQnICIKKwl0ZXN0X3N1cHByZXNzX3NlbGZfcXVvdGVkICfGkcO8w7Fuw63EmcWZIOKCrC4gTsOi4bmBw6knICdvZGRfPz1tYWlsQGV4YW1wbGUuY29tJyBcCisJCSdsb25nX25vbl9hc2NpaV9zZWxmX3N1cHByZXNzZWQnCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2FuaXRpemVkIHNlbGYgbmFtZSBpcyBzdXBwcmVzc2VkJyAiCisJdGVzdF9zdXBwcmVzc19zZWxmX3VucXVvdGVkICdcIkEgVS4gVGhvclwiJyAnYXV0aG9yQGV4YW1wbGUuY29tJyBcCisJCSdzZWxmX25hbWVfc2FuaXRpemVkX3N1cHByZXNzZWQnCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnU2hvdyBhbGwgaGVhZGVycycgJworCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1kcnktcnVuIFwKKwkJLS1zdXBwcmVzcy1jYz1zb2IgXAorCQktLWZyb209IkV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+IiBcCisJCS0tcmVwbHktdG89IlJlcGx5IDxyZXBseUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz10b0BleGFtcGxlLmNvbSBcCisJCS0tY2M9Y2NAZXhhbXBsZS5jb20gXAorCQktLWJjYz1iY2NAZXhhbXBsZS5jb20gXAorCQktLWluLXJlcGx5LXRvPSI8dW5pcXVlLW1lc3NhZ2UtaWRAZXhhbXBsZS5jb20+IiBcCisJCS0tc210cC1zZXJ2ZXIgcmVsYXkuZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyB8IHJlcGxhY2VfdmFyaWFibGVfZmllbGRzIFwKKwkJPmFjdHVhbC1zaG93LWFsbC1oZWFkZXJzICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtc2hvdy1hbGwtaGVhZGVycyBhY3R1YWwtc2hvdy1hbGwtaGVhZGVycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ1Byb21wdGluZyB3b3JrcycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwkoZWNobyAidG9AZXhhbXBsZS5jb20iICYmCisJIGVjaG8gIiIKKwkpIHwgR0lUX1NFTkRfRU1BSUxfTk9UVFk9MSBnaXQgc2VuZC1lbWFpbCBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRwYXRjaGVzIFwKKwkJMj5lcnJvcnMgJiYKKwkJZ3JlcCAiXkZyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+XCQiIG1zZ3R4dDEgJiYKKwkJZ3JlcCAiXlRvOiB0b0BleGFtcGxlLmNvbVwkIiBtc2d0eHQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSxBVVRPSURFTlQgJ2ltcGxpY2l0IGlkZW50IGlzIGFsbG93ZWQnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJKHNhbmVfdW5zZXQgR0lUX0FVVEhPUl9OQU1FICYmCisJc2FuZV91bnNldCBHSVRfQVVUSE9SX0VNQUlMICYmCisJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX05BTUUgJiYKKwlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwlHSVRfU0VORF9FTUFJTF9OT1RUWT0xIGdpdCBzZW5kLWVtYWlsIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJLS10bz10b0BleGFtcGxlLmNvbSBcCisJCSRwYXRjaGVzIDwvZGV2L251bGwgMj5lcnJvcnMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSwhQVVUT0lERU5UICdicm9rZW4gaW1wbGljaXQgaWRlbnQgYWJvcnRzIHNlbmQtZW1haWwnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJKHNhbmVfdW5zZXQgR0lUX0FVVEhPUl9OQU1FICYmCisJc2FuZV91bnNldCBHSVRfQVVUSE9SX0VNQUlMICYmCisJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX05BTUUgJiYKKwlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwlHSVRfU0VORF9FTUFJTF9OT1RUWT0xICYmIGV4cG9ydCBHSVRfU0VORF9FTUFJTF9OT1RUWSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLWVtYWlsIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJLS10bz10b0BleGFtcGxlLmNvbSBcCisJCSRwYXRjaGVzIDwvZGV2L251bGwgMj5lcnJvcnMgJiYKKwl0ZXN0X2kxOG5ncmVwICJ0ZWxsIG1lIHdobyB5b3UgYXJlIiBlcnJvcnMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgdG9jbWQgYW5kIGNjY21kIHNjcmlwdHMnICcKKwl3cml0ZV9zY3JpcHQgdG9jbWQtc2VkIDw8LVxFT0YgJiYKKwlzZWQgLW4gLWUgInMvXnRvY21kLS0vL3AiICIkMSIKKwlFT0YKKwl3cml0ZV9zY3JpcHQgY2NjbWQtc2VkIDw8LVxFT0YKKwlzZWQgLW4gLWUgInMvXmNjY21kLS0vL3AiICIkMSIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICd0b2NtZCB3b3JrcycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwljcCAkcGF0Y2hlcyB0b2NtZC5wYXRjaCAmJgorCWVjaG8gdG9jbWQtLXRvY21kQGV4YW1wbGUuY29tID4+dG9jbWQucGF0Y2ggJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvLWNtZD0uL3RvY21kLXNlZCBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCXRvY21kLnBhdGNoIFwKKwkJJiYKKwlncmVwICJeVG86IHRvY21kQGV4YW1wbGUuY29tIiBtc2d0eHQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnY2NjbWQgd29ya3MnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJY3AgJHBhdGNoZXMgY2NjbWQucGF0Y2ggJiYKKwllY2hvICJjY2NtZC0tICBjY2NtZEBleGFtcGxlLmNvbSIgPj5jY2NtZC5wYXRjaCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1jYy1jbWQ9Li9jY2NtZC1zZWQgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQljY2NtZC5wYXRjaCBcCisJCSYmCisJZ3JlcCAiXgljY2NtZEBleGFtcGxlLmNvbSIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3JlamVjdCBsb25nIGxpbmVzJyAnCisJejg9enp6enp6enogJiYKKwl6NjQ9JHo4JHo4JHo4JHo4JHo4JHo4JHo4JHo4ICYmCisJejUxMj0kejY0JHo2NCR6NjQkejY0JHo2NCR6NjQkejY0JHo2NCAmJgorCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwljcCAkcGF0Y2hlcyBsb25nbGluZS5wYXRjaCAmJgorCWVjaG8gJHo1MTIkejUxMiA+PmxvbmdsaW5lLnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQktLXRyYW5zZmVyLWVuY29kaW5nPThiaXQgXAorCQkkcGF0Y2hlcyBsb25nbGluZS5wYXRjaCBcCisJCTI+ZXJyb3JzICYmCisJZ3JlcCBsb25nbGluZS5wYXRjaCBlcnJvcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdubyBwYXRjaCB3YXMgc2VudCcgJworCSEgdGVzdCAtZSBjb21tYW5kbGluZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdBdXRob3IgRnJvbTogaW4gbWVzc2FnZSBib2R5JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhdGNoZXMgJiYKKwlzZWQgIjEsL15cJC9kIiA8bXNndHh0MSA+bXNnYm9keTEgJiYKKwlncmVwICJGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IiBtc2dib2R5MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ0F1dGhvciBGcm9tOiBub3QgaW4gbWVzc2FnZSBib2R5JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJBIDxhdXRob3JAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhdGNoZXMgJiYKKwlzZWQgIjEsL15cJC9kIiA8bXNndHh0MSA+bXNnYm9keTEgJiYKKwkhIGdyZXAgIkZyb206IEEgPGF1dGhvckBleGFtcGxlLmNvbT4iIG1zZ2JvZHkxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnYWxsb3cgbG9uZyBsaW5lcyB3aXRoIC0tbm8tdmFsaWRhdGUnICcKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCS0tbm8tdmFsaWRhdGUgXAorCQkkcGF0Y2hlcyBsb25nbGluZS5wYXRjaCBcCisJCTI+ZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2hvcnQgbGluZXMgd2l0aCBhdXRvIGVuY29kaW5nIGFyZSA4Yml0JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJBIDxhdXRob3JAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJLS10cmFuc2Zlci1lbmNvZGluZz1hdXRvIFwKKwkJJHBhdGNoZXMgJiYKKwlncmVwICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0IiBtc2d0eHQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnbG9uZyBsaW5lcyB3aXRoIGF1dG8gZW5jb2RpbmcgYXJlIHF1b3RlZC1wcmludGFibGUnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQktLXRyYW5zZmVyLWVuY29kaW5nPWF1dG8gXAorCQktLW5vLXZhbGlkYXRlIFwKKwkJbG9uZ2xpbmUucGF0Y2ggJiYKKwlncmVwICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlIiBtc2d0eHQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnY2FycmlhZ2UgcmV0dXJucyB3aXRoIGF1dG8gZW5jb2RpbmcgYXJlIHF1b3RlZC1wcmludGFibGUnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJY3AgJHBhdGNoZXMgY3IucGF0Y2ggJiYKKwlwcmludGYgInRoaXMgaXMgYSBsaW5lXHJcbiIgPj5jci5wYXRjaCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJLS10cmFuc2Zlci1lbmNvZGluZz1hdXRvIFwKKwkJLS1uby12YWxpZGF0ZSBcCisJCWNyLnBhdGNoICYmCisJZ3JlcCAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZSIgbXNndHh0MQorJworCitmb3IgZW5jIGluIGF1dG8gcXVvdGVkLXByaW50YWJsZSBiYXNlNjQKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICItLXZhbGlkYXRlIHBhc3NlcyB3aXRoIGVuY29kaW5nICRlbmMiICcKKwkJZ2l0IHNlbmQtZW1haWwgXAorCQkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkJLS10cmFuc2Zlci1lbmNvZGluZz0kZW5jIFwKKwkJCS0tdmFsaWRhdGUgXAorCQkJJHBhdGNoZXMgbG9uZ2xpbmUucGF0Y2gKKwknCisKK2RvbmUKKworZm9yIGVuYyBpbiA3Yml0IDhiaXQgcXVvdGVkLXByaW50YWJsZSBiYXNlNjQKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICItLXRyYW5zZmVyLWVuY29kaW5nPSRlbmMgcHJvZHVjZXMgY29ycmVjdCBoZWFkZXIiICcKKwkJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCQlnaXQgc2VuZC1lbWFpbCBcCisJCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCQktLXRyYW5zZmVyLWVuY29kaW5nPSRlbmMgXAorCQkJJHBhdGNoZXMgJiYKKwkJZ3JlcCAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogJGVuYyIgbXNndHh0MQorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdJbnZhbGlkIEluLVJlcGx5LVRvJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1pbi1yZXBseS10bz0iICIgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkcGF0Y2hlcyBcCisJCTI+ZXJyb3JzICYmCisJISBncmVwICJeSW4tUmVwbHktVG86IDwgKj4iIG1zZ3R4dDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdWYWxpZCBJbi1SZXBseS1UbyB3aGVuIHByb21wdGluZycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwkoZWNobyAiRnJvbSBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPiIgJiYKKwkgZWNobyAiVG8gRXhhbXBsZSA8dG9AZXhhbXBsZS5jb20+IiAmJgorCSBlY2hvICIiCisJKSB8IEdJVF9TRU5EX0VNQUlMX05PVFRZPTEgZ2l0IHNlbmQtZW1haWwgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkcGF0Y2hlcyAyPmVycm9ycyAmJgorCSEgZ3JlcCAiXkluLVJlcGx5LVRvOiA8ICo+IiBtc2d0eHQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnSW4tUmVwbHktVG8gd2l0aG91dCAtLWNoYWluLXJlcGx5LXRvJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWVjaG8gIjx1bmlxdWUtbWVzc2FnZS1pZEBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tbm8tY2hhaW4tcmVwbHktdG8gXAorCQktLWluLXJlcGx5LXRvPSIkKGNhdCBleHBlY3QpIiBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRwYXRjaGVzICRwYXRjaGVzICRwYXRjaGVzIFwKKwkJMj5lcnJvcnMgJiYKKwkjIFRoZSBmaXJzdCBtZXNzYWdlIGlzIGEgcmVwbHkgdG8gLS1pbi1yZXBseS10bworCXNlZCAtbiAtZSAicy9eSW4tUmVwbHktVG86ICpcKC4qXCkvXDEvcCIgbXNndHh0MSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCSMgU2Vjb25kIGFuZCBzdWJzZXF1ZW50IG1lc3NhZ2VzIGFyZSByZXBsaWVzIHRvIHRoZSBmaXJzdCBvbmUKKwlzZWQgLW4gLWUgInMvXk1lc3NhZ2UtSWQ6ICpcKC4qXCkvXDEvcCIgbXNndHh0MSA+ZXhwZWN0ICYmCisJc2VkIC1uIC1lICJzL15Jbi1SZXBseS1UbzogKlwoLipcKS9cMS9wIiBtc2d0eHQyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJc2VkIC1uIC1lICJzL15Jbi1SZXBseS1UbzogKlwoLipcKS9cMS9wIiBtc2d0eHQzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnSW4tUmVwbHktVG8gd2l0aCAtLWNoYWluLXJlcGx5LXRvJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWVjaG8gIjx1bmlxdWUtbWVzc2FnZS1pZEBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tY2hhaW4tcmVwbHktdG8gXAorCQktLWluLXJlcGx5LXRvPSIkKGNhdCBleHBlY3QpIiBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRwYXRjaGVzICRwYXRjaGVzICRwYXRjaGVzIFwKKwkJMj5lcnJvcnMgJiYKKwlzZWQgLW4gLWUgInMvXkluLVJlcGx5LVRvOiAqXCguKlwpL1wxL3AiIG1zZ3R4dDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlzZWQgLW4gLWUgInMvXk1lc3NhZ2UtSWQ6ICpcKC4qXCkvXDEvcCIgbXNndHh0MSA+ZXhwZWN0ICYmCisJc2VkIC1uIC1lICJzL15Jbi1SZXBseS1UbzogKlwoLipcKS9cMS9wIiBtc2d0eHQyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJc2VkIC1uIC1lICJzL15NZXNzYWdlLUlkOiAqXCguKlwpL1wxL3AiIG1zZ3R4dDIgPmV4cGVjdCAmJgorCXNlZCAtbiAtZSAicy9eSW4tUmVwbHktVG86ICpcKC4qXCkvXDEvcCIgbXNndHh0MyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGZha2UgZWRpdG9yJyAnCisJd3JpdGVfc2NyaXB0IGZha2UtZWRpdG9yIDw8LVxFT0YKKwllY2hvIGZha2UgZWRpdCA+PiIkMSIKKwlFT0YKKycKKwordGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvZmFrZS1lZGl0b3IiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1jb21wb3NlIHdvcmtzJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwktLWNvbXBvc2UgLS1zdWJqZWN0IGZvbyBcCisJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJJHBhdGNoZXMgXAorCTI+ZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnZmlyc3QgbWVzc2FnZSBpcyBjb21wb3NlIHRleHQnICcKKwlncmVwICJeZmFrZSBlZGl0IiBtc2d0eHQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2Vjb25kIG1lc3NhZ2UgaXMgcGF0Y2gnICcKKwlncmVwICJTdWJqZWN0Oi4qU2Vjb25kIiBtc2d0eHQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAiCitjYXQgPmV4cGVjdGVkLXN1cHByZXNzLXNvYiA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhtYm94KSBBZGRpbmcgY2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhtYm94KSBBZGRpbmcgY2M6IHR3b0BleGFtcGxlLmNvbSBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGNjQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8YXV0aG9yQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8b25lQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dHdvQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IGNjQGV4YW1wbGUuY29tLAorCUEgPGF1dGhvckBleGFtcGxlLmNvbT4sCisJT25lIDxvbmVAZXhhbXBsZS5jb20+LAorCXR3b0BleGFtcGxlLmNvbQorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitSZXN1bHQ6IE9LCitFT0YKKyIKKwordGVzdF9zdXBwcmVzc2lvbiAoKSB7CisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLXN1cHByZXNzLWNjPSQxICR7MisiLS1zdXBwcmVzcy1jYz0kMiJ9IFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPiIgXAorCQktLXRvPXRvQGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlciByZWxheS5leGFtcGxlLmNvbSBcCisJCSRwYXRjaGVzIHwgcmVwbGFjZV92YXJpYWJsZV9maWVsZHMgXAorCQk+YWN0dWFsLXN1cHByZXNzLSQxJHsyKyItJDIifSAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXN1cHByZXNzLSQxJHsyKyItJDIifSBhY3R1YWwtc3VwcHJlc3MtJDEkezIrIi0kMiJ9Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLmNjIHNldCcgJworCWdpdCBjb25maWcgc2VuZGVtYWlsLmNjIGNjQGV4YW1wbGUuY29tICYmCisJdGVzdF9zdXBwcmVzc2lvbiBzb2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICIKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3Mtc29iIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8YXV0aG9yQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8b25lQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dHdvQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sCisJT25lIDxvbmVAZXhhbXBsZS5jb20+LAorCXR3b0BleGFtcGxlLmNvbQorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitSZXN1bHQ6IE9LCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwuY2MgdW5zZXQnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgc2VuZGVtYWlsLmNjICYmCisJdGVzdF9zdXBwcmVzc2lvbiBzb2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICIKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3MtY2NjbWQgPDxcRU9GCiswMDAxLVNlY29uZC5wYXRjaAorKG1ib3gpIEFkZGluZyBjYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0Zyb206IEEgPGF1dGhvckBleGFtcGxlLmNvbT4nCisobWJveCkgQWRkaW5nIGNjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCisobWJveCkgQWRkaW5nIGNjOiB0d29AZXhhbXBsZS5jb20gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCisoYm9keSkgQWRkaW5nIGNjOiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPicKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGF1dGhvckBleGFtcGxlLmNvbT4KK1JDUFQgVE86PG9uZUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHR3b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK0NjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+LAorCU9uZSA8b25lQGV4YW1wbGUuY29tPiwKKwl0d29AZXhhbXBsZS5jb20sCisJQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitSZXN1bHQ6IE9LCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwuY2NjbWQnICcKKwl3cml0ZV9zY3JpcHQgY2NjbWQgPDwtXEVPRiAmJgorCWVjaG8gY2MtY21kQGV4YW1wbGUuY29tCisJRU9GCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuY2NjbWQgLi9jY2NtZCAmJgorCXRlc3Rfc3VwcHJlc3Npb24gY2NjbWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICcKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3MtYWxsIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworUmVzdWx0OiBPSworRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1zdXBwcmVzcy1jYz1hbGwnICcKKwl0ZXN0X3N1cHByZXNzaW9uIGFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgIgorY2F0ID5leHBlY3RlZC1zdXBwcmVzcy1ib2R5IDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKGNjLWNtZCkgQWRkaW5nIGNjOiBjYy1jbWRAZXhhbXBsZS5jb20gZnJvbTogJy4vY2NjbWQnCitEcnktT0suIExvZyBzYXlzOgorU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQorTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxhdXRob3JAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxvbmVAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0d29AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxjYy1jbWRAZXhhbXBsZS5jb20+CitGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgorVG86IHRvQGV4YW1wbGUuY29tCitDYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwKKwlPbmUgPG9uZUBleGFtcGxlLmNvbT4sCisJdHdvQGV4YW1wbGUuY29tLAorCWNjLWNtZEBleGFtcGxlLmNvbQorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitSZXN1bHQ6IE9LCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLXN1cHByZXNzLWNjPWJvZHknICcKKwl0ZXN0X3N1cHByZXNzaW9uIGJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICIKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3MtYm9keS1jY2NtZCA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhtYm94KSBBZGRpbmcgY2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhtYm94KSBBZGRpbmcgY2M6IHR3b0BleGFtcGxlLmNvbSBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGF1dGhvckBleGFtcGxlLmNvbT4KK1JDUFQgVE86PG9uZUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHR3b0BleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK0NjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+LAorCU9uZSA8b25lQGV4YW1wbGUuY29tPiwKKwl0d29AZXhhbXBsZS5jb20KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworUmVzdWx0OiBPSworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1zdXBwcmVzcy1jYz1ib2R5IC0tc3VwcHJlc3MtY2M9Y2NjbWQnICcKKwl0ZXN0X3N1cHByZXNzaW9uIGJvZHkgY2NjbWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICIKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3Mtc29iIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8YXV0aG9yQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8b25lQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dHdvQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sCisJT25lIDxvbmVAZXhhbXBsZS5jb20+LAorCXR3b0BleGFtcGxlLmNvbQorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitSZXN1bHQ6IE9LCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLXN1cHByZXNzLWNjPXNvYicgJworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgc2VuZGVtYWlsLmNjY21kICYmCisJdGVzdF9zdXBwcmVzc2lvbiBzb2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICIKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3MtYm9keWNjIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKGJvZHkpIEFkZGluZyBjYzogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ1NpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4nCitEcnktT0suIExvZyBzYXlzOgorU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQorTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxhdXRob3JAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxvbmVAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0d29AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgorVG86IHRvQGV4YW1wbGUuY29tCitDYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwKKwlPbmUgPG9uZUBleGFtcGxlLmNvbT4sCisJdHdvQGV4YW1wbGUuY29tLAorCUMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworUmVzdWx0OiBPSworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1zdXBwcmVzcy1jYz1ib2R5Y2MnICcKKwl0ZXN0X3N1cHByZXNzaW9uIGJvZHljYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgIgorY2F0ID5leHBlY3RlZC1zdXBwcmVzcy1jYyA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhib2R5KSBBZGRpbmcgY2M6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+JworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8YXV0aG9yQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sCisJQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitSZXN1bHQ6IE9LCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLXN1cHByZXNzLWNjPWNjJyAnCisJdGVzdF9zdXBwcmVzc2lvbiBjYworJworCit0ZXN0X2NvbmZpcm0gKCkgeworCWVjaG8geSB8IFwKKwkJR0lUX1NFTkRfRU1BSUxfTk9UVFk9MSBcCisJCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJEAgJHBhdGNoZXMgPnN0ZG91dCAmJgorCWdyZXAgIlNlbmQgdGhpcyBlbWFpbCIgc3Rkb3V0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1jb25maXJtPWFsd2F5cycgJworCXRlc3RfY29uZmlybSAtLWNvbmZpcm09YWx3YXlzIC0tc3VwcHJlc3MtY2M9YWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1jb25maXJtPWF1dG8nICcKKwl0ZXN0X2NvbmZpcm0gLS1jb25maXJtPWF1dG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLWNvbmZpcm09Y2MnICcKKwl0ZXN0X2NvbmZpcm0gLS1jb25maXJtPWNjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1jb25maXJtPWNvbXBvc2UnICcKKwl0ZXN0X2NvbmZpcm0gLS1jb25maXJtPWNvbXBvc2UgLS1jb21wb3NlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnY29uZmlybSBieSBkZWZhdWx0IChkdWUgdG8gY2MpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBjb25maWcgc2VuZGVtYWlsLmNvbmZpcm0gbmV2ZXIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgc2VuZGVtYWlsLmNvbmZpcm0gJiYKKwl0ZXN0X2NvbmZpcm0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdjb25maXJtIGJ5IGRlZmF1bHQgKGR1ZSB0byAtLWNvbXBvc2UpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBjb25maWcgc2VuZGVtYWlsLmNvbmZpcm0gbmV2ZXIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgc2VuZGVtYWlsLmNvbmZpcm0gJiYKKwl0ZXN0X2NvbmZpcm0gLS1zdXBwcmVzcy1jYz1hbGwgLS1jb21wb3NlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnY29uZmlybSBkZXRlY3RzIEVPRiAoaW5mb3JtIGFzc3VtZXMgeSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGNvbmZpZyBzZW5kZW1haWwuY29uZmlybSBuZXZlciAmJgorCWdpdCBjb25maWcgLS11bnNldCBzZW5kZW1haWwuY29uZmlybSAmJgorCXJtIC1mciBvdXRkaXIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0yIC1vIG91dGRpciAmJgorCUdJVF9TRU5EX0VNQUlMX05PVFRZPTEgXAorCQlnaXQgc2VuZC1lbWFpbCBcCisJCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCQlvdXRkaXIvKi5wYXRjaCA8L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnY29uZmlybSBkZXRlY3RzIEVPRiAoYXV0byBjYXVzZXMgZmFpbHVyZSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGNvbmZpZyBzZW5kZW1haWwuY29uZmlybSBuZXZlciAmJgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmNvbmZpcm0gYXV0byAmJgorCUdJVF9TRU5EX0VNQUlMX05PVFRZPTEgJiYKKwlleHBvcnQgR0lUX1NFTkRfRU1BSUxfTk9UVFkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtZW1haWwgXAorCQkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkJJHBhdGNoZXMgPC9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2NvbmZpcm0gZG9lcyBub3QgbG9vcCBmb3JldmVyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBjb25maWcgc2VuZGVtYWlsLmNvbmZpcm0gbmV2ZXIgJiYKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5jb25maXJtIGF1dG8gJiYKKwlHSVRfU0VORF9FTUFJTF9OT1RUWT0xICYmCisJZXhwb3J0IEdJVF9TRU5EX0VNQUlMX05PVFRZICYmCisJCXllcyAiYm9ndXMiIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtZW1haWwgXAorCQkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkJJHBhdGNoZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICd1dGY4IENjIGlzIHJmYzIwNDcgZW5jb2RlZCcgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlybSAtZnIgb3V0ZGlyICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtbyBvdXRkaXIgLS1jYz0iw6DDqcOsw7bDuiA8dXRmOEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCW91dGRpci8qLnBhdGNoICYmCisJZ3JlcCAiXgkiIG1zZ3R4dDEgfAorCWdyZXAgIj0/VVRGLTg/cT89QzM9QTA9QzM9QTk9QzM9QUM9QzM9QjY9QzM9QkE/PSA8dXRmOEBleGFtcGxlLmNvbT4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1jb21wb3NlIGFkZHMgTUlNRSBmb3IgdXRmOCBib2R5JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCXdyaXRlX3NjcmlwdCBmYWtlLWVkaXRvci11dGY4IDw8LVxFT0YgJiYKKwllY2hvICJ1dGY4IGJvZHk6IMOgw6nDrMO2w7oiID4+IiQxIgorCUVPRgorCUdJVF9FRElUT1I9IlwiJChwd2QpL2Zha2UtZWRpdG9yLXV0ZjhcIiIgXAorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1jb21wb3NlIC0tc3ViamVjdCBmb28gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkcGF0Y2hlcyAmJgorCWdyZXAgIl51dGY4IGJvZHkiIG1zZ3R4dDEgJiYKKwlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04IiBtc2d0eHQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1jb21wb3NlIHJlc3BlY3RzIHVzZXIgbWltZSB0eXBlJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCXdyaXRlX3NjcmlwdCBmYWtlLWVkaXRvci11dGY4LW1pbWUgPDwtXEVPRiAmJgorCWNhdCA+IiQxIiA8PC1cRU9NCisJTUlNRS1WZXJzaW9uOiAxLjAKKwlDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMQorCUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKwlTdWJqZWN0OiBmb28KKworCXV0ZjggYm9keTogw6DDqcOsw7bDugorCUVPTQorCUVPRgorCUdJVF9FRElUT1I9IlwiJChwd2QpL2Zha2UtZWRpdG9yLXV0ZjgtbWltZVwiIiBcCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWNvbXBvc2UgLS1zdWJqZWN0IGZvbyBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRwYXRjaGVzICYmCisJZ3JlcCAiXnV0ZjggYm9keSIgbXNndHh0MSAmJgorCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMSIgbXNndHh0MSAmJgorCSEgZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tY29tcG9zZSBhZGRzIE1JTUUgZm9yIHV0Zjggc3ViamVjdCcgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlHSVRfRURJVE9SPSJcIiQocHdkKS9mYWtlLWVkaXRvclwiIiBcCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWNvbXBvc2UgLS1zdWJqZWN0IHV0Zjgtc8O8YmrDq2N0IFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhdGNoZXMgJiYKKwlncmVwICJeZmFrZSBlZGl0IiBtc2d0eHQxICYmCisJZ3JlcCAiXlN1YmplY3Q6ID0/VVRGLTg/cT91dGY4LXM9QzM9QkNiaj1DMz1BQmN0Pz0iIG1zZ3R4dDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICd1dGY4IGF1dGhvciBpcyBjb3JyZWN0bHkgcGFzc2VkIG9uJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCXRlc3RfY29tbWl0IHdlaXJkX2F1dGhvciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiIgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1hdXRob3IgIkbDvMOxbsO9IE7Dom3DqSA8b2RkXz89bWFpbEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+ZnVubnlfbmFtZS5wYXRjaCAmJgorCWdpdCBzZW5kLWVtYWlsIC0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCWZ1bm55X25hbWUucGF0Y2ggJiYKKwlncmVwICJeRnJvbTogRsO8w7Fuw70gTsOibcOpIDxvZGRfPz1tYWlsQGV4YW1wbGUuY29tPiIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3V0Zjggc2VuZGVyIGlzIG5vdCBkdXBsaWNhdGVkJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCXRlc3RfY29tbWl0IHdlaXJkX3NlbmRlciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiIgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1hdXRob3IgIkbDvMOxbsO9IE7Dom3DqSA8b2RkXz89bWFpbEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+ZnVubnlfbmFtZS5wYXRjaCAmJgorCWdpdCBzZW5kLWVtYWlsIC0tZnJvbT0iRsO8w7Fuw70gTsOibcOpIDxvZGRfPz1tYWlsQGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCWZ1bm55X25hbWUucGF0Y2ggJiYKKwlncmVwICJeRnJvbTogIiBtc2d0eHQxID5tc2dmcm9tICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBtc2dmcm9tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLmNvbXBvc2VlbmNvZGluZyB3b3JrcycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5jb21wb3NlZW5jb2RpbmcgaXNvLTg4NTktMSAmJgorCXdyaXRlX3NjcmlwdCBmYWtlLWVkaXRvci11dGY4IDw8LVxFT0YgJiYKKwllY2hvICJ1dGY4IGJvZHk6IMOgw6nDrMO2w7oiID4+IiQxIgorCUVPRgorCUdJVF9FRElUT1I9IlwiJChwd2QpL2Zha2UtZWRpdG9yLXV0ZjhcIiIgXAorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1jb21wb3NlIC0tc3ViamVjdCBmb28gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkcGF0Y2hlcyAmJgorCWdyZXAgIl51dGY4IGJvZHkiIG1zZ3R4dDEgJiYKKwlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTEiIG1zZ3R4dDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLWNvbXBvc2UtZW5jb2Rpbmcgd29ya3MnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJd3JpdGVfc2NyaXB0IGZha2UtZWRpdG9yLXV0ZjggPDwtXEVPRiAmJgorCWVjaG8gInV0ZjggYm9keTogw6DDqcOsw7bDuiIgPj4iJDEiCisJRU9GCisJR0lUX0VESVRPUj0iXCIkKHB3ZCkvZmFrZS1lZGl0b3ItdXRmOFwiIiBcCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWNvbXBvc2UtZW5jb2RpbmcgaXNvLTg4NTktMSBcCisJCS0tY29tcG9zZSAtLXN1YmplY3QgZm9vIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhdGNoZXMgJiYKKwlncmVwICJedXRmOCBib2R5IiBtc2d0eHQxICYmCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xIiBtc2d0eHQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1jb21wb3NlLWVuY29kaW5nIG92ZXJyaWRlcyBzZW5kZW1haWwuY29tcG9zZWVuY29kaW5nJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmNvbXBvc2VlbmNvZGluZyBpc28tODg1OS0xICYmCisJd3JpdGVfc2NyaXB0IGZha2UtZWRpdG9yLXV0ZjggPDwtXEVPRiAmJgorCWVjaG8gInV0ZjggYm9keTogw6DDqcOsw7bDuiIgPj4iJDEiCisJRU9GCisJR0lUX0VESVRPUj0iXCIkKHB3ZCkvZmFrZS1lZGl0b3ItdXRmOFwiIiBcCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWNvbXBvc2UtZW5jb2RpbmcgaXNvLTg4NTktMiBcCisJCS0tY29tcG9zZSAtLXN1YmplY3QgZm9vIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhdGNoZXMgJiYKKwlncmVwICJedXRmOCBib2R5IiBtc2d0eHQxICYmCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0yIiBtc2d0eHQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1jb21wb3NlLWVuY29kaW5nIGFkZHMgY29ycmVjdCBNSU1FIGZvciBzdWJqZWN0JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCUdJVF9FRElUT1I9IlwiJChwd2QpL2Zha2UtZWRpdG9yXCIiIFwKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tY29tcG9zZS1lbmNvZGluZyBpc28tODg1OS0yIFwKKwkJLS1jb21wb3NlIC0tc3ViamVjdCB1dGY4LXPDvGJqw6tjdCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRwYXRjaGVzICYmCisJZ3JlcCAiXmZha2UgZWRpdCIgbXNndHh0MSAmJgorCWdyZXAgIl5TdWJqZWN0OiA9P2lzby04ODU5LTI/cT91dGY4LXM9QzM9QkNiaj1DMz1BQmN0Pz0iIG1zZ3R4dDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdkZXRlY3RzIGFtYmlndW91cyByZWZlcmVuY2UvZmlsZSBjb25mbGljdCcgJworCWVjaG8gbWFzdGVyID5tYXN0ZXIgJiYKKwlnaXQgYWRkIG1hc3RlciAmJgorCWdpdCBjb21taXQgLW0iYWRkIG1hc3RlciIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1lbWFpbCAtLWRyeS1ydW4gbWFzdGVyIDI+ZXJyb3JzICYmCisJZ3JlcCBkaXNhbWJpZ3VhdGUgZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnZmVlZCB0d28gZmlsZXMnICcKKwlybSAtZnIgb3V0ZGlyICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMiAtbyBvdXRkaXIgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCW91dGRpci8wMDA/LSoucGF0Y2ggMj5lcnJvcnMgPm91dCAmJgorCWdyZXAgIl5TdWJqZWN0OiAiIG91dCA+c3ViamVjdHMgJiYKKwl0ZXN0ICJ6JChzZWQgLW4gLWUgMXAgc3ViamVjdHMpIiA9ICJ6U3ViamVjdDogW1BBVENIIDEvMl0gU2Vjb25kLiIgJiYKKwl0ZXN0ICJ6JChzZWQgLW4gLWUgMnAgc3ViamVjdHMpIiA9ICJ6U3ViamVjdDogW1BBVENIIDIvMl0gYWRkIG1hc3RlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdpbi1yZXBseS10byBidXQgbm8gdGhyZWFkaW5nJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLWluLXJlcGx5LXRvPSI8aW4tcmVwbHktaWRAZXhhbXBsZS5jb20+IiBcCisJCS0tbm8tdGhyZWFkIFwKKwkJJHBhdGNoZXMgPm91dCAmJgorCWdyZXAgIkluLVJlcGx5LVRvOiA8aW4tcmVwbHktaWRAZXhhbXBsZS5jb20+IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdubyBpbi1yZXBseS10byBhbmQgbm8gdGhyZWFkaW5nJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLW5vLXRocmVhZCBcCisJCSRwYXRjaGVzID5zdGRvdXQgJiYKKwkhIGdyZXAgIkluLVJlcGx5LVRvOiAiIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3RocmVhZGluZyBidXQgbm8gY2hhaW4tcmVwbHktdG8nICcKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tdGhyZWFkIFwKKwkJLS1uby1jaGFpbi1yZXBseS10byBcCisJCSRwYXRjaGVzICRwYXRjaGVzID5zdGRvdXQgJiYKKwlncmVwICJJbi1SZXBseS1UbzogIiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwudG8gd29ya3MnICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgc2VuZGVtYWlsLnRvICJTb21lYm9keSA8c29tZWJvZHlAZXguY29tPiIgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQkkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiVG86IFNvbWVib2R5IDxzb21lYm9keUBleC5jb20+IiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBzZW5kZW1haWwuaWRlbnRpdHknICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgc2VuZGVtYWlsLnRvICJkZWZhdWx0QGV4YW1wbGUuY29tIiAmJgorCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBzZW5kZW1haWwuaXNwLnRvICJpc3BAZXhhbXBsZS5jb20iICYmCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIHNlbmRlbWFpbC5jbG91ZC50byAiY2xvdWRAZXhhbXBsZS5jb20iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLmlkZW50aXR5OiByZWFkcyB0aGUgY29ycmVjdCBpZGVudGl0eSBjb25maWcnICcKKwlnaXQgLWMgc2VuZGVtYWlsLmlkZW50aXR5PWNsb3VkIHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209Im5vYm9keUBleGFtcGxlLmNvbSIgXAorCQkkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiVG86IGNsb3VkQGV4YW1wbGUuY29tIiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwuaWRlbnRpdHk6IGlkZW50aXR5IG92ZXJyaWRlcyBzZW5kZW1haWwuaWRlbnRpdHknICcKKwlnaXQgLWMgc2VuZGVtYWlsLmlkZW50aXR5PWNsb3VkIHNlbmQtZW1haWwgXAorCQktLWlkZW50aXR5PWlzcCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0ibm9ib2R5QGV4YW1wbGUuY29tIiBcCisJCSRwYXRjaGVzID5zdGRvdXQgJiYKKwlncmVwICJUbzogaXNwQGV4YW1wbGUuY29tIiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwuaWRlbnRpdHk6IC0tbm8taWRlbnRpdHkgY2xlYXJzIHByZXZpb3VzIGlkZW50aXR5JyAnCisJZ2l0IC1jIHNlbmRlbWFpbC5pZGVudGl0eT1jbG91ZCBzZW5kLWVtYWlsIFwKKwkJLS1uby1pZGVudGl0eSBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0ibm9ib2R5QGV4YW1wbGUuY29tIiBcCisJCSRwYXRjaGVzID5zdGRvdXQgJiYKKwlncmVwICJUbzogZGVmYXVsdEBleGFtcGxlLmNvbSIgc3Rkb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLmlkZW50aXR5OiBib29sIGlkZW50aXR5IHZhcmlhYmxlIGV4aXN0ZW5jZSBvdmVycmlkZXMnICcKKwlnaXQgLWMgc2VuZGVtYWlsLmlkZW50aXR5PWNsb3VkIFwKKwkJLWMgc2VuZGVtYWlsLnhtYWlsZXI9dHJ1ZSBcCisJCS1jIHNlbmRlbWFpbC5jbG91ZC54bWFpbGVyPWZhbHNlIFwKKwkJc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0ibm9ib2R5QGV4YW1wbGUuY29tIiBcCisJCSRwYXRjaGVzID5zdGRvdXQgJiYKKwlncmVwICJUbzogY2xvdWRAZXhhbXBsZS5jb20iIHN0ZG91dCAmJgorCSEgZ3JlcCAiWC1NYWlsZXIiIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5pZGVudGl0eTogYm9vbCB2YXJpYWJsZSBmYWxsYmFjaycgJworCWdpdCAtYyBzZW5kZW1haWwuaWRlbnRpdHk9Y2xvdWQgXAorCQktYyBzZW5kZW1haWwueG1haWxlcj1mYWxzZSBcCisJCXNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209Im5vYm9keUBleGFtcGxlLmNvbSIgXAorCQkkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiVG86IGNsb3VkQGV4YW1wbGUuY29tIiBzdGRvdXQgJiYKKwkhIGdyZXAgIlgtTWFpbGVyIiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLW5vLXRvIG92ZXJyaWRlcyBzZW5kZW1haWwudG8nICcKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLW5vLXRvIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiVG86IG5vYm9keUBleGFtcGxlLmNvbSIgc3Rkb3V0ICYmCisJISBncmVwICJUbzogU29tZWJvZHkgPHNvbWVib2R5QGV4LmNvbT4iIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5jYyB3b3JrcycgJworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBzZW5kZW1haWwuY2MgIlNvbWVib2R5IDxzb21lYm9keUBleC5jb20+IiAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1kcnktcnVuIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJJHBhdGNoZXMgPnN0ZG91dCAmJgorCWdyZXAgIkNjOiBTb21lYm9keSA8c29tZWJvZHlAZXguY29tPiIgc3Rkb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1uby1jYyBvdmVycmlkZXMgc2VuZGVtYWlsLmNjJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS1uby1jYyBcCisJCS0tY2M9Ym9kaWVzQGV4YW1wbGUuY29tIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiQ2M6IGJvZGllc0BleGFtcGxlLmNvbSIgc3Rkb3V0ICYmCisJISBncmVwICJDYzogU29tZWJvZHkgPHNvbWVib2R5QGV4LmNvbT4iIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5iY2Mgd29ya3MnICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgc2VuZGVtYWlsLmJjYyAiT3RoZXIgPG90aGVyQGV4LmNvbT4iICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyIHJlbGF5LmV4YW1wbGUuY29tIFwKKwkJJHBhdGNoZXMgPnN0ZG91dCAmJgorCWdyZXAgIlJDUFQgVE86PG90aGVyQGV4LmNvbT4iIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tbm8tYmNjIG92ZXJyaWRlcyBzZW5kZW1haWwuYmNjJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS1uby1iY2MgXAorCQktLWJjYz1ib2RpZXNAZXhhbXBsZS5jb20gXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXIgcmVsYXkuZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiUkNQVCBUTzo8Ym9kaWVzQGV4YW1wbGUuY29tPiIgc3Rkb3V0ICYmCisJISBncmVwICJSQ1BUIFRPOjxvdGhlckBleC5jb20+IiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdwYXRjaGVzIFRvIGhlYWRlcnMgYXJlIHVzZWQgYnkgZGVmYXVsdCcgJworCXBhdGNoPSQoZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXRvPSJib2RpZXNAZXhhbXBsZS5jb20iKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gJHBhdGNoIiAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1kcnktcnVuIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tc210cC1zZXJ2ZXIgcmVsYXkuZXhhbXBsZS5jb20gXAorCQkkcGF0Y2ggPnN0ZG91dCAmJgorCWdyZXAgIlJDUFQgVE86PGJvZGllc0BleGFtcGxlLmNvbT4iIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3BhdGNoZXMgVG8gaGVhZGVycyBhcmUgYXBwZW5kZWQgdG8nICcKKwlwYXRjaD0kKGdpdCBmb3JtYXQtcGF0Y2ggLTEgLS10bz0iYm9kaWVzQGV4YW1wbGUuY29tIikgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtICRwYXRjaCIgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXIgcmVsYXkuZXhhbXBsZS5jb20gXAorCQkkcGF0Y2ggPnN0ZG91dCAmJgorCWdyZXAgIlJDUFQgVE86PGJvZGllc0BleGFtcGxlLmNvbT4iIHN0ZG91dCAmJgorCWdyZXAgIlJDUFQgVE86PG5vYm9keUBleGFtcGxlLmNvbT4iIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ1RvIGhlYWRlcnMgZnJvbSBmaWxlcyByZXNldCBlYWNoIHBhdGNoJyAnCisJcGF0Y2gxPSQoZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXRvPSJib2RpZXNAZXhhbXBsZS5jb20iKSAmJgorCXBhdGNoMj0kKGdpdCBmb3JtYXQtcGF0Y2ggLTEgLS10bz0ib3RoZXJAZXhhbXBsZS5jb20iIEhFQUR+KSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gJHBhdGNoMSAmJiBybSAkcGF0Y2gyIiAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1kcnktcnVuIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89Im5vYm9keUBleGFtcGxlLmNvbSIgXAorCQktLXNtdHAtc2VydmVyIHJlbGF5LmV4YW1wbGUuY29tIFwKKwkJJHBhdGNoMSAkcGF0Y2gyID5zdGRvdXQgJiYKKwl0ZXN0ICQoZ3JlcCAtYyAiUkNQVCBUTzo8Ym9kaWVzQGV4YW1wbGUuY29tPiIgc3Rkb3V0KSA9IDEgJiYKKwl0ZXN0ICQoZ3JlcCAtYyAiUkNQVCBUTzo8bm9ib2R5QGV4YW1wbGUuY29tPiIgc3Rkb3V0KSA9IDIgJiYKKwl0ZXN0ICQoZ3JlcCAtYyAiUkNQVCBUTzo8b3RoZXJAZXhhbXBsZS5jb20+IiBzdGRvdXQpID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgJworY2F0ID5lbWFpbC11c2luZy04Yml0IDw8XEVPRgorRnJvbSBmZTZlY2M2NmVjZTM3MTk4ZmU1ZGI5MWZhMmZjNDFkOWY0ZmU1Y2M0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorTWVzc2FnZS1JZDogPGJvZ3VzLW1lc3NhZ2UtaWRAZXhhbXBsZS5jb20+CitGcm9tOiBhdXRob3JAZXhhbXBsZS5jb20KK0RhdGU6IFNhdCwgMTIgSnVuIDIwMTAgMTU6NTM6NTggKzAyMDAKK1N1YmplY3Q6IHN1YmplY3QgZ29lcyBoZXJlCisKK0RpZXNlciBkZXV0c2NoZSBUZXh0IGVudGjDpGx0IGVpbmVuIFVtbGF1dCEKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgJworCWVjaG8gIlN1YmplY3Q6IHN1YmplY3QgZ29lcyBoZXJlIiA+ZXhwZWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdBU0NJSSBzdWJqZWN0IGlzIG5vdCBSRkMyMDQ3IHF1b3RlZCcgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwllY2hvIGJvZ3VzIHwKKwlnaXQgc2VuZC1lbWFpbCAtLWZyb209YXV0aG9yQGV4YW1wbGUuY29tIC0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCQktLThiaXQtZW5jb2Rpbmc9VVRGLTggXAorCQkJZW1haWwtdXNpbmctOGJpdCA+c3Rkb3V0ICYmCisJZ3JlcCAiU3ViamVjdCIgbXNndHh0MSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAnCisJY2F0ID5jb250ZW50LXR5cGUtZGVjbCA8PC1cRU9GCisJTUlNRS1WZXJzaW9uOiAxLjAKKwlDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKKwlDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnYXNrcyBhYm91dCBhbmQgZml4ZXMgOGJpdCBlbmNvZGluZ3MnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZWNobyB8CisJZ2l0IHNlbmQtZW1haWwgLS1mcm9tPWF1dGhvckBleGFtcGxlLmNvbSAtLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkJZW1haWwtdXNpbmctOGJpdCA+c3Rkb3V0ICYmCisJZ3JlcCAiZG8gbm90IGRlY2xhcmUgYSBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIiBzdGRvdXQgJiYKKwlncmVwIGVtYWlsLXVzaW5nLThiaXQgc3Rkb3V0ICYmCisJZ3JlcCAiV2hpY2ggOGJpdCBlbmNvZGluZyIgc3Rkb3V0ICYmCisJZWdyZXAgIkNvbnRlbnR8TUlNRSIgbXNndHh0MSA+YWN0dWFsICYmCisJdGVzdF9jbXAgY29udGVudC10eXBlLWRlY2wgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLjhiaXRFbmNvZGluZyB3b3JrcycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5hc3N1bWU4Yml0RW5jb2RpbmcgVVRGLTggJiYKKwllY2hvIGJvZ3VzIHwKKwlnaXQgc2VuZC1lbWFpbCAtLWZyb209YXV0aG9yQGV4YW1wbGUuY29tIC0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCQllbWFpbC11c2luZy04Yml0ID5zdGRvdXQgJiYKKwllZ3JlcCAiQ29udGVudHxNSU1FIiBtc2d0eHQxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBjb250ZW50LXR5cGUtZGVjbCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLThiaXQtZW5jb2Rpbmcgb3ZlcnJpZGVzIHNlbmRlbWFpbC44Yml0RW5jb2RpbmcnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuYXNzdW1lOGJpdEVuY29kaW5nICJib2d1cyB0b28iICYmCisJZWNobyBib2d1cyB8CisJZ2l0IHNlbmQtZW1haWwgLS1mcm9tPWF1dGhvckBleGFtcGxlLmNvbSAtLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkJLS04Yml0LWVuY29kaW5nPVVURi04IFwKKwkJCWVtYWlsLXVzaW5nLThiaXQgPnN0ZG91dCAmJgorCWVncmVwICJDb250ZW50fE1JTUUiIG1zZ3R4dDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGNvbnRlbnQtdHlwZS1kZWNsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgJworCWNhdCA+ZW1haWwtdXNpbmctOGJpdCA8PC1cRU9GCisJRnJvbSBmZTZlY2M2NmVjZTM3MTk4ZmU1ZGI5MWZhMmZjNDFkOWY0ZmU1Y2M0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorCU1lc3NhZ2UtSWQ6IDxib2d1cy1tZXNzYWdlLWlkQGV4YW1wbGUuY29tPgorCUZyb206IGF1dGhvckBleGFtcGxlLmNvbQorCURhdGU6IFNhdCwgMTIgSnVuIDIwMTAgMTU6NTM6NTggKzAyMDAKKwlTdWJqZWN0OiBEaWVzZXIgQmV0cmVmZiBlbnRow6RsdCBhdWNoIGVpbmVuIFVtbGF1dCEKKworCU5vdGhpbmcgdG8gc2VlIGhlcmUuCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GCisJU3ViamVjdDogPT9VVEYtOD9xP0RpZXNlcj0yMEJldHJlZmY9MjBlbnRoPUMzPUE0bHQ9MjBhdWNoPTIwZWluZW49MjBVbWxhdXQhPz0KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLThiaXQtZW5jb2RpbmcgYWxzbyB0cmVhdHMgc3ViamVjdCcgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwllY2hvIGJvZ3VzIHwKKwlnaXQgc2VuZC1lbWFpbCAtLWZyb209YXV0aG9yQGV4YW1wbGUuY29tIC0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCQktLThiaXQtZW5jb2Rpbmc9VVRGLTggXAorCQkJZW1haWwtdXNpbmctOGJpdCA+c3Rkb3V0ICYmCisJZ3JlcCAiU3ViamVjdCIgbXNndHh0MSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAnCisJY2F0ID5lbWFpbC11c2luZy04Yml0IDw8LVxFT0YKKwlGcm9tIGZlNmVjYzY2ZWNlMzcxOThmZTVkYjkxZmEyZmM0MWQ5ZjRmZTVjYzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCisJTWVzc2FnZS1JZDogPGJvZ3VzLW1lc3NhZ2UtaWRAZXhhbXBsZS5jb20+CisJRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwlEYXRlOiBTYXQsIDEyIEp1biAyMDEwIDE1OjUzOjU4ICswMjAwCisJQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CisJU3ViamVjdDogTm90aGluZyB0byBzZWUgaGVyZS4KKworCURpZXNlciBCZXRyZWZmIGVudGjDpGx0IGF1Y2ggZWluZW4gVW1sYXV0IQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tdHJhbnNmZXItZW5jb2Rpbmcgb3ZlcnJpZGVzIHNlbmRlbWFpbC50cmFuc2ZlckVuY29kaW5nJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBzZW5kZW1haWwudHJhbnNmZXJFbmNvZGluZz04Yml0IFwKKwkJc2VuZC1lbWFpbCBcCisJCS0tdHJhbnNmZXItZW5jb2Rpbmc9N2JpdCBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCWVtYWlsLXVzaW5nLThiaXQgXAorCQkyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IiBlcnJvcnMgJiYKKwl0ZXN0IC16ICIkKGxzIG1zZ3R4dCopIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC50cmFuc2ZlckVuY29kaW5nIHZpYSBjb25maWcnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHNlbmRlbWFpbC50cmFuc2ZlckVuY29kaW5nPTdiaXQgXAorCQlzZW5kLWVtYWlsIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJZW1haWwtdXNpbmctOGJpdCBcCisJCTI+ZXJyb3JzID5vdXQgJiYKKwlncmVwICJjYW5ub3Qgc2VuZCBtZXNzYWdlIGFzIDdiaXQiIGVycm9ycyAmJgorCXRlc3QgLXogIiQobHMgbXNndHh0KikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLnRyYW5zZmVyRW5jb2RpbmcgdmlhIGNsaScgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1lbWFpbCBcCisJCS0tdHJhbnNmZXItZW5jb2Rpbmc9N2JpdCBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCWVtYWlsLXVzaW5nLThiaXQgXAorCQkyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IiBlcnJvcnMgJiYKKwl0ZXN0IC16ICIkKGxzIG1zZ3R4dCopIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRgorCURpZXNlciBCZXRyZWZmIGVudGg9QzM9QTRsdCBhdWNoIGVpbmVuIFVtbGF1dCEKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICc4LWJpdCBhbmQgc2VuZGVtYWlsLnRyYW5zZmVyZW5jb2Rpbmc9cXVvdGVkLXByaW50YWJsZScgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tdHJhbnNmZXItZW5jb2Rpbmc9cXVvdGVkLXByaW50YWJsZSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCWVtYWlsLXVzaW5nLThiaXQgXAorCQkyPmVycm9ycyA+b3V0ICYmCisJc2VkICcxLC9eJC9kJyBtc2d0eHQxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YKKwlSR2xsYzJWeUlFSmxkSEpsWm1ZZ1pXNTBhTU9rYkhRZ1lYVmphQ0JsYVc1bGJpQlZiV3hoZFhRaENnPT0KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICc4LWJpdCBhbmQgc2VuZGVtYWlsLnRyYW5zZmVyZW5jb2Rpbmc9YmFzZTY0JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS10cmFuc2Zlci1lbmNvZGluZz1iYXNlNjQgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQllbWFpbC11c2luZy04Yml0IFwKKwkJMj5lcnJvcnMgPm91dCAmJgorCXNlZCAnMSwvXiQvZCcgbXNndHh0MSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAnCisJY2F0ID5lbWFpbC11c2luZy1xcCA8PC1cRU9GCisJRnJvbSBmZTZlY2M2NmVjZTM3MTk4ZmU1ZGI5MWZhMmZjNDFkOWY0ZmU1Y2M0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorCU1lc3NhZ2UtSWQ6IDxib2d1cy1tZXNzYWdlLWlkQGV4YW1wbGUuY29tPgorCUZyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJRGF0ZTogU2F0LCAxMiBKdW4gMjAxMCAxNTo1Mzo1OCArMDIwMAorCU1JTUUtVmVyc2lvbjogMS4wCisJQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorCVN1YmplY3Q6IE5vdGhpbmcgdG8gc2VlIGhlcmUuCisKKwlEaWVzZXIgQmV0cmVmZiBlbnRoPUMzPUE0bHQgYXVjaCBlaW5lbiBVbWxhdXQhCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnY29udmVydCBmcm9tIHF1b3RlZC1wcmludGFibGUgdG8gYmFzZTY0JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS10cmFuc2Zlci1lbmNvZGluZz1iYXNlNjQgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQllbWFpbC11c2luZy1xcCBcCisJCTI+ZXJyb3JzID5vdXQgJiYKKwlzZWQgJzEsL14kL2QnIG1zZ3R4dDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgIgordHIgLWQgJ1xcMDE1JyB8IHRyICclJyAnXFwwMTUnID5lbWFpbC11c2luZy1jcmxmIDw8RU9GCitGcm9tIGZlNmVjYzY2ZWNlMzcxOThmZTVkYjkxZmEyZmM0MWQ5ZjRmZTVjYzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitNZXNzYWdlLUlkOiA8Ym9ndXMtbWVzc2FnZS1pZEBleGFtcGxlLmNvbT4KK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBTYXQsIDEyIEp1biAyMDEwIDE1OjUzOjU4ICswMjAwCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK1N1YmplY3Q6IE5vdGhpbmcgdG8gc2VlIGhlcmUuCisKK0xvb2ssIEkgaGF2ZSBhIENSTEYgYW5kIGFuID0gc2lnbiElCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YKKwlMb29rLCBJIGhhdmUgYSBDUkxGIGFuZCBhbiA9M0Qgc2lnbiE9MEQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdDUkxGIGFuZCBzZW5kZW1haWwudHJhbnNmZXJlbmNvZGluZz1xdW90ZWQtcHJpbnRhYmxlJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS10cmFuc2Zlci1lbmNvZGluZz1xdW90ZWQtcHJpbnRhYmxlIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJZW1haWwtdXNpbmctY3JsZiBcCisJCTI+ZXJyb3JzID5vdXQgJiYKKwlzZWQgJzEsL14kL2QnIG1zZ3R4dDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRgorCVRHOXZheXdnU1NCb1lYWmxJR0VnUTFKTVJpQmhibVFnWVc0Z1BTQnphV2R1SVEwSworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ0NSTEYgYW5kIHNlbmRlbWFpbC50cmFuc2ZlcmVuY29kaW5nPWJhc2U2NCcgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tdHJhbnNmZXItZW5jb2Rpbmc9YmFzZTY0IFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJZW1haWwtdXNpbmctY3JsZiBcCisJCTI+ZXJyb3JzID5vdXQgJiYKKwlzZWQgJzEsL14kL2QnIG1zZ3R4dDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKKyMgTm90ZSB0aGF0IHRoZSBwYXRjaGVzIGluIHRoaXMgdGVzdCBhcmUgZGVsaWJlcmF0ZWx5IG91dCBvZiBvcmRlcjsgd2UKKyMgd2FudCB0byBtYWtlIHN1cmUgaXQgd29ya3MgZXZlbiBpZiB0aGUgY292ZXItbGV0dGVyIGlzIG5vdCBpbiB0aGUKKyMgZmlyc3QgbWFpbC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAncmVmdXNpbmcgdG8gc2VuZCBjb3ZlciBsZXR0ZXIgdGVtcGxhdGUnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJcm0gLWZyIG91dGRpciAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLTIgLW8gb3V0ZGlyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQlvdXRkaXIvMDAwMi0qLnBhdGNoIFwKKwkJb3V0ZGlyLzAwMDAtKi5wYXRjaCBcCisJCW91dGRpci8wMDAxLSoucGF0Y2ggXAorCQkyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAiU1VCSkVDVCBIRVJFIiBlcnJvcnMgJiYKKwl0ZXN0IC16ICIkKGxzIG1zZ3R4dCopIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tZm9yY2Ugc2VuZHMgY292ZXIgbGV0dGVyIHRlbXBsYXRlIGFueXdheScgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlybSAtZnIgb3V0ZGlyICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtMiAtbyBvdXRkaXIgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZm9yY2UgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQlvdXRkaXIvMDAwMi0qLnBhdGNoIFwKKwkJb3V0ZGlyLzAwMDAtKi5wYXRjaCBcCisJCW91dGRpci8wMDAxLSoucGF0Y2ggXAorCQkyPmVycm9ycyA+b3V0ICYmCisJISBncmVwICJTVUJKRUNUIEhFUkUiIGVycm9ycyAmJgorCXRlc3QgLW4gIiQobHMgbXNndHh0KikiCisnCisKK3Rlc3RfY292ZXJfYWRkcmVzc2VzICgpIHsKKwloZWFkZXI9IiQxIgorCXNoaWZ0CisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCXJtIC1mciBvdXRkaXIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0yIC1vIG91dGRpciAmJgorCWNvdmVyPSQoZWNobyBvdXRkaXIvMDAwMC0qLnBhdGNoKSAmJgorCW12ICRjb3ZlciBjb3Zlci10by1lZGl0LnBhdGNoICYmCisJcGVybCAtcGUgInMvXkZyb206LyRoZWFkZXI6IGV4dHJhXEBhZGRyZXNzLmNvbVxuRnJvbTovIiBjb3Zlci10by1lZGl0LnBhdGNoID4iJGNvdmVyIiAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mb3JjZSBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLW5vLXRvIC0tbm8tY2MgXAorCQkiJEAiIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJb3V0ZGlyLzAwMDAtKi5wYXRjaCBcCisJCW91dGRpci8wMDAxLSoucGF0Y2ggXAorCQlvdXRkaXIvMDAwMi0qLnBhdGNoIFwKKwkJMj5lcnJvcnMgPm91dCAmJgorCWdyZXAgIl4kaGVhZGVyOiBleHRyYUBhZGRyZXNzLmNvbSIgbXNndHh0MSA+dG8xICYmCisJZ3JlcCAiXiRoZWFkZXI6IGV4dHJhQGFkZHJlc3MuY29tIiBtc2d0eHQyID50bzIgJiYKKwlncmVwICJeJGhlYWRlcjogZXh0cmFAYWRkcmVzcy5jb20iIG1zZ3R4dDMgPnRvMyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgdG8xICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSB0bzIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHRvMworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3RvLWNvdmVyIGFkZHMgVG8gdG8gYWxsIG1haWwnICcKKwl0ZXN0X2NvdmVyX2FkZHJlc3NlcyAiVG8iIC0tdG8tY292ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdjYy1jb3ZlciBhZGRzIENjIHRvIGFsbCBtYWlsJyAnCisJdGVzdF9jb3Zlcl9hZGRyZXNzZXMgIkNjIiAtLWNjLWNvdmVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAndG9jb3ZlciBhZGRzIFRvIHRvIGFsbCBtYWlsJyAnCisJdGVzdF9jb25maWcgc2VuZGVtYWlsLnRvY292ZXIgdHJ1ZSAmJgorCXRlc3RfY292ZXJfYWRkcmVzc2VzICJUbyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdjY2NvdmVyIGFkZHMgQ2MgdG8gYWxsIG1haWwnICcKKwl0ZXN0X2NvbmZpZyBzZW5kZW1haWwuY2Njb3ZlciB0cnVlICYmCisJdGVzdF9jb3Zlcl9hZGRyZXNzZXMgIkNjIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2VzY2FwZWQgcXVvdGVzIGluIHNlbmRlbWFpbC5hbGlhc2ZpbGV0eXBlPW11dHQnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZWNobyAiYWxpYXMgc2JkIFxcXCJEb3QgVS4gU2lyXFxcIiA8c29tZWJvZHlAZXhhbXBsZS5vcmc+IiA+Lm11dHQgJiYKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgc2VuZGVtYWlsLmFsaWFzZXNmaWxlICIkKHB3ZCkvLm11dHQiICYmCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuYWxpYXNmaWxldHlwZSBtdXR0ICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1zYmQgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQlvdXRkaXIvMDAwMS0qLnBhdGNoIFwKKwkJMj5lcnJvcnMgPm91dCAmJgorCWdyZXAgIl4hc29tZWJvZHlAZXhhbXBsZVwub3JnISQiIGNvbW1hbmRsaW5lMSAmJgorCWdyZXAgLUYgIlRvOiBcIkRvdCBVLiBTaXJcIiA8c29tZWJvZHlAZXhhbXBsZS5vcmc+IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwuYWxpYXNmaWxldHlwZT1tYWlscmMnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZWNobyAiYWxpYXMgc2JkICBzb21lYm9keUBleGFtcGxlLm9yZyIgPi5tYWlscmMgJiYKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgc2VuZGVtYWlsLmFsaWFzZXNmaWxlICIkKHB3ZCkvLm1haWxyYyIgJiYKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5hbGlhc2ZpbGV0eXBlIG1haWxyYyAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89c2JkIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJb3V0ZGlyLzAwMDEtKi5wYXRjaCBcCisJCTI+ZXJyb3JzID5vdXQgJiYKKwlncmVwICJeIXNvbWVib2R5QGV4YW1wbGVcLm9yZyEkIiBjb21tYW5kbGluZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwuYWxpYXNmaWxlPX4vLm1haWxyYycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwllY2hvICJhbGlhcyBzYmQgIHNvbWVvbmVAZXhhbXBsZS5vcmciID4iJEhPTUUvLm1haWxyYyIgJiYKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgc2VuZGVtYWlsLmFsaWFzZXNmaWxlICJ+Ly5tYWlscmMiICYmCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuYWxpYXNmaWxldHlwZSBtYWlscmMgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPXNiZCBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCW91dGRpci8wMDAxLSoucGF0Y2ggXAorCQkyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAiXiFzb21lb25lQGV4YW1wbGVcLm9yZyEkIiBjb21tYW5kbGluZTEKKycKKwordGVzdF9kdW1wX2FsaWFzZXMgKCkgeworCW1zZz0iJDEiICYmIHNoaWZ0ICYmCisJZmlsZXR5cGU9IiQxIiAmJiBzaGlmdCAmJgorCXByaW50ZiAnJXNcbicgIiRAIiA+ZXhwZWN0ICYmCisJY2F0ID4udG1wLWVtYWlsLWFsaWFzZXMgJiYKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAiJG1zZyIgJworCQljbGVhbl9mYWtlX3NlbmRtYWlsICYmIHJtIC1mciBvdXRkaXIgJiYKKwkJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIHNlbmRlbWFpbC5hbGlhc2VzZmlsZSBcCisJCQkiJChwd2QpLy50bXAtZW1haWwtYWxpYXNlcyIgJiYKKwkJZ2l0IGNvbmZpZyBzZW5kZW1haWwuYWxpYXNmaWxldHlwZSAiJGZpbGV0eXBlIiAmJgorCQlnaXQgc2VuZC1lbWFpbCAtLWR1bXAtYWxpYXNlcyAyPmVycm9ycyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCit9CisKK3Rlc3RfZHVtcF9hbGlhc2VzICctLWR1bXAtYWxpYXNlcyBzZW5kbWFpbCBmb3JtYXQnIFwKKwknc2VuZG1haWwnIFwKKwknYWJncm91cCcgXAorCSdhbGljZScgXAorCSdiY2dycCcgXAorCSdib2InIFwKKwknY2hsb2UnIDw8LVxFT0YKKwlhbGljZTogQWxpY2UgVyBMYW5kIDxhd29sQGV4YW1wbGUuY29tPgorCWJvYjogUm9iZXJ0IEJvYmJ5dG9uIDxib2JAZXhhbXBsZS5jb20+CisJY2hsb2U6IGNobG9lQGV4YW1wbGUuY29tCisJYWJncm91cDogYWxpY2UsIGJvYgorCWJjZ3JwOiBib2IsIGNobG9lLCBPdGhlciA8b0BleGFtcGxlLmNvbT4KKwlFT0YKKwordGVzdF9kdW1wX2FsaWFzZXMgJy0tZHVtcC1hbGlhc2VzIG11dHQgZm9ybWF0JyBcCisJJ211dHQnIFwKKwknYWxpY2UnIFwKKwknYm9iJyBcCisJJ2NobG9lJyBcCisJJ2RvbmFsZCcgPDwtXEVPRgorCWFsaWFzIGFsaWNlIEFsaWNlIFcgTGFuZCA8YXdvbEBleGFtcGxlLmNvbT4KKwlhbGlhcyBkb25hbGQgRG9uYWxkIEMgQ2FybHRvbiA8ZG9uY0BleGFtcGxlLmNvbT4KKwlhbGlhcyBib2IgUm9iZXJ0IEJvYmJ5dG9uIDxib2JAZXhhbXBsZS5jb20+CisJYWxpYXMgY2hsb2UgY2hsb2VAZXhhbXBsZS5jb20KKwlFT0YKKwordGVzdF9kdW1wX2FsaWFzZXMgJy0tZHVtcC1hbGlhc2VzIG1haWxyYyBmb3JtYXQnIFwKKwknbWFpbHJjJyBcCisJJ2FsaWNlJyBcCisJJ2JvYicgXAorCSdjaGxvZScgXAorCSdldmUnIDw8LVxFT0YKKwlhbGlhcyBhbGljZSAgIEFsaWNlIFcgTGFuZCA8YXdvbEBleGFtcGxlLmNvbT4KKwlhbGlhcyBldmUgICAgIEV2ZSA8ZXZlQGV4YW1wbGUuY29tPgorCWFsaWFzIGJvYiAgICAgUm9iZXJ0IEJvYmJ5dG9uIDxib2JAZXhhbXBsZS5jb20+CisJYWxpYXMgY2hsb2UgICBjaGxvZUBleGFtcGxlLmNvbQorCUVPRgorCit0ZXN0X2R1bXBfYWxpYXNlcyAnLS1kdW1wLWFsaWFzZXMgcGluZSBmb3JtYXQnIFwKKwkncGluZScgXAorCSdhbGljZScgXAorCSdib2InIFwKKwknY2hsb2UnIFwKKwknZXZlJyA8PC1cRU9GCisJYWxpY2UJQWxpY2UgVyBMYW5kCTxhd29sQGV4YW1wbGUuY29tPgorCWV2ZQlFdmUJPGV2ZUBleGFtcGxlLmNvbT4KKwlib2IJUm9iZXJ0CUJvYmJ5dG9uIDxib2JAZXhhbXBsZS5jb20+CisJY2hsb2UJCWNobG9lQGV4YW1wbGUuY29tCisJRU9GCisKK3Rlc3RfZHVtcF9hbGlhc2VzICctLWR1bXAtYWxpYXNlcyBnbnVzIGZvcm1hdCcgXAorCSdnbnVzJyBcCisJJ2FsaWNlJyBcCisJJ2JvYicgXAorCSdjaGxvZScgXAorCSdldmUnIDw8LVxFT0YKKwkoZGVmaW5lLW1haWwtYWxpYXMgImFsaWNlIiAiYXdvbEBleGFtcGxlLmNvbSIpCisJKGRlZmluZS1tYWlsLWFsaWFzICJldmUiICJldmVAZXhhbXBsZS5jb20iKQorCShkZWZpbmUtbWFpbC1hbGlhcyAiYm9iIiAiYm9iQGV4YW1wbGUuY29tIikKKwkoZGVmaW5lLW1haWwtYWxpYXMgImNobG9lIiAiY2hsb2VAZXhhbXBsZS5jb20iKQorCUVPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWR1bXAtYWxpYXNlcyBtdXN0IGJlIHVzZWQgYWxvbmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1lbWFpbCAtLWR1bXAtYWxpYXNlcyAtLXRvPWphbmljZUBleGFtcGxlLmNvbSAtMSByZWZzL2hlYWRzL2FjY291bnRpbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdhbGlhc2VzIGFuZCBzZW5kZW1haWwuaWRlbnRpdHknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgXAorCQktYyBzZW5kZW1haWwuaWRlbnRpdHk9Y2xvdWQgXAorCQktYyBzZW5kZW1haWwuYWxpYXNlc2ZpbGU9ZGVmYXVsdC1hbGlhc2VzIFwKKwkJLWMgc2VuZGVtYWlsLmNsb3VkLmFsaWFzZXNmaWxlPWNsb3VkLWFsaWFzZXMgXAorCQlzZW5kLWVtYWlsIC0xIDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiY2xvdWQtYWxpYXNlcyIgc3RkZXJyCisnCisKK3Rlc3Rfc2VuZG1haWxfYWxpYXNlcyAoKSB7CisJbXNnPSIkMSIgJiYgc2hpZnQgJiYKKwlleHBlY3Q9IiRAIiAmJgorCWNhdCA+LnRtcC1lbWFpbC1hbGlhc2VzICYmCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgIiRtc2ciICcKKwkJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJiBybSAtZnIgb3V0ZGlyICYmCisJCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLW8gb3V0ZGlyICYmCisJCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBzZW5kZW1haWwuYWxpYXNlc2ZpbGUgXAorCQkJIiQocHdkKS8udG1wLWVtYWlsLWFsaWFzZXMiICYmCisJCWdpdCBjb25maWcgc2VuZGVtYWlsLmFsaWFzZmlsZXR5cGUgc2VuZG1haWwgJiYKKwkJZ2l0IHNlbmQtZW1haWwgXAorCQkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCQktLXRvPWFsaWNlIC0tdG89YmNncnAgXAorCQkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJCW91dGRpci8wMDAxLSoucGF0Y2ggXAorCQkJMj5lcnJvcnMgPm91dCAmJgorCQlmb3IgaSBpbiAkZXhwZWN0CisJCWRvCisJCQlncmVwICJeISRpISQiIGNvbW1hbmRsaW5lMSB8fCByZXR1cm4gMQorCQlkb25lCisJJworfQorCit0ZXN0X3NlbmRtYWlsX2FsaWFzZXMgJ3NlbmRlbWFpbC5hbGlhc2ZpbGV0eXBlPXNlbmRtYWlsJyBcCisJJ2F3b2xAZXhhbXBsZVwuY29tJyBcCisJJ2JvYkBleGFtcGxlXC5jb20nIFwKKwknY2hsb2VAZXhhbXBsZVwuY29tJyBcCisJJ29AZXhhbXBsZVwuY29tJyA8PC1cRU9GCisJYWxpY2U6IEFsaWNlIFcgTGFuZCA8YXdvbEBleGFtcGxlLmNvbT4KKwlib2I6IFJvYmVydCBCb2JieXRvbiA8Ym9iQGV4YW1wbGUuY29tPgorCSMgdGhpcyBpcyBhIGNvbW1lbnQKKwkgICAjIHRoaXMgaXMgYWxzbyBhIGNvbW1lbnQKKwljaGxvZTogY2hsb2VAZXhhbXBsZS5jb20KKwlhYmdyb3VwOiBhbGljZSwgYm9iCisJYmNncnA6IGJvYiwgY2hsb2UsIE90aGVyIDxvQGV4YW1wbGUuY29tPgorCUVPRgorCit0ZXN0X3NlbmRtYWlsX2FsaWFzZXMgJ3NlbmRtYWlsIGFsaWFzZXMgbGluZSBmb2xkaW5nJyBcCisJYWxpY2UxIFwKKwlib2IxIGJvYjIgXAorCWNodWNrMSBjaHVjazIgXAorCWRhcmxhMSBkYXJsYTIgZGFybGEzIFwKKwllbHRvbjEgZWx0b24yIGVsdG9uMyBcCisJZnJlZDEgZnJlZDIgXAorCWdyZWcxIDw8LVxFT0YKKwlhbGljZTogYWxpY2UxCisJYm9iOiBib2IxLFwKKwlib2IyCisJY2h1Y2s6IGNodWNrMSwKKwkgICAgY2h1Y2syCisJZGFybGE6IGRhcmxhMSxcCisJZGFybGEyLAorCSAgICBkYXJsYTMKKwllbHRvbjogZWx0b24xLAorCSAgICBlbHRvbjIsXAorCWVsdG9uMworCWZyZWQ6IGZyZWQxLFwKKwkgICAgZnJlZDIKKwlncmVnOiBncmVnMQorCWJjZ3JwOiBib2IsIGNodWNrLCBkYXJsYSwgZWx0b24sIGZyZWQsIGdyZWcKKwlFT0YKKwordGVzdF9zZW5kbWFpbF9hbGlhc2VzICdzZW5kbWFpbCBhbGlhc2VzIHRvbGVyYXRlIGJvZ3VzIGxpbmUgZm9sZGluZycgXAorCWFsaWNlMSBib2IxIDw8LVxFT0YKKwkgICAgYWxpY2U6IGFsaWNlMQorCWJjZ3JwOiBib2IxXAorCUVPRgorCit0ZXN0X3NlbmRtYWlsX2FsaWFzZXMgJ3NlbmRtYWlsIGFsaWFzZXMgZW1wdHknIGFsaWNlIGJjZ3JwIDw8LVxFT0YKKwlFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdhbGlhcyBzdXBwb3J0IGluIFRvIGhlYWRlcicgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwllY2hvICJhbGlhcyBzYmQgIHNvbWVvbmVAZXhhbXBsZS5vcmciID4ubWFpbHJjICYmCisJdGVzdF9jb25maWcgc2VuZGVtYWlsLmFsaWFzZXNmaWxlICIubWFpbHJjIiAmJgorCXRlc3RfY29uZmlnIHNlbmRlbWFpbC5hbGlhc2ZpbGV0eXBlIG1haWxyYyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgLS10bz1zYmQgPmFsaWFzZWQucGF0Y2ggJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQlhbGlhc2VkLnBhdGNoIFwKKwkJMj5lcnJvcnMgPm91dCAmJgorCWdyZXAgIl4hc29tZW9uZUBleGFtcGxlXC5vcmchJCIgY29tbWFuZGxpbmUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnYWxpYXMgc3VwcG9ydCBpbiBDYyBoZWFkZXInICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZWNobyAiYWxpYXMgc2JkICBzb21lb25lQGV4YW1wbGUub3JnIiA+Lm1haWxyYyAmJgorCXRlc3RfY29uZmlnIHNlbmRlbWFpbC5hbGlhc2VzZmlsZSAiLm1haWxyYyIgJiYKKwl0ZXN0X2NvbmZpZyBzZW5kZW1haWwuYWxpYXNmaWxldHlwZSBtYWlscmMgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xIC0tY2M9c2JkID5hbGlhc2VkLnBhdGNoICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJYWxpYXNlZC5wYXRjaCBcCisJCTI+ZXJyb3JzID5vdXQgJiYKKwlncmVwICJeIXNvbWVvbmVAZXhhbXBsZVwub3JnISQiIGNvbW1hbmRsaW5lMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3RvY21kIHdvcmtzIHdpdGggYWxpYXNlcycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwllY2hvICJhbGlhcyBzYmQgIHNvbWVvbmVAZXhhbXBsZS5vcmciID4ubWFpbHJjICYmCisJdGVzdF9jb25maWcgc2VuZGVtYWlsLmFsaWFzZXNmaWxlICIubWFpbHJjIiAmJgorCXRlc3RfY29uZmlnIHNlbmRlbWFpbC5hbGlhc2ZpbGV0eXBlIG1haWxyYyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPnRvY21kLnBhdGNoICYmCisJZWNobyB0b2NtZC0tc2JkID4+dG9jbWQucGF0Y2ggJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvLWNtZD0uL3RvY21kLXNlZCBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCXRvY21kLnBhdGNoIFwKKwkJMj5lcnJvcnMgPm91dCAmJgorCWdyZXAgIl4hc29tZW9uZUBleGFtcGxlXC5vcmchJCIgY29tbWFuZGxpbmUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnY2NjbWQgd29ya3Mgd2l0aCBhbGlhc2VzJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWVjaG8gImFsaWFzIHNiZCAgc29tZW9uZUBleGFtcGxlLm9yZyIgPi5tYWlscmMgJiYKKwl0ZXN0X2NvbmZpZyBzZW5kZW1haWwuYWxpYXNlc2ZpbGUgIi5tYWlscmMiICYmCisJdGVzdF9jb25maWcgc2VuZGVtYWlsLmFsaWFzZmlsZXR5cGUgbWFpbHJjICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+Y2NjbWQucGF0Y2ggJiYKKwllY2hvIGNjY21kLS1zYmQgPj5jY2NtZC5wYXRjaCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tY2MtY21kPS4vY2NjbWQtc2VkIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJY2NjbWQucGF0Y2ggXAorCQkyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAiXiFzb21lb25lQGV4YW1wbGVcLm9yZyEkIiBjb21tYW5kbGluZTEKKycKKworZG9feG1haWxlcl90ZXN0ICgpIHsKKwlleHBlY3RlZD0kMSBwYXJhbXM9JDIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1zb21lb25lQGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhcmFtcyBcCisJCTAwMDEtKi5wYXRjaCBcCisJCTI+ZXJyb3JzID5vdXQgJiYKKwl7IGdyZXAgJ15YLU1haWxlcjonIG91dCB8fCA6OyB9ID5tYWlsZXIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAkZXhwZWN0ZWQgbWFpbGVyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1bbm8tXXhtYWlsZXIgd2l0aG91dCBhbnkgY29uZmlndXJhdGlvbicgJworCWRvX3htYWlsZXJfdGVzdCAxICItLXhtYWlsZXIiICYmCisJZG9feG1haWxlcl90ZXN0IDAgIi0tbm8teG1haWxlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLVtuby1deG1haWxlciB3aXRoIHNlbmRlbWFpbC54bWFpbGVyPXRydWUnICcKKwl0ZXN0X2NvbmZpZyBzZW5kZW1haWwueG1haWxlciB0cnVlICYmCisJZG9feG1haWxlcl90ZXN0IDEgIiIgJiYKKwlkb194bWFpbGVyX3Rlc3QgMCAiLS1uby14bWFpbGVyIiAmJgorCWRvX3htYWlsZXJfdGVzdCAxICItLXhtYWlsZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1bbm8tXXhtYWlsZXIgd2l0aCBzZW5kZW1haWwueG1haWxlcj1mYWxzZScgJworCXRlc3RfY29uZmlnIHNlbmRlbWFpbC54bWFpbGVyIGZhbHNlICYmCisJZG9feG1haWxlcl90ZXN0IDAgIiIgJiYKKwlkb194bWFpbGVyX3Rlc3QgMCAiLS1uby14bWFpbGVyIiAmJgorCWRvX3htYWlsZXJfdGVzdCAxICItLXhtYWlsZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0ZWQtbGlzdCcgJworCWdpdCBzZW5kLWVtYWlsIFwKKwktLWRyeS1ydW4gXAorCS0tZnJvbT0iRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4iIFwKKwktLXRvPSJUbyAxIDx0bzFAZXhhbXBsZS5jb20+IiBcCisJLS10bz0idG8yQGV4YW1wbGUuY29tIiBcCisJLS10bz0idG8zQGV4YW1wbGUuY29tIiBcCisJLS1jYz0iQ2MgMSA8Y2MxQGV4YW1wbGUuY29tPiIgXAorCS0tY2M9IkNjMiA8Y2MyQGV4YW1wbGUuY29tPiIgXAorCS0tYmNjPSJiY2MxQGV4YW1wbGUuY29tIiBcCisJLS1iY2M9ImJjYzJAZXhhbXBsZS5jb20iIFwKKwkwMDAxLWFkZC1tYXN0ZXIucGF0Y2ggfCByZXBsYWNlX3ZhcmlhYmxlX2ZpZWxkcyBcCisJPmV4cGVjdGVkLWxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICd1c2UgZW1haWwgbGlzdCBpbiAtLWNjIC0tdG8gYW5kIC0tYmNjJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCS0tZHJ5LXJ1biBcCisJLS1mcm9tPSJFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPiIgXAorCS0tdG89IlRvIDEgPHRvMUBleGFtcGxlLmNvbT4sIHRvMkBleGFtcGxlLmNvbSIgXAorCS0tdG89InRvM0BleGFtcGxlLmNvbSIgXAorCS0tY2M9IkNjIDEgPGNjMUBleGFtcGxlLmNvbT4sIENjMiA8Y2MyQGV4YW1wbGUuY29tPiIgXAorCS0tYmNjPSJiY2MxQGV4YW1wbGUuY29tLCBiY2MyQGV4YW1wbGUuY29tIiBcCisJMDAwMS1hZGQtbWFzdGVyLnBhdGNoIHwgcmVwbGFjZV92YXJpYWJsZV9maWVsZHMgXAorCT5hY3R1YWwtbGlzdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWxpc3QgYWN0dWFsLWxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdhbGlhc2VzIHdvcmsgd2l0aCBlbWFpbCBsaXN0JyAnCisJZWNobyAiYWxpYXMgdG8yIHRvMkBleGFtcGxlLmNvbSIgPi5tdXR0ICYmCisJZWNobyAiYWxpYXMgY2MxIENjIDEgPGNjMUBleGFtcGxlLmNvbT4iID4+Lm11dHQgJiYKKwl0ZXN0X2NvbmZpZyBzZW5kZW1haWwuYWxpYXNlc2ZpbGUgIi5tdXR0IiAmJgorCXRlc3RfY29uZmlnIHNlbmRlbWFpbC5hbGlhc2ZpbGV0eXBlIG11dHQgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJLS1kcnktcnVuIFwKKwktLWZyb209IkV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+IiBcCisJLS10bz0iVG8gMSA8dG8xQGV4YW1wbGUuY29tPiwgdG8yLCB0bzNAZXhhbXBsZS5jb20iIFwKKwktLWNjPSJjYzEsIENjMiA8Y2MyQGV4YW1wbGUuY29tPiIgXAorCS0tYmNjPSJiY2MxQGV4YW1wbGUuY29tLCBiY2MyQGV4YW1wbGUuY29tIiBcCisJMDAwMS1hZGQtbWFzdGVyLnBhdGNoIHwgcmVwbGFjZV92YXJpYWJsZV9maWVsZHMgXAorCT5hY3R1YWwtbGlzdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWxpc3QgYWN0dWFsLWxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhcmUgcmVtb3ZlZCcgJworCWVjaG8gImFsaWFzIHRvMiB0bzJAZXhhbXBsZS5jb20iID4ubXV0dCAmJgorCWVjaG8gImFsaWFzIGNjMSBDYyAxIDxjYzFAZXhhbXBsZS5jb20+IiA+Pi5tdXR0ICYmCisJdGVzdF9jb25maWcgc2VuZGVtYWlsLmFsaWFzZXNmaWxlICIubXV0dCIgJiYKKwl0ZXN0X2NvbmZpZyBzZW5kZW1haWwuYWxpYXNmaWxldHlwZSBtdXR0ICYmCisJVE8xPSQoZWNobyAiUVRvIDEgPHRvMUBleGFtcGxlLmNvbT4iIHwgcV90b190YWIpICYmCisJVE8yPSQoZWNobyAiUVp0bzIiIHwgcXpfdG9fdGFiX3NwYWNlKSAmJgorCUNDMT0kKGVjaG8gImNjMSIgfCBhcHBlbmRfY3IpICYmCisJQkNDMT0kKGVjaG8gIiBiY2MxQGV4YW1wbGUuY29tIFEiIHwgcV90b19udWwpICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCS0tZHJ5LXJ1biBcCisJLS1mcm9tPSIJRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4iIFwKKwktLXRvPSIkVE8xIiBcCisJLS10bz0iJFRPMiIgXAorCS0tdG89IiAgdG8zQGV4YW1wbGUuY29tICAgIiBcCisJLS1jYz0iJENDMSIgXAorCS0tY2M9IkNjMiA8Y2MyQGV4YW1wbGUuY29tPiIgXAorCS0tYmNjPSIkQkNDMSIgXAorCS0tYmNjPSJiY2MyQGV4YW1wbGUuY29tIiBcCisJMDAwMS1hZGQtbWFzdGVyLnBhdGNoIHwgcmVwbGFjZV92YXJpYWJsZV9maWVsZHMgXAorCT5hY3R1YWwtbGlzdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWxpc3QgYWN0dWFsLWxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdpbnZva2UgaG9vaycgJworCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKworCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3NlbmRlbWFpbC12YWxpZGF0ZSA8PC1cRU9GICYmCisJIyB0ZXN0IHRoYXQgd2UgaGF2ZSB0aGUgY29ycmVjdCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgcHdkLCBhbmQKKwkjIGFyZ3VtZW50CisJY2FzZSAiJEdJVF9ESVIiIGluCisJKi5naXQpCisJCXRydWUKKwkJOzsKKwkqKQorCQlmYWxzZQorCQk7OworCWVzYWMgJiYKKwl0ZXN0IC1mIDAwMDEtYWRkLW1hc3Rlci5wYXRjaCAmJgorCWdyZXAgImFkZCBtYXN0ZXIiICIkMSIKKwlFT0YKKworCW1rZGlyIHN1YmRpciAmJgorCSgKKwkJIyBUZXN0IHRoYXQgaXQgd29ya3MgZXZlbiBpZiB3ZSBhcmUgbm90IGF0IHRoZSByb290IG9mIHRoZQorCQkjIHdvcmtpbmcgdHJlZQorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHNlbmQtZW1haWwgXAorCQkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvLi4vZmFrZS5zZW5kbWFpbCIgXAorCQkJLi4vMDAwMS1hZGQtbWFzdGVyLnBhdGNoICYmCisKKwkJIyBWZXJpZnkgZXJyb3IgbWVzc2FnZSB3aGVuIGEgcGF0Y2ggaXMgcmVqZWN0ZWQgYnkgdGhlIGhvb2sKKwkJc2VkIC1lICJzL2FkZCBtYXN0ZXIveC8iIC4uLzAwMDEtYWRkLW1hc3Rlci5wYXRjaCA+Li4vYW5vdGhlci5wYXRjaCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1lbWFpbCBcCisJCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS8uLi9mYWtlLnNlbmRtYWlsIiBcCisJCQkuLi9hbm90aGVyLnBhdGNoIDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgInJlamVjdGVkIGJ5IHNlbmRlbWFpbC12YWxpZGF0ZSBob29rIiBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAndGVzdCB0aGF0IHNlbmQtZW1haWwgd29ya3Mgb3V0c2lkZSBhIHJlcG8nICcKKwlub25naXQgZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkiJChwd2QpLzAwMDEtYWRkLW1hc3Rlci5wYXRjaCIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDAyLWNvbHVtbi5zaCBiL3QvdDkwMDItY29sdW1uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5OTgzNTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MDAyLWNvbHVtbi5zaApAQCAtMCwwICsxLDE4MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjb2x1bW4nCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgPmxpc3RhIDw8XEVPRgorb25lCit0d28KK3RocmVlCitmb3VyCitmaXZlCitzaXgKK3NldmVuCitlaWdodAorbmluZQordGVuCitlbGV2ZW4KK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXZlcicgJworCWdpdCBjb2x1bW4gLS1pbmRlbnQ9WiAtLW1vZGU9bmV2ZXIgPGxpc3RhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBsaXN0YSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWx3YXlzJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK1pvbmUKK1p0d28KK1p0aHJlZQorWmZvdXIKK1pmaXZlCitac2l4Citac2V2ZW4KK1plaWdodAorWm5pbmUKK1p0ZW4KK1plbGV2ZW4KK0VPRgorCWdpdCBjb2x1bW4gLS1pbmRlbnQ9WiAtLW1vZGU9cGxhaW4gPGxpc3RhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnODAgY29sdW1ucycgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitvbmUgICAgdHdvICAgIHRocmVlICBmb3VyICAgZml2ZSAgIHNpeCAgICBzZXZlbiAgZWlnaHQgIG5pbmUgICB0ZW4gICAgZWxldmVuCitFT0YKKwlDT0xVTU5TPTgwIGdpdCBjb2x1bW4gLS1tb2RlPWNvbHVtbiA8bGlzdGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorb25lCit0d28KK3RocmVlCitmb3VyCitmaXZlCitzaXgKK3NldmVuCitlaWdodAorbmluZQordGVuCitlbGV2ZW4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENPTFVNTlNfQ0FOX0JFXzEgJ0NPTFVNTlMgPSAxJyAnCisJQ09MVU1OUz0xIGdpdCBjb2x1bW4gLS1tb2RlPWNvbHVtbiA8bGlzdGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWR0aCA9IDEnICcKKwlnaXQgY29sdW1uIC0tbW9kZT1jb2x1bW4gLS13aWR0aD0xIDxsaXN0YSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK0NPTFVNTlM9MjAKK2V4cG9ydCBDT0xVTU5TCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzIwIGNvbHVtbnMnICcKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorb25lICAgIHNldmVuCit0d28gICAgZWlnaHQKK3RocmVlICBuaW5lCitmb3VyICAgdGVuCitmaXZlICAgZWxldmVuCitzaXgKK0VPRgorCWdpdCBjb2x1bW4gLS1tb2RlPWNvbHVtbiA8bGlzdGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyMCBjb2x1bW5zLCBub2RlbnNlJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK29uZSAgICBzZXZlbgordHdvICAgIGVpZ2h0Cit0aHJlZSAgbmluZQorZm91ciAgIHRlbgorZml2ZSAgIGVsZXZlbgorc2l4CitFT0YKKwlnaXQgY29sdW1uIC0tbW9kZT1jb2x1bW4sbm9kZW5zZSA8IGxpc3RhID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzIwIGNvbHVtbnMsIGRlbnNlJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK29uZSAgIGZpdmUgIG5pbmUKK3R3byAgIHNpeCAgIHRlbgordGhyZWUgc2V2ZW4gZWxldmVuCitmb3VyICBlaWdodAorRU9GCisJZ2l0IGNvbHVtbiAtLW1vZGU9Y29sdW1uLGRlbnNlIDwgbGlzdGEgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMjAgY29sdW1ucywgcGFkZGluZyAyJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK29uZSAgICAgc2V2ZW4KK3R3byAgICAgZWlnaHQKK3RocmVlICAgbmluZQorZm91ciAgICB0ZW4KK2ZpdmUgICAgZWxldmVuCitzaXgKK0VPRgorCWdpdCBjb2x1bW4gLS1tb2RlPWNvbHVtbiAtLXBhZGRpbmcgMiA8bGlzdGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyMCBjb2x1bW5zLCBpbmRlbnRlZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgIG9uZSAgICBzZXZlbgorICB0d28gICAgZWlnaHQKKyAgdGhyZWUgIG5pbmUKKyAgZm91ciAgIHRlbgorICBmaXZlICAgZWxldmVuCisgIHNpeAorRU9GCisJZ2l0IGNvbHVtbiAtLW1vZGU9Y29sdW1uIC0taW5kZW50PSIgICIgPGxpc3RhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMjAgY29sdW1ucywgcm93IGZpcnN0JyAnCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK29uZSAgICB0d28KK3RocmVlICBmb3VyCitmaXZlICAgc2l4CitzZXZlbiAgZWlnaHQKK25pbmUgICB0ZW4KK2VsZXZlbgorRU9GCisJZ2l0IGNvbHVtbiAtLW1vZGU9cm93IDxsaXN0YSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzIwIGNvbHVtbnMsIHJvdyBmaXJzdCwgbm9kZW5zZScgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitvbmUgICAgdHdvCit0aHJlZSAgZm91cgorZml2ZSAgIHNpeAorc2V2ZW4gIGVpZ2h0CituaW5lICAgdGVuCitlbGV2ZW4KK0VPRgorCWdpdCBjb2x1bW4gLS1tb2RlPXJvdyxub2RlbnNlIDxsaXN0YSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzIwIGNvbHVtbnMsIHJvdyBmaXJzdCwgZGVuc2UnICcKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorb25lICAgdHdvICAgIHRocmVlCitmb3VyICBmaXZlICAgc2l4CitzZXZlbiBlaWdodCAgbmluZQordGVuICAgZWxldmVuCitFT0YKKwlnaXQgY29sdW1uIC0tbW9kZT1yb3csZGVuc2UgPGxpc3RhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDAzLWhlbHAtYXV0b2NvcnJlY3Quc2ggYi90L3Q5MDAzLWhlbHAtYXV0b2NvcnJlY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjFjNzkxOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkwMDMtaGVscC1hdXRvY29ycmVjdC5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0naGVscC5hdXRvY29ycmVjdCBmaW5kaW5nIGEgbWF0Y2gnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwkjIEFuIGFsaWFzCisJZ2l0IGNvbmZpZyBhbGlhcy5sZ2YgImxvZyAtLWZvcm1hdD0lcyAtLWZpcnN0LXBhcmVudCIgJiYKKworCSMgQSByYW5kb20gdXNlci1kZWZpbmVkIGNvbW1hbmQKKwl3cml0ZV9zY3JpcHQgZ2l0LWRpc3RpbWRpc3RpbSA8PC1FT0YgJiYKKwkJZWNobyBkaXN0aW1kaXN0aW0gd2FzIGNhbGxlZAorCUVPRgorCisJUEFUSD0iJFBBVEg6LiIgJiYKKwlleHBvcnQgUEFUSCAmJgorCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJhIHNpbmdsZSBsb2cgZW50cnkiICYmCisKKwkjIFNhbml0eSBjaGVjaworCWdpdCBsZ2YgPmFjdHVhbCAmJgorCWVjaG8gImEgc2luZ2xlIGxvZyBlbnRyeSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBkaXN0aW1kaXN0aW0gPmFjdHVhbCAmJgorCWVjaG8gImRpc3RpbWRpc3RpbSB3YXMgY2FsbGVkIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvY29ycmVjdCBzaG93aW5nIGNhbmRpZGF0ZXMnICcKKwlnaXQgY29uZmlnIGhlbHAuYXV0b2NvcnJlY3QgMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxmZyAyPmFjdHVhbCAmJgorCWdyZXAgIl4JbGdmIiBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaXN0aW1kaXN0IDI+YWN0dWFsICYmCisJZ3JlcCAiXglkaXN0aW1kaXN0aW0iIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvY29ycmVjdCBydW5uaW5nIGNvbW1hbmRzJyAnCisJZ2l0IGNvbmZpZyBoZWxwLmF1dG9jb3JyZWN0IC0xICYmCisKKwlnaXQgbGZnID5hY3R1YWwgJiYKKwllY2hvICJhIHNpbmdsZSBsb2cgZW50cnkiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgZGlzdGltZGlzdCA+YWN0dWFsICYmCisJZWNobyAiZGlzdGltZGlzdGltIHdhcyBjYWxsZWQiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTAwNC1leGFtcGxlLnNoIGIvdC90OTAwNC1leGFtcGxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlODg5NGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MDA0LWV4YW1wbGUuc2gKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrIHRoYXQgZXhhbXBsZSBjb2RlIGNvbXBpbGVzIGFuZCBydW5zJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlY29yYXRlJyAnCisJdGVzdC10b29sIGV4YW1wbGUtZGVjb3JhdGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDEwLXN2bi1mZS5zaCBiL3QvdDkwMTAtc3ZuLWZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzZjhmNWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MDEwLXN2bi1mZS5zaApAQCAtMCwwICsxLDExMDUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayBzdm4gZHVtcGZpbGUgaW1wb3J0ZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiB0ZXN0X2hhdmVfcHJlcmVxICFQSVBFCit0aGVuCisJc2tpcF9hbGw9InN2biBkdW1wZmlsZSBpbXBvcnRlciB0ZXN0aW5nIHJlcXVpcmVzIHRoZSBQSVBFIHByZXJlcXVpc2l0ZSIKKwl0ZXN0X2RvbmUKK2ZpCisKK3JlaW5pdF9naXQgKCkgeworCXJtIC1mciAuZ2l0ICYmCisJcm0gLWYgc3RyZWFtIGJhY2tmbG93ICYmCisJZ2l0IGluaXQgJiYKKwlta2ZpZm8gc3RyZWFtIGJhY2tmbG93Cit9CisKK3RyeV9kdW1wICgpIHsKKwlpbnB1dD0kMSAmJgorCW1heWJlX2ZhaWxfc3ZuZmU9JHsyOit0ZXN0XyQyfSAmJgorCW1heWJlX2ZhaWxfZmk9JHszOit0ZXN0XyQzfSAmJgorCisJeworCQkkbWF5YmVfZmFpbF9zdm5mZSB0ZXN0LXN2bi1mZSAiJGlucHV0IiA+c3RyZWFtIDM8YmFja2Zsb3cgJgorCX0gJiYKKwkkbWF5YmVfZmFpbF9maSBnaXQgZmFzdC1pbXBvcnQgLS1jYXQtYmxvYi1mZD0zIDxzdHJlYW0gMz5iYWNrZmxvdyAmJgorCXdhaXQgJCEKK30KKworcHJvcGVydGllcyAoKSB7CisJd2hpbGUgdGVzdCAiJCMiIC1uZSAwCisJZG8KKwkJcHJvcGVydHk9IiQxIiAmJgorCQl2YWx1ZT0iJDIiICYmCisJCXByaW50ZiAiJXNcbiIgIksgJHsjcHJvcGVydHl9IiAmJgorCQlwcmludGYgIiVzXG4iICIkcHJvcGVydHkiICYmCisJCXByaW50ZiAiJXNcbiIgIlYgJHsjdmFsdWV9IiAmJgorCQlwcmludGYgIiVzXG4iICIkdmFsdWUiICYmCisJCXNoaWZ0IDIgfHwKKwkJcmV0dXJuIDEKKwlkb25lCit9CisKK3RleHRfbm9fcHJvcHMgKCkgeworCXRleHQ9IiQxCisiICYmCisJcHJpbnRmICIlc1xuIiAiUHJvcC1jb250ZW50LWxlbmd0aDogMTAiICYmCisJcHJpbnRmICIlc1xuIiAiVGV4dC1jb250ZW50LWxlbmd0aDogJHsjdGV4dH0iICYmCisJcHJpbnRmICIlc1xuIiAiQ29udGVudC1sZW5ndGg6ICQoKCR7I3RleHR9ICsgMTApKSIgJiYKKwlwcmludGYgIiVzXG4iICIiICJQUk9QUy1FTkQiICYmCisJcHJpbnRmICIlc1xuIiAiJHRleHQiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGR1bXAnICcKKwlyZWluaXRfZ2l0ICYmCisJZWNobyAiU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIiID5pbnB1dCAmJgorCXRyeV9kdW1wIGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Y0IGR1bXBzIG5vdCBzdXBwb3J0ZWQnICcKKwlyZWluaXRfZ2l0ICYmCisJZWNobyAiU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDQiID52NC5kdW1wICYmCisJdHJ5X2R1bXAgdjQuZHVtcCBtdXN0X2ZhaWwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZW1wdHkgcmV2aXNpb24nICcKKwlyZWluaXRfZ2l0ICYmCisJcHJpbnRmICJyZXYgPG5vYm9keSwgbm9ib2R5QGxvY2FsPjogJXNcbiIgIiIgIiIgPmV4cGVjdCAmJgorCWNhdCA+ZW1wdHlyZXYuZHVtcCA8PC1cRU9GICYmCisJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCVJldmlzaW9uLW51bWJlcjogMQorCVByb3AtY29udGVudC1sZW5ndGg6IDAKKwlDb250ZW50LWxlbmd0aDogMAorCisJUmV2aXNpb24tbnVtYmVyOiAyCisJUHJvcC1jb250ZW50LWxlbmd0aDogMAorCUNvbnRlbnQtbGVuZ3RoOiAwCisKKwlFT0YKKwl0cnlfZHVtcCBlbXB0eXJldi5kdW1wICYmCisJZ2l0IGxvZyAtcCAtLWZvcm1hdD0icmV2IDwlYW4sICVhZT46ICVzIiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IHByb3BlcnRpZXMnICcKKwlyZWluaXRfZ2l0ICYmCisJcHJpbnRmICJyZXYgPG5vYm9keSwgbm9ib2R5QGxvY2FsPjogJXNcbiIgIiIgIiIgPmV4cGVjdCAmJgorCWNhdCA+ZW1wdHlwcm9wLmR1bXAgPDwtXEVPRiAmJgorCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwlSZXZpc2lvbi1udW1iZXI6IDEKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisKKwlSZXZpc2lvbi1udW1iZXI6IDIKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisJRU9GCisJdHJ5X2R1bXAgZW1wdHlwcm9wLmR1bXAgJiYKKwlnaXQgbG9nIC1wIC0tZm9ybWF0PSJyZXYgPCVhbiwgJWFlPjogJXMiIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9yIG5hbWUgYW5kIGNvbW1pdCBtZXNzYWdlJyAnCisJcmVpbml0X2dpdCAmJgorCWVjaG8gIjxhdXRob3JAZXhhbXBsZS5jb20sIGF1dGhvckBleGFtcGxlLmNvbUBsb2NhbD4iID5leHBlY3QuYXV0aG9yICYmCisJY2F0ID5tZXNzYWdlIDw8LVxFT0YgJiYKKwlBIGNvbmNpc2Ugc3VtbWFyeSBvZiB0aGUgY2hhbmdlCisKKwlBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBjaGFuZ2UsIHdoeSBpdCBpcyBuZWVkZWQsIHdoYXQKKwl3YXMgYnJva2VuIGFuZCB3aHkgYXBwbHlpbmcgdGhpcyBpcyB0aGUgYmVzdCBjb3Vyc2Ugb2YgYWN0aW9uLgorCisJKiBmaWxlLmMKKwkgICAgRGV0YWlscyBwZXJ0YWluaW5nIHRvIGFuIGluZGl2aWR1YWwgZmlsZS4KKwlFT0YKKwl7CisJCXByb3BlcnRpZXMgXAorCQkJc3ZuOmF1dGhvciBhdXRob3JAZXhhbXBsZS5jb20gXAorCQkJc3ZuOmxvZyAiJChjYXQgbWVzc2FnZSkiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSA+cHJvcHMgJiYKKwl7CisJCWVjaG8gIlNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzIiAmJgorCQllY2hvICYmCisJCWVjaG8gIlJldmlzaW9uLW51bWJlcjogMSIgJiYKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gJiYKKwkJY2F0IHByb3BzCisJfSA+bG9nLmR1bXAgJiYKKwl0cnlfZHVtcCBsb2cuZHVtcCAmJgorCWdpdCBsb2cgLXAgLS1mb3JtYXQ9IiVCIiBIRUFEID5hY3R1YWwubG9nICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iPCVhbiwgJWFlPiIgPmFjdHVhbC5hdXRob3IgJiYKKwl0ZXN0X2NtcCBtZXNzYWdlIGFjdHVhbC5sb2cgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYXV0aG9yIGFjdHVhbC5hdXRob3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zdXBwb3J0ZWQgcHJvcGVydGllcyBhcmUgaWdub3JlZCcgJworCXJlaW5pdF9naXQgJiYKKwllY2hvIGF1dGhvciA+ZXhwZWN0ICYmCisJY2F0ID5leHRyYXByb3AuZHVtcCA8PC1cRU9GICYmCisJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCVJldmlzaW9uLW51bWJlcjogMQorCVByb3AtY29udGVudC1sZW5ndGg6IDU2CisJQ29udGVudC1sZW5ndGg6IDU2CisKKwlLIDgKKwlub25zZW5zZQorCVYgMQorCXkKKwlLIDEwCisJc3ZuOmF1dGhvcgorCVYgNgorCWF1dGhvcgorCVBST1BTLUVORAorCUVPRgorCXRyeV9kdW1wIGV4dHJhcHJvcC5kdW1wICYmCisJZ2l0IGxvZyAtcCAtLWZvcm1hdD0lYW4gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd0aW1lc3RhbXAgYW5kIGVtcHR5IGZpbGUnICcKKwllY2hvIGF1dGhvckBleGFtcGxlLmNvbSA+ZXhwZWN0LmF1dGhvciAmJgorCWVjaG8gMTk5OS0wMS0wMSA+ZXhwZWN0LmRhdGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdC5maWxlcyAmJgorCXJlaW5pdF9naXQgJiYKKwl7CisJCXByb3BlcnRpZXMgXAorCQkJc3ZuOmF1dGhvciBhdXRob3JAZXhhbXBsZS5jb20gXAorCQkJc3ZuOmRhdGUgIjE5OTktMDEtMDFUMDA6MDE6MDAyLjAwMDAwMFoiIFwKKwkJCXN2bjpsb2cgImFkZCBlbXB0eSBmaWxlIiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gPnByb3BzICYmCisJeworCQljYXQgPDwtRU9GICYmCisJCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwkJUmV2aXNpb24tbnVtYmVyOiAxCisJCUVPRgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyAmJgorCQljYXQgcHJvcHMgJiYKKwkJY2F0IDw8LVxFT0YKKworCQlOb2RlLXBhdGg6IGVtcHR5LWZpbGUKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJQ29udGVudC1sZW5ndGg6IDAKKworCQlFT0YKKwl9ID5lbXB0eWZpbGUuZHVtcCAmJgorCXRyeV9kdW1wIGVtcHR5ZmlsZS5kdW1wICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lYW4gSEVBRCA+YWN0dWFsLmF1dGhvciAmJgorCWdpdCBsb2cgLS1kYXRlPXNob3J0IC0tZm9ybWF0PSVhZCBIRUFEID5hY3R1YWwuZGF0ZSAmJgorCWdpdCBscy10cmVlIC1yIC0tbmFtZS1vbmx5IEhFQUQgPmFjdHVhbC5maWxlcyAmJgorCXRlc3RfY21wIGV4cGVjdC5hdXRob3IgYWN0dWFsLmF1dGhvciAmJgorCXRlc3RfY21wIGV4cGVjdC5kYXRlIGFjdHVhbC5kYXRlICYmCisJdGVzdF9jbXAgZXhwZWN0LmZpbGVzIGFjdHVhbC5maWxlcyAmJgorCWdpdCBjaGVja291dCBIRUFEIGVtcHR5LWZpbGUgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXJlY3Rvcnkgd2l0aCBmaWxlcycgJworCXJlaW5pdF9naXQgJiYKKwlwcmludGYgIiVzXG4iIGRpcmVjdG9yeS9maWxlMSBkaXJlY3RvcnkvZmlsZTIgPmV4cGVjdC5maWxlcyAmJgorCWVjaG8gaGkgPmhpICYmCisJZWNobyBoZWxsbyA+aGVsbG8gJiYKKwl7CisJCXByb3BlcnRpZXMgXAorCQkJc3ZuOmF1dGhvciBhdXRob3JAZXhhbXBsZS5jb20gXAorCQkJc3ZuOmRhdGUgIjE5OTktMDItMDFUMDA6MDE6MDAyLjAwMDAwMFoiIFwKKwkJCXN2bjpsb2cgImFkZCBkaXJlY3Rvcnkgd2l0aCBzb21lIGZpbGVzIGluIGl0IiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gPnByb3BzICYmCisJeworCQljYXQgPDwtRU9GICYmCisJCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwkJUmV2aXNpb24tbnVtYmVyOiAxCisJCUVPRgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyAmJgorCQljYXQgcHJvcHMgJiYKKwkJY2F0IDw8LVxFT0YgJiYKKworCQlOb2RlLXBhdGg6IGRpcmVjdG9yeQorCQlOb2RlLWtpbmQ6IGRpcgorCQlOb2RlLWFjdGlvbjogYWRkCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJCVBST1BTLUVORAorCisJCU5vZGUtcGF0aDogZGlyZWN0b3J5L2ZpbGUxCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCUVPRgorCQl0ZXh0X25vX3Byb3BzIGhlbGxvICYmCisJCWNhdCA8PC1cRU9GICYmCisJCU5vZGUtcGF0aDogZGlyZWN0b3J5L2ZpbGUyCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCUVPRgorCQl0ZXh0X25vX3Byb3BzIGhpCisJfSA+ZGlyZWN0b3J5LmR1bXAgJiYKKwl0cnlfZHVtcCBkaXJlY3RvcnkuZHVtcCAmJgorCisJZ2l0IGxzLXRyZWUgLXIgLS1uYW1lLW9ubHkgSEVBRCA+YWN0dWFsLmZpbGVzICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgZGlyZWN0b3J5ICYmCisJdGVzdF9jbXAgZXhwZWN0LmZpbGVzIGFjdHVhbC5maWxlcyAmJgorCXRlc3RfY21wIGhlbGxvIGRpcmVjdG9yeS9maWxlMSAmJgorCXRlc3RfY21wIGhpIGRpcmVjdG9yeS9maWxlMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggbmFtZSB3aXRoIGJhY2tzbGFzaCcgJworCXJlaW5pdF9naXQgJiYKKwlzb3J0IDw8LVxFT0YgPmV4cGVjdC5icmFuY2gtZmlsZXMgJiYKKwl0cnVuay9maWxlMQorCXRydW5rL2ZpbGUyCisJImJyYW5jaGVzL1VwZGF0ZUZPUHRvMDk0XFwvZmlsZTEiCisJImJyYW5jaGVzL1VwZGF0ZUZPUHRvMDk0XFwvZmlsZTIiCisJRU9GCisKKwllY2hvIGhpID5oaSAmJgorCWVjaG8gaGVsbG8gPmhlbGxvICYmCisJeworCQlwcm9wZXJ0aWVzIFwKKwkJCXN2bjphdXRob3IgYXV0aG9yQGV4YW1wbGUuY29tIFwKKwkJCXN2bjpkYXRlICIxOTk5LTAyLTAyVDAwOjAxOjAyLjAwMDAwMFoiIFwKKwkJCXN2bjpsb2cgImFkZCBkaXJlY3Rvcnkgd2l0aCBzb21lIGZpbGVzIGluIGl0IiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gPnByb3BzLnNldHVwICYmCisJeworCQlwcm9wZXJ0aWVzIFwKKwkJCXN2bjphdXRob3IgYnJhbmNoZXJAZXhhbXBsZS5jb20gXAorCQkJc3ZuOmRhdGUgIjIwMDctMTItMDZUMjE6Mzg6MzQuMDAwMDAwWiIgXAorCQkJc3ZuOmxvZyAiVXBkYXRpbmcgZm9wIHRvIC45NCBhbmQgYWRqdXN0IGZvLXN0eWxlc2hlZXRzIiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gPnByb3BzLmJyYW5jaCAmJgorCXsKKwkJY2F0IDw8LUVPRiAmJgorCQlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJCVJldmlzaW9uLW51bWJlcjogMQorCQlFT0YKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcy5zZXR1cCkgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMuc2V0dXApICYmCisJCWVjaG8gJiYKKwkJY2F0IHByb3BzLnNldHVwICYmCisJCWNhdCA8PC1cRU9GICYmCisKKwkJTm9kZS1wYXRoOiB0cnVuaworCQlOb2RlLWtpbmQ6IGRpcgorCQlOb2RlLWFjdGlvbjogYWRkCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJCVBST1BTLUVORAorCisJCU5vZGUtcGF0aDogYnJhbmNoZXMKKwkJTm9kZS1raW5kOiBkaXIKKwkJTm9kZS1hY3Rpb246IGFkZAorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlDb250ZW50LWxlbmd0aDogMTAKKworCQlQUk9QUy1FTkQKKworCQlOb2RlLXBhdGg6IHRydW5rL2ZpbGUxCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCUVPRgorCQl0ZXh0X25vX3Byb3BzIGhlbGxvICYmCisJCWNhdCA8PC1cRU9GICYmCisJCU5vZGUtcGF0aDogdHJ1bmsvZmlsZTIKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJRU9GCisJCXRleHRfbm9fcHJvcHMgaGkgJiYKKwkJY2F0IDw8LVxFT0YgJiYKKworCQlSZXZpc2lvbi1udW1iZXI6IDIKKwkJRU9GCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMuYnJhbmNoKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcy5icmFuY2gpICYmCisJCWVjaG8gJiYKKwkJY2F0IHByb3BzLmJyYW5jaCAmJgorCQljYXQgPDwtXEVPRgorCisJCU5vZGUtcGF0aDogYnJhbmNoZXMvVXBkYXRlRk9QdG8wOTRcCisJCU5vZGUta2luZDogZGlyCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJTm9kZS1jb3B5ZnJvbS1yZXY6IDEKKwkJTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisJCU5vZGUta2luZDogZGlyCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMzQKKwkJQ29udGVudC1sZW5ndGg6IDM0CisKKwkJSyAxMworCQlzdm46bWVyZ2VpbmZvCisJCVYgMAorCisJCVBST1BTLUVORAorCQlFT0YKKwl9ID5icmFuY2guZHVtcCAmJgorCXRyeV9kdW1wIGJyYW5jaC5kdW1wICYmCisKKwlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEIHwKKwlzb3J0ID5hY3R1YWwuYnJhbmNoLWZpbGVzICYmCisJdGVzdF9jbXAgZXhwZWN0LmJyYW5jaC1maWxlcyBhY3R1YWwuYnJhbmNoLWZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vZGUgd2l0aG91dCBhY3Rpb24nICcKKwlyZWluaXRfZ2l0ICYmCisJY2F0ID5pbmFjdGlvbi5kdW1wIDw8LVxFT0YgJiYKKwlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJUmV2aXNpb24tbnVtYmVyOiAxCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBkaXJlY3RvcnkKKwlOb2RlLWtpbmQ6IGRpcgorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKwlFT0YKKwl0cnlfZHVtcCBpbmFjdGlvbi5kdW1wIG11c3RfZmFpbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhY3Rpb246IGFkZCBub2RlIHdpdGhvdXQgdGV4dCcgJworCXJlaW5pdF9naXQgJiYKKwljYXQgPnRleHRsZXNzLmR1bXAgPDwtXEVPRiAmJgorCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwlSZXZpc2lvbi1udW1iZXI6IDEKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisKKwlOb2RlLXBhdGg6IHRleHRsZXNzCisJTm9kZS1raW5kOiBmaWxlCisJTm9kZS1hY3Rpb246IGFkZAorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKwlFT0YKKwl0cnlfZHVtcCB0ZXh0bGVzcy5kdW1wIG11c3RfZmFpbAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjaGFuZ2UgZmlsZSBtb2RlIGJ1dCBrZWVwIG9sZCBjb250ZW50JyAnCisJcmVpbml0X2dpdCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCToxMjAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIFQJZ3JlZXRpbmcKKwlPQkpJRAorCToxMDA2NDQgMTIwMDAwIE9CSklEIE9CSklEIFQJZ3JlZXRpbmcKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZ3JlZXRpbmcKKwlFT0YKKwllY2hvICJsaW5rIGhlbGxvIiA+ZXhwZWN0LmJsb2IgJiYKKwllY2hvIGhlbGxvID5oZWxsbyAmJgorCWNhdCA+ZmlsZW1vZGUuZHVtcCA8PC1cRU9GICYmCisJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCVJldmlzaW9uLW51bWJlcjogMQorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogYWRkCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMQorCUNvbnRlbnQtbGVuZ3RoOiAyMQorCisJUFJPUFMtRU5ECisJbGluayBoZWxsbworCisJUmV2aXNpb24tbnVtYmVyOiAyCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBncmVldGluZworCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzMworCUNvbnRlbnQtbGVuZ3RoOiAzMworCisJSyAxMQorCXN2bjpzcGVjaWFsCisJViAxCisJKgorCVBST1BTLUVORAorCisJUmV2aXNpb24tbnVtYmVyOiAzCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBncmVldGluZworCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisJRU9GCisJdHJ5X2R1bXAgZmlsZW1vZGUuZHVtcCAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tcm9vdCAtLXN0ZGluIHwKKwkJc2VkICJzLyRPSURfUkVHRVgvT0JKSUQvZyIKKwl9ID5hY3R1YWwgJiYKKwlnaXQgc2hvdyBIRUFEOmdyZWV0aW5nID5hY3R1YWwuYmxvYiAmJgorCWdpdCBzaG93IEhFQUReOmdyZWV0aW5nID5hY3R1YWwudGFyZ2V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5ibG9iIGFjdHVhbC5ibG9iICYmCisJdGVzdF9jbXAgaGVsbG8gYWN0dWFsLnRhcmdldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgaW4gcHJvcGVydHkgdmFsdWUnICcKKwlyZWluaXRfZ2l0ICYmCisJZWNobyAiY29tbWl0IG1lc3NhZ2UiID5leHBlY3QubWVzc2FnZSAmJgorCXsKKwkJcHJvcGVydGllcyBcCisJCQl1bmltcG9ydGFudCAic29tZXRoaW5nIHdpdGggYSBOVUwgKFEpIiBcCisJCQlzdm46bG9nICJjb21taXQgbWVzc2FnZSIgJiYKKwkJZWNobyBQUk9QUy1FTkQKKwl9IHwKKwlxX3RvX251bCA+cHJvcHMgJiYKKwl7CisJCWNhdCA8PC1cRU9GICYmCisJCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwkJUmV2aXNpb24tbnVtYmVyOiAxCisJCUVPRgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyAmJgorCQljYXQgcHJvcHMKKwl9ID5udWxwcm9wLmR1bXAgJiYKKwl0cnlfZHVtcCBudWxwcm9wLmR1bXAgJiYKKwlnaXQgZGlmZi10cmVlIC0tYWx3YXlzIC1zIC0tZm9ybWF0PSVzIEhFQUQgPmFjdHVhbC5tZXNzYWdlICYmCisJdGVzdF9jbXAgZXhwZWN0Lm1lc3NhZ2UgYWN0dWFsLm1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTlVMIGluIGxvZyBtZXNzYWdlLCBmaWxlIGNvbnRlbnQsIGFuZCBwcm9wZXJ0eSBuYW1lJyAnCisJIyBDYXZlYXQ6IHN2bmFkbWluIDEuNi4xNiAocjEwNzM1MjkpIHRydW5jYXRlcyBhdCBcMCBpbiB0aGUKKwkjIHN2bjpzcGVjaWFsUW5vdHJlYWxseSBleGFtcGxlLgorCXJlaW5pdF9naXQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCWdyZWV0aW5nCisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWdyZWV0aW5nCisJRU9GCisJcHJpbnRmICJcbiVzXG4iICJzb21ldGhpbmcgd2l0aCBhbiBBU0NJSSBOVUwgKFEpIiA+ZXhwZWN0Lm1lc3NhZ2UgJiYKKwlwcmludGYgIiVzXG4iICJoZWxRbyIgPmV4cGVjdC5oZWxsbzEgJiYKKwlwcmludGYgIiVzXG4iICJsaW5rIGhlbGxvIiA+ZXhwZWN0LmhlbGxvMiAmJgorCXsKKwkJcHJvcGVydGllcyBzdm46bG9nICJzb21ldGhpbmcgd2l0aCBhbiBBU0NJSSBOVUwgKFEpIiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gfAorCXFfdG9fbnVsID5wcm9wcyAmJgorCXsKKwkJcV90b19udWwgPDwtXEVPRiAmJgorCQlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJCVJldmlzaW9uLW51bWJlcjogMQorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlDb250ZW50LWxlbmd0aDogMTAKKworCQlQUk9QUy1FTkQKKworCQlOb2RlLXBhdGg6IGdyZWV0aW5nCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCVRleHQtY29udGVudC1sZW5ndGg6IDYKKwkJQ29udGVudC1sZW5ndGg6IDE2CisKKwkJUFJPUFMtRU5ECisJCWhlbFFvCisKKwkJUmV2aXNpb24tbnVtYmVyOiAyCisJCUVPRgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyAmJgorCQljYXQgcHJvcHMgJiYKKwkJcV90b19udWwgPDwtXEVPRgorCisJCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogNDMKKwkJVGV4dC1jb250ZW50LWxlbmd0aDogMTEKKwkJQ29udGVudC1sZW5ndGg6IDU0CisKKwkJSyAyMQorCQlzdm46c3BlY2lhbFFub3RyZWFsbHkKKwkJViAxCisJCSoKKwkJUFJPUFMtRU5ECisJCWxpbmsgaGVsbG8KKwkJRU9GCisJfSA+OGJpdGNsZWFuLmR1bXAgJiYKKwl0cnlfZHVtcCA4Yml0Y2xlYW4uZHVtcCAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tcm9vdCAtLXN0ZGluIHwKKwkJc2VkICJzLyRPSURfUkVHRVgvT0JKSUQvZyIKKwl9ID5hY3R1YWwgJiYKKwl7CisJCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IG51bF90b19xICYmCisJCWVjaG8KKwl9IHwKKwlzZWQgLW5lICIvXlwkLyxcJCBwIiA+YWN0dWFsLm1lc3NhZ2UgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpncmVldGluZyB8IG51bF90b19xID5hY3R1YWwuaGVsbG8xICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRDpncmVldGluZyB8IG51bF90b19xID5hY3R1YWwuaGVsbG8yICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tZXNzYWdlIGFjdHVhbC5tZXNzYWdlICYmCisJdGVzdF9jbXAgZXhwZWN0LmhlbGxvMSBhY3R1YWwuaGVsbG8xICYmCisJdGVzdF9jbXAgZXhwZWN0LmhlbGxvMiBhY3R1YWwuaGVsbG8yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBmaWxlIG1vZGUgYW5kIHJlaXRlcmF0ZSBjb250ZW50JyAnCisJcmVpbml0X2dpdCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCToxMjAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIFQJZ3JlZXRpbmcKKwlPQkpJRAorCToxMDA2NDQgMTIwMDAwIE9CSklEIE9CSklEIFQJZ3JlZXRpbmcKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZ3JlZXRpbmcKKwlFT0YKKwllY2hvICJsaW5rIGhlbGxvIiA+ZXhwZWN0LmJsb2IgJiYKKwllY2hvIGhlbGxvID5oZWxsbyAmJgorCWNhdCA+ZmlsZW1vZGUyLmR1bXAgPDwtXEVPRiAmJgorCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwlSZXZpc2lvbi1udW1iZXI6IDEKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisKKwlOb2RlLXBhdGg6IGdyZWV0aW5nCisJTm9kZS1raW5kOiBmaWxlCisJTm9kZS1hY3Rpb246IGFkZAorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJVGV4dC1jb250ZW50LWxlbmd0aDogMTEKKwlDb250ZW50LWxlbmd0aDogMjEKKworCVBST1BTLUVORAorCWxpbmsgaGVsbG8KKworCVJldmlzaW9uLW51bWJlcjogMgorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogY2hhbmdlCisJUHJvcC1jb250ZW50LWxlbmd0aDogMzMKKwlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMQorCUNvbnRlbnQtbGVuZ3RoOiA0NAorCisJSyAxMQorCXN2bjpzcGVjaWFsCisJViAxCisJKgorCVBST1BTLUVORAorCWxpbmsgaGVsbG8KKworCVJldmlzaW9uLW51bWJlcjogMworCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogY2hhbmdlCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMQorCUNvbnRlbnQtbGVuZ3RoOiAyMQorCisJUFJPUFMtRU5ECisJbGluayBoZWxsbworCUVPRgorCXRyeV9kdW1wIGZpbGVtb2RlMi5kdW1wICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tc3RkaW4gfAorCQlzZWQgInMvJE9JRF9SRUdFWC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCWdpdCBzaG93IEhFQUQ6Z3JlZXRpbmcgPmFjdHVhbC5ibG9iICYmCisJZ2l0IHNob3cgSEVBRF46Z3JlZXRpbmcgPmFjdHVhbC50YXJnZXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmJsb2IgYWN0dWFsLmJsb2IgJiYKKwl0ZXN0X2NtcCBoZWxsbyBhY3R1YWwudGFyZ2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbHRhcyBzdXBwb3J0ZWQnICcKKwlyZWluaXRfZ2l0ICYmCisJeworCQkjIChvbGQpIGggKyAoaW5saW5lKSBlbGxvICsgKG9sZCkgXG4KKwkJcHJpbnRmICJTVk5RJWIlYiVzIiAiUVwwMDNcMDA2XDAwNVwwMDQiICJcMDAxUVwwMjA0XDAwMVwwMDIiICJlbGxvIiB8CisJCXFfdG9fbnVsCisJfSA+ZGVsdGEgJiYKKwl7CisJCXByb3BlcnRpZXMgXAorCQkJc3ZuOmF1dGhvciBhdXRob3JAZXhhbXBsZS5jb20gXAorCQkJc3ZuOmRhdGUgIjE5OTktMDEtMDVUMDA6MDE6MDAyLjAwMDAwMFoiIFwKKwkJCXN2bjpsb2cgImFkZCBncmVldGluZyIgJiYKKwkJZWNobyBQUk9QUy1FTkQKKwl9ID5wcm9wcyAmJgorCXsKKwkJcHJvcGVydGllcyBcCisJCQlzdm46YXV0aG9yIGF1dGhvckBleGFtcGxlLmNvbSBcCisJCQlzdm46ZGF0ZSAiMTk5OS0wMS0wNlQwMDowMTowMDIuMDAwMDAwWiIgXAorCQkJc3ZuOmxvZyAiY2hhbmdlIGl0IiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gPnByb3BzMiAmJgorCXsKKwkJZWNobyBTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMyAmJgorCQllY2hvICYmCisJCWVjaG8gUmV2aXNpb24tbnVtYmVyOiAxICYmCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvICYmCisJCWNhdCBwcm9wcyAmJgorCQljYXQgPDwtXEVPRiAmJgorCisJCU5vZGUtcGF0aDogaGVsbG8KKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJVGV4dC1jb250ZW50LWxlbmd0aDogMworCQlDb250ZW50LWxlbmd0aDogMTMKKworCQlQUk9QUy1FTkQKKwkJaGkKKworCQlFT0YKKwkJZWNobyBSZXZpc2lvbi1udW1iZXI6IDIgJiYKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wczIpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzMikgJiYKKwkJZWNobyAmJgorCQljYXQgcHJvcHMyICYmCisJCWNhdCA8PC1cRU9GICYmCisKKwkJTm9kZS1wYXRoOiBoZWxsbworCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGNoYW5nZQorCQlUZXh0LWRlbHRhOiB0cnVlCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUVPRgorCQllY2hvIFRleHQtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPGRlbHRhKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKCgxMCArICQod2MgLWMgPGRlbHRhKSkpICYmCisJCWVjaG8gJiYKKwkJZWNobyBQUk9QUy1FTkQgJiYKKwkJY2F0IGRlbHRhCisJfSA+ZGVsdGEuZHVtcCAmJgorCXRyeV9kdW1wIGRlbHRhLmR1bXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvcGVydHkgZGVsdGFzIHN1cHBvcnRlZCcgJworCXJlaW5pdF9naXQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJT0JKSUQKKwk6MTAwNzU1IDEwMDY0NCBPQkpJRCBPQkpJRCBNCXNjcmlwdC5zaAorCUVPRgorCXsKKwkJcHJvcGVydGllcyBcCisJCQlzdm46YXV0aG9yIGF1dGhvckBleGFtcGxlLmNvbSBcCisJCQlzdm46ZGF0ZSAiMTk5OS0wMy0wNlQwMDowMTowMDIuMDAwMDAwWiIgXAorCQkJc3ZuOmxvZyAibWFrZSBhbiBleGVjdXRhYmxlLCBvciBjaG1vZCAteCBpdCIgJiYKKwkJZWNobyBQUk9QUy1FTkQKKwl9ID5yZXZwcm9wcyAmJgorCXsKKwkJZWNobyBTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMyAmJgorCQllY2hvICYmCisJCWVjaG8gUmV2aXNpb24tbnVtYmVyOiAxICYmCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cmV2cHJvcHMpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQod2MgLWMgPHJldnByb3BzKSAmJgorCQllY2hvICYmCisJCWNhdCByZXZwcm9wcyAmJgorCQllY2hvICYmCisJCWNhdCA8PC1cRU9GICYmCisJCU5vZGUtcGF0aDogc2NyaXB0LnNoCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCVRleHQtY29udGVudC1sZW5ndGg6IDAKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMzkKKwkJQ29udGVudC1sZW5ndGg6IDM5CisKKwkJSyAxNAorCQlzdm46ZXhlY3V0YWJsZQorCQlWIDQKKwkJdHJ1ZQorCQlQUk9QUy1FTkQKKworCQlFT0YKKwkJZWNobyBSZXZpc2lvbi1udW1iZXI6IDIgJiYKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxyZXZwcm9wcykgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cmV2cHJvcHMpICYmCisJCWVjaG8gJiYKKwkJY2F0IHJldnByb3BzICYmCisJCWVjaG8gJiYKKwkJY2F0IDw8LVxFT0YKKwkJTm9kZS1wYXRoOiBzY3JpcHQuc2gKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwkJUHJvcC1kZWx0YTogdHJ1ZQorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzMAorCQlDb250ZW50LWxlbmd0aDogMzAKKworCQlEIDE0CisJCXN2bjpleGVjdXRhYmxlCisJCVBST1BTLUVORAorCQlFT0YKKwl9ID5wcm9wZGVsdGEuZHVtcCAmJgorCXRyeV9kdW1wIHByb3BkZWx0YS5kdW1wICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1zdGRpbiB8CisJCXNlZCAicy8kT0lEX1JFR0VYL09CSklEL2ciCisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9wZXJ0aWVzIG9uIC8nICcKKwlyZWluaXRfZ2l0ICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCU9CSklECisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWdyZWV0aW5nCisJRU9GCisJc2VkIC1lICJzL1gkLy8iIDw8LVxFT0YgPmNoYW5nZXJvb3QuZHVtcCAmJgorCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwlSZXZpc2lvbi1udW1iZXI6IDEKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisKKwlOb2RlLXBhdGg6IGdyZWV0aW5nCisJTm9kZS1raW5kOiBmaWxlCisJTm9kZS1hY3Rpb246IGFkZAorCVRleHQtY29udGVudC1sZW5ndGg6IDAKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisKKwlSZXZpc2lvbi1udW1iZXI6IDIKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisKKwlOb2RlLXBhdGg6IFgKKwlOb2RlLWtpbmQ6IGRpcgorCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwlQcm9wLWRlbHRhOiB0cnVlCisJUHJvcC1jb250ZW50LWxlbmd0aDogNDMKKwlDb250ZW50LWxlbmd0aDogNDMKKworCUsgMTAKKwlzdm46aWdub3JlCisJViAxMQorCWJ1aWxkLWFyZWEKKworCVBST1BTLUVORAorCUVPRgorCXRyeV9kdW1wIGNoYW5nZXJvb3QuZHVtcCAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tcm9vdCAtLWFsd2F5cyAtLXN0ZGluIHwKKwkJc2VkICJzLyRPSURfUkVHRVgvT0JKSUQvZyIKKwl9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbHRhcyBmb3IgdHlwZWNoYW5nZScgJworCXJlaW5pdF9naXQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJT0JKSUQKKwk6MTIwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBUCXRlc3QtZmlsZQorCU9CSklECisJOjEwMDc1NSAxMjAwMDAgT0JKSUQgT0JKSUQgVAl0ZXN0LWZpbGUKKwlPQkpJRAorCTowMDAwMDAgMTAwNzU1IE9CSklEIE9CSklEIEEJdGVzdC1maWxlCisJRU9GCisJY2F0ID5kZWxldGVwcm9wLmR1bXAgPDwtXEVPRiAmJgorCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwlSZXZpc2lvbi1udW1iZXI6IDEKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisKKwlOb2RlLXBhdGg6IHRlc3QtZmlsZQorCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBhZGQKKwlQcm9wLWRlbHRhOiB0cnVlCisJUHJvcC1jb250ZW50LWxlbmd0aDogMzUKKwlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxNworCUNvbnRlbnQtbGVuZ3RoOiA1MgorCisJSyAxNAorCXN2bjpleGVjdXRhYmxlCisJViAwCisKKwlQUk9QUy1FTkQKKwlsaW5rIHRlc3RpbmcgMTIzCisKKwlSZXZpc2lvbi1udW1iZXI6IDIKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisKKwlOb2RlLXBhdGg6IHRlc3QtZmlsZQorCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwlQcm9wLWRlbHRhOiB0cnVlCisJUHJvcC1jb250ZW50LWxlbmd0aDogNTMKKwlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxNworCUNvbnRlbnQtbGVuZ3RoOiA3MAorCisJSyAxMQorCXN2bjpzcGVjaWFsCisJViAxCisJKgorCUQgMTQKKwlzdm46ZXhlY3V0YWJsZQorCVBST1BTLUVORAorCWxpbmsgdGVzdGluZyAyMzEKKworCVJldmlzaW9uLW51bWJlcjogMworCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogdGVzdC1maWxlCisJTm9kZS1raW5kOiBmaWxlCisJTm9kZS1hY3Rpb246IGNoYW5nZQorCVByb3AtZGVsdGE6IHRydWUKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAyNworCVRleHQtY29udGVudC1sZW5ndGg6IDE3CisJQ29udGVudC1sZW5ndGg6IDQ0CisKKwlEIDExCisJc3ZuOnNwZWNpYWwKKwlQUk9QUy1FTkQKKwlsaW5rIHRlc3RpbmcgMzIxCisJRU9GCisJdHJ5X2R1bXAgZGVsZXRlcHJvcC5kdW1wICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tc3RkaW4gfAorCQlzZWQgInMvJE9JRF9SRUdFWC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsdGFzIG5lZWQgbm90IGNvbnN1bWUgdGhlIHdob2xlIHByZWltYWdlJyAnCisJcmVpbml0X2dpdCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCToxMjAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIFQJcG9zdGltYWdlCisJT0JKSUQKKwk6MTAwNjQ0IDEyMDAwMCBPQkpJRCBPQkpJRCBUCXBvc3RpbWFnZQorCU9CSklECisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlwb3N0aW1hZ2UKKwlFT0YKKwllY2hvICJmaXJzdCBwcmVpbWFnZSIgPmV4cGVjdC4xICYmCisJcHJpbnRmIHRhcmdldCA+ZXhwZWN0LjIgJiYKKwlwcmludGYgbG5rID5leHBlY3QuMyAmJgorCXsKKwkJcHJpbnRmICJTVk5RJWIlYiViIiAiUVFcMDE3XDAwMVwwMTciICJcMDIxNyIgImZpcnN0IHByZWltYWdlXG4iIHwKKwkJcV90b19udWwKKwl9ID5kZWx0YS4xICYmCisJeworCQlwcm9wZXJ0aWVzIHN2bjpzcGVjaWFsICIqIiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gPnN5bWxpbmsucHJvcHMgJiYKKwl7CisJCXByaW50ZiAiU1ZOUSViJWIlYiIgIlFcMDAyXDAxM1wwMDRcMDEyIiAiXDAyMDFcMDAxXDAwMVwwMjExIiAibG5rIHRhcmdldCIgfAorCQlxX3RvX251bAorCX0gPmRlbHRhLjIgJiYKKwl7CisJCXByaW50ZiAiU1ZOUSViJWIiICJRXDAwNFwwMDNcMDA0USIgIlwwMDFRXDAwMlwwMDIiIHwKKwkJcV90b19udWwKKwl9ID5kZWx0YS4zICYmCisJeworCQljYXQgPDwtXEVPRiAmJgorCQlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJCVJldmlzaW9uLW51bWJlcjogMQorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlDb250ZW50LWxlbmd0aDogMTAKKworCQlQUk9QUy1FTkQKKworCQlOb2RlLXBhdGg6IHBvc3RpbWFnZQorCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGFkZAorCQlUZXh0LWRlbHRhOiB0cnVlCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUVPRgorCQllY2hvIFRleHQtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPGRlbHRhLjEpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQoKDEwICsgJCh3YyAtYyA8ZGVsdGEuMSkpKSAmJgorCQllY2hvICYmCisJCWVjaG8gUFJPUFMtRU5EICYmCisJCWNhdCBkZWx0YS4xICYmCisJCWNhdCA8PC1cRU9GICYmCisKKwkJUmV2aXNpb24tbnVtYmVyOiAyCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJCVBST1BTLUVORAorCisJCU5vZGUtcGF0aDogcG9zdGltYWdlCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogY2hhbmdlCisJCVRleHQtZGVsdGE6IHRydWUKKwkJRU9GCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8c3ltbGluay5wcm9wcykgJiYKKwkJZWNobyBUZXh0LWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxkZWx0YS4yKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKCgkKHdjIC1jIDxzeW1saW5rLnByb3BzKSArICQod2MgLWMgPGRlbHRhLjIpKSkgJiYKKwkJZWNobyAmJgorCQljYXQgc3ltbGluay5wcm9wcyAmJgorCQljYXQgZGVsdGEuMiAmJgorCQljYXQgPDwtXEVPRiAmJgorCisJCVJldmlzaW9uLW51bWJlcjogMworCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlDb250ZW50LWxlbmd0aDogMTAKKworCQlQUk9QUy1FTkQKKworCQlOb2RlLXBhdGg6IHBvc3RpbWFnZQorCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGNoYW5nZQorCQlUZXh0LWRlbHRhOiB0cnVlCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUVPRgorCQllY2hvIFRleHQtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPGRlbHRhLjMpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQoKDEwICsgJCh3YyAtYyA8ZGVsdGEuMykpKSAmJgorCQllY2hvICYmCisJCWVjaG8gUFJPUFMtRU5EICYmCisJCWNhdCBkZWx0YS4zICYmCisJCWVjaG8KKwl9ID5kZWx0YXBhcnRpYWwuZHVtcCAmJgorCXRyeV9kdW1wIGRlbHRhcGFydGlhbC5kdW1wICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tc3RkaW4gfAorCQlzZWQgInMvJE9JRF9SRUdFWC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgc2hvdyBIRUFEOnBvc3RpbWFnZSA+YWN0dWFsLjMgJiYKKwlnaXQgc2hvdyBIRUFEXjpwb3N0aW1hZ2UgPmFjdHVhbC4yICYmCisJZ2l0IHNob3cgSEVBRF5eOnBvc3RpbWFnZSA+YWN0dWFsLjEgJiYKKwl0ZXN0X2NtcCBleHBlY3QuMSBhY3R1YWwuMSAmJgorCXRlc3RfY21wIGV4cGVjdC4yIGFjdHVhbC4yICYmCisJdGVzdF9jbXAgZXhwZWN0LjMgYWN0dWFsLjMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gaGFuZyBmb3IgZGVsdGEgdHJ5aW5nIHRvIHJlYWQgcGFzdCBlbmQgb2YgcHJlaW1hZ2UnICcKKwlyZWluaXRfZ2l0ICYmCisJeworCQkjIENPUFkgMQorCQlwcmludGYgIlNWTlElYiViIiAiUVwwMDFcMDAxXDAwMlEiICJcMDAxUSIgfAorCQlxX3RvX251bAorCX0gPmdyZWVkeS5kZWx0YSAmJgorCXsKKwkJY2F0IDw8LVxFT0YgJiYKKwkJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCQlSZXZpc2lvbi1udW1iZXI6IDEKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJQ29udGVudC1sZW5ndGg6IDEwCisKKwkJUFJPUFMtRU5ECisKKwkJTm9kZS1wYXRoOiBib290c3RyYXAKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJVGV4dC1kZWx0YTogdHJ1ZQorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlFT0YKKwkJZWNobyBUZXh0LWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxncmVlZHkuZGVsdGEpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQoKDEwICsgJCh3YyAtYyA8Z3JlZWR5LmRlbHRhKSkpICYmCisJCWVjaG8gJiYKKwkJZWNobyBQUk9QUy1FTkQgJiYKKwkJY2F0IGdyZWVkeS5kZWx0YSAmJgorCQllY2hvCisJfSA+Z3JlZWR5ZGVsdGEuZHVtcCAmJgorCXRyeV9kdW1wIGdyZWVkeWRlbHRhLmR1bXAgbXVzdF9mYWlsIG1pZ2h0X2ZhaWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHN2biByZXBvJyAnCisJc3ZuY29uZj0kUFdEL3N2bmNvbmYgJiYKKwlta2RpciAtcCAiJHN2bmNvbmYiICYmCisKKwlpZgorCQlzdm5hZG1pbiAtaCA+L2Rldi9udWxsIDI+JjEgJiYKKwkJc3ZuYWRtaW4gY3JlYXRlIHNpbXBsZS1zdm4gJiYKKwkJc3ZuYWRtaW4gbG9hZCBzaW1wbGUtc3ZuIDwiJFRFU1RfRElSRUNUT1JZL3Q5MTM1L3N2bi5kdW1wIiAmJgorCQlzdm4gZXhwb3J0IC0tY29uZmlnLWRpciAiJHN2bmNvbmYiICJmaWxlOi8vJFBXRC9zaW1wbGUtc3ZuIiBzaW1wbGUtc3ZuY28KKwl0aGVuCisJCXRlc3Rfc2V0X3ByZXJlcSBTVk5SRVBPCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTVk5SRVBPICd0OTEzNS9zdm4uZHVtcCcgJworCW1rZGlyIC1wIHNpbXBsZS1naXQgJiYKKwkoCisJCWNkIHNpbXBsZS1naXQgJiYKKwkJcmVpbml0X2dpdCAmJgorCQl0cnlfZHVtcCAiJFRFU1RfRElSRUNUT1JZL3Q5MTM1L3N2bi5kdW1wIgorCSkgJiYKKwkoCisJCWNkIHNpbXBsZS1zdm5jbyAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGZldGNoIC4uL3NpbXBsZS1naXQgbWFzdGVyICYmCisJCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEZFVENIX0hFQUQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTAxMS1zdm4tZGEuc2ggYi90L3Q5MDExLXN2bi1kYS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYjFlZjI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTAxMS1zdm4tZGEuc2gKQEAgLTAsMCArMSwyNDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHBhcnNpbmcgb2Ygc3ZuZGlmZjAgZmlsZXMKKworVXNpbmcgdGhlICJ0ZXN0LXN2bi1mZSAtZCIgaGVscGVyLCBjaGVjayB0aGF0IHN2bi1mZSBjb3JyZWN0bHkKK2ludGVycHJldHMgZGVsdGFzIHVzaW5nIHZhcmlvdXMgZmFjaWxpdGllcyAoc29tZSBmcm9tIHRoZSBzcGVjLAorc29tZSBvbmx5IGxlYXJuZWQgZnJvbSBwcmFjdGljZSkuCisnCisuIC4vdGVzdC1saWIuc2gKKworPmVtcHR5CitwcmludGYgZm9vID5wcmVpbWFnZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgZW1wdHkgZGVsdGEnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBlbXB0eSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbHRhIGNhbiBlbXB0eSBmaWxlJyAnCisJcHJpbnRmICJTVk5RIiB8IHFfdG9fbnVsID5jbGVhci5kZWx0YSAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLmRlbHRhIDQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IHN2bmRpZmYyJyAnCisJcHJpbnRmICJTVk5cMDAyIiA+YmFkLmZpbGV0eXBlICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgYmFkLmZpbGV0eXBlIDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25lLXdpbmRvdyBlbXB0eSBkZWx0YScgJworCXByaW50ZiAiU1ZOUSVzIiAiUVFRUVEiIHwgcV90b19udWwgPmNsZWFyLm9uZXdpbmRvdyAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLm9uZXdpbmRvdyA5ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdCBpbmNvbXBsZXRlIHdpbmRvdyBoZWFkZXInICcKKwlwcmludGYgIlNWTlElcyIgIlFRUVFRIiB8IHFfdG9fbnVsID5jbGVhci5vbmV3aW5kb3cgJiYKKwlwcmludGYgIlNWTlElcyIgIlFRIiB8IHFfdG9fbnVsID5jbGVhci5wYXJ0aWFsd2luZG93ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIub25ld2luZG93IDYgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5wYXJ0aWFsd2luZG93IDYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IGRlY2xhcmVkIGRlbHRhIGxvbmdlciB0aGFuIGFjdHVhbCBkZWx0YScgJworCXByaW50ZiAiU1ZOUSVzIiAiUVFRUVEiIHwgcV90b19udWwgPmNsZWFyLm9uZXdpbmRvdyAmJgorCXByaW50ZiAiU1ZOUSVzIiAiUVEiIHwgcV90b19udWwgPmNsZWFyLnBhcnRpYWx3aW5kb3cgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5vbmV3aW5kb3cgMTQgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5wYXJ0aWFsd2luZG93IDkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvLXdpbmRvdyBlbXB0eSBkZWx0YScgJworCXByaW50ZiAiU1ZOUSVzJXMiICJRUVFRUSIgIlFRUVFRIiB8IHFfdG9fbnVsID5jbGVhci50d293aW5kb3cgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci50d293aW5kb3cgMTQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLnR3b3dpbmRvdyAxMyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9pc3kgemVyb2VzJyAnCisJcHJpbnRmICJTVk5RJXMiIFwKKwkJIlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUVFRUVEiIHwKKwkJdHIgUiAiXDIwMCIgfAorCQlxX3RvX251bCA+Y2xlYXIubm9pc3kgJiYKKwlsZW49JCh3YyAtYyA8Y2xlYXIubm9pc3kpICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIubm9pc3kgJGxlbiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IHZhcmlhYmxlLWxlbmd0aCBpbnQgaW4gbWFnaWMnICcKKwlwcmludGYgIlNWTlJRIiB8IHRyIFIgIlwyMDAiIHwgcV90b19udWwgPmNsZWFyLmJhZG1hZ2ljICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIuYmFkbWFnaWMgNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgdHJ1bmNhdGVkIGludGVnZXInICcKKwlwcmludGYgIlNWTlElcyVzIiAiUVFRUVEiICJRUVFRUlJRIiB8CisJCXRyIFIgIlwyMDAiIHwKKwkJcV90b19udWwgPmNsZWFyLmZ1bGxpbnQgJiYKKwlwcmludGYgIlNWTlElcyVzIiAiUVFRUVEiICJRUVFRUlIiIHwKKwkJdHIgUlQgIlwyMDEiIHwKKwkJcV90b19udWwgPmNsZWFyLnBhcnRpYWxpbnQgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5mdWxsaW50IDE1ICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIuZnVsbGludCAxNiAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLnBhcnRpYWxpbnQgMTUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uZW1wdHkgKGJ1dCB1bnVzZWQpIHByZWltYWdlIHZpZXcnICcKKwlwcmludGYgIlNWTlElYiIgIlFcMDAzUVFRIiB8IHFfdG9fbnVsID5jbGVhci5yZWFkcHJlaW1hZ2UgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5yZWFkcHJlaW1hZ2UgOSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVpbWFnZSB2aWV3OiByaWdodCBlbmRwb2ludCBjYW5ub3QgYmFja3RyYWNrJyAnCisJcHJpbnRmICJTVk5RJWIlYiIgIlFcMDAzUVFRIiAiUVwwMDJRUVEiIHwKKwkJcV90b19udWwgPmNsZWFyLmJhY2t0cmFjayAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLmJhY2t0cmFjayAxNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVpbWFnZSB2aWV3OiBsZWZ0IGVuZHBvaW50IGNhbiBhZHZhbmNlJyAnCisJcHJpbnRmICJTVk5RJWIlYiIgIlFcMDAzUVFRIiAiXDAwMVwwMDJRUVEiIHwKKwkJcV90b19udWwgPmNsZWFyLnByZXNocmluayAmJgorCXByaW50ZiAiU1ZOUSViJWIiICJRXDAwM1FRUSIgIlwwMDFcMDAxUVFRIiB8CisJCXFfdG9fbnVsID5jbGVhci5zaHJpbmtiYWNrdHJhY2sgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5wcmVzaHJpbmsgMTQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLnNocmlua2JhY2t0cmFjayAxNCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlaW1hZ2Ugdmlldzogb2Zmc2V0cyBjb21wYXJlZCBieSB2YWx1ZScgJworCXByaW50ZiAiU1ZOUSViJWIiICJcMDAxXDAwMVFRUSIgIlwwMjAwUVwwMDNRUVEiIHwKKwkJcV90b19udWwgPmNsZWFyLm5vaXN5YmFja3RyYWNrICYmCisJcHJpbnRmICJTVk5RJWIlYiIgIlwwMDFcMDAxUVFRIiAiXDAyMDBcMDAxXDAwMlFRUSIgfAorCQlxX3RvX251bCA+Y2xlYXIubm9pc3lhZHZhbmNlICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIubm9pc3liYWNrdHJhY2sgMTUgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5ub2lzeWFkdmFuY2UgMTUgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWltYWdlIHZpZXc6IHJlamVjdCB0cnVuY2F0ZWQgcHJlaW1hZ2UnICcKKwlwcmludGYgIlNWTlElYiIgIlwwMTBRUVFRIiB8IHFfdG9fbnVsID5jbGVhci5sYXRlZW1wdHlyZWFkICYmCisJcHJpbnRmICJTVk5RJWIiICJcMDEwXDAwMVFRUSIgfCBxX3RvX251bCA+Y2xlYXIubGF0ZW5vbmVtcHR5cmVhZCAmJgorCXByaW50ZiAiU1ZOUSViIiAiXDAwMVwwMTBRUVEiIHwgcV90b19udWwgPmNsZWFyLmxvbmdyZWFkICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIubGF0ZWVtcHR5cmVhZCA5ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIubGF0ZW5vbmVtcHR5cmVhZCA5ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIubG9uZ3JlYWQgOQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JiaWQgdW5jb25zdW1lZCBpbmxpbmUgZGF0YScgJworCXByaW50ZiAiU1ZOUSViJXMlYiVzIiAiUVFRUVwwMDMiICJiYXIiICJRUVFRXDAwMSIgIngiIHwKKwkJcV90b19udWwgPmlubGluZS5jbGVhciAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGlubGluZS5jbGVhciAxOCA+YWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdCB0cnVuY2F0ZWQgaW5saW5lIGRhdGEnICcKKwlwcmludGYgIlNWTlElYiVzIiAiUVFRUVwwMDMiICJiIiB8IHFfdG9fbnVsID5pbmxpbmUudHJ1bmMgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBpbmxpbmUudHJ1bmMgMTAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IHRydW5jYXRlZCBpbmxpbmUgZGF0YSAoYWZ0ZXIgaW5zdHJ1Y3Rpb24gc2VjdGlvbiknICcKKwlwcmludGYgIlNWTlElYiViJXMiICJRUVwwMDFcMDAxXDAwMyIgIlwwMjAxIiAiYiIgfCBxX3RvX251bCA+aW5zbi50cnVuYyAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGluc24udHJ1bmMgMTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29weWZyb21fZGF0YScgJworCWVjaG8gaGkgPmV4cGVjdCAmJgorCXByaW50ZiAiU1ZOUSViJWIlYiIgIlFRXDAwM1wwMDFcMDAzIiAiXDAyMDMiICJoaVxuIiB8IHFfdG9fbnVsID5jb3B5ZGF0ICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY29weWRhdCAxMyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBjb3B5ZnJvbV9kYXRhJyAnCisJZWNobyBoaSA+ZXhwZWN0ICYmCisJcHJpbnRmICJTVk5RJWIlYiViJWIlYiIgIlFRXDAwM1wwMDJcMDAzIiAiXDAyMDFcMDIwMiIgImhpXG4iIFwKKwkJIlFRUVwwMDJRIiAiXDAyMDBRIiB8IHFfdG9fbnVsID5jb3B5Lm11bHRpICYmCisJbGVuPSQod2MgLWMgPGNvcHkubXVsdGkpICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY29weS5tdWx0aSAkbGVuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29tcGxldGUgbXVsdGlwbGUgaW5zbicgJworCXByaW50ZiAiU1ZOUSViJWIlYiIgIlFRXDAwM1wwMDJcMDAzIiAiXDAyMDNcMDIwMCIgImhpXG4iIHwKKwkJcV90b19udWwgPmNvcHkucGFydGlhbCAmJgorCWxlbj0kKHdjIC1jIDxjb3B5LnBhcnRpYWwpICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY29weS5wYXJ0aWFsICRsZW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0Y2ggYXR0ZW1wdCB0byBjb3B5IG1pc3NpbmcgZGF0YScgJworCXByaW50ZiAiU1ZOUSViJWIlcyViJXMiICJRUVwwMDJcMDAyXDAwMSIgIlwwMjAxXDAyMDEiICJYIiBcCisJCQkiUVFRUVwwMDIiICJZWiIgfAorCQlxX3RvX251bCA+Y29weS5pbmNvbXBsZXRlICYmCisJbGVuPSQod2MgLWMgPGNvcHkuaW5jb21wbGV0ZSkgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5LmluY29tcGxldGUgJGxlbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5ZnJvbSB0YXJnZXQgdG8gcmVwZWF0IGRhdGEnICcKKwlwcmludGYgZm9vZm9vID5leHBlY3QgJiYKKwlwcmludGYgIlNWTlElYiViJXMiICJRUVwwMDZcMDA0XDAwMyIgIlwwMjAzXDAxMDBcMDAzUSIgImZvbyIgfAorCQlxX3RvX251bCA+Y29weXRhcmdldC5yZXBlYXQgJiYKKwlsZW49JCh3YyAtYyA8Y29weXRhcmdldC5yZXBlYXQpICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY29weXRhcmdldC5yZXBlYXQgJGxlbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5ZnJvbSB0YXJnZXQgb3V0IG9mIG9yZGVyJyAnCisJcHJpbnRmIGZvb29vZiA+ZXhwZWN0ICYmCisJcHJpbnRmICJTVk5RJWIlYiVzIiBcCisJCSJRUVwwMDZcMDA3XDAwMyIgIlwwMjAzXDAxMDFcMDAyXDAxMDFcMDAxXDAxMDFRIiAiZm9vIiB8CisJCXFfdG9fbnVsID5jb3B5dGFyZ2V0LnJldmVyc2UgJiYKKwlsZW49JCh3YyAtYyA8Y29weXRhcmdldC5yZXZlcnNlKSAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHl0YXJnZXQucmV2ZXJzZSAkbGVuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhdGNoIGNvcHlmcm9tIGZ1dHVyZScgJworCXByaW50ZiAiU1ZOUSViJWIlcyIgIlFRXDAwNFwwMDRcMDAzIiAiXDAyMDJcMDEwMVwwMDJcMDIwMSIgIlhZWiIgfAorCQlxX3RvX251bCA+Y29weXRhcmdldC5pbmZ1dHVyZSAmJgorCWxlbj0kKHdjIC1jIDxjb3B5dGFyZ2V0LmluZnV0dXJlKSAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHl0YXJnZXQuaW5mdXR1cmUgJGxlbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IHRvIHN1c3RhaW4nICcKKwlwcmludGYgWFlYWVhZWFlYWVhaID5leHBlY3QgJiYKKwlwcmludGYgIlNWTlElYiViJXMiICJRUVwwMTRcMDA0XDAwMyIgIlwwMjAyXDAxMTFRXDAyMDEiICJYWVoiIHwKKwkJcV90b19udWwgPmNvcHl0YXJnZXQuc3VzdGFpbiAmJgorCWxlbj0kKHdjIC1jIDxjb3B5dGFyZ2V0LnN1c3RhaW4pICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY29weXRhcmdldC5zdXN0YWluICRsZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0Y2ggY29weSB0aGF0IG92ZXJmbG93cycgJworCXByaW50ZiAiU1ZOUSViJWIlcyIgIlFRXDAwM1wwMDNcMDAxIiAiXDAyMDFcMDE3N1EiIFggfAorCQlxX3RvX251bCA+Y29weXRhcmdldC5vdmVyZmxvdyAmJgorCWxlbj0kKHdjIC1jIDxjb3B5dGFyZ2V0Lm92ZXJmbG93KSAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHl0YXJnZXQub3ZlcmZsb3cgJGxlbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5ZnJvbSBzb3VyY2UnICcKKwlwcmludGYgZm9vID5leHBlY3QgJiYKKwlwcmludGYgIlNWTlElYiViIiAiUVwwMDNcMDAzXDAwMlEiICJcMDAzUSIgfCBxX3RvX251bCA+Y29weXNvdXJjZS5hbGwgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5c291cmNlLmFsbCAxMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IGJhY2t3YXJkcycgJworCXByaW50ZiBvb2YgPmV4cGVjdCAmJgorCXByaW50ZiAiU1ZOUSViJWIiICJRXDAwM1wwMDNcMDA2USIgIlwwMDFcMDAyXDAwMVwwMDFcMDAxUSIgfAorCQlxX3RvX251bCA+Y29weXNvdXJjZS5yZXYgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5c291cmNlLnJldiAxNSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byB3aW5kb3cnICcKKwlwcmludGYgZm8gPmV4cGVjdCAmJgorCXByaW50ZiAiU1ZOUSViJWIlYiViIiAiUVwwMDNcMDAxXDAwMlEiICJcMDAxUSIgXAorCQkiXDAwMlwwMDFcMDAxXDAwMlEiICJcMDAxUSIgfAorCQlxX3RvX251bCA+Y29weXNvdXJjZS50d28gJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5c291cmNlLnR3byAxOCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGFtcGxlIGZyb20gbm90ZXMvc3ZuZGlmZicgJworCXByaW50ZiBhYWFhY2NjY2RkZGRkZGRkID5leHBlY3QgJiYKKwlwcmludGYgYWFhYWJiYmJjY2NjID5zb3VyY2UgJiYKKwlwcmludGYgIlNWTlElYiViJXMiICJRXDAxNFwwMjBcMDA3XDAwMSIgXAorCQkiXDAwNFFcMDA0XDAxMFwwMjAxXDAxMDdcMDEwIiBkIHwKKwkJcV90b19udWwgPmRlbHRhLmV4YW1wbGUgJiYKKwlsZW49JCh3YyAtYyA8ZGVsdGEuZXhhbXBsZSkgJiYKKwl0ZXN0LXN2bi1mZSAtZCBzb3VyY2UgZGVsdGEuZXhhbXBsZSAkbGVuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTAyMC1yZW1vdGUtc3ZuLnNoIGIvdC90OTAyMC1yZW1vdGUtc3ZuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZmY2EwOGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MDIwLXJlbW90ZS1zdm4uc2gKQEAgLTAsMCArMSw4OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3RzIHJlbW90ZS1zdm4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitNQVJLU1BBVEg9LmdpdC9pbmZvL2Zhc3QtaW1wb3J0L3JlbW90ZS1zdm4KKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBZVEhPTgordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyByZW1vdGUtc3ZuIHRlc3RzLCBweXRob24gbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKKyMgT3ZlcnJpZGUgc3ZucmR1bXAgd2l0aCBvdXIgc2ltdWxhdG9yCitQQVRIPSIkSE9NRTokUEFUSCIKK2V4cG9ydCBQQVRIIFBZVEhPTl9QQVRIIEdJVF9CVUlMRF9ESVIKKword3JpdGVfc2NyaXB0ICIkSE9NRS9zdm5yZHVtcCIgPDxcRU9GCitleGVjICIkUFlUSE9OX1BBVEgiICIkR0lUX0JVSUxEX0RJUi9jb250cmliL3N2bi1mZS9zdm5yZHVtcF9zaW0ucHkiICIkQCIKK0VPRgorCitpbml0X2dpdCAoKSB7CisJcm0gLWZyIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCSNnaXQgcmVtb3RlIGFkZCBzdm5zaW0gdGVzdHN2bjo6c2ltOi8vLyRURVNUX0RJUkVDVE9SWS90OTAyMC9leGFtcGxlLnN2bnJkdW1wCisJIyBsZXQncyByZXVzZSBhbiBleGlzdGluZyBkdW1wIGZpbGUhPworCWdpdCByZW1vdGUgYWRkIHN2bnNpbSAidGVzdHN2bjo6c2ltOi8vJFRFU1RfRElSRUNUT1JZL3Q5MTU0L3N2bi5kdW1wIgorCWdpdCByZW1vdGUgYWRkIHN2bmZpbGUgInRlc3Rzdm46OmZpbGU6Ly8kVEVTVF9ESVJFQ1RPUlkvdDkxNTQvc3ZuLmR1bXAiCit9CisKK2lmIHRlc3QgLWUgIiRHSVRfQlVJTERfRElSL2dpdC1yZW1vdGUtdGVzdHN2biIKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgUkVNT1RFX1NWTgorZmkKKwordGVzdF9kZWJ1ZyAnCisJZ2l0IC0tdmVyc2lvbgorCXR5cGUgZ2l0CisJdHlwZSBzdm5yZHVtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFTU9URV9TVk4gJ3NpbXBsZSBmZXRjaCcgJworCWluaXRfZ2l0ICYmCisJZ2l0IGZldGNoIHN2bnNpbSAmJgorCXRlc3RfY21wIC5naXQvcmVmcy9zdm4vc3Zuc2ltL21hc3RlciAuZ2l0L3JlZnMvcmVtb3Rlcy9zdm5zaW0vbWFzdGVyICAmJgorCWNwIC5naXQvcmVmcy9yZW1vdGVzL3N2bnNpbS9tYXN0ZXIgbWFzdGVyLmdvb2QKKycKKwordGVzdF9kZWJ1ZyAnCisJY2F0IC5naXQvcmVmcy9zdm4vc3Zuc2ltL21hc3RlcgorCWNhdCAuZ2l0L3JlZnMvcmVtb3Rlcy9zdm5zaW0vbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVNT1RFX1NWTiAncmVwZWF0ZWQgZmV0Y2gsIG5vdGhpbmcgc2hhbGwgY2hhbmdlJyAnCisJZ2l0IGZldGNoIHN2bnNpbSAmJgorCXRlc3RfY21wIG1hc3Rlci5nb29kIC5naXQvcmVmcy9yZW1vdGVzL3N2bnNpbS9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRU1PVEVfU1ZOICdmZXRjaCBmcm9tIGEgZmlsZTovLyB1cmwgZ2l2ZXMgdGhlIHNhbWUgcmVzdWx0JyAnCisJZ2l0IGZldGNoIHN2bmZpbGUKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBSRU1PVEVfU1ZOICd0aGUgc2hhMSBkaWZmZXIgYmVjYXVzZSB0aGUgZ2l0LXN2bi1pZCBsaW5lIGluIHRoZSBjb21taXQgbXNnIGNvbnRhaW5zIHRoZSB1cmwnICcKKwl0ZXN0X2NtcCAuZ2l0L3JlZnMvcmVtb3Rlcy9zdm5maWxlL21hc3RlciAuZ2l0L3JlZnMvcmVtb3Rlcy9zdm5zaW0vbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVNT1RFX1NWTiAnbWFyay1maWxlIHJlZ2VuZXJhdGlvbicgJworCSMgZmlsdGVyIG91dCBhbnkgb3RoZXIgbWFya3MsIHRoYXQgY2FuIG5vdCBiZSByZWdlbmVyYXRlZC4gT25seSB1cCB0byAzIGRpZ2l0IHJldmlzaW9ucyBhcmUgYWxsb3dlZCBoZXJlCisJZ3JlcCAiOlswLTldXHsxLDNcfSAiICRNQVJLU1BBVEgvc3Zuc2ltLm1hcmtzID4gJE1BUktTUEFUSC9zdm5zaW0ubWFya3Mub2xkICYmCisJcm0gJE1BUktTUEFUSC9zdm5zaW0ubWFya3MgJiYKKwlnaXQgZmV0Y2ggc3Zuc2ltICYmCisJdGVzdF9jbXAgJE1BUktTUEFUSC9zdm5zaW0ubWFya3Mub2xkICRNQVJLU1BBVEgvc3Zuc2ltLm1hcmtzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVNT1RFX1NWTiAnaW5jcmVtZW50YWwgaW1wb3J0cyBtdXN0IGxlYWQgdG8gdGhlIHNhbWUgaGVhZCcgJworCVNWTlJNQVg9MyAmJgorCWV4cG9ydCBTVk5STUFYICYmCisJaW5pdF9naXQgJiYKKwlnaXQgZmV0Y2ggc3Zuc2ltICYmCisJdGVzdF9jbXAgLmdpdC9yZWZzL3N2bi9zdm5zaW0vbWFzdGVyIC5naXQvcmVmcy9yZW1vdGVzL3N2bnNpbS9tYXN0ZXIgICYmCisJdW5zZXQgU1ZOUk1BWCAmJgorCWdpdCBmZXRjaCBzdm5zaW0gJiYKKwl0ZXN0X2NtcCBtYXN0ZXIuZ29vZCAuZ2l0L3JlZnMvcmVtb3Rlcy9zdm5zaW0vbWFzdGVyCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBicmFuY2ggLWEnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwMC1naXQtc3ZuLWJhc2ljLnNoIGIvdC90OTEwMC1naXQtc3ZuLWJhc2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJjMzA5YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTAwLWdpdC1zdm4tYmFzaWMuc2gKQEAgLTAsMCArMSwzMjUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gYmFzaWMgdGVzdHMnCitHSVRfU1ZOX0xDX0FMTD0ke0xDX0FMTDotJExBTkd9CisKKy4gLi9saWItZ2l0LXN2bi5zaAorCitjYXNlICIkR0lUX1NWTl9MQ19BTEwiIGluCisqLlVURi04KQorCXRlc3Rfc2V0X3ByZXJlcSBVVEY4CisJOzsKKyopCisJc2F5ICIjIFVURi04IGxvY2FsZSBub3Qgc2V0LCBzb21lIHRlc3RzIHNraXBwZWQgKCRHSVRfU1ZOX0xDX0FMTCkiCisJOzsKK2VzYWMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biAtLXZlcnNpb24gd29ya3MgYW55d2hlcmUnICcKKwlub25naXQgZ2l0IHN2biAtLXZlcnNpb24KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBoZWxwIHdvcmtzIGFueXdoZXJlJyAnCisJbm9uZ2l0IGdpdCBzdm4gaGVscAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnaW5pdGlhbGl6ZSBnaXQgc3ZuJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJZWNobyBmb28gPmZvbyAmJgorCQlsbiAtcyBmb28gZm9vLmxpbmsgJiYKKwkJbWtkaXIgLXAgZGlyL2EvYi9jL2QvZSAmJgorCQllY2hvICJkZWVwIGRpciIgPmRpci9hL2IvYy9kL2UvZmlsZSAmJgorCQlta2RpciBiYXIgJiYKKwkJZWNobyAienp6IiA+YmFyL3p6eiAmJgorCQllY2hvICIjIS9iaW4vc2giID5leGVjLnNoICYmCisJCWNobW9kICt4IGV4ZWMuc2ggJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgLiAiJHN2bnJlcG8iID4vZGV2L251bGwKKwkpICYmCisJcm0gLXJmIGltcG9ydCAmJgorCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnaW1wb3J0IGFuIFNWTiByZXZpc2lvbiBpbnRvIGdpdCcgXAorICAgICdnaXQgc3ZuIGZldGNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCBmcm9tIHN2biIgJ3N2biBjbyAiJHN2bnJlcG8iICIkU1ZOX1RSRUUiJworCituYW1lPSd0cnkgYSBkZWVwIC0tcm1kaXIgd2l0aCBhIGNvbW1pdCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAnCisJZ2l0IGNoZWNrb3V0IC1mIC1iIG15YnJhbmNoIHJlbW90ZXMvZ2l0LXN2biAmJgorCW12IGRpci9hL2IvYy9kL2UvZmlsZSBkaXIvZmlsZSAmJgorCWNwIGRpci9maWxlIGZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIGRpci9hL2IvYy9kL2UvZmlsZSBkaXIvZmlsZSBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaCAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKKwl0ZXN0IC1kICIkU1ZOX1RSRUUiL2RpciAmJiB0ZXN0ICEgLWQgIiRTVk5fVFJFRSIvZGlyL2EnCisKKworbmFtZT0nZGV0ZWN0IG5vZGUgY2hhbmdlIGZyb20gZmlsZSB0byBkaXJlY3RvcnkgIzEnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgIgorCW1rZGlyIGRpci9uZXdfZmlsZSAmJgorCW12IGRpci9maWxlIGRpci9uZXdfZmlsZS9maWxlICYmCisJbXYgZGlyL25ld19maWxlIGRpci9maWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBkaXIvZmlsZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZGlyL2ZpbGUvZmlsZSAmJgorCWdpdCBjb21taXQgLW0gJyRuYW1lJyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCisJCXJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2gKKyIKKworCituYW1lPSdkZXRlY3Qgbm9kZSBjaGFuZ2UgZnJvbSBkaXJlY3RvcnkgdG8gZmlsZSAjMScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAnCisJcm0gLXJmIGRpciAiJEdJVF9ESVIiL2luZGV4ICYmCisJZ2l0IGNoZWNrb3V0IC1mIC1iIG15YnJhbmNoMiByZW1vdGVzL2dpdC1zdm4gJiYKKwltdiBiYXIvenp6IHp6eiAmJgorCXJtIC1yZiBiYXIgJiYKKwltdiB6enogYmFyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAtLSBiYXIvenp6ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLSBiYXIgJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAorCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoMgorJworCisKK25hbWU9J2RldGVjdCBub2RlIGNoYW5nZSBmcm9tIGZpbGUgdG8gZGlyZWN0b3J5ICMyJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKKwlybSAtZiAiJEdJVF9ESVIiL2luZGV4ICYmCisJZ2l0IGNoZWNrb3V0IC1mIC1iIG15YnJhbmNoMyByZW1vdGVzL2dpdC1zdm4gJiYKKwlybSBiYXIvenp6ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBiYXIvenp6ICYmCisJbWtkaXIgYmFyL3p6eiAmJgorCWVjaG8geXl5ID4gYmFyL3p6ei95eXkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJhci96enoveXl5ICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaDMgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAtZCAiJFNWTl9UUkVFIi9iYXIvenp6ICYmCisJdGVzdCAtZSAiJFNWTl9UUkVFIi9iYXIvenp6L3l5eQorJworCituYW1lPSdkZXRlY3Qgbm9kZSBjaGFuZ2UgZnJvbSBkaXJlY3RvcnkgdG8gZmlsZSAjMicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAnCisJcm0gLWYgIiRHSVRfRElSIi9pbmRleCAmJgorCWdpdCBjaGVja291dCAtZiAtYiBteWJyYW5jaDQgcmVtb3Rlcy9naXQtc3ZuICYmCisJcm0gLXJmIGRpciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS0gZGlyL2ZpbGUgJiYKKwl0b3VjaCBkaXIgJiYKKwllY2hvIGFzZGYgPiBkaXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIGRpciAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCisJCXJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2g0CisnCisKKworbmFtZT0ncmVtb3ZlIGV4ZWN1dGFibGUgYml0IGZyb20gYSBmaWxlJwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gIiRuYW1lIiAnCisJcm0gLWYgIiRHSVRfRElSIi9pbmRleCAmJgorCWdpdCBjaGVja291dCAtZiAtYiBteWJyYW5jaDUgcmVtb3Rlcy9naXQtc3ZuICYmCisJY2htb2QgLXggZXhlYy5zaCAmJgorCWdpdCB1cGRhdGUtaW5kZXggZXhlYy5zaCAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgorCWdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCisJCXJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2g1ICYmCisJc3ZuX2NtZCB1cCAiJFNWTl9UUkVFIiAmJgorCXRlc3QgISAteCAiJFNWTl9UUkVFIi9leGVjLnNoJworCisKK25hbWU9J2FkZCBleGVjdXRhYmxlIGJpdCBiYWNrIGZpbGUnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAiJG5hbWUiICcKKwljaG1vZCAreCBleGVjLnNoICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBleGVjLnNoICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaDUgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAteCAiJFNWTl9UUkVFIi9leGVjLnNoJworCisKK25hbWU9J2V4ZWN1dGFibGUgZmlsZSBiZWNvbWVzIGEgc3ltbGluayB0byBmaWxlJwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAiJG5hbWUiICcKKwlybSBleGVjLnNoICYmCisJbG4gLXMgZmlsZSBleGVjLnNoICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBleGVjLnNoICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaDUgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAtaCAiJFNWTl9UUkVFIi9leGVjLnNoJworCituYW1lPSduZXcgc3ltbGluayBpcyBhZGRlZCB0byBhIGZpbGUgdGhhdCB3YXMgYWxzbyBqdXN0IG1hZGUgZXhlY3V0YWJsZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU1lNTElOS1MgIiRuYW1lIiAnCisJY2htb2QgK3ggZmlsZSAmJgorCWxuIC1zIGZpbGUgZXhlYy0yLnNoICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlIGV4ZWMtMi5zaCAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgorCWdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCisJCXJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2g1ICYmCisJc3ZuX2NtZCB1cCAiJFNWTl9UUkVFIiAmJgorCXRlc3QgLXggIiRTVk5fVFJFRSIvZmlsZSAmJgorCXRlc3QgLWggIiRTVk5fVFJFRSIvZXhlYy0yLnNoJworCituYW1lPSdtb2RpZnkgYSBzeW1saW5rIHRvIGJlY29tZSBhIGZpbGUnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTWU1MSU5LUyAiJG5hbWUiICcKKwllY2hvIGdpdCBoZWxwID5oZWxwICYmCisJcm0gZXhlYy0yLnNoICYmCisJY3AgaGVscCBleGVjLTIuc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IGV4ZWMtMi5zaCAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgorCWdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCisJCXJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2g1ICYmCisJc3ZuX2NtZCB1cCAiJFNWTl9UUkVFIiAmJgorCXRlc3QgLWYgIiRTVk5fVFJFRSIvZXhlYy0yLnNoICYmCisJdGVzdCAhIC1oICIkU1ZOX1RSRUUiL2V4ZWMtMi5zaCAmJgorCXRlc3RfY21wIGhlbHAgIiRTVk5fVFJFRSIvZXhlYy0yLnNoJworCituYW1lPSJjb21taXQgd2l0aCBVVEYtOCBtZXNzYWdlOiBsb2NhbGU6ICRHSVRfU1ZOX0xDX0FMTCIKK0xDX0FMTD0iJEdJVF9TVk5fTENfQUxMIgorZXhwb3J0IExDX0FMTAorIyBUaGlzIHRlc3QgcmVsaWVzIG9uIHRoZSBwcmV2aW91cyB0ZXN0LCBoZW5jZSByZXF1aXJlcyBQT1NJWFBFUk0sU1lNTElOS1MKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVVRGOCxQT1NJWFBFUk0sU1lNTElOS1MgIiRuYW1lIiAiCisJZWNobyAnIyBoZWxsbycgPj4gZXhlYy0yLnNoICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBleGVjLTIuc2ggJiYKKwlnaXQgY29tbWl0IC1tICfDqcOv4oiPJyAmJgorCWdpdCBzdm4gc2V0LXRyZWUgSEVBRCIKK3Vuc2V0IExDX0FMTAorCituYW1lPSd0ZXN0IGZldGNoIGZ1bmN0aW9uYWxpdHkgKHN2biA9PiBnaXQpIHdpdGggYWx0ZXJuYXRlIEdJVF9TVk5fSUQnCitHSVRfU1ZOX0lEPWFsdAorZXhwb3J0IEdJVF9TVk5fSUQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiBcCisgICAgJ2dpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmIGdpdCBzdm4gZmV0Y2ggJiYKKyAgICAgZ2l0IHJldi1saXN0IC0tcHJldHR5PXJhdyByZW1vdGVzL2dpdC1zdm4gfCBncmVwIF50cmVlIHwgdW5pcSA+IGEgJiYKKyAgICAgZ2l0IHJldi1saXN0IC0tcHJldHR5PXJhdyByZW1vdGVzL2FsdCB8IGdyZXAgXnRyZWUgfCB1bmlxID4gYiAmJgorICAgICB0ZXN0X2NtcCBhIGInCisKK25hbWU9J2NoZWNrIGltcG9ydGVkIHRyZWUgY2hlY2tzdW1zIGV4cGVjdGVkIHRyZWUgY2hlY2tzdW1zJworcm0gLWYgZXhwZWN0ZWQKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgVVRGOAordGhlbgorCWVjaG8gdHJlZSBkYzY4YjE0YjczM2U0ZWM4NWIwNGFiNmY3MTIzNDBlZGM1ZGM5MzZlID4gZXhwZWN0ZWQKK2ZpCitjYXQgPj4gZXhwZWN0ZWQgPDxcRU9GCit0cmVlIGMzMzIyODkwZGNmNzQ5MDFmMzJkMjE2ZjA1YzUwNDRmNjcwY2U2MzIKK3RyZWUgZDNjY2Q1MDM1ZmVhZmQxN2IwMzBjNTczMmU3ODA4Y2M0OTEyMjg1MwordHJlZSBkMDNlMTYzMDM2M2Q0ODgxZTY4OTI5ZDUzMjc0NmIyMGIwOTg2YjgzCit0cmVlIDE0OWQ2M2NkNTg3ODE1NWM4NDZlOGM1NWQ3ZDg0ODdkZTI4M2Y4OWUKK3RyZWUgMzEyYjc2ZTRmNjRjZTE0ODkzYWVhYzg1OTFlYjM5NjBiMDY1ZTI0NwordHJlZSAxNDlkNjNjZDU4NzgxNTVjODQ2ZThjNTVkN2Q4NDg3ZGUyODNmODllCit0cmVlIGQ2NjcyNzBhMWY3YjEwOWY1ZWIzYWFlYTIxZWRlMTRiNTZiZmRkNmUKK3RyZWUgOGY1MWY3NGNmMDE2M2FmYzlhZDY4YTRiMTUzNzI4OGM0NTU4YjVhNAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNZTUxJTktTICIkbmFtZSIgInRlc3RfY21wIGV4cGVjdGVkIGEiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXQgaWYgcmVtb3RlIHJlZnMgYXJlIGFtYmlnaW91cycgJworICAgICAgICBnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKwkJYmFyOnJlZnMvcmVtb3Rlcy9naXQtc3ZuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBtaWdyYXRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXQgaWYgaW5pdC1pbmcgYSB3b3VsZCBjbG9iYmVyIGEgVVJMJyAnCisgICAgICAgIHN2bmFkbWluIGNyZWF0ZSAiJHtQV0R9L3N2bnJlcG8yIiAmJgorICAgICAgICBzdm4gbWtkaXIgLW0gIm1rZGlyIGJhciIgIiR7c3ZucmVwb30yL2JhciIgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKwkJIl5iYXI6cmVmcy9yZW1vdGVzL2dpdC1zdm4kIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gaW5pdCAiJHtzdm5yZXBvfTIvYmFyIgorICAgICAgICAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAnaW5pdCBhbGxvd3MgdXMgdG8gY29ubmVjdCB0byBhbm90aGVyIGRpcmVjdG9yeSBpbiB0aGUgc2FtZSByZXBvJyAnCisgICAgICAgIGdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBiYXIgIiRzdm5yZXBvL2JhciIgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXmJhcjpyZWZzL3JlbW90ZXMvYmFyJCIgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisJCQkgICAgICAiXjpyZWZzL3JlbW90ZXMvZ2l0LXN2biQiCisgICAgICAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCAkcmV2IGRvZXMgbm90IGNsb2JiZXIgY3VycmVudCBicmFuY2gnICcKKwlnaXQgc3ZuIGZldGNoIC1pIGJhciAmJgorCWdpdCBjaGVja291dCAtYiBteS1iYXIgcmVmcy9yZW1vdGVzL2JhciAmJgorCWVjaG8gMSA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAiY2hhbmdlIDEiICYmCisJZWNobyAyID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2UgMiIgJiYKKwlvbGRfaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgc3ZuIGRjb21taXQgLWkgYmFyIEhFQUReICYmCisJdGVzdCAkb2xkX2hlYWQgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0IHJlZnMvaGVhZHMvbXktYmFyID0gJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpICYmCisJZ2l0IGxvZyByZWZzL3JlbW90ZXMvYmFyIHwgZ3JlcCAiY2hhbmdlIDEiICYmCisJISBnaXQgbG9nIHJlZnMvcmVtb3Rlcy9iYXIgfCBncmVwICJjaGFuZ2UgMiIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCBteS1iYXIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FibGUgdG8gZGNvbW1pdCB0byBhIHN1YmRpcmVjdG9yeScgJworCWdpdCBzdm4gZmV0Y2ggLWkgYmFyICYmCisJZ2l0IGNoZWNrb3V0IC1iIG15LWJhciByZWZzL3JlbW90ZXMvYmFyICYmCisJZWNobyBhYmMgPiBkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBkICYmCisJZ2l0IGNvbW1pdCAtbSAiL2Jhci9kIHNob3VsZCBiZSBpbiB0aGUgbG9nIiAmJgorCWdpdCBzdm4gZGNvbW1pdCAtaSBiYXIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIHJlZnMvaGVhZHMvbXktYmFyIHJlZnMvcmVtb3Rlcy9iYXIpIiAmJgorCW1rZGlyIG5ld2RpciAmJgorCWVjaG8gbmV3ID4gbmV3ZGlyL2RpciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbmV3ZGlyL2RpciAmJgorCWdpdCBjb21taXQgLW0gImFkZCBhIG5ldyBkaXJlY3RvcnkiICYmCisJZ2l0IHN2biBkY29tbWl0IC1pIGJhciAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgcmVmcy9oZWFkcy9teS1iYXIgcmVmcy9yZW1vdGVzL2JhcikiICYmCisJZWNobyBmb28gPj4gbmV3ZGlyL2RpciAmJgorCWdpdCB1cGRhdGUtaW5kZXggbmV3ZGlyL2RpciAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmeSBhIGZpbGUgaW4gbmV3IGRpcmVjdG9yeSIgJiYKKwlnaXQgc3ZuIGRjb21taXQgLWkgYmFyICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiByZWZzL2hlYWRzL215LWJhciByZWZzL3JlbW90ZXMvYmFyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCBzaG91bGQgbm90IGZhaWwgd2l0aCBhIHRvdWNoZWQgZmlsZScgJworCXRlc3RfY29tbWl0ICJjb21taXQtbmV3LWZpbGUtZm9vMiIgZm9vMiAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0tNjAgZm9vICYmCisJZ2l0IHN2biBkY29tbWl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBzaG91bGQgbm90IGZhaWwgd2l0aCBhIHRvdWNoZWQgZmlsZScgJworCXRlc3QtdG9vbCBjaG10aW1lID0tNjAgZm9vICYmCisJZ2l0IHN2biByZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJsZSB0byBzZXQtdHJlZSB0byBhIHN1YmRpcmVjdG9yeScgJworCWVjaG8gY2JhID4gZCAmJgorCWdpdCB1cGRhdGUtaW5kZXggZCAmJgorCWdpdCBjb21taXQgLW0gInVwZGF0ZSAvYmFyL2QiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtaSBiYXIgSEVBRCAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgcmVmcy9oZWFkcy9teS1iYXIgcmVmcy9yZW1vdGVzL2JhcikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1zdm4gd29ya3MgaW4gYSBiYXJlIHJlcG9zaXRvcnknICcKKwlta2RpciBiYXJlLXJlcG8gJiYKKwkoIGNkIGJhcmUtcmVwbyAmJgorCWdpdCBpbml0IC0tYmFyZSAmJgorCUdJVF9ESVI9LiBnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggKSAmJgorCXJtIC1yZiBiYXJlLXJlcG8KKwknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtc3ZuIHdvcmtzIGluIGluIGEgcmVwb3NpdG9yeSB3aXRoIGEgZ2l0ZGlyOiBsaW5rJyAnCisJbWtkaXIgd29ya3RyZWUgZ2l0ZGlyICYmCisJKCBjZCB3b3JrdHJlZSAmJgorCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IGluaXQgLS1zZXBhcmF0ZS1naXQtZGlyIC4uL2dpdGRpciAmJgorCWdpdCBzdm4gZmV0Y2ggKSAmJgorCXJtIC1yZiB3b3JrdHJlZSBnaXRkaXIKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwMS1naXQtc3ZuLXByb3BzLnNoIGIvdC90OTEwMS1naXQtc3ZuLXByb3BzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyNmM0YjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTAxLWdpdC1zdm4tcHJvcHMuc2gKQEAgLTAsMCArMSwyMzMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcHJvcGVydHkgdGVzdHMnCisuIC4vbGliLWdpdC1zdm4uc2gKKworbWtkaXIgaW1wb3J0CisKK2FfY3JsZj0KK2FfbGY9CithX2NyPQorYV9uZV9jcmxmPQorYV9uZV9sZj0KK2FfbmVfY3I9CithX2VtcHR5PQorYV9lbXB0eV9sZj0KK2FfZW1wdHlfY3I9CithX2VtcHR5X2NybGY9CisKK2NkIGltcG9ydAorCWNhdCA+PiBrdy5jIDw8XEVPRgorLyogU29tZWJvZHkgcHJlbWF0dXJlbHkgcHV0IGEga2V5d29yZCBpbnRvIHRoaXMgZmlsZSAqLworLyogJElkJCAqLworRU9GCisKKwlwcmludGYgIkhlbGxvXHJcbldvcmxkXHJcbiIgPiBjcmxmCisJYV9jcmxmPSQoZ2l0IGhhc2gtb2JqZWN0IC13IGNybGYpCisJcHJpbnRmICJIZWxsb1xyV29ybGRcciIgPiBjcgorCWFfY3I9JChnaXQgaGFzaC1vYmplY3QgLXcgY3IpCisJcHJpbnRmICJIZWxsb1xuV29ybGRcbiIgPiBsZgorCWFfbGY9JChnaXQgaGFzaC1vYmplY3QgLXcgbGYpCisKKwlwcmludGYgIkhlbGxvXHJcbldvcmxkIiA+IG5lX2NybGYKKwlhX25lX2NybGY9JChnaXQgaGFzaC1vYmplY3QgLXcgbmVfY3JsZikKKwlwcmludGYgIkhlbGxvXG5Xb3JsZCIgPiBuZV9sZgorCWFfbmVfbGY9JChnaXQgaGFzaC1vYmplY3QgLXcgbmVfbGYpCisJcHJpbnRmICJIZWxsb1xyV29ybGQiID4gbmVfY3IKKwlhX25lX2NyPSQoZ2l0IGhhc2gtb2JqZWN0IC13IG5lX2NyKQorCisJdG91Y2ggZW1wdHkKKwlhX2VtcHR5PSQoZ2l0IGhhc2gtb2JqZWN0IC13IGVtcHR5KQorCXByaW50ZiAiXG4iID4gZW1wdHlfbGYKKwlhX2VtcHR5X2xmPSQoZ2l0IGhhc2gtb2JqZWN0IC13IGVtcHR5X2xmKQorCXByaW50ZiAiXHIiID4gZW1wdHlfY3IKKwlhX2VtcHR5X2NyPSQoZ2l0IGhhc2gtb2JqZWN0IC13IGVtcHR5X2NyKQorCXByaW50ZiAiXHJcbiIgPiBlbXB0eV9jcmxmCisJYV9lbXB0eV9jcmxmPSQoZ2l0IGhhc2gtb2JqZWN0IC13IGVtcHR5X2NybGYpCisKKwlzdm5fY21kIGltcG9ydCAtLW5vLWF1dG8tcHJvcHMgLW0gJ2ltcG9ydCBmb3IgZ2l0IHN2bicgLiAiJHN2bnJlcG8iID4vZGV2L251bGwKK2NkIC4uCisKK3JtIC1yZiBpbXBvcnQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdvcmtpbmcgY29weSBmcm9tIHN2bicgJ3N2biBjbyAiJHN2bnJlcG8iIHRlc3Rfd2MnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzb21lIGNvbW1pdHMgdG8gc3ZuJyAnCisJKAorCQljZCB0ZXN0X3djICYmCisJCWVjaG8gR3JlZXRpbmdzID4+IGt3LmMgJiYKKwkJcG9rZSBrdy5jICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJOb3QgeWV0IGFuIElkIiAmJgorCQllY2hvIEhlbGxvIHdvcmxkID4+IGt3LmMgJiYKKwkJcG9rZSBrdy5jICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJNb2RpZmllZCBmaWxlLCBidXQgc3RpbGwgbm90IHlldCBhbiBJZCIgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IHN2bjprZXl3b3JkcyBJZCBrdy5jICYmCisJCXBva2Uga3cuYyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiUHJvcHNldCBJZCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgZ2l0IHN2bicgJ2dpdCBzdm4gaW5pdCAiJHN2bnJlcG8iJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggcmV2aXNpb25zIGZyb20gc3ZuJyAnZ2l0IHN2biBmZXRjaCcKKworbmFtZT0ndGVzdCBzdm46a2V5d29yZHMgaWdub3JpbmcnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgXAorCSdnaXQgY2hlY2tvdXQgLWIgbXlicmFuY2ggcmVtb3Rlcy9naXQtc3ZuICYmCisJZWNobyBIaSBhZ2FpbiA+PiBrdy5jICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAidGVzdCBrZXl3b3JkcyBpZ25vcmluZyIgJiYKKwlnaXQgc3ZuIHNldC10cmVlIHJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2ggJiYKKwlnaXQgcHVsbCAuIHJlbW90ZXMvZ2l0LXN2bicKKworZXhwZWN0PScvKiAkSWQkICovJworZ290PSIkKHNlZCAtbmUgMnAga3cuYykiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYXcgJElkJCBmb3VuZCBpbiBrdy5jJyAidGVzdCAnJGV4cGVjdCcgPSAnJGdvdCciCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInByb3BzZXQgQ1Igb24gY3JsZiBmaWxlcyIgJworCSgKKwkJY2QgdGVzdF93YyAmJgorCQlzdm5fY21kIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUiBlbXB0eSAmJgorCQlzdm5fY21kIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUiBjcmxmICYmCisJCXN2bl9jbWQgcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSIG5lX2NybGYgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInByb3BzZXQgQ1Igb24gY3JsZiBmaWxlcyIKKwkgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBhbmQgcHVsbCBsYXRlc3QgZnJvbSBzdm4gYW5kIGNoZWNrb3V0IGEgbmV3IHdjJyBcCisJJ2dpdCBzdm4gZmV0Y2ggJiYKKwkgZ2l0IHB1bGwgLiByZW1vdGVzL2dpdC1zdm4gJiYKKwkgc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIG5ld193YycKKworZm9yIGkgaW4gY3JsZiBuZV9jcmxmIGxmIG5lX2xmIGNyIG5lX2NyIGVtcHR5X2NyIGVtcHR5X2xmIGVtcHR5IGVtcHR5X2NybGYKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiQ29tcGFyaW5nICRpIiAiY21wICRpIG5ld193Yy8kaSIKK2RvbmUKKworCitjZCB0ZXN0X3djCisJcHJpbnRmICckSWQkXHJIZWxsb1xyV29ybGRccicgPiBjcgorCXByaW50ZiAnJElkJFxySGVsbG9ccldvcmxkJyA+IG5lX2NyCisJYV9jcj0kKHByaW50ZiAnJElkJFxyXG5IZWxsb1xyXG5Xb3JsZFxyXG4nIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pCisJYV9uZV9jcj0kKHByaW50ZiAnJElkJFxyXG5IZWxsb1xyXG5Xb3JsZCcgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXQgQ1JMRiBvbiBjciBmaWxlcycgXAorCSdzdm5fY21kIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUkxGIGNyICYmCisJIHN2bl9jbWQgcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSTEYgbmVfY3IgJiYKKwkgc3ZuX2NtZCBwcm9wc2V0IHN2bjprZXl3b3JkcyBJZCBjciAmJgorCSBzdm5fY21kIHByb3BzZXQgc3ZuOmtleXdvcmRzIElkIG5lX2NyICYmCisJIHN2bl9jbWQgY29tbWl0IC1tICJwcm9wc2V0IENSTEYgb24gY3IgZmlsZXMiJworY2QgLi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGFuZCBwdWxsIGxhdGVzdCBmcm9tIHN2bicgXAorCSdnaXQgc3ZuIGZldGNoICYmIGdpdCBwdWxsIC4gcmVtb3Rlcy9naXQtc3ZuJworCitiX2NyPSIkKGdpdCBoYXNoLW9iamVjdCBjcikiCitiX25lX2NyPSIkKGdpdCBoYXNoLW9iamVjdCBuZV9jcikiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NSTEYgKyAkSWQkJyAidGVzdCAnJGFfY3InID0gJyRiX2NyJyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NSTEYgKyAkSWQkIChubyBuZXdsaW5lKScgInRlc3QgJyRhX25lX2NyJyA9ICckYl9uZV9jciciCisKK2NhdCA+IHNob3ctaWdub3JlLmV4cGVjdCA8PFxFT0YKKworIyAvCisvbm8tc3VjaC1maWxlKgorCisjIC9kZWVwbHkvCisvZGVlcGx5L25vLXN1Y2gtZmlsZSoKKworIyAvZGVlcGx5L25lc3RlZC8KKy9kZWVwbHkvbmVzdGVkL25vLXN1Y2gtZmlsZSoKKworIyAvZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvCisvZGVlcGx5L25lc3RlZC9kaXJlY3Rvcnkvbm8tc3VjaC1maWxlKgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc2hvdy1pZ25vcmUnICIKKwkoCisJCWNkIHRlc3Rfd2MgJiYKKwkJbWtkaXIgLXAgZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkgJiYKKwkJdG91Y2ggZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvLmtlZXAgJiYKKwkJc3ZuX2NtZCBhZGQgZGVlcGx5ICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IC1SIHN2bjppZ25vcmUgJworbm8tc3VjaC1maWxlKgorJyAuICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICdwcm9wc2V0IHN2bjppZ25vcmUnCisJKSAmJgorCWdpdCBzdm4gc2hvdy1pZ25vcmUgPiBzaG93LWlnbm9yZS5nb3QgJiYKKwljbXAgc2hvdy1pZ25vcmUuZXhwZWN0IHNob3ctaWdub3JlLmdvdAorIgorCitjYXQgPmNyZWF0ZS1pZ25vcmUuZXhwZWN0IDw8XEVPRgorL25vLXN1Y2gtZmlsZSoKK0VPRgorCitjYXQgPmNyZWF0ZS1pZ25vcmUtaW5kZXguZXhwZWN0IDw8XEVPRgorMTAwNjQ0IDhjNTJlNWRmY2QwYThiNmI2YmNmZTZiNDFiODliY2JmNDkzNzE4YTUgMAkuZ2l0aWdub3JlCisxMDA2NDQgOGM1MmU1ZGZjZDBhOGI2YjZiY2ZlNmI0MWI4OWJjYmY0OTM3MThhNSAwCWRlZXBseS8uZ2l0aWdub3JlCisxMDA2NDQgOGM1MmU1ZGZjZDBhOGI2YjZiY2ZlNmI0MWI4OWJjYmY0OTM3MThhNSAwCWRlZXBseS9uZXN0ZWQvLmdpdGlnbm9yZQorMTAwNjQ0IDhjNTJlNWRmY2QwYThiNmI2YmNmZTZiNDFiODliY2JmNDkzNzE4YTUgMAlkZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS8uZ2l0aWdub3JlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjcmVhdGUtaWdub3JlJyAiCisJZ2l0IHN2biBmZXRjaCAmJiBnaXQgcHVsbCAuIHJlbW90ZXMvZ2l0LXN2biAmJgorCWdpdCBzdm4gY3JlYXRlLWlnbm9yZSAmJgorCWNtcCAuLy5naXRpZ25vcmUgY3JlYXRlLWlnbm9yZS5leHBlY3QgJiYKKwljbXAgLi9kZWVwbHkvLmdpdGlnbm9yZSBjcmVhdGUtaWdub3JlLmV4cGVjdCAmJgorCWNtcCAuL2RlZXBseS9uZXN0ZWQvLmdpdGlnbm9yZSBjcmVhdGUtaWdub3JlLmV4cGVjdCAmJgorCWNtcCAuL2RlZXBseS9uZXN0ZWQvZGlyZWN0b3J5Ly5naXRpZ25vcmUgY3JlYXRlLWlnbm9yZS5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWdyZXAgZ2l0aWdub3JlIGxzX2ZpbGVzX3Jlc3VsdCB8IGNtcCAtIGNyZWF0ZS1pZ25vcmUtaW5kZXguZXhwZWN0CisJIgorCitjYXQgPnByb3AuZXhwZWN0IDw8XEVPRgorCituby1zdWNoLWZpbGUqCisKK0VPRgorY2F0ID5wcm9wMi5leHBlY3QgPDxcRU9GCis4CitFT0YKKworIyBUaGlzIHRlc3QgY2FuIGJlIGltcHJvdmVkOiBzaW5jZSBhbGwgdGhlIHN2bjppZ25vcmUgY29udGFpbiB0aGUgc2FtZQorIyBwYXR0ZXJuLCBpdCBjYW4gcGFzcyBldmVuIHRob3VnaCB0aGUgcHJvcGdldCBkaWQgbm90IGV4ZWN1dGUgb24gdGhlCisjIHJpZ2h0IGRpcmVjdG9yeS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcHJvcGdldCcgJworCXRlc3RfcHJvcGdldCAoKSB7CisJCWdpdCBzdm4gcHJvcGdldCAkMSAkMiA+YWN0dWFsICYmCisJCWNtcCAkMyBhY3R1YWwKKwl9ICYmCisJdGVzdF9wcm9wZ2V0IHN2bjppZ25vcmUgLiBwcm9wLmV4cGVjdCAmJgorCWNkIGRlZXBseSAmJgorCXRlc3RfcHJvcGdldCBzdm46aWdub3JlIC4gLi4vcHJvcC5leHBlY3QgJiYKKwl0ZXN0X3Byb3BnZXQgc3ZuOmVudHJ5OmNvbW1pdHRlZC1yZXYgbmVzdGVkL2RpcmVjdG9yeS8ua2VlcCBcCisJCS4uL3Byb3AyLmV4cGVjdCAmJgorCXRlc3RfcHJvcGdldCBzdm46aWdub3JlIC4uIC4uL3Byb3AuZXhwZWN0ICYmCisJdGVzdF9wcm9wZ2V0IHN2bjppZ25vcmUgbmVzdGVkLyAuLi9wcm9wLmV4cGVjdCAmJgorCXRlc3RfcHJvcGdldCBzdm46aWdub3JlIC4vbmVzdGVkIC4uL3Byb3AuZXhwZWN0ICYmCisJdGVzdF9wcm9wZ2V0IHN2bjppZ25vcmUgLi4vLi9kZWVwbHkvbmVzdGVkIC4uL3Byb3AuZXhwZWN0CisJJworCitjYXQgPnByb3AuZXhwZWN0IDw8XEVPRgorUHJvcGVydGllcyBvbiAnLic6CisgIHN2bjplbnRyeTpjb21taXR0ZWQtZGF0ZQorICBzdm46ZW50cnk6Y29tbWl0dGVkLXJldgorICBzdm46ZW50cnk6bGFzdC1hdXRob3IKKyAgc3ZuOmVudHJ5OnV1aWQKKyAgc3ZuOmlnbm9yZQorRU9GCitjYXQgPnByb3AyLmV4cGVjdCA8PFxFT0YKK1Byb3BlcnRpZXMgb24gJ25lc3RlZC9kaXJlY3RvcnkvLmtlZXAnOgorICBzdm46ZW50cnk6Y29tbWl0dGVkLWRhdGUKKyAgc3ZuOmVudHJ5OmNvbW1pdHRlZC1yZXYKKyAgc3ZuOmVudHJ5Omxhc3QtYXV0aG9yCisgIHN2bjplbnRyeTp1dWlkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBwcm9wbGlzdCcgIgorCWdpdCBzdm4gcHJvcGxpc3QgLiA+YWN0dWFsICYmCisJY21wIHByb3AuZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHN2biBwcm9wbGlzdCBuZXN0ZWQvZGlyZWN0b3J5Ly5rZWVwID5hY3R1YWwgJiYKKwljbXAgcHJvcDIuZXhwZWN0IGFjdHVhbAorCSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTAyLWdpdC1zdm4tZGVlcC1ybWRpci5zaCBiL3QvdDkxMDItZ2l0LXN2bi1kZWVwLXJtZGlyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY2Y2Q1MTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTAyLWdpdC1zdm4tZGVlcC1ybWRpci5zaApAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcm1kaXInCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJbWtkaXIgLXAgZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzEgJiYKKwkJbWtkaXIgLXAgZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzIgJiYKKwkJZWNobyBmb28gPmRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8xL2ZpbGUgJiYKKwkJZWNobyBmb28gPmRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8yL2Fub3RoZXIgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgLiAiJHN2bnJlcG8iCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlycm9yIHZpYSBnaXQgc3ZuJyAnCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IGNoZWNrb3V0IC1mIC1iIHRlc3Qtcm1kaXIgcmVtb3Rlcy9naXQtc3ZuCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUcnkgYSBjb21taXQgb24gcm1kaXInICcKKwlnaXQgcm0gLWYgZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzIvYW5vdGhlciAmJgorCWdpdCBjb21taXQgLWEgLW0gInJlbW92ZSBhbm90aGVyIiAmJgorCWdpdCBzdm4gc2V0LXRyZWUgLS1ybWRpciBIRUFEICYmCisJc3ZuX2NtZCBscyAtUiAiJHN2bnJlcG8iIHwgZ3JlcCBeZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzEKKwknCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTAzLWdpdC1zdm4tdHJhY2tlZC1kaXJlY3RvcnktcmVtb3ZlZC5zaCBiL3QvdDkxMDMtZ2l0LXN2bi10cmFja2VkLWRpcmVjdG9yeS1yZW1vdmVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIyODI3MTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTAzLWdpdC1zdm4tdHJhY2tlZC1kaXJlY3RvcnktcmVtb3ZlZC5zaApAQCAtMCwwICsxLDQxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHRyYWNraW5nIHJlbW92ZWQgdG9wLWxldmVsIHBhdGgnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBoaXN0b3J5IGZvciB0cmFja2luZycgJworCW1rZGlyIGltcG9ydCAmJgorCW1rZGlyIGltcG9ydC90cnVuayAmJgorCWVjaG8gaGVsbG8gPj4gaW1wb3J0L3RydW5rL1JFQURNRSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tIGluaXRpYWwgaW1wb3J0ICIkc3ZucmVwbyIgJiYKKwlybSAtcmYgaW1wb3J0ICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rIHRydW5rICYmCisJZWNobyBieWUgYnllID4+IHRydW5rL1JFQURNRSAmJgorCXN2bl9jbWQgcm0gLW0gImdvbmUiICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlybSAtcmYgdHJ1bmsgJiYKKwlta2RpciB0cnVuayAmJgorCWVjaG8gIm5ldyIgPiB0cnVuay9GT0xMT1dNRSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJuZXcgdHJ1bmsiIHRydW5rICIkc3ZucmVwbyIvdHJ1bmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVwbyB3aXRoIGdpdCcgJworCWdpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIiB4ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgeC9GT0xMT1dNRSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHgvUkVBRE1FCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2Ugc3VyZSByMiBzdGlsbCBoYXMgb2xkIGZpbGUnICcKKwkoCisJCWNkIHggJiYKKwkJdGVzdCAtbiAiJChnaXQgc3ZuIGZpbmQtcmV2IHIxKSIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAiJChnaXQgc3ZuIGZpbmQtcmV2IHIxKSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgUkVBRE1FICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIEZPTExPV01FICYmCisJCXRlc3QgLXogIiQoZ2l0IHN2biBmaW5kLXJldiByMikiCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDQtZ2l0LXN2bi1mb2xsb3ctcGFyZW50LnNoIGIvdC90OTEwNC1naXQtc3ZuLWZvbGxvdy1wYXJlbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWUwYWQxOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMDQtZ2l0LXN2bi1mb2xsb3ctcGFyZW50LnNoCkBAIC0wLDAgKzEsMjI4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGZldGNoaW5nJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJworCW1rZGlyIGltcG9ydCAmJgorCSgKKwkJY2QgaW1wb3J0ICYmCisJCW1rZGlyIC1wIHRydW5rICYmCisJCWVjaG8gaGVsbG8gPnRydW5rL3JlYWRtZSAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iCisJKSAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB3YyAmJgorCSgKKwkJY2Qgd2MgJiYKKwkJZWNobyB3b3JsZCA+PnRydW5rL3JlYWRtZSAmJgorCQlwb2tlIHRydW5rL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiYW5vdGhlciBjb21taXQiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBtdiB0cnVuayB0aHVuayAmJgorCQllY2hvIGdvb2RieWUgPj50aHVuay9yZWFkbWUgJiYKKwkJcG9rZSB0aHVuay9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImJ5ZSBub3ciCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbmQgZmV0Y2ggYSBtb3ZlZCBkaXJlY3RvcnknICcKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgdGh1bmsgIiRzdm5yZXBvIi90aHVuayAmJgorCWdpdCBzdm4gZmV0Y2ggLWkgdGh1bmsgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3RodW5rQDIpIiBcCisJICAgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy90aHVua34xKSIgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiByZWZzL3JlbW90ZXMvdGh1bms6cmVhZG1lID5hY3R1YWwgJiYKKwl0ZXN0ICIkKHNlZCAtbiAtZSAiM3AiIGFjdHVhbCkiID0gZ29vZGJ5ZSAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisJCSAiXnRydW5rOnJlZnMvcmVtb3Rlcy90aHVua0AyJCIpIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbmQgZmV0Y2ggZnJvbSBvbmUgc3ZuLXJlbW90ZScgJworICAgICAgICBnaXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLnVybCAiJHN2bnJlcG8iICYmCisgICAgICAgIGdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAorICAgICAgICAgIHRydW5rOnJlZnMvcmVtb3Rlcy9zdm4vdHJ1bmsgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisgICAgICAgICAgdGh1bms6cmVmcy9yZW1vdGVzL3N2bi90aHVuayAmJgorICAgICAgICBnaXQgc3ZuIGZldGNoIC1pIHN2bi90aHVuayAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvc3ZuL3RydW5rKSIgXAorCSAgID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvc3ZuL3RodW5rfjEpIiAmJgorCWdpdCBjYXQtZmlsZSBibG9iIHJlZnMvcmVtb3Rlcy9zdm4vdGh1bms6cmVhZG1lID5hY3R1YWwgJiYKKwl0ZXN0ICIkKHNlZCAtbiAtZSAiM3AiIGFjdHVhbCkiID0gZ29vZGJ5ZQorICAgICAgICAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBkZWxldGVkIHBhcmVudCcgJworICAgICAgICAoc3ZuX2NtZCBjcCAtbSAicmVzdXJyZWN0aW5nIHRydW5rIGFzIGp1bmsiIFwKKyAgICAgICAgICAgICAgICIkc3ZucmVwbyIvdHJ1bmtAMiAiJHN2bnJlcG8iL2p1bmsgfHwKKyAgICAgICAgIHN2biBjcCAtbSAicmVzdXJyZWN0aW5nIHRydW5rIGFzIGp1bmsiIFwKKyAgICAgICAgICAgICAgIC1yMiAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvanVuaykgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisgICAgICAgICAganVuazpyZWZzL3JlbW90ZXMvc3ZuL2p1bmsgJiYKKyAgICAgICAgZ2l0IHN2biBmZXRjaCAtaSBzdm4vdGh1bmsgJiYKKyAgICAgICAgZ2l0IHN2biBmZXRjaCAtaSBzdm4vanVuayAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgc3ZuL2p1bmsgc3ZuL3RydW5rKSIgJiYKKwl0ZXN0ICIkKGdpdCBtZXJnZS1iYXNlIHN2bi9qdW5rIHN2bi90cnVuaykiIFwKKwkgICA9ICIkKGdpdCByZXYtcGFyc2Ugc3ZuL3RydW5rKSIKKyAgICAgICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3cgbGFyZ2VyIHBhcmVudCcgJworICAgICAgICBta2RpciAtcCBpbXBvcnQvdHJ1bmsvdGh1bmsvYnVtcC90aHVkICYmCisgICAgICAgIGVjaG8gaGkgPiBpbXBvcnQvdHJ1bmsvdGh1bmsvYnVtcC90aHVkL2ZpbGUgJiYKKyAgICAgICAgc3ZuIGltcG9ydCAtbSAiaW1wb3J0IGEgbGFyZ2VyIHBhcmVudCIgaW1wb3J0ICIkc3ZucmVwbyIvbGFyZ2VyLXBhcmVudCAmJgorICAgICAgICBzdm4gY3AgLW0gImhpIiAiJHN2bnJlcG8iL2xhcmdlci1wYXJlbnQgIiRzdm5yZXBvIi9hbm90aGVyLWxhcmdlciAmJgorICAgICAgICBnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgbGFyZ2VyIFwKKwkgICIkc3ZucmVwbyIvbGFyZ2VyLXBhcmVudC90cnVuay90aHVuay9idW1wL3RodWQgJiYKKyAgICAgICAgZ2l0IHN2biBmZXRjaCAtaSBsYXJnZXIgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgbGFyZ2VyLXBhcmVudCBcCisJICAiJHN2bnJlcG8iL2Fub3RoZXItbGFyZ2VyL3RydW5rL3RodW5rL2J1bXAvdGh1ZCAmJgorCWdpdCBzdm4gZmV0Y2ggLWkgbGFyZ2VyLXBhcmVudCAmJgorICAgICAgICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9sYXJnZXIgJiYKKyAgICAgICAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBcCisJICAgcmVmcy9yZW1vdGVzL2xhcmdlci1wYXJlbnQgJiYKKwl0ZXN0ICIkKGdpdCBtZXJnZS1iYXNlIFwKKwkJIHJlZnMvcmVtb3Rlcy9sYXJnZXItcGFyZW50IFwKKwkJIHJlZnMvcmVtb3Rlcy9sYXJnZXIpIiA9IFwKKwkgICAgICIkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2xhcmdlcikiCisgICAgICAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IGhpZ2hlci1sZXZlbCBwYXJlbnQnICcKKwlzdm4gbWtkaXIgLW0gImZvbGxvdyBoaWdoZXItbGV2ZWwgcGFyZW50IiAiJHN2bnJlcG8iL2Jsb2IgJiYKKwlzdm4gY28gIiRzdm5yZXBvIi9ibG9iIGJsb2IgJiYKKwkoCisJCWNkIGJsb2IgJiYKKwkJZWNobyBoaSA+IGhpICYmCisJCXN2biBhZGQgaGkgJiYKKwkJc3ZuIGNvbW1pdCAtbSAiaGloaSIKKwkpICYmCisJc3ZuIG1rZGlyIC1tICJuZXcgZ2xvYiBhdCB0b3AgbGV2ZWwiICIkc3ZucmVwbyIvZ2xvYiAmJgorCXN2biBtdiAtbSAibW92ZSBibG9iIGRvd24gYSBsZXZlbCIgIiRzdm5yZXBvIi9ibG9iICIkc3ZucmVwbyIvZ2xvYi9ibG9iICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIGJsb2IgIiRzdm5yZXBvIi9nbG9iL2Jsb2IgJiYKKyAgICAgICAgZ2l0IHN2biBmZXRjaCAtaSBibG9iCisgICAgICAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IGRlbGV0ZWQgZGlyZWN0b3J5JyAnCisJc3ZuX2NtZCBtdiAtbSAiYnllISIgIiRzdm5yZXBvIi9nbG9iL2Jsb2IvaGkgIiRzdm5yZXBvIi9nbG9iL2Jsb2IvYnllICYmCisJc3ZuX2NtZCBybSAtbSAicmVtb3ZlIGdsb2IiICIkc3ZucmVwbyIvZ2xvYiAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBnbG9iICIkc3ZucmVwbyIvZ2xvYiAmJgorCWdpdCBzdm4gZmV0Y2ggLWkgZ2xvYiAmJgorCXRlc3QgIiQoZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9yZW1vdGVzL2dsb2I6YmxvYi9ieWUpIiA9IGhpICYmCisJZ2l0IGxzLXRyZWUgcmVmcy9yZW1vdGVzL2dsb2IgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsCisJJworCisjIHJlZjogcjkyNzAgb2YgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9yeTogKGh0dHA6Ly9zdm4uY29sbGFiLm5ldC9yZXBvcy9zdm4pCisjIGluIHRydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3ctcGFyZW50IGF2b2lkcyBkZWxldGluZyByZWxldmFudCBpbmZvJyAnCisJbWtkaXIgLXAgaW1wb3J0L3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL3QgJiYKKwlmb3IgaSBpbiBhIGIgYyA7IGRvIFwKKwkgIGVjaG8gJGkgPiBpbXBvcnQvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvJGkucG0gJiYKKwkgIGVjaG8gXyRpID4gaW1wb3J0L3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL3QvJGkudDsgXAorCWRvbmUgJiYKKwkgIGVjaG8gImJhZCBkZWxldGUgdGVzdCIgPiBcCisJICAgaW1wb3J0L3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL3QvbGFyZ2VyLXBhcmVudCAmJgorCSAgZWNobyAiYmFkIGRlbGV0ZSB0ZXN0IDIiID4gXAorCSAgIGltcG9ydC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybC9hbm90aGVyLWxhcmdlciAmJgorCSgKKwkJY2QgaW1wb3J0ICYmCisJCXN2biBpbXBvcnQgLW0gInI5MjcwIHRlc3QiIC4gIiRzdm5yZXBvIi9yOTI3MAorCSkgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvcjkyNzAvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwgcjkyNzAgJiYKKwkoCisJCWNkIHI5MjcwICYmCisJCXN2biBta2RpciBuYXRpdmUgJiYKKwkJc3ZuIG12IHQgbmF0aXZlL3QgJiYKKwkJZm9yIGkgaW4gYSBiIGMKKwkJZG8KKwkJCXN2biBtdiAkaS5wbSBuYXRpdmUvJGkucG0KKwkJZG9uZSAmJgorCQllY2hvIHogPj5uYXRpdmUvdC9jLnQgJiYKKwkJcG9rZSBuYXRpdmUvdC9jLnQgJiYKKwkJc3ZuIGNvbW1pdCAtbSAicmVvcmcgdGVzdCIKKwkpICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIHI5MjcwLXQgXAorCSAgIiRzdm5yZXBvIi9yOTI3MC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybC9uYXRpdmUvdCAmJgorCWdpdCBzdm4gZmV0Y2ggLWkgcjkyNzAtdCAmJgorCXRlc3QgJChnaXQgcmV2LWxpc3QgcjkyNzAtdCB8IHdjIC1sKSAtZXEgMiAmJgorCXRlc3QgIiQoZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgcjkyNzAtdH4xKSIgPSBcCisJICAgICAiJChnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByOTI3MC10KSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInRyYWNrIGluaXRpYWwgY2hhbmdlIGlmIGl0IHdhcyBvbmx5IG1hZGUgdG8gcGFyZW50IiAnCisJc3ZuX2NtZCBjcCAtbSAid2hlZWUhIiAiJHN2bnJlcG8iL3I5MjcwL3RydW5rICIkc3ZucmVwbyIvcjkyNzAvZHJ1bmsgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgcjkyNzAtZCBcCisJICAiJHN2bnJlcG8iL3I5MjcwL2RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL25hdGl2ZS90ICYmCisJZ2l0IHN2biBmZXRjaCAtaSByOTI3MC1kICYmCisJdGVzdCAkKGdpdCByZXYtbGlzdCByOTI3MC1kIHwgd2MgLWwpIC1lcSAzICYmCisJdGVzdCAiJChnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByOTI3MC10KSIgPSBcCisJICAgICAiJChnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByOTI3MC1kKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcjkyNzAtdCkiID0gXAorCSAgICAgIiQoZ2l0IHJldi1wYXJzZSByOTI3MC1kfjEpIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZm9sbG93LXBhcmVudCBpcyBhdG9taWMiICcKKwkoCisJCWNkIHdjICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBta2RpciBzdHVuayAmJgorCQllY2hvICJ0cnVuayBzdHVuayIgPiBzdHVuay9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBhZGQgc3R1bmsvcmVhZG1lICYmCisJCXN2bl9jbWQgY2kgLW0gInRydW5rIHN0dW5rIiAmJgorCQllY2hvICJzdHVuayBsaWtlIGp1bmsiID4+IHN0dW5rL3JlYWRtZSAmJgorCQlzdm5fY21kIGNpIC1tICJyZWFsbHkgc3R1bmsiICYmCisJCWVjaG8gInN0aW5rIHN0YW5rIHN0dW5rIiA+PiBzdHVuay9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiZXZlbiB0aGUgZ3JpbmNoIGFncmVlcyIKKwkpICYmCisJc3ZuX2NtZCBjb3B5IC1tICJzdHVuayBmbHVua2VkIiAiJHN2bnJlcG8iL3N0dW5rICIkc3ZucmVwbyIvZmx1bmsgJiYKKwl7IHN2biBjcCAtbSAiZWFybHkgc3R1bmsgZmx1bmtlZCB0b28iIFwKKwkJIiRzdm5yZXBvIi9zdHVua0AxNyAiJHN2bnJlcG8iL2ZsdW5rZWQgfHwKKwlzdm5fY21kIGNwIC1tICJlYXJseSBzdHVuayBmbHVua2VkIHRvbyIgXAorCQktcjE3ICIkc3ZucmVwbyIvc3R1bmsgIiRzdm5yZXBvIi9mbHVua2VkOyB9ICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIHN0dW5rICIkc3ZucmVwbyIvc3R1bmsgJiYKKwlnaXQgc3ZuIGZldGNoIC1pIHN0dW5rICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL2ZsdW5rQDE4IHJlZnMvcmVtb3Rlcy9zdHVua34yICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9yZW1vdGVzL3N0dW5rICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoIHN0dW5rICYmCisJbWtkaXIgLXAgIiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL2ZsdW5rQDE4ICYmCisJcmV2X21hcD0kKGNkICIkR0lUX0RJUiIvc3ZuL3JlZnMvcmVtb3Rlcy9zdHVuayAmJiBscyAucmV2X21hcCopICYmCisJZGQgaWY9IiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL3N0dW5rLyRyZXZfbWFwIFwKKwkgICBvZj0iJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvZmx1bmtAMTgvJHJldl9tYXAgYnM9MjQgY291bnQ9MSAmJgorCXJtIC1yZiAiJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvc3R1bmsgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgZmx1bmsgIiRzdm5yZXBvIi9mbHVuayAmJgorCWdpdCBzdm4gZmV0Y2ggLWkgZmx1bmsgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgc3R1bmsgIiRzdm5yZXBvIi9zdHVuayAmJgorCWdpdCBzdm4gZmV0Y2ggLWkgc3R1bmsgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgZmx1bmtlZCAiJHN2bnJlcG8iL2ZsdW5rZWQgJiYKKwlnaXQgc3ZuIGZldGNoIC1pIGZsdW5rZWQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL2ZsdW5rQDE4KSIgXAorCSAgID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvc3R1bmspIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvZmx1bmt+MSkiIFwKKwkgICA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3N0dW5rKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL2ZsdW5rZWR+MSkiIFwKKwkgICA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3N0dW5rfjEpIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidHJhY2sgbXVsdGktcGFyZW50IHBhdGhzIiAnCisJc3ZuX2NtZCBjcCAtbSAicmVzdXJyZWN0IC9nbG9iIiAiJHN2bnJlcG8iL3I5MjcwICIkc3ZucmVwbyIvZ2xvYiAmJgorCWdpdCBzdm4gbXVsdGktZmV0Y2ggJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9nbG9iID5hY3R1YWwgJiYKKwlncmVwICJecGFyZW50ICIgYWN0dWFsID5hY3R1YWwyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBhY3R1YWwyCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJtdWx0aS1mZXRjaCBjb250aW51ZXMgdG8gd29yayIgIgorCWdpdCBzdm4gbXVsdGktZmV0Y2gKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm11bHRpLWZldGNoIHdvcmtzIG9mZiBhICdjbGVhbicgcmVwb3NpdG9yeSIgJworCXJtIC1yZiAiJEdJVF9ESVIvc3ZuIiAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9Im9wdGlvbiBuby1kZXJlZiUwYWRlbGV0ZSAlKHJlZm5hbWUpIiByZWZzL3JlbW90ZXMgfAorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWFsbCAtLWV4cGlyZT1hbGwgJiYKKwlta2RpciAiJEdJVF9ESVIvc3ZuIiAmJgorCWdpdCBzdm4gbXVsdGktZmV0Y2gKKwknCisKK3Rlc3RfZGVidWcgJ2dpdGsgLS1hbGwgJicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTA1LWdpdC1zdm4tY29tbWl0LWRpZmYuc2ggYi90L3Q5MTA1LWdpdC1zdm4tY29tbWl0LWRpZmYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmVkNWY3NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMDUtZ2l0LXN2bi1jb21taXQtZGlmZi5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEVyaWMgV29uZwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBjb21taXQtZGlmZicKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICcKKwlta2RpciBpbXBvcnQgJiYKKwkoCisJCWNkIGltcG9ydCAmJgorCQllY2hvIGhlbGxvID5yZWFkbWUgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIgorCSkgJiYKKwllY2hvIGhlbGxvID4gcmVhZG1lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByZWFkbWUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJpbml0aWFsIiAmJgorCWVjaG8gd29ybGQgPj4gcmVhZG1lICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiYW5vdGhlciIKKwknCisKK2hlYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReMCkKK3ByZXY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReMSkKKworIyB0aGUgaW50ZXJuYWxzIG9mIHRoZSBjb21taXQtZGlmZiBjb21tYW5kIGFyZSB0aGUgc2FtZSBhcyB0aGUgcmVndWxhcgorIyBjb21taXQsIHNvIG9ubHkgYSBiYXNpYyB0ZXN0IG9mIGZ1bmN0aW9uYWxpdHkgaXMgbmVlZGVkIHNpbmNlIHdlJ3ZlCisjIGFscmVhZHkgdGVzdGVkIGNvbW1pdCBleHRlbnNpdmVseSBlbHNld2hlcmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0aGUgY29tbWl0LWRpZmYgY29tbWFuZCcgJworCXRlc3QgLW4gIiRwcmV2IiAmJiB0ZXN0IC1uICIkaGVhZCIgJiYKKwlnaXQgc3ZuIGNvbW1pdC1kaWZmIC1yMSAiJHByZXYiICIkaGVhZCIgIiRzdm5yZXBvIiAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB3YyAmJgorCWNtcCByZWFkbWUgd2MvcmVhZG1lCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQtZGlmZiB0byBhIHN1Yi1kaXJlY3RvcnkgKHdpdGggZ2l0IHN2biBjb25maWcpJyAnCisJc3ZuX2NtZCBpbXBvcnQgLW0gInN1Yi1kaXJlY3RvcnkiIGltcG9ydCAiJHN2bnJlcG8iL3N1YmRpciAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAiJHN2bnJlcG8iL3N1YmRpciAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgc3ZuIGNvbW1pdC1kaWZmIC1yMyAiJHByZXYiICIkaGVhZCIgJiYKKwlzdm5fY21kIGNhdCAiJHN2bnJlcG8iL3N1YmRpci9yZWFkbWUgPiByZWFkbWUuMiAmJgorCWNtcCByZWFkbWUgcmVhZG1lLjIKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwNi1naXQtc3ZuLWNvbW1pdC1kaWZmLWNsb2JiZXIuc2ggYi90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZWM0NWJjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEwNi1naXQtc3ZuLWNvbW1pdC1kaWZmLWNsb2JiZXIuc2gKQEAgLTAsMCArMSwxMDYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgRXJpYyBXb25nCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGNvbW1pdC1kaWZmIGNsb2JiZXInCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJZWNobyBpbml0aWFsID5maWxlICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIKKwkpICYmCisJZWNobyBpbml0aWFsID4gZmlsZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImluaXRpYWwiCisJJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGNoYW5nZSBmcm9tIHN2biBzaWRlJyAnCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCisJKAorCQljZCB0LnN2biAmJgorCQllY2hvIHNlY29uZCBsaW5lIGZyb20gc3ZuID4+ZmlsZSAmJgorCQlwb2tlIGZpbGUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInNlY29uZCBsaW5lIGZyb20gc3ZuIgorCSkgJiYKKwlybSAtcmYgdC5zdm4KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBjb25mbGljdGluZyBjaGFuZ2UgZnJvbSBnaXQnICcKKwllY2hvIHNlY29uZCBsaW5lIGZyb20gZ2l0ID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzZWNvbmQgbGluZSBmcm9tIGdpdCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGNvbW1pdC1kaWZmIC1yMSBIRUFEfjEgSEVBRCAiJHN2bnJlcG8iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBjb21wbGVtZW50aW5nIGNoYW5nZSBmcm9tIGdpdCcgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRH4xICYmCisJZWNobyBzZWNvbmQgbGluZSBmcm9tIHN2biA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAic2Vjb25kIGxpbmUgZnJvbSBzdm4iICYmCisJZWNobyB0aGlyZCBsaW5lIGZyb20gZ2l0ID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ0aGlyZCBsaW5lIGZyb20gZ2l0IiAmJgorCWdpdCBzdm4gY29tbWl0LWRpZmYgLXIyIEhFQUR+MSBIRUFEICIkc3ZucmVwbyIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgZmFpbHMgdG8gY29tbWl0IGJlY2F1c2Ugb2YgY29uZmxpY3QnICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHJlZnMvcmVtb3Rlcy9naXQtc3ZuICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCisJKAorCQljZCB0LnN2biAmJgorCQllY2hvIGZvdXJ0aCBsaW5lIGZyb20gc3ZuID4+ZmlsZSAmJgorCQlwb2tlIGZpbGUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImZvdXJ0aCBsaW5lIGZyb20gc3ZuIgorCSkgJiYKKwlybSAtcmYgdC5zdm4gJiYKKwllY2hvICJmb3VydGggbGluZSBmcm9tIGdpdCIgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImZvdXJ0aCBsaW5lIGZyb20gZ2l0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCBkb2VzIHRoZSBzdm4gZXF1aXZhbGVudCBvZiBhbiBpbmRleCBtZXJnZScgIgorCWdpdCByZXNldCAtLWhhcmQgcmVmcy9yZW1vdGVzL2dpdC1zdm4gJiYKKwllY2hvICdpbmRleCBtZXJnZScgPiBmaWxlMiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICdpbmRleCBtZXJnZScgJiYKKwllY2hvICdtb3JlIGNoYW5nZXMnID4+IGZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBmaWxlMiAmJgorCWdpdCBjb21taXQgLWEgLW0gJ21vcmUgY2hhbmdlcycgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBhbm90aGVyIGNoYW5nZSBmcm9tIHN2biBzaWRlJyAnCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCisJKAorCQljZCB0LnN2biAmJgorCQllY2hvIHRoaXJkIGxpbmUgZnJvbSBzdm4gPj5maWxlICYmCisJCXBva2UgZmlsZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidGhpcmQgbGluZSBmcm9tIHN2biIKKwkpICYmCisJcm0gLXJmIHQuc3ZuCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBkY29tbWl0IGZyb20gZ2l0IHN2biB3aWxsIG5vdCBjbG9iYmVyIHN2bicgIgorCWdpdCByZXNldCAtLWhhcmQgcmVmcy9yZW1vdGVzL2dpdC1zdm4gJiYKKwllY2hvIG5ldyBmaWxlID4+IG5ldy1maWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBuZXctZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gJ25ldyBmaWxlJyAmJgorCWVjaG8gY2xvYmJlciA+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICdjbG9iYmVyJyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZGNvbW1pdAorCSIKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0aGF0IHJlYmFzZSByZWFsbHkgZmFpbGVkJyAnCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJZ3JlcCBjdXJyZW50bHkucmViYXNpbmcgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc29sdmUsIGNvbnRpbnVlIHRoZSByZWJhc2UgYW5kIGRjb21taXQnICIKKwllY2hvIGNsb2JiZXIgYW5kIEkgcmVhbGx5IG1lYW4gaXQgPiBmaWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBmaWxlICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IHN2biBkY29tbWl0CisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDctZ2l0LXN2bi1taWdyYXRlLnNoIGIvdC90OTEwNy1naXQtc3ZuLW1pZ3JhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2VhYTViYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMDctZ2l0LXN2bi1taWdyYXRlLnNoCkBAIC0wLDAgKzEsMTM2IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEVyaWMgV29uZwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBtZXRhZGF0YSBtaWdyYXRpb25zIGZyb20gcHJldmlvdXMgdmVyc2lvbnMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb2xkLWxvb2tpbmcgbWV0YWRhdGEnICcKKwljcCAiJEdJVF9ESVIiL2NvbmZpZyAiJEdJVF9ESVIiL2NvbmZpZy1vbGQtZ2l0LXN2biAmJgorCW1rZGlyIGltcG9ydCAmJgorCSgKKwkJY2QgaW1wb3J0ICYmCisJCWZvciBpIGluIHRydW5rIGJyYW5jaGVzL2EgYnJhbmNoZXMvYiB0YWdzLzAuMSB0YWdzLzAuMiB0YWdzLzAuMworCQlkbworCQkJbWtkaXIgLXAgJGkgJiYKKwkJCWVjaG8gaGVsbG8gPj4kaS9SRUFETUUgfHwKKwkJCWV4aXQgMQorCQlkb25lICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tIHRlc3QgLiAiJHN2bnJlcG8iCisJKSAmJgorCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCXJtIC1yZiAiJEdJVF9ESVIiL3N2biAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvZ2l0LXN2bi1IRUFEIHJlZnMvcmVtb3Rlcy9naXQtc3ZuICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9zdm4tSEVBRCByZWZzL3JlbW90ZXMvZ2l0LXN2biAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvcmVtb3Rlcy9naXQtc3ZuIHJlZnMvcmVtb3Rlcy9naXQtc3ZuCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtc3ZuLUhFQUQgaXMgYSByZWFsIEhFQUQnICcKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvZ2l0LXN2bi1IRUFEXjAKKycKKworc3ZucmVwb19lc2NhcGVkPSQoZWNobyAkc3ZucmVwbyB8IHNlZCAncy8gLyUyMC9nJykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBvbGQtc3R5bGUgKHYwKSBnaXQgc3ZuIGxheW91dCcgJworCW1rZGlyIC1wICIkR0lUX0RJUiIvZ2l0LXN2bi9pbmZvICIkR0lUX0RJUiIvc3ZuL2luZm8gJiYKKwllY2hvICIkc3ZucmVwbyIgPiAiJEdJVF9ESVIiL2dpdC1zdm4vaW5mby91cmwgJiYKKwllY2hvICIkc3ZucmVwbyIgPiAiJEdJVF9ESVIiL3N2bi9pbmZvL3VybCAmJgorCWdpdCBzdm4gbWlncmF0ZSAmJgorCSEgdGVzdCAtZCAiJEdJVF9ESVIiL2dpdC1zdm4gJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9naXQtc3ZuXjAgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9zdm5eMCAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi51cmwpIiA9ICIkc3ZucmVwb19lc2NhcGVkIiAmJgorCXRlc3QgJChnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoKSA9IFwKKwkJIjpyZWZzL3JlbW90ZXMvZ2l0LXN2biIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgYSBtdWx0aS1yZXBvc2l0b3J5IHJlcG8nICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAtVCB0cnVuayAtdCB0YWdzIC1iIGJyYW5jaGVzICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggPiBmZXRjaC5vdXQgJiYKKwlncmVwICJedHJ1bms6cmVmcy9yZW1vdGVzL29yaWdpbi90cnVuayQiIGZldGNoLm91dCAmJgorCXRlc3QgLW4gIiQoZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcyBcCisJCSAgICAiXmJyYW5jaGVzL1wqOnJlZnMvcmVtb3Rlcy9vcmlnaW4vXCokIikiICYmCisJdGVzdCAtbiAiJChnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLnRhZ3MgXAorCQkgICAgIl50YWdzL1wqOnJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy9cKiQiKSIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgXAorCSAgICAgICAgICAgICAgICAgICAgICAgICJeYnJhbmNoZXMvXCo6cmVmcy9yZW1vdGVzL29yaWdpbi9cKiQiICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi1yZW1vdGUuc3ZuLnRhZ3MgXAorCSAgICAgICAgICAgICAgICAgICAgICAgICJedGFncy9cKjpyZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvXCokIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggImJyYW5jaGVzL2E6cmVmcy9yZW1vdGVzL29yaWdpbi9hIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggImJyYW5jaGVzL2I6cmVmcy9yZW1vdGVzL29yaWdpbi9iIiAmJgorCWZvciBpIGluIHRhZ3MvMC4xIHRhZ3MvMC4yIHRhZ3MvMC4zCisJZG8KKwkJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisJCQkkaTpyZWZzL3JlbW90ZXMvb3JpZ2luLyRpIHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHN2bi1yZW1vdGUuc3ZuLmZldGNoID4gZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRydW5rOnJlZnMvcmVtb3Rlcy9vcmlnaW4vdHJ1bmskIiBmZXRjaC5vdXQgJiYKKwlncmVwICJeYnJhbmNoZXMvYTpyZWZzL3JlbW90ZXMvb3JpZ2luL2EkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJeYnJhbmNoZXMvYjpyZWZzL3JlbW90ZXMvb3JpZ2luL2IkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJedGFncy8wXC4xOnJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy8wXC4xJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMjpyZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvMFwuMiQiIGZldGNoLm91dCAmJgorCWdyZXAgIl50YWdzLzBcLjM6cmVmcy9yZW1vdGVzL29yaWdpbi90YWdzLzBcLjMkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJeOnJlZnMvcmVtb3Rlcy9naXQtc3ZuIiBmZXRjaC5vdXQKKwknCisKKyMgcmVmcyBzaG91bGQgYWxsIGJlIGRpZmZlcmVudCwgYnV0IHRoZSB0cmVlcyBzaG91bGQgYWxsIGJlIHRoZSBzYW1lOgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGktZmV0Y2ggd29ya3Mgb24gcGFydGlhbCB1cmxzICsgcGF0aHMnICcKKwlyZWZzPSJ0cnVuayBhIGIgdGFncy8wLjEgdGFncy8wLjIgdGFncy8wLjMiICYmCisJZ2l0IHN2biBtdWx0aS1mZXRjaCAmJgorCWZvciBpIGluICRyZWZzCisJZG8KKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luLyRpXjAgfHwgcmV0dXJuIDE7CisJZG9uZSA+cmVmcy5vdXQgJiYKKwl0ZXN0IC16ICIkKHNvcnQgPHJlZnMub3V0IHwgdW5pcSAtZCkiICYmCisJZm9yIGkgaW4gJHJlZnMKKwlkbworCQlmb3IgaiBpbiAkcmVmcworCQlkbworCQkJZ2l0IGRpZmYgLS1leGl0LWNvZGUgcmVmcy9yZW1vdGVzL29yaWdpbi8kaSBcCisJCQkJCSAgICAgcmVmcy9yZW1vdGVzL29yaWdpbi8kaiB8fAorCQkJCXJldHVybiAxCisJCWRvbmUKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pZ3JhdGUgLS1taW5pbWl6ZSBvbiBvbGQgaW5pdGVkIGxheW91dCcgJworCWdpdCBjb25maWcgLS11bnNldC1hbGwgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIHN2bi1yZW1vdGUuc3ZuLnVybCAmJgorCXJtIC1yZiAiJEdJVF9ESVIiL3N2biAmJgorCWZvciBpIGluICQoY2F0IGZldGNoLm91dCkKKwlkbworCQlwYXRoPSQoZXhwciAkaSA6ICJcKFteOl0qXCk6LiokIikKKwkJcmVmPSQoZXhwciAkaSA6ICJbXjpdKjpcKHJlZnMvcmVtb3Rlcy8uKlwpJCIpCisJCWlmIHRlc3QgLXogIiRyZWYiOyB0aGVuIGNvbnRpbnVlOyBmaQorCQlpZiB0ZXN0IC1uICIkcGF0aCI7IHRoZW4gcGF0aD0iLyRwYXRoIjsgZmkKKwkJbWtkaXIgLXAgIiRHSVRfRElSIi9zdm4vJHJlZi9pbmZvLyAmJgorCQllY2hvICIkc3ZucmVwbyIkcGF0aCA+IiRHSVRfRElSIi9zdm4vJHJlZi9pbmZvL3VybCB8fAorCQlyZXR1cm4gMQorCWRvbmUgJiYKKwlnaXQgc3ZuIG1pZ3JhdGUgLS1taW5pbWl6ZSAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyAtbCB8IGdyZXAgIl5zdm4tcmVtb3RlXC5naXQtc3ZuXC4iKSIgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCBzdm4tcmVtb3RlLnN2bi5mZXRjaCA+IGZldGNoLm91dCAmJgorCWdyZXAgIl50cnVuazpyZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXmJyYW5jaGVzL2E6cmVmcy9yZW1vdGVzL29yaWdpbi9hJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXmJyYW5jaGVzL2I6cmVmcy9yZW1vdGVzL29yaWdpbi9iJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMTpyZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvMFwuMSQiIGZldGNoLm91dCAmJgorCWdyZXAgIl50YWdzLzBcLjI6cmVmcy9yZW1vdGVzL29yaWdpbi90YWdzLzBcLjIkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJedGFncy8wXC4zOnJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy8wXC4zJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXjpyZWZzL3JlbW90ZXMvZ2l0LXN2biIgZmV0Y2gub3V0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICAiLnJldl9kYiBhdXRvLWNvbnZlcnRlZCB0byAucmV2X21hcC5VVUlEIiAnCisJZ2l0IHN2biBmZXRjaCAtaSB0cnVuayAmJgorCXRlc3QgLXogIiQobHMgIiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL29yaWdpbi90cnVuay8ucmV2X2RiLiogMj4vZGV2L251bGwpIiAmJgorCWV4cGVjdD0iJChscyAiJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rLy5yZXZfbWFwLiopIiAmJgorCXRlc3QgLW4gIiRleHBlY3QiICYmCisJcmV2X2RiPSIkKGVjaG8gJGV4cGVjdCB8IHNlZCAtZSAicyxfbWFwLF9kYiwiKSIgJiYKKwljb252ZXJ0X3RvX3Jldl9kYiAiJGV4cGVjdCIgIiRyZXZfZGIiICYmCisJcm0gLWYgIiRleHBlY3QiICYmCisJdGVzdCAtZiAiJHJldl9kYiIgJiYKKwlnaXQgc3ZuIGZldGNoIC1pIHRydW5rICYmCisJdGVzdCAteiAiJChscyAiJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rLy5yZXZfZGIuKiAyPi9kZXYvbnVsbCkiICYmCisJdGVzdCAhIC1lICIkR0lUX0RJUiIvc3ZuL3JlZnMvcmVtb3Rlcy9vcmlnaW4vdHJ1bmsvLnJldl9kYiAmJgorCXRlc3QgLWYgIiRleHBlY3QiCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDgtZ2l0LXN2bi1nbG9iLnNoIGIvdC90OTEwOC1naXQtc3ZuLWdsb2Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjk5MGY2NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMDgtZ2l0LXN2bi1nbG9iLnNoCkBAIC0wLDAgKzEsMTE2IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBnbG9iYmluZyByZWZzcGVjcycKKy4gLi9saWItZ2l0LXN2bi5zaAorCitjYXQgPiBleHBlY3QuZW5kIDw8RU9GCit0aGUgZW5kCitoaQorc3RhcnQgYSBuZXcgYnJhbmNoCitpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCByZWZzcGVjIGdsb2JiaW5nJyAnCisJbWtkaXIgLXAgdHJ1bmsvc3JjL2EgdHJ1bmsvc3JjL2IgdHJ1bmsvZG9jICYmCisJZWNobyAiaGVsbG8gd29ybGQiID4gdHJ1bmsvc3JjL2EvcmVhZG1lICYmCisJZWNobyAiZ29vZGJ5ZSB3b3JsZCIgPiB0cnVuay9zcmMvYi9yZWFkbWUgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgdHJ1bmsgIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB0bXAgJiYKKwkoCisJCWNkIHRtcCAmJgorCQlta2RpciBicmFuY2hlcyB0YWdzICYmCisJCXN2bl9jbWQgYWRkIGJyYW5jaGVzIHRhZ3MgJiYKKwkJc3ZuX2NtZCBjcCB0cnVuayBicmFuY2hlcy9zdGFydCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAic3RhcnQgYSBuZXcgYnJhbmNoIiAmJgorCQlzdm5fY21kIHVwICYmCisJCWVjaG8gImhpIiA+PiBicmFuY2hlcy9zdGFydC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSBicmFuY2hlcy9zdGFydC9zcmMvYi9yZWFkbWUgJiYKKwkJZWNobyAiaGV5IiA+PiBicmFuY2hlcy9zdGFydC9zcmMvYS9yZWFkbWUgJiYKKwkJcG9rZSBicmFuY2hlcy9zdGFydC9zcmMvYS9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImhpIiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgY3AgYnJhbmNoZXMvc3RhcnQgdGFncy9lbmQgJiYKKwkJZWNobyAiYnllIiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJZWNobyAiYXllIiA+PiB0YWdzL2VuZC9zcmMvYS9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYS9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRoZSBlbmQiICYmCisJCWVjaG8gImJ5ZWJ5ZSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJub3RoaW5nIHRvIHNlZSBoZXJlIgorCSkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLnVybCAiJHN2bnJlcG8iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisJICAgICAgICAgICAgICAgICAidHJ1bmsvc3JjL2E6cmVmcy9yZW1vdGVzL3RydW5rIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgXAorCSAgICAgICAgICAgICAgICAgImJyYW5jaGVzLyovc3JjL2E6cmVmcy9yZW1vdGVzL2JyYW5jaGVzLyoiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi50YWdzXAorCSAgICAgICAgICAgICAgICAgInRhZ3MvKi9zcmMvYTpyZWZzL3JlbW90ZXMvdGFncy8qIiAmJgorCWdpdCBzdm4gbXVsdGktZmV0Y2ggJiYKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgcmVmcy9yZW1vdGVzL3RhZ3MvZW5kID5hY3R1YWwgJiYKKwlzZWQgLWUgInMvXi5cezQxXH0vLyIgYWN0dWFsID5vdXRwdXQuZW5kICYmCisJdGVzdF9jbXAgZXhwZWN0LmVuZCBvdXRwdXQuZW5kICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzL2VuZH4xKSIgPSBcCisJCSIkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JyYW5jaGVzL3N0YXJ0KSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JyYW5jaGVzL3N0YXJ0fjIpIiA9IFwKKwkJIiQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHJ1bmspIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvZW5kQDMKKwknCisKK2VjaG8gdHJ5IHRvIHRyeSA+IGV4cGVjdC50d28KK2VjaG8gbm90aGluZyB0byBzZWUgaGVyZSA+PiBleHBlY3QudHdvCitjYXQgZXhwZWN0LmVuZCA+PiBleHBlY3QudHdvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgbGVmdC1oYW5kLXNpZGUgb25seSBnbG9iYmluZycgJworCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28udXJsICIkc3ZucmVwbyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudHdvLmZldGNoIHRydW5rOnJlZnMvcmVtb3Rlcy90d28vdHJ1bmsgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudHdvLmJyYW5jaGVzIFwKKwkgICAgICAgICAgICAgICAgICJicmFuY2hlcy8qOnJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvKiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudHdvLnRhZ3MgXAorCSAgICAgICAgICAgICAgICAgInRhZ3MvKjpyZWZzL3JlbW90ZXMvdHdvL3RhZ3MvKiIgJiYKKwkoCisJCWNkIHRtcCAmJgorCQllY2hvICJ0cnkgdHJ5IiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRyeSB0byB0cnkiCisJKSAmJgorCWdpdCBzdm4gZmV0Y2ggdHdvICYmCisJZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDYgYWN0dWFsICYmCisJZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvc3RhcnQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy9zdGFydH4yKSA9IFwKKwkgICAgICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL3RydW5rKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmR+MykgPSBcCisJICAgICAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy9zdGFydCkgJiYKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgcmVmcy9yZW1vdGVzL3R3by90YWdzL2VuZCA+YWN0dWFsICYmCisJc2VkIC1lICJzL14uXHs0MVx9Ly8iIGFjdHVhbCA+b3V0cHV0LnR3byAmJgorCXRlc3RfY21wIGV4cGVjdC50d28gb3V0cHV0LnR3bworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSB0ZXN0IGRpc2FsbG93IG11bHRpLWdsb2JzJyAiCitjYXQgPmV4cGVjdC50aHJlZSA8PEVPRgorT25seSBvbmUgc2V0IG9mIHdpbGRjYXJkcyAoZS5nLiAnKicgb3IgJyovKi8qJykgaXMgc3VwcG9ydGVkOiBicmFuY2hlcy8qL3QvKgorCitFT0YKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGlzYWxsb3cgbXVsdGktZ2xvYnMnICcKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUudXJsICIkc3ZucmVwbyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUuZmV0Y2ggXAorCSAgICAgICAgICAgICAgICAgdHJ1bms6cmVmcy9yZW1vdGVzL3RocmVlL3RydW5rICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnRocmVlLmJyYW5jaGVzIFwKKwkgICAgICAgICAgICAgICAgICJicmFuY2hlcy8qL3QvKjpyZWZzL3JlbW90ZXMvdGhyZWUvYnJhbmNoZXMvKiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUudGFncyBcCisJICAgICAgICAgICAgICAgICAidGFncy8qLyo6cmVmcy9yZW1vdGVzL3RocmVlL3RhZ3MvKiIgJiYKKwkoCisJCWNkIHRtcCAmJgorCQllY2hvICJ0cnkgdHJ5IiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRyeSB0byB0cnkiCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZmV0Y2ggdGhyZWUgMj4gc3RkZXJyLnRocmVlICYmCisJdGVzdF9jbXAgZXhwZWN0LnRocmVlIHN0ZGVyci50aHJlZQorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTA5LWdpdC1zdm4tbXVsdGktZ2xvYi5zaCBiL3QvdDkxMDktZ2l0LXN2bi1tdWx0aS1nbG9iLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxZTc1NDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTA5LWdpdC1zdm4tbXVsdGktZ2xvYi5zaApAQCAtMCwwICsxLDE2NyBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAwNyBFcmljIFdvbmcKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZ2xvYmJpbmcgcmVmc3BlY3MnCisuIC4vbGliLWdpdC1zdm4uc2gKKworY2F0ID4gZXhwZWN0LmVuZCA8PEVPRgordGhlIGVuZAoraGkKK3N0YXJ0IGEgbmV3IGJyYW5jaAoraW5pdGlhbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcmVmc3BlYyBnbG9iYmluZycgJworCW1rZGlyIC1wIHRydW5rL3NyYy9hIHRydW5rL3NyYy9iIHRydW5rL2RvYyAmJgorCWVjaG8gImhlbGxvIHdvcmxkIiA+IHRydW5rL3NyYy9hL3JlYWRtZSAmJgorCWVjaG8gImdvb2RieWUgd29ybGQiID4gdHJ1bmsvc3JjL2IvcmVhZG1lICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIHRydW5rICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdG1wICYmCisJKAorCQljZCB0bXAgJiYKKwkJbWtkaXIgYnJhbmNoZXMgYnJhbmNoZXMvdjEgdGFncyAmJgorCQlzdm5fY21kIGFkZCBicmFuY2hlcyB0YWdzICYmCisJCXN2bl9jbWQgY3AgdHJ1bmsgYnJhbmNoZXMvdjEvc3RhcnQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInN0YXJ0IGEgbmV3IGJyYW5jaCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQllY2hvICJoaSIgPj4gYnJhbmNoZXMvdjEvc3RhcnQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgYnJhbmNoZXMvdjEvc3RhcnQvc3JjL2IvcmVhZG1lICYmCisJCWVjaG8gImhleSIgPj4gYnJhbmNoZXMvdjEvc3RhcnQvc3JjL2EvcmVhZG1lICYmCisJCXBva2UgYnJhbmNoZXMvdjEvc3RhcnQvc3JjL2EvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJoaSIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGNwIGJyYW5jaGVzL3YxL3N0YXJ0IHRhZ3MvZW5kICYmCisJCWVjaG8gImJ5ZSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCWVjaG8gImF5ZSIgPj4gdGFncy9lbmQvc3JjL2EvcmVhZG1lICYmCisJCXBva2UgdGFncy9lbmQvc3JjL2EvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0aGUgZW5kIiAmJgorCQllY2hvICJieWVieWUiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAibm90aGluZyB0byBzZWUgaGVyZSIKKwkpICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi51cmwgIiRzdm5yZXBvIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAorCSAgICAgICAgICAgICAgICAgInRydW5rL3NyYy9hOnJlZnMvcmVtb3Rlcy90cnVuayIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzIFwKKwkgICAgICAgICAgICAgICAgICJicmFuY2hlcy8qLyovc3JjL2E6cmVmcy9yZW1vdGVzL2JyYW5jaGVzLyovKiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLnRhZ3NcCisJICAgICAgICAgICAgICAgICAidGFncy8qL3NyYy9hOnJlZnMvcmVtb3Rlcy90YWdzLyoiICYmCisJZ2l0IHN2biBtdWx0aS1mZXRjaCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSByZWZzL3JlbW90ZXMvdGFncy9lbmQgPmFjdHVhbCAmJgorCXNlZCAtZSAicy9eLlx7NDFcfS8vIiBhY3R1YWwgPm91dHB1dC5lbmQgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZW5kIG91dHB1dC5lbmQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvZW5kfjEpIiA9IFwKKwkJIiQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYnJhbmNoZXMvdjEvc3RhcnQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYnJhbmNoZXMvdjEvc3RhcnR+MikiID0gXAorCQkiJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90cnVuaykiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy9lbmRAMworCScKKworZWNobyB0cnkgdG8gdHJ5ID4gZXhwZWN0LnR3bworZWNobyBub3RoaW5nIHRvIHNlZSBoZXJlID4+IGV4cGVjdC50d28KK2NhdCBleHBlY3QuZW5kID4+IGV4cGVjdC50d28KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBsZWZ0LWhhbmQtc2lkZSBvbmx5IGdsb2JiaW5nJyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by51cmwgIiRzdm5yZXBvIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28uZmV0Y2ggdHJ1bms6cmVmcy9yZW1vdGVzL3R3by90cnVuayAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28uYnJhbmNoZXMgXAorCSAgICAgICAgICAgICAgICAgImJyYW5jaGVzLyovKjpyZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzLyovKiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudHdvLnRhZ3MgXAorCSAgICAgICAgICAgICAgICAgInRhZ3MvKjpyZWZzL3JlbW90ZXMvdHdvL3RhZ3MvKiIgJiYKKwkoCisJCWNkIHRtcCAmJgorCQllY2hvICJ0cnkgdHJ5IiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRyeSB0byB0cnkiCisJKSAmJgorCWdpdCBzdm4gZmV0Y2ggdHdvICYmCisJZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDYgYWN0dWFsICYmCisJZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvdjEvc3RhcnQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy92MS9zdGFydH4yKSA9IFwKKwkgICAgICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL3RydW5rKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmR+MykgPSBcCisJICAgICAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy92MS9zdGFydCkgJiYKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgcmVmcy9yZW1vdGVzL3R3by90YWdzL2VuZCA+YWN0dWFsICYmCisJc2VkIC1lICJzL14uXHs0MVx9Ly8iIGFjdHVhbCA+b3V0cHV0LnR3byAmJgorCXRlc3RfY21wIGV4cGVjdC50d28gb3V0cHV0LnR3bworCScKK2NhdCA+IGV4cGVjdC5mb3VyIDw8RU9GCithZGlvcworYWRkaW5nIG1vcmUKK0NoYW5nZWQgMiBpbiB2Mi9zdGFydAorQW5vdGhlciB2ZXJzaW9uZWQgYnJhbmNoCitpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhbm90aGVyIGJyYW5jaCcgJworCSgKKwkJY2QgdG1wICYmCisJCW1rZGlyIGJyYW5jaGVzL3YyICYmCisJCXN2bl9jbWQgYWRkIGJyYW5jaGVzL3YyICYmCisJCXN2bl9jbWQgY3AgdHJ1bmsgYnJhbmNoZXMvdjIvc3RhcnQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkFub3RoZXIgdmVyc2lvbmVkIGJyYW5jaCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQllY2hvICJoZWxsbyIgPj4gYnJhbmNoZXMvdjIvc3RhcnQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgYnJhbmNoZXMvdjIvc3RhcnQvc3JjL2IvcmVhZG1lICYmCisJCWVjaG8gImhvd2R5IiA+PiBicmFuY2hlcy92Mi9zdGFydC9zcmMvYS9yZWFkbWUgJiYKKwkJcG9rZSBicmFuY2hlcy92Mi9zdGFydC9zcmMvYS9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkNoYW5nZWQgMiBpbiB2Mi9zdGFydCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGNwIGJyYW5jaGVzL3YyL3N0YXJ0IHRhZ3MvbmV4dCAmJgorCQllY2hvICJieWUiID4+IHRhZ3MvbmV4dC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL25leHQvc3JjL2IvcmVhZG1lICYmCisJCWVjaG8gImF5ZSIgPj4gdGFncy9uZXh0L3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvbmV4dC9zcmMvYS9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImFkZGluZyBtb3JlIiAmJgorCQllY2hvICJieWVieWUiID4+IHRhZ3MvbmV4dC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL25leHQvc3JjL2IvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJhZGlvcyIKKwkpICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLmZvdXIudXJsICIkc3ZucmVwbyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuZm91ci5mZXRjaCB0cnVuazpyZWZzL3JlbW90ZXMvZm91ci90cnVuayAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5mb3VyLmJyYW5jaGVzIFwKKwkgICAgICAgICAgICAgICAgICJicmFuY2hlcy8qLyo6cmVmcy9yZW1vdGVzL2ZvdXIvYnJhbmNoZXMvKi8qIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5mb3VyLnRhZ3MgXAorCSAgICAgICAgICAgICAgICAgInRhZ3MvKjpyZWZzL3JlbW90ZXMvZm91ci90YWdzLyoiICYmCisJZ2l0IHN2biBmZXRjaCBmb3VyICYmCisJZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy9mb3VyL3RhZ3MvbmV4dCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBhY3R1YWwgJiYKKwlnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL2ZvdXIvYnJhbmNoZXMvdjIvc3RhcnQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2ZvdXIvYnJhbmNoZXMvdjIvc3RhcnR+MikgPSBcCisJICAgICAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2ZvdXIvdHJ1bmspICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2ZvdXIvdGFncy9uZXh0fjIpID0gXAorCSAgICAgJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9mb3VyL2JyYW5jaGVzL3YyL3N0YXJ0KSAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSByZWZzL3JlbW90ZXMvZm91ci90YWdzL25leHQgPmFjdHVhbCAmJgorCXNlZCAtZSAicy9eLlx7NDFcfS8vIiBhY3R1YWwgPm91dHB1dC5mb3VyICYmCisJdGVzdF9jbXAgZXhwZWN0LmZvdXIgb3V0cHV0LmZvdXIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgdGVzdCBkaXNhbGxvdyBtdWx0aXBsZSBnbG9icycgIgorY2F0ID5leHBlY3QudGhyZWUgPDxFT0YKK09ubHkgb25lIHNldCBvZiB3aWxkY2FyZHMgKGUuZy4gJyonIG9yICcqLyovKicpIGlzIHN1cHBvcnRlZDogYnJhbmNoZXMvKi90LyoKKworRU9GCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRpc2FsbG93IG11bHRpcGxlIGdsb2JzJyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnRocmVlLnVybCAiJHN2bnJlcG8iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnRocmVlLmZldGNoIFwKKwkgICAgICAgICAgICAgICAgIHRydW5rOnJlZnMvcmVtb3Rlcy90aHJlZS90cnVuayAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50aHJlZS5icmFuY2hlcyBcCisJICAgICAgICAgICAgICAgICAiYnJhbmNoZXMvKi90Lyo6cmVmcy9yZW1vdGVzL3RocmVlL2JyYW5jaGVzLyovKiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUudGFncyBcCisJICAgICAgICAgICAgICAgICAidGFncy8qOnJlZnMvcmVtb3Rlcy90aHJlZS90YWdzLyoiICYmCisJKAorCQljZCB0bXAgJiYKKwkJZWNobyAidHJ5IHRyeSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0cnkgdG8gdHJ5IgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGZldGNoIHRocmVlIDI+IHN0ZGVyci50aHJlZSAmJgorCXRlc3RfY21wIGV4cGVjdC50aHJlZSBzdGRlcnIudGhyZWUKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExMC1naXQtc3ZuLXVzZS1zdm0tcHJvcHMuc2ggYi90L3Q5MTEwLWdpdC1zdm4tdXNlLXN2bS1wcm9wcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZDM3ZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTExMC1naXQtc3ZuLXVzZS1zdm0tcHJvcHMuc2gKQEAgLTAsMCArMSw2MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biB1c2VTdm1Qcm9wcyB0ZXN0JworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm0gcmVwbycgJworCXN2bmFkbWluIGxvYWQgLXEgIiRyYXdzdm5yZXBvIiA8ICIkVEVTVF9ESVJFQ1RPUlkiL3Q5MTEwL3N2bS5kdW1wICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyciAtaSBiYXIgIiRzdm5yZXBvIi9taXJyb3IvYXJyICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyZ2ggLWkgZGlyICIkc3ZucmVwbyIvbWlycm9yL2FyZ2ggJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJnaCAtaSBlIFwKKwkgICIkc3ZucmVwbyIvbWlycm9yL2FyZ2gvYS9iL2MvZC9lICYmCisJZ2l0IGNvbmZpZyBzdm4udXNlU3ZtUHJvcHMgdHJ1ZSAmJgorCWdpdCBzdm4gZmV0Y2ggLS1hbGwKKwknCisKK3V1aWQ9MTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5CisKK2Jhcl91cmw9aHR0cDovL21heW9uYWlzZS9zdm5yZXBvL2JhcgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1ldGFkYXRhIGZvciAvYmFyJyAiCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGJhcl91cmxAMTIgJHV1aWQkJyBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9iYXJ+MSA+YWN0dWFsICYmCisJZ3JlcCAnXmdpdC1zdm4taWQ6ICRiYXJfdXJsQDExICR1dWlkJCcgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyfjIgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkYmFyX3VybEAxMCAkdXVpZCQnIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn4zID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGJhcl91cmxAOSAkdXVpZCQnIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn40ID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGJhcl91cmxANiAkdXVpZCQnIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn41ID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGJhcl91cmxAMSAkdXVpZCQnIGFjdHVhbAorCSIKKworZV91cmw9aHR0cDovL21heW9uYWlzZS9zdm5yZXBvL2Rpci9hL2IvYy9kL2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXRhZGF0YSBmb3IgL2Rpci9hL2IvYy9kL2UnICIKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9lID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGVfdXJsQDEgJHV1aWQkJyBhY3R1YWwKKwkiCisKK2Rpcl91cmw9aHR0cDovL21heW9uYWlzZS9zdm5yZXBvL2RpcgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1ldGFkYXRhIGZvciAvZGlyJyAiCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvZGlyID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGRpcl91cmxAMiAkdXVpZCQnIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Rpcn4xID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGRpcl91cmxAMSAkdXVpZCQnIGFjdHVhbAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCBjb21taXQgYmFzZWQgb24gU1ZOIHJldmlzaW9uIG51bWJlcicgIgorCWdpdCBzdm4gZmluZC1yZXYgcjEyID5hY3R1YWwgJiYKKwlncmVwICQoZ2l0IHJldi1wYXJzZSBIRUFEKSBhY3R1YWwKKyAgICAgICAgIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSByZWJhc2UnICIKKwlnaXQgc3ZuIHJlYmFzZQorCSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTEwL3N2bS5kdW1wIGIvdC90OTExMC9zdm0uZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzc5OWMyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTExMC9zdm0uZHVtcApAQCAtMCwwICsxLDUxMSBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogZGU1OTczYzYtNTQ1ZC00MWRhLWFkZWQtYzI2NWY5MDM5ZTc0CisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA2OjU0OjU5Ljc5MzEwNFoKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDIwMAorQ29udGVudC1sZW5ndGg6IDIwMAorCitLIDcKK3N2bjpsb2cKK1YgNDAKK1NWTTogaW5pdGlhbGl6aW5nIG1pcnJvciBmb3IgL21pcnJvci9hcnIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworc3ZtCitLIDExCitzdm06aGVhZHJldgorViAzOQorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5OjAKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNjo1NTowMC4xMjE2NDdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiAKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA0NAorQ29udGVudC1sZW5ndGg6IDQ0CisKK0sgMTAKK3N2bTptaXJyb3IKK1YgMTIKKy9taXJyb3IvYXJyCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IG1pcnJvci9hcnIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTYKK0NvbnRlbnQtbGVuZ3RoOiAxMTYKKworSyAxMAorc3ZtOnNvdXJjZQorViAyOQoraHR0cDovL21heW9uYWlzZS9zdm5yZXBvIS9iYXIKK0sgOAorc3ZtOnV1aWQKK1YgMzYKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OQorUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxODIKK0NvbnRlbnQtbGVuZ3RoOiAxODIKKworSyA3Citzdm46bG9nCitWIDE4CitpbXBvcnQgZm9yIGdpdC1zdm4KK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyAxMQorc3ZtOmhlYWRyZXYKK1YgMzkKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OToxCisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTA6NTIuMTA4ODQ3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogbWlycm9yL2FycgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDEwCitzdm06c291cmNlCitWIDI5CitodHRwOi8vbWF5b25haXNlL3N2bnJlcG8hL2JhcgorSyA4Citzdm06dXVpZAorViAzNgorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5CitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IG1pcnJvci9hcnIvenp6CitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiAzM2IwMmJjMTVjZTk1NTdkMmRkODQ4NGQ1OGY5NWFjNAorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorenp6CisKKworUmV2aXNpb24tbnVtYmVyOiAzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAyMzAKK0NvbnRlbnQtbGVuZ3RoOiAyMzAKKworSyA3Citzdm46bG9nCitWIDY2CituZXcgc3ltbGluayBpcyBhZGRlZCB0byBhIGZpbGUgdGhhdCB3YXMgYWxzbyBqdXN0IG1hZGUgZXhlY3V0YWJsZQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgMTEKK3N2bTpoZWFkcmV2CitWIDM5CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjAxLjY4Njg5MVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG1pcnJvci9hcnIvenp6CitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDM2CitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiAzM2IwMmJjMTVjZTk1NTdkMmRkODQ4NGQ1OGY5NWFjNAorQ29udGVudC1sZW5ndGg6IDQwCisKK0sgMTQKK3N2bjpleGVjdXRhYmxlCitWIDEKKyoKK1BST1BTLUVORAorenp6CisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxOTIKK0NvbnRlbnQtbGVuZ3RoOiAxOTIKKworSyA3Citzdm46bG9nCitWIDI4CisvYmFyL2Qgc2hvdWxkIGJlIGluIHRoZSBsb2cKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDExCitzdm06aGVhZHJldgorViAzOQorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5OjkKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowNy42ODY1NTJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJyL2QKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDBiZWU4OWIwN2EyNDhlMjdjODNmYzNkNTk1MTIxM2MxCitDb250ZW50LWxlbmd0aDogMTQKKworUFJPUFMtRU5ECithYmMKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDE4NQorQ29udGVudC1sZW5ndGg6IDE4NQorCitLIDcKK3N2bjpsb2cKK1YgMjAKK2FkZCBhIG5ldyBkaXJlY3RvcnkKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDExCitzdm06aGVhZHJldgorViA0MAorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5OjEwCisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDguNDA1OTUzWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogbWlycm9yL2Fyci9uZXdkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2Fyci9uZXdkaXIvZGlyCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiA5Y2Q1OTlhMzUyMzg5OGU2YTEyZTEzZWM3ODdkYTUwYQorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorbmV3CisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxOTYKK0NvbnRlbnQtbGVuZ3RoOiAxOTYKKworSyA3Citzdm46bG9nCitWIDMxCittb2RpZnkgYSBmaWxlIGluIG5ldyBkaXJlY3RvcnkKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDExCitzdm06aGVhZHJldgorViA0MAorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5OjExCisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDkuMTI2NjQ1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogbWlycm9yL2Fyci9uZXdkaXIvZGlyCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDgKK1RleHQtY29udGVudC1tZDU6IGE5NTBlMjAzMzIzNThlNTIzYTVlOWQ1NzFlNDdmYTY0CitDb250ZW50LWxlbmd0aDogOAorCituZXcKK2ZvbworCisKK1JldmlzaW9uLW51bWJlcjogNworUHJvcC1jb250ZW50LWxlbmd0aDogMTc5CitDb250ZW50LWxlbmd0aDogMTc5CisKK0sgNworc3ZuOmxvZworViAxNAordXBkYXRlIC9iYXIvZAorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgMTEKK3N2bTpoZWFkcmV2CitWIDQwCisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6MTIKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowOS44NDYyMjFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJyL2QKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogN2FiYjc4ZGU3ZjI3NTZjYThiNTExY2JjODc5ZmQ1ZTcKK0NvbnRlbnQtbGVuZ3RoOiA0CisKK2NiYQorCisKK1JldmlzaW9uLW51bWJlcjogOAorUHJvcC1jb250ZW50LWxlbmd0aDogMjAxCitDb250ZW50LWxlbmd0aDogMjAxCisKK0sgNworc3ZuOmxvZworViA0MQorU1ZNOiBpbml0aWFsaXppbmcgbWlycm9yIGZvciAvbWlycm9yL2FyZ2gKK0sgMTAKK3N2bjphdXRob3IKK1YgMworc3ZtCitLIDExCitzdm06aGVhZHJldgorViAzOQorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5OjAKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNjo1NjowMy43MDM2NzdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiAKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NworQ29udGVudC1sZW5ndGg6IDU3CisKK0sgMTAKK3N2bTptaXJyb3IKK1YgMjUKKy9taXJyb3IvYXJnaAorL21pcnJvci9hcnIKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJnaAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDEwCitzdm06c291cmNlCitWIDI5CitodHRwOi8vbWF5b25haXNlL3N2bnJlcG8hL2RpcgorSyA4Citzdm06dXVpZAorViAzNgorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5CitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDkKK1Byb3AtY29udGVudC1sZW5ndGg6IDE4MgorQ29udGVudC1sZW5ndGg6IDE4MgorCitLIDcKK3N2bjpsb2cKK1YgMTgKK2ltcG9ydCBmb3IgZ2l0LXN2bgorSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDExCitzdm06aGVhZHJldgorViAzOQorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5OjEKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMDo1Mi4xMDg4NDdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJnaAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDEwCitzdm06c291cmNlCitWIDI5CitodHRwOi8vbWF5b25haXNlL3N2bnJlcG8hL2RpcgorSyA4Citzdm06dXVpZAorViAzNgorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5CitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IG1pcnJvci9hcmdoL2EKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gvYS9iCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IG1pcnJvci9hcmdoL2EvYi9jCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IG1pcnJvci9hcmdoL2EvYi9jL2QKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gvYS9iL2MvZC9lCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IG1pcnJvci9hcmdoL2EvYi9jL2QvZS9maWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA5CitUZXh0LWNvbnRlbnQtbWQ1OiAzZmQ0NmZlNDZmY2RjZjA2MmM4MDJjYTYwZGM4MjZkNQorQ29udGVudC1sZW5ndGg6IDE5CisKK1BST1BTLUVORAorZGVlcCBkaXIKKworCitSZXZpc2lvbi1udW1iZXI6IDEwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxOTcKK0NvbnRlbnQtbGVuZ3RoOiAxOTcKKworSyA3Citzdm46bG9nCitWIDMzCit0cnkgYSBkZWVwIC0tcm1kaXIgd2l0aCBhIGNvbW1pdAorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgMTEKK3N2bTpoZWFkcmV2CitWIDM5CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6MgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjEwOjU0Ljg0NzAxNVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG1pcnJvci9hcmdoL2ZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDkKK05vZGUtY29weWZyb20tcGF0aDogbWlycm9yL2FyZ2gvYS9iL2MvZC9lL2ZpbGUKK1RleHQtY29udGVudC1sZW5ndGg6IDkKK1RleHQtY29udGVudC1tZDU6IDNmZDQ2ZmU0NmZjZGNmMDYyYzgwMmNhNjBkYzgyNmQ1CitDb250ZW50LWxlbmd0aDogOQorCitkZWVwIGRpcgorCisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gvYQorTm9kZS1hY3Rpb246IGRlbGV0ZQorCisKZGlmZiAtLWdpdCBhL3QvdDkxMTEtZ2l0LXN2bi11c2Utc3Zuc3luYy1wcm9wcy5zaCBiL3QvdDkxMTEtZ2l0LXN2bi11c2Utc3Zuc3luYy1wcm9wcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YzkzMDczCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTExMS1naXQtc3ZuLXVzZS1zdm5zeW5jLXByb3BzLnNoCkBAIC0wLDAgKzEsNTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gdXNlU3Zuc3luY1Byb3BzIHRlc3QnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2bnN5bmMgcmVwbycgJworCXN2bmFkbWluIGxvYWQgLXEgIiRyYXdzdm5yZXBvIiA8ICIkVEVTVF9ESVJFQ1RPUlkiL3Q5MTExL3N2bnN5bmMuZHVtcCAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBhcnIgLWkgYmFyICIkc3ZucmVwbyIvYmFyICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyZ2ggLWkgZGlyICIkc3ZucmVwbyIvZGlyICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyZ2ggLWkgZSAiJHN2bnJlcG8iL2Rpci9hL2IvYy9kL2UgJiYKKwlnaXQgY29uZmlnIHN2bi51c2VTdm5zeW5jUHJvcHMgdHJ1ZSAmJgorCWdpdCBzdm4gZmV0Y2ggLS1hbGwKKwknCisKK3V1aWQ9MTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5CisKK2Jhcl91cmw9aHR0cDovL21heW9uYWlzZS9zdm5yZXBvL2JhcgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1ldGFkYXRhIGZvciAvYmFyJyAiCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGJhcl91cmxAMTIgJHV1aWQkJyBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9iYXJ+MSA+YWN0dWFsICYmCisJZ3JlcCAnXmdpdC1zdm4taWQ6ICRiYXJfdXJsQDExICR1dWlkJCcgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyfjIgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkYmFyX3VybEAxMCAkdXVpZCQnIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn4zID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGJhcl91cmxAOSAkdXVpZCQnIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn40ID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGJhcl91cmxANiAkdXVpZCQnIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn41ID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGJhcl91cmxAMSAkdXVpZCQnIGFjdHVhbAorCSIKKworZV91cmw9aHR0cDovL21heW9uYWlzZS9zdm5yZXBvL2Rpci9hL2IvYy9kL2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXRhZGF0YSBmb3IgL2Rpci9hL2IvYy9kL2UnICIKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9lID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGVfdXJsQDEgJHV1aWQkJyBhY3R1YWwKKwkiCisKK2Rpcl91cmw9aHR0cDovL21heW9uYWlzZS9zdm5yZXBvL2RpcgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1ldGFkYXRhIGZvciAvZGlyJyAiCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvZGlyID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGRpcl91cmxAMiAkdXVpZCQnIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Rpcn4xID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGRpcl91cmxAMSAkdXVpZCQnIGFjdHVhbAorCSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTExL3N2bnN5bmMuZHVtcCBiL3QvdDkxMTEvc3Zuc3luYy5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OWZhOTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTExL3N2bnN5bmMuZHVtcApAQCAtMCwwICsxLDU2MCBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogYjRiZmUzNWUtZjI1Ni00MDk2LTg3NGMtMDhjNTYzOWVjYWQ3CisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogMjQwCitDb250ZW50LWxlbmd0aDogMjQwCisKK0sgMTgKK3N2bjpzeW5jLWZyb20tdXVpZAorViAzNgorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5CitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgMjQKK3N2bjpzeW5jLWxhc3QtbWVyZ2VkLXJldgorViAyCisxMgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMDo1Mi4wMTc1NTJaCitLIDE3Citzdm46c3luYy1mcm9tLXVybAorViAyNAoraHR0cDovL21heW9uYWlzZS9zdm5yZXBvCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjAKK0NvbnRlbnQtbGVuZ3RoOiAxMjAKKworSyA3Citzdm46bG9nCitWIDE4CitpbXBvcnQgZm9yIGdpdC1zdm4KK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMDo1Mi4xMDg4NDdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBiYXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYmFyL3p6egorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogMzNiMDJiYzE1Y2U5NTU3ZDJkZDg0ODRkNThmOTVhYzQKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK3p6egorCisKK05vZGUtcGF0aDogZGlyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGRpci9hCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGRpci9hL2IKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogZGlyL2EvYi9jCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGRpci9hL2IvYy9kCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGRpci9hL2IvYy9kL2UKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogZGlyL2EvYi9jL2QvZS9maWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA5CitUZXh0LWNvbnRlbnQtbWQ1OiAzZmQ0NmZlNDZmY2RjZjA2MmM4MDJjYTYwZGM4MjZkNQorQ29udGVudC1sZW5ndGg6IDE5CisKK1BST1BTLUVORAorZGVlcCBkaXIKKworCitOb2RlLXBhdGg6IGV4ZWMuc2gKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMzUKK1RleHQtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbWQ1OiAzZTJiMzFjNzIxODFiODcxNDlmZjk5NWU3MjAyYzBlMworQ29udGVudC1sZW5ndGg6IDQ1CisKK0sgMTQKK3N2bjpleGVjdXRhYmxlCitWIDAKKworUFJPUFMtRU5ECisjIS9iaW4vc2gKKworCitOb2RlLXBhdGg6IGZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogZDNiMDczODRkMTEzZWRlYzQ5ZWFhNjIzOGFkNWZmMDAKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK2ZvbworCisKK05vZGUtcGF0aDogZm9vLmxpbmsKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMzMKK1RleHQtY29udGVudC1sZW5ndGg6IDgKK1RleHQtY29udGVudC1tZDU6IDEwNDMxNDZlNDllZjAyY2FiMTJlZWY4NjVjYjM0ZmYzCitDb250ZW50LWxlbmd0aDogNDEKKworSyAxMQorc3ZuOnNwZWNpYWwKK1YgMQorKgorUFJPUFMtRU5ECitsaW5rIGZvbworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzNQorQ29udGVudC1sZW5ndGg6IDEzNQorCitLIDcKK3N2bjpsb2cKK1YgMzMKK3RyeSBhIGRlZXAgLS1ybWRpciB3aXRoIGEgY29tbWl0CisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMDo1NC44NDcwMTVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBkaXIvZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBkaXIvYS9iL2MvZC9lL2ZpbGUKK1RleHQtY29udGVudC1sZW5ndGg6IDkKK1RleHQtY29udGVudC1tZDU6IDNmZDQ2ZmU0NmZjZGNmMDYyYzgwMmNhNjBkYzgyNmQ1CitDb250ZW50LWxlbmd0aDogOQorCitkZWVwIGRpcgorCisKK05vZGUtcGF0aDogZGlyL2EKK05vZGUtYWN0aW9uOiBkZWxldGUKKworCitOb2RlLXBhdGg6IGZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogZGlyL2EvYi9jL2QvZS9maWxlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA5CitUZXh0LWNvbnRlbnQtbWQ1OiAzZmQ0NmZlNDZmY2RjZjA2MmM4MDJjYTYwZGM4MjZkNQorQ29udGVudC1sZW5ndGg6IDkKKworZGVlcCBkaXIKKworCitSZXZpc2lvbi1udW1iZXI6IDMKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzNgorQ29udGVudC1sZW5ndGg6IDEzNgorCitLIDcKK3N2bjpsb2cKK1YgMzQKK3JlbW92ZSBleGVjdXRhYmxlIGJpdCBmcm9tIGEgZmlsZQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTA6NTguMjMyNjkxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogZXhlYy5zaAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1tZDU6IDNlMmIzMWM3MjE4MWI4NzE0OWZmOTk1ZTcyMDJjMGUzCitDb250ZW50LWxlbmd0aDogMjAKKworUFJPUFMtRU5ECisjIS9iaW4vc2gKKworCitSZXZpc2lvbi1udW1iZXI6IDQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzMQorQ29udGVudC1sZW5ndGg6IDEzMQorCitLIDcKK3N2bjpsb2cKK1YgMjkKK2FkZCBleGVjdXRhYmxlIGJpdCBiYWNrIGZpbGUKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjEwOjU5LjY2NjU2MFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGV4ZWMuc2gKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMzYKK1RleHQtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbWQ1OiAzZTJiMzFjNzIxODFiODcxNDlmZjk5NWU3MjAyYzBlMworQ29udGVudC1sZW5ndGg6IDQ2CisKK0sgMTQKK3N2bjpleGVjdXRhYmxlCitWIDEKKyoKK1BST1BTLUVORAorIyEvYmluL3NoCisKKworUmV2aXNpb24tbnVtYmVyOiA1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNTQKK0NvbnRlbnQtbGVuZ3RoOiAxNTQKKworSyA3Citzdm46bG9nCitWIDUyCitleGVjdXRhYmxlIGZpbGUgYmVjb21lcyBhIHN5bWxpbmsgdG8gYmFyL3p6eiAoZmlsZSkKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjAwLjY3NjQ5NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGV4ZWMuc2gKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMzMKK1RleHQtY29udGVudC1sZW5ndGg6IDEyCitUZXh0LWNvbnRlbnQtbWQ1OiBmMTM4NjkzMzcxNjY1Y2MxMTc3NDI1MDg3NjFkNjg0ZAorQ29udGVudC1sZW5ndGg6IDQ1CisKK0sgMTEKK3N2bjpzcGVjaWFsCitWIDEKKyoKK1BST1BTLUVORAorbGluayBiYXIvenp6CisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTY4CitDb250ZW50LWxlbmd0aDogMTY4CisKK0sgNworc3ZuOmxvZworViA2NgorbmV3IHN5bWxpbmsgaXMgYWRkZWQgdG8gYSBmaWxlIHRoYXQgd2FzIGFsc28ganVzdCBtYWRlIGV4ZWN1dGFibGUKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjAxLjY4Njg5MVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJhci96enoKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMzYKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDMzYjAyYmMxNWNlOTU1N2QyZGQ4NDg0ZDU4Zjk1YWM0CitDb250ZW50LWxlbmd0aDogNDAKKworSyAxNAorc3ZuOmV4ZWN1dGFibGUKK1YgMQorKgorUFJPUFMtRU5ECit6enoKKworCitOb2RlLXBhdGg6IGV4ZWMtMi5zaAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogNQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBleGVjLnNoCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMgorVGV4dC1jb250ZW50LW1kNTogZjEzODY5MzM3MTY2NWNjMTE3NzQyNTA4NzYxZDY4NGQKK0NvbnRlbnQtbGVuZ3RoOiAxMgorCitsaW5rIGJhci96enoKKworUmV2aXNpb24tbnVtYmVyOiA3CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMzYKK0NvbnRlbnQtbGVuZ3RoOiAxMzYKKworSyA3Citzdm46bG9nCitWIDM0Cittb2RpZnkgYSBzeW1saW5rIHRvIGJlY29tZSBhIGZpbGUKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjAyLjY3NzAzNVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGV4ZWMtMi5zaAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogOQorVGV4dC1jb250ZW50LW1kNTogOGU5MmVmZjllOTExODg2Y2VkZTI3ZDQyMGY4OWM3MzUKK0NvbnRlbnQtbGVuZ3RoOiAxOQorCitQUk9QUy1FTkQKK2dpdCBoZWxwCisKKworUmV2aXNpb24tbnVtYmVyOiA4CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMDkKK0NvbnRlbnQtbGVuZ3RoOiAxMDkKKworSyA3Citzdm46bG9nCitWIDgKK8Opw6/iiI8KKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjAzLjY3Njg2MloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGV4ZWMtMi5zaAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxNworVGV4dC1jb250ZW50LW1kNTogNDk4ODE5NTQwNjNjZjI2Y2E0OGMyMTIzOTZhOTU3Y2EKK0NvbnRlbnQtbGVuZ3RoOiAxNworCitnaXQgaGVscAorIyBoZWxsbworCisKK1JldmlzaW9uLW51bWJlcjogOQorUHJvcC1jb250ZW50LWxlbmd0aDogMTMwCitDb250ZW50LWxlbmd0aDogMTMwCisKK0sgNworc3ZuOmxvZworViAyOAorL2Jhci9kIHNob3VsZCBiZSBpbiB0aGUgbG9nCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowNy42ODY1NTJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBiYXIvZAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogMGJlZTg5YjA3YTI0OGUyN2M4M2ZjM2Q1OTUxMjEzYzEKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK2FiYworCisKK1JldmlzaW9uLW51bWJlcjogMTAKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMgorQ29udGVudC1sZW5ndGg6IDEyMgorCitLIDcKK3N2bjpsb2cKK1YgMjAKK2FkZCBhIG5ldyBkaXJlY3RvcnkKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjA4LjQwNTk1M1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJhci9uZXdkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYmFyL25ld2Rpci9kaXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDljZDU5OWEzNTIzODk4ZTZhMTJlMTNlYzc4N2RhNTBhCitDb250ZW50LWxlbmd0aDogMTQKKworUFJPUFMtRU5ECituZXcKKworCitSZXZpc2lvbi1udW1iZXI6IDExCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMzMKK0NvbnRlbnQtbGVuZ3RoOiAxMzMKKworSyA3Citzdm46bG9nCitWIDMxCittb2RpZnkgYSBmaWxlIGluIG5ldyBkaXJlY3RvcnkKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjA5LjEyNjY0NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJhci9uZXdkaXIvZGlyCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDgKK1RleHQtY29udGVudC1tZDU6IGE5NTBlMjAzMzIzNThlNTIzYTVlOWQ1NzFlNDdmYTY0CitDb250ZW50LWxlbmd0aDogOAorCituZXcKK2ZvbworCisKK1JldmlzaW9uLW51bWJlcjogMTIKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDcKK3N2bjpsb2cKK1YgMTQKK3VwZGF0ZSAvYmFyL2QKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjA5Ljg0NjIyMVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJhci9kCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDdhYmI3OGRlN2YyNzU2Y2E4YjUxMWNiYzg3OWZkNWU3CitDb250ZW50LWxlbmd0aDogNAorCitjYmEKZGlmZiAtLWdpdCBhL3QvdDkxMTItZ2l0LXN2bi1tZDVsZXNzLWZpbGUuc2ggYi90L3Q5MTEyLWdpdC1zdm4tbWQ1bGVzcy1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4NjFjNzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTEyLWdpdC1zdm4tbWQ1bGVzcy1maWxlLnNoCkBAIC0wLDAgKzEsNDcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHRoYXQgZ2l0IGhhbmRsZXMgYW4gc3ZuIHJlcG9zaXRvcnkgd2l0aCBtaXNzaW5nIG1kNXN1bXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCisjIExvYWRpbmcgYSBub2RlIGZyb20gYSBzdm4gZHVtcGZpbGUgd2l0aG91dCBhIFRleHQtQ29udGVudC1MZW5ndGgKKyMgZmllbGQgY2F1c2VzIHN2biB0byBuZWdsZWN0IHRvIHN0b3JlIG9yIHJlcG9ydCBhbiBtZDVzdW0uICAoaXQgd2lsbAorIyBjYWxjdWxhdGUgb25lIGlmIHlvdSBoYWQgcHV0IFRleHQtQ29udGVudC1MZW5ndGg6IDApLiAgVGhpcyBzaG93ZWQKKyMgdXAgaW4gYSByZXBvc2l0b3J5IGNyZWF0ZWQgd2l0aCBjdnMyc3ZuLgorCitjYXQgPiBkdW1wZmlsZS5zdm4gPDxFT0YKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAxCisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogOTgKK0NvbnRlbnQtbGVuZ3RoOiA5OAorCitLIDcKK3N2bjpsb2cKK1YgMAorCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3Rlc3QKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDUtMDZUMTI6Mzc6MDEuMTUzMzM5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogbWQ1bGVzcy1maWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2biBkdW1wZmlsZScgJ3N2bmFkbWluIGxvYWQgIiRyYXdzdm5yZXBvIiA8IGR1bXBmaWxlLnN2bicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBnaXQgc3ZuJyAnZ2l0IHN2biBpbml0ICIkc3ZucmVwbyInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCByZXZpc2lvbnMgZnJvbSBzdm4nICdnaXQgc3ZuIGZldGNoJwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTEzLWdpdC1zdm4tZGNvbW1pdC1uZXctZmlsZS5zaCBiL3QvdDkxMTMtZ2l0LXN2bi1kY29tbWl0LW5ldy1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4NDc5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTEzLWdpdC1zdm4tZGNvbW1pdC1uZXctZmlsZS5zaApAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZworIworCisjIERvbid0IHJ1biB0aGlzIHRlc3QgYnkgZGVmYXVsdCB1bmxlc3MgdGhlIHVzZXIgcmVhbGx5IHdhbnRzIGl0CisjIEkgZG9uJ3QgbGlrZSB0aGUgaWRlYSBvZiB0YWtpbmcgYSBwb3J0IGFuZCBwb3NzaWJseSBsZWF2aW5nIGEKKyMgZGFlbW9uIHJ1bm5pbmcgb24gYSB1c2VycyBzeXN0ZW0gaWYgdGhlIHRlc3QgZmFpbHMuCisjIE5vdCBhbGwgZ2l0IHVzZXJzIHdpbGwgbmVlZCB0byBpbnRlcmFjdCB3aXRoIFNWTi4KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBkY29tbWl0IG5ldyBmaWxlcyBvdmVyIHN2bjovLyB0ZXN0JworCisuIC4vbGliLWdpdC1zdm4uc2gKKworcmVxdWlyZV9zdm5zZXJ2ZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCB0cmFja2luZyBhbiBlbXB0eSByZXBvJyAnCisJc3ZuX2NtZCBta2RpciAtbSAiZW1wdHkgZGlyIiAiJHN2bnJlcG8iL2VtcHR5LWRpciAmJgorCWVjaG8gIltnZW5lcmFsXSIgPiAiJHJhd3N2bnJlcG8iL2NvbmYvc3Zuc2VydmUuY29uZiAmJgorCWVjaG8gYW5vbi1hY2Nlc3MgPSB3cml0ZSA+PiAiJHJhd3N2bnJlcG8iL2NvbmYvc3Zuc2VydmUuY29uZiAmJgorCXN0YXJ0X3N2bnNlcnZlICYmCisJZ2l0IHN2biBpbml0IHN2bjovLzEyNy4wLjAuMTokU1ZOU0VSVkVfUE9SVCAmJgorCWdpdCBzdm4gZmV0Y2gKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBmaWxlcyBpbiBuZXcgZGlyZWN0b3J5IHdpdGggZGNvbW1pdCcgIgorCW1rZGlyIGdpdC1uZXctZGlyICYmCisJZWNobyBoZWxsbyA+IGdpdC1uZXctZGlyL3dvcmxkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBnaXQtbmV3LWRpci93b3JsZCAmJgorCWdpdCBjb21taXQgLW0gaGVsbG8gJiYKKwlzdGFydF9zdm5zZXJ2ZSAmJgorCWdpdCBzdm4gZGNvbW1pdAorCSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTE0LWdpdC1zdm4tZGNvbW1pdC1tZXJnZS5zaCBiL3QvdDkxMTQtZ2l0LXN2bi1kY29tbWl0LW1lcmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMyMzE3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTE0LWdpdC1zdm4tZGNvbW1pdC1tZXJnZS5zaApAQCAtMCwwICsxLDk1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZworIyBCYXNlZCBvbiBhIHNjcmlwdCBieSBKb2FraW0gVGplcm5sdW5kIDxqb2FraW0udGplcm5sdW5kQHRyYW5zbW9kZS5zZT4KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBkY29tbWl0IGhhbmRsZXMgbWVyZ2VzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworYmlnX3RleHRfYmxvY2sgKCkgeworY2F0IDw8IEVPRgorIworIyAoQykgQ29weXJpZ2h0IDIwMDAgLSAyMDA1CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCVNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKK0VPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm4gcmVwb3NpdG9yeScgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBteXN2bndvcmsgJiYKKwlta2RpciAtcCBteXN2bndvcmsvdHJ1bmsgJiYKKwkoCisJCWNkIG15c3Zud29yayAmJgorCQliaWdfdGV4dF9ibG9jayA+PnRydW5rL1JFQURNRSAmJgorCQlzdm5fY21kIGFkZCB0cnVuayAmJgorCQlzdm5fY21kIGNpIC1tICJmaXJzdCBjb21taXQiIHRydW5rCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZ2l0IG1pcnJvciBhbmQgbWVyZ2UnICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAtdCB0YWdzIC1UIHRydW5rIC1iIGJyYW5jaGVzICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCBjaGVja291dCAtYiBzdm4gcmVtb3Rlcy9vcmlnaW4vdHJ1bmsgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWVyZ2UgJiYKKwllY2hvIG5ldyBmaWxlID4gbmV3X2ZpbGUgJiYKKwlnaXQgYWRkIG5ld19maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiTmV3IGZpbGUiICYmCisJZWNobyBoZWxsbyA+PiBSRUFETUUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJoZWxsbyIgJiYKKwllY2hvIGFkZCBzb21lIHN0dWZmID4+IG5ld19maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiYWRkIHNvbWUgc3R1ZmYiICYmCisJZ2l0IGNoZWNrb3V0IHN2biAmJgorCW12IC1mIFJFQURNRSB0bXAgJiYKKwllY2hvIGZyaWVuZCA+IFJFQURNRSAmJgorCWNhdCB0bXAgPj4gUkVBRE1FICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiZnJpZW5kIiAmJgorCWdpdCBtZXJnZSBtZXJnZQorCScKKwordGVzdF9kZWJ1ZyAnZ2l0ayAtLWFsbCAmIHNsZWVwIDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBwcmUtbWVyZ2UgYW5jZXN0cnknICIKKwl0ZXN0IHhcJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvc3ZuXjIpID0gXAorCSAgICAgeFwkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tZXJnZSkgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvaGVhZHMvc3ZuXiA+YWN0dWFsICYmCisJZ3JlcCAnXmZyaWVuZCQnIGFjdHVhbAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBkY29tbWl0IG1lcmdlcycgIgorCWdpdCBzdm4gZGNvbW1pdAorCSIKKwordGVzdF9kZWJ1ZyAnZ2l0ayAtLWFsbCAmIHNsZWVwIDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBwb3N0LW1lcmdlIGFuY2VzdHJ5JyAiCisJdGVzdCB4XCQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3N2bikgPSBcCisJICAgICB4XCQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rKSAmJgorCXRlc3QgeFwkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9zdm5eMikgPSBcCisJICAgICB4XCQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21lcmdlKSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9oZWFkcy9zdm5eID5hY3R1YWwgJiYKKwlncmVwICdeZnJpZW5kJCcgYWN0dWFsCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWVyZ2UgY29tbWl0IG1lc3NhZ2UnICIKKwlnaXQgcmV2LWxpc3QgLS1wcmV0dHk9cmF3IC0xIHJlZnMvaGVhZHMvc3ZuID5hY3R1YWwgJiYKKwlncmVwIFwiICAgIE1lcmdlIGJyYW5jaCAnbWVyZ2UnIGludG8gc3ZuXCIgYWN0dWFsCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTUtZ2l0LXN2bi1kY29tbWl0LWZ1bmt5LXJlbmFtZXMuc2ggYi90L3Q5MTE1LWdpdC1zdm4tZGNvbW1pdC1mdW5reS1yZW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjliNDRhNDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTE1LWdpdC1zdm4tZGNvbW1pdC1mdW5reS1yZW5hbWVzLnNoCkBAIC0wLDAgKzEsMTIzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZworCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZGNvbW1pdCBjYW4gY29tbWl0IHJlbmFtZXMgb2YgZmlsZXMgd2l0aCB1Z2x5IG5hbWVzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCByZXBvc2l0b3J5IHdpdGggc3RyYW5nZSBuYW1lcycgJworCXN2bmFkbWluIGxvYWQgLXEgIiRyYXdzdm5yZXBvIiA8IiRURVNUX0RJUkVDVE9SWSIvdDkxMTUvZnVua3ktbmFtZXMuZHVtcAorJworCittYXliZV9zdGFydF9odHRwZCBndGsrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgYW5kIGZldGNoIHJlcG9zaXRvcnknICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGdpdC1zdm4KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBmaWxlIGluIGV4aXN0aW5nIHVnbHkgYW5kIGVtcHR5IGRpcicgJworCW1rZGlyIC1wICIje2JhZF9kaXJlY3RvcnlfbmFtZX0iICYmCisJZWNobyBoaSA+ICIje2JhZF9kaXJlY3RvcnlfbmFtZX0vIGZvbyIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkICIje2JhZF9kaXJlY3RvcnlfbmFtZX0vIGZvbyIgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgZmlsZSBpbiB1Z2x5IHBhcmVudCIgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSB1Z2x5IGZpbGUnICcKKwlnaXQgbXYgIiN7YmFkX2RpcmVjdG9yeV9uYW1lfS8gZm9vIiAiZmlsZSBuYW1lIHdpdGggZmVjZXMiICYmCisJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIHVnbHkgZmlsZSIgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBwcmV0dHkgZmlsZScgJworCWVjaG8gOnggPiBwcmV0dHkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHByZXR0eSAmJgorCWdpdCBjb21taXQgLW0gInByZXR0eSA6eCIgJiYKKwlnaXQgc3ZuIGRjb21taXQgJiYKKwlta2RpciAtcCByZWd1bGFyX2Rpcl9uYW1lICYmCisJZ2l0IG12IHByZXR0eSByZWd1bGFyX2Rpcl9uYW1lL3ByZXR0eSAmJgorCWdpdCBjb21taXQgLW0gIm1vdmVkIHByZXR0eSBmaWxlIiAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHByZXR0eSBmaWxlIGludG8gdWdseSBvbmUnICcKKwlnaXQgbXYgcmVndWxhcl9kaXJfbmFtZS9wcmV0dHkgIiN7YmFkX2RpcmVjdG9yeV9uYW1lfS8gYm9vYm9vIiAmJgorCWdpdCBjb21taXQgLW0gYm9vYm9vICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYSBmaWxlIHdpdGggcGx1cyBzaWducycgJworCWVjaG8gLi4gPiArXysgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkICtfKyAmJgorCWdpdCBjb21taXQgLW0gcGx1cyAmJgorCW1rZGlyIGd0aysgJiYKKwlnaXQgbXYgK18rIGd0aysvXytfICYmCisJZ2l0IGNvbW1pdCAtbSBwbHVzX2RpciAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdGhlIHJlcG9zaXRvcnkgdG8gdGVzdCByZWJhc2UnICcKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgdGVzdC1yZWJhc2UgJiYKKwkoCisJCWNkIHRlc3QtcmViYXNlICYmCisJCWVjaG8gdGVzdC1yZWJhc2UgPnRlc3QtcmViYXNlICYmCisJCWdpdCBhZGQgdGVzdC1yZWJhc2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSB0ZXN0LXJlYmFzZQorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgYSBjb21taXQgdG8gdGVzdCByZWJhc2UnICcKKwkJZWNobyB0ZXN0LXJlYmFzZS1tYWluID4gdGVzdC1yZWJhc2UtbWFpbiAmJgorCQlnaXQgYWRkIHRlc3QtcmViYXNlLW1haW4gJiYKKwkJZ2l0IGNvbW1pdCAtbSB0ZXN0LXJlYmFzZS1tYWluICYmCisJCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biByZWJhc2Ugd29ya3MgaW5zaWRlIGEgZnJlc2gtY2xvbmVkIHJlcG9zaXRvcnknICcKKwkoCisJCWNkIHRlc3QtcmViYXNlICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCXRlc3QgLWUgdGVzdC1yZWJhc2UtbWFpbiAmJgorCQl0ZXN0IC1lIHRlc3QtcmViYXNlCisJKScKKworIyBXaXRob3V0IHRoaXMsIExDX0FMTD1DIGFzIHNldCBpbiB0ZXN0LWxpYi5zaCwgYW5kIEN5Z3dpbiBjb252ZXJ0cworIyBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBmaWxlbmFtZXMgdW5leHBlY3RlZGx5LCBhbmQgY2F1c2VzIGVycm9ycy4KKyMgaHR0cHM6Ly9jeWd3aW4uY29tL2N5Z3dpbi11Zy1uZXQvdXNpbmctc3BlY2lhbG5hbWVzLmh0bWwjcGF0aG5hbWVzLXNwZWNpYWxjaGFycworIyA+IFNvbWUgY2hhcmFjdGVycyBhcmUgZGlzYWxsb3dlZCBpbiBmaWxlbmFtZXMgb24gV2luZG93cyBmaWxlc3lzdGVtcy4gLi4uCisjIC4uLgorIyA+IC4uLiBBbGwgb2YgdGhlIGFib3ZlIGNoYXJhY3RlcnMsIGV4Y2VwdCBmb3IgdGhlIGJhY2tzbGFzaCwgYXJlIGNvbnZlcnRlZAorIyA+IHRvIHNwZWNpYWwgVU5JQ09ERSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSAweGYwMDAgdG8gMHhmMGZmICh0aGUKKyMgPiAiUHJpdmF0ZSB1c2UgYXJlYSIpIHdoZW4gY3JlYXRpbmcgb3IgYWNjZXNzaW5nIGZpbGVzLgorcHJlcGFyZV9hX3V0ZjhfbG9jYWxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFVURjgsIU1JTkdXLCFVVEY4X05GRF9UT19ORkMgJ3N2bi5wYXRobmFtZWVuY29kaW5nPWNwOTMyIG5ldyBmaWxlIG9uIGRjb21taXQnICcKKwlMQ19BTEw9JGFfdXRmOF9sb2NhbGUgJiYKKwlleHBvcnQgTENfQUxMICYmCisJbmVxPSQocHJpbnRmICJcMjAxXDIwMiIpICYmCisJZ2l0IGNvbmZpZyBzdm4ucGF0aG5hbWVlbmNvZGluZyBjcDkzMiAmJgorCWVjaG8gbmVxID4iJG5lcSIgJiYKKwlnaXQgYWRkICIkbmVxIiAmJgorCWdpdCBjb21taXQgLW0gIm5lcSIgJiYKKwlnaXQgc3ZuIGRjb21taXQKKycKKworIyBTZWUgdGhlIGNvbW1lbnQgb24gdGhlIGFib3ZlIHRlc3QgZm9yIHNldHRpbmcgb2YgTENfQUxMLgordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1csIVVURjhfTkZEX1RPX05GQyAnc3ZuLnBhdGhuYW1lZW5jb2Rpbmc9Y3A5MzIgcmVuYW1lIG9uIGRjb21taXQnICcKKwlMQ19BTEw9JGFfdXRmOF9sb2NhbGUgJiYKKwlleHBvcnQgTENfQUxMICYmCisJaW5mPSQocHJpbnRmICJcMjAxXDIwNyIpICYmCisJZ2l0IGNvbmZpZyBzdm4ucGF0aG5hbWVlbmNvZGluZyBjcDkzMiAmJgorCWVjaG8gaW5mID4iJGluZiIgJiYKKwlnaXQgYWRkICIkaW5mIiAmJgorCWdpdCBjb21taXQgLW0gImluZiIgJiYKKwlnaXQgc3ZuIGRjb21taXQgJiYKKwlnaXQgbXYgIiRpbmYiIGluZiAmJgorCWdpdCBjb21taXQgLW0gImluZiByZW5hbWUiICYmCisJZ2l0IHN2biBkY29tbWl0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExNS9mdW5reS1uYW1lcy5kdW1wIGIvdC90OTExNS9mdW5reS1uYW1lcy5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNDIyZjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTE1L2Z1bmt5LW5hbWVzLmR1bXAKQEAgLTAsMCArMSwxMDMgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IDgxOWM0NGZlLTJiY2MtNDA2Ni04OGU0LTk4NWUyYmMwYjQxOAorCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wNy0xMlQwNzo1NDoyNi4wNjI5MTRaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNTIKK0NvbnRlbnQtbGVuZ3RoOiAxNTIKKworSyA3Citzdm46bG9nCitWIDQ0Cit3aGF0IHdpbGwgdGhvc2Ugd2Fja3kgcGVvcGxlIHRoaW5rIG9mIG5leHQ/CisKK0sgMTAKK3N2bjphdXRob3IKK1YgMTIKK25vcm1hbHBlcnNvbgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wNy0xMlQwODowMDowNS4wMTE1NzNaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiAgbGVhZGluZyBzcGFjZQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiAgbGVhZGluZyBzcGFjZSBmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA1CitUZXh0LWNvbnRlbnQtbWQ1OiBlNGZhMjBjNjc1NDJjZGMyMTI3MWUwOGQzMjkzOTdhYgorQ29udGVudC1sZW5ndGg6IDE1CisKK1BST1BTLUVORAordWdseQorCisKK05vZGUtcGF0aDogI3tiYWRfZGlyZWN0b3J5X25hbWV9CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6ICN7Y29vbF9uYW1lfQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMTgKK1RleHQtY29udGVudC1tZDU6IDg3ZGFjNDBjYTMzN2RmYTNkY2M4OTExMzg4YzNkZGRhCitDb250ZW50LWxlbmd0aDogMjgKKworUFJPUFMtRU5ECitzdHJhbmdlIG5hbWUgaGVyZQorCisKK05vZGUtcGF0aDogZGlyIG5hbWUgd2l0aCBzcGFjZXMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogZmlsZSBuYW1lIHdpdGggc3BhY2VzCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA3CitUZXh0LWNvbnRlbnQtbWQ1OiBjMWYxMGNmZDY0MDYxODQ4NGEyYTQ3NWMxMTQxMGZkMworQ29udGVudC1sZW5ndGg6IDE3CisKK1BST1BTLUVORAorc3BhY2VzCisKKworTm9kZS1wYXRoOiByZWd1bGFyX2Rpcl9uYW1lCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKZGlmZiAtLWdpdCBhL3QvdDkxMTYtZ2l0LXN2bi1sb2cuc2ggYi90L3Q5MTE2LWdpdC1zdm4tbG9nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhOWYxZWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTE2LWdpdC1zdm4tbG9nLnNoCkBAIC0wLDAgKzEsMTQ5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGxvZyB0ZXN0cycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5IGFuZCBpbXBvcnQnICcKKwlta2RpciBpbXBvcnQgJiYKKwkoCisJCWNkIGltcG9ydCAmJgorCQlmb3IgaSBpbiB0cnVuayBicmFuY2hlcy9hIGJyYW5jaGVzL2IgdGFncy8wLjEgdGFncy8wLjIgdGFncy8wLjMKKwkJZG8KKwkJCW1rZGlyIC1wICRpICYmCisJCQllY2hvIGhlbGxvID4+JGkvUkVBRE1FIHx8CisJCQlleGl0IDEKKwkJZG9uZSAmJgorCQlzdm5fY21kIGltcG9ydCAtbSB0ZXN0IC4gIiRzdm5yZXBvIgorCSkgJiYKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAtVCB0cnVuayAtYiBicmFuY2hlcyAtdCB0YWdzICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZWNobyBieWUgPj4gUkVBRE1FICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBieWUgJiYKKwlnaXQgc3ZuIGRjb21taXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9hICYmCisJZWNobyB3aHkgPj4gRkVFRE1FICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBGRUVETUUgJiYKKwlnaXQgY29tbWl0IC1tIGZlZWRtZSAmJgorCWdpdCBzdm4gZGNvbW1pdCAmJgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZWNobyBheWUgPj4gUkVBRE1FICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBheWUgJiYKKwlnaXQgc3ZuIGRjb21taXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9iICYmCisJZWNobyBzcHkgPj4gUkVBRE1FICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBzcHkgJiYKKwllY2hvIHRyeSA+PiBSRUFETUUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHRyeSAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuIGxvZycgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL2EgJiYKKwlnaXQgc3ZuIGxvZyAtcjIgb3JpZ2luL3RydW5rID5vdXQgJiYKKwlncmVwIF5yMiBvdXQgJiYKKwlnaXQgc3ZuIGxvZyAtcjQgb3JpZ2luL3RydW5rID5vdXQgJiYKKwlncmVwIF5yNCBvdXQgJiYKKwlnaXQgc3ZuIGxvZyAtcjMgPm91dCAmJgorCWdyZXAgXnIzIG91dAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuIGxvZyBhZ2FpbnN0IGEgZnJvbSB0cnVuaycgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLXIzIG9yaWdpbi9hID5vdXQgJiYKKwlncmVwIF5yMyBvdXQKKwkiCisKK3ByaW50ZiAncjEgXG5yMiBcbnI0IFxuJyA+IGV4cGVjdGVkLXJhbmdlLXIxLXIyLXI0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlJyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciAxOjQgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yMS1yMi1yNCAtCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGFzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIC0tc2hvdy1jb21taXQnICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC0tc2hvdy1jb21taXQgLXIgMTo0IHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjEtcjItcjQgLQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCAtLXNob3ctY29tbWl0IChzaGExKScgIgorCWdpdCBzdm4gZmluZC1yZXYgcjEgPmV4cGVjdGVkLXJhbmdlLXIxLXIyLXI0LXNoYTEgJiYKKwlnaXQgc3ZuIGZpbmQtcmV2IHIyID4+ZXhwZWN0ZWQtcmFuZ2UtcjEtcjItcjQtc2hhMSAmJgorCWdpdCBzdm4gZmluZC1yZXYgcjQgPj5leHBlY3RlZC1yYW5nZS1yMS1yMi1yNC1zaGExICYmCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtLXNob3ctY29tbWl0IC1yIDE6NCB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMiA+b3V0ICYmCisJZ2l0IHJldi1wYXJzZSBcJChjYXQgb3V0KSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjEtcjItcjQtc2hhMSBhY3R1YWwKKwkiCisKK3ByaW50ZiAncjQgXG5yMiBcbnIxIFxuJyA+IGV4cGVjdGVkLXJhbmdlLXI0LXIyLXIxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGVzY2VuZGluZyByZXZpc2lvbiByYW5nZScgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgNDoxIHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjQtcjItcjEgLQorCSIKKworcHJpbnRmICdyMSBcbnIyIFxuJyA+IGV4cGVjdGVkLXJhbmdlLXIxLXIyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggdW5yZWFjaGFibGUgcmV2aXNpb24nICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yIDE6MyB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMSB8IHRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXIxLXIyIC0KKwkiCisKK3ByaW50ZiAncjIgXG5yMSBcbicgPiBleHBlY3RlZC1yYW5nZS1yMi1yMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRlc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSByZXZpc2lvbicgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgMzoxIHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjItcjEgLQorCSIKKworcHJpbnRmICdyMiBcbicgPiBleHBlY3RlZC1yYW5nZS1yMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGFzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIHVucmVhY2hhYmxlIHVwcGVyIGJvdW5kYXJ5IHJldmlzaW9uIGFuZCAxIGNvbW1pdCcgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgMjozIHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjIgLQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkZXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggdW5yZWFjaGFibGUgdXBwZXIgYm91bmRhcnkgcmV2aXNpb24gYW5kIDEgY29tbWl0JyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciAzOjIgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yMiAtCisJIgorCitwcmludGYgJ3I0IFxuJyA+IGV4cGVjdGVkLXJhbmdlLXI0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggdW5yZWFjaGFibGUgbG93ZXIgYm91bmRhcnkgcmV2aXNpb24gYW5kIDEgY29tbWl0JyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciAzOjQgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yNCAtCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRlc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSBsb3dlciBib3VuZGFyeSByZXZpc2lvbiBhbmQgMSBjb21taXQnICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yIDQ6MyB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMSB8IHRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXI0IC0KKwkiCisKK3ByaW50ZiAtLSAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4nID4gZXhwZWN0ZWQtc2VwYXJhdG9yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggdW5yZWFjaGFibGUgYm91bmRhcnkgcmV2aXNpb25zIGFuZCBubyBjb21taXRzJyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciA1OjYgfCB0ZXN0X2NtcCBleHBlY3RlZC1zZXBhcmF0b3IgLQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkZXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggdW5yZWFjaGFibGUgYm91bmRhcnkgcmV2aXNpb25zIGFuZCBubyBjb21taXRzJyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciA2OjUgfCB0ZXN0X2NtcCBleHBlY3RlZC1zZXBhcmF0b3IgLQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSBib3VuZGFyeSByZXZpc2lvbnMgYW5kIDEgY29tbWl0JyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciAzOjUgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yNCAtCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRlc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSBib3VuZGFyeSByZXZpc2lvbnMgYW5kIDEgY29tbWl0JyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciA1OjMgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yNCAtCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTctZ2l0LXN2bi1pbml0LWNsb25lLnNoIGIvdC90OTExNy1naXQtc3ZuLWluaXQtY2xvbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDQ0ZjY1ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTctZ2l0LXN2bi1pbml0LWNsb25lLnNoCkBAIC0wLDAgKzEsMTI4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGluaXQvY2xvbmUgdGVzdHMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCisjIHNldHVwLCBydW4gaW5zaWRlIHRtcCBzbyB3ZSBkb24ndCBoYXZlIGFueSBjb25mbGljdHMgd2l0aCAkc3ZucmVwbworc2V0IC1lCitybSAtciAuZ2l0Citta2RpciB0bXAKK2NkIHRtcAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCisJbWtkaXIgcHJvamVjdCBwcm9qZWN0L3RydW5rIHByb2plY3QvYnJhbmNoZXMgcHJvamVjdC90YWdzICYmCisJZWNobyBmb28gPiBwcm9qZWN0L3RydW5rL2ZvbyAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8iL3Byb2plY3QgJiYKKwlybSAtcmYgcHJvamVjdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgY2xvbmUnICcKKwl0ZXN0ICEgLWQgdHJ1bmsgJiYKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIvcHJvamVjdC90cnVuayAmJgorCXRlc3QgLWQgdHJ1bmsvLmdpdC9zdm4gJiYKKwl0ZXN0IC1lIHRydW5rL2ZvbyAmJgorCXJtIC1yZiB0cnVuaworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gdGFyZ2V0IGRpcmVjdG9yeScgJworCXRlc3QgISAtZCB0YXJnZXQgJiYKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIvcHJvamVjdC90cnVuayB0YXJnZXQgJiYKKwl0ZXN0IC1kIHRhcmdldC8uZ2l0L3N2biAmJgorCXRlc3QgLWUgdGFyZ2V0L2ZvbyAmJgorCXJtIC1yZiB0YXJnZXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggLS1zdGRsYXlvdXQnICcKKwl0ZXN0ICEgLWQgcHJvamVjdCAmJgorCWdpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIi9wcm9qZWN0ICYmCisJdGVzdCAtZCBwcm9qZWN0Ly5naXQvc3ZuICYmCisJdGVzdCAtZSBwcm9qZWN0L2ZvbyAmJgorCXJtIC1yZiBwcm9qZWN0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0byB0YXJnZXQgZGlyZWN0b3J5IHdpdGggLS1zdGRsYXlvdXQnICcKKwl0ZXN0ICEgLWQgdGFyZ2V0ICYmCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8iL3Byb2plY3QgdGFyZ2V0ICYmCisJdGVzdCAtZCB0YXJnZXQvLmdpdC9zdm4gJiYKKwl0ZXN0IC1lIHRhcmdldC9mb28gJiYKKwlybSAtcmYgdGFyZ2V0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHdpdGhvdXQgLXMvLVQvLWIvLXQgZG9lcyBub3Qgd2FybicgJworCXRlc3QgISAtZCB0cnVuayAmJgorCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iL3Byb2plY3QvdHJ1bmsgdHJ1bmsgMj53YXJuaW5nICYmCisJISBncmVwIC1xIHByZWZpeCB3YXJuaW5nICYmCisJcm0gLXJmIHRydW5rICYmCisJcm0gLWYgd2FybmluZworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aG91dCAtcy8tVC8tYi8tdCBkb2VzIG5vdCB3YXJuJyAnCisJdGVzdCAhIC1kIHRydW5rICYmCisJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iL3Byb2plY3QvdHJ1bmsgMj53YXJuaW5nICYmCisJISBncmVwIC1xIHByZWZpeCB3YXJuaW5nICYmCisJcm0gLXJmIHRydW5rICYmCisJcm0gLWYgd2FybmluZworCScKKwordGVzdF9zdm5fY29uZmlndXJlZF9wcmVmaXggKCkgeworCXByZWZpeD0kMSAmJgorCWNhdCA+ZXhwZWN0IDw8RU9GICYmCitwcm9qZWN0L3RydW5rOnJlZnMvcmVtb3Rlcy8ke3ByZWZpeH10cnVuaworcHJvamVjdC9icmFuY2hlcy8qOnJlZnMvcmVtb3Rlcy8ke3ByZWZpeH0qCitwcm9qZWN0L3RhZ3MvKjpyZWZzL3JlbW90ZXMvJHtwcmVmaXh9dGFncy8qCitFT0YKKwl0ZXN0ICEgLWYgYWN0dWFsICYmCisJZ2l0IC0tZ2l0LWRpcj1wcm9qZWN0Ly5naXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLmZldGNoID4+YWN0dWFsICYmCisJZ2l0IC0tZ2l0LWRpcj1wcm9qZWN0Ly5naXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzID4+YWN0dWFsICYmCisJZ2l0IC0tZ2l0LWRpcj1wcm9qZWN0Ly5naXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLnRhZ3MgPj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJcm0gLWYgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHdpdGggLXMvLVQvLWIvLXQgYXNzdW1lcyAtLXByZWZpeD1vcmlnaW4vJyAnCisJdGVzdCAhIC1kIHByb2plY3QgJiYKKwlnaXQgc3ZuIGluaXQgLXMgIiRzdm5yZXBvIi9wcm9qZWN0IHByb2plY3QgMj53YXJuaW5nICYmCisJISBncmVwIC1xIHByZWZpeCB3YXJuaW5nICYmCisJdGVzdF9zdm5fY29uZmlndXJlZF9wcmVmaXggIm9yaWdpbi8iICYmCisJcm0gLXJmIHByb2plY3QgJiYKKwlybSAtZiB3YXJuaW5nCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIC1zLy1ULy1iLy10IGFzc3VtZXMgLS1wcmVmaXg9b3JpZ2luLycgJworCXRlc3QgISAtZCBwcm9qZWN0ICYmCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8iL3Byb2plY3QgMj53YXJuaW5nICYmCisJISBncmVwIC1xIHByZWZpeCB3YXJuaW5nICYmCisJdGVzdF9zdm5fY29uZmlndXJlZF9wcmVmaXggIm9yaWdpbi8iICYmCisJcm0gLXJmIHByb2plY3QgJiYKKwlybSAtZiB3YXJuaW5nCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHdpdGggLXMvLVQvLWIvLXQgYW5kIC0tcHJlZml4ICIiIHN0aWxsIHdvcmtzJyAnCisJdGVzdCAhIC1kIHByb2plY3QgJiYKKwlnaXQgc3ZuIGluaXQgLXMgIiRzdm5yZXBvIi9wcm9qZWN0IHByb2plY3QgLS1wcmVmaXggIiIgMj53YXJuaW5nICYmCisJISBncmVwIC1xIHByZWZpeCB3YXJuaW5nICYmCisJdGVzdF9zdm5fY29uZmlndXJlZF9wcmVmaXggIiIgJiYKKwlybSAtcmYgcHJvamVjdCAmJgorCXJtIC1mIHdhcm5pbmcKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggLXMvLVQvLWIvLXQgYW5kIC0tcHJlZml4ICIiIHN0aWxsIHdvcmtzJyAnCisJdGVzdCAhIC1kIHByb2plY3QgJiYKKwlnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIvcHJvamVjdCAtLXByZWZpeCAiIiAyPndhcm5pbmcgJiYKKwkhIGdyZXAgLXEgcHJlZml4IHdhcm5pbmcgJiYKKwl0ZXN0X3N2bl9jb25maWd1cmVkX3ByZWZpeCAiIiAmJgorCXJtIC1yZiBwcm9qZWN0ICYmCisJcm0gLWYgd2FybmluZworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCB3aXRoIC1UIGFzIGEgZnVsbCB1cmwgd29ya3MnICcKKwl0ZXN0ICEgLWQgcHJvamVjdCAmJgorCWdpdCBzdm4gaW5pdCAtVCAiJHN2bnJlcG8iL3Byb2plY3QvdHJ1bmsgcHJvamVjdCAmJgorCXJtIC1yZiBwcm9qZWN0CisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2ggYi90L3Q5MTE4LWdpdC1zdm4tZnVua3ktYnJhbmNoLW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmExNTlmZjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTE4LWdpdC1zdm4tZnVua3ktYnJhbmNoLW5hbWVzLnNoCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZnVua3kgYnJhbmNoIG5hbWVzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKKyMgQWJvLVVlYmVybmFobWUgKEJ1ZyAjOTk0KQorc2NhcnlfdXJpPSdBYm8tVWViZXJuYWhtZSUyMCUyOEJ1ZyUyMCUyMzk5NCUyOScKK3NjYXJ5X3JlZj0nQWJvLVVlYmVybmFobWUlMjAoQnVnJTIwIzk5NCknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKKwlta2RpciBwcm9qZWN0IHByb2plY3QvdHJ1bmsgcHJvamVjdC9icmFuY2hlcyBwcm9qZWN0L3RhZ3MgJiYKKwllY2hvIGZvbyA+IHByb2plY3QvdHJ1bmsvZm9vICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wciBqZWN0IiAmJgorCXJtIC1yZiBwcm9qZWN0ICYmCisJc3ZuX2NtZCBjcCAtbSAiZnVuIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCSAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9mdW4gcGx1Z2luIiAmJgorCXN2bl9jbWQgY3AgLW0gIm1vcmUgZnVuISIgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvZnVuIHBsdWdpbiIgXAorCSAgICAgICAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9tb3JlIGZ1biBwbHVnaW4hIiAmJgorCXN2bl9jbWQgY3AgLW0gInNjYXJ5IiAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9mdW4gcGx1Z2luIiBcCisJICAgICAgICAgICAgICAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy8kc2NhcnlfdXJpIiAmJgorCXN2bl9jbWQgY3AgLW0gImxlYWRpbmcgZG90IiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCQkJIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvLmxlYWRpbmdfZG90IiAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXCisJdGhlbgorCQlzdm5fY21kIGNwIC1tICJ0cmFpbGluZyBkb3QiICIkc3ZucmVwby9wciBqZWN0L3RydW5rIiBcCisJCQkiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy90cmFpbGluZ19kb3QuIgorCWZpICYmCisJc3ZuX2NtZCBjcCAtbSAidHJhaWxpbmcgLmxvY2siICIkc3ZucmVwby9wciBqZWN0L3RydW5rIiBcCisJCQkiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy90cmFpbGluZ19kb3Rsb2NrLmxvY2siICYmCisJc3ZuX2NtZCBjcCAtbSAicmVmbG9nIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCQkJIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvbm90LWFAezB9cmVmbG9nQCIgJiYKKwltYXliZV9zdGFydF9odHRwZAorCScKKworIyBTVk4gMS43IHdpbGwgdHJ1bmNhdGUgIm5vdC1hJTQwezBdIiB0byBqdXN0ICJub3QtYSIuCisjIExvb2sgYXQgd2hhdCBTVk4gd291bmQgdXAgbmFtaW5nIHRoZSBicmFuY2ggYW5kIHVzZSB0aGF0LgorIyBCZSBzdXJlIHRvIGVzY2FwZSB0aGUgQCBpZiBpdCBzaG93cyB1cC4KK25vbl9yZWZsb2c9JChzdm5fY21kIGxzICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzIiB8IGdyZXAgbm90LWEgfCBzZWQgJ3MvXC8vLycgfCBzZWQgJ3MvQC8lNDAvJykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB3aXRoIGZ1bmt5IGJyYW5jaCBuYW1lcycgJworCWdpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvL3ByIGplY3QiIHByb2plY3QgJiYKKwkoCisJCWNkIHByb2plY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSAicmVmcy9yZW1vdGVzL29yaWdpbi9mdW4lMjBwbHVnaW4iICYmCisJCWdpdCByZXYtcGFyc2UgInJlZnMvcmVtb3Rlcy9vcmlnaW4vbW9yZSUyMGZ1biUyMHBsdWdpbiEiICYmCisJCWdpdCByZXYtcGFyc2UgInJlZnMvcmVtb3Rlcy9vcmlnaW4vJHNjYXJ5X3JlZiIgJiYKKwkJZ2l0IHJldi1wYXJzZSAicmVmcy9yZW1vdGVzL29yaWdpbi8lMkVsZWFkaW5nX2RvdCIgJiYKKwkJaWYgdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1cKKwkJdGhlbgorCQkJZ2l0IHJldi1wYXJzZSAicmVmcy9yZW1vdGVzL29yaWdpbi90cmFpbGluZ19kb3QlMkUiCisJCWZpICYmCisJCWdpdCByZXYtcGFyc2UgInJlZnMvcmVtb3Rlcy9vcmlnaW4vdHJhaWxpbmdfZG90bG9jayUyRWxvY2siICYmCisJCWdpdCByZXYtcGFyc2UgInJlZnMvcmVtb3Rlcy9vcmlnaW4vJG5vbl9yZWZsb2ciCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkY29tbWl0IHRvIGZ1bmt5IGJyYW5jaCcgIgorCSgKKwkJY2QgcHJvamVjdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICdyZWZzL3JlbW90ZXMvb3JpZ2luL21vcmUlMjBmdW4lMjBwbHVnaW4hJyAmJgorCQllY2hvIGhlbGxvID4+IGZvbyAmJgorCQlnaXQgY29tbWl0IC1tICdoZWxsbycgLS0gZm9vICYmCisJCWdpdCBzdm4gZGNvbW1pdAorCSkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGNvbW1pdCB0byBzY2FyeSBicmFuY2gnICcKKwkoCisJCWNkIHByb2plY3QgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAicmVmcy9yZW1vdGVzL29yaWdpbi8kc2NhcnlfcmVmIiAmJgorCQllY2hvIHVybHMgYXJlIHNjYXJ5ID4+IGZvbyAmJgorCQlnaXQgY29tbWl0IC1tICJlZXAiIC0tIGZvbyAmJgorCQlnaXQgc3ZuIGRjb21taXQKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRjb21taXQgdG8gdHJhaWxpbmdfZG90bG9jayBicmFuY2gnICcKKwkoCisJCWNkIHByb2plY3QgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAicmVmcy9yZW1vdGVzL29yaWdpbi90cmFpbGluZ19kb3Rsb2NrJTJFbG9jayIgJiYKKwkJZWNobyB3aG8gbmFtZXMgYnJhbmNoZXMgbGlrZSB0aGlzIGFueXdheT8gPj4gZm9vICYmCisJCWdpdCBjb21taXQgLW0gImJhciIgLS0gZm9vICYmCisJCWdpdCBzdm4gZGNvbW1pdAorCSkKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExOS1naXQtc3ZuLWluZm8uc2ggYi90L3Q5MTE5LWdpdC1zdm4taW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MjAxYzNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTExOS1naXQtc3ZuLWluZm8uc2gKQEAgLTAsMCArMSwzOTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRGF2aWQgRC4gS2lsemVyCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gaW5mbycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKKyMgVGVzdGVkIHdpdGg6IHN2biwgdmVyc2lvbiAxLjQuNCAocjI1MTg4KQorIyBUZXN0ZWQgd2l0aDogc3ZuLCB2ZXJzaW9uIDEuNi5bMTIzNDU2ODldCit2PSQoc3ZuX2NtZCAtLXZlcnNpb24gfCBzZWQgLW4gLWUgJ3MvXnN2biwgdmVyc2lvbiBcKDFcLlswLTldKlwuWzAtOV0qXCkuKiQvXDEvcCcpCitjYXNlICR2IGluCisxLls0NTZdLiopCisJOzsKKyopCisJc2tpcF9hbGw9InNraXBwaW5nIHN2bi1pbmZvIHRlc3QgKFNWTiB2ZXJzaW9uOiAkdiBub3Qgc3VwcG9ydGVkKSIKKwl0ZXN0X2RvbmUKKwk7OworZXNhYworCisjIE9uIHRoZSAiVGV4dCBMYXN0IFVwZGF0ZWQiIGxpbmUsICJnaXQgc3ZuIGluZm8iIGRvZXMgbm90IHJldHVybiB0aGUKKyMgc2FtZSB2YWx1ZSBhcyAic3ZuIGluZm8iIChpLmUuIHRoZSBjb21taXQgdGltZXN0YW1wIHRoYXQgdG91Y2hlZCB0aGUKKyMgcGF0aCBtb3N0IHJlY2VudGx5KTsgZG8gbm90IGV4cGVjdCB0aGF0IGZpZWxkIHRvIG1hdGNoLgordGVzdF9jbXBfaW5mbyAoKSB7CisJc2VkIC1lICcvXlRleHQgTGFzdCBVcGRhdGVkOi9kJyAiJDEiID50bXAuZXhwZWN0ICYmCisJc2VkIC1lICcvXlRleHQgTGFzdCBVcGRhdGVkOi9kJyAiJDIiID50bXAuYWN0dWFsICYmCisJdGVzdF9jbXAgdG1wLmV4cGVjdCB0bXAuYWN0dWFsICYmCisJcm0gLWYgdG1wLmV4cGVjdCB0bXAuYWN0dWFsCit9CisKK3F1b3RlZF9zdm5yZXBvPSIkKGVjaG8gJHN2bnJlcG8gfCBzZWQgJ3MvIC8lMjAvJykiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnkgYW5kIGltcG9ydCcgJworCW1rZGlyIGluZm8gJiYKKwkoCisJCWNkIGluZm8gJiYKKwkJZWNobyBGSVJTVCA+QSAmJgorCQllY2hvIG9uZSA+ZmlsZSAmJgorCQlsbiAtcyBmaWxlIHN5bWxpbmstZmlsZSAmJgorCQlta2RpciBkaXJlY3RvcnkgJiYKKwkJdG91Y2ggZGlyZWN0b3J5Ly5wbGFjZWhvbGRlciAmJgorCQlsbiAtcyBkaXJlY3Rvcnkgc3ltbGluay1kaXJlY3RvcnkgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIgorCSkgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgc3Zud2MgJiYKKwkoCisJCWNkIHN2bndjICYmCisJCWVjaG8gZm9vID5mb28gJiYKKwkJc3ZuX2NtZCBhZGQgZm9vICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjaGFuZ2Ugb3V0c2lkZSBkaXJlY3RvcnkiICYmCisJCXN2bl9jbWQgdXBkYXRlCisJKSAmJgorCW1rZGlyIGdpdHdjICYmCisJKAorCQljZCBnaXR3YyAmJgorCQlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgorCQlnaXQgc3ZuIGZldGNoCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbycgIgorCShjZCBzdm53YyAmJiBzdm4gaW5mbykgPiBleHBlY3RlZC5pbmZvICYmCisJKGNkIGdpdHdjICYmIGdpdCBzdm4gaW5mbykgPiBhY3R1YWwuaW5mbyAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mbyBhY3R1YWwuaW5mbworCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCcgJworCXRlc3QgIiQoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIC0tdXJsKSIgPSAiJHF1b3RlZF9zdm5yZXBvIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAuJyAiCisJKGNkIHN2bndjICYmIHN2biBpbmZvIC4pID4gZXhwZWN0ZWQuaW5mby1kb3QgJiYKKwkoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIC4pID4gYWN0dWFsLmluZm8tZG90ICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWRvdCBhY3R1YWwuaW5mby1kb3QKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gJChwd2QpJyAnCisJKGNkIHN2bndjICYmIHN2biBpbmZvICIkKHB3ZCkiKSA+ZXhwZWN0ZWQuaW5mby1wd2QgJiYKKwkoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvICIkKHB3ZCkiKSA+YWN0dWFsLmluZm8tcHdkICYmCisJZ3JlcCAtdiBeUGF0aDogPGV4cGVjdGVkLmluZm8tcHdkID5leHBlY3RlZC5pbmZvLW5wICYmCisJZ3JlcCAtdiBeUGF0aDogPGFjdHVhbC5pbmZvLXB3ZCA+YWN0dWFsLmluZm8tbnAgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tbnAgYWN0dWFsLmluZm8tbnAgJiYKKwl0ZXN0ICIkKHNlZCAtbmUgXCIvXlBhdGg6LyBzIS9zdm53YyEhXCIgPGV4cGVjdGVkLmluZm8tcHdkKSIgPSBcCisJICAgICAiJChzZWQgLW5lIFwiL15QYXRoOi8gcyEvZ2l0d2MhIVwiIDxhY3R1YWwuaW5mby1wd2QpIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAkKHB3ZCkvLi4vX19fd2MnICcKKwkoY2Qgc3Zud2MgJiYgc3ZuIGluZm8gIiQocHdkKS8uLi9zdm53YyIpID5leHBlY3RlZC5pbmZvLXB3ZCAmJgorCShjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gIiQocHdkKS8uLi9naXR3YyIpID5hY3R1YWwuaW5mby1wd2QgJiYKKwlncmVwIC12IF5QYXRoOiA8ZXhwZWN0ZWQuaW5mby1wd2QgPmV4cGVjdGVkLmluZm8tbnAgJiYKKwlncmVwIC12IF5QYXRoOiA8YWN0dWFsLmluZm8tcHdkID5hY3R1YWwuaW5mby1ucCAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1ucCBhY3R1YWwuaW5mby1ucCAmJgorCXRlc3QgIiQoc2VkIC1uZSBcIi9eUGF0aDovIHMhL3N2bndjISFcIiA8ZXhwZWN0ZWQuaW5mby1wd2QpIiA9IFwKKwkgICAgICIkKHNlZCAtbmUgXCIvXlBhdGg6LyBzIS9naXR3YyEhXCIgPGFjdHVhbC5pbmZvLXB3ZCkiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvICQocHdkKS8uLi9fX193Yy8vZmlsZScgJworCShjZCBzdm53YyAmJiBzdm4gaW5mbyAiJChwd2QpLy4uL3N2bndjLy9maWxlIikgPmV4cGVjdGVkLmluZm8tcHdkICYmCisJKGNkIGdpdHdjICYmIGdpdCBzdm4gaW5mbyAiJChwd2QpLy4uL2dpdHdjLy9maWxlIikgPmFjdHVhbC5pbmZvLXB3ZCAmJgorCWdyZXAgLXYgXlBhdGg6IDxleHBlY3RlZC5pbmZvLXB3ZCA+ZXhwZWN0ZWQuaW5mby1ucCAmJgorCWdyZXAgLXYgXlBhdGg6IDxhY3R1YWwuaW5mby1wd2QgPmFjdHVhbC5pbmZvLW5wICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLW5wIGFjdHVhbC5pbmZvLW5wICYmCisJdGVzdCAiJChzZWQgLW5lIFwiL15QYXRoOi8gcyEvc3Zud2MhIVwiIDxleHBlY3RlZC5pbmZvLXB3ZCkiID0gXAorCSAgICAgIiQoc2VkIC1uZSBcIi9eUGF0aDovIHMhL2dpdHdjISFcIiA8YWN0dWFsLmluZm8tcHdkKSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgLicgJworCXRlc3QgIiQoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIC0tdXJsIC4pIiA9ICIkcXVvdGVkX3N2bnJlcG8iCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIGZpbGUnICIKKwkoY2Qgc3Zud2MgJiYgc3ZuIGluZm8gZmlsZSkgPiBleHBlY3RlZC5pbmZvLWZpbGUgJiYKKwkoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIGZpbGUpID4gYWN0dWFsLmluZm8tZmlsZSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1maWxlIGFjdHVhbC5pbmZvLWZpbGUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgZmlsZScgJworCXRlc3QgIiQoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIC0tdXJsIGZpbGUpIiA9ICIkcXVvdGVkX3N2bnJlcG8vZmlsZSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gZGlyZWN0b3J5JyAiCisJKGNkIHN2bndjICYmIHN2biBpbmZvIGRpcmVjdG9yeSkgPiBleHBlY3RlZC5pbmZvLWRpcmVjdG9yeSAmJgorCShjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gZGlyZWN0b3J5KSA+IGFjdHVhbC5pbmZvLWRpcmVjdG9yeSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1kaXJlY3RvcnkgYWN0dWFsLmluZm8tZGlyZWN0b3J5CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIGluc2lkZSBkaXJlY3RvcnknICIKKwkoY2Qgc3Zud2MvZGlyZWN0b3J5ICYmIHN2biBpbmZvKSA+IGV4cGVjdGVkLmluZm8taW5zaWRlLWRpcmVjdG9yeSAmJgorCShjZCBnaXR3Yy9kaXJlY3RvcnkgJiYgZ2l0IHN2biBpbmZvKSA+IGFjdHVhbC5pbmZvLWluc2lkZS1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8taW5zaWRlLWRpcmVjdG9yeSBhY3R1YWwuaW5mby1pbnNpZGUtZGlyZWN0b3J5CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIGRpcmVjdG9yeScgJworCXRlc3QgIiQoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIC0tdXJsIGRpcmVjdG9yeSkiID0gIiRxdW90ZWRfc3ZucmVwby9kaXJlY3RvcnkiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIHN5bWxpbmstZmlsZScgIgorCShjZCBzdm53YyAmJiBzdm4gaW5mbyBzeW1saW5rLWZpbGUpID4gZXhwZWN0ZWQuaW5mby1zeW1saW5rLWZpbGUgJiYKKwkoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIHN5bWxpbmstZmlsZSkgPiBhY3R1YWwuaW5mby1zeW1saW5rLWZpbGUgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tc3ltbGluay1maWxlIGFjdHVhbC5pbmZvLXN5bWxpbmstZmlsZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCBzeW1saW5rLWZpbGUnICcKKwl0ZXN0ICIkKGNkIGdpdHdjICYmIGdpdCBzdm4gaW5mbyAtLXVybCBzeW1saW5rLWZpbGUpIiBcCisJICAgICA9ICIkcXVvdGVkX3N2bnJlcG8vc3ltbGluay1maWxlIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBzeW1saW5rLWRpcmVjdG9yeScgIgorCShjZCBzdm53YyAmJiBzdm4gaW5mbyBzeW1saW5rLWRpcmVjdG9yeSkgXAorCQk+IGV4cGVjdGVkLmluZm8tc3ltbGluay1kaXJlY3RvcnkgJiYKKwkoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIHN5bWxpbmstZGlyZWN0b3J5KSBcCisJCT4gYWN0dWFsLmluZm8tc3ltbGluay1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tc3ltbGluay1kaXJlY3RvcnkgYWN0dWFsLmluZm8tc3ltbGluay1kaXJlY3RvcnkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgc3ltbGluay1kaXJlY3RvcnknICcKKwl0ZXN0ICIkKGNkIGdpdHdjICYmIGdpdCBzdm4gaW5mbyAtLXVybCBzeW1saW5rLWRpcmVjdG9yeSkiIFwKKwkgICAgID0gIiRxdW90ZWRfc3ZucmVwby9zeW1saW5rLWRpcmVjdG9yeSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gYWRkZWQtZmlsZScgIgorCWVjaG8gdHdvID4gZ2l0d2MvYWRkZWQtZmlsZSAmJgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJZ2l0IGFkZCBhZGRlZC1maWxlCisJKSAmJgorCWNwIGdpdHdjL2FkZGVkLWZpbGUgc3Zud2MvYWRkZWQtZmlsZSAmJgorCSgKKwkJY2Qgc3Zud2MgJiYKKwkJc3ZuX2NtZCBhZGQgYWRkZWQtZmlsZSA+IC9kZXYvbnVsbAorCSkgJiYKKwkoY2Qgc3Zud2MgJiYgc3ZuIGluZm8gYWRkZWQtZmlsZSkgPiBleHBlY3RlZC5pbmZvLWFkZGVkLWZpbGUgJiYKKwkoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIGFkZGVkLWZpbGUpID4gYWN0dWFsLmluZm8tYWRkZWQtZmlsZSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1hZGRlZC1maWxlIGFjdHVhbC5pbmZvLWFkZGVkLWZpbGUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgYWRkZWQtZmlsZScgJworCXRlc3QgIiQoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIC0tdXJsIGFkZGVkLWZpbGUpIiBcCisJICAgICA9ICIkcXVvdGVkX3N2bnJlcG8vYWRkZWQtZmlsZSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gYWRkZWQtZGlyZWN0b3J5JyAiCisJbWtkaXIgZ2l0d2MvYWRkZWQtZGlyZWN0b3J5IHN2bndjL2FkZGVkLWRpcmVjdG9yeSAmJgorCXRvdWNoIGdpdHdjL2FkZGVkLWRpcmVjdG9yeS8ucGxhY2Vob2xkZXIgJiYKKwkoCisJCWNkIHN2bndjICYmCisJCXN2bl9jbWQgYWRkIGFkZGVkLWRpcmVjdG9yeSA+IC9kZXYvbnVsbAorCSkgJiYKKwkoCisJCWNkIGdpdHdjICYmCisJCWdpdCBhZGQgYWRkZWQtZGlyZWN0b3J5CisJKSAmJgorCShjZCBzdm53YyAmJiBzdm4gaW5mbyBhZGRlZC1kaXJlY3RvcnkpIFwKKwkJPiBleHBlY3RlZC5pbmZvLWFkZGVkLWRpcmVjdG9yeSAmJgorCShjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gYWRkZWQtZGlyZWN0b3J5KSBcCisJCT4gYWN0dWFsLmluZm8tYWRkZWQtZGlyZWN0b3J5ICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWFkZGVkLWRpcmVjdG9yeSBhY3R1YWwuaW5mby1hZGRlZC1kaXJlY3RvcnkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgYWRkZWQtZGlyZWN0b3J5JyAnCisJdGVzdCAiJChjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gLS11cmwgYWRkZWQtZGlyZWN0b3J5KSIgXAorCSAgICAgPSAiJHF1b3RlZF9zdm5yZXBvL2FkZGVkLWRpcmVjdG9yeSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gYWRkZWQtc3ltbGluay1maWxlJyAiCisJKAorCQljZCBnaXR3YyAmJgorCQlsbiAtcyBhZGRlZC1maWxlIGFkZGVkLXN5bWxpbmstZmlsZSAmJgorCQlnaXQgYWRkIGFkZGVkLXN5bWxpbmstZmlsZQorCSkgJiYKKwkoCisJCWNkIHN2bndjICYmCisJCWxuIC1zIGFkZGVkLWZpbGUgYWRkZWQtc3ltbGluay1maWxlICYmCisJCXN2bl9jbWQgYWRkIGFkZGVkLXN5bWxpbmstZmlsZSA+IC9kZXYvbnVsbAorCSkgJiYKKwkoY2Qgc3Zud2MgJiYgc3ZuIGluZm8gYWRkZWQtc3ltbGluay1maWxlKSBcCisJCT4gZXhwZWN0ZWQuaW5mby1hZGRlZC1zeW1saW5rLWZpbGUgJiYKKwkoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIGFkZGVkLXN5bWxpbmstZmlsZSkgXAorCQk+IGFjdHVhbC5pbmZvLWFkZGVkLXN5bWxpbmstZmlsZSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1hZGRlZC1zeW1saW5rLWZpbGUgXAorCQlhY3R1YWwuaW5mby1hZGRlZC1zeW1saW5rLWZpbGUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgYWRkZWQtc3ltbGluay1maWxlJyAnCisJdGVzdCAiJChjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gLS11cmwgYWRkZWQtc3ltbGluay1maWxlKSIgXAorCSAgICAgPSAiJHF1b3RlZF9zdm5yZXBvL2FkZGVkLXN5bWxpbmstZmlsZSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gYWRkZWQtc3ltbGluay1kaXJlY3RvcnknICIKKwkoCisJCWNkIGdpdHdjICYmCisJCWxuIC1zIGFkZGVkLWRpcmVjdG9yeSBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSAmJgorCQlnaXQgYWRkIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5CisJKSAmJgorCSgKKwkJY2Qgc3Zud2MgJiYKKwkJbG4gLXMgYWRkZWQtZGlyZWN0b3J5IGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5ICYmCisJCXN2bl9jbWQgYWRkIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5ID4gL2Rldi9udWxsCisJKSAmJgorCShjZCBzdm53YyAmJiBzdm4gaW5mbyBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSkgXAorCQk+IGV4cGVjdGVkLmluZm8tYWRkZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKKwkoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5KSBcCisJCT4gYWN0dWFsLmluZm8tYWRkZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tYWRkZWQtc3ltbGluay1kaXJlY3RvcnkgXAorCQlhY3R1YWwuaW5mby1hZGRlZC1zeW1saW5rLWRpcmVjdG9yeQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeScgJworCXRlc3QgIiQoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIC0tdXJsIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5KSIgXAorCSAgICAgPSAiJHF1b3RlZF9zdm5yZXBvL2FkZGVkLXN5bWxpbmstZGlyZWN0b3J5IgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBkZWxldGVkLWZpbGUnICIKKwkoCisJCWNkIGdpdHdjICYmCisJCWdpdCBybSAtZiBmaWxlID4gL2Rldi9udWxsCisJKSAmJgorCSgKKwkJY2Qgc3Zud2MgJiYKKwkJc3ZuX2NtZCBybSAtLWZvcmNlIGZpbGUgPiAvZGV2L251bGwKKwkpICYmCisJKGNkIHN2bndjICYmIHN2biBpbmZvIGZpbGUpID5leHBlY3RlZC5pbmZvLWRlbGV0ZWQtZmlsZSAmJgorCShjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gZmlsZSkgPmFjdHVhbC5pbmZvLWRlbGV0ZWQtZmlsZSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1kZWxldGVkLWZpbGUgYWN0dWFsLmluZm8tZGVsZXRlZC1maWxlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIGZpbGUgKGRlbGV0ZWQpJyAnCisJdGVzdCAiJChjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gLS11cmwgZmlsZSkiIFwKKwkgICAgID0gIiRxdW90ZWRfc3ZucmVwby9maWxlIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBkZWxldGVkLWRpcmVjdG9yeScgIgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJZ2l0IHJtIC1yIC1mIGRpcmVjdG9yeSA+IC9kZXYvbnVsbAorCSkgJiYKKwkoCisJCWNkIHN2bndjICYmCisJCXN2bl9jbWQgcm0gLS1mb3JjZSBkaXJlY3RvcnkgPiAvZGV2L251bGwKKwkpICYmCisJKGNkIHN2bndjICYmIHN2biBpbmZvIGRpcmVjdG9yeSkgPmV4cGVjdGVkLmluZm8tZGVsZXRlZC1kaXJlY3RvcnkgJiYKKwkoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIGRpcmVjdG9yeSkgPmFjdHVhbC5pbmZvLWRlbGV0ZWQtZGlyZWN0b3J5ICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWRlbGV0ZWQtZGlyZWN0b3J5IGFjdHVhbC5pbmZvLWRlbGV0ZWQtZGlyZWN0b3J5CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIGRpcmVjdG9yeSAoZGVsZXRlZCknICcKKwl0ZXN0ICIkKGNkIGdpdHdjICYmIGdpdCBzdm4gaW5mbyAtLXVybCBkaXJlY3RvcnkpIiBcCisJICAgICA9ICIkcXVvdGVkX3N2bnJlcG8vZGlyZWN0b3J5IgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBkZWxldGVkLXN5bWxpbmstZmlsZScgIgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJZ2l0IHJtIC1mIHN5bWxpbmstZmlsZSA+IC9kZXYvbnVsbAorCSkgJiYKKwkoCisJCWNkIHN2bndjICYmCisJCXN2bl9jbWQgcm0gLS1mb3JjZSBzeW1saW5rLWZpbGUgPiAvZGV2L251bGwKKwkpICYmCisJKGNkIHN2bndjICYmIHN2biBpbmZvIHN5bWxpbmstZmlsZSkgPmV4cGVjdGVkLmluZm8tZGVsZXRlZC1zeW1saW5rLWZpbGUgJiYKKwkoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIHN5bWxpbmstZmlsZSkgPmFjdHVhbC5pbmZvLWRlbGV0ZWQtc3ltbGluay1maWxlICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWRlbGV0ZWQtc3ltbGluay1maWxlIGFjdHVhbC5pbmZvLWRlbGV0ZWQtc3ltbGluay1maWxlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIHN5bWxpbmstZmlsZSAoZGVsZXRlZCknICcKKwl0ZXN0ICIkKGNkIGdpdHdjICYmIGdpdCBzdm4gaW5mbyAtLXVybCBzeW1saW5rLWZpbGUpIiBcCisJICAgICA9ICIkcXVvdGVkX3N2bnJlcG8vc3ltbGluay1maWxlIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBkZWxldGVkLXN5bWxpbmstZGlyZWN0b3J5JyAiCisJKAorCQljZCBnaXR3YyAmJgorCQlnaXQgcm0gLWYgc3ltbGluay1kaXJlY3RvcnkgPiAvZGV2L251bGwKKwkpICYmCisJKAorCQljZCBzdm53YyAmJgorCQlzdm5fY21kIHJtIC0tZm9yY2Ugc3ltbGluay1kaXJlY3RvcnkgPiAvZGV2L251bGwKKwkpICYmCisJKGNkIHN2bndjICYmIHN2biBpbmZvIHN5bWxpbmstZGlyZWN0b3J5KSA+ZXhwZWN0ZWQuaW5mby1kZWxldGVkLXN5bWxpbmstZGlyZWN0b3J5ICYmCisJKGNkIGdpdHdjICYmIGdpdCBzdm4gaW5mbyBzeW1saW5rLWRpcmVjdG9yeSkgPmFjdHVhbC5pbmZvLWRlbGV0ZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tZGVsZXRlZC1zeW1saW5rLWRpcmVjdG9yeSBhY3R1YWwuaW5mby1kZWxldGVkLXN5bWxpbmstZGlyZWN0b3J5CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIHN5bWxpbmstZGlyZWN0b3J5IChkZWxldGVkKScgJworCXRlc3QgIiQoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIC0tdXJsIHN5bWxpbmstZGlyZWN0b3J5KSIgXAorCSAgICAgPSAiJHF1b3RlZF9zdm5yZXBvL3N5bWxpbmstZGlyZWN0b3J5IgorCScKKworIyBOT1RFOiBnaXQgZG9lcyBub3QgaGF2ZSB0aGUgY29uY2VwdCBvZiByZXBsYWNlZCBvYmplY3RzLAorIyBzbyB3ZSBjYW4ndCB0ZXN0IGZvciBmaWxlcyBpbiB0aGF0IHN0YXRlLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIHVua25vd24tZmlsZScgIgorCWVjaG8gdHdvID4gZ2l0d2MvdW5rbm93bi1maWxlICYmCisJKGNkIGdpdHdjICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gaW5mbyB1bmtub3duLWZpbGUpIFwKKwkJIDI+IGFjdHVhbC5pbmZvLXVua25vd24tZmlsZSAmJgorCWdyZXAgdW5rbm93bi1maWxlIGFjdHVhbC5pbmZvLXVua25vd24tZmlsZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCB1bmtub3duLWZpbGUnICcKKwllY2hvIHR3byA+IGdpdHdjL3Vua25vd24tZmlsZSAmJgorCShjZCBnaXR3YyAmJiB0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGluZm8gLS11cmwgdW5rbm93bi1maWxlKSBcCisJCSAyPiBhY3R1YWwuaW5mby11cmwtdW5rbm93bi1maWxlICYmCisJZ3JlcCB1bmtub3duLWZpbGUgYWN0dWFsLmluZm8tdXJsLXVua25vd24tZmlsZQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyB1bmtub3duLWRpcmVjdG9yeScgIgorCW1rZGlyIGdpdHdjL3Vua25vd24tZGlyZWN0b3J5IHN2bndjL3Vua25vd24tZGlyZWN0b3J5ICYmCisJKGNkIGdpdHdjICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gaW5mbyB1bmtub3duLWRpcmVjdG9yeSkgXAorCQkgMj4gYWN0dWFsLmluZm8tdW5rbm93bi1kaXJlY3RvcnkgJiYKKwlncmVwIHVua25vd24tZGlyZWN0b3J5IGFjdHVhbC5pbmZvLXVua25vd24tZGlyZWN0b3J5CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIHVua25vd24tZGlyZWN0b3J5JyAnCisJKGNkIGdpdHdjICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gaW5mbyAtLXVybCB1bmtub3duLWRpcmVjdG9yeSkgXAorCQkgMj4gYWN0dWFsLmluZm8tdXJsLXVua25vd24tZGlyZWN0b3J5ICYmCisJZ3JlcCB1bmtub3duLWRpcmVjdG9yeSBhY3R1YWwuaW5mby11cmwtdW5rbm93bi1kaXJlY3RvcnkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gdW5rbm93bi1zeW1saW5rLWZpbGUnICIKKwkoCisJCWNkIGdpdHdjICYmCisJCWxuIC1zIHVua25vd24tZmlsZSB1bmtub3duLXN5bWxpbmstZmlsZQorCSkgJiYKKwkoY2QgZ2l0d2MgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbmZvIHVua25vd24tc3ltbGluay1maWxlKSBcCisJCSAyPiBhY3R1YWwuaW5mby11bmtub3duLXN5bWxpbmstZmlsZSAmJgorCWdyZXAgdW5rbm93bi1zeW1saW5rLWZpbGUgYWN0dWFsLmluZm8tdW5rbm93bi1zeW1saW5rLWZpbGUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgdW5rbm93bi1zeW1saW5rLWZpbGUnICcKKwkoY2QgZ2l0d2MgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbmZvIC0tdXJsIHVua25vd24tc3ltbGluay1maWxlKSBcCisJCSAyPiBhY3R1YWwuaW5mby11cmwtdW5rbm93bi1zeW1saW5rLWZpbGUgJiYKKwlncmVwIHVua25vd24tc3ltbGluay1maWxlIGFjdHVhbC5pbmZvLXVybC11bmtub3duLXN5bWxpbmstZmlsZQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyB1bmtub3duLXN5bWxpbmstZGlyZWN0b3J5JyAiCisJKAorCQljZCBnaXR3YyAmJgorCQlsbiAtcyB1bmtub3duLWRpcmVjdG9yeSB1bmtub3duLXN5bWxpbmstZGlyZWN0b3J5CisJKSAmJgorCShjZCBnaXR3YyAmJiB0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGluZm8gdW5rbm93bi1zeW1saW5rLWRpcmVjdG9yeSkgXAorCQkgMj4gYWN0dWFsLmluZm8tdW5rbm93bi1zeW1saW5rLWRpcmVjdG9yeSAmJgorCWdyZXAgdW5rbm93bi1zeW1saW5rLWRpcmVjdG9yeSBhY3R1YWwuaW5mby11bmtub3duLXN5bWxpbmstZGlyZWN0b3J5CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIHVua25vd24tc3ltbGluay1kaXJlY3RvcnknICcKKwkoY2QgZ2l0d2MgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbmZvIC0tdXJsIHVua25vd24tc3ltbGluay1kaXJlY3RvcnkpIFwKKwkJIDI+IGFjdHVhbC5pbmZvLXVybC11bmtub3duLXN5bWxpbmstZGlyZWN0b3J5ICYmCisJZ3JlcCB1bmtub3duLXN5bWxpbmstZGlyZWN0b3J5IGFjdHVhbC5pbmZvLXVybC11bmtub3duLXN5bWxpbmstZGlyZWN0b3J5CisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaCBiL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MGI3MTRkCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyMC1naXQtc3ZuLWNsb25lLXdpdGgtcGVyY2VudC1lc2NhcGVzLnNoCkBAIC0wLDAgKzEsNzcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggS2V2aW4gQmFsbGFyZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGNsb25lIHdpdGggcGVyY2VudCBlc2NhcGVzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKKwlta2RpciBwcm9qZWN0IHByb2plY3QvdHJ1bmsgcHJvamVjdC9icmFuY2hlcyBwcm9qZWN0L3RhZ3MgJiYKKwllY2hvIGZvbyA+IHByb2plY3QvdHJ1bmsvZm9vICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wciBqZWN0IiAmJgorCXN2bl9jbWQgY3AgLW0gImJyYW5jaCIgIiRzdm5yZXBvL3ByIGplY3QvdHJ1bmsiIFwKKwkgICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL2IiICYmCisJc3ZuX2NtZCBjcCAtbSAidGFnIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCSAgIiRzdm5yZXBvL3ByIGplY3QvdGFncy92MSIgJiYKKwlybSAtcmYgcHJvamVjdCAmJgorCW1heWJlX3N0YXJ0X2h0dHBkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY2xvbmUgd2l0aCBwZXJjZW50IGVzY2FwZXMnICcKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwby9wciUyMGplY3QiIGNsb25lICYmCisJKAorCQljZCBjbG9uZSAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9naXQtc3ZuCisJKQorJworCisjIFNWTiB3b3JrcyBlaXRoZXIgd2F5LCBzbyBzaG91bGQgd2UuLi4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ZuIGNoZWNrb3V0IHdpdGggcGVyY2VudCBlc2NhcGVzJyAnCisJc3ZuX2NtZCBjaGVja291dCAiJHN2bnJlcG8vcHIlMjBqZWN0IiBzdm4ucGVyY2VudCAmJgorCXN2bl9jbWQgY2hlY2tvdXQgIiRzdm5yZXBvL3ByJTIwamVjdC90cnVuayIgc3ZuLnBlcmNlbnQudHJ1bmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ZuIGNoZWNrb3V0IHdpdGggc3BhY2UnICcKKwlzdm5fY21kIGNoZWNrb3V0ICIkc3ZucmVwby9wciBqZWN0IiBzdm4uc3BhY2UgJiYKKwlzdm5fY21kIGNoZWNrb3V0ICIkc3ZucmVwby9wciBqZWN0L3RydW5rIiBzdm4uc3BhY2UudHJ1bmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB0cnVuayB3aXRoIHBlcmNlbnQgZXNjYXBlcyBhbmQgbWluaW1pemUtdXJsJyAnCisJZ2l0IHN2biBjbG9uZSAtLW1pbmltaXplLXVybCAiJHN2bnJlcG8vcHIlMjBqZWN0L3RydW5rIiBtaW5pbWl6ZSAmJgorCSgKKwkJY2QgbWluaW1pemUgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZ2l0LXN2bgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB0cnVuayB3aXRoIHBlcmNlbnQgZXNjYXBlcycgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvL3ByJTIwamVjdC90cnVuayIgdHJ1bmsgJiYKKwkoCisJCWNkIHRydW5rICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2dpdC1zdm4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY2xvbmUgLS1zdGRsYXlvdXQgd2l0aCBwZXJjZW50IGVzY2FwZXMnICcKKwlnaXQgc3ZuIGNsb25lIC0tc3RkbGF5b3V0ICIkc3ZucmVwby9wciUyMGplY3QiIHBlcmNlbnQgJiYKKwkoCisJCWNkIHBlcmNlbnQgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rXjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL2JeMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy92MV4wCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNsb25lIC1zIHdpdGggdW5lc2NhcGVkIHNwYWNlJyAnCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8vcHIgamVjdCIgLS1wcmVmaXggb3JpZ2luLyBzcGFjZSAmJgorCSgKKwkJY2Qgc3BhY2UgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rXjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL2JeMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy92MV4wCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMjEtZ2l0LXN2bi1mZXRjaC1yZW5hbWVkLWRpci5zaCBiL3QvdDkxMjEtZ2l0LXN2bi1mZXRjaC1yZW5hbWVkLWRpci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMDBjYWQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyMS1naXQtc3ZuLWZldGNoLXJlbmFtZWQtZGlyLnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggU2FudGhvc2ggS3VtYXIgTWFuaQorCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gY2FuIGZldGNoIHJlbmFtZWQgZGlyZWN0b3JpZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHJlcG9zaXRvcnkgd2l0aCByZW5hbWVkIGRpcmVjdG9yeScgJworCXN2bmFkbWluIGxvYWQgLXEgIiRyYXdzdm5yZXBvIiA8ICIkVEVTVF9ESVJFQ1RPUlkiL3Q5MTIxL3JlbmFtZWQtZGlyLmR1bXAKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgYW5kIGZldGNoIHJlcG9zaXRvcnknICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvL25ld25hbWUiICYmCisJZ2l0IHN2biBmZXRjaAorCScKKwordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDkxMjEvcmVuYW1lZC1kaXIuZHVtcCBiL3QvdDkxMjEvcmVuYW1lZC1kaXIuZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjkxMjdiCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyMS9yZW5hbWVkLWRpci5kdW1wCkBAIC0wLDAgKzEsOTAgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IDA2YjliM2FkLWY1NDYtNGZiZS04MzI4LWZjYjRlNmVmNWMzZgorCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wNC0wMlQwOToxMTo1OS43Nzg1NTdaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTcKK0NvbnRlbnQtbGVuZ3RoOiAxMTcKKworSyA3Citzdm46bG9nCitWIDE0Citpbml0aWFsIGltcG9ydAorSyAxMAorc3ZuOmF1dGhvcgorViA4CitzYW50aG9zaAorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wNC0wMlQwOToxMzowMy4xNzA4NjNaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBuYW1lCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IG5hbWUvYS50eHQKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogNzEKK1RleHQtY29udGVudC1sZW5ndGg6IDYKK1RleHQtY29udGVudC1tZDU6IGIxOTQ2YWM5MjQ5MmQyMzQ3YzYyMzViNGQyNjExMTg0CitDb250ZW50LWxlbmd0aDogNzcKKworSyAxMworc3ZuOm1pbWUtdHlwZQorViAxMAordGV4dC9wbGFpbgorSyAxMworc3ZuOmVvbC1zdHlsZQorViAyCitMRgorUFJPUFMtRU5ECitoZWxsbworCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTA5CitDb250ZW50LWxlbmd0aDogMTA5CisKK0sgNworc3ZuOmxvZworViA3CityZW5hbWVkCitLIDEwCitzdm46YXV0aG9yCitWIDgKK3NhbnRob3NoCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA0LTAyVDA5OjE0OjIyLjk1MjE4NloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG5ld25hbWUKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBuYW1lCisKKworTm9kZS1wYXRoOiBuYW1lCitOb2RlLWFjdGlvbjogZGVsZXRlCisKKwpkaWZmIC0tZ2l0IGEvdC90OTEyMi1naXQtc3ZuLWF1dGhvci5zaCBiL3QvdDkxMjItZ2l0LXN2bi1hdXRob3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWU4ZmUzOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMjItZ2l0LXN2bi1hdXRob3Iuc2gKQEAgLTAsMCArMSw4NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gYXV0aG9yc2hpcCcKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm4gcmVwb3NpdG9yeScgJworCXN2bl9jbWQgY2hlY2tvdXQgIiRzdm5yZXBvIiB3b3JrLnN2biAmJgorCSgKKwkJY2Qgd29yay5zdm4gJiYKKwkJZWNobyA+ZmlsZSAmJgorCQlzdm5fY21kIGFkZCBmaWxlICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJmaXJzdCBjb21taXQiIGZpbGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVyYWN0IHdpdGggaXQgdmlhIGdpdCBzdm4nICcKKwlta2RpciB3b3JrLmdpdCAmJgorCSgKKwkJY2Qgd29yay5naXQgJiYKKwkJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKKwkJZ2l0IHN2biBmZXRjaCAmJgorCisJCWVjaG8gbW9kaWZpY2F0aW9uID5maWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tIHNlY29uZCAmJgorCisJCXRlc3RfdGljayAmJgorCQlnaXQgc3ZuIGRjb21taXQgJiYKKworCQllY2hvICJmdXJ0aGVyIG1vZGlmaWNhdGlvbiIgPmZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gdGhpcmQgJiYKKworCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IHN2biAtLWFkZC1hdXRob3ItZnJvbSBkY29tbWl0ICYmCisKKwkJZWNobyAieWV0IGZ1cnRoZXIgbW9kaWZpY2F0aW9uIiA+ZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBmb3VydGggJiYKKworCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IHN2biAtLWFkZC1hdXRob3ItZnJvbSAtLXVzZS1sb2ctYXV0aG9yIGRjb21taXQgJiYKKworCQlnaXQgbG9nICYmCisKKwkJZ2l0IHNob3cgLXMgSEVBRF5eID4uLi9hY3R1YWwuMiAmJgorCQlnaXQgc2hvdyAtcyBIRUFEXiAgPi4uL2FjdHVhbC4zICYmCisJCWdpdCBzaG93IC1zIEhFQUQgICA+Li4vYWN0dWFsLjQKKworCSkgJiYKKworCSMgTWFrZSBzdXJlIHRoYXQgLS1hZGQtYXV0aG9yLWZyb20gd2l0aG91dCAtLXVzZS1sb2ctYXV0aG9yCisJIyBkaWQgbm90IGFmZmVjdCB0aGUgYXV0aG9yc2hpcCBpbmZvcm1hdGlvbgorCW15c2VsZj0kKGdyZXAgIl5BdXRob3I6ICIgYWN0dWFsLjIpICYmCisJdW5hZmZlY3RlZD0kKGdyZXAgIl5BdXRob3I6ICIgYWN0dWFsLjMpICYmCisJdGVzdCAieiRteXNlbGYiID0gInokdW5hZmZlY3RlZCIgJiYKKworCSMgTWFrZSBzdXJlIGxhY2sgb2YgLS1hZGQtYXV0aG9yLWZyb20gZGlkIG5vdCBhZGQgY3J1ZnQKKwkhIGdyZXAgIl4gICAgRnJvbTogQSBVIFRob3IgIiBhY3R1YWwuMiAmJgorCisJIyBNYWtlIHN1cmUgLS1hZGQtYXV0aG9yLWZyb20gYWRkZWQgY3J1ZnQKKwlncmVwICJeICAgIEZyb206IEEgVSBUaG9yICIgYWN0dWFsLjMgJiYKKwlncmVwICJeICAgIEZyb206IEEgVSBUaG9yICIgYWN0dWFsLjQgJiYKKworCSMgTWFrZSBzdXJlIC0tYWRkLWF1dGhvci1mcm9tIHdpdGggLS11c2UtbG9nLWF1dGhvciBhZmZlY3RlZAorCSMgdGhlIGF1dGhvcnNoaXAgaW5mb3JtYXRpb24KKwlncmVwICJeQXV0aG9yOiBBIFUgVGhvciAiIGFjdHVhbC40ICYmCisKKwkjIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gY29tbWl0IG1lc3NhZ2VzIHdpdGggZXhjZXNzIGJsYW5rIGxpbmVzCisJdGVzdCAkKGdyZXAgIl4gIiBhY3R1YWwuMiB8IHdjIC1sKSA9IDMgJiYKKwl0ZXN0ICQoZ3JlcCAiXiAiIGFjdHVhbC4zIHwgd2MgLWwpID0gNSAmJgorCXRlc3QgJChncmVwICJeICIgYWN0dWFsLjQgfCB3YyAtbCkgPSA1ICYmCisKKwkjIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3ZuIGNvbW1pdCBtZXNzYWdlcyB3aXRoIGV4Y2VzcyBibGFuayBsaW5lcworCSgKKwkJY2Qgd29yay5zdm4gJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQkKKwkJdGVzdCAkKHN2bl9jbWQgbG9nIC1yMjoyIHwgd2MgLWwpID0gNSAmJgorCQl0ZXN0ICQoc3ZuX2NtZCBsb2cgLXI0OjQgfCB3YyAtbCkgPSA3CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMjMtZ2l0LXN2bi1yZWJ1aWxkLXdpdGgtcmV3cml0ZXJvb3Quc2ggYi90L3Q5MTIzLWdpdC1zdm4tcmVidWlsZC13aXRoLXJld3JpdGVyb290LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVhZDQwNDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTIzLWdpdC1zdm4tcmVidWlsZC13aXRoLXJld3JpdGVyb290LnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggSmFuIEtyw7xnZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biByZXNwZWN0cyByZXdyaXRlUm9vdCBkdXJpbmcgcmVidWlsZCcKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK21rZGlyIGltcG9ydAorKGNkIGltcG9ydAorCXRvdWNoIGZvbworCXN2bl9jbWQgaW1wb3J0IC1tICdpbXBvcnQgZm9yIGdpdCBzdm4nIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsCispCitybSAtcmYgaW1wb3J0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQsIGZldGNoIGFuZCBjaGVja291dCByZXBvc2l0b3J5JyAnCisJZ2l0IHN2biBpbml0IC0tcmV3cml0ZS1yb290PWh0dHA6Ly9pbnZhbGlkLmludmFsaWQvICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IGNoZWNrb3V0IC1iIG15YnJhbmNoIHJlbW90ZXMvZ2l0LXN2bgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHJldl9tYXAnICcKKwlybSAiJEdJVF9TVk5fRElSIi8ucmV2X21hcC4qCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJ1aWxkIHJldl9tYXAnICcKKwlnaXQgc3ZuIHJlYmFzZSA+L2Rldi9udWxsCisJJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90OTEyNC1naXQtc3ZuLWRjb21taXQtYXV0by1wcm9wcy5zaCBiL3QvdDkxMjQtZ2l0LXN2bi1kY29tbWl0LWF1dG8tcHJvcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWY3MjMxZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMjQtZ2l0LXN2bi1kY29tbWl0LWF1dG8tcHJvcHMuc2gKQEAgLTAsMCArMSwxMDUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggQnJhZCBLaW5nCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZGNvbW1pdCBob25vcnMgYXV0by1wcm9wcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK2dlbmVyYXRlX2F1dG9fcHJvcHMoKSB7CitjYXQgPDwgRU9GCitbbWlzY2VsbGFueV0KK2VuYWJsZS1hdXRvLXByb3BzPSQxCitbYXV0by1wcm9wc10KKyouc2ggID0gc3ZuOm1pbWUtdHlwZT1hcHBsaWNhdGlvbi94LXNoZWxsc2NyaXB0OyBzdm46ZW9sLXN0eWxlPUxGCisqLnR4dCA9IHN2bjptaW1lLXR5cGU9dGV4dC9wbGFpbjsgc3ZuOmVvbC1zdHlsZSA9IG5hdGl2ZQorRU9GCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgZ2l0IHN2bicgJworCW1rZGlyIGltcG9ydCAmJgorCSgKKwkJY2QgaW1wb3J0ICYmCisJCWVjaG8gZm9vID5mb28gJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgLiAiJHN2bnJlcG8iCisJKSAmJgorCXJtIC1yZiBpbXBvcnQgJiYKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5hYmxlIGF1dG8tcHJvcHMgY29uZmlnJyAnCisJbWtkaXIgdXNlciAmJgorCWdlbmVyYXRlX2F1dG9fcHJvcHMgeWVzID51c2VyL2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZmlsZXMgbWF0Y2hpbmcgYXV0by1wcm9wcycgJworCXdyaXRlX3NjcmlwdCBleGVjMS5zaCA8L2Rldi9udWxsICYmCisJZWNobyAiaGVsbG8iID5oZWxsby50eHQgJiYKKwllY2hvIGJhciA+YmFyICYmCisJZ2l0IGFkZCBleGVjMS5zaCBoZWxsby50eHQgYmFyICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlsZXMgZm9yIGVuYWJsZWQgYXV0by1wcm9wcyIgJiYKKwlnaXQgc3ZuIGRjb21taXQgLS1jb25maWctZGlyPXVzZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYWJsZSBhdXRvLXByb3BzIGNvbmZpZycgJworCWdlbmVyYXRlX2F1dG9fcHJvcHMgbm8gPnVzZXIvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBmaWxlcyBtYXRjaGluZyBkaXNhYmxlZCBhdXRvLXByb3BzJyAnCisJd3JpdGVfc2NyaXB0IGV4ZWMyLnNoIDwvZGV2L251bGwgJiYKKwllY2hvICJ3b3JsZCIgPndvcmxkLnR4dCAmJgorCWVjaG8gem90ID56b3QgJiYKKwlnaXQgYWRkIGV4ZWMyLnNoIHdvcmxkLnR4dCB6b3QgJiYKKwlnaXQgY29tbWl0IC1tICJmaWxlcyBmb3IgZGlzYWJsZWQgYXV0by1wcm9wcyIgJiYKKwlnaXQgc3ZuIGRjb21taXQgLS1jb25maWctZGlyPXVzZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgcmVzdWx0aW5nIHN2biByZXBvc2l0b3J5JyAnCisoCisJbWtkaXIgd29yayAmJgorCWNkIHdvcmsgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgJiYKKwljZCBzdm5yZXBvICYmCisKKwkjIENoZWNrIHByb3BlcnRpZXMgZnJvbSBmaXJzdCBjb21taXQuCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBQT1NJWFBFUk0KKwl0aGVuCisJCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46ZXhlY3V0YWJsZSBleGVjMS5zaCkiID0gIngqIgorCWZpICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgZXhlYzEuc2gpIiA9IFwKKwkgICAgICJ4YXBwbGljYXRpb24veC1zaGVsbHNjcmlwdCIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBoZWxsby50eHQpIiA9ICJ4dGV4dC9wbGFpbiIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOmVvbC1zdHlsZSBoZWxsby50eHQpIiA9ICJ4bmF0aXZlIiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46bWltZS10eXBlIGJhcikiID0gIngiICYmCisKKwkjIENoZWNrIHByb3BlcnRpZXMgZnJvbSBzZWNvbmQgY29tbWl0LgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgUE9TSVhQRVJNCisJdGhlbgorCQl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOmV4ZWN1dGFibGUgZXhlYzIuc2gpIiA9ICJ4KiIKKwlmaSAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46bWltZS10eXBlIGV4ZWMyLnNoKSIgPSAieCIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSB3b3JsZC50eHQpIiA9ICJ4IiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46ZW9sLXN0eWxlIHdvcmxkLnR4dCkiID0gIngiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgem90KSIgPSAieCIKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgcmVuYW1lZCBmaWxlJyAnCisJdGVzdCAtZCB1c2VyICYmCisJZ2VuZXJhdGVfYXV0b19wcm9wcyB5ZXMgPiB1c2VyL2NvbmZpZyAmJgorCWdpdCBtdiBmb28gZm9vLnNoICYmCisJZ2l0IGNvbW1pdCAtbSAiZm9vID0+IGZvby5zaCIgJiYKKwlnaXQgc3ZuIGRjb21taXQgLS1jb25maWctZGlyPXVzZXIgJiYKKwkoCisJCWNkIHdvcmsvc3ZucmVwbyAmJgorCQlzdm5fY21kIHVwICYmCisJCXRlc3QgISAtZSBmb28gJiYKKwkJdGVzdCAtZSBmb28uc2ggJiYKKwkJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgZm9vLnNoKSIgPSBcCisJCSAgICAgInhhcHBsaWNhdGlvbi94LXNoZWxsc2NyaXB0IiAmJgorCQl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOmVvbC1zdHlsZSBmb28uc2gpIiA9ICJ4TEYiCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMjUtZ2l0LXN2bi1tdWx0aS1nbG9iLWJyYW5jaC1uYW1lcy5zaCBiL3QvdDkxMjUtZ2l0LXN2bi1tdWx0aS1nbG9iLWJyYW5jaC1uYW1lcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZDUzZmM5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyNS1naXQtc3ZuLW11bHRpLWdsb2ItYnJhbmNoLW5hbWVzLnNoCkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMDggTWFyY3VzIEdyaWVwCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gbXVsdGktZ2xvYiBicmFuY2ggbmFtZXMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJworCW1rZGlyIHByb2plY3QgcHJvamVjdC90cnVuayBwcm9qZWN0L2JyYW5jaGVzIFwKKwkJCXByb2plY3QvYnJhbmNoZXMvdjE0LjEgcHJvamVjdC90YWdzICYmCisJZWNobyBmb28gPiBwcm9qZWN0L3RydW5rL2ZvbyAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8vcHJvamVjdCIgJiYKKwlybSAtcmYgcHJvamVjdCAmJgorCXN2bl9jbWQgY3AgLW0gImZ1biIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkgICAgICAgICAgICAgICAgIiRzdm5yZXBvL3Byb2plY3QvYnJhbmNoZXMvdjE0LjEvYmV0YSIgJiYKKwlzdm5fY21kIGNwIC1tICJtb3JlIGZ1biEiICIkc3ZucmVwby9wcm9qZWN0L2JyYW5jaGVzL3YxNC4xL2JldGEiIFwKKwkgICAgICAgICAgICAgICAgICAgICAgIiRzdm5yZXBvL3Byb2plY3QvYnJhbmNoZXMvdjE0LjEvZ29sZCIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY2xvbmUgd2l0aCBtdWx0aS1nbG9iIGluIGJyYW5jaCBuYW1lcycgJworCWdpdCBzdm4gY2xvbmUgLVQgdHJ1bmsgLWIgYnJhbmNoZXMvKi8qIC10IHRhZ3MgXAorCSAgICAgICAgICAgICAgIiRzdm5yZXBvL3Byb2plY3QiIHByb2plY3QgJiYKKwkoY2QgcHJvamVjdCAmJgorCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvb3JpZ2luL3YxNC4xL2JldGEiICYmCisJCWdpdCByZXYtcGFyc2UgInJlZnMvcmVtb3Rlcy9vcmlnaW4vdjE0LjEvZ29sZCIKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRjb21taXQgdG8gbXVsdGktZ2xvYmJlZCBicmFuY2gnICIKKwkoY2QgcHJvamVjdCAmJgorCWdpdCByZXNldCAtLWhhcmQgJ3JlZnMvcmVtb3Rlcy9vcmlnaW4vdjE0LjEvZ29sZCcgJiYKKwllY2hvIGhlbGxvID4+IGZvbyAmJgorCWdpdCBjb21taXQgLW0gJ2hlbGxvJyAtLSBmb28gJiYKKwlnaXQgc3ZuIGRjb21taXQKKwkpCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMjYtZ2l0LXN2bi1mb2xsb3ctZGVsZXRlZC1yZWFkZGVkLWRpcmVjdG9yeS5zaCBiL3QvdDkxMjYtZ2l0LXN2bi1mb2xsb3ctZGVsZXRlZC1yZWFkZGVkLWRpcmVjdG9yeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZGVjNjQwCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyNi1naXQtc3ZuLWZvbGxvdy1kZWxldGVkLXJlYWRkZWQtZGlyZWN0b3J5LnNoCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggQWxlYyBCZXJyeW1hbgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGZldGNoIHJlcG9zaXRvcnkgd2l0aCBkZWxldGVkIGFuZCByZWFkZGVkIGRpcmVjdG9yeScKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKKyMgRG9uJ3QgcnVuIHRoaXMgYnkgZGVmYXVsdDsgaXQgb3BlbnMgdXAgYSBwb3J0LgorcmVxdWlyZV9zdm5zZXJ2ZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHJlcG9zaXRvcnknICcKKyAgICBzdm5hZG1pbiBsb2FkIC1xICIkcmF3c3ZucmVwbyIgPCAiJFRFU1RfRElSRUNUT1JZIi90OTEyNi9mb2xsb3ctZGVsZXRlZC1yZWFkZGVkLmR1bXAKKyAgICAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHJlcG9zaXRvcnknICcKKyAgICBzdGFydF9zdm5zZXJ2ZSAmJgorICAgIGdpdCBzdm4gaW5pdCBzdm46Ly8xMjcuMC4wLjE6JFNWTlNFUlZFX1BPUlQgJiYKKyAgICBnaXQgc3ZuIGZldGNoCisgICAgJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMjYvZm9sbG93LWRlbGV0ZWQtcmVhZGRlZC5kdW1wIGIvdC90OTEyNi9mb2xsb3ctZGVsZXRlZC1yZWFkZGVkLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkYTVkMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMjYvZm9sbG93LWRlbGV0ZWQtcmVhZGRlZC5kdW1wCkBAIC0wLDAgKzEsMjAxIEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiAxODA3ZGM2Zi1jNjkzLTRjZGEtOTcxMC0wMGUxYmU4YzFmMjEKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMDktMTRUMTk6NTM6MTMuMDA2NzQ4WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTExCitDb250ZW50LWxlbmd0aDogMTExCisKK0sgNworc3ZuOmxvZworViAxMgorQ3JlYXRlIHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDQKK2FsZWMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMDktMTRUMTk6NTM6MTMuMjM5Njg5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTE5CitDb250ZW50LWxlbmd0aDogMTE5CisKK0sgNworc3ZuOmxvZworViAyMAorQ3JlYXRlIHRydW5rL3Byb2plY3QKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorYWxlYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wOS0xNFQxOTo1MzoxMy41NDg4NjBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9wcm9qZWN0CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDMKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMQorQ29udGVudC1sZW5ndGg6IDExMQorCitLIDcKK3N2bjpsb2cKK1YgMTIKK2FkZCBuZXcgZmlsZQorSyAxMAorc3ZuOmF1dGhvcgorViA0CithbGVjCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA5LTE0VDE5OjUzOjE1LjQzMzYzMFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL3Byb2plY3QvZm9vCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiBkM2IwNzM4NGQxMTNlZGVjNDllYWE2MjM4YWQ1ZmYwMAorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorZm9vCisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTYKK0NvbnRlbnQtbGVuZ3RoOiAxMTYKKworSyA3Citzdm46bG9nCitWIDE3CitjaGFuZ2UgZm9vIHRvIGJhcgorSyAxMAorc3ZuOmF1dGhvcgorViA0CithbGVjCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA5LTE0VDE5OjUzOjE3LjMzOTg4NFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL3Byb2plY3QvZm9vCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IGMxNTdhNzkwMzFlMWM0MGY4NTkzMTgyOWJjNWZjNTUyCitDb250ZW50LWxlbmd0aDogNAorCitiYXIKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNAorQ29udGVudC1sZW5ndGg6IDExNAorCitLIDcKK3N2bjpsb2cKK1YgMTUKK2Rvbid0IGxpa2UgdGhhdAorSyAxMAorc3ZuOmF1dGhvcgorViA0CithbGVjCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA5LTE0VDE5OjUzOjE5LjMzNTAwMVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL3Byb2plY3QKK05vZGUtYWN0aW9uOiBkZWxldGUKKworCitSZXZpc2lvbi1udW1iZXI6IDYKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMAorQ29udGVudC1sZW5ndGg6IDExMAorCitLIDcKK3N2bjpsb2cKK1YgMTEKK3Jlc2V0IHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDQKK2FsZWMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMDktMTRUMTk6NTM6MTkuODQ1ODk3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvcHJvamVjdAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiA0CitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rL3Byb2plY3QKKworCitSZXZpc2lvbi1udW1iZXI6IDcKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMworQ29udGVudC1sZW5ndGg6IDExMworCitLIDcKK3N2bjpsb2cKK1YgMTQKK2NoYW5nZSB0byBxdXV4CitLIDEwCitzdm46YXV0aG9yCitWIDQKK2FsZWMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMDktMTRUMTk6NTM6MjEuMzY3OTQ3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvcHJvamVjdC9mb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogNQorVGV4dC1jb250ZW50LW1kNTogZDNiMDdhMzgyZWMwMTBjMDE4ODkyNTBmY2U2NmZiMTMKK0NvbnRlbnQtbGVuZ3RoOiA1CisKK3F1dXgKKworCmRpZmYgLS1naXQgYS90L3Q5MTI3LWdpdC1zdm4tcGFydGlhbC1yZWJ1aWxkLnNoIGIvdC90OTEyNy1naXQtc3ZuLXBhcnRpYWwtcmVidWlsZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZTQ3ODlkCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyNy1naXQtc3ZuLXBhcnRpYWwtcmVidWlsZC5zaApAQCAtMCwwICsxLDU5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IERlc2tpbiBNaWxsZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBwYXJ0aWFsLXJlYnVpbGQgdGVzdHMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBzdm5yZXBvJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQkoY2QgaW1wb3J0ICYmCisJCW1rZGlyIHRydW5rIGJyYW5jaGVzIHRhZ3MgJiYKKwkJKGNkIHRydW5rICYmCisJCWVjaG8gZm9vID4gZm9vCisJCSkgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0LXN2biIgLiAiJHN2bnJlcG8iID4vZGV2L251bGwgJiYKKwkJc3ZuX2NtZCBjb3B5ICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9icmFuY2hlcy9hIFwKKwkJCS1tICJjcmVhdGVkIGJyYW5jaCBhIgorCQkpICYmCisJCXJtIC1yZiBpbXBvcnQgJiYKKwkJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rIHRydW5rICYmCisJCShjZCB0cnVuayAmJgorCQllY2hvIGJhciA+PiBmb28gJiYKKwkJc3ZuX2NtZCBjaSAtbSAidXBkYXRlZCB0cnVuayIKKwkJKSAmJgorCQlzdm5fY21kIGNvICIkc3ZucmVwbyIvYnJhbmNoZXMvYSBhICYmCisJCShjZCBhICYmCisJCWVjaG8gYmF6ID4+IGEgJiYKKwkJc3ZuX2NtZCBhZGQgYSAmJgorCQlzdm5fY21kIGNpIC1tICJ1cGRhdGVkIGEiCisJCSkgJiYKKwkJZ2l0IHN2biBpbml0IC0tc3RkbGF5b3V0ICIkc3ZucmVwbyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBhbiBlYXJseSBTVk4gcmV2aXNpb24gaW50byBnaXQnICcKKwlnaXQgc3ZuIGZldGNoIC1yMToyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgZnVsbCBnaXQgbWlycm9yIG9mIFNWTicgJworCW1rZGlyIG1pcnJvciAmJgorCSgKKwkJKGNkIG1pcnJvciAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgc3ZuIGluaXQgLS1zdGRsYXlvdXQgIiRzdm5yZXBvIiAmJgorCQlnaXQgc3ZuIGZldGNoCisJCSkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZyb20gZ2l0IG1pcnJvciBhbmQgcGFydGlhbC1yZWJ1aWxkJyAnCisJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLnVybCAiZmlsZTovLyRQV0QvbWlycm9yLy5naXQiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLmZldGNoIHJlZnMvcmVtb3Rlcy8qOnJlZnMvcmVtb3Rlcy8qICYmCisJZ2l0IGZldGNoIG9yaWdpbiAmJgorCWdpdCBzdm4gZmV0Y2gKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTI4LWdpdC1zdm4tY21kLWJyYW5jaC5zaCBiL3QvdDkxMjgtZ2l0LXN2bi1jbWQtYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRlOTVmNzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTI4LWdpdC1zdm4tY21kLWJyYW5jaC5zaApAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IERlc2tpbiBNaWxsZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBwYXJ0aWFsLXJlYnVpbGQgdGVzdHMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBzdm5yZXBvJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQkoY2QgaW1wb3J0ICYmCisJCW1rZGlyIHRydW5rIGJyYW5jaGVzIHRhZ3MgJiYKKwkJKGNkIHRydW5rICYmCisJCWVjaG8gZm9vID4gZm9vCisJCSkgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0LXN2biIgLiAiJHN2bnJlcG8iID4vZGV2L251bGwKKwkJKSAmJgorCQlybSAtcmYgaW1wb3J0ICYmCisJCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuayB0cnVuayAmJgorCQkoY2QgdHJ1bmsgJiYKKwkJZWNobyBiYXIgPj4gZm9vICYmCisJCXN2bl9jbWQgY2kgLW0gInVwZGF0ZWQgdHJ1bmsiCisJCSkgJiYKKwkJcm0gLXJmIHRydW5rCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgaW50byBnaXQnICcKKwlnaXQgc3ZuIGluaXQgLS1zdGRsYXlvdXQgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgY2hlY2tvdXQgcmVtb3Rlcy9vcmlnaW4vdHJ1bmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBicmFuY2ggdGVzdHMnICcKKwlnaXQgc3ZuIGJyYW5jaCBhICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRDopICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL29yaWdpbi9hOikgJiYKKwlnaXQgc3ZuIGJyYW5jaCAtbSAiY3JlYXRlZCBicmFuY2ggYiBibGFoIiBiICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL29yaWdpbi9iOikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1tICJubyBicmFuY2huYW1lIiAmJgorCWdpdCBzdm4gYnJhbmNoIC1uIGMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL2MgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGJyYW5jaCBhICYmCisJZ2l0IHN2biBicmFuY2ggLXQgdGFnMSAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9vcmlnaW4vdGFncy90YWcxOikgJiYKKwlnaXQgc3ZuIGJyYW5jaCAtLXRhZyB0YWcyICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL29yaWdpbi90YWdzL3RhZzI6KSAmJgorCWdpdCBzdm4gdGFnIHRhZzMgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL3RhZ3MvdGFnMzopICYmCisJZ2l0IHN2biB0YWcgLW0gImNyZWF0ZWQgdGFnNCBmb28iIHRhZzQgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL3RhZ3MvdGFnNDopICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biB0YWcgLW0gIm5vIHRhZ25hbWUiICYmCisJZ2l0IHN2biB0YWcgLW4gdGFnNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9vcmlnaW4vdGFncy90YWc1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biB0YWcgdGFnMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggdXNlcyBjb3JyZWN0IHN2bi1yZW1vdGUnICcKKwkoc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHN2biAmJgorCWNkIHN2biAmJgorCW1rZGlyIG1pcnJvciAmJgorCXN2bl9jbWQgYWRkIG1pcnJvciAmJgorCXN2bl9jbWQgY29weSB0cnVuayBtaXJyb3IvICYmCisJc3ZuX2NtZCBjb3B5IHRhZ3MgbWlycm9yLyAmJgorCXN2bl9jbWQgY29weSBicmFuY2hlcyBtaXJyb3IvICYmCisJc3ZuX2NtZCBjaSAtbSAibWFkZSBtaXJyb3IiICkgJiYKKwlybSAtcmYgc3ZuICYmCisJZ2l0IHN2biBpbml0IC1zIC1SIG1pcnJvciAtLXByZWZpeD1taXJyb3IvICIkc3ZucmVwbyIvbWlycm9yICYmCisJZ2l0IHN2biBmZXRjaCAtUiBtaXJyb3IgJiYKKwlnaXQgY2hlY2tvdXQgbWlycm9yL3RydW5rICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRDopICYmCisJZ2l0IHN2biBicmFuY2ggLW0gImJyYW5jaCBpbiBtaXJyb3IiIGQgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvbWlycm9yL2Q6KSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9kCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEyOS1naXQtc3ZuLWkxOG4tY29tbWl0ZW5jb2Rpbmcuc2ggYi90L3Q5MTI5LWdpdC1zdm4taTE4bi1jb21taXRlbmNvZGluZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYzIxM2FlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyOS1naXQtc3ZuLWkxOG4tY29tbWl0ZW5jb2Rpbmcuc2gKQEAgLTAsMCArMSw5MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBFcmljIFdvbmcKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBob25vcnMgaTE4bi5jb21taXRFbmNvZGluZyBpbiBjb25maWcnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCitjb21wYXJlX2dpdF9oZWFkX3dpdGggKCkgeworCW5yPSQod2MgLWwgPCAiJDEiKQorCWE9NworCWI9JCgoJGEgKyAkbnIgLSAxKSkKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lICIkYSwke2J9cCIgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBjdXJyZW50ICIkMSIKK30KKworcHJlcGFyZV9hX3V0ZjhfbG9jYWxlCisKK2NvbXBhcmVfc3ZuX2hlYWRfd2l0aCAoKSB7CisJIyBleHRyYWN0IGp1c3QgdGhlIGxvZyBtZXNzYWdlIGFuZCBzdHJpcCBvdXQgY29tbWl0dGVyIGluZm8uCisJIyBkb24ndCB1c2UgLS1saW1pdCBoZXJlIHNpbmNlIHN2biAxLjEueCBkb2Vzbid0IGhhdmUgaXQsCisJTENfQUxMPSIkYV91dGY4X2xvY2FsZSIgc3ZuIGxvZyAkKGdpdCBzdm4gaW5mbyAtLXVybCkgfCBwZXJsIC13IC1lICcKKwkJdXNlIGJ5dGVzOworCQkkLyA9ICgiLSJ4NzIpIC4gIlxuIjsKKwkJbXkgQHggPSA8U1RESU4+OworCQlAeCA9IHNwbGl0KC9cbi8sICR4WzFdKTsKKwkJc3BsaWNlKEB4LCAwLCAyKTsKKwkJJHhbLTFdID0gIiI7CisJCXByaW50IGpvaW4oIlxuIiwgQHgpOworCScgPiBjdXJyZW50ICYmCisJdGVzdF9jbXAgY3VycmVudCAiJDEiCit9CisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBzZXR1cCIgJworCQlta2RpciAkSCAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiJEggdGVzdCIgJEggIiRzdm5yZXBvIi8kSCAmJgorCQlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIvJEggJEgKKwknCitkb25lCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBjb21taXQgb24gZ2l0IHNpZGUiICcKKwkoCisJCWNkICRIICYmCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkSCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdCByZWZzL3JlbW90ZXMvZ2l0LXN2biAmJgorCQllY2hvICRIID5GICYmCisJCWdpdCBhZGQgRiAmJgorCQlnaXQgY29tbWl0IC1hIC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRILnR4dCAmJgorCQlFPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSAicy9eZW5jb2RpbmcgLy9wIikgJiYKKwkJdGVzdCAieiRFIiA9ICJ6JEgiICYmCisJCWNvbXBhcmVfZ2l0X2hlYWRfd2l0aCAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8kSC50eHQKKwkpCisJJworZG9uZQorCitmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAgSVNPLTIwMjItSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggZGNvbW1pdCB0byBzdm4iICcKKwkoCisJCWNkICRIICYmCisJCWdpdCBzdm4gZGNvbW1pdCAmJgorCQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIGdpdC1zdm4taWQ6ICYmCisJCUU9JChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lICJzL15lbmNvZGluZyAvL3AiKSAmJgorCQl0ZXN0ICJ6JEUiID0gInokSCIgJiYKKwkJY29tcGFyZV9naXRfaGVhZF93aXRoICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRILnR4dAorCSkKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVVRGOCAnSVNPLTg4NTktMSBzaG91bGQgbWF0Y2ggVVRGLTggaW4gc3ZuJyAnCisJKAorCQljZCBJU084ODU5LTEgJiYKKwkJY29tcGFyZV9zdm5faGVhZF93aXRoICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0CisJKQorJworCitmb3IgSCBpbiBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFVURjggIiRIIHNob3VsZCBtYXRjaCBVVEYtOCBpbiBzdm4iICcKKwkJKAorCQkJY2QgJEggJiYKKwkJCWNvbXBhcmVfc3ZuX2hlYWRfd2l0aCAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8yLVVURi04LnR4dAorCQkpCisJJworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzAtZ2l0LXN2bi1hdXRob3JzLWZpbGUuc2ggYi90L3Q5MTMwLWdpdC1zdm4tYXV0aG9ycy1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNiNzY0YmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTMwLWdpdC1zdm4tYXV0aG9ycy1maWxlLnNoCkBAIC0wLDAgKzEsMTMxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGF1dGhvcnMgZmlsZSB0ZXN0cycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK2NhdCA+IHN2bi1hdXRob3JzIDw8RU9GCithYSA9IEFBQUFBQUEgQUFBQUFBQSA8YWFAZXhhbXBsZS5jb20+CitiYiA9IEJCQkJCQkIgQkJCQkJCQiA8YmJAZXhhbXBsZS5jb20+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJworCWZvciBpIGluIGFhIGJiIGNjIGRkCisJZG8KKwkJc3ZuX2NtZCBta2RpciAtbSAkaSAtLXVzZXJuYW1lICRpICIkc3ZucmVwbyIvJGkKKwlkb25lCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBpbXBvcnQgd2l0aCBpbmNvbXBsZXRlIGF1dGhvcnMgZmlsZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gY2xvbmUgLS1hdXRob3JzLWZpbGU9c3ZuLWF1dGhvcnMgIiRzdm5yZXBvIiB4CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnRlZCAyIHJldmlzaW9ucyBzdWNjZXNzZnVsbHknICcKKwkoCisJCWNkIHggJiYKKwkJZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy9naXQtc3ZuID5hY3R1YWwgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBhY3R1YWwgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2biA+YWN0dWFsICYmCisJCWdyZXAgIl5hdXRob3IgQkJCQkJCQiBCQkJCQkJCIDxiYkBleGFtcGxlXC5jb20+ICIgYWN0dWFsICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MSA+YWN0dWFsICYmCisJCWdyZXAgIl5hdXRob3IgQUFBQUFBQSBBQUFBQUFBIDxhYUBleGFtcGxlXC5jb20+ICIgYWN0dWFsCisJKQorCScKKworY2F0ID4+IHN2bi1hdXRob3JzIDw8RU9GCitjYyA9IENDQ0NDQ0MgQ0NDQ0NDQyA8Y2NAZXhhbXBsZS5jb20+CitkZCA9IEREREREREQgRERERERERCA8ZGRAZXhhbXBsZS5jb20+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29udGludWVzIHRvIGltcG9ydCBvbmNlIGF1dGhvcnMgaGF2ZSBiZWVuIGFkZGVkJyAnCisJKAorCQljZCB4ICYmCisJCWdpdCBzdm4gZmV0Y2ggLS1hdXRob3JzLWZpbGU9Li4vc3ZuLWF1dGhvcnMgJiYKKwkJZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy9naXQtc3ZuID5hY3R1YWwgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBhY3R1YWwgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2biA+YWN0dWFsICYmCisJCWdyZXAgIl5hdXRob3IgRERERERERCBEREREREREIDxkZEBleGFtcGxlXC5jb20+ICIgYWN0dWFsICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MSA+YWN0dWFsICYmCisJCWdyZXAgIl5hdXRob3IgQ0NDQ0NDQyBDQ0NDQ0NDIDxjY0BleGFtcGxlXC5jb20+ICIgYWN0dWFsCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9ycy1maWxlIGFnYWluc3QgZ2xvYnMnICcKKwlzdm5fY21kIG1rZGlyIC1tIGdsb2JzIC0tdXNlcm5hbWUgYWEgXAorCSAgIiRzdm5yZXBvIi9hYS90cnVuayAiJHN2bnJlcG8iL2FhL2JyYW5jaGVzICIkc3ZucmVwbyIvYWEvdGFncyAmJgorCWdpdCBzdm4gY2xvbmUgLS1hdXRob3JzLWZpbGU9c3ZuLWF1dGhvcnMgLXMgIiRzdm5yZXBvIi9hYSBhYS13b3JrICYmCisJZm9yIGkgaW4gYmIgZWUgY2MKKwlkbworCQlicmFuY2g9ImFhL2JyYW5jaGVzLyRpIgorCQlzdm5fY21kIG1rZGlyIC1tICIkYnJhbmNoIiAtLXVzZXJuYW1lICRpICIkc3ZucmVwby8kYnJhbmNoIgorCWRvbmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZhaWxzIG9uIGVlJyAnCisJKCBjZCBhYS13b3JrICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZmV0Y2ggLS1hdXRob3JzLWZpbGU9Li4vc3ZuLWF1dGhvcnMgKQorCScKKwordG1wX2NvbmZpZ19nZXQgKCkgeworCWdpdCBjb25maWcgLS1maWxlPS5naXQvc3ZuLy5tZXRhZGF0YSAtLWdldCAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWx1cmUgaGFwcGVuZWQgd2l0aG91dCBuZWdhdGl2ZSBzaWRlIGVmZmVjdHMnICcKKwkoCisJCWNkIGFhLXdvcmsgJiYKKwkJdGVzdCA2IC1lcSAiJCh0bXBfY29uZmlnX2dldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcy1tYXhSZXYpIiAmJgorCQl0ZXN0IDYgLWVxICIkKHRtcF9jb25maWdfZ2V0IHN2bi1yZW1vdGUuc3ZuLnRhZ3MtbWF4UmV2KSIKKwkpCisJJworCitjYXQgPj4gc3ZuLWF1dGhvcnMgPDxFT0YKK2VlID0gRUVFRUVFRSBFRUVFRUVFIDxlZUBleGFtcGxlLmNvbT4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBjb250aW51ZXMgYWZ0ZXIgYXV0aG9ycy1maWxlIGlzIGZpeGVkJyAnCisJKAorCQljZCBhYS13b3JrICYmCisJCWdpdCBzdm4gZmV0Y2ggLS1hdXRob3JzLWZpbGU9Li4vc3ZuLWF1dGhvcnMgJiYKKwkJdGVzdCA4IC1lcSAiJCh0bXBfY29uZmlnX2dldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcy1tYXhSZXYpIiAmJgorCQl0ZXN0IDggLWVxICIkKHRtcF9jb25maWdfZ2V0IHN2bi1yZW1vdGUuc3ZuLnRhZ3MtbWF4UmV2KSIKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnZnJlc2ggY2xvbmUgd2l0aCBzdm4uYXV0aG9ycy1maWxlIGluIGNvbmZpZycgJworCSgKKwkJcm0gLXIgIiRHSVRfRElSIiAmJgorCQl0ZXN0IHggPSB4IiQoZ2l0IGNvbmZpZyBzdm4uYXV0aG9yc2ZpbGUpIiAmJgorCQl0ZXN0X2NvbmZpZz0iJEhPTUUiLy5naXRjb25maWcgJiYKKwkJc2FuZV91bnNldCBHSVRfRElSICYmCisJCWdpdCBjb25maWcgLS1nbG9iYWwgXAorCQkgIHN2bi5hdXRob3JzZmlsZSAiJEhPTUUiL3N2bi1hdXRob3JzICYmCisJCXRlc3QgeCIkSE9NRSIvc3ZuLWF1dGhvcnMgPSB4IiQoZ2l0IGNvbmZpZyBzdm4uYXV0aG9yc2ZpbGUpIiAmJgorCQlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgZ2l0Y29uZmlnLmNsb25lICYmCisJCWNkIGdpdGNvbmZpZy5jbG9uZSAmJgorCQlnaXQgbG9nID5hY3R1YWwgJiYKKwkJbnJfZXg9JChncmVwICJeQXV0aG9yOi4qZXhhbXBsZS5jb20iIGFjdHVhbCB8IHdjIC1sKSAmJgorCQlnaXQgcmV2LWxpc3QgSEVBRCA+YWN0dWFsICYmCisJCW5yX3Jldj0kKHdjIC1sIDxhY3R1YWwpICYmCisJCXRlc3QgJG5yX3JldiAtZXEgJG5yX2V4CisJKQorJworCitjYXQgPj4gc3ZuLWF1dGhvcnMgPDxFT0YKK2ZmID0gRkZGRkZGRiBGRkZGRkZGIDw+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9ycy1maWxlIGltcG9ydGVkIHVzZXIgd2l0aG91dCBlbWFpbCcgJworCXN2bl9jbWQgbWtkaXIgLW0gYWEvYnJhbmNoZXMvZmYgLS11c2VybmFtZSBmZiAiJHN2bnJlcG8vYWEvYnJhbmNoZXMvZmYiICYmCisJKAorCQljZCBhYS13b3JrICYmCisJCWdpdCBzdm4gZmV0Y2ggLS1hdXRob3JzLWZpbGU9Li4vc3ZuLWF1dGhvcnMgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvb3JpZ2luL2ZmIHwgXAorCQkgIGdyZXAgIl5hdXRob3IgRkZGRkZGRiBGRkZGRkZGIDw+ICIKKwkpCisJJworCit0ZXN0X2RlYnVnICdHSVRfRElSPWdpdGNvbmZpZy5jbG9uZS8uZ2l0IGdpdCBsb2cnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzMS1naXQtc3ZuLWVtcHR5LXN5bWxpbmsuc2ggYi90L3Q5MTMxLWdpdC1zdm4tZW1wdHktc3ltbGluay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYmY0MjU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzMS1naXQtc3ZuLWVtcHR5LXN5bWxpbmsuc2gKQEAgLTAsMCArMSwxMTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHRoYXQgZ2l0IGhhbmRsZXMgYW4gc3ZuIHJlcG9zaXRvcnkgd2l0aCBlbXB0eSBzeW1saW5rcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2biBkdW1wZmlsZScgJworCXN2bmFkbWluIGxvYWQgIiRyYXdzdm5yZXBvIiA8PEVPRgorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogNjA3ODBmOWEtN2RmNS00M2I0LTgzYWItNjBlMmMwNjczZWY3CisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTExLTI2VDA3OjE3OjI3LjU5MDU3N1oKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMQorQ29udGVudC1sZW5ndGg6IDExMQorCitLIDcKK3N2bjpsb2cKK1YgNAordGVzdAorSyAxMAorc3ZuOmF1dGhvcgorViAxMgorbm9ybWFscGVyc29uCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTExLTI2VDA3OjE4OjAzLjUxMTgzNloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJhcgorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzMworVGV4dC1jb250ZW50LWxlbmd0aDogMAorVGV4dC1jb250ZW50LW1kNTogZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UKK0NvbnRlbnQtbGVuZ3RoOiAzMworCitLIDExCitzdm46c3BlY2lhbAorViAxCisqCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjEKK0NvbnRlbnQtbGVuZ3RoOiAxMjEKKworSyA3Citzdm46bG9nCitWIDEzCitiYXIgPT4gZG9pbmsKKworSyAxMAorc3ZuOmF1dGhvcgorViAxMgorbm9ybWFscGVyc29uCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTExLTI3VDAzOjU1OjMxLjYwMTY3MloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJhcgorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LW1kNTogOTJjYTRmZTdhOTcyMWY4NzdmNzY1YzI1MmRjZDY2YzkKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitsaW5rIGRvaW5rCisKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB1c2luZyBnaXQgc3ZuJyAnZ2l0IHN2biBjbG9uZSAtcjEgIiRzdm5yZXBvIiB4JwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5hYmxlIGJyb2tlbiBzeW1saW5rIHdvcmthcm91bmQnIFwKKyAgJyhjZCB4ICYmIGdpdCBjb25maWcgc3ZuLmJyb2tlblN5bWxpbmtXb3JrYXJvdW5kIHRydWUpJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImJhciIgaXMgYW4gZW1wdHkgZmlsZScgJ3Rlc3RfbXVzdF9iZV9lbXB0eSB4L2JhcicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAiYmFyIiA9PiBzeW1saW5rIGZpeCBmcm9tIHN2bicgXAorCQknKGNkIHggJiYgZ2l0IHN2biByZWJhc2UpJwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnImJhciIgYmVjb21lcyBhIHN5bWxpbmsnICd0ZXN0IC1oIHgvYmFyJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHVzaW5nIGdpdCBzdm4nICdnaXQgc3ZuIGNsb25lIC1yMSAiJHN2bnJlcG8iIHknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhYmxlIGJyb2tlbiBzeW1saW5rIHdvcmthcm91bmQnIFwKKyAgJyhjZCB5ICYmIGdpdCBjb25maWcgc3ZuLmJyb2tlblN5bWxpbmtXb3JrYXJvdW5kIGZhbHNlKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJiYXIiIGlzIGFuIGVtcHR5IGZpbGUnICd0ZXN0X211c3RfYmVfZW1wdHkgeS9iYXInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgImJhciIgPT4gc3ltbGluayBmaXggZnJvbSBzdm4nIFwKKwkJJyhjZCB5ICYmIGdpdCBzdm4gcmViYXNlKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJiYXIiIGRvZXMgbm90IGJlY29tZSBhIHN5bWxpbmsnICchIHRlc3QgLUwgeS9iYXInCisKKyMgc3ZuLmJyb2tlblN5bWxpbmtXb3JrYXJvdW5kIGlzIHVuc2V0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB1c2luZyBnaXQgc3ZuJyAnZ2l0IHN2biBjbG9uZSAtcjEgIiRzdm5yZXBvIiB6JwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImJhciIgaXMgYW4gZW1wdHkgZmlsZScgJ3Rlc3RfbXVzdF9iZV9lbXB0eSB6L2JhcicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAiYmFyIiA9PiBzeW1saW5rIGZpeCBmcm9tIHN2bicgXAorCQknKGNkIHogJiYgZ2l0IHN2biByZWJhc2UpJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImJhciIgZG9lcyBub3QgYmVjb21lIGEgc3ltbGluaycgJyEgdGVzdCAtTCB6L2JhcicKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzItZ2l0LXN2bi1icm9rZW4tc3ltbGluay5zaCBiL3QvdDkxMzItZ2l0LXN2bi1icm9rZW4tc3ltbGluay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZWNlZmZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzMi1naXQtc3ZuLWJyb2tlbi1zeW1saW5rLnNoCkBAIC0wLDAgKzEsMTAyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB0aGF0IGdpdCBoYW5kbGVzIGFuIHN2biByZXBvc2l0b3J5IHdpdGggZW1wdHkgc3ltbGlua3MnCisKKy4gLi9saWItZ2l0LXN2bi5zaAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcGZpbGUnICcKKwlzdm5hZG1pbiBsb2FkICIkcmF3c3ZucmVwbyIgPDxFT0YKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IDYwNzgwZjlhLTdkZjUtNDNiNC04M2FiLTYwZTJjMDY3M2VmNworCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0xMS0yNlQwNzoxNzoyNy41OTA1NzdaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTEKK0NvbnRlbnQtbGVuZ3RoOiAxMTEKKworSyA3Citzdm46bG9nCitWIDQKK3Rlc3QKK0sgMTAKK3N2bjphdXRob3IKK1YgMTIKK25vcm1hbHBlcnNvbgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0xMS0yNlQwNzoxODowMy41MTE4MzZaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBiYXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMzMKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDkxMmVjODAzYjJjZTQ5ZTRhNTQxMDY4ZDQ5NWFiNTcwCitDb250ZW50LWxlbmd0aDogMzcKKworSyAxMQorc3ZuOnNwZWNpYWwKK1YgMQorKgorUFJPUFMtRU5ECithc2RmCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAxMworYmFyID0+IGRvaW5rCisKK0sgMTAKK3N2bjphdXRob3IKK1YgMTIKK25vcm1hbHBlcnNvbgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0xMS0yN1QwMzo1NTozMS42MDE2NzJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBiYXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1tZDU6IDkyY2E0ZmU3YTk3MjFmODc3Zjc2NWMyNTJkY2Q2NmM5CitDb250ZW50LWxlbmd0aDogMTAKKworbGluayBkb2luaworCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgZ2l0IHN2bicgJ2dpdCBzdm4gY2xvbmUgLXIxICIkc3ZucmVwbyIgeCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnImJhciIgaXMgYSBzeW1saW5rIHRoYXQgcG9pbnRzIHRvICJhc2RmIicgJworCXRlc3QgLUwgeC9iYXIgJiYKKwkoY2QgeCAmJiB0ZXN0IHhhc2RmID0geCIkKGdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6YmFyKSIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAiYmFyIiA9PiBzeW1saW5rIGZpeCBmcm9tIHN2bicgJworCShjZCB4ICYmIGdpdCBzdm4gcmViYXNlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICciYmFyIiByZW1haW5zIGEgcHJvcGVyIHN5bWxpbmsnICcKKwl0ZXN0IC1MIHgvYmFyICYmCisJKGNkIHggJiYgdGVzdCB4ZG9pbmsgPSB4IiQoZ2l0IGNhdC1maWxlIGJsb2IgSEVBRDpiYXIpIikKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTMzLWdpdC1zdm4tbmVzdGVkLWdpdC1yZXBvLnNoIGIvdC90OTEzMy1naXQtc3ZuLW5lc3RlZC1naXQtcmVwby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mODk0ODYwCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzMy1naXQtc3ZuLW5lc3RlZC1naXQtcmVwby5zaApAQCAtMCwwICsxLDEwMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBwcm9wZXJ0eSB0ZXN0cycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvIHdpdGggYSBnaXQgcmVwbyBpbnNpZGUgaXQnICcKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgcyAmJgorCSgKKwkJY2QgcyAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0IC1mIC5naXQvSEVBRCAmJgorCQk+IC5naXQvYSAmJgorCQllY2hvIGEgPiBhICYmCisJCXN2bl9jbWQgYWRkIC5naXQgYSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY3JlYXRlIGEgbmVzdGVkIGdpdCByZXBvIiAmJgorCQlzdm5fY21kIHVwICYmCisJCWVjaG8gaGkgPj4gLmdpdC9hICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJtb2RpZnkgLmdpdC9hIiAmJgorCQlzdm5fY21kIHVwCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBhbiBTVk4gcmVwbyBjb250YWluaW5nIGEgZ2l0IHJlcG8nICcKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgZyAmJgorCWVjaG8gYSA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBnL2EKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2YgLmdpdCcgJworCSgKKwkJY2QgcyAmJgorCQllY2hvIGIgPj4gYSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2YgLmdpdCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiAuZ2l0IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8nICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJZWNobyBhID4gZXhwZWN0ICYmCisJCWVjaG8gYiA+PiBleHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGEgJiYKKwkJcm0gZXhwZWN0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIC5naXQnICcKKwkoCisJCWNkIHMgJiYKKwkJZ2l0IGFkZCBhICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBhIGluc2lkZSBhbiBTVk4gcmVwbyIgJiYKKwkJZ2l0IGxvZyAmJgorCQlzdm5fY21kIGFkZCAtLWZvcmNlIC5naXQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2YgLmdpdCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIC5naXQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbycgJworCSgKKwkJY2QgZyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAmJgorCQllY2hvIGEgPiBleHBlY3QgJiYKKwkJZWNobyBiID4+IGV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYSAmJgorCQlybSBleHBlY3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIC5naXQnICcKKwkoCisJCWNkIHMgJiYKKwkJZWNobyBjID4+IGEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBhIGluc2lkZSBhbiBTVk4gcmVwbyIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIC5naXQiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgLmdpdCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvIGFnYWluJyAnCisJKAorCQljZCBnICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCWVjaG8gYSA+IGV4cGVjdCAmJgorCQllY2hvIGIgPj4gZXhwZWN0ICYmCisJCWVjaG8gYyA+PiBleHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGEgJiYKKwkJcm0gZXhwZWN0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzQtZ2l0LXN2bi1pZ25vcmUtcGF0aHMuc2ggYi90L3Q5MTM0LWdpdC1zdm4taWdub3JlLXBhdGhzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmZjQ5YzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM0LWdpdC1zdm4taWdub3JlLXBhdGhzLnNoCkBAIC0wLDAgKzEsMTQ3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IFZpdGFseSBTaHVrZWxhCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBwcm9wZXJ0eSB0ZXN0cycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0IHJlcG9zaXRvcnknICcKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgcyAmJgorCSgKKwkJY2QgcyAmJgorCQlta2RpciBxcXEgd3d3ICYmCisJCWVjaG8gdGVzdF9xcXEgPiBxcXEvdGVzdF9xcXEudHh0ICYmCisJCWVjaG8gdGVzdF93d3cgPiB3d3cvdGVzdF93d3cudHh0ICYmCisJCXN2bl9jbWQgYWRkIHFxcSAmJgorCQlzdm5fY21kIGFkZCB3d3cgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImNyZWF0ZSBzb21lIGZpbGVzIiAmJgorCQlzdm5fY21kIHVwICYmCisJCWVjaG8gaGkgPj4gd3d3L3Rlc3Rfd3d3LnR4dCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAibW9kaWZ5IHd3dy90ZXN0X3d3dy50eHQiICYmCisJCXN2bl9jbWQgdXAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGFuIFNWTiByZXBvc2l0b3J5IHdpdGggaWdub3JlZCB3d3cgZGlyZWN0b3J5JyAnCisJZ2l0IHN2biBjbG9uZSAtLWlnbm9yZS1wYXRocz0iXnd3dyIgIiRzdm5yZXBvIiBnICYmCisJZWNobyB0ZXN0X3FxcSA+IGV4cGVjdCAmJgorCWZvciBpIGluIGcvKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZXhwZWN0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0K2ZldGNoIGFuIFNWTiByZXBvc2l0b3J5IHdpdGggaWdub3JlZCB3d3cgZGlyZWN0b3J5JyAnCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgYyAmJgorCSggY2QgYyAmJiBnaXQgc3ZuIGZldGNoIC0taWdub3JlLXBhdGhzPSJed3d3IiApICYmCisJcm0gZXhwZWN0MiAmJgorCWVjaG8gdGVzdF9xcXEgPiBleHBlY3QgJiYKKwlmb3IgaSBpbiBjLyovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJdGVzdF9jbXAgZXhwZWN0IGV4cGVjdDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGlnbm9yZS1wYXRocyBjb25maWcgc2F2ZWQgYnkgY2xvbmUnICcKKwkoCisJICAgIGNkIGcgJiYKKwkgICAgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5pZ25vcmUtcGF0aHMgfCBmZ3JlcCAid3d3IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2Ygd3d3JyAnCisJKAorCQljZCBzICYmCisJCWVjaG8gYiA+PiBxcXEvdGVzdF9xcXEudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiB3d3ciICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2Ygd3d3IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gKGNvbmZpZyBpZ25vcmUpJyAnCisJKAorCQljZCBnICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCXByaW50ZiAidGVzdF9xcXFcbmJcbiIgPiBleHBlY3QgJiYKKwkJZm9yIGkgaW4gKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBleHBlY3QgJiYKKwkJcm0gZXhwZWN0IGV4cGVjdDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvIChvcHRpb24gaWdub3JlKScgJworCSgKKwkJY2QgYyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAtLWlnbm9yZS1wYXRocz0iXnd3dyIgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiBpZ25vcmVkIHd3dycgJworCSgKKwkJY2QgcyAmJgorCQllY2hvIHphcSA+PiB3d3cvdGVzdF93d3cudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIHd3dy90ZXN0X3d3dy50eHQiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiB3d3cvdGVzdF93d3cudHh0IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gKGNvbmZpZyBpZ25vcmUpJyAnCisJKAorCQljZCBnICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCXByaW50ZiAidGVzdF9xcXFcbmJcbiIgPiBleHBlY3QgJiYKKwkJZm9yIGkgaW4gKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBleHBlY3QgJiYKKwkJcm0gZXhwZWN0IGV4cGVjdDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvIChvcHRpb24gaWdub3JlKScgJworCSgKKwkJY2QgYyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAtLWlnbm9yZS1wYXRocz0iXnd3dyIgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgaWdub3JlZCB3d3cnICcKKwkoCisJCWNkIHMgJiYKKwkJZWNobyBjdmYgPj4gd3d3L3Rlc3Rfd3d3LnR4dCAmJgorCQllY2hvIHlnZyA+PiBxcXEvdGVzdF9xcXEudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2UgaW4gYW5kIG91dCBvZiBpZ25vcmVkIHd3dyIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2UgaW4gYW5kIG91dCBvZiBpZ25vcmVkIHd3dyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvIGFnYWluIChjb25maWcgaWdub3JlKScgJworCSgKKwkJY2QgZyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG55Z2dcbiIgPiBleHBlY3QgJiYKKwkJZm9yIGkgaW4gKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBleHBlY3QgJiYKKwkJcm0gZXhwZWN0IGV4cGVjdDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvIGFnYWluIChvcHRpb24gaWdub3JlKScgJworCSgKKwkJY2QgYyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAtLWlnbm9yZS1wYXRocz0iXnd3dyIgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxueWdnXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzUtZ2l0LXN2bi1tb3ZlZC1icmFuY2gtZW1wdHktZmlsZS5zaCBiL3QvdDkxMzUtZ2l0LXN2bi1tb3ZlZC1icmFuY2gtZW1wdHktZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZjgwYjIxCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzNS1naXQtc3ZuLW1vdmVkLWJyYW5jaC1lbXB0eS1maWxlLnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IG1vdmVkIHN2biBicmFuY2ggd2l0aCBtaXNzaW5nIGVtcHR5IGZpbGVzJworCisuIC4vbGliLWdpdC1zdm4uc2gKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIGR1bXBmaWxlJyAgJworCXN2bmFkbWluIGxvYWQgIiRyYXdzdm5yZXBvIiA8ICIke1RFU1RfRElSRUNUT1JZfS90OTEzNS9zdm4uZHVtcCIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHVzaW5nIGdpdCBzdm4nICdnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIgeCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0aGF0IGIxIGV4aXN0cyBhbmQgaXMgZW1wdHknICcKKwkoCisJCWNkIHggJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vYnJhbmNoLWMgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGIxCisJKQorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTM1L3N2bi5kdW1wIGIvdC90OTEzNS9zdm4uZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTFjMGNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzNS9zdm4uZHVtcApAQCAtMCwwICsxLDE5MiBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogMWY4MGU5MTktZTllMy00ZDgwLWEzYWUtZDlmMjEwOTVlMjdiCisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTEwVDE5OjIzOjE2LjQyNDAyN1oKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMworQ29udGVudC1sZW5ndGg6IDEyMworCitLIDcKK3N2bjpsb2cKK1YgMjAKK2luaXQgc3RhbmRhcmQgbGF5b3V0CitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTEwVDE5OjIzOjE3LjE5NTA3MloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMTgKK2JyYW5jaC1iIG9mZiB0cnVuaworSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0xMFQxOToyMzoxOS4xNjAwOTVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9icmFuY2gtYgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzNAorQ29udGVudC1sZW5ndGg6IDM0CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDMKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMAorQ29udGVudC1sZW5ndGg6IDEyMAorCitLIDcKK3N2bjpsb2cKK1YgMTcKK2FkZCBlbXB0eSBmaWxlIGIxCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTEwVDE5OjIzOjIwLjE5NDU2OFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2JyYW5jaC1iL2IxCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCitUZXh0LWNvbnRlbnQtbWQ1OiBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViA4CiticmFuY2gtYworSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0xMFQxOToyMzoyMS4xNjkxMDBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9icmFuY2gtYworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiA1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjYKK0NvbnRlbnQtbGVuZ3RoOiAxMjYKKworSyA3Citzdm46bG9nCitWIDIzCitvb3BzLCB3cm9uZyBicmFuY2hwb2ludAorSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0xMFQxOToyMzoyMS4yNTM1NTdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9icmFuY2gtYworTm9kZS1hY3Rpb246IGRlbGV0ZQorCisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTI3CitDb250ZW50LWxlbmd0aDogMTI3CisKK0sgNworc3ZuOmxvZworViAyNAorYnJhbmNoLWMgb2ZmIG9mIGJyYW5jaC1iCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTEwVDE5OjIzOjIxLjMxNDY1OVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2JyYW5jaC1jCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDUKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvYnJhbmNoLWIKK1Byb3AtY29udGVudC1sZW5ndGg6IDM0CitDb250ZW50LWxlbmd0aDogMzQKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAwCisKK1BST1BTLUVORAorCisKZGlmZiAtLWdpdCBhL3QvdDkxMzYtZ2l0LXN2bi1yZWNyZWF0ZWQtYnJhbmNoLWVtcHR5LWZpbGUuc2ggYi90L3Q5MTM2LWdpdC1zdm4tcmVjcmVhdGVkLWJyYW5jaC1lbXB0eS1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczM2QxNmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM2LWdpdC1zdm4tcmVjcmVhdGVkLWJyYW5jaC1lbXB0eS1maWxlLnNoCkBAIC0wLDAgKzEsMTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHJlY3JlYXRlZCBzdm4gYnJhbmNoIHdpdGggZW1wdHkgZmlsZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcGZpbGUnICAnCisJc3ZuYWRtaW4gbG9hZCAiJHJhd3N2bnJlcG8iIDwgIiR7VEVTVF9ESVJFQ1RPUll9L3Q5MTM2L3N2bi5kdW1wIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgZ2l0IHN2bicgJ2dpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIiB4JworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzYvc3ZuLmR1bXAgYi90L3Q5MTM2L3N2bi5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMWNlMGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM2L3N2bi5kdW1wCkBAIC0wLDAgKzEsMTkyIEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBlZWNhZTAyMS04ZjE2LTQ4ZGEtOTY5ZC03OWJlYjhhZTZlYTUKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMjJUMDA6NTA6NTYuMjkyODkwWgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTA2CitDb250ZW50LWxlbmd0aDogMTA2CisKK0sgNworc3ZuOmxvZworViA0Citpbml0CitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTIyVDAwOjUwOjU3LjE5MjM4NFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRhZ3MKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMAorVGV4dC1jb250ZW50LW1kNTogZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwNQorQ29udGVudC1sZW5ndGg6IDEwNQorCitLIDcKK3N2bjpsb2cKK1YgMworMS4wCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTIyVDAwOjUwOjU4LjEyNDcyNFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRhZ3MvMS4wCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDMKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMQorQ29udGVudC1sZW5ndGg6IDExMQorCitLIDcKK3N2bjpsb2cKK1YgOQorMS4wLjEtYmFkCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTIyVDAwOjUwOjU4LjE1MTcyN1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRhZ3MvMS4wLjEKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0YWdzLzEuMAorCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTExCitDb250ZW50LWxlbmd0aDogMTExCisKK0sgNworc3ZuOmxvZworViA5CitXcm9uZyB0YWcKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMjJUMDA6NTA6NTguMTY3NDI3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdGFncy8xLjAuMQorTm9kZS1hY3Rpb246IGRlbGV0ZQorCisKK1JldmlzaW9uLW51bWJlcjogNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTEzCitDb250ZW50LWxlbmd0aDogMTEzCisKK0sgNworc3ZuOmxvZworViAxMAorMS4wLWJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0yMlQwMDo1MDo1OC4xODQ0OThaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy8xLjAKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogNAorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0YWdzLzEuMAorCisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTEzCitDb250ZW50LWxlbmd0aDogMTEzCisKK0sgNworc3ZuOmxvZworViAxMAorMS4wLjEtZ29vZAorSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0yMlQwMDo1MDo1OC4yMDA2OTVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0YWdzLzEuMC4xCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDUKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvMS4wCisKKwpkaWZmIC0tZ2l0IGEvdC90OTEzNy1naXQtc3ZuLWRjb21taXQtY2xvYmJlci1zZXJpZXMuc2ggYi90L3Q5MTM3LWdpdC1zdm4tZGNvbW1pdC1jbG9iYmVyLXNlcmllcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNjdiMTViCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzNy1naXQtc3ZuLWRjb21taXQtY2xvYmJlci1zZXJpZXMuc2gKQEAgLTAsMCArMSw2MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBFcmljIFdvbmcKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZGNvbW1pdCBjbG9iYmVyIHNlcmllcycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICcKKwlta2RpciBpbXBvcnQgJiYKKwkoY2QgaW1wb3J0ICYmCisJYXdrICJCRUdJTiB7IGZvciAoaSA9IDE7IGkgPCA2NDsgaSsrKSB7IHByaW50IGkgfSB9IiA+IGZpbGUgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iCisJKSAmJgorCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCXRlc3QgLWUgZmlsZQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnKHN1cHBvc2VkbHkpIG5vbi1jb25mbGljdGluZyBjaGFuZ2UgZnJvbSBTVk4nICcKKwl0ZXN0IHgiJChzZWQgLW4gLWUgNThwIDwgZmlsZSkiID0geDU4ICYmCisJdGVzdCB4IiQoc2VkIC1uIC1lIDYxcCA8IGZpbGUpIiA9IHg2MSAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB0bXAgJiYKKwkoY2QgdG1wICYmCisJCXBlcmwgLWkuYmFrIC1wIC1lICJzL141OCQvNTU4OC8iIGZpbGUgJiYKKwkJcGVybCAtaS5iYWsgLXAgLWUgInMvXjYxJC82NjExLyIgZmlsZSAmJgorCQlwb2tlIGZpbGUgJiYKKwkJdGVzdCB4IiQoc2VkIC1uIC1lIDU4cCA8IGZpbGUpIiA9IHg1NTg4ICYmCisJCXRlc3QgeCIkKHNlZCAtbiAtZSA2MXAgPCBmaWxlKSIgPSB4NjYxMSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiNTggPT4gNTU4OCwgNjEgPT4gNjYxMSIKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzb21lIHVucmVsYXRlZCBjaGFuZ2VzIHRvIGdpdCcgIgorCWVjaG8gaGkgPiBsaWZlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBsaWZlICYmCisJZ2l0IGNvbW1pdCAtbSBoaS1saWZlICYmCisJZWNobyBieWUgPj4gbGlmZSAmJgorCWdpdCBjb21taXQgLW0gYnllLWxpZmUgbGlmZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIGZpbGUgYnV0IGluIHVucmVsYXRlZCBhcmVhJyAiCisJdGVzdCB4XCJcJChzZWQgLW4gLWUgNHAgPCBmaWxlKVwiID0geDQgJiYKKwl0ZXN0IHhcIlwkKHNlZCAtbiAtZSA3cCA8IGZpbGUpXCIgPSB4NyAmJgorCXBlcmwgLWkuYmFrIC1wIC1lICdzL140XCQvNDQ0NC8nIGZpbGUgJiYKKwlwZXJsIC1pLmJhayAtcCAtZSAncy9eN1wkLzc3NzcvJyBmaWxlICYmCisJdGVzdCB4XCJcJChzZWQgLW4gLWUgNHAgPCBmaWxlKVwiID0geDQ0NDQgJiYKKwl0ZXN0IHhcIlwkKHNlZCAtbiAtZSA3cCA8IGZpbGUpXCIgPSB4Nzc3NyAmJgorCWdpdCBjb21taXQgLW0gJzQgPT4gNDQ0NCwgNyA9PiA3Nzc3JyBmaWxlICYmCisJZ2l0IHN2biBkY29tbWl0ICYmCisJc3ZuX2NtZCB1cCB0bXAgJiYKKwljZCB0bXAgJiYKKwkJdGVzdCB4XCJcJChzZWQgLW4gLWUgNHAgPCBmaWxlKVwiID0geDQ0NDQgJiYKKwkJdGVzdCB4XCJcJChzZWQgLW4gLWUgN3AgPCBmaWxlKVwiID0geDc3NzcgJiYKKwkJdGVzdCB4XCJcJChzZWQgLW4gLWUgNThwIDwgZmlsZSlcIiA9IHg1NTg4ICYmCisJCXRlc3QgeFwiXCQoc2VkIC1uIC1lIDYxcCA8IGZpbGUpXCIgPSB4NjYxMQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0ZW1wdCB0byBkY29tbWl0IHdpdGggYSBkaXJ0eSBpbmRleCcgJworCWVjaG8gZm9vID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZGNvbW1pdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzgtZ2l0LXN2bi1hdXRob3JzLXByb2cuc2ggYi90L3Q5MTM4LWdpdC1zdm4tYXV0aG9ycy1wcm9nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAyN2I0MTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM4LWdpdC1zdm4tYXV0aG9ycy1wcm9nLnNoCkBAIC0wLDAgKzEsMTA3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZywgTWFyayBMb2RhdG8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBhdXRob3JzIHByb2cgdGVzdHMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit3cml0ZV9zY3JpcHQgc3ZuLWF1dGhvcnMtcHJvZyAiJFBFUkxfUEFUSCIgPDwtXEVPRgorCSRfID0gc2hpZnQ7CisJaWYgKHMvLWhlcm1pdC8vKSB7CisJCXByaW50ICIkXyA8PlxuIjsKKwl9IGVsc2lmIChzLy1zdWIkLy8pICB7CisJCXByaW50ICIkXyA8JF9cQHN1Yi5leGFtcGxlLmNvbT5cbiI7CisJfSBlbHNlIHsKKwkJcHJpbnQgIiRfIDwkX1xAZXhhbXBsZS5jb20+XG4iOworCX0KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdm4tYXV0aG9ycyBzZXR1cCcgJworCWNhdCA+c3ZuLWF1dGhvcnMgPDwtXEVPRgorCWZmID0gRkZGRkZGRiBGRkZGRkZGIDxmRmZAb3RoZXIuZXhhbXBsZS5jb20+CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKKwlmb3IgaSBpbiBhYSBiYiBjYy1zdWIgZGQtc3ViIGVlLWZvbyBmZgorCWRvCisJCXN2biBta2RpciAtbSAkaSAtLXVzZXJuYW1lICRpICIkc3ZucmVwbyIvJGkKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBhdXRob3JzIHdpdGggcHJvZyBhbmQgZmlsZScgJworCWdpdCBzdm4gY2xvbmUgLS1hdXRob3JzLXByb2c9Li9zdm4tYXV0aG9ycy1wcm9nIFwKKwkgICAgLS1hdXRob3JzLWZpbGU9c3ZuLWF1dGhvcnMgIiRzdm5yZXBvIiB4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydGVkIDYgcmV2aXNpb25zIHN1Y2Nlc3NmdWxseScgJworCSgKKwkJY2QgeCAmJgorCQlnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL2dpdC1zdm4gPmFjdHVhbCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9ycy1wcm9nIHJhbiBjb3JyZWN0bHknICcKKwkoCisJCWNkIHggJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2bn4xID5hY3R1YWwgJiYKKwkJZ3JlcCAiXmF1dGhvciBlZS1mb28gPGVlLWZvb0BleGFtcGxlXC5jb20+ICIgYWN0dWFsICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MiA+YWN0dWFsICYmCisJCWdyZXAgIl5hdXRob3IgZGQgPGRkQHN1YlwuZXhhbXBsZVwuY29tPiAiIGFjdHVhbCAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjMgPmFjdHVhbCAmJgorCQlncmVwICJeYXV0aG9yIGNjIDxjY0BzdWJcLmV4YW1wbGVcLmNvbT4gIiBhY3R1YWwgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2bn40ID5hY3R1YWwgJiYKKwkJZ3JlcCAiXmF1dGhvciBiYiA8YmJAZXhhbXBsZVwuY29tPiAiIGFjdHVhbCAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjUgPmFjdHVhbCAmJgorCQlncmVwICJeYXV0aG9yIGFhIDxhYUBleGFtcGxlXC5jb20+ICIgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRob3JzLWZpbGUgb3ZlcnJvZGUgYXV0aG9ycy1wcm9nJyAnCisJKAorCQljZCB4ICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm4gPmFjdHVhbCAmJgorCQlncmVwICJeYXV0aG9yIEZGRkZGRkYgRkZGRkZGRiA8ZkZmQG90aGVyXC5leGFtcGxlXC5jb20+ICIgYWN0dWFsCisJKQorJworCitnaXQgLS1naXQtZGlyPXgvLmdpdCBjb25maWcgLS11bnNldCBzdm4uYXV0aG9yc2ZpbGUKK2dpdCAtLWdpdC1kaXI9eC8uZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi5hdXRob3JzcHJvZworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRob3JzLXByb2cgaW1wb3J0ZWQgdXNlciB3aXRob3V0IGVtYWlsJyAnCisJc3ZuIG1rZGlyIC1tIGdnIC0tdXNlcm5hbWUgZ2ctaGVybWl0ICIkc3ZucmVwbyIvZ2cgJiYKKwkoCisJCWNkIHggJiYKKwkJZ2l0IHN2biBmZXRjaCAtLWF1dGhvcnMtcHJvZz0uLi9zdm4tYXV0aG9ycy1wcm9nICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm4gfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBnZyA8PiAiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnRlZCB3aXRob3V0IGF1dGhvcnMtcHJvZyBhbmQgYXV0aG9ycy1maWxlJyAnCisJc3ZuIG1rZGlyIC1tIGhoIC0tdXNlcm5hbWUgaGggIiRzdm5yZXBvIi9oaCAmJgorCSgKKwkJdXVpZD0kKHN2biBpbmZvICIkc3ZucmVwbyIgfAorCQkJc2VkIC1uICJzL15SZXBvc2l0b3J5IFVVSUQ6IC8vcCIpICYmCisJCWNkIHggJiYKKwkJZ2l0IHN2biBmZXRjaCAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZuIHwgXAorCQkgIGdyZXAgIl5hdXRob3IgaGggPGhoQCR1dWlkPiAiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRob3JzLXByb2cgaGFuZGxlZCBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdXNlcm5hbWUnICcKKwlzdm4gbWtkaXIgLW0gYmFkIC0tdXNlcm5hbWUgInh5ejsgdG91Y2ggZXZpbCIgIiRzdm5yZXBvIi9iYWQgJiYKKwkoCisJCWNkIHggJiYKKwkJZ2l0IHN2biAtLWF1dGhvcnMtcHJvZz0uLi9zdm4tYXV0aG9ycy1wcm9nIGZldGNoICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm4gPmFjdHVhbCAmJgorCQlncmVwICJeYXV0aG9yIHh5ejsgdG91Y2ggZXZpbCA8eHl6OyB0b3VjaCBldmlsQGV4YW1wbGVcLmNvbT4gIiBhY3R1YWwgJiYKKwkJISB0ZXN0IC1mIGV2aWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzOS1naXQtc3ZuLW5vbi11dGY4LWNvbW1pdGVuY29kaW5nLnNoIGIvdC90OTEzOS1naXQtc3ZuLW5vbi11dGY4LWNvbW1pdGVuY29kaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyZDgwYjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM5LWdpdC1zdm4tbm9uLXV0ZjgtY29tbWl0ZW5jb2Rpbmcuc2gKQEAgLTAsMCArMSw0NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljIFdvbmcKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biByZWZ1c2VzIHRvIGRjb21taXQgbm9uLVVURjggbWVzc2FnZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCisjIElTTy0yMDIyLUpQIGNhbiBwYXNzIGZvciB2YWxpZCBVVEYtOCwgc28gc2tpcHBpbmcgdGhhdCBpbiB0aGlzIHRlc3QKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNldHVwIiAnCisJCW1rZGlyICRIICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICIkSCB0ZXN0IiAkSCAiJHN2bnJlcG8iLyRIICYmCisJCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIi8kSCAkSAorCScKK2RvbmUKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIGNvbW1pdCBvbiBnaXQgc2lkZSIgJworCSgKKwkJY2QgJEggJiYKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICRIICYmCisJCWdpdCBjaGVja291dCAtYiB0IHJlZnMvcmVtb3Rlcy9naXQtc3ZuICYmCisJCWVjaG8gJEggPkYgJiYKKwkJZ2l0IGFkZCBGICYmCisJCWdpdCBjb21taXQgLWEgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJEgudHh0ICYmCisJCUU9JChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lICJzL15lbmNvZGluZyAvL3AiKSAmJgorCQl0ZXN0ICJ6JEUiID0gInokSCIKKwkpCisJJworZG9uZQorCitmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggZGNvbW1pdCB0byBzdm4iICcKKwkoCisJCWNkICRIICYmCisJCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZGNvbW1pdAorCSkKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0MC1naXQtc3ZuLXJlc2V0LnNoIGIvdC90OTE0MC1naXQtc3ZuLXJlc2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4NTU5MDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQwLWdpdC1zdm4tcmVzZXQuc2gKQEAgLTAsMCArMSw2NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBCZW4gSmFja3NvbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHJlc2V0JworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzICYmCisJKAorCQljZCBzICYmCisJCW1rZGlyIHZpcyAmJgorCQllY2hvIGFsd2F5cyB2aXNpYmxlID4gdmlzL3Zpcy50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgdmlzICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjcmVhdGUgdmlzaWJsZSBmaWxlcyIgJiYKKwkJbWtkaXIgaGlkICYmCisJCWVjaG8gaW5pdGlhbGx5IGhpZGRlbiA+IGhpZC9oaWQudHh0ICYmCisJCXN2bl9jbWQgYWRkIGhpZCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY3JlYXRlIGluaXRpYWxseSBoaWRkZW4gZmlsZXMiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyBtb2QgPj4gdmlzL3Zpcy50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSB2aXMiICYmCisJCXN2bl9jbWQgdXAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIFNWTiByZXBvc2l0b3J5IHdpdGggaGlkZGVuIGRpcmVjdG9yeScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iIGcgJiYKKwkoIGNkIGcgJiYgZ2l0IHN2biBmZXRjaCAtLWlnbm9yZS1wYXRocz0iXmhpZCIgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZnkgaGlkZGVuIGZpbGUgaW4gU1ZOIHJlcG8nICcKKwkoIGNkIHMgJiYKKwkgIGVjaG8gbW9kIGhpZGRlbiA+PiBoaWQvaGlkLnR4dCAmJgorCSAgc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSBoaWQiICYmCisJICBzdm5fY21kIHVwCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmYWlscyBvbiBtb2RpZmllZCBoaWRkZW4gZmlsZScgJworCSggY2QgZyAmJgorCSAgZ2l0IHN2biBmaW5kLXJldiByZWZzL3JlbW90ZXMvZ2l0LXN2biA+IC4uL2V4cGVjdCAmJgorCSAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBmZXRjaCAyPiAuLi9lcnJvcnMgJiYKKwkgIGdpdCBzdm4gZmluZC1yZXYgcmVmcy9yZW1vdGVzL2dpdC1zdm4gPiAuLi9leHBlY3QyICkgJiYKKwlmZ3JlcCAibm90IGZvdW5kIGluIGNvbW1pdCIgZXJyb3JzICYmCisJdGVzdF9jbXAgZXhwZWN0IGV4cGVjdDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgdW53aW5kcyBiYWNrIHRvIHIxJyAnCisJKCBjZCBnICYmCisJICBnaXQgc3ZuIHJlc2V0IC1yMSAmJgorCSAgZ2l0IHN2biBmaW5kLXJldiByZWZzL3JlbW90ZXMvZ2l0LXN2biA+IC4uL2V4cGVjdDIgKSAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGV4cGVjdDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmZXRjaCBzdWNjZWVkcyBub3QgaWdub3JpbmcgYW55IGZpbGVzJyAnCisJKCBjZCBnICYmCisJICBnaXQgc3ZuIGZldGNoICYmCisJICBnaXQgc3ZuIHJlYmFzZSAmJgorCSAgZmdyZXAgIm1vZCBoaWRkZW4iIGhpZC9oaWQudHh0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDEtZ2l0LXN2bi1tdWx0aXBsZS1icmFuY2hlcy5zaCBiL3QvdDkxNDEtZ2l0LXN2bi1tdWx0aXBsZS1icmFuY2hlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZjE2OGEzCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE0MS1naXQtc3ZuLW11bHRpcGxlLWJyYW5jaGVzLnNoCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IE1hcmMgQnJhbmNoYXVkCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gbXVsdGlwbGUgYnJhbmNoIGFuZCB0YWcgcGF0aHMgaW4gdGhlIHN2biByZXBvJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKKwlta2Rpcglwcm9qZWN0IFwKKwkJcHJvamVjdC90cnVuayBcCisJCXByb2plY3QvYl9vbmUgXAorCQlwcm9qZWN0L2JfdHdvIFwKKwkJcHJvamVjdC90YWdzX0EgXAorCQlwcm9qZWN0L3RhZ3NfQiAmJgorCWVjaG8gMSA+IHByb2plY3QvdHJ1bmsvYS5maWxlICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wcm9qZWN0IiAmJgorCXJtIC1yZiBwcm9qZWN0ICYmCisJc3ZuX2NtZCBjcCAtbSAiQnJhbmNoIDEiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJICIkc3ZucmVwby9wcm9qZWN0L2Jfb25lL2ZpcnN0IiAmJgorCXN2bl9jbWQgY3AgLW0gIlRhZyAxIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19BLzEuMCIgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwby9wcm9qZWN0IiBzdm5fcHJvamVjdCAmJgorCSggY2Qgc3ZuX3Byb2plY3QgJiYKKwkJZWNobyAyID4gdHJ1bmsvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSAxIiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiQnJhbmNoIDIiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJCSAiJHN2bnJlcG8vcHJvamVjdC9iX29uZS9zZWNvbmQiICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyAyIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQS8yLjAiICYmCisJCWVjaG8gMyA+IHRydW5rL2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgMiIgdHJ1bmsvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIkJyYW5jaCAzIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJCQkgIiRzdm5yZXBvL3Byb2plY3QvYl90d28vMSIgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDMiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19BLzMuMCIgJiYKKwkJZWNobyA0ID4gdHJ1bmsvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSAzIiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiQnJhbmNoIDQiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJCSAiJHN2bnJlcG8vcHJvamVjdC9iX3R3by8yIiAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgNCIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0EvNC4wIiAmJgorCQlzdm5fY21kIHVwICYmCisJCWVjaG8gNSA+IGJfb25lL2ZpcnN0L2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgNCIgYl9vbmUvZmlyc3QvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyA1IiAiJHN2bnJlcG8vcHJvamVjdC9iX29uZS9maXJzdCIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQi92NSIgJiYKKwkJZWNobyA2ID4gYl9vbmUvc2Vjb25kL2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgNSIgYl9vbmUvc2Vjb25kL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgNiIgIiRzdm5yZXBvL3Byb2plY3QvYl9vbmUvc2Vjb25kIiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19CL3Y2IiAmJgorCQllY2hvIDcgPiBiX3R3by8xL2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgNiIgYl90d28vMS9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDciICIkc3ZucmVwby9wcm9qZWN0L2JfdHdvLzEiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0IvdjciICYmCisJCWVjaG8gOCA+IGJfdHdvLzIvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSA3IiBiX3R3by8yL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgOCIgIiRzdm5yZXBvL3Byb2plY3QvYl90d28vMiIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQi92OCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIG11bHRpcGxlIGJyYW5jaCBhbmQgdGFnIHBhdGhzJyAnCisJZ2l0IHN2biBjbG9uZSAtVCB0cnVuayBcCisJCSAgICAgIC1iIGJfb25lLyogLS1icmFuY2hlcyBiX3R3by8qIFwKKwkJICAgICAgLXQgdGFnc19BLyogLS10YWdzIHRhZ3NfQiBcCisJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0IiBnaXRfcHJvamVjdCAmJgorCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL2ZpcnN0ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zZWNvbmQgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luLzEgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luLzIgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvMS4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzLzIuMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy8zLjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvNC4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzL3Y1ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzL3Y2ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzL3Y3ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzL3Y4CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNdWx0aXBsZSBicmFuY2ggb3IgdGFnIHBhdGhzIHJlcXVpcmUgLWQnICcKKwkoIGNkIGdpdF9wcm9qZWN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gYnJhbmNoIC1tICJObyBuZXcgYnJhbmNoIiBOb3BlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gdGFnIC1tICJObyBuZXcgdGFnIiBUYWdsZXNzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9Ob3BlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzL1RhZ2xlc3MKKwkpICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQlzdm5fY21kIHVwICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGJfb25lL05vcGUgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYl90d28vTm9wZSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0YWdzX0EvVGFnbGVzcyAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0YWdzX0IvVGFnbGVzcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5ldyBicmFuY2hlcyBhbmQgdGFncycgJworCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJZ2l0IHN2biBicmFuY2ggLW0gIk5ldyBicmFuY2ggMSIgLWQgYl9vbmUgTmV3MSApICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQlzdm5fY21kIHVwICYmIHRlc3QgLWUgYl9vbmUvTmV3MS9hLmZpbGUgKSAmJgorCisJKCBjZCBnaXRfcHJvamVjdCAmJgorCQlnaXQgc3ZuIGJyYW5jaCAtbSAiTmV3IGJyYW5jaCAyIiAtZCBiX3R3byBOZXcyICkgJiYKKwkoIGNkIHN2bl9wcm9qZWN0ICYmCisJCXN2bl9jbWQgdXAgJiYgdGVzdCAtZSBiX3R3by9OZXcyL2EuZmlsZSApICYmCisKKwkoIGNkIGdpdF9wcm9qZWN0ICYmCisJCWdpdCBzdm4gYnJhbmNoIC10IC1tICJOZXcgdGFnIDEiIC1kIHRhZ3NfQSBUYWcxICkgJiYKKwkoIGNkIHN2bl9wcm9qZWN0ICYmCisJCXN2bl9jbWQgdXAgJiYgdGVzdCAtZSB0YWdzX0EvVGFnMS9hLmZpbGUgKSAmJgorCisJKCBjZCBnaXRfcHJvamVjdCAmJgorCQlnaXQgc3ZuIHRhZyAtbSAiTmV3IHRhZyAyIiAtZCB0YWdzX0IgVGFnMiApICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQlzdm5fY21kIHVwICYmIHRlc3QgLWUgdGFnc19CL1RhZzIvYS5maWxlICkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQyLWdpdC1zdm4tc2hhbGxvdy1jbG9uZS5zaCBiL3QvdDkxNDItZ2l0LXN2bi1zaGFsbG93LWNsb25lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEzMDczMDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQyLWdpdC1zdm4tc2hhbGxvdy1jbG9uZS5zaApAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHNoYWxsb3cgY2xvbmUnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGVzdCByZXBvc2l0b3J5JyAnCisJc3ZuX2NtZCBta2RpciAtbSAiY3JlYXRlIHN0YW5kYXJkIGxheW91dCIgXAorCSAgIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzICIkc3ZucmVwbyIvdGFncyAmJgorCXN2bl9jbWQgY3AgLW0gImJyYW5jaCBvZmYgdHJ1bmsiIFwKKwkgICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9icmFuY2hlcy9hICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL2JyYW5jaGVzL2EgJiYKKwkoCisJCWNkIGEgJiYKKwkJPiBmb28gJiYKKwkJc3ZuX2NtZCBhZGQgZm9vICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJhZGQgZm9vIgorCSkgJiYKKwltYXliZV9zdGFydF9odHRwZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0cnVuayB3aXRoICItciBIRUFEIicgJworCWdpdCBzdm4gY2xvbmUgLXIgSEVBRCAiJHN2bnJlcG8vdHJ1bmsiIGcgJiYKKwkoIGNkIGcgJiYgZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIC0tdmVyaWZ5IEhFQUQgKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDMtZ2l0LXN2bi1nYy5zaCBiL3QvdDkxNDMtZ2l0LXN2bi1nYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NTk0ZTFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE0My1naXQtc3ZuLWdjLnNoCkBAIC0wLDAgKzEsNTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgUm9iZXJ0IEFsbGFuIFplaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGdjIGJhc2ljIHRlc3RzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZGlyZWN0b3JpZXMgYW5kIHRlc3QgcmVwbycgJworCW1rZGlyIGltcG9ydCAmJgorCW1rZGlyIHRtcCAmJgorCWVjaG8gIlNhbXBsZSB0ZXh0IGZvciBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuIiA+IGltcG9ydC90ZXN0LnR4dCAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIGltcG9ydCAiJHN2bnJlcG8iID4gL2Rldi9udWxsCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3b3JraW5nIGNvcHkgZnJvbSBzdm4nIFwKKwknc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHRlc3Rfd2MnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCBzb21lIHByb3BlcnRpZXMgdG8gY3JlYXRlIGFuIHVuaGFuZGxlZC5sb2cgZmlsZScgJworCSgKKwkJY2QgdGVzdF93YyAmJgorCQlzdm5fY21kIHByb3BzZXQgZm9vIGJhciB0ZXN0LnR4dCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAicHJvcGVydHkgc2V0IgorCSknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NldHVwIHJlcG8nICdnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRmV0Y2ggcmVwbycgJ2dpdCBzdm4gZmV0Y2gnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgYmFja3VwIGNvcHkgb2YgdW5oYW5kbGVkLmxvZycgJworCSBjcCAuZ2l0L3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2bi91bmhhbmRsZWQubG9nIHRtcAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGxlZnRvdmVyIGluZGV4JyAnPiAuZ2l0L3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2bi9pbmRleCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBnYyBydW5zJyAnZ2l0IHN2biBnYycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBpbmRleCByZW1vdmVkJyAnISB0ZXN0IC1mIC5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuL2luZGV4JworCitpZiB0ZXN0IC1yIC5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuL3VuaGFuZGxlZC5sb2cuZ3oKK3RoZW4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGdjIHByb2R1Y2VzIGEgdmFsaWQgZ3ppcCBmaWxlJyAnCisJCSBndW56aXAgLmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4vdW5oYW5kbGVkLmxvZy5negorCQknCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGdjIGRvZXMgbm90IGNoYW5nZSB1bmhhbmRsZWQubG9nIGZpbGVzJyAnCisJIHRlc3RfY21wIC5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuL3VuaGFuZGxlZC5sb2cgdG1wL3VuaGFuZGxlZC5sb2cKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0NC1naXQtc3ZuLW9sZC1yZXZfbWFwLnNoIGIvdC90OTE0NC1naXQtc3ZuLW9sZC1yZXZfbWFwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc2MDBhMzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQ0LWdpdC1zdm4tb2xkLXJldl9tYXAuc2gKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljIFdvbmcKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBvbGQgcmV2X21hcCBwcmVzZXJ2ZCcKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0IHJlcG9zaXRvcnkgd2l0aCBvbGQgbGF5b3V0JyAnCisJbWtkaXIgaSAmJgorCShjZCBpICYmID4gYSkgJiYKKwlzdm5fY21kIGltcG9ydCAtbS0gaSAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJdGVzdCAtZCAuZ2l0L3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2bi8gJiYKKwkhIHRlc3QgLWUgLmdpdC9zdm4vZ2l0LXN2bi8gJiYKKwltdiAuZ2l0L3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2biAuZ2l0L3N2bi8gJiYKKwlybSAtciAuZ2l0L3N2bi9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29sZCBsYXlvdXQgY29udGludWVzIHRvIHdvcmsnICcKKwlzdm5fY21kIGltcG9ydCAtbS0gaSAiJHN2bnJlcG8vYiIgJiYKKwlnaXQgc3ZuIHJlYmFzZSAmJgorCWVjaG8gYSA+PiBiL2EgJiYKKwlnaXQgYWRkIGIvYSAmJgorCWdpdCBjb21taXQgLW0tIC1hICYmCisJZ2l0IHN2biBkY29tbWl0ICYmCisJISB0ZXN0IC1kIC5naXQvc3ZuL3JlZnMvICYmCisJdGVzdCAtZSAuZ2l0L3N2bi9naXQtc3ZuLworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDUtZ2l0LXN2bi1tYXN0ZXItYnJhbmNoLnNoIGIvdC90OTE0NS1naXQtc3ZuLW1hc3Rlci1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2JiZjM0MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDUtZ2l0LXN2bi1tYXN0ZXItYnJhbmNoLnNoCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGluaXRpYWwgbWFzdGVyIGJyYW5jaCBpcyAidHJ1bmsiIGlmIHBvc3NpYmxlJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJworCW1rZGlyIGkgJiYKKwk+IGkvYSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tIHRydW5rIGkgIiRzdm5yZXBvL3RydW5rIiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tIGIvYSBpICIkc3ZucmVwby9icmFuY2hlcy9hIiAmJgorCXN2bl9jbWQgaW1wb3J0IC1tIGIvYiBpICIkc3ZucmVwby9icmFuY2hlcy9iIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGNsb25lIC0tc3RkbGF5b3V0IHNldHMgdXAgdHJ1bmsgYXMgbWFzdGVyJyAnCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8iIGcgJiYKKwkoCisJCWNkIGcgJiYKKwkJdGVzdCB4JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHJ1bmteMCkgPSBcCisJCSAgICAgeCQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3Rlcl4wKQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQ2LWdpdC1zdm4tZW1wdHktZGlycy5zaCBiL3QvdDkxNDYtZ2l0LXN2bi1lbXB0eS1kaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVmOTFjMGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQ2LWdpdC1zdm4tZW1wdHktZGlycy5zaApAQCAtMCwwICsxLDE1OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljIFdvbmcKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBjcmVhdGVzIGVtcHR5IGRpcmVjdG9yaWVzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJworCWZvciBpIGluIGEgYiBjIGQgZC9lIGQvZS9mICJ3ZWlyZCBmaWxlIG5hbWUiCisJZG8KKwkJc3ZuX2NtZCBta2RpciAtbSAibWtkaXIgJGkiICIkc3ZucmVwbyIvIiRpIgorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUnICdnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgY2xvbmVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBkaXJlY3RvcmllcyBleGlzdCcgJworCSgKKwkJY2QgY2xvbmVkICYmCisJCWZvciBpIGluIGEgYiBjIGQgZC9lIGQvZS9mICJ3ZWlyZCBmaWxlIG5hbWUiCisJCWRvCisJCQlpZiAhIHRlc3QgLWQgIiRpIgorCQkJdGhlbgorCQkJCWVjaG8gPiYyICIkaSBkb2VzIG5vdCBleGlzdCIgJiYKKwkJCQlleGl0IDEKKwkJCWZpCisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbiBhdXRvbWtkaXJzIHNldCB0byBmYWxzZScgJworCSgKKwkJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgY2xvbmVkLW5vLW1rZGlycyAmJgorCQljZCBjbG9uZWQtbm8tbWtkaXJzICYmCisJCWdpdCBjb25maWcgc3ZuLXJlbW90ZS5zdm4uYXV0b21rZGlycyBmYWxzZSAmJgorCQlnaXQgc3ZuIGZldGNoICYmCisJCWZvciBpIGluIGEgYiBjIGQgZC9lIGQvZS9mICJ3ZWlyZCBmaWxlIG5hbWUiCisJCWRvCisJCQlpZiB0ZXN0IC1kICIkaSIKKwkJCXRoZW4KKwkJCQllY2hvID4mMiAiJGkgZXhpc3RzIiAmJgorCQkJCWV4aXQgMQorCQkJZmkKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9yZSBlbXB0aW5lc3MnICcKKwlzdm5fY21kIG1rZGlyIC1tICJiYW5nIGJhbmciICAiJHN2bnJlcG8iLyIhICEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gcmViYXNlIGNyZWF0ZXMgZW1wdHkgZGlyZWN0b3J5JyAnCisJKCBjZCBjbG9uZWQgJiYgZ2l0IHN2biByZWJhc2UgKSAmJgorCXRlc3QgLWQgY2xvbmVkLyIhICEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gbWtkaXJzIHJlY3JlYXRlcyBlbXB0eSBkaXJlY3RvcmllcycgJworCSgKKwkJY2QgY2xvbmVkICYmCisJCXJtIC1yICogJiYKKwkJZ2l0IHN2biBta2RpcnMgJiYKKwkJZm9yIGkgaW4gYSBiIGMgZCBkL2UgZC9lL2YgIndlaXJkIGZpbGUgbmFtZSIgIiEgISIKKwkJZG8KKwkJCWlmICEgdGVzdCAtZCAiJGkiCisJCQl0aGVuCisJCQkJZWNobyA+JjIgIiRpIGRvZXMgbm90IGV4aXN0IiAmJgorCQkJCWV4aXQgMQorCQkJZmkKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBta2RpcnMgLXIgd29ya3MnICcKKwkoCisJCWNkIGNsb25lZCAmJgorCQlybSAtciAqICYmCisJCWdpdCBzdm4gbWtkaXJzIC1yNyAmJgorCQlmb3IgaSBpbiBhIGIgYyBkIGQvZSBkL2UvZiAid2VpcmQgZmlsZSBuYW1lIgorCQlkbworCQkJaWYgISB0ZXN0IC1kICIkaSIKKwkJCXRoZW4KKwkJCQllY2hvID4mMiAiJGkgZG9lcyBub3QgZXhpc3QiICYmCisJCQkJZXhpdCAxCisJCQlmaQorCQlkb25lICYmCisKKwkJaWYgdGVzdCAtZCAiISAhIgorCQl0aGVuCisJCQllY2hvID4mMiAiJGkgc2hvdWxkIG5vdCBleGlzdCIgJiYKKwkJCWV4aXQgMQorCQlmaSAmJgorCisJCWdpdCBzdm4gbWtkaXJzIC1yOCAmJgorCQlpZiAhIHRlc3QgLWQgIiEgISIKKwkJdGhlbgorCQkJZWNobyA+JjIgIiRpIG5vdCBleGlzdCIgJiYKKwkJCWV4aXQgMQorCQlmaQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSB0cnVuaycgJworCWZvciBpIGluIHRydW5rIHRydW5rL2EgdHJ1bmsvIndlaXJkIGZpbGUgbmFtZSIKKwlkbworCQlzdm5fY21kIG1rZGlyIC1tICJta2RpciAkaSIgIiRzdm5yZXBvIi8iJGkiCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0cnVuaycgJ2dpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIiB0cnVuaycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgZGlyZWN0b3JpZXMgaW4gdHJ1bmsgZXhpc3QnICcKKwkoCisJCWNkIHRydW5rICYmCisJCWZvciBpIGluIGEgIndlaXJkIGZpbGUgbmFtZSIKKwkJZG8KKwkJCWlmICEgdGVzdCAtZCAiJGkiCisJCQl0aGVuCisJCQkJZWNobyA+JjIgIiRpIGRvZXMgbm90IGV4aXN0IiAmJgorCQkJCWV4aXQgMQorCQkJZmkKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIGEgdG9wLWxldmVsIGRpcmVjdG9yeSBmcm9tIHN2bicgJworCXN2bl9jbWQgcm0gLW0gInJlbW92ZSBkIiAiJHN2bnJlcG8iL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlZCB0b3AtbGV2ZWwgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0JyAnCisJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iIHJlbW92ZWQgJiYKKwl0ZXN0ICEgLWUgcmVtb3ZlZC9kCisKKycKK3VuaGFuZGxlZD0uZ2l0L3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2bi91bmhhbmRsZWQubG9nCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGdjLWVkIGZpbGVzIHdvcmsnICcKKwkoCisJCWNkIHJlbW92ZWQgJiYKKwkJZ2l0IHN2biBnYyAmJgorCQk6IENvbXByZXNzOjpabGliIG1heSBub3QgYmUgYXZhaWxhYmxlICYmCisJCWlmIHRlc3QgLWYgIiR1bmhhbmRsZWQiLmd6CisJCXRoZW4KKwkJCXN2bl9jbWQgbWtkaXIgLW0gZ3ogIiRzdm5yZXBvIi9neiAmJgorCQkJZ2l0IHJlc2V0IC0taGFyZCAkKGdpdCByZXYtbGlzdCBIRUFEIHwgdGFpbCAtMSkgJiYKKwkJCWdpdCBzdm4gcmViYXNlICYmCisJCQl0ZXN0IC1mICIkdW5oYW5kbGVkIi5neiAmJgorCQkJdGVzdCAtZiAiJHVuaGFuZGxlZCIgJiYKKwkJCWZvciBpIGluIGEgYiBjICJ3ZWlyZCBmaWxlIG5hbWUiIGd6ICIhICEiCisJCQlkbworCQkJCWlmICEgdGVzdCAtZCAiJGkiCisJCQkJdGhlbgorCQkJCQllY2hvID4mMiAiJGkgZG9lcyBub3QgZXhpc3QiICYmCisJCQkJCWV4aXQgMQorCQkJCWZpCisJCQlkb25lCisJCWZpCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDctZ2l0LXN2bi1pbmNsdWRlLXBhdGhzLnNoIGIvdC90OTE0Ny1naXQtc3ZuLWluY2x1ZGUtcGF0aHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDI5MmJmOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDctZ2l0LXN2bi1pbmNsdWRlLXBhdGhzLnNoCkBAIC0wLDAgKzEsMTQ5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzIFBhdWwgV2FsbXNsZXkgLSBiYXNlZCBvbiB0OTEzNCBieSBWaXRhbHkgU2h1a2VsYQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHByb3BlcnR5IHRlc3RzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzICYmCisJKAorCQljZCBzICYmCisJCW1rZGlyIHFxcSB3d3cgeHh4ICYmCisJCWVjaG8gdGVzdF9xcXEgPiBxcXEvdGVzdF9xcXEudHh0ICYmCisJCWVjaG8gdGVzdF93d3cgPiB3d3cvdGVzdF93d3cudHh0ICYmCisJCWVjaG8gdGVzdF94eHggPiB4eHgvdGVzdF94eHgudHh0ICYmCisJCXN2bl9jbWQgYWRkIHFxcSAmJgorCQlzdm5fY21kIGFkZCB3d3cgJiYKKwkJc3ZuX2NtZCBhZGQgeHh4ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjcmVhdGUgc29tZSBmaWxlcyIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQllY2hvIGhpID4+IHd3dy90ZXN0X3d3dy50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSB3d3cvdGVzdF93d3cudHh0IiAmJgorCQlzdm5fY21kIHVwCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBhbiBTVk4gcmVwb3NpdG9yeSB3aXRoIGZpbHRlciB0byBpbmNsdWRlIHFxcSBkaXJlY3RvcnknICcKKwlnaXQgc3ZuIGNsb25lIC0taW5jbHVkZS1wYXRocz0icXFxIiAiJHN2bnJlcG8iIGcgJiYKKwllY2hvIHRlc3RfcXFxID4gZXhwZWN0ICYmCisJZm9yIGkgaW4gZy8qLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCXRlc3RfY21wIGV4cGVjdCBleHBlY3QyCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCtmZXRjaCBhbiBTVk4gcmVwb3NpdG9yeSB3aXRoIGluY2x1ZGVkIHFxcSBkaXJlY3RvcnknICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiBjICYmCisJKCBjZCBjICYmIGdpdCBzdm4gZmV0Y2ggLS1pbmNsdWRlLXBhdGhzPSJxcXEiICkgJiYKKwlybSBleHBlY3QyICYmCisJZWNobyB0ZXN0X3FxcSA+IGV4cGVjdCAmJgorCWZvciBpIGluIGMvKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZXhwZWN0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgaW5jbHVkZS1wYXRocyBjb25maWcgc2F2ZWQgYnkgY2xvbmUnICcKKwkoCisJICAgIGNkIGcgJiYKKwkgICAgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5pbmNsdWRlLXBhdGhzIHwgZmdyZXAgInFxcSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIHd3dycgJworCSgKKwkJY2QgcyAmJgorCQllY2hvIGIgPj4gcXFxL3Rlc3RfcXFxLnR4dCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2Ygd3d3IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIHd3dyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvIChjb25maWcgaW5jbHVkZSknICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gKG9wdGlvbiBpbmNsdWRlKScgJworCSgKKwkJY2QgYyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAtLWluY2x1ZGUtcGF0aHM9InFxcSIgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiBpZ25vcmVkIHd3dycgJworCSgKKwkJY2QgcyAmJgorCQllY2hvIHphcSA+PiB3d3cvdGVzdF93d3cudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIHd3dy90ZXN0X3d3dy50eHQiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiB3d3cvdGVzdF93d3cudHh0IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gKGNvbmZpZyBpbmNsdWRlKScgJworCSgKKwkJY2QgZyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyAob3B0aW9uIGluY2x1ZGUpJyAnCisJKAorCQljZCBjICYmCisJCWdpdCBzdm4gcmViYXNlIC0taW5jbHVkZS1wYXRocz0icXFxIiAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2UgaW4gYW5kIG91dCBvZiBpbmNsdWRlZCBxcXEnICcKKwkoCisJCWNkIHMgJiYKKwkJZWNobyBjdmYgPj4gd3d3L3Rlc3Rfd3d3LnR4dCAmJgorCQllY2hvIHlnZyA+PiBxcXEvdGVzdF9xcXEudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2UgaW4gYW5kIG91dCBvZiBpZ25vcmVkIHd3dyIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2UgaW4gYW5kIG91dCBvZiBpZ25vcmVkIHd3dyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvIGFnYWluIChjb25maWcgaW5jbHVkZSknICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxueWdnXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyBhZ2FpbiAob3B0aW9uIGluY2x1ZGUpJyAnCisJKAorCQljZCBjICYmCisJCWdpdCBzdm4gcmViYXNlIC0taW5jbHVkZS1wYXRocz0icXFxIiAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG55Z2dcbiIgPiBleHBlY3QgJiYKKwkJZm9yIGkgaW4gKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBleHBlY3QgJiYKKwkJcm0gZXhwZWN0IGV4cGVjdDIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0OC1naXQtc3ZuLXByb3BzZXQuc2ggYi90L3Q5MTQ4LWdpdC1zdm4tcHJvcHNldC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMDI2MzkwCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE0OC1naXQtc3ZuLXByb3BzZXQuc2gKQEAgLTAsMCArMSw5NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBbGZyZWQgUGVybHN0ZWluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcHJvcHNldCB0ZXN0cycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK2Zvb19zdWJkaXIyPSJzdWJkaXIvc3ViZGlyMi9mb29fc3ViZGlyMiIKKworc2V0IC1lCitta2RpciBpbXBvcnQgJiYKKyhzZXQgLWUgOyBjZCBpbXBvcnQKKwlta2RpciBzdWJkaXIKKwlta2RpciBzdWJkaXIvc3ViZGlyMgorCXRvdWNoIGZvbyAJCSMgZm9yICdhZGQgcHJvcHMgdG9wIGxldmVsJworCXRvdWNoIHN1YmRpci9mb29fc3ViZGlyICMgZm9yICdhZGQgcHJvcHMgcmVsYXRpdmUnCisJdG91Y2ggIiRmb29fc3ViZGlyMiIJIyBmb3IgJ2FkZCBwcm9wcyBzdWJkaXInCisJc3ZuX2NtZCBpbXBvcnQgLW0gJ2ltcG9ydCBmb3IgZ2l0IHN2bicgLiAiJHN2bnJlcG8iID4vZGV2L251bGwKKykKK3JtIC1yZiBpbXBvcnQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBnaXQgc3ZuJyAnCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHJldmlzaW9ucyBmcm9tIHN2bicgJworCWdpdCBzdm4gZmV0Y2gKKwknCisKK3NldF9wcm9wcyAoKSB7CisJc3ViZGlyPSIkMSIKKwlmaWxlPSIkMiIKKwlzaGlmdDtzaGlmdDsKKwkoY2QgIiRzdWJkaXIiICYmCisJCXdoaWxlIFsgJCMgLWd0IDAgXSA7IGRvCisJCQlnaXQgc3ZuIHByb3BzZXQgIiQxIiAiJDIiICIkZmlsZSIgfHwgZXhpdCAxCisJCQlzaGlmdDtzaGlmdDsKKwkJZG9uZSAmJgorCQllY2hvIGhlbGxvID4+ICIkZmlsZSIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAidGVzdGluZyBwcm9wc2V0IiAiJGZpbGUiKQorfQorCitjb25maXJtX3Byb3BzICgpIHsKKwlzdWJkaXI9IiQxIgorCWZpbGU9IiQyIgorCXNoaWZ0O3NoaWZ0OworCShzZXQgLWUgOyBjZCAic3ZuX3Byb2plY3QvJHN1YmRpciIgJiYKKwkJd2hpbGUgWyAkIyAtZ3QgMCBdIDsgZG8KKwkJCXRlc3QgIiQoc3ZuX2NtZCBwcm9wZ2V0ICIkMSIgIiRmaWxlIikiID0gIiQyIiB8fCBleGl0IDEKKwkJCXNoaWZ0O3NoaWZ0OworCQlkb25lKQorfQorCisKKyNUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBoYXMgYSByZXN0cmljdGlvbjoKKyNzdm4gcHJvcHNldCB3aWxsIGJlIHRha2VuIGFzIGEgZGVsdGEgZm9yIHN2biBkY29tbWl0IG9ubHkKKyNpZiB0aGUgZmlsZSBjb250ZW50IGlzIGFsc28gbW9kaWZpZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBwcm9wcyB0b3AgbGV2ZWwnICcKKwlzZXRfcHJvcHMgIi4iICJmb28iICJzdm46a2V5d29yZHMiICJGcmVlQlNEPSVIIiAmJgorCWdpdCBzdm4gZGNvbW1pdCAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzdm5fcHJvamVjdCAmJgorCWNvbmZpcm1fcHJvcHMgIi4iICJmb28iICJzdm46a2V5d29yZHMiICJGcmVlQlNEPSVIIiAmJgorCXJtIC1yZiBzdm5fcHJvamVjdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG11bHRpcGxlIHByb3BzJyAnCisJc2V0X3Byb3BzICIuIiAiZm9vIiBcCisJCSJzdm46a2V5d29yZHMiICJGcmVlQlNEPSVIIiBmYnNkOm5va2V5d29yZHMgeWVzICYmCisJZ2l0IHN2biBkY29tbWl0ICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHN2bl9wcm9qZWN0ICYmCisJY29uZmlybV9wcm9wcyAiLiIgImZvbyIgXAorCQkic3ZuOmtleXdvcmRzIiAiRnJlZUJTRD0lSCIgZmJzZDpub2tleXdvcmRzIHllcyAmJgorCXJtIC1yZiBzdm5fcHJvamVjdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHByb3BzIHN1YmRpcicgJworCXNldF9wcm9wcyAiLiIgIiRmb29fc3ViZGlyMiIgc3ZuOmtleXdvcmRzICJGcmVlQlNEPSVIIiAmJgorCWdpdCBzdm4gZGNvbW1pdCAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzdm5fcHJvamVjdCAmJgorCWNvbmZpcm1fcHJvcHMgIi4iICIkZm9vX3N1YmRpcjIiICJzdm46a2V5d29yZHMiICJGcmVlQlNEPSVIIiAmJgorCXJtIC1yZiBzdm5fcHJvamVjdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHByb3BzIHJlbGF0aXZlJyAnCisJc2V0X3Byb3BzICJzdWJkaXIvc3ViZGlyMiIgIi4uL2Zvb19zdWJkaXIiIFwKKwkJc3ZuOmtleXdvcmRzICJGcmVlQlNEPSVIIiAmJgorCWdpdCBzdm4gZGNvbW1pdCAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzdm5fcHJvamVjdCAmJgorCWNvbmZpcm1fcHJvcHMgInN1YmRpci9zdWJkaXIyIiAiLi4vZm9vX3N1YmRpciIgXAorCQlzdm46a2V5d29yZHMgIkZyZWVCU0Q9JUgiICYmCisJcm0gLXJmIHN2bl9wcm9qZWN0CisJJwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTUwLXN2ay1tZXJnZXRpY2tldHMuc2ggYi90L3Q5MTUwLXN2ay1tZXJnZXRpY2tldHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWJiNjc2YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTAtc3ZrLW1lcmdldGlja2V0cy5zaApAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IFNhbSBWaWxhaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LXN2biBzdmsgbWVyZ2UgdGlja2V0cycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZrIGRlcG90JyAiCisJc3ZuYWRtaW4gbG9hZCAtcSAnJHJhd3N2bnJlcG8nIFwKKwkgIDwgJyRURVNUX0RJUkVDVE9SWS90OTE1MC9zdmstbWVyZ2UuZHVtcCcgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgc3ZrbWVyZ2UgXAorCSAgLS1yZXdyaXRlLXJvb3Q9aHR0cDovL3N2bi5leGFtcGxlLm9yZyBcCisJICAtVCB0cnVuayAtYiBicmFuY2hlcyAnJHN2bnJlcG8nICYmCisJZ2l0IHN2biBmZXRjaCAtLWFsbAorCSIKKwordXVpZD1iNDgyODliMi05YzA4LTRkNzItYWYzNy0wMzU4YTQwYjljMTUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ZrIG1lcmdlcyB3ZXJlIHJlcHJlc2VudGVkIGNvbWluZyBpbicgIgorCVsgJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIHBhcmVudCB8IHdjIC1sKSAtZXEgMiBdCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNTAvbWFrZS1zdmstZHVtcCBiL3QvdDkxNTAvbWFrZS1zdmstZHVtcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMjQyZjE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MC9tYWtlLXN2ay1kdW1wCkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorIworIyB0aGlzIHNjcmlwdCBzZXRzIHVwIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IGZvciBNYWtlZmlsZSBpbiB0aGUKKyMgZmlyc3QgZXZlciBnaXQgbWVyZ2UsIGFzIGlmIGl0IHdlcmUgZG9uZSB3aXRoIHN2ay4KKyMKKworc2V0IC1lCisKK3N2ayBkZXBvdG1hcCBmb28gfi8uc3ZrL2Zvbworc3ZrIGNvIC9mb28vIGZvbworY2QgZm9vCitta2RpciB0cnVuaworbWtkaXIgYnJhbmNoZXMKK3N2ayBhZGQgdHJ1bmsgYnJhbmNoZXMKK3N2ayBjb21taXQgLW0gIlNldHVwIHRydW5rIGFuZCBicmFuY2hlcyIKK2NkIHRydW5rCisKK2dpdCBjYXQtZmlsZSBibG9iIDY2ODM0NjNlOk1ha2VmaWxlID4gTWFrZWZpbGUKK3N2ayBhZGQgTWFrZWZpbGUgCisKK3N2ayBjb21taXQgLW0gImFuY2VzdG9yIgorY2QgLi4KK3N2ayBjcCB0cnVuayBicmFuY2hlcy9sZWZ0CisKK3N2ayBjb21taXQgLW0gIm1ha2UgbGVmdCBicmFuY2giCitjZCBicmFuY2hlcy9sZWZ0LworCitnaXQgY2F0LWZpbGUgYmxvYiA1ODczYjY3ZTpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdmsgY29tbWl0IC1tICJsZWZ0IHVwZGF0ZSAxIgorCitjZCAuLi8uLi90cnVuaworZ2l0IGNhdC1maWxlIGJsb2IgNzUxMThiMTM6TWFrZWZpbGUgPiBNYWtlZmlsZQorc3ZrIGNvbW1pdCAtbSAidHJ1bmsgdXBkYXRlIgorCitjZCAuLi9icmFuY2hlcy9sZWZ0CitnaXQgY2F0LWZpbGUgYmxvYiBiNTAzOWRiNjpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdmsgY29tbWl0IC1tICJsZWZ0IHVwZGF0ZSAyIgorCitjZCAuLi8uLi90cnVuaworc3ZrIHNtIC9mb28vYnJhbmNoZXMvbGVmdAorIyBpbiB0aGVvcnkgd2UgY291bGQgZGVsZXRlIHRoZSAibGVmdCIgYnJhbmNoIGhlcmUsIGJ1dCBpdCdzIG5vdAorIyByZXF1aXJlZCBzbyBkb24ndCBkbyBpdCwgaW4gY2FzZSBwZW9wbGUgc3RhcnQgZ2V0dGluZyBpZGVhcyA7KQorc3ZrIGNvbW1pdCAtbSAibWVyZ2UgYnJhbmNoICdsZWZ0JyBpbnRvICd0cnVuayciCisKK2dpdCBjYXQtZmlsZSBibG9iIGI1MWFkNDMxOk1ha2VmaWxlID4gTWFrZWZpbGUKKworc3ZrIGRpZmYgTWFrZWZpbGUgJiYgZWNobyAiSGV5ISAgTm8gZGlmZmVyZW5jZXMsIG1hZ2ljIgorCitjZCAuLi8uLgorCitzdm5hZG1pbiBkdW1wIH4vLnN2ay9mb28gPiBzdmstbWVyZ2UuZHVtcAorCitzdmsgY28gLWQgZm9vCitybSAtcmYgZm9vCitzdmsgZGVwb3RtYXAgLWQgL2Zvby8KK3JtIC1yZiB+Ly5zdmsvZm9vCisKZGlmZiAtLWdpdCBhL3QvdDkxNTAvc3ZrLW1lcmdlLmR1bXAgYi90L3Q5MTUwL3N2ay1tZXJnZS5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZjcwZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTUwL3N2ay1tZXJnZS5kdW1wCkBAIC0wLDAgKzEsNjE2IEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBiNDgyODliMi05YzA4LTRkNzItYWYzNy0wMzU4YTQwYjljMTUKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDMuNzIyOTY5WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTIzCitDb250ZW50LWxlbmd0aDogMTIzCisKK0sgNworc3ZuOmxvZworViAyNAorU2V0dXAgdHJ1bmsgYW5kIGJyYW5jaGVzCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3NhbXYKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDQuOTI3NTMzWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTA2CitDb250ZW50LWxlbmd0aDogMTA2CisKK0sgNworc3ZuOmxvZworViA4CithbmNlc3RvcgorSyAxMAorc3ZuOmF1dGhvcgorViA0CitzYW12CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjA1LjgzNTU4NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNDAxCitUZXh0LWNvbnRlbnQtbWQ1OiBiZmQ4ZmY3NzhkMTQ5MmRjNjc1ODU2NzM3MzE3NmE4OQorQ29udGVudC1sZW5ndGg6IDI0MTEKKworUFJPUFMtRU5ECisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiAzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTUKK0NvbnRlbnQtbGVuZ3RoOiAxMTUKKworSyA3Citzdm46bG9nCitWIDE2CittYWtlIGxlZnQgYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3NhbXYKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDYuNzE5NzM3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTIKK0NvbnRlbnQtbGVuZ3RoOiAxMTIKKworSyA3Citzdm46bG9nCitWIDEzCitsZWZ0IHVwZGF0ZSAxCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3NhbXYKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDcuMTY3NjY2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNDY1CitUZXh0LWNvbnRlbnQtbWQ1OiAxNmUzOGQ5NzUzYjA2MTczMTY1MDU2MWNlMDFiMTE5NQorQ29udGVudC1sZW5ndGg6IDI0NjUKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMQorQ29udGVudC1sZW5ndGg6IDExMQorCitLIDcKK3N2bjpsb2cKK1YgMTIKK3RydW5rIHVwZGF0ZQorSyAxMAorc3ZuOmF1dGhvcgorViA0CitzYW12CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjA3LjYxOTYzM1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDI1MjEKK1RleHQtY29udGVudC1tZDU6IDA2Njg0MThhNjIxMzMzZjRhYThiNjYzMmNkNjNlMmEwCitDb250ZW50LWxlbmd0aDogMjUyMQorCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlIG1lcmdlLWNhY2hlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtY2FjaGU6IG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWNhY2hlIG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTIKK0NvbnRlbnQtbGVuZ3RoOiAxMTIKKworSyA3Citzdm46bG9nCitWIDEzCitsZWZ0IHVwZGF0ZSAyCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3NhbXYKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDguMDY3NTU0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTkzCitUZXh0LWNvbnRlbnQtbWQ1OiA1Y2NmZjY4OWZiMjkwZTAwYjg1ZmUxOGVlNTBjNTRiYQorQ29udGVudC1sZW5ndGg6IDI1OTMKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogNworUHJvcC1jb250ZW50LWxlbmd0aDogMTMxCitDb250ZW50LWxlbmd0aDogMTMxCisKK0sgNworc3ZuOmxvZworViAzMgorbWVyZ2UgYnJhbmNoICdsZWZ0JyBpbnRvICd0cnVuaycKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorc2FtdgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0xMC0xOVQyMzo0NDowOC45NzE4MDFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDgzCitDb250ZW50LWxlbmd0aDogODMKKworSyA5Citzdms6bWVyZ2UKK1YgNTMKK2I0ODI4OWIyLTljMDgtNGQ3Mi1hZjM3LTAzNThhNDBiOWMxNTovYnJhbmNoZXMvbGVmdDo2CitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDI3MTMKK1RleHQtY29udGVudC1tZDU6IDBhZmJlMzRmMjQ0Y2Q2NjJiMWY5N2Q3MDhjNjg3ZjkwCitDb250ZW50LWxlbmd0aDogMjcxMworCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlIG1lcmdlLWNhY2hlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworbWVyZ2UtY2FjaGU6IG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWNhY2hlIG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKwpkaWZmIC0tZ2l0IGEvdC90OTE1MS1zdm4tbWVyZ2VpbmZvLnNoIGIvdC90OTE1MS1zdm4tbWVyZ2VpbmZvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRmNmMwNmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTUxLXN2bi1tZXJnZWluZm8uc2gKQEAgLTAsMCArMSw1NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBTYW0gVmlsYWluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gc3ZuIG1lcmdlaW5mbyBwcm9wZXJ0aWVzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcCcgIgorCXN2bmFkbWluIGxvYWQgLXEgJyRyYXdzdm5yZXBvJyBcCisJICA8ICckVEVTVF9ESVJFQ1RPUlkvdDkxNTEvc3ZuLW1lcmdlaW5mby5kdW1wJyAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBzdm5tZXJnZSBcCisJICAtLXJld3JpdGUtcm9vdD1odHRwOi8vc3ZuLmV4YW1wbGUub3JnIFwKKwkgIC1UIHRydW5rIC1iIGJyYW5jaGVzICckc3ZucmVwbycgJiYKKwlnaXQgc3ZuIGZldGNoIC0tYWxsCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGwgc3ZuIG1lcmdlcyBiZWNhbWUgZ2l0IG1lcmdlIGNvbW1pdHMnICcKKwl1bm1hcmtlZD0kKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgLS1hbGwgLS1ncmVwPU1lcmdlIHwKKwkJZ3JlcCAtdiAiIC4qICIgfCBjdXQgLWYxIC1kIiAiKSAmJgorCVsgLXogIiR1bm1hcmtlZCIgXQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2tzIGRpZCBub3QgYmVjb21lIGdpdCBtZXJnZSBjb21taXRzJyAnCisJYmFkX2NoZXJyaWVzPSQoZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtLWFsbCAtLWdyZXA9Q2hlcnJ5IHwKKwkJZ3JlcCAiIC4qICIgfCBjdXQgLWYxIC1kIiAiKSAmJgorCVsgLXogIiRiYWRfY2hlcnJpZXMiIF0KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N2biBub24tbWVyZ2UgbWVyZ2UgY29tbWl0cyBkaWQgbm90IGJlY29tZSBnaXQgbWVyZ2UgY29tbWl0cycgJworCWJhZF9ub25fbWVyZ2VzPSQoZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtLWFsbCAtLWdyZXA9bm9uLW1lcmdlIHwKKwkJZ3JlcCAiIC4qICIgfCBjdXQgLWYxIC1kIiAiKSAmJgorCVsgLXogIiRiYWRfbm9uX21lcmdlcyIgXQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1hZGUgdG8gbWVyZ2VkIGJyYW5jaCBpcyByZWFjaGFibGUgZnJvbSB0aGUgbWVyZ2UnICcKKwliZWZvcmVfY29tbWl0PSQoZ2l0IHJldi1saXN0IC0tYWxsIC0tZ3JlcD0idHJ1bmsgY29tbWl0IGJlZm9yZSBtZXJnaW5nIHRydW5rIHRvIGIyIikgJiYKKwltZXJnZV9jb21taXQ9JChnaXQgcmV2LWxpc3QgLS1hbGwgLS1ncmVwPSJNZXJnZSB0cnVuayB0byBiMiIpICYmCisJbm90X3JlYWNoYWJsZT0kKGdpdCByZXYtbGlzdCAtMSAkYmVmb3JlX2NvbW1pdCAtLW5vdCAkbWVyZ2VfY29tbWl0KSAmJgorCVsgLXogIiRub3RfcmVhY2hhYmxlIiBdCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnaW5nIHR3byBicmFuY2hlcyBpbiBvbmUgY29tbWl0IGlzIGRldGVjdGVkIGNvcnJlY3RseScgJworCWYxX2NvbW1pdD0kKGdpdCByZXYtbGlzdCAtLWFsbCAtLWdyZXA9Im1ha2UgZjEgYnJhbmNoIGZyb20gdHJ1bmsiKSAmJgorCWYyX2NvbW1pdD0kKGdpdCByZXYtbGlzdCAtLWFsbCAtLWdyZXA9Im1ha2UgZjIgYnJhbmNoIGZyb20gdHJ1bmsiKSAmJgorCW1lcmdlX2NvbW1pdD0kKGdpdCByZXYtbGlzdCAtLWFsbCAtLWdyZXA9Ik1lcmdlIGYxIGFuZCBmMiB0byB0cnVuayIpICYmCisJbm90X3JlYWNoYWJsZT0kKGdpdCByZXYtbGlzdCAtMSAkZjFfY29tbWl0ICRmMl9jb21taXQgLS1ub3QgJG1lcmdlX2NvbW1pdCkgJiYKKwlbIC16ICIkbm90X3JlYWNoYWJsZSIgXQorCScKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZXZlcnl0aGluZyBnb3QgbWVyZ2VkIGluIHRoZSBlbmQnICcKKwl1bm1lcmdlZD0kKGdpdCByZXYtbGlzdCAtLWFsbCAtLW5vdCBtYXN0ZXIpICYmCisJWyAteiAiJHVubWVyZ2VkIiBdCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNTEvLmdpdGlnbm9yZSBiL3QvdDkxNTEvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODdjMzdkCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorZm9vCitmb28uc3ZuCmRpZmYgLS1naXQgYS90L3Q5MTUxL21ha2Utc3ZubWVyZ2UtZHVtcCBiL3QvdDkxNTEvbWFrZS1zdm5tZXJnZS1kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUxZTEzOGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTUxL21ha2Utc3ZubWVyZ2UtZHVtcApAQCAtMCwwICsxLDMwNSBAQAorIyEvYmluL3NoCisjCisjIHRoaXMgc2NyaXB0IHNldHMgdXAgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgZm9yIE1ha2VmaWxlIGluIHRoZQorIyBmaXJzdCBldmVyIGdpdCBtZXJnZSwgYXMgaWYgaXQgd2VyZSBkb25lIHdpdGggc3ZubWVyZ2UgKFNWTiAxLjUrKQorIworCitybSAtcmYgZm9vLnN2biBmb28KK3NldCAtZQorCitta2RpciBmb28uc3ZuCitzdm5hZG1pbiBjcmVhdGUgZm9vLnN2bgorc3ZuIGNvIGZpbGU6Ly9gcHdkYC9mb28uc3ZuIGZvbworCitjb21taXQoKSB7CisgICAgaT0kKCggJDEgKyAxICkpCisgICAgc2hpZnQ7CisgICAgc3ZuIGNvbW1pdCAtbSAiKHIkaSkgJCoiID4vZGV2L251bGwgfHwgZXhpdCAxCisgICAgZWNobyAkaQorfQorCitzYXkoKSB7CisgICAgZWNobyAiG1sxbSAqICQqG1swbSIKK30KKworaT0wCitjZCBmb28KK21rZGlyIHRydW5rCitta2RpciBicmFuY2hlcworbWtkaXIgdGFncworc3ZuIGFkZCB0cnVuayBicmFuY2hlcyB0YWdzCitpPSQoY29tbWl0ICRpICJTZXR1cCB0cnVuaywgYnJhbmNoZXMsIGFuZCB0YWdzIikKKworZ2l0IGNhdC1maWxlIGJsb2IgNjY4MzQ2M2U6TWFrZWZpbGUgPiB0cnVuay9NYWtlZmlsZQorc3ZuIGFkZCB0cnVuay9NYWtlZmlsZSAKKworc2F5ICJDb21taXR0aW5nIEFOQ0VTVE9SIgoraT0kKGNvbW1pdCAkaSAiYW5jZXN0b3IiKQorc3ZuIGNwIHRydW5rIGJyYW5jaGVzL2xlZnQKKworc2F5ICJDb21taXR0aW5nIEJSQU5DSCBQT0lOVCIKK2k9JChjb21taXQgJGkgIm1ha2UgbGVmdCBicmFuY2giKQorc3ZuIGNwIHRydW5rIGJyYW5jaGVzL3JpZ2h0CisKK3NheSAiQ29tbWl0dGluZyBvdGhlciBCUkFOQ0ggUE9JTlQiCitpPSQoY29tbWl0ICRpICJtYWtlIHJpZ2h0IGJyYW5jaCIpCisKK3NheSAiQ29tbWl0dGluZyBMRUZUIFVQREFURSIKK2dpdCBjYXQtZmlsZSBibG9iIDU4NzNiNjdlOk1ha2VmaWxlID4gYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQoraT0kKGNvbW1pdCAkaSAibGVmdCB1cGRhdGUgMSIpCisKK2dpdCBjYXQtZmlsZSBibG9iIDc1MTE4YjEzOk1ha2VmaWxlID4gYnJhbmNoZXMvcmlnaHQvTWFrZWZpbGUKK3NheSAiQ29tbWl0dGluZyBSSUdIVCBVUERBVEUiCitwcmVfcmlnaHRfdXBkYXRlXzE9JGkKK2k9JChjb21taXQgJGkgInJpZ2h0IHVwZGF0ZSAxIikKKworc2F5ICJNYWtpbmcgbW9yZSBjb21taXRzIG9uIExFRlQiCitnaXQgY2F0LWZpbGUgYmxvYiBmZjVlYmUzOTpNYWtlZmlsZSA+IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK2k9JChjb21taXQgJGkgImxlZnQgdXBkYXRlIDIiKQorZ2l0IGNhdC1maWxlIGJsb2IgYjUwMzlkYjY6TWFrZWZpbGUgPiBicmFuY2hlcy9sZWZ0L01ha2VmaWxlCitpPSQoY29tbWl0ICRpICJsZWZ0IHVwZGF0ZSAzIikKKworc2F5ICJNYWtpbmcgYSBMRUZUIFNVQi1CUkFOQ0giCitzdm4gY3AgYnJhbmNoZXMvbGVmdCBicmFuY2hlcy9sZWZ0LXN1Ygorc3ViX2xlZnRfbWFrZT0kaQoraT0kKGNvbW1pdCAkaSAibWFrZSBsZWZ0IHN1Yi1icmFuY2giKQorCitzYXkgIk1ha2luZyBhIGNvbW1pdCBvbiBMRUZUIFNVQi1CUkFOQ0giCitlY2hvICJjcnVuY2giID4gYnJhbmNoZXMvbGVmdC1zdWIvUkVBRE1FCitzdm4gYWRkIGJyYW5jaGVzL2xlZnQtc3ViL1JFQURNRQoraT0kKGNvbW1pdCAkaSAibGVmdCBzdWItYnJhbmNoIHVwZGF0ZSAxIikKKworc2F5ICJNZXJnaW5nIExFRlQgdG8gVFJVTksiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2xlZnQgLS1hY2NlcHQgcG9zdHBvbmUKK2dpdCBjYXQtZmlsZSBibG9iIGI1MDM5ZGI2Ok1ha2VmaWxlID4gTWFrZWZpbGUKK3N2biByZXNvbHZlZCBNYWtlZmlsZQoraT0kKGNvbW1pdCAkaSAiTWVyZ2UgbGVmdCB0byB0cnVuayAxIikKK2NkIC4uCisKK3NheSAiTWFraW5nIG1vcmUgY29tbWl0cyBvbiBMRUZUIGFuZCBSSUdIVCIKK2VjaG8gInRvdWNoZSIgPiBicmFuY2hlcy9sZWZ0L3psb25rCitzdm4gYWRkIGJyYW5jaGVzL2xlZnQvemxvbmsKK2k9JChjb21taXQgJGkgImxlZnQgdXBkYXRlIDQiKQorZWNobyAidGh3YWNrZSIgPiBicmFuY2hlcy9yaWdodC9iYW5nCitzdm4gYWRkIGJyYW5jaGVzL3JpZ2h0L2JhbmcKK2k9JChjb21taXQgJGkgInJpZ2h0IHVwZGF0ZSAyIikKKworc2F5ICJTcXVhc2ggbWVyZ2Ugb2YgUklHSFQgdGlwIDIgY29tbWl0cyBvbnRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAtciRwcmVfcmlnaHRfdXBkYXRlXzE6JGkgLi4vYnJhbmNoZXMvcmlnaHQKK2k9JChjb21taXQgJGkgIkNoZXJyeS1waWNrIHJpZ2h0IDIgY29tbWl0cyB0byB0cnVuayIpCitjZCAuLgorCitzYXkgIk1lcmdpbmcgUklHSFQgdG8gVFJVTksiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL3JpZ2h0IC0tYWNjZXB0IHBvc3Rwb25lCitnaXQgY2F0LWZpbGUgYmxvYiBiNTFhZDQzMTpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdm4gcmVzb2x2ZWQgTWFrZWZpbGUKK2k9JChjb21taXQgJGkgIk1lcmdlIHJpZ2h0IHRvIHRydW5rIDEiKQorY2QgLi4KKworc2F5ICJNYWtpbmcgbW9yZSBjb21taXRzIG9uIFJJR0hUIGFuZCBUUlVOSyIKK2VjaG8gIndoYW1tIiA+IGJyYW5jaGVzL3JpZ2h0L3Vya2trCitzdm4gYWRkIGJyYW5jaGVzL3JpZ2h0L3Vya2trCitpPSQoY29tbWl0ICRpICJyaWdodCB1cGRhdGUgMyIpCitlY2hvICJwb3ciID4gdHJ1bmsvdnJvbmsKK3N2biBhZGQgdHJ1bmsvdnJvbmsKK2k9JChjb21taXQgJGkgInRydW5rIHVwZGF0ZSAxIikKKworc2F5ICJNZXJnaW5nIFJJR0hUIHRvIExFRlQgU1VCLUJSQU5DSCIKK3N2biB1cGRhdGUKK2NkIGJyYW5jaGVzL2xlZnQtc3ViCitzdm4gbWVyZ2UgLi4vcmlnaHQgLS1hY2NlcHQgcG9zdHBvbmUKK2dpdCBjYXQtZmlsZSBibG9iIGI1MWFkNDMxOk1ha2VmaWxlID4gTWFrZWZpbGUKK3N2biByZXNvbHZlZCBNYWtlZmlsZQoraT0kKGNvbW1pdCAkaSAiTWVyZ2UgcmlnaHQgdG8gbGVmdCBzdWItYnJhbmNoIikKK2NkIC4uLy4uCisKK3NheSAiTWFraW5nIG1vcmUgY29tbWl0cyBvbiBMRUZUIFNVQi1CUkFOQ0ggYW5kIExFRlQiCitlY2hvICJ6b3dpZSIgPiBicmFuY2hlcy9sZWZ0LXN1Yi93aGFtX2V0aAorc3ZuIGFkZCBicmFuY2hlcy9sZWZ0LXN1Yi93aGFtX2V0aAorcHJlX3N1Yl9sZWZ0X3VwZGF0ZV8yPSRpCitpPSQoY29tbWl0ICRpICJsZWZ0IHN1Yi1icmFuY2ggdXBkYXRlIDIiKQorc3ViX2xlZnRfdXBkYXRlXzI9JGkKK2VjaG8gImVlZV95b3ciID4gYnJhbmNoZXMvbGVmdC9nbHVycHAKK3N2biBhZGQgYnJhbmNoZXMvbGVmdC9nbHVycHAKK2k9JChjb21taXQgJGkgImxlZnQgdXBkYXRlIDUiKQorCitzYXkgIkNoZXJyeSBwaWNrIExFRlQgU1VCLUJSQU5DSCBjb21taXQgdG8gTEVGVCIKK3N2biB1cGRhdGUKK2NkIGJyYW5jaGVzL2xlZnQKK3N2biBtZXJnZSAtciRwcmVfc3ViX2xlZnRfdXBkYXRlXzI6JHN1Yl9sZWZ0X3VwZGF0ZV8yIC4uL2xlZnQtc3ViCitpPSQoY29tbWl0ICRpICJDaGVycnktcGljayBsZWZ0IHN1Yi1icmFuY2ggY29tbWl0IHRvIGxlZnQiKQorY2QgLi4vLi4KKworc2F5ICJNZXJnaW5nIExFRlQgU1VCLUJSQU5DSCBiYWNrIHRvIExFRlQiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9sZWZ0CisjIGl0J3Mgb25seSBhIG1lcmdlIGJlY2F1c2UgdGhlIHByZXZpb3VzIG1lcmdlIGNoZXJyeS1waWNrZWQgdGhlIHRvcCBjb21taXQKK3N2biBtZXJnZSAtciRzdWJfbGVmdF9tYWtlOiRzdWJfbGVmdF91cGRhdGVfMiAuLi9sZWZ0LXN1YiAtLWFjY2VwdCBwb3N0cG9uZQoraT0kKGNvbW1pdCAkaSAiTWVyZ2UgbGVmdCBzdWItYnJhbmNoIHRvIGxlZnQiKQorY2QgLi4vLi4KKworc2F5ICJNZXJnaW5nIEVWRVJZVEhJTkcgdG8gVFJVTksiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2xlZnQgLS1hY2NlcHQgcG9zdHBvbmUKK3N2biByZXNvbHZlZCBiYW5nCitpPSQoY29tbWl0ICRpICJNZXJnZSBsZWZ0IHRvIHRydW5rIDIiKQorIyB0aGlzIG1lcmdlLCBzdm4gaGFwcGlseSB1cGRhdGVzIHRoZSBtZXJnZWluZm8sIGJ1dCB0aGVyZSBpcyBhY3R1YWxseQorIyBub3RoaW5nIHRvIG1lcmdlLiAgZ2l0LXN2biB3aWxsIG5vdCBtYWtlIGEgbWVhbmluZ2xlc3MgbWVyZ2UgY29tbWl0Lgorc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL3JpZ2h0IC0tYWNjZXB0IHBvc3Rwb25lCitpPSQoY29tbWl0ICRpICJub24tbWVyZ2UgcmlnaHQgdG8gdHJ1bmsgMiIpCitjZCAuLgorCitzYXkgIkJyYW5jaGluZyBiMSBmcm9tIHRydW5rIgorc3ZuIHVwZGF0ZQorc3ZuIGNwIHRydW5rIGJyYW5jaGVzL2IxCitpPSQoY29tbWl0ICRpICJtYWtlIGIxIGJyYW5jaCBmcm9tIHRydW5rIikKKworc2F5ICJCcmFuY2hpbmcgYjIgZnJvbSB0cnVuayIKK3N2biB1cGRhdGUKK3N2biBjcCB0cnVuayBicmFuY2hlcy9iMgoraT0kKGNvbW1pdCAkaSAibWFrZSBiMiBicmFuY2ggZnJvbSB0cnVuayIpCisKK3NheSAiTWFrZSBhIGNvbW1pdCB0byBiMiIKK3N2biB1cGRhdGUKK2NkIGJyYW5jaGVzL2IyCitlY2hvICJiMiIgPiBiMmZpbGUKK3N2biBhZGQgYjJmaWxlCitpPSQoY29tbWl0ICRpICJiMiB1cGRhdGUgMSIpCitjZCAuLi8uLgorCitzYXkgIk1ha2UgYSBjb21taXQgdG8gYjEiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9iMQorZWNobyAiYjEiID4gYjFmaWxlCitzdm4gYWRkIGIxZmlsZQoraT0kKGNvbW1pdCAkaSAiYjEgdXBkYXRlIDEiKQorY2QgLi4vLi4KKworc2F5ICJNZXJnZSBiMSB0byB0cnVuayIKK3N2biB1cGRhdGUKK2NkIHRydW5rCitzdm4gbWVyZ2UgLi4vYnJhbmNoZXMvYjEvIC0tYWNjZXB0IHBvc3Rwb25lCitpPSQoY29tbWl0ICRpICJNZXJnZSBiMSB0byB0cnVuayIpCitjZCAuLgorCitzYXkgIk1ha2UgYSBjb21taXQgdG8gdHJ1bmsgYmVmb3JlIG1lcmdpbmcgdHJ1bmsgdG8gYjIiCitzdm4gdXBkYXRlCitjZCB0cnVuaworZWNobyAidHJ1bmsiID4gdHJ1bmtmaWxlCitzdm4gYWRkIHRydW5rZmlsZQoraT0kKGNvbW1pdCAkaSAidHJ1bmsgY29tbWl0IGJlZm9yZSBtZXJnaW5nIHRydW5rIHRvIGIyIikKK2NkIC4uCisKK3NheSAiTWVyZ2UgdHJ1bmsgdG8gYjIiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9iMgorc3ZuIG1lcmdlIC4uLy4uL3RydW5rLyAtLWFjY2VwdCBwb3N0cG9uZQoraT0kKGNvbW1pdCAkaSAiTWVyZ2UgdHJ1bmsgdG8gYjIiKQorY2QgLi4vLi4KKworc2F5ICJNZXJnZSBiMiB0byB0cnVuayIKK3N2biB1cGRhdGUKK2NkIHRydW5rCitzdm4gbWVyZ2UgLi4vYnJhbmNoZXMvYjIvIC0tYWNjZXB0IHBvc3Rwb25lCitzdm4gcmVzb2x2ZWQgYjFmaWxlCitzdm4gcmVzb2x2ZWQgdHJ1bmtmaWxlCitpPSQoY29tbWl0ICRpICJNZXJnZSBiMiB0byB0cnVuayIpCitjZCAuLgorCitzYXkgIkNyZWF0aW5nIGYxIGZyb20gdHJ1bmsgd2l0aCBhIG5ldyBmaWxlIgorc3ZuIHVwZGF0ZQorc3ZuIGNwIHRydW5rIGJyYW5jaGVzL2YxCitjZCBicmFuY2hlcy9mMQorZWNobyAiZjEiID4gZjFmaWxlCitzdm4gYWRkIGYxZmlsZQorY2QgLi4vLi4KK2k9JChjb21taXQgJGkgIm1ha2UgZjEgYnJhbmNoIGZyb20gdHJ1bmsgd2l0aCBhIG5ldyBmaWxlIikKKworc2F5ICJDcmVhdGluZyBmMiBmcm9tIHRydW5rIHdpdGggYSBuZXcgZmlsZSIKK3N2biB1cGRhdGUKK3N2biBjcCB0cnVuayBicmFuY2hlcy9mMgorY2QgYnJhbmNoZXMvZjIKK2VjaG8gImYyIiA+IGYyZmlsZQorc3ZuIGFkZCBmMmZpbGUKK2NkIC4uLy4uCitpPSQoY29tbWl0ICRpICJtYWtlIGYyIGJyYW5jaCBmcm9tIHRydW5rIHdpdGggYSBuZXcgZmlsZSIpCisKK3NheSAiTWVyZ2UgZjEgYW5kIGYyIHRvIHRydW5rIGluIG9uZSBnbyIKK3N2biB1cGRhdGUKK2NkIHRydW5rCitzdm4gbWVyZ2UgLi4vYnJhbmNoZXMvZjEvIC0tYWNjZXB0IHBvc3Rwb25lCitzdm4gbWVyZ2UgLi4vYnJhbmNoZXMvZjIvIC0tYWNjZXB0IHBvc3Rwb25lCitpPSQoY29tbWl0ICRpICJNZXJnZSBmMSBhbmQgZjIgdG8gdHJ1bmsiKQorY2QgLi4KKworc2F5ICJBZGRpbmcgc3ViZGlyZWN0b3J5IHRvIExFRlQiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9sZWZ0Citta2RpciBzdWJkaXIKK2VjaG8gIlllZWhhdyIgPiBzdWJkaXIvY293Ym95Citzdm4gYWRkIHN1YmRpcgoraT0kKGNvbW1pdCAkaSAiYWRkIHN1YmRpcmVjdG9yeSB0byBsZWZ0IGJyYW5jaCIpCitjZCAuLi8uLi8KKworc2F5ICJNZXJnaW5nIExFRlQgdG8gVFJVTksiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2xlZnQgLS1hY2NlcHQgcG9zdHBvbmUKK2k9JChjb21taXQgJGkgIm1lcmdlIGxlZnQgdG8gdHJ1bmsiKQorY2QgLi4KKworc2F5ICJNYWtlIFBBUlRJQUwgYnJhbmNoIgorc3ZuIHVwZGF0ZQorc3ZuIGNwIHRydW5rL3N1YmRpciBicmFuY2hlcy9wYXJ0aWFsCitpPSQoY29tbWl0ICRpICJtYWtlIHBhcnRpYWwgYnJhbmNoIikKKworc2F5ICJNYWtlIGEgY29tbWl0IHRvIFBBUlRJQUwiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9wYXJ0aWFsCitlY2hvICJyYWNlY2FyIiA+IHBhbGluZHJvbWVzCitzdm4gYWRkIHBhbGluZHJvbWVzCitpPSQoY29tbWl0ICRpICJwYXJ0aWFsIHVwZGF0ZSIpCitjZCAuLi8uLi8KKworc2F5ICJNZXJnZSBQQVJUSUFMIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsvc3ViZGlyCitzdm4gbWVyZ2UgLi4vLi4vYnJhbmNoZXMvcGFydGlhbCAtLWFjY2VwdCBwb3N0cG9uZQoraT0kKGNvbW1pdCAkaSAibWVyZ2UgcGFydGlhbCB0byB0cnVuayIpCitjZCAuLi8uLi8KKworc2F5ICJUYWdnaW5nIHRydW5rIgorc3ZuIHVwZGF0ZQorc3ZuIGNwIHRydW5rIHRhZ3MvdjEuMAoraT0kKGNvbW1pdCAkaSAidGFnZ2luZyB2MS4wIikKKworc2F5ICJCcmFuY2hpbmcgQlVHRklYIGZyb20gdjEuMCIKK3N2biB1cGRhdGUKK3N2biBjcCB0YWdzL3YxLjAgYnJhbmNoZXMvYnVnZml4CitpPSQoY29tbWl0ICRpICJtYWtlIGJ1Z2ZpeCBicmFuY2ggZnJvbSB0YWciKQorCitzYXkgIk1ha2UgYSBjb21taXQgdG8gQlVHRklYIgorc3ZuIHVwZGF0ZQorY2QgYnJhbmNoZXMvYnVnZml4LworZWNobyAia2F5YWsiID4+IHN1YmRpci9wYWxpbmRyb21lcworaT0kKGNvbW1pdCAkaSAiY29tbWl0IHRvIGJ1Z2ZpeCIpCitjZCAuLi8uLi8KKworc2F5ICJNZXJnZSBCVUdGSVggdG8gVFJVTksiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2J1Z2ZpeC8gLS1hY2NlcHQgcG9zdHBvbmUKK2k9JChjb21taXQgJGkgIk1lcmdlIEJVR0ZJWCB0byBUUlVOSyIpCitjZCAuLgorCitjZCAuLgorc3ZuYWRtaW4gZHVtcCBmb28uc3ZuID4gc3ZuLW1lcmdlaW5mby5kdW1wCisKK3JtIC1yZiBmb28gZm9vLnN2bgpkaWZmIC0tZ2l0IGEvdC90OTE1MS9zdm4tbWVyZ2VpbmZvLmR1bXAgYi90L3Q5MTUxL3N2bi1tZXJnZWluZm8uZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2NhZmNmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MS9zdm4tbWVyZ2VpbmZvLmR1bXAKQEAgLTAsMCArMSwyMzg4IEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBkNjE5MTUzMC0yNjkzLTRhOGUtOThlNy1iMTk0ZDRjM2VkZDgKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MDIuODMyNDA2WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTM0CitDb250ZW50LWxlbmd0aDogMTM0CisKK0sgNworc3ZuOmxvZworViAzNgorKHIxKSBTZXR1cCB0cnVuaywgYnJhbmNoZXMsIGFuZCB0YWdzCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDowMy4wNTUxNzJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0YWdzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMQorQ29udGVudC1sZW5ndGg6IDExMQorCitLIDcKK3N2bjpsb2cKK1YgMTMKKyhyMikgYW5jZXN0b3IKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjA0LjA2NDUwNloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNDAxCitUZXh0LWNvbnRlbnQtbWQ1OiBiZmQ4ZmY3NzhkMTQ5MmRjNjc1ODU2NzM3MzE3NmE4OQorVGV4dC1jb250ZW50LXNoYTE6IDEwMzIwNWNlMzMxZjdkNjQwODZkYmE0OTc1NzQ3MzRmNzg0Mzk1OTAKK0NvbnRlbnQtbGVuZ3RoOiAyNDExCisKK1BST1BTLUVORAorIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTE5CitDb250ZW50LWxlbmd0aDogMTE5CisKK0sgNworc3ZuOmxvZworViAyMQorKHIzKSBtYWtlIGxlZnQgYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDowNi4wNDAzODlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDIKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsvTWFrZWZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiBiZmQ4ZmY3NzhkMTQ5MmRjNjc1ODU2NzM3MzE3NmE4OQorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiAxMDMyMDVjZTMzMWY3ZDY0MDg2ZGJhNDk3NTc0NzM0Zjc4NDM5NTkwCisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjAKK0NvbnRlbnQtbGVuZ3RoOiAxMjAKKworSyA3Citzdm46bG9nCitWIDIyCisocjQpIG1ha2UgcmlnaHQgYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDowOC4wNDA5MDVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yaWdodAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yaWdodC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuay9NYWtlZmlsZQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IGJmZDhmZjc3OGQxNDkyZGM2NzU4NTY3MzczMTc2YTg5CitUZXh0LWNvcHktc291cmNlLXNoYTE6IDEwMzIwNWNlMzMxZjdkNjQwODZkYmE0OTc1NzQ3MzRmNzg0Mzk1OTAKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDcKK3N2bjpsb2cKK1YgMTgKKyhyNSkgbGVmdCB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MDkuMDQ5MTY5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNDY1CitUZXh0LWNvbnRlbnQtbWQ1OiAxNmUzOGQ5NzUzYjA2MTczMTY1MDU2MWNlMDFiMTE5NQorVGV4dC1jb250ZW50LXNoYTE6IDM2ZGE0Yjg0ZWE5YjY0MjE4YWI0ODE3MWRmYzVjNDhhZTAyNWYzOGIKK0NvbnRlbnQtbGVuZ3RoOiAyNDY1CisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTcKK0NvbnRlbnQtbGVuZ3RoOiAxMTcKKworSyA3Citzdm46bG9nCitWIDE5CisocjYpIHJpZ2h0IHVwZGF0ZSAxCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxMC4wNDkzNTBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yaWdodC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTIxCitUZXh0LWNvbnRlbnQtbWQ1OiAwNjY4NDE4YTYyMTMzM2Y0YWE4YjY2MzJjZDYzZTJhMAorVGV4dC1jb250ZW50LXNoYTE6IDRmMjlhZmQwMzhlNTJmNDVhY2I1ZWY4YzQxYWNmYzcwMDYyYTc0MWEKK0NvbnRlbnQtbGVuZ3RoOiAyNTIxCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UgbWVyZ2UtY2FjaGUKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1jYWNoZTogbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtY2FjaGUgbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDcKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDcKK3N2bjpsb2cKK1YgMTgKKyhyNykgbGVmdCB1cGRhdGUgMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTEuMDQ5MjA5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTI5CitUZXh0LWNvbnRlbnQtbWQ1OiBmNmIxOTdjYzNmMmU4OWE4M2U1NDVkNGJiMDAzZGU3MworVGV4dC1jb250ZW50LXNoYTE6IDJmNjU2Njc3Y2ZlYzBiY2VlYzg1ZTUzMDM2ZmZiNjNlMjUxMjZmOGUKK0NvbnRlbnQtbGVuZ3RoOiAyNTI5CisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogOAorUHJvcC1jb250ZW50LWxlbmd0aDogMTE2CitDb250ZW50LWxlbmd0aDogMTE2CisKK0sgNworc3ZuOmxvZworViAxOAorKHI4KSBsZWZ0IHVwZGF0ZSAzCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxMi4wNDkyMzRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDI1OTMKK1RleHQtY29udGVudC1tZDU6IDVjY2ZmNjg5ZmIyOTBlMDBiODVmZTE4ZWU1MGM1NGJhCitUZXh0LWNvbnRlbnQtc2hhMTogYTEzZGU4ZTIzZjE0ODNlZmNhM2U1N2IyYjY0YjBhZTZmNzQwY2UxMAorQ29udGVudC1sZW5ndGg6IDI1OTMKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogOQorUHJvcC1jb250ZW50LWxlbmd0aDogMTIzCitDb250ZW50LWxlbmd0aDogMTIzCisKK0sgNworc3ZuOmxvZworViAyNQorKHI5KSBtYWtlIGxlZnQgc3ViLWJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTQuMDQwODk0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMworTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0CisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1Yi9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogZGVsZXRlCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDgKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDVjY2ZmNjg5ZmIyOTBlMDBiODVmZTE4ZWU1MGM1NGJhCitUZXh0LWNvcHktc291cmNlLXNoYTE6IGExM2RlOGUyM2YxNDgzZWZjYTNlNTdiMmI2NGIwYWU2Zjc0MGNlMTAKKworCisKKworUmV2aXNpb24tbnVtYmVyOiAxMAorUHJvcC1jb250ZW50LWxlbmd0aDogMTI4CitDb250ZW50LWxlbmd0aDogMTI4CisKK0sgNworc3ZuOmxvZworViAzMAorKHIxMCkgbGVmdCBzdWItYnJhbmNoIHVwZGF0ZSAxCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxNS4wNDk5MzVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1Yi9SRUFETUUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDcKK1RleHQtY29udGVudC1tZDU6IGZkYmNmYjZiZTlhZmUxMTIxODYyMTQzZjIyNmI1MWNmCitUZXh0LWNvbnRlbnQtc2hhMTogMWQxZjVlYTRjZWI1ODQzMzdmZmU1OWI4OTgwZDkyZTNiNzhkZmVmNAorQ29udGVudC1sZW5ndGg6IDE3CisKK1BST1BTLUVORAorY3J1bmNoCisKKworUmV2aXNpb24tbnVtYmVyOiAxMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTI1CitDb250ZW50LWxlbmd0aDogMTI1CisKK0sgNworc3ZuOmxvZworViAyNworKHIxMSkgTWVyZ2UgbGVmdCB0byB0cnVuayAxCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxOC4wNTY1OTRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDU0CitDb250ZW50LWxlbmd0aDogNTQKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAxOQorL2JyYW5jaGVzL2xlZnQ6Mi0xMAorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTkzCitUZXh0LWNvbnRlbnQtbWQ1OiA1Y2NmZjY4OWZiMjkwZTAwYjg1ZmUxOGVlNTBjNTRiYQorVGV4dC1jb250ZW50LXNoYTE6IGExM2RlOGUyM2YxNDgzZWZjYTNlNTdiMmI2NGIwYWU2Zjc0MGNlMTAKK0NvbnRlbnQtbGVuZ3RoOiAyNTkzCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDEyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTcKK0NvbnRlbnQtbGVuZ3RoOiAxMTcKKworSyA3Citzdm46bG9nCitWIDE5CisocjEyKSBsZWZ0IHVwZGF0ZSA0CitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoxOS4wNDk2MjBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L3psb25rCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA3CitUZXh0LWNvbnRlbnQtbWQ1OiA4YjlkOGM3YzJhYWE2MTY3ZTdkMzQwN2E3NzNiYmJiYQorVGV4dC1jb250ZW50LXNoYTE6IDk3MTY1MjdlYmQ3MGE3NWMyNzYyNWNhY2JlYjJkODk3YzZlODYxNzgKK0NvbnRlbnQtbGVuZ3RoOiAxNworCitQUk9QUy1FTkQKK3RvdWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogMTMKK1Byb3AtY29udGVudC1sZW5ndGg6IDExOAorQ29udGVudC1sZW5ndGg6IDExOAorCitLIDcKK3N2bjpsb2cKK1YgMjAKKyhyMTMpIHJpZ2h0IHVwZGF0ZSAyCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoyMC4wNDk2NTlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yaWdodC9iYW5nCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA4CitUZXh0LWNvbnRlbnQtbWQ1OiAzNGMyOGYxZDJkYzZhOWFkZWNjYzQyNjViZjc1MTZjYgorVGV4dC1jb250ZW50LXNoYTE6IDBiYzViYjM0NWMwZTcxZDI4Zjc4NGYxMmUwYmQyZDM4NGMyODMwNjIKK0NvbnRlbnQtbGVuZ3RoOiAxOAorCitQUk9QUy1FTkQKK3Rod2Fja2UKKworCitSZXZpc2lvbi1udW1iZXI6IDE0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNDAKK0NvbnRlbnQtbGVuZ3RoOiAxNDAKKworSyA3Citzdm46bG9nCitWIDQyCisocjE0KSBDaGVycnktcGljayByaWdodCAyIGNvbW1pdHMgdG8gdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjIzLjA0MTk5MVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNzUKK0NvbnRlbnQtbGVuZ3RoOiA3NQorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDQwCisvYnJhbmNoZXMvbGVmdDoyLTEwCisvYnJhbmNoZXMvcmlnaHQ6Ni0xMworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNzEzCitUZXh0LWNvbnRlbnQtbWQ1OiAwYWZiZTM0ZjI0NGNkNjYyYjFmOTdkNzA4YzY4N2Y5MAorVGV4dC1jb250ZW50LXNoYTE6IDQ2ZDkzNzdkNzgzZTY3YTliNTgxZGExMTAzNTJlNzk5NTE3YzhhMTQKK0NvbnRlbnQtbGVuZ3RoOiAyNzEzCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UgbWVyZ2UtY2FjaGUKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCittZXJnZS1jYWNoZTogbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtY2FjaGUgbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitOb2RlLXBhdGg6IHRydW5rL2JhbmcKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEzCitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL3JpZ2h0L2JhbmcKK1RleHQtY29weS1zb3VyY2UtbWQ1OiAzNGMyOGYxZDJkYzZhOWFkZWNjYzQyNjViZjc1MTZjYgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiAwYmM1YmIzNDVjMGU3MWQyOGY3ODRmMTJlMGJkMmQzODRjMjgzMDYyCisKKworUmV2aXNpb24tbnVtYmVyOiAxNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTI2CitDb250ZW50LWxlbmd0aDogMTI2CisKK0sgNworc3ZuOmxvZworViAyOAorKHIxNSkgTWVyZ2UgcmlnaHQgdG8gdHJ1bmsgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MjYuMDU0NDU2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA3NQorQ29udGVudC1sZW5ndGg6IDc1CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgNDAKKy9icmFuY2hlcy9sZWZ0OjItMTAKKy9icmFuY2hlcy9yaWdodDoyLTE0CitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDE2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTgKK0NvbnRlbnQtbGVuZ3RoOiAxMTgKKworSyA3Citzdm46bG9nCitWIDIwCisocjE2KSByaWdodCB1cGRhdGUgMworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MjcuMDQ5OTU1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmlnaHQvdXJra2sKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDYKK1RleHQtY29udGVudC1tZDU6IDU4ODljODM5MmUxNjI1MWIwYzgwOTI3NjA3YTAzMDM2CitUZXh0LWNvbnRlbnQtc2hhMTogMzkzNDI2NGQyNzdhMGNmODg2YjZiMWM3ZjJiOWU1NmRhMjUyNTMwMgorQ29udGVudC1sZW5ndGg6IDE2CisKK1BST1BTLUVORAord2hhbW0KKworCitSZXZpc2lvbi1udW1iZXI6IDE3CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTgKK0NvbnRlbnQtbGVuZ3RoOiAxMTgKKworSyA3Citzdm46bG9nCitWIDIwCisocjE3KSB0cnVuayB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MjguMDQ5NjE1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvdnJvbmsKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IGIyZjgwZmEwMmE3ZjEzNjRiOWMyOWQzZGE0NGJmOWY5CitUZXh0LWNvbnRlbnQtc2hhMTogZTk5NGQ5ODBjMGYyZDdhM2Y3NjEzOGJmOTZkNTdmMzZmOTYzMzgyOAorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorcG93CisKKworUmV2aXNpb24tbnVtYmVyOiAxOAorUHJvcC1jb250ZW50LWxlbmd0aDogMTM0CitDb250ZW50LWxlbmd0aDogMTM0CisKK0sgNworc3ZuOmxvZworViAzNgorKHIxOCkgTWVyZ2UgcmlnaHQgdG8gbGVmdCBzdWItYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDozMS4wNjE0NjBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1YgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDU1CitDb250ZW50LWxlbmd0aDogNTUKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAyMAorL2JyYW5jaGVzL3JpZ2h0OjItMTcKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjcxMworVGV4dC1jb250ZW50LW1kNTogMGFmYmUzNGYyNDRjZDY2MmIxZjk3ZDcwOGM2ODdmOTAKK1RleHQtY29udGVudC1zaGExOiA0NmQ5Mzc3ZDc4M2U2N2E5YjU4MWRhMTEwMzUyZTc5OTUxN2M4YTE0CitDb250ZW50LWxlbmd0aDogMjcxMworCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlIG1lcmdlLWNhY2hlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworbWVyZ2UtY2FjaGU6IG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWNhY2hlIG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1Yi9iYW5nCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxNworTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9yaWdodC9iYW5nCitUZXh0LWNvcHktc291cmNlLW1kNTogMzRjMjhmMWQyZGM2YTlhZGVjY2M0MjY1YmY3NTE2Y2IKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMGJjNWJiMzQ1YzBlNzFkMjhmNzg0ZjEyZTBiZDJkMzg0YzI4MzA2MgorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvdXJra2sKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDE3CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL3JpZ2h0L3Vya2trCitUZXh0LWNvcHktc291cmNlLW1kNTogNTg4OWM4MzkyZTE2MjUxYjBjODA5Mjc2MDdhMDMwMzYKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMzkzNDI2NGQyNzdhMGNmODg2YjZiMWM3ZjJiOWU1NmRhMjUyNTMwMgorCisKK1JldmlzaW9uLW51bWJlcjogMTkKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyOAorQ29udGVudC1sZW5ndGg6IDEyOAorCitLIDcKK3N2bjpsb2cKK1YgMzAKKyhyMTkpIGxlZnQgc3ViLWJyYW5jaCB1cGRhdGUgMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MzIuMDQ5MjQ0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvd2hhbV9ldGgKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDYKK1RleHQtY29udGVudC1tZDU6IDc1N2JjZDU4MTg1NzJlZjNmOTU4MDA1MjYxN2MxYzhiCitUZXh0LWNvbnRlbnQtc2hhMTogYjE2NTAxOWIwMDVjMTk5MjM3YmE4MjJjNDQwNGU3NzFlOTNiNjU0YQorQ29udGVudC1sZW5ndGg6IDE2CisKK1BST1BTLUVORAorem93aWUKKworCitSZXZpc2lvbi1udW1iZXI6IDIwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTcKK0NvbnRlbnQtbGVuZ3RoOiAxMTcKKworSyA3Citzdm46bG9nCitWIDE5CisocjIwKSBsZWZ0IHVwZGF0ZSA1CitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDozMy4wNDkzMzJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L2dsdXJwcAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogMTRhMTY5ZjYyOGUwYmI1OWRmOWMyMTYwNjQ5ZDBhMzAKK1RleHQtY29udGVudC1zaGExOiBlZjdkOTI5ZTUyMTc3NzY3ZWNmY2QyODk0MWY2YjdmMDRiNDEzMWUzCitDb250ZW50LWxlbmd0aDogMTgKKworUFJPUFMtRU5ECitlZWVfeW93CisKKworUmV2aXNpb24tbnVtYmVyOiAyMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTQ2CitDb250ZW50LWxlbmd0aDogMTQ2CisKK0sgNworc3ZuOmxvZworViA0OAorKHIyMSkgQ2hlcnJ5LXBpY2sgbGVmdCBzdWItYnJhbmNoIGNvbW1pdCB0byBsZWZ0CitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDozNi4wNDE4MzlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDIxCisvYnJhbmNoZXMvbGVmdC1zdWI6MTkKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC93aGFtX2V0aAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMTkKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvd2hhbV9ldGgKK1RleHQtY29weS1zb3VyY2UtbWQ1OiA3NTdiY2Q1ODE4NTcyZWYzZjk1ODAwNTI2MTdjMWM4YgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiBiMTY1MDE5YjAwNWMxOTkyMzdiYTgyMmM0NDA0ZTc3MWU5M2I2NTRhCisKKworUmV2aXNpb24tbnVtYmVyOiAyMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTMzCitDb250ZW50LWxlbmd0aDogMTMzCisKK0sgNworc3ZuOmxvZworViAzNQorKHIyMikgTWVyZ2UgbGVmdCBzdWItYnJhbmNoIHRvIGxlZnQKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjM5LjA0NTAxNFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA3OQorQ29udGVudC1sZW5ndGg6IDc5CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgNDQKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0xNworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDI3MTMKK1RleHQtY29udGVudC1tZDU6IDBhZmJlMzRmMjQ0Y2Q2NjJiMWY5N2Q3MDhjNjg3ZjkwCitUZXh0LWNvbnRlbnQtc2hhMTogNDZkOTM3N2Q3ODNlNjdhOWI1ODFkYTExMDM1MmU3OTk1MTdjOGExNAorQ29udGVudC1sZW5ndGg6IDI3MTMKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZSBtZXJnZS1jYWNoZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK21lcmdlLWNhY2hlOiBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1jYWNoZSBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9SRUFETUUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDE4CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL1JFQURNRQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IGZkYmNmYjZiZTlhZmUxMTIxODYyMTQzZjIyNmI1MWNmCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDFkMWY1ZWE0Y2ViNTg0MzM3ZmZlNTliODk4MGQ5MmUzYjc4ZGZlZjQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvYmFuZworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMTgKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvYmFuZworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDM0YzI4ZjFkMmRjNmE5YWRlY2NjNDI2NWJmNzUxNmNiCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDBiYzViYjM0NWMwZTcxZDI4Zjc4NGYxMmUwYmQyZDM4NGMyODMwNjIKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvdXJra2sKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDE4CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL3Vya2trCitUZXh0LWNvcHktc291cmNlLW1kNTogNTg4OWM4MzkyZTE2MjUxYjBjODA5Mjc2MDdhMDMwMzYKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMzkzNDI2NGQyNzdhMGNmODg2YjZiMWM3ZjJiOWU1NmRhMjUyNTMwMgorCisKK1JldmlzaW9uLW51bWJlcjogMjMKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyNQorQ29udGVudC1sZW5ndGg6IDEyNQorCitLIDcKK3N2bjpsb2cKK1YgMjcKKyhyMjMpIE1lcmdlIGxlZnQgdG8gdHJ1bmsgMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6NDIuMDUyNzk4WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA5OQorQ29udGVudC1sZW5ndGg6IDk5CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgNjQKKy9icmFuY2hlcy9sZWZ0OjItMjIKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0xNworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9SRUFETUUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDIyCitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQvUkVBRE1FCitUZXh0LWNvcHktc291cmNlLW1kNTogZmRiY2ZiNmJlOWFmZTExMjE4NjIxNDNmMjI2YjUxY2YKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMWQxZjVlYTRjZWI1ODQzMzdmZmU1OWI4OTgwZDkyZTNiNzhkZmVmNAorCisKK05vZGUtcGF0aDogdHJ1bmsvZ2x1cnBwCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0L2dsdXJwcAorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDE0YTE2OWY2MjhlMGJiNTlkZjljMjE2MDY0OWQwYTMwCitUZXh0LWNvcHktc291cmNlLXNoYTE6IGVmN2Q5MjllNTIxNzc3NjdlY2ZjZDI4OTQxZjZiN2YwNGI0MTMxZTMKKworCitOb2RlLXBhdGg6IHRydW5rL3Vya2trCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0L3Vya2trCitUZXh0LWNvcHktc291cmNlLW1kNTogNTg4OWM4MzkyZTE2MjUxYjBjODA5Mjc2MDdhMDMwMzYKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMzkzNDI2NGQyNzdhMGNmODg2YjZiMWM3ZjJiOWU1NmRhMjUyNTMwMgorCisKK05vZGUtcGF0aDogdHJ1bmsvd2hhbV9ldGgKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDIyCitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQvd2hhbV9ldGgKK1RleHQtY29weS1zb3VyY2UtbWQ1OiA3NTdiY2Q1ODE4NTcyZWYzZjk1ODAwNTI2MTdjMWM4YgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiBiMTY1MDE5YjAwNWMxOTkyMzdiYTgyMmM0NDA0ZTc3MWU5M2I2NTRhCisKKworTm9kZS1wYXRoOiB0cnVuay96bG9uaworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMjIKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC96bG9uaworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDhiOWQ4YzdjMmFhYTYxNjdlN2QzNDA3YTc3M2JiYmJhCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDk3MTY1MjdlYmQ3MGE3NWMyNzYyNWNhY2JlYjJkODk3YzZlODYxNzgKKworCitSZXZpc2lvbi1udW1iZXI6IDI0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMzAKK0NvbnRlbnQtbGVuZ3RoOiAxMzAKKworSyA3Citzdm46bG9nCitWIDMyCisocjI0KSBub24tbWVyZ2UgcmlnaHQgdG8gdHJ1bmsgMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6NDQuMDM4NDM0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA5OQorQ29udGVudC1sZW5ndGg6IDk5CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgNjQKKy9icmFuY2hlcy9sZWZ0OjItMjIKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0yMgorUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAyNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTI5CitDb250ZW50LWxlbmd0aDogMTI5CisKK0sgNworc3ZuOmxvZworViAzMQorKHIyNSkgbWFrZSBiMSBicmFuY2ggZnJvbSB0cnVuaworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTg6NTYuMDg0NTg5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYjEKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMjQKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDI2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjkKK0NvbnRlbnQtbGVuZ3RoOiAxMjkKKworSyA3Citzdm46bG9nCitWIDMxCisocjI2KSBtYWtlIGIyIGJyYW5jaCBmcm9tIHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxODo1OS4wNzY5NDBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9iMgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyNQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogMjcKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNQorQ29udGVudC1sZW5ndGg6IDExNQorCitLIDcKK3N2bjpsb2cKK1YgMTcKKyhyMjcpIGIyIHVwZGF0ZSAxCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOTowMS4wOTU3NjJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9iMi9iMmZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDMKK1RleHQtY29udGVudC1tZDU6IDVlZGJkZDU3Y2JhNjIxZWIzYzZlNjAxYmY1NjNiNGRjCitUZXh0LWNvbnRlbnQtc2hhMTogOWQ0YjM4MDQ5Nzc2YmQwYTIwNzRkNjdjYWQyM2Y4ZWFlZDM1YTNiMworQ29udGVudC1sZW5ndGg6IDEzCisKK1BST1BTLUVORAorYjIKKworCitSZXZpc2lvbi1udW1iZXI6IDI4CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTUKK0NvbnRlbnQtbGVuZ3RoOiAxMTUKKworSyA3Citzdm46bG9nCitWIDE3CisocjI4KSBiMSB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MDMuMDk3NDY1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYjEvYjFmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAzCitUZXh0LWNvbnRlbnQtbWQ1OiAwODc3OGRmZDlhYzRmNjAzMjMxODk2YWJhN2FhZDUyMworVGV4dC1jb250ZW50LXNoYTE6IGI1NTE3NzFhYTRhZDViMTQxMjNmYzNiZDk4ZDg5ZGIyYmMwZWRkNGYKK0NvbnRlbnQtbGVuZ3RoOiAxMworCitQUk9QUy1FTkQKK2IxCisKKworUmV2aXNpb24tbnVtYmVyOiAyOQorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAyMworKHIyOSkgTWVyZ2UgYjEgdG8gdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjA2LjA3MzE3NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTE4CitDb250ZW50LWxlbmd0aDogMTE4CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgODMKKy9icmFuY2hlcy9iMToyNS0yOAorL2JyYW5jaGVzL2xlZnQ6Mi0yMgorL2JyYW5jaGVzL2xlZnQtc3ViOjQtMTkKKy9icmFuY2hlcy9yaWdodDoyLTIyCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rL2IxZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMjgKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvYjEvYjFmaWxlCitUZXh0LWNvcHktc291cmNlLW1kNTogMDg3NzhkZmQ5YWM0ZjYwMzIzMTg5NmFiYTdhYWQ1MjMKK1RleHQtY29weS1zb3VyY2Utc2hhMTogYjU1MTc3MWFhNGFkNWIxNDEyM2ZjM2JkOThkODlkYjJiYzBlZGQ0ZgorCisKK1JldmlzaW9uLW51bWJlcjogMzAKK1Byb3AtY29udGVudC1sZW5ndGg6IDE0MworQ29udGVudC1sZW5ndGg6IDE0MworCitLIDcKK3N2bjpsb2cKK1YgNDUKKyhyMzApIHRydW5rIGNvbW1pdCBiZWZvcmUgbWVyZ2luZyB0cnVuayB0byBiMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MDguMDk2MzUzWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvdHJ1bmtmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA2CitUZXh0LWNvbnRlbnQtbWQ1OiBlZGY0NWZlNWM5OGM1MzY3NzMzYjM5YmJiMmJiMjBkOQorVGV4dC1jb250ZW50LXNoYTE6IDczNjFkMTY4NWU1Yzg2ZGZjNTIzNjIwY2ZhZjU5OGYxOTZmODYyMzkKK0NvbnRlbnQtbGVuZ3RoOiAxNgorCitQUk9QUy1FTkQKK3RydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiAzMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAyMworKHIzMSkgTWVyZ2UgdHJ1bmsgdG8gYjIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjExLjA4MTU0MVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2IyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTMxCitDb250ZW50LWxlbmd0aDogMTMxCisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgOTYKKy9icmFuY2hlcy9iMToyNS0yOAorL2JyYW5jaGVzL2xlZnQ6Mi0yMgorL2JyYW5jaGVzL2xlZnQtc3ViOjQtMTkKKy9icmFuY2hlcy9yaWdodDoyLTIyCisvdHJ1bms6MjYtMzAKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvYjIvYjFmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzMAorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuay9iMWZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiAwODc3OGRmZDlhYzRmNjAzMjMxODk2YWJhN2FhZDUyMworVGV4dC1jb3B5LXNvdXJjZS1zaGExOiBiNTUxNzcxYWE0YWQ1YjE0MTIzZmMzYmQ5OGQ4OWRiMmJjMGVkZDRmCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9iMi90cnVua2ZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDMwCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rL3RydW5rZmlsZQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IGVkZjQ1ZmU1Yzk4YzUzNjc3MzNiMzliYmIyYmIyMGQ5CitUZXh0LWNvcHktc291cmNlLXNoYTE6IDczNjFkMTY4NWU1Yzg2ZGZjNTIzNjIwY2ZhZjU5OGYxOTZmODYyMzkKKworCitSZXZpc2lvbi1udW1iZXI6IDMyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjEKK0NvbnRlbnQtbGVuZ3RoOiAxMjEKKworSyA3Citzdm46bG9nCitWIDIzCisocjMyKSBNZXJnZSBiMiB0byB0cnVuaworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MTQuMTE3OTM5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMzgKK0NvbnRlbnQtbGVuZ3RoOiAxMzgKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAxMDIKKy9icmFuY2hlcy9iMToyNS0yOAorL2JyYW5jaGVzL2IyOjI2LTMxCisvYnJhbmNoZXMvbGVmdDoyLTIyCisvYnJhbmNoZXMvbGVmdC1zdWI6NC0xOQorL2JyYW5jaGVzL3JpZ2h0OjItMjIKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvYjJmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9iMi9iMmZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiA1ZWRiZGQ1N2NiYTYyMWViM2M2ZTYwMWJmNTYzYjRkYworVGV4dC1jb3B5LXNvdXJjZS1zaGExOiA5ZDRiMzgwNDk3NzZiZDBhMjA3NGQ2N2NhZDIzZjhlYWVkMzVhM2IzCisKKworUmV2aXNpb24tbnVtYmVyOiAzMworUHJvcC1jb250ZW50LWxlbmd0aDogMTQ1CitDb250ZW50LWxlbmd0aDogMTQ1CisKK0sgNworc3ZuOmxvZworViA0NworKHIzMykgbWFrZSBmMSBicmFuY2ggZnJvbSB0cnVuayB3aXRoIGEgbmV3IGZpbGUKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjE3LjEwNTgzMloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2YxCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDMyCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9mMS9mMWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDMKK1RleHQtY29udGVudC1tZDU6IDJiMWFiYzZiNmM1YzAwMTg4NTFmOWY4ZTY0NzU1NjNiCitUZXh0LWNvbnRlbnQtc2hhMTogYWVjZTZkZmJhNTg4OTAwZTAwZDk1NjAxZDIyYjQ0MDhkNDk1ODBhZgorQ29udGVudC1sZW5ndGg6IDEzCisKK1BST1BTLUVORAorZjEKKworCitSZXZpc2lvbi1udW1iZXI6IDM0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNDUKK0NvbnRlbnQtbGVuZ3RoOiAxNDUKKworSyA3Citzdm46bG9nCitWIDQ3CisocjM0KSBtYWtlIGYyIGJyYW5jaCBmcm9tIHRydW5rIHdpdGggYSBuZXcgZmlsZQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MjAuMTEwMDU3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvZjIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMzMKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2YyL2YyZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMworVGV4dC1jb250ZW50LW1kNTogNTc1YzU2MzhkNjAyNzE0NTdlNTRhYjdkMDczMDk1MDIKK1RleHQtY29udGVudC1zaGExOiAxYzQ5YTQ0MGMzNTJmMzQ3M2VmYTk1MTIyNTUwMzNiOTRkYzdkZWYwCitDb250ZW50LWxlbmd0aDogMTMKKworUFJPUFMtRU5ECitmMgorCisKK1JldmlzaW9uLW51bWJlcjogMzUKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyOAorQ29udGVudC1sZW5ndGg6IDEyOAorCitLIDcKK3N2bjpsb2cKK1YgMzAKKyhyMzUpIE1lcmdlIGYxIGFuZCBmMiB0byB0cnVuaworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MjQuMDgxNDkwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNzMKK0NvbnRlbnQtbGVuZ3RoOiAxNzMKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAxMzcKKy9icmFuY2hlcy9iMToyNS0yOAorL2JyYW5jaGVzL2IyOjI2LTMxCisvYnJhbmNoZXMvZjE6MzMtMzQKKy9icmFuY2hlcy9mMjozNAorL2JyYW5jaGVzL2xlZnQ6Mi0yMgorL2JyYW5jaGVzL2xlZnQtc3ViOjQtMTkKKy9icmFuY2hlcy9yaWdodDoyLTIyCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rL2YxZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMzQKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvZjEvZjFmaWxlCitUZXh0LWNvcHktc291cmNlLW1kNTogMmIxYWJjNmI2YzVjMDAxODg1MWY5ZjhlNjQ3NTU2M2IKK1RleHQtY29weS1zb3VyY2Utc2hhMTogYWVjZTZkZmJhNTg4OTAwZTAwZDk1NjAxZDIyYjQ0MDhkNDk1ODBhZgorCisKK05vZGUtcGF0aDogdHJ1bmsvZjJmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzNAorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9mMi9mMmZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiA1NzVjNTYzOGQ2MDI3MTQ1N2U1NGFiN2QwNzMwOTUwMgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiAxYzQ5YTQ0MGMzNTJmMzQ3M2VmYTk1MTIyNTUwMzNiOTRkYzdkZWYwCisKKworUmV2aXNpb24tbnVtYmVyOiAzNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTM1CitDb250ZW50LWxlbmd0aDogMTM1CisKK0sgNworc3ZuOmxvZworViAzNworKHIzNikgYWRkIHN1YmRpcmVjdG9yeSB0byBsZWZ0IGJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MjYuMTEzNTE2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9zdWJkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9zdWJkaXIvY293Ym95CitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA3CitUZXh0LWNvbnRlbnQtbWQ1OiBmMWQ2NTMwMjc4YWQ0MDllNjhjYzY3NTQ3NmFkOTk1ZgorVGV4dC1jb250ZW50LXNoYTE6IDczMmQ5ZTNlNWMzOTFmZmQ3NjdhOThiNDVkZGNjODQ4ZGU3NzhjZWEKK0NvbnRlbnQtbGVuZ3RoOiAxNworCitQUk9QUy1FTkQKK1llZWhhdworCisKK1JldmlzaW9uLW51bWJlcjogMzcKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMworQ29udGVudC1sZW5ndGg6IDEyMworCitLIDcKK3N2bjpsb2cKK1YgMjUKKyhyMzcpIG1lcmdlIGxlZnQgdG8gdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjI5LjA3MzY5OVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTczCitDb250ZW50LWxlbmd0aDogMTczCisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMTM3CisvYnJhbmNoZXMvYjE6MjUtMjgKKy9icmFuY2hlcy9iMjoyNi0zMQorL2JyYW5jaGVzL2YxOjMzLTM0CisvYnJhbmNoZXMvZjI6MzQKKy9icmFuY2hlcy9sZWZ0OjItMzYKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0yMgorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9zdWJkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMzYKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC9zdWJkaXIKKworCitSZXZpc2lvbi1udW1iZXI6IDM4CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjMKK0NvbnRlbnQtbGVuZ3RoOiAxMjMKKworSyA3Citzdm46bG9nCitWIDI1CisocjM4KSBtYWtlIHBhcnRpYWwgYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOTozMi4wNzIyNDNaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9wYXJ0aWFsCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDM3CitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rL3N1YmRpcgorCisKK1JldmlzaW9uLW51bWJlcjogMzkKK1Byb3AtY29udGVudC1sZW5ndGg6IDExOAorQ29udGVudC1sZW5ndGg6IDExOAorCitLIDcKK3N2bjpsb2cKK1YgMjAKKyhyMzkpIHBhcnRpYWwgdXBkYXRlCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOTozNC4wOTc5NjFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9wYXJ0aWFsL3BhbGluZHJvbWVzCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA4CitUZXh0LWNvbnRlbnQtbWQ1OiA1ZDFjMjAyNGZiNWVmYzRlZWY4MTI4NTZkZjFiMDgwYworVGV4dC1jb250ZW50LXNoYTE6IDVmODUwOWRkZDE0YzkxYTUyODY0ZGQxNDQ3MzQ0ZTcwNmY5YmJjNjkKK0NvbnRlbnQtbGVuZ3RoOiAxOAorCitQUk9QUy1FTkQKK3JhY2VjYXIKKworCitSZXZpc2lvbi1udW1iZXI6IDQwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjYKK0NvbnRlbnQtbGVuZ3RoOiAxMjYKKworSyA3Citzdm46bG9nCitWIDI4CisocjQwKSBtZXJnZSBwYXJ0aWFsIHRvIHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOTozNy4wODAyMTFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9zdWJkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAyNDYKK0NvbnRlbnQtbGVuZ3RoOiAyNDYKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAyMTAKKy9icmFuY2hlcy9iMS9zdWJkaXI6MjUtMjgKKy9icmFuY2hlcy9iMi9zdWJkaXI6MjYtMzEKKy9icmFuY2hlcy9mMS9zdWJkaXI6MzMtMzQKKy9icmFuY2hlcy9mMi9zdWJkaXI6MzQKKy9icmFuY2hlcy9sZWZ0L3N1YmRpcjoyLTM2CisvYnJhbmNoZXMvbGVmdC1zdWIvc3ViZGlyOjQtMTkKKy9icmFuY2hlcy9wYXJ0aWFsOjM4LTM5CisvYnJhbmNoZXMvcmlnaHQvc3ViZGlyOjItMjIKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvc3ViZGlyL3BhbGluZHJvbWVzCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzOQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9wYXJ0aWFsL3BhbGluZHJvbWVzCitUZXh0LWNvcHktc291cmNlLW1kNTogNWQxYzIwMjRmYjVlZmM0ZWVmODEyODU2ZGYxYjA4MGMKK1RleHQtY29weS1zb3VyY2Utc2hhMTogNWY4NTA5ZGRkMTRjOTFhNTI4NjRkZDE0NDczNDRlNzA2ZjliYmM2OQorCisKK1JldmlzaW9uLW51bWJlcjogNDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDcKK3N2bjpsb2cKK1YgMTgKKyhyNDEpIHRhZ2dpbmcgdjEuMAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6NDAuMDgzNDYwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdGFncy92MS4wCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDQwCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiA0MgorUHJvcC1jb250ZW50LWxlbmd0aDogMTMxCitDb250ZW50LWxlbmd0aDogMTMxCisKK0sgNworc3ZuOmxvZworViAzMworKHI0MikgbWFrZSBidWdmaXggYnJhbmNoIGZyb20gdGFnCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOTo0My4xMTgwNzVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9idWdmaXgKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogNDEKK05vZGUtY29weWZyb20tcGF0aDogdGFncy92MS4wCisKKworUmV2aXNpb24tbnVtYmVyOiA0MworUHJvcC1jb250ZW50LWxlbmd0aDogMTIwCitDb250ZW50LWxlbmd0aDogMTIwCisKK0sgNworc3ZuOmxvZworViAyMgorKHI0MykgY29tbWl0IHRvIGJ1Z2ZpeAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6NDUuMDc5NTM2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYnVnZml4L3N1YmRpci9wYWxpbmRyb21lcworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxNAorVGV4dC1jb250ZW50LW1kNTogM2IxMmQ5ODU3OGEzZjQzMjBiYTk3ZTY2ZGE1NGZlNWYKK1RleHQtY29udGVudC1zaGExOiA2NzI5MzFjOWU4YWMyYzQwODIwOWVmYWIyZjAxNTYzOGI2ZDY0MDQyCitDb250ZW50LWxlbmd0aDogMTQKKworcmFjZWNhcgora2F5YWsKKworCitSZXZpc2lvbi1udW1iZXI6IDQ0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjUKK0NvbnRlbnQtbGVuZ3RoOiAxMjUKKworSyA3Citzdm46bG9nCitWIDI3CisocjQ0KSBNZXJnZSBCVUdGSVggdG8gVFJVTksKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjQ4LjA3ODkxNFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMjEwCitDb250ZW50LWxlbmd0aDogMjEwCisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMTc0CisvYnJhbmNoZXMvYjE6MjUtMjgKKy9icmFuY2hlcy9iMjoyNi0zMQorL2JyYW5jaGVzL2J1Z2ZpeDo0Mi00MworL2JyYW5jaGVzL2YxOjMzLTM0CisvYnJhbmNoZXMvZjI6MzQKKy9icmFuY2hlcy9sZWZ0OjItMzYKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0yMgorL3RhZ3MvdjEuMDo0MQorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9zdWJkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAyOTcKK0NvbnRlbnQtbGVuZ3RoOiAyOTcKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAyNjEKKy9icmFuY2hlcy9iMS9zdWJkaXI6MjUtMjgKKy9icmFuY2hlcy9iMi9zdWJkaXI6MjYtMzEKKy9icmFuY2hlcy9idWdmaXgvc3ViZGlyOjQyLTQzCisvYnJhbmNoZXMvZjEvc3ViZGlyOjMzLTM0CisvYnJhbmNoZXMvZjIvc3ViZGlyOjM0CisvYnJhbmNoZXMvbGVmdC9zdWJkaXI6Mi0zNgorL2JyYW5jaGVzL2xlZnQtc3ViL3N1YmRpcjo0LTE5CisvYnJhbmNoZXMvcGFydGlhbDozOC0zOQorL2JyYW5jaGVzL3JpZ2h0L3N1YmRpcjoyLTIyCisvdGFncy92MS4wL3N1YmRpcjo0MQorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9zdWJkaXIvcGFsaW5kcm9tZXMKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMTQKK1RleHQtY29udGVudC1tZDU6IDNiMTJkOTg1NzhhM2Y0MzIwYmE5N2U2NmRhNTRmZTVmCitUZXh0LWNvbnRlbnQtc2hhMTogNjcyOTMxYzllOGFjMmM0MDgyMDllZmFiMmYwMTU2MzhiNmQ2NDA0MgorQ29udGVudC1sZW5ndGg6IDE0CisKK3JhY2VjYXIKK2theWFrCisKKwpkaWZmIC0tZ2l0IGEvdC90OTE1Mi1zdm4tZW1wdHktZGlycy1hZnRlci1nYy5zaCBiL3QvdDkxNTItc3ZuLWVtcHR5LWRpcnMtYWZ0ZXItZ2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODlmMjg1ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTItc3ZuLWVtcHR5LWRpcnMtYWZ0ZXItZ2Muc2gKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBSb2JlcnQgWmVoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gY3JlYXRlcyBlbXB0eSBkaXJlY3RvcmllcywgY2FsbHMgZ2l0IGdjLCBtYWtlcyBzdXJlIHRoZXkgYXJlIHN0aWxsIGVtcHR5JworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJworCWZvciBpIGluIGEgYiBjIGQgZC9lIGQvZS9mICJ3ZWlyZCBmaWxlIG5hbWUiCisJZG8KKwkJc3ZuX2NtZCBta2RpciAtbSAibWtkaXIgJGkiICIkc3ZucmVwbyIvIiRpIgorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUnICdnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgY2xvbmVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGdjIHJ1bnMnICcKKwkoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgc3ZuIGdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIG1rZGlycyByZWNyZWF0ZXMgZW1wdHkgZGlyZWN0b3JpZXMgYWZ0ZXIgZ2l0IHN2biBnYycgJworCSgKKwkJY2QgY2xvbmVkICYmCisJCXJtIC1yICogJiYKKwkJZ2l0IHN2biBta2RpcnMgJiYKKwkJZm9yIGkgaW4gYSBiIGMgZCBkL2UgZC9lL2YgIndlaXJkIGZpbGUgbmFtZSIKKwkJZG8KKwkJCWlmICEgdGVzdCAtZCAiJGkiCisJCQl0aGVuCisJCQkJZWNobyA+JjIgIiRpIGRvZXMgbm90IGV4aXN0IiAmJgorCQkJCWV4aXQgMQorCQkJZmkKKwkJZG9uZQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTUzLWdpdC1zdm4tcmV3cml0ZS11dWlkLnNoIGIvdC90OTE1My1naXQtc3ZuLXJld3JpdGUtdXVpZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44Y2IyYjVjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1My1naXQtc3ZuLXJld3JpdGUtdXVpZC5zaApAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEpheSBTb2ZmaWFuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gLS1yZXdyaXRlLXV1aWQgdGVzdCcKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3V1aWQ9NmNjOGFkYTQtNTkzMi00YjRhLTgyNDItMzUzNGVkOGEzMjMyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIHJlcG8nICIKKwlzdm5hZG1pbiBsb2FkIC1xICckcmF3c3ZucmVwbycgPCAnJFRFU1RfRElSRUNUT1JZL3Q5MTUzL3N2bi5kdW1wJyAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtLXJld3JpdGUtdXVpZD0nJHV1aWQnICckc3ZucmVwbycgJiYKKwlnaXQgc3ZuIGZldGNoCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdXVpZCcgIgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MCA+YWN0dWFsICYmCisJZ3JlcCAnXmdpdC1zdm4taWQ6IC4qQDIgJHV1aWQkJyBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjEgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAuKkAxICR1dWlkJCcgYWN0dWFsCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNTMvc3ZuLmR1bXAgYi90L3Q5MTUzL3N2bi5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZGZlNzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTUzL3N2bi5kdW1wCkBAIC0wLDAgKzEsNzUgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IGI0ODg1NjI2LWM5NGYtNGE2Yy1iMTc5LTAwYzAzMGZjNjhlOAorCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNjo0MTowMy45MDg1NzZaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMDkKK0NvbnRlbnQtbGVuZ3RoOiAxMDkKKworSyA3Citzdm46bG9nCitWIDExCitpbml0aWFsIGZvbworSyAxMAorc3ZuOmF1dGhvcgorViAzCitqYXkKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMjNUMDY6NDE6NDguMzUzNzc2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogZm9vCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiBkM2IwNzM4NGQxMTNlZGVjNDllYWE2MjM4YWQ1ZmYwMAorVGV4dC1jb250ZW50LXNoYTE6IGYxZDJkMmY5MjRlOTg2YWM4NmZkZjdiMzZjOTRiY2RmMzJiZWVjMTUKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK2ZvbworCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViAxMgorbm93IHdpdGggYmFyCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2pheQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNjo0MjoxNC4yMTQ2NDBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBmb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogZjQ3Yzc1NjE0MDg3YThkZDkzOGJhNGFjZmYyNTI0OTQKK1RleHQtY29udGVudC1zaGExOiA0ZTQ4ZTJjOWEzZDJjYThhNzA4Y2IwY2M1NDU3MDA1NDRlZmI1MDIxCitDb250ZW50LWxlbmd0aDogOAorCitmb28KK2JhcgorCisKZGlmZiAtLWdpdCBhL3QvdDkxNTQtZ2l0LXN2bi1mYW5jeS1nbG9iLnNoIGIvdC90OTE1NC1naXQtc3ZuLWZhbmN5LWdsb2Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTAxNTBmMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTQtZ2l0LXN2bi1mYW5jeS1nbG9iLnNoCkBAIC0wLDAgKzEsNTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgSmF5IFNvZmZpYW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBmYW5jeSBnbG9iIHRlc3QnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2biByZXBvJyAiCisJc3ZuYWRtaW4gbG9hZCAtcSAnJHJhd3N2bnJlcG8nIDwgJyRURVNUX0RJUkVDVE9SWS90OTE1NC9zdm4uZHVtcCcgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVQgdHJ1bmsgJyRzdm5yZXBvJyAmJgorCWdpdCBzdm4gZmV0Y2gKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCByZWQgYnJhbmNoJyAiCisJZ2l0IGNvbmZpZyBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcyAnYnJhbmNoZXMve3JlZH06cmVmcy9yZW1vdGVzLyonICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3JlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2dyZWVuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYmx1ZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGdyZSBicmFuY2gnICIKKwlnaXQgY29uZmlnIC0tZmlsZT0uZ2l0L3N2bi8ubWV0YWRhdGEgLS11bnNldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcy1tYXhSZXYgJiYKKwlnaXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzICdicmFuY2hlcy97cmVkLGdyZX06cmVmcy9yZW1vdGVzLyonICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3JlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2dyZWVuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYmx1ZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGdyZWVuIGJyYW5jaCcgIgorCWdpdCBjb25maWcgLS1maWxlPS5naXQvc3ZuLy5tZXRhZGF0YSAtLXVuc2V0IHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzLW1heFJldiAmJgorCWdpdCBjb25maWcgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgJ2JyYW5jaGVzL3tyZWQsZ3JlZW59OnJlZnMvcmVtb3Rlcy8qJyAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9yZWQgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9ncmVlbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JsdWUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhbGwgYnJhbmNoZXMnICIKKwlnaXQgY29uZmlnIC0tZmlsZT0uZ2l0L3N2bi8ubWV0YWRhdGEgLS11bnNldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcy1tYXhSZXYgJiYKKwlnaXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzICdicmFuY2hlcy8qOnJlZnMvcmVtb3Rlcy8qJyAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9yZWQgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9ncmVlbiAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JsdWUKKwkiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE1NC9zdm4uZHVtcCBiL3QvdDkxNTQvc3ZuLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RmYWJiNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTQvc3ZuLmR1bXAKQEAgLTAsMCArMSwyMjIgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IGExODA5M2EwLTVmMGItNDRlMC04ZDg4LTg5MTFhYzcwNzhkYgorCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNzo0MDoyNS42NjAwNTNaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMDQKK0NvbnRlbnQtbGVuZ3RoOiAxMDQKKworSyA3Citzdm46bG9nCitWIDcKK2luaXRpYWwKK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA3OjQxOjMzLjYzNjM2NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rL2ZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogZDNiMDczODRkMTEzZWRlYzQ5ZWFhNjIzOGFkNWZmMDAKK1RleHQtY29udGVudC1zaGExOiBmMWQyZDJmOTI0ZTk4NmFjODZmZGY3YjM2Yzk0YmNkZjMyYmVlYzE1CitDb250ZW50LWxlbmd0aDogMTQKKworUFJPUFMtRU5ECitmb28KKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMAorQ29udGVudC1sZW5ndGg6IDExMAorCitLIDcKK3N2bjpsb2cKK1YgMTIKK2FkZCBicmFuY2hlcworSyAxMAorc3ZuOmF1dGhvcgorViAzCitqYXkKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMjNUMDc6NDI6MzcuMjkwNjk0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvYmx1ZQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9ncmVlbgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yZWQKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTA4CitDb250ZW50LWxlbmd0aDogMTA4CisKK0sgNworc3ZuOmxvZworViAxMAorcmVkIGNoYW5nZQorSyAxMAorc3ZuOmF1dGhvcgorViAzCitqYXkKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMjNUMDc6NDM6MDIuMjA4OTE4WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmVkL2ZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA4CitUZXh0LWNvbnRlbnQtbWQ1OiA2NGMzYzhjZjdkMDIzM2FiNzYyNzYyM2E2ODg4OGJkMQorVGV4dC1jb250ZW50LXNoYTE6IDk1YTA0OTIwMjc4NzZhZGZkMzg5MWVjNzFlZTM3Yjc5ZWU0NGQ2NDAKK0NvbnRlbnQtbGVuZ3RoOiA4CisKK2ZvbworcmVkCisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDEyCitncmVlbiBjaGFuZ2UKK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA3OjQzOjE1Ljc0NjU4NloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2dyZWVuL2ZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LW1kNTogMDIwOWI2NDUwODkxYWJjMDMzZDVlYWFhOWQzYTgwMjMKK1RleHQtY29udGVudC1zaGExOiA4N2ZjM2JlZjlmYWVlYzQ4YzBjZDYxZGZjOTg1MWRiMzc3ZmRjY2Y3CitDb250ZW50LWxlbmd0aDogMTAKKworZm9vCitncmVlbgorCisKK1JldmlzaW9uLW51bWJlcjogNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTA5CitDb250ZW50LWxlbmd0aDogMTA5CisKK0sgNworc3ZuOmxvZworViAxMQorYmx1ZSBjaGFuZ2UKK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA3OjQzOjI5LjM2NDgxMVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2JsdWUvZm9vCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDkKK1RleHQtY29udGVudC1tZDU6IDlmYmU0YzEzZDBiYWU4NjM4NmFlNTIwOWIyZTZiMjc1CitUZXh0LWNvbnRlbnQtc2hhMTogY2M0NTc1MDgzNDU5YTE2ZjlhYWVmNzk2YzRhMjQ1NmQ2NDY5MWJhMAorQ29udGVudC1sZW5ndGg6IDkKKworZm9vCitibHVlCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDEyCit0cnVuayBjaGFuZ2UKK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA3OjQ0OjAxLjMxMzEzMFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL2ZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LW1kNTogMWM0ZGI5NzdkN2E1N2MzYmFlNTgyYWFiODc5NDg1MTYKK1RleHQtY29udGVudC1zaGExOiA0NjljMDhkZjQ0OWU3MDJjZjJhMWZlNzQ2MjQ0YTllZjNmODM3ZmFkCitDb250ZW50LWxlbmd0aDogMTAKKworZm9vCit0cnVuaworCisKZGlmZiAtLWdpdCBhL3QvdDkxNTUtZ2l0LXN2bi1mZXRjaC1kZWxldGVkLXRhZy5zaCBiL3QvdDkxNTUtZ2l0LXN2bi1mZXRjaC1kZWxldGVkLXRhZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xODQzMzZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1NS1naXQtc3ZuLWZldGNoLWRlbGV0ZWQtdGFnLnNoCkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGZldGNoIGRlbGV0ZWQgdGFnJworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZuIHJlcG8nICcKKwlta2RpciAtcCBpbXBvcnQvdHJ1bmsvc3ViZGlyICYmCisJbWtkaXIgLXAgaW1wb3J0L2JyYW5jaGVzICYmCisJbWtkaXIgLXAgaW1wb3J0L3RhZ3MgJiYKKwllY2hvICJiYXNlIiA+aW1wb3J0L3RydW5rL3N1YmRpci9maWxlICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgaW1wb3J0ICIkc3ZucmVwbyIgJiYKKwlybSAtcmYgaW1wb3J0ICYmCisKKwlzdm5fY21kIG1rZGlyIC1tICJjcmVhdGUgbXlicmFuY2ggZGlyZWN0b3J5IiAiJHN2bnJlcG8vYnJhbmNoZXMvbXlicmFuY2giICYmCisJc3ZuX2NtZCBjcCAtbSAiY3JlYXRlIGJyYW5jaCBteWJyYW5jaCIgIiRzdm5yZXBvL3RydW5rIiAiJHN2bnJlcG8vYnJhbmNoZXMvbXlicmFuY2gvdHJ1bmsiICYmCisKKwlzdm5fY21kIGNvICIkc3ZucmVwby90cnVuayIgc3ZuX3Byb2plY3QgJiYKKwkoY2Qgc3ZuX3Byb2plY3QgJiYKKwkJZWNobyAidHJ1bmsgY2hhbmdlIiA+PnN1YmRpci9maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gInRydW5rIGNoYW5nZSIgc3ViZGlyL2ZpbGUgJiYKKworCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8vYnJhbmNoZXMvbXlicmFuY2gvdHJ1bmsiICYmCisJCWVjaG8gImJyYW5jaCBjaGFuZ2UiID4+c3ViZGlyL2ZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiYnJhbmNoIGNoYW5nZSIgc3ViZGlyL2ZpbGUKKwkpICYmCisKKwlzdm5fY21kIGNwIC1tICJjcmVhdGUgbXl0YWcgYXR0ZW1wdCAxIiAtcjUgIiRzdm5yZXBvL3RydW5rL3N1YmRpciIgIiRzdm5yZXBvL3RhZ3MvbXl0YWciICYmCisJc3ZuX2NtZCBybSAtbSAiZGVsZXRlIG15dGFnIGF0dGVtcHQgMSIgIiRzdm5yZXBvL3RhZ3MvbXl0YWciICYmCisJc3ZuX2NtZCBjcCAtbSAiY3JlYXRlIG15dGFnIGF0dGVtcHQgMiIgLXI1ICIkc3ZucmVwby9icmFuY2hlcy9teWJyYW5jaC90cnVuay9zdWJkaXIiICIkc3ZucmVwby90YWdzL215dGFnIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBkZWxldGVkIHRhZ3MgZnJvbSBzYW1lIHJldmlzaW9uIHdpdGggY2hlY2tzdW0gZXJyb3InICcKKwlnaXQgc3ZuIGluaXQgLS1zdGRsYXlvdXQgIiRzdm5yZXBvIiBnaXRfcHJvamVjdCAmJgorCWNkIGdpdF9wcm9qZWN0ICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgb3JpZ2luL215YnJhbmNoOnRydW5rL3N1YmRpci9maWxlIG9yaWdpbi90YWdzL215dGFnOmZpbGUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXI6c3ViZGlyL2ZpbGUgb3JpZ2luL3RhZ3MvbXl0YWdeOmZpbGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTU2LWdpdC1zdm4tZmV0Y2gtZGVsZXRlZC10YWctMi5zaCBiL3QvdDkxNTYtZ2l0LXN2bi1mZXRjaC1kZWxldGVkLXRhZy0yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdhNmUzM2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTU2LWdpdC1zdm4tZmV0Y2gtZGVsZXRlZC10YWctMi5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBmZXRjaCBkZWxldGVkIHRhZyAyJworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZuIHJlcG8nICcKKwlta2RpciAtcCBpbXBvcnQvYnJhbmNoZXMgJiYKKwlta2RpciAtcCBpbXBvcnQvdGFncyAmJgorCW1rZGlyIC1wIGltcG9ydC90cnVuay9zdWJkaXIxICYmCisJbWtkaXIgLXAgaW1wb3J0L3RydW5rL3N1YmRpcjIgJiYKKwlta2RpciAtcCBpbXBvcnQvdHJ1bmsvc3ViZGlyMyAmJgorCWVjaG8gImZpbGUxIiA+aW1wb3J0L3RydW5rL3N1YmRpcjEvZmlsZSAmJgorCWVjaG8gImZpbGUyIiA+aW1wb3J0L3RydW5rL3N1YmRpcjIvZmlsZSAmJgorCWVjaG8gImZpbGUzIiA+aW1wb3J0L3RydW5rL3N1YmRpcjMvZmlsZSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIGltcG9ydCAiJHN2bnJlcG8iICYmCisJcm0gLXJmIGltcG9ydCAmJgorCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8vdHJ1bmsiIHN2bl9wcm9qZWN0ICYmCisJKGNkIHN2bl9wcm9qZWN0ICYmCisJCWVjaG8gImNoYW5nZTEiID4+c3ViZGlyMS9maWxlICYmCisJCWVjaG8gImNoYW5nZTIiID4+c3ViZGlyMi9maWxlICYmCisJCWVjaG8gImNoYW5nZTMiID4+c3ViZGlyMy9maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gImNoYW5nZSIgLgorCSkgJiYKKworCXN2bl9jbWQgY3AgLW0gImNyZWF0ZSBteXRhZyAxIiAtcjIgIiRzdm5yZXBvL3RydW5rL3N1YmRpcjEiICIkc3ZucmVwby90YWdzL215dGFnIiAmJgorCXN2bl9jbWQgcm0gLW0gImRlbGV0ZSBteXRhZyAxIiAiJHN2bnJlcG8vdGFncy9teXRhZyIgJiYKKwlzdm5fY21kIGNwIC1tICJjcmVhdGUgbXl0YWcgMiIgLXIyICIkc3ZucmVwby90cnVuay9zdWJkaXIyIiAiJHN2bnJlcG8vdGFncy9teXRhZyIgJiYKKwlzdm5fY21kIHJtIC1tICJkZWxldGUgbXl0YWcgMiIgIiRzdm5yZXBvL3RhZ3MvbXl0YWciICYmCisJc3ZuX2NtZCBjcCAtbSAiY3JlYXRlIG15dGFnIDMiIC1yMiAiJHN2bnJlcG8vdHJ1bmsvc3ViZGlyMyIgIiRzdm5yZXBvL3RhZ3MvbXl0YWciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGRlbGV0ZWQgdGFncyBmcm9tIHNhbWUgcmV2aXNpb24gd2l0aCBubyBjaGVja3N1bSBlcnJvcicgJworCWdpdCBzdm4gaW5pdCAtLXN0ZGxheW91dCAiJHN2bnJlcG8iIGdpdF9wcm9qZWN0ICYmCisJY2QgZ2l0X3Byb2plY3QgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXI6c3ViZGlyMy9maWxlIG9yaWdpbi90YWdzL215dGFnOmZpbGUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXI6c3ViZGlyMi9maWxlIG9yaWdpbi90YWdzL215dGFnXjpmaWxlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyOnN1YmRpcjEvZmlsZSBvcmlnaW4vdGFncy9teXRhZ15eOmZpbGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTU3LWdpdC1zdm4tZmV0Y2gtbWVyZ2Uuc2ggYi90L3Q5MTU3LWdpdC1zdm4tZmV0Y2gtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTkxZDJhYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTctZ2l0LXN2bi1mZXRjaC1tZXJnZS5zaApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIFN0ZXZlbiBXYWx0ZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBtZXJnZSBkZXRlY3Rpb24nCisuIC4vbGliLWdpdC1zdm4uc2gKKworc3ZuX3Zlcj0iJChzdm4gLS12ZXJzaW9uIC0tcXVpZXQpIgorY2FzZSAkc3ZuX3ZlciBpbgorMC4qIHwgMS5bMC00XS4qKQorCXNraXBfYWxsPSJza2lwcGluZyBnaXQtc3ZuIHRlc3QgLSBTVk4gdG9vIG9sZCAoJHN2bl92ZXIpIgorCXRlc3RfZG9uZQorCTs7Citlc2FjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgc291cmNlIHN2biByZXBvJyAnCisJc3ZuX2NtZCBta2RpciAtbSB4ICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm5fY21kIG1rZGlyIC1tIHggIiRzdm5yZXBvIi9icmFuY2hlcyAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuayAiJFNWTl9UUkVFIiAmJgorCSgKKwkJY2QgIiRTVk5fVFJFRSIgJiYKKwkJdG91Y2ggZm9vICYmCisJCXN2biBhZGQgZm9vICYmCisJCXN2biBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IiAmJgorCQlzdm4gY3AgLW0gYnJhbmNoICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXRvdWNoIGJhciAmJgorCQlzdm4gYWRkIGJhciAmJgorCQlzdm4gY29tbWl0IC1tIHggJiYKKwkJc3ZuIGNwIC1tIGJyYW5jaCAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMiAmJgorCQlzdm4gc3dpdGNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQl0b3VjaCBiYXogJiYKKwkJc3ZuIGFkZCBiYXogJiYKKwkJc3ZuIGNvbW1pdCAtbSB4ICYmCisJCXN2biBzd2l0Y2ggIiRzdm5yZXBvIi90cnVuayAmJgorCQlzdm4gbWVyZ2UgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXN2biBjb21taXQgLW0gIm1lcmdlIiAmJgorCQlzdm4gc3dpdGNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQlzdm4gY29tbWl0IC1tIHggJiYKKwkJc3ZuIHN3aXRjaCAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJc3ZuIG1lcmdlICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQlzdm4gY29tbWl0IC1tICJtZXJnZSBicmFuY2gxIiAmJgorCQlzdm4gc3dpdGNoICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwkJc3ZuIG1lcmdlICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMiAmJgorCQlzdm4gcmVzb2x2ZWQgYmF6ICYmCisJCXN2biBjb21taXQgLW0gIm1lcmdlIGJyYW5jaDIiCisJKSAmJgorCXJtIC1yZiAiJFNWTl9UUkVFIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzdm4gcmVwbycgJworCWdpdCBzdm4gaW5pdCAtcyAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWVyZ2UgY29tbWl0JyAnZ2l0IHJldi1wYXJzZSBIRUFEXjInCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE1OC1naXQtc3ZuLW1lcmdlaW5mby5zaCBiL3QvdDkxNTgtZ2l0LXN2bi1tZXJnZWluZm8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTg3NWI0NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTgtZ2l0LXN2bi1tZXJnZWluZm8uc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBTdGV2ZW4gV2FsdGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gbWVyZ2VpbmZvIHByb3BhZ2F0aW9uJworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBzb3VyY2Ugc3ZuIHJlcG8nICcKKwlzdm5fY21kIG1rZGlyIC1tIHggIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuayAiJFNWTl9UUkVFIiAmJgorCSgKKwkJY2QgIiRTVk5fVFJFRSIgJiYKKwkJdG91Y2ggZm9vICYmCisJCXN2bl9jbWQgYWRkIGZvbyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiCisJKSAmJgorCXJtIC1yZiAiJFNWTl9UUkVFIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzdm4gcmVwbycgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iL3RydW5rICYmCisJZ2l0IHN2biBmZXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2Ugc3ZuOm1lcmdlaW5mbycgJworCXRvdWNoIGJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJZ2l0IGNvbW1pdCAtbSAiYmFyIiAmJgorCWdpdCBzdm4gZGNvbW1pdCAtLW1lcmdlaW5mbz0iL2JyYW5jaGVzL2ZvbzoxLTEwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgc3ZuOm1lcmdlaW5mbycgJworCW1lcmdlaW5mbz0kKHN2bl9jbWQgcHJvcGdldCBzdm46bWVyZ2VpbmZvICIkc3ZucmVwbyIvdHJ1bmspICYmCisJdGVzdCAiJG1lcmdlaW5mbyIgPSAiL2JyYW5jaGVzL2ZvbzoxLTEwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2Ugc3ZuOm1lcmdlaW5mbyBtdWx0aWxpbmUnICcKKwl0b3VjaCBiYXogJiYKKwlnaXQgYWRkIGJheiAmJgorCWdpdCBjb21taXQgLW0gImJheiIgJiYKKwlnaXQgc3ZuIGRjb21taXQgLS1tZXJnZWluZm89Ii9icmFuY2hlcy9iYXI6MS0xMCAvYnJhbmNoZXMvb3RoZXI6My01LDgsMTAtMTEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzdm46bWVyZ2VpbmZvIG11bHRpbGluZScgJworCW1lcmdlaW5mbz0kKHN2bl9jbWQgcHJvcGdldCBzdm46bWVyZ2VpbmZvICIkc3ZucmVwbyIvdHJ1bmspICYmCisJdGVzdCAiJG1lcmdlaW5mbyIgPSAiL2JyYW5jaGVzL2JhcjoxLTEwCisvYnJhbmNoZXMvb3RoZXI6My01LDgsMTAtMTEiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE1OS1naXQtc3ZuLW5vLXBhcmVudC1tZXJnZWluZm8uc2ggYi90L3Q5MTU5LWdpdC1zdm4tbm8tcGFyZW50LW1lcmdlaW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OWU0ODE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1OS1naXQtc3ZuLW5vLXBhcmVudC1tZXJnZWluZm8uc2gKQEAgLTAsMCArMSw0MSBAQAorIyEvYmluL3NoCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGhhbmRsaW5nIG9mIHJvb3QgY29tbWl0cyBpbiBtZXJnZSByYW5nZXMnCisuIC4vbGliLWdpdC1zdm4uc2gKKworc3ZuX3Zlcj0iJChzdm4gLS12ZXJzaW9uIC0tcXVpZXQpIgorY2FzZSAkc3ZuX3ZlciBpbgorMC4qIHwgMS5bMC00XS4qKQorCXNraXBfYWxsPSJza2lwcGluZyBnaXQtc3ZuIHRlc3QgLSBTVk4gdG9vIG9sZCAoJHN2bl92ZXIpIgorCXRlc3RfZG9uZQorCTs7Citlc2FjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgaGFuZGxpbmcgb2Ygcm9vdCBjb21taXRzIGluIG1lcmdlIHJhbmdlcycgJworCW1rZGlyIC1wIGluaXQvdHJ1bmsgaW5pdC9icmFuY2hlcyBpbml0L3RhZ3MgJiYKKwllY2hvICJyMSIgPiBpbml0L3RydW5rL2ZpbGUudHh0ICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwgaW1wb3J0IiBpbml0ICIkc3ZucmVwbyIgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdG1wICYmCisJKAorCQljZCB0bXAgJiYKKwkJZWNobyAicjIiID4gdHJ1bmsvZmlsZS50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIk1vZGlmeSBmaWxlLnR4dCBvbiB0cnVuayIgJiYKKwkJc3ZuX2NtZCBjcCB0cnVua0AxIGJyYW5jaGVzL2EgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkNyZWF0ZSBicmFuY2ggYSBmcm9tIHRydW5rIHIxIiAmJgorCQlzdm5fY21kIHByb3BzZXQgc3ZuOm1lcmdlaW5mbyAvdHJ1bms6MS0yIGJyYW5jaGVzL2EgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkZha2UgbWVyZ2Ugb2YgdHJ1bmsgcjIgaW50byBicmFuY2ggYSIgJiYKKwkJbWtkaXIgYnJhbmNoZXMvYiAmJgorCQllY2hvICJyNSIgPiBicmFuY2hlcy9iL2ZpbGUyLnR4dCAmJgorCQlzdm5fY21kIGFkZCBicmFuY2hlcy9iICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJDcmVhdGUgYnJhbmNoIGIgZnJvbSB0aGluIGFpciIgJiYKKwkJZWNobyAicjYiID4gYnJhbmNoZXMvYi9maWxlMi50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIk1vZGlmeSBmaWxlMi50eHQgb24gYnJhbmNoIGIiICYmCisJCXN2bl9jbWQgY3AgYnJhbmNoZXMvYkA1IGJyYW5jaGVzL2MgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkNyZWF0ZSBicmFuY2ggYyBmcm9tIGJyYW5jaCBiIHI1IiAmJgorCQlzdm5fY21kIHByb3BzZXQgc3ZuOm1lcmdlaW5mbyAvYnJhbmNoZXMvYjo1LTYgYnJhbmNoZXMvYyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiRmFrZSBtZXJnZSBvZiBicmFuY2ggYiByNiBpbnRvIGJyYW5jaCBjIgorCSkgJiYKKwlnaXQgc3ZuIGluaXQgLXMgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2gKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2MC1naXQtc3ZuLXByZXNlcnZlLWVtcHR5LWRpcnMuc2ggYi90L3Q5MTYwLWdpdC1zdm4tcHJlc2VydmUtZW1wdHktZGlycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNmM2YjFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2MC1naXQtc3ZuLXByZXNlcnZlLWVtcHR5LWRpcnMuc2gKQEAgLTAsMCArMSwxNTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgUmF5IENoZW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biB0ZXN0IChvcHRpb24gLS1wcmVzZXJ2ZS1lbXB0eS1kaXJzKQorCitUaGlzIHRlc3QgdXNlcyBnaXQgdG8gY2xvbmUgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgdGhhdCBjb250YWlucyBlbXB0eQorZGlyZWN0b3JpZXMsIGFuZCBjaGVja3MgdGhhdCBjb3JyZXNwb25kaW5nIGRpcmVjdG9yaWVzIGFyZSBjcmVhdGVkIGluIHRoZQorbG9jYWwgR2l0IHJlcG9zaXRvcnkgd2l0aCBwbGFjZWhvbGRlciBmaWxlcy4nCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCitHSVRfUkVQTz1naXQtc3ZuLXJlcG8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBzb3VyY2Ugc3ZuIHJlcG8gY29udGFpbmluZyBlbXB0eSBkaXJzJyAnCisJc3ZuX2NtZCBta2RpciAtbSB4ICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgIiRTVk5fVFJFRSIgJiYKKwkoCisJCWNkICIkU1ZOX1RSRUUiICYmCisJCW1rZGlyIC1wIDEgMiAzL2EgMy9iIDQgNSA2ICYmCisJCWVjaG8gIkZpcnN0IG5vbi1lbXB0eSBmaWxlIiAgPiAyL2ZpbGUxLnR4dCAmJgorCQllY2hvICJTZWNvbmQgbm9uLWVtcHR5IGZpbGUiID4gMi9maWxlMi50eHQgJiYKKwkJZWNobyAiVGhpcmQgbm9uLWVtcHR5IGZpbGUiICA+IDMvYS9maWxlMS50eHQgJiYKKwkJZWNobyAiRm91cnRoIG5vbi1lbXB0eSBmaWxlIiA+IDMvYi9maWxlMS50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgMSAyIDMgNCA1IDYgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IiAmJgorCisJCW1rZGlyIDQvYSAmJgorCQlzdm5fY21kIGFkZCA0L2EgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm5lc3RlZCBlbXB0eSBkaXJlY3RvcnkiICYmCisJCW1rZGlyIDQvYS9iICYmCisJCXN2bl9jbWQgYWRkIDQvYS9iICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJkZWVwbHkgbmVzdGVkIGVtcHR5IGRpcmVjdG9yeSIgJiYKKwkJbWtkaXIgNC9hL2IvYyAmJgorCQlzdm5fY21kIGFkZCA0L2EvYi9jICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJyZWFsbHkgZGVlcGx5IG5lc3RlZCBlbXB0eSBkaXJlY3RvcnkiICYmCisJCWVjaG8gIktpbGwgdGhlIHBsYWNlaG9sZGVyIGZpbGUiID4gNC9hL2IvYy9mb28gJiYKKwkJc3ZuX2NtZCBhZGQgNC9hL2IvYy9mb28gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlJlZ3VsYXIgZmlsZSB0byByZW1vdmUgcGxhY2Vob2xkZXIiICYmCisKKwkJc3ZuX2NtZCBkZWwgMi9maWxlMi50eHQgJiYKKwkJc3ZuX2NtZCBkZWwgMy9iICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJkZWxldGUgbm9uLWxhc3QgZW50cnkgaW4gZGlyZWN0b3J5IiAmJgorCisJCXN2bl9jbWQgZGVsIDIvZmlsZTEudHh0ICYmCisJCXN2bl9jbWQgZGVsIDMvYSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiZGVsZXRlIGxhc3QgZW50cnkgaW4gZGlyZWN0b3J5IiAmJgorCisJCWVjaG8gIkNvbmZsaWN0IGZpbGUiID4gNS8ucGxhY2Vob2xkZXIgJiYKKwkJbWtkaXIgNi8ucGxhY2Vob2xkZXIgJiYKKwkJc3ZuX2NtZCBhZGQgNS8ucGxhY2Vob2xkZXIgNi8ucGxhY2Vob2xkZXIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlBsYWNlaG9sZGVyIE5hbWVzcGFjZSBjb25mbGljdCIKKwkpICYmCisJcm0gLXJmICIkU1ZOX1RSRUUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHN2biByZXBvIHdpdGggLS1wcmVzZXJ2ZS1lbXB0eS1kaXJzJyAnCisJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iL3RydW5rIC0tcHJlc2VydmUtZW1wdHktZGlycyAiJEdJVF9SRVBPIgorJworCisjICIkR0lUX1JFUE8iLzEgc2hvdWxkIG9ubHkgY29udGFpbiB0aGUgcGxhY2Vob2xkZXIgZmlsZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpcmVjdG9yeSBlbXB0eSBmcm9tIGluY2VwdGlvbicgJworCXRlc3QgLWYgIiRHSVRfUkVQTyIvMS8uZ2l0aWdub3JlICYmCisJdGVzdCAkKGZpbmQgIiRHSVRfUkVQTyIvMSAtdHlwZSBmIHwgd2MgLWwpID0gIjEiCisnCisKKyMgIiRHSVRfUkVQTyIvMiBhbmQgIiRHSVRfUkVQTyIvMyBzaG91bGQgb25seSBjb250YWluIHRoZSBwbGFjZWhvbGRlciBmaWxlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlyZWN0b3J5IGVtcHR5IGZyb20gc3Vic2VxdWVudCBzdm4gY29tbWl0JyAnCisJdGVzdCAtZiAiJEdJVF9SRVBPIi8yLy5naXRpZ25vcmUgJiYKKwl0ZXN0ICQoZmluZCAiJEdJVF9SRVBPIi8yIC10eXBlIGYgfCB3YyAtbCkgPSAiMSIgJiYKKwl0ZXN0IC1mICIkR0lUX1JFUE8iLzMvLmdpdGlnbm9yZSAmJgorCXRlc3QgJChmaW5kICIkR0lUX1JFUE8iLzMgLXR5cGUgZiB8IHdjIC1sKSA9ICIxIgorJworCisjIE5vIHBsYWNlaG9sZGVyIGZpbGVzIHNob3VsZCBleGlzdCBpbiAiJEdJVF9SRVBPIi80LCBldmVuIHRob3VnaCBvbmUgd2FzCisjIGdlbmVyYXRlZCBmb3IgZXZlcnkgc3ViLWRpcmVjdG9yeSBhdCBzb21lIHBvaW50IGluIHRoZSByZXBvJ3MgaGlzdG9yeS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBlbnRyeSB0byBwcmV2aW91c2x5IGVtcHR5IGRpcmVjdG9yeScgJworCXRlc3QgJChmaW5kICIkR0lUX1JFUE8iLzQgLXR5cGUgZiB8IHdjIC1sKSA9ICIxIiAmJgorCXRlc3QgLWYgIiRHSVRfUkVQTyIvNC9hL2IvYy9mb28KKycKKworIyBUaGUgSEVBRH4yIGNvbW1pdCBzaG91bGQgbm90IGhhdmUgaW50cm9kdWNlZCAuZ2l0aWdub3JlIHBsYWNlaG9sZGVyIGZpbGVzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIG5vbi1sYXN0IGVudHJ5IGZyb20gZGlyZWN0b3J5JyAnCisJKAorCQljZCAiJEdJVF9SRVBPIiAmJgorCQlnaXQgY2hlY2tvdXQgSEVBRH4yCisJKSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICIkR0lUX1JFUE8iLzIvLmdpdGlnbm9yZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICIkR0lUX1JFUE8iLzMvLmdpdGlnbm9yZQorJworCisjIEFmdGVyIHJlLWNsb25pbmcgdGhlIHJlcG9zaXRvcnkgd2l0aCAtLXBsYWNlaG9sZGVyLWZpbGUgc3BlY2lmaWVkLCB0aGVyZQorIyBzaG91bGQgYmUgNSBmaWxlcyBuYW1lZCAiLnBsYWNlaG9sZGVyIiBpbiB0aGUgbG9jYWwgR2l0IHJlcG8uCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzdm4gcmVwbyB3aXRoIC0tcGxhY2Vob2xkZXItZmlsZSBzcGVjaWZpZWQnICcKKwlybSAtcmYgIiRHSVRfUkVQTyIgJiYKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIvdHJ1bmsgLS1wcmVzZXJ2ZS1lbXB0eS1kaXJzIFwKKwkJLS1wbGFjZWhvbGRlci1maWxlPS5wbGFjZWhvbGRlciAiJEdJVF9SRVBPIiAmJgorCWZpbmQgIiRHSVRfUkVQTyIgLXR5cGUgZiAtbmFtZSAiLnBsYWNlaG9sZGVyIiAmJgorCXRlc3QgJChmaW5kICIkR0lUX1JFUE8iIC10eXBlIGYgLW5hbWUgIi5wbGFjZWhvbGRlciIgfCB3YyAtbCkgPSAiNSIKKycKKworIyAiJEdJVF9SRVBPIi81Ly5wbGFjZWhvbGRlciBzaG91bGQgYmUgYSBmaWxlLCBhbmQgbm9uLWVtcHR5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhY2Vob2xkZXIgbmFtZXNwYWNlIGNvbmZsaWN0IHdpdGggZmlsZScgJworCXRlc3QgLXMgIiRHSVRfUkVQTyIvNS8ucGxhY2Vob2xkZXIKKycKKworIyAiJEdJVF9SRVBPIi82Ly5wbGFjZWhvbGRlciBzaG91bGQgYmUgYSBkaXJlY3RvcnksIGFuZCB0aGUgIiRHSVRfUkVQTyIvNiB0cmVlCisjIHNob3VsZCBvbmx5IGNvbnRhaW4gb25lIGZpbGU6IHRoZSBwbGFjZWhvbGRlci4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsYWNlaG9sZGVyIG5hbWVzcGFjZSBjb25mbGljdCB3aXRoIGRpcmVjdG9yeScgJworCXRlc3QgLWQgIiRHSVRfUkVQTyIvNi8ucGxhY2Vob2xkZXIgJiYKKwl0ZXN0IC1mICIkR0lUX1JFUE8iLzYvLnBsYWNlaG9sZGVyLy5wbGFjZWhvbGRlciAmJgorCXRlc3QgJChmaW5kICIkR0lUX1JFUE8iLzYgLXR5cGUgZiB8IHdjIC1sKSA9ICIxIgorJworCisjIFByZXBhcmUgYSBzZWNvbmQgc2V0IG9mIHN2biBjb21taXRzIHRvIHRlc3QgcGVyc2lzdGVuY2UgZHVyaW5nIHJlYmFzZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlY29uZCBzZXQgb2Ygc3ZuIGNvbW1pdHMgYW5kIHJlYmFzZScgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuayAiJFNWTl9UUkVFIiAmJgorCSgKKwkJY2QgIiRTVk5fVFJFRSIgJiYKKwkJbWtkaXIgLXAgNyAmJgorCQllY2hvICJUaGlzIHNob3VsZCByZW1vdmUgcGxhY2Vob2xkZXIiID4gMS9maWxlMS50eHQgJiYKKwkJZWNobyAiVGhpcyBzaG91bGQgbm90IHJlbW92ZSBwbGFjZWhvbGRlciIgPiA1L2ZpbGUxLnR4dCAmJgorCQlzdm5fY21kIGFkZCA3IDEvZmlsZTEudHh0IDUvZmlsZTEudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJzdWJzZXF1ZW50IHN2biBjb21taXQgZm9yIHBlcnNpc3RlbmNlIHRlc3RzIgorCSkgJiYKKwlybSAtcmYgIiRTVk5fVFJFRSIgJiYKKwkoCisJCWNkICIkR0lUX1JFUE8iICYmCisJCWdpdCBzdm4gcmViYXNlCisJKQorJworCisjIENoZWNrIHRoYXQgLS1wcmVzZXJ2ZS1lbXB0eS1kaXJzIGFuZCAtLXBsYWNlaG9sZGVyLWZpbGUgZmxhZyBzdGF0ZQorIyBzdGF5cyBwZXJzaXN0ZW50IG92ZXIgbXVsdGlwbGUgaW52b2NhdGlvbnMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmbGFnIHBlcnNpc3RlbmNlIGR1cmluZyBzdWJzcWV1ZW50IHJlYmFzZScgJworCXRlc3QgLWYgIiRHSVRfUkVQTyIvNy8ucGxhY2Vob2xkZXIgJiYKKwl0ZXN0ICQoZmluZCAiJEdJVF9SRVBPIi83IC10eXBlIGYgfCB3YyAtbCkgPSAiMSIKKycKKworIyBDaGVjayB0aGF0IHBsYWNlaG9sZGVyIGZpbGVzIGFyZSBwcm9wZXJseSByZW1vdmVkIHdoZW4gdW5uZWNlc3NhcnksCisjIGV2ZW4gYWNyb3NzIG11bHRpcGxlIGludm9jYXRpb25zLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhY2Vob2xkZXIgbGlzdCBwZXJzaXN0ZW5jZSBkdXJpbmcgc3Vic3FldWVudCByZWJhc2UnICcKKwl0ZXN0IC1mICIkR0lUX1JFUE8iLzEvZmlsZTEudHh0ICYmCisJdGVzdCAkKGZpbmQgIiRHSVRfUkVQTyIvMSAtdHlwZSBmIHwgd2MgLWwpID0gIjEiICYmCisKKwl0ZXN0IC1mICIkR0lUX1JFUE8iLzUvZmlsZTEudHh0ICYmCisJdGVzdCAtZiAiJEdJVF9SRVBPIi81Ly5wbGFjZWhvbGRlciAmJgorCXRlc3QgJChmaW5kICIkR0lUX1JFUE8iLzUgLXR5cGUgZiB8IHdjIC1sKSA9ICIyIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNjEtZ2l0LXN2bi1tZXJnZWluZm8tcHVzaC5zaCBiL3QvdDkxNjEtZ2l0LXN2bi1tZXJnZWluZm8tcHVzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMTEzYWNhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2MS1naXQtc3ZuLW1lcmdlaW5mby1wdXNoLnNoCkBAIC0wLDAgKzEsMTAzIEBACisjIS9iaW4vc2gKKyMKKyMgUG9ydGlvbnMgY29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IFNhbSBWaWxhaW4KKyMgUG9ydGlvbnMgY29weXJpZ2h0IChjKSAyMDExIEJyeWFuIEphY29icworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtc3ZuIHN2biBtZXJnZWluZm8gcHJvcGFnYXRpb24nCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2biBkdW1wJyAiCisJc3ZuYWRtaW4gbG9hZCAtcSAnJHJhd3N2bnJlcG8nIFwKKwkgIDwgJyRURVNUX0RJUkVDVE9SWS90OTE2MS9icmFuY2hlcy5kdW1wJyAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBzdm5tZXJnZSBcCisJICAtVCB0cnVuayAtYiBicmFuY2hlcyAnJHN2bnJlcG8nICYmCisJZ2l0IHN2biBmZXRjaCAtLWFsbAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvcGFnYXRlIG1lcmdlIGluZm9ybWF0aW9uJyAnCisJZ2l0IGNvbmZpZyBzdm4ucHVzaG1lcmdlaW5mbyB5ZXMgJiYKKwlnaXQgY2hlY2tvdXQgb3JpZ2luL3N2bmIxICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgb3JpZ2luL3N2bmIyICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzdm46bWVyZ2VpbmZvJyAnCisJbWVyZ2VpbmZvPSQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptZXJnZWluZm8gIiRzdm5yZXBvIi9icmFuY2hlcy9zdm5iMSkgJiYKKwl0ZXN0ICIkbWVyZ2VpbmZvIiA9ICIvYnJhbmNoZXMvc3ZuYjI6Myw4IgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYW5vdGhlciBicmFuY2gnICcKKwlnaXQgbWVyZ2UgLS1uby1mZiBvcmlnaW4vc3ZuYjMgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHByaW1hcnkgcGFyZW50IG1lcmdlaW5mbyByZXNwZWN0ZWQnICcKKwltZXJnZWluZm89JChzdm5fY21kIHByb3BnZXQgc3ZuOm1lcmdlaW5mbyAiJHN2bnJlcG8iL2JyYW5jaGVzL3N2bmIxKSAmJgorCXRlc3QgIiRtZXJnZWluZm8iID0gIi9icmFuY2hlcy9zdm5iMjozLDgKKy9icmFuY2hlcy9zdm5iMzo0LDkiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBleGlzdGluZyBtZXJnZScgJworCWdpdCBtZXJnZSAtLW5vLWZmIG9yaWdpbi9zdm5iNCAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2sgYm90aCBwYXJlbnRzJyBtZXJnZWluZm8gcmVzcGVjdGVkIiAnCisJbWVyZ2VpbmZvPSQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptZXJnZWluZm8gIiRzdm5yZXBvIi9icmFuY2hlcy9zdm5iMSkgJiYKKwl0ZXN0ICIkbWVyZ2VpbmZvIiA9ICIvYnJhbmNoZXMvc3ZuYjI6Myw4CisvYnJhbmNoZXMvc3ZuYjM6NCw5CisvYnJhbmNoZXMvc3ZuYjQ6NS02LDEwLTEyCisvYnJhbmNoZXMvc3ZuYjU6NiwxMSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgZnVydGhlciBjb21taXRzIHRvIGJyYW5jaCcgJworCWdpdCBjaGVja291dCBvcmlnaW4vc3ZuYjIgJiYKKwl0b3VjaCBuZXdiMmZpbGUgJiYKKwlnaXQgYWRkIG5ld2IyZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImxhdGVyIGIyIGNvbW1pdCIgJiYKKwl0b3VjaCBuZXdiMmZpbGUtMiAmJgorCWdpdCBhZGQgbmV3YjJmaWxlLTIgJiYKKwlnaXQgY29tbWl0IC1tICJsYXRlciBiMiBjb21taXQgMiIgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlY29uZCBmb3J3YXJkIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IG9yaWdpbi9zdm5iMSAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIG9yaWdpbi9zdm5iMiAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbmV3IG1lcmdlaW5mbyBhZGRlZCcgJworCW1lcmdlaW5mbz0kKHN2bl9jbWQgcHJvcGdldCBzdm46bWVyZ2VpbmZvICIkc3ZucmVwbyIvYnJhbmNoZXMvc3ZuYjEpICYmCisJdGVzdCAiJG1lcmdlaW5mbyIgPSAiL2JyYW5jaGVzL3N2bmIyOjMsOCwxNi0xNworL2JyYW5jaGVzL3N2bmIzOjQsOQorL2JyYW5jaGVzL3N2bmI0OjUtNiwxMC0xMgorL2JyYW5jaGVzL3N2bmI1OjYsMTEiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWludGVncmF0aW9uIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IG9yaWdpbi9zdm5iNCAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIG9yaWdpbi9zdm5iMSAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgcmVpbnRlZ3JhdGlvbiBtZXJnZWluZm8nICcKKwltZXJnZWluZm89JChzdm5fY21kIHByb3BnZXQgc3ZuOm1lcmdlaW5mbyAiJHN2bnJlcG8iL2JyYW5jaGVzL3N2bmI0KSAmJgorCXRlc3QgIiRtZXJnZWluZm8iID0gIi9icmFuY2hlcy9zdm5iMToyLTQsNy05LDEzLTE4CisvYnJhbmNoZXMvc3ZuYjI6Myw4LDE2LTE3CisvYnJhbmNoZXMvc3ZuYjM6NCw5CisvYnJhbmNoZXMvc3ZuYjU6NiwxMSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgYSBtZXJnZSBhdCB0aGUgdG9wIG9mIGEgc3RhY2snICcKKwlnaXQgY2hlY2tvdXQgb3JpZ2luL3N2bmIxICYmCisJdG91Y2ggYW5vdGhlcmZpbGUgJiYKKwlnaXQgYWRkIGFub3RoZXJmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYSBjb21taXQiICYmCisJZ2l0IG1lcmdlIG9yaWdpbi9zdm5iNCAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTYxL2JyYW5jaGVzLmR1bXAgYi90L3Q5MTYxL2JyYW5jaGVzLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYxYzNlNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNjEvYnJhbmNoZXMuZHVtcApAQCAtMCwwICsxLDM3NCBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogMWVmMDg1NTMtZjJkMS00NWRmLWIzOGMtMTlhZjZiN2M5MjZkCisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjA4OjAyLjk0MTM4NFoKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNAorQ29udGVudC1sZW5ndGg6IDExNAorCitLIDcKK3N2bjpsb2cKK1YgMTIKK0Jhc2UgY29tbWl0CisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjowODoyNy4yMDUwNjJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjEKK0NvbnRlbnQtbGVuZ3RoOiAxMjEKKworSyA3Citzdm46bG9nCitWIDE5CitDcmVhdGUgYnJhbmNoIHN2bmIxCitLIDEwCitzdm46YXV0aG9yCitWIDcKK2JqYWNvYnMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MDk6NDMuNjI4MTM3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvc3ZuYjEKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAxOQorQ3JlYXRlIGJyYW5jaCBzdm5iMgorSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjA5OjQ2LjMzOTkzMFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmIyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMTkKK0NyZWF0ZSBicmFuY2ggc3ZuYjMKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjowOTo0OS4zOTQ1MTVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iMworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiA1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjEKK0NvbnRlbnQtbGVuZ3RoOiAxMjEKKworSyA3Citzdm46bG9nCitWIDE5CitDcmVhdGUgYnJhbmNoIHN2bmI0CitLIDEwCitzdm46YXV0aG9yCitWIDcKK2JqYWNvYnMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MDk6NTQuMTE0NjA3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvc3ZuYjQKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAxOQorQ3JlYXRlIGJyYW5jaCBzdm5iNQorSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjA5OjU4LjYwMjYyM1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmI1CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDcKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMAorQ29udGVudC1sZW5ndGg6IDExMAorCitLIDcKK3N2bjpsb2cKK1YgOQorYjEgY29tbWl0CitLIDEwCitzdm46YXV0aG9yCitWIDcKK2JqYWNvYnMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MTA6MjAuMjkyMzY5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvc3ZuYjEvYjFmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCitUZXh0LWNvbnRlbnQtbWQ1OiBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZQorVGV4dC1jb250ZW50LXNoYTE6IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDkKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDgKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMAorQ29udGVudC1sZW5ndGg6IDExMAorCitLIDcKK3N2bjpsb2cKK1YgOQorYjIgY29tbWl0CitLIDEwCitzdm46YXV0aG9yCitWIDcKK2JqYWNvYnMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MTA6MzguNDI5MTk5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvc3ZuYjIvYjJmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCitUZXh0LWNvbnRlbnQtbWQ1OiBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZQorVGV4dC1jb250ZW50LXNoYTE6IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDkKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDkKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMAorQ29udGVudC1sZW5ndGg6IDExMAorCitLIDcKK3N2bjpsb2cKK1YgOQorYjMgY29tbWl0CitLIDEwCitzdm46YXV0aG9yCitWIDcKK2JqYWNvYnMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MTA6NTIuODQzMDIzWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvc3ZuYjMvYjNmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCitUZXh0LWNvbnRlbnQtbWQ1OiBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZQorVGV4dC1jb250ZW50LXNoYTE6IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDkKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDEwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDkKK2I0IGNvbW1pdAorSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjExOjE3LjQ4OTg3MFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmI0L2I0ZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMAorVGV4dC1jb250ZW50LW1kNTogZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UKK1RleHQtY29udGVudC1zaGExOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5CitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAxMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViA5CitiNSBjb21taXQKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjoxMTozMi4yNzc0MDRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iNS9iNWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitUZXh0LWNvbnRlbnQtc2hhMTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMTIKK1Byb3AtY29udGVudC1sZW5ndGg6IDE5MgorQ29udGVudC1sZW5ndGg6IDE5MgorCitLIDcKK3N2bjpsb2cKK1YgOTAKK01lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ3N2bmI1JyBpbnRvIEhFQUQKKworKiBzdm5iNToKKyAgYjUgY29tbWl0CisgIENyZWF0ZSBicmFuY2ggc3ZuYjUKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjoxMTo1NC4yNzQ3MjJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iNAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAyMQorL2JyYW5jaGVzL3N2bmI1OjYsMTEKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iNC9iNWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitUZXh0LWNvbnRlbnQtc2hhMTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKZGlmZiAtLWdpdCBhL3QvdDkxNjItZ2l0LXN2bi1kY29tbWl0LWludGVyYWN0aXZlLnNoIGIvdC90OTE2Mi1naXQtc3ZuLWRjb21taXQtaW50ZXJhY3RpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTM4ZDlmYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNjItZ2l0LXN2bi1kY29tbWl0LWludGVyYWN0aXZlLnNoCkBAIC0wLDAgKzEsNjQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgRnLDqWTDqXJpYyBIZWl0em1hbm4KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBkY29tbWl0IC0taW50ZXJhY3RpdmUgc2VyaWVzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJworCXN2bl9jbWQgbWtkaXIgLW0ibWtkaXIgdGVzdC1pbnRlcmFjdGl2ZSIgIiRzdm5yZXBvL3Rlc3QtaW50ZXJhY3RpdmUiICYmCisJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8vdGVzdC1pbnRlcmFjdGl2ZSIgdGVzdC1pbnRlcmFjdGl2ZSAmJgorCWNkIHRlc3QtaW50ZXJhY3RpdmUgJiYKKwl0b3VjaCBmb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSJmb286IGZpcnN0IGNvbW1pdCIgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fuc3dlcnM6IHkgW1xuXSB5ZXMnICcKKwkoCisJCWVjaG8gImNoYW5nZSAjMSIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMxIiAmJgorCQllY2hvICJjaGFuZ2UgIzIiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMiIgJiYKKwkJZWNobyAiY2hhbmdlICMzIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzMiICYmCisJCSggZWNobyAieQorCit5IiB8IEdJVF9TVk5fTk9UVFk9MSBnaXQgc3ZuIGRjb21taXQgLS1pbnRlcmFjdGl2ZSApICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpID0gJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvZ2l0LXN2bikKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbnN3ZXJzOiB5ZXMgeWVzIG5vJyAnCisJKAorCQllY2hvICJjaGFuZ2UgIzEiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMSIgJiYKKwkJZWNobyAiY2hhbmdlICMyIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzIiICYmCisJCWVjaG8gImNoYW5nZSAjMyIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMzIiAmJgorCQkoIGVjaG8gInllcworeWVzCitubyIgfCBHSVRfU1ZOX05PVFRZPTEgZ2l0IHN2biBkY29tbWl0IC0taW50ZXJhY3RpdmUgKSAmJgorCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXl5eKSA9ICQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL2dpdC1zdm4pICYmCisJCWdpdCByZXNldCAtLWhhcmQgcmVtb3Rlcy9naXQtc3ZuCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5zd2VyczogeWVzIHF1aXQnICcKKwkoCisJCWVjaG8gImNoYW5nZSAjMSIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMxIiAmJgorCQllY2hvICJjaGFuZ2UgIzIiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMiIgJiYKKwkJZWNobyAiY2hhbmdlICMzIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzMiICYmCisJCSggZWNobyAieWVzCitxdWl0IiB8IEdJVF9TVk5fTk9UVFk9MSBnaXQgc3ZuIGRjb21taXQgLS1pbnRlcmFjdGl2ZSApICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReXl4pID0gJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvZ2l0LXN2bikgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCByZW1vdGVzL2dpdC1zdm4KKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbnN3ZXJzOiBhbGwnICcKKwkoCisJCWVjaG8gImNoYW5nZSAjMSIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMxIiAmJgorCQllY2hvICJjaGFuZ2UgIzIiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMiIgJiYKKwkJZWNobyAiY2hhbmdlICMzIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzMiICYmCisJCSggZWNobyAiYWxsIiB8IEdJVF9TVk5fTk9UVFk9MSBnaXQgc3ZuIGRjb21taXQgLS1pbnRlcmFjdGl2ZSApICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpID0gJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvZ2l0LXN2bikgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCByZW1vdGVzL2dpdC1zdm4KKwkpCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNjMtZ2l0LXN2bi1yZXNldC1jbGVhcnMtY2FjaGVzLnNoIGIvdC90OTE2My1naXQtc3ZuLXJlc2V0LWNsZWFycy1jYWNoZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDYyNDVjZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNjMtZ2l0LXN2bi1yZXNldC1jbGVhcnMtY2FjaGVzLnNoCkBAIC0wLDAgKzEsNzggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgUGV0ZXIgQmF1bWFubgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHJlc2V0IGNsZWFycyBtZW1vaXplZCBjYWNoZXMnCisuIC4vbGliLWdpdC1zdm4uc2gKKworc3ZuX3Zlcj0iJChzdm4gLS12ZXJzaW9uIC0tcXVpZXQpIgorY2FzZSAkc3ZuX3ZlciBpbgorMC4qIHwgMS5bMC00XS4qKQorCXNraXBfYWxsPSJza2lwcGluZyBnaXQtc3ZuIHRlc3QgLSBTVk4gdG9vIG9sZCAoJHN2bl92ZXIpIgorCXRlc3RfZG9uZQorCTs7Citlc2FjCisKKyMgLi4uIGEgIC0gIGIgLSBtICAgPC0gdHJ1bmsKKyMgICAgICBcICAgICAgIC8KKyMgICAgICAgLi4uIGMgICAgICAgPC0gYnJhbmNoMQorIworIyBTVk4gQ29tbWl0cyBub3QgaW50ZXJlc3RpbmcgZm9yIHRoaXMgdGVzdCBhcmUgYWJicmV2aWF0ZWQgd2l0aCAiLi4uIgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBzb3VyY2Ugc3ZuIHJlcG8nICcKKwlzdm5fY21kIG1rZGlyIC1tICJjcmVhdGUgdHJ1bmsiICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm5fY21kIG1rZGlyIC1tICJjcmVhdGUgYnJhbmNoZXMiICIkc3ZucmVwby9icmFuY2hlcyIgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgIiRTVk5fVFJFRSIgJiYKKwkoCisJCWNkICIkU1ZOX1RSRUUiICYmCisJCXRvdWNoIGZvbyAmJgorCQlzdm5fY21kIGFkZCBmb28gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImEiICYmCisJCXN2bl9jbWQgY3AgLW0gYnJhbmNoICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXN2bl9jbWQgc3dpdGNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQl0b3VjaCBiYXIgJiYKKwkJc3ZuX2NtZCBhZGQgYmFyICYmCisJCXN2bl9jbWQgY29tbWl0IC1tIGIgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi90cnVuayAmJgorCQl0b3VjaCBiYXogJiYKKwkJc3ZuX2NtZCBhZGQgYmF6ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tIGMgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIG1lcmdlICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAibSIKKwkpICYmCisJcm0gLXJmICIkU1ZOX1RSRUUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHRvIG1lcmdlLWJhc2UgKGEpJyAnCisJZ2l0IHN2biBpbml0IC1zICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoIC0tcmV2aXNpb24gQkFTRTozCisnCisKKyMgZ2l0IHN2biByZWJhc2UgbG9vc2VzIHRoZSBtZXJnZSBjb21taXQKKyMKKyMgLi4uIGEgIC0gIGIgLSBtICA8LSB0cnVuaworIyAgICAgIFwKKyMgICAgICAgLi4uIGMKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBsb29zZXMgU1ZOIG1lcmdlIChtKScgJworCWdpdCBzdm4gcmViYXNlICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCXRlc3QgMSA9ICQoZ2l0IGNhdC1maWxlIC1wIG1hc3RlcnxncmVwIHBhcmVudHx3YyAtbCkKKycKKworIyBnaXQgc3ZuIGZldGNoIGNyZWF0ZXMgY29ycmVjdCBoaXN0b3J5IHdpdGggbWVyZ2UgY29tbWl0CisjCisjIC4uLiBhICAtICBiIC0gbSAgPC0gdHJ1bmsKKyMgICAgICBcICAgICAgIC8KKyMgICAgICAgLi4uIGMgICAgICA8LSBicmFuY2gxCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCBhbmQgZmV0Y2ggZ2V0cyB0aGUgU1ZOIG1lcmdlIChtKSBjb3JyZWN0bHknICcKKwlnaXQgc3ZuIHJlc2V0IC1yIDMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwl0ZXN0IDIgPSAkKGdpdCBjYXQtZmlsZSAtcCBvcmlnaW4vdHJ1bmt8Z3JlcCBwYXJlbnR8d2MgLWwpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2NC1naXQtc3ZuLWRjb21taXQtY29uY3VycmVudC5zaCBiL3QvdDkxNjQtZ2l0LXN2bi1kY29tbWl0LWNvbmN1cnJlbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODQ2NjI2OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNjQtZ2l0LXN2bi1kY29tbWl0LWNvbmN1cnJlbnQuc2gKQEAgLTAsMCArMSwyMTYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgUm9iZXJ0IEx1YmVyZGEKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nY29uY3VycmVudCBnaXQgc3ZuIGRjb21taXQnCisuIC4vbGliLWdpdC1zdm4uc2gKKworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2biByZXBvc2l0b3J5JyAnCisJc3ZuX2NtZCBjaGVja291dCAiJHN2bnJlcG8iIHdvcmsuc3ZuICYmCisJKAorCQljZCB3b3JrLnN2biAmJgorCQllY2hvID5maWxlICYmIGVjaG8gPiBhdXRvX3VwZGF0ZWRfZmlsZSAmJgorCQlzdm5fY21kIGFkZCBmaWxlIGF1dG9fdXBkYXRlZF9maWxlICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIKKwkpICYmCisJc3ZuX2NtZCBjaGVja291dCAiJHN2bnJlcG8iIHdvcmstYXV0by1jb21taXRzLnN2bgorJworTj0wCituZXh0X04oKQoreworCU49JCgoICROICsgMSApKQorfQorCisjIFNldHVwIFNWTiByZXBvc2l0b3J5IGhvb2tzIHRvIGVtdWxhdGUgU1ZOIGZhaWx1cmVzIG9yIGNvbmN1cnJlbnQgY29tbWl0cworIyBUaGUgZnVuY3Rpb24gYWRkcworIyBlaXRoZXIgcHJlLWNvbW1pdCAgaG9vaywgd2hpY2ggY2F1c2VzIFNWTiBjb21taXQgZ2l2ZW4gaW4gc2Vjb25kIGFyZ3VtZW50CisjICAgICAgICAgICAgICAgICAgICB0byBmYWlsCisjIG9yICAgICBwb3N0LWNvbW1pdCBob29rLCB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbW1pdCAoYSBuZXcgbGluZSBhZGRlZCB0bworIyAgICAgICAgICAgICAgICAgICAgYXV0b191cGRhdGVkX2ZpbGUpIGFmdGVyIGdpdmVuIFNWTiBjb21taXQKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IGNvbnRhaW5zIGEgdHlwZSBvZiB0aGUgaG9vaworIyBUaGUgc2Vjb25kIGFyZ3VtZW50IGNvbnRhaW5zIGEgbnVtYmVyIChub3QgU1ZOIHJldmlzaW9uKSBvZiBjb21taXQKKyMgdGhlIGhvb2sgc2hvdWxkIGJlIGFwcGxpZWQgZm9yIChlYWNoIHRpbWUgdGhlIGhvb2sgaXMgcnVuLCB0aGUgZ2l2ZW4KKyMgbnVtYmVyIGlzIGRlY3JlYXNlZCBieSBvbmUgdW50aWwgaXQgZ2V0cyAwLCBpbiB3aGljaCBjYXNlIHRoZSBob29rCisjIHdpbGwgZXhlY3V0ZSBpdHMgcmVhbCBhY3Rpb24pCitzZXR1cF9ob29rKCkKK3sKKwlob29rX3R5cGU9IiQxIiAgIyAicHJlLWNvbW1pdCIgb3IgInBvc3QtY29tbWl0IgorCXNraXBfcmV2cz0iJDIiCisJWyAiJGhvb2tfdHlwZSIgPSAicHJlLWNvbW1pdCIgXSB8fAorCQlbICIkaG9va190eXBlIiA9ICJwb3N0LWNvbW1pdCIgXSB8fAorCQl7IGVjaG8gIkVSUk9SOiBpbnZhbGlkIGFyZ3VtZW50ICgkaG9va190eXBlKSIgXAorCQkJInBhc3NlZCB0byBzZXR1cF9ob29rIiA+JjIgOyByZXR1cm4gMTsgfQorCWVjaG8gImNudD0kc2tpcF9yZXZzIiA+ICIkaG9va190eXBlLWNvdW50ZXIiCisJcm0gLWYgIiRyYXdzdm5yZXBvL2hvb2tzLyIqLWNvbW1pdCAjIGRyb3AgcHJldmlvdXMgaG9va3MKKwlob29rPSIkcmF3c3ZucmVwby9ob29rcy8kaG9va190eXBlIgorCWNhdCA+ICIkaG9vayIgPDwtICdFT0YxJworCQkjIS9iaW4vc2gKKwkJc2V0IC1lCisJCWNkICIkMS8uLiIgICMgIiQxIiBpcyByZXBvc2l0b3J5IGxvY2F0aW9uCisJCWV4ZWMgPj4gc3ZuLWhvb2subG9nIDI+JjEKKwkJaG9vaz0iJChiYXNlbmFtZSAiJDAiKSIKKwkJZWNobyAiKioqIEV4ZWN1dGluZyAkaG9vayAkQCIKKwkJc2V0IC14CisJCS4gLi8kaG9vay1jb3VudGVyCisJCWNudD0iJCgoJGNudCAtIDEpKSIKKwkJZWNobyAiY250PSRjbnQiID4gLi8kaG9vay1jb3VudGVyCisJCVsgIiRjbnQiID0gIjAiIF0gfHwgZXhpdCAwCitFT0YxCisJaWYgWyAiJGhvb2tfdHlwZSIgPSAicHJlLWNvbW1pdCIgXTsgdGhlbgorCQllY2hvICJlY2hvICdjb21taXQgZGlzYWxsb3dlZCcgPiYyOyBleGl0IDEiID4+IiRob29rIgorCWVsc2UKKwkJZWNobyAiUEFUSD1cIiRQQVRIXCI7IGV4cG9ydCBQQVRIIiA+PiIkaG9vayIKKwkJZWNobyAic3ZuY29uZj1cIiRzdm5jb25mXCIiID4+IiRob29rIgorCQljYXQgPj4iJGhvb2siIDw8LSAnRU9GMicKKwkJCWNkIHdvcmstYXV0by1jb21taXRzLnN2bgorCQkJc3ZuIHVwIC0tY29uZmlnLWRpciAiJHN2bmNvbmYiCisJCQllY2hvICIkJCIgPj4gYXV0b191cGRhdGVkX2ZpbGUKKwkJCXN2biBjb21taXQgLS1jb25maWctZGlyICIkc3ZuY29uZiIgXAorCQkJCS1tICJhdXRvLWNvbW1pdHRpbmcgY29uY3VycmVudCBjaGFuZ2UiCisJCQlleGl0IDAKK0VPRjIKKwlmaQorCWNobW9kIDc1NSAiJGhvb2siCit9CisKK2NoZWNrX2NvbnRlbnRzKCkKK3sKKwlnaXRkaXI9IiQxIgorCShjZCAuLi93b3JrLnN2biAmJiBzdm5fY21kIHVwKSAmJgorCXRlc3RfY21wIGZpbGUgLi4vd29yay5zdm4vZmlsZSAmJgorCXRlc3RfY21wIGF1dG9fdXBkYXRlZF9maWxlIC4uL3dvcmsuc3ZuL2F1dG9fdXBkYXRlZF9maWxlCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIHBvc3QtY29tbWl0IGhvb2sgY3JlYXRlcyBhIGNvbmN1cnJlbnQgY29tbWl0JyAnCisJc2V0dXBfaG9vayBwb3N0LWNvbW1pdCAxICYmCisJKAorCQljZCB3b3JrLnN2biAmJgorCQljcCBhdXRvX3VwZGF0ZWRfZmlsZSBhdV9maWxlX3NhdmVkICYmCisJCWVjaG8gMSA+PiBmaWxlICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjaGFuZ2luZyBmaWxlIiAmJgorCQlzdm5fY21kIHVwICYmCisJCSEgdGVzdF9jbXAgYXV0b191cGRhdGVkX2ZpbGUgYXVfZmlsZV9zYXZlZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgcHJlLWNvbW1pdCBob29rIGZhaWxzJyAnCisJc2V0dXBfaG9vayBwcmUtY29tbWl0IDIgJiYKKwkoCisJCWNkIHdvcmsuc3ZuICYmCisJCWVjaG8gMiA+PiBmaWxlICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjaGFuZ2luZyBmaWxlIG9uY2UgYWdhaW4iICYmCisJCWVjaG8gMyA+PiBmaWxlICYmCisJCSEgc3ZuX2NtZCBjb21taXQgLW0gInRoaXMgY29tbWl0IHNob3VsZCBmYWlsIiAmJgorCQlzdm5fY21kIHJldmVydCBmaWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0IGVycm9yIGhhbmRsaW5nJyAnCisJc2V0dXBfaG9vayBwcmUtY29tbWl0IDIgJiYKKwluZXh0X04gJiYgZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iIHdvcmskTi5naXQgJiYKKwkoCisJCWNkIHdvcmskTi5naXQgJiYKKwkJZWNobyAxID4+IGZpbGUgJiYgZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMSIgJiYKKwkJZWNobyAyID4+IGZpbGUgJiYgZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMiIgJiYKKwkJZWNobyAzID4+IGZpbGUgJiYgZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMyIgJiYKKwkJIyBzaG91bGQgZmFpbCB0byBkY29tbWl0IDJuZCBhbmQgM3JkIGNoYW5nZQorCQkjIGJ1dCBzdGlsbCBzaG91bGQgbGVhdmUgdGhlIHJlcG9zaXRvcnkgaW4gcmVhc29uYWJsZSBzdGF0ZQorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGRjb21taXQgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwkJZ2l0IHNob3cgSEVBRH4yICAgfCBncmVwIC1xIGdpdC1zdm4taWQgJiYKKwkJISBnaXQgc2hvdyBIRUFEfjEgfCBncmVwIC1xIGdpdC1zdm4taWQgJiYKKwkJISBnaXQgc2hvdyBIRUFEICAgfCBncmVwIC1xIGdpdC1zdm4taWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgY29uY3VycmVudCBjaGFuZ2UgaW4gbm9uLWNoYW5nZWQgZmlsZScgJworCXNldHVwX2hvb2sgcG9zdC1jb21taXQgMiAmJgorCW5leHRfTiAmJiBnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgd29yayROLmdpdCAmJgorCSgKKwkJY2Qgd29yayROLmdpdCAmJgorCQllY2hvIDEgPj4gZmlsZSAmJiBnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4xIiAmJgorCQllY2hvIDIgPj4gZmlsZSAmJiBnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4yIiAmJgorCQllY2hvIDMgPj4gZmlsZSAmJiBnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4zIiAmJgorCQkjIHNob3VsZCByZWJhc2UgYW5kIGxlYXZlIHRoZSByZXBvc2l0b3J5IGluIHJlYXNvbmFibGUgc3RhdGUKKwkJZ2l0IHN2biBkY29tbWl0ICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJCWNoZWNrX2NvbnRlbnRzICYmCisJCWdpdCBzaG93IEhFQUR+MyB8IGdyZXAgLXEgZ2l0LXN2bi1pZCAmJgorCQlnaXQgc2hvdyBIRUFEfjIgfCBncmVwIC1xIGdpdC1zdm4taWQgJiYKKwkJZ2l0IHNob3cgSEVBRH4xIHwgZ3JlcCAtcSBhdXRvLWNvbW1pdHRpbmcgJiYKKwkJZ2l0IHNob3cgSEVBRCAgIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkCisJKQorJworCisjIEFuIHV0aWxpdHkgZnVuY3Rpb24gdXNlZCBpbiB0aGUgZm9sbG93aW5nIHRlc3QKK2RlbGV0ZV9maXJzdF9saW5lKCkKK3sKKwlmaWxlPSIkMSIgJiYKKwlzZWQgMWQgPCAiJGZpbGUiID4gIiR7ZmlsZX0udG1wIiAmJgorCXJtICIkZmlsZSIgJiYKKwltdiAiJHtmaWxlfS50bXAiICIkZmlsZSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCBjb25jdXJyZW50IG5vbi1jb25mbGljdGluZyBjaGFuZ2UnICcKKwlzZXR1cF9ob29rIHBvc3QtY29tbWl0IDIgJiYKKwluZXh0X04gJiYgZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iIHdvcmskTi5naXQgJiYKKwkoCisJCWNkIHdvcmskTi5naXQgJiYKKwkJY2F0IGZpbGUgPj4gYXV0b191cGRhdGVkX2ZpbGUgJiYKKwkJCWdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjEiICYmCisJCWRlbGV0ZV9maXJzdF9saW5lIGF1dG9fdXBkYXRlZF9maWxlICYmCisJCQlnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4yIiAmJgorCQlkZWxldGVfZmlyc3RfbGluZSBhdXRvX3VwZGF0ZWRfZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMyIgJiYKKwkJIyBzaG91bGQgcmViYXNlIGFuZCBsZWF2ZSB0aGUgcmVwb3NpdG9yeSBpbiByZWFzb25hYmxlIHN0YXRlCisJCWdpdCBzdm4gZGNvbW1pdCAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCQljaGVja19jb250ZW50cyAmJgorCQlnaXQgc2hvdyBIRUFEfjMgfCBncmVwIC1xIGdpdC1zdm4taWQgJiYKKwkJZ2l0IHNob3cgSEVBRH4yIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkICYmCisJCWdpdCBzaG93IEhFQUR+MSB8IGdyZXAgLXEgYXV0by1jb21taXR0aW5nICYmCisJCWdpdCBzaG93IEhFQUQgICB8IGdyZXAgLXEgZ2l0LXN2bi1pZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCAtLW5vLXJlYmFzZSBjb25jdXJyZW50IG5vbi1jb25mbGljdGluZyBjaGFuZ2UnICcKKwlzZXR1cF9ob29rIHBvc3QtY29tbWl0IDIgJiYKKwluZXh0X04gJiYgZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iIHdvcmskTi5naXQgJiYKKwkoCisJCWNkIHdvcmskTi5naXQgJiYKKwkJY2F0IGZpbGUgPj4gYXV0b191cGRhdGVkX2ZpbGUgJiYKKwkJCWdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjEiICYmCisJCWRlbGV0ZV9maXJzdF9saW5lIGF1dG9fdXBkYXRlZF9maWxlICYmCisJCQlnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4yIiAmJgorCQlkZWxldGVfZmlyc3RfbGluZSBhdXRvX3VwZGF0ZWRfZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMyIgJiYKKwkJIyBzaG91bGQgZmFpbCBhcyByZWJhc2UgaXMgbmVlZGVkCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZGNvbW1pdCAtLW5vLXJlYmFzZSAmJgorCQkjIGJ1dCBzaG91bGQgbGVhdmUgSEVBRCB1bmNoYW5nZWQKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwkJISBnaXQgc2hvdyBIRUFEfjIgfCBncmVwIC1xIGdpdC1zdm4taWQgJiYKKwkJISBnaXQgc2hvdyBIRUFEfjEgfCBncmVwIC1xIGdpdC1zdm4taWQgJiYKKwkJISBnaXQgc2hvdyBIRUFEICAgfCBncmVwIC1xIGdpdC1zdm4taWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgZmFpbHMgb24gY29uY3VycmVudCBjb25mbGljdGluZyBjaGFuZ2UnICcKKwlzZXR1cF9ob29rIHBvc3QtY29tbWl0IDEgJiYKKwluZXh0X04gJiYgZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iIHdvcmskTi5naXQgJiYKKwkoCisJCWNkIHdvcmskTi5naXQgJiYKKwkJZWNobyBhID4+IGZpbGUgJiYKKwkJCWdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjEiICYmCisJCWVjaG8gYiA+PiBhdXRvX3VwZGF0ZWRfZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMiIgJiYKKwkJZWNobyBjID4+IGF1dG9fdXBkYXRlZF9maWxlICYmCisJCQlnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4zIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGRjb21taXQgJiYgIyByZWJhc2Ugc2hvdWxkIGZhaWwKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2NS1naXQtc3ZuLWZldGNoLW1lcmdlLWJyYW5jaC1vZi1icmFuY2guc2ggYi90L3Q5MTY1LWdpdC1zdm4tZmV0Y2gtbWVyZ2UtYnJhbmNoLW9mLWJyYW5jaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNDgxM2MyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2NS1naXQtc3ZuLWZldGNoLW1lcmdlLWJyYW5jaC1vZi1icmFuY2guc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBTdGV2ZW4gV2FsdGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gbWVyZ2UgZGV0ZWN0aW9uJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3N2bl92ZXI9IiQoc3ZuIC0tdmVyc2lvbiAtLXF1aWV0KSIKK2Nhc2UgJHN2bl92ZXIgaW4KKzAuKiB8IDEuWzAtNF0uKikKKwlza2lwX2FsbD0ic2tpcHBpbmcgZ2l0LXN2biB0ZXN0IC0gU1ZOIHRvbyBvbGQgKCRzdm5fdmVyKSIKKwl0ZXN0X2RvbmUKKwk7OworZXNhYworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHNvdXJjZSBzdm4gcmVwbycgJworCXN2bl9jbWQgbWtkaXIgLW0geCAiJHN2bnJlcG8iL3RydW5rICYmCisJc3ZuX2NtZCBta2RpciAtbSB4ICIkc3ZucmVwbyIvYnJhbmNoZXMgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgIiRTVk5fVFJFRSIgJiYKKwkoCisJCWNkICIkU1ZOX1RSRUUiICYmCisJCXRvdWNoIGZvbyAmJgorCQlzdm5fY21kIGFkZCBmb28gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IiAmJgorCQlzdm5fY21kIGNwIC1tIGJyYW5jaCAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkJdG91Y2ggYmFyICYmCisJCXN2bl9jbWQgYWRkIGJhciAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSBicmFuY2gxICYmCisJCXN2bl9jbWQgY3AgLW0gYnJhbmNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gyICYmCisJCXRvdWNoIGJheiAmJgorCQlzdm5fY21kIGFkZCBiYXogJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gYnJhbmNoMiAmJgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL3RydW5rICYmCisJCXRvdWNoIGJhcjIgJiYKKwkJc3ZuX2NtZCBhZGQgYmFyMiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSB0cnVuayAmJgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJc3ZuX2NtZCBtZXJnZSAiJHN2bnJlcG8iL3RydW5rICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJtZXJnZSB0cnVuayIgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi90cnVuayAmJgorCQlzdm5fY21kIG1lcmdlIC0tcmVpbnRlZ3JhdGUgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gyICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJtZXJnZSBicmFuY2gyIgorCSkgJiYKKwlybSAtcmYgIiRTVk5fVFJFRSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc3ZuIHJlcG8nICcKKwlnaXQgc3ZuIGluaXQgLXMgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1lcmdlIGNvbW1pdCcgJ3g9JChnaXQgcmV2LXBhcnNlIEhFQUReMikgJiYKKwl5PSQoZ2l0IHJldi1wYXJzZSBvcmlnaW4vYnJhbmNoMikgJiYKKwl0ZXN0ICJ4JHgiID0gIngkeSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTY2LWdpdC1zdm4tZmV0Y2gtbWVyZ2UtYnJhbmNoLW9mLWJyYW5jaDIuc2ggYi90L3Q5MTY2LWdpdC1zdm4tZmV0Y2gtbWVyZ2UtYnJhbmNoLW9mLWJyYW5jaDIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTJmMmU0NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNjYtZ2l0LXN2bi1mZXRjaC1tZXJnZS1icmFuY2gtb2YtYnJhbmNoMi5zaApAQCAtMCwwICsxLDUzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyIFN0ZXZlbiBXYWx0ZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBtZXJnZSBkZXRlY3Rpb24nCisuIC4vbGliLWdpdC1zdm4uc2gKKworc3ZuX3Zlcj0iJChzdm4gLS12ZXJzaW9uIC0tcXVpZXQpIgorY2FzZSAkc3ZuX3ZlciBpbgorMC4qIHwgMS5bMC00XS4qKQorCXNraXBfYWxsPSJza2lwcGluZyBnaXQtc3ZuIHRlc3QgLSBTVk4gdG9vIG9sZCAoJHN2bl92ZXIpIgorCXRlc3RfZG9uZQorCTs7Citlc2FjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgc291cmNlIHN2biByZXBvJyAnCisJc3ZuX2NtZCBta2RpciAtbSB4ICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm5fY21kIG1rZGlyIC1tIHggIiRzdm5yZXBvIi9icmFuY2hlcyAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuayAiJFNWTl9UUkVFIiAmJgorCSgKKwkJY2QgIiRTVk5fVFJFRSIgJiYKKwkJdG91Y2ggZm9vICYmCisJCXN2bl9jbWQgYWRkIGZvbyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiICYmCisJCXN2bl9jbWQgY3AgLW0gYnJhbmNoICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXN2bl9jbWQgc3dpdGNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQl0b3VjaCBiYXIgJiYKKwkJc3ZuX2NtZCBhZGQgYmFyICYmCisJCXN2bl9jbWQgY29tbWl0IC1tIGJyYW5jaDEgJiYKKwkJc3ZuX2NtZCBjcCAtbSBicmFuY2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMiAmJgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJdG91Y2ggYmF6ICYmCisJCXN2bl9jbWQgYWRkIGJheiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSBicmFuY2gyICYmCisJCXN2bl9jbWQgc3dpdGNoICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwkJc3ZuX2NtZCBtZXJnZSAtLXJlaW50ZWdyYXRlICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAibWVyZ2UgYnJhbmNoMiIKKwkpICYmCisJcm0gLXJmICIkU1ZOX1RSRUUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHN2biByZXBvJyAnCisJZ2l0IHN2biBpbml0IC1zICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXJnZSBjb21taXQnICd4PSQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpICYmCisJeT0kKGdpdCByZXYtcGFyc2Ugb3JpZ2luL2JyYW5jaDIpICYmCisJdGVzdCAieCR4IiA9ICJ4JHkiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2Ny1naXQtc3ZuLWNtZC1icmFuY2gtc3VicHJvamVjdC5zaCBiL3QvdDkxNjctZ2l0LXN2bi1jbWQtYnJhbmNoLXN1YnByb2plY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmEzNWZjMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNjctZ2l0LXN2bi1jbWQtYnJhbmNoLXN1YnByb2plY3Quc2gKQEAgLTAsMCArMSw0OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMyBUb2JpYXMgU2NodWx0ZQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGJyYW5jaCBmb3Igc3VicHJvamVjdCBjbG9uZXMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBzdm5yZXBvJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJbWtkaXIgLXAgdHJ1bmsvcHJvamVjdCBicmFuY2hlcyB0YWdzICYmCisJCSgKKwkJCWNkIHRydW5rL3Byb2plY3QgJiYKKwkJCWVjaG8gZm9vID4gZm9vCisJCSkgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0LXN2biIgLiAiJHN2bnJlcG8iID4vZGV2L251bGwKKwkpICYmCisJcm0gLXJmIGltcG9ydCAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuay9wcm9qZWN0IHRydW5rL3Byb2plY3QgJiYKKwkoCisJCWNkIHRydW5rL3Byb2plY3QgJiYKKwkJZWNobyBiYXIgPj4gZm9vICYmCisJCXN2bl9jbWQgY2kgLW0gInVwZGF0ZWQgdHJ1bmsiCisJKSAmJgorCXJtIC1yZiB0cnVuaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgaW50byBnaXQnICcKKwlnaXQgc3ZuIGluaXQgLS10cnVuaz10cnVuay9wcm9qZWN0IC0tYnJhbmNoZXM9YnJhbmNoZXMvKi9wcm9qZWN0IFwKKwkJLS10YWdzPXRhZ3MvKi9wcm9qZWN0ICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IGNoZWNrb3V0IHJlbW90ZXMvb3JpZ2luL3RydW5rCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gYnJhbmNoIHRlc3RzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBicmFuY2ggYSAmJgorCWdpdCBzdm4gYnJhbmNoIC0tcGFyZW50cyBhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBicmFuY2ggLXQgdGFnMSAmJgorCWdpdCBzdm4gYnJhbmNoIC0tcGFyZW50cyAtdCB0YWcxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBicmFuY2ggLS10YWcgdGFnMiAmJgorCWdpdCBzdm4gYnJhbmNoIC0tcGFyZW50cyAtLXRhZyB0YWcyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biB0YWcgdGFnMyAmJgorCWdpdCBzdm4gdGFnIC0tcGFyZW50cyB0YWczCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2OC1naXQtc3ZuLXBhcnRpYWxseS1nbG9iYmVkLW5hbWVzLnNoIGIvdC90OTE2OC1naXQtc3ZuLXBhcnRpYWxseS1nbG9iYmVkLW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJkZjZlODQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTY4LWdpdC1zdm4tcGFydGlhbGx5LWdsb2JiZWQtbmFtZXMuc2gKQEAgLTAsMCArMSwyMjkgQEAKKyMhL2Jpbi9zaAordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBnbG9iYmluZyByZWZzcGVjcyB3aXRoIHByZWZpeGVkIGdsb2JzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgdGVzdCByZWZzcGVjIHByZWZpeGVkIGdsb2JiaW5nJyAnCisJY2F0ID5leHBlY3QuZW5kIDw8RU9GCit0aGUgZW5kCitoaQorc3RhcnQgYSBuZXcgYnJhbmNoCitpbml0aWFsCitFT0YKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcmVmc3BlYyBwcmVmaXhlZCBnbG9iYmluZycgJworCW1rZGlyIC1wIHRydW5rL3NyYy9hIHRydW5rL3NyYy9iIHRydW5rL2RvYyAmJgorCWVjaG8gImhlbGxvIHdvcmxkIiA+dHJ1bmsvc3JjL2EvcmVhZG1lICYmCisJZWNobyAiZ29vZGJ5ZSB3b3JsZCIgPnRydW5rL3NyYy9iL3JlYWRtZSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiB0cnVuayAiJHN2bnJlcG8iL3RydW5rICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHRtcCAmJgorCSgKKwkJY2QgdG1wICYmCisJCW1rZGlyIGJyYW5jaGVzIHRhZ3MgJiYKKwkJc3ZuX2NtZCBhZGQgYnJhbmNoZXMgdGFncyAmJgorCQlzdm5fY21kIGNwIHRydW5rIGJyYW5jaGVzL2Jfc3RhcnQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInN0YXJ0IGEgbmV3IGJyYW5jaCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQllY2hvICJoaSIgPj5icmFuY2hlcy9iX3N0YXJ0L3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIGJyYW5jaGVzL2Jfc3RhcnQvc3JjL2IvcmVhZG1lICYmCisJCWVjaG8gImhleSIgPj5icmFuY2hlcy9iX3N0YXJ0L3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIGJyYW5jaGVzL2Jfc3RhcnQvc3JjL2EvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJoaSIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGNwIGJyYW5jaGVzL2Jfc3RhcnQgdGFncy90X2VuZCAmJgorCQllY2hvICJieWUiID4+dGFncy90X2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL3RfZW5kL3NyYy9iL3JlYWRtZSAmJgorCQllY2hvICJheWUiID4+dGFncy90X2VuZC9zcmMvYS9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL3RfZW5kL3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidGhlIGVuZCIgJiYKKwkJZWNobyAiYnllYnllIiA+PnRhZ3MvdF9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgdGFncy90X2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm5vdGhpbmcgdG8gc2VlIGhlcmUiCisJKSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4udXJsICIkc3ZucmVwbyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKwkJCSAidHJ1bmsvc3JjL2E6cmVmcy9yZW1vdGVzL3RydW5rIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgXAorCQkJICJicmFuY2hlcy9iXyovc3JjL2E6cmVmcy9yZW1vdGVzL2JyYW5jaGVzL2JfKiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLnRhZ3NcCisJCQkgInRhZ3MvdF8qL3NyYy9hOnJlZnMvcmVtb3Rlcy90YWdzL3RfKiIgJiYKKwlnaXQgc3ZuIG11bHRpLWZldGNoICYmCisJZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHJlZnMvcmVtb3Rlcy90YWdzL3RfZW5kID5hY3R1YWwgJiYKKwlzZWQgLWUgInMvXi5cezQxXH0vLyIgYWN0dWFsID5vdXRwdXQuZW5kICYmCisJdGVzdF9jbXAgZXhwZWN0LmVuZCBvdXRwdXQuZW5kICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzL3RfZW5kfjEpIiA9IFwKKwkJIiQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYnJhbmNoZXMvYl9zdGFydCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9icmFuY2hlcy9iX3N0YXJ0fjIpIiA9IFwKKwkJIiQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHJ1bmspIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvdF9lbmRAMworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSB0ZXN0IGxlZnQtaGFuZC1zaWRlIG9ubHkgcHJlZml4ZWQgZ2xvYmJpbmcnICcKKwllY2hvIHRyeSB0byB0cnkgPmV4cGVjdC50d28gJiYKKwllY2hvIG5vdGhpbmcgdG8gc2VlIGhlcmUgPj5leHBlY3QudHdvICYmCisJY2F0IGV4cGVjdC5lbmQgPj5leHBlY3QudHdvCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGxlZnQtaGFuZC1zaWRlIG9ubHkgcHJlZml4ZWQgZ2xvYmJpbmcnICcKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudHdvLnVybCAiJHN2bnJlcG8iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by5mZXRjaCB0cnVuazpyZWZzL3JlbW90ZXMvdHdvL3RydW5rICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by5icmFuY2hlcyBcCisJCQkgImJyYW5jaGVzL2JfKjpyZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzLyoiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by50YWdzIFwKKwkJCSAidGFncy90Xyo6cmVmcy9yZW1vdGVzL3R3by90YWdzLyoiICYmCisJKAorCQljZCB0bXAgJiYKKwkJZWNobyAidHJ5IHRyeSIgPj50YWdzL3RfZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvdF9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0cnkgdG8gdHJ5IgorCSkgJiYKKwlnaXQgc3ZuIGZldGNoIHR3byAmJgorCWdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvdF9lbmQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDYgYWN0dWFsICYmCisJZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvYl9zdGFydCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL2Jfc3RhcnR+MikgPSBcCisJICAgICAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by90cnVuaykgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvdF9lbmR+MykgPSBcCisJICAgICAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy9iX3N0YXJ0KSAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvdF9lbmQgPmFjdHVhbCAmJgorCXNlZCAtZSAicy9eLlx7NDFcfS8vIiBhY3R1YWwgPm91dHB1dC50d28gJiYKKwl0ZXN0X2NtcCBleHBlY3QudHdvIG91dHB1dC50d28KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgdGVzdCBwcmVmaXhlZCBnbG9icyBtYXRjaCBqdXN0IHByZWZpeCcgJworCWNhdCA+ZXhwZWN0LnRocmVlIDw8RU9GCitUYWcgY29tbWl0IHRvIHRfCitCcmFuY2ggY29tbWl0IHRvIGJfCitpbml0aWFsCitFT0YKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcHJlZml4ZWQgZ2xvYnMgbWF0Y2gganVzdCBwcmVmaXgnICcKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUudXJsICIkc3ZucmVwbyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUuZmV0Y2ggXAorCQkJIHRydW5rOnJlZnMvcmVtb3Rlcy90aHJlZS90cnVuayAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50aHJlZS5icmFuY2hlcyBcCisJCQkgImJyYW5jaGVzL2JfKjpyZWZzL3JlbW90ZXMvdGhyZWUvYnJhbmNoZXMvKiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUudGFncyBcCisJCQkgInRhZ3MvdF8qOnJlZnMvcmVtb3Rlcy90aHJlZS90YWdzLyoiICYmCisJKAorCQljZCB0bXAgJiYKKwkJc3ZuX2NtZCBjcCB0cnVuayBicmFuY2hlcy9iXyAmJgorCQllY2hvICJCcmFuY2ggY29tbWl0IHRvIGJfIiA+PmJyYW5jaGVzL2JfL3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIGJyYW5jaGVzL2JfL3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiQnJhbmNoIGNvbW1pdCB0byBiXyIgJiYKKwkJc3ZuX2NtZCB1cCAmJiBzdm5fY21kIGNwIGJyYW5jaGVzL2JfIHRhZ3MvdF8gJiYKKwkJZWNobyAiVGFnIGNvbW1pdCB0byB0XyIgPj50YWdzL3RfL3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvdF8vc3JjL2EvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJUYWcgY29tbWl0IHRvIHRfIiAmJgorCQlzdm5fY21kIHVwCisJKSAmJgorCWdpdCBzdm4gZmV0Y2ggdGhyZWUgJiYKKwlnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL3RocmVlL2JyYW5jaGVzL2JfID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbCAmJgorCWdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvdGhyZWUvdGFncy90XyA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGhyZWUvYnJhbmNoZXMvYl9+MSkgPSBcCisJICAgICAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RocmVlL3RydW5rKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90aHJlZS90YWdzL3RffjEpID0gXAorCSAgICAgJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90aHJlZS9icmFuY2hlcy9iXykgJiYKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgcmVmcy9yZW1vdGVzL3RocmVlL3RhZ3MvdF8gPmFjdHVhbCAmJgorCXNlZCAtZSAicy9eLlx7NDFcfS8vIiBhY3R1YWwgPm91dHB1dC50aHJlZSAmJgorCXRlc3RfY21wIGV4cGVjdC50aHJlZSBvdXRwdXQudGhyZWUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgdGVzdCBkaXNhbGxvdyBwcmVmaXhlZCBtdWx0aS1nbG9icycgIgorY2F0ID5leHBlY3QuZm91ciA8PEVPRgorT25seSBvbmUgc2V0IG9mIHdpbGRjYXJkcyAoZS5nLiAnKicgb3IgJyovKi8qJykgaXMgc3VwcG9ydGVkOiBicmFuY2hlcy9iXyovdC8qCisKK0VPRgorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkaXNhbGxvdyBwcmVmaXhlZCBtdWx0aS1nbG9icycgJworCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5mb3VyLnVybCAiJHN2bnJlcG8iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLmZvdXIuZmV0Y2ggXAorCQkJIHRydW5rOnJlZnMvcmVtb3Rlcy9mb3VyL3RydW5rICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLmZvdXIuYnJhbmNoZXMgXAorCQkJICJicmFuY2hlcy9iXyovdC8qOnJlZnMvcmVtb3Rlcy9mb3VyL2JyYW5jaGVzLyoiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLmZvdXIudGFncyBcCisJCQkgInRhZ3MvdF8qLyo6cmVmcy9yZW1vdGVzL2ZvdXIvdGFncy8qIiAmJgorCSgKKwkJY2QgdG1wICYmCisJCWVjaG8gInRyeSB0cnkiID4+dGFncy90X2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL3RfZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBmZXRjaCBmb3VyIDI+c3RkZXJyLmZvdXIgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZm91ciBzdGRlcnIuZm91ciAmJgorCWdpdCBjb25maWcgLS11bnNldCBzdm4tcmVtb3RlLmZvdXIuYnJhbmNoZXMgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgc3ZuLXJlbW90ZS5mb3VyLnRhZ3MKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgdGVzdCBnbG9iYmluZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSB3b3JkJyAnCisJY2F0ID5leHBlY3QuZml2ZSA8PEVPRgorVGFnIGNvbW1pdCB0byBmZ2hpagorQnJhbmNoIGNvbW1pdCB0byBhYmNkZQoraW5pdGlhbAorRU9GCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGdsb2JiaW5nIGluIHRoZSBtaWRkbGUgb2YgdGhlIHdvcmQnICcKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuZml2ZS51cmwgIiRzdm5yZXBvIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5maXZlLmZldGNoIFwKKwkJCSB0cnVuazpyZWZzL3JlbW90ZXMvZml2ZS90cnVuayAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5maXZlLmJyYW5jaGVzIFwKKwkJCSAiYnJhbmNoZXMvYSplOnJlZnMvcmVtb3Rlcy9maXZlL2JyYW5jaGVzLyoiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLmZpdmUudGFncyBcCisJCQkgInRhZ3MvZipqOnJlZnMvcmVtb3Rlcy9maXZlL3RhZ3MvKiIgJiYKKwkoCisJCWNkIHRtcCAmJgorCQlzdm5fY21kIGNwIHRydW5rIGJyYW5jaGVzL2FiY2RlICYmCisJCWVjaG8gIkJyYW5jaCBjb21taXQgdG8gYWJjZGUiID4+YnJhbmNoZXMvYWJjZGUvc3JjL2EvcmVhZG1lICYmCisJCXBva2UgYnJhbmNoZXMvYl8vc3JjL2EvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJCcmFuY2ggY29tbWl0IHRvIGFiY2RlIiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgY3AgYnJhbmNoZXMvYWJjZGUgdGFncy9mZ2hpaiAmJgorCQllY2hvICJUYWcgY29tbWl0IHRvIGZnaGlqIiA+PnRhZ3MvZmdoaWovc3JjL2EvcmVhZG1lICYmCisJCXBva2UgdGFncy9mZ2hpai9zcmMvYS9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlRhZyBjb21taXQgdG8gZmdoaWoiICYmCisJCXN2bl9jbWQgdXAKKwkpICYmCisJZ2l0IHN2biBmZXRjaCBmaXZlICYmCisJZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy9maXZlL2JyYW5jaGVzL2FiY2RlID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbCAmJgorCWdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvZml2ZS90YWdzL2ZnaGlqID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9maXZlL2JyYW5jaGVzL2FiY2RlfjEpID0gXAorCSAgICAgJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9maXZlL3RydW5rKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9maXZlL3RhZ3MvZmdoaWp+MSkgPSBcCisJICAgICAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2ZpdmUvYnJhbmNoZXMvYWJjZGUpICYmCisJZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHJlZnMvcmVtb3Rlcy9maXZlL3RhZ3MvZmdoaWogPmFjdHVhbCAmJgorCXNlZCAtZSAicy9eLlx7NDFcfS8vIiBhY3R1YWwgPm91dHB1dC5maXZlICYmCisJdGVzdF9jbXAgZXhwZWN0LmZpdmUgb3V0cHV0LmZpdmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgdGVzdCBkaXNhbGxvdyBtdWx0aXBsZSBhc3Rlcmlza3MgaW4gb25lIHdvcmQnICIKKwllY2hvIFwiT25seSBvbmUgJyonIGlzIGFsbG93ZWQgaW4gYSBwYXR0ZXJuOiAnYSpjKmUnXCIgPmV4cGVjdC5zaXggJiYKKwllY2hvIFwiXCIgPj5leHBlY3Quc2l4CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRpc2FsbG93IG11bHRpcGxlIGFzdGVyaXNrcyBpbiBvbmUgd29yZCcgJworCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zaXgudXJsICIkc3ZucmVwbyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc2l4LmZldGNoIFwKKwkJCSB0cnVuazpyZWZzL3JlbW90ZXMvc2l4L3RydW5rICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnNpeC5icmFuY2hlcyBcCisJCQkgImJyYW5jaGVzL2EqYyplOnJlZnMvcmVtb3Rlcy9zaXgvYnJhbmNoZXMvKiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc2l4LnRhZ3MgXAorCQkJICJ0YWdzL2YqaCpqOnJlZnMvcmVtb3Rlcy9zaXgvdGFncy8qIiAmJgorCSgKKwkJY2QgdG1wICYmCisJCWVjaG8gInRyeSB0cnkiID4+dGFncy9mZ2hpai9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2ZnaGlqL3NyYy9iL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBmZXRjaCBzaXggMj5zdGRlcnIuc2l4ICYmCisJdGVzdF9jbXAgZXhwZWN0LnNpeCBzdGRlcnIuc2l4CisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNjktZ2l0LXN2bi1kY29tbWl0LWNybGYuc2ggYi90L3Q5MTY5LWdpdC1zdm4tZGNvbW1pdC1jcmxmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU0YjFmNjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTY5LWdpdC1zdm4tZGNvbW1pdC1jcmxmLnNoCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGRjb21taXQgQ1JMRicKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb21taXQgcmVwb3NpdG9yeScgJworCXN2bl9jbWQgbWtkaXIgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiAiJHN2bnJlcG8vZGlyIiAmJgorCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiB3b3JrICYmCisJKAorCQljZCB3b3JrICYmCisJCWVjaG8gZm9vID4+Zm9vICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZm9vICYmCisJCXByaW50ZiAiYVxcclxcblxcclxcbmJcXHJcXG5jXFxyXFxuIiA+Y210ICYmCisJCXA9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCXQ9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJY210PSQoZ2l0IGNvbW1pdC10cmVlIC1wICRwICR0IDxjbXQpICYmCisJCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICRjbXQgJiYKKwkJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgdGFpbCAtbjQgPm91dCAmJgorCQl0ZXN0X2NtcCBjbXQgb3V0ICYmCisJCWdpdCBzdm4gZGNvbW1pdCAmJgorCQlwcmludGYgImFcXG5cXG5iXFxuY1xcbiIgPmV4cCAmJgorCQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIDYsOXAgPm91dCAmJgorCQl0ZXN0X2NtcCBleHAgb3V0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkyMDAtZ2l0LWN2c2V4cG9ydGNvbW1pdC5zaCBiL3QvdDkyMDAtZ2l0LWN2c2V4cG9ydGNvbW1pdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNTk0NmNiCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTIwMC1naXQtY3ZzZXhwb3J0Y29tbWl0LnNoCkBAIC0wLDAgKzEsMzQyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSBSb2JpbiBSb3NlbmJlcmcKKyMKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZXhwb3J0IG9mIGNvbW1pdHMgdG8gQ1ZTJworCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkw7IHRoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0IGN2c2V4cG9ydGNvbW1pdCB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKworY3ZzID4vZGV2L251bGwgMj4mMQoraWYgdGVzdCAkPyAtbmUgMQordGhlbgorICAgIHNraXBfYWxsPSdza2lwcGluZyBnaXQgY3ZzZXhwb3J0Y29tbWl0IHRlc3RzLCBjdnMgbm90IGZvdW5kJworICAgIHRlc3RfZG9uZQorZmkKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIE5PVF9ST09UOyB0aGVuCisJc2tpcF9hbGw9J1doZW4gY3ZzIGlzIGNvbXBpbGVkIHdpdGggQ1ZTX0JBRFJPT1QgY29tbWl0cyBhcyByb290IGZhaWwnCisJdGVzdF9kb25lCitmaQorCitDVlNST09UPSRQV0QvdG1wY3Zzcm9vdAorQ1ZTV09SSz0kUFdEL2N2c3dvcmsKK0dJVF9ESVI9JFBXRC8uZ2l0CitleHBvcnQgQ1ZTUk9PVCBDVlNXT1JLIEdJVF9ESVIKKworcm0gLXJmICIkQ1ZTUk9PVCIgIiRDVlNXT1JLIgorCitjdnMgaW5pdCAmJgordGVzdCAtZCAiJENWU1JPT1QiICYmCitjdnMgLVEgY28gLWQgIiRDVlNXT1JLIiAuICYmCitlY2hvID5lbXB0eSAmJgorZ2l0IGFkZCBlbXB0eSAmJgorZ2l0IGNvbW1pdCAtcSAtYSAtbSAiSW5pdGlhbCIgMj4vZGV2L251bGwgfHwKK2V4aXQgMQorCitjaGVja19lbnRyaWVzICgpIHsKKwkjICQxID09IGRpcmVjdG9yeSwgJDIgPT0gZXhwZWN0ZWQKKwlzZWQgLW5lICcvXlwvL3AnICIkMS9DVlMvRW50cmllcyIgfCBzb3J0IHwgY3V0IC1kLyAtZjIsMyw1ID5hY3R1YWwKKwlpZiB0ZXN0IC16ICIkMiIKKwl0aGVuCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKwllbHNlCisJCXByaW50ZiAnJXNcbicgIiQyIiB8IHRyICd8JyAnXDAxMicgPmV4cGVjdGVkCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCWZpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdOZXcgZmlsZScgXAorICAgICdta2RpciBBIEIgQyBEIEUgRiAmJgorICAgICBlY2hvIGhlbGxvMSA+QS9uZXdmaWxlMS50eHQgJiYKKyAgICAgZWNobyBoZWxsbzIgPkIvbmV3ZmlsZTIudHh0ICYmCisgICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTEucG5nIEMvbmV3ZmlsZTMucG5nICYmCisgICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTEucG5nIEQvbmV3ZmlsZTQucG5nICYmCisgICAgIGdpdCBhZGQgQS9uZXdmaWxlMS50eHQgJiYKKyAgICAgZ2l0IGFkZCBCL25ld2ZpbGUyLnR4dCAmJgorICAgICBnaXQgYWRkIEMvbmV3ZmlsZTMucG5nICYmCisgICAgIGdpdCBhZGQgRC9uZXdmaWxlNC5wbmcgJiYKKyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiVGVzdDogTmV3IGZpbGUiICYmCisgICAgIGlkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCkgJiYKKyAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAkaWQgJiYKKyAgICAgY2hlY2tfZW50cmllcyBBICJuZXdmaWxlMS50eHQvMS4xLyIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBCICJuZXdmaWxlMi50eHQvMS4xLyIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBDICJuZXdmaWxlMy5wbmcvMS4xLy1rYiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBEICJuZXdmaWxlNC5wbmcvMS4xLy1rYiIgJiYKKyAgICAgdGVzdF9jbXAgQS9uZXdmaWxlMS50eHQgLi4vQS9uZXdmaWxlMS50eHQgJiYKKyAgICAgdGVzdF9jbXAgQi9uZXdmaWxlMi50eHQgLi4vQi9uZXdmaWxlMi50eHQgJiYKKyAgICAgdGVzdF9jbXAgQy9uZXdmaWxlMy5wbmcgLi4vQy9uZXdmaWxlMy5wbmcgJiYKKyAgICAgdGVzdF9jbXAgRC9uZXdmaWxlNC5wbmcgLi4vRC9uZXdmaWxlNC5wbmcKKyAgICAgKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1JlbW92ZSB0d28gZmlsZXMsIGFkZCB0d28gYW5kIHVwZGF0ZSB0d28nIFwKKyAgICAnZWNobyBIZWxsbzEgPj5BL25ld2ZpbGUxLnR4dCAmJgorICAgICBybSAtZiBCL25ld2ZpbGUyLnR4dCAmJgorICAgICBybSAtZiBDL25ld2ZpbGUzLnBuZyAmJgorICAgICBlY2hvIEhlbGxvNSAgPkUvbmV3ZmlsZTUudHh0ICYmCisgICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTIucG5nIEQvbmV3ZmlsZTQucG5nICYmCisgICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTEucG5nIEYvbmV3ZmlsZTYucG5nICYmCisgICAgIGdpdCBhZGQgRS9uZXdmaWxlNS50eHQgJiYKKyAgICAgZ2l0IGFkZCBGL25ld2ZpbGU2LnBuZyAmJgorICAgICBnaXQgY29tbWl0IC1hIC1tICJUZXN0OiBSZW1vdmUsIGFkZCBhbmQgdXBkYXRlIiAmJgorICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisgICAgIChjZCAiJENWU1dPUksiICYmCisgICAgIGdpdCBjdnNleHBvcnRjb21taXQgLWMgJGlkICYmCisgICAgIGNoZWNrX2VudHJpZXMgQSAibmV3ZmlsZTEudHh0LzEuMi8iICYmCisgICAgIGNoZWNrX2VudHJpZXMgQiAiIiAmJgorICAgICBjaGVja19lbnRyaWVzIEMgIiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBEICJuZXdmaWxlNC5wbmcvMS4yLy1rYiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBFICJuZXdmaWxlNS50eHQvMS4xLyIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBGICJuZXdmaWxlNi5wbmcvMS4xLy1rYiIgJiYKKyAgICAgdGVzdF9jbXAgQS9uZXdmaWxlMS50eHQgLi4vQS9uZXdmaWxlMS50eHQgJiYKKyAgICAgdGVzdF9jbXAgRC9uZXdmaWxlNC5wbmcgLi4vRC9uZXdmaWxlNC5wbmcgJiYKKyAgICAgdGVzdF9jbXAgRS9uZXdmaWxlNS50eHQgLi4vRS9uZXdmaWxlNS50eHQgJiYKKyAgICAgdGVzdF9jbXAgRi9uZXdmaWxlNi5wbmcgLi4vRi9uZXdmaWxlNi5wbmcKKyAgICAgKScKKworIyBTaG91bGQgZmFpbCAoYnV0IG9ubHkgb24gdGhlIGdpdCBjdnNleHBvcnRjb21taXQgc3RhZ2UpCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnRmFpbCB0byBjaGFuZ2UgYmluYXJ5IG1vcmUgdGhhbiBvbmUgZ2VuZXJhdGlvbiBvbGQnIFwKKyAgICAnY2F0IEYvbmV3ZmlsZTYucG5nID4+RC9uZXdmaWxlNC5wbmcgJiYKKyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiZ2VuZXJhdGlpb24gMSIgJiYKKyAgICAgY2F0IEYvbmV3ZmlsZTYucG5nID4+RC9uZXdmaWxlNC5wbmcgJiYKKyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiZ2VuZXJhdGlvbiAyIiAmJgorICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisgICAgIChjZCAiJENWU1dPUksiICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjdnNleHBvcnRjb21taXQgLWMgJGlkCisgICAgICknCisKKyN0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyMgICAgJ0ZhaWwgdG8gcmVtb3ZlIGJpbmFyeSBmaWxlIG1vcmUgdGhhbiBvbmUgZ2VuZXJhdGlvbiBvbGQnIFwKKyMgICAgJ2dpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKyMgICAgIGNhdCBGL25ld2ZpbGU2LnBuZyA+PkQvbmV3ZmlsZTQucG5nICYmCisjICAgICBnaXQgY29tbWl0IC1hIC1tICJnZW5lcmF0aW9uIDIgKGFnYWluKSIgJiYKKyMgICAgIHJtIC1mIEQvbmV3ZmlsZTQucG5nICYmCisjICAgICBnaXQgY29tbWl0IC1hIC1tICJnZW5lcmF0aW9uIDMiICYmCisjICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisjICAgICAoY2QgIiRDVlNXT1JLIiAmJgorIyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAkaWQKKyMgICAgICknCisKKyMgV2UgcmV1c2UgdGhlIHN0YXRlIGZyb20gdHdvIHRlc3RzIGJhY2sgaGVyZQorCisjIFRoaXMgdGVzdCBpcyBoZXJlIGJlY2F1c2UgYSBwYXRjaCBmb3Igb25seSBiaW5hcnkgZmlsZXMgd2lsbAorIyBmYWlsIHdpdGggZ251IHBhdGNoLCBzbyBjdnNleHBvcnRjb21taXQgbXVzdCBoYW5kbGUgdGhhdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdSZW1vdmUgb25seSBiaW5hcnkgZmlsZXMnIFwKKyAgICAnZ2l0IHJlc2V0IC0taGFyZCBIRUFEXl4gJiYKKyAgICAgcm0gLWYgRC9uZXdmaWxlNC5wbmcgJiYKKyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAidGVzdDogcmVtb3ZlIG9ubHkgYSBiaW5hcnkgZmlsZSIgJiYKKyAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1jICRpZCAmJgorICAgICBjaGVja19lbnRyaWVzIEEgIm5ld2ZpbGUxLnR4dC8xLjIvIiAmJgorICAgICBjaGVja19lbnRyaWVzIEIgIiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBDICIiICYmCisgICAgIGNoZWNrX2VudHJpZXMgRCAiIiAmJgorICAgICBjaGVja19lbnRyaWVzIEUgIm5ld2ZpbGU1LnR4dC8xLjEvIiAmJgorICAgICBjaGVja19lbnRyaWVzIEYgIm5ld2ZpbGU2LnBuZy8xLjEvLWtiIiAmJgorICAgICB0ZXN0X2NtcCBBL25ld2ZpbGUxLnR4dCAuLi9BL25ld2ZpbGUxLnR4dCAmJgorICAgICB0ZXN0X2NtcCBFL25ld2ZpbGU1LnR4dCAuLi9FL25ld2ZpbGU1LnR4dCAmJgorICAgICB0ZXN0X2NtcCBGL25ld2ZpbGU2LnBuZyAuLi9GL25ld2ZpbGU2LnBuZworICAgICApJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnUmVtb3ZlIG9ubHkgYSB0ZXh0IGZpbGUnIFwKKyAgICAncm0gLWYgQS9uZXdmaWxlMS50eHQgJiYKKyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAidGVzdDogcmVtb3ZlIG9ubHkgYSBiaW5hcnkgZmlsZSIgJiYKKyAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1jICRpZCAmJgorICAgICBjaGVja19lbnRyaWVzIEEgIiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBCICIiICYmCisgICAgIGNoZWNrX2VudHJpZXMgQyAiIiAmJgorICAgICBjaGVja19lbnRyaWVzIEQgIiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBFICJuZXdmaWxlNS50eHQvMS4xLyIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBGICJuZXdmaWxlNi5wbmcvMS4xLy1rYiIgJiYKKyAgICAgdGVzdF9jbXAgRS9uZXdmaWxlNS50eHQgLi4vRS9uZXdmaWxlNS50eHQgJiYKKyAgICAgdGVzdF9jbXAgRi9uZXdmaWxlNi5wbmcgLi4vRi9uZXdmaWxlNi5wbmcKKyAgICAgKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgICdOZXcgZmlsZSB3aXRoIHNwYWNlcyBpbiBmaWxlIG5hbWUnIFwKKyAgICAgJ21rZGlyICJHIGciICYmCisgICAgICBlY2hvIG9rIHRoZW4gPiJHIGcvd2l0aCBzcGFjZXMudHh0IiAmJgorICAgICAgZ2l0IGFkZCAiRyBnL3dpdGggc3BhY2VzLnR4dCIgJiYgXAorICAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvdGVzdC1iaW5hcnktMS5wbmcgIkcgZy93aXRoIHNwYWNlcy5wbmciICYmIFwKKyAgICAgIGdpdCBhZGQgIkcgZy93aXRoIHNwYWNlcy5wbmciICYmCisgICAgICBnaXQgY29tbWl0IC1hIC1tICJXaXRoIHNwYWNlcyIgJiYKKyAgICAgIGlkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCkgJiYKKyAgICAgIChjZCAiJENWU1dPUksiICYmCisgICAgICBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1jICRpZCAmJgorICAgICAgY2hlY2tfZW50cmllcyAiRyBnIiAid2l0aCBzcGFjZXMucG5nLzEuMS8ta2J8d2l0aCBzcGFjZXMudHh0LzEuMS8iCisgICAgICApJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgJ1VwZGF0ZSBmaWxlIHdpdGggc3BhY2VzIGluIGZpbGUgbmFtZScgXAorICAgICAnZWNobyBPayB0aGVuID4+IkcgZy93aXRoIHNwYWNlcy50eHQiICYmCisgICAgICBjYXQgIiRURVNUX0RJUkVDVE9SWSIvdGVzdC1iaW5hcnktMS5wbmcgPj4iRyBnL3dpdGggc3BhY2VzLnBuZyIgJiYgXAorICAgICAgZ2l0IGFkZCAiRyBnL3dpdGggc3BhY2VzLnBuZyIgJiYKKyAgICAgIGdpdCBjb21taXQgLWEgLW0gIlVwZGF0ZSB3aXRoIHNwYWNlcyIgJiYKKyAgICAgIGlkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCkgJiYKKyAgICAgIChjZCAiJENWU1dPUksiICYmCisgICAgICBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1jICRpZCAmJgorICAgICAgY2hlY2tfZW50cmllcyAiRyBnIiAid2l0aCBzcGFjZXMucG5nLzEuMi8ta2J8d2l0aCBzcGFjZXMudHh0LzEuMi8iCisgICAgICApJworCisjIFNvbWUgZmlsZXN5c3RlbXMgbWFuZ2xlIHBhdGhuYW1lcyB3aXRoIFVURi04IGNoYXJhY3RlcnMgLS0KKyMgY2hlY2sgYW5kIHNraXAKK2lmIHA9IsOFL2dvby9hL2IvYy9kL2UvZi9nL2gvaS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95L3ovw6Uvw6Qvw7YiICYmCisJbWtkaXIgLXAgInRzdC8kcCIgJiYKKwlkYXRlID4idHN0LyRwL2RheSIgJiYKKwlmb3VuZD0kKGZpbmQgdHN0IC10eXBlIGYgLXByaW50KSAmJgorCXRlc3QgInokZm91bmQiID0gInp0c3QvJHAvZGF5IiAmJgorCXJtIC1mciB0c3QKK3RoZW4KKworIyBUaGlzIHRlc3QgY29udGFpbnMgVVRGLTggY2hhcmFjdGVycwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgXAorICAgICAnRmlsZSB3aXRoIG5vbi1hc2NpaSBmaWxlIG5hbWUnIFwKKyAgICAgJ21rZGlyIC1wIMOFL2dvby9hL2IvYy9kL2UvZi9nL2gvaS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95L3ovw6Uvw6Qvw7YgJiYKKyAgICAgIGVjaG8gRm9vID7DhS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L8OlL8OkL8O2L2fDpXJkZXRzw6Vnw6VyZGV0LnR4dCAmJgorICAgICAgZ2l0IGFkZCDDhS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L8OlL8OkL8O2L2fDpXJkZXRzw6Vnw6VyZGV0LnR4dCAmJgorICAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvdGVzdC1iaW5hcnktMS5wbmcgw4UvZ29vL2EvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy94L3kvei/DpS/DpC/Dti9nw6VyZGV0c8OlZ8OlcmRldC5wbmcgJiYKKyAgICAgIGdpdCBhZGQgw4UvZ29vL2EvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy94L3kvei/DpS/DpC/Dti9nw6VyZGV0c8OlZ8OlcmRldC5wbmcgJiYKKyAgICAgIGdpdCBjb21taXQgLWEgLW0gIkfDpXIgZGV0IHPDpSBnw6VyIGRldCIgJiYgXAorICAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgIGdpdCBjdnNleHBvcnRjb21taXQgLXYgLWMgJGlkICYmCisgICAgICBjaGVja19lbnRyaWVzIFwKKyAgICAgICLDhS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L8OlL8OkL8O2IiBcCisgICAgICAiZ8OlcmRldHPDpWfDpXJkZXQucG5nLzEuMS8ta2J8Z8OlcmRldHPDpWfDpXJkZXQudHh0LzEuMS8iCisgICAgICApJworCitmaQorCitybSAtZnIgdHN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAnTWlzbWF0Y2hpbmcgcGF0Y2ggc2hvdWxkIGZhaWwnIFwKKyAgICAgJ2RhdGUgPj4iRS9uZXdmaWxlNS50eHQiICYmCisgICAgICBnaXQgYWRkICJFL25ld2ZpbGU1LnR4dCIgJiYKKyAgICAgIGdpdCBjb21taXQgLWEgLW0gIlVwZGF0ZSBvbmUiICYmCisgICAgICBkYXRlID4+IkUvbmV3ZmlsZTUudHh0IiAmJgorICAgICAgZ2l0IGFkZCAiRS9uZXdmaWxlNS50eHQiICYmCisgICAgICBnaXQgY29tbWl0IC1hIC1tICJVcGRhdGUgdHdvIiAmJgorICAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjdnNleHBvcnRjb21taXQgLWMgJGlkCisgICAgICApJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFIFwKKyAgICAgJ1JldGFpbiBleGVjdXRlIGJpdCcgXAorICAgICAnbWtkaXIgRyAmJgorICAgICAgZWNobyBleGVjdXRlb24gPkcvb24gJiYKKyAgICAgIGNobW9kICt4IEcvb24gJiYKKyAgICAgIGVjaG8gZXhlY3V0ZW9mZiA+Ry9vZmYgJiYKKyAgICAgIGdpdCBhZGQgRy9vbiAmJgorICAgICAgZ2l0IGFkZCBHL29mZiAmJgorICAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiRXhlY3V0ZSB0ZXN0IiAmJgorICAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgIGdpdCBjdnNleHBvcnRjb21taXQgLWMgSEVBRCAmJgorICAgICAgdGVzdCAteCBHL29uICYmCisgICAgICAhIHRlc3QgLXggRy9vZmYKKyAgICAgICknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy13IG9wdGlvbiBzaG91bGQgd29yayB3aXRoIHJlbGF0aXZlIEdJVF9ESVInICcKKyAgICAgIG1rZGlyIFcgJiYKKyAgICAgIGVjaG8gZm9vYmFyID5XL2ZpbGUxLnR4dCAmJgorICAgICAgZWNobyBiYXp6bGUgPlcvZmlsZTIudHh0ICYmCisgICAgICBnaXQgYWRkIFcvZmlsZTEudHh0ICYmCisgICAgICBnaXQgYWRkIFcvZmlsZTIudHh0ICYmCisgICAgICBnaXQgY29tbWl0IC1tICJNb3JlIHVwZGF0ZXMiICYmCisgICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisgICAgICAoY2QgIiRHSVRfRElSIiAmJgorICAgICAgR0lUX0RJUj0uIGdpdCBjdnNleHBvcnRjb21taXQgLXcgIiRDVlNXT1JLIiAtYyAkaWQgJiYKKyAgICAgIGNoZWNrX2VudHJpZXMgIiRDVlNXT1JLL1ciICJmaWxlMS50eHQvMS4xL3xmaWxlMi50eHQvMS4xLyIgJiYKKyAgICAgIHRlc3RfY21wICIkQ1ZTV09SSy9XL2ZpbGUxLnR4dCIgLi4vVy9maWxlMS50eHQgJiYKKyAgICAgIHRlc3RfY21wICIkQ1ZTV09SSy9XL2ZpbGUyLnR4dCIgLi4vVy9maWxlMi50eHQKKyAgICAgICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZmlsZXMgYmVmb3JlIGRpcmVjdG9yaWVzJyAnCisKKwllY2hvIE5vdGVzID4gcmVsZWFzZS1ub3RlcyAmJgorCWdpdCBhZGQgcmVsZWFzZS1ub3RlcyAmJgorCWdpdCBjb21taXQgLW0gIkFkZCByZWxlYXNlIG5vdGVzIiByZWxlYXNlLW5vdGVzICYmCisJaWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdyAiJENWU1dPUksiIC1jICRpZCAmJgorCisJZWNobyBuZXcgPiBEUyAmJgorCWVjaG8gbmV3ID4gRS9EUyAmJgorCWVjaG8gbW9kaWZpZWQgPiByZWxlYXNlLW5vdGVzICYmCisJZ2l0IGFkZCBEUyBFL0RTIHJlbGVhc2Utbm90ZXMgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgdHdvIGZpbGVzIHdpdGggdGhlIHNhbWUgYmFzZW5hbWUiICYmCisJaWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdyAiJENWU1dPUksiIC1jICRpZCAmJgorCWNoZWNrX2VudHJpZXMgIiRDVlNXT1JLL0UiICJEUy8xLjEvfG5ld2ZpbGU1LnR4dC8xLjEvIiAmJgorCWNoZWNrX2VudHJpZXMgIiRDVlNXT1JLIiAiRFMvMS4xL3xyZWxlYXNlLW5vdGVzLzEuMi8iICYmCisJdGVzdF9jbXAgIiRDVlNXT1JLL0RTIiBEUyAmJgorCXRlc3RfY21wICIkQ1ZTV09SSy9FL0RTIiBFL0RTICYmCisJdGVzdF9jbXAgIiRDVlNXT1JLL3JlbGVhc2Utbm90ZXMiIHJlbGVhc2Utbm90ZXMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1jb21taXQgYSByZW1vdmVkIGZpbGVuYW1lIHdoaWNoIHJlbWFpbnMgaW4gQ1ZTIGF0dGljJyAnCisKKyAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICBlY2hvID5hdHRpY19ncmVtbGluICYmCisgICAgIGN2cyAtUSBhZGQgYXR0aWNfZ3JlbWxpbiAmJgorICAgICBjdnMgLVEgY2kgLW0gImFkZGVkIGF0dGljX2dyZW1saW4iICYmCisgICAgIHJtIGF0dGljX2dyZW1saW4gJiYKKyAgICAgY3ZzIC1RIHJtIGF0dGljX2dyZW1saW4gJiYKKyAgICAgY3ZzIC1RIGNpIC1tICJyZW1vdmVkIGF0dGljX2dyZW1saW4iKSAmJgorCisgICAgZWNobyA+IGF0dGljX2dyZW1saW4gJiYKKyAgICBnaXQgYWRkIGF0dGljX2dyZW1saW4gJiYKKyAgICBnaXQgY29tbWl0IC1tICJBZGRlZCBhdHRpY19ncmVtbGluIiAmJgorCWdpdCBjdnNleHBvcnRjb21taXQgLXcgIiRDVlNXT1JLIiAtYyBIRUFEICYmCisgICAgKGNkICIkQ1ZTV09SSyIgJiYgY3ZzIC1RIHVwZGF0ZSAtZCkgJiYKKyAgICB0ZXN0IC1mICIkQ1ZTV09SSy9hdHRpY19ncmVtbGluIgorJworCisjIHRoZSBzdGF0ZSBvZiB0aGUgQ1ZTIHNhbmRib3ggbWF5IGJlIGluZGV0ZXJtaW5hdGUgZm9yICcgc3BhY2UnCisjIGFmdGVyIHRoaXMgdGVzdCBvbiBzb21lIHBsYXRmb3JtcyAvIHdpdGggc29tZSB2ZXJzaW9ucyBvZiBDVlMKKyMgY29uc2lkZXIgYWRkaW5nIG5ldyB0ZXN0cyBhYm92ZSB0aGlzIHBvaW50Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgYSBmaWxlIHdpdGggbGVhZGluZyBzcGFjZXMgaW4gdGhlIG5hbWUnICcKKworCWVjaG8gc3BhY2UgPiAiIHNwYWNlIiAmJgorCWdpdCBhZGQgIiBzcGFjZSIgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgYSBmaWxlIHdpdGggYSBsZWFkaW5nIHNwYWNlIiAmJgorCWlkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBjdnNleHBvcnRjb21taXQgLXcgIiRDVlNXT1JLIiAtYyAkaWQgJiYKKwljaGVja19lbnRyaWVzICIkQ1ZTV09SSyIgIiBzcGFjZS8xLjEvfERTLzEuMS98YXR0aWNfZ3JlbWxpbi8xLjMvfHJlbGVhc2Utbm90ZXMvMS4yLyIgJiYKKwl0ZXN0X2NtcCAiJENWU1dPUksvIHNwYWNlIiAiIHNwYWNlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSB0aGUgc2FtZSBjaGVja291dCBmb3IgR2l0IGFuZCBDVlMnICcKKworCShta2RpciBzaGFyZWQgJiYKKwkgY2Qgc2hhcmVkICYmCisJIHNhbmVfdW5zZXQgR0lUX0RJUiAmJgorCSBjdnMgY28gLiAmJgorCSBnaXQgaW5pdCAmJgorCSBnaXQgYWRkICIgc3BhY2UiICYmCisJIGdpdCBjb21taXQgLW0gImZha2UgaW5pdGlhbCBjb21taXQiICYmCisJIGVjaG8gSGVsbG8gPj4gIiBzcGFjZSIgJiYKKwkgZ2l0IGNvbW1pdCAtbSAiQW5vdGhlciBjaGFuZ2UiICIgc3BhY2UiICYmCisJIGdpdCBjdnNleHBvcnRjb21taXQgLVcgLXAgLXUgLWMgSEVBRCAmJgorCSBncmVwIEhlbGxvICIgc3BhY2UiICYmCisJIGdpdCBkaWZmLWZpbGVzKQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTMwMC1mYXN0LWltcG9ydC5zaCBiL3QvdDkzMDAtZmFzdC1pbXBvcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzY4MjU3YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkzMDAtZmFzdC1pbXBvcnQuc2gKQEAgLTAsMCArMSwzNDkzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IFNoYXduIFBlYXJjZQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCBmYXN0LWltcG9ydCB1dGlsaXR5JworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoIDsjIHRlc3QtbGliIGNoZGlyJ3MgaW50byB0cmFzaAorCit2ZXJpZnlfcGFja3MgKCkgeworCWZvciBwIGluIC5naXQvb2JqZWN0cy9wYWNrLyoucGFjaworCWRvCisJCWdpdCB2ZXJpZnktcGFjayAiJEAiICIkcCIgfHwgcmV0dXJuCisJZG9uZQorfQorCitmaWxlMl9kYXRhPSdmaWxlMgorc2Vjb25kIGxpbmUgb2YgRU9GJworCitmaWxlM19kYXRhPSdFT0YKK2luIDNyZCBmaWxlCisgRU5EJworCitmaWxlNF9kYXRhPWFiY2QKK2ZpbGU0X2xlbj00CisKK2ZpbGU1X2RhdGE9J2FuIGlubGluZSBmaWxlLgorICB3ZSBzaG91bGQgc2VlIGl0IGxhdGVyLicKKworZmlsZTZfZGF0YT0nIyEvYmluL3NoCitlY2hvICIkQCInCisKKyMjIworIyMjIHNlcmllcyBBCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgc3RyZWFtIHN1Y2NlZWRzJyAnCisJZ2l0IGNvbmZpZyBmYXN0aW1wb3J0LnVucGFja0xpbWl0IDAgJiYKKwlnaXQgZmFzdC1pbXBvcnQgPC9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cnVuY2F0ZWQgc3RyZWFtIGNvbXBsYWlucycgJworCWVjaG8gInRhZyBmb28iIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IGNyZWF0ZSBwYWNrIGZyb20gc3RkaW4nICcKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWJsb2IKKwltYXJrIDoyCisJZGF0YSA8PEVPRgorCSRmaWxlMl9kYXRhCisJRU9GCisKKwlibG9iCisJbWFyayA6MworCWRhdGEgPDxFTkQKKwkkZmlsZTNfZGF0YQorCUVORAorCisJYmxvYgorCW1hcmsgOjQKKwlkYXRhICRmaWxlNF9sZW4KKwkkZmlsZTRfZGF0YQorCWNvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorCW1hcmsgOjUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJaW5pdGlhbAorCUNPTU1JVAorCisJTSA2NDQgOjIgZmlsZTIKKwlNIDY0NCA6MyBmaWxlMworCU0gNzU1IDo0IGZpbGU0CisKKwl0YWcgc2VyaWVzLUEKKwlmcm9tIDo1CisJZGF0YSA8PEVPRgorCUFuIGFubm90YXRlZCB0YWcgd2l0aG91dCBhIHRhZ2dlcgorCUVPRgorCisJdGFnIHNlcmllcy1BLWJsb2IKKwlmcm9tIDozCisJZGF0YSA8PEVPRgorCUFuIGFubm90YXRlZCB0YWcgdGhhdCBhbm5vdGF0ZXMgYSBibG9iLgorCUVPRgorCisJdGFnIHRvLWJlLWRlbGV0ZWQKKwlmcm9tIDozCisJZGF0YSA8PEVPRgorCUFub3RoZXIgYW5ub3RhdGVkIHRhZyB0aGF0IGFubm90YXRlcyBhIGJsb2IuCisJRU9GCisKKwlyZXNldCByZWZzL3RhZ3MvdG8tYmUtZGVsZXRlZAorCWZyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCisJdGFnIG5lc3RlZAorCW1hcmsgOjYKKwlmcm9tIDo0CisJZGF0YSA8PEVPRgorCVRhZyBvZiBvdXIgbG92ZWx5IGNvbW1pdAorCUVPRgorCisJcmVzZXQgcmVmcy90YWdzL25lc3RlZAorCWZyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCisJdGFnIG5lc3RlZAorCW1hcmsgOjcKKwlmcm9tIDo2CisJZGF0YSA8PEVPRgorCVRhZyBvZiB0YWcgb2Ygb3VyIGxvdmVseSBjb21taXQKKwlFT0YKKworCWFsaWFzCisJbWFyayA6OAorCXRvIDo1CisKKwlJTlBVVF9FTkQKKwlnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9bWFya3Mub3V0IDxpbnB1dCAmJgorCWdpdCB3aGF0Y2hhbmdlZCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQTogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQTogdmVyaWZ5IGNvbW1pdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWF1dGhvciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCisJaW5pdGlhbAorCUVPRgorCWdpdCBjYXQtZmlsZSBjb21taXQgbWFzdGVyIHwgc2VkIDFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IHZlcmlmeSB0cmVlJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJMTAwNjQ0IGJsb2IgZmlsZTIKKwkxMDA2NDQgYmxvYiBmaWxlMworCTEwMDc1NSBibG9iIGZpbGU0CisJRU9GCisJZ2l0IGNhdC1maWxlIC1wIG1hc3Rlcl57dHJlZX0gfCBzZWQgInMvIFswLTlhLWZdKgkvIC8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IHZlcmlmeSBmaWxlMicgJworCWVjaG8gIiRmaWxlMl9kYXRhIiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyOmZpbGUyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IHZlcmlmeSBmaWxlMycgJworCWVjaG8gIiRmaWxlM19kYXRhIiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyOmZpbGUzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IHZlcmlmeSBmaWxlNCcgJworCXByaW50ZiAiJGZpbGU0X2RhdGEiID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBtYXN0ZXI6ZmlsZTQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQTogdmVyaWZ5IHRhZy9zZXJpZXMtQScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCW9iamVjdCAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIpCisJdHlwZSBjb21taXQKKwl0YWcgc2VyaWVzLUEKKworCUFuIGFubm90YXRlZCB0YWcgd2l0aG91dCBhIHRhZ2dlcgorCUVPRgorCWdpdCBjYXQtZmlsZSB0YWcgdGFncy9zZXJpZXMtQSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgdGFnL3Nlcmllcy1BLWJsb2InICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlvYmplY3QgJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyOmZpbGUzKQorCXR5cGUgYmxvYgorCXRhZyBzZXJpZXMtQS1ibG9iCisKKwlBbiBhbm5vdGF0ZWQgdGFnIHRoYXQgYW5ub3RhdGVzIGEgYmxvYi4KKwlFT0YKKwlnaXQgY2F0LWZpbGUgdGFnIHRhZ3Mvc2VyaWVzLUEtYmxvYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgdGFnIGRlbGV0aW9uIGlzIHN1Y2Nlc3NmdWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvdGFncy90by1iZS1kZWxldGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IHZlcmlmeSBtYXJrcyBvdXRwdXQnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MiAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyOmZpbGUyKQorCTozICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXI6ZmlsZTMpCisJOjQgJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcjpmaWxlNCkKKwk6NSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyXjApCisJOjYgJChnaXQgY2F0LWZpbGUgdGFnIG5lc3RlZCB8IGdyZXAgb2JqZWN0IHwgY3V0IC1kIiAiIC1mIDIpCisJOjcgJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG5lc3RlZCkKKwk6OCAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyXjApCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IG1hcmtzLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgbWFya3MgaW1wb3J0JyAnCisJZ2l0IGZhc3QtaW1wb3J0IFwKKwkJLS1pbXBvcnQtbWFya3M9bWFya3Mub3V0IFwKKwkJLS1leHBvcnQtbWFya3M9bWFya3MubmV3IFwKKwkJPC9kZXYvbnVsbCAmJgorCXRlc3RfY21wIGV4cGVjdCBtYXJrcy5uZXcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQTogdGFnIGJsb2IgYnkgc2hhMScgJworCXRlc3RfdGljayAmJgorCW5ld19ibG9iPSQoZWNobyB0ZXN0aW5nIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwl0YWcgc2VyaWVzLUEtYmxvYi0yCisJZnJvbSAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXI6ZmlsZTMpCisJZGF0YSA8PEVPRgorCVRhZyBibG9iIGJ5IHNoYTEuCisJRU9GCisKKwlibG9iCisJbWFyayA6NgorCWRhdGEgPDxFT0YKKwl0ZXN0aW5nCisJRU9GCisKKwljb21taXQgcmVmcy9oZWFkcy9uZXdfYmxvYgorCWNvbW1pdHRlciAgPD4gMCArMDAwMAorCWRhdGEgMAorCU0gNjQ0IDo2IG5ld19ibG9iCisJI3ByZXRlbmQgd2UgZ290IHNoYTEgZnJvbSBmYXN0LWltcG9ydAorCWxzICJuZXdfYmxvYiIKKworCXRhZyBzZXJpZXMtQS1ibG9iLTMKKwlmcm9tICRuZXdfYmxvYgorCWRhdGEgPDxFT0YKKwlUYWcgbmV3X2Jsb2IuCisJRU9GCisJSU5QVVRfRU5ECisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlvYmplY3QgJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyOmZpbGUzKQorCXR5cGUgYmxvYgorCXRhZyBzZXJpZXMtQS1ibG9iLTIKKworCVRhZyBibG9iIGJ5IHNoYTEuCisJb2JqZWN0ICRuZXdfYmxvYgorCXR5cGUgYmxvYgorCXRhZyBzZXJpZXMtQS1ibG9iLTMKKworCVRhZyBuZXdfYmxvYi4KKwlFT0YKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIHRhZ3Mvc2VyaWVzLUEtYmxvYi0yID5hY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIHRhZ3Mvc2VyaWVzLUEtYmxvYi0zID4+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgbWFya3MgaW1wb3J0IGRvZXMgbm90IGNyYXNoJyAnCisJdGVzdF90aWNrICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy92ZXJpZnktLWltcG9ydC1tYXJrcworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlyZWNyZWF0ZSBmcm9tIDo1CisJQ09NTUlUCisKKwlmcm9tIDo1CisJTSA3NTUgOjIgY29weS1vZi1maWxlMgorCisJSU5QVVRfRU5ECisKKwlnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3Mub3V0IDxpbnB1dCAmJgorCWdpdCB3aGF0Y2hhbmdlZCB2ZXJpZnktLWltcG9ydC1tYXJrcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgcGFjaycgJworCXZlcmlmeV9wYWNrcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgZGlmZicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTowMDAwMDAgMTAwNzU1IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSBBCWNvcHktb2YtZmlsZTIKKwlFT0YKKwlnaXQgZGlmZi10cmVlIC1NIC1yIG1hc3RlciB2ZXJpZnktLWltcG9ydC1tYXJrcyA+YWN0dWFsICYmCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyOmZpbGUyKSBcCisJICAgID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHZlcmlmeS0taW1wb3J0LW1hcmtzOmNvcHktb2YtZmlsZTIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IGV4cG9ydCBtYXJrcyB3aXRoIGxhcmdlIHZhbHVlcycgJworCXRlc3RfdGljayAmJgorCW10PSQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPCAvZGV2L251bGwpICYmCisJPmlucHV0LmJsb2IgJiYKKwk+bWFya3MuZXhwICYmCisJPnRyZWUuZXhwICYmCisKKwljYXQgPmlucHV0LmNvbW1pdCA8PC1FT0YgJiYKKwljb21taXQgcmVmcy9oZWFkcy92ZXJpZnktLWR1bXAtbWFya3MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJdGVzdCB0aGUgc3BhcnNlIGFycmF5IGR1bXBpbmcgcm91dGluZXMgd2l0aCBleHBvbmVudGlhbGx5IGdyb3dpbmcgbWFya3MKKwlDT01NSVQKKwlFT0YKKworCWk9MCBsPTQgbT02IG49NyAmJgorCXdoaWxlIHRlc3QgIiRpIiAtbHQgMjcKKwlkbworCQljYXQgPj5pbnB1dC5ibG9iIDw8LUVPRiAmJgorCQlibG9iCisJCW1hcmsgOiRsCisJCWRhdGEgMAorCQlibG9iCisJCW1hcmsgOiRtCisJCWRhdGEgMAorCQlibG9iCisJCW1hcmsgOiRuCisJCWRhdGEgMAorCQlFT0YKKwkJZWNobyAiTSAxMDA2NDQgOiRsIGwkaSIgPj5pbnB1dC5jb21taXQgJiYKKwkJZWNobyAiTSAxMDA2NDQgOiRtIG0kaSIgPj5pbnB1dC5jb21taXQgJiYKKwkJZWNobyAiTSAxMDA2NDQgOiRuIG4kaSIgPj5pbnB1dC5jb21taXQgJiYKKworCQllY2hvICI6JGwgJG10IiA+Pm1hcmtzLmV4cCAmJgorCQllY2hvICI6JG0gJG10IiA+Pm1hcmtzLmV4cCAmJgorCQllY2hvICI6JG4gJG10IiA+Pm1hcmtzLmV4cCAmJgorCisJCXByaW50ZiAiMTAwNjQ0IGJsb2IgJG10XHRsJGlcbiIgPj50cmVlLmV4cCAmJgorCQlwcmludGYgIjEwMDY0NCBibG9iICRtdFx0bSRpXG4iID4+dHJlZS5leHAgJiYKKwkJcHJpbnRmICIxMDA2NDQgYmxvYiAkbXRcdG4kaVxuIiA+PnRyZWUuZXhwICYmCisKKwkJbD0kKCgkbCArICRsKSkgJiYKKwkJbT0kKCgkbSArICRtKSkgJiYKKwkJbj0kKCgkbCArICRuKSkgJiYKKworCQlpPSQoKDEgKyAkaSkpIHx8IHJldHVybiAxCisJZG9uZSAmJgorCisJc29ydCB0cmVlLmV4cCA+IHRyZWUuZXhwX3MgJiYKKworCWNhdCBpbnB1dC5ibG9iIGlucHV0LmNvbW1pdCB8IGdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1tYXJrcy5sYXJnZSAmJgorCWdpdCBscy10cmVlIHJlZnMvaGVhZHMvdmVyaWZ5LS1kdW1wLW1hcmtzID50cmVlLm91dCAmJgorCXRlc3RfY21wIHRyZWUuZXhwX3MgdHJlZS5vdXQgJiYKKwl0ZXN0X2NtcCBtYXJrcy5leHAgbWFya3MubGFyZ2UKKycKKworIyMjCisjIyMgc2VyaWVzIEIKKyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBmYWlsIG9uIGludmFsaWQgYmxvYiBzaGExJyAnCisJdGVzdF90aWNrICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9icmFuY2gKKwltYXJrIDoxCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcnJ1cHQKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9tYXN0ZXIKKwlNIDc1NSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIHplcm8xCisKKwlJTlBVVF9FTkQKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9vYmplY3RzL3BhY2tfKiAuZ2l0L29iamVjdHMvaW5kZXhfKiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0I6IGFjY2VwdCBicmFuY2ggbmFtZSAiVEVNUF9UQUciJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgVEVNUF9UQUcKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJdGFnIGJhc2UKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9tYXN0ZXIKKworCUlOUFVUX0VORAorCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L1RFTVBfVEFHCisJCWdpdCBnYworCQlnaXQgcHJ1bmUiICYmCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCXRlc3QgLWYgLmdpdC9URU1QX1RBRyAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgPSAkKGdpdCByZXYtcGFyc2UgVEVNUF9UQUdeKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBhY2NlcHQgZW1wdHkgY29tbWl0dGVyJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9lbXB0eS1jb21taXR0ZXItMQorCWNvbW1pdHRlciAgPD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwllbXB0eSBjb21taXQKKwlDT01NSVQKKwlJTlBVVF9FTkQKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9lbXB0eS1jb21taXR0ZXItMQorCQlnaXQgZ2MKKwkJZ2l0IHBydW5lIiAmJgorCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlvdXQ9JChnaXQgZnNjaykgJiYKKwllY2hvICIkb3V0IiAmJgorCXRlc3QgLXogIiRvdXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0I6IGFjY2VwdCBhbmQgZml4dXAgY29tbWl0dGVyIHdpdGggbm8gbmFtZScgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvZW1wdHktY29tbWl0dGVyLTIKKwljb21taXR0ZXIgPGFAYi5jb20+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJZW1wdHkgY29tbWl0CisJQ09NTUlUCisJSU5QVVRfRU5ECisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvZW1wdHktY29tbWl0dGVyLTIKKwkJZ2l0IGdjCisJCWdpdCBwcnVuZSIgJiYKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJb3V0PSQoZ2l0IGZzY2spICYmCisJZWNobyAiJG91dCIgJiYKKwl0ZXN0IC16ICIkb3V0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBmYWlsIG9uIGludmFsaWQgY29tbWl0dGVyICgxKScgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIKKwljb21taXR0ZXIgTmFtZSBlbWFpbD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwllbXB0eSBjb21taXQKKwlDT01NSVQKKwlJTlBVVF9FTkQKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9pbnZhbGlkLWNvbW1pdHRlciIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0I6IGZhaWwgb24gaW52YWxpZCBjb21taXR0ZXIgKDIpJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9pbnZhbGlkLWNvbW1pdHRlcgorCWNvbW1pdHRlciBOYW1lIDxlPG1haWw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJZW1wdHkgY29tbWl0CisJQ09NTUlUCisJSU5QVVRfRU5ECisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBmYWlsIG9uIGludmFsaWQgY29tbWl0dGVyICgzKScgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIKKwljb21taXR0ZXIgTmFtZSA8ZW1haWw+PiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWVtcHR5IGNvbW1pdAorCUNPTU1JVAorCUlOUFVUX0VORAorCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQjogZmFpbCBvbiBpbnZhbGlkIGNvbW1pdHRlciAoNCknICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyCisJY29tbWl0dGVyIE5hbWUgPGVtYWlsICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJZW1wdHkgY29tbWl0CisJQ09NTUlUCisJSU5QVVRfRU5ECisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBmYWlsIG9uIGludmFsaWQgY29tbWl0dGVyICg1KScgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIKKwljb21taXR0ZXIgTmFtZTxlbWFpbD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwllbXB0eSBjb21taXQKKwlDT01NSVQKKwlJTlBVVF9FTkQKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9pbnZhbGlkLWNvbW1pdHRlciIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKKyMjIworIyMjIHNlcmllcyBDCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQzogaW5jcmVtZW50YWwgaW1wb3J0IGNyZWF0ZSBwYWNrIGZyb20gc3RkaW4nICcKKwluZXdmPSQoZWNobyBoaSBuZXdmIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJb2xkZj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyOmZpbGUyKSAmJgorCXRlc3RfdGljayAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvYnJhbmNoCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXNlY29uZAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL21hc3RlcgorCU0gNjQ0ICRvbGRmIGZpbGUyL29sZGYKKwlNIDc1NSAkbmV3ZiBmaWxlMi9uZXdmCisJRCBmaWxlMworCisJSU5QVVRfRU5ECisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IHdoYXRjaGFuZ2VkIGJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDOiB2ZXJpZnkgcGFjaycgJworCXZlcmlmeV9wYWNrcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDOiB2YWxpZGF0ZSByZXVzZSBleGlzdGluZyBibG9iJyAnCisJdGVzdCAkbmV3ZiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBicmFuY2g6ZmlsZTIvbmV3ZikgJiYKKwl0ZXN0ICRvbGRmID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJyYW5jaDpmaWxlMi9vbGRmKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDOiB2ZXJpZnkgY29tbWl0JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJcGFyZW50ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJeMCkKKwlhdXRob3IgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworCXNlY29uZAorCUVPRgorCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBicmFuY2ggfCBzZWQgMWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQzogdmFsaWRhdGUgcmVuYW1lIHJlc3VsdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTowMDAwMDAgMTAwNzU1IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBBCWZpbGUyL25ld2YKKwk6MTAwNjQ0IDEwMDY0NCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgUjEwMAlmaWxlMglmaWxlMi9vbGRmCisJOjEwMDY0NCAwMDAwMDAgMGQ5MmU5ZjMzNzRhZTI5NDdjMjNhYTQ3N2NiYzY4Y2U1OTgxMzVmMSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJZmlsZTMKKwlFT0YKKwlnaXQgZGlmZi10cmVlIC1NIC1yIG1hc3RlciBicmFuY2ggPmFjdHVhbCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbAorJworCisjIyMKKyMjIyBzZXJpZXMgRAorIyMjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Q6IGlubGluZSBkYXRhIGluIGNvbW1pdCcgJworCXRlc3RfdGljayAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvYnJhbmNoCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXRoaXJkCisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlNIDY0NCBpbmxpbmUgbmV3ZGlyL2ludGVyZXN0aW5nCisJZGF0YSA8PEVPRgorCSRmaWxlNV9kYXRhCisJRU9GCisKKwlNIDc1NSBpbmxpbmUgbmV3ZGlyL2V4ZWMuc2gKKwlkYXRhIDw8RU9GCisJJGZpbGU2X2RhdGEKKwlFT0YKKworCUlOUFVUX0VORAorCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCB3aGF0Y2hhbmdlZCBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRDogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRDogdmFsaWRhdGUgbmV3IGZpbGVzIGFkZGVkJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjAwMDAwMCAxMDA3NTUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBlNzRiN2Q0NjVlNTI3NDZiZTJiNGJhZTk4MzY3MDcxMWU2ZTY2NjU3IEEJbmV3ZGlyL2V4ZWMuc2gKKwk6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGZjZjc3OGNkYTE4MWVhYTFjYmM5ZTljZTNhMmUxNWVlOWY5ZmU3OTEgQQluZXdkaXIvaW50ZXJlc3RpbmcKKwlFT0YKKwlnaXQgZGlmZi10cmVlIC1NIC1yIGJyYW5jaF4gYnJhbmNoID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRDogdmVyaWZ5IGZpbGU1JyAnCisJZWNobyAiJGZpbGU1X2RhdGEiID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBicmFuY2g6bmV3ZGlyL2ludGVyZXN0aW5nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Q6IHZlcmlmeSBmaWxlNicgJworCWVjaG8gIiRmaWxlNl9kYXRhIiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgYnJhbmNoOm5ld2Rpci9leGVjLnNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMjIworIyMjIHNlcmllcyBFCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRTogcmZjMjgyMiBkYXRlLCAtLWRhdGUtZm9ybWF0PXJhdycgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvYnJhbmNoCisJYXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiBUdWUgRmViIDYgMTE6MjI6MTggMjAwNyAtMDUwMAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gVHVlIEZlYiA2IDEyOjM1OjAyIDIwMDcgLTA1MDAKKwlkYXRhIDw8Q09NTUlUCisJUkZDIDI4MjIgdHlwZSBkYXRlCisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKworCUlOUFVUX0VORAorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0tZGF0ZS1mb3JtYXQ9cmF3IDxpbnB1dAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRTogcmZjMjgyMiBkYXRlLCAtLWRhdGUtZm9ybWF0PXJmYzI4MjInICcKKwlnaXQgZmFzdC1pbXBvcnQgLS1kYXRlLWZvcm1hdD1yZmMyODIyIDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdFOiB2ZXJpZnkgcGFjaycgJworCXZlcmlmeV9wYWNrcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdFOiB2ZXJpZnkgY29tbWl0JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJYXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiAxMTcwNzc4OTM4IC0wNTAwCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTcwNzgzMzAyIC0wNTAwCisKKwlSRkMgMjgyMiB0eXBlIGRhdGUKKwlFT0YKKwlnaXQgY2F0LWZpbGUgY29tbWl0IGJyYW5jaCB8IHNlZCAxLDJkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMjIworIyMjIHNlcmllcyBGCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRjogbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGUgc2tpcHMnICcKKwlvbGRfYnJhbmNoPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBicmFuY2heMCkgJiYKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL2JyYW5jaAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlsb3NpbmcgdGhpbmdzIGFscmVhZHk/CisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNofjEKKworCXJlc2V0IHJlZnMvaGVhZHMvb3RoZXIKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoCisKKwlJTlBVVF9FTkQKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwkjIGJyYW5jaCBtdXN0IHJlbWFpbiB1bmFmZmVjdGVkCisJdGVzdCAkb2xkX2JyYW5jaCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBicmFuY2heMCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRjogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRjogdmVyaWZ5IG90aGVyIGNvbW1pdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCXRyZWUgJChnaXQgcmV2LXBhcnNlIGJyYW5jaH4xXnt0cmVlfSkKKwlwYXJlbnQgJChnaXQgcmV2LXBhcnNlIGJyYW5jaH4xKQorCWF1dGhvciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCisJbG9zaW5nIHRoaW5ncyBhbHJlYWR5PworCUVPRgorCWdpdCBjYXQtZmlsZSBjb21taXQgb3RoZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyMjCisjIyMgc2VyaWVzIEcKKyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHOiBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZSBmb3JjZWQnICcKKwlvbGRfYnJhbmNoPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBicmFuY2heMCkgJiYKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL2JyYW5jaAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlsb3NpbmcgdGhpbmdzIGFscmVhZHk/CisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNofjEKKworCUlOUFVUX0VORAorCWdpdCBmYXN0LWltcG9ydCAtLWZvcmNlIDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHOiB2ZXJpZnkgcGFjaycgJworCXZlcmlmeV9wYWNrcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHOiBicmFuY2ggY2hhbmdlZCwgYnV0IGxvZ2dlZCcgJworCXRlc3QgJG9sZF9icmFuY2ggIT0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJyYW5jaF4wKSAmJgorCXRlc3QgJG9sZF9icmFuY2ggPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYnJhbmNoQHsxfSkKKycKKworIyMjCisjIyMgc2VyaWVzIEgKKyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIOiBkZWxldGFsbCwgYWRkIDEnICcKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL0gKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJdGhpcmQKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9icmFuY2heMAorCU0gNjQ0IGlubGluZSBpLXdpbGwtZGllCisJZGF0YSA8PEVPRgorCXRoaXMgZmlsZSB3aWxsIG5ldmVyIGV4aXN0LgorCUVPRgorCisJZGVsZXRlYWxsCisJTSA2NDQgaW5saW5lIGgvZS9sL2xvCisJZGF0YSA8PEVPRgorCSRmaWxlNV9kYXRhCisJRU9GCisKKwlJTlBVVF9FTkQKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IHdoYXRjaGFuZ2VkIEgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSDogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSDogdmFsaWRhdGUgb2xkIGZpbGVzIHJlbW92ZWQsIG5ldyBmaWxlcyBhZGRlZCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCToxMDA3NTUgMDAwMDAwIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWZpbGUyL25ld2YKKwk6MTAwNjQ0IDAwMDAwMCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlmaWxlMi9vbGRmCisJOjEwMDc1NSAwMDAwMDAgODVkZjUwNzg1ZDYyZDNiMDVhYjAzZDljYmY3ZTRhMGI0OTQ0OTczMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJZmlsZTQKKwk6MTAwNjQ0IDEwMDY0NCBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIGZjZjc3OGNkYTE4MWVhYTFjYmM5ZTljZTNhMmUxNWVlOWY5ZmU3OTEgUjEwMAluZXdkaXIvaW50ZXJlc3RpbmcJaC9lL2wvbG8KKwk6MTAwNzU1IDAwMDAwMCBlNzRiN2Q0NjVlNTI3NDZiZTJiNGJhZTk4MzY3MDcxMWU2ZTY2NjU3IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAluZXdkaXIvZXhlYy5zaAorCUVPRgorCWdpdCBkaWZmLXRyZWUgLU0gLXIgSF4gSCA+YWN0dWFsICYmCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0g6IHZlcmlmeSBmaWxlJyAnCisJZWNobyAiJGZpbGU1X2RhdGEiID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIOmgvZS9sL2xvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMjIworIyMjIHNlcmllcyBJCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSTogZXhwb3J0LXBhY2stZWRnZXMnICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL2V4cG9ydC1ib3VuZGFyeQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwl3ZSBoYXZlIGEgYm9yZGVyLiAgaXRzIG9ubHkgNDAgY2hhcmFjdGVycyB3aWRlLgorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaAorCisJSU5QVVRfRU5ECisJZ2l0IGZhc3QtaW1wb3J0IC0tZXhwb3J0LXBhY2stZWRnZXM9ZWRnZXMubGlzdCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSTogdmVyaWZ5IGVkZ2UgbGlzdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCS5naXQvb2JqZWN0cy9wYWNrL3BhY2stLnBhY2s6ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBleHBvcnQtYm91bmRhcnkpCisJRU9GCisJc2VkIC1lIHMvcGFjay0uKnBhY2svcGFjay0ucGFjay8gZWRnZXMubGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIyMKKyMjIyBzZXJpZXMgSgorIyMjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0o6IHJlc2V0IGV4aXN0aW5nIGJyYW5jaCBjcmVhdGVzIGVtcHR5IGNvbW1pdCcgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvSgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljcmVhdGUgSgorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaAorCisJcmVzZXQgcmVmcy9oZWFkcy9KCisKKwljb21taXQgcmVmcy9oZWFkcy9KCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWluaXRpYWxpemUgSgorCUNPTU1JVAorCisJSU5QVVRfRU5ECisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSjogYnJhbmNoIGhhcyAxIGNvbW1pdCwgZW1wdHkgdHJlZScgJworCXRlc3QgMSA9ICQoZ2l0IHJldi1saXN0IEogfCB3YyAtbCkgJiYKKwl0ZXN0IDAgPSAkKGdpdCBscy10cmVlIEogfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSjogdGFnIG11c3QgZmFpbCBvbiBlbXB0eSBicmFuY2gnICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCXJlc2V0IHJlZnMvaGVhZHMvSjIKKworCXRhZyB3cm9uZ190YWcKKwlmcm9tIHJlZnMvaGVhZHMvSjIKKwlkYXRhIDw8RU9GCisJVGFnIGJyYW5jaCB0aGF0IHdhcyByZXNldC4KKwlFT0YKKwlJTlBVVF9FTkQKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKKyMjIworIyMjIHNlcmllcyBLCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSzogcmVpbml0IGJyYW5jaCB3aXRoIGZyb20nICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL0sKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY3JlYXRlIEsKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9icmFuY2gKKworCWNvbW1pdCByZWZzL2hlYWRzL0sKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJcmVkbyBLCisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjEKKworCUlOUFVUX0VORAorCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0s6IHZlcmlmeSBLXjEgPSBicmFuY2heMScgJworCXRlc3QgJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJyYW5jaF4xKSBcCisJCT0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEteMSkKKycKKworIyMjCisjIyMgc2VyaWVzIEwKKyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMOiB2ZXJpZnkgaW50ZXJuYWwgdHJlZSBzb3J0aW5nJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwlibG9iCisJbWFyayA6MQorCWRhdGEgPDxFT0YKKwlzb21lIGRhdGEKKwlFT0YKKworCWJsb2IKKwltYXJrIDoyCisJZGF0YSA8PEVPRgorCW90aGVyIGRhdGEKKwlFT0YKKworCWNvbW1pdCByZWZzL2hlYWRzL0wKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY3JlYXRlIEwKKwlDT01NSVQKKworCU0gNjQ0IDoxIGIuCisJTSA2NDQgOjEgYi9vdGhlcgorCU0gNjQ0IDoxIGJhCisKKwljb21taXQgcmVmcy9oZWFkcy9MCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXVwZGF0ZSBMCisJQ09NTUlUCisKKwlNIDY0NCA6MiBiLgorCU0gNjQ0IDoyIGIvb3RoZXIKKwlNIDY0NCA6MiBiYQorCUlOUFVUX0VORAorCisJY2F0ID5leHBlY3QgPDwtRVhQRUNUX0VORCAmJgorCToxMDA2NDQgMTAwNjQ0IDQyNjg2MzIuLi4gNTVkM2E1Mi4uLiBNCWIuCisJOjA0MDAwMCAwNDAwMDAgMGFlNWNhYy4uLiA0NDNjNzY4Li4uIE0JYgorCToxMDA2NDQgMTAwNjQ0IDQyNjg2MzIuLi4gNTVkM2E1Mi4uLiBNCWJhCisJRVhQRUNUX0VORAorCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9QUklOVF9TSEExX0VMTElQU0lTPSJ5ZXMiIGdpdCBkaWZmLXRyZWUgLS1hYmJyZXYgLS1yYXcgTF4gTCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMOiBuZXN0ZWQgdHJlZSBjb3B5IGRvZXMgbm90IGNvcnJ1cHQgZGVsdGFzJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwlibG9iCisJbWFyayA6MQorCWRhdGEgPDxFT0YKKwl0aGUgZGF0YQorCUVPRgorCisJY29tbWl0IHJlZnMvaGVhZHMvTDIKKwljb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTEyOTEyNDczIC0wNzAwCisJZGF0YSA8PENPTU1JVAorCWluaXQgTDIKKwlDT01NSVQKKwlNIDY0NCA6MSBhL2IvYworCU0gNjQ0IDoxIGEvYi9kCisJTSA2NDQgOjEgYS9lL2YKKworCWNvbW1pdCByZWZzL2hlYWRzL0wyCisJY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjQ3MyAtMDcwMAorCWRhdGEgPDxDT01NSVQKKwl1cGRhdGUgTDIKKwlDT01NSVQKKwlDIGEgZworCUMgYS9lIGcvYgorCU0gNjQ0IDoxIGcvYi9oCisJSU5QVVRfRU5ECisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZy9iL2YKKwlnL2IvaAorCUVPRgorCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL0wyIiAmJgorCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgbHMtdHJlZSBMMiBnL2IvID50bXAgJiYKKwljYXQgdG1wIHwgY3V0IC1mIDIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgZnNjayAkKGdpdCByZXYtcGFyc2UgTDIpCisnCisKKyMjIworIyMjIHNlcmllcyBNCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTTogcmVuYW1lIGZpbGUgaW4gc2FtZSBzdWJkaXJlY3RvcnknICcKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL00xCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWZpbGUgcmVuYW1lCisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlSIGZpbGUyL25ld2YgZmlsZTIvbi5lLncuZgorCisJSU5QVVRfRU5ECisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MTAwNzU1IDEwMDc1NSBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgUjEwMAlmaWxlMi9uZXdmCWZpbGUyL24uZS53LmYKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGRpZmYtdHJlZSAtTSAtciBNMV4gTTEgPmFjdHVhbCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNOiByZW5hbWUgZmlsZSB0byBuZXcgc3ViZGlyZWN0b3J5JyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9NMgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlmaWxlIHJlbmFtZQorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJUiBmaWxlMi9uZXdmIGkvYW0vbmV3L3RvL3lvdQorCisJSU5QVVRfRU5ECisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MTAwNzU1IDEwMDc1NSBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgUjEwMAlmaWxlMi9uZXdmCWkvYW0vbmV3L3RvL3lvdQorCUVPRgorCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgZGlmZi10cmVlIC1NIC1yIE0yXiBNMiA+YWN0dWFsICYmCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ006IHJlbmFtZSBzdWJkaXJlY3RvcnkgdG8gbmV3IHN1YmRpcmVjdG9yeScgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTTMKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJZmlsZSByZW5hbWUKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9NMl4wCisJUiBpIG90aGVyL3N1YgorCisJSU5QVVRfRU5ECisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MTAwNzU1IDEwMDc1NSBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgUjEwMAlpL2FtL25ldy90by95b3UJb3RoZXIvc3ViL2FtL25ldy90by95b3UKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGRpZmYtdHJlZSAtTSAtciBNM14gTTMgPmFjdHVhbCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNOiByZW5hbWUgcm9vdCB0byBzdWJkaXJlY3RvcnknICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL000CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXJlbmFtZSByb290CisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvTTJeMAorCVIgIiIgc3ViCisKKwlJTlBVVF9FTkQKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCToxMDA2NDQgMTAwNjQ0IDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSBSMTAwCWZpbGUyL29sZGYJc3ViL2ZpbGUyL29sZGYKKwk6MTAwNzU1IDEwMDc1NSA4NWRmNTA3ODVkNjJkM2IwNWFiMDNkOWNiZjdlNGEwYjQ5NDQ5NzMwIDg1ZGY1MDc4NWQ2MmQzYjA1YWIwM2Q5Y2JmN2U0YTBiNDk0NDk3MzAgUjEwMAlmaWxlNAlzdWIvZmlsZTQKKwk6MTAwNzU1IDEwMDc1NSBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgUjEwMAlpL2FtL25ldy90by95b3UJc3ViL2kvYW0vbmV3L3RvL3lvdQorCToxMDA3NTUgMTAwNzU1IGU3NGI3ZDQ2NWU1Mjc0NmJlMmI0YmFlOTgzNjcwNzExZTZlNjY2NTcgZTc0YjdkNDY1ZTUyNzQ2YmUyYjRiYWU5ODM2NzA3MTFlNmU2NjY1NyBSMTAwCW5ld2Rpci9leGVjLnNoCXN1Yi9uZXdkaXIvZXhlYy5zaAorCToxMDA2NDQgMTAwNjQ0IGZjZjc3OGNkYTE4MWVhYTFjYmM5ZTljZTNhMmUxNWVlOWY5ZmU3OTEgZmNmNzc4Y2RhMTgxZWFhMWNiYzllOWNlM2EyZTE1ZWU5ZjlmZTc5MSBSMTAwCW5ld2Rpci9pbnRlcmVzdGluZwlzdWIvbmV3ZGlyL2ludGVyZXN0aW5nCisJRU9GCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCBkaWZmLXRyZWUgLU0gLXIgTTReIE00ID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwKKycKKworIyMjCisjIyMgc2VyaWVzIE4KKyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOOiBjb3B5IGZpbGUgaW4gc2FtZSBzdWJkaXJlY3RvcnknICcKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL04xCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWZpbGUgY29weQorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJQyBmaWxlMi9uZXdmIGZpbGUyL24uZS53LmYKKworCUlOUFVUX0VORAorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIEMxMDAJZmlsZTIvbmV3ZglmaWxlMi9uLmUudy5mCisJRU9GCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCBkaWZmLXRyZWUgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLXIgTjFeIE4xID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTjogY29weSB0aGVuIG1vZGlmeSBzdWJkaXJlY3RvcnknICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL04yCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNsZWFuIGRpcmVjdG9yeSBjb3B5CisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlDIGZpbGUyIGZpbGUzCisKKwljb21taXQgcmVmcy9oZWFkcy9OMgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwltb2RpZnkgZGlyZWN0b3J5IGNvcHkKKwlDT01NSVQKKworCU0gNjQ0IGlubGluZSBmaWxlMy9maWxlNQorCWRhdGEgPDxFT0YKKwkkZmlsZTVfZGF0YQorCUVPRgorCisJSU5QVVRfRU5ECisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MTAwNjQ0IDEwMDY0NCBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIGZjZjc3OGNkYTE4MWVhYTFjYmM5ZTljZTNhMmUxNWVlOWY5ZmU3OTEgQzEwMAluZXdkaXIvaW50ZXJlc3RpbmcJZmlsZTMvZmlsZTUKKwk6MTAwNzU1IDEwMDc1NSBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgQzEwMAlmaWxlMi9uZXdmCWZpbGUzL25ld2YKKwk6MTAwNjQ0IDEwMDY0NCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgQzEwMAlmaWxlMi9vbGRmCWZpbGUzL29sZGYKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGRpZmYtdHJlZSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtciBOMl5eIE4yID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTjogY29weSBkaXJ0eSBzdWJkaXJlY3RvcnknICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL04zCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWRpcnR5IGRpcmVjdG9yeSBjb3B5CisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlNIDY0NCBpbmxpbmUgZmlsZTIvZmlsZTUKKwlkYXRhIDw8RU9GCisJJGZpbGU1X2RhdGEKKwlFT0YKKworCUMgZmlsZTIgZmlsZTMKKwlEIGZpbGUyL2ZpbGU1CisKKwlJTlBVVF9FTkQKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBOMl57dHJlZX0pID0gJChnaXQgcmV2LXBhcnNlIE4zXnt0cmVlfSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTjogY29weSBkaXJlY3RvcnkgYnkgaWQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIEMxMDAJZmlsZTIvbmV3ZglmaWxlMy9uZXdmCisJOjEwMDY0NCAxMDA2NDQgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIEMxMDAJZmlsZTIvb2xkZglmaWxlMy9vbGRmCisJRU9GCisJc3ViZGlyPSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL2JyYW5jaF4wOmZpbGUyKSAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTjQKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29weSBieSB0cmVlIGhhc2gKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9icmFuY2heMAorCU0gMDQwMDAwICRzdWJkaXIgZmlsZTMKKwlJTlBVVF9FTkQKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGRpZmYtdHJlZSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtciBONF4gTjQgPmFjdHVhbCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ046IHJlYWQgYW5kIGNvcHkgZGlyZWN0b3J5JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCToxMDA3NTUgMTAwNzU1IGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBDMTAwCWZpbGUyL25ld2YJZmlsZTMvbmV3ZgorCToxMDA2NDQgMTAwNjQ0IDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSBDMTAwCWZpbGUyL29sZGYJZmlsZTMvb2xkZgorCUVPRgorCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvTjQgJiYKKwlybSAtZiBiYWNrZmxvdyAmJgorCW1rZmlmbyBiYWNrZmxvdyAmJgorCSgKKwkJZXhlYyA8YmFja2Zsb3cgJiYKKwkJY2F0IDw8LUVPRiAmJgorCQljb21taXQgcmVmcy9oZWFkcy9ONAorCQljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwkJZGF0YSA8PENPTU1JVAorCQljb3B5IGJ5IHRyZWUgaGFzaCwgcGFydCAyCisJCUNPTU1JVAorCisJCWZyb20gcmVmcy9oZWFkcy9icmFuY2heMAorCQlscyAiZmlsZTIiCisJCUVPRgorCQlyZWFkIG1vZGUgdHlwZSB0cmVlIGZpbGVuYW1lICYmCisJCWVjaG8gIk0gMDQwMDAwICR0cmVlIGZpbGUzIgorCSkgfAorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTMgMz5iYWNrZmxvdyAmJgorCWdpdCBkaWZmLXRyZWUgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLXIgTjReIE40ID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdOOiBlbXB0eSBkaXJlY3RvcnkgcmVhZHMgYXMgbWlzc2luZycgJworCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwlPQkpOQU1FCisJOjAwMDAwMCAxMDA2NDQgT0JKTkFNRSBPQkpOQU1FIEEJdW5yZWxhdGVkCisJRU9GCisJZWNobyAibWlzc2luZyBzcmMiID5leHBlY3QucmVzcG9uc2UgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL3JlYWQtZW1wdHkgJiYKKwlybSAtZiBiYWNrZmxvdyAmJgorCW1rZmlmbyBiYWNrZmxvdyAmJgorCSgKKwkJZXhlYyA8YmFja2Zsb3cgJiYKKwkJY2F0IDw8LUVPRiAmJgorCQljb21taXQgcmVmcy9oZWFkcy9yZWFkLWVtcHR5CisJCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCQlkYXRhIDw8Q09NTUlUCisJCXJlYWQgImVtcHR5IiAobWlzc2luZykgZGlyZWN0b3J5CisJCUNPTU1JVAorCisJCU0gMTAwNjQ0IGlubGluZSBzcmMvZ3JlZXRpbmcKKwkJZGF0YSA8PEJMT0IKKwkJaGVsbG8KKwkJQkxPQgorCQlDIHNyYy9ncmVldGluZyBkc3QxL25vbi1ncmVldGluZworCQlDIHNyYy9ncmVldGluZyB1bnJlbGF0ZWQKKwkJIyBsZWF2ZSBiZWhpbmQgImVtcHR5IiBzcmMgZGlyZWN0b3J5CisJCUQgc3JjL2dyZWV0aW5nCisJCWxzICJzcmMiCisJCUVPRgorCQlyZWFkIC1yIGxpbmUgJiYKKwkJcHJpbnRmICIlc1xuIiAiJGxpbmUiID5yZXNwb25zZSAmJgorCQljYXQgPDwtXEVPRgorCQlEIGRzdDEKKwkJRCBkc3QyCisJCUVPRgorCSkgfAorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTMgMz5iYWNrZmxvdyAmJgorCXRlc3RfY21wIGV4cGVjdC5yZXNwb25zZSByZXNwb25zZSAmJgorCWdpdCByZXYtbGlzdCByZWFkLWVtcHR5IHwKKwlnaXQgZGlmZi10cmVlIC1yIC0tcm9vdCAtLXN0ZGluIHwKKwlzZWQgInMvJE9JRF9SRUdFWC9PQkpOQU1FL2ciID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ046IGNvcHkgcm9vdCBkaXJlY3RvcnkgYnkgdHJlZSBoYXNoJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCToxMDA3NTUgMDAwMDAwIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWZpbGUzL25ld2YKKwk6MTAwNjQ0IDAwMDAwMCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlmaWxlMy9vbGRmCisJRU9GCisJcm9vdD0kKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9icmFuY2heMF57dHJlZX0pICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9ONgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb3B5IHJvb3QgZGlyZWN0b3J5IGJ5IHRyZWUgaGFzaAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJTSAwNDAwMDAgJHJvb3QgIiIKKwlJTlBVVF9FTkQKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGRpZmYtdHJlZSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtciBONCBONiA+YWN0dWFsICYmCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ046IGNvcHkgcm9vdCBieSBwYXRoJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCToxMDA3NTUgMTAwNzU1IGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBDMTAwCWZpbGUyL25ld2YJb2xkcm9vdC9maWxlMi9uZXdmCisJOjEwMDY0NCAxMDA2NDQgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIEMxMDAJZmlsZTIvb2xkZglvbGRyb290L2ZpbGUyL29sZGYKKwk6MTAwNzU1IDEwMDc1NSA4NWRmNTA3ODVkNjJkM2IwNWFiMDNkOWNiZjdlNGEwYjQ5NDQ5NzMwIDg1ZGY1MDc4NWQ2MmQzYjA1YWIwM2Q5Y2JmN2U0YTBiNDk0NDk3MzAgQzEwMAlmaWxlNAlvbGRyb290L2ZpbGU0CisJOjEwMDc1NSAxMDA3NTUgZTc0YjdkNDY1ZTUyNzQ2YmUyYjRiYWU5ODM2NzA3MTFlNmU2NjY1NyBlNzRiN2Q0NjVlNTI3NDZiZTJiNGJhZTk4MzY3MDcxMWU2ZTY2NjU3IEMxMDAJbmV3ZGlyL2V4ZWMuc2gJb2xkcm9vdC9uZXdkaXIvZXhlYy5zaAorCToxMDA2NDQgMTAwNjQ0IGZjZjc3OGNkYTE4MWVhYTFjYmM5ZTljZTNhMmUxNWVlOWY5ZmU3OTEgZmNmNzc4Y2RhMTgxZWFhMWNiYzllOWNlM2EyZTE1ZWU5ZjlmZTc5MSBDMTAwCW5ld2Rpci9pbnRlcmVzdGluZwlvbGRyb290L25ld2Rpci9pbnRlcmVzdGluZworCUVPRgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTi1jb3B5LXJvb3QtcGF0aAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb3B5IHJvb3QgZGlyZWN0b3J5IGJ5IChlbXB0eSkgcGF0aAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJQyAiIiBvbGRyb290CisJSU5QVVRfRU5ECisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCBkaWZmLXRyZWUgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLXIgYnJhbmNoIE4tY29weS1yb290LXBhdGggPmFjdHVhbCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOOiBkZWxldGUgZGlyZWN0b3J5IGJ5IGNvcHlpbmcnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJT0JKSUQKKwk6MTAwNjQ0IDAwMDAwMCBPQkpJRCBPQkpJRCBECWZvby9iYXIvcXV4CisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWZvby9iYXIvYmF6CisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlmb28vYmFyL3F1eAorCUVPRgorCWVtcHR5X3RyZWU9JChnaXQgbWt0cmVlIDwvZGV2L251bGwpICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9OLWRlbGV0ZQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb2xsZWN0IGRhdGEgdG8gYmUgZGVsZXRlZAorCUNPTU1JVAorCisJZGVsZXRlYWxsCisJTSAxMDA2NDQgaW5saW5lIGZvby9iYXIvYmF6CisJZGF0YSA8PERBVEFfRU5ECisJaGVsbG8KKwlEQVRBX0VORAorCUMgImZvby9iYXIvYmF6IiAiZm9vL2Jhci9xdXgiCisJQyAiZm9vL2Jhci9iYXoiICJmb28vYmFyL3F1dXgvMSIKKwlDICJmb28vYmFyL2JheiIgImZvby9iYXIvcXV1dXgiCisJTSAwNDAwMDAgJGVtcHR5X3RyZWUgZm9vL2Jhci9xdXV4CisJTSAwNDAwMDAgJGVtcHR5X3RyZWUgZm9vL2Jhci9xdXV1eAorCisJY29tbWl0IHJlZnMvaGVhZHMvTi1kZWxldGUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJZGVsZXRlIHN1YmRpcmVjdG9yeQorCUNPTU1JVAorCisJTSAwNDAwMDAgJGVtcHR5X3RyZWUgZm9vL2Jhci9xdXgKKwlJTlBVVF9FTkQKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IHJldi1saXN0IE4tZGVsZXRlIHwKKwkJZ2l0IGRpZmYtdHJlZSAtciAtLXN0ZGluIC0tcm9vdCAtLWFsd2F5cyB8CisJCXNlZCAtZSAicy8kT0lEX1JFR0VYL09CSklEL2ciID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ046IG1vZGlmeSBjb3BpZWQgdHJlZScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk6MTAwNjQ0IDEwMDY0NCBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIGZjZjc3OGNkYTE4MWVhYTFjYmM5ZTljZTNhMmUxNWVlOWY5ZmU3OTEgQzEwMAluZXdkaXIvaW50ZXJlc3RpbmcJZmlsZTMvZmlsZTUKKwk6MTAwNzU1IDEwMDc1NSBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgQzEwMAlmaWxlMi9uZXdmCWZpbGUzL25ld2YKKwk6MTAwNjQ0IDEwMDY0NCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgQzEwMAlmaWxlMi9vbGRmCWZpbGUzL29sZGYKKwlFT0YKKwlzdWJkaXI9JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvYnJhbmNoXjA6ZmlsZTIpICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9ONQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb3B5IGJ5IHRyZWUgaGFzaAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJTSAwNDAwMDAgJHN1YmRpciBmaWxlMworCisJY29tbWl0IHJlZnMvaGVhZHMvTjUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJbW9kaWZ5IGRpcmVjdG9yeSBjb3B5CisJQ09NTUlUCisKKwlNIDY0NCBpbmxpbmUgZmlsZTMvZmlsZTUKKwlkYXRhIDw8RU9GCisJJGZpbGU1X2RhdGEKKwlFT0YKKwlJTlBVVF9FTkQKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGRpZmYtdHJlZSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtciBONV5eIE41ID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTjogcmVqZWN0IGZvby8gc3ludGF4JyAnCisJc3ViZGlyPSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL2JyYW5jaF4wOmZpbGUyKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8PC1JTlBVVF9FTkQKKwljb21taXQgcmVmcy9oZWFkcy9ONUIKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29weSB3aXRoIGludmFsaWQgc3ludGF4CisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlNIDA0MDAwMCAkc3ViZGlyIGZpbGUzLworCUlOUFVUX0VORAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOOiByZWplY3QgZm9vLyBzeW50YXggaW4gY29weSBzb3VyY2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPDwtSU5QVVRfRU5ECisJY29tbWl0IHJlZnMvaGVhZHMvTjVDCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgd2l0aCBpbnZhbGlkIHN5bnRheAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJQyBmaWxlMi8gZmlsZTMKKwlJTlBVVF9FTkQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTjogcmVqZWN0IGZvby8gc3ludGF4IGluIHJlbmFtZSBzb3VyY2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPDwtSU5QVVRfRU5ECisJY29tbWl0IHJlZnMvaGVhZHMvTjVECisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXJlbmFtZSB3aXRoIGludmFsaWQgc3ludGF4CisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlSIGZpbGUyLyBmaWxlMworCUlOUFVUX0VORAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOOiByZWplY3QgZm9vLyBzeW50YXggaW4gbHMgYXJndW1lbnQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPDwtSU5QVVRfRU5ECisJY29tbWl0IHJlZnMvaGVhZHMvTjVFCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgd2l0aCBpbnZhbGlkIHN5bnRheAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJbHMgImZpbGUyLyIKKwlJTlBVVF9FTkQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTjogY29weSB0byByb290IGJ5IGlkIGFuZCBtb2RpZnknICcKKwllY2hvICJoZWxsbywgd29ybGQiID5leHBlY3QuZm9vICYmCisJZWNobyBoZWxsbyA+ZXhwZWN0LmJhciAmJgorCWdpdCBmYXN0LWltcG9ydCA8PC1TRVRVUF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9ONworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwloZWxsbywgdHJlZQorCUNPTU1JVAorCisJZGVsZXRlYWxsCisJTSA2NDQgaW5saW5lIGZvby9iYXIKKwlkYXRhIDw8RU9GCisJaGVsbG8KKwlFT0YKKwlTRVRVUF9FTkQKKworCXRyZWU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IE43OikgJiYKKwlnaXQgZmFzdC1pbXBvcnQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTjgKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29weSB0byByb290IGJ5IGlkIGFuZCBtb2RpZnkKKwlDT01NSVQKKworCU0gMDQwMDAwICR0cmVlICIiCisJTSA2NDQgaW5saW5lIGZvby9mb28KKwlkYXRhIDw8RU9GCisJaGVsbG8sIHdvcmxkCisJRU9GCisJSU5QVVRfRU5ECisJZ2l0IHNob3cgTjg6Zm9vL2ZvbyA+YWN0dWFsLmZvbyAmJgorCWdpdCBzaG93IE44OmZvby9iYXIgPmFjdHVhbC5iYXIgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZm9vIGFjdHVhbC5mb28gJiYKKwl0ZXN0X2NtcCBleHBlY3QuYmFyIGFjdHVhbC5iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTjogZXh0cmFjdCBzdWJ0cmVlJyAnCisJYnJhbmNoPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL2JyYW5jaF57dHJlZX0pICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9OOQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlleHRyYWN0IHN1YnRyZWUgYnJhbmNoOm5ld2RpcgorCUNPTU1JVAorCisJTSAwNDAwMDAgJGJyYW5jaCAiIgorCUMgIm5ld2RpciIgIiIKKwlJTlBVVF9FTkQKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYnJhbmNoOm5ld2RpciBOOQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOOiBtb2RpZnkgc3VidHJlZSwgZXh0cmFjdCBpdCwgYW5kIG1vZGlmeSBhZ2FpbicgJworCWVjaG8gaGVsbG8gPmV4cGVjdC5iYXogJiYKKwllY2hvIGhlbGxvLCB3b3JsZCA+ZXhwZWN0LnF1eCAmJgorCWdpdCBmYXN0LWltcG9ydCA8PC1TRVRVUF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9OMTAKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJaGVsbG8sIHRyZWUKKwlDT01NSVQKKworCWRlbGV0ZWFsbAorCU0gNjQ0IGlubGluZSBmb28vYmFyL2JhegorCWRhdGEgPDxFT0YKKwloZWxsbworCUVPRgorCVNFVFVQX0VORAorCisJdHJlZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgTjEwOikgJiYKKwlnaXQgZmFzdC1pbXBvcnQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTjExCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgdG8gcm9vdCBieSBpZCBhbmQgbW9kaWZ5CisJQ09NTUlUCisKKwlNIDA0MDAwMCAkdHJlZSAiIgorCU0gMTAwNjQ0IGlubGluZSBmb28vYmFyL3F1eAorCWRhdGEgPDxFT0YKKwloZWxsbywgd29ybGQKKwlFT0YKKwlSICJmb28iICIiCisJQyAiYmFyL3F1eCIgImJhci9xdXV4IgorCUlOUFVUX0VORAorCWdpdCBzaG93IE4xMTpiYXIvYmF6ID5hY3R1YWwuYmF6ICYmCisJZ2l0IHNob3cgTjExOmJhci9xdXggPmFjdHVhbC5xdXggJiYKKwlnaXQgc2hvdyBOMTE6YmFyL3F1dXggPmFjdHVhbC5xdXV4ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJheiBhY3R1YWwuYmF6ICYmCisJdGVzdF9jbXAgZXhwZWN0LnF1eCBhY3R1YWwucXV4ICYmCisJdGVzdF9jbXAgZXhwZWN0LnF1eCBhY3R1YWwucXV1eCcKKworIyMjCisjIyMgc2VyaWVzIE8KKyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPOiBjb21tZW50cyBhcmUgYWxsIHNraXBwZWQnICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCSN3ZSB3aWxsCisJY29tbWl0IHJlZnMvaGVhZHMvTzEKKwkjIC0tIGlnbm9yZSBhbGwgb2YgdGhpcyB0ZXh0CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJIyAkR0lUX0NPTU1JVFRFUl9OQU1FIGhhcyBpbnNlcnRlZCBoZXJlIGZvciBoaXMgYmVuZWZpdC4KKwlkYXRhIDw8Q09NTUlUCisJZGlydHkgZGlyZWN0b3J5IGNvcHkKKwlDT01NSVQKKworCSMgZG8gbm90IGZvcmdldCB0aGUgaW1wb3J0IGJsYW5rIGxpbmUhCisJIworCSMgeWVzLCB3ZSBzdGFydGVkIGZyb20gb3VyIHVzdWFsIGJhc2Ugb2YgYnJhbmNoXjAuCisJIyBpIGxpa2UgYnJhbmNoXjAuCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJIyBhbmQgd2UgbmVlZCB0byByZXVzZSBmaWxlMi9maWxlNSBmcm9tIE4zIGFib3ZlLgorCU0gNjQ0IGlubGluZSBmaWxlMi9maWxlNQorCSMgb3RoZXJ3aXNlIHRoZSB0cmVlIHdpbGwgYmUgZGlmZmVyZW50CisJZGF0YSA8PEVPRgorCSRmaWxlNV9kYXRhCisJRU9GCisKKwkjIGRvIG5vdCBmb3JnZXQgdG8gY29weSBmaWxlMiB0byBmaWxlMworCUMgZmlsZTIgZmlsZTMKKwkjCisJIyBvciB0byBkZWxldGUgZmlsZTUgZnJvbSBmaWxlMi4KKwlEIGZpbGUyL2ZpbGU1CisJIyBhcmUgd2UgZG9uZSB5ZXQ/CisKKwlJTlBVVF9FTkQKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBOMykgPSAkKGdpdCByZXYtcGFyc2UgTzEpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ086IGJsYW5rIGxpbmVzIG5vdCBuZWNlc3NhcnkgYWZ0ZXIgZGF0YSBjb21tYW5kcycgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTzIKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJZGlydHkgZGlyZWN0b3J5IGNvcHkKKwlDT01NSVQKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlNIDY0NCBpbmxpbmUgZmlsZTIvZmlsZTUKKwlkYXRhIDw8RU9GCisJJGZpbGU1X2RhdGEKKwlFT0YKKwlDIGZpbGUyIGZpbGUzCisJRCBmaWxlMi9maWxlNQorCisJSU5QVVRfRU5ECisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgTjMpID0gJChnaXQgcmV2LXBhcnNlIE8yKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPOiByZXBhY2sgYmVmb3JlIG5leHQgdGVzdCcgJworCWdpdCByZXBhY2sgLWEgLWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTzogYmxhbmsgbGluZXMgbm90IG5lY2Vzc2FyeSBhZnRlciBvdGhlciBjb21tYW5kcycgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTzMKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJenN0cmluZworCUNPTU1JVAorCWNvbW1pdCByZWZzL2hlYWRzL08zCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXpvZgorCUNPTU1JVAorCWNoZWNrcG9pbnQKKwljb21taXQgcmVmcy9oZWFkcy9PMworCW1hcmsgOjUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJemVtcHR5CisJQ09NTUlUCisJY2hlY2twb2ludAorCWNvbW1pdCByZWZzL2hlYWRzL08zCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXpjb21taXRzCisJQ09NTUlUCisJcmVzZXQgcmVmcy90YWdzL08zLTJuZAorCWZyb20gOjUKKwlyZXNldCByZWZzL3RhZ3MvTzMtM3JkCisJZnJvbSA6NQorCUlOUFVUX0VORAorCisJY2F0ID5leHBlY3QgPDwtSU5QVVRfRU5EICYmCisJc3RyaW5nCisJb2YKKwllbXB0eQorCWNvbW1pdHMKKwlJTlBVVF9FTkQKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwl0ZXN0IDggPSAkKGZpbmQgLmdpdC9vYmplY3RzL3BhY2sgLXR5cGUgZiB8IGdyZXAgLXYgbXVsdGktcGFjay1pbmRleCB8IHdjIC1sKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9PMy0ybmQpID0gJChnaXQgcmV2LXBhcnNlIE8zXikgJiYKKwlnaXQgbG9nIC0tcmV2ZXJzZSAtLXByZXR0eT1vbmVsaW5lIE8zIHwgc2VkIHMvXi4qei8vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ086IHByb2dyZXNzIG91dHB1dHMgYXMgcmVxdWVzdGVkIGJ5IGlucHV0JyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9PNAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwl6c3RyaW5nCisJQ09NTUlUCisJY29tbWl0IHJlZnMvaGVhZHMvTzQKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJem9mCisJQ09NTUlUCisJcHJvZ3Jlc3MgVHdvIGNvbW1pdHMgZG93biwgMiB0byBnbyEKKwljb21taXQgcmVmcy9oZWFkcy9PNAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwl6ZW1wdHkKKwlDT01NSVQKKwlwcm9ncmVzcyBUaHJlZSBjb21taXRzIGRvd24sIDEgdG8gZ28hCisJY29tbWl0IHJlZnMvaGVhZHMvTzQKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJemNvbW1pdHMKKwlDT01NSVQKKwlwcm9ncmVzcyBkb25lIQorCUlOUFVUX0VORAorCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgPmFjdHVhbCAmJgorCWdyZXAgInByb2dyZXNzICIgPGlucHV0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMjIworIyMjIHNlcmllcyBQIChnaXRsaW5rcykKKyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQOiBzdXBlcnByb2plY3QgJiBzdWJtb2R1bGUgbWl4JyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwlibG9iCisJbWFyayA6MQorCWRhdGEgMTAKKwl0ZXN0IGZpbGUKKworCXJlc2V0IHJlZnMvaGVhZHMvc3ViCisJY29tbWl0IHJlZnMvaGVhZHMvc3ViCisJbWFyayA6MgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgMTIKKwlzdWJfaW5pdGlhbAorCU0gMTAwNjQ0IDoxIGZpbGUKKworCWJsb2IKKwltYXJrIDozCisJZGF0YSA8PERBVEFFTkQKKwlbc3VibW9kdWxlICJzdWIiXQorCQlwYXRoID0gc3ViCisJCXVybCA9ICIkKHB3ZCkvc3ViIgorCURBVEFFTkQKKworCWNvbW1pdCByZWZzL2hlYWRzL3N1YnVzZTEKKwltYXJrIDo0CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA4CisJaW5pdGlhbAorCWZyb20gcmVmcy9oZWFkcy9tYXN0ZXIKKwlNIDEwMDY0NCA6MyAuZ2l0bW9kdWxlcworCU0gMTYwMDAwIDoyIHN1YgorCisJYmxvYgorCW1hcmsgOjUKKwlkYXRhIDIwCisJdGVzdCBmaWxlCisJbW9yZSBkYXRhCisKKwljb21taXQgcmVmcy9oZWFkcy9zdWIKKwltYXJrIDo2CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSAxMQorCXN1Yl9zZWNvbmQKKwlmcm9tIDoyCisJTSAxMDA2NDQgOjUgZmlsZQorCisJY29tbWl0IHJlZnMvaGVhZHMvc3VidXNlMQorCW1hcmsgOjcKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDcKKwlzZWNvbmQKKwlmcm9tIDo0CisJTSAxNjAwMDAgOjYgc3ViCisKKwlJTlBVVF9FTkQKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgY2hlY2tvdXQgc3VidXNlMSAmJgorCXJtIC1yZiBzdWIgJiYKKwlta2RpciBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgZmV0Y2ggLS11cGRhdGUtaGVhZC1vayAuLiByZWZzL2hlYWRzL3N1YjpyZWZzL2hlYWRzL21hc3RlciAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyCisJKSAmJgorCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1A6IHZlcmJhdGltIFNIQSBnaXRsaW5rcycgJworCVNVQkxBU1Q9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHN1YikgJiYKKwlTVUJQUkVWPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzdWJeKSAmJgorCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwlibG9iCisJbWFyayA6MQorCWRhdGEgPDxEQVRBRU5ECisJW3N1Ym1vZHVsZSAic3ViIl0KKwkJcGF0aCA9IHN1YgorCQl1cmwgPSAiJChwd2QpL3N1YiIKKwlEQVRBRU5ECisKKwljb21taXQgcmVmcy9oZWFkcy9zdWJ1c2UyCisJbWFyayA6MgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgOAorCWluaXRpYWwKKwlmcm9tIHJlZnMvaGVhZHMvbWFzdGVyCisJTSAxMDA2NDQgOjEgLmdpdG1vZHVsZXMKKwlNIDE2MDAwMCAkU1VCUFJFViBzdWIKKworCWNvbW1pdCByZWZzL2hlYWRzL3N1YnVzZTIKKwltYXJrIDozCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA3CisJc2Vjb25kCisJZnJvbSA6MgorCU0gMTYwMDAwICRTVUJMQVNUIHN1YgorCisJSU5QVVRfRU5ECisKKwlnaXQgYnJhbmNoIC1EIHN1YiAmJgorCWdpdCBnYyAmJgorCWdpdCBwcnVuZSAmJgorCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzdWJ1c2UyKSA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzdWJ1c2UxKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQOiBmYWlsIG9uIGlubGluZSBnaXRsaW5rJyAnCisJdGVzdF90aWNrICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9zdWJ1c2UzCisJbWFyayA6MQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb3JydXB0CisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvc3VidXNlMgorCU0gMTYwMDAwIGlubGluZSBzdWIKKwlkYXRhIDw8REFUQQorCSRTVUJQUkVWCisJREFUQQorCisJSU5QVVRfRU5ECisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1A6IGZhaWwgb24gYmxvYiBtYXJrIGluIGdpdGxpbmsnICcKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWJsb2IKKwltYXJrIDoxCisJZGF0YSA8PERBVEEKKwkkU1VCUFJFVgorCURBVEEKKworCWNvbW1pdCByZWZzL2hlYWRzL3N1YnVzZTMKKwltYXJrIDoyCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcnJ1cHQKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9zdWJ1c2UyCisJTSAxNjAwMDAgOjEgc3ViCisKKwlJTlBVVF9FTkQKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKworIyMjCisjIyMgc2VyaWVzIFEgKG5vdGVzKQorIyMjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1E6IGNvbW1pdCBub3RlcycgJworCW5vdGUxX2RhdGE9IlRoZSBmaXJzdCBub3RlIGZvciB0aGUgZmlyc3QgY29tbWl0IiAmJgorCW5vdGUyX2RhdGE9IlRoZSBmaXJzdCBub3RlIGZvciB0aGUgc2Vjb25kIGNvbW1pdCIgJiYKKwlub3RlM19kYXRhPSJUaGUgZmlyc3Qgbm90ZSBmb3IgdGhlIHRoaXJkIGNvbW1pdCIgJiYKKwlub3RlMWJfZGF0YT0iVGhlIHNlY29uZCBub3RlIGZvciB0aGUgZmlyc3QgY29tbWl0IiAmJgorCW5vdGUxY19kYXRhPSJUaGUgdGhpcmQgbm90ZSBmb3IgdGhlIGZpcnN0IGNvbW1pdCIgJiYKKwlub3RlMmJfZGF0YT0iVGhlIHNlY29uZCBub3RlIGZvciB0aGUgc2Vjb25kIGNvbW1pdCIgJiYKKworCXRlc3RfdGljayAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJYmxvYgorCW1hcmsgOjIKKwlkYXRhIDw8RU9GCisJJGZpbGUyX2RhdGEKKwlFT0YKKworCWNvbW1pdCByZWZzL2hlYWRzL25vdGVzLXRlc3QKKwltYXJrIDozCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWZpcnN0ICg6MykKKwlDT01NSVQKKworCU0gNjQ0IDoyIGZpbGUyCisKKwlibG9iCisJbWFyayA6NAorCWRhdGEgJGZpbGU0X2xlbgorCSRmaWxlNF9kYXRhCisJY29tbWl0IHJlZnMvaGVhZHMvbm90ZXMtdGVzdAorCW1hcmsgOjUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJc2Vjb25kICg6NSkKKwlDT01NSVQKKworCU0gNjQ0IDo0IGZpbGU0CisKKwljb21taXQgcmVmcy9oZWFkcy9ub3Rlcy10ZXN0CisJbWFyayA6NgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwl0aGlyZCAoOjYpCisJQ09NTUlUCisKKwlNIDY0NCBpbmxpbmUgZmlsZTUKKwlkYXRhIDw8RU9GCisJJGZpbGU1X2RhdGEKKwlFT0YKKworCU0gNzU1IGlubGluZSBmaWxlNgorCWRhdGEgPDxFT0YKKwkkZmlsZTZfZGF0YQorCUVPRgorCisJYmxvYgorCW1hcmsgOjcKKwlkYXRhIDw8RU9GCisJJG5vdGUxX2RhdGEKKwlFT0YKKworCWJsb2IKKwltYXJrIDo4CisJZGF0YSA8PEVPRgorCSRub3RlMl9kYXRhCisJRU9GCisKKwljb21taXQgcmVmcy9ub3Rlcy9mb29iYXIKKwltYXJrIDo5CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCW5vdGVzICg6OSkKKwlDT01NSVQKKworCU4gOjcgOjMKKwlOIDo4IDo1CisJTiBpbmxpbmUgOjYKKwlkYXRhIDw8RU9GCisJJG5vdGUzX2RhdGEKKwlFT0YKKworCWNvbW1pdCByZWZzL25vdGVzL2Zvb2JhcgorCW1hcmsgOjEwCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCW5vdGVzICg6MTApCisJQ09NTUlUCisKKwlOIGlubGluZSA6MworCWRhdGEgPDxFT0YKKwkkbm90ZTFiX2RhdGEKKwlFT0YKKworCWNvbW1pdCByZWZzL25vdGVzL2Zvb2JhcjIKKwltYXJrIDoxMQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlub3RlcyAoOjExKQorCUNPTU1JVAorCisJTiBpbmxpbmUgOjMKKwlkYXRhIDw8RU9GCisJJG5vdGUxY19kYXRhCisJRU9GCisKKwljb21taXQgcmVmcy9ub3Rlcy9mb29iYXIKKwltYXJrIDoxMgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlub3RlcyAoOjEyKQorCUNPTU1JVAorCisJZGVsZXRlYWxsCisJTiBpbmxpbmUgOjUKKwlkYXRhIDw8RU9GCisJJG5vdGUyYl9kYXRhCisJRU9GCisKKwlJTlBVVF9FTkQKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgd2hhdGNoYW5nZWQgbm90ZXMtdGVzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgcGFjaycgJworCXZlcmlmeV9wYWNrcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgZmlyc3QgY29tbWl0JyAnCisJY29tbWl0MT0kKGdpdCByZXYtcGFyc2Ugbm90ZXMtdGVzdH4yKSAmJgorCWNvbW1pdDI9JChnaXQgcmV2LXBhcnNlIG5vdGVzLXRlc3ReKSAmJgorCWNvbW1pdDM9JChnaXQgcmV2LXBhcnNlIG5vdGVzLXRlc3QpICYmCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlhdXRob3IgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworCWZpcnN0ICg6MykKKwlFT0YKKwlnaXQgY2F0LWZpbGUgY29tbWl0IG5vdGVzLXRlc3R+MiB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgc2Vjb25kIGNvbW1pdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCXBhcmVudCAkY29tbWl0MQorCWF1dGhvciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCisJc2Vjb25kICg6NSkKKwlFT0YKKwlnaXQgY2F0LWZpbGUgY29tbWl0IG5vdGVzLXRlc3ReIHwgc2VkIDFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1E6IHZlcmlmeSB0aGlyZCBjb21taXQnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlwYXJlbnQgJGNvbW1pdDIKKwlhdXRob3IgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworCXRoaXJkICg6NikKKwlFT0YKKwlnaXQgY2F0LWZpbGUgY29tbWl0IG5vdGVzLXRlc3QgfCBzZWQgMWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IGZpcnN0IG5vdGVzIGNvbW1pdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWF1dGhvciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCisJbm90ZXMgKDo5KQorCUVPRgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9ub3Rlcy9mb29iYXJ+MiB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgZmlyc3Qgbm90ZXMgdHJlZScgJworCWNhdCA+ZXhwZWN0LnVuc29ydGVkIDw8LUVPRiAmJgorCTEwMDY0NCBibG9iICRjb21taXQxCisJMTAwNjQ0IGJsb2IgJGNvbW1pdDIKKwkxMDA2NDQgYmxvYiAkY29tbWl0MworCUVPRgorCWNhdCBleHBlY3QudW5zb3J0ZWQgfCBzb3J0ID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9mb29iYXJ+Ml57dHJlZX0gfCBzZWQgInMvIFswLTlhLWZdKgkvIC8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1E6IHZlcmlmeSBmaXJzdCBub3RlIGZvciBmaXJzdCBjb21taXQnICcKKwllY2hvICIkbm90ZTFfZGF0YSIgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyfjI6JGNvbW1pdDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IGZpcnN0IG5vdGUgZm9yIHNlY29uZCBjb21taXQnICcKKwllY2hvICIkbm90ZTJfZGF0YSIgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyfjI6JGNvbW1pdDIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IGZpcnN0IG5vdGUgZm9yIHRoaXJkIGNvbW1pdCcgJworCWVjaG8gIiRub3RlM19kYXRhIiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9ub3Rlcy9mb29iYXJ+MjokY29tbWl0MyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgc2Vjb25kIG5vdGVzIGNvbW1pdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCXBhcmVudCAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9mb29iYXJ+MikKKwlhdXRob3IgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworCW5vdGVzICg6MTApCisJRU9GCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL25vdGVzL2Zvb2Jhcl4gfCBzZWQgMWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IHNlY29uZCBub3RlcyB0cmVlJyAnCisJY2F0ID5leHBlY3QudW5zb3J0ZWQgPDwtRU9GICYmCisJMTAwNjQ0IGJsb2IgJGNvbW1pdDEKKwkxMDA2NDQgYmxvYiAkY29tbWl0MgorCTEwMDY0NCBibG9iICRjb21taXQzCisJRU9GCisJY2F0IGV4cGVjdC51bnNvcnRlZCB8IHNvcnQgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2Zvb2Jhcl5ee3RyZWV9IHwgc2VkICJzLyBbMC05YS1mXSoJLyAvIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgc2Vjb25kIG5vdGUgZm9yIGZpcnN0IGNvbW1pdCcgJworCWVjaG8gIiRub3RlMWJfZGF0YSIgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyXjokY29tbWl0MSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgZmlyc3Qgbm90ZSBmb3Igc2Vjb25kIGNvbW1pdCcgJworCWVjaG8gIiRub3RlMl9kYXRhIiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9ub3Rlcy9mb29iYXJeOiRjb21taXQyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1E6IHZlcmlmeSBmaXJzdCBub3RlIGZvciB0aGlyZCBjb21taXQnICcKKwllY2hvICIkbm90ZTNfZGF0YSIgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyXjokY29tbWl0MyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgdGhpcmQgbm90ZXMgY29tbWl0JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisKKwlub3RlcyAoOjExKQorCUVPRgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9ub3Rlcy9mb29iYXIyIHwgc2VkIDFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1E6IHZlcmlmeSB0aGlyZCBub3RlcyB0cmVlJyAnCisJY2F0ID5leHBlY3QudW5zb3J0ZWQgPDwtRU9GICYmCisJMTAwNjQ0IGJsb2IgJGNvbW1pdDEKKwlFT0YKKwljYXQgZXhwZWN0LnVuc29ydGVkIHwgc29ydCA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvZm9vYmFyMl57dHJlZX0gfCBzZWQgInMvIFswLTlhLWZdKgkvIC8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1E6IHZlcmlmeSB0aGlyZCBub3RlIGZvciBmaXJzdCBjb21taXQnICcKKwllY2hvICIkbm90ZTFjX2RhdGEiID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2JhcjI6JGNvbW1pdDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IGZvdXJ0aCBub3RlcyBjb21taXQnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlwYXJlbnQgJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvZm9vYmFyXikKKwlhdXRob3IgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworCW5vdGVzICg6MTIpCisJRU9GCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL25vdGVzL2Zvb2JhciB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgZm91cnRoIG5vdGVzIHRyZWUnICcKKwljYXQgPmV4cGVjdC51bnNvcnRlZCA8PC1FT0YgJiYKKwkxMDA2NDQgYmxvYiAkY29tbWl0MgorCUVPRgorCWNhdCBleHBlY3QudW5zb3J0ZWQgfCBzb3J0ID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9mb29iYXJee3RyZWV9IHwgc2VkICJzLyBbMC05YS1mXSoJLyAvIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgc2Vjb25kIG5vdGUgZm9yIHNlY29uZCBjb21taXQnICcKKwllY2hvICIkbm90ZTJiX2RhdGEiID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2JhcjokY29tbWl0MiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiBkZW55IG5vdGUgb24gZW1wdHkgYnJhbmNoJyAnCisJY2F0ID5pbnB1dCA8PC1FT0YgJiYKKwlyZXNldCByZWZzL2hlYWRzL1EwCisKKwljb21taXQgcmVmcy9oZWFkcy9ub3RlLVEwCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCU5vdGUgZm9yIGFuIGVtcHR5IGJyYW5jaC4KKwlDT01NSVQKKworCU4gaW5saW5lIHJlZnMvaGVhZHMvUTAKKwlkYXRhIDw8Tk9URQorCXNvbWUgbm90ZQorCU5PVEUKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisjIyMKKyMjIyBzZXJpZXMgUiAoZmVhdHVyZSBhbmQgb3B0aW9uKQorIyMjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGFib3J0IG9uIHVuc3VwcG9ydGVkIGZlYXR1cmUnICcKKwljYXQgPmlucHV0IDw8LUVPRiAmJgorCWZlYXR1cmUgbm8tc3VjaC1mZWF0dXJlLWV4aXN0cworCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBzdXBwb3J0ZWQgZmVhdHVyZSBpcyBhY2NlcHRlZCcgJworCWNhdCA+aW5wdXQgPDwtRU9GICYmCisJZmVhdHVyZSBkYXRlLWZvcm1hdD1ub3cKKwlFT0YKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogYWJvcnQgb24gcmVjZWl2aW5nIGZlYXR1cmUgYWZ0ZXIgZGF0YSBjb21tYW5kJyAnCisJY2F0ID5pbnB1dCA8PC1FT0YgJiYKKwlibG9iCisJZGF0YSAzCisJaGkKKwlmZWF0dXJlIGRhdGUtZm9ybWF0PW5vdworCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBpbXBvcnQtbWFya3MgZmVhdHVyZXMgZm9yYmlkZGVuIGJ5IGRlZmF1bHQnICcKKwk+Z2l0Lm1hcmtzICYmCisJZWNobyAiZmVhdHVyZSBpbXBvcnQtbWFya3M9Z2l0Lm1hcmtzIiA+aW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZWNobyAiZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzPWdpdC5tYXJrcyIgPmlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBvbmx5IG9uZSBpbXBvcnQtbWFya3MgZmVhdHVyZSBhbGxvd2VkIHBlciBzdHJlYW0nICcKKwk+Z2l0Lm1hcmtzICYmCisJPmdpdDIubWFya3MgJiYKKwljYXQgPmlucHV0IDw8LUVPRiAmJgorCWZlYXR1cmUgaW1wb3J0LW1hcmtzPWdpdC5tYXJrcworCWZlYXR1cmUgaW1wb3J0LW1hcmtzPWdpdDIubWFya3MKKwlFT0YKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZXhwb3J0LW1hcmtzIGZlYXR1cmUgZm9yYmlkZGVuIGJ5IGRlZmF1bHQnICcKKwllY2hvICJmZWF0dXJlIGV4cG9ydC1tYXJrcz1naXQubWFya3MiID5pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZXhwb3J0LW1hcmtzIGZlYXR1cmUgcmVzdWx0cyBpbiBhIG1hcmtzIGZpbGUgYmVpbmcgY3JlYXRlZCcgJworCWNhdCA+aW5wdXQgPDwtRU9GICYmCisJZmVhdHVyZSBleHBvcnQtbWFya3M9Z2l0Lm1hcmtzCisJYmxvYgorCW1hcmsgOjEKKwlkYXRhIDMKKwloaQorCisJRU9GCisKKwlnaXQgZmFzdC1pbXBvcnQgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMgPGlucHV0ICYmCisJZ3JlcCA6MSBnaXQubWFya3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZXhwb3J0LW1hcmtzIG9wdGlvbnMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgY29tbWFuZGxpbmUgb3B0aW9ucycgJworCWNhdCA+aW5wdXQgPDwtXEVPRiAmJgorCWZlYXR1cmUgZXhwb3J0LW1hcmtzPWZlYXR1cmUtc3ViL2dpdC5tYXJrcworCWJsb2IKKwltYXJrIDoxCisJZGF0YSAzCisJaGkKKworCUVPRgorCWdpdCBmYXN0LWltcG9ydCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyBcCisJCQktLWV4cG9ydC1tYXJrcz1jbWRsaW5lLXN1Yi9vdGhlci5tYXJrcyA8aW5wdXQgJiYKKwlncmVwIDoxIGNtZGxpbmUtc3ViL290aGVyLm1hcmtzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmVhdHVyZS1zdWIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogY2F0Y2ggdHlwbyBpbiBtYXJrcyBmaWxlIG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bm9uZXhpc3RlbnQubWFya3MgPC9kZXYvbnVsbCAmJgorCWVjaG8gImZlYXR1cmUgaW1wb3J0LW1hcmtzPW5vbmV4aXN0ZW50Lm1hcmtzIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGltcG9ydCBhbmQgb3V0cHV0IG1hcmtzIGNhbiBiZSB0aGUgc2FtZSBmaWxlJyAnCisJcm0gLWYgaW8ubWFya3MgJiYKKwlibG9iPSQoZWNobyBoaSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCToxICRibG9iCisJOjIgJGJsb2IKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9aW8ubWFya3MgPDwtXEVPRiAmJgorCWJsb2IKKwltYXJrIDoxCisJZGF0YSAzCisJaGkKKworCUVPRgorCWdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1pby5tYXJrcyAtLWV4cG9ydC1tYXJrcz1pby5tYXJrcyA8PC1cRU9GICYmCisJYmxvYgorCW1hcmsgOjIKKwlkYXRhIDMKKwloaQorCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGlvLm1hcmtzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IC0taW1wb3J0LW1hcmtzPWZvbyAtLW91dHB1dC1tYXJrcz1mb28gdG8gY3JlYXRlIGZvbyBmYWlscycgJworCXJtIC1mIGlvLm1hcmtzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPWlvLm1hcmtzIC0tZXhwb3J0LW1hcmtzPWlvLm1hcmtzIDw8LVxFT0YKKwlibG9iCisJbWFyayA6MQorCWRhdGEgMworCWhpCisKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzJyAnCisJcm0gLWYgaW8ubWFya3MgJiYKKwlibG9iPSQoZWNobyBoaSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSAmJgorCWVjaG8gIjoxICRibG9iIiA+ZXhwZWN0ICYmCisJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1pby5tYXJrcyAtLWV4cG9ydC1tYXJrcz1pby5tYXJrcyA8PC1cRU9GICYmCisJYmxvYgorCW1hcmsgOjEKKwlkYXRhIDMKKwloaQorCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGlvLm1hcmtzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGZlYXR1cmUgaW1wb3J0LW1hcmtzLWlmLWV4aXN0cycgJworCXJtIC1mIGlvLm1hcmtzICYmCisKKwlnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9aW8ubWFya3MgXAorCQkJLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMgPDwtXEVPRiAmJgorCWZlYXR1cmUgaW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1ub3RfaW8ubWFya3MKKwlFT0YKKwl0ZXN0X211c3RfYmVfZW1wdHkgaW8ubWFya3MgJiYKKworCWJsb2I9JChlY2hvIGhpIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisKKwllY2hvICI6MSAkYmxvYiIgPmlvLm1hcmtzICYmCisJZWNobyAiOjEgJGJsb2IiID5leHBlY3QgJiYKKwllY2hvICI6MiAkYmxvYiIgPj5leHBlY3QgJiYKKworCWdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1pby5tYXJrcyBcCisJCQktLWFsbG93LXVuc2FmZS1mZWF0dXJlcyA8PC1cRU9GICYmCisJZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzPWlvLm1hcmtzCisJYmxvYgorCW1hcmsgOjIKKwlkYXRhIDMKKwloaQorCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGlvLm1hcmtzICYmCisKKwllY2hvICI6MyAkYmxvYiIgPj5leHBlY3QgJiYKKworCWdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1pby5tYXJrcyBcCisJCQktLWV4cG9ydC1tYXJrcz1pby5tYXJrcyBcCisJCQktLWFsbG93LXVuc2FmZS1mZWF0dXJlcyA8PC1cRU9GICYmCisJZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzPW5vdF9pby5tYXJrcworCWJsb2IKKwltYXJrIDozCisJZGF0YSAzCisJaGkKKworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBpby5tYXJrcyAmJgorCisJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1ub3RfaW8ubWFya3MgXAorCQkJLS1leHBvcnQtbWFya3M9aW8ubWFya3MgXAorCQkJLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMgPDwtXEVPRiAmJgorCWZlYXR1cmUgaW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1pby5tYXJrcworCUVPRgorCXRlc3RfbXVzdF9iZV9lbXB0eSBpby5tYXJrcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBpbXBvcnQgdG8gb3V0cHV0IG1hcmtzIHdvcmtzIHdpdGhvdXQgYW55IGNvbnRlbnQnICcKKwljYXQgPmlucHV0IDw8LUVPRiAmJgorCWZlYXR1cmUgaW1wb3J0LW1hcmtzPW1hcmtzLm91dAorCWZlYXR1cmUgZXhwb3J0LW1hcmtzPW1hcmtzLm5ldworCUVPRgorCisJZ2l0IGZhc3QtaW1wb3J0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIDxpbnB1dCAmJgorCXRlc3RfY21wIG1hcmtzLm91dCBtYXJrcy5uZXcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogaW1wb3J0IG1hcmtzIHByZWZlcnMgY29tbWFuZGxpbmUgbWFya3MgZmlsZSBvdmVyIHRoZSBzdHJlYW0nICcKKwljYXQgPmlucHV0IDw8LUVPRiAmJgorCWZlYXR1cmUgaW1wb3J0LW1hcmtzPW5vbmV4aXN0ZW50Lm1hcmtzCisJZmVhdHVyZSBleHBvcnQtbWFya3M9bWFya3MubmV3CisJRU9GCisKKwlnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3Mub3V0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIDxpbnB1dCAmJgorCXRlc3RfY21wIG1hcmtzLm91dCBtYXJrcy5uZXcKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBtdWx0aXBsZSAtLWltcG9ydC1tYXJrcz0gc2hvdWxkIGJlIGhvbm91cmVkJyAnCisJY2F0ID5pbnB1dCA8PC1FT0YgJiYKKwlmZWF0dXJlIGltcG9ydC1tYXJrcz1ub25leGlzdGVudC5tYXJrcworCWZlYXR1cmUgZXhwb3J0LW1hcmtzPWNvbWJpbmVkLm1hcmtzCisJRU9GCisKKwloZWFkIC1uMiBtYXJrcy5vdXQgPiBvbmUubWFya3MgJiYKKwl0YWlsIC1uICszIG1hcmtzLm91dCA+IHR3by5tYXJrcyAmJgorCWdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1vbmUubWFya3MgLS1pbXBvcnQtbWFya3M9dHdvLm1hcmtzIFwKKwkJLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMgPGlucHV0ICYmCisJdGVzdF9jbXAgbWFya3Mub3V0IGNvbWJpbmVkLm1hcmtzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGZlYXR1cmUgcmVsYXRpdmUtbWFya3Mgc2hvdWxkIGJlIGhvbm91cmVkJyAnCisJY2F0ID5pbnB1dCA8PC1FT0YgJiYKKwlmZWF0dXJlIHJlbGF0aXZlLW1hcmtzCisJZmVhdHVyZSBpbXBvcnQtbWFya3M9cmVsYXRpdmUuaW4KKwlmZWF0dXJlIGV4cG9ydC1tYXJrcz1yZWxhdGl2ZS5vdXQKKwlFT0YKKworCW1rZGlyIC1wIC5naXQvaW5mby9mYXN0LWltcG9ydC8gJiYKKwljcCBtYXJrcy5uZXcgLmdpdC9pbmZvL2Zhc3QtaW1wb3J0L3JlbGF0aXZlLmluICYmCisJZ2l0IGZhc3QtaW1wb3J0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIDxpbnB1dCAmJgorCXRlc3RfY21wIG1hcmtzLm5ldyAuZ2l0L2luZm8vZmFzdC1pbXBvcnQvcmVsYXRpdmUub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGZlYXR1cmUgbm8tcmVsYXRpdmUtbWFya3Mgc2hvdWxkIGJlIGhvbm91cmVkJyAnCisJY2F0ID5pbnB1dCA8PC1FT0YgJiYKKwlmZWF0dXJlIHJlbGF0aXZlLW1hcmtzCisJZmVhdHVyZSBpbXBvcnQtbWFya3M9cmVsYXRpdmUuaW4KKwlmZWF0dXJlIG5vLXJlbGF0aXZlLW1hcmtzCisJZmVhdHVyZSBleHBvcnQtbWFya3M9bm9uLXJlbGF0aXZlLm91dAorCUVPRgorCisJZ2l0IGZhc3QtaW1wb3J0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIDxpbnB1dCAmJgorCXRlc3RfY21wIG1hcmtzLm5ldyBub24tcmVsYXRpdmUub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGZlYXR1cmUgbHMgc3VwcG9ydGVkJyAnCisJZWNobyAiZmVhdHVyZSBscyIgfAorCWdpdCBmYXN0LWltcG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBmZWF0dXJlIGNhdC1ibG9iIHN1cHBvcnRlZCcgJworCWVjaG8gImZlYXR1cmUgY2F0LWJsb2IiIHwKKwlnaXQgZmFzdC1pbXBvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogY2F0LWJsb2ItZmQgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXInICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1jYXQtYmxvYi1mZD0tMSA8L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdSOiBwcmludCBvbGQgYmxvYicgJworCWJsb2I9JChlY2hvICJ5ZXMgaXQgY2FuIiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSR7YmxvYn0gYmxvYiAxMQorCXllcyBpdCBjYW4KKworCUVPRgorCWVjaG8gImNhdC1ibG9iICRibG9iIiB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9NiA2PmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ1I6IGluLXN0cmVhbSBjYXQtYmxvYi1mZCBub3QgcmVzcGVjdGVkJyAnCisJZWNobyBoZWxsbyA+Z3JlZXRpbmcgJiYKKwlibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IC13IGdyZWV0aW5nKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSR7YmxvYn0gYmxvYiA2CisJaGVsbG8KKworCUVPRgorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTMgMz5hY3R1YWwuMyA+YWN0dWFsLjEgPDwtRU9GICYmCisJY2F0LWJsb2IgJGJsb2IKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLjMgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLjEgJiYKKwlnaXQgZmFzdC1pbXBvcnQgMz5hY3R1YWwuMyA+YWN0dWFsLjEgPDwtRU9GICYmCisJb3B0aW9uIGNhdC1ibG9iLWZkPTMKKwljYXQtYmxvYiAkYmxvYgorCUVPRgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuMyAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnUjogcHJpbnQgbWFyayBmb3IgbmV3IGJsb2InICcKKwllY2hvICJlZmZsdWVudGlzaCIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA+ZXhwZWN0ICYmCisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9NiA2PmFjdHVhbCA8PC1cRU9GICYmCisJYmxvYgorCW1hcmsgOjEKKwlkYXRhIDw8QkxPQl9FTkQKKwllZmZsdWVudGlzaAorCUJMT0JfRU5ECisJZ2V0LW1hcmsgOjEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdSOiBwcmludCBuZXcgYmxvYicgJworCWJsb2I9JChlY2hvICJ5ZXAgeWVwIHllcCIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkke2Jsb2J9IGJsb2IgMTIKKwl5ZXAgeWVwIHllcAorCisJRU9GCisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9NiA2PmFjdHVhbCA8PC1cRU9GICYmCisJYmxvYgorCW1hcmsgOjEKKwlkYXRhIDw8QkxPQl9FTkQKKwl5ZXAgeWVwIHllcAorCUJMT0JfRU5ECisJY2F0LWJsb2IgOjEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdSOiBwcmludCBuZXcgYmxvYiBieSBzaGExJyAnCisJYmxvYj0kKGVjaG8gImEgbmV3IGJsb2IgbmFtZWQgYnkgc2hhMSIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkke2Jsb2J9IGJsb2IgMjUKKwlhIG5ldyBibG9iIG5hbWVkIGJ5IHNoYTEKKworCUVPRgorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTYgNj5hY3R1YWwgPDwtRU9GICYmCisJYmxvYgorCWRhdGEgPDxCTE9CX0VORAorCWEgbmV3IGJsb2IgbmFtZWQgYnkgc2hhMQorCUJMT0JfRU5ECisJY2F0LWJsb2IgJGJsb2IKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBiaWcgZmlsZScgJworCSgKKwkJZWNobyAidGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZyIgPmJpZyAmJgorCQlmb3IgaSBpbiAxIDIgMworCQlkbworCQkJY2F0IGJpZyBiaWcgYmlnIGJpZyA+YmlnZ2VyICYmCisJCQljYXQgYmlnZ2VyIGJpZ2dlciBiaWdnZXIgYmlnZ2VyID5iaWcgfHwKKwkJCWV4aXQKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogcHJpbnQgdHdvIGJsb2JzIHRvIHN0ZG91dCcgJworCWJsb2IxPSQoZ2l0IGhhc2gtb2JqZWN0IGJpZykgJiYKKwlibG9iMV9sZW49JCh3YyAtYyA8YmlnKSAmJgorCWJsb2IyPSQoZWNobyBoZWxsbyB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSAmJgorCXsKKwkJZWNobyAke2Jsb2IxfSBibG9iICRibG9iMV9sZW4gJiYKKwkJY2F0IGJpZyAmJgorCQljYXQgPDwtRU9GCisKKwkJJHtibG9iMn0gYmxvYiA2CisJCWhlbGxvCisKKwkJRU9GCisJfSA+ZXhwZWN0ICYmCisJeworCQljYXQgPDwtXEVORF9QQVJUMSAmJgorCQkJYmxvYgorCQkJbWFyayA6MQorCQkJZGF0YSA8PGRhdGFfZW5kCisJCUVORF9QQVJUMQorCQljYXQgYmlnICYmCisJCWNhdCA8PC1cRU9GCisJCQlkYXRhX2VuZAorCQkJYmxvYgorCQkJbWFyayA6MgorCQkJZGF0YSA8PGRhdGFfZW5kCisJCQloZWxsbworCQkJZGF0YV9lbmQKKwkJCWNhdC1ibG9iIDoxCisJCQljYXQtYmxvYiA6MgorCQlFT0YKKwl9IHwKKwlnaXQgZmFzdC1pbXBvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdSOiBjb3B5IHVzaW5nIGNhdC1maWxlJyAnCisJZXhwZWN0X2lkPSQoZ2l0IGhhc2gtb2JqZWN0IGJpZykgJiYKKwlleHBlY3RfbGVuPSQod2MgLWMgPGJpZykgJiYKKwllY2hvICRleHBlY3RfaWQgYmxvYiAkZXhwZWN0X2xlbiA+ZXhwZWN0LnJlc3BvbnNlICYmCisKKwlybSAtZiBibG9icyAmJgorCisJbWtmaWZvIGJsb2JzICYmCisJKAorCQlleHBvcnQgR0lUX0NPTU1JVFRFUl9OQU1FIEdJVF9DT01NSVRURVJfRU1BSUwgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisJCWNhdCA8PC1cRU9GICYmCisJCWZlYXR1cmUgY2F0LWJsb2IKKwkJYmxvYgorCQltYXJrIDoxCisJCWRhdGEgPDxCTE9CCisJCUVPRgorCQljYXQgYmlnICYmCisJCWNhdCA8PC1cRU9GICYmCisJCUJMT0IKKwkJY2F0LWJsb2IgOjEKKwkJRU9GCisKKwkJcmVhZCBibG9iX2lkIHR5cGUgc2l6ZSA8JjMgJiYKKwkJZWNobyAiJGJsb2JfaWQgJHR5cGUgJHNpemUiID5yZXNwb25zZSAmJgorCQl0ZXN0X2NvcHlfYnl0ZXMgJHNpemUgPmJsb2IgPCYzICYmCisJCXJlYWQgbmV3bGluZSA8JjMgJiYKKworCQljYXQgPDwtRU9GICYmCisJCWNvbW1pdCByZWZzL2hlYWRzL2NvcGllZAorCQljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwkJZGF0YSA8PENPTU1JVAorCQljb3B5IGJpZyBmaWxlIGFzIGZpbGUzCisJCUNPTU1JVAorCQlNIDY0NCBpbmxpbmUgZmlsZTMKKwkJZGF0YSA8PEJMT0IKKwkJRU9GCisJCWNhdCBibG9iICYmCisJCWVjaG8gQkxPQgorCSkgMzxibG9icyB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9MyAzPmJsb2JzICYmCisJZ2l0IHNob3cgY29waWVkOmZpbGUzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmVzcG9uc2UgcmVzcG9uc2UgJiYKKwl0ZXN0X2NtcCBiaWcgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnUjogcHJpbnQgYmxvYiBtaWQtY29tbWl0JyAnCisJcm0gLWYgYmxvYnMgJiYKKwllY2hvICJBIGJsb2IgZnJvbSBfYmVmb3JlXyB0aGUgY29tbWl0LiIgPmV4cGVjdCAmJgorCW1rZmlmbyBibG9icyAmJgorCSgKKwkJZXhlYyAzPGJsb2JzICYmCisJCWNhdCA8PC1FT0YgJiYKKwkJZmVhdHVyZSBjYXQtYmxvYgorCQlibG9iCisJCW1hcmsgOjEKKwkJZGF0YSA8PEJMT0IKKwkJQSBibG9iIGZyb20gX2JlZm9yZV8gdGhlIGNvbW1pdC4KKwkJQkxPQgorCQljb21taXQgcmVmcy9oZWFkcy90ZW1wb3JhcnkKKwkJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJCWRhdGEgPDxDT01NSVQKKwkJRW1wdHkgY29tbWl0CisJCUNPTU1JVAorCQljYXQtYmxvYiA6MQorCQlFT0YKKworCQlyZWFkIGJsb2JfaWQgdHlwZSBzaXplIDwmMyAmJgorCQl0ZXN0X2NvcHlfYnl0ZXMgJHNpemUgPmFjdHVhbCA8JjMgJiYKKwkJcmVhZCBuZXdsaW5lIDwmMyAmJgorCisJCWVjaG8KKwkpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1jYXQtYmxvYi1mZD0zIDM+YmxvYnMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnUjogcHJpbnQgc3RhZ2VkIGJsb2Igd2l0aGluIGNvbW1pdCcgJworCXJtIC1mIGJsb2JzICYmCisJZWNobyAiQSBibG9iIGZyb20gX3dpdGhpbl8gdGhlIGNvbW1pdC4iID5leHBlY3QgJiYKKwlta2ZpZm8gYmxvYnMgJiYKKwkoCisJCWV4ZWMgMzxibG9icyAmJgorCQljYXQgPDwtRU9GICYmCisJCWZlYXR1cmUgY2F0LWJsb2IKKwkJY29tbWl0IHJlZnMvaGVhZHMvd2l0aGluCisJCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCQlkYXRhIDw8Q09NTUlUCisJCUVtcHR5IGNvbW1pdAorCQlDT01NSVQKKwkJTSA2NDQgaW5saW5lIHdpdGhpbgorCQlkYXRhIDw8QkxPQgorCQlBIGJsb2IgZnJvbSBfd2l0aGluXyB0aGUgY29tbWl0LgorCQlCTE9CCisJCUVPRgorCisJCXRvX2dldD0kKAorCQkJZWNobyAiQSBibG9iIGZyb20gX3dpdGhpbl8gdGhlIGNvbW1pdC4iIHwKKwkJCWdpdCBoYXNoLW9iamVjdCAtLXN0ZGluCisJCSkgJiYKKwkJZWNobyAiY2F0LWJsb2IgJHRvX2dldCIgJiYKKworCQlyZWFkIGJsb2JfaWQgdHlwZSBzaXplIDwmMyAmJgorCQl0ZXN0X2NvcHlfYnl0ZXMgJHNpemUgPmFjdHVhbCA8JjMgJiYKKwkJcmVhZCBuZXdsaW5lIDwmMyAmJgorCisJCWVjaG8gZGVsZXRlYWxsCisJKSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9MyAzPmJsb2JzICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBxdWlldCBvcHRpb24gcmVzdWx0cyBpbiBubyBzdGF0cyBiZWluZyBvdXRwdXQnICcKKwljYXQgPmlucHV0IDw8LUVPRiAmJgorCW9wdGlvbiBnaXQgcXVpZXQKKwlibG9iCisJZGF0YSAzCisJaGkKKworCUVPRgorCisJZ2l0IGZhc3QtaW1wb3J0IDI+b3V0cHV0IDxpbnB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZmVhdHVyZSBkb25lIG1lYW5zIHRlcm1pbmF0aW5nICJkb25lIiBpcyBtYW5kYXRvcnknICcKKwllY2hvIGZlYXR1cmUgZG9uZSB8IHRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWRvbmUgPC9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiB0ZXJtaW5hdGluZyAiZG9uZSIgd2l0aCB0cmFpbGluZyBnaWJiZXJpc2ggaXMgb2snICcKKwlnaXQgZmFzdC1pbXBvcnQgPDwtXEVPRiAmJgorCWZlYXR1cmUgZG9uZQorCWRvbmUKKwl0cmFpbGluZyBnaWJiZXJpc2gKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgPDwtXEVPRgorCWRvbmUKKwltb3JlIHRyYWlsaW5nIGdpYmJlcmlzaAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiB0ZXJtaW5hdGluZyAiZG9uZSIgd2l0aGluIGNvbW1pdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJaGVsbG8uYworCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJaGVsbG8yLmMKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgPDwtRU9GICYmCisJY29tbWl0IHJlZnMvaGVhZHMvZG9uZS1lbmRzCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PEVPVAorCUNvbW1pdCB0ZXJtaW5hdGVkIGJ5ICJkb25lIiBjb21tYW5kCisJRU9UCisJTSAxMDA2NDQgaW5saW5lIGhlbGxvLmMKKwlkYXRhIDw8RU9UCisJSGVsbG8sIHdvcmxkLgorCUVPVAorCUMgaGVsbG8uYyBoZWxsbzIuYworCWRvbmUKKwlFT0YKKwlnaXQgcmV2LWxpc3QgZG9uZS1lbmRzIHwKKwlnaXQgZGlmZi10cmVlIC1yIC0tc3RkaW4gLS1yb290IC0tYWx3YXlzIHwKKwlzZWQgLWUgInMvJE9JRF9SRUdFWC9PQkpJRC9nIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBkaWUgb24gdW5rbm93biBvcHRpb24nICcKKwljYXQgPmlucHV0IDw8LUVPRiAmJgorCW9wdGlvbiBnaXQgbm9uLWV4aXN0aW5nLW9wdGlvbgorCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiB1bmtub3duIGNvbW1hbmRsaW5lIG9wdGlvbnMgYXJlIHJlamVjdGVkJyAnXAorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLW5vbi1leGlzdGluZy1vcHRpb24gPCAvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZGllIG9uIGludmFsaWQgb3B0aW9uIGFyZ3VtZW50JyAnCisJZWNobyAib3B0aW9uIGdpdCBhY3RpdmUtYnJhbmNoZXM9LTUiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgJiYKKwllY2hvICJvcHRpb24gZ2l0IGRlcHRoPSIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWRlcHRoPSI1IGVsZXBoYW50cyIgPC9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBpZ25vcmUgbm9uLWdpdCBvcHRpb25zJyAnCisJY2F0ID5pbnB1dCA8PC1FT0YgJiYKKwlvcHRpb24gbm9uLWV4aXN0aW5nLXZjcyBub24tZXhpc3Rpbmctb3B0aW9uCisJRU9GCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGNvcnJ1cHQgbGluZXMgZG8gbm90IG1lc3MgbWFya3MgZmlsZScgJworCXJtIC1mIGlvLm1hcmtzICYmCisJYmxvYj0kKGVjaG8gaGkgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisJOjEgJGJsb2IKKwk6MiAkYmxvYgorCUVPRgorCWNwIGV4cGVjdCBpby5tYXJrcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1pby5tYXJrcyAtLWV4cG9ydC1tYXJrcz1pby5tYXJrcyA8PC1cRU9GICYmCisKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgaW8ubWFya3MKKycKKworIyMKKyMjIFI6IHZlcnkgbGFyZ2UgYmxvYnMKKyMjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBibG9iIGJpZ2dlciB0aGFuIHRocmVzaG9sZCcgJworCWJsb2JzaXplPSQoKDIqMTAyNCoxMDI0ICsgNTMpKSAmJgorCXRlc3QtdG9vbCBnZW5yYW5kb20gYmFyICRibG9ic2l6ZSA+ZXhwZWN0ICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9iaWctZmlsZQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlSIC0gYmlnIGZpbGUKKwlDT01NSVQKKworCU0gNjQ0IGlubGluZSBiaWcxCisJZGF0YSAkYmxvYnNpemUKKwlJTlBVVF9FTkQKKwljYXQgZXhwZWN0ID4+aW5wdXQgJiYKKwljYXQgPj5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwlNIDY0NCBpbmxpbmUgYmlnMgorCWRhdGEgJGJsb2JzaXplCisJSU5QVVRfRU5ECisJY2F0IGV4cGVjdCA+PmlucHV0ICYmCisJZWNobyA+PmlucHV0ICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIFIgJiYKKwlnaXQgLS1naXQtZGlyPVIvLmdpdCBjb25maWcgZmFzdGltcG9ydC51bnBhY2tMaW1pdCAwICYmCisJZ2l0IC0tZ2l0LWRpcj1SLy5naXQgZmFzdC1pbXBvcnQgLS1iaWctZmlsZS10aHJlc2hvbGQ9MSA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogdmVyaWZ5IGNyZWF0ZWQgcGFjaycgJworCSgKKwkJY2QgUiAmJgorCQl2ZXJpZnlfcGFja3MgLXYgPiAuLi92ZXJpZnkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IHZlcmlmeSB3cml0dGVuIG9iamVjdHMnICcKKwlnaXQgLS1naXQtZGlyPVIvLmdpdCBjYXQtZmlsZSBibG9iIGJpZy1maWxlOmJpZzEgPmFjdHVhbCAmJgorCXRlc3RfY21wX2JpbiBleHBlY3QgYWN0dWFsICYmCisJYT0kKGdpdCAtLWdpdC1kaXI9Ui8uZ2l0IHJldi1wYXJzZSBiaWctZmlsZTpiaWcxKSAmJgorCWI9JChnaXQgLS1naXQtZGlyPVIvLmdpdCByZXYtcGFyc2UgYmlnLWZpbGU6YmlnMikgJiYKKwl0ZXN0ICRhID0gJGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogYmxvYiBhcHBlYXJzIG9ubHkgb25jZScgJworCW49JChncmVwICRhIHZlcmlmeSB8IHdjIC1sKSAmJgorCXRlc3QgMSA9ICRuCisnCisKKyMjIworIyMjIHNlcmllcyBTCisjIyMKKyMKKyMgTWFrZSBzdXJlIG1pc3Npbmcgc3BhY2VzIGFuZCBFT0xzIGFmdGVyIG1hcmsgcmVmZXJlbmNlcworIyBjYXVzZSBlcnJvcnMuCisjCisjIFNldHVwOgorIworIyAgIDEtLTItLTQKKyMgICAgXCAgIC8KKyMgICAgIC0zLQorIworIyAgIGNvbW1pdCBtYXJrczogIDMwMSwgMzAyLCAzMDMsIDMwNAorIyAgIGJsb2IgbWFya3M6ICAgICAgICAgICAgICA0MDMsIDQwNCwgcmVzcC4KKyMgICBub3RlIG1hcms6ICAgICAgICAgIDIwMgorIworIyBUaGUgZXJyb3IgbWVzc2FnZSB3aGVuIGEgc3BhY2UgaXMgbWlzc2luZyBub3QgYXQgdGhlCisjIGVuZCBvZiB0aGUgbGluZSBpczoKKyMKKyMgICBNaXNzaW5nIHNwYWNlIGFmdGVyIC4uCisjCisjIG9yIHdoZW4gZXh0cmEgY2hhcmFjdGVycyBjb21lIGFmdGVyIHRoZSBtYXJrIGF0IHRoZSBlbmQKKyMgb2YgdGhlIGxpbmU6CisjCisjICAgR2FyYmFnZSBhZnRlciAuLgorIworIyBvciB3aGVuIHRoZSBkYXRhcmVmIGlzIG5laXRoZXIgImlubGluZSAiIG9yIGEga25vd24gU0hBMSwKKyMKKyMgICBJbnZhbGlkIGRhdGFyZWYgLi4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IGluaXRpYWxpemUgZm9yIFMgdGVzdHMnICcKKwl0ZXN0X3RpY2sgJiYKKworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvUworCW1hcmsgOjMwMQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb21taXQgMQorCUNPTU1JVAorCU0gMTAwNjQ0IGlubGluZSBoZWxsby5jCisJZGF0YSA8PEJMT0IKKwlibG9iIDEKKwlCTE9CCisKKwljb21taXQgcmVmcy9oZWFkcy9TCisJbWFyayA6MzAyCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvbW1pdCAyCisJQ09NTUlUCisJZnJvbSA6MzAxCisJTSAxMDA2NDQgaW5saW5lIGhlbGxvLmMKKwlkYXRhIDw8QkxPQgorCWJsb2IgMgorCUJMT0IKKworCWJsb2IKKwltYXJrIDo0MDMKKwlkYXRhIDw8QkxPQgorCWJsb2IgMworCUJMT0IKKworCWJsb2IKKwltYXJrIDoyMDIKKwlkYXRhIDw8QkxPQgorCW5vdGUgMgorCUJMT0IKKwlJTlBVVF9FTkQKKworCWdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1tYXJrcyA8aW5wdXQKKycKKworIworIyBmaWxlbW9kaWZ5LCB0aHJlZSBkYXRhcmVmcworIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogZmlsZW1vZGlmeSB3aXRoIGdhcmJhZ2UgYWZ0ZXIgbWFyayBtdXN0IGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3MgPDwtRU9GIDI+ZXJyICYmCisJY29tbWl0IHJlZnMvaGVhZHMvUworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb21taXQgTgorCUNPTU1JVAorCU0gMTAwNjQ0IDo0MDN4IGhlbGxvLmMKKwlFT0YKKwl0ZXN0X2kxOG5ncmVwICJzcGFjZSBhZnRlciBtYXJrIiBlcnIKKycKKworIyBpbmxpbmUgaXMgbWlzc3BlbGxlZDsgZmFzdC1pbXBvcnQgdGhpbmtzIGl0IGlzIHNvbWUgdW5rbm93biBkYXRhcmVmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBmaWxlbW9kaWZ5IHdpdGggZ2FyYmFnZSBhZnRlciBpbmxpbmUgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IE4KKwlDT01NSVQKKwlNIDEwMDY0NCBpbmxpbmVYIGhlbGxvLmMKKwlkYXRhIDw8QkxPQgorCWlubGluZQorCUJMT0IKKwlFT0YKKwl0ZXN0X2kxOG5ncmVwICJudmFsaWQgZGF0YXJlZiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IGZpbGVtb2RpZnkgd2l0aCBnYXJiYWdlIGFmdGVyIHNoYTEgbXVzdCBmYWlsJyAnCisJc2hhMT0kKGdyZXAgOjQwMyBtYXJrcyB8IGN1dCAtZFwgIC1mMikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3MgPDwtRU9GIDI+ZXJyICYmCisJY29tbWl0IHJlZnMvaGVhZHMvUworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb21taXQgTgorCUNPTU1JVAorCU0gMTAwNjQ0ICR7c2hhMX14IGhlbGxvLmMKKwlFT0YKKwl0ZXN0X2kxOG5ncmVwICJzcGFjZSBhZnRlciBTSEExIiBlcnIKKycKKworIworIyBub3RlbW9kaWZ5LCB0aHJlZSB3YXlzIHRvIHNheSBkYXRhcmVmCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBub3RlbW9kaWZ5IHdpdGggZ2FyYmFnZSBhZnRlciBtYXJrIGRhdGFyZWYgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IFMgbm90ZSBkYXRhcmVmIG1hcmtyZWYKKwlDT01NSVQKKwlOIDoyMDJ4IDozMDIKKwlFT0YKKwl0ZXN0X2kxOG5ncmVwICJzcGFjZSBhZnRlciBtYXJrIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogbm90ZW1vZGlmeSB3aXRoIGdhcmJhZ2UgYWZ0ZXIgaW5saW5lIGRhdGFyZWYgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IFMgbm90ZSBkYXRhcmVmIGlubGluZQorCUNPTU1JVAorCU4gaW5saW5lWCA6MzAyCisJZGF0YSA8PEJMT0IKKwlub3RlIGJsb2IKKwlCTE9CCisJRU9GCisJdGVzdF9pMThuZ3JlcCAibnZhbGlkIGRhdGFyZWYiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBub3RlbW9kaWZ5IHdpdGggZ2FyYmFnZSBhZnRlciBzaGExIGRhdGFyZWYgbXVzdCBmYWlsJyAnCisJc2hhMT0kKGdyZXAgOjIwMiBtYXJrcyB8IGN1dCAtZFwgIC1mMikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3MgPDwtRU9GIDI+ZXJyICYmCisJY29tbWl0IHJlZnMvaGVhZHMvUworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb21taXQgUyBub3RlIGRhdGFyZWYgc2hhMQorCUNPTU1JVAorCU4gJHtzaGExfXggOjMwMgorCUVPRgorCXRlc3RfaTE4bmdyZXAgInNwYWNlIGFmdGVyIFNIQTEiIGVycgorJworCisjCisjIG5vdGVtb2RpZnksIG1hcmsgaW4gY29tbWl0LWlzaAorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogbm90ZW1vZGlmeSB3aXRoIGdhcmJhZ2UgYWZ0ZXIgbWFyayBjb21taXQtaXNoIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwljb21taXQgcmVmcy9oZWFkcy9Tbm90ZXMKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IFMgbm90ZSBjb21taXQtaXNoCisJQ09NTUlUCisJTiA6MjAyIDozMDJ4CisJRU9GCisJdGVzdF9pMThuZ3JlcCAiYWZ0ZXIgbWFyayIgZXJyCisnCisKKyMKKyMgZnJvbQorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogZnJvbSB3aXRoIGdhcmJhZ2UgYWZ0ZXIgbWFyayBtdXN0IGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBcCisJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIC0tZXhwb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MyCisJbWFyayA6MzAzCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvbW1pdCAzCisJQ09NTUlUCisJZnJvbSA6MzAxeAorCU0gMTAwNjQ0IDo0MDMgaGVsbG8uYworCUVPRgorCisKKwkjIGdvIGNyZWF0ZSB0aGUgY29tbWl0LCBuZWVkIGl0IGZvciBtZXJnZSB0ZXN0CisJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIC0tZXhwb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MyCisJbWFyayA6MzAzCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvbW1pdCAzCisJQ09NTUlUCisJZnJvbSA6MzAxCisJTSAxMDA2NDQgOjQwMyBoZWxsby5jCisJRU9GCisKKwkjIG5vdyBldmFsdWF0ZSB0aGUgZXJyb3IKKwl0ZXN0X2kxOG5ncmVwICJhZnRlciBtYXJrIiBlcnIKKycKKworCisjCisjIG1lcmdlCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBtZXJnZSB3aXRoIGdhcmJhZ2UgYWZ0ZXIgbWFyayBtdXN0IGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3MgPDwtRU9GIDI+ZXJyICYmCisJY29tbWl0IHJlZnMvaGVhZHMvUworCW1hcmsgOjMwNAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwltZXJnZSA0CisJQ09NTUlUCisJZnJvbSA6MzAyCisJbWVyZ2UgOjMwM3gKKwlNIDEwMDY0NCA6NDAzIGhlbGxvLmMKKwlFT0YKKwl0ZXN0X2kxOG5ncmVwICJhZnRlciBtYXJrIiBlcnIKKycKKworIworIyB0YWcsIGZyb20gbWFya3JlZgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogdGFnIHdpdGggZ2FyYmFnZSBhZnRlciBtYXJrIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwl0YWcgcmVmcy90YWdzL1N0YWcKKwlmcm9tIDozMDJ4CisJdGFnZ2VyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PFRBRworCXRhZyBTCisJVEFHCisJRU9GCisJdGVzdF9pMThuZ3JlcCAiYWZ0ZXIgbWFyayIgZXJyCisnCisKKyMKKyMgY2F0LWJsb2IgbWFya3JlZgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogY2F0LWJsb2Igd2l0aCBnYXJiYWdlIGFmdGVyIG1hcmsgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNhdC1ibG9iIDo0MDN4CisJRU9GCisJdGVzdF9pMThuZ3JlcCAiYWZ0ZXIgbWFyayIgZXJyCisnCisKKyMKKyMgbHMgbWFya3JlZgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogbHMgd2l0aCBnYXJiYWdlIGFmdGVyIG1hcmsgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWxzIDozMDJ4IGhlbGxvLmMKKwlFT0YKKwl0ZXN0X2kxOG5ncmVwICJzcGFjZSBhZnRlciBtYXJrIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogbHMgd2l0aCBnYXJiYWdlIGFmdGVyIHNoYTEgbXVzdCBmYWlsJyAnCisJc2hhMT0kKGdyZXAgOjMwMiBtYXJrcyB8IGN1dCAtZFwgIC1mMikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3MgPDwtRU9GIDI+ZXJyICYmCisJbHMgJHtzaGExfXggaGVsbG8uYworCUVPRgorCXRlc3RfaTE4bmdyZXAgInNwYWNlIGFmdGVyIHRyZWUtaXNoIiBlcnIKKycKKworIyMjCisjIyMgc2VyaWVzIFQgKGxzKQorIyMjCisjIFNldHVwIGlzIGNhcnJpZWQgb3ZlciBmcm9tIHNlcmllcyBTLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUOiBscyByb290IHRyZWUnICcKKwlzZWQgLWUgInMvWlwkLy8iID5leHBlY3QgPDwtRU9GICYmCisJMDQwMDAwIHRyZWUgJChnaXQgcmV2LXBhcnNlIFNee3RyZWV9KQlaCisJRU9GCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgUykgJiYKKwlnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3MgPDwtRU9GID5hY3R1YWwgJiYKKwlscyAkc2hhMSAiIgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVDogZGVsZXRlIGJyYW5jaCcgJworCWdpdCBicmFuY2ggdG8tZGVsZXRlICYmCisJZ2l0IGZhc3QtaW1wb3J0IDw8LUVPRiAmJgorCXJlc2V0IHJlZnMvaGVhZHMvdG8tZGVsZXRlCisJZnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3RvLWRlbGV0ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUOiBlbXB0eSByZXNldCBkb2VzbnQgZGVsZXRlIGJyYW5jaCcgJworCWdpdCBicmFuY2ggbm90LXRvLWRlbGV0ZSAmJgorCWdpdCBmYXN0LWltcG9ydCA8PC1FT0YgJiYKKwlyZXNldCByZWZzL2hlYWRzL25vdC10by1kZWxldGUKKwlFT0YKKwlnaXQgc2hvdy1yZWYgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbm90LXRvLWRlbGV0ZQorJworCisjIyMKKyMjIyBzZXJpZXMgVSAoZmlsZWRlbGV0ZSkKKyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdVOiBpbml0aWFsaXplIGZvciBVIHRlc3RzJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9VCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXRlc3Qgc2V0dXAKKwlDT01NSVQKKwlNIDEwMDY0NCBpbmxpbmUgaGVsbG8uYworCWRhdGEgPDxCTE9CCisJYmxvYiAxCisJQkxPQgorCU0gMTAwNjQ0IGlubGluZSBnb29kL25pZ2h0LnR4dAorCWRhdGEgPDxCTE9CCisJc2xlZXAgd2VsbAorCUJMT0IKKwlNIDEwMDY0NCBpbmxpbmUgZ29vZC9ieWUudHh0CisJZGF0YSA8PEJMT0IKKwlhdSByZXZvaXIKKwlCTE9CCisKKwlJTlBVVF9FTkQKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVTogZmlsZWRlbGV0ZSBmaWxlIHN1Y2NlZWRzJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9VCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWRlbGV0ZSBnb29kL25pZ2h0LnR4dAorCUNPTU1JVAorCWZyb20gcmVmcy9oZWFkcy9VXjAKKwlEIGdvb2QvbmlnaHQudHh0CisKKwlJTlBVVF9FTkQKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVTogdmFsaWRhdGUgZmlsZSBkZWxldGUgcmVzdWx0JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjEwMDY0NCAwMDAwMDAgMjkwN2ViYjRiZjg1ZDkxYmYwNzE2YmIzYmQ4YTY4ZWY0OGQ2ZGE3NiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJZ29vZC9uaWdodC50eHQKKwlFT0YKKworCWdpdCBkaWZmLXRyZWUgLU0gLXIgVV4xIFUgPmFjdHVhbCAmJgorCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1U6IGZpbGVkZWxldGUgZGlyZWN0b3J5IHN1Y2NlZWRzJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9VCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWRlbGV0ZSBnb29kIGRpcgorCUNPTU1JVAorCWZyb20gcmVmcy9oZWFkcy9VXjAKKwlEIGdvb2QKKworCUlOUFVUX0VORAorCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdVOiB2YWxpZGF0ZSBkaXJlY3RvcnkgZGVsZXRlIHJlc3VsdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCToxMDA2NDQgMDAwMDAwIDY5Y2I3NTc5MmY1NTEyM2Q4Mzg5YzE1NmIwYjQxYzJmZjAwZWQ1MDcgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWdvb2QvYnllLnR4dAorCUVPRgorCisJZ2l0IGRpZmYtdHJlZSAtTSAtciBVXjEgVSA+YWN0dWFsICYmCisKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVTogZmlsZWRlbGV0ZSByb290IHN1Y2NlZWRzJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9VCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCW11c3Qgc3VjY2VlZAorCUNPTU1JVAorCWZyb20gcmVmcy9oZWFkcy9VXjAKKwlEICIiCisKKwlJTlBVVF9FTkQKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVTogdmFsaWRhdGUgcm9vdCBkZWxldGUgcmVzdWx0JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjEwMDY0NCAwMDAwMDAgYzE4MTQ3ZGM2NDg0ODFlZWI2NWRjNWU2NjYyODQyOWE2NDg0MzMyNyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJaGVsbG8uYworCUVPRgorCisJZ2l0IGRpZmYtdHJlZSAtTSAtciBVXjEgVSA+YWN0dWFsICYmCisKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwKKycKKworIyMjCisjIyMgc2VyaWVzIFYgKGNoZWNrcG9pbnQpCisjIyMKKworIyBUaGUgY29tbWFuZHMgaW4gaW5wdXRfZmlsZSBzaG91bGQgbm90IHByb2R1Y2UgYW55IG91dHB1dCBvbiB0aGUgZmlsZQorIyBkZXNjcmlwdG9yIHNldCB3aXRoIC0tY2F0LWJsb2ItZmQgKG9yIHN0ZG91dCBpZiB1bnNwZWNpZmllZCkuCisjCisjIFRvIG1ha2Ugc3VyZSB5b3UncmUgb2JzZXJ2aW5nIHRoZSBzaWRlIGVmZmVjdHMgb2YgY2hlY2twb2ludCAqYmVmb3JlKgorIyBmYXN0LWltcG9ydCB0ZXJtaW5hdGVzIChhbmQgdGh1cyB3cml0ZXMgb3V0IGl0cyBzdGF0ZSksIGNoZWNrIHRoYXQgdGhlCisjIGZhc3QtaW1wb3J0IHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZyB1c2luZyBiYWNrZ3JvdW5kX2ltcG9ydF9zdGlsbF9ydW5uaW5nCisjICphZnRlciogZXZhbHVhdGluZyB0aGUgdGVzdCBjb25kaXRpb25zLgorYmFja2dyb3VuZF9pbXBvcnRfdGhlbl9jaGVja3BvaW50ICgpIHsKKwlvcHRpb25zPSQxCisJaW5wdXRfZmlsZT0kMgorCisJbWtmaWZvIFYuaW5wdXQKKwlleGVjIDg8PlYuaW5wdXQKKwlybSBWLmlucHV0CisKKwlta2ZpZm8gVi5vdXRwdXQKKwlleGVjIDk8PlYub3V0cHV0CisJcm0gVi5vdXRwdXQKKworCSgKKwkJZ2l0IGZhc3QtaW1wb3J0ICRvcHRpb25zIDwmOCA+JjkgJgorCQllY2hvICQhID4mOQorCQl3YWl0ICQhCisJCWVjaG8gPiYyICJiYWNrZ3JvdW5kIGZhc3QtaW1wb3J0IHRlcm1pbmF0ZWQgdG9vIGVhcmx5IHdpdGggZXhpdCBjb2RlICQ/IgorCQkjIFVuLWJsb2NrIHRoZSByZWFkIGxvb3AgaW4gdGhlIG1haW4gc2hlbGwgcHJvY2Vzcy4KKwkJZWNobyA+JjkgVU5FWFBFQ1RFRAorCSkgJgorCXNoX3BpZD0kIQorCXJlYWQgZmlfcGlkIDwmOQorCSMgV2UgZG9uJ3QgbWluZCBpZiBmYXN0LWltcG9ydCBoYXMgYWxyZWFkeSBkaWVkIGJ5IHRoZSB0aW1lIHRoZSB0ZXN0CisJIyBlbmRzLgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiCisJCWV4ZWMgOD4mLTsgZXhlYyA5PiYtOworCQlraWxsICRzaF9waWQgJiYgd2FpdCAkc2hfcGlkCisJCWtpbGwgJGZpX3BpZCAmJiB3YWl0ICRmaV9waWQKKwkJdHJ1ZSIKKworCSMgU3RhcnQgaW4gdGhlIGJhY2tncm91bmQgdG8gZW5zdXJlIHdlIGFkaGVyZSBzdHJpY3RseSB0byAoYmxvY2tpbmcpCisJIyBwaXBlcyB3cml0aW5nIHNlcXVlbmNlLiBXZSB3YW50IHRvIGFzc3VtZSB0aGF0IHRoZSB3cml0ZSBiZWxvdyBjb3VsZAorCSMgYmxvY2ssIGUuZy4gaWYgZmFzdC1pbXBvcnQgYmxvY2tzIHdyaXRpbmcgaXRzIG93biBvdXRwdXQgdG8gJjkKKwkjIGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhZGVyIG9uICY5IHlldC4KKwkoCisJCWNhdCAiJGlucHV0X2ZpbGUiCisJCWVjaG8gImNoZWNrcG9pbnQiCisJCWVjaG8gInByb2dyZXNzIGNoZWNrcG9pbnQiCisJKSA+JjggJgorCisJZXJyb3I9MSA7IyBhc3N1bWUgdGhlIHdvcnN0CisJd2hpbGUgcmVhZCBvdXRwdXQgPCY5CisJZG8KKwkJaWYgdGVzdCAiJG91dHB1dCIgPSAicHJvZ3Jlc3MgY2hlY2twb2ludCIKKwkJdGhlbgorCQkJZXJyb3I9MAorCQkJYnJlYWsKKwkJZWxpZiB0ZXN0ICIkb3V0cHV0IiA9ICJVTkVYUEVDVEVEIgorCQl0aGVuCisJCQlicmVhaworCQlmaQorCQkjIG90aGVyd2lzZSBpZ25vcmUgY3J1ZnQKKwkJZWNobyA+JjIgImNydWZ0OiAkb3V0cHV0IgorCWRvbmUKKworCWlmIHRlc3QgJGVycm9yIC1lcSAxCisJdGhlbgorCQlmYWxzZQorCWZpCit9CisKK2JhY2tncm91bmRfaW1wb3J0X3N0aWxsX3J1bm5pbmcgKCkgeworCWlmICEga2lsbCAtMCAiJGZpX3BpZCIKKwl0aGVuCisJCWVjaG8gPiYyICJiYWNrZ3JvdW5kIGZhc3QtaW1wb3J0IHRlcm1pbmF0ZWQgdG9vIGVhcmx5IgorCQlmYWxzZQorCWZpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnVjogY2hlY2twb2ludCBoZWxwZXIgZG9lcyBub3QgZ2V0IHN0dWNrIHdpdGggZXh0cmEgb3V0cHV0JyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwlwcm9ncmVzcyBmb28KKwlwcm9ncmVzcyBiYXIKKworCUlOUFVUX0VORAorCisJYmFja2dyb3VuZF9pbXBvcnRfdGhlbl9jaGVja3BvaW50ICIiIGlucHV0ICYmCisJYmFja2dyb3VuZF9pbXBvcnRfc3RpbGxfcnVubmluZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ1Y6IGNoZWNrcG9pbnQgdXBkYXRlcyByZWZzIGFmdGVyIHJlc2V0JyAnCisJY2F0ID5pbnB1dCA8PC1cSU5QVVRfRU5EICYmCisJcmVzZXQgcmVmcy9oZWFkcy9WCisJZnJvbSByZWZzL2hlYWRzL1UKKworCUlOUFVUX0VORAorCisJYmFja2dyb3VuZF9pbXBvcnRfdGhlbl9jaGVja3BvaW50ICIiIGlucHV0ICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFYpIiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgVSkiICYmCisJYmFja2dyb3VuZF9pbXBvcnRfc3RpbGxfcnVubmluZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ1Y6IGNoZWNrcG9pbnQgdXBkYXRlcyByZWZzIGFuZCBtYXJrcyBhZnRlciBjb21taXQnICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1YKKwltYXJrIDoxCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSAwCisJZnJvbSByZWZzL2hlYWRzL1UKKworCUlOUFVUX0VORAorCisJYmFja2dyb3VuZF9pbXBvcnRfdGhlbl9jaGVja3BvaW50ICItLWV4cG9ydC1tYXJrcz1tYXJrcy5hY3R1YWwiIGlucHV0ICYmCisKKwllY2hvICI6MSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgVikiID5tYXJrcy5leHBlY3RlZCAmJgorCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFZeKSIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFUpIiAmJgorCXRlc3RfY21wIG1hcmtzLmV4cGVjdGVkIG1hcmtzLmFjdHVhbCAmJgorCWJhY2tncm91bmRfaW1wb3J0X3N0aWxsX3J1bm5pbmcKKycKKworIyBSZS1jcmVhdGUgdGhlIGV4YWN0IHNhbWUgY29tbWl0LCBidXQgb24gYSBkaWZmZXJlbnQgYnJhbmNoOiBubyBuZXcgb2JqZWN0IGlzCisjIGNyZWF0ZWQgaW4gdGhlIGRhdGFiYXNlLCBidXQgdGhlIHJlZnMgYW5kIG1hcmtzIHN0aWxsIG5lZWQgdG8gYmUgdXBkYXRlZC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnVjogY2hlY2twb2ludCB1cGRhdGVzIHJlZnMgYW5kIG1hcmtzIGFmdGVyIGNvbW1pdCAobm8gbmV3IG9iamVjdHMpJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9WMgorCW1hcmsgOjIKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDAKKwlmcm9tIHJlZnMvaGVhZHMvVQorCisJSU5QVVRfRU5ECisKKwliYWNrZ3JvdW5kX2ltcG9ydF90aGVuX2NoZWNrcG9pbnQgIi0tZXhwb3J0LW1hcmtzPW1hcmtzLmFjdHVhbCIgaW5wdXQgJiYKKworCWVjaG8gIjoyICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBWMikiID5tYXJrcy5leHBlY3RlZCAmJgorCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFYyKSIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFYpIiAmJgorCXRlc3RfY21wIG1hcmtzLmV4cGVjdGVkIG1hcmtzLmFjdHVhbCAmJgorCWJhY2tncm91bmRfaW1wb3J0X3N0aWxsX3J1bm5pbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdWOiBjaGVja3BvaW50IHVwZGF0ZXMgdGFncyBhZnRlciB0YWcnICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCXRhZyBWdGFnCisJZnJvbSByZWZzL2hlYWRzL1YKKwl0YWdnZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDAKKworCUlOUFVUX0VORAorCisJYmFja2dyb3VuZF9pbXBvcnRfdGhlbl9jaGVja3BvaW50ICIiIGlucHV0ICYmCisJZ2l0IHNob3ctcmVmIC1kIFZ0YWcgJiYKKwliYWNrZ3JvdW5kX2ltcG9ydF9zdGlsbF9ydW5uaW5nCisnCisKKyMjIworIyMjIHNlcmllcyBXIChnZXQtbWFyayBhbmQgZW1wdHkgb3JwaGFuIGNvbW1pdHMpCisjIyMKKworY2F0ID4+Vy1pbnB1dCA8PC1XX0lOUFVUX0VORAorCWNvbW1pdCByZWZzL2hlYWRzL1ctYnJhbmNoCisJbWFyayA6MQorCWF1dGhvciBGdWxsIE5hbWUgPHVzZXJAY29tcGFueS50bGQ+IDEwMDAwMDAwMDAgKzAxMDAKKwljb21taXR0ZXIgRnVsbCBOYW1lIDx1c2VyQGNvbXBhbnkudGxkPiAxMDAwMDAwMDAwICswMTAwCisJZGF0YSAyNworCUludGVudGlvbmFsbHkgZW1wdHkgY29tbWl0CisJTEZzZ2V0LW1hcmsgOjEKKwlXX0lOUFVUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnVzogZ2V0LW1hcmsgJiBlbXB0eSBvcnBoYW4gY29tbWl0IHdpdGggbm8gbmV3bGluZXMnICcKKwlzZWQgLWUgcy9MRnMvLyBXLWlucHV0IHwgdHIgTCAiXG4iIHwgZ2l0IGZhc3QtaW1wb3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdXOiBnZXQtbWFyayAmIGVtcHR5IG9ycGhhbiBjb21taXQgd2l0aCBvbmUgbmV3bGluZScgJworCXNlZCAtZSBzL0xGcy9MLyBXLWlucHV0IHwgdHIgTCAiXG4iIHwgZ2l0IGZhc3QtaW1wb3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdXOiBnZXQtbWFyayAmIGVtcHR5IG9ycGhhbiBjb21taXQgd2l0aCB1Z2x5IHNlY29uZCBuZXdsaW5lJyAnCisJIyBUZWNobmljYWxseSwgdGhpcyBzaG91bGQgZmFpbCBhcyBpdCBoYXMgdG9vIG1hbnkgbGluZWZlZWRzCisJIyBhY2NvcmRpbmcgdG8gdGhlIGdyYW1tYXIgaW4gZmFzdC1pbXBvcnQudHh0LiAgQnV0LCBmb3Igd2hhdGV2ZXIKKwkjIHJlYXNvbiwgaXQgd29ya3MuICBTaW5jZSB1c2luZyB0aGUgY29ycmVjdCBudW1iZXIgb2YgbmV3bGluZXMKKwkjIGRvZXMgbm90IHdvcmsgd2l0aCBvbGRlciAocHJlLTIuMjIpIHZlcnNpb25zIG9mIGdpdCwgYWxsb3cgYXBwcworCSMgdGhhdCB1c2VkIHRoaXMgc2Vjb25kLW5ld2xpbmUgd29ya2Fyb3VuZCB0byBrZWVwIHdvcmtpbmcgYnkKKwkjIGNoZWNraW5nIGl0IHdpdGggdGhpcyB0ZXN0Li4uCisJc2VkIC1lIHMvTEZzL0xMLyBXLWlucHV0IHwgdHIgTCAiXG4iIHwgZ2l0IGZhc3QtaW1wb3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdXOiBnZXQtbWFyayAmIGVtcHR5IG9ycGhhbiBjb21taXQgd2l0aCBlcnJvbmVvdXMgdGhpcmQgbmV3bGluZScgJworCSMgLi4uYnV0IGRvIE5PVCBhbGxvdyBtb3JlIGVtcHR5IGxpbmVzIHRoYW4gdGhhdCAoc2VlIHByZXZpb3VzIHRlc3QpLgorCXNlZCAtZSBzL0xGcy9MTEwvIFctaW5wdXQgfCB0ciBMICJcbiIgfCB0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQKKycKKworIyMjCisjIyMgc2VyaWVzIFggKG90aGVyIG5ldyBmZWF0dXJlcykKKyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdYOiBoYW5kbGluZyBlbmNvZGluZycgJworCXRlc3RfdGljayAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvZW5jb2RpbmcKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwllbmNvZGluZyBpc28tODg1OS03CisJZGF0YSA8PENPTU1JVAorCUlOUFVUX0VORAorCisJcHJpbnRmICJQaTogXDM2MFxuQ09NTUlUXG4iID4+aW5wdXQgJiYKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgY2F0LWZpbGUgLXAgZW5jb2RpbmcgfCBncmVwICQocHJpbnRmICJcMzYwIikgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVCIGVuY29kaW5nIHwgZ3JlcCAkKHByaW50ZiAiXDMxN1wyMDAiKQorJworCisjIyMKKyMjIyBzZXJpZXMgWSAoc3VibW9kdWxlcyBhbmQgaGFzaCBhbGdvcml0aG1zKQorIyMjCisKK2NhdCA+WS1zdWItaW5wdXQgPDxcWV9JTlBVVF9FTkQKK2Jsb2IKK21hcmsgOjEKK2RhdGEgNAorZm9vCisKK3Jlc2V0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK21hcmsgOjIKK2F1dGhvciBGdWxsIE5hbWUgPHVzZXJAY29tcGFueS50bGQ+IDEwMDAwMDAwMDAgKzAxMDAKK2NvbW1pdHRlciBGdWxsIE5hbWUgPHVzZXJAY29tcGFueS50bGQ+IDEwMDAwMDAwMDAgKzAxMDAKK2RhdGEgMjQKK1Rlc3Qgc3VibW9kdWxlIGNvbW1pdCAxCitNIDEwMDY0NCA6MSBmaWxlCisKK2Jsb2IKK21hcmsgOjMKK2RhdGEgOAorZm9vCitiYXIKKworY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCittYXJrIDo0CithdXRob3IgRnVsbCBOYW1lIDx1c2VyQGNvbXBhbnkudGxkPiAxMDAwMDAwMDAxICswMTAwCitjb21taXR0ZXIgRnVsbCBOYW1lIDx1c2VyQGNvbXBhbnkudGxkPiAxMDAwMDAwMDAxICswMTAwCitkYXRhIDI0CitUZXN0IHN1Ym1vZHVsZSBjb21taXQgMgorZnJvbSA6MgorTSAxMDA2NDQgOjMgZmlsZQorWV9JTlBVVF9FTkQKKworIyBOb3RlIHRoYXQgdGhlIHN1Ym1vZHVsZSBvYmplY3QgSURzIGFyZSBpbnRlbnRpb25hbGx5IG5vdCB0cmFuc2xhdGVkLgorY2F0ID5ZLW1haW4taW5wdXQgPDxcWV9JTlBVVF9FTkQKK2Jsb2IKK21hcmsgOjEKK2RhdGEgNAorZm9vCisKK3Jlc2V0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK21hcmsgOjIKK2F1dGhvciBGdWxsIE5hbWUgPHVzZXJAY29tcGFueS50bGQ+IDIwMDAwMDAwMDAgKzAxMDAKK2NvbW1pdHRlciBGdWxsIE5hbWUgPHVzZXJAY29tcGFueS50bGQ+IDIwMDAwMDAwMDAgKzAxMDAKK2RhdGEgMTQKK1Rlc3QgY29tbWl0IDEKK00gMTAwNjQ0IDoxIGZpbGUKKworYmxvYgorbWFyayA6MworZGF0YSA3MworW3N1Ym1vZHVsZSAic3ViMSJdCisJcGF0aCA9IHN1YjEKKwl1cmwgPSBodHRwczovL3ZvaWQuZXhhbXBsZS5jb20vbWFpbi5naXQKKworY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCittYXJrIDo0CithdXRob3IgRnVsbCBOYW1lIDx1c2VyQGNvbXBhbnkudGxkPiAyMDAwMDAwMDAxICswMTAwCitjb21taXR0ZXIgRnVsbCBOYW1lIDx1c2VyQGNvbXBhbnkudGxkPiAyMDAwMDAwMDAxICswMTAwCitkYXRhIDE0CitUZXN0IGNvbW1pdCAyCitmcm9tIDoyCitNIDEwMDY0NCA6MyAuZ2l0bW9kdWxlcworTSAxNjAwMDAgMDcxMmM1YmU3Y2Y2ODEzODhlMzU1ZWY0NzUyNWFhZjIzYWVlMWE2ZCBzdWIxCisKK2Jsb2IKK21hcmsgOjUKK2RhdGEgOAorZm9vCitiYXIKKworY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCittYXJrIDo2CithdXRob3IgRnVsbCBOYW1lIDx1c2VyQGNvbXBhbnkudGxkPiAyMDAwMDAwMDAyICswMTAwCitjb21taXR0ZXIgRnVsbCBOYW1lIDx1c2VyQGNvbXBhbnkudGxkPiAyMDAwMDAwMDAyICswMTAwCitkYXRhIDE0CitUZXN0IGNvbW1pdCAzCitmcm9tIDo0CitNIDEwMDY0NCA6NSBmaWxlCitNIDE2MDAwMCBmZjcyOWY1ZTYyZjcyYzBjMzk3ODIwN2Q5YTgwZTVmM2E2NWYxNGQ3IHN1YjEKK1lfSU5QVVRfRU5ECisKK2NhdCA+WS1tYXJrcyA8PFxZX0lOUFVUX0VORAorOjIgMDcxMmM1YmU3Y2Y2ODEzODhlMzU1ZWY0NzUyNWFhZjIzYWVlMWE2ZAorOjQgZmY3MjlmNWU2MmY3MmMwYzM5NzgyMDdkOWE4MGU1ZjNhNjVmMTRkNworWV9JTlBVVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnWTogc2V0dXAnICcKKwl0ZXN0X29pZF9jYWNoZSA8PC1FT0YKKwlZbWFzdGVyIHNoYTE6OWFmZWQyZjkxNjFkZGY0MTZjMGExODYzYjhiMDcyNWIwMDA3MDUwNAorCVltYXN0ZXIgc2hhMjU2OmMwYTEwMTBkYTFkZjE4N2IyZTI4NzY1NDc5M2RmMDFiNDY0YmQ2ZjhlM2YxN2ZjMTQ4MWE3ZGFkZjg0Y2FlZTMKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnWTogcmV3cml0ZSBzdWJtb2R1bGVzJyAnCisJZ2l0IGluaXQgbWFpbjEgJiYKKwkoCisJCWNkIG1haW4xICYmCisJCWdpdCBpbml0IHN1YjIgJiYKKwkJZ2l0IC1DIHN1YjIgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9Li4vc3ViMi1tYXJrcyA8Li4vWS1zdWItaW5wdXQgJiYKKwkJZ2l0IGZhc3QtaW1wb3J0IC0tcmV3cml0ZS1zdWJtb2R1bGVzLWZyb209c3ViOi4uL1ktbWFya3MgXAorCQkJLS1yZXdyaXRlLXN1Ym1vZHVsZXMtdG89c3ViOnN1YjItbWFya3MgPC4uL1ktbWFpbi1pbnB1dCAmJgorCQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSIgPSAiJCh0ZXN0X29pZCBZbWFzdGVyKSIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTMwMS1mYXN0LWltcG9ydC1ub3Rlcy5zaCBiL3QvdDkzMDEtZmFzdC1pbXBvcnQtbm90ZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2EyMjNkYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkzMDEtZmFzdC1pbXBvcnQtbm90ZXMuc2gKQEAgLTAsMCArMSw3MjQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgSm9oYW4gSGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCBmYXN0LWltcG9ydCBvZiBub3RlcyBvYmplY3RzJworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZmlyc3QgY29tbWl0CitDT01NSVQKKworTSA2NDQgaW5saW5lIGZvbworZGF0YSA8PEVPRgorZmlsZSBmb28gaW4gZmlyc3QgY29tbWl0CitFT0YKKworTSA3NTUgaW5saW5lIGJhcgorZGF0YSA8PEVPRgorZmlsZSBiYXIgaW4gZmlyc3QgY29tbWl0CitFT0YKKworTSA2NDQgaW5saW5lIGJhei94eXp6eQorZGF0YSA8PEVPRgorZmlsZSBiYXoveHl6enkgaW4gZmlyc3QgY29tbWl0CitFT0YKKworY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3NlY29uZCBjb21taXQKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZm9vCitkYXRhIDw8RU9GCitmaWxlIGZvbyBpbiBzZWNvbmQgY29tbWl0CitFT0YKKworTSA3NTUgaW5saW5lIGJhei94eXp6eQorZGF0YSA8PEVPRgorZmlsZSBiYXoveHl6enkgaW4gc2Vjb25kIGNvbW1pdAorRU9GCisKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCit0aGlyZCBjb21taXQKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZm9vCitkYXRhIDw8RU9GCitmaWxlIGZvbyBpbiB0aGlyZCBjb21taXQKK0VPRgorCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZm91cnRoIGNvbW1pdAorQ09NTUlUCisKK00gNzU1IGlubGluZSBiYXIKK2RhdGEgPDxFT0YKK2ZpbGUgYmFyIGluIGZvdXJ0aCBjb21taXQKK0VPRgorCitJTlBVVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIG1hc3RlciBicmFuY2gnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgd2hhdGNoYW5nZWQgbWFzdGVyCisnCisKK2NvbW1pdDQ9JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKQorY29tbWl0Mz0kKGdpdCByZXYtcGFyc2UgIiRjb21taXQ0XiIpCitjb21taXQyPSQoZ2l0IHJldi1wYXJzZSAiJGNvbW1pdDR+MiIpCitjb21taXQxPSQoZ2l0IHJldi1wYXJzZSAiJGNvbW1pdDR+MyIpCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvdGVzdAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmaXJzdCBub3RlcyBjb21taXQKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgJGNvbW1pdDEKK2RhdGEgPDxFT0YKK2ZpcnN0IG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRU9GCisKK00gNzU1IGlubGluZSAkY29tbWl0MgorZGF0YSA8PEVPRgorZmlyc3Qgbm90ZSBmb3Igc2Vjb25kIGNvbW1pdAorRU9GCisKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBmb3VydGggY29tbWl0CisgICAgdGhpcmQgY29tbWl0CisgICAgc2Vjb25kIGNvbW1pdAorICAgIGZpcnN0IG5vdGUgZm9yIHNlY29uZCBjb21taXQKKyAgICBmaXJzdCBjb21taXQKKyAgICBmaXJzdCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VYUEVDVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG5vdGVzIHdpdGggc2ltcGxlIE0gY29tbWFuZCcgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy90ZXN0IGdpdCBsb2cgfCBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitmZWF0dXJlIG5vdGVzCitjb21taXQgcmVmcy9ub3Rlcy90ZXN0Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3NlY29uZCBub3RlcyBjb21taXQKK0NPTU1JVAorCitmcm9tIHJlZnMvbm90ZXMvdGVzdF4wCitOIGlubGluZSAkY29tbWl0MworZGF0YSA8PEVPRgorZmlyc3Qgbm90ZSBmb3IgdGhpcmQgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDQKK2RhdGEgPDxFT0YKK2ZpcnN0IG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKK0VPRgorCitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgZm91cnRoIGNvbW1pdAorICAgIGZpcnN0IG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKKyAgICB0aGlyZCBjb21taXQKKyAgICBmaXJzdCBub3RlIGZvciB0aGlyZCBjb21taXQKKyAgICBzZWNvbmQgY29tbWl0CisgICAgZmlyc3Qgbm90ZSBmb3Igc2Vjb25kIGNvbW1pdAorICAgIGZpcnN0IGNvbW1pdAorICAgIGZpcnN0IG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRVhQRUNUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbm90ZXMgd2l0aCBzaW1wbGUgTiBjb21tYW5kJyAnCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL3Rlc3QgZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL3Rlc3QKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAordGhpcmQgbm90ZXMgY29tbWl0CitDT01NSVQKKworZnJvbSByZWZzL25vdGVzL3Rlc3ReMAorTiBpbmxpbmUgJGNvbW1pdDEKK2RhdGEgPDxFT0YKK3NlY29uZCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MgorZGF0YSA8PEVPRgorc2Vjb25kIG5vdGUgZm9yIHNlY29uZCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MworZGF0YSA8PEVPRgorc2Vjb25kIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorRU9GCisKK04gaW5saW5lICRjb21taXQ0CitkYXRhIDw8RU9GCitzZWNvbmQgbm90ZSBmb3IgZm91cnRoIGNvbW1pdAorRU9GCisKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBmb3VydGggY29tbWl0CisgICAgc2Vjb25kIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKKyAgICB0aGlyZCBjb21taXQKKyAgICBzZWNvbmQgbm90ZSBmb3IgdGhpcmQgY29tbWl0CisgICAgc2Vjb25kIGNvbW1pdAorICAgIHNlY29uZCBub3RlIGZvciBzZWNvbmQgY29tbWl0CisgICAgZmlyc3QgY29tbWl0CisgICAgc2Vjb25kIG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRVhQRUNUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZXhpc3Rpbmcgbm90ZXMgd2l0aCBOIGNvbW1hbmQnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvdGVzdCBnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvdGVzdAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmb3VydGggbm90ZXMgY29tbWl0CitDT01NSVQKKworZnJvbSByZWZzL25vdGVzL3Rlc3ReMAorTSA2NDQgaW5saW5lICQoZWNobyAiJGNvbW1pdDMiIHwgc2VkICJzfF4uLnwmL3wiKQorZGF0YSA8PEVPRgorcHJlZml4IG9mIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorRU9GCisKK00gNjQ0IGlubGluZSAkKGVjaG8gIiRjb21taXQ0IiB8IHNlZCAic3xeLi58Ji98IikKK2RhdGEgPDxFT0YKK3ByZWZpeCBvZiBub3RlIGZvciBmb3VydGggY29tbWl0CitFT0YKKworTSA2NDQgaW5saW5lICQoZWNobyAiJGNvbW1pdDQiIHwgc2VkICJzfF5cKC4uXClcKC4uXCl8XDEvXDIvfCIpCitkYXRhIDw8RU9GCitwcmUtcHJlZml4IG9mIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MQorZGF0YSA8PEVPRgordGhpcmQgbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDIKK2RhdGEgPDxFT0YKK3RoaXJkIG5vdGUgZm9yIHNlY29uZCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MworZGF0YSA8PEVPRgordGhpcmQgbm90ZSBmb3IgdGhpcmQgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDQKK2RhdGEgPDxFT0YKK3RoaXJkIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKK0VPRgorCisKK0lOUFVUX0VORAorCit3aGl0ZXNwYWNlPSIgICAgIgorCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBmb3VydGggY29tbWl0CisgICAgcHJlLXByZWZpeCBvZiBub3RlIGZvciBmb3VydGggY29tbWl0Ciskd2hpdGVzcGFjZQorICAgIHByZWZpeCBvZiBub3RlIGZvciBmb3VydGggY29tbWl0Ciskd2hpdGVzcGFjZQorICAgIHRoaXJkIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKKyAgICB0aGlyZCBjb21taXQKKyAgICBwcmVmaXggb2Ygbm90ZSBmb3IgdGhpcmQgY29tbWl0Ciskd2hpdGVzcGFjZQorICAgIHRoaXJkIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorICAgIHNlY29uZCBjb21taXQKKyAgICB0aGlyZCBub3RlIGZvciBzZWNvbmQgY29tbWl0CisgICAgZmlyc3QgY29tbWl0CisgICAgdGhpcmQgbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFWFBFQ1RfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBjb25jYXRlbmF0aW9uIG5vdGVzIHdpdGggTSBjb21tYW5kJyAnCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL3Rlc3QgZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL3Rlc3QKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZmlmdGggbm90ZXMgY29tbWl0CitDT01NSVQKKworZnJvbSByZWZzL25vdGVzL3Rlc3ReMAorZGVsZXRlYWxsCisKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBmb3VydGggY29tbWl0CisgICAgdGhpcmQgY29tbWl0CisgICAgc2Vjb25kIGNvbW1pdAorICAgIGZpcnN0IGNvbW1pdAorRVhQRUNUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCBkZWxldGVhbGwgYWxzbyByZW1vdmVzIG5vdGVzJyAnCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL3Rlc3QgZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL3Rlc3QKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorc2l4dGggbm90ZXMgY29tbWl0CitDT01NSVQKKworZnJvbSByZWZzL25vdGVzL3Rlc3ReMAorTSA2NDQgaW5saW5lICRjb21taXQxCitkYXRhIDw8RU9GCit0aGlyZCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VPRgorCitNIDY0NCBpbmxpbmUgJGNvbW1pdDMKK2RhdGEgPDxFT0YKK3RoaXJkIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorRU9GCisKK04gaW5saW5lICRjb21taXQxCitkYXRhIDw8RU9GCitmb3VydGggbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDMKK2RhdGEgPDxFT0YKK2ZvdXJ0aCBub3RlIGZvciB0aGlyZCBjb21taXQKK0VPRgorCitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgZm91cnRoIGNvbW1pdAorICAgIHRoaXJkIGNvbW1pdAorICAgIGZvdXJ0aCBub3RlIGZvciB0aGlyZCBjb21taXQKKyAgICBzZWNvbmQgY29tbWl0CisgICAgZmlyc3QgY29tbWl0CisgICAgZm91cnRoIG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRVhQRUNUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCBsYXRlciBOIGNvbW1hbmRzIG92ZXJyaWRlIGVhcmxpZXIgTSBjb21tYW5kcycgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy90ZXN0IGdpdCBsb2cgfCBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKworIyBXcml0ZSBmYXN0LWltcG9ydCBjb21tYW5kcyB0byBjcmVhdGUgdGhlIGdpdmVuIG51bWJlciBvZiBjb21taXRzCitmYXN0X2ltcG9ydF9jb21taXRzICgpIHsKKwlteV9yZWY9JDEKKwlteV9udW1fY29tbWl0cz0kMgorCW15X2FwcGVuZF90b19maWxlPSQzCisJbXlfaT0wCisJd2hpbGUgdGVzdCAkbXlfaSAtbHQgJG15X251bV9jb21taXRzCisJZG8KKwkJbXlfaT0kKCgkbXlfaSArIDEpKQorCQl0ZXN0X3RpY2sKKwkJY2F0ID4+IiRteV9hcHBlbmRfdG9fZmlsZSIgPDxJTlBVVF9FTkQKK2NvbW1pdCAkbXlfcmVmCittYXJrIDokbXlfaQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXQgIyRteV9pCitDT01NSVQKKworTSA2NDQgaW5saW5lIGZpbGUKK2RhdGEgPDxFT0YKK2ZpbGUgY29udGVudHMgaW4gY29tbWl0ICMkbXlfaQorRU9GCisKK0lOUFVUX0VORAorCWRvbmUKK30KKworIyBXcml0ZSBmYXN0LWltcG9ydCBjb21tYW5kcyB0byBjcmVhdGUgdGhlIGdpdmVuIG51bWJlciBvZiBub3RlcyBhbm5vdGF0aW5nCisjIHRoZSBjb21taXRzIGNyZWF0ZWQgYnkgZmFzdF9pbXBvcnRfY29tbWl0cygpCitmYXN0X2ltcG9ydF9ub3RlcyAoKSB7CisJbXlfbm90ZXNfcmVmPSQxCisJbXlfbnVtX2NvbW1pdHM9JDIKKwlteV9hcHBlbmRfdG9fZmlsZT0kMworCW15X25vdGVfYXBwZW5kPSQ0CisJdGVzdF90aWNrCisJY2F0ID4+IiRteV9hcHBlbmRfdG9fZmlsZSIgPDxJTlBVVF9FTkQKK2NvbW1pdCAkbXlfbm90ZXNfcmVmCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvbW1pdHRpbmcgJG15X251bV9jb21taXRzIG5vdGVzCitDT01NSVQKKworSU5QVVRfRU5ECisKKwlteV9pPTAKKwl3aGlsZSB0ZXN0ICRteV9pIC1sdCAkbXlfbnVtX2NvbW1pdHMKKwlkbworCQlteV9pPSQoKCRteV9pICsgMSkpCisJCWNhdCA+PiIkbXlfYXBwZW5kX3RvX2ZpbGUiIDw8SU5QVVRfRU5ECitOIGlubGluZSA6JG15X2kKK2RhdGEgPDxFT0YKK25vdGUgZm9yIGNvbW1pdCAjJG15X2kkbXlfbm90ZV9hcHBlbmQKK0VPRgorCitJTlBVVF9FTkQKKwlkb25lCit9CisKKworcm0gaW5wdXQgZXhwZWN0CitudW1fY29tbWl0cz00MDAKKyMgQ3JlYXRlIGxvdHMgb2YgY29tbWl0cworZmFzdF9pbXBvcnRfY29tbWl0cyAicmVmcy9oZWFkcy9tYW55X2NvbW1pdHMiICRudW1fY29tbWl0cyBpbnB1dAorIyBDcmVhdGUgb25lIG5vdGUgcGVyIGFib3ZlIGNvbW1pdAorZmFzdF9pbXBvcnRfbm90ZXMgInJlZnMvbm90ZXMvbWFueV9ub3RlcyIgJG51bV9jb21taXRzIGlucHV0CisjIEFkZCBhIGNvdXBsZSBvZiBub24tbm90ZXMgYXMgd2VsbAordGVzdF90aWNrCitjYXQgPj5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvbWFueV9ub3RlcworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXR0aW5nIHNvbWUgbm9uLW5vdGVzIHRvIHRoZSBub3RlcyB0cmVlCitDT01NSVQKKworTSA3NTUgaW5saW5lIGZvb2Jhci9ub24tbm90ZS50eHQKK2RhdGEgPDxFT0YKK1RoaXMgaXMgbm90IGEgbm90ZSwgYnV0IHJhdGhlciBhIHJlZ3VsYXIgZmlsZSByZXNpZGluZyBpbiBhIG5vdGVzIHRyZWUKK0VPRgorCitNIDY0NCBpbmxpbmUgZGVhZGJlZWYKK2RhdGEgPDxFT0YKK05vbi1ub3RlIGZpbGUKK0VPRgorCitNIDY0NCBpbmxpbmUgZGUvYWRiZWVmCitkYXRhIDw8RU9GCitBbm90aGVyIG5vbi1ub3RlIGZpbGUKK0VPRgorCitJTlBVVF9FTkQKKyMgRmluYWxseSBjcmVhdGUgdGhlIGV4cGVjdGVkIG91dHB1dCBmcm9tIGFsbCB0aGVzZSBub3RlcyBhbmQgY29tbWl0cworaT0kbnVtX2NvbW1pdHMKK3doaWxlIHRlc3QgJGkgLWd0IDAKK2RvCisJY2F0ID4+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGNvbW1pdCAjJGkKKyAgICBub3RlIGZvciBjb21taXQgIyRpCitFWFBFQ1RfRU5ECisJaT0kKCgkaSAtIDEpKQorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbG90cyBvZiBjb21taXRzIGFuZCBub3RlcycgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9tYW55X25vdGVzIGdpdCBsb2cgcmVmcy9oZWFkcy9tYW55X2NvbW1pdHMgfAorCSAgICBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgbG90cyBvZiBub3RlcyB0cmlnZ2VyIGEgZmFub3V0IHNjaGVtZScgJworCisJIyBOb25lIG9mIHRoZSBlbnRyaWVzIGluIHRoZSB0b3AtbGV2ZWwgbm90ZXMgdHJlZSBzaG91bGQgYmUgYSBmdWxsIFNIQTEKKwlnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByZWZzL25vdGVzL21hbnlfbm90ZXMgfAorCXdoaWxlIHJlYWQgcGF0aAorCWRvCisJCWlmIHRlc3QgJChleHByIGxlbmd0aCAiJHBhdGgiKSAtZ2UgNDAKKwkJdGhlbgorCQkJcmV0dXJuIDEKKwkJZmkKKwlkb25lCisKKycKKworIyBDcmVhdGUgYW5vdGhlciBub3RlcyB0cmVlIGZyb20gdGhlIG9uZSBhYm92ZQorU1A9IiAiCitjYXQgPj5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvb3RoZXJfY29tbWl0cworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXQgIyQoKCRudW1fY29tbWl0ICsgMSkpCitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL21hbnlfY29tbWl0cworTSA2NDQgaW5saW5lIGZpbGUKK2RhdGEgPDxFT0YKK2ZpbGUgY29udGVudHMgaW4gY29tbWl0ICMkKCgkbnVtX2NvbW1pdCArIDEpKQorRU9GCisKK2NvbW1pdCByZWZzL25vdGVzL290aGVyX25vdGVzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvbW1pdHRpbmcgb25lIG1vcmUgbm90ZSBvbiBhIHRyZWUgaW1wb3J0ZWQgZnJvbSBhIHByZXZpb3VzIG5vdGVzIHRyZWUKK0NPTU1JVAorCitNIDA0MDAwMCAkKGdpdCBsb2cgLS1uby13YWxrIC0tZm9ybWF0PSVUIHJlZnMvbm90ZXMvbWFueV9ub3RlcykkU1AKK04gaW5saW5lIDokKCgkbnVtX2NvbW1pdCArIDEpKQorZGF0YSA8PEVPRgorbm90ZSBmb3IgY29tbWl0ICMkKCgkbnVtX2NvbW1pdCArIDEpKQorRU9GCitJTlBVVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgaW1wb3J0aW5nIGEgbm90ZXMgdHJlZSByZXNwZWN0cyB0aGUgZmFub3V0IHNjaGVtZScgJworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKworCSMgTm9uZSBvZiB0aGUgZW50cmllcyBpbiB0aGUgdG9wLWxldmVsIG5vdGVzIHRyZWUgc2hvdWxkIGJlIGEgZnVsbCBTSEExCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgcmVmcy9ub3Rlcy9vdGhlcl9ub3RlcyB8CisJd2hpbGUgcmVhZCBwYXRoCisJZG8KKwkJaWYgdGVzdCAkKGV4cHIgbGVuZ3RoICIkcGF0aCIpIC1nZSA0MAorCQl0aGVuCisJCQlyZXR1cm4gMQorCQlmaQorCWRvbmUKKycKKworY2F0ID4+ZXhwZWN0X25vbi1ub3RlMSA8PCBFT0YKK1RoaXMgaXMgbm90IGEgbm90ZSwgYnV0IHJhdGhlciBhIHJlZ3VsYXIgZmlsZSByZXNpZGluZyBpbiBhIG5vdGVzIHRyZWUKK0VPRgorCitjYXQgPj5leHBlY3Rfbm9uLW5vdGUyIDw8IEVPRgorTm9uLW5vdGUgZmlsZQorRU9GCisKK2NhdCA+PmV4cGVjdF9ub24tbm90ZTMgPDwgRU9GCitBbm90aGVyIG5vbi1ub3RlIGZpbGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCBub24tbm90ZXMgYXJlIHVudG91Y2hlZCBieSBhIGZhbm91dCBjaGFuZ2UnICcKKworCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL21hbnlfbm90ZXM6Zm9vYmFyL25vbi1ub3RlLnR4dCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF9ub24tbm90ZTEgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvbWFueV9ub3RlczpkZWFkYmVlZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF9ub24tbm90ZTIgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvbWFueV9ub3RlczpkZS9hZGJlZWYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm9uLW5vdGUzIGFjdHVhbAorCisnCisKKyMgQ2hhbmdlIHRoZSBub3RlcyBmb3IgdGhlIHRocmVlIHRvcCBjb21taXRzCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL21hbnlfbm90ZXMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY2hhbmdpbmcgbm90ZXMgZm9yIHRoZSB0b3AgdGhyZWUgY29tbWl0cworQ09NTUlUCitmcm9tIHJlZnMvbm90ZXMvbWFueV9ub3Rlc14wCitJTlBVVF9FTkQKKworcm0gZXhwZWN0CitpPSRudW1fY29tbWl0cworaj0wCit3aGlsZSB0ZXN0ICRqIC1sdCAzCitkbworCWNhdCA+PmlucHV0IDw8SU5QVVRfRU5ECitOIGlubGluZSByZWZzL2hlYWRzL21hbnlfY29tbWl0c34kagorZGF0YSA8PEVPRgorY2hhbmdlZCBub3RlIGZvciBjb21taXQgIyRpCitFT0YKK0lOUFVUX0VORAorCWNhdCA+PmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBjb21taXQgIyRpCisgICAgY2hhbmdlZCBub3RlIGZvciBjb21taXQgIyRpCitFWFBFQ1RfRU5ECisJaT0kKCgkaSAtIDEpKQorCWo9JCgoJGogKyAxKSkKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIGEgZmV3IGV4aXN0aW5nIG5vdGVzJyAnCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL21hbnlfbm90ZXMgZ2l0IGxvZyAtbjMgcmVmcy9oZWFkcy9tYW55X2NvbW1pdHMgfAorCSAgICBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgY2hhbmdpbmcgbm90ZXMgcmVzcGVjdCBleGlzdGluZyBmYW5vdXQnICcKKworCSMgTm9uZSBvZiB0aGUgZW50cmllcyBpbiB0aGUgdG9wLWxldmVsIG5vdGVzIHRyZWUgc2hvdWxkIGJlIGEgZnVsbCBTSEExCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgcmVmcy9ub3Rlcy9tYW55X25vdGVzIHwKKwl3aGlsZSByZWFkIHBhdGgKKwlkbworCQlpZiB0ZXN0ICQoZXhwciBsZW5ndGggIiRwYXRoIikgLWdlIDQwCisJCXRoZW4KKwkJCXJldHVybiAxCisJCWZpCisJZG9uZQorCisnCisKK3JlbWFpbmluZ19ub3Rlcz0xMAordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy9tYW55X25vdGVzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3JlbW92aW5nIGFsbCBub3RlcyBidXQgJHJlbWFpbmluZ19ub3RlcworQ09NTUlUCitmcm9tIHJlZnMvbm90ZXMvbWFueV9ub3Rlc14wCitJTlBVVF9FTkQKKworaT0kKCgkbnVtX2NvbW1pdHMgLSAkcmVtYWluaW5nX25vdGVzKSkKK2ZvciBzaGExIGluICQoZ2l0IHJldi1saXN0IC1uICRpIHJlZnMvaGVhZHMvbWFueV9jb21taXRzKQorZG8KKwljYXQgPj5pbnB1dCA8PElOUFVUX0VORAorTiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICRzaGExCitJTlBVVF9FTkQKK2RvbmUKKworaT0kbnVtX2NvbW1pdHMKK3JtIGV4cGVjdAord2hpbGUgdGVzdCAkaSAtZ3QgMAorZG8KKwljYXQgPj5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgY29tbWl0ICMkaQorRVhQRUNUX0VORAorCWlmIHRlc3QgJGkgLWxlICRyZW1haW5pbmdfbm90ZXMKKwl0aGVuCisJCWNhdCA+PmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBub3RlIGZvciBjb21taXQgIyRpCitFWFBFQ1RfRU5ECisJZmkKKwlpPSQoKCRpIC0gMSkpCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBsb3RzIG9mIG5vdGVzJyAnCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL21hbnlfbm90ZXMgZ2l0IGxvZyByZWZzL2hlYWRzL21hbnlfY29tbWl0cyB8CisJICAgIGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCByZW1vdmluZyBub3RlcyB0cmlnZ2VyIGZhbm91dCBjb25zb2xpZGF0aW9uJyAnCisKKwkjIEFsbCBlbnRyaWVzIGluIHRoZSB0b3AtbGV2ZWwgbm90ZXMgdHJlZSBzaG91bGQgYmUgYSBmdWxsIFNIQTEKKwlnaXQgbHMtdHJlZSAtLW5hbWUtb25seSAtciByZWZzL25vdGVzL21hbnlfbm90ZXMgfAorCXdoaWxlIHJlYWQgcGF0aAorCWRvCisJCSMgRXhwbGljaXRseSBpZ25vcmUgdGhlIG5vbi1ub3RlIHBhdGhzCisJCXRlc3QgIiRwYXRoIiA9ICJmb29iYXIvbm9uLW5vdGUudHh0IiAmJiBjb250aW51ZQorCQl0ZXN0ICIkcGF0aCIgPSAiZGVhZGJlZWYiICYmIGNvbnRpbnVlCisJCXRlc3QgIiRwYXRoIiA9ICJkZS9hZGJlZWYiICYmIGNvbnRpbnVlCisKKwkJaWYgdGVzdCAkKGV4cHIgbGVuZ3RoICIkcGF0aCIpIC1uZSA0MAorCQl0aGVuCisJCQlyZXR1cm4gMQorCQlmaQorCWRvbmUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCBub24tbm90ZXMgYXJlIHVudG91Y2hlZCBieSBhIGZhbm91dCBjaGFuZ2UnICcKKworCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL21hbnlfbm90ZXM6Zm9vYmFyL25vbi1ub3RlLnR4dCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF9ub24tbm90ZTEgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvbWFueV9ub3RlczpkZWFkYmVlZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF9ub24tbm90ZTIgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvbWFueV9ub3RlczpkZS9hZGJlZWYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm9uLW5vdGUzIGFjdHVhbAorCisnCisKKworcm0gaW5wdXQgZXhwZWN0CitudW1fbm90ZXNfcmVmcz0xMAorbnVtX2NvbW1pdHM9MTYKK3NvbWVfY29tbWl0cz04CisjIENyZWF0ZSBjb21taXRzCitmYXN0X2ltcG9ydF9jb21taXRzICJyZWZzL2hlYWRzL21vcmVfY29tbWl0cyIgJG51bV9jb21taXRzIGlucHV0CisjIENyZWF0ZSBvbmUgbm90ZSBwZXIgYWJvdmUgY29tbWl0IHBlciBub3RlcyByZWYKK2k9MAord2hpbGUgdGVzdCAkaSAtbHQgJG51bV9ub3Rlc19yZWZzCitkbworCWk9JCgoJGkgKyAxKSkKKwlmYXN0X2ltcG9ydF9ub3RlcyAicmVmcy9ub3Rlcy9tb3JlX25vdGVzXyRpIiAkbnVtX2NvbW1pdHMgaW5wdXQKK2RvbmUKKyMgVHJpZ2dlciBicmFuY2ggcmVsb2FkaW5nIGluIGdpdC1mYXN0LWltcG9ydCBieSByZXBlYXRpbmcgdGhlIG5vdGUgY3JlYXRpb24KK2k9MAord2hpbGUgdGVzdCAkaSAtbHQgJG51bV9ub3Rlc19yZWZzCitkbworCWk9JCgoJGkgKyAxKSkKKwlmYXN0X2ltcG9ydF9ub3RlcyAicmVmcy9ub3Rlcy9tb3JlX25vdGVzXyRpIiAkc29tZV9jb21taXRzIGlucHV0ICIgKDIpIgorZG9uZQorIyBGaW5hbGx5IGNyZWF0ZSB0aGUgZXhwZWN0ZWQgb3V0cHV0IGZyb20gdGhlIG5vdGVzIGluIHJlZnMvbm90ZXMvbW9yZV9ub3Rlc18xCitpPSRudW1fY29tbWl0cword2hpbGUgdGVzdCAkaSAtZ3QgMAorZG8KKwlub3RlX2RhdGE9Im5vdGUgZm9yIGNvbW1pdCAjJGkiCisJaWYgdGVzdCAkaSAtbGUgJHNvbWVfY29tbWl0cworCXRoZW4KKwkJbm90ZV9kYXRhPSIkbm90ZV9kYXRhICgyKSIKKwlmaQorCWNhdCA+PmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBjb21taXQgIyRpCisgICAgJG5vdGVfZGF0YQorRVhQRUNUX0VORAorCWk9JCgoJGkgLSAxKSkKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiYWRkIG5vdGVzIHRvICRudW1fY29tbWl0cyBjb21taXRzIGluIGVhY2ggb2YgJG51bV9ub3Rlc19yZWZzIHJlZnMiICcKKworCWdpdCBmYXN0LWltcG9ydCAtLWFjdGl2ZS1icmFuY2hlcz01IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9tb3JlX25vdGVzXzEgZ2l0IGxvZyByZWZzL2hlYWRzL21vcmVfY29tbWl0cyB8CisJICAgIGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkzMDItZmFzdC1pbXBvcnQtdW5wYWNrLWxpbWl0LnNoIGIvdC90OTMwMi1mYXN0LWltcG9ydC11bnBhY2stbGltaXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmIxYzM5YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkzMDItZmFzdC1pbXBvcnQtdW5wYWNrLWxpbWl0LnNoCkBAIC0wLDAgKzEsMTA1IEBACisjIS9iaW4vc2gKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IGZhc3QtaW1wb3J0IHVucGFjayBsaW1pdCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbG9vc2Ugb2JqZWN0cyBvbiBpbXBvcnQnICcKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlpbml0aWFsCisJQ09NTUlUCisKKwlkb25lCisJSU5QVVRfRU5ECisKKwlnaXQgLWMgZmFzdGltcG9ydC51bnBhY2tMaW1pdD0yIGZhc3QtaW1wb3J0IC0tZG9uZSA8aW5wdXQgJiYKKwlnaXQgZnNjayAtLW5vLXByb2dyZXNzICYmCisJdGVzdCAkKGZpbmQgLmdpdC9vYmplY3RzLz8/IC10eXBlIGYgfCB3YyAtbCkgLWVxIDIgJiYKKwl0ZXN0ICQoZmluZCAuZ2l0L29iamVjdHMvcGFjayAtdHlwZSBmIHwgd2MgLWwpIC1lcSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JpZ2dlciBwYWNrcyBhcmUgcHJlc2VydmVkJyAnCisJdGVzdF90aWNrICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJaW5jcmVtZW50YWwgc2hvdWxkIGNyZWF0ZSBhIHBhY2sKKwlDT01NSVQKKwlmcm9tIHJlZnMvaGVhZHMvbWFzdGVyXjAKKworCWNvbW1pdCByZWZzL2hlYWRzL2JyYW5jaAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlicmFuY2gKKwlDT01NSVQKKworCWRvbmUKKwlJTlBVVF9FTkQKKworCWdpdCAtYyBmYXN0aW1wb3J0LnVucGFja0xpbWl0PTIgZmFzdC1pbXBvcnQgLS1kb25lIDxpbnB1dCAmJgorCWdpdCBmc2NrIC0tbm8tcHJvZ3Jlc3MgJiYKKwl0ZXN0ICQoZmluZCAuZ2l0L29iamVjdHMvPz8gLXR5cGUgZiB8IHdjIC1sKSAtZXEgMiAmJgorCXRlc3QgJChmaW5kIC5naXQvb2JqZWN0cy9wYWNrIC10eXBlIGYgfCB3YyAtbCkgLWVxIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9va3VwcyBhZnRlciBjaGVja3BvaW50IHdvcmtzJyAnCisJaGVsbG9faWQ9JChlY2hvIGhlbGxvIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gLXQgYmxvYikgJiYKKwlpZD0iJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUiICYmCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3Rlcl4wKSAmJgorCSgKKwkJY2F0IDw8LUlOUFVUX0VORCAmJgorCQlibG9iCisJCW1hcmsgOjEKKwkJZGF0YSA2CisJCWhlbGxvCisKKwkJY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCisJCW1hcmsgOjIKKwkJY29tbWl0dGVyICRpZAorCQlkYXRhIDw8Q09NTUlUCisJCWNoZWNrcG9pbnQgYWZ0ZXIgdGhpcworCQlDT01NSVQKKwkJZnJvbSByZWZzL2hlYWRzL21hc3Rlcl4wCisJCU0gMTAwNjQ0IDoxIGhlbGxvCisKKwkJIyBwcmUtY2hlY2twb2ludAorCQljYXQtYmxvYiA6MQorCQljYXQtYmxvYiAkaGVsbG9faWQKKwkJY2hlY2twb2ludAorCQkjIHBvc3QtY2hlY2twb2ludAorCQljYXQtYmxvYiA6MQorCQljYXQtYmxvYiAkaGVsbG9faWQKKwkJSU5QVVRfRU5ECisKKwkJbj0wICYmCisJCWZyb209JGJlZm9yZSAmJgorCQl3aGlsZSB0ZXN0IHgiJGZyb20iID0geCIkYmVmb3JlIgorCQlkbworCQkJaWYgdGVzdCAkbiAtZ3QgMzAKKwkJCXRoZW4KKwkJCQllY2hvID4mMiAiY2hlY2twb2ludCBkaWQgbm90IHVwZGF0ZSBicmFuY2giICYmCisJCQkJZXhpdCAxCisJCQllbHNlCisJCQkJbj0kKCgkbiArIDEpKQorCQkJZmkgJiYKKwkJCXNsZWVwIDEgJiYKKwkJCWZyb209JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyXjApCisJCWRvbmUgJiYKKwkJY2F0IDw8LUlOUFVUX0VORCAmJgorCQljb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJY29tbWl0dGVyICRpZAorCQlkYXRhIDw8Q09NTUlUCisJCW1ha2Ugc3VyZSBmcm9tICJ1bnBhY2tlZCBzaGExIHJlZmVyZW5jZSIgd29ya3MsIHRvbworCQlDT01NSVQKKwkJZnJvbSAkZnJvbQorCQlJTlBVVF9FTkQKKwkJZWNobyBkb25lCisJKSB8IGdpdCAtYyBmYXN0aW1wb3J0LnVucGFja0xpbWl0PTEwMCBmYXN0LWltcG9ydCAtLWRvbmUgJiYKKwl0ZXN0ICQoZmluZCAuZ2l0L29iamVjdHMvPz8gLXR5cGUgZiB8IHdjIC1sKSAtZXEgNiAmJgorCXRlc3QgJChmaW5kIC5naXQvb2JqZWN0cy9wYWNrIC10eXBlIGYgfCB3YyAtbCkgLWVxIDIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MzAzLWZhc3QtaW1wb3J0LWNvbXByZXNzaW9uLnNoIGIvdC90OTMwMy1mYXN0LWltcG9ydC1jb21wcmVzc2lvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MDQ1ZjAyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTMwMy1mYXN0LWltcG9ydC1jb21wcmVzc2lvbi5zaApAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tcHJlc3Npb24gc2V0dGluZyBvZiBmYXN0LWltcG9ydCB1dGlsaXR5JworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gdGVzdC1saWIuc2ggdG9nZXRoZXIgd2l0aCB0aGUKKyMgY29weSBpbiB0MDAyMSBhZnRlciBib3RoIHRvcGljcyBoYXZlIGdyYWR1YXRlZCB0byAnbWFzdGVyJy4KK2ZpbGVfc2l6ZSAoKSB7CisJdGVzdC10b29sIHBhdGgtdXRpbHMgZmlsZS1zaXplICIkMSIKK30KKworaW1wb3J0X2xhcmdlICgpIHsKKwkoCisJCWVjaG8gYmxvYgorCQllY2hvICJkYXRhIDw8RU9EIgorCQlwcmludGYgIiUyMDAwMDAwc1xuIiAiJCoiCisJCWVjaG8gRU9ECisJKSB8IGdpdCAiJEAiIGZhc3QtaW1wb3J0Cit9CisKK3doaWxlIHJlYWQgZXhwZWN0IGNvbmZpZworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmYXN0LWltcG9ydCAocGFja2VkKSB3aXRoICRjb25maWciICcKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSouKiIgJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgLmdpdC9vYmplY3RzLz8/IiAmJgorCQlpbXBvcnRfbGFyZ2UgLWMgZmFzdGltcG9ydC51bnBhY2tsaW1pdD0wICRjb25maWcgJiYKKwkJc3o9JChmaWxlX3NpemUgLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLnBhY2spICYmCisJCWNhc2UgIiRleHBlY3QiIGluCisJCXNtYWxsKSB0ZXN0ICIkc3oiIC1sZSAxMDAwMDAgOzsKKwkJbGFyZ2UpIHRlc3QgIiRzeiIgLWdlIDEwMDAwMCA7OworCQllc2FjCisJJworZG9uZSA8PFxFT0YKK2xhcmdlIC1jIGNvcmUuY29tcHJlc3Npb249MAorc21hbGwgLWMgY29yZS5jb21wcmVzc2lvbj05CitsYXJnZSAtYyBjb3JlLmNvbXByZXNzaW9uPTAgLWMgcGFjay5jb21wcmVzc2lvbj0wCitsYXJnZSAtYyBjb3JlLmNvbXByZXNzaW9uPTkgLWMgcGFjay5jb21wcmVzc2lvbj0wCitzbWFsbCAtYyBjb3JlLmNvbXByZXNzaW9uPTAgLWMgcGFjay5jb21wcmVzc2lvbj05CitzbWFsbCAtYyBjb3JlLmNvbXByZXNzaW9uPTkgLWMgcGFjay5jb21wcmVzc2lvbj05CitsYXJnZSAtYyBwYWNrLmNvbXByZXNzaW9uPTAKK3NtYWxsIC1jIHBhY2suY29tcHJlc3Npb249OQorRU9GCisKK3doaWxlIHJlYWQgZXhwZWN0IGNvbmZpZworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmYXN0LWltcG9ydCAobG9vc2UpIHdpdGggJGNvbmZpZyIgJworCQl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi4qIiAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiAuZ2l0L29iamVjdHMvPz8iICYmCisJCWltcG9ydF9sYXJnZSAtYyBmYXN0aW1wb3J0LnVucGFja2xpbWl0PTkgJGNvbmZpZyAmJgorCQlzej0kKGZpbGVfc2l6ZSAuZ2l0L29iamVjdHMvPz8vPz8/PyopICYmCisJCWNhc2UgIiRleHBlY3QiIGluCisJCXNtYWxsKSB0ZXN0ICIkc3oiIC1sZSAxMDAwMDAgOzsKKwkJbGFyZ2UpIHRlc3QgIiRzeiIgLWdlIDEwMDAwMCA7OworCQllc2FjCisJJworZG9uZSA8PFxFT0YKK2xhcmdlIC1jIGNvcmUuY29tcHJlc3Npb249MAorc21hbGwgLWMgY29yZS5jb21wcmVzc2lvbj05CitsYXJnZSAtYyBjb3JlLmNvbXByZXNzaW9uPTAgLWMgY29yZS5sb29zZWNvbXByZXNzaW9uPTAKK2xhcmdlIC1jIGNvcmUuY29tcHJlc3Npb249OSAtYyBjb3JlLmxvb3NlY29tcHJlc3Npb249MAorc21hbGwgLWMgY29yZS5jb21wcmVzc2lvbj0wIC1jIGNvcmUubG9vc2Vjb21wcmVzc2lvbj05CitzbWFsbCAtYyBjb3JlLmNvbXByZXNzaW9uPTkgLWMgY29yZS5sb29zZWNvbXByZXNzaW9uPTkKK2xhcmdlIC1jIGNvcmUubG9vc2Vjb21wcmVzc2lvbj0wCitzbWFsbCAtYyBjb3JlLmxvb3NlY29tcHJlc3Npb249OQorRU9GCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTM1MC1mYXN0LWV4cG9ydC5zaCBiL3QvdDkzNTAtZmFzdC1leHBvcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjkwYzkwZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkzNTAtZmFzdC1leHBvcnQuc2gKQEAgLTAsMCArMSw3NTAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgZmFzdC1leHBvcnQnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCWVjaG8gYnJlYWsgaXQgPiBmaWxlMCAmJgorCWdpdCBhZGQgZmlsZTAgJiYKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIFdvaGxhdWYgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyBkaWUgTHVmdCA+IGZpbGUgJiYKKwllY2hvIGdlaHQgZnJpc2NoID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCWVjaG8gdW5kID4gZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHRoaXJkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyByZWluICYmCisJZ2l0IGNoZWNrb3V0IC1iIHdlciBIRUFEXiAmJgorCWVjaG8gbGFuZ2UgPiBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2l0enQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIC1hIC1tIHZhbGVudGluIG11c3MgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyBtYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWV4cG9ydCB8IGZhc3QtaW1wb3J0JyAnCisKKwlNQVNURVI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwlSRUlOPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWluKSAmJgorCVdFUj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgd2VyKSAmJgorCU1VU1M9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG11c3MpICYmCisJbWtkaXIgbmV3ICYmCisJZ2l0IC0tZ2l0LWRpcj1uZXcvLmdpdCBpbml0ICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tYWxsID5hY3R1YWwgJiYKKwkoY2QgbmV3ICYmCisJIGdpdCBmYXN0LWltcG9ydCAmJgorCSB0ZXN0ICRNQVNURVIgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJIHRlc3QgJFJFSU4gPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy90YWdzL3JlaW4pICYmCisJIHRlc3QgJFdFUiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3dlcikgJiYKKwkgdGVzdCAkTVVTUyA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3RhZ3MvbXVzcykpIDxhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWV4cG9ydCBebXVzc157Y29tbWl0fSBtdXNzJyAnCisJZ2l0IGZhc3QtZXhwb3J0IC0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdD1yZXdyaXRlIF5tdXNzXntjb21taXR9IG11c3MgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJdGFnIG11c3MKKwlmcm9tICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtdXNzXntjb21taXR9KQorCSQoZ2l0IGNhdC1maWxlIHRhZyBtdXNzIHwgZ3JlcCB0YWdnZXIpCisJZGF0YSA5CisJdmFsZW50aW4KKworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWV4cG9ydCAtLW1hcmstdGFncyBebXVzc157Y29tbWl0fSBtdXNzJyAnCisJZ2l0IGZhc3QtZXhwb3J0IC0tbWFyay10YWdzIC0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdD1yZXdyaXRlIF5tdXNzXntjb21taXR9IG11c3MgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJdGFnIG11c3MKKwltYXJrIDoxCisJZnJvbSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbXVzc157Y29tbWl0fSkKKwkkKGdpdCBjYXQtZmlsZSB0YWcgbXVzcyB8IGdyZXAgdGFnZ2VyKQorCWRhdGEgOQorCXZhbGVudGluCisKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1leHBvcnQgbWFzdGVyfjIuLm1hc3RlcicgJworCisJZ2l0IGZhc3QtZXhwb3J0IG1hc3Rlcn4yLi5tYXN0ZXIgPmFjdHVhbCAmJgorCXNlZCAicy9tYXN0ZXIvcGFydGlhbC8iIGFjdHVhbCB8CisJCShjZCBuZXcgJiYKKwkJIGdpdCBmYXN0LWltcG9ydCAmJgorCQkgdGVzdCAkTUFTVEVSICE9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3BhcnRpYWwpICYmCisJCSBnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXIgcGFydGlhbCAmJgorCQkgZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyXiBwYXJ0aWFsXiAmJgorCQkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBwYXJ0aWFsfjIpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1leHBvcnQgLS1yZWZlcmVuY2UtZXhjbHVkZWQtcGFyZW50cyBtYXN0ZXJ+Mi4ubWFzdGVyJyAnCisKKwlnaXQgZmFzdC1leHBvcnQgLS1yZWZlcmVuY2UtZXhjbHVkZWQtcGFyZW50cyBtYXN0ZXJ+Mi4ubWFzdGVyID5hY3R1YWwgJiYKKwlncmVwIGNvbW1pdC5yZWZzL2hlYWRzL21hc3RlciBhY3R1YWwgPmNvbW1pdC1jb3VudCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgY29tbWl0LWNvdW50ICYmCisJc2VkICJzL21hc3Rlci9yZXdyaXRlLyIgYWN0dWFsIHwKKwkJKGNkIG5ldyAmJgorCQkgZ2l0IGZhc3QtaW1wb3J0ICYmCisJCSB0ZXN0ICRNQVNURVIgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZXdyaXRlKSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1leHBvcnQgLS1zaG93LW9yaWdpbmFsLWlkcycgJworCisJZ2l0IGZhc3QtZXhwb3J0IC0tc2hvdy1vcmlnaW5hbC1pZHMgbWFzdGVyID5vdXRwdXQgJiYKKwlncmVwIF5vcmlnaW5hbC1vaWQgb3V0cHV0fCBzZWQgLWUgcy9eb3JpZ2luYWwtb2lkLi8vIHwgc29ydCA+YWN0dWFsICYmCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBtYXN0ZXIgbXVzcyA+b2JqZWN0cy1hbmQtbmFtZXMgJiYKKwlhd2sgIntwcmludCBcJDF9IiBvYmplY3RzLWFuZC1uYW1lcyB8IHNvcnQgPmNvbW1pdHMtdHJlZXMtYmxvYnMgJiYKKwljb21tIC0yMyBhY3R1YWwgY29tbWl0cy10cmVlcy1ibG9icyA+dW5mb3VuZCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB1bmZvdW5kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZXhwb3J0IC0tc2hvdy1vcmlnaW5hbC1pZHMgfCBnaXQgZmFzdC1pbXBvcnQnICcKKworCWdpdCBmYXN0LWV4cG9ydCAtLXNob3ctb3JpZ2luYWwtaWRzIG1hc3RlciBtdXNzIHwgZ2l0IGZhc3QtaW1wb3J0IC0tcXVpZXQgJiYKKwl0ZXN0ICRNQVNURVIgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAkTVVTUyA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3RhZ3MvbXVzcykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVlbmNvZGluZyBpc28tODg1OS03JyAnCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRH4xIiAmJgorCXRlc3RfY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgaXNvLTg4NTktNyAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gcm9zdGVuID5maWxlICYmCisJZ2l0IGNvbW1pdCAtcyAtRiAiJFRFU1RfRElSRUNUT1JZL3Q5MzUwL3NpbXBsZS1pc28tODg1OS03LWNvbW1pdC1tZXNzYWdlLnR4dCIgZmlsZSAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLXJlZW5jb2RlPXllcyB3ZXJeLi53ZXIgPmlzby04ODU5LTcuZmkgJiYKKwlzZWQgInMvd2VyL2kxOG4vIiBpc28tODg1OS03LmZpIHwKKwkJKGNkIG5ldyAmJgorCQkgZ2l0IGZhc3QtaW1wb3J0ICYmCisJCSAjIFRoZSBjb21taXQgb2JqZWN0LCBpZiBub3QgcmUtZW5jb2RlZCwgd291bGQgYmUgMjQwIGJ5dGVzLgorCQkgIyBSZW1vdmluZyB0aGUgImVuY29kaW5nIGlzby04ODU5LTdcbiIgaGVhZGVyIGRyb3BzIDIwIGJ5dGVzLgorCQkgIyBSZS1lbmNvZGluZyB0aGUgUGkgY2hhcmFjdGVyIGZyb20gXHhGMCAoXDM2MCkgaW4gaXNvLTg4NTktNworCQkgIyB0byBceENGXHg4MCAoXDMxN1wyMDApIGluIFVURi04IGFkZHMgYSBieXRlLiAgQ2hlY2sgZm9yCisJCSAjIHRoZSBleHBlY3RlZCBzaXplLgorCQkgdGVzdCAyMjEgLWVxICIkKGdpdCBjYXQtZmlsZSAtcyBpMThuKSIgJiYKKwkJICMgLi4uYW5kIGZvciB0aGUgZXhwZWN0ZWQgdHJhbnNsYXRpb24gb2YgYnl0ZXMuCisJCSBnaXQgY2F0LWZpbGUgY29tbWl0IGkxOG4gPmFjdHVhbCAmJgorCQkgZ3JlcCAkKHByaW50ZiAiXDMxN1wyMDAiKSBhY3R1YWwgJiYKKwkJICMgQWxzbyBtYWtlIHN1cmUgdGhlIGNvbW1pdCBkb2VzIG5vdCBoYXZlIHRoZSAiZW5jb2RpbmciIGhlYWRlcgorCQkgISBncmVwIF5lbmNvZGluZyBhY3R1YWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fib3J0aW5nIG9uIGlzby04ODU5LTcnICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEiICYmCisJdGVzdF9jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBpc28tODg1OS03ICYmCisJZWNobyByb3N0ZW4gPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1zIC1GICIkVEVTVF9ESVJFQ1RPUlkvdDkzNTAvc2ltcGxlLWlzby04ODU5LTctY29tbWl0LW1lc3NhZ2UudHh0IiBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtZXhwb3J0IC0tcmVlbmNvZGU9YWJvcnQgd2VyXi4ud2VyID5pc28tODg1OS03LmZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXNlcnZpbmcgaXNvLTg4NTktNycgJworCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MSIgJiYKKwl0ZXN0X2NvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIGlzby04ODU5LTcgJiYKKwllY2hvIHJvc3RlbiA+ZmlsZSAmJgorCWdpdCBjb21taXQgLXMgLUYgIiRURVNUX0RJUkVDVE9SWS90OTM1MC9zaW1wbGUtaXNvLTg4NTktNy1jb21taXQtbWVzc2FnZS50eHQiIGZpbGUgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1yZWVuY29kZT1ubyB3ZXJeLi53ZXIgPmlzby04ODU5LTcuZmkgJiYKKwlzZWQgInMvd2VyL2kxOG4tbm8tcmVjb2RpbmcvIiBpc28tODg1OS03LmZpIHwKKwkJKGNkIG5ldyAmJgorCQkgZ2l0IGZhc3QtaW1wb3J0ICYmCisJCSAjIFRoZSBjb21taXQgb2JqZWN0LCBpZiBub3QgcmUtZW5jb2RlZCwgaXMgMjQwIGJ5dGVzLgorCQkgIyBSZW1vdmluZyB0aGUgImVuY29kaW5nIGlzby04ODU5LTdcbiIgaGVhZGVyIHdvdWxkIGRyb3BzIDIwCisJCSAjIGJ5dGVzLiAgUmUtZW5jb2RpbmcgdGhlIFBpIGNoYXJhY3RlciBmcm9tIFx4RjAgKFwzNjApIGluCisJCSAjIGlzby04ODU5LTcgdG8gXHhDRlx4ODAgKFwzMTdcMjAwKSBpbiBVVEYtOCBhZGRzIGEgYnl0ZS4KKwkJICMgQ2hlY2sgZm9yIHRoZSBleHBlY3RlZCBzaXplLi4uCisJCSB0ZXN0IDI0MCAtZXEgIiQoZ2l0IGNhdC1maWxlIC1zIGkxOG4tbm8tcmVjb2RpbmcpIiAmJgorCQkgIyAuLi5hcyB3ZWxsIGFzIHRoZSBleHBlY3RlZCBieXRlLgorCQkgZ2l0IGNhdC1maWxlIGNvbW1pdCBpMThuLW5vLXJlY29kaW5nID5hY3R1YWwgJiYKKwkJIGdyZXAgJChwcmludGYgIlwzNjAiKSBhY3R1YWwgJiYKKwkJICMgQWxzbyBtYWtlIHN1cmUgdGhlIGNvbW1pdCBoYXMgdGhlICJlbmNvZGluZyIgaGVhZGVyCisJCSBncmVwIF5lbmNvZGluZyBhY3R1YWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VuY29kaW5nIHByZXNlcnZlZCBpZiByZWVuY29kaW5nIGZhaWxzJyAnCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRH4xIiAmJgorCXRlc3RfY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgaXNvLTg4NTktNyAmJgorCWVjaG8gcm9zdGVuID5maWxlICYmCisJZ2l0IGNvbW1pdCAtcyAtRiAiJFRFU1RfRElSRUNUT1JZL3Q5MzUwL2Jyb2tlbi1pc28tODg1OS03LWNvbW1pdC1tZXNzYWdlLnR4dCIgZmlsZSAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLXJlZW5jb2RlPXllcyB3ZXJeLi53ZXIgPmlzby04ODU5LTcuZmkgJiYKKwlzZWQgInMvd2VyL2kxOG4taW52YWxpZC8iIGlzby04ODU5LTcuZmkgfAorCQkoY2QgbmV3ICYmCisJCSBnaXQgZmFzdC1pbXBvcnQgJiYKKwkJIGdpdCBjYXQtZmlsZSBjb21taXQgaTE4bi1pbnZhbGlkID5hY3R1YWwgJiYKKwkJICMgTWFrZSBzdXJlIHRoZSBjb21taXQgc3RpbGwgaGFzIHRoZSBlbmNvZGluZyBoZWFkZXIKKwkJIGdyZXAgXmVuY29kaW5nIGFjdHVhbCAmJgorCQkgIyBWZXJpZnkgdGhhdCB0aGUgY29tbWl0IGhhcyB0aGUgZXhwZWN0ZWQgc2l6ZTsgaS5lLgorCQkgIyB0aGF0IG5vIGJ5dGVzIHdlcmUgcmUtZW5jb2RlZCB0byBhIGRpZmZlcmVudCBlbmNvZGluZy4KKwkJIHRlc3QgMjUyIC1lcSAiJChnaXQgY2F0LWZpbGUgLXMgaTE4bi1pbnZhbGlkKSIgJiYKKwkJICMgLi4uYW5kIGNoZWNrIGZvciB0aGUgb3JpZ2luYWwgc3BlY2lhbCBieXRlcworCQkgZ3JlcCAkKHByaW50ZiAiXDM2MCIpIGFjdHVhbCAmJgorCQkgZ3JlcCAkKHByaW50ZiAiXDM3NyIpIGFjdHVhbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0L2V4cG9ydC1tYXJrcycgJworCisJZ2l0IGNoZWNrb3V0IC1iIG1hcmtzIG1hc3RlciAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLWV4cG9ydC1tYXJrcz10bXAtbWFya3MgSEVBRCAmJgorCXRlc3QgLXMgdG1wLW1hcmtzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyB0bXAtbWFya3MgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1pbXBvcnQtbWFya3M9dG1wLW1hcmtzIFwKKwkJLS1leHBvcnQtbWFya3M9dG1wLW1hcmtzIEhFQUQgPmFjdHVhbCAmJgorCXRlc3QgJChncmVwIF5jb21taXQgYWN0dWFsIHwgd2MgLWwpIC1lcSAwICYmCisJZWNobyBjaGFuZ2UgPiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibGFzdCBjb21taXQiIGZpbGUgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1pbXBvcnQtbWFya3M9dG1wLW1hcmtzIFwKKwkJLS1leHBvcnQtbWFya3M9dG1wLW1hcmtzIEhFQUQgPmFjdHVhbCAmJgorCXRlc3QgJChncmVwIF5jb21taXRcICBhY3R1YWwgfCB3YyAtbCkgLWVxIDEgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IHRtcC1tYXJrcworCisnCisKK2NhdCA+IHNpZ25lZC10YWctaW1wb3J0IDw8IEVPRgordGFnIHNpZ24teW91ci1uYW1lCitmcm9tICQoZ2l0IHJldi1wYXJzZSBIRUFEKQordGFnZ2VyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMTk5MyAtMDcwMAorZGF0YSAyMTAKK0EgbWVzc2FnZSBmb3IgYSBzaWduCistLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLQorVmVyc2lvbjogR251UEcgdjEuNC41IChHTlUvTGludXgpCisKK2Zha2Vkc2lnbmF0dXJlZmFrZWRzaWduYXR1cmVmYWtlZHNpZ25hdHVyZWZha2Vkc2lnbmF0dXJmYWtlZHNpZ24KK2F0dXJlZmFrZWRzaWduYXR1cmVmYWtlPQorPS81OXYKKy0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBmYWtlZCBzaWduZWQgdGFnJyAnCisKKwljYXQgc2lnbmVkLXRhZy1pbXBvcnQgfCBnaXQgZmFzdC1pbXBvcnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWduZWQtdGFncz1hYm9ydCcgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtZXhwb3J0IC0tc2lnbmVkLXRhZ3M9YWJvcnQgc2lnbi15b3VyLW5hbWUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWduZWQtdGFncz12ZXJiYXRpbScgJworCisJZ2l0IGZhc3QtZXhwb3J0IC0tc2lnbmVkLXRhZ3M9dmVyYmF0aW0gc2lnbi15b3VyLW5hbWUgPiBvdXRwdXQgJiYKKwlncmVwIFBHUCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWduZWQtdGFncz1zdHJpcCcgJworCisJZ2l0IGZhc3QtZXhwb3J0IC0tc2lnbmVkLXRhZ3M9c3RyaXAgc2lnbi15b3VyLW5hbWUgPiBvdXRwdXQgJiYKKwkhIGdyZXAgUEdQIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25lZC10YWdzPXdhcm4tc3RyaXAnICcKKwlnaXQgZmFzdC1leHBvcnQgLS1zaWduZWQtdGFncz13YXJuLXN0cmlwIHNpZ24teW91ci1uYW1lID5vdXRwdXQgMj5lcnIgJiYKKwkhIGdyZXAgUEdQIG91dHB1dCAmJgorCXRlc3QgLXMgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN1Ym1vZHVsZScgJworCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCW1rZGlyIHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBpbml0ICAmJgorCQllY2hvIHRlc3QgZmlsZSA+IGZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW0gc3ViX2luaXRpYWwKKwkpICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgIiQocHdkKS9zdWIiIHN1YiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWVjaG8gbW9yZSBkYXRhID4+IGZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW0gc3ViX3NlY29uZAorCSkgJiYKKwlnaXQgYWRkIHN1YiAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGZhc3QtZXhwb3J0IHwgZmFzdC1pbXBvcnQnICcKKworCVNVQkVOVDE9JChnaXQgbHMtdHJlZSBtYXN0ZXJeIHN1YikgJiYKKwlTVUJFTlQyPSQoZ2l0IGxzLXRyZWUgbWFzdGVyIHN1YikgJiYKKwlybSAtcmYgbmV3ICYmCisJbWtkaXIgbmV3ICYmCisJZ2l0IC0tZ2l0LWRpcj1uZXcvLmdpdCBpbml0ICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tc2lnbmVkLXRhZ3M9c3RyaXAgLS1hbGwgPmFjdHVhbCAmJgorCShjZCBuZXcgJiYKKwkgZ2l0IGZhc3QtaW1wb3J0ICYmCisJIHRlc3QgIiRTVUJFTlQxIiA9ICIkKGdpdCBscy10cmVlIHJlZnMvaGVhZHMvbWFzdGVyXiBzdWIpIiAmJgorCSB0ZXN0ICIkU1VCRU5UMiIgPSAiJChnaXQgbHMtdHJlZSByZWZzL2hlYWRzL21hc3RlciBzdWIpIiAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSBjbXAgc3ViL2ZpbGUgLi4vc3ViL2ZpbGUpIDxhY3R1YWwKKworJworCitHSVRfQVVUSE9SX05BTUU9J0EgVSBUaG9yJzsgZXhwb3J0IEdJVF9BVVRIT1JfTkFNRQorR0lUX0NPTU1JVFRFUl9OQU1FPSdDIE8gTWl0dGVyJzsgZXhwb3J0IEdJVF9DT01NSVRURVJfTkFNRQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb3BpZXMnICcKKworCWdpdCBjaGVja291dCAtYiBjb3B5IHJlaW4gJiYKKwlnaXQgbXYgZmlsZSBmaWxlMyAmJgorCWdpdCBjb21taXQgLW0gbW92ZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwljcCBmaWxlMiBmaWxlNCAmJgorCWdpdCBhZGQgZmlsZTQgJiYKKwlnaXQgbXYgZmlsZTIgZmlsZTUgJiYKKwlnaXQgY29tbWl0IC1tIGNvcHkxICYmCisJdGVzdF90aWNrICYmCisJY3AgZmlsZTMgZmlsZTYgJiYKKwlnaXQgYWRkIGZpbGU2ICYmCisJZ2l0IGNvbW1pdCAtbSBjb3B5MiAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gbW9yZSB0ZXh0ID4+IGZpbGU2ICYmCisJZWNobyBldmVuIG1vcmUgdGV4dCA+PiBmaWxlNiAmJgorCWdpdCBhZGQgZmlsZTYgJiYKKwlnaXQgY29tbWl0IC1tIG1vZGlmeSAmJgorCXRlc3RfdGljayAmJgorCWNwIGZpbGU2IGZpbGU3ICYmCisJZWNobyB0ZXN0ID4+IGZpbGU3ICYmCisJZ2l0IGFkZCBmaWxlNyAmJgorCWdpdCBjb21taXQgLW0gY29weV9tb2RpZnkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWV4cG9ydCAtQyAtQyB8IGZhc3QtaW1wb3J0JyAnCisKKwlFTlRSWT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgY29weSkgJiYKKwlybSAtcmYgbmV3ICYmCisJbWtkaXIgbmV3ICYmCisJZ2l0IC0tZ2l0LWRpcj1uZXcvLmdpdCBpbml0ICYmCisJZ2l0IGZhc3QtZXhwb3J0IC1DIC1DIC0tc2lnbmVkLXRhZ3M9c3RyaXAgLS1hbGwgPiBvdXRwdXQgJiYKKwlncmVwICJeQyBmaWxlMiBmaWxlNFwkIiBvdXRwdXQgJiYKKwljYXQgb3V0cHV0IHwKKwkoY2QgbmV3ICYmCisJIGdpdCBmYXN0LWltcG9ydCAmJgorCSB0ZXN0ICRFTlRSWSA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL2NvcHkpKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZXhwb3J0IHwgZmFzdC1pbXBvcnQgd2hlbiBtYXN0ZXIgaXMgdGFnZ2VkJyAnCisKKwlnaXQgdGFnIC1tIG1zZyBsYXN0ICYmCisJZ2l0IGZhc3QtZXhwb3J0IC1DIC1DIC0tc2lnbmVkLXRhZ3M9c3RyaXAgLS1hbGwgPiBvdXRwdXQgJiYKKwl0ZXN0ICQoZ3JlcCAtYyAiXnRhZyAiIG91dHB1dCkgPSAzCisKKycKKworY2F0ID4gdGFnLWNvbnRlbnQgPDwgRU9GCitvYmplY3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpCit0eXBlIGNvbW1pdAordGFnIHJvc3RlbgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcGUgd2l0aCB0YWdnZXItbGVzcyB0YWdzJyAnCisKKwlUQUc9JChnaXQgaGFzaC1vYmplY3QgLXQgdGFnIC13IHRhZy1jb250ZW50KSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvdGFncy9zb25uZW5zY2hlaW4gJFRBRyAmJgorCWdpdCBmYXN0LWV4cG9ydCAtQyAtQyAtLXNpZ25lZC10YWdzPXN0cmlwIC0tYWxsID4gb3V0cHV0ICYmCisJdGVzdCAkKGdyZXAgLWMgIl50YWcgIiBvdXRwdXQpID0gNCAmJgorCSEgZ3JlcCAiVW5zcGVjaWZpZWQgVGFnZ2VyIiBvdXRwdXQgJiYKKwlnaXQgZmFzdC1leHBvcnQgLUMgLUMgLS1zaWduZWQtdGFncz1zdHJpcCAtLWFsbCBcCisJCS0tZmFrZS1taXNzaW5nLXRhZ2dlciA+IG91dHB1dCAmJgorCXRlc3QgJChncmVwIC1jICJedGFnICIgb3V0cHV0KSA9IDQgJiYKKwlncmVwICJVbnNwZWNpZmllZCBUYWdnZXIiIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBsaW1pdGluZyBleHBvcnRzIGJ5IFBBVEgnICcKKwlta2RpciBsaW1pdC1ieS1wYXRocyAmJgorCSgKKwkJY2QgbGltaXQtYnktcGF0aHMgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBoaSA+IHRoZXJlICYmCisJCWdpdCBhZGQgdGhlcmUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiRmlyc3QgZmlsZSIgJiYKKwkJZWNobyBmb28gPiBiYXIgJiYKKwkJZ2l0IGFkZCBiYXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIGZpbGUiICYmCisJCWdpdCB0YWcgLWEgLW0gbXNnIG15dGFnICYmCisJCWVjaG8gbW9yZWZvbyA+PiBiYXIgJiYKKwkJZ2l0IGFkZCBiYXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQ2hhbmdlIHRvIHNlY29uZCBmaWxlIgorCSkKKycKKworY2F0ID4gbGltaXQtYnktcGF0aHMvZXhwZWN0ZWQgPDwgRU9GCitibG9iCittYXJrIDoxCitkYXRhIDMKK2hpCisKK3Jlc2V0IHJlZnMvdGFncy9teXRhZworY29tbWl0IHJlZnMvdGFncy9teXRhZworbWFyayA6MgorYXV0aG9yIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IDExMTI5MTI3MTMgLTA3MDAKK2NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExMTI5MTI3MTMgLTA3MDAKK2RhdGEgMTEKK0ZpcnN0IGZpbGUKK00gMTAwNjQ0IDoxIHRoZXJlCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkcm9wcGluZyB0YWcgb2YgZmlsdGVyZWQgb3V0IG9iamVjdCcgJworKAorCWNkIGxpbWl0LWJ5LXBhdGhzICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdD1kcm9wIG15dGFnIC0tIHRoZXJlID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0CispCisnCisKK2NhdCA+PiBsaW1pdC1ieS1wYXRocy9leHBlY3RlZCA8PCBFT0YKK3RhZyBteXRhZworZnJvbSA6MgordGFnZ2VyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjcxMyAtMDcwMAorZGF0YSA0Cittc2cKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld3JpdGluZyB0YWcgb2YgZmlsdGVyZWQgb3V0IG9iamVjdCcgJworKAorCWNkIGxpbWl0LWJ5LXBhdGhzICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdD1yZXdyaXRlIG15dGFnIC0tIHRoZXJlID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0CispCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld3JpdGUgdGFnIHByZWRhdGluZyBwYXRoc3BlY3MgdG8gbm90aGluZycgJworCXRlc3RfY3JlYXRlX3JlcG8gcmV3cml0ZV90YWdfcHJlZGF0aW5nX3BhdGhzcGVjcyAmJgorCSgKKwkJY2QgcmV3cml0ZV90YWdfcHJlZGF0aW5nX3BhdGhzcGVjcyAmJgorCisJCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKworCQlnaXQgdGFnIC1hIC1tICJTb21lIG9sZCB0YWciIHYwLjAuMC4wLjAuMC4xICYmCisKKwkJdGVzdF9jb21taXQgYmFyICYmCisKKwkJZ2l0IGZhc3QtZXhwb3J0IC0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdD1yZXdyaXRlIC0tYWxsIC0tIGJhci50ID5vdXRwdXQgJiYKKwkJZ3JlcCBmcm9tLiRaRVJPX09JRCBvdXRwdXQKKwkpCisnCisKK2NhdCA+IGxpbWl0LWJ5LXBhdGhzL2V4cGVjdGVkIDw8IEVPRgorYmxvYgorbWFyayA6MQorZGF0YSA0Citmb28KKworYmxvYgorbWFyayA6MgorZGF0YSAzCitoaQorCityZXNldCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCittYXJrIDozCithdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTExMjkxMjcxMyAtMDcwMAorY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjcxMyAtMDcwMAorZGF0YSAxMgorU2Vjb25kIGZpbGUKK00gMTAwNjQ0IDoxIGJhcgorTSAxMDA2NDQgOjIgdGhlcmUKKworRU9GCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ25vIGV4YWN0LXJlZiByZXZpc2lvbnMgaW5jbHVkZWQnICcKKwkoCisJCWNkIGxpbWl0LWJ5LXBhdGhzICYmCisJCWdpdCBmYXN0LWV4cG9ydCBtYXN0ZXJ+Mi4ubWFzdGVyfjEgPiBvdXRwdXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRoIGxpbWl0aW5nIHdpdGggaW1wb3J0LW1hcmtzIGRvZXMgbm90IGxvc2UgdW5tb2RpZmllZCBmaWxlcycgICAgICAgICcKKwlnaXQgY2hlY2tvdXQgLWIgc2ltcGxlIG1hcmtzfjIgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1leHBvcnQtbWFya3M9bWFya3Mgc2ltcGxlIC0tIGZpbGUgPiAvZGV2L251bGwgJiYKKwllY2hvIG1vcmUgY29udGVudCA+PiBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbW5leHQgZmlsZSAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyBzaW1wbGUgLS0gZmlsZSBmaWxlMCA+YWN0dWFsICYmCisJZ3JlcCBmaWxlMCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXZvaWQgY29ycnVwdCBzdHJlYW0gd2l0aCBub24tZXhpc3RlbnQgbWFyaycgJworCXRlc3RfY3JlYXRlX3JlcG8gYXZvaWRfbm9uX2V4aXN0ZW50X21hcmsgJiYKKwkoCisJCWNkIGF2b2lkX25vbl9leGlzdGVudF9tYXJrICYmCisKKwkJdGVzdF9jb21taXQgaW1wb3J0YW50LXBhdGggJiYKKworCQl0ZXN0X2NvbW1pdCBpZ25vcmVkICYmCisKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWVjaG8gZm9vID4+aW1wb3J0YW50LXBhdGgudCAmJgorCQlnaXQgYWRkIGltcG9ydGFudC1wYXRoLnQgJiYKKwkJdGVzdF9jb21taXQgbW9yZSBjaGFuZ2VzICYmCisKKwkJZ2l0IGZhc3QtZXhwb3J0IC0tYWxsIC0tIGltcG9ydGFudC1wYXRoLnQgfCBnaXQgZmFzdC1pbXBvcnQgLS1mb3JjZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnVsbC10cmVlIHJlLXNob3dzIHVubW9kaWZpZWQgZmlsZXMnICAgICAgICAnCisJZ2l0IGNoZWNrb3V0IC1mIHNpbXBsZSAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLWZ1bGwtdHJlZSBzaW1wbGUgPmFjdHVhbCAmJgorCXRlc3QgJChncmVwIC1jIGZpbGUwIGFjdHVhbCkgLWVxIDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0LXVwIGEgZmV3IG1vcmUgdGFncyBmb3IgdGFnIGV4cG9ydCB0ZXN0cycgJworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlIRUFEX1RSRUU9JChnaXQgc2hvdyAtcyAtLXByZXR0eT1yYXcgSEVBRCB8IGdyZXAgdHJlZSB8IHNlZCAicy90cmVlIC8vIikgJiYKKwlnaXQgdGFnICAgIHRyZWVfdGFnICAgICAgICAtbSAidGFnZ2luZyBhIHRyZWUiICRIRUFEX1RSRUUgJiYKKwlnaXQgdGFnIC1hIHRyZWVfdGFnLW9iaiAgICAtbSAidGFnZ2luZyBhIHRyZWUiICRIRUFEX1RSRUUgJiYKKwlnaXQgdGFnICAgIHRhZy1vYmpfdGFnICAgICAtbSAidGFnZ2luZyBhIHRhZyIgdHJlZV90YWctb2JqICYmCisJZ2l0IHRhZyAtYSB0YWctb2JqX3RhZy1vYmogLW0gInRhZ2dpbmcgYSB0YWciIHRyZWVfdGFnLW9iagorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlX3RhZycgICAgICAgICcKKwlta2RpciByZXN1bHQgJiYKKwkoY2QgcmVzdWx0ICYmIGdpdCBpbml0KSAmJgorCWdpdCBmYXN0LWV4cG9ydCB0cmVlX3RhZyA+IGZlLXN0cmVhbSAmJgorCShjZCByZXN1bHQgJiYgZ2l0IGZhc3QtaW1wb3J0IDwgLi4vZmUtc3RyZWFtKQorJworCisjIE5FRURTV09SSzogbm90IGp1c3QgY2hlY2sgcmV0dXJuIHN0YXR1cywgYnV0IHZhbGlkYXRlIHRoZSBvdXRwdXQKKyMgTm90ZSB0aGF0IHRoZXNlIHRlc3RzIERPIE5PVEhJTkcgb3RoZXIgdGhhbiBwcmludCBhIHdhcm5pbmcgdGhhdAorIyB0aGV5IGFyZSBvbWl0dGluZyB0aGUgb25lIHRhZyB3ZSBhc2tlZCB0aGVtIHRvIGV4cG9ydCAoYmVjYXVzZSB0aGUKKyMgdGFncyByZXNvbHZlIHRvIGEgdHJlZSkuICBUaGV5IGV4aXN0IGp1c3QgdG8gbWFrZSBzdXJlIHdlIGRvIG5vdAorIyBhYm9ydCBidXQgaW5zdGVhZCBqdXN0IHdhcm4uCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlX3RhZy1vYmonICAgICdnaXQgZmFzdC1leHBvcnQgdHJlZV90YWctb2JqJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnLW9ial90YWcnICAgICAnZ2l0IGZhc3QtZXhwb3J0IHRhZy1vYmpfdGFnJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnLW9ial90YWctb2JqJyAnZ2l0IGZhc3QtZXhwb3J0IHRhZy1vYmpfdGFnLW9iaicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFuZGxpbmcgdGFncyBvZiBibG9icycgJworCWdpdCB0YWcgLWEgLW0gIlRhZyBvZiBhIGJsb2IiIGJsb2J0YWcgJChnaXQgcmV2LXBhcnNlIG1hc3RlcjpmaWxlKSAmJgorCWdpdCBmYXN0LWV4cG9ydCBibG9idGFnID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlibG9iCisJbWFyayA6MQorCWRhdGEgOQorCWRpZSBMdWZ0CisKKwl0YWcgYmxvYnRhZworCWZyb20gOjEKKwl0YWdnZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDE0CisJVGFnIG9mIGEgYmxvYgorCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYW5kbGluZyBuZXN0ZWQgdGFncycgJworCWdpdCB0YWcgLWEgLW0gIlRoaXMgaXMgYSBuZXN0ZWQgdGFnIiBuZXN0ZWQgbXVzcyAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLW1hcmstdGFncyBuZXN0ZWQgPm91dHB1dCAmJgorCWdyZXAgIl5mcm9tICRaRVJPX09JRCQiIG91dHB1dCAmJgorCWdyZXAgIl50YWcgbmVzdGVkJCIgb3V0cHV0ID50YWdfbGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIHRhZ19saW5lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXJlY3RvcnkgYmVjb21lcyBzeW1saW5rJyAgICAgICAgJworCWdpdCBpbml0IGRpcnRvc3ltbGluayAmJgorCWdpdCBpbml0IHJlc3VsdCAmJgorCSgKKwkJY2QgZGlydG9zeW1saW5rICYmCisJCW1rZGlyIGZvbyAmJgorCQlta2RpciBiYXIgJiYKKwkJZWNobyBoZWxsbyA+IGZvby93b3JsZCAmJgorCQllY2hvIGhlbGxvID4gYmFyL3dvcmxkICYmCisJCWdpdCBhZGQgZm9vL3dvcmxkIGJhci93b3JsZCAmJgorCQlnaXQgY29tbWl0IC1xIC1tb25lICYmCisJCWdpdCBybSAtciBmb28gJiYKKwkJdGVzdF9sbl9zX2FkZCBiYXIgZm9vICYmCisJCWdpdCBjb21taXQgLXEgLW10d28KKwkpICYmCisJKAorCQljZCBkaXJ0b3N5bWxpbmsgJiYKKwkJZ2l0IGZhc3QtZXhwb3J0IG1hc3RlciAtLSBmb28gfAorCQkoY2QgLi4vcmVzdWx0ICYmIGdpdCBmYXN0LWltcG9ydCAtLXF1aWV0KQorCSkgJiYKKwkoY2QgcmVzdWx0ICYmIGdpdCBzaG93IG1hc3Rlcjpmb28pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZXhwb3J0IHF1b3RlcyBwYXRobmFtZXMnICcKKwlnaXQgaW5pdCBjcmF6eS1wYXRocyAmJgorCXRlc3RfY29uZmlnIC1DIGNyYXp5LXBhdGhzIGNvcmUucHJvdGVjdE5URlMgZmFsc2UgJiYKKwkoY2QgY3JhenktcGF0aHMgJiYKKwkgYmxvYj0kKGVjaG8gZm9vIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJIGdpdCAtYyBjb3JlLnByb3RlY3ROVEZTPWZhbHNlIHVwZGF0ZS1pbmRleCAtLWFkZCBcCisJCS0tY2FjaGVpbmZvIDEwMDY0NCAkYmxvYiAiJChwcmludGYgInBhdGggd2l0aFxcbm5ld2xpbmUiKSIgXAorCQktLWNhY2hlaW5mbyAxMDA2NDQgJGJsb2IgInBhdGggd2l0aCBcInF1b3RlXCIiIFwKKwkJLS1jYWNoZWluZm8gMTAwNjQ0ICRibG9iICJwYXRoIHdpdGggXFxiYWNrc2xhc2giIFwKKwkJLS1jYWNoZWluZm8gMTAwNjQ0ICRibG9iICJwYXRoIHdpdGggc3BhY2UiICYmCisJIGdpdCBjb21taXQgLW0gYWRkaXRpb24gJiYKKwkgZ2l0IGxzLWZpbGVzIC16IC1zIHwgcGVybCAtMHBlICJze1xcdH17JCZzdWJkaXIvfSIgPmluZGV4ICYmCisJIGdpdCByZWFkLXRyZWUgLS1lbXB0eSAmJgorCSBnaXQgdXBkYXRlLWluZGV4IC16IC0taW5kZXgtaW5mbyA8aW5kZXggJiYKKwkgZ2l0IGNvbW1pdCAtbSByZW5hbWUgJiYKKwkgZ2l0IHJlYWQtdHJlZSAtLWVtcHR5ICYmCisJIGdpdCBjb21taXQgLW0gZGVsZXRpb24gJiYKKwkgZ2l0IGZhc3QtZXhwb3J0IC1NIEhFQUQgPmV4cG9ydC5vdXQgJiYKKwkgZ2l0IHJldi1saXN0IEhFQUQgPmV4cGVjdCAmJgorCSBnaXQgaW5pdCByZXN1bHQgJiYKKwkgY2QgcmVzdWx0ICYmCisJIGdpdCBmYXN0LWltcG9ydCA8Li4vZXhwb3J0Lm91dCAmJgorCSBnaXQgcmV2LWxpc3QgSEVBRCA+YWN0dWFsICYmCisJIHRlc3RfY21wIC4uL2V4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYmlkaXJlY3Rpb25hbGl0eScgJworCWdpdCBpbml0IG1hcmtzLXRlc3QgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1leHBvcnQtbWFya3M9bWFya3MtY3VyIC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1tYXJrcy1jdXIgLS1icmFuY2hlcyB8IFwKKwlnaXQgLS1naXQtZGlyPW1hcmtzLXRlc3QvLmdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1tYXJrcy1uZXcgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzPW1hcmtzLW5ldyAmJgorCShjZCBtYXJrcy10ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gV29obGF1ZiA+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJiYWNrIGluIHRpbWUiKSAmJgorCWdpdCAtLWdpdC1kaXI9bWFya3MtdGVzdC8uZ2l0IGZhc3QtZXhwb3J0IC0tZXhwb3J0LW1hcmtzPW1hcmtzLW5ldyAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHM9bWFya3MtbmV3IC0tYnJhbmNoZXMgfCBcCisJZ2l0IGZhc3QtaW1wb3J0IC0tZXhwb3J0LW1hcmtzPW1hcmtzLWN1ciAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHM9bWFya3MtY3VyCisnCisKK2NhdCA+IGV4cGVjdGVkIDw8IEVPRgorYmxvYgorbWFyayA6MTMKK2RhdGEgNQorYnVtcAorCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK21hcmsgOjE0CithdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTExMjkxMjc3MyAtMDcwMAorY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjc3MyAtMDcwMAorZGF0YSA1CitidW1wCitmcm9tIDoxMgorTSAxMDA2NDQgOjEzIGZpbGUKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F2b2lkIHVuaW50ZXJlc3RpbmcgcmVmcycgJworCT4gdG1wLW1hcmtzICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0taW1wb3J0LW1hcmtzPXRtcC1tYXJrcyBcCisJCS0tZXhwb3J0LW1hcmtzPXRtcC1tYXJrcyBtYXN0ZXIgPiAvZGV2L251bGwgJiYKKwlnaXQgdGFnIHYxLjAgJiYKKwlnaXQgYnJhbmNoIHVuaW50ZXJlc3RpbmcgJiYKKwllY2hvIGJ1bXAgPiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBidW1wICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0taW1wb3J0LW1hcmtzPXRtcC1tYXJrcyBcCisJCS0tZXhwb3J0LW1hcmtzPXRtcC1tYXJrcyBedW5pbnRlcmVzdGluZyBedjEuMCBtYXN0ZXIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0ZWQgPDwgRU9GCityZXNldCByZWZzL2hlYWRzL21hc3RlcgorZnJvbSA6MTQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnMgYXJlIHVwZGF0ZWQgZXZlbiBpZiBubyBjb21taXRzIG5lZWQgdG8gYmUgZXhwb3J0ZWQnICcKKwk+IHRtcC1tYXJrcyAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLWltcG9ydC1tYXJrcz10bXAtbWFya3MgXAorCQktLWV4cG9ydC1tYXJrcz10bXAtbWFya3MgbWFzdGVyID4gL2Rldi9udWxsICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0taW1wb3J0LW1hcmtzPXRtcC1tYXJrcyBcCisJCS0tZXhwb3J0LW1hcmtzPXRtcC1tYXJrcyBtYXN0ZXIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIHJlZnNwZWMnICcKKwlnaXQgZmFzdC1leHBvcnQgLS1yZWZzcGVjIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvZm9vYmFyIG1hc3RlciA+YWN0dWFsMiAmJgorCWdyZXAgIl5jb21taXQgIiBhY3R1YWwyIHwgc29ydCB8IHVuaXEgPmFjdHVhbCAmJgorCWVjaG8gImNvbW1pdCByZWZzL2hlYWRzL2Zvb2JhciIgPiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGUgcmVmIGJlY2F1c2UgZW50aXJlIGhpc3RvcnkgZXhjbHVkZWQnICcKKwlnaXQgYnJhbmNoIHRvLWRlbGV0ZSAmJgorCWdpdCBmYXN0LWV4cG9ydCB0by1kZWxldGUgXnRvLWRlbGV0ZSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlyZXNldCByZWZzL2hlYWRzL3RvLWRlbGV0ZQorCWZyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSByZWZzcGVjJyAnCisJZ2l0IGZhc3QtZXhwb3J0IC0tcmVmc3BlYyA6cmVmcy9oZWFkcy90by1kZWxldGUgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJcmVzZXQgcmVmcy9oZWFkcy90by1kZWxldGUKKwlmcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGVuIHVzaW5nIC1DLCBkbyBub3QgZGVjbGFyZSBjb3B5IHdoZW4gc291cmNlIG9mIGNvcHkgaXMgYWxzbyBtb2RpZmllZCcgJworCXRlc3RfY3JlYXRlX3JlcG8gc3JjICYmCisJZWNobyBhX2xpbmUgPnNyYy9maWxlLnR4dCAmJgorCWdpdCAtQyBzcmMgYWRkIGZpbGUudHh0ICYmCisJZ2l0IC1DIHNyYyBjb21taXQgLW0gMXN0X2NvbW1pdCAmJgorCisJY3Agc3JjL2ZpbGUudHh0IHNyYy9maWxlMi50eHQgJiYKKwllY2hvIGFub3RoZXJfbGluZSA+PnNyYy9maWxlLnR4dCAmJgorCWdpdCAtQyBzcmMgYWRkIGZpbGUudHh0IGZpbGUyLnR4dCAmJgorCWdpdCAtQyBzcmMgY29tbWl0IC1tIDJuZF9jb21taXQgJiYKKworCXRlc3RfY3JlYXRlX3JlcG8gZHN0ICYmCisJZ2l0IC1DIHNyYyBmYXN0LWV4cG9ydCAtLWFsbCAtQyA+YWN0dWFsICYmCisJZ2l0IC1DIGRzdCBmYXN0LWltcG9ydCA8YWN0dWFsICYmCisJZ2l0IC1DIHNyYyBzaG93ID5leHBlY3RlZCAmJgorCWdpdCAtQyBkc3Qgc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGNvbW1pdCBnZXRzIGV4cG9ydGVkIHdpdGggLS1pbXBvcnQtbWFya3MnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIG1lcmdpbmcgJiYKKwkoCisJCWNkIG1lcmdpbmcgJiYKKwkJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdG9waWMgJiYKKwkJdGVzdF9jb21taXQgb24tdG9waWMgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQl0ZXN0X2NvbW1pdCBvbi1tYXN0ZXIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBtZXJnZSAtLW5vLWZmIC1tIFllYWggdG9waWMgJiYKKworCQllY2hvICI6MSAkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgPm1hcmtzICYmCisJCWdpdCBmYXN0LWV4cG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyBtYXN0ZXIgPm91dCAmJgorCQlncmVwIFllYWggb3V0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkzNTAvYnJva2VuLWlzby04ODU5LTctY29tbWl0LW1lc3NhZ2UudHh0IGIvdC90OTM1MC9icm9rZW4taXNvLTg4NTktNy1jb21taXQtbWVzc2FnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2YWQ3NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkzNTAvYnJva2VuLWlzby04ODU5LTctY29tbWl0LW1lc3NhZ2UudHh0CkBAIC0wLDAgKzEgQEAKK1BpOiDwOyBJbnZhbGlkOiD/ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdC90OTM1MC9zaW1wbGUtaXNvLTg4NTktNy1jb21taXQtbWVzc2FnZS50eHQgYi90L3Q5MzUwL3NpbXBsZS1pc28tODg1OS03LWNvbW1pdC1tZXNzYWdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjNmMGMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTM1MC9zaW1wbGUtaXNvLTg4NTktNy1jb21taXQtbWVzc2FnZS50eHQKQEAgLTAsMCArMSBAQAorUGk6IPAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90L3Q5MzUxLWZhc3QtZXhwb3J0LWFub255bWl6ZS5zaCBiL3QvdDkzNTEtZmFzdC1leHBvcnQtYW5vbnltaXplLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5N2RjNTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MzUxLWZhc3QtZXhwb3J0LWFub255bWl6ZS5zaApAQCAtMCwwICsxLDExMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIHRlc3RzIGZvciBmYXN0LWV4cG9ydCAtLWFub255bWl6ZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzaW1wbGUgcmVwbycgJworCXRlc3RfY29tbWl0IGJhc2UgJiYKKwl0ZXN0X2NvbW1pdCBmb28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgb3RoZXIgSEVBRF4gJiYKKwlta2RpciBzdWJkaXIgJiYKKwl0ZXN0X2NvbW1pdCBzdWJkaXIvYmFyICYmCisJdGVzdF9jb21taXQgc3ViZGlyL3h5enp5ICYmCisJZ2l0IHRhZyAtbSAiYW5ub3RhdGVkIHRhZyIgbXl0YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwb3J0IGFub255bWl6ZWQgc3RyZWFtJyAnCisJZ2l0IGZhc3QtZXhwb3J0IC0tYW5vbnltaXplIC0tYWxsID5zdHJlYW0KKycKKworIyB0aGlzIGFsc28gY292ZXJzIGNvbW1pdCBtZXNzYWdlcwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyZWFtIG9taXRzIHBhdGggbmFtZXMnICcKKwkhIGdyZXAgYmFzZSBzdHJlYW0gJiYKKwkhIGdyZXAgZm9vIHN0cmVhbSAmJgorCSEgZ3JlcCBzdWJkaXIgc3RyZWFtICYmCisJISBncmVwIGJhciBzdHJlYW0gJiYKKwkhIGdyZXAgeHl6enkgc3RyZWFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmVhbSBhbGxvd3MgbWFzdGVyIGFzIHJlZm5hbWUnICcKKwlncmVwIG1hc3RlciBzdHJlYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyZWFtIG9taXRzIG90aGVyIHJlZm5hbWVzJyAnCisJISBncmVwIG90aGVyIHN0cmVhbSAmJgorCSEgZ3JlcCBteXRhZyBzdHJlYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyZWFtIG9taXRzIGlkZW50aXRpZXMnICcKKwkhIGdyZXAgIiRHSVRfQ09NTUlUVEVSX05BTUUiIHN0cmVhbSAmJgorCSEgZ3JlcCAiJEdJVF9DT01NSVRURVJfRU1BSUwiIHN0cmVhbSAmJgorCSEgZ3JlcCAiJEdJVF9BVVRIT1JfTkFNRSIgc3RyZWFtICYmCisJISBncmVwICIkR0lUX0FVVEhPUl9FTUFJTCIgc3RyZWFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmVhbSBvbWl0cyB0YWcgbWVzc2FnZScgJworCSEgZ3JlcCAiYW5ub3RhdGVkIHRhZyIgc3RyZWFtCisnCisKKyMgTk9URTogd2UgY2hkaXIgdG8gdGhlIG5ldywgYW5vbnltaXplZCByZXBvc2l0b3J5CisjIGFmdGVyIHRoaXMuIEFsbCBmdXJ0aGVyIHRlc3RzIHNob3VsZCBhc3N1bWUgdGhpcy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBzdHJlYW0gdG8gbmV3IHJlcG9zaXRvcnknICcKKwlnaXQgaW5pdCBuZXcgJiYKKwljZCBuZXcgJiYKKwlnaXQgZmFzdC1pbXBvcnQgPC4uL3N0cmVhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN1bHQgaGFzIHR3byBicmFuY2hlcycgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiIHJlZnMvaGVhZHMgPmJyYW5jaGVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBicmFuY2hlcyAmJgorCW90aGVyX2JyYW5jaD0kKGdyZXAgLXYgcmVmcy9oZWFkcy9tYXN0ZXIgYnJhbmNoZXMpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcG8gaGFzIG9yaWdpbmFsIHNoYXBlIGFuZCB0aW1lc3RhbXBzJyAnCisJc2hhcGUgKCkgeworCQlnaXQgbG9nIC0tZm9ybWF0PSIlbSAlY3QiIC0tbGVmdC1yaWdodCAtLWJvdW5kYXJ5ICIkQCIKKwl9ICYmCisJKGNkIC4uICYmIHNoYXBlIG1hc3Rlci4uLm90aGVyKSA+ZXhwZWN0ICYmCisJc2hhcGUgbWFzdGVyLi4uJG90aGVyX2JyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyb290IHRyZWUgaGFzIG9yaWdpbmFsIHNoYXBlJyAnCisJIyB0aGUgb3V0cHV0IGVudHJpZXMgYXJlIG5vdCBuZWNlc3NhcmlseSBpbiB0aGUgc2FtZQorCSMgb3JkZXIsIGJ1dCB3ZSBrbm93IGF0IGxlYXN0IHRoYXQgd2Ugd2lsbCBoYXZlIG9uZSB0cmVlCisJIyBhbmQgb25lIGJsb2IsIHNvIGp1c3QgY2hlY2sgdGhlIHNvcnRlZCBvcmRlcgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlibG9iCisJdHJlZQorCUVPRgorCWdpdCBscy10cmVlICRvdGhlcl9icmFuY2ggPnJvb3QgJiYKKwljdXQgLWQiICIgLWYyIDxyb290IHwgc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRocyBpbiBzdWJkaXIgZW5kZWQgdXAgaW4gb25lIHRyZWUnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJYmxvYgorCWJsb2IKKwlFT0YKKwl0cmVlPSQoZ3JlcCB0cmVlIHJvb3QgfCBjdXQgLWYyKSAmJgorCWdpdCBscy10cmVlICRvdGhlcl9icmFuY2g6JHRyZWUgPnRyZWUgJiYKKwljdXQgLWQiICIgLWYyIDx0cmVlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyBwb2ludHMgdG8gYnJhbmNoIHRpcCcgJworCWdpdCByZXYtcGFyc2UgJG90aGVyX2JyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJSgqb2JqZWN0bmFtZSkiIHwgZ3JlcCAuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lkZW50cyBhcmUgc2hhcmVkJyAnCisJZ2l0IGxvZyAtLWFsbCAtLWZvcm1hdD0iJWFuIDwlYWU+IiA+YXV0aG9ycyAmJgorCXNvcnQgLXUgYXV0aG9ycyA+dW5pcXVlICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSB1bmlxdWUgJiYKKwlnaXQgbG9nIC0tYWxsIC0tZm9ybWF0PSIlY24gPCVjZT4iID5jb21taXR0ZXJzICYmCisJc29ydCAtdSBjb21taXR0ZXJzID51bmlxdWUgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHVuaXF1ZSAmJgorCSEgdGVzdF9jbXAgYXV0aG9ycyBjb21taXR0ZXJzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTQwMC1naXQtY3Zzc2VydmVyLXNlcnZlci5zaCBiL3QvdDk0MDAtZ2l0LWN2c3NlcnZlci1zZXJ2ZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTVlNWRjYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk0MDAtZ2l0LWN2c3NlcnZlci1zZXJ2ZXIuc2gKQEAgLTAsMCArMSw2MzcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRnJhbmsgTGljaHRlbmhlbGQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWN2c3NlcnZlciBhY2Nlc3MKKwordGVzdHMgcmVhZCBhY2Nlc3MgdG8gYSBnaXQgcmVwb3NpdG9yeSB3aXRoIHRoZQorY3ZzIENMSSBjbGllbnQgdmlhIGdpdC1jdnNzZXJ2ZXIgc2VydmVyJworCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkw7IHRoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0IGN2c3NlcnZlciB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKK2N2cyA+L2Rldi9udWxsIDI+JjEKK2lmIHRlc3QgJD8gLW5lIDEKK3RoZW4KKyAgICBza2lwX2FsbD0nc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgY3ZzIG5vdCBmb3VuZCcKKyAgICB0ZXN0X2RvbmUKK2ZpCitwZXJsIC1lICd1c2UgREJJOyB1c2UgREJEOjpTUUxpdGUnID4vZGV2L251bGwgMj4mMSB8fCB7CisgICAgc2tpcF9hbGw9J3NraXBwaW5nIGdpdC1jdnNzZXJ2ZXIgdGVzdHMsIFBlcmwgU1FMaXRlIGludGVyZmFjZSB1bmF2YWlsYWJsZScKKyAgICB0ZXN0X2RvbmUKK30KKworV09SS0RJUj0kUFdECitTRVJWRVJESVI9JFBXRC9naXRjdnMuZ2l0CitnaXRfY29uZmlnPSIkU0VSVkVSRElSL2NvbmZpZyIKK0NWU1JPT1Q9Ijpmb3JrOiRTRVJWRVJESVIiCitDVlNXT1JLPSIkUFdEL2N2c3dvcmsiCitDVlNfU0VSVkVSPWdpdC1jdnNzZXJ2ZXIKK2V4cG9ydCBDVlNST09UIENWU19TRVJWRVIKKworcm0gLXJmICIkQ1ZTV09SSyIgIiRTRVJWRVJESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworICBnaXQgY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorICBlY2hvID5lbXB0eSAmJgorICBnaXQgYWRkIGVtcHR5ICYmCisgIGdpdCBjb21taXQgLXEgLW0gIkZpcnN0IENvbW1pdCIgJiYKKyAgbWtkaXIgc2Vjb25kcm9vdCAmJgorICAoIGNkIHNlY29uZHJvb3QgJiYKKyAgZ2l0IGluaXQgJiYKKyAgdG91Y2ggc2Vjb25kcm9vdGZpbGUgJiYKKyAgZ2l0IGFkZCBzZWNvbmRyb290ZmlsZSAmJgorICBnaXQgY29tbWl0IC1tICJzZWNvbmQgcm9vdCIpICYmCisgIGdpdCBmZXRjaCBzZWNvbmRyb290IG1hc3RlciAmJgorICBnaXQgbWVyZ2UgLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIEZFVENIX0hFQUQgJiYKKyAgZ2l0IGNsb25lIC1xIC0tYmFyZSAiJFdPUktESVIvLmdpdCIgIiRTRVJWRVJESVIiID4vZGV2L251bGwgMj4mMSAmJgorICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCB0cnVlICYmCisgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgZ2l0Y3ZzLmxvZ2ZpbGUgIiRTRVJWRVJESVIvZ2l0Y3ZzLmxvZyIgJiYKKyAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMuYXV0aGRiICIkU0VSVkVSRElSL2F1dGguZGIiICYmCisgIGVjaG8gY3ZzdXNlcjpjdkdWRWFyTUxuaGxBID4gIiRTRVJWRVJESVIvYXV0aC5kYiIKKycKKworIyBub3RlIHRoYXQgY3ZzIGRvZXNuJ3QgYWNjZXB0IGFic29sdXRlIHBhdGhuYW1lcworIyBhcyBhcmd1bWVudCB0byBjbyAtZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgY2hlY2tvdXQnIFwKKyAgJ0dJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yayBtYXN0ZXIgJiYKKyAgIHRlc3QgIiQoZWNobyAkKGdyZXAgLXYgXkQgY3Zzd29yay9DVlMvRW50cmllc3xjdXQgLWQvIC1mMiwzLDUgfCBoZWFkIC1uIDEpKSIgPSAiZW1wdHkvMS4xLyIgJiYKKyAgIHRlc3QgIiQoZWNobyAkKGdyZXAgLXYgXkQgY3Zzd29yay9DVlMvRW50cmllc3xjdXQgLWQvIC1mMiwzLDUgfCBzZWQgLW5lIFwkcCkpIiA9ICJzZWNvbmRyb290ZmlsZS8xLjEvIicKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQU0VSVkVSIEFVVEhFTlRJQ0FUSU9OCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NhdCA+cmVxdWVzdC1hbm9ueW1vdXMgIDw8RU9GCitCRUdJTiBBVVRIIFJFUVVFU1QKKyRTRVJWRVJESVIKK2Fub255bW91cworCitFTkQgQVVUSCBSRVFVRVNUCitFT0YKKworY2F0ID5yZXF1ZXN0LWdpdCAgPDxFT0YKK0JFR0lOIEFVVEggUkVRVUVTVAorJFNFUlZFUkRJUgorZ2l0CisKK0VORCBBVVRIIFJFUVVFU1QKK0VPRgorCitjYXQgPmxvZ2luLWFub255bW91cyA8PEVPRgorQkVHSU4gVkVSSUZJQ0FUSU9OIFJFUVVFU1QKKyRTRVJWRVJESVIKK2Fub255bW91cworCitFTkQgVkVSSUZJQ0FUSU9OIFJFUVVFU1QKK0VPRgorCitjYXQgPmxvZ2luLWdpdCA8PEVPRgorQkVHSU4gVkVSSUZJQ0FUSU9OIFJFUVVFU1QKKyRTRVJWRVJESVIKK2dpdAorCitFTkQgVkVSSUZJQ0FUSU9OIFJFUVVFU1QKK0VPRgorCitjYXQgPmxvZ2luLWdpdC1vayA8PEVPRgorQkVHSU4gVkVSSUZJQ0FUSU9OIFJFUVVFU1QKKyRTRVJWRVJESVIKK2N2c3VzZXIKK0FoPFo6eVpaMzAgZQorRU5EIFZFUklGSUNBVElPTiBSRVFVRVNUCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHNlcnZlciBhdXRoZW50aWNhdGlvbicgXAorICAnY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyID5sb2cgMj4mMSAmJgorICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BzZXJ2ZXIgYXV0aGVudGljYXRpb24gZmFpbHVyZSAobm9uLWFub255bW91cyB1c2VyKScgXAorICAnaWYgY2F0IHJlcXVlc3QtZ2l0IHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyID5sb2cgMj4mMQorICAgdGhlbgorICAgICAgIGZhbHNlCisgICBlbHNlCisgICAgICAgdHJ1ZQorICAgZmkgJiYKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIEhBVEUgWU9VXCQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwc2VydmVyIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3MgKG5vbi1hbm9ueW1vdXMgdXNlciB3aXRoIHBhc3N3b3JkKScgXAorICAnY2F0IGxvZ2luLWdpdC1vayB8IGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciA+bG9nIDI+JjEgJiYKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VXCQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwc2VydmVyIGF1dGhlbnRpY2F0aW9uIChsb2dpbiknIFwKKyAgJ2NhdCBsb2dpbi1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgPmxvZyAyPiYxICYmCisgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVVwkIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHNlcnZlciBhdXRoZW50aWNhdGlvbiBmYWlsdXJlIChsb2dpbi9ub24tYW5vbnltb3VzIHVzZXIpJyBcCisgICdpZiBjYXQgbG9naW4tZ2l0IHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyID5sb2cgMj4mMQorICAgdGhlbgorICAgICAgIGZhbHNlCisgICBlbHNlCisgICAgICAgdHJ1ZQorICAgZmkgJiYKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIEhBVEUgWU9VXCQiJworCisKKyMgbWlzdXNlIHBzZXJ2ZXIgYXV0aGVudGljYXRpb24gZm9yIHRlc3Rpbmcgb2YgcmVxX1Jvb3QKKworY2F0ID5yZXF1ZXN0LXJlbGF0aXZlICA8PEVPRgorQkVHSU4gQVVUSCBSRVFVRVNUCitnaXRjdnMuZ2l0Cithbm9ueW1vdXMKKworRU5EIEFVVEggUkVRVUVTVAorRU9GCisKK2NhdCA+cmVxdWVzdC1jb25mbGljdCAgPDxFT0YKK0JFR0lOIEFVVEggUkVRVUVTVAorJFNFUlZFUkRJUgorYW5vbnltb3VzCisKK0VORCBBVVRIIFJFUVVFU1QKK1Jvb3QgJFdPUktESVIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCBmYWlsdXJlIChyZWxhdGl2ZSBwYXRobmFtZSknIFwKKyAgJ2lmIGNhdCByZXF1ZXN0LXJlbGF0aXZlIHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyID5sb2cgMj4mMQorICAgdGhlbgorICAgICAgIGVjaG8gdW5leHBlY3RlZCBzdWNjZXNzCisgICAgICAgZmFsc2UKKyAgIGVsc2UKKyAgICAgICB0cnVlCisgICBmaSAmJgorICAgdGFpbCBsb2cgfCBncmVwICJeZXJyb3IgMSBSb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aG5hbWUkIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgZmFpbHVyZSAoY29uZmxpY3Rpbmcgcm9vdHMpJyBcCisgICdjYXQgcmVxdWVzdC1jb25mbGljdCB8IGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciA+bG9nIDI+JjEgJiYKKyAgIHRhaWwgbG9nIHwgZ3JlcCAiXmVycm9yIDEgQ29uZmxpY3Rpbmcgcm9vdHMgc3BlY2lmaWVkJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IChzdHJpY3QgcGF0aHMpJyBcCisgICdjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIC0tc3RyaWN0LXBhdGhzIHBzZXJ2ZXIgIiRTRVJWRVJESVIiID5sb2cgMj4mMSAmJgorICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IGZhaWx1cmUgKHN0cmljdC1wYXRocyknICcKKyAgICAhIGNhdCByZXF1ZXN0LWFub255bW91cyB8CisgICAgZ2l0LWN2c3NlcnZlciAtLXN0cmljdC1wYXRocyBwc2VydmVyICIkV09SS0RJUiIgPmxvZyAyPiYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290ICh3L28gc3RyaWN0LXBhdGhzKScgXAorICAnY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyICIkV09SS0RJUi8iID5sb2cgMj4mMSAmJgorICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IGZhaWx1cmUgKHcvbyBzdHJpY3QtcGF0aHMpJyAnCisgICAgISBjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfAorICAgIGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciAiJFdPUktESVIvZ2l0Y3ZzIiA+bG9nIDI+JjEKKycKKworY2F0ID5yZXF1ZXN0LWJhc2UgIDw8RU9GCitCRUdJTiBBVVRIIFJFUVVFU1QKKy9naXRjdnMuZ2l0Cithbm9ueW1vdXMKKworRU5EIEFVVEggUkVRVUVTVAorUm9vdCAvZ2l0Y3ZzLmdpdAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IChiYXNlLXBhdGgpJyBcCisgICdjYXQgcmVxdWVzdC1iYXNlIHwgZ2l0LWN2c3NlcnZlciAtLXN0cmljdC1wYXRocyAtLWJhc2UtcGF0aCAiJFdPUktESVIvIiBwc2VydmVyICIkU0VSVkVSRElSIiA+bG9nIDI+JjEgJiYKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VXCQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCBmYWlsdXJlIChiYXNlLXBhdGgpJyAnCisgICAgISBjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfAorICAgIGdpdC1jdnNzZXJ2ZXIgLS1zdHJpY3QtcGF0aHMgLS1iYXNlLXBhdGggIiRXT1JLRElSIiBwc2VydmVyICIkU0VSVkVSRElSIiA+bG9nIDI+JjEKKycKKworR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgZmFsc2UgfHwgZXhpdCAxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IChleHBvcnQtYWxsKScgXAorICAnY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwgZ2l0LWN2c3NlcnZlciAtLWV4cG9ydC1hbGwgcHNlcnZlciAiJFdPUktESVIiID5sb2cgMj4mMSAmJgorICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IGZhaWx1cmUgKGV4cG9ydC1hbGwgdy9vIHdoaXRlbGlzdCknIFwKKyAgJyEgKGNhdCByZXF1ZXN0LWFub255bW91cyB8IGdpdC1jdnNzZXJ2ZXIgLS1leHBvcnQtYWxsIHBzZXJ2ZXIgPmxvZyAyPiYxIHx8IGZhbHNlKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgKGV2ZXJ5dGhpbmcgdG9nZXRoZXIpJyBcCisgICdjYXQgcmVxdWVzdC1iYXNlIHwgZ2l0LWN2c3NlcnZlciAtLWV4cG9ydC1hbGwgLS1zdHJpY3QtcGF0aHMgLS1iYXNlLXBhdGggIiRXT1JLRElSLyIgcHNlcnZlciAiJFNFUlZFUkRJUiIgPmxvZyAyPiYxICYmCisgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVVwkIicKKworR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgdHJ1ZSB8fCBleGl0IDEKKworIy0tLS0tLS0tLS0tLS0tCisjIENPTkZJRyBURVNUUworIy0tLS0tLS0tLS0tLS0tCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGN2cy5lbmFibGVkID0gZmFsc2UnIFwKKyAgJ0dJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5lbmFibGVkIGZhbHNlICYmCisgICBpZiBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsyIG1hc3RlciA+Y3ZzLmxvZyAyPiYxCisgICB0aGVuCisgICAgIGVjaG8gdW5leHBlY3RlZCBjdnMgc3VjY2VzcworICAgICBmYWxzZQorICAgZWxzZQorICAgICB0cnVlCisgICBmaSAmJgorICAgZ3JlcCAiR0lUQ1ZTIGVtdWxhdGlvbiBkaXNhYmxlZCIgY3ZzLmxvZyAmJgorICAgdGVzdCAhIC1kIGN2c3dvcmsyJworCitybSAtZnIgY3Zzd29yazIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGN2cy5leHQuZW5hYmxlZCA9IHRydWUnIFwKKyAgJ0dJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5leHQuZW5hYmxlZCB0cnVlICYmCisgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCBmYWxzZSAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrMiBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgdGVzdF9jbXAgY3Zzd29yayBjdnN3b3JrMicKKworcm0gLWZyIGN2c3dvcmsyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRjdnMuZXh0LmVuYWJsZWQgPSBmYWxzZScgXAorICAnR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmV4dC5lbmFibGVkIGZhbHNlICYmCisgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCB0cnVlICYmCisgICBpZiBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsyIG1hc3RlciA+Y3ZzLmxvZyAyPiYxCisgICB0aGVuCisgICAgIGVjaG8gdW5leHBlY3RlZCBjdnMgc3VjY2VzcworICAgICBmYWxzZQorICAgZWxzZQorICAgICB0cnVlCisgICBmaSAmJgorICAgZ3JlcCAiR0lUQ1ZTIGVtdWxhdGlvbiBkaXNhYmxlZCIgY3ZzLmxvZyAmJgorICAgdGVzdCAhIC1kIGN2c3dvcmsyJworCitybSAtZnIgY3Zzd29yazIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGN2cy5kYm5hbWUnIFwKKyAgJ0dJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5leHQuZW5hYmxlZCB0cnVlICYmCisgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIGdpdGN2cy5kYm5hbWUgJUdnaXRjdnMuJWEuJW0uc3FsaXRlICYmCisgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsyIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisgICB0ZXN0X2NtcCBjdnN3b3JrIGN2c3dvcmsyICYmCisgICB0ZXN0IC1mICIkU0VSVkVSRElSL2dpdGN2cy5leHQubWFzdGVyLnNxbGl0ZSIgJiYKKyAgIGNtcCAiJFNFUlZFUkRJUi9naXRjdnMubWFzdGVyLnNxbGl0ZSIgIiRTRVJWRVJESVIvZ2l0Y3ZzLmV4dC5tYXN0ZXIuc3FsaXRlIicKKworcm0gLWZyIGN2c3dvcmsyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRjdnMuZXh0LmRibmFtZScgXAorICAnR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmV4dC5lbmFibGVkIHRydWUgJiYKKyAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgZ2l0Y3ZzLmV4dC5kYm5hbWUgJUdnaXRjdnMxLiVhLiVtLnNxbGl0ZSAmJgorICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMuZGJuYW1lICVHZ2l0Y3ZzMi4lYS4lbS5zcWxpdGUgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yazIgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgIHRlc3RfY21wIGN2c3dvcmsgY3Zzd29yazIgJiYKKyAgIHRlc3QgLWYgIiRTRVJWRVJESVIvZ2l0Y3ZzMS5leHQubWFzdGVyLnNxbGl0ZSIgJiYKKyAgIHRlc3QgISAtZiAiJFNFUlZFUkRJUi9naXRjdnMyLmV4dC5tYXN0ZXIuc3FsaXRlIiAmJgorICAgY21wICIkU0VSVkVSRElSL2dpdGN2cy5tYXN0ZXIuc3FsaXRlIiAiJFNFUlZFUkRJUi9naXRjdnMxLmV4dC5tYXN0ZXIuc3FsaXRlIicKKworCisjLS0tLS0tLS0tLS0tCisjIENWUyBVUERBVEUKKyMtLS0tLS0tLS0tLS0KKworcm0gLWZyICIkU0VSVkVSRElSIgorY2QgIiRXT1JLRElSIiAmJgorZ2l0IGNsb25lIC1xIC0tYmFyZSAiJFdPUktESVIvLmdpdCIgIiRTRVJWRVJESVIiID4vZGV2L251bGwgMj4mMSAmJgorR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgdHJ1ZSAmJgorR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMubG9nZmlsZSAiJFNFUlZFUkRJUi9naXRjdnMubG9nIiB8fAorZXhpdCAxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKGNyZWF0ZSBuZXcgZmlsZSknIFwKKyAgJ2VjaG8gdGVzdGZpbGUxID50ZXN0ZmlsZTEgJiYKKyAgIGdpdCBhZGQgdGVzdGZpbGUxICYmCisgICBnaXQgY29tbWl0IC1xIC1tICJBZGQgdGVzdGZpbGUxIiAmJgorICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICBjZCBjdnN3b3JrICYmCisgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgorICAgdGVzdCAiJChlY2hvICQoZ3JlcCB0ZXN0ZmlsZTEgQ1ZTL0VudHJpZXN8Y3V0IC1kLyAtZjIsMyw1KSkiID0gInRlc3RmaWxlMS8xLjEvIiAmJgorICAgdGVzdF9jbXAgdGVzdGZpbGUxIC4uL3Rlc3RmaWxlMScKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwZGF0ZSAodXBkYXRlIGV4aXN0aW5nIGZpbGUpJyBcCisgICdlY2hvIGxpbmUgMiA+PnRlc3RmaWxlMSAmJgorICAgZ2l0IGFkZCB0ZXN0ZmlsZTEgJiYKKyAgIGdpdCBjb21taXQgLXEgLW0gIkFwcGVuZCB0byB0ZXN0ZmlsZTEiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0ICIkKGVjaG8gJChncmVwIHRlc3RmaWxlMSBDVlMvRW50cmllc3xjdXQgLWQvIC1mMiwzLDUpKSIgPSAidGVzdGZpbGUxLzEuMi8iICYmCisgICB0ZXN0X2NtcCB0ZXN0ZmlsZTEgLi4vdGVzdGZpbGUxJworCitjZCAiJFdPUktESVIiCisjVE9ETzogY3Zzc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCB1cGRhdGUgdy9vIC1kCit0ZXN0X2V4cGVjdF9mYWlsdXJlICJjdnMgdXBkYXRlIHcvbyAtZCBkb2Vzbid0IGNyZWF0ZSBzdWJkaXIgKFRPRE8pIiAnCisgICBta2RpciB0ZXN0ICYmCisgICBlY2hvID50ZXN0L2VtcHR5ICYmCisgICBnaXQgYWRkIHRlc3QgJiYKKyAgIGdpdCBjb21taXQgLXEgLW0gIlNpbmdsZSBTdWJkaXJlY3RvcnkiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0ICEgLWQgdGVzdAorJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlIChzdWJkaXJlY3RvcmllcyknIFwKKyAgJyhmb3IgZGlyIGluIEEgQS9CIEEvQi9DIEEvRCBFOyBkbworICAgICAgbWtkaXIgJGRpciAmJgorICAgICAgZWNobyAidGVzdCBmaWxlIGluICRkaXIiID4iJGRpci9maWxlX2luXyQoZWNobyAkZGlyfHNlZCAtZSAicyMvIyAjZyIpIiAgJiYKKyAgICAgIGdpdCBhZGQgJGRpcgorICAgZG9uZSkgJiYKKyAgIGdpdCBjb21taXQgLXEgLW0gImRlZXAgc3ViIGRpcmVjdG9yeSBzdHJ1Y3R1cmUiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlIC1kICYmCisgICAoZm9yIGRpciBpbiBBIEEvQiBBL0IvQyBBL0QgRTsgZG8KKyAgICAgIGZpbGVuYW1lPSJmaWxlX2luXyQoZWNobyAkZGlyfHNlZCAtZSAicyMvIyAjZyIpIiAmJgorICAgICAgaWYgdGVzdCAiJChlY2hvICQoZ3JlcCAtdiBeRCAkZGlyL0NWUy9FbnRyaWVzfGN1dCAtZC8gLWYyLDMsNSkpIiA9ICIkZmlsZW5hbWUvMS4xLyIgJiYKKwl0ZXN0X2NtcCAiJGRpci8kZmlsZW5hbWUiICIuLi8kZGlyLyRmaWxlbmFtZSI7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBlY2hvID5mYWlsdXJlCisgICAgICBmaQorICAgIGRvbmUpICYmCisgICB0ZXN0ICEgLWYgZmFpbHVyZScKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwZGF0ZSAoZGVsZXRlIGZpbGUpJyBcCisgICdnaXQgcm0gdGVzdGZpbGUxICYmCisgICBnaXQgY29tbWl0IC1xIC1tICJSZW1vdmUgdGVzdGZpbGUxIiAmJgorICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICBjZCBjdnN3b3JrICYmCisgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgorICAgdGVzdCAteiAiJChncmVwIHRlc3RmaWxlMSBDVlMvRW50cmllcykiICYmCisgICB0ZXN0ICEgLWYgdGVzdGZpbGUxJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlIChyZS1hZGQgZGVsZXRlZCBmaWxlKScgXAorICAnZWNobyByZWFkZGVkIHRlc3RmaWxlID50ZXN0ZmlsZTEgJiYKKyAgIGdpdCBhZGQgdGVzdGZpbGUxICYmCisgICBnaXQgY29tbWl0IC1xIC1tICJSZS1BZGQgdGVzdGZpbGUxIiAmJgorICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICBjZCBjdnN3b3JrICYmCisgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgorICAgdGVzdCAiJChlY2hvICQoZ3JlcCB0ZXN0ZmlsZTEgQ1ZTL0VudHJpZXN8Y3V0IC1kLyAtZjIsMyw1KSkiID0gInRlc3RmaWxlMS8xLjQvIiAmJgorICAgdGVzdF9jbXAgdGVzdGZpbGUxIC4uL3Rlc3RmaWxlMScKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwZGF0ZSAobWVyZ2UpJyBcCisgICdlY2hvIExpbmUgMCA+ZXhwZWN0ZWQgJiYKKyAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcKKyAgIGRvCisgICAgIGVjaG8gTGluZSAkaSA+Pm1lcmdlICYmCisgICAgIGVjaG8gTGluZSAkaSA+PmV4cGVjdGVkCisgICBkb25lICYmCisgICBlY2hvIExpbmUgOCA+PmV4cGVjdGVkICYmCisgICBnaXQgYWRkIG1lcmdlICYmCisgICBnaXQgY29tbWl0IC1xIC1tICJNZXJnZSB0ZXN0IChwcmUtbWVyZ2UpIiAmJgorICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICBjZCBjdnN3b3JrICYmCisgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgorICAgdGVzdCAiJChlY2hvICQoZ3JlcCBtZXJnZSBDVlMvRW50cmllc3xjdXQgLWQvIC1mMiwzLDUpKSIgPSAibWVyZ2UvMS4xLyIgJiYKKyAgIHRlc3RfY21wIG1lcmdlIC4uL21lcmdlICYmCisgICAoIGVjaG8gTGluZSAwICYmIGNhdCBtZXJnZSApID5tZXJnZS50bXAgJiYKKyAgIG12IG1lcmdlLnRtcCBtZXJnZSAmJgorICAgY2QgIiRXT1JLRElSIiAmJgorICAgZWNobyBMaW5lIDggPj5tZXJnZSAmJgorICAgZ2l0IGFkZCBtZXJnZSAmJgorICAgZ2l0IGNvbW1pdCAtcSAtbSAiTWVyZ2UgdGVzdCAobWVyZ2UpIiAmJgorICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICBjZCBjdnN3b3JrICYmCisgICBzbGVlcCAxICYmIHRvdWNoIG1lcmdlICYmCisgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgorICAgdGVzdF9jbXAgbWVyZ2UgLi4vZXhwZWN0ZWQnCisKK2NkICIkV09SS0RJUiIKKworY2F0ID5leHBlY3RlZC5DIDw8RU9GCis8PDw8PDw8IG1lcmdlLm1pbmUKK0xpbmUgMAorPT09PT09PQorTElORSAwCis+Pj4+Pj4+IG1lcmdlLjEuMworRU9GCisKK2ZvciBpIGluIDEgMiAzIDQgNSA2IDcgOAorZG8KKyAgZWNobyBMaW5lICRpID4+ZXhwZWN0ZWQuQworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlIChjb25mbGljdCBtZXJnZSknIFwKKyAgJyggZWNobyBMSU5FIDAgJiYgY2F0IG1lcmdlICkgPm1lcmdlLnRtcCAmJgorICAgbXYgbWVyZ2UudG1wIG1lcmdlICYmCisgICBnaXQgYWRkIG1lcmdlICYmCisgICBnaXQgY29tbWl0IC1xIC1tICJNZXJnZSB0ZXN0IChjb25mbGljdCkiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0X2NtcCBtZXJnZSAuLi9leHBlY3RlZC5DJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlICgtQyknIFwKKyAgJ2NkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlIC1DICYmCisgICB0ZXN0X2NtcCBtZXJnZSAuLi9tZXJnZScKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwZGF0ZSAobWVyZ2Ugbm8tb3ApJyBcCisgICAnZWNobyBMaW5lIDkgPj5tZXJnZSAmJgorICAgIGNwIG1lcmdlIGN2c3dvcmsvbWVyZ2UgJiYKKyAgICBnaXQgYWRkIG1lcmdlICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAiTWVyZ2UgdGVzdCAobm8tb3ApIiAmJgorICAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgIGNkIGN2c3dvcmsgJiYKKyAgICBzbGVlcCAxICYmIHRvdWNoIG1lcmdlICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgJiYKKyAgICB0ZXN0X2NtcCBtZXJnZSAuLi9tZXJnZScKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwZGF0ZSAoLXApJyAnCisgICAgdG91Y2ggcmVhbGx5LWVtcHR5ICYmCisgICAgZWNobyBMaW5lIDEgPiBuby1sZiAmJgorICAgIHByaW50ZiAiTGluZSAyIiA+PiBuby1sZiAmJgorICAgIGdpdCBhZGQgcmVhbGx5LWVtcHR5IG5vLWxmICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAiVXBkYXRlIC1wIHRlc3QiICYmCisgICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICAgY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgdXBkYXRlICYmCisgICAgZm9yIGkgaW4gbWVyZ2Ugbm8tbGYgZW1wdHkgcmVhbGx5LWVtcHR5OyBkbworCUdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgdXBkYXRlIC1wICIkaSIgPiRpLm91dCAmJgorCXRlc3RfY21wICRpLm91dCAuLi8kaSB8fCByZXR1cm4gMQorICAgIGRvbmUKKycKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwZGF0ZSAobW9kdWxlIGxpc3Qgc3VwcG9ydHMgcGFja2VkIHJlZnMpJyAnCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLW4gdXAgLWQgMj4gb3V0ICYmCisgICAgZ3JlcCAiY3ZzIHVwZGF0ZTogTmV3IGRpcmVjdG9yeSBcYG1hc3RlcidcJyciIDwgb3V0CisnCisKKyMtLS0tLS0tLS0tLS0KKyMgQ1ZTIFNUQVRVUworIy0tLS0tLS0tLS0tLQorCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgc3RhdHVzJyAnCisgICAgbWtkaXIgc3RhdHVzLmRpciAmJgorICAgIGVjaG8gTGluZSA+IHN0YXR1cy5kaXIvc3RhdHVzLmZpbGUgJiYKKyAgICBlY2hvIExpbmUgPiBzdGF0dXMuZmlsZSAmJgorICAgIGdpdCBhZGQgc3RhdHVzLmRpciBzdGF0dXMuZmlsZSAmJgorICAgIGdpdCBjb21taXQgLXEgLW0gIlN0YXR1cyB0ZXN0IiAmJgorICAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgIGNkIGN2c3dvcmsgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIHVwZGF0ZSAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgc3RhdHVzIHwgZ3JlcCAiXkZpbGU6IHN0YXR1cy5maWxlIiA+Li4vb3V0ICYmCisgICAgdGVzdF9saW5lX2NvdW50ID0gMiAuLi9vdXQKKycKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHN0YXR1cyAobm9ucmVjdXJzaXZlKScgJworICAgIGNkIGN2c3dvcmsgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIHN0YXR1cyAtbCB8IGdyZXAgIl5GaWxlOiBzdGF0dXMuZmlsZSIgPi4uL291dCAmJgorICAgIHRlc3RfbGluZV9jb3VudCA9IDEgLi4vb3V0CisnCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBzdGF0dXMgKG5vIHN1YmRpcnMgaW4gaGVhZGVyKScgJworICAgIGNkIGN2c3dvcmsgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIHN0YXR1cyB8IGdyZXAgXkZpbGU6ID4uLi9vdXQgJiYKKyAgICAhIGdyZXAgLyA8Li4vb3V0CisnCisKKyMtLS0tLS0tLS0tLS0KKyMgQ1ZTIENIRUNLT1VUCisjLS0tLS0tLS0tLS0tCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyAtYyAoc2hvd3MgbW9kdWxlIGRhdGFiYXNlKScgJworICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgY28gLWMgPiBvdXQgJiYKKyAgICBncmVwICJebWFzdGVyWwkgXVsgCV0qbWFzdGVyJCIgPG91dCAmJgorICAgICEgZ3JlcCAtdiAiXm1hc3RlclsJIF1bIAldKm1hc3RlciQiIDxvdXQKKycKKworIy0tLS0tLS0tLS0tLQorIyBDVlMgTE9HCisjLS0tLS0tLS0tLS0tCisKKyMgS25vd24gaXNzdWVzIHdpdGggZ2l0LWN2c3NlcnZlciBjdXJyZW50IGxvZyBvdXRwdXQ6CisjICAtIEhhcmQgY29kZWQgImxpbmVzOiArMiAtMyIgcGxhY2Vob2xkZXIsIGluc3RlYWQgb2YgcmVhbCBudW1iZXJzLgorIyAgLSBDVlMgbm9ybWFsbHkgZG9lcyBub3QgaW50ZXJuYWxseSBhZGQgYSBibGFuayBmaXJzdCBsaW5lCisjICAgIG9yIGEgbGFzdCBsaW5lIHdpdGggbm90aGluZyBidXQgYSBzcGFjZSB0byBsb2cgbWVzc2FnZXMuCisjICAtIFRoZSBsYXRlc3QgY3ZzIDEuMTIueCBzZXJ2ZXIgc2VuZHMgKzAwMDAgdGltZXpvbmUgKHdpdGggc29tZSBoaWRkZW4gIk1UIgorIyAgICB0YWdnaW5nIGluIHRoZSBwcm90b2NvbCksIGFuZCBpZiBjdnMgMS4xMi54IGNsaWVudCBzZWVzIHRoZSBNVCB0YWdzLAorIyAgICBpdCBjb252ZXJ0cyB0byBsb2NhbCB0aW1lIHpvbmUuICBnaXQtY3Zzc2VydmVyIGRvZXNuJ3QgZG8gdGhlICswMDAwCisjICAgIG9yIHRoZSBNVCB0YWdzLi4uCisjICAtIFRoZSBsYXRlc3QgMS4xMi54IHJlbGVhc2VzIGFkZCBhICJjb21taXRpZDoiIGZpZWxkIG9uIHRvIHRoZSBlbmQgb2YgdGhlCisjICAgICJkYXRlOiIgbGluZSAoYWZ0ZXIgImxpbmVzOiIpLiAgTWF5YmUgd2UgY291bGQgc3RpY2sgZ2l0J3MgY29tbWl0IGlkCisjICAgIGluIGl0PyAgT3IgZG9lcyBDVlMgZXhwZWN0IGEgY2VydGFpbiBudW1iZXIgb2YgYml0cyAodG9vIGZldyBmb3IKKyMgICAgYSBmdWxsIHNoYTEpPworIworIyBHaXZlbiB0aGUgYWJvdmUsIGV4cGVjdCB0aGUgZm9sbG93aW5nIHRlc3QgdG8gYnJlYWsgaWYgZ2l0LWN2c3NlcnZlcidzCisjIGxvZyBvdXRwdXQgaXMgaW1wcm92ZWQuICBUaGUgdGVzdCBpcyBqdXN0IHRvIGVuc3VyZSBpdCBkb2Vzbid0CisjIGFjY2lkZW50YWxseSBnZXQgd29yc2UuCisKK3NlZCAtZSAncy9eeC8vJyAtZSAncy9TUCQvIC8nID4gIiRXT1JLRElSL2V4cGVjdCIgPDxFT0YKK3gKK3hSQ1MgZmlsZTogJFdPUktESVIvZ2l0Y3ZzLmdpdC9tYXN0ZXIvbWVyZ2UsdgoreFdvcmtpbmcgZmlsZTogbWVyZ2UKK3hoZWFkOiAxLjQKK3hicmFuY2g6Cit4bG9ja3M6IHN0cmljdAoreGFjY2VzcyBsaXN0OgoreHN5bWJvbGljIG5hbWVzOgoreGtleXdvcmQgc3Vic3RpdHV0aW9uOiBrdgoreHRvdGFsIHJldmlzaW9uczogNDsJc2VsZWN0ZWQgcmV2aXNpb25zOiA0Cit4ZGVzY3JpcHRpb246Cit4LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoreHJldmlzaW9uIDEuNAoreGRhdGU6IF9fREFURV9fOyAgYXV0aG9yOiBhdXRob3I7ICBzdGF0ZTogRXhwOyAgbGluZXM6ICsyIC0zCit4Cit4TWVyZ2UgdGVzdCAobm8tb3ApCit4U1AKK3gtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit4cmV2aXNpb24gMS4zCit4ZGF0ZTogX19EQVRFX187ICBhdXRob3I6IGF1dGhvcjsgIHN0YXRlOiBFeHA7ICBsaW5lczogKzIgLTMKK3gKK3hNZXJnZSB0ZXN0IChjb25mbGljdCkKK3hTUAoreC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3hyZXZpc2lvbiAxLjIKK3hkYXRlOiBfX0RBVEVfXzsgIGF1dGhvcjogYXV0aG9yOyAgc3RhdGU6IEV4cDsgIGxpbmVzOiArMiAtMworeAoreE1lcmdlIHRlc3QgKG1lcmdlKQoreFNQCit4LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoreHJldmlzaW9uIDEuMQoreGRhdGU6IF9fREFURV9fOyAgYXV0aG9yOiBhdXRob3I7ICBzdGF0ZTogRXhwOyAgbGluZXM6ICsyIC0zCit4Cit4TWVyZ2UgdGVzdCAocHJlLW1lcmdlKQoreFNQCit4PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0VPRgorZXhwZWN0U3RhdD0iJD8iCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBsb2cnICcKKyAgICBjZCBjdnN3b3JrICYmCisgICAgdGVzdCB4IiRleHBlY3RTdGF0IiA9IHgiMCIgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIGxvZyBtZXJnZSA+Li4vb3V0ICYmCisgICAgc2VkIC1lICJzJTJbMC05XVswLTldWzAtOV0vWzAxXVswLTldL1swLTNdWzAtOV0gWzAtMl1bMC05XTpbMC01XVswLTldOlswLTVdWzAtOV0lX19EQVRFX18lIiAuLi9vdXQgPiAuLi9hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisnCisKKyMtLS0tLS0tLS0tLS0KKyMgQ1ZTIEFOTk9UQVRFCisjLS0tLS0tLS0tLS0tCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBhbm5vdGF0ZScgJworICAgIGNkIGN2c3dvcmsgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIGFubm90YXRlIG1lcmdlID4uLi9vdXQgJiYKKyAgICBzZWQgLWUgInMvIC4qLy8iIC4uL291dCA+Li4vYWN0dWFsICYmCisgICAgZm9yIGkgaW4gMyAxIDEgMSAxIDEgMSAxIDIgNDsgZG8gZWNobyAxLiRpOyBkb25lID4uLi9leHBlY3QgJiYKKyAgICB0ZXN0X2NtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisnCisKKyMtLS0tLS0tLS0tLS0KKyMgcnVubmluZyB2aWEgZ2l0LXNoZWxsCisjLS0tLS0tLS0tLS0tCisKK2NkICIkV09SS0RJUiIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHJlbW90ZS1jdnMgaGVscGVyJyAnCisJd3JpdGVfc2NyaXB0IHJlbW90ZS1jdnMgPDwtXEVPRgorCWV4ZWMgZ2l0IHNoZWxsIC1jICJjdnMgc2VydmVyIgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgc2VydmVyIGRvZXMgbm90IHJ1biB3aXRoIHZhbmlsbGEgZ2l0LXNoZWxsJyAnCisJKAorCQljZCBjdnN3b3JrICYmCisJCUNWU19TRVJWRVI9JFdPUktESVIvcmVtb3RlLWN2cyAmJgorCQlleHBvcnQgQ1ZTX1NFUlZFUiAmJgorCQl0ZXN0X211c3RfZmFpbCBjdnMgbG9nIG1lcmdlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmUgZ2l0IHNoZWxsIHRvIHJ1biBjdnMgc2VydmVyJyAnCisJbWtkaXIgIiRIT01FIi9naXQtc2hlbGwtY29tbWFuZHMgJiYKKworCXdyaXRlX3NjcmlwdCAiJEhPTUUiL2dpdC1zaGVsbC1jb21tYW5kcy9jdnMgPDwtXEVPRiAmJgorCWlmICEgdGVzdCAkIyA9IDEgJiYgdGVzdCAiJDEiID0gInNlcnZlciIKKwl0aGVuCisJCWVjaG8gPiYyICJnaXQtY3Zzc2VydmVyIG9ubHkgaGFuZGxlcyBcInNlcnZlclwiIgorCQlleGl0IDEKKwlmaQorCWV4ZWMgZ2l0IGN2c3NlcnZlciBzZXJ2ZXIKKwlFT0YKKworCSMgU2hvdWxkIG5vdCBiZSB1c2VkLCBidXQgcGFydCBvZiB0aGUgcmVjb21tZW5kZWQgc2V0dXAKKwl3cml0ZV9zY3JpcHQgIiRIT01FIi9naXQtc2hlbGwtY29tbWFuZHMvbm8taW50ZXJhY3RpdmUtbG9naW4gPDwtXEVPRgorCWVjaG8gSW50ZXJhY3RpdmUgbG9naW4gZm9yYmlkZGVuCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBzZXJ2ZXIgY2FuIHJ1biB3aXRoIHJlY29tbWVuZGVkIGNvbmZpZycgJworCSgKKwkJY2QgY3Zzd29yayAmJgorCQlDVlNfU0VSVkVSPSRXT1JLRElSL3JlbW90ZS1jdnMgJiYKKwkJZXhwb3J0IENWU19TRVJWRVIgJiYKKwkJY3ZzIGxvZyBtZXJnZQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaCBiL3QvdDk0MDEtZ2l0LWN2c3NlcnZlci1jcmxmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0Nzg3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaApAQCAtMCwwICsxLDM2OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBNYXR0aGV3IE9naWx2aWUKKyMgUGFydHMgYWRhcHRlZCBmcm9tIG90aGVyIHRlc3RzLgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtY3Zzc2VydmVyIC1rYiBtb2RlcworCit0ZXN0cyAta2IgbW9kZSBmb3IgYmluYXJ5IGZpbGVzIHdoZW4gYWNjZXNzaW5nIGEgZ2l0CityZXBvc2l0b3J5IHVzaW5nIGN2cyBDTEkgY2xpZW50IHZpYSBnaXQtY3Zzc2VydmVyIHNlcnZlcicKKworLiAuL3Rlc3QtbGliLnNoCisKK21hcmtlZF9hcyAoKSB7CisgICAgZm91bmRFbnRyeT0iJChncmVwICJeLyQyLyIgIiQxL0NWUy9FbnRyaWVzIikiCisgICAgaWYgWyB4IiRmb3VuZEVudHJ5IiA9IHgiIiBdIDsgdGhlbgorICAgICAgIGVjaG8gIk5PVCBGT1VORDogJDEgJDIgMSAkMyIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKKyAgICAgICByZXR1cm4gMQorICAgIGZpCisgICAgdGVzdCB4IiQoZ3JlcCAiXi8kMi8iICIkMS9DVlMvRW50cmllcyIgfCBjdXQgLWQvIC1mNSkiID0geCIkMyIKKyAgICBzdGF0PSQ/CisgICAgZWNobyAiJDEgJDIgJHN0YXQgJyQzJyIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKKyAgICByZXR1cm4gJHN0YXQKK30KKworbm90X3ByZXNlbnQoKSB7CisgICAgZm91bmRFbnRyeT0iJChncmVwICJeLyQyLyIgIiQxL0NWUy9FbnRyaWVzIikiCisgICAgaWYgWyAtciAiJDEvJDIiIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIkVycm9yOiBGaWxlIHN0aWxsIGV4aXN0czogJDEgJDIiID4+ICIke1dPUktESVJ9L21hcmtlZC5sb2ciCisgICAgICAgIHJldHVybiAxOworICAgIGZpCisgICAgaWYgWyB4IiRmb3VuZEVudHJ5IiAhPSB4IiIgXSA7IHRoZW4KKyAgICAgICAgZWNobyAiRXJyb3I6IHNob3VsZCBub3QgaGF2ZSBmb3VuZDogJDEgJDIiID4+ICIke1dPUktESVJ9L21hcmtlZC5sb2ciCisgICAgICAgIHJldHVybiAxOworICAgIGVsc2UKKyAgICAgICAgZWNobyAiQ29ycmVjdGx5IG5vdCBmb3VuZDogJDEgJDIiID4+ICIke1dPUktESVJ9L21hcmtlZC5sb2ciCisgICAgICAgIHJldHVybiAwOworICAgIGZpCit9CisKK2NoZWNrX3N0YXR1c19vcHRpb25zKCkgeworICAgIChjZCAiJDEiICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBzdGF0dXMgIiQyIiA+ICIke1dPUktESVJ9L3N0YXR1cy5vdXQiIDI+JjEKKyAgICApCisgICAgaWYgWyB4IiQ/IiAhPSB4IjAiIF0gOyB0aGVuCisJZWNobyAiRXJyb3IgZnJvbSBjdnMgc3RhdHVzOiAkMSAkMiIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKKwlyZXR1cm4gMTsKKyAgICBmaQorICAgIGdvdD0iJChzZWQgLW4gLWUgJ3MvXlsgCV0qU3RpY2t5IE9wdGlvbnM6WyAJXSovL3AnICIke1dPUktESVJ9L3N0YXR1cy5vdXQiKSIKKyAgICBleHBlY3Q9IiQzIgorICAgIGlmIFsgeCIkZXhwZWN0IiA9IHgiIiBdIDsgdGhlbgorCWV4cGVjdD0iKG5vbmUpIgorICAgIGZpCisgICAgdGVzdCB4IiRnb3QiID0geCIkZXhwZWN0IgorICAgIHN0YXQ9JD8KKyAgICBlY2hvICJjdnMgc3RhdHVzOiAkMSAkMiAkc3RhdCAnJDMnICckZ290JyIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKKyAgICByZXR1cm4gJHN0YXQKK30KKworY3ZzID4vZGV2L251bGwgMj4mMQoraWYgdGVzdCAkPyAtbmUgMQordGhlbgorICAgIHNraXBfYWxsPSdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBjdnMgbm90IGZvdW5kJworICAgIHRlc3RfZG9uZQorZmkKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMCit0aGVuCisgICAgc2tpcF9hbGw9J3NraXBwaW5nIGdpdC1jdnNzZXJ2ZXIgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKyAgICB0ZXN0X2RvbmUKK2ZpCitwZXJsIC1lICd1c2UgREJJOyB1c2UgREJEOjpTUUxpdGUnID4vZGV2L251bGwgMj4mMSB8fCB7CisgICAgc2tpcF9hbGw9J3NraXBwaW5nIGdpdC1jdnNzZXJ2ZXIgdGVzdHMsIFBlcmwgU1FMaXRlIGludGVyZmFjZSB1bmF2YWlsYWJsZScKKyAgICB0ZXN0X2RvbmUKK30KKwordW5zZXQgR0lUX0RJUiBHSVRfQ09ORklHCitXT1JLRElSPSRQV0QKK1NFUlZFUkRJUj0kUFdEL2dpdGN2cy5naXQKK2dpdF9jb25maWc9IiRTRVJWRVJESVIvY29uZmlnIgorQ1ZTUk9PVD0iOmZvcms6JFNFUlZFUkRJUiIKK0NWU1dPUks9IiRQV0QvY3Zzd29yayIKK0NWU19TRVJWRVI9Z2l0LWN2c3NlcnZlcgorZXhwb3J0IENWU1JPT1QgQ1ZTX1NFUlZFUgorCitybSAtcmYgIiRDVlNXT1JLIiAiJFNFUlZFUkRJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisgICAgZ2l0IGNvbmZpZyBwdXNoLmRlZmF1bHQgbWF0Y2hpbmcgJiYKKyAgICBlY2hvICJTaW1wbGUgdGV4dCBmaWxlIiA+dGV4dGZpbGUuYyAmJgorICAgIGVjaG8gIkZpbGUgd2l0aCBlbWJlZGRlZCBOVUw6IFEgPC0gdGhlcmUiIHwgcV90b19udWwgPiBiaW5maWxlLmJpbiAmJgorICAgIG1rZGlyIHN1YmRpciAmJgorICAgIGVjaG8gIkFub3RoZXIgdGV4dCBmaWxlIiA+IHN1YmRpci9maWxlLmggJiYKKyAgICBlY2hvICJBbm90aGVyIGJpbmFyeTogUSAodGhpcyB0aW1lIENSKSIgfCBxX3RvX2NyID4gc3ViZGlyL3dpdGhDci5iaW4gJiYKKyAgICBlY2hvICJNaXhlZCB1cCBOVUwsIGJ1dCBtYXJrZWQgdGV4dDogUSA8LSB0aGVyZSIgfCBxX3RvX251bCA+IG1peGVkVXAuYyAmJgorICAgIGVjaG8gIlVuc3BlY2lmaWVkIiA+IHN1YmRpci91bnNwZWNpZmllZC5vdGhlciAmJgorICAgIGVjaG8gIi8qLmJpbiAtY3JsZiIgPiAuZ2l0YXR0cmlidXRlcyAmJgorICAgIGVjaG8gIi8qLmMgY3JsZiIgPj4gLmdpdGF0dHJpYnV0ZXMgJiYKKyAgICBlY2hvICJzdWJkaXIvKi5iaW4gLWNybGYiID4+IC5naXRhdHRyaWJ1dGVzICYmCisgICAgZWNobyAic3ViZGlyLyouYyBjcmxmIiA+PiAuZ2l0YXR0cmlidXRlcyAmJgorICAgIGVjaG8gInN1YmRpci9maWxlLmggY3JsZiIgPj4gLmdpdGF0dHJpYnV0ZXMgJiYKKyAgICBnaXQgYWRkIC5naXRhdHRyaWJ1dGVzIHRleHRmaWxlLmMgYmluZmlsZS5iaW4gbWl4ZWRVcC5jIHN1YmRpci8qICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAiRmlyc3QgQ29tbWl0IiAmJgorICAgIGdpdCBjbG9uZSAtcSAtLWJhcmUgIiRXT1JLRElSLy5naXQiICIkU0VSVkVSRElSIiA+L2Rldi9udWxsIDI+JjEgJiYKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCB0cnVlICYmCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMubG9nZmlsZSAiJFNFUlZFUkRJUi9naXRjdnMubG9nIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKGRlZmF1bHQgY3JsZiknICcKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICB0ZXN0IHgiJChncmVwICcvLWsnIGN2c3dvcmsvQ1ZTL0VudHJpZXMgY3Zzd29yay9zdWJkaXIvQ1ZTL0VudHJpZXMpIiA9IHgiIgorJworCitybSAtcmYgY3Zzd29yawordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvIChhbGxiaW5hcnkpJyAnCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmFsbGJpbmFyeSB0cnVlICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgdGV4dGZpbGUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtaXhlZFVwLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHdpdGhDci5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIGZpbGUuaCAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgLWtiCisnCisKK3JtIC1yZiBjdnN3b3JrIGN2cy5sb2cKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyAodXNlIGF0dHJpYnV0ZXMvYWxsYmluYXJ5KScgJworICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy51c2VjcmxmYXR0ciB0cnVlICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIC5naXRhdHRyaWJ1dGVzIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgLWtiCisnCisKK3JtIC1yZiBjdnN3b3JrCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKHVzZSBhdHRyaWJ1dGVzKScgJworICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5hbGxiaW5hcnkgZmFsc2UgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtaXhlZFVwLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgZmlsZS5oICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGluZyBmaWxlcycgJworICAgIChjZCBjdnN3b3JrICYmCisgICAgKGNkIHN1YmRpciAmJgorICAgIGVjaG8gIm1vcmUgdGV4dCIgPiBzcmMuYyAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgYWRkIHNyYy5jID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgLiBzcmMuYyAiIiAmJgorICAgIGVjaG8gInBzZXVkby1iaW5hcnkiID4gdGVtcC5iaW4KKyAgICApICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBhZGQgc3ViZGlyL3RlbXAuYmluID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgc3ViZGlyIHRlbXAuYmluICIta2IiICYmCisgICAgY2Qgc3ViZGlyICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjaSAtbSAiYWRkaW5nIGZpbGVzIiA+Y3ZzLmxvZyAyPiYxICYmCisgICAgbWFya2VkX2FzIC4gdGVtcC5iaW4gIi1rYiIgJiYKKyAgICBtYXJrZWRfYXMgLiBzcmMuYyAiIgorICAgICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcnICcKKyAgICBnaXQgcHVsbCBnaXRjdnMuZ2l0ICYmCisgICAgZWNobyAnaGknID4gc3ViZGlyL25ld2ZpbGUuYmluICYmCisgICAgZWNobyAnanVuaycgPiBzdWJkaXIvZmlsZS5oICYmCisgICAgZWNobyAnaGknID4gc3ViZGlyL25ld2ZpbGUuYyAmJgorICAgIGVjaG8gJ2hlbGxvJyA+PiBiaW5maWxlLmJpbiAmJgorICAgIGdpdCBhZGQgc3ViZGlyL25ld2ZpbGUuYmluIHN1YmRpci9maWxlLmggc3ViZGlyL25ld2ZpbGUuYyBiaW5maWxlLmJpbiAmJgorICAgIGdpdCBjb21taXQgLXEgLW0gIkFkZCBhbmQgY2hhbmdlIHNvbWUgZmlsZXMiICYmCisgICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICAgKGNkIGN2c3dvcmsgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZQorICAgICkgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtaXhlZFVwLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgZmlsZS5oICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBuZXdmaWxlLmMgIiIgJiYKKyAgICBlY2hvICJGaWxlIHdpdGggZW1iZWRkZWQgTlVMOiBRIDwtIHRoZXJlIiB8IHFfdG9fbnVsID4gdG1wRXhwZWN0MSAmJgorICAgIGVjaG8gImhlbGxvIiA+PiB0bXBFeHBlY3QxICYmCisgICAgY21wIGN2c3dvcmsvYmluZmlsZS5iaW4gdG1wRXhwZWN0MQorJworCitybSAtcmYgY3Zzd29yawordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvICh1c2UgYXR0cmlidXRlcy9ndWVzcyknICcKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIGdpdGN2cy5hbGxiaW5hcnkgZ3Vlc3MgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtaXhlZFVwLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgZmlsZS5oICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBuZXdmaWxlLmMgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbXVsdGktbGluZSBmaWxlcycgJworICAgICggZWNobyAibGluZSAxIiAmJgorICAgICAgZWNobyAibGluZSAyIiAmJgorICAgICAgZWNobyAibGluZSAzIiAmJgorICAgICAgZWNobyAibGluZSA0IHdpdGggTlVMOiBRIDwtIiApIHwgcV90b19udWwgPiBtdWx0aWxpbmUuYyAmJgorICAgIGdpdCBhZGQgbXVsdGlsaW5lLmMgJiYKKyAgICAoIGVjaG8gImxpbmUgMSIgJiYKKyAgICAgIGVjaG8gImxpbmUgMiIgJiYKKyAgICAgIGVjaG8gImxpbmUgMyIgJiYKKyAgICAgIGVjaG8gImxpbmUgNCIgKSB8IHFfdG9fbnVsID4gbXVsdGlsaW5lVHh0LmMgJiYKKyAgICBnaXQgYWRkIG11bHRpbGluZVR4dC5jICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAibXVsdGlsaW5lIGZpbGVzIiAmJgorICAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbAorJworCitybSAtcmYgY3Zzd29yawordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvIChndWVzcyknICcKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMudXNlY3JsZmF0dHIgZmFsc2UgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtaXhlZFVwLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbXVsdGlsaW5lLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbXVsdGlsaW5lVHh0LmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgZmlsZS5oICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYmluICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYyAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gYW5vdGhlciBjb3B5IChndWVzcyknICcKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsyIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIC5naXRhdHRyaWJ1dGVzICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG1peGVkVXAuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbXVsdGlsaW5lLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG11bHRpbGluZVR4dC5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgZmlsZS5oICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgbmV3ZmlsZS5iaW4gIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIG5ld2ZpbGUuYyAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgc3RhdHVzIC0gc3RpY2t5IG9wdGlvbnMnICcKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMiB0ZXh0ZmlsZS5jICIiICYmCisgICAgY2hlY2tfc3RhdHVzX29wdGlvbnMgY3Zzd29yazIgYmluZmlsZS5iaW4gLWtiICYmCisgICAgY2hlY2tfc3RhdHVzX29wdGlvbnMgY3Zzd29yazIgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMiBtaXhlZFVwLmMgLWtiICYmCisgICAgY2hlY2tfc3RhdHVzX29wdGlvbnMgY3Zzd29yazIgbXVsdGlsaW5lLmMgLWtiICYmCisgICAgY2hlY2tfc3RhdHVzX29wdGlvbnMgY3Zzd29yazIgbXVsdGlsaW5lVHh0LmMgIiIgJiYKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMi9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMiBzdWJkaXIvd2l0aENyLmJpbiAta2IgJiYKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMi9zdWJkaXIgZmlsZS5oICIiICYmCisgICAgY2hlY2tfc3RhdHVzX29wdGlvbnMgY3Zzd29yazIgc3ViZGlyL2ZpbGUuaCAiIiAmJgorICAgIGNoZWNrX3N0YXR1c19vcHRpb25zIGN2c3dvcmsyL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAiIiAmJgorICAgIGNoZWNrX3N0YXR1c19vcHRpb25zIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmJpbiAiIiAmJgorICAgIGNoZWNrX3N0YXR1c19vcHRpb25zIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmMgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHRleHQgKGd1ZXNzKScgJworICAgIChjZCBjdnN3b3JrICYmCisgICAgZWNobyAic2ltcGxlVGV4dCIgPiBzaW1wbGVUZXh0LmMgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGFkZCBzaW1wbGVUZXh0LmMKKyAgICApICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgc2ltcGxlVGV4dC5jICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBiaW4gKGd1ZXNzKScgJworICAgIChjZCBjdnN3b3JrICYmCisgICAgZWNobyAic2ltcGxlQmluOiBOVUw6IFEgPC0gdGhlcmUiIHwgcV90b19udWwgPiBzaW1wbGVCaW4uYmluICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBhZGQgc2ltcGxlQmluLmJpbgorICAgICkgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBzaW1wbGVCaW4uYmluIC1rYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgZmlsZXMgKGd1ZXNzKScgJworICAgIChjZCBjdnN3b3JrICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBybSAtZiBzdWJkaXIvZmlsZS5oICYmCisgICAgKGNkIHN1YmRpciAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgcm0gLWYgd2l0aENyLmJpbgorICAgICkpICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHdpdGhDci5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIGZpbGUuaCAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY2kgKGd1ZXNzKScgJworICAgIChjZCBjdnN3b3JrICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjaSAtbSAiYWRkL3JtIGZpbGVzIiA+Y3ZzLmxvZyAyPiYxCisgICAgKSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtdWx0aWxpbmUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtdWx0aWxpbmVUeHQuYyAiIiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsvc3ViZGlyIHdpdGhDci5iaW4gJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrL3N1YmRpciBmaWxlLmggJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5iaW4gIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgc2ltcGxlQmluLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBzaW1wbGVUZXh0LmMgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHN1YmRpciBvZiBvdGhlciBjb3B5IChndWVzcyknICcKKyAgICAoY2QgY3Zzd29yazIvc3ViZGlyICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUKKyAgICApICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIC5naXRhdHRyaWJ1dGVzICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG1peGVkVXAuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbXVsdGlsaW5lLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG11bHRpbGluZVR4dC5jICIiICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yazIvc3ViZGlyIHdpdGhDci5iaW4gJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrMi9zdWJkaXIgZmlsZS5oICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgbmV3ZmlsZS5iaW4gIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIG5ld2ZpbGUuYyAiIiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsyIHNpbXBsZUJpbi5iaW4gJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrMiBzaW1wbGVUZXh0LmMKKycKKworZWNobyAic3RhcnRpbmcgdXBkYXRlL21lcmdlIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlL21lcmdlIGZ1bGwgb3RoZXIgY29weSAoZ3Vlc3MpJyAnCisgICAgZ2l0IHB1bGwgZ2l0Y3ZzLmdpdCBtYXN0ZXIgJiYKKyAgICBzZWQgInMvMy9yZXBsYWNlZF8zLyIgPCBtdWx0aWxpbmVUeHQuYyA+IG1sLnRlbXAgJiYKKyAgICBtdiBtbC50ZW1wIG11bHRpbGluZVR4dC5jICYmCisgICAgZ2l0IGFkZCBtdWx0aWxpbmVUeHQuYyAmJgorICAgIGdpdCBjb21taXQgLXEgLW0gIm1vZGlmeSBtdWx0aWxpbmUgZmlsZSIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIgJiYKKyAgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgICAoY2QgY3Zzd29yazIgJiYKKyAgICBzZWQgInMvMS9yZXBsYWNlZF8xLyIgPCBtdWx0aWxpbmVUeHQuYyA+IG1sLnRlbXAgJiYKKyAgICBtdiBtbC50ZW1wIG11bHRpbGluZVR4dC5jICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyB1cGRhdGUgPiBjdnMubG9nIDI+JjEKKyAgICApICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIC5naXRhdHRyaWJ1dGVzICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG1peGVkVXAuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbXVsdGlsaW5lLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG11bHRpbGluZVR4dC5jICIiICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yazIvc3ViZGlyIHdpdGhDci5iaW4gJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrMi9zdWJkaXIgZmlsZS5oICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgbmV3ZmlsZS5iaW4gIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIG5ld2ZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBzaW1wbGVCaW4uYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBzaW1wbGVUZXh0LmMgIiIgJiYKKyAgICBlY2hvICJsaW5lIHJlcGxhY2VkXzEiID4gdG1wRXhwZWN0MiAmJgorICAgIGVjaG8gImxpbmUgMiIgPj4gdG1wRXhwZWN0MiAmJgorICAgIGVjaG8gImxpbmUgcmVwbGFjZWRfMyIgPj4gdG1wRXhwZWN0MiAmJgorICAgIGVjaG8gImxpbmUgNCIgfCBxX3RvX251bCA+PiB0bXBFeHBlY3QyICYmCisgICAgY21wIGN2c3dvcmsyL211bHRpbGluZVR4dC5jIHRtcEV4cGVjdDIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NDAyLWdpdC1jdnNzZXJ2ZXItcmVmcy5zaCBiL3QvdDk0MDItZ2l0LWN2c3NlcnZlci1yZWZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNmMzFhY2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NDAyLWdpdC1jdnNzZXJ2ZXItcmVmcy5zaApAQCAtMCwwICsxLDU1MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1jdnNzZXJ2ZXIgYW5kIGdpdCByZWZzcGVjcworCit0ZXN0cyBhYmlsaXR5IGZvciBnaXQtY3Zzc2VydmVyIHRvIHN3aXRjaCBiZXR3ZWVuIGFuZCBjb21wYXJlCit0YWdzLCBicmFuY2hlcyBhbmQgb3RoZXIgZ2l0IHJlZnNwZWNzJworCisuIC4vdGVzdC1saWIuc2gKKworIyMjIyMjIyMjCisKK2NoZWNrX3N0YXJ0X3RyZWUoKSB7CisJcm0gLWYgIiRXT1JLRElSL2xpc3QuZXhwZWN0ZWQiCisJZWNobyAic3RhcnQgJDEiID4+IiR7V09SS0RJUn0vY2hlY2subG9nIgorfQorCitjaGVja19maWxlKCkgeworCXNhbmRib3g9IiQxIgorCWZpbGU9IiQyIgorCXZlcj0iJDMiCisJR0lUX0RJUj0kU0VSVkVSRElSIGdpdCBzaG93ICIke3Zlcn06JHtmaWxlfSIgXAorCQk+IiRXT1JLRElSL2NoZWNrLmdvdCIgMj4iJFdPUktESVIvY2hlY2suc3RkZXJyIgorCXRlc3RfY21wICIkV09SS0RJUi9jaGVjay5nb3QiICIkc2FuZGJveC8kZmlsZSIKKwlzdGF0PSQ/CisJZWNobyAiY2hlY2tfZmlsZSAkc2FuZGJveCAkZmlsZSAkdmVyIDogJHN0YXQiID4+IiRXT1JLRElSL2NoZWNrLmxvZyIKKwllY2hvICIkZmlsZSIgPj4iJFdPUktESVIvbGlzdC5leHBlY3RlZCIKKwlyZXR1cm4gJHN0YXQKK30KKworY2hlY2tfZW5kX3RyZWUoKSB7CisJc2FuZGJveD0iJDEiICYmCisJZmluZCAiJHNhbmRib3giIC1uYW1lIENWUyAtcHJ1bmUgLW8gLXR5cGUgZiAtcHJpbnQgPiIkV09SS0RJUi9saXN0LmFjdHVhbCIgJiYKKwlzb3J0IDwiJFdPUktESVIvbGlzdC5leHBlY3RlZCIgPmV4cGVjdGVkICYmCisJc29ydCA8IiRXT1JLRElSL2xpc3QuYWN0dWFsIiB8IHNlZCAtZSAicyVjdnN3b3JrLyUlIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJcm0gZXhwZWN0ZWQgYWN0dWFsCit9CisKK2NoZWNrX2VuZF9mdWxsX3RyZWUoKSB7CisJc2FuZGJveD0iJDEiICYmCisJc29ydCA8IiRXT1JLRElSL2xpc3QuZXhwZWN0ZWQiID5leHBlY3RlZCAmJgorCWZpbmQgIiRzYW5kYm94IiAtbmFtZSBDVlMgLXBydW5lIC1vIC10eXBlIGYgLXByaW50IHwKKwlzZWQgLWUgInMlJHNhbmRib3gvJSUiIHwgc29ydCA+YWN0MSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdDEgJiYKKwlnaXQgbHMtdHJlZSAtLW5hbWUtb25seSAtciAiJDIiIHwgc29ydCA+YWN0MiAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdDIgJiYKKwlybSBleHBlY3RlZCBhY3QxIGFjdDIKK30KKworIyMjIyMjIyMjCisKK2NoZWNrX2RpZmYoKSB7CisJZGlmZkZpbGU9IiQxIgorCXZPbGQ9IiQyIgorCXZOZXc9IiQzIgorCXJtIC1yZiBkaWZmU2FuZGJveAorCWdpdCBjbG9uZSAtcSAtbiAuIGRpZmZTYW5kYm94ICYmCisJKAorCQljZCBkaWZmU2FuZGJveCAmJgorCQlnaXQgY2hlY2tvdXQgIiR2T2xkIiAmJgorCQlnaXQgYXBwbHkgLXAwIC0taW5kZXggPCIuLi8kZGlmZkZpbGUiICYmCisJCWdpdCBkaWZmIC0tZXhpdC1jb2RlICIkdk5ldyIKKwkpID5jaGVja19kaWZmX2FwcGx5Lm91dCAyPiYxCit9CisKKyMjIyMjIyMjIworCitjdnMgPi9kZXYvbnVsbCAyPiYxCitpZiB0ZXN0ICQ/IC1uZSAxCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdC1jdnNzZXJ2ZXIgdGVzdHMsIGN2cyBub3QgZm91bmQnCisJdGVzdF9kb25lCitmaQoraWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkwKK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKK3BlcmwgLWUgJ3VzZSBEQkk7IHVzZSBEQkQ6OlNRTGl0ZScgPi9kZXYvbnVsbCAyPiYxIHx8IHsKKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgUGVybCBTUUxpdGUgaW50ZXJmYWNlIHVuYXZhaWxhYmxlJworCXRlc3RfZG9uZQorfQorCit1bnNldCBHSVRfRElSIEdJVF9DT05GSUcKK1dPUktESVI9JFBXRAorU0VSVkVSRElSPSRQV0QvZ2l0Y3ZzLmdpdAorZ2l0X2NvbmZpZz0iJFNFUlZFUkRJUi9jb25maWciCitDVlNST09UPSI6Zm9yazokU0VSVkVSRElSIgorQ1ZTV09SSz0iJFBXRC9jdnN3b3JrIgorQ1ZTX1NFUlZFUj1naXQtY3Zzc2VydmVyCitleHBvcnQgQ1ZTUk9PVCBDVlNfU0VSVkVSCisKK3JtIC1yZiAiJENWU1dPUksiICIkU0VSVkVSRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdjEsIGIxJyAnCisJZWNobyAiU2ltcGxlIHRleHQgZmlsZSIgPnRleHRmaWxlLmMgJiYKKwllY2hvICJ0MiIgPnQyICYmCisJbWtkaXIgYWRpciAmJgorCWVjaG8gImFkaXIvYWZpbGUgbGluZTEiID5hZGlyL2FmaWxlICYmCisJZWNobyAiYWRpci9hZmlsZSBsaW5lMiIgPj5hZGlyL2FmaWxlICYmCisJZWNobyAiYWRpci9hZmlsZSBsaW5lMyIgPj5hZGlyL2FmaWxlICYmCisJZWNobyAiYWRpci9hZmlsZSBsaW5lNCIgPj5hZGlyL2FmaWxlICYmCisJZWNobyAiYWRpci9hMmZpbGUiID4+YWRpci9hMmZpbGUgJiYKKwlta2RpciBhZGlyL2JkaXIgJiYKKwllY2hvICJhZGlyL2JkaXIvYmZpbGUgbGluZSAxIiA+YWRpci9iZGlyL2JmaWxlICYmCisJZWNobyAiYWRpci9iZGlyL2JmaWxlIGxpbmUgMiIgPj5hZGlyL2JkaXIvYmZpbGUgJiYKKwllY2hvICJhZGlyL2JkaXIvYjJmaWxlIiA+YWRpci9iZGlyL2IyZmlsZSAmJgorCWdpdCBhZGQgdGV4dGZpbGUuYyB0MiBhZGlyICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAiRmlyc3QgQ29tbWl0ICh2MSkiICYmCisJZ2l0IHRhZyB2MSAmJgorCWdpdCBicmFuY2ggYjEgJiYKKwlnaXQgY2xvbmUgLXEgLS1iYXJlICIkV09SS0RJUi8uZ2l0IiAiJFNFUlZFUkRJUiIgPi9kZXYvbnVsbCAyPiYxICYmCisJR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgdHJ1ZSAmJgorCUdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgZ2l0Y3ZzLmxvZ2ZpbGUgIiRTRVJWRVJESVIvZ2l0Y3ZzLmxvZyIKKycKKworcm0gLXJmIGN2c3dvcmsKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyB2MScgJworCWN2cyAtZiAtUSBjbyAtciB2MSAtZCBjdnN3b3JrIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdDIgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EyZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2IyZmlsZSB2MSAmJgorCWNoZWNrX2VuZF90cmVlIGN2c3dvcmsKKycKKworcm0gLXJmIGN2c3dvcmsKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyBiMScgJworCWN2cyAtZiBjbyAtciBiMSAtZCBjdnN3b3JrIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdDIgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EyZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2IyZmlsZSB2MSAmJgorCWNoZWNrX2VuZF90cmVlIGN2c3dvcmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvIGIxIFtjdnN3b3JrM10nICcKKwljdnMgLWYgY28gLXIgYjEgLWQgY3Zzd29yazMgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmszICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyB0ZXh0ZmlsZS5jIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyB0MiB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9hZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9hMmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmszIGFkaXIvYmRpci9iZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9iZGlyL2IyZmlsZSB2MSAmJgorCWNoZWNrX2VuZF9mdWxsX3RyZWUgY3Zzd29yazMgdjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdCBjdnN3b3JrMyBhbmQgc2F2ZSBkaWZmJyAnCisJKAorCQljZCBjdnN3b3JrMyAmJgorCQlzZWQgLWUgInMvbGluZTEvbGluZTEgLSBkYXRhLyIgYWRpci9hZmlsZSA+YWRpci9hZmlsZU5FVyAmJgorCQltdiAtZiBhZGlyL2FmaWxlTkVXIGFkaXIvYWZpbGUgJiYKKwkJZWNobyAiYWZpbGU1IiA+YWRpci9hZmlsZTUgJiYKKwkJcm0gdDIgJiYKKwkJY3ZzIC1mIGFkZCBhZGlyL2FmaWxlNSAmJgorCQljdnMgLWYgcm0gdDIgJiYKKwkJISBjdnMgLWYgZGlmZiAtTiAtdSA+IiRXT1JLRElSL2N2c3dvcmszZWRpdC5kaWZmIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdjEuMiBvbiBiMScgJworCWdpdCBjaGVja291dCBiMSAmJgorCWVjaG8gIm5ldyB2MS4yIiA+dDMgJiYKKwlybSB0MiAmJgorCXNlZCAtZSAicy9saW5lMy9saW5lMyAtIG1vcmUgZGF0YS8iIGFkaXIvYWZpbGUgPmFkaXIvYWZpbGVORVcgJiYKKwltdiAtZiBhZGlyL2FmaWxlTkVXIGFkaXIvYWZpbGUgJiYKKwlybSBhZGlyL2EyZmlsZSAmJgorCWVjaG8gImEzZmlsZSIgPj5hZGlyL2EzZmlsZSAmJgorCWVjaG8gImJmaWxlIGxpbmUgMyIgPj5hZGlyL2JkaXIvYmZpbGUgJiYKKwlybSBhZGlyL2JkaXIvYjJmaWxlICYmCisJZWNobyAiYjNmaWxlIiA+YWRpci9iZGlyL2IzZmlsZSAmJgorCW1rZGlyIGNkaXIgJiYKKwllY2hvICJjZGlyL2NmaWxlIiA+Y2Rpci9jZmlsZSAmJgorCWdpdCBhZGQgLUEgY2RpciBhZGlyIHQzIHQyICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAndjEuMicgJiYKKwlnaXQgdGFnIHYxLjIgJiYKKwlnaXQgcHVzaCAtLXRhZ3MgZ2l0Y3ZzLmdpdCBiMTpiMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgLWYgdXAgKG9uIGIxIGFkaXIpJyAnCisJKCBjZCBjdnN3b3JrL2FkaXIgJiYgY3ZzIC1mIHVwIC1kICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yayAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0ZXh0ZmlsZS5jIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHQyIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EzZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iM2ZpbGUgdjEuMiAmJgorCWNoZWNrX2VuZF90cmVlIGN2c3dvcmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwIChvbiBiMSAvKScgJworCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgLWQgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MyB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EzZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iM2ZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBjZGlyL2NmaWxlIHYxLjIgJiYKKwljaGVja19lbmRfdHJlZSBjdnN3b3JrCisnCisKKyMgTWFrZSBzdXJlICJDVlMvVGFnIiBmaWxlcyBkaWRuJ3QgZ2V0IG1lc3NlZCB1cDoKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cCAob24gYjEgLykgKGFnYWluOyBjaGVjayBDVlMvVGFnIGZpbGVzKScgJworCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgLWQgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MyB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EzZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iM2ZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBjZGlyL2NmaWxlIHYxLjIgJiYKKwljaGVja19lbmRfdHJlZSBjdnN3b3JrCisnCisKKyMgdXBkYXRlIHRvIGFub3RoZXIgdmVyc2lvbjoKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cCAtciB2MScgJworCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgLXIgdjEgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdDIgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EyZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2IyZmlsZSB2MSAmJgorCWNoZWNrX2VuZF90cmVlIGN2c3dvcmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwJyAnCisJKCBjZCBjdnN3b3JrICYmIGN2cyAtZiB1cCApID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MiB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTJmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjJmaWxlIHYxICYmCisJY2hlY2tfZW5kX3RyZWUgY3Zzd29yaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXAgKGFnYWluOyBjaGVjayBDVlMvVGFnIGZpbGVzKScgJworCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgLWQgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdDIgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EyZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2IyZmlsZSB2MSAmJgorCWNoZWNrX2VuZF90cmVlIGN2c3dvcmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2ltcGxlIGIyJyAnCisJZ2l0IGJyYW5jaCBiMiB2MSAmJgorCWdpdCBwdXNoIC0tdGFncyBnaXRjdnMuZ2l0IGIyOmIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyBiMiBbaW50byBjdnN3b3JrMl0nICcKKwljdnMgLWYgY28gLXIgYjIgLWQgY3Zzd29yazIgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MiB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTJmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjJmaWxlIHYxICYmCisJY2hlY2tfZW5kX3RyZWUgY3Zzd29yaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyb290IGRpciBlZGl0IFtjdnN3b3JrMl0nICcKKwkoCisJCWNkIGN2c3dvcmsyICYmIGVjaG8gIkxpbmUgMiIgPj50ZXh0ZmlsZS5jICYmCisJCSEgY3ZzIC1mIGRpZmYgLXUgPiIkV09SS0RJUi9jdnNFZGl0MS5kaWZmIiAmJgorCQljdnMgLWYgY29tbWl0IC1tICJlZGl0IHRleHRmaWxlLmMiIHRleHRmaWxlLmMKKwkpID5jdnNFZGl0MS5sb2cgMj4mMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyb290IGRpciBybSBmaWxlIFtjdnN3b3JrMl0nICcKKwkoCisJCWNkIGN2c3dvcmsyICYmCisJCWN2cyAtZiBybSAtZiB0MiAmJgorCQljdnMgLWYgZGlmZiAtdSA+Li4vY3ZzRWRpdDItZW1wdHkuZGlmZiAmJgorCQkhIGN2cyAtZiBkaWZmIC1OIC11ID4iJFdPUktESVIvY3ZzRWRpdDItTi5kaWZmIiAmJgorCQljdnMgLWYgY29tbWl0IC1tICJybSB0MiIKKwkpID5jdnNFZGl0Mi5sb2cgMj4mMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgZWRpdC9hZGQvcm0gZmlsZXMgW2N2c3dvcmsyXScgJworCSgKKwkJY2QgY3Zzd29yazIgJiYKKwkJc2VkIC1lICJzL2xpbmUgMS9saW5lIDEgKHYyKS8iIGFkaXIvYmRpci9iZmlsZSA+YWRpci9iZGlyL2JmaWxlTkVXICYmCisJCW12IC1mIGFkaXIvYmRpci9iZmlsZU5FVyBhZGlyL2JkaXIvYmZpbGUgJiYKKwkJcm0gYWRpci9iZGlyL2IyZmlsZSAmJgorCQljZCBhZGlyICYmCisJCWN2cyAtZiBybSBiZGlyL2IyZmlsZSAmJgorCQllY2hvICI0dGggZmlsZSIgPmJkaXIvYjRmaWxlICYmCisJCWN2cyAtZiBhZGQgYmRpci9iNGZpbGUgJiYKKwkJISBjdnMgLWYgZGlmZiAtTiAtdSA+IiRXT1JLRElSL2N2c0VkaXQzLmRpZmYiICYmCisJCWdpdCBmZXRjaCBnaXRjdnMuZ2l0IGIyOmIyICYmCisJCSgKKwkJICBjZCAuLiAmJgorCQkgICEgY3ZzIC1mIGRpZmYgLXUgLU4gLXIgdjEuMiA+IiRXT1JLRElSL2N2c0VkaXQzLXYxLjIuZGlmZiIgJiYKKwkJICAhIGN2cyAtZiBkaWZmIC11IC1OIC1yIHYxLjIgLXIgdjEgPiIkV09SS0RJUi9jdnNFZGl0My12MS4yLXYxLmRpZmYiCisJCSkgJiYKKwkJY3ZzIC1mIGNvbW1pdCAtbSAidmFyaW91cyBhZGQvcm0vZWRpdCIKKwkpID5jdnMubG9nIDI+JjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgcmVzdWx0IG9mIGVkaXRzIFtjdnN3b3JrMl0nICcKKwlnaXQgZmV0Y2ggZ2l0Y3ZzLmdpdCBiMjpiMiAmJgorCWdpdCB0YWcgdjIgYjIgJiYKKwlnaXQgcHVzaCAtLXRhZ3MgZ2l0Y3ZzLmdpdCBiMjpiMiAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yazIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIHRleHRmaWxlLmMgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIGFkaXIvYWZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIGFkaXIvYTJmaWxlIHYyICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMiBhZGlyL2JkaXIvYmZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIGFkaXIvYmRpci9iNGZpbGUgdjIgJiYKKwljaGVja19lbmRfZnVsbF90cmVlIGN2c3dvcmsyIHYyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIGJhc2ljIGRpZmZzIHNhdmVkIGR1cmluZyBhYm92ZSBjdnN3b3JrMiBlZGl0cycgJworCXRlc3QgJChncmVwIEluZGV4OiBjdnNFZGl0MS5kaWZmIHwgd2MgLWwpID0gMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBjdnNFZGl0Mi1lbXB0eS5kaWZmICYmCisJdGVzdCAkKGdyZXAgSW5kZXg6IGN2c0VkaXQyLU4uZGlmZiB8IHdjIC1sKSA9IDEgJiYKKwl0ZXN0ICQoZ3JlcCBJbmRleDogY3ZzRWRpdDMuZGlmZiB8IHdjIC1sKSA9IDMgJiYKKwlybSAtcmYgZGlmZlNhbmRib3ggJiYKKwlnaXQgY2xvbmUgLXEgLW4gLiBkaWZmU2FuZGJveCAmJgorCSgKKwkJY2QgZGlmZlNhbmRib3ggJiYKKwkJZ2l0IGNoZWNrb3V0IHYxICYmCisJCWdpdCBhcHBseSAtcDAgLS1pbmRleCA8IiRXT1JLRElSL2N2c0VkaXQxLmRpZmYiICYmCisJCWdpdCBhcHBseSAtcDAgLS1pbmRleCA8IiRXT1JLRElSL2N2c0VkaXQyLU4uZGlmZiIgJiYKKwkJZ2l0IGFwcGx5IC1wMCAtLWRpcmVjdG9yeT1hZGlyIC0taW5kZXggPCIkV09SS0RJUi9jdnNFZGl0My5kaWZmIiAmJgorCQlnaXQgZGlmZiAtLWV4aXQtY29kZSB2MgorCSkgPiJjaGVja19kaWZmX2FwcGx5Lm91dCIgMj4mMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSB2MS4yIGRpZmYgc2F2ZWQgZHVyaW5nIGxhc3QgY3Zzd29yazIgZWRpdCcgJworCXRlc3QgJChncmVwIEluZGV4OiBjdnNFZGl0My12MS4yLmRpZmYgfCB3YyAtbCkgPSA5ICYmCisJY2hlY2tfZGlmZiBjdnNFZGl0My12MS4yLmRpZmYgdjEuMiB2MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSB2MS4yIHYxIGRpZmYgc2F2ZWQgZHVyaW5nIGxhc3QgY3Zzd29yazIgZWRpdCcgJworCXRlc3QgJChncmVwIEluZGV4OiBjdnNFZGl0My12MS4yLXYxLmRpZmYgfCB3YyAtbCkgPSA5ICYmCisJY2hlY2tfZGlmZiBjdnNFZGl0My12MS4yLXYxLmRpZmYgdjEuMiB2MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXAgW2N2c3dvcmsyXScgJworCSggY2QgY3Zzd29yazIgJiYgY3ZzIC1mIHVwICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yazIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIHRleHRmaWxlLmMgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIGFkaXIvYWZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIGFkaXIvYTJmaWxlIHYyICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMiBhZGlyL2JkaXIvYmZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIGFkaXIvYmRpci9iNGZpbGUgdjIgJiYKKwljaGVja19lbmRfZnVsbF90cmVlIGN2c3dvcmsyIHYyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cCAtciBiMiBbYmFjayB0byBjdnN3b3JrXScgJworCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgLXIgYjIgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EyZmlsZSB2MiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2I0ZmlsZSB2MiAmJgorCWNoZWNrX2VuZF9mdWxsX3RyZWUgY3Zzd29yayB2MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXAgLXIgYjEnICcKKwkoIGNkIGN2c3dvcmsgJiYgY3ZzIC1mIHVwIC1yIGIxICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yayAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0ZXh0ZmlsZS5jIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdDMgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hM2ZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjNmaWxlIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgY2Rpci9jZmlsZSB2MS4yICYmCisJY2hlY2tfZW5kX2Z1bGxfdHJlZSBjdnN3b3JrIHYxLjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwIC1BJyAnCisJKCBjZCBjdnN3b3JrICYmIGN2cyAtZiB1cCAtQSApID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MiB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTJmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjJmaWxlIHYxICYmCisJY2hlY2tfZW5kX2Z1bGxfdHJlZSBjdnN3b3JrIHYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cCAoY2hlY2sgQ1ZTL1RhZyBmaWxlcyknICcKKwkoIGNkIGN2c3dvcmsgJiYgY3ZzIC1mIHVwICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yayAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0ZXh0ZmlsZS5jIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHQyIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hMmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2JmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iMmZpbGUgdjEgJiYKKwljaGVja19lbmRfZnVsbF90cmVlIGN2c3dvcmsgdjEKKycKKworIyBUaGlzIGlzIG5vdCByZWFsbHkgbGVnYWwgQ1ZTLCBidXQgaXQgc2VlbXMgdG8gd29yayBhbnl3YXk6Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXAgLXIgaGVhZHMvYjEnICcKKwkoIGNkIGN2c3dvcmsgJiYgY3ZzIC1mIHVwIC1yIGhlYWRzL2IxICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yayAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0ZXh0ZmlsZS5jIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdDMgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hM2ZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjNmaWxlIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgY2Rpci9jZmlsZSB2MS4yICYmCisJY2hlY2tfZW5kX2Z1bGxfdHJlZSBjdnN3b3JrIHYxLjIKKycKKworIyBCdXQgdGhpcyBzaG91bGQgd29yayBldmVuIGlmIENWUyBjbGllbnQgY2hlY2tzIC1yIG1vcmUgY2FyZWZ1bGx5OgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwIC1yIGhlYWRzXy1zLWIyIChjdnNzZXJ2ZXIgZXNjYXBlIG1lY2hhbmlzbSknICcKKwkoIGNkIGN2c3dvcmsgJiYgY3ZzIC1mIHVwIC1yIGhlYWRzXy1zLWIyICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yayAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0ZXh0ZmlsZS5jIHYyICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hMmZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2JmaWxlIHYyICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iNGZpbGUgdjIgJiYKKwljaGVja19lbmRfZnVsbF90cmVlIGN2c3dvcmsgdjIKKycKKwordjFoYXNoPSQoZ2l0IHJldi1wYXJzZSB2MSkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cCAtciAkKGdpdCByZXYtcGFyc2UgdjEpJyAnCisJdGVzdCAtbiAiJHYxaGFzaCIgJiYKKwkoIGNkIGN2c3dvcmsgJiYgY3ZzIC1mIHVwIC1yICIkdjFoYXNoIiApID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MiB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTJmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjJmaWxlIHYxICYmCisJY2hlY2tfZW5kX2Z1bGxfdHJlZSBjdnN3b3JrIHYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBkaWZmIC1yIHYxIC11JyAnCisJKCBjZCBjdnN3b3JrICYmIGN2cyAtZiBkaWZmIC1yIHYxIC11ID4uLi9jdnNEaWZmLm91dCAyPi4uL2N2cy5sb2cgKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBjdnNEaWZmLm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBjdnMubG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBkaWZmIC1OIC1yIHYyIC11JyAnCisJKCBjZCBjdnN3b3JrICYmICEgY3ZzIC1mIGRpZmYgLU4gLXIgdjIgLXUgPi4uL2N2c0RpZmYub3V0IDI+Li4vY3ZzLmxvZyApICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGN2cy5sb2cgJiYKKwl0ZXN0IC1zIGN2c0RpZmYub3V0ICYmCisJY2hlY2tfZGlmZiBjdnNEaWZmLm91dCB2MiB2MSA+Y2hlY2tfZGlmZi5vdXQgMj4mMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgZGlmZiAtTiAtciB2MiAtciB2MS4yJyAnCisJKCBjZCBjdnN3b3JrICYmICEgY3ZzIC1mIGRpZmYgLU4gLXIgdjIgLXIgdjEuMiAtdSA+Li4vY3ZzRGlmZi5vdXQgMj4uLi9jdnMubG9nICkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgY3ZzLmxvZyAmJgorCXRlc3QgLXMgY3ZzRGlmZi5vdXQgJiYKKwljaGVja19kaWZmIGN2c0RpZmYub3V0IHYyIHYxLjIgPmNoZWNrX2RpZmYub3V0IDI+JjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZWFybHkgW2N2c3dvcmszXSBkaWZmIHRvIGIzJyAnCisJZ2l0IGNsb25lIC1xIC4gZ2l0d29yazMgJiYKKwkoCisJCWNkIGdpdHdvcmszICYmCisJCWdpdCBjaGVja291dCAtYiBiMyB2MSAmJgorCQlnaXQgYXBwbHkgLXAwIC0taW5kZXggPCIkV09SS0RJUi9jdnN3b3JrM2VkaXQuZGlmZiIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY3Zzd29yazMgZWRpdHMgYXBwbGllZCIKKwkpICYmCisJZ2l0IGZldGNoIGdpdHdvcmszIGIzOmIzICYmCisJZ2l0IHRhZyB2MyBiMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBbY3Zzd29yazNdIGRpZmYnICcKKwkoIGNkIGN2c3dvcmszICYmICEgY3ZzIC1mIGRpZmYgLU4gLXUgPiIkV09SS0RJUi9jdnNEaWZmLm91dCIgMj4uLi9jdnMubG9nICkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgY3ZzLmxvZyAmJgorCXRlc3QgLXMgY3ZzRGlmZi5vdXQgJiYKKwl0ZXN0ICQoZ3JlcCBJbmRleDogY3ZzRGlmZi5vdXQgfCB3YyAtbCkgPSAzICYmCisJdGVzdF9jbXAgY3ZzRGlmZi5vdXQgY3Zzd29yazNlZGl0LmRpZmYgJiYKKwljaGVja19kaWZmIGN2c0RpZmYub3V0IHYxIHYzID5jaGVja19kaWZmLm91dCAyPiYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGVhcmx5IFtjdnN3b3JrM10gYjMgd2l0aCBiMScgJworCSggY2QgZ2l0d29yazMgJiYgZ2l0IG1lcmdlIC1tICJtZXNzYWdlIiBiMSApICYmCisJZ2l0IGZldGNoIGdpdHdvcmszIGIzOmIzICYmCisJZ2l0IHRhZyB2M21lcmdlZCBiMyAmJgorCWdpdCBwdXNoIC0tdGFncyBnaXRjdnMuZ2l0IGIzOmIzCisnCisKKyMgVGhpcyB0ZXN0IHdvdWxkIGZhaWwgaWYgY3Zzc2VydmVyIHByb3Blcmx5IGNyZWF0ZWQgYSAiLiNhZmlsZSIqIGZpbGUKKyMgZm9yIHRoZSBtZXJnZS4KKyMgVE9ETzogVmFsaWRhdGUgdGhhdCB0aGUgLiMgZmlsZSB3YXMgc2F2ZWQgcHJvcGVybHksIGFuZCB0aGVuCisjICAgZGVsZXRlL2lnbm9yZSBpdCB3aGVuIGNoZWNraW5nIHRoZSB0cmVlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwIGRpcnR5IFtjdnN3b3JrM10nICcKKwkoCisJCWNkIGN2c3dvcmszICYmCisJCWN2cyAtZiB1cCAmJgorCQkhIGN2cyAtZiBkaWZmIC1OIC11ID4iJFdPUktESVIvY3ZzRGlmZi5vdXQiCisJKSA+Y3ZzLmxvZyAyPiYxICYmCisJdGVzdCAtcyBjdnNEaWZmLm91dCAmJgorCXRlc3QgJChncmVwIEluZGV4OiBjdnNEaWZmLm91dCB8IHdjIC1sKSA9IDIgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmszICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyB0ZXh0ZmlsZS5jIHYzbWVyZ2VkICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyB0MyB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9hZmlsZSB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9hM2ZpbGUgdjNtZXJnZWQgJiYKKwljaGVja19maWxlIGN2c3dvcmszIGFkaXIvYWZpbGU1IHYzbWVyZ2VkICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyBhZGlyL2JkaXIvYmZpbGUgdjNtZXJnZWQgJiYKKwljaGVja19maWxlIGN2c3dvcmszIGFkaXIvYmRpci9iM2ZpbGUgdjNtZXJnZWQgJiYKKwljaGVja19maWxlIGN2c3dvcmszIGNkaXIvY2ZpbGUgdjNtZXJnZWQgJiYKKwljaGVja19lbmRfZnVsbF90cmVlIGN2c3dvcmszIHYzbWVyZ2VkCisnCisKKyMgVE9ETzogdGVzdCBjdnMgc3RhdHVzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjb21taXQgW2N2c3dvcmszXScgJworCSgKKwkJY2QgY3Zzd29yazMgJiYKKwkJY3ZzIC1mIGNvbW1pdCAtbSAiZGlydHkgc2FuZGJveCBhZnRlciBhdXRvLW1lcmdlIgorCSkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yazMgJiYKKwljaGVja19maWxlIGN2c3dvcmszIHRleHRmaWxlLmMgdjNtZXJnZWQgJiYKKwljaGVja19maWxlIGN2c3dvcmszIHQzIHYzbWVyZ2VkICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyBhZGlyL2FmaWxlIHYzbWVyZ2VkICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyBhZGlyL2EzZmlsZSB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9hZmlsZTUgdjNtZXJnZWQgJiYKKwljaGVja19maWxlIGN2c3dvcmszIGFkaXIvYmRpci9iZmlsZSB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9iZGlyL2IzZmlsZSB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgY2Rpci9jZmlsZSB2M21lcmdlZCAmJgorCWNoZWNrX2VuZF9mdWxsX3RyZWUgY3Zzd29yazMgdjNtZXJnZWQgJiYKKwlnaXQgZmV0Y2ggZ2l0Y3ZzLmdpdCBiMzpiNCAmJgorCWdpdCB0YWcgdjQuMSBiNCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHY0LjEgdjNtZXJnZWQgPmNoZWNrX2RpZmZfYXBwbHkub3V0IDI+JjEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NTAwLWdpdHdlYi1zdGFuZGFsb25lLW5vLWVycm9ycy5zaCBiL3QvdDk1MDAtZ2l0d2ViLXN0YW5kYWxvbmUtbm8tZXJyb3JzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI2N2RkYzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NTAwLWdpdHdlYi1zdGFuZGFsb25lLW5vLWVycm9ycy5zaApAQCAtMCwwICsxLDc5NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKYWt1YiBOYXJlYnNraQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXR3ZWIgYXMgc3RhbmRhbG9uZSBzY3JpcHQgKGJhc2ljIHRlc3RzKS4KKworVGhpcyB0ZXN0IHJ1bnMgZ2l0d2ViIChnaXQgd2ViIGludGVyZmFjZSkgYXMgQ0dJIHNjcmlwdCBmcm9tCitjb21tYW5kbGluZSwgYW5kIGNoZWNrcyB0aGF0IGl0IHdvdWxkIG5vdCB3cml0ZSBhbnkgZXJyb3JzCitvciB3YXJuaW5ncyB0byBsb2cuJworCisKKy4gLi9naXR3ZWItbGliLnNoCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBubyBjb21taXRzIChlbXB0eSwganVzdCBpbml0aWFsaXplZCByZXBvc2l0b3J5KQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbm8gY29tbWl0czogcHJvamVjdHNfbGlzdCAoaW1wbGljaXQpJyBcCisJJ2dpdHdlYl9ydW4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdubyBjb21taXRzOiBwcm9qZWN0c19pbmRleCcgXAorCSdnaXR3ZWJfcnVuICJhPXByb2plY3RfaW5kZXgiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbm8gY29tbWl0czogLmdpdCBzdW1tYXJ5IChpbXBsaWNpdCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ25vIGNvbW1pdHM6IC5naXQgY29tbWl0IChpbXBsaWNpdCBIRUFEKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbm8gY29tbWl0czogLmdpdCBjb21taXRkaWZmIChpbXBsaWNpdCBIRUFEKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ25vIGNvbW1pdHM6IC5naXQgdHJlZSAoaW1wbGljaXQgSEVBRCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdubyBjb21taXRzOiAuZ2l0IGhlYWRzJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWhlYWRzIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ25vIGNvbW1pdHM6IC5naXQgdGFncycgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10YWdzIicKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW5pdGlhbCBjb21taXQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ01ha2UgaW5pdGlhbCBjb21taXQnIFwKKwknZWNobyAiTm90IGFuIGVtcHR5IGZpbGUuIiA+ZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiSW5pdGlhbCBjb21taXQuIiAmJgorCSBnaXQgYnJhbmNoIGInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwcm9qZWN0c19saXN0IChpbXBsaWNpdCknIFwKKwknZ2l0d2ViX3J1bicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3Byb2plY3RzX2luZGV4JyBcCisJJ2dpdHdlYl9ydW4gImE9cHJvamVjdF9pbmRleCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IHN1bW1hcnkgKGltcGxpY2l0KScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBjb21taXQgKGltcGxpY2l0IEhFQUQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IGNvbW1pdGRpZmYgKGltcGxpY2l0IEhFQUQsIHJvb3QgY29tbWl0KScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgY29tbWl0ZGlmZl9wbGFpbiAoaW1wbGljaXQgSEVBRCwgcm9vdCBjb21taXQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmZfcGxhaW4iJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBjb21taXQgKEhFQUQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdDtoPUhFQUQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCB0cmVlIChpbXBsaWNpdCBIRUFEKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10cmVlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgYmxvYiAoZmlsZSknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9YmxvYjtmPWZpbGUiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBibG9iX3BsYWluIChmaWxlKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1ibG9iX3BsYWluO2Y9ZmlsZSInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBub25leGlzdGVudCBvYmplY3RzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IGNvbW1pdCAobm9uLWV4aXN0ZW50KScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXQ7aD1ub24tZXhpc3RlbnQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBjb21taXRkaWZmIChub24tZXhpc3RlbnQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1ub24tZXhpc3RlbnQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBjb21taXRkaWZmIChub24tZXhpc3RlbnQgdnMgSEVBRCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtocD1ub24tZXhpc3RlbnQ7aD1IRUFEIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgdHJlZSAoMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZTtoPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCB0YWcgKDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDApJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXRhZztoPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBibG9iIChub24tZXhpc3RlbnQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWJsb2I7Zj1ub24tZXhpc3RlbnQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBibG9iX3BsYWluIChub24tZXhpc3RlbnQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWJsb2JfcGxhaW47Zj1ub24tZXhpc3RlbnQiJworCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb21taXRkaWZmIHRlc3RpbmcgKGltcGxpY2l0LCBvbmUgaW1wbGljaXQgdHJlZS1pc2gpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDApOiByb290JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigwKTogZmlsZSBhZGRlZCcgXAorCSdlY2hvICJOZXcgZmlsZSIgPm5ld19maWxlICYmCisJIGdpdCBhZGQgbmV3X2ZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiRmlsZSBhZGRlZC4iICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigwKTogbW9kZSBjaGFuZ2UnIFwKKwkndGVzdF9jaG1vZCAreCBuZXdfZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJNb2RlIGNoYW5nZWQuIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IGZpbGUgcmVuYW1lZCcgXAorCSdnaXQgbXYgbmV3X2ZpbGUgcmVuYW1lZF9maWxlICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkZpbGUgcmVuYW1lZC4iICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigwKTogZmlsZSB0byBzeW1saW5rJyBcCisJJ3JtIHJlbmFtZWRfZmlsZSAmJgorCSB0ZXN0X2xuX3NfYWRkIGZpbGUgcmVuYW1lZF9maWxlICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkZpbGUgdG8gc3ltbGluay4iICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigwKTogZmlsZSBkZWxldGVkJyBcCisJJ2dpdCBybSByZW5hbWVkX2ZpbGUgJiYKKwkgcm0gLWYgcmVuYW1lZF9maWxlICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkZpbGUgcmVtb3ZlZC4iICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigwKTogZmlsZSBjb3BpZWQgLyBuZXcgZmlsZScgXAorCSdjcCBmaWxlIGZpbGUyICYmCisJIGdpdCBhZGQgZmlsZTIgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiRmlsZSBjb3BpZWQuIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IG1vZGUgY2hhbmdlIGFuZCBtb2RpZmllZCcgXAorCSdlY2hvICJOZXcgbGluZSIgPj5maWxlMiAmJgorCSB0ZXN0X2NobW9kICt4IGZpbGUyICYmCisJIGdpdCBjb21taXQgLWEgLW0gIk1vZGUgY2hhbmdlIGFuZCBtb2RpZmljYXRpb24uIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IHJlbmFtZWQgYW5kIG1vZGlmaWVkJyBcCisJJ2NhdCA+ZmlsZTI8PEVPRiAmJgorRG9taW51cyByZWdpdCBtZSwKK2V0IG5paGlsIG1paGkgZGVlcml0LgorSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWU7CithbmltYW0gbWVhbSBjb252ZXJ0aXQsCitkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCitwcm9wdGVyIG5vbWVuIHN1dW0uCitFT0YKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiRmlsZSBhZGRlZC4iICYmCisJIGdpdCBtdiBmaWxlMiBmaWxlMyAmJgorCSBlY2hvICJQcm9wdGVyIG5vbWVuIHN1dW0uIiA+PmZpbGUzICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkZpbGUgcmVuYW1lIGFuZCBtb2RpZmljYXRpb24uIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IHJlbmFtZWQsIG1vZGUgY2hhbmdlIGFuZCBtb2RpZmllZCcgXAorCSdnaXQgbXYgZmlsZTMgZmlsZTIgJiYKKwkgZWNobyAiUHJvcHRlciBub21lbiBzdXVtLiIgPj5maWxlMiAmJgorCSB0ZXN0X2NobW9kICt4IGZpbGUyICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkZpbGUgcmVuYW1lLCBtb2RlIGNoYW5nZSBhbmQgbW9kaWZpY2F0aW9uLiIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb21taXRkaWZmIHRlc3RpbmcgKHRha2VuIGZyb20gdDQxMTQtYXBwbHktdHlwZWNoYW5nZS5zaCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdHlwZWNoYW5nZSBjb21taXRzJyAnCisJZWNobyAiaGVsbG8gd29ybGQiID5mb28gJiYKKwllY2hvICJoaSBwbGFuZXQiID5iYXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZvbyBiYXIgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIGluaXRpYWwgJiYKKwlybSAtZiBmb28gJiYKKwl0ZXN0X2xuX3NfYWRkIGJhciBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJmb28gc3ltbGlua2VkIHRvIGJhciIgJiYKKwlnaXQgYnJhbmNoIGZvby1zeW1saW5rZWQtdG8tYmFyICYmCisJcm0gLWYgZm9vICYmCisJZWNobyAiaG93IGZhciBpcyB0aGUgc3VuPyIgPmZvbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAiZm9vIGJhY2sgdG8gZmlsZSIgJiYKKwlnaXQgYnJhbmNoIGZvby1iYWNrLXRvLWZpbGUgJiYKKwlybSAtZiBmb28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIGZvbyAmJgorCW1rZGlyIGZvbyAmJgorCWVjaG8gImlmIG9ubHkgSSBrbmV3IiA+Zm9vL2JheiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZm9vL2JheiAmJgorCWdpdCBjb21taXQgLW0gImZvbyBiZWNvbWVzIGEgZGlyZWN0b3J5IiAmJgorCWdpdCBicmFuY2ggImZvby1iZWNvbWVzLWEtZGlyZWN0b3J5IiAmJgorCWVjaG8gImhlbGxvIHdvcmxkIiA+Zm9vL2JheiAmJgorCWdpdCB1cGRhdGUtaW5kZXggZm9vL2JheiAmJgorCWdpdCBjb21taXQgLW0gImZvby9iYXogaXMgdGhlIG9yaWdpbmFsIGZvbyIgJiYKKwlnaXQgYnJhbmNoIGZvby1iYXotcmVuYW1lZC1mcm9tLWZvbworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IGZpbGUgcmVuYW1lZCBmcm9tIGZvbyB0byBmb28vYmF6JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9aW5pdGlhbDtoPWZvby1iYXotcmVuYW1lZC1mcm9tLWZvbyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDIpOiBmaWxlIHJlbmFtZWQgZnJvbSBmb28vYmF6IHRvIGZvbycgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2hwPWZvby1iYXotcmVuYW1lZC1mcm9tLWZvbztoPWluaXRpYWwiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigyKTogZGlyZWN0b3J5IGJlY29tZXMgZmlsZScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2hwPWZvby1iZWNvbWVzLWEtZGlyZWN0b3J5O2g9aW5pdGlhbCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDIpOiBmaWxlIGJlY29tZXMgZGlyZWN0b3J5JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9aW5pdGlhbDtoPWZvby1iZWNvbWVzLWEtZGlyZWN0b3J5IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IGZpbGUgYmVjb21lcyBzeW1saW5rJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9aW5pdGlhbDtoPWZvby1zeW1saW5rZWQtdG8tYmFyIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IHN5bWxpbmsgYmVjb21lcyBmaWxlJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9Zm9vLXN5bWxpbmtlZC10by1iYXI7aD1mb28tYmFjay10by1maWxlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IHN5bWxpbmsgYmVjb21lcyBkaXJlY3RvcnknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtocD1mb28tc3ltbGlua2VkLXRvLWJhcjtoPWZvby1iZWNvbWVzLWEtZGlyZWN0b3J5IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IGRpcmVjdG9yeSBiZWNvbWVzIHN5bWxpbmsnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtocD1mb28tYmVjb21lcy1hLWRpcmVjdG9yeTtoPWZvby1zeW1saW5rZWQtdG8tYmFyIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbW1pdGRpZmYgdGVzdGluZyAoaW5jb21wbGV0ZSBsaW5lcykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgaW5jb21wbGV0ZSBsaW5lcycgJworCWNhdCA+ZmlsZTw8LVxFT0YgJiYKKwlEb21pbnVzIHJlZ2l0IG1lLAorCWV0IG5paGlsIG1paGkgZGVlcml0LgorCUluIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdCwKKwlzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKKwlhbmltYW0gbWVhbSBjb252ZXJ0aXQsCisJZGVkdXhpdCBtZSBzdXBlciBzZW1pdGFzIGp1c2l0aWFlLAorCXByb3B0ZXIgbm9tZW4gc3V1bS4KKwlDSEFOR0VfTUUKKwlFT0YKKwlnaXQgY29tbWl0IC1hIC1tICJQcmVwYXJpbmcgZm9yIGluY29tcGxldGUgbGluZXMiICYmCisJZWNobyAiaW5jb21wbGV0ZSIgfCB0ciAtZCAiXFwwMTIiID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gIkFkZCBpbmNvbXBsZXRlIGxpbmUiICYmCisJZ2l0IHRhZyBpbmNvbXBsZXRlX2xpbmVzX2FkZCAmJgorCXNlZCAtZSBzL0NIQU5HRV9NRS9jaGFuZ2VfbWUvIDxmaWxlID5maWxlKyAmJgorCW12IC1mIGZpbGUrIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJJbmNvbXBsZXRlIGNvbnRleHQgbGluZSIgJiYKKwlnaXQgdGFnIGluY29tcGxldGVfbGluZXNfY3R4ICYmCisJZWNobyAiRG9taW51cyByZWdpdCBtZSwiID5maWxlICYmCisJZWNobyAiaW5jb21wbGV0ZSBsaW5lIiB8IHRyIC1kICJcXDAxMiIgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIGluY29tcGxldGUgbGluZSIgJiYKKwlnaXQgdGFnIGluY29tcGxldGVfbGluZXNfY2hnICYmCisJZWNobyAiRG9taW51cyByZWdpdCBtZSwiID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiUmVtb3ZlIGluY29tcGxldGUgbGluZSIgJiYKKwlnaXQgdGFnIGluY29tcGxldGVfbGluZXNfcmVtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdGRpZmYoMSk6IGFkZGl0aW9uIG9mIGluY29tcGxldGUgbGluZScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1pbmNvbXBsZXRlX2xpbmVzX2FkZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0ZGlmZigxKTogaW5jb21wbGV0ZSBsaW5lIGFzIGNvbnRleHQgbGluZScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1pbmNvbXBsZXRlX2xpbmVzX2N0eCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0ZGlmZigxKTogY2hhbmdlIGluY29tcGxldGUgbGluZScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1pbmNvbXBsZXRlX2xpbmVzX2NoZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0ZGlmZigxKTogcmVtb3ZhbCBvZiBpbmNvbXBsZXRlIGxpbmUnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9aW5jb21wbGV0ZV9saW5lc19yZW0iCisnCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb21taXQsIGNvbW1pdGRpZmY6IG1lcmdlLCBsYXJnZQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0NyZWF0ZSBhIG1lcmdlJyBcCisJJ2dpdCBjaGVja291dCBiICYmCisJIGVjaG8gIkJyYW5jaCIgPj5iICYmCisJIGdpdCBhZGQgYiAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJPbiBicmFuY2giICYmCisJIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgZ2l0IG1lcmdlIGIgJiYKKwkgZ2l0IHRhZyBtZXJnZV9jb21taXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXQoMCk6IG1lcmdlIGNvbW1pdCcgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigwKTogbWVyZ2UgY29tbWl0JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUHJlcGFyZSBsYXJnZSBjb21taXQnIFwKKwknZ2l0IGNoZWNrb3V0IGIgJiYKKwkgZWNobyAiVG8gYmUgY2hhbmdlZCIgPjAxLWNoYW5nZSAmJgorCSBlY2hvICJUbyBiZSByZW5hbWVkIiA+MDItcHVyZS1yZW5hbWUtZnJvbSAmJgorCSBlY2hvICJUbyBiZSBkZWxldGVkIiA+MDMtZGVsZXRlICYmCisJIGVjaG8gIlRvIGJlIHJlbmFtZWQgYW5kIGNoYW5nZWQiID4wNC1yZW5hbWUtZnJvbSAmJgorCSBlY2hvICJUbyBoYXZlIG1vZGUgY2hhbmdlZCIgPjA1LW1vZGUtY2hhbmdlICYmCisJIGVjaG8gIkZpbGUgdG8gc3ltbGluayIgPjA2LWZpbGUtb3Itc3ltbGluayAmJgorCSBlY2hvICJUbyBiZSBjaGFuZ2VkIGFuZCBoYXZlIG1vZGUgY2hhbmdlZCIgPjA3LWNoYW5nZS1tb2RlLWNoYW5nZSAmJgorCSBnaXQgYWRkIDAqICYmCisJIGdpdCBjb21taXQgLWEgLW0gIlByZXBhcmUgbGFyZ2UgY29tbWl0IiAmJgorCSBlY2hvICJDaGFuZ2VkIiA+MDEtY2hhbmdlICYmCisJIGdpdCBtdiAwMi1wdXJlLXJlbmFtZS1mcm9tIDAyLXB1cmUtcmVuYW1lLXRvICYmCisJIGdpdCBybSAwMy1kZWxldGUgJiYgcm0gLWYgMDMtZGVsZXRlICYmCisJIGVjaG8gIkEgbmV3IGZpbGUiID4wMy1uZXcgJiYKKwkgZ2l0IGFkZCAwMy1uZXcgJiYKKwkgZ2l0IG12IDA0LXJlbmFtZS1mcm9tIDA0LXJlbmFtZS10byAmJgorCSBlY2hvICJDaGFuZ2VkIiA+PjA0LXJlbmFtZS10byAmJgorCSB0ZXN0X2NobW9kICt4IDA1LW1vZGUtY2hhbmdlICYmCisJIHJtIC1mIDA2LWZpbGUtb3Itc3ltbGluayAmJgorCSB0ZXN0X2xuX3NfYWRkIDAxLWNoYW5nZSAwNi1maWxlLW9yLXN5bWxpbmsgJiYKKwkgZWNobyAiQ2hhbmdlZCBhbmQgaGF2ZSBtb2RlIGNoYW5nZWQiID4wNy1jaGFuZ2UtbW9kZS1jaGFuZ2UgJiYKKwkgdGVzdF9jaG1vZCAreCAwNy1jaGFuZ2UtbW9kZS1jaGFuZ2UgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiTGFyZ2UgY29tbWl0IiAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0KDEpOiBsYXJnZSBjb21taXQnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0O2g9YiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDEpOiBsYXJnZSBjb21taXQnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtoPWIiJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc2lkZS1ieS1zaWRlIGRpZmYKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lkZS1ieS1zaWRlOiBhZGRpdGlvbiBvZiBpbmNvbXBsZXRlIGxpbmUnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9aW5jb21wbGV0ZV9saW5lc19hZGQ7ZHM9c2lkZWJ5c2lkZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lkZS1ieS1zaWRlOiBpbmNvbXBsZXRlIGxpbmUgYXMgY29udGV4dCBsaW5lJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtoPWluY29tcGxldGVfbGluZXNfY3R4O2RzPXNpZGVieXNpZGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZGUtYnktc2lkZTogY2hhbmdlZCBpbmNvbXBsZXRlIGxpbmUnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9aW5jb21wbGV0ZV9saW5lc19jaGc7ZHM9c2lkZWJ5c2lkZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lkZS1ieS1zaWRlOiByZW1vdmFsIG9mIGluY29tcGxldGUgbGluZScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1pbmNvbXBsZXRlX2xpbmVzX3JlbTtkcz1zaWRlYnlzaWRlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWRlLWJ5LXNpZGU6IG1lcmdlIGNvbW1pdCcgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1tZXJnZV9jb21taXQ7ZHM9c2lkZWJ5c2lkZSIKKycKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRhZ3MgdGVzdGluZworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndGFnczogbGlzdCBvZiBkaWZmZXJlbnQgdHlwZXMgb2YgdGFncycgXAorCSdnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCB0YWcgLWEgLW0gIlRhZyBjb21taXQgb2JqZWN0IiB0YWctY29tbWl0IEhFQUQgJiYKKwkgZ2l0IHRhZyAtYSAtbSAiIiB0YWctY29tbWl0LW5vbWVzc2FnZSBIRUFEICYmCisJIGdpdCB0YWcgLWEgLW0gIlRhZyB0YWcgb2JqZWN0IiB0YWctdGFnIHRhZy1jb21taXQgJiYKKwkgZ2l0IHRhZyAtYSAtbSAiVGFnIHRyZWUgb2JqZWN0IiB0YWctdHJlZSBIRUFEXnt0cmVlfSAmJgorCSBnaXQgdGFnIC1hIC1tICJUYWcgYmxvYiBvYmplY3QiIHRhZy1ibG9iIEhFQUQ6ZmlsZSAmJgorCSBnaXQgdGFnIGxpZ2h0d2VpZ2h0L3RhZy1jb21taXQgSEVBRCAmJgorCSBnaXQgdGFnIGxpZ2h0d2VpZ2h0L3RhZy10YWcgdGFnLWNvbW1pdCAmJgorCSBnaXQgdGFnIGxpZ2h0d2VpZ2h0L3RhZy10cmVlIEhFQURee3RyZWV9ICYmCisJIGdpdCB0YWcgbGlnaHR3ZWlnaHQvdGFnLWJsb2IgSEVBRDpmaWxlICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPXRhZ3MiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndGFnOiBUYWcgdG8gY29tbWl0IG9iamVjdCcgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10YWc7aD10YWctY29tbWl0IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RhZzogb24gbGlnaHR3ZWlnaHQgdGFnIChpbnZhbGlkKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10YWc7aD1saWdodHdlaWdodC90YWctY29tbWl0IicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxvZ3MKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xvZ3M6IGxvZyAoaW1wbGljaXQgSEVBRCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9bG9nIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xvZ3M6IHNob3J0bG9nIChpbXBsaWNpdCBIRUFEKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zaG9ydGxvZyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsb2dzOiBoaXN0b3J5IChpbXBsaWNpdCBIRUFELCBmaWxlKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1oaXN0b3J5O2Y9ZmlsZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsb2dzOiBoaXN0b3J5IChpbXBsaWNpdCBIRUFELCBub24tZXhpc3RlbnQgZmlsZSknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9aGlzdG9yeTtmPW5vbi1leGlzdGVudCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsb2dzOiBoaXN0b3J5IChpbXBsaWNpdCBIRUFELCBkZWxldGVkIGZpbGUpJyBcCisJJ2dpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgZWNobyAidG8gYmUgZGVsZXRlZCIgPmRlbGV0ZWRfZmlsZSAmJgorCSBnaXQgYWRkIGRlbGV0ZWRfZmlsZSAmJgorCSBnaXQgY29tbWl0IC1tICJBZGQgZmlsZSB0byBiZSBkZWxldGVkIiAmJgorCSBnaXQgcm0gZGVsZXRlZF9maWxlICYmCisJIGdpdCBjb21taXQgLW0gIkRlbGV0ZSBmaWxlIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1oaXN0b3J5O2Y9ZGVsZXRlZF9maWxlIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHBhdGhfaW5mbyBsaW5rcwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdCcgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QvYnJhbmNoJyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0L2IiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncGF0aF9pbmZvOiBwcm9qZWN0L2JyYW5jaDpmaWxlJyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0L21hc3RlcjpmaWxlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC9icmFuY2g6ZGlyLycgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC9tYXN0ZXI6Zm9vLyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QvYnJhbmNoIChub24tZXhpc3RlbnQpJyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0L25vbi1leGlzdGVudCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QvYnJhbmNoOmZpbGVuYW1lIChub24tZXhpc3RlbnQgYnJhbmNoKScgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC9ub24tZXhpc3RlbnQ6bm9uLWV4aXN0ZW50IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC9icmFuY2g6ZmlsZSAobm9uLWV4aXN0ZW50KScgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC9tYXN0ZXI6bm9uLWV4aXN0ZW50IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC9icmFuY2g6ZGlyLyAobm9uLWV4aXN0ZW50KScgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC9tYXN0ZXI6bm9uLWV4aXN0ZW50LyInCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC9icmFuY2g6L2ZpbGUnIFwKKwknZ2l0d2ViX3J1biAiIiAiLy5naXQvbWFzdGVyOi9maWxlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC86L2ZpbGUgKGltcGxpY2l0IEhFQUQpJyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0LzovZmlsZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QvOi8gKGltcGxpY2l0IEhFQUQsIHRvcCB0cmVlKScgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC86LyInCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZlZWQgZ2VuZXJhdGlvbgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZmVlZHM6IE9QTUwnIFwKKwknZ2l0d2ViX3J1biAiYT1vcG1sIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2ZlZWQ6IFJTUycgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1yc3MiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZmVlZDogQXRvbScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1hdG9tIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGVuY29kaW5nL2RlY29kaW5nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdlbmNvZGUoY29tbWl0KTogdXRmOCcgXAorCScuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxL3V0ZjgudHh0ICYmCisJIHRlc3Rfd2hlbl9maW5pc2hlZCAiR0lUX0FVVEhPUl9OQU1FPVwiQSBVIFRob3JcIiIgJiYKKwkgdGVzdF93aGVuX2ZpbmlzaGVkICJHSVRfQ09NTUlUVEVSX05BTUU9XCJDIE8gTWl0dGVyXCIiICYmCisJIGVjaG8gIlVURi04IiA+PmZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2VuY29kZShjb21taXQpOiBpc28tODg1OS0xJyBcCisJJy4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEvODg1OS0xLnR4dCAmJgorCSB0ZXN0X3doZW5fZmluaXNoZWQgIkdJVF9BVVRIT1JfTkFNRT1cIkEgVSBUaG9yXCIiICYmCisJIHRlc3Rfd2hlbl9maW5pc2hlZCAiR0lUX0NPTU1JVFRFUl9OQU1FPVwiQyBPIE1pdHRlclwiIiAmJgorCSBlY2hvICJJU08tODg1OS0xIiA+PmZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIHRlc3RfY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCSBnaXQgY29tbWl0IC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwL0lTTzg4NTktMS50eHQgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2VuY29kZShsb2cpOiB1dGYtOCBhbmQgaXNvLTg4NTktMScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1sb2ciJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZXh0cmEgb3B0aW9ucworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknb3B0OiBsb2cgLS1uby1tZXJnZXMnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9bG9nO29wdD0tLW5vLW1lcmdlcyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdvcHQ6IGF0b20gLS1uby1tZXJnZXMnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9bG9nO29wdD0tLW5vLW1lcmdlcyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdvcHQ6ICJmaWxlIiBoaXN0b3J5IC0tbm8tbWVyZ2VzJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWhpc3Rvcnk7Zj1maWxlO29wdD0tLW5vLW1lcmdlcyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdvcHQ6IGxvZyAtLW5vLXN1Y2gtb3B0aW9uIChpbnZhbGlkIG9wdGlvbiknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9bG9nO29wdD0tLW5vLXN1Y2gtb3B0aW9uIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ29wdDogdHJlZSAtLW5vLW1lcmdlcyAoaW52YWxpZCBvcHRpb24gZm9yIGFjdGlvbiknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZTtvcHQ9LS1uby1tZXJnZXMiJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgdGVzdGluZyBjb25maWdfdG9fbXVsdGkgLyBjbG9uZXVybAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgICAnVVJMOiBubyBwcm9qZWN0IFVSTHMsIG5vIGJhc2UgVVJMJyBcCisgICAgICAgJ2dpdHdlYl9ydW4gInA9LmdpdDthPXN1bW1hcnkiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgICAnVVJMOiBwcm9qZWN0IFVSTHMgdmlhIGdpdHdlYi51cmwnIFwKKyAgICAgICAnZ2l0IGNvbmZpZyAtLWFkZCBnaXR3ZWIudXJsIGdpdDovL2V4YW1wbGUuY29tL2dpdC90cmFzaC5naXQgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWFkZCBnaXR3ZWIudXJsIGh0dHA6Ly9leGFtcGxlLmNvbS9naXQvdHJhc2guZ2l0ICYmCisgICAgICAgIGdpdHdlYl9ydW4gInA9LmdpdDthPXN1bW1hcnkiJworCitjYXQgPi5naXQvY2xvbmV1cmwgPDxcRU9GCitnaXQ6Ly9leGFtcGxlLmNvbS9naXQvdHJhc2guZ2l0CitodHRwOi8vZXhhbXBsZS5jb20vZ2l0L3RyYXNoLmdpdAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAgICdVUkw6IHByb2plY3QgVVJMcyB2aWEgY2xvbmV1cmwgZmlsZScgXAorICAgICAgICdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zdW1tYXJ5IicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGdpdHdlYiBjb25maWcgYW5kIHJlcG8gY29uZmlnCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKKworIyB0dXJuIG9uIG92ZXJyaWRlIGZvciBlYWNoIG92ZXJyaWRhYmxlIGZlYXR1cmUKK2ZvcmVhY2ggbXkgJGtleSAoa2V5cyAlZmVhdHVyZSkgeworCWlmICgkZmVhdHVyZXska2V5fXsnc3ViJ30pIHsKKwkJJGZlYXR1cmV7JGtleX17J292ZXJyaWRlJ30gPSAxOworCX0KK30KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29uZmlnIG92ZXJyaWRlOiBwcm9qZWN0cyBsaXN0IChpbXBsaWNpdCknIFwKKwknZ2l0d2ViX3J1bicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbmZpZyBvdmVycmlkZTogdHJlZSB2aWV3LCBmZWF0dXJlcyBub3Qgb3ZlcnJpZGRlbiBpbiByZXBvIGNvbmZpZycgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10cmVlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbmZpZyBvdmVycmlkZTogdHJlZSB2aWV3LCBmZWF0dXJlcyBkaXNhYmxlZCBpbiByZXBvIGNvbmZpZycgXAorCSdnaXQgY29uZmlnIGdpdHdlYi5ibGFtZSBubyAmJgorCSBnaXQgY29uZmlnIGdpdHdlYi5zbmFwc2hvdCBub25lICYmCisJIGdpdCBjb25maWcgZ2l0d2ViLmF2YXRhciBncmF2YXRhciAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT10cmVlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbmZpZyBvdmVycmlkZTogdHJlZSB2aWV3LCBmZWF0dXJlcyBlbmFibGVkIGluIHJlcG8gY29uZmlnICgxKScgXAorCSdnaXQgY29uZmlnIGdpdHdlYi5ibGFtZSB5ZXMgJiYKKwkgZ2l0IGNvbmZpZyBnaXR3ZWIuc25hcHNob3QgInppcCx0Z3osIHRiejIiICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPXRyZWUiJworCitjYXQgPi5naXQvY29uZmlnIDw8XEVPRgorIyB0ZXN0aW5nIG5vdmFsIGFuZCBhbHRlcm5hdGUgc2VwYXJhdG9yCitbZ2l0d2ViXQorCWJsYW1lCisJc25hcHNob3QgPSB6aXAgdGd6CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb25maWcgb3ZlcnJpZGU6IHRyZWUgdmlldywgZmVhdHVyZXMgZW5hYmxlZCBpbiByZXBvIGNvbmZpZyAoMiknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZSInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzZWFyY2hpbmcKKworY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8XEVPRgorCisjIGVuYWJsZSBzZWFyY2gKKyRmZWF0dXJleydzZWFyY2gnfXsnZGVmYXVsdCd9ID0gWzFdOworJGZlYXR1cmV7J2dyZXAnfXsnZGVmYXVsdCd9ID0gWzFdOworJGZlYXR1cmV7J3BpY2theGUnfXsnZGVmYXVsdCd9ID0gWzFdOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdzZWFyY2g6IHByZXBhcmF0aW9uJyBcCisJJ2VjaG8gIjFzdCBNQVRDSCIgPj5maWxlICYmCisJIGVjaG8gIjJuZCBNQVRDSCIgPj5maWxlICYmCisJIGVjaG8gIk1BVENIIiA+PmJhciAmJgorCSBnaXQgYWRkIGZpbGUgYmFyICYmCisJIGdpdCBjb21taXQgLW0gIkFkZGVkIE1BVENIIHdvcmQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknc2VhcmNoOiBjb21taXQgYXV0aG9yJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXNlYXJjaDtoPUhFQUQ7c3Q9YXV0aG9yO3M9QStVK1Rob3IiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknc2VhcmNoOiBjb21taXQgbWVzc2FnZScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zZWFyY2g7aD1IRUFEO3N0PWNvbW1pdHI7cz1NQVRDSCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdzZWFyY2g6IGdyZXAnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9c2VhcmNoO2g9SEVBRDtzdD1ncmVwO3M9TUFUQ0giJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknc2VhcmNoOiBwaWNrYXhlJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXNlYXJjaDtoPUhFQUQ7c3Q9cGlja2F4ZTtzPU1BVENIIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3NlYXJjaDogcHJvamVjdHMnIFwKKwknZ2l0d2ViX3J1biAiYT1wcm9qZWN0X2xpc3Q7cz0uZ2l0IicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIG5vbi1BU0NJSSBpbiBSRUFETUUuaHRtbAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUkVBRE1FLmh0bWwgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyAodXRmLTgpJyBcCisJJ2VjaG8gIjxiPlVURi04IGV4YW1wbGU6PC9iPjxiciAvPiIgPi5naXQvUkVBRE1FLmh0bWwgJiYKKwkgY2F0ICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0ID4+LmdpdC9SRUFETUUuaHRtbCAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zdW1tYXJ5IicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHN5bnRheCBoaWdobGlnaHRpbmcKKworCitoaWdobGlnaHRfdmVyc2lvbj0kKGhpZ2hsaWdodCAtLXZlcnNpb24gPC9kZXYvbnVsbCAyPi9kZXYvbnVsbCkKK2lmIFsgJD8gLWVxIDEyNyBdOyB0aGVuCisJc2F5ICJTa2lwcGluZyBzeW50YXggaGlnaGxpZ2h0aW5nIHRlc3RzOiAnaGlnaGxpZ2h0JyBub3QgZm91bmQiCitlbGlmIHRlc3QgLXogIiRoaWdobGlnaHRfdmVyc2lvbiI7IHRoZW4KKwlzYXkgIlNraXBwaW5nIHN5bnRheCBoaWdobGlnaHRpbmcgdGVzdHM6IGluY29ycmVjdCAnaGlnaGxpZ2h0JyBmb3VuZCIKK2Vsc2UKKwl0ZXN0X3NldF9wcmVyZXEgSElHSExJR0hUCisJY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8LVxFT0YKKwlvdXIgJGhpZ2hsaWdodF9iaW4gPSAiaGlnaGxpZ2h0IjsKKwkkZmVhdHVyZXsnaGlnaGxpZ2h0J317J292ZXJyaWRlJ30gPSAxOworCUVPRgorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBISUdITElHSFQgXAorCSdzeW50YXggaGlnaGxpZ2h0aW5nIChubyBoaWdobGlnaHQsIHVua25vd24gc3ludGF4KScgXAorCSdnaXQgY29uZmlnIGdpdHdlYi5oaWdobGlnaHQgeWVzICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWJsb2I7Zj1maWxlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBISUdITElHSFQgXAorCSdzeW50YXggaGlnaGxpZ2h0aW5nIChoaWdobGlnaHRlZCwgc2hlbGwgc2NyaXB0KScgXAorCSdnaXQgY29uZmlnIGdpdHdlYi5oaWdobGlnaHQgeWVzICYmCisJIGVjaG8gIiMhL3Vzci9iaW4vc2giID50ZXN0LnNoICYmCisJIGdpdCBhZGQgdGVzdC5zaCAmJgorCSBnaXQgY29tbWl0IC1tICJBZGQgdGVzdC5zaCIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9YmxvYjtmPXRlc3Quc2giJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEhJR0hMSUdIVCBcCisJJ3N5bnRheCBoaWdobGlnaHRpbmcgKGhpZ2hsaWdodGVyIGxhbmd1YWdlIGF1dG9kZXRlY3Rpb24pJyBcCisJJ2dpdCBjb25maWcgZ2l0d2ViLmhpZ2hsaWdodCB5ZXMgJiYKKwkgZWNobyAiIyEvdXNyL2Jpbi9wZXJsIiA+dGVzdCAmJgorCSBnaXQgYWRkIHRlc3QgJiYKKwkgZ2l0IGNvbW1pdCAtbSAiQWRkIHRlc3QiICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWJsb2I7Zj10ZXN0IicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZvcmtzIG9mIHByb2plY3RzCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YgJiYKKyRmZWF0dXJleydmb3Jrcyd9eydkZWZhdWx0J30gPSBbMV07CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2ZvcmtzOiBwcmVwYXJlJyBcCisJJ2dpdCBpbml0IC0tYmFyZSBmb28uZ2l0ICYmCisJIGdpdCAtLWdpdC1kaXI9Zm9vLmdpdCAtLXdvcmstdHJlZT0uIGFkZCBmaWxlICYmCisJIGdpdCAtLWdpdC1kaXI9Zm9vLmdpdCAtLXdvcmstdHJlZT0uIGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisJIGVjaG8gImZvbyIgPmZvby5naXQvZGVzY3JpcHRpb24gJiYKKwkgbWtkaXIgLXAgZm9vICYmCisJIChjZCBmb28gJiYKKwkgIGdpdCBjbG9uZSAtLXNoYXJlZCAtLWJhcmUgLi4vZm9vLmdpdCBmb28tZm9ya2VkLmdpdCAmJgorCSAgZWNobyAiZm9yayBvZiBmb28iID5mb28tZm9ya2VkLmdpdC9kZXNjcmlwdGlvbiknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdmb3JrczogcHJvamVjdHMgbGlzdCcgXAorCSdnaXR3ZWJfcnVuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZm9ya3M6IGZvcmtzIGFjdGlvbicgXAorCSdnaXR3ZWJfcnVuICJwPWZvby5naXQ7YT1mb3JrcyInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb250ZW50IHRhZ3MgKHRhZyBjbG91ZCkKKworY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8LVxFT0YgJiYKKyMgd2UgZG9uJ3QgdGVzdCBfc2V0dGluZ18gY29udGVudCB0YWdzLCBzbyBhbnkgdHJ1ZSB2YWx1ZSBpcyBnb29kCiskZmVhdHVyZXsnY3RhZ3MnfXsnZGVmYXVsdCd9ID0gWydjdGFnc19zY3JpcHQuY2dpJ107CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2N0YWdzOiB0YWcgY2xvdWQgaW4gcHJvamVjdHMgbGlzdCcgXAorCSdta2RpciAuZ2l0L2N0YWdzICYmCisJIGVjaG8gIjIiID4uZ2l0L2N0YWdzL2ZvbyAmJgorCSBlY2hvICIxIiA+LmdpdC9jdGFncy9iYXIgJiYKKwlnaXR3ZWJfcnVuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3RhZ3M6IHNlYXJjaCBwcm9qZWN0cyBieSBleGlzdGluZyB0YWcnIFwKKwknZ2l0d2ViX3J1biAiYnlfdGFnPWZvbyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjdGFnczogc2VhcmNoIHByb2plY3RzIGJ5IG5vbiBleGlzdGVudCB0YWcnIFwKKwknZ2l0d2ViX3J1biAiYnlfdGFnPW5vbi1leGlzdGVudCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjdGFnczogbWFsZm9ybWVkIHRhZyB3ZWlnaHRzJyBcCisJJ21rZGlyIC1wIC5naXQvY3RhZ3MgJiYKKwkgZWNobyAibm90LWEtbnVtYmVyIiA+LmdpdC9jdGFncy9uYW4gJiYKKwkgZWNobyAibm90LWEtbnVtYmVyLTIiID4uZ2l0L2N0YWdzL25hbjIgJiYKKwkgZWNobyAiMC4xIiA+LmdpdC9jdGFncy9mbG9hdGluZy1wb2ludCAmJgorCSBnaXR3ZWJfcnVuJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY2F0ZWdvcmllcworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY2F0ZWdvcmllczogcHJvamVjdHMgbGlzdCwgb25seSBkZWZhdWx0IGNhdGVnb3J5JyBcCisJJ2VjaG8gIlwkcHJvamVjdHNfbGlzdF9ncm91cF9jYXRlZ29yaWVzID0gMTsiID4+Z2l0d2ViX2NvbmZpZy5wZXJsICYmCisJIGdpdHdlYl9ydW4nCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB1bmJvcm4gYnJhbmNoZXMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3VuYm9ybiBIRUFEOiAic3VtbWFyeSIgcGFnZSAod2l0aCAiaGVhZHMiIHN1YnZpZXcpJyBcCisJJ3sKKwkJZ2l0IGNoZWNrb3V0IG9ycGhhbl9icmFuY2ggfHwKKwkJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG9ycGhhbl9icmFuY2gKKwkgfSAmJgorCSB0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPXN1bW1hcnkiJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk1MDEtZ2l0d2ViLXN0YW5kYWxvbmUtaHR0cC1zdGF0dXMuc2ggYi90L3Q5NTAxLWdpdHdlYi1zdGFuZGFsb25lLWh0dHAtc3RhdHVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhMGZmZWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NTAxLWdpdHdlYi1zdGFuZGFsb25lLWh0dHAtc3RhdHVzLnNoCkBAIC0wLDAgKzEsMjE3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IE1hcmsgUmFkYQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXR3ZWIgYXMgc3RhbmRhbG9uZSBzY3JpcHQgKGh0dHAgc3RhdHVzIHRlc3RzKS4KKworVGhpcyB0ZXN0IHJ1bnMgZ2l0d2ViIChnaXQgd2ViIGludGVyZmFjZSkgYXMgYSBDR0kgc2NyaXB0IGZyb20gdGhlCitjb21tYW5kbGluZSwgYW5kIGNoZWNrcyB0aGF0IGl0IHJldHVybnMgdGhlIGV4cGVjdGVkIEhUVFAgc3RhdHVzCitjb2RlIGFuZCBtZXNzYWdlLicKKworCisuIC4vZ2l0d2ViLWxpYi5zaAorCisjCisjIEdpdHdlYiBvbmx5IHByb3ZpZGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRlc3RlZCBieSB0aGUgJ21vZGlmaWNhdGlvbiB0aW1lcycKKyMgdGVzdHMgaWYgaXQgY2FuIGFjY2VzcyBhIGRhdGUgcGFyc2VyIGZyb20gb25lIG9mIHRoZXNlIG1vZHVsZXM6CisjCitwZXJsIC1NSFRUUDo6RGF0ZSAtZSAwID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0X3NldF9wcmVyZXEgREFURV9QQVJTRVIKK3BlcmwgLU1UaW1lOjpQYXJzZURhdGUgLWUgMCA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdF9zZXRfcHJlcmVxIERBVEVfUEFSU0VSCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzbmFwc2hvdCBzZXR0aW5ncworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgIgorCXRlc3RfY29tbWl0ICdTbmFwc2hvdFRlc3RzJyAnaSBjYW4gaGFzIHNuYXBzaG90JworIgorCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKKyRmZWF0dXJleydzbmFwc2hvdCd9eydvdmVycmlkZSd9ID0gMDsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc25hcHNob3RzOiB0Z3ogb25seSBkZWZhdWx0IGZvcm1hdCBlbmFibGVkJyBcCisgICAgJ2dpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9SEVBRDtzZj10Z3oiICYmCisgICAgZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5vdXRwdXQgJiYKKyAgICBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9dGJ6MiIgJiYKKyAgICBncmVwICI0MDMgLSBVbnN1cHBvcnRlZCBzbmFwc2hvdCBmb3JtYXQiIGdpdHdlYi5vdXRwdXQgJiYKKyAgICBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9dHh6IiAmJgorICAgIGdyZXAgIjQwMyAtIFNuYXBzaG90IGZvcm1hdCBub3QgYWxsb3dlZCIgZ2l0d2ViLm91dHB1dCAmJgorICAgIGdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9SEVBRDtzZj16aXAiICYmCisgICAgZ3JlcCAiNDAzIC0gVW5zdXBwb3J0ZWQgc25hcHNob3QgZm9ybWF0IiBnaXR3ZWIub3V0cHV0JworCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKKyRmZWF0dXJleydzbmFwc2hvdCd9eydkZWZhdWx0J30gPSBbJ3RneicsJ3RiejInLCd0eHonLCd6aXAnXTsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc25hcHNob3RzOiBhbGwgZW5hYmxlZCBpbiBkZWZhdWx0LCB1c2UgZGVmYXVsdCBkaXNhYmxlZCB2YWx1ZScgXAorICAgICdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9dGd6IiAmJgorICAgIGdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0ICYmCisgICAgZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXRiejIiICYmCisgICAgZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5vdXRwdXQgJiYKKyAgICBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9dHh6IiAmJgorICAgIGdyZXAgIjQwMyAtIFNuYXBzaG90IGZvcm1hdCBub3QgYWxsb3dlZCIgZ2l0d2ViLm91dHB1dCAmJgorICAgIGdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9SEVBRDtzZj16aXAiICYmCisgICAgZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5vdXRwdXQnCisKKworY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8XEVPRgorJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7J3ppcCd9eydkaXNhYmxlZCd9ID0gMTsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc25hcHNob3RzOiB6aXAgZXhwbGljaXRseSBkaXNhYmxlZCcgXAorICAgICdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9emlwIiAmJgorICAgIGdyZXAgIjQwMyAtIFNuYXBzaG90IGZvcm1hdCBub3QgYWxsb3dlZCIgZ2l0d2ViLm91dHB1dCcKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIub3V0cHV0JworCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKKyRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyd0Z3onfXsnZGlzYWJsZWQnfSA9IDA7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NuYXBzaG90czogdGd6IGV4cGxpY2l0bHkgZW5hYmxlZCcgXAorICAgICdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9dGd6IiAmJgorICAgIGdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0JwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzbmFwc2hvdCBoYXNoIGlkcworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdHM6IGdvb2QgdHJlZS1pc2ggaWQnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj10Z3oiICYmCisJZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5vdXRwdXQKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3RzOiBiYWQgdHJlZS1pc2ggaWQnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPWZyaXp6dW1GcmF6enVtO3NmPXRneiIgJiYKKwlncmVwICI0MDQgLSBPYmplY3QgZG9lcyBub3QgZXhpc3QiIGdpdHdlYi5vdXRwdXQKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIub3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdHM6IGJhZCB0cmVlLWlzaCBpZCAodGFnZ2VkIG9iamVjdCknICcKKwllY2hvIG9iamVjdCA+IHRhZy1vYmplY3QgJiYKKwlnaXQgYWRkIHRhZy1vYmplY3QgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiT2JqZWN0IHRvIGJlIHRhZ2dlZCIgJiYKKwlnaXQgdGFnIHRhZ2dlZC1vYmplY3QgJChnaXQgaGFzaC1vYmplY3QgdGFnLW9iamVjdCkgJiYKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPXRhZ2dlZC1vYmplY3Q7c2Y9dGd6IiAmJgorCWdyZXAgIjQwMCAtIE9iamVjdCBpcyBub3QgYSB0cmVlLWlzaCIgZ2l0d2ViLm91dHB1dAorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90czogZ29vZCBvYmplY3QgaWQnICcKKwlJRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPSRJRDtzZj10Z3oiICYmCisJZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5vdXRwdXQKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3RzOiBiYWQgb2JqZWN0IGlkJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1hYmNkZWYwMTIzNDtzZj10Z3oiICYmCisJZ3JlcCAiNDA0IC0gT2JqZWN0IGRvZXMgbm90IGV4aXN0IiBnaXR3ZWIub3V0cHV0CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLm91dHB1dCcKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIG1vZGlmaWNhdGlvbiB0aW1lcyAoTGFzdC1Nb2RpZmllZCBhbmQgSWYtTW9kaWZpZWQtU2luY2UpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgREFURV9QQVJTRVIgJ21vZGlmaWNhdGlvbjogZmVlZCBsYXN0LW1vZGlmaWVkJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9YXRvbTtoPW1hc3RlciIgJiYKKwlncmVwICJTdGF0dXM6IDIwMCBPSyIgZ2l0d2ViLmhlYWRlcnMgJiYKKwlncmVwICJMYXN0LW1vZGlmaWVkOiBUaHUsIDcgQXByIDIwMDUgMjI6MTQ6MTMgKzAwMDAiIGdpdHdlYi5oZWFkZXJzCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgREFURV9QQVJTRVIgJ21vZGlmaWNhdGlvbjogZmVlZCBpZi1tb2RpZmllZC1zaW5jZSAobW9kaWZpZWQpJyAnCisJSFRUUF9JRl9NT0RJRklFRF9TSU5DRT0iV2VkLCA2IEFwciAyMDA1IDIyOjE0OjEzICswMDAwIiAmJgorCWV4cG9ydCBIVFRQX0lGX01PRElGSUVEX1NJTkNFICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ1bnNldCBIVFRQX0lGX01PRElGSUVEX1NJTkNFIiAmJgorCWdpdHdlYl9ydW4gInA9LmdpdDthPWF0b207aD1tYXN0ZXIiICYmCisJZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5oZWFkZXJzCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgREFURV9QQVJTRVIgJ21vZGlmaWNhdGlvbjogZmVlZCBpZi1tb2RpZmllZC1zaW5jZSAodW5tb2RpZmllZCknICcKKwlIVFRQX0lGX01PRElGSUVEX1NJTkNFPSJUaHUsIDcgQXByIDIwMDUgMjI6MTQ6MTMgKzAwMDAiICYmCisJZXhwb3J0IEhUVFBfSUZfTU9ESUZJRURfU0lOQ0UgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInVuc2V0IEhUVFBfSUZfTU9ESUZJRURfU0lOQ0UiICYmCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9YXRvbTtoPW1hc3RlciIgJiYKKwlncmVwICJTdGF0dXM6IDMwNCBOb3QgTW9kaWZpZWQiIGdpdHdlYi5oZWFkZXJzCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgREFURV9QQVJTRVIgJ21vZGlmaWNhdGlvbjogc25hcHNob3QgbGFzdC1tb2RpZmllZCcgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9bWFzdGVyO3NmPXRneiIgJiYKKwlncmVwICJTdGF0dXM6IDIwMCBPSyIgZ2l0d2ViLmhlYWRlcnMgJiYKKwlncmVwICJMYXN0LW1vZGlmaWVkOiBUaHUsIDcgQXByIDIwMDUgMjI6MTQ6MTMgKzAwMDAiIGdpdHdlYi5oZWFkZXJzCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgREFURV9QQVJTRVIgJ21vZGlmaWNhdGlvbjogc25hcHNob3QgaWYtbW9kaWZpZWQtc2luY2UgKG1vZGlmaWVkKScgJworCUhUVFBfSUZfTU9ESUZJRURfU0lOQ0U9IldlZCwgNiBBcHIgMjAwNSAyMjoxNDoxMyArMDAwMCIgJiYKKwlleHBvcnQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAidW5zZXQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRSIgJiYKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj10Z3oiICYmCisJZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5oZWFkZXJzCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgREFURV9QQVJTRVIgJ21vZGlmaWNhdGlvbjogc25hcHNob3QgaWYtbW9kaWZpZWQtc2luY2UgKHVubW9kaWZpZWQpJyAnCisJSFRUUF9JRl9NT0RJRklFRF9TSU5DRT0iVGh1LCA3IEFwciAyMDA1IDIyOjE0OjEzICswMDAwIiAmJgorCWV4cG9ydCBIVFRQX0lGX01PRElGSUVEX1NJTkNFICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ1bnNldCBIVFRQX0lGX01PRElGSUVEX1NJTkNFIiAmJgorCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9bWFzdGVyO3NmPXRneiIgJiYKKwlncmVwICJTdGF0dXM6IDMwNCBOb3QgTW9kaWZpZWQiIGdpdHdlYi5oZWFkZXJzCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgREFURV9QQVJTRVIgJ21vZGlmaWNhdGlvbjogdHJlZSBzbmFwc2hvdCcgJworCUlEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXnt0cmVlfSkgJiYKKwlIVFRQX0lGX01PRElGSUVEX1NJTkNFPSJXZWQsIDYgQXByIDIwMDUgMjI6MTQ6MTMgKzAwMDAiICYmCisJZXhwb3J0IEhUVFBfSUZfTU9ESUZJRURfU0lOQ0UgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInVuc2V0IEhUVFBfSUZfTU9ESUZJRURfU0lOQ0UiICYmCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD0kSUQ7c2Y9dGd6IiAmJgorCWdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIuaGVhZGVycyAmJgorCSEgZ3JlcCAtaSAibGFzdC1tb2RpZmllZCIgZ2l0d2ViLmhlYWRlcnMKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxvYWQgY2hlY2tpbmcKKworIyBhbHdheXMgaGl0IHRoZSBsb2FkIGxpbWl0CitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCitvdXIgJG1heGxvYWQgPSAtMTsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIGNoZWNraW5nOiBsb2FkIHRvbyBoaWdoIChkZWZhdWx0IGFjdGlvbiknICcKKwlnaXR3ZWJfcnVuICJwPS5naXQiICYmCisJZ3JlcCAiU3RhdHVzOiA1MDMgU2VydmljZSBVbmF2YWlsYWJsZSIgZ2l0d2ViLmhlYWRlcnMgJiYKKwlncmVwICI1MDMgLSBUaGUgbG9hZCBhdmVyYWdlIG9uIHRoZSBzZXJ2ZXIgaXMgdG9vIGhpZ2giIGdpdHdlYi5ib2R5CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKKyMgdHVybiBvZmYgbG9hZCBjaGVja2luZworY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8XEVPRgorb3VyICRtYXhsb2FkID0gdW5kZWY7CitFT0YKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW52YWxpZCBhcmd1bWVudHMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBhcmd1bWVudHM6IGludmFsaWQgcmVnZXhwIChpbiBwcm9qZWN0IHNlYXJjaCknICcKKwlnaXR3ZWJfcnVuICJhPXByb2plY3RfbGlzdDtzPSpcLmdpdDtzcj0xIiAmJgorCWdyZXAgIlN0YXR1czogNDAwIiBnaXR3ZWIuaGVhZGVycyAmJgorCWdyZXAgIjQwMCAtIEludmFsaWQuKnJlZ2V4cCIgZ2l0d2ViLmJvZHkKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NTAyLWdpdHdlYi1zdGFuZGFsb25lLXBhcnNlLW91dHB1dC5zaCBiL3QvdDk1MDItZ2l0d2ViLXN0YW5kYWxvbmUtcGFyc2Utb3V0cHV0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzOGNiYzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NTAyLWdpdHdlYi1zdGFuZGFsb25lLXBhcnNlLW91dHB1dC5zaApAQCAtMCwwICsxLDIwNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBNYXJrIFJhZGEKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0d2ViIGFzIHN0YW5kYWxvbmUgc2NyaXB0IChwYXJzaW5nIHNjcmlwdCBvdXRwdXQpLgorCitUaGlzIHRlc3QgcnVucyBnaXR3ZWIgKGdpdCB3ZWIgaW50ZXJmYWNlKSBhcyBhIENHSSBzY3JpcHQgZnJvbSB0aGUKK2NvbW1hbmRsaW5lLCBhbmQgY2hlY2tzIHRoYXQgaXQgcHJvZHVjZXMgdGhlIGNvcnJlY3Qgb3V0cHV0LCBlaXRoZXIKK2luIHRoZSBIVFRQIGhlYWRlciBvciB0aGUgYWN0dWFsIHNjcmlwdCBvdXRwdXQuJworCisKKy4gLi9naXR3ZWItbGliLnNoCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzbmFwc2hvdCBmaWxlIG5hbWUgYW5kIHByZWZpeAorCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCisKKyRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyd0YXInfSA9IHsKKwknZGlzcGxheScgPT4gJ3RhcicsCisJJ3R5cGUnID0+ICdhcHBsaWNhdGlvbi94LXRhcicsCisJJ3N1ZmZpeCcgPT4gJy50YXInLAorCSdmb3JtYXQnID0+ICd0YXInLAorfTsKKworJGZlYXR1cmV7J3NuYXBzaG90J317J2RlZmF1bHQnfSA9IFsndGFyJ107CitFT0YKKworIyBDYWxsIGNoZWNrX3NuYXBzaG90IHdpdGggdGhlIGFyZ3VtZW50cyAiPGJhc2VuYW1lPiBbPHByZWZpeD5dIgorIworIyBUaGlzIHdpbGwgY2hlY2sgdGhhdCBnaXR3ZWIgSFRUUCBoZWFkZXIgY29udGFpbnMgcHJvcG9zZWQgZmlsZW5hbWUKKyMgYXMgPGJhc2VuYW1lPiB3aXRoICcudGFyJyBzdWZmaXggYWRkZWQsIGFuZCB0aGF0IGdlbmVyYXRlZCB0YXJmaWxlCisjIChnaXR3ZWIgbWVzc2FnZSBib2R5KSBoYXMgPHByZWZpeD4gYXMgcHJlZml4IGZvciBhbCBmaWxlcyBpbiB0YXJmaWxlCisjCisjIDxwcmVmaXg+IGRlZmF1bHQgdG8gPGJhc2VuYW1lPgorY2hlY2tfc25hcHNob3QgKCkgeworCWJhc2VuYW1lPSQxCisJcHJlZml4PSR7MjotIiQxIn0KKwllY2hvICJiYXNlbmFtZT0kYmFzZW5hbWUiCisJZ3JlcCAiZmlsZW5hbWU9LiokYmFzZW5hbWUudGFyIiBnaXR3ZWIuaGVhZGVycyA+L2Rldi9udWxsIDI+JjEgJiYKKwkiJFRBUiIgdGYgZ2l0d2ViLmJvZHkgPmZpbGVfbGlzdCAmJgorCSEgZ3JlcCAtdiAtZSAiXiRwcmVmaXgkIiAtZSAiXiRwcmVmaXgvIiAtZSAiXnBheF9nbG9iYWxfaGVhZGVyJCIgZmlsZV9saXN0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IGZpcnN0IGZvbyAmJgorCWdpdCBicmFuY2ggeHgvdGVzdCAmJgorCUZVTExfSUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJU0hPUlRfSUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQ9NyBIRUFEKQorJwordGVzdF9kZWJ1ZyAnCisJZWNobyAiRlVMTF9JRCAgPSAkRlVMTF9JRCIKKwllY2hvICJTSE9SVF9JRCA9ICRTSE9SVF9JRCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3Q6IGZ1bGwgc2hhMScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9JEZVTExfSUQ7c2Y9dGFyIiAmJgorCWNoZWNrX3NuYXBzaG90ICIuZ2l0LSRTSE9SVF9JRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogc2hvcnRlbmVkIHNoYTEnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPSRTSE9SVF9JRDtzZj10YXIiICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtJFNIT1JUX0lEIgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBhbG1vc3QgZnVsbCBzaGExJyAnCisJSUQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9MzAgSEVBRCkgJiYKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPSRJRDtzZj10YXIiICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtJFNIT1JUX0lEIgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBIRUFEJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXRhciIgJiYKKwljaGVja19zbmFwc2hvdCAiLmdpdC1IRUFELSRTSE9SVF9JRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogc2hvcnQgYnJhbmNoIG5hbWUgKG1hc3RlciknICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj10YXIiICYmCisJSUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQ9NyBtYXN0ZXIpICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtbWFzdGVyLSRJRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogc2hvcnQgdGFnIG5hbWUgKGZpcnN0KScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9Zmlyc3Q7c2Y9dGFyIiAmJgorCUlEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0PTcgZmlyc3QpICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtZmlyc3QtJElEIgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBmdWxsIGJyYW5jaCBuYW1lIChyZWZzL2hlYWRzL21hc3RlciknICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPXJlZnMvaGVhZHMvbWFzdGVyO3NmPXRhciIgJiYKKwlJRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydD03IG1hc3RlcikgJiYKKwljaGVja19zbmFwc2hvdCAiLmdpdC1tYXN0ZXItJElEIgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBmdWxsIHRhZyBuYW1lIChyZWZzL3RhZ3MvZmlyc3QpJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1yZWZzL3RhZ3MvZmlyc3Q7c2Y9dGFyIiAmJgorCWNoZWNrX3NuYXBzaG90ICIuZ2l0LWZpcnN0IgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBoaWVyYXJjaGljYWwgYnJhbmNoIG5hbWUgKHh4L3Rlc3QpJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD14eC90ZXN0O3NmPXRhciIgJiYKKwkhIGdyZXAgImZpbGVuYW1lPS4qLyIgZ2l0d2ViLmhlYWRlcnMKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZvcmtzIG9mIHByb2plY3RzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmtzOiBzZXR1cCcgJworCWdpdCBpbml0IC0tYmFyZSBmb28uZ2l0ICYmCisJZWNobyBmaWxlID4gZmlsZSAmJgorCWdpdCAtLWdpdC1kaXI9Zm9vLmdpdCAtLXdvcmstdHJlZT0uIGFkZCBmaWxlICYmCisJZ2l0IC0tZ2l0LWRpcj1mb28uZ2l0IC0td29yay10cmVlPS4gY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKwllY2hvICJmb28iID4gZm9vLmdpdC9kZXNjcmlwdGlvbiAmJgorCWdpdCBjbG9uZSAtLWJhcmUgZm9vLmdpdCBmb28uYmFyLmdpdCAmJgorCWVjaG8gImZvby5iYXIiID4gZm9vLmJhci5naXQvZGVzY3JpcHRpb24gJiYKKwlnaXQgY2xvbmUgLS1iYXJlIGZvby5naXQgZm9vX2Jhei5naXQgJiYKKwllY2hvICJmb29fYmF6IiA+IGZvb19iYXouZ2l0L2Rlc2NyaXB0aW9uICYmCisJcm0gLWZyICAgZm9vICYmCisJbWtkaXIgLXAgZm9vICYmCisJKAorCQljZCBmb28gJiYKKwkJZ2l0IGNsb25lIC0tc2hhcmVkIC0tYmFyZSAuLi9mb28uZ2l0IGZvby1mb3JrZWQuZ2l0ICYmCisJCWVjaG8gImZvcmsgb2YgZm9vIiA+IGZvby1mb3JrZWQuZ2l0L2Rlc2NyaXB0aW9uCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3Jrczogbm90IHNraXBwZWQgdW5sZXNzICJmb3JrcyIgZmVhdHVyZSBlbmFibGVkJyAnCisJZ2l0d2ViX3J1biAiYT1wcm9qZWN0X2xpc3QiICYmCisJZ3JlcCAtcSAiPlxcLmdpdDwiICAgICAgICAgICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9vXFwuZ2l0PCIgICAgICAgICAgICBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXEgIj5mb29fYmF6XFwuZ2l0PCIgICAgICAgIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvb1xcLmJhclxcLmdpdDwiICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9vX2JhelxcLmdpdDwiICAgICAgICBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXEgIj5mb28vZm9vLWZvcmtlZFxcLmdpdDwiIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvcmsgb2YgLio8IiAgICAgICAgICAgZ2l0d2ViLmJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5hYmxlIGZvcmtzIGZlYXR1cmUnICcKKwljYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDwtXEVPRgorCSRmZWF0dXJleyJmb3JrcyJ9eyJkZWZhdWx0In0gPSBbMV07CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmtzOiBmb3JrcyBza2lwcGVkIGlmICJmb3JrcyIgZmVhdHVyZSBlbmFibGVkJyAnCisJZ2l0d2ViX3J1biAiYT1wcm9qZWN0X2xpc3QiICYmCisJZ3JlcCAtcSAiPlxcLmdpdDwiICAgICAgICAgICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9vXFwuZ2l0PCIgICAgICAgICAgICBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXEgIj5mb29fYmF6XFwuZ2l0PCIgICAgICAgIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvb1xcLmJhclxcLmdpdDwiICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9vX2JhelxcLmdpdDwiICAgICAgICBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXYgIj5mb28vZm9vLWZvcmtlZFxcLmdpdDwiIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtdiAiPmZvcmsgb2YgLio8IiAgICAgICAgICAgZ2l0d2ViLmJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ya3M6ICJmb3JrcyIgYWN0aW9uIGZvciBmb3JrZWQgcmVwb3NpdG9yeScgJworCWdpdHdlYl9ydW4gInA9Zm9vLmdpdDthPWZvcmtzIiAmJgorCWdyZXAgLXEgIj5mb28vZm9vLWZvcmtlZFxcLmdpdDwiIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvcmsgb2YgZm9vPCIgICAgICAgICAgZ2l0d2ViLmJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ya3M6IGNhbiBhY2Nlc3MgZm9ya2VkIHJlcG9zaXRvcnknICcKKwlnaXR3ZWJfcnVuICJwPWZvby9mb28tZm9ya2VkLmdpdDthPXN1bW1hcnkiICYmCisJZ3JlcCAtcSAiMjAwIE9LIiAgICAgICAgZ2l0d2ViLmhlYWRlcnMgJiYKKwlncmVwIC1xICI+Zm9yayBvZiBmb288IiBnaXR3ZWIuYm9keQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JrczogcHJvamVjdF9pbmRleCBsaXN0cyBhbGwgcHJvamVjdHMgKGluY2wuIGZvcmtzKScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCS5naXQKKwlmb28uYmFyLmdpdAorCWZvby5naXQKKwlmb28vZm9vLWZvcmtlZC5naXQKKwlmb29fYmF6LmdpdAorCUVPRgorCWdpdHdlYl9ydW4gImE9cHJvamVjdF9pbmRleCIgJiYKKwlzZWQgLWUgInMvIC4qLy8iIDxnaXR3ZWIuYm9keSB8IHNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit4c3MoKSB7CisJZWNobyA+JjIgIkNoZWNraW5nICQqLi4uIiAmJgorCWdpdHdlYl9ydW4gIiRAIiAmJgorCWlmIGdyZXAgIiRUQUciIGdpdHdlYi5ib2R5OyB0aGVuCisJCWVjaG8gPiYyICJ4c3M6ICRUQUcgc2hvdWxkIGhhdmUgYmVlbiBxdW90ZWQgaW4gb3V0cHV0IgorCQlyZXR1cm4gMQorCWZpCisJcmV0dXJuIDAKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAneHNzIGNoZWNrcycgJworCVRBRz0iPG1hZ2ljLXhzcy10YWc+IiAmJgorCXhzcyAiYT1yc3MmcD0kVEFHIiAmJgorCXhzcyAiYT1yc3MmcD1mb28uZ2l0JmY9JFRBRyIgJiYKKwl4c3MgIiIgIiRUQUcrIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk2MDAtY3ZzaW1wb3J0LnNoIGIvdC90OTYwMC1jdnNpbXBvcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjUxZmRkNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDAtY3ZzaW1wb3J0LnNoCkBAIC0wLDAgKzEsMTY0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGN2c2ltcG9ydCBiYXNpYyB0ZXN0cycKKy4gLi9saWItY3ZzLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBOT1RfUk9PVDsgdGhlbgorCXNraXBfYWxsPSdXaGVuIGN2cyBpcyBjb21waWxlZCB3aXRoIENWU19CQURST09UIGNvbW1pdHMgYXMgcm9vdCBmYWlsJworCXRlc3RfZG9uZQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCBjdnNyb290IGVudmlyb25tZW50JyAnCisJQ1ZTUk9PVD0kKHB3ZCkvY3Zzcm9vdCAmJgorCWV4cG9ydCBDVlNST09UCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2V0dXAgY3Zzcm9vdCcgJyRDVlMgaW5pdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCBhIGN2cyBtb2R1bGUnICcKKworCW1rZGlyICIkQ1ZTUk9PVC9tb2R1bGUiICYmCisJJENWUyBjbyAtZCBtb2R1bGUtY3ZzIG1vZHVsZSAmJgorCShjZCBtb2R1bGUtY3ZzICYmCisJY2F0IDw8RU9GID5vX2ZvcnR1bmEgJiYKK08gRm9ydHVuYQordmVsdXQgbHVuYQorc3RhdHUgdmFyaWFiaWxpcywKKworc2VtcGVyIGNyZXNjaXMKK2F1dCBkZWNyZXNjaXM7Cit2aXRhIGRldGVzdGFiaWxpcworCitudW5jIG9iZHVyYXQKK2V0IHR1bmMgY3VyYXQKK2x1ZG8gbWVudGlzIGFjaWVtLAorCitlZ2VzdGF0ZW0sCitwb3Rlc3RhdGVtCitkaXNzb2x2aXQgdXQgZ2xhY2llbS4KK0VPRgorCSRDVlMgYWRkIG9fZm9ydHVuYSAmJgorCWNhdCA8PEVPRiA+bWVzc2FnZSAmJgorYWRkICJPIEZvcnR1bmEiIGx5cmljcworCitUaGVzZSBwdWJsaWMgZG9tYWluIGx5cmljcyBtYWtlIGFuIGV4Y2VsbGVudCBzYW1wbGUgdGV4dC4KK0VPRgorCSRDVlMgY29tbWl0IC1GIG1lc3NhZ2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnaW1wb3J0IGEgdHJpdmlhbCBtb2R1bGUnICcKKworCWdpdCBjdnNpbXBvcnQgLWEgLVIgLXogMCAtQyBtb2R1bGUtZ2l0IG1vZHVsZSAmJgorCXRlc3RfY21wIG1vZHVsZS1jdnMvb19mb3J0dW5hIG1vZHVsZS1naXQvb19mb3J0dW5hCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdwYWNrIHJlZnMnICcoY2QgbW9kdWxlLWdpdCAmJiBnaXQgZ2MpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2luaXRpYWwgaW1wb3J0IGhhcyBjb3JyZWN0IC5naXQvY3ZzLXJldmlzaW9ucycgJworCisJKGNkIG1vZHVsZS1naXQgJiYKKwkgZ2l0IGxvZyAtLWZvcm1hdD0ib19mb3J0dW5hIDEuMSAlSCIgLTEpID4gZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBtb2R1bGUtZ2l0Ly5naXQvY3ZzLXJldmlzaW9ucworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3VwZGF0ZSBjdnMgbW9kdWxlJyAnCisJKGNkIG1vZHVsZS1jdnMgJiYKKwljYXQgPDxFT0YgPm9fZm9ydHVuYSAmJgorTyBGb3J0dW5lLAorbGlrZSB0aGUgbW9vbgoreW91IGFyZSBjaGFuZ2VhYmxlLAorCitldmVyIHdheGluZworYW5kIHdhbmluZzsKK2hhdGVmdWwgbGlmZQorCitmaXJzdCBvcHByZXNzZXMKK2FuZCB0aGVuIHNvb3RoZXMKK2FzIGZhbmN5IHRha2VzIGl0OworCitwb3ZlcnR5CithbmQgcG93ZXIKK2l0IG1lbHRzIHRoZW0gbGlrZSBpY2UuCitFT0YKKwljYXQgPDxFT0YgPm1lc3NhZ2UgJiYKK3RyYW5zbGF0ZSB0byBFbmdsaXNoCisKK015IExhdGluIGlzIHRlcnJpYmxlLgorRU9GCisJJENWUyBjb21taXQgLUYgbWVzc2FnZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICd1cGRhdGUgZ2l0IG1vZHVsZScgJworCisJKGNkIG1vZHVsZS1naXQgJiYKKwlnaXQgY29uZmlnIGN2c2ltcG9ydC50cmFja1JldmlzaW9ucyB0cnVlICYmCisJZ2l0IGN2c2ltcG9ydCAtYSAteiAwIG1vZHVsZSAmJgorCWdpdCBtZXJnZSBvcmlnaW4KKwkpICYmCisJdGVzdF9jbXAgbW9kdWxlLWN2cy9vX2ZvcnR1bmEgbW9kdWxlLWdpdC9vX2ZvcnR1bmEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3VwZGF0ZSBoYXMgY29ycmVjdCAuZ2l0L2N2cy1yZXZpc2lvbnMnICcKKworCShjZCBtb2R1bGUtZ2l0ICYmCisJIGdpdCBsb2cgLS1mb3JtYXQ9Im9fZm9ydHVuYSAxLjEgJUgiIC0xIEhFQUReICYmCisJIGdpdCBsb2cgLS1mb3JtYXQ9Im9fZm9ydHVuYSAxLjIgJUgiIC0xIEhFQUQpID4gZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBtb2R1bGUtZ2l0Ly5naXQvY3ZzLXJldmlzaW9ucworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3VwZGF0ZSBjdnMgbW9kdWxlJyAnCisKKwkoY2QgbW9kdWxlLWN2cyAmJgorCQllY2hvIDEgPnRpY2sgJiYKKwkJJENWUyBhZGQgdGljayAmJgorCQkkQ1ZTIGNvbW1pdCAtbSAxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2N2c2ltcG9ydC5tb2R1bGUgY29uZmlnIHdvcmtzJyAnCisKKwkoY2QgbW9kdWxlLWdpdCAmJgorCQlnaXQgY29uZmlnIGN2c2ltcG9ydC5tb2R1bGUgbW9kdWxlICYmCisJCWdpdCBjb25maWcgY3ZzaW1wb3J0LnRyYWNrUmV2aXNpb25zIHRydWUgJiYKKwkJZ2l0IGN2c2ltcG9ydCAtYSAtejAgJiYKKwkJZ2l0IG1lcmdlIG9yaWdpbgorCSkgJiYKKwl0ZXN0X2NtcCBtb2R1bGUtY3ZzL3RpY2sgbW9kdWxlLWdpdC90aWNrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZWNvbmQgdXBkYXRlIGhhcyBjb3JyZWN0IC5naXQvY3ZzLXJldmlzaW9ucycgJworCisJKGNkIG1vZHVsZS1naXQgJiYKKwkgZ2l0IGxvZyAtLWZvcm1hdD0ib19mb3J0dW5hIDEuMSAlSCIgLTEgSEVBRF5eICYmCisJIGdpdCBsb2cgLS1mb3JtYXQ9Im9fZm9ydHVuYSAxLjIgJUgiIC0xIEhFQUReICYmCisJIGdpdCBsb2cgLS1mb3JtYXQ9InRpY2sgMS4xICVIIiAtMSBIRUFEKSA+IGV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgbW9kdWxlLWdpdC8uZ2l0L2N2cy1yZXZpc2lvbnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdpbXBvcnQgZnJvbSBhIENWUyB3b3JraW5nIHRyZWUnICcKKworCSRDVlMgY28gLWQgaW1wb3J0LWZyb20td3QgbW9kdWxlICYmCisJKGNkIGltcG9ydC1mcm9tLXd0ICYmCisJCWdpdCBjb25maWcgY3ZzaW1wb3J0LnRyYWNrUmV2aXNpb25zIGZhbHNlICYmCisJCWdpdCBjdnNpbXBvcnQgLWEgLXowICYmCisJCWVjaG8gMSA+ZXhwZWN0ICYmCisJCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzJW4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnbm8gLmdpdC9jdnMtcmV2aXNpb25zIGNyZWF0ZWQgYnkgZGVmYXVsdCcgJworCisJISB0ZXN0IC1lIGltcG9ydC1mcm9tLXd0Ly5naXQvY3ZzLXJldmlzaW9ucworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAndGVzdCBlbnRpcmUgSEVBRCcgJ3Rlc3RfY21wX2JyYW5jaF90cmVlIG1hc3RlcicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NjAxLWN2c2ltcG9ydC12ZW5kb3ItYnJhbmNoLnNoIGIvdC90OTYwMS1jdnNpbXBvcnQtdmVuZG9yLWJyYW5jaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MjdkMzlmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS1jdnNpbXBvcnQtdmVuZG9yLWJyYW5jaC5zaApAQCAtMCwwICsxLDg1IEBACisjIS9iaW4vc2gKKworIyBEZXNjcmlwdGlvbiBvZiB0aGUgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnk6CisjCisjICAgIGltcG9ydGVkLW9uY2UudHh0OgorIworIyAgICAgICBJbXBvcnRlZCBvbmNlLiAgMS4xIGFuZCAxLjEuMS4xIHNob3VsZCBiZSBpZGVudGljYWwuCisjCisjICAgIGltcG9ydGVkLXR3aWNlLnR4dDoKKyMKKyMgICAgICAgSW1wb3J0ZWQgdHdpY2UuICBIRUFEIHNob3VsZCByZWZsZWN0IHRoZSBjb250ZW50cyBvZiB0aGUKKyMgICAgICAgc2Vjb25kIGltcG9ydCAoaS5lLiwgaGF2ZSB0aGUgc2FtZSBjb250ZW50cyBhcyAxLjEuMS4yKS4KKyMKKyMgICAgaW1wb3J0ZWQtbW9kaWZpZWQudHh0OgorIworIyAgICAgICBJbXBvcnRlZCwgdGhlbiBtb2RpZmllZCBvbiBIRUFELiAgSEVBRCBzaG91bGQgcmVmbGVjdCB0aGUKKyMgICAgICAgbW9kaWZpY2F0aW9uLgorIworIyAgICBpbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQ6CisjCisjICAgICAgIEltcG9ydGVkLCB0aGVuIG1vZGlmaWVkIG9uIEhFQUQsIHRoZW4gaW1wb3J0ZWQgYWdhaW4uCisjCisjICAgIGFkZGVkLWltcG9ydGVkLnR4dCx2OgorIworIyAgICAgICBBZGRlZCB3aXRoICdjdnMgYWRkJyB0byBjcmVhdGUgMS4xLCB0aGVuIGltcG9ydGVkIHdpdGgKKyMgICAgICAgY29tcGxldGVseSBkaWZmZXJlbnQgY29udGVudHMgdG8gY3JlYXRlIDEuMS4xLjEsIHRoZXJlZm9yZSB0aGUKKyMgICAgICAgdmVuZG9yIGJyYW5jaCB3YXMgbmV2ZXIgdGhlIGRlZmF1bHQgYnJhbmNoLgorIworIyAgICBpbXBvcnRlZC1hbm9ueW1vdXNseS50eHQ6CisjCisjICAgICAgIExpa2UgaW1wb3J0ZWQtdHdpY2UudHh0LCBidXQgd2l0aCBhIHZlbmRvciBicmFuY2ggd2hvc2UgYnJhbmNoCisjICAgICAgIHRhZyBoYXMgYmVlbiByZW1vdmVkLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY3ZzaW1wb3J0IGhhbmRsaW5nIG9mIHZlbmRvciBicmFuY2hlcycKKy4gLi9saWItY3ZzLnNoCisKK3NldHVwX2N2c190ZXN0X3JlcG9zaXRvcnkgdDk2MDEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdpbXBvcnQgYSBtb2R1bGUgd2l0aCBhIHZlbmRvciBicmFuY2gnICcKKworCWdpdCBjdnNpbXBvcnQgLUMgbW9kdWxlLWdpdCBtb2R1bGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NoZWNrIEhFQUQgb3V0IG9mIGN2cyByZXBvc2l0b3J5JyAndGVzdF9jdnNfY28gbWFzdGVyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NoZWNrIG1hc3RlciBvdXQgb2YgZ2l0IHJlcG9zaXRvcnknICd0ZXN0X2dpdF9jbyBtYXN0ZXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY2hlY2sgYSBmaWxlIHRoYXQgd2FzIGltcG9ydGVkIG9uY2UnICcKKworCXRlc3RfY21wX2JyYW5jaF9maWxlIG1hc3RlciBpbXBvcnRlZC1vbmNlLnR4dAorCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUEVSTCAnY2hlY2sgYSBmaWxlIHRoYXQgd2FzIGltcG9ydGVkIHR3aWNlJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfZmlsZSBtYXN0ZXIgaW1wb3J0ZWQtdHdpY2UudHh0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjaGVjayBhIGZpbGUgdGhhdCB3YXMgaW1wb3J0ZWQgdGhlbiBtb2RpZmllZCBvbiBIRUFEJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfZmlsZSBtYXN0ZXIgaW1wb3J0ZWQtbW9kaWZpZWQudHh0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjaGVjayBhIGZpbGUgdGhhdCB3YXMgaW1wb3J0ZWQsIG1vZGlmaWVkLCB0aGVuIGltcG9ydGVkIGFnYWluJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfZmlsZSBtYXN0ZXIgaW1wb3J0ZWQtbW9kaWZpZWQtaW1wb3J0ZWQudHh0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjaGVjayBhIGZpbGUgdGhhdCB3YXMgYWRkZWQgdG8gSEVBRCB0aGVuIGltcG9ydGVkJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfZmlsZSBtYXN0ZXIgYWRkZWQtaW1wb3J0ZWQudHh0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdhIHZlbmRvciBicmFuY2ggd2hvc2UgdGFnIGhhcyBiZWVuIHJlbW92ZWQnICcKKworCXRlc3RfY21wX2JyYW5jaF9maWxlIG1hc3RlciBpbXBvcnRlZC1hbm9ueW1vdXNseS50eHQKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk2MDEvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcyBiL3QvdDk2MDEvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjJiMTJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS9jdnNyb290Ly5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEgQEAKKyogLXdoaXRlc3BhY2UKZGlmZiAtLWdpdCBhL3QvdDk2MDEvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUgYi90L3Q5NjAxL2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjliMzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAxL2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAoraGlzdG9yeQordmFsLXRhZ3MKZGlmZiAtLWdpdCBhL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvYWRkZWQtaW1wb3J0ZWQudHh0LHYgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2FkZGVkLWltcG9ydGVkLnR4dCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmODMwNzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2FkZGVkLWltcG9ydGVkLnR4dCx2CkBAIC0wLDAgKzEsNDQgQEAKK2hlYWQJMS4xOworYWNjZXNzOworc3ltYm9scworCXZ0YWctNDoxLjEuMS4xCisJdmJyYW5jaEE6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjE1OwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjE2OwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4xCitsb2cKK0BBZGQgYSBmaWxlIHRvIHRoZSB3b3JraW5nIGNvcHkuCitACit0ZXh0CitAQWRkaW5nIHRoaXMgZmlsZSwgYmVmb3JlIGltcG9ydGluZyBpdCB3aXRoIGRpZmZlcmVudCBjb250ZW50cy4KK0AKKworCisxLjEuMS4xCitsb2cKK0BJbXBvcnQgKHZicmFuY2hBLCB2dGFnLTQpLgorQAordGV4dAorQGQxIDEKK2ExIDEKK1RoaXMgaXMgdnRhZy00IChvbiB2YnJhbmNoQSkgb2YgYWRkZWQtdGhlbi1pbXBvcnRlZC50eHQuCitACisKZGlmZiAtLWdpdCBhL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtYW5vbnltb3VzbHkudHh0LHYgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLWFub255bW91c2x5LnR4dCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZTFiMGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLWFub255bW91c2x5LnR4dCx2CkBAIC0wLDAgKzEsNDIgQEAKK2hlYWQJMS4xOworYnJhbmNoCTEuMS4xOworYWNjZXNzOworc3ltYm9scworCXZ0YWctMToxLjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQFRoaXMgaXMgdnRhZy0xIChvbiB2YnJhbmNoQSkgb2YgaW1wb3J0ZWQtYW5vbnltb3VzbHkudHh0LgorQAorCisKKzEuMS4xLjEKK2xvZworQEltcG9ydCAodmJyYW5jaEEsIHZ0YWctMSkuCitACit0ZXh0CitAQAorCisKZGlmZiAtLWdpdCBhL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtbW9kaWZpZWQtaW1wb3J0ZWQudHh0LHYgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLW1vZGlmaWVkLWltcG9ydGVkLnR4dCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ODMwYWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLW1vZGlmaWVkLWltcG9ydGVkLnR4dCx2CkBAIC0wLDAgKzEsNzYgQEAKK2hlYWQJMS4yOworYWNjZXNzOworc3ltYm9scworCXZ0YWctMjoxLjEuMS4yCisJdnRhZy0xOjEuMS4xLjEKKwl2YnJhbmNoQToxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4yCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTQ7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xLjEuMjsKKworMS4xLjEuMgorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4yCitsb2cKK0BGaXJzdCByZWd1bGFyIGNvbW1pdCwgdG8gaW1wb3J0ZWQtbW9kaWZpZWQtaW1wb3J0ZWQudHh0LCBvbiBIRUFELgorQAordGV4dAorQFRoaXMgaXMgYSBtb2RpZmljYXRpb24gb2YgaW1wb3J0ZWQtbW9kaWZpZWQtaW1wb3J0ZWQudHh0IG9uIEhFQUQuCitJdCBzaG91bGQgc3VwZXJzZWRlIHRoZSB2ZXJzaW9uIGZyb20gdGhlIHZlbmRvciBicmFuY2guCitACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAZDEgMgorYTIgMQorVGhpcyBpcyB2dGFnLTEgKG9uIHZicmFuY2hBKSBvZiBpbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQuCitACisKKworMS4xLjEuMQorbG9nCitASW1wb3J0ICh2YnJhbmNoQSwgdnRhZy0xKS4KK0AKK3RleHQKK0BACisKKworMS4xLjEuMgorbG9nCitASW1wb3J0ICh2YnJhbmNoQSwgdnRhZy0yKS4KK0AKK3RleHQKK0BkMSAxCithMSAxCitUaGlzIGlzIHZ0YWctMiAob24gdmJyYW5jaEEpIG9mIGltcG9ydGVkLW1vZGlmaWVkLWltcG9ydGVkLnR4dC4KK0AKKworCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLW1vZGlmaWVkLnR4dCx2IGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1tb2RpZmllZC50eHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmNmZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1tb2RpZmllZC50eHQsdgpAQCAtMCwwICsxLDU5IEBACitoZWFkCTEuMjsKK2FjY2VzczsKK3N5bWJvbHMKKwl2dGFnLTE6MS4xLjEuMQorCXZicmFuY2hBOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjIKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xNDsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjIKK2xvZworQENvbW1pdCBvbiBIRUFELgorQAordGV4dAorQFRoaXMgaXMgYSBtb2RpZmljYXRpb24gb2YgaW1wb3J0ZWQtbW9kaWZpZWQudHh0IG9uIEhFQUQuCitJdCBzaG91bGQgc3VwZXJzZWRlIHRoZSB2ZXJzaW9uIGZyb20gdGhlIHZlbmRvciBicmFuY2guCitACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAZDEgMgorYTIgMQorVGhpcyBpcyB2dGFnLTEgKG9uIHZicmFuY2hBKSBvZiBpbXBvcnRlZC1tb2RpZmllZC50eHQuCitACisKKworMS4xLjEuMQorbG9nCitASW1wb3J0ICh2YnJhbmNoQSwgdnRhZy0xKS4KK0AKK3RleHQKK0BACisKKwpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1vbmNlLnR4dCx2IGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1vbmNlLnR4dCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZGQ4MmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLW9uY2UudHh0LHYKQEAgLTAsMCArMSw0MyBAQAoraGVhZAkxLjE7CiticmFuY2gJMS4xLjE7CithY2Nlc3M7CitzeW1ib2xzCisJdnRhZy0xOjEuMS4xLjEKKwl2YnJhbmNoQToxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BUaGlzIGlzIHZ0YWctMSAob24gdmJyYW5jaEEpIG9mIGltcG9ydGVkLW9uY2UudHh0LgorQAorCisKKzEuMS4xLjEKK2xvZworQEltcG9ydCAodmJyYW5jaEEsIHZ0YWctMSkuCitACit0ZXh0CitAQAorCisKZGlmZiAtLWdpdCBhL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtdHdpY2UudHh0LHYgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLXR3aWNlLnR4dCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZjNmMWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLXR3aWNlLnR4dCx2CkBAIC0wLDAgKzEsNjAgQEAKK2hlYWQJMS4xOworYnJhbmNoCTEuMS4xOworYWNjZXNzOworc3ltYm9scworCXZ0YWctMjoxLjEuMS4yCisJdnRhZy0xOjEuMS4xLjEKKwl2YnJhbmNoQToxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjEuMS4yOworCisxLjEuMS4yCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BUaGlzIGlzIHZ0YWctMSAob24gdmJyYW5jaEEpIG9mIGltcG9ydGVkLXR3aWNlLnR4dC4KK0AKKworCisxLjEuMS4xCitsb2cKK0BJbXBvcnQgKHZicmFuY2hBLCB2dGFnLTEpLgorQAordGV4dAorQEAKKworCisxLjEuMS4yCitsb2cKK0BJbXBvcnQgKHZicmFuY2hBLCB2dGFnLTIpLgorQAordGV4dAorQGQxIDEKK2ExIDEKK1RoaXMgaXMgdnRhZy0yIChvbiB2YnJhbmNoQSkgb2YgaW1wb3J0ZWQtdHdpY2UudHh0LgorQAorCisKZGlmZiAtLWdpdCBhL3QvdDk2MDItY3ZzaW1wb3J0LWJyYW5jaGVzLXRhZ3Muc2ggYi90L3Q5NjAyLWN2c2ltcG9ydC1icmFuY2hlcy10YWdzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUxZGIzMjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyLWN2c2ltcG9ydC1icmFuY2hlcy10YWdzLnNoCkBAIC0wLDAgKzEsNzggQEAKKyMhL2Jpbi9zaAorCisjIEEgZGVzY3JpcHRpb24gb2YgdGhlIHJlcG9zaXRvcnkgdXNlZCBmb3IgdGhpcyB0ZXN0IGNhbiBiZSBmb3VuZCBpbgorIyB0OTYwMi9SRUFETUUuCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjdnNpbXBvcnQgaGFuZGxpbmcgb2YgYnJhbmNoZXMgYW5kIHRhZ3MnCisuIC4vbGliLWN2cy5zaAorCitzZXR1cF9jdnNfdGVzdF9yZXBvc2l0b3J5IHQ5NjAyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnaW1wb3J0IG1vZHVsZScgJworCisJZ2l0IGN2c2ltcG9ydCAtQyBtb2R1bGUtZ2l0IG1vZHVsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAndGVzdCBicmFuY2ggbWFzdGVyJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfdHJlZSBtYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3Rlc3QgYnJhbmNoIHZlbmRvcmJyYW5jaCcgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgdmVuZG9yYnJhbmNoCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBQRVJMICd0ZXN0IGJyYW5jaCBCX0ZST01fSU5JVElBTFMnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIEJfRlJPTV9JTklUSUFMUworCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUEVSTCAndGVzdCBicmFuY2ggQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkUnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIEJfRlJPTV9JTklUSUFMU19CVVRfT05FCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBQRVJMICd0ZXN0IGJyYW5jaCBCX01JWEVEJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfdHJlZSBCX01JWEVECisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICd0ZXN0IGJyYW5jaCBCX1NQTElUJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfdHJlZSBCX1NQTElUCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBQRVJMICd0ZXN0IHRhZyB2ZW5kb3J0YWcnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIHZlbmRvcnRhZworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAndGVzdCB0YWcgVF9BTExfSU5JVElBTF9GSUxFUycgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgVF9BTExfSU5JVElBTF9GSUxFUworCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUEVSTCAndGVzdCB0YWcgVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfdHJlZSBUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkUKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFBFUkwgJ3Rlc3QgdGFnIFRfTUlYRUQnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIFRfTUlYRUQKKworJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTYwMi9SRUFETUUgYi90L3Q5NjAyL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjMxZTBmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9SRUFETUUKQEAgLTAsMCArMSw2MiBAQAorVGhpcyByZXBvc2l0b3J5IGlzIGZvciB0ZXN0aW5nIHRoZSBhYmlsaXR5IHRvIGdyb3VwIHJldmlzaW9ucworY29ycmVjdGx5IGFsb25nIHRhZ3MgYW5kIGJyYW5jaGVzLiAgSGVyZSBpcyBpdHMgaGlzdG9yeToKKworICAxLiAgVGhlIGluaXRpYWwgaW1wb3J0IChyZXZpc2lvbiAxLjEgb2YgZXZlcnlib2R5KSBjcmVhdGVkIGEKKyAgICAgIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2l0aCBhIGZpbGUgbmFtZWQgYGRlZmF1bHQnIGluIGVhY2ggZGlyOgorCisgICAgICAgICAgICAuLworICAgICAgICAgICAgICBkZWZhdWx0CisgICAgICAgICAgICAgIHN1YjEvZGVmYXVsdAorICAgICAgICAgICAgICAgICAgIHN1YnN1YkEvZGVmYXVsdAorICAgICAgICAgICAgICAgICAgIHN1YnN1YkIvZGVmYXVsdAorICAgICAgICAgICAgICBzdWIyL2RlZmF1bHQKKyAgICAgICAgICAgICAgICAgICBzdWJzdWJBL2RlZmF1bHQKKyAgICAgICAgICAgICAgc3ViMy9kZWZhdWx0CisKKyAgMi4gIFRoZW4gdGFnZ2VkIGV2ZXJ5b25lIHdpdGggVF9BTExfSU5JVElBTF9GSUxFUy4KKworICAzLiAgVGhlbiB0YWdnZWQgZXZlcnlvbmUgZXhjZXB0IHN1YjEvc3Vic3ViQi9kZWZhdWx0IHdpdGgKKyAgICAgIFRfQUxMX0lOSVRJQUxfRklMRVNfQlVUX09ORS4KKworICA0LiAgVGhlbiBjcmVhdGVkIGJyYW5jaCBCX0ZST01fSU5JVElBTFMgb24gZXZlcnlvbmUuCisKKyAgNS4gIFRoZW4gY3JlYXRlZCBicmFuY2ggQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkUgb24gZXZlcnlvbmUgZXhjZXB0CisgICAgICAvc3ViMS9zdWJzdWJCL2RlZmF1bHQuCisKKyAgNi4gIFRoZW4gY29tbWl0dGVkIG1vZGlmaWNhdGlvbnMgdG8gdHdvIGZpbGVzOiBzdWIzL2RlZmF1bHQsIGFuZAorICAgICAgc3ViMS9zdWJzdWJBL2RlZmF1bHQuCisKKyAgNy4gIFRoZW4gY29tbWl0dGVkIGEgbW9kaWZpY2F0aW9uIHRvIGFsbCA3IGZpbGVzLgorCisgIDguICBUaGVuIGJhY2tkYXRlZCBzdWIzL2RlZmF1bHQgdG8gcmV2aXNpb24gMS4yLCBhbmQKKyAgICAgIHN1YjIvc3Vic3ViQS9kZWZhdWx0IHRvIHJldmlzaW9uIDEuMSwgYW5kIHRhZ2dlZCB3aXRoIFRfTUlYRUQuCisKKyAgOS4gIFNhbWUgYXMgOCwgYnV0IHRhZ2dlZCB3aXRoIC1iIHRvIGNyZWF0ZSBicmFuY2ggQl9NSVhFRC4KKworICAxMC4gU3dpdGNoZWQgdGhlIHdvcmtpbmcgY29weSB0byBCX01JWEVELCBhbmQgYWRkZWQKKyAgICAgIHN1YjIvYnJhbmNoX0JfTUlYRURfb25seS4gIChUaGF0J3Mgd2h5IHRoZSBSQ1MgZmlsZSBpcyBpbgorICAgICAgc3ViMi9BdHRpYy8gLS0gaXQgbmV2ZXIgZXhpc3RlZCBvbiB0cnVuay4pCisKKyAgMTEuIEluIG9uZSBjb21taXQsIG1vZGlmaWVkIGRlZmF1bHQsIHN1YjEvZGVmYXVsdCwgYW5kCisgICAgICBzdWIyL3N1YnN1YkEvZGVmYXVsdCwgb24gYnJhbmNoIEJfTUlYRUQuCisKKyAgMTIuIERpZCAiY3ZzIHVwIC1BIiBvbiBzdWIyL2RlZmF1bHQsIHRoZW4gaW4gb25lIGNvbW1pdCwgbWFkZSBhCisgICAgICBjaGFuZ2UgdG8gc3ViMi9kZWZhdWx0IGFuZCBzdWIyL2JyYW5jaF9CX01JWEVEX29ubHkuICBTbyB0aGlzCisgICAgICBjb21taXQgc2hvdWxkIGJlIHNwcmVhZCBiZXR3ZWVuIHRoZSBicmFuY2ggYW5kIHRoZSB0cnVuay4KKworICAxMy4gRG8gImN2cyB1cCAtQSIgdG8gZ2V0IGV2ZXJ5b25lIGJhY2sgdG8gdHJ1bmssIHRoZW4gbWFrZSBhIG5ldworICAgICAgYnJhbmNoIEJfU1BMSVQgb24gZXZlcnlvbmUgZXhjZXB0IHN1YjEvc3Vic3ViQi9kZWZhdWx0LHYuCisKKyAgMTQuIFN3aXRjaCB0byBicmFuY2ggQl9TUExJVCAoc2VlIHN1YjEvc3Vic3ViQi9kZWZhdWx0IGRpc2FwcGVhcikKKyAgICAgIGFuZCBjb21taXQgYSBjaGFuZ2UgdGhhdCBhZmZlY3RzIGV2ZXJ5b25lIGV4Y2VwdCBzdWIzL2RlZmF1bHQuCisKKyAgMTUuIEFuIGhvdXIgb3Igc28gbGF0ZXIsICJjdnMgdXAgLUEiIHRvIGdldCBzdWIxL3N1YnN1YkIvZGVmYXVsdAorICAgICAgYmFjaywgdGhlbiBjb21taXQgYSBjaGFuZ2Ugb24gdGhhdCBmaWxlLCBvbiB0cnVuay4gIChJdCdzCisgICAgICBpbXBvcnRhbnQgdGhhdCB0aGlzIGNoYW5nZSBoYXBwZW5lZCBhZnRlciB0aGUgcHJldmlvdXMgY29tbWl0cworICAgICAgb24gQl9TUExJVC4pCisKKyAgMTYuIEJyYW5jaCBzdWIxL3N1YnN1YkIvZGVmYXVsdCB0byBCX1NQTElULCB0aGVuICJjdnMgdXAgLXIgQl9TUExJVCIKKyAgICAgIHRvIHN3aXRjaCB0aGUgd2hvbGUgd29ya2luZyBjb3B5IHRvIHRoZSBicmFuY2guCisKKyAgMTcuIENvbW1pdCBhIGNoYW5nZSBvbiBCX1NQTElULCB0byBzdWIxL3N1YnN1YkIvZGVmYXVsdCBhbmQKKyAgICAgIHN1YjMvZGVmYXVsdC4KZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcyBiL3QvdDk2MDIvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjJiMTJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290Ly5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEgQEAKKyogLXdoaXRlc3BhY2UKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUgYi90L3Q5NjAyL2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjliMzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAoraGlzdG9yeQordmFsLXRhZ3MKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvZGVmYXVsdCx2IGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9kZWZhdWx0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2ODM4MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvZGVmYXVsdCx2CkBAIC0wLDAgKzEsMTAyIEBACitoZWFkCTEuMjsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX1NQTElUOjEuMi4wLjQKKwlCX01JWEVEOjEuMi4wLjIKKwlUX01JWEVEOjEuMgorCUJfRlJPTV9JTklUSUFMU19CVVRfT05FOjEuMS4xLjEuMC40CisJQl9GUk9NX0lOSVRJQUxTOjEuMS4xLjEuMC4yCisJVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FOjEuMS4xLjEKKwlUX0FMTF9JTklUSUFMX0ZJTEVTOjEuMS4xLjEKKwl2ZW5kb3J0YWc6MS4xLjEuMQorCXZlbmRvcmJyYW5jaDoxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4yCitkYXRlCTIwMDMuMDUuMjMuMDAuMTcuNTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMi4yLjEKKwkxLjIuNC4xOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMi4yLjEKK2RhdGUJMjAwMy4wNS4yMy4wMC4zMS4zNjsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMi40LjEKK2RhdGUJMjAwMy4wNi4wMy4wMy4yMC4zMTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjIKK2xvZworQFNlY29uZCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIGFsbCA3IGZpbGVzLgorQAordGV4dAorQFRoaXMgaXMgdGhlIGZpbGUgYGRlZmF1bHQnIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHByb2plY3QuCisKK0V2ZXJ5IGRpcmVjdG9yeSBpbiB0aGUgYHByb2onIHByb2plY3QgaGFzIGEgZmlsZSBuYW1lZCBgZGVmYXVsdCcuCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgaW4gdGhlIHNlY29uZCBjb21taXQgKGFmZmVjdGluZyBhbGwgNyBmaWxlcykuCitACisKKworMS4yLjQuMQorbG9nCitARmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorCitUaGlzIGNoYW5nZSBleGNsdWRlcyBzdWIzL2RlZmF1bHQsIGJlY2F1c2UgaXQgd2FzIG5vdCBwYXJ0IG9mIHRoaXMKK2NvbW1pdCwgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCB3aGljaCBpcyBub3QgZXZlbiBvbiB0aGUgYnJhbmNoIHlldC4KK0AKK3RleHQKK0BhNSAyCisKK0ZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KK0AKKworCisxLjIuMi4xCitsb2cKK0BNb2RpZnkgdGhyZWUgZmlsZXMsIG9uIGJyYW5jaCBCX01JWEVELgorQAordGV4dAorQGE1IDIKKworVGhpcyBsaW5lIHdhcyBhZGRlZCBvbiBicmFuY2ggQl9NSVhFRCBvbmx5IChhZmZlY3RpbmcgMyBmaWxlcykuCitACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAZDQgMgorQAorCisKKzEuMS4xLjEKK2xvZworQEluaXRpYWwgaW1wb3J0LgorQAordGV4dAorQEAKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9kZWZhdWx0LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvZGVmYXVsdCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZmRjY2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvZGVmYXVsdCx2CkBAIC0wLDAgKzEsMTAyIEBACitoZWFkCTEuMjsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX1NQTElUOjEuMi4wLjQKKwlCX01JWEVEOjEuMi4wLjIKKwlUX01JWEVEOjEuMgorCUJfRlJPTV9JTklUSUFMU19CVVRfT05FOjEuMS4xLjEuMC40CisJQl9GUk9NX0lOSVRJQUxTOjEuMS4xLjEuMC4yCisJVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FOjEuMS4xLjEKKwlUX0FMTF9JTklUSUFMX0ZJTEVTOjEuMS4xLjEKKwl2ZW5kb3J0YWc6MS4xLjEuMQorCXZlbmRvcmJyYW5jaDoxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4yCitkYXRlCTIwMDMuMDUuMjMuMDAuMTcuNTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMi4yLjEKKwkxLjIuNC4xOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMi4yLjEKK2RhdGUJMjAwMy4wNS4yMy4wMC4zMS4zNjsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMi40LjEKK2RhdGUJMjAwMy4wNi4wMy4wMy4yMC4zMTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjIKK2xvZworQFNlY29uZCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIGFsbCA3IGZpbGVzLgorQAordGV4dAorQFRoaXMgaXMgc3ViMS9kZWZhdWx0LgorCitFdmVyeSBkaXJlY3RvcnkgaW4gdGhlIGBwcm9qJyBwcm9qZWN0IGhhcyBhIGZpbGUgbmFtZWQgYGRlZmF1bHQnLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGluIHRoZSBzZWNvbmQgY29tbWl0IChhZmZlY3RpbmcgYWxsIDcgZmlsZXMpLgorQAorCisKKzEuMi40LjEKK2xvZworQEZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KKworVGhpcyBjaGFuZ2UgZXhjbHVkZXMgc3ViMy9kZWZhdWx0LCBiZWNhdXNlIGl0IHdhcyBub3QgcGFydCBvZiB0aGlzCitjb21taXQsIGFuZCBzdWIxL3N1YnN1YkIvZGVmYXVsdCwgd2hpY2ggaXMgbm90IGV2ZW4gb24gdGhlIGJyYW5jaCB5ZXQuCitACit0ZXh0CitAYTUgMgorCitGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCitACisKKworMS4yLjIuMQorbG9nCitATW9kaWZ5IHRocmVlIGZpbGVzLCBvbiBicmFuY2ggQl9NSVhFRC4KK0AKK3RleHQKK0BhNSAyCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgb24gYnJhbmNoIEJfTUlYRUQgb25seSAoYWZmZWN0aW5nIDMgZmlsZXMpLgorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQ0IDIKK0AKKworCisxLjEuMS4xCitsb2cKK0BJbml0aWFsIGltcG9ydC4KK0AKK3RleHQKK0BACmRpZmYgLS1naXQgYS90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvc3Vic3ViQS9kZWZhdWx0LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvc3Vic3ViQS9kZWZhdWx0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyYjdiMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9zdWJzdWJBL2RlZmF1bHQsdgpAQCAtMCwwICsxLDEwMSBAQAoraGVhZAkxLjM7CithY2Nlc3M7CitzeW1ib2xzCisJQl9TUExJVDoxLjMuMC40CisJQl9NSVhFRDoxLjMuMC4yCisJVF9NSVhFRDoxLjMKKwlCX0ZST01fSU5JVElBTFNfQlVUX09ORToxLjEuMS4xLjAuNAorCUJfRlJPTV9JTklUSUFMUzoxLjEuMS4xLjAuMgorCVRfQUxMX0lOSVRJQUxfRklMRVNfQlVUX09ORToxLjEuMS4xCisJVF9BTExfSU5JVElBTF9GSUxFUzoxLjEuMS4xCisJdmVuZG9ydGFnOjEuMS4xLjEKKwl2ZW5kb3JicmFuY2g6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMworZGF0ZQkyMDAzLjA1LjIzLjAwLjE3LjUzOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjMuNC4xOworbmV4dAkxLjI7CisKKzEuMgorZGF0ZQkyMDAzLjA1LjIzLjAwLjE1LjI2OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4zLjQuMQorZGF0ZQkyMDAzLjA2LjAzLjAzLjIwLjMxOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMworbG9nCitAU2Vjb25kIGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgYWxsIDcgZmlsZXMuCitACit0ZXh0CitAVGhpcyBpcyBzdWIxL3N1YnN1YkEvZGVmYXVsdC4KKworRXZlcnkgZGlyZWN0b3J5IGluIHRoZSBgcHJvaicgcHJvamVjdCBoYXMgYSBmaWxlIG5hbWVkIGBkZWZhdWx0Jy4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBieSB0aGUgZmlyc3QgY29tbWl0IChhZmZlY3RpbmcgdHdvIGZpbGVzKS4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBpbiB0aGUgc2Vjb25kIGNvbW1pdCAoYWZmZWN0aW5nIGFsbCA3IGZpbGVzKS4KK0AKKworCisxLjMuNC4xCitsb2cKK0BGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCisKK1RoaXMgY2hhbmdlIGV4Y2x1ZGVzIHN1YjMvZGVmYXVsdCwgYmVjYXVzZSBpdCB3YXMgbm90IHBhcnQgb2YgdGhpcworY29tbWl0LCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIHdoaWNoIGlzIG5vdCBldmVuIG9uIHRoZSBicmFuY2ggeWV0LgorQAordGV4dAorQGE3IDIKKworRmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorQAorCisKKzEuMgorbG9nCitARmlyc3QgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyB0d28gZmlsZXMuCitACit0ZXh0CitAZDYgMgorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQ0IDIKK0AKKworCisxLjEuMS4xCitsb2cKK0BJbml0aWFsIGltcG9ydC4KK0AKK3RleHQKK0BACmRpZmYgLS1naXQgYS90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvc3Vic3ViQi9kZWZhdWx0LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvc3Vic3ViQi9kZWZhdWx0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2ZWZhNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9zdWJzdWJCL2RlZmF1bHQsdgpAQCAtMCwwICsxLDEwNyBAQAoraGVhZAkxLjM7CithY2Nlc3M7CitzeW1ib2xzCisJQl9TUExJVDoxLjMuMC4yCisJQl9NSVhFRDoxLjIuMC4yCisJVF9NSVhFRDoxLjIKKwlCX0ZST01fSU5JVElBTFM6MS4xLjEuMS4wLjIKKwlUX0FMTF9JTklUSUFMX0ZJTEVTOjEuMS4xLjEKKwl2ZW5kb3J0YWc6MS4xLjEuMQorCXZlbmRvcmJyYW5jaDoxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4zCitkYXRlCTIwMDMuMDYuMDMuMDQuMjkuMTQ7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMy4yLjE7CituZXh0CTEuMjsKKworMS4yCitkYXRlCTIwMDMuMDUuMjMuMDAuMTcuNTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjMuMi4xCitkYXRlCTIwMDMuMDYuMDMuMDQuMzMuMTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4zCitsb2cKK0BBIHRydW5rIGNoYW5nZSB0byBzdWIxL3N1YnN1YkIvZGVmYXVsdC4gIFRoaXMgd2FzIGNvbW1pdHRlZCBhYm91dCBhbgoraG91ciBhZnRlciBhbiBlYXJsaWVyIGNoYW5nZSB0aGF0IGFmZmVjdGVkIG1vc3QgZmlsZXMgb24gYnJhbmNoCitCX1NQTElULiAgVGhpcyBmaWxlIGlzIG5vdCBvbiB0aGF0IGJyYW5jaCB5ZXQsIGJ1dCBhZnRlciB0aGlzIGNvbW1pdCwKK3dlJ2xsIGJyYW5jaCB0byBCX1NQTElULCBhbGJlaXQgcm9vdGVkIGluIGEgcmV2aXNpb24gdGhhdCBkaWRuJ3QgZXhpc3QKK2F0IHRoZSB0aW1lIHRoZSByZXN0IG9mIEJfU1BMSVQgd2FzIGNyZWF0ZWQuCitACit0ZXh0CitAVGhpcyBpcyBzdWIxL3N1YnN1YkIvZGVmYXVsdC4KKworRXZlcnkgZGlyZWN0b3J5IGluIHRoZSBgcHJvaicgcHJvamVjdCBoYXMgYSBmaWxlIG5hbWVkIGBkZWZhdWx0Jy4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBpbiB0aGUgc2Vjb25kIGNvbW1pdCAoYWZmZWN0aW5nIGFsbCA3IGZpbGVzKS4KKworVGhpcyBiaXQgd2FzIGNvbW1pdHRlZCBvbiB0cnVuayBhYm91dCBhbiBob3VyIGFmdGVyIGFuIGVhcmxpZXIgY2hhbmdlCit0byBldmVyeW9uZSBlbHNlIG9uIGJyYW5jaCBCX1NQTElULiAgQWZ0ZXJ3YXJkcywgd2UnbGwgZmluYWxseSBicmFuY2gKK3RoaXMgZmlsZSB0byBCX1NQTElULCBidXQgcm9vdGVkIGluIGEgcmV2aXNpb24gdGhhdCBkaWRuJ3QgZXhpc3QgYXQKK3RoZSB0aW1lIHRoZSByZXN0IG9mIEJfU1BMSVQgd2FzIGNyZWF0ZWQuCitACisKKworMS4zLjIuMQorbG9nCitAVGhpcyBjaGFuZ2UgYWZmZWN0cyBzdWIzL2RlZmF1bHQgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCBvbiBicmFuY2gKK0JfU1BMSVQuICBOb3RlIHRoYXQgdGhlIGxhdHRlciBmaWxlIGRpZCBub3QgZXZlbiBleGlzdCBvbiB0aGlzIGJyYW5jaAordW50aWwgYWZ0ZXIgc29tZSBvdGhlciBmaWxlcyBoYWQgaGFkIHJldmlzaW9ucyBjb21taXR0ZWQgb24gQl9TUExJVC4KK0AKK3RleHQKK0BhMTAgNAorCitUaGlzIGNoYW5nZSBhZmZlY3RzIHN1YjMvZGVmYXVsdCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIG9uIGJyYW5jaAorQl9TUExJVC4gIE5vdGUgdGhhdCB0aGUgbGF0dGVyIGZpbGUgZGlkIG5vdCBldmVuIGV4aXN0IG9uIHRoaXMgYnJhbmNoCit1bnRpbCBhZnRlciBzb21lIG90aGVyIGZpbGVzIGhhZCBoYWQgcmV2aXNpb25zIGNvbW1pdHRlZCBvbiBCX1NQTElULgorQAorCisKKzEuMgorbG9nCitAU2Vjb25kIGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgYWxsIDcgZmlsZXMuCitACit0ZXh0CitAZDYgNQorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQ0IDIKK0AKKworCisxLjEuMS4xCitsb2cKK0BJbml0aWFsIGltcG9ydC4KK0AKK3RleHQKK0BACmRpZmYgLS1naXQgYS90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvQXR0aWMvYnJhbmNoX0JfTUlYRURfb25seSx2IGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL0F0dGljL2JyYW5jaF9CX01JWEVEX29ubHksdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGM5Nzg5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL0F0dGljL2JyYW5jaF9CX01JWEVEX29ubHksdgpAQCAtMCwwICsxLDU5IEBACitoZWFkCTEuMTsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX01JWEVEOjEuMS4wLjI7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMQorZGF0ZQkyMDAzLjA1LjIzLjAwLjI1LjI2OwlhdXRob3IganJhbmRvbTsJc3RhdGUgZGVhZDsKK2JyYW5jaGVzCisJMS4xLjIuMTsKK25leHQJOworCisxLjEuMi4xCitkYXRlCTIwMDMuMDUuMjMuMDAuMjUuMjY7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xLjIuMjsKKworMS4xLjIuMgorZGF0ZQkyMDAzLjA1LjIzLjAwLjQ4LjUxOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMQorbG9nCitAZmlsZSBicmFuY2hfQl9NSVhFRF9vbmx5IHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJfTUlYRUQuCitACit0ZXh0CitAQAorCisKKzEuMS4yLjEKK2xvZworQEFkZCBhIGZpbGUgb24gYnJhbmNoIEJfTUlYRUQuCitACit0ZXh0CitAYTAgMQorVGhpcyBmaWxlIHdhcyBhZGRlZCBvbiBicmFuY2ggQl9NSVhFRC4gIEl0IG5ldmVyIGV4aXN0ZWQgb24gdHJ1bmsuCitACisKKworMS4xLjIuMgorbG9nCitAQSBzaW5nbGUgY29tbWl0IGFmZmVjdGluZyBvbmUgZmlsZSBvbiBicmFuY2ggQl9NSVhFRCBhbmQgb25lIG9uIHRydW5rLgorQAordGV4dAorQGExIDMKKworVGhlIHNhbWUgY29tbWl0IGFkZGVkIHRoZXNlIHR3byBsaW5lcyBoZXJlIG9uIGJyYW5jaCBCX01JWEVELCBhbmQgdHdvCitzaW1pbGFyIGxpbmVzIHRvIC4vZGVmYXVsdCBvbiB0cnVuay4KK0AKKworCmRpZmYgLS1naXQgYS90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvZGVmYXVsdCx2IGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL2RlZmF1bHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMThmN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL2RlZmF1bHQsdgpAQCAtMCwwICsxLDEwMiBAQAoraGVhZAkxLjM7CithY2Nlc3M7CitzeW1ib2xzCisJQl9TUExJVDoxLjMuMC4yCisJQl9NSVhFRDoxLjIuMC4yCisJVF9NSVhFRDoxLjIKKwlCX0ZST01fSU5JVElBTFNfQlVUX09ORToxLjEuMS4xLjAuNAorCUJfRlJPTV9JTklUSUFMUzoxLjEuMS4xLjAuMgorCVRfQUxMX0lOSVRJQUxfRklMRVNfQlVUX09ORToxLjEuMS4xCisJVF9BTExfSU5JVElBTF9GSUxFUzoxLjEuMS4xCisJdmVuZG9ydGFnOjEuMS4xLjEKKwl2ZW5kb3JicmFuY2g6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMworZGF0ZQkyMDAzLjA1LjIzLjAwLjQ4LjUxOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjMuMi4xOworbmV4dAkxLjI7CisKKzEuMgorZGF0ZQkyMDAzLjA1LjIzLjAwLjE3LjUzOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4zLjIuMQorZGF0ZQkyMDAzLjA2LjAzLjAzLjIwLjMxOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMworbG9nCitAQSBzaW5nbGUgY29tbWl0IGFmZmVjdGluZyBvbmUgZmlsZSBvbiBicmFuY2ggQl9NSVhFRCBhbmQgb25lIG9uIHRydW5rLgorQAordGV4dAorQFRoaXMgaXMgc3ViMi9kZWZhdWx0LgorCitFdmVyeSBkaXJlY3RvcnkgaW4gdGhlIGBwcm9qJyBwcm9qZWN0IGhhcyBhIGZpbGUgbmFtZWQgYGRlZmF1bHQnLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGluIHRoZSBzZWNvbmQgY29tbWl0IChhZmZlY3RpbmcgYWxsIDcgZmlsZXMpLgorCitUaGUgc2FtZSBjb21taXQgYWRkZWQgdGhlc2UgdHdvIGxpbmVzIGhlcmUgb24gdHJ1bmssIGFuZCB0d28gc2ltaWxhcgorbGluZXMgdG8gLi9icmFuY2hfQl9NSVhFRF9vbmx5IG9uIGJyYW5jaCBCX01JWEVELgorQAorCisKKzEuMy4yLjEKK2xvZworQEZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KKworVGhpcyBjaGFuZ2UgZXhjbHVkZXMgc3ViMy9kZWZhdWx0LCBiZWNhdXNlIGl0IHdhcyBub3QgcGFydCBvZiB0aGlzCitjb21taXQsIGFuZCBzdWIxL3N1YnN1YkIvZGVmYXVsdCwgd2hpY2ggaXMgbm90IGV2ZW4gb24gdGhlIGJyYW5jaCB5ZXQuCitACit0ZXh0CitAYTggMgorCitGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCitACisKKworMS4yCitsb2cKK0BTZWNvbmQgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyBhbGwgNyBmaWxlcy4KK0AKK3RleHQKK0BkNiAzCitACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAZDQgMgorQAorCisKKzEuMS4xLjEKK2xvZworQEluaXRpYWwgaW1wb3J0LgorQAordGV4dAorQEAKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMi9zdWJzdWJBL2RlZmF1bHQsdiBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMi9zdWJzdWJBL2RlZmF1bHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTMyNDJjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL3N1YnN1YkEvZGVmYXVsdCx2CkBAIC0wLDAgKzEsMTAyIEBACitoZWFkCTEuMjsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX1NQTElUOjEuMi4wLjIKKwlCX01JWEVEOjEuMS4wLjIKKwlUX01JWEVEOjEuMQorCUJfRlJPTV9JTklUSUFMU19CVVRfT05FOjEuMS4xLjEuMC40CisJQl9GUk9NX0lOSVRJQUxTOjEuMS4xLjEuMC4yCisJVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FOjEuMS4xLjEKKwlUX0FMTF9JTklUSUFMX0ZJTEVTOjEuMS4xLjEKKwl2ZW5kb3J0YWc6MS4xLjEuMQorCXZlbmRvcmJyYW5jaDoxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4yCitkYXRlCTIwMDMuMDUuMjMuMDAuMTcuNTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMi4yLjE7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjEKKwkxLjEuMi4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMS4yLjEKK2RhdGUJMjAwMy4wNS4yMy4wMC4zMS4zNjsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMi4yLjEKK2RhdGUJMjAwMy4wNi4wMy4wMy4yMC4zMTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjIKK2xvZworQFNlY29uZCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIGFsbCA3IGZpbGVzLgorQAordGV4dAorQFRoaXMgaXMgc3ViMi9zdWJzdWIyL2RlZmF1bHQuCisKK0V2ZXJ5IGRpcmVjdG9yeSBpbiB0aGUgYHByb2onIHByb2plY3QgaGFzIGEgZmlsZSBuYW1lZCBgZGVmYXVsdCcuCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgaW4gdGhlIHNlY29uZCBjb21taXQgKGFmZmVjdGluZyBhbGwgNyBmaWxlcykuCitACisKKworMS4yLjIuMQorbG9nCitARmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorCitUaGlzIGNoYW5nZSBleGNsdWRlcyBzdWIzL2RlZmF1bHQsIGJlY2F1c2UgaXQgd2FzIG5vdCBwYXJ0IG9mIHRoaXMKK2NvbW1pdCwgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCB3aGljaCBpcyBub3QgZXZlbiBvbiB0aGUgYnJhbmNoIHlldC4KK0AKK3RleHQKK0BhNSAyCisKK0ZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkNCAyCitACisKKworMS4xLjIuMQorbG9nCitATW9kaWZ5IHRocmVlIGZpbGVzLCBvbiBicmFuY2ggQl9NSVhFRC4KK0AKK3RleHQKK0BhMyAyCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgb24gYnJhbmNoIEJfTUlYRUQgb25seSAoYWZmZWN0aW5nIDMgZmlsZXMpLgorQAorCisKKzEuMS4xLjEKK2xvZworQEluaXRpYWwgaW1wb3J0LgorQAordGV4dAorQEAKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMy9kZWZhdWx0LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjMvZGVmYXVsdCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZTQ1NjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjMvZGVmYXVsdCx2CkBAIC0wLDAgKzEsMTAyIEBACitoZWFkCTEuMzsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX1NQTElUOjEuMy4wLjIKKwlCX01JWEVEOjEuMi4wLjIKKwlUX01JWEVEOjEuMgorCUJfRlJPTV9JTklUSUFMU19CVVRfT05FOjEuMS4xLjEuMC40CisJQl9GUk9NX0lOSVRJQUxTOjEuMS4xLjEuMC4yCisJVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FOjEuMS4xLjEKKwlUX0FMTF9JTklUSUFMX0ZJTEVTOjEuMS4xLjEKKwl2ZW5kb3J0YWc6MS4xLjEuMQorCXZlbmRvcmJyYW5jaDoxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4zCitkYXRlCTIwMDMuMDUuMjMuMDAuMTcuNTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMy4yLjE7CituZXh0CTEuMjsKKworMS4yCitkYXRlCTIwMDMuMDUuMjMuMDAuMTUuMjY7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjMuMi4xCitkYXRlCTIwMDMuMDYuMDMuMDQuMzMuMTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4zCitsb2cKK0BTZWNvbmQgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyBhbGwgNyBmaWxlcy4KK0AKK3RleHQKK0BUaGlzIGlzIHN1YjMvZGVmYXVsdC4KKworRXZlcnkgZGlyZWN0b3J5IGluIHRoZSBgcHJvaicgcHJvamVjdCBoYXMgYSBmaWxlIG5hbWVkIGBkZWZhdWx0Jy4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBieSB0aGUgZmlyc3QgY29tbWl0IChhZmZlY3RpbmcgdHdvIGZpbGVzKS4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBpbiB0aGUgc2Vjb25kIGNvbW1pdCAoYWZmZWN0aW5nIGFsbCA3IGZpbGVzKS4KK0AKKworCisxLjMuMi4xCitsb2cKK0BUaGlzIGNoYW5nZSBhZmZlY3RzIHN1YjMvZGVmYXVsdCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIG9uIGJyYW5jaAorQl9TUExJVC4gIE5vdGUgdGhhdCB0aGUgbGF0dGVyIGZpbGUgZGlkIG5vdCBldmVuIGV4aXN0IG9uIHRoaXMgYnJhbmNoCit1bnRpbCBhZnRlciBzb21lIG90aGVyIGZpbGVzIGhhZCBoYWQgcmV2aXNpb25zIGNvbW1pdHRlZCBvbiBCX1NQTElULgorQAordGV4dAorQGE3IDQKKworVGhpcyBjaGFuZ2UgYWZmZWN0cyBzdWIzL2RlZmF1bHQgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCBvbiBicmFuY2gKK0JfU1BMSVQuICBOb3RlIHRoYXQgdGhlIGxhdHRlciBmaWxlIGRpZCBub3QgZXZlbiBleGlzdCBvbiB0aGlzIGJyYW5jaAordW50aWwgYWZ0ZXIgc29tZSBvdGhlciBmaWxlcyBoYWQgaGFkIHJldmlzaW9ucyBjb21taXR0ZWQgb24gQl9TUExJVC4KK0AKKworCisxLjIKK2xvZworQEZpcnN0IGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgdHdvIGZpbGVzLgorQAordGV4dAorQGQ2IDIKK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkNCAyCitACisKKworMS4xLjEuMQorbG9nCitASW5pdGlhbCBpbXBvcnQuCitACit0ZXh0CitAQApkaWZmIC0tZ2l0IGEvdC90OTYwMy1jdnNpbXBvcnQtcGF0Y2hzZXRzLnNoIGIvdC90OTYwMy1jdnNpbXBvcnQtcGF0Y2hzZXRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNlNjRiMTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAzLWN2c2ltcG9ydC1wYXRjaHNldHMuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKKyMgU3RydWN0dXJlIG9mIHRoZSB0ZXN0IGN2cyByZXBvc2l0b3J5CisjCisjIE1lc3NhZ2UgICBGaWxlOkNvbnRlbnQgICAgICAgICBDb21taXQgVGltZQorIyBSZXYgMSAgICAgYTogMS4xICAgICAgICAgICAgICAgMjAwOS0wMi0yMSAxOToxMTo0MyArMDEwMAorIyBSZXYgMiAgICAgYTogMS4yICAgIGI6IDEuMSAgICAgMjAwOS0wMi0yMSAxOToxMToxNCArMDEwMAorIyBSZXYgMyAgICAgICAgICAgICAgIGI6IDEuMiAgICAgMjAwOS0wMi0yMSAxOToxMTo0MyArMDEwMAorIworIyBBcyB5b3UgY2FuIHNlZSB0aGUgY29tbWl0IG9mIFJldiAzIGhhcyB0aGUgc2FtZSB0aW1lIGFzCisjIFJldiAxIHRoaXMgbGVhZHMgdG8gYSBicm9rZW4gaW1wb3J0IGJlY2F1c2Ugb2YgYSBjdnNwcworIyBidWcuCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjdnNpbXBvcnQgdGVzdGluZyBmb3IgY29ycmVjdCBwYXRjaHNldCBlc3RpbWF0aW9uJworLiAuL2xpYi1jdnMuc2gKKworc2V0dXBfY3ZzX3Rlc3RfcmVwb3NpdG9yeSB0OTYwMworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFBFUkwgJ2ltcG9ydCB3aXRoIGNyaXNzIGNyb3NzIHRpbWVzIG9uIHJldmlzaW9ucycgJworCisgICAgZ2l0IGN2c2ltcG9ydCAtcCIteCIgLUMgbW9kdWxlLWdpdCBtb2R1bGUgJiYKKyAgICAoY2QgbW9kdWxlLWdpdCAmJgorICAgICAgICBnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolcyA+IC4uL2FjdHVhbC1tYXN0ZXIgJiYKKyAgICAgICAgZ2l0IGxvZyBBfjIuLkEgLS1wcmV0dHk9ImZvcm1hdDolcyAlYWQiIC0tID4gLi4vYWN0dWFsLUEgJiYKKyAgICAgICAgZWNobyAiIiA+PiAuLi9hY3R1YWwtbWFzdGVyICYmCisJZWNobyAiIiA+PiAuLi9hY3R1YWwtQQorICAgICkgJiYKKyAgICBlY2hvICJSZXYgNAorUmV2IDMKK1JldiAyCitSZXYgMSIgPiBleHBlY3QtbWFzdGVyICYmCisgICAgdGVzdF9jbXAgZXhwZWN0LW1hc3RlciBhY3R1YWwtbWFzdGVyICYmCisKKyAgICBlY2hvICJSZXYgNSBCcmFuY2ggQSBXZWQgTWFyIDExIDE5OjA5OjEwIDIwMDkgKzAwMDAKK1JldiA0IEJyYW5jaCBBIFdlZCBNYXIgMTEgMTk6MDM6NTIgMjAwOSArMDAwMCIgPiBleHBlY3QtQSAmJgorICAgIHRlc3RfY21wIGV4cGVjdC1BIGFjdHVhbC1BCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTYwMy9jdnNyb290Ly5naXRhdHRyaWJ1dGVzIGIvdC90OTYwMy9jdnNyb290Ly5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmIxMmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAzL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSBAQAorKiAtd2hpdGVzcGFjZQpkaWZmIC0tZ2l0IGEvdC90OTYwMy9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZSBiL3QvdDk2MDMvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiOWIzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDMvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitoaXN0b3J5Cit2YWwtdGFncwpkaWZmIC0tZ2l0IGEvdC90OTYwMy9jdnNyb290L21vZHVsZS9hLHYgYi90L3Q5NjAzL2N2c3Jvb3QvbW9kdWxlL2EsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYThmZDVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMy9jdnNyb290L21vZHVsZS9hLHYKQEAgLTAsMCArMSw3NCBAQAoraGVhZAkxLjI7CithY2Nlc3M7CitzeW1ib2xzCisJQToxLjIuMC4yOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjIKK2RhdGUJMjAwOS4wMi4yMS4xOC4xMS4xNDsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjIuMi4xOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDA5LjAyLjIxLjE4LjExLjQzOwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjIuMi4xCitkYXRlCTIwMDkuMDMuMTEuMTkuMDMuNTI7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjIuMi4yOworCisxLjIuMi4yCitkYXRlCTIwMDkuMDMuMTEuMTkuMDkuMTA7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjIKK2xvZworQFJldiAyCitACit0ZXh0CitAMS4yCitACisKKworMS4yLjIuMQorbG9nCitAUmV2IDQgQnJhbmNoIEEKK0AKK3RleHQKK0BkMSAxCithMSAxCisxLjIuMi4xCitACisKKworMS4yLjIuMgorbG9nCitAUmV2IDUgQnJhbmNoIEEKK0AKK3RleHQKK0BkMSAxCithMSAxCisxLjIuMi4yCitACisKKworMS4xCitsb2cKK0BSZXYgMQorQAordGV4dAorQGQxIDEKK2ExIDEKKzEuMQorQApkaWZmIC0tZ2l0IGEvdC90OTYwMy9jdnNyb290L21vZHVsZS9iLHYgYi90L3Q5NjAzL2N2c3Jvb3QvbW9kdWxlL2IsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjY4ODU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMy9jdnNyb290L21vZHVsZS9iLHYKQEAgLTAsMCArMSw5MCBAQAoraGVhZAkxLjM7CithY2Nlc3M7CitzeW1ib2xzCisJQToxLjIuMC4yOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjMKK2RhdGUJMjAwOS4wMy4xMS4xOS4wNS4wODsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMjsKKworMS4yCitkYXRlCTIwMDkuMDIuMjEuMTguMTEuNDM7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4yLjIuMTsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwOS4wMi4yMS4xOC4xMS4xNDsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4yLjIuMQorZGF0ZQkyMDA5LjAzLjExLjE5LjAzLjUyOwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4yLjIuMjsKKworMS4yLjIuMgorZGF0ZQkyMDA5LjAzLjExLjE5LjA5LjEwOwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4zCitsb2cKK0BSZXYgNAorQAordGV4dAorQDEuMworQAorCisKKzEuMgorbG9nCitAUmV2IDMKK0AKK3RleHQKK0BkMSAxCithMSAxCisxLjIKK0AKKworCisxLjIuMi4xCitsb2cKK0BSZXYgNCBCcmFuY2ggQQorQAordGV4dAorQGQxIDEKK2ExIDEKKzEuMi4yLjEKK0AKKworCisxLjIuMi4yCitsb2cKK0BSZXYgNSBCcmFuY2ggQQorQAordGV4dAorQGQxIDEKK2ExIDEKKzEuMgorQAorCisKKzEuMQorbG9nCitAUmV2IDIKK0AKK3RleHQKK0BkMSAxCithMSAxCisxLjEKK0AKZGlmZiAtLWdpdCBhL3QvdDk2MDQtY3ZzaW1wb3J0LXRpbWVzdGFtcHMuc2ggYi90L3Q5NjA0LWN2c2ltcG9ydC10aW1lc3RhbXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmZjRhYTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjA0LWN2c2ltcG9ydC10aW1lc3RhbXBzLnNoCkBAIC0wLDAgKzEsNzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY3ZzaW1wb3J0IHRpbWVzdGFtcHMnCisuIC4vbGliLWN2cy5zaAorCitzZXR1cF9jdnNfdGVzdF9yZXBvc2l0b3J5IHQ5NjA0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY2hlY2sgdGltZXN0YW1wcyBhcmUgVVRDIChUWj1DU1Q2Q0RUKScgJworCisJVFo9Q1NUNkNEVCBnaXQgY3ZzaW1wb3J0IC1wIi14IiAtQyBtb2R1bGUtMSBtb2R1bGUgJiYKKwlnaXQgY3ZzaW1wb3J0IC1wIi14IiAtQyBtb2R1bGUtMSBtb2R1bGUgJiYKKwkoCisJCWNkIG1vZHVsZS0xICYmCisJCWdpdCBsb2cgLS1mb3JtYXQ9IiVzICVhaSIKKwkpID5hY3R1YWwtMSAmJgorCWNhdCA+ZXhwZWN0LTEgPDwtRU9GICYmCisJUmV2IDE2IDIwMDYtMTAtMjkgMDc6MDA6MDEgKzAwMDAKKwlSZXYgMTUgMjAwNi0xMC0yOSAwNjo1OTo1OSArMDAwMAorCVJldiAxNCAyMDA2LTA0LTAyIDA4OjAwOjAxICswMDAwCisJUmV2IDEzIDIwMDYtMDQtMDIgMDc6NTk6NTkgKzAwMDAKKwlSZXYgMTIgMjAwNS0xMi0wMSAwMDowMDowMCArMDAwMAorCVJldiAxMSAyMDA1LTExLTAxIDAwOjAwOjAwICswMDAwCisJUmV2IDEwIDIwMDUtMTAtMDEgMDA6MDA6MDAgKzAwMDAKKwlSZXYgIDkgMjAwNS0wOS0wMSAwMDowMDowMCArMDAwMAorCVJldiAgOCAyMDA1LTA4LTAxIDAwOjAwOjAwICswMDAwCisJUmV2ICA3IDIwMDUtMDctMDEgMDA6MDA6MDAgKzAwMDAKKwlSZXYgIDYgMjAwNS0wNi0wMSAwMDowMDowMCArMDAwMAorCVJldiAgNSAyMDA1LTA1LTAxIDAwOjAwOjAwICswMDAwCisJUmV2ICA0IDIwMDUtMDQtMDEgMDA6MDA6MDAgKzAwMDAKKwlSZXYgIDMgMjAwNS0wMy0wMSAwMDowMDowMCArMDAwMAorCVJldiAgMiAyMDA1LTAyLTAxIDAwOjAwOjAwICswMDAwCisJUmV2ICAxIDIwMDUtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QtMSBhY3R1YWwtMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NoZWNrIHRpbWVzdGFtcHMgd2l0aCBhdXRob3Itc3BlY2lmaWMgdGltZXpvbmVzJyAnCisKKwljYXQgPmN2cy1hdXRob3JzIDw8LUVPRiAmJgorCXVzZXIxPVVzZXIgT25lIDx1c2VyMUBkb21haW4ub3JnPgorCXVzZXIyPVVzZXIgVHdvIDx1c2VyMkBkb21haW4ub3JnPiBDU1Q2Q0RUCisJdXNlcjM9VXNlciBUaHJlZSA8dXNlcjNAZG9tYWluLm9yZz4gRVNUNUVEVAorCXVzZXI0PVVzZXIgRm91ciA8dXNlcjRAZG9tYWluLm9yZz4gTVNUN01EVAorCUVPRgorCWdpdCBjdnNpbXBvcnQgLXAiLXgiIC1BIGN2cy1hdXRob3JzIC1DIG1vZHVsZS0yIG1vZHVsZSAmJgorCSgKKwkJY2QgbW9kdWxlLTIgJiYKKwkJZ2l0IGxvZyAtLWZvcm1hdD0iJXMgJWFpICVhbiIKKwkpID5hY3R1YWwtMiAmJgorCWNhdCA+ZXhwZWN0LTIgPDwtRU9GICYmCisJUmV2IDE2IDIwMDYtMTAtMjkgMDE6MDA6MDEgLTA2MDAgVXNlciBUd28KKwlSZXYgMTUgMjAwNi0xMC0yOSAwMTo1OTo1OSAtMDUwMCBVc2VyIFR3bworCVJldiAxNCAyMDA2LTA0LTAyIDAzOjAwOjAxIC0wNTAwIFVzZXIgVHdvCisJUmV2IDEzIDIwMDYtMDQtMDIgMDE6NTk6NTkgLTA2MDAgVXNlciBUd28KKwlSZXYgMTIgMjAwNS0xMS0zMCAxNzowMDowMCAtMDcwMCBVc2VyIEZvdXIKKwlSZXYgMTEgMjAwNS0xMC0zMSAxOTowMDowMCAtMDUwMCBVc2VyIFRocmVlCisJUmV2IDEwIDIwMDUtMDktMzAgMTk6MDA6MDAgLTA1MDAgVXNlciBUd28KKwlSZXYgIDkgMjAwNS0wOS0wMSAwMDowMDowMCArMDAwMCBVc2VyIE9uZQorCVJldiAgOCAyMDA1LTA3LTMxIDE4OjAwOjAwIC0wNjAwIFVzZXIgRm91cgorCVJldiAgNyAyMDA1LTA2LTMwIDIwOjAwOjAwIC0wNDAwIFVzZXIgVGhyZWUKKwlSZXYgIDYgMjAwNS0wNS0zMSAxOTowMDowMCAtMDUwMCBVc2VyIFR3bworCVJldiAgNSAyMDA1LTA1LTAxIDAwOjAwOjAwICswMDAwIFVzZXIgT25lCisJUmV2ICA0IDIwMDUtMDMtMzEgMTc6MDA6MDAgLTA3MDAgVXNlciBGb3VyCisJUmV2ICAzIDIwMDUtMDItMjggMTk6MDA6MDAgLTA1MDAgVXNlciBUaHJlZQorCVJldiAgMiAyMDA1LTAxLTMxIDE4OjAwOjAwIC0wNjAwIFVzZXIgVHdvCisJUmV2ICAxIDIwMDUtMDEtMDEgMDA6MDA6MDAgKzAwMDAgVXNlciBPbmUKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QtMiBhY3R1YWwtMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk2MDQvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcyBiL3QvdDk2MDQvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjJiMTJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwNC9jdnNyb290Ly5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEgQEAKKyogLXdoaXRlc3BhY2UKZGlmZiAtLWdpdCBhL3QvdDk2MDQvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUgYi90L3Q5NjA0L2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjliMzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjA0L2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAoraGlzdG9yeQordmFsLXRhZ3MKZGlmZiAtLWdpdCBhL3QvdDk2MDQvY3Zzcm9vdC9tb2R1bGUvYSx2IGIvdC90OTYwNC9jdnNyb290L21vZHVsZS9hLHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA2NThjMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDQvY3Zzcm9vdC9tb2R1bGUvYSx2CkBAIC0wLDAgKzEsMjY0IEBACitoZWFkCTEuMTY7CithY2Nlc3M7CitzeW1ib2xzOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjE2CitkYXRlCTIwMDYuMTAuMjkuMDcuMDAuMDE7CWF1dGhvciB1c2VyMjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTU7CisKKzEuMTUKK2RhdGUJMjAwNi4xMC4yOS4wNi41OS41OTsJYXV0aG9yIHVzZXIyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xNDsKKworMS4xNAorZGF0ZQkyMDA2LjA0LjAyLjA4LjAwLjAxOwlhdXRob3IgdXNlcjI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjEzOworCisxLjEzCitkYXRlCTIwMDYuMDQuMDIuMDcuNTkuNTk7CWF1dGhvciB1c2VyMjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTI7CisKKzEuMTIKK2RhdGUJMjAwNS4xMi4wMS4wMC4wMC4wMDsJYXV0aG9yIHVzZXI0OwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xMTsKKworMS4xMQorZGF0ZQkyMDA1LjExLjAxLjAwLjAwLjAwOwlhdXRob3IgdXNlcjM7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjEwOworCisxLjEwCitkYXRlCTIwMDUuMTAuMDEuMDAuMDAuMDA7CWF1dGhvciB1c2VyMjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuOTsKKworMS45CitkYXRlCTIwMDUuMDkuMDEuMDAuMDAuMDA7CWF1dGhvciB1c2VyMTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuODsKKworMS44CitkYXRlCTIwMDUuMDguMDEuMDAuMDAuMDA7CWF1dGhvciB1c2VyNDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuNzsKKworMS43CitkYXRlCTIwMDUuMDcuMDEuMDAuMDAuMDA7CWF1dGhvciB1c2VyMzsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuNjsKKworMS42CitkYXRlCTIwMDUuMDYuMDEuMDAuMDAuMDA7CWF1dGhvciB1c2VyMjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuNTsKKworMS41CitkYXRlCTIwMDUuMDUuMDEuMDAuMDAuMDA7CWF1dGhvciB1c2VyMTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuNDsKKworMS40CitkYXRlCTIwMDUuMDQuMDEuMDAuMDAuMDA7CWF1dGhvciB1c2VyNDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMzsKKworMS4zCitkYXRlCTIwMDUuMDMuMDEuMDAuMDAuMDA7CWF1dGhvciB1c2VyMzsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMjsKKworMS4yCitkYXRlCTIwMDUuMDIuMDEuMDAuMDAuMDA7CWF1dGhvciB1c2VyMjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDUuMDEuMDEuMDAuMDAuMDA7CWF1dGhvciB1c2VyMTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMTYKK2xvZworQFJldiAxNgorQAordGV4dAorQFJldiAxNgorQAorCisKKzEuMTUKK2xvZworQFJldiAxNQorQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiAxNQorQAorCisKKzEuMTQKK2xvZworQFJldiAxNAorQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiAxNAorQAorCisKKzEuMTMKK2xvZworQFJldiAxMworQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiAxMworQAorCisKKzEuMTIKK2xvZworQFJldiAxMgorQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiAxMgorQAorCisKKzEuMTEKK2xvZworQFJldiAxMQorQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiAxMQorQAorCisKKzEuMTAKK2xvZworQFJldiAxMAorQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiAxMAorQAorCisKKzEuOQorbG9nCitAUmV2ICA5CitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDkKK0AKKworCisxLjgKK2xvZworQFJldiAgOAorQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiA4CitACisKKworMS43Citsb2cKK0BSZXYgIDcKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgNworQAorCisKKzEuNgorbG9nCitAUmV2ICA2CitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDYKK0AKKworCisxLjUKK2xvZworQFJldiAgNQorQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiA1CitACisKKworMS40Citsb2cKK0BSZXYgIDQKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgNAorQAorCisKKzEuMworbG9nCitAUmV2ICAzCitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDMKK0AKKworCisxLjIKK2xvZworQFJldiAgMgorQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiAyCitACisKKworMS4xCitsb2cKK0BSZXYgIDEKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgMQorQApkaWZmIC0tZ2l0IGEvdC90OTcwMC1wZXJsLWdpdC5zaCBiL3QvdDk3MDAtcGVybC1naXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTAyYzEzMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk3MDAtcGVybC1naXQuc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBMZWEgV2llbWFubgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdwZXJsIGludGVyZmFjZSAoR2l0LnBtKScKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTDsgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBwZXJsIGludGVyZmFjZSB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKworcGVybCAtTVRlc3Q6Ok1vcmUgLWUgMCAyPi9kZXYvbnVsbCB8fCB7CisJc2tpcF9hbGw9IlBlcmwgVGVzdDo6TW9yZSB1bmF2YWlsYWJsZSwgc2tpcHBpbmcgdGVzdCIKKwl0ZXN0X2RvbmUKK30KKworIyBzZXQgdXAgdGVzdCByZXBvc2l0b3J5CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzZXQgdXAgdGVzdCByZXBvc2l0b3J5JyBcCisgICAgJ2VjaG8gInRlc3QgZmlsZSAxIiA+IGZpbGUxICYmCisgICAgIGVjaG8gInRlc3QgZmlsZSAyIiA+IGZpbGUyICYmCisgICAgIG1rZGlyIGRpcmVjdG9yeTEgJiYKKyAgICAgZWNobyAiaW4gZGlyZWN0b3J5MSIgPj4gZGlyZWN0b3J5MS9maWxlICYmCisgICAgIG1rZGlyIGRpcmVjdG9yeTIgJiYKKyAgICAgZWNobyAiaW4gZGlyZWN0b3J5MiIgPj4gZGlyZWN0b3J5Mi9maWxlICYmCisgICAgIGdpdCBhZGQgLiAmJgorICAgICBnaXQgY29tbWl0IC1tICJmaXJzdCBjb21taXQiICYmCisKKyAgICAgZWNobyAibmV3IGZpbGUgaW4gc3ViZGlyIDIiID4gZGlyZWN0b3J5Mi9maWxlMiAmJgorICAgICBnaXQgYWRkIC4gJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiY29tbWl0IGluIGRpcmVjdG9yeTIiICYmCisKKyAgICAgZWNobyAiY2hhbmdlZCBmaWxlIDEiID4gZmlsZTEgJiYKKyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAic2Vjb25kIGNvbW1pdCIgJiYKKworICAgICBnaXQgY29uZmlnIC0tYWRkIGNvbG9yLnRlc3Quc2xvdDEgZ3JlZW4gJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LnN0cmluZyB2YWx1ZSAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QuZHVwc3RyaW5nIHZhbHVlMSAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QuZHVwc3RyaW5nIHZhbHVlMiAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QuYm9vbHRydWUgdHJ1ZSAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QuYm9vbGZhbHNlIG5vICYmCisgICAgIGdpdCBjb25maWcgLS1hZGQgdGVzdC5ib29sb3RoZXIgb3RoZXIgJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LmludCAyayAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QucGF0aCAifi9mb28iICYmCisgICAgIGdpdCBjb25maWcgLS1hZGQgdGVzdC5wYXRoZXhwYW5kZWQgIiRIT01FL2ZvbyIgJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LnBhdGhtdWx0aSBmb28gJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LnBhdGhtdWx0aSBiYXIKKyAgICAgJworCisjIFRoZSBleHRlcm5hbCB0ZXN0IHdpbGwgb3V0cHV0cyBpdHMgb3duIHBsYW4KK3Rlc3RfZXh0ZXJuYWxfaGFzX3RhcD0xCisKK3Rlc3RfZXh0ZXJuYWxfd2l0aG91dF9zdGRlcnIgXAorICAgICdQZXJsIEFQSScgXAorICAgIHBlcmwgIiRURVNUX0RJUkVDVE9SWSIvdDk3MDAvdGVzdC5wbAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk3MDAvdGVzdC5wbCBiL3QvdDk3MDAvdGVzdC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNGNkMDEzCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTcwMC90ZXN0LnBsCkBAIC0wLDAgKzEsMTQ2IEBACisjIS91c3IvYmluL3BlcmwKK3VzZSBsaWIgKHNwbGl0KC86LywgJEVOVntHSVRQRVJMTElCfSkpOworCit1c2UgNS4wMDg7Cit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OworCit1c2UgVGVzdDo6TW9yZSBxdyhub19wbGFuKTsKKworQkVHSU4geworCSMgdDk3MDAtcGVybC1naXQuc2gga2lja3Mgb2ZmIG91ciB0ZXN0aW5nLCBzbyB3ZSBoYXZlIHRvIGdvIGZyb20KKwkjIHRoZXJlLgorCVRlc3Q6Ok1vcmUtPmJ1aWxkZXItPmN1cnJlbnRfdGVzdCgxKTsKKwlUZXN0OjpNb3JlLT5idWlsZGVyLT5ub19lbmRpbmcoMSk7Cit9CisKK3VzZSBDd2Q7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3N1YiBhZGp1c3RfZGlyc2VwIHsKKwlteSAkcGF0aCA9IHNoaWZ0OworCSRwYXRoID1+IHN7XFx9ey99ZzsKKwlyZXR1cm4gJHBhdGg7Cit9CisKK0JFR0lOIHsgdXNlX29rKCdHaXQnKSB9CisKKyMgc2V0IHVwCitvdXIgJGFic19yZXBvX2RpciA9IGN3ZCgpOworb2sob3VyICRyID0gR2l0LT5yZXBvc2l0b3J5KERpcmVjdG9yeSA9PiAiLiIpLCAib3BlbiByZXBvc2l0b3J5Iik7CisKKyMgY29uZmlnCitpcygkci0+Y29uZmlnKCJ0ZXN0LnN0cmluZyIpLCAidmFsdWUiLCAiY29uZmlnIHNjYWxhcjogc3RyaW5nIik7Citpc19kZWVwbHkoWyRyLT5jb25maWcoInRlc3QuZHVwc3RyaW5nIildLCBbInZhbHVlMSIsICJ2YWx1ZTIiXSwKKwkgICJjb25maWcgYXJyYXk6IHN0cmluZyIpOworaXMoJHItPmNvbmZpZygidGVzdC5ub25leGlzdGVudCIpLCB1bmRlZiwgImNvbmZpZyBzY2FsYXI6IG5vbmV4aXN0ZW50Iik7Citpc19kZWVwbHkoWyRyLT5jb25maWcoInRlc3Qubm9uZXhpc3RlbnQiKV0sIFtdLCAiY29uZmlnIGFycmF5OiBub25leGlzdGVudCIpOworaXMoJHItPmNvbmZpZ19pbnQoInRlc3QuaW50IiksIDIwNDgsICJjb25maWdfaW50OiBpbnRlZ2VyIik7Citpcygkci0+Y29uZmlnX2ludCgidGVzdC5ub25leGlzdGVudCIpLCB1bmRlZiwgImNvbmZpZ19pbnQ6IG5vbmV4aXN0ZW50Iik7Citvaygkci0+Y29uZmlnX2Jvb2woInRlc3QuYm9vbHRydWUiKSwgImNvbmZpZ19ib29sOiB0cnVlIik7CitvayghJHItPmNvbmZpZ19ib29sKCJ0ZXN0LmJvb2xmYWxzZSIpLCAiY29uZmlnX2Jvb2w6IGZhbHNlIik7CitpcyhhZGp1c3RfZGlyc2VwKCRyLT5jb25maWdfcGF0aCgidGVzdC5wYXRoIikpLCAkci0+Y29uZmlnKCJ0ZXN0LnBhdGhleHBhbmRlZCIpLAorICAgImNvbmZpZ19wYXRoOiB+L2ZvbyBleHBhbnNpb24iKTsKK2lzX2RlZXBseShbJHItPmNvbmZpZ19wYXRoKCJ0ZXN0LnBhdGhtdWx0aSIpXSwgWyJmb28iLCAiYmFyIl0sCisgICAiY29uZmlnX3BhdGg6IG11bHRpcGxlIHZhbHVlcyIpOworb3VyICRhbnNpX2dyZWVuID0gIlx4MWJbMzJtIjsKK2lzKCRyLT5nZXRfY29sb3IoImNvbG9yLnRlc3Quc2xvdDEiLCAicmVkIiksICRhbnNpX2dyZWVuLCAiZ2V0X2NvbG9yIik7CisjIENhbm5vdCB0ZXN0ICRyLT5nZXRfY29sb3Jib29sKCJjb2xvci5mb28iKSkgYmVjYXVzZSB3ZSBkbyBub3QKKyMgY29udHJvbCB3aGV0aGVyIG91ciBTVERPVVQgaXMgYSB0ZXJtaW5hbC4KKworIyBGYWlsdXJlIGNhc2VzIGZvciBjb25maWc6CisjIFNhdmUgYW5kIHJlc3RvcmUgU1RERVJSOyB3ZSB3aWxsIHByb2JhYmx5IGV4dHJhY3QgdGhpcyBpbnRvIGEKKyMgImRpZXNfb2siIG1ldGhvZCBhbmQgcG9zc2libHkgbW92ZSB0aGUgU1RERVJSIGhhbmRsaW5nIHRvIEdpdC5wbS4KK29wZW4gb3VyICR0bXBzdGRlcnIsICI+JlNUREVSUiIgb3IgZGllICJjYW5ub3Qgc2F2ZSBTVERFUlIiOworb3BlbiBTVERFUlIsICI+IiwgIi9kZXYvbnVsbCIgb3IgZGllICJjYW5ub3QgcmVkaXJlY3QgU1RERVJSIHRvIC9kZXYvbnVsbCI7Citpcygkci0+Y29uZmlnKCJ0ZXN0LmR1cHN0cmluZyIpLCAidmFsdWUyIiwgImNvbmZpZzogbXVsdGl2YXIiKTsKK2V2YWwgeyAkci0+Y29uZmlnX2Jvb2woInRlc3QuYm9vbG90aGVyIikgfTsKK29rKCRALCAiY29uZmlnX2Jvb2w6IG5vbi1ib29sZWFuIHZhbHVlcyBmYWlsIik7CitvcGVuIFNUREVSUiwgIj4mIiwgJHRtcHN0ZGVyciBvciBkaWUgImNhbm5vdCByZXN0b3JlIFNUREVSUiI7CisKKyMgaWRlbnQKK2xpa2UoJHItPmlkZW50KCJhVXRob3IiKSwgcXIvXkEgVSBUaG9yIDxhdXRob3JcQGV4YW1wbGUuY29tPiBbMC05XSsgXCswMDAwJC8sCisgICAgICJpZGVudCBzY2FsYXI6IGF1dGhvciAodHlwZSkiKTsKK2xpa2UoJHItPmlkZW50KCJjT21taXR0ZXIiKSwgcXIvXkMgTyBNaXR0ZXIgPGNvbW1pdHRlclxAZXhhbXBsZS5jb20+IFswLTldKyBcKzAwMDAkLywKKyAgICAgImlkZW50IHNjYWxhcjogY29tbWl0dGVyICh0eXBlKSIpOworaXMoJHItPmlkZW50KCJpbnZhbGlkIiksICJpbnZhbGlkIiwgImlkZW50IHNjYWxhcjogaW52YWxpZCBpZGVudCBzdHJpbmcgKG5vIHBhcnNpbmcpIik7CitteSAoJG5hbWUsICRlbWFpbCwgJHRpbWVfdHopID0gJHItPmlkZW50KCdhdXRob3InKTsKK2lzX2RlZXBseShbJG5hbWUsICRlbWFpbF0sIFsiQSBVIFRob3IiLCAiYXV0aG9yXEBleGFtcGxlLmNvbSJdLAorCSAiaWRlbnQgYXJyYXk6IGF1dGhvciIpOworbGlrZSgkdGltZV90eiwgcXIvWzAtOV0rIFwrMDAwMC8sICJpZGVudCBhcnJheTogYXV0aG9yIik7Citpc19kZWVwbHkoWyRyLT5pZGVudCgiTmFtZSA8ZW1haWw+IDEyMyArMDAwMCIpXSwgWyJOYW1lIiwgImVtYWlsIiwgIjEyMyArMDAwMCJdLAorCSAgImlkZW50IGFycmF5OiBpZGVudCBzdHJpbmciKTsKK2lzX2RlZXBseShbJHItPmlkZW50KCJpbnZhbGlkIildLCBbXSwgImlkZW50IGFycmF5OiBpbnZhbGlkIGlkZW50IHN0cmluZyIpOworCisjIGlkZW50X3BlcnNvbgoraXMoJHItPmlkZW50X3BlcnNvbigiYVV0aG9yIiksICJBIFUgVGhvciA8YXV0aG9yXEBleGFtcGxlLmNvbT4iLAorICAgImlkZW50X3BlcnNvbjogYXV0aG9yICh0eXBlKSIpOworaXMoJHItPmlkZW50X3BlcnNvbigiTmFtZSA8ZW1haWw+IDEyMyArMDAwMCIpLCAiTmFtZSA8ZW1haWw+IiwKKyAgICJpZGVudF9wZXJzb246IGlkZW50IHN0cmluZyIpOworaXMoJHItPmlkZW50X3BlcnNvbigiTmFtZSIsICJlbWFpbCIsICIxMjMgKzAwMDAiKSwgIk5hbWUgPGVtYWlsPiIsCisgICAiaWRlbnRfcGVyc29uOiBhcnJheSIpOworCisjIG9iamVjdHMgYW5kIGhhc2hlcworb2sob3VyICRmaWxlMWhhc2ggPSAkci0+Y29tbWFuZF9vbmVsaW5lKCdyZXYtcGFyc2UnLCAiSEVBRDpmaWxlMSIpLCAiKGdldCBmaWxlIGhhc2gpIik7CitteSAkdG1wZmlsZSA9ICJmaWxlLnRtcCI7CitvcGVuIFRFTVBGSUxFLCAiKz4kdG1wZmlsZSIgb3IgZGllICJDYW4ndCBvcGVuICR0bXBmaWxlOiAkISI7Citpcygkci0+Y2F0X2Jsb2IoJGZpbGUxaGFzaCwgXCpURU1QRklMRSksIDE1LCAiY2F0X2Jsb2I6IHNpemUiKTsKK291ciAkYmxvYmNvbnRlbnRzOworeyBsb2NhbCAkLzsgc2VlayBURU1QRklMRSwgMCwgMDsgJGJsb2Jjb250ZW50cyA9IDxURU1QRklMRT47IH0KK2lzKCRibG9iY29udGVudHMsICJjaGFuZ2VkIGZpbGUgMVxuIiwgImNhdF9ibG9iOiBkYXRhIik7CitjbG9zZSBURU1QRklMRSBvciBkaWUgIkZhaWxlZCB3cml0aW5nIHRvICR0bXBmaWxlOiAkISI7CitpcyhHaXQ6Omhhc2hfb2JqZWN0KCJibG9iIiwgJHRtcGZpbGUpLCAkZmlsZTFoYXNoLCAiaGFzaF9vYmplY3Q6IHJvdW5kdHJpcCIpOworb3BlbiBURU1QRklMRSwgIj4kdG1wZmlsZSIgb3IgZGllICJDYW4ndCBvcGVuICR0bXBmaWxlOiAkISI7CitwcmludCBURU1QRklMRSBteSAkdGVzdF90ZXh0ID0gInRlc3QgYmxvYiwgdG8gYmUgaW5zZXJ0ZWRcbiI7CitjbG9zZSBURU1QRklMRSBvciBkaWUgIkZhaWxlZCB3cml0aW5nIHRvICR0bXBmaWxlOiAkISI7CitsaWtlKG91ciAkbmV3aGFzaCA9ICRyLT5oYXNoX2FuZF9pbnNlcnRfb2JqZWN0KCR0bXBmaWxlKSwgcXIvWzAtOWEtZkEtRl17NDB9LywKKyAgICAgImhhc2hfYW5kX2luc2VydF9vYmplY3Q6IHJldHVybnMgaGFzaCIpOworb3BlbiBURU1QRklMRSwgIis+JHRtcGZpbGUiIG9yIGRpZSAiQ2FuJ3Qgb3BlbiAkdG1wZmlsZTogJCEiOworaXMoJHItPmNhdF9ibG9iKCRuZXdoYXNoLCBcKlRFTVBGSUxFKSwgbGVuZ3RoICR0ZXN0X3RleHQsICJjYXRfYmxvYjogcm91bmR0cmlwIHNpemUiKTsKK3sgbG9jYWwgJC87IHNlZWsgVEVNUEZJTEUsIDAsIDA7ICRibG9iY29udGVudHMgPSA8VEVNUEZJTEU+OyB9CitpcygkYmxvYmNvbnRlbnRzLCAkdGVzdF90ZXh0LCAiY2F0X2Jsb2I6IHJvdW5kdHJpcCBkYXRhIik7CitjbG9zZSBURU1QRklMRTsKK3VubGluayAkdG1wZmlsZTsKKworIyBwYXRocworaXMoJHItPnJlcG9fcGF0aCwgJGFic19yZXBvX2RpciAuICIvLmdpdCIsICJyZXBvX3BhdGgiKTsKK2lzKCRyLT53Y19wYXRoLCAkYWJzX3JlcG9fZGlyIC4gIi8iLCAid2NfcGF0aCIpOworaXMoJHItPndjX3N1YmRpciwgIiIsICJ3Y19zdWJkaXIgaW5pdGlhbCIpOworJHItPndjX2NoZGlyKCJkaXJlY3RvcnkxIik7Citpcygkci0+d2Nfc3ViZGlyLCAiZGlyZWN0b3J5MSIsICJ3Y19zdWJkaXIgYWZ0ZXIgd2NfY2hkaXIiKTsKK2lzKCRyLT5jb25maWcoInRlc3Quc3RyaW5nIiksICJ2YWx1ZSIsICJjb25maWcgYWZ0ZXIgd2NfY2hkaXIiKTsKKworIyBPYmplY3QgZ2VuZXJhdGlvbiBpbiBzdWIgZGlyZWN0b3J5CitjaGRpcigiZGlyZWN0b3J5MiIpOworbXkgJHIyID0gR2l0LT5yZXBvc2l0b3J5KCk7CitpcygkcjItPnJlcG9fcGF0aCwgJGFic19yZXBvX2RpciAuICIvLmdpdCIsICJyZXBvX3BhdGggKDIpIik7CitpcygkcjItPndjX3BhdGgsICRhYnNfcmVwb19kaXIgLiAiLyIsICJ3Y19wYXRoICgyKSIpOworaXMoJHIyLT53Y19zdWJkaXIsICJkaXJlY3RvcnkyLyIsICJ3Y19zdWJkaXIgaW5pdGlhbCAoMikiKTsKKworIyBjb21tYW5kcyBpbiBzdWIgZGlyZWN0b3J5CitteSAkbGFzdF9jb21taXQgPSAkcjItPmNvbW1hbmRfb25lbGluZShxdyhyZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkpOworbGlrZSgkbGFzdF9jb21taXQsIHFyL15bMC05YS1mQS1GXXs0MH0kLywgJ3Jldi1wYXJzZSByZXR1cm5lZCBoYXNoJyk7CitteSAkZGlyX2NvbW1pdCA9ICRyMi0+Y29tbWFuZF9vbmVsaW5lKCdsb2cnLCAnLW4xJywgJy0tcHJldHR5PWZvcm1hdDolSCcsICcuJyk7Citpc250KCRsYXN0X2NvbW1pdCwgJGRpcl9jb21taXQsICdsb2cgLiBkb2VzIG5vdCBzaG93IGxhc3QgY29tbWl0Jyk7CisKKyMgY29tbWFuZHMgb3V0c2lkZSB3b3JraW5nIHRyZWUKK2NoZGlyKCRhYnNfcmVwb19kaXIgLiAnLy4uJyk7CitteSAkcjMgPSBHaXQtPnJlcG9zaXRvcnkoRGlyZWN0b3J5ID0+ICRhYnNfcmVwb19kaXIpOworbXkgJHRtcGZpbGUzID0gIiRhYnNfcmVwb19kaXIvZmlsZTMudG1wIjsKK29wZW4gVEVNUEZJTEUzLCAiKz4kdG1wZmlsZTMiIG9yIGRpZSAiQ2FuJ3Qgb3BlbiAkdG1wZmlsZTM6ICQhIjsKK2lzKCRyMy0+Y2F0X2Jsb2IoJGZpbGUxaGFzaCwgXCpURU1QRklMRTMpLCAxNSwgImNhdF9ibG9iKG91dHNpZGUpOiBzaXplIik7CitjbG9zZSBURU1QRklMRTM7Cit1bmxpbmsgJHRtcGZpbGUzOworY2hkaXIoJGFic19yZXBvX2Rpcik7CisKKyMgdW5xdW90aW5nIHBhdGhzCitpcyhHaXQ6OnVucXVvdGVfcGF0aCgnYWJjJyksICdhYmMnLCAndW5xdW90ZSB1bnF1b3RlZCBwYXRoJyk7CitpcyhHaXQ6OnVucXVvdGVfcGF0aCgnImFiYyBkZWYiJyksICdhYmMgZGVmJywgJ3VucXVvdGUgc2ltcGxlIHF1b3RlZCBwYXRoJyk7CitpcyhHaXQ6OnVucXVvdGVfcGF0aCgnImFiY1wiXFxcXCBcYVxiXHRcblx2XGZcclwwMDFcMDQwIicpLAorCQkgICAgICJhYmNcIlxcIFx4MDdceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDAxICIsCisJCSAgICAgJ3VucXVvdGUgZXNjYXBlIHNlcXVlbmNlcycpOworCitwcmludGYgIjEuLiVkXG4iLCBUZXN0OjpNb3JlLT5idWlsZGVyLT5jdXJyZW50X3Rlc3Q7CisKK215ICRpc19wYXNzaW5nID0gZXZhbCB7IFRlc3Q6Ok1vcmUtPmlzX3Bhc3NpbmcgfTsKK2V4aXQoJGlzX3Bhc3NpbmcgPyAwIDogMSkgdW5sZXNzICRAID1+IC9DYW4ndCBsb2NhdGUgb2JqZWN0IG1ldGhvZC87CmRpZmYgLS1naXQgYS90L3Q5ODAwLWdpdC1wNC1iYXNpYy5zaCBiL3QvdDk4MDAtZ2l0LXA0LWJhc2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM5OGMxZGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODAwLWdpdC1wNC1iYXNpYy5zaApAQCAtMCwwICsxLDMyOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCB0ZXN0cycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBwNCBmaWxlcycgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImZpbGUxIiAmJgorCQllY2hvIGZpbGUyID5maWxlMiAmJgorCQlwNCBhZGQgZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlMiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIGdpdCBwNCBjbG9uZScgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVwb3QgdHlwbyBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC9kZXBvdCAyPmVycnMgJiYKKwlncmVwICJEZXBvdCBwYXRocyBtdXN0IHN0YXJ0IHdpdGgiIGVycnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHA0IGNsb25lIEBhbGwnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcDQgc3luYyB1bmluaXRpYWxpemVkIHJlcG8nICcKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBzeW5jIDI+ZXJycyAmJgorCQl0ZXN0X2kxOG5ncmVwICJQZXJoYXBzIHlvdSBuZXZlciBkaWQiIGVycnMKKwkpCisnCisKKyMKKyMgQ3JlYXRlIGEgZ2l0IHJlcG8gYnkgaGFuZC4gIEFkZCBhIGNvbW1pdCBzbyB0aGF0IEhFQUQgaXMgdmFsaWQuCisjIFRlc3QgaW1wb3J0cyBhIG5ldyBwNCByZXBvc2l0b3J5IGludG8gYSBuZXcgZ2l0IGJyYW5jaC4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBzeW5jIG5ldyBicmFuY2gnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfY29tbWl0IGhlYWQgJiYKKwkJZ2l0IHA0IHN5bmMgLS1icmFuY2g9cmVmcy9yZW1vdGVzL3A0L2RlcG90IC8vZGVwb3RAYWxsICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHA0L2RlcG90ID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0d28gZGlycycgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCW1rZGlyIHN1YjEgc3ViMiAmJgorCQllY2hvIHN1YjEvZjEgPnN1YjEvZjEgJiYKKwkJZWNobyBzdWIyL2YyID5zdWIyL2YyICYmCisJCXA0IGFkZCBzdWIxL2YxICYmCisJCXA0IHN1Ym1pdCAtZCAic3ViMS9mMSIgJiYKKwkJcDQgYWRkIHN1YjIvZjIgJiYKKwkJcDQgc3VibWl0IC1kICJzdWIyL2YyIgorCSkgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L3N1YjEgLy9kZXBvdC9zdWIyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxzLWZpbGVzID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHA0L21hc3RlciA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdHdvIGRpcnMsIEBhbGwnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIHN1YjEvZjMgPnN1YjEvZjMgJiYKKwkJcDQgYWRkIHN1YjEvZjMgJiYKKwkJcDQgc3VibWl0IC1kICJzdWIxL2YzIgorCSkgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L3N1YjFAYWxsIC8vZGVwb3Qvc3ViMkBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbHMtZmlsZXMgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgbGluZXMgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgcDQvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0d28gZGlycywgQGFsbCwgY29uZmxpY3RpbmcgZmlsZXMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIHN1YjIvZjMgPnN1YjIvZjMgJiYKKwkJcDQgYWRkIHN1YjIvZjMgJiYKKwkJcDQgc3VibWl0IC1kICJzdWIyL2YzIgorCSkgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L3N1YjFAYWxsIC8vZGVwb3Qvc3ViMkBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbHMtZmlsZXMgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgbGluZXMgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgcDQvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IGxpbmVzICYmCisJCWVjaG8gc3ViMi9mMyA+ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgZjMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHR3byBkaXJzLCBlYWNoIGVkaXRlZCBieSBzdWJtaXQsIHNpbmdsZSBnaXQgY29tbWl0JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBzdWIxL2Y0ID5zdWIxL2Y0ICYmCisJCXA0IGFkZCBzdWIxL2Y0ICYmCisJCWVjaG8gc3ViMi9mNCA+c3ViMi9mNCAmJgorCQlwNCBhZGQgc3ViMi9mNCAmJgorCQlwNCBzdWJtaXQgLWQgInN1YjEvZjQgYW5kIHN1YjIvZjQiCisJKSAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3Qvc3ViMUBhbGwgLy9kZXBvdC9zdWIyQGFsbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBscy1maWxlcyA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBsaW5lcyAmJgorCQlnaXQgbG9nIC0tb25lbGluZSBwNC9tYXN0ZXIgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgbGluZXMKKwkpCisnCisKK3JldmlzaW9uX3Jhbmdlcz0iMjAwMC8wMS8wMSwjaGVhZCBcCisJCSAxLDIwODAvMDEvMDEgXAorCQkgMjAwMC8wMS8wMSwyMDgwLzAxLzAxIFwKKwkJIDIwMDAvMDEvMDEsMTAwMCBcCisJCSAxLDEwMDAiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHVzaW5nIG5vbi1udW1lcmljIHJldmlzaW9uIHJhbmdlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWZvciByIGluICRyZXZpc2lvbl9yYW5nZXMKKwlkbworCQlybSAtZnIgIiRnaXQiICYmCisJCXRlc3QgISAtZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEAkciAmJgorCQkoCisJCQljZCAiJGdpdCIgJiYKKwkJCWdpdCBscy1maWxlcyA+bGluZXMgJiYKKwkJCXRlc3RfbGluZV9jb3VudCA9IDggbGluZXMKKwkJKQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCBkYXRlIHJhbmdlLCBleGNsdWRpbmcgc29tZSBjaGFuZ2VzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJYmVmb3JlPSQoZGF0ZSArJVkvJW0vJWQ6JUg6JU06JVMpICYmCisJc2xlZXAgMiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCTo+ZGF0ZV9yYW5nZV90ZXN0ICYmCisJCXA0IGFkZCBkYXRlX3JhbmdlX3Rlc3QgJiYKKwkJcDQgc3VibWl0IC1kICJBZGRpbmcgZmlsZSIKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEAxLCRiZWZvcmUgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkYXRlX3JhbmdlX3Rlc3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXQgd2hlbiBwNCBmYWlscyB0byBwcm9kdWNlIG1hcnNoYWxlZCBvdXRwdXQnICcKKwlta2RpciBiYWRwNGRpciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gYmFkcDRkaXIvcDQgJiYgcm1kaXIgYmFkcDRkaXIiICYmCisJY2F0ID5iYWRwNGRpci9wNCA8PC1FT0YgJiYKKwkjISRTSEVMTF9QQVRICisJZXhpdCAxCisJRU9GCisJY2htb2QgNzU1IGJhZHA0ZGlyL3A0ICYmCisJKAorCQlQQVRIPSIkVFJBU0hfRElSRUNUT1JZL2JhZHA0ZGlyOiRQQVRIIiAmJgorCQlleHBvcnQgUEFUSCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCA+ZXJycyAyPiYxCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgISBUcmFjZWJhY2sgZXJycworJworCisjIEhpZGUgYSBmaWxlIGZyb20gcDRkLCBtYWtlIHN1cmUgd2UgY2F0Y2ggaXRzIGNvbXBsYWludC4gIFRoaXMgd29uJ3QgZmFpbCBpbgorIyBwNCBjaGFuZ2VzLCBmaWxlcywgb3IgZGVzY3JpYmU7IGp1c3QgaW4gcDQgcHJpbnQuICBJZiBQNENMSUVOVCBpcyB1bnNldCwgdGhlCisjIG1lc3NhZ2Ugd2lsbCBpbmNsdWRlICJMaWJyYXJpYW4gY2hlY2tvdXQiLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpdCBncmFjZWZ1bGx5IGZvciBwNCBzZXJ2ZXIgZXJyb3JzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJtdiBcIiRkYlwiL2RlcG90L2ZpbGUxLHYsaGlkZGVuIFwiJGRiXCIvZGVwb3QvZmlsZTEsdiIgJiYKKwltdiAiJGRiIi9kZXBvdC9maWxlMSx2ICIkZGIiL2RlcG90L2ZpbGUxLHYsaGlkZGVuICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAMSA+b3V0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiRXJyb3IgZnJvbSBwNCBwcmludCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tYmFyZSBzaG91bGQgbWFrZSBhIGJhcmUgcmVwb3NpdG9yeScgJworCXJtIC1yZiAiJGdpdCIgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLWJhcmUgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQgJiYKKwkJZ2l0IGNvbmZpZyAtLWdldCAtLWJvb2wgY29yZS5iYXJlIHRydWUgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvcDQvbWFzdGVyICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3A0L0hFQUQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlciAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQKKwkpCisnCisKKyMgU2xlZXAgYSBiaXQgc28gdGhhdCB0aGUgdG9wLW1vc3QgcDQgY2hhbmdlIGRpZCBub3QgaGFwcGVuICJub3ciLiAgVGhlbgorIyBpbXBvcnQgdGhlIHJlcG8gYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbml0aWFsIGltcG9ydCBoYXMgdGhlIHNhbWUgdGltZQorIyBhcyB0aGUgdG9wLW1vc3QgY2hhbmdlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbCBpbXBvcnQgdGltZSBmcm9tIHRvcCBjaGFuZ2UgdGltZScgJworCXA0Y2hhbmdlPSQocDQgLUcgY2hhbmdlcyAtbSAxIC8vZGVwb3QvLi4uIHwgbWFyc2hhbF9kdW1wIGNoYW5nZSkgJiYKKwlwNHRpbWU9JChwNCAtRyBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8uLi4gfCBtYXJzaGFsX2R1bXAgdGltZSkgJiYKKwlzbGVlcCAzICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdHRpbWU9JChnaXQgc2hvdyAtcyAtLXJhdyAtLXByZXR0eT1mb3JtYXQ6JWF0IEhFQUQpICYmCisJCWVjaG8gJHA0dGltZSAkZ2l0dGltZSAmJgorCQl0ZXN0ICRwNHRpbWUgPSAkZ2l0dGltZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5yZXNvbHZhYmxlIGhvc3QgaW4gUDRQT1JUIHNob3VsZCBkaXNwbGF5IGVycm9yJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCVA0UE9SVD1ub3N1Y2hob3N0OjY1NTM3ICYmCisJCWV4cG9ydCBQNFBPUlQgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzeW5jID5vdXQgMj5lcnIgJiYKKwkJZ3JlcCAiY29ubmVjdCB0byBub3N1Y2hob3N0IiBlcnIKKwkpCisnCisKKyMgVGVzdCBmb2xsb3dpbmcgc2NlbmFyaW9zOgorIyAgIC0gV2l0aG91dCAiLmdpdC9ob29rcy9wNC1wcmUtc3VibWl0IiAsIHN1Ym1pdCBzaG91bGQgY29udGludWUKKyMgICAtIFdpdGggdGhlIGhvb2sgcmV0dXJuaW5nIDAsIHN1Ym1pdCBzaG91bGQgY29udGludWUKKyMgICAtIFdpdGggdGhlIGhvb2sgcmV0dXJuaW5nIDEsIHN1Ym1pdCBzaG91bGQgYWJvcnQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1biBob29rIHA0LXByZS1zdWJtaXQgYmVmb3JlIHN1Ym1pdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvICJoZWxsbyB3b3JsZCIgPmhlbGxvLnR4dCAmJgorCQlnaXQgYWRkIGhlbGxvLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgaGVsbG8udHh0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgLS1kcnktcnVuID5vdXQgJiYKKwkJZ3JlcCAiV291bGQgYXBwbHkiIG91dCAmJgorCQlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3A0LXByZS1zdWJtaXQgPDwtXEVPRiAmJgorCQlleGl0IDAKKwkJRU9GCisJCWdpdCBwNCBzdWJtaXQgLS1kcnktcnVuID5vdXQgJiYKKwkJZ3JlcCAiV291bGQgYXBwbHkiIG91dCAmJgorCQl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9wNC1wcmUtc3VibWl0IDw8LVxFT0YgJiYKKwkJZXhpdCAxCisJCUVPRgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgc3VibWl0IC0tZHJ5LXJ1biA+ZXJycyAyPiYxICYmCisJCSEgZ3JlcCAiV291bGQgYXBwbHkiIGVycnMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCBmcm9tIGRldGFjaGVkIGhlYWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNoZWNrb3V0IHA0L21hc3RlciAmJgorCQk+ZGV0YWNoZWRfaGVhZF90ZXN0ICYmCisJCWdpdCBhZGQgZGV0YWNoZWRfaGVhZF90ZXN0ICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBkZXRhY2hlZF9oZWFkIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJZ2l0IHA0IHJlYmFzZSAmJgorCQlnaXQgbG9nIHA0L21hc3RlciB8IGdyZXAgZGV0YWNoZWRfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IGZyb20gd29ya3RyZWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCAuLi93b3JrdHJlZS10ZXN0CisJKSAmJgorCSgKKwkJY2QgIiRnaXQvLi4vd29ya3RyZWUtdGVzdCIgJiYKKwkJdGVzdF9jb21taXQgIndvcmt0cmVlLWNvbW1pdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgd29ya3RyZWUtY29tbWl0LnQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgwMS1naXQtcDQtYnJhbmNoLnNoIGIvdC90OTgwMS1naXQtcDQtYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY3ZmYyNzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODAxLWdpdC1wNC1icmFuY2guc2gKQEAgLTAsMCArMSw3NDUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgdGVzdHMgZm9yIHA0IGJyYW5jaGVzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKworIworIyAxOiAvL2RlcG90L21haW4vZjEKKyMgMjogLy9kZXBvdC9tYWluL2YyCisjIDM6IGludGVncmF0ZSAvL2RlcG90L21haW4vLi4uIC0+IC8vZGVwb3QvYnJhbmNoMS8uLi4KKyMgNDogLy9kZXBvdC9tYWluL2Y0CisjIDU6IC8vZGVwb3QvYnJhbmNoMS9mNQorIyAuOiBuYW1lZCBicmFuY2ggYnJhbmNoMgorIyA2OiBpbnRlZ3JhdGUgLWIgYnJhbmNoMgorIyA3OiAvL2RlcG90L2JyYW5jaDIvZjcKKyMgODogLy9kZXBvdC9tYWluL2Y4CisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyBwNCBicmFuY2hlcycgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCW1rZGlyIC1wIG1haW4gJiYKKworCQllY2hvIGYxID5tYWluL2YxICYmCisJCXA0IGFkZCBtYWluL2YxICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mMSIgJiYKKworCQllY2hvIGYyID5tYWluL2YyICYmCisJCXA0IGFkZCBtYWluL2YyICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mMiIgJiYKKworCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9tYWluLy4uLiAvL2RlcG90L2JyYW5jaDEvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiaW50ZWdyYXRlIG1haW4gdG8gYnJhbmNoMSIgJiYKKworCQllY2hvIGY0ID5tYWluL2Y0ICYmCisJCXA0IGFkZCBtYWluL2Y0ICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mNCIgJiYKKworCQllY2hvIGY1ID5icmFuY2gxL2Y1ICYmCisJCXA0IGFkZCBicmFuY2gxL2Y1ICYmCisJCXA0IHN1Ym1pdCAtZCAiYnJhbmNoMS9mNSIgJiYKKworCQlwNCBicmFuY2ggLWkgPDwtRU9GICYmCisJCUJyYW5jaDogYnJhbmNoMgorCQlWaWV3OiAvL2RlcG90L21haW4vLi4uIC8vZGVwb3QvYnJhbmNoMi8uLi4KKwkJRU9GCisKKwkJcDQgaW50ZWdyYXRlIC1iIGJyYW5jaDIgJiYKKwkJcDQgc3VibWl0IC1kICJpbnRlZ3JhdGUgbWFpbiB0byBicmFuY2gyIiAmJgorCisJCWVjaG8gZjcgPmJyYW5jaDIvZjcgJiYKKwkJcDQgYWRkIGJyYW5jaDIvZjcgJiYKKwkJcDQgc3VibWl0IC1kICJicmFuY2gyL2Y3IiAmJgorCisJCWVjaG8gZjggPm1haW4vZjggJiYKKwkJcDQgYWRkIG1haW4vZjggJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2Y4IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IG1haW4sIG5vIGJyYW5jaCBkZXRlY3Rpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L21haW5AYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgLS1ncmFwaCAtLWRlY29yYXRlIC0tYWxsICYmCisJCWdpdCByZXYtbGlzdCBtYXN0ZXIgPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgd2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBicmFuY2gxLCBubyBicmFuY2ggZGV0ZWN0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9icmFuY2gxQGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLWFsbCAmJgorCQlnaXQgcmV2LWxpc3QgbWFzdGVyID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIHdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgYnJhbmNoMiwgbm8gYnJhbmNoIGRldGVjdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvYnJhbmNoMkBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSAtLWdyYXBoIC0tZGVjb3JhdGUgLS1hbGwgJiYKKwkJZ2l0IHJldi1saXN0IG1hc3RlciA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiB3YworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IGRlcG90LCBubyBicmFuY2ggZGV0ZWN0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSAtLWdyYXBoIC0tZGVjb3JhdGUgLS1hbGwgJiYKKwkJZ2l0IHJldi1saXN0IG1hc3RlciA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gOCB3YworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IGRlcG90LCBicmFuY2ggZGV0ZWN0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCisJCWdpdCBsb2cgLS1vbmVsaW5lIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLWFsbCAmJgorCisJCSMgNCBtYWluIGNvbW1pdHMKKwkJZ2l0IHJldi1saXN0IG1hc3RlciA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCB3YyAmJgorCisJCSMgMyBtYWluLCAxIGludGVncmF0ZSwgMSBvbiBicmFuY2gyCisJCWdpdCByZXYtbGlzdCBwNC9kZXBvdC9icmFuY2gyID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IHdjICYmCisKKwkJIyBubyBicmFuY2gxLCBzaW5jZSBubyBwNCBicmFuY2ggY3JlYXRlZCBmb3IgaXQKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIHA0L2RlcG90L2JyYW5jaDEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBkZXBvdCwgYnJhbmNoIGRldGVjdGlvbiwgYnJhbmNoTGlzdCBicmFuY2ggZGVmaW5pdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBtYWluOmJyYW5jaDEgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0uIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsICYmCisKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgLS1ncmFwaCAtLWRlY29yYXRlIC0tYWxsICYmCisKKwkJIyA0IG1haW4gY29tbWl0cworCQlnaXQgcmV2LWxpc3QgbWFzdGVyID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IHdjICYmCisKKwkJIyAzIG1haW4sIDEgaW50ZWdyYXRlLCAxIG9uIGJyYW5jaDIKKwkJZ2l0IHJldi1saXN0IHA0L2RlcG90L2JyYW5jaDIgPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgd2MgJiYKKworCQkjIDIgbWFpbiwgMSBpbnRlZ3JhdGUsIDEgb24gYnJhbmNoMQorCQlnaXQgcmV2LWxpc3QgcDQvZGVwb3QvYnJhbmNoMSA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCB3YworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdGFydCBwNGQnICcKKwlzdG9wX2FuZF9jbGVhbnVwX3A0ZCAmJgorCXN0YXJ0X3A0ZAorJworCisjCisjIDE6IC8vZGVwb3QvYnJhbmNoMS9maWxlMQorIyAgICAvL2RlcG90L2JyYW5jaDEvZmlsZTIKKyMgMjogaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS8uLi4gLT4gLy9kZXBvdC9icmFuY2gyLy4uLgorIyAzOiAvL2RlcG90L2JyYW5jaDEvZmlsZTMKKyMgNDogLy9kZXBvdC9icmFuY2gxL2ZpbGUyIChlZGl0KQorIyA1OiBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gxLy4uLiAtPiAvL2RlcG90L2JyYW5jaDMvLi4uCisjCisjIyBDcmVhdGUgYSBzaW1wbGUgYnJhbmNoIHN0cnVjdHVyZSBpbiBQNCBkZXBvdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzaW1wbGUgcDQgYnJhbmNoZXMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciBicmFuY2gxICYmCisJCWNkIGJyYW5jaDEgJiYKKwkJZWNobyBmaWxlMSA+ZmlsZTEgJiYKKwkJZWNobyBmaWxlMiA+ZmlsZTIgJiYKKwkJcDQgYWRkIGZpbGUxIGZpbGUyICYmCisJCXA0IHN1Ym1pdCAtZCAiQ3JlYXRlIGJyYW5jaDEiICYmCisJCXA0IGludGVncmF0ZSAvL2RlcG90L2JyYW5jaDEvLi4uIC8vZGVwb3QvYnJhbmNoMi8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJJbnRlZ3JhdGUgYnJhbmNoMiBmcm9tIGJyYW5jaDEiICYmCisJCWVjaG8gZmlsZTMgPmZpbGUzICYmCisJCXA0IGFkZCBmaWxlMyAmJgorCQlwNCBzdWJtaXQgLWQgImFkZCBmaWxlMyBpbiBicmFuY2gxIiAmJgorCQlwNCBvcGVuIGZpbGUyICYmCisJCWVjaG8gdXBkYXRlID4+ZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJ1cGRhdGUgZmlsZTIgaW4gYnJhbmNoMSIgJiYKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS8uLi4gLy9kZXBvdC9icmFuY2gzLy4uLiAmJgorCQlwNCBzdWJtaXQgLWQgIkludGVncmF0ZSBicmFuY2gzIGZyb20gYnJhbmNoMSIKKwkpCisnCisKKyMgQ29uZmlndXJlIGJyYW5jaGVzIHRocm91Z2ggZ2l0LWNvbmZpZyBhbmQgY2xvbmUgdGhlbS4KKyMgQWxsIGZpbGVzIGFyZSB0ZXN0ZWQgdG8gbWFrZSBzdXJlIGJyYW5jaGVzIHdlcmUgY2xvbmVkIGNvcnJlY3RseS4KKyMgRmluYWxseSwgbWFrZSBhbiB1cGRhdGUgdG8gYnJhbmNoMSBvbiBQNCBzaWRlIHRvIGNoZWNrIGlmIGl0IGlzIGltcG9ydGVkCisjIGNvcnJlY3RseSBieSBnaXQgcDQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcDQgY2xvbmUgc2ltcGxlIGJyYW5jaGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoMiAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoMyAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PS4gLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgJiYKKwkJZ2l0IGxvZyAtLWFsbCAtLWdyYXBoIC0tZGVjb3JhdGUgLS1zdGF0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMSAmJgorCQl0ZXN0IC1mIGZpbGUxICYmCisJCXRlc3QgLWYgZmlsZTIgJiYKKwkJdGVzdCAtZiBmaWxlMyAmJgorCQlncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDIgJiYKKwkJdGVzdCAtZiBmaWxlMSAmJgorCQl0ZXN0IC1mIGZpbGUyICYmCisJCXRlc3QgISAtZiBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMyAmJgorCQl0ZXN0IC1mIGZpbGUxICYmCisJCXRlc3QgLWYgZmlsZTIgJiYKKwkJdGVzdCAtZiBmaWxlMyAmJgorCQlncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQljZCAiJGNsaSIgJiYKKwkJY2QgYnJhbmNoMSAmJgorCQlwNCBlZGl0IGZpbGUyICYmCisJCWVjaG8gZmlsZTJfID4+ZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJ1cGRhdGUgZmlsZTIgaW4gYnJhbmNoMSIgJiYKKwkJY2QgIiRnaXQiICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMSAmJgorCQlnaXQgcDQgcmViYXNlICYmCisJCWdyZXAgZmlsZTJfIGZpbGUyCisJKQorJworCisjIENyZWF0ZSBhIGNvbXBsZXggYnJhbmNoIHN0cnVjdHVyZSBpbiBQNCBkZXBvdCB0byBjaGVjayBpZiB0aGV5IGFyZSBjb3JyZWN0bHkKKyMgY2xvbmVkLiBUaGUgYnJhbmNoZXMgYXJlIGNyZWF0ZWQgZnJvbSBvbGRlciBjaGFuZ2VsaXN0cyB0byBjaGVjayBpZiBnaXQgcDQgaXMKKyMgYWJsZSB0byBjb3JyZWN0bHkgZGV0ZWN0IHRoZW0uCisjIFRoZSBmaW5hbCBleHBlY3RlZCBzdHJ1Y3R1cmUgaXM6CisjIGBicmFuY2gxCisjIHwgYC0gZmlsZTEKKyMgfCBgLSBmaWxlMiAodXBkYXRlZCkKKyMgfCBgLSBmaWxlMworIyBgYnJhbmNoMgorIyB8IGAtIGZpbGUxCisjIHwgYC0gZmlsZTIKKyMgYGJyYW5jaDMKKyMgfCBgLSBmaWxlMQorIyB8IGAtIGZpbGUyICh1cGRhdGVkKQorIyB8IGAtIGZpbGUzCisjIGBicmFuY2g0CisjIHwgYC0gZmlsZTEKKyMgfCBgLSBmaWxlMgorIyBgYnJhbmNoNQorIyAgIGAtIGZpbGUxCisjICAgYC0gZmlsZTIKKyMgICBgLSBmaWxlMwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHA0IGFkZCBjb21wbGV4IGJyYW5jaGVzJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJY2hhbmdlbGlzdD0kKHA0IGNoYW5nZXMgLW0xIC8vZGVwb3QvLi4uIHwgY3V0IC1kIiAiIC1mMikgJiYKKwkJY2hhbmdlbGlzdD0kKCgkY2hhbmdlbGlzdCAtIDUpKSAmJgorCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gxLy4uLkAkY2hhbmdlbGlzdCAvL2RlcG90L2JyYW5jaDQvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiSW50ZWdyYXRlIGJyYW5jaDQgZnJvbSBicmFuY2gxQCR7Y2hhbmdlbGlzdH0iICYmCisJCWNoYW5nZWxpc3Q9JCgoJGNoYW5nZWxpc3QgKyAyKSkgJiYKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS8uLi5AJGNoYW5nZWxpc3QgLy9kZXBvdC9icmFuY2g1Ly4uLiAmJgorCQlwNCBzdWJtaXQgLWQgIkludGVncmF0ZSBicmFuY2g1IGZyb20gYnJhbmNoMUAke2NoYW5nZWxpc3R9IgorCSkKKycKKworIyBDb25maWd1cmUgYnJhbmNoZXMgdGhyb3VnaCBnaXQtY29uZmlnIGFuZCBjbG9uZSB0aGVtLiBnaXQgcDQgd2lsbCBvbmx5IGJlIGFibGUKKyMgdG8gY2xvbmUgdGhlIG9yaWdpbmFsIHN0cnVjdHVyZSBpZiBpdCBpcyBhYmxlIHRvIGRldGVjdCB0aGUgb3JpZ2luIGNoYW5nZWxpc3QKKyMgb2YgZWFjaCBicmFuY2guCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcDQgY2xvbmUgY29tcGxleCBicmFuY2hlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDMgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDQgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0uIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsICYmCisJCWdpdCBsb2cgLS1hbGwgLS1ncmFwaCAtLWRlY29yYXRlIC0tc3RhdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gzICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCWdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSByZWZzL2dpdC1wNC10bXAKKwkpCisnCisKKyMgTW92ZSBicmFuY2gzL2ZpbGUzIHRvIGJyYW5jaDQvZmlsZTMgaW4gYSBzaW5nbGUgY2hhbmdlbGlzdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHA0IHN1Ym1pdCB0byB0d28gYnJhbmNoZXMgaW4gYSBzaW5nbGUgY2hhbmdlbGlzdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IGludGVncmF0ZSAvL2RlcG90L2JyYW5jaDMvZmlsZTMgLy9kZXBvdC9icmFuY2g0L2ZpbGUzICYmCisJCXA0IGRlbGV0ZSAvL2RlcG90L2JyYW5jaDMvZmlsZTMgJiYKKwkJcDQgc3VibWl0IC1kICJNb3ZlIGJyYW5jaDMvZmlsZTMgdG8gYnJhbmNoNC9maWxlMyIKKwkpCisnCisKKyMgQ29uZmlybSB0aGF0IGNoYW5nZXMgdG8gdHdvIGJyYW5jaGVzIGRvbmUgaW4gYSBzaW5nbGUgY2hhbmdlbGlzdAorIyBhcmUgY29ycmVjdGx5IGltcG9ydGVkIGJ5IGdpdCBwNAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHA0IHN5bmMgY2hhbmdlcyB0byB0d28gYnJhbmNoZXMgaW4gdGhlIHNhbWUgY2hhbmdlbGlzdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDMgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDQgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0uIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsICYmCisJCWdpdCBsb2cgLS1hbGwgLS1ncmFwaCAtLWRlY29yYXRlIC0tc3RhdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gzICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCWdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSByZWZzL2dpdC1wNC10bXAKKwkpCisnCisKKyMgQ3JlYXRlIGEgYnJhbmNoIGJ5IGludGVncmF0aW5nIGEgc2luZ2xlIGZpbGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBmaWxlIHN1YnNldCBicmFuY2gnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gxL2ZpbGUxIC8vZGVwb3QvYnJhbmNoNi9maWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgIkludGVncmF0ZSBmaWxlMSBhbG9uZSBmcm9tIGJyYW5jaDEgdG8gYnJhbmNoNiIKKwkpCisnCisKKyMgQ2hlY2sgaWYgZ2l0IHA0IGNyZWF0ZXMgYSBuZXcgYnJhbmNoIGNvbnRhaW5pbmcgYSBzaW5nbGUgZmlsZSwKKyMgaW5zdGVhZCBvZiBrZWVwaW5nIHRoZSBvbGQgZmlsZXMgZnJvbSB0aGUgb3JpZ2luYWwgYnJhbmNoCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQgcDQgY2xvbmUgZmlsZSBzdWJzZXQgYnJhbmNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoMiAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoMyAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoNCAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoNSAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoNiAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PS4gLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgJiYKKwkJZ2l0IGxvZyAtLWFsbCAtLWdyYXBoIC0tZGVjb3JhdGUgLS1zdGF0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgorCQlncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTMgJiYKKwkJISBncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDMgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTMgJiYKKwkJZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2g0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2g1ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2g2ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzCisJKQorJworCisjIENoZWNrIHRoYXQgZXhjbHVkZWQgZmlsZXMgYXJlIG9taXR0ZWQgZHVyaW5nIGltcG9ydAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHA0IGNsb25lIGNvbXBsZXggYnJhbmNoZXMgd2l0aCBleGNsdWRlZCBmaWxlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDMgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDQgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDUgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDYgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0uIC0tZGV0ZWN0LWJyYW5jaGVzIC0vL2RlcG90L2JyYW5jaDEvZmlsZTIgLS8vZGVwb3QvYnJhbmNoMi9maWxlMiAtLy9kZXBvdC9icmFuY2gzL2ZpbGUyIC0vL2RlcG90L2JyYW5jaDQvZmlsZTIgLS8vZGVwb3QvYnJhbmNoNS9maWxlMiAtLy9kZXBvdC9icmFuY2g2L2ZpbGUyIC8vZGVwb3RAYWxsICYmCisJCWdpdCBsb2cgLS1hbGwgLS1ncmFwaCAtLWRlY29yYXRlIC0tc3RhdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDQgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2g1ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMworCSkKKycKKworIyBGcm9tIGEgcmVwb3J0IGluIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE4OTM2ODgKKyMgd2hlcmUgLS11c2UtY2xpZW50LXNwZWMgY2F1c2VkIGJyYW5jaCBwcmVmaXhlcyBub3QgdG8gYmUgcmVtb3ZlZDsKKyMgZXZlcnkgZmlsZSBpbiBnaXQgYXBwZWFyZWQgaW50byBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgYnJhbmNoIG5hbWUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UtY2xpZW50LXNwZWMgZGV0ZWN0LWJyYW5jaGVzIHNldHVwJyAnCisJcm0gLXJmICIkY2xpIiAmJgorCW1rZGlyICIkY2xpIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCWNsaWVudF92aWV3ICIvL2RlcG90L3VzZWNzLy4uLiAvL2NsaWVudC8uLi4iICYmCisJCW1rZGlyIGIxICYmCisJCWVjaG8gYjEvYjEtZmlsZTEgPmIxL2IxLWZpbGUxICYmCisJCXA0IGFkZCBiMS9iMS1maWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImIxL2IxLWZpbGUxIiAmJgorCisJCXA0IGludGVncmF0ZSAvL2RlcG90L3VzZWNzL2IxLy4uLiAvL2RlcG90L3VzZWNzL2IyLy4uLiAmJgorCQlwNCBzdWJtaXQgLWQgImIxIC0+IGIyIiAmJgorCQlwNCBicmFuY2ggLWkgPDwtRU9GICYmCisJCUJyYW5jaDogYjIKKwkJVmlldzogLy9kZXBvdC91c2Vjcy9iMS8uLi4gLy9kZXBvdC91c2Vjcy9iMi8uLi4KKwkJRU9GCisKKwkJZWNobyBiMi9iMi1maWxlMiA+YjIvYjItZmlsZTIgJiYKKwkJcDQgYWRkIGIyL2IyLWZpbGUyICYmCisJCXA0IHN1Ym1pdCAtZCAiYjIvYjItZmlsZTIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UtY2xpZW50LXNwZWMgZGV0ZWN0LWJyYW5jaGVzIGZpbGVzIGluIHRvcC1sZXZlbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1kZXRlY3QtYnJhbmNoZXMgLS11c2UtY2xpZW50LXNwZWMgLy9kZXBvdC91c2Vjc0BhbGwgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciBwNC91c2Vjcy9iMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiMS1maWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiMi1maWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiMiAmJgorCisJCWdpdCBjaGVja291dCAtYiBiMiBwNC91c2Vjcy9iMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiMS1maWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiMi1maWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlLWNsaWVudC1zcGVjIGRldGVjdC1icmFuY2hlcyBza2lwcyBicmFuY2hlcyBzZXR1cCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvdXNlY3MvYjEvLi4uIC8vZGVwb3QvdXNlY3MvYjMvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiYjEgLT4gYjMiICYmCisJCXA0IGJyYW5jaCAtaSA8PC1FT0YgJiYKKwkJQnJhbmNoOiBiMworCQlWaWV3OiAvL2RlcG90L3VzZWNzL2IxLy4uLiAvL2RlcG90L3VzZWNzL2IzLy4uLgorCQlFT0YKKworCQllY2hvIGIzL2IzLWZpbGUzXzEgPmIzL2IzLWZpbGUzXzEgJiYKKwkJZWNobyBiMy9iMy1maWxlM18yID5iMy9iMy1maWxlM18yICYmCisJCXA0IGFkZCBiMy9iMy1maWxlM18xICYmCisJCXA0IGFkZCBiMy9iMy1maWxlM18yICYmCisJCXA0IHN1Ym1pdCAtZCAiYjMvYjMtZmlsZTNfMSBiMy9iMy1maWxlM18yIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlLWNsaWVudC1zcGVjIGRldGVjdC1icmFuY2hlcyBza2lwcyBicmFuY2hlcycgJworCWNsaWVudF92aWV3ICIvL2RlcG90L3VzZWNzLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICItLy9kZXBvdC91c2Vjcy9iMy8uLi4gLy9jbGllbnQvYjMvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1kZXRlY3QtYnJhbmNoZXMgLS11c2UtY2xpZW50LXNwZWMgLy9kZXBvdC91c2Vjc0BhbGwgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvcDQvdXNlY3MvYjMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZS1jbGllbnQtc3BlYyBkZXRlY3QtYnJhbmNoZXMgc2tpcHMgZmlsZXMgaW4gYnJhbmNoZXMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC91c2Vjcy8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiLS8vZGVwb3QvdXNlY3MvYjMvYjMtZmlsZTNfMSAvL2NsaWVudC9iMy9iMy1maWxlM18xIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1kZXRlY3QtYnJhbmNoZXMgLS11c2UtY2xpZW50LXNwZWMgLy9kZXBvdC91c2Vjc0BhbGwgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciBwNC91c2Vjcy9iMyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiMS1maWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiMy1maWxlM18yICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGIzLWZpbGUzXzEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RhcnQgcDRkJyAnCisJc3RvcF9hbmRfY2xlYW51cF9wNGQgJiYKKwlzdGFydF9wNGQKKycKKworIworIyAxOiAvL2RlcG90L2JyYW5jaDEvYmFzZS9maWxlMQorIyAgICAvL2RlcG90L2JyYW5jaDEvYmFzZS9maWxlMgorIyAgICAvL2RlcG90L2JyYW5jaDEvYmFzZS9kaXIvc3ViX2ZpbGUxCisjIDI6IGludGVncmF0ZSAvL2RlcG90L2JyYW5jaDEvYmFzZS8uLi4gLT4gLy9kZXBvdC9icmFuY2gyL2Jhc2UvLi4uCisjIDM6IC8vZGVwb3QvYnJhbmNoMS9iYXNlL2ZpbGUzCisjIDQ6IC8vZGVwb3QvYnJhbmNoMS9iYXNlL2ZpbGUyIChlZGl0KQorIyA1OiBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gxL2Jhc2UvLi4uIC0+IC8vZGVwb3QvYnJhbmNoMy9iYXNlLy4uLgorIworIyBOb3RlOiB0aGUgY2xpZW50IHZpZXcgcmVtb3ZlcyB0aGUgImJhc2UiIGZvbGRlciBmcm9tIHRoZSB3b3Jrc3BhY2UKKyMgICAgICAgYW5kIG1vdmVzIHN1Yl9maWxlMSBvbmUgbGV2ZWwgdXAuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc2ltcGxlIHA0IGJyYW5jaGVzIHdpdGggY29tbW9uIGJhc2UgZm9sZGVyIG9uIGVhY2ggYnJhbmNoJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJY2xpZW50X3ZpZXcgIi8vZGVwb3QvYnJhbmNoMS9iYXNlLy4uLiAvL2NsaWVudC9icmFuY2gxLy4uLiIgXAorCQkJICAgICIvL2RlcG90L2JyYW5jaDEvYmFzZS9kaXIvc3ViX2ZpbGUxIC8vY2xpZW50L2JyYW5jaDEvc3ViX2ZpbGUxIiBcCisJCQkgICAgIi8vZGVwb3QvYnJhbmNoMi9iYXNlLy4uLiAvL2NsaWVudC9icmFuY2gyLy4uLiIgXAorCQkJICAgICIvL2RlcG90L2JyYW5jaDMvYmFzZS8uLi4gLy9jbGllbnQvYnJhbmNoMy8uLi4iICYmCisJCW1rZGlyIC1wIGJyYW5jaDEgJiYKKwkJY2QgYnJhbmNoMSAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQllY2hvIGZpbGUyID5maWxlMiAmJgorCQlta2RpciBkaXIgJiYKKwkJZWNobyBzdWJfZmlsZTEgPnN1Yl9maWxlMSAmJgorCQlwNCBhZGQgZmlsZTEgZmlsZTIgc3ViX2ZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiQ3JlYXRlIGJyYW5jaDEiICYmCisJCXA0IGludGVncmF0ZSAvL2RlcG90L2JyYW5jaDEvYmFzZS8uLi4gLy9kZXBvdC9icmFuY2gyL2Jhc2UvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiSW50ZWdyYXRlIGJyYW5jaDIgZnJvbSBicmFuY2gxIiAmJgorCQllY2hvIGZpbGUzID5maWxlMyAmJgorCQlwNCBhZGQgZmlsZTMgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgZmlsZTMgaW4gYnJhbmNoMSIgJiYKKwkJcDQgb3BlbiBmaWxlMiAmJgorCQllY2hvIHVwZGF0ZSA+PmZpbGUyICYmCisJCXA0IHN1Ym1pdCAtZCAidXBkYXRlIGZpbGUyIGluIGJyYW5jaDEiICYmCisJCXA0IGludGVncmF0ZSAvL2RlcG90L2JyYW5jaDEvYmFzZS8uLi4gLy9kZXBvdC9icmFuY2gzL2Jhc2UvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiSW50ZWdyYXRlIGJyYW5jaDMgZnJvbSBicmFuY2gxIgorCSkKKycKKworIyBDb25maWd1cmUgYnJhbmNoZXMgdGhyb3VnaCBnaXQtY29uZmlnIGFuZCBjbG9uZSB0aGVtLgorIyBBbGwgZmlsZXMgYXJlIHRlc3RlZCB0byBtYWtlIHN1cmUgYnJhbmNoZXMgd2VyZSBjbG9uZWQgY29ycmVjdGx5LgorIyBGaW5hbGx5LCBtYWtlIGFuIHVwZGF0ZSB0byBicmFuY2gxIG9uIFA0IHNpZGUgdG8gY2hlY2sgaWYgaXQgaXMgaW1wb3J0ZWQKKyMgY29ycmVjdGx5IGJ5IGdpdCBwNC4KKyMgZ2l0IHA0IGlzIGV4cGVjdGVkIHRvIHVzZSB0aGUgY2xpZW50IHZpZXcgdG8gYWxzbyBub3QgaW5jbHVkZSB0aGUgY29tbW9uCisjICJiYXNlIiBmb2xkZXIgaW4gdGhlIGltcG9ydGVkIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcDQgY2xvbmUgc2ltcGxlIGJyYW5jaGVzIHdpdGggYmFzZSBmb2xkZXIgb24gc2VydmVyIHNpZGUnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2gyICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2gzICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9LiAtLXVzZS1jbGllbnQtc3BlYyAgLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgJiYKKwkJZ2l0IGxvZyAtLWFsbCAtLWdyYXBoIC0tZGVjb3JhdGUgLS1zdGF0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMSAmJgorCQl0ZXN0IC1mIGZpbGUxICYmCisJCXRlc3QgLWYgZmlsZTIgJiYKKwkJdGVzdCAtZiBmaWxlMyAmJgorCQl0ZXN0IC1mIHN1Yl9maWxlMSAmJgorCQlncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDIgJiYKKwkJdGVzdCAtZiBmaWxlMSAmJgorCQl0ZXN0IC1mIGZpbGUyICYmCisJCXRlc3QgISAtZiBmaWxlMyAmJgorCQl0ZXN0IC1mIHN1Yl9maWxlMSAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMyAmJgorCQl0ZXN0IC1mIGZpbGUxICYmCisJCXRlc3QgLWYgZmlsZTIgJiYKKwkJdGVzdCAtZiBmaWxlMyAmJgorCQl0ZXN0IC1mIHN1Yl9maWxlMSAmJgorCQlncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQljZCAiJGNsaSIgJiYKKwkJY2QgYnJhbmNoMSAmJgorCQlwNCBlZGl0IGZpbGUyICYmCisJCWVjaG8gZmlsZTJfID4+ZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJ1cGRhdGUgZmlsZTIgaW4gYnJhbmNoMSIgJiYKKwkJY2QgIiRnaXQiICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMSAmJgorCQlnaXQgcDQgcmViYXNlICYmCisJCWdyZXAgZmlsZTJfIGZpbGUyCisJKQorJworCisjIE5vdyB1cGRhdGUgYSBmaWxlIGluIG9uZSBvZiB0aGUgYnJhbmNoZXMgaW4gZ2l0IGFuZCBzdWJtaXQgdG8gUDQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1VwZGF0ZSBhIGZpbGUgaW4gZ2l0IHNpZGUgYW5kIHN1Ym1pdCB0byBQNCB1c2luZyBjbGllbnQgdmlldycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMSAmJgorCQllY2hvICJjbGllbnQgc3BlYyIgPj4gZmlsZTEgJiYKKwkJZ2l0IGFkZCAtdSAuICYmCisJCWdpdCBjb21taXQgLW0gInVwZGF0ZSBmaWxlMSBpbiBicmFuY2gxIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgLS12ZXJib3NlICYmCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jIC4uLiAmJgorCQljZCBicmFuY2gxICYmCisJCWdyZXAgImNsaWVudCBzcGVjIiBmaWxlMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdGFydCBwNGQgKGNhc2UgZm9sZGluZyBlbmFibGVkKScgJworCXN0b3BfYW5kX2NsZWFudXBfcDRkICYmCisJc3RhcnRfcDRkIC1DMQorJworCisjCisjIDE6IC8vZGVwb3QvbWFpbi9tZjEKKyMgMjogaW50ZWdyYXRlIC8vZGVwb3QvbWFpbi8uLi4gLT4gLy9kZXBvdC9icmFuY2gxLy4uLgorIyAzOiAvL2RlcG90L21haW4vbWYyCisjIDQ6IC8vZGVwb3QvQlJBTkNIMS9CMWYzCisjIDU6IC8vZGVwb3QvYnJhbmNoMS9iMWY0CisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFDQVNFX0lOU0VOU0lUSVZFX0ZTICdiYXNpYyBwNCBicmFuY2hlcyBmb3IgY2FzZSBmb2xkaW5nJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJbWtkaXIgLXAgbWFpbiAmJgorCisJCWVjaG8gbWYxID5tYWluL21mMSAmJgorCQlwNCBhZGQgbWFpbi9tZjEgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL21mMSIgJiYKKworCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9tYWluLy4uLiAvL2RlcG90L2JyYW5jaDEvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiaW50ZWdyYXRlIG1haW4gdG8gYnJhbmNoMSIgJiYKKworCQllY2hvIG1mMiA+bWFpbi9tZjIgJiYKKwkJcDQgYWRkIG1haW4vbWYyICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9tZjIiICYmCisKKwkJbWtkaXIgQlJBTkNIMSAmJgorCQllY2hvIEIxZjMgPkJSQU5DSDEvQjFmMyAmJgorCQlwNCBhZGQgQlJBTkNIMS9CMWYzICYmCisJCXA0IHN1Ym1pdCAtZCAiQlJBTkNIMS9CMWYzIiAmJgorCisJCWVjaG8gYjFmNCA+YnJhbmNoMS9iMWY0ICYmCisJCXA0IGFkZCBicmFuY2gxL2IxZjQgJiYKKwkJcDQgc3VibWl0IC1kICJicmFuY2gxL2IxZjQiCisJKQorJworCisjIENoZWNrIHRoYXQgZmlsZXMgYXJlIHByb3Blcmx5IHNwbGl0IGFjcm9zcyBicmFuY2hlcyB3aGVuIGlnbm9yZWNhc2UgaXMgc2V0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICFDQVNFX0lOU0VOU0lUSVZFX0ZTICdnaXQgcDQgY2xvbmUsIGJyYW5jaExpc3QgYnJhbmNoIGRlZmluaXRpb24sIGlnbm9yZWNhc2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmJyYW5jaExpc3QgbWFpbjpicmFuY2gxICYmCisJCWdpdCBjb25maWcgLS10eXBlPWJvb2wgY29yZS5pZ25vcmVDYXNlIHRydWUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0uIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsICYmCisKKwkJZ2l0IGxvZyAtLWFsbCAtLWdyYXBoIC0tZGVjb3JhdGUgLS1zdGF0ICYmCisKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9tYXN0ZXIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgbWYxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIG1mMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBCMWYzICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGIxZjQgJiYKKworCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgbWYxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIG1mMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBCMWYzICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGIxZjQKKwkpCisnCisKKyMgQ2hlY2sgdGhhdCBmaWxlcyBhcmUgcHJvcGVybHkgc3BsaXQgYWNyb3NzIGJyYW5jaGVzIHdoZW4gaWdub3JlY2FzZSBpcyBzZXQsIHVzZS1jbGllbnQtc3BlYyBjYXNlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFDQVNFX0lOU0VOU0lUSVZFX0ZTICdnaXQgcDQgY2xvbmUgd2l0aCBjbGllbnQtc3BlYywgYnJhbmNoTGlzdCBicmFuY2ggZGVmaW5pdGlvbiwgaWdub3JlY2FzZScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5icmFuY2hMaXN0IG1haW46YnJhbmNoMSAmJgorCQlnaXQgY29uZmlnIC0tdHlwZT1ib29sIGNvcmUuaWdub3JlQ2FzZSB0cnVlICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9LiAtLXVzZS1jbGllbnQtc3BlYyAtLWRldGVjdC1icmFuY2hlcyAvL2RlcG90QGFsbCAmJgorCisJCWdpdCBsb2cgLS1hbGwgLS1ncmFwaCAtLWRlY29yYXRlIC0tc3RhdCAmJgorCisJCWdpdCByZXNldCAtLWhhcmQgcDQvbWFzdGVyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIG1mMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBtZjIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgQjFmMyAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiMWY0ICYmCisKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIG1mMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtZjIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgQjFmMyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiMWY0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MDItZ2l0LXA0LWZpbGV0eXBlLnNoIGIvdC90OTgwMi1naXQtcDQtZmlsZXR5cGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTRlZGViZTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODAyLWdpdC1wNC1maWxldHlwZS5zaApAQCAtMCwwICsxLDMzNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBmaWxldHlwZSB0ZXN0cycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKKyMKKyMgVGhpcyBzZXJpZXMgb2YgdGVzdHMgY2hlY2tzIG5ld2xpbmUgaGFuZGxpbmcgIEJvdGggcDQgYW5kCisjIGdpdCBzdG9yZSBuZXdsaW5lcyBhcyBcbiwgYW5kIGhhdmUgb3B0aW9ucyB0byBjaG9vc2UgaG93CisjIG5ld2xpbmVzIGFwcGVhciBpbiBjaGVja2VkLW91dCBmaWxlcy4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3A0IGNsaWVudCBuZXdsaW5lcywgdW5peCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IGNsaWVudCAtbyB8IHNlZCAiL0xpbmVFbmQvcy86LiovOnVuaXgvIiB8IHA0IGNsaWVudCAtaSAmJgorCQlwcmludGYgInVuaXhcbmNybGZcbiIgPmYtdW5peCAmJgorCQlwcmludGYgInVuaXhcclxuY3JsZlxyXG4iID5mLXVuaXgtYXMtY3JsZiAmJgorCQlwNCBhZGQgLXQgdGV4dCBmLXVuaXggJiYKKwkJcDQgc3VibWl0IC1kIGYtdW5peCAmJgorCisJCSMgTGluZUVuZDogdW5peDsgc2hvdWxkIGJlIG5vIGNoYW5nZSBhZnRlciBzeW5jCisJCWNwIGYtdW5peCBmLXVuaXgtb3JpZyAmJgorCQlwNCBzeW5jIC1mICYmCisJCXRlc3RfY21wIGYtdW5peC1vcmlnIGYtdW5peCAmJgorCisJCSMgbWFrZSBzdXJlIHN0b3JlZCBpbiByZXBvIGFzIHVuaXggbmV3bGluZXMKKwkJIyB1c2Ugc2VkIHRvIGVhdCBweXRob24tYXBwZW5kZWQgbmV3bGluZQorCQlwNCAtRyBwcmludCAvL2RlcG90L2YtdW5peCB8IG1hcnNoYWxfZHVtcCBkYXRhIDIgfFwKKwkJICAgIHNlZCBcJGQgPmYtdW5peC1wNC1wcmludCAmJgorCQl0ZXN0X2NtcCBmLXVuaXgtb3JpZyBmLXVuaXgtcDQtcHJpbnQgJiYKKworCQkjIHN3aXRjaCB0byB3aW4sIG1ha2Ugc3VyZSBsZiAtPiBjcmxmCisJCXA0IGNsaWVudCAtbyB8IHNlZCAiL0xpbmVFbmQvcy86LiovOndpbi8iIHwgcDQgY2xpZW50IC1pICYmCisJCXA0IHN5bmMgLWYgJiYKKwkJdGVzdF9jbXAgZi11bml4LWFzLWNybGYgZi11bml4CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwNCBjbGllbnQgbmV3bGluZXMsIHdpbicgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IGNsaWVudCAtbyB8IHNlZCAiL0xpbmVFbmQvcy86LiovOndpbi8iIHwgcDQgY2xpZW50IC1pICYmCisJCXByaW50ZiAid2luXHJcbmNybGZcclxuIiA+Zi13aW4gJiYKKwkJcHJpbnRmICJ3aW5cbmNybGZcbiIgPmYtd2luLWFzLWxmICYmCisJCXA0IGFkZCAtdCB0ZXh0IGYtd2luICYmCisJCXA0IHN1Ym1pdCAtZCBmLXdpbiAmJgorCisJCSMgTGluZUVuZDogd2luOyBzaG91bGQgYmUgbm8gY2hhbmdlIGFmdGVyIHN5bmMKKwkJY3AgZi13aW4gZi13aW4tb3JpZyAmJgorCQlwNCBzeW5jIC1mICYmCisJCXRlc3RfY21wIGYtd2luLW9yaWcgZi13aW4gJiYKKworCQkjIG1ha2Ugc3VyZSBzdG9yZWQgaW4gcmVwbyBhcyB1bml4IG5ld2xpbmVzCisJCSMgdXNlIHNlZCB0byBlYXQgcHl0aG9uLWFwcGVuZWQgbmV3bGluZQorCQlwNCAtRyBwcmludCAvL2RlcG90L2Ytd2luIHwgbWFyc2hhbF9kdW1wIGRhdGEgMiB8XAorCQkgICAgc2VkIFwkZCA+Zi13aW4tcDQtcHJpbnQgJiYKKwkJdGVzdF9jbXAgZi13aW4tYXMtbGYgZi13aW4tcDQtcHJpbnQgJiYKKworCQkjIHN3aXRjaCB0byB1bml4LCBtYWtlIHN1cmUgbGYgLT4gY3JsZgorCQlwNCBjbGllbnQgLW8gfCBzZWQgIi9MaW5lRW5kL3MvOi4qLzp1bml4LyIgfCBwNCBjbGllbnQgLWkgJiYKKwkJcDQgc3luYyAtZiAmJgorCQl0ZXN0X2NtcCBmLXdpbi1hcy1sZiBmLXdpbgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5zdXJlIGJsb2JzIHN0b3JlIG9ubHkgbGYgbmV3bGluZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgcDQgc3luYyAvL2RlcG90QGFsbCAmJgorCisJCSMgdmVyaWZ5IHRoZSBmaWxlcyBpbiAuZ2l0IGFyZSBzdG9yZWQgb25seSB3aXRoIG5ld2xpbmVzCisJCW89JChnaXQgbHMtdHJlZSBwNC9tYXN0ZXIgLS0gZi11bml4IHwgY3V0IC1mMSB8IGN1dCAtZFwgIC1mMykgJiYKKwkJZ2l0IGNhdC1maWxlIGJsb2IgJG8gPmYtdW5peC1ibG9iICYmCisJCXRlc3RfY21wICIkY2xpIi9mLXVuaXgtb3JpZyBmLXVuaXgtYmxvYiAmJgorCisJCW89JChnaXQgbHMtdHJlZSBwNC9tYXN0ZXIgLS0gZi13aW4gfCBjdXQgLWYxIHwgY3V0IC1kXCAgLWYzKSAmJgorCQlnaXQgY2F0LWZpbGUgYmxvYiAkbyA+Zi13aW4tYmxvYiAmJgorCQl0ZXN0X2NtcCAiJGNsaSIvZi13aW4tYXMtbGYgZi13aW4tYmxvYiAmJgorCisJCXJtIGYtdW5peC1ibG9iIGYtd2luLWJsb2IKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGF0dHJpYnV0ZXMgc2V0dGluZyBlb2w9bGYgcHJvZHVjZXMgbGYgbmV3bGluZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCSMgY2hlY2tvdXQgdGhlIGZpbGVzIGFuZCBtYWtlIHN1cmUgY29yZS5lb2wgd29ya3MgYXMgcGxhbm5lZAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyAiKiBlb2w9bGYiID4uZ2l0YXR0cmlidXRlcyAmJgorCQlnaXQgcDQgc3luYyAvL2RlcG90QGFsbCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyIHA0L21hc3RlciAmJgorCQl0ZXN0X2NtcCAiJGNsaSIvZi11bml4LW9yaWcgZi11bml4ICYmCisJCXRlc3RfY21wICIkY2xpIi9mLXdpbi1hcy1sZiBmLXdpbgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0YXR0cmlidXRlcyBzZXR0aW5nIGVvbD1jcmxmIHByb2R1Y2VzIGNybGYgbmV3bGluZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCSMgY2hlY2tvdXQgdGhlIGZpbGVzIGFuZCBtYWtlIHN1cmUgY29yZS5lb2wgd29ya3MgYXMgcGxhbm5lZAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyAiKiBlb2w9Y3JsZiIgPi5naXRhdHRyaWJ1dGVzICYmCisJCWdpdCBwNCBzeW5jIC8vZGVwb3RAYWxsICYmCisJCWdpdCBjaGVja291dCAtYiBtYXN0ZXIgcDQvbWFzdGVyICYmCisJCXRlc3RfY21wICIkY2xpIi9mLXVuaXgtYXMtY3JsZiBmLXVuaXggJiYKKwkJdGVzdF9jbXAgIiRjbGkiL2Ytd2luLW9yaWcgZi13aW4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NybGYgY2xlYW51cCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCXJtIGYtdW5peC1vcmlnIGYtdW5peC1hcy1jcmxmICYmCisJCXJtIGYtd2luLW9yaWcgZi13aW4tYXMtbGYgJiYKKwkJcDQgY2xpZW50IC1vIHwgc2VkICIvTGluZUVuZC9zLzouKi86dW5peC8iIHwgcDQgY2xpZW50IC1pICYmCisJCXA0IHN5bmMgLWYKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3V0Zi0xNiBmaWxlIGNyZWF0ZScgJworCSgKKwkJY2QgIiRjbGkiICYmCisKKwkJIyBwNCBzYXZlcyB0aGlzIHZlcmJhdGltCisJCXByaW50ZiAidGhyZWVcbmxpbmVcbnRleHRcbiIgPmYtYXNjaWkgJiYKKwkJcDQgYWRkIC10IHRleHQgZi1hc2NpaSAmJgorCisJCSMgcDQgYWRkcyBcMzc3XDM3NiBoZWFkZXIKKwkJY3AgZi1hc2NpaSBmLWFzY2lpLWFzLXV0ZjE2ICYmCisJCXA0IGFkZCAtdCB1dGYxNiBmLWFzY2lpLWFzLXV0ZjE2ICYmCisKKwkJIyBwNCBzYXZlcyB0aGlzIGV4YWN0bHkgYXMgaWNvbnYgcHJvZHVjZWQgaXQKKwkJcHJpbnRmICJ0aHJlZVxubGluZVxudGV4dFxuIiB8IGljb252IC1mIGFzY2lpIC10IHV0Zi0xNiA+Zi11dGYxNiAmJgorCQlwNCBhZGQgLXQgdXRmMTYgZi11dGYxNiAmJgorCisJCSMgdGhpcyBhbHNvIGlzIHVuY2hhbmdlZAorCQljcCBmLXV0ZjE2IGYtdXRmMTYtYXMtdGV4dCAmJgorCQlwNCBhZGQgLXQgdGV4dCBmLXV0ZjE2LWFzLXRleHQgJiYKKworCQlwNCBzdWJtaXQgLWQgImYgZmlsZXMiICYmCisKKwkJIyBmb3JjZSB1cGRhdGUgb2YgY2xpZW50IGZpbGVzCisJCXA0IHN5bmMgLWYKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3V0Zi0xNiBmaWxlIHRlc3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisKKwkJdGVzdF9jbXAgIiRjbGkvZi1hc2NpaSIgZi1hc2NpaSAmJgorCQl0ZXN0X2NtcCAiJGNsaS9mLWFzY2lpLWFzLXV0ZjE2IiBmLWFzY2lpLWFzLXV0ZjE2ICYmCisJCXRlc3RfY21wICIkY2xpL2YtdXRmMTYiIGYtdXRmMTYgJiYKKwkJdGVzdF9jbXAgIiRjbGkvZi11dGYxNi1hcy10ZXh0IiBmLXV0ZjE2LWFzLXRleHQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tleXdvcmQgZmlsZSBjcmVhdGUnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCisJCXByaW50ZiAiaWRcblwkSWRcJFxuXCRBdXRob3JcJFxudGV4dFxuIiA+ay10ZXh0LWsgJiYKKwkJcDQgYWRkIC10IHRleHQrayBrLXRleHQtayAmJgorCisJCWNwIGstdGV4dC1rIGstdGV4dC1rbyAmJgorCQlwNCBhZGQgLXQgdGV4dCtrbyBrLXRleHQta28gJiYKKworCQljYXQgay10ZXh0LWsgfCBpY29udiAtZiBhc2NpaSAtdCB1dGYtMTYgPmstdXRmMTYtayAmJgorCQlwNCBhZGQgLXQgdXRmMTYrayBrLXV0ZjE2LWsgJiYKKworCQljcCBrLXV0ZjE2LWsgay11dGYxNi1rbyAmJgorCQlwNCBhZGQgLXQgdXRmMTYra28gay11dGYxNi1rbyAmJgorCisJCXA0IHN1Ym1pdCAtZCAiayBmaWxlcyIgJiYKKwkJcDQgc3luYyAtZgorCSkKKycKKworYnVpbGRfc211c2goKSB7CisJY2F0ID5rX3NtdXNoLnB5IDw8LVxFT0YgJiYKKwlpbXBvcnQgcmUsIHN5cworCXN5cy5zdGRvdXQud3JpdGUocmUuc3ViKHInKD9pKVwkKElkfEhlYWRlcnxBdXRob3J8RGF0ZXxEYXRlVGltZXxDaGFuZ2V8RmlsZXxSZXZpc2lvbik6W14kXSpcJCcsIHInJFwxJCcsIHN5cy5zdGRpbi5yZWFkKCkpKQorCUVPRgorCWNhdCA+a29fc211c2gucHkgPDwtXEVPRgorCWltcG9ydCByZSwgc3lzCisJc3lzLnN0ZG91dC53cml0ZShyZS5zdWIocicoP2kpXCQoSWR8SGVhZGVyKTpbXiRdKlwkJywgcickXDEkJywgc3lzLnN0ZGluLnJlYWQoKSkpCisJRU9GCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tleXdvcmQgZmlsZSB0ZXN0JyAnCisJYnVpbGRfc211c2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLWYga19zbXVzaC5weSBrb19zbXVzaC5weSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKworCQkjIHRleHQsIGVuc3VyZSB1bmV4cGFuZGVkCisJCSIkUFlUSE9OX1BBVEgiICIkVFJBU0hfRElSRUNUT1JZL2tfc211c2gucHkiIDwiJGNsaS9rLXRleHQtayIgPmNsaS1rLXRleHQtay1zbXVzaCAmJgorCQl0ZXN0X2NtcCBjbGktay10ZXh0LWstc211c2ggay10ZXh0LWsgJiYKKwkJIiRQWVRIT05fUEFUSCIgIiRUUkFTSF9ESVJFQ1RPUlkva29fc211c2gucHkiIDwiJGNsaS9rLXRleHQta28iID5jbGktay10ZXh0LWtvLXNtdXNoICYmCisJCXRlc3RfY21wIGNsaS1rLXRleHQta28tc211c2ggay10ZXh0LWtvICYmCisKKwkJIyB1dGYxNiwgZXZlbiB0aG91Z2ggcDQgZXhwYW5kcyBrZXl3b3JkcywgZ2l0IHA0IGRvZXMgbm90CisJCSMgdHJ5IHRvIHVuZG8gdGhhdAorCQl0ZXN0X2NtcCAiJGNsaS9rLXV0ZjE2LWsiIGstdXRmMTYtayAmJgorCQl0ZXN0X2NtcCAiJGNsaS9rLXV0ZjE2LWtvIiBrLXV0ZjE2LWtvCisJKQorJworCitidWlsZF9nZW5kb3VibGUoKSB7CisJY2F0ID5nZW5kb3VibGUucHkgPDwtXEVPRgorCWltcG9ydCBzeXMKKwlpbXBvcnQgc3RydWN0CisKKwlzID0gc3RydWN0LnBhY2soYiI+TEwxOHMiLAorCQkJMHgwMDA1MTYwNywgICMgQXBwbGVEb3VibGUKKwkJCTB4MDAwMjAwMDAsICAjIHZlcnNpb24gMgorCQkJYiIiICAgICAgICAgICMgcGFkIHRvIDI2IGJ5dGVzCisJKQorCWdldGF0dHIoc3lzLnN0ZG91dCwgJ2J1ZmZlcicsIHN5cy5zdGRvdXQpLndyaXRlKHMpCisJRU9GCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lnbm9yZSBhcHBsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtZiBnZW5kb3VibGUucHkgJiYKKwlidWlsZF9nZW5kb3VibGUgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0LXRvb2wgZ2VucmFuZG9tIGFwcGxlIDEwMjQgPmRvdWJsZS5wbmcgJiYKKwkJIiRQWVRIT05fUEFUSCIgIiRUUkFTSF9ESVJFQ1RPUlkvZ2VuZG91YmxlLnB5IiA+JWRvdWJsZS5wbmcgJiYKKwkJcDQgYWRkIC10IGFwcGxlIGRvdWJsZS5wbmcgJiYKKwkJcDQgc3VibWl0IC1kIGFwcGxlZG91YmxlCisJKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdCAhIC1mIGRvdWJsZS5wbmcKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NyZWF0ZSBwNCBzeW1saW5rJyAnCisJY2QgIiRjbGkiICYmCisJbG4gLXMgc3ltbGluay10YXJnZXQgc3ltbGluayAmJgorCXA0IGFkZCBzeW1saW5rICYmCisJcDQgc3VibWl0IC1kICJhZGQgc3ltbGluayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZW5zdXJlIHA0IHN5bWxpbmsgcGFyc2VkIGNvcnJlY3RseScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdCAtTCBzeW1saW5rICYmCisJCXRlc3QgJChyZWFkbGluayBzeW1saW5rKSA9IHN5bWxpbmstdGFyZ2V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdlbXB0eSBzeW1saW5rIHRhcmdldCcgJworCSgKKwkJIyBmaXJzdCBjcmVhdGUgdGhlIGZpbGUgYXMgYSBmaWxlCisJCWNkICIkY2xpIiAmJgorCQk+ZW1wdHktc3ltbGluayAmJgorCQlwNCBhZGQgZW1wdHktc3ltbGluayAmJgorCQlwNCBzdWJtaXQgLWQgImFkZCBlbXB0eS1zeW1saW5rIGFzIGEgZmlsZSIKKwkpICYmCisJKAorCQkjIG5vdyBjaGFuZ2UgaXQgdG8gYmUgYSBzeW1saW5rIHRvICJ0YXJnZXQxIgorCQljZCAiJGNsaSIgJiYKKwkJcDQgZWRpdCBlbXB0eS1zeW1saW5rICYmCisJCXA0IHJlb3BlbiAtdCBzeW1saW5rIGVtcHR5LXN5bWxpbmsgJiYKKwkJcm0gZW1wdHktc3ltbGluayAmJgorCQlsbiAtcyB0YXJnZXQxIGVtcHR5LXN5bWxpbmsgJiYKKwkJcDQgYWRkIGVtcHR5LXN5bWxpbmsgJiYKKwkJcDQgc3VibWl0IC1kICJtYWtlIGVtcHR5LXN5bWxpbmsgcG9pbnQgdG8gdGFyZ2V0MSIKKwkpICYmCisJKAorCQkjIEhhY2sgdGhlIHA0IGRlcG90IHRvIG1ha2UgdGhlIHN5bWxpbmsgcG9pbnQgdG8gbm90aGluZzsKKwkJIyB0aGlzIHNob3VsZCBub3QgaGFwcGVuIGluIHJlYWxpdHksIGJ1dCBzaG93cyB1cAorCQkjIGluIHA0IHJlcG9zIGluIHRoZSB3aWxkLgorCQkjCisJCSMgVGhlIHNlZCBleHByZXNzaW9uIGNoYW5nZXMgdGhpczoKKwkJIyAgICAgQEAKKwkJIyAgICAgdGV4dAorCQkjICAgICBAdGFyZ2V0MQorCQkjICAgICBACisJCSMgdG8gdGhpczoKKwkJIyAgICAgQEAKKwkJIyAgICAgdGV4dAorCQkjICAgICBAQAorCQkjCisJCWNkICIkZGIvZGVwb3QiICYmCisJCXNlZCAiL0B0YXJnZXQxL3s7IHMvdGFyZ2V0MS9ALzsgbjsgZDsgfSIgXAorCQkgICAgZW1wdHktc3ltbGluayx2ID5lbXB0eS1zeW1saW5rLHYudG1wICYmCisJCW12IGVtcHR5LXN5bWxpbmssdi50bXAgZW1wdHktc3ltbGluayx2CisJKSAmJgorCSgKKwkJIyBNYWtlIHN1cmUgc3ltbGluayByZWFsbHkgaXMgZW1wdHkuICBBc2tpbmcKKwkJIyBwNCB0byBzeW5jIGhlcmUgd2lsbCBtYWtlIGl0IGdlbmVyYXRlIGVycm9ycy4KKwkJY2QgIiRjbGkiICYmCisJCXA0IHByaW50IC1xIC8vZGVwb3QvZW1wdHktc3ltbGluayMyID5vdXQgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IG91dAorCSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKworCSMgbWFrZSBzdXJlIGdpdCBwNCBoYW5kbGVzIGl0IHdpdGhvdXQgZXJyb3IKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCisJIyBmaXggdGhlIHN5bWxpbmssIG1ha2UgaXQgcG9pbnQgdG8gInRhcmdldDIiCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgb3BlbiBlbXB0eS1zeW1saW5rICYmCisJCXJtIGVtcHR5LXN5bWxpbmsgJiYKKwkJbG4gLXMgdGFyZ2V0MiBlbXB0eS1zeW1saW5rICYmCisJCXA0IHN1Ym1pdCAtZCAibWFrZSBlbXB0eS1zeW1saW5rIHBvaW50IHRvIHRhcmdldDIiCisJKSAmJgorCWNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0ICQocmVhZGxpbmsgZW1wdHktc3ltbGluaykgPSB0YXJnZXQyCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MDMtZ2l0LXA0LXNoZWxsLW1ldGFjaGFycy5zaCBiL3QvdDk4MDMtZ2l0LXA0LXNoZWxsLW1ldGFjaGFycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOTEzMjc3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwMy1naXQtcDQtc2hlbGwtbWV0YWNoYXJzLnNoCkBAIC0wLDAgKzEsMTA4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHRyYW5zcGFyZW5jeSB0byBzaGVsbCBtZXRhY2hhcnMgaW4gZmlsZW5hbWVzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImZpbGUxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hlbGwgbWV0YWNoYXJzIGluIGZpbGVuYW1lcycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJZWNobyBmMSA+Zm9vXCRiYXIgJiYKKwkJZ2l0IGFkZCBmb29cJGJhciAmJgorCQllY2hvIGYyID4iZmlsZSB3aXRoIHNwYWNlcyIgJiYKKwkJZ2l0IGFkZCAiZmlsZSB3aXRoIHNwYWNlcyIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGZpbGVzIiAmJgorCQlQNEVESVRPUj0idGVzdC10b29sIGNobXRpbWUgKzUiIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAuLi4gJiYKKwkJdGVzdCAtZSAiZmlsZSB3aXRoIHNwYWNlcyIgJiYKKwkJdGVzdCAtZSAiZm9vXCRiYXIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyB3aXRoIHNoZWxsIG1ldGFjaGFycycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJZ2l0IHJtIGZvb1wkYmFyICYmCisJCWdpdCBybSBmaWxlXCB3aXRoXCBzcGFjZXMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIGZpbGVzIiAmJgorCQlQNEVESVRPUj0idGVzdC10b29sIGNobXRpbWUgKzUiIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAuLi4gJiYKKwkJdGVzdCAhIC1lICJmaWxlIHdpdGggc3BhY2VzIiAmJgorCQl0ZXN0ICEgLWUgZm9vXCRiYXIKKwkpCisnCisKKyMgQ3JlYXRlIGEgYnJhbmNoIHdpdGggYSBzaGVsbCBtZXRhY2hhciBpbiBpdHMgbmFtZQorIworIyAxLiAvL2RlcG90L21haW4KKyMgMi4gLy9kZXBvdC9icmFuY2gkMworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggd2l0aCBzaGVsbCBjaGFyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCisJCW1rZGlyIC1wIG1haW4gJiYKKworCQllY2hvIGYxID5tYWluL2YxICYmCisJCXA0IGFkZCBtYWluL2YxICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mMSIgJiYKKworCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9tYWluLy4uLiAvL2RlcG90L2JyYW5jaFwkMy8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJpbnRlZ3JhdGUgbWFpbiB0byBicmFuY2hcJDMiICYmCisKKwkJZWNobyBmMSA+YnJhbmNoXCQzL3NoZWxsX2NoYXJfYnJhbmNoX2ZpbGUgJiYKKwkJcDQgYWRkIGJyYW5jaFwkMy9zaGVsbF9jaGFyX2JyYW5jaF9maWxlICYmCisJCXA0IHN1Ym1pdCAtZCAiYnJhbmNoXCQzL3NoZWxsX2NoYXJfYnJhbmNoX2ZpbGUiICYmCisKKwkJcDQgYnJhbmNoIC1pIDw8LUVPRiAmJgorCQlCcmFuY2g6IGJyYW5jaFwkMworCQlWaWV3OiAvL2RlcG90L21haW4vLi4uIC8vZGVwb3QvYnJhbmNoXCQzLy4uLgorCQlFT0YKKworCQlwNCBlZGl0IG1haW4vZjEgJiYKKwkJZWNobyAiYSBjaGFuZ2UiID4+IG1haW4vZjEgJiYKKwkJcDQgc3VibWl0IC1kICJhIGNoYW5nZSIgbWFpbi9mMSAmJgorCisJCXA0IGludGVncmF0ZSAtYiBicmFuY2hcJDMgJiYKKwkJcDQgcmVzb2x2ZSAtYW0gYnJhbmNoXCQzLy4uLiAmJgorCQlwNCBzdWJtaXQgLWQgImludGVncmF0ZSBtYWluIHRvIGJyYW5jaFwkMyIgJiYKKworCQljZCAiJGdpdCIgJiYKKworCQlnaXQgY29uZmlnIGdpdC1wNC5icmFuY2hMaXN0IG1haW46YnJhbmNoXCQzICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9LiAtLWRldGVjdC1icmFuY2hlcyAvL2RlcG90QGFsbCAmJgorCQlnaXQgbG9nIC0tYWxsIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLXN0YXQgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2hcJDMgJiYKKwkJdGVzdCAtZiBzaGVsbF9jaGFyX2JyYW5jaF9maWxlICYmCisJCXRlc3QgLWYgZjEKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgwNC1naXQtcDQtbGFiZWwuc2ggYi90L3Q5ODA0LWdpdC1wNC1sYWJlbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMjM2NDU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwNC1naXQtcDQtbGFiZWwuc2gKQEAgLTAsMCArMSwxMTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgbGFiZWwgdGVzdHMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCisjIEJhc2ljIHA0IGxhYmVsIHRlc3RzLgorIworIyBOb3RlOiBjYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgbGFiZWwgcGVyIGNvbW1pdCAtIG90aGVycworIyBhcmUgc2lsZW50bHkgZGlzY2FyZGVkLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgcDQgbGFiZWxzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJbWtkaXIgLXAgbWFpbiAmJgorCisJCWVjaG8gZjEgPm1haW4vZjEgJiYKKwkJcDQgYWRkIG1haW4vZjEgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2YxIiAmJgorCisJCWVjaG8gZjIgPm1haW4vZjIgJiYKKwkJcDQgYWRkIG1haW4vZjIgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2YyIiAmJgorCisJCWVjaG8gZjMgPm1haW4vZmlsZV93aXRoX1wkbWV0YWNoYXIgJiYKKwkJcDQgYWRkIG1haW4vZmlsZV93aXRoX1wkbWV0YWNoYXIgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlIHdpdGggbWV0YWNoYXIiICYmCisKKwkJcDQgdGFnIC1sIHRhZ19mMV9vbmx5IG1haW4vZjEgJiYKKwkJcDQgdGFnIC1sIHRhZ193aXRoXCRfc2hlbGxfY2hhciBtYWluLy4uLiAmJgorCisJCWVjaG8gZjQgPm1haW4vZjQgJiYKKwkJcDQgYWRkIG1haW4vZjQgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2Y0IiAmJgorCisJCXA0IGxhYmVsIC1pIDw8LUVPRiAmJgorCQlMYWJlbDogbG9uZ19sYWJlbAorCQlEZXNjcmlwdGlvbjoKKwkJICAgQSBMYWJlbCBmaXJzdCBsaW5lCisJCSAgIEEgTGFiZWwgc2Vjb25kIGxpbmUKKwkJVmlldzoJLy9kZXBvdC8uLi4KKwkJRU9GCisKKwkJcDQgdGFnIC1sIGxvbmdfbGFiZWwgLi4uICYmCisKKwkJcDQgbGFiZWxzIC4uLiAmJgorCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC0tZGV0ZWN0LWxhYmVscyAvL2RlcG90QGFsbCAmJgorCQljZCAiJGdpdCIgJiYKKworCQlnaXQgdGFnICYmCisJCWdpdCB0YWcgPnRhZ2xpc3QgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyB0YWdsaXN0ICYmCisKKwkJY2QgbWFpbiAmJgorCQlnaXQgY2hlY2tvdXQgdGFnX3RhZ19mMV9vbmx5ICYmCisJCSEgdGVzdCAtZiBmMiAmJgorCQlnaXQgY2hlY2tvdXQgdGFnX3RhZ193aXRoXCRfc2hlbGxfY2hhciAmJgorCQl0ZXN0IC1mIGYxICYmIHRlc3QgLWYgZjIgJiYgdGVzdCAtZiBmaWxlX3dpdGhfXCRtZXRhY2hhciAmJgorCisJCWdpdCBzaG93IHRhZ19sb25nX2xhYmVsIHwgZ3JlcCAtcSAiQSBMYWJlbCBzZWNvbmQgbGluZSIKKwkpCisnCisKKyMgVGVzdCBzb21lIGxhYmVsIGNvcm5lciBjYXNlczoKKyMKKyMgLSB0d28gdGFncyBvbiB0aGUgc2FtZSBmaWxlOyBib3RoIHNob3VsZCBiZSBhdmFpbGFibGUKKyMgLSBhIHRhZyB0aGF0IGlzIG9ubHkgb24gb25lIGZpbGU7IHRoaXMga2luZCBvZiB0YWcKKyMgICBjYW5ub3QgYmUgaW1wb3J0ZWQgKGF0IGxlYXN0IG5vdCBlYXNpbHkpLgorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd0d28gbGFiZWxzIG9uIHRoZSBzYW1lIGNoYW5nZWxpc3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciAtcCBtYWluICYmCisKKwkJcDQgZWRpdCBtYWluL2YxIG1haW4vZjIgJiYKKwkJZWNobyAiaGVsbG8gd29ybGQiID5tYWluL2YxICYmCisJCWVjaG8gIm5vdCBpbiB0aGUgdGFnIiA+bWFpbi9mMiAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vZlsxMl06IHRlc3RpbmcgdHdvIGxhYmVscyIgJiYKKworCQlwNCB0YWcgLWwgdGFnX2YxXzEgbWFpbi8uLi4gJiYKKwkJcDQgdGFnIC1sIHRhZ19mMV8yIG1haW4vLi4uICYmCisKKwkJcDQgbGFiZWxzIC4uLiAmJgorCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC0tZGV0ZWN0LWxhYmVscyAvL2RlcG90QGFsbCAmJgorCQljZCAiJGdpdCIgJiYKKworCQlnaXQgdGFnIHwgZ3JlcCB0YWdfZjEgJiYKKwkJZ2l0IHRhZyB8IGdyZXAgLXEgdGFnX2YxXzEgJiYKKwkJZ2l0IHRhZyB8IGdyZXAgLXEgdGFnX2YxXzIgJiYKKworCQljZCBtYWluICYmCisKKwkJZ2l0IGNoZWNrb3V0IHRhZ190YWdfZjFfMSAmJgorCQlscyAmJgorCQl0ZXN0IC1mIGYxICYmCisKKwkJZ2l0IGNoZWNrb3V0IHRhZ190YWdfZjFfMiAmJgorCQlscyAmJgorCQl0ZXN0IC1mIGYxCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MDUtZ2l0LXA0LXNraXAtc3VibWl0LWVkaXQuc2ggYi90L3Q5ODA1LWdpdC1wNC1za2lwLXN1Ym1pdC1lZGl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkwZWY2NDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODA1LWdpdC1wNC1za2lwLXN1Ym1pdC1lZGl0LnNoCkBAIC0wLDAgKzEsMTAxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHNraXBTdWJtaXRFZGl0IGNvbmZpZyB2YXJpYWJsZXMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGRlcG90JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBmaWxlMSA+ZmlsZTEgJiYKKwkJcDQgYWRkIGZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiY2hhbmdlIDEiCisJKQorJworCisjIHRoaXMgd29ya3MgYmVjYXVzZSBQNEVESVRPUiBpcyBzZXQgdG8gdHJ1ZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gY29uZmlnLCB1bmVkaXRlZCwgc2F5IHllcycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGxpbmUgPj5maWxlMSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgMiIgJiYKKwkJZWNobyB5IHwgZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBjaGFuZ2VzIC8vZGVwb3QvLi4uID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIHdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjb25maWcsIHVuZWRpdGVkLCBzYXkgbm8nICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBsaW5lID4+ZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIDMgKG5vdCByZWFsbHkpIiAmJgorCQlwcmludGYgImJhZCByZXNwb25zZVxublxuIiB8IHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0ICYmCisJCXA0IGNoYW5nZXMgLy9kZXBvdC8uLi4gPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgd2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXBTdWJtaXRFZGl0JyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyB3aWxsIGZhaWwgaWYgZWRpdG9yIGlzIGV2ZW4gaW52b2tlZAorCQlnaXQgY29uZmlnIGNvcmUuZWRpdG9yIC9iaW4vZmFsc2UgJiYKKwkJZWNobyBsaW5lID4+ZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIDMiICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgY2hhbmdlcyAvL2RlcG90Ly4uLiA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyB3YworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2tpcFN1Ym1pdEVkaXRDaGVjaycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJZWNobyBsaW5lID4+ZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIDQiICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgY2hhbmdlcyAvL2RlcG90Ly4uLiA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCB3YworCSkKKycKKworIyBjaGVjayB0aGUgbm9ybWFsIGNhc2UsIHdoZXJlIHRoZSB0ZW1wbGF0ZSByZWFsbHkgaXMgZWRpdGVkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjb25maWcsIGVkaXRlZCcgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIGVkLnNoIiAmJgorCWNhdCA+ZWQuc2ggPDwtRU9GICYmCisJCSMhJFNIRUxMX1BBVEgKKwkJc2xlZXAgMQorCQl0b3VjaCAiXCQxIgorCQlleGl0IDAKKwlFT0YKKwljaG1vZCA3NTUgZWQuc2ggJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGxpbmUgPj5maWxlMSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgNSIgJiYKKwkJUDRFRElUT1I9IlwiJFRSQVNIX0RJUkVDVE9SWS9lZC5zaFwiIiAmJgorCQlleHBvcnQgUDRFRElUT1IgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBjaGFuZ2VzIC8vZGVwb3QvLi4uID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IHdjCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MDYtZ2l0LXA0LW9wdGlvbnMuc2ggYi90L3Q5ODA2LWdpdC1wNC1vcHRpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRlNzk0YTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODA2LWdpdC1wNC1vcHRpb25zLnNoCkBAIC0wLDAgKzEsMzAzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IG9wdGlvbnMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGRlcG90JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBmaWxlMSA+ZmlsZTEgJiYKKwkJcDQgYWRkIGZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiY2hhbmdlIDEiICYmCisJCWVjaG8gZmlsZTIgPmZpbGUyICYmCisJCXA0IGFkZCBmaWxlMiAmJgorCQlwNCBzdWJtaXQgLWQgImNoYW5nZSAyIiAmJgorCQllY2hvIGZpbGUzID5maWxlMyAmJgorCQlwNCBhZGQgZmlsZTMgJiYKKwkJcDQgc3VibWl0IC1kICJjaGFuZ2UgMyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIG5vIC0tZ2l0LWRpcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBjbG9uZSAtLWdpdC1kaXI9eHggLy9kZXBvdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLWJyYW5jaCBzaG91bGQgY2hlY2tvdXQgbWFzdGVyJyAnCisJZ2l0IHA0IGNsb25lIC0tYnJhbmNoPXJlZnMvcmVtb3Rlcy9wNC9zYiAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9wNC9zYiA+c2IgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlciA+bWFzdGVyICYmCisJCXRlc3RfY21wIHNiIG1hc3RlciAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQgPmhlYWQgJiYKKwkJdGVzdF9jbXAgc2IgaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3luYyB3aGVuIG5vIG1hc3RlciBicmFuY2ggcHJpbnRzIGEgbmljZSBlcnJvcicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWJyYW5jaD1yZWZzL3JlbW90ZXMvcDQvc2IgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QDIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgc3luYyAyPmVyciAmJgorCQlncmVwICJFcnJvcjogbm8gYnJhbmNoIHJlZnMvcmVtb3Rlcy9wNC9tYXN0ZXIiIGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3luYyAtLWJyYW5jaCBidWlsZHMgdGhlIGZ1bGwgcmVmIG5hbWUgY29ycmVjdGx5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgJiYKKworCQlnaXQgcDQgc3luYyAtLWJyYW5jaD1iMSAvL2RlcG90ICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3A0L2IxICYmCisJCWdpdCBwNCBzeW5jIC0tYnJhbmNoPXA0L2IyIC8vZGVwb3QgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvcDQvYjIgJiYKKworCQlnaXQgcDQgc3luYyAtLWltcG9ydC1sb2NhbCAtLWJyYW5jaD1oMSAvL2RlcG90ICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9wNC9oMSAmJgorCQlnaXQgcDQgc3luYyAtLWltcG9ydC1sb2NhbCAtLWJyYW5jaD1wNC9oMiAvL2RlcG90ICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9wNC9oMiAmJgorCisJCWdpdCBwNCBzeW5jIC0tYnJhbmNoPXJlZnMvc3R1ZmYgLy9kZXBvdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvc3R1ZmYKKwkpCisnCisKKyMgZW5nYWdlcyAtLWRldGVjdC1icmFuY2hlcyBjb2RlLCB3aGljaCB3aWxsIGRvIGZpbGVuYW1lIGZpbHRlcmluZyBzbworIyBubyBzeW5jIHRvIGVpdGhlciBiMSBvciBiMgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3luYyB3aGVuIHR3byBicmFuY2hlcyBidXQgbm8gbWFzdGVyIHNob3VsZCBub29wJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHA0IHN5bmMgLS1icmFuY2g9cmVmcy9yZW1vdGVzL3A0L2IxIC8vZGVwb3RAMiAmJgorCQlnaXQgcDQgc3luYyAtLWJyYW5jaD1yZWZzL3JlbW90ZXMvcDQvYjIgLy9kZXBvdEAyICYmCisJCWdpdCBwNCBzeW5jICYmCisJCWdpdCBzaG93IC1zIC0tZm9ybWF0PSVzIHJlZnMvcmVtb3Rlcy9wNC9iMSA+c2hvdyAmJgorCQlncmVwICJJbml0aWFsIGltcG9ydCIgc2hvdyAmJgorCQlnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcyByZWZzL3JlbW90ZXMvcDQvYjIgPnNob3cgJiYKKwkJZ3JlcCAiSW5pdGlhbCBpbXBvcnQiIHNob3cKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bmMgLS1icmFuY2ggdXBkYXRlcyBzcGVjaWZpYyBicmFuY2gsIG5vIGRldGVjdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBwNCBzeW5jIC0tYnJhbmNoPWIxIC8vZGVwb3RAMiAmJgorCQlnaXQgcDQgc3luYyAtLWJyYW5jaD1iMiAvL2RlcG90QDIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1icmFuY2g9YjIgJiYKKwkJZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JXMgcmVmcy9yZW1vdGVzL3A0L2IxID5zaG93ICYmCisJCWdyZXAgIkluaXRpYWwgaW1wb3J0IiBzaG93ICYmCisJCWdpdCBzaG93IC1zIC0tZm9ybWF0PSVzIHJlZnMvcmVtb3Rlcy9wNC9iMiA+c2hvdyAmJgorCQlncmVwICJjaGFuZ2UgMyIgc2hvdworCSkKKycKKworIyBhbGxvd3MgdXNpbmcgdGhlIHJlZm5hbWUgInA0IiBhcyBhIHNob3J0IG5hbWUgZm9yIHA0L21hc3RlcgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY3JlYXRlcyBIRUFEIHN5bWJvbGljIHJlZmVyZW5jZScgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9wNC9tYXN0ZXIgPm1hc3RlciAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHA0ID5wNCAmJgorCQl0ZXN0X2NtcCBtYXN0ZXIgcDQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tYnJhbmNoIGNyZWF0ZXMgSEVBRCBzeW1ib2xpYyByZWZlcmVuY2UnICcKKwlnaXQgcDQgY2xvbmUgLS1icmFuY2g9cmVmcy9yZW1vdGVzL3A0L3NiIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3A0L3NiID5zYiAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHA0ID5wNCAmJgorCQl0ZXN0X2NtcCBzYiBwNAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1jaGFuZ2VzZmlsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gY2YiICYmCisJcHJpbnRmICIxXG4zXG4iID5jZiAmJgorCWdpdCBwNCBjbG9uZSAtLWNoYW5nZXNmaWxlPSIkVFJBU0hfRElSRUNUT1JZL2NmIiAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSBwNC9tYXN0ZXIgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgbGluZXMgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tY2hhbmdlc2ZpbGUsIEBhbGwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIGNmIiAmJgorCXByaW50ZiAiMVxuM1xuIiA+Y2YgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY2xvbmUgLS1jaGFuZ2VzZmlsZT0iJFRSQVNIX0RJUkVDVE9SWS9jZiIgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbAorJworCisjIGltcG9ydHMgYm90aCBtYXN0ZXIgYW5kIHA0L21hc3RlciBpbiByZWZzL2hlYWRzCisjIHJlcXVpcmVzIC0taW1wb3J0LWxvY2FsIG9uIHN5bmMgdG8gZmluZCBwNCByZWZzL2hlYWRzCisjIGRvZXMgbm90IHVwZGF0ZSBtYXN0ZXIgb24gc3luYywganVzdCBwNC9tYXN0ZXIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lL3N5bmMgLS1pbXBvcnQtbG9jYWwnICcKKwlnaXQgcDQgY2xvbmUgLS1pbXBvcnQtbG9jYWwgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QDEsMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHJlZnMvaGVhZHMvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHJlZnMvaGVhZHMvcDQvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBzeW5jICYmCisKKwkJZ2l0IHA0IHN5bmMgLS1pbXBvcnQtbG9jYWwgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgcmVmcy9oZWFkcy9tYXN0ZXIgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgbGluZXMgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgcmVmcy9oZWFkcy9wNC9tYXN0ZXIgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgbGluZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tbWF4LWNoYW5nZXMnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLW1heC1jaGFuZ2VzIDIgLy9kZXBvdEBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSByZWZzL2hlYWRzL21hc3RlciA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1rZWVwLXBhdGgnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciAtcCBzdWIvZGlyICYmCisJCWVjaG8gZjQgPnN1Yi9kaXIvZjQgJiYKKwkJcDQgYWRkIHN1Yi9kaXIvZjQgJiYKKwkJcDQgc3VibWl0IC1kICJjaGFuZ2UgNCIKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLS1rZWVwLXBhdGggLy9kZXBvdC9zdWIvZGlyQGFsbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGY0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHN1Yi9kaXIvZjQKKwkpICYmCisJY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L3N1Yi9kaXJAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZjQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3ViL2Rpci9mNAorCSkKKycKKworIyBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyBtdXN0IHN0aWxsIHNwZWNpZnkgYSBkZXBvdCBwYXRoCisjIGlmIGdpdmVuLCBpdCBzaG91bGQgcmVhcnJhbmdlIGZpbGVzIGFjY29yZGluZyB0byBjbGllbnQgc3BlYworIyB3aGVuIGl0IGhhcyB2aWV3IGxpbmVzIHRoYXQgbWF0Y2ggdGhlIGRlcG90IHBhdGgKKyMgWFhYOiBzaG91bGQgY2xvbmUvc3luYyBqdXN0IHVzZSB0aGUgY2xpZW50IHNwZWMgZXhhY3RseSwgcmF0aGVyCisjIHRoYW4gbmVlZGluZyBkZXBvdCBwYXRocz8KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tdXNlLWNsaWVudC1zcGVjJyAnCisJKAorCQkjIGJpZyB1c2FnZSBtZXNzYWdlCisJCWV4ZWMgPi9kZXYvbnVsbCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLXVzZS1jbGllbnQtc3BlYworCSkgJiYKKwkjIGJ1aWxkIGEgZGlmZmVyZW50IGNsaWVudAorCWNsaTI9IiRUUkFTSF9ESVJFQ1RPUlkvY2xpMiIgJiYKKwlta2RpciAtcCAiJGNsaTIiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybWRpciBcIiRjbGkyXCIiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQkjIGdyb3VwIFA0Q0xJRU5UIGFuZCBjbGkgY2hhbmdlcyBpbiBhIHN1Yi1zaGVsbAorCQlQNENMSUVOVD1jbGllbnQyICYmCisJCWNsaT0iJGNsaTIiICYmCisJCWNsaWVudF92aWV3ICIvL2RlcG90L3N1Yi8uLi4gLy9jbGllbnQyL2J1cy8uLi4iICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC0tdXNlLWNsaWVudC1zcGVjIC8vZGVwb3QvLi4uICYmCisJCSgKKwkJCWNkICIkZ2l0IiAmJgorCQkJdGVzdF9wYXRoX2lzX2ZpbGUgYnVzL2Rpci9mNCAmJgorCQkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTEKKwkJKSAmJgorCQljbGVhbnVwX2dpdCAmJgorCQkjIHNhbWUgdGhpbmcgYWdhaW4sIHRoaXMgdGltZSB3aXRoIHZhcmlhYmxlIGluc3RlYWQgb2Ygb3B0aW9uCisJCSgKKwkJCWNkICIkZ2l0IiAmJgorCQkJZ2l0IGluaXQgJiYKKwkJCWdpdCBjb25maWcgZ2l0LXA0LnVzZUNsaWVudFNwZWMgdHJ1ZSAmJgorCQkJZ2l0IHA0IHN5bmMgLy9kZXBvdC8uLi4gJiYKKwkJCWdpdCBjaGVja291dCAtYiBtYXN0ZXIgcDQvbWFzdGVyICYmCisJCQl0ZXN0X3BhdGhfaXNfZmlsZSBidXMvZGlyL2Y0ICYmCisJCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMQorCQkpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgd29ya3Mgd2l0aCBubyBwNC9tYXN0ZXInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1icmFuY2g9YjEgLy9kZXBvdEAxLDIgLS1kZXN0aW5hdGlvbj0iJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NvbW1pdCBzdWJtaXQtMS1icmFuY2ggJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0IC0tYnJhbmNoPWIxCisJKQorJworCisjIFRoZSBzeW5jL3JlYmFzZSBwYXJ0IHBvc3Qtc3VibWl0IHdpbGwgZW5nYWdlIGRldGVjdC1icmFuY2hlcworIyBtYWNoaW5lcnkgd2hpY2ggd2lsbCBub3QgZG8gYW55dGhpbmcgaW4gdGhpcyBwYXJ0aWN1bGFyIHRlc3QuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgd29ya3Mgd2l0aCB0d28gYnJhbmNoZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1icmFuY2g9YjEgLy9kZXBvdEAxLDIgLS1kZXN0aW5hdGlvbj0iJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLWJyYW5jaD1iMiAvL2RlcG90QDEsMyAmJgorCQl0ZXN0X2NvbW1pdCBzdWJtaXQtMi1icmFuY2hlcyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAtLWdpdC1kaXIgb3B0aW9uIGFuZCBHSVRfRElSJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC8vZGVwb3QgLS1kZXN0aW5hdGlvbj0iJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCXRlc3RfY29tbWl0IGZpcnN0LWNoYW5nZSAmJgorCQlnaXQgcDQgc3VibWl0IC0tZ2l0LWRpciAiJGdpdCIKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaXJzdC1jaGFuZ2UudCAmJgorCQllY2hvICJjbGlfZmlsZSIgPmNsaV9maWxlLnQgJiYKKwkJcDQgYWRkIGNsaV9maWxlLnQgJiYKKwkJcDQgc3VibWl0IC1kICJjbGkgY2hhbmdlIgorCSkgJiYKKwkoZ2l0IC0tZ2l0LWRpciAiJGdpdCIgcDQgc3luYykgJiYKKwkoY2QgIiRnaXQiICYmIGdpdCBjaGVja291dCAtcSBwNC9tYXN0ZXIpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRnaXQiL2NsaV9maWxlLnQgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvICJjbGlfZmlsZTIiID5jbGlfZmlsZTIudCAmJgorCQlwNCBhZGQgY2xpX2ZpbGUyLnQgICYmCisJCXA0IHN1Ym1pdCAtZCAiY2xpIGNoYW5nZTIiCisJKSAmJgorCShHSVRfRElSPSIkZ2l0IiBnaXQgcDQgc3luYykgJiYKKwkoY2QgIiRnaXQiICYmIGdpdCBjaGVja291dCAtcSBwNC9tYXN0ZXIpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRnaXQiL2NsaV9maWxlMi50CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgwNy1naXQtcDQtc3VibWl0LnNoIGIvdC90OTgwNy1naXQtcDQtc3VibWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVhYWFlNDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODA3LWdpdC1wNC1zdWJtaXQuc2gKQEAgLTAsMCArMSw1OTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgc3VibWl0JworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImNoYW5nZSAxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaXNfY2xpX2ZpbGVfd3JpdGVhYmxlIGZ1bmN0aW9uJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBhID5hICYmCisJCWlzX2NsaV9maWxlX3dyaXRlYWJsZSBhICYmCisJCSEgaXNfY2xpX2ZpbGVfd3JpdGVhYmxlIGZpbGUxICYmCisJCXJtIGEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCB3aXRoIG5vIGNsaWVudCBkaXInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBmaWxlMiA+ZmlsZTIgJiYKKwkJZ2l0IGFkZCBmaWxlMiAmJgorCQlnaXQgY29tbWl0IC1tICJnaXQgY29tbWl0IDIiICYmCisJCXJtIC1yZiAiJGNsaSIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyCisJKQorJworCisjIG1ha2UgdHdvIGNvbW1pdHMsIGJ1dCB0ZWxsIGl0IHRvIGFwcGx5IG9ubHkgZnJvbSBIRUFEXgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IC0tb3JpZ2luJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfY29tbWl0ICJmaWxlMyIgJiYKKwkJdGVzdF9jb21taXQgImZpbGU0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgLS1vcmlnaW49SEVBRF4KKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgImZpbGUzLnQiICYmCisJCXRlc3RfcGF0aF9pc19maWxlICJmaWxlNC50IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IC0tZHJ5LXJ1bicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NvbW1pdCAiZHJ5LXJ1bjEiICYmCisJCXRlc3RfY29tbWl0ICJkcnktcnVuMiIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWRyeS1ydW4gPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJXb3VsZCBhcHBseSIgb3V0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICJkcnktcnVuMS50IiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiZHJ5LXJ1bjIudCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCAtLWRyeS1ydW4gLS1leHBvcnQtbGFiZWxzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gZHJ5LXJ1bjEgPmRyeS1ydW4xICYmCisJCWdpdCBhZGQgZHJ5LXJ1bjEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZHJ5LXJ1bjEiIGRyeS1ydW4xICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQllY2hvIGRyeS1ydW4yID5kcnktcnVuMiAmJgorCQlnaXQgYWRkIGRyeS1ydW4yICYmCisJCWdpdCBjb21taXQgLW0gImRyeS1ydW4yIiBkcnktcnVuMiAmJgorCQlnaXQgdGFnIC1tICJkcnktcnVuLXRhZzEiIGRyeS1ydW4tdGFnMSBIRUFEXiAmJgorCQlnaXQgcDQgc3VibWl0IC0tZHJ5LXJ1biAtLWV4cG9ydC1sYWJlbHMgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJXb3VsZCBjcmVhdGUgcDQgbGFiZWwiIG91dAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAiZHJ5LXJ1bjEiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICJkcnktcnVuMiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCB3aXRoIGFsbG93U3VibWl0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfY29tbWl0ICJmaWxlNSIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hbGxvd1N1Ym1pdCAibm9icmFuY2giICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBzdWJtaXQgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYWxsb3dTdWJtaXQgIm5vYnJhbmNoLG1hc3RlciIgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IHdpdGggbWFzdGVyIGJyYW5jaCBuYW1lIGZyb20gYXJndicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NvbW1pdCAiZmlsZTYiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IHN1Ym1pdCBub2JyYW5jaCAmJgorCQlnaXQgYnJhbmNoIG90aGVyYnJhbmNoICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwkJdGVzdF9jb21taXQgImZpbGU3IiAmJgorCQlnaXQgcDQgc3VibWl0IG90aGVyYnJhbmNoCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlICJmaWxlNi50IiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiZmlsZTcudCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IHN1Ym1pdCBmcm9tIGJyYW5jaCB3aXRoIHNhbWUgcmV2aXNpb24gYnV0IGRpZmZlcmVudCBuYW1lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfY29tbWl0ICJmaWxlOCIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDEgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hbGxvd1N1Ym1pdCAiYnJhbmNoMSIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IHN1Ym1pdCAmJgorCQlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCQlnaXQgcDQgc3VibWl0CisJKQorJworCisjIG1ha2UgdHdvIGNvbW1pdHMsIGJ1dCB0ZWxsIGl0IHRvIGFwcGx5IG9ubHkgb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCAtLWNvbW1pdCBvbmUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9jb21taXQgImZpbGU5IiAmJgorCQl0ZXN0X2NvbW1pdCAiZmlsZTEwIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgLS1jb21taXQgSEVBRAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiZmlsZTkudCIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgImZpbGUxMC50IgorCSkKKycKKworIyBtYWtlIHRocmVlIGNvbW1pdHMsIGJ1dCB0ZWxsIGl0IHRvIGFwcGx5IG9ubHkgcmFuZ2UKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IC0tY29tbWl0IHJhbmdlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfY29tbWl0ICJmaWxlMTEiICYmCisJCXRlc3RfY29tbWl0ICJmaWxlMTIiICYmCisJCXRlc3RfY29tbWl0ICJmaWxlMTMiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWNvbW1pdCBIRUFEfjIuLkhFQUQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgImZpbGUxMS50IiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAiZmlsZTEyLnQiICYmCisJCXRlc3RfcGF0aF9pc19maWxlICJmaWxlMTMudCIKKwkpCisnCisKKyMKKyMgQmFzaWMgc3VibWl0IHRlc3RzLCB0aGUgZml2ZSBoYW5kbGVkIGNhc2VzCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCBtb2RpZnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQllY2hvIGxpbmUgPj5maWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gZmlsZTEgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGZpbGUxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgYWRkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZWNobyBmaWxlMTMgPmZpbGUxMyAmJgorCQlnaXQgYWRkIGZpbGUxMyAmJgorCQlnaXQgY29tbWl0IC1tIGZpbGUxMyAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxMworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IGRlbGV0ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBybSBmaWxlNC50ICYmCisJCWdpdCBjb21taXQgLW0gImRlbGV0ZSBmaWxlNC50IiAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGU0LnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCBjb3B5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzSGFyZGVyIHRydWUgJiYKKwkJY3AgZmlsZTUudCBmaWxlNS50YSAmJgorCQlnaXQgYWRkIGZpbGU1LnRhICYmCisJCWdpdCBjb21taXQgLW0gImNvcHkgdG8gZmlsZTUudGEiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTUudGEgJiYKKwkJISBpc19jbGlfZmlsZV93cml0ZWFibGUgZmlsZTUudGEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCByZW5hbWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzIHRydWUgJiYKKwkJZ2l0IG12IGZpbGU2LnQgZmlsZTYudGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIGZpbGU2LnQgdG8gZmlsZTYudGEiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTYudCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlNi50YSAmJgorCQkhIGlzX2NsaV9maWxlX3dyaXRlYWJsZSBmaWxlNi50YQorCSkKKycKKworIworIyBDb252ZXJ0aW5nIGdpdCBjb21taXQgbWVzc2FnZSB0byBwNCBjaGFuZ2UgZGVzY3JpcHRpb24sIGluY2x1ZGluZworIyBwYXJzaW5nIG91dCB0aGUgb3B0aW9uYWwgSm9iczogbGluZS4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBvbmUtbGluZSBkZXNjcmlwdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGRlc2MyID5kZXNjMiAmJgorCQlnaXQgYWRkIGRlc2MyICYmCisJCWNhdCA+bXNnIDw8LUVPRiAmJgorCQlPbmUtbGluZSBkZXNjcmlwdGlvbiBsaW5lIGZvciBkZXNjMi4KKwkJRU9GCisJCWdpdCBjb21taXQgLUYgLSA8bXNnICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQljaGFuZ2U9JChwNCAtRyBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8uLi4gfCBcCisJCQkgbWFyc2hhbF9kdW1wIGNoYW5nZSkgJiYKKwkJIyBtYXJzaGFsX2R1bXAgYWx3YXlzIGFkZHMgYSBuZXdsaW5lCisJCXA0IC1HIGRlc2NyaWJlICRjaGFuZ2UgfCBtYXJzaGFsX2R1bXAgZGVzYyB8IHNlZCBcJGQgPnBtc2cgJiYKKwkJdGVzdF9jbXAgbXNnIHBtc2cKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaXB0aW9uIHdpdGggb2RkIGZvcm1hdHRpbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBkZXNjMyA+ZGVzYzMgJiYKKwkJZ2l0IGFkZCBkZXNjMyAmJgorCQkoCisJCQlwcmludGYgInN1YmplY3QgbGluZVxuXG5cdEV4dHJhIHRhYlxubGluZS5cblxuIiAmJgorCQkJcHJpbnRmICJEZXNjcmlwdGlvbjpcblx0Qm9ndXMgZGVzY3JpcHRpb24gbWFya2VyXG5cbiIgJiYKKwkJCSMgZ2l0IGNvbW1pdCBlYXRzIHRyYWlsaW5nIG5ld2xpbmVzOyBvbmx5IHVzZSBvbmUKKwkJCXByaW50ZiAiRmlsZXM6XG5cdEJvZ3VzIGRlc2NzIG1hcmtlclxuIgorCQkpID5tc2cgJiYKKwkJZ2l0IGNvbW1pdCAtRiAtIDxtc2cgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCWNoYW5nZT0kKHA0IC1HIGNoYW5nZXMgLW0gMSAvL2RlcG90Ly4uLiB8IFwKKwkJCSBtYXJzaGFsX2R1bXAgY2hhbmdlKSAmJgorCQkjIG1hcnNoYWxfZHVtcCBhbHdheXMgYWRkcyBhIG5ld2xpbmUKKwkJcDQgLUcgZGVzY3JpYmUgJGNoYW5nZSB8IG1hcnNoYWxfZHVtcCBkZXNjIHwgc2VkIFwkZCA+cG1zZyAmJgorCQl0ZXN0X2NtcCBtc2cgcG1zZworCSkKKycKKworbWFrZV9qb2IoKSB7CisJbmFtZT0iJDEiICYmCisJdGFiPSIkKHByaW50ZiBcXHQpIiAmJgorCXA0IGpvYiAtbyB8IFwKKwlzZWQgLWUgIi9eSm9iOi9zLy4qL0pvYjogJG5hbWUvIiBcCisJICAgIC1lICIvXkRlc2NyaXB0aW9uL3sgbjsgcy8uKi8kdGFiIGpvYiB0ZXh0LzsgfSIgfCBcCisJcDQgam9iIC1pCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaXB0aW9uIHdpdGggSm9icyBzZWN0aW9uIGF0IGVuZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGRlc2M0ID5kZXNjNCAmJgorCQlnaXQgYWRkIGRlc2M0ICYmCisJCWVjaG8gNjA2MDg0MiA+am9ibmFtZSAmJgorCQkoCisJCQlwcmludGYgInN1YmplY3QgbGluZVxuXG5cdEV4dHJhIHRhYlxubGluZS5cblxuIiAmJgorCQkJcHJpbnRmICJGaWxlczpcblx0Qm9ndXMgZmlsZXMgbWFya2VyXG4iICYmCisJCQlwcmludGYgIkp1bms6IDMxNjQxNzVcbiIgJiYKKwkJCXByaW50ZiAiSm9iczogJChjYXQgam9ibmFtZSlcbiIKKwkJKSA+bXNnICYmCisJCWdpdCBjb21taXQgLUYgLSA8bXNnICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyBidWlsZCBhIGpvYgorCQltYWtlX2pvYiAkKGNhdCBqb2JuYW1lKSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCWNoYW5nZT0kKHA0IC1HIGNoYW5nZXMgLW0gMSAvL2RlcG90Ly4uLiB8IFwKKwkJCSBtYXJzaGFsX2R1bXAgY2hhbmdlKSAmJgorCQkjIG1hcnNoYWxfZHVtcCBhbHdheXMgYWRkcyBhIG5ld2xpbmUKKwkJcDQgLUcgZGVzY3JpYmUgJGNoYW5nZSB8IG1hcnNoYWxfZHVtcCBkZXNjIHwgc2VkIFwkZCA+cG1zZyAmJgorCQkjIG1ha2Ugc3VyZSBKb2JzIGxpbmUgYW5kIGFsbCBmb2xsb3dpbmcgaXMgZ29uZQorCQlzZWQgIi9eSm9iczovLFwkZCIgbXNnID5qbXNnICYmCisJCXRlc3RfY21wIGptc2cgcG1zZyAmJgorCQkjIG1ha2Ugc3VyZSBwNCBrbm93cyBhYm91dCBqb2IKKwkJcDQgLUcgZGVzY3JpYmUgJGNoYW5nZSB8IG1hcnNoYWxfZHVtcCBqb2IwID5qb2IwICYmCisJCXRlc3RfY21wIGpvYm5hbWUgam9iMAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVzY3JpcHRpb24gd2l0aCBKb2JzIGFuZCB2YWx1ZXMgb24gc2VwYXJhdGUgbGluZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBkZXNjNSA+ZGVzYzUgJiYKKwkJZ2l0IGFkZCBkZXNjNSAmJgorCQllY2hvIFBST0otNjA2MDg0MiA+am9ibmFtZTEgJiYKKwkJZWNobyBQUk9KLTYwNjA4NDcgPmpvYm5hbWUyICYmCisJCSgKKwkJCXByaW50ZiAic3ViamVjdCBsaW5lXG5cblx0RXh0cmEgdGFiXG5saW5lLlxuXG4iICYmCisJCQlwcmludGYgIkZpbGVzOlxuXHRCb2d1cyBmaWxlcyBtYXJrZXJcbiIgJiYKKwkJCXByaW50ZiAiSnVuazogMzE2NDE3NVxuIiAmJgorCQkJcHJpbnRmICJKb2JzOlxuIiAmJgorCQkJcHJpbnRmICJcdCQoY2F0IGpvYm5hbWUxKVxuIiAmJgorCQkJcHJpbnRmICJcdCQoY2F0IGpvYm5hbWUyKVxuIgorCQkpID5tc2cgJiYKKwkJZ2l0IGNvbW1pdCAtRiAtIDxtc2cgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQkjIGJ1aWxkIHR3byBqb2JzCisJCW1ha2Vfam9iICQoY2F0IGpvYm5hbWUxKSAmJgorCQltYWtlX2pvYiAkKGNhdCBqb2JuYW1lMikgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQljaGFuZ2U9JChwNCAtRyBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8uLi4gfCBcCisJCQkgbWFyc2hhbF9kdW1wIGNoYW5nZSkgJiYKKwkJIyBtYXJzaGFsX2R1bXAgYWx3YXlzIGFkZHMgYSBuZXdsaW5lCisJCXA0IC1HIGRlc2NyaWJlICRjaGFuZ2UgfCBtYXJzaGFsX2R1bXAgZGVzYyB8IHNlZCBcJGQgPnBtc2cgJiYKKwkJIyBtYWtlIHN1cmUgSm9icyBsaW5lIGFuZCBhbGwgZm9sbG93aW5nIGlzIGdvbmUKKwkJc2VkICIvXkpvYnM6LyxcJGQiIG1zZyA+am1zZyAmJgorCQl0ZXN0X2NtcCBqbXNnIHBtc2cgJiYKKwkJIyBtYWtlIHN1cmUgcDQga25vd3MgYWJvdXQgdGhlIHR3byBqb2JzCisJCXA0IC1HIGRlc2NyaWJlICRjaGFuZ2UgPmNoYW5nZSAmJgorCQkoCisJCQltYXJzaGFsX2R1bXAgam9iMCA8Y2hhbmdlICYmCisJCQltYXJzaGFsX2R1bXAgam9iMSA8Y2hhbmdlCisJCSkgfCBzb3J0ID5qb2JzICYmCisJCWNhdCBqb2JuYW1lMSBqb2JuYW1lMiB8IHNvcnQgPmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGpvYnMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaXB0aW9uIHdpdGggSm9icyBzZWN0aW9uIGFuZCBib2d1cyBmb2xsb3dpbmcgdGV4dCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGRlc2M2ID5kZXNjNiAmJgorCQlnaXQgYWRkIGRlc2M2ICYmCisJCWVjaG8gNjA2MDg0MyA+am9ibmFtZSAmJgorCQkoCisJCQlwcmludGYgInN1YmplY3QgbGluZVxuXG5cdEV4dHJhIHRhYlxubGluZS5cblxuIiAmJgorCQkJcHJpbnRmICJGaWxlczpcblx0Qm9ndXMgZmlsZXMgbWFya2VyXG4iICYmCisJCQlwcmludGYgIkp1bms6IDMxNjQxNzVcbiIgJiYKKwkJCXByaW50ZiAiSm9iczogJChjYXQgam9ibmFtZSlcbiIgJiYKKwkJCXByaW50ZiAiTW9yZUp1bms6IDM3MTFcbiIKKwkJKSA+bXNnICYmCisJCWdpdCBjb21taXQgLUYgLSA8bXNnICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyBidWlsZCBhIGpvYgorCQltYWtlX2pvYiAkKGNhdCBqb2JuYW1lKSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgc3VibWl0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgIlVua25vd24gZmllbGQgbmFtZSIgZXJyCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHJldmVydCBkZXNjNiAmJgorCQlybSAtZiBkZXNjNgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IC0tcHJlcGFyZS1wNC1vbmx5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gcHJlcC1vbmx5LWFkZCA+cHJlcC1vbmx5LWFkZCAmJgorCQlnaXQgYWRkIHByZXAtb25seS1hZGQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicHJlcCBvbmx5IGFkZCIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLXByZXBhcmUtcDQtb25seSA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgInByZXBhcmVkIGZvciBzdWJtaXNzaW9uIiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAibXVzdCBiZSBkZWxldGVkIiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAhICJldmVyeXRoaW5nIGJlbG93IHRoaXMgbGluZSBpcyBqdXN0IHRoZSBkaWZmIiBvdXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgcHJlcC1vbmx5LWFkZCAmJgorCQlwNCBmc3RhdCAtVCBhY3Rpb24gcHJlcC1vbmx5LWFkZCB8IGdyZXAgLXcgYWRkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgLS1zaGVsdmUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgcmV2ZXJ0IC4uLiAmJgorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQl0ZXN0X2NvbW1pdCAic2hlbHZlbWUxIiAmJgorCQlnaXQgcDQgc3VibWl0IC0tb3JpZ2luPUhFQUReICYmCisKKwkJZWNobyA2NTQzMjEgPnNoZWx2ZW1lMi50ICYmCisJCWVjaG8gMTIzNDU2ID4+c2hlbHZlbWUxLnQgJiYKKwkJZ2l0IGFkZCBzaGVsdmVtZSogJiYKKwkJZ2l0IGNvbW1pdCAtbSJzaGVsdmV0ZXN0IiAmJgorCQlnaXQgcDQgc3VibWl0IC0tc2hlbHZlIC0tb3JpZ2luPUhFQUReICYmCisKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgc2hlbHZlbWUxLnQgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgc2hlbHZlbWUyLnQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJY2hhbmdlPSQocDQgLUcgY2hhbmdlcyAtcyBzaGVsdmVkIC1tIDEgLy9kZXBvdC8uLi4gfCBcCisJCQkgbWFyc2hhbF9kdW1wIGNoYW5nZSkgJiYKKwkJcDQgZGVzY3JpYmUgLVMgJGNoYW5nZSB8IGdyZXAgc2hlbHZlbWUyICYmCisJCXA0IGRlc2NyaWJlIC1TICRjaGFuZ2UgfCBncmVwIDEyMzQ1NiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBzaGVsdmVtZTEudCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzaGVsdmVtZTIudAorCSkKKycKKworbGFzdF9zaGVsdmUgKCkgeworCXA0IC1HIGNoYW5nZXMgLXMgc2hlbHZlZCAtbSAxIC8vZGVwb3QvLi4uIHwgbWFyc2hhbF9kdW1wIGNoYW5nZQorfQorCittYWtlX3NoZWx2ZWRfY2woKSB7CisJdGVzdF9jb21taXQgIiQxIiA+L2Rldi9udWxsICYmCisJZ2l0IHA0IHN1Ym1pdCAtLW9yaWdpbiBIRUFEXiAtLXNoZWx2ZSA+L2Rldi9udWxsICYmCisJcDQgLUcgY2hhbmdlcyAtcyBzaGVsdmVkIC1tIDEgfCBtYXJzaGFsX2R1bXAgY2hhbmdlCit9CisKKyMgVXBkYXRlIGV4aXN0aW5nIHNoZWx2ZWQgY2hhbmdlbGlzdHMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IC0tdXBkYXRlLXNoZWx2ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCByZXZlcnQgLi4uICYmCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCXNoZWx2ZWRfY2wwPSQobWFrZV9zaGVsdmVkX2NsICJzaGVsdmVkLWNoYW5nZS0wIikgJiYKKwkJZWNobyBzaGVsdmVkX2NsMD0kc2hlbHZlZF9jbDAgJiYKKwkJc2hlbHZlZF9jbDE9JChtYWtlX3NoZWx2ZWRfY2wgInNoZWx2ZWQtY2hhbmdlLTEiKSAmJgorCisJCWVjaG8gInVwZGF0aW5nIHNoZWx2ZWQgY2hhbmdlIGxpc3RzICRzaGVsdmVkX2NsMCBhbmQgJHNoZWx2ZWRfY2wxIiAmJgorCisJCWVjaG8gInVwZGF0ZWQtbGluZSIgPj5zaGVsZi50ICYmCisJCWVjaG8gYWRkZWQtZmlsZS50ID5hZGRlZC1maWxlLnQgJiYKKwkJZ2l0IGFkZCBzaGVsZi50IGFkZGVkLWZpbGUudCAmJgorCQlnaXQgcm0gLWYgc2hlbHZlZC1jaGFuZ2UtMS50ICYmCisJCWdpdCBjb21taXQgLS1hbWVuZCAtQyBIRUFEICYmCisJCWdpdCBzaG93IC0tc3RhdCBIRUFEICYmCisJCWdpdCBwNCBzdWJtaXQgLXYgLS1vcmlnaW4gSEVBRH4yIC0tdXBkYXRlLXNoZWx2ZSAkc2hlbHZlZF9jbDAgLS11cGRhdGUtc2hlbHZlICRzaGVsdmVkX2NsMSAmJgorCQllY2hvICJkb25lIGdpdCBwNCBzdWJtaXQiCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCWNoYW5nZT0kKGxhc3Rfc2hlbHZlKSAmJgorCQlwNCB1bnNoZWx2ZSAtYyAkY2hhbmdlIC1zICRjaGFuZ2UgJiYKKwkJZ3JlcCAtcSB1cGRhdGVkLWxpbmUgc2hlbGYudCAmJgorCQlwNCBkZXNjcmliZSAtUyAkY2hhbmdlIHwgZ3JlcCBhZGRlZC1maWxlLnQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgc2hlbHZlZC1jaGFuZ2UtMS50ICYmCisJCXA0IHJldmVydCAuLi4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBhIHNoZWx2ZSBpbnZvbHZpbmcgbW92ZWQgYW5kIGNvcGllZCBmaWxlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCTogPmZpbGVfdG9fbW92ZSAmJgorCQlwNCBhZGQgZmlsZV90b19tb3ZlICYmCisJCXA0IHN1Ym1pdCAtZCAiY2hhbmdlMSIgJiYKKwkJcDQgZWRpdCBmaWxlX3RvX21vdmUgJiYKKwkJZWNobyBjaGFuZ2UgPj5maWxlX3RvX21vdmUgJiYKKwkJcDQgc3VibWl0IC1kICJjaGFuZ2UyIiAmJgorCQlwNCBvcGVuZWQKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllcyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdFJlbmFtZXMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCW1rZGlyIG1vdmVkICYmCisJCWNwIGZpbGVfdG9fbW92ZSBjb3B5X29mX2ZpbGUgJiYKKwkJZ2l0IGFkZCBjb3B5X29mX2ZpbGUgJiYKKwkJZ2l0IG12IGZpbGVfdG9fbW92ZSBtb3ZlZC8gJiYKKwkJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIGEgZmlsZSIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtTSAtLXNoZWx2ZSAtLW9yaWdpbiBIRUFEXiAmJgorCQk6ID5uZXdfZmlsZSAmJgorCQlnaXQgYWRkIG5ld19maWxlICYmCisJCWdpdCBjb21taXQgLS1hbWVuZCAmJgorCQlnaXQgc2hvdyAtLXN0YXQgSEVBRCAmJgorCQljaGFuZ2U9JChsYXN0X3NoZWx2ZSkgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtTSAtLXVwZGF0ZS1zaGVsdmUgJGNoYW5nZSAtLWNvbW1pdCBIRUFECisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCWNoYW5nZT0kKGxhc3Rfc2hlbHZlKSAmJgorCQllY2hvIGNoYW5nZT0kY2hhbmdlICYmCisJCXA0IHVuc2hlbHZlIC1zICRjaGFuZ2UgJiYKKwkJcDQgc3VibWl0IC1kICJUZXN0aW5nIHVwZGF0ZS1zaGVsdmUiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGNvcHlfb2ZfZmlsZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBtb3ZlZC9maWxlX3RvX21vdmUgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZV90b19tb3ZlICYmCisJCXRlc3RfcGF0aF9pc19maWxlIG5ld19maWxlICYmCisJCWVjaG8gInVuc2hlbHZlZCBhbmQgc3VibWl0dGVkIGNoYW5nZSAkY2hhbmdlIiAmJgorCQlwNCBjaGFuZ2VzIG1vdmVkL2ZpbGVfdG9fbW92ZSB8IGdyZXAgIlRlc3RpbmcgdXBkYXRlLXNoZWx2ZSIgJiYKKwkJcDQgY2hhbmdlcyBjb3B5X29mX2ZpbGUgfCBncmVwICJUZXN0aW5nIHVwZGF0ZS1zaGVsdmUiCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MDgtZ2l0LXA0LWNoZGlyLnNoIGIvdC90OTgwOC1naXQtcDQtY2hkaXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNThhOWIzYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MDgtZ2l0LXA0LWNoZGlyLnNoCkBAIC0wLDAgKzEsODYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgcmVsYXRpdmUgY2hkaXInCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGRlcG90JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBmaWxlMSA+ZmlsZTEgJiYKKwkJcDQgYWRkIGZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiY2hhbmdlIDEiCisJKQorJworCisjIFA0IHJlYWRzIGZyb20gUDRDT05GSUcgZmlsZSB0byBmaW5kIGl0cyBzZXJ2ZXIgcGFyYW1zLCBpZiB0aGUKKyMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQNENPTkZJRyBhbmQgYWJzb2x1dGUgZGlyIGNsb25lJyAnCisJcHJpbnRmICJQNFBPUlQ9JFA0UE9SVFxuUDRDTElFTlQ9JFA0Q0xJRU5UXG4iID5wNGNvbmZpZyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gcDRjb25maWciICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQlQNENPTkZJRz1wNGNvbmZpZyAmJiBleHBvcnQgUDRDT05GSUcgJiYKKwkJc2FuZV91bnNldCBQNFBPUlQgUDRDTElFTlQgJiYKKwkJZ2l0IHA0IGNsb25lIC0tdmVyYm9zZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QKKwkpCisnCisKKyMgc2FtZSB0aGluZywgYnV0IHdpdGggcmVsYXRpdmUgZGlyZWN0b3J5IG5hbWUsIG5vdGUgbWlzc2luZyAkIG9uIC0tZGVzdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnUDRDT05GSUcgYW5kIHJlbGF0aXZlIGRpciBjbG9uZScgJworCXByaW50ZiAiUDRQT1JUPSRQNFBPUlRcblA0Q0xJRU5UPSRQNENMSUVOVFxuIiA+cDRjb25maWcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHA0Y29uZmlnIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJUDRDT05GSUc9cDRjb25maWcgJiYgZXhwb3J0IFA0Q09ORklHICYmCisJCXNhbmVfdW5zZXQgUDRQT1JUIFA0Q0xJRU5UICYmCisJCWdpdCBwNCBjbG9uZSAtLXZlcmJvc2UgLS1kZXN0PSJnaXQiIC8vZGVwb3QKKwkpCisnCisKKyMgQ29tbW9uIHNldHVwIHVzaW5nIC5wNGNvbmZpZyB0byBzZXQgUDRDTElFTlQgYW5kIFA0UE9SVCBicmVha3MKKyMgaWYgY2xvbmUgZGVzdGluYXRpb24gaXMgcmVsYXRpdmUuICBNYWtlIHN1cmUgdGhhdCBjaGRpcigpIGV4cGFuZHMKKyMgdGhlIHJlbGF0aXZlIHBhdGggaW4gLS1kZXN0IHRvIGFic29sdXRlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncDQgY2xpZW50IHJvb3Qgd291bGQgYmUgcmVsYXRpdmUgZHVlIHRvIGNsb25lIC0tZGVzdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJZWNobyBQNFBPUlQ9JFA0UE9SVCA+Z2l0Ly5wNGNvbmZpZyAmJgorCQlQNENPTkZJRz0ucDRjb25maWcgJiYKKwkJZXhwb3J0IFA0Q09ORklHICYmCisJCXVuc2V0IFA0UE9SVCAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PSJnaXQiIC8vZGVwb3QKKwkpCisnCisKKyMgV2hlbiB0aGUgcDQgY2xpZW50IFJvb3QgaXMgYSBzeW1saW5rLCBtYWtlIHN1cmUgY2hkaXIoKSBkb2VzIG5vdCB1c2UKKyMgZ2V0Y3dkKCkgdG8gY29udmVydCBpdCB0byBhIHBoeXNpY2FsIHBhdGguCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdwNCBjbGllbnQgcm9vdCBzeW1saW5rIHNob3VsZCBzdGF5IHN5bWJvbGljJyAnCisJcGh5c2ljYWw9IiRUUkFTSF9ESVJFQ1RPUlkvcGh5c2ljYWwiICYmCisJc3ltYm9saWM9IiRUUkFTSF9ESVJFQ1RPUlkvc3ltYm9saWMiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgXCIkcGh5c2ljYWxcIiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIFwiJHN5bWJvbGljXCIiICYmCisJbWtkaXIgLXAgIiRwaHlzaWNhbCIgJiYKKwlsbiAtcyAiJHBoeXNpY2FsIiAiJHN5bWJvbGljIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJUDRDTElFTlQ9Y2xpZW50LXN5bSAmJgorCQlwNCBjbGllbnQgLWkgPDwtRU9GICYmCisJCUNsaWVudDogJFA0Q0xJRU5UCisJCURlc2NyaXB0aW9uOiAkUDRDTElFTlQKKwkJUm9vdDogJHN5bWJvbGljCisJCUxpbmVFbmQ6IHVuaXgKKwkJVmlldzogLy9kZXBvdC8uLi4gLy8kUDRDTElFTlQvLi4uCisJCUVPRgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NvbW1pdCBmaWxlMiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgwOS1naXQtcDQtY2xpZW50LXZpZXcuc2ggYi90L3Q5ODA5LWdpdC1wNC1jbGllbnQtdmlldy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45Yzk3MTBkCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwOS1naXQtcDQtY2xpZW50LXZpZXcuc2gKQEAgLTAsMCArMSw4MzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgY2xpZW50IHZpZXcnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCisjCisjIFZlcmlmeSB0aGVzZSBmaWxlcyBleGlzdCwgZXhhY3RseS4gIENhbGxlciBjcmVhdGVzCisjIGEgbGlzdCBvZiBmaWxlcyBpbiBmaWxlICJmaWxlcyIuCisjCitjaGVja19maWxlc19leGlzdCgpIHsKKwlvaz0wICYmCisJbnVtPSQjICYmCisJZm9yIGFyZyA7IGRvCisJCXRlc3RfcGF0aF9pc19maWxlICIkYXJnIiAmJgorCQlvaz0kKCgkb2sgKyAxKSkKKwlkb25lICYmCisJdGVzdCAkb2sgLWVxICRudW0gJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAkbnVtIGZpbGVzCit9CisKKyMKKyMgU3luYyB1cCB0aGUgcDQgY2xpZW50LCBtYWtlIHN1cmUgdGhlIGdpdmVuIGZpbGVzIChhbmQgb25seQorIyB0aG9zZSkgZXhpc3QuCisjCitjbGllbnRfdmVyaWZ5KCkgeworCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZmluZCAuIC10eXBlIGYgISAtbmFtZSBmaWxlcyA+ZmlsZXMgJiYKKwkJY2hlY2tfZmlsZXNfZXhpc3QgIiRAIgorCSkKK30KKworIworIyBNYWtlIHN1cmUgdGhlIG5hbWVkIGZpbGVzLCBleGFjdGx5LCBleGlzdC4KKyMKK2dpdF92ZXJpZnkoKSB7CisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxzLWZpbGVzID5maWxlcyAmJgorCQljaGVja19maWxlc19leGlzdCAiJEAiCisJKQorfQorCisjIC8vZGVwb3QKKyMgICAtIGRpcjEKKyMgICAgIC0gZmlsZTExCisjICAgICAtIGZpbGUxMgorIyAgIC0gZGlyMgorIyAgICAgLSBmaWxlMjEKKyMgICAgIC0gZmlsZTIyCitpbml0X2RlcG90KCkgeworCWZvciBkIGluIDEgMiA7IGRvCisJCW1rZGlyIC1wIGRpciRkICYmCisJCWZvciBmIGluIDEgMiA7IGRvCisJCQllY2hvIGRpciRkL2ZpbGUkZCRmID5kaXIkZC9maWxlJGQkZiAmJgorCQkJcDQgYWRkIGRpciRkL2ZpbGUkZCRmICYmCisJCQlwNCBzdWJtaXQgLWQgImRpciRkL2ZpbGUkZCRmIgorCQlkb25lCisJZG9uZSAmJgorCWZpbmQgLiAtdHlwZSBmICEgLW5hbWUgZmlsZXMgPmZpbGVzICYmCisJY2hlY2tfZmlsZXNfZXhpc3QgZGlyMS9maWxlMTEgZGlyMS9maWxlMTIgXAorCQkJICBkaXIyL2ZpbGUyMSBkaXIyL2ZpbGUyMgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGRlcG90JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJaW5pdF9kZXBvdAorCSkKKycKKworIyBkb3VibGUgJSBmb3IgcHJpbnRmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2aWV3IHdpbGRjYXJkICUlbicgJworCWNsaWVudF92aWV3ICIvL2RlcG90LyUlJSUxL3N1Yi8uLi4gLy9jbGllbnQvc3ViLyUlJSUxLy4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZpZXcgd2lsZGNhcmQgKicgJworCWNsaWVudF92aWV3ICIvL2RlcG90LyovYmFyLy4uLiAvL2NsaWVudC8qL2Jhci8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxkY2FyZCAuLi4gaW4gdGhlIG1pZGRsZScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLi9maWxlMTEgLy9jbGllbnQvLi4uL2ZpbGUxMSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIC4uLiBpbiB0aGUgbWlkZGxlIGFuZCBhdCB0aGUgZW5kJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uL2EvLi4uIC8vY2xpZW50Ly4uLi9hLy4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIG1hcCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2NsaTEvLi4uIiAmJgorCWZpbGVzPSJjbGkxL2ZpbGUxMSBjbGkxL2ZpbGUxMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGllbnQgdmlldyB3aXRoIG5vIG1hcHBpbmdzJyAnCisJY2xpZW50X3ZpZXcgJiYKKwljbGllbnRfdmVyaWZ5ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlIGZpbGUgbWFwJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS9maWxlMTEgLy9jbGllbnQvZmlsZTExIiAmJgorCWZpbGVzPSJmaWxlMTEiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGF0ZXIgbWFwcGluZyB0YWtlcyBwcmVjZWRlbmNlIChlbnRpcmUgcmVwbyknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC9jbGkxLy4uLiIgXAorCQkgICAgIi8vZGVwb3QvLi4uIC8vY2xpZW50L2NsaTIvLi4uIiAmJgorCWZpbGVzPSJjbGkyL2RpcjEvZmlsZTExIGNsaTIvZGlyMS9maWxlMTIKKwkgICAgICAgY2xpMi9kaXIyL2ZpbGUyMSBjbGkyL2RpcjIvZmlsZTIyIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhdGVyIG1hcHBpbmcgdGFrZXMgcHJlY2VkZW5jZSAocGFydGlhbCByZXBvKScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMjEgZmlsZTIyIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKKyMgUmVhZGluZyB0aGUgdmlldyBiYWNrd2FyZHMsCisjICAgZGlyMiBnb2VzIHRvIGNsaTEyCisjICAgZGlyMSBjYW5ub3QgZ28gdG8gY2xpMTIgc2luY2UgaXQgd2FzIGZpbGxlZCBieSBkaXIyCisjICAgZGlyMSBhbHNvIGRvZXMgbm90IGdvIHRvIGNsaTMsIHNpbmNlIHRoZSBzZWNvbmQgcnVsZQorIyAgICAgbm90aWNlZCB0aGF0IGl0IG1hdGNoZWQsIGJ1dCB3YXMgYWxyZWFkeSBmaWxsZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlcG90IHBhdGggbWF0Y2hpbmcgcmVqZWN0ZWQgY2xpZW50IHBhdGgnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC9jbGkzLy4uLiIgXAorCQkgICAgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvY2xpMTIvLi4uIiBcCisJCSAgICAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC9jbGkxMi8uLi4iICYmCisJZmlsZXM9ImNsaTEyL2ZpbGUyMSBjbGkxMi9maWxlMjIiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMKKycKKworIyBzaW5jZSBib3RoIGhhdmUgdGhlIHNhbWUgLy9jbGllbnQvLi4uLCB0aGUgZXhjbHVzaW9uCisjIHJ1bGUga2VlcHMgZXZlcnl0aGluZyBvdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4Y2x1c2lvbiB3aWxkY2FyZCwgY2xpZW50IHJocyBzYW1lIChvZGQpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIi0vL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwljbGllbnRfdmVyaWZ5ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhjbHVzaW9uIHdpbGRjYXJkLCBjbGllbnQgcmhzIGRpZmZlcmVudCAobm9ybWFsKScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICItLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC9kaXIyLy4uLiIgJiYKKwlmaWxlcz0iZGlyMS9maWxlMTEgZGlyMS9maWxlMTIiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhjbHVzaW9uIHNpbmdsZSBmaWxlJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIi0vL2RlcG90L2RpcjIvZmlsZTIyIC8vY2xpZW50L2ZpbGUyMiIgJiYKKwlmaWxlcz0iZGlyMS9maWxlMTEgZGlyMS9maWxlMTIgZGlyMi9maWxlMjEiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSB3aWxkY2FyZCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2NsaS8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC9jbGkvLi4uIiAmJgorCWZpbGVzPSJjbGkvZmlsZTExIGNsaS9maWxlMTIgY2xpL2ZpbGUyMSBjbGkvZmlsZTIyIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc2luZ2xlIGZpbGUnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC9jbGkvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMi9maWxlMjEgLy9jbGllbnQvY2xpL2ZpbGUyMSIgJiYKKwlmaWxlcz0iY2xpL2ZpbGUxMSBjbGkvZmlsZTEyIGNsaS9maWxlMjEiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhjbHVzaW9uIHdpdGggbGF0ZXIgaW5jbHVzaW9uJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIi0vL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50L2RpcjIvLi4uIiBcCisJCSAgICAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC9kaXIyaW5jbC8uLi4iICYmCisJZmlsZXM9ImRpcjEvZmlsZTExIGRpcjEvZmlsZTEyIGRpcjJpbmNsL2ZpbGUyMSBkaXIyaW5jbC9maWxlMjIiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGVzIG9uIHJocyBvbmx5JyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gXCIvL2NsaWVudC9jZGlyIDEvLi4uXCIiICYmCisJY2xpZW50X3ZlcmlmeSAiY2RpciAxL2ZpbGUxMSIgImNkaXIgMS9maWxlMTIiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgImNkaXIgMS9maWxlMTEiICJjZGlyIDEvZmlsZTEyIgorJworCisjCisjIFN1Ym1pdCB0ZXN0cworIworCisjIGNsb25lIHNldHMgdmFyaWFibGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tdXNlLWNsaWVudC1zcGVjIHNldHMgdXNlQ2xpZW50U3BlYycgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgLS1ib29sIGdpdC1wNC51c2VDbGllbnRTcGVjID5hY3R1YWwgJiYKKwkJZWNobyB0cnVlID50cnVlICYmCisJCXRlc3RfY21wIGFjdHVhbCB0cnVlCisJKQorJworCisjIGNsb25lIGp1c3QgYSBzdWJkaXIgb2YgdGhlIGNsaWVudCBzcGVjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgY2xvbmUnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJkaXIxL2ZpbGUxMSBkaXIxL2ZpbGUxMiBkaXIyL2ZpbGUyMSBkaXIyL2ZpbGUyMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvZGlyMSAmJgorCWdpdF92ZXJpZnkgZGlyMS9maWxlMTEgZGlyMS9maWxlMTIKKycKKworIworIyBzdWJtaXQgYmFjaywgc2VlIHdoYXQgaGFwcGVuczogIGZpdmUgY2FzZXMKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpciBjbG9uZSwgc3VibWl0IG1vZGlmeScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9kaXIxICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQllY2hvIGxpbmUgPj5kaXIxL2ZpbGUxMiAmJgorCQlnaXQgYWRkIGRpcjEvZmlsZTEyICYmCisJCWdpdCBjb21taXQgLW0gZGlyMS9maWxlMTIgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIxL2ZpbGUxMiAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGRpcjEvZmlsZTEyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgY2xvbmUsIHN1Ym1pdCBhZGQnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvZGlyMSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZWNobyBmaWxlMTMgPmRpcjEvZmlsZTEzICYmCisJCWdpdCBhZGQgZGlyMS9maWxlMTMgJiYKKwkJZ2l0IGNvbW1pdCAtbSBkaXIxL2ZpbGUxMyAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpcjEvZmlsZTEzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgY2xvbmUsIHN1Ym1pdCBkZWxldGUnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvZGlyMSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHJtIGRpcjEvZmlsZTEyICYmCisJCWdpdCBjb21taXQgLW0gImRlbGV0ZSBkaXIxL2ZpbGUxMiIgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkaXIxL2ZpbGUxMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIGNsb25lLCBzdWJtaXQgY29weScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9kaXIxICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXMgdHJ1ZSAmJgorCQljcCBkaXIxL2ZpbGUxMSBkaXIxL2ZpbGUxMWEgJiYKKwkJZ2l0IGFkZCBkaXIxL2ZpbGUxMWEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY29weSB0byBkaXIxL2ZpbGUxMWEiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyMS9maWxlMTFhICYmCisJCSEgaXNfY2xpX2ZpbGVfd3JpdGVhYmxlIGRpcjEvZmlsZTExYQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIGNsb25lLCBzdWJtaXQgcmVuYW1lJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L2RpcjEgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdFJlbmFtZXMgdHJ1ZSAmJgorCQlnaXQgbXYgZGlyMS9maWxlMTMgZGlyMS9maWxlMTNhICYmCisJCWdpdCBjb21taXQgLW0gInJlbmFtZSBkaXIxL2ZpbGUxMyB0byBkaXIxL2ZpbGUxM2EiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlyMS9maWxlMTMgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyMS9maWxlMTNhICYmCisJCSEgaXNfY2xpX2ZpbGVfd3JpdGVhYmxlIGRpcjEvZmlsZTEzYQorCSkKKycKKworIyBzZWUgdDk4MDAgZm9yIHRoZSBub24tY2xpZW50LXNwZWMgY2FzZSwgYW5kIHRoZSByZXN0IG9mIHRoZSB3aWxkY2FyZCB0ZXN0cwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsZGNhcmQgZmlsZXMgc3VibWl0IGJhY2sgdG8gcDQsIGNsaWVudC1zcGVjIGNhc2UnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvZGlyMSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gZ2l0LXdpbGQtaGFzaCA+ZGlyMS9naXQtd2lsZCNoYXNoICYmCisJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXLCFDWUdXSU4KKwkJdGhlbgorCQkJZWNobyBnaXQtd2lsZC1zdGFyID5kaXIxL2dpdC13aWxkXCpzdGFyCisJCWZpICYmCisJCWVjaG8gZ2l0LXdpbGQtYXQgPmRpcjEvZ2l0LXdpbGRAYXQgJiYKKwkJZWNobyBnaXQtd2lsZC1wZXJjZW50ID5kaXIxL2dpdC13aWxkJXBlcmNlbnQgJiYKKwkJZ2l0IGFkZCBkaXIxL2dpdC13aWxkKiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc29tZSB3aWxkY2FyZCBmaWxlbmFtZXMiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0Q2hlY2sgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpcjEvZ2l0LXdpbGQjaGFzaCAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVywhQ1lHV0lOCisJCXRoZW4KKwkJCXRlc3RfcGF0aF9pc19maWxlIGRpcjEvZ2l0LXdpbGRcKnN0YXIKKwkJZmkgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyMS9naXQtd2lsZEBhdCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIxL2dpdC13aWxkJXBlcmNlbnQKKwkpICYmCisJKAorCQkjIGRlbGV0ZSB0aGVzZSBjYXJlZnVsbHksIGNhbm5vdCBqdXN0IGRvICJwNCBkZWxldGUiCisJCSMgb24gZmlsZXMgd2l0aCB3aWxkY2FyZHM7IGJ1dCBnaXQtcDQga25vd3MgaG93CisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcm0gZGlyMS9naXQtd2lsZCogJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY2xlYW4gdXAgdGhlIHdpbGRjYXJkcyIgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVpbml0IGRlcG90JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcm0gZmlsZXMgJiYKKwkJcDQgZGVsZXRlICovKiAmJgorCQlwNCBzdWJtaXQgLWQgImRlbGV0ZSBhbGwgZmlsZXMiICYmCisJCWluaXRfZGVwb3QKKwkpCisnCisKKyMKKyMgV2hhdCBoYXBwZW5zIHdoZW4gdHdvIGZpbGVzIG9mIHRoZSBzYW1lIG5hbWUgYXJlIG92ZXJsYWlkIHRvZ2V0aGVyPworIyBUaGUgbGFzdC1saXN0ZWQgZmlsZSBzaG91bGQgdGFrZSBwcmVmZXJlbmNlLgorIworIyAvL2RlcG90CisjICAgLSBkaXIxCisjICAgICAtIGZpbGUxMQorIyAgICAgLSBmaWxlMTIKKyMgICAgIC0gZmlsZWNvbGxpZGUKKyMgICAtIGRpcjIKKyMgICAgIC0gZmlsZTIxCisjICAgICAtIGZpbGUyMgorIyAgICAgLSBmaWxlY29sbGlkZQorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBjb2xsaXNpb24gc2V0dXAnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZWNobyBkaXIxL2ZpbGVjb2xsaWRlID5kaXIxL2ZpbGVjb2xsaWRlICYmCisJCXA0IGFkZCBkaXIxL2ZpbGVjb2xsaWRlICYmCisJCXA0IHN1Ym1pdCAtZCBkaXIxL2ZpbGVjb2xsaWRlICYmCisJCWVjaG8gZGlyMi9maWxlY29sbGlkZSA+ZGlyMi9maWxlY29sbGlkZSAmJgorCQlwNCBhZGQgZGlyMi9maWxlY29sbGlkZSAmJgorCQlwNCBzdWJtaXQgLWQgZGlyMi9maWxlY29sbGlkZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBjb2xsaXNpb24gMSB0byAyJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIgZmlsZWNvbGxpZGUiICYmCisJZWNobyBkaXIyL2ZpbGVjb2xsaWRlID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvZmlsZWNvbGxpZGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRnaXQiL2ZpbGVjb2xsaWRlCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ292ZXJsYXkgY29sbGlzaW9uIDIgdG8gMScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIGZpbGVjb2xsaWRlIiAmJgorCWVjaG8gZGlyMS9maWxlY29sbGlkZSA+YWN0dWFsICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRjbGkiL2ZpbGVjb2xsaWRlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkZ2l0Ii9maWxlY29sbGlkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IGNvbGxpc2lvbiBkZWxldGUgMicgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQlwNCBkZWxldGUgZGlyMi9maWxlY29sbGlkZSAmJgorCQlwNCBzdWJtaXQgLWQgInJlbW92ZSBkaXIyL2ZpbGVjb2xsaWRlIgorCSkKKycKKworIyBubyBmaWxlY29sbGlkZSwgZ290IGRlbGV0ZWQgd2l0aCBkaXIyCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdvdmVybGF5IGNvbGxpc2lvbiAxIHRvIDIsIGJ1dCAyIGRlbGV0ZWQnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IGNvbGxpc2lvbiB1cGRhdGUgMScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2RpcjEvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJcDQgb3BlbiBkaXIxL2ZpbGVjb2xsaWRlICYmCisJCWVjaG8gZGlyMS9maWxlY29sbGlkZSB1cGRhdGUgPmRpcjEvZmlsZWNvbGxpZGUgJiYKKwkJcDQgc3VibWl0IC1kICJ1cGRhdGUgZGlyMS9maWxlY29sbGlkZSIKKwkpCisnCisKKyMgc3RpbGwgbm8gZmlsZWNvbGxpZGUsIGRpcjIgc3RpbGwgd2lucyB3aXRoIHRoZSBkZWxldGlvbiBldmVuIHRob3VnaCB0aGUKKyMgY2hhbmdlIHRvIGRpcjEgaXMgbW9yZSByZWNlbnQKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ292ZXJsYXkgY29sbGlzaW9uIDEgdG8gMiwgYnV0IDIgZGVsZXRlZCwgdGhlbiAxIHVwZGF0ZWQnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IGNvbGxpc2lvbiBkZWxldGUgZmlsZWNvbGxpZGVzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCXA0IGRlbGV0ZSBkaXIxL2ZpbGVjb2xsaWRlIGRpcjIvZmlsZWNvbGxpZGUgJiYKKwkJcDQgc3VibWl0IC1kICJyZW1vdmUgZmlsZWNvbGxpZGVzIgorCSkKKycKKworIworIyBPdmVybGF5cyBhcyBwYXJ0IG9mIHN5bmMsIHJhdGhlciB0aGFuIGluaXRpYWwgY2hlY2tvdXQ6CisjICAgMS4gIGFkZCBhIGZpbGUgaW4gZGlyMQorIyAgIDIuICBzeW5jIHRvIGluY2x1ZGUgaXQKKyMgICAzLiAgYWRkIHNhbWUgZmlsZSBpbiBkaXIyCisjICAgNC4gIHN5bmMsIG1ha2Ugc3VyZSBjb250ZW50IHN3aXRjaGVzIGFzIGRpcjIgaGFzIHByaW9yaXR5CisjICAgNS4gIGFkZCBhbm90aGVyIGZpbGUgaW4gZGlyMQorIyAgIDYuICBzeW5jCisjICAgNy4gIGFkZC9kZWxldGUgc2FtZSBmaWxlIGluIGRpcjIKKyMgICA4LiAgc3luYywgbWFrZSBzdXJlIGl0IGRpc2FwcGVhcnMsIGFnYWluIGRpcjIgd2lucworIyAgIDkuICBjbGVhbnVwCisjCisjIC8vZGVwb3QKKyMgICAtIGRpcjEKKyMgICAgIC0gZmlsZTExCisjICAgICAtIGZpbGUxMgorIyAgICAgLSBjb2xBCisjICAgICAtIGNvbEIKKyMgICAtIGRpcjIKKyMgICAgIC0gZmlsZTIxCisjICAgICAtIGZpbGUyMgorIyAgICAgLSBjb2xBCisjICAgICAtIGNvbEIKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYzogYWRkIGNvbEEgaW4gZGlyMScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2RpcjEvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZWNobyBkaXIxL2NvbEEgPmRpcjEvY29sQSAmJgorCQlwNCBhZGQgZGlyMS9jb2xBICYmCisJCXA0IHN1Ym1pdCAtZCBkaXIxL2NvbEEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYzogaW5pdGlhbCBnaXQgY2hlY2tvdXQnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiBjb2xBIiAmJgorCWVjaG8gZGlyMS9jb2xBID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvY29sQSAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGdpdCIvY29sQQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmM6IGFkZCBjb2xBIGluIGRpcjInICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC9kaXIyLy4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWVjaG8gZGlyMi9jb2xBID5kaXIyL2NvbEEgJiYKKwkJcDQgYWRkIGRpcjIvY29sQSAmJgorCQlwNCBzdWJtaXQgLWQgZGlyMi9jb2xBCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmM6IGNvbEEgY29udGVudCBzd2l0Y2gnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiBjb2xBIiAmJgorCWVjaG8gZGlyMi9jb2xBID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvY29sQSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tdXNlLWNsaWVudC1zcGVjICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgcDQvbWFzdGVyCisJKSAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkZ2l0Ii9jb2xBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYzogYWRkIGNvbEIgaW4gZGlyMScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2RpcjEvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZWNobyBkaXIxL2NvbEIgPmRpcjEvY29sQiAmJgorCQlwNCBhZGQgZGlyMS9jb2xCICYmCisJCXA0IHN1Ym1pdCAtZCBkaXIxL2NvbEIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYzogY29sQiBhcHBlYXJzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIgY29sQSBjb2xCIiAmJgorCWVjaG8gZGlyMS9jb2xCID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvY29sQiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tdXNlLWNsaWVudC1zcGVjICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgcDQvbWFzdGVyCisJKSAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkZ2l0Ii9jb2xCCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYzogYWRkL2RlbGV0ZSBjb2xCIGluIGRpcjInICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC9kaXIyLy4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWVjaG8gZGlyMi9jb2xCID5kaXIyL2NvbEIgJiYKKwkJcDQgYWRkIGRpcjIvY29sQiAmJgorCQlwNCBzdWJtaXQgLWQgZGlyMi9jb2xCICYmCisJCXA0IGRlbGV0ZSBkaXIyL2NvbEIgJiYKKwkJcDQgc3VibWl0IC1kICJkZWxldGUgZGlyMi9jb2xCIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jOiBjb2xCIGRpc2FwcGVhcnMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiBjb2xBIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS11c2UtY2xpZW50LXNwZWMgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBwNC9tYXN0ZXIKKwkpICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jOiBjbGVhbnVwJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCXA0IGRlbGV0ZSBkaXIxL2NvbEEgZGlyMi9jb2xBIGRpcjEvY29sQiAmJgorCQlwNCBzdWJtaXQgLWQgInJlbW92ZSBvdmVybGF5IHN5bmMgZmlsZXMiCisJKQorJworCisjCisjIE92ZXJsYXkgdGVzdHMgYWdhaW4sIGJ1dCBzd2FwcGVkIHNvIGRpcjEgaGFzIHByaW9yaXR5LgorIyAgIDEuICBhZGQgYSBmaWxlIGluIGRpcjEKKyMgICAyLiAgc3luYyB0byBpbmNsdWRlIGl0CisjICAgMy4gIGFkZCBzYW1lIGZpbGUgaW4gZGlyMgorIyAgIDQuICBzeW5jLCBtYWtlIHN1cmUgY29udGVudCBkb2VzIG5vdCBzd2l0Y2gKKyMgICA1LiAgYWRkIGFub3RoZXIgZmlsZSBpbiBkaXIxCisjICAgNi4gIHN5bmMKKyMgICA3LiAgYWRkL2RlbGV0ZSBzYW1lIGZpbGUgaW4gZGlyMgorIyAgIDguICBzeW5jLCBtYWtlIHN1cmUgaXQgaXMgc3RpbGwgdGhlcmUKKyMgICA5LiAgY2xlYW51cAorIworIyAvL2RlcG90CisjICAgLSBkaXIxCisjICAgICAtIGZpbGUxMQorIyAgICAgLSBmaWxlMTIKKyMgICAgIC0gY29sQQorIyAgICAgLSBjb2xCCisjICAgLSBkaXIyCisjICAgICAtIGZpbGUyMQorIyAgICAgLSBmaWxlMjIKKyMgICAgIC0gY29sQQorIyAgICAgLSBjb2xCCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmMgc3dhcDogYWRkIGNvbEEgaW4gZGlyMScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2RpcjEvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZWNobyBkaXIxL2NvbEEgPmRpcjEvY29sQSAmJgorCQlwNCBhZGQgZGlyMS9jb2xBICYmCisJCXA0IHN1Ym1pdCAtZCBkaXIxL2NvbEEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYyBzd2FwOiBpbml0aWFsIGdpdCBjaGVja291dCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIGNvbEEiICYmCisJZWNobyBkaXIxL2NvbEEgPmFjdHVhbCAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkY2xpIi9jb2xBICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkZ2l0Ii9jb2xBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYyBzd2FwOiBhZGQgY29sQSBpbiBkaXIyJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvZGlyMi8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQllY2hvIGRpcjIvY29sQSA+ZGlyMi9jb2xBICYmCisJCXA0IGFkZCBkaXIyL2NvbEEgJiYKKwkJcDQgc3VibWl0IC1kIGRpcjIvY29sQQorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnb3ZlcmxheSBzeW5jIHN3YXA6IGNvbEEgbm8gY29udGVudCBzd2l0Y2gnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiBjb2xBIiAmJgorCWVjaG8gZGlyMS9jb2xBID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvY29sQSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tdXNlLWNsaWVudC1zcGVjICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgcDQvbWFzdGVyCisJKSAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkZ2l0Ii9jb2xBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYyBzd2FwOiBhZGQgY29sQiBpbiBkaXIxJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvZGlyMS8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQllY2hvIGRpcjEvY29sQiA+ZGlyMS9jb2xCICYmCisJCXA0IGFkZCBkaXIxL2NvbEIgJiYKKwkJcDQgc3VibWl0IC1kIGRpcjEvY29sQgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jIHN3YXA6IGNvbEIgYXBwZWFycycgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIGNvbEEgY29sQiIgJiYKKwllY2hvIGRpcjEvY29sQiA+YWN0dWFsICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRjbGkiL2NvbEIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLXVzZS1jbGllbnQtc3BlYyAmJgorCQlnaXQgbWVyZ2UgLS1mZi1vbmx5IHA0L21hc3RlcgorCSkgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGdpdCIvY29sQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmMgc3dhcDogYWRkL2RlbGV0ZSBjb2xCIGluIGRpcjInICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC9kaXIyLy4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWVjaG8gZGlyMi9jb2xCID5kaXIyL2NvbEIgJiYKKwkJcDQgYWRkIGRpcjIvY29sQiAmJgorCQlwNCBzdWJtaXQgLWQgZGlyMi9jb2xCICYmCisJCXA0IGRlbGV0ZSBkaXIyL2NvbEIgJiYKKwkJcDQgc3VibWl0IC1kICJkZWxldGUgZGlyMi9jb2xCIgorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnb3ZlcmxheSBzeW5jIHN3YXA6IGNvbEIgbm8gY2hhbmdlJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIgY29sQSBjb2xCIiAmJgorCWVjaG8gZGlyMS9jb2xCID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvY29sQiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tdXNlLWNsaWVudC1zcGVjICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgcDQvbWFzdGVyCisJKSAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkY2xpIi9jb2xCCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYyBzd2FwOiBjbGVhbnVwJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCXA0IGRlbGV0ZSBkaXIxL2NvbEEgZGlyMi9jb2xBIGRpcjEvY29sQiAmJgorCQlwNCBzdWJtaXQgLWQgInJlbW92ZSBvdmVybGF5IHN5bmMgZmlsZXMiCisJKQorJworCisjCisjIFJlbmFtZSBkaXJlY3RvcmllcyB0byB0ZXN0IHF1b3RpbmcgaW4gZGVwb3Qtc2lkZSBtYXBwaW5ncworIyAvL2RlcG90CisjICAgIC0gImRpciAxIgorIyAgICAgICAtIGZpbGUxMQorIyAgICAgICAtIGZpbGUxMgorIyAgICAtICJkaXIgMiIKKyMgICAgICAgLSBmaWxlMjEKKyMgICAgICAgLSBmaWxlMjIKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBmaWxlcyB0byBpbnRyb2R1Y2Ugc3BhY2VzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwljbGllbnRfdmVyaWZ5IGRpcjEvZmlsZTExIGRpcjEvZmlsZTEyIFwKKwkJICAgICAgZGlyMi9maWxlMjEgZGlyMi9maWxlMjIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBvcGVuIGRpcjEvLi4uICYmCisJCXA0IG1vdmUgZGlyMS8uLi4gImRpciAxIi8uLi4gJiYKKwkJcDQgb3BlbiBkaXIyLy4uLiAmJgorCQlwNCBtb3ZlIGRpcjIvLi4uICJkaXIgMiIvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAicmVuYW1lIHdpdGggc3BhY2VzIgorCSkgJiYKKwljbGllbnRfdmVyaWZ5ICJkaXIgMS9maWxlMTEiICJkaXIgMS9maWxlMTIiIFwKKwkJICAgICAgImRpciAyL2ZpbGUyMSIgImRpciAyL2ZpbGUyMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGVzIG9uIGxocyBvbmx5JyAnCisJY2xpZW50X3ZpZXcgIlwiLy9kZXBvdC9kaXIgMS8uLi5cIiAvL2NsaWVudC9jZGlyMS8uLi4iICYmCisJZmlsZXM9ImNkaXIxL2ZpbGUxMSBjZGlyMS9maWxlMTIiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGVzIG9uIGJvdGggc2lkZXMnICcKKwljbGllbnRfdmlldyAiXCIvL2RlcG90L2RpciAxLy4uLlwiIFwiLy9jbGllbnQvY2RpciAxLy4uLlwiIiAmJgorCWNsaWVudF92ZXJpZnkgImNkaXIgMS9maWxlMTEiICJjZGlyIDEvZmlsZTEyIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICJjZGlyIDEvZmlsZTExIiAiY2RpciAxL2ZpbGUxMiIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODEwLWdpdC1wNC1yY3Muc2ggYi90L3Q5ODEwLWdpdC1wNC1yY3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTM4MzY4OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTAtZ2l0LXA0LXJjcy5zaApAQCAtMCwwICsxLDM2MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCByY3Mga2V5d29yZHMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCisjCisjIE1ha2Ugb25lIGZpbGUgd2l0aCBrZXl3b3JkIGxpbmVzIGF0IHRoZSB0b3AsIGFuZAorIyBlbm91Z2ggcGxhaW4gdGV4dCB0byBiZSBhYmxlIHRvIHRlc3QgbW9kaWZpY2F0aW9ucworIyBmYXIgYXdheSBmcm9tIHRoZSBrZXl3b3Jkcy4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgZGVwb3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQljYXQgPDwtXEVPRiA+ZmlsZWsgJiYKKwkJJElkJAorCQkvKiAkUmV2aXNpb24kICovCisJCSMgJENoYW5nZSQKKwkJbGluZTQKKwkJbGluZTUKKwkJbGluZTYKKwkJbGluZTcKKwkJbGluZTgKKwkJRU9GCisJCXNlZCAicy9SZXZpc2lvbi9SZXZpc2lvbjogZG8gbm90IHNjcnViIG1lLyIgPGZpbGVrID5maWxla28gJiYKKwkJc2VkICJzL0lkL0lkOiBkbyBub3Qgc2NydWIgbWUvIiA8ZmlsZWtvID5maWxlX3RleHQgJiYKKwkJcDQgYWRkIC10IHRleHQrayBmaWxlayAmJgorCQlwNCBzdWJtaXQgLWQgImZpbGVrIiAmJgorCQlwNCBhZGQgLXQgdGV4dCtrbyBmaWxla28gJiYKKwkJcDQgc3VibWl0IC1kICJmaWxla28iICYmCisJCXA0IGFkZCAtdCB0ZXh0IGZpbGVfdGV4dCAmJgorCQlwNCBzdWJtaXQgLWQgImZpbGVfdGV4dCIKKwkpCisnCisKKyMKKyMgR2VuZXJhdGUgdGhlc2UgaW4gYSBmdW5jdGlvbiB0byBtYWtlIGl0IGVhc3kgdG8gdXNlIHNpbmdsZSBxdW90ZSBtYXJrcy4KKyMKK3dyaXRlX3NjcnViX3NjcmlwdHMgKCkgeworCWNhdCA+IiRUUkFTSF9ESVJFQ1RPUlkvc2NydWJfay5weSIgPDwtXEVPRiAmJgorCWltcG9ydCByZSwgc3lzCisJc3lzLnN0ZG91dC53cml0ZShyZS5zdWIocicoP2kpXCQoSWR8SGVhZGVyfEF1dGhvcnxEYXRlfERhdGVUaW1lfENoYW5nZXxGaWxlfFJldmlzaW9uKTpbXiRdKlwkJywgcickXDEkJywgc3lzLnN0ZGluLnJlYWQoKSkpCisJRU9GCisJY2F0ID4iJFRSQVNIX0RJUkVDVE9SWS9zY3J1Yl9rby5weSIgPDwtXEVPRgorCWltcG9ydCByZSwgc3lzCisJc3lzLnN0ZG91dC53cml0ZShyZS5zdWIocicoP2kpXCQoSWR8SGVhZGVyKTpbXiRdKlwkJywgcickXDEkJywgc3lzLnN0ZGluLnJlYWQoKSkpCisJRU9GCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NjcnViIHNjcmlwdHMnICcKKwl3cml0ZV9zY3J1Yl9zY3JpcHRzCisnCisKKyMKKyMgQ29tcGFyZSAkY2xpL2ZpbGUgdG8gaXRzIHNjcnViYmVkIHZlcnNpb24sIHNob3VsZCBiZSBkaWZmZXJlbnQuCisjIENvbXBhcmUgc2NydWJiZWQgJGNsaS9maWxlIHRvICRnaXQvZmlsZSwgc2hvdWxkIGJlIHNhbWUuCisjCitzY3J1Yl9rX2NoZWNrICgpIHsKKwlmaWxlPSIkMSIgJiYKKwlzY3J1Yj0iJFRSQVNIX0RJUkVDVE9SWS8kZmlsZSIgJiYKKwkiJFBZVEhPTl9QQVRIIiAiJFRSQVNIX0RJUkVDVE9SWS9zY3J1Yl9rLnB5IiA8IiRnaXQvJGZpbGUiID4iJHNjcnViIiAmJgorCSEgdGVzdF9jbXAgIiRjbGkvJGZpbGUiICIkc2NydWIiICYmCisJdGVzdF9jbXAgIiRnaXQvJGZpbGUiICIkc2NydWIiICYmCisJcm0gIiRzY3J1YiIKK30KK3NjcnViX2tvX2NoZWNrICgpIHsKKwlmaWxlPSIkMSIgJiYKKwlzY3J1Yj0iJFRSQVNIX0RJUkVDVE9SWS8kZmlsZSIgJiYKKwkiJFBZVEhPTl9QQVRIIiAiJFRSQVNIX0RJUkVDVE9SWS9zY3J1Yl9rby5weSIgPCIkZ2l0LyRmaWxlIiA+IiRzY3J1YiIgJiYKKwkhIHRlc3RfY21wICIkY2xpLyRmaWxlIiAiJHNjcnViIiAmJgorCXRlc3RfY21wICIkZ2l0LyRmaWxlIiAiJHNjcnViIiAmJgorCXJtICIkc2NydWIiCit9CisKKyMKKyMgTW9kaWZ5IGZhciBhd2F5IGZyb20ga2V5d29yZHMuICBJZiBubyBSQ1MgbGluZXMgc2hvdyB1cAorIyBpbiB0aGUgZGlmZiwgdGhlcmUgaXMgbm8gY29uZmxpY3QuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0IGZhciBhd2F5IGZyb20gUkNTIGxpbmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJc2VkICJzL15saW5lNy9saW5lNyBlZGl0LyIgPGZpbGVrID5maWxlay50bXAgJiYKKwkJbXYgLWYgZmlsZWsudG1wIGZpbGVrICYmCisJCWdpdCBjb21taXQgLW0gImZpbGVrIGxpbmU3IGVkaXQiIGZpbGVrICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJc2NydWJfa19jaGVjayBmaWxlaworCSkKKycKKworIworIyBNb2RpZnkgbmVhciB0aGUga2V5d29yZHMuICBUaGlzIHdpbGwgcmVxdWlyZSBSQ1Mgc2NydWJiaW5nLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdCBuZWFyIFJDUyBsaW5lcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmF0dGVtcHRSQ1NDbGVhbnVwIHRydWUgJiYKKwkJc2VkICJzL15saW5lNC9saW5lNCBlZGl0LyIgPGZpbGVrID5maWxlay50bXAgJiYKKwkJbXYgLWYgZmlsZWsudG1wIGZpbGVrICYmCisJCWdpdCBjb21taXQgLW0gImZpbGVrIGxpbmU0IGVkaXQiIGZpbGVrICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJc2NydWJfa19jaGVjayBmaWxlaworCSkKKycKKworIworIyBNb2RpZnkgdGhlIGtleXdvcmRzIHRoZW1zZWx2ZXMuICBUaGlzIGFsc28gd2lsbCByZXF1aXJlIFJDUyBzY3J1YmJpbmcuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0IGtleXdvcmQgbGluZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCB0cnVlICYmCisJCXNlZCAiL1JldmlzaW9uL2QiIDxmaWxlayA+ZmlsZWsudG1wICYmCisJCW12IC1mIGZpbGVrLnRtcCBmaWxlayAmJgorCQlnaXQgY29tbWl0IC1tICJmaWxlayByZW1vdmUgUmV2aXNpb24gbGluZSIgZmlsZWsgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlzY3J1Yl9rX2NoZWNrIGZpbGVrCisJKQorJworCisjCisjIFNjcnViYmluZyB0ZXh0K2tvIGZpbGVzIHNob3VsZCBub3QgYWx0ZXIgYWxsIGtleXdvcmRzLCBqdXN0IElkLCBIZWFkZXIuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzY3J1YiBrbyBmaWxlcyBkaWZmZXJlbnRseScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmF0dGVtcHRSQ1NDbGVhbnVwIHRydWUgJiYKKwkJc2VkICJzL15saW5lNC9saW5lNCBlZGl0LyIgPGZpbGVrbyA+ZmlsZWtvLnRtcCAmJgorCQltdiAtZiBmaWxla28udG1wIGZpbGVrbyAmJgorCQlnaXQgY29tbWl0IC1tICJmaWxla28gbGluZTQgZWRpdCIgZmlsZWtvICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJc2NydWJfa29fY2hlY2sgZmlsZWtvICYmCisJCSEgc2NydWJfa19jaGVjayBmaWxla28KKwkpCisnCisKKyMgaGFjazsgZ2l0IHA0IHN1Ym1pdCBzaG91bGQgZG8gaXQgb24gaXRzIG93bgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBhZnRlciBmYWlsdXJlJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgcmV2ZXJ0IC4uLgorCSkKKycKKworIyBwZXJsICRGaWxlOjogYnVnIGNoZWNrCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrdGV4dCBleHBhbnNpb24gc2hvdWxkIG5vdCBleHBhbmQgbXVsdGktbGluZSAkRmlsZTo6JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJY2F0ID5sdi5wbSA8PC1cRU9GICYmCisJCW15ICR3YW50ZWQgPSBzdWIgeyBteSAkZiA9ICRGaWxlOjpGaW5kOjpuYW1lOworCQkJCSAgICBpZiAoIC1mICYmICRmID1+IC9mb28vICkgeworCQlFT0YKKwkJcDQgYWRkIC10IGt0ZXh0IGx2LnBtICYmCisJCXA0IHN1Ym1pdCAtZCAibHYucG0iCisJKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NtcCAiJGNsaS9sdi5wbSIgbHYucG0KKwkpCisnCisKKyMKKyMgRG8gbm90IHNjcnViIGFueXRoaW5nIGJ1dCArayBvciAra28gZmlsZXMuICBTbmVhayBhIGNoYW5nZSBpbnRvCisjIHRoZSBjbGkgZmlsZSBzbyB0aGF0IHN1Ym1pdCB3aWxsIGdldCBhIGNvbmZsaWN0LiAgTWFrZSBzdXJlIHRoYXQKKyMgc2NydWJiaW5nIGRvZXNuJ3QgbWFrZSBhIG1lc3Mgb2YgdGhpbmdzLgorIworIyBUaGlzIG1pZ2h0IGhhcHBlbiBvbmx5IGlmIHRoZSBnaXQgcmVwbyBpcyBiZWhpbmQgdGhlIHA0IHJlcG8gYXQKKyMgc3VibWl0IHRpbWUsIGFuZCB0aGVyZSBpcyBhIGNvbmZsaWN0LgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IHNjcnViIHBsYWluIHRleHQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCB0cnVlICYmCisJCXNlZCAicy9ebGluZTQvbGluZTQgZWRpdC8iIDxmaWxlX3RleHQgPmZpbGVfdGV4dC50bXAgJiYKKwkJbXYgLWYgZmlsZV90ZXh0LnRtcCBmaWxlX3RleHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZmlsZV90ZXh0IGxpbmU0IGVkaXQiIGZpbGVfdGV4dCAmJgorCQkoCisJCQljZCAiJGNsaSIgJiYKKwkJCXA0IG9wZW4gZmlsZV90ZXh0ICYmCisJCQlzZWQgInMvXmxpbmU1L2xpbmU1IHA0IGVkaXQvIiA8ZmlsZV90ZXh0ID5maWxlX3RleHQudG1wICYmCisJCQltdiAtZiBmaWxlX3RleHQudG1wIGZpbGVfdGV4dCAmJgorCQkJcDQgc3VibWl0IC1kICJmaWxlNSBwNCBlZGl0IgorCQkpICYmCisJCWVjaG8gcyB8IHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0ICYmCisJCSgKKwkJCSMgbWFrZSBzdXJlIHRoZSBmaWxlIGlzIG5vdCBsZWZ0IG9wZW4KKwkJCWNkICIkY2xpIiAmJgorCQkJISBwNCBmc3RhdCAtVCBhY3Rpb24gZmlsZV90ZXh0CisJCSkKKwkpCisnCisKKyMgaGFjazsgZ2l0IHA0IHN1Ym1pdCBzaG91bGQgZG8gaXQgb24gaXRzIG93bgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBhZnRlciBmYWlsdXJlIDInICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCByZXZlcnQgLi4uCisJKQorJworCitjcmVhdGVfa3dfZmlsZSAoKSB7CisJY2F0IDw8XEVPRiA+IiQxIgorLyogQSBmaWxlCisJSWQ6ICRJZCQKKwlSZXZpc2lvbjogJFJldmlzaW9uJAorCUZpbGU6ICRGaWxlJAorICovCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpIHsKKwlyZXR1cm4gMDsKK30KK0VPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQga3dmaWxlJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBmaWxlMSA+ZmlsZTEgJiYKKwkJcDQgYWRkIGZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiZmlsZSAxIiAmJgorCQljcmVhdGVfa3dfZmlsZSBrd2ZpbGUxLmMgJiYKKwkJcDQgYWRkIGt3ZmlsZTEuYyAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCByY3cga3cgZmlsZSIga3dmaWxlMS5jCisJKQorJworCitwNF9hcHBlbmRfdG9fZmlsZSAoKSB7CisJZj0iJDEiICYmCisJcDQgZWRpdCAtdCBrdGV4dCAiJGYiICYmCisJZWNobyAiLyogJChkYXRlKSAqLyIgPj4iJGYiICYmCisJcDQgc3VibWl0IC1kICJhcHBlbmRpbmcgYSBsaW5lIGluIHA0IgorfQorCisjIENyZWF0ZSBzb21lIGZpbGVzIHdpdGggUkNTIGtleXdvcmRzLiBJZiB0aGV5IGdldCBtb2RpZmllZAorIyBlbHNld2hlcmUgdGhlbiB0aGUgdmVyc2lvbiBudW1iZXIgZ2V0cyBidW1wZWQgd2hpY2ggdGhlbgorIyByZXN1bHRzIGluIGEgbWVyZ2UgY29uZmxpY3QgaWYgd2UgdG91Y2ggdGhlIFJDUyBrdyBsaW5lcywKKyMgZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSBpdHNlbGYgd291bGQgb3RoZXJ3aXNlIGFwcGx5IGNsZWFubHkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3BlIHdpdGggcmNzIGtleXdvcmQgZXhwYW5zaW9uIGRhbWFnZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmF0dGVtcHRSQ1NDbGVhbnVwIHRydWUgJiYKKwkJKGNkICIkY2xpIiAmJiBwNF9hcHBlbmRfdG9fZmlsZSBrd2ZpbGUxLmMpICYmCisJCW9sZF9saW5lcz0kKHdjIC1sIDxrd2ZpbGUxLmMpICYmCisJCXBlcmwgLW4gLWkgLWUgInByaW50IHVubGVzcyBtL1JldmlzaW9uOi8iIGt3ZmlsZTEuYyAmJgorCQluZXdfbGluZXM9JCh3YyAtbCA8a3dmaWxlMS5jKSAmJgorCQl0ZXN0ICRuZXdfbGluZXMgPSAkKCgkb2xkX2xpbmVzIC0gMSkpICYmCisKKwkJZ2l0IGFkZCBrd2ZpbGUxLmMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiWmFwIGFuIFJDUyBrdyBsaW5lIiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCWdpdCBwNCByZWJhc2UgJiYKKwkJZ2l0IGRpZmYgcDQvbWFzdGVyICYmCisJCWdpdCBwNCBjb21taXQgJiYKKwkJZWNobyAidHJ5IG1vZGlmeWluZyBpbiBib3RoIiAmJgorCQljZCAiJGNsaSIgJiYKKwkJcDQgZWRpdCBrd2ZpbGUxLmMgJiYKKwkJZWNobyAibGluZSBmcm9tIHA0IiA+Pmt3ZmlsZTEuYyAmJgorCQlwNCBzdWJtaXQgLWQgImFkZCBhIGxpbmUgaW4gcDQiIGt3ZmlsZTEuYyAmJgorCQljZCAiJGdpdCIgJiYKKwkJZWNobyAibGluZSBmcm9tIGdpdCBhdCB0aGUgdG9wIiB8IGNhdCAtIGt3ZmlsZTEuYyA+a3dmaWxlMS5jLm5ldyAmJgorCQltdiBrd2ZpbGUxLmMubmV3IGt3ZmlsZTEuYyAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgbGluZSBpbiBnaXQgYXQgdGhlIHRvcCIga3dmaWxlMS5jICYmCisJCWdpdCBwNCByZWJhc2UgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29wZSB3aXRoIHJjcyBrZXl3b3JkIGZpbGUgZGVsZXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvICJcJFJldmlzaW9uXCQiID5rd2RlbGZpbGUuYyAmJgorCQlwNCBhZGQgLXQga3RleHQga3dkZWxmaWxlLmMgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZSB0byBiZSBkZWxldGVkIiAmJgorCQlncmVwIDEga3dkZWxmaWxlLmMKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdyZXAgUmV2aXNpb24ga3dkZWxmaWxlLmMgJiYKKwkJZ2l0IHJtIC1mIGt3ZGVsZmlsZS5jICYmCisJCWdpdCBjb21taXQgLW0gIkRlbGV0ZSBhIGZpbGUgY29udGFpbmluZyBSQ1Mga2V5d29yZHMiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXAgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJISB0ZXN0IC1mIGt3ZGVsZmlsZS5jCisJKQorJworCisjIElmIHlvdSBhZGQga2V5d29yZHMgaW4gZ2l0IG9mIHRoZSBmb3JtICRIZWFkZXIkIHRoZW4gZXZlcnl0aGluZyBzaG91bGQKKyMgd29yayBmaW5lIHdpdGhvdXQgYW55IHNwZWNpYWwgaGFuZGxpbmcuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBZGQga2V5d29yZHMgaW4gZ2l0IHdoaWNoIG1hdGNoIHRoZSBkZWZhdWx0IHA0IHZhbHVlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvICJOZXdLVzogXCRSZXZpc2lvblwkIiA+Pmt3ZmlsZTEuYyAmJgorCQlnaXQgYWRkIGt3ZmlsZTEuYyAmJgorCQlnaXQgY29tbWl0IC1tICJBZGRpbmcgUkNTIGtleXdvcmRzIGluIGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQl0ZXN0IC1mIGt3ZmlsZTEuYyAmJgorCQlncmVwICJOZXdLVy4qUmV2aXNpb24uKlswLTldIiBrd2ZpbGUxLmMKKworCSkKKycKKworIyBJZiB5b3UgYWRkIGtleXdvcmRzIGluIGdpdCBvZiB0aGUgZm9ybSAkSGVhZGVyOiMxJCB0aGVuIHRoaW5ncyB3aWxsIGZhaWwKKyMgdW5sZXNzIGdpdC1wNCB0YWtlcyBzdGVwcyB0byBzY3J1YiB0aGUgKmdpdCogY29tbWl0LgorIwordGVzdF9leHBlY3RfZmFpbHVyZSAnQWRkIGtleXdvcmRzIGluIGdpdCB3aGljaCBkbyBub3QgbWF0Y2ggdGhlIGRlZmF1bHQgcDQgdmFsdWVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gIk5ld0tXMjogXCRSZXZpc2lvbjoxXCQiID4+a3dmaWxlMS5jICYmCisJCWdpdCBhZGQga3dmaWxlMS5jICYmCisJCWdpdCBjb21taXQgLW0gIkFkZGluZyBSQ1Mga2V5d29yZHMgaW4gZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmF0dGVtcHRSQ1NDbGVhbnVwIHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWdyZXAgIk5ld0tXMi4qUmV2aXNpb24uKlswLTldIiBrd2ZpbGUxLmMKKworCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODExLWdpdC1wNC1sYWJlbC1pbXBvcnQuc2ggYi90L3Q5ODExLWdpdC1wNC1sYWJlbC1pbXBvcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzE0NDZmMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTEtZ2l0LXA0LWxhYmVsLWltcG9ydC5zaApAQCAtMCwwICsxLDI2MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBsYWJlbCB0ZXN0cycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKKyMgQmFzaWMgcDQgbGFiZWwgaW1wb3J0IHRlc3RzLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgcDQgbGFiZWxzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJbWtkaXIgLXAgbWFpbiAmJgorCisJCWVjaG8gZjEgPm1haW4vZjEgJiYKKwkJcDQgYWRkIG1haW4vZjEgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2YxIiAmJgorCisJCWVjaG8gZjIgPm1haW4vZjIgJiYKKwkJcDQgYWRkIG1haW4vZjIgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2YyIiAmJgorCisJCWVjaG8gZjMgPm1haW4vZmlsZV93aXRoX1wkbWV0YWNoYXIgJiYKKwkJcDQgYWRkIG1haW4vZmlsZV93aXRoX1wkbWV0YWNoYXIgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlIHdpdGggbWV0YWNoYXIiICYmCisKKwkJcDQgdGFnIC1sIFRBR19GMV9PTkxZIG1haW4vZjEgJiYKKwkJcDQgdGFnIC1sIFRBR19XSVRIXCRfU0hFTExfQ0hBUiBtYWluLy4uLiAmJgorCQlwNCB0YWcgLWwgdGhpc190YWdfd2lsbF9iZVwgc2tpcHBlZCBtYWluLy4uLiAmJgorCisJCWVjaG8gZjQgPm1haW4vZjQgJiYKKwkJcDQgYWRkIG1haW4vZjQgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2Y0IiAmJgorCisJCXA0IGxhYmVsIC1pIDw8LUVPRiAmJgorCQlMYWJlbDogVEFHX0xPTkdfTEFCRUwKKwkJRGVzY3JpcHRpb246CisJCSAgIEEgTGFiZWwgZmlyc3QgbGluZQorCQkgICBBIExhYmVsIHNlY29uZCBsaW5lCisJCVZpZXc6CS8vZGVwb3QvLi4uCisJCUVPRgorCisJCXA0IHRhZyAtbCBUQUdfTE9OR19MQUJFTCAuLi4gJiYKKworCQlwNCBsYWJlbHMgLi4uICYmCisKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhYmVsSW1wb3J0UmVnZXhwICIuKlRBRy4qIiAmJgorCQlnaXQgcDQgc3luYyAtLWltcG9ydC1sYWJlbHMgLS12ZXJib3NlICYmCisKKwkJZ2l0IHRhZyAmJgorCQlnaXQgdGFnID50YWdsaXN0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgdGFnbGlzdCAmJgorCisJCWNkIG1haW4gJiYKKwkJZ2l0IGNoZWNrb3V0IFRBR19GMV9PTkxZICYmCisJCSEgdGVzdCAtZiBmMiAmJgorCQlnaXQgY2hlY2tvdXQgVEFHX1dJVEhcJF9TSEVMTF9DSEFSICYmCisJCXRlc3QgLWYgZjEgJiYgdGVzdCAtZiBmMiAmJiB0ZXN0IC1mIGZpbGVfd2l0aF9cJG1ldGFjaGFyICYmCisKKwkJZ2l0IHNob3cgVEFHX0xPTkdfTEFCRUwgfCBncmVwIC1xICJBIExhYmVsIHNlY29uZCBsaW5lIgorCSkKKycKKyMgVGVzdCBzb21lIGxhYmVsIGNvcm5lciBjYXNlczoKKyMKKyMgLSB0d28gdGFncyBvbiB0aGUgc2FtZSBmaWxlOyBib3RoIHNob3VsZCBiZSBhdmFpbGFibGUKKyMgLSBhIHRhZyB0aGF0IGlzIG9ubHkgb24gb25lIGZpbGU7IHRoaXMga2luZCBvZiB0YWcKKyMgICBjYW5ub3QgYmUgaW1wb3J0ZWQgKGF0IGxlYXN0IG5vdCBlYXNpbHkpLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d28gbGFiZWxzIG9uIHRoZSBzYW1lIGNoYW5nZWxpc3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciAtcCBtYWluICYmCisKKwkJcDQgZWRpdCBtYWluL2YxIG1haW4vZjIgJiYKKwkJZWNobyAiaGVsbG8gd29ybGQiID5tYWluL2YxICYmCisJCWVjaG8gIm5vdCBpbiB0aGUgdGFnIiA+bWFpbi9mMiAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vZlsxMl06IHRlc3RpbmcgdHdvIGxhYmVscyIgJiYKKworCQlwNCB0YWcgLWwgVEFHX0YxXzEgbWFpbi8uLi4gJiYKKwkJcDQgdGFnIC1sIFRBR19GMV8yIG1haW4vLi4uICYmCisKKwkJcDQgbGFiZWxzIC4uLiAmJgorCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLWltcG9ydC1sYWJlbHMgJiYKKworCQlnaXQgdGFnIHwgZ3JlcCBUQUdfRjEgJiYKKwkJZ2l0IHRhZyB8IGdyZXAgLXEgVEFHX0YxXzEgJiYKKwkJZ2l0IHRhZyB8IGdyZXAgLXEgVEFHX0YxXzIgJiYKKworCQljZCBtYWluICYmCisKKwkJZ2l0IGNoZWNrb3V0IFRBR19GMV8xICYmCisJCWxzICYmCisJCXRlc3QgLWYgZjEgJiYKKworCQlnaXQgY2hlY2tvdXQgVEFHX0YxXzIgJiYKKwkJbHMgJiYKKwkJdGVzdCAtZiBmMQorCSkKKycKKworIyBFeHBvcnQgc29tZSBnaXQgdGFncyB0byBwNAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwb3J0IGdpdCB0YWdzIHRvIHA0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgdGFnIC1tICJBIHRhZyBjcmVhdGVkIGluIGdpdDp4eXp6eSIgR0lUX1RBR18xICYmCisJCWVjaG8gImhlbGxvIHdvcmxkIiA+bWFpbi9mMTAgJiYKKwkJZ2l0IGFkZCBtYWluL2YxMCAmJgorCQlnaXQgY29tbWl0IC1tICJBZGRpbmcgZmlsZSBmb3IgZXhwb3J0IHRlc3QiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlnaXQgdGFnIC1tICJBbm90aGVyIGdpdCB0YWciIEdJVF9UQUdfMiAmJgorCQlnaXQgdGFnIExJR0hUV0VJR0hUX1RBRyAmJgorCQlnaXQgcDQgcmViYXNlIC0taW1wb3J0LWxhYmVscyAtLXZlcmJvc2UgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWV4cG9ydC1sYWJlbHMgLS12ZXJib3NlCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgLi4uICYmCisJCXA0IGxhYmVscyAuLi4gfCBncmVwIEdJVF9UQUdfMSAmJgorCQlwNCBsYWJlbHMgLi4uIHwgZ3JlcCBHSVRfVEFHXzIgJiYKKwkJcDQgbGFiZWxzIC4uLiB8IGdyZXAgTElHSFRXRUlHSFRfVEFHICYmCisJCXA0IGxhYmVsIC1vIEdJVF9UQUdfMSB8IGdyZXAgInRhZyBjcmVhdGVkIGluIGdpdDp4eXp6eSIgJiYKKwkJcDQgc3luYyAuLi5AR0lUX1RBR18xICYmCisJCSEgdGVzdCAtZiBtYWluL2YxMCAmJgorCQlwNCBzeW5jIC4uLkBHSVRfVEFHXzIgJiYKKwkJdGVzdCAtZiBtYWluL2YxMAorCSkKKycKKworIyBFeHBvcnQgYSB0YWcgZnJvbSBnaXQgd2hlcmUgYW4gYWZmZWN0ZWQgZmlsZSBpcyBkZWxldGVkIGxhdGVyIG9uCisjIE5lZWQgdG8gY3JlYXRlIGdpdCB0YWdzIGFmdGVyIHJlYmFzZSwgc2luY2Ugb25seSB0aGVuIGNhbiB0aGUKKyMgZ2l0IGNvbW1pdHMgYmUgbWFwcGVkIHRvIHA0IGNoYW5nZWxpc3RzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwb3J0IGdpdCB0YWdzIHRvIHA0IHdpdGggZGVsZXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0taW1wb3J0LWxhYmVscyAmJgorCQllY2hvICJkZWxldGVkIGZpbGUiID5tYWluL2RlbGV0ZWRfZmlsZSAmJgorCQlnaXQgYWRkIG1haW4vZGVsZXRlZF9maWxlICYmCisJCWdpdCBjb21taXQgLW0gImNyZWF0ZSBkZWxldGVkIGZpbGUiICYmCisJCWdpdCBybSBtYWluL2RlbGV0ZWRfZmlsZSAmJgorCQllY2hvICJuZXcgZmlsZSIgPm1haW4vZjExICYmCisJCWdpdCBhZGQgbWFpbi9mMTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZGVsZXRlIHRoZSBkZWxldGVkIGZpbGUiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlnaXQgcDQgcmViYXNlIC0taW1wb3J0LWxhYmVscyAtLXZlcmJvc2UgJiYKKwkJZ2l0IHRhZyAtbSAidGFnIG9uIGRlbGV0ZWQgZmlsZSIgR0lUX1RBR19PTl9ERUxFVEVEIEhFQUR+MSAmJgorCQlnaXQgdGFnIC1tICJ0YWcgYWZ0ZXIgZGVsZXRpb24iIEdJVF9UQUdfQUZURVJfREVMRVRJT04gSEVBRCAmJgorCQlnaXQgcDQgc3VibWl0IC0tZXhwb3J0LWxhYmVscyAtLXZlcmJvc2UKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAuLi4gJiYKKwkJcDQgc3luYyAuLi5AR0lUX1RBR19PTl9ERUxFVEVEICYmCisJCXRlc3QgLWYgbWFpbi9kZWxldGVkX2ZpbGUgJiYKKwkJcDQgc3luYyAuLi5AR0lUX1RBR19BRlRFUl9ERUxFVElPTiAmJgorCQkhIHRlc3QgLWYgbWFpbi9kZWxldGVkX2ZpbGUgJiYKKwkJZWNobyAiY2hlY2tpbmcgbGFiZWwgY29udGVudHMiICYmCisJCXA0IGxhYmVsIC1vIEdJVF9UQUdfT05fREVMRVRFRCB8IGdyZXAgInRhZyBvbiBkZWxldGVkIGZpbGUiCisJKQorJworCisjIENyZWF0ZSBhIHRhZyBpbiBnaXQgdGhhdCBjYW5ub3QgYmUgZXhwb3J0ZWQgdG8gcDQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyB0aGF0IGNhbm5vdCBiZSBleHBvcnRlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGFfYnJhbmNoICYmCisJCWVjaG8gImhlbGxvIiA+bWFpbi9mMTIgJiYKKwkJZ2l0IGFkZCBtYWluL2YxMiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGRpbmcgZjEyIiAmJgorCQlnaXQgdGFnIC1tICJ0YWcgb24gYV9icmFuY2giIEdJVF9UQUdfT05fQV9CUkFOQ0ggJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgcDQgc3VibWl0IC0tZXhwb3J0LWxhYmVscworCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jIC4uLiAmJgorCQkhIHA0IGxhYmVscyB8IGdyZXAgR0lUX1RBR19PTl9BX0JSQU5DSAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIGdpdCBjb25maWcgdG8gZW5hYmxlIGltcG9ydC9leHBvcnQgb2YgdGFncycgJworCWdpdCBwNCBjbG9uZSAtLXZlcmJvc2UgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmV4cG9ydExhYmVscyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmltcG9ydExhYmVscyB0cnVlICYmCisJCWdpdCB0YWcgQ0ZHX0FfR0lUX1RBRyAmJgorCQlnaXQgcDQgcmViYXNlIC0tdmVyYm9zZSAmJgorCQlnaXQgcDQgc3VibWl0IC0tdmVyYm9zZSAmJgorCQlnaXQgdGFnICYmCisJCWdpdCB0YWcgfCBncmVwIFRBR19GMV8xCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IGxhYmVscyAmJgorCQlwNCBsYWJlbHMgfCBncmVwIENGR19BX0dJVF9UQUcKKwkpCisnCisKK3A0X2hlYWRfcmV2aXNpb24oKSB7CisJcDQgY2hhbmdlcyAtbSAxICIkQCIgfCBhd2sgJ3twcmludCAkMn0nCit9CisKKyMgSW1wb3J0aW5nIGEgbGFiZWwgdGhhdCByZWZlcmVuY2VzIGEgUDQgY29tbWl0IHRoYXQKKyMgaGFzIG5vdCBiZWVuIHNlZW4uIFRoZSBwcmVzZW5jZSBvZiBhIGxhYmVsIG9uIGEgY29tbWl0CisjIHdlIGhhdmVuJ3Qgc2VlbiBzaG91bGQgbm90IGNhdXNlIGdpdC1wNCB0byBmYWlsLiBJdCBzaG91bGQKKyMgbWVyZWx5IHNraXAgdGhhdCBsYWJlbCwgYW5kIHN0aWxsIGltcG9ydCBvdGhlciBsYWJlbHMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnRpbmcgbGFiZWxzIHdpdGggbWlzc2luZyByZXZpc2lvbnMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCXJtIC1mciAiJGNsaSIgIiRnaXQiICYmCisJCW1rZGlyICIkY2xpIiAmJgorCQlQNENMSUVOVD1taXNzaW5nLXJldmlzaW9uICYmCisJCWNsaWVudF92aWV3ICIvL2RlcG90L21pc3NpbmctcmV2aXNpb24vLi4uIC8vbWlzc2luZy1yZXZpc2lvbi8uLi4iICYmCisJCWNkICIkY2xpIiAmJgorCQk+ZjEgJiYgcDQgYWRkIGYxICYmIHA0IHN1Ym1pdCAtZCAic3RhcnQiICYmCisKKwkJcDQgdGFnIC1sIFRBR19TMCAuLi4gJiYKKworCQk+ZjIgJiYgcDQgYWRkIGYyICYmIHA0IHN1Ym1pdCAtZCAic2Vjb25kIiAmJgorCisJCXN0YXJ0cmV2PSQocDRfaGVhZF9yZXZpc2lvbiAvL2RlcG90L21pc3NpbmctcmV2aXNpb24vLi4uKSAmJgorCisJCT5mMyAmJiBwNCBhZGQgZjMgJiYgcDQgc3VibWl0IC1kICJ0aGlyZCIgJiYKKworCQlwNCBlZGl0IGYyICYmIGRhdGUgPmYyICYmIHA0IHN1Ym1pdCAtZCAiY2hhbmdlIiBmMiAmJgorCisJCWVuZHJldj0kKHA0X2hlYWRfcmV2aXNpb24gLy9kZXBvdC9taXNzaW5nLXJldmlzaW9uLy4uLikgJiYKKworCQlwNCB0YWcgLWwgVEFHX1MxIC4uLiAmJgorCisJCSMgd2Ugc2hvdWxkIHNraXAgVEFHX1MwIHNpbmNlIGl0IGlzIGJlZm9yZSBvdXIgc3RhcnRwb2ludCwKKwkJIyBidXQgcGljayB1cCBUQUdfUzEuCisKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLS1pbXBvcnQtbGFiZWxzIC12IFwKKwkJCS8vZGVwb3QvbWlzc2luZy1yZXZpc2lvbi8uLi5AJHN0YXJ0cmV2LCRlbmRyZXYgJiYKKwkJKAorCQkJY2QgIiRnaXQiICYmCisJCQlnaXQgcmV2LXBhcnNlIFRBR19TMSAmJgorCQkJISBnaXQgcmV2LXBhcnNlIFRBR19TMAorCQkpCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MTItZ2l0LXA0LXdpbGRjYXJkcy5zaCBiL3QvdDk4MTItZ2l0LXA0LXdpbGRjYXJkcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNTRhN2MyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgxMi1naXQtcDQtd2lsZGNhcmRzLnNoCkBAIC0wLDAgKzEsMjE0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHdpbGRjYXJkcycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBwNCBmaWxlcyB3aXRoIHdpbGRjYXJkcyBpbiB0aGUgbmFtZXMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwcmludGYgImZpbGUyXG5oYXNcbnNvbWVcbnJhbmRvbVxudGV4dFxuIiA+ZmlsZTIgJiYKKwkJcDQgYWRkIGZpbGUyICYmCisJCWVjaG8gZmlsZS13aWxkLWhhc2ggPmZpbGUtd2lsZCNoYXNoICYmCisJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXLCFDWUdXSU4KKwkJdGhlbgorCQkJZWNobyBmaWxlLXdpbGQtc3RhciA+ZmlsZS13aWxkXCpzdGFyCisJCWZpICYmCisJCWVjaG8gZmlsZS13aWxkLWF0ID5maWxlLXdpbGRAYXQgJiYKKwkJZWNobyBmaWxlLXdpbGQtcGVyY2VudCA+ZmlsZS13aWxkJXBlcmNlbnQgJiYKKwkJcDQgYWRkIC1mIGZpbGUtd2lsZCogJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlIHdpbGRjYXJkcyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIGZpbGVzIGdpdCBwNCBjbG9uZScgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0IC1mIGZpbGUtd2lsZCNoYXNoICYmCisJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXLCFDWUdXSU4KKwkJdGhlbgorCQkJdGVzdCAtZiBmaWxlLXdpbGRcKnN0YXIKKwkJZmkgJiYKKwkJdGVzdCAtZiBmaWxlLXdpbGRAYXQgJiYKKwkJdGVzdCAtZiBmaWxlLXdpbGQlcGVyY2VudAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsZGNhcmQgZmlsZXMgc3VibWl0IGJhY2sgdG8gcDQsIGFkZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGdpdC13aWxkLWhhc2ggPmdpdC13aWxkI2hhc2ggJiYKKwkJaWYgdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1csIUNZR1dJTgorCQl0aGVuCisJCQllY2hvIGdpdC13aWxkLXN0YXIgPmdpdC13aWxkXCpzdGFyCisJCWZpICYmCisJCWVjaG8gZ2l0LXdpbGQtYXQgPmdpdC13aWxkQGF0ICYmCisJCWVjaG8gZ2l0LXdpbGQtcGVyY2VudCA+Z2l0LXdpbGQlcGVyY2VudCAmJgorCQlnaXQgYWRkIGdpdC13aWxkKiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc29tZSB3aWxkY2FyZCBmaWxlbmFtZXMiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBnaXQtd2lsZCNoYXNoICYmCisJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXLCFDWUdXSU4KKwkJdGhlbgorCQkJdGVzdF9wYXRoX2lzX2ZpbGUgZ2l0LXdpbGRcKnN0YXIKKwkJZmkgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZ2l0LXdpbGRAYXQgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZ2l0LXdpbGQlcGVyY2VudAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsZGNhcmQgZmlsZXMgc3VibWl0IGJhY2sgdG8gcDQsIG1vZGlmeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIG5ldy1saW5lID4+Z2l0LXdpbGQjaGFzaCAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVywhQ1lHV0lOCisJCXRoZW4KKwkJCWVjaG8gbmV3LWxpbmUgPj5naXQtd2lsZFwqc3RhcgorCQlmaSAmJgorCQllY2hvIG5ldy1saW5lID4+Z2l0LXdpbGRAYXQgJiYKKwkJZWNobyBuZXctbGluZSA+PmdpdC13aWxkJXBlcmNlbnQgJiYKKwkJZ2l0IGFkZCBnaXQtd2lsZCogJiYKKwkJZ2l0IGNvbW1pdCAtbSAibW9kaWZ5IHRoZSB3aWxkY2FyZCBmaWxlcyIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgZ2l0LXdpbGQjaGFzaCAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVywhQ1lHV0lOCisJCXRoZW4KKwkJCXRlc3RfbGluZV9jb3VudCA9IDIgZ2l0LXdpbGRcKnN0YXIKKwkJZmkgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBnaXQtd2lsZEBhdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGdpdC13aWxkJXBlcmNlbnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIGZpbGVzIHN1Ym1pdCBiYWNrIHRvIHA0LCBjb3B5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWNwIGZpbGUyIGdpdC13aWxkLWNwI2hhc2ggJiYKKwkJZ2l0IGFkZCBnaXQtd2lsZC1jcCNoYXNoICYmCisJCWNwIGdpdC13aWxkI2hhc2ggZmlsZS13aWxkLTMgJiYKKwkJZ2l0IGFkZCBmaWxlLXdpbGQtMyAmJgorCQlnaXQgY29tbWl0IC1tICJ3aWxkY2FyZCBjb3BpZXMiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllcyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllc0hhcmRlciB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBnaXQtd2lsZC1jcCNoYXNoICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUtd2lsZC0zCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxkY2FyZCBmaWxlcyBzdWJtaXQgYmFjayB0byBwNCwgcmVuYW1lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBtdiBnaXQtd2lsZEBhdCBmaWxlLXdpbGQtNCAmJgorCQlnaXQgbXYgZmlsZS13aWxkLTMgZ2l0LXdpbGQtY3AlcGVyY2VudCAmJgorCQlnaXQgY29tbWl0IC1tICJ3aWxkY2FyZCByZW5hbWVzIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGdpdC13aWxkQGF0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGdpdC13aWxkLWNwJXBlcmNlbnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIGZpbGVzIHN1Ym1pdCBiYWNrIHRvIHA0LCBkZWxldGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHJtIGdpdC13aWxkKiAmJgorCQlnaXQgY29tbWl0IC1tICJkZWxldGUgdGhlIHdpbGRjYXJkIGZpbGVzIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZ2l0LXdpbGQjaGFzaCAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVywhQ1lHV0lOCisJCXRoZW4KKwkJCXRlc3RfcGF0aF9pc19taXNzaW5nIGdpdC13aWxkXCpzdGFyCisJCWZpICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGdpdC13aWxkQGF0ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGdpdC13aWxkJXBlcmNlbnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3A0IGRlbGV0ZWQgYSB3aWxkY2FyZCBmaWxlJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyAid2lsZCBkZWxldGUgdGVzdCIgPndpbGRAZGVsZXRlICYmCisJCXA0IGFkZCAtZiB3aWxkQGRlbGV0ZSAmJgorCQlwNCBzdWJtaXQgLWQgImFkZCB3aWxkQGRlbGV0ZSIKKwkpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHdpbGRAZGVsZXRlCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCSMgbXVzdCB1c2UgaXRzIGVuY29kZWQgbmFtZQorCQlwNCBkZWxldGUgd2lsZCU0MGRlbGV0ZSAmJgorCQlwNCBzdWJtaXQgLWQgImRlbGV0ZSB3aWxkQGRlbGV0ZSIKKwkpICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBwNC9tYXN0ZXIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgd2lsZEBkZWxldGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIGZpbGVzIHJlcXVpcmluZyBrZXl3b3JkIHNjcnViJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJY2F0IDw8LVxFT0YgPnNjcnViQHdpbGQgJiYKKwkJJElkJAorCQlsaW5lMgorCQlFT0YKKwkJcDQgYWRkIC10IHRleHQrayAtZiBzY3J1YkB3aWxkICYmCisJCXA0IHN1Ym1pdCAtZCAic2NydWIgYXQgd2lsZCIKKwkpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXAgdHJ1ZSAmJgorCQlzZWQgInMvXmxpbmUyL2xpbmUyIGVkaXQvIiA8c2NydWJAd2lsZCA+c2NydWJAd2lsZC50bXAgJiYKKwkJbXYgLWYgc2NydWJAd2lsZC50bXAgc2NydWJAd2lsZCAmJgorCQlnaXQgY29tbWl0IC1tICJzY3J1YiBhdCB3aWxkIGxpbmUyIGVkaXQiIHNjcnViQHdpbGQgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODEzLWdpdC1wNC1wcmVzZXJ2ZS11c2Vycy5zaCBiL3QvdDk4MTMtZ2l0LXA0LXByZXNlcnZlLXVzZXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkMDE4YzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODEzLWdpdC1wNC1wcmVzZXJ2ZS11c2Vycy5zaApAQCAtMCwwICsxLDE0MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBwcmVzZXJ2ZSB1c2VycycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBmaWxlcycgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IGNsaWVudCAtbyB8IHNlZCAiL0xpbmVFbmQvcy86LiovOnVuaXgvIiB8IHA0IGNsaWVudCAtaSAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQllY2hvIGZpbGUyID5maWxlMiAmJgorCQlwNCBhZGQgZmlsZTEgZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgZmlsZXMiCisJKQorJworCitwNF9ncmFudF9hZG1pbigpIHsKKwluYW1lPSQxICYmCisJeworCQlwNCBwcm90ZWN0IC1vICYmCisJCWVjaG8gIiAgICBhZG1pbiB1c2VyICRuYW1lICogLy9kZXBvdC8uLi4iCisJfSB8IHA0IHByb3RlY3QgLWkKK30KKworcDRfY2hlY2tfY29tbWl0X2F1dGhvcigpIHsKKwlmaWxlPSQxIHVzZXI9JDIgJiYKKwlwNCBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8kZmlsZSB8IGdyZXAgLXEgJHVzZXIKK30KKworbWFrZV9jaGFuZ2VfYnlfdXNlcigpIHsKKwlmaWxlPSQxIG5hbWU9JDIgZW1haWw9JDMgJiYKKwllY2hvICJ1c2VybmFtZTogYSBjaGFuZ2UgYnkgJG5hbWUiID4+IiRmaWxlIiAmJgorCWdpdCBhZGQgIiRmaWxlIiAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIiRuYW1lIDwkZW1haWw+IiAtbSAiYSBjaGFuZ2UgYnkgJG5hbWUiCit9CisKKyMgVGVzdCB1c2VybmFtZSBzdXBwb3J0LCBzdWJtaXR0aW5nIGFzIHVzZXIgJ2FsaWNlJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2VydmUgdXNlcnMnICcKKwlwNF9hZGRfdXNlciBhbGljZSAmJgorCXA0X2FkZF91c2VyIGJvYiAmJgorCXA0X2dyYW50X2FkbWluIGFsaWNlICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gInVzZXJuYW1lOiBhIGNoYW5nZSBieSBhbGljZSIgPj5maWxlMSAmJgorCQllY2hvICJ1c2VybmFtZTogYSBjaGFuZ2UgYnkgYm9iIiA+PmZpbGUyICYmCisJCWdpdCBjb21taXQgLS1hdXRob3IgIkFsaWNlIDxhbGljZUBleGFtcGxlLmNvbT4iIC1tICJhIGNoYW5nZSBieSBhbGljZSIgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtLWF1dGhvciAiQm9iIDxib2JAZXhhbXBsZS5jb20+IiAtbSAiYSBjaGFuZ2UgYnkgYm9iIiBmaWxlMiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJUDRFRElUT1I9InRlc3QtdG9vbCBjaG10aW1lICs1IiBQNFVTRVI9YWxpY2UgUDRQQVNTV0Q9c2VjcmV0ICYmCisJCWV4cG9ydCBQNEVESVRPUiBQNFVTRVIgUDRQQVNTV0QgJiYKKwkJZ2l0IHA0IGNvbW1pdCAtLXByZXNlcnZlLXVzZXIgJiYKKwkJcDRfY2hlY2tfY29tbWl0X2F1dGhvciBmaWxlMSBhbGljZSAmJgorCQlwNF9jaGVja19jb21taXRfYXV0aG9yIGZpbGUyIGJvYgorCSkKKycKKworIyBUZXN0IHVzZXJuYW1lIHN1cHBvcnQsIHN1Ym1pdHRpbmcgYXMgYm9iLCB3aG8gbGFja3MgYWRtaW4gcmlnaHRzLiBTaG91bGQKKyMgbm90IHN1Ym1pdCBjaGFuZ2UgdG8gcDQgKGdpdCBkaWZmIHNob3VsZCBzaG93IGRlbHRhcykuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2UgdG8gcHJlc2VydmUgdXNlcnMgd2l0aG91dCBwZXJtcycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJZWNobyAidXNlcm5hbWUtbm9wZXJtczogYSBjaGFuZ2UgYnkgYWxpY2UiID4+ZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtLWF1dGhvciAiQWxpY2UgPGFsaWNlQGV4YW1wbGUuY29tPiIgLW0gInBlcm1zOiBhIGNoYW5nZSBieSBhbGljZSIgZmlsZTEgJiYKKwkJUDRFRElUT1I9InRlc3QtdG9vbCBjaG10aW1lICs1IiBQNFVTRVI9Ym9iIFA0UEFTU1dEPXNlY3JldCAmJgorCQlleHBvcnQgUDRFRElUT1IgUDRVU0VSIFA0UEFTU1dEICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBjb21taXQgLS1wcmVzZXJ2ZS11c2VyICYmCisJCSEgZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRC4ucDQvbWFzdGVyCisJKQorJworCisjIFdoYXQgaGFwcGVucyB3aXRoIHVua25vd24gYXV0aG9yPyBXaXRob3V0IGFsbG93TWlzc2luZ1A0VXNlcnMgaXQgc2hvdWxkIGZhaWwuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVzZXJ2ZSB1c2VyIHdoZXJlIGF1dGhvciBpcyB1bmtub3duIHRvIHA0JyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0Q2hlY2sgdHJ1ZSAmJgorCQllY2hvICJ1c2VybmFtZS1ib2I6IGEgY2hhbmdlIGJ5IGJvYiIgPj5maWxlMSAmJgorCQlnaXQgY29tbWl0IC0tYXV0aG9yICJCb2IgPGJvYkBleGFtcGxlLmNvbT4iIC1tICJwcmVzZXJ2ZTogYSBjaGFuZ2UgYnkgYm9iIiBmaWxlMSAmJgorCQllY2hvICJ1c2VybmFtZS11bmtub3duOiBhIGNoYW5nZSBieSBjaGFybGllIiA+PmZpbGUxICYmCisJCWdpdCBjb21taXQgLS1hdXRob3IgIkNoYXJsaWUgPGNoYXJsaWVAZXhhbXBsZS5jb20+IiAtbSAicHJlc2VydmU6IGEgY2hhbmdlIGJ5IGNoYXJsaWUiIGZpbGUxICYmCisJCVA0RURJVE9SPSJ0ZXN0LXRvb2wgY2htdGltZSArNSIgUDRVU0VSPWFsaWNlIFA0UEFTU1dEPXNlY3JldCAmJgorCQlleHBvcnQgUDRFRElUT1IgUDRVU0VSIFA0UEFTU1dEICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBjb21taXQgLS1wcmVzZXJ2ZS11c2VyICYmCisJCSEgZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRC4ucDQvbWFzdGVyICYmCisKKwkJZWNobyAiJDA6IHJlcGVhdCB3aXRoIGFsbG93TWlzc2luZ1A0VXNlcnMgZW5hYmxlZCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYWxsb3dNaXNzaW5nUDRVc2VycyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnByZXNlcnZlVXNlciB0cnVlICYmCisJCWdpdCBwNCBjb21taXQgJiYKKwkJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRC4ucDQvbWFzdGVyICYmCisJCXA0X2NoZWNrX2NvbW1pdF9hdXRob3IgZmlsZTEgYWxpY2UKKwkpCisnCisKKyMgSWYgd2UncmUgKm5vdCogdXNpbmcgLS1wcmVzZXJ2ZS11c2VyLCBnaXQtcDQgc2hvdWxkIHdhcm4gaWYgd2UncmUgc3VibWl0dGluZworIyBjaGFuZ2VzIHRoYXQgYXJlIG5vdCBhbGwgb3Vycy4KKyMgVGVzdDogdXNlciBpbiBwNCBhbmQgdXNlciB1bmtub3duIHRvIHA0LgorIyBUZXN0OiB3YXJuaW5nIGRpc2FibGVkIGFuZCB1c2VyIGlzIHRoZSBzYW1lLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IHByZXNlcnZpbmcgdXNlciB3aXRoIG1peGVkIGF1dGhvcnNoaXAnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXRDaGVjayB0cnVlICYmCisJCXA0X2FkZF91c2VyIGRlcmVrICYmCisKKwkJbWFrZV9jaGFuZ2VfYnlfdXNlciB1c2VybmFtZWZpbGUzIERlcmVrIGRlcmVrQGV4YW1wbGUuY29tICYmCisJCVA0RURJVE9SPWNhdCBQNFVTRVI9YWxpY2UgUDRQQVNTV0Q9c2VjcmV0ICYmCisJCWV4cG9ydCBQNEVESVRPUiBQNFVTRVIgUDRQQVNTV0QgJiYKKwkJZ2l0IHA0IGNvbW1pdCA+YWN0dWFsICYmCisJCWdyZXAgImdpdCBhdXRob3IgZGVyZWtAZXhhbXBsZS5jb20gZG9lcyBub3QgbWF0Y2giIGFjdHVhbCAmJgorCisJCW1ha2VfY2hhbmdlX2J5X3VzZXIgdXNlcm5hbWVmaWxlMyBDaGFybGllIGNoYXJsaWVAZXhhbXBsZS5jb20gJiYKKwkJZ2l0IHA0IGNvbW1pdCA+YWN0dWFsICYmCisJCWdyZXAgImdpdCBhdXRob3IgY2hhcmxpZUBleGFtcGxlLmNvbSBkb2VzIG5vdCBtYXRjaCIgYWN0dWFsICYmCisKKwkJbWFrZV9jaGFuZ2VfYnlfdXNlciB1c2VybmFtZWZpbGUzIGFsaWNlIGFsaWNlQGV4YW1wbGUuY29tICYmCisJCWdpdCBwNCBjb21taXQgPmFjdHVhbCAmJgorCQkhIGdyZXAgImdpdCBhdXRob3IuKmRvZXMgbm90IG1hdGNoIiBhY3R1YWwgJiYKKworCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwVXNlck5hbWVDaGVjayB0cnVlICYmCisJCW1ha2VfY2hhbmdlX2J5X3VzZXIgdXNlcm5hbWVmaWxlMyBDaGFybGllIGNoYXJsaWVAZXhhbXBsZS5jb20gJiYKKwkJZ2l0IHA0IGNvbW1pdCA+YWN0dWFsICYmCisJCSEgZ3JlcCAiZ2l0IGF1dGhvci4qZG9lcyBub3QgbWF0Y2giIGFjdHVhbCAmJgorCisJCXA0X2NoZWNrX2NvbW1pdF9hdXRob3IgdXNlcm5hbWVmaWxlMyBhbGljZQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODE0LWdpdC1wNC1yZW5hbWUuc2ggYi90L3Q5ODE0LWdpdC1wNC1yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDY4NzY3YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTQtZ2l0LXA0LXJlbmFtZS5zaApAQCAtMCwwICsxLDI0NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCByZW5hbWUnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCisjIFdlIHJlbHkgb24gdGhpcyBiZWhhdmlvciB0byBkZXRlY3QgZm9yIHA0IG1vdmUgYXZhaWxhYmlsaXR5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnInA0IGhlbHAgdW5rbm93biIgZXJyb3JzIG91dCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IGhlbHAgY2xpZW50ICYmCisJCSEgcDQgaGVscCBub3N1Y2hjb21tYW5kCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZmlsZXMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBjbGllbnQgLW8gfCBzZWQgIi9MaW5lRW5kL3MvOi4qLzp1bml4LyIgfCBwNCBjbGllbnQgLWkgJiYKKwkJY2F0ID5maWxlMSA8PC1FT0YgJiYKKwkJQSBsYXJnZSBibG9jayBvZiB0ZXh0CisJCWluIGZpbGUxIHRoYXQgd2lsbCBnZW5lcmF0ZQorCQllbm91Z2ggY29udGV4dCBzbyB0aGF0IHJlbmFtZQorCQlhbmQgY29weSBkZXRlY3Rpb24gd2lsbCBmaW5kCisJCXNvbWV0aGluZyBpbnRlcmVzdGluZyB0byBkby4KKwkJRU9GCisJCWNhdCA+ZmlsZTIgPDwtRU9GICYmCisJCS8qCisJCSAqIFRoaXMgYmxvYiBsb29rcyBhIGJpdAorCQkgKiBkaWZmZXJlbnQuCisJCSAqLworCQlpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisJCXsKKwkJCWNoYXIgdGV4dFsyMDBdOworCisJCQlzdHJjcHkodGV4dCwgImNvcHkvcmVuYW1lIHRoaXMiKTsKKwkJCXByaW50ZigidGV4dCBpcyAlc1xuIiwgdGV4dCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlFT0YKKwkJcDQgYWRkIGZpbGUxIGZpbGUyICYmCisJCXA0IHN1Ym1pdCAtZCAiYWRkIGZpbGVzIgorCSkKKycKKworIyBSZW5hbWUgYSBmaWxlIGFuZCBjb25maXJtIHRoYXQgcmVuYW1lIGlzIG5vdCBkZXRlY3RlZCBpbiBQNC4KKyMgUmVuYW1lIHRoZSBuZXcgZmlsZSBhZ2FpbiB3aXRoIGRldGVjdFJlbmFtZXMgb3B0aW9uIGVuYWJsZWQgYW5kIGNvbmZpcm0gdGhhdAorIyB0aGlzIGlzIGRldGVjdGVkIGluIFA0LgorIyBSZW5hbWUgdGhlIG5ldyBmaWxlIGFnYWluIGFkZGluZyBhbiBleHRyYSBsaW5lLCBjb25maWd1cmUgYSBiaWcgdGhyZXNob2xkIGluCisjIGRldGVjdFJlbmFtZXMgYW5kIGNvbmZpcm0gdGhhdCByZW5hbWUgaXMgbm90IGRldGVjdGVkIGluIFA0LgorIyBSZXBlYXQsIHRoaXMgdGltZSB3aXRoIGEgc21hbGxlciB0aHJlc2hvbGQgYW5kIGNvbmZpcm0gdGhhdCB0aGUgcmVuYW1lIGlzCisjIGRldGVjdGVkIGluIFA0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IHJlbmFtZXMnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKworCQlnaXQgbXYgZmlsZTEgZmlsZTQgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiUmVuYW1lIGZpbGUxIHRvIGZpbGU0IiAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1NIEhFQUQgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTQgPmZpbGVsb2cgJiYKKwkJISBncmVwICIgZnJvbSAvL2RlcG90IiBmaWxlbG9nICYmCisKKwkJZ2l0IG12IGZpbGU0IGZpbGU1ICYmCisJCWdpdCBjb21taXQgLWEgLW0gIlJlbmFtZSBmaWxlNCB0byBmaWxlNSIgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtciAtTSBIRUFEICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdFJlbmFtZXMgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlNSA+ZmlsZWxvZyAmJgorCQlncmVwICIgZnJvbSAvL2RlcG90L2ZpbGU0IiBmaWxlbG9nICYmCisKKwkJZ2l0IG12IGZpbGU1IGZpbGU2ICYmCisJCWVjaG8gdXBkYXRlID4+ZmlsZTYgJiYKKwkJZ2l0IGFkZCBmaWxlNiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJSZW5hbWUgZmlsZTUgdG8gZmlsZTYgd2l0aCBjaGFuZ2VzIiAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1NIEhFQUQgJiYKKwkJbGV2ZWw9JChnaXQgZGlmZi10cmVlIC1yIC1NIEhFQUQgfCBzZWQgMWQgfCBjdXQgLWYxIHwgY3V0IC1kIiAiIC1mNSB8IHNlZCAicy9SMCovLyIpICYmCisJCXRlc3QgLW4gIiRsZXZlbCIgJiYgdGVzdCAiJGxldmVsIiAtZ3QgMCAmJiB0ZXN0ICIkbGV2ZWwiIC1sdCA5OCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzICQoKCRsZXZlbCArIDIpKSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlNiA+ZmlsZWxvZyAmJgorCQkhIGdyZXAgIiBmcm9tIC8vZGVwb3QiIGZpbGVsb2cgJiYKKworCQlnaXQgbXYgZmlsZTYgZmlsZTcgJiYKKwkJZWNobyB1cGRhdGUgPj5maWxlNyAmJgorCQlnaXQgYWRkIGZpbGU3ICYmCisJCWdpdCBjb21taXQgLWEgLW0gIlJlbmFtZSBmaWxlNiB0byBmaWxlNyB3aXRoIGNoYW5nZXMiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLU0gSEVBRCAmJgorCQlsZXZlbD0kKGdpdCBkaWZmLXRyZWUgLXIgLU0gSEVBRCB8IHNlZCAxZCB8IGN1dCAtZjEgfCBjdXQgLWQiICIgLWY1IHwgc2VkICJzL1IwKi8vIikgJiYKKwkJdGVzdCAtbiAiJGxldmVsIiAmJiB0ZXN0ICIkbGV2ZWwiIC1ndCAyICYmIHRlc3QgIiRsZXZlbCIgLWx0IDEwMCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzICQoKCRsZXZlbCAtIDIpKSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlNyA+ZmlsZWxvZyAmJgorCQlncmVwICIgZnJvbSAvL2RlcG90L2ZpbGU2IiBmaWxlbG9nCisJKQorJworCisjIENvcHkgYSBmaWxlIGFuZCBjb25maXJtIHRoYXQgY29weSBpcyBub3QgZGV0ZWN0ZWQgaW4gUDQuCisjIENvcHkgYSBmaWxlIHdpdGggZGV0ZWN0Q29waWVzIG9wdGlvbiBlbmFibGVkIGFuZCBjb25maXJtIHRoYXQgY29weSBpcyBub3QKKyMgZGV0ZWN0ZWQgaW4gUDQuCisjIE1vZGlmeSBhbmQgY29weSBhIGZpbGUgd2l0aCBkZXRlY3RDb3BpZXMgb3B0aW9uIGVuYWJsZWQgYW5kIGNvbmZpcm0gdGhhdCBjb3B5CisjIGlzIGRldGVjdGVkIGluIFA0LgorIyBDb3B5IGEgZmlsZSB3aXRoIGRldGVjdENvcGllcyBhbmQgZGV0ZWN0Q29waWVzSGFyZGVyIG9wdGlvbnMgZW5hYmxlZCBhbmQKKyMgY29uZmlybSB0aGF0IGNvcHkgaXMgZGV0ZWN0ZWQgaW4gUDQuCisjIE1vZGlmeSBhbmQgY29weSBhIGZpbGUsIGNvbmZpZ3VyZSBhIGJpZ2dlciB0aHJlc2hvbGQgaW4gZGV0ZWN0Q29waWVzIGFuZAorIyBjb25maXJtIHRoYXQgY29weSBpcyBub3QgZGV0ZWN0ZWQgaW4gUDQuCisjIE1vZGlmeSBhbmQgY29weSBhIGZpbGUsIGNvbmZpZ3VyZSBhIHNtYWxsZXIgdGhyZXNob2xkIGluIGRldGVjdENvcGllcyBhbmQKKyMgY29uZmlybSB0aGF0IGNvcHkgaXMgZGV0ZWN0ZWQgaW4gUDQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgY29waWVzJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisKKwkJZWNobyAiZmlsZTgiID4+ZmlsZTIgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiRGlmZmVyZW50aWF0ZSBmaWxlMiIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQljcCBmaWxlMiBmaWxlOCAmJgorCQlnaXQgYWRkIGZpbGU4ICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNvcHkgZmlsZTIgdG8gZmlsZTgiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLUMgSEVBRCAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlOCAmJgorCQkhIHA0IGZpbGVsb2cgLy9kZXBvdC9maWxlOCB8IGdyZXAgLXEgImJyYW5jaCBmcm9tIiAmJgorCisJCWVjaG8gImZpbGU5IiA+PmZpbGUyICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkRpZmZlcmVudGlhdGUgZmlsZTIiICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKworCQljcCBmaWxlMiBmaWxlOSAmJgorCQlnaXQgYWRkIGZpbGU5ICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNvcHkgZmlsZTIgdG8gZmlsZTkiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLUMgSEVBRCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXMgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlOSAmJgorCQkhIHA0IGZpbGVsb2cgLy9kZXBvdC9maWxlOSB8IGdyZXAgLXEgImJyYW5jaCBmcm9tIiAmJgorCisJCWVjaG8gImZpbGUxMCIgPj5maWxlMiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJEaWZmZXJlbnRpYXRlIGZpbGUyIiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisKKwkJZWNobyAiZmlsZTIiID4+ZmlsZTIgJiYKKwkJY3AgZmlsZTIgZmlsZTEwICYmCisJCWdpdCBhZGQgZmlsZTIgZmlsZTEwICYmCisJCWdpdCBjb21taXQgLWEgLW0gIk1vZGlmeSBhbmQgY29weSBmaWxlMiB0byBmaWxlMTAiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLUMgSEVBRCAmJgorCQlzcmM9JChnaXQgZGlmZi10cmVlIC1yIC1DIEhFQUQgfCBzZWQgMWQgfCBzZWQgMmQgfCBjdXQgLWYyKSAmJgorCQl0ZXN0ICIkc3JjIiA9IGZpbGUyICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGUxMCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTEwIHwgZ3JlcCAtcSAiYnJhbmNoIGZyb20gLy9kZXBvdC9maWxlMiIgJiYKKworCQllY2hvICJmaWxlMTEiID4+ZmlsZTIgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiRGlmZmVyZW50aWF0ZSBmaWxlMiIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCisJCWNwIGZpbGUyIGZpbGUxMSAmJgorCQlnaXQgYWRkIGZpbGUxMSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJDb3B5IGZpbGUyIHRvIGZpbGUxMSIgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEICYmCisJCXNyYz0kKGdpdCBkaWZmLXRyZWUgLXIgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgSEVBRCB8IHNlZCAxZCB8IGN1dCAtZjIpICYmCisJCXRlc3QgIiRzcmMiID0gZmlsZTIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzSGFyZGVyIHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTExICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlMTEgfCBncmVwIC1xICJicmFuY2ggZnJvbSAvL2RlcG90L2ZpbGUyIiAmJgorCisJCWVjaG8gImZpbGUxMiIgPj5maWxlMiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJEaWZmZXJlbnRpYXRlIGZpbGUyIiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisKKwkJY3AgZmlsZTIgZmlsZTEyICYmCisJCWVjaG8gInNvbWUgdGV4dCIgPj5maWxlMTIgJiYKKwkJZ2l0IGFkZCBmaWxlMTIgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiQ29weSBmaWxlMiB0byBmaWxlMTIgd2l0aCBjaGFuZ2VzIiAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIEhFQUQgJiYKKwkJbGV2ZWw9JChnaXQgZGlmZi10cmVlIC1yIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIEhFQUQgfCBzZWQgMWQgfCBjdXQgLWYxIHwgY3V0IC1kIiAiIC1mNSB8IHNlZCAicy9DMCovLyIpICYmCisJCXRlc3QgLW4gIiRsZXZlbCIgJiYgdGVzdCAiJGxldmVsIiAtZ3QgMCAmJiB0ZXN0ICIkbGV2ZWwiIC1sdCA5OCAmJgorCQlzcmM9JChnaXQgZGlmZi10cmVlIC1yIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIEhFQUQgfCBzZWQgMWQgfCBjdXQgLWYyKSAmJgorCQl0ZXN0ICIkc3JjIiA9IGZpbGUyICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllcyAkKCgkbGV2ZWwgKyAyKSkgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTEyICYmCisJCSEgcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGUxMiB8IGdyZXAgLXEgImJyYW5jaCBmcm9tIiAmJgorCisJCWVjaG8gImZpbGUxMyIgPj5maWxlMiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJEaWZmZXJlbnRpYXRlIGZpbGUyIiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisKKwkJY3AgZmlsZTIgZmlsZTEzICYmCisJCWVjaG8gImRpZmZlcmVudCB0ZXh0IiA+PmZpbGUxMyAmJgorCQlnaXQgYWRkIGZpbGUxMyAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJDb3B5IGZpbGUyIHRvIGZpbGUxMyB3aXRoIGNoYW5nZXMiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgSEVBRCAmJgorCQlsZXZlbD0kKGdpdCBkaWZmLXRyZWUgLXIgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgSEVBRCB8IHNlZCAxZCB8IGN1dCAtZjEgfCBjdXQgLWQiICIgLWY1IHwgc2VkICJzL0MwKi8vIikgJiYKKwkJdGVzdCAtbiAiJGxldmVsIiAmJiB0ZXN0ICIkbGV2ZWwiIC1ndCAyICYmIHRlc3QgIiRsZXZlbCIgLWx0IDEwMCAmJgorCQlzcmM9JChnaXQgZGlmZi10cmVlIC1yIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIEhFQUQgfCBzZWQgMWQgfCBjdXQgLWYyKSAmJgorCQl0ZXN0ICIkc3JjIiA9IGZpbGUyICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllcyAkKCgkbGV2ZWwgLSAyKSkgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTEzICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlMTMgfCBncmVwIC1xICJicmFuY2ggZnJvbSAvL2RlcG90L2ZpbGUyIgorCSkKKycKKworIyBTZWUgaWYgY29uZmlndXJhYmxlcyBjYW4gYmUgc2V0LCBhbmQgaW4gcGFydGljdWxhciBpZiB0aGUgcnVuLm1vdmUuYWxsb3cKKyMgdmFyaWFibGUgZXhpc3RzLCB3aGljaCBhbGxvd3MgYWRtaW5zIHRvIGRpc2FibGUgdGhlICJwNCBtb3ZlIiBjb21tYW5kLgordGVzdF9sYXp5X3ByZXJlcSBQNERfSEFWRV9DT05GSUdVUkFCTEVfUlVOX01PVkVfQUxMT1cgJworCXA0IGNvbmZpZ3VyZSBzaG93IHJ1bi5tb3ZlLmFsbG93ID5vdXQgJiYKKwllZ3JlcCBecnVuLm1vdmUuYWxsb3c6IG91dAorJworCisjIElmIG1vdmUgY2FuIGJlIGRpc2FibGVkLCB0dXJuIGl0IG9mZiBhbmQgdGVzdCBwNCBtb3ZlIGhhbmRsaW5nCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFA0RF9IQVZFX0NPTkZJR1VSQUJMRV9SVU5fTU9WRV9BTExPVyBcCisJCSAgICAnZG8gbm90IHVzZSBwNCBtb3ZlIHdoZW4gYWRtaW5pc3RyYXRpdmVseSBkaXNhYmxlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicDQgY29uZmlndXJlIHNldCBydW4ubW92ZS5hbGxvdz0xIiAmJgorCXA0IGNvbmZpZ3VyZSBzZXQgcnVuLm1vdmUuYWxsb3c9MCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gbW92ZS1kaXNhbGxvdy1maWxlID5tb3ZlLWRpc2FsbG93LWZpbGUgJiYKKwkJcDQgYWRkIG1vdmUtZGlzYWxsb3ctZmlsZSAmJgorCQlwNCBzdWJtaXQgLWQgImFkZCBtb3ZlLWRpc2FsbG93LWZpbGUiCisJKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdFJlbmFtZXMgdHJ1ZSAmJgorCQlnaXQgbXYgbW92ZS1kaXNhbGxvdy1maWxlIG1vdmUtZGlzYWxsb3ctZmlsZS1tb3ZlZCAmJgorCQlnaXQgY29tbWl0IC1tICJtb3ZlIG1vdmUtZGlzYWxsb3ctZmlsZSIgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODE1LWdpdC1wNC1zdWJtaXQtZmFpbC5zaCBiL3QvdDk4MTUtZ2l0LXA0LXN1Ym1pdC1mYWlsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk3NzlkYzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODE1LWdpdC1wNC1zdWJtaXQtZmFpbC5zaApAQCAtMCwwICsxLDQyNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBzdWJtaXQgZmFpbHVyZSBoYW5kbGluZycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgZGVwb3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBjbGllbnQgLW8gfCBzZWQgIi9MaW5lRW5kL3MvOi4qLzp1bml4LyIgfCBwNCBjbGllbnQgLWkgJiYKKwkJZWNobyBsaW5lMSA+ZmlsZTEgJiYKKwkJcDQgYWRkIGZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAibGluZTEgaW4gZmlsZTEiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdCBvbiBvbmUgY29tbWl0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IG9wZW4gZmlsZTEgJiYKKwkJZWNobyBsaW5lMiA+PmZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAibGluZTIgaW4gZmlsZTEiCisJKSAmJgorCSgKKwkJIyBub3cgdGhpcyBjb21taXQgc2hvdWxkIGNhdXNlIGEgY29uZmxpY3QKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZWNobyBsaW5lMyA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibGluZTMgaW4gZmlsZTEgd2lsbCBjb25mbGljdCIgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJObyBjb21taXRzIGFwcGxpZWQiIG91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3Qgb24gc2Vjb25kIG9mIHR3byBjb21taXRzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IG9wZW4gZmlsZTEgJiYKKwkJZWNobyBsaW5lMyA+PmZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAibGluZTMgaW4gZmlsZTEiCisJKSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyB0aGlzIGNvbW1pdCBpcyBva2F5CisJCXRlc3RfY29tbWl0ICJmaXJzdF9jb21taXRfb2theSIgJiYKKwkJIyBub3cgdGhpcyBzdWJtaXQgc2hvdWxkIGNhdXNlIGEgY29uZmxpY3QKKwkJZWNobyBsaW5lNCA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibGluZTQgaW4gZmlsZTEgd2lsbCBjb25mbGljdCIgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJBcHBsaWVkIG9ubHkgdGhlIGNvbW1pdHMiIG91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3Qgb24gZmlyc3Qgb2YgdHdvIGNvbW1pdHMsIHNraXAnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgb3BlbiBmaWxlMSAmJgorCQllY2hvIGxpbmU0ID4+ZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJsaW5lNCBpbiBmaWxlMSIKKwkpICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQkjIHRoaXMgc3VibWl0IHNob3VsZCBjYXVzZSBhIGNvbmZsaWN0CisJCWVjaG8gbGluZTUgPj5maWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gImxpbmU1IGluIGZpbGUxIHdpbGwgY29uZmxpY3QiICYmCisJCSMgYnV0IHRoaXMgY29tbWl0IGlzIG9rYXkKKwkJdGVzdF9jb21taXQgIm9rYXlfY29tbWl0X2FmdGVyX3NraXAiICYmCisJCWVjaG8gcyB8IHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0ID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQXBwbGllZCBvbmx5IHRoZSBjb21taXRzIiBvdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZsaWN0IG9uIGZpcnN0IG9mIHR3byBjb21taXRzLCBxdWl0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IG9wZW4gZmlsZTEgJiYKKwkJZWNobyBsaW5lNyA+PmZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAibGluZTcgaW4gZmlsZTEiCisJKSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyB0aGlzIHN1Ym1pdCBzaG91bGQgY2F1c2UgYSBjb25mbGljdAorCQllY2hvIGxpbmU4ID4+ZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC1tICJsaW5lOCBpbiBmaWxlMSB3aWxsIGNvbmZsaWN0IiAmJgorCQkjIGJ1dCB0aGlzIGNvbW1pdCBpcyBva2F5CisJCXRlc3RfY29tbWl0ICJva2F5X2NvbW1pdF9hZnRlcl9xdWl0IiAmJgorCQllY2hvIHEgfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIk5vIGNvbW1pdHMgYXBwbGllZCIgb3V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdCBjbGkgYW5kIGNvbmZpZyBvcHRpb25zJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzdWJtaXQgLS1jb25mbGljdD1hc2sgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWNvbmZsaWN0PXNraXAgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWNvbmZsaWN0PXF1aXQgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAyIGdpdCBwNCBzdWJtaXQgLS1jb25mbGljdD1mb28gJiYKKwkJdGVzdF9leHBlY3RfY29kZSAyIGdpdCBwNCBzdWJtaXQgLS1jb25mbGljdCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5jb25mbGljdCBmb28gJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgJiYKKwkJZ2l0IGNvbmZpZyAtLXVuc2V0IGdpdC1wNC5jb25mbGljdCAmJgorCQlnaXQgcDQgc3VibWl0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdCBvbiBmaXJzdCBvZiB0d28gY29tbWl0cywgLS1jb25mbGljdD1za2lwJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IG9wZW4gZmlsZTEgJiYKKwkJZWNobyBsaW5lOSA+PmZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAibGluZTkgaW4gZmlsZTEiCisJKSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyB0aGlzIHN1Ym1pdCBzaG91bGQgY2F1c2UgYSBjb25mbGljdAorCQllY2hvIGxpbmUxMCA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibGluZTEwIGluIGZpbGUxIHdpbGwgY29uZmxpY3QiICYmCisJCSMgYnV0IHRoaXMgY29tbWl0IGlzIG9rYXkKKwkJdGVzdF9jb21taXQgIm9rYXlfY29tbWl0X2FmdGVyX2F1dG9fc2tpcCIgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgLS1jb25mbGljdD1za2lwID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQXBwbGllZCBvbmx5IHRoZSBjb21taXRzIiBvdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZsaWN0IG9uIGZpcnN0IG9mIHR3byBjb21taXRzLCAtLWNvbmZsaWN0PXF1aXQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgb3BlbiBmaWxlMSAmJgorCQllY2hvIGxpbmUxMSA+PmZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAibGluZTExIGluIGZpbGUxIgorCSkgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCSMgdGhpcyBzdWJtaXQgc2hvdWxkIGNhdXNlIGEgY29uZmxpY3QKKwkJZWNobyBsaW5lMTIgPj5maWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gImxpbmUxMiBpbiBmaWxlMSB3aWxsIGNvbmZsaWN0IiAmJgorCQkjIGJ1dCB0aGlzIGNvbW1pdCBpcyBva2F5CisJCXRlc3RfY29tbWl0ICJva2F5X2NvbW1pdF9hZnRlcl9hdXRvX3F1aXQiICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0IC0tY29uZmxpY3Q9cXVpdCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIk5vIGNvbW1pdHMgYXBwbGllZCIgb3V0CisJKQorJworCisjCisjIENsZWFudXAgYWZ0ZXIgc3VibWl0IGZhaWwsIGFsbCBjYXNlcy4gIFNvbWUgbW9kaWZpY2F0aW9ucyBoYXBwZW4KKyMgYmVmb3JlIHRyeWluZyB0byBhcHBseSB0aGUgcGF0Y2guICBNYWtlIHN1cmUgdGhlc2UgYXJlIHVud291bmQKKyMgcHJvcGVybHkuICBQdXQgZWFjaCBvbmUgaW4gYSBkaWZmIGFsb25nIHdpdGggc29tZXRoaW5nIHRoYXQgd2lsbAorIyBvYnZpb3VzbHkgY29uZmxpY3QuICBNYWtlIHN1cmUgaXQgaXMgYmFjayB0byBub3JtYWwgYWZ0ZXIuCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgZWRpdCBwNCBwb3B1bGF0ZScgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gdGV4dCBmaWxlID50ZXh0ICYmCisJCXA0IGFkZCB0ZXh0ICYmCisJCWVjaG8gdGV4dCt4IGZpbGUgPnRleHQreCAmJgorCQljaG1vZCA3NTUgdGV4dCt4ICYmCisJCXA0IGFkZCB0ZXh0K3ggJiYKKwkJcDQgc3VibWl0IC1kICJwb3B1bGF0ZSBwNCIKKwkpCisnCisKK3NldHVwX2NvbmZsaWN0KCkgeworCSMgY2xvbmUgYmVmb3JlIG1vZGlmeWluZyBmaWxlMSB0byBmb3JjZSBpdCB0byBjb25mbGljdAorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkjIHRpY2tzIG91dHNpZGUgc3Vic2hlbGxzCisJdGVzdF90aWNrICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgb3BlbiBmaWxlMSAmJgorCQllY2hvICR0ZXN0X3RpY2sgPj5maWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgIiR0ZXN0X3RpY2sgaW4gZmlsZTEiCisJKSAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyBlYXN5IGNvbmZsaWN0CisJCWVjaG8gJHRlc3RfdGljayA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEKKwkJIyBjYWxsZXIgd2lsbCBhZGQgbW9yZSBhbmQgc3VibWl0CisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGVkaXQgYWZ0ZXIgc3VibWl0IGZhaWwnICcKKwlzZXR1cF9jb25mbGljdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gYW5vdGhlciBsaW5lID4+dGV4dCAmJgorCQlnaXQgYWRkIHRleHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY29uZmxpY3QiICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCSMgbWFrZSBzdXJlIGl0IGlzIG5vdCBvcGVuCisJCSEgcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgYWRkIGFmdGVyIHN1Ym1pdCBmYWlsJyAnCisJc2V0dXBfY29uZmxpY3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIG5ldyBmaWxlID50ZXh0bmV3ICYmCisJCWdpdCBhZGQgdGV4dG5ldyAmJgorCQlnaXQgY29tbWl0IC1tICJjb25mbGljdCIgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJIyBtYWtlIHN1cmUgaXQgaXMgbm90IHRoZXJlCisJCSMgYW5kIHRoYXQgcDQgdGhpbmtzIGl0IGlzIG5vdCBhZGRlZAorCQkjICAgUDQgcmV0dXJucyAwIGJvdGggZm9yICJub3QgdGhlcmUgYnV0IGFkZGVkIiBhbmQKKwkJIyAgICJub3QgdGhlcmUiLCBzbyBncmVwLgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXh0bmV3ICYmCisJCXA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0bmV3IDI+JjEgfCBncmVwICJubyBzdWNoIGZpbGUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGRlbGV0ZSBhZnRlciBzdWJtaXQgZmFpbCcgJworCXNldHVwX2NvbmZsaWN0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHJtIHRleHQreCAmJgorCQlnaXQgY29tbWl0IC1tICJjb25mbGljdCIgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJIyBtYWtlIHN1cmUgaXQgaXMgdGhlcmUKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgdGV4dCt4ICYmCisJCSEgcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQreAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb3B5IGFmdGVyIHN1Ym1pdCBmYWlsJyAnCisJc2V0dXBfY29uZmxpY3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQljcCB0ZXh0IHRleHQyICYmCisJCWdpdCBhZGQgdGV4dDIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY29uZmxpY3QiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllcyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllc0hhcmRlciB0cnVlICYmCisJCSMgbWFrZSBzdXJlIHNldHVwIGlzIG9rYXkKKwkJZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEIHwgZ3JlcCB0ZXh0MiB8IGdyZXAgQzEwMCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXh0MiAmJgorCQlwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dDIgMj4mMSB8IGdyZXAgIm5vIHN1Y2ggZmlsZSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgcmVuYW1lIGFmdGVyIHN1Ym1pdCBmYWlsJyAnCisJc2V0dXBfY29uZmxpY3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbXYgdGV4dCB0ZXh0MiAmJgorCQlnaXQgY29tbWl0IC1tICJjb25mbGljdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0UmVuYW1lcyB0cnVlICYmCisJCSMgbWFrZSBzdXJlIHNldHVwIGlzIG9rYXkKKwkJZ2l0IGRpZmYtdHJlZSAtciAtTSBIRUFEIHwgZ3JlcCB0ZXh0MiB8IGdyZXAgUjEwMCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXh0MiAmJgorCQlwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dDIgMj4mMSB8IGdyZXAgIm5vIHN1Y2ggZmlsZSIKKwkpCisnCisKKyMKKyMgQ2xlYW51cCBhZnRlciBkZWNpZGluZyBub3QgdG8gc3VibWl0IGR1cmluZyBlZGl0VGVtcGxhdGUuICBUaGlzCisjIGludm9sdmVzIHVud2luZGluZyBtb3JlIHdvcmssIGJlY2F1c2UgZmlsZXMgaGF2ZSBiZWVuIGFkZGVkLCBkZWxldGVkCisjIGFuZCBjaG1vZC1lZCBub3cuICBTYW1lIGFwcHJvYWNoIGFzIGFib3ZlLgorIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGVkaXQgYWZ0ZXIgc3VibWl0IGNhbmNlbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGxpbmUgPj50ZXh0ICYmCisJCWdpdCBhZGQgdGV4dCAmJgorCQlnaXQgY29tbWl0IC1tIHRleHQgJiYKKwkJZWNobyBuIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQkhIHA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0ICYmCisJCXRlc3RfY21wICIkZ2l0Ii90ZXh0IHRleHQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgYWRkIGFmdGVyIHN1Ym1pdCBjYW5jZWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBsaW5lID50ZXh0bmV3ICYmCisJCWdpdCBhZGQgdGV4dG5ldyAmJgorCQlnaXQgY29tbWl0IC1tIHRleHRuZXcgJiYKKwkJZWNobyBuIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGV4dG5ldyAmJgorCQlwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dG5ldyAyPiYxIHwgZ3JlcCAibm8gc3VjaCBmaWxlIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBkZWxldGUgYWZ0ZXIgc3VibWl0IGNhbmNlbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcm0gdGV4dCAmJgorCQlnaXQgY29tbWl0IC1tICJybSB0ZXh0IiAmJgorCQllY2hvIG4gfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXh0ICYmCisJCSEgcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29weSBhZnRlciBzdWJtaXQgY2FuY2VsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWNwIHRleHQgdGV4dDIgJiYKKwkJZ2l0IGFkZCB0ZXh0MiAmJgorCQlnaXQgY29tbWl0IC1tIHRleHQyICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllcyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllc0hhcmRlciB0cnVlICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgSEVBRCB8IGdyZXAgdGV4dDIgfCBncmVwIEMxMDAgJiYKKwkJZWNobyBuIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGV4dDIgJiYKKwkJcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQyIDI+JjEgfCBncmVwICJubyBzdWNoIGZpbGUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIHJlbmFtZSBhZnRlciBzdWJtaXQgY2FuY2VsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBtdiB0ZXh0IHRleHQyICYmCisJCWdpdCBjb21taXQgLW0gdGV4dDIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0UmVuYW1lcyB0cnVlICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLU0gSEVBRCB8IGdyZXAgdGV4dDIgfCBncmVwIFIxMDAgJiYKKwkJZWNobyBuIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGV4dDIgJiYKKwkJcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQyIDI+JjEgfCBncmVwICJubyBzdWNoIGZpbGUiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHRleHQgJiYKKwkJISBwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjaG1vZCBhZnRlciBzdWJtaXQgY2FuY2VsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfY2htb2QgK3ggdGV4dCAmJgorCQl0ZXN0X2NobW9kIC14IHRleHQreCAmJgorCQlnaXQgYWRkIHRleHQgdGV4dCt4ICYmCisJCWdpdCBjb21taXQgLW0gImNobW9kIHRleHRzIiAmJgorCQllY2hvIG4gfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXh0ICYmCisJCSEgcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgdGV4dCt4ICYmCisJCSEgcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQreCAmJgorCQlscyAtbCB0ZXh0IHwgZWdyZXAgXi1yLS0gJiYKKwkJbHMgLWwgdGV4dCt4IHwgZWdyZXAgXi1yLXgKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgxNi1naXQtcDQtbG9ja2VkLnNoIGIvdC90OTgxNi1naXQtcDQtbG9ja2VkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkzMjg0MTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODE2LWdpdC1wNC1sb2NrZWQuc2gKQEAgLTAsMCArMSwxNDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgbG9ja2VkIGZpbGUgYmVoYXZpb3InCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCisjIFNlZQorIyBodHRwOi8vd3d3LnBlcmZvcmNlLmNvbS9wZXJmb3JjZS9kb2MuY3VycmVudC9tYW51YWxzL3A0c2FnLzAzX3N1cGVydXNlci5odG1sIzEwODg1NjMKKyMgZm9yIHN1Z2dlc3Rpb25zIG9uIGhvdyB0byBjb25maWd1cmUgInNpdGV3aWRlIHBlc3NpbWlzdGljIGxvY2tpbmciCisjIHdoZXJlIG9ubHkgb25lIHBlcnNvbiBjYW4gaGF2ZSBhIGZpbGUgb3BlbiBmb3IgZWRpdCBhdCBhIHRpbWUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGRlcG90JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyAiVHlwZU1hcDogK2wgLy9kZXBvdC8uLi4iIHwgcDQgdHlwZW1hcCAtaSAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQlwNCBhZGQgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgZmlsZTEiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0IHdpdGggbG9jayBub3QgdGFrZW4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBsaW5lMiA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibGluZTIgaW4gZmlsZTEiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHdpdGggbG9jayBub3QgdGFrZW4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBsaW5lMSA+PmFkZC1sb2NrLW5vdC10YWtlbiAmJgorCQlnaXQgYWRkIGFkZC1sb2NrLW5vdC10YWtlbiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgYWRkLWxvY2stbm90LXRha2VuIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgLS12ZXJib3NlCisJKQorJworCitsb2NrX2luX2Fub3RoZXJfY2xpZW50KCkgeworCSMgYnVpbGQgYSBkaWZmZXJlbnQgY2xpZW50CisJY2xpMj0iJFRSQVNIX0RJUkVDVE9SWS9jbGkyIiAmJgorCW1rZGlyIC1wICIkY2xpMiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInA0IGNsaWVudCAtZiAtZCBjbGllbnQyICYmIHJtIC1yZiBcIiRjbGkyXCIiICYmCisJKAorCQljZCAiJGNsaTIiICYmCisJCVA0Q0xJRU5UPWNsaWVudDIgJiYKKwkJY2xpPSIkY2xpMiIgJiYKKwkJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Mi8uLi4iICYmCisJCXA0IHN5bmMgJiYKKwkJcDQgb3BlbiBmaWxlMQorCSkKK30KKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZWRpdCB3aXRoIGxvY2sgdGFrZW4nICcKKwlsb2NrX2luX2Fub3RoZXJfY2xpZW50ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjZCBcIiRjbGlcIiAmJiBwNCBzeW5jIC1mIGZpbGUxIiAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGxpbmUzID4+ZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC1tICJsaW5lMyBpbiBmaWxlMSIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0IC0tdmVyYm9zZQorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZGVsZXRlIHdpdGggbG9jayB0YWtlbicgJworCWxvY2tfaW5fYW5vdGhlcl9jbGllbnQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNkIFwiJGNsaVwiICYmIHA0IHN5bmMgLWYgZmlsZTEiICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBybSBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC1tICJkZWxldGUgZmlsZTEiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLXZlcmJvc2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2NobW9kIHdpdGggbG9jayB0YWtlbicgJworCWxvY2tfaW5fYW5vdGhlcl9jbGllbnQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNkIFwiJGNsaVwiICYmIHA0IHN5bmMgLWYgZmlsZTEiICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWNobW9kICt4IGZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY2htb2QgK3ggZmlsZTEiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLXZlcmJvc2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgd2l0aCBsb2NrIHRha2VuJyAnCisJbG9ja19pbl9hbm90aGVyX2NsaWVudCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2QgXCIkY2xpXCIgJiYgcDQgcmV2ZXJ0IGZpbGUyICYmIHJtIC1mIGZpbGUyIiAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQljcCBmaWxlMSBmaWxlMiAmJgorCQlnaXQgYWRkIGZpbGUyICYmCisJCWdpdCBjb21taXQgLW0gImNwIGZpbGUxIHRvIGZpbGUyIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllcyB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgLS12ZXJib3NlCisJKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdtb3ZlIHdpdGggbG9jayB0YWtlbicgJworCWxvY2tfaW5fYW5vdGhlcl9jbGllbnQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNkIFwiJGNsaVwiICYmIHA0IHN5bmMgZmlsZTEgJiYgcm0gLWYgZmlsZTIiICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBtdiBmaWxlMSBmaWxlMyAmJgorCQlnaXQgY29tbWl0IC1tICJtdiBmaWxlMSB0byBmaWxlMyIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzIHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLXZlcmJvc2UKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgxNy1naXQtcDQtZXhjbHVkZS5zaCBiL3QvdDk4MTctZ2l0LXA0LWV4Y2x1ZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWMzZDkzNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTctZ2l0LXA0LWV4Y2x1ZGUuc2gKQEAgLTAsMCArMSwxMDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgdGVzdHMgZm9yIGV4Y2x1ZGVkIHBhdGhzIGR1cmluZyBjbG9uZSBhbmQgc3luYycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKKyMgQ3JlYXRlIGEgcmVwbyB3aXRoIHRoZSBzdHJ1Y3R1cmU6CisjCisjICAgIC8vZGVwb3Qvd2FudGVkL2ZvbworIyAgICAvL2RlcG90L2Rpc2NhcmQvZm9vCisjCisjIENoZWNrIHRoYXQgd2UgY2FuIGV4Y2x1ZGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCBib3RoCisjIGNsb25lIGFuZCBzeW5jIG9wZXJhdGlvbnMuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBleGNsdWRlIHJlcG8nICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciAtcCB3YW50ZWQgZGlzY2FyZCAmJgorCQllY2hvIHdhbnRlZCA+d2FudGVkL2ZvbyAmJgorCQllY2hvIGRpc2NhcmQgPmRpc2NhcmQvZm9vICYmCisJCWVjaG8gZGlzY2FyZF9maWxlID5kaXNjYXJkX2ZpbGUgJiYKKwkJZWNobyBkaXNjYXJkX2ZpbGVfbm90ID5kaXNjYXJkX2ZpbGVfbm90ICYmCisJCXA0IGFkZCB3YW50ZWQvZm9vIGRpc2NhcmQvZm9vIGRpc2NhcmRfZmlsZSBkaXNjYXJkX2ZpbGVfbm90ICYmCisJCXA0IHN1Ym1pdCAtZCAiaW5pdGlhbCByZXZpc2lvbiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoZSByZXBvIHdhcyBjcmVhdGVkIGNvcnJlY3RseScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvLi4uQGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHdhbnRlZC9mb28gJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlzY2FyZC9mb28gJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlzY2FyZF9maWxlICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpc2NhcmRfZmlsZV9ub3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lLCBleGNsdWRpbmcgcGFydCBvZiByZXBvJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0vL2RlcG90L2Rpc2NhcmQvLi4uIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC8uLi5AYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgd2FudGVkL2ZvbyAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkaXNjYXJkL2ZvbyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXNjYXJkX2ZpbGUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlzY2FyZF9maWxlX25vdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUsIGV4Y2x1ZGluZyBzaW5nbGUgZmlsZSwgbm8gdHJhaWxpbmcgLycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLy9kZXBvdC9kaXNjYXJkX2ZpbGUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90Ly4uLkBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB3YW50ZWQvZm9vICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpc2NhcmQvZm9vICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGRpc2NhcmRfZmlsZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXNjYXJkX2ZpbGVfbm90CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSwgdGhlbiBzeW5jIHdpdGggZXhjbHVkZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLy9kZXBvdC9kaXNjYXJkLy4uLiAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvLi4uQGFsbCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IGVkaXQgd2FudGVkL2ZvbyBkaXNjYXJkL2ZvbyBkaXNjYXJkX2ZpbGVfbm90ICYmCisJCWRhdGUgPj53YW50ZWQvZm9vICYmCisJCWRhdGUgPj5kaXNjYXJkL2ZvbyAmJgorCQlkYXRlID4+ZGlzY2FyZF9maWxlX25vdCAmJgorCQlwNCBzdWJtaXQgLWQgInVwZGF0aW5nIiAmJgorCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLy9kZXBvdC9kaXNjYXJkLy4uLiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB3YW50ZWQvZm9vICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGRpc2NhcmQvZm9vICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpc2NhcmRfZmlsZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXNjYXJkX2ZpbGVfbm90CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSwgdGhlbiBzeW5jIHdpdGggZXhjbHVkZSwgbm8gdHJhaWxpbmcgLycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLy9kZXBvdC9kaXNjYXJkLy4uLiAtLy9kZXBvdC9kaXNjYXJkX2ZpbGUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90Ly4uLkBhbGwgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBlZGl0IHdhbnRlZC9mb28gZGlzY2FyZC9mb28gZGlzY2FyZF9maWxlX25vdCAmJgorCQlkYXRlID4+d2FudGVkL2ZvbyAmJgorCQlkYXRlID4+ZGlzY2FyZC9mb28gJiYKKwkJZGF0ZSA+PmRpc2NhcmRfZmlsZV9ub3QgJiYKKwkJcDQgc3VibWl0IC1kICJ1cGRhdGluZyIgJiYKKworCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS8vZGVwb3QvZGlzY2FyZC8uLi4gLS8vZGVwb3QvZGlzY2FyZF9maWxlICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHdhbnRlZC9mb28gJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlzY2FyZC9mb28gJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlzY2FyZF9maWxlICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpc2NhcmRfZmlsZV9ub3QKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgxOC1naXQtcDQtYmxvY2suc2ggYi90L3Q5ODE4LWdpdC1wNC1ibG9jay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZGI3YWI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgxOC1naXQtcDQtYmxvY2suc2gKQEAgLTAsMCArMSwxNDkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgZmV0Y2hpbmcgY2hhbmdlcyBpbiBtdWx0aXBsZSBibG9ja3MnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCitjcmVhdGVfcmVzdHJpY3RlZF9ncm91cCgpIHsKKwlwNCBncm91cCAtaSA8PC1FT0YKKwlHcm91cDogcmVzdHJpY3RlZAorCU1heFJlc3VsdHM6IDcKKwlNYXhTY2FuUm93czogNDAKKwlVc2VyczogYXV0aG9yCisJRU9GCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NyZWF0ZSBncm91cCB3aXRoIGxpbWl0ZWQgbWF4cm93cycgJworCWNyZWF0ZV9yZXN0cmljdGVkX2dyb3VwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NyZWF0ZSBhIHJlcG8gd2l0aCBtYW55IGNoYW5nZXMnICcKKwkoCisJCWNsaWVudF92aWV3ICIvL2RlcG90L2luY2x1ZGVkLy4uLiAvL2NsaWVudC9pbmNsdWRlZC8uLi4iIFwKKwkJCSAgICAiLy9kZXBvdC9leGNsdWRlZC8uLi4gLy9jbGllbnQvZXhjbHVkZWQvLi4uIiAmJgorCQlta2RpciAtcCAiJGNsaS9pbmNsdWRlZCIgIiRjbGkvZXhjbHVkZWQiICYmCisJCWNkICIkY2xpL2luY2x1ZGVkIiAmJgorCQk+ZmlsZS50eHQgJiYKKwkJcDQgYWRkIGZpbGUudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUudHh0IiAmJgorCQlmb3IgaSBpbiAkKHRlc3Rfc2VxIDAgNSkKKwkJZG8KKwkJCT5vdXRlciRpLnR4dCAmJgorCQkJcDQgYWRkIG91dGVyJGkudHh0ICYmCisJCQlwNCBzdWJtaXQgLWQgIkFkZGluZyBvdXRlciRpLnR4dCIgJiYKKwkJCWZvciBqIGluICQodGVzdF9zZXEgMCA1KQorCQkJZG8KKwkJCQlwNCBlZGl0IGZpbGUudHh0ICYmCisJCQkJZWNobyAkaSRqID5maWxlLnR4dCAmJgorCQkJCXA0IHN1Ym1pdCAtZCAiQ29tbWl0ICRpJGoiIHx8IGV4aXQKKwkJCWRvbmUgfHwgZXhpdAorCQlkb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEZWZhdWx0IHVzZXIgY2Fubm90IGZldGNoIGNoYW5nZXMnICcKKwkhIHA0IGNoYW5nZXMgLW0gMSAvL2RlcG90Ly4uLgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uZSB0aGUgcmVwbycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC0tY2hhbmdlcy1ibG9jay1zaXplPTcgLS12ZXJib3NlIC8vZGVwb3QvaW5jbHVkZWRAYWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0FsbCBmaWxlcyBhcmUgcHJlc2VudCcgJworCWVjaG8gZmlsZS50eHQgPmV4cGVjdGVkICYmCisJdGVzdF93cml0ZV9saW5lcyBvdXRlcjAudHh0IG91dGVyMS50eHQgb3V0ZXIyLnR4dCBvdXRlcjMudHh0IG91dGVyNC50eHQgPj5leHBlY3RlZCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgb3V0ZXI1LnR4dCA+PmV4cGVjdGVkICYmCisJbHMgIiRnaXQiID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlLnR4dCBpcyBjb3JyZWN0JyAnCisJZWNobyA1NSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGdpdC9maWxlLnR4dCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ29ycmVjdCBudW1iZXIgb2YgY29tbWl0cycgJworCShjZCAiJGdpdCIgJiYgZ2l0IGxvZyAtLW9uZWxpbmUpID5sb2cgJiYKKwl3YyAtbCBsb2cgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0MyBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUHJldmlvdXMgdmVyc2lvbiBvZiBmaWxlLnR4dCBpcyBjb3JyZWN0JyAnCisJKGNkICIkZ2l0IiAmJiBnaXQgY2hlY2tvdXQgSEVBRF5eKSAmJgorCWVjaG8gNTMgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRnaXQvZmlsZS50eHQiCisnCisKKyMgVGVzdCBnaXQtcDQgc3luYywgd2l0aCBzb21lIGZpbGVzIG91dHNpZGUgdGhlIGNsaWVudCBzcGVjaWZpY2F0aW9uLgorCitwNF9hZGRfZmlsZSgpIHsKKwkoY2QgIiRjbGkiICYmCisJCT4kMSAmJgorCQlwNCBhZGQgJDEgJiYKKwkJcDQgc3VibWl0IC1kICJBZGRlZCBmaWxlICQxIiAkMQorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWRkIHNvbWUgbW9yZSBmaWxlcycgJworCWZvciBpIGluICQodGVzdF9zZXEgMCAxMCkKKwlkbworCQlwNF9hZGRfZmlsZSAiaW5jbHVkZWQveCRpIiAmJgorCQlwNF9hZGRfZmlsZSAiZXhjbHVkZWQveCRpIgorCWRvbmUgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDAgMTApCisJZG8KKwkJcDRfYWRkX2ZpbGUgImV4Y2x1ZGVkL3kkaSIKKwlkb25lCisnCisKKyMgVGhpcyBzaG91bGQgcGljayB1cCB0aGUgMTAgbmV3IGZpbGVzIGluICJpbmNsdWRlZCIsIGJ1dCBub3QgYmUgY29uZnVzZWQKKyMgYnkgdGhlIGFkZGl0aW9uYWwgZmlsZXMgaW4gImV4Y2x1ZGVkIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnU3luY2luZyBmaWxlcycgJworCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tY2hhbmdlcy1ibG9jay1zaXplPTcgJiYKKwkJZ2l0IGNoZWNrb3V0IHA0L21hc3RlciAmJgorCQlscyAtbCB4KiA+IGxvZyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxMSBsb2cKKwkpCisnCisKKyMgSGFuZGxpbmcgb2YgbXVsdGlwbGUgZGVwb3QgcGF0aHM6CisjICAgIGdpdCBwNCBjbG9uZSAvL2RlcG90L3BhdGhBIC8vZGVwb3QvcGF0aEIKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NyZWF0ZSBhIHJlcG8gd2l0aCBtdWx0aXBsZSBkZXBvdCBwYXRocycgJworCWNsaWVudF92aWV3ICIvL2RlcG90L3BhdGhBLy4uLiAvL2NsaWVudC9wYXRoQS8uLi4iIFwKKwkJICAgICIvL2RlcG90L3BhdGhCLy4uLiAvL2NsaWVudC9wYXRoQi8uLi4iICYmCisJbWtkaXIgLXAgIiRjbGkvcGF0aEEiICIkY2xpL3BhdGhCIiAmJgorCWZvciBwIGluIHBhdGhBIHBhdGhCCisJZG8KKwkJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDEwKQorCQlkbworCQkJcDRfYWRkX2ZpbGUgIiRwL2ZpbGUkcCRpIgorCQlkb25lCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uZSByZXBvIHdpdGggbXVsdGlwbGUgZGVwb3QgcGF0aHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgY2xvbmUgLS1jaGFuZ2VzLWJsb2NrLXNpemU9NCAvL2RlcG90L3BhdGhBQGFsbCAvL2RlcG90L3BhdGhCQGFsbCBcCisJCQktLWRlc3RpbmF0aW9uPWRlc3QgJiYKKwkJbHMgLTEgZGVzdCA+bG9nICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIwIGxvZworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgcmVwbyB3aXRoIHNlbGYtc2l6aW5nIGJsb2NrIHNpemUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1jaGFuZ2VzLWJsb2NrLXNpemU9MTAwMDAwMCAvL2RlcG90QGFsbCAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAmJgorCWdpdCAtQyAiJGdpdCIgbG9nIC0tb25lbGluZSA+bG9nICYmCisJdGVzdF9saW5lX2NvdW50IFw+IDEwIGxvZworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MTktZ2l0LXA0LWNhc2UtZm9sZGluZy5zaCBiL3QvdDk4MTktZ2l0LXA0LWNhc2UtZm9sZGluZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNGQ5M2YwCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgxOS1naXQtcDQtY2FzZS1mb2xkaW5nLnNoCkBAIC0wLDAgKzEsNTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdpbnRlcmFjdGlvbiB3aXRoIFA0IGNhc2UtZm9sZGluZycKKworLiAuL2xpYi1naXQtcDQuc2gKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBDQVNFX0lOU0VOU0lUSVZFX0ZTCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIFA0IGNhc2UtZm9sZGluZyB0ZXN0czsgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbSBkZXRlY3RlZCcKKwl0ZXN0X2RvbmUKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCB3aXRoIGNhc2UgZm9sZGluZyBlbmFibGVkJyAnCisJc3RhcnRfcDRkIC1DMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmVhdGUgYSByZXBvLCBuYW1lIGlzIGxvd2VyY2FzZScgJworCSgKKwkJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkJY2QgIiRjbGkiICYmCisJCW1rZGlyIC1wIGxjIFVDICYmCisJCT5sYy9maWxlLnR4dCAmJiA+VUMvZmlsZS50eHQgJiYKKwkJcDQgYWRkIGxjL2ZpbGUudHh0IFVDL2ZpbGUudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGluaXRpYWwgbGMgYW5kIFVDIHJlcG9zIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgcDQgaXMgaW4gY2FzZS1mb2xkaW5nIG1vZGUnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQk+bGMvRklMRS5UWFQgJiYKKwkJcDQgYWRkIGxjL0ZJTEUuVFhUICYmCisJCSEgcDQgc3VibWl0IC1kICJDYW5ub3QgYWRkIGZpbGUgZGlmZmVyaW5nIG9ubHkgaW4gY2FzZSIgbGMvRklMRS5UWFQKKwkpCisnCisKKyMgQ2hlY2sgd2UgY3JlYXRlZCB0aGUgcmVwbyBwcm9wZXJseQordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgbGMgcmVwbyB1c2luZyBsYyBuYW1lJyAnCisJZ2l0IHA0IGNsb25lIC8vZGVwb3QvbGMvLi4uICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbGMvZmlsZS50eHQgJiYKKwlnaXQgcDQgY2xvbmUgLy9kZXBvdC9VQy8uLi4gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBVQy9maWxlLnR4dAorJworCisjIFRoZSBjbG9uZSBzaG91bGQgZmFpbCwgc2luY2UgdGhlcmUgaXMgbm8gcmVwbyBjYWxsZWQgTEMsIGJ1dCBiZWNhdXNlCisjIHdlIGhhdmUgY2FzZS1pbnNlbnNpdGl2ZSBwNGQgZW5hYmxlZCwgaXQgYXBwZWFycyB0byBnbyBhaGVhZCBhbmQgd29yaywKKyMgYnV0IGxlYXZlcyBhbiBlbXB0eSBnaXQgcmVwbyBpbiBwbGFjZS4KK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ0Nsb25lIGxjIHJlcG8gdXNpbmcgdWMgbmFtZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBjbG9uZSAvL2RlcG90L0xDLy4uLgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdDbG9uZSBVQyByZXBvIHdpdGggbGMgbmFtZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBjbG9uZSAvL2RlcG90L3VjLy4uLgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MjAtZ2l0LXA0LWVkaXRvci1oYW5kbGluZy5zaCBiL3QvdDk4MjAtZ2l0LXA0LWVkaXRvci1oYW5kbGluZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYTFiYmExCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgyMC1naXQtcDQtZWRpdG9yLWhhbmRsaW5nLnNoCkBAIC0wLDAgKzEsMzQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgaGFuZGxpbmcgb2YgRURJVE9SJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImZpbGUxIgorCSkKKycKKworIyBDaGVjayB0aGF0IHRoZSBQNEVESVRPUiBhcmd1bWVudCBjYW4gYmUgZ2l2ZW4gY29tbWFuZC1saW5lCisjIG9wdGlvbnMsIHdoaWNoIGdpdC1wNCB3aWxsIHRoZW4gcGFzcyB0aHJvdWdoIHRvIHRoZSBzaGVsbC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0VESVRPUiB3aXRoIG9wdGlvbnMnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBjaGFuZ2UgPmZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gImNoYW5nZSIgZmlsZTEgJiYKKwkJUDRFRElUT1I9IjogPlwiJGdpdC90b3VjaGVkXCIgJiYgdGVzdC10b29sIGNobXRpbWUgKzUiIGdpdCBwNCBzdWJtaXQgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgIiRnaXQvdG91Y2hlZCIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgyMS1naXQtcDQtcGF0aC12YXJpYXRpb25zLnNoIGIvdC90OTgyMS1naXQtcDQtcGF0aC12YXJpYXRpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVmODBmMTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODIxLWdpdC1wNC1wYXRoLXZhcmlhdGlvbnMuc2gKQEAgLTAsMCArMSwxOTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdDbG9uZSByZXBvc2l0b3JpZXMgd2l0aCBwYXRoIGNhc2UgdmFyaWF0aW9ucycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkIHdpdGggY2FzZSBmb2xkaW5nIGVuYWJsZWQnICcKKwlzdGFydF9wNGQgLUMxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NyZWF0ZSBhIHJlcG8gd2l0aCBwYXRoIGNhc2UgdmFyaWF0aW9ucycgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKworCQlta2RpciAtcCBQYXRoL3RvICYmCisJCT5QYXRoL3RvL0ZpbGUyLnR4dCAmJgorCQlwNCBhZGQgUGF0aC90by9GaWxlMi50eHQgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZTIiICYmCisJCXJtIC1yZiBQYXRoICYmCisKKwkJbWtkaXIgLXAgcGF0aC9UTyAmJgorCQk+cGF0aC9UTy9maWxlMS50eHQgJiYKKwkJcDQgYWRkIHBhdGgvVE8vZmlsZTEudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUxIiAmJgorCQlybSAtcmYgcGF0aCAmJgorCisJCW1rZGlyIC1wIHBhdGgvdG8gJiYKKwkJPnBhdGgvdG8vZmlsZTMudHh0ICYmCisJCXA0IGFkZCBwYXRoL3RvL2ZpbGUzLnR4dCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBmaWxlMyIgJiYKKwkJcm0gLXJmIHBhdGggJiYKKworCQlta2RpciAtcCB4LW91dHNpZGUtc3BlYyAmJgorCQk+eC1vdXRzaWRlLXNwZWMvZmlsZTQudHh0ICYmCisJCXA0IGFkZCB4LW91dHNpZGUtc3BlYy9maWxlNC50eHQgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZTQiICYmCisJCXJtIC1yZiB4LW91dHNpZGUtc3BlYworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgcm9vdCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGNvcmUuaWdub3JlY2FzZSBmYWxzZSAmJgorCQlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdCAmJgorCQkjIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW5zdGVhZCBvZiAidGVzdCAtZiIgdG8gZW5zdXJlIHRoZSBjYXNlIGlzCisJCSMgY2hlY2tlZCBldmVuIGlmIHRoZSB0ZXN0IGlzIGV4ZWN1dGVkIG9uIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW1zLgorCQkjIEFsbCBmaWxlcyBhcmUgdGhlcmUgYXMgZXhwZWN0ZWQgYWx0aG91Z2ggdGhlIHBhdGggY2FzZXMgbG9vayByYW5kb20uCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJUGF0aC90by9GaWxlMi50eHQKKwkJcGF0aC9UTy9maWxlMS50eHQKKwkJcGF0aC90by9maWxlMy50eHQKKwkJeC1vdXRzaWRlLXNwZWMvZmlsZTQudHh0CisJCUVPRgorCQlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uZSByb290IChpZ25vcmVjYXNlKScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGNvcmUuaWdub3JlY2FzZSB0cnVlICYmCisJCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90ICYmCisJCSMgVGhpcyBtZXRob2QgaXMgdXNlZCBpbnN0ZWFkIG9mICJ0ZXN0IC1mIiB0byBlbnN1cmUgdGhlIGNhc2UgaXMKKwkJIyBjaGVja2VkIGV2ZW4gaWYgdGhlIHRlc3QgaXMgZXhlY3V0ZWQgb24gY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbXMuCisJCSMgQWxsIGZpbGVzIGFyZSB0aGVyZSBhcyBleHBlY3RlZCBhbHRob3VnaCB0aGUgcGF0aCBjYXNlcyBsb29rIHJhbmRvbS4KKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlwYXRoL1RPL0ZpbGUyLnR4dAorCQlwYXRoL1RPL2ZpbGUxLnR4dAorCQlwYXRoL1RPL2ZpbGUzLnR4dAorCQl4LW91dHNpZGUtc3BlYy9maWxlNC50eHQKKwkJRU9GCisJCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Nsb25lIHJvb3QgYW5kIGlnbm9yZSBvbmUgZmlsZScgJworCWNsaWVudF92aWV3IFwKKwkJIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkiLS8vZGVwb3QvcGF0aC9UTy9maWxlMS50eHQgLy9jbGllbnQvcGF0aC9UTy9maWxlMS50eHQiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGNvcmUuaWdub3JlY2FzZSBmYWxzZSAmJgorCQlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdCAmJgorCQkjIFdlIGlnbm9yZSBvbmUgZmlsZSBpbiB0aGUgY2xpZW50IHNwZWMgYW5kIGFsbCBwYXRoIGNhc2VzIGNoYW5nZSBmcm9tCisJCSMgIlRPIiB0byAidG8iIQorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCVBhdGgvdG8vRmlsZTIudHh0CisJCXBhdGgvdG8vZmlsZTMudHh0CisJCXgtb3V0c2lkZS1zcGVjL2ZpbGU0LnR4dAorCQlFT0YKKwkJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgcm9vdCBhbmQgaWdub3JlIG9uZSBmaWxlIChpZ25vcmVjYXNlKScgJworCWNsaWVudF92aWV3IFwKKwkJIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkiLS8vZGVwb3QvcGF0aC9UTy9maWxlMS50eHQgLy9jbGllbnQvcGF0aC9UTy9maWxlMS50eHQiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGNvcmUuaWdub3JlY2FzZSB0cnVlICYmCisJCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90ICYmCisJCSMgV2UgaWdub3JlIG9uZSBmaWxlIGluIHRoZSBjbGllbnQgc3BlYyBhbmQgYWxsIHBhdGggY2FzZXMgY2hhbmdlIGZyb20KKwkJIyAiVE8iIHRvICJ0byIhCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJUGF0aC90by9GaWxlMi50eHQKKwkJUGF0aC90by9maWxlMy50eHQKKwkJeC1vdXRzaWRlLXNwZWMvZmlsZTQudHh0CisJCUVPRgorCQlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uZSBwYXRoJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvUGF0aC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmlnbm9yZWNhc2UgZmFsc2UgJiYKKwkJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3QgJiYKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQl0by9GaWxlMi50eHQKKwkJRU9GCisJCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Nsb25lIHBhdGggKGlnbm9yZWNhc2UpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvUGF0aC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmlnbm9yZWNhc2UgdHJ1ZSAmJgorCQlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdCAmJgorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCVRPL0ZpbGUyLnR4dAorCQlUTy9maWxlMS50eHQKKwkJVE8vZmlsZTMudHh0CisJCUVPRgorCQlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIEl0IGxvb2tzIGxpa2UgUDQgZGV0ZXJtaW5lcyB0aGUgcGF0aCBjYXNlIGJhc2VkIG9uIHRoZSBmaXJzdCBmaWxlIGluCisjIGxleGljb2dyYXBoaWNhbCBvcmRlci4gUGxlYXNlIG5vdGUgdGhlIGxvd2VyIGNhc2UgInRvIiBkaXJlY3RvcnkgZm9yIGFsbAorIyBmaWxlcyB0cmlnZ2VyZWQgdGhyb3VnaCB0aGUgYWRkaXRpb24gb2YgIkZpbGUwLnR4dCIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBZGQgYSBuZXcgZmlsZSBhbmQgY2xvbmUgcGF0aCB3aXRoIG5ldyBmaWxlIChpZ25vcmVjYXNlKScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJbWtkaXIgLXAgUGF0aC90byAmJgorCQk+UGF0aC90by9GaWxlMC50eHQgJiYKKwkJcDQgYWRkIFBhdGgvdG8vRmlsZTAudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUiICYmCisJCXJtIC1yZiBQYXRoCisJKSAmJgorCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvUGF0aC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmlnbm9yZWNhc2UgdHJ1ZSAmJgorCQlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdCAmJgorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCXRvL0ZpbGUwLnR4dAorCQl0by9GaWxlMi50eHQKKwkJdG8vZmlsZTEudHh0CisJCXRvL2ZpbGUzLnR4dAorCQlFT0YKKwkJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODIyLWdpdC1wNC1wYXRoLWVuY29kaW5nLnNoIGIvdC90OTgyMi1naXQtcDQtcGF0aC1lbmNvZGluZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NzJkMzk1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgyMi1naXQtcDQtcGF0aC1lbmNvZGluZy5zaApAQCAtMCwwICsxLDc3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQ2xvbmUgcmVwb3NpdG9yaWVzIHdpdGggbm9uIEFTQ0lJIHBhdGhzJworCisuIC4vbGliLWdpdC1wNC5zaAorCitVVEY4X0VTQ0FQRUQ9ImEtXDMwM1wyNDRfby1cMzAzXDI2Nl91LVwzMDNcMjc0LnR4dCIKK0lTTzg4NTlfRVNDQVBFRD0iYS1cMzQ0X28tXDM2Nl91LVwzNzQudHh0IgorCitJU084ODU5PSIkKHByaW50ZiAiJElTTzg4NTlfRVNDQVBFRCIpIiAmJgorZWNobyBjb250ZW50MTIzID4iJElTTzg4NTkiICYmCitybSAiJElTTzg4NTkiIHx8IHsKKwlza2lwX2FsbD0iZnMgZG9lcyBub3QgYWNjZXB0IElTTy04ODU5LTEgZmlsZW5hbWVzIgorCXRlc3RfZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ3JlYXRlIGEgcmVwbyBjb250YWluaW5nIGlzbzg4NTktMSBlbmNvZGVkIHBhdGhzJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJSVNPODg1OT0iJChwcmludGYgIiRJU084ODU5X0VTQ0FQRUQiKSIgJiYKKwkJZWNobyBjb250ZW50MTIzID4iJElTTzg4NTkiICYmCisJCXA0IGFkZCAiJElTTzg4NTkiICYmCisJCXA0IHN1Ym1pdCAtZCAidGVzdCBjb21taXQiCisJKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdDbG9uZSBhdXRvLWRldGVjdHMgZGVwb3Qgd2l0aCBpc284ODU5LTEgcGF0aHMnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCVVURjg9IiQocHJpbnRmICIkVVRGOF9FU0NBUEVEIikiICYmCisJCWVjaG8gIiRVVEY4IiA+ZXhwZWN0ICYmCisJCWdpdCAtYyBjb3JlLnF1b3RlcGF0aD1mYWxzZSBscy1maWxlcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Nsb25lIHJlcG8gY29udGFpbmluZyBpc284ODU5LTEgZW5jb2RlZCBwYXRocyB3aXRoIGdpdC1wNC5wYXRoRW5jb2RpbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnBhdGhFbmNvZGluZyBpc284ODU5LTEgJiYKKwkJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3QgJiYKKwkJVVRGOD0iJChwcmludGYgIiRVVEY4X0VTQ0FQRUQiKSIgJiYKKwkJZWNobyAiJFVURjgiID5leHBlY3QgJiYKKwkJZ2l0IC1jIGNvcmUucXVvdGVwYXRoPWZhbHNlIGxzLWZpbGVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWVjaG8gY29udGVudDEyMyA+ZXhwZWN0ICYmCisJCWNhdCAiJFVURjgiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRGVsZXRlIGlzbzg4NTktMSBlbmNvZGVkIHBhdGhzIGFuZCBjbG9uZScgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCUlTTzg4NTk9IiQocHJpbnRmICIkSVNPODg1OV9FU0NBUEVEIikiICYmCisJCXA0IGRlbGV0ZSAiJElTTzg4NTkiICYmCisJCXA0IHN1Ym1pdCAtZCAicmVtb3ZlIGZpbGUiCisJKSAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCAtYyBjb3JlLnF1b3RlcGF0aD1mYWxzZSBscy1maWxlcyA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgyMy1naXQtcDQtbW9jay1sZnMuc2ggYi90L3Q5ODIzLWdpdC1wNC1tb2NrLWxmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OGI3NmRjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgyMy1naXQtcDQtbW9jay1sZnMuc2gKQEAgLTAsMCArMSwxODggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdDbG9uZSByZXBvc2l0b3JpZXMgYW5kIHN0b3JlIGZpbGVzIGluIE1vY2sgTEZTJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2ZpbGVfaXNfbm90X2luX21vY2tfbGZzICgpIHsKKwlGSUxFPSIkMSIgJiYKKwlDT05URU5UPSIkMiIgJiYKKwllY2hvICIkQ09OVEVOVCIgPmV4cGVjdF9jb250ZW50ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRGSUxFIiAmJgorCXRlc3RfY21wIGV4cGVjdF9jb250ZW50ICIkRklMRSIKK30KKwordGVzdF9maWxlX2lzX2luX21vY2tfbGZzICgpIHsKKwlGSUxFPSIkMSIgJiYKKwlDT05URU5UPSIkMiIgJiYKKwlMT0NBTF9TVE9SQUdFPSIuZ2l0L21vY2stc3RvcmFnZS9sb2NhbC8kQ09OVEVOVCIgJiYKKwlTRVJWRVJfU1RPUkFHRT0iLmdpdC9tb2NrLXN0b3JhZ2UvcmVtb3RlLyRDT05URU5UIiAmJgorCWVjaG8gInBvaW50ZXItJENPTlRFTlQiID5leHBlY3RfcG9pbnRlciAmJgorCWVjaG8gIiRDT05URU5UIiA+ZXhwZWN0X2NvbnRlbnQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiJEZJTEUiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRMT0NBTF9TVE9SQUdFIiAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkU0VSVkVSX1NUT1JBR0UiICYmCisJdGVzdF9jbXAgZXhwZWN0X3BvaW50ZXIgIiRGSUxFIiAmJgorCXRlc3RfY21wIGV4cGVjdF9jb250ZW50ICIkTE9DQUxfU1RPUkFHRSIgJiYKKwl0ZXN0X2NtcCBleHBlY3RfY29udGVudCAiJFNFUlZFUl9TVE9SQUdFIgorfQorCit0ZXN0X2ZpbGVfaXNfZGVsZXRlZF9pbl9tb2NrX2xmcyAoKSB7CisJRklMRT0iJDEiICYmCisJQ09OVEVOVD0iJDIiICYmCisJTE9DQUxfU1RPUkFHRT0iLmdpdC9tb2NrLXN0b3JhZ2UvbG9jYWwvJENPTlRFTlQiICYmCisJU0VSVkVSX1NUT1JBR0U9Ii5naXQvbW9jay1zdG9yYWdlL3JlbW90ZS8kQ09OVEVOVCIgJiYKKwllY2hvICJwb2ludGVyLSRDT05URU5UIiA+ZXhwZWN0X3BvaW50ZXIgJiYKKwllY2hvICIkQ09OVEVOVCIgPmV4cGVjdF9jb250ZW50ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgIiRGSUxFIiAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkTE9DQUxfU1RPUkFHRSIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiJFNFUlZFUl9TVE9SQUdFIiAmJgorCXRlc3RfY21wIGV4cGVjdF9jb250ZW50ICIkTE9DQUxfU1RPUkFHRSIgJiYKKwl0ZXN0X2NtcCBleHBlY3RfY29udGVudCAiJFNFUlZFUl9TVE9SQUdFIgorfQorCit0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICgpIHsKKwlESVI9IiQxIiAmJgorCUVYUEVDVEVEX0NPVU5UPSIkMiIgJiYKKwlmaW5kICIkRElSIiAtdHlwZSBmID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAkRVhQRUNURURfQ09VTlQgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmVhdGUgcmVwbyB3aXRoIGJpbmFyeSBmaWxlcycgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKworCQllY2hvICJjb250ZW50IDEgdHh0IDIzIGJ5dGVzIiA+ZmlsZTEudHh0ICYmCisJCXA0IGFkZCBmaWxlMS50eHQgJiYKKwkJZWNobyAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiA+ZmlsZTIuZGF0ICYmCisJCXA0IGFkZCBmaWxlMi5kYXQgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgdGV4dCBhbmQgYmluYXJ5IGZpbGUiICYmCisKKwkJbWtkaXIgInBhdGggd2l0aCBzcGFjZXMiICYmCisJCWVjaG8gImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgPiJwYXRoIHdpdGggc3BhY2VzL2ZpbGUzLmJpbiIgJiYKKwkJcDQgYWRkICJwYXRoIHdpdGggc3BhY2VzL2ZpbGUzLmJpbiIgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgYW5vdGhlciBiaW5hcnkgZmlsZSB3aXRoIHNhbWUgY29udGVudCBhbmQgc3BhY2VzIGluIHBhdGgiICYmCisKKwkJZWNobyAiY29udGVudCA0IGJpbiAyNiBieXRlcyBYWCIgPmZpbGU0LmJpbiAmJgorCQlwNCBhZGQgZmlsZTQuYmluICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGFub3RoZXIgYmluYXJ5IGZpbGUgd2l0aCBkaWZmZXJlbnQgY29udGVudCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1N0b3JlIGZpbGVzIGluIE1vY2sgTEZTIGJhc2VkIG9uIHNpemUgKD4yNCBieXRlcyknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQudXNlQ2xpZW50U3BlYyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbSBNb2NrTEZTICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVRocmVzaG9sZCAyNCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVQdXNoIFRydWUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisKKwkJdGVzdF9maWxlX2lzX25vdF9pbl9tb2NrX2xmcyBmaWxlMS50eHQgImNvbnRlbnQgMSB0eHQgMjMgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pc19pbl9tb2NrX2xmcyBmaWxlMi5kYXQgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2lzX2luX21vY2tfbGZzICJwYXRoIHdpdGggc3BhY2VzL2ZpbGUzLmJpbiIgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2lzX2luX21vY2tfbGZzIGZpbGU0LmJpbiAiY29udGVudCA0IGJpbiAyNiBieXRlcyBYWCIgJiYKKworCQl0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICIuZ2l0L21vY2stc3RvcmFnZS9sb2NhbCIgMiAmJgorCQl0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICIuZ2l0L21vY2stc3RvcmFnZS9yZW1vdGUiIDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1N0b3JlIGZpbGVzIGluIE1vY2sgTEZTIGJhc2VkIG9uIGV4dGVuc2lvbiAoZGF0KScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC51c2VDbGllbnRTcGVjIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlU3lzdGVtIE1vY2tMRlMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlRXh0ZW5zaW9ucyBkYXQgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlUHVzaCBUcnVlICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCisJCXRlc3RfZmlsZV9pc19ub3RfaW5fbW9ja19sZnMgZmlsZTEudHh0ICJjb250ZW50IDEgdHh0IDIzIGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaXNfaW5fbW9ja19sZnMgZmlsZTIuZGF0ICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pc19ub3RfaW5fbW9ja19sZnMgInBhdGggd2l0aCBzcGFjZXMvZmlsZTMuYmluIiAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaXNfbm90X2luX21vY2tfbGZzIGZpbGU0LmJpbiAiY29udGVudCA0IGJpbiAyNiBieXRlcyBYWCIgJiYKKworCQl0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICIuZ2l0L21vY2stc3RvcmFnZS9sb2NhbCIgMSAmJgorCQl0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICIuZ2l0L21vY2stc3RvcmFnZS9yZW1vdGUiIDEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1N0b3JlIGZpbGVzIGluIE1vY2sgTEZTIGJhc2VkIG9uIGV4dGVuc2lvbiAoZGF0KSBhbmQgdXNlIGdpdCBwNCBzeW5jIGFuZCBubyBjbGllbnQgc3BlYycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnVzZUNsaWVudFNwZWMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVTeXN0ZW0gTW9ja0xGUyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVFeHRlbnNpb25zIGRhdCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVQdXNoIFRydWUgJiYKKwkJZ2l0IHA0IHN5bmMgLy9kZXBvdCAmJgorCQlnaXQgY2hlY2tvdXQgcDQvbWFzdGVyICYmCisKKwkJdGVzdF9maWxlX2lzX25vdF9pbl9tb2NrX2xmcyBmaWxlMS50eHQgImNvbnRlbnQgMSB0eHQgMjMgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pc19pbl9tb2NrX2xmcyBmaWxlMi5kYXQgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2lzX25vdF9pbl9tb2NrX2xmcyAicGF0aCB3aXRoIHNwYWNlcy9maWxlMy5iaW4iICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pc19ub3RfaW5fbW9ja19sZnMgZmlsZTQuYmluICJjb250ZW50IDQgYmluIDI2IGJ5dGVzIFhYIiAmJgorCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbW9jay1zdG9yYWdlL2xvY2FsIiAxICYmCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbW9jay1zdG9yYWdlL3JlbW90ZSIgMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVtb3ZlIGZpbGUgZnJvbSByZXBvIGFuZCBzdG9yZSBmaWxlcyBpbiBNb2NrIExGUyBiYXNlZCBvbiBzaXplICg+MjQgYnl0ZXMpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBkZWxldGUgZmlsZTQuYmluICYmCisJCXA0IHN1Ym1pdCAtZCAiUmVtb3ZlIGZpbGUiCisJKSAmJgorCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnVzZUNsaWVudFNwZWMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVTeXN0ZW0gTW9ja0xGUyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVUaHJlc2hvbGQgMjQgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlUHVzaCBUcnVlICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCisJCXRlc3RfZmlsZV9pc19ub3RfaW5fbW9ja19sZnMgZmlsZTEudHh0ICJjb250ZW50IDEgdHh0IDIzIGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaXNfaW5fbW9ja19sZnMgZmlsZTIuZGF0ICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pc19pbl9tb2NrX2xmcyAicGF0aCB3aXRoIHNwYWNlcy9maWxlMy5iaW4iICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pc19kZWxldGVkX2luX21vY2tfbGZzIGZpbGU0LmJpbiAiY29udGVudCA0IGJpbiAyNiBieXRlcyBYWCIgJiYKKworCQl0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICIuZ2l0L21vY2stc3RvcmFnZS9sb2NhbCIgMiAmJgorCQl0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICIuZ2l0L21vY2stc3RvcmFnZS9yZW1vdGUiIDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1J1biBnaXQgcDQgc3VibWl0IGluIHJlcG8gY29uZmlndXJlZCB3aXRoIGxhcmdlIGZpbGUgc3lzdGVtJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnVzZUNsaWVudFNwZWMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVTeXN0ZW0gTW9ja0xGUyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVUaHJlc2hvbGQgMjQgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlUHVzaCBUcnVlICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBzdWJtaXQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgyNC1naXQtcDQtZ2l0LWxmcy5zaCBiL3QvdDk4MjQtZ2l0LXA0LWdpdC1sZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTI4ZGJiZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MjQtZ2l0LXA0LWdpdC1sZnMuc2gKQEAgLTAsMCArMSwyOTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdDbG9uZSByZXBvc2l0b3JpZXMgYW5kIHN0b3JlIGZpbGVzIGluIEdpdCBMRlMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK2dpdCBsZnMgaGVscCA+L2Rldi9udWxsIDI+JjEgfHwgeworCXNraXBfYWxsPSdza2lwcGluZyBnaXQgcDQgR2l0IExGUyB0ZXN0czsgR2l0IExGUyBub3QgZm91bmQnCisJdGVzdF9kb25lCit9CisKK3Rlc3RfZmlsZV9pbl9sZnMgKCkgeworCUZJTEU9IiQxIiAmJgorCVNJWkU9IiQyIiAmJgorCUVYUEVDVEVEX0NPTlRFTlQ9IiQzIiAmJgorCXNlZCAtbiAnMSwxIHAnICIkRklMRSIgfCBncmVwICJedmVyc2lvbiAiICYmCisJc2VkIC1uICcyLDIgcCcgIiRGSUxFIiB8IGdyZXAgIl5vaWQgIiAmJgorCXNlZCAtbiAnMywzIHAnICIkRklMRSIgfCBncmVwICJec2l6ZSAiICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyAiJEZJTEUiICYmCisJY2F0ICIkRklMRSIgfCBncmVwICJzaXplICRTSVpFIiAmJgorCUhBU0g9JChjYXQgIiRGSUxFIiB8IGdyZXAgIm9pZCBzaGEyNTY6IiB8IHNlZCAtZSAicy9vaWQgc2hhMjU2Oi8vZyIpICYmCisJTEZTX0ZJTEU9Ii5naXQvbGZzL29iamVjdHMvJChlY2hvICIkSEFTSCIgfCBjdXQgLWMxLTIpLyQoZWNobyAiJEhBU0giIHwgY3V0IC1jMy00KS8kSEFTSCIgJiYKKwllY2hvICRFWFBFQ1RFRF9DT05URU5UID5leHBlY3QgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiJEZJTEUiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRMRlNfRklMRSIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgIiRMRlNfRklMRSIKK30KKwordGVzdF9maWxlX2NvdW50X2luX2RpciAoKSB7CisJRElSPSIkMSIgJiYKKwlFWFBFQ1RFRF9DT1VOVD0iJDIiICYmCisJZmluZCAiJERJUiIgLXR5cGUgZiA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gJEVYUEVDVEVEX0NPVU5UIGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ3JlYXRlIHJlcG8gd2l0aCBiaW5hcnkgZmlsZXMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisKKwkJPmZpbGUwLmRhdCAmJgorCQlwNCBhZGQgZmlsZTAuZGF0ICYmCisJCWVjaG8gImNvbnRlbnQgMSB0eHQgMjMgYnl0ZXMiID5maWxlMS50eHQgJiYKKwkJcDQgYWRkIGZpbGUxLnR4dCAmJgorCQllY2hvICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiID5maWxlMi5kYXQgJiYKKwkJcDQgYWRkIGZpbGUyLmRhdCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCB0ZXh0IGFuZCBiaW5hcnkgZmlsZSIgJiYKKworCQlta2RpciAicGF0aCB3aXRoIHNwYWNlcyIgJiYKKwkJZWNobyAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiA+InBhdGggd2l0aCBzcGFjZXMvZmlsZTMuYmluIiAmJgorCQlwNCBhZGQgInBhdGggd2l0aCBzcGFjZXMvZmlsZTMuYmluIiAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBhbm90aGVyIGJpbmFyeSBmaWxlIHdpdGggc2FtZSBjb250ZW50IGFuZCBzcGFjZXMgaW4gcGF0aCIgJiYKKworCQllY2hvICJjb250ZW50IDQgYmluIDI2IGJ5dGVzIFhYIiA+ZmlsZTQuYmluICYmCisJCXA0IGFkZCBmaWxlNC5iaW4gJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgYW5vdGhlciBiaW5hcnkgZmlsZSB3aXRoIGRpZmZlcmVudCBjb250ZW50IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU3RvcmUgZmlsZXMgaW4gTEZTIGJhc2VkIG9uIHNpemUgKD4yNCBieXRlcyknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQudXNlQ2xpZW50U3BlYyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbSBHaXRMRlMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlVGhyZXNob2xkIDI0ICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCisJCXRlc3RfZmlsZV9pbl9sZnMgZmlsZTIuZGF0IDI1ICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pbl9sZnMgInBhdGggd2l0aCBzcGFjZXMvZmlsZTMuYmluIiAyNSAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaW5fbGZzIGZpbGU0LmJpbiAyNiAiY29udGVudCA0IGJpbiAyNiBieXRlcyBYWCIgJiYKKworCQl0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICIuZ2l0L2xmcy9vYmplY3RzIiAyICYmCisKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCisJCSMKKwkJIyBHaXQgTEZTIChzZWUgaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vKQorCQkjCisJCS9maWxlMi5kYXQgZmlsdGVyPWxmcyBkaWZmPWxmcyBtZXJnZT1sZnMgLXRleHQKKwkJL2ZpbGU0LmJpbiBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorCQkvcGF0aFtbOnNwYWNlOl1dd2l0aFtbOnNwYWNlOl1dc3BhY2VzL2ZpbGUzLmJpbiBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorCQlFT0YKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC5naXRhdHRyaWJ1dGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTdG9yZSBmaWxlcyBpbiBMRlMgYmFzZWQgb24gc2l6ZSAoPjI1IGJ5dGVzKScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC51c2VDbGllbnRTcGVjIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlU3lzdGVtIEdpdExGUyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVUaHJlc2hvbGQgMjUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisKKwkJdGVzdF9maWxlX2luX2xmcyBmaWxlNC5iaW4gMjYgImNvbnRlbnQgNCBiaW4gMjYgYnl0ZXMgWFgiICYmCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbGZzL29iamVjdHMiIDEgJiYKKworCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisKKwkJIworCQkjIEdpdCBMRlMgKHNlZSBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS8pCisJCSMKKwkJL2ZpbGU0LmJpbiBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorCQlFT0YKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC5naXRhdHRyaWJ1dGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTdG9yZSBmaWxlcyBpbiBMRlMgYmFzZWQgb24gZXh0ZW5zaW9uIChkYXQpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnVzZUNsaWVudFNwZWMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVTeXN0ZW0gR2l0TEZTICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZUV4dGVuc2lvbnMgZGF0ICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCisJCXRlc3RfZmlsZV9pbl9sZnMgZmlsZTIuZGF0IDI1ICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbGZzL29iamVjdHMiIDEgJiYKKworCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisKKwkJIworCQkjIEdpdCBMRlMgKHNlZSBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS8pCisJCSMKKwkJKi5kYXQgZmlsdGVyPWxmcyBkaWZmPWxmcyBtZXJnZT1sZnMgLXRleHQKKwkJRU9GCisJCXRlc3RfcGF0aF9pc19maWxlIC5naXRhdHRyaWJ1dGVzICYmCisJCXRlc3RfY21wIGV4cGVjdCAuZ2l0YXR0cmlidXRlcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU3RvcmUgZmlsZXMgaW4gTEZTIGJhc2VkIG9uIHNpemUgKD4yNSBieXRlcykgYW5kIGV4dGVuc2lvbiAoZGF0KScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC51c2VDbGllbnRTcGVjIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlU3lzdGVtIEdpdExGUyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVFeHRlbnNpb25zIGRhdCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVUaHJlc2hvbGQgMjUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisKKwkJdGVzdF9maWxlX2luX2xmcyBmaWxlMi5kYXQgMjUgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2luX2xmcyBmaWxlNC5iaW4gMjYgImNvbnRlbnQgNCBiaW4gMjYgYnl0ZXMgWFgiICYmCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbGZzL29iamVjdHMiIDIgJiYKKworCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisKKwkJIworCQkjIEdpdCBMRlMgKHNlZSBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS8pCisJCSMKKwkJKi5kYXQgZmlsdGVyPWxmcyBkaWZmPWxmcyBtZXJnZT1sZnMgLXRleHQKKwkJL2ZpbGU0LmJpbiBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorCQlFT0YKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC5naXRhdHRyaWJ1dGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZW1vdmUgZmlsZSBmcm9tIHJlcG8gYW5kIHN0b3JlIGZpbGVzIGluIExGUyBiYXNlZCBvbiBzaXplICg+MjQgYnl0ZXMpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBkZWxldGUgZmlsZTQuYmluICYmCisJCXA0IHN1Ym1pdCAtZCAiUmVtb3ZlIGZpbGUiCisJKSAmJgorCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnVzZUNsaWVudFNwZWMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVTeXN0ZW0gR2l0TEZTICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVRocmVzaG9sZCAyNCAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKworCQl0ZXN0X2ZpbGVfaW5fbGZzIGZpbGUyLmRhdCAyNSAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaW5fbGZzICJwYXRoIHdpdGggc3BhY2VzL2ZpbGUzLmJpbiIgMjUgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTQuYmluICYmCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbGZzL29iamVjdHMiIDIgJiYKKworCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisKKwkJIworCQkjIEdpdCBMRlMgKHNlZSBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS8pCisJCSMKKwkJL2ZpbGUyLmRhdCBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorCQkvcGF0aFtbOnNwYWNlOl1dd2l0aFtbOnNwYWNlOl1dc3BhY2VzL2ZpbGUzLmJpbiBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorCQlFT0YKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC5naXRhdHRyaWJ1dGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBZGQgLmdpdGF0dHJpYnV0ZXMgYW5kIHN0b3JlIGZpbGVzIGluIExGUyBiYXNlZCBvbiBzaXplICg+MjQgYnl0ZXMpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvICIqLnR4dCB0ZXh0IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJcDQgYWRkIC5naXRhdHRyaWJ1dGVzICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIC5naXRhdHRyaWJ1dGVzIgorCSkgJiYKKworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC51c2VDbGllbnRTcGVjIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlU3lzdGVtIEdpdExGUyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVUaHJlc2hvbGQgMjQgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisKKwkJdGVzdF9maWxlX2luX2xmcyBmaWxlMi5kYXQgMjUgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2luX2xmcyAicGF0aCB3aXRoIHNwYWNlcy9maWxlMy5iaW4iIDI1ICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGU0LmJpbiAmJgorCQl0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICIuZ2l0L2xmcy9vYmplY3RzIiAyICYmCisKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQkqLnR4dCB0ZXh0CisKKwkJIworCQkjIEdpdCBMRlMgKHNlZSBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS8pCisJCSMKKwkJL2ZpbGUyLmRhdCBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorCQkvcGF0aFtbOnNwYWNlOl1dd2l0aFtbOnNwYWNlOl1dc3BhY2VzL2ZpbGUzLmJpbiBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorCQlFT0YKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC5naXRhdHRyaWJ1dGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBZGQgYmlnIGZpbGVzIHRvIHJlcG8gYW5kIHN0b3JlIGZpbGVzIGluIExGUyBiYXNlZCBvbiBjb21wcmVzc2VkIHNpemUgKD4yOCBieXRlcyknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gImNvbnRlbnQgNSBiaW4gNDAgYnl0ZXMgWFhYWFhYWFhYWFhYWFhYWCIgPmZpbGU1LmJpbiAmJgorCQlwNCBhZGQgZmlsZTUuYmluICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUgd2l0aCBzbWFsbCBmb290cHJpbnQgYWZ0ZXIgY29tcHJlc3Npb24iICYmCisKKwkJZWNobyAiY29udGVudCA2IGJpbiAzOSBieXRlcyBYWFhYWFlZWVlZWlpaWloiID5maWxlNi5iaW4gJiYKKwkJcDQgYWRkIGZpbGU2LmJpbiAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBmaWxlIHdpdGggbGFyZ2UgZm9vdHByaW50IGFmdGVyIGNvbXByZXNzaW9uIgorCSkgJiYKKworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC51c2VDbGllbnRTcGVjIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlU3lzdGVtIEdpdExGUyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVDb21wcmVzc2VkVGhyZXNob2xkIDI4ICYmCisJCSMgV2Ugb25seSBpbXBvcnQgSEVBRCBoZXJlICgiQGFsbCIgaXMgbWlzc2luZyEpCisJCWdpdCBwNCBjbG9uZSAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90ICYmCisKKwkJdGVzdF9maWxlX2luX2xmcyBmaWxlNi5iaW4gMzkgImNvbnRlbnQgNiBiaW4gMzkgYnl0ZXMgWFhYWFhZWVlZWVpaWlpaIiAmJgorCQl0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICIuZ2l0L2xmcy9vYmplY3RzIiAxICYmCisKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQkqLnR4dCB0ZXh0CisKKwkJIworCQkjIEdpdCBMRlMgKHNlZSBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS8pCisJCSMKKwkJL2ZpbGU2LmJpbiBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorCQlFT0YKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC5naXRhdHRyaWJ1dGVzCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MjUtZ2l0LXA0LWhhbmRsZS11dGYxNi13aXRob3V0LWJvbS5zaCBiL3QvdDk4MjUtZ2l0LXA0LWhhbmRsZS11dGYxNi13aXRob3V0LWJvbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMDQ5ZmY4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgyNS1naXQtcDQtaGFuZGxlLXV0ZjE2LXdpdGhvdXQtYm9tLnNoCkBAIC0wLDAgKzEsNDYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgaGFuZGxpbmcgb2YgVVRGLTE2IGZpbGVzIHdpdGhvdXQgQk9NJworCisuIC4vbGliLWdpdC1wNC5zaAorCitVVEYxNj0iXDIyN1wwMDBcMjI3XDAwMCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgZGVwb3Qgd2l0aCBVVEYtMTYgZW5jb2RlZCBmaWxlIGFuZCBhcnRpZmljaWFsbHkgcmVtb3ZlIEJPTScgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCXByaW50ZiAiJFVURjE2IiA+ZmlsZTEgJiYKKwkJcDQgYWRkIC10IHV0ZjE2IGZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiZmlsZTEiCisJKSAmJgorCisJKAorCQljZCBkYiAmJgorCQlwNGQgLWpjICYmCisJCSMgUDREIGF1dG9tYXRpY2FsbHkgYWRkcyBhIEJPTS4gUmVtb3ZlIGl0IGhlcmUgdG8gbWFrZSB0aGUgZmlsZSBpbnZhbGlkLgorCQlzZWQgLWUgIlwkZCIgZGVwb3QvZmlsZTEsdiA+ZGVwb3QvZmlsZTEsdi5uZXcgJiYKKwkJbXYgZGVwb3QvZmlsZTEsdi5uZXcgZGVwb3QvZmlsZTEsdiAmJgorCQlwcmludGYgIkAkVVRGMTZAIiA+PmRlcG90L2ZpbGUxLHYgJiYKKwkJcDRkIC1qckYgY2hlY2twb2ludC4xCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBkZXBvdCB3aXRoIGludmFsaWQgVVRGLTE2IGZpbGUgaW4gdmVyYm9zZSBtb2RlJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLS12ZXJib3NlIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlwcmludGYgIiRVVEYxNiIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcF9iaW4gZXhwZWN0IGZpbGUxCisJKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjbG9uZSBkZXBvdCB3aXRoIGludmFsaWQgVVRGLTE2IGZpbGUgaW4gbm9uLXZlcmJvc2UgbW9kZScgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODI2LWdpdC1wNC1rZWVwLWVtcHR5LWNvbW1pdHMuc2ggYi90L3Q5ODI2LWdpdC1wNC1rZWVwLWVtcHR5LWNvbW1pdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmQ2NGFmZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MjYtZ2l0LXA0LWtlZXAtZW1wdHktY29tbWl0cy5zaApAQCAtMCwwICsxLDEzMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0Nsb25lIHJlcG9zaXRvcmllcyBhbmQga2VlcCBlbXB0eSBjb21taXRzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ3JlYXRlIGEgcmVwbycgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKworCQlta2RpciAtcCBzdWJkaXIgJiYKKworCQk+c3ViZGlyL2ZpbGUxLnR4dCAmJgorCQlwNCBhZGQgc3ViZGlyL2ZpbGUxLnR4dCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBmaWxlIDEiICYmCisKKwkJPmZpbGUyLnR4dCAmJgorCQlwNCBhZGQgZmlsZTIudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUgMiIgJiYKKworCQk+c3ViZGlyL2ZpbGUzLnR4dCAmJgorCQlwNCBhZGQgc3ViZGlyL2ZpbGUzLnR4dCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBmaWxlIDMiICYmCisKKwkJPmZpbGU0LnR4dCAmJgorCQlwNCBhZGQgZmlsZTQudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUgNCIgJiYKKworCQlwNCBkZWxldGUgc3ViZGlyL2ZpbGUzLnR4dCAmJgorCQlwNCBzdWJtaXQgLWQgIlJlbW92ZSBmaWxlIDMiICYmCisKKwkJcDQgZGVsZXRlIGZpbGU0LnR4dCAmJgorCQlwNCBzdWJtaXQgLWQgIlJlbW92ZSBmaWxlIDQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uZSByZXBvIHJvb3QgcGF0aCB3aXRoIGFsbCBoaXN0b3J5JyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCVJlbW92ZSBmaWxlIDQKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSA2XQorCisJCVJlbW92ZSBmaWxlIDMKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSA1XQorCisJCUFkZCBmaWxlIDQKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSA0XQorCisJCUFkZCBmaWxlIDMKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSAzXQorCisJCUFkZCBmaWxlIDIKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSAyXQorCisJCUFkZCBmaWxlIDEKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSAxXQorCisJCUVPRgorCQlnaXQgbG9nIC0tZm9ybWF0PSVCID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgcmVwbyBzdWJkaXIgd2l0aCBhbGwgaGlzdG9yeSBidXQga2VlcCBlbXB0eSBjb21taXRzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3Qvc3ViZGlyLy4uLiAvL2NsaWVudC9zdWJkaXIvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQua2VlcEVtcHR5Q29tbWl0cyB0cnVlICYmCisJCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCVJlbW92ZSBmaWxlIDQKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSA2XQorCisJCVJlbW92ZSBmaWxlIDMKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSA1XQorCisJCUFkZCBmaWxlIDQKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSA0XQorCisJCUFkZCBmaWxlIDMKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSAzXQorCisJCUFkZCBmaWxlIDIKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSAyXQorCisJCUFkZCBmaWxlIDEKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSAxXQorCisJCUVPRgorCQlnaXQgbG9nIC0tZm9ybWF0PSVCID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgcmVwbyBzdWJkaXIgd2l0aCBhbGwgaGlzdG9yeScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L3N1YmRpci8uLi4gLy9jbGllbnQvc3ViZGlyLy4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAtLXZlcmJvc2UgLy9kZXBvdEBhbGwgJiYKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlSZW1vdmUgZmlsZSAzCisJCVtnaXQtcDQ6IGRlcG90LXBhdGhzID0gIi8vZGVwb3QvIjogY2hhbmdlID0gNV0KKworCQlBZGQgZmlsZSAzCisJCVtnaXQtcDQ6IGRlcG90LXBhdGhzID0gIi8vZGVwb3QvIjogY2hhbmdlID0gM10KKworCQlBZGQgZmlsZSAxCisJCVtnaXQtcDQ6IGRlcG90LXBhdGhzID0gIi8vZGVwb3QvIjogY2hhbmdlID0gMV0KKworCQlFT0YKKwkJZ2l0IGxvZyAtLWZvcm1hdD0lQiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgyNy1naXQtcDQtY2hhbmdlLWZpbGV0eXBlLnNoIGIvdC90OTgyNy1naXQtcDQtY2hhbmdlLWZpbGV0eXBlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQzNjcwYmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODI3LWdpdC1wNC1jaGFuZ2UtZmlsZXR5cGUuc2gKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBzdXBwb3J0IGZvciBmaWxlIHR5cGUgY2hhbmdlJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGZpbGVzJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgY2xpZW50IC1vIHwgc2VkICIvTGluZUVuZC9zLzouKi86dW5peC8iIHwgcDQgY2xpZW50IC1pICYmCisJCWNhdCA+ZmlsZTEgPDwtRU9GICYmCisJCXRleHQgd2l0aG91dCBhbnkgZnVubnkgc3Vic3RpdHV0aW9uIGJ1c2luZXNzCisJCUVPRgorCQljYXQgPmZpbGUyIDw8LUVPRiAmJgorCQlzZWNvbmQgZmlsZSB3aG9zZSB0eXBlIHdpbGwgY2hhbmdlCisJCUVPRgorCQlwNCBhZGQgZmlsZTEgZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgZmlsZXMiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjaGFuZ2UgZmlsZSB0byBzeW1ib2xpYyBsaW5rJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisKKwkJcm0gZmlsZTIgJiYKKwkJbG4gLXMgZmlsZTEgZmlsZTIgJiYKKwkJZ2l0IGFkZCBmaWxlMiAmJgorCQlnaXQgY29tbWl0IC1tICJzeW1saW5rIGZpbGUxIHRvIGZpbGUyIiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLW0gMSAvL2RlcG90L2ZpbGUyID5maWxlbG9nICYmCisJCWdyZXAgIihzeW1saW5rKSIgZmlsZWxvZworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY2hhbmdlIHN5bWJvbGljIGxpbmsgdG8gZmlsZScgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCisJCXJtIGZpbGUyICYmCisJCWNhdCA+ZmlsZTIgPDwtRU9GICYmCisJCVRoaXMgaXMgYW5vdGhlciBjb250ZW50IGZvciB0aGUgc2Vjb25kIGZpbGUuCisJCUVPRgorCQlnaXQgYWRkIGZpbGUyICYmCisJCWdpdCBjb21taXQgLW0gInJlLXdyaXRlIGZpbGUyIiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLW0gMSAvL2RlcG90L2ZpbGUyID5maWxlbG9nICYmCisJCWdyZXAgIih0ZXh0KSIgZmlsZWxvZworCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODI4LWdpdC1wNC1tYXAtdXNlci5zaCBiL3QvdDk4MjgtZ2l0LXA0LW1hcC11c2VyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNhNmMyOTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODI4LWdpdC1wNC1tYXAtdXNlci5zaApAQCAtMCwwICsxLDU3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQ2xvbmUgcmVwb3NpdG9yaWVzIGFuZCBtYXAgdXNlcnMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmVhdGUgYSByZXBvIHdpdGggZGlmZmVyZW50IHVzZXJzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCisJCT5hdXRob3IudHh0ICYmCisJCXA0IGFkZCBhdXRob3IudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUgYXV0aG9yXFxuIiAmJgorCisJCVA0VVNFUj1tbWF4ICYmCisJCT5tYXgudHh0ICYmCisJCXA0IGFkZCBtYXgudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUgbWF4IiAmJgorCisJCVA0VVNFUj1lcmkgJiYKKwkJPm1vcml0ei50eHQgJiYKKwkJcDQgYWRkIG1vcml0ei50eHQgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZSBtb3JpdHoiICYmCisKKwkJUDRVU0VSPW5vICYmCisJCT5ub2JvZHkudHh0ICYmCisJCXA0IGFkZCBub2JvZHkudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUgbm9ib2R5IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgcmVwbyByb290IHBhdGggd2l0aCBhbGwgaGlzdG9yeScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5tYXBVc2VyICJtbWF4ID0gTWF4IE11c3Rlcm1hbiAgIDxtYXhAZXhhbXBsZS5jb20+ICIgICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0Lm1hcFVzZXIgIiAgZXJpPUVyaWthIE11c3Rlcm1hbiA8ZXJpa2FAZXhhbXBsZS5jb20+IiAmJgorCQlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQkJbm8gPG5vQGNsaWVudD4KKwkJCUVyaWthIE11c3Rlcm1hbiA8ZXJpa2FAZXhhbXBsZS5jb20+CisJCQlNYXggTXVzdGVybWFuIDxtYXhAZXhhbXBsZS5jb20+CisJCQlEci4gYXV0aG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCUVPRgorCQlnaXQgbG9nIC0tZm9ybWF0PSIlYW4gPCVhZT4iID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODI5LWdpdC1wNC1qb2JzLnNoIGIvdC90OTgyOS1naXQtcDQtam9icy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OGNmYjFmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgyOS1naXQtcDQtam9icy5zaApAQCAtMCwwICsxLDk1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHJldHJpZXZlIGpvYiBpbmZvJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHA0IGpvYnMnICcKKwkoCisJCXA0X2FkZF9qb2IgVEVTVEpPQi1BICYmCisJCXA0X2FkZF9qb2IgVEVTVEpPQi1CCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcDQgZmlsZXMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCT5maWxlMSAmJgorCQlwNCBhZGQgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZSAxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbG9nIG1lc3NhZ2Ugb2YgY2hhbmdlbGlzdCB3aXRoIG5vIGpvYnMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJQWRkIGZpbGUgMQorCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDFdCisKKwkJRU9GCisJCWdpdCBsb2cgLS1mb3JtYXQ9JUIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgVEVTVEpPQi1BIHRvIGNoYW5nZSAxJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgZml4IC1jIDEgVEVTVEpPQi1BCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBsb2cgbWVzc2FnZSBvZiBjaGFuZ2VsaXN0IHdpdGggb25lIGpvYicgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlBZGQgZmlsZSAxCisJCUpvYnM6IFRFU1RKT0ItQQorCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDFdCisKKwkJRU9GCisJCWdpdCBsb2cgLS1mb3JtYXQ9JUIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgVEVTVEpPQi1CIHRvIGNoYW5nZSAxJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgZml4IC1jIDEgVEVTVEpPQi1CCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBsb2cgbWVzc2FnZSBvZiBjaGFuZ2VsaXN0IHdpdGggbW9yZSBqb2JzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCUFkZCBmaWxlIDEKKwkJSm9iczogVEVTVEpPQi1BIFRFU1RKT0ItQgorCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDFdCisKKwkJRU9GCisJCWdpdCBsb2cgLS1mb3JtYXQ9JUIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MzAtZ2l0LXA0LXN5bWxpbmstZGlyLnNoIGIvdC90OTgzMC1naXQtcDQtc3ltbGluay1kaXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2ZiNjk2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MzAtZ2l0LXA0LXN5bWxpbmstZGlyLnNoCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgc3ltbGlua2VkIGRpcmVjdG9yaWVzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltbGlua2VkIGRpcmVjdG9yeScgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCTogPmZpcnN0X2ZpbGUudCAmJgorCQlwNCBhZGQgZmlyc3RfZmlsZS50ICYmCisJCXA0IHN1Ym1pdCAtZCAiZmlyc3QgY2hhbmdlIgorCSkgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0ICIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJbWtkaXIgLXAgc29tZS9zdWIvZGlyZWN0b3J5ICYmCisJCW1rZGlyIC1wIG90aGVyL3N1YmRpcjIgJiYKKwkJOiA+IG90aGVyL3N1YmRpcjIvZmlsZS50ICYmCisJCShjZCBzb21lL3N1Yi9kaXJlY3RvcnkgJiYgbG4gLXMgLi4vLi4vLi4vb3RoZXIvc3ViZGlyMiAuKSAmJgorCQlnaXQgYWRkIHNvbWUgb3RoZXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3ltbGlua3MiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtdgorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCXRlc3QgLUwgc29tZS9zdWIvZGlyZWN0b3J5L3N1YmRpcjIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgc29tZS9zdWIvZGlyZWN0b3J5L3N1YmRpcjIvZmlsZS50CisJKQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgzMS1naXQtcDQtdHJpZ2dlcnMuc2ggYi90L3Q5ODMxLWdpdC1wNC10cmlnZ2Vycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZjZjMDM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgzMS1naXQtcDQtdHJpZ2dlcnMuc2gKQEAgLTAsMCArMSw5OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCB3aXRoIHNlcnZlciB0cmlnZ2VycycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgZGVwb3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQlwNCBhZGQgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJjaGFuZ2UgMSIgJiYKKwkJZWNobyBmaWxlMiA+ZmlsZTIgJiYKKwkJcDQgYWRkIGZpbGUyICYmCisJCXA0IHN1Ym1pdCAtZCAiY2hhbmdlIDIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIGV4dHJhIGluZm8gbGluZXMgZnJvbSB2ZXJib3NlIHA0IHRyaWdnZXInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCXA0IHRyaWdnZXJzIC1pIDw8LUVPRgorCQlUcmlnZ2VyczogcDR0cmlnZ2VydGVzdC1jb21tYW5kIGNvbW1hbmQgcHJlLXVzZXItY2hhbmdlICJlY2hvIHZlcmJvc2UgdHJpZ2dlciIKKwkJRU9GCisJKSAmJgorCSgKKwkJcDQgY2hhbmdlIC1vIHwgIGdyZXAgLXMgInZlcmJvc2UgdHJpZ2dlciIKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9AYWxsICYmCisJKAorCQlwNCB0cmlnZ2VycyAtaSA8PC1FT0YKKwkJVHJpZ2dlcnM6CisJCUVPRgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IHdpdGggZXh0cmEgaW5mbyBsaW5lcyBmcm9tIHZlcmJvc2UgcDQgdHJpZ2dlcicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTMgPmZpbGUzICYmCisJCXA0IGFkZCBmaWxlMyAmJgorCQlwNCBzdWJtaXQgLWQgImNoYW5nZSAzIgorCSkgJiYKKwkoCisJCXA0IHRyaWdnZXJzIC1pIDw8LUVPRgorCQlUcmlnZ2VyczogcDR0cmlnZ2VydGVzdC1jb21tYW5kIGNvbW1hbmQgcHJlLXVzZXItZGVzY3JpYmUgImVjaG8gdmVyYm9zZSB0cmlnZ2VyIgorCQlFT0YKKwkpICYmCisJKAorCQlwNCBkZXNjcmliZSAxIHwgIGdyZXAgLXMgInZlcmJvc2UgdHJpZ2dlciIKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9AYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMKKwkpICYmCisJKAorCQlwNCB0cmlnZ2VycyAtaSA8PC1FT0YKKwkJVHJpZ2dlcnM6CisJCUVPRgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IGRlc2NyaXB0aW9uIHdpdGggZXh0cmEgaW5mbyBsaW5lcyBmcm9tIHZlcmJvc2UgcDQgY2hhbmdlIHRyaWdnZXInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCXA0IHRyaWdnZXJzIC1pIDw8LUVPRgorCQlUcmlnZ2VyczogcDR0cmlnZ2VydGVzdC1jb21tYW5kIGNvbW1hbmQgcHJlLXVzZXItY2hhbmdlICJlY2hvIHZlcmJvc2UgdHJpZ2dlciIKKwkJRU9GCisJKSAmJgorCSgKKwkJcDQgY2hhbmdlIC1vIHwgIGdyZXAgLXMgInZlcmJvc2UgdHJpZ2dlciIKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZWNobyBmaWxlNCA+ZmlsZTQgJiYKKwkJZ2l0IGFkZCBmaWxlNCAmJgorCQlnaXQgY29tbWl0IC1tIGZpbGU0ICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQlwNCB0cmlnZ2VycyAtaSA8PC1FT0YKKwkJVHJpZ2dlcnM6CisJCUVPRgorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlNAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODMyLXVuc2hlbHZlLnNoIGIvdC90OTgzMi11bnNoZWx2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lOTI3NmM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgzMi11bnNoZWx2ZS5zaApAQCAtMCwwICsxLDE4NCBAQAorIyEvYmluL3NoCisKK2xhc3Rfc2hlbHZlZF9jaGFuZ2UgKCkgeworCXA0IGNoYW5nZXMgLXMgc2hlbHZlZCAtbTEgfCBjdXQgLWQgIiAiIC1mIDIKK30KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHVuc2hlbHZlJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImNoYW5nZSAxIiAmJgorCQk6ID5maWxlX3RvX2RlbGV0ZSAmJgorCQk6ID5maWxlX3RvX21vdmUgJiYKKwkJcDQgYWRkIGZpbGVfdG9fZGVsZXRlICYmCisJCXA0IGFkZCBmaWxlX3RvX21vdmUgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgZmlsZXMgdG8gZGVsZXRlIiAmJgorCQllY2hvIGZpbGVfdG9faW50ZWdyYXRlID5maWxlX3RvX2ludGVncmF0ZSAmJgorCQlwNCBhZGQgZmlsZV90b19pbnRlZ3JhdGUgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgZmlsZSB0byBpbnRlZ3JhdGUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsIGNsb25lJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9AYWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBzaGVsdmVkIGNoYW5nZWxpc3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBlZGl0IGZpbGUxICYmCisJCWVjaG8gImEgY2hhbmdlIiA+PmZpbGUxICYmCisJCWVjaG8gIm5ldyBmaWxlIiA+ZmlsZTIgJiYKKwkJcDQgYWRkIGZpbGUyICYmCisJCXA0IGRlbGV0ZSBmaWxlX3RvX2RlbGV0ZSAmJgorCQlwNCBlZGl0IGZpbGVfdG9fbW92ZSAmJgorCQlwNCBtb3ZlIGZpbGVfdG9fbW92ZSBtb3ZlZF9maWxlICYmCisJCXA0IGludGVncmF0ZSBmaWxlX3RvX2ludGVncmF0ZSBpbnRlZ3JhdGVkX2ZpbGUgJiYKKwkJcDQgb3BlbmVkICYmCisJCXA0IHNoZWx2ZSAtaSA8PEVPRgorQ2hhbmdlOiBuZXcKK0Rlc2NyaXB0aW9uOgorCVRlc3QgY29tbWl0CisKKwlGdXJ0aGVyIGRlc2NyaXB0aW9uCitGaWxlczoKKwkvL2RlcG90L2ZpbGUxCisJLy9kZXBvdC9maWxlMgorCS8vZGVwb3QvZmlsZV90b19kZWxldGUKKwkvL2RlcG90L2ZpbGVfdG9fbW92ZQorCS8vZGVwb3QvbW92ZWRfZmlsZQorCS8vZGVwb3QvaW50ZWdyYXRlZF9maWxlCitFT0YKKworCSkgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQljaGFuZ2U9JChsYXN0X3NoZWx2ZWRfY2hhbmdlKSAmJgorCQlnaXQgcDQgdW5zaGVsdmUgJGNoYW5nZSAmJgorCQlnaXQgc2hvdyByZWZzL3JlbW90ZXMvcDQtdW5zaGVsdmVkLyRjaGFuZ2UgfCBncmVwIC1xICJGdXJ0aGVyIGRlc2NyaXB0aW9uIiAmJgorCQlnaXQgY2hlcnJ5LXBpY2sgcmVmcy9yZW1vdGVzL3A0LXVuc2hlbHZlZC8kY2hhbmdlICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfY21wIGZpbGUxICIkY2xpIi9maWxlMSAmJgorCQl0ZXN0X2NtcCBmaWxlMiAiJGNsaSIvZmlsZTIgJiYKKwkJdGVzdF9jbXAgZmlsZV90b19pbnRlZ3JhdGUgIiRjbGkiL2ludGVncmF0ZWRfZmlsZSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlX3RvX2RlbGV0ZSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlX3RvX21vdmUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgbW92ZWRfZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHNoZWx2ZWQgY2hhbmdlbGlzdCBhbmQgcmUtdW5zaGVsdmUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQljaGFuZ2U9JChsYXN0X3NoZWx2ZWRfY2hhbmdlKSAmJgorCQllY2hvICJmaWxlMyIgPmZpbGUzICYmCisJCXA0IGFkZCAtYyAkY2hhbmdlIGZpbGUzICYmCisJCXA0IHNoZWx2ZSAtaSAtciA8PEVPRiAmJgorQ2hhbmdlOiAkY2hhbmdlCitEZXNjcmlwdGlvbjoKKwlUZXN0IGNvbW1pdAorCisJRnVydGhlciBkZXNjcmlwdGlvbgorRmlsZXM6CisJLy9kZXBvdC9maWxlMQorCS8vZGVwb3QvZmlsZTIKKwkvL2RlcG90L2ZpbGUzCisJLy9kZXBvdC9maWxlX3RvX2RlbGV0ZQorRU9GCisJCXA0IGRlc2NyaWJlICRjaGFuZ2UKKwkpICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJY2hhbmdlPSQobGFzdF9zaGVsdmVkX2NoYW5nZSkgJiYKKwkJZ2l0IHA0IHVuc2hlbHZlICRjaGFuZ2UgJiYKKwkJZ2l0IGRpZmYgcmVmcy9yZW1vdGVzL3A0LXVuc2hlbHZlZC8kY2hhbmdlLjAgcmVmcy9yZW1vdGVzL3A0LXVuc2hlbHZlZC8kY2hhbmdlIHwgZ3JlcCAtcSBmaWxlMworCSkKKycKKworc2hlbHZlX29uZV9maWxlICgpIHsKKwlkZXNjcmlwdGlvbj0iQ2hhbmdlIHRvIGJlIHVuc2hlbHZlZCIgJiYKKwlmaWxlPSIkMSIgJiYKKwlwNCBzaGVsdmUgLWkgPDxFT0YKK0NoYW5nZTogbmV3CitEZXNjcmlwdGlvbjoKKwkkZGVzY3JpcHRpb24KK0ZpbGVzOgorCSRmaWxlCitFT0YKK30KKworIyBUaGlzIGlzIHRoZSB0cmlja3kgY2FzZSB3aGVyZSB0aGUgc2hlbHZlZCBjaGFuZ2VsaXN0IGJhc2UgcmV2aXNpb24gZG9lc24ndAorIyBtYXRjaCBnaXQtcDQncyBpZGVhIG9mIHRoZSBiYXNlIHJldmlzaW9uCisjCisjIFdlIHdpbGwgYXR0ZW1wdCB0byB1bnNoZWx2ZSBhIGNoYW5nZSB0aGF0IGlzIGJhc2VkIG9uIGEgY2hhbmdlIG9uZSBjb21taXQKKyMgYWhlYWQgb2YgcDQvbWFzdGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBzaGVsdmVkIGNoYW5nZWxpc3QgYmFzZWQgb24gcDQgY2hhbmdlIGFoZWFkIG9mIHA0L21hc3RlcicgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvQGFsbCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHJldmVydCAuLi4gJiYKKwkJcDQgZWRpdCBmaWxlMSAmJgorCQllY2hvICJmb28iID4+ZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJjaGFuZ2U6Zm9vIiAmJgorCQlwNCBlZGl0IGZpbGUxICYmCisJCWVjaG8gImJhciIgPj5maWxlMSAmJgorCQlzaGVsdmVfb25lX2ZpbGUgLy9kZXBvdC9maWxlMSAmJgorCQljaGFuZ2U9JChsYXN0X3NoZWx2ZWRfY2hhbmdlKSAmJgorCQlwNCBkZXNjcmliZSAtUyAkY2hhbmdlID5vdXQudHh0ICYmCisJCWdyZXAgLXEgIkNoYW5nZSB0byBiZSB1bnNoZWx2ZWQiIG91dC50eHQKKwkpCisnCisKKyMgTm93IHRyeSB0byB1bnNoZWx2ZSBpdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyeSB0byB1bnNoZWx2ZSB0aGUgY2hhbmdlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljaGFuZ2U9JChsYXN0X3NoZWx2ZWRfY2hhbmdlKSAmJgorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHVuc2hlbHZlICRjaGFuZ2UgPm91dC50eHQgJiYKKwkJZ3JlcCAtcSAidW5zaGVsdmVkIGNoYW5nZWxpc3QgJGNoYW5nZSIgb3V0LnR4dAorCSkKKycKKworIyBTcGVjaWZ5IHRoZSBvcmlnaW4uIENyZWF0ZSAyIHVucmVsYXRlZCBmaWxlcywgYW5kIGNoZWNrIHRoYXQKKyMgd2Ugb25seSBnZXQgdGhlIG9uZSBpbiBIRUFEfiwgbm90IHRoZSBvbmUgaW4gSEVBRC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zaGVsdmUgc3BlY2lmeWluZyB0aGUgb3JpZ2luJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJOiA+dW5yZWxhdGVkX2ZpbGUwICYmCisJCXA0IGFkZCB1bnJlbGF0ZWRfZmlsZTAgJiYKKwkJcDQgc3VibWl0IC1kICJ1bnJlbGF0ZWQiICYmCisJCTogPnVucmVsYXRlZF9maWxlMSAmJgorCQlwNCBhZGQgdW5yZWxhdGVkX2ZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAidW5yZWxhdGVkIiAmJgorCQk6ID5maWxlX3RvX3NoZWx2ZSAmJgorCQlwNCBhZGQgZmlsZV90b19zaGVsdmUgJiYKKwkJc2hlbHZlX29uZV9maWxlIC8vZGVwb3QvZmlsZV90b19zaGVsdmUKKwkpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9AYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJY2hhbmdlPSQobGFzdF9zaGVsdmVkX2NoYW5nZSkgJiYKKwkJZ2l0IHA0IHVuc2hlbHZlIC0tb3JpZ2luIEhFQUR+ICRjaGFuZ2UgJiYKKwkJZ2l0IGNoZWNrb3V0IHJlZnMvcmVtb3Rlcy9wNC11bnNoZWx2ZWQvJGNoYW5nZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB1bnJlbGF0ZWRfZmlsZTAgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgdW5yZWxhdGVkX2ZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGVfdG9fc2hlbHZlCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MzMtZXJyb3JzLnNoIGIvdC90OTgzMy1lcnJvcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTIyMzY5YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MzMtZXJyb3JzLnNoCkBAIC0wLDAgKzEsNDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgZXJyb3JzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHA0IGZpbGVzJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBmaWxlMSA+ZmlsZTEgJiYKKwkJcDQgYWRkIGZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiZmlsZTEiCisJKQorJworCisjIGFmdGVyIHRoaXMgdGVzdCwgdGhlIGRlZmF1bHQgdXNlciByZXF1aXJlcyBhIHBhc3N3b3JkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBoYW5kbGluZycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJUDRQT1JUPTogdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IHN1Ym1pdCAyPmVycm1zZworCSkgJiYKKwlwNCBwYXNzd2QgLVAgbmV3cGFzc3dvcmQgJiYKKwkoCisJCVA0UEFTU1dEPWJhZHBhc3N3b3JkICYmCisJCWV4cG9ydCBQNFBBU1NXRCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY2xvbmUgLy9kZXBvdC9mb28gMj5lcnJtc2cgJiYKKwkJZ3JlcCAtcSAiZmFpbHVyZSBhY2Nlc3NpbmcgZGVwb3QuKlA0UEFTU1dEIiBlcnJtc2cKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RpY2tldCBsb2dnZWQgb3V0JyAnCisJUDRUSUNLRVRTPSIkY2xpL3RpY2tldHMiICYmCisJZWNobyAibmV3cGFzc3dvcmQiIHwgcDQgbG9naW4gJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NvbW1pdCAidGlja2V0LWF1dGgtY2hlY2siICYmCisJCXA0IGxvZ291dCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgc3VibWl0IDI+ZXJybXNnICYmCisJCWdyZXAgLXEgImZhaWx1cmUgYWNjZXNzaW5nIGRlcG90IiBlcnJtc2cKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgzNC1naXQtcDQtZmlsZS1kaXItYnVnLnNoIGIvdC90OTgzNC1naXQtcDQtZmlsZS1kaXItYnVnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAzMWUxZjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODM0LWdpdC1wNC1maWxlLWRpci1idWcuc2gKQEAgLTAsMCArMSw3MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBkaXJlY3RvcnkvZmlsZSBidWcgaGFuZGxpbmcKKworVGhpcyB0ZXN0IGNyZWF0ZXMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBwZXJmb3JjZSBhbmQKK2NoZWNrcyB0aGF0IGdpdC1wNCByZWNvdmVycyBmcm9tIHRoZSBlcnJvciBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSBwZXJmb3JjZQorcmVwb3NpdG9yeS4nCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZCAmJgorCXRlc3RfbWlnaHRfZmFpbCBwNCBjb25maWd1cmUgc2V0IHN1Ym1pdC5jb2xsaXNpb24uY2hlY2s9MAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGRlcG90JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKworCQl0b3VjaCBhZGRfZmlsZV9hZGRfZGlyX2RlbF9maWxlIGFkZF9maWxlX2FkZF9kaXJfZGVsX2RpciAmJgorCQlwNCBhZGQgYWRkX2ZpbGVfYWRkX2Rpcl9kZWxfZmlsZSBhZGRfZmlsZV9hZGRfZGlyX2RlbF9kaXIgJiYKKwkJbWtkaXIgYWRkX2Rpcl9hZGRfZmlsZV9kZWxfZmlsZSBhZGRfZGlyX2FkZF9maWxlX2RlbF9kaXIgJiYKKwkJdG91Y2ggYWRkX2Rpcl9hZGRfZmlsZV9kZWxfZmlsZS9maWxlIGFkZF9kaXJfYWRkX2ZpbGVfZGVsX2Rpci9maWxlICYmCisJCXA0IGFkZCBhZGRfZGlyX2FkZF9maWxlX2RlbF9maWxlL2ZpbGUgYWRkX2Rpcl9hZGRfZmlsZV9kZWxfZGlyL2ZpbGUgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgaW5pdGlhbCIgJiYKKworCQlybSAtZiBhZGRfZmlsZV9hZGRfZGlyX2RlbF9maWxlIGFkZF9maWxlX2FkZF9kaXJfZGVsX2RpciAmJgorCQlta2RpciBhZGRfZmlsZV9hZGRfZGlyX2RlbF9maWxlIGFkZF9maWxlX2FkZF9kaXJfZGVsX2RpciAmJgorCQl0b3VjaCBhZGRfZmlsZV9hZGRfZGlyX2RlbF9maWxlL2ZpbGUgYWRkX2ZpbGVfYWRkX2Rpcl9kZWxfZGlyL2ZpbGUgJiYKKwkJcDQgYWRkIGFkZF9maWxlX2FkZF9kaXJfZGVsX2ZpbGUvZmlsZSBhZGRfZmlsZV9hZGRfZGlyX2RlbF9kaXIvZmlsZSAmJgorCQlybSAtcmYgYWRkX2Rpcl9hZGRfZmlsZV9kZWxfZmlsZSBhZGRfZGlyX2FkZF9maWxlX2RlbF9kaXIgJiYKKwkJdG91Y2ggYWRkX2Rpcl9hZGRfZmlsZV9kZWxfZmlsZSBhZGRfZGlyX2FkZF9maWxlX2RlbF9kaXIgJiYKKwkJcDQgYWRkIGFkZF9kaXJfYWRkX2ZpbGVfZGVsX2ZpbGUgYWRkX2Rpcl9hZGRfZmlsZV9kZWxfZGlyICYmCisJCXA0IHN1Ym1pdCAtZCAiYWRkIGNvbmZsaWN0aW5nIiAmJgorCisJCXA0IGRlbGV0ZSAtayBhZGRfZmlsZV9hZGRfZGlyX2RlbF9maWxlICYmCisJCXA0IGRlbGV0ZSAtayBhZGRfZmlsZV9hZGRfZGlyX2RlbF9kaXIvZmlsZSAmJgorCQlwNCBkZWxldGUgLWsgYWRkX2Rpcl9hZGRfZmlsZV9kZWxfZmlsZSAmJgorCQlwNCBkZWxldGUgLWsgYWRkX2Rpcl9hZGRfZmlsZV9kZWxfZGlyL2ZpbGUgJiYKKwkJcDQgc3VibWl0IC1kICJkZWxldGUgY29uZmxpY3RpbmciICYmCisKKwkJcDQgZGVsZXRlIC1rICJhZGRfZmlsZV9hZGRfZGlyX2RlbF9maWxlL2ZpbGUiICYmCisJCXA0IGRlbGV0ZSAtayAiYWRkX2ZpbGVfYWRkX2Rpcl9kZWxfZGlyIiAmJgorCQlwNCBkZWxldGUgLWsgImFkZF9kaXJfYWRkX2ZpbGVfZGVsX2ZpbGUvZmlsZSIgJiYKKwkJcDQgZGVsZXRlIC1rICJhZGRfZGlyX2FkZF9maWxlX2RlbF9kaXIiICYmCisJCXA0IHN1Ym1pdCAtZCAiZGVsZXRlIHJlbWFpbmluZyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggZ2l0LXA0JyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9AMSwzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGNvbnRlbnRzJyAnCisJdGVzdF9wYXRoX2lzX2RpciAiJGdpdC9hZGRfZmlsZV9hZGRfZGlyX2RlbF9maWxlIiAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkZ2l0L2FkZF9maWxlX2FkZF9kaXJfZGVsX2RpciIgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyICIkZ2l0L2FkZF9kaXJfYWRkX2ZpbGVfZGVsX2ZpbGUiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRnaXQvYWRkX2Rpcl9hZGRfZmlsZV9kZWxfZGlyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYW5kIGNoZWNrIGVtcHR5JyAnCisJZ2l0IC1DICIkZ2l0IiBwNCByZWJhc2UgJiYKKworCXRlc3RfcGF0aF9pc19taXNzaW5nICIkZ2l0L2FkZF9maWxlX2FkZF9kaXJfZGVsX2ZpbGUiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgIiRnaXQvYWRkX2ZpbGVfYWRkX2Rpcl9kZWxfZGlyIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICIkZ2l0L2FkZF9kaXJfYWRkX2ZpbGVfZGVsX2ZpbGUiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgIiRnaXQvYWRkX2Rpcl9hZGRfZmlsZV9kZWxfZGlyIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk5MDEtZ2l0LXdlYi0tYnJvd3NlLnNoIGIvdC90OTkwMS1naXQtd2ViLS1icm93c2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGU3MTUyZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk5MDEtZ2l0LXdlYi0tYnJvd3NlLnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgd2ViLS1icm93c2UgYmFzaWMgdGVzdHMKKworVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGdpdCB3ZWItLWJyb3dzZSBjYW4gaGFuZGxlIHZhcmlvdXMgdmFsaWQgVVJMcy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3dlYl9icm93c2UgKCkgeworCSMgYnJvd3Nlcj0kMSB1cmw9JDIKKwlnaXQgd2ViLS1icm93c2UgLS1icm93c2VyPSIkMSIgIiQyIiA+YWN0dWFsICYmCisJdHIgLWQgJ1wwMTUnIDxhY3R1YWwgPnRleHQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdGV4dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknVVJMIHdpdGggYW4gYW1wZXJzYW5kIGluIGl0JyAnCisJZWNobyBodHRwOi8vZXhhbXBsZS5jb20vZm9vXCZiYXIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgYnJvd3Nlci5jdXN0b20uY21kIGVjaG8gJiYKKwl0ZXN0X3dlYl9icm93c2UgY3VzdG9tIGh0dHA6Ly9leGFtcGxlLmNvbS9mb29cJmJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknVVJMIHdpdGggYSBzZW1pLWNvbG9uIGluIGl0JyAnCisJZWNobyBodHRwOi8vZXhhbXBsZS5jb20vZm9vXDtiYXIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgYnJvd3Nlci5jdXN0b20uY21kIGVjaG8gJiYKKwl0ZXN0X3dlYl9icm93c2UgY3VzdG9tIGh0dHA6Ly9leGFtcGxlLmNvbS9mb29cO2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknVVJMIHdpdGggYSBoYXNoIGluIGl0JyAnCisJZWNobyBodHRwOi8vZXhhbXBsZS5jb20vZm9vI2JhciA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBicm93c2VyLmN1c3RvbS5jbWQgZWNobyAmJgorCXRlc3Rfd2ViX2Jyb3dzZSBjdXN0b20gaHR0cDovL2V4YW1wbGUuY29tL2ZvbyNiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2Jyb3dzZXIgcGF0aHMgYXJlIHByb3Blcmx5IHF1b3RlZCcgJworCWVjaG8gZmFrZTogaHR0cDovL2V4YW1wbGUuY29tL2ZvbyA+ZXhwZWN0ICYmCisJY2F0ID4iZmFrZSBicm93c2VyIiA8PC1cRU9GICYmCisJIyEvYmluL3NoCisJZWNobyBmYWtlOiAiJEAiCisJRU9GCisJY2htb2QgK3ggImZha2UgYnJvd3NlciIgJiYKKwlnaXQgY29uZmlnIGJyb3dzZXIudzNtLnBhdGggIiQocHdkKS9mYWtlIGJyb3dzZXIiICYmCisJdGVzdF93ZWJfYnJvd3NlIHczbSBodHRwOi8vZXhhbXBsZS5jb20vZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdicm93c2VyIGNvbW1hbmQgYWxsb3dzIGFyYml0cmFyeSBzaGVsbCBjb2RlJyAnCisJZWNobyAiYXJnOiBodHRwOi8vZXhhbXBsZS5jb20vZm9vIiA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBicm93c2VyLmN1c3RvbS5jbWQgIgorCQlmKCkgeworCQkJZm9yIGkgaW4gXCJcJEBcIjsgZG8KKwkJCQllY2hvIGFyZzogXCRpCisJCQlkb25lCisJCX0KKwkJZiIgJiYKKwl0ZXN0X3dlYl9icm93c2UgY3VzdG9tIGh0dHA6Ly9leGFtcGxlLmNvbS9mb28KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5OTAyLWNvbXBsZXRpb24uc2ggYi90L3Q5OTAyLWNvbXBsZXRpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2M0NGFmNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk5MDItY29tcGxldGlvbi5zaApAQCAtMCwwICsxLDE4NTYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgRmVsaXBlIENvbnRyZXJhcworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGJhc2ggY29tcGxldGlvbicKKworLiAuL2xpYi1iYXNoLnNoCisKK2NvbXBsZXRlICgpCit7CisJIyBkbyBub3RoaW5nCisJcmV0dXJuIDAKK30KKworIyBCZSBjYXJlZnVsIHdoZW4gdXBkYXRpbmcgdGhlc2UgbGlzdHM6CisjCisjICgxKSBUaGUgYnVpbGQgdHJlZSBtYXkgaGF2ZSBidWlsZCBhcnRpZmFjdCBmcm9tIGRpZmZlcmVudCBicmFuY2gsIG9yCisjICAgICB0aGUgdXNlcidzICRQQVRIIG1heSBoYXZlIGEgcmFuZG9tIGV4ZWN1dGFibGUgdGhhdCBtYXkgYmVnaW4KKyMgICAgIHdpdGggImdpdC1jaGVjayIgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIHN1YmNvbW1hbmRzIHRoaXMgYnVpbGQKKyMgICAgIHdpbGwgc2hpcCwgZS5nLiAgImNoZWNrLWlnbm9yZSIuICBUaGUgdGVzdHMgZm9yIGNvbXBsZXRpb24gZm9yCisjICAgICBzdWJjb21tYW5kIG5hbWVzIHRlc3RzIGhvdyAiY2hlY2siIGlzIGV4cGFuZGVkOyB3ZSBsaW1pdCB0aGUKKyMgICAgIHBvc3NpYmxlIGNhbmRpZGF0ZXMgdG8gImNoZWNrb3V0IiBhbmQgImNoZWNrLWF0dHIiIHRvIG1ha2Ugc3VyZQorIyAgICAgImNoZWNrLWF0dHIiLCB3aGljaCBpcyBrbm93biBieSB0aGUgZmlsdGVyIGZ1bmN0aW9uIGFzIGEKKyMgICAgIHN1YmNvbW1hbmQgdG8gYmUgdGhyb3duIG91dCwgd2hpbGUgZXhjbHVkaW5nIG90aGVyIHJhbmRvbSBmaWxlcworIyAgICAgdGhhdCBoYXBwZW4gdG8gYmVnaW4gd2l0aCAiY2hlY2siIHRvIGF2b2lkIGxldHRpbmcgdGhlbSBnZXQgaW4KKyMgICAgIHRoZSB3YXkuCisjCisjICgyKSBBIHRlc3QgbWFrZXMgc3VyZSB0aGF0IGNvbW1vbiBzdWJjb21tYW5kcyBhcmUgaW5jbHVkZWQgaW4gdGhlCisjICAgICBjb21wbGV0aW9uIGZvciAiZ2l0IDxUQUI+IiwgYW5kIGEgcGx1bWJpbmcgaXMgZXhjbHVkZWQuICAiYWRkIiwKKyMgICAgICJyZWJhc2UiIGFuZCAibHMtZmlsZXMiIGFyZSBsaXN0ZWQgZm9yIHRoaXMuCisKK0dJVF9URVNUSU5HX0FMTF9DT01NQU5EX0xJU1Q9J2FkZCBjaGVja291dCBjaGVjay1hdHRyIHJlYmFzZSBscy1maWxlcycKK0dJVF9URVNUSU5HX1BPUkNFTEFJTl9DT01NQU5EX0xJU1Q9J2FkZCBjaGVja291dCByZWJhc2UnCisKKy4gIiRHSVRfQlVJTERfRElSL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoIgorCisjIFdlIGRvbid0IG5lZWQgdGhpcyBmdW5jdGlvbiB0byBhY3R1YWxseSBqb2luIHdvcmRzIG9yIGRvIGFueXRoaW5nIHNwZWNpYWwuCisjIEFsc28sIGl0J3MgY2xlYW5lciB0byBhdm9pZCB0b3VjaGluZyBiYXNoJ3MgaW50ZXJuYWwgY29tcGxldGlvbiB2YXJpYWJsZXMuCisjIFNvIGxldCdzIG92ZXJyaWRlIGl0IHdpdGggYSBtaW5pbWFsIHZlcnNpb24gZm9yIHRlc3RpbmcgcHVycG9zZXMuCitfZ2V0X2NvbXBfd29yZHNfYnlfcmVmICgpCit7CisJd2hpbGUgWyAkIyAtZ3QgMCBdOyBkbworCQljYXNlICIkMSIgaW4KKwkJY3VyKQorCQkJY3VyPSR7X3dvcmRzW19jd29yZF19CisJCQk7OworCQlwcmV2KQorCQkJcHJldj0ke193b3Jkc1tfY3dvcmQtMV19CisJCQk7OworCQl3b3JkcykKKwkJCXdvcmRzPSgiJHtfd29yZHNbQF19IikKKwkJCTs7CisJCWN3b3JkKQorCQkJY3dvcmQ9JF9jd29yZAorCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKK30KKworcHJpbnRfY29tcCAoKQoreworCWxvY2FsIElGUz0kJ1xuJworCWVjaG8gIiR7Q09NUFJFUExZWypdfSIgPiBvdXQKK30KKworcnVuX2NvbXBsZXRpb24gKCkKK3sKKwlsb2NhbCAtYSBDT01QUkVQTFkgX3dvcmRzCisJbG9jYWwgX2N3b3JkCisJX3dvcmRzPSggJDEgKQorCXRlc3QgIiR7MTogLTF9IiA9ICcgJyAmJiBfd29yZHNbJHsjX3dvcmRzW0BdfSsxXT0nJworCSgoIF9jd29yZCA9ICR7I193b3Jkc1tAXX0gLSAxICkpCisJX19naXRfd3JhcF9fZ2l0X21haW4gJiYgcHJpbnRfY29tcAorfQorCisjIFRlc3QgaGlnaC1sZXZlbCBjb21wbGV0aW9uCisjIEFyZ3VtZW50cyBhcmU6CisjIDE6IHR5cGVkIHRleHQgc28gZmFyIChjdXIpCisjIDI6IGV4cGVjdGVkIGNvbXBsZXRpb24KK3Rlc3RfY29tcGxldGlvbiAoKQoreworCWlmIHRlc3QgJCMgLWd0IDEKKwl0aGVuCisJCXByaW50ZiAnJXNcbicgIiQyIiA+ZXhwZWN0ZWQKKwllbHNlCisJCXNlZCAtZSAncy9aJC8vJyB8c29ydCA+ZXhwZWN0ZWQKKwlmaSAmJgorCXJ1bl9jb21wbGV0aW9uICIkMSIgJiYKKwlzb3J0IG91dCA+b3V0X3NvcnRlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dF9zb3J0ZWQKK30KKworIyBUZXN0IF9fZ2l0Y29tcC4KKyMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSB0eXBlZCB0ZXh0IHNvIGZhciAoY3VyKTsgdGhlIHJlc3QgYXJlCisjIHBhc3NlZCB0byBfX2dpdGNvbXAuICBFeHBlY3RlZCBvdXRwdXQgY29tZXMgaXMgcmVhZCBmcm9tIHRoZQorIyBzdGFuZGFyZCBpbnB1dCwgbGlrZSB0ZXN0X2NvbXBsZXRpb24oKS4KK3Rlc3RfZ2l0Y29tcCAoKQoreworCWxvY2FsIC1hIENPTVBSRVBMWSAmJgorCXNlZCAtZSAncy9aJC8vJyA+ZXhwZWN0ZWQgJiYKKwlsb2NhbCBjdXI9IiQxIiAmJgorCXNoaWZ0ICYmCisJX19naXRjb21wICIkQCIgJiYKKwlwcmludF9jb21wICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0Cit9CisKKyMgVGVzdCBfX2dpdGNvbXBfbmwKKyMgQXJndW1lbnRzIGFyZToKKyMgMTogY3VycmVudCB3b3JkIChjdXIpCisjIC06IHRoZSByZXN0IGFyZSBwYXNzZWQgdG8gX19naXRjb21wX25sCit0ZXN0X2dpdGNvbXBfbmwgKCkKK3sKKwlsb2NhbCAtYSBDT01QUkVQTFkgJiYKKwlzZWQgLWUgJ3MvWiQvLycgPmV4cGVjdGVkICYmCisJbG9jYWwgY3VyPSIkMSIgJiYKKwlzaGlmdCAmJgorCV9fZ2l0Y29tcF9ubCAiJEAiICYmCisJcHJpbnRfY29tcCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dAorfQorCitpbnZhbGlkX3ZhcmlhYmxlX25hbWU9JyR7Zm9vLmJhcn0nCisKK2FjdHVhbD0iJFRSQVNIX0RJUkVDVE9SWS9hY3R1YWwiCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgTUlOR1cKK3RoZW4KKwlST09UPSIkKHB3ZCAtVykiCitlbHNlCisJUk9PVD0iJChwd2QpIgorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIF9fZ2l0X2ZpbmRfcmVwb19wYXRoL19fZ2l0ZGlyIHRlc3RzJyAnCisJbWtkaXIgLXAgc3ViZGlyL3N1YnN1YmRpciAmJgorCW1rZGlyIC1wIG5vbi1yZXBvICYmCisJZ2l0IGluaXQgb3RoZXJyZXBvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X2ZpbmRfcmVwb19wYXRoIC0gZnJvbSBjb21tYW5kIGxpbmUgKHRocm91Z2ggJF9fZ2l0X2RpciknICcKKwllY2hvICIkUk9PVC9vdGhlcnJlcG8vLmdpdCIgPmV4cGVjdGVkICYmCisJKAorCQlfX2dpdF9kaXI9IiRST09UL290aGVycmVwby8uZ2l0IiAmJgorCQlfX2dpdF9maW5kX3JlcG9fcGF0aCAmJgorCQllY2hvICIkX19naXRfcmVwb19wYXRoIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9maW5kX3JlcG9fcGF0aCAtIC5naXQgZGlyZWN0b3J5IGluIGN3ZCcgJworCWVjaG8gIi5naXQiID5leHBlY3RlZCAmJgorCSgKKwkJX19naXRfZmluZF9yZXBvX3BhdGggJiYKKwkJZWNobyAiJF9fZ2l0X3JlcG9fcGF0aCIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfZmluZF9yZXBvX3BhdGggLSAuZ2l0IGRpcmVjdG9yeSBpbiBwYXJlbnQnICcKKwllY2hvICIkUk9PVC8uZ2l0IiA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIHN1YmRpci9zdWJzdWJkaXIgJiYKKwkJX19naXRfZmluZF9yZXBvX3BhdGggJiYKKwkJZWNobyAiJF9fZ2l0X3JlcG9fcGF0aCIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfZmluZF9yZXBvX3BhdGggLSBjd2QgaXMgYSAuZ2l0IGRpcmVjdG9yeScgJworCWVjaG8gIi4iID5leHBlY3RlZCAmJgorCSgKKwkJY2QgLmdpdCAmJgorCQlfX2dpdF9maW5kX3JlcG9fcGF0aCAmJgorCQllY2hvICIkX19naXRfcmVwb19wYXRoIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9maW5kX3JlcG9fcGF0aCAtIHBhcmVudCBpcyBhIC5naXQgZGlyZWN0b3J5JyAnCisJZWNobyAiJFJPT1QvLmdpdCIgPmV4cGVjdGVkICYmCisJKAorCQljZCAuZ2l0L29iamVjdHMgJiYKKwkJX19naXRfZmluZF9yZXBvX3BhdGggJiYKKwkJZWNobyAiJF9fZ2l0X3JlcG9fcGF0aCIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfZmluZF9yZXBvX3BhdGggLSAkR0lUX0RJUiBzZXQgd2hpbGUgLmdpdCBkaXJlY3RvcnkgaW4gY3dkJyAnCisJZWNobyAiJFJPT1Qvb3RoZXJyZXBvLy5naXQiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX0RJUj0iJFJPT1Qvb3RoZXJyZXBvLy5naXQiICYmCisJCWV4cG9ydCBHSVRfRElSICYmCisJCV9fZ2l0X2ZpbmRfcmVwb19wYXRoICYmCisJCWVjaG8gIiRfX2dpdF9yZXBvX3BhdGgiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X2ZpbmRfcmVwb19wYXRoIC0gJEdJVF9ESVIgc2V0IHdoaWxlIC5naXQgZGlyZWN0b3J5IGluIHBhcmVudCcgJworCWVjaG8gIiRST09UL290aGVycmVwby8uZ2l0IiA+ZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9ESVI9IiRST09UL290aGVycmVwby8uZ2l0IiAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQljZCBzdWJkaXIgJiYKKwkJX19naXRfZmluZF9yZXBvX3BhdGggJiYKKwkJZWNobyAiJF9fZ2l0X3JlcG9fcGF0aCIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfZmluZF9yZXBvX3BhdGggLSBmcm9tIGNvbW1hbmQgbGluZSB3aGlsZSAiZ2l0IC1DIicgJworCWVjaG8gIiRST09ULy5naXQiID5leHBlY3RlZCAmJgorCSgKKwkJX19naXRfZGlyPSIkUk9PVC8uZ2l0IiAmJgorCQlfX2dpdF9DX2FyZ3M9KC1DIG90aGVycmVwbykgJiYKKwkJX19naXRfZmluZF9yZXBvX3BhdGggJiYKKwkJZWNobyAiJF9fZ2l0X3JlcG9fcGF0aCIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfZmluZF9yZXBvX3BhdGggLSByZWxhdGl2ZSBkaXIgZnJvbSBjb21tYW5kIGxpbmUgYW5kICJnaXQgLUMiJyAnCisJZWNobyAiJFJPT1Qvb3RoZXJyZXBvLy5naXQiID5leHBlY3RlZCAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCV9fZ2l0X2Rpcj0ib3RoZXJyZXBvLy5naXQiICYmCisJCV9fZ2l0X0NfYXJncz0oLUMgLi4pICYmCisJCV9fZ2l0X2ZpbmRfcmVwb19wYXRoICYmCisJCWVjaG8gIiRfX2dpdF9yZXBvX3BhdGgiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X2ZpbmRfcmVwb19wYXRoIC0gJEdJVF9ESVIgc2V0IHdoaWxlICJnaXQgLUMiJyAnCisJZWNobyAiJFJPT1QvLmdpdCIgPmV4cGVjdGVkICYmCisJKAorCQlHSVRfRElSPSIkUk9PVC8uZ2l0IiAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQlfX2dpdF9DX2FyZ3M9KC1DIG90aGVycmVwbykgJiYKKwkJX19naXRfZmluZF9yZXBvX3BhdGggJiYKKwkJZWNobyAiJF9fZ2l0X3JlcG9fcGF0aCIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfZmluZF9yZXBvX3BhdGggLSByZWxhdGl2ZSBkaXIgaW4gJEdJVF9ESVIgYW5kICJnaXQgLUMiJyAnCisJZWNobyAiJFJPT1Qvb3RoZXJyZXBvLy5naXQiID5leHBlY3RlZCAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCUdJVF9ESVI9Im90aGVycmVwby8uZ2l0IiAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQlfX2dpdF9DX2FyZ3M9KC1DIC4uKSAmJgorCQlfX2dpdF9maW5kX3JlcG9fcGF0aCAmJgorCQllY2hvICIkX19naXRfcmVwb19wYXRoIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9maW5kX3JlcG9fcGF0aCAtICJnaXQgLUMiIHdoaWxlIC5naXQgZGlyZWN0b3J5IGluIGN3ZCcgJworCWVjaG8gIiRST09UL290aGVycmVwby8uZ2l0IiA+ZXhwZWN0ZWQgJiYKKwkoCisJCV9fZ2l0X0NfYXJncz0oLUMgb3RoZXJyZXBvKSAmJgorCQlfX2dpdF9maW5kX3JlcG9fcGF0aCAmJgorCQllY2hvICIkX19naXRfcmVwb19wYXRoIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9maW5kX3JlcG9fcGF0aCAtICJnaXQgLUMiIHdoaWxlIGN3ZCBpcyBhIC5naXQgZGlyZWN0b3J5JyAnCisJZWNobyAiJFJPT1Qvb3RoZXJyZXBvLy5naXQiID5leHBlY3RlZCAmJgorCSgKKwkJY2QgLmdpdCAmJgorCQlfX2dpdF9DX2FyZ3M9KC1DIC4uIC1DIG90aGVycmVwbykgJiYKKwkJX19naXRfZmluZF9yZXBvX3BhdGggJiYKKwkJZWNobyAiJF9fZ2l0X3JlcG9fcGF0aCIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfZmluZF9yZXBvX3BhdGggLSAiZ2l0IC1DIiB3aGlsZSAuZ2l0IGRpcmVjdG9yeSBpbiBwYXJlbnQnICcKKwllY2hvICIkUk9PVC9vdGhlcnJlcG8vLmdpdCIgPmV4cGVjdGVkICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJX19naXRfQ19hcmdzPSgtQyAuLiAtQyBvdGhlcnJlcG8pICYmCisJCV9fZ2l0X2ZpbmRfcmVwb19wYXRoICYmCisJCWVjaG8gIiRfX2dpdF9yZXBvX3BhdGgiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X2ZpbmRfcmVwb19wYXRoIC0gbm9uLWV4aXN0aW5nIHBhdGggaW4gImdpdCAtQyInICcKKwkoCisJCV9fZ2l0X0NfYXJncz0oLUMgbm9uLWV4aXN0aW5nKSAmJgorCQl0ZXN0X211c3RfZmFpbCBfX2dpdF9maW5kX3JlcG9fcGF0aCAmJgorCQlwcmludGYgIiRfX2dpdF9yZXBvX3BhdGgiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5ICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9maW5kX3JlcG9fcGF0aCAtIG5vbi1leGlzdGluZyBwYXRoIGluICRfX2dpdF9kaXInICcKKwkoCisJCV9fZ2l0X2Rpcj0ibm9uLWV4aXN0aW5nIiAmJgorCQl0ZXN0X211c3RfZmFpbCBfX2dpdF9maW5kX3JlcG9fcGF0aCAmJgorCQlwcmludGYgIiRfX2dpdF9yZXBvX3BhdGgiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5ICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9maW5kX3JlcG9fcGF0aCAtIG5vbi1leGlzdGluZyAkR0lUX0RJUicgJworCSgKKwkJR0lUX0RJUj0iJFJPT1Qvbm9uLWV4aXN0aW5nIiAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQl0ZXN0X211c3RfZmFpbCBfX2dpdF9maW5kX3JlcG9fcGF0aCAmJgorCQlwcmludGYgIiRfX2dpdF9yZXBvX3BhdGgiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5ICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9maW5kX3JlcG9fcGF0aCAtIGdpdGZpbGUgaW4gY3dkJyAnCisJZWNobyAiJFJPT1Qvb3RoZXJyZXBvLy5naXQiID5leHBlY3RlZCAmJgorCWVjaG8gImdpdGRpcjogJFJPT1Qvb3RoZXJyZXBvLy5naXQiID5zdWJkaXIvLmdpdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgc3ViZGlyLy5naXQiICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJX19naXRfZmluZF9yZXBvX3BhdGggJiYKKwkJZWNobyAiJF9fZ2l0X3JlcG9fcGF0aCIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfZmluZF9yZXBvX3BhdGggLSBnaXRmaWxlIGluIHBhcmVudCcgJworCWVjaG8gIiRST09UL290aGVycmVwby8uZ2l0IiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJnaXRkaXI6ICRST09UL290aGVycmVwby8uZ2l0IiA+c3ViZGlyLy5naXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIHN1YmRpci8uZ2l0IiAmJgorCSgKKwkJY2Qgc3ViZGlyL3N1YnN1YmRpciAmJgorCQlfX2dpdF9maW5kX3JlcG9fcGF0aCAmJgorCQllY2hvICIkX19naXRfcmVwb19wYXRoIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdfX2dpdF9maW5kX3JlcG9fcGF0aCAtIHJlc3VsdGluZyBwYXRoIGF2b2lkcyBzeW1saW5rcycgJworCWVjaG8gIiRST09UL290aGVycmVwby8uZ2l0IiA+ZXhwZWN0ZWQgJiYKKwlta2RpciBvdGhlcnJlcG8vZGlyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgb3RoZXJyZXBvL2RpciIgJiYKKwlsbiAtcyBvdGhlcnJlcG8vZGlyIGxpbmsgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxpbmsiICYmCisJKAorCQljZCBsaW5rICYmCisJCV9fZ2l0X2ZpbmRfcmVwb19wYXRoICYmCisJCWVjaG8gIiRfX2dpdF9yZXBvX3BhdGgiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X2ZpbmRfcmVwb19wYXRoIC0gbm90IGEgZ2l0IHJlcG9zaXRvcnknICcKKwkoCisJCWNkIG5vbi1yZXBvICYmCisJCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkUk9PVCIgJiYKKwkJZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTICYmCisJCXRlc3RfbXVzdF9mYWlsIF9fZ2l0X2ZpbmRfcmVwb19wYXRoICYmCisJCXByaW50ZiAiJF9fZ2l0X3JlcG9fcGF0aCIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0ZGlyIC0gZmluZHMgcmVwbycgJworCWVjaG8gIiRST09ULy5naXQiID5leHBlY3RlZCAmJgorCSgKKwkJY2Qgc3ViZGlyL3N1YnN1YmRpciAmJgorCQlfX2dpdGRpciA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0ZGlyIC0gcmV0dXJucyBlcnJvciB3aGVuIGNhbm5vdCBmaW5kIHJlcG8nICcKKwkoCisJCV9fZ2l0X2Rpcj0ibm9uLWV4aXN0aW5nIiAmJgorCQl0ZXN0X211c3RfZmFpbCBfX2dpdGRpciA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSByZXBvIGFzIGFyZ3VtZW50JyAnCisJZWNobyAib3RoZXJyZXBvLy5naXQiID5leHBlY3RlZCAmJgorCSgKKwkJX19naXRkaXIgIm90aGVycmVwbyIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSByZW1vdGUgYXMgYXJndW1lbnQnICcKKwllY2hvICJyZW1vdGUiID5leHBlY3RlZCAmJgorCSgKKwkJX19naXRkaXIgInJlbW90ZSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9kZXF1b3RlIC0gcGxhaW4gdW5xdW90ZWQgd29yZCcgJworCV9fZ2l0X2RlcXVvdGUgdW5xdW90ZWQtd29yZCAmJgorCXZlcmJvc2UgdGVzdCB1bnF1b3RlZC13b3JkID0gIiRkZXF1b3RlZF93b3JkIgorJworCisjIGlucHV0OiAgICBiXGFcY1xrXCdcXFwic1xsXGFcc1xoXGVzCisjIGV4cGVjdGVkOiBiYWNrJ1wic2xhc2hlcwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfZGVxdW90ZSAtIGJhY2tzbGFzaCBlc2NhcGVkJyAnCisJX19naXRfZGVxdW90ZSAiYlxhXGNca1xcJ1wnJ1xcXFxcXFwic1xsXGFcc1xoXGVzIiAmJgorCXZlcmJvc2UgdGVzdCAiYmFjaydcJydcXFwic2xhc2hlcyIgPSAiJGRlcXVvdGVkX3dvcmQiCisnCisKKyMgaW5wdXQ6ICAgIHNpbidnbGVcJyAnInF1byd0ZWQKKyMgZXhwZWN0ZWQ6IHNpbmdsZVwgInF1b3RlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfZGVxdW90ZSAtIHNpbmdsZSBxdW90ZWQnICcKKwlfX2dpdF9kZXF1b3RlICInInNpbidnbGVcXFxcJyAnXFxcInF1byd0ZWQiJyIgJiYKKwl2ZXJib3NlIHRlc3QgJ1wnJ3NpbmdsZVwgInF1b3RlZCdcJycgPSAiJGRlcXVvdGVkX3dvcmQiCisnCisKKyMgaW5wdXQ6ICAgIGRvdSJibGVcXCIgIlwiXHF1b3QiZWQKKyMgZXhwZWN0ZWQ6IGRvdWJsZVwgIlxxdW90ZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X2RlcXVvdGUgLSBkb3VibGUgcXVvdGVkJyAnCisJX19naXRfZGVxdW90ZSAnXCcnZG91ImJsZVxcIiAiXCJccXVvdCJlZCdcJycgJiYKKwl2ZXJib3NlIHRlc3QgJ1wnJ2RvdWJsZVwgIlxxdW90ZWQnXCcnID0gIiRkZXF1b3RlZF93b3JkIgorJworCisjIGlucHV0OiAnb3BlbiBzaW5nbGUgcXVvdGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X2RlcXVvdGUgLSBvcGVuIHNpbmdsZSBxdW90ZScgJworCV9fZ2l0X2RlcXVvdGUgIidcJydvcGVuIHNpbmdsZSBxdW90ZSIgJiYKKwl2ZXJib3NlIHRlc3QgIm9wZW4gc2luZ2xlIHF1b3RlIiA9ICIkZGVxdW90ZWRfd29yZCIKKycKKworIyBpbnB1dDogIm9wZW4gZG91YmxlIHF1b3RlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9kZXF1b3RlIC0gb3BlbiBkb3VibGUgcXVvdGUnICcKKwlfX2dpdF9kZXF1b3RlICJcIm9wZW4gZG91YmxlIHF1b3RlIiAmJgorCXZlcmJvc2UgdGVzdCAib3BlbiBkb3VibGUgcXVvdGUiID0gIiRkZXF1b3RlZF93b3JkIgorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0Y29tcF9kaXJlY3QgLSBwdXRzIGV2ZXJ5dGhpbmcgaW50byBDT01QUkVQTFkgYXMtaXMnICcKKwlzZWQgLWUgInMvWiQvL2ciID5leHBlY3RlZCA8PC1FT0YgJiYKKwl3aXRoLXRyYWlsaW5nLXNwYWNlIFoKKwl3aXRob3V0LXRyYWlsaW5nLXNwYWNlWgorCS0tb3B0aW9uIFoKKwktLW9wdGlvbj1aCisJJGludmFsaWRfdmFyaWFibGVfbmFtZSBaCisJRU9GCisJKAorCQljdXI9c2hvdWxkX2JlX2lnbm9yZWQgJiYKKwkJX19naXRjb21wX2RpcmVjdCAiJChjYXQgZXhwZWN0ZWQpIiAmJgorCQlwcmludF9jb21wCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGNvbXAgLSB0cmFpbGluZyBzcGFjZSAtIG9wdGlvbnMnICcKKwl0ZXN0X2dpdGNvbXAgIi0tcmUiICItLWRyeS1ydW4gLS1yZXVzZS1tZXNzYWdlPSAtLXJlZWRpdC1tZXNzYWdlPQorCQktLXJlc2V0LWF1dGhvciIgPDwtRU9GCisJLS1yZXVzZS1tZXNzYWdlPVoKKwktLXJlZWRpdC1tZXNzYWdlPVoKKwktLXJlc2V0LWF1dGhvciBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0Y29tcCAtIHRyYWlsaW5nIHNwYWNlIC0gY29uZmlnIGtleXMnICcKKwl0ZXN0X2dpdGNvbXAgImJyIiAiYnJhbmNoLiBicmFuY2guYXV0b3NldHVwbWVyZ2UKKwkJYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBicm93c2VyLiIgPDwtXEVPRgorCWJyYW5jaC5aCisJYnJhbmNoLmF1dG9zZXR1cG1lcmdlIFoKKwlicmFuY2guYXV0b3NldHVwcmViYXNlIFoKKwlicm93c2VyLloKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRjb21wIC0gb3B0aW9uIHBhcmFtZXRlcicgJworCXRlc3RfZ2l0Y29tcCAiLS1zdHJhdGVneT1yZSIgIm9jdG9wdXMgb3VycyByZWN1cnNpdmUgcmVzb2x2ZSBzdWJ0cmVlIiBcCisJCSIiICJyZSIgPDwtXEVPRgorCXJlY3Vyc2l2ZSBaCisJcmVzb2x2ZSBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0Y29tcCAtIHByZWZpeCcgJworCXRlc3RfZ2l0Y29tcCAiYnJhbmNoLm1lIiAicmVtb3RlIG1lcmdlIG1lcmdlb3B0aW9ucyByZWJhc2UiIFwKKwkJImJyYW5jaC5tYWludC4iICJtZSIgPDwtXEVPRgorCWJyYW5jaC5tYWludC5tZXJnZSBaCisJYnJhbmNoLm1haW50Lm1lcmdlb3B0aW9ucyBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0Y29tcCAtIHN1ZmZpeCcgJworCXRlc3RfZ2l0Y29tcCAiYnJhbmNoLm1lIiAibWFzdGVyIG1haW50IG5leHQgcHUiICJicmFuY2guIiBcCisJCSJtYSIgIi4iIDw8LVxFT0YKKwlicmFuY2gubWFzdGVyLloKKwlicmFuY2gubWFpbnQuWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGNvbXAgLSBpZ25vcmUgb3B0aW9uYWwgbmVnYXRpdmUgb3B0aW9ucycgJworCXRlc3RfZ2l0Y29tcCAiLS0iICItLWFiYyAtLWRlZiAtLW5vLW9uZSAtLSAtLW5vLXR3byIgPDwtXEVPRgorCS0tYWJjIFoKKwktLWRlZiBaCisJLS1uby1vbmUgWgorCS0tbm8tLi4uIFoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRjb21wIC0gaWdub3JlL25hcnJvdyBvcHRpb25hbCBuZWdhdGl2ZSBvcHRpb25zJyAnCisJdGVzdF9naXRjb21wICItLWEiICItLWFiYyAtLWFiY2RlZiAtLW5vLW9uZSAtLSAtLW5vLXR3byIgPDwtXEVPRgorCS0tYWJjIFoKKwktLWFiY2RlZiBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0Y29tcCAtIGlnbm9yZS9uYXJyb3cgb3B0aW9uYWwgbmVnYXRpdmUgb3B0aW9ucycgJworCXRlc3RfZ2l0Y29tcCAiLS1uIiAiLS1hYmMgLS1kZWYgLS1uby1vbmUgLS0gLS1uby10d28iIDw8LVxFT0YKKwktLW5vLW9uZSBaCisJLS1uby0uLi4gWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGNvbXAgLSBleHBhbmQgYWxsIG5lZ2F0aXZlIG9wdGlvbnMnICcKKwl0ZXN0X2dpdGNvbXAgIi0tbm8tIiAiLS1hYmMgLS1kZWYgLS1uby1vbmUgLS0gLS1uby10d28iIDw8LVxFT0YKKwktLW5vLW9uZSBaCisJLS1uby10d28gWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGNvbXAgLSBleHBhbmQvbmFycm93IGFsbCBuZWdhdGl2ZSBvcHRpb25zJyAnCisJdGVzdF9naXRjb21wICItLW5vLW8iICItLWFiYyAtLWRlZiAtLW5vLW9uZSAtLSAtLW5vLXR3byIgPDwtXEVPRgorCS0tbm8tb25lIFoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRjb21wIC0gZG9lc250IGZhaWwgYmVjYXVzZSBvZiBpbnZhbGlkIHZhcmlhYmxlIG5hbWUnICcKKwlfX2dpdGNvbXAgIiRpbnZhbGlkX3ZhcmlhYmxlX25hbWUiCisnCisKK3JlYWQgLXIgLWQgIiIgcmVmcyA8PC1cRU9GCittYWludAorbWFzdGVyCituZXh0CitwdQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0Y29tcF9ubCAtIHRyYWlsaW5nIHNwYWNlJyAnCisJdGVzdF9naXRjb21wX25sICJtIiAiJHJlZnMiIDw8LUVPRgorCW1haW50IFoKKwltYXN0ZXIgWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGNvbXBfbmwgLSBwcmVmaXgnICcKKwl0ZXN0X2dpdGNvbXBfbmwgIi0tZml4dXA9bSIgIiRyZWZzIiAiLS1maXh1cD0iICJtIiA8PC1FT0YKKwktLWZpeHVwPW1haW50IFoKKwktLWZpeHVwPW1hc3RlciBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0Y29tcF9ubCAtIHN1ZmZpeCcgJworCXRlc3RfZ2l0Y29tcF9ubCAiYnJhbmNoLm1hIiAiJHJlZnMiICJicmFuY2guIiAibWEiICIuIiA8PC1cRU9GCisJYnJhbmNoLm1haW50LloKKwlicmFuY2gubWFzdGVyLloKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRjb21wX25sIC0gbm8gc3VmZml4JyAnCisJdGVzdF9naXRjb21wX25sICJtYSIgIiRyZWZzIiAiIiAibWEiICIiIDw8LVxFT0YKKwltYWludFoKKwltYXN0ZXJaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0Y29tcF9ubCAtIGRvZXNudCBmYWlsIGJlY2F1c2Ugb2YgaW52YWxpZCB2YXJpYWJsZSBuYW1lJyAnCisJX19naXRjb21wX25sICIkaW52YWxpZF92YXJpYWJsZV9uYW1lIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZW1vdGVzIC0gbGlzdCByZW1vdGVzIGZyb20gJEdJVF9ESVIvcmVtb3RlcyBhbmQgZnJvbSBjb25maWcgZmlsZScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCXJlbW90ZV9mcm9tX2ZpbGVfMQorCXJlbW90ZV9mcm9tX2ZpbGVfMgorCXJlbW90ZV9pbl9jb25maWdfMQorCXJlbW90ZV9pbl9jb25maWdfMgorCUVPRgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIC5naXQvcmVtb3RlcyIgJiYKKwlta2RpciAtcCAuZ2l0L3JlbW90ZXMgJiYKKwk+LmdpdC9yZW1vdGVzL3JlbW90ZV9mcm9tX2ZpbGVfMSAmJgorCT4uZ2l0L3JlbW90ZXMvcmVtb3RlX2Zyb21fZmlsZV8yICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVtb3RlIHJlbW92ZSByZW1vdGVfaW5fY29uZmlnXzEiICYmCisJZ2l0IHJlbW90ZSBhZGQgcmVtb3RlX2luX2NvbmZpZ18xIGdpdDovL3JlbW90ZV8xICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVtb3RlIHJlbW92ZSByZW1vdGVfaW5fY29uZmlnXzIiICYmCisJZ2l0IHJlbW90ZSBhZGQgcmVtb3RlX2luX2NvbmZpZ18yIGdpdDovL3JlbW90ZV8yICYmCisJKAorCQlfX2dpdF9yZW1vdGVzID5hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9pc19jb25maWd1cmVkX3JlbW90ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlbW90ZSByZW1vdmUgcmVtb3RlXzEiICYmCisJZ2l0IHJlbW90ZSBhZGQgcmVtb3RlXzEgZ2l0Oi8vcmVtb3RlXzEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZW1vdGUgcmVtb3ZlIHJlbW90ZV8yIiAmJgorCWdpdCByZW1vdGUgYWRkIHJlbW90ZV8yIGdpdDovL3JlbW90ZV8yICYmCisJKAorCQl2ZXJib3NlIF9fZ2l0X2lzX2NvbmZpZ3VyZWRfcmVtb3RlIHJlbW90ZV8yICYmCisJCXRlc3RfbXVzdF9mYWlsIF9fZ2l0X2lzX2NvbmZpZ3VyZWRfcmVtb3RlIG5vbi1leGlzdGVudAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHJlZiBjb21wbGV0aW9uJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIG1hdGNoaW5nLWJyYW5jaCAmJgorCWdpdCB0YWcgbWF0Y2hpbmctdGFnICYmCisJKAorCQljZCBvdGhlcnJlcG8gJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGluaXRpYWwgJiYKKwkJZ2l0IGJyYW5jaCAtbSBtYXN0ZXIgbWFzdGVyLWluLW90aGVyICYmCisJCWdpdCBicmFuY2ggYnJhbmNoLWluLW90aGVyICYmCisJCWdpdCB0YWcgdGFnLWluLW90aGVyCisJKSAmJgorCWdpdCByZW1vdGUgYWRkIG90aGVyICIkUk9PVC9vdGhlcnJlcG8vLmdpdCIgJiYKKwlnaXQgZmV0Y2ggLS1uby10YWdzIG90aGVyICYmCisJcm0gLWYgLmdpdC9GRVRDSF9IRUFEICYmCisJZ2l0IGluaXQgdGhpcmRyZXBvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X3JlZnMgLSBzaW1wbGUnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCUhFQUQKKwltYXN0ZXIKKwltYXRjaGluZy1icmFuY2gKKwlvdGhlci9icmFuY2gtaW4tb3RoZXIKKwlvdGhlci9tYXN0ZXItaW4tb3RoZXIKKwltYXRjaGluZy10YWcKKwlFT0YKKwkoCisJCWN1cj0gJiYKKwkJX19naXRfcmVmcyA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gZnVsbCByZWZzJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlyZWZzL2hlYWRzL21hc3RlcgorCXJlZnMvaGVhZHMvbWF0Y2hpbmctYnJhbmNoCisJcmVmcy9yZW1vdGVzL290aGVyL2JyYW5jaC1pbi1vdGhlcgorCXJlZnMvcmVtb3Rlcy9vdGhlci9tYXN0ZXItaW4tb3RoZXIKKwlyZWZzL3RhZ3MvbWF0Y2hpbmctdGFnCisJRU9GCisJKAorCQljdXI9cmVmcy9oZWFkcy8gJiYKKwkJX19naXRfcmVmcyA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gcmVwbyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlIRUFECisJYnJhbmNoLWluLW90aGVyCisJbWFzdGVyLWluLW90aGVyCisJdGFnLWluLW90aGVyCisJRU9GCisJKAorCQlfX2dpdF9kaXI9IiRST09UL290aGVycmVwby8uZ2l0IiAmJgorCQljdXI9ICYmCisJCV9fZ2l0X3JlZnMgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfcmVmcyAtIHJlbW90ZSBvbiBsb2NhbCBmaWxlIHN5c3RlbScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJSEVBRAorCWJyYW5jaC1pbi1vdGhlcgorCW1hc3Rlci1pbi1vdGhlcgorCXRhZy1pbi1vdGhlcgorCUVPRgorCSgKKwkJY3VyPSAmJgorCQlfX2dpdF9yZWZzIG90aGVycmVwbyA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gcmVtb3RlIG9uIGxvY2FsIGZpbGUgc3lzdGVtIC0gZnVsbCByZWZzJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlyZWZzL2hlYWRzL2JyYW5jaC1pbi1vdGhlcgorCXJlZnMvaGVhZHMvbWFzdGVyLWluLW90aGVyCisJcmVmcy90YWdzL3RhZy1pbi1vdGhlcgorCUVPRgorCSgKKwkJY3VyPXJlZnMvICYmCisJCV9fZ2l0X3JlZnMgb3RoZXJyZXBvID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X3JlZnMgLSBjb25maWd1cmVkIHJlbW90ZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJSEVBRAorCWJyYW5jaC1pbi1vdGhlcgorCW1hc3Rlci1pbi1vdGhlcgorCUVPRgorCSgKKwkJY3VyPSAmJgorCQlfX2dpdF9yZWZzIG90aGVyID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X3JlZnMgLSBjb25maWd1cmVkIHJlbW90ZSAtIGZ1bGwgcmVmcycgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJSEVBRAorCXJlZnMvaGVhZHMvYnJhbmNoLWluLW90aGVyCisJcmVmcy9oZWFkcy9tYXN0ZXItaW4tb3RoZXIKKwlyZWZzL3RhZ3MvdGFnLWluLW90aGVyCisJRU9GCisJKAorCQljdXI9cmVmcy8gJiYKKwkJX19naXRfcmVmcyBvdGhlciA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gY29uZmlndXJlZCByZW1vdGUgLSByZXBvIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCUhFQUQKKwlicmFuY2gtaW4tb3RoZXIKKwltYXN0ZXItaW4tb3RoZXIKKwlFT0YKKwkoCisJCWNkIHRoaXJkcmVwbyAmJgorCQlfX2dpdF9kaXI9IiRST09ULy5naXQiICYmCisJCWN1cj0gJiYKKwkJX19naXRfcmVmcyBvdGhlciA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gY29uZmlndXJlZCByZW1vdGUgLSBmdWxsIHJlZnMgLSByZXBvIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCUhFQUQKKwlyZWZzL2hlYWRzL2JyYW5jaC1pbi1vdGhlcgorCXJlZnMvaGVhZHMvbWFzdGVyLWluLW90aGVyCisJcmVmcy90YWdzL3RhZy1pbi1vdGhlcgorCUVPRgorCSgKKwkJY2QgdGhpcmRyZXBvICYmCisJCV9fZ2l0X2Rpcj0iJFJPT1QvLmdpdCIgJiYKKwkJY3VyPXJlZnMvICYmCisJCV9fZ2l0X3JlZnMgb3RoZXIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfcmVmcyAtIGNvbmZpZ3VyZWQgcmVtb3RlIC0gcmVtb3RlIG5hbWUgbWF0Y2hlcyBhIGRpcmVjdG9yeScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJSEVBRAorCWJyYW5jaC1pbi1vdGhlcgorCW1hc3Rlci1pbi1vdGhlcgorCUVPRgorCW1rZGlyIG90aGVyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgb3RoZXIiICYmCisJKAorCQljdXI9ICYmCisJCV9fZ2l0X3JlZnMgb3RoZXIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfcmVmcyAtIFVSTCByZW1vdGUnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCUhFQUQKKwlicmFuY2gtaW4tb3RoZXIKKwltYXN0ZXItaW4tb3RoZXIKKwl0YWctaW4tb3RoZXIKKwlFT0YKKwkoCisJCWN1cj0gJiYKKwkJX19naXRfcmVmcyAiZmlsZTovLyRST09UL290aGVycmVwby8uZ2l0IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gVVJMIHJlbW90ZSAtIGZ1bGwgcmVmcycgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJSEVBRAorCXJlZnMvaGVhZHMvYnJhbmNoLWluLW90aGVyCisJcmVmcy9oZWFkcy9tYXN0ZXItaW4tb3RoZXIKKwlyZWZzL3RhZ3MvdGFnLWluLW90aGVyCisJRU9GCisJKAorCQljdXI9cmVmcy8gJiYKKwkJX19naXRfcmVmcyAiZmlsZTovLyRST09UL290aGVycmVwby8uZ2l0IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gbm9uLWV4aXN0aW5nIHJlbW90ZScgJworCSgKKwkJY3VyPSAmJgorCQlfX2dpdF9yZWZzIG5vbi1leGlzdGluZyA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfcmVmcyAtIG5vbi1leGlzdGluZyByZW1vdGUgLSBmdWxsIHJlZnMnICcKKwkoCisJCWN1cj1yZWZzLyAmJgorCQlfX2dpdF9yZWZzIG5vbi1leGlzdGluZyA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfcmVmcyAtIG5vbi1leGlzdGluZyBVUkwgcmVtb3RlJyAnCisJKAorCQljdXI9ICYmCisJCV9fZ2l0X3JlZnMgImZpbGU6Ly8kUk9PVC9ub24tZXhpc3RpbmciID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5ICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gbm9uLWV4aXN0aW5nIFVSTCByZW1vdGUgLSBmdWxsIHJlZnMnICcKKwkoCisJCWN1cj1yZWZzLyAmJgorCQlfX2dpdF9yZWZzICJmaWxlOi8vJFJPT1Qvbm9uLWV4aXN0aW5nIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfcmVmcyAtIG5vdCBpbiBhIGdpdCByZXBvc2l0b3J5JyAnCisJKAorCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFJPT1QiICYmCisJCWV4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyAmJgorCQljZCBzdWJkaXIgJiYKKwkJY3VyPSAmJgorCQlfX2dpdF9yZWZzID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5ICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gdW5pcXVlIHJlbW90ZSBicmFuY2hlcyBmb3IgZ2l0IGNoZWNrb3V0IERXSU1lcnknICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCUhFQUQKKwltYXN0ZXIKKwltYXRjaGluZy1icmFuY2gKKwlvdGhlci9hbWJpZ3VvdXMKKwlvdGhlci9icmFuY2gtaW4tb3RoZXIKKwlvdGhlci9tYXN0ZXItaW4tb3RoZXIKKwlyZW1vdGUvYW1iaWd1b3VzCisJcmVtb3RlL2JyYW5jaC1pbi1yZW1vdGUKKwltYXRjaGluZy10YWcKKwlicmFuY2gtaW4tb3RoZXIKKwlicmFuY2gtaW4tcmVtb3RlCisJbWFzdGVyLWluLW90aGVyCisJRU9GCisJZm9yIHJlbW90ZV9yZWYgaW4gcmVmcy9yZW1vdGVzL290aGVyL2FtYmlndW91cyBcCisJCXJlZnMvcmVtb3Rlcy9yZW1vdGUvYW1iaWd1b3VzIFwKKwkJcmVmcy9yZW1vdGVzL3JlbW90ZS9icmFuY2gtaW4tcmVtb3RlCisJZG8KKwkJZ2l0IHVwZGF0ZS1yZWYgJHJlbW90ZV9yZWYgbWFzdGVyICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgJHJlbW90ZV9yZWYiCisJZG9uZSAmJgorCSgKKwkJY3VyPSAmJgorCQlfX2dpdF9yZWZzICIiIDEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfcmVmcyAtIGFmdGVyIC0tb3B0PScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJSEVBRAorCW1hc3RlcgorCW1hdGNoaW5nLWJyYW5jaAorCW90aGVyL2JyYW5jaC1pbi1vdGhlcgorCW90aGVyL21hc3Rlci1pbi1vdGhlcgorCW1hdGNoaW5nLXRhZworCUVPRgorCSgKKwkJY3VyPSItLW9wdD0iICYmCisJCV9fZ2l0X3JlZnMgIiIgIiIgIiIgIiIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfcmVmcyAtIGFmdGVyIC0tb3B0PSAtIGZ1bGwgcmVmcycgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJcmVmcy9oZWFkcy9tYXN0ZXIKKwlyZWZzL2hlYWRzL21hdGNoaW5nLWJyYW5jaAorCXJlZnMvcmVtb3Rlcy9vdGhlci9icmFuY2gtaW4tb3RoZXIKKwlyZWZzL3JlbW90ZXMvb3RoZXIvbWFzdGVyLWluLW90aGVyCisJcmVmcy90YWdzL21hdGNoaW5nLXRhZworCUVPRgorCSgKKwkJY3VyPSItLW9wdD1yZWZzLyIgJiYKKwkJX19naXRfcmVmcyAiIiAiIiAiIiByZWZzLyA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdCByZWZzIC0gZXhsdWRpbmcgcmVmcycgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJXkhFQUQKKwlebWFzdGVyCisJXm1hdGNoaW5nLWJyYW5jaAorCV5vdGhlci9icmFuY2gtaW4tb3RoZXIKKwleb3RoZXIvbWFzdGVyLWluLW90aGVyCisJXm1hdGNoaW5nLXRhZworCUVPRgorCSgKKwkJY3VyPV4gJiYKKwkJX19naXRfcmVmcyA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdCByZWZzIC0gZXhsdWRpbmcgZnVsbCByZWZzJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlecmVmcy9oZWFkcy9tYXN0ZXIKKwlecmVmcy9oZWFkcy9tYXRjaGluZy1icmFuY2gKKwlecmVmcy9yZW1vdGVzL290aGVyL2JyYW5jaC1pbi1vdGhlcgorCV5yZWZzL3JlbW90ZXMvb3RoZXIvbWFzdGVyLWluLW90aGVyCisJXnJlZnMvdGFncy9tYXRjaGluZy10YWcKKwlFT0YKKwkoCisJCWN1cj1ecmVmcy8gJiYKKwkJX19naXRfcmVmcyA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgZmlsdGVyaW5nIG1hdGNoaW5nIHJlZnMnICcKKwlnaXQgYnJhbmNoIG1hdGNoaW5nL2JyYW5jaCAmJgorCWdpdCB0YWcgbWF0Y2hpbmcvdGFnICYmCisJZ2l0IC1DIG90aGVycmVwbyBicmFuY2ggbWF0Y2hpbmcvYnJhbmNoLWluLW90aGVyICYmCisJZ2l0IGZldGNoIC0tbm8tdGFncyBvdGhlciAmJgorCXJtIC1mIC5naXQvRkVUQ0hfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gZG8gbm90IGZpbHRlciByZWZzIHVubGVzcyB0b2xkIHNvJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlIRUFECisJbWFzdGVyCisJbWF0Y2hpbmctYnJhbmNoCisJbWF0Y2hpbmcvYnJhbmNoCisJb3RoZXIvYnJhbmNoLWluLW90aGVyCisJb3RoZXIvbWFzdGVyLWluLW90aGVyCisJb3RoZXIvbWF0Y2hpbmcvYnJhbmNoLWluLW90aGVyCisJbWF0Y2hpbmctdGFnCisJbWF0Y2hpbmcvdGFnCisJRU9GCisJKAorCQljdXI9bWFzdGVyICYmCisJCV9fZ2l0X3JlZnMgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfcmVmcyAtIG9ubHkgbWF0Y2hpbmcgcmVmcycgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJbWF0Y2hpbmctYnJhbmNoCisJbWF0Y2hpbmcvYnJhbmNoCisJbWF0Y2hpbmctdGFnCisJbWF0Y2hpbmcvdGFnCisJRU9GCisJKAorCQljdXI9bWF0ICYmCisJCV9fZ2l0X3JlZnMgIiIgIiIgIiIgIiRjdXIiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X3JlZnMgLSBvbmx5IG1hdGNoaW5nIHJlZnMgLSBmdWxsIHJlZnMnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCXJlZnMvaGVhZHMvbWF0Y2hpbmctYnJhbmNoCisJcmVmcy9oZWFkcy9tYXRjaGluZy9icmFuY2gKKwlFT0YKKwkoCisJCWN1cj1yZWZzL2hlYWRzL21hdCAmJgorCQlfX2dpdF9yZWZzICIiICIiICIiICIkY3VyIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gb25seSBtYXRjaGluZyByZWZzIC0gcmVtb3RlIG9uIGxvY2FsIGZpbGUgc3lzdGVtJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwltYXN0ZXItaW4tb3RoZXIKKwltYXRjaGluZy9icmFuY2gtaW4tb3RoZXIKKwlFT0YKKwkoCisJCWN1cj1tYSAmJgorCQlfX2dpdF9yZWZzIG90aGVycmVwbyAiIiAiIiAiJGN1ciIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfcmVmcyAtIG9ubHkgbWF0Y2hpbmcgcmVmcyAtIGNvbmZpZ3VyZWQgcmVtb3RlJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwltYXN0ZXItaW4tb3RoZXIKKwltYXRjaGluZy9icmFuY2gtaW4tb3RoZXIKKwlFT0YKKwkoCisJCWN1cj1tYSAmJgorCQlfX2dpdF9yZWZzIG90aGVyICIiICIiICIkY3VyIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gb25seSBtYXRjaGluZyByZWZzIC0gcmVtb3RlIC0gZnVsbCByZWZzJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlyZWZzL2hlYWRzL21hc3Rlci1pbi1vdGhlcgorCXJlZnMvaGVhZHMvbWF0Y2hpbmcvYnJhbmNoLWluLW90aGVyCisJRU9GCisJKAorCQljdXI9cmVmcy9oZWFkcy9tYSAmJgorCQlfX2dpdF9yZWZzIG90aGVyICIiICIiICIkY3VyIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9yZWZzIC0gb25seSBtYXRjaGluZyByZWZzIC0gY2hlY2tvdXQgRFdJTWVyeScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJbWF0Y2hpbmctYnJhbmNoCisJbWF0Y2hpbmcvYnJhbmNoCisJbWF0Y2hpbmctdGFnCisJbWF0Y2hpbmcvdGFnCisJbWF0Y2hpbmcvYnJhbmNoLWluLW90aGVyCisJRU9GCisJZm9yIHJlbW90ZV9yZWYgaW4gcmVmcy9yZW1vdGVzL290aGVyL2FtYmlndW91cyBcCisJCXJlZnMvcmVtb3Rlcy9yZW1vdGUvYW1iaWd1b3VzIFwKKwkJcmVmcy9yZW1vdGVzL3JlbW90ZS9icmFuY2gtaW4tcmVtb3RlCisJZG8KKwkJZ2l0IHVwZGF0ZS1yZWYgJHJlbW90ZV9yZWYgbWFzdGVyICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgJHJlbW90ZV9yZWYiCisJZG9uZSAmJgorCSgKKwkJY3VyPW1hdCAmJgorCQlfX2dpdF9yZWZzICIiIDEgIiIgIiRjdXIiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RlYXJkb3duIGFmdGVyIGZpbHRlcmluZyBtYXRjaGluZyByZWZzJyAnCisJZ2l0IGJyYW5jaCAtZCBtYXRjaGluZy9icmFuY2ggJiYKKwlnaXQgdGFnIC1kIG1hdGNoaW5nL3RhZyAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvcmVtb3Rlcy9vdGhlci9tYXRjaGluZy9icmFuY2gtaW4tb3RoZXIgJiYKKwlnaXQgLUMgb3RoZXJyZXBvIGJyYW5jaCAtRCBtYXRjaGluZy9icmFuY2gtaW4tb3RoZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfcmVmcyAtIGZvci1lYWNoLXJlZiBmb3JtYXQgc3BlY2lmaWVycyBpbiBwcmVmaXgnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWV2aWwtJSUtJTQyLSUocmVmbmFtZSkuLm1hc3RlcgorCUVPRgorCSgKKwkJY3VyPSJldmlsLSUlLSU0Mi0lKHJlZm5hbWUpLi5tYXMiICYmCisJCV9fZ2l0X3JlZnMgIiIgIiIgImV2aWwtJSUtJTQyLSUocmVmbmFtZSkuLiIgbWFzID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X2NvbXBsZXRlX3JlZnMgLSBzaW1wbGUnICcKKwlzZWQgLWUgInMvWiQvLyIgPmV4cGVjdGVkIDw8LUVPRiAmJgorCUhFQUQgWgorCW1hc3RlciBaCisJbWF0Y2hpbmctYnJhbmNoIFoKKwlvdGhlci9icmFuY2gtaW4tb3RoZXIgWgorCW90aGVyL21hc3Rlci1pbi1vdGhlciBaCisJbWF0Y2hpbmctdGFnIFoKKwlFT0YKKwkoCisJCWN1cj0gJiYKKwkJX19naXRfY29tcGxldGVfcmVmcyAmJgorCQlwcmludF9jb21wCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9jb21wbGV0ZV9yZWZzIC0gbWF0Y2hpbmcnICcKKwlzZWQgLWUgInMvWiQvLyIgPmV4cGVjdGVkIDw8LUVPRiAmJgorCW1hdGNoaW5nLWJyYW5jaCBaCisJbWF0Y2hpbmctdGFnIFoKKwlFT0YKKwkoCisJCWN1cj1tYXQgJiYKKwkJX19naXRfY29tcGxldGVfcmVmcyAmJgorCQlwcmludF9jb21wCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9jb21wbGV0ZV9yZWZzIC0gcmVtb3RlJyAnCisJc2VkIC1lICJzL1okLy8iID5leHBlY3RlZCA8PC1FT0YgJiYKKwlIRUFEIFoKKwlicmFuY2gtaW4tb3RoZXIgWgorCW1hc3Rlci1pbi1vdGhlciBaCisJRU9GCisJKAorCQljdXI9ICYmCisJCV9fZ2l0X2NvbXBsZXRlX3JlZnMgLS1yZW1vdGU9b3RoZXIgJiYKKwkJcHJpbnRfY29tcAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfY29tcGxldGVfcmVmcyAtIHRyYWNrJyAnCisJc2VkIC1lICJzL1okLy8iID5leHBlY3RlZCA8PC1FT0YgJiYKKwlIRUFEIFoKKwltYXN0ZXIgWgorCW1hdGNoaW5nLWJyYW5jaCBaCisJb3RoZXIvYnJhbmNoLWluLW90aGVyIFoKKwlvdGhlci9tYXN0ZXItaW4tb3RoZXIgWgorCW1hdGNoaW5nLXRhZyBaCisJYnJhbmNoLWluLW90aGVyIFoKKwltYXN0ZXItaW4tb3RoZXIgWgorCUVPRgorCSgKKwkJY3VyPSAmJgorCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tdHJhY2sgJiYKKwkJcHJpbnRfY29tcAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfY29tcGxldGVfcmVmcyAtIGN1cnJlbnQgd29yZCcgJworCXNlZCAtZSAicy9aJC8vIiA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJbWF0Y2hpbmctYnJhbmNoIFoKKwltYXRjaGluZy10YWcgWgorCUVPRgorCSgKKwkJY3VyPSItLW9wdGlvbj1tYXQiICYmCisJCV9fZ2l0X2NvbXBsZXRlX3JlZnMgLS1jdXI9IiR7Y3VyIyo9fSIgJiYKKwkJcHJpbnRfY29tcAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfY29tcGxldGVfcmVmcyAtIHByZWZpeCcgJworCXNlZCAtZSAicy9aJC8vIiA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJdjEuMC4ubWF0Y2hpbmctYnJhbmNoIFoKKwl2MS4wLi5tYXRjaGluZy10YWcgWgorCUVPRgorCSgKKwkJY3VyPXYxLjAuLm1hdCAmJgorCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tcGZ4PXYxLjAuLiAtLWN1cj1tYXQgJiYKKwkJcHJpbnRfY29tcAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfY29tcGxldGVfcmVmcyAtIHN1ZmZpeCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJSEVBRC4KKwltYXN0ZXIuCisJbWF0Y2hpbmctYnJhbmNoLgorCW90aGVyL2JyYW5jaC1pbi1vdGhlci4KKwlvdGhlci9tYXN0ZXItaW4tb3RoZXIuCisJbWF0Y2hpbmctdGFnLgorCUVPRgorCSgKKwkJY3VyPSAmJgorCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tc2Z4PS4gJiYKKwkJcHJpbnRfY29tcAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfY29tcGxldGVfZmV0Y2hfcmVmc3BlY3MgLSBzaW1wbGUnICcKKwlzZWQgLWUgInMvWiQvLyIgPmV4cGVjdGVkIDw8LUVPRiAmJgorCUhFQUQ6SEVBRCBaCisJYnJhbmNoLWluLW90aGVyOmJyYW5jaC1pbi1vdGhlciBaCisJbWFzdGVyLWluLW90aGVyOm1hc3Rlci1pbi1vdGhlciBaCisJRU9GCisJKAorCQljdXI9ICYmCisJCV9fZ2l0X2NvbXBsZXRlX2ZldGNoX3JlZnNwZWNzIG90aGVyICYmCisJCXByaW50X2NvbXAKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X2NvbXBsZXRlX2ZldGNoX3JlZnNwZWNzIC0gbWF0Y2hpbmcnICcKKwlzZWQgLWUgInMvWiQvLyIgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWJyYW5jaC1pbi1vdGhlcjpicmFuY2gtaW4tb3RoZXIgWgorCUVPRgorCSgKKwkJY3VyPWJyICYmCisJCV9fZ2l0X2NvbXBsZXRlX2ZldGNoX3JlZnNwZWNzIG90aGVyICIiIGJyICYmCisJCXByaW50X2NvbXAKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X2NvbXBsZXRlX2ZldGNoX3JlZnNwZWNzIC0gcHJlZml4JyAnCisJc2VkIC1lICJzL1okLy8iID5leHBlY3RlZCA8PC1FT0YgJiYKKwkrSEVBRDpIRUFEIFoKKwkrYnJhbmNoLWluLW90aGVyOmJyYW5jaC1pbi1vdGhlciBaCisJK21hc3Rlci1pbi1vdGhlcjptYXN0ZXItaW4tb3RoZXIgWgorCUVPRgorCSgKKwkJY3VyPSIrIiAmJgorCQlfX2dpdF9jb21wbGV0ZV9mZXRjaF9yZWZzcGVjcyBvdGhlciAiKyIgIiIgICYmCisJCXByaW50X2NvbXAKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X2NvbXBsZXRlX2ZldGNoX3JlZnNwZWNzIC0gZnVsbHkgcXVhbGlmaWVkJyAnCisJc2VkIC1lICJzL1okLy8iID5leHBlY3RlZCA8PC1FT0YgJiYKKwlyZWZzL2hlYWRzL2JyYW5jaC1pbi1vdGhlcjpyZWZzL2hlYWRzL2JyYW5jaC1pbi1vdGhlciBaCisJcmVmcy9oZWFkcy9tYXN0ZXItaW4tb3RoZXI6cmVmcy9oZWFkcy9tYXN0ZXItaW4tb3RoZXIgWgorCXJlZnMvdGFncy90YWctaW4tb3RoZXI6cmVmcy90YWdzL3RhZy1pbi1vdGhlciBaCisJRU9GCisJKAorCQljdXI9cmVmcy8gJiYKKwkJX19naXRfY29tcGxldGVfZmV0Y2hfcmVmc3BlY3Mgb3RoZXIgIiIgcmVmcy8gJiYKKwkJcHJpbnRfY29tcAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfY29tcGxldGVfZmV0Y2hfcmVmc3BlY3MgLSBmdWxseSBxdWFsaWZpZWQgJiBwcmVmaXgnICcKKwlzZWQgLWUgInMvWiQvLyIgPmV4cGVjdGVkIDw8LUVPRiAmJgorCStyZWZzL2hlYWRzL2JyYW5jaC1pbi1vdGhlcjpyZWZzL2hlYWRzL2JyYW5jaC1pbi1vdGhlciBaCisJK3JlZnMvaGVhZHMvbWFzdGVyLWluLW90aGVyOnJlZnMvaGVhZHMvbWFzdGVyLWluLW90aGVyIFoKKwkrcmVmcy90YWdzL3RhZy1pbi1vdGhlcjpyZWZzL3RhZ3MvdGFnLWluLW90aGVyIFoKKwlFT0YKKwkoCisJCWN1cj0rcmVmcy8gJiYKKwkJX19naXRfY29tcGxldGVfZmV0Y2hfcmVmc3BlY3Mgb3RoZXIgKyByZWZzLyAmJgorCQlwcmludF9jb21wCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZWFyZG93biBhZnRlciByZWYgY29tcGxldGlvbicgJworCWdpdCBicmFuY2ggLWQgbWF0Y2hpbmctYnJhbmNoICYmCisJZ2l0IHRhZyAtZCBtYXRjaGluZy10YWcgJiYKKwlnaXQgcmVtb3RlIHJlbW92ZSBvdGhlcgorJworCisKK3Rlc3RfcGF0aF9jb21wbGV0aW9uICgpCit7CisJdGVzdCAkIyA9IDIgfHwgQlVHICJub3QgMiBwYXJhbWV0ZXJzIHRvIHRlc3RfcGF0aF9jb21wbGV0aW9uIgorCisJbG9jYWwgY3VyPSIkMSIgZXhwZWN0ZWQ9IiQyIgorCWVjaG8gIiRleHBlY3RlZCIgPmV4cGVjdGVkICYmCisJKAorCQkjIEluIHRoZSBmb2xsb3dpbmcgdGVzdHMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdlIG9ubHkKKwkJIyBjYXJlIGFib3V0IGhvdyBfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlKCkgZGVhbHMgd2l0aAorCQkjIHVudXN1YWwgY2hhcmFjdGVycyBpbiBwYXRoIG5hbWVzLiAgQnkgcmVxdWVzdGluZyBvbmx5CisJCSMgdW50cmFja2VkIGZpbGVzIHdlIGRvIG5vdCBoYXZlIHRvIGJvdGhlciBhZGRpbmcgYW55CisJCSMgcGF0aHMgdG8gdGhlIGluZGV4IGluIHRob3NlIHRlc3RzLgorCQlfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlIC0tb3RoZXJzICYmCisJCXByaW50X2NvbXAKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBwYXRoIGNvbXBsZXRpb24gdGVzdHMnICcKKwlta2RpciBzaW1wbGUtZGlyIFwKKwkgICAgICAic3BhY2VzIGluIGRpciIgXAorCSAgICAgIMOhcnbDrXp0xbFyxZEgJiYKKwl0b3VjaCBzaW1wbGUtZGlyL3NpbXBsZS1maWxlIFwKKwkgICAgICAic3BhY2VzIGluIGRpci9zcGFjZXMgaW4gZmlsZSIgXAorCSAgICAgICLDoXJ2w616dMWxcsWRL9Ch0LDQudC9INGP0LLQsNCw0YDQsNC5IiAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXICYmCisJICAgbWtkaXIgQlNcXGRpciBcCisJCSAnJCdzZXBhcmF0b3JzXDAzNGluXDAzNWRpcicnICYmCisJICAgdG91Y2ggQlNcXGRpci9EUVwiZmlsZSBcCisJCSAnJCdzZXBhcmF0b3JzXDAzNGluXDAzNWRpci9zZXBcMDM2aW5cMDM3ZmlsZScnCisJdGhlbgorCQl0ZXN0X3NldF9wcmVyZXEgRlVOTklFUk5BTUVTCisJZWxzZQorCQlybSAtcmYgQlNcXGRpciAnJCdzZXBhcmF0b3JzXDAzNGluXDAzNWRpcicnCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAtIHNpbXBsZScgJworCXRlc3RfcGF0aF9jb21wbGV0aW9uIHNpbXBsZSBzaW1wbGUtZGlyICYmICAjIEJhc2ggaXMgc3VwcG9zZWQgdG8KKwkJCQkJCSAgICMgYWRkIHRoZSB0cmFpbGluZyAvLgorCXRlc3RfcGF0aF9jb21wbGV0aW9uIHNpbXBsZS1kaXIvc2ltcGxlIHNpbXBsZS1kaXIvc2ltcGxlLWZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ19fZ2l0X2NvbXBsZXRlX2luZGV4X2ZpbGUgLSBlc2NhcGVkIGNoYXJhY3RlcnMgb24gY21kbGluZScgJworCXRlc3RfcGF0aF9jb21wbGV0aW9uIHNwYWMgInNwYWNlcyBpbiBkaXIiICYmICAjIEJhc2ggd2lsbCB0dXJuIHRoaXMKKwkJCQkJCSAgICAgICMgaW50byAic3BhY2VzXCBpblwgZGlyIgorCXRlc3RfcGF0aF9jb21wbGV0aW9uICJzcGFjZXNcXCBpIiBcCisJCQkgICAgICJzcGFjZXMgaW4gZGlyIiAmJgorCXRlc3RfcGF0aF9jb21wbGV0aW9uICJzcGFjZXNcXCBpblxcIGRpci9zIiBcCisJCQkgICAgICJzcGFjZXMgaW4gZGlyL3NwYWNlcyBpbiBmaWxlIiAmJgorCXRlc3RfcGF0aF9jb21wbGV0aW9uICJzcGFjZXNcXCBpblxcIGRpci9zcGFjZXNcXCBpIiBcCisJCQkgICAgICJzcGFjZXMgaW4gZGlyL3NwYWNlcyBpbiBmaWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAtIHF1b3RlZCBjaGFyYWN0ZXJzIG9uIGNtZGxpbmUnICcKKwkjIFRlc3Rpbmcgd2l0aCBhbiBvcGVuaW5nIGJ1dCB3aXRob3V0IGEgY29ycmVzcG9uZGluZyBjbG9zaW5nCisJIyBkb3VibGUgcXVvdGUgaXMgaW1wb3J0YW50LgorCXRlc3RfcGF0aF9jb21wbGV0aW9uIFwic3BhYyAic3BhY2VzIGluIGRpciIgJiYKKwl0ZXN0X3BhdGhfY29tcGxldGlvbiAiXCJzcGFjZXMgaSIgXAorCQkJICAgICAic3BhY2VzIGluIGRpciIgJiYKKwl0ZXN0X3BhdGhfY29tcGxldGlvbiAiXCJzcGFjZXMgaW4gZGlyL3MiIFwKKwkJCSAgICAgInNwYWNlcyBpbiBkaXIvc3BhY2VzIGluIGZpbGUiICYmCisJdGVzdF9wYXRoX2NvbXBsZXRpb24gIlwic3BhY2VzIGluIGRpci9zcGFjZXMgaSIgXAorCQkJICAgICAic3BhY2VzIGluIGRpci9zcGFjZXMgaW4gZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAtIFVURi04IGluIGxzLWZpbGVzIG91dHB1dCcgJworCXRlc3RfcGF0aF9jb21wbGV0aW9uIMOhIMOhcnbDrXp0xbFyxZEgJiYKKwl0ZXN0X3BhdGhfY29tcGxldGlvbiDDoXJ2w616dMWxcsWRL9ChICLDoXJ2w616dMWxcsWRL9Ch0LDQudC9INGP0LLQsNCw0YDQsNC5IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZVTk5JRVJOQU1FUyBcCisgICAgJ19fZ2l0X2NvbXBsZXRlX2luZGV4X2ZpbGUgLSBDLXN0eWxlIGVzY2FwZXMgaW4gbHMtZmlsZXMgb3V0cHV0JyAnCisJdGVzdF9wYXRoX2NvbXBsZXRpb24gQlMgXAorCQkJICAgICBCU1xcZGlyICYmCisJdGVzdF9wYXRoX2NvbXBsZXRpb24gQlNcXFxcZCBcCisJCQkgICAgIEJTXFxkaXIgJiYKKwl0ZXN0X3BhdGhfY29tcGxldGlvbiBCU1xcXFxkaXIvRFEgXAorCQkJICAgICBCU1xcZGlyL0RRXCJmaWxlICYmCisJdGVzdF9wYXRoX2NvbXBsZXRpb24gQlNcXFxcZGlyL0RRXFxcImYgXAorCQkJICAgICBCU1xcZGlyL0RRXCJmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRlVOTklFUk5BTUVTIFwKKyAgICAnX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAtIFxubm4tZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGxzLWZpbGVzIG91dHB1dCcgJworCXRlc3RfcGF0aF9jb21wbGV0aW9uIHNlcCAnJCdzZXBhcmF0b3JzXDAzNGluXDAzNWRpcicnICYmCisJdGVzdF9wYXRoX2NvbXBsZXRpb24gJyQnc2VwYXJhdG9yc1wwMzRpJycgXAorCQkJICAgICAnJCdzZXBhcmF0b3JzXDAzNGluXDAzNWRpcicnICYmCisJdGVzdF9wYXRoX2NvbXBsZXRpb24gJyQnc2VwYXJhdG9yc1wwMzRpblwwMzVkaXIvc2VwJycgXAorCQkJICAgICAnJCdzZXBhcmF0b3JzXDAzNGluXDAzNWRpci9zZXBcMDM2aW5cMDM3ZmlsZScnICYmCisJdGVzdF9wYXRoX2NvbXBsZXRpb24gJyQnc2VwYXJhdG9yc1wwMzRpblwwMzVkaXIvc2VwXDAzNmknJyBcCisJCQkgICAgICckJ3NlcGFyYXRvcnNcMDM0aW5cMDM1ZGlyL3NlcFwwMzZpblwwMzdmaWxlJycKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGVU5OWU5BTUVTIFwKKyAgICAnX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAtIHJlbW92aW5nIHJlcGVhdGVkIHF1b3RlZCBwYXRoIGNvbXBvbmVudHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXIgcmVwZWF0ZWQtcXVvdGVkICYmCisJbWtkaXIgcmVwZWF0ZWQtcXVvdGVkICYmICAgICAgIyBBIGRpcmVjdG9yeSB3aG9zZSBuYW1lIGluIGl0c2VsZgorCQkJCSAgICAgICMgd291bGQgbm90IGJlIHF1b3RlZCAuLi4KKwk+cmVwZWF0ZWQtcXVvdGVkLzAtZmlsZSAmJgorCT5yZXBlYXRlZC1xdW90ZWQvMVwiZmlsZSAmJiAgICMgLi4uIGJ1dCBoZXJlIHRoZSBmaWxlIG1ha2VzIHRoZQorCQkJCSAgICAgICMgZGlybmFtZSBxdW90ZWQgLi4uCisJPnJlcGVhdGVkLXF1b3RlZC8yLWZpbGUgJiYKKwk+cmVwZWF0ZWQtcXVvdGVkLzNcImZpbGUgJiYgICAjIC4uLiBhbmQgaGVyZSwgdG9vLgorCisJIyBTdGlsbCwgd2Ugc2hvbGQgb25seSBsaXN0IHRoZSBkaXJlY3RvcnkgbmFtZSBvbmx5IG9uY2UuCisJdGVzdF9wYXRoX2NvbXBsZXRpb24gcmVwZWF0ZWQgcmVwZWF0ZWQtcXVvdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RlYXJkb3duIGFmdGVyIHBhdGggY29tcGxldGlvbiB0ZXN0cycgJworCXJtIC1yZiBzaW1wbGUtZGlyICJzcGFjZXMgaW4gZGlyIiDDoXJ2w616dMWxcsWRIFwKKwkgICAgICAgQlNcXGRpciAnJCdzZXBhcmF0b3JzXDAzNGluXDAzNWRpcicnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X2ZpbmRfb25fY21kbGluZSAtIHNpbmdsZSBtYXRjaCcgJworCWVjaG8gbGlzdCA+ZXhwZWN0ICYmCisJKAorCQl3b3Jkcz0oZ2l0IGNvbW1hbmQgLS1vcHQgbGlzdCkgJiYKKwkJY3dvcmQ9JHsjd29yZHNbQF19ICYmCisJCV9fZ2l0X2ZpbmRfb25fY21kbGluZSAiYWRkIGxpc3QgcmVtb3ZlIiA+YWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfZmluZF9vbl9jbWRsaW5lIC0gbXVsdGlwbGUgbWF0Y2hlcycgJworCWVjaG8gcmVtb3ZlID5leHBlY3QgJiYKKwkoCisJCXdvcmRzPShnaXQgY29tbWFuZCAtbyAtLW9wdCByZW1vdmUgbGlzdCBhZGQpICYmCisJCWN3b3JkPSR7I3dvcmRzW0BdfSAmJgorCQlfX2dpdF9maW5kX29uX2NtZGxpbmUgImFkZCBsaXN0IHJlbW92ZSIgPmFjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X2ZpbmRfb25fY21kbGluZSAtIG5vIG1hdGNoJyAnCisJKAorCQl3b3Jkcz0oZ2l0IGNvbW1hbmQgLS1vcHQgYnJhbmNoKSAmJgorCQljd29yZD0keyN3b3Jkc1tAXX0gJiYKKwkJX19naXRfZmluZF9vbl9jbWRsaW5lICJhZGQgbGlzdCByZW1vdmUiID5hY3R1YWwKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9maW5kX29uX2NtZGxpbmUgLSBzaW5nbGUgbWF0Y2ggd2l0aCBpbmRleCcgJworCWVjaG8gIjMgbGlzdCIgPmV4cGVjdCAmJgorCSgKKwkJd29yZHM9KGdpdCBjb21tYW5kIC0tb3B0IGxpc3QpICYmCisJCWN3b3JkPSR7I3dvcmRzW0BdfSAmJgorCQlfX2dpdF9maW5kX29uX2NtZGxpbmUgLS1zaG93LWlkeCAiYWRkIGxpc3QgcmVtb3ZlIiA+YWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfZmluZF9vbl9jbWRsaW5lIC0gbXVsdGlwbGUgbWF0Y2hlcyB3aXRoIGluZGV4JyAnCisJZWNobyAiNCByZW1vdmUiID5leHBlY3QgJiYKKwkoCisJCXdvcmRzPShnaXQgY29tbWFuZCAtbyAtLW9wdCByZW1vdmUgbGlzdCBhZGQpICYmCisJCWN3b3JkPSR7I3dvcmRzW0BdfSAmJgorCQlfX2dpdF9maW5kX29uX2NtZGxpbmUgLS1zaG93LWlkeCAiYWRkIGxpc3QgcmVtb3ZlIiA+YWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfZmluZF9vbl9jbWRsaW5lIC0gbm8gbWF0Y2ggd2l0aCBpbmRleCcgJworCSgKKwkJd29yZHM9KGdpdCBjb21tYW5kIC0tb3B0IGJyYW5jaCkgJiYKKwkJY3dvcmQ9JHsjd29yZHNbQF19ICYmCisJCV9fZ2l0X2ZpbmRfb25fY21kbGluZSAtLXNob3ctaWR4ICJhZGQgbGlzdCByZW1vdmUiID5hY3R1YWwKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9nZXRfY29uZmlnX3ZhcmlhYmxlcycgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCW5hbWUtMQorCW5hbWUtMgorCUVPRgorCXRlc3RfY29uZmlnIGludGVyZXN0aW5nLm5hbWUtMSBnb29kICYmCisJdGVzdF9jb25maWcgaW50ZXJlc3RpbmcubmFtZS0yIGdvb2QgJiYKKwl0ZXN0X2NvbmZpZyBzdWJzZWN0aW9uLmludGVyZXN0aW5nLm5hbWUtMyBiYWQgJiYKKwlfX2dpdF9nZXRfY29uZmlnX3ZhcmlhYmxlcyBpbnRlcmVzdGluZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9wcmV0dHlfYWxpYXNlcycgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWF1dGhvcgorCWhhc2gKKwlFT0YKKwl0ZXN0X2NvbmZpZyBwcmV0dHkuYXV0aG9yICIlYW4gJWFlIiAmJgorCXRlc3RfY29uZmlnIHByZXR0eS5oYXNoICVIICYmCisJX19naXRfcHJldHR5X2FsaWFzZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMnICcKKwlydW5fY29tcGxldGlvbiAiZ2l0ICIgJiYKKwkjIGJ1aWx0LWluCisJZ3JlcCAtcSAiXmFkZCBcJCIgb3V0ICYmCisJIyBzY3JpcHQKKwlncmVwIC1xICJecmViYXNlIFwkIiBvdXQgJiYKKwkjIHBsdW1iaW5nCisJISBncmVwIC1xICJebHMtZmlsZXMgXCQiIG91dCAmJgorCisJcnVuX2NvbXBsZXRpb24gImdpdCByIiAmJgorCSEgZ3JlcCAtcSAtdiAiXnIiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkb3VibGUgZGFzaCAiZ2l0IiBpdHNlbGYnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLSIgPDwtXEVPRgorCS0tcGFnaW5hdGUgWgorCS0tbm8tcGFnZXIgWgorCS0tZ2l0LWRpcj0KKwktLWJhcmUgWgorCS0tdmVyc2lvbiBaCisJLS1leGVjLXBhdGggWgorCS0tZXhlYy1wYXRoPQorCS0taHRtbC1wYXRoIFoKKwktLW1hbi1wYXRoIFoKKwktLWluZm8tcGF0aCBaCisJLS13b3JrLXRyZWU9CisJLS1uYW1lc3BhY2U9CisJLS1uby1yZXBsYWNlLW9iamVjdHMgWgorCS0taGVscCBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvdWJsZSBkYXNoICJnaXQgY2hlY2tvdXQiJyAnCisJdGVzdF9jb21wbGV0aW9uICJnaXQgY2hlY2tvdXQgLS0iIDw8LVxFT0YKKwktLXF1aWV0IFoKKwktLWRldGFjaCBaCisJLS10cmFjayBaCisJLS1vcnBoYW49WgorCS0tb3VycyBaCisJLS10aGVpcnMgWgorCS0tbWVyZ2UgWgorCS0tY29uZmxpY3Q9WgorCS0tcGF0Y2ggWgorCS0taWdub3JlLXNraXAtd29ya3RyZWUtYml0cyBaCisJLS1pZ25vcmUtb3RoZXItd29ya3RyZWVzIFoKKwktLXJlY3Vyc2Utc3VibW9kdWxlcyBaCisJLS1wcm9ncmVzcyBaCisJLS1ndWVzcyBaCisJLS1uby1ndWVzcyBaCisJLS1uby0uLi4gWgorCS0tb3ZlcmxheSBaCisJLS1wYXRoc3BlYy1maWxlLW51bCBaCisJLS1wYXRoc3BlYy1mcm9tLWZpbGU9WgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZW5lcmFsIG9wdGlvbnMnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLXZlciIgIi0tdmVyc2lvbiAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1oZWwiICItLWhlbHAgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tZXhlIiA8PC1cRU9GICYmCisJLS1leGVjLXBhdGggWgorCS0tZXhlYy1wYXRoPQorCUVPRgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0taHRtIiAiLS1odG1sLXBhdGggIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tcGFnIiAiLS1wYWdpbmF0ZSAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1uby1wIiAiLS1uby1wYWdlciAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1naXQiICItLWdpdC1kaXI9IiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0td29yIiAiLS13b3JrLXRyZWU9IiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tbmFtIiAiLS1uYW1lc3BhY2U9IiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tYmFyIiAiLS1iYXJlICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLWluZiIgIi0taW5mby1wYXRoICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLW5vLXIiICItLW5vLXJlcGxhY2Utb2JqZWN0cyAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dlbmVyYWwgb3B0aW9ucyBwbHVzIGNvbW1hbmQnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLXZlcnNpb24gY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1wYWdpbmF0ZSBjaGVjayIgImNoZWNrb3V0ICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLWdpdC1kaXI9Zm9vIGNoZWNrIiAiY2hlY2tvdXQgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tYmFyZSBjaGVjayIgImNoZWNrb3V0ICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLWV4ZWMtcGF0aD1mb28gY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1odG1sLXBhdGggY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1uby1wYWdlciBjaGVjayIgImNoZWNrb3V0ICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLXdvcmstdHJlZT1mb28gY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1uYW1lc3BhY2U9Zm9vIGNoZWNrIiAiY2hlY2tvdXQgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tcGFnaW5hdGUgY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1pbmZvLXBhdGggY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1naXQtZGlyIHNvbWUvcGF0aCBjaGVjayIgImNoZWNrb3V0ICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtYyBjb25mLnZhcj12YWx1ZSBjaGVjayIgImNoZWNrb3V0ICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtQyBzb21lL3BhdGggY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS13b3JrLXRyZWUgc29tZS9wYXRoIGNoZWNrIiAiY2hlY2tvdXQgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tbmFtZXNwYWNlIG5hbWUvc3BhY2UgY2hlY2siICJjaGVja291dCAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtLWhlbHAgY29tcGxldGlvbicgJworCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0taGVscCBhZCIgImFkZCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1oZWxwIGNvcmUiICJjb3JlLXR1dG9yaWFsICIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGxldGlvbi5jb21tYW5kcyByZW1vdmVzIG11bHRpcGxlIGNvbW1hbmRzJyAnCisJdGVzdF9jb25maWcgY29tcGxldGlvbi5jb21tYW5kcyAiLWNoZXJyeSAtbWVyZ2V0b29sIiAmJgorCWdpdCAtLWxpc3QtY21kcz1saXN0LW1haW5wb3JjZWxhaW4sbGlzdC1jb21wbGV0ZSxjb25maWcgPm91dCAmJgorCSEgZ3JlcCAtRSAiXihjaGVycnl8bWVyZ2V0b29sKSQiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgaW50ZWdyYXRpb24gdGVzdHMnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUxICYmCisJZWNobyBtb3JlID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWdpdCBicmFuY2ggbXlicmFuY2ggJiYKKwlnaXQgdGFnIG15dGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGNvbXBsZXRlcyByZWYgbmFtZXMnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBjaGVja291dCBtIiA8PC1cRU9GCisJbWFzdGVyIFoKKwlteWJyYW5jaCBaCisJbXl0YWcgWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLUMgPHBhdGg+IGNoZWNrb3V0IHVzZXMgdGhlIHJpZ2h0IHJlcG8nICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtQyBzdWJkaXIgLUMgc3Vic3ViZGlyIC1DIC4uIC1DIC4uL290aGVycmVwbyBjaGVja291dCBiIiA8PC1cRU9GCisJYnJhbmNoLWluLW90aGVyIFoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBjb21wbGV0ZXMgYWxsIHJlZnMnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBzaG93IG0iIDw8LVxFT0YKKwltYXN0ZXIgWgorCW15YnJhbmNoIFoKKwlteXRhZyBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzxyZWY+OiBjb21wbGV0ZXMgcGF0aHMnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBzaG93IG15dGFnOmYiIDw8LVxFT0YKKwlmaWxlMVoKKwlmaWxlMloKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGxldGUgdHJlZSBmaWxlbmFtZSB3aXRoIHNwYWNlcycgJworCWVjaG8gY29udGVudCA+Im5hbWUgd2l0aCBzcGFjZXMiICYmCisJZ2l0IGFkZCAibmFtZSB3aXRoIHNwYWNlcyIgJiYKKwlnaXQgY29tbWl0IC1tIHNwYWNlcyAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IHNob3cgSEVBRDpuYW0iIDw8LVxFT0YKKwluYW1lIHdpdGggc3BhY2VzWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wbGV0ZSB0cmVlIGZpbGVuYW1lIHdpdGggbWV0YWNoYXJhY3RlcnMnICcKKwllY2hvIGNvbnRlbnQgPiJuYW1lIHdpdGggXCR7bWV0YX0iICYmCisJZ2l0IGFkZCAibmFtZSB3aXRoIFwke21ldGF9IiAmJgorCWdpdCBjb21taXQgLW0gbWV0YSAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IHNob3cgSEVBRDpuYW0iIDw8LVxFT0YKKwluYW1lIHdpdGggJHttZXRhfVoKKwluYW1lIHdpdGggc3BhY2VzWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NlbmQtZW1haWwnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBzZW5kLWVtYWlsIC0tY292IiA8PC1cRU9GICYmCisJLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uPVoKKwktLWNvdmVyLWxldHRlciBaCisJRU9GCisJdGVzdF9jb21wbGV0aW9uICJnaXQgc2VuZC1lbWFpbCBtYSIgIm1hc3RlciAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXBsZXRlIGZpbGVzJyAnCisJZ2l0IGluaXQgdG1wICYmIGNkIHRtcCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2QgLi4gJiYgcm0gLXJmIHRtcCIgJiYKKworCWVjaG8gImV4cGVjdGVkIiA+IC5naXRpZ25vcmUgJiYKKwllY2hvICJvdXQiID4+IC5naXRpZ25vcmUgJiYKKwllY2hvICJvdXRfc29ydGVkIiA+PiAuZ2l0aWdub3JlICYmCisKKwlnaXQgYWRkIC5naXRpZ25vcmUgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBjb21taXQgIiAiLmdpdGlnbm9yZSIgJiYKKworCWdpdCBjb21taXQgLW0gaWdub3JlICYmCisKKwl0b3VjaCBuZXcgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBhZGQgIiAibmV3IiAmJgorCisJZ2l0IGFkZCBuZXcgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG5ldyAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IGFkZCAiICIiICYmCisKKwlnaXQgbXYgbmV3IG1vZGlmaWVkICYmCisJZWNobyBtb2RpZnkgPiBtb2RpZmllZCAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IGFkZCAiICJtb2RpZmllZCIgJiYKKworCW1rZGlyIC1wIHNvbWUvZGVlcCAmJgorCXRvdWNoIHNvbWUvZGVlcC9wYXRoICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgYWRkIHNvbWUvIiAic29tZS9kZWVwIiAmJgorCWdpdCBjbGVhbiAtZiBzb21lICYmCisKKwl0b3VjaCB1bnRyYWNrZWQgJiYKKworCTogVE9ETyAuZ2l0aWdub3JlIHNob3VsZCBub3QgYmUgaGVyZSAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IHJtICIgPDwtXEVPRiAmJgorCS5naXRpZ25vcmUKKwltb2RpZmllZAorCUVPRgorCisJdGVzdF9jb21wbGV0aW9uICJnaXQgY2xlYW4gIiAidW50cmFja2VkIiAmJgorCisJOiBUT0RPIC5naXRpZ25vcmUgc2hvdWxkIG5vdCBiZSBoZXJlICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgbXYgIiA8PC1cRU9GICYmCisJLmdpdGlnbm9yZQorCW1vZGlmaWVkCisJRU9GCisKKwlta2RpciBkaXIgJiYKKwl0b3VjaCBkaXIvZmlsZS1pbi1kaXIgJiYKKwlnaXQgYWRkIGRpci9maWxlLWluLWRpciAmJgorCWdpdCBjb21taXQgLW0gZGlyICYmCisKKwlta2RpciB1bnRyYWNrZWQtZGlyICYmCisKKwk6IFRPRE8gLmdpdGlnbm9yZSBzaG91bGQgbm90IGJlIGhlcmUgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBtdiBtb2RpZmllZCAiIDw8LVxFT0YgJiYKKwkuZ2l0aWdub3JlCisJZGlyCisJbW9kaWZpZWQKKwl1bnRyYWNrZWQKKwl1bnRyYWNrZWQtZGlyCisJRU9GCisKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBjb21taXQgIiAibW9kaWZpZWQiICYmCisKKwk6IFRPRE8gLmdpdGlnbm9yZSBzaG91bGQgbm90IGJlIGhlcmUgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBscy1maWxlcyAiIDw8LVxFT0YgJiYKKwkuZ2l0aWdub3JlCisJZGlyCisJbW9kaWZpZWQKKwlFT0YKKworCXRvdWNoIG1vbWlmaWVkICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgYWRkIG1vbSIgIm1vbWlmaWVkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21wbGV0aW9uIHVzZXMgPGNtZD4gY29tcGxldGlvbiBmb3IgYWxpYXM6ICFzaCAtYyAnZ2l0IDxjbWQ+IC4uLiciICcKKwl0ZXN0X2NvbmZpZyBhbGlhcy5jbyAiIXNoIC1jICciJyInZ2l0IGNoZWNrb3V0IC4uLiciJyInIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IGNvIG0iIDw8LVxFT0YKKwltYXN0ZXIgWgorCW15YnJhbmNoIFoKKwlteXRhZyBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXBsZXRpb24gdXNlcyA8Y21kPiBjb21wbGV0aW9uIGZvciBhbGlhczogIWYgKCkgeyBWQVI9dmFsIGdpdCA8Y21kPiAuLi4gfScgJworCXRlc3RfY29uZmlnIGFsaWFzLmNvICIhZiAoKSB7IFZBUj12YWwgZ2l0IGNoZWNrb3V0IC4uLiA7IH0gZiIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBjbyBtIiA8PC1cRU9GCisJbWFzdGVyIFoKKwlteWJyYW5jaCBaCisJbXl0YWcgWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wbGV0aW9uIHVzZWQgPGNtZD4gY29tcGxldGlvbiBmb3IgYWxpYXM6ICFmKCkgeyA6IGdpdCA8Y21kPiA7IC4uLiB9JyAnCisJdGVzdF9jb25maWcgYWxpYXMuY28gIiFmKCkgeyA6IGdpdCBjaGVja291dCA7IGlmIC4uLiB9IGYiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgY28gbSIgPDwtXEVPRgorCW1hc3RlciBaCisJbXlicmFuY2ggWgorCW15dGFnIFoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGxldGlvbiB3aXRob3V0IGV4cGxpY2l0IF9naXRfeHh4IGZ1bmN0aW9uJyAnCisJdGVzdF9jb21wbGV0aW9uICJnaXQgdmVyc2lvbiAtLSIgPDwtXEVPRgorCS0tYnVpbGQtb3B0aW9ucyBaCisJLS1uby1idWlsZC1vcHRpb25zIFoKKwlFT0YKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY29tcGxldGUgd2l0aCB0aWxkZSBleHBhbnNpb24nICcKKwlnaXQgaW5pdCB0bXAgJiYgY2QgdG1wICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjZCAuLiAmJiBybSAtcmYgdG1wIiAmJgorCisJdG91Y2ggfi90bXAvZmlsZSAmJgorCisJdGVzdF9jb21wbGV0aW9uICJnaXQgYWRkIH4vdG1wLyIgIn4vdG1wL2ZpbGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG90aGVyIHJlbW90ZSBmb3IgcmVtb3RlIHJlZmVyZW5jZSBjb21wbGV0aW9uJyAnCisJZ2l0IHJlbW90ZSBhZGQgb3RoZXIgb3RoZXJyZXBvICYmCisJZ2l0IGZldGNoIG90aGVyCisnCisKK2ZvciBmbGFnIGluIC1kIC0tZGVsZXRlCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIl9fZ2l0X2NvbXBsZXRlX3JlbW90ZV9vcl9yZWZzcGVjIC0gcHVzaCAkZmxhZyBvdGhlciIgJworCQlzZWQgLWUgInMvWiQvLyIgPmV4cGVjdGVkIDw8LUVPRiAmJgorCQltYXN0ZXItaW4tb3RoZXIgWgorCQlFT0YKKwkJKAorCQkJd29yZHM9KGdpdCBwdXNoICckZmxhZycgb3RoZXIgbWEpICYmCisJCQljd29yZD0keyN3b3Jkc1tAXX0gY3VyPSR7d29yZHNbY3dvcmQtMV19ICYmCisJCQlfX2dpdF9jb21wbGV0ZV9yZW1vdGVfb3JfcmVmc3BlYyAmJgorCQkJcHJpbnRfY29tcAorCQkpICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIG91dAorCScKKworCXRlc3RfZXhwZWN0X2ZhaWx1cmUgIl9fZ2l0X2NvbXBsZXRlX3JlbW90ZV9vcl9yZWZzcGVjIC0gcHVzaCBvdGhlciAkZmxhZyIgJworCQlzZWQgLWUgInMvWiQvLyIgPmV4cGVjdGVkIDw8LUVPRiAmJgorCQltYXN0ZXItaW4tb3RoZXIgWgorCQlFT0YKKwkJKAorCQkJd29yZHM9KGdpdCBwdXNoIG90aGVyICckZmxhZycgbWEpICYmCisJCQljd29yZD0keyN3b3Jkc1tAXX0gY3VyPSR7d29yZHNbY3dvcmQtMV19ICYmCisJCQlfX2dpdF9jb21wbGV0ZV9yZW1vdGVfb3JfcmVmc3BlYyAmJgorCQkJcHJpbnRfY29tcAorCQkpICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIG91dAorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbmZpZyAtIHNlY3Rpb24nICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBjb25maWcgYnIiIDw8LVxFT0YKKwlicmFuY2guWgorCWJyb3dzZXIuWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29uZmlnIC0gdmFyaWFibGUgbmFtZScgJworCXRlc3RfY29tcGxldGlvbiAiZ2l0IGNvbmZpZyBsb2cuZCIgPDwtXEVPRgorCWxvZy5kYXRlIFoKKwlsb2cuZGVjb3JhdGUgWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29uZmlnIC0gdmFsdWUnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBjb25maWcgY29sb3IucGFnZXIgIiA8PC1cRU9GCisJZmFsc2UgWgorCXRydWUgWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWMgLSBzZWN0aW9uJyAnCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLWMgYnIiIDw8LVxFT0YKKwlicmFuY2guWgorCWJyb3dzZXIuWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWMgLSB2YXJpYWJsZSBuYW1lJyAnCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLWMgbG9nLmQiIDw8LVxFT0YKKwlsb2cuZGF0ZT1aCisJbG9nLmRlY29yYXRlPVoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1jIC0gdmFsdWUnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtYyBjb2xvci5wYWdlcj0iIDw8LVxFT0YKKwlmYWxzZSBaCisJdHJ1ZSBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSAtLWNvbmZpZz0gLSBzZWN0aW9uJyAnCisJdGVzdF9jb21wbGV0aW9uICJnaXQgY2xvbmUgLS1jb25maWc9YnIiIDw8LVxFT0YKKwlicmFuY2guWgorCWJyb3dzZXIuWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xvbmUgLS1jb25maWc9IC0gdmFyaWFibGUgbmFtZScgJworCXRlc3RfY29tcGxldGlvbiAiZ2l0IGNsb25lIC0tY29uZmlnPWxvZy5kIiA8PC1cRU9GCisJbG9nLmRhdGU9WgorCWxvZy5kZWNvcmF0ZT1aCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSAtLWNvbmZpZz0gLSB2YWx1ZScgJworCXRlc3RfY29tcGxldGlvbiAiZ2l0IGNsb25lIC0tY29uZmlnPWNvbG9yLnBhZ2VyPSIgPDwtXEVPRgorCWZhbHNlIFoKKwl0cnVlIFoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc291cmNpbmcgdGhlIGNvbXBsZXRpb24gc2NyaXB0IGNsZWFycyBjYWNoZWQgY29tbWFuZHMnICcKKwlfX2dpdF9jb21wdXRlX2FsbF9jb21tYW5kcyAmJgorCXZlcmJvc2UgdGVzdCAtbiAiJF9fZ2l0X2FsbF9jb21tYW5kcyIgJiYKKwkuICIkR0lUX0JVSUxEX0RJUi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaCIgJiYKKwl2ZXJib3NlIHRlc3QgLXogIiRfX2dpdF9hbGxfY29tbWFuZHMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NvdXJjaW5nIHRoZSBjb21wbGV0aW9uIHNjcmlwdCBjbGVhcnMgY2FjaGVkIG1lcmdlIHN0cmF0ZWdpZXMnICcKKwlHSVRfVEVTVF9HRVRURVhUX1BPSVNPTj1mYWxzZSAmJgorCV9fZ2l0X2NvbXB1dGVfbWVyZ2Vfc3RyYXRlZ2llcyAmJgorCXZlcmJvc2UgdGVzdCAtbiAiJF9fZ2l0X21lcmdlX3N0cmF0ZWdpZXMiICYmCisJLiAiJEdJVF9CVUlMRF9ESVIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2giICYmCisJdmVyYm9zZSB0ZXN0IC16ICIkX19naXRfbWVyZ2Vfc3RyYXRlZ2llcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc291cmNpbmcgdGhlIGNvbXBsZXRpb24gc2NyaXB0IGNsZWFycyBjYWNoZWQgLS1vcHRpb25zJyAnCisJX19naXRjb21wX2J1aWx0aW4gY2hlY2tvdXQgJiYKKwl2ZXJib3NlIHRlc3QgLW4gIiRfX2dpdGNvbXBfYnVpbHRpbl9jaGVja291dCIgJiYKKwlfX2dpdGNvbXBfYnVpbHRpbiBub3Rlc19lZGl0ICYmCisJdmVyYm9zZSB0ZXN0IC1uICIkX19naXRjb21wX2J1aWx0aW5fbm90ZXNfZWRpdCIgJiYKKwkuICIkR0lUX0JVSUxEX0RJUi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaCIgJiYKKwl2ZXJib3NlIHRlc3QgLXogIiRfX2dpdGNvbXBfYnVpbHRpbl9jaGVja291dCIgJiYKKwl2ZXJib3NlIHRlc3QgLXogIiRfX2dpdGNvbXBfYnVpbHRpbl9ub3Rlc19lZGl0IgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk5MDMtYmFzaC1wcm9tcHQuc2ggYi90L3Q5OTAzLWJhc2gtcHJvbXB0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFiNWRhMmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5OTAzLWJhc2gtcHJvbXB0LnNoCkBAIC0wLDAgKzEsNzU5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyIFNaRURFUiBHw6Fib3IKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQtc3BlY2lmaWMgYmFzaCBwcm9tcHQgZnVuY3Rpb25zJworCisuIC4vbGliLWJhc2guc2gKKworLiAiJEdJVF9CVUlMRF9ESVIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1wcm9tcHQuc2giCisKK2FjdHVhbD0iJFRSQVNIX0RJUkVDVE9SWS9hY3R1YWwiCitjX3JlZD0nXFxbXFxlWzMxbVxcXScKK2NfZ3JlZW49J1xcW1xcZVszMm1cXF0nCitjX2xibHVlPSdcXFtcXGVbMTszNG1cXF0nCitjX2NsZWFyPSdcXFtcXGVbMG1cXF0nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBwcm9tcHQgdGVzdHMnICcKKwlnaXQgaW5pdCBvdGhlcnJlcG8gJiYKKwllY2hvIDEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIC1hIC1tIG1zZzEgdDEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYjEgJiYKKwllY2hvIDIgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJzZWNvbmQgYjEiIGZpbGUgJiYKKwllY2hvIDMgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJ0aGlyZCBiMSIgZmlsZSAmJgorCWdpdCB0YWcgLWEgLW0gbXNnMiB0MiAmJgorCWdpdCBjaGVja291dCAtYiBiMiBtYXN0ZXIgJiYKKwllY2hvIDAgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJzZWNvbmQgYjIiIGZpbGUgJiYKKwllY2hvIDAwID5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYW5vdGhlciBiMiIgZmlsZSAmJgorCWVjaG8gMDAwID5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAieWV0IGFub3RoZXIgYjIiIGZpbGUgJiYKKwlta2RpciBpZ25vcmVkX2RpciAmJgorCWVjaG8gImlnbm9yZWRfZGlyLyIgPj4uZ2l0aWdub3JlICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBicmFuY2ggbmFtZScgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwlfX2dpdF9wczEgPiIkYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdwcm9tcHQgLSBicmFuY2ggbmFtZSAtIHN5bWxpbmsgc3ltcmVmJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLnByZWZlclN5bWxpbmtSZWZzIHRydWUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gdW5ib3JuIGJyYW5jaCcgJworCXByaW50ZiAiICh1bmJvcm4pIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gdW5ib3JuICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgIUZVTk5ZTkFNRVM7IHRoZW4KKwlzYXkgJ1lvdXIgZmlsZXN5c3RlbSBkb2VzIG5vdCBhbGxvdyBuZXdsaW5lcyBpbiBmaWxlbmFtZXMuJworZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGVU5OWU5BTUVTICdwcm9tcHQgLSB3aXRoIG5ld2xpbmUgaW4gcGF0aCcgJworICAgIHJlcG9fd2l0aF9uZXdsaW5lPSJyZXBvCit3aXRoCituZXdsaW5lIiAmJgorCW1rZGlyICIkcmVwb193aXRoX25ld2xpbmUiICYmCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCWdpdCBpbml0ICIkcmVwb193aXRoX25ld2xpbmUiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgXCIkcmVwb193aXRoX25ld2xpbmVcIiIgJiYKKwlta2RpciAiJHJlcG9fd2l0aF9uZXdsaW5lIi9zdWJkaXIgJiYKKwkoCisJCWNkICIkcmVwb193aXRoX25ld2xpbmUvc3ViZGlyIiAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGV0YWNoZWQgaGVhZCcgJworCXByaW50ZiAiICgoJXMuLi4pKSIgJChnaXQgbG9nIC0xIC0tZm9ybWF0PSIlaCIgLS1hYmJyZXY9MTMgYjFeKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLmFiYnJldiAxMyAmJgorCWdpdCBjaGVja291dCBiMV4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGVzY3JpYmUgZGV0YWNoZWQgaGVhZCAtIGNvbnRhaW5zJyAnCisJcHJpbnRmICIgKCh0Mn4xKSkiID5leHBlY3RlZCAmJgorCWdpdCBjaGVja291dCBiMV4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJKAorCQlHSVRfUFMxX0RFU0NSSUJFX1NUWUxFPWNvbnRhaW5zICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkZXNjcmliZSBkZXRhY2hlZCBoZWFkIC0gYnJhbmNoJyAnCisJcHJpbnRmICIgKCh0YWdzL3QyfjEpKSIgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrb3V0IGIxXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwkoCisJCUdJVF9QUzFfREVTQ1JJQkVfU1RZTEU9YnJhbmNoICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkZXNjcmliZSBkZXRhY2hlZCBoZWFkIC0gZGVzY3JpYmUnICcKKwlwcmludGYgIiAoKHQxLTEtZyVzKSkiICQoZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJWgiIGIxXikgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrb3V0IGIxXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwkoCisJCUdJVF9QUzFfREVTQ1JJQkVfU1RZTEU9ZGVzY3JpYmUgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRlc2NyaWJlIGRldGFjaGVkIGhlYWQgLSBkZWZhdWx0JyAnCisJcHJpbnRmICIgKCh0MikpIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggYjEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaW5zaWRlIC5naXQgZGlyZWN0b3J5JyAnCisJcHJpbnRmICIgKEdJVF9ESVIhKSIgPmV4cGVjdGVkICYmCisJKAorCQljZCAuZ2l0ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkZWVwIGluc2lkZSAuZ2l0IGRpcmVjdG9yeScgJworCXByaW50ZiAiIChHSVRfRElSISkiID5leHBlY3RlZCAmJgorCSgKKwkJY2QgLmdpdC9vYmplY3RzICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBpbnNpZGUgYmFyZSByZXBvc2l0b3J5JyAnCisJcHJpbnRmICIgKEJBUkU6bWFzdGVyKSIgPmV4cGVjdGVkICYmCisJZ2l0IGluaXQgLS1iYXJlIGJhcmUuZ2l0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgYmFyZS5naXQiICYmCisJKAorCQljZCBiYXJlLmdpdCAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaW50ZXJhY3RpdmUgcmViYXNlJyAnCisJcHJpbnRmICIgKGIxfFJFQkFTRSAyLzMpIiA+ZXhwZWN0ZWQgJiYKKwl3cml0ZV9zY3JpcHQgZmFrZV9lZGl0b3Iuc2ggPDwtXEVPRiAmJgorCQllY2hvICJleGVjIGVjaG8iID4iJDEiCisJCWVjaG8gImVkaXQgJChnaXQgbG9nIC0xIC0tZm9ybWF0PSIlaCIpIiA+PiIkMSIKKwkJZWNobyAiZXhlYyBlY2hvIiA+PiIkMSIKKwlFT0YKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGZha2VfZWRpdG9yLnNoIiAmJgorCXRlc3Rfc2V0X2VkaXRvciAiJFRSQVNIX0RJUkVDVE9SWS9mYWtlX2VkaXRvci5zaCIgJiYKKwlnaXQgY2hlY2tvdXQgYjEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHJlYmFzZSBtZXJnZScgJworCXByaW50ZiAiIChiMnxSRUJBU0UgMS8zKSIgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrb3V0IGIyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1tZXJnZSBiMSBiMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHJlYmFzZSBhbScgJworCXByaW50ZiAiIChiMnxSRUJBU0UgMS8zKSIgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrb3V0IGIyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1hcHBseSBiMSBiMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIG1lcmdlJyAnCisJcHJpbnRmICIgKGIxfE1FUkdJTkcpIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgYjEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGIyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGNoZXJyeS1waWNrJyAnCisJcHJpbnRmICIgKG1hc3RlcnxDSEVSUlktUElDS0lORykiID5leHBlY3RlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBiMSBiMV4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVycnktcGljayAtLWFib3J0IiAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiICYmCisJZ2l0IHJlc2V0IC0tbWVyZ2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIENIRVJSWV9QSUNLX0hFQUQgJiYKKwlfX2dpdF9wczEgPiIkYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSByZXZlcnQnICcKKwlwcmludGYgIiAobWFzdGVyfFJFVkVSVElORykiID5leHBlY3RlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgYjFeIGIxICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmV2ZXJ0IC0tYWJvcnQiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIgJiYKKwlnaXQgcmVzZXQgLS1tZXJnZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgUkVWRVJUX0hFQUQgJiYKKwlfX2dpdF9wczEgPiIkYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiaXNlY3QnICcKKwlwcmludGYgIiAobWFzdGVyfEJJU0VDVElORykiID5leHBlY3RlZCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBiaXNlY3QgcmVzZXQiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGNsZWFuJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gZGlydHkgd29ya3RyZWUnICcKKwlwcmludGYgIiAobWFzdGVyICopIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPmZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBkaXJ0eSBpbmRleCcgJworCXByaW50ZiAiIChtYXN0ZXIgKykiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+ZmlsZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgYWRkIC11ICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBkaXJ0eSBpbmRleCBhbmQgd29ya3RyZWUnICcKKwlwcmludGYgIiAobWFzdGVyICorKSIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkgaW5kZXgiID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBhZGQgLXUgJiYKKwllY2hvICJkaXJ0eSB3b3JrdHJlZSIgPmZpbGUgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIG9ycGhhbiBicmFuY2ggLSBjbGVhbicgJworCXByaW50ZiAiIChvcnBoYW4gIykiID5leHBlY3RlZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gb3JwaGFuICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gb3JwaGFuIGJyYW5jaCAtIGRpcnR5IGluZGV4JyAnCisJcHJpbnRmICIgKG9ycGhhbiArKSIgPmV4cGVjdGVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBvcnBoYW4gJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIG9ycGhhbiBicmFuY2ggLSBkaXJ0eSBpbmRleCBhbmQgd29ya3RyZWUnICcKKwlwcmludGYgIiAob3JwaGFuICorKSIgPmV4cGVjdGVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBvcnBoYW4gJiYKKwk+ZmlsZSAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gc2hlbGwgdmFyaWFibGUgdW5zZXQgd2l0aCBjb25maWcgZGlzYWJsZWQnICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkiID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCXRlc3RfY29uZmlnIGJhc2guc2hvd0RpcnR5U3RhdGUgZmFsc2UgJiYKKwkoCisJCXNhbmVfdW5zZXQgR0lUX1BTMV9TSE9XRElSVFlTVEFURSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIHNoZWxsIHZhcmlhYmxlIHVuc2V0IHdpdGggY29uZmlnIGVuYWJsZWQnICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkiID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCXRlc3RfY29uZmlnIGJhc2guc2hvd0RpcnR5U3RhdGUgdHJ1ZSAmJgorCSgKKwkJc2FuZV91bnNldCBHSVRfUFMxX1NIT1dESVJUWVNUQVRFICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gc2hlbGwgdmFyaWFibGUgc2V0IHdpdGggY29uZmlnIGRpc2FibGVkJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+ZmlsZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwl0ZXN0X2NvbmZpZyBiYXNoLnNob3dEaXJ0eVN0YXRlIGZhbHNlICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBzaGVsbCB2YXJpYWJsZSBzZXQgd2l0aCBjb25maWcgZW5hYmxlZCcgJworCXByaW50ZiAiIChtYXN0ZXIgKikiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+ZmlsZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwl0ZXN0X2NvbmZpZyBiYXNoLnNob3dEaXJ0eVN0YXRlIHRydWUgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIG5vdCBzaG93biBpbnNpZGUgLmdpdCBkaXJlY3RvcnknICcKKwlwcmludGYgIiAoR0lUX0RJUiEpIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPmZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJY2QgLmdpdCAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gc3Rhc2ggc3RhdHVzIGluZGljYXRvciAtIG5vIHN0YXNoJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XU1RBU0hTVEFURT15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBzdGFzaCBzdGF0dXMgaW5kaWNhdG9yIC0gc3Rhc2gnICcKKwlwcmludGYgIiAobWFzdGVyICQpIiA+ZXhwZWN0ZWQgJiYKKwllY2hvIDIgPmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBzdGFzaCBkcm9wIiAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1NUQVNIU1RBVEU9eSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gc3Rhc2ggc3RhdHVzIGluZGljYXRvciAtIG5vdCBzaG93biBpbnNpZGUgLmdpdCBkaXJlY3RvcnknICcKKwlwcmludGYgIiAoR0lUX0RJUiEpIiA+ZXhwZWN0ZWQgJiYKKwllY2hvIDIgPmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBzdGFzaCBkcm9wIiAmJgorCSgKKwkJR0lUX1BTMV9TSE9XU1RBU0hTVEFURT15ICYmCisJCWNkIC5naXQgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVudHJhY2tlZCBmaWxlcyBzdGF0dXMgaW5kaWNhdG9yIC0gbm8gdW50cmFja2VkIGZpbGVzJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVM9eSAmJgorCQljZCBvdGhlcnJlcG8gJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVudHJhY2tlZCBmaWxlcyBzdGF0dXMgaW5kaWNhdG9yIC0gdW50cmFja2VkIGZpbGVzJyAnCisJcHJpbnRmICIgKG1hc3RlciAlJSkiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVM9eSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gdW50cmFja2VkIGZpbGVzIHN0YXR1cyBpbmRpY2F0b3IgLSBlbXB0eSB1bnRyYWNrZWQgZGlyJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCW1rZGlyIG90aGVycmVwby91bnRyYWNrZWQtZGlyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgb3RoZXJyZXBvL3VudHJhY2tlZC1kaXIiICYmCisJKAorCQlHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUz15ICYmCisJCWNkIG90aGVycmVwbyAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gdW50cmFja2VkIGZpbGVzIHN0YXR1cyBpbmRpY2F0b3IgLSBub24tZW1wdHkgdW50cmFja2VkIGRpcicgJworCXByaW50ZiAiIChtYXN0ZXIgJSUpIiA+ZXhwZWN0ZWQgJiYKKwlta2RpciBvdGhlcnJlcG8vdW50cmFja2VkLWRpciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG90aGVycmVwby91bnRyYWNrZWQtZGlyIiAmJgorCT5vdGhlcnJlcG8vdW50cmFja2VkLWRpci91bnRyYWNrZWQtZmlsZSAmJgorCSgKKwkJR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVM9eSAmJgorCQljZCBvdGhlcnJlcG8gJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVudHJhY2tlZCBmaWxlcyBzdGF0dXMgaW5kaWNhdG9yIC0gdW50cmFja2VkIGZpbGVzIG91dHNpZGUgY3dkJyAnCisJcHJpbnRmICIgKG1hc3RlciAlJSkiID5leHBlY3RlZCAmJgorCSgKKwkJbWtkaXIgLXAgaWdub3JlZF9kaXIgJiYKKwkJY2QgaWdub3JlZF9kaXIgJiYKKwkJR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVM9eSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gdW50cmFja2VkIGZpbGVzIHN0YXR1cyBpbmRpY2F0b3IgLSBzaGVsbCB2YXJpYWJsZSB1bnNldCB3aXRoIGNvbmZpZyBkaXNhYmxlZCcgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NvbmZpZyBiYXNoLnNob3dVbnRyYWNrZWRGaWxlcyBmYWxzZSAmJgorCSgKKwkJc2FuZV91bnNldCBHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUyAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gdW50cmFja2VkIGZpbGVzIHN0YXR1cyBpbmRpY2F0b3IgLSBzaGVsbCB2YXJpYWJsZSB1bnNldCB3aXRoIGNvbmZpZyBlbmFibGVkJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCXRlc3RfY29uZmlnIGJhc2guc2hvd1VudHJhY2tlZEZpbGVzIHRydWUgJiYKKwkoCisJCXNhbmVfdW5zZXQgR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVMgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVudHJhY2tlZCBmaWxlcyBzdGF0dXMgaW5kaWNhdG9yIC0gc2hlbGwgdmFyaWFibGUgc2V0IHdpdGggY29uZmlnIGRpc2FibGVkJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCXRlc3RfY29uZmlnIGJhc2guc2hvd1VudHJhY2tlZEZpbGVzIGZhbHNlICYmCisJKAorCQlHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUz15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvciAtIHNoZWxsIHZhcmlhYmxlIHNldCB3aXRoIGNvbmZpZyBlbmFibGVkJyAnCisJcHJpbnRmICIgKG1hc3RlciAlJSkiID5leHBlY3RlZCAmJgorCXRlc3RfY29uZmlnIGJhc2guc2hvd1VudHJhY2tlZEZpbGVzIHRydWUgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVudHJhY2tlZCBmaWxlcyBzdGF0dXMgaW5kaWNhdG9yIC0gbm90IHNob3duIGluc2lkZSAuZ2l0IGRpcmVjdG9yeScgJworCXByaW50ZiAiIChHSVRfRElSISkiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVM9eSAmJgorCQljZCAuZ2l0ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBmb3JtYXQgc3RyaW5nIHN0YXJ0aW5nIHdpdGggZGFzaCcgJworCXByaW50ZiAtLSAiLW1hc3RlciIgPmV4cGVjdGVkICYmCisJX19naXRfcHMxICItJXMiID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gcGMgbW9kZScgJworCXByaW50ZiAiQkVGT1JFOiAoXCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSk6QUZURVJcXG5tYXN0ZXIiID5leHBlY3RlZCAmJgorCSgKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiA+IiRhY3R1YWwiICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSAiJGFjdHVhbCIgJiYKKwkJcHJpbnRmICIlc1xcbiVzIiAiJFBTMSIgIiR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gYmFzaCBjb2xvciBwYyBtb2RlIC0gYnJhbmNoIG5hbWUnICcKKwlwcmludGYgIkJFRk9SRTogKCR7Y19ncmVlbn1cJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9JHtjX2NsZWFyfSk6QUZURVJcXG5tYXN0ZXIiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgPiIkYWN0dWFsIiAmJgorCQlwcmludGYgIiVzXFxuJXMiICIkUFMxIiAiJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiYXNoIGNvbG9yIHBjIG1vZGUgLSBkZXRhY2hlZCBoZWFkJyAnCisJcHJpbnRmICJCRUZPUkU6ICgke2NfcmVkfVwke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0ke2NfY2xlYXJ9KTpBRlRFUlxcbiglcy4uLikiICQoZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJWgiIGIxXikgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrb3V0IGIxXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0NPTE9SSElOVFM9eSAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXNcXG4lcyIgIiRQUzEiICIke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0iID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJhc2ggY29sb3IgcGMgbW9kZSAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBkaXJ0eSB3b3JrdHJlZScgJworCXByaW50ZiAiQkVGT1JFOiAoJHtjX2dyZWVufVwke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0ke2NfY2xlYXJ9ICR7Y19yZWR9KiR7Y19jbGVhcn0pOkFGVEVSXFxubWFzdGVyIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPmZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgJiYKKwkJcHJpbnRmICIlc1xcbiVzIiAiJFBTMSIgIiR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gYmFzaCBjb2xvciBwYyBtb2RlIC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGRpcnR5IGluZGV4JyAnCisJcHJpbnRmICJCRUZPUkU6ICgke2NfZ3JlZW59XCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSR7Y19jbGVhcn0gJHtjX2dyZWVufSske2NfY2xlYXJ9KTpBRlRFUlxcbm1hc3RlciIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkiID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBhZGQgLXUgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlHSVRfUFMxX1NIT1dDT0xPUkhJTlRTPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzXFxuJXMiICIkUFMxIiAiJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiYXNoIGNvbG9yIHBjIG1vZGUgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gZGlydHkgaW5kZXggYW5kIHdvcmt0cmVlJyAnCisJcHJpbnRmICJCRUZPUkU6ICgke2NfZ3JlZW59XCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSR7Y19jbGVhcn0gJHtjX3JlZH0qJHtjX2dyZWVufSske2NfY2xlYXJ9KTpBRlRFUlxcbm1hc3RlciIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkgaW5kZXgiID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBhZGQgLXUgJiYKKwllY2hvICJkaXJ0eSB3b3JrdHJlZSIgPmZpbGUgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0NPTE9SSElOVFM9eSAmJgorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzXFxuJXMiICIkUFMxIiAiJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiYXNoIGNvbG9yIHBjIG1vZGUgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gYmVmb3JlIHJvb3QgY29tbWl0JyAnCisJcHJpbnRmICJCRUZPUkU6ICgke2NfZ3JlZW59XCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSR7Y19jbGVhcn0gJHtjX2dyZWVufSMke2NfY2xlYXJ9KTpBRlRFUlxcbm1hc3RlciIgPmV4cGVjdGVkICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCWNkIG90aGVycmVwbyAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXNcXG4lcyIgIiRQUzEiICIke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0iID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJhc2ggY29sb3IgcGMgbW9kZSAtIGluc2lkZSAuZ2l0IGRpcmVjdG9yeScgJworCXByaW50ZiAiQkVGT1JFOiAoJHtjX2dyZWVufVwke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0ke2NfY2xlYXJ9KTpBRlRFUlxcbkdJVF9ESVIhIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPmZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCWNkIC5naXQgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzXFxuJXMiICIkUFMxIiAiJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiYXNoIGNvbG9yIHBjIG1vZGUgLSBzdGFzaCBzdGF0dXMgaW5kaWNhdG9yJyAnCisJcHJpbnRmICJCRUZPUkU6ICgke2NfZ3JlZW59XCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSR7Y19jbGVhcn0gJHtjX2xibHVlfVwkJHtjX2NsZWFyfSk6QUZURVJcXG5tYXN0ZXIiID5leHBlY3RlZCAmJgorCWVjaG8gMiA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHN0YXNoIGRyb3AiICYmCisJKAorCQlHSVRfUFMxX1NIT1dTVEFTSFNUQVRFPXkgJiYKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgJiYKKwkJcHJpbnRmICIlc1xcbiVzIiAiJFBTMSIgIiR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gYmFzaCBjb2xvciBwYyBtb2RlIC0gdW50cmFja2VkIGZpbGVzIHN0YXR1cyBpbmRpY2F0b3InICcKKwlwcmludGYgIkJFRk9SRTogKCR7Y19ncmVlbn1cJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9JHtjX2NsZWFyfSAke2NfcmVkfSUlJHtjX2NsZWFyfSk6QUZURVJcXG5tYXN0ZXIiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVM9eSAmJgorCQlHSVRfUFMxX1NIT1dDT0xPUkhJTlRTPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzXFxuJXMiICIkUFMxIiAiJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB6c2ggY29sb3IgcGMgbW9kZScgJworCXByaW50ZiAiQkVGT1JFOiAoJSVGe2dyZWVufW1hc3RlciUlZik6QUZURVIiID5leHBlY3RlZCAmJgorCSgKKwkJWlNIX1ZFUlNJT049NS4wLjAgJiYKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgJiYKKwkJcHJpbnRmICIlcyIgIiRQUzEiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGhpZGUgaWYgcHdkIGlnbm9yZWQgLSBlbnYgdmFyIHVuc2V0LCBjb25maWcgZGlzYWJsZWQnICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJdGVzdF9jb25maWcgYmFzaC5oaWRlSWZQd2RJZ25vcmVkIGZhbHNlICYmCisJKAorCQljZCBpZ25vcmVkX2RpciAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaGlkZSBpZiBwd2QgaWdub3JlZCAtIGVudiB2YXIgdW5zZXQsIGNvbmZpZyBkaXNhYmxlZCwgcGMgbW9kZScgJworCXByaW50ZiAiQkVGT1JFOiAoXCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSk6QUZURVIiID5leHBlY3RlZCAmJgorCXRlc3RfY29uZmlnIGJhc2guaGlkZUlmUHdkSWdub3JlZCBmYWxzZSAmJgorCSgKKwkJY2QgaWdub3JlZF9kaXIgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzIiAiJFBTMSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaGlkZSBpZiBwd2QgaWdub3JlZCAtIGVudiB2YXIgdW5zZXQsIGNvbmZpZyB1bnNldCcgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIGlnbm9yZWRfZGlyICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBoaWRlIGlmIHB3ZCBpZ25vcmVkIC0gZW52IHZhciB1bnNldCwgY29uZmlnIHVuc2V0LCBwYyBtb2RlJyAnCisJcHJpbnRmICJCRUZPUkU6IChcJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9KTpBRlRFUiIgPmV4cGVjdGVkICYmCisJKAorCQljZCBpZ25vcmVkX2RpciAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXMiICIkUFMxIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBoaWRlIGlmIHB3ZCBpZ25vcmVkIC0gZW52IHZhciBzZXQsIGNvbmZpZyBkaXNhYmxlZCcgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NvbmZpZyBiYXNoLmhpZGVJZlB3ZElnbm9yZWQgZmFsc2UgJiYKKwkoCisJCWNkIGlnbm9yZWRfZGlyICYmCisJCUdJVF9QUzFfSElERV9JRl9QV0RfSUdOT1JFRD15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBoaWRlIGlmIHB3ZCBpZ25vcmVkIC0gZW52IHZhciBzZXQsIGNvbmZpZyBkaXNhYmxlZCwgcGMgbW9kZScgJworCXByaW50ZiAiQkVGT1JFOiAoXCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSk6QUZURVIiID5leHBlY3RlZCAmJgorCXRlc3RfY29uZmlnIGJhc2guaGlkZUlmUHdkSWdub3JlZCBmYWxzZSAmJgorCSgKKwkJY2QgaWdub3JlZF9kaXIgJiYKKwkJR0lUX1BTMV9ISURFX0lGX1BXRF9JR05PUkVEPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzIiAiJFBTMSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaGlkZSBpZiBwd2QgaWdub3JlZCAtIGVudiB2YXIgc2V0LCBjb25maWcgdW5zZXQnICcKKwkoCisJCWNkIGlnbm9yZWRfZGlyICYmCisJCUdJVF9QUzFfSElERV9JRl9QV0RfSUdOT1JFRD15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaGlkZSBpZiBwd2QgaWdub3JlZCAtIGVudiB2YXIgc2V0LCBjb25maWcgdW5zZXQsIHBjIG1vZGUnICcKKwlwcmludGYgIkJFRk9SRTo6QUZURVIiID5leHBlY3RlZCAmJgorCSgKKwkJY2QgaWdub3JlZF9kaXIgJiYKKwkJR0lUX1BTMV9ISURFX0lGX1BXRF9JR05PUkVEPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzIiAiJFBTMSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaGlkZSBpZiBwd2QgaWdub3JlZCAtIGluc2lkZSBnaXRkaXInICcKKwlwcmludGYgIiAoR0lUX0RJUiEpIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9QUzFfSElERV9JRl9QV0RfSUdOT1JFRD15ICYmCisJCWNkIC5naXQgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ZXN0LWJpbmFyeS0xLnBuZyBiL3QvdGVzdC1iaW5hcnktMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxODFkMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdGVzdC1iaW5hcnktMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90ZXN0LWJpbmFyeS0yLnBuZyBiL3QvdGVzdC1iaW5hcnktMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMyMmNjYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdGVzdC1iaW5hcnktMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90ZXN0LWxpYi1mdW5jdGlvbnMuc2ggYi90L3Rlc3QtbGliLWZ1bmN0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTAzYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90ZXN0LWxpYi1mdW5jdGlvbnMuc2gKQEAgLTAsMCArMSwxNTYzIEBACisjIExpYnJhcnkgb2YgZnVuY3Rpb25zIHNoYXJlZCBieSBhbGwgdGVzdHMgc2NyaXB0cywgaW5jbHVkZWQgYnkKKyMgdGVzdC1saWIuc2guCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8gLgorCisjIFRoZSBzZW1hbnRpY3Mgb2YgdGhlIGVkaXRvciB2YXJpYWJsZXMgYXJlIHRoYXQgb2YgaW52b2tpbmcKKyMgc2ggLWMgIiRFRElUT1IgXCIkQFwiIiBmaWxlcyAuLi4KKyMKKyMgSWYgb3VyIHRyYXNoIGRpcmVjdG9yeSBjb250YWlucyBzaGVsbCBtZXRhY2hhcmFjdGVycywgdGhleSB3aWxsIGJlCisjIGludGVycHJldGVkIGlmIHdlIGp1c3Qgc2V0ICRFRElUT1IgZGlyZWN0bHksIHNvIGRvIGEgbGl0dGxlIGRhbmNlIHdpdGgKKyMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHdvcmsgYXJvdW5kIHRoaXMuCisjCisjIEluIHBhcnRpY3VsYXIsIHF1b3RpbmcgaXNuJ3QgZW5vdWdoLCBhcyB0aGUgcGF0aCBtYXkgY29udGFpbiB0aGUgc2FtZSBxdW90ZQorIyB0aGF0IHdlJ3JlIHVzaW5nLgordGVzdF9zZXRfZWRpdG9yICgpIHsKKwlGQUtFX0VESVRPUj0iJDEiCisJZXhwb3J0IEZBS0VfRURJVE9SCisJRURJVE9SPSciJEZBS0VfRURJVE9SIicKKwlleHBvcnQgRURJVE9SCit9CisKK3Rlc3Rfc2V0X2luZGV4X3ZlcnNpb24gKCkgeworICAgIEdJVF9JTkRFWF9WRVJTSU9OPSIkMSIKKyAgICBleHBvcnQgR0lUX0lOREVYX1ZFUlNJT04KK30KKwordGVzdF9kZWNvZGVfY29sb3IgKCkgeworCWF3ayAnCisJCWZ1bmN0aW9uIG5hbWUobikgeworCQkJaWYgKG4gPT0gMCkgcmV0dXJuICJSRVNFVCI7CisJCQlpZiAobiA9PSAxKSByZXR1cm4gIkJPTEQiOworCQkJaWYgKG4gPT0gMikgcmV0dXJuICJGQUlOVCI7CisJCQlpZiAobiA9PSAzKSByZXR1cm4gIklUQUxJQyI7CisJCQlpZiAobiA9PSA3KSByZXR1cm4gIlJFVkVSU0UiOworCQkJaWYgKG4gPT0gMzApIHJldHVybiAiQkxBQ0siOworCQkJaWYgKG4gPT0gMzEpIHJldHVybiAiUkVEIjsKKwkJCWlmIChuID09IDMyKSByZXR1cm4gIkdSRUVOIjsKKwkJCWlmIChuID09IDMzKSByZXR1cm4gIllFTExPVyI7CisJCQlpZiAobiA9PSAzNCkgcmV0dXJuICJCTFVFIjsKKwkJCWlmIChuID09IDM1KSByZXR1cm4gIk1BR0VOVEEiOworCQkJaWYgKG4gPT0gMzYpIHJldHVybiAiQ1lBTiI7CisJCQlpZiAobiA9PSAzNykgcmV0dXJuICJXSElURSI7CisJCQlpZiAobiA9PSA0MCkgcmV0dXJuICJCTEFDSyI7CisJCQlpZiAobiA9PSA0MSkgcmV0dXJuICJCUkVEIjsKKwkJCWlmIChuID09IDQyKSByZXR1cm4gIkJHUkVFTiI7CisJCQlpZiAobiA9PSA0MykgcmV0dXJuICJCWUVMTE9XIjsKKwkJCWlmIChuID09IDQ0KSByZXR1cm4gIkJCTFVFIjsKKwkJCWlmIChuID09IDQ1KSByZXR1cm4gIkJNQUdFTlRBIjsKKwkJCWlmIChuID09IDQ2KSByZXR1cm4gIkJDWUFOIjsKKwkJCWlmIChuID09IDQ3KSByZXR1cm4gIkJXSElURSI7CisJCX0KKwkJeworCQkJd2hpbGUgKG1hdGNoKCQwLCAvXDAzM1xbWzAtOTtdKm0vKSAhPSAwKSB7CisJCQkJcHJpbnRmICIlczwiLCBzdWJzdHIoJDAsIDEsIFJTVEFSVC0xKTsKKwkJCQljb2RlcyA9IHN1YnN0cigkMCwgUlNUQVJUKzIsIFJMRU5HVEgtMyk7CisJCQkJaWYgKGxlbmd0aChjb2RlcykgPT0gMCkKKwkJCQkJcHJpbnRmICIlcyIsIG5hbWUoMCkKKwkJCQllbHNlIHsKKwkJCQkJbiA9IHNwbGl0KGNvZGVzLCBhcnksICI7Iik7CisJCQkJCXNlcCA9ICIiOworCQkJCQlmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgeworCQkJCQkJcHJpbnRmICIlcyVzIiwgc2VwLCBuYW1lKGFyeVtpXSk7CisJCQkJCQlzZXAgPSAiOyIKKwkJCQkJfQorCQkJCX0KKwkJCQlwcmludGYgIj4iOworCQkJCSQwID0gc3Vic3RyKCQwLCBSU1RBUlQgKyBSTEVOR1RILCBsZW5ndGgoJDApIC0gUlNUQVJUIC0gUkxFTkdUSCArIDEpOworCQkJfQorCQkJcHJpbnQKKwkJfQorCScKK30KKworbGZfdG9fbnVsICgpIHsKKwlwZXJsIC1wZSAneS9cMDEyL1wwMDAvJworfQorCitudWxfdG9fcSAoKSB7CisJcGVybCAtcGUgJ3kvXDAwMC9RLycKK30KKworcV90b19udWwgKCkgeworCXBlcmwgLXBlICd5L1EvXDAwMC8nCit9CisKK3FfdG9fY3IgKCkgeworCXRyIFEgJ1wwMTUnCit9CisKK3FfdG9fdGFiICgpIHsKKwl0ciBRICdcMDExJworfQorCitxel90b190YWJfc3BhY2UgKCkgeworCXRyIFFaICdcMDExXDA0MCcKK30KKworYXBwZW5kX2NyICgpIHsKKwlzZWQgLWUgJ3MvJC9RLycgfCB0ciBRICdcMDE1JworfQorCityZW1vdmVfY3IgKCkgeworCXRyICdcMDE1JyBRIHwgc2VkIC1lICdzL1EkLy8nCit9CisKKyMgR2VuZXJhdGUgYW4gb3V0cHV0IG9mICQxIGJ5dGVzIG9mIGFsbCB6ZXJvZXMgKE5VTHMsIG5vdCBBU0NJSSB6ZXJvZXMpLgorIyBJZiAkMSBpcyAnaW5maW5pdHknLCBvdXRwdXQgZm9yZXZlciBvciB1bnRpbCB0aGUgcmVjZWl2aW5nIHBpcGUgc3RvcHMgcmVhZGluZywKKyMgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgorZ2VuZXJhdGVfemVyb19ieXRlcyAoKSB7CisJdGVzdC10b29sIGdlbnplcm9zICIkQCIKK30KKworIyBJbiBzb21lIGJvdXJuZSBzaGVsbCBpbXBsZW1lbnRhdGlvbnMsIHRoZSAidW5zZXQiIGJ1aWx0aW4gcmV0dXJucworIyBub256ZXJvIHN0YXR1cyB3aGVuIGEgdmFyaWFibGUgdG8gYmUgdW5zZXQgd2FzIG5vdCBzZXQgaW4gdGhlIGZpcnN0CisjIHBsYWNlLgorIworIyBVc2Ugc2FuZV91bnNldCB3aGVuIHRoYXQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGFuIGVycm9yLgorCitzYW5lX3Vuc2V0ICgpIHsKKwl1bnNldCAiJEAiCisJcmV0dXJuIDAKK30KKwordGVzdF90aWNrICgpIHsKKwlpZiB0ZXN0IC16ICIke3Rlc3RfdGljaytzZXR9IgorCXRoZW4KKwkJdGVzdF90aWNrPTExMTI5MTE5OTMKKwllbHNlCisJCXRlc3RfdGljaz0kKCgkdGVzdF90aWNrICsgNjApKQorCWZpCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIkdGVzdF90aWNrIC0wNzAwIgorCUdJVF9BVVRIT1JfREFURT0iJHRlc3RfdGljayAtMDcwMCIKKwlleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFIEdJVF9BVVRIT1JfREFURQorfQorCisjIFN0b3AgZXhlY3V0aW9uIGFuZCBzdGFydCBhIHNoZWxsLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRlc3RzLgorIworIyBCZSBzdXJlIHRvIHJlbW92ZSBhbGwgaW52b2NhdGlvbnMgb2YgdGhpcyBjb21tYW5kIGJlZm9yZSBzdWJtaXR0aW5nLgorCit0ZXN0X3BhdXNlICgpIHsKKwkiJFNIRUxMX1BBVEgiIDwmNiA+JjUgMj4mNworfQorCisjIFdyYXAgZ2l0IHdpdGggYSBkZWJ1Z2dlci4gQWRkaW5nIHRoaXMgdG8gYSBjb21tYW5kIGNhbiBtYWtlIGl0IGVhc2llcgorIyB0byB1bmRlcnN0YW5kIHdoYXQgaXMgZ29pbmcgb24gaW4gYSBmYWlsaW5nIHRlc3QuCisjCisjIEV4YW1wbGVzOgorIyAgICAgZGVidWcgZ2l0IGNoZWNrb3V0IG1hc3RlcgorIyAgICAgZGVidWcgLS1kZWJ1Z2dlcj1uZW1pdmVyIGdpdCAkQVJHUworIyAgICAgZGVidWcgLWQgInZhbGdyaW5kIC0tdG9vbD1tZW1jaGVjayAtLXRyYWNrLW9yaWdpbnM9eWVzIiBnaXQgJEFSR1MKK2RlYnVnICgpIHsKKwljYXNlICIkMSIgaW4KKwktZCkKKwkJR0lUX0RFQlVHR0VSPSIkMiIgJiYKKwkJc2hpZnQgMgorCQk7OworCS0tZGVidWdnZXI9KikKKwkJR0lUX0RFQlVHR0VSPSIkezEjKj19IiAmJgorCQlzaGlmdCAxCisJCTs7CisJKikKKwkJR0lUX0RFQlVHR0VSPTEKKwkJOzsKKwllc2FjICYmCisJR0lUX0RFQlVHR0VSPSIke0dJVF9ERUJVR0dFUn0iICIkQCIgPCY2ID4mNSAyPiY3Cit9CisKKyMgQ2FsbCB0ZXN0X2NvbW1pdCB3aXRoIHRoZSBhcmd1bWVudHMKKyMgWy1DIDxkaXJlY3Rvcnk+XSA8bWVzc2FnZT4gWzxmaWxlPiBbPGNvbnRlbnRzPiBbPHRhZz5dXV0iCisjCisjIFRoaXMgd2lsbCBjb21taXQgYSBmaWxlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnRzIGFuZCB0aGUgZ2l2ZW4gY29tbWl0CisjIG1lc3NhZ2UsIGFuZCB0YWcgdGhlIHJlc3VsdGluZyBjb21taXQgd2l0aCB0aGUgZ2l2ZW4gdGFnIG5hbWUuCisjCisjIDxmaWxlPiwgPGNvbnRlbnRzPiwgYW5kIDx0YWc+IGFsbCBkZWZhdWx0IHRvIDxtZXNzYWdlPi4KKyMKKyMgSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzICItQyIsIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdXNlZCBhcyBhIHBhdGggZm9yCisjIHRoZSBnaXQgaW52b2NhdGlvbnMuCisKK3Rlc3RfY29tbWl0ICgpIHsKKwlub3RpY2s9ICYmCisJc2lnbm9mZj0gJiYKKwlpbmRpcj0gJiYKKwl3aGlsZSB0ZXN0ICQjICE9IDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLS1ub3RpY2spCisJCQlub3RpY2s9eWVzCisJCQk7OworCQktLXNpZ25vZmYpCisJCQlzaWdub2ZmPSIkMSIKKwkJCTs7CisJCS1DKQorCQkJaW5kaXI9IiQyIgorCQkJc2hpZnQKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUgJiYKKwlpbmRpcj0ke2luZGlyOisiJGluZGlyIi99ICYmCisJZmlsZT0kezI6LSIkMS50In0gJiYKKwllY2hvICIkezMtJDF9IiA+ICIkaW5kaXIkZmlsZSIgJiYKKwlnaXQgJHtpbmRpcjorIC1DICIkaW5kaXIifSBhZGQgIiRmaWxlIiAmJgorCWlmIHRlc3QgLXogIiRub3RpY2siCisJdGhlbgorCQl0ZXN0X3RpY2sKKwlmaSAmJgorCWdpdCAke2luZGlyOisgLUMgIiRpbmRpciJ9IGNvbW1pdCAkc2lnbm9mZiAtbSAiJDEiICYmCisJZ2l0ICR7aW5kaXI6KyAtQyAiJGluZGlyIn0gdGFnICIkezQ6LSQxfSIKK30KKworIyBDYWxsIHRlc3RfbWVyZ2Ugd2l0aCB0aGUgYXJndW1lbnRzICI8bWVzc2FnZT4gPGNvbW1pdD4iLCB3aGVyZSA8Y29tbWl0PgorIyBjYW4gYmUgYSB0YWcgcG9pbnRpbmcgdG8gdGhlIGNvbW1pdC10by1tZXJnZS4KKwordGVzdF9tZXJnZSAoKSB7CisJbGFiZWw9IiQxIiAmJgorCXNoaWZ0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1tICIkbGFiZWwiICIkQCIgJiYKKwlnaXQgdGFnICIkbGFiZWwiCit9CisKKyMgRWZmaWNpZW50bHkgY3JlYXRlIDxucj4gY29tbWl0cywgZWFjaCB3aXRoIGEgdW5pcXVlIG51bWJlciAoZnJvbSAxIHRvIDxucj4KKyMgYnkgZGVmYXVsdCkgaW4gdGhlIGNvbW1pdCBtZXNzYWdlLgorIworIyBVc2FnZTogdGVzdF9jb21taXRfYnVsayBbb3B0aW9uc10gPG5yPgorIyAgIC1DIDxkaXI+OgorIwlSdW4gYWxsIGdpdCBjb21tYW5kcyBpbiBkaXJlY3RvcnkgPGRpcj4KKyMgICAtLXJlZj08bj46CisjCXJlZiBvbiB3aGljaCB0byBjcmVhdGUgY29tbWl0cyAoZGVmYXVsdDogSEVBRCkKKyMgICAtLXN0YXJ0PTxuPjoKKyMJbnVtYmVyIGNvbW1pdCBtZXNzYWdlcyBmcm9tIDxuPiAoZGVmYXVsdDogMSkKKyMgICAtLW1lc3NhZ2U9PG1zZz46CisjCXVzZSA8bXNnPiBhcyB0aGUgY29tbWl0IG1lc2FzZ2UgKGRlZmF1bHQ6ICJjb21taXQgJXMiKQorIyAgIC0tZmlsZW5hbWU9PGZuPjoKKyMJbW9kaWZ5IDxmbj4gaW4gZWFjaCBjb21taXQgKGRlZmF1bHQ6ICVzLnQpCisjICAgLS1jb250ZW50cz08c3RyaW5nPjoKKyMJcGxhY2UgPHN0cmluZz4gaW4gZWFjaCBmaWxlIChkZWZhdWx0OiAiY29udGVudCAlcyIpCisjICAgLS1pZD08c3RyaW5nPjoKKyMJc2hvcnRoYW5kIHRvIHVzZSA8c3RyaW5nPiBhbmQgJXMgaW4gbWVzc2FnZSwgZmlsZW5hbWUsIGFuZCBjb250ZW50cworIworIyBUaGUgbWVzc2FnZSwgZmlsZW5hbWUsIGFuZCBjb250ZW50cyBzdHJpbmdzIGFyZSBldmFsdWF0ZWQgYnkgcHJpbnRmLCB3aXRoIHRoZQorIyBmaXJzdCAiJXMiIHJlcGxhY2VkIGJ5IHRoZSBjdXJyZW50IGNvbW1pdCBudW1iZXIuIFNvIHlvdSBjYW4gZG86CisjCisjICAgdGVzdF9jb21taXRfYnVsayAtLWZpbGVuYW1lPWZpbGUgLS1jb250ZW50cz0ibW9kaWZpY2F0aW9uICVzIgorIworIyB0byBoYXZlIGV2ZXJ5IGNvbW1pdCB0b3VjaCB0aGUgc2FtZSBmaWxlLCBidXQgd2l0aCB1bmlxdWUgY29udGVudC4KKyMKK3Rlc3RfY29tbWl0X2J1bGsgKCkgeworCXRtcGZpbGU9LmJ1bGstY29tbWl0LmlucHV0CisJaW5kaXI9LgorCXJlZj1IRUFECisJbj0xCisJbWVzc2FnZT0nY29tbWl0ICVzJworCWZpbGVuYW1lPSclcy50JworCWNvbnRlbnRzPSdjb250ZW50ICVzJworCXdoaWxlIHRlc3QgJCMgLWd0IDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLUMpCisJCQlpbmRpcj0kMgorCQkJc2hpZnQKKwkJCTs7CisJCS0tcmVmPSopCisJCQlyZWY9JHsxIy0tKj19CisJCQk7OworCQktLXN0YXJ0PSopCisJCQluPSR7MSMtLSo9fQorCQkJOzsKKwkJLS1tZXNzYWdlPSopCisJCQltZXNzYWdlPSR7MSMtLSo9fQorCQkJOzsKKwkJLS1maWxlbmFtZT0qKQorCQkJZmlsZW5hbWU9JHsxIy0tKj19CisJCQk7OworCQktLWNvbnRlbnRzPSopCisJCQljb250ZW50cz0kezEjLS0qPX0KKwkJCTs7CisJCS0taWQ9KikKKwkJCW1lc3NhZ2U9IiR7MSMtLSo9fSAlcyIKKwkJCWZpbGVuYW1lPSIkezEjLS0qPX0tJXMudCIKKwkJCWNvbnRlbnRzPSIkezEjLS0qPX0gJXMiCisJCQk7OworCQktKikKKwkJCUJVRyAiaW52YWxpZCB0ZXN0X2NvbW1pdF9idWxrIG9wdGlvbjogJDEiCisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisJdG90YWw9JDEKKworCWFkZF9mcm9tPQorCWlmIGdpdCAtQyAiJGluZGlyIiByZXYtcGFyc2UgLS1xdWlldCAtLXZlcmlmeSAiJHJlZiIKKwl0aGVuCisJCWFkZF9mcm9tPXQKKwlmaQorCisJd2hpbGUgdGVzdCAiJHRvdGFsIiAtZ3QgMAorCWRvCisJCXRlc3RfdGljayAmJgorCQllY2hvICJjb21taXQgJHJlZiIKKwkJcHJpbnRmICdhdXRob3IgJXMgPCVzPiAlc1xuJyBcCisJCQkiJEdJVF9BVVRIT1JfTkFNRSIgXAorCQkJIiRHSVRfQVVUSE9SX0VNQUlMIiBcCisJCQkiJEdJVF9BVVRIT1JfREFURSIKKwkJcHJpbnRmICdjb21taXR0ZXIgJXMgPCVzPiAlc1xuJyBcCisJCQkiJEdJVF9DT01NSVRURVJfTkFNRSIgXAorCQkJIiRHSVRfQ09NTUlUVEVSX0VNQUlMIiBcCisJCQkiJEdJVF9DT01NSVRURVJfREFURSIKKwkJZWNobyAiZGF0YSA8PEVPRiIKKwkJcHJpbnRmICIkbWVzc2FnZVxuIiAkbgorCQllY2hvICJFT0YiCisJCWlmIHRlc3QgLW4gIiRhZGRfZnJvbSIKKwkJdGhlbgorCQkJZWNobyAiZnJvbSAkcmVmXjAiCisJCQlhZGRfZnJvbT0KKwkJZmkKKwkJcHJpbnRmICJNIDY0NCBpbmxpbmUgJGZpbGVuYW1lXG4iICRuCisJCWVjaG8gImRhdGEgPDxFT0YiCisJCXByaW50ZiAiJGNvbnRlbnRzXG4iICRuCisJCWVjaG8gIkVPRiIKKwkJZWNobworCQluPSQoKG4gKyAxKSkKKwkJdG90YWw9JCgodG90YWwgLSAxKSkKKwlkb25lID4iJHRtcGZpbGUiCisKKwlnaXQgLUMgIiRpbmRpciIgXAorCSAgICAtYyBmYXN0aW1wb3J0LnVucGFja2xpbWl0PTAgXAorCSAgICBmYXN0LWltcG9ydCA8IiR0bXBmaWxlIiB8fCByZXR1cm4gMQorCisJIyBUaGlzIHdpbGwgYmUgbGVmdCBpbiBwbGFjZSBvbiBmYWlsdXJlLCB3aGljaCBtYXkgYWlkIGRlYnVnZ2luZy4KKwlybSAtZiAiJHRtcGZpbGUiCisKKwkjIElmIHdlIHVwZGF0ZWQgSEVBRCwgdGhlbiBiZSBuaWNlIGFuZCB1cGRhdGUgdGhlIGluZGV4IGFuZCB3b3JraW5nCisJIyB0cmVlLCB0b28uCisJaWYgdGVzdCAiJHJlZiIgPSAiSEVBRCIKKwl0aGVuCisJCWdpdCAtQyAiJGluZGlyIiBjaGVja291dCAtZiBIRUFEIHx8IHJldHVybiAxCisJZmkKKworfQorCisjIFRoaXMgZnVuY3Rpb24gaGVscHMgc3lzdGVtcyB3aGVyZSBjb3JlLmZpbGVtb2RlPWZhbHNlIGlzIHNldC4KKyMgVXNlIGl0IGluc3RlYWQgb2YgcGxhaW4gJ2NobW9kICt4JyB0byBzZXQgb3IgdW5zZXQgdGhlIGV4ZWN1dGFibGUgYml0CisjIG9mIGEgZmlsZSBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkgYW5kIGFkZCBpdCB0byB0aGUgaW5kZXguCisKK3Rlc3RfY2htb2QgKCkgeworCWNobW9kICIkQCIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkICItLWNobW9kPSRAIgorfQorCisjIEdldCB0aGUgbW9kZWJpdHMgZnJvbSBhIGZpbGUuCit0ZXN0X21vZGViaXRzICgpIHsKKwlscyAtbCAiJDEiIHwgc2VkIC1lICdzfF5cKC4uLi4uLi4uLi5cKS4qfFwxfCcKK30KKworIyBVbnNldCBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGJ1dCBkb24ndCBmYWlsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCit0ZXN0X3VuY29uZmlnICgpIHsKKwljb25maWdfZGlyPQorCWlmIHRlc3QgIiQxIiA9IC1DCisJdGhlbgorCQlzaGlmdAorCQljb25maWdfZGlyPSQxCisJCXNoaWZ0CisJZmkKKwlnaXQgJHtjb25maWdfZGlyOistQyAiJGNvbmZpZ19kaXIifSBjb25maWcgLS11bnNldC1hbGwgIiRAIgorCWNvbmZpZ19zdGF0dXM9JD8KKwljYXNlICIkY29uZmlnX3N0YXR1cyIgaW4KKwk1KSAjIG9rLCBub3RoaW5nIHRvIHVuc2V0CisJCWNvbmZpZ19zdGF0dXM9MAorCQk7OworCWVzYWMKKwlyZXR1cm4gJGNvbmZpZ19zdGF0dXMKK30KKworIyBTZXQgZ2l0IGNvbmZpZywgYXV0b21hdGljYWxseSB1bnNldHRpbmcgaXQgYWZ0ZXIgdGhlIHRlc3QgaXMgb3Zlci4KK3Rlc3RfY29uZmlnICgpIHsKKwljb25maWdfZGlyPQorCWlmIHRlc3QgIiQxIiA9IC1DCisJdGhlbgorCQlzaGlmdAorCQljb25maWdfZGlyPSQxCisJCXNoaWZ0CisJZmkKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfdW5jb25maWcgJHtjb25maWdfZGlyOistQyAnJGNvbmZpZ19kaXInfSAnJDEnIiAmJgorCWdpdCAke2NvbmZpZ19kaXI6Ky1DICIkY29uZmlnX2RpciJ9IGNvbmZpZyAiJEAiCit9CisKK3Rlc3RfY29uZmlnX2dsb2JhbCAoKSB7CisJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X3VuY29uZmlnIC0tZ2xvYmFsICckMSciICYmCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCAiJEAiCit9CisKK3dyaXRlX3NjcmlwdCAoKSB7CisJeworCQllY2hvICIjISR7Mi0iJFNIRUxMX1BBVEgifSIgJiYKKwkJY2F0CisJfSA+IiQxIiAmJgorCWNobW9kICt4ICIkMSIKK30KKworIyBVc2UgdGVzdF9zZXRfcHJlcmVxIHRvIHRlbGwgdGhhdCBhIHBhcnRpY3VsYXIgcHJlcmVxdWlzaXRlIGlzIGF2YWlsYWJsZS4KKyMgVGhlIHByZXJlcXVpc2l0ZSBjYW4gbGF0ZXIgYmUgY2hlY2tlZCBmb3IgaW4gdHdvIHdheXM6CisjCisjIC0gRXhwbGljaXRseSB1c2luZyB0ZXN0X2hhdmVfcHJlcmVxLgorIworIyAtIEltcGxpY2l0bHkgYnkgc3BlY2lmeWluZyB0aGUgcHJlcmVxdWlzaXRlIHRhZyBpbiB0aGUgY2FsbHMgdG8KKyMgICB0ZXN0X2V4cGVjdF97c3VjY2VzcyxmYWlsdXJlLGNvZGV9LgorIworIyBUaGUgc2luZ2xlIHBhcmFtZXRlciBpcyB0aGUgcHJlcmVxdWlzaXRlIHRhZyAoYSBzaW1wbGUgd29yZCwgaW4gYWxsCisjIGNhcGl0YWwgbGV0dGVycyBieSBjb252ZW50aW9uKS4KKwordGVzdF91bnNldF9wcmVyZXEgKCkgeworCSEgdGVzdF9oYXZlX3ByZXJlcSAiJDEiIHx8CisJc2F0aXNmaWVkX3ByZXJlcT0iJHtzYXRpc2ZpZWRfcHJlcmVxJSAkMSAqfSAke3NhdGlzZmllZF9wcmVyZXEjKiAkMSB9IgorfQorCit0ZXN0X3NldF9wcmVyZXEgKCkgeworCWlmIHRlc3QgLW4gIiRHSVRfVEVTVF9GQUlMX1BSRVJFUVNfSU5URVJOQUwiCisJdGhlbgorCQljYXNlICIkMSIgaW4KKwkJIyBUaGUgIiEiIGNhc2UgaXMgaGFuZGxlZCBiZWxvdyB3aXRoCisJCSMgdGVzdF91bnNldF9wcmVyZXEoKQorCQkhKikKKwkJCTs7CisJCSMgKFRlbXBvcmFyeT8pIHdoaXRlbGlzdCBvZiB0aGluZ3Mgd2UgY2FuJ3QgZWFzaWx5CisJCSMgcHJldGVuZCBub3QgdG8gc3VwcG9ydAorCQlTWU1MSU5LUykKKwkJCTs7CisJCSMgSW5zcGVjdGluZyB3aGV0aGVyIEdJVF9URVNUX0ZBSUxfUFJFUkVRUyBpcyBvbgorCQkjIHNob3VsZCBiZSB1bmFmZmVjdGVkLgorCQlGQUlMX1BSRVJFUVMpCisJCQk7OworCQkqKQorCQkJcmV0dXJuCisJCWVzYWMKKwlmaQorCisJY2FzZSAiJDEiIGluCisJISopCisJCXRlc3RfdW5zZXRfcHJlcmVxICIkezEjIX0iCisJCTs7CisJKikKKwkJc2F0aXNmaWVkX3ByZXJlcT0iJHNhdGlzZmllZF9wcmVyZXEkMSAiCisJCTs7CisJZXNhYworfQorc2F0aXNmaWVkX3ByZXJlcT0iICIKK2xhemlseV90ZXN0YWJsZV9wcmVyZXE9IGxhemlseV90ZXN0ZWRfcHJlcmVxPQorCisjIFVzYWdlOiB0ZXN0X2xhenlfcHJlcmVxIFBSRVJFUSAnc2NyaXB0JwordGVzdF9sYXp5X3ByZXJlcSAoKSB7CisJbGF6aWx5X3Rlc3RhYmxlX3ByZXJlcT0iJGxhemlseV90ZXN0YWJsZV9wcmVyZXEkMSAiCisJZXZhbCB0ZXN0X3ByZXJlcV9sYXppbHlfJDE9XCQyCit9CisKK3Rlc3RfcnVuX2xhenlfcHJlcmVxXyAoKSB7CisJc2NyaXB0PScKK21rZGlyIC1wICIkVFJBU0hfRElSRUNUT1JZL3ByZXJlcS10ZXN0LWRpciIgJiYKKygKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9wcmVyZXEtdGVzdC1kaXIiICYmJyIkMiInCispJworCXNheSA+JjMgImNoZWNraW5nIHByZXJlcXVpc2l0ZTogJDEiCisJc2F5ID4mMyAiJHNjcmlwdCIKKwl0ZXN0X2V2YWxfICIkc2NyaXB0IgorCWV2YWxfcmV0PSQ/CisJcm0gLXJmICIkVFJBU0hfRElSRUNUT1JZL3ByZXJlcS10ZXN0LWRpciIKKwlpZiB0ZXN0ICIkZXZhbF9yZXQiID0gMDsgdGhlbgorCQlzYXkgPiYzICJwcmVyZXF1aXNpdGUgJDEgb2siCisJZWxzZQorCQlzYXkgPiYzICJwcmVyZXF1aXNpdGUgJDEgbm90IHNhdGlzZmllZCIKKwlmaQorCXJldHVybiAkZXZhbF9yZXQKK30KKwordGVzdF9oYXZlX3ByZXJlcSAoKSB7CisJIyBwcmVyZXF1aXNpdGVzIGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCAnLCcKKwlzYXZlX0lGUz0kSUZTCisJSUZTPSwKKwlzZXQgLS0gJCoKKwlJRlM9JHNhdmVfSUZTCisKKwl0b3RhbF9wcmVyZXE9MAorCW9rX3ByZXJlcT0wCisJbWlzc2luZ19wcmVyZXE9CisKKwlmb3IgcHJlcmVxdWlzaXRlCisJZG8KKwkJY2FzZSAiJHByZXJlcXVpc2l0ZSIgaW4KKwkJISopCisJCQluZWdhdGl2ZV9wcmVyZXE9dAorCQkJcHJlcmVxdWlzaXRlPSR7cHJlcmVxdWlzaXRlIyF9CisJCQk7OworCQkqKQorCQkJbmVnYXRpdmVfcHJlcmVxPQorCQllc2FjCisKKwkJY2FzZSAiICRsYXppbHlfdGVzdGVkX3ByZXJlcSAiIGluCisJCSoiICRwcmVyZXF1aXNpdGUgIiopCisJCQk7OworCQkqKQorCQkJY2FzZSAiICRsYXppbHlfdGVzdGFibGVfcHJlcmVxICIgaW4KKwkJCSoiICRwcmVyZXF1aXNpdGUgIiopCisJCQkJZXZhbCAic2NyaXB0PVwkdGVzdF9wcmVyZXFfbGF6aWx5XyRwcmVyZXF1aXNpdGUiICYmCisJCQkJaWYgdGVzdF9ydW5fbGF6eV9wcmVyZXFfICIkcHJlcmVxdWlzaXRlIiAiJHNjcmlwdCIKKwkJCQl0aGVuCisJCQkJCXRlc3Rfc2V0X3ByZXJlcSAkcHJlcmVxdWlzaXRlCisJCQkJZmkKKwkJCQlsYXppbHlfdGVzdGVkX3ByZXJlcT0iJGxhemlseV90ZXN0ZWRfcHJlcmVxJHByZXJlcXVpc2l0ZSAiCisJCQllc2FjCisJCQk7OworCQllc2FjCisKKwkJdG90YWxfcHJlcmVxPSQoKCR0b3RhbF9wcmVyZXEgKyAxKSkKKwkJY2FzZSAiJHNhdGlzZmllZF9wcmVyZXEiIGluCisJCSoiICRwcmVyZXF1aXNpdGUgIiopCisJCQlzYXRpc2ZpZWRfdGhpc19wcmVyZXE9dAorCQkJOzsKKwkJKikKKwkJCXNhdGlzZmllZF90aGlzX3ByZXJlcT0KKwkJZXNhYworCisJCWNhc2UgIiRzYXRpc2ZpZWRfdGhpc19wcmVyZXEsJG5lZ2F0aXZlX3ByZXJlcSIgaW4KKwkJdCx8LHQpCisJCQlva19wcmVyZXE9JCgoJG9rX3ByZXJlcSArIDEpKQorCQkJOzsKKwkJKikKKwkJCSMgS2VlcCBhIGxpc3Qgb2YgbWlzc2luZyBwcmVyZXF1aXNpdGVzOyByZXN0b3JlCisJCQkjIHRoZSBuZWdhdGl2ZSBtYXJrZXIgaWYgbmVjZXNzYXJ5LgorCQkJcHJlcmVxdWlzaXRlPSR7bmVnYXRpdmVfcHJlcmVxOishfSRwcmVyZXF1aXNpdGUKKwkJCWlmIHRlc3QgLXogIiRtaXNzaW5nX3ByZXJlcSIKKwkJCXRoZW4KKwkJCQltaXNzaW5nX3ByZXJlcT0kcHJlcmVxdWlzaXRlCisJCQllbHNlCisJCQkJbWlzc2luZ19wcmVyZXE9IiRwcmVyZXF1aXNpdGUsJG1pc3NpbmdfcHJlcmVxIgorCQkJZmkKKwkJZXNhYworCWRvbmUKKworCXRlc3QgJHRvdGFsX3ByZXJlcSA9ICRva19wcmVyZXEKK30KKwordGVzdF9kZWNsYXJlZF9wcmVyZXEgKCkgeworCWNhc2UgIiwkdGVzdF9wcmVyZXEsIiBpbgorCSosJDEsKikKKwkJcmV0dXJuIDAKKwkJOzsKKwllc2FjCisJcmV0dXJuIDEKK30KKwordGVzdF92ZXJpZnlfcHJlcmVxICgpIHsKKwl0ZXN0IC16ICIkdGVzdF9wcmVyZXEiIHx8CisJZXhwciA+L2Rldi9udWxsICIkdGVzdF9wcmVyZXEiIDogJ1tBLVowLTlfLCFdKiQnIHx8CisJQlVHICInJHRlc3RfcHJlcmVxJyBkb2VzIG5vdCBsb29rIGxpa2UgYSBwcmVyZXEiCit9CisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgKCkgeworCXRlc3Rfc3RhcnRfCisJdGVzdCAiJCMiID0gMyAmJiB7IHRlc3RfcHJlcmVxPSQxOyBzaGlmdDsgfSB8fCB0ZXN0X3ByZXJlcT0KKwl0ZXN0ICIkIyIgPSAyIHx8CisJQlVHICJub3QgMiBvciAzIHBhcmFtZXRlcnMgdG8gdGVzdC1leHBlY3QtZmFpbHVyZSIKKwl0ZXN0X3ZlcmlmeV9wcmVyZXEKKwlleHBvcnQgdGVzdF9wcmVyZXEKKwlpZiAhIHRlc3Rfc2tpcCAiJEAiCisJdGhlbgorCQlzYXkgPiYzICJjaGVja2luZyBrbm93biBicmVha2FnZSBvZiAkVEVTVF9OVU1CRVIuJHRlc3RfY291bnQgJyQxJzogJDIiCisJCWlmIHRlc3RfcnVuXyAiJDIiIGV4cGVjdGluZ19mYWlsdXJlCisJCXRoZW4KKwkJCXRlc3Rfa25vd25fYnJva2VuX29rXyAiJDEiCisJCWVsc2UKKwkJCXRlc3Rfa25vd25fYnJva2VuX2ZhaWx1cmVfICIkMSIKKwkJZmkKKwlmaQorCXRlc3RfZmluaXNoXworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICgpIHsKKwl0ZXN0X3N0YXJ0XworCXRlc3QgIiQjIiA9IDMgJiYgeyB0ZXN0X3ByZXJlcT0kMTsgc2hpZnQ7IH0gfHwgdGVzdF9wcmVyZXE9CisJdGVzdCAiJCMiID0gMiB8fAorCUJVRyAibm90IDIgb3IgMyBwYXJhbWV0ZXJzIHRvIHRlc3QtZXhwZWN0LXN1Y2Nlc3MiCisJdGVzdF92ZXJpZnlfcHJlcmVxCisJZXhwb3J0IHRlc3RfcHJlcmVxCisJaWYgISB0ZXN0X3NraXAgIiRAIgorCXRoZW4KKwkJc2F5ID4mMyAiZXhwZWN0aW5nIHN1Y2Nlc3Mgb2YgJFRFU1RfTlVNQkVSLiR0ZXN0X2NvdW50ICckMSc6ICQyIgorCQlpZiB0ZXN0X3J1bl8gIiQyIgorCQl0aGVuCisJCQl0ZXN0X29rXyAiJDEiCisJCWVsc2UKKwkJCXRlc3RfZmFpbHVyZV8gIiRAIgorCQlmaQorCWZpCisJdGVzdF9maW5pc2hfCit9CisKKyMgdGVzdF9leHRlcm5hbCBydW5zIGV4dGVybmFsIHRlc3Qgc2NyaXB0cyB0aGF0IHByb3ZpZGUgY29udGludW91cworIyB0ZXN0IG91dHB1dCBhYm91dCB0aGVpciBwcm9ncmVzcywgYW5kIHN1Y2NlZWRzL2ZhaWxzIG9uCisjIHplcm8vbm9uLXplcm8gZXhpdCBjb2RlLiAgSXQgb3V0cHV0cyB0aGUgdGVzdCBvdXRwdXQgb24gc3Rkb3V0IGV2ZW4KKyMgaW4gbm9uLXZlcmJvc2UgbW9kZSwgYW5kIGFubm91bmNlcyB0aGUgZXh0ZXJuYWwgc2NyaXB0IHdpdGggIiMgcnVuCisjIDxuPjogLi4uIiBiZWZvcmUgcnVubmluZyBpdC4gIFdoZW4gcHJvdmlkaW5nIHJlbGF0aXZlIHBhdGhzLCBrZWVwIGluCisjIG1pbmQgdGhhdCBhbGwgc2NyaXB0cyBydW4gaW4gInRyYXNoIGRpcmVjdG9yeSIuCisjIFVzYWdlOiB0ZXN0X2V4dGVybmFsIGRlc2NyaXB0aW9uIGNvbW1hbmQgYXJndW1lbnRzLi4uCisjIEV4YW1wbGU6IHRlc3RfZXh0ZXJuYWwgJ1BlcmwgQVBJJyBwZXJsIC4uL3BhdGgvdG8vdGVzdC5wbAordGVzdF9leHRlcm5hbCAoKSB7CisJdGVzdCAiJCMiID0gNCAmJiB7IHRlc3RfcHJlcmVxPSQxOyBzaGlmdDsgfSB8fCB0ZXN0X3ByZXJlcT0KKwl0ZXN0ICIkIyIgPSAzIHx8CisJQlVHICJub3QgMyBvciA0IHBhcmFtZXRlcnMgdG8gdGVzdF9leHRlcm5hbCIKKwlkZXNjcj0iJDEiCisJc2hpZnQKKwl0ZXN0X3ZlcmlmeV9wcmVyZXEKKwlleHBvcnQgdGVzdF9wcmVyZXEKKwlpZiAhIHRlc3Rfc2tpcCAiJGRlc2NyIiAiJEAiCisJdGhlbgorCQkjIEFubm91bmNlIHRoZSBzY3JpcHQgdG8gcmVkdWNlIGNvbmZ1c2lvbiBhYm91dCB0aGUKKwkJIyB0ZXN0IG91dHB1dCB0aGF0IGZvbGxvd3MuCisJCXNheV9jb2xvciAiIiAiIyBydW4gJHRlc3RfY291bnQ6ICRkZXNjciAoJCopIgorCQkjIEV4cG9ydCBURVNUX0RJUkVDVE9SWSwgVFJBU0hfRElSRUNUT1JZIGFuZCBHSVRfVEVTVF9MT05HCisJCSMgdG8gYmUgYWJsZSB0byB1c2UgdGhlbSBpbiBzY3JpcHQKKwkJZXhwb3J0IFRFU1RfRElSRUNUT1JZIFRSQVNIX0RJUkVDVE9SWSBHSVRfVEVTVF9MT05HCisJCSMgUnVuIGNvbW1hbmQ7IHJlZGlyZWN0IGl0cyBzdGRlcnIgdG8gJjQgYXMgaW4KKwkJIyB0ZXN0X3J1bl8sIGJ1dCBrZWVwIGl0cyBzdGRvdXQgb24gb3VyIHN0ZG91dCBldmVuIGluCisJCSMgbm9uLXZlcmJvc2UgbW9kZS4KKwkJIiRAIiAyPiY0CisJCWlmIHRlc3QgIiQ/IiA9IDAKKwkJdGhlbgorCQkJaWYgdGVzdCAkdGVzdF9leHRlcm5hbF9oYXNfdGFwIC1lcSAwOyB0aGVuCisJCQkJdGVzdF9va18gIiRkZXNjciIKKwkJCWVsc2UKKwkJCQlzYXlfY29sb3IgIiIgIiMgdGVzdF9leHRlcm5hbCB0ZXN0ICRkZXNjciB3YXMgb2siCisJCQkJdGVzdF9zdWNjZXNzPSQoKCR0ZXN0X3N1Y2Nlc3MgKyAxKSkKKwkJCWZpCisJCWVsc2UKKwkJCWlmIHRlc3QgJHRlc3RfZXh0ZXJuYWxfaGFzX3RhcCAtZXEgMDsgdGhlbgorCQkJCXRlc3RfZmFpbHVyZV8gIiRkZXNjciIgIiRAIgorCQkJZWxzZQorCQkJCXNheV9jb2xvciBlcnJvciAiIyB0ZXN0X2V4dGVybmFsIHRlc3QgJGRlc2NyIGZhaWxlZDogJEAiCisJCQkJdGVzdF9mYWlsdXJlPSQoKCR0ZXN0X2ZhaWx1cmUgKyAxKSkKKwkJCWZpCisJCWZpCisJZmkKK30KKworIyBMaWtlIHRlc3RfZXh0ZXJuYWwsIGJ1dCBpbiBhZGRpdGlvbiB0ZXN0cyB0aGF0IHRoZSBjb21tYW5kIGdlbmVyYXRlZAorIyBubyBvdXRwdXQgb24gc3RkZXJyLgordGVzdF9leHRlcm5hbF93aXRob3V0X3N0ZGVyciAoKSB7CisJIyBUaGUgdGVtcG9yYXJ5IGZpbGUgaGFzIG5vIChhbmQgbXVzdCBoYXZlIG5vKSBzZWN1cml0eQorCSMgaW1wbGljYXRpb25zLgorCXRtcD0ke1RNUERJUjotL3RtcH0KKwlzdGRlcnI9IiR0bXAvZ2l0LWV4dGVybmFsLXN0ZGVyci4kJC50bXAiCisJdGVzdF9leHRlcm5hbCAiJEAiIDQ+ICIkc3RkZXJyIgorCXRlc3QgLWYgIiRzdGRlcnIiIHx8IGVycm9yICJJbnRlcm5hbCBlcnJvcjogJHN0ZGVyciBkaXNhcHBlYXJlZC4iCisJZGVzY3I9Im5vIHN0ZGVycjogJDEiCisJc2hpZnQKKwlzYXkgPiYzICIjIGV4cGVjdGluZyBubyBzdGRlcnIgZnJvbSBwcmV2aW91cyBjb21tYW5kIgorCWlmIHRlc3QgISAtcyAiJHN0ZGVyciIKKwl0aGVuCisJCXJtICIkc3RkZXJyIgorCisJCWlmIHRlc3QgJHRlc3RfZXh0ZXJuYWxfaGFzX3RhcCAtZXEgMDsgdGhlbgorCQkJdGVzdF9va18gIiRkZXNjciIKKwkJZWxzZQorCQkJc2F5X2NvbG9yICIiICIjIHRlc3RfZXh0ZXJuYWxfd2l0aG91dF9zdGRlcnIgdGVzdCAkZGVzY3Igd2FzIG9rIgorCQkJdGVzdF9zdWNjZXNzPSQoKCR0ZXN0X3N1Y2Nlc3MgKyAxKSkKKwkJZmkKKwllbHNlCisJCWlmIHRlc3QgIiR2ZXJib3NlIiA9IHQKKwkJdGhlbgorCQkJb3V0cHV0PSQoZWNobzsgZWNobyAiIyBTdGRlcnIgaXM6IjsgY2F0ICIkc3RkZXJyIikKKwkJZWxzZQorCQkJb3V0cHV0PQorCQlmaQorCQkjIHJtIGZpcnN0IGluIGNhc2UgdGVzdF9mYWlsdXJlIGV4aXRzLgorCQlybSAiJHN0ZGVyciIKKwkJaWYgdGVzdCAkdGVzdF9leHRlcm5hbF9oYXNfdGFwIC1lcSAwOyB0aGVuCisJCQl0ZXN0X2ZhaWx1cmVfICIkZGVzY3IiICIkQCIgIiRvdXRwdXQiCisJCWVsc2UKKwkJCXNheV9jb2xvciBlcnJvciAiIyB0ZXN0X2V4dGVybmFsX3dpdGhvdXRfc3RkZXJyIHRlc3QgJGRlc2NyIGZhaWxlZDogJEA6ICRvdXRwdXQiCisJCQl0ZXN0X2ZhaWx1cmU9JCgoJHRlc3RfZmFpbHVyZSArIDEpKQorCQlmaQorCWZpCit9CisKKyMgZGVidWdnaW5nLWZyaWVuZGx5IGFsdGVybmF0aXZlcyB0byAidGVzdCBbLWZ8LWR8LWVdIgorIyBUaGUgY29tbWFuZHMgdGVzdCB0aGUgZXhpc3RlbmNlIG9yIG5vbi1leGlzdGVuY2Ugb2YgJDEuICQyIGNhbiBiZQorIyBnaXZlbiB0byBwcm92aWRlIGEgbW9yZSBwcmVjaXNlIGRpYWdub3Npcy4KK3Rlc3RfcGF0aF9pc19maWxlICgpIHsKKwlpZiAhIHRlc3QgLWYgIiQxIgorCXRoZW4KKwkJZWNobyAiRmlsZSAkMSBkb2Vzbid0IGV4aXN0LiAkMiIKKwkJZmFsc2UKKwlmaQorfQorCit0ZXN0X3BhdGhfaXNfZGlyICgpIHsKKwlpZiAhIHRlc3QgLWQgIiQxIgorCXRoZW4KKwkJZWNobyAiRGlyZWN0b3J5ICQxIGRvZXNuJ3QgZXhpc3QuICQyIgorCQlmYWxzZQorCWZpCit9CisKK3Rlc3RfcGF0aF9leGlzdHMgKCkgeworCWlmICEgdGVzdCAtZSAiJDEiCisJdGhlbgorCQllY2hvICJQYXRoICQxIGRvZXNuJ3QgZXhpc3QuICQyIgorCQlmYWxzZQorCWZpCit9CisKKyMgQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBleGlzdHMgYW5kIGlzIGVtcHR5IGFzIGV4cGVjdGVkLCBiYXJmIG90aGVyd2lzZS4KK3Rlc3RfZGlyX2lzX2VtcHR5ICgpIHsKKwl0ZXN0X3BhdGhfaXNfZGlyICIkMSIgJiYKKwlpZiB0ZXN0IC1uICIkKGxzIC1hMSAiJDEiIHwgZWdyZXAgLXYgJ15cLlwuPyQnKSIKKwl0aGVuCisJCWVjaG8gIkRpcmVjdG9yeSAnJDEnIGlzIG5vdCBlbXB0eSwgaXQgY29udGFpbnM6IgorCQlscyAtbGEgIiQxIgorCQlyZXR1cm4gMQorCWZpCit9CisKKyMgQ2hlY2sgaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBoYXMgYSBzaXplIGdyZWF0ZXIgdGhhbiB6ZXJvCit0ZXN0X2ZpbGVfbm90X2VtcHR5ICgpIHsKKwlpZiAhIHRlc3QgLXMgIiQxIgorCXRoZW4KKwkJZWNobyAiJyQxJyBpcyBub3QgYSBub24tZW1wdHkgZmlsZS4iCisJCWZhbHNlCisJZmkKK30KKwordGVzdF9wYXRoX2lzX21pc3NpbmcgKCkgeworCWlmIHRlc3QgLWUgIiQxIgorCXRoZW4KKwkJZWNobyAiUGF0aCBleGlzdHM6IgorCQlscyAtbGQgIiQxIgorCQlpZiB0ZXN0ICQjIC1nZSAxCisJCXRoZW4KKwkJCWVjaG8gIiQqIgorCQlmaQorCQlmYWxzZQorCWZpCit9CisKKyMgdGVzdF9saW5lX2NvdW50IGNoZWNrcyB0aGF0IGEgZmlsZSBoYXMgdGhlIG51bWJlciBvZiBsaW5lcyBpdAorIyBvdWdodCB0by4gRm9yIGV4YW1wbGU6CisjCisjCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb2R1Y2UgZXhhY3RseSBvbmUgbGluZSBvZiBvdXRwdXQnICcKKyMJCWRvIHNvbWV0aGluZyA+b3V0cHV0ICYmCisjCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dHB1dAorIwknCisjCisjIGlzIGxpa2UgInRlc3QgJCh3YyAtbCA8b3V0cHV0KSA9IDEiIGV4Y2VwdCB0aGF0IGl0IHBhc3NlcyB0aGUKKyMgb3V0cHV0IHRocm91Z2ggd2hlbiB0aGUgbnVtYmVyIG9mIGxpbmVzIGlzIHdyb25nLgorCit0ZXN0X2xpbmVfY291bnQgKCkgeworCWlmIHRlc3QgJCMgIT0gMworCXRoZW4KKwkJQlVHICJub3QgMyBwYXJhbWV0ZXJzIHRvIHRlc3RfbGluZV9jb3VudCIKKwllbGlmICEgdGVzdCAkKHdjIC1sIDwiJDMiKSAiJDEiICIkMiIKKwl0aGVuCisJCWVjaG8gInRlc3RfbGluZV9jb3VudDogbGluZSBjb3VudCBmb3IgJDMgISQxICQyIgorCQljYXQgIiQzIgorCQlyZXR1cm4gMQorCWZpCit9CisKKyMgUmV0dXJucyBzdWNjZXNzIGlmIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBrZXl3b3JkcyAoJDEpIGNvbnRhaW5zIGEKKyMgZ2l2ZW4ga2V5d29yZCAoJDIpLgorIyBFeGFtcGxlczoKKyMgYGxpc3RfY29udGFpbnMgImZvbyxiYXIiIGJhcmAgcmV0dXJucyAwCisjIGBsaXN0X2NvbnRhaW5zICJmb28iIGJhcmAgcmV0dXJucyAxCisKK2xpc3RfY29udGFpbnMgKCkgeworCWNhc2UgIiwkMSwiIGluCisJKiwkMiwqKQorCQlyZXR1cm4gMAorCQk7OworCWVzYWMKKwlyZXR1cm4gMQorfQorCisjIFRoaXMgaXMgbm90IGFtb25nIHRvcC1sZXZlbCAodGVzdF9leHBlY3Rfc3VjY2VzcyB8IHRlc3RfZXhwZWN0X2ZhaWx1cmUpCisjIGJ1dCBpcyBhIHByZWZpeCB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSB0ZXN0IHNjcmlwdCwgbGlrZToKKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGxhaW4gYW5kIGRpZScgJworIyAgICAgICAgICAgZG8gc29tZXRoaW5nICYmCisjICAgICAgICAgICBkbyBzb21ldGhpbmcgZWxzZSAmJgorIwkgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC4uL291dGVyc3BhY2UKKyMJJworIworIyBXcml0aW5nIHRoaXMgYXMgIiEgZ2l0IGNoZWNrb3V0IC4uL291dGVyc3BhY2UiIGlzIHdyb25nLCBiZWNhdXNlCisjIHRoZSBmYWlsdXJlIGNvdWxkIGJlIGR1ZSB0byBhIHNlZ3YuICBXZSB3YW50IGEgY29udHJvbGxlZCBmYWlsdXJlLgorIworIyBBY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKyMKKyMgICBvaz08c2lnbmFsLW5hbWU+Wyw8Li4uPl06CisjICAgICBEb24ndCB0cmVhdCBhbiBleGl0IGNhdXNlZCBieSB0aGUgZ2l2ZW4gc2lnbmFsIGFzIGVycm9yLgorIyAgICAgTXVsdGlwbGUgc2lnbmFscyBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QuCisjICAgICBDdXJyZW50bHkgcmVjb2duaXplZCBzaWduYWwgbmFtZXMgYXJlOiBzaWdwaXBlLCBzdWNjZXNzLgorIyAgICAgKERvbid0IHVzZSAnc3VjY2VzcycsIHVzZSAndGVzdF9taWdodF9mYWlsJyBpbnN0ZWFkLikKKwordGVzdF9tdXN0X2ZhaWwgKCkgeworCWNhc2UgIiQxIiBpbgorCW9rPSopCisJCV90ZXN0X29rPSR7MSNvaz19CisJCXNoaWZ0CisJCTs7CisJKikKKwkJX3Rlc3Rfb2s9CisJCTs7CisJZXNhYworCSIkQCIgMj4mNworCWV4aXRfY29kZT0kPworCWlmIHRlc3QgJGV4aXRfY29kZSAtZXEgMCAmJiAhIGxpc3RfY29udGFpbnMgIiRfdGVzdF9vayIgc3VjY2VzcworCXRoZW4KKwkJZWNobyA+JjQgInRlc3RfbXVzdF9mYWlsOiBjb21tYW5kIHN1Y2NlZWRlZDogJCoiCisJCXJldHVybiAxCisJZWxpZiB0ZXN0X21hdGNoX3NpZ25hbCAxMyAkZXhpdF9jb2RlICYmIGxpc3RfY29udGFpbnMgIiRfdGVzdF9vayIgc2lncGlwZQorCXRoZW4KKwkJcmV0dXJuIDAKKwllbGlmIHRlc3QgJGV4aXRfY29kZSAtZ3QgMTI5ICYmIHRlc3QgJGV4aXRfY29kZSAtbGUgMTkyCisJdGhlbgorCQllY2hvID4mNCAidGVzdF9tdXN0X2ZhaWw6IGRpZWQgYnkgc2lnbmFsICQoKCRleGl0X2NvZGUgLSAxMjgpKTogJCoiCisJCXJldHVybiAxCisJZWxpZiB0ZXN0ICRleGl0X2NvZGUgLWVxIDEyNworCXRoZW4KKwkJZWNobyA+JjQgInRlc3RfbXVzdF9mYWlsOiBjb21tYW5kIG5vdCBmb3VuZDogJCoiCisJCXJldHVybiAxCisJZWxpZiB0ZXN0ICRleGl0X2NvZGUgLWVxIDEyNgorCXRoZW4KKwkJZWNobyA+JjQgInRlc3RfbXVzdF9mYWlsOiB2YWxncmluZCBlcnJvcjogJCoiCisJCXJldHVybiAxCisJZmkKKwlyZXR1cm4gMAorfSA3PiYyIDI+JjQKKworIyBTaW1pbGFyIHRvIHRlc3RfbXVzdF9mYWlsLCBidXQgdG9sZXJhdGVzIHN1Y2Nlc3MsIHRvby4gIFRoaXMgaXMKKyMgbWVhbnQgdG8gYmUgdXNlZCBpbiBjb250ZXh0cyBsaWtlOgorIworIwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdzb21lIGNvbW1hbmQgd29ya3Mgd2l0aG91dCBjb25maWd1cmF0aW9uJyAnCisjCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGFsbC5jb25maWd1cmF0aW9uICYmCisjCQlkbyBzb21ldGhpbmcKKyMJJworIworIyBXcml0aW5nICJnaXQgY29uZmlnIC0tdW5zZXQgYWxsLmNvbmZpZ3VyYXRpb24gfHwgOiIgd291bGQgYmUgd3JvbmcsCisjIGJlY2F1c2Ugd2Ugd2FudCB0byBub3RpY2UgaWYgaXQgZmFpbHMgZHVlIHRvIHNlZ3YuCisjCisjIEFjY2VwdHMgdGhlIHNhbWUgb3B0aW9ucyBhcyB0ZXN0X211c3RfZmFpbC4KKwordGVzdF9taWdodF9mYWlsICgpIHsKKwl0ZXN0X211c3RfZmFpbCBvaz1zdWNjZXNzICIkQCIgMj4mNworfSA3PiYyIDI+JjQKKworIyBTaW1pbGFyIHRvIHRlc3RfbXVzdF9mYWlsIGFuZCB0ZXN0X21pZ2h0X2ZhaWwsIGJ1dCBjaGVjayB0aGF0IGEKKyMgZ2l2ZW4gY29tbWFuZCBleGl0ZWQgd2l0aCBhIGdpdmVuIGV4aXQgY29kZS4gTWVhbnQgdG8gYmUgdXNlZCBhczoKKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAnTWVyZ2Ugd2l0aCBkL2YgY29uZmxpY3RzJyAnCisjCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG1lcmdlICJtZXJnZSBtc2ciIEIgbWFzdGVyCisjCScKKwordGVzdF9leHBlY3RfY29kZSAoKSB7CisJd2FudF9jb2RlPSQxCisJc2hpZnQKKwkiJEAiIDI+JjcKKwlleGl0X2NvZGU9JD8KKwlpZiB0ZXN0ICRleGl0X2NvZGUgPSAkd2FudF9jb2RlCisJdGhlbgorCQlyZXR1cm4gMAorCWZpCisKKwllY2hvID4mNCAidGVzdF9leHBlY3RfY29kZTogY29tbWFuZCBleGl0ZWQgd2l0aCAkZXhpdF9jb2RlLCB3ZSB3YW50ZWQgJHdhbnRfY29kZSAkKiIKKwlyZXR1cm4gMQorfSA3PiYyIDI+JjQKKworIyB0ZXN0X2NtcCBpcyBhIGhlbHBlciBmdW5jdGlvbiB0byBjb21wYXJlIGFjdHVhbCBhbmQgZXhwZWN0ZWQgb3V0cHV0LgorIyBZb3UgY2FuIHVzZSBpdCBsaWtlOgorIworIwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb28gd29ya3MnICcKKyMJCWVjaG8gZXhwZWN0ZWQgPmV4cGVjdGVkICYmCisjCQlmb28gPmFjdHVhbCAmJgorIwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisjCScKKyMKKyMgVGhpcyBjb3VsZCBiZSB3cml0dGVuIGFzIGVpdGhlciAiY21wIiBvciAiZGlmZiAtdSIsIGJ1dDoKKyMgLSBjbXAncyBvdXRwdXQgaXMgbm90IG5lYXJseSBhcyBlYXN5IHRvIHJlYWQgYXMgZGlmZiAtdQorIyAtIG5vdCBhbGwgZGlmZiB2ZXJzaW9ucyB1bmRlcnN0YW5kICItdSIKKwordGVzdF9jbXAoKSB7CisJZXZhbCAiJEdJVF9URVNUX0NNUCIgJyIkQCInCit9CisKKyMgQ2hlY2sgdGhhdCB0aGUgZ2l2ZW4gY29uZmlnIGtleSBoYXMgdGhlIGV4cGVjdGVkIHZhbHVlLgorIworIyAgICB0ZXN0X2NtcF9jb25maWcgWy1DIDxkaXI+XSA8ZXhwZWN0ZWQtdmFsdWU+CisjICAgICAgICAgICAgICAgICAgICBbPGdpdC1jb25maWctb3B0aW9ucz4uLi5dIDxjb25maWcta2V5PgorIworIyBmb3IgZXhhbXBsZSB0byBjaGVjayB0aGF0IHRoZSB2YWx1ZSBvZiBjb3JlLmJhciBpcyBmb28KKyMKKyMgICAgdGVzdF9jbXBfY29uZmlnIGZvbyBjb3JlLmJhcgorIwordGVzdF9jbXBfY29uZmlnKCkgeworCWxvY2FsIEdEICYmCisJaWYgdGVzdCAiJDEiID0gIi1DIgorCXRoZW4KKwkJc2hpZnQgJiYKKwkJR0Q9Ii1DICQxIiAmJgorCQlzaGlmdAorCWZpICYmCisJcHJpbnRmICIlc1xuIiAiJDEiID5leHBlY3QuY29uZmlnICYmCisJc2hpZnQgJiYKKwlnaXQgJEdEIGNvbmZpZyAiJEAiID5hY3R1YWwuY29uZmlnICYmCisJdGVzdF9jbXAgZXhwZWN0LmNvbmZpZyBhY3R1YWwuY29uZmlnCit9CisKKyMgdGVzdF9jbXBfYmluIC0gaGVscGVyIHRvIGNvbXBhcmUgYmluYXJ5IGZpbGVzCisKK3Rlc3RfY21wX2JpbigpIHsKKwljbXAgIiRAIgorfQorCisjIFVzZSB0aGlzIGluc3RlYWQgb2YgdGVzdF9jbXAgdG8gY29tcGFyZSBmaWxlcyB0aGF0IGNvbnRhaW4gZXhwZWN0ZWQgYW5kCisjIGFjdHVhbCBvdXRwdXQgZnJvbSBnaXQgY29tbWFuZHMgdGhhdCBjYW4gYmUgdHJhbnNsYXRlZC4gIFdoZW4gcnVubmluZworIyB1bmRlciBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTiB0aGlzIHByZXRlbmRzIHRoYXQgdGhlIGNvbW1hbmQgcHJvZHVjZWQgZXhwZWN0ZWQKKyMgcmVzdWx0cy4KK3Rlc3RfaTE4bmNtcCAoKSB7CisJISB0ZXN0X2hhdmVfcHJlcmVxIENfTE9DQUxFX09VVFBVVCB8fCB0ZXN0X2NtcCAiJEAiCit9CisKKyMgVXNlIHRoaXMgaW5zdGVhZCBvZiAiZ3JlcCBleHBlY3RlZC1zdHJpbmcgYWN0dWFsIiB0byBzZWUgaWYgdGhlCisjIG91dHB1dCBmcm9tIGEgZ2l0IGNvbW1hbmQgdGhhdCBjYW4gYmUgdHJhbnNsYXRlZCBlaXRoZXIgY29udGFpbnMgYW4KKyMgZXhwZWN0ZWQgc3RyaW5nLCBvciBkb2VzIG5vdCBjb250YWluIGFuIHVud2FudGVkIG9uZS4gIFdoZW4gcnVubmluZworIyB1bmRlciBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTiB0aGlzIHByZXRlbmRzIHRoYXQgdGhlIGNvbW1hbmQgcHJvZHVjZWQgZXhwZWN0ZWQKKyMgcmVzdWx0cy4KK3Rlc3RfaTE4bmdyZXAgKCkgeworCWV2YWwgImxhc3RfYXJnPVwkeyQjfSIKKworCXRlc3QgLWYgIiRsYXN0X2FyZyIgfHwKKwlCVUcgInRlc3RfaTE4bmdyZXAgcmVxdWlyZXMgYSBmaWxlIHRvIHJlYWQgYXMgdGhlIGxhc3QgcGFyYW1ldGVyIgorCisJaWYgdGVzdCAkIyAtbHQgMiB8fAorCSAgIHsgdGVzdCAieCEiID0gIngkMSIgJiYgdGVzdCAkIyAtbHQgMyA7IH0KKwl0aGVuCisJCUJVRyAidG9vIGZldyBwYXJhbWV0ZXJzIHRvIHRlc3RfaTE4bmdyZXAiCisJZmkKKworCWlmIHRlc3RfaGF2ZV9wcmVyZXEgIUNfTE9DQUxFX09VVFBVVAorCXRoZW4KKwkJIyBwcmV0ZW5kIHN1Y2Nlc3MKKwkJcmV0dXJuIDAKKwlmaQorCisJaWYgdGVzdCAieCEiID0gIngkMSIKKwl0aGVuCisJCXNoaWZ0CisJCSEgZ3JlcCAiJEAiICYmIHJldHVybiAwCisKKwkJZWNobyA+JjQgImVycm9yOiAnISBncmVwICRAJyBkaWQgZmluZCBhIG1hdGNoIGluOiIKKwllbHNlCisJCWdyZXAgIiRAIiAmJiByZXR1cm4gMAorCisJCWVjaG8gPiY0ICJlcnJvcjogJ2dyZXAgJEAnIGRpZG4ndCBmaW5kIGEgbWF0Y2ggaW46IgorCWZpCisKKwlpZiB0ZXN0IC1zICIkbGFzdF9hcmciCisJdGhlbgorCQljYXQgPiY0ICIkbGFzdF9hcmciCisJZWxzZQorCQllY2hvID4mNCAiPEZpbGUgJyRsYXN0X2FyZycgaXMgZW1wdHk+IgorCWZpCisKKwlyZXR1cm4gMQorfQorCisjIENhbGwgYW55IGNvbW1hbmQgIiRAIiBidXQgYmUgbW9yZSB2ZXJib3NlIGFib3V0IGl0cworIyBmYWlsdXJlLiBUaGlzIGlzIGhhbmR5IGZvciBjb21tYW5kcyBsaWtlICJ0ZXN0IiB3aGljaCBkbworIyBub3Qgb3V0cHV0IGFueXRoaW5nIHdoZW4gdGhleSBmYWlsLgordmVyYm9zZSAoKSB7CisJIiRAIiAmJiByZXR1cm4gMAorCWVjaG8gPiY0ICJjb21tYW5kIGZhaWxlZDogJChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRAIikiCisJcmV0dXJuIDEKK30KKworIyBDaGVjayBpZiB0aGUgZmlsZSBleHBlY3RlZCB0byBiZSBlbXB0eSBpcyBpbmRlZWQgZW1wdHksIGFuZCBiYXJmcworIyBvdGhlcndpc2UuCisKK3Rlc3RfbXVzdF9iZV9lbXB0eSAoKSB7CisJdGVzdF9wYXRoX2lzX2ZpbGUgIiQxIiAmJgorCWlmIHRlc3QgLXMgIiQxIgorCXRoZW4KKwkJZWNobyAiJyQxJyBpcyBub3QgZW1wdHksIGl0IGNvbnRhaW5zOiIKKwkJY2F0ICIkMSIKKwkJcmV0dXJuIDEKKwlmaQorfQorCisjIFRlc3RzIHRoYXQgaXRzIHR3byBwYXJhbWV0ZXJzIHJlZmVyIHRvIHRoZSBzYW1lIHJldmlzaW9uLCBvciBpZiAnIScgaXMKKyMgcHJvdmlkZWQgZmlyc3QsIHRoYXQgaXRzIG90aGVyIHR3byBwYXJhbWV0ZXJzIHJlZmVyIHRvIGRpZmZlcmVudAorIyByZXZpc2lvbnMuCit0ZXN0X2NtcF9yZXYgKCkgeworCWxvY2FsIG9wPSc9JyB3cm9uZ19yZXN1bHQ9ZGlmZmVyZW50CisKKwlpZiB0ZXN0ICQjIC1nZSAxICYmIHRlc3QgIngkMSIgPSAneCEnCisJdGhlbgorCSAgICBvcD0nIT0nCisJICAgIHdyb25nX3Jlc3VsdD0ndGhlIHNhbWUnCisJICAgIHNoaWZ0CisJZmkKKwlpZiB0ZXN0ICQjICE9IDIKKwl0aGVuCisJCWVycm9yICJidWcgaW4gdGhlIHRlc3Qgc2NyaXB0OiB0ZXN0X2NtcF9yZXYgcmVxdWlyZXMgdHdvIHJldmlzaW9ucywgYnV0IGdvdCAkIyIKKwllbHNlCisJCWxvY2FsIHIxIHIyCisJCXIxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDEiKSAmJgorCQlyMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQyIikgfHwgcmV0dXJuIDEKKworCQlpZiAhIHRlc3QgIiRyMSIgIiRvcCIgIiRyMiIKKwkJdGhlbgorCQkJY2F0ID4mNCA8PC1FT0YKKwkJCWVycm9yOiB0d28gcmV2aXNpb25zIHBvaW50IHRvICR3cm9uZ19yZXN1bHQgb2JqZWN0czoKKwkJCSAgJyQxJzogJHIxCisJCQkgICckMic6ICRyMgorCQkJRU9GCisJCQlyZXR1cm4gMQorCQlmaQorCWZpCit9CisKKyMgQ29tcGFyZSBwYXRocyByZXNwZWN0aW5nIGNvcmUuaWdub3JlQ2FzZQordGVzdF9jbXBfZnNwYXRoICgpIHsKKwlpZiB0ZXN0ICJ4JDEiID0gIngkMiIKKwl0aGVuCisJCXJldHVybiAwCisJZmkKKworCWlmIHRlc3QgdHJ1ZSAhPSAiJChnaXQgY29uZmlnIC0tZ2V0IC0tdHlwZT1ib29sIGNvcmUuaWdub3JlY2FzZSkiCisJdGhlbgorCQlyZXR1cm4gMQorCWZpCisKKwl0ZXN0ICJ4JChlY2hvICIkMSIgfCB0ciBBLVogYS16KSIgPSAgIngkKGVjaG8gIiQyIiB8IHRyIEEtWiBhLXopIgorfQorCisjIFByaW50IGEgc2VxdWVuY2Ugb2YgaW50ZWdlcnMgaW4gaW5jcmVhc2luZyBvcmRlciwgZWl0aGVyIHdpdGgKKyMgdHdvIGFyZ3VtZW50cyAoc3RhcnQgYW5kIGVuZCk6CisjCisjICAgICB0ZXN0X3NlcSAxIDUgLS0gb3V0cHV0cyAxIDIgMyA0IDUgb25lIGxpbmUgYXQgYSB0aW1lCisjCisjIG9yIHdpdGggb25lIGFyZ3VtZW50IChlbmQpLCBpbiB3aGljaCBjYXNlIGl0IHN0YXJ0cyBjb3VudGluZworIyBmcm9tIDEuCisKK3Rlc3Rfc2VxICgpIHsKKwljYXNlICQjIGluCisJMSkJc2V0IDEgIiRAIiA7OworCTIpCTs7CisJKikJQlVHICJub3QgMSBvciAyIHBhcmFtZXRlcnMgdG8gdGVzdF9zZXEiIDs7CisJZXNhYworCXRlc3Rfc2VxX2NvdW50ZXJfXz0kMQorCXdoaWxlIHRlc3QgIiR0ZXN0X3NlcV9jb3VudGVyX18iIC1sZSAiJDIiCisJZG8KKwkJZWNobyAiJHRlc3Rfc2VxX2NvdW50ZXJfXyIKKwkJdGVzdF9zZXFfY291bnRlcl9fPSQoKCAkdGVzdF9zZXFfY291bnRlcl9fICsgMSApKQorCWRvbmUKK30KKworIyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHNjaGVkdWxlIHNvbWUgY29tbWFuZHMgdG8gYmUgcnVuCisjIHVuY29uZGl0aW9uYWxseSBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHRvIHJlc3RvcmUgc2FuaXR5OgorIworIwl0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNvcmUuY2Fwc2xvY2snICcKKyMJCWdpdCBjb25maWcgY29yZS5jYXBzbG9jayB0cnVlICYmCisjCQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjb25maWcgLS11bnNldCBjb3JlLmNhcHNsb2NrIiAmJgorIwkJaGVsbG8gd29ybGQKKyMJJworIworIyBUaGF0IHdvdWxkIGJlIHJvdWdobHkgZXF1aXZhbGVudCB0bworIworIwl0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNvcmUuY2Fwc2xvY2snICcKKyMJCWdpdCBjb25maWcgY29yZS5jYXBzbG9jayB0cnVlICYmCisjCQloZWxsbyB3b3JsZAorIwkJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUuY2Fwc2xvY2sKKyMJJworIworIyBleGNlcHQgdGhhdCB0aGUgZ3JlZXRpbmcgYW5kIGNvbmZpZyAtLXVuc2V0IG11c3QgYm90aCBzdWNjZWVkIGZvcgorIyB0aGUgdGVzdCB0byBwYXNzLgorIworIyBOb3RlIHRoYXQgdW5kZXIgLS1pbW1lZGlhdGUgbW9kZSwgbm8gY2xlYW4tdXAgaXMgZG9uZSB0byBoZWxwIGRpYWdub3NlCisjIHdoYXQgd2VudCB3cm9uZy4KKwordGVzdF93aGVuX2ZpbmlzaGVkICgpIHsKKwkjIFdlIGNhbm5vdCBkZXRlY3Qgd2hlbiB3ZSBhcmUgaW4gYSBzdWJzaGVsbCBpbiBnZW5lcmFsLCBidXQgYnkKKwkjIGRvaW5nIHNvIG9uIEJhc2ggaXMgYmV0dGVyIHRoYW4gbm90aGluZyAodGhlIHRlc3Qgd2lsbAorCSMgc2lsZW50bHkgcGFzcyBvbiBvdGhlciBzaGVsbHMpLgorCXRlc3QgIiR7QkFTSF9TVUJTSEVMTC0wfSIgPSAwIHx8CisJQlVHICJ0ZXN0X3doZW5fZmluaXNoZWQgZG9lcyBub3RoaW5nIGluIGEgc3Vic2hlbGwiCisJdGVzdF9jbGVhbnVwPSJ7ICQqCisJCX0gJiYgKGV4aXQgXCJcJGV2YWxfcmV0XCIpOyBldmFsX3JldD1cJD87ICR0ZXN0X2NsZWFudXAiCit9CisKKyMgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBzY2hlZHVsZSBzb21lIGNvbW1hbmRzIHRvIGJlIHJ1bgorIyB1bmNvbmRpdGlvbmFsbHkgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBzY3JpcHQsIGUuZy4gdG8gc3RvcCBhIGRhZW1vbjoKKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBnaXQgZGFlbW9uJyAnCisjCQlnaXQgZGFlbW9uICYKKyMJCWRhZW1vbl9waWQ9JCEgJiYKKyMJCXRlc3RfYXRleGl0ICdraWxsICRkYWVtb25fcGlkJyAmJgorIwkJaGVsbG8gd29ybGQKKyMJJworIworIyBUaGUgY29tbWFuZHMgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRyYXNoIGRpcmVjdG9yeSBpcyByZW1vdmVkLAorIyBpLmUuIHRoZSBhdGV4aXQgY29tbWFuZHMgd2lsbCBzdGlsbCBiZSBhYmxlIHRvIGFjY2VzcyBhbnkgcGlkZmlsZXMgb3IKKyMgc29ja2V0IGZpbGVzLgorIworIyBOb3RlIHRoYXQgdGhlc2UgY29tbWFuZHMgd2lsbCBiZSBydW4gZXZlbiB3aGVuIGEgdGVzdCBzY3JpcHQgcnVuCisjIHdpdGggJy0taW1tZWRpYXRlJyBmYWlscy4gIEJlIGNhcmVmdWwgd2l0aCB5b3VyIGF0ZXhpdCBjb21tYW5kcyB0bworIyBtaW5pbWl6ZSBhbnkgY2hhbmdlcyB0byB0aGUgZmFpbGVkIHN0YXRlLgorCit0ZXN0X2F0ZXhpdCAoKSB7CisJIyBXZSBjYW5ub3QgZGV0ZWN0IHdoZW4gd2UgYXJlIGluIGEgc3Vic2hlbGwgaW4gZ2VuZXJhbCwgYnV0IGJ5CisJIyBkb2luZyBzbyBvbiBCYXNoIGlzIGJldHRlciB0aGFuIG5vdGhpbmcgKHRoZSB0ZXN0IHdpbGwKKwkjIHNpbGVudGx5IHBhc3Mgb24gb3RoZXIgc2hlbGxzKS4KKwl0ZXN0ICIke0JBU0hfU1VCU0hFTEwtMH0iID0gMCB8fAorCWVycm9yICJidWcgaW4gdGVzdCBzY3JpcHQ6IHRlc3RfYXRleGl0IGRvZXMgbm90aGluZyBpbiBhIHN1YnNoZWxsIgorCXRlc3RfYXRleGl0X2NsZWFudXA9InsgJCoKKwkJfSAmJiAoZXhpdCBcIlwkZXZhbF9yZXRcIik7IGV2YWxfcmV0PVwkPzsgJHRlc3RfYXRleGl0X2NsZWFudXAiCit9CisKKyMgTW9zdCB0ZXN0cyBjYW4gdXNlIHRoZSBjcmVhdGVkIHJlcG9zaXRvcnksIGJ1dCBzb21lIG1heSBuZWVkIHRvIGNyZWF0ZSBtb3JlLgorIyBVc2FnZTogdGVzdF9jcmVhdGVfcmVwbyA8ZGlyZWN0b3J5PgordGVzdF9jcmVhdGVfcmVwbyAoKSB7CisJdGVzdCAiJCMiID0gMSB8fAorCUJVRyAibm90IDEgcGFyYW1ldGVyIHRvIHRlc3QtY3JlYXRlLXJlcG8iCisJcmVwbz0iJDEiCisJbWtkaXIgLXAgIiRyZXBvIgorCSgKKwkJY2QgIiRyZXBvIiB8fCBlcnJvciAiQ2Fubm90IHNldHVwIHRlc3QgZW52aXJvbm1lbnQiCisJCSIke0dJVF9URVNUX0lOU1RBTExFRDotJEdJVF9FWEVDX1BBVEh9L2dpdCRYIiBpbml0IFwKKwkJCSItLXRlbXBsYXRlPSRHSVRfQlVJTERfRElSL3RlbXBsYXRlcy9ibHQvIiA+JjMgMj4mNCB8fAorCQllcnJvciAiY2Fubm90IHJ1biBnaXQgaW5pdCAtLSBoYXZlIHlvdSBidWlsdCB0aGluZ3MgeWV0PyIKKwkJbXYgLmdpdC9ob29rcyAuZ2l0L2hvb2tzLWRpc2FibGVkCisJKSB8fCBleGl0Cit9CisKKyMgVGhpcyBmdW5jdGlvbiBoZWxwcyBvbiBzeW1saW5rIGNoYWxsZW5nZWQgZmlsZSBzeXN0ZW1zIHdoZW4gaXQgaXMgbm90CisjIGltcG9ydGFudCB0aGF0IHRoZSBmaWxlIHN5c3RlbSBlbnRyeSBpcyBhIHN5bWJvbGljIGxpbmsuCisjIFVzZSB0ZXN0X2xuX3NfYWRkIGluc3RlYWQgb2YgImxuIC1zIHggeSAmJiBnaXQgYWRkIHkiIHRvIGFkZCBhCisjIHN5bWJvbGljIGxpbmsgZW50cnkgeSB0byB0aGUgaW5kZXguCisKK3Rlc3RfbG5fc19hZGQgKCkgeworCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKKwl0aGVuCisJCWxuIC1zICIkMSIgIiQyIiAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkICIkMiIKKwllbHNlCisJCXByaW50ZiAnJXMnICIkMSIgPiIkMiIgJiYKKwkJbG5fc19vYmo9JChnaXQgaGFzaC1vYmplY3QgLXcgIiQyIikgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMjAwMDAgJGxuX3Nfb2JqICIkMiIgJiYKKwkJIyBwaWNrIHVwIHN0YXQgaW5mbyBmcm9tIHRoZSBmaWxlCisJCWdpdCB1cGRhdGUtaW5kZXggIiQyIgorCWZpCit9CisKKyMgVGhpcyBmdW5jdGlvbiB3cml0ZXMgb3V0IGl0cyBwYXJhbWV0ZXJzLCBvbmUgcGVyIGxpbmUKK3Rlc3Rfd3JpdGVfbGluZXMgKCkgeworCXByaW50ZiAiJXNcbiIgIiRAIgorfQorCitwZXJsICgpIHsKKwljb21tYW5kICIkUEVSTF9QQVRIIiAiJEAiIDI+JjcKK30gNz4mMiAyPiY0CisKKyMgR2l2ZW4gdGhlIG5hbWUgb2YgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCBhIGJvb2wgdmFsdWUsIG5vcm1hbGl6ZQorIyBpdHMgdmFsdWUgdG8gYSAwICh0cnVlKSBvciAxIChmYWxzZSBvciBlbXB0eSBzdHJpbmcpIHJldHVybiBjb2RlLgorIworIyAgIHRlc3RfYm9vbF9lbnYgR0lUX1RFU1RfSFRUUEQgPGRlZmF1bHQtdmFsdWU+CisjCisjIFJldHVybiB3aXRoIGNvZGUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gZGVmYXVsdCB2YWx1ZSBpZiB0aGUgdmFyaWFibGUKKyMgaXMgdW5zZXQuCisjIEFib3J0IHRoZSB0ZXN0IHNjcmlwdCBpZiBlaXRoZXIgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBvciB0aGUgZGVmYXVsdAorIyBhcmUgbm90IHZhbGlkIGJvb2wgdmFsdWVzLgorCit0ZXN0X2Jvb2xfZW52ICgpIHsKKwlpZiB0ZXN0ICQjICE9IDIKKwl0aGVuCisJCUJVRyAidGVzdF9ib29sX2VudiByZXF1aXJlcyB0d28gcGFyYW1ldGVycyAodmFyaWFibGUgbmFtZSBhbmQgZGVmYXVsdCB2YWx1ZSkiCisJZmkKKworCWdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9IiQyIiAtLWV4aXQtY29kZSAiJDEiCisJcmV0PSQ/CisJY2FzZSAkcmV0IGluCisJMHwxKQkjIHVuc2V0IG9yIHZhbGlkIGJvb2wgdmFsdWUKKwkJOzsKKwkqKQkjIGludmFsaWQgYm9vbCB2YWx1ZSBvciBzb21ldGhpbmcgdW5leHBlY3RlZAorCQllcnJvciA+JjcgInRlc3RfYm9vbF9lbnYgcmVxdWlyZXMgYm9vbCB2YWx1ZXMgYm90aCBmb3IgXCQkMSBhbmQgZm9yIHRoZSBkZWZhdWx0IGZhbGxiYWNrIgorCQk7OworCWVzYWMKKwlyZXR1cm4gJHJldAorfQorCisjIEV4aXQgdGhlIHRlc3Qgc3VpdGUsIGVpdGhlciBieSBza2lwcGluZyBhbGwgcmVtYWluaW5nIHRlc3RzIG9yIGJ5CisjIGV4aXRpbmcgd2l0aCBhbiBlcnJvci4gSWYgb3VyIHByZXJlcXVpc2l0ZSB2YXJpYWJsZSAkMSBmYWxscyBiYWNrCisjIG9uIGEgZGVmYXVsdCBhc3N1bWUgd2Ugd2VyZSBvcHBvcnR1bmlzdGljYWxseSB0cnlpbmcgdG8gc2V0IHVwIHNvbWUKKyMgdGVzdHMgYW5kIHdlIHNraXAuIElmIGl0IGlzIGV4cGxpY2l0bHkgInRydWUiLCB0aGVuIHdlIHJlcG9ydCBhIGZhaWx1cmUuCisjCisjIFRoZSBlcnJvci9za2lwIG1lc3NhZ2Ugc2hvdWxkIGJlIGdpdmVuIGJ5ICQyLgorIwordGVzdF9za2lwX29yX2RpZSAoKSB7CisJaWYgISB0ZXN0X2Jvb2xfZW52ICIkMSIgZmFsc2UKKwl0aGVuCisJCXNraXBfYWxsPSQyCisJCXRlc3RfZG9uZQorCWZpCisJZXJyb3IgIiQyIgorfQorCisjIFRoZSBmb2xsb3dpbmcgbWluZ3dfKiBmdW5jdGlvbnMgb2JleSBQT1NJWCBzaGVsbCBzeW50YXgsIGJ1dCBhcmUgYWN0dWFsbHkKKyMgYmFzaCBzY3JpcHRzLCBhbmQgYXJlIG1lYW50IHRvIGJlIHVzZWQgb25seSB3aXRoIGJhc2ggb24gV2luZG93cy4KKworIyBBIHRlc3RfY21wIGZ1bmN0aW9uIHRoYXQgdHJlYXRzIExGIGFuZCBDUkxGIGVxdWFsIGFuZCBhdm9pZHMgdG8gZm9yaworIyBkaWZmIHdoZW4gcG9zc2libGUuCittaW5nd190ZXN0X2NtcCAoKSB7CisJIyBSZWFkIHRleHQgaW50byBzaGVsbCB2YXJpYWJsZXMgYW5kIGNvbXBhcmUgdGhlbS4gSWYgdGhlIHJlc3VsdHMKKwkjIGFyZSBkaWZmZXJlbnQsIHVzZSByZWd1bGFyIGRpZmYgdG8gcmVwb3J0IHRoZSBkaWZmZXJlbmNlLgorCWxvY2FsIHRlc3RfY21wX2E9IHRlc3RfY21wX2I9CisKKwkjIFdoZW4gdGV4dCBjYW1lIGZyb20gc3RkaW4gKG9uZSBhcmd1bWVudCBpcyAnLScpIHdlIG11c3QgZmVlZCBpdAorCSMgdG8gZGlmZi4KKwlsb2NhbCBzdGRpbl9mb3JfZGlmZj0KKworCSMgU2luY2UgaXQgaXMgZGlmZmljdWx0IHRvIGRldGVjdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFuCisJIyBlbXB0eSBpbnB1dCBmaWxlIGFuZCBhIGZhaWx1cmUgdG8gcmVhZCB0aGUgZmlsZXMsIHdlIGdvIHN0cmFpZ2h0CisJIyB0byBkaWZmIGlmIG9uZSBvZiB0aGUgaW5wdXRzIGlzIGVtcHR5LgorCWlmIHRlc3QgLXMgIiQxIiAmJiB0ZXN0IC1zICIkMiIKKwl0aGVuCisJCSMgcmVndWxhciBjYXNlOiBib3RoIGZpbGVzIG5vbi1lbXB0eQorCQltaW5nd19yZWFkX2ZpbGVfc3RyaXBfY3JfIHRlc3RfY21wX2EgPCIkMSIKKwkJbWluZ3dfcmVhZF9maWxlX3N0cmlwX2NyXyB0ZXN0X2NtcF9iIDwiJDIiCisJZWxpZiB0ZXN0IC1zICIkMSIgJiYgdGVzdCAiJDIiID0gLQorCXRoZW4KKwkJIyByZWFkIDJuZCBmaWxlIGZyb20gc3RkaW4KKwkJbWluZ3dfcmVhZF9maWxlX3N0cmlwX2NyXyB0ZXN0X2NtcF9hIDwiJDEiCisJCW1pbmd3X3JlYWRfZmlsZV9zdHJpcF9jcl8gdGVzdF9jbXBfYgorCQlzdGRpbl9mb3JfZGlmZj0nPDw8IiR0ZXN0X2NtcF9iIicKKwllbGlmIHRlc3QgIiQxIiA9IC0gJiYgdGVzdCAtcyAiJDIiCisJdGhlbgorCQkjIHJlYWQgMXN0IGZpbGUgZnJvbSBzdGRpbgorCQltaW5nd19yZWFkX2ZpbGVfc3RyaXBfY3JfIHRlc3RfY21wX2EKKwkJbWluZ3dfcmVhZF9maWxlX3N0cmlwX2NyXyB0ZXN0X2NtcF9iIDwiJDIiCisJCXN0ZGluX2Zvcl9kaWZmPSc8PDwiJHRlc3RfY21wX2EiJworCWZpCisJdGVzdCAtbiAiJHRlc3RfY21wX2EiICYmCisJdGVzdCAtbiAiJHRlc3RfY21wX2IiICYmCisJdGVzdCAiJHRlc3RfY21wX2EiID0gIiR0ZXN0X2NtcF9iIiB8fAorCWV2YWwgImRpZmYgLXUgXCJcJEBcIiAkc3RkaW5fZm9yX2RpZmYiCit9CisKKyMgJDEgaXMgdGhlIG5hbWUgb2YgdGhlIHNoZWxsIHZhcmlhYmxlIHRvIGZpbGwgaW4KK21pbmd3X3JlYWRfZmlsZV9zdHJpcF9jcl8gKCkgeworCSMgUmVhZCBsaW5lLXdpc2UgdXNpbmcgTEYgYXMgdGhlIGxpbmUgc2VwYXJhdG9yCisJIyBhbmQgdXNlIElGUyB0byBzdHJpcCBDUi4KKwlsb2NhbCBsaW5lCisJd2hpbGUgOgorCWRvCisJCWlmIElGUz0kJ1xyJyByZWFkIC1yIC1kICQnXG4nIGxpbmUKKwkJdGhlbgorCQkJIyBnb29kCisJCQlsaW5lPSRsaW5lJCdcbicKKwkJZWxzZQorCQkJIyB3ZSBnZXQgaGVyZSBhdCBFT0YsIGJ1dCBhbHNvIGlmIHRoZSBsYXN0IGxpbmUKKwkJCSMgd2FzIG5vdCB0ZXJtaW5hdGVkIGJ5IExGOyBpbiB0aGUgbGF0dGVyIGNhc2UsCisJCQkjIHNvbWUgdGV4dCB3YXMgcmVhZAorCQkJaWYgdGVzdCAteiAiJGxpbmUiCisJCQl0aGVuCisJCQkJIyBFT0YsIHJlYWxseQorCQkJCWJyZWFrCisJCQlmaQorCQlmaQorCQlldmFsICIkMT1cJCQxXCRsaW5lIgorCWRvbmUKK30KKworIyBMaWtlICJlbnYgRk9PPUJBUiBzb21lLXByb2dyYW0iLCBidXQgcnVuIGluc2lkZSBhIHN1YnNoZWxsLCB3aGljaCBtZWFucworIyBpdCBhbHNvIHdvcmtzIGZvciBzaGVsbCBmdW5jdGlvbnMgKHRob3VnaCB0aG9zZSBmdW5jdGlvbnMgY2Fubm90IGltcGFjdAorIyB0aGUgZW52aXJvbm1lbnQgb3V0c2lkZSBvZiB0aGUgdGVzdF9lbnYgaW52b2NhdGlvbikuCit0ZXN0X2VudiAoKSB7CisJKAorCQl3aGlsZSB0ZXN0ICQjIC1ndCAwCisJCWRvCisJCQljYXNlICIkMSIgaW4KKwkJCSo9KikKKwkJCQlldmFsICIkezElJT0qfT1cJHsxIyo9fSIKKwkJCQlldmFsICJleHBvcnQgJHsxJSU9Kn0iCisJCQkJc2hpZnQKKwkJCQk7OworCQkJKikKKwkJCQkiJEAiIDI+JjcKKwkJCQlleGl0CisJCQkJOzsKKwkJCWVzYWMKKwkJZG9uZQorCSkKK30gNz4mMiAyPiY0CisKKyMgUmV0dXJucyB0cnVlIGlmIHRoZSBudW1lcmljIGV4aXQgY29kZSBpbiAiJDIiIHJlcHJlc2VudHMgdGhlIGV4cGVjdGVkIHNpZ25hbAorIyBpbiAiJDEiLiBTaWduYWxzIHNob3VsZCBiZSBnaXZlbiBudW1lcmljYWxseS4KK3Rlc3RfbWF0Y2hfc2lnbmFsICgpIHsKKwlpZiB0ZXN0ICIkMiIgPSAiJCgoMTI4ICsgJDEpKSIKKwl0aGVuCisJCSMgUE9TSVgKKwkJcmV0dXJuIDAKKwllbGlmIHRlc3QgIiQyIiA9ICIkKCgyNTYgKyAkMSkpIgorCXRoZW4KKwkJIyBrc2gKKwkJcmV0dXJuIDAKKwlmaQorCXJldHVybiAxCit9CisKKyMgUmVhZCB1cCB0byAiJDEiIGJ5dGVzIChvciB0byBFT0YpIGZyb20gc3RkaW4gYW5kIHdyaXRlIHRoZW0gdG8gc3Rkb3V0LgordGVzdF9jb3B5X2J5dGVzICgpIHsKKwlwZXJsIC1lICcKKwkJbXkgJGxlbiA9ICRBUkdWWzFdOworCQl3aGlsZSAoJGxlbiA+IDApIHsKKwkJCW15ICRzOworCQkJbXkgJG5yZWFkID0gc3lzcmVhZChTVERJTiwgJHMsICRsZW4pOworCQkJZGllICJjYW5ub3QgcmVhZDogJCEiIHVubGVzcyBkZWZpbmVkKCRucmVhZCk7CisJCQlsYXN0IHVubGVzcyAkbnJlYWQ7CisJCQlwcmludCAkczsKKwkJCSRsZW4gLT0gJG5yZWFkOworCQl9CisJJyAtICIkMSIKK30KKworIyBydW4gIiRAIiBpbnNpZGUgYSBub24tZ2l0IGRpcmVjdG9yeQorbm9uZ2l0ICgpIHsKKwl0ZXN0IC1kIG5vbi1yZXBvIHx8CisJbWtkaXIgbm9uLXJlcG8gfHwKKwlyZXR1cm4gMQorCisJKAorCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0kKHB3ZCkgJiYKKwkJZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTICYmCisJCWNkIG5vbi1yZXBvICYmCisJCSIkQCIgMj4mNworCSkKK30gNz4mMiAyPiY0CisKKyMgY29udmVydCBmdW5jdGlvbiBhcmd1bWVudHMgb3Igc3RkaW4gKGlmIG5vdCBhcmd1bWVudHMgZ2l2ZW4pIHRvIHBrdGxpbmUKKyMgcmVwcmVzZW50YXRpb24uIElmIG11bHRpcGxlIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHRoZXkgYXJlIHNlcGFyYXRlZCBieQorIyB3aGl0ZXNwYWNlIGFuZCBwdXQgaW4gYSBzaW5nbGUgcGFja2V0LiBOb3RlIHRoYXQgZGF0YSBjb250YWluaW5nIE5VTHMgbXVzdCBiZQorIyBnaXZlbiBvbiBzdGRpbiwgYW5kIHRoYXQgZW1wdHkgaW5wdXQgYmVjb21lcyBhbiBlbXB0eSBwYWNrZXQsIG5vdCBhIGZsdXNoCisjIHBhY2tldCAoZm9yIHRoYXQgeW91IGNhbiBqdXN0IHByaW50IDAwMDAgeW91cnNlbGYpLgorcGFja2V0aXplKCkgeworCWlmIHRlc3QgJCMgLWd0IDAKKwl0aGVuCisJCXBhY2tldD0iJCoiCisJCXByaW50ZiAnJTA0eCVzJyAiJCgoNCArICR7I3BhY2tldH0pKSIgIiRwYWNrZXQiCisJZWxzZQorCQlwZXJsIC1lICcKKwkJCW15ICRwYWNrZXQgPSBkbyB7IGxvY2FsICQvOyA8U1RESU4+IH07CisJCQlwcmludGYgIiUwNHglcyIsIDQgKyBsZW5ndGgoJHBhY2tldCksICRwYWNrZXQ7CisJCScKKwlmaQorfQorCisjIFBhcnNlIHRoZSBpbnB1dCBhcyBhIHNlcmllcyBvZiBwa3RsaW5lcywgd3JpdGluZyB0aGUgcmVzdWx0IHRvIHN0ZG91dC4KKyMgU2lkZWJhbmQgbWFya2VycyBhcmUgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5LCBhbmQgdGhlIG91dHB1dCBpcyByb3V0ZWQgdG8KKyMgc3RkZXJyIGlmIGFwcHJvcHJpYXRlLgorIworIyBOVUwgYnl0ZXMgYXJlIGNvbnZlcnRlZCB0byAiXFwwIiBmb3IgZWFzZSBvZiBwYXJzaW5nIHdpdGggdGV4dCB0b29scy4KK2RlcGFja2V0aXplICgpIHsKKwlwZXJsIC1lICcKKwkJd2hpbGUgKHJlYWQoU1RESU4sICRsZW4sIDQpID09IDQpIHsKKwkJCWlmICgkbGVuIGVxICIwMDAwIikgeworCQkJCXByaW50ICJGTFVTSFxuIjsKKwkJCX0gZWxzZSB7CisJCQkJcmVhZChTVERJTiwgJGJ1ZiwgaGV4KCRsZW4pIC0gNCk7CisJCQkJJGJ1ZiA9fiBzL1wwL1xcMC9nOworCQkJCWlmICgkYnVmID1+IHMvXltceDJceDNdLy8pIHsKKwkJCQkJcHJpbnQgU1RERVJSICRidWY7CisJCQkJfSBlbHNlIHsKKwkJCQkJJGJ1ZiA9fiBzL15ceDEvLzsKKwkJCQkJcHJpbnQgJGJ1ZjsKKwkJCQl9CisJCQl9CisJCX0KKwknCit9CisKKyMgQ29udmVydHMgYmFzZS0xNiBkYXRhIGludG8gYmFzZS04LiBUaGUgb3V0cHV0IGlzIGdpdmVuIGFzIGEgc2VxdWVuY2Ugb2YKKyMgZXNjYXBlZCBvY3RhbHMsIHN1aXRhYmxlIGZvciBjb25zdW1wdGlvbiBieSAncHJpbnRmJy4KK2hleDJvY3QgKCkgeworCXBlcmwgLW5lICdwcmludGYgIlxcJTAzbyIsIGhleCBmb3IgLy4uL2cnCit9CisKKyMgU2V0IHRoZSBoYXNoIGFsZ29yaXRobSBpbiB1c2UgdG8gJDEuICBPbmx5IHVzZWZ1bCB3aGVuIHRlc3RpbmcgdGhlIHRlc3RzdWl0ZS4KK3Rlc3Rfc2V0X2hhc2ggKCkgeworCXRlc3RfaGFzaF9hbGdvPSIkMSIKK30KKworIyBEZXRlY3QgdGhlIGhhc2ggYWxnb3JpdGhtIGluIHVzZS4KK3Rlc3RfZGV0ZWN0X2hhc2ggKCkgeworCSMgQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBTSEEtMSwgYnV0IGluIHRoZSBmdXR1cmUgdGhpcyBmdW5jdGlvbiB3aWxsCisJIyBhY3R1YWxseSBkZXRlY3QgdGhlIGFsZ29yaXRobSBpbiB1c2UuCisJdGVzdF9oYXNoX2FsZ289J3NoYTEnCit9CisKKyMgTG9hZCBjb21tb24gaGFzaCBtZXRhZGF0YSBhbmQgY29tbW9uIHBsYWNlaG9sZGVyIG9iamVjdCBJRHMgZm9yIHVzZSB3aXRoCisjIHRlc3Rfb2lkLgordGVzdF9vaWRfaW5pdCAoKSB7CisJdGVzdCAtbiAiJHRlc3RfaGFzaF9hbGdvIiB8fCB0ZXN0X2RldGVjdF9oYXNoICYmCisJdGVzdF9vaWRfY2FjaGUgPCIkVEVTVF9ESVJFQ1RPUlkvb2lkLWluZm8vaGFzaC1pbmZvIiAmJgorCXRlc3Rfb2lkX2NhY2hlIDwiJFRFU1RfRElSRUNUT1JZL29pZC1pbmZvL29pZCIKK30KKworIyBMb2FkIGtleS12YWx1ZSBwYWlycyBmcm9tIHN0ZGluIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCB0ZXN0X29pZC4gIEJsYW5rIGxpbmVzCisjIGFuZCBsaW5lcyBzdGFydGluZyB3aXRoICIjIiBhcmUgaWdub3JlZC4gIEtleXMgbXVzdCBiZSBzaGVsbCBpZGVudGlmaWVyCisjIGNoYXJhY3RlcnMuCisjCisjIEV4YW1wbGVzOgorIyByYXdzeiBzaGExOjIwCisjIHJhd3N6IHNoYTI1NjozMgordGVzdF9vaWRfY2FjaGUgKCkgeworCWxvY2FsIHRhZyByZXN0IGsgdiAmJgorCisJeyB0ZXN0IC1uICIkdGVzdF9oYXNoX2FsZ28iIHx8IHRlc3RfZGV0ZWN0X2hhc2g7IH0gJiYKKwl3aGlsZSByZWFkIHRhZyByZXN0CisJZG8KKwkJY2FzZSAkdGFnIGluCisJCVwjKikKKwkJCWNvbnRpbnVlOzsKKwkJPyopCisJCQkjIG5vbi1lbXB0eQorCQkJOzsKKwkJKikKKwkJCSMgYmxhbmsgbGluZQorCQkJY29udGludWU7OworCQllc2FjICYmCisKKwkJaz0iJHtyZXN0JToqfSIgJiYKKwkJdj0iJHtyZXN0Iyo6fSIgJiYKKworCQlpZiAhIGV4cHIgIiRrIiA6ICdbYS16MC05XVthLXowLTldKiQnID4vZGV2L251bGwKKwkJdGhlbgorCQkJQlVHICdiYWQgaGFzaCBhbGdvcml0aG0nCisJCWZpICYmCisJCWV2YWwgInRlc3Rfb2lkXyR7a31fJHRhZz1cIlwkdlwiIgorCWRvbmUKK30KKworIyBMb29rIHVwIGEgcGVyLWhhc2ggdmFsdWUgYmFzZWQgb24gYSBrZXkgKCQxKS4gIFRoZSB2YWx1ZSBtdXN0IGhhdmUgYmVlbiBsb2FkZWQKKyMgYnkgdGVzdF9vaWRfaW5pdCBvciB0ZXN0X29pZF9jYWNoZS4KK3Rlc3Rfb2lkICgpIHsKKwlsb2NhbCB2YXI9InRlc3Rfb2lkXyR7dGVzdF9oYXNoX2FsZ299XyQxIiAmJgorCisJIyBJZiB0aGUgdmFyaWFibGUgaXMgdW5zZXQsIHdlIG11c3QgYmUgbWlzc2luZyBhbiBlbnRyeSBmb3IgdGhpcworCSMga2V5LWhhc2ggcGFpciwgc28gZXhpdCB3aXRoIGFuIGVycm9yLgorCWlmIGV2YWwgInRlc3QgLXogXCJcJHskdmFyK3NldH1cIiIKKwl0aGVuCisJCUJVRyAidW5kZWZpbmVkIGtleSAnJDEnIgorCWZpICYmCisJZXZhbCAicHJpbnRmICclcycgXCJcJHskdmFyfVwiIgorfQorCisjIEluc2VydCBhIHNsYXNoIGludG8gYW4gb2JqZWN0IElEIHNvIGl0IGNhbiBiZSB1c2VkIHRvIHJlZmVyZW5jZSBhIGxvY2F0aW9uCisjIHVuZGVyICIuZ2l0L29iamVjdHMiLiAgRm9yIGV4YW1wbGUsICJkZWFkYmVlZi4uLiIgYmVjb21lcyAiZGUvYWRiZWVmLi4iLgordGVzdF9vaWRfdG9fcGF0aCAoKSB7CisJbG9jYWwgYmFzZW5hbWU9JHsxIz8/fQorCWVjaG8gIiR7MSUkYmFzZW5hbWV9LyRiYXNlbmFtZSIKK30KKworIyBDaG9vc2UgYSBwb3J0IG51bWJlciBiYXNlZCBvbiB0aGUgdGVzdCBzY3JpcHQncyBudW1iZXIgYW5kIHN0b3JlIGl0IGluCisjIHRoZSBnaXZlbiB2YXJpYWJsZSBuYW1lLCB1bmxlc3MgdGhhdCB2YXJpYWJsZSBhbHJlYWR5IGNvbnRhaW5zIGEgbnVtYmVyLgordGVzdF9zZXRfcG9ydCAoKSB7CisJbG9jYWwgdmFyPSQxIHBvcnQKKworCWlmIHRlc3QgJCMgLW5lIDEgfHwgdGVzdCAteiAiJHZhciIKKwl0aGVuCisJCUJVRyAidGVzdF9zZXRfcG9ydCByZXF1aXJlcyBhIHZhcmlhYmxlIG5hbWUiCisJZmkKKworCWV2YWwgcG9ydD1cJCR2YXIKKwljYXNlICIkcG9ydCIgaW4KKwkiIikKKwkJIyBObyBwb3J0IGlzIHNldCBpbiB0aGUgZ2l2ZW4gZW52IHZhciwgdXNlIHRoZSB0ZXN0CisJCSMgbnVtYmVyIGFzIHBvcnQgbnVtYmVyIGluc3RlYWQuCisJCSMgUmVtb3ZlIG5vdCBvbmx5IHRoZSBsZWFkaW5nICd0JywgYnV0IGFsbCBsZWFkaW5nIHplcm9zCisJCSMgYXMgd2VsbCwgc28gdGhlIGFyaXRobWV0aWMgYmVsb3cgd29uJ3QgKG1pcylpbnRlcnByZXQKKwkJIyBhIHRlc3QgbnVtYmVyIGxpa2UgJzAxMjMnIGFzIGFuIG9jdGFsIHZhbHVlLgorCQlwb3J0PSR7dGhpc190ZXN0IyR7dGhpc190ZXN0JSVbMS05XSp9fQorCQlpZiB0ZXN0ICIke3BvcnQ6LTB9IiAtbHQgMTAyNAorCQl0aGVuCisJCQkjIHJvb3Qtb25seSBwb3J0LCB1c2UgYSBsYXJnZXIgb25lIGluc3RlYWQuCisJCQlwb3J0PSQoKCRwb3J0ICsgMTAwMDApKQorCQlmaQorCQk7OworCSpbITAtOV0qfDAqKQorCQllcnJvciA+JjcgImludmFsaWQgcG9ydCBudW1iZXI6ICRwb3J0IgorCQk7OworCSopCisJCSMgVGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgcG9ydC4KKwkJOzsKKwllc2FjCisKKwkjIE1ha2Ugc3VyZSB0aGF0IHBhcmFsbGVsICctLXN0cmVzcycgdGVzdCBqb2JzIGdldCBkaWZmZXJlbnQKKwkjIHBvcnRzLgorCXBvcnQ9JCgoJHBvcnQgKyAke0dJVF9URVNUX1NUUkVTU19KT0JfTlI6LTB9KSkKKwlldmFsICR2YXI9JHBvcnQKK30KKworIyBDb21wYXJlIGEgZmlsZSBjb250YWluaW5nIHJldi1saXN0IGJpdG1hcCB0cmF2ZXJzYWwgb3V0cHV0IHRvIGl0cyBub24tYml0bWFwCisjIGNvdW50ZXJwYXJ0LiBZb3UgY2FuJ3QganVzdCB1c2UgdGVzdF9jbXAgZm9yIHRoaXMsIGJlY2F1c2UgdGhlIHR3byBwcm9kdWNlCisjIHN1YnRseSBkaWZmZXJlbnQgb3V0cHV0OgorIworIyAgIC0gcmVndWxhciBvdXRwdXQgaXMgaW4gdHJhdmVyc2FsIG9yZGVyLCB3aGVyZWFzIGJpdG1hcCBpcyBzcGxpdCBieSB0eXBlLAorIyAgICAgd2l0aCBub24tcGFja2VkIG9iamVjdHMgYXQgdGhlIGVuZAorIworIyAgIC0gcmVndWxhciBvdXRwdXQgaGFzIGEgc3BhY2UgYW5kIHRoZSBwYXRobmFtZSBhcHBlbmRlZCB0byBub24tY29tbWl0CisjICAgICBvYmplY3RzOyBiaXRtYXAgb3V0cHV0IG9taXRzIHRoaXMKKyMKKyMgVGhpcyBmdW5jdGlvbiBub3JtYWxpemVzIGFuZCBjb21wYXJlcyB0aGUgdHdvLiBUaGUgc2Vjb25kIGZpbGUgc2hvdWxkCisjIGFsd2F5cyBiZSB0aGUgYml0bWFwIG91dHB1dC4KK3Rlc3RfYml0bWFwX3RyYXZlcnNhbCAoKSB7CisJaWYgdGVzdCAiJDEiID0gIi0tbm8tY29uZmlybS1iaXRtYXBzIgorCXRoZW4KKwkJc2hpZnQKKwllbGlmIGNtcCAiJDEiICIkMiIKKwl0aGVuCisJCWVjaG8gPiYyICJpZGVudGljYWwgcmF3IG91dHB1dHM7IGFyZSB5b3Ugc3VyZSBiaXRtYXBzIHdlcmUgdXNlZD8iCisJCXJldHVybiAxCisJZmkgJiYKKwljdXQgLWQnICcgLWYxICIkMSIgfCBzb3J0ID4iJDEubm9ybWFsaXplZCIgJiYKKwlzb3J0ICIkMiIgPiIkMi5ub3JtYWxpemVkIiAmJgorCXRlc3RfY21wICIkMS5ub3JtYWxpemVkIiAiJDIubm9ybWFsaXplZCIgJiYKKwlybSAtZiAiJDEubm9ybWFsaXplZCIgIiQyLm5vcm1hbGl6ZWQiCit9CisKKyMgVGVzdHMgZm9yIHRoZSBoaWRkZW4gZmlsZSBhdHRyaWJ1dGUgb24gV2luZG93cwordGVzdF9wYXRoX2lzX2hpZGRlbiAoKSB7CisJdGVzdF9oYXZlX3ByZXJlcSBNSU5HVyB8fAorCUJVRyAidGVzdF9wYXRoX2lzX2hpZGRlbiBjYW4gb25seSBiZSB1c2VkIG9uIFdpbmRvd3MiCisKKwkjIFVzZSB0aGUgb3V0cHV0IG9mIGBhdHRyaWJgLCBpZ25vcmUgdGhlIGFic29sdXRlIHBhdGgKKwljYXNlICIkKCIkU1lTVEVNUk9PVCIvc3lzdGVtMzIvYXR0cmliICIkMSIpIiBpbiAqSCo/OiopIHJldHVybiAwOzsgZXNhYworCXJldHVybiAxCit9CmRpZmYgLS1naXQgYS90L3Rlc3QtbGliLnNoIGIvdC90ZXN0LWxpYi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzZiNmRkCi0tLSAvZGV2L251bGwKKysrIGIvdC90ZXN0LWxpYi5zaApAQCAtMCwwICsxLDE2OTEgQEAKKyMgVGVzdCBmcmFtZXdvcmsgZm9yIGdpdC4gIFNlZSB0L1JFQURNRSBmb3IgdXNhZ2UuCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8gLgorCisjIFRlc3QgdGhlIGJpbmFyaWVzIHdlIGhhdmUganVzdCBidWlsdC4gIFRoZSB0ZXN0cyBhcmUga2VwdCBpbgorIyB0LyBzdWJkaXJlY3RvcnkgYW5kIGFyZSBydW4gaW4gJ3RyYXNoIGRpcmVjdG9yeScgc3ViZGlyZWN0b3J5LgoraWYgdGVzdCAteiAiJFRFU1RfRElSRUNUT1JZIgordGhlbgorCSMgV2UgYWxsb3cgdGVzdHMgdG8gb3ZlcnJpZGUgdGhpcywgaW4gY2FzZSB0aGV5IHdhbnQgdG8gcnVuIHRlc3RzCisJIyBvdXRzaWRlIG9mIHQvLCBlLmcuIGZvciBydW5uaW5nIHRlc3RzIG9uIHRoZSB0ZXN0IGxpYnJhcnkKKwkjIGl0c2VsZi4KKwlURVNUX0RJUkVDVE9SWT0kKHB3ZCkKK2Vsc2UKKwkjIGVuc3VyZSB0aGF0IFRFU1RfRElSRUNUT1JZIGlzIGFuIGFic29sdXRlIHBhdGggc28gdGhhdCBpdAorCSMgaXMgdmFsaWQgZXZlbiBpZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyBjaGFuZ2VkCisJVEVTVF9ESVJFQ1RPUlk9JChjZCAiJFRFU1RfRElSRUNUT1JZIiAmJiBwd2QpIHx8IGV4aXQgMQorZmkKK2lmIHRlc3QgLXogIiRURVNUX09VVFBVVF9ESVJFQ1RPUlkiCit0aGVuCisJIyBTaW1pbGFybHksIG92ZXJyaWRlIHRoaXMgdG8gc3RvcmUgdGhlIHRlc3QtcmVzdWx0cyBzdWJkaXIKKwkjIGVsc2V3aGVyZQorCVRFU1RfT1VUUFVUX0RJUkVDVE9SWT0kVEVTVF9ESVJFQ1RPUlkKK2ZpCitHSVRfQlVJTERfRElSPSIkVEVTVF9ESVJFQ1RPUlkiLy4uCisKKyMgSWYgd2Ugd2VyZSBidWlsdCB3aXRoIEFTQU4sIGl0IG1heSBjb21wbGFpbiBhYm91dCBsZWFrcworIyBvZiBwcm9ncmFtLWxpZmV0aW1lIHZhcmlhYmxlcy4gRGlzYWJsZSBpdCBieSBkZWZhdWx0IHRvIGxvd2VyCisjIHRoZSBub2lzZSBsZXZlbC4gVGhpcyBuZWVkcyB0byBoYXBwZW4gYXQgdGhlIHN0YXJ0IG9mIHRoZSBzY3JpcHQsCisjIGJlZm9yZSB3ZSBldmVuIGRvIG91ciAiZGlkIHdlIGJ1aWxkIGdpdCB5ZXQiIGNoZWNrIChzaW5jZSB3ZSBkb24ndAorIyB3YW50IHRoYXQgb25lIHRvIGNvbXBsYWluIHRvIHN0ZGVycikuCis6ICR7QVNBTl9PUFRJT05TPWRldGVjdF9sZWFrcz0wOmFib3J0X29uX2Vycm9yPTF9CitleHBvcnQgQVNBTl9PUFRJT05TCisKKyMgSWYgTFNBTiBpcyBpbiBlZmZlY3Qgd2UgX2RvXyB3YW50IGxlYWsgY2hlY2tpbmcsIGJ1dCB3ZSBzdGlsbAorIyB3YW50IHRvIGFib3J0IHNvIHRoYXQgd2Ugbm90aWNlIHRoZSBwcm9ibGVtcy4KKzogJHtMU0FOX09QVElPTlM9YWJvcnRfb25fZXJyb3I9MX0KK2V4cG9ydCBMU0FOX09QVElPTlMKKworaWYgdGVzdCAhIC1mICIkR0lUX0JVSUxEX0RJUiIvR0lULUJVSUxELU9QVElPTlMKK3RoZW4KKwllY2hvID4mMiAnZXJyb3I6IEdJVC1CVUlMRC1PUFRJT05TIG1pc3NpbmcgKGhhcyBHaXQgYmVlbiBidWlsdD8pLicKKwlleGl0IDEKK2ZpCisuICIkR0lUX0JVSUxEX0RJUiIvR0lULUJVSUxELU9QVElPTlMKK2V4cG9ydCBQRVJMX1BBVEggU0hFTExfUEFUSAorCisjIERpc2FsbG93IHRoZSB1c2Ugb2YgYWJicmV2aWF0ZWQgb3B0aW9ucyBpbiB0aGUgdGVzdCBzdWl0ZSBieSBkZWZhdWx0CitpZiB0ZXN0IC16ICIke0dJVF9URVNUX0RJU0FMTE9XX0FCQlJFVklBVEVEX09QVElPTlN9IgordGhlbgorCUdJVF9URVNUX0RJU0FMTE9XX0FCQlJFVklBVEVEX09QVElPTlM9dHJ1ZQorCWV4cG9ydCBHSVRfVEVTVF9ESVNBTExPV19BQkJSRVZJQVRFRF9PUFRJT05TCitmaQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEl0IGFwcGVhcnMgdGhhdCBwZW9wbGUgdHJ5IHRvIHJ1biB0ZXN0cyB3aXRob3V0IGJ1aWxkaW5nLi4uCisiJHtHSVRfVEVTVF9JTlNUQUxMRUQ6LSRHSVRfQlVJTERfRElSfS9naXQkWCIgPi9kZXYvbnVsbAoraWYgdGVzdCAkPyAhPSAxCit0aGVuCisJaWYgdGVzdCAtbiAiJEdJVF9URVNUX0lOU1RBTExFRCIKKwl0aGVuCisJCWVjaG8gPiYyICJlcnJvcjogdGhlcmUgaXMgbm8gd29ya2luZyBHaXQgYXQgJyRHSVRfVEVTVF9JTlNUQUxMRUQnIgorCWVsc2UKKwkJZWNobyA+JjIgJ2Vycm9yOiB5b3UgZG8gbm90IHNlZW0gdG8gaGF2ZSBidWlsdCBnaXQgeWV0LicKKwlmaQorCWV4aXQgMQorZmkKKworc3RvcmVfYXJnX3RvPQorb3B0X3JlcXVpcmVkX2FyZz0KKyMgJDE6IG9wdGlvbiBzdHJpbmcKKyMgJDI6IG5hbWUgb2YgdGhlIHZhciB3aGVyZSB0aGUgYXJnIHdpbGwgYmUgc3RvcmVkCittYXJrX29wdGlvbl9yZXF1aXJlc19hcmcgKCkgeworCWlmIHRlc3QgLW4gIiRvcHRfcmVxdWlyZWRfYXJnIgorCXRoZW4KKwkJZWNobyAiZXJyb3I6IG9wdGlvbnMgdGhhdCByZXF1aXJlIGFyZ3MgY2Fubm90IGJlIGJ1bmRsZWQiIFwKKwkJCSJ0b2dldGhlcjogJyRvcHRfcmVxdWlyZWRfYXJnJyBhbmQgJyQxJyIgPiYyCisJCWV4aXQgMQorCWZpCisJb3B0X3JlcXVpcmVkX2FyZz0kMQorCXN0b3JlX2FyZ190bz0kMgorfQorCitwYXJzZV9vcHRpb24gKCkgeworCWxvY2FsIG9wdD0iJDEiCisKKwljYXNlICIkb3B0IiBpbgorCS1kfC0tZHwtLWRlfC0tZGVifC0tZGVidXwtLWRlYnVnKQorCQlkZWJ1Zz10IDs7CisJLWl8LS1pfC0taW18LS1pbW18LS1pbW1lfC0taW1tZWR8LS1pbW1lZGl8LS1pbW1lZGlhfC0taW1tZWRpYXR8LS1pbW1lZGlhdGUpCisJCWltbWVkaWF0ZT10IDs7CisJLWx8LS1sfC0tbG98LS1sb258LS1sb25nfC0tbG9uZy18LS1sb25nLXR8LS1sb25nLXRlfC0tbG9uZy10ZXN8LS1sb25nLXRlc3R8LS1sb25nLXRlc3RzKQorCQlHSVRfVEVTVF9MT05HPXQ7IGV4cG9ydCBHSVRfVEVTVF9MT05HIDs7CisJLXIpCisJCW1hcmtfb3B0aW9uX3JlcXVpcmVzX2FyZyAiJG9wdCIgcnVuX2xpc3QKKwkJOzsKKwktLXJ1bj0qKQorCQlydW5fbGlzdD0ke29wdCMtLSo9fSA7OworCS1ofC0taHwtLWhlfC0taGVsfC0taGVscCkKKwkJaGVscD10IDs7CisJLXZ8LS12fC0tdmV8LS12ZXJ8LS12ZXJifC0tdmVyYm98LS12ZXJib3N8LS12ZXJib3NlKQorCQl2ZXJib3NlPXQgOzsKKwktLXZlcmJvc2Utb25seT0qKQorCQl2ZXJib3NlX29ubHk9JHtvcHQjLS0qPX0KKwkJOzsKKwktcXwtLXF8LS1xdXwtLXF1aXwtLXF1aWV8LS1xdWlldCkKKwkJIyBJZ25vcmUgLS1xdWlldCB1bmRlciBhIFRBUDo6SGFybmVzcy4gU2F5aW5nIGhvdyBtYW55IHRlc3RzCisJCSMgcGFzc2VkIHdpdGhvdXQgdGhlIG9rL25vdCBvayBkZXRhaWxzIGlzIGFsd2F5cyBhbiBlcnJvci4KKwkJdGVzdCAteiAiJEhBUk5FU1NfQUNUSVZFIiAmJiBxdWlldD10IDs7CisJLS13aXRoLWRhc2hlcykKKwkJd2l0aF9kYXNoZXM9dCA7OworCS0tbm8tYmluLXdyYXBwZXJzKQorCQlub19iaW5fd3JhcHBlcnM9dCA7OworCS0tbm8tY29sb3IpCisJCWNvbG9yPSA7OworCS0tdmF8LS12YWx8LS12YWxnfC0tdmFsZ3J8LS12YWxncml8LS12YWxncmlufC0tdmFsZ3JpbmQpCisJCXZhbGdyaW5kPW1lbWNoZWNrCisJCXRlZT10CisJCTs7CisJLS12YWxncmluZD0qKQorCQl2YWxncmluZD0ke29wdCMtLSo9fQorCQl0ZWU9dAorCQk7OworCS0tdmFsZ3JpbmQtb25seT0qKQorCQl2YWxncmluZF9vbmx5PSR7b3B0Iy0tKj19CisJCXRlZT10CisJCTs7CisJLS10ZWUpCisJCXRlZT10IDs7CisJLS1yb290PSopCisJCXJvb3Q9JHtvcHQjLS0qPX0gOzsKKwktLWNoYWluLWxpbnQpCisJCUdJVF9URVNUX0NIQUlOX0xJTlQ9MSA7OworCS0tbm8tY2hhaW4tbGludCkKKwkJR0lUX1RFU1RfQ0hBSU5fTElOVD0wIDs7CisJLXgpCisJCXRyYWNlPXQgOzsKKwktVnwtLXZlcmJvc2UtbG9nKQorCQl2ZXJib3NlX2xvZz10CisJCXRlZT10CisJCTs7CisJLS13cml0ZS1qdW5pdC14bWwpCisJCXdyaXRlX2p1bml0X3htbD10CisJCTs7CisJLS1zdHJlc3MpCisJCXN0cmVzcz10IDs7CisJLS1zdHJlc3M9KikKKwkJZWNobyAiZXJyb3I6IC0tc3RyZXNzIGRvZXMgbm90IGFjY2VwdCBhbiBhcmd1bWVudDogJyRvcHQnIiA+JjIKKwkJZWNobyAiZGlkIHlvdSBtZWFuIC0tc3RyZXNzLWpvYnM9JHtvcHQjKj19IG9yIC0tc3RyZXNzLWxpbWl0PSR7b3B0Iyo9fT8iID4mMgorCQlleGl0IDEKKwkJOzsKKwktLXN0cmVzcy1qb2JzPSopCisJCXN0cmVzcz10OworCQlzdHJlc3M9JHtvcHQjLS0qPX0KKwkJY2FzZSAiJHN0cmVzcyIgaW4KKwkJKlshMC05XSp8MCp8IiIpCisJCQllY2hvICJlcnJvcjogLS1zdHJlc3Mtam9icz08Tj4gcmVxdWlyZXMgdGhlIG51bWJlciBvZiBqb2JzIHRvIHJ1biIgPiYyCisJCQlleGl0IDEKKwkJCTs7CisJCSopCSMgR29vZC4KKwkJCTs7CisJCWVzYWMKKwkJOzsKKwktLXN0cmVzcy1saW1pdD0qKQorCQlzdHJlc3M9dDsKKwkJc3RyZXNzX2xpbWl0PSR7b3B0Iy0tKj19CisJCWNhc2UgIiRzdHJlc3NfbGltaXQiIGluCisJCSpbITAtOV0qfDAqfCIiKQorCQkJZWNobyAiZXJyb3I6IC0tc3RyZXNzLWxpbWl0PTxOPiByZXF1aXJlcyB0aGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIiA+JjIKKwkJCWV4aXQgMQorCQkJOzsKKwkJKikJIyBHb29kLgorCQkJOzsKKwkJZXNhYworCQk7OworCSopCisJCWVjaG8gImVycm9yOiB1bmtub3duIHRlc3Qgb3B0aW9uICckb3B0JyIgPiYyOyBleGl0IDEgOzsKKwllc2FjCit9CisKKyMgUGFyc2Ugb3B0aW9ucyB3aGlsZSB0YWtpbmcgY2FyZSB0byBsZWF2ZSAkQCBpbnRhY3QsIHNvIHdlIHdpbGwgc3RpbGwKKyMgaGF2ZSBhbGwgdGhlIG9yaWdpbmFsIGNvbW1hbmQgbGluZSBvcHRpb25zIHdoZW4gZXhlY3V0aW5nIHRoZSB0ZXN0CisjIHNjcmlwdCBhZ2FpbiBmb3IgJy0tdGVlJyBhbmQgJy0tdmVyYm9zZS1sb2cnIGxhdGVyLgorZm9yIG9wdAorZG8KKwlpZiB0ZXN0IC1uICIkc3RvcmVfYXJnX3RvIgorCXRoZW4KKwkJZXZhbCAkc3RvcmVfYXJnX3RvPVwkb3B0CisJCXN0b3JlX2FyZ190bz0KKwkJb3B0X3JlcXVpcmVkX2FyZz0KKwkJY29udGludWUKKwlmaQorCisJY2FzZSAiJG9wdCIgaW4KKwktLSp8LT8pCisJCXBhcnNlX29wdGlvbiAiJG9wdCIgOzsKKwktPyopCisJCSMgYnVuZGxlZCBzaG9ydCBvcHRpb25zIG11c3QgYmUgZmVkIHNlcGFyYXRlbHkgdG8gcGFyc2Vfb3B0aW9uCisJCW9wdD0ke29wdCMtfQorCQl3aGlsZSB0ZXN0IC1uICIkb3B0IgorCQlkbworCQkJZXh0cmE9JHtvcHQjP30KKwkJCXRoaXM9JHtvcHQlJGV4dHJhfQorCQkJb3B0PSRleHRyYQorCQkJcGFyc2Vfb3B0aW9uICItJHRoaXMiCisJCWRvbmUKKwkJOzsKKwkqKQorCQllY2hvICJlcnJvcjogdW5rbm93biB0ZXN0IG9wdGlvbiAnJG9wdCciID4mMjsgZXhpdCAxIDs7CisJZXNhYworZG9uZQoraWYgdGVzdCAtbiAiJHN0b3JlX2FyZ190byIKK3RoZW4KKwllY2hvICJlcnJvcjogJG9wdF9yZXF1aXJlZF9hcmcgcmVxdWlyZXMgYW4gYXJndW1lbnQiID4mMgorCWV4aXQgMQorZmkKKworaWYgdGVzdCAtbiAiJHZhbGdyaW5kX29ubHkiCit0aGVuCisJdGVzdCAteiAiJHZhbGdyaW5kIiAmJiB2YWxncmluZD1tZW1jaGVjaworCXRlc3QgLXogIiR2ZXJib3NlIiAmJiB2ZXJib3NlX29ubHk9IiR2YWxncmluZF9vbmx5IgorZWxpZiB0ZXN0IC1uICIkdmFsZ3JpbmQiCit0aGVuCisJdGVzdCAteiAiJHZlcmJvc2VfbG9nIiAmJiB2ZXJib3NlPXQKK2ZpCisKK2lmIHRlc3QgLW4gIiRzdHJlc3MiCit0aGVuCisJdmVyYm9zZT10CisJdHJhY2U9dAorCWltbWVkaWF0ZT10CitmaQorCitURVNUX1NUUkVTU19KT0JfU0ZYPSIke0dJVF9URVNUX1NUUkVTU19KT0JfTlI6Ky5zdHJlc3MtJEdJVF9URVNUX1NUUkVTU19KT0JfTlJ9IgorVEVTVF9OQU1FPSIkKGJhc2VuYW1lICIkMCIgLnNoKSIKK1RFU1RfTlVNQkVSPSIke1RFU1RfTkFNRSUlLSp9IgorVEVTVF9OVU1CRVI9IiR7VEVTVF9OVU1CRVIjdH0iCitURVNUX1JFU1VMVFNfRElSPSIkVEVTVF9PVVRQVVRfRElSRUNUT1JZL3Rlc3QtcmVzdWx0cyIKK1RFU1RfUkVTVUxUU19CQVNFPSIkVEVTVF9SRVNVTFRTX0RJUi8kVEVTVF9OQU1FJFRFU1RfU1RSRVNTX0pPQl9TRlgiCitUUkFTSF9ESVJFQ1RPUlk9InRyYXNoIGRpcmVjdG9yeS4kVEVTVF9OQU1FJFRFU1RfU1RSRVNTX0pPQl9TRlgiCit0ZXN0IC1uICIkcm9vdCIgJiYgVFJBU0hfRElSRUNUT1JZPSIkcm9vdC8kVFJBU0hfRElSRUNUT1JZIgorY2FzZSAiJFRSQVNIX0RJUkVDVE9SWSIgaW4KKy8qKSA7OyAjIGFic29sdXRlIHBhdGggaXMgZ29vZAorICopIFRSQVNIX0RJUkVDVE9SWT0iJFRFU1RfT1VUUFVUX0RJUkVDVE9SWS8kVFJBU0hfRElSRUNUT1JZIiA7OworZXNhYworCisjIElmIC0tc3RyZXNzIHdhcyBwYXNzZWQsIHJ1biB0aGlzIHRlc3QgcmVwZWF0ZWRseSBpbiBzZXZlcmFsIHBhcmFsbGVsIGxvb3BzLgoraWYgdGVzdCAiJEdJVF9URVNUX1NUUkVTU19TVEFSVEVEIiA9ICJkb25lIgordGhlbgorCTogIyBEb24ndCBzdHJlc3MgdGVzdCBhZ2Fpbi4KK2VsaWYgdGVzdCAtbiAiJHN0cmVzcyIKK3RoZW4KKwlpZiB0ZXN0ICIkc3RyZXNzIiAhPSB0CisJdGhlbgorCQlqb2JfY291bnQ9JHN0cmVzcworCWVsaWYgdGVzdCAtbiAiJEdJVF9URVNUX1NUUkVTU19MT0FEIgorCXRoZW4KKwkJam9iX2NvdW50PSIkR0lUX1RFU1RfU1RSRVNTX0xPQUQiCisJZWxpZiBqb2JfY291bnQ9JChnZXRjb25mIF9OUFJPQ0VTU09SU19PTkxOIDI+L2Rldi9udWxsKSAmJgorCSAgICAgdGVzdCAtbiAiJGpvYl9jb3VudCIKKwl0aGVuCisJCWpvYl9jb3VudD0kKCgyICogJGpvYl9jb3VudCkpCisJZWxzZQorCQlqb2JfY291bnQ9OAorCWZpCisKKwlta2RpciAtcCAiJFRFU1RfUkVTVUxUU19ESVIiCisJc3RyZXNzZmFpbD0iJFRFU1RfUkVTVUxUU19CQVNFLnN0cmVzcy1mYWlsZWQiCisJcm0gLWYgIiRzdHJlc3NmYWlsIgorCisJc3RyZXNzX2V4aXQ9MAorCXRyYXAgJworCQlraWxsICRqb2JfcGlkcyAyPi9kZXYvbnVsbAorCQl3YWl0CisJCXN0cmVzc19leGl0PTEKKwknIFRFUk0gSU5UIEhVUAorCisJam9iX3BpZHM9CisJam9iX25yPTAKKwl3aGlsZSB0ZXN0ICRqb2JfbnIgLWx0ICIkam9iX2NvdW50IgorCWRvCisJCSgKKwkJCUdJVF9URVNUX1NUUkVTU19TVEFSVEVEPWRvbmUKKwkJCUdJVF9URVNUX1NUUkVTU19KT0JfTlI9JGpvYl9ucgorCQkJZXhwb3J0IEdJVF9URVNUX1NUUkVTU19TVEFSVEVEIEdJVF9URVNUX1NUUkVTU19KT0JfTlIKKworCQkJdHJhcCAnCisJCQkJa2lsbCAkdGVzdF9waWQgMj4vZGV2L251bGwKKwkJCQl3YWl0CisJCQkJZXhpdCAxCisJCQknIFRFUk0gSU5UCisKKwkJCWNudD0xCisJCQl3aGlsZSAhIHRlc3QgLWUgIiRzdHJlc3NmYWlsIiAmJgorCQkJICAgICAgeyB0ZXN0IC16ICIkc3RyZXNzX2xpbWl0IiB8fAorCQkJCXRlc3QgJGNudCAtbGUgJHN0cmVzc19saW1pdCA7IH0KKwkJCWRvCisJCQkJJFRFU1RfU0hFTExfUEFUSCAiJDAiICIkQCIgPiIkVEVTVF9SRVNVTFRTX0JBU0Uuc3RyZXNzLSRqb2JfbnIub3V0IiAyPiYxICYKKwkJCQl0ZXN0X3BpZD0kIQorCisJCQkJaWYgd2FpdCAkdGVzdF9waWQKKwkJCQl0aGVuCisJCQkJCXByaW50ZiAiT0sgICAlMmQuJWRcbiIgJEdJVF9URVNUX1NUUkVTU19KT0JfTlIgJGNudAorCQkJCWVsc2UKKwkJCQkJZWNobyAkR0lUX1RFU1RfU1RSRVNTX0pPQl9OUiA+PiIkc3RyZXNzZmFpbCIKKwkJCQkJcHJpbnRmICJGQUlMICUyZC4lZFxuIiAkR0lUX1RFU1RfU1RSRVNTX0pPQl9OUiAkY250CisJCQkJZmkKKwkJCQljbnQ9JCgoJGNudCArIDEpKQorCQkJZG9uZQorCQkpICYKKwkJam9iX3BpZHM9IiRqb2JfcGlkcyAkISIKKwkJam9iX25yPSQoKCRqb2JfbnIgKyAxKSkKKwlkb25lCisKKwl3YWl0CisKKwlpZiB0ZXN0IC1mICIkc3RyZXNzZmFpbCIKKwl0aGVuCisJCXN0cmVzc19leGl0PTEKKwkJZWNobyAiTG9nKHMpIG9mIGZhaWxlZCB0ZXN0IHJ1bihzKToiCisJCWZvciBmYWlsZWRfam9iX25yIGluICQoc29ydCAtbiAiJHN0cmVzc2ZhaWwiKQorCQlkbworCQkJZWNobyAiQ29udGVudHMgb2YgJyRURVNUX1JFU1VMVFNfQkFTRS5zdHJlc3MtJGZhaWxlZF9qb2JfbnIub3V0JzoiCisJCQljYXQgIiRURVNUX1JFU1VMVFNfQkFTRS5zdHJlc3MtJGZhaWxlZF9qb2JfbnIub3V0IgorCQlkb25lCisJCXJtIC1yZiAiJFRSQVNIX0RJUkVDVE9SWS5zdHJlc3MtZmFpbGVkIgorCQkjIE1vdmUgdGhlIGxhc3Qgb25lLgorCQltdiAiJFRSQVNIX0RJUkVDVE9SWS5zdHJlc3MtJGZhaWxlZF9qb2JfbnIiICIkVFJBU0hfRElSRUNUT1JZLnN0cmVzcy1mYWlsZWQiCisJZmkKKworCWV4aXQgJHN0cmVzc19leGl0CitmaQorCisjIGlmIC0tdGVlIHdhcyBwYXNzZWQsIHdyaXRlIHRoZSBvdXRwdXQgbm90IG9ubHkgdG8gdGhlIHRlcm1pbmFsLCBidXQKKyMgYWRkaXRpb25hbGx5IHRvIHRoZSBmaWxlIHRlc3QtcmVzdWx0cy8kQkFTRU5BTUUub3V0LCB0b28uCitpZiB0ZXN0ICIkR0lUX1RFU1RfVEVFX1NUQVJURUQiID0gImRvbmUiCit0aGVuCisJOiAjIGRvIG5vdCByZWRpcmVjdCBhZ2FpbgorZWxpZiB0ZXN0IC1uICIkdGVlIgordGhlbgorCW1rZGlyIC1wICIkVEVTVF9SRVNVTFRTX0RJUiIKKworCSMgTWFrZSB0aGlzIGZpbGVuYW1lIGF2YWlsYWJsZSB0byB0aGUgc3ViLXByb2Nlc3MgaW4gY2FzZSBpdCBpcyB1c2luZworCSMgLS12ZXJib3NlLWxvZy4KKwlHSVRfVEVTVF9URUVfT1VUUFVUX0ZJTEU9JFRFU1RfUkVTVUxUU19CQVNFLm91dAorCWV4cG9ydCBHSVRfVEVTVF9URUVfT1VUUFVUX0ZJTEUKKworCSMgVHJ1bmNhdGUgYmVmb3JlIGNhbGxpbmcgInRlZSAtYSIgdG8gZ2V0IHJpZCBvZiB0aGUgcmVzdWx0cworCSMgZnJvbSBhbnkgcHJldmlvdXMgcnVucy4KKwk+IiRHSVRfVEVTVF9URUVfT1VUUFVUX0ZJTEUiCisKKwkoR0lUX1RFU1RfVEVFX1NUQVJURUQ9ZG9uZSAke1RFU1RfU0hFTExfUEFUSH0gIiQwIiAiJEAiIDI+JjE7CisJIGVjaG8gJD8gPiIkVEVTVF9SRVNVTFRTX0JBU0UuZXhpdCIpIHwgdGVlIC1hICIkR0lUX1RFU1RfVEVFX09VVFBVVF9GSUxFIgorCXRlc3QgIiQoY2F0ICIkVEVTVF9SRVNVTFRTX0JBU0UuZXhpdCIpIiA9IDAKKwlleGl0CitmaQorCitpZiB0ZXN0IC1uICIkdHJhY2UiICYmIHRlc3QgLW4gIiR0ZXN0X3VudHJhY2VhYmxlIgordGhlbgorCSMgJy14JyB0cmFjaW5nIHJlcXVlc3RlZCwgYnV0IHRoaXMgdGVzdCBzY3JpcHQgY2FuJ3QgYmUgcmVsaWFibHkKKwkjIHRyYWNlZCwgdW5sZXNzIGl0IGlzIHJ1biB3aXRoIGEgQmFzaCB2ZXJzaW9uIHN1cHBvcnRpbmcKKwkjIEJBU0hfWFRSQUNFRkQgKGludHJvZHVjZWQgaW4gQmFzaCB2NC4xKS4KKwkjCisJIyBQZXJmb3JtIHRoaXMgdmVyc2lvbiBjaGVjayBfYWZ0ZXJfIHRoZSB0ZXN0IHNjcmlwdCB3YXMKKwkjIHBvdGVudGlhbGx5IHJlLWV4ZWN1dGVkIHdpdGggJFRFU1RfU0hFTExfUEFUSCBmb3IgJy0tdGVlJyBvcgorCSMgJy0tdmVyYm9zZS1sb2cnLCBzbyB0aGUgcmlnaHQgc2hlbGwgaXMgY2hlY2tlZCBhbmQgdGhlCisJIyB3YXJuaW5nIGlzIGlzc3VlZCBvbmx5IG9uY2UuCisJaWYgdGVzdCAtbiAiJEJBU0hfVkVSU0lPTiIgJiYgZXZhbCAnCisJICAgICB0ZXN0ICR7QkFTSF9WRVJTSU5GT1swXX0gLWd0IDQgfHwgeworCSAgICAgICB0ZXN0ICR7QkFTSF9WRVJTSU5GT1swXX0gLWVxIDQgJiYKKwkgICAgICAgdGVzdCAke0JBU0hfVkVSU0lORk9bMV19IC1nZSAxCisJICAgICB9CisJICAgJworCXRoZW4KKwkJOiBFeGVjdXRlZCBieSBhIEJhc2ggdmVyc2lvbiBzdXBwb3J0aW5nIEJBU0hfWFRSQUNFRkQuICBHb29kLgorCWVsc2UKKwkJZWNobyA+JjIgIndhcm5pbmc6IGlnbm9yaW5nIC14OyAnJDAnIGlzIHVudHJhY2VhYmxlIHdpdGhvdXQgQkFTSF9YVFJBQ0VGRCIKKwkJdHJhY2U9CisJZmkKK2ZpCitpZiB0ZXN0IC1uICIkdHJhY2UiICYmIHRlc3QgLXogIiR2ZXJib3NlX2xvZyIKK3RoZW4KKwl2ZXJib3NlPXQKK2ZpCisKKyMgRm9yIHJlcGVhdGFiaWxpdHksIHJlc2V0IHRoZSBlbnZpcm9ubWVudCB0byBrbm93biB2YWx1ZS4KKyMgVEVSTSBpcyBzYW5pdGl6ZWQgYmVsb3csIGFmdGVyIHNhdmluZyBjb2xvciBjb250cm9sIHNlcXVlbmNlcy4KK0xBTkc9QworTENfQUxMPUMKK1BBR0VSPWNhdAorVFo9VVRDCitleHBvcnQgTEFORyBMQ19BTEwgUEFHRVIgVFoKK0VESVRPUj06CisKKyMgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04gc2hvdWxkIG5vdCBpbmZsdWVuY2UgZ2l0IGNvbW1hbmRzIGV4ZWN1dGVkCisjIGR1cmluZyBpbml0aWFsaXphdGlvbiBvZiB0ZXN0LWxpYiBhbmQgdGhlIHRlc3QgcmVwby4gQmFjayBpdCB1cCwKKyMgdW5zZXQgYW5kIHRoZW4gcmVzdG9yZSBhZnRlciBpbml0aWFsaXphdGlvbiBpcyBmaW5pc2hlZC4KK2lmIHRlc3QgLW4gIiRHSVRfVEVTVF9HRVRURVhUX1BPSVNPTiIKK3RoZW4KKwlHSVRfVEVTVF9HRVRURVhUX1BPSVNPTl9PUklHPSRHSVRfVEVTVF9HRVRURVhUX1BPSVNPTgorCXVuc2V0IEdJVF9URVNUX0dFVFRFWFRfUE9JU09OCitmaQorCisjIEEgY2FsbCB0byAidW5zZXQiIHdpdGggbm8gYXJndW1lbnRzIGNhdXNlcyBhdCBsZWFzdCBTb2xhcmlzIDEwCisjIC91c3IveHBnNC9iaW4vc2ggYW5kIC9iaW4va3NoIHRvIGJhaWwgb3V0LiAgU28ga2VlcCB0aGUgdW5zZXRzCisjIGRlcml2aW5nIGZyb20gdGhlIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGNsdXN0ZXJlZCB3aXRoIHRoZSBvdGhlcgorIyBvbmVzLgordW5zZXQgVklTVUFMIEVNQUlMIExBTkdVQUdFIENPTFVNTlMgJCgiJFBFUkxfUEFUSCIgLWUgJworCW15IEBlbnYgPSBrZXlzICVFTlY7CisJbXkgJG9rID0gam9pbigifCIsIHF3KAorCQlUUkFDRQorCQlERUJVRworCQlURVNUCisJCS4qX1RFU1QKKwkJUFJPVkUKKwkJVkFMR1JJTkQKKwkJVU5aSVAKKwkJUEVSRl8KKwkJQ1VSTF9WRVJCT1NFCisJCVRSQUNFX0NVUkwKKwkpKTsKKwlteSBAdmFycyA9IGdyZXAoL15HSVRfLyAmJiAhL15HSVRfKCRvaykvbywgQGVudik7CisJcHJpbnQgam9pbigiXG4iLCBAdmFycyk7CisnKQordW5zZXQgWERHX0NBQ0hFX0hPTUUKK3Vuc2V0IFhER19DT05GSUdfSE9NRQordW5zZXQgR0lUUEVSTExJQgorVEVTVF9BVVRIT1JfTE9DQUxOQU1FPWF1dGhvcgorVEVTVF9BVVRIT1JfRE9NQUlOPWV4YW1wbGUuY29tCitHSVRfQVVUSE9SX0VNQUlMPSR7VEVTVF9BVVRIT1JfTE9DQUxOQU1FfUAke1RFU1RfQVVUSE9SX0RPTUFJTn0KK0dJVF9BVVRIT1JfTkFNRT0nQSBVIFRob3InCitURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUU9Y29tbWl0dGVyCitURVNUX0NPTU1JVFRFUl9ET01BSU49ZXhhbXBsZS5jb20KK0dJVF9DT01NSVRURVJfRU1BSUw9JHtURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUV9QCR7VEVTVF9DT01NSVRURVJfRE9NQUlOfQorR0lUX0NPTU1JVFRFUl9OQU1FPSdDIE8gTWl0dGVyJworR0lUX01FUkdFX1ZFUkJPU0lUWT01CitHSVRfTUVSR0VfQVVUT0VESVQ9bm8KK2V4cG9ydCBHSVRfTUVSR0VfVkVSQk9TSVRZIEdJVF9NRVJHRV9BVVRPRURJVAorZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwgR0lUX0FVVEhPUl9OQU1FCitleHBvcnQgR0lUX0NPTU1JVFRFUl9FTUFJTCBHSVRfQ09NTUlUVEVSX05BTUUKK2V4cG9ydCBFRElUT1IKKworIyBUZXN0cyB1c2luZyBHSVRfVFJBQ0UgdHlwaWNhbGx5IGRvbid0IHdhbnQgPHRpbWVzdGFtcD4gPGZpbGU+OjxsaW5lPiBvdXRwdXQKK0dJVF9UUkFDRV9CQVJFPTEKK2V4cG9ydCBHSVRfVFJBQ0VfQkFSRQorCitjaGVja192YXJfbWlncmF0aW9uICgpIHsKKwkjIHRoZSB3YXJuaW5ncyBhbmQgaGludHMgZ2l2ZW4gZnJvbSB0aGlzIGhlbHBlciBkZXBlbmRzCisJIyBvbiBlbmQtdXNlciBzZXR0aW5ncywgd2hpY2ggd2lsbCBkaXNydXB0IHRoZSBzZWxmLXRlc3QKKwkjIGRvbmUgb24gdGhlIHRlc3QgZnJhbWV3b3JrIGl0c2VsZi4KKwljYXNlICIkR0lUX1RFU1RfRlJBTUVXT1JLX1NFTEZURVNUIiBpbgorCXQpCXJldHVybiA7OworCWVzYWMKKworCW9sZF9uYW1lPSQxIG5ld19uYW1lPSQyCisJZXZhbCAib2xkX2lzc2V0PVwkeyR7b2xkX25hbWV9Oitpc3NldH0iCisJZXZhbCAibmV3X2lzc2V0PVwkeyR7bmV3X25hbWV9Oitpc3NldH0iCisKKwljYXNlICIkb2xkX2lzc2V0LCRuZXdfaXNzZXQiIGluCisJaXNzZXQsKQorCQllY2hvID4mMiAid2FybmluZzogJG9sZF9uYW1lIGlzIG5vdyAkbmV3X25hbWUiCisJCWVjaG8gPiYyICJoaW50OiBzZXQgJG5ld19uYW1lIHRvbyBkdXJpbmcgdGhlIHRyYW5zaXRpb24gcGVyaW9kIgorCQlldmFsICIkbmV3X25hbWU9XCQkb2xkX25hbWUiCisJCTs7CisJaXNzZXQsaXNzZXQpCisJCSMgZG8gdGhpcyBsYXRlcgorCQkjIGVjaG8gPiYyICJ3YXJuaW5nOiAkb2xkX25hbWUgaXMgbm93ICRuZXdfbmFtZSIKKwkJIyBlY2hvID4mMiAiaGludDogcmVtb3ZlICRvbGRfbmFtZSIKKwkJOzsKKwllc2FjCit9CisKK2NoZWNrX3Zhcl9taWdyYXRpb24gR0lUX0ZTTU9OSVRPUl9URVNUIEdJVF9URVNUX0ZTTU9OSVRPUgorY2hlY2tfdmFyX21pZ3JhdGlvbiBURVNUX0dJVF9JTkRFWF9WRVJTSU9OIEdJVF9URVNUX0lOREVYX1ZFUlNJT04KK2NoZWNrX3Zhcl9taWdyYXRpb24gR0lUX0ZPUkNFX1BSRUxPQURfVEVTVCBHSVRfVEVTVF9QUkVMT0FEX0lOREVYCisKKyMgVXNlIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIGluZGV4IGZpbGUgZm9ybWF0CitpZiB0ZXN0IC1uICIke0dJVF9URVNUX0lOREVYX1ZFUlNJT046K2lzc2V0fSIKK3RoZW4KKwlHSVRfSU5ERVhfVkVSU0lPTj0iJEdJVF9URVNUX0lOREVYX1ZFUlNJT04iCisJZXhwb3J0IEdJVF9JTkRFWF9WRVJTSU9OCitmaQorCisjIEFkZCBsaWJjIE1BTExPQyBhbmQgTUFMTE9DX1BFUlRVUkIgdGVzdAorIyBvbmx5IGlmIHdlIGFyZSBub3QgZXhlY3V0aW5nIHRoZSB0ZXN0IHdpdGggdmFsZ3JpbmQKK2lmIHRlc3QgLW4gIiR2YWxncmluZCIgfHwKKyAgIHRlc3QgLW4gIiRURVNUX05PX01BTExPQ19DSEVDSyIKK3RoZW4KKwlzZXR1cF9tYWxsb2NfY2hlY2sgKCkgeworCQk6IG5vdGhpbmcKKwl9CisJdGVhcmRvd25fbWFsbG9jX2NoZWNrICgpIHsKKwkJOiBub3RoaW5nCisJfQorZWxzZQorCXNldHVwX21hbGxvY19jaGVjayAoKSB7CisJCU1BTExPQ19DSEVDS189MwlNQUxMT0NfUEVSVFVSQl89MTY1CisJCWV4cG9ydCBNQUxMT0NfQ0hFQ0tfIE1BTExPQ19QRVJUVVJCXworCX0KKwl0ZWFyZG93bl9tYWxsb2NfY2hlY2sgKCkgeworCQl1bnNldCBNQUxMT0NfQ0hFQ0tfIE1BTExPQ19QRVJUVVJCXworCX0KK2ZpCisKKyMgUHJvdGVjdCBvdXJzZWx2ZXMgZnJvbSBjb21tb24gbWlzY29uZmlndXJhdGlvbiB0byBleHBvcnQKKyMgQ0RQQVRIIGludG8gdGhlIGVudmlyb25tZW50Cit1bnNldCBDRFBBVEgKKwordW5zZXQgR1JFUF9PUFRJT05TCit1bnNldCBVTlpJUAorCitjYXNlICQoZWNobyAkR0lUX1RSQUNFIHx0ciAiW0EtWl0iICJbYS16XSIpIGluCisxfDJ8dHJ1ZSkKKwlHSVRfVFJBQ0U9NAorCTs7Citlc2FjCisKKyMgTGluZSBmZWVkCitMRj0nCisnCisKKyMgU2luZ2xlIHF1b3RlCitTUT1cJworCisjIFVURi04IFpFUk8gV0lEVEggTk9OLUpPSU5FUiwgd2hpY2ggSEZTKyBpZ25vcmVzCisjIHdoZW4gY2FzZS1mb2xkaW5nIGZpbGVuYW1lcwordTIwMGM9JChwcmludGYgJ1wzNDJcMjAwXDIxNCcpCisKK2V4cG9ydCBfeDA1IF94MzUgX3g0MCBfejQwIExGIHUyMDBjIEVNUFRZX1RSRUUgRU1QVFlfQkxPQiBaRVJPX09JRCBPSURfUkVHRVgKKworIyBFYWNoIHRlc3Qgc2hvdWxkIHN0YXJ0IHdpdGggc29tZXRoaW5nIGxpa2UgdGhpcywgYWZ0ZXIgY29weXJpZ2h0IG5vdGljZXM6CisjCisjIHRlc3RfZGVzY3JpcHRpb249J0Rlc2NyaXB0aW9uIG9mIHRoaXMgdGVzdC4uLgorIyBUaGlzIHRlc3QgY2hlY2tzIGlmIGNvbW1hbmQgeHl6enkgZG9lcyB0aGUgcmlnaHQgdGhpbmcuLi4KKyMgJworIyAuIC4vdGVzdC1saWIuc2gKK3Rlc3QgIngkVEVSTSIgIT0gInhkdW1iIiAmJiAoCisJCXRlc3QgLXQgMSAmJgorCQl0cHV0IGJvbGQgPi9kZXYvbnVsbCAyPiYxICYmCisJCXRwdXQgc2V0YWYgMSA+L2Rldi9udWxsIDI+JjEgJiYKKwkJdHB1dCBzZ3IwID4vZGV2L251bGwgMj4mMQorCSkgJiYKKwljb2xvcj10CisKK2lmIHRlc3QgLW4gIiRjb2xvciIKK3RoZW4KKwkjIFNhdmUgdGhlIGNvbG9yIGNvbnRyb2wgc2VxdWVuY2VzIG5vdyByYXRoZXIgdGhhbiBydW4gdHB1dAorCSMgZWFjaCB0aW1lIHNheV9jb2xvcigpIGlzIGNhbGxlZC4gIFRoaXMgaXMgZG9uZSBmb3IgdHdvCisJIyByZWFzb25zOgorCSMgICAqIFRFUk0gd2lsbCBiZSBjaGFuZ2VkIHRvIGR1bWIKKwkjICAgKiBIT01FIHdpbGwgYmUgY2hhbmdlZCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIHRwdXQKKwkjICAgICBtaWdodCBuZWVkIHRvIHJlYWQgfi8udGVybWluZm8gZnJvbSB0aGUgb3JpZ2luYWwgSE9NRQorCSMgICAgIGRpcmVjdG9yeSB0byBnZXQgdGhlIGNvbnRyb2wgc2VxdWVuY2VzCisJIyBOb3RlOiAgVGhpcyBhcHByb2FjaCBhc3N1bWVzIHRoZSBjb250cm9sIHNlcXVlbmNlcyBkb24ndCBlbmQKKwkjIGluIGEgbmV3bGluZSBmb3IgYW55IHRlcm1pbmFsIG9mIGludGVyZXN0IChjb21tYW5kCisJIyBzdWJzdGl0dXRpb25zIHN0cmlwIHRyYWlsaW5nIG5ld2xpbmVzKS4gIEdpdmVuIHRoYXQgbW9zdAorCSMgKGFsbD8pIHRlcm1pbmFscyBpbiBjb21tb24gdXNlIGFyZSByZWxhdGVkIHRvIEVDTUEtNDgsIHRoaXMKKwkjIHNob3VsZG4ndCBiZSBhIHByb2JsZW0uCisJc2F5X2NvbG9yX2Vycm9yPSQodHB1dCBib2xkOyB0cHV0IHNldGFmIDEpICMgYm9sZCByZWQKKwlzYXlfY29sb3Jfc2tpcD0kKHRwdXQgc2V0YWYgNCkgIyBibHVlCisJc2F5X2NvbG9yX3dhcm49JCh0cHV0IHNldGFmIDMpICMgYnJvd24veWVsbG93CisJc2F5X2NvbG9yX3Bhc3M9JCh0cHV0IHNldGFmIDIpICMgZ3JlZW4KKwlzYXlfY29sb3JfaW5mbz0kKHRwdXQgc2V0YWYgNikgIyBjeWFuCisJc2F5X2NvbG9yX3Jlc2V0PSQodHB1dCBzZ3IwKQorCXNheV9jb2xvcl89IiIgIyBubyBmb3JtYXR0aW5nIGZvciBub3JtYWwgdGV4dAorCXNheV9jb2xvciAoKSB7CisJCXRlc3QgLXogIiQxIiAmJiB0ZXN0IC1uICIkcXVpZXQiICYmIHJldHVybgorCQlldmFsICJzYXlfY29sb3JfY29sb3I9XCRzYXlfY29sb3JfJDEiCisJCXNoaWZ0CisJCXByaW50ZiAiJXNcXG4iICIkc2F5X2NvbG9yX2NvbG9yJCokc2F5X2NvbG9yX3Jlc2V0IgorCX0KK2Vsc2UKKwlzYXlfY29sb3IoKSB7CisJCXRlc3QgLXogIiQxIiAmJiB0ZXN0IC1uICIkcXVpZXQiICYmIHJldHVybgorCQlzaGlmdAorCQlwcmludGYgIiVzXG4iICIkKiIKKwl9CitmaQorCitURVJNPWR1bWIKK2V4cG9ydCBURVJNCisKK2Vycm9yICgpIHsKKwlzYXlfY29sb3IgZXJyb3IgImVycm9yOiAkKiIKKwlmaW5hbGl6ZV9qdW5pdF94bWwKKwlHSVRfRVhJVF9PSz10CisJZXhpdCAxCit9CisKK0JVRyAoKSB7CisJZXJyb3IgPiY3ICJidWcgaW4gdGhlIHRlc3Qgc2NyaXB0OiAkKiIKK30KKworc2F5ICgpIHsKKwlzYXlfY29sb3IgaW5mbyAiJCoiCit9CisKK2lmIHRlc3QgLW4gIiRIQVJORVNTX0FDVElWRSIKK3RoZW4KKwlpZiB0ZXN0ICIkdmVyYm9zZSIgPSB0IHx8IHRlc3QgLW4gIiR2ZXJib3NlX29ubHkiCisJdGhlbgorCQlwcmludGYgJ0JhaWwgb3V0ISAlc1xuJyBcCisJCSAndmVyYm9zZSBtb2RlIGZvcmJpZGRlbiB1bmRlciBUQVAgaGFybmVzczsgdHJ5IC0tdmVyYm9zZS1sb2cnCisJCWV4aXQgMQorCWZpCitmaQorCit0ZXN0ICIke3Rlc3RfZGVzY3JpcHRpb259IiAhPSAiIiB8fAorZXJyb3IgIlRlc3Qgc2NyaXB0IGRpZCBub3Qgc2V0IHRlc3RfZGVzY3JpcHRpb24uIgorCitpZiB0ZXN0ICIkaGVscCIgPSAidCIKK3RoZW4KKwlwcmludGYgJyVzXG4nICIkdGVzdF9kZXNjcmlwdGlvbiIKKwlleGl0IDAKK2ZpCisKK2V4ZWMgNT4mMQorZXhlYyA2PCYwCitleGVjIDc+JjIKK2lmIHRlc3QgIiR2ZXJib3NlX2xvZyIgPSAidCIKK3RoZW4KKwlleGVjIDM+PiIkR0lUX1RFU1RfVEVFX09VVFBVVF9GSUxFIiA0PiYzCitlbGlmIHRlc3QgIiR2ZXJib3NlIiA9ICJ0IgordGhlbgorCWV4ZWMgND4mMiAzPiYxCitlbHNlCisJZXhlYyA0Pi9kZXYvbnVsbCAzPi9kZXYvbnVsbAorZmkKKworIyBTZW5kIGFueSAiLXgiIG91dHB1dCBkaXJlY3RseSB0byBzdGRlcnIgdG8gYXZvaWQgcG9sbHV0aW5nIHRlc3RzCisjIHdoaWNoIGNhcHR1cmUgc3RkZXJyLiBXZSBjYW4gZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgc2luY2UgaXQKKyMgaGFzIG5vIGVmZmVjdCBpZiB0cmFjaW5nIGlzbid0IHR1cm5lZCBvbi4KKyMKKyMgTm90ZSB0aGF0IHRoaXMgc2V0cyB1cCB0aGUgdHJhY2UgZmQgYXMgc29vbiBhcyB3ZSBhc3NpZ24gdGhlIHZhcmlhYmxlLCBzbyBpdAorIyBtdXN0IGNvbWUgYWZ0ZXIgdGhlIGNyZWF0aW9uIG9mIGRlc2NyaXB0b3IgNCBhYm92ZS4gTGlrZXdpc2UsIHdlIG11c3QgbmV2ZXIKKyMgdW5zZXQgdGhpcywgYXMgaXQgaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBjbG9zaW5nIGRlc2NyaXB0b3IgNCwgd2hpY2ggd2UKKyMgdXNlIHRvIHNob3cgdmVyYm9zZSB0ZXN0cyB0byB0aGUgdXNlci4KKyMKKyMgTm90ZSBhbHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCBvciB3YW50IHRvIGV4cG9ydCBpdC4gVGhlIHRyYWNpbmcgaXMgbG9jYWwgdG8KKyMgdGhpcyBzaGVsbCwgYW5kIHdlIHdvdWxkIG5vdCB3YW50IHRvIGluZmx1ZW5jZSBhbnkgc2hlbGxzIHdlIGV4ZWMuCitCQVNIX1hUUkFDRUZEPTQKKwordGVzdF9mYWlsdXJlPTAKK3Rlc3RfY291bnQ9MAordGVzdF9maXhlZD0wCit0ZXN0X2Jyb2tlbj0wCit0ZXN0X3N1Y2Nlc3M9MAorCit0ZXN0X2V4dGVybmFsX2hhc190YXA9MAorCitkaWUgKCkgeworCWNvZGU9JD8KKwkjIFRoaXMgaXMgcmVzcG9uc2libGUgZm9yIHJ1bm5pbmcgdGhlIGF0ZXhpdCBjb21tYW5kcyBldmVuIHdoZW4gYQorCSMgdGVzdCBzY3JpcHQgcnVuIHdpdGggJy0taW1tZWRpYXRlJyBmYWlscywgb3Igd2hlbiB0aGUgdXNlciBoaXRzCisJIyBjdHJsLUMsIGkuZS4gd2hlbiAndGVzdF9kb25lJyBpcyBub3QgaW52b2tlZCBhdCBhbGwuCisJdGVzdF9hdGV4aXRfaGFuZGxlciB8fCBjb2RlPSQ/CisJaWYgdGVzdCAtbiAiJEdJVF9FWElUX09LIgorCXRoZW4KKwkJZXhpdCAkY29kZQorCWVsc2UKKwkJZWNobyA+JjUgIkZBVEFMOiBVbmV4cGVjdGVkIGV4aXQgd2l0aCBjb2RlICRjb2RlIgorCQlleGl0IDEKKwlmaQorfQorCitHSVRfRVhJVF9PSz0KK3RyYXAgJ2RpZScgRVhJVAorIyBEaXNhYmxlICcteCcgdHJhY2luZywgYmVjYXVzZSB3aXRoIHNvbWUgc2hlbGxzLCBub3RhYmx5IGRhc2gsIGl0CisjIHByZXZlbnRzIHJ1bm5pbmcgdGhlIGNsZWFudXAgY29tbWFuZHMgd2hlbiBhIHRlc3Qgc2NyaXB0IHJ1biB3aXRoCisjICctLXZlcmJvc2UtbG9nIC14JyBpcyBpbnRlcnJ1cHRlZC4KK3RyYXAgJ3sgY29kZT0kPzsgc2V0ICt4OyB9IDI+L2Rldi9udWxsOyBleGl0ICRjb2RlJyBJTlQgVEVSTSBIVVAKKworIyBUaGUgdXNlci1mYWNpbmcgZnVuY3Rpb25zIGFyZSBsb2FkZWQgZnJvbSBhIHNlcGFyYXRlIGZpbGUgc28gdGhhdAorIyB0ZXN0X3BlcmYgc3Vic2hlbGxzIGNhbiBoYXZlIHRoZW0gdG9vCisuICIkVEVTVF9ESVJFQ1RPUlkvdGVzdC1saWItZnVuY3Rpb25zLnNoIgorCisjIFlvdSBhcmUgbm90IGV4cGVjdGVkIHRvIGNhbGwgdGVzdF9va18gYW5kIHRlc3RfZmFpbHVyZV8gZGlyZWN0bHksIHVzZQorIyB0aGUgdGVzdF9leHBlY3RfKiBmdW5jdGlvbnMgaW5zdGVhZC4KKwordGVzdF9va18gKCkgeworCWlmIHRlc3QgLW4gIiR3cml0ZV9qdW5pdF94bWwiCisJdGhlbgorCQl3cml0ZV9qdW5pdF94bWxfdGVzdGNhc2UgIiQqIgorCWZpCisJdGVzdF9zdWNjZXNzPSQoKCR0ZXN0X3N1Y2Nlc3MgKyAxKSkKKwlzYXlfY29sb3IgIiIgIm9rICR0ZXN0X2NvdW50IC0gJEAiCit9CisKK3Rlc3RfZmFpbHVyZV8gKCkgeworCWlmIHRlc3QgLW4gIiR3cml0ZV9qdW5pdF94bWwiCisJdGhlbgorCQlqdW5pdF9pbnNlcnQ9IjxmYWlsdXJlIG1lc3NhZ2U9XCJub3Qgb2sgJHRlc3RfY291bnQgLSIKKwkJanVuaXRfaW5zZXJ0PSIkanVuaXRfaW5zZXJ0ICQoeG1sX2F0dHJfZW5jb2RlICIkMSIpXCI+IgorCQlqdW5pdF9pbnNlcnQ9IiRqdW5pdF9pbnNlcnQgJCh4bWxfYXR0cl9lbmNvZGUgXAorCQkJIiQoaWYgdGVzdCAtbiAiJEdJVF9URVNUX1RFRV9PVVRQVVRfRklMRSIKKwkJCSAgIHRoZW4KKwkJCQl0ZXN0LXRvb2wgcGF0aC11dGlscyBza2lwLW4tYnl0ZXMgXAorCQkJCQkiJEdJVF9URVNUX1RFRV9PVVRQVVRfRklMRSIgJEdJVF9URVNUX1RFRV9PRkZTRVQKKwkJCSAgIGVsc2UKKwkJCQlwcmludGYgJyVzXG4nICIkQCIgfCBzZWQgMWQKKwkJCSAgIGZpKSIpIgorCQlqdW5pdF9pbnNlcnQ9IiRqdW5pdF9pbnNlcnQ8L2ZhaWx1cmU+IgorCQlpZiB0ZXN0IC1uICIkR0lUX1RFU1RfVEVFX09VVFBVVF9GSUxFIgorCQl0aGVuCisJCQlqdW5pdF9pbnNlcnQ9IiRqdW5pdF9pbnNlcnQ8c3lzdGVtLWVycj4kKHhtbF9hdHRyX2VuY29kZSBcCisJCQkJIiQoY2F0ICIkR0lUX1RFU1RfVEVFX09VVFBVVF9GSUxFIikiKTwvc3lzdGVtLWVycj4iCisJCWZpCisJCXdyaXRlX2p1bml0X3htbF90ZXN0Y2FzZSAiJDEiICIgICAgICAkanVuaXRfaW5zZXJ0IgorCWZpCisJdGVzdF9mYWlsdXJlPSQoKCR0ZXN0X2ZhaWx1cmUgKyAxKSkKKwlzYXlfY29sb3IgZXJyb3IgIm5vdCBvayAkdGVzdF9jb3VudCAtICQxIgorCXNoaWZ0CisJcHJpbnRmICclc1xuJyAiJCoiIHwgc2VkIC1lICdzL14vIwkvJworCXRlc3QgIiRpbW1lZGlhdGUiID0gIiIgfHwgeyBmaW5hbGl6ZV9qdW5pdF94bWw7IEdJVF9FWElUX09LPXQ7IGV4aXQgMTsgfQorfQorCit0ZXN0X2tub3duX2Jyb2tlbl9va18gKCkgeworCWlmIHRlc3QgLW4gIiR3cml0ZV9qdW5pdF94bWwiCisJdGhlbgorCQl3cml0ZV9qdW5pdF94bWxfdGVzdGNhc2UgIiQqIChicmVha2FnZSBmaXhlZCkiCisJZmkKKwl0ZXN0X2ZpeGVkPSQoKCR0ZXN0X2ZpeGVkKzEpKQorCXNheV9jb2xvciBlcnJvciAib2sgJHRlc3RfY291bnQgLSAkQCAjIFRPRE8ga25vd24gYnJlYWthZ2UgdmFuaXNoZWQiCit9CisKK3Rlc3Rfa25vd25fYnJva2VuX2ZhaWx1cmVfICgpIHsKKwlpZiB0ZXN0IC1uICIkd3JpdGVfanVuaXRfeG1sIgorCXRoZW4KKwkJd3JpdGVfanVuaXRfeG1sX3Rlc3RjYXNlICIkKiAoa25vd24gYnJlYWthZ2UpIgorCWZpCisJdGVzdF9icm9rZW49JCgoJHRlc3RfYnJva2VuKzEpKQorCXNheV9jb2xvciB3YXJuICJub3Qgb2sgJHRlc3RfY291bnQgLSAkQCAjIFRPRE8ga25vd24gYnJlYWthZ2UiCit9CisKK3Rlc3RfZGVidWcgKCkgeworCXRlc3QgIiRkZWJ1ZyIgPSAiIiB8fCBldmFsICIkMSIKK30KKworbWF0Y2hfcGF0dGVybl9saXN0ICgpIHsKKwlhcmc9IiQxIgorCXNoaWZ0CisJdGVzdCAteiAiJCoiICYmIHJldHVybiAxCisJZm9yIHBhdHRlcm5fCisJZG8KKwkJY2FzZSAiJGFyZyIgaW4KKwkJJHBhdHRlcm5fKQorCQkJcmV0dXJuIDAKKwkJZXNhYworCWRvbmUKKwlyZXR1cm4gMQorfQorCittYXRjaF90ZXN0X3NlbGVjdG9yX2xpc3QgKCkgeworCXRpdGxlPSIkMSIKKwlzaGlmdAorCWFyZz0iJDEiCisJc2hpZnQKKwl0ZXN0IC16ICIkMSIgJiYgcmV0dXJuIDAKKworCSMgQm90aCBjb21tYXMgYW5kIHdoaXRlc3BhY2UgYXJlIGFjY2VwdGVkIGFzIHNlcGFyYXRvcnMuCisJT0xESUZTPSRJRlMKKwlJRlM9JyAJLCcKKwlzZXQgLS0gJDEKKwlJRlM9JE9MRElGUworCisJIyBJZiB0aGUgZmlyc3Qgc2VsZWN0b3IgaXMgbmVnYXRpdmUgd2UgaW5jbHVkZSBieSBkZWZhdWx0LgorCWluY2x1ZGU9CisJY2FzZSAiJDEiIGluCisJCSEqKSBpbmNsdWRlPXQgOzsKKwllc2FjCisKKwlmb3Igc2VsZWN0b3IKKwlkbworCQlvcmlnX3NlbGVjdG9yPSRzZWxlY3RvcgorCisJCXBvc2l0aXZlPXQKKwkJY2FzZSAiJHNlbGVjdG9yIiBpbgorCQkJISopCisJCQkJcG9zaXRpdmU9CisJCQkJc2VsZWN0b3I9JHtzZWxlY3RvciMjP30KKwkJCQk7OworCQllc2FjCisKKwkJdGVzdCAteiAiJHNlbGVjdG9yIiAmJiBjb250aW51ZQorCisJCWNhc2UgIiRzZWxlY3RvciIgaW4KKwkJCSotKikKKwkJCQlpZiBleHByICJ6JHtzZWxlY3RvciUlLSp9IiA6ICJ6WzAtOV0qW14wLTldIiA+L2Rldi9udWxsCisJCQkJdGhlbgorCQkJCQllY2hvICJlcnJvcjogJHRpdGxlOiBpbnZhbGlkIG5vbi1udW1lcmljIGluIHJhbmdlIiBcCisJCQkJCQkic3RhcnQ6ICckb3JpZ19zZWxlY3RvciciID4mMgorCQkJCQlleGl0IDEKKwkJCQlmaQorCQkJCWlmIGV4cHIgInoke3NlbGVjdG9yIyotfSIgOiAielswLTldKlteMC05XSIgPi9kZXYvbnVsbAorCQkJCXRoZW4KKwkJCQkJZWNobyAiZXJyb3I6ICR0aXRsZTogaW52YWxpZCBub24tbnVtZXJpYyBpbiByYW5nZSIgXAorCQkJCQkJImVuZDogJyRvcmlnX3NlbGVjdG9yJyIgPiYyCisJCQkJCWV4aXQgMQorCQkJCWZpCisJCQkJOzsKKwkJCSopCisJCQkJaWYgZXhwciAieiRzZWxlY3RvciIgOiAielswLTldKlteMC05XSIgPi9kZXYvbnVsbAorCQkJCXRoZW4KKwkJCQkJZWNobyAiZXJyb3I6ICR0aXRsZTogaW52YWxpZCBub24tbnVtZXJpYyBpbiB0ZXN0IiBcCisJCQkJCQkic2VsZWN0b3I6ICckb3JpZ19zZWxlY3RvciciID4mMgorCQkJCQlleGl0IDEKKwkJCQlmaQorCQllc2FjCisKKwkJIyBTaG9ydCBjdXQgZm9yICJvYnZpb3VzIiBjYXNlcworCQl0ZXN0IC16ICIkaW5jbHVkZSIgJiYgdGVzdCAteiAiJHBvc2l0aXZlIiAmJiBjb250aW51ZQorCQl0ZXN0IC1uICIkaW5jbHVkZSIgJiYgdGVzdCAtbiAiJHBvc2l0aXZlIiAmJiBjb250aW51ZQorCisJCWNhc2UgIiRzZWxlY3RvciIgaW4KKwkJCS0qKQorCQkJCWlmIHRlc3QgJGFyZyAtbGUgJHtzZWxlY3RvciMtfQorCQkJCXRoZW4KKwkJCQkJaW5jbHVkZT0kcG9zaXRpdmUKKwkJCQlmaQorCQkJCTs7CisJCQkqLSkKKwkJCQlpZiB0ZXN0ICRhcmcgLWdlICR7c2VsZWN0b3IlLX0KKwkJCQl0aGVuCisJCQkJCWluY2x1ZGU9JHBvc2l0aXZlCisJCQkJZmkKKwkJCQk7OworCQkJKi0qKQorCQkJCWlmIHRlc3QgJHtzZWxlY3RvciUlLSp9IC1sZSAkYXJnIFwKKwkJCQkJJiYgdGVzdCAkYXJnIC1sZSAke3NlbGVjdG9yIyotfQorCQkJCXRoZW4KKwkJCQkJaW5jbHVkZT0kcG9zaXRpdmUKKwkJCQlmaQorCQkJCTs7CisJCQkqKQorCQkJCWlmIHRlc3QgJGFyZyAtZXEgJHNlbGVjdG9yCisJCQkJdGhlbgorCQkJCQlpbmNsdWRlPSRwb3NpdGl2ZQorCQkJCWZpCisJCQkJOzsKKwkJZXNhYworCWRvbmUKKworCXRlc3QgLW4gIiRpbmNsdWRlIgorfQorCittYXliZV90ZWFyZG93bl92ZXJib3NlICgpIHsKKwl0ZXN0IC16ICIkdmVyYm9zZV9vbmx5IiAmJiByZXR1cm4KKwlleGVjIDQ+L2Rldi9udWxsIDM+L2Rldi9udWxsCisJdmVyYm9zZT0KK30KKworbGFzdF92ZXJib3NlPXQKK21heWJlX3NldHVwX3ZlcmJvc2UgKCkgeworCXRlc3QgLXogIiR2ZXJib3NlX29ubHkiICYmIHJldHVybgorCWlmIG1hdGNoX3BhdHRlcm5fbGlzdCAkdGVzdF9jb3VudCAkdmVyYm9zZV9vbmx5CisJdGhlbgorCQlleGVjIDQ+JjIgMz4mMQorCQkjIEVtaXQgYSBkZWxpbWl0aW5nIGJsYW5rIGxpbmUgd2hlbiBnb2luZyBmcm9tCisJCSMgbm9uLXZlcmJvc2UgdG8gdmVyYm9zZS4gIFdpdGhpbiB2ZXJib3NlIG1vZGUgdGhlCisJCSMgZGVsaW1pdGVyIGlzIHByaW50ZWQgYnkgdGVzdF9leHBlY3RfKi4gIFRoZSBjaG9pY2UKKwkJIyBvZiB0aGUgaW5pdGlhbCAkbGFzdF92ZXJib3NlIGlzIHN1Y2ggdGhhdCBiZWZvcmUKKwkJIyB0ZXN0IDEsIHdlIGRvIG5vdCBwcmludCBpdC4KKwkJdGVzdCAteiAiJGxhc3RfdmVyYm9zZSIgJiYgZWNobyA+JjMgIiIKKwkJdmVyYm9zZT10CisJZWxzZQorCQlleGVjIDQ+L2Rldi9udWxsIDM+L2Rldi9udWxsCisJCXZlcmJvc2U9CisJZmkKKwlsYXN0X3ZlcmJvc2U9JHZlcmJvc2UKK30KKworbWF5YmVfdGVhcmRvd25fdmFsZ3JpbmQgKCkgeworCXRlc3QgLXogIiRHSVRfVkFMR1JJTkQiICYmIHJldHVybgorCUdJVF9WQUxHUklORF9FTkFCTEVEPQorfQorCittYXliZV9zZXR1cF92YWxncmluZCAoKSB7CisJdGVzdCAteiAiJEdJVF9WQUxHUklORCIgJiYgcmV0dXJuCisJaWYgdGVzdCAteiAiJHZhbGdyaW5kX29ubHkiCisJdGhlbgorCQlHSVRfVkFMR1JJTkRfRU5BQkxFRD10CisJCXJldHVybgorCWZpCisJR0lUX1ZBTEdSSU5EX0VOQUJMRUQ9CisJaWYgbWF0Y2hfcGF0dGVybl9saXN0ICR0ZXN0X2NvdW50ICR2YWxncmluZF9vbmx5CisJdGhlbgorCQlHSVRfVkFMR1JJTkRfRU5BQkxFRD10CisJZmkKK30KKwordHJhY2VfbGV2ZWxfPTAKK3dhbnRfdHJhY2UgKCkgeworCXRlc3QgIiR0cmFjZSIgPSB0ICYmIHsKKwkJdGVzdCAiJHZlcmJvc2UiID0gdCB8fCB0ZXN0ICIkdmVyYm9zZV9sb2ciID0gdAorCX0KK30KKworIyBUaGlzIGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gYmVjYXVzZSBzb21lIHRlc3RzIHVzZQorIyAicmV0dXJuIiB0byBlbmQgYSB0ZXN0X2V4cGVjdF9zdWNjZXNzIGJsb2NrIGVhcmx5CisjIChhbmQgd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgcnVuIGFueSBjbGVhbnVwIGxpa2UKKyMgInNldCAreCIpLgordGVzdF9ldmFsX2lubmVyXyAoKSB7CisJIyBEbyBub3QgYWRkIGFueXRoaW5nIGV4dHJhIChpbmNsdWRpbmcgTEYpIGFmdGVyICckKicKKwlldmFsICIKKwkJd2FudF90cmFjZSAmJiB0cmFjZV9sZXZlbF89JCgoJHRyYWNlX2xldmVsXysxKSkgJiYgc2V0IC14CisJCSQqIgorfQorCit0ZXN0X2V2YWxfICgpIHsKKwkjIElmICIteCIgdHJhY2luZyBpcyBpbiBlZmZlY3QsIHRoZW4gd2Ugd2FudCB0byBhdm9pZCBwb2xsdXRpbmcgc3RkZXJyCisJIyB3aXRoIG5vbi10ZXN0IGNvbW1hbmRzLiBCdXQgb25jZSBpbiAic2V0IC14IiBtb2RlLCB3ZSBjYW5ub3QgcHJldmVudAorCSMgdGhlIHNoZWxsIGZyb20gcHJpbnRpbmcgdGhlICJzZXQgK3giIHRvIHR1cm4gaXQgb2ZmIChub3IgdGhlIHNhdmluZworCSMgb2YgJD8gYmVmb3JlIHRoYXQpLiBCdXQgd2UgY2FuIG1ha2Ugc3VyZSB0aGF0IHRoZSBvdXRwdXQgZ29lcyB0bworCSMgL2Rldi9udWxsLgorCSMKKwkjIFRoZXJlIGFyZSBhIGZldyBzdWJ0bGV0aWVzIGhlcmU6CisJIworCSMgICAtIHdlIGhhdmUgdG8gcmVkaXJlY3QgZGVzY3JpcHRvciA0IGluIGFkZGl0aW9uIHRvIDIsIHRvIGNvdmVyCisJIyAgICAgQkFTSF9YVFJBQ0VGRAorCSMKKwkjICAgLSB0aGUgYWN0dWFsIGV2YWwgaGFzIHRvIGNvbWUgYmVmb3JlIHRoZSByZWRpcmVjdGlvbiBibG9jayAoc2luY2UKKwkjICAgICBpdCBuZWVkcyB0byBzZWUgZGVzY3JpcHRvciA0IHRvIHNldCB1cCBpdHMgc3RkZXJyKQorCSMKKwkjICAgLSBsaWtld2lzZSwgYW55IGVycm9yIG1lc3NhZ2Ugd2UgcHJpbnQgbXVzdCBiZSBvdXRzaWRlIHRoZSBibG9jayB0bworCSMgICAgIGFjY2VzcyBkZXNjcmlwdG9yIDQKKwkjCisJIyAgIC0gY2hlY2tpbmcgJD8gaGFzIHRvIGNvbWUgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGV2YWwsIGJ1dCBpdCBtdXN0CisJIyAgICAgYmUgX2luc2lkZV8gdGhlIGJsb2NrIHRvIGF2b2lkIHBvbGx1dGluZyB0aGUgInNldCAteCIgb3V0cHV0CisJIworCisJdGVzdF9ldmFsX2lubmVyXyAiJEAiIDwvZGV2L251bGwgPiYzIDI+JjQKKwl7CisJCXRlc3RfZXZhbF9yZXRfPSQ/CisJCWlmIHdhbnRfdHJhY2UKKwkJdGhlbgorCQkJdGVzdCAxID0gJHRyYWNlX2xldmVsXyAmJiBzZXQgK3gKKwkJCXRyYWNlX2xldmVsXz0kKCgkdHJhY2VfbGV2ZWxfLTEpKQorCQlmaQorCX0gMj4vZGV2L251bGwgND4mMgorCisJaWYgdGVzdCAiJHRlc3RfZXZhbF9yZXRfIiAhPSAwICYmIHdhbnRfdHJhY2UKKwl0aGVuCisJCXNheV9jb2xvciBlcnJvciA+JjQgImVycm9yOiBsYXN0IGNvbW1hbmQgZXhpdGVkIHdpdGggXCQ/PSR0ZXN0X2V2YWxfcmV0XyIKKwlmaQorCXJldHVybiAkdGVzdF9ldmFsX3JldF8KK30KKwordGVzdF9ydW5fICgpIHsKKwl0ZXN0X2NsZWFudXA9OgorCWV4cGVjdGluZ19mYWlsdXJlPSQyCisKKwlpZiB0ZXN0ICIke0dJVF9URVNUX0NIQUlOX0xJTlQ6LTF9IiAhPSAwOyB0aGVuCisJCSMgdHVybiBvZmYgdHJhY2luZyBmb3IgdGhpcyB0ZXN0LWV2YWwsIGFzIGl0IHNpbXBseSBjcmVhdGVzCisJCSMgY29uZnVzaW5nIG5vaXNlIGluIHRoZSAiLXgiIG91dHB1dAorCQl0cmFjZV90bXA9JHRyYWNlCisJCXRyYWNlPQorCQkjIDExNyBpcyBtYWdpYyBiZWNhdXNlIGl0IGlzIHVubGlrZWx5IHRvIG1hdGNoIHRoZSBleGl0CisJCSMgY29kZSBvZiBvdGhlciBwcm9ncmFtcworCQlpZiAkKHByaW50ZiAnJXNcbicgIiQxIiB8IHNlZCAtZiAiJEdJVF9CVUlMRF9ESVIvdC9jaGFpbmxpbnQuc2VkIiB8IGdyZXAgLXEgJz8hW0EtWl1bQS1aXSo/IScpIHx8CisJCQl0ZXN0ICJPSy0xMTciICE9ICIkKHRlc3RfZXZhbF8gIihleGl0IDExNykgJiYgJDEke0xGfSR7TEZ9ZWNobyBPSy1cJD8iIDM+JjEpIgorCQl0aGVuCisJCQlCVUcgImJyb2tlbiAmJi1jaGFpbiBvciBydW4tYXdheSBIRVJFLURPQzogJDEiCisJCWZpCisJCXRyYWNlPSR0cmFjZV90bXAKKwlmaQorCisJc2V0dXBfbWFsbG9jX2NoZWNrCisJdGVzdF9ldmFsXyAiJDEiCisJZXZhbF9yZXQ9JD8KKwl0ZWFyZG93bl9tYWxsb2NfY2hlY2sKKworCWlmIHRlc3QgLXogIiRpbW1lZGlhdGUiIHx8IHRlc3QgJGV2YWxfcmV0ID0gMCB8fAorCSAgIHRlc3QgLW4gIiRleHBlY3RpbmdfZmFpbHVyZSIgJiYgdGVzdCAiJHRlc3RfY2xlYW51cCIgIT0gIjoiCisJdGhlbgorCQlzZXR1cF9tYWxsb2NfY2hlY2sKKwkJdGVzdF9ldmFsXyAiJHRlc3RfY2xlYW51cCIKKwkJdGVhcmRvd25fbWFsbG9jX2NoZWNrCisJZmkKKwlpZiB0ZXN0ICIkdmVyYm9zZSIgPSAidCIgJiYgdGVzdCAtbiAiJEhBUk5FU1NfQUNUSVZFIgorCXRoZW4KKwkJZWNobyAiIgorCWZpCisJcmV0dXJuICIkZXZhbF9yZXQiCit9CisKK3Rlc3Rfc3RhcnRfICgpIHsKKwl0ZXN0X2NvdW50PSQoKCR0ZXN0X2NvdW50KzEpKQorCW1heWJlX3NldHVwX3ZlcmJvc2UKKwltYXliZV9zZXR1cF92YWxncmluZAorCWlmIHRlc3QgLW4gIiR3cml0ZV9qdW5pdF94bWwiCisJdGhlbgorCQlqdW5pdF9zdGFydD0kKHRlc3QtdG9vbCBkYXRlIGdldG5hbm9zKQorCWZpCit9CisKK3Rlc3RfZmluaXNoXyAoKSB7CisJZWNobyA+JjMgIiIKKwltYXliZV90ZWFyZG93bl92YWxncmluZAorCW1heWJlX3RlYXJkb3duX3ZlcmJvc2UKKwlpZiB0ZXN0IC1uICIkR0lUX1RFU1RfVEVFX09GRlNFVCIKKwl0aGVuCisJCUdJVF9URVNUX1RFRV9PRkZTRVQ9JCh0ZXN0LXRvb2wgcGF0aC11dGlscyBmaWxlLXNpemUgXAorCQkJIiRHSVRfVEVTVF9URUVfT1VUUFVUX0ZJTEUiKQorCWZpCit9CisKK3Rlc3Rfc2tpcCAoKSB7CisJdG9fc2tpcD0KKwlza2lwcGVkX3JlYXNvbj0KKwlpZiBtYXRjaF9wYXR0ZXJuX2xpc3QgJHRoaXNfdGVzdC4kdGVzdF9jb3VudCAkR0lUX1NLSVBfVEVTVFMKKwl0aGVuCisJCXRvX3NraXA9dAorCQlza2lwcGVkX3JlYXNvbj0iR0lUX1NLSVBfVEVTVFMiCisJZmkKKwlpZiB0ZXN0IC16ICIkdG9fc2tpcCIgJiYgdGVzdCAtbiAiJHJ1bl9saXN0IiAmJgorCSAgICEgbWF0Y2hfdGVzdF9zZWxlY3Rvcl9saXN0ICctLXJ1bicgJHRlc3RfY291bnQgIiRydW5fbGlzdCIKKwl0aGVuCisJCXRvX3NraXA9dAorCQlza2lwcGVkX3JlYXNvbj0iLS1ydW4iCisJZmkKKwlpZiB0ZXN0IC16ICIkdG9fc2tpcCIgJiYgdGVzdCAtbiAiJHRlc3RfcHJlcmVxIiAmJgorCSAgICEgdGVzdF9oYXZlX3ByZXJlcSAiJHRlc3RfcHJlcmVxIgorCXRoZW4KKwkJdG9fc2tpcD10CisKKwkJb2ZfcHJlcmVxPQorCQlpZiB0ZXN0ICIkbWlzc2luZ19wcmVyZXEiICE9ICIkdGVzdF9wcmVyZXEiCisJCXRoZW4KKwkJCW9mX3ByZXJlcT0iIG9mICR0ZXN0X3ByZXJlcSIKKwkJZmkKKwkJc2tpcHBlZF9yZWFzb249Im1pc3NpbmcgJG1pc3NpbmdfcHJlcmVxJHtvZl9wcmVyZXF9IgorCWZpCisKKwljYXNlICIkdG9fc2tpcCIgaW4KKwl0KQorCQlpZiB0ZXN0IC1uICIkd3JpdGVfanVuaXRfeG1sIgorCQl0aGVuCisJCQltZXNzYWdlPSIkKHhtbF9hdHRyX2VuY29kZSAiJHNraXBwZWRfcmVhc29uIikiCisJCQl3cml0ZV9qdW5pdF94bWxfdGVzdGNhc2UgIiQxIiBcCisJCQkJIiAgICAgIDxza2lwcGVkIG1lc3NhZ2U9XCIkbWVzc2FnZVwiIC8+IgorCQlmaQorCisJCXNheV9jb2xvciBza2lwID4mMyAic2tpcHBpbmcgdGVzdDogJEAiCisJCXNheV9jb2xvciBza2lwICJvayAkdGVzdF9jb3VudCAjIHNraXAgJDEgKCRza2lwcGVkX3JlYXNvbikiCisJCTogdHJ1ZQorCQk7OworCSopCisJCWZhbHNlCisJCTs7CisJZXNhYworfQorCisjIHN0dWI7IHBlcmYtbGliIG92ZXJyaWRlcyBpdAordGVzdF9hdF9lbmRfaG9va18gKCkgeworCToKK30KKword3JpdGVfanVuaXRfeG1sICgpIHsKKwljYXNlICIkMSIgaW4KKwktLXRydW5jYXRlKQorCQk+IiRqdW5pdF94bWxfcGF0aCIKKwkJanVuaXRfaGF2ZV90ZXN0Y2FzZT0KKwkJc2hpZnQKKwkJOzsKKwllc2FjCisJcHJpbnRmICclc1xuJyAiJEAiID4+IiRqdW5pdF94bWxfcGF0aCIKK30KKworeG1sX2F0dHJfZW5jb2RlICgpIHsKKwlwcmludGYgJyVzXG4nICIkQCIgfCB0ZXN0LXRvb2wgeG1sLWVuY29kZQorfQorCit3cml0ZV9qdW5pdF94bWxfdGVzdGNhc2UgKCkgeworCWp1bml0X2F0dHJzPSJuYW1lPVwiJCh4bWxfYXR0cl9lbmNvZGUgIiR0aGlzX3Rlc3QuJHRlc3RfY291bnQgJDEiKVwiIgorCXNoaWZ0CisJanVuaXRfYXR0cnM9IiRqdW5pdF9hdHRycyBjbGFzc25hbWU9XCIkdGhpc190ZXN0XCIiCisJanVuaXRfYXR0cnM9IiRqdW5pdF9hdHRycyB0aW1lPVwiJCh0ZXN0LXRvb2wgXAorCQlkYXRlIGdldG5hbm9zICRqdW5pdF9zdGFydClcIiIKKwl3cml0ZV9qdW5pdF94bWwgIiQocHJpbnRmICclc1xuJyBcCisJCSIgICAgPHRlc3RjYXNlICRqdW5pdF9hdHRycz4iICIkQCIgIiAgICA8L3Rlc3RjYXNlPiIpIgorCWp1bml0X2hhdmVfdGVzdGNhc2U9dAorfQorCitmaW5hbGl6ZV9qdW5pdF94bWwgKCkgeworCWlmIHRlc3QgLW4gIiR3cml0ZV9qdW5pdF94bWwiICYmIHRlc3QgLW4gIiRqdW5pdF94bWxfcGF0aCIKKwl0aGVuCisJCXRlc3QgLW4gIiRqdW5pdF9oYXZlX3Rlc3RjYXNlIiB8fCB7CisJCQlqdW5pdF9zdGFydD0kKHRlc3QtdG9vbCBkYXRlIGdldG5hbm9zKQorCQkJd3JpdGVfanVuaXRfeG1sX3Rlc3RjYXNlICJhbGwgdGVzdHMgc2tpcHBlZCIKKwkJfQorCisJCSMgYWRqdXN0IHRoZSBvdmVyYWxsIHRpbWUKKwkJanVuaXRfdGltZT0kKHRlc3QtdG9vbCBkYXRlIGdldG5hbm9zICRqdW5pdF9zdWl0ZV9zdGFydCkKKwkJc2VkIC1lICJzL1woPHRlc3RzdWl0ZS4qXCkgdGltZT1cIlteXCJdKlwiL1wxLyIgXAorCQkJLWUgInMvPHRlc3RzdWl0ZSBbXj5dKi8mIHRpbWU9XCIkanVuaXRfdGltZVwiLyIgXAorCQkJLWUgJy9eICo8XC90ZXN0c3VpdGUvZCcgXAorCQkJPCIkanVuaXRfeG1sX3BhdGgiID4iJGp1bml0X3htbF9wYXRoLm5ldyIKKwkJbXYgIiRqdW5pdF94bWxfcGF0aC5uZXciICIkanVuaXRfeG1sX3BhdGgiCisKKwkJd3JpdGVfanVuaXRfeG1sICIgIDwvdGVzdHN1aXRlPiIgIjwvdGVzdHN1aXRlcz4iCisJCXdyaXRlX2p1bml0X3htbD0KKwlmaQorfQorCit0ZXN0X2F0ZXhpdF9jbGVhbnVwPToKK3Rlc3RfYXRleGl0X2hhbmRsZXIgKCkgeworCSMgSW4gYSBzdWNjZWVkaW5nIHRlc3Qgc2NyaXB0ICd0ZXN0X2F0ZXhpdF9oYW5kbGVyJyBpcyBpbnZva2VkCisJIyB0d2ljZTogZmlyc3QgZnJvbSAndGVzdF9kb25lJywgdGhlbiBmcm9tICdkaWUnIGluIHRoZSB0cmFwIG9uCisJIyBFWElULgorCSMgVGhpcyBjb25kaXRpb24gYW5kIHJlc2V0dGluZyAndGVzdF9hdGV4aXRfY2xlYW51cCcgYmVsb3cgbWFrZXMKKwkjIHN1cmUgdGhhdCB0aGUgcmVnaXN0ZXJlZCBjbGVhbnVwIGNvbW1hbmRzIGFyZSBydW4gb25seSBvbmNlLgorCXRlc3QgOiAhPSAiJHRlc3RfYXRleGl0X2NsZWFudXAiIHx8IHJldHVybiAwCisKKwlzZXR1cF9tYWxsb2NfY2hlY2sKKwl0ZXN0X2V2YWxfICIkdGVzdF9hdGV4aXRfY2xlYW51cCIKKwl0ZXN0X2F0ZXhpdF9jbGVhbnVwPToKKwl0ZWFyZG93bl9tYWxsb2NfY2hlY2sKK30KKwordGVzdF9kb25lICgpIHsKKwlHSVRfRVhJVF9PSz10CisKKwkjIFJ1biB0aGUgYXRleGl0IGNvbW1hbmRzIF9iZWZvcmVfIHRoZSB0cmFzaCBkaXJlY3RvcnkgaXMKKwkjIHJlbW92ZWQsIHNvIHRoZSBjb21tYW5kcyBjYW4gYWNjZXNzIHBpZGZpbGVzIGFuZCBzb2NrZXQgZmlsZXMuCisJdGVzdF9hdGV4aXRfaGFuZGxlcgorCisJZmluYWxpemVfanVuaXRfeG1sCisKKwlpZiB0ZXN0IC16ICIkSEFSTkVTU19BQ1RJVkUiCisJdGhlbgorCQlta2RpciAtcCAiJFRFU1RfUkVTVUxUU19ESVIiCisKKwkJY2F0ID4iJFRFU1RfUkVTVUxUU19CQVNFLmNvdW50cyIgPDwtRU9GCisJCXRvdGFsICR0ZXN0X2NvdW50CisJCXN1Y2Nlc3MgJHRlc3Rfc3VjY2VzcworCQlmaXhlZCAkdGVzdF9maXhlZAorCQlicm9rZW4gJHRlc3RfYnJva2VuCisJCWZhaWxlZCAkdGVzdF9mYWlsdXJlCisKKwkJRU9GCisJZmkKKworCWlmIHRlc3QgIiR0ZXN0X2ZpeGVkIiAhPSAwCisJdGhlbgorCQlzYXlfY29sb3IgZXJyb3IgIiMgJHRlc3RfZml4ZWQga25vd24gYnJlYWthZ2UocykgdmFuaXNoZWQ7IHBsZWFzZSB1cGRhdGUgdGVzdChzKSIKKwlmaQorCWlmIHRlc3QgIiR0ZXN0X2Jyb2tlbiIgIT0gMAorCXRoZW4KKwkJc2F5X2NvbG9yIHdhcm4gIiMgc3RpbGwgaGF2ZSAkdGVzdF9icm9rZW4ga25vd24gYnJlYWthZ2UocykiCisJZmkKKwlpZiB0ZXN0ICIkdGVzdF9icm9rZW4iICE9IDAgfHwgdGVzdCAiJHRlc3RfZml4ZWQiICE9IDAKKwl0aGVuCisJCXRlc3RfcmVtYWluaW5nPSQoKCAkdGVzdF9jb3VudCAtICR0ZXN0X2Jyb2tlbiAtICR0ZXN0X2ZpeGVkICkpCisJCW1zZz0icmVtYWluaW5nICR0ZXN0X3JlbWFpbmluZyB0ZXN0KHMpIgorCWVsc2UKKwkJdGVzdF9yZW1haW5pbmc9JHRlc3RfY291bnQKKwkJbXNnPSIkdGVzdF9jb3VudCB0ZXN0KHMpIgorCWZpCisJY2FzZSAiJHRlc3RfZmFpbHVyZSIgaW4KKwkwKQorCQlpZiB0ZXN0ICR0ZXN0X2V4dGVybmFsX2hhc190YXAgLWVxIDAKKwkJdGhlbgorCQkJaWYgdGVzdCAkdGVzdF9yZW1haW5pbmcgLWd0IDAKKwkJCXRoZW4KKwkJCQlzYXlfY29sb3IgcGFzcyAiIyBwYXNzZWQgYWxsICRtc2ciCisJCQlmaQorCisJCQkjIE1heWJlIHByaW50IFNLSVAgbWVzc2FnZQorCQkJdGVzdCAteiAiJHNraXBfYWxsIiB8fCBza2lwX2FsbD0iIyBTS0lQICRza2lwX2FsbCIKKwkJCWNhc2UgIiR0ZXN0X2NvdW50IiBpbgorCQkJMCkKKwkJCQlzYXkgIjEuLiR0ZXN0X2NvdW50JHtza2lwX2FsbDorICRza2lwX2FsbH0iCisJCQkJOzsKKwkJCSopCisJCQkJdGVzdCAteiAiJHNraXBfYWxsIiB8fAorCQkJCXNheV9jb2xvciB3YXJuICIkc2tpcF9hbGwiCisJCQkJc2F5ICIxLi4kdGVzdF9jb3VudCIKKwkJCQk7OworCQkJZXNhYworCQlmaQorCisJCWlmIHRlc3QgLXogIiRkZWJ1ZyIKKwkJdGhlbgorCQkJdGVzdCAtZCAiJFRSQVNIX0RJUkVDVE9SWSIgfHwKKwkJCWVycm9yICJUZXN0cyBwYXNzZWQgYnV0IHRyYXNoIGRpcmVjdG9yeSBhbHJlYWR5IHJlbW92ZWQgYmVmb3JlIHRlc3QgY2xlYW51cDsgYWJvcnRpbmciCisKKwkJCWNkICIkVFJBU0hfRElSRUNUT1JZLy4uIiAmJgorCQkJcm0gLWZyICIkVFJBU0hfRElSRUNUT1JZIiB8fCB7CisJCQkJIyB0cnkgYWdhaW4gaW4gYSBiaXQKKwkJCQlzbGVlcCA1OworCQkJCXJtIC1mciAiJFRSQVNIX0RJUkVDVE9SWSIKKwkJCX0gfHwKKwkJCWVycm9yICJUZXN0cyBwYXNzZWQgYnV0IHRlc3QgY2xlYW51cCBmYWlsZWQ7IGFib3J0aW5nIgorCQlmaQorCQl0ZXN0X2F0X2VuZF9ob29rXworCisJCWV4aXQgMCA7OworCisJKikKKwkJaWYgdGVzdCAkdGVzdF9leHRlcm5hbF9oYXNfdGFwIC1lcSAwCisJCXRoZW4KKwkJCXNheV9jb2xvciBlcnJvciAiIyBmYWlsZWQgJHRlc3RfZmFpbHVyZSBhbW9uZyAkbXNnIgorCQkJc2F5ICIxLi4kdGVzdF9jb3VudCIKKwkJZmkKKworCQlleGl0IDEgOzsKKworCWVzYWMKK30KKworaWYgdGVzdCAtbiAiJHZhbGdyaW5kIgordGhlbgorCW1ha2Vfc3ltbGluayAoKSB7CisJCXRlc3QgLWggIiQyIiAmJgorCQl0ZXN0ICIkMSIgPSAiJChyZWFkbGluayAiJDIiKSIgfHwgeworCQkJIyBiZSBzdXBlciBwYXJhbm9pZAorCQkJaWYgbWtkaXIgIiQyIi5sb2NrCisJCQl0aGVuCisJCQkJcm0gLWYgIiQyIiAmJgorCQkJCWxuIC1zICIkMSIgIiQyIiAmJgorCQkJCXJtIC1yICIkMiIubG9jaworCQkJZWxzZQorCQkJCXdoaWxlIHRlc3QgLWQgIiQyIi5sb2NrCisJCQkJZG8KKwkJCQkJc2F5ICJXYWl0aW5nIGZvciBsb2NrIG9uICQyLiIKKwkJCQkJc2xlZXAgMQorCQkJCWRvbmUKKwkJCWZpCisJCX0KKwl9CisKKwltYWtlX3ZhbGdyaW5kX3N5bWxpbmsgKCkgeworCQkjIGhhbmRsZSBvbmx5IGV4ZWN1dGFibGVzLCB1bmxlc3MgdGhleSBhcmUgc2hlbGwgbGlicmFyaWVzIHRoYXQKKwkJIyBuZWVkIHRvIGJlIGluIHRoZSBleGVjLXBhdGguCisJCXRlc3QgLXggIiQxIiB8fAorCQl0ZXN0ICIjICIgPSAiJCh0ZXN0X2NvcHlfYnl0ZXMgMiA8IiQxIikiIHx8CisJCXJldHVybjsKKworCQliYXNlPSQoYmFzZW5hbWUgIiQxIikKKwkJY2FzZSAiJGJhc2UiIGluCisJCXRlc3QtKikKKwkJCXN5bWxpbmtfdGFyZ2V0PSIkR0lUX0JVSUxEX0RJUi90L2hlbHBlci8kYmFzZSIKKwkJCTs7CisJCSopCisJCQlzeW1saW5rX3RhcmdldD0iJEdJVF9CVUlMRF9ESVIvJGJhc2UiCisJCQk7OworCQllc2FjCisJCSMgZG8gbm90IG92ZXJyaWRlIHNjcmlwdHMKKwkJaWYgdGVzdCAteCAiJHN5bWxpbmtfdGFyZ2V0IiAmJgorCQkgICAgdGVzdCAhIC1kICIkc3ltbGlua190YXJnZXQiICYmCisJCSAgICB0ZXN0ICIjISIgIT0gIiQodGVzdF9jb3B5X2J5dGVzIDIgPCIkc3ltbGlua190YXJnZXQiKSIKKwkJdGhlbgorCQkJc3ltbGlua190YXJnZXQ9Li4vdmFsZ3JpbmQuc2gKKwkJZmkKKwkJY2FzZSAiJGJhc2UiIGluCisJCSouc2h8Ki5wZXJsKQorCQkJc3ltbGlua190YXJnZXQ9Li4vdW5wcm9jZXNzZWQtc2NyaXB0CisJCWVzYWMKKwkJIyBjcmVhdGUgdGhlIGxpbmssIG9yIHJlcGxhY2UgaXQgaWYgaXQgaXMgb3V0IG9mIGRhdGUKKwkJbWFrZV9zeW1saW5rICIkc3ltbGlua190YXJnZXQiICIkR0lUX1ZBTEdSSU5EL2Jpbi8kYmFzZSIgfHwgZXhpdAorCX0KKworCSMgb3ZlcnJpZGUgYWxsIGdpdCBleGVjdXRhYmxlcyBpbiBURVNUX0RJUkVDVE9SWS8uLgorCUdJVF9WQUxHUklORD0kVEVTVF9ESVJFQ1RPUlkvdmFsZ3JpbmQKKwlta2RpciAtcCAiJEdJVF9WQUxHUklORCIvYmluCisJZm9yIGZpbGUgaW4gJEdJVF9CVUlMRF9ESVIvZ2l0KiAkR0lUX0JVSUxEX0RJUi90L2hlbHBlci90ZXN0LSoKKwlkbworCQltYWtlX3ZhbGdyaW5kX3N5bWxpbmsgJGZpbGUKKwlkb25lCisJIyBzcGVjaWFsLWNhc2UgdGhlIG1lcmdldG9vbHMgbG9hZGFibGVzCisJbWFrZV9zeW1saW5rICIkR0lUX0JVSUxEX0RJUiIvbWVyZ2V0b29scyAiJEdJVF9WQUxHUklORC9iaW4vbWVyZ2V0b29scyIKKwlPTERJRlM9JElGUworCUlGUz06CisJZm9yIHBhdGggaW4gJFBBVEgKKwlkbworCQlscyAiJHBhdGgiL2dpdC0qIDI+IC9kZXYvbnVsbCB8CisJCXdoaWxlIHJlYWQgZmlsZQorCQlkbworCQkJbWFrZV92YWxncmluZF9zeW1saW5rICIkZmlsZSIKKwkJZG9uZQorCWRvbmUKKwlJRlM9JE9MRElGUworCVBBVEg9JEdJVF9WQUxHUklORC9iaW46JFBBVEgKKwlHSVRfRVhFQ19QQVRIPSRHSVRfVkFMR1JJTkQvYmluCisJZXhwb3J0IEdJVF9WQUxHUklORAorCUdJVF9WQUxHUklORF9NT0RFPSIkdmFsZ3JpbmQiCisJZXhwb3J0IEdJVF9WQUxHUklORF9NT0RFCisJR0lUX1ZBTEdSSU5EX0VOQUJMRUQ9dAorCXRlc3QgLW4gIiR2YWxncmluZF9vbmx5IiAmJiBHSVRfVkFMR1JJTkRfRU5BQkxFRD0KKwlleHBvcnQgR0lUX1ZBTEdSSU5EX0VOQUJMRUQKK2VsaWYgdGVzdCAtbiAiJEdJVF9URVNUX0lOU1RBTExFRCIKK3RoZW4KKwlHSVRfRVhFQ19QQVRIPSQoJEdJVF9URVNUX0lOU1RBTExFRC9naXQgLS1leGVjLXBhdGgpICB8fAorCWVycm9yICJDYW5ub3QgcnVuIGdpdCBmcm9tICRHSVRfVEVTVF9JTlNUQUxMRUQuIgorCVBBVEg9JEdJVF9URVNUX0lOU1RBTExFRDokR0lUX0JVSUxEX0RJUi90L2hlbHBlcjokUEFUSAorCUdJVF9FWEVDX1BBVEg9JHtHSVRfVEVTVF9FWEVDX1BBVEg6LSRHSVRfRVhFQ19QQVRIfQorZWxzZSAjIG5vcm1hbCBjYXNlLCB1c2UgLi4vYmluLXdyYXBwZXJzIG9ubHkgdW5sZXNzICR3aXRoX2Rhc2hlczoKKwlpZiB0ZXN0IC1uICIkbm9fYmluX3dyYXBwZXJzIgorCXRoZW4KKwkJd2l0aF9kYXNoZXM9dAorCWVsc2UKKwkJZ2l0X2Jpbl9kaXI9IiRHSVRfQlVJTERfRElSL2Jpbi13cmFwcGVycyIKKwkJaWYgISB0ZXN0IC14ICIkZ2l0X2Jpbl9kaXIvZ2l0IgorCQl0aGVuCisJCQlpZiB0ZXN0IC16ICIkd2l0aF9kYXNoZXMiCisJCQl0aGVuCisJCQkJc2F5ICIkZ2l0X2Jpbl9kaXIvZ2l0IGlzIG5vdCBleGVjdXRhYmxlOyB1c2luZyBHSVRfRVhFQ19QQVRIIgorCQkJZmkKKwkJCXdpdGhfZGFzaGVzPXQKKwkJZmkKKwkJUEFUSD0iJGdpdF9iaW5fZGlyOiRQQVRIIgorCWZpCisJR0lUX0VYRUNfUEFUSD0kR0lUX0JVSUxEX0RJUgorCWlmIHRlc3QgLW4gIiR3aXRoX2Rhc2hlcyIKKwl0aGVuCisJCVBBVEg9IiRHSVRfQlVJTERfRElSOiRHSVRfQlVJTERfRElSL3QvaGVscGVyOiRQQVRIIgorCWZpCitmaQorR0lUX1RFTVBMQVRFX0RJUj0iJEdJVF9CVUlMRF9ESVIiL3RlbXBsYXRlcy9ibHQKK0dJVF9DT05GSUdfTk9TWVNURU09MQorR0lUX0FUVFJfTk9TWVNURU09MQorZXhwb3J0IFBBVEggR0lUX0VYRUNfUEFUSCBHSVRfVEVNUExBVEVfRElSIEdJVF9DT05GSUdfTk9TWVNURU0gR0lUX0FUVFJfTk9TWVNURU0KKworaWYgdGVzdCAteiAiJEdJVF9URVNUX0NNUCIKK3RoZW4KKwlpZiB0ZXN0IC1uICIkR0lUX1RFU1RfQ01QX1VTRV9DT1BJRURfQ09OVEVYVCIKKwl0aGVuCisJCUdJVF9URVNUX0NNUD0iJERJRkYgLWMiCisJZWxzZQorCQlHSVRfVEVTVF9DTVA9IiRESUZGIC11IgorCWZpCitmaQorCitHSVRQRVJMTElCPSIkR0lUX0JVSUxEX0RJUiIvcGVybC9idWlsZC9saWIKK2V4cG9ydCBHSVRQRVJMTElCCit0ZXN0IC1kICIkR0lUX0JVSUxEX0RJUiIvdGVtcGxhdGVzL2JsdCB8fCB7CisJZXJyb3IgIllvdSBoYXZlbid0IGJ1aWx0IHRoaW5ncyB5ZXQsIGhhdmUgeW91PyIKK30KKworaWYgISB0ZXN0IC14ICIkR0lUX0JVSUxEX0RJUiIvdC9oZWxwZXIvdGVzdC10b29sJFgKK3RoZW4KKwllY2hvID4mMiAnWW91IG5lZWQgdG8gYnVpbGQgdGVzdC10b29sOicKKwllY2hvID4mMiAnUnVuICJtYWtlIHQvaGVscGVyL3Rlc3QtdG9vbCIgaW4gdGhlIHNvdXJjZSAodG9wbGV2ZWwpIGRpcmVjdG9yeScKKwlleGl0IDEKK2ZpCisKKyMgVGVzdCByZXBvc2l0b3J5CitybSAtZnIgIiRUUkFTSF9ESVJFQ1RPUlkiIHx8IHsKKwlHSVRfRVhJVF9PSz10CisJZWNobyA+JjUgIkZBVEFMOiBDYW5ub3QgcHJlcGFyZSB0ZXN0IGFyZWEiCisJZXhpdCAxCit9CisKK0hPTUU9IiRUUkFTSF9ESVJFQ1RPUlkiCitHTlVQR0hPTUU9IiRIT01FL2dudXBnLWhvbWUtbm90LXVzZWQiCitleHBvcnQgSE9NRSBHTlVQR0hPTUUKKworaWYgdGVzdCAteiAiJFRFU1RfTk9fQ1JFQVRFX1JFUE8iCit0aGVuCisJdGVzdF9jcmVhdGVfcmVwbyAiJFRSQVNIX0RJUkVDVE9SWSIKK2Vsc2UKKwlta2RpciAtcCAiJFRSQVNIX0RJUkVDVE9SWSIKK2ZpCisKKyMgVXNlIC1QIHRvIHJlc29sdmUgc3ltbGlua3MgaW4gb3VyIHdvcmtpbmcgZGlyZWN0b3J5IHNvIHRoYXQgdGhlIGN3ZAorIyBpbiBzdWJwcm9jZXNzZXMgbGlrZSBnaXQgZXF1YWxzIG91ciAkUFdEIChmb3IgcGF0aG5hbWUgY29tcGFyaXNvbnMpLgorY2QgLVAgIiRUUkFTSF9ESVJFQ1RPUlkiIHx8IGV4aXQgMQorCit0aGlzX3Rlc3Q9JHswIyMqL30KK3RoaXNfdGVzdD0ke3RoaXNfdGVzdCUlLSp9CitpZiBtYXRjaF9wYXR0ZXJuX2xpc3QgIiR0aGlzX3Rlc3QiICRHSVRfU0tJUF9URVNUUwordGhlbgorCXNheV9jb2xvciBpbmZvID4mMyAic2tpcHBpbmcgdGVzdCAkdGhpc190ZXN0IGFsdG9nZXRoZXIiCisJc2tpcF9hbGw9InNraXAgYWxsIHRlc3RzIGluICR0aGlzX3Rlc3QiCisJdGVzdF9kb25lCitmaQorCitpZiB0ZXN0IC1uICIkd3JpdGVfanVuaXRfeG1sIgordGhlbgorCWp1bml0X3htbF9kaXI9IiRURVNUX09VVFBVVF9ESVJFQ1RPUlkvb3V0IgorCW1rZGlyIC1wICIkanVuaXRfeG1sX2RpciIKKwlqdW5pdF94bWxfYmFzZT0kezAjIyovfQorCWp1bml0X3htbF9wYXRoPSIkanVuaXRfeG1sX2Rpci9URVNULSR7anVuaXRfeG1sX2Jhc2UlLnNofS54bWwiCisJanVuaXRfYXR0cnM9Im5hbWU9XCIke2p1bml0X3htbF9iYXNlJS5zaH1cIiIKKwlqdW5pdF9hdHRycz0iJGp1bml0X2F0dHJzIHRpbWVzdGFtcD1cIiQoVFo9VVRDIFwKKwkJZGF0ZSArJVktJW0tJWRUJUg6JU06JVMpXCIiCisJd3JpdGVfanVuaXRfeG1sIC0tdHJ1bmNhdGUgIjx0ZXN0c3VpdGVzPiIgIiAgPHRlc3RzdWl0ZSAkanVuaXRfYXR0cnM+IgorCWp1bml0X3N1aXRlX3N0YXJ0PSQodGVzdC10b29sIGRhdGUgZ2V0bmFub3MpCisJaWYgdGVzdCAtbiAiJEdJVF9URVNUX1RFRV9PVVRQVVRfRklMRSIKKwl0aGVuCisJCUdJVF9URVNUX1RFRV9PRkZTRVQ9MAorCWZpCitmaQorCisjIENvbnZlbmllbmNlCisjIEEgcmVnZXhwIHRvIG1hdGNoIDUsIDM1IGFuZCA0MCBoZXhkaWdpdHMKK194MDU9J1swLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl0nCitfeDM1PSIkX3gwNSRfeDA1JF94MDUkX3gwNSRfeDA1JF94MDUkX3gwNSIKK194NDA9IiRfeDM1JF94MDUiCisKK3Rlc3Rfb2lkX2luaXQKKworWkVST19PSUQ9JCh0ZXN0X29pZCB6ZXJvKQorT0lEX1JFR0VYPSQoZWNobyAkWkVST19PSUQgfCBzZWQgLWUgJ3MvMC9bMC05YS1mXS9nJykKK0VNUFRZX1RSRUU9JCh0ZXN0X29pZCBlbXB0eV90cmVlKQorRU1QVFlfQkxPQj0kKHRlc3Rfb2lkIGVtcHR5X2Jsb2IpCitfejQwPSRaRVJPX09JRAorCisjIFByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlICd5ZXMnIHV0aWxpdHk7IHRoZSB1cHBlciBib3VuZAorIyBsaW1pdCBpcyB0aGVyZSB0byBoZWxwIFdpbmRvd3MgdGhhdCBjYW5ub3Qgc3RvcCB0aGlzIGxvb3AgZnJvbQorIyB3YXN0aW5nIGN5Y2xlcyB3aGVuIHRoZSBkb3duc3RyZWFtIHN0b3BzIHJlYWRpbmcsIHNvIGRvIG5vdCBiZQorIyB0ZW1wdGVkIHRvIHR1cm4gaXQgaW50byBhbiBpbmZpbml0ZSBsb29wLiBjZi4gNjEyOWM5MzAgKCJ0ZXN0LWxpYjoKKyMgbGltaXQgdGhlIG91dHB1dCBvZiB0aGUgeWVzIHV0aWxpdHkiLCAyMDE2LTAyLTAyKQoreWVzICgpIHsKKwlpZiB0ZXN0ICQjID0gMAorCXRoZW4KKwkJeT15CisJZWxzZQorCQl5PSIkKiIKKwlmaQorCisJaT0wCisJd2hpbGUgdGVzdCAkaSAtbHQgOTkKKwlkbworCQllY2hvICIkeSIKKwkJaT0kKCgkaSsxKSkKKwlkb25lCit9CisKKyMgVGhlIEdJVF9URVNUX0ZBSUxfUFJFUkVRUyBjb2RlIGhvb2tzIGludG8gdGVzdF9zZXRfcHJlcmVxKCksIGFuZAorIyB0aHVzIG5lZWRzIHRvIGJlIHNldCB1cCByZWFsbHkgZWFybHksIGFuZCBzZXQgYW4gaW50ZXJuYWwgdmFyaWFibGUKKyMgZm9yIGNvbnZlbmllbmNlIHNvIHRoZSBob3QgdGVzdF9zZXRfcHJlcmVxKCkgY29kZXBhdGggZG9lc24ndCBuZWVkCisjIHRvIGNhbGwgImdpdCBlbnYtLWhlbHBlciIgKHZpYSB0ZXN0X2Jvb2xfZW52KS4gT25seSBkbyB0aGF0IHdvcmsKKyMgaWYgbmVlZGVkIGJ5IHNlZWluZyBpZiBHSVRfVEVTVF9GQUlMX1BSRVJFUVMgaXMgc2V0IGF0IGFsbC4KK0dJVF9URVNUX0ZBSUxfUFJFUkVRU19JTlRFUk5BTD0KK2lmIHRlc3QgLW4gIiRHSVRfVEVTVF9GQUlMX1BSRVJFUVMiCit0aGVuCisJaWYgdGVzdF9ib29sX2VudiBHSVRfVEVTVF9GQUlMX1BSRVJFUVMgZmFsc2UKKwl0aGVuCisJCUdJVF9URVNUX0ZBSUxfUFJFUkVRU19JTlRFUk5BTD10cnVlCisJCXRlc3Rfc2V0X3ByZXJlcSBGQUlMX1BSRVJFUVMKKwlmaQorZWxzZQorCXRlc3RfbGF6eV9wcmVyZXEgRkFJTF9QUkVSRVFTICcKKwkJdGVzdF9ib29sX2VudiBHSVRfVEVTVF9GQUlMX1BSRVJFUVMgZmFsc2UKKwknCitmaQorCisjIEZpeCBzb21lIGNvbW1hbmRzIG9uIFdpbmRvd3MsIGFuZCBvdGhlciBPUy1zcGVjaWZpYyB0aGluZ3MKK3VuYW1lX3M9JCh1bmFtZSAtcykKK2Nhc2UgJHVuYW1lX3MgaW4KKypNSU5HVyopCisJIyBXaW5kb3dzIGhhcyBpdHMgb3duIChpbmNvbXBhdGlibGUpIHNvcnQgYW5kIGZpbmQKKwlzb3J0ICgpIHsKKwkJL3Vzci9iaW4vc29ydCAiJEAiCisJfQorCWZpbmQgKCkgeworCQkvdXNyL2Jpbi9maW5kICIkQCIKKwl9CisJIyBnaXQgc2VlcyBXaW5kb3dzLXN0eWxlIHB3ZAorCXB3ZCAoKSB7CisJCWJ1aWx0aW4gcHdkIC1XCisJfQorCSMgbm8gUE9TSVggcGVybWlzc2lvbnMKKwkjIGJhY2tzbGFzaGVzIGluIHBhdGhzcGVjIGFyZSBjb252ZXJ0ZWQgdG8gJy8nCisJIyBleGVjIGRvZXMgbm90IGluaGVyaXQgdGhlIFBJRAorCXRlc3Rfc2V0X3ByZXJlcSBNSU5HVworCXRlc3Rfc2V0X3ByZXJlcSBOQVRJVkVfQ1JMRgorCXRlc3Rfc2V0X3ByZXJlcSBTRURfU1RSSVBTX0NSCisJdGVzdF9zZXRfcHJlcmVxIEdSRVBfU1RSSVBTX0NSCisJR0lUX1RFU1RfQ01QPW1pbmd3X3Rlc3RfY21wCisJOzsKKypDWUdXSU4qKQorCXRlc3Rfc2V0X3ByZXJlcSBQT1NJWFBFUk0KKwl0ZXN0X3NldF9wcmVyZXEgRVhFQ0tFRVBTUElECisJdGVzdF9zZXRfcHJlcmVxIENZR1dJTgorCXRlc3Rfc2V0X3ByZXJlcSBTRURfU1RSSVBTX0NSCisJdGVzdF9zZXRfcHJlcmVxIEdSRVBfU1RSSVBTX0NSCisJOzsKK0ZyZWVCU0QpCisJdGVzdF9zZXRfcHJlcmVxIFJFR0VYX0lMTFNFUQorCXRlc3Rfc2V0X3ByZXJlcSBQT1NJWFBFUk0KKwl0ZXN0X3NldF9wcmVyZXEgQlNMQVNIUFNQRUMKKwl0ZXN0X3NldF9wcmVyZXEgRVhFQ0tFRVBTUElECisJOzsKKyopCisJdGVzdF9zZXRfcHJlcmVxIFBPU0lYUEVSTQorCXRlc3Rfc2V0X3ByZXJlcSBCU0xBU0hQU1BFQworCXRlc3Rfc2V0X3ByZXJlcSBFWEVDS0VFUFNQSUQKKwk7OworZXNhYworCisoIENPTFVNTlM9MSAmJiB0ZXN0ICRDT0xVTU5TID0gMSApICYmIHRlc3Rfc2V0X3ByZXJlcSBDT0xVTU5TX0NBTl9CRV8xCit0ZXN0IC16ICIkTk9fUEVSTCIgJiYgdGVzdF9zZXRfcHJlcmVxIFBFUkwKK3Rlc3QgLXogIiROT19QVEhSRUFEUyIgJiYgdGVzdF9zZXRfcHJlcmVxIFBUSFJFQURTCit0ZXN0IC16ICIkTk9fUFlUSE9OIiAmJiB0ZXN0X3NldF9wcmVyZXEgUFlUSE9OCit0ZXN0IC1uICIkVVNFX0xJQlBDUkUxJFVTRV9MSUJQQ1JFMiIgJiYgdGVzdF9zZXRfcHJlcmVxIFBDUkUKK3Rlc3QgLW4gIiRVU0VfTElCUENSRTEiICYmIHRlc3Rfc2V0X3ByZXJlcSBMSUJQQ1JFMQordGVzdCAtbiAiJFVTRV9MSUJQQ1JFMiIgJiYgdGVzdF9zZXRfcHJlcmVxIExJQlBDUkUyCit0ZXN0IC16ICIkTk9fR0VUVEVYVCIgJiYgdGVzdF9zZXRfcHJlcmVxIEdFVFRFWFQKKworaWYgdGVzdCAtbiAiJEdJVF9URVNUX0dFVFRFWFRfUE9JU09OX09SSUciCit0aGVuCisJR0lUX1RFU1RfR0VUVEVYVF9QT0lTT049JEdJVF9URVNUX0dFVFRFWFRfUE9JU09OX09SSUcKKwlleHBvcnQgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04KKwl1bnNldCBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTl9PUklHCitmaQorCit0ZXN0X2xhenlfcHJlcmVxIENfTE9DQUxFX09VVFBVVCAnCisJISB0ZXN0X2Jvb2xfZW52IEdJVF9URVNUX0dFVFRFWFRfUE9JU09OIGZhbHNlCisnCisKK2lmIHRlc3QgLXogIiRHSVRfVEVTVF9DSEVDS19DQUNIRV9UUkVFIgordGhlbgorCUdJVF9URVNUX0NIRUNLX0NBQ0hFX1RSRUU9dHJ1ZQorCWV4cG9ydCBHSVRfVEVTVF9DSEVDS19DQUNIRV9UUkVFCitmaQorCit0ZXN0X2xhenlfcHJlcmVxIFBJUEUgJworCSMgdGVzdCB3aGV0aGVyIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIEZJRk9zCisJdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1csIUNZR1dJTiAmJgorCXJtIC1mIHRlc3RmaWZvICYmIG1rZmlmbyB0ZXN0ZmlmbworJworCit0ZXN0X2xhenlfcHJlcmVxIFNZTUxJTktTICcKKwkjIHRlc3Qgd2hldGhlciB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBzeW1ib2xpYyBsaW5rcworCWxuIC1zIHggeSAmJiB0ZXN0IC1oIHkKKycKKwordGVzdF9sYXp5X3ByZXJlcSBGSUxFTU9ERSAnCisJdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmZpbGVtb2RlKSIgPSB0cnVlCisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgQ0FTRV9JTlNFTlNJVElWRV9GUyAnCisJZWNobyBnb29kID5DYW1lbENhc2UgJiYKKwllY2hvIGJhZCA+Y2FtZWxjYXNlICYmCisJdGVzdCAiJChjYXQgQ2FtZWxDYXNlKSIgIT0gZ29vZAorJworCit0ZXN0X2xhenlfcHJlcmVxIEZVTk5ZTkFNRVMgJworCXRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXICYmCisJdG91Y2ggLS0gXAorCQkiRlVOTllOQU1FUyB0YWIJZW1iZWRkZWQiIFwKKwkJIkZVTk5ZTkFNRVMgXCJxdW90ZSBlbWJlZGRlZFwiIiBcCisJCSJGVU5OWU5BTUVTIG5ld2xpbmUKK2VtYmVkZGVkIiAyPi9kZXYvbnVsbCAmJgorCXJtIC0tIFwKKwkJIkZVTk5ZTkFNRVMgdGFiCWVtYmVkZGVkIiBcCisJCSJGVU5OWU5BTUVTIFwicXVvdGUgZW1iZWRkZWRcIiIgXAorCQkiRlVOTllOQU1FUyBuZXdsaW5lCitlbWJlZGRlZCIgMj4vZGV2L251bGwKKycKKwordGVzdF9sYXp5X3ByZXJlcSBVVEY4X05GRF9UT19ORkMgJworCSMgY2hlY2sgd2hldGhlciBGUyBjb252ZXJ0cyBuZmQgdW5pY29kZSB0byBuZmMKKwlhdW1sPSQocHJpbnRmICJcMzAzXDI0NCIpCisJYXVtbGNkaWFyPSQocHJpbnRmICJcMTQxXDMxNFwyMTAiKQorCT4iJGF1bWwiICYmCisJdGVzdCAtZiAiJGF1bWxjZGlhciIKKycKKwordGVzdF9sYXp5X3ByZXJlcSBBVVRPSURFTlQgJworCXNhbmVfdW5zZXQgR0lUX0FVVEhPUl9OQU1FICYmCisJc2FuZV91bnNldCBHSVRfQVVUSE9SX0VNQUlMICYmCisJZ2l0IHZhciBHSVRfQVVUSE9SX0lERU5UCisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgRVhQRU5TSVZFICcKKwl0ZXN0IC1uICIkR0lUX1RFU1RfTE9ORyIKKycKKwordGVzdF9sYXp5X3ByZXJlcSBFWFBFTlNJVkVfT05fV0lORE9XUyAnCisJdGVzdF9oYXZlX3ByZXJlcSBFWFBFTlNJVkUgfHwgdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1csIUNZR1dJTgorJworCit0ZXN0X2xhenlfcHJlcmVxIFVTUl9CSU5fVElNRSAnCisJdGVzdCAteCAvdXNyL2Jpbi90aW1lCisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgTk9UX1JPT1QgJworCXVpZD0kKGlkIC11KSAmJgorCXRlc3QgIiR1aWQiICE9IDAKKycKKwordGVzdF9sYXp5X3ByZXJlcSBKR0lUICcKKwlqZ2l0IC0tdmVyc2lvbgorJworCisjIFNBTklUWSBpcyBhYm91dCAiY2FuIHlvdSBjb3JyZWN0bHkgcHJlZGljdCB3aGF0IHRoZSBmaWxlc3lzdGVtIHdvdWxkCisjIGRvIGJ5IG9ubHkgbG9va2luZyBhdCB0aGUgcGVybWlzc2lvbiBiaXRzIG9mIHRoZSBmaWxlcyBhbmQKKyMgZGlyZWN0b3JpZXM/IiAgQSB0eXBpY2FsIGV4YW1wbGUgb2YgIVNBTklUWSBpcyBydW5uaW5nIHRoZSB0ZXN0CisjIHN1aXRlIGFzIHJvb3QsIHdoZXJlIGEgdGVzdCBtYXkgZXhwZWN0ICJjaG1vZCAtciBmaWxlICYmIGNhdCBmaWxlIgorIyB0byBmYWlsIGJlY2F1c2UgZmlsZSBpcyBzdXBwb3NlZCB0byBiZSB1bnJlYWRhYmxlIGFmdGVyIGEgc3VjY2Vzc2Z1bAorIyBjaG1vZC4gIEluIGFuIGVudmlyb25tZW50IChpLmUuIGNvbWJpbmF0aW9uIG9mIHdoYXQgZmlsZXN5c3RlbSBpcworIyBiZWluZyB1c2VkIGFuZCB3aG8gaXMgcnVubmluZyB0aGUgdGVzdHMpIHRoYXQgbGFja3MgU0FOSVRZLCB5b3UgbWF5CisjIGJlIGFibGUgdG8gZGVsZXRlIG9yIGNyZWF0ZSBhIGZpbGUgd2hlbiB0aGUgY29udGFpbmluZyBkaXJlY3RvcnkKKyMgZG9lc24ndCBoYXZlIHdyaXRlIHBlcm1pc3Npb25zLCBvciBhY2Nlc3MgYSBmaWxlIGV2ZW4gaWYgdGhlCisjIGNvbnRhaW5pbmcgZGlyZWN0b3J5IGRvZXNuJ3QgaGF2ZSByZWFkIG9yIGV4ZWN1dGUgcGVybWlzc2lvbnMuCisKK3Rlc3RfbGF6eV9wcmVyZXEgU0FOSVRZICcKKwlta2RpciBTQU5FVEVTVEQuMSBTQU5FVEVTVEQuMiAmJgorCisJY2htb2QgK3cgU0FORVRFU1RELjEgU0FORVRFU1RELjIgJiYKKwk+U0FORVRFU1RELjEveCAyPlNBTkVURVNURC4yL3ggJiYKKwljaG1vZCAtdyBTQU5FVEVTVEQuMSAmJgorCWNobW9kIC1yIFNBTkVURVNURC4xL3ggJiYKKwljaG1vZCAtcnggU0FORVRFU1RELjIgfHwKKwlCVUcgImNhbm5vdCBwcmVwYXJlIFNBTkVURVNURCIKKworCSEgdGVzdCAtciBTQU5FVEVTVEQuMS94ICYmCisJISBybSBTQU5FVEVTVEQuMS94ICYmICEgdGVzdCAtZiBTQU5FVEVTVEQuMi94CisJc3RhdHVzPSQ/CisKKwljaG1vZCArcnd4IFNBTkVURVNURC4xIFNBTkVURVNURC4yICYmCisJcm0gLXJmIFNBTkVURVNURC4xIFNBTkVURVNURC4yIHx8CisJQlVHICJjYW5ub3QgY2xlYW4gU0FORVRFU1REIgorCXJldHVybiAkc3RhdHVzCisnCisKK3Rlc3QgRnJlZUJTRCAhPSAkdW5hbWVfcyB8fCBHSVRfVU5aSVA9JHtHSVRfVU5aSVA6LS91c3IvbG9jYWwvYmluL3VuemlwfQorR0lUX1VOWklQPSR7R0lUX1VOWklQOi11bnppcH0KK3Rlc3RfbGF6eV9wcmVyZXEgVU5aSVAgJworCSIkR0lUX1VOWklQIiAtdgorCXRlc3QgJD8gLW5lIDEyNworJworCitydW5fd2l0aF9saW1pdGVkX2NtZGxpbmUgKCkgeworCSh1bGltaXQgLXMgMTI4ICYmICIkQCIpCit9CisKK3Rlc3RfbGF6eV9wcmVyZXEgQ01ETElORV9MSU1JVCAnCisJdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1csIUNZR1dJTiAmJgorCXJ1bl93aXRoX2xpbWl0ZWRfY21kbGluZSB0cnVlCisnCisKK3J1bl93aXRoX2xpbWl0ZWRfc3RhY2sgKCkgeworCSh1bGltaXQgLXMgMTI4ICYmICIkQCIpCit9CisKK3Rlc3RfbGF6eV9wcmVyZXEgVUxJTUlUX1NUQUNLX1NJWkUgJworCXRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXLCFDWUdXSU4gJiYKKwlydW5fd2l0aF9saW1pdGVkX3N0YWNrIHRydWUKKycKKworcnVuX3dpdGhfbGltaXRlZF9vcGVuX2ZpbGVzICgpIHsKKwkodWxpbWl0IC1uIDMyICYmICIkQCIpCit9CisKK3Rlc3RfbGF6eV9wcmVyZXEgVUxJTUlUX0ZJTEVfREVTQ1JJUFRPUlMgJworCXRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXLCFDWUdXSU4gJiYKKwlydW5fd2l0aF9saW1pdGVkX29wZW5fZmlsZXMgdHJ1ZQorJworCitidWlsZF9vcHRpb24gKCkgeworCWdpdCB2ZXJzaW9uIC0tYnVpbGQtb3B0aW9ucyB8CisJc2VkIC1uZSAicy9eJDE6IC8vcCIKK30KKwordGVzdF9sYXp5X3ByZXJlcSBMT05HX0lTXzY0QklUICcKKwl0ZXN0IDggLWxlICIkKGJ1aWxkX29wdGlvbiBzaXplb2YtbG9uZykiCisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgVElNRV9JU182NEJJVCAndGVzdC10b29sIGRhdGUgaXM2NGJpdCcKK3Rlc3RfbGF6eV9wcmVyZXEgVElNRV9UX0lTXzY0QklUICd0ZXN0LXRvb2wgZGF0ZSB0aW1lX3QtaXM2NGJpdCcKKwordGVzdF9sYXp5X3ByZXJlcSBDVVJMICcKKwljdXJsIC0tdmVyc2lvbgorJworCisjIFNIQTEgaXMgYSB0ZXN0IGlmIHRoZSBoYXNoIGFsZ29yaXRobSBpbiB1c2UgaXMgU0hBLTEuICBUaGlzIGlzIGJvdGggZm9yIHRlc3RzCisjIHdoaWNoIHdpbGwgbm90IHdvcmsgd2l0aCBvdGhlciBoYXNoIGFsZ29yaXRobXMgYW5kIHRlc3RzIHRoYXQgd29yayBidXQgZG9uJ3QKKyMgdGVzdCBhbnl0aGluZyBtZWFuaW5nZnVsIChlLmcuIHNwZWNpYWwgdmFsdWVzIHdoaWNoIGNhdXNlIHNob3J0IGNvbGxpc2lvbnMpLgordGVzdF9sYXp5X3ByZXJlcSBTSEExICcKKwl0ZXN0ICQoZ2l0IGhhc2gtb2JqZWN0IC9kZXYvbnVsbCkgPSBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgUkVCQVNFX1AgJworCXRlc3QgLXogIiRHSVRfVEVTVF9TS0lQX1JFQkFTRV9QIgorJwpkaWZmIC0tZ2l0IGEvdC90ZXN0LXRlcm1pbmFsLnBlcmwgYi90L3Rlc3QtdGVybWluYWwucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NmJmNjE4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90ZXN0LXRlcm1pbmFsLnBlcmwKQEAgLTAsMCArMSwxMDUgQEAKKyMhL3Vzci9iaW4vcGVybAordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBJTzo6UHR5OwordXNlIEZpbGU6OkNvcHk7CisKKyMgUnVuIEAkYXJndiBpbiB0aGUgYmFja2dyb3VuZCB3aXRoIHN0ZGlvIHJlZGlyZWN0ZWQgdG8gJGluLCAkb3V0IGFuZCAkZXJyLgorc3ViIHN0YXJ0X2NoaWxkIHsKKwlteSAoJGFyZ3YsICRpbiwgJG91dCwgJGVycikgPSBAXzsKKwlteSAkcGlkID0gZm9yazsKKwlpZiAobm90IGRlZmluZWQgJHBpZCkgeworCQlkaWUgImZvcmsgZmFpbGVkOiAkISIKKwl9IGVsc2lmICgkcGlkID09IDApIHsKKwkJb3BlbiBTVERJTiwgIjwmIiwgJGluOworCQlvcGVuIFNURE9VVCwgIj4mIiwgJG91dDsKKwkJb3BlbiBTVERFUlIsICI+JiIsICRlcnI7CisJCWNsb3NlICRpbjsKKwkJY2xvc2UgJG91dDsKKwkJZXhlYyhAJGFyZ3YpIG9yIGRpZSAiY2Fubm90IGV4ZWMgJyRhcmd2LT5bMF0nOiAkISIKKwl9CisJcmV0dXJuICRwaWQ7Cit9CisKKyMgV2FpdCBmb3IgJHBpZCB0byBmaW5pc2guCitzdWIgZmluaXNoX2NoaWxkIHsKKwkjIFNpbXBsaWZpZWQgZnJvbSB3YWl0X29yX3doaW5lKCkgaW4gcnVuLWNvbW1hbmQuYy4KKwlteSAoJHBpZCkgPSBAXzsKKworCW15ICR3YWl0aW5nID0gd2FpdHBpZCgkcGlkLCAwKTsKKwlpZiAoJHdhaXRpbmcgPCAwKSB7CisJCWRpZSAid2FpdHBpZCBmYWlsZWQ6ICQhIjsKKwl9IGVsc2lmICgkPyAmIDEyNykgeworCQlteSAkY29kZSA9ICQ/ICYgMTI3OworCQl3YXJuICJkaWVkIG9mIHNpZ25hbCAkY29kZSI7CisJCXJldHVybiAkY29kZSArIDEyODsKKwl9IGVsc2UgeworCQlyZXR1cm4gJD8gPj4gODsKKwl9Cit9CisKK3N1YiB4c2VuZGZpbGUgeworCW15ICgkb3V0LCAkaW4pID0gQF87CisKKwkjIE5vdGU6IHRoZSByZWFsIHNlbmRmaWxlKCkgY2Fubm90IHJlYWQgZnJvbSBhIHRlcm1pbmFsLgorCisJIyBJdCBpcyB1bnNwZWNpZmllZCBieSBQT1NJWCB3aGV0aGVyIHJlYWRzCisJIyBmcm9tIGEgZGlzY29ubmVjdGVkIHRlcm1pbmFsIHdpbGwgcmV0dXJuCisJIyBFSU8gKGFzIGluIEFJWCA0LngsIElSSVgsIGFuZCBMaW51eCkgb3IKKwkjIGVuZC1vZi1maWxlLiAgRWl0aGVyIGlzIGZpbmUuCisJY29weSgkaW4sICRvdXQsIDQwOTYpIG9yICQhe0VJT30gb3IgZGllICJjYW5ub3QgY29weSBmcm9tIGNoaWxkOiAkISI7Cit9CisKK3N1YiBjb3B5X3N0ZGluIHsKKwlteSAoJGluKSA9IEBfOworCW15ICRwaWQgPSBmb3JrOworCWlmICghJHBpZCkgeworCQl4c2VuZGZpbGUoJGluLCBcKlNURElOKTsKKwkJZXhpdCAwOworCX0KKwljbG9zZSgkaW4pOworCXJldHVybiAkcGlkOworfQorCitzdWIgY29weV9zdGRpbyB7CisJbXkgKCRvdXQsICRlcnIpID0gQF87CisJbXkgJHBpZCA9IGZvcms7CisJZGVmaW5lZCAkcGlkIG9yIGRpZSAiZm9yayBmYWlsZWQ6ICQhIjsKKwlpZiAoISRwaWQpIHsKKwkJY2xvc2UoJG91dCk7CisJCXhzZW5kZmlsZShcKlNUREVSUiwgJGVycik7CisJCWV4aXQgMDsKKwl9CisJY2xvc2UoJGVycik7CisJeHNlbmRmaWxlKFwqU1RET1VULCAkb3V0KTsKKwlmaW5pc2hfY2hpbGQoJHBpZCkgPT0gMAorCQlvciBleGl0IDE7Cit9CisKK2lmICgkI0FSR1YgPCAxKSB7CisJZGllICJ1c2FnZTogdGVzdC10ZXJtaW5hbCBwcm9ncmFtIGFyZ3MiOworfQorJEVOVntURVJNfSA9ICd2dDEwMCc7CitteSAkbWFzdGVyX2luID0gbmV3IElPOjpQdHk7CitteSAkbWFzdGVyX291dCA9IG5ldyBJTzo6UHR5OworbXkgJG1hc3Rlcl9lcnIgPSBuZXcgSU86OlB0eTsKKyRtYXN0ZXJfaW4tPnNldF9yYXcoKTsKKyRtYXN0ZXJfb3V0LT5zZXRfcmF3KCk7CiskbWFzdGVyX2Vyci0+c2V0X3JhdygpOworJG1hc3Rlcl9pbi0+c2xhdmUtPnNldF9yYXcoKTsKKyRtYXN0ZXJfb3V0LT5zbGF2ZS0+c2V0X3JhdygpOworJG1hc3Rlcl9lcnItPnNsYXZlLT5zZXRfcmF3KCk7CitteSAkcGlkID0gc3RhcnRfY2hpbGQoXEBBUkdWLCAkbWFzdGVyX2luLT5zbGF2ZSwgJG1hc3Rlcl9vdXQtPnNsYXZlLCAkbWFzdGVyX2Vyci0+c2xhdmUpOworY2xvc2UgJG1hc3Rlcl9pbi0+c2xhdmU7CitjbG9zZSAkbWFzdGVyX291dC0+c2xhdmU7CitjbG9zZSAkbWFzdGVyX2Vyci0+c2xhdmU7CitteSAkaW5fcGlkID0gY29weV9zdGRpbigkbWFzdGVyX2luKTsKK2NvcHlfc3RkaW8oJG1hc3Rlcl9vdXQsICRtYXN0ZXJfZXJyKTsKK215ICRyZXQgPSBmaW5pc2hfY2hpbGQoJHBpZCk7CisjIElmIHRoZSBjaGlsZCBwcm9jZXNzIHRlcm1pbmF0ZXMgYmVmb3JlIG91ciBjb3B5X3N0ZGluKCkgcHJvY2VzcyBpcyBhYmxlIHRvCisjIHdyaXRlIGFsbCBvZiBpdHMgZGF0YSB0byAkbWFzdGVyX2luLCB0aGUgY29weV9zdGRpbigpIHByb2Nlc3MgY291bGQgc3RhbGwuCisjIFNlbmQgU0lHVEVSTSB0byBpdCB0byBlbnN1cmUgaXQgdGVybWluYXRlcy4KK2tpbGwgJ1RFUk0nLCAkaW5fcGlkOworZmluaXNoX2NoaWxkKCRpbl9waWQpOworZXhpdCgkcmV0KTsKZGlmZiAtLWdpdCBhL3QvdmFsZ3JpbmQvLmdpdGlnbm9yZSBiL3QvdmFsZ3JpbmQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGFlNjY3Ci0tLSAvZGV2L251bGwKKysrIGIvdC92YWxncmluZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorL2Jpbi8KKy90ZW1wbGF0ZXMKZGlmZiAtLWdpdCBhL3QvdmFsZ3JpbmQvYW5hbHl6ZS5zaCBiL3QvdmFsZ3JpbmQvYW5hbHl6ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZmZjODBmCi0tLSAvZGV2L251bGwKKysrIGIvdC92YWxncmluZC9hbmFseXplLnNoCkBAIC0wLDAgKzEsMTI3IEBACisjIS9iaW4vc2gKKworIyBHZXQgVEVTVF9PVVRQVVRfRElSRUNUT1JZIGZyb20gR0lULUJVSUxELU9QVElPTlMgaWYgaXQncyB0aGVyZS4uLgorLiAiJChkaXJuYW1lICIkMCIpLy4uLy4uL0dJVC1CVUlMRC1PUFRJT05TIgorIyAuLi4gb3RoZXJ3aXNlIHNldCBpdCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4KKzogJHtURVNUX09VVFBVVF9ESVJFQ1RPUlk9JChkaXJuYW1lICIkMCIpLy4ufQorCitvdXRwdXQ9Citjb3VudD0wCit0b3RhbF9jb3VudD0wCittaXNzaW5nX21lc3NhZ2U9CituZXdfbGluZT0nCisnCisKKyMgc3RhcnQgb3V0cHV0dGluZyB0aGUgY3VycmVudCB2YWxncmluZCBlcnJvciBpbiAkb3V0X3ByZWZpeC4rKyRjb3VudCwKKyMgYW5kIHRoZSB0ZXN0IGNhc2Ugd2hpY2ggZmFpbGVkIGluIHRoZSBjb3JyZXNwb25kaW5nIC5tZXNzYWdlIGZpbGUKK3N0YXJ0X291dHB1dCAoKSB7CisJdGVzdCAteiAiJG91dHB1dCIgfHwgcmV0dXJuCisKKwkjIHByb2dyZXNzCisJdG90YWxfY291bnQ9JCgoJHRvdGFsX2NvdW50KzEpKQorCXRlc3QgLXQgMiAmJiBwcmludGYgIlxyRm91bmQgJWQgZXJyb3JzIiAkdG90YWxfY291bnQgPiYyCisKKwljb3VudD0kKCgkY291bnQrMSkpCisJb3V0cHV0PSRvdXRfcHJlZml4LiRjb3VudAorCTogPiAkb3V0cHV0CisKKwllY2hvICIqKiogJDEgKioqIiA+ICRvdXRwdXQubWVzc2FnZQorfQorCitmaW5pc2hfb3V0cHV0ICgpIHsKKwl0ZXN0ICEgLXogIiRvdXRwdXQiIHx8IHJldHVybgorCW91dHB1dD0KKworCSMgaWYgYSB0ZXN0IGNhc2UgaGFzIG1vcmUgdGhhbiBvbmUgdmFsZ3JpbmQgZXJyb3IsIHdlIG5lZWQgdG8KKwkjIGNvcHkgdGhlIGxhc3QgLm1lc3NhZ2UgZmlsZSB0byB0aGUgcHJldmlvdXMgZXJyb3JzCisJdGVzdCAteiAiJG1pc3NpbmdfbWVzc2FnZSIgfHwgeworCQl3aGlsZSB0ZXN0ICRtaXNzaW5nX21lc3NhZ2UgLWx0ICRjb3VudAorCQlkbworCQkJY3AgJG91dF9wcmVmaXguJGNvdW50Lm1lc3NhZ2UgXAorCQkJCSRvdXRfcHJlZml4LiRtaXNzaW5nX21lc3NhZ2UubWVzc2FnZQorCQkJbWlzc2luZ19tZXNzYWdlPSQoKCRtaXNzaW5nX21lc3NhZ2UrMSkpCisJCWRvbmUKKwkJbWlzc2luZ19tZXNzYWdlPQorCX0KK30KKworIyBncm91cCB0aGUgdmFsZ3JpbmQgZXJyb3JzIGJ5IGJhY2t0cmFjZQorb3V0cHV0X2FsbCAoKSB7CisJbGFzdF9saW5lPQorCWo9MAorCWk9MQorCXdoaWxlIHRlc3QgJGkgLWxlICRjb3VudAorCWRvCisJCSMgb3V0cHV0IDxudW1iZXI+IDxiYWNrdHJhY2UtaW4tb25lLWxpbmU+CisJCWVjaG8gIiRpICQodHIgJ1xuJyAnICcgPCAkb3V0X3ByZWZpeC4kaSkiCisJCWk9JCgoJGkrMSkpCisJZG9uZSB8CisJc29ydCAtdCAnICcgLWsgMiB8ICMgb3JkZXIgYnkgPGJhY2t0cmFjZS1pbi1vbmUtbGluZT4KKwl3aGlsZSByZWFkIG51bWJlciBsaW5lCisJZG8KKwkJIyBmaW5kIGR1cGxpY2F0ZXMsIGRvIG5vdCBvdXRwdXQgYmFja3RyYWNlIHR3aWNlCisJCWlmIHRlc3QgIiRsaW5lIiAhPSAiJGxhc3RfbGluZSIKKwkJdGhlbgorCQkJbGFzdF9saW5lPSRsaW5lCisJCQlqPSQoKCRqKzEpKQorCQkJcHJpbnRmICJcblZhbGdyaW5kIGVycm9yICRqOlxuXG4iCisJCQljYXQgJG91dF9wcmVmaXguJG51bWJlcgorCQkJcHJpbnRmICJcbmZvdW5kIGluOlxuIgorCQlmaQorCQkjIHByaW50IHRoZSB0ZXN0IGNhc2Ugd2hlcmUgdGhpcyBjYW1lIGZyb20KKwkJcHJpbnRmICJcbiIKKwkJY2F0ICRvdXRfcHJlZml4LiRudW1iZXIubWVzc2FnZQorCWRvbmUKK30KKworaGFuZGxlX29uZSAoKSB7CisJT0xESUZTPSRJRlMKKwlJRlM9IiRuZXdfbGluZSIKKwl3aGlsZSByZWFkIGxpbmUKKwlkbworCQljYXNlICIkbGluZSIgaW4KKwkJIyBiYWNrdHJhY2UsIHBvc3NpYmx5IGEgbmV3IG9uZQorCQk9PVswLTldKikKKworCQkJIyBEb2VzIHRoZSBjdXJyZW50IHZhbGdyaW5kIGVycm9yIGhhdmUgYSBtZXNzYWdlIHlldD8KKwkJCWNhc2UgIiRvdXRwdXQiIGluCisJCQkqLm1lc3NhZ2UpCisJCQkJdGVzdCAteiAiJG1pc3NpbmdfbWVzc2FnZSIgJiYKKwkJCQltaXNzaW5nX21lc3NhZ2U9JGNvdW50CisJCQkJb3V0cHV0PQorCQkJZXNhYworCisJCQlzdGFydF9vdXRwdXQgJChiYXNlbmFtZSAkMSkKKwkJCWVjaG8gIiRsaW5lIiB8CisJCQlzZWQgJ3MvPT1bMC05XSo9PS89PXZhbGdyaW5kPT0vJyA+PiAkb3V0cHV0CisJCQk7OworCQkjIGVuZCBvZiBiYWNrdHJhY2UKKwkJJ30nKQorCQkJdGVzdCAteiAiJG91dHB1dCIgfHwgeworCQkJCWVjaG8gIiRsaW5lIiA+PiAkb3V0cHV0CisJCQkJdGVzdCAkb3V0cHV0ID0gJHtvdXRwdXQlLm1lc3NhZ2V9ICYmCisJCQkJb3V0cHV0PSRvdXRwdXQubWVzc2FnZQorCQkJfQorCQkJOzsKKwkJIyBlbmQgb2YgdGVzdCBjYXNlCisJCScnKQorCQkJZmluaXNoX291dHB1dAorCQkJOzsKKwkJIyBub3JtYWwgbGluZTsgaWYgJG91dHB1dCBpcyBzZXQsIHByaW50IHRoZSBsaW5lCisJCSopCisJCQl0ZXN0IC16ICIkb3V0cHV0IiB8fCBlY2hvICIkbGluZSIgPj4gJG91dHB1dAorCQkJOzsKKwkJZXNhYworCWRvbmUgPCAkMQorCUlGUz0kT0xESUZTCisKKwkjIGp1c3QgdG8gYmUgc2FmZQorCWZpbmlzaF9vdXRwdXQKK30KKworZm9yIHRlc3Rfc2NyaXB0IGluICIkVEVTVF9PVVRQVVRfRElSRUNUT1JZIi90ZXN0LXJlc3VsdHMvKi5vdXQKK2RvCisJaGFuZGxlX29uZSAkdGVzdF9zY3JpcHQKK2RvbmUKKworb3V0cHV0X2FsbApkaWZmIC0tZ2l0IGEvdC92YWxncmluZC9kZWZhdWx0LnN1cHAgYi90L3ZhbGdyaW5kL2RlZmF1bHQuc3VwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTY3MjRmCi0tLSAvZGV2L251bGwKKysrIGIvdC92YWxncmluZC9kZWZhdWx0LnN1cHAKQEAgLTAsMCArMSw1MSBAQAoreworCWlnbm9yZS16bGliLWVycm9ycy1jb25kCisJTWVtY2hlY2s6Q29uZAorCW9iajoqbGliei5zbyoKK30KKworeworCWlnbm9yZS16bGliLWVycm9ycy12YWx1ZTgKKwlNZW1jaGVjazpWYWx1ZTgKKwlvYmo6KmxpYnouc28qCit9CisKK3sKKwlpZ25vcmUtemxpYi1lcnJvcnMtdmFsdWU0CisJTWVtY2hlY2s6VmFsdWU0CisJb2JqOipsaWJ6LnNvKgorfQorCit7CisJaWdub3JlLWxkc28tY29uZAorCU1lbWNoZWNrOkNvbmQKKwlvYmo6KmxkLSouc28KK30KKworeworCWlnbm9yZS1sZHNvLWFkZHI4CisJTWVtY2hlY2s6QWRkcjgKKwlvYmo6KmxkLSouc28KK30KKworeworCWlnbm9yZS1sZHNvLWFkZHI0CisJTWVtY2hlY2s6QWRkcjQKKwlvYmo6KmxkLSouc28KK30KKworeworCXdyaXRpbmctZGF0YS1mcm9tLXpsaWItdHJpZ2dlcnMtZXZlbi1tb3JlLWVycm9ycworCU1lbWNoZWNrOlBhcmFtCisJd3JpdGUoYnVmKQorCW9iajovbGliL2xkLSouc28KKwlmdW46d3JpdGVfaW5fZnVsbAorCWZ1bjp3cml0ZV9idWZmZXIKKwlmdW46d3JpdGVfbG9vc2Vfb2JqZWN0Cit9CisKK3sKKwlpZ25vcmUtc3NlLXN0cmxlbi1pbnZhbGlkLXJlYWQtc2l6ZQorCU1lbWNoZWNrOkFkZHI0CisJZnVuOmNvcHlfcmVmCit9CmRpZmYgLS1naXQgYS90L3ZhbGdyaW5kL3ZhbGdyaW5kLnNoIGIvdC92YWxncmluZC92YWxncmluZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NjllYmFmCi0tLSAvZGV2L251bGwKKysrIGIvdC92YWxncmluZC92YWxncmluZC5zaApAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKworYmFzZT0kKGJhc2VuYW1lICIkMCIpCitjYXNlICIkYmFzZSIgaW4KK3Rlc3QtKikKKwlwcm9ncmFtPSIkR0lUX1ZBTEdSSU5ELy4uLy4uL3QvaGVscGVyLyRiYXNlIgorCTs7CisqKQorCXByb2dyYW09IiRHSVRfVkFMR1JJTkQvLi4vLi4vJGJhc2UiCisJOzsKK2VzYWMKKworVE9PTF9PUFRJT05TPSctLWxlYWstY2hlY2s9bm8nCisKK3Rlc3QgLXogIiRHSVRfVkFMR1JJTkRfRU5BQkxFRCIgJiYKK2V4ZWMgIiRwcm9ncmFtIiAiJEAiCisKK2Nhc2UgIiRHSVRfVkFMR1JJTkRfTU9ERSIgaW4KK21lbWNoZWNrLWZhc3QpCisJOzsKK21lbWNoZWNrKQorCVZBTEdSSU5EX1ZFUlNJT049JCh2YWxncmluZCAtLXZlcnNpb24pCisJVkFMR1JJTkRfTUFKT1I9JChleHByICIkVkFMR1JJTkRfVkVSU0lPTiIgOiAnW14wLTldKlwoWzAtOV0qXCknKQorCVZBTEdSSU5EX01JTk9SPSQoZXhwciAiJFZBTEdSSU5EX1ZFUlNJT04iIDogJ1teMC05XSpbMC05XSpcLlwoWzAtOV0qXCknKQorCXRlc3QgMyAtZ3QgIiRWQUxHUklORF9NQUpPUiIgfHwKKwl0ZXN0IDMgLWVxICIkVkFMR1JJTkRfTUFKT1IiIC1hIDQgLWd0ICIkVkFMR1JJTkRfTUlOT1IiIHx8CisJVE9PTF9PUFRJT05TPSIkVE9PTF9PUFRJT05TIC0tdHJhY2stb3JpZ2lucz15ZXMiCisJOzsKKyopCisJVE9PTF9PUFRJT05TPSItLXRvb2w9JEdJVF9WQUxHUklORF9NT0RFIgorZXNhYworCitleGVjIHZhbGdyaW5kIC1xIC0tZXJyb3ItZXhpdGNvZGU9MTI2IFwKKwktLWdlbi1zdXBwcmVzc2lvbnM9YWxsIFwKKwktLXN1cHByZXNzaW9ucz0iJEdJVF9WQUxHUklORC9kZWZhdWx0LnN1cHAiIFwKKwkkVE9PTF9PUFRJT05TIFwKKwktLWxvZy1mZD00IFwKKwktLWlucHV0LWZkPTQgXAorCSRHSVRfVkFMR1JJTkRfT1BUSU9OUyBcCisJIiRwcm9ncmFtIiAiJEAiCmRpZmYgLS1naXQgYS90YWcuYyBiL3RhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYjU0NDQKLS0tIC9kZXYvbnVsbAorKysgYi90YWcuYwpAQCAtMCwwICsxLDIzNiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJhbGxvYy5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorCitjb25zdCBjaGFyICp0YWdfdHlwZSA9ICJ0YWciOworCitzdGF0aWMgaW50IHJ1bl9ncGdfdmVyaWZ5KGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrIHNpZ2M7CisJc2l6ZV90IHBheWxvYWRfc2l6ZTsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZzaWdjLCAwLCBzaXplb2Yoc2lnYykpOworCisJcGF5bG9hZF9zaXplID0gcGFyc2Vfc2lnbmF0dXJlKGJ1Ziwgc2l6ZSk7CisKKwlpZiAoc2l6ZSA9PSBwYXlsb2FkX3NpemUpIHsKKwkJaWYgKGZsYWdzICYgR1BHX1ZFUklGWV9WRVJCT1NFKQorCQkJd3JpdGVfaW5fZnVsbCgxLCBidWYsIHBheWxvYWRfc2l6ZSk7CisJCXJldHVybiBlcnJvcigibm8gc2lnbmF0dXJlIGZvdW5kIik7CisJfQorCisJcmV0ID0gY2hlY2tfc2lnbmF0dXJlKGJ1ZiwgcGF5bG9hZF9zaXplLCBidWYgKyBwYXlsb2FkX3NpemUsCisJCQkJc2l6ZSAtIHBheWxvYWRfc2l6ZSwgJnNpZ2MpOworCisJaWYgKCEoZmxhZ3MgJiBHUEdfVkVSSUZZX09NSVRfU1RBVFVTKSkKKwkJcHJpbnRfc2lnbmF0dXJlX2J1ZmZlcigmc2lnYywgZmxhZ3MpOworCisJc2lnbmF0dXJlX2NoZWNrX2NsZWFyKCZzaWdjKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZ3BnX3ZlcmlmeV90YWcoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpuYW1lX3RvX3JlcG9ydCwKKwkJdW5zaWduZWQgZmxhZ3MpCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IHJldDsKKworCXR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksIG9pZCwgTlVMTCk7CisJaWYgKHR5cGUgIT0gT0JKX1RBRykKKwkJcmV0dXJuIGVycm9yKCIlczogY2Fubm90IHZlcmlmeSBhIG5vbi10YWcgb2JqZWN0IG9mIHR5cGUgJXMuIiwKKwkJCQluYW1lX3RvX3JlcG9ydCA/CisJCQkJbmFtZV90b19yZXBvcnQgOgorCQkJCWZpbmRfdW5pcXVlX2FiYnJldihvaWQsIERFRkFVTFRfQUJCUkVWKSwKKwkJCQl0eXBlX25hbWUodHlwZSkpOworCisJYnVmID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWYpCisJCXJldHVybiBlcnJvcigiJXM6IHVuYWJsZSB0byByZWFkIGZpbGUuIiwKKwkJCQluYW1lX3RvX3JlcG9ydCA/CisJCQkJbmFtZV90b19yZXBvcnQgOgorCQkJCWZpbmRfdW5pcXVlX2FiYnJldihvaWQsIERFRkFVTFRfQUJCUkVWKSk7CisKKwlyZXQgPSBydW5fZ3BnX3ZlcmlmeShidWYsIHNpemUsIGZsYWdzKTsKKworCWZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3Qgb2JqZWN0ICpkZXJlZl90YWcoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBvYmplY3QgKm8sIGNvbnN0IGNoYXIgKndhcm4sIGludCB3YXJubGVuKQoreworCXN0cnVjdCBvYmplY3RfaWQgKmxhc3Rfb2lkID0gTlVMTDsKKwl3aGlsZSAobyAmJiBvLT50eXBlID09IE9CSl9UQUcpCisJCWlmICgoKHN0cnVjdCB0YWcgKilvKS0+dGFnZ2VkKSB7CisJCQlsYXN0X29pZCA9ICYoKHN0cnVjdCB0YWcgKilvKS0+dGFnZ2VkLT5vaWQ7CisJCQlvID0gcGFyc2Vfb2JqZWN0KHIsIGxhc3Rfb2lkKTsKKwkJfSBlbHNlIHsKKwkJCWxhc3Rfb2lkID0gTlVMTDsKKwkJCW8gPSBOVUxMOworCQl9CisJaWYgKCFvICYmIHdhcm4pIHsKKwkJaWYgKGxhc3Rfb2lkICYmIGlzX3Byb21pc29yX29iamVjdChsYXN0X29pZCkpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKCF3YXJubGVuKQorCQkJd2FybmxlbiA9IHN0cmxlbih3YXJuKTsKKwkJZXJyb3IoIm1pc3Npbmcgb2JqZWN0IHJlZmVyZW5jZWQgYnkgJyUuKnMnIiwgd2Fybmxlbiwgd2Fybik7CisJfQorCXJldHVybiBvOworfQorCitzdHJ1Y3Qgb2JqZWN0ICpkZXJlZl90YWdfbm92ZXJpZnkoc3RydWN0IG9iamVjdCAqbykKK3sKKwl3aGlsZSAobyAmJiBvLT50eXBlID09IE9CSl9UQUcpIHsKKwkJbyA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm8tPm9pZCk7CisJCWlmIChvICYmIG8tPnR5cGUgPT0gT0JKX1RBRyAmJiAoKHN0cnVjdCB0YWcgKilvKS0+dGFnZ2VkKQorCQkJbyA9ICgoc3RydWN0IHRhZyAqKW8pLT50YWdnZWQ7CisJCWVsc2UKKwkJCW8gPSBOVUxMOworCX0KKwlyZXR1cm4gbzsKK30KKworc3RydWN0IHRhZyAqbG9va3VwX3RhZyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF9vYmplY3Qociwgb2lkKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIGNyZWF0ZV9vYmplY3Qociwgb2lkLCBhbGxvY190YWdfbm9kZShyKSk7CisJcmV0dXJuIG9iamVjdF9hc190eXBlKHIsIG9iaiwgT0JKX1RBRywgMCk7Cit9CisKK3N0YXRpYyB0aW1lc3RhbXBfdCBwYXJzZV90YWdfZGF0ZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKnRhaWwpCit7CisJY29uc3QgY2hhciAqZGF0ZXB0cjsKKworCXdoaWxlIChidWYgPCB0YWlsICYmICpidWYrKyAhPSAnPicpCisJCS8qIG5hZGEgKi87CisJaWYgKGJ1ZiA+PSB0YWlsKQorCQlyZXR1cm4gMDsKKwlkYXRlcHRyID0gYnVmOworCXdoaWxlIChidWYgPCB0YWlsICYmICpidWYrKyAhPSAnXG4nKQorCQkvKiBuYWRhICovOworCWlmIChidWYgPj0gdGFpbCkKKwkJcmV0dXJuIDA7CisJLyogZGF0ZXB0ciA8IGJ1ZiAmJiBidWZbLTFdID09ICdcbicsIHNvIHBhcnNpbmcgd2lsbCBzdG9wIGF0IGJ1Zi0xICovCisJcmV0dXJuIHBhcnNlX3RpbWVzdGFtcChkYXRlcHRyLCBOVUxMLCAxMCk7Cit9CisKK3ZvaWQgcmVsZWFzZV90YWdfbWVtb3J5KHN0cnVjdCB0YWcgKnQpCit7CisJZnJlZSh0LT50YWcpOworCXQtPnRhZ2dlZCA9IE5VTEw7CisJdC0+b2JqZWN0LnBhcnNlZCA9IDA7CisJdC0+ZGF0ZSA9IDA7Cit9CisKK2ludCBwYXJzZV90YWdfYnVmZmVyKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgdGFnICppdGVtLCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY2hhciB0eXBlWzIwXTsKKwljb25zdCBjaGFyICpidWZwdHIgPSBkYXRhOworCWNvbnN0IGNoYXIgKnRhaWwgPSBidWZwdHIgKyBzaXplOworCWNvbnN0IGNoYXIgKm5sOworCisJaWYgKGl0ZW0tPm9iamVjdC5wYXJzZWQpCisJCXJldHVybiAwOworCisJaWYgKGl0ZW0tPnRhZykgeworCQkvKgorCQkgKiBQcmVzdW1hYmx5IGxlZnQgb3ZlciBmcm9tIGEgcHJldmlvdXMgZmFpbGVkIHBhcnNlOworCQkgKiBjbGVhciBpdCBvdXQgaW4gcHJlcGFyYXRpb24gZm9yIHJlLXBhcnNpbmcgKHdlJ2xsIHByb2JhYmx5CisJCSAqIGhpdCB0aGUgc2FtZSBlcnJvciwgd2hpY2ggbGV0cyB1cyB0ZWxsIG91ciBjdXJyZW50IGNhbGxlcgorCQkgKiBhYm91dCB0aGUgcHJvYmxlbSkuCisJCSAqLworCQlGUkVFX0FORF9OVUxMKGl0ZW0tPnRhZyk7CisJfQorCisJaWYgKHNpemUgPCB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDI0KQorCQlyZXR1cm4gLTE7CisJaWYgKG1lbWNtcCgib2JqZWN0ICIsIGJ1ZnB0ciwgNykgfHwgcGFyc2Vfb2lkX2hleChidWZwdHIgKyA3LCAmb2lkLCAmYnVmcHRyKSB8fCAqYnVmcHRyKysgIT0gJ1xuJykKKwkJcmV0dXJuIC0xOworCisJaWYgKCFzdGFydHNfd2l0aChidWZwdHIsICJ0eXBlICIpKQorCQlyZXR1cm4gLTE7CisJYnVmcHRyICs9IDU7CisJbmwgPSBtZW1jaHIoYnVmcHRyLCAnXG4nLCB0YWlsIC0gYnVmcHRyKTsKKwlpZiAoIW5sIHx8IHNpemVvZih0eXBlKSA8PSAobmwgLSBidWZwdHIpKQorCQlyZXR1cm4gLTE7CisJbWVtY3B5KHR5cGUsIGJ1ZnB0ciwgbmwgLSBidWZwdHIpOworCXR5cGVbbmwgLSBidWZwdHJdID0gJ1wwJzsKKwlidWZwdHIgPSBubCArIDE7CisKKwlpZiAoIXN0cmNtcCh0eXBlLCBibG9iX3R5cGUpKSB7CisJCWl0ZW0tPnRhZ2dlZCA9IChzdHJ1Y3Qgb2JqZWN0ICopbG9va3VwX2Jsb2IociwgJm9pZCk7CisJfSBlbHNlIGlmICghc3RyY21wKHR5cGUsIHRyZWVfdHlwZSkpIHsKKwkJaXRlbS0+dGFnZ2VkID0gKHN0cnVjdCBvYmplY3QgKilsb29rdXBfdHJlZShyLCAmb2lkKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgY29tbWl0X3R5cGUpKSB7CisJCWl0ZW0tPnRhZ2dlZCA9IChzdHJ1Y3Qgb2JqZWN0ICopbG9va3VwX2NvbW1pdChyLCAmb2lkKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgdGFnX3R5cGUpKSB7CisJCWl0ZW0tPnRhZ2dlZCA9IChzdHJ1Y3Qgb2JqZWN0ICopbG9va3VwX3RhZyhyLCAmb2lkKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gZXJyb3IoInVua25vd24gdGFnIHR5cGUgJyVzJyBpbiAlcyIsCisJCQkgICAgIHR5cGUsIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKKwl9CisKKwlpZiAoIWl0ZW0tPnRhZ2dlZCkKKwkJcmV0dXJuIGVycm9yKCJiYWQgdGFnIHBvaW50ZXIgdG8gJXMgaW4gJXMiLAorCQkJICAgICBvaWRfdG9faGV4KCZvaWQpLAorCQkJICAgICBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CisKKwlpZiAoYnVmcHRyICsgNCA8IHRhaWwgJiYgc3RhcnRzX3dpdGgoYnVmcHRyLCAidGFnICIpKQorCQk7IAkJLyogZ29vZCAqLworCWVsc2UKKwkJcmV0dXJuIC0xOworCWJ1ZnB0ciArPSA0OworCW5sID0gbWVtY2hyKGJ1ZnB0ciwgJ1xuJywgdGFpbCAtIGJ1ZnB0cik7CisJaWYgKCFubCkKKwkJcmV0dXJuIC0xOworCWl0ZW0tPnRhZyA9IHhtZW1kdXB6KGJ1ZnB0ciwgbmwgLSBidWZwdHIpOworCWJ1ZnB0ciA9IG5sICsgMTsKKworCWlmIChidWZwdHIgKyA3IDwgdGFpbCAmJiBzdGFydHNfd2l0aChidWZwdHIsICJ0YWdnZXIgIikpCisJCWl0ZW0tPmRhdGUgPSBwYXJzZV90YWdfZGF0ZShidWZwdHIsIHRhaWwpOworCWVsc2UKKwkJaXRlbS0+ZGF0ZSA9IDA7CisKKwlpdGVtLT5vYmplY3QucGFyc2VkID0gMTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX3RhZyhzdHJ1Y3QgdGFnICppdGVtKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpkYXRhOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlpbnQgcmV0OworCisJaWYgKGl0ZW0tPm9iamVjdC5wYXJzZWQpCisJCXJldHVybiAwOworCWRhdGEgPSByZWFkX29iamVjdF9maWxlKCZpdGVtLT5vYmplY3Qub2lkLCAmdHlwZSwgJnNpemUpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3QgcmVhZCAlcyIsCisJCQkgICAgIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKKwlpZiAodHlwZSAhPSBPQkpfVEFHKSB7CisJCWZyZWUoZGF0YSk7CisJCXJldHVybiBlcnJvcigiT2JqZWN0ICVzIG5vdCBhIHRhZyIsCisJCQkgICAgIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKKwl9CisJcmV0ID0gcGFyc2VfdGFnX2J1ZmZlcih0aGVfcmVwb3NpdG9yeSwgaXRlbSwgZGF0YSwgc2l6ZSk7CisJZnJlZShkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3Qgb2JqZWN0X2lkICpnZXRfdGFnZ2VkX29pZChzdHJ1Y3QgdGFnICp0YWcpCit7CisJaWYgKCF0YWctPnRhZ2dlZCkKKwkJZGllKCJiYWQgdGFnIik7CisJcmV0dXJuICZ0YWctPnRhZ2dlZC0+b2lkOworfQpkaWZmIC0tZ2l0IGEvdGFnLmggYi90YWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2U4ZTcyCi0tLSAvZGV2L251bGwKKysrIGIvdGFnLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBUQUdfSAorI2RlZmluZSBUQUdfSAorCisjaW5jbHVkZSAib2JqZWN0LmgiCisKK2V4dGVybiBjb25zdCBjaGFyICp0YWdfdHlwZTsKKworc3RydWN0IHRhZyB7CisJc3RydWN0IG9iamVjdCBvYmplY3Q7CisJc3RydWN0IG9iamVjdCAqdGFnZ2VkOworCWNoYXIgKnRhZzsKKwl0aW1lc3RhbXBfdCBkYXRlOworfTsKK3N0cnVjdCB0YWcgKmxvb2t1cF90YWcoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CitpbnQgcGFyc2VfdGFnX2J1ZmZlcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHRhZyAqaXRlbSwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2ludCBwYXJzZV90YWcoc3RydWN0IHRhZyAqaXRlbSk7Cit2b2lkIHJlbGVhc2VfdGFnX21lbW9yeShzdHJ1Y3QgdGFnICp0KTsKK3N0cnVjdCBvYmplY3QgKmRlcmVmX3RhZyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IG9iamVjdCAqLCBjb25zdCBjaGFyICosIGludCk7CitzdHJ1Y3Qgb2JqZWN0ICpkZXJlZl90YWdfbm92ZXJpZnkoc3RydWN0IG9iamVjdCAqKTsKK2ludCBncGdfdmVyaWZ5X3RhZyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgIGNvbnN0IGNoYXIgKm5hbWVfdG9fcmVwb3J0LCB1bnNpZ25lZCBmbGFncyk7CitzdHJ1Y3Qgb2JqZWN0X2lkICpnZXRfdGFnZ2VkX29pZChzdHJ1Y3QgdGFnICp0YWcpOworCisjZW5kaWYgLyogVEFHX0ggKi8KZGlmZiAtLWdpdCBhL3Rhci5oIGIvdGFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIyNThjNAotLS0gL2Rldi9udWxsCisrKyBiL3Rhci5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgVEFSX0gKKyNkZWZpbmUgVEFSX0gKKworI2RlZmluZSBUWVBFRkxBR19BVVRPCQknXDAnCisjZGVmaW5lIFRZUEVGTEFHX1JFRwkJJzAnCisjZGVmaW5lIFRZUEVGTEFHX0xOSwkJJzInCisjZGVmaW5lIFRZUEVGTEFHX0RJUgkJJzUnCisjZGVmaW5lIFRZUEVGTEFHX0dMT0JBTF9IRUFERVIJJ2cnCisjZGVmaW5lIFRZUEVGTEFHX0VYVF9IRUFERVIJJ3gnCisKK3N0cnVjdCB1c3Rhcl9oZWFkZXIgeworCWNoYXIgbmFtZVsxMDBdOwkJLyogICAwICovCisJY2hhciBtb2RlWzhdOwkJLyogMTAwICovCisJY2hhciB1aWRbOF07CQkvKiAxMDggKi8KKwljaGFyIGdpZFs4XTsJCS8qIDExNiAqLworCWNoYXIgc2l6ZVsxMl07CQkvKiAxMjQgKi8KKwljaGFyIG10aW1lWzEyXTsJCS8qIDEzNiAqLworCWNoYXIgY2hrc3VtWzhdOwkJLyogMTQ4ICovCisJY2hhciB0eXBlZmxhZ1sxXTsJLyogMTU2ICovCisJY2hhciBsaW5rbmFtZVsxMDBdOwkvKiAxNTcgKi8KKwljaGFyIG1hZ2ljWzZdOwkJLyogMjU3ICovCisJY2hhciB2ZXJzaW9uWzJdOwkvKiAyNjMgKi8KKwljaGFyIHVuYW1lWzMyXTsJCS8qIDI2NSAqLworCWNoYXIgZ25hbWVbMzJdOwkJLyogMjk3ICovCisJY2hhciBkZXZtYWpvcls4XTsJLyogMzI5ICovCisJY2hhciBkZXZtaW5vcls4XTsJLyogMzM3ICovCisJY2hhciBwcmVmaXhbMTU1XTsJLyogMzQ1ICovCit9OworCisjZW5kaWYgLyogVEFSX0ggKi8KZGlmZiAtLWdpdCBhL3RlbXBmaWxlLmMgYi90ZW1wZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YWExOGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wZmlsZS5jCkBAIC0wLDAgKzEsMzIxIEBACisvKgorICogU3RhdGUgZGlhZ3JhbSBhbmQgY2xlYW51cAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIElmIHRoZSBwcm9ncmFtIGV4aXRzIHdoaWxlIGEgdGVtcG9yYXJ5IGZpbGUgaXMgYWN0aXZlLCB3ZSB3YW50IHRvCisgKiBtYWtlIHN1cmUgdGhhdCB3ZSByZW1vdmUgaXQuIFRoaXMgaXMgZG9uZSBieSByZW1lbWJlcmluZyB0aGUgYWN0aXZlCisgKiB0ZW1wb3JhcnkgZmlsZXMgaW4gYSBsaW5rZWQgbGlzdCwgYHRlbXBmaWxlX2xpc3RgLiBBbiBgYXRleGl0KDMpYAorICogaGFuZGxlciBhbmQgYSBzaWduYWwgaGFuZGxlciBhcmUgcmVnaXN0ZXJlZCwgdG8gY2xlYW4gdXAgYW55IGFjdGl2ZQorICogdGVtcG9yYXJ5IGZpbGVzLgorICoKKyAqIEJlY2F1c2UgdGhlIHNpZ25hbCBoYW5kbGVyIGNhbiBydW4gYXQgYW55IHRpbWUsIGB0ZW1wZmlsZV9saXN0YCBhbmQKKyAqIHRoZSBgdGVtcGZpbGVgIG9iamVjdHMgdGhhdCBjb21wcmlzZSBpdCBtdXN0IGJlIGtlcHQgaW4KKyAqIHNlbGYtY29uc2lzdGVudCBzdGF0ZXMgYXQgYWxsIHRpbWVzLgorICoKKyAqIFRoZSBwb3NzaWJsZSBzdGF0ZXMgb2YgYSBgdGVtcGZpbGVgIG9iamVjdCBhcmUgYXMgZm9sbG93czoKKyAqCisgKiAtIFVuaW5pdGlhbGl6ZWQuIEluIHRoaXMgc3RhdGUgdGhlIG9iamVjdCdzIGBvbl9saXN0YCBmaWVsZCBtdXN0IGJlCisgKiAgIHplcm8gYnV0IHRoZSByZXN0IG9mIGl0cyBjb250ZW50cyBuZWVkIG5vdCBiZSBpbml0aWFsaXplZC4gQXMKKyAqICAgc29vbiBhcyB0aGUgb2JqZWN0IGlzIHVzZWQgaW4gYW55IHdheSwgaXQgaXMgaXJyZXZvY2FibHkKKyAqICAgcmVnaXN0ZXJlZCBpbiBgdGVtcGZpbGVfbGlzdGAsIGFuZCBgb25fbGlzdGAgaXMgc2V0LgorICoKKyAqIC0gQWN0aXZlLCBmaWxlIG9wZW4gKGFmdGVyIGBjcmVhdGVfdGVtcGZpbGUoKWAgb3IKKyAqICAgYHJlb3Blbl90ZW1wZmlsZSgpYCkuIEluIHRoaXMgc3RhdGU6CisgKgorICogICAtIHRoZSB0ZW1wb3JhcnkgZmlsZSBleGlzdHMKKyAqICAgLSBgYWN0aXZlYCBpcyBzZXQKKyAqICAgLSBgZmlsZW5hbWVgIGhvbGRzIHRoZSBmaWxlbmFtZSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUKKyAqICAgLSBgZmRgIGhvbGRzIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gZm9yIHdyaXRpbmcgdG8gaXQKKyAqICAgLSBgZnBgIGhvbGRzIGEgcG9pbnRlciB0byBhbiBvcGVuIGBGSUxFYCBvYmplY3QgaWYgYW5kIG9ubHkgaWYKKyAqICAgICBgZmRvcGVuX3RlbXBmaWxlKClgIGhhcyBiZWVuIGNhbGxlZCBvbiB0aGUgb2JqZWN0CisgKiAgIC0gYG93bmVyYCBob2xkcyB0aGUgUElEIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCB0aGUgZmlsZQorICoKKyAqIC0gQWN0aXZlLCBmaWxlIGNsb3NlZCAoYWZ0ZXIgYGNsb3NlX3RlbXBmaWxlX2dlbnRseSgpYCkuIFNhbWUKKyAqICAgYXMgdGhlIHByZXZpb3VzIHN0YXRlLCBleGNlcHQgdGhhdCB0aGUgdGVtcG9yYXJ5IGZpbGUgaXMgY2xvc2VkLAorICogICBgZmRgIGlzIC0xLCBhbmQgYGZwYCBpcyBgTlVMTGAuCisgKgorICogLSBJbmFjdGl2ZSAoYWZ0ZXIgYGRlbGV0ZV90ZW1wZmlsZSgpYCwgYHJlbmFtZV90ZW1wZmlsZSgpYCwgb3IgYQorICogICBmYWlsZWQgYXR0ZW1wdCB0byBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSkuIEluIHRoaXMgc3RhdGU6CisgKgorICogICAtIGBhY3RpdmVgIGlzIHVuc2V0CisgKiAgIC0gYGZpbGVuYW1lYCBpcyBlbXB0eSAodXN1YWxseSwgdGhvdWdoIHRoZXJlIGFyZSB0cmFuc2l0b3J5CisgKiAgICAgc3RhdGVzIGluIHdoaWNoIHRoaXMgY29uZGl0aW9uIGRvZXNuJ3QgaG9sZCkuIENsaWVudCBjb2RlIHNob3VsZAorICogICAgICpub3QqIHJlbHkgb24gdGhlIGZpbGVuYW1lIGJlaW5nIGVtcHR5IGluIHRoaXMgc3RhdGUuCisgKiAgIC0gYGZkYCBpcyAtMSBhbmQgYGZwYCBpcyBgTlVMTGAKKyAqICAgLSB0aGUgb2JqZWN0IGlzIHJlbW92ZWQgZnJvbSBgdGVtcGZpbGVfbGlzdGAgKGJ1dCBjb3VsZCBiZSB1c2VkIGFnYWluKQorICoKKyAqIEEgdGVtcG9yYXJ5IGZpbGUgaXMgb3duZWQgYnkgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGl0LiBUaGUKKyAqIGB0ZW1wZmlsZWAgaGFzIGFuIGBvd25lcmAgZmllbGQgdGhhdCByZWNvcmRzIHRoZSBvd25lcidzIFBJRC4gVGhpcworICogZmllbGQgaXMgdXNlZCB0byBwcmV2ZW50IGEgZm9ya2VkIHByb2Nlc3MgZnJvbSBkZWxldGluZyBhIHRlbXBvcmFyeQorICogZmlsZSBjcmVhdGVkIGJ5IGl0cyBwYXJlbnQuCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorCitzdGF0aWMgVk9MQVRJTEVfTElTVF9IRUFEKHRlbXBmaWxlX2xpc3QpOworCitzdGF0aWMgdm9pZCByZW1vdmVfdGVtcGZpbGVzKGludCBpbl9zaWduYWxfaGFuZGxlcikKK3sKKwlwaWRfdCBtZSA9IGdldHBpZCgpOworCXZvbGF0aWxlIHN0cnVjdCB2b2xhdGlsZV9saXN0X2hlYWQgKnBvczsKKworCWxpc3RfZm9yX2VhY2gocG9zLCAmdGVtcGZpbGVfbGlzdCkgeworCQlzdHJ1Y3QgdGVtcGZpbGUgKnAgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRlbXBmaWxlLCBsaXN0KTsKKworCQlpZiAoIWlzX3RlbXBmaWxlX2FjdGl2ZShwKSB8fCBwLT5vd25lciAhPSBtZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwLT5mZCA+PSAwKQorCQkJY2xvc2UocC0+ZmQpOworCisJCWlmIChpbl9zaWduYWxfaGFuZGxlcikKKwkJCXVubGluayhwLT5maWxlbmFtZS5idWYpOworCQllbHNlCisJCQl1bmxpbmtfb3Jfd2FybihwLT5maWxlbmFtZS5idWYpOworCisJCXAtPmFjdGl2ZSA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCByZW1vdmVfdGVtcGZpbGVzX29uX2V4aXQodm9pZCkKK3sKKwlyZW1vdmVfdGVtcGZpbGVzKDApOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfdGVtcGZpbGVzX29uX3NpZ25hbChpbnQgc2lnbm8pCit7CisJcmVtb3ZlX3RlbXBmaWxlcygxKTsKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOworCXJhaXNlKHNpZ25vKTsKK30KKworc3RhdGljIHN0cnVjdCB0ZW1wZmlsZSAqbmV3X3RlbXBmaWxlKHZvaWQpCit7CisJc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSA9IHhtYWxsb2Moc2l6ZW9mKCp0ZW1wZmlsZSkpOworCXRlbXBmaWxlLT5mZCA9IC0xOworCXRlbXBmaWxlLT5mcCA9IE5VTEw7CisJdGVtcGZpbGUtPmFjdGl2ZSA9IDA7CisJdGVtcGZpbGUtPm93bmVyID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmdGVtcGZpbGUtPmxpc3QpOworCXN0cmJ1Zl9pbml0KCZ0ZW1wZmlsZS0+ZmlsZW5hbWUsIDApOworCXJldHVybiB0ZW1wZmlsZTsKK30KKworc3RhdGljIHZvaWQgYWN0aXZhdGVfdGVtcGZpbGUoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSkKK3sKKwlzdGF0aWMgaW50IGluaXRpYWxpemVkOworCisJaWYgKGlzX3RlbXBmaWxlX2FjdGl2ZSh0ZW1wZmlsZSkpCisJCUJVRygiYWN0aXZhdGVfdGVtcGZpbGUgY2FsbGVkIGZvciBhY3RpdmUgb2JqZWN0Iik7CisKKwlpZiAoIWluaXRpYWxpemVkKSB7CisJCXNpZ2NoYWluX3B1c2hfY29tbW9uKHJlbW92ZV90ZW1wZmlsZXNfb25fc2lnbmFsKTsKKwkJYXRleGl0KHJlbW92ZV90ZW1wZmlsZXNfb25fZXhpdCk7CisJCWluaXRpYWxpemVkID0gMTsKKwl9CisKKwl2b2xhdGlsZV9saXN0X2FkZCgmdGVtcGZpbGUtPmxpc3QsICZ0ZW1wZmlsZV9saXN0KTsKKwl0ZW1wZmlsZS0+b3duZXIgPSBnZXRwaWQoKTsKKwl0ZW1wZmlsZS0+YWN0aXZlID0gMTsKK30KKworc3RhdGljIHZvaWQgZGVhY3RpdmF0ZV90ZW1wZmlsZShzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlKQoreworCXRlbXBmaWxlLT5hY3RpdmUgPSAwOworCXN0cmJ1Zl9yZWxlYXNlKCZ0ZW1wZmlsZS0+ZmlsZW5hbWUpOworCXZvbGF0aWxlX2xpc3RfZGVsKCZ0ZW1wZmlsZS0+bGlzdCk7CisJZnJlZSh0ZW1wZmlsZSk7Cit9CisKKy8qIE1ha2Ugc3VyZSBlcnJubyBjb250YWlucyBhIG1lYW5pbmdmdWwgdmFsdWUgb24gZXJyb3IgKi8KK3N0cnVjdCB0ZW1wZmlsZSAqY3JlYXRlX3RlbXBmaWxlX21vZGUoY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUpCit7CisJc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSA9IG5ld190ZW1wZmlsZSgpOworCisJc3RyYnVmX2FkZF9hYnNvbHV0ZV9wYXRoKCZ0ZW1wZmlsZS0+ZmlsZW5hbWUsIHBhdGgpOworCXRlbXBmaWxlLT5mZCA9IG9wZW4odGVtcGZpbGUtPmZpbGVuYW1lLmJ1ZiwKKwkJCSAgICBPX1JEV1IgfCBPX0NSRUFUIHwgT19FWENMIHwgT19DTE9FWEVDLCBtb2RlKTsKKwlpZiAoT19DTE9FWEVDICYmIHRlbXBmaWxlLT5mZCA8IDAgJiYgZXJybm8gPT0gRUlOVkFMKQorCQkvKiBUcnkgYWdhaW4gdy9vIE9fQ0xPRVhFQzogdGhlIGtlcm5lbCBtaWdodCBub3Qgc3VwcG9ydCBpdCAqLworCQl0ZW1wZmlsZS0+ZmQgPSBvcGVuKHRlbXBmaWxlLT5maWxlbmFtZS5idWYsCisJCQkJICAgIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX0VYQ0wsIG1vZGUpOworCWlmICh0ZW1wZmlsZS0+ZmQgPCAwKSB7CisJCWRlYWN0aXZhdGVfdGVtcGZpbGUodGVtcGZpbGUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJYWN0aXZhdGVfdGVtcGZpbGUodGVtcGZpbGUpOworCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0odGVtcGZpbGUtPmZpbGVuYW1lLmJ1ZikpIHsKKwkJaW50IHNhdmVfZXJybm8gPSBlcnJubzsKKwkJZXJyb3IoImNhbm5vdCBmaXggcGVybWlzc2lvbiBiaXRzIG9uICVzIiwgdGVtcGZpbGUtPmZpbGVuYW1lLmJ1Zik7CisJCWRlbGV0ZV90ZW1wZmlsZSgmdGVtcGZpbGUpOworCQllcnJubyA9IHNhdmVfZXJybm87CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiB0ZW1wZmlsZTsKK30KKworc3RydWN0IHRlbXBmaWxlICpyZWdpc3Rlcl90ZW1wZmlsZShjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUgPSBuZXdfdGVtcGZpbGUoKTsKKwlzdHJidWZfYWRkX2Fic29sdXRlX3BhdGgoJnRlbXBmaWxlLT5maWxlbmFtZSwgcGF0aCk7CisJYWN0aXZhdGVfdGVtcGZpbGUodGVtcGZpbGUpOworCXJldHVybiB0ZW1wZmlsZTsKK30KKworc3RydWN0IHRlbXBmaWxlICpta3NfdGVtcGZpbGVfc20oY29uc3QgY2hhciAqZmlsZW5hbWVfdGVtcGxhdGUsIGludCBzdWZmaXhsZW4sIGludCBtb2RlKQoreworCXN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUgPSBuZXdfdGVtcGZpbGUoKTsKKworCXN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aCgmdGVtcGZpbGUtPmZpbGVuYW1lLCBmaWxlbmFtZV90ZW1wbGF0ZSk7CisJdGVtcGZpbGUtPmZkID0gZ2l0X21rc3RlbXBzX21vZGUodGVtcGZpbGUtPmZpbGVuYW1lLmJ1Ziwgc3VmZml4bGVuLCBtb2RlKTsKKwlpZiAodGVtcGZpbGUtPmZkIDwgMCkgeworCQlkZWFjdGl2YXRlX3RlbXBmaWxlKHRlbXBmaWxlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWFjdGl2YXRlX3RlbXBmaWxlKHRlbXBmaWxlKTsKKwlyZXR1cm4gdGVtcGZpbGU7Cit9CisKK3N0cnVjdCB0ZW1wZmlsZSAqbWtzX3RlbXBmaWxlX3RzbShjb25zdCBjaGFyICpmaWxlbmFtZV90ZW1wbGF0ZSwgaW50IHN1ZmZpeGxlbiwgaW50IG1vZGUpCit7CisJc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSA9IG5ld190ZW1wZmlsZSgpOworCWNvbnN0IGNoYXIgKnRtcGRpcjsKKworCXRtcGRpciA9IGdldGVudigiVE1QRElSIik7CisJaWYgKCF0bXBkaXIpCisJCXRtcGRpciA9ICIvdG1wIjsKKworCXN0cmJ1Zl9hZGRmKCZ0ZW1wZmlsZS0+ZmlsZW5hbWUsICIlcy8lcyIsIHRtcGRpciwgZmlsZW5hbWVfdGVtcGxhdGUpOworCXRlbXBmaWxlLT5mZCA9IGdpdF9ta3N0ZW1wc19tb2RlKHRlbXBmaWxlLT5maWxlbmFtZS5idWYsIHN1ZmZpeGxlbiwgbW9kZSk7CisJaWYgKHRlbXBmaWxlLT5mZCA8IDApIHsKKwkJZGVhY3RpdmF0ZV90ZW1wZmlsZSh0ZW1wZmlsZSk7CisJCXJldHVybiBOVUxMOworCX0KKwlhY3RpdmF0ZV90ZW1wZmlsZSh0ZW1wZmlsZSk7CisJcmV0dXJuIHRlbXBmaWxlOworfQorCitzdHJ1Y3QgdGVtcGZpbGUgKnhta3NfdGVtcGZpbGVfbShjb25zdCBjaGFyICpmaWxlbmFtZV90ZW1wbGF0ZSwgaW50IG1vZGUpCit7CisJc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZTsKKwlzdHJ1Y3Qgc3RyYnVmIGZ1bGxfdGVtcGxhdGUgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aCgmZnVsbF90ZW1wbGF0ZSwgZmlsZW5hbWVfdGVtcGxhdGUpOworCXRlbXBmaWxlID0gbWtzX3RlbXBmaWxlX20oZnVsbF90ZW1wbGF0ZS5idWYsIG1vZGUpOworCWlmICghdGVtcGZpbGUpCisJCWRpZV9lcnJubygiVW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAnJXMnIiwKKwkJCSAgZnVsbF90ZW1wbGF0ZS5idWYpOworCisJc3RyYnVmX3JlbGVhc2UoJmZ1bGxfdGVtcGxhdGUpOworCXJldHVybiB0ZW1wZmlsZTsKK30KKworRklMRSAqZmRvcGVuX3RlbXBmaWxlKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJaWYgKCFpc190ZW1wZmlsZV9hY3RpdmUodGVtcGZpbGUpKQorCQlCVUcoImZkb3Blbl90ZW1wZmlsZSgpIGNhbGxlZCBmb3IgaW5hY3RpdmUgb2JqZWN0Iik7CisJaWYgKHRlbXBmaWxlLT5mcCkKKwkJQlVHKCJmZG9wZW5fdGVtcGZpbGUoKSBjYWxsZWQgZm9yIG9wZW4gb2JqZWN0Iik7CisKKwl0ZW1wZmlsZS0+ZnAgPSBmZG9wZW4odGVtcGZpbGUtPmZkLCBtb2RlKTsKKwlyZXR1cm4gdGVtcGZpbGUtPmZwOworfQorCitjb25zdCBjaGFyICpnZXRfdGVtcGZpbGVfcGF0aChzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlKQoreworCWlmICghaXNfdGVtcGZpbGVfYWN0aXZlKHRlbXBmaWxlKSkKKwkJQlVHKCJnZXRfdGVtcGZpbGVfcGF0aCgpIGNhbGxlZCBmb3IgaW5hY3RpdmUgb2JqZWN0Iik7CisJcmV0dXJuIHRlbXBmaWxlLT5maWxlbmFtZS5idWY7Cit9CisKK2ludCBnZXRfdGVtcGZpbGVfZmQoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSkKK3sKKwlpZiAoIWlzX3RlbXBmaWxlX2FjdGl2ZSh0ZW1wZmlsZSkpCisJCUJVRygiZ2V0X3RlbXBmaWxlX2ZkKCkgY2FsbGVkIGZvciBpbmFjdGl2ZSBvYmplY3QiKTsKKwlyZXR1cm4gdGVtcGZpbGUtPmZkOworfQorCitGSUxFICpnZXRfdGVtcGZpbGVfZnAoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSkKK3sKKwlpZiAoIWlzX3RlbXBmaWxlX2FjdGl2ZSh0ZW1wZmlsZSkpCisJCUJVRygiZ2V0X3RlbXBmaWxlX2ZwKCkgY2FsbGVkIGZvciBpbmFjdGl2ZSBvYmplY3QiKTsKKwlyZXR1cm4gdGVtcGZpbGUtPmZwOworfQorCitpbnQgY2xvc2VfdGVtcGZpbGVfZ2VudGx5KHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUpCit7CisJaW50IGZkOworCUZJTEUgKmZwOworCWludCBlcnI7CisKKwlpZiAoIWlzX3RlbXBmaWxlX2FjdGl2ZSh0ZW1wZmlsZSkgfHwgdGVtcGZpbGUtPmZkIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlmZCA9IHRlbXBmaWxlLT5mZDsKKwlmcCA9IHRlbXBmaWxlLT5mcDsKKwl0ZW1wZmlsZS0+ZmQgPSAtMTsKKwlpZiAoZnApIHsKKwkJdGVtcGZpbGUtPmZwID0gTlVMTDsKKwkJaWYgKGZlcnJvcihmcCkpIHsKKwkJCWVyciA9IC0xOworCQkJaWYgKCFmY2xvc2UoZnApKQorCQkJCWVycm5vID0gRUlPOworCQl9IGVsc2UgeworCQkJZXJyID0gZmNsb3NlKGZwKTsKKwkJfQorCX0gZWxzZSB7CisJCWVyciA9IGNsb3NlKGZkKTsKKwl9CisKKwlyZXR1cm4gZXJyID8gLTEgOiAwOworfQorCitpbnQgcmVvcGVuX3RlbXBmaWxlKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUpCit7CisJaWYgKCFpc190ZW1wZmlsZV9hY3RpdmUodGVtcGZpbGUpKQorCQlCVUcoInJlb3Blbl90ZW1wZmlsZSBjYWxsZWQgZm9yIGFuIGluYWN0aXZlIG9iamVjdCIpOworCWlmICgwIDw9IHRlbXBmaWxlLT5mZCkKKwkJQlVHKCJyZW9wZW5fdGVtcGZpbGUgY2FsbGVkIGZvciBhbiBvcGVuIG9iamVjdCIpOworCXRlbXBmaWxlLT5mZCA9IG9wZW4odGVtcGZpbGUtPmZpbGVuYW1lLmJ1ZiwgT19XUk9OTFl8T19UUlVOQyk7CisJcmV0dXJuIHRlbXBmaWxlLT5mZDsKK30KKworaW50IHJlbmFtZV90ZW1wZmlsZShzdHJ1Y3QgdGVtcGZpbGUgKip0ZW1wZmlsZV9wLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUgPSAqdGVtcGZpbGVfcDsKKworCWlmICghaXNfdGVtcGZpbGVfYWN0aXZlKHRlbXBmaWxlKSkKKwkJQlVHKCJyZW5hbWVfdGVtcGZpbGUgY2FsbGVkIGZvciBpbmFjdGl2ZSBvYmplY3QiKTsKKworCWlmIChjbG9zZV90ZW1wZmlsZV9nZW50bHkodGVtcGZpbGUpKSB7CisJCWRlbGV0ZV90ZW1wZmlsZSh0ZW1wZmlsZV9wKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChyZW5hbWUodGVtcGZpbGUtPmZpbGVuYW1lLmJ1ZiwgcGF0aCkpIHsKKwkJaW50IHNhdmVfZXJybm8gPSBlcnJubzsKKwkJZGVsZXRlX3RlbXBmaWxlKHRlbXBmaWxlX3ApOworCQllcnJubyA9IHNhdmVfZXJybm87CisJCXJldHVybiAtMTsKKwl9CisKKwlkZWFjdGl2YXRlX3RlbXBmaWxlKHRlbXBmaWxlKTsKKwkqdGVtcGZpbGVfcCA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGVsZXRlX3RlbXBmaWxlKHN0cnVjdCB0ZW1wZmlsZSAqKnRlbXBmaWxlX3ApCit7CisJc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSA9ICp0ZW1wZmlsZV9wOworCisJaWYgKCFpc190ZW1wZmlsZV9hY3RpdmUodGVtcGZpbGUpKQorCQlyZXR1cm47CisKKwljbG9zZV90ZW1wZmlsZV9nZW50bHkodGVtcGZpbGUpOworCXVubGlua19vcl93YXJuKHRlbXBmaWxlLT5maWxlbmFtZS5idWYpOworCWRlYWN0aXZhdGVfdGVtcGZpbGUodGVtcGZpbGUpOworCSp0ZW1wZmlsZV9wID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3RlbXBmaWxlLmggYi90ZW1wZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZTNiYzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wZmlsZS5oCkBAIC0wLDAgKzEsMjczIEBACisjaWZuZGVmIFRFTVBGSUxFX0gKKyNkZWZpbmUgVEVNUEZJTEVfSAorCisjaW5jbHVkZSAibGlzdC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCisvKgorICogSGFuZGxlIHRlbXBvcmFyeSBmaWxlcy4KKyAqCisgKiBUaGUgdGVtcGZpbGUgQVBJIGFsbG93cyB0ZW1wb3JhcnkgZmlsZXMgdG8gYmUgY3JlYXRlZCwgZGVsZXRlZCwgYW5kCisgKiBhdG9taWNhbGx5IHJlbmFtZWQuIFRlbXBvcmFyeSBmaWxlcyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2hlbiB0aGUKKyAqIHByb2dyYW0gZW5kcyBhcmUgY2xlYW5lZCB1cCBhdXRvbWF0aWNhbGx5LiBMb2NrZmlsZXMgKHNlZQorICogImxvY2tmaWxlLmgiKSBhcmUgYnVpbHQgb24gdG9wIG9mIHRoaXMgQVBJLgorICoKKyAqCisgKiBDYWxsaW5nIHNlcXVlbmNlCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhlIGNhbGxlcjoKKyAqCisgKiAqIEF0dGVtcHRzIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIGJ5IGNhbGxpbmcKKyAqICAgYGNyZWF0ZV90ZW1wZmlsZSgpYC4gVGhlIHJlc291cmNlcyB1c2VkIGZvciB0aGUgdGVtcG9yYXJ5IGZpbGUgYXJlCisgKiAgIG1hbmFnZWQgYnkgdGhlIHRlbXBmaWxlIEFQSS4KKyAqCisgKiAqIFdyaXRlcyBuZXcgY29udGVudCB0byB0aGUgZmlsZSBieSBlaXRoZXI6CisgKgorICogICAqIHdyaXRpbmcgdG8gdGhlIGB0ZW1wZmlsZS0+ZmRgIGZpbGUgZGVzY3JpcHRvcgorICoKKyAqICAgKiBjYWxsaW5nIGBmZG9wZW5fdGVtcGZpbGUoKWAgdG8gZ2V0IGEgYEZJTEVgIHBvaW50ZXIgZm9yIHRoZQorICogICAgIG9wZW4gZmlsZSBhbmQgd3JpdGluZyB0byB0aGUgZmlsZSB1c2luZyBzdGRpby4KKyAqCisgKiAgIE5vdGUgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIGNyZWF0ZWQgYnkgY3JlYXRlX3RlbXBmaWxlKCkKKyAqICAgaXMgbWFya2VkIE9fQ0xPRVhFQywgc28gdGhlIG5ldyBjb250ZW50cyBtdXN0IGJlIHdyaXR0ZW4gYnkKKyAqICAgdGhlIGN1cnJlbnQgcHJvY2Vzcywgbm90IGFueSBzcGF3bmVkIG9uZS4KKyAqCisgKiBXaGVuIGZpbmlzaGVkIHdyaXRpbmcsIHRoZSBjYWxsZXIgY2FuOgorICoKKyAqICogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBhbmQgcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZSBieQorICogICBjYWxsaW5nIGBkZWxldGVfdGVtcGZpbGUoKWAuCisgKgorICogKiBDbG9zZSB0aGUgdGVtcG9yYXJ5IGZpbGUgYW5kIHJlbmFtZSBpdCBhdG9taWNhbGx5IHRvIGEgc3BlY2lmaWVkCisgKiAgIGZpbGVuYW1lIGJ5IGNhbGxpbmcgYHJlbmFtZV90ZW1wZmlsZSgpYC4gVGhpcyByZWxpbnF1aXNoZXMKKyAqICAgY29udHJvbCBvZiB0aGUgZmlsZS4KKyAqCisgKiAqIENsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3Igd2l0aG91dCByZW1vdmluZyBvciByZW5hbWluZyB0aGUKKyAqICAgdGVtcG9yYXJ5IGZpbGUgYnkgY2FsbGluZyBgY2xvc2VfdGVtcGZpbGVfZ2VudGx5KClgLCBhbmQgbGF0ZXIgY2FsbAorICogICBgZGVsZXRlX3RlbXBmaWxlKClgIG9yIGByZW5hbWVfdGVtcGZpbGUoKWAuCisgKgorICogQWZ0ZXIgdGhlIHRlbXBvcmFyeSBmaWxlIGlzIHJlbmFtZWQgb3IgZGVsZXRlZCwgdGhlIGB0ZW1wZmlsZWAKKyAqIG9iamVjdCBpcyBubyBsb25nZXIgdmFsaWQgYW5kIHNob3VsZCBub3QgYmUgcmV1c2VkLgorICoKKyAqIElmIHRoZSBwcm9ncmFtIGV4aXRzIGJlZm9yZSBgcmVuYW1lX3RlbXBmaWxlKClgIG9yCisgKiBgZGVsZXRlX3RlbXBmaWxlKClgIGlzIGNhbGxlZCwgYW4gYGF0ZXhpdCgzKWAgaGFuZGxlciB3aWxsIGNsb3NlCisgKiBhbmQgcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZS4KKyAqCisgKiBJZiB5b3UgbmVlZCB0byBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIHlvdXJzZWxmLCBkbyBzbyBieSBjYWxsaW5nCisgKiBgY2xvc2VfdGVtcGZpbGVfZ2VudGx5KClgLiBZb3Ugc2hvdWxkIG5ldmVyIGNhbGwgYGNsb3NlKDIpYCBvciBgZmNsb3NlKDMpYAorICogeW91cnNlbGYsIG90aGVyd2lzZSB0aGUgYHN0cnVjdCB0ZW1wZmlsZWAgc3RydWN0dXJlIHdvdWxkIHN0aWxsCisgKiB0aGluayB0aGF0IHRoZSBmaWxlIGRlc2NyaXB0b3IgbmVlZHMgdG8gYmUgY2xvc2VkLCBhbmQgYSBsYXRlcgorICogY2xlYW51cCB3b3VsZCByZXN1bHQgaW4gZHVwbGljYXRlIGNhbGxzIHRvIGBjbG9zZSgyKWAuIFdvcnNlIHlldCwKKyAqIGlmIHlvdSBjbG9zZSBhbmQgdGhlbiBsYXRlciBvcGVuIGFub3RoZXIgZmlsZSBkZXNjcmlwdG9yIGZvciBhCisgKiBjb21wbGV0ZWx5IGRpZmZlcmVudCBwdXJwb3NlLCB0aGVuIHRoZSB1bnJlbGF0ZWQgZmlsZSBkZXNjcmlwdG9yCisgKiBtaWdodCBnZXQgY2xvc2VkLgorICoKKyAqCisgKiBFcnJvciBoYW5kbGluZworICogLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBgY3JlYXRlX3RlbXBmaWxlKClgIHJldHVybnMgYW4gYWxsb2NhdGVkIHRlbXBmaWxlIG9uIHN1Y2Nlc3Mgb3IgTlVMTAorICogb24gZmFpbHVyZS4gT24gZXJyb3JzLCBgZXJybm9gIGRlc2NyaWJlcyB0aGUgcmVhc29uIGZvciBmYWlsdXJlLgorICoKKyAqIGByZW5hbWVfdGVtcGZpbGUoKWAgYW5kIGBjbG9zZV90ZW1wZmlsZV9nZW50bHkoKWAgcmV0dXJuIDAgb24gc3VjY2Vzcy4KKyAqIE9uIGZhaWx1cmUgdGhleSBzZXQgYGVycm5vYCBhcHByb3ByaWF0ZWx5IGFuZCByZXR1cm4gLTEuCisgKiBgZGVsZXRlX3RlbXBmaWxlKClgIGFuZCBgcmVuYW1lYCAoYnV0IG5vdCBgY2xvc2VgKSBkbyB0aGVpciBiZXN0IHRvCisgKiBkZWxldGUgdGhlIHRlbXBvcmFyeSBmaWxlIGJlZm9yZSByZXR1cm5pbmcuCisgKi8KKworc3RydWN0IHRlbXBmaWxlIHsKKwl2b2xhdGlsZSBzdHJ1Y3Qgdm9sYXRpbGVfbGlzdF9oZWFkIGxpc3Q7CisJdm9sYXRpbGUgc2lnX2F0b21pY190IGFjdGl2ZTsKKwl2b2xhdGlsZSBpbnQgZmQ7CisJRklMRSAqdm9sYXRpbGUgZnA7CisJdm9sYXRpbGUgcGlkX3Qgb3duZXI7CisJc3RydWN0IHN0cmJ1ZiBmaWxlbmFtZTsKK307CisKKy8qCisgKiBBdHRlbXB0IHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIGF0IHRoZSBzcGVjaWZpZWQgYHBhdGhgLiBSZXR1cm4KKyAqIGEgdGVtcGZpbGUgKHdob3NlICJmZCIgbWVtYmVyIGNhbiBiZSB1c2VkIGZvciB3cml0aW5nIHRvIGl0KSwgb3IKKyAqIE5VTEwgb24gZXJyb3IuIEl0IGlzIGFuIGVycm9yIGlmIGEgZmlsZSBhbHJlYWR5IGV4aXN0cyBhdCB0aGF0IHBhdGguCisgKiBOb3RlIHRoYXQgYG1vZGVgIHdpbGwgYmUgZnVydGhlciBtb2RpZmllZCBieSB0aGUgdW1hc2ssIGFuZCBwb3NzaWJseQorICogYGNvcmUuc2hhcmVkUmVwb3NpdG9yeWAsIHNvIGl0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGhhdmUgdGhlIGdpdmVuCisgKiBtb2RlLgorICovCitzdHJ1Y3QgdGVtcGZpbGUgKmNyZWF0ZV90ZW1wZmlsZV9tb2RlKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGVtcGZpbGUgKmNyZWF0ZV90ZW1wZmlsZShjb25zdCBjaGFyICpwYXRoKQoreworCXJldHVybiBjcmVhdGVfdGVtcGZpbGVfbW9kZShwYXRoLCAwNjY2KTsKK30KKworLyoKKyAqIFJlZ2lzdGVyIGFuIGV4aXN0aW5nIGZpbGUgYXMgYSB0ZW1wZmlsZSwgbWVhbmluZyB0aGF0IGl0IHdpbGwgYmUKKyAqIGRlbGV0ZWQgd2hlbiB0aGUgcHJvZ3JhbSBleGl0cy4gVGhlIHRlbXBmaWxlIGlzIGNvbnNpZGVyZWQgY2xvc2VkLAorICogYnV0IGl0IGNhbiBiZSB3b3JrZWQgd2l0aCBsaWtlIGFueSBvdGhlciBjbG9zZWQgdGVtcGZpbGUgKGZvcgorICogZXhhbXBsZSwgaXQgY2FuIGJlIG9wZW5lZCB1c2luZyByZW9wZW5fdGVtcGZpbGUoKSkuCisgKi8KK3N0cnVjdCB0ZW1wZmlsZSAqcmVnaXN0ZXJfdGVtcGZpbGUoY29uc3QgY2hhciAqcGF0aCk7CisKKworLyoKKyAqIG1rc190ZW1wZmlsZSBmdW5jdGlvbnMKKyAqCisgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhdHRlbXB0IHRvIGNyZWF0ZSBhbmQgb3BlbiB0ZW1wb3JhcnkgZmlsZXMKKyAqIHdpdGggbmFtZXMgZGVyaXZlZCBhdXRvbWF0aWNhbGx5IGZyb20gYSB0ZW1wbGF0ZSwgaW4gdGhlIG1hbm5lciBvZgorICogbWtzdGVtcHMoKSwgYW5kIGFycmFuZ2UgZm9yIHRoZW0gdG8gYmUgZGVsZXRlZCBpZiB0aGUgcHJvZ3JhbSBlbmRzCisgKiBiZWZvcmUgdGhleSBhcmUgZGVsZXRlZCBleHBsaWNpdGx5LiBUaGVyZSBpcyBhIHdob2xlIGZhbWlseSBvZiBzdWNoCisgKiBmdW5jdGlvbnMsIG5hbWVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHBhdHRlcm46CisgKgorICogICAgIHg/bWtzX3RlbXBmaWxlX3Q/cz9tPygpCisgKgorICogVGhlIG9wdGlvbmFsIGxldHRlcnMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorICoKKyAqICAgeCAtIGRpZSBpZiB0aGUgdGVtcG9yYXJ5IGZpbGUgY2Fubm90IGJlIGNyZWF0ZWQuCisgKgorICogICB0IC0gY3JlYXRlIHRoZSB0ZW1wb3JhcnkgZmlsZSB1bmRlciAkVE1QRElSIChhcyBvcHBvc2VkIHRvCisgKiAgICAgICByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkpLiBXaGVuIHRoZXNlIHZhcmlhbnRzIGFyZQorICogICAgICAgdXNlZCwgdGVtcGxhdGUgc2hvdWxkIGJlIHRoZSBwYXR0ZXJuIGZvciB0aGUgZmlsZW5hbWUgYWxvbmUsCisgKiAgICAgICB3aXRob3V0IGEgcGF0aC4KKyAqCisgKiAgIHMgLSB0ZW1wbGF0ZSBpbmNsdWRlcyBhIHN1ZmZpeCB0aGF0IGlzIHN1ZmZpeGxlbiBjaGFyYWN0ZXJzIGxvbmcuCisgKgorICogICBtIC0gdGhlIHRlbXBvcmFyeSBmaWxlIHNob3VsZCBiZSBjcmVhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBtb2RlCisgKiAgICAgICAob3RoZXJ3aXNlLCB0aGUgbW9kZSBpcyBzZXQgdG8gMDYwMCkuCisgKgorICogTm9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgbW9kaWZ5IHRlbXBsYXRlLiBJZiB0aGUgY2FsbGVyIHdhbnRzIHRvCisgKiBrbm93IHRoZSAoYWJzb2x1dGUpIHBhdGggb2YgdGhlIGZpbGUgdGhhdCB3YXMgY3JlYXRlZCwgaXQgY2FuIGJlCisgKiByZWFkIGZyb20gdGVtcGZpbGUtPmZpbGVuYW1lLgorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBmdW5jdGlvbnMgcmV0dXJuIGEgdGVtcGZpbGUgd2hvc2UgImZkIiBtZW1iZXIgaXMgb3BlbgorICogZm9yIHdyaXRpbmcgdGhlIHRlbXBvcmFyeSBmaWxlLiBPbiBlcnJvcnMsIHRoZXkgcmV0dXJuIE5VTEwgYW5kIHNldAorICogZXJybm8gYXBwcm9wcmlhdGVseSAoZXhjZXB0IGZvciB0aGUgIngiIHZhcmlhbnRzLCB3aGljaCBkaWUoKSBvbgorICogZXJyb3JzKS4KKyAqLworCisvKiBTZWUgIm1rc190ZW1wZmlsZSBmdW5jdGlvbnMiIGFib3ZlLiAqLworc3RydWN0IHRlbXBmaWxlICpta3NfdGVtcGZpbGVfc20oY29uc3QgY2hhciAqZmlsZW5hbWVfdGVtcGxhdGUsCisJCQkJIGludCBzdWZmaXhsZW4sIGludCBtb2RlKTsKKworLyogU2VlICJta3NfdGVtcGZpbGUgZnVuY3Rpb25zIiBhYm92ZS4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRlbXBmaWxlICpta3NfdGVtcGZpbGVfcyhjb25zdCBjaGFyICpmaWxlbmFtZV90ZW1wbGF0ZSwKKwkJCQkJICAgICAgaW50IHN1ZmZpeGxlbikKK3sKKwlyZXR1cm4gbWtzX3RlbXBmaWxlX3NtKGZpbGVuYW1lX3RlbXBsYXRlLCBzdWZmaXhsZW4sIDA2MDApOworfQorCisvKiBTZWUgIm1rc190ZW1wZmlsZSBmdW5jdGlvbnMiIGFib3ZlLiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGVtcGZpbGUgKm1rc190ZW1wZmlsZV9tKGNvbnN0IGNoYXIgKmZpbGVuYW1lX3RlbXBsYXRlLCBpbnQgbW9kZSkKK3sKKwlyZXR1cm4gbWtzX3RlbXBmaWxlX3NtKGZpbGVuYW1lX3RlbXBsYXRlLCAwLCBtb2RlKTsKK30KKworLyogU2VlICJta3NfdGVtcGZpbGUgZnVuY3Rpb25zIiBhYm92ZS4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRlbXBmaWxlICpta3NfdGVtcGZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWVfdGVtcGxhdGUpCit7CisJcmV0dXJuIG1rc190ZW1wZmlsZV9zbShmaWxlbmFtZV90ZW1wbGF0ZSwgMCwgMDYwMCk7Cit9CisKKy8qIFNlZSAibWtzX3RlbXBmaWxlIGZ1bmN0aW9ucyIgYWJvdmUuICovCitzdHJ1Y3QgdGVtcGZpbGUgKm1rc190ZW1wZmlsZV90c20oY29uc3QgY2hhciAqZmlsZW5hbWVfdGVtcGxhdGUsCisJCQkJICBpbnQgc3VmZml4bGVuLCBpbnQgbW9kZSk7CisKKy8qIFNlZSAibWtzX3RlbXBmaWxlIGZ1bmN0aW9ucyIgYWJvdmUuICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0ZW1wZmlsZSAqbWtzX3RlbXBmaWxlX3RzKGNvbnN0IGNoYXIgKmZpbGVuYW1lX3RlbXBsYXRlLAorCQkJCQkgICAgICAgaW50IHN1ZmZpeGxlbikKK3sKKwlyZXR1cm4gbWtzX3RlbXBmaWxlX3RzbShmaWxlbmFtZV90ZW1wbGF0ZSwgc3VmZml4bGVuLCAwNjAwKTsKK30KKworLyogU2VlICJta3NfdGVtcGZpbGUgZnVuY3Rpb25zIiBhYm92ZS4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRlbXBmaWxlICpta3NfdGVtcGZpbGVfdG0oY29uc3QgY2hhciAqZmlsZW5hbWVfdGVtcGxhdGUsIGludCBtb2RlKQoreworCXJldHVybiBta3NfdGVtcGZpbGVfdHNtKGZpbGVuYW1lX3RlbXBsYXRlLCAwLCBtb2RlKTsKK30KKworLyogU2VlICJta3NfdGVtcGZpbGUgZnVuY3Rpb25zIiBhYm92ZS4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRlbXBmaWxlICpta3NfdGVtcGZpbGVfdChjb25zdCBjaGFyICpmaWxlbmFtZV90ZW1wbGF0ZSkKK3sKKwlyZXR1cm4gbWtzX3RlbXBmaWxlX3RzbShmaWxlbmFtZV90ZW1wbGF0ZSwgMCwgMDYwMCk7Cit9CisKKy8qIFNlZSAibWtzX3RlbXBmaWxlIGZ1bmN0aW9ucyIgYWJvdmUuICovCitzdHJ1Y3QgdGVtcGZpbGUgKnhta3NfdGVtcGZpbGVfbShjb25zdCBjaGFyICpmaWxlbmFtZV90ZW1wbGF0ZSwgaW50IG1vZGUpOworCisvKiBTZWUgIm1rc190ZW1wZmlsZSBmdW5jdGlvbnMiIGFib3ZlLiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGVtcGZpbGUgKnhta3NfdGVtcGZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWVfdGVtcGxhdGUpCit7CisJcmV0dXJuIHhta3NfdGVtcGZpbGVfbShmaWxlbmFtZV90ZW1wbGF0ZSwgMDYwMCk7Cit9CisKKy8qCisgKiBBc3NvY2lhdGUgYSBzdGRpbyBzdHJlYW0gd2l0aCB0aGUgdGVtcG9yYXJ5IGZpbGUgKHdoaWNoIG11c3Qgc3RpbGwKKyAqIGJlIG9wZW4pLiBSZXR1cm4gYE5VTExgICgqd2l0aG91dCogZGVsZXRpbmcgdGhlIGZpbGUpIG9uIGVycm9yLiBUaGUKKyAqIHN0cmVhbSBpcyBjbG9zZWQgYXV0b21hdGljYWxseSB3aGVuIGBjbG9zZV90ZW1wZmlsZV9nZW50bHkoKWAgaXMgY2FsbGVkIG9yCisgKiB3aGVuIHRoZSBmaWxlIGlzIGRlbGV0ZWQgb3IgcmVuYW1lZC4KKyAqLworRklMRSAqZmRvcGVuX3RlbXBmaWxlKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUsIGNvbnN0IGNoYXIgKm1vZGUpOworCitzdGF0aWMgaW5saW5lIGludCBpc190ZW1wZmlsZV9hY3RpdmUoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSkKK3sKKwlyZXR1cm4gdGVtcGZpbGUgJiYgdGVtcGZpbGUtPmFjdGl2ZTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgcGF0aCBvZiB0aGUgbG9ja2ZpbGUuIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBwb2ludGVyIHRvIGEKKyAqIGZpZWxkIHdpdGhpbiB0aGUgbG9ja19maWxlIG9iamVjdCBhbmQgc2hvdWxkIG5vdCBiZSBmcmVlZC4KKyAqLworY29uc3QgY2hhciAqZ2V0X3RlbXBmaWxlX3BhdGgoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSk7CisKK2ludCBnZXRfdGVtcGZpbGVfZmQoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSk7CitGSUxFICpnZXRfdGVtcGZpbGVfZnAoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSk7CisKKy8qCisgKiBJZiB0aGUgdGVtcG9yYXJ5IGZpbGUgaXMgc3RpbGwgb3BlbiwgY2xvc2UgaXQgKGFuZCB0aGUgZmlsZSBwb2ludGVyCisgKiB0b28sIGlmIGl0IGhhcyBiZWVuIG9wZW5lZCB1c2luZyBgZmRvcGVuX3RlbXBmaWxlKClgKSB3aXRob3V0CisgKiBkZWxldGluZyB0aGUgZmlsZS4gUmV0dXJuIDAgdXBvbiBzdWNjZXNzLiBPbiBmYWlsdXJlIHRvIGBjbG9zZSgyKWAsCisgKiByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZS4gVXN1YWxseSBgZGVsZXRlX3RlbXBmaWxlKClgIG9yIGByZW5hbWVfdGVtcGZpbGUoKWAKKyAqIHNob3VsZCBldmVudHVhbGx5IGJlIGNhbGxlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYGNsb3NlX3RlbXBmaWxlX2dlbnRseSgpYAorICogc3VjY2VlZHMuCisgKi8KK2ludCBjbG9zZV90ZW1wZmlsZV9nZW50bHkoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSk7CisKKy8qCisgKiBSZS1vcGVuIGEgdGVtcG9yYXJ5IGZpbGUgdGhhdCBoYXMgYmVlbiBjbG9zZWQgdXNpbmcKKyAqIGBjbG9zZV90ZW1wZmlsZV9nZW50bHkoKWAgYnV0IG5vdCB5ZXQgZGVsZXRlZCBvciByZW5hbWVkLiBUaGlzIGNhbiBiZSB1c2VkCisgKiB0byBpbXBsZW1lbnQgYSBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAqCisgKiAqIENyZWF0ZSB0ZW1wb3JhcnkgZmlsZS4KKyAqCisgKiAqIFdyaXRlIG5ldyBjb250ZW50cyB0byBmaWxlLCB0aGVuIGBjbG9zZV90ZW1wZmlsZV9nZW50bHkoKWAgdG8gY2F1c2UgdGhlCisgKiAgIGNvbnRlbnRzIHRvIGJlIHdyaXR0ZW4gdG8gZGlzay4KKyAqCisgKiAqIFBhc3MgdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlIHRvIGFub3RoZXIgcHJvZ3JhbSB0byBhbGxvdworICogICBpdCAoYW5kIG5vYm9keSBlbHNlKSB0byBpbnNwZWN0IG9yIGV2ZW4gbW9kaWZ5IHRoZSBmaWxlJ3MKKyAqICAgY29udGVudHMuCisgKgorICogKiBgcmVvcGVuX3RlbXBmaWxlKClgIHRvIHJlb3BlbiB0aGUgdGVtcG9yYXJ5IGZpbGUsIHRydW5jYXRpbmcgdGhlIGV4aXN0aW5nCisgKiAgIGNvbnRlbnRzLiBXcml0ZSBvdXQgdGhlIG5ldyBjb250ZW50cy4KKyAqCisgKiAqIGByZW5hbWVfdGVtcGZpbGUoKWAgdG8gbW92ZSB0aGUgZmlsZSB0byBpdHMgcGVybWFuZW50IGxvY2F0aW9uLgorICovCitpbnQgcmVvcGVuX3RlbXBmaWxlKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUpOworCisvKgorICogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBhbmQvb3IgZmlsZSBwb2ludGVyIGFuZCByZW1vdmUgdGhlCisgKiB0ZW1wb3JhcnkgZmlsZSBhc3NvY2lhdGVkIHdpdGggYHRlbXBmaWxlYC4gSXQgaXMgYSBOT09QIHRvIGNhbGwKKyAqIGBkZWxldGVfdGVtcGZpbGUoKWAgZm9yIGEgYHRlbXBmaWxlYCBvYmplY3QgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCisgKiBkZWxldGVkIG9yIHJlbmFtZWQuCisgKi8KK3ZvaWQgZGVsZXRlX3RlbXBmaWxlKHN0cnVjdCB0ZW1wZmlsZSAqKnRlbXBmaWxlX3ApOworCisvKgorICogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBhbmQvb3IgZmlsZSBwb2ludGVyIGlmIHRoZXkgYXJlIHN0aWxsCisgKiBvcGVuLCBhbmQgYXRvbWljYWxseSByZW5hbWUgdGhlIHRlbXBvcmFyeSBmaWxlIHRvIGBwYXRoYC4gYHBhdGhgCisgKiBtdXN0IGJlIG9uIHRoZSBzYW1lIGZpbGVzeXN0ZW0gYXMgdGhlIGxvY2sgZmlsZS4gUmV0dXJuIDAgb24KKyAqIHN1Y2Nlc3MuIE9uIGZhaWx1cmUsIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZpbGUgYW5kIHJldHVybiAtMSwgd2l0aAorICogYGVycm5vYCBzZXQgdG8gdGhlIHZhbHVlIGZyb20gdGhlIGZhaWxpbmcgY2FsbCB0byBgY2xvc2UoMilgIG9yCisgKiBgcmVuYW1lKDIpYC4gSXQgaXMgYSBidWcgdG8gY2FsbCBgcmVuYW1lX3RlbXBmaWxlKClgIGZvciBhCisgKiBgdGVtcGZpbGVgIG9iamVjdCB0aGF0IGlzIG5vdCBjdXJyZW50bHkgYWN0aXZlLgorICovCitpbnQgcmVuYW1lX3RlbXBmaWxlKHN0cnVjdCB0ZW1wZmlsZSAqKnRlbXBmaWxlX3AsIGNvbnN0IGNoYXIgKnBhdGgpOworCisjZW5kaWYgLyogVEVNUEZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzLy5naXRpZ25vcmUgYi90ZW1wbGF0ZXMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzU5ZWNiCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitibHQKK2JvaWxlcnBsYXRlcy5tYWRlCmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvTWFrZWZpbGUgYi90ZW1wbGF0ZXMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyYTcxYQotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBsYXRlcy9NYWtlZmlsZQpAQCAtMCwwICsxLDY2IEBACisjIG1ha2UgYW5kIGluc3RhbGwgc2FtcGxlIHRlbXBsYXRlcworCitpZm5kZWYgVgorCVFVSUVUID0gQAorZW5kaWYKKworSU5TVEFMTCA/PSBpbnN0YWxsCitUQVIgPz0gdGFyCitSTSA/PSBybSAtZgorcHJlZml4ID89ICQoSE9NRSkKK3RlbXBsYXRlX2luc3RkaXIgPz0gJChwcmVmaXgpL3NoYXJlL2dpdC1jb3JlL3RlbXBsYXRlcworIyBERVNURElSPQorCitpZm5kZWYgU0hFTExfUEFUSAorCVNIRUxMX1BBVEggPSAvYmluL3NoCitlbmRpZgoraWZuZGVmIFBFUkxfUEFUSAorCVBFUkxfUEFUSCA9IHBlcmwKK2VuZGlmCisKK1NIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEgpKQorUEVSTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChQRVJMX1BBVEgpKQorCisjIFNoZWxsIHF1b3RlIChkbyBub3QgdXNlICQoY2FsbCkgdG8gYWNjb21tb2RhdGUgYW5jaWVudCBzZXR1cHMpOworREVTVERJUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVTVERJUikpCit0ZW1wbGF0ZV9pbnN0ZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJCh0ZW1wbGF0ZV9pbnN0ZGlyKSkKKworYWxsOiBib2lsZXJwbGF0ZXMubWFkZSBjdXN0b20KKworIyBQdXQgdGVtcGxhdGVzIHRoYXQgY2FuIGJlIGNvcGllZCBzdHJhaWdodCBmcm9tIHRoZSBzb3VyY2UKKyMgaW4gYSBmaWxlIGRpcmVjLS10b3J5LS1maWxlIGluIHRoZSBzb3VyY2UuICBUaGV5IHdpbGwgYmUKKyMganVzdCBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uLgorCiticHNyYyA9ICQoZmlsdGVyLW91dCAlfiwkKHdpbGRjYXJkICotLSopKQorYm9pbGVycGxhdGVzLm1hZGUgOiAkKGJwc3JjKQorCSQoUVVJRVQpdW1hc2sgMDIyICYmIGxzICotLSogMj4vZGV2L251bGwgfCBcCisJd2hpbGUgcmVhZCBib2lsZXJwbGF0ZTsgXAorCWRvIFwKKwkJY2FzZSAiJCRib2lsZXJwbGF0ZSIgaW4gKn4pIGNvbnRpbnVlIDs7IGVzYWMgJiYgXAorCQlkc3Q9YGVjaG8gIiQkYm9pbGVycGxhdGUiIHwgc2VkIC1lICdzfF50aGlzfC58O3N8LS18L3xnJ2AgJiYgXAorCQlkaXI9YGV4cHIgIiQkZHN0IiA6ICdcKC4qXCkvJ2AgJiYgXAorCQlta2RpciAtcCBibHQvJCRkaXIgJiYgXAorCQljYXNlICIkJGJvaWxlcnBsYXRlIiBpbiBcCisJCSotLSkgY29udGludWU7OyBcCisJCWVzYWMgJiYgXAorCQlzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAorCQkgICAgLWUgJ3N8QFNIRUxMX1BBVEhAfCQoU0hFTExfUEFUSF9TUSl8JyBcCisJCSAgICAtZSAnc3xAUEVSTF9QQVRIQHwkKFBFUkxfUEFUSF9TUSl8ZycgJCRib2lsZXJwbGF0ZSA+IFwKKwkJCWJsdC8kJGRzdCAmJiBcCisJCWlmIHRlc3QgLXggIiQkYm9pbGVycGxhdGUiOyB0aGVuIHJ4PXJ4OyBlbHNlIHJ4PXI7IGZpICYmIFwKKwkJY2htb2QgYSskJHJ4ICJibHQvJCRkc3QiIHx8IGV4aXQ7IFwKKwlkb25lICYmIFwKKwlkYXRlID4kQAorCisjIElmIHlvdSBuZWVkIGJ1aWxkLXRhaWxvcmVkIHRlbXBsYXRlcywgYnVpbGQgdGhlbSBpbnRvIGJsdC8KKyMgZGlyZWN0b3J5IHlvdXJzZWxmIGhlcmUuCitjdXN0b206CisJJChRVUlFVCk6IG5vIGN1c3RvbSB0ZW1wbGF0ZXMgeWV0CisKK2NsZWFuOgorCSQoUk0pIC1yIGJsdCBib2lsZXJwbGF0ZXMubWFkZQorCitpbnN0YWxsOiBhbGwKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQodGVtcGxhdGVfaW5zdGRpcl9TUSknCisJKGNkIGJsdCAmJiAkKFRBUikgY2YgLSAuKSB8IFwKKwkoY2QgJyQoREVTVERJUl9TUSkkKHRlbXBsYXRlX2luc3RkaXJfU1EpJyAmJiB1bWFzayAwMjIgJiYgJChUQVIpIHhvZiAtKQpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2JyYW5jaGVzLS0gYi90ZW1wbGF0ZXMvYnJhbmNoZXMtLQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWU4ODcwCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2JyYW5jaGVzLS0KQEAgLTAsMCArMSBAQAorOiB0aGlzIGlzIGp1c3QgdG8gZW5zdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1hcHBseXBhdGNoLW1zZy5zYW1wbGUgYi90ZW1wbGF0ZXMvaG9va3MtLWFwcGx5cGF0Y2gtbXNnLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNWQ3Yjg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS1hcHBseXBhdGNoLW1zZy5zYW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisjCisjIEFuIGV4YW1wbGUgaG9vayBzY3JpcHQgdG8gY2hlY2sgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSB0YWtlbiBieQorIyBhcHBseXBhdGNoIGZyb20gYW4gZS1tYWlsIG1lc3NhZ2UuCisjCisjIFRoZSBob29rIHNob3VsZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzIGFmdGVyIGlzc3VpbmcgYW4KKyMgYXBwcm9wcmlhdGUgbWVzc2FnZSBpZiBpdCB3YW50cyB0byBzdG9wIHRoZSBjb21taXQuICBUaGUgaG9vayBpcworIyBhbGxvd2VkIHRvIGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIGZpbGUuCisjCisjIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gImFwcGx5cGF0Y2gtbXNnIi4KKworLiBnaXQtc2gtc2V0dXAKK2NvbW1pdG1zZz0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LXBhdGggaG9va3MvY29tbWl0LW1zZykiCit0ZXN0IC14ICIkY29tbWl0bXNnIiAmJiBleGVjICIkY29tbWl0bXNnIiAkezErIiRAIn0KKzoKZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy9ob29rcy0tY29tbWl0LW1zZy5zYW1wbGUgYi90ZW1wbGF0ZXMvaG9va3MtLWNvbW1pdC1tc2cuc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1OGQxMTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wbGF0ZXMvaG9va3MtLWNvbW1pdC1tc2cuc2FtcGxlCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIworIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIGNoZWNrIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuCisjIENhbGxlZCBieSAiZ2l0IGNvbW1pdCIgd2l0aCBvbmUgYXJndW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBmaWxlCisjIHRoYXQgaGFzIHRoZSBjb21taXQgbWVzc2FnZS4gIFRoZSBob29rIHNob3VsZCBleGl0IHdpdGggbm9uLXplcm8KKyMgc3RhdHVzIGFmdGVyIGlzc3VpbmcgYW4gYXBwcm9wcmlhdGUgbWVzc2FnZSBpZiBpdCB3YW50cyB0byBzdG9wIHRoZQorIyBjb21taXQuICBUaGUgaG9vayBpcyBhbGxvd2VkIHRvIGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIGZpbGUuCisjCisjIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gImNvbW1pdC1tc2ciLgorCisjIFVuY29tbWVudCB0aGUgYmVsb3cgdG8gYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBtZXNzYWdlLgorIyBEb2luZyB0aGlzIGluIGEgaG9vayBpcyBhIGJhZCBpZGVhIGluIGdlbmVyYWwsIGJ1dCB0aGUgcHJlcGFyZS1jb21taXQtbXNnCisjIGhvb2sgaXMgbW9yZSBzdWl0ZWQgdG8gaXQuCisjCisjIFNPQj0kKGdpdCB2YXIgR0lUX0FVVEhPUl9JREVOVCB8IHNlZCAtbiAncy9eXCguKj5cKS4qJC9TaWduZWQtb2ZmLWJ5OiBcMS9wJykKKyMgZ3JlcCAtcXMgIl4kU09CIiAiJDEiIHx8IGVjaG8gIiRTT0IiID4+ICIkMSIKKworIyBUaGlzIGV4YW1wbGUgY2F0Y2hlcyBkdXBsaWNhdGUgU2lnbmVkLW9mZi1ieSBsaW5lcy4KKwordGVzdCAiIiA9ICIkKGdyZXAgJ15TaWduZWQtb2ZmLWJ5OiAnICIkMSIgfAorCSBzb3J0IHwgdW5pcSAtYyB8IHNlZCAtZSAnL15bIAldKjFbIAldL2QnKSIgfHwgeworCWVjaG8gPiYyIER1cGxpY2F0ZSBTaWduZWQtb2ZmLWJ5IGxpbmVzLgorCWV4aXQgMQorfQpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1mc21vbml0b3Itd2F0Y2htYW4uc2FtcGxlIGIvdGVtcGxhdGVzL2hvb2tzLS1mc21vbml0b3Itd2F0Y2htYW4uc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE0ZWQwYWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wbGF0ZXMvaG9va3MtLWZzbW9uaXRvci13YXRjaG1hbi5zYW1wbGUKQEAgLTAsMCArMSwxNzMgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIElQQzo6T3BlbjI7CisKKyMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byBpbnRlZ3JhdGUgV2F0Y2htYW4KKyMgKGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3dhdGNobWFuLykgd2l0aCBnaXQgdG8gc3BlZWQgdXAgZGV0ZWN0aW5nCisjIG5ldyBhbmQgbW9kaWZpZWQgZmlsZXMuCisjCisjIFRoZSBob29rIGlzIHBhc3NlZCBhIHZlcnNpb24gKGN1cnJlbnRseSAyKSBhbmQgbGFzdCB1cGRhdGUgdG9rZW4KKyMgZm9ybWF0dGVkIGFzIGEgc3RyaW5nIGFuZCBvdXRwdXRzIHRvIHN0ZG91dCBhIG5ldyB1cGRhdGUgdG9rZW4gYW5kCisjIGFsbCBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgdXBkYXRlIHRva2VuLiBQYXRocyBtdXN0CisjIGJlIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUgYW5kIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBOVUwuCisjCisjIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gInF1ZXJ5LXdhdGNobWFuIiBhbmQgc2V0CisjICdnaXQgY29uZmlnIGNvcmUuZnNtb25pdG9yIC5naXQvaG9va3MvcXVlcnktd2F0Y2htYW4nCisjCitteSAoJHZlcnNpb24sICRsYXN0X3VwZGF0ZV90b2tlbikgPSBAQVJHVjsKKworIyBVbmNvbW1lbnQgZm9yIGRlYnVnZ2luZworIyBwcmludCBTVERFUlIgIiQwICR2ZXJzaW9uICRsYXN0X3VwZGF0ZV90b2tlblxuIjsKKworIyBDaGVjayB0aGUgaG9vayBpbnRlcmZhY2UgdmVyc2lvbgoraWYgKCR2ZXJzaW9uIG5lIDIpIHsKKwlkaWUgIlVuc3VwcG9ydGVkIHF1ZXJ5LWZzbW9uaXRvciBob29rIHZlcnNpb24gJyR2ZXJzaW9uJy5cbiIgLgorCSAgICAiRmFsbGluZyBiYWNrIHRvIHNjYW5uaW5nLi4uXG4iOworfQorCitteSAkZ2l0X3dvcmtfdHJlZSA9IGdldF93b3JraW5nX2RpcigpOworCitteSAkcmV0cnkgPSAxOworCitteSAkanNvbl9wa2c7CitldmFsIHsKKwlyZXF1aXJlIEpTT046OlhTOworCSRqc29uX3BrZyA9ICJKU09OOjpYUyI7CisJMTsKK30gb3IgZG8geworCXJlcXVpcmUgSlNPTjo6UFA7CisJJGpzb25fcGtnID0gIkpTT046OlBQIjsKK307CisKK2xhdW5jaF93YXRjaG1hbigpOworCitzdWIgbGF1bmNoX3dhdGNobWFuIHsKKwlteSAkbyA9IHdhdGNobWFuX3F1ZXJ5KCk7CisJaWYgKGlzX3dvcmtfdHJlZV93YXRjaGVkKCRvKSkgeworCQlvdXRwdXRfcmVzdWx0KCRvLT57Y2xvY2t9LCBAeyRvLT57ZmlsZXN9fSk7CisJfQorfQorCitzdWIgb3V0cHV0X3Jlc3VsdCB7CisJbXkgKCRjbG9ja2lkLCBAZmlsZXMpID0gQF87CisKKwkjIFVuY29tbWVudCBmb3IgZGVidWdnaW5nIHdhdGNobWFuIG91dHB1dAorCSMgb3BlbiAobXkgJGZoLCAiPiIsICIuZ2l0L3dhdGNobWFuLW91dHB1dC5vdXQiKTsKKwkjIGJpbm1vZGUgJGZoLCAiOnV0ZjgiOworCSMgcHJpbnQgJGZoICIkY2xvY2tpZFxuQGZpbGVzXG4iOworCSMgY2xvc2UgJGZoOworCisJYmlubW9kZSBTVERPVVQsICI6dXRmOCI7CisJcHJpbnQgJGNsb2NraWQ7CisJcHJpbnQgIlwwIjsKKwlsb2NhbCAkLCA9ICJcMCI7CisJcHJpbnQgQGZpbGVzOworfQorCitzdWIgd2F0Y2htYW5fY2xvY2sgeworCW15ICRyZXNwb25zZSA9IHF4L3dhdGNobWFuIGNsb2NrICIkZ2l0X3dvcmtfdHJlZSIvOworCWRpZSAiRmFpbGVkIHRvIGdldCBjbG9jayBpZCBvbiAnJGdpdF93b3JrX3RyZWUnLlxuIiAuCisJCSJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiIgaWYgJD8gIT0gMDsKKworCXJldHVybiAkanNvbl9wa2ctPm5ldy0+dXRmOC0+ZGVjb2RlKCRyZXNwb25zZSk7Cit9CisKK3N1YiB3YXRjaG1hbl9xdWVyeSB7CisJbXkgJHBpZCA9IG9wZW4yKFwqQ0hMRF9PVVQsIFwqQ0hMRF9JTiwgJ3dhdGNobWFuIC1qIC0tbm8tcHJldHR5JykKKwlvciBkaWUgIm9wZW4yKCkgZmFpbGVkOiAkIVxuIiAuCisJIkZhbGxpbmcgYmFjayB0byBzY2FubmluZy4uLlxuIjsKKworCSMgSW4gdGhlIHF1ZXJ5IGV4cHJlc3Npb24gYmVsb3cgd2UncmUgYXNraW5nIGZvciBuYW1lcyBvZiBmaWxlcyB0aGF0CisJIyBjaGFuZ2VkIHNpbmNlICRsYXN0X3VwZGF0ZV90b2tlbiBidXQgbm90IGZyb20gdGhlIC5naXQgZm9sZGVyLgorCSMKKwkjIFRvIGFjY29tcGxpc2ggdGhpcywgd2UncmUgdXNpbmcgdGhlICJzaW5jZSIgZ2VuZXJhdG9yIHRvIHVzZSB0aGUKKwkjIHJlY2VuY3kgaW5kZXggdG8gc2VsZWN0IGNhbmRpZGF0ZSBub2RlcyBhbmQgImZpZWxkcyIgdG8gbGltaXQgdGhlCisJIyBvdXRwdXQgdG8gZmlsZSBuYW1lcyBvbmx5LiBUaGVuIHdlJ3JlIHVzaW5nIHRoZSAiZXhwcmVzc2lvbiIgdGVybSB0bworCSMgZnVydGhlciBjb25zdHJhaW4gdGhlIHJlc3VsdHMuCisJaWYgKHN1YnN0cigkbGFzdF91cGRhdGVfdG9rZW4sIDAsIDEpIGVxICJjIikgeworCQkkbGFzdF91cGRhdGVfdG9rZW4gPSAiXCIkbGFzdF91cGRhdGVfdG9rZW5cIiI7CisJfQorCW15ICRxdWVyeSA9IDw8IglFTkQiOworCQlbInF1ZXJ5IiwgIiRnaXRfd29ya190cmVlIiwgeworCQkJInNpbmNlIjogJGxhc3RfdXBkYXRlX3Rva2VuLAorCQkJImZpZWxkcyI6IFsibmFtZSJdLAorCQkJImV4cHJlc3Npb24iOiBbIm5vdCIsIFsiZGlybmFtZSIsICIuZ2l0Il1dCisJCX1dCisJRU5ECisKKwkjIFVuY29tbWVudCBmb3IgZGVidWdnaW5nIHRoZSB3YXRjaG1hbiBxdWVyeQorCSMgb3BlbiAobXkgJGZoLCAiPiIsICIuZ2l0L3dhdGNobWFuLXF1ZXJ5Lmpzb24iKTsKKwkjIHByaW50ICRmaCAkcXVlcnk7CisJIyBjbG9zZSAkZmg7CisKKwlwcmludCBDSExEX0lOICRxdWVyeTsKKwljbG9zZSBDSExEX0lOOworCW15ICRyZXNwb25zZSA9IGRvIHtsb2NhbCAkLzsgPENITERfT1VUPn07CisKKwkjIFVuY29tbWVudCBmb3IgZGVidWdnaW5nIHRoZSB3YXRjaCByZXNwb25zZQorCSMgb3BlbiAoJGZoLCAiPiIsICIuZ2l0L3dhdGNobWFuLXJlc3BvbnNlLmpzb24iKTsKKwkjIHByaW50ICRmaCAkcmVzcG9uc2U7CisJIyBjbG9zZSAkZmg7CisKKwlkaWUgIldhdGNobWFuOiBjb21tYW5kIHJldHVybmVkIG5vIG91dHB1dC5cbiIgLgorCSJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiIgaWYgJHJlc3BvbnNlIGVxICIiOworCWRpZSAiV2F0Y2htYW46IGNvbW1hbmQgcmV0dXJuZWQgaW52YWxpZCBvdXRwdXQ6ICRyZXNwb25zZVxuIiAuCisJIkZhbGxpbmcgYmFjayB0byBzY2FubmluZy4uLlxuIiB1bmxlc3MgJHJlc3BvbnNlID1+IC9eXHsvOworCisJcmV0dXJuICRqc29uX3BrZy0+bmV3LT51dGY4LT5kZWNvZGUoJHJlc3BvbnNlKTsKK30KKworc3ViIGlzX3dvcmtfdHJlZV93YXRjaGVkIHsKKwlteSAoJG91dHB1dCkgPSBAXzsKKwlteSAkZXJyb3IgPSAkb3V0cHV0LT57ZXJyb3J9OworCWlmICgkcmV0cnkgPiAwIGFuZCAkZXJyb3IgYW5kICRlcnJvciA9fiBtL3VuYWJsZSB0byByZXNvbHZlIHJvb3QgLiogZGlyZWN0b3J5ICguKikgaXMgbm90IHdhdGNoZWQvKSB7CisJCSRyZXRyeS0tOworCQlteSAkcmVzcG9uc2UgPSBxeC93YXRjaG1hbiB3YXRjaCAiJGdpdF93b3JrX3RyZWUiLzsKKwkJZGllICJGYWlsZWQgdG8gbWFrZSB3YXRjaG1hbiB3YXRjaCAnJGdpdF93b3JrX3RyZWUnLlxuIiAuCisJCSAgICAiRmFsbGluZyBiYWNrIHRvIHNjYW5uaW5nLi4uXG4iIGlmICQ/ICE9IDA7CisJCSRvdXRwdXQgPSAkanNvbl9wa2ctPm5ldy0+dXRmOC0+ZGVjb2RlKCRyZXNwb25zZSk7CisJCSRlcnJvciA9ICRvdXRwdXQtPntlcnJvcn07CisJCWRpZSAiV2F0Y2htYW46ICRlcnJvci5cbiIgLgorCQkiRmFsbGluZyBiYWNrIHRvIHNjYW5uaW5nLi4uXG4iIGlmICRlcnJvcjsKKworCQkjIFVuY29tbWVudCBmb3IgZGVidWdnaW5nIHdhdGNobWFuIG91dHB1dAorCQkjIG9wZW4gKG15ICRmaCwgIj4iLCAiLmdpdC93YXRjaG1hbi1vdXRwdXQub3V0Iik7CisJCSMgY2xvc2UgJGZoOworCisJCSMgV2F0Y2htYW4gd2lsbCBhbHdheXMgcmV0dXJuIGFsbCBmaWxlcyBvbiB0aGUgZmlyc3QgcXVlcnkgc28KKwkJIyByZXR1cm4gdGhlIGZhc3QgImV2ZXJ5dGhpbmcgaXMgZGlydHkiIGZsYWcgdG8gZ2l0IGFuZCBkbyB0aGUKKwkJIyBXYXRjaG1hbiBxdWVyeSBqdXN0IHRvIGdldCBpdCBvdmVyIHdpdGggbm93IHNvIHdlIHdvbid0IHBheQorCQkjIHRoZSBjb3N0IGluIGdpdCB0byBsb29rIHVwIGVhY2ggaW5kaXZpZHVhbCBmaWxlLgorCQlteSAkbyA9IHdhdGNobWFuX2Nsb2NrKCk7CisJCSRlcnJvciA9ICRvdXRwdXQtPntlcnJvcn07CisKKwkJZGllICJXYXRjaG1hbjogJGVycm9yLlxuIiAuCisJCSJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiIgaWYgJGVycm9yOworCisJCW91dHB1dF9yZXN1bHQoJG8tPntjbG9ja30sICgiLyIpKTsKKwkJJGxhc3RfdXBkYXRlX3Rva2VuID0gJG8tPntjbG9ja307CisKKwkJZXZhbCB7IGxhdW5jaF93YXRjaG1hbigpIH07CisJCXJldHVybiAwOworCX0KKworCWRpZSAiV2F0Y2htYW46ICRlcnJvci5cbiIgLgorCSJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiIgaWYgJGVycm9yOworCisJcmV0dXJuIDE7Cit9CisKK3N1YiBnZXRfd29ya2luZ19kaXIgeworCW15ICR3b3JraW5nX2RpcjsKKwlpZiAoJF5PID1+ICdtc3lzJyB8fCAkXk8gPX4gJ2N5Z3dpbicpIHsKKwkJJHdvcmtpbmdfZGlyID0gV2luMzI6OkdldEN3ZCgpOworCQkkd29ya2luZ19kaXIgPX4gdHIvXFwvXC8vOworCX0gZWxzZSB7CisJCXJlcXVpcmUgQ3dkOworCQkkd29ya2luZ19kaXIgPSBDd2Q6OmN3ZCgpOworCX0KKworCXJldHVybiAkd29ya2luZ19kaXI7Cit9CmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvaG9va3MtLXBvc3QtdXBkYXRlLnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tcG9zdC11cGRhdGUuc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVjMTdlYzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wbGF0ZXMvaG9va3MtLXBvc3QtdXBkYXRlLnNhbXBsZQpAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorIworIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIHByZXBhcmUgYSBwYWNrZWQgcmVwb3NpdG9yeSBmb3IgdXNlIG92ZXIKKyMgZHVtYiB0cmFuc3BvcnRzLgorIworIyBUbyBlbmFibGUgdGhpcyBob29rLCByZW5hbWUgdGhpcyBmaWxlIHRvICJwb3N0LXVwZGF0ZSIuCisKK2V4ZWMgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbwpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1wcmUtYXBwbHlwYXRjaC5zYW1wbGUgYi90ZW1wbGF0ZXMvaG9va3MtLXByZS1hcHBseXBhdGNoLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MTQyMDgyCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS1wcmUtYXBwbHlwYXRjaC5zYW1wbGUKQEAgLTAsMCArMSwxNCBAQAorIyEvYmluL3NoCisjCisjIEFuIGV4YW1wbGUgaG9vayBzY3JpcHQgdG8gdmVyaWZ5IHdoYXQgaXMgYWJvdXQgdG8gYmUgY29tbWl0dGVkCisjIGJ5IGFwcGx5cGF0Y2ggZnJvbSBhbiBlLW1haWwgbWVzc2FnZS4KKyMKKyMgVGhlIGhvb2sgc2hvdWxkIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMgYWZ0ZXIgaXNzdWluZyBhbgorIyBhcHByb3ByaWF0ZSBtZXNzYWdlIGlmIGl0IHdhbnRzIHRvIHN0b3AgdGhlIGNvbW1pdC4KKyMKKyMgVG8gZW5hYmxlIHRoaXMgaG9vaywgcmVuYW1lIHRoaXMgZmlsZSB0byAicHJlLWFwcGx5cGF0Y2giLgorCisuIGdpdC1zaC1zZXR1cAorcHJlY29tbWl0PSIkKGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBob29rcy9wcmUtY29tbWl0KSIKK3Rlc3QgLXggIiRwcmVjb21taXQiICYmIGV4ZWMgIiRwcmVjb21taXQiICR7MSsiJEAifQorOgpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1wcmUtY29tbWl0LnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLWNvbW1pdC5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTE0NDcxMgotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLWNvbW1pdC5zYW1wbGUKQEAgLTAsMCArMSw0OSBAQAorIyEvYmluL3NoCisjCisjIEFuIGV4YW1wbGUgaG9vayBzY3JpcHQgdG8gdmVyaWZ5IHdoYXQgaXMgYWJvdXQgdG8gYmUgY29tbWl0dGVkLgorIyBDYWxsZWQgYnkgImdpdCBjb21taXQiIHdpdGggbm8gYXJndW1lbnRzLiAgVGhlIGhvb2sgc2hvdWxkCisjIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMgYWZ0ZXIgaXNzdWluZyBhbiBhcHByb3ByaWF0ZSBtZXNzYWdlIGlmCisjIGl0IHdhbnRzIHRvIHN0b3AgdGhlIGNvbW1pdC4KKyMKKyMgVG8gZW5hYmxlIHRoaXMgaG9vaywgcmVuYW1lIHRoaXMgZmlsZSB0byAicHJlLWNvbW1pdCIuCisKK2lmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKwlhZ2FpbnN0PUhFQUQKK2Vsc2UKKwkjIEluaXRpYWwgY29tbWl0OiBkaWZmIGFnYWluc3QgYW4gZW1wdHkgdHJlZSBvYmplY3QKKwlhZ2FpbnN0PSQoZ2l0IGhhc2gtb2JqZWN0IC10IHRyZWUgL2Rldi9udWxsKQorZmkKKworIyBJZiB5b3Ugd2FudCB0byBhbGxvdyBub24tQVNDSUkgZmlsZW5hbWVzIHNldCB0aGlzIHZhcmlhYmxlIHRvIHRydWUuCithbGxvd25vbmFzY2lpPSQoZ2l0IGNvbmZpZyAtLXR5cGU9Ym9vbCBob29rcy5hbGxvd25vbmFzY2lpKQorCisjIFJlZGlyZWN0IG91dHB1dCB0byBzdGRlcnIuCitleGVjIDE+JjIKKworIyBDcm9zcyBwbGF0Zm9ybSBwcm9qZWN0cyB0ZW5kIHRvIGF2b2lkIG5vbi1BU0NJSSBmaWxlbmFtZXM7IHByZXZlbnQKKyMgdGhlbSBmcm9tIGJlaW5nIGFkZGVkIHRvIHRoZSByZXBvc2l0b3J5LiBXZSBleHBsb2l0IHRoZSBmYWN0IHRoYXQgdGhlCisjIHByaW50YWJsZSByYW5nZSBzdGFydHMgYXQgdGhlIHNwYWNlIGNoYXJhY3RlciBhbmQgZW5kcyB3aXRoIHRpbGRlLgoraWYgWyAiJGFsbG93bm9uYXNjaWkiICE9ICJ0cnVlIiBdICYmCisJIyBOb3RlIHRoYXQgdGhlIHVzZSBvZiBicmFja2V0cyBhcm91bmQgYSB0ciByYW5nZSBpcyBvayBoZXJlLCAoaXQncworCSMgZXZlbiByZXF1aXJlZCwgZm9yIHBvcnRhYmlsaXR5IHRvIFNvbGFyaXMgMTAncyAvdXNyL2Jpbi90ciksIHNpbmNlCisJIyB0aGUgc3F1YXJlIGJyYWNrZXQgYnl0ZXMgaGFwcGVuIHRvIGZhbGwgaW4gdGhlIGRlc2lnbmF0ZWQgcmFuZ2UuCisJdGVzdCAkKGdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5IC0tZGlmZi1maWx0ZXI9QSAteiAkYWdhaW5zdCB8CisJICBMQ19BTEw9QyB0ciAtZCAnWyAtfl1cMCcgfCB3YyAtYykgIT0gMAordGhlbgorCWNhdCA8PFxFT0YKK0Vycm9yOiBBdHRlbXB0IHRvIGFkZCBhIG5vbi1BU0NJSSBmaWxlIG5hbWUuCisKK1RoaXMgY2FuIGNhdXNlIHByb2JsZW1zIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBwZW9wbGUgb24gb3RoZXIgcGxhdGZvcm1zLgorCitUbyBiZSBwb3J0YWJsZSBpdCBpcyBhZHZpc2FibGUgdG8gcmVuYW1lIHRoZSBmaWxlLgorCitJZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgeW91IGNhbiBkaXNhYmxlIHRoaXMgY2hlY2sgdXNpbmc6CisKKyAgZ2l0IGNvbmZpZyBob29rcy5hbGxvd25vbmFzY2lpIHRydWUKK0VPRgorCWV4aXQgMQorZmkKKworIyBJZiB0aGVyZSBhcmUgd2hpdGVzcGFjZSBlcnJvcnMsIHByaW50IHRoZSBvZmZlbmRpbmcgZmlsZSBuYW1lcyBhbmQgZmFpbC4KK2V4ZWMgZ2l0IGRpZmYtaW5kZXggLS1jaGVjayAtLWNhY2hlZCAkYWdhaW5zdCAtLQpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1wcmUtbWVyZ2UtY29tbWl0LnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLW1lcmdlLWNvbW1pdC5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzk5ZWFiMQotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLW1lcmdlLWNvbW1pdC5zYW1wbGUKQEAgLTAsMCArMSwxMyBAQAorIyEvYmluL3NoCisjCisjIEFuIGV4YW1wbGUgaG9vayBzY3JpcHQgdG8gdmVyaWZ5IHdoYXQgaXMgYWJvdXQgdG8gYmUgY29tbWl0dGVkLgorIyBDYWxsZWQgYnkgImdpdCBtZXJnZSIgd2l0aCBubyBhcmd1bWVudHMuICBUaGUgaG9vayBzaG91bGQKKyMgZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cyBhZnRlciBpc3N1aW5nIGFuIGFwcHJvcHJpYXRlIG1lc3NhZ2UgdG8KKyMgc3RkZXJyIGlmIGl0IHdhbnRzIHRvIHN0b3AgdGhlIG1lcmdlIGNvbW1pdC4KKyMKKyMgVG8gZW5hYmxlIHRoaXMgaG9vaywgcmVuYW1lIHRoaXMgZmlsZSB0byAicHJlLW1lcmdlLWNvbW1pdCIuCisKKy4gZ2l0LXNoLXNldHVwCit0ZXN0IC14ICIkR0lUX0RJUi9ob29rcy9wcmUtY29tbWl0IiAmJgorICAgICAgICBleGVjICIkR0lUX0RJUi9ob29rcy9wcmUtY29tbWl0IgorOgpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1wcmUtcHVzaC5zYW1wbGUgYi90ZW1wbGF0ZXMvaG9va3MtLXByZS1wdXNoLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MTg3ZGJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS1wcmUtcHVzaC5zYW1wbGUKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisKKyMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byB2ZXJpZnkgd2hhdCBpcyBhYm91dCB0byBiZSBwdXNoZWQuICBDYWxsZWQgYnkgImdpdAorIyBwdXNoIiBhZnRlciBpdCBoYXMgY2hlY2tlZCB0aGUgcmVtb3RlIHN0YXR1cywgYnV0IGJlZm9yZSBhbnl0aGluZyBoYXMgYmVlbgorIyBwdXNoZWQuICBJZiB0aGlzIHNjcmlwdCBleGl0cyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzIG5vdGhpbmcgd2lsbCBiZSBwdXNoZWQuCisjCisjIFRoaXMgaG9vayBpcyBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisjCisjICQxIC0tIE5hbWUgb2YgdGhlIHJlbW90ZSB0byB3aGljaCB0aGUgcHVzaCBpcyBiZWluZyBkb25lCisjICQyIC0tIFVSTCB0byB3aGljaCB0aGUgcHVzaCBpcyBiZWluZyBkb25lCisjCisjIElmIHB1c2hpbmcgd2l0aG91dCB1c2luZyBhIG5hbWVkIHJlbW90ZSB0aG9zZSBhcmd1bWVudHMgd2lsbCBiZSBlcXVhbC4KKyMKKyMgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbW1pdHMgd2hpY2ggYXJlIGJlaW5nIHB1c2hlZCBpcyBzdXBwbGllZCBhcyBsaW5lcyB0bworIyB0aGUgc3RhbmRhcmQgaW5wdXQgaW4gdGhlIGZvcm06CisjCisjICAgPGxvY2FsIHJlZj4gPGxvY2FsIHNoYTE+IDxyZW1vdGUgcmVmPiA8cmVtb3RlIHNoYTE+CisjCisjIFRoaXMgc2FtcGxlIHNob3dzIGhvdyB0byBwcmV2ZW50IHB1c2ggb2YgY29tbWl0cyB3aGVyZSB0aGUgbG9nIG1lc3NhZ2Ugc3RhcnRzCisjIHdpdGggIldJUCIgKHdvcmsgaW4gcHJvZ3Jlc3MpLgorCityZW1vdGU9IiQxIgordXJsPSIkMiIKKworejQwPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKword2hpbGUgcmVhZCBsb2NhbF9yZWYgbG9jYWxfc2hhIHJlbW90ZV9yZWYgcmVtb3RlX3NoYQorZG8KKwlpZiBbICIkbG9jYWxfc2hhIiA9ICR6NDAgXQorCXRoZW4KKwkJIyBIYW5kbGUgZGVsZXRlCisJCToKKwllbHNlCisJCWlmIFsgIiRyZW1vdGVfc2hhIiA9ICR6NDAgXQorCQl0aGVuCisJCQkjIE5ldyBicmFuY2gsIGV4YW1pbmUgYWxsIGNvbW1pdHMKKwkJCXJhbmdlPSIkbG9jYWxfc2hhIgorCQllbHNlCisJCQkjIFVwZGF0ZSB0byBleGlzdGluZyBicmFuY2gsIGV4YW1pbmUgbmV3IGNvbW1pdHMKKwkJCXJhbmdlPSIkcmVtb3RlX3NoYS4uJGxvY2FsX3NoYSIKKwkJZmkKKworCQkjIENoZWNrIGZvciBXSVAgY29tbWl0CisJCWNvbW1pdD1gZ2l0IHJldi1saXN0IC1uIDEgLS1ncmVwICdeV0lQJyAiJHJhbmdlImAKKwkJaWYgWyAtbiAiJGNvbW1pdCIgXQorCQl0aGVuCisJCQllY2hvID4mMiAiRm91bmQgV0lQIGNvbW1pdCBpbiAkbG9jYWxfcmVmLCBub3QgcHVzaGluZyIKKwkJCWV4aXQgMQorCQlmaQorCWZpCitkb25lCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1wcmUtcmViYXNlLnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLXJlYmFzZS5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGI1ZmVhYgotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLXJlYmFzZS5zYW1wbGUKQEAgLTAsMCArMSwxNjkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSnVuaW8gQyBIYW1hbm8KKyMKKyMgVGhlICJwcmUtcmViYXNlIiBob29rIGlzIHJ1biBqdXN0IGJlZm9yZSAiZ2l0IHJlYmFzZSIgc3RhcnRzIGRvaW5nCisjIGl0cyBqb2IsIGFuZCBjYW4gcHJldmVudCB0aGUgY29tbWFuZCBmcm9tIHJ1bm5pbmcgYnkgZXhpdGluZyB3aXRoCisjIG5vbi16ZXJvIHN0YXR1cy4KKyMKKyMgVGhlIGhvb2sgaXMgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorIworIyAkMSAtLSB0aGUgdXBzdHJlYW0gdGhlIHNlcmllcyB3YXMgZm9ya2VkIGZyb20uCisjICQyIC0tIHRoZSBicmFuY2ggYmVpbmcgcmViYXNlZCAob3IgZW1wdHkgd2hlbiByZWJhc2luZyB0aGUgY3VycmVudCBicmFuY2gpLgorIworIyBUaGlzIHNhbXBsZSBzaG93cyBob3cgdG8gcHJldmVudCB0b3BpYyBicmFuY2hlcyB0aGF0IGFyZSBhbHJlYWR5CisjIG1lcmdlZCB0byAnbmV4dCcgYnJhbmNoIGZyb20gZ2V0dGluZyByZWJhc2VkLCBiZWNhdXNlIGFsbG93aW5nIGl0CisjIHdvdWxkIHJlc3VsdCBpbiByZWJhc2luZyBhbHJlYWR5IHB1Ymxpc2hlZCBoaXN0b3J5LgorCitwdWJsaXNoPW5leHQKK2Jhc2VicmFuY2g9IiQxIgoraWYgdGVzdCAiJCMiID0gMgordGhlbgorCXRvcGljPSJyZWZzL2hlYWRzLyQyIgorZWxzZQorCXRvcGljPWBnaXQgc3ltYm9saWMtcmVmIEhFQURgIHx8CisJZXhpdCAwIDsjIHdlIGRvIG5vdCBpbnRlcnJ1cHQgcmViYXNpbmcgZGV0YWNoZWQgSEVBRAorZmkKKworY2FzZSAiJHRvcGljIiBpbgorcmVmcy9oZWFkcy8/Py8qKQorCTs7CisqKQorCWV4aXQgMCA7IyB3ZSBkbyBub3QgaW50ZXJydXB0IG90aGVycy4KKwk7OworZXNhYworCisjIE5vdyB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgdG9waWMgYnJhbmNoIGJlaW5nIHJlYmFzZWQKKyMgb24gdG9wIG9mIG1hc3Rlci4gIElzIGl0IE9LIHRvIHJlYmFzZSBpdD8KKworIyBEb2VzIHRoZSB0b3BpYyByZWFsbHkgZXhpc3Q/CitnaXQgc2hvdy1yZWYgLXEgIiR0b3BpYyIgfHwgeworCWVjaG8gPiYyICJObyBzdWNoIGJyYW5jaCAkdG9waWMiCisJZXhpdCAxCit9CisKKyMgSXMgdG9waWMgZnVsbHkgbWVyZ2VkIHRvIG1hc3Rlcj8KK25vdF9pbl9tYXN0ZXI9YGdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIF5tYXN0ZXIgIiR0b3BpYyJgCitpZiB0ZXN0IC16ICIkbm90X2luX21hc3RlciIKK3RoZW4KKwllY2hvID4mMiAiJHRvcGljIGlzIGZ1bGx5IG1lcmdlZCB0byBtYXN0ZXI7IGJldHRlciByZW1vdmUgaXQuIgorCWV4aXQgMSA7IyB3ZSBjb3VsZCBhbGxvdyBpdCwgYnV0IHRoZXJlIGlzIG5vIHBvaW50LgorZmkKKworIyBJcyB0b3BpYyBldmVyIG1lcmdlZCB0byBuZXh0PyAgSWYgc28geW91IHNob3VsZCBub3QgYmUgcmViYXNpbmcgaXQuCitvbmx5X25leHRfMT1gZ2l0IHJldi1saXN0IF5tYXN0ZXIgIl4kdG9waWMiICR7cHVibGlzaH0gfCBzb3J0YAorb25seV9uZXh0XzI9YGdpdCByZXYtbGlzdCBebWFzdGVyICAgICAgICAgICAke3B1Ymxpc2h9IHwgc29ydGAKK2lmIHRlc3QgIiRvbmx5X25leHRfMSIgPSAiJG9ubHlfbmV4dF8yIgordGhlbgorCW5vdF9pbl90b3BpYz1gZ2l0IHJldi1saXN0ICJeJHRvcGljIiBtYXN0ZXJgCisJaWYgdGVzdCAteiAiJG5vdF9pbl90b3BpYyIKKwl0aGVuCisJCWVjaG8gPiYyICIkdG9waWMgaXMgYWxyZWFkeSB1cCB0byBkYXRlIHdpdGggbWFzdGVyIgorCQlleGl0IDEgOyMgd2UgY291bGQgYWxsb3cgaXQsIGJ1dCB0aGVyZSBpcyBubyBwb2ludC4KKwllbHNlCisJCWV4aXQgMAorCWZpCitlbHNlCisJbm90X2luX25leHQ9YGdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIF4ke3B1Ymxpc2h9ICIkdG9waWMiYAorCUBQRVJMX1BBVEhAIC1lICcKKwkJbXkgJHRvcGljID0gJEFSR1ZbMF07CisJCW15ICRtc2cgPSAiKiAkdG9waWMgaGFzIGNvbW1pdHMgYWxyZWFkeSBtZXJnZWQgdG8gcHVibGljIGJyYW5jaDpcbiI7CisJCW15ICglbm90X2luX25leHQpID0gbWFwIHsKKwkJCS9eKFswLTlhLWZdKykgLzsKKwkJCSgkMSA9PiAxKTsKKwkJfSBzcGxpdCgvXG4vLCAkQVJHVlsxXSk7CisJCWZvciBteSAkZWxlbSAobWFwIHsKKwkJCQkvXihbMC05YS1mXSspICguKikkLzsKKwkJCQlbJDEgPT4gJDJdOworCQkJfSBzcGxpdCgvXG4vLCAkQVJHVlsyXSkpIHsKKwkJCWlmICghZXhpc3RzICRub3RfaW5fbmV4dHskZWxlbS0+WzBdfSkgeworCQkJCWlmICgkbXNnKSB7CisJCQkJCXByaW50IFNUREVSUiAkbXNnOworCQkJCQl1bmRlZiAkbXNnOworCQkJCX0KKwkJCQlwcmludCBTVERFUlIgIiAkZWxlbS0+WzFdXG4iOworCQkJfQorCQl9CisJJyAiJHRvcGljIiAiJG5vdF9pbl9uZXh0IiAiJG5vdF9pbl9tYXN0ZXIiCisJZXhpdCAxCitmaQorCis8PFxET0NfRU5ECisKK1RoaXMgc2FtcGxlIGhvb2sgc2FmZWd1YXJkcyB0b3BpYyBicmFuY2hlcyB0aGF0IGhhdmUgYmVlbgorcHVibGlzaGVkIGZyb20gYmVpbmcgcmV3b3VuZC4KKworVGhlIHdvcmtmbG93IGFzc3VtZWQgaGVyZSBpczoKKworICogT25jZSBhIHRvcGljIGJyYW5jaCBmb3JrcyBmcm9tICJtYXN0ZXIiLCAibWFzdGVyIiBpcyBuZXZlcgorICAgbWVyZ2VkIGludG8gaXQgYWdhaW4gKGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5KS4KKworICogT25jZSBhIHRvcGljIGJyYW5jaCBpcyBmdWxseSBjb29rZWQgYW5kIG1lcmdlZCBpbnRvICJtYXN0ZXIiLAorICAgaXQgaXMgZGVsZXRlZC4gIElmIHlvdSBuZWVkIHRvIGJ1aWxkIG9uIHRvcCBvZiBpdCB0byBjb3JyZWN0CisgICBlYXJsaWVyIG1pc3Rha2VzLCBhIG5ldyB0b3BpYyBicmFuY2ggaXMgY3JlYXRlZCBieSBmb3JraW5nIGF0CisgICB0aGUgdGlwIG9mIHRoZSAibWFzdGVyIi4gIFRoaXMgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0CisgICBpdCBtYWtlcyBpdCBlYXNpZXIgdG8ga2VlcCB5b3VyIGhpc3Rvcnkgc2ltcGxlLgorCisgKiBXaGVuZXZlciB5b3UgbmVlZCB0byB0ZXN0IG9yIHB1Ymxpc2ggeW91ciBjaGFuZ2VzIHRvIHRvcGljCisgICBicmFuY2hlcywgbWVyZ2UgdGhlbSBpbnRvICJuZXh0IiBicmFuY2guCisKK1RoZSBzY3JpcHQsIGJlaW5nIGFuIGV4YW1wbGUsIGhhcmRjb2RlcyB0aGUgcHVibGlzaCBicmFuY2ggbmFtZQordG8gYmUgIm5leHQiLCBidXQgaXQgaXMgdHJpdmlhbCB0byBtYWtlIGl0IGNvbmZpZ3VyYWJsZSB2aWEKKyRHSVRfRElSL2NvbmZpZyBtZWNoYW5pc20uCisKK1dpdGggdGhpcyB3b3JrZmxvdywgeW91IHdvdWxkIHdhbnQgdG8ga25vdzoKKworKDEpIC4uLiBpZiBhIHRvcGljIGJyYW5jaCBoYXMgZXZlciBiZWVuIG1lcmdlZCB0byAibmV4dCIuICBZb3VuZworICAgIHRvcGljIGJyYW5jaGVzIGNhbiBoYXZlIHN0dXBpZCBtaXN0YWtlcyB5b3Ugd291bGQgcmF0aGVyCisgICAgY2xlYW4gdXAgYmVmb3JlIHB1Ymxpc2hpbmcsIGFuZCB0aGluZ3MgdGhhdCBoYXZlIG5vdCBiZWVuCisgICAgbWVyZ2VkIGludG8gb3RoZXIgYnJhbmNoZXMgY2FuIGJlIGVhc2lseSByZWJhc2VkIHdpdGhvdXQKKyAgICBhZmZlY3Rpbmcgb3RoZXIgcGVvcGxlLiAgQnV0IG9uY2UgaXQgaXMgcHVibGlzaGVkLCB5b3Ugd291bGQKKyAgICBub3Qgd2FudCB0byByZXdpbmQgaXQuCisKKygyKSAuLi4gaWYgYSB0b3BpYyBicmFuY2ggaGFzIGJlZW4gZnVsbHkgbWVyZ2VkIHRvICJtYXN0ZXIiLgorICAgIFRoZW4geW91IGNhbiBkZWxldGUgaXQuICBNb3JlIGltcG9ydGFudGx5LCB5b3Ugc2hvdWxkIG5vdAorICAgIGJ1aWxkIG9uIHRvcCBvZiBpdCAtLSBvdGhlciBwZW9wbGUgbWF5IGFscmVhZHkgd2FudCB0bworICAgIGNoYW5nZSB0aGluZ3MgcmVsYXRlZCB0byB0aGUgdG9waWMgYXMgcGF0Y2hlcyBhZ2FpbnN0IHlvdXIKKyAgICAibWFzdGVyIiwgc28gaWYgeW91IG5lZWQgZnVydGhlciBjaGFuZ2VzLCBpdCBpcyBiZXR0ZXIgdG8KKyAgICBmb3JrIHRoZSB0b3BpYyAocGVyaGFwcyB3aXRoIHRoZSBzYW1lIG5hbWUpIGFmcmVzaCBmcm9tIHRoZQorICAgIHRpcCBvZiAibWFzdGVyIi4KKworTGV0J3MgbG9vayBhdCB0aGlzIGV4YW1wbGU6CisKKwkJICAgby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tbyAibmV4dCIKKwkJICAvICAgICAgIC8gICAgICAgICAgIC8gICAgICAgICAgIC8KKwkJIC8gICBhLS0tYS0tLWIgQSAgICAgLyAgICAgICAgICAgLworCQkvICAgLyAgICAgICAgICAgICAgIC8gICAgICAgICAgIC8KKwkgICAgICAgLyAgIC8gICBjLS0tYy0tLWMtLS1jIEIgICAgICAgICAvCisJICAgICAgLyAgIC8gICAvICAgICAgICAgICAgIFwgICAgICAgICAvCisJICAgICAvICAgLyAgIC8gICBiLS0tYiBDICAgICBcICAgICAgIC8KKwkgICAgLyAgIC8gICAvICAgLyAgICAgICAgICAgICBcICAgICAvCisgICAgLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8gIm1hc3RlciIKKworCitBLCBCIGFuZCBDIGFyZSB0b3BpYyBicmFuY2hlcy4KKworICogQSBoYXMgb25lIGZpeCBzaW5jZSBpdCB3YXMgbWVyZ2VkIHVwIHRvICJuZXh0Ii4KKworICogQiBoYXMgZmluaXNoZWQuICBJdCBoYXMgYmVlbiBmdWxseSBtZXJnZWQgdXAgdG8gIm1hc3RlciIgYW5kICJuZXh0IiwKKyAgIGFuZCBpcyByZWFkeSB0byBiZSBkZWxldGVkLgorCisgKiBDIGhhcyBub3QgbWVyZ2VkIHRvICJuZXh0IiBhdCBhbGwuCisKK1dlIHdvdWxkIHdhbnQgdG8gYWxsb3cgQyB0byBiZSByZWJhc2VkLCByZWZ1c2UgQSwgYW5kIGVuY291cmFnZQorQiB0byBiZSBkZWxldGVkLgorCitUbyBjb21wdXRlICgxKToKKworCWdpdCByZXYtbGlzdCBebWFzdGVyIF50b3BpYyBuZXh0CisJZ2l0IHJldi1saXN0IF5tYXN0ZXIgICAgICAgIG5leHQKKworCWlmIHRoZXNlIG1hdGNoLCB0b3BpYyBoYXMgbm90IG1lcmdlZCBpbiBuZXh0IGF0IGFsbC4KKworVG8gY29tcHV0ZSAoMik6CisKKwlnaXQgcmV2LWxpc3QgbWFzdGVyLi50b3BpYworCisJaWYgdGhpcyBpcyBlbXB0eSwgaXQgaXMgZnVsbHkgbWVyZ2VkIHRvICJtYXN0ZXIiLgorCitET0NfRU5ECmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvaG9va3MtLXByZS1yZWNlaXZlLnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLXJlY2VpdmUuc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmExZmQyOWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wbGF0ZXMvaG9va3MtLXByZS1yZWNlaXZlLnNhbXBsZQpAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMKKyMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byBtYWtlIHVzZSBvZiBwdXNoIG9wdGlvbnMuCisjIFRoZSBleGFtcGxlIHNpbXBseSBlY2hvZXMgYWxsIHB1c2ggb3B0aW9ucyB0aGF0IHN0YXJ0IHdpdGggJ2VjaG9iYWNrPScKKyMgYW5kIHJlamVjdHMgYWxsIHB1c2hlcyB3aGVuIHRoZSAicmVqZWN0IiBwdXNoIG9wdGlvbiBpcyB1c2VkLgorIworIyBUbyBlbmFibGUgdGhpcyBob29rLCByZW5hbWUgdGhpcyBmaWxlIHRvICJwcmUtcmVjZWl2ZSIuCisKK2lmIHRlc3QgLW4gIiRHSVRfUFVTSF9PUFRJT05fQ09VTlQiCit0aGVuCisJaT0wCisJd2hpbGUgdGVzdCAiJGkiIC1sdCAiJEdJVF9QVVNIX09QVElPTl9DT1VOVCIKKwlkbworCQlldmFsICJ2YWx1ZT1cJEdJVF9QVVNIX09QVElPTl8kaSIKKwkJY2FzZSAiJHZhbHVlIiBpbgorCQllY2hvYmFjaz0qKQorCQkJZWNobyAiZWNobyBmcm9tIHRoZSBwcmUtcmVjZWl2ZS1ob29rOiAke3ZhbHVlIyo9fSIgPiYyCisJCQk7OworCQlyZWplY3QpCisJCQlleGl0IDEKKwkJZXNhYworCQlpPSQoKGkgKyAxKSkKKwlkb25lCitmaQpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1wcmVwYXJlLWNvbW1pdC1tc2cuc2FtcGxlIGIvdGVtcGxhdGVzL2hvb2tzLS1wcmVwYXJlLWNvbW1pdC1tc2cuc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMxOGFmZTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wbGF0ZXMvaG9va3MtLXByZXBhcmUtY29tbWl0LW1zZy5zYW1wbGUKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisjCisjIEFuIGV4YW1wbGUgaG9vayBzY3JpcHQgdG8gcHJlcGFyZSB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLgorIyBDYWxsZWQgYnkgImdpdCBjb21taXQiIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBoYXMgdGhlCisjIGNvbW1pdCBtZXNzYWdlLCBmb2xsb3dlZCBieSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGNvbW1pdAorIyBtZXNzYWdlJ3Mgc291cmNlLiAgVGhlIGhvb2sncyBwdXJwb3NlIGlzIHRvIGVkaXQgdGhlIGNvbW1pdAorIyBtZXNzYWdlIGZpbGUuICBJZiB0aGUgaG9vayBmYWlscyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLAorIyB0aGUgY29tbWl0IGlzIGFib3J0ZWQuCisjCisjIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gInByZXBhcmUtY29tbWl0LW1zZyIuCisKKyMgVGhpcyBob29rIGluY2x1ZGVzIHRocmVlIGV4YW1wbGVzLiBUaGUgZmlyc3Qgb25lIHJlbW92ZXMgdGhlCisjICIjIFBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UuLi4iIGhlbHAgbWVzc2FnZS4KKyMKKyMgVGhlIHNlY29uZCBpbmNsdWRlcyB0aGUgb3V0cHV0IG9mICJnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIC1yIgorIyBpbnRvIHRoZSBtZXNzYWdlLCBqdXN0IGJlZm9yZSB0aGUgImdpdCBzdGF0dXMiIG91dHB1dC4gIEl0IGlzCisjIGNvbW1lbnRlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgY29wZSB3aXRoIC0tYW1lbmQgb3Igd2l0aCBzcXVhc2hlZAorIyBjb21taXRzLgorIworIyBUaGUgdGhpcmQgZXhhbXBsZSBhZGRzIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBtZXNzYWdlLCB0aGF0IGNhbgorIyBzdGlsbCBiZSBlZGl0ZWQuICBUaGlzIGlzIHJhcmVseSBhIGdvb2QgaWRlYS4KKworQ09NTUlUX01TR19GSUxFPSQxCitDT01NSVRfU09VUkNFPSQyCitTSEExPSQzCisKK0BQRVJMX1BBVEhAIC1pLmJhayAtbmUgJ3ByaW50IHVubGVzcyhtL14uIFBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UvLi5tL14jJC8pJyAiJENPTU1JVF9NU0dfRklMRSIKKworIyBjYXNlICIkQ09NTUlUX1NPVVJDRSwkU0hBMSIgaW4KKyMgICx8dGVtcGxhdGUsKQorIyAgICBAUEVSTF9QQVRIQCAtaS5iYWsgLXBlICcKKyMgICAgICAgcHJpbnQgIlxuIiAuIGBnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtc3RhdHVzIC1yYAorIyAJIGlmIC9eIy8gJiYgJGZpcnN0KysgPT0gMCcgIiRDT01NSVRfTVNHX0ZJTEUiIDs7CisjICAqKSA7OworIyBlc2FjCisKKyMgU09CPSQoZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UIHwgc2VkIC1uICdzL15cKC4qPlwpLiokL1NpZ25lZC1vZmYtYnk6IFwxL3AnKQorIyBnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0taW4tcGxhY2UgLS10cmFpbGVyICIkU09CIiAiJENPTU1JVF9NU0dfRklMRSIKKyMgaWYgdGVzdCAteiAiJENPTU1JVF9TT1VSQ0UiCisjIHRoZW4KKyMgICBAUEVSTF9QQVRIQCAtaS5iYWsgLXBlICdwcmludCAiXG4iIGlmICEkZmlyc3RfbGluZSsrJyAiJENPTU1JVF9NU0dfRklMRSIKKyMgZmkKZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy9ob29rcy0tdXBkYXRlLnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tdXBkYXRlLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MDE0YzRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS11cGRhdGUuc2FtcGxlCkBAIC0wLDAgKzEsMTI4IEBACisjIS9iaW4vc2gKKyMKKyMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byBibG9jayB1bmFubm90YXRlZCB0YWdzIGZyb20gZW50ZXJpbmcuCisjIENhbGxlZCBieSAiZ2l0IHJlY2VpdmUtcGFjayIgd2l0aCBhcmd1bWVudHM6IHJlZm5hbWUgc2hhMS1vbGQgc2hhMS1uZXcKKyMKKyMgVG8gZW5hYmxlIHRoaXMgaG9vaywgcmVuYW1lIHRoaXMgZmlsZSB0byAidXBkYXRlIi4KKyMKKyMgQ29uZmlnCisjIC0tLS0tLQorIyBob29rcy5hbGxvd3VuYW5ub3RhdGVkCisjICAgVGhpcyBib29sZWFuIHNldHMgd2hldGhlciB1bmFubm90YXRlZCB0YWdzIHdpbGwgYmUgYWxsb3dlZCBpbnRvIHRoZQorIyAgIHJlcG9zaXRvcnkuICBCeSBkZWZhdWx0IHRoZXkgd29uJ3QgYmUuCisjIGhvb2tzLmFsbG93ZGVsZXRldGFnCisjICAgVGhpcyBib29sZWFuIHNldHMgd2hldGhlciBkZWxldGluZyB0YWdzIHdpbGwgYmUgYWxsb3dlZCBpbiB0aGUKKyMgICByZXBvc2l0b3J5LiAgQnkgZGVmYXVsdCB0aGV5IHdvbid0IGJlLgorIyBob29rcy5hbGxvd21vZGlmeXRhZworIyAgIFRoaXMgYm9vbGVhbiBzZXRzIHdoZXRoZXIgYSB0YWcgbWF5IGJlIG1vZGlmaWVkIGFmdGVyIGNyZWF0aW9uLiBCeSBkZWZhdWx0CisjICAgaXQgd29uJ3QgYmUuCisjIGhvb2tzLmFsbG93ZGVsZXRlYnJhbmNoCisjICAgVGhpcyBib29sZWFuIHNldHMgd2hldGhlciBkZWxldGluZyBicmFuY2hlcyB3aWxsIGJlIGFsbG93ZWQgaW4gdGhlCisjICAgcmVwb3NpdG9yeS4gIEJ5IGRlZmF1bHQgdGhleSB3b24ndCBiZS4KKyMgaG9va3MuZGVueWNyZWF0ZWJyYW5jaAorIyAgIFRoaXMgYm9vbGVhbiBzZXRzIHdoZXRoZXIgcmVtb3RlbHkgY3JlYXRpbmcgYnJhbmNoZXMgd2lsbCBiZSBkZW5pZWQKKyMgICBpbiB0aGUgcmVwb3NpdG9yeS4gIEJ5IGRlZmF1bHQgdGhpcyBpcyBhbGxvd2VkLgorIworCisjIC0tLSBDb21tYW5kIGxpbmUKK3JlZm5hbWU9IiQxIgorb2xkcmV2PSIkMiIKK25ld3Jldj0iJDMiCisKKyMgLS0tIFNhZmV0eSBjaGVjaworaWYgWyAteiAiJEdJVF9ESVIiIF07IHRoZW4KKwllY2hvICJEb24ndCBydW4gdGhpcyBzY3JpcHQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiIgPiYyCisJZWNobyAiIChpZiB5b3Ugd2FudCwgeW91IGNvdWxkIHN1cHBseSBHSVRfRElSIHRoZW4gcnVuIiA+JjIKKwllY2hvICIgICQwIDxyZWY+IDxvbGRyZXY+IDxuZXdyZXY+KSIgPiYyCisJZXhpdCAxCitmaQorCitpZiBbIC16ICIkcmVmbmFtZSIgLW8gLXogIiRvbGRyZXYiIC1vIC16ICIkbmV3cmV2IiBdOyB0aGVuCisJZWNobyAidXNhZ2U6ICQwIDxyZWY+IDxvbGRyZXY+IDxuZXdyZXY+IiA+JjIKKwlleGl0IDEKK2ZpCisKKyMgLS0tIENvbmZpZworYWxsb3d1bmFubm90YXRlZD0kKGdpdCBjb25maWcgLS10eXBlPWJvb2wgaG9va3MuYWxsb3d1bmFubm90YXRlZCkKK2FsbG93ZGVsZXRlYnJhbmNoPSQoZ2l0IGNvbmZpZyAtLXR5cGU9Ym9vbCBob29rcy5hbGxvd2RlbGV0ZWJyYW5jaCkKK2RlbnljcmVhdGVicmFuY2g9JChnaXQgY29uZmlnIC0tdHlwZT1ib29sIGhvb2tzLmRlbnljcmVhdGVicmFuY2gpCithbGxvd2RlbGV0ZXRhZz0kKGdpdCBjb25maWcgLS10eXBlPWJvb2wgaG9va3MuYWxsb3dkZWxldGV0YWcpCithbGxvd21vZGlmeXRhZz0kKGdpdCBjb25maWcgLS10eXBlPWJvb2wgaG9va3MuYWxsb3dtb2RpZnl0YWcpCisKKyMgY2hlY2sgZm9yIG5vIGRlc2NyaXB0aW9uCitwcm9qZWN0ZGVzYz0kKHNlZCAtZSAnMXEnICIkR0lUX0RJUi9kZXNjcmlwdGlvbiIpCitjYXNlICIkcHJvamVjdGRlc2MiIGluCisiVW5uYW1lZCByZXBvc2l0b3J5IiogfCAiIikKKwllY2hvICIqKiogUHJvamVjdCBkZXNjcmlwdGlvbiBmaWxlIGhhc24ndCBiZWVuIHNldCIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworIyAtLS0gQ2hlY2sgdHlwZXMKKyMgaWYgJG5ld3JldiBpcyAwMDAwLi4uMDAwMCwgaXQncyBhIGNvbW1pdCB0byBkZWxldGUgYSByZWYuCit6ZXJvPSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgoraWYgWyAiJG5ld3JldiIgPSAiJHplcm8iIF07IHRoZW4KKwluZXdyZXZfdHlwZT1kZWxldGUKK2Vsc2UKKwluZXdyZXZfdHlwZT0kKGdpdCBjYXQtZmlsZSAtdCAkbmV3cmV2KQorZmkKKworY2FzZSAiJHJlZm5hbWUiLCIkbmV3cmV2X3R5cGUiIGluCisJcmVmcy90YWdzLyosY29tbWl0KQorCQkjIHVuLWFubm90YXRlZCB0YWcKKwkJc2hvcnRfcmVmbmFtZT0ke3JlZm5hbWUjI3JlZnMvdGFncy99CisJCWlmIFsgIiRhbGxvd3VuYW5ub3RhdGVkIiAhPSAidHJ1ZSIgXTsgdGhlbgorCQkJZWNobyAiKioqIFRoZSB1bi1hbm5vdGF0ZWQgdGFnLCAkc2hvcnRfcmVmbmFtZSwgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyByZXBvc2l0b3J5IiA+JjIKKwkJCWVjaG8gIioqKiBVc2UgJ2dpdCB0YWcgWyAtYSB8IC1zIF0nIGZvciB0YWdzIHlvdSB3YW50IHRvIHByb3BhZ2F0ZS4iID4mMgorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJcmVmcy90YWdzLyosZGVsZXRlKQorCQkjIGRlbGV0ZSB0YWcKKwkJaWYgWyAiJGFsbG93ZGVsZXRldGFnIiAhPSAidHJ1ZSIgXTsgdGhlbgorCQkJZWNobyAiKioqIERlbGV0aW5nIGEgdGFnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgcmVwb3NpdG9yeSIgPiYyCisJCQlleGl0IDEKKwkJZmkKKwkJOzsKKwlyZWZzL3RhZ3MvKix0YWcpCisJCSMgYW5ub3RhdGVkIHRhZworCQlpZiBbICIkYWxsb3dtb2RpZnl0YWciICE9ICJ0cnVlIiBdICYmIGdpdCByZXYtcGFyc2UgJHJlZm5hbWUgPiAvZGV2L251bGwgMj4mMQorCQl0aGVuCisJCQllY2hvICIqKiogVGFnICckcmVmbmFtZScgYWxyZWFkeSBleGlzdHMuIiA+JjIKKwkJCWVjaG8gIioqKiBNb2RpZnlpbmcgYSB0YWcgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyByZXBvc2l0b3J5LiIgPiYyCisJCQlleGl0IDEKKwkJZmkKKwkJOzsKKwlyZWZzL2hlYWRzLyosY29tbWl0KQorCQkjIGJyYW5jaAorCQlpZiBbICIkb2xkcmV2IiA9ICIkemVybyIgLWEgIiRkZW55Y3JlYXRlYnJhbmNoIiA9ICJ0cnVlIiBdOyB0aGVuCisJCQllY2hvICIqKiogQ3JlYXRpbmcgYSBicmFuY2ggaXMgbm90IGFsbG93ZWQgaW4gdGhpcyByZXBvc2l0b3J5IiA+JjIKKwkJCWV4aXQgMQorCQlmaQorCQk7OworCXJlZnMvaGVhZHMvKixkZWxldGUpCisJCSMgZGVsZXRlIGJyYW5jaAorCQlpZiBbICIkYWxsb3dkZWxldGVicmFuY2giICE9ICJ0cnVlIiBdOyB0aGVuCisJCQllY2hvICIqKiogRGVsZXRpbmcgYSBicmFuY2ggaXMgbm90IGFsbG93ZWQgaW4gdGhpcyByZXBvc2l0b3J5IiA+JjIKKwkJCWV4aXQgMQorCQlmaQorCQk7OworCXJlZnMvcmVtb3Rlcy8qLGNvbW1pdCkKKwkJIyB0cmFja2luZyBicmFuY2gKKwkJOzsKKwlyZWZzL3JlbW90ZXMvKixkZWxldGUpCisJCSMgZGVsZXRlIHRyYWNraW5nIGJyYW5jaAorCQlpZiBbICIkYWxsb3dkZWxldGVicmFuY2giICE9ICJ0cnVlIiBdOyB0aGVuCisJCQllY2hvICIqKiogRGVsZXRpbmcgYSB0cmFja2luZyBicmFuY2ggaXMgbm90IGFsbG93ZWQgaW4gdGhpcyByZXBvc2l0b3J5IiA+JjIKKwkJCWV4aXQgMQorCQlmaQorCQk7OworCSopCisJCSMgQW55dGhpbmcgZWxzZSAoaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8pCisJCWVjaG8gIioqKiBVcGRhdGUgaG9vazogdW5rbm93biB0eXBlIG9mIHVwZGF0ZSB0byByZWYgJHJlZm5hbWUgb2YgdHlwZSAkbmV3cmV2X3R5cGUiID4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworIyAtLS0gRmluaXNoZWQKK2V4aXQgMApkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2luZm8tLWV4Y2x1ZGUgYi90ZW1wbGF0ZXMvaW5mby0tZXhjbHVkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE5NmQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2luZm8tLWV4Y2x1ZGUKQEAgLTAsMCArMSw2IEBACisjIGdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGUtZnJvbT0uZ2l0L2luZm8vZXhjbHVkZQorIyBMaW5lcyB0aGF0IHN0YXJ0IHdpdGggJyMnIGFyZSBjb21tZW50cy4KKyMgRm9yIGEgcHJvamVjdCBtb3N0bHkgaW4gQywgdGhlIGZvbGxvd2luZyB3b3VsZCBiZSBhIGdvb2Qgc2V0IG9mCisjIGV4Y2x1ZGUgcGF0dGVybnMgKHVuY29tbWVudCB0aGVtIGlmIHlvdSB3YW50IHRvIHVzZSB0aGVtKToKKyMgKi5bb2FdCisjICp+CmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvdGhpcy0tZGVzY3JpcHRpb24gYi90ZW1wbGF0ZXMvdGhpcy0tZGVzY3JpcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk4YjI2NwotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBsYXRlcy90aGlzLS1kZXNjcmlwdGlvbgpAQCAtMCwwICsxIEBACitVbm5hbWVkIHJlcG9zaXRvcnk7IGVkaXQgdGhpcyBmaWxlICdkZXNjcmlwdGlvbicgdG8gbmFtZSB0aGUgcmVwb3NpdG9yeS4KZGlmZiAtLWdpdCBhL3RocmVhZC11dGlscy5jIGIvdGhyZWFkLXV0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMyOTg0NQotLS0gL2Rldi9udWxsCisrKyBiL3RocmVhZC11dGlscy5jCkBAIC0wLDAgKzEsMTI1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0aHJlYWQtdXRpbHMuaCIKKworI2lmIGRlZmluZWQoaHB1eCkgfHwgZGVmaW5lZChfX2hwdXgpIHx8IGRlZmluZWQoX2hwdXgpCisjICBpbmNsdWRlIDxzeXMvcHN0YXQuaD4KKyNlbmRpZgorCisvKgorICogQnkgZG9pbmcgdGhpcyBpbiB0d28gc3RlcHMgd2UgY2FuIGF0IGxlYXN0IGdldAorICogdGhlIGZ1bmN0aW9uIHRvIGJlIHNvbWV3aGF0IGNvaGVyZW50LCBldmVuCisgKiB3aXRoIHRoaXMgZGlzZ3VzdGluZyBuZXN0IG9mICNpZmRlZnMuCisgKi8KKyNpZm5kZWYgX1NDX05QUk9DRVNTT1JTX09OTE4KKyMgIGlmZGVmIF9TQ19OUFJPQ19PTkxOCisjICAgIGRlZmluZSBfU0NfTlBST0NFU1NPUlNfT05MTiBfU0NfTlBST0NfT05MTgorIyAgZWxpZiBkZWZpbmVkIF9TQ19DUkFZX05DUFUKKyMgICAgZGVmaW5lIF9TQ19OUFJPQ0VTU09SU19PTkxOIF9TQ19DUkFZX05DUFUKKyMgIGVuZGlmCisjZW5kaWYKKworaW50IG9ubGluZV9jcHVzKHZvaWQpCit7CisjaWZkZWYgTk9fUFRIUkVBRFMKKwlyZXR1cm4gMTsKKyNlbHNlCisjaWZkZWYgX1NDX05QUk9DRVNTT1JTX09OTE4KKwlsb25nIG5jcHVzOworI2VuZGlmCisKKyNpZmRlZiBHSVRfV0lORE9XU19OQVRJVkUKKwlTWVNURU1fSU5GTyBpbmZvOworCUdldFN5c3RlbUluZm8oJmluZm8pOworCisJaWYgKChpbnQpaW5mby5kd051bWJlck9mUHJvY2Vzc29ycyA+IDApCisJCXJldHVybiAoaW50KWluZm8uZHdOdW1iZXJPZlByb2Nlc3NvcnM7CisjZWxpZiBkZWZpbmVkKGhwdXgpIHx8IGRlZmluZWQoX19ocHV4KSB8fCBkZWZpbmVkKF9ocHV4KQorCXN0cnVjdCBwc3RfZHluYW1pYyBwc2Q7CisKKwlpZiAoIXBzdGF0X2dldGR5bmFtaWMoJnBzZCwgc2l6ZW9mKHBzZCksIChzaXplX3QpMSwgMCkpCisJCXJldHVybiAoaW50KXBzZC5wc2RfcHJvY19jbnQ7CisjZWxpZiBkZWZpbmVkKEhBVkVfQlNEX1NZU0NUTCkgJiYgZGVmaW5lZChIV19OQ1BVKQorCWludCBtaWJbMl07CisJc2l6ZV90IGxlbjsKKwlpbnQgY3B1Y291bnQ7CisKKwltaWJbMF0gPSBDVExfSFc7CisjICBpZmRlZiBIV19BVkFJTENQVQorCW1pYlsxXSA9IEhXX0FWQUlMQ1BVOworCWxlbiA9IHNpemVvZihjcHVjb3VudCk7CisJaWYgKCFzeXNjdGwobWliLCAyLCAmY3B1Y291bnQsICZsZW4sIE5VTEwsIDApKQorCQlyZXR1cm4gY3B1Y291bnQ7CisjICBlbmRpZiAvKiBIV19BVkFJTENQVSAqLworCW1pYlsxXSA9IEhXX05DUFU7CisJbGVuID0gc2l6ZW9mKGNwdWNvdW50KTsKKwlpZiAoIXN5c2N0bChtaWIsIDIsICZjcHVjb3VudCwgJmxlbiwgTlVMTCwgMCkpCisJCXJldHVybiBjcHVjb3VudDsKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfQlNEX1NZU0NUTCkgJiYgZGVmaW5lZChIV19OQ1BVKSAqLworCisjaWZkZWYgX1NDX05QUk9DRVNTT1JTX09OTE4KKwlpZiAoKG5jcHVzID0gKGxvbmcpc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTikpID4gMCkKKwkJcmV0dXJuIChpbnQpbmNwdXM7CisjZW5kaWYKKworCXJldHVybiAxOworI2VuZGlmCit9CisKK2ludCBpbml0X3JlY3Vyc2l2ZV9tdXRleChwdGhyZWFkX211dGV4X3QgKm0pCit7CisjaWZuZGVmIE5PX1BUSFJFQURTCisJcHRocmVhZF9tdXRleGF0dHJfdCBhOworCWludCByZXQ7CisKKwlyZXQgPSBwdGhyZWFkX211dGV4YXR0cl9pbml0KCZhKTsKKwlpZiAoIXJldCkgeworCQlyZXQgPSBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZhLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcHRocmVhZF9tdXRleF9pbml0KG0sICZhKTsKKwkJcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmYSk7CisJfQorCXJldHVybiByZXQ7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKKyNpZmRlZiBOT19QVEhSRUFEUworaW50IGR1bW15X3B0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqcHRocmVhZCwgY29uc3Qgdm9pZCAqYXR0ciwKKwkJCSB2b2lkICooKmZuKSh2b2lkICopLCB2b2lkICpkYXRhKQoreworCS8qCisJICogRG8gbm90aGluZy4KKwkgKgorCSAqIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBicmVhayBjb21waWxlcidzCisJICogZmxvdyBhbmFseXNpcyBhbmQgYXZvaWQgLVd1bnVzZWQtdmFyaWFibGUgZmFsc2Ugd2FybmluZ3MuCisJICovCisJcmV0dXJuIEVOT1NZUzsKK30KKworaW50IGR1bW15X3B0aHJlYWRfaW5pdCh2b2lkICpkYXRhKQoreworCS8qCisJICogRG8gbm90aGluZy4KKwkgKgorCSAqIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBicmVhayBjb21waWxlcidzCisJICogZmxvdyBhbmFseXNpcyBvciBpdCBtYXkgcmVhbGl6ZSB0aGF0IGZ1bmN0aW9ucyBsaWtlCisJICogcHRocmVhZF9tdXRleF9pbml0KCkgaXMgbm8tb3AsIHdoaWNoIG1lYW5zIHRoZSAoc3RhdGljKQorCSAqIHZhcmlhYmxlIGlzIG5vdCB1c2VkL2luaXRpYWxpemVkIGF0IGFsbCBhbmQgdHJpZ2dlcgorCSAqIC1XdW51c2VkLXZhcmlhYmxlCisJICovCisJcmV0dXJuIEVOT1NZUzsKK30KKworaW50IGR1bW15X3B0aHJlYWRfam9pbihwdGhyZWFkX3QgcHRocmVhZCwgdm9pZCAqKnJldHZhbCkKK3sKKwkvKgorCSAqIERvIG5vdGhpbmcuCisJICoKKwkgKiBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gYnJlYWsgY29tcGlsZXIncworCSAqIGZsb3cgYW5hbHlzaXMgYW5kIGF2b2lkIC1XdW51c2VkLXZhcmlhYmxlIGZhbHNlIHdhcm5pbmdzLgorCSAqLworCXJldHVybiBFTk9TWVM7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhyZWFkLXV0aWxzLmggYi90aHJlYWQtdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTYxNDg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhyZWFkLXV0aWxzLmgKQEAgLTAsMCArMSw1NyBAQAorI2lmbmRlZiBUSFJFQURfQ09NUEFUX0gKKyNkZWZpbmUgVEhSRUFEX0NPTVBBVF9ICisKKyNpZm5kZWYgTk9fUFRIUkVBRFMKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNkZWZpbmUgSEFWRV9USFJFQURTIDEKKworI2Vsc2UKKworI2RlZmluZSBIQVZFX1RIUkVBRFMgMAorCisvKgorICogbWFjcm9zIGluc3RlYWQgb2YgdHlwZWRlZnMgYmVjYXVzZSBwdGhyZWFkIGRlZmluaXRpb25zIG1heSBoYXZlCisgKiBiZWVuIHB1bGxlZCBpbiBieSBzb21lIHN5c3RlbSBkZXBlbmRlbmNpZXMgZXZlbiB0aG91Z2ggdGhlIHVzZXIKKyAqIHdhbnRzIHRvIGRpc2FibGUgcHRocmVhZC4KKyAqLworI2RlZmluZSBwdGhyZWFkX3QgaW50CisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfdCBpbnQKKyNkZWZpbmUgcHRocmVhZF9jb25kX3QgaW50CisjZGVmaW5lIHB0aHJlYWRfa2V5X3QgaW50CisKKyNkZWZpbmUgcHRocmVhZF9tdXRleF9pbml0KG11dGV4LCBhdHRyKSBkdW1teV9wdGhyZWFkX2luaXQobXV0ZXgpCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfbG9jayhtdXRleCkKKyNkZWZpbmUgcHRocmVhZF9tdXRleF91bmxvY2sobXV0ZXgpCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfZGVzdHJveShtdXRleCkKKworI2RlZmluZSBwdGhyZWFkX2NvbmRfaW5pdChjb25kLCBhdHRyKSBkdW1teV9wdGhyZWFkX2luaXQoY29uZCkKKyNkZWZpbmUgcHRocmVhZF9jb25kX3dhaXQoY29uZCwgbXV0ZXgpCisjZGVmaW5lIHB0aHJlYWRfY29uZF9zaWduYWwoY29uZCkKKyNkZWZpbmUgcHRocmVhZF9jb25kX2Jyb2FkY2FzdChjb25kKQorI2RlZmluZSBwdGhyZWFkX2NvbmRfZGVzdHJveShjb25kKQorCisjZGVmaW5lIHB0aHJlYWRfa2V5X2NyZWF0ZShrZXksIGF0dHIpIGR1bW15X3B0aHJlYWRfaW5pdChrZXkpCisjZGVmaW5lIHB0aHJlYWRfa2V5X2RlbGV0ZShrZXkpCisKKyNkZWZpbmUgcHRocmVhZF9jcmVhdGUodGhyZWFkLCBhdHRyLCBmbiwgZGF0YSkgXAorCWR1bW15X3B0aHJlYWRfY3JlYXRlKHRocmVhZCwgYXR0ciwgZm4sIGRhdGEpCisjZGVmaW5lIHB0aHJlYWRfam9pbih0aHJlYWQsIHJldHZhbCkgXAorCWR1bW15X3B0aHJlYWRfam9pbih0aHJlYWQsIHJldHZhbCkKKworI2RlZmluZSBwdGhyZWFkX3NldHNwZWNpZmljKGtleSwgZGF0YSkKKyNkZWZpbmUgcHRocmVhZF9nZXRzcGVjaWZpYyhrZXkpIE5VTEwKKworaW50IGR1bW15X3B0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqcHRocmVhZCwgY29uc3Qgdm9pZCAqYXR0ciwKKwkJCSB2b2lkICooKmZuKSh2b2lkICopLCB2b2lkICpkYXRhKTsKK2ludCBkdW1teV9wdGhyZWFkX2pvaW4ocHRocmVhZF90IHB0aHJlYWQsIHZvaWQgKipyZXR2YWwpOworCitpbnQgZHVtbXlfcHRocmVhZF9pbml0KHZvaWQgKik7CisKKyNlbmRpZgorCitpbnQgb25saW5lX2NwdXModm9pZCk7CitpbnQgaW5pdF9yZWN1cnNpdmVfbXV0ZXgocHRocmVhZF9tdXRleF90Kik7CisKKworI2VuZGlmIC8qIFRIUkVBRF9DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvdG1wLW9iamRpci5jIGIvdG1wLW9iamRpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYzAwNTYKLS0tIC9kZXYvbnVsbAorKysgYi90bXAtb2JqZGlyLmMKQEAgLTAsMCArMSwyOTIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRtcC1vYmpkaXIuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisKK3N0cnVjdCB0bXBfb2JqZGlyIHsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGg7CisJc3RydWN0IGFyZ3ZfYXJyYXkgZW52OworfTsKKworLyoKKyAqIEFsbG93IG9ubHkgb25lIHRtcF9vYmpkaXIgYXQgYSB0aW1lIGluIGEgcnVubmluZyBwcm9jZXNzLCB3aGljaCBzaW1wbGlmaWVzCisgKiBvdXIgc2lnbmFsL2F0ZXhpdCBjbGVhbnVwIHJvdXRpbmVzLiAgSXQncyBkb3VidGZ1bCBjYWxsZXJzIHdpbGwgZXZlciBuZWVkCisgKiBtb3JlIHRoYW4gb25lLCBhbmQgd2UgY2FuIGV4cGFuZCBsYXRlciBpZiBzby4gIFlvdSBjYW4gaGF2ZSBtYW55IHN1Y2gKKyAqIHRtcF9vYmpkaXJzIHNpbXVsdGFuZW91c2x5IGluIG1hbnkgcHJvY2Vzc2VzLCBvZiBjb3Vyc2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdG1wX29iamRpciAqdGhlX3RtcF9vYmpkaXI7CisKK3N0YXRpYyB2b2lkIHRtcF9vYmpkaXJfZnJlZShzdHJ1Y3QgdG1wX29iamRpciAqdCkKK3sKKwlzdHJidWZfcmVsZWFzZSgmdC0+cGF0aCk7CisJYXJndl9hcnJheV9jbGVhcigmdC0+ZW52KTsKKwlmcmVlKHQpOworfQorCitzdGF0aWMgaW50IHRtcF9vYmpkaXJfZGVzdHJveV8xKHN0cnVjdCB0bXBfb2JqZGlyICp0LCBpbnQgb25fc2lnbmFsKQoreworCWludCBlcnI7CisKKwlpZiAoIXQpCisJCXJldHVybiAwOworCisJaWYgKHQgPT0gdGhlX3RtcF9vYmpkaXIpCisJCXRoZV90bXBfb2JqZGlyID0gTlVMTDsKKworCS8qCisJICogVGhpcyBtYXkgdXNlIG1hbGxvYyB2aWEgc3RyYnVmX2dyb3coKSwgYnV0IHdlIHNob3VsZAorCSAqIGhhdmUgcHJlLWdyb3duIHQtPnBhdGggc3VmZmljaWVudGx5IHNvIHRoYXQgdGhpcworCSAqIGRvZXNuJ3QgaGFwcGVuIGluIHByYWN0aWNlLgorCSAqLworCWVyciA9IHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJnQtPnBhdGgsIDApOworCisJLyoKKwkgKiBXaGVuIHdlIGFyZSBjbGVhbmluZyB1cCBkdWUgdG8gYSBzaWduYWwsIHdlIHdvbid0IGJvdGhlcgorCSAqIGZyZWVpbmcgbWVtb3J5OyBpdCBtYXkgY2F1c2UgYSBkZWFkbG9jayBpZiB0aGUgc2lnbmFsCisJICogYXJyaXZlZCB3aGlsZSBsaWJjJ3MgYWxsb2NhdG9yIGxvY2sgaXMgaGVsZC4KKwkgKi8KKwlpZiAoIW9uX3NpZ25hbCkKKwkJdG1wX29iamRpcl9mcmVlKHQpOworCXJldHVybiBlcnI7Cit9CisKK2ludCB0bXBfb2JqZGlyX2Rlc3Ryb3koc3RydWN0IHRtcF9vYmpkaXIgKnQpCit7CisJcmV0dXJuIHRtcF9vYmpkaXJfZGVzdHJveV8xKHQsIDApOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfdG1wX29iamRpcih2b2lkKQoreworCXRtcF9vYmpkaXJfZGVzdHJveSh0aGVfdG1wX29iamRpcik7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV90bXBfb2JqZGlyX29uX3NpZ25hbChpbnQgc2lnbm8pCit7CisJdG1wX29iamRpcl9kZXN0cm95XzEodGhlX3RtcF9vYmpkaXIsIDEpOworCXNpZ2NoYWluX3BvcChzaWdubyk7CisJcmFpc2Uoc2lnbm8pOworfQorCisvKgorICogVGhlc2UgZW52XyogZnVuY3Rpb25zIGFyZSBmb3Igc2V0dGluZyB1cCB0aGUgY2hpbGQgZW52aXJvbm1lbnQ7IHRoZQorICogInJlcGxhY2UiIHZhcmlhbnQgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBvZiBhbnkgZXhpc3RpbmcgdmFyaWFibGUgd2l0aCB0aGF0CisgKiAia2V5Ii4gVGhlICJhcHBlbmQiIHZhcmlhbnQgcHV0cyBvdXIgbmV3IHZhbHVlIGF0IHRoZSBlbmQgb2YgYSBsaXN0LAorICogc2VwYXJhdGVkIGJ5IFBBVEhfU0VQICh3aGljaCBpcyB3aGF0IHNlcGFyYXRlIHZhbHVlcyBpbgorICogR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVMpLgorICovCitzdGF0aWMgdm9pZCBlbnZfYXBwZW5kKHN0cnVjdCBhcmd2X2FycmF5ICplbnYsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsKQoreworCXN0cnVjdCBzdHJidWYgcXVvdGVkID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqb2xkOworCisJLyoKKwkgKiBBdm9pZCBxdW90aW5nIGlmIGl0J3Mgbm90IG5lY2Vzc2FyeSwgZm9yIG1heGltdW0gY29tcGF0aWJpbGl0eQorCSAqIHdpdGggb2xkZXIgcGFyc2VycyB3aGljaCBkb24ndCB1bmRlcnN0YW5kIHRoZSBxdW90aW5nLgorCSAqLworCWlmICgqdmFsID09ICciJyB8fCBzdHJjaHIodmFsLCBQQVRIX1NFUCkpIHsKKwkJc3RyYnVmX2FkZGNoKCZxdW90ZWQsICciJyk7CisJCXF1b3RlX2Nfc3R5bGUodmFsLCAmcXVvdGVkLCBOVUxMLCAxKTsKKwkJc3RyYnVmX2FkZGNoKCZxdW90ZWQsICciJyk7CisJCXZhbCA9IHF1b3RlZC5idWY7CisJfQorCisJb2xkID0gZ2V0ZW52KGtleSk7CisJaWYgKCFvbGQpCisJCWFyZ3ZfYXJyYXlfcHVzaGYoZW52LCAiJXM9JXMiLCBrZXksIHZhbCk7CisJZWxzZQorCQlhcmd2X2FycmF5X3B1c2hmKGVudiwgIiVzPSVzJWMlcyIsIGtleSwgb2xkLCBQQVRIX1NFUCwgdmFsKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZxdW90ZWQpOworfQorCitzdGF0aWMgdm9pZCBlbnZfcmVwbGFjZShzdHJ1Y3QgYXJndl9hcnJheSAqZW52LCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbCkKK3sKKwlhcmd2X2FycmF5X3B1c2hmKGVudiwgIiVzPSVzIiwga2V5LCB2YWwpOworfQorCitzdGF0aWMgaW50IHNldHVwX3RtcF9vYmpkaXIoY29uc3QgY2hhciAqcm9vdCkKK3sKKwljaGFyICpwYXRoOworCWludCByZXQgPSAwOworCisJcGF0aCA9IHhzdHJmbXQoIiVzL3BhY2siLCByb290KTsKKwlyZXQgPSBta2RpcihwYXRoLCAwNzc3KTsKKwlmcmVlKHBhdGgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHRtcF9vYmpkaXIgKnRtcF9vYmpkaXJfY3JlYXRlKHZvaWQpCit7CisJc3RhdGljIGludCBpbnN0YWxsZWRfaGFuZGxlcnM7CisJc3RydWN0IHRtcF9vYmpkaXIgKnQ7CisKKwlpZiAodGhlX3RtcF9vYmpkaXIpCisJCUJVRygib25seSBvbmUgdG1wX29iamRpciBjYW4gYmUgdXNlZCBhdCBhIHRpbWUiKTsKKworCXQgPSB4bWFsbG9jKHNpemVvZigqdCkpOworCXN0cmJ1Zl9pbml0KCZ0LT5wYXRoLCAwKTsKKwlhcmd2X2FycmF5X2luaXQoJnQtPmVudik7CisKKwlzdHJidWZfYWRkZigmdC0+cGF0aCwgIiVzL2luY29taW5nLVhYWFhYWCIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCisJLyoKKwkgKiBHcm93IHRoZSBzdHJidWYgYmV5b25kIGFueSBmaWxlbmFtZSB3ZSBleHBlY3QgdG8gYmUgcGxhY2VkIGluIGl0LgorCSAqIElmIHRtcF9vYmpkaXJfZGVzdHJveSgpIGlzIGNhbGxlZCBieSBhIHNpZ25hbCBoYW5kbGVyLCB0aGVuCisJICogd2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHRoZSBzdHJidWYgdG8gcmVtb3ZlIGZpbGVzIHdpdGhvdXQKKwkgKiBoYXZpbmcgdG8gY2FsbCBtYWxsb2MuCisJICovCisJc3RyYnVmX2dyb3coJnQtPnBhdGgsIDEwMjQpOworCisJaWYgKCFta2R0ZW1wKHQtPnBhdGguYnVmKSkgeworCQkvKiBmcmVlLCBub3QgZGVzdHJveSwgYXMgd2UgbmV2ZXIgdG91Y2hlZCB0aGUgZmlsZXN5c3RlbSAqLworCQl0bXBfb2JqZGlyX2ZyZWUodCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXRoZV90bXBfb2JqZGlyID0gdDsKKwlpZiAoIWluc3RhbGxlZF9oYW5kbGVycykgeworCQlhdGV4aXQocmVtb3ZlX3RtcF9vYmpkaXIpOworCQlzaWdjaGFpbl9wdXNoX2NvbW1vbihyZW1vdmVfdG1wX29iamRpcl9vbl9zaWduYWwpOworCQlpbnN0YWxsZWRfaGFuZGxlcnMrKzsKKwl9CisKKwlpZiAoc2V0dXBfdG1wX29iamRpcih0LT5wYXRoLmJ1ZikpIHsKKwkJdG1wX29iamRpcl9kZXN0cm95KHQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwllbnZfYXBwZW5kKCZ0LT5lbnYsIEFMVEVSTkFURV9EQl9FTlZJUk9OTUVOVCwKKwkJICAgYWJzb2x1dGVfcGF0aChnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKSk7CisJZW52X3JlcGxhY2UoJnQtPmVudiwgREJfRU5WSVJPTk1FTlQsIGFic29sdXRlX3BhdGgodC0+cGF0aC5idWYpKTsKKwllbnZfcmVwbGFjZSgmdC0+ZW52LCBHSVRfUVVBUkFOVElORV9FTlZJUk9OTUVOVCwKKwkJICAgIGFic29sdXRlX3BhdGgodC0+cGF0aC5idWYpKTsKKworCXJldHVybiB0OworfQorCisvKgorICogTWFrZSBzdXJlIHdlIGNvcHkgcGFja2ZpbGVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIG1ldGFmaWxlcyBpbiB0aGUgY29ycmVjdAorICogb3JkZXIuIEFsbCBvZiB0aGVzZSBlbmRzX3dpdGggY2hlY2tzIGFyZSBzbGlnaHRseSBleHBlbnNpdmUgdG8gZG8gaW4KKyAqIHRoZSBtaWRzdCBvZiBhIHNvcnRpbmcgcm91dGluZSwgYnV0IGluIHByYWN0aWNlIGl0IHNob3VsZG4ndCBtYXR0ZXIuCisgKiBXZSB3aWxsIGhhdmUgYSByZWxhdGl2ZWx5IHNtYWxsIG51bWJlciBvZiBwYWNrZmlsZXMgdG8gb3JkZXIsIGFuZCBsb29zZQorICogb2JqZWN0cyBleGl0IGVhcmx5IGluIHRoZSBmaXJzdCBsaW5lLgorICovCitzdGF0aWMgaW50IHBhY2tfY29weV9wcmlvcml0eShjb25zdCBjaGFyICpuYW1lKQoreworCWlmICghc3RhcnRzX3dpdGgobmFtZSwgInBhY2siKSkKKwkJcmV0dXJuIDA7CisJaWYgKGVuZHNfd2l0aChuYW1lLCAiLmtlZXAiKSkKKwkJcmV0dXJuIDE7CisJaWYgKGVuZHNfd2l0aChuYW1lLCAiLnBhY2siKSkKKwkJcmV0dXJuIDI7CisJaWYgKGVuZHNfd2l0aChuYW1lLCAiLmlkeCIpKQorCQlyZXR1cm4gMzsKKwlyZXR1cm4gNDsKK30KKworc3RhdGljIGludCBwYWNrX2NvcHlfY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJcmV0dXJuIHBhY2tfY29weV9wcmlvcml0eShhKSAtIHBhY2tfY29weV9wcmlvcml0eShiKTsKK30KKworc3RhdGljIGludCByZWFkX2Rpcl9wYXRocyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm91dCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlESVIgKmRoOworCXN0cnVjdCBkaXJlbnQgKmRlOworCisJZGggPSBvcGVuZGlyKHBhdGgpOworCWlmICghZGgpCisJCXJldHVybiAtMTsKKworCXdoaWxlICgoZGUgPSByZWFkZGlyKGRoKSkpCisJCWlmIChkZS0+ZF9uYW1lWzBdICE9ICcuJykKKwkJCXN0cmluZ19saXN0X2FwcGVuZChvdXQsIGRlLT5kX25hbWUpOworCisJY2xvc2VkaXIoZGgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pZ3JhdGVfcGF0aHMoc3RydWN0IHN0cmJ1ZiAqc3JjLCBzdHJ1Y3Qgc3RyYnVmICpkc3QpOworCitzdGF0aWMgaW50IG1pZ3JhdGVfb25lKHN0cnVjdCBzdHJidWYgKnNyYywgc3RydWN0IHN0cmJ1ZiAqZHN0KQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKHN0YXQoc3JjLT5idWYsICZzdCkgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJaWYgKCFta2Rpcihkc3QtPmJ1ZiwgMDc3NykpIHsKKwkJCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0oZHN0LT5idWYpKQorCQkJCXJldHVybiAtMTsKKwkJfSBlbHNlIGlmIChlcnJubyAhPSBFRVhJU1QpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiBtaWdyYXRlX3BhdGhzKHNyYywgZHN0KTsKKwl9CisJcmV0dXJuIGZpbmFsaXplX29iamVjdF9maWxlKHNyYy0+YnVmLCBkc3QtPmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgbWlncmF0ZV9wYXRocyhzdHJ1Y3Qgc3RyYnVmICpzcmMsIHN0cnVjdCBzdHJidWYgKmRzdCkKK3sKKwlzaXplX3Qgc3JjX2xlbiA9IHNyYy0+bGVuLCBkc3RfbGVuID0gZHN0LT5sZW47CisJc3RydWN0IHN0cmluZ19saXN0IHBhdGhzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJaW50IGk7CisJaW50IHJldCA9IDA7CisKKwlpZiAocmVhZF9kaXJfcGF0aHMoJnBhdGhzLCBzcmMtPmJ1ZikgPCAwKQorCQlyZXR1cm4gLTE7CisJcGF0aHMuY21wID0gcGFja19jb3B5X2NtcDsKKwlzdHJpbmdfbGlzdF9zb3J0KCZwYXRocyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGF0aHMubnI7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gcGF0aHMuaXRlbXNbaV0uc3RyaW5nOworCisJCXN0cmJ1Zl9hZGRmKHNyYywgIi8lcyIsIG5hbWUpOworCQlzdHJidWZfYWRkZihkc3QsICIvJXMiLCBuYW1lKTsKKworCQlyZXQgfD0gbWlncmF0ZV9vbmUoc3JjLCBkc3QpOworCisJCXN0cmJ1Zl9zZXRsZW4oc3JjLCBzcmNfbGVuKTsKKwkJc3RyYnVmX3NldGxlbihkc3QsIGRzdF9sZW4pOworCX0KKworCXN0cmluZ19saXN0X2NsZWFyKCZwYXRocywgMCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHRtcF9vYmpkaXJfbWlncmF0ZShzdHJ1Y3QgdG1wX29iamRpciAqdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNyYyA9IFNUUkJVRl9JTklULCBkc3QgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJaWYgKCF0KQorCQlyZXR1cm4gMDsKKworCXN0cmJ1Zl9hZGRidWYoJnNyYywgJnQtPnBhdGgpOworCXN0cmJ1Zl9hZGRzdHIoJmRzdCwgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CisKKwlyZXQgPSBtaWdyYXRlX3BhdGhzKCZzcmMsICZkc3QpOworCisJc3RyYnVmX3JlbGVhc2UoJnNyYyk7CisJc3RyYnVmX3JlbGVhc2UoJmRzdCk7CisKKwl0bXBfb2JqZGlyX2Rlc3Ryb3kodCk7CisJcmV0dXJuIHJldDsKK30KKworY29uc3QgY2hhciAqKnRtcF9vYmpkaXJfZW52KGNvbnN0IHN0cnVjdCB0bXBfb2JqZGlyICp0KQoreworCWlmICghdCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHQtPmVudi5hcmd2OworfQorCit2b2lkIHRtcF9vYmpkaXJfYWRkX2FzX2FsdGVybmF0ZShjb25zdCBzdHJ1Y3QgdG1wX29iamRpciAqdCkKK3sKKwlhZGRfdG9fYWx0ZXJuYXRlc19tZW1vcnkodC0+cGF0aC5idWYpOworfQpkaWZmIC0tZ2l0IGEvdG1wLW9iamRpci5oIGIvdG1wLW9iamRpci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZTQ1YjQKLS0tIC9kZXYvbnVsbAorKysgYi90bXAtb2JqZGlyLmgKQEAgLTAsMCArMSw1NCBAQAorI2lmbmRlZiBUTVBfT0JKRElSX0gKKyNkZWZpbmUgVE1QX09CSkRJUl9ICisKKy8qCisgKiBUaGlzIEFQSSBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBvYmplY3QgZGlyZWN0b3J5LCBhZHZlcnRpc2UgaXQgdG8KKyAqIHN1Yi1wcm9jZXNzZXMgdmlhIEdJVF9PQkpFQ1RfRElSRUNUT1JZIGFuZCBHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUywKKyAqIGFuZCB0aGVuIGVpdGhlciBtaWdyYXRlIGl0cyBvYmplY3QgaW50byB0aGUgbWFpbiBvYmplY3QgZGlyZWN0b3J5LCBvciByZW1vdmUKKyAqIGl0LiBUaGUgbGlicmFyeSBoYW5kbGVzIHVuZXhwZWN0ZWQgc2lnbmFsL2V4aXQgZGVhdGggYnkgY2xlYW5pbmcgdXAgdGhlCisgKiB0ZW1wb3JhcnkgZGlyZWN0b3J5LgorICoKKyAqIEV4YW1wbGU6CisgKgorICoJc3RydWN0IHRtcF9vYmpkaXIgKnQgPSB0bXBfb2JqZGlyX2NyZWF0ZSgpOworICoJaWYgKCFydW5fY29tbWFuZF92X29wdF9jZF9lbnYoY21kLCAwLCBOVUxMLCB0bXBfb2JqZGlyX2Vudih0KSkgJiYKKyAqCSAgICAhdG1wX29iamRpcl9taWdyYXRlKHQpKQorICoJCXByaW50Zigic3VjY2VzcyFcbiIpOworICoJZWxzZQorICoJCWRpZSgiZmFpbGVkLi4udG1wX29iamRpciB3aWxsIGNsZWFuIHVwIGZvciB1cyIpOworICoKKyAqLworCitzdHJ1Y3QgdG1wX29iamRpcjsKKworLyoKKyAqIENyZWF0ZSBhIG5ldyB0ZW1wb3Jhcnkgb2JqZWN0IGRpcmVjdG9yeTsgcmV0dXJucyBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCB0bXBfb2JqZGlyICp0bXBfb2JqZGlyX2NyZWF0ZSh2b2lkKTsKKworLyoKKyAqIFJldHVybiBhIGxpc3Qgb2YgZW52aXJvbm1lbnQgc3RyaW5ncywgc3VpdGFibGUgZm9yIHVzZSB3aXRoCisgKiBjaGlsZF9wcm9jZXNzLmVudiwgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGNoaWxkIHByb2dyYW1zIHRvIG1ha2UgdXNlIG9mIHRoZQorICogdGVtcG9yYXJ5IG9iamVjdCBkaXJlY3RvcnkuCisgKi8KK2NvbnN0IGNoYXIgKip0bXBfb2JqZGlyX2Vudihjb25zdCBzdHJ1Y3QgdG1wX29iamRpciAqKTsKKworLyoKKyAqIEZpbmFsaXplIGEgdGVtcG9yYXJ5IG9iamVjdCBkaXJlY3RvcnkgYnkgbWlncmF0aW5nIGl0cyBvYmplY3RzIGludG8gdGhlIG1haW4KKyAqIG9iamVjdCBkYXRhYmFzZSwgcmVtb3ZpbmcgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnksIGFuZCBmcmVlaW5nIGFueQorICogYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgKi8KK2ludCB0bXBfb2JqZGlyX21pZ3JhdGUoc3RydWN0IHRtcF9vYmpkaXIgKik7CisKKy8qCisgKiBEZXN0cm95IGEgdGVtcG9yYXJ5IG9iamVjdCBkaXJlY3RvcnksIGRpc2NhcmRpbmcgYW55IG9iamVjdHMgaXQgY29udGFpbnMuCisgKi8KK2ludCB0bXBfb2JqZGlyX2Rlc3Ryb3koc3RydWN0IHRtcF9vYmpkaXIgKik7CisKKy8qCisgKiBBZGQgdGhlIHRlbXBvcmFyeSBvYmplY3QgZGlyZWN0b3J5IGFzIGFuIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUgaW4gdGhlCisgKiBjdXJyZW50IHByb2Nlc3MuCisgKi8KK3ZvaWQgdG1wX29iamRpcl9hZGRfYXNfYWx0ZXJuYXRlKGNvbnN0IHN0cnVjdCB0bXBfb2JqZGlyICopOworCisjZW5kaWYgLyogVE1QX09CSkRJUl9IICovCmRpZmYgLS1naXQgYS90cmFjZS5jIGIvdHJhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2VmMGU2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UuYwpAQCAtMCwwICsxLDQ4OSBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIE1pY2hhZWwgUi4gRWxraW5zIDxtZUBtdXR0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA0IE9zd2FsZCBCdWRkZW5oYWdlbiA8b3NzaUB1c2Vycy5zZi5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWtlIE1jQ29ybWFjaworICogQ29weXJpZ2h0IChDKSAyMDA2IENocmlzdGlhbiBDb3VkZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisKK3N0cnVjdCB0cmFjZV9rZXkgdHJhY2VfZGVmYXVsdF9rZXkgPSB7ICJHSVRfVFJBQ0UiLCAwLCAwLCAwIH07CitzdHJ1Y3QgdHJhY2Vfa2V5IHRyYWNlX3BlcmZfa2V5ID0gVFJBQ0VfS0VZX0lOSVQoUEVSRk9STUFOQ0UpOworc3RydWN0IHRyYWNlX2tleSB0cmFjZV9zZXR1cF9rZXkgPSBUUkFDRV9LRVlfSU5JVChTRVRVUCk7CisKKy8qIEdldCBhIHRyYWNlIGZpbGUgZGVzY3JpcHRvciBmcm9tICJrZXkiIGVudiB2YXJpYWJsZS4gKi8KK3N0YXRpYyBpbnQgZ2V0X3RyYWNlX2ZkKHN0cnVjdCB0cmFjZV9rZXkgKmtleSkKK3sKKwljb25zdCBjaGFyICp0cmFjZTsKKworCS8qIGRvbid0IG9wZW4gdHdpY2UgKi8KKwlpZiAoa2V5LT5pbml0aWFsaXplZCkKKwkJcmV0dXJuIGtleS0+ZmQ7CisKKwl0cmFjZSA9IGdldGVudihrZXktPmtleSk7CisKKwlpZiAoIXRyYWNlIHx8ICFzdHJjbXAodHJhY2UsICIiKSB8fAorCSAgICAhc3RyY21wKHRyYWNlLCAiMCIpIHx8ICFzdHJjYXNlY21wKHRyYWNlLCAiZmFsc2UiKSkKKwkJa2V5LT5mZCA9IDA7CisJZWxzZSBpZiAoIXN0cmNtcCh0cmFjZSwgIjEiKSB8fCAhc3RyY2FzZWNtcCh0cmFjZSwgInRydWUiKSkKKwkJa2V5LT5mZCA9IFNUREVSUl9GSUxFTk87CisJZWxzZSBpZiAoc3RybGVuKHRyYWNlKSA9PSAxICYmIGlzZGlnaXQoKnRyYWNlKSkKKwkJa2V5LT5mZCA9IGF0b2kodHJhY2UpOworCWVsc2UgaWYgKGlzX2Fic29sdXRlX3BhdGgodHJhY2UpKSB7CisJCWludCBmZCA9IG9wZW4odHJhY2UsIE9fV1JPTkxZIHwgT19BUFBFTkQgfCBPX0NSRUFULCAwNjY2KTsKKwkJaWYgKGZkID09IC0xKSB7CisJCQl3YXJuaW5nKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB0cmFjaW5nOiAlcyIsCisJCQkJdHJhY2UsIHN0cmVycm9yKGVycm5vKSk7CisJCQl0cmFjZV9kaXNhYmxlKGtleSk7CisJCX0gZWxzZSB7CisJCQlrZXktPmZkID0gZmQ7CisJCQlrZXktPm5lZWRfY2xvc2UgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJd2FybmluZygidW5rbm93biB0cmFjZSB2YWx1ZSBmb3IgJyVzJzogJXNcbiIKKwkJCSIgICAgICAgICBJZiB5b3Ugd2FudCB0byB0cmFjZSBpbnRvIGEgZmlsZSwgdGhlbiBwbGVhc2Ugc2V0ICVzXG4iCisJCQkiICAgICAgICAgdG8gYW4gYWJzb2x1dGUgcGF0aG5hbWUgKHN0YXJ0aW5nIHdpdGggLykiLAorCQkJa2V5LT5rZXksIHRyYWNlLCBrZXktPmtleSk7CisJCXRyYWNlX2Rpc2FibGUoa2V5KTsKKwl9CisKKwlrZXktPmluaXRpYWxpemVkID0gMTsKKwlyZXR1cm4ga2V5LT5mZDsKK30KKwordm9pZCB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0cmFjZV9rZXkgKmtleSkKK3sKKwlpZiAoa2V5LT5uZWVkX2Nsb3NlKQorCQljbG9zZShrZXktPmZkKTsKKwlrZXktPmZkID0gMDsKKwlrZXktPmluaXRpYWxpemVkID0gMTsKKwlrZXktPm5lZWRfY2xvc2UgPSAwOworfQorCitzdGF0aWMgaW50IHByZXBhcmVfdHJhY2VfbGluZShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCSAgICAgIHN0cnVjdCB0cmFjZV9rZXkgKmtleSwgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCXN0YXRpYyBzdHJ1Y3QgdHJhY2Vfa2V5IHRyYWNlX2JhcmUgPSBUUkFDRV9LRVlfSU5JVChCQVJFKTsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwlzdHJ1Y3QgdG0gdG07CisJdGltZV90IHNlY3M7CisKKwlpZiAoIXRyYWNlX3dhbnQoa2V5KSkKKwkJcmV0dXJuIDA7CisKKwkvKiB1bml0IHRlc3RzIG1heSB3YW50IHRvIGRpc2FibGUgYWRkaXRpb25hbCB0cmFjZSBvdXRwdXQgKi8KKwlpZiAodHJhY2Vfd2FudCgmdHJhY2VfYmFyZSkpCisJCXJldHVybiAxOworCisJLyogcHJpbnQgY3VycmVudCB0aW1lc3RhbXAgKi8KKwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwlzZWNzID0gdHYudHZfc2VjOworCWxvY2FsdGltZV9yKCZzZWNzLCAmdG0pOworCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUwMmQ6JTAyZDolMDJkLiUwNmxkICIsIHRtLnRtX2hvdXIsIHRtLnRtX21pbiwKKwkJICAgIHRtLnRtX3NlYywgKGxvbmcpIHR2LnR2X3VzZWMpOworCisjaWZkZWYgSEFWRV9WQVJJQURJQ19NQUNST1MKKwkvKiBwcmludCBmaWxlOmxpbmUgKi8KKwlzdHJidWZfYWRkZihidWYsICIlczolZCAiLCBmaWxlLCBsaW5lKTsKKwkvKiBhbGlnbiB0cmFjZSBvdXRwdXQgKGNvbHVtbiA0MCBjYXRjaGVzIG1vc3QgZmlsZXMgbmFtZXMgaW4gZ2l0KSAqLworCXdoaWxlIChidWYtPmxlbiA8IDQwKQorCQlzdHJidWZfYWRkY2goYnVmLCAnICcpOworI2VuZGlmCisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgdHJhY2Vfd3JpdGUoc3RydWN0IHRyYWNlX2tleSAqa2V5LCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxlbikKK3sKKwlpZiAod3JpdGVfaW5fZnVsbChnZXRfdHJhY2VfZmQoa2V5KSwgYnVmLCBsZW4pIDwgMCkgeworCQl3YXJuaW5nKCJ1bmFibGUgdG8gd3JpdGUgdHJhY2UgZm9yICVzOiAlcyIsCisJCQlrZXktPmtleSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJdHJhY2VfZGlzYWJsZShrZXkpOworCX0KK30KKwordm9pZCB0cmFjZV92ZXJiYXRpbShzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbGVuKQoreworCWlmICghdHJhY2Vfd2FudChrZXkpKQorCQlyZXR1cm47CisJdHJhY2Vfd3JpdGUoa2V5LCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3RyYWNlX2xpbmUoc3RydWN0IHRyYWNlX2tleSAqa2V5LCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJc3RyYnVmX2NvbXBsZXRlX2xpbmUoYnVmKTsKKwl0cmFjZV93cml0ZShrZXksIGJ1Zi0+YnVmLCBidWYtPmxlbik7Cit9CisKK3N0YXRpYyB2b2lkIHRyYWNlX3ZwcmludGZfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHN0cnVjdCB0cmFjZV9rZXkgKmtleSwKKwkJCSAgICAgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFwKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIXByZXBhcmVfdHJhY2VfbGluZShmaWxlLCBsaW5lLCBrZXksICZidWYpKQorCQlyZXR1cm47CisKKwlzdHJidWZfdmFkZGYoJmJ1ZiwgZm9ybWF0LCBhcCk7CisJcHJpbnRfdHJhY2VfbGluZShrZXksICZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdm9pZCB0cmFjZV9hcmd2X3ZwcmludGZfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJICBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqZm9ybWF0LAorCQkJCSAgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKCFwcmVwYXJlX3RyYWNlX2xpbmUoZmlsZSwgbGluZSwgJnRyYWNlX2RlZmF1bHRfa2V5LCAmYnVmKSkKKwkJcmV0dXJuOworCisJc3RyYnVmX3ZhZGRmKCZidWYsIGZvcm1hdCwgYXApOworCisJc3FfcXVvdGVfYXJndl9wcmV0dHkoJmJ1ZiwgYXJndik7CisJcHJpbnRfdHJhY2VfbGluZSgmdHJhY2VfZGVmYXVsdF9rZXksICZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCit2b2lkIHRyYWNlX3N0cmJ1Zl9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgc3RydWN0IHRyYWNlX2tleSAqa2V5LAorCQkgICAgIGNvbnN0IHN0cnVjdCBzdHJidWYgKmRhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghcHJlcGFyZV90cmFjZV9saW5lKGZpbGUsIGxpbmUsIGtleSwgJmJ1ZikpCisJCXJldHVybjsKKworCXN0cmJ1Zl9hZGRidWYoJmJ1ZiwgZGF0YSk7CisJcHJpbnRfdHJhY2VfbGluZShrZXksICZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdWludDY0X3QgcGVyZl9zdGFydF90aW1lc1sxMF07CitzdGF0aWMgaW50IHBlcmZfaW5kZW50OworCit1aW50NjRfdCB0cmFjZV9wZXJmb3JtYW5jZV9lbnRlcih2b2lkKQoreworCXVpbnQ2NF90IG5vdzsKKworCWlmICghdHJhY2Vfd2FudCgmdHJhY2VfcGVyZl9rZXkpKQorCQlyZXR1cm4gMDsKKworCW5vdyA9IGdldG5hbm90aW1lKCk7CisJcGVyZl9zdGFydF90aW1lc1twZXJmX2luZGVudF0gPSBub3c7CisJaWYgKHBlcmZfaW5kZW50ICsgMSA8IEFSUkFZX1NJWkUocGVyZl9zdGFydF90aW1lcykpCisJCXBlcmZfaW5kZW50Kys7CisJZWxzZQorCQlCVUcoIlRvbyBkZWVwIGluZGVudGF0aW9uIik7CisJcmV0dXJuIG5vdzsKK30KKworc3RhdGljIHZvaWQgdHJhY2VfcGVyZm9ybWFuY2VfdnByaW50Zl9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCQkJIHVpbnQ2NF90IG5hbm9zLCBjb25zdCBjaGFyICpmb3JtYXQsCisJCQkJCSB2YV9saXN0IGFwKQoreworCXN0YXRpYyBjb25zdCBjaGFyIHNwYWNlW10gPSAiICAgICAgICAgICI7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghcHJlcGFyZV90cmFjZV9saW5lKGZpbGUsIGxpbmUsICZ0cmFjZV9wZXJmX2tleSwgJmJ1ZikpCisJCXJldHVybjsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICJwZXJmb3JtYW5jZTogJS45ZiBzIiwgKGRvdWJsZSkgbmFub3MgLyAxMDAwMDAwMDAwKTsKKworCWlmIChmb3JtYXQgJiYgKmZvcm1hdCkgeworCQlpZiAocGVyZl9pbmRlbnQgPj0gc3RybGVuKHNwYWNlKSkKKwkJCUJVRygiVG9vIGRlZXAgaW5kZW50YXRpb24iKTsKKworCQlzdHJidWZfYWRkZigmYnVmLCAiOiUuKnMgIiwgcGVyZl9pbmRlbnQsIHNwYWNlKTsKKwkJc3RyYnVmX3ZhZGRmKCZidWYsIGZvcm1hdCwgYXApOworCX0KKworCXByaW50X3RyYWNlX2xpbmUoJnRyYWNlX3BlcmZfa2V5LCAmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworI2lmbmRlZiBIQVZFX1ZBUklBRElDX01BQ1JPUworCit2b2lkIHRyYWNlX3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXRyYWNlX3ZwcmludGZfZmwoTlVMTCwgMCwgJnRyYWNlX2RlZmF1bHRfa2V5LCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIHRyYWNlX3ByaW50Zl9rZXkoc3RydWN0IHRyYWNlX2tleSAqa2V5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXRyYWNlX3ZwcmludGZfZmwoTlVMTCwgMCwga2V5LCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIHRyYWNlX2FyZ3ZfcHJpbnRmKGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXRyYWNlX2FyZ3ZfdnByaW50Zl9mbChOVUxMLCAwLCBhcmd2LCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIHRyYWNlX3N0cmJ1ZihzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksIGNvbnN0IHN0cnVjdCBzdHJidWYgKmRhdGEpCit7CisJdHJhY2Vfc3RyYnVmX2ZsKE5VTEwsIDAsIGtleSwgZGF0YSk7Cit9CisKK3ZvaWQgdHJhY2VfcGVyZm9ybWFuY2UodWludDY0X3QgbmFub3MsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJdHJhY2VfcGVyZm9ybWFuY2VfdnByaW50Zl9mbChOVUxMLCAwLCBuYW5vcywgZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKwordm9pZCB0cmFjZV9wZXJmb3JtYW5jZV9zaW5jZSh1aW50NjRfdCBzdGFydCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwl0cmFjZV9wZXJmb3JtYW5jZV92cHJpbnRmX2ZsKE5VTEwsIDAsIGdldG5hbm90aW1lKCkgLSBzdGFydCwKKwkJCQkgICAgIGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisKK3ZvaWQgdHJhY2VfcGVyZm9ybWFuY2VfbGVhdmUoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwl1aW50NjRfdCBzaW5jZTsKKworCWlmIChwZXJmX2luZGVudCkKKwkJcGVyZl9pbmRlbnQtLTsKKworCWlmICghZm9ybWF0KSAvKiBBbGxvdyBjYWxsZXJzIHRvIGxlYXZlIHdpdGhvdXQgdHJhY2luZyBhbnl0aGluZyAqLworCQlyZXR1cm47CisKKwlzaW5jZSA9IHBlcmZfc3RhcnRfdGltZXNbcGVyZl9pbmRlbnRdOworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXRyYWNlX3BlcmZvcm1hbmNlX3ZwcmludGZfZmwoTlVMTCwgMCwgZ2V0bmFub3RpbWUoKSAtIHNpbmNlLAorCQkJCSAgICAgZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKworI2Vsc2UKKwordm9pZCB0cmFjZV9wcmludGZfa2V5X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksCisJCQkgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwl0cmFjZV92cHJpbnRmX2ZsKGZpbGUsIGxpbmUsIGtleSwgZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKwordm9pZCB0cmFjZV9hcmd2X3ByaW50Zl9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqKmFyZ3YsCisJCQkgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJdHJhY2VfYXJndl92cHJpbnRmX2ZsKGZpbGUsIGxpbmUsIGFyZ3YsIGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisKK3ZvaWQgdHJhY2VfcGVyZm9ybWFuY2VfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVpbnQ2NF90IG5hbm9zLAorCQkJICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwl0cmFjZV9wZXJmb3JtYW5jZV92cHJpbnRmX2ZsKGZpbGUsIGxpbmUsIG5hbm9zLCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIHRyYWNlX3BlcmZvcm1hbmNlX2xlYXZlX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCXVpbnQ2NF90IG5hbm9zLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXVpbnQ2NF90IHNpbmNlOworCisJaWYgKHBlcmZfaW5kZW50KQorCQlwZXJmX2luZGVudC0tOworCisJaWYgKCFmb3JtYXQpIC8qIEFsbG93IGNhbGxlcnMgdG8gbGVhdmUgd2l0aG91dCB0cmFjaW5nIGFueXRoaW5nICovCisJCXJldHVybjsKKworCXNpbmNlID0gcGVyZl9zdGFydF90aW1lc1twZXJmX2luZGVudF07CisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJdHJhY2VfcGVyZm9ybWFuY2VfdnByaW50Zl9mbChmaWxlLCBsaW5lLCBuYW5vcyAtIHNpbmNlLCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCisjZW5kaWYgLyogSEFWRV9WQVJJQURJQ19NQUNST1MgKi8KKworCitzdGF0aWMgY29uc3QgY2hhciAqcXVvdGVfY3JubChjb25zdCBjaGFyICpwYXRoKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG5ld19wYXRoID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIXBhdGgpCisJCXJldHVybiBOVUxMOworCisJc3RyYnVmX3Jlc2V0KCZuZXdfcGF0aCk7CisKKwl3aGlsZSAoKnBhdGgpIHsKKwkJc3dpdGNoICgqcGF0aCkgeworCQljYXNlICdcXCc6IHN0cmJ1Zl9hZGRzdHIoJm5ld19wYXRoLCAiXFxcXCIpOyBicmVhazsKKwkJY2FzZSAnXG4nOiBzdHJidWZfYWRkc3RyKCZuZXdfcGF0aCwgIlxcbiIpOyBicmVhazsKKwkJY2FzZSAnXHInOiBzdHJidWZfYWRkc3RyKCZuZXdfcGF0aCwgIlxcciIpOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJCXN0cmJ1Zl9hZGRjaCgmbmV3X3BhdGgsICpwYXRoKTsKKwkJfQorCQlwYXRoKys7CisJfQorCXJldHVybiBuZXdfcGF0aC5idWY7Cit9CisKKy8qIEZJWE1FOiBtb3ZlIHByZWZpeCB0byBzdGFydHVwX2luZm8gc3RydWN0IGFuZCBnZXQgcmlkIG9mIHRoaXMgYXJnICovCit2b2lkIHRyYWNlX3JlcG9fc2V0dXAoY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKmdpdF93b3JrX3RyZWU7CisJY2hhciAqY3dkOworCisJaWYgKCF0cmFjZV93YW50KCZ0cmFjZV9zZXR1cF9rZXkpKQorCQlyZXR1cm47CisKKwljd2QgPSB4Z2V0Y3dkKCk7CisKKwlpZiAoIShnaXRfd29ya190cmVlID0gZ2V0X2dpdF93b3JrX3RyZWUoKSkpCisJCWdpdF93b3JrX3RyZWUgPSAiKG51bGwpIjsKKworCWlmICghcHJlZml4KQorCQlwcmVmaXggPSAiKG51bGwpIjsKKworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX3NldHVwX2tleSwgInNldHVwOiBnaXRfZGlyOiAlc1xuIiwgcXVvdGVfY3JubChnZXRfZ2l0X2RpcigpKSk7CisJdHJhY2VfcHJpbnRmX2tleSgmdHJhY2Vfc2V0dXBfa2V5LCAic2V0dXA6IGdpdF9jb21tb25fZGlyOiAlc1xuIiwgcXVvdGVfY3JubChnZXRfZ2l0X2NvbW1vbl9kaXIoKSkpOworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX3NldHVwX2tleSwgInNldHVwOiB3b3JrdHJlZTogJXNcbiIsIHF1b3RlX2NybmwoZ2l0X3dvcmtfdHJlZSkpOworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX3NldHVwX2tleSwgInNldHVwOiBjd2Q6ICVzXG4iLCBxdW90ZV9jcm5sKGN3ZCkpOworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX3NldHVwX2tleSwgInNldHVwOiBwcmVmaXg6ICVzXG4iLCBxdW90ZV9jcm5sKHByZWZpeCkpOworCisJZnJlZShjd2QpOworfQorCitpbnQgdHJhY2Vfd2FudChzdHJ1Y3QgdHJhY2Vfa2V5ICprZXkpCit7CisJcmV0dXJuICEhZ2V0X3RyYWNlX2ZkKGtleSk7Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfQ0xPQ0tfR0VUVElNRSkgJiYgZGVmaW5lZChIQVZFX0NMT0NLX01PTk9UT05JQykKKworc3RhdGljIGlubGluZSB1aW50NjRfdCBoaWdocmVzX25hbm9zKHZvaWQpCit7CisJc3RydWN0IHRpbWVzcGVjIHRzOworCWlmIChjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRzKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICh1aW50NjRfdCkgdHMudHZfc2VjICogMTAwMDAwMDAwMCArIHRzLnR2X25zZWM7Cit9CisKKyNlbGlmIGRlZmluZWQgKEdJVF9XSU5ET1dTX05BVElWRSkKKworc3RhdGljIGlubGluZSB1aW50NjRfdCBoaWdocmVzX25hbm9zKHZvaWQpCit7CisJc3RhdGljIHVpbnQ2NF90IGhpZ2hfbnMsIHNjYWxlZF9sb3dfbnM7CisJc3RhdGljIGludCBzY2FsZTsKKwlMQVJHRV9JTlRFR0VSIGNudDsKKworCWlmICghc2NhbGUpIHsKKwkJaWYgKCFRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5KCZjbnQpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogaGlnaF9ucyA9IG51bWJlciBvZiBucyBwZXIgY250LkhpZ2hQYXJ0ICovCisJCWhpZ2hfbnMgPSAoMTAwMDAwMDAwMExMIDw8IDMyKSAvICh1aW50NjRfdCkgY250LlF1YWRQYXJ0OworCisJCS8qCisJCSAqIE51bWJlciBvZiBucyBwZXIgY250Lkxvd1BhcnQgaXMgMTBeOSAvIGZyZXF1ZW5jeSAob3IKKwkJICogaGlnaF9ucyA+PiAzMikuIEZvciBtYXhpbXVtIHByZWNpc2lvbiwgd2Ugc2NhbGUgdGhpcyBmYWN0b3IKKwkJICogc28gdGhhdCBpdCBqdXN0IGZpdHMgd2l0aGluIDMyIGJpdCAoaS5lLiB3b24ndCBvdmVyZmxvdyBpZgorCQkgKiBtdWx0aXBsaWVkIHdpdGggY250Lkxvd1BhcnQpLgorCQkgKi8KKwkJc2NhbGVkX2xvd19ucyA9IGhpZ2hfbnM7CisJCXNjYWxlID0gMzI7CisJCXdoaWxlIChzY2FsZWRfbG93X25zID49IDB4MTAwMDAwMDAwTEwpIHsKKwkJCXNjYWxlZF9sb3dfbnMgPj49IDE7CisJCQlzY2FsZS0tOworCQl9CisJfQorCisJLyogaWYgUVBGIHdvcmtlZCBvbiBpbml0aWFsaXphdGlvbiwgd2UgZXhwZWN0IFFQQyB0byB3b3JrIGFzIHdlbGwgKi8KKwlRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigmY250KTsKKworCXJldHVybiAoaGlnaF9ucyAqIGNudC5IaWdoUGFydCkgKworCSAgICAgICAoKHNjYWxlZF9sb3dfbnMgKiBjbnQuTG93UGFydCkgPj4gc2NhbGUpOworfQorCisjZWxzZQorIyBkZWZpbmUgaGlnaHJlc19uYW5vcygpIDAKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGdldHRpbWVvZmRheV9uYW5vcyh2b2lkKQoreworCXN0cnVjdCB0aW1ldmFsIHR2OworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCXJldHVybiAodWludDY0X3QpIHR2LnR2X3NlYyAqIDEwMDAwMDAwMDAgKyB0di50dl91c2VjICogMTAwMDsKK30KKworLyoKKyAqIFJldHVybnMgbmFub3NlY29uZHMgc2luY2UgdGhlIGVwb2NoICgwMS8wMS8xOTcwKSwgZm9yIHBlcmZvcm1hbmNlIHRyYWNpbmcKKyAqIChpLmUuIGZhdm9yaW5nIGhpZ2ggcHJlY2lzaW9uIG92ZXIgd2FsbCBjbG9jayB0aW1lIGFjY3VyYWN5KS4KKyAqLwordWludDY0X3QgZ2V0bmFub3RpbWUodm9pZCkKK3sKKwlzdGF0aWMgdWludDY0X3Qgb2Zmc2V0OworCWlmIChvZmZzZXQgPiAxKSB7CisJCS8qIGluaXRpYWxpemF0aW9uIHN1Y2NlZWRlZCwgcmV0dXJuIG9mZnNldCArIGhpZ2ggcmVzIHRpbWUgKi8KKwkJcmV0dXJuIG9mZnNldCArIGhpZ2hyZXNfbmFub3MoKTsKKwl9IGVsc2UgaWYgKG9mZnNldCA9PSAxKSB7CisJCS8qIGluaXRpYWxpemF0aW9uIGZhaWxlZCwgZmFsbCBiYWNrIHRvIGdldHRpbWVvZmRheSAqLworCQlyZXR1cm4gZ2V0dGltZW9mZGF5X25hbm9zKCk7CisJfSBlbHNlIHsKKwkJLyogaW5pdGlhbGl6ZSBvZmZzZXQgaWYgaGlnaCByZXNvbHV0aW9uIHRpbWVyIHdvcmtzICovCisJCXVpbnQ2NF90IG5vdyA9IGdldHRpbWVvZmRheV9uYW5vcygpOworCQl1aW50NjRfdCBoaWdocmVzID0gaGlnaHJlc19uYW5vcygpOworCQlpZiAoaGlnaHJlcykKKwkJCW9mZnNldCA9IG5vdyAtIGhpZ2hyZXM7CisJCWVsc2UKKwkJCW9mZnNldCA9IDE7CisJCXJldHVybiBub3c7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBjb21tYW5kX2xpbmUgPSBTVFJCVUZfSU5JVDsKKworc3RhdGljIHZvaWQgcHJpbnRfY29tbWFuZF9wZXJmb3JtYW5jZV9hdGV4aXQodm9pZCkKK3sKKwl0cmFjZV9wZXJmb3JtYW5jZV9sZWF2ZSgiZ2l0IGNvbW1hbmQ6JXMiLCBjb21tYW5kX2xpbmUuYnVmKTsKK30KKwordm9pZCB0cmFjZV9jb21tYW5kX3BlcmZvcm1hbmNlKGNvbnN0IGNoYXIgKiphcmd2KQoreworCWlmICghdHJhY2Vfd2FudCgmdHJhY2VfcGVyZl9rZXkpKQorCQlyZXR1cm47CisKKwlpZiAoIWNvbW1hbmRfbGluZS5sZW4pCisJCWF0ZXhpdChwcmludF9jb21tYW5kX3BlcmZvcm1hbmNlX2F0ZXhpdCk7CisKKwlzdHJidWZfcmVzZXQoJmNvbW1hbmRfbGluZSk7CisJc3FfcXVvdGVfYXJndl9wcmV0dHkoJmNvbW1hbmRfbGluZSwgYXJndik7CisJdHJhY2VfcGVyZm9ybWFuY2VfZW50ZXIoKTsKK30KZGlmZiAtLWdpdCBhL3RyYWNlLmggYi90cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjY2MTgKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjZS5oCkBAIC0wLDAgKzEsMjg0IEBACisjaWZuZGVmIFRSQUNFX0gKKyNkZWZpbmUgVFJBQ0VfSAorCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKKy8qKgorICogVGhlIHRyYWNlIEFQSSBjYW4gYmUgdXNlZCB0byBwcmludCBkZWJ1ZyBtZXNzYWdlcyB0byBzdGRlcnIgb3IgYSBmaWxlLiBUcmFjZQorICogY29kZSBpcyBpbmFjdGl2ZSB1bmxlc3MgZXhwbGljaXRseSBlbmFibGVkIGJ5IHNldHRpbmcgYEdJVF9UUkFDRSpgIGVudmlyb25tZW50CisgKiB2YXJpYWJsZXMuCisgKgorICogVGhlIHRyYWNlIGltcGxlbWVudGF0aW9uIGF1dG9tYXRpY2FsbHkgYWRkcyBgdGltZXN0YW1wIGZpbGU6bGluZSAuLi4gXG5gIHRvCisgKiBhbGwgdHJhY2UgbWVzc2FnZXMuIEUuZy46CisgKgorICogLS0tLS0tLS0tLS0tCisgKiAyMzo1OTo1OS4xMjM0NTYgZ2l0LmM6MzEyICAgICAgICAgICAgICAgdHJhY2U6IGJ1aWx0LWluOiBnaXQgJ2ZvbycKKyAqIDAwOjAwOjAwLjAwMDAwMSBidWlsdGluL2Zvby5jOjk5ICAgICAgICBmb286IHNvbWUgbWVzc2FnZQorICogLS0tLS0tLS0tLS0tCisgKgorICogQnVncyAmIENhdmVhdHMKKyAqIC0tLS0tLS0tLS0tLS0tCisgKgorICogR0lUX1RSQUNFXyogZW52aXJvbm1lbnQgdmFyaWFibGVzIGNhbiBiZSB1c2VkIHRvIHRlbGwgR2l0IHRvIHNob3cKKyAqIHRyYWNlIG91dHB1dCB0byBpdHMgc3RhbmRhcmQgZXJyb3Igc3RyZWFtLiBHaXQgY2FuIG9mdGVuIHNwYXduIGEgcGFnZXIKKyAqIGludGVybmFsbHkgdG8gcnVuIGl0cyBzdWJjb21tYW5kIGFuZCBzZW5kIGl0cyBzdGFuZGFyZCBvdXRwdXQgYW5kCisgKiBzdGFuZGFyZCBlcnJvciB0byBpdC4KKyAqCisgKiBCZWNhdXNlIEdJVF9UUkFDRV9QRVJGT1JNQU5DRSB0cmFjZSBpcyBnZW5lcmF0ZWQgb25seSBhdCB0aGUgdmVyeSBlbmQKKyAqIG9mIHRoZSBwcm9ncmFtIHdpdGggYXRleGl0KCksIHdoaWNoIGhhcHBlbnMgYWZ0ZXIgdGhlIHBhZ2VyIGV4aXRzLCBpdAorICogd291bGQgbm90IHdvcmsgd2VsbCBpZiB5b3Ugc2VuZCBpdHMgbG9nIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQKKyAqIGFuZCBsZXQgR2l0IHNwYXduIHRoZSBwYWdlciBhdCB0aGUgc2FtZSB0aW1lLgorICoKKyAqIEFzIGEgd29yayBhcm91bmQsIHlvdSBjYW4gZm9yIGV4YW1wbGUgdXNlICctLW5vLXBhZ2VyJywgb3Igc2V0CisgKiBHSVRfVFJBQ0VfUEVSRk9STUFOQ0UgdG8gYW5vdGhlciBmaWxlIGRlc2NyaXB0b3Igd2hpY2ggaXMgcmVkaXJlY3RlZAorICogdG8gc3RkZXJyLCBvciBzZXQgR0lUX1RSQUNFX1BFUkZPUk1BTkNFIHRvIGEgZmlsZSBzcGVjaWZpZWQgYnkgaXRzCisgKiBhYnNvbHV0ZSBwYXRoLgorICoKKyAqIEZvciBleGFtcGxlIGluc3RlYWQgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kIHdoaWNoIGJ5IGRlZmF1bHQgbWF5IG5vdAorICogcHJpbnQgYW55IHBlcmZvcm1hbmNlIGluZm9ybWF0aW9uOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogR0lUX1RSQUNFX1BFUkZPUk1BTkNFPTIgZ2l0IGxvZyAtMQorICogLS0tLS0tLS0tLS0tCisgKgorICogeW91IG1heSB3YW50IHRvIHVzZToKKyAqCisgKiAtLS0tLS0tLS0tLS0KKyAqIEdJVF9UUkFDRV9QRVJGT1JNQU5DRT0yIGdpdCAtLW5vLXBhZ2VyIGxvZyAtMQorICogLS0tLS0tLS0tLS0tCisgKgorICogb3I6CisgKgorICogLS0tLS0tLS0tLS0tCisgKiBHSVRfVFJBQ0VfUEVSRk9STUFOQ0U9MyAzPiYyIGdpdCBsb2cgLTEKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIG9yOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogR0lUX1RSQUNFX1BFUkZPUk1BTkNFPS9wYXRoL3RvL2xvZy9maWxlIGdpdCBsb2cgLTEKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqLworCisvKioKKyAqIERlZmluZXMgYSB0cmFjZSBrZXkgKG9yIGNhdGVnb3J5KS4gVGhlIGRlZmF1bHQgKGZvciBBUEkgZnVuY3Rpb25zIHRoYXQKKyAqIGRvbid0IHRha2UgYSBrZXkpIGlzIGBHSVRfVFJBQ0VgLgorICoKKyAqIEUuZy4gdG8gZGVmaW5lIGEgdHJhY2Uga2V5IGNvbnRyb2xsZWQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGUgYEdJVF9UUkFDRV9GT09gOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogc3RhdGljIHN0cnVjdCB0cmFjZV9rZXkgdHJhY2VfZm9vID0gVFJBQ0VfS0VZX0lOSVQoRk9PKTsKKyAqCisgKiBzdGF0aWMgdm9pZCB0cmFjZV9wcmludF9mb28oY29uc3QgY2hhciAqbWVzc2FnZSkKKyAqIHsKKyAqIAl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9mb28sICIlcyIsIG1lc3NhZ2UpOworICogfQorICogLS0tLS0tLS0tLS0tCisgKgorICogTm90ZTogZG9uJ3QgdXNlIGBjb25zdGAgYXMgdGhlIHRyYWNlIGltcGxlbWVudGF0aW9uIHN0b3JlcyBpbnRlcm5hbCBzdGF0ZSBpbgorICogdGhlIGB0cmFjZV9rZXlgIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IHRyYWNlX2tleSB7CisJY29uc3QgY2hhciAqIGNvbnN0IGtleTsKKwlpbnQgZmQ7CisJdW5zaWduZWQgaW50IGluaXRpYWxpemVkIDogMTsKKwl1bnNpZ25lZCBpbnQgIG5lZWRfY2xvc2UgOiAxOworfTsKKworZXh0ZXJuIHN0cnVjdCB0cmFjZV9rZXkgdHJhY2VfZGVmYXVsdF9rZXk7CisKKyNkZWZpbmUgVFJBQ0VfS0VZX0lOSVQobmFtZSkgeyAiR0lUX1RSQUNFXyIgI25hbWUsIDAsIDAsIDAgfQorZXh0ZXJuIHN0cnVjdCB0cmFjZV9rZXkgdHJhY2VfcGVyZl9rZXk7CitleHRlcm4gc3RydWN0IHRyYWNlX2tleSB0cmFjZV9zZXR1cF9rZXk7CisKK3ZvaWQgdHJhY2VfcmVwb19zZXR1cChjb25zdCBjaGFyICpwcmVmaXgpOworCisvKioKKyAqIENoZWNrcyB3aGV0aGVyIHRoZSB0cmFjZSBrZXkgaXMgZW5hYmxlZC4gVXNlZCB0byBwcmV2ZW50IGV4cGVuc2l2ZQorICogc3RyaW5nIGZvcm1hdHRpbmcgYmVmb3JlIGNhbGxpbmcgb25lIG9mIHRoZSBwcmludGluZyBBUElzLgorICovCitpbnQgdHJhY2Vfd2FudChzdHJ1Y3QgdHJhY2Vfa2V5ICprZXkpOworCisvKioKKyAqIERpc2FibGVzIHRyYWNpbmcgZm9yIHRoZSBzcGVjaWZpZWQga2V5LCBldmVuIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICogd2FzIHNldC4KKyAqLwordm9pZCB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0cmFjZV9rZXkgKmtleSk7CisKKy8qKgorICogUmV0dXJucyBuYW5vc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKDAxLzAxLzE5NzApLCB0eXBpY2FsbHkgdXNlZAorICogZm9yIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cy4KKyAqIEN1cnJlbnRseSB0aGVyZSBhcmUgaGlnaCBwcmVjaXNpb24gdGltZXIgaW1wbGVtZW50YXRpb25zIGZvciBMaW51eCAodXNpbmcKKyAqIGBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQylgKSBhbmQgV2luZG93cyAoYFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyYCkuCisgKiBPdGhlciBwbGF0Zm9ybXMgdXNlIGBnZXR0aW1lb2ZkYXlgIGFzIHRpbWUgc291cmNlLgorICovCit1aW50NjRfdCBnZXRuYW5vdGltZSh2b2lkKTsKKwordm9pZCB0cmFjZV9jb21tYW5kX3BlcmZvcm1hbmNlKGNvbnN0IGNoYXIgKiphcmd2KTsKK3ZvaWQgdHJhY2VfdmVyYmF0aW0oc3RydWN0IHRyYWNlX2tleSAqa2V5LCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxlbik7Cit1aW50NjRfdCB0cmFjZV9wZXJmb3JtYW5jZV9lbnRlcih2b2lkKTsKKworI2lmbmRlZiBIQVZFX1ZBUklBRElDX01BQ1JPUworCisvKioKKyAqIFByaW50cyBhIGZvcm1hdHRlZCBtZXNzYWdlLCBzaW1pbGFyIHRvIHByaW50Zi4KKyAqLworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK3ZvaWQgdHJhY2VfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKK3ZvaWQgdHJhY2VfcHJpbnRmX2tleShzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKworLyoqCisgKiBQcmludHMgYSBmb3JtYXR0ZWQgbWVzc2FnZSwgZm9sbG93ZWQgYnkgYSBxdW90ZWQgbGlzdCBvZiBhcmd1bWVudHMuCisgKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCit2b2lkIHRyYWNlX2FyZ3ZfcHJpbnRmKGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CisKKy8qKgorICogUHJpbnRzIHRoZSBzdHJidWYsIHdpdGhvdXQgYWRkaXRpb25hbCBmb3JtYXR0aW5nIChpLmUuIGRvZXNuJ3QKKyAqIGNob2tlIG9uIGAlYCBvciBldmVuIGBcMGApLgorICovCit2b2lkIHRyYWNlX3N0cmJ1ZihzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksIGNvbnN0IHN0cnVjdCBzdHJidWYgKmRhdGEpOworCisvKioKKyAqIFByaW50cyBlbGFwc2VkIHRpbWUgKGluIG5hbm9zZWNvbmRzKSBpZiBHSVRfVFJBQ0VfUEVSRk9STUFOQ0UgaXMgZW5hYmxlZC4KKyAqCisgKiBFeGFtcGxlOgorICogLS0tLS0tLS0tLS0tCisgKiB1aW50NjRfdCB0ID0gMDsKKyAqIGZvciAoOzspIHsKKyAqIAkvLyBpZ25vcmUKKyAqIHQgLT0gZ2V0bmFub3RpbWUoKTsKKyAqIC8vIGNvZGUgc2VjdGlvbiB0byBtZWFzdXJlCisgKiB0ICs9IGdldG5hbm90aW1lKCk7CisgKiAvLyBpZ25vcmUKKyAqIH0KKyAqIHRyYWNlX3BlcmZvcm1hbmNlKHQsICJmcm90eiIpOworICogLS0tLS0tLS0tLS0tCisgKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCit2b2lkIHRyYWNlX3BlcmZvcm1hbmNlKHVpbnQ2NF90IG5hbm9zLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CisKKy8qKgorICogUHJpbnRzIGVsYXBzZWQgdGltZSBzaW5jZSAnc3RhcnQnIGlmIEdJVF9UUkFDRV9QRVJGT1JNQU5DRSBpcyBlbmFibGVkLgorICoKKyAqIEV4YW1wbGU6CisgKiAtLS0tLS0tLS0tLS0KKyAqIHVpbnQ2NF90IHN0YXJ0ID0gZ2V0bmFub3RpbWUoKTsKKyAqIC8vIGNvZGUgc2VjdGlvbiB0byBtZWFzdXJlCisgKiB0cmFjZV9wZXJmb3JtYW5jZV9zaW5jZShzdGFydCwgImZvb2JhciIpOworICogLS0tLS0tLS0tLS0tCisgKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCit2b2lkIHRyYWNlX3BlcmZvcm1hbmNlX3NpbmNlKHVpbnQ2NF90IHN0YXJ0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCit2b2lkIHRyYWNlX3BlcmZvcm1hbmNlX2xlYXZlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKworI2Vsc2UKKworLyoKKyAqIE1hY3JvcyB0byBhZGQgZmlsZTpsaW5lIC0gc2VlIGFib3ZlIGZvciBDLXN0eWxlIGRlY2xhcmF0aW9ucyBvZiBob3cgdGhlc2UKKyAqIHNob3VsZCBiZSB1c2VkLgorICovCisKKy8qCisgKiBUUkFDRV9DT05URVhUIG1heSBiZSBzZXQgdG8gX19GVU5DVElPTl9fIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBpdC4gVGhlCisgKiBkZWZhdWx0IGlzIF9fRklMRV9fLCBhcyBpdCBpcyBjb25zaXN0ZW50IHdpdGggYXNzZXJ0KCksIGFuZCBzdGF0aWMgZnVuY3Rpb24KKyAqIG5hbWVzIGFyZSBub3QgbmVjZXNzYXJpbHkgdW5pcXVlLgorICoKKyAqIF9fRklMRV9fICI6IiBfX0ZVTkNUSU9OX18gZG9lc24ndCB3b3JrIHdpdGggR05VQywgYXMgX19GSUxFX18gaXMgc3VwcGxpZWQKKyAqIGJ5IHRoZSBwcmVwcm9jZXNzb3IgYXMgYSBzdHJpbmcgbGl0ZXJhbCwgYW5kIF9fRlVOQ1RJT05fXyBpcyBmaWxsZWQgaW4gYnkKKyAqIHRoZSBjb21waWxlciBhcyBhIHN0cmluZyBjb25zdGFudC4KKyAqLworI2lmbmRlZiBUUkFDRV9DT05URVhUCisjIGRlZmluZSBUUkFDRV9DT05URVhUIF9fRklMRV9fCisjZW5kaWYKKworLyoKKyAqIE5vdGU6IHdpdGggQzk5IHZhcmlhZGljIG1hY3JvcywgX19WQV9BUkdTX18gbXVzdCBpbmNsdWRlIHRoZSBsYXN0IGZpeGVkCisgKiBwYXJhbWV0ZXIgKCdmb3JtYXQnIGluIHRoaXMgY2FzZSkuIE90aGVyd2lzZSwgYSBjYWxsIHdpdGhvdXQgdmFyaWFibGUKKyAqIGFyZ3VtZW50cyB3aWxsIGhhdmUgYSBzdXJwbHVzICcsJy4gRS5nLjoKKyAqCisgKiAgI2RlZmluZSBmb28oZm9ybWF0LCAuLi4pIGJhcihmb3JtYXQsIF9fVkFfQVJHU19fKQorICogIGZvbygidGVzdCIpOworICoKKyAqIHdpbGwgZXhwYW5kIHRvCisgKgorICogIGJhcigidGVzdCIsKTsKKyAqCisgKiB3aGljaCBpcyBpbnZhbGlkIChub3RlIHRoZSAnLCknKS4gV2l0aCBHTlVDLCAnIyNfX1ZBX0FSR1NfXycgZHJvcHMgdGhlCisgKiBjb21tYSwgYnV0IHRoaXMgaXMgbm9uLXN0YW5kYXJkLgorICovCisKKyNkZWZpbmUgdHJhY2VfcHJpbnRmX2tleShrZXksIC4uLikJCQkJCSAgICBcCisJZG8gewkJCQkJCQkJICAgIFwKKwkJaWYgKHRyYWNlX3Bhc3NfZmwoa2V5KSkJCQkJCSAgICBcCisJCQl0cmFjZV9wcmludGZfa2V5X2ZsKFRSQUNFX0NPTlRFWFQsIF9fTElORV9fLCBrZXksICAgXAorCQkJCQkgICAgX19WQV9BUkdTX18pOwkJICAgIFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIHRyYWNlX3ByaW50ZiguLi4pIHRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX2RlZmF1bHRfa2V5LCBfX1ZBX0FSR1NfXykKKworI2RlZmluZSB0cmFjZV9hcmd2X3ByaW50Zihhcmd2LCAuLi4pCQkJCQkgICAgXAorCWRvIHsJCQkJCQkJCSAgICBcCisJCWlmICh0cmFjZV9wYXNzX2ZsKCZ0cmFjZV9kZWZhdWx0X2tleSkpCQkJICAgIFwKKwkJCXRyYWNlX2FyZ3ZfcHJpbnRmX2ZsKFRSQUNFX0NPTlRFWFQsIF9fTElORV9fLAkgICAgXAorCQkJCQkgICAgYXJndiwgX19WQV9BUkdTX18pOwkJICAgIFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIHRyYWNlX3N0cmJ1ZihrZXksIGRhdGEpCQkJCQkJICAgIFwKKwlkbyB7CQkJCQkJCQkgICAgXAorCQlpZiAodHJhY2VfcGFzc19mbChrZXkpKQkJCQkJICAgIFwKKwkJCXRyYWNlX3N0cmJ1Zl9mbChUUkFDRV9DT05URVhULCBfX0xJTkVfXywga2V5LCBkYXRhKTtcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSB0cmFjZV9wZXJmb3JtYW5jZShuYW5vcywgLi4uKQkJCQkJICAgIFwKKwlkbyB7CQkJCQkJCQkgICAgXAorCQlpZiAodHJhY2VfcGFzc19mbCgmdHJhY2VfcGVyZl9rZXkpKQkJCSAgICBcCisJCQl0cmFjZV9wZXJmb3JtYW5jZV9mbChUUkFDRV9DT05URVhULCBfX0xJTkVfXywgbmFub3MsXAorCQkJCQkgICAgIF9fVkFfQVJHU19fKTsJCSAgICBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSB0cmFjZV9wZXJmb3JtYW5jZV9zaW5jZShzdGFydCwgLi4uKQkJCQkgICAgXAorCWRvIHsJCQkJCQkJCSAgICBcCisJCWlmICh0cmFjZV9wYXNzX2ZsKCZ0cmFjZV9wZXJmX2tleSkpCQkJICAgIFwKKwkJCXRyYWNlX3BlcmZvcm1hbmNlX2ZsKFRSQUNFX0NPTlRFWFQsIF9fTElORV9fLCAgICAgICBcCisJCQkJCSAgICAgZ2V0bmFub3RpbWUoKSAtIChzdGFydCksCSAgICBcCisJCQkJCSAgICAgX19WQV9BUkdTX18pOwkJICAgIFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIHRyYWNlX3BlcmZvcm1hbmNlX2xlYXZlKC4uLikJCQkJCSAgICBcCisJZG8gewkJCQkJCQkJICAgIFwKKwkJaWYgKHRyYWNlX3Bhc3NfZmwoJnRyYWNlX3BlcmZfa2V5KSkJCQkgICAgXAorCQkJdHJhY2VfcGVyZm9ybWFuY2VfbGVhdmVfZmwoVFJBQ0VfQ09OVEVYVCwgX19MSU5FX18sIFwKKwkJCQkJCSAgIGdldG5hbm90aW1lKCksCSAgICBcCisJCQkJCQkgICBfX1ZBX0FSR1NfXyk7CSAgICBcCisJfSB3aGlsZSAoMCkKKworLyogYmFja2VuZCBmdW5jdGlvbnMsIHVzZSBub24tKmZsIG1hY3JvcyBpbnN0ZWFkICovCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgNCwgNSkpKQordm9pZCB0cmFjZV9wcmludGZfa2V5X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksCisJCQkgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDQsIDUpKSkKK3ZvaWQgdHJhY2VfYXJndl9wcmludGZfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7Cit2b2lkIHRyYWNlX3N0cmJ1Zl9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgc3RydWN0IHRyYWNlX2tleSAqa2V5LAorCQkgICAgIGNvbnN0IHN0cnVjdCBzdHJidWYgKmRhdGEpOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDQsIDUpKSkKK3ZvaWQgdHJhY2VfcGVyZm9ybWFuY2VfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkgIHVpbnQ2NF90IG5hbm9zLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgNCwgNSkpKQordm9pZCB0cmFjZV9wZXJmb3JtYW5jZV9sZWF2ZV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCQl1aW50NjRfdCBuYW5vcywgY29uc3QgY2hhciAqZm10LCAuLi4pOworc3RhdGljIGlubGluZSBpbnQgdHJhY2VfcGFzc19mbChzdHJ1Y3QgdHJhY2Vfa2V5ICprZXkpCit7CisJcmV0dXJuIGtleS0+ZmQgfHwgIWtleS0+aW5pdGlhbGl6ZWQ7Cit9CisKKyNlbmRpZiAvKiBIQVZFX1ZBUklBRElDX01BQ1JPUyAqLworCisjZW5kaWYgLyogVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvdHJhY2UyLmMgYi90cmFjZTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzZiNTcwCi0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyLmMKQEAgLTAsMCArMSw3OTQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImpzb24td3JpdGVyLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfY2ZnLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl9jbWRfbmFtZS5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfZHN0LmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl9zaWQuaCIKKyNpbmNsdWRlICJ0cmFjZTIvdHIyX3N5c2Vudi5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfdGd0LmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl90bHMuaCIKKworc3RhdGljIGludCB0cmFjZTJfZW5hYmxlZDsKKworc3RhdGljIGludCB0cjJfbmV4dF9jaGlsZF9pZDsgLyogbW9kaWZ5IHVuZGVyIGxvY2sgKi8KK3N0YXRpYyBpbnQgdHIyX25leHRfZXhlY19pZDsgLyogbW9kaWZ5IHVuZGVyIGxvY2sgKi8KK3N0YXRpYyBpbnQgdHIyX25leHRfcmVwb19pZCA9IDE7IC8qIG1vZGlmeSB1bmRlciBsb2NrLiB6ZXJvIGlzIHJlc2VydmVkICovCisKKy8qCisgKiBBIHRhYmxlIG9mIHRoZSBidWlsdGluIFRSQUNFMiB0YXJnZXRzLiAgRWFjaCBvZiB0aGVzZSBtYXkgYmUgaW5kZXBlbmRlbnRseQorICogZW5hYmxlZCBvciBkaXNhYmxlZC4gIEVhY2ggVFJBQ0UyIEFQSSBtZXRob2Qgd2lsbCB0cnkgdG8gd3JpdGUgYW4gZXZlbnQgdG8KKyAqICplYWNoKiBvZiB0aGUgZW5hYmxlZCB0YXJnZXRzLgorICovCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgc3RydWN0IHRyMl90Z3QgKnRyMl90Z3RfYnVpbHRpbnNbXSA9Cit7CisJJnRyMl90Z3Rfbm9ybWFsLAorCSZ0cjJfdGd0X3BlcmYsCisJJnRyMl90Z3RfZXZlbnQsCisJTlVMTAorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisjZGVmaW5lIGZvcl9lYWNoX2J1aWx0aW4oaiwgdGd0X2opCQkJXAorCWZvciAoaiA9IDAsIHRndF9qID0gdHIyX3RndF9idWlsdGluc1tqXTsJXAorCSAgICAgdGd0X2o7CQkJCQlcCisJICAgICBqKyssIHRndF9qID0gdHIyX3RndF9idWlsdGluc1tqXSkKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisjZGVmaW5lIGZvcl9lYWNoX3dhbnRlZF9idWlsdGluKGosIHRndF9qKSAgICAgICAgICAgIFwKKwlmb3JfZWFjaF9idWlsdGluKGosIHRndF9qKSAgICAgICAgICAgICAgICAgICBcCisJCWlmICh0cjJfZHN0X3RyYWNlX3dhbnQodGd0X2otPnBkc3QpKQorLyogY2xhbmctZm9ybWF0IG9uICovCisKKy8qCisgKiBGb3JjZSAocmF0aGVyIHRoYW4gbGF6aWx5KSBpbml0aWFsaXplIGFueSBvZiB0aGUgcmVxdWVzdGVkCisgKiBidWlsdGluIFRSQUNFMiB0YXJnZXRzIGF0IHN0YXJ0dXAgKGFuZCBiZWZvcmUgd2UndmUgc2VlbiBhbgorICogYWN0dWFsIFRSQUNFMiBldmVudCBjYWxsKSBzbyB3ZSBjYW4gc2VlIGlmIHdlIG5lZWQgdG8gc2V0dXAKKyAqIHRoZSBUUjIgYW5kIFRMUyBtYWNoaW5lcnkuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnVpbHRpbiB0YXJnZXRzIGVuYWJsZWQuCisgKi8KK3N0YXRpYyBpbnQgdHIyX3RndF93YW50X2J1aWx0aW5zKHZvaWQpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCWludCBzdW0gPSAwOworCisJZm9yX2VhY2hfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX2luaXQoKSkKKwkJCXN1bSsrOworCisJcmV0dXJuIHN1bTsKK30KKworLyoKKyAqIFByb3Blcmx5IHRlcm1pbmF0ZSBlYWNoIGJ1aWx0aW4gdGFyZ2V0LiAgR2l2ZSBlYWNoIHRhcmdldAorICogYSBjaGFuY2UgdG8gd3JpdGUgYSBzdW1tYXJ5IGV2ZW50IGFuZC9vciBmbHVzaCBpZiBuZWNlc3NhcnkKKyAqIGFuZCB0aGVuIGNsb3NlIHRoZSBmZC4KKyAqLworc3RhdGljIHZvaWQgdHIyX3RndF9kaXNhYmxlX2J1aWx0aW5zKHZvaWQpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCisJZm9yX2VhY2hfYnVpbHRpbiAoaiwgdGd0X2opCisJCXRndF9qLT5wZm5fdGVybSgpOworfQorCitzdGF0aWMgaW50IHRyMm1haW5fZXhpdF9jb2RlOworCisvKgorICogT3VyIGF0ZXhpdCByb3V0aW5lIHNob3VsZCBydW4gYWZ0ZXIgZXZlcnl0aGluZyBoYXMgZmluaXNoZWQuCisgKgorICogTm90ZSB0aGF0IGV2ZW50cyBnZW5lcmF0ZWQgaGVyZSBtaWdodCBub3QgYWN0dWFsbHkgYXBwZWFyIGlmCisgKiB3ZSBhcmUgd3JpdGluZyB0byBmZCAxIG9yIDIgYW5kIG91ciBhdGV4aXQgcm91dGluZSBydW5zIGFmdGVyCisgKiB0aGUgcGFnZXIncyBhdGV4aXQgcm91dGluZSAoc2luY2UgaXQgY2xvc2VzIHRoZW0gdG8gc2h1dGRvd24KKyAqIHRoZSBwaXBlcykuCisgKi8KK3N0YXRpYyB2b2lkIHRyMm1haW5fYXRleGl0X2hhbmRsZXIodm9pZCkKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJaW50IGo7CisJdWludDY0X3QgdXNfbm93OworCXVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGU7CisKKwl1c19ub3cgPSBnZXRuYW5vdGltZSgpIC8gMTAwMDsKKwl1c19lbGFwc2VkX2Fic29sdXRlID0gdHIydGxzX2Fic29sdXRlX2VsYXBzZWQodXNfbm93KTsKKworCS8qCisJICogQ2xlYXIgYW55IHVuYmFsYW5jZWQgcmVnaW9ucyBzbyB0aGF0IG91ciBhdGV4aXQgbWVzc2FnZQorCSAqIGRvZXMgbm90IGFwcGVhciBuZXN0ZWQuICBUaGlzIGltcHJvdmVzIHRoZSBhcHBlYXJhbmNlIG9mCisJICogdGhlIHRyYWNlIG91dHB1dCBpZiBzb21lb25lIGNhbGxzIGRpZSgpLCBmb3IgZXhhbXBsZS4KKwkgKi8KKwl0cjJ0bHNfcG9wX3Vud2luZF9zZWxmKCk7CisKKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX2F0ZXhpdCkKKwkJCXRndF9qLT5wZm5fYXRleGl0KHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkJCSAgdHIybWFpbl9leGl0X2NvZGUpOworCisJdHIyX3RndF9kaXNhYmxlX2J1aWx0aW5zKCk7CisKKwl0cjJ0bHNfcmVsZWFzZSgpOworCXRyMl9zaWRfcmVsZWFzZSgpOworCXRyMl9jbWRfbmFtZV9yZWxlYXNlKCk7CisJdHIyX2NmZ19mcmVlX3BhdHRlcm5zKCk7CisJdHIyX2NmZ19mcmVlX2Vudl92YXJzKCk7CisJdHIyX3N5c2Vudl9yZWxlYXNlKCk7CisKKwl0cmFjZTJfZW5hYmxlZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHRyMm1haW5fc2lnbmFsX2hhbmRsZXIoaW50IHNpZ25vKQoreworCXN0cnVjdCB0cjJfdGd0ICp0Z3RfajsKKwlpbnQgajsKKwl1aW50NjRfdCB1c19ub3c7CisJdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZTsKKworCXVzX25vdyA9IGdldG5hbm90aW1lKCkgLyAxMDAwOworCXVzX2VsYXBzZWRfYWJzb2x1dGUgPSB0cjJ0bHNfYWJzb2x1dGVfZWxhcHNlZCh1c19ub3cpOworCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl9zaWduYWwpCisJCQl0Z3Rfai0+cGZuX3NpZ25hbCh1c19lbGFwc2VkX2Fic29sdXRlLCBzaWdubyk7CisKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOworCXJhaXNlKHNpZ25vKTsKK30KKwordm9pZCB0cmFjZTJfaW5pdGlhbGl6ZV9jbG9jayh2b2lkKQoreworCXRyMnRsc19zdGFydF9wcm9jZXNzX2Nsb2NrKCk7Cit9CisKK3ZvaWQgdHJhY2UyX2luaXRpYWxpemVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCisJaWYgKHRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwl0cjJfc3lzZW52X2xvYWQoKTsKKworCWlmICghdHIyX3RndF93YW50X2J1aWx0aW5zKCkpCisJCXJldHVybjsKKwl0cmFjZTJfZW5hYmxlZCA9IDE7CisKKwl0cjJfc2lkX2dldCgpOworCisJYXRleGl0KHRyMm1haW5fYXRleGl0X2hhbmRsZXIpOworCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgdHIybWFpbl9zaWduYWxfaGFuZGxlcik7CisJdHIydGxzX2luaXQoKTsKKworCS8qCisJICogRW1pdCAndmVyc2lvbicgbWVzc2FnZSBvbiBlYWNoIGFjdGl2ZSBidWlsdGluIHRhcmdldC4KKwkgKi8KKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX3ZlcnNpb25fZmwpCisJCQl0Z3Rfai0+cGZuX3ZlcnNpb25fZmwoZmlsZSwgbGluZSk7Cit9CisKK2ludCB0cmFjZTJfaXNfZW5hYmxlZCh2b2lkKQoreworCXJldHVybiB0cmFjZTJfZW5hYmxlZDsKK30KKwordm9pZCB0cmFjZTJfY21kX3N0YXJ0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJaW50IGo7CisJdWludDY0X3QgdXNfbm93OworCXVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGU7CisKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwl1c19ub3cgPSBnZXRuYW5vdGltZSgpIC8gMTAwMDsKKwl1c19lbGFwc2VkX2Fic29sdXRlID0gdHIydGxzX2Fic29sdXRlX2VsYXBzZWQodXNfbm93KTsKKworCWZvcl9lYWNoX3dhbnRlZF9idWlsdGluIChqLCB0Z3RfaikKKwkJaWYgKHRndF9qLT5wZm5fc3RhcnRfZmwpCisJCQl0Z3Rfai0+cGZuX3N0YXJ0X2ZsKGZpbGUsIGxpbmUsIHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkJCSAgICBhcmd2KTsKK30KKworaW50IHRyYWNlMl9jbWRfZXhpdF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IGNvZGUpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCXVpbnQ2NF90IHVzX25vdzsKKwl1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlOworCisJY29kZSAmPSAweGZmOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuIGNvZGU7CisKKwl0cmFjZTJfY29sbGVjdF9wcm9jZXNzX2luZm8oVFJBQ0UyX1BST0NFU1NfSU5GT19FWElUKTsKKworCXRyMm1haW5fZXhpdF9jb2RlID0gY29kZTsKKworCXVzX25vdyA9IGdldG5hbm90aW1lKCkgLyAxMDAwOworCXVzX2VsYXBzZWRfYWJzb2x1dGUgPSB0cjJ0bHNfYWJzb2x1dGVfZWxhcHNlZCh1c19ub3cpOworCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl9leGl0X2ZsKQorCQkJdGd0X2otPnBmbl9leGl0X2ZsKGZpbGUsIGxpbmUsIHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkJCSAgIGNvZGUpOworCisJcmV0dXJuIGNvZGU7Cit9CisKK3ZvaWQgdHJhY2UyX2NtZF9lcnJvcl92YV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LAorCQkJICAgIHZhX2xpc3QgYXApCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBXZSBleHBlY3QgZWFjaCB0YXJnZXQgZnVuY3Rpb24gdG8gdHJlYXQgJ2FwJyBhcyBjb25zdGFudAorCSAqIGFuZCB1c2UgdmFfY29weSAoYmVjYXVzZSBhbiAnYXAnIGNhbiBvbmx5IGJlIHdhbGtlZCBvbmNlKS4KKwkgKi8KKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX2Vycm9yX3ZhX2ZsKQorCQkJdGd0X2otPnBmbl9lcnJvcl92YV9mbChmaWxlLCBsaW5lLCBmbXQsIGFwKTsKK30KKwordm9pZCB0cmFjZTJfY21kX3BhdGhfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnBhdGhuYW1lKQoreworCXN0cnVjdCB0cjJfdGd0ICp0Z3RfajsKKwlpbnQgajsKKworCWlmICghdHJhY2UyX2VuYWJsZWQpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3dhbnRlZF9idWlsdGluIChqLCB0Z3RfaikKKwkJaWYgKHRndF9qLT5wZm5fY29tbWFuZF9wYXRoX2ZsKQorCQkJdGd0X2otPnBmbl9jb21tYW5kX3BhdGhfZmwoZmlsZSwgbGluZSwgcGF0aG5hbWUpOworfQorCit2b2lkIHRyYWNlMl9jbWRfbmFtZV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJY29uc3QgY2hhciAqaGllcmFyY2h5OworCWludCBqOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJdHIyX2NtZF9uYW1lX2FwcGVuZF9oaWVyYXJjaHkobmFtZSk7CisJaGllcmFyY2h5ID0gdHIyX2NtZF9uYW1lX2dldF9oaWVyYXJjaHkoKTsKKworCWZvcl9lYWNoX3dhbnRlZF9idWlsdGluIChqLCB0Z3RfaikKKwkJaWYgKHRndF9qLT5wZm5fY29tbWFuZF9uYW1lX2ZsKQorCQkJdGd0X2otPnBmbl9jb21tYW5kX25hbWVfZmwoZmlsZSwgbGluZSwgbmFtZSwgaGllcmFyY2h5KTsKK30KKwordm9pZCB0cmFjZTJfY21kX21vZGVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl9jb21tYW5kX21vZGVfZmwpCisJCQl0Z3Rfai0+cGZuX2NvbW1hbmRfbW9kZV9mbChmaWxlLCBsaW5lLCBtb2RlKTsKK30KKwordm9pZCB0cmFjZTJfY21kX2FsaWFzX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICphbGlhcywKKwkJCSBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJaW50IGo7CisKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX2FsaWFzX2ZsKQorCQkJdGd0X2otPnBmbl9hbGlhc19mbChmaWxlLCBsaW5lLCBhbGlhcywgYXJndik7Cit9CisKK3ZvaWQgdHJhY2UyX2NtZF9saXN0X2NvbmZpZ19mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwl0cjJfY2ZnX2xpc3RfY29uZmlnX2ZsKGZpbGUsIGxpbmUpOworfQorCit2b2lkIHRyYWNlMl9jbWRfbGlzdF9lbnZfdmFyc19mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwl0cjJfbGlzdF9lbnZfdmFyc19mbChmaWxlLCBsaW5lKTsKK30KKwordm9pZCB0cmFjZTJfY21kX3NldF9jb25maWdfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmtleSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdHJhY2UyX2VuYWJsZWQpCisJCXJldHVybjsKKworCXRyMl9jZmdfc2V0X2ZsKGZpbGUsIGxpbmUsIGtleSwgdmFsdWUpOworfQorCit2b2lkIHRyYWNlMl9jaGlsZF9zdGFydF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCSAgIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCXVpbnQ2NF90IHVzX25vdzsKKwl1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJdXNfbm93ID0gZ2V0bmFub3RpbWUoKSAvIDEwMDA7CisJdXNfZWxhcHNlZF9hYnNvbHV0ZSA9IHRyMnRsc19hYnNvbHV0ZV9lbGFwc2VkKHVzX25vdyk7CisKKwljbWQtPnRyYWNlMl9jaGlsZF9pZCA9IHRyMnRsc19sb2NrZWRfaW5jcmVtZW50KCZ0cjJfbmV4dF9jaGlsZF9pZCk7CisJY21kLT50cmFjZTJfY2hpbGRfdXNfc3RhcnQgPSB1c19ub3c7CisKKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX2NoaWxkX3N0YXJ0X2ZsKQorCQkJdGd0X2otPnBmbl9jaGlsZF9zdGFydF9mbChmaWxlLCBsaW5lLAorCQkJCQkJICB1c19lbGFwc2VkX2Fic29sdXRlLCBjbWQpOworfQorCit2b2lkIHRyYWNlMl9jaGlsZF9leGl0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kLAorCQkJICBpbnQgY2hpbGRfZXhpdF9jb2RlKQoreworCXN0cnVjdCB0cjJfdGd0ICp0Z3RfajsKKwlpbnQgajsKKwl1aW50NjRfdCB1c19ub3c7CisJdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZTsKKwl1aW50NjRfdCB1c19lbGFwc2VkX2NoaWxkOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJdXNfbm93ID0gZ2V0bmFub3RpbWUoKSAvIDEwMDA7CisJdXNfZWxhcHNlZF9hYnNvbHV0ZSA9IHRyMnRsc19hYnNvbHV0ZV9lbGFwc2VkKHVzX25vdyk7CisKKwlpZiAoY21kLT50cmFjZTJfY2hpbGRfdXNfc3RhcnQpCisJCXVzX2VsYXBzZWRfY2hpbGQgPSB1c19ub3cgLSBjbWQtPnRyYWNlMl9jaGlsZF91c19zdGFydDsKKwllbHNlCisJCXVzX2VsYXBzZWRfY2hpbGQgPSAwOworCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl9jaGlsZF9leGl0X2ZsKQorCQkJdGd0X2otPnBmbl9jaGlsZF9leGl0X2ZsKGZpbGUsIGxpbmUsCisJCQkJCQkgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCQkJCSBjbWQtPnRyYWNlMl9jaGlsZF9pZCwgY21kLT5waWQsCisJCQkJCQkgY2hpbGRfZXhpdF9jb2RlLAorCQkJCQkJIHVzX2VsYXBzZWRfY2hpbGQpOworfQorCitpbnQgdHJhY2UyX2V4ZWNfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmV4ZSwKKwkJICAgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCWludCBleGVjX2lkOworCXVpbnQ2NF90IHVzX25vdzsKKwl1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuIC0xOworCisJdXNfbm93ID0gZ2V0bmFub3RpbWUoKSAvIDEwMDA7CisJdXNfZWxhcHNlZF9hYnNvbHV0ZSA9IHRyMnRsc19hYnNvbHV0ZV9lbGFwc2VkKHVzX25vdyk7CisKKwlleGVjX2lkID0gdHIydGxzX2xvY2tlZF9pbmNyZW1lbnQoJnRyMl9uZXh0X2V4ZWNfaWQpOworCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl9leGVjX2ZsKQorCQkJdGd0X2otPnBmbl9leGVjX2ZsKGZpbGUsIGxpbmUsIHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkJCSAgIGV4ZWNfaWQsIGV4ZSwgYXJndik7CisKKwlyZXR1cm4gZXhlY19pZDsKK30KKwordm9pZCB0cmFjZTJfZXhlY19yZXN1bHRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBleGVjX2lkLCBpbnQgY29kZSkKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJaW50IGo7CisJdWludDY0X3QgdXNfbm93OworCXVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGU7CisKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwl1c19ub3cgPSBnZXRuYW5vdGltZSgpIC8gMTAwMDsKKwl1c19lbGFwc2VkX2Fic29sdXRlID0gdHIydGxzX2Fic29sdXRlX2VsYXBzZWQodXNfbm93KTsKKworCWZvcl9lYWNoX3dhbnRlZF9idWlsdGluIChqLCB0Z3RfaikKKwkJaWYgKHRndF9qLT5wZm5fZXhlY19yZXN1bHRfZmwpCisJCQl0Z3Rfai0+cGZuX2V4ZWNfcmVzdWx0X2ZsKAorCQkJCWZpbGUsIGxpbmUsIHVzX2VsYXBzZWRfYWJzb2x1dGUsIGV4ZWNfaWQsIGNvZGUpOworfQorCit2b2lkIHRyYWNlMl90aHJlYWRfc3RhcnRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnRocmVhZF9uYW1lKQoreworCXN0cnVjdCB0cjJfdGd0ICp0Z3RfajsKKwlpbnQgajsKKwl1aW50NjRfdCB1c19ub3c7CisJdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZTsKKworCWlmICghdHJhY2UyX2VuYWJsZWQpCisJCXJldHVybjsKKworCWlmICh0cjJ0bHNfaXNfbWFpbl90aHJlYWQoKSkgeworCQkvKgorCQkgKiBXZSBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IHRocmVhZCdzIHRocmVhZC1wcm9jLAorCQkgKiBzbyB0aGlzIGlzIHRlY2huaWNhbGx5IGEgYnVnLiAgQnV0IGluIHRob3NlIGNhc2VzIHdoZXJlIHRoZQorCQkgKiBtYWluIHRocmVhZCBhbHNvIHJ1bnMgdGhlIHRocmVhZC1wcm9jIGZ1bmN0aW9uIChvciB3aGVuIHdlCisJCSAqIGFyZSBidWlsdCB3aXRoIHRocmVhZGluZyBkaXNhYmxlZCksIHdlIG5lZWQgdG8gYWxsb3cgaXQuCisJCSAqCisJCSAqIENvbnZlcnQgdGhpcyBjYWxsIHRvIGEgcmVnaW9uLWVudGVyIHNvIHRoZSBuZXN0aW5nIGxvb2tzCisJCSAqIGNvcnJlY3QuCisJCSAqLworCQl0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50Zl9mbChmaWxlLCBsaW5lLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCQkgICAgICAidGhyZWFkLXByb2Mgb24gbWFpbjogJXMiLAorCQkJCQkgICAgICB0aHJlYWRfbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwl1c19ub3cgPSBnZXRuYW5vdGltZSgpIC8gMTAwMDsKKwl1c19lbGFwc2VkX2Fic29sdXRlID0gdHIydGxzX2Fic29sdXRlX2VsYXBzZWQodXNfbm93KTsKKworCXRyMnRsc19jcmVhdGVfc2VsZih0aHJlYWRfbmFtZSwgdXNfbm93KTsKKworCWZvcl9lYWNoX3dhbnRlZF9idWlsdGluIChqLCB0Z3RfaikKKwkJaWYgKHRndF9qLT5wZm5fdGhyZWFkX3N0YXJ0X2ZsKQorCQkJdGd0X2otPnBmbl90aHJlYWRfc3RhcnRfZmwoZmlsZSwgbGluZSwKKwkJCQkJCSAgIHVzX2VsYXBzZWRfYWJzb2x1dGUpOworfQorCit2b2lkIHRyYWNlMl90aHJlYWRfZXhpdF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJaW50IGo7CisJdWludDY0X3QgdXNfbm93OworCXVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGU7CisJdWludDY0X3QgdXNfZWxhcHNlZF90aHJlYWQ7CisKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwlpZiAodHIydGxzX2lzX21haW5fdGhyZWFkKCkpIHsKKwkJLyoKKwkJICogV2Ugc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIGV4aXRpbmcgdGhyZWFkJ3MKKwkJICogdGhyZWFkLXByb2MsIHNvIHRoaXMgaXMgdGVjaG5pY2FsbHkgYSBidWcuICBCdXQgaW4KKwkJICogdGhvc2UgY2FzZXMgd2hlcmUgdGhlIG1haW4gdGhyZWFkIGFsc28gcnVucyB0aGUKKwkJICogdGhyZWFkLXByb2MgZnVuY3Rpb24gKG9yIHdoZW4gd2UgYXJlIGJ1aWx0IHdpdGgKKwkJICogdGhyZWFkaW5nIGRpc2FibGVkKSwgd2UgbmVlZCB0byBhbGxvdyBpdC4KKwkJICoKKwkJICogQ29udmVydCB0aGlzIGNhbGwgdG8gYSByZWdpb24tbGVhdmUgc28gdGhlIG5lc3RpbmcKKwkJICogbG9va3MgY29ycmVjdC4KKwkJICovCisJCXRyYWNlMl9yZWdpb25fbGVhdmVfcHJpbnRmX2ZsKGZpbGUsIGxpbmUsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJCSAgICAgICJ0aHJlYWQtcHJvYyBvbiBtYWluIik7CisJCXJldHVybjsKKwl9CisKKwl1c19ub3cgPSBnZXRuYW5vdGltZSgpIC8gMTAwMDsKKwl1c19lbGFwc2VkX2Fic29sdXRlID0gdHIydGxzX2Fic29sdXRlX2VsYXBzZWQodXNfbm93KTsKKworCS8qCisJICogQ2xlYXIgYW55IHVuYmFsYW5jZWQgcmVnaW9ucyBhbmQgdGhlbiBnZXQgdGhlIHJlbGF0aXZlIHRpbWUKKwkgKiBmb3IgdGhlIG91dGVyLW1vc3QgcmVnaW9uICh3aGljaCB3ZSBwdXNoZWQgd2hlbiB0aGUgdGhyZWFkCisJICogc3RhcnRlZCkuICBUaGlzIGdpdmVzIHVzIHRoZSBydW4gdGltZSBvZiB0aGUgdGhyZWFkLgorCSAqLworCXRyMnRsc19wb3BfdW53aW5kX3NlbGYoKTsKKwl1c19lbGFwc2VkX3RocmVhZCA9IHRyMnRsc19yZWdpb25fZWxhc3BlZF9zZWxmKHVzX25vdyk7CisKKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX3RocmVhZF9leGl0X2ZsKQorCQkJdGd0X2otPnBmbl90aHJlYWRfZXhpdF9mbChmaWxlLCBsaW5lLAorCQkJCQkJICB1c19lbGFwc2VkX2Fic29sdXRlLAorCQkJCQkJICB1c19lbGFwc2VkX3RocmVhZCk7CisKKwl0cjJ0bHNfdW5zZXRfc2VsZigpOworfQorCit2b2lkIHRyYWNlMl9kZWZfcGFyYW1fZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnBhcmFtLAorCQkJIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCB0cjJfdGd0ICp0Z3RfajsKKwlpbnQgajsKKworCWlmICghdHJhY2UyX2VuYWJsZWQpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3dhbnRlZF9idWlsdGluIChqLCB0Z3RfaikKKwkJaWYgKHRndF9qLT5wZm5fcGFyYW1fZmwpCisJCQl0Z3Rfai0+cGZuX3BhcmFtX2ZsKGZpbGUsIGxpbmUsIHBhcmFtLCB2YWx1ZSk7Cit9CisKK3ZvaWQgdHJhY2UyX2RlZl9yZXBvX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbykKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJaW50IGo7CisKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwlpZiAocmVwby0+dHJhY2UyX3JlcG9faWQpCisJCXJldHVybjsKKworCXJlcG8tPnRyYWNlMl9yZXBvX2lkID0gdHIydGxzX2xvY2tlZF9pbmNyZW1lbnQoJnRyMl9uZXh0X3JlcG9faWQpOworCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl9yZXBvX2ZsKQorCQkJdGd0X2otPnBmbl9yZXBvX2ZsKGZpbGUsIGxpbmUsIHJlcG8pOworfQorCit2b2lkIHRyYWNlMl9yZWdpb25fZW50ZXJfcHJpbnRmX3ZhX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBjaGFyICpsYWJlbCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQkgICAgICBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCXVpbnQ2NF90IHVzX25vdzsKKwl1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJdXNfbm93ID0gZ2V0bmFub3RpbWUoKSAvIDEwMDA7CisJdXNfZWxhcHNlZF9hYnNvbHV0ZSA9IHRyMnRsc19hYnNvbHV0ZV9lbGFwc2VkKHVzX25vdyk7CisKKwkvKgorCSAqIFByaW50IHRoZSByZWdpb24tZW50ZXIgbWVzc2FnZSBhdCB0aGUgY3VycmVudCBuZXN0aW5nCisJICogKGluZGVudGF0aW9uKSBsZXZlbCBhbmQgdGhlbiBwdXNoIGEgbmV3IGxldmVsLgorCSAqCisJICogV2UgZXhwZWN0IGVhY2ggdGFyZ2V0IGZ1bmN0aW9uIHRvIHRyZWF0ICdhcCcgYXMgY29uc3RhbnQKKwkgKiBhbmQgdXNlIHZhX2NvcHkuCisJICovCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl9yZWdpb25fZW50ZXJfcHJpbnRmX3ZhX2ZsKQorCQkJdGd0X2otPnBmbl9yZWdpb25fZW50ZXJfcHJpbnRmX3ZhX2ZsKAorCQkJCWZpbGUsIGxpbmUsIHVzX2VsYXBzZWRfYWJzb2x1dGUsIGNhdGVnb3J5LAorCQkJCWxhYmVsLCByZXBvLCBmbXQsIGFwKTsKKworCXRyMnRsc19wdXNoX3NlbGYodXNfbm93KTsKK30KKwordm9pZCB0cmFjZTJfcmVnaW9uX2VudGVyX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpjYXRlZ29yeSwKKwkJCSAgICBjb25zdCBjaGFyICpsYWJlbCwgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCByZXBvKTsKKwl0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50Zl92YV9mbChmaWxlLCBsaW5lLCBjYXRlZ29yeSwgbGFiZWwsIHJlcG8sCisJCQkJCSBOVUxMLCBhcCk7CisJdmFfZW5kKGFwKTsKKworfQorCit2b2lkIHRyYWNlMl9yZWdpb25fZW50ZXJfcHJpbnRmX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCSAgIGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBjaGFyICpsYWJlbCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQkgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdHJhY2UyX3JlZ2lvbl9lbnRlcl9wcmludGZfdmFfZmwoZmlsZSwgbGluZSwgY2F0ZWdvcnksIGxhYmVsLCByZXBvLCBmbXQsCisJCQkJCSBhcCk7CisJdmFfZW5kKGFwKTsKK30KKworI2lmbmRlZiBIQVZFX1ZBUklBRElDX01BQ1JPUwordm9pZCB0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50Zihjb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbGFiZWwsCisJCQkJY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmZtdCwKKwkJCQkuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXRyYWNlMl9yZWdpb25fZW50ZXJfcHJpbnRmX3ZhX2ZsKE5VTEwsIDAsIGNhdGVnb3J5LCBsYWJlbCwgcmVwbywgZm10LAorCQkJCQkgYXApOworCXZhX2VuZChhcCk7Cit9CisjZW5kaWYKKwordm9pZCB0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50Zl92YV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCQkgICAgICBjb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbGFiZWwsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkJICAgICAgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCXN0cnVjdCB0cjJfdGd0ICp0Z3RfajsKKwlpbnQgajsKKwl1aW50NjRfdCB1c19ub3c7CisJdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZTsKKwl1aW50NjRfdCB1c19lbGFwc2VkX3JlZ2lvbjsKKworCWlmICghdHJhY2UyX2VuYWJsZWQpCisJCXJldHVybjsKKworCXVzX25vdyA9IGdldG5hbm90aW1lKCkgLyAxMDAwOworCXVzX2VsYXBzZWRfYWJzb2x1dGUgPSB0cjJ0bHNfYWJzb2x1dGVfZWxhcHNlZCh1c19ub3cpOworCisJLyoKKwkgKiBHZXQgdGhlIGVsYXBzZWQgdGltZSBpbiB0aGUgY3VycmVudCByZWdpb24gYmVmb3JlIHdlCisJICogcG9wIGl0IG9mZiB0aGUgc3RhY2suICBQb3AgdGhlIHN0YWNrLiAgQW5kIHRoZW4gcHJpbnQKKwkgKiB0aGUgcGVyZiBtZXNzYWdlIGF0IHRoZSBuZXcgKHNoYWxsb3dlcikgbGV2ZWwgc28gdGhhdAorCSAqIGl0IGxpbmVzIHVwIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgcHVzaC9lbnRlci4KKwkgKi8KKwl1c19lbGFwc2VkX3JlZ2lvbiA9IHRyMnRsc19yZWdpb25fZWxhc3BlZF9zZWxmKHVzX25vdyk7CisKKwl0cjJ0bHNfcG9wX3NlbGYoKTsKKworCS8qCisJICogV2UgZXhwZWN0IGVhY2ggdGFyZ2V0IGZ1bmN0aW9uIHRvIHRyZWF0ICdhcCcgYXMgY29uc3RhbnQKKwkgKiBhbmQgdXNlIHZhX2NvcHkuCisJICovCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl9yZWdpb25fbGVhdmVfcHJpbnRmX3ZhX2ZsKQorCQkJdGd0X2otPnBmbl9yZWdpb25fbGVhdmVfcHJpbnRmX3ZhX2ZsKAorCQkJCWZpbGUsIGxpbmUsIHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkJdXNfZWxhcHNlZF9yZWdpb24sIGNhdGVnb3J5LCBsYWJlbCwgcmVwbywgZm10LAorCQkJCWFwKTsKK30KKwordm9pZCB0cmFjZTJfcmVnaW9uX2xlYXZlX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpjYXRlZ29yeSwKKwkJCSAgICBjb25zdCBjaGFyICpsYWJlbCwgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCByZXBvKTsKKwl0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50Zl92YV9mbChmaWxlLCBsaW5lLCBjYXRlZ29yeSwgbGFiZWwsIHJlcG8sCisJCQkJCSBOVUxMLCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKwordm9pZCB0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50Zl9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCQkgICBjb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbGFiZWwsCisJCQkJICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkJICAgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXRyYWNlMl9yZWdpb25fbGVhdmVfcHJpbnRmX3ZhX2ZsKGZpbGUsIGxpbmUsIGNhdGVnb3J5LCBsYWJlbCwgcmVwbywgZm10LAorCQkJCQkgYXApOworCXZhX2VuZChhcCk7Cit9CisKKyNpZm5kZWYgSEFWRV9WQVJJQURJQ19NQUNST1MKK3ZvaWQgdHJhY2UyX3JlZ2lvbl9sZWF2ZV9wcmludGYoY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLAorCQkJCWNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpmbXQsCisJCQkJLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50Zl92YV9mbChOVUxMLCAwLCBjYXRlZ29yeSwgbGFiZWwsIHJlcG8sIGZtdCwKKwkJCQkJIGFwKTsKKwl2YV9lbmQoYXApOworfQorI2VuZGlmCisKK3ZvaWQgdHJhY2UyX2RhdGFfc3RyaW5nX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpjYXRlZ29yeSwKKwkJCSAgIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICprZXksCisJCQkgICBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJaW50IGo7CisJdWludDY0X3QgdXNfbm93OworCXVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGU7CisJdWludDY0X3QgdXNfZWxhcHNlZF9yZWdpb247CisKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwl1c19ub3cgPSBnZXRuYW5vdGltZSgpIC8gMTAwMDsKKwl1c19lbGFwc2VkX2Fic29sdXRlID0gdHIydGxzX2Fic29sdXRlX2VsYXBzZWQodXNfbm93KTsKKwl1c19lbGFwc2VkX3JlZ2lvbiA9IHRyMnRsc19yZWdpb25fZWxhc3BlZF9zZWxmKHVzX25vdyk7CisKKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX2RhdGFfZmwpCisJCQl0Z3Rfai0+cGZuX2RhdGFfZmwoZmlsZSwgbGluZSwgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCQkJICAgdXNfZWxhcHNlZF9yZWdpb24sIGNhdGVnb3J5LCByZXBvLAorCQkJCQkgICBrZXksIHZhbHVlKTsKK30KKwordm9pZCB0cmFjZTJfZGF0YV9pbnRtYXhfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAorCQkJICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmtleSwKKwkJCSAgIGludG1heF90IHZhbHVlKQoreworCXN0cnVjdCBzdHJidWYgYnVmX3N0cmluZyA9IFNUUkJVRl9JTklUOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJc3RyYnVmX2FkZGYoJmJ1Zl9zdHJpbmcsICIlIiBQUklkTUFYLCB2YWx1ZSk7CisJdHJhY2UyX2RhdGFfc3RyaW5nX2ZsKGZpbGUsIGxpbmUsIGNhdGVnb3J5LCByZXBvLCBrZXksIGJ1Zl9zdHJpbmcuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmX3N0cmluZyk7Cit9CisKK3ZvaWQgdHJhY2UyX2RhdGFfanNvbl9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqY2F0ZWdvcnksCisJCQkgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmtleSwKKwkJCSBjb25zdCBzdHJ1Y3QganNvbl93cml0ZXIgKnZhbHVlKQoreworCXN0cnVjdCB0cjJfdGd0ICp0Z3RfajsKKwlpbnQgajsKKwl1aW50NjRfdCB1c19ub3c7CisJdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZTsKKwl1aW50NjRfdCB1c19lbGFwc2VkX3JlZ2lvbjsKKworCWlmICghdHJhY2UyX2VuYWJsZWQpCisJCXJldHVybjsKKworCXVzX25vdyA9IGdldG5hbm90aW1lKCkgLyAxMDAwOworCXVzX2VsYXBzZWRfYWJzb2x1dGUgPSB0cjJ0bHNfYWJzb2x1dGVfZWxhcHNlZCh1c19ub3cpOworCXVzX2VsYXBzZWRfcmVnaW9uID0gdHIydGxzX3JlZ2lvbl9lbGFzcGVkX3NlbGYodXNfbm93KTsKKworCWZvcl9lYWNoX3dhbnRlZF9idWlsdGluIChqLCB0Z3RfaikKKwkJaWYgKHRndF9qLT5wZm5fZGF0YV9qc29uX2ZsKQorCQkJdGd0X2otPnBmbl9kYXRhX2pzb25fZmwoZmlsZSwgbGluZSwgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCQkJCXVzX2VsYXBzZWRfcmVnaW9uLCBjYXRlZ29yeSwKKwkJCQkJCXJlcG8sIGtleSwgdmFsdWUpOworfQorCit2b2lkIHRyYWNlMl9wcmludGZfdmFfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwKKwkJCSB2YV9saXN0IGFwKQoreworCXN0cnVjdCB0cjJfdGd0ICp0Z3RfajsKKwlpbnQgajsKKwl1aW50NjRfdCB1c19ub3c7CisJdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZTsKKworCWlmICghdHJhY2UyX2VuYWJsZWQpCisJCXJldHVybjsKKworCXVzX25vdyA9IGdldG5hbm90aW1lKCkgLyAxMDAwOworCXVzX2VsYXBzZWRfYWJzb2x1dGUgPSB0cjJ0bHNfYWJzb2x1dGVfZWxhcHNlZCh1c19ub3cpOworCisJLyoKKwkgKiBXZSBleHBlY3QgZWFjaCB0YXJnZXQgZnVuY3Rpb24gdG8gdHJlYXQgJ2FwJyBhcyBjb25zdGFudAorCSAqIGFuZCB1c2UgdmFfY29weS4KKwkgKi8KKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX3ByaW50Zl92YV9mbCkKKwkJCXRndF9qLT5wZm5fcHJpbnRmX3ZhX2ZsKGZpbGUsIGxpbmUsIHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkJCQlmbXQsIGFwKTsKK30KKwordm9pZCB0cmFjZTJfcHJpbnRmX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdHJhY2UyX3ByaW50Zl92YV9mbChmaWxlLCBsaW5lLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCisjaWZuZGVmIEhBVkVfVkFSSUFESUNfTUFDUk9TCit2b2lkIHRyYWNlMl9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXRyYWNlMl9wcmludGZfdmFfZmwoTlVMTCwgMCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdHJhY2UyLmggYi90cmFjZTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMThiYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyLmgKQEAgLTAsMCArMSw1MDMgQEAKKyNpZm5kZWYgVFJBQ0UyX0gKKyNkZWZpbmUgVFJBQ0UyX0gKKworLyoqCisgKiBUaGUgVHJhY2UyIEFQSSBjYW4gYmUgdXNlZCB0byBwcmludCBkZWJ1ZywgcGVyZm9ybWFuY2UsIGFuZCB0ZWxlbWV0cnkKKyAqIGluZm9ybWF0aW9uIHRvIHN0ZGVyciBvciBhIGZpbGUuICBUaGUgVHJhY2UyIGZlYXR1cmUgaXMgaW5hY3RpdmUgdW5sZXNzCisgKiBleHBsaWNpdGx5IGVuYWJsZWQgYnkgZW5hYmxpbmcgb25lIG9yIG1vcmUgVHJhY2UyIFRhcmdldHMuCisgKgorICogVGhlIFRyYWNlMiBBUEkgaXMgaW50ZW5kZWQgdG8gcmVwbGFjZSB0aGUgZXhpc3RpbmcgKFRyYWNlMSkKKyAqIHByaW50Zi1zdHlsZSB0cmFjaW5nIHByb3ZpZGVkIGJ5IHRoZSBleGlzdGluZyBgR0lUX1RSQUNFYCBhbmQKKyAqIGBHSVRfVFJBQ0VfUEVSRk9STUFOQ0VgIGZhY2lsaXRpZXMuICBEdXJpbmcgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiwKKyAqIFRyYWNlMiBhbmQgVHJhY2UxIG1heSBvcGVyYXRlIGluIHBhcmFsbGVsLgorICoKKyAqIFRoZSBUcmFjZTIgQVBJIGRlZmluZXMgYSBzZXQgb2YgaGlnaC1sZXZlbCBtZXNzYWdlcyB3aXRoIGtub3duIGZpZWxkcywKKyAqIHN1Y2ggYXMgKGBzdGFydGA6IGBhcmd2YCkgYW5kIChgZXhpdGA6IHtgZXhpdC1jb2RlYCwgYGVsYXBzZWQtdGltZWB9KS4KKyAqCisgKiBUcmFjZTIgaW5zdHJ1bWVudGF0aW9uIHRocm91Z2hvdXQgdGhlIEdpdCBjb2RlIGJhc2Ugc2VuZHMgVHJhY2UyCisgKiBtZXNzYWdlcyB0byB0aGUgZW5hYmxlZCBUcmFjZTIgVGFyZ2V0cy4gIFRhcmdldHMgdHJhbnNmb3JtIHRoZXNlCisgKiBtZXNzYWdlcyBjb250ZW50IGludG8gcHVycG9zZS1zcGVjaWZpYyBmb3JtYXRzIGFuZCB3cml0ZSBldmVudHMgdG8KKyAqIHRoZWlyIGRhdGEgc3RyZWFtcy4gIEluIHRoaXMgbWFubmVyLCB0aGUgVHJhY2UyIEFQSSBjYW4gZHJpdmUKKyAqIG1hbnkgZGlmZmVyZW50IHR5cGVzIG9mIGFuYWx5c2lzLgorICoKKyAqIFRhcmdldHMgYXJlIGRlZmluZWQgdXNpbmcgYSBWVGFibGUgYWxsb3dpbmcgZWFzeSBleHRlbnNpb24gdG8gb3RoZXIKKyAqIGZvcm1hdHMgaW4gdGhlIGZ1dHVyZS4gIFRoaXMgbWlnaHQgYmUgdXNlZCB0byBkZWZpbmUgYSBiaW5hcnkgZm9ybWF0LAorICogZm9yIGV4YW1wbGUuCisgKgorICogVHJhY2UyIGlzIGNvbnRyb2xsZWQgdXNpbmcgYHRyYWNlMi4qYCBjb25maWcgdmFsdWVzIGluIHRoZSBzeXN0ZW0gYW5kCisgKiBnbG9iYWwgY29uZmlnIGZpbGVzIGFuZCBgR0lUX1RSQUNFMipgIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIFRyYWNlMiBkb2VzCisgKiBub3QgcmVhZCBmcm9tIHJlcG8gbG9jYWwgb3Igd29ya3RyZWUgY29uZmlnIGZpbGVzIG9yIHJlc3BlY3QgYC1jYAorICogY29tbWFuZCBsaW5lIGNvbmZpZyBzZXR0aW5ncy4KKyAqCisgKiBGb3IgbW9yZSBpbmZvIGFib3V0OiB0cmFjZTIgdGFyZ2V0cywgY29udmVudGlvbnMgZm9yIHB1YmxpYyBmdW5jdGlvbnMgYW5kCisgKiBtYWNyb3MsIHRyYWNlMiB0YXJnZXQgZm9ybWF0cyBhbmQgZXhhbXBsZXMgb24gdHJhY2UyIEFQSSB1c2FnZSByZWZlciB0bworICogRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyYWNlMi50eHQKKyAqCisgKi8KKworc3RydWN0IGNoaWxkX3Byb2Nlc3M7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKK3N0cnVjdCBqc29uX3dyaXRlcjsKKworLyoKKyAqIFRoZSBwdWJsaWMgVFJBQ0UyIHJvdXRpbmVzIGFyZSBncm91cGVkIGludG8gdGhlIGZvbGxvd2luZyBncm91cHM6CisgKgorICogW10gdHJhY2UyX2luaXRpYWxpemUgLS0gaW5pdGlhbGl6YXRpb24uCisgKiBbXSB0cmFjZTJfY21kXyogICAgICAtLSBlbWl0IGNvbW1hbmQvY29udHJvbCBtZXNzYWdlcy4KKyAqIFtdIHRyYWNlMl9jaGlsZCogICAgIC0tIGVtaXQgY2hpbGQgc3RhcnQvc3RvcCBtZXNzYWdlcy4KKyAqIFtdIHRyYWNlMl9leGVjKiAgICAgIC0tIGVtaXQgZXhlYyBzdGFydC9zdG9wIG1lc3NhZ2VzLgorICogW10gdHJhY2UyX3RocmVhZCogICAgLS0gZW1pdCB0aHJlYWQgc3RhcnQvc3RvcCBtZXNzYWdlcy4KKyAqIFtdIHRyYWNlMl9kZWYqICAgICAgIC0tIGVtaXQgZGVmaW5pdGlvbi9wYXJhbWV0ZXIgbWVzYXNnZXMuCisgKiBbXSB0cmFjZTJfcmVnaW9uKiAgICAtLSBlbWl0IHJlZ2lvbiBuZXN0aW5nIG1lc3NhZ2VzLgorICogW10gdHJhY2UyX2RhdGEqICAgICAgLS0gZW1pdCByZWdpb24vdGhyZWFkL3JlcG8gZGF0YSBtZXNzYWdlcy4KKyAqIFtdIHRyYWNlMl9wcmludGYqICAgIC0tIGxlZ2FjeSB0cmFjZVsxXSBtZXNzYWdlcy4KKyAqLworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgVFJBQ0UyIGNsb2NrIGFuZCBkbyBub3RoaW5nIGVsc2UsIGluIHBhcnRpY3VsYXIKKyAqIG5vIG1hbGxvY3MsIG5vIHN5c3RlbSBpbnNwZWN0aW9uLCBhbmQgbm8gZW52aXJvbm1lbnQgaW5zcGVjdGlvbi4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYXQgdGhlIHZlcnkgdG9wIG9mIG1haW4oKSB0byBjYXB0dXJlIHRoZQorICogcHJvY2VzcyBzdGFydCB0aW1lLiAgVGhpcyBpcyBpbnRlbmRlZCB0byByZWR1Y2UgY2hpY2tlbi1uLWVnZworICogYm9vdHN0cmFwIHByZXNzdXJlLgorICoKKyAqIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIG1vcmUgdGhhbiBvbmNlLiAgVGhpcyBhbGxvd3MgY2FwdHVyaW5nCisgKiBhYnNvbHV0ZSBzdGFydHVwIGNvc3RzIG9uIFdpbmRvd3Mgd2hpY2ggdXNlcyBhIGxpdHRsZSB0cmlja2VyeQorICogdG8gZG8gc2V0dXAgd29yayBiZWZvcmUgY29tbW9uLW1haW4uYzptYWluKCkgaXMgY2FsbGVkLgorICoKKyAqIFRoZSBtYWluIHRyYWNlMl9pbml0aWFsaXplX2ZsKCkgbWF5IGJlIGNhbGxlZCBhIGxpdHRsZSBsYXRlcgorICogYWZ0ZXIgbW9yZSBpbmZyYXN0cnVjdHVyZSBpcyBlc3RhYmxpc2hlZC4KKyAqLwordm9pZCB0cmFjZTJfaW5pdGlhbGl6ZV9jbG9jayh2b2lkKTsKKworLyoKKyAqIEluaXRpYWxpemUgVFJBQ0UyIHRyYWNpbmcgZmFjaWxpdHkgaWYgYW55IG9mIHRoZSBidWlsdGluIFRSQUNFMgorICogdGFyZ2V0cyBhcmUgZW5hYmxlZCBpbiB0aGUgc3lzdGVtIGNvbmZpZyBvciB0aGUgZW52aXJvbm1lbnQuCisgKiBUaGlzIGluY2x1ZGVzIHNldHRpbmcgdXAgdGhlIFRyYWNlMiB0aHJlYWQgbG9jYWwgc3RvcmFnZSAoVExTKS4KKyAqIEVtaXRzIGEgJ3ZlcnNpb24nIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgdmVyc2lvbiBvZiBnaXQKKyAqIGFuZCB0aGUgVHJhY2UyIHByb3RvY29sLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIGBtYWluKClgIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGluCisgKiB0aGUgbGlmZSBvZiB0aGUgcHJvY2VzcyBhZnRlciBlc3NlbnRpYWwgcHJvY2VzcyBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBDbGVhbnVwL1Rlcm1pbmF0aW9uIGlzIGhhbmRsZWQgYXV0b21hdGljYWxseSBieSBhIHJlZ2lzdGVyZWQKKyAqIGF0ZXhpdCgpIHJvdXRpbmUuCisgKi8KK3ZvaWQgdHJhY2UyX2luaXRpYWxpemVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOworCisjZGVmaW5lIHRyYWNlMl9pbml0aWFsaXplKCkgdHJhY2UyX2luaXRpYWxpemVfZmwoX19GSUxFX18sIF9fTElORV9fKQorCisvKgorICogUmV0dXJuIDEgaWYgdHJhY2UyIGlzIGVuYWJsZWQgKGF0IGxlYXN0IG9uZSB0YXJnZXQgaXMgYWN0aXZlKS4KKyAqLworaW50IHRyYWNlMl9pc19lbmFibGVkKHZvaWQpOworCisvKgorICogRW1pdCBhICdzdGFydCcgZXZlbnQgd2l0aCB0aGUgb3JpZ2luYWwgKHVubW9kaWZpZWQpIGFyZ3YuCisgKi8KK3ZvaWQgdHJhY2UyX2NtZF9zdGFydF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqKmFyZ3YpOworCisjZGVmaW5lIHRyYWNlMl9jbWRfc3RhcnQoYXJndikgdHJhY2UyX2NtZF9zdGFydF9mbChfX0ZJTEVfXywgX19MSU5FX18sIChhcmd2KSkKKworLyoKKyAqIEVtaXQgYW4gJ2V4aXQnIGV2ZW50LgorICoKKyAqIFdyaXRlIHRoZSBleGl0LWNvZGUgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBleGl0KCkgb3IgcmV0dXJuZWQKKyAqIGZyb20gbWFpbigpLgorICoKKyAqIFVzZSB0aGlzIHByaW9yIHRvIGFjdHVhbGx5IGNhbGxpbmcgZXhpdCgpLgorICogU2VlICIjZGVmaW5lIGV4aXQoKSIgaW4gZ2l0LWNvbXBhdC11dGlsLmgKKyAqLworaW50IHRyYWNlMl9jbWRfZXhpdF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IGNvZGUpOworCisjZGVmaW5lIHRyYWNlMl9jbWRfZXhpdChjb2RlKSAodHJhY2UyX2NtZF9leGl0X2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKGNvZGUpKSkKKworLyoKKyAqIEVtaXQgYW4gJ2Vycm9yJyBldmVudC4KKyAqCisgKiBXcml0ZSBhbiBlcnJvciBtZXNzYWdlIHRvIHRoZSBUUkFDRTIgdGFyZ2V0cy4KKyAqLwordm9pZCB0cmFjZTJfY21kX2Vycm9yX3ZhX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsCisJCQkgICAgdmFfbGlzdCBhcCk7CisKKyNkZWZpbmUgdHJhY2UyX2NtZF9lcnJvcl92YShmbXQsIGFwKSBcCisJdHJhY2UyX2NtZF9lcnJvcl92YV9mbChfX0ZJTEVfXywgX19MSU5FX18sIChmbXQpLCAoYXApKQorCisvKgorICogRW1pdCBhICdwYXRobmFtZScgZXZlbnQgd2l0aCB0aGUgY2Fub25pY2FsIHBhdGhuYW1lIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MKKyAqIFRoaXMgZ2l2ZXMgcG9zdC1wcm9jZXNzb3JzIGEgc2ltcGxlIGZpZWxkIHRvIGlkZW50aWZ5IHRoZSBjb21tYW5kIHdpdGhvdXQKKyAqIGhhdmluZyB0byBwYXJzZSB0aGUgYXJndi4gIEZvciBleGFtcGxlLCB0byBkaXN0aW5ndWlzaCBpbnZvY2F0aW9ucyBmcm9tCisgKiBpbnN0YWxsZWQgdmVyc3VzIGRlYnVnIGV4ZWN1dGFibGVzLgorICovCit2b2lkIHRyYWNlMl9jbWRfcGF0aF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqcGF0aG5hbWUpOworCisjZGVmaW5lIHRyYWNlMl9jbWRfcGF0aChwKSB0cmFjZTJfY21kX3BhdGhfZmwoX19GSUxFX18sIF9fTElORV9fLCAocCkpCisKKy8qCisgKiBFbWl0IGEgJ2NtZF9uYW1lJyBldmVudCB3aXRoIHRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUgY29tbWFuZC4KKyAqIFRoaXMgZ2l2ZXMgcG9zdC1wcm9jZXNzb3JzIGEgc2ltcGxlIGZpZWxkIHRvIGlkZW50aWZ5IHRoZSBjb21tYW5kCisgKiB3aXRob3V0IGhhdmluZyB0byBwYXJzZSB0aGUgYXJndi4KKyAqLwordm9pZCB0cmFjZTJfY21kX25hbWVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm5hbWUpOworCisjZGVmaW5lIHRyYWNlMl9jbWRfbmFtZSh2KSB0cmFjZTJfY21kX25hbWVfZmwoX19GSUxFX18sIF9fTElORV9fLCAodikpCisKKy8qCisgKiBFbWl0IGEgJ2NtZF9tb2RlJyBldmVudCB0byBmdXJ0aGVyIGRlc2NyaWJlIHRoZSBjb21tYW5kIGJlaW5nIHJ1bi4KKyAqIEZvciBleGFtcGxlLCAiY2hlY2tvdXQiIGNhbiBjaGVja291dCBhIHNpbmdsZSBmaWxlIG9yIGNhbiBjaGVja291dCBhCisgKiBkaWZmZXJlbnQgYnJhbmNoLiAgVGhpcyBnaXZlcyBwb3N0LXByb2Nlc3NvcnMgYSBzaW1wbGUgZmllbGQgdG8gY29tcGFyZQorICogZXF1aXZhbGVudCBjb21tYW5kcyB3aXRob3V0IGhhdmluZyB0byBwYXJzZSB0aGUgYXJndi4KKyAqLwordm9pZCB0cmFjZTJfY21kX21vZGVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1vZGUpOworCisjZGVmaW5lIHRyYWNlMl9jbWRfbW9kZShzdikgdHJhY2UyX2NtZF9tb2RlX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKHN2KSkKKworLyoKKyAqIEVtaXRzIGFuICJhbGlhcyIgbWVzc2FnZSBjb250YWluaW5nIHRoZSBhbGlhcyB1c2VkIGFuZCB0aGUgYXJndW1lbnQKKyAqIGV4cGFuc2lvbi4KKyAqLwordm9pZCB0cmFjZTJfY21kX2FsaWFzX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICphbGlhcywKKwkJCSBjb25zdCBjaGFyICoqYXJndik7CisKKyNkZWZpbmUgdHJhY2UyX2NtZF9hbGlhcyhhbGlhcywgYXJndikgXAorCXRyYWNlMl9jbWRfYWxpYXNfZmwoX19GSUxFX18sIF9fTElORV9fLCAoYWxpYXMpLCAoYXJndikpCisKKy8qCisgKiBFbWl0IG9uZSBvciBtb3JlICdkZWZfcGFyYW0nIGV2ZW50cyBmb3IgImltcG9ydGFudCIgY29uZmlndXJhdGlvbgorICogc2V0dGluZ3MuCisgKgorICogVXNlIHRoZSBUUjJfU1lTRU5WX0NGR19QQVJBTSBzZXR0aW5nIHRvIHJlZ2lzdGVyIGEgY29tbWEtc2VwYXJhdGVkCisgKiBsaXN0IG9mIHBhdHRlcm5zIGNvbmZpZ3VyZWQgaW1wb3J0YW50LiAgRm9yIGV4YW1wbGU6CisgKiAgICAgZ2l0IGNvbmZpZyAtLXN5c3RlbSB0cmFjZTIuY29uZmlnUGFyYW1zICdjb3JlLioscmVtb3RlLioudXJsJworICogb3I6CisgKiAgICAgR0lUX1RSQUNFMl9DT05GSUdfUEFSQU1TPWNvcmUuKixyZW1vdGUuKi51cmwiCisgKgorICogTm90ZTogdGhpcyByb3V0aW5lIGRvZXMgYSByZWFkLW9ubHkgaXRlcmF0aW9uIG9uIHRoZSBjb25maWcgZGF0YQorICogKHVzaW5nIHJlYWRfZWFybHlfY29uZmlnKCkpLCBzbyBpdCBtdXN0IG5vdCBiZSBjYWxsZWQgdW50aWwgZW5vdWdoCisgKiBvZiB0aGUgcHJvY2VzcyBlbnZpcm9ubWVudCBoYXMgYmVlbiBlc3RhYmxpc2hlZC4gIFRoaXMgaW5jbHVkZXMgdGhlCisgKiBsb2NhdGlvbiBvZiB0aGUgZ2l0IGFuZCB3b3JrdHJlZSBkaXJlY3RvcmllcywgZXhwYW5zaW9uIG9mIGFueSAiLWMiCisgKiBhbmQgIi1DIiBjb21tYW5kIGxpbmUgb3B0aW9ucywgYW5kIGV0Yy4KKyAqLwordm9pZCB0cmFjZTJfY21kX2xpc3RfY29uZmlnX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTsKKworI2RlZmluZSB0cmFjZTJfY21kX2xpc3RfY29uZmlnKCkgdHJhY2UyX2NtZF9saXN0X2NvbmZpZ19mbChfX0ZJTEVfXywgX19MSU5FX18pCisKKy8qCisgKiBFbWl0IG9uZSBvciBtb3JlICdkZWZfcGFyYW0nIGV2ZW50cyBmb3IgImltcG9ydGFudCIgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorICoKKyAqIFVzZSB0aGUgVFIyX1NZU0VOVl9FTlZfVkFSUyBzZXR0aW5nIHRvIHJlZ2lzdGVyIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YKKyAqIGVudmlyb25tZW50IHZhcmlhYmxlcyBjb25zaWRlcmVkIGltcG9ydGFudC4gIEZvciBleGFtcGxlOgorICogICAgIGdpdCBjb25maWcgLS1zeXN0ZW0gdHJhY2UyLmVudlZhcnMgJ0dJVF9IVFRQX1VTRVJfQUdFTlQsR0lUX0NPTkZJRycKKyAqIG9yOgorICogICAgIEdJVF9UUkFDRTJfRU5WX1ZBUlM9IkdJVF9IVFRQX1VTRVJfQUdFTlQsR0lUX0NPTkZJRyIKKyAqLwordm9pZCB0cmFjZTJfY21kX2xpc3RfZW52X3ZhcnNfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOworCisjZGVmaW5lIHRyYWNlMl9jbWRfbGlzdF9lbnZfdmFycygpIHRyYWNlMl9jbWRfbGlzdF9lbnZfdmFyc19mbChfX0ZJTEVfXywgX19MSU5FX18pCisKKy8qCisgKiBFbWl0IGEgImRlZl9wYXJhbSIgZXZlbnQgZm9yIHRoZSBnaXZlbiBjb25maWcga2V5L3ZhbHVlIHBhaXIgSUYKKyAqIHdlIGNvbnNpZGVyIHRoZSBrZXkgdG8gYmUgImltcG9ydGFudCIuCisgKgorICogVXNlIHRoaXMgZm9yIG5ldy91cGRhdGVkIGNvbmZpZyBzZXR0aW5ncyBjcmVhdGVkL3VwZGF0ZWQgYWZ0ZXIKKyAqIHRyYWNlMl9jbWRfbGlzdF9jb25maWcoKSBpcyBjYWxsZWQuCisgKi8KK3ZvaWQgdHJhY2UyX2NtZF9zZXRfY29uZmlnX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICprZXksCisJCQkgICAgICBjb25zdCBjaGFyICp2YWx1ZSk7CisKKyNkZWZpbmUgdHJhY2UyX2NtZF9zZXRfY29uZmlnKGssIHYpIFwKKwl0cmFjZTJfY21kX3NldF9jb25maWdfZmwoX19GSUxFX18sIF9fTElORV9fLCAoayksICh2KSkKKworLyoqCisgKiBFbWl0cyBhICJjaGlsZF9zdGFydCIgbWVzc2FnZSBjb250YWluaW5nIHRoZSAiY2hpbGQtaWQiLAorICogImNoaWxkLWFyZ3YiLCBhbmQgImNoaWxkLWNsYXNzaWZpY2F0aW9uIi4KKyAqCisgKiBCZWZvcmUgY2FsbGluZyBvcHRpb25hbGx5IHNldCAiY21kLT50cmFjZTJfY2hpbGRfY2xhc3MiIHRvIGEgc3RyaW5nCisgKiBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIHRoZSBjaGlsZCBwcm9jZXNzLiAgRm9yIGV4YW1wbGUsICJlZGl0b3IiIG9yCisgKiAicGFnZXIiLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXNzaWducyBhIHVuaXF1ZSAiY2hpbGQtaWQiIHRvIGBjbWQtPnRyYWNlMl9jaGlsZF9pZGAuCisgKiBUaGlzIGZpZWxkIGlzIHVzZWQgbGF0ZXIgZHVyaW5nIHRoZSAiY2hpbGRfZXhpdCIgbWVzc2FnZSB0byBhc3NvY2lhdGUKKyAqIGl0IHdpdGggdGhlICJjaGlsZF9zdGFydCIgbWVzc2FnZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHNwYXduaW5nIHRoZSBjaGlsZCBwcm9jZXNzLgorICovCit2b2lkIHRyYWNlMl9jaGlsZF9zdGFydF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCSAgIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQpOworCisjZGVmaW5lIHRyYWNlMl9jaGlsZF9zdGFydChjbWQpIHRyYWNlMl9jaGlsZF9zdGFydF9mbChfX0ZJTEVfXywgX19MSU5FX18sIChjbWQpKQorCisvKioKKyAqIEVtaXRzIGEgImNoaWxkX2V4aXQiIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgImNoaWxkLWlkIiwKKyAqIHRoZSBjaGlsZCdzIGVsYXBzZWQgdGltZSBhbmQgZXhpdC1jb2RlLgorICoKKyAqIFRoZSByZXBvcnRlZCBlbGFwc2VkIHRpbWUgaW5jbHVkZXMgdGhlIHByb2Nlc3MgY3JlYXRpb24gb3ZlcmhlYWQgYW5kCisgKiB0aW1lIHNwZW5kIHdhaXRpbmcgZm9yIGl0IHRvIGV4aXQsIHNvIGl0IG1heSBiZSBzbGlnaHRseSBsb25nZXIgdGhhbgorICogdGhlIHRpbWUgcmVwb3J0ZWQgYnkgdGhlIGNoaWxkIGl0c2VsZi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcmVhcGluZyB0aGUgY2hpbGQgcHJvY2Vzcy4KKyAqLwordm9pZCB0cmFjZTJfY2hpbGRfZXhpdF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCwKKwkJCSAgaW50IGNoaWxkX2V4aXRfY29kZSk7CisKKyNkZWZpbmUgdHJhY2UyX2NoaWxkX2V4aXQoY21kLCBjb2RlKSBcCisJdHJhY2UyX2NoaWxkX2V4aXRfZmwoX19GSUxFX18sIF9fTElORV9fLCAoY21kKSwgKGNvZGUpKQorCisvKioKKyAqIEVtaXQgYW4gJ2V4ZWMnIGV2ZW50IHByaW9yIHRvIGNhbGxpbmcgb25lIG9mIGV4ZWMoKSwgZXhlY3YoKSwKKyAqIGV4ZWN2cCgpLCBhbmQgZXRjLiAgT24gVW5peC1kZXJpdmVkIHN5c3RlbXMsIHRoaXMgd2lsbCBiZSB0aGUKKyAqIGxhc3QgZXZlbnQgZW1pdHRlZCBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcywgdW5sZXNzIHRoZSBleGVjCisgKiBmYWlscy4gIE9uIFdpbmRvd3MsIGV4ZWMoKSBiZWhhdmVzIGxpa2UgJ2NoaWxkX3N0YXJ0JyBhbmQgYQorICogd2FpdHBpZCgpLCBzbyBhZGRpdGlvbmFsIGV2ZW50cyBtYXkgYmUgZW1pdHRlZC4KKyAqCisgKiBSZXR1cm5zIGEgdW5pcXVlICJleGVjLWlkIi4gIFRoaXMgdmFsdWUgaXMgdXNlZCBsYXRlcgorICogaWYgdGhlIGV4ZWMoKSBmYWlscyBhbmQgYSAiZXhlYy1yZXN1bHQiIG1lc3NhZ2UgaXMgbmVjZXNzYXJ5LgorICovCitpbnQgdHJhY2UyX2V4ZWNfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmV4ZSwKKwkJICAgY29uc3QgY2hhciAqKmFyZ3YpOworCisjZGVmaW5lIHRyYWNlMl9leGVjKGV4ZSwgYXJndikgdHJhY2UyX2V4ZWNfZmwoX19GSUxFX18sIF9fTElORV9fLCAoZXhlKSwgKGFyZ3YpKQorCisvKioKKyAqIEVtaXQgYW4gJ2V4ZWNfcmVzdWx0JyB3aGVuIHBvc3NpYmxlLiAgT24gVW5peC1kZXJpdmVkIHN5c3RlbXMsCisgKiB0aGlzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgZXhlYygpIHJldHVybnMgKHdoaWNoIG9ubHkgaGFwcGVucworICogd2hlbiB0aGVyZSBpcyBhbiBlcnJvciBzdGFydGluZyB0aGUgbmV3IHByb2Nlc3MpLiAgT24gV2luZG93cywKKyAqIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB0aGUgd2FpdHBpZCgpLgorICoKKyAqIFRoZSAiZXhlY19pZCIgc2hvdWxkIGJlIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIHRyYWNlMl9leGVjKCkuCisgKi8KK3ZvaWQgdHJhY2UyX2V4ZWNfcmVzdWx0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgZXhlY19pZCwgaW50IGNvZGUpOworCisjZGVmaW5lIHRyYWNlMl9leGVjX3Jlc3VsdChpZCwgY29kZSkgXAorCXRyYWNlMl9leGVjX3Jlc3VsdF9mbChfX0ZJTEVfXywgX19MSU5FX18sIChpZCksIChjb2RlKSkKKworLyoKKyAqIEVtaXQgYSAndGhyZWFkX3N0YXJ0JyBldmVudC4gIFRoaXMgbXVzdCBiZSBjYWxsZWQgZnJvbSBpbnNpZGUgdGhlCisgKiB0aHJlYWQtcHJvYyB0byBzZXQgdXAgdGhlIHRyYWNlMiBUTFMgZGF0YSBmb3IgdGhlIHRocmVhZC4KKyAqCisgKiBUaHJlYWQgbmFtZXMgc2hvdWxkIGJlIGRlc2NyaXB0aXZlLCBsaWtlICJwcmVsb2FkX2luZGV4Ii4KKyAqIFRocmVhZCBuYW1lcyB3aWxsIGJlIGRlY29yYXRlZCB3aXRoIGFuIGluc3RhbmNlIG51bWJlciBhdXRvbWF0aWNhbGx5LgorICovCit2b2lkIHRyYWNlMl90aHJlYWRfc3RhcnRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkgICAgY29uc3QgY2hhciAqdGhyZWFkX25hbWUpOworCisjZGVmaW5lIHRyYWNlMl90aHJlYWRfc3RhcnQodGhyZWFkX25hbWUpIFwKKwl0cmFjZTJfdGhyZWFkX3N0YXJ0X2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKHRocmVhZF9uYW1lKSkKKworLyoKKyAqIEVtaXQgYSAndGhyZWFkX2V4aXQnIGV2ZW50LiAgVGhpcyBtdXN0IGJlIGNhbGxlZCBmcm9tIGluc2lkZSB0aGUKKyAqIHRocmVhZC1wcm9jIHRvIHJlcG9ydCB0aHJlYWQtc3BlY2lmaWMgZGF0YSBhbmQgY2xlYW51cCBUTFMgZGF0YQorICogZm9yIHRoZSB0aHJlYWQuCisgKi8KK3ZvaWQgdHJhY2UyX3RocmVhZF9leGl0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTsKKworI2RlZmluZSB0cmFjZTJfdGhyZWFkX2V4aXQoKSB0cmFjZTJfdGhyZWFkX2V4aXRfZmwoX19GSUxFX18sIF9fTElORV9fKQorCisvKgorICogRW1pdHMgYSAiZGVmX3BhcmFtIiBtZXNzYWdlIGNvbnRhaW5pbmcgYSBrZXkvdmFsdWUgcGFpci4KKyAqCisgKiBUaGlzIG1lc3NhZ2UgaXMgaW50ZW5kZWQgdG8gcmVwb3J0IHNvbWUgZ2xvYmFsIGFzcGVjdCBvZiB0aGUgY3VycmVudAorICogY29tbWFuZCwgc3VjaCBhcyBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBvciBjb21tYW5kIGxpbmUgc3dpdGNoIHRoYXQKKyAqIHNpZ25pZmljYW50bHkgYWZmZWN0cyBwcm9ncmFtIHBlcmZvcm1hbmNlIG9yIGJlaGF2aW9yLCBzdWNoIGFzCisgKiBgY29yZS5hYmJyZXZgLCBgc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlc2AsIG9yIGAtLW5vLWFoZWFkLWJlaGluZGAuCisgKi8KK3ZvaWQgdHJhY2UyX2RlZl9wYXJhbV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqcGFyYW0sCisJCQkgY29uc3QgY2hhciAqdmFsdWUpOworCisjZGVmaW5lIHRyYWNlMl9kZWZfcGFyYW0ocGFyYW0sIHZhbHVlKSBcCisJdHJhY2UyX2RlZl9wYXJhbV9mbChfX0ZJTEVfXywgX19MSU5FX18sIChwYXJhbSksICh2YWx1ZSkpCisKKy8qCisgKiBUZWxsIHRyYWNlMiBhYm91dCBhIG5ld2x5IGluc3RhbnRpYXRlZCByZXBvIG9iamVjdCBhbmQgYXNzaWduCisgKiBhIHRyYWNlMi1yZXBvLWlkIHRvIGJlIHVzZWQgaW4gc3Vic2VxdWVudCBhY3Rpdml0eSBldmVudHMuCisgKgorICogRW1pdHMgYSAnd29ya3RyZWUnIGV2ZW50IGZvciB0aGlzIHJlcG8gaW5zdGFuY2UuCisgKgorICogUmVnaW9uIGFuZCBkYXRhIG1lc3NhZ2VzIG1heSByZWZlciB0byB0aGlzIHJlcG8taWQuCisgKgorICogVGhlIG1haW4vdG9wLWxldmVsIHJlcG9zaXRvcnkgd2lsbCBoYXZlIHJlcG8taWQgdmFsdWUgMSAoYWthICJyMSIpLgorICoKKyAqIFRoZSByZXBvLWlkIGZpZWxkIGlzIGluIGFudGljaXBhdGlvbiBvZiBmdXR1cmUgaW4tcHJvYyBzdWJtb2R1bGUKKyAqIHJlcG9zaXRvcmllcy4KKyAqLwordm9pZCB0cmFjZTJfZGVmX3JlcG9fZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvKTsKKworI2RlZmluZSB0cmFjZTJfZGVmX3JlcG8ocmVwbykgdHJhY2UyX2RlZl9yZXBvX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgcmVwbykKKworLyoqCisgKiBFbWl0IGEgJ3JlZ2lvbl9lbnRlcicgZXZlbnQgZm9yIDxjYXRlZ29yeT4uPGxhYmVsPiB3aXRoIG9wdGlvbmFsCisgKiByZXBvLWlkIGFuZCBwcmludGYgbWVzc2FnZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHB1c2hlcyBhIG5ldyByZWdpb24gbmVzdGluZyBzdGFjayBsZXZlbCBvbiB0aGUgY3VycmVudAorICogdGhyZWFkIGFuZCBzdGFydHMgYSBjbG9jayBmb3IgdGhlIG5ldyBzdGFjayBmcmFtZS4KKyAqCisgKiBUaGUgYGNhdGVnb3J5YCBmaWVsZCBpcyBhbiBhcmJpdHJhcnkgY2F0ZWdvcnkgbmFtZSB1c2VkIHRvIGNsYXNzaWZ5CisgKiByZWdpb25zIGJ5IGZlYXR1cmUgYXJlYSwgc3VjaCBhcyAic3RhdHVzIiBvciAiaW5kZXgiLiAgQXQgdGhpcyB0aW1lCisgKiBpdCBpcyBvbmx5IGp1c3QgcHJpbnRlZCBhbG9uZyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlLiAgSXQgbWF5CisgKiBiZSB1c2VkIGluIHRoZSBmdXR1cmUgdG8gZmlsdGVyIG1lc3NhZ2VzLgorICoKKyAqIFRoZSBgbGFiZWxgIGZpZWxkIGlzIGFuIGFyYml0cmFyeSBsYWJlbCB1c2VkIHRvIGRlc2NyaWJlIHRoZSBhY3Rpdml0eQorICogYmVpbmcgc3RhcnRlZCwgc3VjaCBhcyAicmVhZF9yZWN1cnNpdmUiIG9yICJkb19yZWFkX2luZGV4Ii4KKyAqCisgKiBUaGUgYHJlcG9gIGZpZWxkLCBpZiBzZXQsIHdpbGwgYmUgdXNlZCB0byBnZXQgdGhlICJyZXBvLWlkIiwgc28gdGhhdAorICogcmVjdXJzaXZlIG9lcmF0aW9ucyBjYW4gYmUgYXR0cmlidXRlZCB0byB0aGUgY29ycmVjdCByZXBvc2l0b3J5LgorICovCit2b2lkIHRyYWNlMl9yZWdpb25fZW50ZXJfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAorCQkJICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgLi4uKTsKKworI2RlZmluZSB0cmFjZTJfcmVnaW9uX2VudGVyKGNhdGVnb3J5LCBsYWJlbCwgcmVwbykgXAorCXRyYWNlMl9yZWdpb25fZW50ZXJfZmwoX19GSUxFX18sIF9fTElORV9fLCAoY2F0ZWdvcnkpLCAobGFiZWwpLCAocmVwbykpCisKK3ZvaWQgdHJhY2UyX3JlZ2lvbl9lbnRlcl9wcmludGZfdmFfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJICAgICAgY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7CisKKyNkZWZpbmUgdHJhY2UyX3JlZ2lvbl9lbnRlcl9wcmludGZfdmEoY2F0ZWdvcnksIGxhYmVsLCByZXBvLCBmbXQsIGFwKSAgICBcCisJdHJhY2UyX3JlZ2lvbl9lbnRlcl9wcmludGZfdmFfZmwoX19GSUxFX18sIF9fTElORV9fLCAoY2F0ZWdvcnkpLCBcCisJCQkJCSAobGFiZWwpLCAocmVwbyksIChmbXQpLCAoYXApKQorCit2b2lkIHRyYWNlMl9yZWdpb25fZW50ZXJfcHJpbnRmX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCSAgIGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBjaGFyICpsYWJlbCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQkgICBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNpZmRlZiBIQVZFX1ZBUklBRElDX01BQ1JPUworI2RlZmluZSB0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50ZihjYXRlZ29yeSwgbGFiZWwsIHJlcG8sIC4uLikgICAgICAgICAgICAgICAgIFwKKwl0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50Zl9mbChfX0ZJTEVfXywgX19MSU5FX18sIChjYXRlZ29yeSksIChsYWJlbCksIFwKKwkJCQkgICAgICAocmVwbyksIF9fVkFfQVJHU19fKQorI2Vsc2UKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocmVnaW9uX2VudGVyX3ByaW50ZiwgNCwgNSkpKQordm9pZCB0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50Zihjb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbGFiZWwsCisJCQkJY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmZtdCwKKwkJCQkuLi4pOworLyogY2xhbmctZm9ybWF0IG9uICovCisjZW5kaWYKKworLyoqCisgKiBFbWl0IGEgJ3JlZ2lvbl9sZWF2ZScgZXZlbnQgZm9yIDxjYXRlZ29yeT4uPGxhYmVsPiB3aXRoIG9wdGlvbmFsCisgKiByZXBvLWlkIGFuZCBwcmludGYgbWVzc2FnZS4KKyAqCisgKiBMZWF2ZSBjdXJyZW50IG5lc3RpbmcgbGV2ZWwgYW5kIHJlcG9ydCB0aGUgZWxhcHNlZCB0aW1lIHNwZW50CisgKiBpbiB0aGlzIG5lc3RpbmcgbGV2ZWwuCisgKgorICogVGhlIGBjYXRlZ29yeWAsIGBsYWJlbGAsIGFuZCBgcmVwb2AgZmllbGRzIGFyZSB0aGUgc2FtZSBhcworICogdHJhY2UyX3JlZ2lvbl9lbnRlcl9mbC4gVGhlIGBjYXRlZ29yeWAgYW5kIGBsYWJlbGAgZG8gbm90CisgKiBuZWVkIHRvIG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nICJyZWdpb25fZW50ZXIiIG1lc3NhZ2UsCisgKiBidXQgaXQgbWFrZXMgdGhlIGRhdGEgc3RyZWFtIGVhc2llciB0byB1bmRlcnN0YW5kLgorICovCit2b2lkIHRyYWNlMl9yZWdpb25fbGVhdmVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAorCQkJICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgLi4uKTsKKworI2RlZmluZSB0cmFjZTJfcmVnaW9uX2xlYXZlKGNhdGVnb3J5LCBsYWJlbCwgcmVwbykgXAorCXRyYWNlMl9yZWdpb25fbGVhdmVfZmwoX19GSUxFX18sIF9fTElORV9fLCAoY2F0ZWdvcnkpLCAobGFiZWwpLCAocmVwbykpCisKK3ZvaWQgdHJhY2UyX3JlZ2lvbl9sZWF2ZV9wcmludGZfdmFfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJICAgICAgY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7CisKKyNkZWZpbmUgdHJhY2UyX3JlZ2lvbl9sZWF2ZV9wcmludGZfdmEoY2F0ZWdvcnksIGxhYmVsLCByZXBvLCBmbXQsIGFwKSAgICBcCisJdHJhY2UyX3JlZ2lvbl9sZWF2ZV9wcmludGZfdmFfZmwoX19GSUxFX18sIF9fTElORV9fLCAoY2F0ZWdvcnkpLCBcCisJCQkJCSAobGFiZWwpLCAocmVwbyksIChmbXQpLCAoYXApKQorCit2b2lkIHRyYWNlMl9yZWdpb25fbGVhdmVfcHJpbnRmX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCSAgIGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBjaGFyICpsYWJlbCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQkgICBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNpZmRlZiBIQVZFX1ZBUklBRElDX01BQ1JPUworI2RlZmluZSB0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50ZihjYXRlZ29yeSwgbGFiZWwsIHJlcG8sIC4uLikgICAgICAgICAgICAgICAgIFwKKwl0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50Zl9mbChfX0ZJTEVfXywgX19MSU5FX18sIChjYXRlZ29yeSksIChsYWJlbCksIFwKKwkJCQkgICAgICAocmVwbyksIF9fVkFfQVJHU19fKQorI2Vsc2UKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocmVnaW9uX2xlYXZlX3ByaW50ZiwgNCwgNSkpKQordm9pZCB0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50Zihjb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbGFiZWwsCisJCQkJY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmZtdCwKKwkJCQkuLi4pOworLyogY2xhbmctZm9ybWF0IG9uICovCisjZW5kaWYKKworLyoqCisgKiBFbWl0IGEga2V5LXZhbHVlIHBhaXIgJ2RhdGEnIGV2ZW50IG9mIHRoZSBmb3JtIDxjYXRlZ29yeT4uPGtleT4gPSA8dmFsdWU+LgorICogVGhpcyBldmVudCBpbXBsaWNpdGx5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRocmVhZCwgbmVzdGluZyByZWdpb24sCisgKiBhbmQgb3B0aW9uYWwgcmVwby1pZC4KKyAqIFRoaXMgY291bGQgYmUgdXNlZCB0byBwcmludCB0aGUgbnVtYmVyIG9mIGZpbGVzIGluIGEgZGlyZWN0b3J5IGR1cmluZworICogYSBtdWx0aS10aHJlYWRlZCByZWN1cnNpdmUgdHJlZSB3YWxrLgorICoKKyAqIE9uIGV2ZW50LWJhc2VkIFRSQUNFMiB0YXJnZXRzLCB0aGlzIGdlbmVyYXRlcyBhICdkYXRhJyBldmVudCBzdWl0YWJsZQorICogZm9yIHBvc3QtcHJvY2Vzc2luZy4gIE9uIHByaW50Zi1iYXNlZCBUUkFDRTIgdGFyZ2V0cywgdGhpcyBpcyBjb252ZXJ0ZWQKKyAqIGludG8gYSBmaXhlZC1mb3JtYXQgcHJpbnRmIG1lc3NhZ2UuCisgKi8KK3ZvaWQgdHJhY2UyX2RhdGFfc3RyaW5nX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpjYXRlZ29yeSwKKwkJCSAgIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICprZXksCisJCQkgICBjb25zdCBjaGFyICp2YWx1ZSk7CisKKyNkZWZpbmUgdHJhY2UyX2RhdGFfc3RyaW5nKGNhdGVnb3J5LCByZXBvLCBrZXksIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgXAorCXRyYWNlMl9kYXRhX3N0cmluZ19mbChfX0ZJTEVfXywgX19MSU5FX18sIChjYXRlZ29yeSksIChyZXBvKSwgKGtleSksIFwKKwkJCSAgICAgICh2YWx1ZSkpCisKK3ZvaWQgdHJhY2UyX2RhdGFfaW50bWF4X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpjYXRlZ29yeSwKKwkJCSAgIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICprZXksCisJCQkgICBpbnRtYXhfdCB2YWx1ZSk7CisKKyNkZWZpbmUgdHJhY2UyX2RhdGFfaW50bWF4KGNhdGVnb3J5LCByZXBvLCBrZXksIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgXAorCXRyYWNlMl9kYXRhX2ludG1heF9mbChfX0ZJTEVfXywgX19MSU5FX18sIChjYXRlZ29yeSksIChyZXBvKSwgKGtleSksIFwKKwkJCSAgICAgICh2YWx1ZSkpCisKK3ZvaWQgdHJhY2UyX2RhdGFfanNvbl9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqY2F0ZWdvcnksCisJCQkgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmtleSwKKwkJCSBjb25zdCBzdHJ1Y3QganNvbl93cml0ZXIgKmp3KTsKKworI2RlZmluZSB0cmFjZTJfZGF0YV9qc29uKGNhdGVnb3J5LCByZXBvLCBrZXksIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgXAorCXRyYWNlMl9kYXRhX2pzb25fZmwoX19GSUxFX18sIF9fTElORV9fLCAoY2F0ZWdvcnkpLCAocmVwbyksIChrZXkpLCBcCisJCQkgICAgKHZhbHVlKSkKKworLyoKKyAqIEVtaXQgYSAncHJpbnRmJyBldmVudC4KKyAqCisgKiBXcml0ZSBhbiBhcmJpdHJhcnkgZm9ybWF0dGVkIG1lc3NhZ2UgdG8gdGhlIFRSQUNFMiB0YXJnZXRzLiAgVGhlc2UKKyAqIHRleHQgbWVzc2FnZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYXMgaHVtYW4tcmVhZGFibGUgc3RyaW5ncyB3aXRob3V0CisgKiBhbnkgZm9ybWF0dGluZyBndWlkZWxpbmVzLiAgUG9zdC1wcm9jZXNzb3JzIG1heSBjaG9vc2UgdG8gaWdub3JlCisgKiB0aGVtLgorICovCit2b2lkIHRyYWNlMl9wcmludGZfdmFfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwKKwkJCSB2YV9saXN0IGFwKTsKKworI2RlZmluZSB0cmFjZTJfcHJpbnRmX3ZhKGZtdCwgYXApIFwKKwl0cmFjZTJfcHJpbnRmX3ZhX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKGZtdCksIChhcCkpCisKK3ZvaWQgdHJhY2UyX3ByaW50Zl9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCisjaWZkZWYgSEFWRV9WQVJJQURJQ19NQUNST1MKKyNkZWZpbmUgdHJhY2UyX3ByaW50ZiguLi4pIHRyYWNlMl9wcmludGZfZmwoX19GSUxFX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXykKKyNlbHNlCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQordm9pZCB0cmFjZTJfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworI2VuZGlmCisKKy8qCisgKiBPcHRpb25hbCBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlIHRvIGR1bXAgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgKiBjdXJyZW50IGFuZCBhbnkgcGFyZW50IHByb2Nlc3MoZXMpLiAgVGhpcyBpcyBpbnRlbmRlZCB0byBhbGxvdworICogcG9zdC1wcm9jZXNzb3JzIHRvIGtub3cgd2hvIHNwYXduZWQgdGhpcyBnaXQgaW5zdGFuY2UgYW5kIGFueXRoaW5nCisgKiBlbHNlIHRoYXQgdGhlIHBsYXRmb3JtIG1heSBiZSBhYmxlIHRvIHRlbGwgdXMgYWJvdXQgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKyAqLworCitlbnVtIHRyYWNlMl9wcm9jZXNzX2luZm9fcmVhc29uIHsKKwlUUkFDRTJfUFJPQ0VTU19JTkZPX1NUQVJUVVAsCisJVFJBQ0UyX1BST0NFU1NfSU5GT19FWElULAorfTsKKworI2lmIGRlZmluZWQoR0lUX1dJTkRPV1NfTkFUSVZFKQordm9pZCB0cmFjZTJfY29sbGVjdF9wcm9jZXNzX2luZm8oZW51bSB0cmFjZTJfcHJvY2Vzc19pbmZvX3JlYXNvbiByZWFzb24pOworI2Vsc2UKKyNkZWZpbmUgdHJhY2UyX2NvbGxlY3RfcHJvY2Vzc19pbmZvKHJlYXNvbikgXAorCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBUUkFDRTJfSCAqLwpkaWZmIC0tZ2l0IGEvdHJhY2UyL3RyMl9jZmcuYyBiL3RyYWNlMi90cjJfY2ZnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5YWMxYQotLS0gL2Rldi9udWxsCisrKyBiL3RyYWNlMi90cjJfY2ZnLmMKQEAgLTAsMCArMSwxNDcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfY2ZnLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl9zeXNlbnYuaCIKKworc3RhdGljIHN0cnVjdCBzdHJidWYgKip0cjJfY2ZnX3BhdHRlcm5zOworc3RhdGljIGludCB0cjJfY2ZnX2NvdW50X3BhdHRlcm5zOworc3RhdGljIGludCB0cjJfY2ZnX2xvYWRlZDsKKworc3RhdGljIHN0cnVjdCBzdHJidWYgKip0cjJfY2ZnX2Vudl92YXJzOworc3RhdGljIGludCB0cjJfY2ZnX2Vudl92YXJzX2NvdW50Oworc3RhdGljIGludCB0cjJfY2ZnX2Vudl92YXJzX2xvYWRlZDsKKworLyoKKyAqIFBhcnNlIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiBjb25maWcga2V5cworICogb3Igd2lsZGNhcmQgcGF0dGVybnMgaW50byBhIGxpc3Qgb2Ygc3RyYnVmcy4KKyAqLworc3RhdGljIGludCB0cjJfY2ZnX2xvYWRfcGF0dGVybnModm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICoqczsKKwljb25zdCBjaGFyICplbnZ2YXI7CisKKwlpZiAodHIyX2NmZ19sb2FkZWQpCisJCXJldHVybiB0cjJfY2ZnX2NvdW50X3BhdHRlcm5zOworCXRyMl9jZmdfbG9hZGVkID0gMTsKKworCWVudnZhciA9IHRyMl9zeXNlbnZfZ2V0KFRSMl9TWVNFTlZfQ0ZHX1BBUkFNKTsKKwlpZiAoIWVudnZhciB8fCAhKmVudnZhcikKKwkJcmV0dXJuIHRyMl9jZmdfY291bnRfcGF0dGVybnM7CisKKwl0cjJfY2ZnX3BhdHRlcm5zID0gc3RyYnVmX3NwbGl0X2J1ZihlbnZ2YXIsIHN0cmxlbihlbnZ2YXIpLCAnLCcsIC0xKTsKKwlmb3IgKHMgPSB0cjJfY2ZnX3BhdHRlcm5zOyAqczsgcysrKSB7CisJCXN0cnVjdCBzdHJidWYgKmJ1ZiA9ICpzOworCisJCWlmIChidWYtPmxlbiAmJiBidWYtPmJ1ZltidWYtPmxlbiAtIDFdID09ICcsJykKKwkJCXN0cmJ1Zl9zZXRsZW4oYnVmLCBidWYtPmxlbiAtIDEpOworCQlzdHJidWZfdHJpbV90cmFpbGluZ19uZXdsaW5lKCpzKTsKKwkJc3RyYnVmX3RyaW0oKnMpOworCX0KKworCXRyMl9jZmdfY291bnRfcGF0dGVybnMgPSBzIC0gdHIyX2NmZ19wYXR0ZXJuczsKKwlyZXR1cm4gdHIyX2NmZ19jb3VudF9wYXR0ZXJuczsKK30KKwordm9pZCB0cjJfY2ZnX2ZyZWVfcGF0dGVybnModm9pZCkKK3sKKwlpZiAodHIyX2NmZ19wYXR0ZXJucykKKwkJc3RyYnVmX2xpc3RfZnJlZSh0cjJfY2ZnX3BhdHRlcm5zKTsKKwl0cjJfY2ZnX2NvdW50X3BhdHRlcm5zID0gMDsKKwl0cjJfY2ZnX2xvYWRlZCA9IDA7Cit9CisKKy8qCisgKiBQYXJzZSBhIHN0cmluZyBjb250YWluaW5nIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAqIG5hbWVzIGludG8gYSBsaXN0IG9mIHN0cmJ1ZnMuCisgKi8KK3N0YXRpYyBpbnQgdHIyX2xvYWRfZW52X3ZhcnModm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICoqczsKKwljb25zdCBjaGFyICp2YXJsaXN0OworCisJaWYgKHRyMl9jZmdfZW52X3ZhcnNfbG9hZGVkKQorCQlyZXR1cm4gdHIyX2NmZ19lbnZfdmFyc19jb3VudDsKKwl0cjJfY2ZnX2Vudl92YXJzX2xvYWRlZCA9IDE7CisKKwl2YXJsaXN0ID0gdHIyX3N5c2Vudl9nZXQoVFIyX1NZU0VOVl9FTlZfVkFSUyk7CisJaWYgKCF2YXJsaXN0IHx8ICEqdmFybGlzdCkKKwkJcmV0dXJuIHRyMl9jZmdfZW52X3ZhcnNfY291bnQ7CisKKwl0cjJfY2ZnX2Vudl92YXJzID0gc3RyYnVmX3NwbGl0X2J1Zih2YXJsaXN0LCBzdHJsZW4odmFybGlzdCksICcsJywgLTEpOworCWZvciAocyA9IHRyMl9jZmdfZW52X3ZhcnM7ICpzOyBzKyspIHsKKwkJc3RydWN0IHN0cmJ1ZiAqYnVmID0gKnM7CisKKwkJaWYgKGJ1Zi0+bGVuICYmIGJ1Zi0+YnVmW2J1Zi0+bGVuIC0gMV0gPT0gJywnKQorCQkJc3RyYnVmX3NldGxlbihidWYsIGJ1Zi0+bGVuIC0gMSk7CisJCXN0cmJ1Zl90cmltX3RyYWlsaW5nX25ld2xpbmUoKnMpOworCQlzdHJidWZfdHJpbSgqcyk7CisJfQorCisJdHIyX2NmZ19lbnZfdmFyc19jb3VudCA9IHMgLSB0cjJfY2ZnX2Vudl92YXJzOworCXJldHVybiB0cjJfY2ZnX2Vudl92YXJzX2NvdW50OworfQorCit2b2lkIHRyMl9jZmdfZnJlZV9lbnZfdmFycyh2b2lkKQoreworCWlmICh0cjJfY2ZnX2Vudl92YXJzKQorCQlzdHJidWZfbGlzdF9mcmVlKHRyMl9jZmdfZW52X3ZhcnMpOworCXRyMl9jZmdfZW52X3ZhcnNfY291bnQgPSAwOworCXRyMl9jZmdfZW52X3ZhcnNfbG9hZGVkID0gMDsKK30KKworc3RydWN0IHRyMl9jZmdfZGF0YSB7CisJY29uc3QgY2hhciAqZmlsZTsKKwlpbnQgbGluZTsKK307CisKKy8qCisgKiBTZWUgaWYgdGhlIGdpdmVuIGNvbmZpZyBrZXkgbWF0Y2hlcyBhbnkgb2Ygb3VyIHBhdHRlcm5zIG9mIGludGVyZXN0LgorICovCitzdGF0aWMgaW50IHRyMl9jZmdfY2IoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICoqczsKKwlzdHJ1Y3QgdHIyX2NmZ19kYXRhICpkYXRhID0gKHN0cnVjdCB0cjJfY2ZnX2RhdGEgKilkOworCisJZm9yIChzID0gdHIyX2NmZ19wYXR0ZXJuczsgKnM7IHMrKykgeworCQlzdHJ1Y3Qgc3RyYnVmICpidWYgPSAqczsKKwkJaW50IHdtID0gd2lsZG1hdGNoKGJ1Zi0+YnVmLCBrZXksIFdNX0NBU0VGT0xEKTsKKwkJaWYgKHdtID09IFdNX01BVENIKSB7CisJCQl0cmFjZTJfZGVmX3BhcmFtX2ZsKGRhdGEtPmZpbGUsIGRhdGEtPmxpbmUsIGtleSwgdmFsdWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB0cjJfY2ZnX2xpc3RfY29uZmlnX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQoreworCXN0cnVjdCB0cjJfY2ZnX2RhdGEgZGF0YSA9IHsgZmlsZSwgbGluZSB9OworCisJaWYgKHRyMl9jZmdfbG9hZF9wYXR0ZXJucygpID4gMCkKKwkJcmVhZF9lYXJseV9jb25maWcodHIyX2NmZ19jYiwgJmRhdGEpOworfQorCit2b2lkIHRyMl9saXN0X2Vudl92YXJzX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQoreworCXN0cnVjdCBzdHJidWYgKipzOworCisJaWYgKHRyMl9sb2FkX2Vudl92YXJzKCkgPD0gMCkKKwkJcmV0dXJuOworCisJZm9yIChzID0gdHIyX2NmZ19lbnZfdmFyczsgKnM7IHMrKykgeworCQlzdHJ1Y3Qgc3RyYnVmICpidWYgPSAqczsKKwkJY29uc3QgY2hhciAqdmFsID0gZ2V0ZW52KGJ1Zi0+YnVmKTsKKwkJaWYgKHZhbCAmJiAqdmFsKQorCQkJdHJhY2UyX2RlZl9wYXJhbV9mbChmaWxlLCBsaW5lLCBidWYtPmJ1ZiwgdmFsKTsKKwl9Cit9CisKK3ZvaWQgdHIyX2NmZ19zZXRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmtleSwKKwkJICAgIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCB0cjJfY2ZnX2RhdGEgZGF0YSA9IHsgZmlsZSwgbGluZSB9OworCisJaWYgKHRyMl9jZmdfbG9hZF9wYXR0ZXJucygpID4gMCkKKwkJdHIyX2NmZ19jYihrZXksIHZhbHVlLCAmZGF0YSk7Cit9CmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX2NmZy5oIGIvdHJhY2UyL3RyMl9jZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTFkNzFmCi0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyL3RyMl9jZmcuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIFRSMl9DRkdfSAorI2RlZmluZSBUUjJfQ0ZHX0gKKworLyoKKyAqIEl0ZXJhdGUgb3ZlciBhbGwgY29uZmlnIHNldHRpbmdzIGFuZCBlbWl0ICdkZWZfcGFyYW0nIGV2ZW50cyBmb3IgdGhlCisgKiAiaW50ZXJlc3RpbmciIG9uZXMgdG8gVFJBQ0UyLgorICovCit2b2lkIHRyMl9jZmdfbGlzdF9jb25maWdfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOworCisvKgorICogSXRlcmF0ZSBvdmVyIGFsbCAiaW50ZXJlc3RpbmciIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgZW1pdCAnZGVmX3BhcmFtJworICogZXZlbnRzIGZvciB0aGVtIHRvIFRSQUNFMi4KKyAqLwordm9pZCB0cjJfbGlzdF9lbnZfdmFyc19mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7CisKKy8qCisgKiBFbWl0IGEgImRlZl9wYXJhbSIgZXZlbnQgZm9yIHRoZSBnaXZlbiBrZXkvdmFsdWUgcGFpciBJRiB3ZSBjb25zaWRlcgorICogdGhlIGtleSB0byBiZSAiaW50ZXJlc3RpbmciLgorICovCit2b2lkIHRyMl9jZmdfc2V0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICprZXksCisJCSAgICBjb25zdCBjaGFyICp2YWx1ZSk7CisKK3ZvaWQgdHIyX2NmZ19mcmVlX3BhdHRlcm5zKHZvaWQpOworCit2b2lkIHRyMl9jZmdfZnJlZV9lbnZfdmFycyh2b2lkKTsKKworI2VuZGlmIC8qIFRSMl9DRkdfSCAqLwpkaWZmIC0tZ2l0IGEvdHJhY2UyL3RyMl9jbWRfbmFtZS5jIGIvdHJhY2UyL3RyMl9jbWRfbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMzEzMjAKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjZTIvdHIyX2NtZF9uYW1lLmMKQEAgLTAsMCArMSwzMCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl9jbWRfbmFtZS5oIgorCisjZGVmaW5lIFRSMl9FTlZWQVJfUEFSRU5UX05BTUUgIkdJVF9UUkFDRTJfUEFSRU5UX05BTUUiCisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHRyMmNtZG5hbWVfaGllcmFyY2h5ID0gU1RSQlVGX0lOSVQ7CisKK3ZvaWQgdHIyX2NtZF9uYW1lX2FwcGVuZF9oaWVyYXJjaHkoY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBjaGFyICpwYXJlbnRfbmFtZSA9IGdldGVudihUUjJfRU5WVkFSX1BBUkVOVF9OQU1FKTsKKworCXN0cmJ1Zl9yZXNldCgmdHIyY21kbmFtZV9oaWVyYXJjaHkpOworCWlmIChwYXJlbnRfbmFtZSAmJiAqcGFyZW50X25hbWUpIHsKKwkJc3RyYnVmX2FkZHN0cigmdHIyY21kbmFtZV9oaWVyYXJjaHksIHBhcmVudF9uYW1lKTsKKwkJc3RyYnVmX2FkZGNoKCZ0cjJjbWRuYW1lX2hpZXJhcmNoeSwgJy8nKTsKKwl9CisJc3RyYnVmX2FkZHN0cigmdHIyY21kbmFtZV9oaWVyYXJjaHksIG5hbWUpOworCisJc2V0ZW52KFRSMl9FTlZWQVJfUEFSRU5UX05BTUUsIHRyMmNtZG5hbWVfaGllcmFyY2h5LmJ1ZiwgMSk7Cit9CisKK2NvbnN0IGNoYXIgKnRyMl9jbWRfbmFtZV9nZXRfaGllcmFyY2h5KHZvaWQpCit7CisJcmV0dXJuIHRyMmNtZG5hbWVfaGllcmFyY2h5LmJ1ZjsKK30KKwordm9pZCB0cjJfY21kX25hbWVfcmVsZWFzZSh2b2lkKQoreworCXN0cmJ1Zl9yZWxlYXNlKCZ0cjJjbWRuYW1lX2hpZXJhcmNoeSk7Cit9CmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX2NtZF9uYW1lLmggYi90cmFjZTIvdHIyX2NtZF9uYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI3MGI2NwotLS0gL2Rldi9udWxsCisrKyBiL3RyYWNlMi90cjJfY21kX25hbWUuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIFRSMl9DTURfTkFNRV9ICisjZGVmaW5lIFRSMl9DTURfTkFNRV9ICisKKy8qCisgKiBBcHBlbmQgdGhlIGN1cnJlbnQgY29tbWFuZCBuYW1lIHRvIHRoZSBsaXN0IGJlaW5nIG1haW50YWluZWQKKyAqIGluIHRoZSBlbnZpcm9ubWVudC4KKyAqCisgKiBUaGUgaGllcmFyY2h5IGZvciBhIHRvcC1sZXZlbCBnaXQgY29tbWFuZCBpcyBqdXN0IHRoZSBjdXJyZW50CisgKiBjb21tYW5kIG5hbWUuICBGb3IgYSBjaGlsZCBnaXQgcHJvY2VzcywgdGhlIGhpZXJhcmNoeSBpbmNsdWRlcyB0aGUKKyAqIG5hbWVzIG9mIHRoZSBwYXJlbnQgcHJvY2Vzc2VzLgorICoKKyAqIFRoZSBoaWVyYXJjaHkgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3Mgd2lsbCBiZSBleHBvcnRlZCB0byB0aGUKKyAqIGVudmlyb25tZW50IGFuZCBpbmhlcml0ZWQgYnkgY2hpbGQgcHJvY2Vzc2VzLgorICovCit2b2lkIHRyMl9jbWRfbmFtZV9hcHBlbmRfaGllcmFyY2h5KGNvbnN0IGNoYXIgKm5hbWUpOworCisvKgorICogR2V0IHRoZSBjb21tYW5kIG5hbWUgaGllcmFyY2h5IGZvciB0aGUgY3VycmVudCBwcm9jZXNzLgorICovCitjb25zdCBjaGFyICp0cjJfY21kX25hbWVfZ2V0X2hpZXJhcmNoeSh2b2lkKTsKKwordm9pZCB0cjJfY21kX25hbWVfcmVsZWFzZSh2b2lkKTsKKworI2VuZGlmIC8qIFRSMl9DTURfTkFNRV9IICovCmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX2RzdC5jIGIvdHJhY2UyL3RyMl9kc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTA1MmEwCi0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyL3RyMl9kc3QuYwpAQCAtMCwwICsxLDM5MSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl9kc3QuaCIKKyNpbmNsdWRlICJ0cmFjZTIvdHIyX3NpZC5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfc3lzZW52LmgiCisKKy8qCisgKiBIb3cgbWFueSBhdHRlbXB0cyB3ZSB3aWxsIG1ha2UgYXQgY3JlYXRpbmcgYW4gYXV0b21hdGljYWxseS1uYW1lZCB0cmFjZSBmaWxlLgorICovCisjZGVmaW5lIE1BWF9BVVRPX0FUVEVNUFRTIDEwCisKKy8qCisgKiBTZW50aW5lbCBmaWxlIHVzZWQgdG8gZGV0ZWN0IHdoZW4gd2Ugc2hvdWxkIGRpc2NhcmQgbmV3IHRyYWNlcyB0byBhdm9pZAorICogd3JpdGluZyB0b28gbWFueSB0cmFjZSBmaWxlcyB0byBhIGRpcmVjdG9yeS4KKyAqLworI2RlZmluZSBESVNDQVJEX1NFTlRJTkVMX05BTUUgImdpdC10cmFjZTItZGlzY2FyZCIKKworLyoKKyAqIFdoZW4gc2V0IHRvIHplcm8sIGRpc2FibGVzIGRpcmVjdG9yeSBmaWxlIGNvdW50IGNoZWNrcy4gT3RoZXJ3aXNlLCBjb250cm9scworICogaG93IG1hbnkgZmlsZXMgd2UgY2FuIHdyaXRlIHRvIGEgZGlyZWN0b3J5IGJlZm9yZSBlbnRlcmluZyBkaXNjYXJkIG1vZGUuCisgKiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHZpYSB0aGUgVFIyX1NZU0VOVl9NQVhfRklMRVMgc2V0dGluZy4KKyAqLworc3RhdGljIGludCB0cjJlbnZfbWF4X2ZpbGVzID0gMDsKKworc3RhdGljIGludCB0cjJfZHN0X3dhbnRfd2FybmluZyh2b2lkKQoreworCXN0YXRpYyBpbnQgdHIyZW52X2RzdF9kZWJ1ZyA9IC0xOworCisJaWYgKHRyMmVudl9kc3RfZGVidWcgPT0gLTEpIHsKKwkJY29uc3QgY2hhciAqZW52X3ZhbHVlID0gdHIyX3N5c2Vudl9nZXQoVFIyX1NZU0VOVl9EU1RfREVCVUcpOworCQlpZiAoIWVudl92YWx1ZSB8fCAhKmVudl92YWx1ZSkKKwkJCXRyMmVudl9kc3RfZGVidWcgPSAwOworCQllbHNlCisJCQl0cjJlbnZfZHN0X2RlYnVnID0gYXRvaShlbnZfdmFsdWUpID4gMDsKKwl9CisKKwlyZXR1cm4gdHIyZW52X2RzdF9kZWJ1ZzsKK30KKwordm9pZCB0cjJfZHN0X3RyYWNlX2Rpc2FibGUoc3RydWN0IHRyMl9kc3QgKmRzdCkKK3sKKwlpZiAoZHN0LT5uZWVkX2Nsb3NlKQorCQljbG9zZShkc3QtPmZkKTsKKwlkc3QtPmZkID0gMDsKKwlkc3QtPmluaXRpYWxpemVkID0gMTsKKwlkc3QtPm5lZWRfY2xvc2UgPSAwOworfQorCisvKgorICogQ2hlY2sgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBvdmVybG9hZGluZyB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB3aXRoIHRvbyBtYW55CisgKiBmaWxlcy4gRmlyc3QgZ2V0IHRoZSB0aHJlc2hvbGQgKGlmIHByZXNlbnQpIGZyb20gdGhlIGNvbmZpZyBvciBlbnZ2YXIuIElmCisgKiBpdCdzIHplcm8gb3IgdW5zZXQsIGRpc2FibGUgdGhpcyBjaGVjay4gTmV4dCBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGEKKyAqIHNlbnRpbmVsIGZpbGUsIHRoZW4gY2hlY2sgZmlsZSBjb3VudC4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdHJhY2luZyBzaG91bGQgcHJvY2VlZCBhcyBub3JtYWwuIFJldHVybnMgMSBpZiB0aGUgc2VudGluZWwgZmlsZQorICogYWxyZWFkeSBleGlzdHMsIHdoaWNoIG1lYW5zIHRyYWNpbmcgc2hvdWxkIGJlIGRpc2FibGVkLiBSZXR1cm5zIC0xIGlmIHRoZXJlCisgKiBhcmUgdG9vIG1hbnkgZmlsZXMgYnV0IHRoZXJlIHdhcyBubyBzZW50aW5lbCBmaWxlLCB3aGljaCBtZWFucyB3ZSBoYXZlCisgKiBjcmVhdGVkIGFuZCBzaG91bGQgd3JpdGUgdHJhY2VzIHRvIHRoZSBzZW50aW5lbCBmaWxlLgorICoKKyAqIFdlIGV4cGVjdCB0aGF0IHNvbWUgdHJhY2UgcHJvY2Vzc2luZyBzeXN0ZW0gaXMgZ3JhZHVhbGx5IGNvbGxlY3RpbmcgZmlsZXMKKyAqIGZyb20gdGhlIHRhcmdldCBkaXJlY3Rvcnk7IGFmdGVyIGl0IHJlbW92ZXMgdGhlIHNlbnRpbmVsIGZpbGUgd2UnbGwgc3RhcnQKKyAqIHdyaXRpbmcgdHJhY2VzIGFnYWluLgorICovCitzdGF0aWMgaW50IHRyMl9kc3RfdG9vX21hbnlfZmlsZXMoc3RydWN0IHRyMl9kc3QgKmRzdCwgY29uc3QgY2hhciAqdGd0X3ByZWZpeCkKK3sKKwlpbnQgZmlsZV9jb3VudCA9IDAsIG1heF9maWxlcyA9IDAsIHJldCA9IDA7CisJY29uc3QgY2hhciAqbWF4X2ZpbGVzX3ZhcjsKKwlESVIgKmRpcnA7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQsIHNlbnRpbmVsX3BhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCisJLyogR2V0IHRoZSBjb25maWcgb3IgZW52dmFyIGFuZCBkZWNpZGUgaWYgd2Ugc2hvdWxkIGNvbnRpbnVlIHRoaXMgY2hlY2sgKi8KKwltYXhfZmlsZXNfdmFyID0gdHIyX3N5c2Vudl9nZXQoVFIyX1NZU0VOVl9NQVhfRklMRVMpOworCWlmIChtYXhfZmlsZXNfdmFyICYmICptYXhfZmlsZXNfdmFyICYmICgobWF4X2ZpbGVzID0gYXRvaShtYXhfZmlsZXNfdmFyKSkgPj0gMCkpCisJCXRyMmVudl9tYXhfZmlsZXMgPSBtYXhfZmlsZXM7CisKKwlpZiAoIXRyMmVudl9tYXhfZmlsZXMpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIHRndF9wcmVmaXgpOworCWlmICghaXNfZGlyX3NlcChwYXRoLmJ1ZltwYXRoLmxlbiAtIDFdKSkgeworCQlzdHJidWZfYWRkY2goJnBhdGgsICcvJyk7CisJfQorCisJLyogY2hlY2sgc2VudGluZWwgKi8KKwlzdHJidWZfYWRkYnVmKCZzZW50aW5lbF9wYXRoLCAmcGF0aCk7CisJc3RyYnVmX2FkZHN0cigmc2VudGluZWxfcGF0aCwgRElTQ0FSRF9TRU5USU5FTF9OQU1FKTsKKwlpZiAoIXN0YXQoc2VudGluZWxfcGF0aC5idWYsICZzdGF0YnVmKSkgeworCQlyZXQgPSAxOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogY2hlY2sgZmlsZSBjb3VudCAqLworCWRpcnAgPSBvcGVuZGlyKHBhdGguYnVmKTsKKwl3aGlsZSAoZmlsZV9jb3VudCA8IHRyMmVudl9tYXhfZmlsZXMgJiYgZGlycCAmJiByZWFkZGlyKGRpcnApKQorCQlmaWxlX2NvdW50Kys7CisJaWYgKGRpcnApCisJCWNsb3NlZGlyKGRpcnApOworCisJaWYgKGZpbGVfY291bnQgPj0gdHIyZW52X21heF9maWxlcykgeworCQlkc3QtPnRvb19tYW55X2ZpbGVzID0gMTsKKwkJZHN0LT5mZCA9IG9wZW4oc2VudGluZWxfcGF0aC5idWYsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisJCXJldCA9IC0xOworCQlnb3RvIGNsZWFudXA7CisJfQorCitjbGVhbnVwOgorCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwlzdHJidWZfcmVsZWFzZSgmc2VudGluZWxfcGF0aCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0cjJfZHN0X3RyeV9hdXRvX3BhdGgoc3RydWN0IHRyMl9kc3QgKmRzdCwgY29uc3QgY2hhciAqdGd0X3ByZWZpeCkKK3sKKwlpbnQgdG9vX21hbnlfZmlsZXM7CisJY29uc3QgY2hhciAqbGFzdF9zbGFzaCwgKnNpZCA9IHRyMl9zaWRfZ2V0KCk7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IGJhc2VfcGF0aF9sZW47CisJdW5zaWduZWQgYXR0ZW1wdF9jb3VudDsKKworCWxhc3Rfc2xhc2ggPSBzdHJyY2hyKHNpZCwgJy8nKTsKKwlpZiAobGFzdF9zbGFzaCkKKwkJc2lkID0gbGFzdF9zbGFzaCArIDE7CisKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCB0Z3RfcHJlZml4KTsKKwlpZiAoIWlzX2Rpcl9zZXAocGF0aC5idWZbcGF0aC5sZW4gLSAxXSkpCisJCXN0cmJ1Zl9hZGRjaCgmcGF0aCwgJy8nKTsKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBzaWQpOworCWJhc2VfcGF0aF9sZW4gPSBwYXRoLmxlbjsKKworCXRvb19tYW55X2ZpbGVzID0gdHIyX2RzdF90b29fbWFueV9maWxlcyhkc3QsIHRndF9wcmVmaXgpOworCWlmICghdG9vX21hbnlfZmlsZXMpIHsKKwkJZm9yIChhdHRlbXB0X2NvdW50ID0gMDsgYXR0ZW1wdF9jb3VudCA8IE1BWF9BVVRPX0FUVEVNUFRTOyBhdHRlbXB0X2NvdW50KyspIHsKKwkJCWlmIChhdHRlbXB0X2NvdW50ID4gMCkgeworCQkJCXN0cmJ1Zl9zZXRsZW4oJnBhdGgsIGJhc2VfcGF0aF9sZW4pOworCQkJCXN0cmJ1Zl9hZGRmKCZwYXRoLCAiLiVkIiwgYXR0ZW1wdF9jb3VudCk7CisJCQl9CisKKwkJCWRzdC0+ZmQgPSBvcGVuKHBhdGguYnVmLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOworCQkJaWYgKGRzdC0+ZmQgIT0gLTEpCisJCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgaWYgKHRvb19tYW55X2ZpbGVzID09IDEpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCQlpZiAodHIyX2RzdF93YW50X3dhcm5pbmcoKSkKKwkJCXdhcm5pbmcoInRyYWNlMjogbm90IG9wZW5pbmcgJXMgdHJhY2UgZmlsZSBkdWUgdG8gdG9vICIKKwkJCQkibWFueSBmaWxlcyBpbiB0YXJnZXQgZGlyZWN0b3J5ICVzIiwKKwkJCQl0cjJfc3lzZW52X2Rpc3BsYXlfbmFtZShkc3QtPnN5c2Vudl92YXIpLAorCQkJCXRndF9wcmVmaXgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZHN0LT5mZCA9PSAtMSkgeworCQlpZiAodHIyX2RzdF93YW50X3dhcm5pbmcoKSkKKwkJCXdhcm5pbmcoInRyYWNlMjogY291bGQgbm90IG9wZW4gJyUuKnMnIGZvciAnJXMnIHRyYWNpbmc6ICVzIiwKKwkJCQkoaW50KSBiYXNlX3BhdGhfbGVuLCBwYXRoLmJ1ZiwKKwkJCQl0cjJfc3lzZW52X2Rpc3BsYXlfbmFtZShkc3QtPnN5c2Vudl92YXIpLAorCQkJCXN0cmVycm9yKGVycm5vKSk7CisKKwkJdHIyX2RzdF90cmFjZV9kaXNhYmxlKGRzdCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCisJZHN0LT5uZWVkX2Nsb3NlID0gMTsKKwlkc3QtPmluaXRpYWxpemVkID0gMTsKKworCXJldHVybiBkc3QtPmZkOworfQorCitzdGF0aWMgaW50IHRyMl9kc3RfdHJ5X3BhdGgoc3RydWN0IHRyMl9kc3QgKmRzdCwgY29uc3QgY2hhciAqdGd0X3ZhbHVlKQoreworCWludCBmZCA9IG9wZW4odGd0X3ZhbHVlLCBPX1dST05MWSB8IE9fQVBQRU5EIHwgT19DUkVBVCwgMDY2Nik7CisJaWYgKGZkID09IC0xKSB7CisJCWlmICh0cjJfZHN0X3dhbnRfd2FybmluZygpKQorCQkJd2FybmluZygidHJhY2UyOiBjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciAnJXMnIHRyYWNpbmc6ICVzIiwKKwkJCQl0Z3RfdmFsdWUsCisJCQkJdHIyX3N5c2Vudl9kaXNwbGF5X25hbWUoZHN0LT5zeXNlbnZfdmFyKSwKKwkJCQlzdHJlcnJvcihlcnJubykpOworCisJCXRyMl9kc3RfdHJhY2VfZGlzYWJsZShkc3QpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkc3QtPmZkID0gZmQ7CisJZHN0LT5uZWVkX2Nsb3NlID0gMTsKKwlkc3QtPmluaXRpYWxpemVkID0gMTsKKworCXJldHVybiBkc3QtPmZkOworfQorCisjaWZuZGVmIE5PX1VOSVhfU09DS0VUUworI2RlZmluZSBQUkVGSVhfQUZfVU5JWCAiYWZfdW5peDoiCisjZGVmaW5lIFBSRUZJWF9BRl9VTklYX1NUUkVBTSAiYWZfdW5peDpzdHJlYW06IgorI2RlZmluZSBQUkVGSVhfQUZfVU5JWF9ER1JBTSAiYWZfdW5peDpkZ3JhbToiCisKK3N0YXRpYyBpbnQgdHIyX2RzdF90cnlfdWRzX2Nvbm5lY3QoY29uc3QgY2hhciAqcGF0aCwgaW50IHNvY2tfdHlwZSwgaW50ICpvdXRfZmQpCit7CisJaW50IGZkOworCXN0cnVjdCBzb2NrYWRkcl91biBzYTsKKworCWZkID0gc29ja2V0KEFGX1VOSVgsIHNvY2tfdHlwZSwgMCk7CisJaWYgKGZkID09IC0xKQorCQlyZXR1cm4gZXJybm87CisKKwlzYS5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKwlzdHJsY3B5KHNhLnN1bl9wYXRoLCBwYXRoLCBzaXplb2Yoc2Euc3VuX3BhdGgpKTsKKworCWlmIChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNhLCBzaXplb2Yoc2EpKSA9PSAtMSkgeworCQlpbnQgZSA9IGVycm5vOworCQljbG9zZShmZCk7CisJCXJldHVybiBlOworCX0KKworCSpvdXRfZmQgPSBmZDsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBUUjJfRFNUX1VEU19UUllfU1RSRUFNICgxIDw8IDApCisjZGVmaW5lIFRSMl9EU1RfVURTX1RSWV9ER1JBTSAgKDEgPDwgMSkKKworc3RhdGljIGludCB0cjJfZHN0X3RyeV91bml4X2RvbWFpbl9zb2NrZXQoc3RydWN0IHRyMl9kc3QgKmRzdCwKKwkJCQkJICBjb25zdCBjaGFyICp0Z3RfdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHVkc190cnkgPSAwOworCWludCBmZDsKKwlpbnQgZTsKKwljb25zdCBjaGFyICpwYXRoID0gTlVMTDsKKworCS8qCisJICogQWxsb3cgImFmX3VuaXg6Wzx0eXBlPjpdPGFic29sdXRlX3BhdGg+IgorCSAqCisJICogVHJhY2UyIGFsd2F5cyB3cml0ZXMgY29tcGxldGUgaW5kaXZpZHVhbCBtZXNzYWdlcyAod2l0aG91dAorCSAqIGNodW5raW5nKSwgc28gd2UgY2FuIHRhbGsgdG8gZWl0aGVyIERHUkFNIG9yIFNUUkVBTSB0eXBlIHNvY2tldHMuCisJICoKKwkgKiBBbGxvdyB0aGUgdXNlciB0byBleHBsaWNpdGx5IHJlcXVlc3QgdGhlIHNvY2tldCB0eXBlLgorCSAqCisJICogSWYgdGhleSBvbWl0IHRoZSBzb2NrZXQgdHlwZSwgdHJ5IG9uZSBhbmQgdGhlbiB0aGUgb3RoZXIuCisJICovCisKKwlpZiAoc2tpcF9wcmVmaXgodGd0X3ZhbHVlLCBQUkVGSVhfQUZfVU5JWF9TVFJFQU0sICZwYXRoKSkKKwkJdWRzX3RyeSB8PSBUUjJfRFNUX1VEU19UUllfU1RSRUFNOworCisJZWxzZSBpZiAoc2tpcF9wcmVmaXgodGd0X3ZhbHVlLCBQUkVGSVhfQUZfVU5JWF9ER1JBTSwgJnBhdGgpKQorCQl1ZHNfdHJ5IHw9IFRSMl9EU1RfVURTX1RSWV9ER1JBTTsKKworCWVsc2UgaWYgKHNraXBfcHJlZml4KHRndF92YWx1ZSwgUFJFRklYX0FGX1VOSVgsICZwYXRoKSkKKwkJdWRzX3RyeSB8PSBUUjJfRFNUX1VEU19UUllfU1RSRUFNIHwgVFIyX0RTVF9VRFNfVFJZX0RHUkFNOworCisJaWYgKCFwYXRoIHx8ICEqcGF0aCkgeworCQlpZiAodHIyX2RzdF93YW50X3dhcm5pbmcoKSkKKwkJCXdhcm5pbmcoInRyYWNlMjogaW52YWxpZCBBRl9VTklYIHZhbHVlICclcycgZm9yICclcycgdHJhY2luZyIsCisJCQkJdGd0X3ZhbHVlLAorCQkJCXRyMl9zeXNlbnZfZGlzcGxheV9uYW1lKGRzdC0+c3lzZW52X3ZhcikpOworCisJCXRyMl9kc3RfdHJhY2VfZGlzYWJsZShkc3QpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgocGF0aCkgfHwKKwkgICAgc3RybGVuKHBhdGgpID49IHNpemVvZigoKHN0cnVjdCBzb2NrYWRkcl91biAqKTApLT5zdW5fcGF0aCkpIHsKKwkJaWYgKHRyMl9kc3Rfd2FudF93YXJuaW5nKCkpCisJCQl3YXJuaW5nKCJ0cmFjZTI6IGludmFsaWQgQUZfVU5JWCBwYXRoICclcycgZm9yICclcycgdHJhY2luZyIsCisJCQkJcGF0aCwgdHIyX3N5c2Vudl9kaXNwbGF5X25hbWUoZHN0LT5zeXNlbnZfdmFyKSk7CisKKwkJdHIyX2RzdF90cmFjZV9kaXNhYmxlKGRzdCk7CisJCXJldHVybiAwOworCX0KKworCWlmICh1ZHNfdHJ5ICYgVFIyX0RTVF9VRFNfVFJZX1NUUkVBTSkgeworCQllID0gdHIyX2RzdF90cnlfdWRzX2Nvbm5lY3QocGF0aCwgU09DS19TVFJFQU0sICZmZCk7CisJCWlmICghZSkKKwkJCWdvdG8gY29ubmVjdGVkOworCQlpZiAoZSAhPSBFUFJPVE9UWVBFKQorCQkJZ290byBlcnJvcjsKKwl9CisJaWYgKHVkc190cnkgJiBUUjJfRFNUX1VEU19UUllfREdSQU0pIHsKKwkJZSA9IHRyMl9kc3RfdHJ5X3Vkc19jb25uZWN0KHBhdGgsIFNPQ0tfREdSQU0sICZmZCk7CisJCWlmICghZSkKKwkJCWdvdG8gY29ubmVjdGVkOworCX0KKworZXJyb3I6CisJaWYgKHRyMl9kc3Rfd2FudF93YXJuaW5nKCkpCisJCXdhcm5pbmcoInRyYWNlMjogY291bGQgbm90IGNvbm5lY3QgdG8gc29ja2V0ICclcycgZm9yICclcycgdHJhY2luZzogJXMiLAorCQkJcGF0aCwgdHIyX3N5c2Vudl9kaXNwbGF5X25hbWUoZHN0LT5zeXNlbnZfdmFyKSwKKwkJCXN0cmVycm9yKGUpKTsKKworCXRyMl9kc3RfdHJhY2VfZGlzYWJsZShkc3QpOworCXJldHVybiAwOworCitjb25uZWN0ZWQ6CisJZHN0LT5mZCA9IGZkOworCWRzdC0+bmVlZF9jbG9zZSA9IDE7CisJZHN0LT5pbml0aWFsaXplZCA9IDE7CisKKwlyZXR1cm4gZHN0LT5mZDsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCB0cjJfZHN0X21hbGZvcm1lZF93YXJuaW5nKHN0cnVjdCB0cjJfZHN0ICpkc3QsCisJCQkJICAgICAgY29uc3QgY2hhciAqdGd0X3ZhbHVlKQoreworCXdhcm5pbmcoInRyYWNlMjogdW5rbm93biB2YWx1ZSBmb3IgJyVzJzogJyVzJyIsCisJCXRyMl9zeXNlbnZfZGlzcGxheV9uYW1lKGRzdC0+c3lzZW52X3ZhciksIHRndF92YWx1ZSk7Cit9CisKK2ludCB0cjJfZHN0X2dldF90cmFjZV9mZChzdHJ1Y3QgdHIyX2RzdCAqZHN0KQoreworCWNvbnN0IGNoYXIgKnRndF92YWx1ZTsKKworCS8qIGRvbid0IG9wZW4gdHdpY2UgKi8KKwlpZiAoZHN0LT5pbml0aWFsaXplZCkKKwkJcmV0dXJuIGRzdC0+ZmQ7CisKKwlkc3QtPmluaXRpYWxpemVkID0gMTsKKworCXRndF92YWx1ZSA9IHRyMl9zeXNlbnZfZ2V0KGRzdC0+c3lzZW52X3Zhcik7CisKKwlpZiAoIXRndF92YWx1ZSB8fCAhc3RyY21wKHRndF92YWx1ZSwgIiIpIHx8ICFzdHJjbXAodGd0X3ZhbHVlLCAiMCIpIHx8CisJICAgICFzdHJjYXNlY21wKHRndF92YWx1ZSwgImZhbHNlIikpIHsKKwkJZHN0LT5mZCA9IDA7CisJCXJldHVybiBkc3QtPmZkOworCX0KKworCWlmICghc3RyY21wKHRndF92YWx1ZSwgIjEiKSB8fCAhc3RyY2FzZWNtcCh0Z3RfdmFsdWUsICJ0cnVlIikpIHsKKwkJZHN0LT5mZCA9IFNUREVSUl9GSUxFTk87CisJCXJldHVybiBkc3QtPmZkOworCX0KKworCWlmIChzdHJsZW4odGd0X3ZhbHVlKSA9PSAxICYmIGlzZGlnaXQoKnRndF92YWx1ZSkpIHsKKwkJZHN0LT5mZCA9IGF0b2kodGd0X3ZhbHVlKTsKKwkJcmV0dXJuIGRzdC0+ZmQ7CisJfQorCisJaWYgKGlzX2Fic29sdXRlX3BhdGgodGd0X3ZhbHVlKSkgeworCQlpZiAoaXNfZGlyZWN0b3J5KHRndF92YWx1ZSkpCisJCQlyZXR1cm4gdHIyX2RzdF90cnlfYXV0b19wYXRoKGRzdCwgdGd0X3ZhbHVlKTsKKwkJZWxzZQorCQkJcmV0dXJuIHRyMl9kc3RfdHJ5X3BhdGgoZHN0LCB0Z3RfdmFsdWUpOworCX0KKworI2lmbmRlZiBOT19VTklYX1NPQ0tFVFMKKwlpZiAoc3RhcnRzX3dpdGgodGd0X3ZhbHVlLCBQUkVGSVhfQUZfVU5JWCkpCisJCXJldHVybiB0cjJfZHN0X3RyeV91bml4X2RvbWFpbl9zb2NrZXQoZHN0LCB0Z3RfdmFsdWUpOworI2VuZGlmCisKKwkvKiBBbHdheXMgd2FybiBhYm91dCBtYWxmb3JtZWQgdmFsdWVzLiAqLworCXRyMl9kc3RfbWFsZm9ybWVkX3dhcm5pbmcoZHN0LCB0Z3RfdmFsdWUpOworCXRyMl9kc3RfdHJhY2VfZGlzYWJsZShkc3QpOworCXJldHVybiAwOworfQorCitpbnQgdHIyX2RzdF90cmFjZV93YW50KHN0cnVjdCB0cjJfZHN0ICpkc3QpCit7CisJcmV0dXJuICEhdHIyX2RzdF9nZXRfdHJhY2VfZmQoZHN0KTsKK30KKwordm9pZCB0cjJfZHN0X3dyaXRlX2xpbmUoc3RydWN0IHRyMl9kc3QgKmRzdCwgc3RydWN0IHN0cmJ1ZiAqYnVmX2xpbmUpCit7CisJaW50IGZkID0gdHIyX2RzdF9nZXRfdHJhY2VfZmQoZHN0KTsKKworCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKGJ1Zl9saW5lKTsgLyogZW5zdXJlIGZpbmFsIE5MIG9uIGJ1ZmZlciAqLworCisJLyoKKwkgKiBXZSBkbyBub3QgdXNlIHdyaXRlX2luX2Z1bGwoKSBiZWNhdXNlIHdlIGRvIG5vdCB3YW50CisJICogYSBzaG9ydC13cml0ZSB0byB0cnkgYWdhaW4uICBXZSBhcmUgdXNpbmcgT19BUFBFTkQgbW9kZQorCSAqIGZpbGVzIGFuZCB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGF0b21pYyBzZWVrK3dyaXRlLiBJZgorCSAqIGFub3RoZXIgdGhyZWFkIG9yIGdpdCBwcm9jZXNzIGlzIGNvbmN1cnJlbnRseSB3cml0aW5nIHRvCisJICogdGhpcyBmZCBvciBmaWxlLCBvdXIgcmVtYWluZGVyLXdyaXRlIG1heSBub3QgYmUgY29udGlndW91cworCSAqIHdpdGggb3VyIGluaXRpYWwgd3JpdGUgb2YgdGhpcyBtZXNzYWdlLiAgQW5kIHRoYXQgd2lsbAorCSAqIGNvbmZ1c2UgcmVhZGVycy4gIFNvIGp1c3QgZG9uJ3QgYm90aGVyLgorCSAqCisJICogSXQgaXMgYXNzdW1lZCB0aGF0IFRSQUNFMiBtZXNzYWdlcyBhcmUgc2hvcnQgZW5vdWdoIHRoYXQKKwkgKiB0aGUgc3lzdGVtIGNhbiB3cml0ZSB0aGVtIGluIDEgYXR0ZW1wdCBhbmQgd2Ugd29uJ3Qgc2VlCisJICogYSBzaG9ydC13cml0ZS4KKwkgKgorCSAqIElmIHdlIGdldCBhbiBJTyBlcnJvciwganVzdCBjbG9zZSB0aGUgdHJhY2UgZHN0LgorCSAqLworCWlmICh3cml0ZShmZCwgYnVmX2xpbmUtPmJ1ZiwgYnVmX2xpbmUtPmxlbikgPj0gMCkKKwkJcmV0dXJuOworCisJaWYgKHRyMl9kc3Rfd2FudF93YXJuaW5nKCkpCisJCXdhcm5pbmcoInVuYWJsZSB0byB3cml0ZSB0cmFjZSB0byAnJXMnOiAlcyIsCisJCQl0cjJfc3lzZW52X2Rpc3BsYXlfbmFtZShkc3QtPnN5c2Vudl92YXIpLAorCQkJc3RyZXJyb3IoZXJybm8pKTsKKwl0cjJfZHN0X3RyYWNlX2Rpc2FibGUoZHN0KTsKK30KZGlmZiAtLWdpdCBhL3RyYWNlMi90cjJfZHN0LmggYi90cmFjZTIvdHIyX2RzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYThjMTQKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjZTIvdHIyX2RzdC5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgVFIyX0RTVF9ICisjZGVmaW5lIFRSMl9EU1RfSAorCitzdHJ1Y3Qgc3RyYnVmOworI2luY2x1ZGUgInRyYWNlMi90cjJfc3lzZW52LmgiCisKK3N0cnVjdCB0cjJfZHN0IHsKKwllbnVtIHRyMl9zeXNlbnZfdmFyaWFibGUgc3lzZW52X3ZhcjsKKwlpbnQgZmQ7CisJdW5zaWduZWQgaW50IGluaXRpYWxpemVkIDogMTsKKwl1bnNpZ25lZCBpbnQgbmVlZF9jbG9zZSA6IDE7CisJdW5zaWduZWQgaW50IHRvb19tYW55X2ZpbGVzIDogMTsKK307CisKKy8qCisgKiBEaXNhYmxlIFRSQUNFMiBvbiB0aGUgZGVzdGluYXRpb24uICBJbiBUUkFDRTIgYSBkZXN0aW5hdGlvbiAoRFNUKQorICogd3JhcHMgYSBmaWxlIGRlc2NyaXB0b3I7IGl0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIFRBUkdFVCB3aGljaAorICogZGVmaW5lcyB0aGUgZm9ybWF0dGluZy4KKyAqLwordm9pZCB0cjJfZHN0X3RyYWNlX2Rpc2FibGUoc3RydWN0IHRyMl9kc3QgKmRzdCk7CisKKy8qCisgKiBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIERTVC4KKyAqIElmIDAsIHRoZSBkc3QgaXMgY2xvc2VkIG9yIGRpc2FibGVkLgorICovCitpbnQgdHIyX2RzdF9nZXRfdHJhY2VfZmQoc3RydWN0IHRyMl9kc3QgKmRzdCk7CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgRFNUIGlzIG9wZW5lZCBmb3Igd3JpdGluZy4KKyAqLworaW50IHRyMl9kc3RfdHJhY2Vfd2FudChzdHJ1Y3QgdHIyX2RzdCAqZHN0KTsKKworLyoKKyAqIFdyaXRlIGEgc2luZ2xlIGxpbmUvbWVzc2FnZSB0byB0aGUgdHJhY2UgZmlsZS4KKyAqLwordm9pZCB0cjJfZHN0X3dyaXRlX2xpbmUoc3RydWN0IHRyMl9kc3QgKmRzdCwgc3RydWN0IHN0cmJ1ZiAqYnVmX2xpbmUpOworCisjZW5kaWYgLyogVFIyX0RTVF9IICovCmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX3NpZC5jIGIvdHJhY2UyL3RyMl9zaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzZlNzVlCi0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyL3RyMl9zaWQuYwpAQCAtMCwwICsxLDExMiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl90YnVmLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl9zaWQuaCIKKworI2RlZmluZSBUUjJfRU5WVkFSX1BBUkVOVF9TSUQgIkdJVF9UUkFDRTJfUEFSRU5UX1NJRCIKKworc3RhdGljIHN0cnVjdCBzdHJidWYgdHIyc2lkX2J1ZiA9IFNUUkJVRl9JTklUOworc3RhdGljIGludCB0cjJzaWRfbnJfZ2l0X3BhcmVudHM7CisKKy8qCisgKiBDb21wdXRlIHRoZSBmaW5hbCBjb21wb25lbnQgb2YgdGhlIFNJRCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKyAqIFRoaXMgc2hvdWxkIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBwcm9jZXNzIGFuZCBiZSBhIHZhbGlkIGZpbGVuYW1lICh0bworICogYWxsb3cgd3JpdGluZyB0cmFjZTIgZGF0YSB0byBwZXItcHJvY2VzcyBmaWxlcykuICBJdCBzaG91bGQgYWxzbyBiZSBmaXhlZAorICogbGVuZ3RoIGZvciBwb3NzaWJsZSB1c2UgYXMgYSBkYXRhYmFzZSBrZXkuCisgKgorICogIjx5eXl5bW1kZD5UPGhobW1zcz4uPGZyYWN0aW9uPlotPGhvc3Q+LTxwcm9jZXNzPiIKKyAqCisgKiB3aGVyZSA8aG9zdD4gaXMgYSA5IGNoYXJhY3RlciBzdHJpbmc6CisgKiAgICAiSDxmaXJzdF84X2NoYXJzX29mX3NoYTFfb2ZfaG9zdG5hbWU+IgorICogICAgIkxvY2FsaG9zdCIgd2hlbiBubyBob3N0bmFtZS4KKyAqCisgKiB3aGVyZSA8cHJvY2Vzcz4gaXMgYSA5IGNoYXJhY3RlciBzdHJpbmcgY29udGFpbmluZyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQKKyAqIDMyIGJpdHMgaW4gdGhlIHByb2Nlc3MtaWQuCisgKiAgICAiUDxwaWQ+IgorICogKFRoaXMgaXMgYW4gYWJyaWJyYXJ5IGNob2ljZS4gIE9uIG1vc3Qgc3lzdGVtcyBwaWRfdCBpcyBhIDMyIGJpdCB2YWx1ZSwKKyAqIHNvIGxpbWl0IGRvZXNuJ3QgbWF0dGVyLiAgT24gbGFyZ2VyIHN5c3RlbXMsIGEgdHJ1bmNhdGVkIHZhbHVlIGlzIGZpbmUKKyAqIGZvciBvdXIgcHVycG9zZXMgaGVyZS4pCisgKi8KK3N0YXRpYyB2b2lkIHRyMl9zaWRfYXBwZW5kX215X3NpZF9jb21wb25lbnQodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyAqYWxnbyA9ICZoYXNoX2FsZ29zW0dJVF9IQVNIX1NIQTFdOworCXN0cnVjdCB0cjJfdGJ1ZiB0Yl9ub3c7CisJZ2l0X2hhc2hfY3R4IGN0eDsKKwlwaWRfdCBwaWQgPSBnZXRwaWQoKTsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9SQVdTWiArIDFdOworCWNoYXIgaGV4W0dJVF9NQVhfSEVYU1ogKyAxXTsKKwljaGFyIGhvc3RuYW1lW0hPU1RfTkFNRV9NQVggKyAxXTsKKworCXRyMl90YnVmX3V0Y19kYXRldGltZSgmdGJfbm93KTsKKwlzdHJidWZfYWRkc3RyKCZ0cjJzaWRfYnVmLCB0Yl9ub3cuYnVmKTsKKworCXN0cmJ1Zl9hZGRjaCgmdHIyc2lkX2J1ZiwgJy0nKTsKKwlpZiAoeGdldGhvc3RuYW1lKGhvc3RuYW1lLCBzaXplb2YoaG9zdG5hbWUpKSkKKwkJc3RyYnVmX2FkZCgmdHIyc2lkX2J1ZiwgIkxvY2FsaG9zdCIsIDkpOworCWVsc2UgeworCQlhbGdvLT5pbml0X2ZuKCZjdHgpOworCQlhbGdvLT51cGRhdGVfZm4oJmN0eCwgaG9zdG5hbWUsIHN0cmxlbihob3N0bmFtZSkpOworCQlhbGdvLT5maW5hbF9mbihoYXNoLCAmY3R4KTsKKwkJaGFzaF90b19oZXhfYWxnb3BfcihoZXgsIGhhc2gsIGFsZ28pOworCQlzdHJidWZfYWRkY2goJnRyMnNpZF9idWYsICdIJyk7CisJCXN0cmJ1Zl9hZGQoJnRyMnNpZF9idWYsIGhleCwgOCk7CisJfQorCisJc3RyYnVmX2FkZGYoJnRyMnNpZF9idWYsICItUCUwOCJQUkl4MzIsICh1aW50MzJfdClwaWQpOworfQorCisvKgorICogQ29tcHV0ZSBhICJ1bmlxdWUiIHNlc3Npb24gaWQgKFNJRCkgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MuICBUaGlzIGFsbG93cworICogYWxsIGV2ZW50cyBmcm9tIHRoaXMgcHJvY2VzcyB0byBoYXZlIGEgc2luZ2xlIGxhYmVsIChtdWNoIGxpa2UgYSBQSUQpLgorICoKKyAqIEV4cG9ydCB0aGlzIGludG8gb3VyIGVudmlyb25tZW50IHNvIHRoYXQgYWxsIGNoaWxkIHByb2Nlc3NlcyBpbmhlcml0IGl0LgorICoKKyAqIElmIHdlIHdlcmUgc3RhcnRlZCBieSBhbm90aGVyIGdpdCBpbnN0YW5jZSwgdXNlIG91ciBwYXJlbnQncyBTSUQgYXMgYQorICogcHJlZml4LiAgKFRoaXMgbGV0cyB1cyB0cmFjayBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcyBldmVuIGlmIHRoZXJlCisgKiBpcyBhbiBpbnRlcm1lZGlhdGUgc2hlbGwgcHJvY2Vzcy4pCisgKgorICogQWRkaXRpb25hbGx5LCBjb3VudCB0aGUgbnVtYmVyIG9mIG5lc3RlZCBnaXQgcHJvY2Vzc2VzLgorICovCitzdGF0aWMgdm9pZCB0cjJfc2lkX2NvbXB1dGUodm9pZCkKK3sKKwljb25zdCBjaGFyICpwYXJlbnRfc2lkOworCisJaWYgKHRyMnNpZF9idWYubGVuKQorCQlyZXR1cm47CisKKwlwYXJlbnRfc2lkID0gZ2V0ZW52KFRSMl9FTlZWQVJfUEFSRU5UX1NJRCk7CisJaWYgKHBhcmVudF9zaWQgJiYgKnBhcmVudF9zaWQpIHsKKwkJY29uc3QgY2hhciAqcDsKKwkJZm9yIChwID0gcGFyZW50X3NpZDsgKnA7IHArKykKKwkJCWlmICgqcCA9PSAnLycpCisJCQkJdHIyc2lkX25yX2dpdF9wYXJlbnRzKys7CisKKwkJc3RyYnVmX2FkZHN0cigmdHIyc2lkX2J1ZiwgcGFyZW50X3NpZCk7CisJCXN0cmJ1Zl9hZGRjaCgmdHIyc2lkX2J1ZiwgJy8nKTsKKwkJdHIyc2lkX25yX2dpdF9wYXJlbnRzKys7CisJfQorCisJdHIyX3NpZF9hcHBlbmRfbXlfc2lkX2NvbXBvbmVudCgpOworCisJc2V0ZW52KFRSMl9FTlZWQVJfUEFSRU5UX1NJRCwgdHIyc2lkX2J1Zi5idWYsIDEpOworfQorCitjb25zdCBjaGFyICp0cjJfc2lkX2dldCh2b2lkKQoreworCWlmICghdHIyc2lkX2J1Zi5sZW4pCisJCXRyMl9zaWRfY29tcHV0ZSgpOworCisJcmV0dXJuIHRyMnNpZF9idWYuYnVmOworfQorCitpbnQgdHIyX3NpZF9kZXB0aCh2b2lkKQoreworCWlmICghdHIyc2lkX2J1Zi5sZW4pCisJCXRyMl9zaWRfY29tcHV0ZSgpOworCisJcmV0dXJuIHRyMnNpZF9ucl9naXRfcGFyZW50czsKK30KKwordm9pZCB0cjJfc2lkX3JlbGVhc2Uodm9pZCkKK3sKKwlzdHJidWZfcmVsZWFzZSgmdHIyc2lkX2J1Zik7Cit9CmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX3NpZC5oIGIvdHJhY2UyL3RyMl9zaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmVmMzIxCi0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyL3RyMl9zaWQuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIFRSMl9TSURfSAorI2RlZmluZSBUUjJfU0lEX0gKKworLyoKKyAqIEdldCBvdXIgc2Vzc2lvbiBpZC4gQ29tcHV0ZSBpZiBuZWNlc3NhcnkuCisgKi8KK2NvbnN0IGNoYXIgKnRyMl9zaWRfZ2V0KHZvaWQpOworCisvKgorICogR2V0IG91ciBwcm9jZXNzIGRlcHRoLiAgQSB0b3AtbGV2ZWwgZ2l0IHByb2Nlc3MgaW52b2tlZCBmcm9tIHRoZQorICogY29tbWFuZCBsaW5lIHdpbGwgaGF2ZSBkZXB0aD0wLiAgQSBjaGlsZCBnaXQgcHJvY2VzcyB3aWxsIGhhdmUKKyAqIGRlcHRoPTEgYW5kIHNvIG9uLgorICovCitpbnQgdHIyX3NpZF9kZXB0aCh2b2lkKTsKKwordm9pZCB0cjJfc2lkX3JlbGVhc2Uodm9pZCk7CisKKyNlbmRpZiAvKiBUUjJfU0lEX0ggKi8KZGlmZiAtLWdpdCBhL3RyYWNlMi90cjJfc3lzZW52LmMgYi90cmFjZTIvdHIyX3N5c2Vudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzODBkY2YKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjZTIvdHIyX3N5c2Vudi5jCkBAIC0wLDAgKzEsMTMyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJ0cjJfc3lzZW52LmgiCisKKy8qCisgKiBFYWNoIGVudHJ5IHJlcHJlc2VudHMgYSB0cmFjZTIgc2V0dGluZy4KKyAqIFNlZSBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktdHJhY2UyLnR4dAorICovCitzdHJ1Y3QgdHIyX3N5c2Vudl9lbnRyeSB7CisJY29uc3QgY2hhciAqZW52X3Zhcl9uYW1lOworCWNvbnN0IGNoYXIgKmdpdF9jb25maWdfbmFtZTsKKworCWNoYXIgKnZhbHVlOworCXVuc2lnbmVkIGludCBnZXRlbnZfY2FsbGVkIDogMTsKK307CisKKy8qCisgKiBUaGlzIHRhYmxlIG11c3QgbWF0Y2ggImVudW0gdHIyX3N5c2Vudl92YXJpYWJsZSIgaW4gdHIyX3N5c2Vudi5oLgorICoKKyAqIFRoZSBzdHJpbmdzIGluIHRoaXMgdGFibGUgYXJlIGNvbnN0YW50IGFuZCBtdXN0IG1hdGNoIHRoZSBwdWJsaXNoZWQKKyAqIGNvbmZpZyBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMgYXMgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorICoKKyAqIFdlIGRvIG5vdCBkZWZpbmUgZW50cmllcyBmb3IgdGhlIEdJVF9UUkFDRTJfUEFSRU5UXyogZW52aXJvbm1lbnQKKyAqIHZhcmlhYmxlcyBiZWNhdXNlIHRoZXkgYXJlIHRyYW5zaWVudCBhbmQgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uCisgKiBmcm9tIHBhcmVudCB0byBjaGlsZCBnaXQgcHJvY2Vzc2VzLCByYXRoZXIgdGhhbiBzZXR0aW5ncy4KKyAqLworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIHN0cnVjdCB0cjJfc3lzZW52X2VudHJ5IHRyMl9zeXNlbnZfc2V0dGluZ3NbXSA9IHsKKwlbVFIyX1NZU0VOVl9DRkdfUEFSQU1dICAgICA9IHsgIkdJVF9UUkFDRTJfQ09ORklHX1BBUkFNUyIsCisJCQkJICAgICAgICJ0cmFjZTIuY29uZmlncGFyYW1zIiB9LAorCVtUUjJfU1lTRU5WX0VOVl9WQVJTXSAgICAgID0geyAiR0lUX1RSQUNFMl9FTlZfVkFSUyIsCisJCQkJICAgICAgICJ0cmFjZTIuZW52dmFycyIgfSwKKworCVtUUjJfU1lTRU5WX0RTVF9ERUJVR10gICAgID0geyAiR0lUX1RSQUNFMl9EU1RfREVCVUciLAorCQkJCSAgICAgICAidHJhY2UyLmRlc3RpbmF0aW9uZGVidWciIH0sCisKKwlbVFIyX1NZU0VOVl9OT1JNQUxdICAgICAgICA9IHsgIkdJVF9UUkFDRTIiLAorCQkJCSAgICAgICAidHJhY2UyLm5vcm1hbHRhcmdldCIgfSwKKwlbVFIyX1NZU0VOVl9OT1JNQUxfQlJJRUZdICA9IHsgIkdJVF9UUkFDRTJfQlJJRUYiLAorCQkJCSAgICAgICAidHJhY2UyLm5vcm1hbGJyaWVmIiB9LAorCisJW1RSMl9TWVNFTlZfRVZFTlRdICAgICAgICAgPSB7ICJHSVRfVFJBQ0UyX0VWRU5UIiwKKwkJCQkgICAgICAgInRyYWNlMi5ldmVudHRhcmdldCIgfSwKKwlbVFIyX1NZU0VOVl9FVkVOVF9CUklFRl0gICA9IHsgIkdJVF9UUkFDRTJfRVZFTlRfQlJJRUYiLAorCQkJCSAgICAgICAidHJhY2UyLmV2ZW50YnJpZWYiIH0sCisJW1RSMl9TWVNFTlZfRVZFTlRfTkVTVElOR10gPSB7ICJHSVRfVFJBQ0UyX0VWRU5UX05FU1RJTkciLAorCQkJCSAgICAgICAidHJhY2UyLmV2ZW50bmVzdGluZyIgfSwKKworCVtUUjJfU1lTRU5WX1BFUkZdICAgICAgICAgID0geyAiR0lUX1RSQUNFMl9QRVJGIiwKKwkJCQkgICAgICAgInRyYWNlMi5wZXJmdGFyZ2V0IiB9LAorCVtUUjJfU1lTRU5WX1BFUkZfQlJJRUZdICAgID0geyAiR0lUX1RSQUNFMl9QRVJGX0JSSUVGIiwKKwkJCQkgICAgICAgInRyYWNlMi5wZXJmYnJpZWYiIH0sCisKKwlbVFIyX1NZU0VOVl9NQVhfRklMRVNdICAgICA9IHsgIkdJVF9UUkFDRTJfTUFYX0ZJTEVTIiwKKwkJCQkgICAgICAgInRyYWNlMi5tYXhmaWxlcyIgfSwKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworc3RhdGljIGludCB0cjJfc3lzZW52X2NiKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmQpCit7CisJaW50IGs7CisKKwlpZiAoIXN0YXJ0c193aXRoKGtleSwgInRyYWNlMi4iKSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRSh0cjJfc3lzZW52X3NldHRpbmdzKTsgaysrKSB7CisJCWlmICghc3RyY21wKGtleSwgdHIyX3N5c2Vudl9zZXR0aW5nc1trXS5naXRfY29uZmlnX25hbWUpKSB7CisJCQlmcmVlKHRyMl9zeXNlbnZfc2V0dGluZ3Nba10udmFsdWUpOworCQkJdHIyX3N5c2Vudl9zZXR0aW5nc1trXS52YWx1ZSA9IHhzdHJkdXAodmFsdWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIExvYWQgVHJhY2UyIHNldHRpbmdzIGZyb20gdGhlIHN5c3RlbSBjb25maWcgKHVzdWFsbHkgIi9ldGMvZ2l0Y29uZmlnIgorICogdW5sZXNzIHdlIHdlcmUgYnVpbHQgd2l0aCBhIHJ1bnRpbWUtcHJlZml4KS4gIFRoZXNlIGFyZSBpbnRlbmRlZCB0bworICogZGVmaW5lIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgVHJhY2UyIGFzIHJlcXVlc3RlZCBieSB0aGUgYWRtaW5pc3RyYXRvci4KKyAqCisgKiBUaGVuIG92ZXJyaWRlIHdpdGggdGhlIFRyYWNlMiBzZXR0aW5ncyBmcm9tIHRoZSBnbG9iYWwgY29uZmlnLgorICovCit2b2lkIHRyMl9zeXNlbnZfbG9hZCh2b2lkKQoreworCWlmIChBUlJBWV9TSVpFKHRyMl9zeXNlbnZfc2V0dGluZ3MpICE9IFRSMl9TWVNFTlZfTVVTVF9CRV9MQVNUKQorCQlCVUcoInRyMl9zeXNlbnZfc2V0dGluZ3Mgc2l6ZSBpcyB3cm9uZyIpOworCisJcmVhZF92ZXJ5X2Vhcmx5X2NvbmZpZyh0cjJfc3lzZW52X2NiLCBOVUxMKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgdmFsdWUgZm9yIHRoZSByZXF1ZXN0ZWQgVHJhY2UyIHNldHRpbmcgZnJvbSB0aGVzZSBzb3VyY2VzOgorICogdGhlIHN5c3RlbSBjb25maWcsIHRoZSBnbG9iYWwgY29uZmlnLCBhbmQgdGhlIGVudmlyb25tZW50LgorICovCitjb25zdCBjaGFyICp0cjJfc3lzZW52X2dldChlbnVtIHRyMl9zeXNlbnZfdmFyaWFibGUgdmFyKQoreworCWlmICh2YXIgPj0gVFIyX1NZU0VOVl9NVVNUX0JFX0xBU1QpCisJCUJVRygidHIyX3N5c2Vudl9nZXQgaW52YWxpZCB2YXIgJyVkJyIsIHZhcik7CisKKwlpZiAoIXRyMl9zeXNlbnZfc2V0dGluZ3NbdmFyXS5nZXRlbnZfY2FsbGVkKSB7CisJCWNvbnN0IGNoYXIgKnYgPSBnZXRlbnYodHIyX3N5c2Vudl9zZXR0aW5nc1t2YXJdLmVudl92YXJfbmFtZSk7CisJCWlmICh2ICYmICp2KSB7CisJCQlmcmVlKHRyMl9zeXNlbnZfc2V0dGluZ3NbdmFyXS52YWx1ZSk7CisJCQl0cjJfc3lzZW52X3NldHRpbmdzW3Zhcl0udmFsdWUgPSB4c3RyZHVwKHYpOworCQl9CisJCXRyMl9zeXNlbnZfc2V0dGluZ3NbdmFyXS5nZXRlbnZfY2FsbGVkID0gMTsKKwl9CisKKwlyZXR1cm4gdHIyX3N5c2Vudl9zZXR0aW5nc1t2YXJdLnZhbHVlOworfQorCisvKgorICogUmV0dXJuIGEgZnJpZW5kbHkgbmFtZSBmb3IgdGhpcyBzZXR0aW5nIHRoYXQgaXMgc3VpdGFibGUgZm9yIHByaW50aW5nCisgKiBpbiBhbiBlcnJvciBtZXNzYWdlcy4KKyAqLworY29uc3QgY2hhciAqdHIyX3N5c2Vudl9kaXNwbGF5X25hbWUoZW51bSB0cjJfc3lzZW52X3ZhcmlhYmxlIHZhcikKK3sKKwlpZiAodmFyID49IFRSMl9TWVNFTlZfTVVTVF9CRV9MQVNUKQorCQlCVUcoInRyMl9zeXNlbnZfZ2V0IGludmFsaWQgdmFyICclZCciLCB2YXIpOworCisJcmV0dXJuIHRyMl9zeXNlbnZfc2V0dGluZ3NbdmFyXS5lbnZfdmFyX25hbWU7Cit9CisKK3ZvaWQgdHIyX3N5c2Vudl9yZWxlYXNlKHZvaWQpCit7CisJaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRSh0cjJfc3lzZW52X3NldHRpbmdzKTsgaysrKQorCQlmcmVlKHRyMl9zeXNlbnZfc2V0dGluZ3Nba10udmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvdHJhY2UyL3RyMl9zeXNlbnYuaCBiL3RyYWNlMi90cjJfc3lzZW52LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5MmVlMQotLS0gL2Rldi9udWxsCisrKyBiL3RyYWNlMi90cjJfc3lzZW52LmgKQEAgLTAsMCArMSwzOSBAQAorI2lmbmRlZiBUUjJfU1lTRU5WX0gKKyNkZWZpbmUgVFIyX1NZU0VOVl9ICisKKy8qCisgKiBUaGUgVHJhY2UyIHNldHRpbmdzIHRoYXQgY2FuIGJlIGxvYWRlZCBmcm9tIC9ldGMvZ2l0Y29uZmlnCisgKiBhbmQvb3IgdXNlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisgKgorICogTm90ZSB0aGF0IHRoaXMgc2V0IGRvZXMgbm90IGNvbnRhaW4gYW55IG9mIHRoZSB0cmFuc2llbnQKKyAqIGVudmlyb25tZW50IHZhcmlhYmxlcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gZnJvbSBwYXJlbnQKKyAqIHRvIGNoaWxkIGdpdCBwcm9jZXNzZXMsIHN1Y2ggIkdJVF9UUkFDRTJfUEFSRU5UX1NJRCIuCisgKi8KK2VudW0gdHIyX3N5c2Vudl92YXJpYWJsZSB7CisJVFIyX1NZU0VOVl9DRkdfUEFSQU0gPSAwLAorCVRSMl9TWVNFTlZfRU5WX1ZBUlMsCisKKwlUUjJfU1lTRU5WX0RTVF9ERUJVRywKKworCVRSMl9TWVNFTlZfTk9STUFMLAorCVRSMl9TWVNFTlZfTk9STUFMX0JSSUVGLAorCisJVFIyX1NZU0VOVl9FVkVOVCwKKwlUUjJfU1lTRU5WX0VWRU5UX0JSSUVGLAorCVRSMl9TWVNFTlZfRVZFTlRfTkVTVElORywKKworCVRSMl9TWVNFTlZfUEVSRiwKKwlUUjJfU1lTRU5WX1BFUkZfQlJJRUYsCisKKwlUUjJfU1lTRU5WX01BWF9GSUxFUywKKworCVRSMl9TWVNFTlZfTVVTVF9CRV9MQVNUCit9OworCit2b2lkIHRyMl9zeXNlbnZfbG9hZCh2b2lkKTsKKworY29uc3QgY2hhciAqdHIyX3N5c2Vudl9nZXQoZW51bSB0cjJfc3lzZW52X3ZhcmlhYmxlKTsKK2NvbnN0IGNoYXIgKnRyMl9zeXNlbnZfZGlzcGxheV9uYW1lKGVudW0gdHIyX3N5c2Vudl92YXJpYWJsZSB2YXIpOwordm9pZCB0cjJfc3lzZW52X3JlbGVhc2Uodm9pZCk7CisKKyNlbmRpZiAvKiBUUjJfU1lTRU5WX0ggKi8KZGlmZiAtLWdpdCBhL3RyYWNlMi90cjJfdGJ1Zi5jIGIvdHJhY2UyL3RyMl90YnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ5ODQ4MgotLS0gL2Rldi9udWxsCisrKyBiL3RyYWNlMi90cjJfdGJ1Zi5jCkBAIC0wLDAgKzEsNDcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRyMl90YnVmLmgiCisKK3ZvaWQgdHIyX3RidWZfbG9jYWxfdGltZShzdHJ1Y3QgdHIyX3RidWYgKnRiKQoreworCXN0cnVjdCB0aW1ldmFsIHR2OworCXN0cnVjdCB0bSB0bTsKKwl0aW1lX3Qgc2VjczsKKworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCXNlY3MgPSB0di50dl9zZWM7CisJbG9jYWx0aW1lX3IoJnNlY3MsICZ0bSk7CisKKwl4c25wcmludGYodGItPmJ1Ziwgc2l6ZW9mKHRiLT5idWYpLCAiJTAyZDolMDJkOiUwMmQuJTA2bGQiLCB0bS50bV9ob3VyLAorCQkgIHRtLnRtX21pbiwgdG0udG1fc2VjLCAobG9uZyl0di50dl91c2VjKTsKK30KKwordm9pZCB0cjJfdGJ1Zl91dGNfZGF0ZXRpbWVfZXh0ZW5kZWQoc3RydWN0IHRyMl90YnVmICp0YikKK3sKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwlzdHJ1Y3QgdG0gdG07CisJdGltZV90IHNlY3M7CisKKwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwlzZWNzID0gdHYudHZfc2VjOworCWdtdGltZV9yKCZzZWNzLCAmdG0pOworCisJeHNucHJpbnRmKHRiLT5idWYsIHNpemVvZih0Yi0+YnVmKSwKKwkJICAiJTRkLSUwMmQtJTAyZFQlMDJkOiUwMmQ6JTAyZC4lMDZsZFoiLCB0bS50bV95ZWFyICsgMTkwMCwKKwkJICB0bS50bV9tb24gKyAxLCB0bS50bV9tZGF5LCB0bS50bV9ob3VyLCB0bS50bV9taW4sIHRtLnRtX3NlYywKKwkJICAobG9uZyl0di50dl91c2VjKTsKK30KKwordm9pZCB0cjJfdGJ1Zl91dGNfZGF0ZXRpbWUoc3RydWN0IHRyMl90YnVmICp0YikKK3sKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwlzdHJ1Y3QgdG0gdG07CisJdGltZV90IHNlY3M7CisKKwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwlzZWNzID0gdHYudHZfc2VjOworCWdtdGltZV9yKCZzZWNzLCAmdG0pOworCisJeHNucHJpbnRmKHRiLT5idWYsIHNpemVvZih0Yi0+YnVmKSwgIiU0ZCUwMmQlMDJkVCUwMmQlMDJkJTAyZC4lMDZsZFoiLAorCQkgIHRtLnRtX3llYXIgKyAxOTAwLCB0bS50bV9tb24gKyAxLCB0bS50bV9tZGF5LCB0bS50bV9ob3VyLAorCQkgIHRtLnRtX21pbiwgdG0udG1fc2VjLCAobG9uZyl0di50dl91c2VjKTsKK30KZGlmZiAtLWdpdCBhL3RyYWNlMi90cjJfdGJ1Zi5oIGIvdHJhY2UyL3RyMl90YnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4NTNkOAotLS0gL2Rldi9udWxsCisrKyBiL3RyYWNlMi90cjJfdGJ1Zi5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgVFIyX1RCVUZfSAorI2RlZmluZSBUUjJfVEJVRl9ICisKKy8qCisgKiBBIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCBhIGZpeGVkIGJ1ZmZlciB0byBhdm9pZCBDIHN5bnRheAorICogcXVpcmtzIGFuZCB0aGUgbmVlZCB0byBwYXNzIGFyb3VuZCBhbiBhZGRpdGlvbmFsIHNpemVfdAorICogYXJndW1lbnQuCisgKi8KK3N0cnVjdCB0cjJfdGJ1ZiB7CisJY2hhciBidWZbMzJdOworfTsKKworLyoKKyAqIEZpbGwgYnVmZmVyIHdpdGggZm9ybWF0dGVkIGxvY2FsIHRpbWUgc3RyaW5nLgorICovCit2b2lkIHRyMl90YnVmX2xvY2FsX3RpbWUoc3RydWN0IHRyMl90YnVmICp0Yik7CisKKy8qCisgKiBGaWxsIGJ1ZmZlciB3aXRoIGZvcm1hdHRlZCBVVEMgZGF0YXRpbWUgc3RyaW5nLgorICovCit2b2lkIHRyMl90YnVmX3V0Y19kYXRldGltZV9leHRlbmRlZChzdHJ1Y3QgdHIyX3RidWYgKnRiKTsKK3ZvaWQgdHIyX3RidWZfdXRjX2RhdGV0aW1lKHN0cnVjdCB0cjJfdGJ1ZiAqdGIpOworCisjZW5kaWYgLyogVFIyX1RCVUZfSCAqLwpkaWZmIC0tZ2l0IGEvdHJhY2UyL3RyMl90Z3QuaCBiL3RyYWNlMi90cjJfdGd0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I5MDQ2OQotLS0gL2Rldi9udWxsCisrKyBiL3RyYWNlMi90cjJfdGd0LmgKQEAgLTAsMCArMSwxMzQgQEAKKyNpZm5kZWYgVFIyX1RHVF9ICisjZGVmaW5lIFRSMl9UR1RfSAorCitzdHJ1Y3QgY2hpbGRfcHJvY2VzczsKK3N0cnVjdCByZXBvc2l0b3J5Oworc3RydWN0IGpzb25fd3JpdGVyOworCisvKgorICogRnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYSBUUkFDRTIgInRhcmdldCIgdnRhYmxlLgorICovCisKK3R5cGVkZWYgaW50KHRyMl90Z3RfaW5pdF90KSh2b2lkKTsKK3R5cGVkZWYgdm9pZCh0cjJfdGd0X3Rlcm1fdCkodm9pZCk7CisKK3R5cGVkZWYgdm9pZCh0cjJfdGd0X2V2dF92ZXJzaW9uX2ZsX3QpKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTsKKwordHlwZWRlZiB2b2lkKHRyMl90Z3RfZXZ0X3N0YXJ0X2ZsX3QpKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCSAgICAgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKiphcmd2KTsKK3R5cGVkZWYgdm9pZCh0cjJfdGd0X2V2dF9leGl0X2ZsX3QpKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCSAgICB1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLCBpbnQgY29kZSk7Cit0eXBlZGVmIHZvaWQodHIyX3RndF9ldnRfc2lnbmFsX3QpKHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsIGludCBzaWdubyk7Cit0eXBlZGVmIHZvaWQodHIyX3RndF9ldnRfYXRleGl0X3QpKHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsIGludCBjb2RlKTsKKwordHlwZWRlZiB2b2lkKHRyMl90Z3RfZXZ0X2Vycm9yX3ZhX2ZsX3QpKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCQljb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOworCit0eXBlZGVmIHZvaWQodHIyX3RndF9ldnRfY29tbWFuZF9wYXRoX2ZsX3QpKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCQkgICAgY29uc3QgY2hhciAqY29tbWFuZF9wYXRoKTsKK3R5cGVkZWYgdm9pZCh0cjJfdGd0X2V2dF9jb21tYW5kX25hbWVfZmxfdCkoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgICAgY29uc3QgY2hhciAqaGllcmFyY2h5KTsKK3R5cGVkZWYgdm9pZCh0cjJfdGd0X2V2dF9jb21tYW5kX21vZGVfZmxfdCkoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJCSAgICBjb25zdCBjaGFyICptb2RlKTsKKwordHlwZWRlZiB2b2lkKHRyMl90Z3RfZXZ0X2FsaWFzX2ZsX3QpKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCSAgICAgY29uc3QgY2hhciAqYWxpYXMsIGNvbnN0IGNoYXIgKiphcmd2KTsKKwordHlwZWRlZiB2b2lkKHRyMl90Z3RfZXZ0X2NoaWxkX3N0YXJ0X2ZsX3QpKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCQkgICB1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKTsKK3R5cGVkZWYgdm9pZCh0cjJfdGd0X2V2dF9jaGlsZF9leGl0X2ZsX3QpKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCQkgIHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsIGludCBjaWQsCisJCQkJCSAgaW50IHBpZCwgaW50IGNvZGUsCisJCQkJCSAgdWludDY0X3QgdXNfZWxhcHNlZF9jaGlsZCk7CisKK3R5cGVkZWYgdm9pZCh0cjJfdGd0X2V2dF90aHJlYWRfc3RhcnRfZmxfdCkoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJCSAgICB1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlKTsKK3R5cGVkZWYgdm9pZCh0cjJfdGd0X2V2dF90aHJlYWRfZXhpdF9mbF90KShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCQkJICAgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCQkJICAgdWludDY0X3QgdXNfZWxhcHNlZF90aHJlYWQpOworCit0eXBlZGVmIHZvaWQodHIyX3RndF9ldnRfZXhlY19mbF90KShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCQkgICAgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwgaW50IGV4ZWNfaWQsCisJCQkJICAgIGNvbnN0IGNoYXIgKmV4ZSwgY29uc3QgY2hhciAqKmFyZ3YpOwordHlwZWRlZiB2b2lkKHRyMl90Z3RfZXZ0X2V4ZWNfcmVzdWx0X2ZsX3QpKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCQkgICB1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLAorCQkJCQkgICBpbnQgZXhlY19pZCwgaW50IGNvZGUpOworCit0eXBlZGVmIHZvaWQodHIyX3RndF9ldnRfcGFyYW1fZmxfdCkoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJICAgICBjb25zdCBjaGFyICpwYXJhbSwgY29uc3QgY2hhciAqdmFsdWUpOworCit0eXBlZGVmIHZvaWQodHIyX3RndF9ldnRfcmVwb19mbF90KShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pOworCit0eXBlZGVmIHZvaWQodHIyX3RndF9ldnRfcmVnaW9uX2VudGVyX3ByaW50Zl92YV9mbF90KSgKKwljb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwljb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbGFiZWwsIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCWNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7Cit0eXBlZGVmIHZvaWQodHIyX3RndF9ldnRfcmVnaW9uX2xlYXZlX3ByaW50Zl92YV9mbF90KSgKKwljb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwl1aW50NjRfdCB1c19lbGFwc2VkX3JlZ2lvbiwgY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLAorCWNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOworCit0eXBlZGVmIHZvaWQodHIyX3RndF9ldnRfZGF0YV9mbF90KShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCQkgICAgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCQkgICAgdWludDY0X3QgdXNfZWxhcHNlZF9yZWdpb24sCisJCQkJICAgIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQkgICAgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSk7Cit0eXBlZGVmIHZvaWQodHIyX3RndF9ldnRfZGF0YV9qc29uX2ZsX3QpKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCQkgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCQkJIHVpbnQ2NF90IHVzX2VsYXBzZWRfcmVnaW9uLAorCQkJCQkgY29uc3QgY2hhciAqY2F0ZWdvcnksCisJCQkJCSBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQkJIGNvbnN0IGNoYXIgKmtleSwKKwkJCQkJIGNvbnN0IHN0cnVjdCBqc29uX3dyaXRlciAqdmFsdWUpOworCit0eXBlZGVmIHZvaWQodHIyX3RndF9ldnRfcHJpbnRmX3ZhX2ZsX3QpKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCQkgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCQkJIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7CisKKy8qCisgKiAidnRhYmxlIiBmb3IgYSBUUkFDRTIgdGFyZ2V0LiAgVXNlIE5VTEwgaWYgYSB0YXJnZXQgZG9lcyBub3Qgd2FudAorICogdG8gZW1pdCB0aGF0IG1lc3NhZ2UuCisgKi8KKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK3N0cnVjdCB0cjJfdGd0IHsKKwlzdHJ1Y3QgdHIyX2RzdCAgICAgICAgICAgICAgICAgICAgICAgICAgKnBkc3Q7CisKKwl0cjJfdGd0X2luaXRfdCAgICAgICAgICAgICAgICAgICAgICAgICAgKnBmbl9pbml0OworCXRyMl90Z3RfdGVybV90ICAgICAgICAgICAgICAgICAgICAgICAgICAqcGZuX3Rlcm07CisKKwl0cjJfdGd0X2V2dF92ZXJzaW9uX2ZsX3QgICAgICAgICAgICAgICAgKnBmbl92ZXJzaW9uX2ZsOworCXRyMl90Z3RfZXZ0X3N0YXJ0X2ZsX3QgICAgICAgICAgICAgICAgICAqcGZuX3N0YXJ0X2ZsOworCXRyMl90Z3RfZXZ0X2V4aXRfZmxfdCAgICAgICAgICAgICAgICAgICAqcGZuX2V4aXRfZmw7CisJdHIyX3RndF9ldnRfc2lnbmFsX3QgICAgICAgICAgICAgICAgICAgICpwZm5fc2lnbmFsOworCXRyMl90Z3RfZXZ0X2F0ZXhpdF90ICAgICAgICAgICAgICAgICAgICAqcGZuX2F0ZXhpdDsKKwl0cjJfdGd0X2V2dF9lcnJvcl92YV9mbF90ICAgICAgICAgICAgICAgKnBmbl9lcnJvcl92YV9mbDsKKwl0cjJfdGd0X2V2dF9jb21tYW5kX3BhdGhfZmxfdCAgICAgICAgICAgKnBmbl9jb21tYW5kX3BhdGhfZmw7CisJdHIyX3RndF9ldnRfY29tbWFuZF9uYW1lX2ZsX3QgICAgICAgICAgICpwZm5fY29tbWFuZF9uYW1lX2ZsOworCXRyMl90Z3RfZXZ0X2NvbW1hbmRfbW9kZV9mbF90ICAgICAgICAgICAqcGZuX2NvbW1hbmRfbW9kZV9mbDsKKwl0cjJfdGd0X2V2dF9hbGlhc19mbF90ICAgICAgICAgICAgICAgICAgKnBmbl9hbGlhc19mbDsKKwl0cjJfdGd0X2V2dF9jaGlsZF9zdGFydF9mbF90ICAgICAgICAgICAgKnBmbl9jaGlsZF9zdGFydF9mbDsKKwl0cjJfdGd0X2V2dF9jaGlsZF9leGl0X2ZsX3QgICAgICAgICAgICAgKnBmbl9jaGlsZF9leGl0X2ZsOworCXRyMl90Z3RfZXZ0X3RocmVhZF9zdGFydF9mbF90ICAgICAgICAgICAqcGZuX3RocmVhZF9zdGFydF9mbDsKKwl0cjJfdGd0X2V2dF90aHJlYWRfZXhpdF9mbF90ICAgICAgICAgICAgKnBmbl90aHJlYWRfZXhpdF9mbDsKKwl0cjJfdGd0X2V2dF9leGVjX2ZsX3QgICAgICAgICAgICAgICAgICAgKnBmbl9leGVjX2ZsOworCXRyMl90Z3RfZXZ0X2V4ZWNfcmVzdWx0X2ZsX3QgICAgICAgICAgICAqcGZuX2V4ZWNfcmVzdWx0X2ZsOworCXRyMl90Z3RfZXZ0X3BhcmFtX2ZsX3QgICAgICAgICAgICAgICAgICAqcGZuX3BhcmFtX2ZsOworCXRyMl90Z3RfZXZ0X3JlcG9fZmxfdCAgICAgICAgICAgICAgICAgICAqcGZuX3JlcG9fZmw7CisJdHIyX3RndF9ldnRfcmVnaW9uX2VudGVyX3ByaW50Zl92YV9mbF90ICpwZm5fcmVnaW9uX2VudGVyX3ByaW50Zl92YV9mbDsKKwl0cjJfdGd0X2V2dF9yZWdpb25fbGVhdmVfcHJpbnRmX3ZhX2ZsX3QgKnBmbl9yZWdpb25fbGVhdmVfcHJpbnRmX3ZhX2ZsOworCXRyMl90Z3RfZXZ0X2RhdGFfZmxfdCAgICAgICAgICAgICAgICAgICAqcGZuX2RhdGFfZmw7CisJdHIyX3RndF9ldnRfZGF0YV9qc29uX2ZsX3QgICAgICAgICAgICAgICpwZm5fZGF0YV9qc29uX2ZsOworCXRyMl90Z3RfZXZ0X3ByaW50Zl92YV9mbF90ICAgICAgICAgICAgICAqcGZuX3ByaW50Zl92YV9mbDsKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworZXh0ZXJuIHN0cnVjdCB0cjJfdGd0IHRyMl90Z3RfZXZlbnQ7CitleHRlcm4gc3RydWN0IHRyMl90Z3QgdHIyX3RndF9ub3JtYWw7CitleHRlcm4gc3RydWN0IHRyMl90Z3QgdHIyX3RndF9wZXJmOworCisjZW5kaWYgLyogVFIyX1RHVF9IICovCmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX3RndF9ldmVudC5jIGIvdHJhY2UyL3RyMl90Z3RfZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzUzZThhCi0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyL3RyMl90Z3RfZXZlbnQuYwpAQCAtMCwwICsxLDYwMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAianNvbi13cml0ZXIuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJ0cmFjZTIvdHIyX2RzdC5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfdGJ1Zi5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfc2lkLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl9zeXNlbnYuaCIKKyNpbmNsdWRlICJ0cmFjZTIvdHIyX3RndC5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfdGxzLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdHIyX2RzdCB0cjJkc3RfZXZlbnQgPSB7IFRSMl9TWVNFTlZfRVZFTlQsIDAsIDAsIDAsIDAgfTsKKworLyoKKyAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgSlNPTiBkYXRhIGdlbmVyYXRlZCBieSB0aGUgRVZFTlQgdGFyZ2V0IGluIHRoaXMKKyAqIHNvdXJjZSBmaWxlLiBUaGUgdmVyc2lvbiBzaG91bGQgYmUgaW5jcmVtZW50ZWQgaWYgbmV3IGV2ZW50IHR5cGVzIGFyZSBhZGRlZCwKKyAqIGlmIGV4aXN0aW5nIGZpZWxkcyBhcmUgcmVtb3ZlZCwgb3IgaWYgdGhlcmUgYXJlIHNpZ25pZmljYW50IGNoYW5nZXMgaW4KKyAqIGludGVycHJldGF0aW9uIG9mIGV4aXN0aW5nIGV2ZW50cyBvciBmaWVsZHMuIFNtYWxsZXIgY2hhbmdlcywgc3VjaCBhcyBhZGRpbmcKKyAqIGEgbmV3IGZpZWxkIHRvIGFuIGV4aXN0aW5nIGV2ZW50LCBkbyBub3QgcmVxdWlyZSBhbiBpbmNyZW1lbnQgdG8gdGhlIEVWRU5UCisgKiBmb3JtYXQgdmVyc2lvbi4KKyAqLworI2RlZmluZSBUUjJfRVZFTlRfVkVSU0lPTiAiMiIKKworLyoKKyAqIFJlZ2lvbiBuZXN0aW5nIGxpbWl0IGZvciBtZXNzYWdlcyB3cml0dGVuIHRvIHRoZSBldmVudCB0YXJnZXQuCisgKgorICogVGhlICJyZWdpb25fZW50ZXIiIGFuZCAicmVnaW9uX2xlYXZlIiBtZXNzYWdlcyAoZXNwZWNpYWxseSByZWN1cnNpdmUKKyAqIG1lc3NhZ2VzIHN1Y2ggYXMgdGhvc2UgcHJvZHVjZWQgd2hpbGUgZGl2aW5nIHRoZSB3b3JrdHJlZSBvciBpbmRleCkKKyAqIGFyZSBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHRoZSBwZXJmb3JtYW5jZSB0YXJnZXQgZHVyaW5nIGRlYnVnZ2luZy4KKyAqCisgKiBTb21lIG9mIHRoZSBvdXRlci1tb3N0IG1lc3NhZ2VzLCBob3dldmVyLCBtYXkgYmUgb2YgaW50ZXJlc3QgdG8gdGhlCisgKiBldmVudCB0YXJnZXQuICBVc2UgdGhlIFRSMl9TWVNFTlZfRVZFTlRfTkVTVElORyBzZXR0aW5nIHRvIGluY3JlYXNlCisgKiByZWdpb24gZGV0YWlscyBpbiB0aGUgZXZlbnQgdGFyZ2V0LgorICovCitzdGF0aWMgaW50IHRyMmVudl9ldmVudF9tYXhfbmVzdGluZ19sZXZlbHMgPSAyOworCisvKgorICogVXNlIHRoZSBUUjJfU1lTRU5WX0VWRU5UX0JSSUVGIHRvIG9taXQgdGhlIDx0aW1lPiwgPGZpbGU+LCBhbmQKKyAqIDxsaW5lPiBmaWVsZHMgZnJvbSBtb3N0IGV2ZW50cy4KKyAqLworc3RhdGljIGludCB0cjJlbnZfZXZlbnRfYmVfYnJpZWY7CisKK3N0YXRpYyBpbnQgZm5faW5pdCh2b2lkKQoreworCWludCB3YW50ID0gdHIyX2RzdF90cmFjZV93YW50KCZ0cjJkc3RfZXZlbnQpOworCWludCBtYXhfbmVzdGluZzsKKwlpbnQgd2FudF9icmllZjsKKwljb25zdCBjaGFyICpuZXN0aW5nOworCWNvbnN0IGNoYXIgKmJyaWVmOworCisJaWYgKCF3YW50KQorCQlyZXR1cm4gd2FudDsKKworCW5lc3RpbmcgPSB0cjJfc3lzZW52X2dldChUUjJfU1lTRU5WX0VWRU5UX05FU1RJTkcpOworCWlmIChuZXN0aW5nICYmICpuZXN0aW5nICYmICgobWF4X25lc3RpbmcgPSBhdG9pKG5lc3RpbmcpKSA+IDApKQorCQl0cjJlbnZfZXZlbnRfbWF4X25lc3RpbmdfbGV2ZWxzID0gbWF4X25lc3Rpbmc7CisKKwlicmllZiA9IHRyMl9zeXNlbnZfZ2V0KFRSMl9TWVNFTlZfRVZFTlRfQlJJRUYpOworCWlmIChicmllZiAmJiAqYnJpZWYgJiYKKwkgICAgKCh3YW50X2JyaWVmID0gZ2l0X3BhcnNlX21heWJlX2Jvb2woYnJpZWYpKSAhPSAtMSkpCisJCXRyMmVudl9ldmVudF9iZV9icmllZiA9IHdhbnRfYnJpZWY7CisKKwlyZXR1cm4gd2FudDsKK30KKworc3RhdGljIHZvaWQgZm5fdGVybSh2b2lkKQoreworCXRyMl9kc3RfdHJhY2VfZGlzYWJsZSgmdHIyZHN0X2V2ZW50KTsKK30KKworLyoKKyAqIEFwcGVuZCBjb21tb24ga2V5LXZhbHVlIHBhaXJzIHRvIHRoZSBjdXJyZW50bHkgb3BlbiBKU09OIG9iamVjdC4KKyAqICAgICAiZXZlbnQ6IjxldmVudF9uYW1lPiIKKyAqICAgICAgInNpZCI6IjxzaWQ+IgorICogICAidGhyZWFkIjoiPHRocmVhZF9uYW1lPiIKKyAqICAgICAidGltZSI6Ijx0aW1lPiIKKyAqICAgICAiZmlsZSI6IjxmaWxlbmFtZT4iCisgKiAgICAgImxpbmUiOjxsaW5lX251bWJlcj4KKyAqICAgICAicmVwbyI6PHJlcG9faWQ+CisgKi8KK3N0YXRpYyB2b2lkIGV2ZW50X2ZtdF9wcmVwYXJlKGNvbnN0IGNoYXIgKmV2ZW50X25hbWUsIGNvbnN0IGNoYXIgKmZpbGUsCisJCQkgICAgICBpbnQgbGluZSwgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICAgICBzdHJ1Y3QganNvbl93cml0ZXIgKmp3KQoreworCXN0cnVjdCB0cjJ0bHNfdGhyZWFkX2N0eCAqY3R4ID0gdHIydGxzX2dldF9zZWxmKCk7CisJc3RydWN0IHRyMl90YnVmIHRiX25vdzsKKworCWp3X29iamVjdF9zdHJpbmcoancsICJldmVudCIsIGV2ZW50X25hbWUpOworCWp3X29iamVjdF9zdHJpbmcoancsICJzaWQiLCB0cjJfc2lkX2dldCgpKTsKKwlqd19vYmplY3Rfc3RyaW5nKGp3LCAidGhyZWFkIiwgY3R4LT50aHJlYWRfbmFtZS5idWYpOworCisJLyoKKwkgKiBJbiBicmllZiBtb2RlLCBvbmx5IGVtaXQgPHRpbWU+IG9uIHRoZXNlIDIgZXZlbnQgdHlwZXMuCisJICovCisJaWYgKCF0cjJlbnZfZXZlbnRfYmVfYnJpZWYgfHwgIXN0cmNtcChldmVudF9uYW1lLCAidmVyc2lvbiIpIHx8CisJICAgICFzdHJjbXAoZXZlbnRfbmFtZSwgImF0ZXhpdCIpKSB7CisJCXRyMl90YnVmX3V0Y19kYXRldGltZV9leHRlbmRlZCgmdGJfbm93KTsKKwkJandfb2JqZWN0X3N0cmluZyhqdywgInRpbWUiLCB0Yl9ub3cuYnVmKTsKKwl9CisKKwlpZiAoIXRyMmVudl9ldmVudF9iZV9icmllZiAmJiBmaWxlICYmICpmaWxlKSB7CisJCWp3X29iamVjdF9zdHJpbmcoancsICJmaWxlIiwgZmlsZSk7CisJCWp3X29iamVjdF9pbnRtYXgoancsICJsaW5lIiwgbGluZSk7CisJfQorCisJaWYgKHJlcG8pCisJCWp3X29iamVjdF9pbnRtYXgoancsICJyZXBvIiwgcmVwby0+dHJhY2UyX3JlcG9faWQpOworfQorCitzdGF0aWMgdm9pZCBmbl90b29fbWFueV9maWxlc19mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gInRvb19tYW55X2ZpbGVzIjsKKwlzdHJ1Y3QganNvbl93cml0ZXIgancgPSBKU09OX1dSSVRFUl9JTklUOworCisJandfb2JqZWN0X2JlZ2luKCZqdywgMCk7CisJZXZlbnRfZm10X3ByZXBhcmUoZXZlbnRfbmFtZSwgZmlsZSwgbGluZSwgTlVMTCwgJmp3KTsKKwlqd19lbmQoJmp3KTsKKworCXRyMl9kc3Rfd3JpdGVfbGluZSgmdHIyZHN0X2V2ZW50LCAmancuanNvbik7CisJandfcmVsZWFzZSgmancpOworfQorCitzdGF0aWMgdm9pZCBmbl92ZXJzaW9uX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAidmVyc2lvbiI7CisJc3RydWN0IGpzb25fd3JpdGVyIGp3ID0gSlNPTl9XUklURVJfSU5JVDsKKworCWp3X29iamVjdF9iZWdpbigmancsIDApOworCWV2ZW50X2ZtdF9wcmVwYXJlKGV2ZW50X25hbWUsIGZpbGUsIGxpbmUsIE5VTEwsICZqdyk7CisJandfb2JqZWN0X3N0cmluZygmancsICJldnQiLCBUUjJfRVZFTlRfVkVSU0lPTik7CisJandfb2JqZWN0X3N0cmluZygmancsICJleGUiLCBnaXRfdmVyc2lvbl9zdHJpbmcpOworCWp3X2VuZCgmancpOworCisJdHIyX2RzdF93cml0ZV9saW5lKCZ0cjJkc3RfZXZlbnQsICZqdy5qc29uKTsKKwlqd19yZWxlYXNlKCZqdyk7CisKKwlpZiAodHIyZHN0X2V2ZW50LnRvb19tYW55X2ZpbGVzKQorCQlmbl90b29fbWFueV9maWxlc19mbChmaWxlLCBsaW5lKTsKK30KKworc3RhdGljIHZvaWQgZm5fc3RhcnRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQl1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gInN0YXJ0IjsKKwlzdHJ1Y3QganNvbl93cml0ZXIgancgPSBKU09OX1dSSVRFUl9JTklUOworCWRvdWJsZSB0X2FicyA9IChkb3VibGUpdXNfZWxhcHNlZF9hYnNvbHV0ZSAvIDEwMDAwMDAuMDsKKworCWp3X29iamVjdF9iZWdpbigmancsIDApOworCWV2ZW50X2ZtdF9wcmVwYXJlKGV2ZW50X25hbWUsIGZpbGUsIGxpbmUsIE5VTEwsICZqdyk7CisJandfb2JqZWN0X2RvdWJsZSgmancsICJ0X2FicyIsIDYsIHRfYWJzKTsKKwlqd19vYmplY3RfaW5saW5lX2JlZ2luX2FycmF5KCZqdywgImFyZ3YiKTsKKwlqd19hcnJheV9hcmd2KCZqdywgYXJndik7CisJandfZW5kKCZqdyk7CisJandfZW5kKCZqdyk7CisKKwl0cjJfZHN0X3dyaXRlX2xpbmUoJnRyMmRzdF9ldmVudCwgJmp3Lmpzb24pOworCWp3X3JlbGVhc2UoJmp3KTsKK30KKworc3RhdGljIHZvaWQgZm5fZXhpdF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJICAgICAgIGludCBjb2RlKQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAiZXhpdCI7CisJc3RydWN0IGpzb25fd3JpdGVyIGp3ID0gSlNPTl9XUklURVJfSU5JVDsKKwlkb3VibGUgdF9hYnMgPSAoZG91YmxlKXVzX2VsYXBzZWRfYWJzb2x1dGUgLyAxMDAwMDAwLjA7CisKKwlqd19vYmplY3RfYmVnaW4oJmp3LCAwKTsKKwlldmVudF9mbXRfcHJlcGFyZShldmVudF9uYW1lLCBmaWxlLCBsaW5lLCBOVUxMLCAmancpOworCWp3X29iamVjdF9kb3VibGUoJmp3LCAidF9hYnMiLCA2LCB0X2Ficyk7CisJandfb2JqZWN0X2ludG1heCgmancsICJjb2RlIiwgY29kZSk7CisJandfZW5kKCZqdyk7CisKKwl0cjJfZHN0X3dyaXRlX2xpbmUoJnRyMmRzdF9ldmVudCwgJmp3Lmpzb24pOworCWp3X3JlbGVhc2UoJmp3KTsKK30KKworc3RhdGljIHZvaWQgZm5fc2lnbmFsKHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsIGludCBzaWdubykKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gInNpZ25hbCI7CisJc3RydWN0IGpzb25fd3JpdGVyIGp3ID0gSlNPTl9XUklURVJfSU5JVDsKKwlkb3VibGUgdF9hYnMgPSAoZG91YmxlKXVzX2VsYXBzZWRfYWJzb2x1dGUgLyAxMDAwMDAwLjA7CisKKwlqd19vYmplY3RfYmVnaW4oJmp3LCAwKTsKKwlldmVudF9mbXRfcHJlcGFyZShldmVudF9uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIE5VTEwsICZqdyk7CisJandfb2JqZWN0X2RvdWJsZSgmancsICJ0X2FicyIsIDYsIHRfYWJzKTsKKwlqd19vYmplY3RfaW50bWF4KCZqdywgInNpZ25vIiwgc2lnbm8pOworCWp3X2VuZCgmancpOworCisJdHIyX2RzdF93cml0ZV9saW5lKCZ0cjJkc3RfZXZlbnQsICZqdy5qc29uKTsKKwlqd19yZWxlYXNlKCZqdyk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX2F0ZXhpdCh1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLCBpbnQgY29kZSkKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gImF0ZXhpdCI7CisJc3RydWN0IGpzb25fd3JpdGVyIGp3ID0gSlNPTl9XUklURVJfSU5JVDsKKwlkb3VibGUgdF9hYnMgPSAoZG91YmxlKXVzX2VsYXBzZWRfYWJzb2x1dGUgLyAxMDAwMDAwLjA7CisKKwlqd19vYmplY3RfYmVnaW4oJmp3LCAwKTsKKwlldmVudF9mbXRfcHJlcGFyZShldmVudF9uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIE5VTEwsICZqdyk7CisJandfb2JqZWN0X2RvdWJsZSgmancsICJ0X2FicyIsIDYsIHRfYWJzKTsKKwlqd19vYmplY3RfaW50bWF4KCZqdywgImNvZGUiLCBjb2RlKTsKKwlqd19lbmQoJmp3KTsKKworCXRyMl9kc3Rfd3JpdGVfbGluZSgmdHIyZHN0X2V2ZW50LCAmancuanNvbik7CisJandfcmVsZWFzZSgmancpOworfQorCitzdGF0aWMgdm9pZCBtYXliZV9hZGRfc3RyaW5nX3ZhKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUsCisJCQkJY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCWlmIChmbXQgJiYgKmZtdCkgeworCQl2YV9saXN0IGNvcHlfYXA7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkJdmFfY29weShjb3B5X2FwLCBhcCk7CisJCXN0cmJ1Zl92YWRkZigmYnVmLCBmbXQsIGNvcHlfYXApOworCQl2YV9lbmQoY29weV9hcCk7CisKKwkJandfb2JqZWN0X3N0cmluZyhqdywgZmllbGRfbmFtZSwgYnVmLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBmbl9lcnJvcl92YV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LAorCQkJICAgdmFfbGlzdCBhcCkKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gImVycm9yIjsKKwlzdHJ1Y3QganNvbl93cml0ZXIgancgPSBKU09OX1dSSVRFUl9JTklUOworCisJandfb2JqZWN0X2JlZ2luKCZqdywgMCk7CisJZXZlbnRfZm10X3ByZXBhcmUoZXZlbnRfbmFtZSwgZmlsZSwgbGluZSwgTlVMTCwgJmp3KTsKKwltYXliZV9hZGRfc3RyaW5nX3ZhKCZqdywgIm1zZyIsIGZtdCwgYXApOworCS8qCisJICogQWxzbyBlbWl0IHRoZSBmb3JtYXQgc3RyaW5nIGFzIGEgZmllbGQgaW4gY2FzZQorCSAqIHBvc3QtcHJvY2Vzc29ycyB3YW50IHRvIGFnZ3JlZ2F0ZSBjb21tb24gZXJyb3IKKwkgKiBtZXNzYWdlcyBieSB0eXBlIHdpdGhvdXQgYXJndW1lbnQgZmllbGRzIChzdWNoCisJICogYXMgcGF0aG5hbWVzIG9yIGJyYW5jaCBuYW1lcykgY2x1dHRlcmluZyBpdCB1cC4KKwkgKi8KKwlpZiAoZm10ICYmICpmbXQpCisJCWp3X29iamVjdF9zdHJpbmcoJmp3LCAiZm10IiwgZm10KTsKKwlqd19lbmQoJmp3KTsKKworCXRyMl9kc3Rfd3JpdGVfbGluZSgmdHIyZHN0X2V2ZW50LCAmancuanNvbik7CisJandfcmVsZWFzZSgmancpOworfQorCitzdGF0aWMgdm9pZCBmbl9jb21tYW5kX3BhdGhfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnBhdGhuYW1lKQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAiY21kX3BhdGgiOworCXN0cnVjdCBqc29uX3dyaXRlciBqdyA9IEpTT05fV1JJVEVSX0lOSVQ7CisKKwlqd19vYmplY3RfYmVnaW4oJmp3LCAwKTsKKwlldmVudF9mbXRfcHJlcGFyZShldmVudF9uYW1lLCBmaWxlLCBsaW5lLCBOVUxMLCAmancpOworCWp3X29iamVjdF9zdHJpbmcoJmp3LCAicGF0aCIsIHBhdGhuYW1lKTsKKwlqd19lbmQoJmp3KTsKKworCXRyMl9kc3Rfd3JpdGVfbGluZSgmdHIyZHN0X2V2ZW50LCAmancuanNvbik7CisJandfcmVsZWFzZSgmancpOworfQorCitzdGF0aWMgdm9pZCBmbl9jb21tYW5kX25hbWVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICAgY29uc3QgY2hhciAqaGllcmFyY2h5KQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAiY21kX25hbWUiOworCXN0cnVjdCBqc29uX3dyaXRlciBqdyA9IEpTT05fV1JJVEVSX0lOSVQ7CisKKwlqd19vYmplY3RfYmVnaW4oJmp3LCAwKTsKKwlldmVudF9mbXRfcHJlcGFyZShldmVudF9uYW1lLCBmaWxlLCBsaW5lLCBOVUxMLCAmancpOworCWp3X29iamVjdF9zdHJpbmcoJmp3LCAibmFtZSIsIG5hbWUpOworCWlmIChoaWVyYXJjaHkgJiYgKmhpZXJhcmNoeSkKKwkJandfb2JqZWN0X3N0cmluZygmancsICJoaWVyYXJjaHkiLCBoaWVyYXJjaHkpOworCWp3X2VuZCgmancpOworCisJdHIyX2RzdF93cml0ZV9saW5lKCZ0cjJkc3RfZXZlbnQsICZqdy5qc29uKTsKKwlqd19yZWxlYXNlKCZqdyk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX2NvbW1hbmRfbW9kZV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbW9kZSkKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gImNtZF9tb2RlIjsKKwlzdHJ1Y3QganNvbl93cml0ZXIgancgPSBKU09OX1dSSVRFUl9JTklUOworCisJandfb2JqZWN0X2JlZ2luKCZqdywgMCk7CisJZXZlbnRfZm10X3ByZXBhcmUoZXZlbnRfbmFtZSwgZmlsZSwgbGluZSwgTlVMTCwgJmp3KTsKKwlqd19vYmplY3Rfc3RyaW5nKCZqdywgIm5hbWUiLCBtb2RlKTsKKwlqd19lbmQoJmp3KTsKKworCXRyMl9kc3Rfd3JpdGVfbGluZSgmdHIyZHN0X2V2ZW50LCAmancuanNvbik7CisJandfcmVsZWFzZSgmancpOworfQorCitzdGF0aWMgdm9pZCBmbl9hbGlhc19mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqYWxpYXMsCisJCQljb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gImFsaWFzIjsKKwlzdHJ1Y3QganNvbl93cml0ZXIgancgPSBKU09OX1dSSVRFUl9JTklUOworCisJandfb2JqZWN0X2JlZ2luKCZqdywgMCk7CisJZXZlbnRfZm10X3ByZXBhcmUoZXZlbnRfbmFtZSwgZmlsZSwgbGluZSwgTlVMTCwgJmp3KTsKKwlqd19vYmplY3Rfc3RyaW5nKCZqdywgImFsaWFzIiwgYWxpYXMpOworCWp3X29iamVjdF9pbmxpbmVfYmVnaW5fYXJyYXkoJmp3LCAiYXJndiIpOworCWp3X2FycmF5X2FyZ3YoJmp3LCBhcmd2KTsKKwlqd19lbmQoJmp3KTsKKwlqd19lbmQoJmp3KTsKKworCXRyMl9kc3Rfd3JpdGVfbGluZSgmdHIyZHN0X2V2ZW50LCAmancuanNvbik7CisJandfcmVsZWFzZSgmancpOworfQorCitzdGF0aWMgdm9pZCBmbl9jaGlsZF9zdGFydF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCSAgICAgIHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAiY2hpbGRfc3RhcnQiOworCXN0cnVjdCBqc29uX3dyaXRlciBqdyA9IEpTT05fV1JJVEVSX0lOSVQ7CisKKwlqd19vYmplY3RfYmVnaW4oJmp3LCAwKTsKKwlldmVudF9mbXRfcHJlcGFyZShldmVudF9uYW1lLCBmaWxlLCBsaW5lLCBOVUxMLCAmancpOworCWp3X29iamVjdF9pbnRtYXgoJmp3LCAiY2hpbGRfaWQiLCBjbWQtPnRyYWNlMl9jaGlsZF9pZCk7CisJaWYgKGNtZC0+dHJhY2UyX2hvb2tfbmFtZSkgeworCQlqd19vYmplY3Rfc3RyaW5nKCZqdywgImNoaWxkX2NsYXNzIiwgImhvb2siKTsKKwkJandfb2JqZWN0X3N0cmluZygmancsICJob29rX25hbWUiLCBjbWQtPnRyYWNlMl9ob29rX25hbWUpOworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKmNoaWxkX2NsYXNzID0KKwkJCWNtZC0+dHJhY2UyX2NoaWxkX2NsYXNzID8gY21kLT50cmFjZTJfY2hpbGRfY2xhc3MgOiAiPyI7CisJCWp3X29iamVjdF9zdHJpbmcoJmp3LCAiY2hpbGRfY2xhc3MiLCBjaGlsZF9jbGFzcyk7CisJfQorCWlmIChjbWQtPmRpcikKKwkJandfb2JqZWN0X3N0cmluZygmancsICJjZCIsIGNtZC0+ZGlyKTsKKwlqd19vYmplY3RfYm9vbCgmancsICJ1c2Vfc2hlbGwiLCBjbWQtPnVzZV9zaGVsbCk7CisJandfb2JqZWN0X2lubGluZV9iZWdpbl9hcnJheSgmancsICJhcmd2Iik7CisJaWYgKGNtZC0+Z2l0X2NtZCkKKwkJandfYXJyYXlfc3RyaW5nKCZqdywgImdpdCIpOworCWp3X2FycmF5X2FyZ3YoJmp3LCBjbWQtPmFyZ3YpOworCWp3X2VuZCgmancpOworCWp3X2VuZCgmancpOworCisJdHIyX2RzdF93cml0ZV9saW5lKCZ0cjJkc3RfZXZlbnQsICZqdy5qc29uKTsKKwlqd19yZWxlYXNlKCZqdyk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX2NoaWxkX2V4aXRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkgICAgIHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsIGludCBjaWQsIGludCBwaWQsCisJCQkgICAgIGludCBjb2RlLCB1aW50NjRfdCB1c19lbGFwc2VkX2NoaWxkKQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAiY2hpbGRfZXhpdCI7CisJc3RydWN0IGpzb25fd3JpdGVyIGp3ID0gSlNPTl9XUklURVJfSU5JVDsKKwlkb3VibGUgdF9yZWwgPSAoZG91YmxlKXVzX2VsYXBzZWRfY2hpbGQgLyAxMDAwMDAwLjA7CisKKwlqd19vYmplY3RfYmVnaW4oJmp3LCAwKTsKKwlldmVudF9mbXRfcHJlcGFyZShldmVudF9uYW1lLCBmaWxlLCBsaW5lLCBOVUxMLCAmancpOworCWp3X29iamVjdF9pbnRtYXgoJmp3LCAiY2hpbGRfaWQiLCBjaWQpOworCWp3X29iamVjdF9pbnRtYXgoJmp3LCAicGlkIiwgcGlkKTsKKwlqd19vYmplY3RfaW50bWF4KCZqdywgImNvZGUiLCBjb2RlKTsKKwlqd19vYmplY3RfZG91YmxlKCZqdywgInRfcmVsIiwgNiwgdF9yZWwpOworCWp3X2VuZCgmancpOworCisJdHIyX2RzdF93cml0ZV9saW5lKCZ0cjJkc3RfZXZlbnQsICZqdy5qc29uKTsKKworCWp3X3JlbGVhc2UoJmp3KTsKK30KKworc3RhdGljIHZvaWQgZm5fdGhyZWFkX3N0YXJ0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJICAgICAgIHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUpCit7CisJY29uc3QgY2hhciAqZXZlbnRfbmFtZSA9ICJ0aHJlYWRfc3RhcnQiOworCXN0cnVjdCBqc29uX3dyaXRlciBqdyA9IEpTT05fV1JJVEVSX0lOSVQ7CisKKwlqd19vYmplY3RfYmVnaW4oJmp3LCAwKTsKKwlldmVudF9mbXRfcHJlcGFyZShldmVudF9uYW1lLCBmaWxlLCBsaW5lLCBOVUxMLCAmancpOworCWp3X2VuZCgmancpOworCisJdHIyX2RzdF93cml0ZV9saW5lKCZ0cjJkc3RfZXZlbnQsICZqdy5qc29uKTsKKwlqd19yZWxlYXNlKCZqdyk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX3RocmVhZF9leGl0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJICAgICAgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCSAgICAgIHVpbnQ2NF90IHVzX2VsYXBzZWRfdGhyZWFkKQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAidGhyZWFkX2V4aXQiOworCXN0cnVjdCBqc29uX3dyaXRlciBqdyA9IEpTT05fV1JJVEVSX0lOSVQ7CisJZG91YmxlIHRfcmVsID0gKGRvdWJsZSl1c19lbGFwc2VkX3RocmVhZCAvIDEwMDAwMDAuMDsKKworCWp3X29iamVjdF9iZWdpbigmancsIDApOworCWV2ZW50X2ZtdF9wcmVwYXJlKGV2ZW50X25hbWUsIGZpbGUsIGxpbmUsIE5VTEwsICZqdyk7CisJandfb2JqZWN0X2RvdWJsZSgmancsICJ0X3JlbCIsIDYsIHRfcmVsKTsKKwlqd19lbmQoJmp3KTsKKworCXRyMl9kc3Rfd3JpdGVfbGluZSgmdHIyZHN0X2V2ZW50LCAmancuanNvbik7CisJandfcmVsZWFzZSgmancpOworfQorCitzdGF0aWMgdm9pZCBmbl9leGVjX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCB1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLAorCQkgICAgICAgaW50IGV4ZWNfaWQsIGNvbnN0IGNoYXIgKmV4ZSwgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqZXZlbnRfbmFtZSA9ICJleGVjIjsKKwlzdHJ1Y3QganNvbl93cml0ZXIgancgPSBKU09OX1dSSVRFUl9JTklUOworCisJandfb2JqZWN0X2JlZ2luKCZqdywgMCk7CisJZXZlbnRfZm10X3ByZXBhcmUoZXZlbnRfbmFtZSwgZmlsZSwgbGluZSwgTlVMTCwgJmp3KTsKKwlqd19vYmplY3RfaW50bWF4KCZqdywgImV4ZWNfaWQiLCBleGVjX2lkKTsKKwlpZiAoZXhlKQorCQlqd19vYmplY3Rfc3RyaW5nKCZqdywgImV4ZSIsIGV4ZSk7CisJandfb2JqZWN0X2lubGluZV9iZWdpbl9hcnJheSgmancsICJhcmd2Iik7CisJandfYXJyYXlfYXJndigmancsIGFyZ3YpOworCWp3X2VuZCgmancpOworCWp3X2VuZCgmancpOworCisJdHIyX2RzdF93cml0ZV9saW5lKCZ0cjJkc3RfZXZlbnQsICZqdy5qc29uKTsKKwlqd19yZWxlYXNlKCZqdyk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX2V4ZWNfcmVzdWx0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJICAgICAgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwgaW50IGV4ZWNfaWQsCisJCQkgICAgICBpbnQgY29kZSkKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gImV4ZWNfcmVzdWx0IjsKKwlzdHJ1Y3QganNvbl93cml0ZXIgancgPSBKU09OX1dSSVRFUl9JTklUOworCisJandfb2JqZWN0X2JlZ2luKCZqdywgMCk7CisJZXZlbnRfZm10X3ByZXBhcmUoZXZlbnRfbmFtZSwgZmlsZSwgbGluZSwgTlVMTCwgJmp3KTsKKwlqd19vYmplY3RfaW50bWF4KCZqdywgImV4ZWNfaWQiLCBleGVjX2lkKTsKKwlqd19vYmplY3RfaW50bWF4KCZqdywgImNvZGUiLCBjb2RlKTsKKwlqd19lbmQoJmp3KTsKKworCXRyMl9kc3Rfd3JpdGVfbGluZSgmdHIyZHN0X2V2ZW50LCAmancuanNvbik7CisJandfcmVsZWFzZSgmancpOworfQorCitzdGF0aWMgdm9pZCBmbl9wYXJhbV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqcGFyYW0sCisJCQljb25zdCBjaGFyICp2YWx1ZSkKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gImRlZl9wYXJhbSI7CisJc3RydWN0IGpzb25fd3JpdGVyIGp3ID0gSlNPTl9XUklURVJfSU5JVDsKKworCWp3X29iamVjdF9iZWdpbigmancsIDApOworCWV2ZW50X2ZtdF9wcmVwYXJlKGV2ZW50X25hbWUsIGZpbGUsIGxpbmUsIE5VTEwsICZqdyk7CisJandfb2JqZWN0X3N0cmluZygmancsICJwYXJhbSIsIHBhcmFtKTsKKwlqd19vYmplY3Rfc3RyaW5nKCZqdywgInZhbHVlIiwgdmFsdWUpOworCWp3X2VuZCgmancpOworCisJdHIyX2RzdF93cml0ZV9saW5lKCZ0cjJkc3RfZXZlbnQsICZqdy5qc29uKTsKKwlqd19yZWxlYXNlKCZqdyk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX3JlcG9fZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbykKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gImRlZl9yZXBvIjsKKwlzdHJ1Y3QganNvbl93cml0ZXIgancgPSBKU09OX1dSSVRFUl9JTklUOworCisJandfb2JqZWN0X2JlZ2luKCZqdywgMCk7CisJZXZlbnRfZm10X3ByZXBhcmUoZXZlbnRfbmFtZSwgZmlsZSwgbGluZSwgcmVwbywgJmp3KTsKKwlqd19vYmplY3Rfc3RyaW5nKCZqdywgIndvcmt0cmVlIiwgcmVwby0+d29ya3RyZWUpOworCWp3X2VuZCgmancpOworCisJdHIyX2RzdF93cml0ZV9saW5lKCZ0cjJkc3RfZXZlbnQsICZqdy5qc29uKTsKKwlqd19yZWxlYXNlKCZqdyk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX3JlZ2lvbl9lbnRlcl9wcmludGZfdmFfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJCSB1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLAorCQkJCQkgY29uc3QgY2hhciAqY2F0ZWdvcnksCisJCQkJCSBjb25zdCBjaGFyICpsYWJlbCwKKwkJCQkJIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCQkgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAicmVnaW9uX2VudGVyIjsKKwlzdHJ1Y3QgdHIydGxzX3RocmVhZF9jdHggKmN0eCA9IHRyMnRsc19nZXRfc2VsZigpOworCWlmIChjdHgtPm5yX29wZW5fcmVnaW9ucyA8PSB0cjJlbnZfZXZlbnRfbWF4X25lc3RpbmdfbGV2ZWxzKSB7CisJCXN0cnVjdCBqc29uX3dyaXRlciBqdyA9IEpTT05fV1JJVEVSX0lOSVQ7CisKKwkJandfb2JqZWN0X2JlZ2luKCZqdywgMCk7CisJCWV2ZW50X2ZtdF9wcmVwYXJlKGV2ZW50X25hbWUsIGZpbGUsIGxpbmUsIHJlcG8sICZqdyk7CisJCWp3X29iamVjdF9pbnRtYXgoJmp3LCAibmVzdGluZyIsIGN0eC0+bnJfb3Blbl9yZWdpb25zKTsKKwkJaWYgKGNhdGVnb3J5KQorCQkJandfb2JqZWN0X3N0cmluZygmancsICJjYXRlZ29yeSIsIGNhdGVnb3J5KTsKKwkJaWYgKGxhYmVsKQorCQkJandfb2JqZWN0X3N0cmluZygmancsICJsYWJlbCIsIGxhYmVsKTsKKwkJbWF5YmVfYWRkX3N0cmluZ192YSgmancsICJtc2ciLCBmbXQsIGFwKTsKKwkJandfZW5kKCZqdyk7CisKKwkJdHIyX2RzdF93cml0ZV9saW5lKCZ0cjJkc3RfZXZlbnQsICZqdy5qc29uKTsKKwkJandfcmVsZWFzZSgmancpOworCX0KK30KKworc3RhdGljIHZvaWQgZm5fcmVnaW9uX2xlYXZlX3ByaW50Zl92YV9mbCgKKwljb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwl1aW50NjRfdCB1c19lbGFwc2VkX3JlZ2lvbiwgY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLAorCWNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJY29uc3QgY2hhciAqZXZlbnRfbmFtZSA9ICJyZWdpb25fbGVhdmUiOworCXN0cnVjdCB0cjJ0bHNfdGhyZWFkX2N0eCAqY3R4ID0gdHIydGxzX2dldF9zZWxmKCk7CisJaWYgKGN0eC0+bnJfb3Blbl9yZWdpb25zIDw9IHRyMmVudl9ldmVudF9tYXhfbmVzdGluZ19sZXZlbHMpIHsKKwkJc3RydWN0IGpzb25fd3JpdGVyIGp3ID0gSlNPTl9XUklURVJfSU5JVDsKKwkJZG91YmxlIHRfcmVsID0gKGRvdWJsZSl1c19lbGFwc2VkX3JlZ2lvbiAvIDEwMDAwMDAuMDsKKworCQlqd19vYmplY3RfYmVnaW4oJmp3LCAwKTsKKwkJZXZlbnRfZm10X3ByZXBhcmUoZXZlbnRfbmFtZSwgZmlsZSwgbGluZSwgcmVwbywgJmp3KTsKKwkJandfb2JqZWN0X2RvdWJsZSgmancsICJ0X3JlbCIsIDYsIHRfcmVsKTsKKwkJandfb2JqZWN0X2ludG1heCgmancsICJuZXN0aW5nIiwgY3R4LT5ucl9vcGVuX3JlZ2lvbnMpOworCQlpZiAoY2F0ZWdvcnkpCisJCQlqd19vYmplY3Rfc3RyaW5nKCZqdywgImNhdGVnb3J5IiwgY2F0ZWdvcnkpOworCQlpZiAobGFiZWwpCisJCQlqd19vYmplY3Rfc3RyaW5nKCZqdywgImxhYmVsIiwgbGFiZWwpOworCQltYXliZV9hZGRfc3RyaW5nX3ZhKCZqdywgIm1zZyIsIGZtdCwgYXApOworCQlqd19lbmQoJmp3KTsKKworCQl0cjJfZHN0X3dyaXRlX2xpbmUoJnRyMmRzdF9ldmVudCwgJmp3Lmpzb24pOworCQlqd19yZWxlYXNlKCZqdyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmbl9kYXRhX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCB1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLAorCQkgICAgICAgdWludDY0X3QgdXNfZWxhcHNlZF9yZWdpb24sIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmtleSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAiZGF0YSI7CisJc3RydWN0IHRyMnRsc190aHJlYWRfY3R4ICpjdHggPSB0cjJ0bHNfZ2V0X3NlbGYoKTsKKwlpZiAoY3R4LT5ucl9vcGVuX3JlZ2lvbnMgPD0gdHIyZW52X2V2ZW50X21heF9uZXN0aW5nX2xldmVscykgeworCQlzdHJ1Y3QganNvbl93cml0ZXIgancgPSBKU09OX1dSSVRFUl9JTklUOworCQlkb3VibGUgdF9hYnMgPSAoZG91YmxlKXVzX2VsYXBzZWRfYWJzb2x1dGUgLyAxMDAwMDAwLjA7CisJCWRvdWJsZSB0X3JlbCA9IChkb3VibGUpdXNfZWxhcHNlZF9yZWdpb24gLyAxMDAwMDAwLjA7CisKKwkJandfb2JqZWN0X2JlZ2luKCZqdywgMCk7CisJCWV2ZW50X2ZtdF9wcmVwYXJlKGV2ZW50X25hbWUsIGZpbGUsIGxpbmUsIHJlcG8sICZqdyk7CisJCWp3X29iamVjdF9kb3VibGUoJmp3LCAidF9hYnMiLCA2LCB0X2Ficyk7CisJCWp3X29iamVjdF9kb3VibGUoJmp3LCAidF9yZWwiLCA2LCB0X3JlbCk7CisJCWp3X29iamVjdF9pbnRtYXgoJmp3LCAibmVzdGluZyIsIGN0eC0+bnJfb3Blbl9yZWdpb25zKTsKKwkJandfb2JqZWN0X3N0cmluZygmancsICJjYXRlZ29yeSIsIGNhdGVnb3J5KTsKKwkJandfb2JqZWN0X3N0cmluZygmancsICJrZXkiLCBrZXkpOworCQlqd19vYmplY3Rfc3RyaW5nKCZqdywgInZhbHVlIiwgdmFsdWUpOworCQlqd19lbmQoJmp3KTsKKworCQl0cjJfZHN0X3dyaXRlX2xpbmUoJnRyMmRzdF9ldmVudCwgJmp3Lmpzb24pOworCQlqd19yZWxlYXNlKCZqdyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmbl9kYXRhX2pzb25fZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkgICAgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCSAgICB1aW50NjRfdCB1c19lbGFwc2VkX3JlZ2lvbiwgY29uc3QgY2hhciAqY2F0ZWdvcnksCisJCQkgICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmtleSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QganNvbl93cml0ZXIgKnZhbHVlKQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAiZGF0YV9qc29uIjsKKwlzdHJ1Y3QgdHIydGxzX3RocmVhZF9jdHggKmN0eCA9IHRyMnRsc19nZXRfc2VsZigpOworCWlmIChjdHgtPm5yX29wZW5fcmVnaW9ucyA8PSB0cjJlbnZfZXZlbnRfbWF4X25lc3RpbmdfbGV2ZWxzKSB7CisJCXN0cnVjdCBqc29uX3dyaXRlciBqdyA9IEpTT05fV1JJVEVSX0lOSVQ7CisJCWRvdWJsZSB0X2FicyA9IChkb3VibGUpdXNfZWxhcHNlZF9hYnNvbHV0ZSAvIDEwMDAwMDAuMDsKKwkJZG91YmxlIHRfcmVsID0gKGRvdWJsZSl1c19lbGFwc2VkX3JlZ2lvbiAvIDEwMDAwMDAuMDsKKworCQlqd19vYmplY3RfYmVnaW4oJmp3LCAwKTsKKwkJZXZlbnRfZm10X3ByZXBhcmUoZXZlbnRfbmFtZSwgZmlsZSwgbGluZSwgcmVwbywgJmp3KTsKKwkJandfb2JqZWN0X2RvdWJsZSgmancsICJ0X2FicyIsIDYsIHRfYWJzKTsKKwkJandfb2JqZWN0X2RvdWJsZSgmancsICJ0X3JlbCIsIDYsIHRfcmVsKTsKKwkJandfb2JqZWN0X2ludG1heCgmancsICJuZXN0aW5nIiwgY3R4LT5ucl9vcGVuX3JlZ2lvbnMpOworCQlqd19vYmplY3Rfc3RyaW5nKCZqdywgImNhdGVnb3J5IiwgY2F0ZWdvcnkpOworCQlqd19vYmplY3Rfc3RyaW5nKCZqdywgImtleSIsIGtleSk7CisJCWp3X29iamVjdF9zdWJfancoJmp3LCAidmFsdWUiLCB2YWx1ZSk7CisJCWp3X2VuZCgmancpOworCisJCXRyMl9kc3Rfd3JpdGVfbGluZSgmdHIyZHN0X2V2ZW50LCAmancuanNvbik7CisJCWp3X3JlbGVhc2UoJmp3KTsKKwl9Cit9CisKK3N0cnVjdCB0cjJfdGd0IHRyMl90Z3RfZXZlbnQgPSB7CisJJnRyMmRzdF9ldmVudCwKKworCWZuX2luaXQsCisJZm5fdGVybSwKKworCWZuX3ZlcnNpb25fZmwsCisJZm5fc3RhcnRfZmwsCisJZm5fZXhpdF9mbCwKKwlmbl9zaWduYWwsCisJZm5fYXRleGl0LAorCWZuX2Vycm9yX3ZhX2ZsLAorCWZuX2NvbW1hbmRfcGF0aF9mbCwKKwlmbl9jb21tYW5kX25hbWVfZmwsCisJZm5fY29tbWFuZF9tb2RlX2ZsLAorCWZuX2FsaWFzX2ZsLAorCWZuX2NoaWxkX3N0YXJ0X2ZsLAorCWZuX2NoaWxkX2V4aXRfZmwsCisJZm5fdGhyZWFkX3N0YXJ0X2ZsLAorCWZuX3RocmVhZF9leGl0X2ZsLAorCWZuX2V4ZWNfZmwsCisJZm5fZXhlY19yZXN1bHRfZmwsCisJZm5fcGFyYW1fZmwsCisJZm5fcmVwb19mbCwKKwlmbl9yZWdpb25fZW50ZXJfcHJpbnRmX3ZhX2ZsLAorCWZuX3JlZ2lvbl9sZWF2ZV9wcmludGZfdmFfZmwsCisJZm5fZGF0YV9mbCwKKwlmbl9kYXRhX2pzb25fZmwsCisJTlVMTCwgLyogcHJpbnRmICovCit9OwpkaWZmIC0tZ2l0IGEvdHJhY2UyL3RyMl90Z3Rfbm9ybWFsLmMgYi90cmFjZTIvdHIyX3RndF9ub3JtYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWI2MDJjCi0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyL3RyMl90Z3Rfbm9ybWFsLmMKQEAgLTAsMCArMSwzMjUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl9kc3QuaCIKKyNpbmNsdWRlICJ0cmFjZTIvdHIyX3N5c2Vudi5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfdGJ1Zi5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfdGd0LmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl90bHMuaCIKKworc3RhdGljIHN0cnVjdCB0cjJfZHN0IHRyMmRzdF9ub3JtYWwgPSB7IFRSMl9TWVNFTlZfTk9STUFMLCAwLCAwLCAwLCAwIH07CisKKy8qCisgKiBVc2UgdGhlIFRSMl9TWVNFTlZfTk9STUFMX0JSSUVGIHNldHRpbmcgdG8gb21pdCB0aGUgIjx0aW1lPiA8ZmlsZT46PGxpbmU+IgorICogZmllbGRzIGZyb20gZWFjaCBsaW5lIHdyaXR0ZW4gdG8gdGhlIGJ1aWx0aW4gbm9ybWFsIHRhcmdldC4KKyAqCisgKiBVbml0IHRlc3RzIG1heSB3YW50IHRvIHVzZSB0aGlzIHRvIGhlbHAgd2l0aCB0ZXN0aW5nLgorICovCitzdGF0aWMgaW50IHRyMmVudl9ub3JtYWxfYmVfYnJpZWY7CisKKyNkZWZpbmUgVFIyRk1UX05PUk1BTF9GTF9XSURUSCAoNTApCisKK3N0YXRpYyBpbnQgZm5faW5pdCh2b2lkKQoreworCWludCB3YW50ID0gdHIyX2RzdF90cmFjZV93YW50KCZ0cjJkc3Rfbm9ybWFsKTsKKwlpbnQgd2FudF9icmllZjsKKwljb25zdCBjaGFyICpicmllZjsKKworCWlmICghd2FudCkKKwkJcmV0dXJuIHdhbnQ7CisKKwlicmllZiA9IHRyMl9zeXNlbnZfZ2V0KFRSMl9TWVNFTlZfTk9STUFMX0JSSUVGKTsKKwlpZiAoYnJpZWYgJiYgKmJyaWVmICYmCisJICAgICgod2FudF9icmllZiA9IGdpdF9wYXJzZV9tYXliZV9ib29sKGJyaWVmKSkgIT0gLTEpKQorCQl0cjJlbnZfbm9ybWFsX2JlX2JyaWVmID0gd2FudF9icmllZjsKKworCXJldHVybiB3YW50OworfQorCitzdGF0aWMgdm9pZCBmbl90ZXJtKHZvaWQpCit7CisJdHIyX2RzdF90cmFjZV9kaXNhYmxlKCZ0cjJkc3Rfbm9ybWFsKTsKK30KKworc3RhdGljIHZvaWQgbm9ybWFsX2ZtdF9wcmVwYXJlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJc3RyYnVmX3NldGxlbihidWYsIDApOworCisJaWYgKCF0cjJlbnZfbm9ybWFsX2JlX2JyaWVmKSB7CisJCXN0cnVjdCB0cjJfdGJ1ZiB0Yl9ub3c7CisKKwkJdHIyX3RidWZfbG9jYWxfdGltZSgmdGJfbm93KTsKKwkJc3RyYnVmX2FkZHN0cihidWYsIHRiX25vdy5idWYpOworCQlzdHJidWZfYWRkY2goYnVmLCAnICcpOworCisJCWlmIChmaWxlICYmICpmaWxlKQorCQkJc3RyYnVmX2FkZGYoYnVmLCAiJXM6JWQgIiwgZmlsZSwgbGluZSk7CisJCXdoaWxlIChidWYtPmxlbiA8IFRSMkZNVF9OT1JNQUxfRkxfV0lEVEgpCisJCQlzdHJidWZfYWRkY2goYnVmLCAnICcpOworCX0KK30KKworc3RhdGljIHZvaWQgbm9ybWFsX2lvX3dyaXRlX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzdHJidWYgKmJ1Zl9wYXlsb2FkKQoreworCXN0cnVjdCBzdHJidWYgYnVmX2xpbmUgPSBTVFJCVUZfSU5JVDsKKworCW5vcm1hbF9mbXRfcHJlcGFyZShmaWxlLCBsaW5lLCAmYnVmX2xpbmUpOworCXN0cmJ1Zl9hZGRidWYoJmJ1Zl9saW5lLCBidWZfcGF5bG9hZCk7CisJdHIyX2RzdF93cml0ZV9saW5lKCZ0cjJkc3Rfbm9ybWFsLCAmYnVmX2xpbmUpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfbGluZSk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX3ZlcnNpb25fZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJmJ1Zl9wYXlsb2FkLCAidmVyc2lvbiAlcyIsIGdpdF92ZXJzaW9uX3N0cmluZyk7CisJbm9ybWFsX2lvX3dyaXRlX2ZsKGZpbGUsIGxpbmUsICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgZm5fc3RhcnRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQl1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkc3RyKCZidWZfcGF5bG9hZCwgInN0YXJ0ICIpOworCXNxX2FwcGVuZF9xdW90ZV9hcmd2X3ByZXR0eSgmYnVmX3BheWxvYWQsIGFyZ3YpOworCW5vcm1hbF9pb193cml0ZV9mbChmaWxlLCBsaW5lLCAmYnVmX3BheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfcGF5bG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX2V4aXRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCSAgICAgICBpbnQgY29kZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisJZG91YmxlIGVsYXBzZWQgPSAoZG91YmxlKXVzX2VsYXBzZWRfYWJzb2x1dGUgLyAxMDAwMDAwLjA7CisKKwlzdHJidWZfYWRkZigmYnVmX3BheWxvYWQsICJleGl0IGVsYXBzZWQ6JS42ZiBjb2RlOiVkIiwgZWxhcHNlZCwgY29kZSk7CisJbm9ybWFsX2lvX3dyaXRlX2ZsKGZpbGUsIGxpbmUsICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgZm5fc2lnbmFsKHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsIGludCBzaWdubykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisJZG91YmxlIGVsYXBzZWQgPSAoZG91YmxlKXVzX2VsYXBzZWRfYWJzb2x1dGUgLyAxMDAwMDAwLjA7CisKKwlzdHJidWZfYWRkZigmYnVmX3BheWxvYWQsICJzaWduYWwgZWxhcHNlZDolLjZmIGNvZGU6JWQiLCBlbGFwc2VkLAorCQkgICAgc2lnbm8pOworCW5vcm1hbF9pb193cml0ZV9mbChfX0ZJTEVfXywgX19MSU5FX18sICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgZm5fYXRleGl0KHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsIGludCBjb2RlKQoreworCXN0cnVjdCBzdHJidWYgYnVmX3BheWxvYWQgPSBTVFJCVUZfSU5JVDsKKwlkb3VibGUgZWxhcHNlZCA9IChkb3VibGUpdXNfZWxhcHNlZF9hYnNvbHV0ZSAvIDEwMDAwMDAuMDsKKworCXN0cmJ1Zl9hZGRmKCZidWZfcGF5bG9hZCwgImF0ZXhpdCBlbGFwc2VkOiUuNmYgY29kZTolZCIsIGVsYXBzZWQsIGNvZGUpOworCW5vcm1hbF9pb193cml0ZV9mbChfX0ZJTEVfXywgX19MSU5FX18sICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgbWF5YmVfYXBwZW5kX3N0cmluZ192YShzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmZtdCwKKwkJCQkgICB2YV9saXN0IGFwKQoreworCWlmIChmbXQgJiYgKmZtdCkgeworCQl2YV9saXN0IGNvcHlfYXA7CisKKwkJdmFfY29weShjb3B5X2FwLCBhcCk7CisJCXN0cmJ1Zl92YWRkZihidWYsIGZtdCwgY29weV9hcCk7CisJCXZhX2VuZChjb3B5X2FwKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgZm5fZXJyb3JfdmFfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwKKwkJCSAgIHZhX2xpc3QgYXApCit7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZHN0cigmYnVmX3BheWxvYWQsICJlcnJvciIpOworCWlmIChmbXQgJiYgKmZtdCkgeworCQlzdHJidWZfYWRkY2goJmJ1Zl9wYXlsb2FkLCAnICcpOworCQltYXliZV9hcHBlbmRfc3RyaW5nX3ZhKCZidWZfcGF5bG9hZCwgZm10LCBhcCk7CisJfQorCW5vcm1hbF9pb193cml0ZV9mbChmaWxlLCBsaW5lLCAmYnVmX3BheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfcGF5bG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX2NvbW1hbmRfcGF0aF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqcGF0aG5hbWUpCit7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJmJ1Zl9wYXlsb2FkLCAiY21kX3BhdGggJXMiLCBwYXRobmFtZSk7CisJbm9ybWFsX2lvX3dyaXRlX2ZsKGZpbGUsIGxpbmUsICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgZm5fY29tbWFuZF9uYW1lX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmhpZXJhcmNoeSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkZigmYnVmX3BheWxvYWQsICJjbWRfbmFtZSAlcyIsIG5hbWUpOworCWlmIChoaWVyYXJjaHkgJiYgKmhpZXJhcmNoeSkKKwkJc3RyYnVmX2FkZGYoJmJ1Zl9wYXlsb2FkLCAiICglcykiLCBoaWVyYXJjaHkpOworCW5vcm1hbF9pb193cml0ZV9mbChmaWxlLCBsaW5lLCAmYnVmX3BheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfcGF5bG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX2NvbW1hbmRfbW9kZV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbW9kZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkZigmYnVmX3BheWxvYWQsICJjbWRfbW9kZSAlcyIsIG1vZGUpOworCW5vcm1hbF9pb193cml0ZV9mbChmaWxlLCBsaW5lLCAmYnVmX3BheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfcGF5bG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX2FsaWFzX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICphbGlhcywKKwkJCWNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBzdHJidWYgYnVmX3BheWxvYWQgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZidWZfcGF5bG9hZCwgImFsaWFzICVzIC0+ICIsIGFsaWFzKTsKKwlzcV9hcHBlbmRfcXVvdGVfYXJndl9wcmV0dHkoJmJ1Zl9wYXlsb2FkLCBhcmd2KTsKKwlub3JtYWxfaW9fd3JpdGVfZmwoZmlsZSwgbGluZSwgJmJ1Zl9wYXlsb2FkKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmX3BheWxvYWQpOworfQorCitzdGF0aWMgdm9pZCBmbl9jaGlsZF9zdGFydF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCSAgICAgIHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKQoreworCXN0cnVjdCBzdHJidWYgYnVmX3BheWxvYWQgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZidWZfcGF5bG9hZCwgImNoaWxkX3N0YXJ0WyVkXSIsIGNtZC0+dHJhY2UyX2NoaWxkX2lkKTsKKworCWlmIChjbWQtPmRpcikgeworCQlzdHJidWZfYWRkc3RyKCZidWZfcGF5bG9hZCwgIiBjZCAiKTsKKwkJc3FfcXVvdGVfYnVmX3ByZXR0eSgmYnVmX3BheWxvYWQsIGNtZC0+ZGlyKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmX3BheWxvYWQsICI7Iik7CisJfQorCisJLyoKKwkgKiBUT0RPIGlmIChjbWQtPmVudikgeyBDb25zaWRlciBkdW1waW5nIGNoYW5nZXMgdG8gZW52aXJvbm1lbnQuIH0KKwkgKiBTZWUgdHJhY2VfYWRkX2VudigpIGluIHJ1bi1jb21tYW5kLmMgYXMgdXNlZCBieSBvcmlnaW5hbCB0cmFjZS5jCisJICovCisKKwlzdHJidWZfYWRkY2goJmJ1Zl9wYXlsb2FkLCAnICcpOworCWlmIChjbWQtPmdpdF9jbWQpCisJCXN0cmJ1Zl9hZGRzdHIoJmJ1Zl9wYXlsb2FkLCAiZ2l0ICIpOworCXNxX2FwcGVuZF9xdW90ZV9hcmd2X3ByZXR0eSgmYnVmX3BheWxvYWQsIGNtZC0+YXJndik7CisKKwlub3JtYWxfaW9fd3JpdGVfZmwoZmlsZSwgbGluZSwgJmJ1Zl9wYXlsb2FkKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmX3BheWxvYWQpOworfQorCitzdGF0aWMgdm9pZCBmbl9jaGlsZF9leGl0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJICAgICB1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLCBpbnQgY2lkLCBpbnQgcGlkLAorCQkJICAgICBpbnQgY29kZSwgdWludDY0X3QgdXNfZWxhcHNlZF9jaGlsZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisJZG91YmxlIGVsYXBzZWQgPSAoZG91YmxlKXVzX2VsYXBzZWRfY2hpbGQgLyAxMDAwMDAwLjA7CisKKwlzdHJidWZfYWRkZigmYnVmX3BheWxvYWQsICJjaGlsZF9leGl0WyVkXSBwaWQ6JWQgY29kZTolZCBlbGFwc2VkOiUuNmYiLAorCQkgICAgY2lkLCBwaWQsIGNvZGUsIGVsYXBzZWQpOworCW5vcm1hbF9pb193cml0ZV9mbChmaWxlLCBsaW5lLCAmYnVmX3BheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfcGF5bG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX2V4ZWNfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCSAgICAgICBpbnQgZXhlY19pZCwgY29uc3QgY2hhciAqZXhlLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkZigmYnVmX3BheWxvYWQsICJleGVjWyVkXSAiLCBleGVjX2lkKTsKKwlpZiAoZXhlKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1Zl9wYXlsb2FkLCBleGUpOworCQlzdHJidWZfYWRkY2goJmJ1Zl9wYXlsb2FkLCAnICcpOworCX0KKwlzcV9hcHBlbmRfcXVvdGVfYXJndl9wcmV0dHkoJmJ1Zl9wYXlsb2FkLCBhcmd2KTsKKwlub3JtYWxfaW9fd3JpdGVfZmwoZmlsZSwgbGluZSwgJmJ1Zl9wYXlsb2FkKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmX3BheWxvYWQpOworfQorCitzdGF0aWMgdm9pZCBmbl9leGVjX3Jlc3VsdF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCSAgICAgIHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsIGludCBleGVjX2lkLAorCQkJICAgICAgaW50IGNvZGUpCit7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJmJ1Zl9wYXlsb2FkLCAiZXhlY19yZXN1bHRbJWRdIGNvZGU6JWQiLCBleGVjX2lkLCBjb2RlKTsKKwlpZiAoY29kZSA+IDApCisJCXN0cmJ1Zl9hZGRmKCZidWZfcGF5bG9hZCwgIiBlcnI6JXMiLCBzdHJlcnJvcihjb2RlKSk7CisJbm9ybWFsX2lvX3dyaXRlX2ZsKGZpbGUsIGxpbmUsICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgZm5fcGFyYW1fZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnBhcmFtLAorCQkJY29uc3QgY2hhciAqdmFsdWUpCit7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJmJ1Zl9wYXlsb2FkLCAiZGVmX3BhcmFtICVzPSVzIiwgcGFyYW0sIHZhbHVlKTsKKwlub3JtYWxfaW9fd3JpdGVfZmwoZmlsZSwgbGluZSwgJmJ1Zl9wYXlsb2FkKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmX3BheWxvYWQpOworfQorCitzdGF0aWMgdm9pZCBmbl9yZXBvX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pCit7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZHN0cigmYnVmX3BheWxvYWQsICJ3b3JrdHJlZSAiKTsKKwlzcV9xdW90ZV9idWZfcHJldHR5KCZidWZfcGF5bG9hZCwgcmVwby0+d29ya3RyZWUpOworCW5vcm1hbF9pb193cml0ZV9mbChmaWxlLCBsaW5lLCAmYnVmX3BheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfcGF5bG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX3ByaW50Zl92YV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCSAgICB1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLCBjb25zdCBjaGFyICpmbXQsCisJCQkgICAgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisKKwltYXliZV9hcHBlbmRfc3RyaW5nX3ZhKCZidWZfcGF5bG9hZCwgZm10LCBhcCk7CisJbm9ybWFsX2lvX3dyaXRlX2ZsKGZpbGUsIGxpbmUsICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RydWN0IHRyMl90Z3QgdHIyX3RndF9ub3JtYWwgPSB7CisJJnRyMmRzdF9ub3JtYWwsCisKKwlmbl9pbml0LAorCWZuX3Rlcm0sCisKKwlmbl92ZXJzaW9uX2ZsLAorCWZuX3N0YXJ0X2ZsLAorCWZuX2V4aXRfZmwsCisJZm5fc2lnbmFsLAorCWZuX2F0ZXhpdCwKKwlmbl9lcnJvcl92YV9mbCwKKwlmbl9jb21tYW5kX3BhdGhfZmwsCisJZm5fY29tbWFuZF9uYW1lX2ZsLAorCWZuX2NvbW1hbmRfbW9kZV9mbCwKKwlmbl9hbGlhc19mbCwKKwlmbl9jaGlsZF9zdGFydF9mbCwKKwlmbl9jaGlsZF9leGl0X2ZsLAorCU5VTEwsIC8qIHRocmVhZF9zdGFydCAqLworCU5VTEwsIC8qIHRocmVhZF9leGl0ICovCisJZm5fZXhlY19mbCwKKwlmbl9leGVjX3Jlc3VsdF9mbCwKKwlmbl9wYXJhbV9mbCwKKwlmbl9yZXBvX2ZsLAorCU5VTEwsIC8qIHJlZ2lvbl9lbnRlciAqLworCU5VTEwsIC8qIHJlZ2lvbl9sZWF2ZSAqLworCU5VTEwsIC8qIGRhdGEgKi8KKwlOVUxMLCAvKiBkYXRhX2pzb24gKi8KKwlmbl9wcmludGZfdmFfZmwsCit9OwpkaWZmIC0tZ2l0IGEvdHJhY2UyL3RyMl90Z3RfcGVyZi5jIGIvdHJhY2UyL3RyMl90Z3RfcGVyZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MDE4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjZTIvdHIyX3RndF9wZXJmLmMKQEAgLTAsMCArMSw1NTEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAianNvbi13cml0ZXIuaCIKKyNpbmNsdWRlICJ0cmFjZTIvdHIyX2RzdC5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfc2lkLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl9zeXNlbnYuaCIKKyNpbmNsdWRlICJ0cmFjZTIvdHIyX3RidWYuaCIKKyNpbmNsdWRlICJ0cmFjZTIvdHIyX3RndC5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfdGxzLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdHIyX2RzdCB0cjJkc3RfcGVyZiA9IHsgVFIyX1NZU0VOVl9QRVJGLCAwLCAwLCAwLCAwIH07CisKKy8qCisgKiBVc2UgVFIyX1NZU0VOVl9QRVJGX0JSSUVGIHRvIG9taXQgdGhlICI8dGltZT4gPGZpbGU+OjxsaW5lPiIKKyAqIGZpZWxkcyBmcm9tIGVhY2ggbGluZSB3cml0dGVuIHRvIHRoZSBidWlsdGluIHBlcmZvcm1hbmNlIHRhcmdldC4KKyAqCisgKiBVbml0IHRlc3RzIG1heSB3YW50IHRvIHVzZSB0aGlzIHRvIGhlbHAgd2l0aCB0ZXN0aW5nLgorICovCitzdGF0aWMgaW50IHRyMmVudl9wZXJmX2JlX2JyaWVmOworCisjZGVmaW5lIFRSMkZNVF9QRVJGX0ZMX1dJRFRIICgyOCkKKyNkZWZpbmUgVFIyRk1UX1BFUkZfTUFYX0VWRU5UX05BTUUgKDEyKQorI2RlZmluZSBUUjJGTVRfUEVSRl9SRVBPX1dJRFRIICgzKQorI2RlZmluZSBUUjJGTVRfUEVSRl9DQVRFR09SWV9XSURUSCAoMTIpCisKKyNkZWZpbmUgVFIyX0lOREVOVCAoMikKKyNkZWZpbmUgVFIyX0lOREVOVF9MRU5HVEgoY3R4KSAoKChjdHgpLT5ucl9vcGVuX3JlZ2lvbnMgLSAxKSAqIFRSMl9JTkRFTlQpCisKK3N0YXRpYyBpbnQgZm5faW5pdCh2b2lkKQoreworCWludCB3YW50ID0gdHIyX2RzdF90cmFjZV93YW50KCZ0cjJkc3RfcGVyZik7CisJaW50IHdhbnRfYnJpZWY7CisJY29uc3QgY2hhciAqYnJpZWY7CisKKwlpZiAoIXdhbnQpCisJCXJldHVybiB3YW50OworCisJYnJpZWYgPSB0cjJfc3lzZW52X2dldChUUjJfU1lTRU5WX1BFUkZfQlJJRUYpOworCWlmIChicmllZiAmJiAqYnJpZWYgJiYKKwkgICAgKCh3YW50X2JyaWVmID0gZ2l0X3BhcnNlX21heWJlX2Jvb2woYnJpZWYpKSAhPSAtMSkpCisJCXRyMmVudl9wZXJmX2JlX2JyaWVmID0gd2FudF9icmllZjsKKworCXJldHVybiB3YW50OworfQorCitzdGF0aWMgdm9pZCBmbl90ZXJtKHZvaWQpCit7CisJdHIyX2RzdF90cmFjZV9kaXNhYmxlKCZ0cjJkc3RfcGVyZik7Cit9CisKKy8qCisgKiBGb3JtYXQgdHJhY2UgbGluZSBwcmVmaXggaW4gaHVtYW4tcmVhZGFibGUgY2xhc3NpYyBmb3JtYXQgZm9yCisgKiB0aGUgcGVyZm9ybWFuY2UgdGFyZ2V0OgorICogICAgICJbPHRpbWU+IFs8ZmlsZT46PGxpbmU+XSA8YmFyPl0gPG5yX3BhcmVudHM+IDxiYXI+CisgKiAgICAgICAgIDx0aHJlYWRfbmFtZT4gPGJhcj4gPGV2ZW50X25hbWU+IDxiYXI+IFs8cmVwbz5dIDxiYXI+CisgKiAgICAgICAgIFs8ZWxhcHNlZF9hYnNvbHV0ZT5dIFs8ZWxhcHNlZF9yZWxhdGl2ZT5dIDxiYXI+CisgKiAgICAgICAgIFs8Y2F0ZWdvcnk+XSA8YmFyPiBbPGRvdHM+XSAiCisgKi8KK3N0YXRpYyB2b2lkIHBlcmZfZm10X3ByZXBhcmUoY29uc3QgY2hhciAqZXZlbnRfbmFtZSwKKwkJCSAgICAgc3RydWN0IHRyMnRsc190aHJlYWRfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKmZpbGUsCisJCQkgICAgIGludCBsaW5lLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICAgdWludDY0X3QgKnBfdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCSAgICAgdWludDY0X3QgKnBfdXNfZWxhcHNlZF9yZWxhdGl2ZSwKKwkJCSAgICAgY29uc3QgY2hhciAqY2F0ZWdvcnksIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlpbnQgbGVuOworCisJc3RyYnVmX3NldGxlbihidWYsIDApOworCisJaWYgKCF0cjJlbnZfcGVyZl9iZV9icmllZikgeworCQlzdHJ1Y3QgdHIyX3RidWYgdGJfbm93OworCQlzaXplX3QgZmxfZW5kX2NvbDsKKworCQl0cjJfdGJ1Zl9sb2NhbF90aW1lKCZ0Yl9ub3cpOworCQlzdHJidWZfYWRkc3RyKGJ1ZiwgdGJfbm93LmJ1Zik7CisJCXN0cmJ1Zl9hZGRjaChidWYsICcgJyk7CisKKwkJZmxfZW5kX2NvbCA9IGJ1Zi0+bGVuICsgVFIyRk1UX1BFUkZfRkxfV0lEVEg7CisKKwkJaWYgKGZpbGUgJiYgKmZpbGUpIHsKKwkJCXN0cnVjdCBzdHJidWYgYnVmX2ZsID0gU1RSQlVGX0lOSVQ7CisKKwkJCXN0cmJ1Zl9hZGRmKCZidWZfZmwsICIlczolZCIsIGZpbGUsIGxpbmUpOworCisJCQlpZiAoYnVmX2ZsLmxlbiA8PSBUUjJGTVRfUEVSRl9GTF9XSURUSCkKKwkJCQlzdHJidWZfYWRkYnVmKGJ1ZiwgJmJ1Zl9mbCk7CisJCQllbHNlIHsKKwkJCQlzaXplX3QgYXZhaWwgPSBUUjJGTVRfUEVSRl9GTF9XSURUSCAtIDM7CisJCQkJc3RyYnVmX2FkZHN0cihidWYsICIuLi4iKTsKKwkJCQlzdHJidWZfYWRkKGJ1ZiwKKwkJCQkJICAgJmJ1Zl9mbC5idWZbYnVmX2ZsLmxlbiAtIGF2YWlsXSwKKwkJCQkJICAgYXZhaWwpOworCQkJfQorCisJCQlzdHJidWZfcmVsZWFzZSgmYnVmX2ZsKTsKKwkJfQorCisJCXdoaWxlIChidWYtPmxlbiA8IGZsX2VuZF9jb2wpCisJCQlzdHJidWZfYWRkY2goYnVmLCAnICcpOworCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiIHwgIik7CisJfQorCisJc3RyYnVmX2FkZGYoYnVmLCAiZCVkIHwgIiwgdHIyX3NpZF9kZXB0aCgpKTsKKwlzdHJidWZfYWRkZihidWYsICIlLSpzIHwgJS0qcyB8ICIsIFRSMl9NQVhfVEhSRUFEX05BTUUsCisJCSAgICBjdHgtPnRocmVhZF9uYW1lLmJ1ZiwgVFIyRk1UX1BFUkZfTUFYX0VWRU5UX05BTUUsCisJCSAgICBldmVudF9uYW1lKTsKKworCWxlbiA9IGJ1Zi0+bGVuICsgVFIyRk1UX1BFUkZfUkVQT19XSURUSDsKKwlpZiAocmVwbykKKwkJc3RyYnVmX2FkZGYoYnVmLCAiciVkICIsIHJlcG8tPnRyYWNlMl9yZXBvX2lkKTsKKwl3aGlsZSAoYnVmLT5sZW4gPCBsZW4pCisJCXN0cmJ1Zl9hZGRjaChidWYsICcgJyk7CisJc3RyYnVmX2FkZHN0cihidWYsICIgfCAiKTsKKworCWlmIChwX3VzX2VsYXBzZWRfYWJzb2x1dGUpCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiU5LjZmIHwgIiwKKwkJCSAgICAoKGRvdWJsZSkoKnBfdXNfZWxhcHNlZF9hYnNvbHV0ZSkpIC8gMTAwMDAwMC4wKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiU5cyB8ICIsICIgIik7CisKKwlpZiAocF91c19lbGFwc2VkX3JlbGF0aXZlKQorCQlzdHJidWZfYWRkZihidWYsICIlOS42ZiB8ICIsCisJCQkgICAgKChkb3VibGUpKCpwX3VzX2VsYXBzZWRfcmVsYXRpdmUpKSAvIDEwMDAwMDAuMCk7CisJZWxzZQorCQlzdHJidWZfYWRkZihidWYsICIlOXMgfCAiLCAiICIpOworCisJc3RyYnVmX2FkZGYoYnVmLCAiJS0qLipzIHwgIiwgVFIyRk1UX1BFUkZfQ0FURUdPUllfV0lEVEgsCisJCSAgICBUUjJGTVRfUEVSRl9DQVRFR09SWV9XSURUSCwgKGNhdGVnb3J5ID8gY2F0ZWdvcnkgOiAiIikpOworCisJaWYgKGN0eC0+bnJfb3Blbl9yZWdpb25zID4gMCkKKwkJc3RyYnVmX2FkZGNoYXJzKGJ1ZiwgJy4nLCBUUjJfSU5ERU5UX0xFTkdUSChjdHgpKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9pb193cml0ZV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZXZlbnRfbmFtZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICAgIHVpbnQ2NF90ICpwX3VzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkgICAgIHVpbnQ2NF90ICpwX3VzX2VsYXBzZWRfcmVsYXRpdmUsCisJCQkgICAgIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpidWZfcGF5bG9hZCkKK3sKKwlzdHJ1Y3QgdHIydGxzX3RocmVhZF9jdHggKmN0eCA9IHRyMnRsc19nZXRfc2VsZigpOworCXN0cnVjdCBzdHJidWYgYnVmX2xpbmUgPSBTVFJCVUZfSU5JVDsKKworCXBlcmZfZm10X3ByZXBhcmUoZXZlbnRfbmFtZSwgY3R4LCBmaWxlLCBsaW5lLCByZXBvLAorCQkJIHBfdXNfZWxhcHNlZF9hYnNvbHV0ZSwgcF91c19lbGFwc2VkX3JlbGF0aXZlLCBjYXRlZ29yeSwKKwkJCSAmYnVmX2xpbmUpOworCXN0cmJ1Zl9hZGRidWYoJmJ1Zl9saW5lLCBidWZfcGF5bG9hZCk7CisJdHIyX2RzdF93cml0ZV9saW5lKCZ0cjJkc3RfcGVyZiwgJmJ1Zl9saW5lKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmX2xpbmUpOworfQorCitzdGF0aWMgdm9pZCBmbl92ZXJzaW9uX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAidmVyc2lvbiI7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZHN0cigmYnVmX3BheWxvYWQsIGdpdF92ZXJzaW9uX3N0cmluZyk7CisKKwlwZXJmX2lvX3dyaXRlX2ZsKGZpbGUsIGxpbmUsIGV2ZW50X25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkgJmJ1Zl9wYXlsb2FkKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmX3BheWxvYWQpOworfQorCitzdGF0aWMgdm9pZCBmbl9zdGFydF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCXVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAic3RhcnQiOworCXN0cnVjdCBzdHJidWYgYnVmX3BheWxvYWQgPSBTVFJCVUZfSU5JVDsKKworCXNxX2FwcGVuZF9xdW90ZV9hcmd2X3ByZXR0eSgmYnVmX3BheWxvYWQsIGFyZ3YpOworCisJcGVyZl9pb193cml0ZV9mbChmaWxlLCBsaW5lLCBldmVudF9uYW1lLCBOVUxMLCAmdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCSBOVUxMLCBOVUxMLCAmYnVmX3BheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfcGF5bG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX2V4aXRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCSAgICAgICBpbnQgY29kZSkKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gImV4aXQiOworCXN0cnVjdCBzdHJidWYgYnVmX3BheWxvYWQgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZidWZfcGF5bG9hZCwgImNvZGU6JWQiLCBjb2RlKTsKKworCXBlcmZfaW9fd3JpdGVfZmwoZmlsZSwgbGluZSwgZXZlbnRfbmFtZSwgTlVMTCwgJnVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkgTlVMTCwgTlVMTCwgJmJ1Zl9wYXlsb2FkKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmX3BheWxvYWQpOworfQorCitzdGF0aWMgdm9pZCBmbl9zaWduYWwodWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwgaW50IHNpZ25vKQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAic2lnbmFsIjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkZigmYnVmX3BheWxvYWQsICJzaWdubzolZCIsIHNpZ25vKTsKKworCXBlcmZfaW9fd3JpdGVfZmwoX19GSUxFX18sIF9fTElORV9fLCBldmVudF9uYW1lLCBOVUxMLAorCQkJICZ1c19lbGFwc2VkX2Fic29sdXRlLCBOVUxMLCBOVUxMLCAmYnVmX3BheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfcGF5bG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX2F0ZXhpdCh1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLCBpbnQgY29kZSkKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gImF0ZXhpdCI7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJmJ1Zl9wYXlsb2FkLCAiY29kZTolZCIsIGNvZGUpOworCisJcGVyZl9pb193cml0ZV9mbChfX0ZJTEVfXywgX19MSU5FX18sIGV2ZW50X25hbWUsIE5VTEwsCisJCQkgJnVzX2VsYXBzZWRfYWJzb2x1dGUsIE5VTEwsIE5VTEwsICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgbWF5YmVfYXBwZW5kX3N0cmluZ192YShzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmZtdCwKKwkJCQkgICB2YV9saXN0IGFwKQoreworCWlmIChmbXQgJiYgKmZtdCkgeworCQl2YV9saXN0IGNvcHlfYXA7CisKKwkJdmFfY29weShjb3B5X2FwLCBhcCk7CisJCXN0cmJ1Zl92YWRkZihidWYsIGZtdCwgY29weV9hcCk7CisJCXZhX2VuZChjb3B5X2FwKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgZm5fZXJyb3JfdmFfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwKKwkJCSAgIHZhX2xpc3QgYXApCit7CisJY29uc3QgY2hhciAqZXZlbnRfbmFtZSA9ICJlcnJvciI7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJbWF5YmVfYXBwZW5kX3N0cmluZ192YSgmYnVmX3BheWxvYWQsIGZtdCwgYXApOworCisJcGVyZl9pb193cml0ZV9mbChmaWxlLCBsaW5lLCBldmVudF9uYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgZm5fY29tbWFuZF9wYXRoX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gImNtZF9wYXRoIjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkc3RyKCZidWZfcGF5bG9hZCwgcGF0aG5hbWUpOworCisJcGVyZl9pb193cml0ZV9mbChmaWxlLCBsaW5lLCBldmVudF9uYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgZm5fY29tbWFuZF9uYW1lX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmhpZXJhcmNoeSkKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gImNtZF9uYW1lIjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkc3RyKCZidWZfcGF5bG9hZCwgbmFtZSk7CisJaWYgKGhpZXJhcmNoeSAmJiAqaGllcmFyY2h5KQorCQlzdHJidWZfYWRkZigmYnVmX3BheWxvYWQsICIgKCVzKSIsIGhpZXJhcmNoeSk7CisKKwlwZXJmX2lvX3dyaXRlX2ZsKGZpbGUsIGxpbmUsIGV2ZW50X25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkgJmJ1Zl9wYXlsb2FkKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmX3BheWxvYWQpOworfQorCitzdGF0aWMgdm9pZCBmbl9jb21tYW5kX21vZGVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJY29uc3QgY2hhciAqZXZlbnRfbmFtZSA9ICJjbWRfbW9kZSI7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZHN0cigmYnVmX3BheWxvYWQsIG1vZGUpOworCisJcGVyZl9pb193cml0ZV9mbChmaWxlLCBsaW5lLCBldmVudF9uYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgZm5fYWxpYXNfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmFsaWFzLAorCQkJY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqZXZlbnRfbmFtZSA9ICJhbGlhcyI7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJmJ1Zl9wYXlsb2FkLCAiYWxpYXM6JXMgYXJndjpbIiwgYWxpYXMpOworCXNxX2FwcGVuZF9xdW90ZV9hcmd2X3ByZXR0eSgmYnVmX3BheWxvYWQsIGFyZ3YpOworCXN0cmJ1Zl9hZGRjaCgmYnVmX3BheWxvYWQsICddJyk7CisKKwlwZXJmX2lvX3dyaXRlX2ZsKGZpbGUsIGxpbmUsIGV2ZW50X25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkgJmJ1Zl9wYXlsb2FkKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmX3BheWxvYWQpOworfQorCitzdGF0aWMgdm9pZCBmbl9jaGlsZF9zdGFydF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCSAgICAgIHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAiY2hpbGRfc3RhcnQiOworCXN0cnVjdCBzdHJidWYgYnVmX3BheWxvYWQgPSBTVFJCVUZfSU5JVDsKKworCWlmIChjbWQtPnRyYWNlMl9ob29rX25hbWUpIHsKKwkJc3RyYnVmX2FkZGYoJmJ1Zl9wYXlsb2FkLCAiW2NoJWRdIGNsYXNzOmhvb2sgaG9vazolcyIsCisJCQkgICAgY21kLT50cmFjZTJfY2hpbGRfaWQsIGNtZC0+dHJhY2UyX2hvb2tfbmFtZSk7CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqY2hpbGRfY2xhc3MgPQorCQkJY21kLT50cmFjZTJfY2hpbGRfY2xhc3MgPyBjbWQtPnRyYWNlMl9jaGlsZF9jbGFzcyA6ICI/IjsKKwkJc3RyYnVmX2FkZGYoJmJ1Zl9wYXlsb2FkLCAiW2NoJWRdIGNsYXNzOiVzIiwKKwkJCSAgICBjbWQtPnRyYWNlMl9jaGlsZF9pZCwgY2hpbGRfY2xhc3MpOworCX0KKworCWlmIChjbWQtPmRpcikgeworCQlzdHJidWZfYWRkc3RyKCZidWZfcGF5bG9hZCwgIiBjZDoiKTsKKwkJc3FfcXVvdGVfYnVmX3ByZXR0eSgmYnVmX3BheWxvYWQsIGNtZC0+ZGlyKTsKKwl9CisKKwlzdHJidWZfYWRkc3RyKCZidWZfcGF5bG9hZCwgIiBhcmd2OlsiKTsKKwlpZiAoY21kLT5naXRfY21kKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1Zl9wYXlsb2FkLCAiZ2l0Iik7CisJCWlmIChjbWQtPmFyZ3ZbMF0pCisJCQlzdHJidWZfYWRkY2goJmJ1Zl9wYXlsb2FkLCAnICcpOworCX0KKwlzcV9hcHBlbmRfcXVvdGVfYXJndl9wcmV0dHkoJmJ1Zl9wYXlsb2FkLCBjbWQtPmFyZ3YpOworCXN0cmJ1Zl9hZGRjaCgmYnVmX3BheWxvYWQsICddJyk7CisKKwlwZXJmX2lvX3dyaXRlX2ZsKGZpbGUsIGxpbmUsIGV2ZW50X25hbWUsIE5VTEwsICZ1c19lbGFwc2VkX2Fic29sdXRlLAorCQkJIE5VTEwsIE5VTEwsICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgZm5fY2hpbGRfZXhpdF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCSAgICAgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwgaW50IGNpZCwgaW50IHBpZCwKKwkJCSAgICAgaW50IGNvZGUsIHVpbnQ2NF90IHVzX2VsYXBzZWRfY2hpbGQpCit7CisJY29uc3QgY2hhciAqZXZlbnRfbmFtZSA9ICJjaGlsZF9leGl0IjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkZigmYnVmX3BheWxvYWQsICJbY2glZF0gcGlkOiVkIGNvZGU6JWQiLCBjaWQsIHBpZCwgY29kZSk7CisKKwlwZXJmX2lvX3dyaXRlX2ZsKGZpbGUsIGxpbmUsIGV2ZW50X25hbWUsIE5VTEwsICZ1c19lbGFwc2VkX2Fic29sdXRlLAorCQkJICZ1c19lbGFwc2VkX2NoaWxkLCBOVUxMLCAmYnVmX3BheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfcGF5bG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX3RocmVhZF9zdGFydF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCSAgICAgICB1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlKQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAidGhyZWFkX3N0YXJ0IjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisKKwlwZXJmX2lvX3dyaXRlX2ZsKGZpbGUsIGxpbmUsIGV2ZW50X25hbWUsIE5VTEwsICZ1c19lbGFwc2VkX2Fic29sdXRlLAorCQkJIE5VTEwsIE5VTEwsICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgZm5fdGhyZWFkX2V4aXRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkgICAgICB1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLAorCQkJICAgICAgdWludDY0X3QgdXNfZWxhcHNlZF90aHJlYWQpCit7CisJY29uc3QgY2hhciAqZXZlbnRfbmFtZSA9ICJ0aHJlYWRfZXhpdCI7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJcGVyZl9pb193cml0ZV9mbChmaWxlLCBsaW5lLCBldmVudF9uYW1lLCBOVUxMLCAmdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCSAmdXNfZWxhcHNlZF90aHJlYWQsIE5VTEwsICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgZm5fZXhlY19mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJICAgICAgIGludCBleGVjX2lkLCBjb25zdCBjaGFyICpleGUsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAiZXhlYyI7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJmJ1Zl9wYXlsb2FkLCAiaWQ6JWQgIiwgZXhlY19pZCk7CisJc3RyYnVmX2FkZHN0cigmYnVmX3BheWxvYWQsICJhcmd2OlsiKTsKKwlpZiAoZXhlKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1Zl9wYXlsb2FkLCBleGUpOworCQlpZiAoYXJndlswXSkKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmX3BheWxvYWQsICcgJyk7CisJfQorCXNxX2FwcGVuZF9xdW90ZV9hcmd2X3ByZXR0eSgmYnVmX3BheWxvYWQsIGFyZ3YpOworCXN0cmJ1Zl9hZGRjaCgmYnVmX3BheWxvYWQsICddJyk7CisKKwlwZXJmX2lvX3dyaXRlX2ZsKGZpbGUsIGxpbmUsIGV2ZW50X25hbWUsIE5VTEwsICZ1c19lbGFwc2VkX2Fic29sdXRlLAorCQkJIE5VTEwsIE5VTEwsICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgZm5fZXhlY19yZXN1bHRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkgICAgICB1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLCBpbnQgZXhlY19pZCwKKwkJCSAgICAgIGludCBjb2RlKQoreworCWNvbnN0IGNoYXIgKmV2ZW50X25hbWUgPSAiZXhlY19yZXN1bHQiOworCXN0cnVjdCBzdHJidWYgYnVmX3BheWxvYWQgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZidWZfcGF5bG9hZCwgImlkOiVkIGNvZGU6JWQiLCBleGVjX2lkLCBjb2RlKTsKKwlpZiAoY29kZSA+IDApCisJCXN0cmJ1Zl9hZGRmKCZidWZfcGF5bG9hZCwgIiBlcnI6JXMiLCBzdHJlcnJvcihjb2RlKSk7CisKKwlwZXJmX2lvX3dyaXRlX2ZsKGZpbGUsIGxpbmUsIGV2ZW50X25hbWUsIE5VTEwsICZ1c19lbGFwc2VkX2Fic29sdXRlLAorCQkJIE5VTEwsIE5VTEwsICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgZm5fcGFyYW1fZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnBhcmFtLAorCQkJY29uc3QgY2hhciAqdmFsdWUpCit7CisJY29uc3QgY2hhciAqZXZlbnRfbmFtZSA9ICJkZWZfcGFyYW0iOworCXN0cnVjdCBzdHJidWYgYnVmX3BheWxvYWQgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZidWZfcGF5bG9hZCwgIiVzOiVzIiwgcGFyYW0sIHZhbHVlKTsKKworCXBlcmZfaW9fd3JpdGVfZmwoZmlsZSwgbGluZSwgZXZlbnRfbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSAmYnVmX3BheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfcGF5bG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX3JlcG9fZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbykKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gImRlZl9yZXBvIjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkc3RyKCZidWZfcGF5bG9hZCwgIndvcmt0cmVlOiIpOworCXNxX3F1b3RlX2J1Zl9wcmV0dHkoJmJ1Zl9wYXlsb2FkLCByZXBvLT53b3JrdHJlZSk7CisKKwlwZXJmX2lvX3dyaXRlX2ZsKGZpbGUsIGxpbmUsIGV2ZW50X25hbWUsIHJlcG8sIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkgJmJ1Zl9wYXlsb2FkKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmX3BheWxvYWQpOworfQorCitzdGF0aWMgdm9pZCBmbl9yZWdpb25fZW50ZXJfcHJpbnRmX3ZhX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCQkgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCQkJIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAorCQkJCQkgY29uc3QgY2hhciAqbGFiZWwsCisJCQkJCSBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQkJIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gInJlZ2lvbl9lbnRlciI7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJaWYgKGxhYmVsKQorCQlzdHJidWZfYWRkZigmYnVmX3BheWxvYWQsICJsYWJlbDolcyIsIGxhYmVsKTsKKwlpZiAoZm10ICYmICpmbXQpIHsKKwkJc3RyYnVmX2FkZGNoKCZidWZfcGF5bG9hZCwgJyAnKTsKKwkJbWF5YmVfYXBwZW5kX3N0cmluZ192YSgmYnVmX3BheWxvYWQsIGZtdCwgYXApOworCX0KKworCXBlcmZfaW9fd3JpdGVfZmwoZmlsZSwgbGluZSwgZXZlbnRfbmFtZSwgcmVwbywgJnVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkgTlVMTCwgY2F0ZWdvcnksICZidWZfcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9wYXlsb2FkKTsKK30KKworc3RhdGljIHZvaWQgZm5fcmVnaW9uX2xlYXZlX3ByaW50Zl92YV9mbCgKKwljb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwl1aW50NjRfdCB1c19lbGFwc2VkX3JlZ2lvbiwgY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLAorCWNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJY29uc3QgY2hhciAqZXZlbnRfbmFtZSA9ICJyZWdpb25fbGVhdmUiOworCXN0cnVjdCBzdHJidWYgYnVmX3BheWxvYWQgPSBTVFJCVUZfSU5JVDsKKworCWlmIChsYWJlbCkKKwkJc3RyYnVmX2FkZGYoJmJ1Zl9wYXlsb2FkLCAibGFiZWw6JXMiLCBsYWJlbCk7CisJaWYgKGZtdCAmJiAqZm10KSB7CisJCXN0cmJ1Zl9hZGRjaCgmYnVmX3BheWxvYWQsICcgJyApOworCQltYXliZV9hcHBlbmRfc3RyaW5nX3ZhKCZidWZfcGF5bG9hZCwgZm10LCBhcCk7CisJfQorCisJcGVyZl9pb193cml0ZV9mbChmaWxlLCBsaW5lLCBldmVudF9uYW1lLCByZXBvLCAmdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCSAmdXNfZWxhcHNlZF9yZWdpb24sIGNhdGVnb3J5LCAmYnVmX3BheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfcGF5bG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX2RhdGFfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCSAgICAgICB1aW50NjRfdCB1c19lbGFwc2VkX3JlZ2lvbiwgY29uc3QgY2hhciAqY2F0ZWdvcnksCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqa2V5LAorCQkgICAgICAgY29uc3QgY2hhciAqdmFsdWUpCit7CisJY29uc3QgY2hhciAqZXZlbnRfbmFtZSA9ICJkYXRhIjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9wYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkZigmYnVmX3BheWxvYWQsICIlczolcyIsIGtleSwgdmFsdWUpOworCisJcGVyZl9pb193cml0ZV9mbChmaWxlLCBsaW5lLCBldmVudF9uYW1lLCByZXBvLCAmdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCSAmdXNfZWxhcHNlZF9yZWdpb24sIGNhdGVnb3J5LCAmYnVmX3BheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfcGF5bG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX2RhdGFfanNvbl9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCSAgICB1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLAorCQkJICAgIHVpbnQ2NF90IHVzX2VsYXBzZWRfcmVnaW9uLCBjb25zdCBjaGFyICpjYXRlZ29yeSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqa2V5LAorCQkJICAgIGNvbnN0IHN0cnVjdCBqc29uX3dyaXRlciAqdmFsdWUpCit7CisJY29uc3QgY2hhciAqZXZlbnRfbmFtZSA9ICJkYXRhX2pzb24iOworCXN0cnVjdCBzdHJidWYgYnVmX3BheWxvYWQgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZidWZfcGF5bG9hZCwgIiVzOiVzIiwga2V5LCB2YWx1ZS0+anNvbi5idWYpOworCisJcGVyZl9pb193cml0ZV9mbChmaWxlLCBsaW5lLCBldmVudF9uYW1lLCByZXBvLCAmdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCSAmdXNfZWxhcHNlZF9yZWdpb24sIGNhdGVnb3J5LCAmYnVmX3BheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfcGF5bG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX3ByaW50Zl92YV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCSAgICB1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlLCBjb25zdCBjaGFyICpmbXQsCisJCQkgICAgdmFfbGlzdCBhcCkKK3sKKwljb25zdCBjaGFyICpldmVudF9uYW1lID0gInByaW50ZiI7CisJc3RydWN0IHN0cmJ1ZiBidWZfcGF5bG9hZCA9IFNUUkJVRl9JTklUOworCisJbWF5YmVfYXBwZW5kX3N0cmluZ192YSgmYnVmX3BheWxvYWQsIGZtdCwgYXApOworCisJcGVyZl9pb193cml0ZV9mbChmaWxlLCBsaW5lLCBldmVudF9uYW1lLCBOVUxMLCAmdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCSBOVUxMLCBOVUxMLCAmYnVmX3BheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfcGF5bG9hZCk7Cit9CisKK3N0cnVjdCB0cjJfdGd0IHRyMl90Z3RfcGVyZiA9IHsKKwkmdHIyZHN0X3BlcmYsCisKKwlmbl9pbml0LAorCWZuX3Rlcm0sCisKKwlmbl92ZXJzaW9uX2ZsLAorCWZuX3N0YXJ0X2ZsLAorCWZuX2V4aXRfZmwsCisJZm5fc2lnbmFsLAorCWZuX2F0ZXhpdCwKKwlmbl9lcnJvcl92YV9mbCwKKwlmbl9jb21tYW5kX3BhdGhfZmwsCisJZm5fY29tbWFuZF9uYW1lX2ZsLAorCWZuX2NvbW1hbmRfbW9kZV9mbCwKKwlmbl9hbGlhc19mbCwKKwlmbl9jaGlsZF9zdGFydF9mbCwKKwlmbl9jaGlsZF9leGl0X2ZsLAorCWZuX3RocmVhZF9zdGFydF9mbCwKKwlmbl90aHJlYWRfZXhpdF9mbCwKKwlmbl9leGVjX2ZsLAorCWZuX2V4ZWNfcmVzdWx0X2ZsLAorCWZuX3BhcmFtX2ZsLAorCWZuX3JlcG9fZmwsCisJZm5fcmVnaW9uX2VudGVyX3ByaW50Zl92YV9mbCwKKwlmbl9yZWdpb25fbGVhdmVfcHJpbnRmX3ZhX2ZsLAorCWZuX2RhdGFfZmwsCisJZm5fZGF0YV9qc29uX2ZsLAorCWZuX3ByaW50Zl92YV9mbCwKK307CmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX3Rscy5jIGIvdHJhY2UyL3RyMl90bHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjdjMjM3Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyL3RyMl90bHMuYwpAQCAtMCwwICsxLDE4MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl90bHMuaCIKKworLyoKKyAqIEluaXRpYWxpemUgc2l6ZSBvZiB0aGUgdGhyZWFkIHN0YWNrIGZvciBuZXN0ZWQgcmVnaW9ucy4KKyAqIFRoaXMgaXMgdXNlZCB0byBzdG9yZSBuZXN0ZWQgcmVnaW9uIHN0YXJ0IHRpbWVzLiAgTm90ZSB0aGF0CisgKiB0aGlzIHN0YWNrIGlzIHBlci10aHJlYWQgYW5kIG5vdCBwZXItdHJhY2Uta2V5LgorICovCisjZGVmaW5lIFRSMl9SRUdJT05fTkVTVElOR19JTklUSUFMX1NJWkUgKDEwMCkKKworc3RhdGljIHN0cnVjdCB0cjJ0bHNfdGhyZWFkX2N0eCAqdHIydGxzX3RocmVhZF9tYWluOworc3RhdGljIHVpbnQ2NF90IHRyMnRsc191c19zdGFydF9wcm9jZXNzOworCitzdGF0aWMgcHRocmVhZF9tdXRleF90IHRyMnRsc19tdXRleDsKK3N0YXRpYyBwdGhyZWFkX2tleV90IHRyMnRsc19rZXk7CisKK3N0YXRpYyBpbnQgdHIyX25leHRfdGhyZWFkX2lkOyAvKiBtb2RpZnkgdW5kZXIgbG9jayAqLworCit2b2lkIHRyMnRsc19zdGFydF9wcm9jZXNzX2Nsb2NrKHZvaWQpCit7CisJaWYgKHRyMnRsc191c19zdGFydF9wcm9jZXNzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEtlZXAgdGhlIGFic29sdXRlIHN0YXJ0IHRpbWUgb2YgdGhlIHByb2Nlc3MgKGkuZS4gdGhlIG1haW4KKwkgKiBwcm9jZXNzKSBpbiBhIGZpeGVkIHZhcmlhYmxlIHNpbmNlIG90aGVyIHRocmVhZHMgbmVlZCB0bworCSAqIGFjY2VzcyBpdC4gIFRoaXMgYWxsb3dzIHRoZW0gdG8gZG8gdGhhdCB3aXRob3V0IGEgbG9jayBvbgorCSAqIG1haW4gdGhyZWFkJ3MgYXJyYXkgZGF0YSAoYmVjYXVzZSBvZiByZWFsbG9jcykuCisJICovCisJdHIydGxzX3VzX3N0YXJ0X3Byb2Nlc3MgPSBnZXRuYW5vdGltZSgpIC8gMTAwMDsKK30KKworc3RydWN0IHRyMnRsc190aHJlYWRfY3R4ICp0cjJ0bHNfY3JlYXRlX3NlbGYoY29uc3QgY2hhciAqdGhyZWFkX25hbWUsCisJCQkJCSAgICAgdWludDY0X3QgdXNfdGhyZWFkX3N0YXJ0KQoreworCXN0cnVjdCB0cjJ0bHNfdGhyZWFkX2N0eCAqY3R4ID0geGNhbGxvYygxLCBzaXplb2YoKmN0eCkpOworCisJLyoKKwkgKiBJbXBsaWNpdGx5ICJ0cjJ0bHNfcHVzaF9zZWxmKCkiIHRvIGNhcHR1cmUgdGhlIHRocmVhZCdzIHN0YXJ0CisJICogdGltZSBpbiBhcnJheV91c19zdGFydFswXS4gIEZvciB0aGUgbWFpbiB0aHJlYWQgdGhpcyBnaXZlcyB1cyB0aGUKKwkgKiBhcHBsaWNhdGlvbiBydW4gdGltZS4KKwkgKi8KKwljdHgtPmFsbG9jID0gVFIyX1JFR0lPTl9ORVNUSU5HX0lOSVRJQUxfU0laRTsKKwljdHgtPmFycmF5X3VzX3N0YXJ0ID0gKHVpbnQ2NF90ICopeGNhbGxvYyhjdHgtPmFsbG9jLCBzaXplb2YodWludDY0X3QpKTsKKwljdHgtPmFycmF5X3VzX3N0YXJ0W2N0eC0+bnJfb3Blbl9yZWdpb25zKytdID0gdXNfdGhyZWFkX3N0YXJ0OworCisJY3R4LT50aHJlYWRfaWQgPSB0cjJ0bHNfbG9ja2VkX2luY3JlbWVudCgmdHIyX25leHRfdGhyZWFkX2lkKTsKKworCXN0cmJ1Zl9pbml0KCZjdHgtPnRocmVhZF9uYW1lLCAwKTsKKwlpZiAoY3R4LT50aHJlYWRfaWQpCisJCXN0cmJ1Zl9hZGRmKCZjdHgtPnRocmVhZF9uYW1lLCAidGglMDJkOiIsIGN0eC0+dGhyZWFkX2lkKTsKKwlzdHJidWZfYWRkc3RyKCZjdHgtPnRocmVhZF9uYW1lLCB0aHJlYWRfbmFtZSk7CisJaWYgKGN0eC0+dGhyZWFkX25hbWUubGVuID4gVFIyX01BWF9USFJFQURfTkFNRSkKKwkJc3RyYnVmX3NldGxlbigmY3R4LT50aHJlYWRfbmFtZSwgVFIyX01BWF9USFJFQURfTkFNRSk7CisKKwlwdGhyZWFkX3NldHNwZWNpZmljKHRyMnRsc19rZXksIGN0eCk7CisKKwlyZXR1cm4gY3R4OworfQorCitzdHJ1Y3QgdHIydGxzX3RocmVhZF9jdHggKnRyMnRsc19nZXRfc2VsZih2b2lkKQoreworCXN0cnVjdCB0cjJ0bHNfdGhyZWFkX2N0eCAqY3R4OworCisJaWYgKCFIQVZFX1RIUkVBRFMpCisJCXJldHVybiB0cjJ0bHNfdGhyZWFkX21haW47CisKKwljdHggPSBwdGhyZWFkX2dldHNwZWNpZmljKHRyMnRsc19rZXkpOworCisJLyoKKwkgKiBJZiB0aGUgdGhyZWFkLXByb2MgZGlkIG5vdCBjYWxsIHRyYWNlMl90aHJlYWRfc3RhcnQoKSwgd2Ugd29uJ3QKKwkgKiBoYXZlIGFueSBUTFMgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgdGhyZWFkLiAgRml4IGl0CisJICogaGVyZSBhbmQgc2lsZW50bHkgY29udGludWUuCisJICovCisJaWYgKCFjdHgpCisJCWN0eCA9IHRyMnRsc19jcmVhdGVfc2VsZigidW5rbm93biIsIGdldG5hbm90aW1lKCkgLyAxMDAwKTsKKworCXJldHVybiBjdHg7Cit9CisKK2ludCB0cjJ0bHNfaXNfbWFpbl90aHJlYWQodm9pZCkKK3sKKwlpZiAoIUhBVkVfVEhSRUFEUykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyh0cjJ0bHNfa2V5KSA9PSB0cjJ0bHNfdGhyZWFkX21haW47Cit9CisKK3ZvaWQgdHIydGxzX3Vuc2V0X3NlbGYodm9pZCkKK3sKKwlzdHJ1Y3QgdHIydGxzX3RocmVhZF9jdHggKmN0eDsKKworCWN0eCA9IHRyMnRsc19nZXRfc2VsZigpOworCisJcHRocmVhZF9zZXRzcGVjaWZpYyh0cjJ0bHNfa2V5LCBOVUxMKTsKKworCWZyZWUoY3R4LT5hcnJheV91c19zdGFydCk7CisJZnJlZShjdHgpOworfQorCit2b2lkIHRyMnRsc19wdXNoX3NlbGYodWludDY0X3QgdXNfbm93KQoreworCXN0cnVjdCB0cjJ0bHNfdGhyZWFkX2N0eCAqY3R4ID0gdHIydGxzX2dldF9zZWxmKCk7CisKKwlBTExPQ19HUk9XKGN0eC0+YXJyYXlfdXNfc3RhcnQsIGN0eC0+bnJfb3Blbl9yZWdpb25zICsgMSwgY3R4LT5hbGxvYyk7CisJY3R4LT5hcnJheV91c19zdGFydFtjdHgtPm5yX29wZW5fcmVnaW9ucysrXSA9IHVzX25vdzsKK30KKwordm9pZCB0cjJ0bHNfcG9wX3NlbGYodm9pZCkKK3sKKwlzdHJ1Y3QgdHIydGxzX3RocmVhZF9jdHggKmN0eCA9IHRyMnRsc19nZXRfc2VsZigpOworCisJaWYgKCFjdHgtPm5yX29wZW5fcmVnaW9ucykKKwkJQlVHKCJubyBvcGVuIHJlZ2lvbnMgaW4gdGhyZWFkICclcyciLCBjdHgtPnRocmVhZF9uYW1lLmJ1Zik7CisKKwljdHgtPm5yX29wZW5fcmVnaW9ucy0tOworfQorCit2b2lkIHRyMnRsc19wb3BfdW53aW5kX3NlbGYodm9pZCkKK3sKKwlzdHJ1Y3QgdHIydGxzX3RocmVhZF9jdHggKmN0eCA9IHRyMnRsc19nZXRfc2VsZigpOworCisJd2hpbGUgKGN0eC0+bnJfb3Blbl9yZWdpb25zID4gMSkKKwkJdHIydGxzX3BvcF9zZWxmKCk7Cit9CisKK3VpbnQ2NF90IHRyMnRsc19yZWdpb25fZWxhc3BlZF9zZWxmKHVpbnQ2NF90IHVzKQoreworCXN0cnVjdCB0cjJ0bHNfdGhyZWFkX2N0eCAqY3R4OworCXVpbnQ2NF90IHVzX3N0YXJ0OworCisJY3R4ID0gdHIydGxzX2dldF9zZWxmKCk7CisJaWYgKCFjdHgtPm5yX29wZW5fcmVnaW9ucykKKwkJcmV0dXJuIDA7CisKKwl1c19zdGFydCA9IGN0eC0+YXJyYXlfdXNfc3RhcnRbY3R4LT5ucl9vcGVuX3JlZ2lvbnMgLSAxXTsKKworCXJldHVybiB1cyAtIHVzX3N0YXJ0OworfQorCit1aW50NjRfdCB0cjJ0bHNfYWJzb2x1dGVfZWxhcHNlZCh1aW50NjRfdCB1cykKK3sKKwlpZiAoIXRyMnRsc190aHJlYWRfbWFpbikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdXMgLSB0cjJ0bHNfdXNfc3RhcnRfcHJvY2VzczsKK30KKwordm9pZCB0cjJ0bHNfaW5pdCh2b2lkKQoreworCXRyMnRsc19zdGFydF9wcm9jZXNzX2Nsb2NrKCk7CisKKwlwdGhyZWFkX2tleV9jcmVhdGUoJnRyMnRsc19rZXksIE5VTEwpOworCWluaXRfcmVjdXJzaXZlX211dGV4KCZ0cjJ0bHNfbXV0ZXgpOworCisJdHIydGxzX3RocmVhZF9tYWluID0KKwkJdHIydGxzX2NyZWF0ZV9zZWxmKCJtYWluIiwgdHIydGxzX3VzX3N0YXJ0X3Byb2Nlc3MpOworfQorCit2b2lkIHRyMnRsc19yZWxlYXNlKHZvaWQpCit7CisJdHIydGxzX3Vuc2V0X3NlbGYoKTsKKwl0cjJ0bHNfdGhyZWFkX21haW4gPSBOVUxMOworCisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZ0cjJ0bHNfbXV0ZXgpOworCXB0aHJlYWRfa2V5X2RlbGV0ZSh0cjJ0bHNfa2V5KTsKK30KKworaW50IHRyMnRsc19sb2NrZWRfaW5jcmVtZW50KGludCAqcCkKK3sKKwlpbnQgY3VycmVudF92YWx1ZTsKKworCXB0aHJlYWRfbXV0ZXhfbG9jaygmdHIydGxzX211dGV4KTsKKwljdXJyZW50X3ZhbHVlID0gKnA7CisJKnAgPSBjdXJyZW50X3ZhbHVlICsgMTsKKwlwdGhyZWFkX211dGV4X3VubG9jaygmdHIydGxzX211dGV4KTsKKworCXJldHVybiBjdXJyZW50X3ZhbHVlOworfQpkaWZmIC0tZ2l0IGEvdHJhY2UyL3RyMl90bHMuaCBiL3RyYWNlMi90cjJfdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFlMzI3YQotLS0gL2Rldi9udWxsCisrKyBiL3RyYWNlMi90cjJfdGxzLmgKQEAgLTAsMCArMSwxMDMgQEAKKyNpZm5kZWYgVFIyX1RMU19ICisjZGVmaW5lIFRSMl9UTFNfSAorCisjaW5jbHVkZSAic3RyYnVmLmgiCisKKy8qCisgKiBBcmJpdHJ5IGxpbWl0IGZvciB0aHJlYWQgbmFtZXMgZm9yIGNvbHVtbiBhbGlnbm1lbnQuCisgKi8KKyNkZWZpbmUgVFIyX01BWF9USFJFQURfTkFNRSAoMjQpCisKK3N0cnVjdCB0cjJ0bHNfdGhyZWFkX2N0eCB7CisJc3RydWN0IHN0cmJ1ZiB0aHJlYWRfbmFtZTsKKwl1aW50NjRfdCAqYXJyYXlfdXNfc3RhcnQ7CisJaW50IGFsbG9jOworCWludCBucl9vcGVuX3JlZ2lvbnM7IC8qIHBsYXlzIHJvbGUgb2YgIm5yIiBpbiBBTExPQ19HUk9XICovCisJaW50IHRocmVhZF9pZDsKK307CisKKy8qCisgKiBDcmVhdGUgVExTIGRhdGEgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4gIFRoaXMgZ2l2ZXMgdXMgYSBwbGFjZSB0bworICogcHV0IHBlci10aHJlYWQgZGF0YSwgc3VjaCBhcyB0aHJlYWQgc3RhcnQgdGltZSwgZnVuY3Rpb24gbmVzdGluZworICogYW5kIGEgcGVyLXRocmVhZCBsYWJlbCBmb3Igb3VyIG1lc3NhZ2VzLgorICoKKyAqIFdlIGFzc3VtZSB0aGUgZmlyc3QgdGhyZWFkIGlzICJtYWluIi4gIE90aGVyIHRocmVhZHMgYXJlIGdpdmVuCisgKiBub24temVybyB0aHJlYWQtaWRzIHRvIGhlbHAgZGlzdGluZ3Vpc2ggbWVzc2FnZXMgZnJvbSBjb25jdXJyZW50CisgKiB0aHJlYWRzLgorICoKKyAqIFRydW5jYXRlIHRoZSB0aHJlYWQgbmFtZSBpZiBuZWNlc3NhcnkgdG8gaGVscCB3aXRoIGNvbHVtbiBhbGlnbm1lbnQKKyAqIGluIHByaW50Zi1zdHlsZSBtZXNzYWdlcy4KKyAqCisgKiBJbiB0aGlzIGFuZCBhbGwgZm9sbG93aW5nIGZ1bmN0aW9ucyB0aGUgdGVybSAic2VsZiIgcmVmZXJzIHRvIHRoZQorICogY3VycmVudCB0aHJlYWQuCisgKi8KK3N0cnVjdCB0cjJ0bHNfdGhyZWFkX2N0eCAqdHIydGxzX2NyZWF0ZV9zZWxmKGNvbnN0IGNoYXIgKnRocmVhZF9uYW1lLAorCQkJCQkgICAgIHVpbnQ2NF90IHVzX3RocmVhZF9zdGFydCk7CisKKy8qCisgKiBHZXQgb3VyIFRMUyBkYXRhLgorICovCitzdHJ1Y3QgdHIydGxzX3RocmVhZF9jdHggKnRyMnRsc19nZXRfc2VsZih2b2lkKTsKKworLyoKKyAqIHJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IHRocmVhZCBpcyB0aGUgbWFpbiB0aHJlYWQuCisgKi8KK2ludCB0cjJ0bHNfaXNfbWFpbl90aHJlYWQodm9pZCk7CisKKy8qCisgKiBGcmVlIG91ciBUTFMgZGF0YS4KKyAqLwordm9pZCB0cjJ0bHNfdW5zZXRfc2VsZih2b2lkKTsKKworLyoKKyAqIEJlZ2luIGEgbmV3IG5lc3RlZCByZWdpb24gYW5kIHJlbWVtYmVyIHRoZSBzdGFydCB0aW1lLgorICovCit2b2lkIHRyMnRsc19wdXNoX3NlbGYodWludDY0X3QgdXNfbm93KTsKKworLyoKKyAqIEVuZCB0aGUgaW5uZXJtb3N0IG5lc3RlZCByZWdpb24uCisgKi8KK3ZvaWQgdHIydGxzX3BvcF9zZWxmKHZvaWQpOworCisvKgorICogUG9wIGFueSBleHRyYSAoYWJvdmUgdGhlIGZpcnN0KSBvcGVuIHJlZ2lvbnMgb24gdGhlIGN1cnJlbnQKKyAqIHRocmVhZCBhbmQgZGlzY2FyZC4gIER1cmluZyBhIHRocmVhZC1leGl0LCB3ZSBzaG91bGQgb25seQorICogaGF2ZSByZWdpb25bMF0gdGhhdCB3YXMgcHVzaGVkIGluIHRyYWNlMl90aHJlYWRfc3RhcnQoKSBpZgorICogdGhlIHRocmVhZCBleGl0cyBub3JtYWxseS4KKyAqLwordm9pZCB0cjJ0bHNfcG9wX3Vud2luZF9zZWxmKHZvaWQpOworCisvKgorICogQ29tcHV0ZSB0aGUgZWxhcHNlZCB0aW1lIHNpbmNlIHRoZSBpbm5lcm1vc3QgcmVnaW9uIGluIHRoZQorICogY3VycmVudCB0aHJlYWQgc3RhcnRlZCBhbmQgdGhlIGdpdmVuIHRpbWUgKHVzdWFsbHkgbm93KS4KKyAqLwordWludDY0X3QgdHIydGxzX3JlZ2lvbl9lbGFzcGVkX3NlbGYodWludDY0X3QgdXMpOworCisvKgorICogQ29tcHV0ZSB0aGUgZWxhcHNlZCB0aW1lIHNpbmNlIHRoZSBtYWluIHRocmVhZCBzdGFydGVkCisgKiBhbmQgdGhlIGdpdmVuIHRpbWUgKHVzdWFsbHkgbm93KS4gIFRoaXMgaXMgYXNzdW1lZCB0bworICogYmUgdGhlIGFic29sdXRlIHJ1biB0aW1lIG9mIHRoZSBwcm9jZXNzLgorICovCit1aW50NjRfdCB0cjJ0bHNfYWJzb2x1dGVfZWxhcHNlZCh1aW50NjRfdCB1cyk7CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSB0cjIgVExTIHN5c3RlbS4KKyAqLwordm9pZCB0cjJ0bHNfaW5pdCh2b2lkKTsKKworLyoKKyAqIEZyZWUgYWxsIHRyMiBUTFMgcmVzb3VyY2VzLgorICovCit2b2lkIHRyMnRsc19yZWxlYXNlKHZvaWQpOworCisvKgorICogUHJvdGVjdGVkIGluY3JlbWVudCBvZiBhbiBpbnRlZ2VyLgorICovCitpbnQgdHIydGxzX2xvY2tlZF9pbmNyZW1lbnQoaW50ICpwKTsKKworLyoKKyAqIENhcHR1cmUgdGhlIHByb2Nlc3Mgc3RhcnQgdGltZSBhbmQgZG8gbm90aGluZyBlbHNlLgorICovCit2b2lkIHRyMnRsc19zdGFydF9wcm9jZXNzX2Nsb2NrKHZvaWQpOworCisjZW5kaWYgLyogVFIyX1RMU19IICovCmRpZmYgLS1naXQgYS90cmFpbGVyLmMgYi90cmFpbGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM0MTRmMgotLS0gL2Rldi9udWxsCisrKyBiL3RyYWlsZXIuYwpAQCAtMCwwICsxLDExODcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0ZW1wZmlsZS5oIgorI2luY2x1ZGUgInRyYWlsZXIuaCIKKyNpbmNsdWRlICJsaXN0LmgiCisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzLCAyMDE0IENocmlzdGlhbiBDb3VkZXIgPGNocmlzY29vbEB0dXhmYW1pbHkub3JnPgorICovCisKK3N0cnVjdCBjb25mX2luZm8geworCWNoYXIgKm5hbWU7CisJY2hhciAqa2V5OworCWNoYXIgKmNvbW1hbmQ7CisJZW51bSB0cmFpbGVyX3doZXJlIHdoZXJlOworCWVudW0gdHJhaWxlcl9pZl9leGlzdHMgaWZfZXhpc3RzOworCWVudW0gdHJhaWxlcl9pZl9taXNzaW5nIGlmX21pc3Npbmc7Cit9OworCitzdGF0aWMgc3RydWN0IGNvbmZfaW5mbyBkZWZhdWx0X2NvbmZfaW5mbzsKKworc3RydWN0IHRyYWlsZXJfaXRlbSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCS8qCisJICogSWYgdGhpcyBpcyBub3QgYSB0cmFpbGVyIGxpbmUsIHRoZSBsaW5lIGlzIHN0b3JlZCBpbiB2YWx1ZQorCSAqIChleGNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG5ld2xpbmUpIGFuZCB0b2tlbiBpcyBOVUxMLgorCSAqLworCWNoYXIgKnRva2VuOworCWNoYXIgKnZhbHVlOworfTsKKworc3RydWN0IGFyZ19pdGVtIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY2hhciAqdG9rZW47CisJY2hhciAqdmFsdWU7CisJc3RydWN0IGNvbmZfaW5mbyBjb25mOworfTsKKworc3RhdGljIExJU1RfSEVBRChjb25mX2hlYWQpOworCitzdGF0aWMgY2hhciAqc2VwYXJhdG9ycyA9ICI6IjsKKworc3RhdGljIGludCBjb25maWd1cmVkOworCisjZGVmaW5lIFRSQUlMRVJfQVJHX1NUUklORyAiJEFSRyIKKworc3RhdGljIGNvbnN0IGNoYXIgKmdpdF9nZW5lcmF0ZWRfcHJlZml4ZXNbXSA9IHsKKwkiU2lnbmVkLW9mZi1ieTogIiwKKwkiKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgIiwKKwlOVUxMCit9OworCisvKiBJdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIHRoZSBsaXN0LiAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2Rpcihwb3MsIGhlYWQsIGlzX3JldmVyc2UpIFwKKwlmb3IgKHBvcyA9IGlzX3JldmVyc2UgPyAoaGVhZCktPnByZXYgOiAoaGVhZCktPm5leHQ7IFwKKwkJcG9zICE9IChoZWFkKTsgXAorCQlwb3MgPSBpc19yZXZlcnNlID8gcG9zLT5wcmV2IDogcG9zLT5uZXh0KQorCitzdGF0aWMgaW50IGFmdGVyX29yX2VuZChlbnVtIHRyYWlsZXJfd2hlcmUgd2hlcmUpCit7CisJcmV0dXJuICh3aGVyZSA9PSBXSEVSRV9BRlRFUikgfHwgKHdoZXJlID09IFdIRVJFX0VORCk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIG5vdCBpbmNsdWRpbmcgYW55IGZpbmFsCisgKiBwdW5jdHVhdGlvbi4gRS5nLiwgdGhlIGlucHV0ICJTaWduZWQtb2ZmLWJ5OiIgd291bGQgcmV0dXJuCisgKiAxMywgc3RyaXBwaW5nIHRoZSB0cmFpbGluZyBwdW5jdHVhdGlvbiBidXQgcmV0YWluaW5nCisgKiBpbnRlcm5hbCBwdW5jdHVhdGlvbi4KKyAqLworc3RhdGljIHNpemVfdCB0b2tlbl9sZW5fd2l0aG91dF9zZXBhcmF0b3IoY29uc3QgY2hhciAqdG9rZW4sIHNpemVfdCBsZW4pCit7CisJd2hpbGUgKGxlbiA+IDAgJiYgIWlzYWxudW0odG9rZW5bbGVuIC0gMV0pKQorCQlsZW4tLTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IHNhbWVfdG9rZW4oc3RydWN0IHRyYWlsZXJfaXRlbSAqYSwgc3RydWN0IGFyZ19pdGVtICpiKQoreworCXNpemVfdCBhX2xlbiwgYl9sZW4sIG1pbl9sZW47CisKKwlpZiAoIWEtPnRva2VuKQorCQlyZXR1cm4gMDsKKworCWFfbGVuID0gdG9rZW5fbGVuX3dpdGhvdXRfc2VwYXJhdG9yKGEtPnRva2VuLCBzdHJsZW4oYS0+dG9rZW4pKTsKKwliX2xlbiA9IHRva2VuX2xlbl93aXRob3V0X3NlcGFyYXRvcihiLT50b2tlbiwgc3RybGVuKGItPnRva2VuKSk7CisJbWluX2xlbiA9IChhX2xlbiA+IGJfbGVuKSA/IGJfbGVuIDogYV9sZW47CisKKwlyZXR1cm4gIXN0cm5jYXNlY21wKGEtPnRva2VuLCBiLT50b2tlbiwgbWluX2xlbik7Cit9CisKK3N0YXRpYyBpbnQgc2FtZV92YWx1ZShzdHJ1Y3QgdHJhaWxlcl9pdGVtICphLCBzdHJ1Y3QgYXJnX2l0ZW0gKmIpCit7CisJcmV0dXJuICFzdHJjYXNlY21wKGEtPnZhbHVlLCBiLT52YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgc2FtZV90cmFpbGVyKHN0cnVjdCB0cmFpbGVyX2l0ZW0gKmEsIHN0cnVjdCBhcmdfaXRlbSAqYikKK3sKKwlyZXR1cm4gc2FtZV90b2tlbihhLCBiKSAmJiBzYW1lX3ZhbHVlKGEsIGIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19ibGFua19saW5lKGNvbnN0IGNoYXIgKnN0cikKK3sKKwljb25zdCBjaGFyICpzID0gc3RyOworCXdoaWxlICgqcyAmJiAqcyAhPSAnXG4nICYmIGlzc3BhY2UoKnMpKQorCQlzKys7CisJcmV0dXJuICEqcyB8fCAqcyA9PSAnXG4nOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RyYnVmX3JlcGxhY2Uoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJY29uc3QgY2hhciAqcHRyID0gc3Ryc3RyKHNiLT5idWYsIGEpOworCWlmIChwdHIpCisJCXN0cmJ1Zl9zcGxpY2Uoc2IsIHB0ciAtIHNiLT5idWYsIHN0cmxlbihhKSwgYiwgc3RybGVuKGIpKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV90cmFpbGVyX2l0ZW0oc3RydWN0IHRyYWlsZXJfaXRlbSAqaXRlbSkKK3sKKwlmcmVlKGl0ZW0tPnRva2VuKTsKKwlmcmVlKGl0ZW0tPnZhbHVlKTsKKwlmcmVlKGl0ZW0pOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2FyZ19pdGVtKHN0cnVjdCBhcmdfaXRlbSAqaXRlbSkKK3sKKwlmcmVlKGl0ZW0tPmNvbmYubmFtZSk7CisJZnJlZShpdGVtLT5jb25mLmtleSk7CisJZnJlZShpdGVtLT5jb25mLmNvbW1hbmQpOworCWZyZWUoaXRlbS0+dG9rZW4pOworCWZyZWUoaXRlbS0+dmFsdWUpOworCWZyZWUoaXRlbSk7Cit9CisKK3N0YXRpYyBjaGFyIGxhc3Rfbm9uX3NwYWNlX2NoYXIoY29uc3QgY2hhciAqcykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSBzdHJsZW4ocykgLSAxOyBpID49IDA7IGktLSkKKwkJaWYgKCFpc3NwYWNlKHNbaV0pKQorCQkJcmV0dXJuIHNbaV07CisJcmV0dXJuICdcMCc7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Rva192YWwoRklMRSAqb3V0ZmlsZSwgY29uc3QgY2hhciAqdG9rLCBjb25zdCBjaGFyICp2YWwpCit7CisJY2hhciBjOworCisJaWYgKCF0b2spIHsKKwkJZnByaW50ZihvdXRmaWxlLCAiJXNcbiIsIHZhbCk7CisJCXJldHVybjsKKwl9CisKKwljID0gbGFzdF9ub25fc3BhY2VfY2hhcih0b2spOworCWlmICghYykKKwkJcmV0dXJuOworCWlmIChzdHJjaHIoc2VwYXJhdG9ycywgYykpCisJCWZwcmludGYob3V0ZmlsZSwgIiVzJXNcbiIsIHRvaywgdmFsKTsKKwllbHNlCisJCWZwcmludGYob3V0ZmlsZSwgIiVzJWMgJXNcbiIsIHRvaywgc2VwYXJhdG9yc1swXSwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfYWxsKEZJTEUgKm91dGZpbGUsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBwcm9jZXNzX3RyYWlsZXJfb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IHRyYWlsZXJfaXRlbSAqaXRlbTsKKwlsaXN0X2Zvcl9lYWNoKHBvcywgaGVhZCkgeworCQlpdGVtID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0cmFpbGVyX2l0ZW0sIGxpc3QpOworCQlpZiAoKCFvcHRzLT50cmltX2VtcHR5IHx8IHN0cmxlbihpdGVtLT52YWx1ZSkgPiAwKSAmJgorCQkgICAgKCFvcHRzLT5vbmx5X3RyYWlsZXJzIHx8IGl0ZW0tPnRva2VuKSkKKwkJCXByaW50X3Rva192YWwob3V0ZmlsZSwgaXRlbS0+dG9rZW4sIGl0ZW0tPnZhbHVlKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhaWxlcl9pdGVtICp0cmFpbGVyX2Zyb21fYXJnKHN0cnVjdCBhcmdfaXRlbSAqYXJnX3RvaykKK3sKKwlzdHJ1Y3QgdHJhaWxlcl9pdGVtICpuZXdfaXRlbSA9IHhjYWxsb2Moc2l6ZW9mKCpuZXdfaXRlbSksIDEpOworCW5ld19pdGVtLT50b2tlbiA9IGFyZ190b2stPnRva2VuOworCW5ld19pdGVtLT52YWx1ZSA9IGFyZ190b2stPnZhbHVlOworCWFyZ190b2stPnRva2VuID0gYXJnX3Rvay0+dmFsdWUgPSBOVUxMOworCWZyZWVfYXJnX2l0ZW0oYXJnX3Rvayk7CisJcmV0dXJuIG5ld19pdGVtOworfQorCitzdGF0aWMgdm9pZCBhZGRfYXJnX3RvX2lucHV0X2xpc3Qoc3RydWN0IHRyYWlsZXJfaXRlbSAqb25fdG9rLAorCQkJCSAgc3RydWN0IGFyZ19pdGVtICphcmdfdG9rKQoreworCWludCBhb2UgPSBhZnRlcl9vcl9lbmQoYXJnX3Rvay0+Y29uZi53aGVyZSk7CisJc3RydWN0IHRyYWlsZXJfaXRlbSAqdG9fYWRkID0gdHJhaWxlcl9mcm9tX2FyZyhhcmdfdG9rKTsKKwlpZiAoYW9lKQorCQlsaXN0X2FkZCgmdG9fYWRkLT5saXN0LCAmb25fdG9rLT5saXN0KTsKKwllbHNlCisJCWxpc3RfYWRkX3RhaWwoJnRvX2FkZC0+bGlzdCwgJm9uX3Rvay0+bGlzdCk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfaWZfZGlmZmVyZW50KHN0cnVjdCB0cmFpbGVyX2l0ZW0gKmluX3RvaywKKwkJCSAgICAgIHN0cnVjdCBhcmdfaXRlbSAqYXJnX3RvaywKKwkJCSAgICAgIGludCBjaGVja19hbGwsCisJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWVudW0gdHJhaWxlcl93aGVyZSB3aGVyZSA9IGFyZ190b2stPmNvbmYud2hlcmU7CisJc3RydWN0IGxpc3RfaGVhZCAqbmV4dF9oZWFkOworCWRvIHsKKwkJaWYgKHNhbWVfdHJhaWxlcihpbl90b2ssIGFyZ190b2spKQorCQkJcmV0dXJuIDA7CisJCS8qCisJCSAqIGlmIHdlIHdhbnQgdG8gYWRkIGEgdHJhaWxlciBhZnRlciBhbm90aGVyIG9uZSwKKwkJICogd2UgaGF2ZSB0byBjaGVjayB0aG9zZSBiZWZvcmUgdGhpcyBvbmUKKwkJICovCisJCW5leHRfaGVhZCA9IGFmdGVyX29yX2VuZCh3aGVyZSkgPyBpbl90b2stPmxpc3QucHJldgorCQkJCQkJOiBpbl90b2stPmxpc3QubmV4dDsKKwkJaWYgKG5leHRfaGVhZCA9PSBoZWFkKQorCQkJYnJlYWs7CisJCWluX3RvayA9IGxpc3RfZW50cnkobmV4dF9oZWFkLCBzdHJ1Y3QgdHJhaWxlcl9pdGVtLCBsaXN0KTsKKwl9IHdoaWxlIChjaGVja19hbGwpOworCXJldHVybiAxOworfQorCitzdGF0aWMgY2hhciAqYXBwbHlfY29tbWFuZChjb25zdCBjaGFyICpjb21tYW5kLCBjb25zdCBjaGFyICphcmcpCit7CisJc3RydWN0IHN0cmJ1ZiBjbWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHtOVUxMLCBOVUxMfTsKKwljaGFyICpyZXN1bHQ7CisKKwlzdHJidWZfYWRkc3RyKCZjbWQsIGNvbW1hbmQpOworCWlmIChhcmcpCisJCXN0cmJ1Zl9yZXBsYWNlKCZjbWQsIFRSQUlMRVJfQVJHX1NUUklORywgYXJnKTsKKworCWFyZ3ZbMF0gPSBjbWQuYnVmOworCWNwLmFyZ3YgPSBhcmd2OworCWNwLmVudiA9IGxvY2FsX3JlcG9fZW52OworCWNwLm5vX3N0ZGluID0gMTsKKwljcC51c2Vfc2hlbGwgPSAxOworCisJaWYgKGNhcHR1cmVfY29tbWFuZCgmY3AsICZidWYsIDEwMjQpKSB7CisJCWVycm9yKF8oInJ1bm5pbmcgdHJhaWxlciBjb21tYW5kICclcycgZmFpbGVkIiksIGNtZC5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmVzdWx0ID0geHN0cmR1cCgiIik7CisJfSBlbHNlIHsKKwkJc3RyYnVmX3RyaW0oJmJ1Zik7CisJCXJlc3VsdCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmNtZCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgYXBwbHlfaXRlbV9jb21tYW5kKHN0cnVjdCB0cmFpbGVyX2l0ZW0gKmluX3Rvaywgc3RydWN0IGFyZ19pdGVtICphcmdfdG9rKQoreworCWlmIChhcmdfdG9rLT5jb25mLmNvbW1hbmQpIHsKKwkJY29uc3QgY2hhciAqYXJnOworCQlpZiAoYXJnX3Rvay0+dmFsdWUgJiYgYXJnX3Rvay0+dmFsdWVbMF0pIHsKKwkJCWFyZyA9IGFyZ190b2stPnZhbHVlOworCQl9IGVsc2UgeworCQkJaWYgKGluX3RvayAmJiBpbl90b2stPnZhbHVlKQorCQkJCWFyZyA9IHhzdHJkdXAoaW5fdG9rLT52YWx1ZSk7CisJCQllbHNlCisJCQkJYXJnID0geHN0cmR1cCgiIik7CisJCX0KKwkJYXJnX3Rvay0+dmFsdWUgPSBhcHBseV9jb21tYW5kKGFyZ190b2stPmNvbmYuY29tbWFuZCwgYXJnKTsKKwkJZnJlZSgoY2hhciAqKWFyZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhcHBseV9hcmdfaWZfZXhpc3RzKHN0cnVjdCB0cmFpbGVyX2l0ZW0gKmluX3RvaywKKwkJCQlzdHJ1Y3QgYXJnX2l0ZW0gKmFyZ190b2ssCisJCQkJc3RydWN0IHRyYWlsZXJfaXRlbSAqb25fdG9rLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3dpdGNoIChhcmdfdG9rLT5jb25mLmlmX2V4aXN0cykgeworCWNhc2UgRVhJU1RTX0RPX05PVEhJTkc6CisJCWZyZWVfYXJnX2l0ZW0oYXJnX3Rvayk7CisJCWJyZWFrOworCWNhc2UgRVhJU1RTX1JFUExBQ0U6CisJCWFwcGx5X2l0ZW1fY29tbWFuZChpbl90b2ssIGFyZ190b2spOworCQlhZGRfYXJnX3RvX2lucHV0X2xpc3Qob25fdG9rLCBhcmdfdG9rKTsKKwkJbGlzdF9kZWwoJmluX3Rvay0+bGlzdCk7CisJCWZyZWVfdHJhaWxlcl9pdGVtKGluX3Rvayk7CisJCWJyZWFrOworCWNhc2UgRVhJU1RTX0FERDoKKwkJYXBwbHlfaXRlbV9jb21tYW5kKGluX3RvaywgYXJnX3Rvayk7CisJCWFkZF9hcmdfdG9faW5wdXRfbGlzdChvbl90b2ssIGFyZ190b2spOworCQlicmVhazsKKwljYXNlIEVYSVNUU19BRERfSUZfRElGRkVSRU5UOgorCQlhcHBseV9pdGVtX2NvbW1hbmQoaW5fdG9rLCBhcmdfdG9rKTsKKwkJaWYgKGNoZWNrX2lmX2RpZmZlcmVudChpbl90b2ssIGFyZ190b2ssIDEsIGhlYWQpKQorCQkJYWRkX2FyZ190b19pbnB1dF9saXN0KG9uX3RvaywgYXJnX3Rvayk7CisJCWVsc2UKKwkJCWZyZWVfYXJnX2l0ZW0oYXJnX3Rvayk7CisJCWJyZWFrOworCWNhc2UgRVhJU1RTX0FERF9JRl9ESUZGRVJFTlRfTkVJR0hCT1I6CisJCWFwcGx5X2l0ZW1fY29tbWFuZChpbl90b2ssIGFyZ190b2spOworCQlpZiAoY2hlY2tfaWZfZGlmZmVyZW50KG9uX3RvaywgYXJnX3RvaywgMCwgaGVhZCkpCisJCQlhZGRfYXJnX3RvX2lucHV0X2xpc3Qob25fdG9rLCBhcmdfdG9rKTsKKwkJZWxzZQorCQkJZnJlZV9hcmdfaXRlbShhcmdfdG9rKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCJ0cmFpbGVyLmM6IHVuaGFuZGxlZCB2YWx1ZSAlZCIsCisJCSAgICBhcmdfdG9rLT5jb25mLmlmX2V4aXN0cyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhcHBseV9hcmdfaWZfbWlzc2luZyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQkJCSBzdHJ1Y3QgYXJnX2l0ZW0gKmFyZ190b2spCit7CisJZW51bSB0cmFpbGVyX3doZXJlIHdoZXJlOworCXN0cnVjdCB0cmFpbGVyX2l0ZW0gKnRvX2FkZDsKKworCXN3aXRjaCAoYXJnX3Rvay0+Y29uZi5pZl9taXNzaW5nKSB7CisJY2FzZSBNSVNTSU5HX0RPX05PVEhJTkc6CisJCWZyZWVfYXJnX2l0ZW0oYXJnX3Rvayk7CisJCWJyZWFrOworCWNhc2UgTUlTU0lOR19BREQ6CisJCXdoZXJlID0gYXJnX3Rvay0+Y29uZi53aGVyZTsKKwkJYXBwbHlfaXRlbV9jb21tYW5kKE5VTEwsIGFyZ190b2spOworCQl0b19hZGQgPSB0cmFpbGVyX2Zyb21fYXJnKGFyZ190b2spOworCQlpZiAoYWZ0ZXJfb3JfZW5kKHdoZXJlKSkKKwkJCWxpc3RfYWRkX3RhaWwoJnRvX2FkZC0+bGlzdCwgaGVhZCk7CisJCWVsc2UKKwkJCWxpc3RfYWRkKCZ0b19hZGQtPmxpc3QsIGhlYWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoInRyYWlsZXIuYzogdW5oYW5kbGVkIHZhbHVlICVkIiwKKwkJICAgIGFyZ190b2stPmNvbmYuaWZfbWlzc2luZyk7CisJfQorfQorCitzdGF0aWMgaW50IGZpbmRfc2FtZV9hbmRfYXBwbHlfYXJnKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJICAgc3RydWN0IGFyZ19pdGVtICphcmdfdG9rKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3QgdHJhaWxlcl9pdGVtICppbl90b2s7CisJc3RydWN0IHRyYWlsZXJfaXRlbSAqb25fdG9rOworCisJZW51bSB0cmFpbGVyX3doZXJlIHdoZXJlID0gYXJnX3Rvay0+Y29uZi53aGVyZTsKKwlpbnQgbWlkZGxlID0gKHdoZXJlID09IFdIRVJFX0FGVEVSKSB8fCAod2hlcmUgPT0gV0hFUkVfQkVGT1JFKTsKKwlpbnQgYmFja3dhcmRzID0gYWZ0ZXJfb3JfZW5kKHdoZXJlKTsKKwlzdHJ1Y3QgdHJhaWxlcl9pdGVtICpzdGFydF90b2s7CisKKwlpZiAobGlzdF9lbXB0eShoZWFkKSkKKwkJcmV0dXJuIDA7CisKKwlzdGFydF90b2sgPSBsaXN0X2VudHJ5KGJhY2t3YXJkcyA/IGhlYWQtPnByZXYgOiBoZWFkLT5uZXh0LAorCQkJICAgICAgIHN0cnVjdCB0cmFpbGVyX2l0ZW0sCisJCQkgICAgICAgbGlzdCk7CisKKwlsaXN0X2Zvcl9lYWNoX2Rpcihwb3MsIGhlYWQsIGJhY2t3YXJkcykgeworCQlpbl90b2sgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRyYWlsZXJfaXRlbSwgbGlzdCk7CisJCWlmICghc2FtZV90b2tlbihpbl90b2ssIGFyZ190b2spKQorCQkJY29udGludWU7CisJCW9uX3RvayA9IG1pZGRsZSA/IGluX3RvayA6IHN0YXJ0X3RvazsKKwkJYXBwbHlfYXJnX2lmX2V4aXN0cyhpbl90b2ssIGFyZ190b2ssIG9uX3RvaywgaGVhZCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc190cmFpbGVyc19saXN0cyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmFyZ19oZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnA7CisJc3RydWN0IGFyZ19pdGVtICphcmdfdG9rOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgcCwgYXJnX2hlYWQpIHsKKwkJaW50IGFwcGxpZWQgPSAwOworCQlhcmdfdG9rID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBhcmdfaXRlbSwgbGlzdCk7CisKKwkJbGlzdF9kZWwocG9zKTsKKworCQlhcHBsaWVkID0gZmluZF9zYW1lX2FuZF9hcHBseV9hcmcoaGVhZCwgYXJnX3Rvayk7CisKKwkJaWYgKCFhcHBsaWVkKQorCQkJYXBwbHlfYXJnX2lmX21pc3NpbmcoaGVhZCwgYXJnX3Rvayk7CisJfQorfQorCitpbnQgdHJhaWxlcl9zZXRfd2hlcmUoZW51bSB0cmFpbGVyX3doZXJlICppdGVtLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQkqaXRlbSA9IFdIRVJFX0RFRkFVTFQ7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoImFmdGVyIiwgdmFsdWUpKQorCQkqaXRlbSA9IFdIRVJFX0FGVEVSOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKCJiZWZvcmUiLCB2YWx1ZSkpCisJCSppdGVtID0gV0hFUkVfQkVGT1JFOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKCJlbmQiLCB2YWx1ZSkpCisJCSppdGVtID0gV0hFUkVfRU5EOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKCJzdGFydCIsIHZhbHVlKSkKKwkJKml0ZW0gPSBXSEVSRV9TVEFSVDsKKwllbHNlCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworaW50IHRyYWlsZXJfc2V0X2lmX2V4aXN0cyhlbnVtIHRyYWlsZXJfaWZfZXhpc3RzICppdGVtLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQkqaXRlbSA9IEVYSVNUU19ERUZBVUxUOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKCJhZGRJZkRpZmZlcmVudCIsIHZhbHVlKSkKKwkJKml0ZW0gPSBFWElTVFNfQUREX0lGX0RJRkZFUkVOVDsKKwllbHNlIGlmICghc3RyY2FzZWNtcCgiYWRkSWZEaWZmZXJlbnROZWlnaGJvciIsIHZhbHVlKSkKKwkJKml0ZW0gPSBFWElTVFNfQUREX0lGX0RJRkZFUkVOVF9ORUlHSEJPUjsKKwllbHNlIGlmICghc3RyY2FzZWNtcCgiYWRkIiwgdmFsdWUpKQorCQkqaXRlbSA9IEVYSVNUU19BREQ7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoInJlcGxhY2UiLCB2YWx1ZSkpCisJCSppdGVtID0gRVhJU1RTX1JFUExBQ0U7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoImRvTm90aGluZyIsIHZhbHVlKSkKKwkJKml0ZW0gPSBFWElTVFNfRE9fTk9USElORzsKKwllbHNlCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworaW50IHRyYWlsZXJfc2V0X2lmX21pc3NpbmcoZW51bSB0cmFpbGVyX2lmX21pc3NpbmcgKml0ZW0sIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCSppdGVtID0gTUlTU0lOR19ERUZBVUxUOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKCJkb05vdGhpbmciLCB2YWx1ZSkpCisJCSppdGVtID0gTUlTU0lOR19ET19OT1RISU5HOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKCJhZGQiLCB2YWx1ZSkpCisJCSppdGVtID0gTUlTU0lOR19BREQ7CisJZWxzZQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR1cGxpY2F0ZV9jb25mKHN0cnVjdCBjb25mX2luZm8gKmRzdCwgY29uc3Qgc3RydWN0IGNvbmZfaW5mbyAqc3JjKQoreworCSpkc3QgPSAqc3JjOworCWRzdC0+bmFtZSA9IHhzdHJkdXBfb3JfbnVsbChzcmMtPm5hbWUpOworCWRzdC0+a2V5ID0geHN0cmR1cF9vcl9udWxsKHNyYy0+a2V5KTsKKwlkc3QtPmNvbW1hbmQgPSB4c3RyZHVwX29yX251bGwoc3JjLT5jb21tYW5kKTsKK30KKworc3RhdGljIHN0cnVjdCBhcmdfaXRlbSAqZ2V0X2NvbmZfaXRlbShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3QgYXJnX2l0ZW0gKml0ZW07CisKKwkvKiBMb29rIHVwIGl0ZW0gd2l0aCBzYW1lIG5hbWUgKi8KKwlsaXN0X2Zvcl9lYWNoKHBvcywgJmNvbmZfaGVhZCkgeworCQlpdGVtID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBhcmdfaXRlbSwgbGlzdCk7CisJCWlmICghc3RyY2FzZWNtcChpdGVtLT5jb25mLm5hbWUsIG5hbWUpKQorCQkJcmV0dXJuIGl0ZW07CisJfQorCisJLyogSXRlbSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0cywgY3JlYXRlIGl0ICovCisJaXRlbSA9IHhjYWxsb2Moc2l6ZW9mKCppdGVtKSwgMSk7CisJZHVwbGljYXRlX2NvbmYoJml0ZW0tPmNvbmYsICZkZWZhdWx0X2NvbmZfaW5mbyk7CisJaXRlbS0+Y29uZi5uYW1lID0geHN0cmR1cChuYW1lKTsKKworCWxpc3RfYWRkX3RhaWwoJml0ZW0tPmxpc3QsICZjb25mX2hlYWQpOworCisJcmV0dXJuIGl0ZW07Cit9CisKK2VudW0gdHJhaWxlcl9pbmZvX3R5cGUgeyBUUkFJTEVSX0tFWSwgVFJBSUxFUl9DT01NQU5ELCBUUkFJTEVSX1dIRVJFLAorCQkJIFRSQUlMRVJfSUZfRVhJU1RTLCBUUkFJTEVSX0lGX01JU1NJTkcgfTsKKworc3RhdGljIHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwllbnVtIHRyYWlsZXJfaW5mb190eXBlIHR5cGU7Cit9IHRyYWlsZXJfY29uZmlnX2l0ZW1zW10gPSB7CisJeyAia2V5IiwgVFJBSUxFUl9LRVkgfSwKKwl7ICJjb21tYW5kIiwgVFJBSUxFUl9DT01NQU5EIH0sCisJeyAid2hlcmUiLCBUUkFJTEVSX1dIRVJFIH0sCisJeyAiaWZleGlzdHMiLCBUUkFJTEVSX0lGX0VYSVNUUyB9LAorCXsgImlmbWlzc2luZyIsIFRSQUlMRVJfSUZfTUlTU0lORyB9Cit9OworCitzdGF0aWMgaW50IGdpdF90cmFpbGVyX2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKmNvbmZfa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqdHJhaWxlcl9pdGVtLCAqdmFyaWFibGVfbmFtZTsKKworCWlmICghc2tpcF9wcmVmaXgoY29uZl9rZXksICJ0cmFpbGVyLiIsICZ0cmFpbGVyX2l0ZW0pKQorCQlyZXR1cm4gMDsKKworCXZhcmlhYmxlX25hbWUgPSBzdHJyY2hyKHRyYWlsZXJfaXRlbSwgJy4nKTsKKwlpZiAoIXZhcmlhYmxlX25hbWUpIHsKKwkJaWYgKCFzdHJjbXAodHJhaWxlcl9pdGVtLCAid2hlcmUiKSkgeworCQkJaWYgKHRyYWlsZXJfc2V0X3doZXJlKCZkZWZhdWx0X2NvbmZfaW5mby53aGVyZSwKKwkJCQkJICAgICAgdmFsdWUpIDwgMCkKKwkJCQl3YXJuaW5nKF8oInVua25vd24gdmFsdWUgJyVzJyBmb3Iga2V5ICclcyciKSwKKwkJCQkJdmFsdWUsIGNvbmZfa2V5KTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHRyYWlsZXJfaXRlbSwgImlmZXhpc3RzIikpIHsKKwkJCWlmICh0cmFpbGVyX3NldF9pZl9leGlzdHMoJmRlZmF1bHRfY29uZl9pbmZvLmlmX2V4aXN0cywKKwkJCQkJCSAgdmFsdWUpIDwgMCkKKwkJCQl3YXJuaW5nKF8oInVua25vd24gdmFsdWUgJyVzJyBmb3Iga2V5ICclcyciKSwKKwkJCQkJdmFsdWUsIGNvbmZfa2V5KTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHRyYWlsZXJfaXRlbSwgImlmbWlzc2luZyIpKSB7CisJCQlpZiAodHJhaWxlcl9zZXRfaWZfbWlzc2luZygmZGVmYXVsdF9jb25mX2luZm8uaWZfbWlzc2luZywKKwkJCQkJCSAgIHZhbHVlKSA8IDApCisJCQkJd2FybmluZyhfKCJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIiksCisJCQkJCXZhbHVlLCBjb25mX2tleSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0cmFpbGVyX2l0ZW0sICJzZXBhcmF0b3JzIikpIHsKKwkJCXNlcGFyYXRvcnMgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfdHJhaWxlcl9jb25maWcoY29uc3QgY2hhciAqY29uZl9rZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwljb25zdCBjaGFyICp0cmFpbGVyX2l0ZW0sICp2YXJpYWJsZV9uYW1lOworCXN0cnVjdCBhcmdfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgY29uZl9pbmZvICpjb25mOworCWNoYXIgKm5hbWUgPSBOVUxMOworCWVudW0gdHJhaWxlcl9pbmZvX3R5cGUgdHlwZTsKKwlpbnQgaTsKKworCWlmICghc2tpcF9wcmVmaXgoY29uZl9rZXksICJ0cmFpbGVyLiIsICZ0cmFpbGVyX2l0ZW0pKQorCQlyZXR1cm4gMDsKKworCXZhcmlhYmxlX25hbWUgPSBzdHJyY2hyKHRyYWlsZXJfaXRlbSwgJy4nKTsKKwlpZiAoIXZhcmlhYmxlX25hbWUpCisJCXJldHVybiAwOworCisJdmFyaWFibGVfbmFtZSsrOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRyYWlsZXJfY29uZmlnX2l0ZW1zKTsgaSsrKSB7CisJCWlmIChzdHJjbXAodHJhaWxlcl9jb25maWdfaXRlbXNbaV0ubmFtZSwgdmFyaWFibGVfbmFtZSkpCisJCQljb250aW51ZTsKKwkJbmFtZSA9IHhzdHJuZHVwKHRyYWlsZXJfaXRlbSwgIHZhcmlhYmxlX25hbWUgLSB0cmFpbGVyX2l0ZW0gLSAxKTsKKwkJdHlwZSA9IHRyYWlsZXJfY29uZmlnX2l0ZW1zW2ldLnR5cGU7CisJCWJyZWFrOworCX0KKworCWlmICghbmFtZSkKKwkJcmV0dXJuIDA7CisKKwlpdGVtID0gZ2V0X2NvbmZfaXRlbShuYW1lKTsKKwljb25mID0gJml0ZW0tPmNvbmY7CisJZnJlZShuYW1lKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVFJBSUxFUl9LRVk6CisJCWlmIChjb25mLT5rZXkpCisJCQl3YXJuaW5nKF8oIm1vcmUgdGhhbiBvbmUgJXMiKSwgY29uZl9rZXkpOworCQljb25mLT5rZXkgPSB4c3RyZHVwKHZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBUUkFJTEVSX0NPTU1BTkQ6CisJCWlmIChjb25mLT5jb21tYW5kKQorCQkJd2FybmluZyhfKCJtb3JlIHRoYW4gb25lICVzIiksIGNvbmZfa2V5KTsKKwkJY29uZi0+Y29tbWFuZCA9IHhzdHJkdXAodmFsdWUpOworCQlicmVhazsKKwljYXNlIFRSQUlMRVJfV0hFUkU6CisJCWlmICh0cmFpbGVyX3NldF93aGVyZSgmY29uZi0+d2hlcmUsIHZhbHVlKSkKKwkJCXdhcm5pbmcoXygidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIpLCB2YWx1ZSwgY29uZl9rZXkpOworCQlicmVhazsKKwljYXNlIFRSQUlMRVJfSUZfRVhJU1RTOgorCQlpZiAodHJhaWxlcl9zZXRfaWZfZXhpc3RzKCZjb25mLT5pZl9leGlzdHMsIHZhbHVlKSkKKwkJCXdhcm5pbmcoXygidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIpLCB2YWx1ZSwgY29uZl9rZXkpOworCQlicmVhazsKKwljYXNlIFRSQUlMRVJfSUZfTUlTU0lORzoKKwkJaWYgKHRyYWlsZXJfc2V0X2lmX21pc3NpbmcoJmNvbmYtPmlmX21pc3NpbmcsIHZhbHVlKSkKKwkJCXdhcm5pbmcoXygidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIpLCB2YWx1ZSwgY29uZl9rZXkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoInRyYWlsZXIuYzogdW5oYW5kbGVkIHR5cGUgJWQiLCB0eXBlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVuc3VyZV9jb25maWd1cmVkKHZvaWQpCit7CisJaWYgKGNvbmZpZ3VyZWQpCisJCXJldHVybjsKKworCS8qIERlZmF1bHQgY29uZmlnIG11c3QgYmUgc2V0dXAgZmlyc3QgKi8KKwlkZWZhdWx0X2NvbmZfaW5mby53aGVyZSA9IFdIRVJFX0VORDsKKwlkZWZhdWx0X2NvbmZfaW5mby5pZl9leGlzdHMgPSBFWElTVFNfQUREX0lGX0RJRkZFUkVOVF9ORUlHSEJPUjsKKwlkZWZhdWx0X2NvbmZfaW5mby5pZl9taXNzaW5nID0gTUlTU0lOR19BREQ7CisJZ2l0X2NvbmZpZyhnaXRfdHJhaWxlcl9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJZ2l0X2NvbmZpZyhnaXRfdHJhaWxlcl9jb25maWcsIE5VTEwpOworCWNvbmZpZ3VyZWQgPSAxOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdG9rZW5fZnJvbV9pdGVtKHN0cnVjdCBhcmdfaXRlbSAqaXRlbSwgY2hhciAqdG9rKQoreworCWlmIChpdGVtLT5jb25mLmtleSkKKwkJcmV0dXJuIGl0ZW0tPmNvbmYua2V5OworCWlmICh0b2spCisJCXJldHVybiB0b2s7CisJcmV0dXJuIGl0ZW0tPmNvbmYubmFtZTsKK30KKworc3RhdGljIGludCB0b2tlbl9tYXRjaGVzX2l0ZW0oY29uc3QgY2hhciAqdG9rLCBzdHJ1Y3QgYXJnX2l0ZW0gKml0ZW0sIHNpemVfdCB0b2tfbGVuKQoreworCWlmICghc3RybmNhc2VjbXAodG9rLCBpdGVtLT5jb25mLm5hbWUsIHRva19sZW4pKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gaXRlbS0+Y29uZi5rZXkgPyAhc3RybmNhc2VjbXAodG9rLCBpdGVtLT5jb25mLmtleSwgdG9rX2xlbikgOiAwOworfQorCisvKgorICogSWYgdGhlIGdpdmVuIGxpbmUgaXMgb2YgdGhlIGZvcm0KKyAqICI8dG9rZW4+PG9wdGlvbmFsIHdoaXRlc3BhY2U+PHNlcGFyYXRvcj4uLi4iIG9yICI8c2VwYXJhdG9yPi4uLiIsIHJldHVybiB0aGUKKyAqIGxvY2F0aW9uIG9mIHRoZSBzZXBhcmF0b3IuIE90aGVyd2lzZSwgcmV0dXJuIC0xLiAgVGhlIG9wdGlvbmFsIHdoaXRlc3BhY2UKKyAqIGlzIGFsbG93ZWQgdGhlcmUgcHJpbWFyaWx5IHRvIGFsbG93IHRoaW5ncyBsaWtlICJCdWcgIzQzIiB3aGVyZSA8dG9rZW4+IGlzCisgKiAiQnVnIiBhbmQgPHNlcGFyYXRvcj4gaXMgIiMiLgorICoKKyAqIFRoZSBzZXBhcmF0b3Itc3RhcnRzLWxpbmUgY2FzZSAoaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiByZXR1cm5zIDApIGlzCisgKiBkaXN0aW5ndWlzaGVkIGZyb20gdGhlIG5vbi13ZWxsLWZvcm1lZC1saW5lIGNhc2UgKGluIHdoaWNoIHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMgLTEpIGJlY2F1c2Ugc29tZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gbmVlZCBzdWNoIGEgZGlzdGluY3Rpb24uCisgKi8KK3N0YXRpYyBzc2l6ZV90IGZpbmRfc2VwYXJhdG9yKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKnNlcGFyYXRvcnMpCit7CisJaW50IHdoaXRlc3BhY2VfZm91bmQgPSAwOworCWNvbnN0IGNoYXIgKmM7CisJZm9yIChjID0gbGluZTsgKmM7IGMrKykgeworCQlpZiAoc3RyY2hyKHNlcGFyYXRvcnMsICpjKSkKKwkJCXJldHVybiBjIC0gbGluZTsKKwkJaWYgKCF3aGl0ZXNwYWNlX2ZvdW5kICYmIChpc2FsbnVtKCpjKSB8fCAqYyA9PSAnLScpKQorCQkJY29udGludWU7CisJCWlmIChjICE9IGxpbmUgJiYgKCpjID09ICcgJyB8fCAqYyA9PSAnXHQnKSkgeworCQkJd2hpdGVzcGFjZV9mb3VuZCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKgorICogT2J0YWluIHRoZSB0b2tlbiwgdmFsdWUsIGFuZCBjb25mIGZyb20gdGhlIGdpdmVuIHRyYWlsZXIuCisgKgorICogc2VwYXJhdG9yX3BvcyBtdXN0IG5vdCBiZSAwLCBzaW5jZSB0aGUgdG9rZW4gY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZy4KKyAqCisgKiBJZiBzZXBhcmF0b3JfcG9zIGlzIC0xLCBpbnRlcnByZXQgdGhlIHdob2xlIHRyYWlsZXIgYXMgYSB0b2tlbi4KKyAqLworc3RhdGljIHZvaWQgcGFyc2VfdHJhaWxlcihzdHJ1Y3Qgc3RyYnVmICp0b2ssIHN0cnVjdCBzdHJidWYgKnZhbCwKKwkJCSBjb25zdCBzdHJ1Y3QgY29uZl9pbmZvICoqY29uZiwgY29uc3QgY2hhciAqdHJhaWxlciwKKwkJCSBzc2l6ZV90IHNlcGFyYXRvcl9wb3MpCit7CisJc3RydWN0IGFyZ19pdGVtICppdGVtOworCXNpemVfdCB0b2tfbGVuOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKworCWlmIChzZXBhcmF0b3JfcG9zICE9IC0xKSB7CisJCXN0cmJ1Zl9hZGQodG9rLCB0cmFpbGVyLCBzZXBhcmF0b3JfcG9zKTsKKwkJc3RyYnVmX3RyaW0odG9rKTsKKwkJc3RyYnVmX2FkZHN0cih2YWwsIHRyYWlsZXIgKyBzZXBhcmF0b3JfcG9zICsgMSk7CisJCXN0cmJ1Zl90cmltKHZhbCk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZHN0cih0b2ssIHRyYWlsZXIpOworCQlzdHJidWZfdHJpbSh0b2spOworCX0KKworCS8qIExvb2t1cCBpZiB0aGUgdG9rZW4gbWF0Y2hlcyBzb21ldGhpbmcgaW4gdGhlIGNvbmZpZyAqLworCXRva19sZW4gPSB0b2tlbl9sZW5fd2l0aG91dF9zZXBhcmF0b3IodG9rLT5idWYsIHRvay0+bGVuKTsKKwlpZiAoY29uZikKKwkJKmNvbmYgPSAmZGVmYXVsdF9jb25mX2luZm87CisJbGlzdF9mb3JfZWFjaChwb3MsICZjb25mX2hlYWQpIHsKKwkJaXRlbSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgYXJnX2l0ZW0sIGxpc3QpOworCQlpZiAodG9rZW5fbWF0Y2hlc19pdGVtKHRvay0+YnVmLCBpdGVtLCB0b2tfbGVuKSkgeworCQkJY2hhciAqdG9rX2J1ZiA9IHN0cmJ1Zl9kZXRhY2godG9rLCBOVUxMKTsKKwkJCWlmIChjb25mKQorCQkJCSpjb25mID0gJml0ZW0tPmNvbmY7CisJCQlzdHJidWZfYWRkc3RyKHRvaywgdG9rZW5fZnJvbV9pdGVtKGl0ZW0sIHRva19idWYpKTsKKwkJCWZyZWUodG9rX2J1Zik7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCB0cmFpbGVyX2l0ZW0gKmFkZF90cmFpbGVyX2l0ZW0oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgY2hhciAqdG9rLAorCQkJCQkgICAgIGNoYXIgKnZhbCkKK3sKKwlzdHJ1Y3QgdHJhaWxlcl9pdGVtICpuZXdfaXRlbSA9IHhjYWxsb2Moc2l6ZW9mKCpuZXdfaXRlbSksIDEpOworCW5ld19pdGVtLT50b2tlbiA9IHRvazsKKwluZXdfaXRlbS0+dmFsdWUgPSB2YWw7CisJbGlzdF9hZGRfdGFpbCgmbmV3X2l0ZW0tPmxpc3QsIGhlYWQpOworCXJldHVybiBuZXdfaXRlbTsKK30KKworc3RhdGljIHZvaWQgYWRkX2FyZ19pdGVtKHN0cnVjdCBsaXN0X2hlYWQgKmFyZ19oZWFkLCBjaGFyICp0b2ssIGNoYXIgKnZhbCwKKwkJCSBjb25zdCBzdHJ1Y3QgY29uZl9pbmZvICpjb25mLAorCQkJIGNvbnN0IHN0cnVjdCBuZXdfdHJhaWxlcl9pdGVtICpuZXdfdHJhaWxlcl9pdGVtKQoreworCXN0cnVjdCBhcmdfaXRlbSAqbmV3X2l0ZW0gPSB4Y2FsbG9jKHNpemVvZigqbmV3X2l0ZW0pLCAxKTsKKwluZXdfaXRlbS0+dG9rZW4gPSB0b2s7CisJbmV3X2l0ZW0tPnZhbHVlID0gdmFsOworCWR1cGxpY2F0ZV9jb25mKCZuZXdfaXRlbS0+Y29uZiwgY29uZik7CisJaWYgKG5ld190cmFpbGVyX2l0ZW0pIHsKKwkJaWYgKG5ld190cmFpbGVyX2l0ZW0tPndoZXJlICE9IFdIRVJFX0RFRkFVTFQpCisJCQluZXdfaXRlbS0+Y29uZi53aGVyZSA9IG5ld190cmFpbGVyX2l0ZW0tPndoZXJlOworCQlpZiAobmV3X3RyYWlsZXJfaXRlbS0+aWZfZXhpc3RzICE9IEVYSVNUU19ERUZBVUxUKQorCQkJbmV3X2l0ZW0tPmNvbmYuaWZfZXhpc3RzID0gbmV3X3RyYWlsZXJfaXRlbS0+aWZfZXhpc3RzOworCQlpZiAobmV3X3RyYWlsZXJfaXRlbS0+aWZfbWlzc2luZyAhPSBNSVNTSU5HX0RFRkFVTFQpCisJCQluZXdfaXRlbS0+Y29uZi5pZl9taXNzaW5nID0gbmV3X3RyYWlsZXJfaXRlbS0+aWZfbWlzc2luZzsKKwl9CisJbGlzdF9hZGRfdGFpbCgmbmV3X2l0ZW0tPmxpc3QsIGFyZ19oZWFkKTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19jb21tYW5kX2xpbmVfYXJncyhzdHJ1Y3QgbGlzdF9oZWFkICphcmdfaGVhZCwKKwkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpuZXdfdHJhaWxlcl9oZWFkKQoreworCXN0cnVjdCBhcmdfaXRlbSAqaXRlbTsKKwlzdHJ1Y3Qgc3RyYnVmIHRvayA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgdmFsID0gU1RSQlVGX0lOSVQ7CisJY29uc3Qgc3RydWN0IGNvbmZfaW5mbyAqY29uZjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisKKwkvKgorCSAqIEluIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsICc9JyBpcyBhY2NlcHRlZCAoaW4gYWRkaXRpb24gdG8gdGhlCisJICogc2VwYXJhdG9ycyB0aGF0IGFyZSBkZWZpbmVkKS4KKwkgKi8KKwljaGFyICpjbF9zZXBhcmF0b3JzID0geHN0cmZtdCgiPSVzIiwgc2VwYXJhdG9ycyk7CisKKwkvKiBBZGQgYW4gYXJnIGl0ZW0gZm9yIGVhY2ggY29uZmlndXJlZCB0cmFpbGVyIHdpdGggYSBjb21tYW5kICovCisJbGlzdF9mb3JfZWFjaChwb3MsICZjb25mX2hlYWQpIHsKKwkJaXRlbSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgYXJnX2l0ZW0sIGxpc3QpOworCQlpZiAoaXRlbS0+Y29uZi5jb21tYW5kKQorCQkJYWRkX2FyZ19pdGVtKGFyZ19oZWFkLAorCQkJCSAgICAgeHN0cmR1cCh0b2tlbl9mcm9tX2l0ZW0oaXRlbSwgTlVMTCkpLAorCQkJCSAgICAgeHN0cmR1cCgiIiksCisJCQkJICAgICAmaXRlbS0+Y29uZiwgTlVMTCk7CisJfQorCisJLyogQWRkIGFuIGFyZyBpdGVtIGZvciBlYWNoIHRyYWlsZXIgb24gdGhlIGNvbW1hbmQgbGluZSAqLworCWxpc3RfZm9yX2VhY2gocG9zLCBuZXdfdHJhaWxlcl9oZWFkKSB7CisJCXN0cnVjdCBuZXdfdHJhaWxlcl9pdGVtICp0ciA9CisJCQlsaXN0X2VudHJ5KHBvcywgc3RydWN0IG5ld190cmFpbGVyX2l0ZW0sIGxpc3QpOworCQlzc2l6ZV90IHNlcGFyYXRvcl9wb3MgPSBmaW5kX3NlcGFyYXRvcih0ci0+dGV4dCwgY2xfc2VwYXJhdG9ycyk7CisKKwkJaWYgKHNlcGFyYXRvcl9wb3MgPT0gMCkgeworCQkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZHN0cigmc2IsIHRyLT50ZXh0KTsKKwkJCXN0cmJ1Zl90cmltKCZzYik7CisJCQllcnJvcihfKCJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIiksCisJCQkgICAgICAoaW50KSBzYi5sZW4sIHNiLmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQl9IGVsc2UgeworCQkJcGFyc2VfdHJhaWxlcigmdG9rLCAmdmFsLCAmY29uZiwgdHItPnRleHQsCisJCQkJICAgICAgc2VwYXJhdG9yX3Bvcyk7CisJCQlhZGRfYXJnX2l0ZW0oYXJnX2hlYWQsCisJCQkJICAgICBzdHJidWZfZGV0YWNoKCZ0b2ssIE5VTEwpLAorCQkJCSAgICAgc3RyYnVmX2RldGFjaCgmdmFsLCBOVUxMKSwKKwkJCQkgICAgIGNvbmYsIHRyKTsKKwkJfQorCX0KKworCWZyZWUoY2xfc2VwYXJhdG9ycyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfaW5wdXRfZmlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZmlsZSkKK3sKKwlpZiAoZmlsZSkgeworCQlpZiAoc3RyYnVmX3JlYWRfZmlsZShzYiwgZmlsZSwgMCkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUgJyVzJyIpLCBmaWxlKTsKKwl9IGVsc2UgeworCQlpZiAoc3RyYnVmX3JlYWQoc2IsIGZpbGVubyhzdGRpbiksIDApIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIikpOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKm5leHRfbGluZShjb25zdCBjaGFyICpzdHIpCit7CisJY29uc3QgY2hhciAqbmwgPSBzdHJjaHJudWwoc3RyLCAnXG4nKTsKKwlyZXR1cm4gbmwgKyAhISpubDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRoZSBsYXN0IGxpbmUuIElmIGxlbiBpcyAwLCByZXR1cm4gLTEuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGxhc3RfbGluZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3NpemVfdCBpOworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIC0xOworCWlmIChsZW4gPT0gMSkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBTa2lwIHRoZSBsYXN0IGNoYXJhY3RlciAoaW4gYWRkaXRpb24gdG8gdGhlIG51bGwgdGVybWluYXRvciksCisJICogYmVjYXVzZSBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaXMgYSBuZXdsaW5lLCBpdCBpcyBjb25zaWRlcmVkIGFzIHBhcnQKKwkgKiBvZiB0aGUgbGFzdCBsaW5lIGFueXdheS4KKwkgKi8KKwlpID0gbGVuIC0gMjsKKworCWZvciAoOyBpID49IDA7IGktLSkgeworCQlpZiAoYnVmW2ldID09ICdcbicpCisJCQlyZXR1cm4gaSArIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIHBhdGNoIG9yIHRoZSBsZW5ndGggb2Ygc3RyIGlmIHRoZXJlCisgKiBpcyBubyBwYXRjaCBpbiB0aGUgbWVzc2FnZS4KKyAqLworc3RhdGljIHNpemVfdCBmaW5kX3BhdGNoX3N0YXJ0KGNvbnN0IGNoYXIgKnN0cikKK3sKKwljb25zdCBjaGFyICpzOworCisJZm9yIChzID0gc3RyOyAqczsgcyA9IG5leHRfbGluZShzKSkgeworCQljb25zdCBjaGFyICp2OworCisJCWlmIChza2lwX3ByZWZpeChzLCAiLS0tIiwgJnYpICYmIGlzc3BhY2UoKnYpKQorCQkJcmV0dXJuIHMgLSBzdHI7CisJfQorCisJcmV0dXJuIHMgLSBzdHI7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCB0cmFpbGVyIGxpbmUgb3IgbGVuIGlmIHRoZXJlIGFyZSBubworICogdHJhaWxlcnMuCisgKi8KK3N0YXRpYyBzaXplX3QgZmluZF90cmFpbGVyX3N0YXJ0KGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwljb25zdCBjaGFyICpzOworCXNzaXplX3QgZW5kX29mX3RpdGxlLCBsOworCWludCBvbmx5X3NwYWNlcyA9IDE7CisJaW50IHJlY29nbml6ZWRfcHJlZml4ID0gMCwgdHJhaWxlcl9saW5lcyA9IDAsIG5vbl90cmFpbGVyX2xpbmVzID0gMDsKKwkvKgorCSAqIE51bWJlciBvZiBwb3NzaWJsZSBjb250aW51YXRpb24gbGluZXMgZW5jb3VudGVyZWQuIFRoaXMgd2lsbCBiZQorCSAqIHJlc2V0IHRvIDAgaWYgd2UgZW5jb3VudGVyIGEgdHJhaWxlciAoc2luY2UgdGhvc2UgbGluZXMgYXJlIHRvIGJlCisJICogY29uc2lkZXJlZCBjb250aW51YXRpb25zIG9mIHRoYXQgdHJhaWxlciksIGFuZCBhZGRlZCB0bworCSAqIG5vbl90cmFpbGVyX2xpbmVzIGlmIHdlIGVuY291bnRlciBhIG5vbi10cmFpbGVyIChzaW5jZSB0aG9zZSBsaW5lcworCSAqIGFyZSB0byBiZSBjb25zaWRlcmVkIG5vbi10cmFpbGVycykuCisJICovCisJaW50IHBvc3NpYmxlX2NvbnRpbnVhdGlvbl9saW5lcyA9IDA7CisKKwkvKiBUaGUgZmlyc3QgcGFyYWdyYXBoIGlzIHRoZSB0aXRsZSBhbmQgY2Fubm90IGJlIHRyYWlsZXJzICovCisJZm9yIChzID0gYnVmOyBzIDwgYnVmICsgbGVuOyBzID0gbmV4dF9saW5lKHMpKSB7CisJCWlmIChzWzBdID09IGNvbW1lbnRfbGluZV9jaGFyKQorCQkJY29udGludWU7CisJCWlmIChpc19ibGFua19saW5lKHMpKQorCQkJYnJlYWs7CisJfQorCWVuZF9vZl90aXRsZSA9IHMgLSBidWY7CisKKwkvKgorCSAqIEdldCB0aGUgc3RhcnQgb2YgdGhlIHRyYWlsZXJzIGJ5IGxvb2tpbmcgc3RhcnRpbmcgZnJvbSB0aGUgZW5kIGZvciBhCisJICogYmxhbmsgbGluZSBiZWZvcmUgYSBzZXQgb2Ygbm9uLWJsYW5rIGxpbmVzIHRoYXQgKGkpIGFyZSBhbGwKKwkgKiB0cmFpbGVycywgb3IgKGlpKSBjb250YWlucyBhdCBsZWFzdCBvbmUgR2l0LWdlbmVyYXRlZCB0cmFpbGVyIGFuZAorCSAqIGNvbnNpc3RzIG9mIGF0IGxlYXN0IDI1JSB0cmFpbGVycy4KKwkgKi8KKwlmb3IgKGwgPSBsYXN0X2xpbmUoYnVmLCBsZW4pOworCSAgICAgbCA+PSBlbmRfb2ZfdGl0bGU7CisJICAgICBsID0gbGFzdF9saW5lKGJ1ZiwgbCkpIHsKKwkJY29uc3QgY2hhciAqYm9sID0gYnVmICsgbDsKKwkJY29uc3QgY2hhciAqKnA7CisJCXNzaXplX3Qgc2VwYXJhdG9yX3BvczsKKworCQlpZiAoYm9sWzBdID09IGNvbW1lbnRfbGluZV9jaGFyKSB7CisJCQlub25fdHJhaWxlcl9saW5lcyArPSBwb3NzaWJsZV9jb250aW51YXRpb25fbGluZXM7CisJCQlwb3NzaWJsZV9jb250aW51YXRpb25fbGluZXMgPSAwOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGlzX2JsYW5rX2xpbmUoYm9sKSkgeworCQkJaWYgKG9ubHlfc3BhY2VzKQorCQkJCWNvbnRpbnVlOworCQkJbm9uX3RyYWlsZXJfbGluZXMgKz0gcG9zc2libGVfY29udGludWF0aW9uX2xpbmVzOworCQkJaWYgKHJlY29nbml6ZWRfcHJlZml4ICYmCisJCQkgICAgdHJhaWxlcl9saW5lcyAqIDMgPj0gbm9uX3RyYWlsZXJfbGluZXMpCisJCQkJcmV0dXJuIG5leHRfbGluZShib2wpIC0gYnVmOworCQkJZWxzZSBpZiAodHJhaWxlcl9saW5lcyAmJiAhbm9uX3RyYWlsZXJfbGluZXMpCisJCQkJcmV0dXJuIG5leHRfbGluZShib2wpIC0gYnVmOworCQkJcmV0dXJuIGxlbjsKKwkJfQorCQlvbmx5X3NwYWNlcyA9IDA7CisKKwkJZm9yIChwID0gZ2l0X2dlbmVyYXRlZF9wcmVmaXhlczsgKnA7IHArKykgeworCQkJaWYgKHN0YXJ0c193aXRoKGJvbCwgKnApKSB7CisJCQkJdHJhaWxlcl9saW5lcysrOworCQkJCXBvc3NpYmxlX2NvbnRpbnVhdGlvbl9saW5lcyA9IDA7CisJCQkJcmVjb2duaXplZF9wcmVmaXggPSAxOworCQkJCWdvdG8gY29udGludWVfb3V0ZXJfbG9vcDsKKwkJCX0KKwkJfQorCisJCXNlcGFyYXRvcl9wb3MgPSBmaW5kX3NlcGFyYXRvcihib2wsIHNlcGFyYXRvcnMpOworCQlpZiAoc2VwYXJhdG9yX3BvcyA+PSAxICYmICFpc3NwYWNlKGJvbFswXSkpIHsKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKworCQkJdHJhaWxlcl9saW5lcysrOworCQkJcG9zc2libGVfY29udGludWF0aW9uX2xpbmVzID0gMDsKKwkJCWlmIChyZWNvZ25pemVkX3ByZWZpeCkKKwkJCQljb250aW51ZTsKKwkJCWxpc3RfZm9yX2VhY2gocG9zLCAmY29uZl9oZWFkKSB7CisJCQkJc3RydWN0IGFyZ19pdGVtICppdGVtOworCQkJCWl0ZW0gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGFyZ19pdGVtLCBsaXN0KTsKKwkJCQlpZiAodG9rZW5fbWF0Y2hlc19pdGVtKGJvbCwgaXRlbSwKKwkJCQkJCSAgICAgICBzZXBhcmF0b3JfcG9zKSkgeworCQkJCQlyZWNvZ25pemVkX3ByZWZpeCA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChpc3NwYWNlKGJvbFswXSkpCisJCQlwb3NzaWJsZV9jb250aW51YXRpb25fbGluZXMrKzsKKwkJZWxzZSB7CisJCQlub25fdHJhaWxlcl9saW5lcysrOworCQkJbm9uX3RyYWlsZXJfbGluZXMgKz0gcG9zc2libGVfY29udGludWF0aW9uX2xpbmVzOworCQkJcG9zc2libGVfY29udGludWF0aW9uX2xpbmVzID0gMDsKKwkJfQorY29udGludWVfb3V0ZXJfbG9vcDoKKwkJOworCX0KKworCXJldHVybiBsZW47Cit9CisKKy8qIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGVuZCBvZiB0aGUgdHJhaWxlcnMuICovCitzdGF0aWMgc2l6ZV90IGZpbmRfdHJhaWxlcl9lbmQoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXJldHVybiBsZW4gLSBpZ25vcmVfbm9uX3RyYWlsZXIoYnVmLCBsZW4pOworfQorCitzdGF0aWMgaW50IGVuZHNfd2l0aF9ibGFua19saW5lKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzc2l6ZV90IGxsID0gbGFzdF9saW5lKGJ1ZiwgbGVuKTsKKwlpZiAobGwgPCAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gaXNfYmxhbmtfbGluZShidWYgKyBsbCk7Cit9CisKK3N0YXRpYyB2b2lkIHVuZm9sZF92YWx1ZShzdHJ1Y3Qgc3RyYnVmICp2YWwpCit7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwlzaXplX3QgaTsKKworCXN0cmJ1Zl9ncm93KCZvdXQsIHZhbC0+bGVuKTsKKwlpID0gMDsKKwl3aGlsZSAoaSA8IHZhbC0+bGVuKSB7CisJCWNoYXIgYyA9IHZhbC0+YnVmW2krK107CisJCWlmIChjID09ICdcbicpIHsKKwkJCS8qIENvbGxhcHNlIGNvbnRpbnVhdGlvbiBkb3duIHRvIGEgc2luZ2xlIHNwYWNlLiAqLworCQkJd2hpbGUgKGkgPCB2YWwtPmxlbiAmJiBpc3NwYWNlKHZhbC0+YnVmW2ldKSkKKwkJCQlpKys7CisJCQlzdHJidWZfYWRkY2goJm91dCwgJyAnKTsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9hZGRjaCgmb3V0LCBjKTsKKwkJfQorCX0KKworCS8qIEVtcHR5IGxpbmVzIG1heSBoYXZlIGxlZnQgdXMgd2l0aCB3aGl0ZXNwYWNlIGNydWZ0IGF0IHRoZSBlZGdlcyAqLworCXN0cmJ1Zl90cmltKCZvdXQpOworCisJLyogb3V0cHV0IGdvZXMgYmFjayB0byB2YWwgYXMgaWYgd2UgbW9kaWZpZWQgaXQgaW4tcGxhY2UgKi8KKwlzdHJidWZfc3dhcCgmb3V0LCB2YWwpOworCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworfQorCitzdGF0aWMgc2l6ZV90IHByb2Nlc3NfaW5wdXRfZmlsZShGSUxFICpvdXRmaWxlLAorCQkJCSBjb25zdCBjaGFyICpzdHIsCisJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJIGNvbnN0IHN0cnVjdCBwcm9jZXNzX3RyYWlsZXJfb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgdHJhaWxlcl9pbmZvIGluZm87CisJc3RydWN0IHN0cmJ1ZiB0b2sgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHZhbCA9IFNUUkJVRl9JTklUOworCXNpemVfdCBpOworCisJdHJhaWxlcl9pbmZvX2dldCgmaW5mbywgc3RyLCBvcHRzKTsKKworCS8qIFByaW50IGxpbmVzIGJlZm9yZSB0aGUgdHJhaWxlcnMgYXMgaXMgKi8KKwlpZiAoIW9wdHMtPm9ubHlfdHJhaWxlcnMpCisJCWZ3cml0ZShzdHIsIDEsIGluZm8udHJhaWxlcl9zdGFydCAtIHN0ciwgb3V0ZmlsZSk7CisKKwlpZiAoIW9wdHMtPm9ubHlfdHJhaWxlcnMgJiYgIWluZm8uYmxhbmtfbGluZV9iZWZvcmVfdHJhaWxlcikKKwkJZnByaW50ZihvdXRmaWxlLCAiXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLnRyYWlsZXJfbnI7IGkrKykgeworCQlpbnQgc2VwYXJhdG9yX3BvczsKKwkJY2hhciAqdHJhaWxlciA9IGluZm8udHJhaWxlcnNbaV07CisJCWlmICh0cmFpbGVyWzBdID09IGNvbW1lbnRfbGluZV9jaGFyKQorCQkJY29udGludWU7CisJCXNlcGFyYXRvcl9wb3MgPSBmaW5kX3NlcGFyYXRvcih0cmFpbGVyLCBzZXBhcmF0b3JzKTsKKwkJaWYgKHNlcGFyYXRvcl9wb3MgPj0gMSkgeworCQkJcGFyc2VfdHJhaWxlcigmdG9rLCAmdmFsLCBOVUxMLCB0cmFpbGVyLAorCQkJCSAgICAgIHNlcGFyYXRvcl9wb3MpOworCQkJaWYgKG9wdHMtPnVuZm9sZCkKKwkJCQl1bmZvbGRfdmFsdWUoJnZhbCk7CisJCQlhZGRfdHJhaWxlcl9pdGVtKGhlYWQsCisJCQkJCSBzdHJidWZfZGV0YWNoKCZ0b2ssIE5VTEwpLAorCQkJCQkgc3RyYnVmX2RldGFjaCgmdmFsLCBOVUxMKSk7CisJCX0gZWxzZSBpZiAoIW9wdHMtPm9ubHlfdHJhaWxlcnMpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnZhbCwgdHJhaWxlcik7CisJCQlzdHJidWZfc3RyaXBfc3VmZml4KCZ2YWwsICJcbiIpOworCQkJYWRkX3RyYWlsZXJfaXRlbShoZWFkLAorCQkJCQkgTlVMTCwKKwkJCQkJIHN0cmJ1Zl9kZXRhY2goJnZhbCwgTlVMTCkpOworCQl9CisJfQorCisJdHJhaWxlcl9pbmZvX3JlbGVhc2UoJmluZm8pOworCisJcmV0dXJuIGluZm8udHJhaWxlcl9lbmQgLSBzdHI7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfYWxsKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqcDsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBwLCBoZWFkKSB7CisJCWxpc3RfZGVsKHBvcyk7CisJCWZyZWVfdHJhaWxlcl9pdGVtKGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdHJhaWxlcl9pdGVtLCBsaXN0KSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHRlbXBmaWxlICp0cmFpbGVyc190ZW1wZmlsZTsKKworc3RhdGljIEZJTEUgKmNyZWF0ZV9pbl9wbGFjZV90ZW1wZmlsZShjb25zdCBjaGFyICpmaWxlKQoreworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCBzdHJidWYgZmlsZW5hbWVfdGVtcGxhdGUgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICp0YWlsOworCUZJTEUgKm91dGZpbGU7CisKKwlpZiAoc3RhdChmaWxlLCAmc3QpKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IHN0YXQgJXMiKSwgZmlsZSk7CisJaWYgKCFTX0lTUkVHKHN0LnN0X21vZGUpKQorCQlkaWUoXygiZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUiKSwgZmlsZSk7CisJaWYgKCEoc3Quc3RfbW9kZSAmIFNfSVdVU1IpKQorCQlkaWUoXygiZmlsZSAlcyBpcyBub3Qgd3JpdGFibGUgYnkgdXNlciIpLCBmaWxlKTsKKworCS8qIENyZWF0ZSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIG9yaWdpbmFsICovCisJdGFpbCA9IHN0cnJjaHIoZmlsZSwgJy8nKTsKKwlpZiAodGFpbCAhPSBOVUxMKQorCQlzdHJidWZfYWRkKCZmaWxlbmFtZV90ZW1wbGF0ZSwgZmlsZSwgdGFpbCAtIGZpbGUgKyAxKTsKKwlzdHJidWZfYWRkc3RyKCZmaWxlbmFtZV90ZW1wbGF0ZSwgImdpdC1pbnRlcnByZXQtdHJhaWxlcnMtWFhYWFhYIik7CisKKwl0cmFpbGVyc190ZW1wZmlsZSA9IHhta3NfdGVtcGZpbGVfbShmaWxlbmFtZV90ZW1wbGF0ZS5idWYsIHN0LnN0X21vZGUpOworCXN0cmJ1Zl9yZWxlYXNlKCZmaWxlbmFtZV90ZW1wbGF0ZSk7CisJb3V0ZmlsZSA9IGZkb3Blbl90ZW1wZmlsZSh0cmFpbGVyc190ZW1wZmlsZSwgInciKTsKKwlpZiAoIW91dGZpbGUpCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiB0ZW1wb3JhcnkgZmlsZSIpKTsKKworCXJldHVybiBvdXRmaWxlOworfQorCit2b2lkIHByb2Nlc3NfdHJhaWxlcnMoY29uc3QgY2hhciAqZmlsZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHByb2Nlc3NfdHJhaWxlcl9vcHRpb25zICpvcHRzLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpuZXdfdHJhaWxlcl9oZWFkKQoreworCUxJU1RfSEVBRChoZWFkKTsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IHRyYWlsZXJfZW5kOworCUZJTEUgKm91dGZpbGUgPSBzdGRvdXQ7CisKKwllbnN1cmVfY29uZmlndXJlZCgpOworCisJcmVhZF9pbnB1dF9maWxlKCZzYiwgZmlsZSk7CisKKwlpZiAob3B0cy0+aW5fcGxhY2UpCisJCW91dGZpbGUgPSBjcmVhdGVfaW5fcGxhY2VfdGVtcGZpbGUoZmlsZSk7CisKKwkvKiBQcmludCB0aGUgbGluZXMgYmVmb3JlIHRoZSB0cmFpbGVycyAqLworCXRyYWlsZXJfZW5kID0gcHJvY2Vzc19pbnB1dF9maWxlKG91dGZpbGUsIHNiLmJ1ZiwgJmhlYWQsIG9wdHMpOworCisJaWYgKCFvcHRzLT5vbmx5X2lucHV0KSB7CisJCUxJU1RfSEVBRChhcmdfaGVhZCk7CisJCXByb2Nlc3NfY29tbWFuZF9saW5lX2FyZ3MoJmFyZ19oZWFkLCBuZXdfdHJhaWxlcl9oZWFkKTsKKwkJcHJvY2Vzc190cmFpbGVyc19saXN0cygmaGVhZCwgJmFyZ19oZWFkKTsKKwl9CisKKwlwcmludF9hbGwob3V0ZmlsZSwgJmhlYWQsIG9wdHMpOworCisJZnJlZV9hbGwoJmhlYWQpOworCisJLyogUHJpbnQgdGhlIGxpbmVzIGFmdGVyIHRoZSB0cmFpbGVycyBhcyBpcyAqLworCWlmICghb3B0cy0+b25seV90cmFpbGVycykKKwkJZndyaXRlKHNiLmJ1ZiArIHRyYWlsZXJfZW5kLCAxLCBzYi5sZW4gLSB0cmFpbGVyX2VuZCwgb3V0ZmlsZSk7CisKKwlpZiAob3B0cy0+aW5fcGxhY2UpCisJCWlmIChyZW5hbWVfdGVtcGZpbGUoJnRyYWlsZXJzX3RlbXBmaWxlLCBmaWxlKSkKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIiksIGZpbGUpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKwordm9pZCB0cmFpbGVyX2luZm9fZ2V0KHN0cnVjdCB0cmFpbGVyX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKnN0ciwKKwkJICAgICAgY29uc3Qgc3RydWN0IHByb2Nlc3NfdHJhaWxlcl9vcHRpb25zICpvcHRzKQoreworCWludCBwYXRjaF9zdGFydCwgdHJhaWxlcl9lbmQsIHRyYWlsZXJfc3RhcnQ7CisJc3RydWN0IHN0cmJ1ZiAqKnRyYWlsZXJfbGluZXMsICoqcHRyOworCWNoYXIgKip0cmFpbGVyX3N0cmluZ3MgPSBOVUxMOworCXNpemVfdCBuciA9IDAsIGFsbG9jID0gMDsKKwljaGFyICoqbGFzdCA9IE5VTEw7CisKKwllbnN1cmVfY29uZmlndXJlZCgpOworCisJaWYgKG9wdHMtPm5vX2RpdmlkZXIpCisJCXBhdGNoX3N0YXJ0ID0gc3RybGVuKHN0cik7CisJZWxzZQorCQlwYXRjaF9zdGFydCA9IGZpbmRfcGF0Y2hfc3RhcnQoc3RyKTsKKworCXRyYWlsZXJfZW5kID0gZmluZF90cmFpbGVyX2VuZChzdHIsIHBhdGNoX3N0YXJ0KTsKKwl0cmFpbGVyX3N0YXJ0ID0gZmluZF90cmFpbGVyX3N0YXJ0KHN0ciwgdHJhaWxlcl9lbmQpOworCisJdHJhaWxlcl9saW5lcyA9IHN0cmJ1Zl9zcGxpdF9idWYoc3RyICsgdHJhaWxlcl9zdGFydCwKKwkJCQkJIHRyYWlsZXJfZW5kIC0gdHJhaWxlcl9zdGFydCwKKwkJCQkJICdcbicsCisJCQkJCSAwKTsKKwlmb3IgKHB0ciA9IHRyYWlsZXJfbGluZXM7ICpwdHI7IHB0cisrKSB7CisJCWlmIChsYXN0ICYmIGlzc3BhY2UoKCpwdHIpLT5idWZbMF0pKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJidWZfYXR0YWNoKCZzYiwgKmxhc3QsIHN0cmxlbigqbGFzdCksIHN0cmxlbigqbGFzdCkpOworCQkJc3RyYnVmX2FkZGJ1Zigmc2IsICpwdHIpOworCQkJKmxhc3QgPSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7CisJCQljb250aW51ZTsKKwkJfQorCQlBTExPQ19HUk9XKHRyYWlsZXJfc3RyaW5ncywgbnIgKyAxLCBhbGxvYyk7CisJCXRyYWlsZXJfc3RyaW5nc1tucl0gPSBzdHJidWZfZGV0YWNoKCpwdHIsIE5VTEwpOworCQlsYXN0ID0gZmluZF9zZXBhcmF0b3IodHJhaWxlcl9zdHJpbmdzW25yXSwgc2VwYXJhdG9ycykgPj0gMQorCQkJPyAmdHJhaWxlcl9zdHJpbmdzW25yXQorCQkJOiBOVUxMOworCQlucisrOworCX0KKwlzdHJidWZfbGlzdF9mcmVlKHRyYWlsZXJfbGluZXMpOworCisJaW5mby0+YmxhbmtfbGluZV9iZWZvcmVfdHJhaWxlciA9IGVuZHNfd2l0aF9ibGFua19saW5lKHN0ciwKKwkJCQkJCQkgICAgICAgdHJhaWxlcl9zdGFydCk7CisJaW5mby0+dHJhaWxlcl9zdGFydCA9IHN0ciArIHRyYWlsZXJfc3RhcnQ7CisJaW5mby0+dHJhaWxlcl9lbmQgPSBzdHIgKyB0cmFpbGVyX2VuZDsKKwlpbmZvLT50cmFpbGVycyA9IHRyYWlsZXJfc3RyaW5nczsKKwlpbmZvLT50cmFpbGVyX25yID0gbnI7Cit9CisKK3ZvaWQgdHJhaWxlcl9pbmZvX3JlbGVhc2Uoc3RydWN0IHRyYWlsZXJfaW5mbyAqaW5mbykKK3sKKwlzaXplX3QgaTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+dHJhaWxlcl9ucjsgaSsrKQorCQlmcmVlKGluZm8tPnRyYWlsZXJzW2ldKTsKKwlmcmVlKGluZm8tPnRyYWlsZXJzKTsKK30KKworc3RhdGljIHZvaWQgZm9ybWF0X3RyYWlsZXJfaW5mbyhzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCQkJY29uc3Qgc3RydWN0IHRyYWlsZXJfaW5mbyAqaW5mbywKKwkJCQljb25zdCBzdHJ1Y3QgcHJvY2Vzc190cmFpbGVyX29wdGlvbnMgKm9wdHMpCit7CisJc2l6ZV90IG9yaWdsZW4gPSBvdXQtPmxlbjsKKwlzaXplX3QgaTsKKworCS8qIElmIHdlIHdhbnQgdGhlIHdob2xlIGJsb2NrIHVudG91Y2hlZCwgd2UgY2FuIHRha2UgdGhlIGZhc3QgcGF0aC4gKi8KKwlpZiAoIW9wdHMtPm9ubHlfdHJhaWxlcnMgJiYgIW9wdHMtPnVuZm9sZCAmJiAhb3B0cy0+ZmlsdGVyICYmICFvcHRzLT5zZXBhcmF0b3IpIHsKKwkJc3RyYnVmX2FkZChvdXQsIGluZm8tPnRyYWlsZXJfc3RhcnQsCisJCQkgICBpbmZvLT50cmFpbGVyX2VuZCAtIGluZm8tPnRyYWlsZXJfc3RhcnQpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IGluZm8tPnRyYWlsZXJfbnI7IGkrKykgeworCQljaGFyICp0cmFpbGVyID0gaW5mby0+dHJhaWxlcnNbaV07CisJCXNzaXplX3Qgc2VwYXJhdG9yX3BvcyA9IGZpbmRfc2VwYXJhdG9yKHRyYWlsZXIsIHNlcGFyYXRvcnMpOworCisJCWlmIChzZXBhcmF0b3JfcG9zID49IDEpIHsKKwkJCXN0cnVjdCBzdHJidWYgdG9rID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJ1Y3Qgc3RyYnVmIHZhbCA9IFNUUkJVRl9JTklUOworCisJCQlwYXJzZV90cmFpbGVyKCZ0b2ssICZ2YWwsIE5VTEwsIHRyYWlsZXIsIHNlcGFyYXRvcl9wb3MpOworCQkJaWYgKCFvcHRzLT5maWx0ZXIgfHwgb3B0cy0+ZmlsdGVyKCZ0b2ssIG9wdHMtPmZpbHRlcl9kYXRhKSkgeworCQkJCWlmIChvcHRzLT51bmZvbGQpCisJCQkJCXVuZm9sZF92YWx1ZSgmdmFsKTsKKworCQkJCWlmIChvcHRzLT5zZXBhcmF0b3IgJiYgb3V0LT5sZW4gIT0gb3JpZ2xlbikKKwkJCQkJc3RyYnVmX2FkZGJ1ZihvdXQsIG9wdHMtPnNlcGFyYXRvcik7CisJCQkJaWYgKCFvcHRzLT52YWx1ZV9vbmx5KQorCQkJCQlzdHJidWZfYWRkZihvdXQsICIlczogIiwgdG9rLmJ1Zik7CisJCQkJc3RyYnVmX2FkZGJ1ZihvdXQsICZ2YWwpOworCQkJCWlmICghb3B0cy0+c2VwYXJhdG9yKQorCQkJCQlzdHJidWZfYWRkY2gob3V0LCAnXG4nKTsKKwkJCX0KKwkJCXN0cmJ1Zl9yZWxlYXNlKCZ0b2spOworCQkJc3RyYnVmX3JlbGVhc2UoJnZhbCk7CisKKwkJfSBlbHNlIGlmICghb3B0cy0+b25seV90cmFpbGVycykgeworCQkJaWYgKG9wdHMtPnNlcGFyYXRvciAmJiBvdXQtPmxlbiAhPSBvcmlnbGVuKSB7CisJCQkJc3RyYnVmX2FkZGJ1ZihvdXQsIG9wdHMtPnNlcGFyYXRvcik7CisJCQl9CisJCQlzdHJidWZfYWRkc3RyKG91dCwgdHJhaWxlcik7CisJCQlpZiAob3B0cy0+c2VwYXJhdG9yKSB7CisJCQkJc3RyYnVmX3J0cmltKG91dCk7CisJCQl9CisJCX0KKwl9CisKK30KKwordm9pZCBmb3JtYXRfdHJhaWxlcnNfZnJvbV9jb21taXQoc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICptc2csCisJCQkJIGNvbnN0IHN0cnVjdCBwcm9jZXNzX3RyYWlsZXJfb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgdHJhaWxlcl9pbmZvIGluZm87CisKKwl0cmFpbGVyX2luZm9fZ2V0KCZpbmZvLCBtc2csIG9wdHMpOworCWZvcm1hdF90cmFpbGVyX2luZm8ob3V0LCAmaW5mbywgb3B0cyk7CisJdHJhaWxlcl9pbmZvX3JlbGVhc2UoJmluZm8pOworfQpkaWZmIC0tZ2l0IGEvdHJhaWxlci5oIGIvdHJhaWxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwM2FjZjQKLS0tIC9kZXYvbnVsbAorKysgYi90cmFpbGVyLmgKQEAgLTAsMCArMSwxMDYgQEAKKyNpZm5kZWYgVFJBSUxFUl9ICisjZGVmaW5lIFRSQUlMRVJfSAorCisjaW5jbHVkZSAibGlzdC5oIgorCitzdHJ1Y3Qgc3RyYnVmOworCitlbnVtIHRyYWlsZXJfd2hlcmUgeworCVdIRVJFX0RFRkFVTFQsCisJV0hFUkVfRU5ELAorCVdIRVJFX0FGVEVSLAorCVdIRVJFX0JFRk9SRSwKKwlXSEVSRV9TVEFSVAorfTsKK2VudW0gdHJhaWxlcl9pZl9leGlzdHMgeworCUVYSVNUU19ERUZBVUxULAorCUVYSVNUU19BRERfSUZfRElGRkVSRU5UX05FSUdIQk9SLAorCUVYSVNUU19BRERfSUZfRElGRkVSRU5ULAorCUVYSVNUU19BREQsCisJRVhJU1RTX1JFUExBQ0UsCisJRVhJU1RTX0RPX05PVEhJTkcKK307CitlbnVtIHRyYWlsZXJfaWZfbWlzc2luZyB7CisJTUlTU0lOR19ERUZBVUxULAorCU1JU1NJTkdfQURELAorCU1JU1NJTkdfRE9fTk9USElORworfTsKKworaW50IHRyYWlsZXJfc2V0X3doZXJlKGVudW0gdHJhaWxlcl93aGVyZSAqaXRlbSwgY29uc3QgY2hhciAqdmFsdWUpOworaW50IHRyYWlsZXJfc2V0X2lmX2V4aXN0cyhlbnVtIHRyYWlsZXJfaWZfZXhpc3RzICppdGVtLCBjb25zdCBjaGFyICp2YWx1ZSk7CitpbnQgdHJhaWxlcl9zZXRfaWZfbWlzc2luZyhlbnVtIHRyYWlsZXJfaWZfbWlzc2luZyAqaXRlbSwgY29uc3QgY2hhciAqdmFsdWUpOworCitzdHJ1Y3QgdHJhaWxlcl9pbmZvIHsKKwkvKgorCSAqIFRydWUgaWYgdGhlcmUgaXMgYSBibGFuayBsaW5lIGJlZm9yZSB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieQorCSAqIHRyYWlsZXJfc3RhcnQuCisJICovCisJaW50IGJsYW5rX2xpbmVfYmVmb3JlX3RyYWlsZXI7CisKKwkvKgorCSAqIFBvaW50ZXJzIHRvIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSB0cmFpbGVyIGJsb2NrIGZvdW5kLiBJZiB0aGVyZQorCSAqIGlzIG5vIHRyYWlsZXIgYmxvY2sgZm91bmQsIHRoZXNlIDIgcG9pbnRlcnMgcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUKKwkgKiBpbnB1dCBzdHJpbmcuCisJICovCisJY29uc3QgY2hhciAqdHJhaWxlcl9zdGFydCwgKnRyYWlsZXJfZW5kOworCisJLyoKKwkgKiBBcnJheSBvZiB0cmFpbGVycyBmb3VuZC4KKwkgKi8KKwljaGFyICoqdHJhaWxlcnM7CisJc2l6ZV90IHRyYWlsZXJfbnI7Cit9OworCisvKgorICogQSBsaXN0IHRoYXQgcmVwcmVzZW50cyBuZXdseS1hZGRlZCB0cmFpbGVycywgc3VjaCBhcyB0aG9zZSBwcm92aWRlZAorICogd2l0aCB0aGUgLS10cmFpbGVyIGNvbW1hbmQgbGluZSBvcHRpb24gb2YgZ2l0LWludGVycHJldC10cmFpbGVycy4KKyAqLworc3RydWN0IG5ld190cmFpbGVyX2l0ZW0geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCWNvbnN0IGNoYXIgKnRleHQ7CisKKwllbnVtIHRyYWlsZXJfd2hlcmUgd2hlcmU7CisJZW51bSB0cmFpbGVyX2lmX2V4aXN0cyBpZl9leGlzdHM7CisJZW51bSB0cmFpbGVyX2lmX21pc3NpbmcgaWZfbWlzc2luZzsKK307CisKK3N0cnVjdCBwcm9jZXNzX3RyYWlsZXJfb3B0aW9ucyB7CisJaW50IGluX3BsYWNlOworCWludCB0cmltX2VtcHR5OworCWludCBvbmx5X3RyYWlsZXJzOworCWludCBvbmx5X2lucHV0OworCWludCB1bmZvbGQ7CisJaW50IG5vX2RpdmlkZXI7CisJaW50IHZhbHVlX29ubHk7CisJY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc2VwYXJhdG9yOworCWludCAoKmZpbHRlcikoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqLCB2b2lkICopOworCXZvaWQgKmZpbHRlcl9kYXRhOworfTsKKworI2RlZmluZSBQUk9DRVNTX1RSQUlMRVJfT1BUSU9OU19JTklUIHswfQorCit2b2lkIHByb2Nlc3NfdHJhaWxlcnMoY29uc3QgY2hhciAqZmlsZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHByb2Nlc3NfdHJhaWxlcl9vcHRpb25zICpvcHRzLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpuZXdfdHJhaWxlcl9oZWFkKTsKKwordm9pZCB0cmFpbGVyX2luZm9fZ2V0KHN0cnVjdCB0cmFpbGVyX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKnN0ciwKKwkJICAgICAgY29uc3Qgc3RydWN0IHByb2Nlc3NfdHJhaWxlcl9vcHRpb25zICpvcHRzKTsKKwordm9pZCB0cmFpbGVyX2luZm9fcmVsZWFzZShzdHJ1Y3QgdHJhaWxlcl9pbmZvICppbmZvKTsKKworLyoKKyAqIEZvcm1hdCB0aGUgdHJhaWxlcnMgZnJvbSB0aGUgY29tbWl0IG1zZyAibXNnIiBpbnRvIHRoZSBzdHJidWYgIm91dCIuCisgKiBOb3RlIHR3byBjYXZlYXRzIGFib3V0ICJvcHRzIjoKKyAqCisgKiAgIC0gdGhpcyBpcyBwcmltYXJpbHkgYSBoZWxwZXIgZm9yIHByZXR0eS5jLCBhbmQgbm90CisgKiAgICAgYWxsIG9mIHRoZSBmbGFncyBhcmUgc3VwcG9ydGVkLgorICoKKyAqICAgLSB0aGlzIGRpZmZlcnMgZnJvbSBwcm9jZXNzX3RyYWlsZXJzIHNsaWdodGx5IGluIHRoYXQgd2UgYWx3YXlzIGZvcm1hdAorICogICAgIG9ubHkgdGhlIHRyYWlsZXIgYmxvY2sgaXRzZWxmLCBldmVuIGlmIHRoZSAib25seV90cmFpbGVycyIgb3B0aW9uIGlzIG5vdAorICogICAgIHNldC4KKyAqLwordm9pZCBmb3JtYXRfdHJhaWxlcnNfZnJvbV9jb21taXQoc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICptc2csCisJCQkJIGNvbnN0IHN0cnVjdCBwcm9jZXNzX3RyYWlsZXJfb3B0aW9ucyAqb3B0cyk7CisKKyNlbmRpZiAvKiBUUkFJTEVSX0ggKi8KZGlmZiAtLWdpdCBhL3RyYW5zcG9ydC1oZWxwZXIuYyBiL3RyYW5zcG9ydC1oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDZhZmNiCi0tLSAvZGV2L251bGwKKysrIGIvdHJhbnNwb3J0LWhlbHBlci5jCkBAIC0wLDAgKzEsMTUxMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlZnNwZWMuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQtaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorCitzdGF0aWMgaW50IGRlYnVnOworCitzdHJ1Y3QgaGVscGVyX2RhdGEgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlcjsKKwlGSUxFICpvdXQ7CisJdW5zaWduZWQgZmV0Y2ggOiAxLAorCQlpbXBvcnQgOiAxLAorCQliaWRpX2ltcG9ydCA6IDEsCisJCWV4cG9ydCA6IDEsCisJCW9wdGlvbiA6IDEsCisJCXB1c2ggOiAxLAorCQljb25uZWN0IDogMSwKKwkJc3RhdGVsZXNzX2Nvbm5lY3QgOiAxLAorCQlzaWduZWRfdGFncyA6IDEsCisJCWNoZWNrX2Nvbm5lY3Rpdml0eSA6IDEsCisJCW5vX2Rpc2Nvbm5lY3RfcmVxIDogMSwKKwkJbm9fcHJpdmF0ZV91cGRhdGUgOiAxOworCisJLyoKKwkgKiBBcyBhbiBvcHRpbWl6YXRpb24sIHRoZSB0cmFuc3BvcnQgY29kZSBtYXkgaW52b2tlIGZldGNoIGJlZm9yZQorCSAqIGdldF9yZWZzX2xpc3QuIElmIHRoaXMgaGFwcGVucywgYW5kIGlmIHRoZSB0cmFuc3BvcnQgaGVscGVyIGRvZXNuJ3QKKwkgKiBzdXBwb3J0IGNvbm5lY3Qgb3Igc3RhdGVsZXNzX2Nvbm5lY3QsIHdlIG5lZWQgdG8gaW52b2tlCisJICogZ2V0X3JlZnNfbGlzdCBvdXJzZWx2ZXMgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgc28uIEtlZXAgdHJhY2sgb2YKKwkgKiB3aGV0aGVyIHdlIGhhdmUgaW52b2tlZCBnZXRfcmVmc19saXN0LgorCSAqLworCXVuc2lnbmVkIGdldF9yZWZzX2xpc3RfY2FsbGVkIDogMTsKKworCWNoYXIgKmV4cG9ydF9tYXJrczsKKwljaGFyICppbXBvcnRfbWFya3M7CisJLyogVGhlc2UgZ28gZnJvbSByZW1vdGUgbmFtZSAoYXMgaW4gImxpc3QiKSB0byBwcml2YXRlIG5hbWUgKi8KKwlzdHJ1Y3QgcmVmc3BlYyByczsKKwkvKiBUcmFuc3BvcnQgb3B0aW9ucyBmb3IgZmV0Y2gtcGFjay9zZW5kLXBhY2sgKHNob3VsZCBvbmUgb2YKKwkgKiB0aG9zZSBiZSBpbnZva2VkKS4KKwkgKi8KKwlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9vcHRpb25zIHRyYW5zcG9ydF9vcHRpb25zOworfTsKKworc3RhdGljIHZvaWQgc2VuZGxpbmUoc3RydWN0IGhlbHBlcl9kYXRhICpoZWxwZXIsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlcikKK3sKKwlpZiAoZGVidWcpCisJCWZwcmludGYoc3RkZXJyLCAiRGVidWc6IFJlbW90ZSBoZWxwZXI6IC0+ICVzIiwgYnVmZmVyLT5idWYpOworCWlmICh3cml0ZV9pbl9mdWxsKGhlbHBlci0+aGVscGVyLT5pbiwgYnVmZmVyLT5idWYsIGJ1ZmZlci0+bGVuKSA8IDApCisJCWRpZV9lcnJubyhfKCJmdWxsIHdyaXRlIHRvIHJlbW90ZSBoZWxwZXIgZmFpbGVkIikpOworfQorCitzdGF0aWMgaW50IHJlY3ZsaW5lX2ZoKEZJTEUgKmhlbHBlciwgc3RydWN0IHN0cmJ1ZiAqYnVmZmVyKQoreworCXN0cmJ1Zl9yZXNldChidWZmZXIpOworCWlmIChkZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogUmVtb3RlIGhlbHBlcjogV2FpdGluZy4uLlxuIik7CisJaWYgKHN0cmJ1Zl9nZXRsaW5lKGJ1ZmZlciwgaGVscGVyKSA9PSBFT0YpIHsKKwkJaWYgKGRlYnVnKQorCQkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogUmVtb3RlIGhlbHBlciBxdWl0LlxuIik7CisJCXJldHVybiAxOworCX0KKworCWlmIChkZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogUmVtb3RlIGhlbHBlcjogPC0gJXNcbiIsIGJ1ZmZlci0+YnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWN2bGluZShzdHJ1Y3QgaGVscGVyX2RhdGEgKmhlbHBlciwgc3RydWN0IHN0cmJ1ZiAqYnVmZmVyKQoreworCXJldHVybiByZWN2bGluZV9maChoZWxwZXItPm91dCwgYnVmZmVyKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfY29uc3RhbnQoaW50IGZkLCBjb25zdCBjaGFyICpzdHIpCit7CisJaWYgKGRlYnVnKQorCQlmcHJpbnRmKHN0ZGVyciwgIkRlYnVnOiBSZW1vdGUgaGVscGVyOiAtPiAlcyIsIHN0cik7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIHN0ciwgc3RybGVuKHN0cikpIDwgMCkKKwkJZGllX2Vycm5vKF8oImZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiKSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZW1vdmVfZXh0X2ZvcmNlKGNvbnN0IGNoYXIgKnVybCkKK3sKKwlpZiAodXJsKSB7CisJCWNvbnN0IGNoYXIgKmNvbG9uID0gc3RyY2hyKHVybCwgJzonKTsKKwkJaWYgKGNvbG9uICYmIGNvbG9uWzFdID09ICc6JykKKwkJCXJldHVybiBjb2xvbiArIDI7CisJfQorCXJldHVybiB1cmw7Cit9CisKK3N0YXRpYyB2b2lkIGRvX3Rha2Vfb3ZlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhOworCWRhdGEgPSAoc3RydWN0IGhlbHBlcl9kYXRhICopdHJhbnNwb3J0LT5kYXRhOworCXRyYW5zcG9ydF90YWtlX292ZXIodHJhbnNwb3J0LCBkYXRhLT5oZWxwZXIpOworCWZjbG9zZShkYXRhLT5vdXQpOworCWZyZWUoZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YW5kYXJkX29wdGlvbnMoc3RydWN0IHRyYW5zcG9ydCAqdCk7CisKK3N0YXRpYyBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZ2V0X2hlbHBlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlcjsKKwlpbnQgZHVwZWQ7CisJaW50IGNvZGU7CisKKwlpZiAoZGF0YS0+aGVscGVyKQorCQlyZXR1cm4gZGF0YS0+aGVscGVyOworCisJaGVscGVyID0geG1hbGxvYyhzaXplb2YoKmhlbHBlcikpOworCWNoaWxkX3Byb2Nlc3NfaW5pdChoZWxwZXIpOworCWhlbHBlci0+aW4gPSAtMTsKKwloZWxwZXItPm91dCA9IC0xOworCWhlbHBlci0+ZXJyID0gMDsKKwlhcmd2X2FycmF5X3B1c2hmKCZoZWxwZXItPmFyZ3MsICJnaXQtcmVtb3RlLSVzIiwgZGF0YS0+bmFtZSk7CisJYXJndl9hcnJheV9wdXNoKCZoZWxwZXItPmFyZ3MsIHRyYW5zcG9ydC0+cmVtb3RlLT5uYW1lKTsKKwlhcmd2X2FycmF5X3B1c2goJmhlbHBlci0+YXJncywgcmVtb3ZlX2V4dF9mb3JjZSh0cmFuc3BvcnQtPnVybCkpOworCWhlbHBlci0+Z2l0X2NtZCA9IDA7CisJaGVscGVyLT5zaWxlbnRfZXhlY19mYWlsdXJlID0gMTsKKworCWlmIChoYXZlX2dpdF9kaXIoKSkKKwkJYXJndl9hcnJheV9wdXNoZigmaGVscGVyLT5lbnZfYXJyYXksICIlcz0lcyIsCisJCQkJIEdJVF9ESVJfRU5WSVJPTk1FTlQsIGdldF9naXRfZGlyKCkpOworCisJaGVscGVyLT50cmFjZTJfY2hpbGRfY2xhc3MgPSBoZWxwZXItPmFyZ3MuYXJndlswXTsgLyogInJlbW90ZS08bmFtZT4iICovCisKKwljb2RlID0gc3RhcnRfY29tbWFuZChoZWxwZXIpOworCWlmIChjb2RlIDwgMCAmJiBlcnJubyA9PSBFTk9FTlQpCisJCWRpZShfKCJ1bmFibGUgdG8gZmluZCByZW1vdGUgaGVscGVyIGZvciAnJXMnIiksIGRhdGEtPm5hbWUpOworCWVsc2UgaWYgKGNvZGUgIT0gMCkKKwkJZXhpdChjb2RlKTsKKworCWRhdGEtPmhlbHBlciA9IGhlbHBlcjsKKwlkYXRhLT5ub19kaXNjb25uZWN0X3JlcSA9IDA7CisJcmVmc3BlY19pbml0KCZkYXRhLT5ycywgUkVGU1BFQ19GRVRDSCk7CisKKwkvKgorCSAqIE9wZW4gdGhlIG91dHB1dCBhcyBGSUxFKiBzbyBzdHJidWZfZ2V0bGluZV8qKCkgZmFtaWx5IG9mCisJICogZnVuY3Rpb25zIGNhbiBiZSB1c2VkLgorCSAqIERvIHRoaXMgd2l0aCBkdXBlZCBmZCBiZWNhdXNlIGZjbG9zZSgpIHdpbGwgY2xvc2UgdGhlIGZkLAorCSAqIGFuZCBzdHVmZiBsaWtlIHRha2luZyBvdmVyIHdpbGwgcmVxdWlyZSB0aGUgZmQgdG8gcmVtYWluLgorCSAqLworCWR1cGVkID0gZHVwKGhlbHBlci0+b3V0KTsKKwlpZiAoZHVwZWQgPCAwKQorCQlkaWVfZXJybm8oXygiY2FuJ3QgZHVwIGhlbHBlciBvdXRwdXQgZmQiKSk7CisJZGF0YS0+b3V0ID0geGZkb3BlbihkdXBlZCwgInIiKTsKKworCXdyaXRlX2NvbnN0YW50KGhlbHBlci0+aW4sICJjYXBhYmlsaXRpZXNcbiIpOworCisJd2hpbGUgKDEpIHsKKwkJY29uc3QgY2hhciAqY2FwbmFtZSwgKmFyZzsKKwkJaW50IG1hbmRhdG9yeSA9IDA7CisJCWlmIChyZWN2bGluZShkYXRhLCAmYnVmKSkKKwkJCWV4aXQoMTI4KTsKKworCQlpZiAoISpidWYuYnVmKQorCQkJYnJlYWs7CisKKwkJaWYgKCpidWYuYnVmID09ICcqJykgeworCQkJY2FwbmFtZSA9IGJ1Zi5idWYgKyAxOworCQkJbWFuZGF0b3J5ID0gMTsKKwkJfSBlbHNlCisJCQljYXBuYW1lID0gYnVmLmJ1ZjsKKworCQlpZiAoZGVidWcpCisJCQlmcHJpbnRmKHN0ZGVyciwgIkRlYnVnOiBHb3QgY2FwICVzXG4iLCBjYXBuYW1lKTsKKwkJaWYgKCFzdHJjbXAoY2FwbmFtZSwgImZldGNoIikpCisJCQlkYXRhLT5mZXRjaCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoY2FwbmFtZSwgIm9wdGlvbiIpKQorCQkJZGF0YS0+b3B0aW9uID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChjYXBuYW1lLCAicHVzaCIpKQorCQkJZGF0YS0+cHVzaCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoY2FwbmFtZSwgImltcG9ydCIpKQorCQkJZGF0YS0+aW1wb3J0ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChjYXBuYW1lLCAiYmlkaS1pbXBvcnQiKSkKKwkJCWRhdGEtPmJpZGlfaW1wb3J0ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChjYXBuYW1lLCAiZXhwb3J0IikpCisJCQlkYXRhLT5leHBvcnQgPSAxOworCQllbHNlIGlmICghc3RyY21wKGNhcG5hbWUsICJjaGVjay1jb25uZWN0aXZpdHkiKSkKKwkJCWRhdGEtPmNoZWNrX2Nvbm5lY3Rpdml0eSA9IDE7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGNhcG5hbWUsICJyZWZzcGVjICIsICZhcmcpKSB7CisJCQlyZWZzcGVjX2FwcGVuZCgmZGF0YS0+cnMsIGFyZyk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjYXBuYW1lLCAiY29ubmVjdCIpKSB7CisJCQlkYXRhLT5jb25uZWN0ID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNhcG5hbWUsICJzdGF0ZWxlc3MtY29ubmVjdCIpKSB7CisJCQlkYXRhLT5zdGF0ZWxlc3NfY29ubmVjdCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjYXBuYW1lLCAic2lnbmVkLXRhZ3MiKSkgeworCQkJZGF0YS0+c2lnbmVkX3RhZ3MgPSAxOworCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGNhcG5hbWUsICJleHBvcnQtbWFya3MgIiwgJmFyZykpIHsKKwkJCWRhdGEtPmV4cG9ydF9tYXJrcyA9IHhzdHJkdXAoYXJnKTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChjYXBuYW1lLCAiaW1wb3J0LW1hcmtzICIsICZhcmcpKSB7CisJCQlkYXRhLT5pbXBvcnRfbWFya3MgPSB4c3RyZHVwKGFyZyk7CisJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoY2FwbmFtZSwgIm5vLXByaXZhdGUtdXBkYXRlIikpIHsKKwkJCWRhdGEtPm5vX3ByaXZhdGVfdXBkYXRlID0gMTsKKwkJfSBlbHNlIGlmIChtYW5kYXRvcnkpIHsKKwkJCWRpZShfKCJ1bmtub3duIG1hbmRhdG9yeSBjYXBhYmlsaXR5ICVzOyB0aGlzIHJlbW90ZSAiCisJCQkgICAgICAiaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyIHZlcnNpb24gb2YgR2l0IiksCisJCQkgICAgY2FwbmFtZSk7CisJCX0KKwl9CisJaWYgKCFkYXRhLT5ycy5uciAmJiAoZGF0YS0+aW1wb3J0IHx8IGRhdGEtPmJpZGlfaW1wb3J0IHx8IGRhdGEtPmV4cG9ydCkpIHsKKwkJd2FybmluZyhfKCJ0aGlzIHJlbW90ZSBoZWxwZXIgc2hvdWxkIGltcGxlbWVudCByZWZzcGVjIGNhcGFiaWxpdHkiKSk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWlmIChkZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogQ2FwYWJpbGl0aWVzIGNvbXBsZXRlLlxuIik7CisJc3RhbmRhcmRfb3B0aW9ucyh0cmFuc3BvcnQpOworCXJldHVybiBkYXRhLT5oZWxwZXI7Cit9CisKK3N0YXRpYyBpbnQgZGlzY29ubmVjdF9oZWxwZXIoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlpbnQgcmVzID0gMDsKKworCWlmIChkYXRhLT5oZWxwZXIpIHsKKwkJaWYgKGRlYnVnKQorCQkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogRGlzY29ubmVjdGluZy5cbiIpOworCQlpZiAoIWRhdGEtPm5vX2Rpc2Nvbm5lY3RfcmVxKSB7CisJCQkvKgorCQkJICogSWdub3JlIHdyaXRlIGVycm9yczsgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkbywKKwkJCSAqIHNpbmNlIHdlJ3JlIGFib3V0IHRvIGNsb3NlIHRoZSBwaXBlIGFueXdheS4gQW5kIHRoZQorCQkJICogbW9zdCBsaWtlbHkgZXJyb3IgaXMgRVBJUEUgZHVlIHRvIHRoZSBoZWxwZXIgZHlpbmcKKwkJCSAqIHRvIHJlcG9ydCBhbiBlcnJvciBpdHNlbGYuCisJCQkgKi8KKwkJCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgU0lHX0lHTik7CisJCQl4d3JpdGUoZGF0YS0+aGVscGVyLT5pbiwgIlxuIiwgMSk7CisJCQlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisJCX0KKwkJY2xvc2UoZGF0YS0+aGVscGVyLT5pbik7CisJCWNsb3NlKGRhdGEtPmhlbHBlci0+b3V0KTsKKwkJZmNsb3NlKGRhdGEtPm91dCk7CisJCXJlcyA9IGZpbmlzaF9jb21tYW5kKGRhdGEtPmhlbHBlcik7CisJCUZSRUVfQU5EX05VTEwoZGF0YS0+aGVscGVyKTsKKwl9CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnVuc3VwcG9ydGVkX29wdGlvbnNbXSA9IHsKKwlUUkFOU19PUFRfVVBMT0FEUEFDSywKKwlUUkFOU19PUFRfUkVDRUlWRVBBQ0ssCisJVFJBTlNfT1BUX1RISU4sCisJVFJBTlNfT1BUX0tFRVAKKwl9OworCitzdGF0aWMgY29uc3QgY2hhciAqYm9vbGVhbl9vcHRpb25zW10gPSB7CisJVFJBTlNfT1BUX1RISU4sCisJVFJBTlNfT1BUX0tFRVAsCisJVFJBTlNfT1BUX0ZPTExPV1RBR1MsCisJVFJBTlNfT1BUX0RFRVBFTl9SRUxBVElWRQorCX07CisKK3N0YXRpYyBpbnQgc3RyYnVmX3NldF9oZWxwZXJfb3B0aW9uKHN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSwKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWludCByZXQ7CisKKwlzZW5kbGluZShkYXRhLCBidWYpOworCWlmIChyZWN2bGluZShkYXRhLCBidWYpKQorCQlleGl0KDEyOCk7CisKKwlpZiAoIXN0cmNtcChidWYtPmJ1ZiwgIm9rIikpCisJCXJldCA9IDA7CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgoYnVmLT5idWYsICJlcnJvciIpKQorCQlyZXQgPSAtMTsKKwllbHNlIGlmICghc3RyY21wKGJ1Zi0+YnVmLCAidW5zdXBwb3J0ZWQiKSkKKwkJcmV0ID0gMTsKKwllbHNlIHsKKwkJd2FybmluZyhfKCIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIpLCBkYXRhLT5uYW1lLCBidWYtPmJ1Zik7CisJCXJldCA9IDE7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3RyaW5nX2xpc3Rfc2V0X2hlbHBlcl9vcHRpb24oc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhLAorCQkJCQkgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBpLCByZXQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspIHsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIm9wdGlvbiAlcyAiLCBuYW1lKTsKKwkJcXVvdGVfY19zdHlsZShsaXN0LT5pdGVtc1tpXS5zdHJpbmcsICZidWYsIE5VTEwsIDApOworCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisKKwkJaWYgKChyZXQgPSBzdHJidWZfc2V0X2hlbHBlcl9vcHRpb24oZGF0YSwgJmJ1ZikpKQorCQkJYnJlYWs7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzZXRfaGVscGVyX29wdGlvbihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBpLCByZXQsIGlzX2Jvb2wgPSAwOworCisJZ2V0X2hlbHBlcih0cmFuc3BvcnQpOworCisJaWYgKCFkYXRhLT5vcHRpb24pCisJCXJldHVybiAxOworCisJaWYgKCFzdHJjbXAobmFtZSwgImRlZXBlbi1ub3QiKSkKKwkJcmV0dXJuIHN0cmluZ19saXN0X3NldF9oZWxwZXJfb3B0aW9uKGRhdGEsIG5hbWUsCisJCQkJCQkgICAgIChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKil2YWx1ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh1bnN1cHBvcnRlZF9vcHRpb25zKTsgaSsrKSB7CisJCWlmICghc3RyY21wKG5hbWUsIHVuc3VwcG9ydGVkX29wdGlvbnNbaV0pKQorCQkJcmV0dXJuIDE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYm9vbGVhbl9vcHRpb25zKTsgaSsrKSB7CisJCWlmICghc3RyY21wKG5hbWUsIGJvb2xlYW5fb3B0aW9uc1tpXSkpIHsKKwkJCWlzX2Jvb2wgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzdHJidWZfYWRkZigmYnVmLCAib3B0aW9uICVzICIsIG5hbWUpOworCWlmIChpc19ib29sKQorCQlzdHJidWZfYWRkc3RyKCZidWYsIHZhbHVlID8gInRydWUiIDogImZhbHNlIik7CisJZWxzZQorCQlxdW90ZV9jX3N0eWxlKHZhbHVlLCAmYnVmLCBOVUxMLCAwKTsKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisKKwlyZXQgPSBzdHJidWZfc2V0X2hlbHBlcl9vcHRpb24oZGF0YSwgJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc3RhbmRhcmRfb3B0aW9ucyhzdHJ1Y3QgdHJhbnNwb3J0ICp0KQoreworCWNoYXIgYnVmWzE2XTsKKwlpbnQgdiA9IHQtPnZlcmJvc2U7CisKKwlzZXRfaGVscGVyX29wdGlvbih0LCAicHJvZ3Jlc3MiLCB0LT5wcm9ncmVzcyA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisJeHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIHYgKyAxKTsKKwlzZXRfaGVscGVyX29wdGlvbih0LCAidmVyYm9zaXR5IiwgYnVmKTsKKworCXN3aXRjaCAodC0+ZmFtaWx5KSB7CisJY2FzZSBUUkFOU1BPUlRfRkFNSUxZX0FMTDoKKwkJLyoKKwkJICogdGhpcyBpcyBhbHJlYWR5IHRoZSBkZWZhdWx0LAorCQkgKiBkbyBub3QgYnJlYWsgb2xkIHJlbW90ZSBoZWxwZXJzIGJ5IHNldHRpbmcgImFsbCIgaGVyZQorCQkgKi8KKwkJYnJlYWs7CisJY2FzZSBUUkFOU1BPUlRfRkFNSUxZX0lQVjQ6CisJCXNldF9oZWxwZXJfb3B0aW9uKHQsICJmYW1pbHkiLCAiaXB2NCIpOworCQlicmVhazsKKwljYXNlIFRSQU5TUE9SVF9GQU1JTFlfSVBWNjoKKwkJc2V0X2hlbHBlcl9vcHRpb24odCwgImZhbWlseSIsICJpcHY2Iik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCByZWxlYXNlX2hlbHBlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJaW50IHJlcyA9IDA7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXJlZnNwZWNfY2xlYXIoJmRhdGEtPnJzKTsKKwlyZXMgPSBkaXNjb25uZWN0X2hlbHBlcih0cmFuc3BvcnQpOworCWZyZWUodHJhbnNwb3J0LT5kYXRhKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGZldGNoX3dpdGhfZmV0Y2goc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJICAgIGludCBucl9oZWFkcywgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHJlZiAqcG9zbiA9IHRvX2ZldGNoW2ldOworCQlpZiAocG9zbi0+c3RhdHVzICYgUkVGX1NUQVRVU19VUFRPREFURSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmJ1Zl9hZGRmKCZidWYsICJmZXRjaCAlcyAlc1xuIiwKKwkJCSAgICBvaWRfdG9faGV4KCZwb3NuLT5vbGRfb2lkKSwKKwkJCSAgICBwb3NuLT5zeW1yZWYgPyBwb3NuLT5zeW1yZWYgOiBwb3NuLT5uYW1lKTsKKwl9CisKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJc2VuZGxpbmUoZGF0YSwgJmJ1Zik7CisKKwl3aGlsZSAoMSkgeworCQljb25zdCBjaGFyICpuYW1lOworCisJCWlmIChyZWN2bGluZShkYXRhLCAmYnVmKSkKKwkJCWV4aXQoMTI4KTsKKworCQlpZiAoc2tpcF9wcmVmaXgoYnVmLmJ1ZiwgImxvY2sgIiwgJm5hbWUpKSB7CisJCQlpZiAodHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlKQorCQkJCXdhcm5pbmcoXygiJXMgYWxzbyBsb2NrZWQgJXMiKSwgZGF0YS0+bmFtZSwgbmFtZSk7CisJCQllbHNlCisJCQkJdHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlID0geHN0cmR1cChuYW1lKTsKKwkJfQorCQllbHNlIGlmIChkYXRhLT5jaGVja19jb25uZWN0aXZpdHkgJiYKKwkJCSBkYXRhLT50cmFuc3BvcnRfb3B0aW9ucy5jaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkICYmCisJCQkgIXN0cmNtcChidWYuYnVmLCAiY29ubmVjdGl2aXR5LW9rIikpCisJCQlkYXRhLT50cmFuc3BvcnRfb3B0aW9ucy5zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkID0gMTsKKwkJZWxzZSBpZiAoIWJ1Zi5sZW4pCisJCQlicmVhazsKKwkJZWxzZQorCQkJd2FybmluZyhfKCIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIpLCBkYXRhLT5uYW1lLCBidWYuYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2ltcG9ydGVyKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmZhc3RpbXBvcnQpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlciA9IGdldF9oZWxwZXIodHJhbnNwb3J0KTsKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJaW50IGNhdF9ibG9iX2ZkLCBjb2RlOworCWNoaWxkX3Byb2Nlc3NfaW5pdChmYXN0aW1wb3J0KTsKKwlmYXN0aW1wb3J0LT5pbiA9IHhkdXAoaGVscGVyLT5vdXQpOworCWFyZ3ZfYXJyYXlfcHVzaCgmZmFzdGltcG9ydC0+YXJncywgImZhc3QtaW1wb3J0Iik7CisJYXJndl9hcnJheV9wdXNoKCZmYXN0aW1wb3J0LT5hcmdzLCAiLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMiKTsKKwlhcmd2X2FycmF5X3B1c2goJmZhc3RpbXBvcnQtPmFyZ3MsIGRlYnVnID8gIi0tc3RhdHMiIDogIi0tcXVpZXQiKTsKKworCWlmIChkYXRhLT5iaWRpX2ltcG9ydCkgeworCQljYXRfYmxvYl9mZCA9IHhkdXAoaGVscGVyLT5pbik7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmZhc3RpbXBvcnQtPmFyZ3MsICItLWNhdC1ibG9iLWZkPSVkIiwgY2F0X2Jsb2JfZmQpOworCX0KKwlmYXN0aW1wb3J0LT5naXRfY21kID0gMTsKKworCWNvZGUgPSBzdGFydF9jb21tYW5kKGZhc3RpbXBvcnQpOworCXJldHVybiBjb2RlOworfQorCitzdGF0aWMgaW50IGdldF9leHBvcnRlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZmFzdGV4cG9ydCwKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmV2bGlzdF9hcmdzKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqaGVscGVyID0gZ2V0X2hlbHBlcih0cmFuc3BvcnQpOworCWludCBpOworCisJY2hpbGRfcHJvY2Vzc19pbml0KGZhc3RleHBvcnQpOworCisJLyogd2UgbmVlZCB0byBkdXBsaWNhdGUgaGVscGVyLT5pbiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIGl0IGFmdGVyCisJICogZmFzdGV4cG9ydCBpcyBkb25lIHdpdGggaXQuICovCisJZmFzdGV4cG9ydC0+b3V0ID0gZHVwKGhlbHBlci0+aW4pOworCWFyZ3ZfYXJyYXlfcHVzaCgmZmFzdGV4cG9ydC0+YXJncywgImZhc3QtZXhwb3J0Iik7CisJYXJndl9hcnJheV9wdXNoKCZmYXN0ZXhwb3J0LT5hcmdzLCAiLS11c2UtZG9uZS1mZWF0dXJlIik7CisJYXJndl9hcnJheV9wdXNoKCZmYXN0ZXhwb3J0LT5hcmdzLCBkYXRhLT5zaWduZWRfdGFncyA/CisJCSItLXNpZ25lZC10YWdzPXZlcmJhdGltIiA6ICItLXNpZ25lZC10YWdzPXdhcm4tc3RyaXAiKTsKKwlpZiAoZGF0YS0+ZXhwb3J0X21hcmtzKQorCQlhcmd2X2FycmF5X3B1c2hmKCZmYXN0ZXhwb3J0LT5hcmdzLCAiLS1leHBvcnQtbWFya3M9JXMudG1wIiwgZGF0YS0+ZXhwb3J0X21hcmtzKTsKKwlpZiAoZGF0YS0+aW1wb3J0X21hcmtzKQorCQlhcmd2X2FycmF5X3B1c2hmKCZmYXN0ZXhwb3J0LT5hcmdzLCAiLS1pbXBvcnQtbWFya3M9JXMiLCBkYXRhLT5pbXBvcnRfbWFya3MpOworCisJZm9yIChpID0gMDsgaSA8IHJldmxpc3RfYXJncy0+bnI7IGkrKykKKwkJYXJndl9hcnJheV9wdXNoKCZmYXN0ZXhwb3J0LT5hcmdzLCByZXZsaXN0X2FyZ3MtPml0ZW1zW2ldLnN0cmluZyk7CisKKwlmYXN0ZXhwb3J0LT5naXRfY21kID0gMTsKKwlyZXR1cm4gc3RhcnRfY29tbWFuZChmYXN0ZXhwb3J0KTsKK30KKworc3RhdGljIGludCBmZXRjaF93aXRoX2ltcG9ydChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgICAgIGludCBucl9oZWFkcywgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGZhc3RpbXBvcnQ7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCWludCBpOworCXN0cnVjdCByZWYgKnBvc247CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWdldF9oZWxwZXIodHJhbnNwb3J0KTsKKworCWlmIChnZXRfaW1wb3J0ZXIodHJhbnNwb3J0LCAmZmFzdGltcG9ydCkpCisJCWRpZShfKCJjb3VsZG4ndCBydW4gZmFzdC1pbXBvcnQiKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaGVhZHM7IGkrKykgeworCQlwb3NuID0gdG9fZmV0Y2hbaV07CisJCWlmIChwb3NuLT5zdGF0dXMgJiBSRUZfU1RBVFVTX1VQVE9EQVRFKQorCQkJY29udGludWU7CisKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgImltcG9ydCAlc1xuIiwKKwkJCSAgICBwb3NuLT5zeW1yZWYgPyBwb3NuLT5zeW1yZWYgOiBwb3NuLT5uYW1lKTsKKwkJc2VuZGxpbmUoZGF0YSwgJmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9CisKKwl3cml0ZV9jb25zdGFudChkYXRhLT5oZWxwZXItPmluLCAiXG4iKTsKKwkvKgorCSAqIHJlbW90ZS1oZWxwZXJzIHRoYXQgYWR2ZXJ0aXNlIHRoZSBiaWRpLWltcG9ydCBjYXBhYmlsaXR5IGFyZSByZXF1aXJlZCB0bworCSAqIGJ1ZmZlciB0aGUgY29tcGxldGUgYmF0Y2ggb2YgaW1wb3J0IGNvbW1hbmRzIHVudGlsIHRoaXMgbmV3bGluZSBiZWZvcmUKKwkgKiBzZW5kaW5nIGRhdGEgdG8gZmFzdC1pbXBvcnQuCisJICogVGhlc2UgaGVscGVycyByZWFkIGJhY2sgZGF0YSBmcm9tIGZhc3QtaW1wb3J0IG9uIHRoZWlyIHN0ZGluLCB3aGljaCBjb3VsZAorCSAqIGJlIG1peGVkIHdpdGggaW1wb3J0IGNvbW1hbmRzLCBvdGhlcndpc2UuCisJICovCisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmZhc3RpbXBvcnQpKQorCQlkaWUoXygiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWltcG9ydCIpKTsKKworCS8qCisJICogVGhlIGZhc3QtaW1wb3J0IHN0cmVhbSBvZiBhIHJlbW90ZSBoZWxwZXIgdGhhdCBhZHZlcnRpc2VzCisJICogdGhlICJyZWZzcGVjIiBjYXBhYmlsaXR5IHdyaXRlcyB0byB0aGUgcmVmcyBuYW1lZCBhZnRlciB0aGUKKwkgKiByaWdodCBoYW5kIHNpZGUgb2YgdGhlIGZpcnN0IHJlZnNwZWMgbWF0Y2hpbmcgZWFjaCByZWYgd2UKKwkgKiB3ZXJlIGZldGNoaW5nLgorCSAqCisJICogKElmIG5vICJyZWZzcGVjIiBjYXBhYmlsaXR5IHdhcyBzcGVjaWZpZWQsIGZvciBoaXN0b3JpY2FsCisJICogcmVhc29ucyB3ZSBkZWZhdWx0IHRvIHRoZSBlcXVpdmFsZW50IG9mICo6Ki4pCisJICoKKwkgKiBTdG9yZSB0aGUgcmVzdWx0IGluIHRvX2ZldGNoW2ldLm9sZF9zaGExLiAgQ2FsbGVycyBzdWNoCisJICogYXMgImdpdCBmZXRjaCIgY2FuIHVzZSB0aGUgdmFsdWUgdG8gd3JpdGUgZmVlZGJhY2sgdG8gdGhlCisJICogdGVybWluYWwsIHBvcHVsYXRlIEZFVENIX0hFQUQsIGFuZCBkZXRlcm1pbmUgd2hhdCBuZXcgdmFsdWUKKwkgKiBzaG91bGQgYmUgd3JpdHRlbiB0byBwZWVyX3JlZiBpZiB0aGUgdXBkYXRlIGlzIGEKKwkgKiBmYXN0LWZvcndhcmQgb3IgdGhpcyBpcyBhIGZvcmNlZCB1cGRhdGUuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspIHsKKwkJY2hhciAqcHJpdmF0ZSwgKm5hbWU7CisJCXBvc24gPSB0b19mZXRjaFtpXTsKKwkJaWYgKHBvc24tPnN0YXR1cyAmIFJFRl9TVEFUVVNfVVBUT0RBVEUpCisJCQljb250aW51ZTsKKwkJbmFtZSA9IHBvc24tPnN5bXJlZiA/IHBvc24tPnN5bXJlZiA6IHBvc24tPm5hbWU7CisJCWlmIChkYXRhLT5ycy5ucikKKwkJCXByaXZhdGUgPSBhcHBseV9yZWZzcGVjcygmZGF0YS0+cnMsIG5hbWUpOworCQllbHNlCisJCQlwcml2YXRlID0geHN0cmR1cChuYW1lKTsKKwkJaWYgKHByaXZhdGUpIHsKKwkJCWlmIChyZWFkX3JlZihwcml2YXRlLCAmcG9zbi0+b2xkX29pZCkgPCAwKQorCQkJCWRpZShfKCJjb3VsZCBub3QgcmVhZCByZWYgJXMiKSwgcHJpdmF0ZSk7CisJCQlmcmVlKHByaXZhdGUpOworCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ1bl9jb25uZWN0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHN0cmJ1ZiAqY21kYnVmKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgZHVwZWQ7CisJRklMRSAqaW5wdXQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlcjsKKworCWhlbHBlciA9IGdldF9oZWxwZXIodHJhbnNwb3J0KTsKKworCS8qCisJICogWWVzLCBkdXAgdGhlIHBpcGUgYW5vdGhlciB0aW1lLCBhcyB3ZSBuZWVkIHVuYnVmZmVyZWQgdmVyc2lvbgorCSAqIG9mIGlucHV0IHBpcGUgYXMgRklMRSouIGZjbG9zZSgpIGNsb3NlcyB0aGUgdW5kZXJseWluZyBmZCBhbmQKKwkgKiBzdHJlYW0gYnVmZmVyaW5nIG9ubHkgY2FuIGJlIGNoYW5nZWQgYmVmb3JlIGZpcnN0IEkvTyBvcGVyYXRpb24KKwkgKiBvbiBpdC4KKwkgKi8KKwlkdXBlZCA9IGR1cChoZWxwZXItPm91dCk7CisJaWYgKGR1cGVkIDwgMCkKKwkJZGllX2Vycm5vKF8oImNhbid0IGR1cCBoZWxwZXIgb3V0cHV0IGZkIikpOworCWlucHV0ID0geGZkb3BlbihkdXBlZCwgInIiKTsKKwlzZXR2YnVmKGlucHV0LCBOVUxMLCBfSU9OQkYsIDApOworCisJc2VuZGxpbmUoZGF0YSwgY21kYnVmKTsKKwlpZiAocmVjdmxpbmVfZmgoaW5wdXQsIGNtZGJ1ZikpCisJCWV4aXQoMTI4KTsKKworCWlmICghc3RyY21wKGNtZGJ1Zi0+YnVmLCAiIikpIHsKKwkJZGF0YS0+bm9fZGlzY29ubmVjdF9yZXEgPSAxOworCQlpZiAoZGVidWcpCisJCQlmcHJpbnRmKHN0ZGVyciwgIkRlYnVnOiBTbWFydCB0cmFuc3BvcnQgY29ubmVjdGlvbiAiCisJCQkJInJlYWR5LlxuIik7CisJCXJldCA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGNtZGJ1Zi0+YnVmLCAiZmFsbGJhY2siKSkgeworCQlpZiAoZGVidWcpCisJCQlmcHJpbnRmKHN0ZGVyciwgIkRlYnVnOiBGYWxsaW5nIGJhY2sgdG8gZHVtYiAiCisJCQkJInRyYW5zcG9ydC5cbiIpOworCX0gZWxzZSB7CisJCWRpZShfKCJ1bmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIiksCisJCSAgICBjbWRidWYtPmJ1Zik7CisJfQorCisJZmNsb3NlKGlucHV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdF9zZXJ2aWNlKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpleGVjKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlzdHJ1Y3Qgc3RyYnVmIGNtZGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAwOworCisJLyoKKwkgKiBIYW5kbGUgLS11cGxvYWQtcGFjayBhbmQgZnJpZW5kcy4gVGhpcyBpcyBmaXJlIGFuZCBmb3JnZXQuLi4KKwkgKiBqdXN0IHdhcm4gaWYgaXQgZmFpbHMuCisJICovCisJaWYgKHN0cmNtcChuYW1lLCBleGVjKSkgeworCQlpbnQgciA9IHNldF9oZWxwZXJfb3B0aW9uKHRyYW5zcG9ydCwgInNlcnZwYXRoIiwgZXhlYyk7CisJCWlmIChyID4gMCkKKwkJCXdhcm5pbmcoXygic2V0dGluZyByZW1vdGUgc2VydmljZSBwYXRoIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiKSk7CisJCWVsc2UgaWYgKHIgPCAwKQorCQkJd2FybmluZyhfKCJpbnZhbGlkIHJlbW90ZSBzZXJ2aWNlIHBhdGgiKSk7CisJfQorCisJaWYgKGRhdGEtPmNvbm5lY3QpIHsKKwkJc3RyYnVmX2FkZGYoJmNtZGJ1ZiwgImNvbm5lY3QgJXNcbiIsIG5hbWUpOworCQlyZXQgPSBydW5fY29ubmVjdCh0cmFuc3BvcnQsICZjbWRidWYpOworCX0gZWxzZSBpZiAoZGF0YS0+c3RhdGVsZXNzX2Nvbm5lY3QgJiYKKwkJICAgKGdldF9wcm90b2NvbF92ZXJzaW9uX2NvbmZpZygpID09IHByb3RvY29sX3YyKSAmJgorCQkgICAhc3RyY21wKCJnaXQtdXBsb2FkLXBhY2siLCBuYW1lKSkgeworCQlzdHJidWZfYWRkZigmY21kYnVmLCAic3RhdGVsZXNzLWNvbm5lY3QgJXNcbiIsIG5hbWUpOworCQlyZXQgPSBydW5fY29ubmVjdCh0cmFuc3BvcnQsICZjbWRidWYpOworCQlpZiAocmV0KQorCQkJdHJhbnNwb3J0LT5zdGF0ZWxlc3NfcnBjID0gMTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmY21kYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkJICAgICBpbnQgZm9yX3B1c2gpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqZXhlYzsKKworCW5hbWUgPSBmb3JfcHVzaCA/ICJnaXQtcmVjZWl2ZS1wYWNrIiA6ICJnaXQtdXBsb2FkLXBhY2siOworCWlmIChmb3JfcHVzaCkKKwkJZXhlYyA9IGRhdGEtPnRyYW5zcG9ydF9vcHRpb25zLnJlY2VpdmVwYWNrOworCWVsc2UKKwkJZXhlYyA9IGRhdGEtPnRyYW5zcG9ydF9vcHRpb25zLnVwbG9hZHBhY2s7CisKKwlyZXR1cm4gcHJvY2Vzc19jb25uZWN0X3NlcnZpY2UodHJhbnNwb3J0LCBuYW1lLCBleGVjKTsKK30KKworc3RhdGljIGludCBjb25uZWN0X2hlbHBlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgIGNvbnN0IGNoYXIgKmV4ZWMsIGludCBmZFsyXSkKK3sKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisKKwkvKiBHZXRfaGVscGVyIHNvIGNvbm5lY3QgaXMgaW5pdGVkLiAqLworCWdldF9oZWxwZXIodHJhbnNwb3J0KTsKKwlpZiAoIWRhdGEtPmNvbm5lY3QpCisJCWRpZShfKCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIpKTsKKworCWlmICghcHJvY2Vzc19jb25uZWN0X3NlcnZpY2UodHJhbnNwb3J0LCBuYW1lLCBleGVjKSkKKwkJZGllKF8oImNhbid0IGNvbm5lY3QgdG8gc3Vic2VydmljZSAlcyIpLCBuYW1lKTsKKworCWZkWzBdID0gZGF0YS0+aGVscGVyLT5vdXQ7CisJZmRbMV0gPSBkYXRhLT5oZWxwZXItPmluOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnNfbGlzdF91c2luZ19saXN0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCQkJICAgIGludCBmb3JfcHVzaCk7CisKK3N0YXRpYyBpbnQgZmV0Y2goc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkgaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCWludCBpLCBjb3VudDsKKworCWdldF9oZWxwZXIodHJhbnNwb3J0KTsKKworCWlmIChwcm9jZXNzX2Nvbm5lY3QodHJhbnNwb3J0LCAwKSkgeworCQlkb190YWtlX292ZXIodHJhbnNwb3J0KTsKKwkJcmV0dXJuIHRyYW5zcG9ydC0+dnRhYmxlLT5mZXRjaCh0cmFuc3BvcnQsIG5yX2hlYWRzLCB0b19mZXRjaCk7CisJfQorCisJaWYgKCFkYXRhLT5nZXRfcmVmc19saXN0X2NhbGxlZCkKKwkJZ2V0X3JlZnNfbGlzdF91c2luZ19saXN0KHRyYW5zcG9ydCwgMCk7CisKKwljb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspCisJCWlmICghKHRvX2ZldGNoW2ldLT5zdGF0dXMgJiBSRUZfU1RBVFVTX1VQVE9EQVRFKSkKKwkJCWNvdW50Kys7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKworCWlmIChkYXRhLT5jaGVja19jb25uZWN0aXZpdHkgJiYKKwkgICAgZGF0YS0+dHJhbnNwb3J0X29wdGlvbnMuY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCkKKwkJc2V0X2hlbHBlcl9vcHRpb24odHJhbnNwb3J0LCAiY2hlY2stY29ubmVjdGl2aXR5IiwgInRydWUiKTsKKworCWlmICh0cmFuc3BvcnQtPmNsb25pbmcpCisJCXNldF9oZWxwZXJfb3B0aW9uKHRyYW5zcG9ydCwgImNsb25pbmciLCAidHJ1ZSIpOworCisJaWYgKGRhdGEtPnRyYW5zcG9ydF9vcHRpb25zLnVwZGF0ZV9zaGFsbG93KQorCQlzZXRfaGVscGVyX29wdGlvbih0cmFuc3BvcnQsICJ1cGRhdGUtc2hhbGxvdyIsICJ0cnVlIik7CisKKwlpZiAoZGF0YS0+dHJhbnNwb3J0X29wdGlvbnMuZmlsdGVyX29wdGlvbnMuY2hvaWNlKSB7CisJCWNvbnN0IGNoYXIgKnNwZWMgPSBleHBhbmRfbGlzdF9vYmplY3RzX2ZpbHRlcl9zcGVjKAorCQkJJmRhdGEtPnRyYW5zcG9ydF9vcHRpb25zLmZpbHRlcl9vcHRpb25zKTsKKwkJc2V0X2hlbHBlcl9vcHRpb24odHJhbnNwb3J0LCAiZmlsdGVyIiwgc3BlYyk7CisJfQorCisJaWYgKGRhdGEtPnRyYW5zcG9ydF9vcHRpb25zLm5lZ290aWF0aW9uX3RpcHMpCisJCXdhcm5pbmcoIklnbm9yaW5nIC0tbmVnb3RpYXRpb24tdGlwIGJlY2F1c2UgdGhlIHByb3RvY29sIGRvZXMgbm90IHN1cHBvcnQgaXQuIik7CisKKwlpZiAoZGF0YS0+ZmV0Y2gpCisJCXJldHVybiBmZXRjaF93aXRoX2ZldGNoKHRyYW5zcG9ydCwgbnJfaGVhZHMsIHRvX2ZldGNoKTsKKworCWlmIChkYXRhLT5pbXBvcnQpCisJCXJldHVybiBmZXRjaF93aXRoX2ltcG9ydCh0cmFuc3BvcnQsIG5yX2hlYWRzLCB0b19mZXRjaCk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF91cGRhdGVfcmVmX3N0YXR1cyhzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkJICAgc3RydWN0IHJlZiAqKnJlZiwKKwkJCQkgICBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcykKK3sKKwljaGFyICpyZWZuYW1lLCAqbXNnOworCWludCBzdGF0dXMsIGZvcmNlZCA9IDA7CisKKwlpZiAoc3RhcnRzX3dpdGgoYnVmLT5idWYsICJvayAiKSkgeworCQlzdGF0dXMgPSBSRUZfU1RBVFVTX09LOworCQlyZWZuYW1lID0gYnVmLT5idWYgKyAzOworCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoYnVmLT5idWYsICJlcnJvciAiKSkgeworCQlzdGF0dXMgPSBSRUZfU1RBVFVTX1JFTU9URV9SRUpFQ1Q7CisJCXJlZm5hbWUgPSBidWYtPmJ1ZiArIDY7CisJfSBlbHNlCisJCWRpZShfKCJleHBlY3RlZCBvay9lcnJvciwgaGVscGVyIHNhaWQgJyVzJyIpLCBidWYtPmJ1Zik7CisKKwltc2cgPSBzdHJjaHIocmVmbmFtZSwgJyAnKTsKKwlpZiAobXNnKSB7CisJCXN0cnVjdCBzdHJidWYgbXNnX2J1ZiA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICplbmQ7CisKKwkJKm1zZysrID0gJ1wwJzsKKwkJaWYgKCF1bnF1b3RlX2Nfc3R5bGUoJm1zZ19idWYsIG1zZywgJmVuZCkpCisJCQltc2cgPSBzdHJidWZfZGV0YWNoKCZtc2dfYnVmLCBOVUxMKTsKKwkJZWxzZQorCQkJbXNnID0geHN0cmR1cChtc2cpOworCQlzdHJidWZfcmVsZWFzZSgmbXNnX2J1Zik7CisKKwkJaWYgKCFzdHJjbXAobXNnLCAibm8gbWF0Y2giKSkgeworCQkJc3RhdHVzID0gUkVGX1NUQVRVU19OT05FOworCQkJRlJFRV9BTkRfTlVMTChtc2cpOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAobXNnLCAidXAgdG8gZGF0ZSIpKSB7CisJCQlzdGF0dXMgPSBSRUZfU1RBVFVTX1VQVE9EQVRFOworCQkJRlJFRV9BTkRfTlVMTChtc2cpOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAobXNnLCAibm9uLWZhc3QgZm9yd2FyZCIpKSB7CisJCQlzdGF0dXMgPSBSRUZfU1RBVFVTX1JFSkVDVF9OT05GQVNURk9SV0FSRDsKKwkJCUZSRUVfQU5EX05VTEwobXNnKTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKG1zZywgImFscmVhZHkgZXhpc3RzIikpIHsKKwkJCXN0YXR1cyA9IFJFRl9TVEFUVVNfUkVKRUNUX0FMUkVBRFlfRVhJU1RTOworCQkJRlJFRV9BTkRfTlVMTChtc2cpOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAobXNnLCAiZmV0Y2ggZmlyc3QiKSkgeworCQkJc3RhdHVzID0gUkVGX1NUQVRVU19SRUpFQ1RfRkVUQ0hfRklSU1Q7CisJCQlGUkVFX0FORF9OVUxMKG1zZyk7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcChtc2csICJuZWVkcyBmb3JjZSIpKSB7CisJCQlzdGF0dXMgPSBSRUZfU1RBVFVTX1JFSkVDVF9ORUVEU19GT1JDRTsKKwkJCUZSRUVfQU5EX05VTEwobXNnKTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKG1zZywgInN0YWxlIGluZm8iKSkgeworCQkJc3RhdHVzID0gUkVGX1NUQVRVU19SRUpFQ1RfU1RBTEU7CisJCQlGUkVFX0FORF9OVUxMKG1zZyk7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcChtc2csICJmb3JjZWQgdXBkYXRlIikpIHsKKwkJCWZvcmNlZCA9IDE7CisJCQlGUkVFX0FORF9OVUxMKG1zZyk7CisJCX0KKwl9CisKKwlpZiAoKnJlZikKKwkJKnJlZiA9IGZpbmRfcmVmX2J5X25hbWUoKnJlZiwgcmVmbmFtZSk7CisJaWYgKCEqcmVmKQorCQkqcmVmID0gZmluZF9yZWZfYnlfbmFtZShyZW1vdGVfcmVmcywgcmVmbmFtZSk7CisJaWYgKCEqcmVmKSB7CisJCXdhcm5pbmcoXygiaGVscGVyIHJlcG9ydGVkIHVuZXhwZWN0ZWQgc3RhdHVzIG9mICVzIiksIHJlZm5hbWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoKCpyZWYpLT5zdGF0dXMgIT0gUkVGX1NUQVRVU19OT05FKSB7CisJCS8qCisJCSAqIEVhcmxpZXIsIHRoZSByZWYgd2FzIG1hcmtlZCBub3QgdG8gYmUgcHVzaGVkLCBzbyBpZ25vcmUgdGhlIHJlZgorCQkgKiBzdGF0dXMgcmVwb3J0ZWQgYnkgdGhlIHJlbW90ZSBoZWxwZXIgaWYgdGhlIGxhdHRlciBpcyAnbm8gbWF0Y2gnLgorCQkgKi8KKwkJaWYgKHN0YXR1cyA9PSBSRUZfU1RBVFVTX05PTkUpCisJCQlyZXR1cm4gMTsKKwl9CisKKwkoKnJlZiktPnN0YXR1cyA9IHN0YXR1czsKKwkoKnJlZiktPmZvcmNlZF91cGRhdGUgfD0gZm9yY2VkOworCSgqcmVmKS0+cmVtb3RlX3N0YXR1cyA9IG1zZzsKKwlyZXR1cm4gIShzdGF0dXMgPT0gUkVGX1NUQVRVU19PSyk7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF91cGRhdGVfcmVmc19zdGF0dXMoc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhLAorCQkJCSAgICBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywKKwkJCQkgICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJlZiAqcmVmID0gcmVtb3RlX3JlZnM7CisJaW50IHJldCA9IDA7CisKKwlmb3IgKDs7KSB7CisJCWNoYXIgKnByaXZhdGU7CisKKwkJaWYgKHJlY3ZsaW5lKGRhdGEsICZidWYpKSB7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIWJ1Zi5sZW4pCisJCQlicmVhazsKKworCQlpZiAocHVzaF91cGRhdGVfcmVmX3N0YXR1cygmYnVmLCAmcmVmLCByZW1vdGVfcmVmcykpCisJCQljb250aW51ZTsKKworCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9EUllfUlVOIHx8ICFkYXRhLT5ycy5uciB8fCBkYXRhLT5ub19wcml2YXRlX3VwZGF0ZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHByb3BhZ2F0ZSBiYWNrIHRoZSB1cGRhdGUgdG8gdGhlIHJlbW90ZSBuYW1lc3BhY2UgKi8KKwkJcHJpdmF0ZSA9IGFwcGx5X3JlZnNwZWNzKCZkYXRhLT5ycywgcmVmLT5uYW1lKTsKKwkJaWYgKCFwcml2YXRlKQorCQkJY29udGludWU7CisJCXVwZGF0ZV9yZWYoInVwZGF0ZSBieSBoZWxwZXIiLCBwcml2YXRlLCAmcmVmLT5uZXdfb2lkLCBOVUxMLAorCQkJICAgMCwgMCk7CisJCWZyZWUocHJpdmF0ZSk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jb21tb25fcHVzaF9vcHRpb25zKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpCit7CisJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTikgeworCQlpZiAoc2V0X2hlbHBlcl9vcHRpb24odHJhbnNwb3J0LCAiZHJ5LXJ1biIsICJ0cnVlIikgIT0gMCkKKwkJCWRpZShfKCJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCBkcnktcnVuIiksIG5hbWUpOworCX0gZWxzZSBpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9DRVJUX0FMV0FZUykgeworCQlpZiAoc2V0X2hlbHBlcl9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfUFVTSF9DRVJULCAidHJ1ZSIpICE9IDApCisJCQlkaWUoXygiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiKSwgbmFtZSk7CisJfSBlbHNlIGlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0NFUlRfSUZfQVNLRUQpIHsKKwkJaWYgKHNldF9oZWxwZXJfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX1BVU0hfQ0VSVCwgImlmLWFza2VkIikgIT0gMCkKKwkJCWRpZShfKCJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZD1pZi1hc2tlZCIpLCBuYW1lKTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9BVE9NSUMpCisJCWlmIChzZXRfaGVscGVyX29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9BVE9NSUMsICJ0cnVlIikgIT0gMCkKKwkJCWRpZShfKCJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyIpLCBuYW1lKTsKKworCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX09QVElPTlMpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgdHJhbnNwb3J0LT5wdXNoX29wdGlvbnMpCisJCQlpZiAoc2V0X2hlbHBlcl9vcHRpb24odHJhbnNwb3J0LCAicHVzaC1vcHRpb24iLCBpdGVtLT5zdHJpbmcpICE9IDApCisJCQkJZGllKF8oImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdwdXNoLW9wdGlvbiciKSwgbmFtZSk7CisJfQorfQorCitzdGF0aWMgaW50IHB1c2hfcmVmc193aXRoX3B1c2goc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJICAgICAgIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBpbnQgZmxhZ3MpCit7CisJaW50IGZvcmNlX2FsbCA9IGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRk9SQ0U7CisJaW50IG1pcnJvciA9IGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfTUlSUk9SOworCWludCBhdG9taWMgPSBmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FUT01JQzsKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmICpyZWY7CisJc3RydWN0IHN0cmluZ19saXN0IGNhc19vcHRpb25zID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmNhc19vcHRpb247CisKKwlnZXRfaGVscGVyKHRyYW5zcG9ydCk7CisJaWYgKCFkYXRhLT5wdXNoKQorCQlyZXR1cm4gMTsKKworCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmICghcmVmLT5wZWVyX3JlZiAmJiAhbWlycm9yKQorCQkJY29udGludWU7CisKKwkJLyogQ2hlY2sgZm9yIHN0YXR1c2VzIHNldCBieSBzZXRfcmVmX3N0YXR1c19mb3JfcHVzaCgpICovCisJCXN3aXRjaCAocmVmLT5zdGF0dXMpIHsKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9OT05GQVNURk9SV0FSRDoKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9TVEFMRToKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9BTFJFQURZX0VYSVNUUzoKKwkJCWlmIChhdG9taWMpIHsKKwkJCQlyZWplY3RfYXRvbWljX3B1c2gocmVtb3RlX3JlZnMsIG1pcnJvcik7CisJCQkJc3RyaW5nX2xpc3RfY2xlYXIoJmNhc19vcHRpb25zLCAwKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0gZWxzZQorCQkJCWNvbnRpbnVlOworCQljYXNlIFJFRl9TVEFUVVNfVVBUT0RBVEU6CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCTsgLyogZG8gbm90aGluZyAqLworCQl9CisKKwkJaWYgKGZvcmNlX2FsbCkKKwkJCXJlZi0+Zm9yY2UgPSAxOworCisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgInB1c2ggIik7CisJCWlmICghcmVmLT5kZWxldGlvbikgeworCQkJaWYgKHJlZi0+Zm9yY2UpCisJCQkJc3RyYnVmX2FkZGNoKCZidWYsICcrJyk7CisJCQlpZiAocmVmLT5wZWVyX3JlZikKKwkJCQlzdHJidWZfYWRkc3RyKCZidWYsIHJlZi0+cGVlcl9yZWYtPm5hbWUpOworCQkJZWxzZQorCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1Ziwgb2lkX3RvX2hleCgmcmVmLT5uZXdfb2lkKSk7CisJCX0KKwkJc3RyYnVmX2FkZGNoKCZidWYsICc6Jyk7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcmVmLT5uYW1lKTsKKwkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCisJCS8qCisJCSAqIFRoZSAiLS1mb3JjZS13aXRoLWxlYXNlIiBvcHRpb25zIHdpdGhvdXQgZXhwbGljaXQKKwkJICogdmFsdWVzIHRvIGV4cGVjdCBoYXZlIGFscmVhZHkgYmVlbiBleHBhbmRlZCBpbnRvCisJCSAqIHRoZSByZWYtPm9sZF9vaWRfZXhwZWN0W10gZmllbGQ7IHdlIGNhbiBpZ25vcmUKKwkJICogdHJhbnNwb3J0LT5zbWFydF9vcHRpb25zLT5jYXMgYWx0b2dldGhlciBhbmQgaW5zdGVhZAorCQkgKiBjYW4gZW51bWVyYXRlIHRoZW0gZnJvbSB0aGUgcmVmcy4KKwkJICovCisJCWlmIChyZWYtPmV4cGVjdF9vbGRfc2hhMSkgeworCQkJc3RydWN0IHN0cmJ1ZiBjYXMgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRmKCZjYXMsICIlczolcyIsCisJCQkJICAgIHJlZi0+bmFtZSwgb2lkX3RvX2hleCgmcmVmLT5vbGRfb2lkX2V4cGVjdCkpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKCZjYXNfb3B0aW9ucywKKwkJCQkJCSBzdHJidWZfZGV0YWNoKCZjYXMsIE5VTEwpKTsKKwkJfQorCX0KKwlpZiAoYnVmLmxlbiA9PSAwKSB7CisJCXN0cmluZ19saXN0X2NsZWFyKCZjYXNfb3B0aW9ucywgMCk7CisJCXJldHVybiAwOworCX0KKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oY2FzX29wdGlvbiwgJmNhc19vcHRpb25zKQorCQlzZXRfaGVscGVyX29wdGlvbih0cmFuc3BvcnQsICJjYXMiLCBjYXNfb3B0aW9uLT5zdHJpbmcpOworCXNldF9jb21tb25fcHVzaF9vcHRpb25zKHRyYW5zcG9ydCwgZGF0YS0+bmFtZSwgZmxhZ3MpOworCisJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCXNlbmRsaW5lKGRhdGEsICZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmluZ19saXN0X2NsZWFyKCZjYXNfb3B0aW9ucywgMCk7CisKKwlyZXR1cm4gcHVzaF91cGRhdGVfcmVmc19zdGF0dXMoZGF0YSwgcmVtb3RlX3JlZnMsIGZsYWdzKTsKK30KKworc3RhdGljIGludCBwdXNoX3JlZnNfd2l0aF9leHBvcnQoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQlzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgaW50IGZsYWdzKQoreworCXN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqaGVscGVyLCBleHBvcnRlcjsKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IHN0cmluZ19saXN0IHJldmxpc3RfYXJncyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIWRhdGEtPnJzLm5yKQorCQlkaWUoXygicmVtb3RlLWhlbHBlciBkb2Vzbid0IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiKSk7CisKKwlzZXRfY29tbW9uX3B1c2hfb3B0aW9ucyh0cmFuc3BvcnQsIGRhdGEtPm5hbWUsIGZsYWdzKTsKKwlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9GT1JDRSkgeworCQlpZiAoc2V0X2hlbHBlcl9vcHRpb24odHJhbnNwb3J0LCAiZm9yY2UiLCAidHJ1ZSIpICE9IDApCisJCQl3YXJuaW5nKF8oImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdmb3JjZSciKSwgZGF0YS0+bmFtZSk7CisJfQorCisJaGVscGVyID0gZ2V0X2hlbHBlcih0cmFuc3BvcnQpOworCisJd3JpdGVfY29uc3RhbnQoaGVscGVyLT5pbiwgImV4cG9ydFxuIik7CisKKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQljaGFyICpwcml2YXRlOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCQlwcml2YXRlID0gYXBwbHlfcmVmc3BlY3MoJmRhdGEtPnJzLCByZWYtPm5hbWUpOworCQlpZiAocHJpdmF0ZSAmJiAhZ2V0X29pZChwcml2YXRlLCAmb2lkKSkgeworCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIl4lcyIsIHByaXZhdGUpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKCZyZXZsaXN0X2FyZ3MsCisJCQkJCQkgc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKSk7CisJCQlvaWRjcHkoJnJlZi0+b2xkX29pZCwgJm9pZCk7CisJCX0KKwkJZnJlZShwcml2YXRlKTsKKworCQlpZiAocmVmLT5wZWVyX3JlZikgeworCQkJaWYgKHN0cmNtcChyZWYtPm5hbWUsIHJlZi0+cGVlcl9yZWYtPm5hbWUpKSB7CisJCQkJaWYgKCFyZWYtPmRlbGV0aW9uKSB7CisJCQkJCWNvbnN0IGNoYXIgKm5hbWU7CisJCQkJCWludCBmbGFnOworCisJCQkJCS8qIEZvbGxvdyBzeW1ib2xpYyByZWZzIChtYWlubHkgZm9yIEhFQUQpLiAqLworCQkJCQluYW1lID0gcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZi0+cGVlcl9yZWYtPm5hbWUsCisJCQkJCQkJCSAgUkVTT0xWRV9SRUZfUkVBRElORywKKwkJCQkJCQkJICAmb2lkLCAmZmxhZyk7CisJCQkJCWlmICghbmFtZSB8fCAhKGZsYWcgJiBSRUZfSVNTWU1SRUYpKQorCQkJCQkJbmFtZSA9IHJlZi0+cGVlcl9yZWYtPm5hbWU7CisKKwkJCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzOiVzIiwgbmFtZSwgcmVmLT5uYW1lKTsKKwkJCQl9IGVsc2UKKwkJCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIjolcyIsIHJlZi0+bmFtZSk7CisKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJldmxpc3RfYXJncywgIi0tcmVmc3BlYyIpOworCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmV2bGlzdF9hcmdzLCBidWYuYnVmKTsKKwkJCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJCX0KKwkJCWlmICghcmVmLT5kZWxldGlvbikKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJldmxpc3RfYXJncywgcmVmLT5wZWVyX3JlZi0+bmFtZSk7CisJCX0KKwl9CisKKwlpZiAoZ2V0X2V4cG9ydGVyKHRyYW5zcG9ydCwgJmV4cG9ydGVyLCAmcmV2bGlzdF9hcmdzKSkKKwkJZGllKF8oImNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIpKTsKKworCXN0cmluZ19saXN0X2NsZWFyKCZyZXZsaXN0X2FyZ3MsIDEpOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZleHBvcnRlcikpCisJCWRpZShfKCJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtZXhwb3J0IikpOworCWlmIChwdXNoX3VwZGF0ZV9yZWZzX3N0YXR1cyhkYXRhLCByZW1vdGVfcmVmcywgZmxhZ3MpKQorCQlyZXR1cm4gMTsKKworCWlmIChkYXRhLT5leHBvcnRfbWFya3MpIHsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzLnRtcCIsIGRhdGEtPmV4cG9ydF9tYXJrcyk7CisJCXJlbmFtZShidWYuYnVmLCBkYXRhLT5leHBvcnRfbWFya3MpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXNoX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQlzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgaW50IGZsYWdzKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKworCWlmIChwcm9jZXNzX2Nvbm5lY3QodHJhbnNwb3J0LCAxKSkgeworCQlkb190YWtlX292ZXIodHJhbnNwb3J0KTsKKwkJcmV0dXJuIHRyYW5zcG9ydC0+dnRhYmxlLT5wdXNoX3JlZnModHJhbnNwb3J0LCByZW1vdGVfcmVmcywgZmxhZ3MpOworCX0KKworCWlmICghcmVtb3RlX3JlZnMpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQlfKCJObyByZWZzIGluIGNvbW1vbiBhbmQgbm9uZSBzcGVjaWZpZWQ7IGRvaW5nIG5vdGhpbmcuXG4iCisJCQkgICJQZXJoYXBzIHlvdSBzaG91bGQgc3BlY2lmeSBhIGJyYW5jaCBzdWNoIGFzICdtYXN0ZXInLlxuIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZGF0YS0+cHVzaCkKKwkJcmV0dXJuIHB1c2hfcmVmc193aXRoX3B1c2godHJhbnNwb3J0LCByZW1vdGVfcmVmcywgZmxhZ3MpOworCisJaWYgKGRhdGEtPmV4cG9ydCkKKwkJcmV0dXJuIHB1c2hfcmVmc193aXRoX2V4cG9ydCh0cmFuc3BvcnQsIHJlbW90ZV9yZWZzLCBmbGFncyk7CisKKwlyZXR1cm4gLTE7Cit9CisKKworc3RhdGljIGludCBoYXNfYXR0cmlidXRlKGNvbnN0IGNoYXIgKmF0dHJzLCBjb25zdCBjaGFyICphdHRyKQoreworCWludCBsZW47CisJaWYgKCFhdHRycykKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBzdHJsZW4oYXR0cik7CisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpzcGFjZSA9IHN0cmNocm51bChhdHRycywgJyAnKTsKKwkJaWYgKGxlbiA9PSBzcGFjZSAtIGF0dHJzICYmICFzdHJuY21wKGF0dHJzLCBhdHRyLCBsZW4pKQorCQkJcmV0dXJuIDE7CisJCWlmICghKnNwYWNlKQorCQkJcmV0dXJuIDA7CisJCWF0dHJzID0gc3BhY2UgKyAxOworCX0KK30KKworc3RhdGljIHN0cnVjdCByZWYgKmdldF9yZWZzX2xpc3Qoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgZm9yX3B1c2gsCisJCQkJIGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICpyZWZfcHJlZml4ZXMpCit7CisJZ2V0X2hlbHBlcih0cmFuc3BvcnQpOworCisJaWYgKHByb2Nlc3NfY29ubmVjdCh0cmFuc3BvcnQsIGZvcl9wdXNoKSkgeworCQlkb190YWtlX292ZXIodHJhbnNwb3J0KTsKKwkJcmV0dXJuIHRyYW5zcG9ydC0+dnRhYmxlLT5nZXRfcmVmc19saXN0KHRyYW5zcG9ydCwgZm9yX3B1c2gsIHJlZl9wcmVmaXhlcyk7CisJfQorCisJcmV0dXJuIGdldF9yZWZzX2xpc3RfdXNpbmdfbGlzdCh0cmFuc3BvcnQsIGZvcl9wdXNoKTsKK30KKworc3RhdGljIHN0cnVjdCByZWYgKmdldF9yZWZzX2xpc3RfdXNpbmdfbGlzdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkJCSAgICBpbnQgZm9yX3B1c2gpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpoZWxwZXI7CisJc3RydWN0IHJlZiAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICoqdGFpbCA9ICZyZXQ7CisJc3RydWN0IHJlZiAqcG9zbjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJZGF0YS0+Z2V0X3JlZnNfbGlzdF9jYWxsZWQgPSAxOworCWhlbHBlciA9IGdldF9oZWxwZXIodHJhbnNwb3J0KTsKKworCWlmIChkYXRhLT5wdXNoICYmIGZvcl9wdXNoKQorCQl3cml0ZV9zdHJfaW5fZnVsbChoZWxwZXItPmluLCAibGlzdCBmb3ItcHVzaFxuIik7CisJZWxzZQorCQl3cml0ZV9zdHJfaW5fZnVsbChoZWxwZXItPmluLCAibGlzdFxuIik7CisKKwl3aGlsZSAoMSkgeworCQljaGFyICplb3YsICplb247CisJCWlmIChyZWN2bGluZShkYXRhLCAmYnVmKSkKKwkJCWV4aXQoMTI4KTsKKworCQlpZiAoISpidWYuYnVmKQorCQkJYnJlYWs7CisKKwkJZW92ID0gc3RyY2hyKGJ1Zi5idWYsICcgJyk7CisJCWlmICghZW92KQorCQkJZGllKF8oIm1hbGZvcm1lZCByZXNwb25zZSBpbiByZWYgbGlzdDogJXMiKSwgYnVmLmJ1Zik7CisJCWVvbiA9IHN0cmNocihlb3YgKyAxLCAnICcpOworCQkqZW92ID0gJ1wwJzsKKwkJaWYgKGVvbikKKwkJCSplb24gPSAnXDAnOworCQkqdGFpbCA9IGFsbG9jX3JlZihlb3YgKyAxKTsKKwkJaWYgKGJ1Zi5idWZbMF0gPT0gJ0AnKQorCQkJKCp0YWlsKS0+c3ltcmVmID0geHN0cmR1cChidWYuYnVmICsgMSk7CisJCWVsc2UgaWYgKGJ1Zi5idWZbMF0gIT0gJz8nKQorCQkJZ2V0X29pZF9oZXgoYnVmLmJ1ZiwgJigqdGFpbCktPm9sZF9vaWQpOworCQlpZiAoZW9uKSB7CisJCQlpZiAoaGFzX2F0dHJpYnV0ZShlb24gKyAxLCAidW5jaGFuZ2VkIikpIHsKKwkJCQkoKnRhaWwpLT5zdGF0dXMgfD0gUkVGX1NUQVRVU19VUFRPREFURTsKKwkJCQlpZiAocmVhZF9yZWYoKCp0YWlsKS0+bmFtZSwgJigqdGFpbCktPm9sZF9vaWQpIDwgMCkKKwkJCQkJZGllKF8oImNvdWxkIG5vdCByZWFkIHJlZiAlcyIpLAorCQkJCQkgICAgKCp0YWlsKS0+bmFtZSk7CisJCQl9CisJCX0KKwkJdGFpbCA9ICYoKCp0YWlsKS0+bmV4dCk7CisJfQorCWlmIChkZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogUmVhZCByZWYgbGlzdGluZy5cbiIpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJZm9yIChwb3NuID0gcmV0OyBwb3NuOyBwb3NuID0gcG9zbi0+bmV4dCkKKwkJcmVzb2x2ZV9yZW1vdGVfc3ltcmVmKHBvc24sIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHRyYW5zcG9ydF92dGFibGUgdnRhYmxlID0geworCXNldF9oZWxwZXJfb3B0aW9uLAorCWdldF9yZWZzX2xpc3QsCisJZmV0Y2gsCisJcHVzaF9yZWZzLAorCWNvbm5lY3RfaGVscGVyLAorCXJlbGVhc2VfaGVscGVyCit9OworCitpbnQgdHJhbnNwb3J0X2hlbHBlcl9pbml0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB4Y2FsbG9jKDEsIHNpemVvZigqZGF0YSkpOworCWRhdGEtPm5hbWUgPSBuYW1lOworCisJdHJhbnNwb3J0X2NoZWNrX2FsbG93ZWQobmFtZSk7CisKKwlpZiAoZ2V0ZW52KCJHSVRfVFJBTlNQT1JUX0hFTFBFUl9ERUJVRyIpKQorCQlkZWJ1ZyA9IDE7CisKKwl0cmFuc3BvcnQtPmRhdGEgPSBkYXRhOworCXRyYW5zcG9ydC0+dnRhYmxlID0gJnZ0YWJsZTsKKwl0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMgPSAmKGRhdGEtPnRyYW5zcG9ydF9vcHRpb25zKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIExpbnV4IHBpcGVzIGNhbiBidWZmZXIgNjU1MzYgYnl0ZXMgYXQgb25jZSAoYW5kIG1vc3QgcGxhdGZvcm1zIGNhbgorICogYnVmZmVyIGxlc3MpLCBzbyBhdHRlbXB0IHJlYWRzIGFuZCB3cml0ZXMgd2l0aCB1cCB0byB0aGF0IHNpemUuCisgKi8KKyNkZWZpbmUgQlVGRkVSU0laRSA2NTUzNgorLyogVGhpcyBzaG91bGQgYmUgZW5vdWdoIHRvIGhvbGQgZGVidWdnaW5nIG1lc3NhZ2UuICovCisjZGVmaW5lIFBCVUZGRVJTSVpFIDgxOTIKKworLyogUHJpbnQgYmlkaXJlY3Rpb25hbCB0cmFuc2ZlciBsb29wIGRlYnVnIG1lc3NhZ2UuICovCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorc3RhdGljIHZvaWQgdHJhbnNmZXJfZGVidWcoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJLyoKKwkgKiBORUVEU1dPUks6IFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIHVzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLCBhbmQKKwkgKiB3ZSBlbmQgdXAgdXNpbmcgZGVidWdfZW5hYmxlZCByYWNpbHkuIFRoYXQgInNob3VsZCBub3QgbWF0dGVyIiBzaW5jZQorCSAqIHdlIGFsd2F5cyB3cml0ZSB0aGUgc2FtZSB2YWx1ZSwgYnV0IGl0J3Mgc3RpbGwgd3JvbmcuIFRoaXMgZnVuY3Rpb24KKwkgKiBpcyBsaXN0ZWQgaW4gLnRzYW4tc3VwcHJlc3Npb25zIGZvciB0aGUgdGltZSBiZWluZy4KKwkgKi8KKworCXZhX2xpc3QgYXJnczsKKwljaGFyIG1zZ2J1ZltQQlVGRkVSU0laRV07CisJc3RhdGljIGludCBkZWJ1Z19lbmFibGVkID0gLTE7CisKKwlpZiAoZGVidWdfZW5hYmxlZCA8IDApCisJCWRlYnVnX2VuYWJsZWQgPSBnZXRlbnYoIkdJVF9UUkFOU0xPT1BfREVCVUciKSA/IDEgOiAwOworCWlmICghZGVidWdfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwl2c25wcmludGYobXNnYnVmLCBQQlVGRkVSU0laRSwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJZnByaW50ZihzdGRlcnIsICJUcmFuc2ZlciBsb29wIGRlYnVnZ2luZzogJXNcbiIsIG1zZ2J1Zik7Cit9CisKKy8qIFN0cmVhbSBzdGF0ZTogTW9yZSBkYXRhIG1heSBiZSBjb21pbmcgaW4gdGhpcyBkaXJlY3Rpb24uICovCisjZGVmaW5lIFNTVEFURV9UUkFOU0ZFUlJJTkcgMAorLyoKKyAqIFN0cmVhbSBzdGF0ZTogTm8gbW9yZSBkYXRhIGNvbWluZyBpbiB0aGlzIGRpcmVjdGlvbiwgZmx1c2hpbmcgcmVzdCBvZgorICogZGF0YS4KKyAqLworI2RlZmluZSBTU1RBVEVfRkxVU0hJTkcgMQorLyogU3RyZWFtIHN0YXRlOiBUcmFuc2ZlciBpbiB0aGlzIGRpcmVjdGlvbiBmaW5pc2hlZC4gKi8KKyNkZWZpbmUgU1NUQVRFX0ZJTklTSEVEIDIKKworI2RlZmluZSBTVEFURV9ORUVEU19SRUFESU5HKHN0YXRlKSAoKHN0YXRlKSA8PSBTU1RBVEVfVFJBTlNGRVJSSU5HKQorI2RlZmluZSBTVEFURV9ORUVEU19XUklUSU5HKHN0YXRlKSAoKHN0YXRlKSA8PSBTU1RBVEVfRkxVU0hJTkcpCisjZGVmaW5lIFNUQVRFX05FRURTX0NMT1NJTkcoc3RhdGUpICgoc3RhdGUpID09IFNTVEFURV9GTFVTSElORykKKworLyogVW5pZGlyZWN0aW9uYWwgdHJhbnNmZXIuICovCitzdHJ1Y3QgdW5pZGlyZWN0aW9uYWxfdHJhbnNmZXIgeworCS8qIFNvdXJjZSAqLworCWludCBzcmM7CisJLyogRGVzdGluYXRpb24gKi8KKwlpbnQgZGVzdDsKKwkvKiBJcyBzb3VyY2Ugc29ja2V0PyAqLworCWludCBzcmNfaXNfc29jazsKKwkvKiBJcyBkZXN0aW5hdGlvbiBzb2NrZXQ/ICovCisJaW50IGRlc3RfaXNfc29jazsKKwkvKiBUcmFuc2ZlciBzdGF0ZSAoVFJBTlNGRVJSSU5HL0ZMVVNISU5HL0ZJTklTSEVEKSAqLworCWludCBzdGF0ZTsKKwkvKiBCdWZmZXIuICovCisJY2hhciBidWZbQlVGRkVSU0laRV07CisJLyogQnVmZmVyIHVzZWQuICovCisJc2l6ZV90IGJ1ZnVzZTsKKwkvKiBOYW1lIG9mIHNvdXJjZS4gKi8KKwljb25zdCBjaGFyICpzcmNfbmFtZTsKKwkvKiBOYW1lIG9mIGRlc3RpbmF0aW9uLiAqLworCWNvbnN0IGNoYXIgKmRlc3RfbmFtZTsKK307CisKKy8qIENsb3NlcyB0aGUgdGFyZ2V0IChmb3Igd3JpdGluZykgaWYgdHJhbnNmZXIgaGFzIGZpbmlzaGVkLiAqLworc3RhdGljIHZvaWQgdWR0X2Nsb3NlX2lmX2ZpbmlzaGVkKHN0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciAqdCkKK3sKKwlpZiAoU1RBVEVfTkVFRFNfQ0xPU0lORyh0LT5zdGF0ZSkgJiYgIXQtPmJ1ZnVzZSkgeworCQl0LT5zdGF0ZSA9IFNTVEFURV9GSU5JU0hFRDsKKwkJaWYgKHQtPmRlc3RfaXNfc29jaykKKwkJCXNodXRkb3duKHQtPmRlc3QsIFNIVVRfV1IpOworCQllbHNlCisJCQljbG9zZSh0LT5kZXN0KTsKKwkJdHJhbnNmZXJfZGVidWcoIkNsb3NlZCAlcy4iLCB0LT5kZXN0X25hbWUpOworCX0KK30KKworLyoKKyAqIFRyaWVzIHRvIHJlYWQgZGF0YSBmcm9tIHNvdXJjZSBpbnRvIGJ1ZmZlci4gSWYgYnVmZmVyIGlzIGZ1bGwsCisgKiBubyBkYXRhIGlzIHJlYWQuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCB1ZHRfZG9fcmVhZChzdHJ1Y3QgdW5pZGlyZWN0aW9uYWxfdHJhbnNmZXIgKnQpCit7CisJc3NpemVfdCBieXRlczsKKworCWlmICh0LT5idWZ1c2UgPT0gQlVGRkVSU0laRSkKKwkJcmV0dXJuIDA7CS8qIE5vIHNwYWNlIGZvciBtb3JlLiAqLworCisJdHJhbnNmZXJfZGVidWcoIiVzIGlzIHJlYWRhYmxlIiwgdC0+c3JjX25hbWUpOworCWJ5dGVzID0geHJlYWQodC0+c3JjLCB0LT5idWYgKyB0LT5idWZ1c2UsIEJVRkZFUlNJWkUgLSB0LT5idWZ1c2UpOworCWlmIChieXRlcyA8IDApIHsKKwkJZXJyb3JfZXJybm8oXygicmVhZCglcykgZmFpbGVkIiksIHQtPnNyY19uYW1lKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAoYnl0ZXMgPT0gMCkgeworCQl0cmFuc2Zlcl9kZWJ1ZygiJXMgRU9GICh3aXRoICVpIGJ5dGVzIGluIGJ1ZmZlcikiLAorCQkJdC0+c3JjX25hbWUsIChpbnQpdC0+YnVmdXNlKTsKKwkJdC0+c3RhdGUgPSBTU1RBVEVfRkxVU0hJTkc7CisJfSBlbHNlIGlmIChieXRlcyA+IDApIHsKKwkJdC0+YnVmdXNlICs9IGJ5dGVzOworCQl0cmFuc2Zlcl9kZWJ1ZygiUmVhZCAlaSBieXRlcyBmcm9tICVzIChidWZmZXIgbm93IGF0ICVpKSIsCisJCQkoaW50KWJ5dGVzLCB0LT5zcmNfbmFtZSwgKGludCl0LT5idWZ1c2UpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogVHJpZXMgdG8gd3JpdGUgZGF0YSBmcm9tIGJ1ZmZlciBpbnRvIGRlc3RpbmF0aW9uLiBJZiBidWZmZXIgaXMgZW1wdHksCisgKiBubyBkYXRhIGlzIHdyaXR0ZW4uIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCB1ZHRfZG9fd3JpdGUoc3RydWN0IHVuaWRpcmVjdGlvbmFsX3RyYW5zZmVyICp0KQoreworCXNzaXplX3QgYnl0ZXM7CisKKwlpZiAodC0+YnVmdXNlID09IDApCisJCXJldHVybiAwOwkvKiBOb3RoaW5nIHRvIHdyaXRlLiAqLworCisJdHJhbnNmZXJfZGVidWcoIiVzIGlzIHdyaXRhYmxlIiwgdC0+ZGVzdF9uYW1lKTsKKwlieXRlcyA9IHh3cml0ZSh0LT5kZXN0LCB0LT5idWYsIHQtPmJ1ZnVzZSk7CisJaWYgKGJ5dGVzIDwgMCkgeworCQllcnJvcl9lcnJubyhfKCJ3cml0ZSglcykgZmFpbGVkIiksIHQtPmRlc3RfbmFtZSk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKGJ5dGVzID4gMCkgeworCQl0LT5idWZ1c2UgLT0gYnl0ZXM7CisJCWlmICh0LT5idWZ1c2UpCisJCQltZW1tb3ZlKHQtPmJ1ZiwgdC0+YnVmICsgYnl0ZXMsIHQtPmJ1ZnVzZSk7CisJCXRyYW5zZmVyX2RlYnVnKCJXcm90ZSAlaSBieXRlcyB0byAlcyAoYnVmZmVyIG5vdyBhdCAlaSkiLAorCQkJKGludClieXRlcywgdC0+ZGVzdF9uYW1lLCAoaW50KXQtPmJ1ZnVzZSk7CisJfQorCXJldHVybiAwOworfQorCisKKy8qIFN0YXRlIG9mIGJpZGlyZWN0aW9uYWwgdHJhbnNmZXIgbG9vcC4gKi8KK3N0cnVjdCBiaWRpcmVjdGlvbmFsX3RyYW5zZmVyX3N0YXRlIHsKKwkvKiBEaXJlY3Rpb24gZnJvbSBwcm9ncmFtIHRvIGdpdC4gKi8KKwlzdHJ1Y3QgdW5pZGlyZWN0aW9uYWxfdHJhbnNmZXIgcHRnOworCS8qIERpcmVjdGlvbiBmcm9tIGdpdCB0byBwcm9ncmFtLiAqLworCXN0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciBndHA7Cit9OworCitzdGF0aWMgdm9pZCAqdWR0X2NvcHlfdGFza19yb3V0aW5lKHZvaWQgKnVkdCkKK3sKKwlzdHJ1Y3QgdW5pZGlyZWN0aW9uYWxfdHJhbnNmZXIgKnQgPSAoc3RydWN0IHVuaWRpcmVjdGlvbmFsX3RyYW5zZmVyICopdWR0OworCXdoaWxlICh0LT5zdGF0ZSAhPSBTU1RBVEVfRklOSVNIRUQpIHsKKwkJaWYgKFNUQVRFX05FRURTX1JFQURJTkcodC0+c3RhdGUpKQorCQkJaWYgKHVkdF9kb19yZWFkKHQpKQorCQkJCXJldHVybiBOVUxMOworCQlpZiAoU1RBVEVfTkVFRFNfV1JJVElORyh0LT5zdGF0ZSkpCisJCQlpZiAodWR0X2RvX3dyaXRlKHQpKQorCQkJCXJldHVybiBOVUxMOworCQlpZiAoU1RBVEVfTkVFRFNfQ0xPU0lORyh0LT5zdGF0ZSkpCisJCQl1ZHRfY2xvc2VfaWZfZmluaXNoZWQodCk7CisJfQorCXJldHVybiB1ZHQ7CS8qIEp1c3Qgc29tZSBub24tTlVMTCB2YWx1ZS4gKi8KK30KKworI2lmbmRlZiBOT19QVEhSRUFEUworCisvKgorICogSm9pbiB0aHJlYWQsIHdpdGggYXBwcm9wcmlhdGUgZXJyb3JzIG9uIGZhaWx1cmUuIE5hbWUgaXMgbmFtZSBmb3IgdGhlCisgKiB0aHJlYWQgKGZvciBlcnJvciBtZXNzYWdlcykuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgdGxvb3Bfam9pbihwdGhyZWFkX3QgdGhyZWFkLCBjb25zdCBjaGFyICpuYW1lKQoreworCWludCBlcnI7CisJdm9pZCAqdHJldDsKKwllcnIgPSBwdGhyZWFkX2pvaW4odGhyZWFkLCAmdHJldCk7CisJaWYgKCF0cmV0KSB7CisJCWVycm9yKF8oIiVzIHRocmVhZCBmYWlsZWQiKSwgbmFtZSk7CisJCXJldHVybiAxOworCX0KKwlpZiAoZXJyKSB7CisJCWVycm9yKF8oIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiKSwgbmFtZSwgc3RyZXJyb3IoZXJyKSk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNwYXduIHRoZSB0cmFuc2ZlciB0YXNrcyBhbmQgdGhlbiB3YWl0IGZvciB0aGVtLiBSZXR1cm5zIDAgb24gc3VjY2VzcywKKyAqIC0xIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgdGxvb3Bfc3Bhd253YWl0X3Rhc2tzKHN0cnVjdCBiaWRpcmVjdGlvbmFsX3RyYW5zZmVyX3N0YXRlICpzKQoreworCXB0aHJlYWRfdCBndHBfdGhyZWFkOworCXB0aHJlYWRfdCBwdGdfdGhyZWFkOworCWludCBlcnI7CisJaW50IHJldCA9IDA7CisJZXJyID0gcHRocmVhZF9jcmVhdGUoJmd0cF90aHJlYWQsIE5VTEwsIHVkdF9jb3B5X3Rhc2tfcm91dGluZSwKKwkJJnMtPmd0cCk7CisJaWYgKGVycikKKwkJZGllKF8oImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhOiAlcyIpLCBzdHJlcnJvcihlcnIpKTsKKwllcnIgPSBwdGhyZWFkX2NyZWF0ZSgmcHRnX3RocmVhZCwgTlVMTCwgdWR0X2NvcHlfdGFza19yb3V0aW5lLAorCQkmcy0+cHRnKTsKKwlpZiAoZXJyKQorCQlkaWUoXygiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGE6ICVzIiksIHN0cmVycm9yKGVycikpOworCisJcmV0IHw9IHRsb29wX2pvaW4oZ3RwX3RocmVhZCwgIkdpdCB0byBwcm9ncmFtIGNvcHkiKTsKKwlyZXQgfD0gdGxvb3Bfam9pbihwdGdfdGhyZWFkLCAiUHJvZ3JhbSB0byBnaXQgY29weSIpOworCXJldHVybiByZXQ7Cit9CisjZWxzZQorCisvKiBDbG9zZSB0aGUgc291cmNlIGFuZCB0YXJnZXQgKGZvciB3cml0aW5nKSBmb3IgdHJhbnNmZXIuICovCitzdGF0aWMgdm9pZCB1ZHRfa2lsbF90cmFuc2ZlcihzdHJ1Y3QgdW5pZGlyZWN0aW9uYWxfdHJhbnNmZXIgKnQpCit7CisJdC0+c3RhdGUgPSBTU1RBVEVfRklOSVNIRUQ7CisJLyoKKwkgKiBTb2NrZXQgcmVhZCBlbmQgbGVmdCBvcGVuIGlzbid0IGEgZGlzYXN0ZXIgaWYgbm9ib2R5CisJICogYXR0ZW1wdHMgdG8gcmVhZCBmcm9tIGl0IChtaW5ndyBjb21wYXQgaGVhZGVycyBkbyBub3QKKwkgKiBoYXZlIFNIVVRfUkQpLi4uCisJICoKKwkgKiBXZSBjYW4ndCBmdWxseSBjbG9zZSB0aGUgc29ja2V0IHNpbmNlIG90aGVyd2lzZSBndHAKKwkgKiB0YXNrIHdvdWxkIGZpcnN0IGNsb3NlIHRoZSBzb2NrZXQgaXQgc2VuZHMgZGF0YSB0bworCSAqIHdoaWxlIGNsb3NpbmcgdGhlIHB0ZyBmaWxlIGRlc2NyaXB0b3JzLgorCSAqLworCWlmICghdC0+c3JjX2lzX3NvY2spCisJCWNsb3NlKHQtPnNyYyk7CisJaWYgKHQtPmRlc3RfaXNfc29jaykKKwkJc2h1dGRvd24odC0+ZGVzdCwgU0hVVF9XUik7CisJZWxzZQorCQljbG9zZSh0LT5kZXN0KTsKK30KKworLyoKKyAqIEpvaW4gcHJvY2Vzcywgd2l0aCBhcHByb3ByaWF0ZSBlcnJvcnMgb24gZmFpbHVyZS4gTmFtZSBpcyBuYW1lIGZvciB0aGUKKyAqIHByb2Nlc3MgKGZvciBlcnJvciBtZXNzYWdlcykuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgdGxvb3Bfam9pbihwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IHRyZXQ7CisJaWYgKHdhaXRwaWQocGlkLCAmdHJldCwgMCkgPCAwKSB7CisJCWVycm9yX2Vycm5vKF8oIiVzIHByb2Nlc3MgZmFpbGVkIHRvIHdhaXQiKSwgbmFtZSk7CisJCXJldHVybiAxOworCX0KKwlpZiAoIVdJRkVYSVRFRCh0cmV0KSB8fCBXRVhJVFNUQVRVUyh0cmV0KSkgeworCQllcnJvcihfKCIlcyBwcm9jZXNzIGZhaWxlZCIpLCBuYW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogU3Bhd24gdGhlIHRyYW5zZmVyIHRhc2tzIGFuZCB0aGVuIHdhaXQgZm9yIHRoZW0uIFJldHVybnMgMCBvbiBzdWNjZXNzLAorICogLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB0bG9vcF9zcGF3bndhaXRfdGFza3Moc3RydWN0IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfc3RhdGUgKnMpCit7CisJcGlkX3QgcGlkMSwgcGlkMjsKKwlpbnQgcmV0ID0gMDsKKworCS8qIEZvcmsgdGhyZWFkICMxOiBnaXQgdG8gcHJvZ3JhbS4gKi8KKwlwaWQxID0gZm9yaygpOworCWlmIChwaWQxIDwgMCkKKwkJZGllX2Vycm5vKF8oImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhIikpOworCWVsc2UgaWYgKHBpZDEgPT0gMCkgeworCQl1ZHRfa2lsbF90cmFuc2Zlcigmcy0+cHRnKTsKKwkJZXhpdCh1ZHRfY29weV90YXNrX3JvdXRpbmUoJnMtPmd0cCkgPyAwIDogMSk7CisJfQorCisJLyogRm9yayB0aHJlYWQgIzI6IHByb2dyYW0gdG8gZ2l0LiAqLworCXBpZDIgPSBmb3JrKCk7CisJaWYgKHBpZDIgPCAwKQorCQlkaWVfZXJybm8oXygiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGEiKSk7CisJZWxzZSBpZiAocGlkMiA9PSAwKSB7CisJCXVkdF9raWxsX3RyYW5zZmVyKCZzLT5ndHApOworCQlleGl0KHVkdF9jb3B5X3Rhc2tfcm91dGluZSgmcy0+cHRnKSA/IDAgOiAxKTsKKwl9CisKKwkvKgorCSAqIENsb3NlIGJvdGggc3RyZWFtcyBpbiBwYXJlbnQgYXMgdG8gbm90IGludGVyZmVyZSB3aXRoCisJICogZW5kIG9mIGZpbGUgZGV0ZWN0aW9uIGFuZCB3YWl0IGZvciBib3RoIHRhc2tzIHRvIGZpbmlzaC4KKwkgKi8KKwl1ZHRfa2lsbF90cmFuc2Zlcigmcy0+Z3RwKTsKKwl1ZHRfa2lsbF90cmFuc2Zlcigmcy0+cHRnKTsKKwlyZXQgfD0gdGxvb3Bfam9pbihwaWQxLCAiR2l0IHRvIHByb2dyYW0gY29weSIpOworCXJldCB8PSB0bG9vcF9qb2luKHBpZDIsICJQcm9ncmFtIHRvIGdpdCBjb3B5Iik7CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCisvKgorICogQ29waWVzIGRhdGEgZnJvbSBzdGRpbiB0byBvdXRwdXQgYW5kIGZyb20gaW5wdXQgdG8gc3Rkb3V0IHNpbXVsdGFuZW91c2x5LgorICogQWRkaXRpb25hbGx5IGZpbHRlcmluZyB0aHJvdWdoIGdpdmVuIGZpbHRlci4gSWYgZmlsdGVyIGlzIE5VTEwsIHVzZXMKKyAqIGlkZW50aXR5IGZpbHRlci4KKyAqLworaW50IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfbG9vcChpbnQgaW5wdXQsIGludCBvdXRwdXQpCit7CisJc3RydWN0IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfc3RhdGUgc3RhdGU7CisKKwkvKiBGaWxsIHRoZSBzdGF0ZSBmaWVsZHMuICovCisJc3RhdGUucHRnLnNyYyA9IGlucHV0OworCXN0YXRlLnB0Zy5kZXN0ID0gMTsKKwlzdGF0ZS5wdGcuc3JjX2lzX3NvY2sgPSAoaW5wdXQgPT0gb3V0cHV0KTsKKwlzdGF0ZS5wdGcuZGVzdF9pc19zb2NrID0gMDsKKwlzdGF0ZS5wdGcuc3RhdGUgPSBTU1RBVEVfVFJBTlNGRVJSSU5HOworCXN0YXRlLnB0Zy5idWZ1c2UgPSAwOworCXN0YXRlLnB0Zy5zcmNfbmFtZSA9ICJyZW1vdGUgaW5wdXQiOworCXN0YXRlLnB0Zy5kZXN0X25hbWUgPSAic3Rkb3V0IjsKKworCXN0YXRlLmd0cC5zcmMgPSAwOworCXN0YXRlLmd0cC5kZXN0ID0gb3V0cHV0OworCXN0YXRlLmd0cC5zcmNfaXNfc29jayA9IDA7CisJc3RhdGUuZ3RwLmRlc3RfaXNfc29jayA9IChpbnB1dCA9PSBvdXRwdXQpOworCXN0YXRlLmd0cC5zdGF0ZSA9IFNTVEFURV9UUkFOU0ZFUlJJTkc7CisJc3RhdGUuZ3RwLmJ1ZnVzZSA9IDA7CisJc3RhdGUuZ3RwLnNyY19uYW1lID0gInN0ZGluIjsKKwlzdGF0ZS5ndHAuZGVzdF9uYW1lID0gInJlbW90ZSBvdXRwdXQiOworCisJcmV0dXJuIHRsb29wX3NwYXdud2FpdF90YXNrcygmc3RhdGUpOworfQorCit2b2lkIHJlamVjdF9hdG9taWNfcHVzaChzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgaW50IG1pcnJvcl9tb2RlKQoreworCXN0cnVjdCByZWYgKnJlZjsKKworCS8qIE1hcmsgb3RoZXIgcmVmcyBhcyBmYWlsZWQgKi8KKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAoIXJlZi0+cGVlcl9yZWYgJiYgIW1pcnJvcl9tb2RlKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChyZWYtPnN0YXR1cykgeworCQljYXNlIFJFRl9TVEFUVVNfTk9ORToKKwkJY2FzZSBSRUZfU1RBVFVTX09LOgorCQljYXNlIFJFRl9TVEFUVVNfRVhQRUNUSU5HX1JFUE9SVDoKKwkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19BVE9NSUNfUFVTSF9GQUlMRUQ7CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOyAvKiBkbyBub3RoaW5nICovCisJCX0KKwl9CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvdHJhbnNwb3J0LWludGVybmFsLmggYi90cmFuc3BvcnQtaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2RlNjI1Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhbnNwb3J0LWludGVybmFsLmgKQEAgLTAsMCArMSw3MCBAQAorI2lmbmRlZiBUUkFOU1BPUlRfSU5URVJOQUxfSAorI2RlZmluZSBUUkFOU1BPUlRfSU5URVJOQUxfSAorCitzdHJ1Y3QgcmVmOworc3RydWN0IHRyYW5zcG9ydDsKK3N0cnVjdCBhcmd2X2FycmF5OworCitzdHJ1Y3QgdHJhbnNwb3J0X3Z0YWJsZSB7CisJLyoqCisJICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIHBvc2l0aXZlIGlmIHRoZSBvcHRpb24gaXMgbm90CisJICogcmVjb2duaXplZCBvciBpcyBpbmFwcGxpY2FibGUsIGFuZCBuZWdhdGl2ZSBpZiB0aGUgb3B0aW9uCisJICogaXMgYXBwbGljYWJsZSBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuCisJICoqLworCWludCAoKnNldF9vcHRpb24pKHN0cnVjdCB0cmFuc3BvcnQgKmNvbm5lY3Rpb24sIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgIGNvbnN0IGNoYXIgKnZhbHVlKTsKKwkvKioKKwkgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgcmVtb3RlIHNpZGUncyByZWZzLiBJbiBvcmRlciB0byBhbGxvdworCSAqIHRoZSB0cmFuc3BvcnQgdG8gdHJ5IHRvIHNoYXJlIGNvbm5lY3Rpb25zLCBmb3JfcHVzaCBpcyBhCisJICogaGludCBhcyB0byB3aGV0aGVyIHRoZSB1bHRpbWF0ZSBvcGVyYXRpb24gaXMgYSBwdXNoIG9yIGEgZmV0Y2guCisJICoKKwkgKiBJZiBjb21tdW5pY2F0aW5nIHVzaW5nIHByb3RvY29sIHYyIGEgbGlzdCBvZiBwcmVmaXhlcyBjYW4gYmUKKwkgKiBwcm92aWRlZCB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIgdG8gZW5hYmxlIGl0IHRvIGxpbWl0IHRoZSByZWYKKwkgKiBhZHZlcnRpc2VtZW50LiAgU2luY2UgcmVmIGZpbHRlcmluZyBpcyBkb25lIG9uIHRoZSBzZXJ2ZXIncyBlbmQsIGFuZAorCSAqIG9ubHkgd2hlbiB1c2luZyBwcm90b2NvbCB2MiwgdGhpcyBsaXN0IHdpbGwgYmUgaWdub3JlZCB3aGVuIG5vdAorCSAqIHVzaW5nIHByb3RvY29sIHYyIG1lYW5pbmcgdGhpcyBmdW5jdGlvbiBjYW4gcmV0dXJuIHJlZnMgd2hpY2ggZG9uJ3QKKwkgKiBtYXRjaCB0aGUgcHJvdmlkZWQgcmVmX3ByZWZpeGVzLgorCSAqCisJICogSWYgdGhlIHRyYW5zcG9ydCBpcyBhYmxlIHRvIGRldGVybWluZSB0aGUgcmVtb3RlIGhhc2ggZm9yCisJICogdGhlIHJlZiB3aXRob3V0IGEgaHVnZSBhbW91bnQgb2YgZWZmb3J0LCBpdCBzaG91bGQgc3RvcmUgaXQKKwkgKiBpbiB0aGUgcmVmJ3Mgb2xkX3NoYTEgZmllbGQ7IG90aGVyd2lzZSBpdCBzaG91bGQgYmUgYWxsIDAuCisJICoqLworCXN0cnVjdCByZWYgKigqZ2V0X3JlZnNfbGlzdCkoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgZm9yX3B1c2gsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqcmVmX3ByZWZpeGVzKTsKKworCS8qKgorCSAqIEZldGNoIHRoZSBvYmplY3RzIGZvciB0aGUgZ2l2ZW4gcmVmcy4gTm90ZSB0aGF0IHRoaXMgZ2V0cworCSAqIGFuIGFycmF5LCBhbmQgc2hvdWxkIGlnbm9yZSB0aGUgbGlzdCBzdHJ1Y3R1cmUuCisJICoKKwkgKiBJZiB0aGUgdHJhbnNwb3J0IGRpZCBub3QgZ2V0IGhhc2hlcyBmb3IgcmVmcyBpbgorCSAqIGdldF9yZWZzX2xpc3QoKSwgaXQgc2hvdWxkIHNldCB0aGUgb2xkX3NoYTEgZmllbGRzIGluIHRoZQorCSAqIHByb3ZpZGVkIHJlZnMgbm93LgorCSAqKi8KKwlpbnQgKCpmZXRjaCkoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgcmVmc19uciwgc3RydWN0IHJlZiAqKnJlZnMpOworCisJLyoqCisJICogUHVzaCB0aGUgb2JqZWN0cyBhbmQgcmVmcy4gU2VuZCB0aGUgbmVjZXNzYXJ5IG9iamVjdHMsIGFuZAorCSAqIHRoZW4sIGZvciBhbnkgcmVmcyB3aGVyZSBwZWVyX3JlZiBpcyBzZXQgYW5kCisJICogcGVlcl9yZWYtPm5ld19vaWQgaXMgZGlmZmVyZW50IGZyb20gb2xkX29pZCwgdGVsbCB0aGUKKwkgKiByZW1vdGUgc2lkZSB0byB1cGRhdGUgZWFjaCByZWYgaW4gdGhlIGxpc3QgZnJvbSBvbGRfb2lkIHRvCisJICogcGVlcl9yZWYtPm5ld19vaWQuCisJICoKKwkgKiBXaGVyZSBwb3NzaWJsZSwgc2V0IHRoZSBzdGF0dXMgZm9yIGVhY2ggcmVmIGFwcHJvcHJpYXRlbHkuCisJICoKKwkgKiBUaGUgdHJhbnNwb3J0IG11c3QgbW9kaWZ5IG5ld19zaGExIGluIHRoZSByZWYgdG8gdGhlIG5ldworCSAqIHZhbHVlIGlmIHRoZSByZW1vdGUgYWNjZXB0ZWQgdGhlIGNoYW5nZS4gTm90ZSB0aGF0IHRoaXMKKwkgKiBjb3VsZCBiZSBhIGRpZmZlcmVudCB2YWx1ZSBmcm9tIHBlZXJfcmVmLT5uZXdfb2lkIGlmIHRoZQorCSAqIHByb2Nlc3MgaW52b2x2ZWQgZ2VuZXJhdGluZyBuZXcgY29tbWl0cy4KKwkgKiovCisJaW50ICgqcHVzaF9yZWZzKShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCByZWYgKnJlZnMsIGludCBmbGFncyk7CisJaW50ICgqY29ubmVjdCkoc3RydWN0IHRyYW5zcG9ydCAqY29ubmVjdGlvbiwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmV4ZWN1dGFibGUsIGludCBmZFsyXSk7CisKKwkvKiogZ2V0X3JlZnNfbGlzdCgpLCBmZXRjaCgpLCBhbmQgcHVzaF9yZWZzKCkgY2FuIGtlZXAKKwkgKiByZXNvdXJjZXMgKHN1Y2ggYXMgYSBjb25uZWN0aW9uKSByZXNlcnZlZCBmb3IgZnVydGhlcgorCSAqIHVzZS4gZGlzY29ubmVjdCgpIHJlbGVhc2VzIHRoZXNlIHJlc291cmNlcy4KKwkgKiovCisJaW50ICgqZGlzY29ubmVjdCkoc3RydWN0IHRyYW5zcG9ydCAqY29ubmVjdGlvbik7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RyYW5zcG9ydC5jIGIvdHJhbnNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVmNWJhNAotLS0gL2Rldi9udWxsCisrKyBiL3RyYW5zcG9ydC5jCkBAIC0wLDAgKzEsMTM5NSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgImZldGNoLXBhY2suaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic2VuZC1wYWNrLmgiCisjaW5jbHVkZSAid2Fsa2VyLmgiCisjaW5jbHVkZSAiYnVuZGxlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlZnNwZWMuaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgIm9pZC1hcnJheS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LWludGVybmFsLmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorCitzdGF0aWMgaW50IHRyYW5zcG9ydF91c2VfY29sb3IgPSAtMTsKK3N0YXRpYyBjaGFyIHRyYW5zcG9ydF9jb2xvcnNbXVtDT0xPUl9NQVhMRU5dID0geworCUdJVF9DT0xPUl9SRVNFVCwKKwlHSVRfQ09MT1JfUkVECQkvKiBSRUpFQ1RFRCAqLworfTsKKworZW51bSBjb2xvcl90cmFuc3BvcnQgeworCVRSQU5TUE9SVF9DT0xPUl9SRVNFVCA9IDAsCisJVFJBTlNQT1JUX0NPTE9SX1JFSkVDVEVEID0gMQorfTsKKworc3RhdGljIGludCB0cmFuc3BvcnRfY29sb3JfY29uZmlnKHZvaWQpCit7CisJY29uc3QgY2hhciAqa2V5c1tdID0geworCQkiY29sb3IudHJhbnNwb3J0LnJlc2V0IiwKKwkJImNvbG9yLnRyYW5zcG9ydC5yZWplY3RlZCIKKwl9LCAqa2V5ID0gImNvbG9yLnRyYW5zcG9ydCI7CisJY2hhciAqdmFsdWU7CisJaW50IGk7CisJc3RhdGljIGludCBpbml0aWFsaXplZDsKKworCWlmIChpbml0aWFsaXplZCkKKwkJcmV0dXJuIDA7CisJaW5pdGlhbGl6ZWQgPSAxOworCisJaWYgKCFnaXRfY29uZmlnX2dldF9zdHJpbmcoa2V5LCAmdmFsdWUpKQorCQl0cmFuc3BvcnRfdXNlX2NvbG9yID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2woa2V5LCB2YWx1ZSk7CisKKwlpZiAoIXdhbnRfY29sb3Jfc3RkZXJyKHRyYW5zcG9ydF91c2VfY29sb3IpKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGtleXMpOyBpKyspCisJCWlmICghZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKGtleXNbaV0sICZ2YWx1ZSkpIHsKKwkJCWlmICghdmFsdWUpCisJCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGtleXNbaV0pOworCQkJaWYgKGNvbG9yX3BhcnNlKHZhbHVlLCB0cmFuc3BvcnRfY29sb3JzW2ldKSA8IDApCisJCQkJcmV0dXJuIC0xOworCQl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnRyYW5zcG9ydF9nZXRfY29sb3IoZW51bSBjb2xvcl90cmFuc3BvcnQgaXgpCit7CisJaWYgKHdhbnRfY29sb3Jfc3RkZXJyKHRyYW5zcG9ydF91c2VfY29sb3IpKQorCQlyZXR1cm4gdHJhbnNwb3J0X2NvbG9yc1tpeF07CisJcmV0dXJuICIiOworfQorCitzdGF0aWMgdm9pZCBzZXRfdXBzdHJlYW1zKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmcywKKwlpbnQgcHJldGVuZCkKK3sKKwlzdHJ1Y3QgcmVmICpyZWY7CisJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQljb25zdCBjaGFyICpsb2NhbG5hbWU7CisJCWNvbnN0IGNoYXIgKnRtcDsKKwkJY29uc3QgY2hhciAqcmVtb3RlbmFtZTsKKwkJaW50IGZsYWcgPSAwOworCQkvKgorCQkgKiBDaGVjayBzdWl0YWJpbGl0eSBmb3IgdHJhY2tpbmcuIE11c3QgYmUgc3VjY2Vzc2Z1bCAvCisJCSAqIGFscmVhZHkgdXAtdG8tZGF0ZSByZWYgY3JlYXRlL21vZGlmeSAobm90IGRlbGV0ZSkuCisJCSAqLworCQlpZiAocmVmLT5zdGF0dXMgIT0gUkVGX1NUQVRVU19PSyAmJgorCQkJcmVmLT5zdGF0dXMgIT0gUkVGX1NUQVRVU19VUFRPREFURSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXJlZi0+cGVlcl9yZWYpCisJCQljb250aW51ZTsKKwkJaWYgKGlzX251bGxfb2lkKCZyZWYtPm5ld19vaWQpKQorCQkJY29udGludWU7CisKKwkJLyogRm9sbG93IHN5bWJvbGljIHJlZnMgKG1haW5seSBmb3IgSEVBRCkuICovCisJCWxvY2FsbmFtZSA9IHJlZi0+cGVlcl9yZWYtPm5hbWU7CisJCXJlbW90ZW5hbWUgPSByZWYtPm5hbWU7CisJCXRtcCA9IHJlc29sdmVfcmVmX3Vuc2FmZShsb2NhbG5hbWUsIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCSBOVUxMLCAmZmxhZyk7CisJCWlmICh0bXAgJiYgZmxhZyAmIFJFRl9JU1NZTVJFRiAmJgorCQkJc3RhcnRzX3dpdGgodG1wLCAicmVmcy9oZWFkcy8iKSkKKwkJCWxvY2FsbmFtZSA9IHRtcDsKKworCQkvKiBCb3RoIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBiZSBsb2NhbCBicmFuY2hlcy4gKi8KKwkJaWYgKCFsb2NhbG5hbWUgfHwgIXN0YXJ0c193aXRoKGxvY2FsbmFtZSwgInJlZnMvaGVhZHMvIikpCisJCQljb250aW51ZTsKKwkJaWYgKCFyZW1vdGVuYW1lIHx8ICFzdGFydHNfd2l0aChyZW1vdGVuYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghcHJldGVuZCkKKwkJCWluc3RhbGxfYnJhbmNoX2NvbmZpZyhCUkFOQ0hfQ09ORklHX1ZFUkJPU0UsCisJCQkJbG9jYWxuYW1lICsgMTEsIHRyYW5zcG9ydC0+cmVtb3RlLT5uYW1lLAorCQkJCXJlbW90ZW5hbWUpOworCQllbHNlCisJCQlwcmludGYoXygiV291bGQgc2V0IHVwc3RyZWFtIG9mICclcycgdG8gJyVzJyBvZiAnJXMnXG4iKSwKKwkJCQlsb2NhbG5hbWUgKyAxMSwgcmVtb3RlbmFtZSArIDExLAorCQkJCXRyYW5zcG9ydC0+cmVtb3RlLT5uYW1lKTsKKwl9Cit9CisKK3N0cnVjdCBidW5kbGVfdHJhbnNwb3J0X2RhdGEgeworCWludCBmZDsKKwlzdHJ1Y3QgYnVuZGxlX2hlYWRlciBoZWFkZXI7CisJdW5zaWduZWQgZ2V0X3JlZnNfZnJvbV9idW5kbGVfY2FsbGVkIDogMTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpnZXRfcmVmc19mcm9tX2J1bmRsZShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkJCWludCBmb3JfcHVzaCwKKwkJCQkJY29uc3Qgc3RydWN0IGFyZ3ZfYXJyYXkgKnJlZl9wcmVmaXhlcykKK3sKKwlzdHJ1Y3QgYnVuZGxlX3RyYW5zcG9ydF9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXN0cnVjdCByZWYgKnJlc3VsdCA9IE5VTEw7CisJaW50IGk7CisKKwlpZiAoZm9yX3B1c2gpCisJCXJldHVybiBOVUxMOworCisJZGF0YS0+Z2V0X3JlZnNfZnJvbV9idW5kbGVfY2FsbGVkID0gMTsKKworCWlmIChkYXRhLT5mZCA+IDApCisJCWNsb3NlKGRhdGEtPmZkKTsKKwlkYXRhLT5mZCA9IHJlYWRfYnVuZGxlX2hlYWRlcih0cmFuc3BvcnQtPnVybCwgJmRhdGEtPmhlYWRlcik7CisJaWYgKGRhdGEtPmZkIDwgMCkKKwkJZGllKF8oImNvdWxkIG5vdCByZWFkIGJ1bmRsZSAnJXMnIiksIHRyYW5zcG9ydC0+dXJsKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+aGVhZGVyLnJlZmVyZW5jZXMubnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX2xpc3RfZW50cnkgKmUgPSBkYXRhLT5oZWFkZXIucmVmZXJlbmNlcy5saXN0ICsgaTsKKwkJc3RydWN0IHJlZiAqcmVmID0gYWxsb2NfcmVmKGUtPm5hbWUpOworCQlvaWRjcHkoJnJlZi0+b2xkX29pZCwgJmUtPm9pZCk7CisJCXJlZi0+bmV4dCA9IHJlc3VsdDsKKwkJcmVzdWx0ID0gcmVmOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGZldGNoX3JlZnNfZnJvbV9idW5kbGUoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJICAgICAgIGludCBucl9oZWFkcywgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQoreworCXN0cnVjdCBidW5kbGVfdHJhbnNwb3J0X2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisKKwlpZiAoIWRhdGEtPmdldF9yZWZzX2Zyb21fYnVuZGxlX2NhbGxlZCkKKwkJZ2V0X3JlZnNfZnJvbV9idW5kbGUodHJhbnNwb3J0LCAwLCBOVUxMKTsKKwlyZXR1cm4gdW5idW5kbGUodGhlX3JlcG9zaXRvcnksICZkYXRhLT5oZWFkZXIsIGRhdGEtPmZkLAorCQkJdHJhbnNwb3J0LT5wcm9ncmVzcyA/IEJVTkRMRV9WRVJCT1NFIDogMCk7Cit9CisKK3N0YXRpYyBpbnQgY2xvc2VfYnVuZGxlKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCkKK3sKKwlzdHJ1Y3QgYnVuZGxlX3RyYW5zcG9ydF9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCWlmIChkYXRhLT5mZCA+IDApCisJCWNsb3NlKGRhdGEtPmZkKTsKKwlmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhIHsKKwlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9vcHRpb25zIG9wdGlvbnM7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm47CisJaW50IGZkWzJdOworCXVuc2lnbmVkIGdvdF9yZW1vdGVfaGVhZHMgOiAxOworCWVudW0gcHJvdG9jb2xfdmVyc2lvbiB2ZXJzaW9uOworCXN0cnVjdCBvaWRfYXJyYXkgZXh0cmFfaGF2ZTsKKwlzdHJ1Y3Qgb2lkX2FycmF5IHNoYWxsb3c7Cit9OworCitzdGF0aWMgaW50IHNldF9naXRfb3B0aW9uKHN0cnVjdCBnaXRfdHJhbnNwb3J0X29wdGlvbnMgKm9wdHMsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKG5hbWUsIFRSQU5TX09QVF9VUExPQURQQUNLKSkgeworCQlvcHRzLT51cGxvYWRwYWNrID0gdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfUkVDRUlWRVBBQ0spKSB7CisJCW9wdHMtPnJlY2VpdmVwYWNrID0gdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfVEhJTikpIHsKKwkJb3B0cy0+dGhpbiA9ICEhdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfRk9MTE9XVEFHUykpIHsKKwkJb3B0cy0+Zm9sbG93dGFncyA9ICEhdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfS0VFUCkpIHsKKwkJb3B0cy0+a2VlcCA9ICEhdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfVVBEQVRFX1NIQUxMT1cpKSB7CisJCW9wdHMtPnVwZGF0ZV9zaGFsbG93ID0gISF2YWx1ZTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsIFRSQU5TX09QVF9ERVBUSCkpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCW9wdHMtPmRlcHRoID0gMDsKKwkJZWxzZSB7CisJCQljaGFyICplbmQ7CisJCQlvcHRzLT5kZXB0aCA9IHN0cnRvbCh2YWx1ZSwgJmVuZCwgMCk7CisJCQlpZiAoKmVuZCkKKwkJCQlkaWUoXygidHJhbnNwb3J0OiBpbnZhbGlkIGRlcHRoIG9wdGlvbiAnJXMnIiksIHZhbHVlKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgVFJBTlNfT1BUX0RFRVBFTl9TSU5DRSkpIHsKKwkJb3B0cy0+ZGVlcGVuX3NpbmNlID0gdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfREVFUEVOX05PVCkpIHsKKwkJb3B0cy0+ZGVlcGVuX25vdCA9IChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKil2YWx1ZTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsIFRSQU5TX09QVF9ERUVQRU5fUkVMQVRJVkUpKSB7CisJCW9wdHMtPmRlZXBlbl9yZWxhdGl2ZSA9ICEhdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfRlJPTV9QUk9NSVNPUikpIHsKKwkJb3B0cy0+ZnJvbV9wcm9taXNvciA9ICEhdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfTk9fREVQRU5ERU5UUykpIHsKKwkJb3B0cy0+bm9fZGVwZW5kZW50cyA9ICEhdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfTElTVF9PQkpFQ1RTX0ZJTFRFUikpIHsKKwkJbGlzdF9vYmplY3RzX2ZpbHRlcl9kaWVfaWZfcG9wdWxhdGVkKCZvcHRzLT5maWx0ZXJfb3B0aW9ucyk7CisJCXBhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoJm9wdHMtPmZpbHRlcl9vcHRpb25zLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjb25uZWN0X3NldHVwKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IGZvcl9wdXNoKQoreworCXN0cnVjdCBnaXRfdHJhbnNwb3J0X2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJaW50IGZsYWdzID0gdHJhbnNwb3J0LT52ZXJib3NlID4gMCA/IENPTk5FQ1RfVkVSQk9TRSA6IDA7CisKKwlpZiAoZGF0YS0+Y29ubikKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHRyYW5zcG9ydC0+ZmFtaWx5KSB7CisJY2FzZSBUUkFOU1BPUlRfRkFNSUxZX0FMTDogYnJlYWs7CisJY2FzZSBUUkFOU1BPUlRfRkFNSUxZX0lQVjQ6IGZsYWdzIHw9IENPTk5FQ1RfSVBWNDsgYnJlYWs7CisJY2FzZSBUUkFOU1BPUlRfRkFNSUxZX0lQVjY6IGZsYWdzIHw9IENPTk5FQ1RfSVBWNjsgYnJlYWs7CisJfQorCisJZGF0YS0+Y29ubiA9IGdpdF9jb25uZWN0KGRhdGEtPmZkLCB0cmFuc3BvcnQtPnVybCwKKwkJCQkgZm9yX3B1c2ggPyBkYXRhLT5vcHRpb25zLnJlY2VpdmVwYWNrIDoKKwkJCQkgZGF0YS0+b3B0aW9ucy51cGxvYWRwYWNrLAorCQkJCSBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGllX2lmX3NlcnZlcl9vcHRpb25zKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCkKK3sKKwlpZiAoIXRyYW5zcG9ydC0+c2VydmVyX29wdGlvbnMgfHwgIXRyYW5zcG9ydC0+c2VydmVyX29wdGlvbnMtPm5yKQorCQlyZXR1cm47CisJYWR2aXNlKF8oInNlZSBwcm90b2NvbC52ZXJzaW9uIGluICdnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGRldGFpbHMiKSk7CisJZGllKF8oInNlcnZlciBvcHRpb25zIHJlcXVpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGxhdGVyIikpOworfQorCisvKgorICogT2J0YWlucyB0aGUgcHJvdG9jb2wgdmVyc2lvbiBmcm9tIHRoZSB0cmFuc3BvcnQgYW5kIHdyaXRlcyBpdCB0bworICogdHJhbnNwb3J0LT5kYXRhLT52ZXJzaW9uLCBmaXJzdCBjb25uZWN0aW5nIGlmIG5vdCBhbHJlYWR5IGNvbm5lY3RlZC4KKyAqCisgKiBJZiB0aGUgcHJvdG9jb2wgdmVyc2lvbiBpcyBvbmUgdGhhdCBhbGxvd3Mgc2tpcHBpbmcgdGhlIGxpc3Rpbmcgb2YgcmVtb3RlCisgKiByZWZzLCBhbmQgbXVzdF9saXN0X3JlZnMgaXMgMCwgdGhlIGxpc3Rpbmcgb2YgcmVtb3RlIHJlZnMgaXMgc2tpcHBlZCBhbmQKKyAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMLiBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGlzdCBvZgorICogcmVtb3RlIHJlZnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVmICpoYW5kc2hha2Uoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgZm9yX3B1c2gsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICpyZWZfcHJlZml4ZXMsCisJCQkgICAgIGludCBtdXN0X2xpc3RfcmVmcykKK3sKKwlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXN0cnVjdCByZWYgKnJlZnMgPSBOVUxMOworCXN0cnVjdCBwYWNrZXRfcmVhZGVyIHJlYWRlcjsKKworCWNvbm5lY3Rfc2V0dXAodHJhbnNwb3J0LCBmb3JfcHVzaCk7CisKKwlwYWNrZXRfcmVhZGVyX2luaXQoJnJlYWRlciwgZGF0YS0+ZmRbMF0sIE5VTEwsIDAsCisJCQkgICBQQUNLRVRfUkVBRF9DSE9NUF9ORVdMSU5FIHwKKwkJCSAgIFBBQ0tFVF9SRUFEX0dFTlRMRV9PTl9FT0YgfAorCQkJICAgUEFDS0VUX1JFQURfRElFX09OX0VSUl9QQUNLRVQpOworCisJZGF0YS0+dmVyc2lvbiA9IGRpc2NvdmVyX3ZlcnNpb24oJnJlYWRlcik7CisJc3dpdGNoIChkYXRhLT52ZXJzaW9uKSB7CisJY2FzZSBwcm90b2NvbF92MjoKKwkJaWYgKG11c3RfbGlzdF9yZWZzKQorCQkJZ2V0X3JlbW90ZV9yZWZzKGRhdGEtPmZkWzFdLCAmcmVhZGVyLCAmcmVmcywgZm9yX3B1c2gsCisJCQkJCXJlZl9wcmVmaXhlcywKKwkJCQkJdHJhbnNwb3J0LT5zZXJ2ZXJfb3B0aW9ucyk7CisJCWJyZWFrOworCWNhc2UgcHJvdG9jb2xfdjE6CisJY2FzZSBwcm90b2NvbF92MDoKKwkJZGllX2lmX3NlcnZlcl9vcHRpb25zKHRyYW5zcG9ydCk7CisJCWdldF9yZW1vdGVfaGVhZHMoJnJlYWRlciwgJnJlZnMsCisJCQkJIGZvcl9wdXNoID8gUkVGX05PUk1BTCA6IDAsCisJCQkJICZkYXRhLT5leHRyYV9oYXZlLAorCQkJCSAmZGF0YS0+c2hhbGxvdyk7CisJCWJyZWFrOworCWNhc2UgcHJvdG9jb2xfdW5rbm93bl92ZXJzaW9uOgorCQlCVUcoInVua25vd24gcHJvdG9jb2wgdmVyc2lvbiIpOworCX0KKwlkYXRhLT5nb3RfcmVtb3RlX2hlYWRzID0gMTsKKworCWlmIChyZWFkZXIubGluZV9wZWVrZWQpCisJCUJVRygiYnVmZmVyIG11c3QgYmUgZW1wdHkgYXQgdGhlIGVuZCBvZiBoYW5kc2hha2UoKSIpOworCisJcmV0dXJuIHJlZnM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpnZXRfcmVmc192aWFfY29ubmVjdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCBmb3JfcHVzaCwKKwkJCQkJY29uc3Qgc3RydWN0IGFyZ3ZfYXJyYXkgKnJlZl9wcmVmaXhlcykKK3sKKwlyZXR1cm4gaGFuZHNoYWtlKHRyYW5zcG9ydCwgZm9yX3B1c2gsIHJlZl9wcmVmaXhlcywgMSk7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfcmVmc192aWFfcGFjayhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgICAgICAgaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlzdHJ1Y3QgcmVmICpyZWZzID0gTlVMTDsKKwlzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzIGFyZ3M7CisJc3RydWN0IHJlZiAqcmVmc190bXAgPSBOVUxMOworCisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCWFyZ3MudXBsb2FkcGFjayA9IGRhdGEtPm9wdGlvbnMudXBsb2FkcGFjazsKKwlhcmdzLmtlZXBfcGFjayA9IGRhdGEtPm9wdGlvbnMua2VlcDsKKwlhcmdzLmxvY2tfcGFjayA9IDE7CisJYXJncy51c2VfdGhpbl9wYWNrID0gZGF0YS0+b3B0aW9ucy50aGluOworCWFyZ3MuaW5jbHVkZV90YWcgPSBkYXRhLT5vcHRpb25zLmZvbGxvd3RhZ3M7CisJYXJncy52ZXJib3NlID0gKHRyYW5zcG9ydC0+dmVyYm9zZSA+IDEpOworCWFyZ3MucXVpZXQgPSAodHJhbnNwb3J0LT52ZXJib3NlIDwgMCk7CisJYXJncy5ub19wcm9ncmVzcyA9ICF0cmFuc3BvcnQtPnByb2dyZXNzOworCWFyZ3MuZGVwdGggPSBkYXRhLT5vcHRpb25zLmRlcHRoOworCWFyZ3MuZGVlcGVuX3NpbmNlID0gZGF0YS0+b3B0aW9ucy5kZWVwZW5fc2luY2U7CisJYXJncy5kZWVwZW5fbm90ID0gZGF0YS0+b3B0aW9ucy5kZWVwZW5fbm90OworCWFyZ3MuZGVlcGVuX3JlbGF0aXZlID0gZGF0YS0+b3B0aW9ucy5kZWVwZW5fcmVsYXRpdmU7CisJYXJncy5jaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkID0KKwkJZGF0YS0+b3B0aW9ucy5jaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkOworCWFyZ3MuY2xvbmluZyA9IHRyYW5zcG9ydC0+Y2xvbmluZzsKKwlhcmdzLnVwZGF0ZV9zaGFsbG93ID0gZGF0YS0+b3B0aW9ucy51cGRhdGVfc2hhbGxvdzsKKwlhcmdzLmZyb21fcHJvbWlzb3IgPSBkYXRhLT5vcHRpb25zLmZyb21fcHJvbWlzb3I7CisJYXJncy5ub19kZXBlbmRlbnRzID0gZGF0YS0+b3B0aW9ucy5ub19kZXBlbmRlbnRzOworCWFyZ3MuZmlsdGVyX29wdGlvbnMgPSBkYXRhLT5vcHRpb25zLmZpbHRlcl9vcHRpb25zOworCWFyZ3Muc3RhdGVsZXNzX3JwYyA9IHRyYW5zcG9ydC0+c3RhdGVsZXNzX3JwYzsKKwlhcmdzLnNlcnZlcl9vcHRpb25zID0gdHJhbnNwb3J0LT5zZXJ2ZXJfb3B0aW9uczsKKwlhcmdzLm5lZ290aWF0aW9uX3RpcHMgPSBkYXRhLT5vcHRpb25zLm5lZ290aWF0aW9uX3RpcHM7CisKKwlpZiAoIWRhdGEtPmdvdF9yZW1vdGVfaGVhZHMpIHsKKwkJaW50IGk7CisJCWludCBtdXN0X2xpc3RfcmVmcyA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBucl9oZWFkczsgaSsrKSB7CisJCQlpZiAoIXRvX2ZldGNoW2ldLT5leGFjdF9vaWQpIHsKKwkJCQltdXN0X2xpc3RfcmVmcyA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmVmc190bXAgPSBoYW5kc2hha2UodHJhbnNwb3J0LCAwLCBOVUxMLCBtdXN0X2xpc3RfcmVmcyk7CisJfQorCisJc3dpdGNoIChkYXRhLT52ZXJzaW9uKSB7CisJY2FzZSBwcm90b2NvbF92MjoKKwkJcmVmcyA9IGZldGNoX3BhY2soJmFyZ3MsIGRhdGEtPmZkLAorCQkJCSAgcmVmc190bXAgPyByZWZzX3RtcCA6IHRyYW5zcG9ydC0+cmVtb3RlX3JlZnMsCisJCQkJICB0b19mZXRjaCwgbnJfaGVhZHMsICZkYXRhLT5zaGFsbG93LAorCQkJCSAgJnRyYW5zcG9ydC0+cGFja19sb2NrZmlsZSwgZGF0YS0+dmVyc2lvbik7CisJCWJyZWFrOworCWNhc2UgcHJvdG9jb2xfdjE6CisJY2FzZSBwcm90b2NvbF92MDoKKwkJZGllX2lmX3NlcnZlcl9vcHRpb25zKHRyYW5zcG9ydCk7CisJCXJlZnMgPSBmZXRjaF9wYWNrKCZhcmdzLCBkYXRhLT5mZCwKKwkJCQkgIHJlZnNfdG1wID8gcmVmc190bXAgOiB0cmFuc3BvcnQtPnJlbW90ZV9yZWZzLAorCQkJCSAgdG9fZmV0Y2gsIG5yX2hlYWRzLCAmZGF0YS0+c2hhbGxvdywKKwkJCQkgICZ0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUsIGRhdGEtPnZlcnNpb24pOworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3Vua25vd25fdmVyc2lvbjoKKwkJQlVHKCJ1bmtub3duIHByb3RvY29sIHZlcnNpb24iKTsKKwl9CisKKwljbG9zZShkYXRhLT5mZFswXSk7CisJY2xvc2UoZGF0YS0+ZmRbMV0pOworCWlmIChmaW5pc2hfY29ubmVjdChkYXRhLT5jb25uKSkKKwkJcmV0ID0gLTE7CisJZGF0YS0+Y29ubiA9IE5VTEw7CisJZGF0YS0+Z290X3JlbW90ZV9oZWFkcyA9IDA7CisJZGF0YS0+b3B0aW9ucy5zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkID0KKwkJYXJncy5zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkOworCWRhdGEtPm9wdGlvbnMuY29ubmVjdGl2aXR5X2NoZWNrZWQgPSBhcmdzLmNvbm5lY3Rpdml0eV9jaGVja2VkOworCisJaWYgKHJlZnMgPT0gTlVMTCkKKwkJcmV0ID0gLTE7CisJaWYgKHJlcG9ydF91bm1hdGNoZWRfcmVmcyh0b19mZXRjaCwgbnJfaGVhZHMpKQorCQlyZXQgPSAtMTsKKworCWZyZWVfcmVmcyhyZWZzX3RtcCk7CisJZnJlZV9yZWZzKHJlZnMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF9oYWRfZXJyb3JzKHN0cnVjdCByZWYgKnJlZikKK3sKKwlmb3IgKDsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3dpdGNoIChyZWYtPnN0YXR1cykgeworCQljYXNlIFJFRl9TVEFUVVNfTk9ORToKKwkJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgorCQljYXNlIFJFRl9TVEFUVVNfT0s6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCitpbnQgdHJhbnNwb3J0X3JlZnNfcHVzaGVkKHN0cnVjdCByZWYgKnJlZikKK3sKKwlmb3IgKDsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3dpdGNoKHJlZi0+c3RhdHVzKSB7CisJCWNhc2UgUkVGX1NUQVRVU19OT05FOgorCQljYXNlIFJFRl9TVEFUVVNfVVBUT0RBVEU6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHRyYW5zcG9ydF91cGRhdGVfdHJhY2tpbmdfcmVmKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgc3RydWN0IHJlZiAqcmVmLCBpbnQgdmVyYm9zZSkKK3sKKwlzdHJ1Y3QgcmVmc3BlY19pdGVtIHJzOworCisJaWYgKHJlZi0+c3RhdHVzICE9IFJFRl9TVEFUVVNfT0sgJiYgcmVmLT5zdGF0dXMgIT0gUkVGX1NUQVRVU19VUFRPREFURSkKKwkJcmV0dXJuOworCisJcnMuc3JjID0gcmVmLT5uYW1lOworCXJzLmRzdCA9IE5VTEw7CisKKwlpZiAoIXJlbW90ZV9maW5kX3RyYWNraW5nKHJlbW90ZSwgJnJzKSkgeworCQlpZiAodmVyYm9zZSkKKwkJCWZwcmludGYoc3RkZXJyLCAidXBkYXRpbmcgbG9jYWwgdHJhY2tpbmcgcmVmICclcydcbiIsIHJzLmRzdCk7CisJCWlmIChyZWYtPmRlbGV0aW9uKSB7CisJCQlkZWxldGVfcmVmKE5VTEwsIHJzLmRzdCwgTlVMTCwgMCk7CisJCX0gZWxzZQorCQkJdXBkYXRlX3JlZigidXBkYXRlIGJ5IHB1c2giLCBycy5kc3QsICZyZWYtPm5ld19vaWQsCisJCQkJICAgTlVMTCwgMCwgMCk7CisJCWZyZWUocnMuZHN0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3JlZl9zdGF0dXMoY2hhciBmbGFnLCBjb25zdCBjaGFyICpzdW1tYXJ5LAorCQkJICAgICBzdHJ1Y3QgcmVmICp0bywgc3RydWN0IHJlZiAqZnJvbSwgY29uc3QgY2hhciAqbXNnLAorCQkJICAgICBpbnQgcG9yY2VsYWluLCBpbnQgc3VtbWFyeV93aWR0aCkKK3sKKwlpZiAocG9yY2VsYWluKSB7CisJCWlmIChmcm9tKQorCQkJZnByaW50ZihzdGRvdXQsICIlY1x0JXM6JXNcdCIsIGZsYWcsIGZyb20tPm5hbWUsIHRvLT5uYW1lKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRvdXQsICIlY1x0OiVzXHQiLCBmbGFnLCB0by0+bmFtZSk7CisJCWlmIChtc2cpCisJCQlmcHJpbnRmKHN0ZG91dCwgIiVzICglcylcbiIsIHN1bW1hcnksIG1zZyk7CisJCWVsc2UKKwkJCWZwcmludGYoc3Rkb3V0LCAiJXNcbiIsIHN1bW1hcnkpOworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKnJlZCA9ICIiLCAqcmVzZXQgPSAiIjsKKwkJaWYgKHB1c2hfaGFkX2Vycm9ycyh0bykpIHsKKwkJCXJlZCA9IHRyYW5zcG9ydF9nZXRfY29sb3IoVFJBTlNQT1JUX0NPTE9SX1JFSkVDVEVEKTsKKwkJCXJlc2V0ID0gdHJhbnNwb3J0X2dldF9jb2xvcihUUkFOU1BPUlRfQ09MT1JfUkVTRVQpOworCQl9CisJCWZwcmludGYoc3RkZXJyLCAiICVzJWMgJS0qcyVzICIsIHJlZCwgZmxhZywgc3VtbWFyeV93aWR0aCwKKwkJCXN1bW1hcnksIHJlc2V0KTsKKwkJaWYgKGZyb20pCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIC0+ICVzIiwgcHJldHRpZnlfcmVmbmFtZShmcm9tLT5uYW1lKSwgcHJldHRpZnlfcmVmbmFtZSh0by0+bmFtZSkpOworCQllbHNlCisJCQlmcHV0cyhwcmV0dGlmeV9yZWZuYW1lKHRvLT5uYW1lKSwgc3RkZXJyKTsKKwkJaWYgKG1zZykgeworCQkJZnB1dHMoIiAoIiwgc3RkZXJyKTsKKwkJCWZwdXRzKG1zZywgc3RkZXJyKTsKKwkJCWZwdXRjKCcpJywgc3RkZXJyKTsKKwkJfQorCQlmcHV0YygnXG4nLCBzdGRlcnIpOworCX0KK30KKworc3RhdGljIHZvaWQgcHJpbnRfb2tfcmVmX3N0YXR1cyhzdHJ1Y3QgcmVmICpyZWYsIGludCBwb3JjZWxhaW4sIGludCBzdW1tYXJ5X3dpZHRoKQoreworCWlmIChyZWYtPmRlbGV0aW9uKQorCQlwcmludF9yZWZfc3RhdHVzKCctJywgIltkZWxldGVkXSIsIHJlZiwgTlVMTCwgTlVMTCwKKwkJCQkgcG9yY2VsYWluLCBzdW1tYXJ5X3dpZHRoKTsKKwllbHNlIGlmIChpc19udWxsX29pZCgmcmVmLT5vbGRfb2lkKSkKKwkJcHJpbnRfcmVmX3N0YXR1cygnKicsCisJCQkoc3RhcnRzX3dpdGgocmVmLT5uYW1lLCAicmVmcy90YWdzLyIpID8gIltuZXcgdGFnXSIgOgorCQkJIltuZXcgYnJhbmNoXSIpLAorCQkJcmVmLCByZWYtPnBlZXJfcmVmLCBOVUxMLCBwb3JjZWxhaW4sIHN1bW1hcnlfd2lkdGgpOworCWVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIHF1aWNrcmVmID0gU1RSQlVGX0lOSVQ7CisJCWNoYXIgdHlwZTsKKwkJY29uc3QgY2hhciAqbXNnOworCisJCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldigmcXVpY2tyZWYsICZyZWYtPm9sZF9vaWQsCisJCQkJCSBERUZBVUxUX0FCQlJFVik7CisJCWlmIChyZWYtPmZvcmNlZF91cGRhdGUpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnF1aWNrcmVmLCAiLi4uIik7CisJCQl0eXBlID0gJysnOworCQkJbXNnID0gImZvcmNlZCB1cGRhdGUiOworCQl9IGVsc2UgeworCQkJc3RyYnVmX2FkZHN0cigmcXVpY2tyZWYsICIuLiIpOworCQkJdHlwZSA9ICcgJzsKKwkJCW1zZyA9IE5VTEw7CisJCX0KKwkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KCZxdWlja3JlZiwgJnJlZi0+bmV3X29pZCwKKwkJCQkJIERFRkFVTFRfQUJCUkVWKTsKKworCQlwcmludF9yZWZfc3RhdHVzKHR5cGUsIHF1aWNrcmVmLmJ1ZiwgcmVmLCByZWYtPnBlZXJfcmVmLCBtc2csCisJCQkJIHBvcmNlbGFpbiwgc3VtbWFyeV93aWR0aCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZxdWlja3JlZik7CisJfQorfQorCitzdGF0aWMgaW50IHByaW50X29uZV9wdXNoX3N0YXR1cyhzdHJ1Y3QgcmVmICpyZWYsIGNvbnN0IGNoYXIgKmRlc3QsIGludCBjb3VudCwKKwkJCQkgaW50IHBvcmNlbGFpbiwgaW50IHN1bW1hcnlfd2lkdGgpCit7CisJaWYgKCFjb3VudCkgeworCQljaGFyICp1cmwgPSB0cmFuc3BvcnRfYW5vbnltaXplX3VybChkZXN0KTsKKwkJZnByaW50Zihwb3JjZWxhaW4gPyBzdGRvdXQgOiBzdGRlcnIsICJUbyAlc1xuIiwgdXJsKTsKKwkJZnJlZSh1cmwpOworCX0KKworCXN3aXRjaChyZWYtPnN0YXR1cykgeworCWNhc2UgUkVGX1NUQVRVU19OT05FOgorCQlwcmludF9yZWZfc3RhdHVzKCdYJywgIltubyBtYXRjaF0iLCByZWYsIE5VTEwsIE5VTEwsCisJCQkJIHBvcmNlbGFpbiwgc3VtbWFyeV93aWR0aCk7CisJCWJyZWFrOworCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTk9ERUxFVEU6CisJCXByaW50X3JlZl9zdGF0dXMoJyEnLCAiW3JlamVjdGVkXSIsIHJlZiwgTlVMTCwKKwkJCQkgInJlbW90ZSBkb2VzIG5vdCBzdXBwb3J0IGRlbGV0aW5nIHJlZnMiLAorCQkJCSBwb3JjZWxhaW4sIHN1bW1hcnlfd2lkdGgpOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfVVBUT0RBVEU6CisJCXByaW50X3JlZl9zdGF0dXMoJz0nLCAiW3VwIHRvIGRhdGVdIiwgcmVmLAorCQkJCSByZWYtPnBlZXJfcmVmLCBOVUxMLCBwb3JjZWxhaW4sIHN1bW1hcnlfd2lkdGgpOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05PTkZBU1RGT1JXQVJEOgorCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZWplY3RlZF0iLCByZWYsIHJlZi0+cGVlcl9yZWYsCisJCQkJICJub24tZmFzdC1mb3J3YXJkIiwgcG9yY2VsYWluLCBzdW1tYXJ5X3dpZHRoKTsKKwkJYnJlYWs7CisJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9BTFJFQURZX0VYSVNUUzoKKwkJcHJpbnRfcmVmX3N0YXR1cygnIScsICJbcmVqZWN0ZWRdIiwgcmVmLCByZWYtPnBlZXJfcmVmLAorCQkJCSAiYWxyZWFkeSBleGlzdHMiLCBwb3JjZWxhaW4sIHN1bW1hcnlfd2lkdGgpOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX0ZFVENIX0ZJUlNUOgorCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZWplY3RlZF0iLCByZWYsIHJlZi0+cGVlcl9yZWYsCisJCQkJICJmZXRjaCBmaXJzdCIsIHBvcmNlbGFpbiwgc3VtbWFyeV93aWR0aCk7CisJCWJyZWFrOworCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTkVFRFNfRk9SQ0U6CisJCXByaW50X3JlZl9zdGF0dXMoJyEnLCAiW3JlamVjdGVkXSIsIHJlZiwgcmVmLT5wZWVyX3JlZiwKKwkJCQkgIm5lZWRzIGZvcmNlIiwgcG9yY2VsYWluLCBzdW1tYXJ5X3dpZHRoKTsKKwkJYnJlYWs7CisJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9TVEFMRToKKwkJcHJpbnRfcmVmX3N0YXR1cygnIScsICJbcmVqZWN0ZWRdIiwgcmVmLCByZWYtPnBlZXJfcmVmLAorCQkJCSAic3RhbGUgaW5mbyIsIHBvcmNlbGFpbiwgc3VtbWFyeV93aWR0aCk7CisJCWJyZWFrOworCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfU0hBTExPVzoKKwkJcHJpbnRfcmVmX3N0YXR1cygnIScsICJbcmVqZWN0ZWRdIiwgcmVmLCByZWYtPnBlZXJfcmVmLAorCQkJCSAibmV3IHNoYWxsb3cgcm9vdHMgbm90IGFsbG93ZWQiLAorCQkJCSBwb3JjZWxhaW4sIHN1bW1hcnlfd2lkdGgpOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfUkVNT1RFX1JFSkVDVDoKKwkJcHJpbnRfcmVmX3N0YXR1cygnIScsICJbcmVtb3RlIHJlamVjdGVkXSIsIHJlZiwKKwkJCQkgcmVmLT5kZWxldGlvbiA/IE5VTEwgOiByZWYtPnBlZXJfcmVmLAorCQkJCSByZWYtPnJlbW90ZV9zdGF0dXMsIHBvcmNlbGFpbiwgc3VtbWFyeV93aWR0aCk7CisJCWJyZWFrOworCWNhc2UgUkVGX1NUQVRVU19FWFBFQ1RJTkdfUkVQT1JUOgorCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZW1vdGUgZmFpbHVyZV0iLCByZWYsCisJCQkJIHJlZi0+ZGVsZXRpb24gPyBOVUxMIDogcmVmLT5wZWVyX3JlZiwKKwkJCQkgInJlbW90ZSBmYWlsZWQgdG8gcmVwb3J0IHN0YXR1cyIsCisJCQkJIHBvcmNlbGFpbiwgc3VtbWFyeV93aWR0aCk7CisJCWJyZWFrOworCWNhc2UgUkVGX1NUQVRVU19BVE9NSUNfUFVTSF9GQUlMRUQ6CisJCXByaW50X3JlZl9zdGF0dXMoJyEnLCAiW3JlamVjdGVkXSIsIHJlZiwgcmVmLT5wZWVyX3JlZiwKKwkJCQkgImF0b21pYyBwdXNoIGZhaWxlZCIsIHBvcmNlbGFpbiwgc3VtbWFyeV93aWR0aCk7CisJCWJyZWFrOworCWNhc2UgUkVGX1NUQVRVU19PSzoKKwkJcHJpbnRfb2tfcmVmX3N0YXR1cyhyZWYsIHBvcmNlbGFpbiwgc3VtbWFyeV93aWR0aCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1lYXN1cmVfYWJicmV2KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IHNvZmFyKQoreworCWNoYXIgaGV4W0dJVF9NQVhfSEVYU1ogKyAxXTsKKwlpbnQgdyA9IGZpbmRfdW5pcXVlX2FiYnJldl9yKGhleCwgb2lkLCBERUZBVUxUX0FCQlJFVik7CisKKwlyZXR1cm4gKHcgPCBzb2ZhcikgPyBzb2ZhciA6IHc7Cit9CisKK2ludCB0cmFuc3BvcnRfc3VtbWFyeV93aWR0aChjb25zdCBzdHJ1Y3QgcmVmICpyZWZzKQoreworCWludCBtYXh3ID0gLTE7CisKKwlmb3IgKDsgcmVmczsgcmVmcyA9IHJlZnMtPm5leHQpIHsKKwkJbWF4dyA9IG1lYXN1cmVfYWJicmV2KCZyZWZzLT5vbGRfb2lkLCBtYXh3KTsKKwkJbWF4dyA9IG1lYXN1cmVfYWJicmV2KCZyZWZzLT5uZXdfb2lkLCBtYXh3KTsKKwl9CisJaWYgKG1heHcgPCAwKQorCQltYXh3ID0gRkFMTEJBQ0tfREVGQVVMVF9BQkJSRVY7CisJcmV0dXJuICgyICogbWF4dyArIDMpOworfQorCit2b2lkIHRyYW5zcG9ydF9wcmludF9wdXNoX3N0YXR1cyhjb25zdCBjaGFyICpkZXN0LCBzdHJ1Y3QgcmVmICpyZWZzLAorCQkJCSAgaW50IHZlcmJvc2UsIGludCBwb3JjZWxhaW4sIHVuc2lnbmVkIGludCAqcmVqZWN0X3JlYXNvbnMpCit7CisJc3RydWN0IHJlZiAqcmVmOworCWludCBuID0gMDsKKwljaGFyICpoZWFkOworCWludCBzdW1tYXJ5X3dpZHRoID0gdHJhbnNwb3J0X3N1bW1hcnlfd2lkdGgocmVmcyk7CisKKwlpZiAodHJhbnNwb3J0X2NvbG9yX2NvbmZpZygpIDwgMCkKKwkJd2FybmluZyhfKCJjb3VsZCBub3QgcGFyc2UgdHJhbnNwb3J0LmNvbG9yLiogY29uZmlnIikpOworCisJaGVhZCA9IHJlc29sdmVfcmVmZHVwKCJIRUFEIiwgUkVTT0xWRV9SRUZfUkVBRElORywgTlVMTCwgTlVMTCk7CisKKwlpZiAodmVyYm9zZSkgeworCQlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQkJaWYgKHJlZi0+c3RhdHVzID09IFJFRl9TVEFUVVNfVVBUT0RBVEUpCisJCQkJbiArPSBwcmludF9vbmVfcHVzaF9zdGF0dXMocmVmLCBkZXN0LCBuLAorCQkJCQkJCSAgIHBvcmNlbGFpbiwgc3VtbWFyeV93aWR0aCk7CisJfQorCisJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKKwkJaWYgKHJlZi0+c3RhdHVzID09IFJFRl9TVEFUVVNfT0spCisJCQluICs9IHByaW50X29uZV9wdXNoX3N0YXR1cyhyZWYsIGRlc3QsIG4sCisJCQkJCQkgICBwb3JjZWxhaW4sIHN1bW1hcnlfd2lkdGgpOworCisJKnJlamVjdF9yZWFzb25zID0gMDsKKwlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmIChyZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX05PTkUgJiYKKwkJICAgIHJlZi0+c3RhdHVzICE9IFJFRl9TVEFUVVNfVVBUT0RBVEUgJiYKKwkJICAgIHJlZi0+c3RhdHVzICE9IFJFRl9TVEFUVVNfT0spCisJCQluICs9IHByaW50X29uZV9wdXNoX3N0YXR1cyhyZWYsIGRlc3QsIG4sCisJCQkJCQkgICBwb3JjZWxhaW4sIHN1bW1hcnlfd2lkdGgpOworCQlpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQpIHsKKwkJCWlmIChoZWFkICE9IE5VTEwgJiYgIXN0cmNtcChoZWFkLCByZWYtPm5hbWUpKQorCQkJCSpyZWplY3RfcmVhc29ucyB8PSBSRUpFQ1RfTk9OX0ZGX0hFQUQ7CisJCQllbHNlCisJCQkJKnJlamVjdF9yZWFzb25zIHw9IFJFSkVDVF9OT05fRkZfT1RIRVI7CisJCX0gZWxzZSBpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfQUxSRUFEWV9FWElTVFMpIHsKKwkJCSpyZWplY3RfcmVhc29ucyB8PSBSRUpFQ1RfQUxSRUFEWV9FWElTVFM7CisJCX0gZWxzZSBpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfRkVUQ0hfRklSU1QpIHsKKwkJCSpyZWplY3RfcmVhc29ucyB8PSBSRUpFQ1RfRkVUQ0hfRklSU1Q7CisJCX0gZWxzZSBpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfTkVFRFNfRk9SQ0UpIHsKKwkJCSpyZWplY3RfcmVhc29ucyB8PSBSRUpFQ1RfTkVFRFNfRk9SQ0U7CisJCX0KKwl9CisJZnJlZShoZWFkKTsKK30KKworc3RhdGljIGludCBnaXRfdHJhbnNwb3J0X3B1c2goc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgaW50IGZsYWdzKQoreworCXN0cnVjdCBnaXRfdHJhbnNwb3J0X2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IHNlbmRfcGFja19hcmdzIGFyZ3M7CisJaW50IHJldCA9IDA7CisKKwlpZiAodHJhbnNwb3J0X2NvbG9yX2NvbmZpZygpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFkYXRhLT5nb3RfcmVtb3RlX2hlYWRzKQorCQlnZXRfcmVmc192aWFfY29ubmVjdCh0cmFuc3BvcnQsIDEsIE5VTEwpOworCisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCWFyZ3Muc2VuZF9taXJyb3IgPSAhIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUik7CisJYXJncy5mb3JjZV91cGRhdGUgPSAhIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0ZPUkNFKTsKKwlhcmdzLnVzZV90aGluX3BhY2sgPSBkYXRhLT5vcHRpb25zLnRoaW47CisJYXJncy52ZXJib3NlID0gKHRyYW5zcG9ydC0+dmVyYm9zZSA+IDApOworCWFyZ3MucXVpZXQgPSAodHJhbnNwb3J0LT52ZXJib3NlIDwgMCk7CisJYXJncy5wcm9ncmVzcyA9IHRyYW5zcG9ydC0+cHJvZ3Jlc3M7CisJYXJncy5kcnlfcnVuID0gISEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9EUllfUlVOKTsKKwlhcmdzLnBvcmNlbGFpbiA9ICEhKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfUE9SQ0VMQUlOKTsKKwlhcmdzLmF0b21pYyA9ICEhKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfQVRPTUlDKTsKKwlhcmdzLnB1c2hfb3B0aW9ucyA9IHRyYW5zcG9ydC0+cHVzaF9vcHRpb25zOworCWFyZ3MudXJsID0gdHJhbnNwb3J0LT51cmw7CisKKwlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9DRVJUX0FMV0FZUykKKwkJYXJncy5wdXNoX2NlcnQgPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0FMV0FZUzsKKwllbHNlIGlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0NFUlRfSUZfQVNLRUQpCisJCWFyZ3MucHVzaF9jZXJ0ID0gU0VORF9QQUNLX1BVU0hfQ0VSVF9JRl9BU0tFRDsKKwllbHNlCisJCWFyZ3MucHVzaF9jZXJ0ID0gU0VORF9QQUNLX1BVU0hfQ0VSVF9ORVZFUjsKKworCXN3aXRjaCAoZGF0YS0+dmVyc2lvbikgeworCWNhc2UgcHJvdG9jb2xfdjI6CisJCWRpZShfKCJzdXBwb3J0IGZvciBwcm90b2NvbCB2MiBub3QgaW1wbGVtZW50ZWQgeWV0IikpOworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3YxOgorCWNhc2UgcHJvdG9jb2xfdjA6CisJCXJldCA9IHNlbmRfcGFjaygmYXJncywgZGF0YS0+ZmQsIGRhdGEtPmNvbm4sIHJlbW90ZV9yZWZzLAorCQkJCSZkYXRhLT5leHRyYV9oYXZlKTsKKwkJYnJlYWs7CisJY2FzZSBwcm90b2NvbF91bmtub3duX3ZlcnNpb246CisJCUJVRygidW5rbm93biBwcm90b2NvbCB2ZXJzaW9uIik7CisJfQorCisJY2xvc2UoZGF0YS0+ZmRbMV0pOworCWNsb3NlKGRhdGEtPmZkWzBdKTsKKwkvKgorCSAqIEF0b21pYyBwdXNoIG1heSBhYm9ydCB0aGUgY29ubmVjdGlvbiBlYXJseSBhbmQgY2xvc2UgdGhlIHBpcGUsCisJICogd2hpY2ggbWF5IGNhdXNlIGFuIGVycm9yIGZvciBgZmluaXNoX2Nvbm5lY3QoKWAuIElnbm9yZSB0aGlzIGVycm9yCisJICogZm9yIGF0b21pYyBnaXQtcHVzaC4KKwkgKi8KKwlpZiAocmV0IHx8IGFyZ3MuYXRvbWljKQorCQlmaW5pc2hfY29ubmVjdChkYXRhLT5jb25uKTsKKwllbHNlCisJCXJldCA9IGZpbmlzaF9jb25uZWN0KGRhdGEtPmNvbm4pOworCWRhdGEtPmNvbm4gPSBOVUxMOworCWRhdGEtPmdvdF9yZW1vdGVfaGVhZHMgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjb25uZWN0X2dpdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICBjb25zdCBjaGFyICpleGVjdXRhYmxlLCBpbnQgZmRbMl0pCit7CisJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlkYXRhLT5jb25uID0gZ2l0X2Nvbm5lY3QoZGF0YS0+ZmQsIHRyYW5zcG9ydC0+dXJsLAorCQkJCSBleGVjdXRhYmxlLCAwKTsKKwlmZFswXSA9IGRhdGEtPmZkWzBdOworCWZkWzFdID0gZGF0YS0+ZmRbMV07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlzY29ubmVjdF9naXQoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQoreworCXN0cnVjdCBnaXRfdHJhbnNwb3J0X2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJaWYgKGRhdGEtPmNvbm4pIHsKKwkJaWYgKGRhdGEtPmdvdF9yZW1vdGVfaGVhZHMgJiYgIXRyYW5zcG9ydC0+c3RhdGVsZXNzX3JwYykKKwkJCXBhY2tldF9mbHVzaChkYXRhLT5mZFsxXSk7CisJCWNsb3NlKGRhdGEtPmZkWzBdKTsKKwkJY2xvc2UoZGF0YS0+ZmRbMV0pOworCQlmaW5pc2hfY29ubmVjdChkYXRhLT5jb25uKTsKKwl9CisKKwlmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHRyYW5zcG9ydF92dGFibGUgdGFrZW5fb3Zlcl92dGFibGUgPSB7CisJTlVMTCwKKwlnZXRfcmVmc192aWFfY29ubmVjdCwKKwlmZXRjaF9yZWZzX3ZpYV9wYWNrLAorCWdpdF90cmFuc3BvcnRfcHVzaCwKKwlOVUxMLAorCWRpc2Nvbm5lY3RfZ2l0Cit9OworCit2b2lkIHRyYW5zcG9ydF90YWtlX292ZXIoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjaGlsZCkKK3sKKwlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhOworCisJaWYgKCF0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMpCisJCUJVRygidGFraW5nIG92ZXIgdHJhbnNwb3J0IHJlcXVpcmVzIG5vbi1OVUxMICIKKwkJICAgICJzbWFydF9vcHRpb25zIGZpZWxkLiIpOworCisJZGF0YSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkYXRhKSk7CisJZGF0YS0+b3B0aW9ucyA9ICp0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnM7CisJZGF0YS0+Y29ubiA9IGNoaWxkOworCWRhdGEtPmZkWzBdID0gZGF0YS0+Y29ubi0+b3V0OworCWRhdGEtPmZkWzFdID0gZGF0YS0+Y29ubi0+aW47CisJZGF0YS0+Z290X3JlbW90ZV9oZWFkcyA9IDA7CisJdHJhbnNwb3J0LT5kYXRhID0gZGF0YTsKKworCXRyYW5zcG9ydC0+dnRhYmxlID0gJnRha2VuX292ZXJfdnRhYmxlOworCXRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucyA9ICYoZGF0YS0+b3B0aW9ucyk7CisKKwl0cmFuc3BvcnQtPmNhbm5vdF9yZXVzZSA9IDE7Cit9CisKK3N0YXRpYyBpbnQgaXNfZmlsZShjb25zdCBjaGFyICp1cmwpCit7CisJc3RydWN0IHN0YXQgYnVmOworCWlmIChzdGF0KHVybCwgJmJ1ZikpCisJCXJldHVybiAwOworCXJldHVybiBTX0lTUkVHKGJ1Zi5zdF9tb2RlKTsKK30KKworc3RhdGljIGludCBleHRlcm5hbF9zcGVjaWZpY2F0aW9uX2xlbihjb25zdCBjaGFyICp1cmwpCit7CisJcmV0dXJuIHN0cmNocih1cmwsICc6JykgLSB1cmw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnByb3RvY29sX3doaXRlbGlzdCh2b2lkKQoreworCXN0YXRpYyBpbnQgZW5hYmxlZCA9IC0xOworCXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgYWxsb3dlZCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJaWYgKGVuYWJsZWQgPCAwKSB7CisJCWNvbnN0IGNoYXIgKnYgPSBnZXRlbnYoIkdJVF9BTExPV19QUk9UT0NPTCIpOworCQlpZiAodikgeworCQkJc3RyaW5nX2xpc3Rfc3BsaXQoJmFsbG93ZWQsIHYsICc6JywgLTEpOworCQkJc3RyaW5nX2xpc3Rfc29ydCgmYWxsb3dlZCk7CisJCQllbmFibGVkID0gMTsKKwkJfSBlbHNlIHsKKwkJCWVuYWJsZWQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIGVuYWJsZWQgPyAmYWxsb3dlZCA6IE5VTEw7Cit9CisKK2VudW0gcHJvdG9jb2xfYWxsb3dfY29uZmlnIHsKKwlQUk9UT0NPTF9BTExPV19ORVZFUiA9IDAsCisJUFJPVE9DT0xfQUxMT1dfVVNFUl9PTkxZLAorCVBST1RPQ09MX0FMTE9XX0FMV0FZUworfTsKKworc3RhdGljIGVudW0gcHJvdG9jb2xfYWxsb3dfY29uZmlnIHBhcnNlX3Byb3RvY29sX2NvbmZpZyhjb25zdCBjaGFyICprZXksCisJCQkJCQkJY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAiYWx3YXlzIikpCisJCXJldHVybiBQUk9UT0NPTF9BTExPV19BTFdBWVM7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJuZXZlciIpKQorCQlyZXR1cm4gUFJPVE9DT0xfQUxMT1dfTkVWRVI7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJ1c2VyIikpCisJCXJldHVybiBQUk9UT0NPTF9BTExPV19VU0VSX09OTFk7CisKKwlkaWUoXygidW5rbm93biB2YWx1ZSBmb3IgY29uZmlnICclcyc6ICVzIiksIGtleSwgdmFsdWUpOworfQorCitzdGF0aWMgZW51bSBwcm90b2NvbF9hbGxvd19jb25maWcgZ2V0X3Byb3RvY29sX2NvbmZpZyhjb25zdCBjaGFyICp0eXBlKQoreworCWNoYXIgKmtleSA9IHhzdHJmbXQoInByb3RvY29sLiVzLmFsbG93IiwgdHlwZSk7CisJY2hhciAqdmFsdWU7CisKKwkvKiBmaXJzdCBjaGVjayB0aGUgcGVyLXByb3RvY29sIGNvbmZpZyAqLworCWlmICghZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKGtleSwgJnZhbHVlKSkgeworCQllbnVtIHByb3RvY29sX2FsbG93X2NvbmZpZyByZXQgPQorCQkJcGFyc2VfcHJvdG9jb2xfY29uZmlnKGtleSwgdmFsdWUpOworCQlmcmVlKGtleSk7CisJCWZyZWUodmFsdWUpOworCQlyZXR1cm4gcmV0OworCX0KKwlmcmVlKGtleSk7CisKKwkvKiBpZiBkZWZpbmVkLCBmYWxsYmFjayB0byB1c2VyLWRlZmluZWQgZGVmYXVsdCBmb3IgdW5rbm93biBwcm90b2NvbHMgKi8KKwlpZiAoIWdpdF9jb25maWdfZ2V0X3N0cmluZygicHJvdG9jb2wuYWxsb3ciLCAmdmFsdWUpKSB7CisJCWVudW0gcHJvdG9jb2xfYWxsb3dfY29uZmlnIHJldCA9CisJCQlwYXJzZV9wcm90b2NvbF9jb25maWcoInByb3RvY29sLmFsbG93IiwgdmFsdWUpOworCQlmcmVlKHZhbHVlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBmYWxsYmFjayB0byBidWlsdC1pbiBkZWZhdWx0cyAqLworCS8qIGtub3duIHNhZmUgKi8KKwlpZiAoIXN0cmNtcCh0eXBlLCAiaHR0cCIpIHx8CisJICAgICFzdHJjbXAodHlwZSwgImh0dHBzIikgfHwKKwkgICAgIXN0cmNtcCh0eXBlLCAiZ2l0IikgfHwKKwkgICAgIXN0cmNtcCh0eXBlLCAic3NoIikgfHwKKwkgICAgIXN0cmNtcCh0eXBlLCAiZmlsZSIpKQorCQlyZXR1cm4gUFJPVE9DT0xfQUxMT1dfQUxXQVlTOworCisJLyoga25vd24gc2Nhcnk7IGVyciBvbiB0aGUgc2lkZSBvZiBjYXV0aW9uICovCisJaWYgKCFzdHJjbXAodHlwZSwgImV4dCIpKQorCQlyZXR1cm4gUFJPVE9DT0xfQUxMT1dfTkVWRVI7CisKKwkvKiB1bmtub3duOyBieSBkZWZhdWx0IGxldCB0aGVtIGJlIHVzZWQgb25seSBkaXJlY3RseSBieSB0aGUgdXNlciAqLworCXJldHVybiBQUk9UT0NPTF9BTExPV19VU0VSX09OTFk7Cit9CisKK2ludCBpc190cmFuc3BvcnRfYWxsb3dlZChjb25zdCBjaGFyICp0eXBlLCBpbnQgZnJvbV91c2VyKQoreworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqd2hpdGVsaXN0ID0gcHJvdG9jb2xfd2hpdGVsaXN0KCk7CisJaWYgKHdoaXRlbGlzdCkKKwkJcmV0dXJuIHN0cmluZ19saXN0X2hhc19zdHJpbmcod2hpdGVsaXN0LCB0eXBlKTsKKworCXN3aXRjaCAoZ2V0X3Byb3RvY29sX2NvbmZpZyh0eXBlKSkgeworCWNhc2UgUFJPVE9DT0xfQUxMT1dfQUxXQVlTOgorCQlyZXR1cm4gMTsKKwljYXNlIFBST1RPQ09MX0FMTE9XX05FVkVSOgorCQlyZXR1cm4gMDsKKwljYXNlIFBST1RPQ09MX0FMTE9XX1VTRVJfT05MWToKKwkJaWYgKGZyb21fdXNlciA8IDApCisJCQlmcm9tX3VzZXIgPSBnaXRfZW52X2Jvb2woIkdJVF9QUk9UT0NPTF9GUk9NX1VTRVIiLCAxKTsKKwkJcmV0dXJuIGZyb21fdXNlcjsKKwl9CisKKwlCVUcoImludmFsaWQgcHJvdG9jb2xfYWxsb3dfY29uZmlnIHR5cGUiKTsKK30KKwordm9pZCB0cmFuc3BvcnRfY2hlY2tfYWxsb3dlZChjb25zdCBjaGFyICp0eXBlKQoreworCWlmICghaXNfdHJhbnNwb3J0X2FsbG93ZWQodHlwZSwgLTEpKQorCQlkaWUoXygidHJhbnNwb3J0ICclcycgbm90IGFsbG93ZWQiKSwgdHlwZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNwb3J0X3Z0YWJsZSBidW5kbGVfdnRhYmxlID0geworCU5VTEwsCisJZ2V0X3JlZnNfZnJvbV9idW5kbGUsCisJZmV0Y2hfcmVmc19mcm9tX2J1bmRsZSwKKwlOVUxMLAorCU5VTEwsCisJY2xvc2VfYnVuZGxlCit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zcG9ydF92dGFibGUgYnVpbHRpbl9zbWFydF92dGFibGUgPSB7CisJTlVMTCwKKwlnZXRfcmVmc192aWFfY29ubmVjdCwKKwlmZXRjaF9yZWZzX3ZpYV9wYWNrLAorCWdpdF90cmFuc3BvcnRfcHVzaCwKKwljb25uZWN0X2dpdCwKKwlkaXNjb25uZWN0X2dpdAorfTsKKworc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0X2dldChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnVybCkKK3sKKwljb25zdCBjaGFyICpoZWxwZXI7CisJc3RydWN0IHRyYW5zcG9ydCAqcmV0ID0geGNhbGxvYygxLCBzaXplb2YoKnJldCkpOworCisJcmV0LT5wcm9ncmVzcyA9IGlzYXR0eSgyKTsKKworCWlmICghcmVtb3RlKQorCQlCVUcoIk5vIHJlbW90ZSBwcm92aWRlZCB0byB0cmFuc3BvcnRfZ2V0KCkiKTsKKworCXJldC0+Z290X3JlbW90ZV9yZWZzID0gMDsKKwlyZXQtPnJlbW90ZSA9IHJlbW90ZTsKKwloZWxwZXIgPSByZW1vdGUtPmZvcmVpZ25fdmNzOworCisJaWYgKCF1cmwgJiYgcmVtb3RlLT51cmwpCisJCXVybCA9IHJlbW90ZS0+dXJsWzBdOworCXJldC0+dXJsID0gdXJsOworCisJLyogbWF5YmUgaXQgaXMgYSBmb3JlaWduIFVSTD8gKi8KKwlpZiAodXJsKSB7CisJCWNvbnN0IGNoYXIgKnAgPSB1cmw7CisKKwkJd2hpbGUgKGlzX3VybHNjaGVtZWNoYXIocCA9PSB1cmwsICpwKSkKKwkJCXArKzsKKwkJaWYgKHN0YXJ0c193aXRoKHAsICI6OiIpKQorCQkJaGVscGVyID0geHN0cm5kdXAodXJsLCBwIC0gdXJsKTsKKwl9CisKKwlpZiAoaGVscGVyKSB7CisJCXRyYW5zcG9ydF9oZWxwZXJfaW5pdChyZXQsIGhlbHBlcik7CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aCh1cmwsICJyc3luYzoiKSkgeworCQlkaWUoXygiZ2l0LW92ZXItcnN5bmMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpKTsKKwl9IGVsc2UgaWYgKHVybF9pc19sb2NhbF9ub3Rfc3NoKHVybCkgJiYgaXNfZmlsZSh1cmwpICYmIGlzX2J1bmRsZSh1cmwsIDEpKSB7CisJCXN0cnVjdCBidW5kbGVfdHJhbnNwb3J0X2RhdGEgKmRhdGEgPSB4Y2FsbG9jKDEsIHNpemVvZigqZGF0YSkpOworCQl0cmFuc3BvcnRfY2hlY2tfYWxsb3dlZCgiZmlsZSIpOworCQlyZXQtPmRhdGEgPSBkYXRhOworCQlyZXQtPnZ0YWJsZSA9ICZidW5kbGVfdnRhYmxlOworCQlyZXQtPnNtYXJ0X29wdGlvbnMgPSBOVUxMOworCX0gZWxzZSBpZiAoIWlzX3VybCh1cmwpCisJCXx8IHN0YXJ0c193aXRoKHVybCwgImZpbGU6Ly8iKQorCQl8fCBzdGFydHNfd2l0aCh1cmwsICJnaXQ6Ly8iKQorCQl8fCBzdGFydHNfd2l0aCh1cmwsICJzc2g6Ly8iKQorCQl8fCBzdGFydHNfd2l0aCh1cmwsICJnaXQrc3NoOi8vIikgLyogZGVwcmVjYXRlZCAtIGRvIG5vdCB1c2UgKi8KKwkJfHwgc3RhcnRzX3dpdGgodXJsLCAic3NoK2dpdDovLyIpIC8qIGRlcHJlY2F0ZWQgLSBkbyBub3QgdXNlICovCisJCSkgeworCQkvKgorCQkgKiBUaGVzZSBhcmUgYnVpbHRpbiBzbWFydCB0cmFuc3BvcnRzOyAiYWxsb3dlZCIgdHJhbnNwb3J0cworCQkgKiB3aWxsIGJlIGNoZWNrZWQgaW5kaXZpZHVhbGx5IGluIGdpdF9jb25uZWN0LgorCQkgKi8KKwkJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkYXRhKSk7CisJCXJldC0+ZGF0YSA9IGRhdGE7CisJCXJldC0+dnRhYmxlID0gJmJ1aWx0aW5fc21hcnRfdnRhYmxlOworCQlyZXQtPnNtYXJ0X29wdGlvbnMgPSAmKGRhdGEtPm9wdGlvbnMpOworCisJCWRhdGEtPmNvbm4gPSBOVUxMOworCQlkYXRhLT5nb3RfcmVtb3RlX2hlYWRzID0gMDsKKwl9IGVsc2UgeworCQkvKiBVbmtub3duIHByb3RvY29sIGluIFVSTC4gUGFzcyB0byBleHRlcm5hbCBoYW5kbGVyLiAqLworCQlpbnQgbGVuID0gZXh0ZXJuYWxfc3BlY2lmaWNhdGlvbl9sZW4odXJsKTsKKwkJY2hhciAqaGFuZGxlciA9IHhtZW1kdXB6KHVybCwgbGVuKTsKKwkJdHJhbnNwb3J0X2hlbHBlcl9pbml0KHJldCwgaGFuZGxlcik7CisJfQorCisJaWYgKHJldC0+c21hcnRfb3B0aW9ucykgeworCQlyZXQtPnNtYXJ0X29wdGlvbnMtPnRoaW4gPSAxOworCQlyZXQtPnNtYXJ0X29wdGlvbnMtPnVwbG9hZHBhY2sgPSAiZ2l0LXVwbG9hZC1wYWNrIjsKKwkJaWYgKHJlbW90ZS0+dXBsb2FkcGFjaykKKwkJCXJldC0+c21hcnRfb3B0aW9ucy0+dXBsb2FkcGFjayA9IHJlbW90ZS0+dXBsb2FkcGFjazsKKwkJcmV0LT5zbWFydF9vcHRpb25zLT5yZWNlaXZlcGFjayA9ICJnaXQtcmVjZWl2ZS1wYWNrIjsKKwkJaWYgKHJlbW90ZS0+cmVjZWl2ZXBhY2spCisJCQlyZXQtPnNtYXJ0X29wdGlvbnMtPnJlY2VpdmVwYWNrID0gcmVtb3RlLT5yZWNlaXZlcGFjazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdHJhbnNwb3J0X3NldF9vcHRpb24oc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCBnaXRfcmVwb3J0cyA9IDEsIHByb3RvY29sX3JlcG9ydHMgPSAxOworCisJaWYgKHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucykKKwkJZ2l0X3JlcG9ydHMgPSBzZXRfZ2l0X29wdGlvbih0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMsCisJCQkJCSAgICAgbmFtZSwgdmFsdWUpOworCisJaWYgKHRyYW5zcG9ydC0+dnRhYmxlLT5zZXRfb3B0aW9uKQorCQlwcm90b2NvbF9yZXBvcnRzID0gdHJhbnNwb3J0LT52dGFibGUtPnNldF9vcHRpb24odHJhbnNwb3J0LAorCQkJCQkJCQkgbmFtZSwgdmFsdWUpOworCisJLyogSWYgZWl0aGVyIHJlcG9ydCBpcyAwLCByZXBvcnQgMCAoc3VjY2VzcykuICovCisJaWYgKCFnaXRfcmVwb3J0cyB8fCAhcHJvdG9jb2xfcmVwb3J0cykKKwkJcmV0dXJuIDA7CisJLyogSWYgZWl0aGVyIHJlcG9ydHMgLTEgKGludmFsaWQgdmFsdWUpLCByZXBvcnQgLTEuICovCisJaWYgKChnaXRfcmVwb3J0cyA9PSAtMSkgfHwgKHByb3RvY29sX3JlcG9ydHMgPT0gLTEpKQorCQlyZXR1cm4gLTE7CisJLyogT3RoZXJ3aXNlIGlmIGJvdGggcmVwb3J0IHVua25vd24sIHJlcG9ydCB1bmtub3duLiAqLworCXJldHVybiAxOworfQorCit2b2lkIHRyYW5zcG9ydF9zZXRfdmVyYm9zaXR5KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IHZlcmJvc2l0eSwKKwlpbnQgZm9yY2VfcHJvZ3Jlc3MpCit7CisJaWYgKHZlcmJvc2l0eSA+PSAxKQorCQl0cmFuc3BvcnQtPnZlcmJvc2UgPSB2ZXJib3NpdHkgPD0gMyA/IHZlcmJvc2l0eSA6IDM7CisJaWYgKHZlcmJvc2l0eSA8IDApCisJCXRyYW5zcG9ydC0+dmVyYm9zZSA9IC0xOworCisJLyoqCisJICogUnVsZXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0byByZXBvcnQgcHJvZ3Jlc3MgKHByb2Nlc3NpbmcgYWJvcnRzCisJICogd2hlbiBhIHJ1bGUgaXMgc2F0aXNmaWVkKToKKwkgKgorCSAqICAgLiBSZXBvcnQgcHJvZ3Jlc3MsIGlmIGZvcmNlX3Byb2dyZXNzIGlzIDEgKGllLiAtLXByb2dyZXNzKS4KKwkgKiAgIC4gRG9uJ3QgcmVwb3J0IHByb2dyZXNzLCBpZiBmb3JjZV9wcm9ncmVzcyBpcyAwIChpZS4gLS1uby1wcm9ncmVzcykuCisJICogICAuIERvbid0IHJlcG9ydCBwcm9ncmVzcywgaWYgdmVyYm9zaXR5IDwgMCAoaWUuIC1xLy0tcXVpZXQgKS4KKwkgKiAgIC4gUmVwb3J0IHByb2dyZXNzIGlmIGlzYXR0eSgyKSBpcyAxLgorCSAqKi8KKwlpZiAoZm9yY2VfcHJvZ3Jlc3MgPj0gMCkKKwkJdHJhbnNwb3J0LT5wcm9ncmVzcyA9ICEhZm9yY2VfcHJvZ3Jlc3M7CisJZWxzZQorCQl0cmFuc3BvcnQtPnByb2dyZXNzID0gdmVyYm9zaXR5ID49IDAgJiYgaXNhdHR5KDIpOworfQorCitzdGF0aWMgdm9pZCBkaWVfd2l0aF91bnB1c2hlZF9zdWJtb2R1bGVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbmVlZHNfcHVzaGluZykKK3sKKwlpbnQgaTsKKworCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKKwkJCSJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmVlZHNfcHVzaGluZy0+bnI7IGkrKykKKwkJZnByaW50ZihzdGRlcnIsICIgICVzXG4iLCBuZWVkc19wdXNoaW5nLT5pdGVtc1tpXS5zdHJpbmcpOworCWZwcmludGYoc3RkZXJyLCBfKCJcblBsZWFzZSB0cnlcblxuIgorCQkJICAiCWdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuXG4iCisJCQkgICJvciBjZCB0byB0aGUgcGF0aCBhbmQgdXNlXG5cbiIKKwkJCSAgIglnaXQgcHVzaFxuXG4iCisJCQkgICJ0byBwdXNoIHRoZW0gdG8gYSByZW1vdGUuXG5cbiIpKTsKKworCXN0cmluZ19saXN0X2NsZWFyKG5lZWRzX3B1c2hpbmcsIDApOworCisJZGllKF8oIkFib3J0aW5nLiIpKTsKK30KKworc3RhdGljIGludCBydW5fcHJlX3B1c2hfaG9vayhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgICAgIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzKQoreworCWludCByZXQgPSAwLCB4OworCXN0cnVjdCByZWYgKnI7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcHJvYyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKKwljb25zdCBjaGFyICphcmd2WzRdOworCisJaWYgKCEoYXJndlswXSA9IGZpbmRfaG9vaygicHJlLXB1c2giKSkpCisJCXJldHVybiAwOworCisJYXJndlsxXSA9IHRyYW5zcG9ydC0+cmVtb3RlLT5uYW1lOworCWFyZ3ZbMl0gPSB0cmFuc3BvcnQtPnVybDsKKwlhcmd2WzNdID0gTlVMTDsKKworCXByb2MuYXJndiA9IGFyZ3Y7CisJcHJvYy5pbiA9IC0xOworCXByb2MudHJhY2UyX2hvb2tfbmFtZSA9ICJwcmUtcHVzaCI7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmcHJvYykpIHsKKwkJZmluaXNoX2NvbW1hbmQoJnByb2MpOworCQlyZXR1cm4gLTE7CisJfQorCisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKworCXN0cmJ1Zl9pbml0KCZidWYsIDI1Nik7CisKKwlmb3IgKHIgPSByZW1vdGVfcmVmczsgcjsgciA9IHItPm5leHQpIHsKKwkJaWYgKCFyLT5wZWVyX3JlZikgY29udGludWU7CisJCWlmIChyLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQpIGNvbnRpbnVlOworCQlpZiAoci0+c3RhdHVzID09IFJFRl9TVEFUVVNfUkVKRUNUX1NUQUxFKSBjb250aW51ZTsKKwkJaWYgKHItPnN0YXR1cyA9PSBSRUZfU1RBVFVTX1VQVE9EQVRFKSBjb250aW51ZTsKKworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCAmYnVmLCAiJXMgJXMgJXMgJXNcbiIsCisJCQkgci0+cGVlcl9yZWYtPm5hbWUsIG9pZF90b19oZXgoJnItPm5ld19vaWQpLAorCQkJIHItPm5hbWUsIG9pZF90b19oZXgoJnItPm9sZF9vaWQpKTsKKworCQlpZiAod3JpdGVfaW5fZnVsbChwcm9jLmluLCBidWYuYnVmLCBidWYubGVuKSA8IDApIHsKKwkJCS8qIFdlIGRvIG5vdCBtaW5kIGlmIGEgaG9vayBkb2VzIG5vdCByZWFkIGFsbCByZWZzLiAqLworCQkJaWYgKGVycm5vICE9IEVQSVBFKQorCQkJCXJldCA9IC0xOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXggPSBjbG9zZShwcm9jLmluKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0geDsKKworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKworCXggPSBmaW5pc2hfY29tbWFuZCgmcHJvYyk7CisJaWYgKCFyZXQpCisJCXJldCA9IHg7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdHJhbnNwb3J0X3B1c2goc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgIHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJICAgc3RydWN0IHJlZnNwZWMgKnJzLCBpbnQgZmxhZ3MsCisJCSAgIHVuc2lnbmVkIGludCAqcmVqZWN0X3JlYXNvbnMpCit7CisJKnJlamVjdF9yZWFzb25zID0gMDsKKworCWlmICh0cmFuc3BvcnRfY29sb3JfY29uZmlnKCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodHJhbnNwb3J0LT52dGFibGUtPnB1c2hfcmVmcykgeworCQlzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmczsKKwkJc3RydWN0IHJlZiAqbG9jYWxfcmVmcyA9IGdldF9sb2NhbF9oZWFkcygpOworCQlpbnQgbWF0Y2hfZmxhZ3MgPSBNQVRDSF9SRUZTX05PTkU7CisJCWludCB2ZXJib3NlID0gKHRyYW5zcG9ydC0+dmVyYm9zZSA+IDApOworCQlpbnQgcXVpZXQgPSAodHJhbnNwb3J0LT52ZXJib3NlIDwgMCk7CisJCWludCBwb3JjZWxhaW4gPSBmbGFncyAmIFRSQU5TUE9SVF9QVVNIX1BPUkNFTEFJTjsKKwkJaW50IHByZXRlbmQgPSBmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0RSWV9SVU47CisJCWludCBwdXNoX3JldCwgcmV0LCBlcnI7CisJCXN0cnVjdCBhcmd2X2FycmF5IHJlZl9wcmVmaXhlcyA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCQlpZiAoY2hlY2tfcHVzaF9yZWZzKGxvY2FsX3JlZnMsIHJzKSA8IDApCisJCQlyZXR1cm4gLTE7CisKKwkJcmVmc3BlY19yZWZfcHJlZml4ZXMocnMsICZyZWZfcHJlZml4ZXMpOworCisJCXRyYWNlMl9yZWdpb25fZW50ZXIoInRyYW5zcG9ydF9wdXNoIiwgImdldF9yZWZzX2xpc3QiLCByKTsKKwkJcmVtb3RlX3JlZnMgPSB0cmFuc3BvcnQtPnZ0YWJsZS0+Z2V0X3JlZnNfbGlzdCh0cmFuc3BvcnQsIDEsCisJCQkJCQkJICAgICAgICZyZWZfcHJlZml4ZXMpOworCQl0cmFjZTJfcmVnaW9uX2xlYXZlKCJ0cmFuc3BvcnRfcHVzaCIsICJnZXRfcmVmc19saXN0Iiwgcik7CisKKwkJYXJndl9hcnJheV9jbGVhcigmcmVmX3ByZWZpeGVzKTsKKworCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9BTEwpCisJCQltYXRjaF9mbGFncyB8PSBNQVRDSF9SRUZTX0FMTDsKKwkJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfTUlSUk9SKQorCQkJbWF0Y2hfZmxhZ3MgfD0gTUFUQ0hfUkVGU19NSVJST1I7CisJCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX1BSVU5FKQorCQkJbWF0Y2hfZmxhZ3MgfD0gTUFUQ0hfUkVGU19QUlVORTsKKwkJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRk9MTE9XX1RBR1MpCisJCQltYXRjaF9mbGFncyB8PSBNQVRDSF9SRUZTX0ZPTExPV19UQUdTOworCisJCWlmIChtYXRjaF9wdXNoX3JlZnMobG9jYWxfcmVmcywgJnJlbW90ZV9yZWZzLCBycywgbWF0Y2hfZmxhZ3MpKQorCQkJcmV0dXJuIC0xOworCisJCWlmICh0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMgJiYKKwkJICAgIHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucy0+Y2FzICYmCisJCSAgICAhaXNfZW1wdHlfY2FzKHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucy0+Y2FzKSkKKwkJCWFwcGx5X3B1c2hfY2FzKHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucy0+Y2FzLAorCQkJCSAgICAgICB0cmFuc3BvcnQtPnJlbW90ZSwgcmVtb3RlX3JlZnMpOworCisJCXNldF9yZWZfc3RhdHVzX2Zvcl9wdXNoKHJlbW90ZV9yZWZzLAorCQkJZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9NSVJST1IsCisJCQlmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0ZPUkNFKTsKKworCQlpZiAoIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX05PX0hPT0spKQorCQkJaWYgKHJ1bl9wcmVfcHVzaF9ob29rKHRyYW5zcG9ydCwgcmVtb3RlX3JlZnMpKQorCQkJCXJldHVybiAtMTsKKworCQlpZiAoKGZsYWdzICYgKFRSQU5TUE9SVF9SRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EIHwKKwkJCSAgICAgIFRSQU5TUE9SVF9SRUNVUlNFX1NVQk1PRFVMRVNfT05MWSkpICYmCisJCSAgICAhaXNfYmFyZV9yZXBvc2l0b3J5KCkpIHsKKwkJCXN0cnVjdCByZWYgKnJlZiA9IHJlbW90ZV9yZWZzOworCQkJc3RydWN0IG9pZF9hcnJheSBjb21taXRzID0gT0lEX0FSUkFZX0lOSVQ7CisKKwkJCXRyYWNlMl9yZWdpb25fZW50ZXIoInRyYW5zcG9ydF9wdXNoIiwgInB1c2hfc3VibW9kdWxlcyIsIHIpOworCQkJZm9yICg7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQkJCWlmICghaXNfbnVsbF9vaWQoJnJlZi0+bmV3X29pZCkpCisJCQkJCW9pZF9hcnJheV9hcHBlbmQoJmNvbW1pdHMsCisJCQkJCQkJICAmcmVmLT5uZXdfb2lkKTsKKworCQkJaWYgKCFwdXNoX3VucHVzaGVkX3N1Ym1vZHVsZXMociwKKwkJCQkJCSAgICAgICZjb21taXRzLAorCQkJCQkJICAgICAgdHJhbnNwb3J0LT5yZW1vdGUsCisJCQkJCQkgICAgICBycywKKwkJCQkJCSAgICAgIHRyYW5zcG9ydC0+cHVzaF9vcHRpb25zLAorCQkJCQkJICAgICAgcHJldGVuZCkpIHsKKwkJCQlvaWRfYXJyYXlfY2xlYXIoJmNvbW1pdHMpOworCQkJCXRyYWNlMl9yZWdpb25fbGVhdmUoInRyYW5zcG9ydF9wdXNoIiwgInB1c2hfc3VibW9kdWxlcyIsIHIpOworCQkJCWRpZShfKCJmYWlsZWQgdG8gcHVzaCBhbGwgbmVlZGVkIHN1Ym1vZHVsZXMiKSk7CisJCQl9CisJCQlvaWRfYXJyYXlfY2xlYXIoJmNvbW1pdHMpOworCQkJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgidHJhbnNwb3J0X3B1c2giLCAicHVzaF9zdWJtb2R1bGVzIiwgcik7CisJCX0KKworCQlpZiAoKChmbGFncyAmIFRSQU5TUE9SVF9SRUNVUlNFX1NVQk1PRFVMRVNfQ0hFQ0spIHx8CisJCSAgICAgKChmbGFncyAmIChUUkFOU1BPUlRfUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORCB8CisJCQkJVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19PTkxZKSkgJiYKKwkJICAgICAgIXByZXRlbmQpKSAmJiAhaXNfYmFyZV9yZXBvc2l0b3J5KCkpIHsKKwkJCXN0cnVjdCByZWYgKnJlZiA9IHJlbW90ZV9yZWZzOworCQkJc3RydWN0IHN0cmluZ19saXN0IG5lZWRzX3B1c2hpbmcgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwkJCXN0cnVjdCBvaWRfYXJyYXkgY29tbWl0cyA9IE9JRF9BUlJBWV9JTklUOworCisJCQl0cmFjZTJfcmVnaW9uX2VudGVyKCJ0cmFuc3BvcnRfcHVzaCIsICJjaGVja19zdWJtb2R1bGVzIiwgcik7CisJCQlmb3IgKDsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCQkJaWYgKCFpc19udWxsX29pZCgmcmVmLT5uZXdfb2lkKSkKKwkJCQkJb2lkX2FycmF5X2FwcGVuZCgmY29tbWl0cywKKwkJCQkJCQkgICZyZWYtPm5ld19vaWQpOworCisJCQlpZiAoZmluZF91bnB1c2hlZF9zdWJtb2R1bGVzKHIsCisJCQkJCQkgICAgICZjb21taXRzLAorCQkJCQkJICAgICB0cmFuc3BvcnQtPnJlbW90ZS0+bmFtZSwKKwkJCQkJCSAgICAgJm5lZWRzX3B1c2hpbmcpKSB7CisJCQkJb2lkX2FycmF5X2NsZWFyKCZjb21taXRzKTsKKwkJCQl0cmFjZTJfcmVnaW9uX2xlYXZlKCJ0cmFuc3BvcnRfcHVzaCIsICJjaGVja19zdWJtb2R1bGVzIiwgcik7CisJCQkJZGllX3dpdGhfdW5wdXNoZWRfc3VibW9kdWxlcygmbmVlZHNfcHVzaGluZyk7CisJCQl9CisJCQlzdHJpbmdfbGlzdF9jbGVhcigmbmVlZHNfcHVzaGluZywgMCk7CisJCQlvaWRfYXJyYXlfY2xlYXIoJmNvbW1pdHMpOworCQkJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgidHJhbnNwb3J0X3B1c2giLCAiY2hlY2tfc3VibW9kdWxlcyIsIHIpOworCQl9CisKKwkJaWYgKCEoZmxhZ3MgJiBUUkFOU1BPUlRfUkVDVVJTRV9TVUJNT0RVTEVTX09OTFkpKSB7CisJCQl0cmFjZTJfcmVnaW9uX2VudGVyKCJ0cmFuc3BvcnRfcHVzaCIsICJwdXNoX3JlZnMiLCByKTsKKwkJCXB1c2hfcmV0ID0gdHJhbnNwb3J0LT52dGFibGUtPnB1c2hfcmVmcyh0cmFuc3BvcnQsIHJlbW90ZV9yZWZzLCBmbGFncyk7CisJCQl0cmFjZTJfcmVnaW9uX2xlYXZlKCJ0cmFuc3BvcnRfcHVzaCIsICJwdXNoX3JlZnMiLCByKTsKKwkJfSBlbHNlCisJCQlwdXNoX3JldCA9IDA7CisJCWVyciA9IHB1c2hfaGFkX2Vycm9ycyhyZW1vdGVfcmVmcyk7CisJCXJldCA9IHB1c2hfcmV0IHwgZXJyOworCisJCWlmICghcXVpZXQgfHwgZXJyKQorCQkJdHJhbnNwb3J0X3ByaW50X3B1c2hfc3RhdHVzKHRyYW5zcG9ydC0+dXJsLCByZW1vdGVfcmVmcywKKwkJCQkJdmVyYm9zZSB8IHBvcmNlbGFpbiwgcG9yY2VsYWluLAorCQkJCQlyZWplY3RfcmVhc29ucyk7CisKKwkJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfU0VUX1VQU1RSRUFNKQorCQkJc2V0X3Vwc3RyZWFtcyh0cmFuc3BvcnQsIHJlbW90ZV9yZWZzLCBwcmV0ZW5kKTsKKworCQlpZiAoIShmbGFncyAmIChUUkFOU1BPUlRfUFVTSF9EUllfUlVOIHwKKwkJCSAgICAgICBUUkFOU1BPUlRfUkVDVVJTRV9TVUJNT0RVTEVTX09OTFkpKSkgeworCQkJc3RydWN0IHJlZiAqcmVmOworCQkJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCQkJdHJhbnNwb3J0X3VwZGF0ZV90cmFja2luZ19yZWYodHJhbnNwb3J0LT5yZW1vdGUsIHJlZiwgdmVyYm9zZSk7CisJCX0KKworCQlpZiAocG9yY2VsYWluICYmICFwdXNoX3JldCkKKwkJCXB1dHMoIkRvbmUiKTsKKwkJZWxzZSBpZiAoIXF1aWV0ICYmICFyZXQgJiYgIXRyYW5zcG9ydF9yZWZzX3B1c2hlZChyZW1vdGVfcmVmcykpCisJCQlmcHJpbnRmKHN0ZGVyciwgIkV2ZXJ5dGhpbmcgdXAtdG8tZGF0ZVxuIik7CisKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK2NvbnN0IHN0cnVjdCByZWYgKnRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJCQkgICAgY29uc3Qgc3RydWN0IGFyZ3ZfYXJyYXkgKnJlZl9wcmVmaXhlcykKK3sKKwlpZiAoIXRyYW5zcG9ydC0+Z290X3JlbW90ZV9yZWZzKSB7CisJCXRyYW5zcG9ydC0+cmVtb3RlX3JlZnMgPQorCQkJdHJhbnNwb3J0LT52dGFibGUtPmdldF9yZWZzX2xpc3QodHJhbnNwb3J0LCAwLAorCQkJCQkJCSByZWZfcHJlZml4ZXMpOworCQl0cmFuc3BvcnQtPmdvdF9yZW1vdGVfcmVmcyA9IDE7CisJfQorCisJcmV0dXJuIHRyYW5zcG9ydC0+cmVtb3RlX3JlZnM7Cit9CisKK2ludCB0cmFuc3BvcnRfZmV0Y2hfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCByZWYgKnJlZnMpCit7CisJaW50IHJjOworCWludCBucl9oZWFkcyA9IDAsIG5yX2FsbG9jID0gMCwgbnJfcmVmcyA9IDA7CisJc3RydWN0IHJlZiAqKmhlYWRzID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICpybTsKKworCWZvciAocm0gPSByZWZzOyBybTsgcm0gPSBybS0+bmV4dCkgeworCQlucl9yZWZzKys7CisJCWlmIChybS0+cGVlcl9yZWYgJiYKKwkJICAgICFpc19udWxsX29pZCgmcm0tPm9sZF9vaWQpICYmCisJCSAgICBvaWRlcSgmcm0tPnBlZXJfcmVmLT5vbGRfb2lkLCAmcm0tPm9sZF9vaWQpKQorCQkJY29udGludWU7CisJCUFMTE9DX0dST1coaGVhZHMsIG5yX2hlYWRzICsgMSwgbnJfYWxsb2MpOworCQloZWFkc1tucl9oZWFkcysrXSA9IHJtOworCX0KKworCWlmICghbnJfaGVhZHMpIHsKKwkJLyoKKwkJICogV2hlbiBkZWVwZW5pbmcgb2YgYSBzaGFsbG93IHJlcG9zaXRvcnkgaXMgcmVxdWVzdGVkLAorCQkgKiB0aGVuIGxvY2FsIGFuZCByZW1vdGUgcmVmcyBhcmUgbGlrZWx5IHRvIHN0aWxsIGJlIGVxdWFsLgorCQkgKiBKdXN0IGZlZWQgdGhlbSBhbGwgdG8gdGhlIGZldGNoIG1ldGhvZCBpbiB0aGF0IGNhc2UuCisJCSAqIFRoaXMgY29uZGl0aW9uIHNob3VsZG4ndCBiZSBtZXQgaW4gYSBub24tZGVlcGVuaW5nIGZldGNoCisJCSAqIChzZWUgYnVpbHRpbi9mZXRjaC5jOnF1aWNrZmV0Y2goKSkuCisJCSAqLworCQlBTExPQ19BUlJBWShoZWFkcywgbnJfcmVmcyk7CisJCWZvciAocm0gPSByZWZzOyBybTsgcm0gPSBybS0+bmV4dCkKKwkJCWhlYWRzW25yX2hlYWRzKytdID0gcm07CisJfQorCisJcmMgPSB0cmFuc3BvcnQtPnZ0YWJsZS0+ZmV0Y2godHJhbnNwb3J0LCBucl9oZWFkcywgaGVhZHMpOworCisJZnJlZShoZWFkcyk7CisJcmV0dXJuIHJjOworfQorCit2b2lkIHRyYW5zcG9ydF91bmxvY2tfcGFjayhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJaWYgKHRyYW5zcG9ydC0+cGFja19sb2NrZmlsZSkgeworCQl1bmxpbmtfb3Jfd2Fybih0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUpOworCQlGUkVFX0FORF9OVUxMKHRyYW5zcG9ydC0+cGFja19sb2NrZmlsZSk7CisJfQorfQorCitpbnQgdHJhbnNwb3J0X2Nvbm5lY3Qoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBjb25zdCBjaGFyICpleGVjLCBpbnQgZmRbMl0pCit7CisJaWYgKHRyYW5zcG9ydC0+dnRhYmxlLT5jb25uZWN0KQorCQlyZXR1cm4gdHJhbnNwb3J0LT52dGFibGUtPmNvbm5lY3QodHJhbnNwb3J0LCBuYW1lLCBleGVjLCBmZCk7CisJZWxzZQorCQlkaWUoXygib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiKSk7Cit9CisKK2ludCB0cmFuc3BvcnRfZGlzY29ubmVjdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJaW50IHJldCA9IDA7CisJaWYgKHRyYW5zcG9ydC0+dnRhYmxlLT5kaXNjb25uZWN0KQorCQlyZXQgPSB0cmFuc3BvcnQtPnZ0YWJsZS0+ZGlzY29ubmVjdCh0cmFuc3BvcnQpOworCWZyZWUodHJhbnNwb3J0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU3RyaXAgdXNlcm5hbWUgKGFuZCBwYXNzd29yZCkgZnJvbSBhIFVSTCBhbmQgcmV0dXJuCisgKiBpdCBpbiBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcuCisgKi8KK2NoYXIgKnRyYW5zcG9ydF9hbm9ueW1pemVfdXJsKGNvbnN0IGNoYXIgKnVybCkKK3sKKwljaGFyICpzY2hlbWVfcHJlZml4LCAqYW5vbl9wYXJ0OworCXNpemVfdCBhbm9uX2xlbiwgcHJlZml4X2xlbiA9IDA7CisKKwlhbm9uX3BhcnQgPSBzdHJjaHIodXJsLCAnQCcpOworCWlmICh1cmxfaXNfbG9jYWxfbm90X3NzaCh1cmwpIHx8ICFhbm9uX3BhcnQpCisJCWdvdG8gbGl0ZXJhbF9jb3B5OworCisJYW5vbl9sZW4gPSBzdHJsZW4oKythbm9uX3BhcnQpOworCXNjaGVtZV9wcmVmaXggPSBzdHJzdHIodXJsLCAiOi8vIik7CisJaWYgKCFzY2hlbWVfcHJlZml4KSB7CisJCWlmICghc3RyY2hyKGFub25fcGFydCwgJzonKSkKKwkJCS8qIGNhbm5vdCBiZSAibWVAdGhlcmU6L3BhdGgvbmFtZSIgKi8KKwkJCWdvdG8gbGl0ZXJhbF9jb3B5OworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKmNwOworCQkvKiBtYWtlIHN1cmUgc2NoZW1lIGlzIHJlYXNvbmFibGUgKi8KKwkJZm9yIChjcCA9IHVybDsgY3AgPCBzY2hlbWVfcHJlZml4OyBjcCsrKSB7CisJCQlzd2l0Y2ggKCpjcCkgeworCQkJCS8qIFJGQyAxNzM4IDIuMSAqLworCQkJY2FzZSAnKyc6IGNhc2UgJy4nOiBjYXNlICctJzoKKwkJCQlicmVhazsgLyogb2sgKi8KKwkJCWRlZmF1bHQ6CisJCQkJaWYgKGlzYWxudW0oKmNwKSkKKwkJCQkJYnJlYWs7CisJCQkJLyogaXQgaXNuJ3QgKi8KKwkJCQlnb3RvIGxpdGVyYWxfY29weTsKKwkJCX0KKwkJfQorCQkvKiBAIHBhc3QgdGhlIGZpcnN0IHNsYXNoIGRvZXMgbm90IGNvdW50ICovCisJCWNwID0gc3RyY2hyKHNjaGVtZV9wcmVmaXggKyAzLCAnLycpOworCQlpZiAoY3AgJiYgY3AgPCBhbm9uX3BhcnQpCisJCQlnb3RvIGxpdGVyYWxfY29weTsKKwkJcHJlZml4X2xlbiA9IHNjaGVtZV9wcmVmaXggLSB1cmwgKyAzOworCX0KKwlyZXR1cm4geHN0cmZtdCgiJS4qcyUuKnMiLCAoaW50KXByZWZpeF9sZW4sIHVybCwKKwkJICAgICAgIChpbnQpYW5vbl9sZW4sIGFub25fcGFydCk7CitsaXRlcmFsX2NvcHk6CisJcmV0dXJuIHhzdHJkdXAodXJsKTsKK30KZGlmZiAtLWdpdCBhL3RyYW5zcG9ydC5oIGIvdHJhbnNwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5OGM4NQotLS0gL2Rldi9udWxsCisrKyBiL3RyYW5zcG9ydC5oCkBAIC0wLDAgKzEsMjcxIEBACisjaWZuZGVmIFRSQU5TUE9SVF9ICisjZGVmaW5lIFRSQU5TUE9SVF9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmgiCisKK3N0cnVjdCBzdHJpbmdfbGlzdDsKKworc3RydWN0IGdpdF90cmFuc3BvcnRfb3B0aW9ucyB7CisJdW5zaWduZWQgdGhpbiA6IDE7CisJdW5zaWduZWQga2VlcCA6IDE7CisJdW5zaWduZWQgZm9sbG93dGFncyA6IDE7CisJdW5zaWduZWQgY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCA6IDE7CisJdW5zaWduZWQgc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCA6IDE7CisJdW5zaWduZWQgdXBkYXRlX3NoYWxsb3cgOiAxOworCXVuc2lnbmVkIGRlZXBlbl9yZWxhdGl2ZSA6IDE7CisJdW5zaWduZWQgZnJvbV9wcm9taXNvciA6IDE7CisJdW5zaWduZWQgbm9fZGVwZW5kZW50cyA6IDE7CisKKwkvKgorCSAqIElmIHRoaXMgdHJhbnNwb3J0IHN1cHBvcnRzIGNvbm5lY3Qgb3Igc3RhdGVsZXNzLWNvbm5lY3QsCisJICogdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gc3RydWN0IGZldGNoX3BhY2tfYXJncyBpcyBjb3BpZWQKKwkgKiBoZXJlIGFmdGVyIGZldGNoaW5nLgorCSAqCisJICogU2VlIHRoZSBkZWZpbml0aW9uIG9mIGNvbm5lY3Rpdml0eV9jaGVja2VkIGluIHN0cnVjdAorCSAqIGZldGNoX3BhY2tfYXJncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKwkgKi8KKwl1bnNpZ25lZCBjb25uZWN0aXZpdHlfY2hlY2tlZDoxOworCisJaW50IGRlcHRoOworCWNvbnN0IGNoYXIgKmRlZXBlbl9zaW5jZTsKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmRlZXBlbl9ub3Q7CisJY29uc3QgY2hhciAqdXBsb2FkcGFjazsKKwljb25zdCBjaGFyICpyZWNlaXZlcGFjazsKKwlzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uICpjYXM7CisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyBmaWx0ZXJfb3B0aW9uczsKKworCS8qCisJICogVGhpcyBpcyBvbmx5IHVzZWQgZHVyaW5nIGZldGNoLiBTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YKKwkgKiBuZWdvdGlhdGlvbl90aXBzIGluIHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MuCisJICoKKwkgKiBUaGlzIGZpZWxkIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHRyYW5zcG9ydHMgdGhhdCBzdXBwb3J0IGNvbm5lY3Qgb3IKKwkgKiBzdGF0ZWxlc3NfY29ubmVjdC4gU2V0IHRoaXMgZmllbGQgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZworCSAqIHRyYW5zcG9ydF9zZXRfb3B0aW9uKCkuCisJICovCisJc3RydWN0IG9pZF9hcnJheSAqbmVnb3RpYXRpb25fdGlwczsKK307CisKK2VudW0gdHJhbnNwb3J0X2ZhbWlseSB7CisJVFJBTlNQT1JUX0ZBTUlMWV9BTEwgPSAwLAorCVRSQU5TUE9SVF9GQU1JTFlfSVBWNCwKKwlUUkFOU1BPUlRfRkFNSUxZX0lQVjYKK307CisKK3N0cnVjdCB0cmFuc3BvcnQgeworCWNvbnN0IHN0cnVjdCB0cmFuc3BvcnRfdnRhYmxlICp2dGFibGU7CisKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJY29uc3QgY2hhciAqdXJsOworCXZvaWQgKmRhdGE7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnM7CisKKwkvKioKKwkgKiBJbmRpY2F0ZXMgd2hldGhlciB3ZSBhbHJlYWR5IGNhbGxlZCBnZXRfcmVmc19saXN0KCk7IHNldCBieQorCSAqIHRyYW5zcG9ydC5jOjp0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKCkuCisJICovCisJdW5zaWduZWQgZ290X3JlbW90ZV9yZWZzIDogMTsKKworCS8qCisJICogVHJhbnNwb3J0cyB0aGF0IGNhbGwgdGFrZS1vdmVyIGRlc3Ryb3lzIHRoZSBkYXRhIHNwZWNpZmljIHRvCisJICogdGhlIHRyYW5zcG9ydCB0eXBlIHdoaWxlIGRvaW5nIHNvLCBhbmQgY2Fubm90IGJlIHJldXNlZC4KKwkgKi8KKwl1bnNpZ25lZCBjYW5ub3RfcmV1c2UgOiAxOworCisJLyoKKwkgKiBBIGhpbnQgZnJvbSBjYWxsZXIgdGhhdCBpdCB3aWxsIGJlIHBlcmZvcm1pbmcgYSBjbG9uZSwgbm90CisJICogbm9ybWFsIGZldGNoLiBJT1cgdGhlIHJlcG9zaXRvcnkgaXMgZ3VhcmFudGVlZCBlbXB0eS4KKwkgKi8KKwl1bnNpZ25lZCBjbG9uaW5nIDogMTsKKworCS8qCisJICogSW5kaWNhdGVzIHRoYXQgdGhlIHRyYW5zcG9ydCBpcyBjb25uZWN0ZWQgdmlhIGEgaGFsZi1kdXBsZXgKKwkgKiBjb25uZWN0aW9uIGFuZCBzaG91bGQgb3BlcmF0ZSBpbiBzdGF0ZWxlc3MtcnBjIG1vZGUuCisJICovCisJdW5zaWduZWQgc3RhdGVsZXNzX3JwYyA6IDE7CisKKwkvKgorCSAqIFRoZXNlIHN0cmluZ3Mgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHtwcmUsIHBvc3R9LXJlY2VpdmUgaG9vaywKKwkgKiBvbiB0aGUgcmVtb3RlIHNpZGUsIGlmIGJvdGggc2lkZXMgc3VwcG9ydCB0aGUgcHVzaCBvcHRpb25zIGNhcGFiaWxpdHkuCisJICovCisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpwdXNoX29wdGlvbnM7CisKKwkvKgorCSAqIFRoZXNlIHN0cmluZ3Mgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHJlbW90ZSBzaWRlIG9uIGVhY2ggY29tbWFuZAorCSAqIHJlcXVlc3QsIGlmIGJvdGggc2lkZXMgc3VwcG9ydCB0aGUgc2VydmVyLW9wdGlvbiBjYXBhYmlsaXR5LgorCSAqLworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqc2VydmVyX29wdGlvbnM7CisKKwljaGFyICpwYWNrX2xvY2tmaWxlOworCXNpZ25lZCB2ZXJib3NlIDogMzsKKwkvKioKKwkgKiBUcmFuc3BvcnRzIHNob3VsZCBub3Qgc2V0IHRoaXMgZGlyZWN0bHksIGFuZCBzaG91bGQgdXNlIHRoaXMKKwkgKiB2YWx1ZSB3aXRob3V0IGhhdmluZyB0byBjaGVjayBpc2F0dHkoMiksIC1xLy0tcXVpZXQKKwkgKiAodHJhbnNwb3J0LT52ZXJib3NlIDwgMCksIGV0Yy4gLSBjaGVja2luZyBoYXMgYWxyZWFkeSBiZWVuIGRvbmUKKwkgKiBpbiB0cmFuc3BvcnRfc2V0X3ZlcmJvc2l0eSgpLgorCSAqKi8KKwl1bnNpZ25lZCBwcm9ncmVzcyA6IDE7CisJLyoKKwkgKiBJZiB0cmFuc3BvcnQgaXMgYXQgbGVhc3QgcG90ZW50aWFsbHkgc21hcnQsIHRoaXMgcG9pbnRzIHRvCisJICogZ2l0X3RyYW5zcG9ydF9vcHRpb25zIHN0cnVjdHVyZSB0byB1c2UgaW4gY2FzZSB0cmFuc3BvcnQKKwkgKiBhY3R1YWxseSB0dXJucyBvdXQgdG8gYmUgc21hcnQuCisJICovCisJc3RydWN0IGdpdF90cmFuc3BvcnRfb3B0aW9ucyAqc21hcnRfb3B0aW9uczsKKworCWVudW0gdHJhbnNwb3J0X2ZhbWlseSBmYW1pbHk7Cit9OworCisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX0FMTAkJCSgxPDwwKQorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9GT1JDRQkJCSgxPDwxKQorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9EUllfUlVOCQkJKDE8PDIpCisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX01JUlJPUgkJCSgxPDwzKQorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9QT1JDRUxBSU4JCSgxPDw0KQorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9TRVRfVVBTVFJFQU0JCSgxPDw1KQorI2RlZmluZSBUUkFOU1BPUlRfUkVDVVJTRV9TVUJNT0RVTEVTX0NIRUNLCSgxPDw2KQorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9QUlVORQkJCSgxPDw3KQorI2RlZmluZSBUUkFOU1BPUlRfUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORAkoMTw8OCkKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfTk9fSE9PSwkJCSgxPDw5KQorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9GT0xMT1dfVEFHUwkJKDE8PDEwKQorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9DRVJUX0FMV0FZUwkJKDE8PDExKQorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9DRVJUX0lGX0FTS0VECQkoMTw8MTIpCisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX0FUT01JQwkJCSgxPDwxMykKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfT1BUSU9OUwkJCSgxPDwxNCkKKyNkZWZpbmUgVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19PTkxZCSgxPDwxNSkKKworaW50IHRyYW5zcG9ydF9zdW1tYXJ5X3dpZHRoKGNvbnN0IHN0cnVjdCByZWYgKnJlZnMpOworCisvKiBSZXR1cm5zIGEgdHJhbnNwb3J0IHN1aXRhYmxlIGZvciB0aGUgdXJsICovCitzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnRfZ2V0KHN0cnVjdCByZW1vdGUgKiwgY29uc3QgY2hhciAqKTsKKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYSB0cmFuc3BvcnQgaXMgYWxsb3dlZCBieSB0aGUgZW52aXJvbm1lbnQuCisgKgorICogVHlwZSBzaG91bGQgZ2VuZXJhbGx5IGJlIHRoZSBVUkwgc2NoZW1lLCBhcyBkZXNjcmliZWQgaW4KKyAqIERvY3VtZW50YXRpb24vZ2l0LnR4dAorICoKKyAqIGZyb21fdXNlciBzcGVjaWZpZXMgaWYgdGhlIHRyYW5zcG9ydCB3YXMgZ2l2ZW4gYnkgdGhlIHVzZXIuICBJZiB1bmtub3duIHBhc3MKKyAqIGEgLTEgdG8gcmVhZCBmcm9tIHRoZSBlbnZpcm9ubWVudCB0byBkZXRlcm1pbmUgaWYgdGhlIHRyYW5zcG9ydCB3YXMgZ2l2ZW4gYnkKKyAqIHRoZSB1c2VyLgorICoKKyAqLworaW50IGlzX3RyYW5zcG9ydF9hbGxvd2VkKGNvbnN0IGNoYXIgKnR5cGUsIGludCBmcm9tX3VzZXIpOworCisvKgorICogQ2hlY2sgd2hldGhlciBhIHRyYW5zcG9ydCBpcyBhbGxvd2VkIGJ5IHRoZSBlbnZpcm9ubWVudCwKKyAqIGFuZCBkaWUgb3RoZXJ3aXNlLgorICovCit2b2lkIHRyYW5zcG9ydF9jaGVja19hbGxvd2VkKGNvbnN0IGNoYXIgKnR5cGUpOworCisvKiBUcmFuc3BvcnQgb3B0aW9ucyB3aGljaCBhcHBseSB0byBnaXQ6Ly8gYW5kIHNjcC1zdHlsZSBVUkxzICovCisKKy8qIFRoZSBwcm9ncmFtIHRvIHVzZSBvbiB0aGUgcmVtb3RlIHNpZGUgdG8gc2VuZCBhIHBhY2sgKi8KKyNkZWZpbmUgVFJBTlNfT1BUX1VQTE9BRFBBQ0sgInVwbG9hZHBhY2siCisKKy8qIFRoZSBwcm9ncmFtIHRvIHVzZSBvbiB0aGUgcmVtb3RlIHNpZGUgdG8gcmVjZWl2ZSBhIHBhY2sgKi8KKyNkZWZpbmUgVFJBTlNfT1BUX1JFQ0VJVkVQQUNLICJyZWNlaXZlcGFjayIKKworLyogVHJhbnNmZXIgdGhlIGRhdGEgYXMgYSB0aGluIHBhY2sgaWYgbm90IG51bGwgKi8KKyNkZWZpbmUgVFJBTlNfT1BUX1RISU4gInRoaW4iCisKKy8qIENoZWNrIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSByZW1vdGUgcmVmICovCisjZGVmaW5lIFRSQU5TX09QVF9DQVMgImNhcyIKKworLyogS2VlcCB0aGUgcGFjayB0aGF0IHdhcyB0cmFuc2ZlcnJlZCBpZiBub3QgbnVsbCAqLworI2RlZmluZSBUUkFOU19PUFRfS0VFUCAia2VlcCIKKworLyogTGltaXQgdGhlIGRlcHRoIG9mIHRoZSBmZXRjaCBpZiBub3QgbnVsbCAqLworI2RlZmluZSBUUkFOU19PUFRfREVQVEggImRlcHRoIgorCisvKiBMaW1pdCB0aGUgZGVwdGggb2YgdGhlIGZldGNoIGJhc2VkIG9uIHRpbWUgaWYgbm90IG51bGwgKi8KKyNkZWZpbmUgVFJBTlNfT1BUX0RFRVBFTl9TSU5DRSAiZGVlcGVuLXNpbmNlIgorCisvKiBMaW1pdCB0aGUgZGVwdGggb2YgdGhlIGZldGNoIGJhc2VkIG9uIHJldnMgaWYgbm90IG51bGwgKi8KKyNkZWZpbmUgVFJBTlNfT1BUX0RFRVBFTl9OT1QgImRlZXBlbi1ub3QiCisKKy8qIExpbWl0IHRoZSBkZWVwZW4gb2YgdGhlIGZldGNoIGlmIG5vdCBudWxsICovCisjZGVmaW5lIFRSQU5TX09QVF9ERUVQRU5fUkVMQVRJVkUgImRlZXBlbi1yZWxhdGl2ZSIKKworLyogQWdncmVzc2l2ZWx5IGZldGNoIGFubm90YXRlZCB0YWdzIGlmIHBvc3NpYmxlICovCisjZGVmaW5lIFRSQU5TX09QVF9GT0xMT1dUQUdTICJmb2xsb3d0YWdzIgorCisvKiBBY2NlcHQgcmVmcyB0aGF0IG1heSB1cGRhdGUgLmdpdC9zaGFsbG93IHdpdGhvdXQgLS1kZXB0aCAqLworI2RlZmluZSBUUkFOU19PUFRfVVBEQVRFX1NIQUxMT1cgInVwZGF0ZXNoYWxsb3ciCisKKy8qIFNlbmQgcHVzaCBjZXJ0aWZpY2F0ZXMgKi8KKyNkZWZpbmUgVFJBTlNfT1BUX1BVU0hfQ0VSVCAicHVzaGNlcnQiCisKKy8qIEluZGljYXRlIHRoYXQgdGhlc2Ugb2JqZWN0cyBhcmUgYmVpbmcgZmV0Y2hlZCBieSBhIHByb21pc29yICovCisjZGVmaW5lIFRSQU5TX09QVF9GUk9NX1BST01JU09SICJmcm9tLXByb21pc29yIgorCisvKgorICogSW5kaWNhdGUgdGhhdCBvbmx5IHRoZSBvYmplY3RzIHdhbnRlZCBuZWVkIHRvIGJlIGZldGNoZWQsIG5vdCB0aGVpcgorICogZGVwZW5kZW50cworICovCisjZGVmaW5lIFRSQU5TX09QVF9OT19ERVBFTkRFTlRTICJuby1kZXBlbmRlbnRzIgorCisvKiBGaWx0ZXIgb2JqZWN0cyBmb3IgcGFydGlhbCBjbG9uZSBhbmQgZmV0Y2ggKi8KKyNkZWZpbmUgVFJBTlNfT1BUX0xJU1RfT0JKRUNUU19GSUxURVIgImZpbHRlciIKKworLyogUmVxdWVzdCBhdG9taWMgKGFsbC1vci1ub3RoaW5nKSB1cGRhdGVzIHdoZW4gcHVzaGluZyAqLworI2RlZmluZSBUUkFOU19PUFRfQVRPTUlDICJhdG9taWMiCisKKy8qKgorICogUmV0dXJucyAwIGlmIHRoZSBvcHRpb24gd2FzIHVzZWQsIG5vbi16ZXJvIG90aGVyd2lzZS4gUHJpbnRzIGEKKyAqIG1lc3NhZ2UgdG8gc3RkZXJyIGlmIHRoZSBvcHRpb24gaXMgbm90IHVzZWQuCisgKiovCitpbnQgdHJhbnNwb3J0X3NldF9vcHRpb24oc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lLAorCQkJIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgdHJhbnNwb3J0X3NldF92ZXJib3NpdHkoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgdmVyYm9zaXR5LAorCWludCBmb3JjZV9wcm9ncmVzcyk7CisKKyNkZWZpbmUgUkVKRUNUX05PTl9GRl9IRUFEICAgICAweDAxCisjZGVmaW5lIFJFSkVDVF9OT05fRkZfT1RIRVIgICAgMHgwMgorI2RlZmluZSBSRUpFQ1RfQUxSRUFEWV9FWElTVFMgIDB4MDQKKyNkZWZpbmUgUkVKRUNUX0ZFVENIX0ZJUlNUICAgICAweDA4CisjZGVmaW5lIFJFSkVDVF9ORUVEU19GT1JDRSAgICAgMHgxMAorCitpbnQgdHJhbnNwb3J0X3B1c2goc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCSAgIHN0cnVjdCB0cmFuc3BvcnQgKmNvbm5lY3Rpb24sCisJCSAgIHN0cnVjdCByZWZzcGVjICpycywgaW50IGZsYWdzLAorCQkgICB1bnNpZ25lZCBpbnQgKiByZWplY3RfcmVhc29ucyk7CisKKy8qCisgKiBSZXRyaWV2ZSByZWZzIGZyb20gYSByZW1vdGUuCisgKgorICogT3B0aW9uYWxseSBhIGxpc3Qgb2YgcmVmIHByZWZpeGVzIGNhbiBiZSBwcm92aWRlZCB3aGljaCBjYW4gYmUgc2VudCB0byB0aGUKKyAqIHNlcnZlciAod2hlbiBjb21tdW5pY2F0aW5nIHVzaW5nIHByb3RvY29sIHYyKSB0byBlbmFibGUgaXQgdG8gbGltaXQgdGhlIHJlZgorICogYWR2ZXJ0aXNlbWVudC4gIFNpbmNlIHJlZiBmaWx0ZXJpbmcgaXMgZG9uZSBvbiB0aGUgc2VydmVyJ3MgZW5kIChhbmQgb25seQorICogd2hlbiB1c2luZyBwcm90b2NvbCB2MiksIHRoaXMgY2FuIHJldHVybiByZWZzIHdoaWNoIGRvbid0IG1hdGNoIHRoZSBwcm92aWRlZAorICogcmVmX3ByZWZpeGVzLgorICovCitjb25zdCBzdHJ1Y3QgcmVmICp0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICpyZWZfcHJlZml4ZXMpOworCitpbnQgdHJhbnNwb3J0X2ZldGNoX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgcmVmICpyZWZzKTsKK3ZvaWQgdHJhbnNwb3J0X3VubG9ja19wYWNrKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCk7CitpbnQgdHJhbnNwb3J0X2Rpc2Nvbm5lY3Qoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KTsKK2NoYXIgKnRyYW5zcG9ydF9hbm9ueW1pemVfdXJsKGNvbnN0IGNoYXIgKnVybCk7Cit2b2lkIHRyYW5zcG9ydF90YWtlX292ZXIoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjaGlsZCk7CisKK2ludCB0cmFuc3BvcnRfY29ubmVjdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgIGNvbnN0IGNoYXIgKmV4ZWMsIGludCBmZFsyXSk7CisKKy8qIFRyYW5zcG9ydCBtZXRob2RzIGRlZmluZWQgb3V0c2lkZSB0cmFuc3BvcnQuYyAqLworaW50IHRyYW5zcG9ydF9oZWxwZXJfaW5pdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IGNoYXIgKm5hbWUpOworaW50IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfbG9vcChpbnQgaW5wdXQsIGludCBvdXRwdXQpOworCisvKiBjb21tb24gbWV0aG9kcyB1c2VkIGJ5IHRyYW5zcG9ydC5jIGFuZCBidWlsdGluL3NlbmQtcGFjay5jICovCit2b2lkIHRyYW5zcG9ydF91cGRhdGVfdHJhY2tpbmdfcmVmKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgc3RydWN0IHJlZiAqcmVmLCBpbnQgdmVyYm9zZSk7CisKK2ludCB0cmFuc3BvcnRfcmVmc19wdXNoZWQoc3RydWN0IHJlZiAqcmVmKTsKKwordm9pZCB0cmFuc3BvcnRfcHJpbnRfcHVzaF9zdGF0dXMoY29uc3QgY2hhciAqZGVzdCwgc3RydWN0IHJlZiAqcmVmcywKKwkJICBpbnQgdmVyYm9zZSwgaW50IHBvcmNlbGFpbiwgdW5zaWduZWQgaW50ICpyZWplY3RfcmVhc29ucyk7CisKKy8qIGNvbW1vbiBtZXRob2QgdXNlZCBieSB0cmFuc3BvcnQtaGVscGVyLmMgYW5kIHNlbmQtcGFjay5jICovCit2b2lkIHJlamVjdF9hdG9taWNfcHVzaChzdHJ1Y3QgcmVmICpyZWZzLCBpbnQgbWlycm9yX21vZGUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RyZWUtZGlmZi5jIGIvdHJlZS1kaWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNkMzAzYwotLS0gL2Rldi9udWxsCisrKyBiL3RyZWUtZGlmZi5jCkBAIC0wLDAgKzEsNzI1IEBACisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgdHJlZSBkaWZmIGdlbmVyYXRpb24KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAidHJlZS5oIgorCisvKgorICogaW50ZXJuYWwgbW9kZSBtYXJrZXIsIHNheWluZyBhIHRyZWUgZW50cnkgIT0gZW50cnkgb2YgdHBbaW1pbl0KKyAqIChzZWUgbGxfZGlmZl90cmVlX3BhdGhzIGZvciB3aGF0IGl0IG1lYW5zIHRoZXJlKQorICoKKyAqIHdlIHdpbGwgdXBkYXRlL3VzZS9lbWl0IGVudHJ5IGZvciBkaWZmIG9ubHkgd2l0aCBpdCB1bnNldC4KKyAqLworI2RlZmluZSBTX0lGWE1JTl9ORVEJU19ESUZGVFJFRV9JRlhNSU5fTkVRCisKKyNkZWZpbmUgRkFTVF9BUlJBWV9BTExPQyh4LCBucikgZG8geyBcCisJaWYgKChucikgPD0gMikgXAorCQkoeCkgPSB4YWxsb2NhKChucikgKiBzaXplb2YoKih4KSkpOyBcCisJZWxzZSBcCisJCUFMTE9DX0FSUkFZKCh4KSwgbnIpOyBcCit9IHdoaWxlKDApCisjZGVmaW5lIEZBU1RfQVJSQVlfRlJFRSh4LCBucikgZG8geyBcCisJaWYgKChucikgPiAyKSBcCisJCWZyZWUoKHgpKTsgXAorfSB3aGlsZSgwKQorCitzdGF0aWMgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpsbF9kaWZmX3RyZWVfcGF0aHMoCisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqKnBhcmVudHNfb2lkLCBpbnQgbnBhcmVudCwKKwlzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpOworc3RhdGljIGludCBsbF9kaWZmX3RyZWVfb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpOworCisvKgorICogQ29tcGFyZSB0d28gdHJlZSBlbnRyaWVzLCB0YWtpbmcgaW50byBhY2NvdW50IG9ubHkgcGF0aC9TX0lTRElSKG1vZGUpLAorICogYnV0IG5vdCB0aGVpciBzaGExJ3MuCisgKgorICogTk9URSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgKmFsd2F5cyogY29tcGFyZSBkaWZmZXJlbnRseSwgZXZlbiB3aGVuIGhhdmluZworICogICAgICB0aGUgc2FtZSBuYW1lIC0gdGhhbmtzIHRvIGJhc2VfbmFtZV9jb21wYXJlKCkuCisgKgorICogTk9URSBlbXB0eSAoPWludmFsaWQpIGRlc2NyaXB0b3IocykgdGFrZSBwYXJ0IGluIGNvbXBhcmlzb24gYXMgK2luZnR5LAorICogICAgICBzbyB0aGF0IHRoZXkgc29ydCAqYWZ0ZXIqIHZhbGlkIHRyZWUgZW50cmllcy4KKyAqCisgKiAgICAgIER1ZSB0byB0aGlzIGNvbnZlbnRpb24sIGlmIHRyZWVzIGFyZSBzY2FubmVkIGluIHNvcnRlZCBvcmRlciwgYWxsCisgKiAgICAgIG5vbi1lbXB0eSBkZXNjcmlwdG9ycyB3aWxsIGJlIHByb2Nlc3NlZCBmaXJzdC4KKyAqLworc3RhdGljIGludCB0cmVlX2VudHJ5X3BhdGhjbXAoc3RydWN0IHRyZWVfZGVzYyAqdDEsIHN0cnVjdCB0cmVlX2Rlc2MgKnQyKQoreworCXN0cnVjdCBuYW1lX2VudHJ5ICplMSwgKmUyOworCWludCBjbXA7CisKKwkvKiBlbXB0eSBkZXNjcmlwdG9ycyBzb3J0IGFmdGVyIHZhbGlkIHRyZWUgZW50cmllcyAqLworCWlmICghdDEtPnNpemUpCisJCXJldHVybiB0Mi0+c2l6ZSA/IDEgOiAwOworCWVsc2UgaWYgKCF0Mi0+c2l6ZSkKKwkJcmV0dXJuIC0xOworCisJZTEgPSAmdDEtPmVudHJ5OworCWUyID0gJnQyLT5lbnRyeTsKKwljbXAgPSBiYXNlX25hbWVfY29tcGFyZShlMS0+cGF0aCwgdHJlZV9lbnRyeV9sZW4oZTEpLCBlMS0+bW9kZSwKKwkJCQllMi0+cGF0aCwgdHJlZV9lbnRyeV9sZW4oZTIpLCBlMi0+bW9kZSk7CisJcmV0dXJuIGNtcDsKK30KKworCisvKgorICogY29udmVydCBwYXRoIC0+IG9wdC0+ZGlmZl8qKCkgY2FsbGJhY2tzCisgKgorICogZW1pdHMgZGlmZiB0byBmaXJzdCBwYXJlbnQgb25seSwgYW5kIHRlbGxzIGRpZmYgdHJlZS13YWxrZXIgdGhhdCB3ZSBhcmUgZG9uZQorICogd2l0aCBwIGFuZCBpdCBjYW4gYmUgZnJlZWQuCisgKi8KK3N0YXRpYyBpbnQgZW1pdF9kaWZmX2ZpcnN0X3BhcmVudF9vbmx5KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwKQoreworCXN0cnVjdCBjb21iaW5lX2RpZmZfcGFyZW50ICpwMCA9ICZwLT5wYXJlbnRbMF07CisJaWYgKHAtPm1vZGUgJiYgcDAtPm1vZGUpIHsKKwkJb3B0LT5jaGFuZ2Uob3B0LCBwMC0+bW9kZSwgcC0+bW9kZSwgJnAwLT5vaWQsICZwLT5vaWQsCisJCQkxLCAxLCBwLT5wYXRoLCAwLCAwKTsKKwl9CisJZWxzZSB7CisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwkJdW5zaWduZWQgaW50IG1vZGU7CisJCWludCBhZGRyZW1vdmU7CisKKwkJaWYgKHAtPm1vZGUpIHsKKwkJCWFkZHJlbW92ZSA9ICcrJzsKKwkJCW9pZCA9ICZwLT5vaWQ7CisJCQltb2RlID0gcC0+bW9kZTsKKwkJfSBlbHNlIHsKKwkJCWFkZHJlbW92ZSA9ICctJzsKKwkJCW9pZCA9ICZwMC0+b2lkOworCQkJbW9kZSA9IHAwLT5tb2RlOworCQl9CisKKwkJb3B0LT5hZGRfcmVtb3ZlKG9wdCwgYWRkcmVtb3ZlLCBtb2RlLCBvaWQsIDEsIHAtPnBhdGgsIDApOworCX0KKworCXJldHVybiAwOwkvKiB3ZSBhcmUgZG9uZSB3aXRoIHAgKi8KK30KKworCisvKgorICogTWFrZSBhIG5ldyBjb21iaW5lX2RpZmZfcGF0aCBmcm9tIHBhdGgvbW9kZS9zaGExCisgKiBhbmQgYXBwZW5kIGl0IHRvIHBhdGhzIGxpc3QgdGFpbC4KKyAqCisgKiBNZW1vcnkgZm9yIGNyZWF0ZWQgZWxlbWVudHMgY291bGQgYmUgcmV1c2VkOgorICoKKyAqCS0gaWYgbGFzdC0+bmV4dCA9PSBOVUxMLCB0aGUgbWVtb3J5IGlzIGFsbG9jYXRlZDsKKyAqCisgKgktIGlmIGxhc3QtPm5leHQgIT0gTlVMTCwgaXQgaXMgYXNzdW1lZCB0aGF0IHA9bGFzdC0+bmV4dCB3YXMgcmV0dXJuZWQKKyAqCSAgZWFybGllciBieSB0aGlzIGZ1bmN0aW9uLCBhbmQgcC0+bmV4dCB3YXMgKm5vdCogbW9kaWZpZWQuCisgKgkgIFRoZSBtZW1vcnkgaXMgdGhlbiByZXVzZWQgZnJvbSBwLgorICoKKyAqIHNvIGZvciBjbGllbnRzLAorICoKKyAqIC0gaWYgeW91IGRvIG5lZWQgdG8ga2VlcCB0aGUgZWxlbWVudAorICoKKyAqCXAgPSBwYXRoX2FwcGVuZG5ldyhwLCAuLi4pOworICoJcHJvY2VzcyhwKTsKKyAqCXAtPm5leHQgPSBOVUxMOworICoKKyAqIC0gaWYgeW91IGRvbid0IG5lZWQgdG8ga2VlcCB0aGUgZWxlbWVudCBhZnRlciBwcm9jZXNzaW5nCisgKgorICoJcHByZXYgPSBwOworICoJcCA9IHBhdGhfYXBwZW5kbmV3KHAsIC4uLik7CisgKglwcm9jZXNzKHApOworICoJcCA9IHBwcmV2OworICoJOyBkb24ndCBmb3JnZXQgdG8gZnJlZSB0YWlsLT5uZXh0IGluIHRoZSBlbmQKKyAqCisgKiBwLT5wYXJlbnRbXSByZW1haW5zIHVuaW5pdGlhbGl6ZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnBhdGhfYXBwZW5kbmV3KHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqbGFzdCwKKwlpbnQgbnBhcmVudCwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCwgaW50IHBhdGhsZW4sCisJdW5zaWduZWQgbW9kZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcDsKKwlzaXplX3QgbGVuID0gc3RfYWRkKGJhc2UtPmxlbiwgcGF0aGxlbik7CisJc2l6ZV90IGFsbG9jbGVuID0gY29tYmluZV9kaWZmX3BhdGhfc2l6ZShucGFyZW50LCBsZW4pOworCisJLyogaWYgbGFzdC0+bmV4dCBpcyAhTlVMTCAtIGl0IGlzIGEgcHJlLWFsbG9jYXRlZCBtZW1vcnksIHdlIGNhbiByZXVzZSAqLworCXAgPSBsYXN0LT5uZXh0OworCWlmIChwICYmIChhbGxvY2xlbiA+IChpbnRwdHJfdClwLT5uZXh0KSkgeworCQlGUkVFX0FORF9OVUxMKHApOworCX0KKworCWlmICghcCkgeworCQlwID0geG1hbGxvYyhhbGxvY2xlbik7CisKKwkJLyoKKwkJICogdW50aWwgd2UgZ28gdG8gaXQgbmV4dCByb3VuZCwgLm5leHQgaG9sZHMgaG93IG1hbnkgYnl0ZXMgd2UKKwkJICogYWxsb2NhdGVkIChmb3IgZmFzdGVyIHJlYWxsb2MgLSB3ZSBkb24ndCBuZWVkIGNvcHlpbmcgb2xkIGRhdGEpLgorCQkgKi8KKwkJcC0+bmV4dCA9IChzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKikoaW50cHRyX3QpYWxsb2NsZW47CisJfQorCisJbGFzdC0+bmV4dCA9IHA7CisKKwlwLT5wYXRoID0gKGNoYXIgKikmKHAtPnBhcmVudFtucGFyZW50XSk7CisJbWVtY3B5KHAtPnBhdGgsIGJhc2UtPmJ1ZiwgYmFzZS0+bGVuKTsKKwltZW1jcHkocC0+cGF0aCArIGJhc2UtPmxlbiwgcGF0aCwgcGF0aGxlbik7CisJcC0+cGF0aFtsZW5dID0gMDsKKwlwLT5tb2RlID0gbW9kZTsKKwlvaWRjcHkoJnAtPm9pZCwgb2lkID8gb2lkIDogJm51bGxfb2lkKTsKKworCXJldHVybiBwOworfQorCisvKgorICogbmV3IHBhdGggc2hvdWxkIGJlIGFkZGVkIHRvIGNvbWJpbmUgZGlmZgorICoKKyAqIDMgY2FzZXMgb24gaG93L3doZW4gaXQgc2hvdWxkIGJlIGNhbGxlZCBhbmQgYmVoYXZlczoKKyAqCisgKgkgdCwgIXRwCQktPiBwYXRoIGFkZGVkLCBhbGwgcGFyZW50cyBsYWNrIGl0CisgKgkhdCwgIHRwCQktPiBwYXRoIHJlbW92ZWQgZnJvbSBhbGwgcGFyZW50cworICoJIHQsICB0cAkJLT4gcGF0aCBtb2RpZmllZC9hZGRlZAorICoJCQkgICAoTSBmb3IgdHBbaV09dHBbaW1pbl0sIEEgb3RoZXJ3aXNlKQorICovCitzdGF0aWMgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICplbWl0X3BhdGgoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLAorCXN0cnVjdCBzdHJidWYgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgaW50IG5wYXJlbnQsCisJc3RydWN0IHRyZWVfZGVzYyAqdCwgc3RydWN0IHRyZWVfZGVzYyAqdHAsCisJaW50IGltaW4pCit7CisJdW5zaWduZWQgc2hvcnQgbW9kZTsKKwljb25zdCBjaGFyICpwYXRoOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwlpbnQgcGF0aGxlbjsKKwlpbnQgb2xkX2Jhc2VsZW4gPSBiYXNlLT5sZW47CisJaW50IGksIGlzZGlyLCByZWN1cnNlID0gMCwgZW1pdHRoaXMgPSAxOworCisJLyogYXQgbGVhc3Qgc29tZXRoaW5nIGhhcyB0byBiZSB2YWxpZCAqLworCWFzc2VydCh0IHx8IHRwKTsKKworCWlmICh0KSB7CisJCS8qIHBhdGggcHJlc2VudCBpbiByZXN1bHRpbmcgdHJlZSAqLworCQlvaWQgPSB0cmVlX2VudHJ5X2V4dHJhY3QodCwgJnBhdGgsICZtb2RlKTsKKwkJcGF0aGxlbiA9IHRyZWVfZW50cnlfbGVuKCZ0LT5lbnRyeSk7CisJCWlzZGlyID0gU19JU0RJUihtb2RlKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBhIHBhdGggd2FzIHJlbW92ZWQgLSB0YWtlIHBhdGggZnJvbSBpbWluIHBhcmVudC4gQWxzbyB0YWtlCisJCSAqIG1vZGUgZnJvbSB0aGF0IHBhcmVudCwgdG8gZGVjaWRlIG9uIHJlY3Vyc2lvbigxKS4KKwkJICoKKwkJICogMSkgYWxsIG1vZGVzIGZvciB0cFtpXT10cFtpbWluXSBzaG91bGQgYmUgdGhlIHNhbWUgd3J0CisJCSAqICAgIFNfSVNESVIsIHRoYW5rcyB0byBiYXNlX25hbWVfY29tcGFyZSgpLgorCQkgKi8KKwkJdHJlZV9lbnRyeV9leHRyYWN0KCZ0cFtpbWluXSwgJnBhdGgsICZtb2RlKTsKKwkJcGF0aGxlbiA9IHRyZWVfZW50cnlfbGVuKCZ0cFtpbWluXS5lbnRyeSk7CisKKwkJaXNkaXIgPSBTX0lTRElSKG1vZGUpOworCQlvaWQgPSBOVUxMOworCQltb2RlID0gMDsKKwl9CisKKwlpZiAob3B0LT5mbGFncy5yZWN1cnNpdmUgJiYgaXNkaXIpIHsKKwkJcmVjdXJzZSA9IDE7CisJCWVtaXR0aGlzID0gb3B0LT5mbGFncy50cmVlX2luX3JlY3Vyc2l2ZTsKKwl9CisKKwlpZiAoZW1pdHRoaXMpIHsKKwkJaW50IGtlZXA7CisJCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcHByZXYgPSBwOworCQlwID0gcGF0aF9hcHBlbmRuZXcocCwgbnBhcmVudCwgYmFzZSwgcGF0aCwgcGF0aGxlbiwgbW9kZSwgb2lkKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnBhcmVudDsgKytpKSB7CisJCQkvKgorCQkJICogdHBbaV0gaXMgdmFsaWQsIGlmIHByZXNlbnQgYW5kIGlmIHRwW2ldPT10cFtpbWluXSAtCisJCQkgKiBvdGhlcndpc2UsIHdlIHNob3VsZCBpZ25vcmUgaXQuCisJCQkgKi8KKwkJCWludCB0cGlfdmFsaWQgPSB0cCAmJiAhKHRwW2ldLmVudHJ5Lm1vZGUgJiBTX0lGWE1JTl9ORVEpOworCisJCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWRfaTsKKwkJCXVuc2lnbmVkIG1vZGVfaTsKKworCQkJcC0+cGFyZW50W2ldLnN0YXR1cyA9CisJCQkJIXQgPyBESUZGX1NUQVRVU19ERUxFVEVEIDoKKwkJCQkJdHBpX3ZhbGlkID8KKwkJCQkJCURJRkZfU1RBVFVTX01PRElGSUVEIDoKKwkJCQkJCURJRkZfU1RBVFVTX0FEREVEOworCisJCQlpZiAodHBpX3ZhbGlkKSB7CisJCQkJb2lkX2kgPSAmdHBbaV0uZW50cnkub2lkOworCQkJCW1vZGVfaSA9IHRwW2ldLmVudHJ5Lm1vZGU7CisJCQl9CisJCQllbHNlIHsKKwkJCQlvaWRfaSA9ICZudWxsX29pZDsKKwkJCQltb2RlX2kgPSAwOworCQkJfQorCisJCQlwLT5wYXJlbnRbaV0ubW9kZSA9IG1vZGVfaTsKKwkJCW9pZGNweSgmcC0+cGFyZW50W2ldLm9pZCwgb2lkX2kpOworCQl9CisKKwkJa2VlcCA9IDE7CisJCWlmIChvcHQtPnBhdGhjaGFuZ2UpCisJCQlrZWVwID0gb3B0LT5wYXRoY2hhbmdlKG9wdCwgcCk7CisKKwkJLyoKKwkJICogSWYgYSBwYXRoIHdhcyBmaWx0ZXJlZCBvciBjb25zdW1lZCAtIHdlIGRvbid0IG5lZWQgdG8gYWRkIGl0CisJCSAqIHRvIHRoZSBsaXN0IGFuZCBjYW4gcmV1c2UgaXRzIG1lbW9yeSwgbGVhdmluZyBpdCBhcworCQkgKiBwcmUtYWxsb2NhdGVkIGVsZW1lbnQgb24gdGhlIHRhaWwuCisJCSAqCisJCSAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBwYXRoIG5lZWRzIHRvIGJlIGtlcHQsIHdlIG5lZWQgdG8KKwkJICogY29ycmVjdCBpdHMgLm5leHQgdG8gTlVMTCwgYXMgaXQgd2FzIHByZS1pbml0aWFsaXplZCB0byBob3cKKwkJICogbXVjaCBtZW1vcnkgd2FzIGFsbG9jYXRlZC4KKwkJICoKKwkJICogc2VlIHBhdGhfYXBwZW5kbmV3KCkgZm9yIGRldGFpbHMuCisJCSAqLworCQlpZiAoIWtlZXApCisJCQlwID0gcHByZXY7CisJCWVsc2UKKwkJCXAtPm5leHQgPSBOVUxMOworCX0KKworCWlmIChyZWN1cnNlKSB7CisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKipwYXJlbnRzX29pZDsKKworCQlGQVNUX0FSUkFZX0FMTE9DKHBhcmVudHNfb2lkLCBucGFyZW50KTsKKwkJZm9yIChpID0gMDsgaSA8IG5wYXJlbnQ7ICsraSkgeworCQkJLyogc2FtZSBydWxlIGFzIGluIGVtaXR0aGlzICovCisJCQlpbnQgdHBpX3ZhbGlkID0gdHAgJiYgISh0cFtpXS5lbnRyeS5tb2RlICYgU19JRlhNSU5fTkVRKTsKKworCQkJcGFyZW50c19vaWRbaV0gPSB0cGlfdmFsaWQgPyAmdHBbaV0uZW50cnkub2lkIDogTlVMTDsKKwkJfQorCisJCXN0cmJ1Zl9hZGQoYmFzZSwgcGF0aCwgcGF0aGxlbik7CisJCXN0cmJ1Zl9hZGRjaChiYXNlLCAnLycpOworCQlwID0gbGxfZGlmZl90cmVlX3BhdGhzKHAsIG9pZCwgcGFyZW50c19vaWQsIG5wYXJlbnQsIGJhc2UsIG9wdCk7CisJCUZBU1RfQVJSQVlfRlJFRShwYXJlbnRzX29pZCwgbnBhcmVudCk7CisJfQorCisJc3RyYnVmX3NldGxlbihiYXNlLCBvbGRfYmFzZWxlbik7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyB2b2lkIHNraXBfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgdHJlZV9kZXNjICp0LCBzdHJ1Y3Qgc3RyYnVmICpiYXNlLAorCQkJICAgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwllbnVtIGludGVyZXN0aW5nIG1hdGNoOworCisJd2hpbGUgKHQtPnNpemUpIHsKKwkJbWF0Y2ggPSB0cmVlX2VudHJ5X2ludGVyZXN0aW5nKG9wdC0+cmVwby0+aW5kZXgsICZ0LT5lbnRyeSwKKwkJCQkJICAgICAgIGJhc2UsIDAsICZvcHQtPnBhdGhzcGVjKTsKKwkJaWYgKG1hdGNoKSB7CisJCQlpZiAobWF0Y2ggPT0gYWxsX2VudHJpZXNfbm90X2ludGVyZXN0aW5nKQorCQkJCXQtPnNpemUgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJdXBkYXRlX3RyZWVfZW50cnkodCk7CisJfQorfQorCisKKy8qCisgKiBnZW5lcmF0ZSBwYXRocyBmb3IgY29tYmluZWQgZGlmZiBEKHNoYTEscGFyZW50c19vaWRbXSkKKyAqCisgKiBSZXN1bHRpbmcgcGF0aHMgYXJlIGFwcGVuZGVkIHRvIGNvbWJpbmVfZGlmZl9wYXRoIGxpbmtlZCBsaXN0LCBhbmQgYWxzbywgYXJlCisgKiBlbWl0dGVkIG9uIHRoZSBnbyB2aWEgb3B0LT5wYXRoY2hhbmdlKCkgY2FsbGJhY2ssIHNvIGl0IGlzIHBvc3NpYmxlIHRvCisgKiBwcm9jZXNzIHRoZSByZXN1bHQgYXMgYmF0Y2ggb3IgaW5jcmVtZW50YWxseS4KKyAqCisgKiBUaGUgcGF0aHMgYXJlIGdlbmVyYXRlZCBzY2FubmluZyBuZXcgdHJlZSBhbmQgYWxsIHBhcmVudHMgdHJlZXMKKyAqIHNpbXVsdGFuZW91c2x5LCBzaW1pbGFybHkgdG8gd2hhdCBkaWZmX3RyZWUoKSB3YXMgZG9pbmcgZm9yIDIgdHJlZXMuCisgKiBUaGUgdGhlb3J5IGJlaGluZCBzdWNoIHNjYW4gaXMgYXMgZm9sbG93czoKKyAqCisgKgorICogRChULFAxLi4uUG4pIGNhbGN1bGF0aW9uIHNjaGVtZQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEQoVCxQMS4uLlBuKSA9IEQoVCxQMSkgXiAuLi4gXiBEKFQsUG4pCShyZWdhcmRpbmcgcmVzdWx0aW5nIHBhdGhzIHNldCkKKyAqCisgKglEKFQsUGopCQktIGRpZmYgYmV0d2VlbiBULi5QagorICoJRChULFAxLi4uUG4pCS0gY29tYmluZWQgZGlmZiBmcm9tIFQgdG8gcGFyZW50cyBQMSwuLi4sUG4KKyAqCisgKgorICogV2Ugc3RhcnQgZnJvbSBhbGwgdHJlZXMsIHdoaWNoIGFyZSBzb3J0ZWQsIGFuZCBjb21wYXJlIHRoZWlyIGVudHJpZXMgaW4KKyAqIGxvY2stc3RlcDoKKyAqCisgKgkgVCAgICAgUDEgICAgICAgUG4KKyAqCSAtICAgICAtICAgICAgICAtCisgKgl8dHwgICB8cDF8ICAgICB8cG58CisgKgl8LXwgICB8LS18IC4uLiB8LS18ICAgICAgaW1pbiA9IGFyZ21pbihwMS4uLnBuKQorICoJfCB8ICAgfCAgfCAgICAgfCAgfAorICoJfC18ICAgfC0tfCAgICAgfC0tfAorICoJfC58ICAgfC4gfCAgICAgfC4gfAorICoJIC4gICAgIC4gICAgICAgIC4KKyAqCSAuICAgICAuICAgICAgICAuCisgKgorICogYXQgYW55IHRpbWUgdGhlcmUgY291bGQgYmUgMyBjYXNlczoKKyAqCisgKgkxKSAgdCA8IHBbaW1pbl07CisgKgkyKSAgdCA+IHBbaW1pbl07CisgKgkzKSAgdCA9IHBbaW1pbl0uCisgKgorICogU2NoZW1hdGljIGRlZHVjdGlvbiBvZiB3aGF0IGV2ZXJ5IGNhc2UgbWVhbnMsIGFuZCB3aGF0IHRvIGRvLCBmb2xsb3dzOgorICoKKyAqIDEpICB0IDwgcFtpbWluXSAgLT4gIOKIgGogdCDiiIkgUGogIC0+ICAiK3QiIOKIiCBEKFQsUGopICAtPiAgRCArPSAiK3QiOyAgdOKGkworICoKKyAqIDIpICB0ID4gcFtpbWluXQorICoKKyAqICAgICAyLjEpIOKIg2o6IHBqID4gcFtpbWluXSAgLT4gICItcFtpbWluXSIg4oiJIEQoVCxQaikgIC0+ICBEICs9IMO4OyAg4oiAIHBpPXBbaW1pbl0gIHBp4oaTCisgKiAgICAgMi4yKSDiiIBpICBwaSA9IHBbaW1pbl0gIC0+ICBwaSDiiIkgVCAgLT4gICItcGkiIOKIiCBEKFQsUGkpICAtPiAgRCArPSAiLXBbaW1pbl0iOyAg4oiAaSBwaeKGkworICoKKyAqIDMpICB0ID0gcFtpbWluXQorICoKKyAqICAgICAzLjEpIOKIg2o6IHBqID4gcFtpbWluXSAgLT4gICIrdCIg4oiIIEQoVCxQaikgIC0+ICBvbmx5IHBpPXBbaW1pbl0gcmVtYWlucyB0byBpbnZlc3RpZ2F0ZQorICogICAgIDMuMikgcGkgPSBwW2ltaW5dICAtPiAgaW52ZXN0aWdhdGUgzrQodCxwaSkKKyAqICAgICAgfAorICogICAgICB8CisgKiAgICAgIHYKKyAqCisgKiAgICAgMy4xKzMuMikgbG9va2luZyBhdCDOtCh0LHBpKSDiiIBpOiBwaT1wW2ltaW5dIC0gaWYgYWxsICE9IMO4ICAtPgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICDijqfOtCh0LHBpKSAgLSBpZiBwaT1wW2ltaW5dCisgKiAgICAgICAgICAgICAgLT4gIEQgKz0g4o6oCisgKiAgICAgICAgICAgICAgICAgICAgICAg4o6pIit0IiAgICAgLSBpZiBwaT5wW2ltaW5dCisgKgorICoKKyAqICAgICBpbiBhbnkgY2FzZSB04oaTICDiiIAgcGk9cFtpbWluXSAgcGnihpMKKyAqCisgKgorICogfn5+fn5+fn4KKyAqCisgKiBOT1RFCisgKgorICoJVXN1YWwgZGlmZiBEKEEsQikgaXMgYnkgZGVmaW5pdGlvbiB0aGUgc2FtZSBhcyBjb21iaW5lZCBkaWZmIEQoQSxbQl0pLAorICoJc28gdGhpcyBkaWZmIHBhdGhzIGdlbmVyYXRvciBjYW4sIGFuZCBpcyB1c2VkLCBmb3IgcGxhaW4gZGlmZnMKKyAqCWdlbmVyYXRpb24gdG9vLgorICoKKyAqCVBsZWFzZSBrZWVwIGF0dGVudGlvbiB0byB0aGUgY29tbW9uIEQoQSxbQl0pIGNhc2Ugd2hlbiB3b3JraW5nIG9uIHRoZQorICoJY29kZSwgaW4gb3JkZXIgbm90IHRvIHNsb3cgaXQgZG93bi4KKyAqCisgKiBOT1RFCisgKglucGFyZW50IG11c3QgYmUgPiAwLgorICovCisKKworLyog4oiAIHBpPXBbaW1pbl0gIHBp4oaTICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3RwX2VudHJpZXMoc3RydWN0IHRyZWVfZGVzYyAqdHAsIGludCBucGFyZW50KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBucGFyZW50OyArK2kpCisJCWlmICghKHRwW2ldLmVudHJ5Lm1vZGUgJiBTX0lGWE1JTl9ORVEpKQorCQkJdXBkYXRlX3RyZWVfZW50cnkoJnRwW2ldKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqbGxfZGlmZl90cmVlX3BhdGhzKAorCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKipwYXJlbnRzX29pZCwgaW50IG5wYXJlbnQsCisJc3RydWN0IHN0cmJ1ZiAqYmFzZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCXN0cnVjdCB0cmVlX2Rlc2MgdCwgKnRwOworCXZvaWQgKnR0cmVlLCAqKnRwdHJlZTsKKwlpbnQgaTsKKworCUZBU1RfQVJSQVlfQUxMT0ModHAsIG5wYXJlbnQpOworCUZBU1RfQVJSQVlfQUxMT0ModHB0cmVlLCBucGFyZW50KTsKKworCS8qCisJICogbG9hZCBwYXJlbnRzIGZpcnN0LCBhcyB0aGV5IGFyZSBwcm9iYWJseSBhbHJlYWR5IGNhY2hlZC4KKwkgKgorCSAqICggbG9nX3RyZWVfZGlmZigpIHBhcnNlcyBjb21taXQtPnBhcmVudCBiZWZvcmUgY2FsbGluZyBoZXJlIHZpYQorCSAqICAgZGlmZl90cmVlX29pZChwYXJlbnQsIGNvbW1pdCkgKQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBucGFyZW50OyArK2kpCisJCXRwdHJlZVtpXSA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKG9wdC0+cmVwbywgJnRwW2ldLCBwYXJlbnRzX29pZFtpXSk7CisJdHRyZWUgPSBmaWxsX3RyZWVfZGVzY3JpcHRvcihvcHQtPnJlcG8sICZ0LCBvaWQpOworCisJLyogRW5hYmxlIHJlY3Vyc2lvbiBpbmRlZmluaXRlbHkgKi8KKwlvcHQtPnBhdGhzcGVjLnJlY3Vyc2l2ZSA9IG9wdC0+ZmxhZ3MucmVjdXJzaXZlOworCisJZm9yICg7OykgeworCQlpbnQgaW1pbiwgY21wOworCisJCWlmIChkaWZmX2Nhbl9xdWl0X2Vhcmx5KG9wdCkpCisJCQlicmVhazsKKworCQlpZiAob3B0LT5tYXhfY2hhbmdlcyAmJiBvcHQtPm51bV9jaGFuZ2VzID4gb3B0LT5tYXhfY2hhbmdlcykKKwkJCWJyZWFrOworCisJCWlmIChvcHQtPnBhdGhzcGVjLm5yKSB7CisJCQlza2lwX3VuaW50ZXJlc3RpbmcoJnQsIGJhc2UsIG9wdCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnBhcmVudDsgaSsrKQorCQkJCXNraXBfdW5pbnRlcmVzdGluZygmdHBbaV0sIGJhc2UsIG9wdCk7CisJCX0KKworCQkvKiBjb21wYXJpbmcgaXMgZmluaXNoZWQgd2hlbiBhbGwgdHJlZXMgYXJlIGRvbmUgKi8KKwkJaWYgKCF0LnNpemUpIHsKKwkJCWludCBkb25lID0gMTsKKwkJCWZvciAoaSA9IDA7IGkgPCBucGFyZW50OyArK2kpCisJCQkJaWYgKHRwW2ldLnNpemUpIHsKKwkJCQkJZG9uZSA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCWlmIChkb25lKQorCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogbG9va3VwIGltaW4gPSBhcmdtaW4ocDEuLi5wbiksCisJCSAqIG1hcmsgZW50cmllcyB3aGV0aGVyIHRoZXkgPXBbaW1pbl0gYWxvbmcgdGhlIHdheQorCQkgKi8KKwkJaW1pbiA9IDA7CisJCXRwWzBdLmVudHJ5Lm1vZGUgJj0gflNfSUZYTUlOX05FUTsKKworCQlmb3IgKGkgPSAxOyBpIDwgbnBhcmVudDsgKytpKSB7CisJCQljbXAgPSB0cmVlX2VudHJ5X3BhdGhjbXAoJnRwW2ldLCAmdHBbaW1pbl0pOworCQkJaWYgKGNtcCA8IDApIHsKKwkJCQlpbWluID0gaTsKKwkJCQl0cFtpXS5lbnRyeS5tb2RlICY9IH5TX0lGWE1JTl9ORVE7CisJCQl9CisJCQllbHNlIGlmIChjbXAgPT0gMCkgeworCQkJCXRwW2ldLmVudHJ5Lm1vZGUgJj0gflNfSUZYTUlOX05FUTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXRwW2ldLmVudHJ5Lm1vZGUgfD0gU19JRlhNSU5fTkVROworCQkJfQorCQl9CisKKwkJLyogZml4dXAgbWFya2luZ3MgZm9yIGVudHJpZXMgYmVmb3JlIGltaW4gKi8KKwkJZm9yIChpID0gMDsgaSA8IGltaW47ICsraSkKKwkJCXRwW2ldLmVudHJ5Lm1vZGUgfD0gU19JRlhNSU5fTkVROwkvKiBwaSA+IHBbaW1pbl0gKi8KKworCisKKwkJLyogY29tcGFyZSB0IHZzIHBbaW1pbl0gKi8KKwkJY21wID0gdHJlZV9lbnRyeV9wYXRoY21wKCZ0LCAmdHBbaW1pbl0pOworCisJCS8qIHQgPSBwW2ltaW5dICovCisJCWlmIChjbXAgPT0gMCkgeworCQkJLyogYXJlIGVpdGhlciBwaSA+IHBbaW1pbl0gb3IgZGlmZih0LHBpKSAhPSDDuCA/ICovCisJCQlpZiAoIW9wdC0+ZmxhZ3MuZmluZF9jb3BpZXNfaGFyZGVyKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IG5wYXJlbnQ7ICsraSkgeworCQkJCQkvKiBwW2ldID4gcFtpbWluXSAqLworCQkJCQlpZiAodHBbaV0uZW50cnkubW9kZSAmIFNfSUZYTUlOX05FUSkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8qIGRpZmYodCxwaSkgIT0gw7ggKi8KKwkJCQkJaWYgKCFvaWRlcSgmdC5lbnRyeS5vaWQsICZ0cFtpXS5lbnRyeS5vaWQpIHx8CisJCQkJCSAgICAodC5lbnRyeS5tb2RlICE9IHRwW2ldLmVudHJ5Lm1vZGUpKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJZ290byBza2lwX2VtaXRfdF90cDsKKwkJCQl9CisJCQl9CisKKwkJCS8qIEQgKz0ge860KHQscGkpIGlmIHBpPXBbaW1pbl07ICAiK2EiIGlmIHBpID4gcFtpbWluXX0gKi8KKwkJCXAgPSBlbWl0X3BhdGgocCwgYmFzZSwgb3B0LCBucGFyZW50LAorCQkJCQkmdCwgdHAsIGltaW4pOworCisJCXNraXBfZW1pdF90X3RwOgorCQkJLyogdOKGkywgIOKIgCBwaT1wW2ltaW5dICBwaeKGkyAqLworCQkJdXBkYXRlX3RyZWVfZW50cnkoJnQpOworCQkJdXBkYXRlX3RwX2VudHJpZXModHAsIG5wYXJlbnQpOworCQl9CisKKwkJLyogdCA8IHBbaW1pbl0gKi8KKwkJZWxzZSBpZiAoY21wIDwgMCkgeworCQkJLyogRCArPSAiK3QiICovCisJCQlwID0gZW1pdF9wYXRoKHAsIGJhc2UsIG9wdCwgbnBhcmVudCwKKwkJCQkJJnQsIC8qdHA9Ki9OVUxMLCAtMSk7CisKKwkJCS8qIHTihpMgKi8KKwkJCXVwZGF0ZV90cmVlX2VudHJ5KCZ0KTsKKwkJCW9wdC0+bnVtX2NoYW5nZXMrKzsKKwkJfQorCisJCS8qIHQgPiBwW2ltaW5dICovCisJCWVsc2UgeworCQkJLyog4oiAaSBwaT1wW2ltaW5dIC0+IEQgKz0gIi1wW2ltaW5dIiAqLworCQkJaWYgKCFvcHQtPmZsYWdzLmZpbmRfY29waWVzX2hhcmRlcikgeworCQkJCWZvciAoaSA9IDA7IGkgPCBucGFyZW50OyArK2kpCisJCQkJCWlmICh0cFtpXS5lbnRyeS5tb2RlICYgU19JRlhNSU5fTkVRKQorCQkJCQkJZ290byBza2lwX2VtaXRfdHA7CisJCQl9CisKKwkJCXAgPSBlbWl0X3BhdGgocCwgYmFzZSwgb3B0LCBucGFyZW50LAorCQkJCQkvKnQ9Ki9OVUxMLCB0cCwgaW1pbik7CisKKwkJc2tpcF9lbWl0X3RwOgorCQkJLyog4oiAIHBpPXBbaW1pbl0gIHBp4oaTICovCisJCQl1cGRhdGVfdHBfZW50cmllcyh0cCwgbnBhcmVudCk7CisJCQlvcHQtPm51bV9jaGFuZ2VzKys7CisJCX0KKwl9CisKKwlmcmVlKHR0cmVlKTsKKwlmb3IgKGkgPSBucGFyZW50LTE7IGkgPj0gMDsgaS0tKQorCQlmcmVlKHRwdHJlZVtpXSk7CisJRkFTVF9BUlJBWV9GUkVFKHRwdHJlZSwgbnBhcmVudCk7CisJRkFTVF9BUlJBWV9GUkVFKHRwLCBucGFyZW50KTsKKworCXJldHVybiBwOworfQorCitzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKmRpZmZfdHJlZV9wYXRocygKKwlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnAsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICoqcGFyZW50c19vaWQsIGludCBucGFyZW50LAorCXN0cnVjdCBzdHJidWYgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlvcHQtPm51bV9jaGFuZ2VzID0gMDsKKwlwID0gbGxfZGlmZl90cmVlX3BhdGhzKHAsIG9pZCwgcGFyZW50c19vaWQsIG5wYXJlbnQsIGJhc2UsIG9wdCk7CisKKwkvKgorCSAqIGZyZWUgcHJlLWFsbG9jYXRlZCBsYXN0IGVsZW1lbnQsIGlmIGFueQorCSAqIChzZWUgcGF0aF9hcHBlbmRuZXcoKSBmb3IgZGV0YWlscyBhYm91dCB3aHkpCisJICovCisJRlJFRV9BTkRfTlVMTChwLT5uZXh0KTsKKworCXJldHVybiBwOworfQorCisvKgorICogRG9lcyBpdCBsb29rIGxpa2UgdGhlIHJlc3VsdGluZyBkaWZmIG1pZ2h0IGJlIGR1ZSB0byBhIHJlbmFtZT8KKyAqICAtIHNpbmdsZSBlbnRyeQorICogIC0gbm90IGEgdmFsaWQgcHJldmlvdXMgZmlsZQorICovCitzdGF0aWMgaW5saW5lIGludCBkaWZmX21pZ2h0X2JlX3JlbmFtZSh2b2lkKQoreworCXJldHVybiBkaWZmX3F1ZXVlZF9kaWZmLm5yID09IDEgJiYKKwkJIURJRkZfRklMRV9WQUxJRChkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlWzBdLT5vbmUpOworfQorCitzdGF0aWMgdm9pZCB0cnlfdG9fZm9sbG93X3JlbmFtZXMoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsCisJCQkJICBzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBkaWZmX29wdHM7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKmNob2ljZTsKKwlpbnQgaTsKKworCS8qCisJICogZm9sbG93LXJlbmFtZSBjb2RlIGlzIHZlcnkgc3BlY2lmaWMsIHdlIG5lZWQgZXhhY3RseSBvbmUKKwkgKiBwYXRoLiBNYWdpYyB0aGF0IG1hdGNoZXMgbW9yZSB0aGFuIG9uZSBwYXRoIGlzIG5vdAorCSAqIHN1cHBvcnRlZC4KKwkgKi8KKwlHVUFSRF9QQVRIU1BFQygmb3B0LT5wYXRoc3BlYywgUEFUSFNQRUNfRlJPTVRPUCB8IFBBVEhTUEVDX0xJVEVSQUwpOworI2lmIDAKKwkvKgorCSAqIFdlIHNob3VsZCByZWplY3Qgd2lsZGNhcmRzIGFzIHdlbGwuIFVuZm9ydHVuYXRlbHkgd2UKKwkgKiBoYXZlbid0IGdvdCBhIHJlbGlhYmxlIHdheSB0byBkZXRlY3QgdGhhdCAnZm9vXCpiYXInIGluCisJICogZmFjdCBoYXMgbm8gd2lsZGNhcmRzLiBub3dpbGRjYXJkX2xlbiBpcyBtZXJlbHkgYSBoaW50IGZvcgorCSAqIG9wdGltaXphdGlvbi4gTGV0IGl0IHNsaXAgZm9yIG5vdyB1bnRpbCB3aWxkbWF0Y2ggaXMgdGF1Z2h0CisJICogYWJvdXQgZHJ5LXJ1biBtb2RlIGFuZCByZXR1cm5zIHdpbGRjYXJkIGluZm8uCisJICovCisJaWYgKG9wdC0+cGF0aHNwZWMuaGFzX3dpbGRjYXJkKQorCQlkaWUoIkJVRzolczolZDogd2lsZGNhcmRzIGFyZSBub3Qgc3VwcG9ydGVkIiwKKwkJICAgIF9fRklMRV9fLCBfX0xJTkVfXyk7CisjZW5kaWYKKworCS8qIFJlbW92ZSB0aGUgZmlsZSBjcmVhdGlvbiBlbnRyeSBmcm9tIHRoZSBkaWZmIHF1ZXVlLCBhbmQgcmVtZW1iZXIgaXQgKi8KKwljaG9pY2UgPSBxLT5xdWV1ZVswXTsKKwlxLT5uciA9IDA7CisKKwlyZXBvX2RpZmZfc2V0dXAob3B0LT5yZXBvLCAmZGlmZl9vcHRzKTsKKwlkaWZmX29wdHMuZmxhZ3MucmVjdXJzaXZlID0gMTsKKwlkaWZmX29wdHMuZmxhZ3MuZmluZF9jb3BpZXNfaGFyZGVyID0gMTsKKwlkaWZmX29wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlkaWZmX29wdHMuc2luZ2xlX2ZvbGxvdyA9IG9wdC0+cGF0aHNwZWMuaXRlbXNbMF0ubWF0Y2g7CisJZGlmZl9vcHRzLmJyZWFrX29wdCA9IG9wdC0+YnJlYWtfb3B0OworCWRpZmZfb3B0cy5yZW5hbWVfc2NvcmUgPSBvcHQtPnJlbmFtZV9zY29yZTsKKwlkaWZmX3NldHVwX2RvbmUoJmRpZmZfb3B0cyk7CisJbGxfZGlmZl90cmVlX29pZChvbGRfb2lkLCBuZXdfb2lkLCBiYXNlLCAmZGlmZl9vcHRzKTsKKwlkaWZmY29yZV9zdGQoJmRpZmZfb3B0cyk7CisJY2xlYXJfcGF0aHNwZWMoJmRpZmZfb3B0cy5wYXRoc3BlYyk7CisKKwkvKiBHbyB0aHJvdWdoIHRoZSBuZXcgc2V0IG9mIGZpbGVwYWlyaW5nLCBhbmQgc2VlIGlmIHdlIGZpbmQgYSBtb3JlIGludGVyZXN0aW5nIG9uZSAqLworCW9wdC0+Zm91bmRfZm9sbG93ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCisJCS8qCisJCSAqIEZvdW5kIGEgc291cmNlPyBOb3Qgb25seSBkbyB3ZSB1c2UgdGhhdCBmb3IgdGhlIG5ldworCQkgKiBkaWZmX3F1ZXVlZF9kaWZmLCB3ZSB3aWxsIGFsc28gdXNlIHRoYXQgYXMgdGhlIHBhdGggaW4KKwkJICogdGhlIGZ1dHVyZSEKKwkJICovCisJCWlmICgocC0+c3RhdHVzID09ICdSJyB8fCBwLT5zdGF0dXMgPT0gJ0MnKSAmJgorCQkgICAgIXN0cmNtcChwLT50d28tPnBhdGgsIG9wdC0+cGF0aHNwZWMuaXRlbXNbMF0ubWF0Y2gpKSB7CisJCQljb25zdCBjaGFyICpwYXRoWzJdOworCisJCQkvKiBTd2l0Y2ggdGhlIGZpbGUtcGFpcnMgYXJvdW5kICovCisJCQlxLT5xdWV1ZVtpXSA9IGNob2ljZTsKKwkJCWNob2ljZSA9IHA7CisKKwkJCS8qIFVwZGF0ZSB0aGUgcGF0aCB3ZSB1c2UgZnJvbSBub3cgb24uLiAqLworCQkJcGF0aFswXSA9IHAtPm9uZS0+cGF0aDsKKwkJCXBhdGhbMV0gPSBOVUxMOworCQkJY2xlYXJfcGF0aHNwZWMoJm9wdC0+cGF0aHNwZWMpOworCQkJcGFyc2VfcGF0aHNwZWMoJm9wdC0+cGF0aHNwZWMsCisJCQkJICAgICAgIFBBVEhTUEVDX0FMTF9NQUdJQyAmIH5QQVRIU1BFQ19MSVRFUkFMLAorCQkJCSAgICAgICBQQVRIU1BFQ19MSVRFUkFMX1BBVEgsICIiLCBwYXRoKTsKKworCQkJLyoKKwkJCSAqIFRoZSBjYWxsZXIgZXhwZWN0cyB1cyB0byByZXR1cm4gYSBzZXQgb2YgdmFuaWxsYQorCQkJICogZmlsZXBhaXJzIHRvIGxldCBhIGxhdGVyIGNhbGwgdG8gZGlmZmNvcmVfc3RkKCkKKwkJCSAqIGl0IG1ha2VzIHRvIHNvcnQgdGhlIHJlbmFtZXMgb3V0IChhbW9uZyBvdGhlcgorCQkJICogdGhpbmdzKSwgYnV0IHdlIGFscmVhZHkgaGF2ZSBmb3VuZCByZW5hbWVzCisJCQkgKiBvdXJzZWx2ZXM7IHNpZ25hbCBkaWZmY29yZV9zdGQoKSBub3QgdG8gbXVjayB3aXRoCisJCQkgKiByZW5hbWUgaW5mb3JtYXRpb24uCisJCQkgKi8KKwkJCW9wdC0+Zm91bmRfZm9sbG93ID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBUaGVuLCBkaXNjYXJkIGFsbCB0aGUgbm9uLXJlbGV2YW50IGZpbGUgcGFpcnMuLi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlkaWZmX2ZyZWVfZmlsZXBhaXIocCk7CisJfQorCisJLyoKKwkgKiAuLiBhbmQgcmUtaW5zdGF0ZSB0aGUgb25lIHdlIHdhbnQgKHdoaWNoIG1pZ2h0IGJlIGVpdGhlciB0aGUKKwkgKiBvcmlnaW5hbCBvbmUsIG9yIHRoZSByZW5hbWUvY29weSB3ZSBmb3VuZCkKKwkgKi8KKwlxLT5xdWV1ZVswXSA9IGNob2ljZTsKKwlxLT5uciA9IDE7Cit9CisKK3N0YXRpYyBpbnQgbGxfZGlmZl90cmVlX29pZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqYmFzZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCBwaGVhZCwgKnA7CisJcGF0aGNoYW5nZV9mbl90IHBhdGhjaGFuZ2Vfb2xkID0gb3B0LT5wYXRoY2hhbmdlOworCisJcGhlYWQubmV4dCA9IE5VTEw7CisJb3B0LT5wYXRoY2hhbmdlID0gZW1pdF9kaWZmX2ZpcnN0X3BhcmVudF9vbmx5OworCWRpZmZfdHJlZV9wYXRocygmcGhlYWQsIG5ld19vaWQsICZvbGRfb2lkLCAxLCBiYXNlLCBvcHQpOworCisJZm9yIChwID0gcGhlYWQubmV4dDsgcDspIHsKKwkJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwcHJldiA9IHA7CisJCXAgPSBwLT5uZXh0OworCQlmcmVlKHBwcmV2KTsKKwl9CisKKwlvcHQtPnBhdGhjaGFuZ2UgPSBwYXRoY2hhbmdlX29sZDsKKwlyZXR1cm4gMDsKK30KKworaW50IGRpZmZfdHJlZV9vaWQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCwKKwkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkLAorCQkgIGNvbnN0IGNoYXIgKmJhc2Vfc3RyLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJc3RydWN0IHN0cmJ1ZiBiYXNlOworCWludCByZXR2YWw7CisKKwlzdHJidWZfaW5pdCgmYmFzZSwgUEFUSF9NQVgpOworCXN0cmJ1Zl9hZGRzdHIoJmJhc2UsIGJhc2Vfc3RyKTsKKworCXJldHZhbCA9IGxsX2RpZmZfdHJlZV9vaWQob2xkX29pZCwgbmV3X29pZCwgJmJhc2UsIG9wdCk7CisJaWYgKCEqYmFzZV9zdHIgJiYgb3B0LT5mbGFncy5mb2xsb3dfcmVuYW1lcyAmJiBkaWZmX21pZ2h0X2JlX3JlbmFtZSgpKQorCQl0cnlfdG9fZm9sbG93X3JlbmFtZXMob2xkX29pZCwgbmV3X29pZCwgJmJhc2UsIG9wdCk7CisKKwlzdHJidWZfcmVsZWFzZSgmYmFzZSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgZGlmZl9yb290X3RyZWVfb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsIGNvbnN0IGNoYXIgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlyZXR1cm4gZGlmZl90cmVlX29pZChOVUxMLCBuZXdfb2lkLCBiYXNlLCBvcHQpOworfQpkaWZmIC0tZ2l0IGEvdHJlZS13YWxrLmMgYi90cmVlLXdhbGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjBhZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvdHJlZS13YWxrLmMKQEAgLTAsMCArMSwxMjQyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9tb2RlKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50ICptb2RlcCkKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisJdW5zaWduZWQgaW50IG1vZGUgPSAwOworCisJaWYgKCpzdHIgPT0gJyAnKQorCQlyZXR1cm4gTlVMTDsKKworCXdoaWxlICgoYyA9ICpzdHIrKykgIT0gJyAnKSB7CisJCWlmIChjIDwgJzAnIHx8IGMgPiAnNycpCisJCQlyZXR1cm4gTlVMTDsKKwkJbW9kZSA9IChtb2RlIDw8IDMpICsgKGMgLSAnMCcpOworCX0KKwkqbW9kZXAgPSBtb2RlOworCXJldHVybiBzdHI7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX3RyZWVfZW50cnkoc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwljb25zdCBjaGFyICpwYXRoOworCXVuc2lnbmVkIGludCBtb2RlLCBsZW47CisJY29uc3QgdW5zaWduZWQgaGFzaHN6ID0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisKKwlpZiAoc2l6ZSA8IGhhc2hzeiArIDMgfHwgYnVmW3NpemUgLSAoaGFzaHN6ICsgMSldKSB7CisJCXN0cmJ1Zl9hZGRzdHIoZXJyLCBfKCJ0b28tc2hvcnQgdHJlZSBvYmplY3QiKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlwYXRoID0gZ2V0X21vZGUoYnVmLCAmbW9kZSk7CisJaWYgKCFwYXRoKSB7CisJCXN0cmJ1Zl9hZGRzdHIoZXJyLCBfKCJtYWxmb3JtZWQgbW9kZSBpbiB0cmVlIGVudHJ5IikpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghKnBhdGgpIHsKKwkJc3RyYnVmX2FkZHN0cihlcnIsIF8oImVtcHR5IGZpbGVuYW1lIGluIHRyZWUgZW50cnkiKSk7CisJCXJldHVybiAtMTsKKwl9CisJbGVuID0gc3RybGVuKHBhdGgpICsgMTsKKworCS8qIEluaXRpYWxpemUgdGhlIGRlc2NyaXB0b3IgZW50cnkgKi8KKwlkZXNjLT5lbnRyeS5wYXRoID0gcGF0aDsKKwlkZXNjLT5lbnRyeS5tb2RlID0gY2Fub25fbW9kZShtb2RlKTsKKwlkZXNjLT5lbnRyeS5wYXRobGVuID0gbGVuIC0gMTsKKwloYXNoY3B5KGRlc2MtPmVudHJ5Lm9pZC5oYXNoLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKXBhdGggKyBsZW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF90cmVlX2Rlc2NfaW50ZXJuYWwoc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3Qgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlkZXNjLT5idWZmZXIgPSBidWZmZXI7CisJZGVzYy0+c2l6ZSA9IHNpemU7CisJaWYgKHNpemUpCisJCXJldHVybiBkZWNvZGVfdHJlZV9lbnRyeShkZXNjLCBidWZmZXIsIHNpemUsIGVycik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaW5pdF90cmVlX2Rlc2Moc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3Qgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlpZiAoaW5pdF90cmVlX2Rlc2NfaW50ZXJuYWwoZGVzYywgYnVmZmVyLCBzaXplLCAmZXJyKSkKKwkJZGllKCIlcyIsIGVyci5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworfQorCitpbnQgaW5pdF90cmVlX2Rlc2NfZ2VudGx5KHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJaW50IHJlc3VsdCA9IGluaXRfdHJlZV9kZXNjX2ludGVybmFsKGRlc2MsIGJ1ZmZlciwgc2l6ZSwgJmVycik7CisJaWYgKHJlc3VsdCkKKwkJZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCAqZmlsbF90cmVlX2Rlc2NyaXB0b3Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CisJdm9pZCAqYnVmID0gTlVMTDsKKworCWlmIChvaWQpIHsKKwkJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uociwgb2lkLCB0cmVlX3R5cGUsICZzaXplLCBOVUxMKTsKKwkJaWYgKCFidWYpCisJCQlkaWUoInVuYWJsZSB0byByZWFkIHRyZWUgJXMiLCBvaWRfdG9faGV4KG9pZCkpOworCX0KKwlpbml0X3RyZWVfZGVzYyhkZXNjLCBidWYsIHNpemUpOworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyB2b2lkIGVudHJ5X2NsZWFyKHN0cnVjdCBuYW1lX2VudHJ5ICphKQoreworCW1lbXNldChhLCAwLCBzaXplb2YoKmEpKTsKK30KKworc3RhdGljIHZvaWQgZW50cnlfZXh0cmFjdChzdHJ1Y3QgdHJlZV9kZXNjICp0LCBzdHJ1Y3QgbmFtZV9lbnRyeSAqYSkKK3sKKwkqYSA9IHQtPmVudHJ5OworfQorCitzdGF0aWMgaW50IHVwZGF0ZV90cmVlX2VudHJ5X2ludGVybmFsKHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwljb25zdCB2b2lkICpidWYgPSBkZXNjLT5idWZmZXI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilkZXNjLT5lbnRyeS5wYXRoICsgZGVzYy0+ZW50cnkucGF0aGxlbiArIDEgKyB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBkZXNjLT5zaXplOworCXVuc2lnbmVkIGxvbmcgbGVuID0gZW5kIC0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilidWY7CisKKwlpZiAoc2l6ZSA8IGxlbikKKwkJZGllKF8oInRvby1zaG9ydCB0cmVlIGZpbGUiKSk7CisJYnVmID0gZW5kOworCXNpemUgLT0gbGVuOworCWRlc2MtPmJ1ZmZlciA9IGJ1ZjsKKwlkZXNjLT5zaXplID0gc2l6ZTsKKwlpZiAoc2l6ZSkKKwkJcmV0dXJuIGRlY29kZV90cmVlX2VudHJ5KGRlc2MsIGJ1Ziwgc2l6ZSwgZXJyKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1cGRhdGVfdHJlZV9lbnRyeShzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJaWYgKHVwZGF0ZV90cmVlX2VudHJ5X2ludGVybmFsKGRlc2MsICZlcnIpKQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7Cit9CisKK2ludCB1cGRhdGVfdHJlZV9lbnRyeV9nZW50bHkoc3RydWN0IHRyZWVfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWlmICh1cGRhdGVfdHJlZV9lbnRyeV9pbnRlcm5hbChkZXNjLCAmZXJyKSkgeworCQllcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCS8qIFN0b3AgcHJvY2Vzc2luZyB0aGlzIHRyZWUgYWZ0ZXIgZXJyb3IgKi8KKwkJZGVzYy0+c2l6ZSA9IDA7CisJCXJldHVybiAtMTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJcmV0dXJuIDA7Cit9CisKK2ludCB0cmVlX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIHN0cnVjdCBuYW1lX2VudHJ5ICplbnRyeSkKK3sKKwlpZiAoIWRlc2MtPnNpemUpCisJCXJldHVybiAwOworCisJKmVudHJ5ID0gZGVzYy0+ZW50cnk7CisJdXBkYXRlX3RyZWVfZW50cnkoZGVzYyk7CisJcmV0dXJuIDE7Cit9CisKK2ludCB0cmVlX2VudHJ5X2dlbnRseShzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50cnkpCit7CisJaWYgKCFkZXNjLT5zaXplKQorCQlyZXR1cm4gMDsKKworCSplbnRyeSA9IGRlc2MtPmVudHJ5OworCWlmICh1cGRhdGVfdHJlZV9lbnRyeV9nZW50bHkoZGVzYykpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCit2b2lkIHNldHVwX3RyYXZlcnNlX2luZm8oc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmJhc2UpCit7CisJc2l6ZV90IHBhdGhsZW4gPSBzdHJsZW4oYmFzZSk7CisJc3RhdGljIHN0cnVjdCB0cmF2ZXJzZV9pbmZvIGR1bW15OworCisJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOworCWlmIChwYXRobGVuICYmIGJhc2VbcGF0aGxlbi0xXSA9PSAnLycpCisJCXBhdGhsZW4tLTsKKwlpbmZvLT5wYXRobGVuID0gcGF0aGxlbiA/IHBhdGhsZW4gKyAxIDogMDsKKwlpbmZvLT5uYW1lID0gYmFzZTsKKwlpbmZvLT5uYW1lbGVuID0gcGF0aGxlbjsKKwlpZiAocGF0aGxlbikKKwkJaW5mby0+cHJldiA9ICZkdW1teTsKK30KKworY2hhciAqbWFrZV90cmF2ZXJzZV9wYXRoKGNoYXIgKnBhdGgsIHNpemVfdCBwYXRobGVuLAorCQkJIGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuKQoreworCS8qIEFsd2F5cyBwb2ludHMgdG8gdGhlIGVuZCBvZiB0aGUgbmFtZSB3ZSdyZSBhYm91dCB0byBhZGQgKi8KKwlzaXplX3QgcG9zID0gc3RfYWRkKGluZm8tPnBhdGhsZW4sIG5hbWVsZW4pOworCisJaWYgKHBvcyA+PSBwYXRobGVuKQorCQlCVUcoInRvbyBzbWFsbCBidWZmZXIgcGFzc2VkIHRvIG1ha2VfdHJhdmVyc2VfcGF0aCIpOworCisJcGF0aFtwb3NdID0gMDsKKwlmb3IgKDs7KSB7CisJCWlmIChwb3MgPCBuYW1lbGVuKQorCQkJQlVHKCJ0cmF2ZXJzZV9pbmZvIHBhdGhsZW4gZG9lcyBub3QgbWF0Y2ggc3RyaW5ncyIpOworCQlwb3MgLT0gbmFtZWxlbjsKKwkJbWVtY3B5KHBhdGggKyBwb3MsIG5hbWUsIG5hbWVsZW4pOworCisJCWlmICghcG9zKQorCQkJYnJlYWs7CisJCXBhdGhbLS1wb3NdID0gJy8nOworCisJCWlmICghaW5mbykKKwkJCUJVRygidHJhdmVyc2VfaW5mbyByYW4gb3V0IG9mIGxpc3QgaXRlbXMiKTsKKwkJbmFtZSA9IGluZm8tPm5hbWU7CisJCW5hbWVsZW4gPSBpbmZvLT5uYW1lbGVuOworCQlpbmZvID0gaW5mby0+cHJldjsKKwl9CisJcmV0dXJuIHBhdGg7Cit9CisKK3ZvaWQgc3RyYnVmX21ha2VfdHJhdmVyc2VfcGF0aChzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4pCit7CisJc2l6ZV90IGxlbiA9IHRyYXZlcnNlX3BhdGhfbGVuKGluZm8sIG5hbWVsZW4pOworCisJc3RyYnVmX2dyb3cob3V0LCBsZW4pOworCW1ha2VfdHJhdmVyc2VfcGF0aChvdXQtPmJ1ZiArIG91dC0+bGVuLCBvdXQtPmFsbG9jIC0gb3V0LT5sZW4sCisJCQkgICBpbmZvLCBuYW1lLCBuYW1lbGVuKTsKKwlzdHJidWZfc2V0bGVuKG91dCwgb3V0LT5sZW4gKyBsZW4pOworfQorCitzdHJ1Y3QgdHJlZV9kZXNjX3NraXAgeworCXN0cnVjdCB0cmVlX2Rlc2Nfc2tpcCAqcHJldjsKKwljb25zdCB2b2lkICpwdHI7Cit9OworCitzdHJ1Y3QgdHJlZV9kZXNjX3ggeworCXN0cnVjdCB0cmVlX2Rlc2MgZDsKKwlzdHJ1Y3QgdHJlZV9kZXNjX3NraXAgKnNraXA7Cit9OworCitzdGF0aWMgaW50IGNoZWNrX2VudHJ5X21hdGNoKGNvbnN0IGNoYXIgKmEsIGludCBhX2xlbiwgY29uc3QgY2hhciAqYiwgaW50IGJfbGVuKQoreworCS8qCisJICogVGhlIGNhbGxlciB3YW50cyB0byBwaWNrICphKiBmcm9tIGEgdHJlZSBvciBub3RoaW5nLgorCSAqIFdlIGFyZSBsb29raW5nIGF0ICpiKiBpbiBhIHRyZWUuCisJICoKKwkgKiAoMCkgSWYgYSBhbmQgYiBhcmUgdGhlIHNhbWUgbmFtZSwgd2UgYXJlIHRyaXZpYWxseSBoYXBweS4KKwkgKgorCSAqIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJpbGl0aWVzIHdoZXJlICphKiBjb3VsZCBiZSBoaWRpbmcKKwkgKiBiZWhpbmQgKmIqLgorCSAqCisJICogKDEpICphKiA9PSAidCIsICAgKmIqID09ICJhYiIgIGkuZS4gKmIqIHNvcnRzIGVhcmxpZXIgdGhhbiAqYSogbm8KKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0dGVyIHdoYXQuCisJICogKDIpICphKiA9PSAidCIsICAgKmIqID09ICJ0LTIiIGFuZCAidCIgaXMgYSBzdWJ0cmVlIGluIHRoZSB0cmVlOworCSAqICgzKSAqYSogPT0gInQtMiIsICpiKiA9PSAidCIgICBhbmQgInQtMiIgaXMgYSBibG9iIGluIHRoZSB0cmVlLgorCSAqCisJICogT3RoZXJ3aXNlIHdlIGtub3cgKmEqIHdvbid0IGFwcGVhciBpbiB0aGUgdHJlZSB3aXRob3V0CisJICogc2Nhbm5pbmcgZnVydGhlci4KKwkgKi8KKworCWludCBjbXAgPSBuYW1lX2NvbXBhcmUoYSwgYV9sZW4sIGIsIGJfbGVuKTsKKworCS8qIE1vc3QgY29tbW9uIGNhc2UgZmlyc3QgLS0gcmVhZGluZyBzeW5jJ2QgdHJlZXMgKi8KKwlpZiAoIWNtcCkKKwkJcmV0dXJuIGNtcDsKKworCWlmICgwIDwgY21wKSB7CisJCS8qIGEgY29tZXMgYWZ0ZXIgYjsgaXQgZG9lcyBub3QgbWF0dGVyIGlmIGl0IGlzIGNhc2UgKDMpCisJCWlmIChiX2xlbiA8IGFfbGVuICYmICFtZW1jbXAoYSwgYiwgYl9sZW4pICYmIGFbYl9sZW5dIDwgJy8nKQorCQkJcmV0dXJuIDE7CisJCSovCisJCXJldHVybiAxOyAvKiBrZWVwIGxvb2tpbmcgKi8KKwl9CisKKwkvKiBiIGNvbWVzIGFmdGVyIGE7IGFyZSB3ZSBsb29raW5nIGF0IGNhc2UgKDIpPyAqLworCWlmIChhX2xlbiA8IGJfbGVuICYmICFtZW1jbXAoYSwgYiwgYV9sZW4pICYmIGJbYV9sZW5dIDwgJy8nKQorCQlyZXR1cm4gMTsgLyoga2VlcCBsb29raW5nICovCisKKwlyZXR1cm4gLTE7IC8qIGEgY2Fubm90IGFwcGVhciBpbiB0aGUgdHJlZSAqLworfQorCisvKgorICogRnJvbSB0aGUgZXh0ZW5kZWQgdHJlZV9kZXNjLCBleHRyYWN0IHRoZSBmaXJzdCBuYW1lIGVudHJ5LCB3aGlsZQorICogcGF5aW5nIGF0dGVudGlvbiB0byB0aGUgY2FuZGlkYXRlICJmaXJzdCIgbmFtZS4gIE1vc3QgaW1wb3J0YW50bHksCisgKiB3aGVuIGxvb2tpbmcgZm9yIGFuIGVudHJ5LCBpZiB0aGVyZSBhcmUgZW50cmllcyB0aGF0IHNvcnRzIGVhcmxpZXIKKyAqIGluIHRoZSB0cmVlIG9iamVjdCByZXByZXNlbnRhdGlvbiB0aGFuIHRoYXQgbmFtZSwgc2tpcCB0aGVtIGFuZAorICogcHJvY2VzcyB0aGUgbmFtZWQgZW50cnkgZmlyc3QuICBXZSB3aWxsIHJlbWVtYmVyIHRoYXQgd2UgaGF2ZW4ndAorICogcHJvY2Vzc2VkIHRoZSBmaXJzdCBlbnRyeSB5ZXQsIGFuZCBpbiB0aGUgbGF0ZXIgY2FsbCBza2lwIHRoZQorICogZW50cnkgd2UgcHJvY2Vzc2VkIGVhcmx5IHdoZW4gdXBkYXRlX2V4dGVuZGVkX2VudHJ5KCkgaXMgY2FsbGVkLgorICoKKyAqIEUuZy4gaWYgdGhlIHVuZGVybHlpbmcgdHJlZSBvYmplY3QgaGFzIHRoZXNlIGVudHJpZXM6CisgKgorICogICAgYmxvYiAgICAidC0xIgorICogICAgYmxvYiAgICAidC0yIgorICogICAgdHJlZSAgICAidCIKKyAqICAgIGJsb2IgICAgInQ9MSIKKyAqCisgKiBhbmQgdGhlICJmaXJzdCIgYXNrcyBmb3IgInQiLCByZW1lbWJlciB0aGF0IHdlIHN0aWxsIG5lZWQgdG8KKyAqIHByb2Nlc3MgInQtMSIgYW5kICJ0LTIiIGJ1dCBleHRyYWN0ICJ0Ii4gIEFmdGVyIHByb2Nlc3NpbmcgdGhlCisgKiBlbnRyeSAidCIgZnJvbSB0aGlzIGNhbGwsIHRoZSBjYWxsZXIgd2lsbCBsZXQgdXMga25vdyBieSBjYWxsaW5nCisgKiB1cGRhdGVfZXh0ZW5kZWRfZW50cnkoKSB0aGF0IHdlIGNhbiByZW1lbWJlciAidCIgaGFzIGJlZW4gcHJvY2Vzc2VkCisgKiBhbHJlYWR5LgorICovCisKK3N0YXRpYyB2b2lkIGV4dGVuZGVkX2VudHJ5X2V4dHJhY3Qoc3RydWN0IHRyZWVfZGVzY194ICp0LAorCQkJCSAgIHN0cnVjdCBuYW1lX2VudHJ5ICphLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZpcnN0LAorCQkJCSAgIGludCBmaXJzdF9sZW4pCit7CisJY29uc3QgY2hhciAqcGF0aDsKKwlpbnQgbGVuOworCXN0cnVjdCB0cmVlX2Rlc2MgcHJvYmU7CisJc3RydWN0IHRyZWVfZGVzY19za2lwICpza2lwOworCisJLyoKKwkgKiBFeHRyYWN0IHRoZSBmaXJzdCBlbnRyeSBmcm9tIHRoZSB0cmVlX2Rlc2MsIGJ1dCBza2lwIHRoZQorCSAqIG9uZXMgdGhhdCB3ZSBhbHJlYWR5IHJldHVybmVkIGluIGVhcmxpZXIgcm91bmRzLgorCSAqLworCXdoaWxlICgxKSB7CisJCWlmICghdC0+ZC5zaXplKSB7CisJCQllbnRyeV9jbGVhcihhKTsKKwkJCWJyZWFrOyAvKiBub3QgZm91bmQgKi8KKwkJfQorCQllbnRyeV9leHRyYWN0KCZ0LT5kLCBhKTsKKwkJZm9yIChza2lwID0gdC0+c2tpcDsgc2tpcDsgc2tpcCA9IHNraXAtPnByZXYpCisJCQlpZiAoYS0+cGF0aCA9PSBza2lwLT5wdHIpCisJCQkJYnJlYWs7IC8qIGZvdW5kICovCisJCWlmICghc2tpcCkKKwkJCWJyZWFrOworCQkvKiBXZSBoYXZlIHByb2Nlc3NlZCB0aGlzIGVudHJ5IGFscmVhZHkuICovCisJCXVwZGF0ZV90cmVlX2VudHJ5KCZ0LT5kKTsKKwl9CisKKwlpZiAoIWZpcnN0IHx8ICFhLT5wYXRoKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFRoZSBjYWxsZXIgd2FudHMgImZpcnN0IiBmcm9tIHRoaXMgdHJlZSwgb3Igbm90aGluZy4KKwkgKi8KKwlwYXRoID0gYS0+cGF0aDsKKwlsZW4gPSB0cmVlX2VudHJ5X2xlbihhKTsKKwlzd2l0Y2ggKGNoZWNrX2VudHJ5X21hdGNoKGZpcnN0LCBmaXJzdF9sZW4sIHBhdGgsIGxlbikpIHsKKwljYXNlIC0xOgorCQllbnRyeV9jbGVhcihhKTsKKwljYXNlIDA6CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gbG9vay1haGVhZCAtLSB3ZSBzdXNwZWN0IHRoYXQgYSBzdWJ0cmVlIHdob3NlCisJICogbmFtZSBpcyAiZmlyc3QiIG1heSBiZSBoaWRpbmcgYmVoaW5kIHRoZSBjdXJyZW50IGVudHJ5ICJwYXRoIi4KKwkgKi8KKwlwcm9iZSA9IHQtPmQ7CisJd2hpbGUgKHByb2JlLnNpemUpIHsKKwkJZW50cnlfZXh0cmFjdCgmcHJvYmUsIGEpOworCQlwYXRoID0gYS0+cGF0aDsKKwkJbGVuID0gdHJlZV9lbnRyeV9sZW4oYSk7CisJCXN3aXRjaCAoY2hlY2tfZW50cnlfbWF0Y2goZmlyc3QsIGZpcnN0X2xlbiwgcGF0aCwgbGVuKSkgeworCQljYXNlIC0xOgorCQkJZW50cnlfY2xlYXIoYSk7CisJCWNhc2UgMDoKKwkJCXJldHVybjsKKwkJZGVmYXVsdDoKKwkJCXVwZGF0ZV90cmVlX2VudHJ5KCZwcm9iZSk7CisJCQlicmVhazsKKwkJfQorCQkvKiBrZWVwIGxvb2tpbmcgKi8KKwl9CisJZW50cnlfY2xlYXIoYSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9leHRlbmRlZF9lbnRyeShzdHJ1Y3QgdHJlZV9kZXNjX3ggKnQsIHN0cnVjdCBuYW1lX2VudHJ5ICphKQoreworCWlmICh0LT5kLmVudHJ5LnBhdGggPT0gYS0+cGF0aCkgeworCQl1cGRhdGVfdHJlZV9lbnRyeSgmdC0+ZCk7CisJfSBlbHNlIHsKKwkJLyogd2UgaGF2ZSByZXR1cm5lZCB0aGlzIGVudHJ5IGVhcmx5ICovCisJCXN0cnVjdCB0cmVlX2Rlc2Nfc2tpcCAqc2tpcCA9IHhtYWxsb2Moc2l6ZW9mKCpza2lwKSk7CisJCXNraXAtPnB0ciA9IGEtPnBhdGg7CisJCXNraXAtPnByZXYgPSB0LT5za2lwOworCQl0LT5za2lwID0gc2tpcDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZXh0ZW5kZWRfZW50cnkoc3RydWN0IHRyZWVfZGVzY194ICp0KQoreworCXN0cnVjdCB0cmVlX2Rlc2Nfc2tpcCAqcCwgKnM7CisKKwlmb3IgKHMgPSB0LT5za2lwOyBzOyBzID0gcCkgeworCQlwID0gcy0+cHJldjsKKwkJZnJlZShzKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBydW5lX3RyYXZlcnNhbChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgIHN0cnVjdCBuYW1lX2VudHJ5ICplLAorCQkJCSAgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3Qgc3RyYnVmICpiYXNlLAorCQkJCSAgaW50IHN0aWxsX2ludGVyZXN0aW5nKQoreworCWlmICghaW5mby0+cGF0aHNwZWMgfHwgc3RpbGxfaW50ZXJlc3RpbmcgPT0gMikKKwkJcmV0dXJuIDI7CisJaWYgKHN0aWxsX2ludGVyZXN0aW5nIDwgMCkKKwkJcmV0dXJuIHN0aWxsX2ludGVyZXN0aW5nOworCXJldHVybiB0cmVlX2VudHJ5X2ludGVyZXN0aW5nKGlzdGF0ZSwgZSwgYmFzZSwKKwkJCQkgICAgICAwLCBpbmZvLT5wYXRoc3BlYyk7Cit9CisKK2ludCB0cmF2ZXJzZV90cmVlcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJICAgaW50IG4sIHN0cnVjdCB0cmVlX2Rlc2MgKnQsCisJCSAgIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQoreworCWludCBlcnJvciA9IDA7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnlbTUFYX1RSQVZFUlNFX1RSRUVTXTsKKwlpbnQgaTsKKwlzdHJ1Y3QgdHJlZV9kZXNjX3ggdHhbQVJSQVlfU0laRShlbnRyeSldOworCXN0cnVjdCBzdHJidWYgYmFzZSA9IFNUUkJVRl9JTklUOworCWludCBpbnRlcmVzdGluZyA9IDE7CisJY2hhciAqdHJhdmVyc2VfcGF0aDsKKworCWlmIChuID49IEFSUkFZX1NJWkUoZW50cnkpKQorCQlCVUcoInRyYXZlcnNlX3RyZWVzKCkgY2FsbGVkIHdpdGggdG9vIG1hbnkgdHJlZXMgKCVkKSIsIG4pOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQl0eFtpXS5kID0gdFtpXTsKKwkJdHhbaV0uc2tpcCA9IE5VTEw7CisJfQorCisJaWYgKGluZm8tPnByZXYpIHsKKwkJc3RyYnVmX21ha2VfdHJhdmVyc2VfcGF0aCgmYmFzZSwgaW5mby0+cHJldiwKKwkJCQkJICBpbmZvLT5uYW1lLCBpbmZvLT5uYW1lbGVuKTsKKwkJc3RyYnVmX2FkZGNoKCZiYXNlLCAnLycpOworCQl0cmF2ZXJzZV9wYXRoID0geHN0cm5kdXAoYmFzZS5idWYsIGJhc2UubGVuKTsKKwl9IGVsc2UgeworCQl0cmF2ZXJzZV9wYXRoID0geHN0cm5kdXAoaW5mby0+bmFtZSwgaW5mby0+cGF0aGxlbik7CisJfQorCWluZm8tPnRyYXZlcnNlX3BhdGggPSB0cmF2ZXJzZV9wYXRoOworCWZvciAoOzspIHsKKwkJaW50IHRyZWVzX3VzZWQ7CisJCXVuc2lnbmVkIGxvbmcgbWFzaywgZGlybWFzazsKKwkJY29uc3QgY2hhciAqZmlyc3QgPSBOVUxMOworCQlpbnQgZmlyc3RfbGVuID0gMDsKKwkJc3RydWN0IG5hbWVfZW50cnkgKmUgPSBOVUxMOworCQlpbnQgbGVuOworCisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWUgPSBlbnRyeSArIGk7CisJCQlleHRlbmRlZF9lbnRyeV9leHRyYWN0KHR4ICsgaSwgZSwgTlVMTCwgMCk7CisJCX0KKworCQkvKgorCQkgKiBBIHRyZWUgbWF5IGhhdmUgInQtMiIgYXQgdGhlIGN1cnJlbnQgbG9jYXRpb24gZXZlbgorCQkgKiB0aG91Z2ggaXQgbWF5IGhhdmUgInQiIHRoYXQgaXMgYSBzdWJ0cmVlIGJlaGluZCBpdCwKKwkJICogYW5kIGFub3RoZXIgdHJlZSBtYXkgcmV0dXJuICJ0Ii4gIFdlIHdhbnQgdG8gZ3JhYgorCQkgKiBhbGwgInQiIGZyb20gYWxsIHRyZWVzIHRvIG1hdGNoIGluIHN1Y2ggYSBjYXNlLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkJZSA9IGVudHJ5ICsgaTsKKwkJCWlmICghZS0+cGF0aCkKKwkJCQljb250aW51ZTsKKwkJCWxlbiA9IHRyZWVfZW50cnlfbGVuKGUpOworCQkJaWYgKCFmaXJzdCkgeworCQkJCWZpcnN0ID0gZS0+cGF0aDsKKwkJCQlmaXJzdF9sZW4gPSBsZW47CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAobmFtZV9jb21wYXJlKGUtPnBhdGgsIGxlbiwgZmlyc3QsIGZpcnN0X2xlbikgPCAwKSB7CisJCQkJZmlyc3QgPSBlLT5wYXRoOworCQkJCWZpcnN0X2xlbiA9IGxlbjsKKwkJCX0KKwkJfQorCisJCWlmIChmaXJzdCkgeworCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkJCWUgPSBlbnRyeSArIGk7CisJCQkJZXh0ZW5kZWRfZW50cnlfZXh0cmFjdCh0eCArIGksIGUsIGZpcnN0LCBmaXJzdF9sZW4pOworCQkJCS8qIEN1bGwgdGhlIG9uZXMgdGhhdCBhcmUgbm90IHRoZSBlYXJsaWVzdCAqLworCQkJCWlmICghZS0+cGF0aCkKKwkJCQkJY29udGludWU7CisJCQkJbGVuID0gdHJlZV9lbnRyeV9sZW4oZSk7CisJCQkJaWYgKG5hbWVfY29tcGFyZShlLT5wYXRoLCBsZW4sIGZpcnN0LCBmaXJzdF9sZW4pKQorCQkJCQllbnRyeV9jbGVhcihlKTsKKwkJCX0KKwkJfQorCisJCS8qIE5vdyB3ZSBoYXZlIGluIGVudHJ5W2ldIHRoZSBlYXJsaWVzdCBuYW1lIGZyb20gdGhlIHRyZWVzICovCisJCW1hc2sgPSAwOworCQlkaXJtYXNrID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkJaWYgKCFlbnRyeVtpXS5wYXRoKQorCQkJCWNvbnRpbnVlOworCQkJbWFzayB8PSAxdWwgPDwgaTsKKwkJCWlmIChTX0lTRElSKGVudHJ5W2ldLm1vZGUpKQorCQkJCWRpcm1hc2sgfD0gMXVsIDw8IGk7CisJCQllID0gJmVudHJ5W2ldOworCQl9CisJCWlmICghbWFzaykKKwkJCWJyZWFrOworCQlpbnRlcmVzdGluZyA9IHBydW5lX3RyYXZlcnNhbChpc3RhdGUsIGUsIGluZm8sICZiYXNlLCBpbnRlcmVzdGluZyk7CisJCWlmIChpbnRlcmVzdGluZyA8IDApCisJCQlicmVhazsKKwkJaWYgKGludGVyZXN0aW5nKSB7CisJCQl0cmVlc191c2VkID0gaW5mby0+Zm4obiwgbWFzaywgZGlybWFzaywgZW50cnksIGluZm8pOworCQkJaWYgKHRyZWVzX3VzZWQgPCAwKSB7CisJCQkJZXJyb3IgPSB0cmVlc191c2VkOworCQkJCWlmICghaW5mby0+c2hvd19hbGxfZXJyb3JzKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCW1hc2sgJj0gdHJlZXNfdXNlZDsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJaWYgKG1hc2sgJiAoMXVsIDw8IGkpKQorCQkJCXVwZGF0ZV9leHRlbmRlZF9lbnRyeSh0eCArIGksIGVudHJ5ICsgaSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWZyZWVfZXh0ZW5kZWRfZW50cnkodHggKyBpKTsKKwlmcmVlKHRyYXZlcnNlX3BhdGgpOworCWluZm8tPnRyYXZlcnNlX3BhdGggPSBOVUxMOworCXN0cmJ1Zl9yZWxlYXNlKCZiYXNlKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0cnVjdCBkaXJfc3RhdGUgeworCXZvaWQgKnRyZWU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworfTsKKworc3RhdGljIGludCBmaW5kX3RyZWVfZW50cnkoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCB0cmVlX2Rlc2MgKnQsCisJCQkgICBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHQsCisJCQkgICB1bnNpZ25lZCBzaG9ydCAqbW9kZSkKK3sKKwlpbnQgbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKwl3aGlsZSAodC0+c2l6ZSkgeworCQljb25zdCBjaGFyICplbnRyeTsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWludCBlbnRyeWxlbiwgY21wOworCisJCW9pZGNweSgmb2lkLCB0cmVlX2VudHJ5X2V4dHJhY3QodCwgJmVudHJ5LCBtb2RlKSk7CisJCWVudHJ5bGVuID0gdHJlZV9lbnRyeV9sZW4oJnQtPmVudHJ5KTsKKwkJdXBkYXRlX3RyZWVfZW50cnkodCk7CisJCWlmIChlbnRyeWxlbiA+IG5hbWVsZW4pCisJCQljb250aW51ZTsKKwkJY21wID0gbWVtY21wKG5hbWUsIGVudHJ5LCBlbnRyeWxlbik7CisJCWlmIChjbXAgPiAwKQorCQkJY29udGludWU7CisJCWlmIChjbXAgPCAwKQorCQkJYnJlYWs7CisJCWlmIChlbnRyeWxlbiA9PSBuYW1lbGVuKSB7CisJCQlvaWRjcHkocmVzdWx0LCAmb2lkKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChuYW1lW2VudHJ5bGVuXSAhPSAnLycpCisJCQljb250aW51ZTsKKwkJaWYgKCFTX0lTRElSKCptb2RlKSkKKwkJCWJyZWFrOworCQlpZiAoKytlbnRyeWxlbiA9PSBuYW1lbGVuKSB7CisJCQlvaWRjcHkocmVzdWx0LCAmb2lkKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiBnZXRfdHJlZV9lbnRyeShyLCAmb2lkLCBuYW1lICsgZW50cnlsZW4sIHJlc3VsdCwgbW9kZSk7CisJfQorCXJldHVybiAtMTsKK30KKworaW50IGdldF90cmVlX2VudHJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlX29pZCwKKwkJICAgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICB1bnNpZ25lZCBzaG9ydCAqbW9kZSkKK3sKKwlpbnQgcmV0dmFsOworCXZvaWQgKnRyZWU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXN0cnVjdCBvYmplY3RfaWQgcm9vdDsKKworCXRyZWUgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShyLCB0cmVlX29pZCwgdHJlZV90eXBlLCAmc2l6ZSwgJnJvb3QpOworCWlmICghdHJlZSkKKwkJcmV0dXJuIC0xOworCisJaWYgKG5hbWVbMF0gPT0gJ1wwJykgeworCQlvaWRjcHkob2lkLCAmcm9vdCk7CisJCWZyZWUodHJlZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc2l6ZSkgeworCQlyZXR2YWwgPSAtMTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgdHJlZV9kZXNjIHQ7CisJCWluaXRfdHJlZV9kZXNjKCZ0LCB0cmVlLCBzaXplKTsKKwkJcmV0dmFsID0gZmluZF90cmVlX2VudHJ5KHIsICZ0LCBuYW1lLCBvaWQsIG1vZGUpOworCX0KKwlmcmVlKHRyZWUpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBUaGlzIGlzIExpbnV4J3MgYnVpbHQtaW4gbWF4IGZvciB0aGUgbnVtYmVyIG9mIHN5bWxpbmtzIHRvIGZvbGxvdy4KKyAqIFRoYXQgbGltaXQsIG9mIGNvdXJzZSwgZG9lcyBub3QgYWZmZWN0IGdpdCwgYnV0IGl0J3MgYSByZWFzb25hYmxlCisgKiBjaG9pY2UuCisgKi8KKyNkZWZpbmUgR0VUX1RSRUVfRU5UUllfRk9MTE9XX1NZTUxJTktTX01BWF9MSU5LUyA0MAorCisvKioKKyAqIEZpbmQgYSB0cmVlIGVudHJ5IGJ5IGZvbGxvd2luZyBzeW1saW5rcyBpbiB0cmVlX3NoYSAod2hpY2ggaXMKKyAqIGFzc3VtZWQgdG8gYmUgdGhlIHJvb3Qgb2YgdGhlIHJlcG9zaXRvcnkpLiAgSW4gdGhlIGV2ZW50IHRoYXQgYQorICogc3ltbGluayBwb2ludHMgb3V0c2lkZSB0aGUgcmVwb3NpdG9yeSAoZS5nLiBhIGxpbmsgdG8gL2ZvbyBvciBhCisgKiByb290LWxldmVsIGxpbmsgdG8gLi4vZm9vKSwgdGhlIHBvcnRpb24gb2YgdGhlIGxpbmsgd2hpY2ggaXMKKyAqIG91dHNpZGUgdGhlIHJlcG9zaXRvcnkgd2lsbCBiZSByZXR1cm5lZCBpbiByZXN1bHRfcGF0aCwgYW5kICptb2RlCisgKiB3aWxsIGJlIHNldCB0byAwLiAgSXQgaXMgYXNzdW1lZCB0aGF0IHJlc3VsdF9wYXRoIGlzIHVuaW5pdGlhbGl6ZWQuCisgKiBJZiB0aGVyZSBhcmUgbm8gc3ltbGlua3MsIG9yIHRoZSBlbmQgcmVzdWx0IG9mIHRoZSBzeW1saW5rIGNoYWluCisgKiBwb2ludHMgdG8gYW4gb2JqZWN0IGluc2lkZSB0aGUgcmVwb3NpdG9yeSwgcmVzdWx0IHdpbGwgYmUgZmlsbGVkIGluCisgKiB3aXRoIHRoZSBzaGExIG9mIHRoZSBmb3VuZCBvYmplY3QsIGFuZCAqbW9kZSB3aWxsIGhvbGQgdGhlIG1vZGUgb2YKKyAqIHRoZSBvYmplY3QuCisgKgorICogU2VlIHRoZSBjb2RlIGZvciBlbnVtIGdldF9vaWRfcmVzdWx0IGZvciBhIGRlc2NyaXB0aW9uIG9mCisgKiB0aGUgcmV0dXJuIHZhbHVlcy4KKyAqLworZW51bSBnZXRfb2lkX3Jlc3VsdCBnZXRfdHJlZV9lbnRyeV9mb2xsb3dfc3ltbGlua3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCXN0cnVjdCBvYmplY3RfaWQgKnRyZWVfb2lkLCBjb25zdCBjaGFyICpuYW1lLAorCQlzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHQsIHN0cnVjdCBzdHJidWYgKnJlc3VsdF9wYXRoLAorCQl1bnNpZ25lZCBzaG9ydCAqbW9kZSkKK3sKKwlpbnQgcmV0dmFsID0gTUlTU0lOR19PQkpFQ1Q7CisJc3RydWN0IGRpcl9zdGF0ZSAqcGFyZW50cyA9IE5VTEw7CisJc2l6ZV90IHBhcmVudHNfYWxsb2MgPSAwOworCXNpemVfdCBpLCBwYXJlbnRzX25yID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGN1cnJlbnRfdHJlZV9vaWQ7CisJc3RydWN0IHN0cmJ1ZiBuYW1lYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHRyZWVfZGVzYyB0OworCWludCBmb2xsb3dzX3JlbWFpbmluZyA9IEdFVF9UUkVFX0VOVFJZX0ZPTExPV19TWU1MSU5LU19NQVhfTElOS1M7CisKKwlpbml0X3RyZWVfZGVzYygmdCwgTlVMTCwgMFVMKTsKKwlzdHJidWZfYWRkc3RyKCZuYW1lYnVmLCBuYW1lKTsKKwlvaWRjcHkoJmN1cnJlbnRfdHJlZV9vaWQsIHRyZWVfb2lkKTsKKworCXdoaWxlICgxKSB7CisJCWludCBmaW5kX3Jlc3VsdDsKKwkJY2hhciAqZmlyc3Rfc2xhc2g7CisJCWNoYXIgKnJlbWFpbmRlciA9IE5VTEw7CisKKwkJaWYgKCF0LmJ1ZmZlcikgeworCQkJdm9pZCAqdHJlZTsKKwkJCXN0cnVjdCBvYmplY3RfaWQgcm9vdDsKKwkJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJCXRyZWUgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShyLAorCQkJCQkJCSAgJmN1cnJlbnRfdHJlZV9vaWQsCisJCQkJCQkJICB0cmVlX3R5cGUsICZzaXplLAorCQkJCQkJCSAgJnJvb3QpOworCQkJaWYgKCF0cmVlKQorCQkJCWdvdG8gZG9uZTsKKworCQkJQUxMT0NfR1JPVyhwYXJlbnRzLCBwYXJlbnRzX25yICsgMSwgcGFyZW50c19hbGxvYyk7CisJCQlwYXJlbnRzW3BhcmVudHNfbnJdLnRyZWUgPSB0cmVlOworCQkJcGFyZW50c1twYXJlbnRzX25yXS5zaXplID0gc2l6ZTsKKwkJCW9pZGNweSgmcGFyZW50c1twYXJlbnRzX25yXS5vaWQsICZyb290KTsKKwkJCXBhcmVudHNfbnIrKzsKKworCQkJaWYgKG5hbWVidWYuYnVmWzBdID09ICdcMCcpIHsKKwkJCQlvaWRjcHkocmVzdWx0LCAmcm9vdCk7CisJCQkJcmV0dmFsID0gRk9VTkQ7CisJCQkJZ290byBkb25lOworCQkJfQorCisJCQlpZiAoIXNpemUpCisJCQkJZ290byBkb25lOworCisJCQkvKiBkZXNjZW5kICovCisJCQlpbml0X3RyZWVfZGVzYygmdCwgdHJlZSwgc2l6ZSk7CisJCX0KKworCQkvKiBIYW5kbGUgc3ltbGlua3MgdG8gZS5nLiBhLy9iIGJ5IHJlbW92aW5nIGxlYWRpbmcgc2xhc2hlcyAqLworCQl3aGlsZSAobmFtZWJ1Zi5idWZbMF0gPT0gJy8nKSB7CisJCQlzdHJidWZfcmVtb3ZlKCZuYW1lYnVmLCAwLCAxKTsKKwkJfQorCisJCS8qIFNwbGl0IG5hbWVidWYgaW50byBhIGZpcnN0IGNvbXBvbmVudCBhbmQgYSByZW1haW5kZXIgKi8KKwkJaWYgKChmaXJzdF9zbGFzaCA9IHN0cmNocihuYW1lYnVmLmJ1ZiwgJy8nKSkpIHsKKwkJCSpmaXJzdF9zbGFzaCA9IDA7CisJCQlyZW1haW5kZXIgPSBmaXJzdF9zbGFzaCArIDE7CisJCX0KKworCQlpZiAoIXN0cmNtcChuYW1lYnVmLmJ1ZiwgIi4uIikpIHsKKwkJCXN0cnVjdCBkaXJfc3RhdGUgKnBhcmVudDsKKwkJCS8qCisJCQkgKiBXZSBjb3VsZCBlbmQgdXAgd2l0aCAuLiBpbiB0aGUgbmFtZWJ1ZiBpZiBpdAorCQkJICogYXBwZWFycyBpbiBhIHN5bWxpbmsuCisJCQkgKi8KKworCQkJaWYgKHBhcmVudHNfbnIgPT0gMSkgeworCQkJCWlmIChyZW1haW5kZXIpCisJCQkJCSpmaXJzdF9zbGFzaCA9ICcvJzsKKwkJCQlzdHJidWZfYWRkKHJlc3VsdF9wYXRoLCBuYW1lYnVmLmJ1ZiwKKwkJCQkJICAgbmFtZWJ1Zi5sZW4pOworCQkJCSptb2RlID0gMDsKKwkJCQlyZXR2YWwgPSBGT1VORDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlwYXJlbnQgPSAmcGFyZW50c1twYXJlbnRzX25yIC0gMV07CisJCQlmcmVlKHBhcmVudC0+dHJlZSk7CisJCQlwYXJlbnRzX25yLS07CisJCQlwYXJlbnQgPSAmcGFyZW50c1twYXJlbnRzX25yIC0gMV07CisJCQlpbml0X3RyZWVfZGVzYygmdCwgcGFyZW50LT50cmVlLCBwYXJlbnQtPnNpemUpOworCQkJc3RyYnVmX3JlbW92ZSgmbmFtZWJ1ZiwgMCwgcmVtYWluZGVyID8gMyA6IDIpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBXZSBjb3VsZCBlbmQgdXAgaGVyZSB2aWEgYSBzeW1saW5rIHRvIGRpci8uLiAqLworCQlpZiAobmFtZWJ1Zi5idWZbMF0gPT0gJ1wwJykgeworCQkJb2lkY3B5KHJlc3VsdCwgJnBhcmVudHNbcGFyZW50c19uciAtIDFdLm9pZCk7CisJCQlyZXR2YWwgPSBGT1VORDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCS8qIExvb2sgdXAgdGhlIGZpcnN0IChvciBvbmx5KSBwYXRoIGNvbXBvbmVudCBpbiB0aGUgdHJlZS4gKi8KKwkJZmluZF9yZXN1bHQgPSBmaW5kX3RyZWVfZW50cnkociwgJnQsIG5hbWVidWYuYnVmLAorCQkJCQkgICAgICAmY3VycmVudF90cmVlX29pZCwgbW9kZSk7CisJCWlmIChmaW5kX3Jlc3VsdCkgeworCQkJZ290byBkb25lOworCQl9CisKKwkJaWYgKFNfSVNESVIoKm1vZGUpKSB7CisJCQlpZiAoIXJlbWFpbmRlcikgeworCQkJCW9pZGNweShyZXN1bHQsICZjdXJyZW50X3RyZWVfb2lkKTsKKwkJCQlyZXR2YWwgPSBGT1VORDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQkvKiBEZXNjZW5kIHRoZSB0cmVlICovCisJCQl0LmJ1ZmZlciA9IE5VTEw7CisJCQlzdHJidWZfcmVtb3ZlKCZuYW1lYnVmLCAwLAorCQkJCSAgICAgIDEgKyBmaXJzdF9zbGFzaCAtIG5hbWVidWYuYnVmKTsKKwkJfSBlbHNlIGlmIChTX0lTUkVHKCptb2RlKSkgeworCQkJaWYgKCFyZW1haW5kZXIpIHsKKwkJCQlvaWRjcHkocmVzdWx0LCAmY3VycmVudF90cmVlX29pZCk7CisJCQkJcmV0dmFsID0gRk9VTkQ7CisJCQl9IGVsc2UgeworCQkJCXJldHZhbCA9IE5PVF9ESVI7CisJCQl9CisJCQlnb3RvIGRvbmU7CisJCX0gZWxzZSBpZiAoU19JU0xOSygqbW9kZSkpIHsKKwkJCS8qIEZvbGxvdyBhIHN5bWxpbmsgKi8KKwkJCXVuc2lnbmVkIGxvbmcgbGlua19sZW47CisJCQlzaXplX3QgbGVuOworCQkJY2hhciAqY29udGVudHMsICpjb250ZW50c19zdGFydDsKKwkJCXN0cnVjdCBkaXJfc3RhdGUgKnBhcmVudDsKKwkJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCQkJaWYgKGZvbGxvd3NfcmVtYWluaW5nLS0gPT0gMCkgeworCQkJCS8qIFRvbyBtYW55IHN5bWxpbmtzIGZvbGxvd2VkICovCisJCQkJcmV0dmFsID0gU1lNTElOS19MT09QOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgZm9sbG93ZWQgYXQgYSBsZWFzdAorCQkJICogb25lIHN5bWxpbmssIHNvIG9uIGVycm9yIHdlIG5lZWQgdG8gcmVwb3J0IHRoaXMuCisJCQkgKi8KKwkJCXJldHZhbCA9IERBTkdMSU5HX1NZTUxJTks7CisKKwkJCWNvbnRlbnRzID0gcmVwb19yZWFkX29iamVjdF9maWxlKHIsCisJCQkJCQkgICAgJmN1cnJlbnRfdHJlZV9vaWQsICZ0eXBlLAorCQkJCQkJICAgICZsaW5rX2xlbik7CisKKwkJCWlmICghY29udGVudHMpCisJCQkJZ290byBkb25lOworCisJCQlpZiAoY29udGVudHNbMF0gPT0gJy8nKSB7CisJCQkJc3RyYnVmX2FkZHN0cihyZXN1bHRfcGF0aCwgY29udGVudHMpOworCQkJCWZyZWUoY29udGVudHMpOworCQkJCSptb2RlID0gMDsKKwkJCQlyZXR2YWwgPSBGT1VORDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisKKwkJCWlmIChyZW1haW5kZXIpCisJCQkJbGVuID0gZmlyc3Rfc2xhc2ggLSBuYW1lYnVmLmJ1ZjsKKwkJCWVsc2UKKwkJCQlsZW4gPSBuYW1lYnVmLmxlbjsKKworCQkJY29udGVudHNfc3RhcnQgPSBjb250ZW50czsKKworCQkJcGFyZW50ID0gJnBhcmVudHNbcGFyZW50c19uciAtIDFdOworCQkJaW5pdF90cmVlX2Rlc2MoJnQsIHBhcmVudC0+dHJlZSwgcGFyZW50LT5zaXplKTsKKwkJCXN0cmJ1Zl9zcGxpY2UoJm5hbWVidWYsIDAsIGxlbiwKKwkJCQkgICAgICBjb250ZW50c19zdGFydCwgbGlua19sZW4pOworCQkJaWYgKHJlbWFpbmRlcikKKwkJCQluYW1lYnVmLmJ1ZltsaW5rX2xlbl0gPSAnLyc7CisJCQlmcmVlKGNvbnRlbnRzKTsKKwkJfQorCX0KK2RvbmU6CisJZm9yIChpID0gMDsgaSA8IHBhcmVudHNfbnI7IGkrKykKKwkJZnJlZShwYXJlbnRzW2ldLnRyZWUpOworCWZyZWUocGFyZW50cyk7CisKKwlzdHJidWZfcmVsZWFzZSgmbmFtZWJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBtYXRjaF9lbnRyeShjb25zdCBzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqaXRlbSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICplbnRyeSwgaW50IHBhdGhsZW4sCisJCSAgICAgICBjb25zdCBjaGFyICptYXRjaCwgaW50IG1hdGNobGVuLAorCQkgICAgICAgZW51bSBpbnRlcmVzdGluZyAqbmV2ZXJfaW50ZXJlc3RpbmcpCit7CisJaW50IG0gPSAtMTsgLyogc2lnbmFscyB0aGF0IHdlIGhhdmVuJ3QgY2FsbGVkIHN0cm5jbXAoKSAqLworCisJaWYgKGl0ZW0tPm1hZ2ljICYgUEFUSFNQRUNfSUNBU0UpCisJCS8qCisJCSAqICJOZXZlciBpbnRlcmVzdGluZyIgdHJpY2sgcmVxdWlyZXMgZXhhY3QKKwkJICogbWF0Y2hpbmcuIFdlIGNvdWxkIGRvIHNvbWV0aGluZyBjbGV2ZXIgd2l0aCBpbmV4YWN0CisJCSAqIG1hdGNoaW5nLCBidXQgaXQncyB0cmlja2llciAoYW5kIG5vdCB0byBmb3JnZXQgdGhhdAorCQkgKiBzdHJjYXNlY21wIGlzIGxvY2FsZS1kZXBlbmRlbnQsIGF0IGxlYXN0IGluCisJCSAqIGdsaWJjKS4gSnVzdCBkaXNhYmxlIGl0IGZvciBub3cuIEl0IGNhbid0IGJlIHdvcnNlCisJCSAqIHRoYW4gdGhlIHdpbGRjYXJkJ3MgY29kZXBhdGggb2YgJ1tUdF1bSGldW0lzXVtTc10nCisJCSAqIHBhdHRlcm4uCisJCSAqLworCQkqbmV2ZXJfaW50ZXJlc3RpbmcgPSBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisJZWxzZSBpZiAoKm5ldmVyX2ludGVyZXN0aW5nICE9IGVudHJ5X25vdF9pbnRlcmVzdGluZykgeworCQkvKgorCQkgKiBXZSBoYXZlIG5vdCBzZWVuIGFueSBtYXRjaCB0aGF0IHNvcnRzIGxhdGVyCisJCSAqIHRoYW4gdGhlIGN1cnJlbnQgcGF0aC4KKwkJICovCisKKwkJLyoKKwkJICogRG9lcyBtYXRjaCBzb3J0IHN0cmljdGx5IGVhcmxpZXIgdGhhbiBwYXRoCisJCSAqIHdpdGggdGhlaXIgY29tbW9uIHBhcnRzPworCQkgKi8KKwkJbSA9IHN0cm5jbXAobWF0Y2gsIGVudHJ5LT5wYXRoLAorCQkJICAgIChtYXRjaGxlbiA8IHBhdGhsZW4pID8gbWF0Y2hsZW4gOiBwYXRobGVuKTsKKwkJaWYgKG0gPCAwKQorCQkJcmV0dXJuIDA7CisKKwkJLyoKKwkJICogSWYgd2UgY29tZSBoZXJlIGV2ZW4gb25jZSwgdGhhdCBtZWFucyB0aGVyZSBpcyBhdAorCQkgKiBsZWFzdCBvbmUgcGF0aHNwZWMgdGhhdCB3b3VsZCBzb3J0IGVxdWFsIHRvIG9yCisJCSAqIGxhdGVyIHRoYW4gdGhlIHBhdGggd2UgYXJlIGN1cnJlbnRseSBsb29raW5nIGF0LgorCQkgKiBJbiBvdGhlciB3b3JkcywgaWYgd2UgaGF2ZSBuZXZlciByZWFjaGVkIHRoaXMgcG9pbnQKKwkJICogYWZ0ZXIgaXRlcmF0aW5nIGFsbCBwYXRoc3BlY3MsIGl0IG1lYW5zIGFsbAorCQkgKiBwYXRoc3BlY3MgYXJlIGVpdGhlciBvdXRzaWRlIG9mIGJhc2UsIG9yIGluc2lkZSB0aGUKKwkJICogYmFzZSBidXQgc29ydHMgc3RyaWN0bHkgZWFybGllciB0aGFuIHRoZSBjdXJyZW50CisJCSAqIG9uZS4gIEluIGVpdGhlciBjYXNlLCB0aGV5IHdpbGwgbmV2ZXIgbWF0Y2ggdGhlCisJCSAqIHN1YnNlcXVlbnQgZW50cmllcy4gIEluIHN1Y2ggYSBjYXNlLCB3ZSBpbml0aWFsaXplZAorCQkgKiB0aGUgdmFyaWFibGUgdG8gLTEgYW5kIHRoYXQgaXMgd2hhdCB3aWxsIGJlCisJCSAqIHJldHVybmVkLCBhbGxvd2luZyB0aGUgY2FsbGVyIHRvIHRlcm1pbmF0ZSBlYXJseS4KKwkJICovCisJCSpuZXZlcl9pbnRlcmVzdGluZyA9IGVudHJ5X25vdF9pbnRlcmVzdGluZzsKKwl9CisKKwlpZiAocGF0aGxlbiA+IG1hdGNobGVuKQorCQlyZXR1cm4gMDsKKworCWlmIChtYXRjaGxlbiA+IHBhdGhsZW4pIHsKKwkJaWYgKG1hdGNoW3BhdGhsZW5dICE9ICcvJykKKwkJCXJldHVybiAwOworCQlpZiAoIVNfSVNESVIoZW50cnktPm1vZGUpICYmICFTX0lTR0lUTElOSyhlbnRyeS0+bW9kZSkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobSA9PSAtMSkKKwkJLyoKKwkJICogd2UgY2hlYXRlZCBhbmQgZGlkIG5vdCBkbyBzdHJuY21wKCksIHNvIHdlIGRvCisJCSAqIHRoYXQgaGVyZS4KKwkJICovCisJCW0gPSBwc19zdHJuY21wKGl0ZW0sIG1hdGNoLCBlbnRyeS0+cGF0aCwgcGF0aGxlbik7CisKKwkvKgorCSAqIElmIGNvbW1vbiBwYXJ0IG1hdGNoZWQgZWFybGllciB0aGVuIGl0IGlzIGEgaGl0LAorCSAqIGJlY2F1c2Ugd2UgcmVqZWN0ZWQgdGhlIGNhc2Ugd2hlcmUgcGF0aCBpcyBub3QgYQorCSAqIGxlYWRpbmcgZGlyZWN0b3J5IGFuZCBpcyBzaG9ydGVyIHRoYW4gbWF0Y2guCisJICovCisJaWYgKCFtKQorCQkvKgorCQkgKiBtYXRjaF9lbnRyeSBkb2VzIG5vdCBjaGVjayBpZiB0aGUgcHJlZml4IHBhcnQgaXMKKwkJICogbWF0Y2hlZCBjYXNlLXNlbnNpdGl2ZWx5LiBJZiB0aGUgZW50cnkgaXMgYQorCQkgKiBkaXJlY3RvcnkgYW5kIHBhcnQgb2YgcHJlZml4LCBpdCdsbCBiZSByZW1hdGNoZWQKKwkJICogZXZlbnR1YWxseSBieSBiYXNlY21wIHdpdGggc3BlY2lhbCB0cmVhdG1lbnQgZm9yCisJCSAqIHRoZSBwcmVmaXguCisJCSAqLworCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKiA6KGljYXNlKS1hd2FyZSBzdHJpbmcgY29tcGFyZSAqLworc3RhdGljIGludCBiYXNlY21wKGNvbnN0IHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtLAorCQkgICBjb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICptYXRjaCwgaW50IGxlbikKK3sKKwlpZiAoaXRlbS0+bWFnaWMgJiBQQVRIU1BFQ19JQ0FTRSkgeworCQlpbnQgcmV0LCBuID0gbGVuID4gaXRlbS0+cHJlZml4ID8gaXRlbS0+cHJlZml4IDogbGVuOworCQlyZXQgPSBzdHJuY21wKGJhc2UsIG1hdGNoLCBuKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWJhc2UgKz0gbjsKKwkJbWF0Y2ggKz0gbjsKKwkJbGVuIC09IG47CisJfQorCXJldHVybiBwc19zdHJuY21wKGl0ZW0sIGJhc2UsIG1hdGNoLCBsZW4pOworfQorCitzdGF0aWMgaW50IG1hdGNoX2Rpcl9wcmVmaXgoY29uc3Qgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0sCisJCQkgICAgY29uc3QgY2hhciAqYmFzZSwKKwkJCSAgICBjb25zdCBjaGFyICptYXRjaCwgaW50IG1hdGNobGVuKQoreworCWlmIChiYXNlY21wKGl0ZW0sIGJhc2UsIG1hdGNoLCBtYXRjaGxlbikpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB0aGUgYmFzZSBpcyBhIHN1YmRpcmVjdG9yeSBvZiBhIHBhdGggd2hpY2gKKwkgKiB3YXMgc3BlY2lmaWVkLCBhbGwgb2YgdGhlbSBhcmUgaW50ZXJlc3RpbmcuCisJICovCisJaWYgKCFtYXRjaGxlbiB8fAorCSAgICBiYXNlW21hdGNobGVuXSA9PSAnLycgfHwKKwkgICAgbWF0Y2hbbWF0Y2hsZW4gLSAxXSA9PSAnLycpCisJCXJldHVybiAxOworCisJLyogSnVzdCBhIHJhbmRvbSBwcmVmaXggbWF0Y2ggKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBlcmZvcm0gbWF0Y2hpbmcgb24gdGhlIGxlYWRpbmcgbm9uLXdpbGRjYXJkIHBhcnQgb2YKKyAqIHBhdGhzcGVjLiBpdGVtLT5ub3dpbGRjYXJkX2xlbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiBSZXR1cm4KKyAqIG5vbi16ZXJvIGlmIGJhc2UgaXMgbWF0Y2hlZC4KKyAqLworc3RhdGljIGludCBtYXRjaF93aWxkY2FyZF9iYXNlKGNvbnN0IHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkJICAgICAgIGludCAqbWF0Y2hlZCkKK3sKKwljb25zdCBjaGFyICptYXRjaCA9IGl0ZW0tPm1hdGNoOworCS8qIHRoZSB3aWxkY2FyZCBwYXJ0IGlzIG5vdCBjb25zaWRlcmVkIGluIHRoaXMgZnVuY3Rpb24gKi8KKwlpbnQgbWF0Y2hsZW4gPSBpdGVtLT5ub3dpbGRjYXJkX2xlbjsKKworCWlmIChiYXNlbGVuKSB7CisJCWludCBkaXJsZW47CisJCS8qCisJCSAqIFJldHVybiBlYXJseSBpZiBiYXNlIGlzIGxvbmdlciB0aGFuIHRoZQorCQkgKiBub24td2lsZGNhcmQgcGFydCBidXQgaXQgZG9lcyBub3QgbWF0Y2guCisJCSAqLworCQlpZiAoYmFzZWxlbiA+PSBtYXRjaGxlbikgeworCQkJKm1hdGNoZWQgPSBtYXRjaGxlbjsKKwkJCXJldHVybiAhYmFzZWNtcChpdGVtLCBiYXNlLCBtYXRjaCwgbWF0Y2hsZW4pOworCQl9CisKKwkJZGlybGVuID0gbWF0Y2hsZW47CisJCXdoaWxlIChkaXJsZW4gJiYgbWF0Y2hbZGlybGVuIC0gMV0gIT0gJy8nKQorCQkJZGlybGVuLS07CisKKwkJLyoKKwkJICogUmV0dXJuIGVhcmx5IGlmIGJhc2UgaXMgc2hvcnRlciB0aGFuIHRoZQorCQkgKiBub24td2lsZGNhcmQgcGFydCBidXQgaXQgZG9lcyBub3QgbWF0Y2guIE5vdGUgdGhhdAorCQkgKiBiYXNlIGVuZHMgd2l0aCAnLycgc28gd2UgYXJlIHN1cmUgaXQgcmVhbGx5IG1hdGNoZXMKKwkJICogZGlyZWN0b3J5CisJCSAqLworCQlpZiAoYmFzZWNtcChpdGVtLCBiYXNlLCBtYXRjaCwgYmFzZWxlbikpCisJCQlyZXR1cm4gMDsKKwkJKm1hdGNoZWQgPSBiYXNlbGVuOworCX0gZWxzZQorCQkqbWF0Y2hlZCA9IDA7CisJLyoKKwkgKiB3ZSBjb3VsZCBoYXZlIGNoZWNrZWQgZW50cnkgYWdhaW5zdCB0aGUgbm9uLXdpbGRjYXJkIHBhcnQKKwkgKiB0aGF0IGlzIG5vdCBpbiBiYXNlIGFuZCBkb2VzIHNpbWlsYXIgbmV2ZXJfaW50ZXJlc3RpbmcKKwkgKiBvcHRpbWl6YXRpb24gYXMgaW4gbWF0Y2hfZW50cnkuIEZvciBub3cganVzdCBiZSBoYXBweSB3aXRoCisJICogYmFzZSBjb21wYXJpc29uLgorCSAqLworCXJldHVybiBlbnRyeV9pbnRlcmVzdGluZzsKK30KKworLyoKKyAqIElzIGEgdHJlZSBlbnRyeSBpbnRlcmVzdGluZyBnaXZlbiB0aGUgcGF0aHNwZWMgd2UgaGF2ZT8KKyAqCisgKiBQcmUtY29uZGl0aW9uOiBlaXRoZXIgYmFzZWxlbiA9PSBiYXNlX29mZnNldCAoaS5lLiBlbXB0eSBwYXRoKQorICogb3IgYmFzZVtiYXNlbGVuLTFdID09ICcvJyAoaS5lLiB3aXRoIHRyYWlsaW5nIHNsYXNoKS4KKyAqLworc3RhdGljIGVudW0gaW50ZXJlc3RpbmcgZG9fbWF0Y2goc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJIGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICplbnRyeSwKKwkJCQkgc3RydWN0IHN0cmJ1ZiAqYmFzZSwgaW50IGJhc2Vfb2Zmc2V0LAorCQkJCSBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLAorCQkJCSBpbnQgZXhjbHVkZSkKK3sKKwlpbnQgaTsKKwlpbnQgcGF0aGxlbiwgYmFzZWxlbiA9IGJhc2UtPmxlbiAtIGJhc2Vfb2Zmc2V0OworCWVudW0gaW50ZXJlc3RpbmcgbmV2ZXJfaW50ZXJlc3RpbmcgPSBwcy0+aGFzX3dpbGRjYXJkID8KKwkJZW50cnlfbm90X2ludGVyZXN0aW5nIDogYWxsX2VudHJpZXNfbm90X2ludGVyZXN0aW5nOworCisJR1VBUkRfUEFUSFNQRUMocHMsCisJCSAgICAgICBQQVRIU1BFQ19GUk9NVE9QIHwKKwkJICAgICAgIFBBVEhTUEVDX01BWERFUFRIIHwKKwkJICAgICAgIFBBVEhTUEVDX0xJVEVSQUwgfAorCQkgICAgICAgUEFUSFNQRUNfR0xPQiB8CisJCSAgICAgICBQQVRIU1BFQ19JQ0FTRSB8CisJCSAgICAgICBQQVRIU1BFQ19FWENMVURFIHwKKwkJICAgICAgIFBBVEhTUEVDX0FUVFIpOworCisJaWYgKCFwcy0+bnIpIHsKKwkJaWYgKCFwcy0+cmVjdXJzaXZlIHx8CisJCSAgICAhKHBzLT5tYWdpYyAmIFBBVEhTUEVDX01BWERFUFRIKSB8fAorCQkgICAgcHMtPm1heF9kZXB0aCA9PSAtMSkKKwkJCXJldHVybiBhbGxfZW50cmllc19pbnRlcmVzdGluZzsKKwkJcmV0dXJuIHdpdGhpbl9kZXB0aChiYXNlLT5idWYgKyBiYXNlX29mZnNldCwgYmFzZWxlbiwKKwkJCQkgICAgISFTX0lTRElSKGVudHJ5LT5tb2RlKSwKKwkJCQkgICAgcHMtPm1heF9kZXB0aCkgPworCQkJZW50cnlfaW50ZXJlc3RpbmcgOiBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisJfQorCisJcGF0aGxlbiA9IHRyZWVfZW50cnlfbGVuKGVudHJ5KTsKKworCWZvciAoaSA9IHBzLT5uciAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWNvbnN0IHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtID0gcHMtPml0ZW1zK2k7CisJCWNvbnN0IGNoYXIgKm1hdGNoID0gaXRlbS0+bWF0Y2g7CisJCWNvbnN0IGNoYXIgKmJhc2Vfc3RyID0gYmFzZS0+YnVmICsgYmFzZV9vZmZzZXQ7CisJCWludCBtYXRjaGxlbiA9IGl0ZW0tPmxlbiwgbWF0Y2hlZCA9IDA7CisKKwkJaWYgKCghZXhjbHVkZSAmJiAgIGl0ZW0tPm1hZ2ljICYgUEFUSFNQRUNfRVhDTFVERSkgfHwKKwkJICAgICggZXhjbHVkZSAmJiAhKGl0ZW0tPm1hZ2ljICYgUEFUSFNQRUNfRVhDTFVERSkpKQorCQkJY29udGludWU7CisKKwkJaWYgKGJhc2VsZW4gPj0gbWF0Y2hsZW4pIHsKKwkJCS8qIElmIGl0IGRvZXNuJ3QgbWF0Y2gsIG1vdmUgYWxvbmcuLi4gKi8KKwkJCWlmICghbWF0Y2hfZGlyX3ByZWZpeChpdGVtLCBiYXNlX3N0ciwgbWF0Y2gsIG1hdGNobGVuKSkKKwkJCQlnb3RvIG1hdGNoX3dpbGRjYXJkczsKKworCQkJaWYgKCFwcy0+cmVjdXJzaXZlIHx8CisJCQkgICAgIShwcy0+bWFnaWMgJiBQQVRIU1BFQ19NQVhERVBUSCkgfHwKKwkJCSAgICBwcy0+bWF4X2RlcHRoID09IC0xKSB7CisJCQkJaWYgKCFpdGVtLT5hdHRyX21hdGNoX25yKQorCQkJCQlyZXR1cm4gYWxsX2VudHJpZXNfaW50ZXJlc3Rpbmc7CisJCQkJZWxzZQorCQkJCQlnb3RvIGludGVyZXN0aW5nOworCQkJfQorCisJCQlpZiAod2l0aGluX2RlcHRoKGJhc2Vfc3RyICsgbWF0Y2hsZW4gKyAxLAorCQkJCQkgYmFzZWxlbiAtIG1hdGNobGVuIC0gMSwKKwkJCQkJICEhU19JU0RJUihlbnRyeS0+bW9kZSksCisJCQkJCSBwcy0+bWF4X2RlcHRoKSkKKwkJCQlnb3RvIGludGVyZXN0aW5nOworCQkJZWxzZQorCQkJCXJldHVybiBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisJCX0KKworCQkvKiBFaXRoZXIgdGhlcmUgbXVzdCBiZSBubyBiYXNlLCBvciB0aGUgYmFzZSBtdXN0IG1hdGNoLiAqLworCQlpZiAoYmFzZWxlbiA9PSAwIHx8ICFiYXNlY21wKGl0ZW0sIGJhc2Vfc3RyLCBtYXRjaCwgYmFzZWxlbikpIHsKKwkJCWlmIChtYXRjaF9lbnRyeShpdGVtLCBlbnRyeSwgcGF0aGxlbiwKKwkJCQkJbWF0Y2ggKyBiYXNlbGVuLCBtYXRjaGxlbiAtIGJhc2VsZW4sCisJCQkJCSZuZXZlcl9pbnRlcmVzdGluZykpCisJCQkJZ290byBpbnRlcmVzdGluZzsKKworCQkJaWYgKGl0ZW0tPm5vd2lsZGNhcmRfbGVuIDwgaXRlbS0+bGVuKSB7CisJCQkJaWYgKCFnaXRfZm5tYXRjaChpdGVtLCBtYXRjaCArIGJhc2VsZW4sIGVudHJ5LT5wYXRoLAorCQkJCQkJIGl0ZW0tPm5vd2lsZGNhcmRfbGVuIC0gYmFzZWxlbikpCisJCQkJCWdvdG8gaW50ZXJlc3Rpbmc7CisKKwkJCQkvKgorCQkJCSAqIE1hdGNoIGFsbCBkaXJlY3Rvcmllcy4gV2UnbGwgdHJ5IHRvCisJCQkJICogbWF0Y2ggZmlsZXMgbGF0ZXIgb24uCisJCQkJICovCisJCQkJaWYgKHBzLT5yZWN1cnNpdmUgJiYgU19JU0RJUihlbnRyeS0+bW9kZSkpCisJCQkJCXJldHVybiBlbnRyeV9pbnRlcmVzdGluZzsKKworCQkJCS8qCisJCQkJICogV2hlbiBtYXRjaGluZyBhZ2FpbnN0IHN1Ym1vZHVsZXMgd2l0aAorCQkJCSAqIHdpbGRjYXJkIGNoYXJhY3RlcnMsIGVuc3VyZSB0aGF0IHRoZSBlbnRyeQorCQkJCSAqIGF0IGxlYXN0IG1hdGNoZXMgdXAgdG8gdGhlIGZpcnN0IHdpbGQKKwkJCQkgKiBjaGFyYWN0ZXIuICBNb3JlIGFjY3VyYXRlIG1hdGNoaW5nIGNhbiB0aGVuCisJCQkJICogYmUgcGVyZm9ybWVkIGluIHRoZSBzdWJtb2R1bGUgaXRzZWxmLgorCQkJCSAqLworCQkJCWlmIChwcy0+cmVjdXJzZV9zdWJtb2R1bGVzICYmCisJCQkJICAgIFNfSVNHSVRMSU5LKGVudHJ5LT5tb2RlKSAmJgorCQkJCSAgICAhcHNfc3RybmNtcChpdGVtLCBtYXRjaCArIGJhc2VsZW4sCisJCQkJCQllbnRyeS0+cGF0aCwKKwkJCQkJCWl0ZW0tPm5vd2lsZGNhcmRfbGVuIC0gYmFzZWxlbikpCisJCQkJCWdvdG8gaW50ZXJlc3Rpbmc7CisJCQl9CisKKwkJCWNvbnRpbnVlOworCQl9CisKK21hdGNoX3dpbGRjYXJkczoKKwkJaWYgKGl0ZW0tPm5vd2lsZGNhcmRfbGVuID09IGl0ZW0tPmxlbikKKwkJCWNvbnRpbnVlOworCisJCWlmIChpdGVtLT5ub3dpbGRjYXJkX2xlbiAmJgorCQkgICAgIW1hdGNoX3dpbGRjYXJkX2Jhc2UoaXRlbSwgYmFzZV9zdHIsIGJhc2VsZW4sICZtYXRjaGVkKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIENvbmNhdGVuYXRlIGJhc2UgYW5kIGVudHJ5LT5wYXRoIGludG8gb25lIGFuZCBkbworCQkgKiBmbm1hdGNoKCkgb24gaXQuCisJCSAqCisJCSAqIFdoaWxlIHdlIGNvdWxkIGF2b2lkIGNvbmNhdGVuYXRpb24gaW4gY2VydGFpbiBjYXNlcworCQkgKiBbMV0sIHdoaWNoIHNhdmVzIGEgbWVtY3B5IGFuZCBwb3RlbnRpYWxseSBhCisJCSAqIHJlYWxsb2MsIGl0IHR1cm5zIG91dCBub3Qgd29ydGggaXQuIE1lYXN1cmVtZW50IG9uCisJCSAqIGxpbnV4LTIuNiBkb2VzIG5vdCBzaG93IGFueSBjbGVhciBpbXByb3ZlbWVudHMsCisJCSAqIHBhcnRseSBiZWNhdXNlIG9mIHRoZSBub3dpbGRjYXJkX2xlbiBvcHRpbWl6YXRpb24KKwkJICogaW4gZ2l0X2ZubWF0Y2goKS4gQXZvaWQgbWljcm8tb3B0aW1pemF0aW9ucyBoZXJlLgorCQkgKgorCQkgKiBbMV0gaWYgbWF0Y2hfd2lsZGNhcmRfYmFzZSgpIHNheXMgdGhlIGJhc2UKKwkJICogZGlyZWN0b3J5IGlzIGFscmVhZHkgbWF0Y2hlZCwgd2Ugb25seSBuZWVkIHRvIG1hdGNoCisJCSAqIHRoZSByZXN0LCB3aGljaCBpcyBzaG9ydGVyIHNvIF9pbiB0aGVvcnlfIGZhc3Rlci4KKwkJICovCisKKwkJc3RyYnVmX2FkZChiYXNlLCBlbnRyeS0+cGF0aCwgcGF0aGxlbik7CisKKwkJaWYgKCFnaXRfZm5tYXRjaChpdGVtLCBtYXRjaCwgYmFzZS0+YnVmICsgYmFzZV9vZmZzZXQsCisJCQkJIGl0ZW0tPm5vd2lsZGNhcmRfbGVuKSkgeworCQkJc3RyYnVmX3NldGxlbihiYXNlLCBiYXNlX29mZnNldCArIGJhc2VsZW4pOworCQkJZ290byBpbnRlcmVzdGluZzsKKwkJfQorCisJCS8qCisJCSAqIFdoZW4gbWF0Y2hpbmcgYWdhaW5zdCBzdWJtb2R1bGVzIHdpdGgKKwkJICogd2lsZGNhcmQgY2hhcmFjdGVycywgZW5zdXJlIHRoYXQgdGhlIGVudHJ5CisJCSAqIGF0IGxlYXN0IG1hdGNoZXMgdXAgdG8gdGhlIGZpcnN0IHdpbGQKKwkJICogY2hhcmFjdGVyLiAgTW9yZSBhY2N1cmF0ZSBtYXRjaGluZyBjYW4gdGhlbgorCQkgKiBiZSBwZXJmb3JtZWQgaW4gdGhlIHN1Ym1vZHVsZSBpdHNlbGYuCisJCSAqLworCQlpZiAocHMtPnJlY3Vyc2Vfc3VibW9kdWxlcyAmJiBTX0lTR0lUTElOSyhlbnRyeS0+bW9kZSkgJiYKKwkJICAgICFwc19zdHJuY21wKGl0ZW0sIG1hdGNoLCBiYXNlLT5idWYgKyBiYXNlX29mZnNldCwKKwkJCQlpdGVtLT5ub3dpbGRjYXJkX2xlbikpIHsKKwkJCXN0cmJ1Zl9zZXRsZW4oYmFzZSwgYmFzZV9vZmZzZXQgKyBiYXNlbGVuKTsKKwkJCWdvdG8gaW50ZXJlc3Rpbmc7CisJCX0KKworCQlzdHJidWZfc2V0bGVuKGJhc2UsIGJhc2Vfb2Zmc2V0ICsgYmFzZWxlbik7CisKKwkJLyoKKwkJICogTWF0Y2ggYWxsIGRpcmVjdG9yaWVzLiBXZSdsbCB0cnkgdG8gbWF0Y2ggZmlsZXMKKwkJICogbGF0ZXIgb24uCisJCSAqIG1heF9kZXB0aCBpcyBpZ25vcmVkIGJ1dCB3ZSBtYXkgY29uc2lkZXIgc3VwcG9ydCBpdAorCQkgKiBpbiBmdXR1cmUsIHNlZQorCQkgKiBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvN3ZteG81bDJnNC5mc2ZAYWx0ZXIuc2lhbWVzZS5keW5kbnMub3JnLworCQkgKi8KKwkJaWYgKHBzLT5yZWN1cnNpdmUgJiYgU19JU0RJUihlbnRyeS0+bW9kZSkpCisJCQlyZXR1cm4gZW50cnlfaW50ZXJlc3Rpbmc7CisJCWNvbnRpbnVlOworaW50ZXJlc3Rpbmc6CisJCWlmIChpdGVtLT5hdHRyX21hdGNoX25yKSB7CisJCQlpbnQgcmV0OworCisJCQkvKgorCQkJICogTXVzdCBub3QgcmV0dXJuIGFsbF9lbnRyaWVzX25vdF9pbnRlcmVzdGluZworCQkJICogcHJlbWF0dXJlbHkuIFdlIGRvIG5vdCBrbm93IGlmIGFsbCBlbnRyaWVzIGRvIG5vdAorCQkJICogbWF0Y2ggc29tZSBhdHRyaWJ1dGVzIHdpdGggY3VycmVudCBhdHRyIEFQSS4KKwkJCSAqLworCQkJbmV2ZXJfaW50ZXJlc3RpbmcgPSBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisKKwkJCS8qCisJCQkgKiBDb25zaWRlciBhbGwgZGlyZWN0b3JpZXMgaW50ZXJlc3RpbmcgKGJlY2F1c2Ugc29tZQorCQkJICogb2YgdGhvc2UgZmlsZXMgaW5zaWRlIG1heSBtYXRjaCBzb21lIGF0dHJpYnV0ZXMKKwkJCSAqIGV2ZW4gdGhvdWdoIHRoZSBwYXJlbnQgZGlyIGRvZXMgbm90KQorCQkJICoKKwkJCSAqIEZJWE1FOiBhdHRyaWJ1dGVzIF9jYW5fIG1hdGNoIGRpcmVjdG9yaWVzIGFuZCB3ZQorCQkJICogY2FuIHByb2JhYmx5IHJldHVybiBhbGxfZW50cmllc19pbnRlcmVzdGluZyBvcgorCQkJICogYWxsX2VudHJpZXNfbm90X2ludGVyZXN0aW5nIGhlcmUgaWYgbWF0Y2hlZC4KKwkJCSAqLworCQkJaWYgKFNfSVNESVIoZW50cnktPm1vZGUpKQorCQkJCXJldHVybiBlbnRyeV9pbnRlcmVzdGluZzsKKworCQkJc3RyYnVmX2FkZChiYXNlLCBlbnRyeS0+cGF0aCwgcGF0aGxlbik7CisJCQlyZXQgPSBtYXRjaF9wYXRoc3BlY19hdHRycyhpc3RhdGUsIGJhc2UtPmJ1ZiArIGJhc2Vfb2Zmc2V0LAorCQkJCQkJICAgYmFzZS0+bGVuIC0gYmFzZV9vZmZzZXQsIGl0ZW0pOworCQkJc3RyYnVmX3NldGxlbihiYXNlLCBiYXNlX29mZnNldCArIGJhc2VsZW4pOworCQkJaWYgKCFyZXQpCisJCQkJY29udGludWU7CisJCX0KKwkJcmV0dXJuIGVudHJ5X2ludGVyZXN0aW5nOworCX0KKwlyZXR1cm4gbmV2ZXJfaW50ZXJlc3Rpbmc7IC8qIE5vIG1hdGNoZXMgKi8KK30KKworLyoKKyAqIElzIGEgdHJlZSBlbnRyeSBpbnRlcmVzdGluZyBnaXZlbiB0aGUgcGF0aHNwZWMgd2UgaGF2ZT8KKyAqCisgKiBQcmUtY29uZGl0aW9uOiBlaXRoZXIgYmFzZWxlbiA9PSBiYXNlX29mZnNldCAoaS5lLiBlbXB0eSBwYXRoKQorICogb3IgYmFzZVtiYXNlbGVuLTFdID09ICcvJyAoaS5lLiB3aXRoIHRyYWlsaW5nIHNsYXNoKS4KKyAqLworZW51bSBpbnRlcmVzdGluZyB0cmVlX2VudHJ5X2ludGVyZXN0aW5nKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQljb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50cnksCisJCQkJCXN0cnVjdCBzdHJidWYgKmJhc2UsIGludCBiYXNlX29mZnNldCwKKwkJCQkJY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcykKK3sKKwllbnVtIGludGVyZXN0aW5nIHBvc2l0aXZlLCBuZWdhdGl2ZTsKKwlwb3NpdGl2ZSA9IGRvX21hdGNoKGlzdGF0ZSwgZW50cnksIGJhc2UsIGJhc2Vfb2Zmc2V0LCBwcywgMCk7CisKKwkvKgorCSAqIGNhc2UgfCBlbnRyeSB8IHBvc2l0aXZlIHwgbmVnYXRpdmUgfCByZXN1bHQKKwkgKiAtLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tCisJICogICAxICB8ICBmaWxlIHwgICAtMSAgICAgfCAgLTEuLjIgICB8ICAtMQorCSAqICAgMiAgfCAgZmlsZSB8ICAgIDAgICAgIHwgIC0xLi4yICAgfCAgIDAKKwkgKiAgIDMgIHwgIGZpbGUgfCAgICAxICAgICB8ICAgLTEgICAgIHwgICAxCisJICogICA0ICB8ICBmaWxlIHwgICAgMSAgICAgfCAgICAwICAgICB8ICAgMQorCSAqICAgNSAgfCAgZmlsZSB8ICAgIDEgICAgIHwgICAgMSAgICAgfCAgIDAKKwkgKiAgIDYgIHwgIGZpbGUgfCAgICAxICAgICB8ICAgIDIgICAgIHwgICAwCisJICogICA3ICB8ICBmaWxlIHwgICAgMiAgICAgfCAgIC0xICAgICB8ICAgMgorCSAqICAgOCAgfCAgZmlsZSB8ICAgIDIgICAgIHwgICAgMCAgICAgfCAgIDEKKwkgKiAgIDkgIHwgIGZpbGUgfCAgICAyICAgICB8ICAgIDEgICAgIHwgICAwCisJICogIDEwICB8ICBmaWxlIHwgICAgMiAgICAgfCAgICAyICAgICB8ICAtMQorCSAqIC0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0KKwkgKiAgMTEgIHwgIGRpciAgfCAgIC0xICAgICB8ICAtMS4uMiAgIHwgIC0xCisJICogIDEyICB8ICBkaXIgIHwgICAgMCAgICAgfCAgLTEuLjIgICB8ICAgMAorCSAqICAxMyAgfCAgZGlyICB8ICAgIDEgICAgIHwgICAtMSAgICAgfCAgIDEKKwkgKiAgMTQgIHwgIGRpciAgfCAgICAxICAgICB8ICAgIDAgICAgIHwgICAxCisJICogIDE1ICB8ICBkaXIgIHwgICAgMSAgICAgfCAgICAxICAgICB8ICAgMSAoKikKKwkgKiAgMTYgIHwgIGRpciAgfCAgICAxICAgICB8ICAgIDIgICAgIHwgICAwCisJICogIDE3ICB8ICBkaXIgIHwgICAgMiAgICAgfCAgIC0xICAgICB8ICAgMgorCSAqICAxOCAgfCAgZGlyICB8ICAgIDIgICAgIHwgICAgMCAgICAgfCAgIDEKKwkgKiAgMTkgIHwgIGRpciAgfCAgICAyICAgICB8ICAgIDEgICAgIHwgICAxICgqKQorCSAqICAyMCAgfCAgZGlyICB8ICAgIDIgICAgIHwgICAgMiAgICAgfCAgLTEKKwkgKgorCSAqICgqKSBBbiBleGNsdWRlIHBhdHRlcm4gaW50ZXJlc3RlZCBpbiBhIGRpcmVjdG9yeSBkb2VzIG5vdAorCSAqIG5lY2Vzc2FyaWx5IG1lYW4gaXQgd2lsbCBleGNsdWRlIGFsbCBvZiB0aGUgZGlyZWN0b3J5LiBJbgorCSAqIHdpbGRjYXJkIGNhc2UsIGl0IGNhbid0IGRlY2lkZSB1bnRpbCBsb29raW5nIGF0IGluZGl2aWR1YWwKKwkgKiBmaWxlcyBpbnNpZGUuIFNvIGRvbid0IHdyaXRlIHN1Y2ggZGlyZWN0b3JpZXMgb2ZmIHlldC4KKwkgKi8KKworCWlmICghKHBzLT5tYWdpYyAmIFBBVEhTUEVDX0VYQ0xVREUpIHx8CisJICAgIHBvc2l0aXZlIDw9IGVudHJ5X25vdF9pbnRlcmVzdGluZykgLyogIzEsICMyLCAjMTEsICMxMiAqLworCQlyZXR1cm4gcG9zaXRpdmU7CisKKwluZWdhdGl2ZSA9IGRvX21hdGNoKGlzdGF0ZSwgZW50cnksIGJhc2UsIGJhc2Vfb2Zmc2V0LCBwcywgMSk7CisKKwkvKiAjOCwgIzE4ICovCisJaWYgKHBvc2l0aXZlID09IGFsbF9lbnRyaWVzX2ludGVyZXN0aW5nICYmCisJICAgIG5lZ2F0aXZlID09IGVudHJ5X25vdF9pbnRlcmVzdGluZykKKwkJcmV0dXJuIGVudHJ5X2ludGVyZXN0aW5nOworCisJLyogIzMsICM0LCAjNywgIzEzLCAjMTQsICMxNyAqLworCWlmIChuZWdhdGl2ZSA8PSBlbnRyeV9ub3RfaW50ZXJlc3RpbmcpCisJCXJldHVybiBwb3NpdGl2ZTsKKworCS8qICMxNSwgIzE5ICovCisJaWYgKFNfSVNESVIoZW50cnktPm1vZGUpICYmCisJICAgIHBvc2l0aXZlID49IGVudHJ5X2ludGVyZXN0aW5nICYmCisJICAgIG5lZ2F0aXZlID09IGVudHJ5X2ludGVyZXN0aW5nKQorCQlyZXR1cm4gZW50cnlfaW50ZXJlc3Rpbmc7CisKKwlpZiAoKHBvc2l0aXZlID09IGVudHJ5X2ludGVyZXN0aW5nICYmCisJICAgICBuZWdhdGl2ZSA+PSBlbnRyeV9pbnRlcmVzdGluZykgfHwgLyogIzUsICM2LCAjMTYgKi8KKwkgICAgKHBvc2l0aXZlID09IGFsbF9lbnRyaWVzX2ludGVyZXN0aW5nICYmCisJICAgICBuZWdhdGl2ZSA9PSBlbnRyeV9pbnRlcmVzdGluZykpIC8qICM5ICovCisJCXJldHVybiBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisKKwlyZXR1cm4gYWxsX2VudHJpZXNfbm90X2ludGVyZXN0aW5nOyAvKiAjMTAsICMyMCAqLworfQpkaWZmIC0tZ2l0IGEvdHJlZS13YWxrLmggYi90cmVlLXdhbGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTA1ODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJlZS13YWxrLmgKQEAgLTAsMCArMSwyMjEgQEAKKyNpZm5kZWYgVFJFRV9XQUxLX0gKKyNkZWZpbmUgVFJFRV9XQUxLX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisKKyNkZWZpbmUgTUFYX1RSQVZFUlNFX1RSRUVTIDgKKworLyoqCisgKiBUaGUgdHJlZSB3YWxraW5nIEFQSSBpcyB1c2VkIHRvIHRyYXZlcnNlIGFuZCBpbnNwZWN0IHRyZWVzLgorICovCisKKy8qKgorICogQW4gZW50cnkgaW4gYSB0cmVlLiBFYWNoIGVudHJ5IGhhcyBhIHNoYTEgaWRlbnRpZmllciwgcGF0aG5hbWUsIGFuZCBtb2RlLgorICovCitzdHJ1Y3QgbmFtZV9lbnRyeSB7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY29uc3QgY2hhciAqcGF0aDsKKwlpbnQgcGF0aGxlbjsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKK307CisKKy8qKgorICogQSBzZW1pLW9wYXF1ZSBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIG1haW50YWluIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB3YWxrLgorICovCitzdHJ1Y3QgdHJlZV9kZXNjIHsKKwkvKgorCSAqIHBvaW50ZXIgaW50byB0aGUgbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0cmVlLiBJdCBhbHdheXMKKwkgKiBwb2ludHMgYXQgdGhlIGN1cnJlbnQgZW50cnkgYmVpbmcgdmlzaXRlZC4KKwkgKi8KKwljb25zdCB2b2lkICpidWZmZXI7CisKKwkvKiBwb2ludHMgdG8gdGhlIGN1cnJlbnQgZW50cnkgYmVpbmcgdmlzaXRlZC4gKi8KKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKworCS8qIGNvdW50cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gdGhlIGBidWZmZXJgLiAqLworCXVuc2lnbmVkIGludCBzaXplOworfTsKKworLyoqCisgKiBEZWNvZGUgdGhlIGVudHJ5IGN1cnJlbnRseSBiZWluZyB2aXNpdGVkICh0aGUgb25lIHBvaW50ZWQgdG8gYnkKKyAqIGB0cmVlX2Rlc2Mnc2AgYGVudHJ5YCBtZW1iZXIpIGFuZCByZXR1cm4gdGhlIHNoYTEgb2YgdGhlIGVudHJ5LiBUaGUKKyAqIGBwYXRocGAgYW5kIGBtb2RlcGAgYXJndW1lbnRzIGFyZSBzZXQgdG8gdGhlIGVudHJ5J3MgcGF0aG5hbWUgYW5kIG1vZGUKKyAqIHJlc3BlY3RpdmVseS4KKyAqLworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlX2VudHJ5X2V4dHJhY3Qoc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqKnBhdGhwLCB1bnNpZ25lZCBzaG9ydCAqbW9kZXApCit7CisJKnBhdGhwID0gZGVzYy0+ZW50cnkucGF0aDsKKwkqbW9kZXAgPSBkZXNjLT5lbnRyeS5tb2RlOworCXJldHVybiAmZGVzYy0+ZW50cnkub2lkOworfQorCisvKioKKyAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIGEgdHJlZSBlbnRyeSdzIHBhdGhuYW1lLiBUaGlzIHV0aWxpemVzIHRoZQorICogbWVtb3J5IHN0cnVjdHVyZSBvZiBhIHRyZWUgZW50cnkgdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIHVzaW5nIGEKKyAqIGdlbmVyaWMgc3RybGVuKCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRyZWVfZW50cnlfbGVuKGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICpuZSkKK3sKKwlyZXR1cm4gbmUtPnBhdGhsZW47Cit9CisKKy8qCisgKiBUaGUgX2dlbnRseSB2ZXJzaW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMgd2FybiBhbmQgcmV0dXJuIGZhbHNlIG9uIGEKKyAqIGNvcnJ1cHQgdHJlZSBlbnRyeSByYXRoZXIgdGhhbiBkeWluZywKKyAqLworCisvKioKKyAqIFdhbGsgdG8gdGhlIG5leHQgZW50cnkgaW4gYSB0cmVlLiBUaGlzIGlzIGNvbW1vbmx5IHVzZWQgaW4gY29uanVuY3Rpb24KKyAqIHdpdGggYHRyZWVfZW50cnlfZXh0cmFjdGAgdG8gaW5zcGVjdCB0aGUgY3VycmVudCBlbnRyeS4KKyAqLwordm9pZCB1cGRhdGVfdHJlZV9lbnRyeShzdHJ1Y3QgdHJlZV9kZXNjICopOworCitpbnQgdXBkYXRlX3RyZWVfZW50cnlfZ2VudGx5KHN0cnVjdCB0cmVlX2Rlc2MgKik7CisKKy8qKgorICogSW5pdGlhbGl6ZSBhIGB0cmVlX2Rlc2NgIGFuZCBkZWNvZGUgaXRzIGZpcnN0IGVudHJ5LiBUaGUgYnVmZmVyIGFuZAorICogc2l6ZSBwYXJhbWV0ZXJzIGFyZSBhc3N1bWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBidWZmZXIgYW5kIHNpemUKKyAqIG1lbWJlcnMgb2YgYHN0cnVjdCB0cmVlYC4KKyAqLwordm9pZCBpbml0X3RyZWVfZGVzYyhzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKK2ludCBpbml0X3RyZWVfZGVzY19nZW50bHkoc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpOworCisvKgorICogVmlzaXQgdGhlIG5leHQgZW50cnkgaW4gYSB0cmVlLiBSZXR1cm5zIDEgd2hlbiB0aGVyZSBhcmUgbW9yZSBlbnRyaWVzCisgKiBsZWZ0IHRvIHZpc2l0IGFuZCAwIHdoZW4gYWxsIGVudHJpZXMgaGF2ZSBiZWVuIHZpc2l0ZWQuIFRoaXMgaXMKKyAqIGNvbW1vbmx5IHVzZWQgaW4gdGhlIHRlc3Qgb2YgYSB3aGlsZSBsb29wLgorICovCitpbnQgdHJlZV9lbnRyeShzdHJ1Y3QgdHJlZV9kZXNjICosIHN0cnVjdCBuYW1lX2VudHJ5ICopOworCitpbnQgdHJlZV9lbnRyeV9nZW50bHkoc3RydWN0IHRyZWVfZGVzYyAqLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqKTsKKworLyoqCisgKiBJbml0aWFsaXplIGEgYHRyZWVfZGVzY2AgYW5kIGRlY29kZSBpdHMgZmlyc3QgZW50cnkgZ2l2ZW4gdGhlCisgKiBvYmplY3QgSUQgb2YgYSB0cmVlLiBSZXR1cm5zIHRoZSBgYnVmZmVyYCBtZW1iZXIgaWYgdGhlIGxhdHRlcgorICogaXMgYSB2YWxpZCB0cmVlIGlkZW50aWZpZXIgYW5kIE5VTEwgb3RoZXJ3aXNlLgorICovCit2b2lkICpmaWxsX3RyZWVfZGVzY3JpcHRvcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgIHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCitzdHJ1Y3QgdHJhdmVyc2VfaW5mbzsKK3R5cGVkZWYgaW50ICgqdHJhdmVyc2VfY2FsbGJhY2tfdCkoaW50IG4sIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBkaXJtYXNrLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50cnksIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICopOworCisvKioKKyAqIFRyYXZlcnNlIGBuYCBudW1iZXIgb2YgdHJlZXMgaW4gcGFyYWxsZWwuIFRoZSBgZm5gIGNhbGxiYWNrIG1lbWJlciBvZgorICogYHRyYXZlcnNlX2luZm9gIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIHRyZWUgZW50cnkuCisgKi8KK2ludCB0cmF2ZXJzZV90cmVlcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgaW50IG4sIHN0cnVjdCB0cmVlX2Rlc2MgKnQsIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKTsKKworZW51bSBnZXRfb2lkX3Jlc3VsdCBnZXRfdHJlZV9lbnRyeV9mb2xsb3dfc3ltbGlua3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBvYmplY3RfaWQgKnRyZWVfb2lkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHQsIHN0cnVjdCBzdHJidWYgKnJlc3VsdF9wYXRoLCB1bnNpZ25lZCBzaG9ydCAqbW9kZSk7CisKKy8qKgorICogQSBzdHJ1Y3R1cmUgdXNlZCB0byBtYWludGFpbiB0aGUgc3RhdGUgb2YgYSB0cmF2ZXJzYWwuCisgKi8KK3N0cnVjdCB0cmF2ZXJzZV9pbmZvIHsKKwljb25zdCBjaGFyICp0cmF2ZXJzZV9wYXRoOworCisJLyoKKwkgKiBwb2ludHMgdG8gdGhlIHRyYXZlcnNlX2luZm8gd2hpY2ggd2FzIHVzZWQgdG8gZGVzY2VuZCBpbnRvIHRoZQorCSAqIGN1cnJlbnQgdHJlZS4gSWYgdGhpcyBpcyB0aGUgdG9wLWxldmVsIHRyZWUgYHByZXZgIHdpbGwgcG9pbnQgdG8KKwkgKiBhIGR1bW15IHRyYXZlcnNlX2luZm8uCisJICovCisJc3RydWN0IHRyYXZlcnNlX2luZm8gKnByZXY7CisKKwkvKiBpcyB0aGUgZW50cnkgZm9yIHRoZSBjdXJyZW50IHRyZWUgKGlmIHRoZSB0cmVlIGlzIGEgc3VidHJlZSkuICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCXNpemVfdCBuYW1lbGVuOworCXVuc2lnbmVkIG1vZGU7CisKKwkvKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBmdWxsIHBhdGggZm9yIHRoZSBjdXJyZW50IHRyZWUuICovCisJc2l6ZV90IHBhdGhsZW47CisKKwlzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjOworCisJLyogY2FuIGJlIHVzZWQgYnkgY2FsbGJhY2tzIHRvIG1haW50YWluIGRpcmVjdG9yeS1maWxlIGNvbmZsaWN0cy4gKi8KKwl1bnNpZ25lZCBsb25nIGRmX2NvbmZsaWN0czsKKworCS8qIGEgY2FsbGJhY2sgY2FsbGVkIGZvciBlYWNoIGVudHJ5IGluIHRoZSB0cmVlLgorCSAqCisJICogVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHRyYXZlcnNlIGNhbGxiYWNrIGFyZSBhcyBmb2xsb3dzOgorCSAqCisJICogLSBgbmAgY291bnRzIHRoZSBudW1iZXIgb2YgdHJlZXMgYmVpbmcgdHJhdmVyc2VkLgorCSAqCisJICogLSBgbWFza2AgaGFzIGl0cyBudGggYml0IHNldCBpZiBzb21ldGhpbmcgZXhpc3RzIGluIHRoZSBudGggZW50cnkuCisJICoKKwkgKiAtIGBkaXJtYXNrYCBoYXMgaXRzIG50aCBiaXQgc2V0IGlmIHRoZSBudGggdHJlZSdzIGVudHJ5IGlzIGEgZGlyZWN0b3J5LgorCSAqCisJICogLSBgZW50cnlgIGlzIGFuIGFycmF5IG9mIHNpemUgYG5gIHdoZXJlIHRoZSBudGggZW50cnkgaXMgZnJvbSB0aGUgbnRoIHRyZWUuCisJICoKKwkgKiAtIGBpbmZvYCBtYWludGFpbnMgdGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwuCisJICoKKwkgKiBSZXR1cm5pbmcgYSBuZWdhdGl2ZSB2YWx1ZSB3aWxsIHRlcm1pbmF0ZSB0aGUgdHJhdmVyc2FsLiBPdGhlcndpc2UgdGhlCisJICogcmV0dXJuIHZhbHVlIGlzIHRyZWF0ZWQgYXMgYW4gdXBkYXRlIG1hc2suIElmIHRoZSBudGggYml0IGlzIHNldCB0aGUgbnRoIHRyZWUKKwkgKiB3aWxsIGJlIHVwZGF0ZWQgYW5kIGlmIHRoZSBiaXQgaXMgbm90IHNldCB0aGUgbnRoIHRyZWUgZW50cnkgd2lsbCBiZSB0aGUKKwkgKiBzYW1lIGluIHRoZSBuZXh0IGNhbGxiYWNrIGludm9jYXRpb24uCisJICovCisJdHJhdmVyc2VfY2FsbGJhY2tfdCBmbjsKKworCS8qIGNhbiBiZSBhbnl0aGluZyB0aGUgYGZuYCBjYWxsYmFjayB3b3VsZCB3YW50IHRvIHVzZS4gKi8KKwl2b2lkICpkYXRhOworCisJLyogdGVsbHMgd2hldGhlciB0byBzdG9wIGF0IHRoZSBmaXJzdCBlcnJvciBvciBub3QuICovCisJaW50IHNob3dfYWxsX2Vycm9yczsKK307CisKKy8qKgorICogRmluZCBhbiBlbnRyeSBpbiBhIHRyZWUgZ2l2ZW4gYSBwYXRobmFtZSBhbmQgdGhlIHNoYTEgb2YgYSB0cmVlIHRvCisgKiBzZWFyY2guIFJldHVybnMgMCBpZiB0aGUgZW50cnkgaXMgZm91bmQgYW5kIC0xIG90aGVyd2lzZS4gVGhlIHRoaXJkCisgKiBhbmQgZm91cnRoIHBhcmFtZXRlcnMgYXJlIHNldCB0byB0aGUgZW50cnkncyBzaGExIGFuZCBtb2RlIHJlc3BlY3RpdmVseS4KKyAqLworaW50IGdldF90cmVlX2VudHJ5KHN0cnVjdCByZXBvc2l0b3J5ICosIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3Qgb2JqZWN0X2lkICosIHVuc2lnbmVkIHNob3J0ICopOworCisvKioKKyAqIEdlbmVyYXRlIHRoZSBmdWxsIHBhdGhuYW1lIG9mIGEgdHJlZSBlbnRyeSBiYXNlZCBmcm9tIHRoZSByb290IG9mIHRoZQorICogdHJhdmVyc2FsLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHRyYXZlcnNhbCBoYXMgcmVjdXJzZWQgaW50byBhbm90aGVyCisgKiB0cmVlIG5hbWVkICJiYXIiIHRoZSBwYXRobmFtZSBvZiBhbiBlbnRyeSAiYmF6IiBpbiB0aGUgImJhciIKKyAqIHRyZWUgd291bGQgYmUgImJhci9iYXoiLgorICovCitjaGFyICptYWtlX3RyYXZlcnNlX3BhdGgoY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhsZW4sIGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuKTsKKworLyoqCisgKiBDb252ZW5pZW5jZSB3cmFwcGVyIHRvIGBtYWtlX3RyYXZlcnNlX3BhdGhgIGludG8gYSBzdHJidWYuCisgKi8KK3ZvaWQgc3RyYnVmX21ha2VfdHJhdmVyc2VfcGF0aChzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4pOworCisvKioKKyAqIEluaXRpYWxpemUgYSBgdHJhdmVyc2VfaW5mb2AgZ2l2ZW4gdGhlIHBhdGhuYW1lIG9mIHRoZSB0cmVlIHRvIHN0YXJ0CisgKiB0cmF2ZXJzaW5nIGZyb20uCisgKi8KK3ZvaWQgc2V0dXBfdHJhdmVyc2VfaW5mbyhzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqYmFzZSk7CisKKy8qKgorICogQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgYSBwYXRobmFtZSByZXR1cm5lZCBieSBgbWFrZV90cmF2ZXJzZV9wYXRoYC4KKyAqIFRoaXMgdXRpbGl6ZXMgdGhlIG1lbW9yeSBzdHJ1Y3R1cmUgb2YgYSB0cmVlIGVudHJ5IHRvIGF2b2lkIHRoZQorICogb3ZlcmhlYWQgb2YgdXNpbmcgYSBnZW5lcmljIHN0cmxlbigpLgorICovCitzdGF0aWMgaW5saW5lIHNpemVfdCB0cmF2ZXJzZV9wYXRoX2xlbihjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywKKwkJCQkgICAgICAgc2l6ZV90IG5hbWVsZW4pCit7CisJcmV0dXJuIHN0X2FkZChpbmZvLT5wYXRobGVuLCBuYW1lbGVuKTsKK30KKworLyogaW4gZ2VuZXJhbCwgcG9zaXRpdmUgbWVhbnMgImtpbmQgb2YgaW50ZXJlc3RpbmciICovCitlbnVtIGludGVyZXN0aW5nIHsKKwlhbGxfZW50cmllc19ub3RfaW50ZXJlc3RpbmcgPSAtMSwgLyogbm8sIGFuZCBubyBzdWJzZXF1ZW50IGVudHJpZXMgd2lsbCBiZSBlaXRoZXIgKi8KKwllbnRyeV9ub3RfaW50ZXJlc3RpbmcgPSAwLAorCWVudHJ5X2ludGVyZXN0aW5nID0gMSwKKwlhbGxfZW50cmllc19pbnRlcmVzdGluZyA9IDIgLyogeWVzLCBhbmQgYWxsIHN1YnNlcXVlbnQgZW50cmllcyB3aWxsIGJlICovCit9OworCitlbnVtIGludGVyZXN0aW5nIHRyZWVfZW50cnlfaW50ZXJlc3Rpbmcoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCWNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICosCisJCQkJCXN0cnVjdCBzdHJidWYgKiwgaW50LAorCQkJCQljb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90cmVlLmMgYi90cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2NmJjYwotLS0gL2Rldi9udWxsCisrKyBiL3RyZWUuYwpAQCAtMCwwICsxLDI1MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiYWxsb2MuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisKK2NvbnN0IGNoYXIgKnRyZWVfdHlwZSA9ICJ0cmVlIjsKKworc3RhdGljIGludCByZWFkX29uZV9lbnRyeV9vcHQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorCQkJICAgICAgdW5zaWduZWQgbW9kZSwgaW50IHN0YWdlLCBpbnQgb3B0KQoreworCWludCBsZW47CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWlmIChTX0lTRElSKG1vZGUpKQorCQlyZXR1cm4gUkVBRF9UUkVFX1JFQ1VSU0lWRTsKKworCWxlbiA9IHN0cmxlbihwYXRobmFtZSk7CisJY2UgPSBtYWtlX2VtcHR5X2NhY2hlX2VudHJ5KGlzdGF0ZSwgYmFzZWxlbiArIGxlbik7CisKKwljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworCWNlLT5jZV9mbGFncyA9IGNyZWF0ZV9jZV9mbGFncyhzdGFnZSk7CisJY2UtPmNlX25hbWVsZW4gPSBiYXNlbGVuICsgbGVuOworCW1lbWNweShjZS0+bmFtZSwgYmFzZSwgYmFzZWxlbik7CisJbWVtY3B5KGNlLT5uYW1lICsgYmFzZWxlbiwgcGF0aG5hbWUsIGxlbisxKTsKKwlvaWRjcHkoJmNlLT5vaWQsIG9pZCk7CisJcmV0dXJuIGFkZF9pbmRleF9lbnRyeShpc3RhdGUsIGNlLCBvcHQpOworfQorCitzdGF0aWMgaW50IHJlYWRfb25lX2VudHJ5KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgc3RydWN0IHN0cmJ1ZiAqYmFzZSwKKwkJCSAgY29uc3QgY2hhciAqcGF0aG5hbWUsIHVuc2lnbmVkIG1vZGUsIGludCBzdGFnZSwKKwkJCSAgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSA9IGNvbnRleHQ7CisJcmV0dXJuIHJlYWRfb25lX2VudHJ5X29wdChpc3RhdGUsIG9pZCwgYmFzZS0+YnVmLCBiYXNlLT5sZW4sIHBhdGhuYW1lLAorCQkJCSAgbW9kZSwgc3RhZ2UsCisJCQkJICBBRERfQ0FDSEVfT0tfVE9fQUREfEFERF9DQUNIRV9TS0lQX0RGQ0hFQ0spOworfQorCisvKgorICogVGhpcyBpcyB1c2VkIHdoZW4gdGhlIGNhbGxlciBrbm93cyB0aGVyZSBpcyBubyBleGlzdGluZyBlbnRyaWVzIGF0CisgKiB0aGUgc3RhZ2UgdGhhdCB3aWxsIGNvbmZsaWN0IHdpdGggdGhlIGVudHJ5IGJlaW5nIGFkZGVkLgorICovCitzdGF0aWMgaW50IHJlYWRfb25lX2VudHJ5X3F1aWNrKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgc3RydWN0IHN0cmJ1ZiAqYmFzZSwKKwkJCQljb25zdCBjaGFyICpwYXRobmFtZSwgdW5zaWduZWQgbW9kZSwgaW50IHN0YWdlLAorCQkJCXZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUgPSBjb250ZXh0OworCXJldHVybiByZWFkX29uZV9lbnRyeV9vcHQoaXN0YXRlLCBvaWQsIGJhc2UtPmJ1ZiwgYmFzZS0+bGVuLCBwYXRobmFtZSwKKwkJCQkgIG1vZGUsIHN0YWdlLAorCQkJCSAgQUREX0NBQ0hFX0pVU1RfQVBQRU5EKTsKK30KKworc3RhdGljIGludCByZWFkX3RyZWVfMShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgICAgIHN0cnVjdCB0cmVlICp0cmVlLCBzdHJ1Y3Qgc3RyYnVmICpiYXNlLAorCQkgICAgICAgaW50IHN0YWdlLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkgICAgICAgcmVhZF90cmVlX2ZuX3QgZm4sIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBsZW4sIG9sZGxlbiA9IGJhc2UtPmxlbjsKKwllbnVtIGludGVyZXN0aW5nIHJldHZhbCA9IGVudHJ5X25vdF9pbnRlcmVzdGluZzsKKworCWlmIChwYXJzZV90cmVlKHRyZWUpKQorCQlyZXR1cm4gLTE7CisKKwlpbml0X3RyZWVfZGVzYygmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CisJCWlmIChyZXR2YWwgIT0gYWxsX2VudHJpZXNfaW50ZXJlc3RpbmcpIHsKKwkJCXJldHZhbCA9IHRyZWVfZW50cnlfaW50ZXJlc3Rpbmcoci0+aW5kZXgsICZlbnRyeSwKKwkJCQkJCQliYXNlLCAwLCBwYXRoc3BlYyk7CisJCQlpZiAocmV0dmFsID09IGFsbF9lbnRyaWVzX25vdF9pbnRlcmVzdGluZykKKwkJCQlicmVhazsKKwkJCWlmIChyZXR2YWwgPT0gZW50cnlfbm90X2ludGVyZXN0aW5nKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoIChmbigmZW50cnkub2lkLCBiYXNlLAorCQkJICAgZW50cnkucGF0aCwgZW50cnkubW9kZSwgc3RhZ2UsIGNvbnRleHQpKSB7CisJCWNhc2UgMDoKKwkJCWNvbnRpbnVlOworCQljYXNlIFJFQURfVFJFRV9SRUNVUlNJVkU6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChTX0lTRElSKGVudHJ5Lm1vZGUpKQorCQkJb2lkY3B5KCZvaWQsICZlbnRyeS5vaWQpOworCQllbHNlIGlmIChTX0lTR0lUTElOSyhlbnRyeS5tb2RlKSkgeworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJCQljb21taXQgPSBsb29rdXBfY29tbWl0KHIsICZlbnRyeS5vaWQpOworCQkJaWYgKCFjb21taXQpCisJCQkJZGllKCJDb21taXQgJXMgaW4gc3VibW9kdWxlIHBhdGggJXMlcyBub3QgZm91bmQiLAorCQkJCSAgICBvaWRfdG9faGV4KCZlbnRyeS5vaWQpLAorCQkJCSAgICBiYXNlLT5idWYsIGVudHJ5LnBhdGgpOworCisJCQlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCQkJZGllKCJJbnZhbGlkIGNvbW1pdCAlcyBpbiBzdWJtb2R1bGUgcGF0aCAlcyVzIiwKKwkJCQkgICAgb2lkX3RvX2hleCgmZW50cnkub2lkKSwKKwkJCQkgICAgYmFzZS0+YnVmLCBlbnRyeS5wYXRoKTsKKworCQkJb2lkY3B5KCZvaWQsIGdldF9jb21taXRfdHJlZV9vaWQoY29tbWl0KSk7CisJCX0KKwkJZWxzZQorCQkJY29udGludWU7CisKKwkJbGVuID0gdHJlZV9lbnRyeV9sZW4oJmVudHJ5KTsKKwkJc3RyYnVmX2FkZChiYXNlLCBlbnRyeS5wYXRoLCBsZW4pOworCQlzdHJidWZfYWRkY2goYmFzZSwgJy8nKTsKKwkJcmV0dmFsID0gcmVhZF90cmVlXzEociwgbG9va3VwX3RyZWUociwgJm9pZCksCisJCQkJICAgICBiYXNlLCBzdGFnZSwgcGF0aHNwZWMsCisJCQkJICAgICBmbiwgY29udGV4dCk7CisJCXN0cmJ1Zl9zZXRsZW4oYmFzZSwgb2xkbGVuKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByZWFkX3RyZWVfcmVjdXJzaXZlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJc3RydWN0IHRyZWUgKnRyZWUsCisJCQljb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKKwkJCWludCBzdGFnZSwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCXJlYWRfdHJlZV9mbl90IGZuLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJc3RyYnVmX2FkZCgmc2IsIGJhc2UsIGJhc2VsZW4pOworCXJldCA9IHJlYWRfdHJlZV8xKHIsIHRyZWUsICZzYiwgc3RhZ2UsIHBhdGhzcGVjLCBmbiwgY29udGV4dCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNtcF9jYWNoZV9uYW1lX2NvbXBhcmUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UxLCAqY2UyOworCisJY2UxID0gKigoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICoqKWFfKTsKKwljZTIgPSAqKChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiopYl8pOworCXJldHVybiBjYWNoZV9uYW1lX3N0YWdlX2NvbXBhcmUoY2UxLT5uYW1lLCBjZTEtPmNlX25hbWVsZW4sIGNlX3N0YWdlKGNlMSksCisJCQkJICBjZTItPm5hbWUsIGNlMi0+Y2VfbmFtZWxlbiwgY2Vfc3RhZ2UoY2UyKSk7Cit9CisKK2ludCByZWFkX3RyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCB0cmVlICp0cmVlLCBpbnQgc3RhZ2UsCisJICAgICAgc3RydWN0IHBhdGhzcGVjICptYXRjaCwgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJcmVhZF90cmVlX2ZuX3QgZm4gPSBOVUxMOworCWludCBpLCBlcnI7CisKKwkvKgorCSAqIEN1cnJlbnRseSB0aGUgb25seSBleGlzdGluZyBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gYWxsCisJICogY2FsbCBpdCB3aXRoIHN0YWdlPTEgYW5kIGFmdGVyIG1ha2luZyBzdXJlIHRoZXJlIGlzIG5vdGhpbmcKKwkgKiBhdCB0aGF0IHN0YWdlOyB3ZSBjb3VsZCBhbHdheXMgdXNlIHJlYWRfb25lX2VudHJ5X3F1aWNrKCkuCisJICoKKwkgKiBCdXQgd2hlbiB3ZSBkZWNpZGUgdG8gc3RyYWlnaHRlbiBvdXQgZ2l0LXJlYWQtdHJlZSBub3QgdG8KKwkgKiB1c2UgdW5wYWNrX3RyZWVzKCkgaW4gc29tZSBjYXNlcywgdGhpcyB3aWxsIHByb2JhYmx5IHN0YXJ0CisJICogdG8gbWF0dGVyLgorCSAqLworCisJLyoKKwkgKiBTZWUgaWYgd2UgaGF2ZSBjYWNoZSBlbnRyeSBhdCB0aGUgc3RhZ2UuICBJZiBzbywKKwkgKiBkbyBpdCB0aGUgb3JpZ2luYWwgc2xvdyB3YXksIG90aGVyd2lzZSwgYXBwZW5kIGFuZCB0aGVuCisJICogc29ydCBhdCB0aGUgZW5kLgorCSAqLworCWZvciAoaSA9IDA7ICFmbiAmJiBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQlpZiAoY2Vfc3RhZ2UoY2UpID09IHN0YWdlKQorCQkJZm4gPSByZWFkX29uZV9lbnRyeTsKKwl9CisKKwlpZiAoIWZuKQorCQlmbiA9IHJlYWRfb25lX2VudHJ5X3F1aWNrOworCWVyciA9IHJlYWRfdHJlZV9yZWN1cnNpdmUociwgdHJlZSwgIiIsIDAsIHN0YWdlLCBtYXRjaCwgZm4sIGlzdGF0ZSk7CisJaWYgKGZuID09IHJlYWRfb25lX2VudHJ5IHx8IGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qCisJICogU29ydCB0aGUgY2FjaGUgZW50cnkgLS0gd2UgbmVlZCB0byBudWtlIHRoZSBjYWNoZSB0cmVlLCB0aG91Z2guCisJICovCisJY2FjaGVfdHJlZV9mcmVlKCZpc3RhdGUtPmNhY2hlX3RyZWUpOworCVFTT1JUKGlzdGF0ZS0+Y2FjaGUsIGlzdGF0ZS0+Y2FjaGVfbnIsIGNtcF9jYWNoZV9uYW1lX2NvbXBhcmUpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdHJlZSAqbG9va3VwX3RyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHIsIG9pZCk7CisJaWYgKCFvYmopCisJCXJldHVybiBjcmVhdGVfb2JqZWN0KHIsIG9pZCwgYWxsb2NfdHJlZV9ub2RlKHIpKTsKKwlyZXR1cm4gb2JqZWN0X2FzX3R5cGUociwgb2JqLCBPQkpfVFJFRSwgMCk7Cit9CisKK2ludCBwYXJzZV90cmVlX2J1ZmZlcihzdHJ1Y3QgdHJlZSAqaXRlbSwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKGl0ZW0tPm9iamVjdC5wYXJzZWQpCisJCXJldHVybiAwOworCWl0ZW0tPm9iamVjdC5wYXJzZWQgPSAxOworCWl0ZW0tPmJ1ZmZlciA9IGJ1ZmZlcjsKKwlpdGVtLT5zaXplID0gc2l6ZTsKKworCXJldHVybiAwOworfQorCitpbnQgcGFyc2VfdHJlZV9nZW50bHkoc3RydWN0IHRyZWUgKml0ZW0sIGludCBxdWlldF9vbl9taXNzaW5nKQoreworCSBlbnVtIG9iamVjdF90eXBlIHR5cGU7CisJIHZvaWQgKmJ1ZmZlcjsKKwkgdW5zaWduZWQgbG9uZyBzaXplOworCisJaWYgKGl0ZW0tPm9iamVjdC5wYXJzZWQpCisJCXJldHVybiAwOworCWJ1ZmZlciA9IHJlYWRfb2JqZWN0X2ZpbGUoJml0ZW0tPm9iamVjdC5vaWQsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiBxdWlldF9vbl9taXNzaW5nID8gLTEgOgorCQkJZXJyb3IoIkNvdWxkIG5vdCByZWFkICVzIiwKKwkJCSAgICAgb2lkX3RvX2hleCgmaXRlbS0+b2JqZWN0Lm9pZCkpOworCWlmICh0eXBlICE9IE9CSl9UUkVFKSB7CisJCWZyZWUoYnVmZmVyKTsKKwkJcmV0dXJuIGVycm9yKCJPYmplY3QgJXMgbm90IGEgdHJlZSIsCisJCQkgICAgIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKKwl9CisJcmV0dXJuIHBhcnNlX3RyZWVfYnVmZmVyKGl0ZW0sIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3ZvaWQgZnJlZV90cmVlX2J1ZmZlcihzdHJ1Y3QgdHJlZSAqdHJlZSkKK3sKKwlGUkVFX0FORF9OVUxMKHRyZWUtPmJ1ZmZlcik7CisJdHJlZS0+c2l6ZSA9IDA7CisJdHJlZS0+b2JqZWN0LnBhcnNlZCA9IDA7Cit9CisKK3N0cnVjdCB0cmVlICpwYXJzZV90cmVlX2luZGlyZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqciA9IHRoZV9yZXBvc2l0b3J5OworCXN0cnVjdCBvYmplY3QgKm9iaiA9IHBhcnNlX29iamVjdChyLCBvaWQpOworCXJldHVybiAoc3RydWN0IHRyZWUgKilyZXBvX3BlZWxfdG9fdHlwZShyLCBOVUxMLCAwLCBvYmosIE9CSl9UUkVFKTsKK30KZGlmZiAtLWdpdCBhL3RyZWUuaCBiL3RyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzgzNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdHJlZS5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5kZWYgVFJFRV9ICisjZGVmaW5lIFRSRUVfSAorCisjaW5jbHVkZSAib2JqZWN0LmgiCisKK3N0cnVjdCByZXBvc2l0b3J5Oworc3RydWN0IHN0cmJ1ZjsKKworc3RydWN0IHRyZWUgeworCXN0cnVjdCBvYmplY3Qgb2JqZWN0OworCXZvaWQgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7Cit9OworCitleHRlcm4gY29uc3QgY2hhciAqdHJlZV90eXBlOworCitzdHJ1Y3QgdHJlZSAqbG9va3VwX3RyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKK2ludCBwYXJzZV90cmVlX2J1ZmZlcihzdHJ1Y3QgdHJlZSAqaXRlbSwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitpbnQgcGFyc2VfdHJlZV9nZW50bHkoc3RydWN0IHRyZWUgKnRyZWUsIGludCBxdWlldF9vbl9taXNzaW5nKTsKK3N0YXRpYyBpbmxpbmUgaW50IHBhcnNlX3RyZWUoc3RydWN0IHRyZWUgKnRyZWUpCit7CisJcmV0dXJuIHBhcnNlX3RyZWVfZ2VudGx5KHRyZWUsIDApOworfQordm9pZCBmcmVlX3RyZWVfYnVmZmVyKHN0cnVjdCB0cmVlICp0cmVlKTsKKworLyogUGFyc2VzIGFuZCByZXR1cm5zIHRoZSB0cmVlIGluIHRoZSBnaXZlbiBlbnQsIGNoYXNpbmcgdGFncyBhbmQgY29tbWl0cy4gKi8KK3N0cnVjdCB0cmVlICpwYXJzZV90cmVlX2luZGlyZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKKyNkZWZpbmUgUkVBRF9UUkVFX1JFQ1VSU0lWRSAxCit0eXBlZGVmIGludCAoKnJlYWRfdHJlZV9mbl90KShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosIHN0cnVjdCBzdHJidWYgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsIGludCwgdm9pZCAqKTsKKworaW50IHJlYWRfdHJlZV9yZWN1cnNpdmUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQlzdHJ1Y3QgdHJlZSAqdHJlZSwKKwkJCWNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkJaW50IHN0YWdlLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJcmVhZF90cmVlX2ZuX3QgZm4sIHZvaWQgKmNvbnRleHQpOworCitpbnQgcmVhZF90cmVlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgdHJlZSAqdHJlZSwKKwkgICAgICBpbnQgc3RhZ2UsIHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJICAgICAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOworCisjZW5kaWYgLyogVFJFRV9IICovCmRpZmYgLS1naXQgYS91bmljb2RlLXdpZHRoLmggYi91bmljb2RlLXdpZHRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwZTY4NgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUtd2lkdGguaApAQCAtMCwwICsxLDQ1OSBAQAorc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlcnZhbCB6ZXJvX3dpZHRoW10gPSB7Cit7IDB4MDMwMCwgMHgwMzZGIH0sCit7IDB4MDQ4MywgMHgwNDg5IH0sCit7IDB4MDU5MSwgMHgwNUJEIH0sCit7IDB4MDVCRiwgMHgwNUJGIH0sCit7IDB4MDVDMSwgMHgwNUMyIH0sCit7IDB4MDVDNCwgMHgwNUM1IH0sCit7IDB4MDVDNywgMHgwNUM3IH0sCit7IDB4MDYwMCwgMHgwNjA1IH0sCit7IDB4MDYxMCwgMHgwNjFBIH0sCit7IDB4MDYxQywgMHgwNjFDIH0sCit7IDB4MDY0QiwgMHgwNjVGIH0sCit7IDB4MDY3MCwgMHgwNjcwIH0sCit7IDB4MDZENiwgMHgwNkREIH0sCit7IDB4MDZERiwgMHgwNkU0IH0sCit7IDB4MDZFNywgMHgwNkU4IH0sCit7IDB4MDZFQSwgMHgwNkVEIH0sCit7IDB4MDcwRiwgMHgwNzBGIH0sCit7IDB4MDcxMSwgMHgwNzExIH0sCit7IDB4MDczMCwgMHgwNzRBIH0sCit7IDB4MDdBNiwgMHgwN0IwIH0sCit7IDB4MDdFQiwgMHgwN0YzIH0sCit7IDB4MDdGRCwgMHgwN0ZEIH0sCit7IDB4MDgxNiwgMHgwODE5IH0sCit7IDB4MDgxQiwgMHgwODIzIH0sCit7IDB4MDgyNSwgMHgwODI3IH0sCit7IDB4MDgyOSwgMHgwODJEIH0sCit7IDB4MDg1OSwgMHgwODVCIH0sCit7IDB4MDhEMywgMHgwOTAyIH0sCit7IDB4MDkzQSwgMHgwOTNBIH0sCit7IDB4MDkzQywgMHgwOTNDIH0sCit7IDB4MDk0MSwgMHgwOTQ4IH0sCit7IDB4MDk0RCwgMHgwOTREIH0sCit7IDB4MDk1MSwgMHgwOTU3IH0sCit7IDB4MDk2MiwgMHgwOTYzIH0sCit7IDB4MDk4MSwgMHgwOTgxIH0sCit7IDB4MDlCQywgMHgwOUJDIH0sCit7IDB4MDlDMSwgMHgwOUM0IH0sCit7IDB4MDlDRCwgMHgwOUNEIH0sCit7IDB4MDlFMiwgMHgwOUUzIH0sCit7IDB4MDlGRSwgMHgwOUZFIH0sCit7IDB4MEEwMSwgMHgwQTAyIH0sCit7IDB4MEEzQywgMHgwQTNDIH0sCit7IDB4MEE0MSwgMHgwQTQyIH0sCit7IDB4MEE0NywgMHgwQTQ4IH0sCit7IDB4MEE0QiwgMHgwQTREIH0sCit7IDB4MEE1MSwgMHgwQTUxIH0sCit7IDB4MEE3MCwgMHgwQTcxIH0sCit7IDB4MEE3NSwgMHgwQTc1IH0sCit7IDB4MEE4MSwgMHgwQTgyIH0sCit7IDB4MEFCQywgMHgwQUJDIH0sCit7IDB4MEFDMSwgMHgwQUM1IH0sCit7IDB4MEFDNywgMHgwQUM4IH0sCit7IDB4MEFDRCwgMHgwQUNEIH0sCit7IDB4MEFFMiwgMHgwQUUzIH0sCit7IDB4MEFGQSwgMHgwQUZGIH0sCit7IDB4MEIwMSwgMHgwQjAxIH0sCit7IDB4MEIzQywgMHgwQjNDIH0sCit7IDB4MEIzRiwgMHgwQjNGIH0sCit7IDB4MEI0MSwgMHgwQjQ0IH0sCit7IDB4MEI0RCwgMHgwQjREIH0sCit7IDB4MEI1NSwgMHgwQjU2IH0sCit7IDB4MEI2MiwgMHgwQjYzIH0sCit7IDB4MEI4MiwgMHgwQjgyIH0sCit7IDB4MEJDMCwgMHgwQkMwIH0sCit7IDB4MEJDRCwgMHgwQkNEIH0sCit7IDB4MEMwMCwgMHgwQzAwIH0sCit7IDB4MEMwNCwgMHgwQzA0IH0sCit7IDB4MEMzRSwgMHgwQzQwIH0sCit7IDB4MEM0NiwgMHgwQzQ4IH0sCit7IDB4MEM0QSwgMHgwQzREIH0sCit7IDB4MEM1NSwgMHgwQzU2IH0sCit7IDB4MEM2MiwgMHgwQzYzIH0sCit7IDB4MEM4MSwgMHgwQzgxIH0sCit7IDB4MENCQywgMHgwQ0JDIH0sCit7IDB4MENCRiwgMHgwQ0JGIH0sCit7IDB4MENDNiwgMHgwQ0M2IH0sCit7IDB4MENDQywgMHgwQ0NEIH0sCit7IDB4MENFMiwgMHgwQ0UzIH0sCit7IDB4MEQwMCwgMHgwRDAxIH0sCit7IDB4MEQzQiwgMHgwRDNDIH0sCit7IDB4MEQ0MSwgMHgwRDQ0IH0sCit7IDB4MEQ0RCwgMHgwRDREIH0sCit7IDB4MEQ2MiwgMHgwRDYzIH0sCit7IDB4MEQ4MSwgMHgwRDgxIH0sCit7IDB4MERDQSwgMHgwRENBIH0sCit7IDB4MEREMiwgMHgwREQ0IH0sCit7IDB4MERENiwgMHgwREQ2IH0sCit7IDB4MEUzMSwgMHgwRTMxIH0sCit7IDB4MEUzNCwgMHgwRTNBIH0sCit7IDB4MEU0NywgMHgwRTRFIH0sCit7IDB4MEVCMSwgMHgwRUIxIH0sCit7IDB4MEVCNCwgMHgwRUJDIH0sCit7IDB4MEVDOCwgMHgwRUNEIH0sCit7IDB4MEYxOCwgMHgwRjE5IH0sCit7IDB4MEYzNSwgMHgwRjM1IH0sCit7IDB4MEYzNywgMHgwRjM3IH0sCit7IDB4MEYzOSwgMHgwRjM5IH0sCit7IDB4MEY3MSwgMHgwRjdFIH0sCit7IDB4MEY4MCwgMHgwRjg0IH0sCit7IDB4MEY4NiwgMHgwRjg3IH0sCit7IDB4MEY4RCwgMHgwRjk3IH0sCit7IDB4MEY5OSwgMHgwRkJDIH0sCit7IDB4MEZDNiwgMHgwRkM2IH0sCit7IDB4MTAyRCwgMHgxMDMwIH0sCit7IDB4MTAzMiwgMHgxMDM3IH0sCit7IDB4MTAzOSwgMHgxMDNBIH0sCit7IDB4MTAzRCwgMHgxMDNFIH0sCit7IDB4MTA1OCwgMHgxMDU5IH0sCit7IDB4MTA1RSwgMHgxMDYwIH0sCit7IDB4MTA3MSwgMHgxMDc0IH0sCit7IDB4MTA4MiwgMHgxMDgyIH0sCit7IDB4MTA4NSwgMHgxMDg2IH0sCit7IDB4MTA4RCwgMHgxMDhEIH0sCit7IDB4MTA5RCwgMHgxMDlEIH0sCit7IDB4MTE2MCwgMHgxMUZGIH0sCit7IDB4MTM1RCwgMHgxMzVGIH0sCit7IDB4MTcxMiwgMHgxNzE0IH0sCit7IDB4MTczMiwgMHgxNzM0IH0sCit7IDB4MTc1MiwgMHgxNzUzIH0sCit7IDB4MTc3MiwgMHgxNzczIH0sCit7IDB4MTdCNCwgMHgxN0I1IH0sCit7IDB4MTdCNywgMHgxN0JEIH0sCit7IDB4MTdDNiwgMHgxN0M2IH0sCit7IDB4MTdDOSwgMHgxN0QzIH0sCit7IDB4MTdERCwgMHgxN0REIH0sCit7IDB4MTgwQiwgMHgxODBFIH0sCit7IDB4MTg4NSwgMHgxODg2IH0sCit7IDB4MThBOSwgMHgxOEE5IH0sCit7IDB4MTkyMCwgMHgxOTIyIH0sCit7IDB4MTkyNywgMHgxOTI4IH0sCit7IDB4MTkzMiwgMHgxOTMyIH0sCit7IDB4MTkzOSwgMHgxOTNCIH0sCit7IDB4MUExNywgMHgxQTE4IH0sCit7IDB4MUExQiwgMHgxQTFCIH0sCit7IDB4MUE1NiwgMHgxQTU2IH0sCit7IDB4MUE1OCwgMHgxQTVFIH0sCit7IDB4MUE2MCwgMHgxQTYwIH0sCit7IDB4MUE2MiwgMHgxQTYyIH0sCit7IDB4MUE2NSwgMHgxQTZDIH0sCit7IDB4MUE3MywgMHgxQTdDIH0sCit7IDB4MUE3RiwgMHgxQTdGIH0sCit7IDB4MUFCMCwgMHgxQUMwIH0sCit7IDB4MUIwMCwgMHgxQjAzIH0sCit7IDB4MUIzNCwgMHgxQjM0IH0sCit7IDB4MUIzNiwgMHgxQjNBIH0sCit7IDB4MUIzQywgMHgxQjNDIH0sCit7IDB4MUI0MiwgMHgxQjQyIH0sCit7IDB4MUI2QiwgMHgxQjczIH0sCit7IDB4MUI4MCwgMHgxQjgxIH0sCit7IDB4MUJBMiwgMHgxQkE1IH0sCit7IDB4MUJBOCwgMHgxQkE5IH0sCit7IDB4MUJBQiwgMHgxQkFEIH0sCit7IDB4MUJFNiwgMHgxQkU2IH0sCit7IDB4MUJFOCwgMHgxQkU5IH0sCit7IDB4MUJFRCwgMHgxQkVEIH0sCit7IDB4MUJFRiwgMHgxQkYxIH0sCit7IDB4MUMyQywgMHgxQzMzIH0sCit7IDB4MUMzNiwgMHgxQzM3IH0sCit7IDB4MUNEMCwgMHgxQ0QyIH0sCit7IDB4MUNENCwgMHgxQ0UwIH0sCit7IDB4MUNFMiwgMHgxQ0U4IH0sCit7IDB4MUNFRCwgMHgxQ0VEIH0sCit7IDB4MUNGNCwgMHgxQ0Y0IH0sCit7IDB4MUNGOCwgMHgxQ0Y5IH0sCit7IDB4MURDMCwgMHgxREY5IH0sCit7IDB4MURGQiwgMHgxREZGIH0sCit7IDB4MjAwQiwgMHgyMDBGIH0sCit7IDB4MjAyQSwgMHgyMDJFIH0sCit7IDB4MjA2MCwgMHgyMDY0IH0sCit7IDB4MjA2NiwgMHgyMDZGIH0sCit7IDB4MjBEMCwgMHgyMEYwIH0sCit7IDB4MkNFRiwgMHgyQ0YxIH0sCit7IDB4MkQ3RiwgMHgyRDdGIH0sCit7IDB4MkRFMCwgMHgyREZGIH0sCit7IDB4MzAyQSwgMHgzMDJEIH0sCit7IDB4MzA5OSwgMHgzMDlBIH0sCit7IDB4QTY2RiwgMHhBNjcyIH0sCit7IDB4QTY3NCwgMHhBNjdEIH0sCit7IDB4QTY5RSwgMHhBNjlGIH0sCit7IDB4QTZGMCwgMHhBNkYxIH0sCit7IDB4QTgwMiwgMHhBODAyIH0sCit7IDB4QTgwNiwgMHhBODA2IH0sCit7IDB4QTgwQiwgMHhBODBCIH0sCit7IDB4QTgyNSwgMHhBODI2IH0sCit7IDB4QTgyQywgMHhBODJDIH0sCit7IDB4QThDNCwgMHhBOEM1IH0sCit7IDB4QThFMCwgMHhBOEYxIH0sCit7IDB4QThGRiwgMHhBOEZGIH0sCit7IDB4QTkyNiwgMHhBOTJEIH0sCit7IDB4QTk0NywgMHhBOTUxIH0sCit7IDB4QTk4MCwgMHhBOTgyIH0sCit7IDB4QTlCMywgMHhBOUIzIH0sCit7IDB4QTlCNiwgMHhBOUI5IH0sCit7IDB4QTlCQywgMHhBOUJEIH0sCit7IDB4QTlFNSwgMHhBOUU1IH0sCit7IDB4QUEyOSwgMHhBQTJFIH0sCit7IDB4QUEzMSwgMHhBQTMyIH0sCit7IDB4QUEzNSwgMHhBQTM2IH0sCit7IDB4QUE0MywgMHhBQTQzIH0sCit7IDB4QUE0QywgMHhBQTRDIH0sCit7IDB4QUE3QywgMHhBQTdDIH0sCit7IDB4QUFCMCwgMHhBQUIwIH0sCit7IDB4QUFCMiwgMHhBQUI0IH0sCit7IDB4QUFCNywgMHhBQUI4IH0sCit7IDB4QUFCRSwgMHhBQUJGIH0sCit7IDB4QUFDMSwgMHhBQUMxIH0sCit7IDB4QUFFQywgMHhBQUVEIH0sCit7IDB4QUFGNiwgMHhBQUY2IH0sCit7IDB4QUJFNSwgMHhBQkU1IH0sCit7IDB4QUJFOCwgMHhBQkU4IH0sCit7IDB4QUJFRCwgMHhBQkVEIH0sCit7IDB4RkIxRSwgMHhGQjFFIH0sCit7IDB4RkUwMCwgMHhGRTBGIH0sCit7IDB4RkUyMCwgMHhGRTJGIH0sCit7IDB4RkVGRiwgMHhGRUZGIH0sCit7IDB4RkZGOSwgMHhGRkZCIH0sCit7IDB4MTAxRkQsIDB4MTAxRkQgfSwKK3sgMHgxMDJFMCwgMHgxMDJFMCB9LAoreyAweDEwMzc2LCAweDEwMzdBIH0sCit7IDB4MTBBMDEsIDB4MTBBMDMgfSwKK3sgMHgxMEEwNSwgMHgxMEEwNiB9LAoreyAweDEwQTBDLCAweDEwQTBGIH0sCit7IDB4MTBBMzgsIDB4MTBBM0EgfSwKK3sgMHgxMEEzRiwgMHgxMEEzRiB9LAoreyAweDEwQUU1LCAweDEwQUU2IH0sCit7IDB4MTBEMjQsIDB4MTBEMjcgfSwKK3sgMHgxMEVBQiwgMHgxMEVBQyB9LAoreyAweDEwRjQ2LCAweDEwRjUwIH0sCit7IDB4MTEwMDEsIDB4MTEwMDEgfSwKK3sgMHgxMTAzOCwgMHgxMTA0NiB9LAoreyAweDExMDdGLCAweDExMDgxIH0sCit7IDB4MTEwQjMsIDB4MTEwQjYgfSwKK3sgMHgxMTBCOSwgMHgxMTBCQSB9LAoreyAweDExMEJELCAweDExMEJEIH0sCit7IDB4MTEwQ0QsIDB4MTEwQ0QgfSwKK3sgMHgxMTEwMCwgMHgxMTEwMiB9LAoreyAweDExMTI3LCAweDExMTJCIH0sCit7IDB4MTExMkQsIDB4MTExMzQgfSwKK3sgMHgxMTE3MywgMHgxMTE3MyB9LAoreyAweDExMTgwLCAweDExMTgxIH0sCit7IDB4MTExQjYsIDB4MTExQkUgfSwKK3sgMHgxMTFDOSwgMHgxMTFDQyB9LAoreyAweDExMUNGLCAweDExMUNGIH0sCit7IDB4MTEyMkYsIDB4MTEyMzEgfSwKK3sgMHgxMTIzNCwgMHgxMTIzNCB9LAoreyAweDExMjM2LCAweDExMjM3IH0sCit7IDB4MTEyM0UsIDB4MTEyM0UgfSwKK3sgMHgxMTJERiwgMHgxMTJERiB9LAoreyAweDExMkUzLCAweDExMkVBIH0sCit7IDB4MTEzMDAsIDB4MTEzMDEgfSwKK3sgMHgxMTMzQiwgMHgxMTMzQyB9LAoreyAweDExMzQwLCAweDExMzQwIH0sCit7IDB4MTEzNjYsIDB4MTEzNkMgfSwKK3sgMHgxMTM3MCwgMHgxMTM3NCB9LAoreyAweDExNDM4LCAweDExNDNGIH0sCit7IDB4MTE0NDIsIDB4MTE0NDQgfSwKK3sgMHgxMTQ0NiwgMHgxMTQ0NiB9LAoreyAweDExNDVFLCAweDExNDVFIH0sCit7IDB4MTE0QjMsIDB4MTE0QjggfSwKK3sgMHgxMTRCQSwgMHgxMTRCQSB9LAoreyAweDExNEJGLCAweDExNEMwIH0sCit7IDB4MTE0QzIsIDB4MTE0QzMgfSwKK3sgMHgxMTVCMiwgMHgxMTVCNSB9LAoreyAweDExNUJDLCAweDExNUJEIH0sCit7IDB4MTE1QkYsIDB4MTE1QzAgfSwKK3sgMHgxMTVEQywgMHgxMTVERCB9LAoreyAweDExNjMzLCAweDExNjNBIH0sCit7IDB4MTE2M0QsIDB4MTE2M0QgfSwKK3sgMHgxMTYzRiwgMHgxMTY0MCB9LAoreyAweDExNkFCLCAweDExNkFCIH0sCit7IDB4MTE2QUQsIDB4MTE2QUQgfSwKK3sgMHgxMTZCMCwgMHgxMTZCNSB9LAoreyAweDExNkI3LCAweDExNkI3IH0sCit7IDB4MTE3MUQsIDB4MTE3MUYgfSwKK3sgMHgxMTcyMiwgMHgxMTcyNSB9LAoreyAweDExNzI3LCAweDExNzJCIH0sCit7IDB4MTE4MkYsIDB4MTE4MzcgfSwKK3sgMHgxMTgzOSwgMHgxMTgzQSB9LAoreyAweDExOTNCLCAweDExOTNDIH0sCit7IDB4MTE5M0UsIDB4MTE5M0UgfSwKK3sgMHgxMTk0MywgMHgxMTk0MyB9LAoreyAweDExOUQ0LCAweDExOUQ3IH0sCit7IDB4MTE5REEsIDB4MTE5REIgfSwKK3sgMHgxMTlFMCwgMHgxMTlFMCB9LAoreyAweDExQTAxLCAweDExQTBBIH0sCit7IDB4MTFBMzMsIDB4MTFBMzggfSwKK3sgMHgxMUEzQiwgMHgxMUEzRSB9LAoreyAweDExQTQ3LCAweDExQTQ3IH0sCit7IDB4MTFBNTEsIDB4MTFBNTYgfSwKK3sgMHgxMUE1OSwgMHgxMUE1QiB9LAoreyAweDExQThBLCAweDExQTk2IH0sCit7IDB4MTFBOTgsIDB4MTFBOTkgfSwKK3sgMHgxMUMzMCwgMHgxMUMzNiB9LAoreyAweDExQzM4LCAweDExQzNEIH0sCit7IDB4MTFDM0YsIDB4MTFDM0YgfSwKK3sgMHgxMUM5MiwgMHgxMUNBNyB9LAoreyAweDExQ0FBLCAweDExQ0IwIH0sCit7IDB4MTFDQjIsIDB4MTFDQjMgfSwKK3sgMHgxMUNCNSwgMHgxMUNCNiB9LAoreyAweDExRDMxLCAweDExRDM2IH0sCit7IDB4MTFEM0EsIDB4MTFEM0EgfSwKK3sgMHgxMUQzQywgMHgxMUQzRCB9LAoreyAweDExRDNGLCAweDExRDQ1IH0sCit7IDB4MTFENDcsIDB4MTFENDcgfSwKK3sgMHgxMUQ5MCwgMHgxMUQ5MSB9LAoreyAweDExRDk1LCAweDExRDk1IH0sCit7IDB4MTFEOTcsIDB4MTFEOTcgfSwKK3sgMHgxMUVGMywgMHgxMUVGNCB9LAoreyAweDEzNDMwLCAweDEzNDM4IH0sCit7IDB4MTZBRjAsIDB4MTZBRjQgfSwKK3sgMHgxNkIzMCwgMHgxNkIzNiB9LAoreyAweDE2RjRGLCAweDE2RjRGIH0sCit7IDB4MTZGOEYsIDB4MTZGOTIgfSwKK3sgMHgxNkZFNCwgMHgxNkZFNCB9LAoreyAweDFCQzlELCAweDFCQzlFIH0sCit7IDB4MUJDQTAsIDB4MUJDQTMgfSwKK3sgMHgxRDE2NywgMHgxRDE2OSB9LAoreyAweDFEMTczLCAweDFEMTgyIH0sCit7IDB4MUQxODUsIDB4MUQxOEIgfSwKK3sgMHgxRDFBQSwgMHgxRDFBRCB9LAoreyAweDFEMjQyLCAweDFEMjQ0IH0sCit7IDB4MURBMDAsIDB4MURBMzYgfSwKK3sgMHgxREEzQiwgMHgxREE2QyB9LAoreyAweDFEQTc1LCAweDFEQTc1IH0sCit7IDB4MURBODQsIDB4MURBODQgfSwKK3sgMHgxREE5QiwgMHgxREE5RiB9LAoreyAweDFEQUExLCAweDFEQUFGIH0sCit7IDB4MUUwMDAsIDB4MUUwMDYgfSwKK3sgMHgxRTAwOCwgMHgxRTAxOCB9LAoreyAweDFFMDFCLCAweDFFMDIxIH0sCit7IDB4MUUwMjMsIDB4MUUwMjQgfSwKK3sgMHgxRTAyNiwgMHgxRTAyQSB9LAoreyAweDFFMTMwLCAweDFFMTM2IH0sCit7IDB4MUUyRUMsIDB4MUUyRUYgfSwKK3sgMHgxRThEMCwgMHgxRThENiB9LAoreyAweDFFOTQ0LCAweDFFOTRBIH0sCit7IDB4RTAwMDEsIDB4RTAwMDEgfSwKK3sgMHhFMDAyMCwgMHhFMDA3RiB9LAoreyAweEUwMTAwLCAweEUwMUVGIH0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVydmFsIGRvdWJsZV93aWR0aFtdID0geworeyAweDExMDAsIDB4MTE1RiB9LAoreyAweDIzMUEsIDB4MjMxQiB9LAoreyAweDIzMjksIDB4MjMyQSB9LAoreyAweDIzRTksIDB4MjNFQyB9LAoreyAweDIzRjAsIDB4MjNGMCB9LAoreyAweDIzRjMsIDB4MjNGMyB9LAoreyAweDI1RkQsIDB4MjVGRSB9LAoreyAweDI2MTQsIDB4MjYxNSB9LAoreyAweDI2NDgsIDB4MjY1MyB9LAoreyAweDI2N0YsIDB4MjY3RiB9LAoreyAweDI2OTMsIDB4MjY5MyB9LAoreyAweDI2QTEsIDB4MjZBMSB9LAoreyAweDI2QUEsIDB4MjZBQiB9LAoreyAweDI2QkQsIDB4MjZCRSB9LAoreyAweDI2QzQsIDB4MjZDNSB9LAoreyAweDI2Q0UsIDB4MjZDRSB9LAoreyAweDI2RDQsIDB4MjZENCB9LAoreyAweDI2RUEsIDB4MjZFQSB9LAoreyAweDI2RjIsIDB4MjZGMyB9LAoreyAweDI2RjUsIDB4MjZGNSB9LAoreyAweDI2RkEsIDB4MjZGQSB9LAoreyAweDI2RkQsIDB4MjZGRCB9LAoreyAweDI3MDUsIDB4MjcwNSB9LAoreyAweDI3MEEsIDB4MjcwQiB9LAoreyAweDI3MjgsIDB4MjcyOCB9LAoreyAweDI3NEMsIDB4Mjc0QyB9LAoreyAweDI3NEUsIDB4Mjc0RSB9LAoreyAweDI3NTMsIDB4Mjc1NSB9LAoreyAweDI3NTcsIDB4Mjc1NyB9LAoreyAweDI3OTUsIDB4Mjc5NyB9LAoreyAweDI3QjAsIDB4MjdCMCB9LAoreyAweDI3QkYsIDB4MjdCRiB9LAoreyAweDJCMUIsIDB4MkIxQyB9LAoreyAweDJCNTAsIDB4MkI1MCB9LAoreyAweDJCNTUsIDB4MkI1NSB9LAoreyAweDJFODAsIDB4MkU5OSB9LAoreyAweDJFOUIsIDB4MkVGMyB9LAoreyAweDJGMDAsIDB4MkZENSB9LAoreyAweDJGRjAsIDB4MkZGQiB9LAoreyAweDMwMDAsIDB4MzAzRSB9LAoreyAweDMwNDEsIDB4MzA5NiB9LAoreyAweDMwOTksIDB4MzBGRiB9LAoreyAweDMxMDUsIDB4MzEyRiB9LAoreyAweDMxMzEsIDB4MzE4RSB9LAoreyAweDMxOTAsIDB4MzFFMyB9LAoreyAweDMxRjAsIDB4MzIxRSB9LAoreyAweDMyMjAsIDB4MzI0NyB9LAoreyAweDMyNTAsIDB4NERCRiB9LAoreyAweDRFMDAsIDB4QTQ4QyB9LAoreyAweEE0OTAsIDB4QTRDNiB9LAoreyAweEE5NjAsIDB4QTk3QyB9LAoreyAweEFDMDAsIDB4RDdBMyB9LAoreyAweEY5MDAsIDB4RkFGRiB9LAoreyAweEZFMTAsIDB4RkUxOSB9LAoreyAweEZFMzAsIDB4RkU1MiB9LAoreyAweEZFNTQsIDB4RkU2NiB9LAoreyAweEZFNjgsIDB4RkU2QiB9LAoreyAweEZGMDEsIDB4RkY2MCB9LAoreyAweEZGRTAsIDB4RkZFNiB9LAoreyAweDE2RkUwLCAweDE2RkU0IH0sCit7IDB4MTZGRjAsIDB4MTZGRjEgfSwKK3sgMHgxNzAwMCwgMHgxODdGNyB9LAoreyAweDE4ODAwLCAweDE4Q0Q1IH0sCit7IDB4MThEMDAsIDB4MThEMDggfSwKK3sgMHgxQjAwMCwgMHgxQjExRSB9LAoreyAweDFCMTUwLCAweDFCMTUyIH0sCit7IDB4MUIxNjQsIDB4MUIxNjcgfSwKK3sgMHgxQjE3MCwgMHgxQjJGQiB9LAoreyAweDFGMDA0LCAweDFGMDA0IH0sCit7IDB4MUYwQ0YsIDB4MUYwQ0YgfSwKK3sgMHgxRjE4RSwgMHgxRjE4RSB9LAoreyAweDFGMTkxLCAweDFGMTlBIH0sCit7IDB4MUYyMDAsIDB4MUYyMDIgfSwKK3sgMHgxRjIxMCwgMHgxRjIzQiB9LAoreyAweDFGMjQwLCAweDFGMjQ4IH0sCit7IDB4MUYyNTAsIDB4MUYyNTEgfSwKK3sgMHgxRjI2MCwgMHgxRjI2NSB9LAoreyAweDFGMzAwLCAweDFGMzIwIH0sCit7IDB4MUYzMkQsIDB4MUYzMzUgfSwKK3sgMHgxRjMzNywgMHgxRjM3QyB9LAoreyAweDFGMzdFLCAweDFGMzkzIH0sCit7IDB4MUYzQTAsIDB4MUYzQ0EgfSwKK3sgMHgxRjNDRiwgMHgxRjNEMyB9LAoreyAweDFGM0UwLCAweDFGM0YwIH0sCit7IDB4MUYzRjQsIDB4MUYzRjQgfSwKK3sgMHgxRjNGOCwgMHgxRjQzRSB9LAoreyAweDFGNDQwLCAweDFGNDQwIH0sCit7IDB4MUY0NDIsIDB4MUY0RkMgfSwKK3sgMHgxRjRGRiwgMHgxRjUzRCB9LAoreyAweDFGNTRCLCAweDFGNTRFIH0sCit7IDB4MUY1NTAsIDB4MUY1NjcgfSwKK3sgMHgxRjU3QSwgMHgxRjU3QSB9LAoreyAweDFGNTk1LCAweDFGNTk2IH0sCit7IDB4MUY1QTQsIDB4MUY1QTQgfSwKK3sgMHgxRjVGQiwgMHgxRjY0RiB9LAoreyAweDFGNjgwLCAweDFGNkM1IH0sCit7IDB4MUY2Q0MsIDB4MUY2Q0MgfSwKK3sgMHgxRjZEMCwgMHgxRjZEMiB9LAoreyAweDFGNkQ1LCAweDFGNkQ3IH0sCit7IDB4MUY2RUIsIDB4MUY2RUMgfSwKK3sgMHgxRjZGNCwgMHgxRjZGQyB9LAoreyAweDFGN0UwLCAweDFGN0VCIH0sCit7IDB4MUY5MEMsIDB4MUY5M0EgfSwKK3sgMHgxRjkzQywgMHgxRjk0NSB9LAoreyAweDFGOTQ3LCAweDFGOTc4IH0sCit7IDB4MUY5N0EsIDB4MUY5Q0IgfSwKK3sgMHgxRjlDRCwgMHgxRjlGRiB9LAoreyAweDFGQTcwLCAweDFGQTc0IH0sCit7IDB4MUZBNzgsIDB4MUZBN0EgfSwKK3sgMHgxRkE4MCwgMHgxRkE4NiB9LAoreyAweDFGQTkwLCAweDFGQUE4IH0sCit7IDB4MUZBQjAsIDB4MUZBQjYgfSwKK3sgMHgxRkFDMCwgMHgxRkFDMiB9LAoreyAweDFGQUQwLCAweDFGQUQ2IH0sCit7IDB4MjAwMDAsIDB4MkZGRkQgfSwKK3sgMHgzMDAwMCwgMHgzRkZGRCB9Cit9OwpkaWZmIC0tZ2l0IGEvdW5pbXBsZW1lbnRlZC5zaCBiL3VuaW1wbGVtZW50ZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlMjFkMgotLS0gL2Rldi9udWxsCisrKyBiL3VuaW1wbGVtZW50ZWQuc2gKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKKworZWNobyA+JjIgImZhdGFsOiBnaXQgd2FzIGJ1aWx0IHdpdGhvdXQgc3VwcG9ydCBmb3IgJChiYXNlbmFtZSAkMCkgKEBAUkVBU09OQEApLiIKK2V4aXQgMTI4CmRpZmYgLS1naXQgYS91bml4LXNvY2tldC5jIGIvdW5peC1zb2NrZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWVkNDhiCi0tLSAvZGV2L251bGwKKysrIGIvdW5peC1zb2NrZXQuYwpAQCAtMCwwICsxLDEyMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidW5peC1zb2NrZXQuaCIKKworc3RhdGljIGludCB1bml4X3N0cmVhbV9zb2NrZXQodm9pZCkKK3sKKwlpbnQgZmQgPSBzb2NrZXQoQUZfVU5JWCwgU09DS19TVFJFQU0sIDApOworCWlmIChmZCA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSBzb2NrZXQiKTsKKwlyZXR1cm4gZmQ7Cit9CisKK3N0YXRpYyBpbnQgY2hkaXJfbGVuKGNvbnN0IGNoYXIgKm9yaWcsIGludCBsZW4pCit7CisJY2hhciAqcGF0aCA9IHhtZW1kdXB6KG9yaWcsIGxlbik7CisJaW50IHIgPSBjaGRpcihwYXRoKTsKKwlmcmVlKHBhdGgpOworCXJldHVybiByOworfQorCitzdHJ1Y3QgdW5peF9zb2NrYWRkcl9jb250ZXh0IHsKKwljaGFyICpvcmlnX2RpcjsKK307CisKK3N0YXRpYyB2b2lkIHVuaXhfc29ja2FkZHJfY2xlYW51cChzdHJ1Y3QgdW5peF9zb2NrYWRkcl9jb250ZXh0ICpjdHgpCit7CisJaWYgKCFjdHgtPm9yaWdfZGlyKQorCQlyZXR1cm47CisJLyoKKwkgKiBJZiB3ZSBmYWlsLCB3ZSBjYW4ndCBqdXN0IHJldHVybiBhbiBlcnJvciwgc2luY2Ugd2UgaGF2ZQorCSAqIG1vdmVkIHRoZSBjd2Qgb2YgdGhlIHdob2xlIHByb2Nlc3MsIHdoaWNoIGNvdWxkIGNvbmZ1c2UgY2FsbGluZworCSAqIGNvZGUuICBXZSBhcmUgYmV0dGVyIG9mZiB0byBqdXN0IGRpZS4KKwkgKi8KKwlpZiAoY2hkaXIoY3R4LT5vcmlnX2RpcikgPCAwKQorCQlkaWUoInVuYWJsZSB0byByZXN0b3JlIG9yaWdpbmFsIHdvcmtpbmcgZGlyZWN0b3J5Iik7CisJZnJlZShjdHgtPm9yaWdfZGlyKTsKK30KKworc3RhdGljIGludCB1bml4X3NvY2thZGRyX2luaXQoc3RydWN0IHNvY2thZGRyX3VuICpzYSwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICAgIHN0cnVjdCB1bml4X3NvY2thZGRyX2NvbnRleHQgKmN0eCkKK3sKKwlpbnQgc2l6ZSA9IHN0cmxlbihwYXRoKSArIDE7CisKKwljdHgtPm9yaWdfZGlyID0gTlVMTDsKKwlpZiAoc2l6ZSA+IHNpemVvZihzYS0+c3VuX3BhdGgpKSB7CisJCWNvbnN0IGNoYXIgKnNsYXNoID0gZmluZF9sYXN0X2Rpcl9zZXAocGF0aCk7CisJCWNvbnN0IGNoYXIgKmRpcjsKKwkJc3RydWN0IHN0cmJ1ZiBjd2QgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoIXNsYXNoKSB7CisJCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWRpciA9IHBhdGg7CisJCXBhdGggPSBzbGFzaCArIDE7CisJCXNpemUgPSBzdHJsZW4ocGF0aCkgKyAxOworCQlpZiAoc2l6ZSA+IHNpemVvZihzYS0+c3VuX3BhdGgpKSB7CisJCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoc3RyYnVmX2dldGN3ZCgmY3dkKSkKKwkJCXJldHVybiAtMTsKKwkJY3R4LT5vcmlnX2RpciA9IHN0cmJ1Zl9kZXRhY2goJmN3ZCwgTlVMTCk7CisJCWlmIChjaGRpcl9sZW4oZGlyLCBzbGFzaCAtIGRpcikgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCW1lbXNldChzYSwgMCwgc2l6ZW9mKCpzYSkpOworCXNhLT5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKwltZW1jcHkoc2EtPnN1bl9wYXRoLCBwYXRoLCBzaXplKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHVuaXhfc3RyZWFtX2Nvbm5lY3QoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgZmQsIHNhdmVkX2Vycm5vOworCXN0cnVjdCBzb2NrYWRkcl91biBzYTsKKwlzdHJ1Y3QgdW5peF9zb2NrYWRkcl9jb250ZXh0IGN0eDsKKworCWlmICh1bml4X3NvY2thZGRyX2luaXQoJnNhLCBwYXRoLCAmY3R4KSA8IDApCisJCXJldHVybiAtMTsKKwlmZCA9IHVuaXhfc3RyZWFtX3NvY2tldCgpOworCWlmIChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNhLCBzaXplb2Yoc2EpKSA8IDApCisJCWdvdG8gZmFpbDsKKwl1bml4X3NvY2thZGRyX2NsZWFudXAoJmN0eCk7CisJcmV0dXJuIGZkOworCitmYWlsOgorCXNhdmVkX2Vycm5vID0gZXJybm87CisJdW5peF9zb2NrYWRkcl9jbGVhbnVwKCZjdHgpOworCWNsb3NlKGZkKTsKKwllcnJubyA9IHNhdmVkX2Vycm5vOworCXJldHVybiAtMTsKK30KKworaW50IHVuaXhfc3RyZWFtX2xpc3Rlbihjb25zdCBjaGFyICpwYXRoKQoreworCWludCBmZCwgc2F2ZWRfZXJybm87CisJc3RydWN0IHNvY2thZGRyX3VuIHNhOworCXN0cnVjdCB1bml4X3NvY2thZGRyX2NvbnRleHQgY3R4OworCisJdW5saW5rKHBhdGgpOworCisJaWYgKHVuaXhfc29ja2FkZHJfaW5pdCgmc2EsIHBhdGgsICZjdHgpIDwgMCkKKwkJcmV0dXJuIC0xOworCWZkID0gdW5peF9zdHJlYW1fc29ja2V0KCk7CisKKwlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzYSwgc2l6ZW9mKHNhKSkgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlpZiAobGlzdGVuKGZkLCA1KSA8IDApCisJCWdvdG8gZmFpbDsKKworCXVuaXhfc29ja2FkZHJfY2xlYW51cCgmY3R4KTsKKwlyZXR1cm4gZmQ7CisKK2ZhaWw6CisJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwl1bml4X3NvY2thZGRyX2NsZWFudXAoJmN0eCk7CisJY2xvc2UoZmQpOworCWVycm5vID0gc2F2ZWRfZXJybm87CisJcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvdW5peC1zb2NrZXQuaCBiL3VuaXgtc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3MWFlZQotLS0gL2Rldi9udWxsCisrKyBiL3VuaXgtc29ja2V0LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIFVOSVhfU09DS0VUX0gKKyNkZWZpbmUgVU5JWF9TT0NLRVRfSAorCitpbnQgdW5peF9zdHJlYW1fY29ubmVjdChjb25zdCBjaGFyICpwYXRoKTsKK2ludCB1bml4X3N0cmVhbV9saXN0ZW4oY29uc3QgY2hhciAqcGF0aCk7CisKKyNlbmRpZiAvKiBVTklYX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS91bnBhY2stdHJlZXMuYyBiL3VucGFjay10cmVlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZTVmYzMKLS0tIC9kZXYvbnVsbAorKysgYi91bnBhY2stdHJlZXMuYwpAQCAtMCwwICsxLDI1NjMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAic3BsaXQtaW5kZXguaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUtY29uZmlnLmgiCisjaW5jbHVkZSAiZnNtb25pdG9yLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicHJvbWlzb3ItcmVtb3RlLmgiCisKKy8qCisgKiBFcnJvciBtZXNzYWdlcyBleHBlY3RlZCBieSBzY3JpcHRzIG91dCBvZiBwbHVtYmluZyBjb21tYW5kcyBzdWNoIGFzCisgKiByZWFkLXRyZWUuICBOb24tc2NyaXB0ZWQgUG9yY2VsYWluIGlzIG5vdCByZXF1aXJlZCB0byB1c2UgdGhlc2UgbWVzc2FnZXMKKyAqIGFuZCBpbiBmYWN0IGFyZSBlbmNvdXJhZ2VkIHRvIHJld29yZCB0aGVtIHRvIGJldHRlciBzdWl0IHRoZWlyIHBhcnRpY3VsYXIKKyAqIHNpdHVhdGlvbiBiZXR0ZXIuICBTZWUgaG93ICJnaXQgY2hlY2tvdXQiIGFuZCAiZ2l0IG1lcmdlIiByZXBsYWNlcworICogdGhlbSB1c2luZyBzZXR1cF91bnBhY2tfdHJlZXNfcG9yY2VsYWluKCksIGZvciBleGFtcGxlLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqdW5wYWNrX3BsdW1iaW5nX2Vycm9yc1tOQl9VTlBBQ0tfVFJFRVNfV0FSTklOR19UWVBFU10gPSB7CisJLyogRVJST1JfV09VTERfT1ZFUldSSVRFICovCisJIkVudHJ5ICclcycgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UuIENhbm5vdCBtZXJnZS4iLAorCisJLyogRVJST1JfTk9UX1VQVE9EQVRFX0ZJTEUgKi8KKwkiRW50cnkgJyVzJyBub3QgdXB0b2RhdGUuIENhbm5vdCBtZXJnZS4iLAorCisJLyogRVJST1JfTk9UX1VQVE9EQVRFX0RJUiAqLworCSJVcGRhdGluZyAnJXMnIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIGl0IiwKKworCS8qIEVSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX09WRVJXUklUVEVOICovCisJIlVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZSAnJXMnIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlLiIsCisKKwkvKiBFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9SRU1PVkVEICovCisJIlVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZSAnJXMnIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2UuIiwKKworCS8qIEVSUk9SX0JJTkRfT1ZFUkxBUCAqLworCSJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiIsCisKKwkvKiBFUlJPUl9XT1VMRF9MT1NFX1NVQk1PRFVMRSAqLworCSJTdWJtb2R1bGUgJyVzJyBjYW5ub3QgY2hlY2tvdXQgbmV3IEhFQUQuIiwKKworCS8qIE5CX1VOUEFDS19UUkVFU19FUlJPUl9UWVBFUzsganVzdCBhIG1ldGEgdmFsdWUgKi8KKwkiIiwKKworCS8qIFdBUk5JTkdfU1BBUlNFX05PVF9VUFRPREFURV9GSUxFICovCisJIlBhdGggJyVzJyBub3QgdXB0b2RhdGU7IHdpbGwgbm90IHJlbW92ZSBmcm9tIHdvcmtpbmcgdHJlZS4iLAorCisJLyogV0FSTklOR19TUEFSU0VfVU5NRVJHRURfRklMRSAqLworCSJQYXRoICclcycgdW5tZXJnZWQ7IHdpbGwgbm90IHJlbW92ZSBmcm9tIHdvcmtpbmcgdHJlZS4iLAorCisJLyogV0FSTklOR19TUEFSU0VfT1JQSEFORURfTk9UX09WRVJXUklUVEVOICovCisJIlBhdGggJyVzJyBhbHJlYWR5IHByZXNlbnQ7IHdpbGwgbm90IG92ZXJ3cml0ZSB3aXRoIHNwYXJzZSB1cGRhdGUuIiwKK307CisKKyNkZWZpbmUgRVJST1JNU0cobyx0eXBlKSBcCisJKCAoKG8pICYmIChvKS0+bXNnc1sodHlwZSldKSBcCisJICA/ICgobyktPm1zZ3NbKHR5cGUpXSkgICAgICBcCisJICA6ICh1bnBhY2tfcGx1bWJpbmdfZXJyb3JzWyh0eXBlKV0pICkKKworc3RhdGljIGNvbnN0IGNoYXIgKnN1cGVyX3ByZWZpeGVkKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJLyoKKwkgKiBJdCBpcyBuZWNlc3NhcnkgYW5kIHN1ZmZpY2llbnQgdG8gaGF2ZSB0d28gc3RhdGljIGJ1ZmZlcnMKKwkgKiBoZXJlLCBhcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gaXMgZmVkIHRvCisJICogZXJyb3IoKSB1c2luZyB0aGUgdW5wYWNrXypfZXJyb3JzW10gdGVtcGxhdGVzIHdlIHNlZSBhYm92ZS4KKwkgKi8KKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWZbMl0gPSB7U1RSQlVGX0lOSVQsIFNUUkJVRl9JTklUfTsKKwlzdGF0aWMgaW50IHN1cGVyX3ByZWZpeF9sZW4gPSAtMTsKKwlzdGF0aWMgdW5zaWduZWQgaWR4ID0gQVJSQVlfU0laRShidWYpIC0gMTsKKworCWlmIChzdXBlcl9wcmVmaXhfbGVuIDwgMCkgeworCQljb25zdCBjaGFyICpzdXBlcl9wcmVmaXggPSBnZXRfc3VwZXJfcHJlZml4KCk7CisJCWlmICghc3VwZXJfcHJlZml4KSB7CisJCQlzdXBlcl9wcmVmaXhfbGVuID0gMDsKKwkJfSBlbHNlIHsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVmKTsgaSsrKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZltpXSwgc3VwZXJfcHJlZml4KTsKKwkJCXN1cGVyX3ByZWZpeF9sZW4gPSBidWZbMF0ubGVuOworCQl9CisJfQorCisJaWYgKCFzdXBlcl9wcmVmaXhfbGVuKQorCQlyZXR1cm4gcGF0aDsKKworCWlmICgrK2lkeCA+PSBBUlJBWV9TSVpFKGJ1ZikpCisJCWlkeCA9IDA7CisKKwlzdHJidWZfc2V0bGVuKCZidWZbaWR4XSwgc3VwZXJfcHJlZml4X2xlbik7CisJc3RyYnVmX2FkZHN0cigmYnVmW2lkeF0sIHBhdGgpOworCisJcmV0dXJuIGJ1ZltpZHhdLmJ1ZjsKK30KKwordm9pZCBzZXR1cF91bnBhY2tfdHJlZXNfcG9yY2VsYWluKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqb3B0cywKKwkJCQkgIGNvbnN0IGNoYXIgKmNtZCkKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICoqbXNncyA9IG9wdHMtPm1zZ3M7CisJY29uc3QgY2hhciAqbXNnOworCisJYXJndl9hcnJheV9pbml0KCZvcHRzLT5tc2dzX3RvX2ZyZWUpOworCisJaWYgKCFzdHJjbXAoY21kLCAiY2hlY2tvdXQiKSkKKwkJbXNnID0gYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UKKwkJICAgICAgPyBfKCJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiUlcyIKKwkJCSAgIlBsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIikKKwkJICAgICAgOiBfKCJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiUlcyIpOworCWVsc2UgaWYgKCFzdHJjbXAoY21kLCAibWVyZ2UiKSkKKwkJbXNnID0gYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UKKwkJICAgICAgPyBfKCJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiUlcyIKKwkJCSAgIlBsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iKQorCQkgICAgICA6IF8oIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuJSVzIik7CisJZWxzZQorCQltc2cgPSBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZQorCQkgICAgICA/IF8oIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuJSVzIgorCQkJICAiUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91ICVzLiIpCisJCSAgICAgIDogXygiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4lJXMiKTsKKwltc2dzW0VSUk9SX1dPVUxEX09WRVJXUklURV0gPSBtc2dzW0VSUk9SX05PVF9VUFRPREFURV9GSUxFXSA9CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJm9wdHMtPm1zZ3NfdG9fZnJlZSwgbXNnLCBjbWQsIGNtZCk7CisKKwltc2dzW0VSUk9SX05PVF9VUFRPREFURV9ESVJdID0KKwkJXygiVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVtOlxuJXMiKTsKKworCWlmICghc3RyY21wKGNtZCwgImNoZWNrb3V0IikpCisJCW1zZyA9IGFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlCisJCSAgICAgID8gXygiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4lJXMiCisJCQkgICJQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iKQorCQkgICAgICA6IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuJSVzIik7CisJZWxzZSBpZiAoIXN0cmNtcChjbWQsICJtZXJnZSIpKQorCQltc2cgPSBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZQorCQkgICAgICA/IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuJSVzIgorCQkJICAiUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iKQorCQkgICAgICA6IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuJSVzIik7CisJZWxzZQorCQltc2cgPSBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZQorCQkgICAgICA/IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuJSVzIgorCQkJICAiUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iKQorCQkgICAgICA6IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuJSVzIik7CisJbXNnc1tFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9SRU1PVkVEXSA9CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJm9wdHMtPm1zZ3NfdG9fZnJlZSwgbXNnLCBjbWQsIGNtZCk7CisKKwlpZiAoIXN0cmNtcChjbWQsICJjaGVja291dCIpKQorCQltc2cgPSBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZQorCQkgICAgICA/IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiUlcyIKKwkJCSAgIlBsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIpCisJCSAgICAgIDogXygiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuJSVzIik7CisJZWxzZSBpZiAoIXN0cmNtcChjbWQsICJtZXJnZSIpKQorCQltc2cgPSBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZQorCQkgICAgICA/IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiUlcyIKKwkJCSAgIlBsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIikKKwkJICAgICAgOiBfKCJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4lJXMiKTsKKwllbHNlCisJCW1zZyA9IGFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlCisJCSAgICAgID8gXygiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuJSVzIgorCQkJICAiUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iKQorCQkgICAgICA6IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiUlcyIpOworCW1zZ3NbRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfT1ZFUldSSVRURU5dID0KKwkJYXJndl9hcnJheV9wdXNoZigmb3B0cy0+bXNnc190b19mcmVlLCBtc2csIGNtZCwgY21kKTsKKworCS8qCisJICogU3BlY2lhbCBjYXNlOiBFUlJPUl9CSU5EX09WRVJMQVAgcmVmZXJzIHRvIGEgcGFpciBvZiBwYXRocywgd2UKKwkgKiBjYW5ub3QgZWFzaWx5IGRpc3BsYXkgaXQgYXMgYSBsaXN0LgorCSAqLworCW1zZ3NbRVJST1JfQklORF9PVkVSTEFQXSA9IF8oIkVudHJ5ICclcycgb3ZlcmxhcHMgd2l0aCAnJXMnLiAgQ2Fubm90IGJpbmQuIik7CisKKwltc2dzW0VSUk9SX1dPVUxEX0xPU0VfU1VCTU9EVUxFXSA9CisJCV8oIkNhbm5vdCB1cGRhdGUgc3VibW9kdWxlOlxuJXMiKTsKKworCW1zZ3NbV0FSTklOR19TUEFSU0VfTk9UX1VQVE9EQVRFX0ZJTEVdID0KKwkJXygiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgbm90IHVwIHRvIGRhdGUgYW5kIHdlcmUgbGVmdCBkZXNwaXRlIHNwYXJzZSBwYXR0ZXJuczpcbiVzIik7CisJbXNnc1tXQVJOSU5HX1NQQVJTRV9VTk1FUkdFRF9GSUxFXSA9CisJCV8oIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIHVubWVyZ2VkIGFuZCB3ZXJlIGxlZnQgZGVzcGl0ZSBzcGFyc2UgcGF0dGVybnM6XG4lcyIpOworCW1zZ3NbV0FSTklOR19TUEFSU0VfT1JQSEFORURfTk9UX09WRVJXUklUVEVOXSA9CisJCV8oIlRoZSBmb2xsb3dpbmcgcGF0aHMgd2VyZSBhbHJlYWR5IHByZXNlbnQgYW5kIHRodXMgbm90IHVwZGF0ZWQgZGVzcGl0ZSBzcGFyc2UgcGF0dGVybnM6XG4lcyIpOworCisJb3B0cy0+c2hvd19hbGxfZXJyb3JzID0gMTsKKwkvKiByZWplY3RlZCBwYXRocyBtYXkgbm90IGhhdmUgYSBzdGF0aWMgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3B0cy0+dW5wYWNrX3JlamVjdHMpOyBpKyspCisJCW9wdHMtPnVucGFja19yZWplY3RzW2ldLnN0cmR1cF9zdHJpbmdzID0gMTsKK30KKwordm9pZCBjbGVhcl91bnBhY2tfdHJlZXNfcG9yY2VsYWluKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqb3B0cykKK3sKKwlhcmd2X2FycmF5X2NsZWFyKCZvcHRzLT5tc2dzX3RvX2ZyZWUpOworCW1lbXNldChvcHRzLT5tc2dzLCAwLCBzaXplb2Yob3B0cy0+bXNncykpOworfQorCitzdGF0aWMgaW50IGRvX2FkZF9lbnRyeShzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8sIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCWNsZWFyIHw9IENFX0hBU0hFRDsKKworCWlmIChzZXQgJiBDRV9SRU1PVkUpCisJCXNldCB8PSBDRV9XVF9SRU1PVkU7CisKKwljZS0+Y2VfZmxhZ3MgPSAoY2UtPmNlX2ZsYWdzICYgfmNsZWFyKSB8IHNldDsKKwlyZXR1cm4gYWRkX2luZGV4X2VudHJ5KCZvLT5yZXN1bHQsIGNlLAorCQkJICAgICAgIEFERF9DQUNIRV9PS19UT19BREQgfCBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9lbnRyeShzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8sCisJCSAgICAgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCSAgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlkb19hZGRfZW50cnkobywgZHVwX2NhY2hlX2VudHJ5KGNlLCAmby0+cmVzdWx0KSwgc2V0LCBjbGVhcik7Cit9CisKKy8qCisgKiBhZGQgZXJyb3IgbWVzc2FnZXMgb24gcGF0aCA8cGF0aD4KKyAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUgPGU+IHdpdGggdGhlIG1lc3NhZ2UgPG1zZz4KKyAqIGluZGljYXRpbmcgaWYgaXQgc2hvdWxkIGJlIGRpc3BsYXkgaW4gcG9yY2VsYWluIG9yIG5vdAorICovCitzdGF0aWMgaW50IGFkZF9yZWplY3RlZF9wYXRoKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywKKwkJCSAgICAgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZSwKKwkJCSAgICAgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoby0+cXVpZXQpCisJCXJldHVybiAtMTsKKworCWlmICghby0+c2hvd19hbGxfZXJyb3JzKQorCQlyZXR1cm4gZXJyb3IoRVJST1JNU0cobywgZSksIHN1cGVyX3ByZWZpeGVkKHBhdGgpKTsKKworCS8qCisJICogT3RoZXJ3aXNlLCBpbnNlcnQgaW4gYSBsaXN0IGZvciBmdXR1cmUgZGlzcGxheSBieQorCSAqIGRpc3BsYXlfKGVycm9yfHdhcm5pbmcpX21zZ3MoKQorCSAqLworCXN0cmluZ19saXN0X2FwcGVuZCgmby0+dW5wYWNrX3JlamVjdHNbZV0sIHBhdGgpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIGRpc3BsYXkgYWxsIHRoZSBlcnJvciBtZXNzYWdlcyBzdG9yZWQgaW4gYSBuaWNlIHdheQorICovCitzdGF0aWMgdm9pZCBkaXNwbGF5X2Vycm9yX21zZ3Moc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWludCBlOworCXVuc2lnbmVkIGVycm9yX2Rpc3BsYXllZCA9IDA7CisJZm9yIChlID0gMDsgZSA8IE5CX1VOUEFDS19UUkVFU19FUlJPUl9UWVBFUzsgZSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVqZWN0cyA9ICZvLT51bnBhY2tfcmVqZWN0c1tlXTsKKworCQlpZiAocmVqZWN0cy0+bnIgPiAwKSB7CisJCQlpbnQgaTsKKwkJCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCisJCQllcnJvcl9kaXNwbGF5ZWQgPSAxOworCQkJZm9yIChpID0gMDsgaSA8IHJlamVjdHMtPm5yOyBpKyspCisJCQkJc3RyYnVmX2FkZGYoJnBhdGgsICJcdCVzXG4iLCByZWplY3RzLT5pdGVtc1tpXS5zdHJpbmcpOworCQkJZXJyb3IoRVJST1JNU0cobywgZSksIHN1cGVyX3ByZWZpeGVkKHBhdGguYnVmKSk7CisJCQlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJCX0KKwkJc3RyaW5nX2xpc3RfY2xlYXIocmVqZWN0cywgMCk7CisJfQorCWlmIChlcnJvcl9kaXNwbGF5ZWQpCisJCWZwcmludGYoc3RkZXJyLCBfKCJBYm9ydGluZ1xuIikpOworfQorCisvKgorICogZGlzcGxheSBhbGwgdGhlIHdhcm5pbmcgbWVzc2FnZXMgc3RvcmVkIGluIGEgbmljZSB3YXkKKyAqLworc3RhdGljIHZvaWQgZGlzcGxheV93YXJuaW5nX21zZ3Moc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWludCBlOworCXVuc2lnbmVkIHdhcm5pbmdfZGlzcGxheWVkID0gMDsKKwlmb3IgKGUgPSBOQl9VTlBBQ0tfVFJFRVNfRVJST1JfVFlQRVMgKyAxOworCSAgICAgZSA8IE5CX1VOUEFDS19UUkVFU19XQVJOSU5HX1RZUEVTOyBlKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0ICpyZWplY3RzID0gJm8tPnVucGFja19yZWplY3RzW2VdOworCisJCWlmIChyZWplY3RzLT5uciA+IDApIHsKKwkJCWludCBpOworCQkJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisKKwkJCXdhcm5pbmdfZGlzcGxheWVkID0gMTsKKwkJCWZvciAoaSA9IDA7IGkgPCByZWplY3RzLT5ucjsgaSsrKQorCQkJCXN0cmJ1Zl9hZGRmKCZwYXRoLCAiXHQlc1xuIiwgcmVqZWN0cy0+aXRlbXNbaV0uc3RyaW5nKTsKKwkJCXdhcm5pbmcoRVJST1JNU0cobywgZSksIHN1cGVyX3ByZWZpeGVkKHBhdGguYnVmKSk7CisJCQlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJCX0KKwkJc3RyaW5nX2xpc3RfY2xlYXIocmVqZWN0cywgMCk7CisJfQorCWlmICh3YXJuaW5nX2Rpc3BsYXllZCkKKwkJZnByaW50ZihzdGRlcnIsIF8oIkFmdGVyIGZpeGluZyB0aGUgYWJvdmUgcGF0aHMsIHlvdSBtYXkgd2FudCB0byBydW4gYGdpdCBzcGFyc2UtY2hlY2tvdXQgcmVhcHBseWAuXG4iKSk7Cit9CitzdGF0aWMgaW50IGNoZWNrX3N1Ym1vZHVsZV9tb3ZlX2hlYWQoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKm9sZF9pZCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKm5ld19pZCwKKwkJCQkgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwl1bnNpZ25lZCBmbGFncyA9IFNVQk1PRFVMRV9NT1ZFX0hFQURfRFJZX1JVTjsKKwljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWIgPSBzdWJtb2R1bGVfZnJvbV9jZShjZSk7CisKKwlpZiAoIXN1YikKKwkJcmV0dXJuIDA7CisKKwlpZiAoby0+cmVzZXQpCisJCWZsYWdzIHw9IFNVQk1PRFVMRV9NT1ZFX0hFQURfRk9SQ0U7CisKKwlpZiAoc3VibW9kdWxlX21vdmVfaGVhZChjZS0+bmFtZSwgb2xkX2lkLCBuZXdfaWQsIGZsYWdzKSkKKwkJcmV0dXJuIGFkZF9yZWplY3RlZF9wYXRoKG8sIEVSUk9SX1dPVUxEX0xPU0VfU1VCTU9EVUxFLCBjZS0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQZXJmb3JtIHRoZSBsb2FkaW5nIG9mIHRoZSByZXBvc2l0b3J5J3MgZ2l0bW9kdWxlcyBmaWxlLiAgVGhpcyBmdW5jdGlvbiBpcworICogdXNlZCBieSAnY2hlY2tfdXBkYXRlKCknIHRvIHBlcmZvcm0gbG9hZGluZyBvZiB0aGUgZ2l0bW9kdWxlcyBmaWxlIGluIHR3bworICogZGlmZmVyZW50IHNpdHVhdGlvbnM6CisgKiAoMSkgYmVmb3JlIHJlbW92aW5nIGVudHJpZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGlmIHRoZSBnaXRtb2R1bGVzIGZpbGUgaGFzCisgKiAgICAgYmVlbiBtYXJrZWQgZm9yIHJlbW92YWwuICBUaGlzIHNpdHVhdGlvbiBpcyBzcGVjaWZpZWQgYnkgJ3N0YXRlJyA9PSBOVUxMLgorICogKDIpIGJlZm9yZSBjaGVja2luZyBvdXQgZW50cmllcyB0byB0aGUgd29ya2luZyB0cmVlIGlmIHRoZSBnaXRtb2R1bGVzIGZpbGUKKyAqICAgICBoYXMgYmVlbiBtYXJrZWQgZm9yIHVwZGF0ZS4gIFRoaXMgc2l0dWF0aW9uIGlzIHNwZWNpZmllZCBieSAnc3RhdGUnICE9IE5VTEwuCisgKi8KK3N0YXRpYyB2b2lkIGxvYWRfZ2l0bW9kdWxlc19maWxlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXgsCisJCQkJIHN0cnVjdCBjaGVja291dCAqc3RhdGUpCit7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGluZGV4LCBHSVRNT0RVTEVTX0ZJTEUsIHN0cmxlbihHSVRNT0RVTEVTX0ZJTEUpKTsKKworCWlmIChwb3MgPj0gMCkgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW3Bvc107CisJCWlmICghc3RhdGUgJiYgY2UtPmNlX2ZsYWdzICYgQ0VfV1RfUkVNT1ZFKSB7CisJCQlyZXBvX3JlYWRfZ2l0bW9kdWxlcyh0aGVfcmVwb3NpdG9yeSwgMCk7CisJCX0gZWxzZSBpZiAoc3RhdGUgJiYgKGNlLT5jZV9mbGFncyAmIENFX1VQREFURSkpIHsKKwkJCXN1Ym1vZHVsZV9mcmVlKHRoZV9yZXBvc2l0b3J5KTsKKwkJCWNoZWNrb3V0X2VudHJ5KGNlLCBzdGF0ZSwgTlVMTCwgTlVMTCk7CisJCQlyZXBvX3JlYWRfZ2l0bW9kdWxlcyh0aGVfcmVwb3NpdG9yeSwgMCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvZ3Jlc3MgKmdldF9wcm9ncmVzcyhzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8sCisJCQkJICAgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4KQoreworCXVuc2lnbmVkIGNudCA9IDAsIHRvdGFsID0gMDsKKworCWlmICghby0+dXBkYXRlIHx8ICFvLT52ZXJib3NlX3VwZGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKDsgY250IDwgaW5kZXgtPmNhY2hlX25yOyBjbnQrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW2NudF07CisJCWlmIChjZS0+Y2VfZmxhZ3MgJiAoQ0VfVVBEQVRFIHwgQ0VfV1RfUkVNT1ZFKSkKKwkJCXRvdGFsKys7CisJfQorCisJcmV0dXJuIHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoXygiVXBkYXRpbmcgZmlsZXMiKSwgdG90YWwpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9jb2xsaWRlZF9jaGVja291dF9kZXRlY3Rpb24oc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwKKwkJCQkJICAgICAgc3RydWN0IGluZGV4X3N0YXRlICppbmRleCkKK3sKKwlpbnQgaTsKKworCXN0YXRlLT5jbG9uZSA9IDE7CisJZm9yIChpID0gMDsgaSA8IGluZGV4LT5jYWNoZV9ucjsgaSsrKQorCQlpbmRleC0+Y2FjaGVbaV0tPmNlX2ZsYWdzICY9IH5DRV9NQVRDSEVEOworfQorCitzdGF0aWMgdm9pZCByZXBvcnRfY29sbGlkZWRfY2hlY2tvdXQoc3RydWN0IGluZGV4X3N0YXRlICppbmRleCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXgtPmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGluZGV4LT5jYWNoZVtpXTsKKworCQlpZiAoIShjZS0+Y2VfZmxhZ3MgJiBDRV9NQVRDSEVEKSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmluZ19saXN0X2FwcGVuZCgmbGlzdCwgY2UtPm5hbWUpOworCQljZS0+Y2VfZmxhZ3MgJj0gfkNFX01BVENIRUQ7CisJfQorCisJbGlzdC5jbXAgPSBmc3BhdGhjbXA7CisJc3RyaW5nX2xpc3Rfc29ydCgmbGlzdCk7CisKKwlpZiAobGlzdC5ucikgeworCQl3YXJuaW5nKF8oInRoZSBmb2xsb3dpbmcgcGF0aHMgaGF2ZSBjb2xsaWRlZCAoZS5nLiBjYXNlLXNlbnNpdGl2ZSBwYXRoc1xuIgorCQkJICAib24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pIGFuZCBvbmx5IG9uZSBmcm9tIHRoZSBzYW1lXG4iCisJCQkgICJjb2xsaWRpbmcgZ3JvdXAgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZTpcbiIpKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbGlzdC5ucjsgaSsrKQorCQkJZnByaW50ZihzdGRlcnIsICIgICclcydcbiIsIGxpc3QuaXRlbXNbaV0uc3RyaW5nKTsKKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfdXBkYXRlcyhzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8sCisJCQkgc3RydWN0IGluZGV4X3N0YXRlICppbmRleCkKK3sKKwl1bnNpZ25lZCBjbnQgPSAwOworCWludCBlcnJzID0gMDsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOworCXN0cnVjdCBjaGVja291dCBzdGF0ZSA9IENIRUNLT1VUX0lOSVQ7CisJaW50IGk7CisKKwl0cmFjZV9wZXJmb3JtYW5jZV9lbnRlcigpOworCXN0YXRlLmZvcmNlID0gMTsKKwlzdGF0ZS5xdWlldCA9IDE7CisJc3RhdGUucmVmcmVzaF9jYWNoZSA9IDE7CisJc3RhdGUuaXN0YXRlID0gaW5kZXg7CisJY2xvbmVfY2hlY2tvdXRfbWV0YWRhdGEoJnN0YXRlLm1ldGEsICZvLT5tZXRhLCBOVUxMKTsKKworCWlmICghby0+dXBkYXRlIHx8IG8tPmRyeV9ydW4pIHsKKwkJcmVtb3ZlX21hcmtlZF9jYWNoZV9lbnRyaWVzKGluZGV4LCAwKTsKKwkJdHJhY2VfcGVyZm9ybWFuY2VfbGVhdmUoImNoZWNrX3VwZGF0ZXMiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG8tPmNsb25lKQorCQlzZXR1cF9jb2xsaWRlZF9jaGVja291dF9kZXRlY3Rpb24oJnN0YXRlLCBpbmRleCk7CisKKwlwcm9ncmVzcyA9IGdldF9wcm9ncmVzcyhvLCBpbmRleCk7CisKKwlnaXRfYXR0cl9zZXRfZGlyZWN0aW9uKEdJVF9BVFRSX0NIRUNLT1VUKTsKKworCWlmIChzaG91bGRfdXBkYXRlX3N1Ym1vZHVsZXMoKSkKKwkJbG9hZF9naXRtb2R1bGVzX2ZpbGUoaW5kZXgsIE5VTEwpOworCisJZm9yIChpID0gMDsgaSA8IGluZGV4LT5jYWNoZV9ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpbmRleC0+Y2FjaGVbaV07CisKKwkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1dUX1JFTU9WRSkgeworCQkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgKytjbnQpOworCQkJdW5saW5rX2VudHJ5KGNlKTsKKwkJfQorCX0KKworCXJlbW92ZV9tYXJrZWRfY2FjaGVfZW50cmllcyhpbmRleCwgMCk7CisJcmVtb3ZlX3NjaGVkdWxlZF9kaXJzKCk7CisKKwlpZiAoc2hvdWxkX3VwZGF0ZV9zdWJtb2R1bGVzKCkpCisJCWxvYWRfZ2l0bW9kdWxlc19maWxlKGluZGV4LCAmc3RhdGUpOworCisJZW5hYmxlX2RlbGF5ZWRfY2hlY2tvdXQoJnN0YXRlKTsKKwlpZiAoaGFzX3Byb21pc29yX3JlbW90ZSgpKSB7CisJCS8qCisJCSAqIFByZWZldGNoIHRoZSBvYmplY3RzIHRoYXQgYXJlIHRvIGJlIGNoZWNrZWQgb3V0IGluIHRoZSBsb29wCisJCSAqIGJlbG93LgorCQkgKi8KKwkJc3RydWN0IG9pZF9hcnJheSB0b19mZXRjaCA9IE9JRF9BUlJBWV9JTklUOworCQlmb3IgKGkgPSAwOyBpIDwgaW5kZXgtPmNhY2hlX25yOyBpKyspIHsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpbmRleC0+Y2FjaGVbaV07CisKKwkJCWlmICghKGNlLT5jZV9mbGFncyAmIENFX1VQREFURSkgfHwKKwkJCSAgICBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQkJY29udGludWU7CisJCQlpZiAoIW9pZF9vYmplY3RfaW5mb19leHRlbmRlZCh0aGVfcmVwb3NpdG9yeSwgJmNlLT5vaWQsCisJCQkJCQkgICAgICBOVUxMLAorCQkJCQkJICAgICAgT0JKRUNUX0lORk9fRk9SX1BSRUZFVENIKSkKKwkJCQljb250aW51ZTsKKwkJCW9pZF9hcnJheV9hcHBlbmQoJnRvX2ZldGNoLCAmY2UtPm9pZCk7CisJCX0KKwkJcHJvbWlzb3JfcmVtb3RlX2dldF9kaXJlY3QodGhlX3JlcG9zaXRvcnksCisJCQkJCSAgIHRvX2ZldGNoLm9pZCwgdG9fZmV0Y2gubnIpOworCQlvaWRfYXJyYXlfY2xlYXIoJnRvX2ZldGNoKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGluZGV4LT5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpbmRleC0+Y2FjaGVbaV07CisKKwkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1VQREFURSkgeworCQkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1dUX1JFTU9WRSkKKwkJCQlCVUcoImJvdGggdXBkYXRlIGFuZCBkZWxldGUgZmxhZ3MgYXJlIHNldCBvbiAlcyIsCisJCQkJICAgIGNlLT5uYW1lKTsKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsrY250KTsKKwkJCWNlLT5jZV9mbGFncyAmPSB+Q0VfVVBEQVRFOworCQkJZXJycyB8PSBjaGVja291dF9lbnRyeShjZSwgJnN0YXRlLCBOVUxMLCBOVUxMKTsKKwkJfQorCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisJZXJycyB8PSBmaW5pc2hfZGVsYXllZF9jaGVja291dCgmc3RhdGUsIE5VTEwpOworCWdpdF9hdHRyX3NldF9kaXJlY3Rpb24oR0lUX0FUVFJfQ0hFQ0tJTik7CisKKwlpZiAoby0+Y2xvbmUpCisJCXJlcG9ydF9jb2xsaWRlZF9jaGVja291dChpbmRleCk7CisKKwl0cmFjZV9wZXJmb3JtYW5jZV9sZWF2ZSgiY2hlY2tfdXBkYXRlcyIpOworCXJldHVybiBlcnJzICE9IDA7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X3VwdG9kYXRlX3NwYXJzZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCSAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKTsKK3N0YXRpYyBpbnQgdmVyaWZ5X2Fic2VudF9zcGFyc2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQllbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcywKKwkJCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworCitzdGF0aWMgaW50IGFwcGx5X3NwYXJzZV9jaGVja291dChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWludCB3YXNfc2tpcF93b3JrdHJlZSA9IGNlX3NraXBfd29ya3RyZWUoY2UpOworCisJaWYgKGNlLT5jZV9mbGFncyAmIENFX05FV19TS0lQX1dPUktUUkVFKQorCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfU0tJUF9XT1JLVFJFRTsKKwllbHNlCisJCWNlLT5jZV9mbGFncyAmPSB+Q0VfU0tJUF9XT1JLVFJFRTsKKwlpZiAod2FzX3NraXBfd29ya3RyZWUgIT0gY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJY2UtPmNlX2ZsYWdzIHw9IENFX1VQREFURV9JTl9CQVNFOworCQltYXJrX2ZzbW9uaXRvcl9pbnZhbGlkKGlzdGF0ZSwgY2UpOworCQlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gQ0VfRU5UUllfQ0hBTkdFRDsKKwl9CisKKwkvKgorCSAqIGlmICghd2FzX3NraXBfd29ya3RyZWUgJiYgIWNlX3NraXBfd29ya3RyZWUoKSkgeworCSAqCVRoaXMgaXMgcGVyZmVjdGx5IG5vcm1hbC4gTW92ZSBvbjsKKwkgKiB9CisJICovCisKKwkvKgorCSAqIE1lcmdlIHN0cmF0ZWdpZXMgbWF5IHNldCBDRV9VUERBVEV8Q0VfUkVNT1ZFIG91dHNpZGUgY2hlY2tvdXQKKwkgKiBhcmVhIGFzIGEgcmVzdWx0IG9mIGNlX3NraXBfd29ya3RyZWUoKSBzaG9ydGN1dHMgaW4KKwkgKiB2ZXJpZnlfYWJzZW50KCkgYW5kIHZlcmlmeV91cHRvZGF0ZSgpLgorCSAqIE1ha2Ugc3VyZSB0aGV5IGRvbid0IG1vZGlmeSB3b3JrdHJlZSBpZiB0aGV5IGFyZSBhbHJlYWR5CisJICogb3V0c2lkZSBjaGVja291dCBhcmVhCisJICovCisJaWYgKHdhc19za2lwX3dvcmt0cmVlICYmIGNlX3NraXBfd29ya3RyZWUoY2UpKSB7CisJCWNlLT5jZV9mbGFncyAmPSB+Q0VfVVBEQVRFOworCisJCS8qCisJCSAqIEJ5IGRlZmF1bHQsIHdoZW4gQ0VfUkVNT1ZFIGlzIG9uLCBDRV9XVF9SRU1PVkUgaXMgYWxzbworCQkgKiBvbiB0byBnZXQgdGhhdCBmaWxlIHJlbW92ZWQgZnJvbSBib3RoIGluZGV4IGFuZCB3b3JrdHJlZS4KKwkJICogSWYgdGhhdCBmaWxlIGlzIGFscmVhZHkgb3V0c2lkZSB3b3JrdHJlZSBhcmVhLCBkb24ndAorCQkgKiBib3RoZXIgcmVtb3ZlIGl0LgorCQkgKi8KKwkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJCWNlLT5jZV9mbGFncyAmPSB+Q0VfV1RfUkVNT1ZFOworCX0KKworCWlmICghd2FzX3NraXBfd29ya3RyZWUgJiYgY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJLyoKKwkJICogSWYgQ0VfVVBEQVRFIGlzIHNldCwgdmVyaWZ5X3VwdG9kYXRlKCkgbXVzdCBiZSBjYWxsZWQgYWxyZWFkeQorCQkgKiBhbHNvIHN0YXQgaW5mbyBtYXkgaGF2ZSBsb3N0IGFmdGVyIG1lcmdlZF9lbnRyeSgpIHNvIGNhbGxpbmcKKwkJICogdmVyaWZ5X3VwdG9kYXRlKCkgYWdhaW4gbWF5IGZhaWwKKwkJICovCisJCWlmICghKGNlLT5jZV9mbGFncyAmIENFX1VQREFURSkgJiYKKwkJICAgIHZlcmlmeV91cHRvZGF0ZV9zcGFyc2UoY2UsIG8pKSB7CisJCQljZS0+Y2VfZmxhZ3MgJj0gfkNFX1NLSVBfV09SS1RSRUU7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJY2UtPmNlX2ZsYWdzIHw9IENFX1dUX1JFTU9WRTsKKwkJY2UtPmNlX2ZsYWdzICY9IH5DRV9VUERBVEU7CisJfQorCWlmICh3YXNfc2tpcF93b3JrdHJlZSAmJiAhY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJaWYgKHZlcmlmeV9hYnNlbnRfc3BhcnNlKGNlLCBXQVJOSU5HX1NQQVJTRV9PUlBIQU5FRF9OT1RfT1ZFUldSSVRURU4sIG8pKQorCQkJcmV0dXJuIC0xOworCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfVVBEQVRFOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3YXJuX2NvbmZsaWN0ZWRfcGF0aChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQlpbnQgaSwKKwkJCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJY2hhciAqY29uZmxpY3RpbmdfcGF0aCA9IGlzdGF0ZS0+Y2FjaGVbaV0tPm5hbWU7CisJaW50IGNvdW50ID0gMDsKKworCWFkZF9yZWplY3RlZF9wYXRoKG8sIFdBUk5JTkdfU1BBUlNFX1VOTUVSR0VEX0ZJTEUsIGNvbmZsaWN0aW5nX3BhdGgpOworCisJLyogRmluZCBvdXQgaG93IG1hbnkgaGlnaGVyIHN0YWdlIGVudHJpZXMgYXJlIGF0IHNhbWUgcGF0aCAqLworCXdoaWxlICgoKytjb3VudCkgKyBpIDwgaXN0YXRlLT5jYWNoZV9uciAmJgorCSAgICAgICAhc3RyY21wKGNvbmZsaWN0aW5nX3BhdGgsIGlzdGF0ZS0+Y2FjaGVbY291bnQgKyBpXS0+bmFtZSkpCisJCTsgLyogZG8gbm90aGluZyAqLworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW5saW5lIGludCBjYWxsX3VucGFja19mbihjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3JjLAorCQkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaW50IHJldCA9IG8tPmZuKHNyYywgbyk7CisJaWYgKHJldCA+IDApCisJCXJldCA9IDA7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbWFya19jZV91c2VkKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwljZS0+Y2VfZmxhZ3MgfD0gQ0VfVU5QQUNLRUQ7CisKKwlpZiAoby0+Y2FjaGVfYm90dG9tIDwgby0+c3JjX2luZGV4LT5jYWNoZV9uciAmJgorCSAgICBvLT5zcmNfaW5kZXgtPmNhY2hlW28tPmNhY2hlX2JvdHRvbV0gPT0gY2UpIHsKKwkJaW50IGJvdHRvbSA9IG8tPmNhY2hlX2JvdHRvbTsKKwkJd2hpbGUgKGJvdHRvbSA8IG8tPnNyY19pbmRleC0+Y2FjaGVfbnIgJiYKKwkJICAgICAgIG8tPnNyY19pbmRleC0+Y2FjaGVbYm90dG9tXS0+Y2VfZmxhZ3MgJiBDRV9VTlBBQ0tFRCkKKwkJCWJvdHRvbSsrOworCQlvLT5jYWNoZV9ib3R0b20gPSBib3R0b207CisJfQorfQorCitzdGF0aWMgdm9pZCBtYXJrX2FsbF9jZV91bnVzZWQoc3RydWN0IGluZGV4X3N0YXRlICppbmRleCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXgtPmNhY2hlX25yOyBpKyspCisJCWluZGV4LT5jYWNoZVtpXS0+Y2VfZmxhZ3MgJj0gfihDRV9VTlBBQ0tFRCB8IENFX0FEREVEIHwgQ0VfTkVXX1NLSVBfV09SS1RSRUUpOworfQorCitzdGF0aWMgaW50IGxvY2F0ZV9pbl9zcmNfaW5kZXgoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCSAgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9IG8tPnNyY19pbmRleDsKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGluZGV4LCBjZS0+bmFtZSwgbGVuKTsKKwlpZiAocG9zIDwgMCkKKwkJcG9zID0gLTEgLSBwb3M7CisJcmV0dXJuIHBvczsKK30KKworLyoKKyAqIFdlIGNhbGwgdW5wYWNrX2luZGV4X2VudHJ5KCkgd2l0aCBhbiB1bm1lcmdlZCBjYWNoZSBlbnRyeQorICogb25seSBpbiBkaWZmLWluZGV4LCBhbmQgaXQgd2FudHMgYSBzaW5nbGUgY2FsbGJhY2suICBTa2lwCisgKiB0aGUgb3RoZXIgdW5tZXJnZWQgZW50cnkgd2l0aCB0aGUgc2FtZSBuYW1lLgorICovCitzdGF0aWMgdm9pZCBtYXJrX2NlX3VzZWRfc2FtZV9uYW1lKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXggPSBvLT5zcmNfaW5kZXg7CisJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UpOworCWludCBwb3M7CisKKwlmb3IgKHBvcyA9IGxvY2F0ZV9pbl9zcmNfaW5kZXgoY2UsIG8pOyBwb3MgPCBpbmRleC0+Y2FjaGVfbnI7IHBvcysrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqbmV4dCA9IGluZGV4LT5jYWNoZVtwb3NdOworCQlpZiAobGVuICE9IGNlX25hbWVsZW4obmV4dCkgfHwKKwkJICAgIG1lbWNtcChjZS0+bmFtZSwgbmV4dC0+bmFtZSwgbGVuKSkKKwkJCWJyZWFrOworCQltYXJrX2NlX3VzZWQobmV4dCwgbyk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpuZXh0X2NhY2hlX2VudHJ5KHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwljb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4ID0gby0+c3JjX2luZGV4OworCWludCBwb3MgPSBvLT5jYWNoZV9ib3R0b207CisKKwl3aGlsZSAocG9zIDwgaW5kZXgtPmNhY2hlX25yKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpbmRleC0+Y2FjaGVbcG9zXTsKKwkJaWYgKCEoY2UtPmNlX2ZsYWdzICYgQ0VfVU5QQUNLRUQpKQorCQkJcmV0dXJuIGNlOworCQlwb3MrKzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9zYW1lX3VubWVyZ2VkKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9IG8tPnNyY19pbmRleDsKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGluZGV4LCBjZS0+bmFtZSwgbGVuKTsKKworCWlmICgwIDw9IHBvcykKKwkJZGllKCJwcm9ncmFtbWluZyBlcnJvciBpbiBhIGNhbGxlciBvZiBtYXJrX2NlX3VzZWRfc2FtZV9uYW1lIik7CisJZm9yIChwb3MgPSAtcG9zIC0gMTsgcG9zIDwgaW5kZXgtPmNhY2hlX25yOyBwb3MrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKm5leHQgPSBpbmRleC0+Y2FjaGVbcG9zXTsKKwkJaWYgKGxlbiAhPSBjZV9uYW1lbGVuKG5leHQpIHx8CisJCSAgICBtZW1jbXAoY2UtPm5hbWUsIG5leHQtPm5hbWUsIGxlbikpCisJCQlicmVhazsKKwkJYWRkX2VudHJ5KG8sIG5leHQsIDAsIDApOworCQltYXJrX2NlX3VzZWQobmV4dCwgbyk7CisJfQorfQorCitzdGF0aWMgaW50IHVucGFja19pbmRleF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjW01BWF9VTlBBQ0tfVFJFRVMgKyAxXSA9IHsgTlVMTCwgfTsKKwlpbnQgcmV0OworCisJc3JjWzBdID0gY2U7CisKKwltYXJrX2NlX3VzZWQoY2UsIG8pOworCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJaWYgKG8tPnNraXBfdW5tZXJnZWQpIHsKKwkJCWFkZF9lbnRyeShvLCBjZSwgMCwgMCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXQgPSBjYWxsX3VucGFja19mbihzcmMsIG8pOworCWlmIChjZV9zdGFnZShjZSkpCisJCW1hcmtfY2VfdXNlZF9zYW1lX25hbWUoY2UsIG8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9jYWNoZV9wb3Moc3RydWN0IHRyYXZlcnNlX2luZm8gKiwgY29uc3QgY2hhciAqcCwgc2l6ZV90IGxlbik7CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfY2FjaGVfYm90dG9tKHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBpbnQgYm90dG9tKQoreworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyA9IGluZm8tPmRhdGE7CisKKwlpZiAoby0+ZGlmZl9pbmRleF9jYWNoZWQpCisJCXJldHVybjsKKwlvLT5jYWNoZV9ib3R0b20gPSBib3R0b207Cit9CisKK3N0YXRpYyBpbnQgc3dpdGNoX2NhY2hlX2JvdHRvbShzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCWludCByZXQsIHBvczsKKworCWlmIChvLT5kaWZmX2luZGV4X2NhY2hlZCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gby0+Y2FjaGVfYm90dG9tOworCXBvcyA9IGZpbmRfY2FjaGVfcG9zKGluZm8tPnByZXYsIGluZm8tPm5hbWUsIGluZm8tPm5hbWVsZW4pOworCisJaWYgKHBvcyA8IC0xKQorCQlvLT5jYWNoZV9ib3R0b20gPSAtMiAtIHBvczsKKwllbHNlIGlmIChwb3MgPCAwKQorCQlvLT5jYWNoZV9ib3R0b20gPSBvLT5zcmNfaW5kZXgtPmNhY2hlX25yOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFyZV9zYW1lX29pZChzdHJ1Y3QgbmFtZV9lbnRyeSAqbmFtZV9qLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbmFtZV9rKQoreworCXJldHVybiAhaXNfbnVsbF9vaWQoJm5hbWVfai0+b2lkKSAmJiAhaXNfbnVsbF9vaWQoJm5hbWVfay0+b2lkKSAmJiBvaWRlcSgmbmFtZV9qLT5vaWQsICZuYW1lX2stPm9pZCk7Cit9CisKK3N0YXRpYyBpbnQgYWxsX3RyZWVzX3NhbWVfYXNfY2FjaGVfdHJlZShpbnQgbiwgdW5zaWduZWQgbG9uZyBkaXJtYXNrLAorCQkJCQlzdHJ1Y3QgbmFtZV9lbnRyeSAqbmFtZXMsCisJCQkJCXN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQoreworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyA9IGluZm8tPmRhdGE7CisJaW50IGk7CisKKwlpZiAoIW8tPm1lcmdlIHx8IGRpcm1hc2sgIT0gKCgxIDw8IG4pIC0gMSkpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMTsgaSA8IG47IGkrKykKKwkJaWYgKCFhcmVfc2FtZV9vaWQobmFtZXMsIG5hbWVzICsgaSkpCisJCQlyZXR1cm4gMDsKKworCXJldHVybiBjYWNoZV90cmVlX21hdGNoZXNfdHJhdmVyc2FsKG8tPnNyY19pbmRleC0+Y2FjaGVfdHJlZSwgbmFtZXMsIGluZm8pOworfQorCitzdGF0aWMgaW50IGluZGV4X3Bvc19ieV90cmF2ZXJzZV9pbmZvKHN0cnVjdCBuYW1lX2VudHJ5ICpuYW1lcywKKwkJCQkgICAgICBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCXN0cnVjdCBzdHJidWYgbmFtZSA9IFNUUkJVRl9JTklUOworCWludCBwb3M7CisKKwlzdHJidWZfbWFrZV90cmF2ZXJzZV9wYXRoKCZuYW1lLCBpbmZvLCBuYW1lcy0+cGF0aCwgbmFtZXMtPnBhdGhsZW4pOworCXN0cmJ1Zl9hZGRjaCgmbmFtZSwgJy8nKTsKKwlwb3MgPSBpbmRleF9uYW1lX3BvcyhvLT5zcmNfaW5kZXgsIG5hbWUuYnVmLCBuYW1lLmxlbik7CisJaWYgKHBvcyA+PSAwKQorCQlCVUcoIlRoaXMgaXMgYSBkaXJlY3RvcnkgYW5kIHNob3VsZCBub3QgZXhpc3QgaW4gaW5kZXgiKTsKKwlwb3MgPSAtcG9zIC0gMTsKKwlpZiAocG9zID49IG8tPnNyY19pbmRleC0+Y2FjaGVfbnIgfHwKKwkgICAgIXN0YXJ0c193aXRoKG8tPnNyY19pbmRleC0+Y2FjaGVbcG9zXS0+bmFtZSwgbmFtZS5idWYpIHx8CisJICAgIChwb3MgPiAwICYmIHN0YXJ0c193aXRoKG8tPnNyY19pbmRleC0+Y2FjaGVbcG9zLTFdLT5uYW1lLCBuYW1lLmJ1ZikpKQorCQlCVUcoInBvcyAlZCBkb2Vzbid0IHBvaW50IHRvIHRoZSBmaXJzdCBlbnRyeSBvZiAlcyBpbiBpbmRleCIsCisJCSAgICBwb3MsIG5hbWUuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CisJcmV0dXJuIHBvczsKK30KKworLyoKKyAqIEZhc3QgcGF0aCBpZiB3ZSBkZXRlY3QgdGhhdCBhbGwgdHJlZXMgYXJlIHRoZSBzYW1lIGFzIGNhY2hlLXRyZWUgYXQgdGhpcworICogcGF0aC4gV2UnbGwgd2FsayB0aGVzZSB0cmVlcyBpbiBhbiBpdGVyYXRpdmUgbG9vcCB1c2luZyBjYWNoZS10cmVlL2luZGV4CisgKiBpbnN0ZWFkIG9mIE9EQiBzaW5jZSB3ZSBhbHJlYWR5IGtub3cgd2hhdCB0aGVzZSB0cmVlcyBjb250YWluLgorICovCitzdGF0aWMgaW50IHRyYXZlcnNlX2J5X2NhY2hlX3RyZWUoaW50IHBvcywgaW50IG5yX2VudHJpZXMsIGludCBucl9uYW1lcywKKwkJCQkgIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjW01BWF9VTlBBQ0tfVFJFRVMgKyAxXSA9IHsgTlVMTCwgfTsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqdHJlZV9jZSA9IE5VTEw7CisJaW50IGNlX2xlbiA9IDA7CisJaW50IGksIGQ7CisKKwlpZiAoIW8tPm1lcmdlKQorCQlCVUcoIldlIG5lZWQgY2FjaGUtdHJlZSB0byBkbyB0aGlzIG9wdGltaXphdGlvbiIpOworCisJLyoKKwkgKiBEbyB3aGF0IHVucGFja19jYWxsYmFjaygpIGFuZCB1bnBhY2tfbm9uZGlyZWN0b3JpZXMoKSBub3JtYWxseQorCSAqIGRvLiBCdXQgd2Ugd2FsayBhbGwgcGF0aHMgaW4gYW4gaXRlcmF0aXZlIGxvb3AgaW5zdGVhZC4KKwkgKgorCSAqIEQvRiBjb25mbGljdHMgYW5kIGhpZ2hlciBzdGFnZSBlbnRyaWVzIGFyZSBub3QgYSBjb25jZXJuCisJICogYmVjYXVzZSBjYWNoZS10cmVlIHdvdWxkIGJlIGludmFsaWRhdGVkIGFuZCB3ZSB3b3VsZCBuZXZlcgorCSAqIGdldCBoZXJlIGluIHRoZSBmaXJzdCBwbGFjZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfZW50cmllczsgaSsrKSB7CisJCWludCBuZXdfY2VfbGVuLCBsZW4sIHJjOworCisJCXNyY1swXSA9IG8tPnNyY19pbmRleC0+Y2FjaGVbcG9zICsgaV07CisKKwkJbGVuID0gY2VfbmFtZWxlbihzcmNbMF0pOworCQluZXdfY2VfbGVuID0gY2FjaGVfZW50cnlfc2l6ZShsZW4pOworCisJCWlmIChuZXdfY2VfbGVuID4gY2VfbGVuKSB7CisJCQluZXdfY2VfbGVuIDw8PSAxOworCQkJdHJlZV9jZSA9IHhyZWFsbG9jKHRyZWVfY2UsIG5ld19jZV9sZW4pOworCQkJbWVtc2V0KHRyZWVfY2UsIDAsIG5ld19jZV9sZW4pOworCQkJY2VfbGVuID0gbmV3X2NlX2xlbjsKKworCQkJdHJlZV9jZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3MoMCk7CisKKwkJCWZvciAoZCA9IDE7IGQgPD0gbnJfbmFtZXM7IGQrKykKKwkJCQlzcmNbZF0gPSB0cmVlX2NlOworCQl9CisKKwkJdHJlZV9jZS0+Y2VfbW9kZSA9IHNyY1swXS0+Y2VfbW9kZTsKKwkJdHJlZV9jZS0+Y2VfbmFtZWxlbiA9IGxlbjsKKwkJb2lkY3B5KCZ0cmVlX2NlLT5vaWQsICZzcmNbMF0tPm9pZCk7CisJCW1lbWNweSh0cmVlX2NlLT5uYW1lLCBzcmNbMF0tPm5hbWUsIGxlbiArIDEpOworCisJCXJjID0gY2FsbF91bnBhY2tfZm4oKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICopc3JjLCBvKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJZnJlZSh0cmVlX2NlKTsKKwkJCXJldHVybiByYzsKKwkJfQorCisJCW1hcmtfY2VfdXNlZChzcmNbMF0sIG8pOworCX0KKwlmcmVlKHRyZWVfY2UpOworCWlmIChvLT5kZWJ1Z191bnBhY2spCisJCXByaW50ZigiVW5wYWNrZWQgJWQgZW50cmllcyBmcm9tICVzIHRvICVzIHVzaW5nIGNhY2hlLXRyZWVcbiIsCisJCSAgICAgICBucl9lbnRyaWVzLAorCQkgICAgICAgby0+c3JjX2luZGV4LT5jYWNoZVtwb3NdLT5uYW1lLAorCQkgICAgICAgby0+c3JjX2luZGV4LT5jYWNoZVtwb3MgKyBucl9lbnRyaWVzIC0gMV0tPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRyYXZlcnNlX3RyZWVzX3JlY3Vyc2l2ZShpbnQgbiwgdW5zaWduZWQgbG9uZyBkaXJtYXNrLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGRmX2NvbmZsaWN0cywKKwkJCQkgICAgc3RydWN0IG5hbWVfZW50cnkgKm5hbWVzLAorCQkJCSAgICBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCWludCBpLCByZXQsIGJvdHRvbTsKKwlpbnQgbnJfYnVmID0gMDsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRbTUFYX1VOUEFDS19UUkVFU107CisJdm9pZCAqYnVmW01BWF9VTlBBQ0tfVFJFRVNdOworCXN0cnVjdCB0cmF2ZXJzZV9pbmZvIG5ld2luZm87CisJc3RydWN0IG5hbWVfZW50cnkgKnA7CisJaW50IG5yX2VudHJpZXM7CisKKwlucl9lbnRyaWVzID0gYWxsX3RyZWVzX3NhbWVfYXNfY2FjaGVfdHJlZShuLCBkaXJtYXNrLCBuYW1lcywgaW5mbyk7CisJaWYgKG5yX2VudHJpZXMgPiAwKSB7CisJCWludCBwb3MgPSBpbmRleF9wb3NfYnlfdHJhdmVyc2VfaW5mbyhuYW1lcywgaW5mbyk7CisKKwkJaWYgKCFvLT5tZXJnZSB8fCBkZl9jb25mbGljdHMpCisJCQlCVUcoIldyb25nIGNvbmRpdGlvbiB0byBnZXQgaGVyZSBidWRkeSIpOworCisJCS8qCisJCSAqIEFsbCBlbnRyaWVzIHVwIHRvICdwb3MnIG11c3QgaGF2ZSBiZWVuIHByb2Nlc3NlZAorCQkgKiAoaS5lLiBtYXJrZWQgQ0VfVU5QQUNLRUQpIGF0IHRoaXMgcG9pbnQuIEJ1dCB0byBiZSBzYWZlLAorCQkgKiBzYXZlIGFuZCByZXN0b3JlIGNhY2hlX2JvdHRvbSBhbnl3YXkgdG8gbm90IG1pc3MKKwkJICogdW5wcm9jZXNzZWQgZW50cmllcyBiZWZvcmUgJ3BvcycuCisJCSAqLworCQlib3R0b20gPSBvLT5jYWNoZV9ib3R0b207CisJCXJldCA9IHRyYXZlcnNlX2J5X2NhY2hlX3RyZWUocG9zLCBucl9lbnRyaWVzLCBuLCBpbmZvKTsKKwkJby0+Y2FjaGVfYm90dG9tID0gYm90dG9tOworCQlyZXR1cm4gcmV0OworCX0KKworCXAgPSBuYW1lczsKKwl3aGlsZSAoIXAtPm1vZGUpCisJCXArKzsKKworCW5ld2luZm8gPSAqaW5mbzsKKwluZXdpbmZvLnByZXYgPSBpbmZvOworCW5ld2luZm8ucGF0aHNwZWMgPSBpbmZvLT5wYXRoc3BlYzsKKwluZXdpbmZvLm5hbWUgPSBwLT5wYXRoOworCW5ld2luZm8ubmFtZWxlbiA9IHAtPnBhdGhsZW47CisJbmV3aW5mby5tb2RlID0gcC0+bW9kZTsKKwluZXdpbmZvLnBhdGhsZW4gPSBzdF9hZGQzKG5ld2luZm8ucGF0aGxlbiwgdHJlZV9lbnRyeV9sZW4ocCksIDEpOworCW5ld2luZm8uZGZfY29uZmxpY3RzIHw9IGRmX2NvbmZsaWN0czsKKworCS8qCisJICogRmV0Y2ggdGhlIHRyZWUgZnJvbSB0aGUgT0RCIGZvciBlYWNoIHBlZXIgZGlyZWN0b3J5IGluIHRoZQorCSAqIG4gY29tbWl0cy4KKwkgKgorCSAqIEZvciAyLSBhbmQgMy13YXkgdHJhdmVyc2Fscywgd2UgdHJ5IHRvIGF2b2lkIGhpdHRpbmcgdGhlCisJICogT0RCIHR3aWNlIGZvciB0aGUgc2FtZSBPSUQuICBUaGlzIHNob3VsZCB5aWVsZCBhIG5pY2Ugc3BlZWQKKwkgKiB1cCBpbiBjaGVja291dHMgYW5kIG1lcmdlcyB3aGVuIHRoZSBjb21taXRzIGFyZSBzaW1pbGFyLgorCSAqCisJICogV2UgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSBmdWxsIE8obl4yKSBzZWFyY2ggZm9yIGxhcmdlciBuLAorCSAqIGJlY2F1c2Ugd2lkZXIgdHJhdmVyc2FscyBkb24ndCBoYXBwZW4gdGhhdCBvZnRlbiBhbmQgd2UKKwkgKiBhdm9pZCB0aGUgc2VhcmNoIHNldHVwLgorCSAqCisJICogV2hlbiAyIHBlZXIgT0lEcyBhcmUgdGhlIHNhbWUsIHdlIGp1c3QgY29weSB0aGUgdHJlZQorCSAqIGRlc2NyaXB0b3IgZGF0YS4gIFRoaXMgaW1wbGljaXRseSBib3Jyb3dzIHRoZSBidWZmZXIKKwkgKiBkYXRhIGZyb20gdGhlIGVhcmxpZXIgY2VsbC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrLCBkaXJtYXNrID4+PSAxKSB7CisJCWlmIChpID4gMCAmJiBhcmVfc2FtZV9vaWQoJm5hbWVzW2ldLCAmbmFtZXNbaSAtIDFdKSkKKwkJCXRbaV0gPSB0W2kgLSAxXTsKKwkJZWxzZSBpZiAoaSA+IDEgJiYgYXJlX3NhbWVfb2lkKCZuYW1lc1tpXSwgJm5hbWVzW2kgLSAyXSkpCisJCQl0W2ldID0gdFtpIC0gMl07CisJCWVsc2UgeworCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkID0gTlVMTDsKKwkJCWlmIChkaXJtYXNrICYgMSkKKwkJCQlvaWQgPSAmbmFtZXNbaV0ub2lkOworCQkJYnVmW25yX2J1ZisrXSA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKHRoZV9yZXBvc2l0b3J5LCB0ICsgaSwgb2lkKTsKKwkJfQorCX0KKworCWJvdHRvbSA9IHN3aXRjaF9jYWNoZV9ib3R0b20oJm5ld2luZm8pOworCXJldCA9IHRyYXZlcnNlX3RyZWVzKG8tPnNyY19pbmRleCwgbiwgdCwgJm5ld2luZm8pOworCXJlc3RvcmVfY2FjaGVfYm90dG9tKCZuZXdpbmZvLCBib3R0b20pOworCisJZm9yIChpID0gMDsgaSA8IG5yX2J1ZjsgaSsrKQorCQlmcmVlKGJ1ZltpXSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ29tcGFyZSB0aGUgdHJhdmVyc2UtcGF0aCB0byB0aGUgY2FjaGUgZW50cnkgd2l0aG91dCBhY3R1YWxseQorICogaGF2aW5nIHRvIGdlbmVyYXRlIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0cmF2ZXJzZQorICogcGF0aC4KKyAqCisgKiBOT1RFISBUaGlzICpvbmx5KiBjb21wYXJlcyB1cCB0byB0aGUgc2l6ZSBvZiB0aGUgdHJhdmVyc2UgcGF0aAorICogaXRzZWxmIC0gdGhlIGNhbGxlciBuZWVkcyB0byBkbyB0aGUgZmluYWwgY2hlY2sgZm9yIHRoZSBjYWNoZQorICogZW50cnkgaGF2aW5nIG1vcmUgZGF0YSBhdCB0aGUgZW5kIQorICovCitzdGF0aWMgaW50IGRvX2NvbXBhcmVfZW50cnlfcGllY2V3aXNlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sCisJCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisJCQkJICAgICAgdW5zaWduZWQgbW9kZSkKK3sKKwlpbnQgcGF0aGxlbiwgY2VfbGVuOworCWNvbnN0IGNoYXIgKmNlX25hbWU7CisKKwlpZiAoaW5mby0+cHJldikgeworCQlpbnQgY21wID0gZG9fY29tcGFyZV9lbnRyeV9waWVjZXdpc2UoY2UsIGluZm8tPnByZXYsCisJCQkJCQkgICAgIGluZm8tPm5hbWUsIGluZm8tPm5hbWVsZW4sCisJCQkJCQkgICAgIGluZm8tPm1vZGUpOworCQlpZiAoY21wKQorCQkJcmV0dXJuIGNtcDsKKwl9CisJcGF0aGxlbiA9IGluZm8tPnBhdGhsZW47CisJY2VfbGVuID0gY2VfbmFtZWxlbihjZSk7CisKKwkvKiBJZiBjZV9sZW4gPCBwYXRobGVuIHRoZW4gd2UgbXVzdCBoYXZlIHByZXZpb3VzbHkgaGl0ICJuYW1lID09IGRpcmVjdG9yeSIgZW50cnkgKi8KKwlpZiAoY2VfbGVuIDwgcGF0aGxlbikKKwkJcmV0dXJuIC0xOworCisJY2VfbGVuIC09IHBhdGhsZW47CisJY2VfbmFtZSA9IGNlLT5uYW1lICsgcGF0aGxlbjsKKworCXJldHVybiBkZl9uYW1lX2NvbXBhcmUoY2VfbmFtZSwgY2VfbGVuLCBTX0lGUkVHLCBuYW1lLCBuYW1lbGVuLCBtb2RlKTsKK30KKworc3RhdGljIGludCBkb19jb21wYXJlX2VudHJ5KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sCisJCQkgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisJCQkgICAgdW5zaWduZWQgbW9kZSkKK3sKKwlpbnQgcGF0aGxlbiwgY2VfbGVuOworCWNvbnN0IGNoYXIgKmNlX25hbWU7CisJaW50IGNtcDsKKworCS8qCisJICogSWYgd2UgaGF2ZSBub3QgcHJlY29tcHV0ZWQgdGhlIHRyYXZlcnNlIHBhdGgsIGl0IGlzIHF1aWNrZXIKKwkgKiB0byBhdm9pZCBkb2luZyBzby4gIEJ1dCBpZiB3ZSBoYXZlIHByZWNvbXB1dGVkIGl0LAorCSAqIGl0IGlzIHF1aWNrZXIgdG8gdXNlIHRoZSBwcmVjb21wdXRlZCB2ZXJzaW9uLgorCSAqLworCWlmICghaW5mby0+dHJhdmVyc2VfcGF0aCkKKwkJcmV0dXJuIGRvX2NvbXBhcmVfZW50cnlfcGllY2V3aXNlKGNlLCBpbmZvLCBuYW1lLCBuYW1lbGVuLCBtb2RlKTsKKworCWNtcCA9IHN0cm5jbXAoY2UtPm5hbWUsIGluZm8tPnRyYXZlcnNlX3BhdGgsIGluZm8tPnBhdGhsZW4pOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisKKwlwYXRobGVuID0gaW5mby0+cGF0aGxlbjsKKwljZV9sZW4gPSBjZV9uYW1lbGVuKGNlKTsKKworCWlmIChjZV9sZW4gPCBwYXRobGVuKQorCQlyZXR1cm4gLTE7CisKKwljZV9sZW4gLT0gcGF0aGxlbjsKKwljZV9uYW1lID0gY2UtPm5hbWUgKyBwYXRobGVuOworCisJcmV0dXJuIGRmX25hbWVfY29tcGFyZShjZV9uYW1lLCBjZV9sZW4sIFNfSUZSRUcsIG5hbWUsIG5hbWVsZW4sIG1vZGUpOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfZW50cnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICpuKQoreworCWludCBjbXAgPSBkb19jb21wYXJlX2VudHJ5KGNlLCBpbmZvLCBuLT5wYXRoLCBuLT5wYXRobGVuLCBuLT5tb2RlKTsKKwlpZiAoY21wKQorCQlyZXR1cm4gY21wOworCisJLyoKKwkgKiBFdmVuIGlmIHRoZSBiZWdpbm5pbmcgY29tcGFyZWQgaWRlbnRpY2FsbHksIHRoZSBjZSBzaG91bGQKKwkgKiBjb21wYXJlIGFzIGJpZ2dlciB0aGFuIGEgZGlyZWN0b3J5IGxlYWRpbmcgdXAgdG8gaXQhCisJICovCisJcmV0dXJuIGNlX25hbWVsZW4oY2UpID4gdHJhdmVyc2VfcGF0aF9sZW4oaW5mbywgdHJlZV9lbnRyeV9sZW4obikpOworfQorCitzdGF0aWMgaW50IGNlX2luX3RyYXZlcnNlX3BhdGgoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlpZiAoIWluZm8tPnByZXYpCisJCXJldHVybiAxOworCWlmIChkb19jb21wYXJlX2VudHJ5KGNlLCBpbmZvLT5wcmV2LAorCQkJICAgICBpbmZvLT5uYW1lLCBpbmZvLT5uYW1lbGVuLCBpbmZvLT5tb2RlKSkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBJZiBjZSAoYmxvYikgaXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUgcGF0aCAod2hpY2ggaXMgYSB0cmVlCisJICogd2Ugd2lsbCBiZSBkZXNjZW5kaW5nIGludG8pLCBpdCB3b24ndCBiZSBpbnNpZGUgaXQuCisJICovCisJcmV0dXJuIChpbmZvLT5wYXRobGVuIDwgY2VfbmFtZWxlbihjZSkpOworfQorCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpjcmVhdGVfY2VfZW50cnkoY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sCisJY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKm4sCisJaW50IHN0YWdlLAorCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCWludCBpc190cmFuc2llbnQpCit7CisJc2l6ZV90IGxlbiA9IHRyYXZlcnNlX3BhdGhfbGVuKGluZm8sIHRyZWVfZW50cnlfbGVuKG4pKTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0KKwkJaXNfdHJhbnNpZW50ID8KKwkJbWFrZV9lbXB0eV90cmFuc2llbnRfY2FjaGVfZW50cnkobGVuKSA6CisJCW1ha2VfZW1wdHlfY2FjaGVfZW50cnkoaXN0YXRlLCBsZW4pOworCisJY2UtPmNlX21vZGUgPSBjcmVhdGVfY2VfbW9kZShuLT5tb2RlKTsKKwljZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3Moc3RhZ2UpOworCWNlLT5jZV9uYW1lbGVuID0gbGVuOworCW9pZGNweSgmY2UtPm9pZCwgJm4tPm9pZCk7CisJLyogbGVuKzEgYmVjYXVzZSB0aGUgY2FjaGVfZW50cnkgYWxsb2NhdGVzIHNwYWNlIGZvciBOVUwgKi8KKwltYWtlX3RyYXZlcnNlX3BhdGgoY2UtPm5hbWUsIGxlbiArIDEsIGluZm8sIG4tPnBhdGgsIG4tPnBhdGhsZW4pOworCisJcmV0dXJuIGNlOworfQorCisvKgorICogTm90ZSB0aGF0IHRyYXZlcnNlX2J5X2NhY2hlX3RyZWUoKSBkdXBsaWNhdGVzIHNvbWUgbG9naWMgaW4gdGhpcyBmdW5jdGlvbgorICogd2l0aG91dCBhY3R1YWxseSBjYWxsaW5nIGl0LiBJZiB5b3UgY2hhbmdlIHRoZSBsb2dpYyBoZXJlIHlvdSBtYXkgbmVlZCB0bworICogY2hlY2sgYW5kIGNoYW5nZSB0aGVyZSBhcyB3ZWxsLgorICovCitzdGF0aWMgaW50IHVucGFja19ub25kaXJlY3RvcmllcyhpbnQgbiwgdW5zaWduZWQgbG9uZyBtYXNrLAorCQkJCSB1bnNpZ25lZCBsb25nIGRpcm1hc2ssCisJCQkJIHN0cnVjdCBjYWNoZV9lbnRyeSAqKnNyYywKKwkJCQkgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKm5hbWVzLAorCQkJCSBjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCXVuc2lnbmVkIGxvbmcgY29uZmxpY3RzID0gaW5mby0+ZGZfY29uZmxpY3RzIHwgZGlybWFzazsKKworCS8qIERvIHdlIGhhdmUgKm9ubHkqIGRpcmVjdG9yaWVzPyBOb3RoaW5nIHRvIGRvICovCisJaWYgKG1hc2sgPT0gZGlybWFzayAmJiAhc3JjWzBdKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogT2ssIHdlJ3ZlIGZpbGxlZCBpbiB1cCB0byBhbnkgcG90ZW50aWFsIGluZGV4IGVudHJ5IGluIHNyY1swXSwKKwkgKiBub3cgZG8gdGhlIHJlc3QuCisJICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlpbnQgc3RhZ2U7CisJCXVuc2lnbmVkIGludCBiaXQgPSAxdWwgPDwgaTsKKwkJaWYgKGNvbmZsaWN0cyAmIGJpdCkgeworCQkJc3JjW2kgKyBvLT5tZXJnZV0gPSBvLT5kZl9jb25mbGljdF9lbnRyeTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghKG1hc2sgJiBiaXQpKQorCQkJY29udGludWU7CisJCWlmICghby0+bWVyZ2UpCisJCQlzdGFnZSA9IDA7CisJCWVsc2UgaWYgKGkgKyAxIDwgby0+aGVhZF9pZHgpCisJCQlzdGFnZSA9IDE7CisJCWVsc2UgaWYgKGkgKyAxID4gby0+aGVhZF9pZHgpCisJCQlzdGFnZSA9IDM7CisJCWVsc2UKKwkJCXN0YWdlID0gMjsKKworCQkvKgorCQkgKiBJZiB0aGUgbWVyZ2UgYml0IGlzIHNldCwgdGhlbiB0aGUgY2FjaGUgZW50cmllcyBhcmUKKwkJICogZGlzY2FyZGVkIGluIHRoZSBmb2xsb3dpbmcgYmxvY2suICBJbiB0aGlzIGNhc2UsCisJCSAqIGNvbnN0cnVjdCAidHJhbnNpZW50IiBjYWNoZV9lbnRyaWVzLCBhcyB0aGV5IGFyZQorCQkgKiBub3Qgc3RvcmVkIGluIHRoZSBpbmRleC4gIG90aGVyd2lzZSBjb25zdHJ1Y3QgdGhlCisJCSAqIGNhY2hlIGVudHJ5IGZyb20gdGhlIGluZGV4IGF3YXJlIGxvZ2ljLgorCQkgKi8KKwkJc3JjW2kgKyBvLT5tZXJnZV0gPSBjcmVhdGVfY2VfZW50cnkoaW5mbywgbmFtZXMgKyBpLCBzdGFnZSwgJm8tPnJlc3VsdCwgby0+bWVyZ2UpOworCX0KKworCWlmIChvLT5tZXJnZSkgeworCQlpbnQgcmMgPSBjYWxsX3VucGFja19mbigoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKilzcmMsCisJCQkJCW8pOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gc3JjW2kgKyBvLT5tZXJnZV07CisJCQlpZiAoY2UgIT0gby0+ZGZfY29uZmxpY3RfZW50cnkpCisJCQkJZGlzY2FyZF9jYWNoZV9lbnRyeShjZSk7CisJCX0KKwkJcmV0dXJuIHJjOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWlmIChzcmNbaV0gJiYgc3JjW2ldICE9IG8tPmRmX2NvbmZsaWN0X2VudHJ5KQorCQkJaWYgKGRvX2FkZF9lbnRyeShvLCBzcmNbaV0sIDAsIDApKQorCQkJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVucGFja19mYWlsZWQoc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvLCBjb25zdCBjaGFyICptZXNzYWdlKQoreworCWRpc2NhcmRfaW5kZXgoJm8tPnJlc3VsdCk7CisJaWYgKCFvLT5xdWlldCAmJiAhby0+ZXhpdGluZ19lYXJseSkgeworCQlpZiAobWVzc2FnZSkKKwkJCXJldHVybiBlcnJvcigiJXMiLCBtZXNzYWdlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBUaGUgdHJlZSB0cmF2ZXJzYWwgaXMgbG9va2luZyBhdCBuYW1lIHAuICBJZiB3ZSBoYXZlIGEgbWF0Y2hpbmcgZW50cnksCisgKiByZXR1cm4gaXQuICBJZiBuYW1lIHAgaXMgYSBkaXJlY3RvcnkgaW4gdGhlIGluZGV4LCBkbyBub3QgcmV0dXJuCisgKiBhbnl0aGluZywgYXMgd2Ugd2lsbCB3YW50IHRvIG1hdGNoIGl0IHdoZW4gdGhlIHRyYXZlcnNhbCBkZXNjZW5kcyBpbnRvCisgKiB0aGUgZGlyZWN0b3J5LgorICovCitzdGF0aWMgaW50IGZpbmRfY2FjaGVfcG9zKHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLAorCQkJICBjb25zdCBjaGFyICpwLCBzaXplX3QgcF9sZW4pCit7CisJaW50IHBvczsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXggPSBvLT5zcmNfaW5kZXg7CisJaW50IHBmeGxlbiA9IGluZm8tPnBhdGhsZW47CisKKwlmb3IgKHBvcyA9IG8tPmNhY2hlX2JvdHRvbTsgcG9zIDwgaW5kZXgtPmNhY2hlX25yOyBwb3MrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW3Bvc107CisJCWNvbnN0IGNoYXIgKmNlX25hbWUsICpjZV9zbGFzaDsKKwkJaW50IGNtcCwgY2VfbGVuOworCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9VTlBBQ0tFRCkgeworCQkJLyoKKwkJCSAqIGNhY2hlX2JvdHRvbSBlbnRyeSBpcyBhbHJlYWR5IHVucGFja2VkLCBzbworCQkJICogd2UgY2FuIG5ldmVyIG1hdGNoIGl0OyBkb24ndCBjaGVjayBpdAorCQkJICogYWdhaW4uCisJCQkgKi8KKwkJCWlmIChwb3MgPT0gby0+Y2FjaGVfYm90dG9tKQorCQkJCSsrby0+Y2FjaGVfYm90dG9tOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFjZV9pbl90cmF2ZXJzZV9wYXRoKGNlLCBpbmZvKSkgeworCQkJLyoKKwkJCSAqIENoZWNrIGlmIHdlIGNhbiBza2lwIGZ1dHVyZSBjYWNoZSBjaGVja3MKKwkJCSAqIChiZWNhdXNlIHdlJ3JlIGFscmVhZHkgcGFzdCBhbGwgcG9zc2libGUKKwkJCSAqIGVudHJpZXMgaW4gdGhlIHRyYXZlcnNlIHBhdGgpLgorCQkJICovCisJCQlpZiAoaW5mby0+dHJhdmVyc2VfcGF0aCkgeworCQkJCWlmIChzdHJuY21wKGNlLT5uYW1lLCBpbmZvLT50cmF2ZXJzZV9wYXRoLAorCQkJCQkgICAgaW5mby0+cGF0aGxlbikgPiAwKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWNlX25hbWUgPSBjZS0+bmFtZSArIHBmeGxlbjsKKwkJY2Vfc2xhc2ggPSBzdHJjaHIoY2VfbmFtZSwgJy8nKTsKKwkJaWYgKGNlX3NsYXNoKQorCQkJY2VfbGVuID0gY2Vfc2xhc2ggLSBjZV9uYW1lOworCQllbHNlCisJCQljZV9sZW4gPSBjZV9uYW1lbGVuKGNlKSAtIHBmeGxlbjsKKwkJY21wID0gbmFtZV9jb21wYXJlKHAsIHBfbGVuLCBjZV9uYW1lLCBjZV9sZW4pOworCQkvKgorCQkgKiBFeGFjdCBtYXRjaDsgaWYgd2UgaGF2ZSBhIGRpcmVjdG9yeSB3ZSBuZWVkIHRvCisJCSAqIGRlbGF5IHJldHVybmluZyBpdC4KKwkJICovCisJCWlmICghY21wKQorCQkJcmV0dXJuIGNlX3NsYXNoID8gLTIgLSBwb3MgOiBwb3M7CisJCWlmICgwIDwgY21wKQorCQkJY29udGludWU7IC8qIGtlZXAgbG9va2luZyAqLworCQkvKgorCQkgKiBjZV9uYW1lIHNvcnRzIGFmdGVyIHAtPnBhdGg7IGNvdWxkIGl0IGJlIHRoYXQgd2UKKwkJICogaGF2ZSBmaWxlcyB1bmRlciBwLT5wYXRoIGRpcmVjdG9yeSBpbiB0aGUgaW5kZXg/CisJCSAqIEUuZy4gIGNlX25hbWUgPT0gInQtaSIsIGFuZCBwLT5wYXRoID09ICJ0Ijsgd2UgbWF5CisJCSAqIGhhdmUgInQvYSIgaW4gdGhlIGluZGV4LgorCQkgKi8KKwkJaWYgKHBfbGVuIDwgY2VfbGVuICYmICFtZW1jbXAoY2VfbmFtZSwgcCwgcF9sZW4pICYmCisJCSAgICBjZV9uYW1lW3BfbGVuXSA8ICcvJykKKwkJCWNvbnRpbnVlOyAvKiBrZWVwIGxvb2tpbmcgKi8KKwkJYnJlYWs7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqZmluZF9jYWNoZV9lbnRyeShzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICpwKQoreworCWludCBwb3MgPSBmaW5kX2NhY2hlX3BvcyhpbmZvLCBwLT5wYXRoLCBwLT5wYXRobGVuKTsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCisJaWYgKDAgPD0gcG9zKQorCQlyZXR1cm4gby0+c3JjX2luZGV4LT5jYWNoZVtwb3NdOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX3BhdGgoc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pCit7CisJaWYgKGluZm8tPnByZXYpIHsKKwkJZGVidWdfcGF0aChpbmZvLT5wcmV2KTsKKwkJaWYgKCppbmZvLT5wcmV2LT5uYW1lKQorCQkJcHV0Y2hhcignLycpOworCX0KKwlwcmludGYoIiVzIiwgaW5mby0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX25hbWVfZW50cnkoaW50IGksIHN0cnVjdCBuYW1lX2VudHJ5ICpuKQoreworCXByaW50ZigiZW50IyVkICUwNm8gJXNcbiIsIGksCisJICAgICAgIG4tPnBhdGggPyBuLT5tb2RlIDogMCwKKwkgICAgICAgbi0+cGF0aCA/IG4tPnBhdGggOiAiKG1pc3NpbmcpIik7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX3VucGFja19jYWxsYmFjayhpbnQgbiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbWFzaywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZGlybWFzaywKKwkJCQkgIHN0cnVjdCBuYW1lX2VudHJ5ICpuYW1lcywKKwkJCQkgIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQoreworCWludCBpOworCXByaW50ZigiKiB1bnBhY2sgbWFzayAlbHUsIGRpcm1hc2sgJWx1LCBjbnQgJWQgIiwKKwkgICAgICAgbWFzaywgZGlybWFzaywgbik7CisJZGVidWdfcGF0aChpbmZvKTsKKwlwdXRjaGFyKCdcbicpOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWRlYnVnX25hbWVfZW50cnkoaSwgbmFtZXMgKyBpKTsKK30KKworLyoKKyAqIE5vdGUgdGhhdCB0cmF2ZXJzZV9ieV9jYWNoZV90cmVlKCkgZHVwbGljYXRlcyBzb21lIGxvZ2ljIGluIHRoaXMgZnVuY3Rpb24KKyAqIHdpdGhvdXQgYWN0dWFsbHkgY2FsbGluZyBpdC4gSWYgeW91IGNoYW5nZSB0aGUgbG9naWMgaGVyZSB5b3UgbWF5IG5lZWQgdG8KKyAqIGNoZWNrIGFuZCBjaGFuZ2UgdGhlcmUgYXMgd2VsbC4KKyAqLworc3RhdGljIGludCB1bnBhY2tfY2FsbGJhY2soaW50IG4sIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBkaXJtYXNrLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbmFtZXMsIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjW01BWF9VTlBBQ0tfVFJFRVMgKyAxXSA9IHsgTlVMTCwgfTsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCWNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICpwID0gbmFtZXM7CisKKwkvKiBGaW5kIGZpcnN0IGVudHJ5IHdpdGggYSByZWFsIG5hbWUgKHdlIGNvdWxkIHVzZSAibWFzayIgdG9vKSAqLworCXdoaWxlICghcC0+bW9kZSkKKwkJcCsrOworCisJaWYgKG8tPmRlYnVnX3VucGFjaykKKwkJZGVidWdfdW5wYWNrX2NhbGxiYWNrKG4sIG1hc2ssIGRpcm1hc2ssIG5hbWVzLCBpbmZvKTsKKworCS8qIEFyZSB3ZSBzdXBwb3NlZCB0byBsb29rIGF0IHRoZSBpbmRleCB0b28/ICovCisJaWYgKG8tPm1lcmdlKSB7CisJCXdoaWxlICgxKSB7CisJCQlpbnQgY21wOworCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCQkJaWYgKG8tPmRpZmZfaW5kZXhfY2FjaGVkKQorCQkJCWNlID0gbmV4dF9jYWNoZV9lbnRyeShvKTsKKwkJCWVsc2UKKwkJCQljZSA9IGZpbmRfY2FjaGVfZW50cnkoaW5mbywgcCk7CisKKwkJCWlmICghY2UpCisJCQkJYnJlYWs7CisJCQljbXAgPSBjb21wYXJlX2VudHJ5KGNlLCBpbmZvLCBwKTsKKwkJCWlmIChjbXAgPCAwKSB7CisJCQkJaWYgKHVucGFja19pbmRleF9lbnRyeShjZSwgbykgPCAwKQorCQkJCQlyZXR1cm4gdW5wYWNrX2ZhaWxlZChvLCBOVUxMKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghY21wKSB7CisJCQkJaWYgKGNlX3N0YWdlKGNlKSkgeworCQkJCQkvKgorCQkJCQkgKiBJZiB3ZSBza2lwIHVubWVyZ2VkIGluZGV4CisJCQkJCSAqIGVudHJpZXMsIHdlJ2xsIHNraXAgdGhpcworCQkJCQkgKiBlbnRyeSAqYW5kKiB0aGUgdHJlZQorCQkJCQkgKiBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCBpdCEKKwkJCQkJICovCisJCQkJCWlmIChvLT5za2lwX3VubWVyZ2VkKSB7CisJCQkJCQlhZGRfc2FtZV91bm1lcmdlZChjZSwgbyk7CisJCQkJCQlyZXR1cm4gbWFzazsKKwkJCQkJfQorCQkJCX0KKwkJCQlzcmNbMF0gPSBjZTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHVucGFja19ub25kaXJlY3RvcmllcyhuLCBtYXNrLCBkaXJtYXNrLCBzcmMsIG5hbWVzLCBpbmZvKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChvLT5tZXJnZSAmJiBzcmNbMF0pIHsKKwkJaWYgKGNlX3N0YWdlKHNyY1swXSkpCisJCQltYXJrX2NlX3VzZWRfc2FtZV9uYW1lKHNyY1swXSwgbyk7CisJCWVsc2UKKwkJCW1hcmtfY2VfdXNlZChzcmNbMF0sIG8pOworCX0KKworCS8qIE5vdyBoYW5kbGUgYW55IGRpcmVjdG9yaWVzLi4gKi8KKwlpZiAoZGlybWFzaykgeworCQkvKiBzcGVjaWFsIGNhc2U6ICJkaWZmLWluZGV4IC0tY2FjaGVkIiBsb29raW5nIGF0IGEgdHJlZSAqLworCQlpZiAoby0+ZGlmZl9pbmRleF9jYWNoZWQgJiYKKwkJICAgIG4gPT0gMSAmJiBkaXJtYXNrID09IDEgJiYgU19JU0RJUihuYW1lcy0+bW9kZSkpIHsKKwkJCWludCBtYXRjaGVzOworCQkJbWF0Y2hlcyA9IGNhY2hlX3RyZWVfbWF0Y2hlc190cmF2ZXJzYWwoby0+c3JjX2luZGV4LT5jYWNoZV90cmVlLAorCQkJCQkJCSAgICAgICBuYW1lcywgaW5mbyk7CisJCQkvKgorCQkJICogRXZlcnl0aGluZyB1bmRlciB0aGUgbmFtZSBtYXRjaGVzOyBza2lwIHRoZQorCQkJICogZW50aXJlIGhpZXJhcmNoeS4gIGRpZmZfaW5kZXhfY2FjaGVkIGNvZGVwYXRoCisJCQkgKiBzcGVjaWFsIGNhc2VzIEQvRiBjb25mbGljdHMgaW4gc3VjaCBhIHdheSB0aGF0CisJCQkgKiBpdCBkb2VzIG5vdCBkbyBhbnkgbG9vay1haGVhZCwgc28gdGhpcyBpcyBzYWZlLgorCQkJICovCisJCQlpZiAobWF0Y2hlcykgeworCQkJCW8tPmNhY2hlX2JvdHRvbSArPSBtYXRjaGVzOworCQkJCXJldHVybiBtYXNrOworCQkJfQorCQl9CisKKwkJaWYgKHRyYXZlcnNlX3RyZWVzX3JlY3Vyc2l2ZShuLCBkaXJtYXNrLCBtYXNrICYgfmRpcm1hc2ssCisJCQkJCSAgICAgbmFtZXMsIGluZm8pIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIG1hc2s7CisJfQorCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgY2xlYXJfY2VfZmxhZ3NfMShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgICBzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZSwgaW50IG5yLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKnByZWZpeCwKKwkJCSAgICBpbnQgc2VsZWN0X21hc2ssIGludCBjbGVhcl9tYXNrLAorCQkJICAgIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLAorCQkJICAgIGVudW0gcGF0dGVybl9tYXRjaF9yZXN1bHQgZGVmYXVsdF9tYXRjaCwKKwkJCSAgICBpbnQgcHJvZ3Jlc3NfbnIpOworCisvKiBXaG9sZSBkaXJlY3RvcnkgbWF0Y2hpbmcgKi8KK3N0YXRpYyBpbnQgY2xlYXJfY2VfZmxhZ3NfZGlyKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgICAgc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGUsIGludCBuciwKKwkJCSAgICAgIHN0cnVjdCBzdHJidWYgKnByZWZpeCwKKwkJCSAgICAgIGNoYXIgKmJhc2VuYW1lLAorCQkJICAgICAgaW50IHNlbGVjdF9tYXNrLCBpbnQgY2xlYXJfbWFzaywKKwkJCSAgICAgIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLAorCQkJICAgICAgZW51bSBwYXR0ZXJuX21hdGNoX3Jlc3VsdCBkZWZhdWx0X21hdGNoLAorCQkJICAgICAgaW50IHByb2dyZXNzX25yKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqKmNhY2hlX2VuZDsKKwlpbnQgZHR5cGUgPSBEVF9ESVI7CisJaW50IHJjOworCWVudW0gcGF0dGVybl9tYXRjaF9yZXN1bHQgcmV0LCBvcmlnX3JldDsKKwlvcmlnX3JldCA9IHBhdGhfbWF0Y2hlc19wYXR0ZXJuX2xpc3QocHJlZml4LT5idWYsIHByZWZpeC0+bGVuLAorCQkJCQkgICAgIGJhc2VuYW1lLCAmZHR5cGUsIHBsLCBpc3RhdGUpOworCisJc3RyYnVmX2FkZGNoKHByZWZpeCwgJy8nKTsKKworCS8qIElmIHVuZGVjaWRlZCwgdXNlIG1hdGNoaW5nIHJlc3VsdCBvZiBwYXJlbnQgZGlyIGluIGRlZnZhbCAqLworCWlmIChvcmlnX3JldCA9PSBVTkRFQ0lERUQpCisJCXJldCA9IGRlZmF1bHRfbWF0Y2g7CisJZWxzZQorCQlyZXQgPSBvcmlnX3JldDsKKworCWZvciAoY2FjaGVfZW5kID0gY2FjaGU7IGNhY2hlX2VuZCAhPSBjYWNoZSArIG5yOyBjYWNoZV9lbmQrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gKmNhY2hlX2VuZDsKKwkJaWYgKHN0cm5jbXAoY2UtPm5hbWUsIHByZWZpeC0+YnVmLCBwcmVmaXgtPmxlbikpCisJCQlicmVhazsKKwl9CisKKwlpZiAocGwtPnVzZV9jb25lX3BhdHRlcm5zICYmIG9yaWdfcmV0ID09IE1BVENIRURfUkVDVVJTSVZFKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqKmNlID0gY2FjaGU7CisJCXJjID0gY2FjaGVfZW5kIC0gY2FjaGU7CisKKwkJd2hpbGUgKGNlIDwgY2FjaGVfZW5kKSB7CisJCQkoKmNlKS0+Y2VfZmxhZ3MgJj0gfmNsZWFyX21hc2s7CisJCQljZSsrOworCQl9CisJfSBlbHNlIGlmIChwbC0+dXNlX2NvbmVfcGF0dGVybnMgJiYgb3JpZ19yZXQgPT0gTk9UX01BVENIRUQpIHsKKwkJcmMgPSBjYWNoZV9lbmQgLSBjYWNoZTsKKwl9IGVsc2UgeworCQlyYyA9IGNsZWFyX2NlX2ZsYWdzXzEoaXN0YXRlLCBjYWNoZSwgY2FjaGVfZW5kIC0gY2FjaGUsCisJCQkJICAgICAgcHJlZml4LAorCQkJCSAgICAgIHNlbGVjdF9tYXNrLCBjbGVhcl9tYXNrLAorCQkJCSAgICAgIHBsLCByZXQsCisJCQkJICAgICAgcHJvZ3Jlc3NfbnIpOworCX0KKworCXN0cmJ1Zl9zZXRsZW4ocHJlZml4LCBwcmVmaXgtPmxlbiAtIDEpOworCXJldHVybiByYzsKK30KKworLyoKKyAqIFRyYXZlcnNlIHRoZSBpbmRleCwgZmluZCBldmVyeSBlbnRyeSB0aGF0IG1hdGNoZXMgYWNjb3JkaW5nIHRvCisgKiBvLT5wbC4gRG8gImNlX2ZsYWdzICY9IH5jbGVhcl9tYXNrIiBvbiB0aG9zZSBlbnRyaWVzLiBSZXR1cm4gdGhlCisgKiBudW1iZXIgb2YgdHJhdmVyc2VkIGVudHJpZXMuCisgKgorICogSWYgc2VsZWN0X21hc2sgaXMgbm9uLXplcm8sIG9ubHkgZW50cmllcyB3aG9zZSBjZV9mbGFncyBoYXMgb24gb2YKKyAqIHRob3NlIGJpdHMgZW5hYmxlZCBhcmUgdHJhdmVyc2VkLgorICoKKyAqIGNhY2hlCTogcG9pbnRlciB0byBhbiBpbmRleCBlbnRyeQorICogcHJlZml4X2xlbgk6IGFuIG9mZnNldCB0byBpdHMgcGF0aAorICoKKyAqIFRoZSBjdXJyZW50IHBhdGggKCJwcmVmaXgiKSBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nICcvJyBpcworICogICBjYWNoZVswXS0+bmFtZVswLi4ocHJlZml4X2xlbi0xKV0KKyAqIFRvcCBsZXZlbCBwYXRoIGhhcyBwcmVmaXhfbGVuIHplcm8uCisgKi8KK3N0YXRpYyBpbnQgY2xlYXJfY2VfZmxhZ3NfMShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgICBzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZSwgaW50IG5yLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKnByZWZpeCwKKwkJCSAgICBpbnQgc2VsZWN0X21hc2ssIGludCBjbGVhcl9tYXNrLAorCQkJICAgIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLAorCQkJICAgIGVudW0gcGF0dGVybl9tYXRjaF9yZXN1bHQgZGVmYXVsdF9tYXRjaCwKKwkJCSAgICBpbnQgcHJvZ3Jlc3NfbnIpCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGVfZW5kID0gbnIgPyBjYWNoZSArIG5yIDogY2FjaGU7CisKKwkvKgorCSAqIFByb2Nlc3MgYWxsIGVudHJpZXMgdGhhdCBoYXZlIHRoZSBnaXZlbiBwcmVmaXggYW5kIG1lZXQKKwkgKiBzZWxlY3RfbWFzayBjb25kaXRpb24KKwkgKi8KKwl3aGlsZShjYWNoZSAhPSBjYWNoZV9lbmQpIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9ICpjYWNoZTsKKwkJY29uc3QgY2hhciAqbmFtZSwgKnNsYXNoOworCQlpbnQgbGVuLCBkdHlwZTsKKwkJZW51bSBwYXR0ZXJuX21hdGNoX3Jlc3VsdCByZXQ7CisKKwkJZGlzcGxheV9wcm9ncmVzcyhpc3RhdGUtPnByb2dyZXNzLCBwcm9ncmVzc19ucik7CisKKwkJaWYgKHNlbGVjdF9tYXNrICYmICEoY2UtPmNlX2ZsYWdzICYgc2VsZWN0X21hc2spKSB7CisJCQljYWNoZSsrOworCQkJcHJvZ3Jlc3NfbnIrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHByZWZpeC0+bGVuICYmIHN0cm5jbXAoY2UtPm5hbWUsIHByZWZpeC0+YnVmLCBwcmVmaXgtPmxlbikpCisJCQlicmVhazsKKworCQluYW1lID0gY2UtPm5hbWUgKyBwcmVmaXgtPmxlbjsKKwkJc2xhc2ggPSBzdHJjaHIobmFtZSwgJy8nKTsKKworCQkvKiBJZiBpdCdzIGEgZGlyZWN0b3J5LCB0cnkgd2hvbGUgZGlyZWN0b3J5IG1hdGNoIGZpcnN0ICovCisJCWlmIChzbGFzaCkgeworCQkJaW50IHByb2Nlc3NlZDsKKworCQkJbGVuID0gc2xhc2ggLSBuYW1lOworCQkJc3RyYnVmX2FkZChwcmVmaXgsIG5hbWUsIGxlbik7CisKKwkJCXByb2Nlc3NlZCA9IGNsZWFyX2NlX2ZsYWdzX2Rpcihpc3RhdGUsIGNhY2hlLCBjYWNoZV9lbmQgLSBjYWNoZSwKKwkJCQkJCSAgICAgICBwcmVmaXgsCisJCQkJCQkgICAgICAgcHJlZml4LT5idWYgKyBwcmVmaXgtPmxlbiAtIGxlbiwKKwkJCQkJCSAgICAgICBzZWxlY3RfbWFzaywgY2xlYXJfbWFzaywKKwkJCQkJCSAgICAgICBwbCwgZGVmYXVsdF9tYXRjaCwKKwkJCQkJCSAgICAgICBwcm9ncmVzc19ucik7CisKKwkJCS8qIGNsZWFyX2NfZl9kaXIgZWF0cyBhIHdob2xlIGRpciBhbHJlYWR5PyAqLworCQkJaWYgKHByb2Nlc3NlZCkgeworCQkJCWNhY2hlICs9IHByb2Nlc3NlZDsKKwkJCQlwcm9ncmVzc19uciArPSBwcm9jZXNzZWQ7CisJCQkJc3RyYnVmX3NldGxlbihwcmVmaXgsIHByZWZpeC0+bGVuIC0gbGVuKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJc3RyYnVmX2FkZGNoKHByZWZpeCwgJy8nKTsKKwkJCXByb2Nlc3NlZCA9IGNsZWFyX2NlX2ZsYWdzXzEoaXN0YXRlLCBjYWNoZSwgY2FjaGVfZW5kIC0gY2FjaGUsCisJCQkJCQkgICAgIHByZWZpeCwKKwkJCQkJCSAgICAgc2VsZWN0X21hc2ssIGNsZWFyX21hc2ssIHBsLAorCQkJCQkJICAgICBkZWZhdWx0X21hdGNoLCBwcm9ncmVzc19ucik7CisKKwkJCWNhY2hlICs9IHByb2Nlc3NlZDsKKwkJCXByb2dyZXNzX25yICs9IHByb2Nlc3NlZDsKKworCQkJc3RyYnVmX3NldGxlbihwcmVmaXgsIHByZWZpeC0+bGVuIC0gbGVuIC0gMSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIE5vbi1kaXJlY3RvcnkgKi8KKwkJZHR5cGUgPSBjZV90b19kdHlwZShjZSk7CisJCXJldCA9IHBhdGhfbWF0Y2hlc19wYXR0ZXJuX2xpc3QoY2UtPm5hbWUsCisJCQkJCQljZV9uYW1lbGVuKGNlKSwKKwkJCQkJCW5hbWUsICZkdHlwZSwgcGwsIGlzdGF0ZSk7CisJCWlmIChyZXQgPT0gVU5ERUNJREVEKQorCQkJcmV0ID0gZGVmYXVsdF9tYXRjaDsKKwkJaWYgKHJldCA9PSBNQVRDSEVEIHx8IHJldCA9PSBNQVRDSEVEX1JFQ1VSU0lWRSkKKwkJCWNlLT5jZV9mbGFncyAmPSB+Y2xlYXJfbWFzazsKKwkJY2FjaGUrKzsKKwkJcHJvZ3Jlc3NfbnIrKzsKKwl9CisKKwlkaXNwbGF5X3Byb2dyZXNzKGlzdGF0ZS0+cHJvZ3Jlc3MsIHByb2dyZXNzX25yKTsKKwlyZXR1cm4gbnIgLSAoY2FjaGVfZW5kIC0gY2FjaGUpOworfQorCitzdGF0aWMgaW50IGNsZWFyX2NlX2ZsYWdzKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICBpbnQgc2VsZWN0X21hc2ssIGludCBjbGVhcl9tYXNrLAorCQkJICBzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCwKKwkJCSAgaW50IHNob3dfcHJvZ3Jlc3MpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgcHJlZml4ID0gU1RSQlVGX0lOSVQ7CisJY2hhciBsYWJlbFsxMDBdOworCWludCBydmFsOworCisJc3RyYnVmX3Jlc2V0KCZwcmVmaXgpOworCWlmIChzaG93X3Byb2dyZXNzKQorCQlpc3RhdGUtPnByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcygKKwkJCQkJXygiVXBkYXRpbmcgaW5kZXggZmxhZ3MiKSwKKwkJCQkJaXN0YXRlLT5jYWNoZV9ucik7CisKKwl4c25wcmludGYobGFiZWwsIHNpemVvZihsYWJlbCksICJjbGVhcl9jZV9mbGFncygweCUwOGx4LDB4JTA4bHgpIiwKKwkJICAodW5zaWduZWQgbG9uZylzZWxlY3RfbWFzaywgKHVuc2lnbmVkIGxvbmcpY2xlYXJfbWFzayk7CisJdHJhY2UyX3JlZ2lvbl9lbnRlcigidW5wYWNrX3RyZWVzIiwgbGFiZWwsIHRoZV9yZXBvc2l0b3J5KTsKKwlydmFsID0gY2xlYXJfY2VfZmxhZ3NfMShpc3RhdGUsCisJCQkJaXN0YXRlLT5jYWNoZSwKKwkJCQlpc3RhdGUtPmNhY2hlX25yLAorCQkJCSZwcmVmaXgsCisJCQkJc2VsZWN0X21hc2ssIGNsZWFyX21hc2ssCisJCQkJcGwsIDAsIDApOworCXRyYWNlMl9yZWdpb25fbGVhdmUoInVucGFja190cmVlcyIsIGxhYmVsLCB0aGVfcmVwb3NpdG9yeSk7CisKKwlzdG9wX3Byb2dyZXNzKCZpc3RhdGUtPnByb2dyZXNzKTsKKwlyZXR1cm4gcnZhbDsKK30KKworLyoKKyAqIFNldC9DbGVhciBDRV9ORVdfU0tJUF9XT1JLVFJFRSBhY2NvcmRpbmcgdG8gJEdJVF9ESVIvaW5mby9zcGFyc2UtY2hlY2tvdXQKKyAqLworc3RhdGljIHZvaWQgbWFya19uZXdfc2tpcF93b3JrdHJlZShzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCwKKwkJCQkgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgICBpbnQgc2VsZWN0X2ZsYWcsIGludCBza2lwX3d0X2ZsYWcsCisJCQkJICAgaW50IHNob3dfcHJvZ3Jlc3MpCit7CisJaW50IGk7CisKKwkvKgorCSAqIDEuIFByZXRlbmQgdGhlIG5hcnJvd2VzdCB3b3JrdHJlZTogb25seSB1bm1lcmdlZCBlbnRyaWVzCisJICogYXJlIGNoZWNrZWQgb3V0CisJICovCisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKworCQlpZiAoc2VsZWN0X2ZsYWcgJiYgIShjZS0+Y2VfZmxhZ3MgJiBzZWxlY3RfZmxhZykpCisJCQljb250aW51ZTsKKworCQlpZiAoIWNlX3N0YWdlKGNlKSAmJiAhKGNlLT5jZV9mbGFncyAmIENFX0NPTkZMSUNURUQpKQorCQkJY2UtPmNlX2ZsYWdzIHw9IHNraXBfd3RfZmxhZzsKKwkJZWxzZQorCQkJY2UtPmNlX2ZsYWdzICY9IH5za2lwX3d0X2ZsYWc7CisJfQorCisJLyoKKwkgKiAyLiBXaWRlbiB3b3JrdHJlZSBhY2NvcmRpbmcgdG8gc3BhcnNlLWNoZWNrb3V0IGZpbGUuCisJICogTWF0Y2hlZCBlbnRyaWVzIHdpbGwgaGF2ZSBza2lwX3d0X2ZsYWcgY2xlYXJlZCAoaS5lLiAiaW4iKQorCSAqLworCWNsZWFyX2NlX2ZsYWdzKGlzdGF0ZSwgc2VsZWN0X2ZsYWcsIHNraXBfd3RfZmxhZywgcGwsIHNob3dfcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgdm9pZCBwb3B1bGF0ZV9mcm9tX2V4aXN0aW5nX3BhdHRlcm5zKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywKKwkJCQkJICAgIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKQoreworCWNoYXIgKnNwYXJzZSA9IGdpdF9wYXRoZHVwKCJpbmZvL3NwYXJzZS1jaGVja291dCIpOworCisJcGwtPnVzZV9jb25lX3BhdHRlcm5zID0gY29yZV9zcGFyc2VfY2hlY2tvdXRfY29uZTsKKwlpZiAoYWRkX3BhdHRlcm5zX2Zyb21fZmlsZV90b19saXN0KHNwYXJzZSwgIiIsIDAsIHBsLCBOVUxMKSA8IDApCisJCW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ID0gMTsKKwllbHNlCisJCW8tPnBsID0gcGw7CisJZnJlZShzcGFyc2UpOworfQorCisKK3N0YXRpYyBpbnQgdmVyaWZ5X2Fic2VudChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiwKKwkJCSBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcywKKwkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKik7CisvKgorICogTi13YXkgbWVyZ2UgImxlbiIgdHJlZXMuICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZSB0byBtYW5pcHVsYXRlIHRoZQorICogcmVzdWx0aW5nIGluZGV4LCAtMiBvbiBmYWlsdXJlIHRvIHJlZmxlY3QgdGhlIGNoYW5nZXMgdG8gdGhlIHdvcmsgdHJlZS4KKyAqCisgKiBDRV9BRERFRCwgQ0VfVU5QQUNLRUQgYW5kIENFX05FV19TS0lQX1dPUktUUkVFIGFyZSB1c2VkIGludGVybmFsbHkKKyAqLworaW50IHVucGFja190cmVlcyh1bnNpZ25lZCBsZW4sIHN0cnVjdCB0cmVlX2Rlc2MgKnQsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlpbnQgaSwgcmV0OworCXN0YXRpYyBzdHJ1Y3QgY2FjaGVfZW50cnkgKmRmYzsKKwlzdHJ1Y3QgcGF0dGVybl9saXN0IHBsOworCWludCBmcmVlX3BhdHRlcm5fbGlzdCA9IDA7CisKKwlpZiAobGVuID4gTUFYX1VOUEFDS19UUkVFUykKKwkJZGllKCJ1bnBhY2tfdHJlZXMgdGFrZXMgYXQgbW9zdCAlZCB0cmVlcyIsIE1BWF9VTlBBQ0tfVFJFRVMpOworCisJdHJhY2VfcGVyZm9ybWFuY2VfZW50ZXIoKTsKKwlpZiAoIWNvcmVfYXBwbHlfc3BhcnNlX2NoZWNrb3V0IHx8ICFvLT51cGRhdGUpCisJCW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ID0gMTsKKwlpZiAoIW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ICYmICFvLT5wbCkgeworCQltZW1zZXQoJnBsLCAwLCBzaXplb2YocGwpKTsKKwkJZnJlZV9wYXR0ZXJuX2xpc3QgPSAxOworCQlwb3B1bGF0ZV9mcm9tX2V4aXN0aW5nX3BhdHRlcm5zKG8sICZwbCk7CisJfQorCisJbWVtc2V0KCZvLT5yZXN1bHQsIDAsIHNpemVvZihvLT5yZXN1bHQpKTsKKwlvLT5yZXN1bHQuaW5pdGlhbGl6ZWQgPSAxOworCW8tPnJlc3VsdC50aW1lc3RhbXAuc2VjID0gby0+c3JjX2luZGV4LT50aW1lc3RhbXAuc2VjOworCW8tPnJlc3VsdC50aW1lc3RhbXAubnNlYyA9IG8tPnNyY19pbmRleC0+dGltZXN0YW1wLm5zZWM7CisJby0+cmVzdWx0LnZlcnNpb24gPSBvLT5zcmNfaW5kZXgtPnZlcnNpb247CisJaWYgKCFvLT5zcmNfaW5kZXgtPnNwbGl0X2luZGV4KSB7CisJCW8tPnJlc3VsdC5zcGxpdF9pbmRleCA9IE5VTEw7CisJfSBlbHNlIGlmIChvLT5zcmNfaW5kZXggPT0gby0+ZHN0X2luZGV4KSB7CisJCS8qCisJCSAqIG8tPmRzdF9pbmRleCAoYW5kIHRodXMgby0+c3JjX2luZGV4KSB3aWxsIGJlIGRpc2NhcmRlZAorCQkgKiBhbmQgb3ZlcndyaXR0ZW4gd2l0aCBvLT5yZXN1bHQgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLAorCQkgKiBzbyBqdXN0IHVzZSBzcmNfaW5kZXgncyBzcGxpdF9pbmRleCB0byBhdm9pZCBoYXZpbmcgdG8KKwkJICogY3JlYXRlIGEgbmV3IG9uZS4KKwkJICovCisJCW8tPnJlc3VsdC5zcGxpdF9pbmRleCA9IG8tPnNyY19pbmRleC0+c3BsaXRfaW5kZXg7CisJCW8tPnJlc3VsdC5zcGxpdF9pbmRleC0+cmVmY291bnQrKzsKKwl9IGVsc2UgeworCQlvLT5yZXN1bHQuc3BsaXRfaW5kZXggPSBpbml0X3NwbGl0X2luZGV4KCZvLT5yZXN1bHQpOworCX0KKwlvaWRjcHkoJm8tPnJlc3VsdC5vaWQsICZvLT5zcmNfaW5kZXgtPm9pZCk7CisJby0+bWVyZ2Vfc2l6ZSA9IGxlbjsKKwltYXJrX2FsbF9jZV91bnVzZWQoby0+c3JjX2luZGV4KTsKKworCWlmIChvLT5zcmNfaW5kZXgtPmZzbW9uaXRvcl9sYXN0X3VwZGF0ZSkKKwkJby0+cmVzdWx0LmZzbW9uaXRvcl9sYXN0X3VwZGF0ZSA9IG8tPnNyY19pbmRleC0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlOworCisJLyoKKwkgKiBTcGFyc2UgY2hlY2tvdXQgbG9vcCAjMTogc2V0IE5FV19TS0lQX1dPUktUUkVFIG9uIGV4aXN0aW5nIGVudHJpZXMKKwkgKi8KKwlpZiAoIW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0KQorCQltYXJrX25ld19za2lwX3dvcmt0cmVlKG8tPnBsLCBvLT5zcmNfaW5kZXgsIDAsCisJCQkJICAgICAgIENFX05FV19TS0lQX1dPUktUUkVFLCBvLT52ZXJib3NlX3VwZGF0ZSk7CisKKwlpZiAoIWRmYykKKwkJZGZjID0geGNhbGxvYygxLCBjYWNoZV9lbnRyeV9zaXplKDApKTsKKwlvLT5kZl9jb25mbGljdF9lbnRyeSA9IGRmYzsKKworCWlmIChsZW4pIHsKKwkJY29uc3QgY2hhciAqcHJlZml4ID0gby0+cHJlZml4ID8gby0+cHJlZml4IDogIiI7CisJCXN0cnVjdCB0cmF2ZXJzZV9pbmZvIGluZm87CisKKwkJc2V0dXBfdHJhdmVyc2VfaW5mbygmaW5mbywgcHJlZml4KTsKKwkJaW5mby5mbiA9IHVucGFja19jYWxsYmFjazsKKwkJaW5mby5kYXRhID0gbzsKKwkJaW5mby5zaG93X2FsbF9lcnJvcnMgPSBvLT5zaG93X2FsbF9lcnJvcnM7CisJCWluZm8ucGF0aHNwZWMgPSBvLT5wYXRoc3BlYzsKKworCQlpZiAoby0+cHJlZml4KSB7CisJCQkvKgorCQkJICogVW5wYWNrIGV4aXN0aW5nIGluZGV4IGVudHJpZXMgdGhhdCBzb3J0IGJlZm9yZSB0aGUKKwkJCSAqIHByZWZpeCB0aGUgdHJlZSBpcyBzcGxpY2VkIGludG8uICBOb3RlIHRoYXQgby0+bWVyZ2UKKwkJCSAqIGlzIGFsd2F5cyB0cnVlIGluIHRoaXMgY2FzZS4KKwkJCSAqLworCQkJd2hpbGUgKDEpIHsKKwkJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gbmV4dF9jYWNoZV9lbnRyeShvKTsKKwkJCQlpZiAoIWNlKQorCQkJCQlicmVhazsKKwkJCQlpZiAoY2VfaW5fdHJhdmVyc2VfcGF0aChjZSwgJmluZm8pKQorCQkJCQlicmVhazsKKwkJCQlpZiAodW5wYWNrX2luZGV4X2VudHJ5KGNlLCBvKSA8IDApCisJCQkJCWdvdG8gcmV0dXJuX2ZhaWxlZDsKKwkJCX0KKwkJfQorCisJCXRyYWNlX3BlcmZvcm1hbmNlX2VudGVyKCk7CisJCXJldCA9IHRyYXZlcnNlX3RyZWVzKG8tPnNyY19pbmRleCwgbGVuLCB0LCAmaW5mbyk7CisJCXRyYWNlX3BlcmZvcm1hbmNlX2xlYXZlKCJ0cmF2ZXJzZV90cmVlcyIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gcmV0dXJuX2ZhaWxlZDsKKwl9CisKKwkvKiBBbnkgbGVmdC1vdmVyIGVudHJpZXMgaW4gdGhlIGluZGV4PyAqLworCWlmIChvLT5tZXJnZSkgeworCQl3aGlsZSAoMSkgeworCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IG5leHRfY2FjaGVfZW50cnkobyk7CisJCQlpZiAoIWNlKQorCQkJCWJyZWFrOworCQkJaWYgKHVucGFja19pbmRleF9lbnRyeShjZSwgbykgPCAwKQorCQkJCWdvdG8gcmV0dXJuX2ZhaWxlZDsKKwkJfQorCX0KKwltYXJrX2FsbF9jZV91bnVzZWQoby0+c3JjX2luZGV4KTsKKworCWlmIChvLT50cml2aWFsX21lcmdlc19vbmx5ICYmIG8tPm5vbnRyaXZpYWxfbWVyZ2UpIHsKKwkJcmV0ID0gdW5wYWNrX2ZhaWxlZChvLCAiTWVyZ2UgcmVxdWlyZXMgZmlsZS1sZXZlbCBtZXJnaW5nIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoIW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0KSB7CisJCS8qCisJCSAqIFNwYXJzZSBjaGVja291dCBsb29wICMyOiBzZXQgTkVXX1NLSVBfV09SS1RSRUUgb24gZW50cmllcyBub3QgaW4gbG9vcCAjMQorCQkgKiBJZiB0aGV5IHdpbGwgaGF2ZSBORVdfU0tJUF9XT1JLVFJFRSwgYWxzbyBzZXQgQ0VfU0tJUF9XT1JLVFJFRQorCQkgKiBzbyBhcHBseV9zcGFyc2VfY2hlY2tvdXQoKSB3b24ndCBhdHRlbXB0IHRvIHJlbW92ZSBpdCBmcm9tIHdvcmt0cmVlCisJCSAqLworCQltYXJrX25ld19za2lwX3dvcmt0cmVlKG8tPnBsLCAmby0+cmVzdWx0LAorCQkJCSAgICAgICBDRV9BRERFRCwgQ0VfU0tJUF9XT1JLVFJFRSB8IENFX05FV19TS0lQX1dPUktUUkVFLAorCQkJCSAgICAgICBvLT52ZXJib3NlX3VwZGF0ZSk7CisKKwkJcmV0ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG8tPnJlc3VsdC5jYWNoZV9ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gby0+cmVzdWx0LmNhY2hlW2ldOworCisJCQkvKgorCQkJICogRW50cmllcyBtYXJrZWQgd2l0aCBDRV9BRERFRCBpbiBtZXJnZWRfZW50cnkoKSBkbyBub3QgaGF2ZQorCQkJICogdmVyaWZ5X2Fic2VudCgpIGNoZWNrICh0aGUgY2hlY2sgaXMgZWZmZWN0aXZlbHkgZGlzYWJsZWQKKwkJCSAqIGJlY2F1c2UgQ0VfTkVXX1NLSVBfV09SS1RSRUUgaXMgc2V0IHVuY29uZGl0aW9uYWxseSkuCisJCQkgKgorCQkJICogRG8gdGhlIHJlYWwgY2hlY2sgbm93IGJlY2F1c2Ugd2UgaGF2ZSBoYWQKKwkJCSAqIGNvcnJlY3QgQ0VfTkVXX1NLSVBfV09SS1RSRUUKKwkJCSAqLworCQkJaWYgKGNlLT5jZV9mbGFncyAmIENFX0FEREVEICYmCisJCQkgICAgdmVyaWZ5X2Fic2VudChjZSwgV0FSTklOR19TUEFSU0VfT1JQSEFORURfTk9UX09WRVJXUklUVEVOLCBvKSkKKwkJCQlyZXQgPSAxOworCisJCQlpZiAoYXBwbHlfc3BhcnNlX2NoZWNrb3V0KCZvLT5yZXN1bHQsIGNlLCBvKSkKKwkJCQlyZXQgPSAxOworCQl9CisJCWlmIChyZXQgPT0gMSkgeworCQkJLyoKKwkJCSAqIEluYWJpbGl0eSB0byBzcGFyc2lmeSBvciBkZS1zcGFyc2lmeSBpbmRpdmlkdWFsCisJCQkgKiBwYXRocyBpcyBub3QgYW4gZXJyb3IsIGJ1dCBqdXN0IGEgd2FybmluZy4KKwkJCSAqLworCQkJaWYgKG8tPnNob3dfYWxsX2Vycm9ycykKKwkJCQlkaXNwbGF5X3dhcm5pbmdfbXNncyhvKTsKKwkJCXJldCA9IDA7CisJCX0KKwl9CisKKwlyZXQgPSBjaGVja191cGRhdGVzKG8sICZvLT5yZXN1bHQpID8gKC0yKSA6IDA7CisJaWYgKG8tPmRzdF9pbmRleCkgeworCQltb3ZlX2luZGV4X2V4dGVuc2lvbnMoJm8tPnJlc3VsdCwgby0+c3JjX2luZGV4KTsKKwkJaWYgKCFyZXQpIHsKKwkJCWlmIChnaXRfZW52X2Jvb2woIkdJVF9URVNUX0NIRUNLX0NBQ0hFX1RSRUUiLCAwKSkKKwkJCQljYWNoZV90cmVlX3ZlcmlmeSh0aGVfcmVwb3NpdG9yeSwgJm8tPnJlc3VsdCk7CisJCQlpZiAoIW8tPnJlc3VsdC5jYWNoZV90cmVlKQorCQkJCW8tPnJlc3VsdC5jYWNoZV90cmVlID0gY2FjaGVfdHJlZSgpOworCQkJaWYgKCFjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKG8tPnJlc3VsdC5jYWNoZV90cmVlKSkKKwkJCQljYWNoZV90cmVlX3VwZGF0ZSgmby0+cmVzdWx0LAorCQkJCQkJICBXUklURV9UUkVFX1NJTEVOVCB8CisJCQkJCQkgIFdSSVRFX1RSRUVfUkVQQUlSKTsKKwkJfQorCisJCW8tPnJlc3VsdC51cGRhdGVkX3dvcmtkaXIgPSAxOworCQlkaXNjYXJkX2luZGV4KG8tPmRzdF9pbmRleCk7CisJCSpvLT5kc3RfaW5kZXggPSBvLT5yZXN1bHQ7CisJfSBlbHNlIHsKKwkJZGlzY2FyZF9pbmRleCgmby0+cmVzdWx0KTsKKwl9CisJby0+c3JjX2luZGV4ID0gTlVMTDsKKworZG9uZToKKwlpZiAoZnJlZV9wYXR0ZXJuX2xpc3QpCisJCWNsZWFyX3BhdHRlcm5fbGlzdCgmcGwpOworCXRyYWNlX3BlcmZvcm1hbmNlX2xlYXZlKCJ1bnBhY2tfdHJlZXMiKTsKKwlyZXR1cm4gcmV0OworCityZXR1cm5fZmFpbGVkOgorCWlmIChvLT5zaG93X2FsbF9lcnJvcnMpCisJCWRpc3BsYXlfZXJyb3JfbXNncyhvKTsKKwltYXJrX2FsbF9jZV91bnVzZWQoby0+c3JjX2luZGV4KTsKKwlyZXQgPSB1bnBhY2tfZmFpbGVkKG8sIE5VTEwpOworCWlmIChvLT5leGl0aW5nX2Vhcmx5KQorCQlyZXQgPSAwOworCWdvdG8gZG9uZTsKK30KKworLyoKKyAqIFVwZGF0ZSBTS0lQX1dPUktUUkVFIGJpdHMgYWNjb3JkaW5nIHRvIHNwYXJzaXR5IHBhdHRlcm5zLCBhbmQgdXBkYXRlCisgKiB3b3JraW5nIGRpcmVjdG9yeSB0byBtYXRjaC4KKyAqCisgKiBDRV9ORVdfU0tJUF9XT1JLVFJFRSBpcyB1c2VkIGludGVybmFsbHkuCisgKi8KK2VudW0gdXBkYXRlX3NwYXJzaXR5X3Jlc3VsdCB1cGRhdGVfc3BhcnNpdHkoc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWVudW0gdXBkYXRlX3NwYXJzaXR5X3Jlc3VsdCByZXQgPSBVUERBVEVfU1BBUlNJVFlfU1VDQ0VTUzsKKwlzdHJ1Y3QgcGF0dGVybl9saXN0IHBsOworCWludCBpOworCXVuc2lnbmVkIG9sZF9zaG93X2FsbF9lcnJvcnM7CisJaW50IGZyZWVfcGF0dGVybl9saXN0ID0gMDsKKworCW9sZF9zaG93X2FsbF9lcnJvcnMgPSBvLT5zaG93X2FsbF9lcnJvcnM7CisJby0+c2hvd19hbGxfZXJyb3JzID0gMTsKKworCS8qIFNhbml0eSBjaGVja3MgKi8KKwlpZiAoIW8tPnVwZGF0ZSB8fCBvLT5pbmRleF9vbmx5IHx8IG8tPnNraXBfc3BhcnNlX2NoZWNrb3V0KQorCQlCVUcoInVwZGF0ZV9zcGFyc2l0eSgpIGlzIGZvciByZWZsZWN0aW5nIHNwYXJzaXR5IHBhdHRlcm5zIGluIHdvcmtpbmcgZGlyZWN0b3J5Iik7CisJaWYgKG8tPnNyY19pbmRleCAhPSBvLT5kc3RfaW5kZXggfHwgby0+Zm4pCisJCUJVRygidXBkYXRlX3NwYXJzaXR5KCkgY2FsbGVkIHdyb25nIik7CisKKwl0cmFjZV9wZXJmb3JtYW5jZV9lbnRlcigpOworCisJLyogSWYgd2Ugd2VyZW4ndCBnaXZlbiBwYXR0ZXJucywgdXNlIHRoZSByZWNvcmRlZCBvbmVzICovCisJaWYgKCFvLT5wbCkgeworCQltZW1zZXQoJnBsLCAwLCBzaXplb2YocGwpKTsKKwkJZnJlZV9wYXR0ZXJuX2xpc3QgPSAxOworCQlwb3B1bGF0ZV9mcm9tX2V4aXN0aW5nX3BhdHRlcm5zKG8sICZwbCk7CisJCWlmIChvLT5za2lwX3NwYXJzZV9jaGVja291dCkKKwkJCWdvdG8gc2tpcF9zcGFyc2VfY2hlY2tvdXQ7CisJfQorCisJLyogU2V0IE5FV19TS0lQX1dPUktUUkVFIG9uIGV4aXN0aW5nIGVudHJpZXMuICovCisJbWFya19hbGxfY2VfdW51c2VkKG8tPnNyY19pbmRleCk7CisJbWFya19uZXdfc2tpcF93b3JrdHJlZShvLT5wbCwgby0+c3JjX2luZGV4LCAwLAorCQkJICAgICAgIENFX05FV19TS0lQX1dPUktUUkVFLCBvLT52ZXJib3NlX3VwZGF0ZSk7CisKKwkvKiBUaGVuIGxvb3Agb3ZlciBlbnRyaWVzIGFuZCB1cGRhdGUvcmVtb3ZlIGFzIG5lZWRlZCAqLworCXJldCA9IFVQREFURV9TUEFSU0lUWV9TVUNDRVNTOworCWZvciAoaSA9IDA7IGkgPCBvLT5zcmNfaW5kZXgtPmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IG8tPnNyY19pbmRleC0+Y2FjaGVbaV07CisKKworCQlpZiAoY2Vfc3RhZ2UoY2UpKSB7CisJCQkvKiAtMSBiZWNhdXNlIGZvciBsb29wIHdpbGwgaW5jcmVtZW50IGJ5IDEgKi8KKwkJCWkgKz0gd2Fybl9jb25mbGljdGVkX3BhdGgoby0+c3JjX2luZGV4LCBpLCBvKSAtIDE7CisJCQlyZXQgPSBVUERBVEVfU1BBUlNJVFlfV0FSTklOR1M7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChhcHBseV9zcGFyc2VfY2hlY2tvdXQoby0+c3JjX2luZGV4LCBjZSwgbykpCisJCQlyZXQgPSBVUERBVEVfU1BBUlNJVFlfV0FSTklOR1M7CisJfQorCitza2lwX3NwYXJzZV9jaGVja291dDoKKwlpZiAoY2hlY2tfdXBkYXRlcyhvLCBvLT5zcmNfaW5kZXgpKQorCQlyZXQgPSBVUERBVEVfU1BBUlNJVFlfV09SS1RSRUVfVVBEQVRFX0ZBSUxVUkVTOworCisJZGlzcGxheV93YXJuaW5nX21zZ3Mobyk7CisJby0+c2hvd19hbGxfZXJyb3JzID0gb2xkX3Nob3dfYWxsX2Vycm9yczsKKwlpZiAoZnJlZV9wYXR0ZXJuX2xpc3QpCisJCWNsZWFyX3BhdHRlcm5fbGlzdCgmcGwpOworCXRyYWNlX3BlcmZvcm1hbmNlX2xlYXZlKCJ1cGRhdGVfc3BhcnNpdHkiKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBIZXJlIGNvbWUgdGhlIG1lcmdlIGZ1bmN0aW9ucyAqLworCitzdGF0aWMgaW50IHJlamVjdF9tZXJnZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXJldHVybiBhZGRfcmVqZWN0ZWRfcGF0aChvLCBFUlJPUl9XT1VMRF9PVkVSV1JJVEUsIGNlLT5uYW1lKTsKK30KKworc3RhdGljIGludCBzYW1lKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqYSwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpiKQoreworCWlmICghIWEgIT0gISFiKQorCQlyZXR1cm4gMDsKKwlpZiAoIWEgJiYgIWIpCisJCXJldHVybiAxOworCWlmICgoYS0+Y2VfZmxhZ3MgfCBiLT5jZV9mbGFncykgJiBDRV9DT05GTElDVEVEKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gYS0+Y2VfbW9kZSA9PSBiLT5jZV9tb2RlICYmCisJICAgICAgIG9pZGVxKCZhLT5vaWQsICZiLT5vaWQpOworfQorCisKKy8qCisgKiBXaGVuIGEgQ0UgZ2V0cyB0dXJuZWQgaW50byBhbiB1bm1lcmdlZCBlbnRyeSwgd2UKKyAqIHdhbnQgaXQgdG8gYmUgdXAtdG8tZGF0ZQorICovCitzdGF0aWMgaW50IHZlcmlmeV91cHRvZGF0ZV8xKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywKKwkJCSAgICAgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChvLT5pbmRleF9vbmx5KQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQ0VfVkFMSUQgYW5kIENFX1NLSVBfV09SS1RSRUUgY2hlYXQsIHdlIGJldHRlciBjaGVjayBhZ2FpbgorCSAqIGlmIHRoaXMgZW50cnkgaXMgdHJ1bHkgdXAtdG8tZGF0ZSBiZWNhdXNlIHRoaXMgZmlsZSBtYXkgYmUKKwkgKiBvdmVyd3JpdHRlbi4KKwkgKi8KKwlpZiAoKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSB8fCBjZV9za2lwX3dvcmt0cmVlKGNlKSkKKwkJOyAvKiBrZWVwIGNoZWNraW5nICovCisJZWxzZSBpZiAoby0+cmVzZXQgfHwgY2VfdXB0b2RhdGUoY2UpKQorCQlyZXR1cm4gMDsKKworCWlmICghbHN0YXQoY2UtPm5hbWUsICZzdCkpIHsKKwkJaW50IGZsYWdzID0gQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEfENFX01BVENIX0lHTk9SRV9TS0lQX1dPUktUUkVFOworCQl1bnNpZ25lZCBjaGFuZ2VkID0gaWVfbWF0Y2hfc3RhdChvLT5zcmNfaW5kZXgsIGNlLCAmc3QsIGZsYWdzKTsKKworCQlpZiAoc3VibW9kdWxlX2Zyb21fY2UoY2UpKSB7CisJCQlpbnQgciA9IGNoZWNrX3N1Ym1vZHVsZV9tb3ZlX2hlYWQoY2UsCisJCQkJIkhFQUQiLCBvaWRfdG9faGV4KCZjZS0+b2lkKSwgbyk7CisJCQlpZiAocikKKwkJCQlyZXR1cm4gYWRkX3JlamVjdGVkX3BhdGgobywgZXJyb3JfdHlwZSwgY2UtPm5hbWUpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoIWNoYW5nZWQpCisJCQlyZXR1cm4gMDsKKwkJLyoKKwkJICogSGlzdG9yaWMgZGVmYXVsdCBwb2xpY3kgd2FzIHRvIGFsbG93IHN1Ym1vZHVsZSB0byBiZSBvdXQKKwkJICogb2Ygc3luYyB3cnQgdGhlIHN1cGVycHJvamVjdCBpbmRleC4gSWYgdGhlIHN1Ym1vZHVsZSB3YXMKKwkJICogbm90IGNvbnNpZGVyZWQgaW50ZXJlc3RpbmcgYWJvdmUsIHdlIGRvbid0IGNhcmUgaGVyZS4KKwkJICovCisJCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQlyZXR1cm4gMDsKKworCQllcnJubyA9IDA7CisJfQorCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCXJldHVybiAwOworCXJldHVybiBhZGRfcmVqZWN0ZWRfcGF0aChvLCBlcnJvcl90eXBlLCBjZS0+bmFtZSk7Cit9CisKK2ludCB2ZXJpZnlfdXB0b2RhdGUoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlpZiAoIW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ICYmIChjZS0+Y2VfZmxhZ3MgJiBDRV9ORVdfU0tJUF9XT1JLVFJFRSkpCisJCXJldHVybiAwOworCXJldHVybiB2ZXJpZnlfdXB0b2RhdGVfMShjZSwgbywgRVJST1JfTk9UX1VQVE9EQVRFX0ZJTEUpOworfQorCitzdGF0aWMgaW50IHZlcmlmeV91cHRvZGF0ZV9zcGFyc2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlyZXR1cm4gdmVyaWZ5X3VwdG9kYXRlXzEoY2UsIG8sIFdBUk5JTkdfU1BBUlNFX05PVF9VUFRPREFURV9GSUxFKTsKK30KKworLyoKKyAqIFRPRE86IFdlIHNob3VsZCBhY3R1YWxseSBpbnZhbGlkYXRlIG8tPnJlc3VsdCwgbm90IHNyY19pbmRleCBbMV0uCisgKiBCdXQgc2luY2UgY2FjaGUgdHJlZSBhbmQgdW50cmFja2VkIGNhY2hlIGJvdGggYXJlIG5vdCBjb3BpZWQgdG8KKyAqIG8tPnJlc3VsdCB1bnRpbCB1bnBhY2tpbmcgaXMgY29tcGxldGUsIHdlIGludmFsaWRhdGUgdGhlbSBvbgorICogc3JjX2luZGV4IGluc3RlYWQgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZXkgd2lsbCBiZSBjb3BpZWQgdG8KKyAqIGRzdF9pbmRleCBhdCB0aGUgZW5kLgorICoKKyAqIFsxXSBzcmNfaW5kZXgtPmNhY2hlX3RyZWUgaXMgYWxzbyB1c2VkIGluIHVucGFja19jYWxsYmFjaygpIHNvIGlmCisgKiB3ZSBpbnZhbGlkYXRlIG8tPnJlc3VsdCwgd2UgbmVlZCB0byB1cGRhdGUgaXQgdG8gdXNlCisgKiBvLT5yZXN1bHQuY2FjaGVfdHJlZSBhcyB3ZWxsLgorICovCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX2NlX3BhdGgoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCSAgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaWYgKCFjZSkKKwkJcmV0dXJuOworCWNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKG8tPnNyY19pbmRleCwgY2UtPm5hbWUpOworCXVudHJhY2tlZF9jYWNoZV9pbnZhbGlkYXRlX3BhdGgoby0+c3JjX2luZGV4LCBjZS0+bmFtZSwgMSk7Cit9CisKKy8qCisgKiBDaGVjayB0aGF0IGNoZWNraW5nIG91dCBjZS0+c2hhMSBpbiBzdWJkaXIgY2UtPm5hbWUgaXMgbm90CisgKiBnb2luZyB0byBvdmVyd3JpdGUgYW55IHdvcmtpbmcgZmlsZXMuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X2NsZWFuX3N1Ym1vZHVsZShjb25zdCBjaGFyICpvbGRfc2hhMSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaWYgKCFzdWJtb2R1bGVfZnJvbV9jZShjZSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGNoZWNrX3N1Ym1vZHVsZV9tb3ZlX2hlYWQoY2UsIG9sZF9zaGExLAorCQkJCQkgb2lkX3RvX2hleCgmY2UtPm9pZCksIG8pOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9jbGVhbl9zdWJkaXJlY3RvcnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwkvKgorCSAqIHdlIGFyZSBhYm91dCB0byBleHRyYWN0ICJjZS0+bmFtZSI7IHdlIHdvdWxkIG5vdCB3YW50IHRvIGxvc2UKKwkgKiBhbnl0aGluZyBpbiB0aGUgZXhpc3RpbmcgZGlyZWN0b3J5IHRoZXJlLgorCSAqLworCWludCBuYW1lbGVuOworCWludCBpOworCXN0cnVjdCBkaXJfc3RydWN0IGQ7CisJY2hhciAqcGF0aGJ1ZjsKKwlpbnQgY250ID0gMDsKKworCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWludCBzdWJfaGVhZCA9IHJlc29sdmVfZ2l0bGlua19yZWYoY2UtPm5hbWUsICJIRUFEIiwgJm9pZCk7CisJCS8qCisJCSAqIElmIHdlIGFyZSBub3QgZ29pbmcgdG8gdXBkYXRlIHRoZSBzdWJtb2R1bGUsIHRoZW4KKwkJICogd2UgZG9uJ3QgY2FyZS4KKwkJICovCisJCWlmICghc3ViX2hlYWQgJiYgb2lkZXEoJm9pZCwgJmNlLT5vaWQpKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiB2ZXJpZnlfY2xlYW5fc3VibW9kdWxlKHN1Yl9oZWFkID8gTlVMTCA6IG9pZF90b19oZXgoJm9pZCksCisJCQkJCSAgICAgIGNlLCBvKTsKKwl9CisKKwkvKgorCSAqIEZpcnN0IGxldCdzIG1ha2Ugc3VyZSB3ZSBkbyBub3QgaGF2ZSBhIGxvY2FsIG1vZGlmaWNhdGlvbgorCSAqIGluIHRoYXQgZGlyZWN0b3J5LgorCSAqLworCW5hbWVsZW4gPSBjZV9uYW1lbGVuKGNlKTsKKwlmb3IgKGkgPSBsb2NhdGVfaW5fc3JjX2luZGV4KGNlLCBvKTsKKwkgICAgIGkgPCBvLT5zcmNfaW5kZXgtPmNhY2hlX25yOworCSAgICAgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UyID0gby0+c3JjX2luZGV4LT5jYWNoZVtpXTsKKwkJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UyKTsKKwkJaWYgKGxlbiA8IG5hbWVsZW4gfHwKKwkJICAgIHN0cm5jbXAoY2UtPm5hbWUsIGNlMi0+bmFtZSwgbmFtZWxlbikgfHwKKwkJICAgIGNlMi0+bmFtZVtuYW1lbGVuXSAhPSAnLycpCisJCQlicmVhazsKKwkJLyoKKwkJICogY2UyLT5uYW1lIGlzIGFuIGVudHJ5IGluIHRoZSBzdWJkaXJlY3RvcnkgdG8gYmUKKwkJICogcmVtb3ZlZC4KKwkJICovCisJCWlmICghY2Vfc3RhZ2UoY2UyKSkgeworCQkJaWYgKHZlcmlmeV91cHRvZGF0ZShjZTIsIG8pKQorCQkJCXJldHVybiAtMTsKKwkJCWFkZF9lbnRyeShvLCBjZTIsIENFX1JFTU9WRSwgMCk7CisJCQlpbnZhbGlkYXRlX2NlX3BhdGgoY2UsIG8pOworCQkJbWFya19jZV91c2VkKGNlMiwgbyk7CisJCX0KKwkJY250Kys7CisJfQorCisJLyoKKwkgKiBUaGVuIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZG8gbm90IGxvc2UgYSBsb2NhbGx5CisJICogcHJlc2VudCBmaWxlIHRoYXQgaXMgbm90IGlnbm9yZWQuCisJICovCisJcGF0aGJ1ZiA9IHhzdHJmbXQoIiUuKnMvIiwgbmFtZWxlbiwgY2UtPm5hbWUpOworCisJbWVtc2V0KCZkLCAwLCBzaXplb2YoZCkpOworCWlmIChvLT5kaXIpCisJCWQuZXhjbHVkZV9wZXJfZGlyID0gby0+ZGlyLT5leGNsdWRlX3Blcl9kaXI7CisJaSA9IHJlYWRfZGlyZWN0b3J5KCZkLCBvLT5zcmNfaW5kZXgsIHBhdGhidWYsIG5hbWVsZW4rMSwgTlVMTCk7CisJaWYgKGkpCisJCXJldHVybiBhZGRfcmVqZWN0ZWRfcGF0aChvLCBFUlJPUl9OT1RfVVBUT0RBVEVfRElSLCBjZS0+bmFtZSk7CisJZnJlZShwYXRoYnVmKTsKKwlyZXR1cm4gY250OworfQorCisvKgorICogVGhpcyBnZXRzIGNhbGxlZCB3aGVuIHRoZXJlIHdhcyBubyBpbmRleCBlbnRyeSBmb3IgdGhlIHRyZWUgZW50cnkgJ2RzdCcsCisgKiBidXQgd2UgZm91bmQgYSBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdCAnbHN0YXQoKScgc2FpZCB3YXMgZmluZSwKKyAqIGFuZCB3ZSdyZSBvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbS4KKyAqCisgKiBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGluIHRoZSBpbmRleCB0aGF0IGFsc28KKyAqIG1hdGNoZXMgdGhlIHN0YXQgaW5mb3JtYXRpb24sIGFuZCBhc3N1bWUgaXQncyB0aGF0IG90aGVyIGZpbGUhCisgKi8KK3N0YXRpYyBpbnQgaWNhc2VfZXhpc3RzKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgc3RydWN0IHN0YXQgKnN0KQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjOworCisJc3JjID0gaW5kZXhfZmlsZV9leGlzdHMoby0+c3JjX2luZGV4LCBuYW1lLCBsZW4sIDEpOworCXJldHVybiBzcmMgJiYgIWllX21hdGNoX3N0YXQoby0+c3JjX2luZGV4LCBzcmMsIHN0LCBDRV9NQVRDSF9JR05PUkVfVkFMSUR8Q0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUUpOworfQorCitzdGF0aWMgaW50IGNoZWNrX29rX3RvX3JlbW92ZShjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgZHR5cGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QsCisJCQkgICAgICBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcyBlcnJvcl90eXBlLAorCQkJICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqcmVzdWx0OworCisJLyoKKwkgKiBJdCBtYXkgYmUgdGhhdCB0aGUgJ2xzdGF0KCknIHN1Y2NlZWRlZCBldmVuIHRob3VnaAorCSAqIHRhcmdldCAnY2UnIHdhcyBhYnNlbnQsIGJlY2F1c2UgdGhlcmUgaXMgYW4gb2xkCisJICogZW50cnkgdGhhdCBpcyBkaWZmZXJlbnQgb25seSBpbiBjYXNlLi4KKwkgKgorCSAqIElnbm9yZSB0aGF0IGxzdGF0KCkgaWYgaXQgbWF0Y2hlcy4KKwkgKi8KKwlpZiAoaWdub3JlX2Nhc2UgJiYgaWNhc2VfZXhpc3RzKG8sIG5hbWUsIGxlbiwgc3QpKQorCQlyZXR1cm4gMDsKKworCWlmIChvLT5kaXIgJiYKKwkgICAgaXNfZXhjbHVkZWQoby0+ZGlyLCBvLT5zcmNfaW5kZXgsIG5hbWUsICZkdHlwZSkpCisJCS8qCisJCSAqIGNlLT5uYW1lIGlzIGV4cGxpY2l0bHkgZXhjbHVkZWQsIHNvIGl0IGlzIE9rIHRvCisJCSAqIG92ZXJ3cml0ZSBpdC4KKwkJICovCisJCXJldHVybiAwOworCWlmIChTX0lTRElSKHN0LT5zdF9tb2RlKSkgeworCQkvKgorCQkgKiBXZSBhcmUgY2hlY2tpbmcgb3V0IHBhdGggImZvbyIgYW5kCisJCSAqIGZvdW5kICJmb28vLiIgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKwkJICogVGhpcyBpcyB0cmlja3kgLS0gaWYgd2UgaGF2ZSBtb2RpZmllZAorCQkgKiBmaWxlcyB0aGF0IGFyZSBpbiAiZm9vLyIgd2Ugd291bGQgbG9zZQorCQkgKiB0aGVtLgorCQkgKi8KKwkJaWYgKHZlcmlmeV9jbGVhbl9zdWJkaXJlY3RvcnkoY2UsIG8pIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBUaGUgcHJldmlvdXMgcm91bmQgbWF5IGFscmVhZHkgaGF2ZSBkZWNpZGVkIHRvCisJICogZGVsZXRlIHRoaXMgcGF0aCwgd2hpY2ggaXMgaW4gYSBzdWJkaXJlY3RvcnkgdGhhdAorCSAqIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYSBibG9iLgorCSAqLworCXJlc3VsdCA9IGluZGV4X2ZpbGVfZXhpc3RzKCZvLT5yZXN1bHQsIG5hbWUsIGxlbiwgMCk7CisJaWYgKHJlc3VsdCkgeworCQlpZiAocmVzdWx0LT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiBhZGRfcmVqZWN0ZWRfcGF0aChvLCBlcnJvcl90eXBlLCBuYW1lKTsKK30KKworLyoKKyAqIFdlIGRvIG5vdCB3YW50IHRvIHJlbW92ZSBvciBvdmVyd3JpdGUgYSB3b3JraW5nIHRyZWUgZmlsZSB0aGF0CisgKiBpcyBub3QgdHJhY2tlZCwgdW5sZXNzIGl0IGlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X2Fic2VudF8xKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcyBlcnJvcl90eXBlLAorCQkJICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWludCBsZW47CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoby0+aW5kZXhfb25seSB8fCBvLT5yZXNldCB8fCAhby0+dXBkYXRlKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IGNoZWNrX2xlYWRpbmdfcGF0aChjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpOworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmIChsZW4gPiAwKSB7CisJCWNoYXIgKnBhdGg7CisJCWludCByZXQ7CisKKwkJcGF0aCA9IHhtZW1kdXB6KGNlLT5uYW1lLCBsZW4pOworCQlpZiAobHN0YXQocGF0aCwgJnN0KSkKKwkJCXJldCA9IGVycm9yX2Vycm5vKCJjYW5ub3Qgc3RhdCAnJXMnIiwgcGF0aCk7CisJCWVsc2UgeworCQkJaWYgKHN1Ym1vZHVsZV9mcm9tX2NlKGNlKSkKKwkJCQlyZXQgPSBjaGVja19zdWJtb2R1bGVfbW92ZV9oZWFkKGNlLAorCQkJCQkJCQlvaWRfdG9faGV4KCZjZS0+b2lkKSwKKwkJCQkJCQkJTlVMTCwgbyk7CisJCQllbHNlCisJCQkJcmV0ID0gY2hlY2tfb2tfdG9fcmVtb3ZlKHBhdGgsIGxlbiwgRFRfVU5LTk9XTiwgTlVMTCwKKwkJCQkJCQkgJnN0LCBlcnJvcl90eXBlLCBvKTsKKwkJfQorCQlmcmVlKHBhdGgpOworCQlyZXR1cm4gcmV0OworCX0gZWxzZSBpZiAobHN0YXQoY2UtPm5hbWUsICZzdCkpIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCXJldHVybiBlcnJvcl9lcnJubygiY2Fubm90IHN0YXQgJyVzJyIsIGNlLT5uYW1lKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWYgKHN1Ym1vZHVsZV9mcm9tX2NlKGNlKSkKKwkJCXJldHVybiBjaGVja19zdWJtb2R1bGVfbW92ZV9oZWFkKGNlLCBvaWRfdG9faGV4KCZjZS0+b2lkKSwKKwkJCQkJCQkgTlVMTCwgbyk7CisKKwkJcmV0dXJuIGNoZWNrX29rX3RvX3JlbW92ZShjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksCisJCQkJCSAgY2VfdG9fZHR5cGUoY2UpLCBjZSwgJnN0LAorCQkJCQkgIGVycm9yX3R5cGUsIG8pOworCX0KK30KKworc3RhdGljIGludCB2ZXJpZnlfYWJzZW50KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSwKKwkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaWYgKCFvLT5za2lwX3NwYXJzZV9jaGVja291dCAmJiAoY2UtPmNlX2ZsYWdzICYgQ0VfTkVXX1NLSVBfV09SS1RSRUUpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdmVyaWZ5X2Fic2VudF8xKGNlLCBlcnJvcl90eXBlLCBvKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfYWJzZW50X3NwYXJzZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCWVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzIGVycm9yX3R5cGUsCisJCQkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXJldHVybiB2ZXJpZnlfYWJzZW50XzEoY2UsIGVycm9yX3R5cGUsIG8pOworfQorCitzdGF0aWMgaW50IG1lcmdlZF9lbnRyeShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsCisJCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaW50IHVwZGF0ZSA9IENFX1VQREFURTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKm1lcmdlID0gZHVwX2NhY2hlX2VudHJ5KGNlLCAmby0+cmVzdWx0KTsKKworCWlmICghb2xkKSB7CisJCS8qCisJCSAqIE5ldyBpbmRleCBlbnRyaWVzLiBJbiBzcGFyc2UgY2hlY2tvdXQsIHRoZSBmb2xsb3dpbmcKKwkJICogdmVyaWZ5X2Fic2VudCgpIHdpbGwgYmUgZGVsYXllZCB1bnRpbCBhZnRlcgorCQkgKiB0cmF2ZXJzZV90cmVlcygpIGZpbmlzaGVzIGluIHVucGFja190cmVlcygpLCB0aGVuOgorCQkgKgorCQkgKiAgLSBDRV9ORVdfU0tJUF9XT1JLVFJFRSB3aWxsIGJlIGNvbXB1dGVkIGNvcnJlY3RseQorCQkgKiAgLSB2ZXJpZnlfYWJzZW50KCkgYmUgY2FsbGVkIGFnYWluLCB0aGlzIHRpbWUgd2l0aAorCQkgKiAgICBjb3JyZWN0IENFX05FV19TS0lQX1dPUktUUkVFCisJCSAqCisJCSAqIHZlcmlmeV9hYnNlbnQoKSBjYWxsIGhlcmUgZG9lcyBub3RoaW5nIGluIHNwYXJzZQorCQkgKiBjaGVja291dCAoaS5lLiBvLT5za2lwX3NwYXJzZV9jaGVja291dCA9PSAwKQorCQkgKi8KKwkJdXBkYXRlIHw9IENFX0FEREVEOworCQltZXJnZS0+Y2VfZmxhZ3MgfD0gQ0VfTkVXX1NLSVBfV09SS1RSRUU7CisKKwkJaWYgKHZlcmlmeV9hYnNlbnQobWVyZ2UsCisJCQkJICBFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9PVkVSV1JJVFRFTiwgbykpIHsKKwkJCWRpc2NhcmRfY2FjaGVfZW50cnkobWVyZ2UpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWludmFsaWRhdGVfY2VfcGF0aChtZXJnZSwgbyk7CisKKwkJaWYgKHN1Ym1vZHVsZV9mcm9tX2NlKGNlKSAmJiBmaWxlX2V4aXN0cyhjZS0+bmFtZSkpIHsKKwkJCWludCByZXQgPSBjaGVja19zdWJtb2R1bGVfbW92ZV9oZWFkKGNlLCBOVUxMLAorCQkJCQkJCSAgICBvaWRfdG9faGV4KCZjZS0+b2lkKSwKKwkJCQkJCQkgICAgbyk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKworCX0gZWxzZSBpZiAoIShvbGQtPmNlX2ZsYWdzICYgQ0VfQ09ORkxJQ1RFRCkpIHsKKwkJLyoKKwkJICogU2VlIGlmIHdlIGNhbiByZS11c2UgdGhlIG9sZCBDRSBkaXJlY3RseT8KKwkJICogVGhhdCB3YXkgd2UgZ2V0IHRoZSB1cHRvZGF0ZSBzdGF0IGluZm8uCisJCSAqCisJCSAqIFRoaXMgYWxzbyByZW1vdmVzIHRoZSBVUERBVEUgZmxhZyBvbiBhIG1hdGNoOyBvdGhlcndpc2UKKwkJICogd2Ugd2lsbCBlbmQgdXAgb3ZlcndyaXRpbmcgbG9jYWwgY2hhbmdlcyBpbiB0aGUgd29yayB0cmVlLgorCQkgKi8KKwkJaWYgKHNhbWUob2xkLCBtZXJnZSkpIHsKKwkJCWNvcHlfY2FjaGVfZW50cnkobWVyZ2UsIG9sZCk7CisJCQl1cGRhdGUgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKHZlcmlmeV91cHRvZGF0ZShvbGQsIG8pKSB7CisJCQkJZGlzY2FyZF9jYWNoZV9lbnRyeShtZXJnZSk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJLyogTWlncmF0ZSBvbGQgZmxhZ3Mgb3ZlciAqLworCQkJdXBkYXRlIHw9IG9sZC0+Y2VfZmxhZ3MgJiAoQ0VfU0tJUF9XT1JLVFJFRSB8IENFX05FV19TS0lQX1dPUktUUkVFKTsKKwkJCWludmFsaWRhdGVfY2VfcGF0aChvbGQsIG8pOworCQl9CisKKwkJaWYgKHN1Ym1vZHVsZV9mcm9tX2NlKGNlKSAmJiBmaWxlX2V4aXN0cyhjZS0+bmFtZSkpIHsKKwkJCWludCByZXQgPSBjaGVja19zdWJtb2R1bGVfbW92ZV9oZWFkKGNlLCBvaWRfdG9faGV4KCZvbGQtPm9pZCksCisJCQkJCQkJICAgIG9pZF90b19oZXgoJmNlLT5vaWQpLAorCQkJCQkJCSAgICBvKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIFByZXZpb3VzbHkgdW5tZXJnZWQgZW50cnkgbGVmdCBhcyBhbiBleGlzdGVuY2UKKwkJICogbWFya2VyIGJ5IHJlYWRfaW5kZXhfdW5tZXJnZWQoKTsKKwkJICovCisJCWludmFsaWRhdGVfY2VfcGF0aChvbGQsIG8pOworCX0KKworCWlmIChkb19hZGRfZW50cnkobywgbWVyZ2UsIHVwZGF0ZSwgQ0VfU1RBR0VNQVNLKSA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkZWxldGVkX2VudHJ5KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsCisJCQkgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCS8qIERpZCBpdCBleGlzdCBpbiB0aGUgaW5kZXg/ICovCisJaWYgKCFvbGQpIHsKKwkJaWYgKHZlcmlmeV9hYnNlbnQoY2UsIEVSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX1JFTU9WRUQsIG8pKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCEob2xkLT5jZV9mbGFncyAmIENFX0NPTkZMSUNURUQpICYmIHZlcmlmeV91cHRvZGF0ZShvbGQsIG8pKQorCQlyZXR1cm4gLTE7CisJYWRkX2VudHJ5KG8sIGNlLCBDRV9SRU1PVkUsIDApOworCWludmFsaWRhdGVfY2VfcGF0aChjZSwgbyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQga2VlcF9lbnRyeShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJYWRkX2VudHJ5KG8sIGNlLCAwLCAwKTsKKwlpZiAoY2Vfc3RhZ2UoY2UpKQorCQlpbnZhbGlkYXRlX2NlX3BhdGgoY2UsIG8pOworCXJldHVybiAxOworfQorCisjaWYgREJSVF9ERUJVRworc3RhdGljIHZvaWQgc2hvd19zdGFnZV9lbnRyeShGSUxFICpvLAorCQkJICAgICBjb25zdCBjaGFyICpsYWJlbCwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpZiAoIWNlKQorCQlmcHJpbnRmKG8sICIlcyAobWlzc2luZylcbiIsIGxhYmVsKTsKKwllbHNlCisJCWZwcmludGYobywgIiVzJTA2byAlcyAlZFx0JXNcbiIsCisJCQlsYWJlbCwKKwkJCWNlLT5jZV9tb2RlLAorCQkJb2lkX3RvX2hleCgmY2UtPm9pZCksCisJCQljZV9zdGFnZShjZSksCisJCQljZS0+bmFtZSk7Cit9CisjZW5kaWYKKworaW50IHRocmVld2F5X21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzdGFnZXMsCisJCSAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmluZGV4OworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqaGVhZDsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlbW90ZSA9IHN0YWdlc1tvLT5oZWFkX2lkeCArIDFdOworCWludCBjb3VudDsKKwlpbnQgaGVhZF9tYXRjaCA9IDA7CisJaW50IHJlbW90ZV9tYXRjaCA9IDA7CisKKwlpbnQgZGZfY29uZmxpY3RfaGVhZCA9IDA7CisJaW50IGRmX2NvbmZsaWN0X3JlbW90ZSA9IDA7CisKKwlpbnQgYW55X2FuY19taXNzaW5nID0gMDsKKwlpbnQgbm9fYW5jX2V4aXN0cyA9IDE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgby0+aGVhZF9pZHg7IGkrKykgeworCQlpZiAoIXN0YWdlc1tpXSB8fCBzdGFnZXNbaV0gPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpCisJCQlhbnlfYW5jX21pc3NpbmcgPSAxOworCQllbHNlCisJCQlub19hbmNfZXhpc3RzID0gMDsKKwl9CisKKwlpbmRleCA9IHN0YWdlc1swXTsKKwloZWFkID0gc3RhZ2VzW28tPmhlYWRfaWR4XTsKKworCWlmIChoZWFkID09IG8tPmRmX2NvbmZsaWN0X2VudHJ5KSB7CisJCWRmX2NvbmZsaWN0X2hlYWQgPSAxOworCQloZWFkID0gTlVMTDsKKwl9CisKKwlpZiAocmVtb3RlID09IG8tPmRmX2NvbmZsaWN0X2VudHJ5KSB7CisJCWRmX2NvbmZsaWN0X3JlbW90ZSA9IDE7CisJCXJlbW90ZSA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBGaXJzdCwgaWYgdGhlcmUncyBhICMxNiBzaXR1YXRpb24sIG5vdGUgdGhhdCB0byBwcmV2ZW50ICMxMworCSAqIGFuZCAjMTQuCisJICovCisJaWYgKCFzYW1lKHJlbW90ZSwgaGVhZCkpIHsKKwkJZm9yIChpID0gMTsgaSA8IG8tPmhlYWRfaWR4OyBpKyspIHsKKwkJCWlmIChzYW1lKHN0YWdlc1tpXSwgaGVhZCkpIHsKKwkJCQloZWFkX21hdGNoID0gaTsKKwkJCX0KKwkJCWlmIChzYW1lKHN0YWdlc1tpXSwgcmVtb3RlKSkgeworCQkJCXJlbW90ZV9tYXRjaCA9IGk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIHN0YXJ0IHdpdGggY2FzZXMgd2hlcmUgdGhlIGluZGV4IGlzIGFsbG93ZWQgdG8gbWF0Y2gKKwkgKiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgaGVhZDogIzE0KEFMVCkgYW5kICMyQUxULCB3aGVyZSBpdAorCSAqIGlzIHBlcm1pdHRlZCB0byBtYXRjaCB0aGUgcmVzdWx0IGluc3RlYWQuCisJICovCisJLyogIzE0LCAjMTRBTFQsICMyQUxUICovCisJaWYgKHJlbW90ZSAmJiAhZGZfY29uZmxpY3RfaGVhZCAmJiBoZWFkX21hdGNoICYmICFyZW1vdGVfbWF0Y2gpIHsKKwkJaWYgKGluZGV4ICYmICFzYW1lKGluZGV4LCByZW1vdGUpICYmICFzYW1lKGluZGV4LCBoZWFkKSkKKwkJCXJldHVybiByZWplY3RfbWVyZ2UoaW5kZXgsIG8pOworCQlyZXR1cm4gbWVyZ2VkX2VudHJ5KHJlbW90ZSwgaW5kZXgsIG8pOworCX0KKwkvKgorCSAqIElmIHdlIGhhdmUgYW4gZW50cnkgaW4gdGhlIGluZGV4IGNhY2hlLCB0aGVuIHdlIHdhbnQgdG8KKwkgKiBtYWtlIHN1cmUgdGhhdCBpdCBtYXRjaGVzIGhlYWQuCisJICovCisJaWYgKGluZGV4ICYmICFzYW1lKGluZGV4LCBoZWFkKSkKKwkJcmV0dXJuIHJlamVjdF9tZXJnZShpbmRleCwgbyk7CisKKwlpZiAoaGVhZCkgeworCQkvKiAjNUFMVCwgIzE1ICovCisJCWlmIChzYW1lKGhlYWQsIHJlbW90ZSkpCisJCQlyZXR1cm4gbWVyZ2VkX2VudHJ5KGhlYWQsIGluZGV4LCBvKTsKKwkJLyogIzEzLCAjM0FMVCAqLworCQlpZiAoIWRmX2NvbmZsaWN0X3JlbW90ZSAmJiByZW1vdGVfbWF0Y2ggJiYgIWhlYWRfbWF0Y2gpCisJCQlyZXR1cm4gbWVyZ2VkX2VudHJ5KGhlYWQsIGluZGV4LCBvKTsKKwl9CisKKwkvKiAjMSAqLworCWlmICghaGVhZCAmJiAhcmVtb3RlICYmIGFueV9hbmNfbWlzc2luZykKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFVuZGVyIHRoZSAiYWdncmVzc2l2ZSIgcnVsZSwgd2UgcmVzb2x2ZSBtb3N0bHkgdHJpdmlhbAorCSAqIGNhc2VzIHRoYXQgd2UgaGlzdG9yaWNhbGx5IGhhZCBnaXQtbWVyZ2Utb25lLWZpbGUgcmVzb2x2ZS4KKwkgKi8KKwlpZiAoby0+YWdncmVzc2l2ZSkgeworCQlpbnQgaGVhZF9kZWxldGVkID0gIWhlYWQ7CisJCWludCByZW1vdGVfZGVsZXRlZCA9ICFyZW1vdGU7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBOVUxMOworCisJCWlmIChpbmRleCkKKwkJCWNlID0gaW5kZXg7CisJCWVsc2UgaWYgKGhlYWQpCisJCQljZSA9IGhlYWQ7CisJCWVsc2UgaWYgKHJlbW90ZSkKKwkJCWNlID0gcmVtb3RlOworCQllbHNlIHsKKwkJCWZvciAoaSA9IDE7IGkgPCBvLT5oZWFkX2lkeDsgaSsrKSB7CisJCQkJaWYgKHN0YWdlc1tpXSAmJiBzdGFnZXNbaV0gIT0gby0+ZGZfY29uZmxpY3RfZW50cnkpIHsKKwkJCQkJY2UgPSBzdGFnZXNbaV07CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIERlbGV0ZWQgaW4gYm90aC4KKwkJICogRGVsZXRlZCBpbiBvbmUgYW5kIHVuY2hhbmdlZCBpbiB0aGUgb3RoZXIuCisJCSAqLworCQlpZiAoKGhlYWRfZGVsZXRlZCAmJiByZW1vdGVfZGVsZXRlZCkgfHwKKwkJICAgIChoZWFkX2RlbGV0ZWQgJiYgcmVtb3RlICYmIHJlbW90ZV9tYXRjaCkgfHwKKwkJICAgIChyZW1vdGVfZGVsZXRlZCAmJiBoZWFkICYmIGhlYWRfbWF0Y2gpKSB7CisJCQlpZiAoaW5kZXgpCisJCQkJcmV0dXJuIGRlbGV0ZWRfZW50cnkoaW5kZXgsIGluZGV4LCBvKTsKKwkJCWlmIChjZSAmJiAhaGVhZF9kZWxldGVkKSB7CisJCQkJaWYgKHZlcmlmeV9hYnNlbnQoY2UsIEVSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX1JFTU9WRUQsIG8pKQorCQkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCQkvKgorCQkgKiBBZGRlZCBpbiBib3RoLCBpZGVudGljYWxseS4KKwkJICovCisJCWlmIChub19hbmNfZXhpc3RzICYmIGhlYWQgJiYgcmVtb3RlICYmIHNhbWUoaGVhZCwgcmVtb3RlKSkKKwkJCXJldHVybiBtZXJnZWRfZW50cnkoaGVhZCwgaW5kZXgsIG8pOworCisJfQorCisJLyogQmVsb3cgYXJlICJubyBtZXJnZSIgY2FzZXMsIHdoaWNoIHJlcXVpcmUgdGhhdCB0aGUgaW5kZXggYmUKKwkgKiB1cC10by1kYXRlIHRvIGF2b2lkIHRoZSBmaWxlcyBnZXR0aW5nIG92ZXJ3cml0dGVuIHdpdGgKKwkgKiBjb25mbGljdCByZXNvbHV0aW9uIGZpbGVzLgorCSAqLworCWlmIChpbmRleCkgeworCQlpZiAodmVyaWZ5X3VwdG9kYXRlKGluZGV4LCBvKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlvLT5ub250cml2aWFsX21lcmdlID0gMTsKKworCS8qICMyLCAjMywgIzQsICM2LCAjNywgIzksICMxMCwgIzExLiAqLworCWNvdW50ID0gMDsKKwlpZiAoIWhlYWRfbWF0Y2ggfHwgIXJlbW90ZV9tYXRjaCkgeworCQlmb3IgKGkgPSAxOyBpIDwgby0+aGVhZF9pZHg7IGkrKykgeworCQkJaWYgKHN0YWdlc1tpXSAmJiBzdGFnZXNbaV0gIT0gby0+ZGZfY29uZmxpY3RfZW50cnkpIHsKKwkJCQlrZWVwX2VudHJ5KHN0YWdlc1tpXSwgbyk7CisJCQkJY291bnQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKyNpZiBEQlJUX0RFQlVHCisJZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCAicmVhZC10cmVlOiB3YXJuaW5nICMxNiBkZXRlY3RlZFxuIik7CisJCXNob3dfc3RhZ2VfZW50cnkoc3RkZXJyLCAiaGVhZCAgICIsIHN0YWdlc1toZWFkX21hdGNoXSk7CisJCXNob3dfc3RhZ2VfZW50cnkoc3RkZXJyLCAicmVtb3RlICIsIHN0YWdlc1tyZW1vdGVfbWF0Y2hdKTsKKwl9CisjZW5kaWYKKwlpZiAoaGVhZCkgeyBjb3VudCArPSBrZWVwX2VudHJ5KGhlYWQsIG8pOyB9CisJaWYgKHJlbW90ZSkgeyBjb3VudCArPSBrZWVwX2VudHJ5KHJlbW90ZSwgbyk7IH0KKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBUd28td2F5IG1lcmdlLgorICoKKyAqIFRoZSBydWxlIGlzIHRvICJjYXJyeSBmb3J3YXJkIiB3aGF0IGlzIGluIHRoZSBpbmRleCB3aXRob3V0IGxvc2luZworICogaW5mb3JtYXRpb24gYWNyb3NzIGEgImZhc3QtZm9yd2FyZCIsIGZhdm9yaW5nIGEgc3VjY2Vzc2Z1bCBtZXJnZQorICogb3ZlciBhIG1lcmdlIGZhaWx1cmUgd2hlbiBpdCBtYWtlcyBzZW5zZS4gIEZvciBkZXRhaWxzIG9mIHRoZQorICogImNhcnJ5IGZvcndhcmQiIHJ1bGUsIHBsZWFzZSBzZWUgPERvY3VtZW50YXRpb24vZ2l0LXJlYWQtdHJlZS50eHQ+LgorICoKKyAqLworaW50IHR3b3dheV9tZXJnZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3JjLAorCQkgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY3VycmVudCA9IHNyY1swXTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZHRyZWUgPSBzcmNbMV07CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpuZXd0cmVlID0gc3JjWzJdOworCisJaWYgKG8tPm1lcmdlX3NpemUgIT0gMikKKwkJcmV0dXJuIGVycm9yKCJDYW5ub3QgZG8gYSB0d293YXkgbWVyZ2Ugb2YgJWQgdHJlZXMiLAorCQkJICAgICBvLT5tZXJnZV9zaXplKTsKKworCWlmIChvbGR0cmVlID09IG8tPmRmX2NvbmZsaWN0X2VudHJ5KQorCQlvbGR0cmVlID0gTlVMTDsKKwlpZiAobmV3dHJlZSA9PSBvLT5kZl9jb25mbGljdF9lbnRyeSkKKwkJbmV3dHJlZSA9IE5VTEw7CisKKwlpZiAoY3VycmVudCkgeworCQlpZiAoY3VycmVudC0+Y2VfZmxhZ3MgJiBDRV9DT05GTElDVEVEKSB7CisJCQlpZiAoc2FtZShvbGR0cmVlLCBuZXd0cmVlKSB8fCBvLT5yZXNldCkgeworCQkJCWlmICghbmV3dHJlZSkKKwkJCQkJcmV0dXJuIGRlbGV0ZWRfZW50cnkoY3VycmVudCwgY3VycmVudCwgbyk7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gbWVyZ2VkX2VudHJ5KG5ld3RyZWUsIGN1cnJlbnQsIG8pOworCQkJfQorCQkJcmV0dXJuIHJlamVjdF9tZXJnZShjdXJyZW50LCBvKTsKKwkJfSBlbHNlIGlmICgoIW9sZHRyZWUgJiYgIW5ld3RyZWUpIHx8IC8qIDQgYW5kIDUgKi8KKwkJCSAoIW9sZHRyZWUgJiYgbmV3dHJlZSAmJgorCQkJICBzYW1lKGN1cnJlbnQsIG5ld3RyZWUpKSB8fCAvKiA2IGFuZCA3ICovCisJCQkgKG9sZHRyZWUgJiYgbmV3dHJlZSAmJgorCQkJICBzYW1lKG9sZHRyZWUsIG5ld3RyZWUpKSB8fCAvKiAxNCBhbmQgMTUgKi8KKwkJCSAob2xkdHJlZSAmJiBuZXd0cmVlICYmCisJCQkgICFzYW1lKG9sZHRyZWUsIG5ld3RyZWUpICYmIC8qIDE4IGFuZCAxOSAqLworCQkJICBzYW1lKGN1cnJlbnQsIG5ld3RyZWUpKSkgeworCQkJcmV0dXJuIGtlZXBfZW50cnkoY3VycmVudCwgbyk7CisJCX0gZWxzZSBpZiAob2xkdHJlZSAmJiAhbmV3dHJlZSAmJiBzYW1lKGN1cnJlbnQsIG9sZHRyZWUpKSB7CisJCQkvKiAxMCBvciAxMSAqLworCQkJcmV0dXJuIGRlbGV0ZWRfZW50cnkob2xkdHJlZSwgY3VycmVudCwgbyk7CisJCX0gZWxzZSBpZiAob2xkdHJlZSAmJiBuZXd0cmVlICYmCisJCQkgc2FtZShjdXJyZW50LCBvbGR0cmVlKSAmJiAhc2FtZShjdXJyZW50LCBuZXd0cmVlKSkgeworCQkJLyogMjAgb3IgMjEgKi8KKwkJCXJldHVybiBtZXJnZWRfZW50cnkobmV3dHJlZSwgY3VycmVudCwgbyk7CisJCX0gZWxzZQorCQkJcmV0dXJuIHJlamVjdF9tZXJnZShjdXJyZW50LCBvKTsKKwl9CisJZWxzZSBpZiAobmV3dHJlZSkgeworCQlpZiAob2xkdHJlZSAmJiAhby0+aW5pdGlhbF9jaGVja291dCkgeworCQkJLyoKKwkJCSAqIGRlbGV0aW9uIG9mIHRoZSBwYXRoIHdhcyBzdGFnZWQ7CisJCQkgKi8KKwkJCWlmIChzYW1lKG9sZHRyZWUsIG5ld3RyZWUpKQorCQkJCXJldHVybiAxOworCQkJcmV0dXJuIHJlamVjdF9tZXJnZShvbGR0cmVlLCBvKTsKKwkJfQorCQlyZXR1cm4gbWVyZ2VkX2VudHJ5KG5ld3RyZWUsIGN1cnJlbnQsIG8pOworCX0KKwlyZXR1cm4gZGVsZXRlZF9lbnRyeShvbGR0cmVlLCBjdXJyZW50LCBvKTsKK30KKworLyoKKyAqIEJpbmQgbWVyZ2UuCisgKgorICogS2VlcCB0aGUgaW5kZXggZW50cmllcyBhdCBzdGFnZTAsIGNvbGxhcHNlIHN0YWdlMSBidXQgbWFrZSBzdXJlCisgKiBzdGFnZTAgZG9lcyBub3QgaGF2ZSBhbnl0aGluZyB0aGVyZS4KKyAqLworaW50IGJpbmRfbWVyZ2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnNyYywKKwkgICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkID0gc3JjWzBdOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqYSA9IHNyY1sxXTsKKworCWlmIChvLT5tZXJnZV9zaXplICE9IDEpCisJCXJldHVybiBlcnJvcigiQ2Fubm90IGRvIGEgYmluZCBtZXJnZSBvZiAlZCB0cmVlcyIsCisJCQkgICAgIG8tPm1lcmdlX3NpemUpOworCWlmIChhICYmIG9sZCkKKwkJcmV0dXJuIG8tPnF1aWV0ID8gLTEgOgorCQkJZXJyb3IoRVJST1JNU0cobywgRVJST1JfQklORF9PVkVSTEFQKSwKKwkJCSAgICAgIHN1cGVyX3ByZWZpeGVkKGEtPm5hbWUpLAorCQkJICAgICAgc3VwZXJfcHJlZml4ZWQob2xkLT5uYW1lKSk7CisJaWYgKCFhKQorCQlyZXR1cm4ga2VlcF9lbnRyeShvbGQsIG8pOworCWVsc2UKKwkJcmV0dXJuIG1lcmdlZF9lbnRyeShhLCBOVUxMLCBvKTsKK30KKworLyoKKyAqIE9uZS13YXkgbWVyZ2UuCisgKgorICogVGhlIHJ1bGUgaXM6CisgKiAtIHRha2UgdGhlIHN0YXQgaW5mb3JtYXRpb24gZnJvbSBzdGFnZTAsIHRha2UgdGhlIGRhdGEgZnJvbSBzdGFnZTEKKyAqLworaW50IG9uZXdheV9tZXJnZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3JjLAorCQkgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkID0gc3JjWzBdOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqYSA9IHNyY1sxXTsKKworCWlmIChvLT5tZXJnZV9zaXplICE9IDEpCisJCXJldHVybiBlcnJvcigiQ2Fubm90IGRvIGEgb25ld2F5IG1lcmdlIG9mICVkIHRyZWVzIiwKKwkJCSAgICAgby0+bWVyZ2Vfc2l6ZSk7CisKKwlpZiAoIWEgfHwgYSA9PSBvLT5kZl9jb25mbGljdF9lbnRyeSkKKwkJcmV0dXJuIGRlbGV0ZWRfZW50cnkob2xkLCBvbGQsIG8pOworCisJaWYgKG9sZCAmJiBzYW1lKG9sZCwgYSkpIHsKKwkJaW50IHVwZGF0ZSA9IDA7CisJCWlmIChvLT5yZXNldCAmJiBvLT51cGRhdGUgJiYgIWNlX3VwdG9kYXRlKG9sZCkgJiYgIWNlX3NraXBfd29ya3RyZWUob2xkKSAmJgorCQkJIShvbGQtPmNlX2ZsYWdzICYgQ0VfRlNNT05JVE9SX1ZBTElEKSkgeworCQkJc3RydWN0IHN0YXQgc3Q7CisJCQlpZiAobHN0YXQob2xkLT5uYW1lLCAmc3QpIHx8CisJCQkgICAgaWVfbWF0Y2hfc3RhdChvLT5zcmNfaW5kZXgsIG9sZCwgJnN0LCBDRV9NQVRDSF9JR05PUkVfVkFMSUR8Q0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUUpKQorCQkJCXVwZGF0ZSB8PSBDRV9VUERBVEU7CisJCX0KKwkJaWYgKG8tPnVwZGF0ZSAmJiBTX0lTR0lUTElOSyhvbGQtPmNlX21vZGUpICYmCisJCSAgICBzaG91bGRfdXBkYXRlX3N1Ym1vZHVsZXMoKSAmJiAhdmVyaWZ5X3VwdG9kYXRlKG9sZCwgbykpCisJCQl1cGRhdGUgfD0gQ0VfVVBEQVRFOworCQlhZGRfZW50cnkobywgb2xkLCB1cGRhdGUsIENFX1NUQUdFTUFTSyk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gbWVyZ2VkX2VudHJ5KGEsIG9sZCwgbyk7Cit9CmRpZmYgLS1naXQgYS91bnBhY2stdHJlZXMuaCBiL3VucGFjay10cmVlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMmYwODIKLS0tIC9kZXYvbnVsbAorKysgYi91bnBhY2stdHJlZXMuaApAQCAtMCwwICsxLDExOCBAQAorI2lmbmRlZiBVTlBBQ0tfVFJFRVNfSAorI2RlZmluZSBVTlBBQ0tfVFJFRVNfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKworI2RlZmluZSBNQVhfVU5QQUNLX1RSRUVTIE1BWF9UUkFWRVJTRV9UUkVFUworCitzdHJ1Y3QgY2FjaGVfZW50cnk7CitzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnM7CitzdHJ1Y3QgcGF0dGVybl9saXN0OworCit0eXBlZGVmIGludCAoKm1lcmdlX2ZuX3QpKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzcmMsCisJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqb3B0aW9ucyk7CisKK2VudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzIHsKKwlFUlJPUl9XT1VMRF9PVkVSV1JJVEUgPSAwLAorCUVSUk9SX05PVF9VUFRPREFURV9GSUxFLAorCUVSUk9SX05PVF9VUFRPREFURV9ESVIsCisJRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfT1ZFUldSSVRURU4sCisJRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfUkVNT1ZFRCwKKwlFUlJPUl9CSU5EX09WRVJMQVAsCisJRVJST1JfV09VTERfTE9TRV9TVUJNT0RVTEUsCisKKwlOQl9VTlBBQ0tfVFJFRVNfRVJST1JfVFlQRVMsCisKKwlXQVJOSU5HX1NQQVJTRV9OT1RfVVBUT0RBVEVfRklMRSwKKwlXQVJOSU5HX1NQQVJTRV9VTk1FUkdFRF9GSUxFLAorCVdBUk5JTkdfU1BBUlNFX09SUEhBTkVEX05PVF9PVkVSV1JJVFRFTiwKKworCU5CX1VOUEFDS19UUkVFU19XQVJOSU5HX1RZUEVTLAorfTsKKworLyoKKyAqIFNldHMgdGhlIGxpc3Qgb2YgdXNlci1mcmllbmRseSBlcnJvciBtZXNzYWdlcyB0byBiZSB1c2VkIGJ5IHRoZQorICogY29tbWFuZCAiY21kIiAoZWl0aGVyIG1lcmdlIG9yIGNoZWNrb3V0KSwgYW5kIHNob3dfYWxsX2Vycm9ycyB0byAxLgorICovCit2b2lkIHNldHVwX3VucGFja190cmVlc19wb3JjZWxhaW4oc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvcHRzLAorCQkJCSAgY29uc3QgY2hhciAqY21kKTsKKworLyoKKyAqIEZyZWVzIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgc2V0dXBfdW5wYWNrX3RyZWVzX3BvcmNlbGFpbigpLgorICovCit2b2lkIGNsZWFyX3VucGFja190cmVlc19wb3JjZWxhaW4oc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvcHRzKTsKKworc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIHsKKwl1bnNpZ25lZCBpbnQgcmVzZXQsCisJCSAgICAgbWVyZ2UsCisJCSAgICAgdXBkYXRlLAorCQkgICAgIGNsb25lLAorCQkgICAgIGluZGV4X29ubHksCisJCSAgICAgbm9udHJpdmlhbF9tZXJnZSwKKwkJICAgICB0cml2aWFsX21lcmdlc19vbmx5LAorCQkgICAgIHZlcmJvc2VfdXBkYXRlLAorCQkgICAgIGFnZ3Jlc3NpdmUsCisJCSAgICAgc2tpcF91bm1lcmdlZCwKKwkJICAgICBpbml0aWFsX2NoZWNrb3V0LAorCQkgICAgIGRpZmZfaW5kZXhfY2FjaGVkLAorCQkgICAgIGRlYnVnX3VucGFjaywKKwkJICAgICBza2lwX3NwYXJzZV9jaGVja291dCwKKwkJICAgICBxdWlldCwKKwkJICAgICBleGl0aW5nX2Vhcmx5LAorCQkgICAgIHNob3dfYWxsX2Vycm9ycywKKwkJICAgICBkcnlfcnVuOworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwlpbnQgY2FjaGVfYm90dG9tOworCXN0cnVjdCBkaXJfc3RydWN0ICpkaXI7CisJc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYzsKKwltZXJnZV9mbl90IGZuOworCWNvbnN0IGNoYXIgKm1zZ3NbTkJfVU5QQUNLX1RSRUVTX1dBUk5JTkdfVFlQRVNdOworCXN0cnVjdCBhcmd2X2FycmF5IG1zZ3NfdG9fZnJlZTsKKwkvKgorCSAqIFN0b3JlIGVycm9yIG1lc3NhZ2VzIGluIGFuIGFycmF5LCBlYWNoIGNhc2UKKwkgKiBjb3JyZXNwb25kaW5nIHRvIGEgZXJyb3IgbWVzc2FnZSB0eXBlCisJICovCisJc3RydWN0IHN0cmluZ19saXN0IHVucGFja19yZWplY3RzW05CX1VOUEFDS19UUkVFU19XQVJOSU5HX1RZUEVTXTsKKworCWludCBoZWFkX2lkeDsKKwlpbnQgbWVyZ2Vfc2l6ZTsKKworCXN0cnVjdCBjYWNoZV9lbnRyeSAqZGZfY29uZmxpY3RfZW50cnk7CisJdm9pZCAqdW5wYWNrX2RhdGE7CisKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmRzdF9pbmRleDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKnNyY19pbmRleDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgcmVzdWx0OworCisJc3RydWN0IHBhdHRlcm5fbGlzdCAqcGw7IC8qIGZvciBpbnRlcm5hbCB1c2UgKi8KKwlzdHJ1Y3QgY2hlY2tvdXRfbWV0YWRhdGEgbWV0YTsKK307CisKK2ludCB1bnBhY2tfdHJlZXModW5zaWduZWQgbiwgc3RydWN0IHRyZWVfZGVzYyAqdCwKKwkJIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqb3B0aW9ucyk7CisKK2VudW0gdXBkYXRlX3NwYXJzaXR5X3Jlc3VsdCB7CisJVVBEQVRFX1NQQVJTSVRZX1NVQ0NFU1MgPSAwLAorCVVQREFURV9TUEFSU0lUWV9XQVJOSU5HUyA9IDEsCisJVVBEQVRFX1NQQVJTSVRZX0lOREVYX1VQREFURV9GQUlMVVJFUyA9IC0xLAorCVVQREFURV9TUEFSU0lUWV9XT1JLVFJFRV9VUERBVEVfRkFJTFVSRVMgPSAtMgorfTsKKworZW51bSB1cGRhdGVfc3BhcnNpdHlfcmVzdWx0IHVwZGF0ZV9zcGFyc2l0eShzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm9wdGlvbnMpOworCitpbnQgdmVyaWZ5X3VwdG9kYXRlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCSAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworCitpbnQgdGhyZWV3YXlfbWVyZ2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnN0YWdlcywKKwkJICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKTsKK2ludCB0d293YXlfbWVyZ2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnNyYywKKwkJIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyk7CitpbnQgYmluZF9tZXJnZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3JjLAorCSAgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworaW50IG9uZXdheV9tZXJnZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3JjLAorCQkgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS91cGxvYWQtcGFjay5jIGIvdXBsb2FkLXBhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDc4YmZmCi0tLSAvZGV2L251bGwKKysrIGIvdXBsb2FkLXBhY2suYwpAQCAtMCwwICsxLDE1NzMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXIuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJwcmlvLXF1ZXVlLmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInVwbG9hZC1wYWNrLmgiCisjaW5jbHVkZSAic2VydmUuaCIKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJzaGFsbG93LmgiCisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIFRIRVlfSEFWRQkoMXUgPDwgMTEpCisjZGVmaW5lIE9VUl9SRUYJCSgxdSA8PCAxMikKKyNkZWZpbmUgV0FOVEVECQkoMXUgPDwgMTMpCisjZGVmaW5lIENPTU1PTl9LTk9XTgkoMXUgPDwgMTQpCisKKyNkZWZpbmUgU0hBTExPVwkJKDF1IDw8IDE2KQorI2RlZmluZSBOT1RfU0hBTExPVwkoMXUgPDwgMTcpCisjZGVmaW5lIENMSUVOVF9TSEFMTE9XCSgxdSA8PCAxOCkKKyNkZWZpbmUgSElEREVOX1JFRgkoMXUgPDwgMTkpCisKKyNkZWZpbmUgQUxMX0ZMQUdTIChUSEVZX0hBVkUgfCBPVVJfUkVGIHwgV0FOVEVEIHwgQ09NTU9OX0tOT1dOIHwgU0hBTExPVyB8IFwKKwkJTk9UX1NIQUxMT1cgfCBDTElFTlRfU0hBTExPVyB8IEhJRERFTl9SRUYpCisKK3N0YXRpYyB0aW1lc3RhbXBfdCBvbGRlc3RfaGF2ZTsKKworc3RhdGljIGludCBtdWx0aV9hY2s7CitzdGF0aWMgaW50IG5vX2RvbmU7CitzdGF0aWMgaW50IHVzZV90aGluX3BhY2ssIHVzZV9vZnNfZGVsdGEsIHVzZV9pbmNsdWRlX3RhZzsKK3N0YXRpYyBpbnQgbm9fcHJvZ3Jlc3MsIGRhZW1vbl9tb2RlOworLyogQWxsb3cgc3BlY2lmeWluZyBzaGExIGlmIGl0IGlzIGEgcmVmIHRpcC4gKi8KKyNkZWZpbmUgQUxMT1dfVElQX1NIQTEJMDEKKy8qIEFsbG93IHJlcXVlc3Qgb2YgYSBzaGExIGlmIGl0IGlzIHJlYWNoYWJsZSBmcm9tIGEgcmVmIChwb3NzaWJseSBoaWRkZW4gcmVmKS4gKi8KKyNkZWZpbmUgQUxMT1dfUkVBQ0hBQkxFX1NIQTEJMDIKKy8qIEFsbG93IHJlcXVlc3Qgb2YgYW55IHNoYTEuIEltcGxpZXMgQUxMT1dfVElQX1NIQTEgYW5kIEFMTE9XX1JFQUNIQUJMRV9TSEExLiAqLworI2RlZmluZSBBTExPV19BTllfU0hBMQkwNworc3RhdGljIHVuc2lnbmVkIGludCBhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3Q7CitzdGF0aWMgaW50IHNoYWxsb3dfbnI7CitzdGF0aWMgc3RydWN0IG9iamVjdF9hcnJheSBleHRyYV9lZGdlX29iajsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGltZW91dDsKK3N0YXRpYyBpbnQga2VlcGFsaXZlID0gNTsKKy8qIDAgZm9yIG5vIHNpZGViYW5kLAorICogb3RoZXJ3aXNlIG1heGltdW0gcGFja2V0IHNpemUgKHVwIHRvIDY1NTIwIGJ5dGVzKS4KKyAqLworc3RhdGljIGludCB1c2Vfc2lkZWJhbmQ7CitzdGF0aWMgaW50IHN0YXRlbGVzc19ycGM7CitzdGF0aWMgY29uc3QgY2hhciAqcGFja19vYmplY3RzX2hvb2s7CisKK3N0YXRpYyBpbnQgZmlsdGVyX2NhcGFiaWxpdHlfcmVxdWVzdGVkOworc3RhdGljIGludCBhbGxvd19maWx0ZXI7CitzdGF0aWMgaW50IGFsbG93X3JlZl9pbl93YW50OworCitzdGF0aWMgaW50IGFsbG93X3NpZGViYW5kX2FsbDsKKworc3RhdGljIHZvaWQgcmVzZXRfdGltZW91dCh2b2lkKQoreworCWFsYXJtKHRpbWVvdXQpOworfQorCitzdGF0aWMgdm9pZCBzZW5kX2NsaWVudF9kYXRhKGludCBmZCwgY29uc3QgY2hhciAqZGF0YSwgc3NpemVfdCBzeikKK3sKKwlpZiAodXNlX3NpZGViYW5kKSB7CisJCXNlbmRfc2lkZWJhbmQoMSwgZmQsIGRhdGEsIHN6LCB1c2Vfc2lkZWJhbmQpOworCQlyZXR1cm47CisJfQorCWlmIChmZCA9PSAzKQorCQkvKiBlbWVyZ2VuY3kgcXVpdCAqLworCQlmZCA9IDI7CisJaWYgKGZkID09IDIpIHsKKwkJLyogWFhYOiBhcmUgd2UgaGFwcHkgdG8gbG9zZSBzdHVmZiBoZXJlPyAqLworCQl4d3JpdGUoZmQsIGRhdGEsIHN6KTsKKwkJcmV0dXJuOworCX0KKwl3cml0ZV9vcl9kaWUoZmQsIGRhdGEsIHN6KTsKK30KKworc3RhdGljIGludCB3cml0ZV9vbmVfc2hhbGxvdyhjb25zdCBzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCwgdm9pZCAqY2JfZGF0YSkKK3sKKwlGSUxFICpmcCA9IGNiX2RhdGE7CisJaWYgKGdyYWZ0LT5ucl9wYXJlbnQgPT0gLTEpCisJCWZwcmludGYoZnAsICItLXNoYWxsb3cgJXNcbiIsIG9pZF90b19oZXgoJmdyYWZ0LT5vaWQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX3BhY2tfZmlsZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpoYXZlX29iaiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9hcnJheSAqd2FudF9vYmosCisJCQkgICAgIHN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHBhY2tfb2JqZWN0cyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljaGFyIGRhdGFbODE5M10sIHByb2dyZXNzWzEyOF07CisJY2hhciBhYm9ydF9tc2dbXSA9ICJhYm9ydGluZyBkdWUgdG8gcG9zc2libGUgcmVwb3NpdG9yeSAiCisJCSJjb3JydXB0aW9uIG9uIHRoZSByZW1vdGUgc2lkZS4iOworCWludCBidWZmZXJlZCA9IC0xOworCXNzaXplX3Qgc3o7CisJaW50IGk7CisJRklMRSAqcGlwZV9mZDsKKworCWlmICghcGFja19vYmplY3RzX2hvb2spCisJCXBhY2tfb2JqZWN0cy5naXRfY21kID0gMTsKKwllbHNlIHsKKwkJYXJndl9hcnJheV9wdXNoKCZwYWNrX29iamVjdHMuYXJncywgcGFja19vYmplY3RzX2hvb2spOworCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb2JqZWN0cy5hcmdzLCAiZ2l0Iik7CisJCXBhY2tfb2JqZWN0cy51c2Vfc2hlbGwgPSAxOworCX0KKworCWlmIChzaGFsbG93X25yKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vYmplY3RzLmFyZ3MsICItLXNoYWxsb3ctZmlsZSIpOworCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb2JqZWN0cy5hcmdzLCAiIik7CisJfQorCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vYmplY3RzLmFyZ3MsICJwYWNrLW9iamVjdHMiKTsKKwlhcmd2X2FycmF5X3B1c2goJnBhY2tfb2JqZWN0cy5hcmdzLCAiLS1yZXZzIik7CisJaWYgKHVzZV90aGluX3BhY2spCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vYmplY3RzLmFyZ3MsICItLXRoaW4iKTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vYmplY3RzLmFyZ3MsICItLXN0ZG91dCIpOworCWlmIChzaGFsbG93X25yKQorCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb2JqZWN0cy5hcmdzLCAiLS1zaGFsbG93Iik7CisJaWYgKCFub19wcm9ncmVzcykKKwkJYXJndl9hcnJheV9wdXNoKCZwYWNrX29iamVjdHMuYXJncywgIi0tcHJvZ3Jlc3MiKTsKKwlpZiAodXNlX29mc19kZWx0YSkKKwkJYXJndl9hcnJheV9wdXNoKCZwYWNrX29iamVjdHMuYXJncywgIi0tZGVsdGEtYmFzZS1vZmZzZXQiKTsKKwlpZiAodXNlX2luY2x1ZGVfdGFnKQorCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb2JqZWN0cy5hcmdzLCAiLS1pbmNsdWRlLXRhZyIpOworCWlmIChmaWx0ZXJfb3B0aW9ucy0+Y2hvaWNlKSB7CisJCWNvbnN0IGNoYXIgKnNwZWMgPQorCQkJZXhwYW5kX2xpc3Rfb2JqZWN0c19maWx0ZXJfc3BlYyhmaWx0ZXJfb3B0aW9ucyk7CisJCWlmIChwYWNrX29iamVjdHMudXNlX3NoZWxsKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQkJc3FfcXVvdGVfYnVmKCZidWYsIHNwZWMpOworCQkJYXJndl9hcnJheV9wdXNoZigmcGFja19vYmplY3RzLmFyZ3MsICItLWZpbHRlcj0lcyIsIGJ1Zi5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCX0gZWxzZSB7CisJCQlhcmd2X2FycmF5X3B1c2hmKCZwYWNrX29iamVjdHMuYXJncywgIi0tZmlsdGVyPSVzIiwKKwkJCQkJIHNwZWMpOworCQl9CisJfQorCisJcGFja19vYmplY3RzLmluID0gLTE7CisJcGFja19vYmplY3RzLm91dCA9IC0xOworCXBhY2tfb2JqZWN0cy5lcnIgPSAtMTsKKworCWlmIChzdGFydF9jb21tYW5kKCZwYWNrX29iamVjdHMpKQorCQlkaWUoImdpdCB1cGxvYWQtcGFjazogdW5hYmxlIHRvIGZvcmsgZ2l0LXBhY2stb2JqZWN0cyIpOworCisJcGlwZV9mZCA9IHhmZG9wZW4ocGFja19vYmplY3RzLmluLCAidyIpOworCisJaWYgKHNoYWxsb3dfbnIpCisJCWZvcl9lYWNoX2NvbW1pdF9ncmFmdCh3cml0ZV9vbmVfc2hhbGxvdywgcGlwZV9mZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgd2FudF9vYmotPm5yOyBpKyspCisJCWZwcmludGYocGlwZV9mZCwgIiVzXG4iLAorCQkJb2lkX3RvX2hleCgmd2FudF9vYmotPm9iamVjdHNbaV0uaXRlbS0+b2lkKSk7CisJZnByaW50ZihwaXBlX2ZkLCAiLS1ub3RcbiIpOworCWZvciAoaSA9IDA7IGkgPCBoYXZlX29iai0+bnI7IGkrKykKKwkJZnByaW50ZihwaXBlX2ZkLCAiJXNcbiIsCisJCQlvaWRfdG9faGV4KCZoYXZlX29iai0+b2JqZWN0c1tpXS5pdGVtLT5vaWQpKTsKKwlmb3IgKGkgPSAwOyBpIDwgZXh0cmFfZWRnZV9vYmoubnI7IGkrKykKKwkJZnByaW50ZihwaXBlX2ZkLCAiJXNcbiIsCisJCQlvaWRfdG9faGV4KCZleHRyYV9lZGdlX29iai5vYmplY3RzW2ldLml0ZW0tPm9pZCkpOworCWZwcmludGYocGlwZV9mZCwgIlxuIik7CisJZmZsdXNoKHBpcGVfZmQpOworCWZjbG9zZShwaXBlX2ZkKTsKKworCS8qIFdlIHJlYWQgZnJvbSBwYWNrX29iamVjdHMuZXJyIHRvIGNhcHR1cmUgc3RkZXJyIG91dHB1dCBmb3IKKwkgKiBwcm9ncmVzcyBiYXIsIGFuZCBwYWNrX29iamVjdHMub3V0IHRvIGNhcHR1cmUgdGhlIHBhY2sgZGF0YS4KKwkgKi8KKworCXdoaWxlICgxKSB7CisJCXN0cnVjdCBwb2xsZmQgcGZkWzJdOworCQlpbnQgcGUsIHB1LCBwb2xsc2l6ZTsKKwkJaW50IHJldDsKKworCQlyZXNldF90aW1lb3V0KCk7CisKKwkJcG9sbHNpemUgPSAwOworCQlwZSA9IHB1ID0gLTE7CisKKwkJaWYgKDAgPD0gcGFja19vYmplY3RzLm91dCkgeworCQkJcGZkW3BvbGxzaXplXS5mZCA9IHBhY2tfb2JqZWN0cy5vdXQ7CisJCQlwZmRbcG9sbHNpemVdLmV2ZW50cyA9IFBPTExJTjsKKwkJCXB1ID0gcG9sbHNpemU7CisJCQlwb2xsc2l6ZSsrOworCQl9CisJCWlmICgwIDw9IHBhY2tfb2JqZWN0cy5lcnIpIHsKKwkJCXBmZFtwb2xsc2l6ZV0uZmQgPSBwYWNrX29iamVjdHMuZXJyOworCQkJcGZkW3BvbGxzaXplXS5ldmVudHMgPSBQT0xMSU47CisJCQlwZSA9IHBvbGxzaXplOworCQkJcG9sbHNpemUrKzsKKwkJfQorCisJCWlmICghcG9sbHNpemUpCisJCQlicmVhazsKKworCQlyZXQgPSBwb2xsKHBmZCwgcG9sbHNpemUsCisJCQlrZWVwYWxpdmUgPCAwID8gLTEgOiAxMDAwICoga2VlcGFsaXZlKTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKGVycm5vICE9IEVJTlRSKSB7CisJCQkJZXJyb3JfZXJybm8oInBvbGwgZmFpbGVkLCByZXN1bWluZyIpOworCQkJCXNsZWVwKDEpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKDAgPD0gcGUgJiYgKHBmZFtwZV0ucmV2ZW50cyAmIChQT0xMSU58UE9MTEhVUCkpKSB7CisJCQkvKiBTdGF0dXMgcmVhZHk7IHdlIHNoaXAgdGhhdCBpbiB0aGUgc2lkZS1iYW5kCisJCQkgKiBvciBkdW1wIHRvIHRoZSBzdGFuZGFyZCBlcnJvci4KKwkJCSAqLworCQkJc3ogPSB4cmVhZChwYWNrX29iamVjdHMuZXJyLCBwcm9ncmVzcywKKwkJCQkgIHNpemVvZihwcm9ncmVzcykpOworCQkJaWYgKDAgPCBzeikKKwkJCQlzZW5kX2NsaWVudF9kYXRhKDIsIHByb2dyZXNzLCBzeik7CisJCQllbHNlIGlmIChzeiA9PSAwKSB7CisJCQkJY2xvc2UocGFja19vYmplY3RzLmVycik7CisJCQkJcGFja19vYmplY3RzLmVyciA9IC0xOworCQkJfQorCQkJZWxzZQorCQkJCWdvdG8gZmFpbDsKKwkJCS8qIGdpdmUgcHJpb3JpdHkgdG8gc3RhdHVzIG1lc3NhZ2VzICovCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoMCA8PSBwdSAmJiAocGZkW3B1XS5yZXZlbnRzICYgKFBPTExJTnxQT0xMSFVQKSkpIHsKKwkJCS8qIERhdGEgcmVhZHk7IHdlIGtlZXAgdGhlIGxhc3QgYnl0ZSB0byBvdXJzZWx2ZXMKKwkJCSAqIGluIGNhc2Ugd2UgZGV0ZWN0IGJyb2tlbiByZXYtbGlzdCwgc28gdGhhdCB3ZQorCQkJICogY2FuIGxlYXZlIHRoZSBzdHJlYW0gY29ycnVwdGVkLiAgVGhpcyBpcworCQkJICogdW5mb3J0dW5hdGUgLS0gdW5wYWNrLW9iamVjdHMgd291bGQgaGFwcGlseQorCQkJICogYWNjZXB0IGEgdmFsaWQgcGFja2RhdGEgd2l0aCB0cmFpbGluZyBnYXJiYWdlLAorCQkJICogc28gYXBwZW5kaW5nIGdhcmJhZ2UgYWZ0ZXIgd2UgcGFzcyBhbGwgdGhlCisJCQkgKiBwYWNrIGRhdGEgaXMgbm90IGdvb2QgZW5vdWdoIHRvIHNpZ25hbAorCQkJICogYnJlYWthZ2UgdG8gZG93bnN0cmVhbS4KKwkJCSAqLworCQkJY2hhciAqY3AgPSBkYXRhOworCQkJc3NpemVfdCBvdXRzeiA9IDA7CisJCQlpZiAoMCA8PSBidWZmZXJlZCkgeworCQkJCSpjcCsrID0gYnVmZmVyZWQ7CisJCQkJb3V0c3orKzsKKwkJCX0KKwkJCXN6ID0geHJlYWQocGFja19vYmplY3RzLm91dCwgY3AsCisJCQkJICBzaXplb2YoZGF0YSkgLSBvdXRzeik7CisJCQlpZiAoMCA8IHN6KQorCQkJCTsKKwkJCWVsc2UgaWYgKHN6ID09IDApIHsKKwkJCQljbG9zZShwYWNrX29iamVjdHMub3V0KTsKKwkJCQlwYWNrX29iamVjdHMub3V0ID0gLTE7CisJCQl9CisJCQllbHNlCisJCQkJZ290byBmYWlsOworCQkJc3ogKz0gb3V0c3o7CisJCQlpZiAoMSA8IHN6KSB7CisJCQkJYnVmZmVyZWQgPSBkYXRhW3N6LTFdICYgMHhGRjsKKwkJCQlzei0tOworCQkJfQorCQkJZWxzZQorCQkJCWJ1ZmZlcmVkID0gLTE7CisJCQlzZW5kX2NsaWVudF9kYXRhKDEsIGRhdGEsIHN6KTsKKwkJfQorCisJCS8qCisJCSAqIFdlIGhpdCB0aGUga2VlcGFsaXZlIHRpbWVvdXQgd2l0aG91dCBzYXlpbmcgYW55dGhpbmc7IHNlbmQKKwkJICogYW4gZW1wdHkgbWVzc2FnZSBvbiB0aGUgZGF0YSBzaWRlYmFuZCBqdXN0IHRvIGxldCB0aGUgb3RoZXIKKwkJICogc2lkZSBrbm93IHdlJ3JlIHN0aWxsIHdvcmtpbmcgb24gaXQsIGJ1dCBkb24ndCBoYXZlIGFueSBkYXRhCisJCSAqIHlldC4KKwkJICoKKwkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhIHNpZGViYW5kIGNoYW5uZWwsIHRoZXJlJ3Mgbm8gcm9vbSBpbiB0aGUKKwkJICogcHJvdG9jb2wgdG8gc2F5IGFueXRoaW5nLCBzbyB0aG9zZSBjbGllbnRzIGFyZSBqdXN0IG91dCBvZgorCQkgKiBsdWNrLgorCQkgKi8KKwkJaWYgKCFyZXQgJiYgdXNlX3NpZGViYW5kKSB7CisJCQlzdGF0aWMgY29uc3QgY2hhciBidWZbXSA9ICIwMDA1XDEiOworCQkJd3JpdGVfb3JfZGllKDEsIGJ1ZiwgNSk7CisJCX0KKwl9CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJnBhY2tfb2JqZWN0cykpIHsKKwkJZXJyb3IoImdpdCB1cGxvYWQtcGFjazogZ2l0LXBhY2stb2JqZWN0cyBkaWVkIHdpdGggZXJyb3IuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBmbHVzaCB0aGUgZGF0YSAqLworCWlmICgwIDw9IGJ1ZmZlcmVkKSB7CisJCWRhdGFbMF0gPSBidWZmZXJlZDsKKwkJc2VuZF9jbGllbnRfZGF0YSgxLCBkYXRhLCAxKTsKKwkJZnByaW50ZihzdGRlcnIsICJmbHVzaGVkLlxuIik7CisJfQorCWlmICh1c2Vfc2lkZWJhbmQpCisJCXBhY2tldF9mbHVzaCgxKTsKKwlyZXR1cm47CisKKyBmYWlsOgorCXNlbmRfY2xpZW50X2RhdGEoMywgYWJvcnRfbXNnLCBzaXplb2YoYWJvcnRfbXNnKSk7CisJZGllKCJnaXQgdXBsb2FkLXBhY2s6ICVzIiwgYWJvcnRfbXNnKTsKK30KKworc3RhdGljIGludCBnb3Rfb2lkKGNvbnN0IGNoYXIgKmhleCwgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpoYXZlX29iaikKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvOworCWludCB3ZV9rbmV3X3RoZXlfaGF2ZSA9IDA7CisKKwlpZiAoZ2V0X29pZF9oZXgoaGV4LCBvaWQpKQorCQlkaWUoImdpdCB1cGxvYWQtcGFjazogZXhwZWN0ZWQgU0hBMSBvYmplY3QsIGdvdCAnJXMnIiwgaGV4KTsKKwlpZiAoIWhhc19vYmplY3RfZmlsZShvaWQpKQorCQlyZXR1cm4gLTE7CisKKwlvID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCWlmICghbykKKwkJZGllKCJvb3BzICglcykiLCBvaWRfdG9faGV4KG9pZCkpOworCWlmIChvLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW87CisJCWlmIChvLT5mbGFncyAmIFRIRVlfSEFWRSkKKwkJCXdlX2tuZXdfdGhleV9oYXZlID0gMTsKKwkJZWxzZQorCQkJby0+ZmxhZ3MgfD0gVEhFWV9IQVZFOworCQlpZiAoIW9sZGVzdF9oYXZlIHx8IChjb21taXQtPmRhdGUgPCBvbGRlc3RfaGF2ZSkpCisJCQlvbGRlc3RfaGF2ZSA9IGNvbW1pdC0+ZGF0ZTsKKwkJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCQkgICAgIHBhcmVudHM7CisJCSAgICAgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpCisJCQlwYXJlbnRzLT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gVEhFWV9IQVZFOworCX0KKwlpZiAoIXdlX2tuZXdfdGhleV9oYXZlKSB7CisJCWFkZF9vYmplY3RfYXJyYXkobywgTlVMTCwgaGF2ZV9vYmopOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2tfdG9fZ2l2ZV91cChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpoYXZlX29iaiwKKwkJCSBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICp3YW50X29iaikKK3sKKwl1aW50MzJfdCBtaW5fZ2VuZXJhdGlvbiA9IEdFTkVSQVRJT05fTlVNQkVSX1pFUk87CisKKwlpZiAoIWhhdmVfb2JqLT5ucikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gY2FuX2FsbF9mcm9tX3JlYWNoX3dpdGhfZmxhZyh3YW50X29iaiwgVEhFWV9IQVZFLAorCQkJCQkgICAgQ09NTU9OX0tOT1dOLCBvbGRlc3RfaGF2ZSwKKwkJCQkJICAgIG1pbl9nZW5lcmF0aW9uKTsKK30KKworc3RhdGljIGludCBnZXRfY29tbW9uX2NvbW1pdHMoc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlciwKKwkJCSAgICAgIHN0cnVjdCBvYmplY3RfYXJyYXkgKmhhdmVfb2JqLAorCQkJICAgICAgc3RydWN0IG9iamVjdF9hcnJheSAqd2FudF9vYmopCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY2hhciBsYXN0X2hleFtHSVRfTUFYX0hFWFNaICsgMV07CisJaW50IGdvdF9jb21tb24gPSAwOworCWludCBnb3Rfb3RoZXIgPSAwOworCWludCBzZW50X3JlYWR5ID0gMDsKKworCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CisKKwlmb3IgKDs7KSB7CisJCWNvbnN0IGNoYXIgKmFyZzsKKworCQlyZXNldF90aW1lb3V0KCk7CisKKwkJaWYgKHBhY2tldF9yZWFkZXJfcmVhZChyZWFkZXIpICE9IFBBQ0tFVF9SRUFEX05PUk1BTCkgeworCQkJaWYgKG11bHRpX2FjayA9PSAyICYmIGdvdF9jb21tb24KKwkJCSAgICAmJiAhZ290X290aGVyICYmIG9rX3RvX2dpdmVfdXAoaGF2ZV9vYmosIHdhbnRfb2JqKSkgeworCQkJCXNlbnRfcmVhZHkgPSAxOworCQkJCXBhY2tldF93cml0ZV9mbXQoMSwgIkFDSyAlcyByZWFkeVxuIiwgbGFzdF9oZXgpOworCQkJfQorCQkJaWYgKGhhdmVfb2JqLT5uciA9PSAwIHx8IG11bHRpX2FjaykKKwkJCQlwYWNrZXRfd3JpdGVfZm10KDEsICJOQUtcbiIpOworCisJCQlpZiAobm9fZG9uZSAmJiBzZW50X3JlYWR5KSB7CisJCQkJcGFja2V0X3dyaXRlX2ZtdCgxLCAiQUNLICVzXG4iLCBsYXN0X2hleCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlpZiAoc3RhdGVsZXNzX3JwYykKKwkJCQlleGl0KDApOworCQkJZ290X2NvbW1vbiA9IDA7CisJCQlnb3Rfb3RoZXIgPSAwOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KHJlYWRlci0+bGluZSwgImhhdmUgIiwgJmFyZykpIHsKKwkJCXN3aXRjaCAoZ290X29pZChhcmcsICZvaWQsIGhhdmVfb2JqKSkgeworCQkJY2FzZSAtMTogLyogdGhleSBoYXZlIHdoYXQgd2UgZG8gbm90ICovCisJCQkJZ290X290aGVyID0gMTsKKwkJCQlpZiAobXVsdGlfYWNrICYmIG9rX3RvX2dpdmVfdXAoaGF2ZV9vYmosIHdhbnRfb2JqKSkgeworCQkJCQljb25zdCBjaGFyICpoZXggPSBvaWRfdG9faGV4KCZvaWQpOworCQkJCQlpZiAobXVsdGlfYWNrID09IDIpIHsKKwkJCQkJCXNlbnRfcmVhZHkgPSAxOworCQkJCQkJcGFja2V0X3dyaXRlX2ZtdCgxLCAiQUNLICVzIHJlYWR5XG4iLCBoZXgpOworCQkJCQl9IGVsc2UKKwkJCQkJCXBhY2tldF93cml0ZV9mbXQoMSwgIkFDSyAlcyBjb250aW51ZVxuIiwgaGV4KTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWdvdF9jb21tb24gPSAxOworCQkJCW9pZF90b19oZXhfcihsYXN0X2hleCwgJm9pZCk7CisJCQkJaWYgKG11bHRpX2FjayA9PSAyKQorCQkJCQlwYWNrZXRfd3JpdGVfZm10KDEsICJBQ0sgJXMgY29tbW9uXG4iLCBsYXN0X2hleCk7CisJCQkJZWxzZSBpZiAobXVsdGlfYWNrKQorCQkJCQlwYWNrZXRfd3JpdGVfZm10KDEsICJBQ0sgJXMgY29udGludWVcbiIsIGxhc3RfaGV4KTsKKwkJCQllbHNlIGlmIChoYXZlX29iai0+bnIgPT0gMSkKKwkJCQkJcGFja2V0X3dyaXRlX2ZtdCgxLCAiQUNLICVzXG4iLCBsYXN0X2hleCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChyZWFkZXItPmxpbmUsICJkb25lIikpIHsKKwkJCWlmIChoYXZlX29iai0+bnIgPiAwKSB7CisJCQkJaWYgKG11bHRpX2FjaykKKwkJCQkJcGFja2V0X3dyaXRlX2ZtdCgxLCAiQUNLICVzXG4iLCBsYXN0X2hleCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlwYWNrZXRfd3JpdGVfZm10KDEsICJOQUtcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiBleHBlY3RlZCBTSEExIGxpc3QsIGdvdCAnJXMnIiwgcmVhZGVyLT5saW5lKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXNfb3VyX3JlZihzdHJ1Y3Qgb2JqZWN0ICpvKQoreworCWludCBhbGxvd19oaWRkZW5fcmVmID0gKGFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdCAmCisJCQkoQUxMT1dfVElQX1NIQTEgfCBBTExPV19SRUFDSEFCTEVfU0hBMSkpOworCXJldHVybiBvLT5mbGFncyAmICgoYWxsb3dfaGlkZGVuX3JlZiA/IEhJRERFTl9SRUYgOiAwKSB8IE9VUl9SRUYpOworfQorCisvKgorICogb24gc3VjY2Vzc2Z1bCBjYXNlLCBpdCdzIHVwIHRvIHRoZSBjYWxsZXIgdG8gY2xvc2UgY21kLT5vdXQKKyAqLworc3RhdGljIGludCBkb19yZWFjaGFibGVfcmV2bGlzdChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kLAorCQkJCXN0cnVjdCBvYmplY3RfYXJyYXkgKnNyYywKKwkJCQlzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpyZWFjaGFibGUpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsKKwkJInJldi1saXN0IiwgIi0tc3RkaW4iLCBOVUxMLAorCX07CisJc3RydWN0IG9iamVjdCAqbzsKKwljaGFyIG5hbWVidWZbR0lUX01BWF9IRVhTWiArIDJdOyAvKiBeICsgaGFzaCArIExGICovCisJaW50IGk7CisJY29uc3QgdW5zaWduZWQgaGV4c3ogPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKworCWNtZC0+YXJndiA9IGFyZ3Y7CisJY21kLT5naXRfY21kID0gMTsKKwljbWQtPm5vX3N0ZGVyciA9IDE7CisJY21kLT5pbiA9IC0xOworCWNtZC0+b3V0ID0gLTE7CisKKwkvKgorCSAqIElmIHRoZSBuZXh0IHJldi1saXN0IC0tc3RkaW4gZW5jb3VudGVycyBhbiB1bmtub3duIGNvbW1pdCwKKwkgKiBpdCB0ZXJtaW5hdGVzLCB3aGljaCB3aWxsIGNhdXNlIFNJR1BJUEUgaW4gdGhlIHdyaXRlIGxvb3AKKwkgKiBiZWxvdy4KKwkgKi8KKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoY21kKSkKKwkJZ290byBlcnJvcjsKKworCW5hbWVidWZbMF0gPSAnXic7CisJbmFtZWJ1ZltoZXhzeiArIDFdID0gJ1xuJzsKKwlmb3IgKGkgPSBnZXRfbWF4X29iamVjdF9pbmRleCgpOyAwIDwgaTsgKSB7CisJCW8gPSBnZXRfaW5kZXhlZF9vYmplY3QoLS1pKTsKKwkJaWYgKCFvKQorCQkJY29udGludWU7CisJCWlmIChyZWFjaGFibGUgJiYgby0+dHlwZSA9PSBPQkpfQ09NTUlUKQorCQkJby0+ZmxhZ3MgJj0gflRNUF9NQVJLOworCQlpZiAoIWlzX291cl9yZWYobykpCisJCQljb250aW51ZTsKKwkJbWVtY3B5KG5hbWVidWYgKyAxLCBvaWRfdG9faGV4KCZvLT5vaWQpLCBoZXhzeik7CisJCWlmICh3cml0ZV9pbl9mdWxsKGNtZC0+aW4sIG5hbWVidWYsIGhleHN6ICsgMikgPCAwKQorCQkJZ290byBlcnJvcjsKKwl9CisJbmFtZWJ1ZltoZXhzel0gPSAnXG4nOworCWZvciAoaSA9IDA7IGkgPCBzcmMtPm5yOyBpKyspIHsKKwkJbyA9IHNyYy0+b2JqZWN0c1tpXS5pdGVtOworCQlpZiAoaXNfb3VyX3JlZihvKSkgeworCQkJaWYgKHJlYWNoYWJsZSkKKwkJCQlhZGRfb2JqZWN0X2FycmF5KG8sIE5VTEwsIHJlYWNoYWJsZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocmVhY2hhYmxlICYmIG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJCW8tPmZsYWdzIHw9IFRNUF9NQVJLOworCQltZW1jcHkobmFtZWJ1Ziwgb2lkX3RvX2hleCgmby0+b2lkKSwgaGV4c3opOworCQlpZiAod3JpdGVfaW5fZnVsbChjbWQtPmluLCBuYW1lYnVmLCBoZXhzeiArIDEpIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCWNsb3NlKGNtZC0+aW4pOworCWNtZC0+aW4gPSAtMTsKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJc2lnY2hhaW5fcG9wKFNJR1BJUEUpOworCisJaWYgKGNtZC0+aW4gPj0gMCkKKwkJY2xvc2UoY21kLT5pbik7CisJaWYgKGNtZC0+b3V0ID49IDApCisJCWNsb3NlKGNtZC0+b3V0KTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3JlYWNoYWJsZV9saXN0KHN0cnVjdCBvYmplY3RfYXJyYXkgKnNyYywKKwkJCSAgICAgIHN0cnVjdCBvYmplY3RfYXJyYXkgKnJlYWNoYWJsZSkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbWQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJaW50IGk7CisJc3RydWN0IG9iamVjdCAqbzsKKwljaGFyIG5hbWVidWZbR0lUX01BWF9IRVhTWiArIDJdOyAvKiBeICsgaGFzaCArIExGICovCisJY29uc3QgdW5zaWduZWQgaGV4c3ogPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKworCWlmIChkb19yZWFjaGFibGVfcmV2bGlzdCgmY21kLCBzcmMsIHJlYWNoYWJsZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwl3aGlsZSAoKGkgPSByZWFkX2luX2Z1bGwoY21kLm91dCwgbmFtZWJ1ZiwgaGV4c3ogKyAxKSkgPT0gaGV4c3ogKyAxKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljb25zdCBjaGFyICpwOworCisJCWlmIChwYXJzZV9vaWRfaGV4KG5hbWVidWYsICZvaWQsICZwKSB8fCAqcCAhPSAnXG4nKQorCQkJYnJlYWs7CisKKwkJbyA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvaWQpOworCQlpZiAobyAmJiBvLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJCW8tPmZsYWdzICY9IH5UTVBfTUFSSzsKKwkJfQorCX0KKwlmb3IgKGkgPSBnZXRfbWF4X29iamVjdF9pbmRleCgpOyAwIDwgaTsgaS0tKSB7CisJCW8gPSBnZXRfaW5kZXhlZF9vYmplY3QoaSAtIDEpOworCQlpZiAobyAmJiBvLT50eXBlID09IE9CSl9DT01NSVQgJiYKKwkJICAgIChvLT5mbGFncyAmIFRNUF9NQVJLKSkgeworCQkJYWRkX29iamVjdF9hcnJheShvLCBOVUxMLCByZWFjaGFibGUpOworCQkJCW8tPmZsYWdzICY9IH5UTVBfTUFSSzsKKwkJfQorCX0KKwljbG9zZShjbWQub3V0KTsKKworCWlmIChmaW5pc2hfY29tbWFuZCgmY21kKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFzX3VucmVhY2hhYmxlKHN0cnVjdCBvYmplY3RfYXJyYXkgKnNyYykKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbWQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY2hhciBidWZbMV07CisJaW50IGk7CisKKwlpZiAoZG9fcmVhY2hhYmxlX3Jldmxpc3QoJmNtZCwgc3JjLCBOVUxMKSA8IDApCisJCXJldHVybiAxOworCisJLyoKKwkgKiBUaGUgY29tbWl0cyBvdXQgb2YgdGhlIHJldi1saXN0IGFyZSBub3QgYW5jZXN0b3JzIG9mCisJICogb3VyIHJlZi4KKwkgKi8KKwlpID0gcmVhZF9pbl9mdWxsKGNtZC5vdXQsIGJ1ZiwgMSk7CisJaWYgKGkpCisJCWdvdG8gZXJyb3I7CisJY2xvc2UoY21kLm91dCk7CisJY21kLm91dCA9IC0xOworCisJLyoKKwkgKiByZXYtbGlzdCBtYXkgaGF2ZSBkaWVkIGJ5IGVuY291bnRlcmluZyBhIGJhZCBjb21taXQKKwkgKiBpbiB0aGUgaGlzdG9yeSwgaW4gd2hpY2ggY2FzZSB3ZSBkbyB3YW50IHRvIGJhaWwgb3V0CisJICogZXZlbiB3aGVuIGl0IHNob3dlZCBubyBjb21taXQuCisJICovCisJaWYgKGZpbmlzaF9jb21tYW5kKCZjbWQpKQorCQlnb3RvIGVycm9yOworCisJLyogQWxsIHRoZSBub24tdGlwIG9uZXMgYXJlIGFuY2VzdG9ycyBvZiB3aGF0IHdlIGFkdmVydGlzZWQgKi8KKwlyZXR1cm4gMDsKKworZXJyb3I6CisJc2lnY2hhaW5fcG9wKFNJR1BJUEUpOworCWlmIChjbWQub3V0ID49IDApCisJCWNsb3NlKGNtZC5vdXQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBjaGVja19ub25fdGlwKHN0cnVjdCBvYmplY3RfYXJyYXkgKndhbnRfb2JqLAorCQkJICBzdHJ1Y3QgcGFja2V0X3dyaXRlciAqd3JpdGVyKQoreworCWludCBpOworCisJLyoKKwkgKiBJbiB0aGUgbm9ybWFsIGluLXByb2Nlc3MgY2FzZSB3aXRob3V0CisJICogdXBsb2FkcGFjay5hbGxvd1JlYWNoYWJsZVNIQTFJbldhbnQsCisJICogbm9uLXRpcCByZXF1ZXN0cyBjYW4gbmV2ZXIgaGFwcGVuLgorCSAqLworCWlmICghc3RhdGVsZXNzX3JwYyAmJiAhKGFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdCAmIEFMTE9XX1JFQUNIQUJMRV9TSEExKSkKKwkJZ290byBlcnJvcjsKKwlpZiAoIWhhc191bnJlYWNoYWJsZSh3YW50X29iaikpCisJCS8qIEFsbCB0aGUgbm9uLXRpcCBvbmVzIGFyZSBhbmNlc3RvcnMgb2Ygd2hhdCB3ZSBhZHZlcnRpc2VkICovCisJCXJldHVybjsKKworZXJyb3I6CisJLyogUGljayBvbmUgb2YgdGhlbSAod2Uga25vdyB0aGVyZSBhdCBsZWFzdCBpcyBvbmUpICovCisJZm9yIChpID0gMDsgaSA8IHdhbnRfb2JqLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm8gPSB3YW50X29iai0+b2JqZWN0c1tpXS5pdGVtOworCQlpZiAoIWlzX291cl9yZWYobykpIHsKKwkJCXBhY2tldF93cml0ZXJfZXJyb3Iod3JpdGVyLAorCQkJCQkgICAgInVwbG9hZC1wYWNrOiBub3Qgb3VyIHJlZiAlcyIsCisJCQkJCSAgICBvaWRfdG9faGV4KCZvLT5vaWQpKTsKKwkJCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiBub3Qgb3VyIHJlZiAlcyIsCisJCQkgICAgb2lkX3RvX2hleCgmby0+b2lkKSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfc2hhbGxvdyhzdHJ1Y3QgcGFja2V0X3dyaXRlciAqd3JpdGVyLAorCQkJIHN0cnVjdCBjb21taXRfbGlzdCAqcmVzdWx0KQoreworCXdoaWxlIChyZXN1bHQpIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gJnJlc3VsdC0+aXRlbS0+b2JqZWN0OworCQlpZiAoIShvYmplY3QtPmZsYWdzICYgKENMSUVOVF9TSEFMTE9XfE5PVF9TSEFMTE9XKSkpIHsKKwkJCXBhY2tldF93cml0ZXJfd3JpdGUod3JpdGVyLCAic2hhbGxvdyAlcyIsCisJCQkJCSAgICBvaWRfdG9faGV4KCZvYmplY3QtPm9pZCkpOworCQkJcmVnaXN0ZXJfc2hhbGxvdyh0aGVfcmVwb3NpdG9yeSwgJm9iamVjdC0+b2lkKTsKKwkJCXNoYWxsb3dfbnIrKzsKKwkJfQorCQlyZXN1bHQgPSByZXN1bHQtPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZW5kX3Vuc2hhbGxvdyhzdHJ1Y3QgcGFja2V0X3dyaXRlciAqd3JpdGVyLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9hcnJheSAqc2hhbGxvd3MsCisJCQkgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICp3YW50X29iaikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaGFsbG93cy0+bnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBzaGFsbG93cy0+b2JqZWN0c1tpXS5pdGVtOworCQlpZiAob2JqZWN0LT5mbGFncyAmIE5PVF9TSEFMTE9XKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJCQlwYWNrZXRfd3JpdGVyX3dyaXRlKHdyaXRlciwgInVuc2hhbGxvdyAlcyIsCisJCQkJCSAgICBvaWRfdG9faGV4KCZvYmplY3QtPm9pZCkpOworCQkJb2JqZWN0LT5mbGFncyAmPSB+Q0xJRU5UX1NIQUxMT1c7CisJCQkvKgorCQkJICogV2Ugd2FudCB0byBfcmVnaXN0ZXJfICJvYmplY3QiIGFzIHNoYWxsb3csIGJ1dCB3ZQorCQkJICogYWxzbyBuZWVkIHRvIHRyYXZlcnNlIG9iamVjdCdzIHBhcmVudHMgdG8gZGVlcGVuIGEKKwkJCSAqIHNoYWxsb3cgY2xvbmUuIFVucmVnaXN0ZXIgaXQgZm9yIG5vdyBzbyB3ZSBjYW4KKwkJCSAqIHBhcnNlIGFuZCBhZGQgdGhlIHBhcmVudHMgdG8gdGhlIHdhbnQgbGlzdCwgdGhlbgorCQkJICogcmUtcmVnaXN0ZXIgaXQuCisJCQkgKi8KKwkJCXVucmVnaXN0ZXJfc2hhbGxvdygmb2JqZWN0LT5vaWQpOworCQkJb2JqZWN0LT5wYXJzZWQgPSAwOworCQkJcGFyc2VfY29tbWl0X29yX2RpZSgoc3RydWN0IGNvbW1pdCAqKW9iamVjdCk7CisJCQlwYXJlbnRzID0gKChzdHJ1Y3QgY29tbWl0ICopb2JqZWN0KS0+cGFyZW50czsKKwkJCXdoaWxlIChwYXJlbnRzKSB7CisJCQkJYWRkX29iamVjdF9hcnJheSgmcGFyZW50cy0+aXRlbS0+b2JqZWN0LAorCQkJCQkJIE5VTEwsIHdhbnRfb2JqKTsKKwkJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJCX0KKwkJCWFkZF9vYmplY3RfYXJyYXkob2JqZWN0LCBOVUxMLCAmZXh0cmFfZWRnZV9vYmopOworCQl9CisJCS8qIG1ha2Ugc3VyZSBjb21taXQgdHJhdmVyc2FsIGNvbmZvcm1zIHRvIGNsaWVudCAqLworCQlyZWdpc3Rlcl9zaGFsbG93KHRoZV9yZXBvc2l0b3J5LCAmb2JqZWN0LT5vaWQpOworCX0KK30KKworc3RhdGljIGludCBjaGVja19yZWYoY29uc3QgY2hhciAqcmVmbmFtZV9mdWxsLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpOworc3RhdGljIHZvaWQgZGVlcGVuKHN0cnVjdCBwYWNrZXRfd3JpdGVyICp3cml0ZXIsIGludCBkZXB0aCwgaW50IGRlZXBlbl9yZWxhdGl2ZSwKKwkJICAgc3RydWN0IG9iamVjdF9hcnJheSAqc2hhbGxvd3MsIHN0cnVjdCBvYmplY3RfYXJyYXkgKndhbnRfb2JqKQoreworCWlmIChkZXB0aCA9PSBJTkZJTklURV9ERVBUSCAmJiAhaXNfcmVwb3NpdG9yeV9zaGFsbG93KHRoZV9yZXBvc2l0b3J5KSkgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2hhbGxvd3MtPm5yOyBpKyspIHsKKwkJCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IHNoYWxsb3dzLT5vYmplY3RzW2ldLml0ZW07CisJCQlvYmplY3QtPmZsYWdzIHw9IE5PVF9TSEFMTE9XOworCQl9CisJfSBlbHNlIGlmIChkZWVwZW5fcmVsYXRpdmUpIHsKKwkJc3RydWN0IG9iamVjdF9hcnJheSByZWFjaGFibGVfc2hhbGxvd3MgPSBPQkpFQ1RfQVJSQVlfSU5JVDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpyZXN1bHQ7CisKKwkJLyoKKwkJICogQ2hlY2tpbmcgZm9yIHJlYWNoYWJsZSBzaGFsbG93cyByZXF1aXJlcyB0aGF0IG91ciByZWZzIGJlCisJCSAqIG1hcmtlZCB3aXRoIE9VUl9SRUYuCisJCSAqLworCQloZWFkX3JlZl9uYW1lc3BhY2VkKGNoZWNrX3JlZiwgTlVMTCk7CisJCWZvcl9lYWNoX25hbWVzcGFjZWRfcmVmKGNoZWNrX3JlZiwgTlVMTCk7CisKKwkJZ2V0X3JlYWNoYWJsZV9saXN0KHNoYWxsb3dzLCAmcmVhY2hhYmxlX3NoYWxsb3dzKTsKKwkJcmVzdWx0ID0gZ2V0X3NoYWxsb3dfY29tbWl0cygmcmVhY2hhYmxlX3NoYWxsb3dzLAorCQkJCQkgICAgIGRlcHRoICsgMSwKKwkJCQkJICAgICBTSEFMTE9XLCBOT1RfU0hBTExPVyk7CisJCXNlbmRfc2hhbGxvdyh3cml0ZXIsIHJlc3VsdCk7CisJCWZyZWVfY29tbWl0X2xpc3QocmVzdWx0KTsKKwkJb2JqZWN0X2FycmF5X2NsZWFyKCZyZWFjaGFibGVfc2hhbGxvd3MpOworCX0gZWxzZSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcmVzdWx0OworCisJCXJlc3VsdCA9IGdldF9zaGFsbG93X2NvbW1pdHMod2FudF9vYmosIGRlcHRoLAorCQkJCQkgICAgIFNIQUxMT1csIE5PVF9TSEFMTE9XKTsKKwkJc2VuZF9zaGFsbG93KHdyaXRlciwgcmVzdWx0KTsKKwkJZnJlZV9jb21taXRfbGlzdChyZXN1bHQpOworCX0KKworCXNlbmRfdW5zaGFsbG93KHdyaXRlciwgc2hhbGxvd3MsIHdhbnRfb2JqKTsKK30KKworc3RhdGljIHZvaWQgZGVlcGVuX2J5X3Jldl9saXN0KHN0cnVjdCBwYWNrZXRfd3JpdGVyICp3cml0ZXIsIGludCBhYywKKwkJCSAgICAgICBjb25zdCBjaGFyICoqYXYsCisJCQkgICAgICAgc3RydWN0IG9iamVjdF9hcnJheSAqc2hhbGxvd3MsCisJCQkgICAgICAgc3RydWN0IG9iamVjdF9hcnJheSAqd2FudF9vYmopCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZXN1bHQ7CisKKwlkaXNhYmxlX2NvbW1pdF9ncmFwaCh0aGVfcmVwb3NpdG9yeSk7CisJcmVzdWx0ID0gZ2V0X3NoYWxsb3dfY29tbWl0c19ieV9yZXZfbGlzdChhYywgYXYsIFNIQUxMT1csIE5PVF9TSEFMTE9XKTsKKwlzZW5kX3NoYWxsb3cod3JpdGVyLCByZXN1bHQpOworCWZyZWVfY29tbWl0X2xpc3QocmVzdWx0KTsKKwlzZW5kX3Vuc2hhbGxvdyh3cml0ZXIsIHNoYWxsb3dzLCB3YW50X29iaik7Cit9CisKKy8qIFJldHVybnMgMSBpZiBhIHNoYWxsb3cgbGlzdCBpcyBzZW50IG9yIDAgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IHNlbmRfc2hhbGxvd19saXN0KHN0cnVjdCBwYWNrZXRfd3JpdGVyICp3cml0ZXIsCisJCQkgICAgIGludCBkZXB0aCwgaW50IGRlZXBlbl9yZXZfbGlzdCwKKwkJCSAgICAgdGltZXN0YW1wX3QgZGVlcGVuX3NpbmNlLAorCQkJICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmRlZXBlbl9ub3QsCisJCQkgICAgIGludCBkZWVwZW5fcmVsYXRpdmUsCisJCQkgICAgIHN0cnVjdCBvYmplY3RfYXJyYXkgKnNoYWxsb3dzLAorCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICp3YW50X29iaikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkZXB0aCA+IDAgJiYgZGVlcGVuX3Jldl9saXN0KQorCQlkaWUoImdpdCB1cGxvYWQtcGFjazogZGVlcGVuIGFuZCBkZWVwZW4tc2luY2UgKG9yIGRlZXBlbi1ub3QpIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIik7CisJaWYgKGRlcHRoID4gMCkgeworCQlkZWVwZW4od3JpdGVyLCBkZXB0aCwgZGVlcGVuX3JlbGF0aXZlLCBzaGFsbG93cywgd2FudF9vYmopOworCQlyZXQgPSAxOworCX0gZWxzZSBpZiAoZGVlcGVuX3Jldl9saXN0KSB7CisJCXN0cnVjdCBhcmd2X2FycmF5IGF2ID0gQVJHVl9BUlJBWV9JTklUOworCQlpbnQgaTsKKworCQlhcmd2X2FycmF5X3B1c2goJmF2LCAicmV2LWxpc3QiKTsKKwkJaWYgKGRlZXBlbl9zaW5jZSkKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJmF2LCAiLS1tYXgtYWdlPSUiUFJJdGltZSwgZGVlcGVuX3NpbmNlKTsKKwkJaWYgKGRlZXBlbl9ub3QtPm5yKSB7CisJCQlhcmd2X2FycmF5X3B1c2goJmF2LCAiLS1ub3QiKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBkZWVwZW5fbm90LT5ucjsgaSsrKSB7CisJCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnMgPSBkZWVwZW5fbm90LT5pdGVtcyArIGk7CisJCQkJYXJndl9hcnJheV9wdXNoKCZhdiwgcy0+c3RyaW5nKTsKKwkJCX0KKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXYsICItLW5vdCIpOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCB3YW50X29iai0+bnI7IGkrKykgeworCQkJc3RydWN0IG9iamVjdCAqbyA9IHdhbnRfb2JqLT5vYmplY3RzW2ldLml0ZW07CisJCQlhcmd2X2FycmF5X3B1c2goJmF2LCBvaWRfdG9faGV4KCZvLT5vaWQpKTsKKwkJfQorCQlkZWVwZW5fYnlfcmV2X2xpc3Qod3JpdGVyLCBhdi5hcmdjLCBhdi5hcmd2LCBzaGFsbG93cywgd2FudF9vYmopOworCQlhcmd2X2FycmF5X2NsZWFyKCZhdik7CisJCXJldCA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKHNoYWxsb3dzLT5uciA+IDApIHsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IHNoYWxsb3dzLT5ucjsgaSsrKQorCQkJCXJlZ2lzdGVyX3NoYWxsb3codGhlX3JlcG9zaXRvcnksCisJCQkJCQkgJnNoYWxsb3dzLT5vYmplY3RzW2ldLml0ZW0tPm9pZCk7CisJCX0KKwl9CisKKwlzaGFsbG93X25yICs9IHNoYWxsb3dzLT5ucjsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHByb2Nlc3Nfc2hhbGxvdyhjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpzaGFsbG93cykKK3sKKwljb25zdCBjaGFyICphcmc7CisJaWYgKHNraXBfcHJlZml4KGxpbmUsICJzaGFsbG93ICIsICZhcmcpKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisJCWlmIChnZXRfb2lkX2hleChhcmcsICZvaWQpKQorCQkJZGllKCJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiLCBsaW5lKTsKKwkJb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwkJaWYgKCFvYmplY3QpCisJCQlyZXR1cm4gMTsKKwkJaWYgKG9iamVjdC0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQkJZGllKCJpbnZhbGlkIHNoYWxsb3cgb2JqZWN0ICVzIiwgb2lkX3RvX2hleCgmb2lkKSk7CisJCWlmICghKG9iamVjdC0+ZmxhZ3MgJiBDTElFTlRfU0hBTExPVykpIHsKKwkJCW9iamVjdC0+ZmxhZ3MgfD0gQ0xJRU5UX1NIQUxMT1c7CisJCQlhZGRfb2JqZWN0X2FycmF5KG9iamVjdCwgTlVMTCwgc2hhbGxvd3MpOworCQl9CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfZGVlcGVuKGNvbnN0IGNoYXIgKmxpbmUsIGludCAqZGVwdGgpCit7CisJY29uc3QgY2hhciAqYXJnOworCWlmIChza2lwX3ByZWZpeChsaW5lLCAiZGVlcGVuICIsICZhcmcpKSB7CisJCWNoYXIgKmVuZCA9IE5VTEw7CisJCSpkZXB0aCA9IChpbnQpc3RydG9sKGFyZywgJmVuZCwgMCk7CisJCWlmICghZW5kIHx8ICplbmQgfHwgKmRlcHRoIDw9IDApCisJCQlkaWUoIkludmFsaWQgZGVlcGVuOiAlcyIsIGxpbmUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2RlZXBlbl9zaW5jZShjb25zdCBjaGFyICpsaW5lLCB0aW1lc3RhbXBfdCAqZGVlcGVuX3NpbmNlLCBpbnQgKmRlZXBlbl9yZXZfbGlzdCkKK3sKKwljb25zdCBjaGFyICphcmc7CisJaWYgKHNraXBfcHJlZml4KGxpbmUsICJkZWVwZW4tc2luY2UgIiwgJmFyZykpIHsKKwkJY2hhciAqZW5kID0gTlVMTDsKKwkJKmRlZXBlbl9zaW5jZSA9IHBhcnNlX3RpbWVzdGFtcChhcmcsICZlbmQsIDApOworCQlpZiAoIWVuZCB8fCAqZW5kIHx8ICFkZWVwZW5fc2luY2UgfHwKKwkJICAgIC8qIHJldmlzaW9ucy5jJ3MgbWF4X2FnZSAtMSBpcyBzcGVjaWFsICovCisJCSAgICAqZGVlcGVuX3NpbmNlID09IC0xKQorCQkJZGllKCJJbnZhbGlkIGRlZXBlbi1zaW5jZTogJXMiLCBsaW5lKTsKKwkJKmRlZXBlbl9yZXZfbGlzdCA9IDE7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2RlZXBlbl9ub3QoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHN0cmluZ19saXN0ICpkZWVwZW5fbm90LCBpbnQgKmRlZXBlbl9yZXZfbGlzdCkKK3sKKwljb25zdCBjaGFyICphcmc7CisJaWYgKHNraXBfcHJlZml4KGxpbmUsICJkZWVwZW4tbm90ICIsICZhcmcpKSB7CisJCWNoYXIgKnJlZiA9IE5VTEw7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlpZiAoZXhwYW5kX3JlZih0aGVfcmVwb3NpdG9yeSwgYXJnLCBzdHJsZW4oYXJnKSwgJm9pZCwgJnJlZikgIT0gMSkKKwkJCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiBhbWJpZ3VvdXMgZGVlcGVuLW5vdDogJXMiLCBsaW5lKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGRlZXBlbl9ub3QsIHJlZik7CisJCWZyZWUocmVmKTsKKwkJKmRlZXBlbl9yZXZfbGlzdCA9IDE7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVjZWl2ZV9uZWVkcyhzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVhZGVyLAorCQkJICBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICp3YW50X29iaiwKKwkJCSAgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMpCit7CisJc3RydWN0IG9iamVjdF9hcnJheSBzaGFsbG93cyA9IE9CSkVDVF9BUlJBWV9JTklUOworCXN0cnVjdCBzdHJpbmdfbGlzdCBkZWVwZW5fbm90ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJaW50IGRlcHRoID0gMDsKKwlpbnQgaGFzX25vbl90aXAgPSAwOworCXRpbWVzdGFtcF90IGRlZXBlbl9zaW5jZSA9IDA7CisJaW50IGRlZXBlbl9yZXZfbGlzdCA9IDA7CisJaW50IGRlZXBlbl9yZWxhdGl2ZSA9IDA7CisJc3RydWN0IHBhY2tldF93cml0ZXIgd3JpdGVyOworCisJc2hhbGxvd19uciA9IDA7CisJcGFja2V0X3dyaXRlcl9pbml0KCZ3cml0ZXIsIDEpOworCWZvciAoOzspIHsKKwkJc3RydWN0IG9iamVjdCAqbzsKKwkJY29uc3QgY2hhciAqZmVhdHVyZXM7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkX2J1ZjsKKwkJY29uc3QgY2hhciAqYXJnOworCisJCXJlc2V0X3RpbWVvdXQoKTsKKwkJaWYgKHBhY2tldF9yZWFkZXJfcmVhZChyZWFkZXIpICE9IFBBQ0tFVF9SRUFEX05PUk1BTCkKKwkJCWJyZWFrOworCisJCWlmIChwcm9jZXNzX3NoYWxsb3cocmVhZGVyLT5saW5lLCAmc2hhbGxvd3MpKQorCQkJY29udGludWU7CisJCWlmIChwcm9jZXNzX2RlZXBlbihyZWFkZXItPmxpbmUsICZkZXB0aCkpCisJCQljb250aW51ZTsKKwkJaWYgKHByb2Nlc3NfZGVlcGVuX3NpbmNlKHJlYWRlci0+bGluZSwgJmRlZXBlbl9zaW5jZSwgJmRlZXBlbl9yZXZfbGlzdCkpCisJCQljb250aW51ZTsKKwkJaWYgKHByb2Nlc3NfZGVlcGVuX25vdChyZWFkZXItPmxpbmUsICZkZWVwZW5fbm90LCAmZGVlcGVuX3Jldl9saXN0KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChza2lwX3ByZWZpeChyZWFkZXItPmxpbmUsICJmaWx0ZXIgIiwgJmFyZykpIHsKKwkJCWlmICghZmlsdGVyX2NhcGFiaWxpdHlfcmVxdWVzdGVkKQorCQkJCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiBmaWx0ZXJpbmcgY2FwYWJpbGl0eSBub3QgbmVnb3RpYXRlZCIpOworCQkJbGlzdF9vYmplY3RzX2ZpbHRlcl9kaWVfaWZfcG9wdWxhdGVkKGZpbHRlcl9vcHRpb25zKTsKKwkJCXBhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoZmlsdGVyX29wdGlvbnMsIGFyZyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghc2tpcF9wcmVmaXgocmVhZGVyLT5saW5lLCAid2FudCAiLCAmYXJnKSB8fAorCQkgICAgcGFyc2Vfb2lkX2hleChhcmcsICZvaWRfYnVmLCAmZmVhdHVyZXMpKQorCQkJZGllKCJnaXQgdXBsb2FkLXBhY2s6IHByb3RvY29sIGVycm9yLCAiCisJCQkgICAgImV4cGVjdGVkIHRvIGdldCBvYmplY3QgSUQsIG5vdCAnJXMnIiwgcmVhZGVyLT5saW5lKTsKKworCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAiZGVlcGVuLXJlbGF0aXZlIikpCisJCQlkZWVwZW5fcmVsYXRpdmUgPSAxOworCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAibXVsdGlfYWNrX2RldGFpbGVkIikpCisJCQltdWx0aV9hY2sgPSAyOworCQllbHNlIGlmIChwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZXMsICJtdWx0aV9hY2siKSkKKwkJCW11bHRpX2FjayA9IDE7CisJCWlmIChwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZXMsICJuby1kb25lIikpCisJCQlub19kb25lID0gMTsKKwkJaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlcywgInRoaW4tcGFjayIpKQorCQkJdXNlX3RoaW5fcGFjayA9IDE7CisJCWlmIChwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZXMsICJvZnMtZGVsdGEiKSkKKwkJCXVzZV9vZnNfZGVsdGEgPSAxOworCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAic2lkZS1iYW5kLTY0ayIpKQorCQkJdXNlX3NpZGViYW5kID0gTEFSR0VfUEFDS0VUX01BWDsKKwkJZWxzZSBpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAic2lkZS1iYW5kIikpCisJCQl1c2Vfc2lkZWJhbmQgPSBERUZBVUxUX1BBQ0tFVF9NQVg7CisJCWlmIChwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZXMsICJuby1wcm9ncmVzcyIpKQorCQkJbm9fcHJvZ3Jlc3MgPSAxOworCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAiaW5jbHVkZS10YWciKSkKKwkJCXVzZV9pbmNsdWRlX3RhZyA9IDE7CisJCWlmIChhbGxvd19maWx0ZXIgJiYgcGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAiZmlsdGVyIikpCisJCQlmaWx0ZXJfY2FwYWJpbGl0eV9yZXF1ZXN0ZWQgPSAxOworCisJCW8gPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvaWRfYnVmKTsKKwkJaWYgKCFvKSB7CisJCQlwYWNrZXRfd3JpdGVyX2Vycm9yKCZ3cml0ZXIsCisJCQkJCSAgICAidXBsb2FkLXBhY2s6IG5vdCBvdXIgcmVmICVzIiwKKwkJCQkJICAgIG9pZF90b19oZXgoJm9pZF9idWYpKTsKKwkJCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiBub3Qgb3VyIHJlZiAlcyIsCisJCQkgICAgb2lkX3RvX2hleCgmb2lkX2J1ZikpOworCQl9CisJCWlmICghKG8tPmZsYWdzICYgV0FOVEVEKSkgeworCQkJby0+ZmxhZ3MgfD0gV0FOVEVEOworCQkJaWYgKCEoKGFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdCAmIEFMTE9XX0FOWV9TSEExKSA9PSBBTExPV19BTllfU0hBMQorCQkJICAgICAgfHwgaXNfb3VyX3JlZihvKSkpCisJCQkJaGFzX25vbl90aXAgPSAxOworCQkJYWRkX29iamVjdF9hcnJheShvLCBOVUxMLCB3YW50X29iaik7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGhhdmUgc2VudCBhbGwgb3VyIHJlZnMgYWxyZWFkeSwgYW5kIHRoZSBvdGhlciBlbmQKKwkgKiBzaG91bGQgaGF2ZSBjaG9zZW4gb3V0IG9mIHRoZW0uIFdoZW4gd2UgYXJlIG9wZXJhdGluZworCSAqIGluIHRoZSBzdGF0ZWxlc3MgUlBDIG1vZGUsIGhvd2V2ZXIsIHRoZWlyIGNob2ljZSBtYXkKKwkgKiBoYXZlIGJlZW4gYmFzZWQgb24gdGhlIHNldCBvZiBvbGRlciByZWZzIGFkdmVydGlzZWQKKwkgKiBieSBhbm90aGVyIHByb2Nlc3MgdGhhdCBoYW5kbGVkIHRoZSBpbml0aWFsIHJlcXVlc3QuCisJICovCisJaWYgKGhhc19ub25fdGlwKQorCQljaGVja19ub25fdGlwKHdhbnRfb2JqLCAmd3JpdGVyKTsKKworCWlmICghdXNlX3NpZGViYW5kICYmIGRhZW1vbl9tb2RlKQorCQlub19wcm9ncmVzcyA9IDE7CisKKwlpZiAoZGVwdGggPT0gMCAmJiAhZGVlcGVuX3Jldl9saXN0ICYmIHNoYWxsb3dzLm5yID09IDApCisJCXJldHVybjsKKworCWlmIChzZW5kX3NoYWxsb3dfbGlzdCgmd3JpdGVyLCBkZXB0aCwgZGVlcGVuX3Jldl9saXN0LCBkZWVwZW5fc2luY2UsCisJCQkgICAgICAmZGVlcGVuX25vdCwgZGVlcGVuX3JlbGF0aXZlLCAmc2hhbGxvd3MsCisJCQkgICAgICB3YW50X29iaikpCisJCXBhY2tldF9mbHVzaCgxKTsKKwlvYmplY3RfYXJyYXlfY2xlYXIoJnNoYWxsb3dzKTsKK30KKworLyogcmV0dXJuIG5vbi16ZXJvIGlmIHRoZSByZWYgaXMgaGlkZGVuLCBvdGhlcndpc2UgMCAqLworc3RhdGljIGludCBtYXJrX291cl9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgY2hhciAqcmVmbmFtZV9mdWxsLAorCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3QgKm8gPSBsb29rdXBfdW5rbm93bl9vYmplY3Qob2lkKTsKKworCWlmIChyZWZfaXNfaGlkZGVuKHJlZm5hbWUsIHJlZm5hbWVfZnVsbCkpIHsKKwkJby0+ZmxhZ3MgfD0gSElEREVOX1JFRjsKKwkJcmV0dXJuIDE7CisJfQorCW8tPmZsYWdzIHw9IE9VUl9SRUY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWVfZnVsbCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCWNvbnN0IGNoYXIgKnJlZm5hbWUgPSBzdHJpcF9uYW1lc3BhY2UocmVmbmFtZV9mdWxsKTsKKworCW1hcmtfb3VyX3JlZihyZWZuYW1lLCByZWZuYW1lX2Z1bGwsIG9pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZvcm1hdF9zeW1yZWZfaW5mbyhzdHJ1Y3Qgc3RyYnVmICpidWYsIHN0cnVjdCBzdHJpbmdfbGlzdCAqc3ltcmVmKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJaWYgKCFzeW1yZWYtPm5yKQorCQlyZXR1cm47CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCBzeW1yZWYpCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiBzeW1yZWY9JXM6JXMiLCBpdGVtLT5zdHJpbmcsIChjaGFyICopaXRlbS0+dXRpbCk7Cit9CisKK3N0YXRpYyBpbnQgc2VuZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNhcGFiaWxpdGllcyA9ICJtdWx0aV9hY2sgdGhpbi1wYWNrIHNpZGUtYmFuZCIKKwkJIiBzaWRlLWJhbmQtNjRrIG9mcy1kZWx0YSBzaGFsbG93IGRlZXBlbi1zaW5jZSBkZWVwZW4tbm90IgorCQkiIGRlZXBlbi1yZWxhdGl2ZSBuby1wcm9ncmVzcyBpbmNsdWRlLXRhZyBtdWx0aV9hY2tfZGV0YWlsZWQiOworCWNvbnN0IGNoYXIgKnJlZm5hbWVfbm9ucyA9IHN0cmlwX25hbWVzcGFjZShyZWZuYW1lKTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHBlZWxlZDsKKworCWlmIChtYXJrX291cl9yZWYocmVmbmFtZV9ub25zLCByZWZuYW1lLCBvaWQpKQorCQlyZXR1cm4gMDsKKworCWlmIChjYXBhYmlsaXRpZXMpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzeW1yZWZfaW5mbyA9IFNUUkJVRl9JTklUOworCisJCWZvcm1hdF9zeW1yZWZfaW5mbygmc3ltcmVmX2luZm8sIGNiX2RhdGEpOworCQlwYWNrZXRfd3JpdGVfZm10KDEsICIlcyAlcyVjJXMlcyVzJXMlcyVzIGFnZW50PSVzXG4iLAorCQkJICAgICBvaWRfdG9faGV4KG9pZCksIHJlZm5hbWVfbm9ucywKKwkJCSAgICAgMCwgY2FwYWJpbGl0aWVzLAorCQkJICAgICAoYWxsb3dfdW5hZHZlcnRpc2VkX29iamVjdF9yZXF1ZXN0ICYgQUxMT1dfVElQX1NIQTEpID8KKwkJCQkgICAgICIgYWxsb3ctdGlwLXNoYTEtaW4td2FudCIgOiAiIiwKKwkJCSAgICAgKGFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdCAmIEFMTE9XX1JFQUNIQUJMRV9TSEExKSA/CisJCQkJICAgICAiIGFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQiIDogIiIsCisJCQkgICAgIHN0YXRlbGVzc19ycGMgPyAiIG5vLWRvbmUiIDogIiIsCisJCQkgICAgIHN5bXJlZl9pbmZvLmJ1ZiwKKwkJCSAgICAgYWxsb3dfZmlsdGVyID8gIiBmaWx0ZXIiIDogIiIsCisJCQkgICAgIGdpdF91c2VyX2FnZW50X3Nhbml0aXplZCgpKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnN5bXJlZl9pbmZvKTsKKwl9IGVsc2UgeworCQlwYWNrZXRfd3JpdGVfZm10KDEsICIlcyAlc1xuIiwgb2lkX3RvX2hleChvaWQpLCByZWZuYW1lX25vbnMpOworCX0KKwljYXBhYmlsaXRpZXMgPSBOVUxMOworCWlmICghcGVlbF9yZWYocmVmbmFtZSwgJnBlZWxlZCkpCisJCXBhY2tldF93cml0ZV9mbXQoMSwgIiVzICVzXnt9XG4iLCBvaWRfdG9faGV4KCZwZWVsZWQpLCByZWZuYW1lX25vbnMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbmRfc3ltcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCWNvbnN0IGNoYXIgKnN5bXJlZl90YXJnZXQ7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwlpZiAoKGZsYWcgJiBSRUZfSVNTWU1SRUYpID09IDApCisJCXJldHVybiAwOworCXN5bXJlZl90YXJnZXQgPSByZXNvbHZlX3JlZl91bnNhZmUocmVmbmFtZSwgMCwgTlVMTCwgJmZsYWcpOworCWlmICghc3ltcmVmX3RhcmdldCB8fCAoZmxhZyAmIFJFRl9JU1NZTVJFRikgPT0gMCkKKwkJZGllKCInJXMnIGlzIGEgc3ltcmVmIGJ1dCBpdCBpcyBub3Q/IiwgcmVmbmFtZSk7CisJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZChjYl9kYXRhLCBzdHJpcF9uYW1lc3BhY2UocmVmbmFtZSkpOworCWl0ZW0tPnV0aWwgPSB4c3RyZHVwKHN0cmlwX25hbWVzcGFjZShzeW1yZWZfdGFyZ2V0KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBsb2FkX3BhY2tfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKnVudXNlZCkKK3sKKwlpZiAoIXN0cmNtcCgidXBsb2FkcGFjay5hbGxvd3RpcHNoYTFpbndhbnQiLCB2YXIpKSB7CisJCWlmIChnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkpCisJCQlhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgfD0gQUxMT1dfVElQX1NIQTE7CisJCWVsc2UKKwkJCWFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdCAmPSB+QUxMT1dfVElQX1NIQTE7CisJfSBlbHNlIGlmICghc3RyY21wKCJ1cGxvYWRwYWNrLmFsbG93cmVhY2hhYmxlc2hhMWlud2FudCIsIHZhcikpIHsKKwkJaWYgKGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSkKKwkJCWFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdCB8PSBBTExPV19SRUFDSEFCTEVfU0hBMTsKKwkJZWxzZQorCQkJYWxsb3dfdW5hZHZlcnRpc2VkX29iamVjdF9yZXF1ZXN0ICY9IH5BTExPV19SRUFDSEFCTEVfU0hBMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoInVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IiwgdmFyKSkgeworCQlpZiAoZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpKQorCQkJYWxsb3dfdW5hZHZlcnRpc2VkX29iamVjdF9yZXF1ZXN0IHw9IEFMTE9XX0FOWV9TSEExOworCQllbHNlCisJCQlhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgJj0gfkFMTE9XX0FOWV9TSEExOworCX0gZWxzZSBpZiAoIXN0cmNtcCgidXBsb2FkcGFjay5rZWVwYWxpdmUiLCB2YXIpKSB7CisJCWtlZXBhbGl2ZSA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlpZiAoIWtlZXBhbGl2ZSkKKwkJCWtlZXBhbGl2ZSA9IC0xOworCX0gZWxzZSBpZiAoIXN0cmNtcCgidXBsb2FkcGFjay5hbGxvd2ZpbHRlciIsIHZhcikpIHsKKwkJYWxsb3dfZmlsdGVyID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCX0gZWxzZSBpZiAoIXN0cmNtcCgidXBsb2FkcGFjay5hbGxvd3JlZmlud2FudCIsIHZhcikpIHsKKwkJYWxsb3dfcmVmX2luX3dhbnQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJfSBlbHNlIGlmICghc3RyY21wKCJ1cGxvYWRwYWNrLmFsbG93c2lkZWJhbmRhbGwiLCB2YXIpKSB7CisJCWFsbG93X3NpZGViYW5kX2FsbCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoImNvcmUucHJlY29tcG9zZXVuaWNvZGUiLCB2YXIpKSB7CisJCXByZWNvbXBvc2VkX3VuaWNvZGUgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJfQorCisJaWYgKGN1cnJlbnRfY29uZmlnX3Njb3BlKCkgIT0gQ09ORklHX1NDT1BFX0xPQ0FMICYmCisJY3VycmVudF9jb25maWdfc2NvcGUoKSAhPSBDT05GSUdfU0NPUEVfV09SS1RSRUUpIHsKKwkJaWYgKCFzdHJjbXAoInVwbG9hZHBhY2sucGFja29iamVjdHNob29rIiwgdmFyKSkKKwkJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmcGFja19vYmplY3RzX2hvb2ssIHZhciwgdmFsdWUpOworCX0KKworCXJldHVybiBwYXJzZV9oaWRlX3JlZnNfY29uZmlnKHZhciwgdmFsdWUsICJ1cGxvYWRwYWNrIik7Cit9CisKK3ZvaWQgdXBsb2FkX3BhY2soc3RydWN0IHVwbG9hZF9wYWNrX29wdGlvbnMgKm9wdGlvbnMpCit7CisJc3RydWN0IHN0cmluZ19saXN0IHN5bXJlZiA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBvYmplY3RfYXJyYXkgd2FudF9vYmogPSBPQkpFQ1RfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgcGFja2V0X3JlYWRlciByZWFkZXI7CisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyBmaWx0ZXJfb3B0aW9uczsKKworCXN0YXRlbGVzc19ycGMgPSBvcHRpb25zLT5zdGF0ZWxlc3NfcnBjOworCXRpbWVvdXQgPSBvcHRpb25zLT50aW1lb3V0OworCWRhZW1vbl9tb2RlID0gb3B0aW9ucy0+ZGFlbW9uX21vZGU7CisKKwltZW1zZXQoJmZpbHRlcl9vcHRpb25zLCAwLCBzaXplb2YoZmlsdGVyX29wdGlvbnMpKTsKKworCWdpdF9jb25maWcodXBsb2FkX3BhY2tfY29uZmlnLCBOVUxMKTsKKworCWhlYWRfcmVmX25hbWVzcGFjZWQoZmluZF9zeW1yZWYsICZzeW1yZWYpOworCisJaWYgKG9wdGlvbnMtPmFkdmVydGlzZV9yZWZzIHx8ICFzdGF0ZWxlc3NfcnBjKSB7CisJCXJlc2V0X3RpbWVvdXQoKTsKKwkJaGVhZF9yZWZfbmFtZXNwYWNlZChzZW5kX3JlZiwgJnN5bXJlZik7CisJCWZvcl9lYWNoX25hbWVzcGFjZWRfcmVmKHNlbmRfcmVmLCAmc3ltcmVmKTsKKwkJYWR2ZXJ0aXNlX3NoYWxsb3dfZ3JhZnRzKDEpOworCQlwYWNrZXRfZmx1c2goMSk7CisJfSBlbHNlIHsKKwkJaGVhZF9yZWZfbmFtZXNwYWNlZChjaGVja19yZWYsIE5VTEwpOworCQlmb3JfZWFjaF9uYW1lc3BhY2VkX3JlZihjaGVja19yZWYsIE5VTEwpOworCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmc3ltcmVmLCAxKTsKKwlpZiAob3B0aW9ucy0+YWR2ZXJ0aXNlX3JlZnMpCisJCXJldHVybjsKKworCXBhY2tldF9yZWFkZXJfaW5pdCgmcmVhZGVyLCAwLCBOVUxMLCAwLAorCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSB8CisJCQkgICBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCk7CisKKwlyZWNlaXZlX25lZWRzKCZyZWFkZXIsICZ3YW50X29iaiwgJmZpbHRlcl9vcHRpb25zKTsKKwlpZiAod2FudF9vYmoubnIpIHsKKwkJc3RydWN0IG9iamVjdF9hcnJheSBoYXZlX29iaiA9IE9CSkVDVF9BUlJBWV9JTklUOworCQlnZXRfY29tbW9uX2NvbW1pdHMoJnJlYWRlciwgJmhhdmVfb2JqLCAmd2FudF9vYmopOworCQljcmVhdGVfcGFja19maWxlKCZoYXZlX29iaiwgJndhbnRfb2JqLCAmZmlsdGVyX29wdGlvbnMpOworCX0KKworCWxpc3Rfb2JqZWN0c19maWx0ZXJfcmVsZWFzZSgmZmlsdGVyX29wdGlvbnMpOworfQorCitzdHJ1Y3QgdXBsb2FkX3BhY2tfZGF0YSB7CisJc3RydWN0IG9iamVjdF9hcnJheSB3YW50czsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgd2FudGVkX3JlZnM7CisJc3RydWN0IG9pZF9hcnJheSBoYXZlczsKKworCXN0cnVjdCBvYmplY3RfYXJyYXkgc2hhbGxvd3M7CisJc3RydWN0IHN0cmluZ19saXN0IGRlZXBlbl9ub3Q7CisJaW50IGRlcHRoOworCXRpbWVzdGFtcF90IGRlZXBlbl9zaW5jZTsKKwlpbnQgZGVlcGVuX3Jldl9saXN0OworCWludCBkZWVwZW5fcmVsYXRpdmU7CisKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zIGZpbHRlcl9vcHRpb25zOworCisJc3RydWN0IHBhY2tldF93cml0ZXIgd3JpdGVyOworCisJdW5zaWduZWQgc3RhdGVsZXNzX3JwYyA6IDE7CisKKwl1bnNpZ25lZCB1c2VfdGhpbl9wYWNrIDogMTsKKwl1bnNpZ25lZCB1c2Vfb2ZzX2RlbHRhIDogMTsKKwl1bnNpZ25lZCBub19wcm9ncmVzcyA6IDE7CisJdW5zaWduZWQgdXNlX2luY2x1ZGVfdGFnIDogMTsKKwl1bnNpZ25lZCBkb25lIDogMTsKK307CisKK3N0YXRpYyB2b2lkIHVwbG9hZF9wYWNrX2RhdGFfaW5pdChzdHJ1Y3QgdXBsb2FkX3BhY2tfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IHdhbnRzID0gT0JKRUNUX0FSUkFZX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0IHdhbnRlZF9yZWZzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IG9pZF9hcnJheSBoYXZlcyA9IE9JRF9BUlJBWV9JTklUOworCXN0cnVjdCBvYmplY3RfYXJyYXkgc2hhbGxvd3MgPSBPQkpFQ1RfQVJSQVlfSU5JVDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZGVlcGVuX25vdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJbWVtc2V0KGRhdGEsIDAsIHNpemVvZigqZGF0YSkpOworCWRhdGEtPndhbnRzID0gd2FudHM7CisJZGF0YS0+d2FudGVkX3JlZnMgPSB3YW50ZWRfcmVmczsKKwlkYXRhLT5oYXZlcyA9IGhhdmVzOworCWRhdGEtPnNoYWxsb3dzID0gc2hhbGxvd3M7CisJZGF0YS0+ZGVlcGVuX25vdCA9IGRlZXBlbl9ub3Q7CisJcGFja2V0X3dyaXRlcl9pbml0KCZkYXRhLT53cml0ZXIsIDEpOworfQorCitzdGF0aWMgdm9pZCB1cGxvYWRfcGFja19kYXRhX2NsZWFyKHN0cnVjdCB1cGxvYWRfcGFja19kYXRhICpkYXRhKQoreworCW9iamVjdF9hcnJheV9jbGVhcigmZGF0YS0+d2FudHMpOworCXN0cmluZ19saXN0X2NsZWFyKCZkYXRhLT53YW50ZWRfcmVmcywgMSk7CisJb2lkX2FycmF5X2NsZWFyKCZkYXRhLT5oYXZlcyk7CisJb2JqZWN0X2FycmF5X2NsZWFyKCZkYXRhLT5zaGFsbG93cyk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmRhdGEtPmRlZXBlbl9ub3QsIDApOworCWxpc3Rfb2JqZWN0c19maWx0ZXJfcmVsZWFzZSgmZGF0YS0+ZmlsdGVyX29wdGlvbnMpOworfQorCitzdGF0aWMgaW50IHBhcnNlX3dhbnQoc3RydWN0IHBhY2tldF93cml0ZXIgKndyaXRlciwgY29uc3QgY2hhciAqbGluZSwKKwkJICAgICAgc3RydWN0IG9iamVjdF9hcnJheSAqd2FudF9vYmopCit7CisJY29uc3QgY2hhciAqYXJnOworCWlmIChza2lwX3ByZWZpeChsaW5lLCAid2FudCAiLCAmYXJnKSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJc3RydWN0IG9iamVjdCAqbzsKKworCQlpZiAoZ2V0X29pZF9oZXgoYXJnLCAmb2lkKSkKKwkJCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiBwcm90b2NvbCBlcnJvciwgIgorCQkJICAgICJleHBlY3RlZCB0byBnZXQgb2lkLCBub3QgJyVzJyIsIGxpbmUpOworCisJCW8gPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvaWQpOworCQlpZiAoIW8pIHsKKwkJCXBhY2tldF93cml0ZXJfZXJyb3Iod3JpdGVyLAorCQkJCQkgICAgInVwbG9hZC1wYWNrOiBub3Qgb3VyIHJlZiAlcyIsCisJCQkJCSAgICBvaWRfdG9faGV4KCZvaWQpKTsKKwkJCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiBub3Qgb3VyIHJlZiAlcyIsCisJCQkgICAgb2lkX3RvX2hleCgmb2lkKSk7CisJCX0KKworCQlpZiAoIShvLT5mbGFncyAmIFdBTlRFRCkpIHsKKwkJCW8tPmZsYWdzIHw9IFdBTlRFRDsKKwkJCWFkZF9vYmplY3RfYXJyYXkobywgTlVMTCwgd2FudF9vYmopOworCQl9CisKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfd2FudF9yZWYoc3RydWN0IHBhY2tldF93cml0ZXIgKndyaXRlciwgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgc3RydWN0IHN0cmluZ19saXN0ICp3YW50ZWRfcmVmcywKKwkJCSAgc3RydWN0IG9iamVjdF9hcnJheSAqd2FudF9vYmopCit7CisJY29uc3QgY2hhciAqYXJnOworCWlmIChza2lwX3ByZWZpeChsaW5lLCAid2FudC1yZWYgIiwgJmFyZykpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlzdHJ1Y3Qgb2JqZWN0ICpvOworCisJCWlmIChyZWFkX3JlZihhcmcsICZvaWQpKSB7CisJCQlwYWNrZXRfd3JpdGVyX2Vycm9yKHdyaXRlciwgInVua25vd24gcmVmICVzIiwgYXJnKTsKKwkJCWRpZSgidW5rbm93biByZWYgJXMiLCBhcmcpOworCQl9CisKKwkJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZCh3YW50ZWRfcmVmcywgYXJnKTsKKwkJaXRlbS0+dXRpbCA9IG9pZGR1cCgmb2lkKTsKKworCQlvID0gcGFyc2Vfb2JqZWN0X29yX2RpZSgmb2lkLCBhcmcpOworCQlpZiAoIShvLT5mbGFncyAmIFdBTlRFRCkpIHsKKwkJCW8tPmZsYWdzIHw9IFdBTlRFRDsKKwkJCWFkZF9vYmplY3RfYXJyYXkobywgTlVMTCwgd2FudF9vYmopOworCQl9CisKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfaGF2ZShjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3Qgb2lkX2FycmF5ICpoYXZlcykKK3sKKwljb25zdCBjaGFyICphcmc7CisJaWYgKHNraXBfcHJlZml4KGxpbmUsICJoYXZlICIsICZhcmcpKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCWlmIChnZXRfb2lkX2hleChhcmcsICZvaWQpKQorCQkJZGllKCJnaXQgdXBsb2FkLXBhY2s6IGV4cGVjdGVkIFNIQTEgb2JqZWN0LCBnb3QgJyVzJyIsIGFyZyk7CisJCW9pZF9hcnJheV9hcHBlbmQoaGF2ZXMsICZvaWQpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19hcmdzKHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZXF1ZXN0LAorCQkJIHN0cnVjdCB1cGxvYWRfcGFja19kYXRhICpkYXRhLAorCQkJIHN0cnVjdCBvYmplY3RfYXJyYXkgKndhbnRfb2JqKQoreworCXdoaWxlIChwYWNrZXRfcmVhZGVyX3JlYWQocmVxdWVzdCkgPT0gUEFDS0VUX1JFQURfTk9STUFMKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IHJlcXVlc3QtPmxpbmU7CisJCWNvbnN0IGNoYXIgKnA7CisKKwkJLyogcHJvY2VzcyB3YW50ICovCisJCWlmIChwYXJzZV93YW50KCZkYXRhLT53cml0ZXIsIGFyZywgd2FudF9vYmopKQorCQkJY29udGludWU7CisJCWlmIChhbGxvd19yZWZfaW5fd2FudCAmJgorCQkgICAgcGFyc2Vfd2FudF9yZWYoJmRhdGEtPndyaXRlciwgYXJnLCAmZGF0YS0+d2FudGVkX3JlZnMsCisJCQkJICAgd2FudF9vYmopKQorCQkJY29udGludWU7CisJCS8qIHByb2Nlc3MgaGF2ZSBsaW5lICovCisJCWlmIChwYXJzZV9oYXZlKGFyZywgJmRhdGEtPmhhdmVzKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHByb2Nlc3MgYXJncyBsaWtlIHRoaW4tcGFjayAqLworCQlpZiAoIXN0cmNtcChhcmcsICJ0aGluLXBhY2siKSkgeworCQkJdXNlX3RoaW5fcGFjayA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICJvZnMtZGVsdGEiKSkgeworCQkJdXNlX29mc19kZWx0YSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICJuby1wcm9ncmVzcyIpKSB7CisJCQlub19wcm9ncmVzcyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICJpbmNsdWRlLXRhZyIpKSB7CisJCQl1c2VfaW5jbHVkZV90YWcgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiZG9uZSIpKSB7CisJCQlkYXRhLT5kb25lID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2hhbGxvdyByZWxhdGVkIGFyZ3VtZW50cyAqLworCQlpZiAocHJvY2Vzc19zaGFsbG93KGFyZywgJmRhdGEtPnNoYWxsb3dzKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJvY2Vzc19kZWVwZW4oYXJnLCAmZGF0YS0+ZGVwdGgpKQorCQkJY29udGludWU7CisJCWlmIChwcm9jZXNzX2RlZXBlbl9zaW5jZShhcmcsICZkYXRhLT5kZWVwZW5fc2luY2UsCisJCQkJCSAmZGF0YS0+ZGVlcGVuX3Jldl9saXN0KSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJvY2Vzc19kZWVwZW5fbm90KGFyZywgJmRhdGEtPmRlZXBlbl9ub3QsCisJCQkJICAgICAgICZkYXRhLT5kZWVwZW5fcmV2X2xpc3QpKQorCQkJY29udGludWU7CisJCWlmICghc3RyY21wKGFyZywgImRlZXBlbi1yZWxhdGl2ZSIpKSB7CisJCQlkYXRhLT5kZWVwZW5fcmVsYXRpdmUgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoYWxsb3dfZmlsdGVyICYmIHNraXBfcHJlZml4KGFyZywgImZpbHRlciAiLCAmcCkpIHsKKwkJCWxpc3Rfb2JqZWN0c19maWx0ZXJfZGllX2lmX3BvcHVsYXRlZCgmZGF0YS0+ZmlsdGVyX29wdGlvbnMpOworCQkJcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcigmZGF0YS0+ZmlsdGVyX29wdGlvbnMsIHApOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoKGdpdF9lbnZfYm9vbCgiR0lUX1RFU1RfU0lERUJBTkRfQUxMIiwgMCkgfHwKKwkJICAgICBhbGxvd19zaWRlYmFuZF9hbGwpICYmCisJCSAgICAhc3RyY21wKGFyZywgInNpZGViYW5kLWFsbCIpKSB7CisJCQlkYXRhLT53cml0ZXIudXNlX3NpZGViYW5kID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogaWdub3JlIHVua25vd24gbGluZXMgbWF5YmU/ICovCisJCWRpZSgidW5leHBlY3RlZCBsaW5lOiAnJXMnIiwgYXJnKTsKKwl9CisKKwlpZiAocmVxdWVzdC0+c3RhdHVzICE9IFBBQ0tFVF9SRUFEX0ZMVVNIKQorCQlkaWUoXygiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgZmV0Y2ggYXJndW1lbnRzIikpOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfaGF2ZXMoc3RydWN0IG9pZF9hcnJheSAqaGF2ZXMsIHN0cnVjdCBvaWRfYXJyYXkgKmNvbW1vbiwKKwkJCSBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpoYXZlX29iaikKK3sKKwlpbnQgaTsKKworCS8qIFByb2Nlc3MgaGF2ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaGF2ZXMtPm5yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkID0gJmhhdmVzLT5vaWRbaV07CisJCXN0cnVjdCBvYmplY3QgKm87CisJCWludCB3ZV9rbmV3X3RoZXlfaGF2ZSA9IDA7CisKKwkJaWYgKCFoYXNfb2JqZWN0X2ZpbGUob2lkKSkKKwkJCWNvbnRpbnVlOworCisJCW9pZF9hcnJheV9hcHBlbmQoY29tbW9uLCBvaWQpOworCisJCW8gPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJCWlmICghbykKKwkJCWRpZSgib29wcyAoJXMpIiwgb2lkX3RvX2hleChvaWQpKTsKKwkJaWYgKG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvOworCQkJaWYgKG8tPmZsYWdzICYgVEhFWV9IQVZFKQorCQkJCXdlX2tuZXdfdGhleV9oYXZlID0gMTsKKwkJCWVsc2UKKwkJCQlvLT5mbGFncyB8PSBUSEVZX0hBVkU7CisJCQlpZiAoIW9sZGVzdF9oYXZlIHx8IChjb21taXQtPmRhdGUgPCBvbGRlc3RfaGF2ZSkpCisJCQkJb2xkZXN0X2hhdmUgPSBjb21taXQtPmRhdGU7CisJCQlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisJCQkgICAgIHBhcmVudHM7CisJCQkgICAgIHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KQorCQkJCXBhcmVudHMtPml0ZW0tPm9iamVjdC5mbGFncyB8PSBUSEVZX0hBVkU7CisJCX0KKwkJaWYgKCF3ZV9rbmV3X3RoZXlfaGF2ZSkKKwkJCWFkZF9vYmplY3RfYXJyYXkobywgTlVMTCwgaGF2ZV9vYmopOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlbmRfYWNrcyhzdHJ1Y3QgcGFja2V0X3dyaXRlciAqd3JpdGVyLCBzdHJ1Y3Qgb2lkX2FycmF5ICphY2tzLAorCQkgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfYXJyYXkgKmhhdmVfb2JqLAorCQkgICAgIHN0cnVjdCBvYmplY3RfYXJyYXkgKndhbnRfb2JqKQoreworCWludCBpOworCisJcGFja2V0X3dyaXRlcl93cml0ZSh3cml0ZXIsICJhY2tub3dsZWRnbWVudHNcbiIpOworCisJLyogU2VuZCBBY2tzICovCisJaWYgKCFhY2tzLT5ucikKKwkJcGFja2V0X3dyaXRlcl93cml0ZSh3cml0ZXIsICJOQUtcbiIpOworCisJZm9yIChpID0gMDsgaSA8IGFja3MtPm5yOyBpKyspIHsKKwkJcGFja2V0X3dyaXRlcl93cml0ZSh3cml0ZXIsICJBQ0sgJXNcbiIsCisJCQkJICAgIG9pZF90b19oZXgoJmFja3MtPm9pZFtpXSkpOworCX0KKworCWlmIChva190b19naXZlX3VwKGhhdmVfb2JqLCB3YW50X29iaikpIHsKKwkJLyogU2VuZCBSZWFkeSAqLworCQlwYWNrZXRfd3JpdGVyX3dyaXRlKHdyaXRlciwgInJlYWR5XG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19oYXZlc19hbmRfc2VuZF9hY2tzKHN0cnVjdCB1cGxvYWRfcGFja19kYXRhICpkYXRhLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpoYXZlX29iaiwKKwkJCQkgICAgICAgc3RydWN0IG9iamVjdF9hcnJheSAqd2FudF9vYmopCit7CisJc3RydWN0IG9pZF9hcnJheSBjb21tb24gPSBPSURfQVJSQVlfSU5JVDsKKwlpbnQgcmV0ID0gMDsKKworCXByb2Nlc3NfaGF2ZXMoJmRhdGEtPmhhdmVzLCAmY29tbW9uLCBoYXZlX29iaik7CisJaWYgKGRhdGEtPmRvbmUpIHsKKwkJcmV0ID0gMTsKKwl9IGVsc2UgaWYgKHNlbmRfYWNrcygmZGF0YS0+d3JpdGVyLCAmY29tbW9uLCBoYXZlX29iaiwgd2FudF9vYmopKSB7CisJCXBhY2tldF93cml0ZXJfZGVsaW0oJmRhdGEtPndyaXRlcik7CisJCXJldCA9IDE7CisJfSBlbHNlIHsKKwkJLyogQWRkIEZsdXNoICovCisJCXBhY2tldF93cml0ZXJfZmx1c2goJmRhdGEtPndyaXRlcik7CisJCXJldCA9IDA7CisJfQorCisJb2lkX2FycmF5X2NsZWFyKCZkYXRhLT5oYXZlcyk7CisJb2lkX2FycmF5X2NsZWFyKCZjb21tb24pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfd2FudGVkX3JlZl9pbmZvKHN0cnVjdCB1cGxvYWRfcGFja19kYXRhICpkYXRhKQoreworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJaWYgKCFkYXRhLT53YW50ZWRfcmVmcy5ucikKKwkJcmV0dXJuOworCisJcGFja2V0X3dyaXRlcl93cml0ZSgmZGF0YS0+d3JpdGVyLCAid2FudGVkLXJlZnNcbiIpOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZGF0YS0+d2FudGVkX3JlZnMpIHsKKwkJcGFja2V0X3dyaXRlcl93cml0ZSgmZGF0YS0+d3JpdGVyLCAiJXMgJXNcbiIsCisJCQkJICAgIG9pZF90b19oZXgoaXRlbS0+dXRpbCksCisJCQkJICAgIGl0ZW0tPnN0cmluZyk7CisJfQorCisJcGFja2V0X3dyaXRlcl9kZWxpbSgmZGF0YS0+d3JpdGVyKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9zaGFsbG93X2luZm8oc3RydWN0IHVwbG9hZF9wYWNrX2RhdGEgKmRhdGEsCisJCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICp3YW50X29iaikKK3sKKwkvKiBObyBzaGFsbG93IGluZm8gbmVlZHMgdG8gYmUgc2VudCAqLworCWlmICghZGF0YS0+ZGVwdGggJiYgIWRhdGEtPmRlZXBlbl9yZXZfbGlzdCAmJiAhZGF0YS0+c2hhbGxvd3MubnIgJiYKKwkgICAgIWlzX3JlcG9zaXRvcnlfc2hhbGxvdyh0aGVfcmVwb3NpdG9yeSkpCisJCXJldHVybjsKKworCXBhY2tldF93cml0ZXJfd3JpdGUoJmRhdGEtPndyaXRlciwgInNoYWxsb3ctaW5mb1xuIik7CisKKwlpZiAoIXNlbmRfc2hhbGxvd19saXN0KCZkYXRhLT53cml0ZXIsIGRhdGEtPmRlcHRoLAorCQkJICAgICAgIGRhdGEtPmRlZXBlbl9yZXZfbGlzdCwKKwkJCSAgICAgICBkYXRhLT5kZWVwZW5fc2luY2UsICZkYXRhLT5kZWVwZW5fbm90LAorCQkJICAgICAgIGRhdGEtPmRlZXBlbl9yZWxhdGl2ZSwKKwkJCSAgICAgICAmZGF0YS0+c2hhbGxvd3MsIHdhbnRfb2JqKSAmJgorCSAgICBpc19yZXBvc2l0b3J5X3NoYWxsb3codGhlX3JlcG9zaXRvcnkpKQorCQlkZWVwZW4oJmRhdGEtPndyaXRlciwgSU5GSU5JVEVfREVQVEgsIGRhdGEtPmRlZXBlbl9yZWxhdGl2ZSwKKwkJICAgICAgICZkYXRhLT5zaGFsbG93cywgd2FudF9vYmopOworCisJcGFja2V0X2RlbGltKDEpOworfQorCitlbnVtIGZldGNoX3N0YXRlIHsKKwlGRVRDSF9QUk9DRVNTX0FSR1MgPSAwLAorCUZFVENIX1NFTkRfQUNLUywKKwlGRVRDSF9TRU5EX1BBQ0ssCisJRkVUQ0hfRE9ORSwKK307CisKK2ludCB1cGxvYWRfcGFja192MihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGFyZ3ZfYXJyYXkgKmtleXMsCisJCSAgIHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZXF1ZXN0KQoreworCWVudW0gZmV0Y2hfc3RhdGUgc3RhdGUgPSBGRVRDSF9QUk9DRVNTX0FSR1M7CisJc3RydWN0IHVwbG9hZF9wYWNrX2RhdGEgZGF0YTsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IGhhdmVfb2JqID0gT0JKRUNUX0FSUkFZX0lOSVQ7CisJc3RydWN0IG9iamVjdF9hcnJheSB3YW50X29iaiA9IE9CSkVDVF9BUlJBWV9JTklUOworCisJY2xlYXJfb2JqZWN0X2ZsYWdzKEFMTF9GTEFHUyk7CisKKwlnaXRfY29uZmlnKHVwbG9hZF9wYWNrX2NvbmZpZywgTlVMTCk7CisKKwl1cGxvYWRfcGFja19kYXRhX2luaXQoJmRhdGEpOworCXVzZV9zaWRlYmFuZCA9IExBUkdFX1BBQ0tFVF9NQVg7CisKKwl3aGlsZSAoc3RhdGUgIT0gRkVUQ0hfRE9ORSkgeworCQlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgRkVUQ0hfUFJPQ0VTU19BUkdTOgorCQkJcHJvY2Vzc19hcmdzKHJlcXVlc3QsICZkYXRhLCAmd2FudF9vYmopOworCisJCQlpZiAoIXdhbnRfb2JqLm5yKSB7CisJCQkJLyoKKwkJCQkgKiBSZXF1ZXN0IGRpZG4ndCBjb250YWluIGFueSAnd2FudCcgbGluZXMsCisJCQkJICogZ3Vlc3MgdGhleSBkaWRuJ3Qgd2FudCBhbnl0aGluZy4KKwkJCQkgKi8KKwkJCQlzdGF0ZSA9IEZFVENIX0RPTkU7CisJCQl9IGVsc2UgaWYgKGRhdGEuaGF2ZXMubnIpIHsKKwkJCQkvKgorCQkJCSAqIFJlcXVlc3QgaGFkICdoYXZlJyBsaW5lcywgc28gbGV0cyBBQ0sgdGhlbS4KKwkJCQkgKi8KKwkJCQlzdGF0ZSA9IEZFVENIX1NFTkRfQUNLUzsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBSZXF1ZXN0IGhhZCAnd2FudCdzIGJ1dCBubyAnaGF2ZSdzIHNvIHdlIGNhbgorCQkJCSAqIGltbWVkaWV0bHkgZ28gdG8gY29uc3RydWN0IGFuZCBzZW5kIGEgcGFjay4KKwkJCQkgKi8KKwkJCQlzdGF0ZSA9IEZFVENIX1NFTkRfUEFDSzsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEZFVENIX1NFTkRfQUNLUzoKKwkJCWlmIChwcm9jZXNzX2hhdmVzX2FuZF9zZW5kX2Fja3MoJmRhdGEsICZoYXZlX29iaiwKKwkJCQkJCQkmd2FudF9vYmopKQorCQkJCXN0YXRlID0gRkVUQ0hfU0VORF9QQUNLOworCQkJZWxzZQorCQkJCXN0YXRlID0gRkVUQ0hfRE9ORTsKKwkJCWJyZWFrOworCQljYXNlIEZFVENIX1NFTkRfUEFDSzoKKwkJCXNlbmRfd2FudGVkX3JlZl9pbmZvKCZkYXRhKTsKKwkJCXNlbmRfc2hhbGxvd19pbmZvKCZkYXRhLCAmd2FudF9vYmopOworCisJCQlwYWNrZXRfd3JpdGVyX3dyaXRlKCZkYXRhLndyaXRlciwgInBhY2tmaWxlXG4iKTsKKwkJCWNyZWF0ZV9wYWNrX2ZpbGUoJmhhdmVfb2JqLCAmd2FudF9vYmosICZkYXRhLmZpbHRlcl9vcHRpb25zKTsKKwkJCXN0YXRlID0gRkVUQ0hfRE9ORTsKKwkJCWJyZWFrOworCQljYXNlIEZFVENIX0RPTkU6CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCXVwbG9hZF9wYWNrX2RhdGFfY2xlYXIoJmRhdGEpOworCW9iamVjdF9hcnJheV9jbGVhcigmaGF2ZV9vYmopOworCW9iamVjdF9hcnJheV9jbGVhcigmd2FudF9vYmopOworCXJldHVybiAwOworfQorCitpbnQgdXBsb2FkX3BhY2tfYWR2ZXJ0aXNlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICBzdHJ1Y3Qgc3RyYnVmICp2YWx1ZSkKK3sKKwlpZiAodmFsdWUpIHsKKwkJaW50IGFsbG93X2ZpbHRlcl92YWx1ZTsKKwkJaW50IGFsbG93X3JlZl9pbl93YW50OworCQlpbnQgYWxsb3dfc2lkZWJhbmRfYWxsX3ZhbHVlOworCisJCXN0cmJ1Zl9hZGRzdHIodmFsdWUsICJzaGFsbG93Iik7CisKKwkJaWYgKCFyZXBvX2NvbmZpZ19nZXRfYm9vbCh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJICJ1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIiwKKwkJCQkJICZhbGxvd19maWx0ZXJfdmFsdWUpICYmCisJCSAgICBhbGxvd19maWx0ZXJfdmFsdWUpCisJCQlzdHJidWZfYWRkc3RyKHZhbHVlLCAiIGZpbHRlciIpOworCisJCWlmICghcmVwb19jb25maWdfZ2V0X2Jvb2wodGhlX3JlcG9zaXRvcnksCisJCQkJCSAidXBsb2FkcGFjay5hbGxvd3JlZmlud2FudCIsCisJCQkJCSAmYWxsb3dfcmVmX2luX3dhbnQpICYmCisJCSAgICBhbGxvd19yZWZfaW5fd2FudCkKKwkJCXN0cmJ1Zl9hZGRzdHIodmFsdWUsICIgcmVmLWluLXdhbnQiKTsKKworCQlpZiAoZ2l0X2Vudl9ib29sKCJHSVRfVEVTVF9TSURFQkFORF9BTEwiLCAwKSB8fAorCQkgICAgKCFyZXBvX2NvbmZpZ19nZXRfYm9vbCh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJICAgInVwbG9hZHBhY2suYWxsb3dzaWRlYmFuZGFsbCIsCisJCQkJCSAgICZhbGxvd19zaWRlYmFuZF9hbGxfdmFsdWUpICYmCisJCSAgICAgYWxsb3dfc2lkZWJhbmRfYWxsX3ZhbHVlKSkKKwkJCXN0cmJ1Zl9hZGRzdHIodmFsdWUsICIgc2lkZWJhbmQtYWxsIik7CisJfQorCisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS91cGxvYWQtcGFjay5oIGIvdXBsb2FkLXBhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmFmZTE2Ci0tLSAvZGV2L251bGwKKysrIGIvdXBsb2FkLXBhY2suaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIFVQTE9BRF9QQUNLX0gKKyNkZWZpbmUgVVBMT0FEX1BBQ0tfSAorCitzdHJ1Y3QgdXBsb2FkX3BhY2tfb3B0aW9ucyB7CisJaW50IHN0YXRlbGVzc19ycGM7CisJaW50IGFkdmVydGlzZV9yZWZzOworCXVuc2lnbmVkIGludCB0aW1lb3V0OworCWludCBkYWVtb25fbW9kZTsKK307CisKK3ZvaWQgdXBsb2FkX3BhY2soc3RydWN0IHVwbG9hZF9wYWNrX29wdGlvbnMgKm9wdGlvbnMpOworCitzdHJ1Y3QgcmVwb3NpdG9yeTsKK3N0cnVjdCBhcmd2X2FycmF5Oworc3RydWN0IHBhY2tldF9yZWFkZXI7CitpbnQgdXBsb2FkX3BhY2tfdjIoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBhcmd2X2FycmF5ICprZXlzLAorCQkgICBzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVxdWVzdCk7CisKK3N0cnVjdCBzdHJidWY7CitpbnQgdXBsb2FkX3BhY2tfYWR2ZXJ0aXNlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICBzdHJ1Y3Qgc3RyYnVmICp2YWx1ZSk7CisKKyNlbmRpZiAvKiBVUExPQURfUEFDS19IICovCmRpZmYgLS1naXQgYS91cmwuYyBiL3VybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNGJkNjAKLS0tIC9kZXYvbnVsbAorKysgYi91cmwuYwpAQCAtMCwwICsxLDExOSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidXJsLmgiCisKK2ludCBpc191cmxzY2hlbWVjaGFyKGludCBmaXJzdF9mbGFnLCBpbnQgY2gpCit7CisJLyoKKwkgKiBUaGUgc2V0IG9mIHZhbGlkIFVSTCBzY2hlbWVzLCBhcyBwZXIgU1RENjYgKFJGQzM5ODYpIGlzCisJICogJ1tBLVphLXpdW0EtWmEtejAtOSsuLV0qJy4gQnV0IHVzZSBzbGlnaHRseSBsb29zZXIgY2hlY2sKKwkgKiBvZiAnW0EtWmEtejAtOV1bQS1aYS16MC05Ky4tXSonIGJlY2F1c2UgZWFybGllciB2ZXJzaW9uCisJICogb2YgY2hlY2sgdXNlZCAnW0EtWmEtejAtOV0rJyBzbyBub3QgdG8gYnJlYWsgYW55IHJlbW90ZQorCSAqIGhlbHBlcnMuCisJICovCisJaW50IGFscGhhbnVtZXJpYywgc3BlY2lhbDsKKwlhbHBoYW51bWVyaWMgPSBjaCA+IDAgJiYgaXNhbG51bShjaCk7CisJc3BlY2lhbCA9IGNoID09ICcrJyB8fCBjaCA9PSAnLScgfHwgY2ggPT0gJy4nOworCXJldHVybiBhbHBoYW51bWVyaWMgfHwgKCFmaXJzdF9mbGFnICYmIHNwZWNpYWwpOworfQorCitpbnQgaXNfdXJsKGNvbnN0IGNoYXIgKnVybCkKK3sKKwkvKiBJcyAic2NoZW1lIiBwYXJ0IHJlYXNvbmFibGU/ICovCisJaWYgKCF1cmwgfHwgIWlzX3VybHNjaGVtZWNoYXIoMSwgKnVybCsrKSkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKCp1cmwgJiYgKnVybCAhPSAnOicpIHsKKwkJaWYgKCFpc191cmxzY2hlbWVjaGFyKDAsICp1cmwrKykpCisJCQlyZXR1cm4gMDsKKwl9CisJLyogV2UndmUgc2VlbiAic2NoZW1lIjsgd2Ugd2FudCBjb2xvbi1zbGFzaC1zbGFzaCAqLworCXJldHVybiAodXJsWzBdID09ICc6JyAmJiB1cmxbMV0gPT0gJy8nICYmIHVybFsyXSA9PSAnLycpOworfQorCitzdGF0aWMgY2hhciAqdXJsX2RlY29kZV9pbnRlcm5hbChjb25zdCBjaGFyICoqcXVlcnksIGludCBsZW4sCisJCQkJIGNvbnN0IGNoYXIgKnN0b3BfYXQsIHN0cnVjdCBzdHJidWYgKm91dCwKKwkJCQkgaW50IGRlY29kZV9wbHVzKQoreworCWNvbnN0IGNoYXIgKnEgPSAqcXVlcnk7CisKKwl3aGlsZSAobGVuKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9ICpxOworCisJCWlmICghYykKKwkJCWJyZWFrOworCQlpZiAoc3RvcF9hdCAmJiBzdHJjaHIoc3RvcF9hdCwgYykpIHsKKwkJCXErKzsKKwkJCWxlbi0tOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoYyA9PSAnJScgJiYgKGxlbiA8IDAgfHwgbGVuID49IDMpKSB7CisJCQlpbnQgdmFsID0gaGV4MmNocihxICsgMSk7CisJCQlpZiAoMCA8IHZhbCkgeworCQkJCXN0cmJ1Zl9hZGRjaChvdXQsIHZhbCk7CisJCQkJcSArPSAzOworCQkJCWxlbiAtPSAzOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaWYgKGRlY29kZV9wbHVzICYmIGMgPT0gJysnKQorCQkJc3RyYnVmX2FkZGNoKG91dCwgJyAnKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKG91dCwgYyk7CisJCXErKzsKKwkJbGVuLS07CisJfQorCSpxdWVyeSA9IHE7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2gob3V0LCBOVUxMKTsKK30KKworY2hhciAqdXJsX2RlY29kZShjb25zdCBjaGFyICp1cmwpCit7CisJcmV0dXJuIHVybF9kZWNvZGVfbWVtKHVybCwgc3RybGVuKHVybCkpOworfQorCitjaGFyICp1cmxfZGVjb2RlX21lbShjb25zdCBjaGFyICp1cmwsIGludCBsZW4pCit7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpjb2xvbiA9IG1lbWNocih1cmwsICc6JywgbGVuKTsKKworCS8qIFNraXAgcHJvdG9jb2wgcGFydCBpZiBwcmVzZW50ICovCisJaWYgKGNvbG9uICYmIHVybCA8IGNvbG9uKSB7CisJCXN0cmJ1Zl9hZGQoJm91dCwgdXJsLCBjb2xvbiAtIHVybCk7CisJCWxlbiAtPSBjb2xvbiAtIHVybDsKKwkJdXJsID0gY29sb247CisJfQorCXJldHVybiB1cmxfZGVjb2RlX2ludGVybmFsKCZ1cmwsIGxlbiwgTlVMTCwgJm91dCwgMCk7Cit9CisKK2NoYXIgKnVybF9wZXJjZW50X2RlY29kZShjb25zdCBjaGFyICplbmNvZGVkKQoreworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJcmV0dXJuIHVybF9kZWNvZGVfaW50ZXJuYWwoJmVuY29kZWQsIHN0cmxlbihlbmNvZGVkKSwgTlVMTCwgJm91dCwgMCk7Cit9CisKK2NoYXIgKnVybF9kZWNvZGVfcGFyYW1ldGVyX25hbWUoY29uc3QgY2hhciAqKnF1ZXJ5KQoreworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJcmV0dXJuIHVybF9kZWNvZGVfaW50ZXJuYWwocXVlcnksIC0xLCAiJj0iLCAmb3V0LCAxKTsKK30KKworY2hhciAqdXJsX2RlY29kZV9wYXJhbWV0ZXJfdmFsdWUoY29uc3QgY2hhciAqKnF1ZXJ5KQoreworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJcmV0dXJuIHVybF9kZWNvZGVfaW50ZXJuYWwocXVlcnksIC0xLCAiJiIsICZvdXQsIDEpOworfQorCit2b2lkIGVuZF91cmxfd2l0aF9zbGFzaChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnVybCkKK3sKKwlzdHJidWZfYWRkc3RyKGJ1ZiwgdXJsKTsKKwlzdHJidWZfY29tcGxldGUoYnVmLCAnLycpOworfQorCit2b2lkIHN0cl9lbmRfdXJsX3dpdGhfc2xhc2goY29uc3QgY2hhciAqdXJsLCBjaGFyICoqZGVzdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCB1cmwpOworCWZyZWUoKmRlc3QpOworCSpkZXN0ID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL3VybC5oIGIvdXJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEyN2MzNAotLS0gL2Rldi9udWxsCisrKyBiL3VybC5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgVVJMX0gKKyNkZWZpbmUgVVJMX0gKKworc3RydWN0IHN0cmJ1ZjsKKworaW50IGlzX3VybChjb25zdCBjaGFyICp1cmwpOworaW50IGlzX3VybHNjaGVtZWNoYXIoaW50IGZpcnN0X2ZsYWcsIGludCBjaCk7CitjaGFyICp1cmxfZGVjb2RlKGNvbnN0IGNoYXIgKnVybCk7CitjaGFyICp1cmxfZGVjb2RlX21lbShjb25zdCBjaGFyICp1cmwsIGludCBsZW4pOworCisvKgorICogU2ltaWxhciB0byB0aGUgdXJsX2RlY29kZV97LG1lbX0gbWV0aG9kcyBhYm92ZSwgYnV0IGRvZXNuJ3QgYXNzdW1lIHRoZXJlCisgKiBpcyBhIHNjaGVtZSBmb2xsb3dlZCBieSBhIDogYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcuIEluc3RlYWQsICUtc2VxdWVuY2VzCisgKiBiZWZvcmUgYW55IDogYXJlIGFsc28gcGFyc2VkLgorICovCitjaGFyICp1cmxfcGVyY2VudF9kZWNvZGUoY29uc3QgY2hhciAqZW5jb2RlZCk7CisKK2NoYXIgKnVybF9kZWNvZGVfcGFyYW1ldGVyX25hbWUoY29uc3QgY2hhciAqKnF1ZXJ5KTsKK2NoYXIgKnVybF9kZWNvZGVfcGFyYW1ldGVyX3ZhbHVlKGNvbnN0IGNoYXIgKipxdWVyeSk7CisKK3ZvaWQgZW5kX3VybF93aXRoX3NsYXNoKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqdXJsKTsKK3ZvaWQgc3RyX2VuZF91cmxfd2l0aF9zbGFzaChjb25zdCBjaGFyICp1cmwsIGNoYXIgKipkZXN0KTsKKworI2VuZGlmIC8qIFVSTF9IICovCmRpZmYgLS1naXQgYS91cmxtYXRjaC5jIGIvdXJsbWF0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2EyY2NkCi0tLSAvZGV2L251bGwKKysrIGIvdXJsbWF0Y2guYwpAQCAtMCwwICsxLDYxMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidXJsbWF0Y2guaCIKKworI2RlZmluZSBVUkxfQUxQSEEgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCisjZGVmaW5lIFVSTF9ESUdJVCAiMDEyMzQ1Njc4OSIKKyNkZWZpbmUgVVJMX0FMUEhBRElHSVQgVVJMX0FMUEhBIFVSTF9ESUdJVAorI2RlZmluZSBVUkxfU0NIRU1FX0NIQVJTIFVSTF9BTFBIQURJR0lUICIrLi0iCisjZGVmaW5lIFVSTF9IT1NUX0NIQVJTIFVSTF9BTFBIQURJR0lUICIuLVs6XSIgLyogSVB2NiBsaXRlcmFscyBuZWVkIFs6XSAqLworI2RlZmluZSBVUkxfVU5TQUZFX0NIQVJTICIgPD5cIiV7fXxcXF5gIiAvKiBwbHVzIDB4MDAtMHgxRiwweDdGLTB4RkYgKi8KKyNkZWZpbmUgVVJMX0dFTl9SRVNFUlZFRCAiOi8/I1tdQCIKKyNkZWZpbmUgVVJMX1NVQl9SRVNFUlZFRCAiISQmJygpKissOz0iCisjZGVmaW5lIFVSTF9SRVNFUlZFRCBVUkxfR0VOX1JFU0VSVkVEIFVSTF9TVUJfUkVTRVJWRUQgLyogb25seSBhbGxvd2VkIGRlbGltcyAqLworCitzdGF0aWMgaW50IGFwcGVuZF9ub3JtYWxpemVkX2VzY2FwZXMoc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQkJCSAgICAgY29uc3QgY2hhciAqZnJvbSwKKwkJCQkgICAgIHNpemVfdCBmcm9tX2xlbiwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmVzY19leHRyYSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmVzY19vaykKK3sKKwkvKgorCSAqIEFwcGVuZCB0byBzdHJidWYgJ2J1ZicgY2hhcmFjdGVycyBmcm9tIHN0cmluZyAnZnJvbScgd2l0aCBsZW5ndGgKKwkgKiAnZnJvbV9sZW4nIHdoaWxlIHVuZXNjYXBpbmcgY2hhcmFjdGVycyB0aGF0IGRvIG5vdCBuZWVkIHRvIGJlIGVzY2FwZWQKKwkgKiBhbmQgZXNjYXBpbmcgY2hhcmFjdGVycyB0aGF0IGRvLiAgVGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGVzY2FwZQorCSAqICh0aGUgY29tcGxlbWVudCBvZiB3aGljaCBpcyB1bmVzY2FwZWQpIHN0YXJ0cyBvdXQgYXMgdGhlIFJGQyAzOTg2CisJICogdW5zYWZlIGNoYXJhY3RlcnMgKDB4MDAtMHgxRiwweDdGLTB4RkYsIiA8PlwiIyV7fXxcXF5gIikuICBJZgorCSAqICdlc2NfZXh0cmEnIGlzIG5vdCBOVUxMLCB0aG9zZSBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgd2lsbCBhbHNvIGFsd2F5cworCSAqIGJlIGVzY2FwZWQuICBJZiAnZXNjX29rJyBpcyBub3QgTlVMTCwgdGhvc2UgY2hhcmFjdGVycyB3aWxsIGJlIGxlZnQKKwkgKiBlc2NhcGVkIGlmIGZvdW5kIHRoYXQgd2F5LCBidXQgd2lsbCBub3QgYmUgdW5lc2NhcGVkIG90aGVyd2lzZSAodXNlZAorCSAqIGZvciBkZWxpbWl0ZXJzKS4gIElmIGEgJS1lc2NhcGUgc2VxdWVuY2UgaXMgZW5jb3VudGVyZWQgdGhhdCBpcyBub3QKKwkgKiBmb2xsb3dlZCBieSAyIGhleGFkZWNpbWFsIGRpZ2l0cywgdGhlIHNlcXVlbmNlIGlzIGludmFsaWQgYW5kCisJICogZmFsc2UgKDApIHdpbGwgYmUgcmV0dXJuZWQuICBPdGhlcndpc2UgdHJ1ZSAoMSkgd2lsbCBiZSByZXR1cm5lZCBmb3IKKwkgKiBzdWNjZXNzLgorCSAqCisJICogTm90ZSB0aGF0IGFsbCAlLWVzY2FwZSBzZXF1ZW5jZXMgd2lsbCBiZSBub3JtYWxpemVkIHRvIFVQUEVSQ0FTRQorCSAqIGFzIGluZGljYXRlZCBpbiBSRkMgMzk4Ni4gIFVubGVzcyBpbmNsdWRlZCBpbiBlc2NfZXh0cmEgb3IgZXNjX29rCisJICogYWxwaGFudW1lcmljcyBhbmQgIi0uX34iIHdpbGwgYWx3YXlzIGJlIHVuZXNjYXBlZCBhcyBwZXIgUkZDIDM5ODYuCisJICovCisKKwl3aGlsZSAoZnJvbV9sZW4pIHsKKwkJaW50IGNoID0gKmZyb20rKzsKKwkJaW50IHdhc19lc2MgPSAwOworCisJCWZyb21fbGVuLS07CisJCWlmIChjaCA9PSAnJScpIHsKKwkJCWlmIChmcm9tX2xlbiA8IDIpCisJCQkJcmV0dXJuIDA7CisJCQljaCA9IGhleDJjaHIoZnJvbSk7CisJCQlpZiAoY2ggPCAwKQorCQkJCXJldHVybiAwOworCQkJZnJvbSArPSAyOworCQkJZnJvbV9sZW4gLT0gMjsKKwkJCXdhc19lc2MgPSAxOworCQl9CisJCWlmICgodW5zaWduZWQgY2hhciljaCA8PSAweDFGIHx8ICh1bnNpZ25lZCBjaGFyKWNoID49IDB4N0YgfHwKKwkJICAgIHN0cmNocihVUkxfVU5TQUZFX0NIQVJTLCBjaCkgfHwKKwkJICAgIChlc2NfZXh0cmEgJiYgc3RyY2hyKGVzY19leHRyYSwgY2gpKSB8fAorCQkgICAgKHdhc19lc2MgJiYgc3RyY2hyKGVzY19vaywgY2gpKSkKKwkJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUlJTAyWCIsICh1bnNpZ25lZCBjaGFyKWNoKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgY2gpOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZW5kX29mX3Rva2VuKGNvbnN0IGNoYXIgKnMsIGludCBjLCBzaXplX3QgbikKK3sKKwljb25zdCBjaGFyICpuZXh0ID0gbWVtY2hyKHMsIGMsIG4pOworCWlmICghbmV4dCkKKwkJbmV4dCA9IHMgKyBuOworCXJldHVybiBuZXh0OworfQorCitzdGF0aWMgaW50IG1hdGNoX2hvc3QoY29uc3Qgc3RydWN0IHVybF9pbmZvICp1cmxfaW5mbywKKwkJICAgICAgY29uc3Qgc3RydWN0IHVybF9pbmZvICpwYXR0ZXJuX2luZm8pCit7CisJY29uc3QgY2hhciAqdXJsID0gdXJsX2luZm8tPnVybCArIHVybF9pbmZvLT5ob3N0X29mZjsKKwljb25zdCBjaGFyICpwYXQgPSBwYXR0ZXJuX2luZm8tPnVybCArIHBhdHRlcm5faW5mby0+aG9zdF9vZmY7CisJaW50IHVybF9sZW4gPSB1cmxfaW5mby0+aG9zdF9sZW47CisJaW50IHBhdF9sZW4gPSBwYXR0ZXJuX2luZm8tPmhvc3RfbGVuOworCisJd2hpbGUgKHVybF9sZW4gJiYgcGF0X2xlbikgeworCQljb25zdCBjaGFyICp1cmxfbmV4dCA9IGVuZF9vZl90b2tlbih1cmwsICcuJywgdXJsX2xlbik7CisJCWNvbnN0IGNoYXIgKnBhdF9uZXh0ID0gZW5kX29mX3Rva2VuKHBhdCwgJy4nLCBwYXRfbGVuKTsKKworCQlpZiAocGF0X25leHQgPT0gcGF0ICsgMSAmJiBwYXRbMF0gPT0gJyonKQorCQkJLyogd2lsZGNhcmQgbWF0Y2hlcyBhbnl0aGluZyAqLworCQkJOworCQllbHNlIGlmICgocGF0X25leHQgLSBwYXQpID09ICh1cmxfbmV4dCAtIHVybCkgJiYKKwkJCSAhbWVtY21wKHVybCwgcGF0LCB1cmxfbmV4dCAtIHVybCkpCisJCQkvKiB0aGUgY29tcG9uZW50cyBhcmUgdGhlIHNhbWUgKi8KKwkJCTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7IC8qIGZvdW5kIGFuIHVubWF0Y2ggKi8KKworCQlpZiAodXJsX25leHQgPCB1cmwgKyB1cmxfbGVuKQorCQkJdXJsX25leHQrKzsKKwkJdXJsX2xlbiAtPSB1cmxfbmV4dCAtIHVybDsKKwkJdXJsID0gdXJsX25leHQ7CisJCWlmIChwYXRfbmV4dCA8IHBhdCArIHBhdF9sZW4pCisJCQlwYXRfbmV4dCsrOworCQlwYXRfbGVuIC09IHBhdF9uZXh0IC0gcGF0OworCQlwYXQgPSBwYXRfbmV4dDsKKwl9CisKKwlyZXR1cm4gKCF1cmxfbGVuICYmICFwYXRfbGVuKTsKK30KKworc3RhdGljIGNoYXIgKnVybF9ub3JtYWxpemVfMShjb25zdCBjaGFyICp1cmwsIHN0cnVjdCB1cmxfaW5mbyAqb3V0X2luZm8sIGNoYXIgYWxsb3dfZ2xvYnMpCit7CisJLyoKKwkgKiBOb3JtYWxpemUgTlVMLXRlcm1pbmF0ZWQgdXJsIHVzaW5nIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisJICoKKwkgKiAxLiBDYXNlLWluc2Vuc2l0aXZlIHBhcnRzIG9mIHVybCB3aWxsIGJlIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlCisJICogMi4gJS1lbmNvZGVkIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QgbmVlZCB0byBiZSB3aWxsIGJlIHVuZW5jb2RlZAorCSAqIDMuIENoYXJhY3RlcnMgdGhhdCBhcmUgbm90ICUtZW5jb2RlZCBhbmQgbXVzdCBiZSB3aWxsIGJlIGVuY29kZWQKKwkgKiA0LiBBbGwgJS1lbmNvZGluZ3Mgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdXBwZXIgY2FzZSBoZXhhZGVjaW1hbAorCSAqIDUuIExlYWRpbmcgMHMgYXJlIHJlbW92ZWQgZnJvbSBwb3J0IG51bWJlcnMKKwkgKiA2LiBJZiB0aGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgc2NoZW1lIGlzIGdpdmVuIGl0IHdpbGwgYmUgcmVtb3ZlZAorCSAqIDcuIEEgcGF0aCBwYXJ0IChpbmNsdWRpbmcgZW1wdHkpIG5vdCBzdGFydGluZyB3aXRoICcvJyBoYXMgb25lIGFkZGVkCisJICogOC4gQW55IGRvdCBzZWdtZW50cyAoLiBvciAuLikgaW4gdGhlIHBhdGggYXJlIHJlc29sdmVkIGFuZCByZW1vdmVkCisJICogOS4gSVB2NiBob3N0IGxpdGVyYWxzIGFyZSBhbGxvd2VkIChidXQgbm90IG5vcm1hbGl6ZWQgb3IgdmFsaWRhdGVkKQorCSAqCisJICogVGhlIHJ1bGVzIGFyZSBiYXNlZCBvbiBpbmZvcm1hdGlvbiBpbiBSRkMgMzk4Ni4KKwkgKgorCSAqIFBsZWFzZSBub3RlIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgYSBmdWxsIFVSTCBpbmNsdWRpbmcgYSBzY2hlbWUKKwkgKiBhbmQgaG9zdCBwYXJ0IChleGNlcHQgZm9yIGZpbGU6IFVSTHMgd2hpY2ggbWF5IGhhdmUgYW4gZW1wdHkgaG9zdCkuCisJICoKKwkgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyB0aGF0IG11c3QgYmUgZnJlZWQKKwkgKiBvciBOVUxMIGlmIHRoZSB1cmwgaXMgbm90IHZhbGlkLgorCSAqCisJICogSWYgb3V0X2luZm8gaXMgbm9uLU5VTEwsIHRoZSB1cmwgYW5kIGVyciBmaWVsZHMgdGhlcmVpbiB3aWxsIGFsd2F5cworCSAqIGJlIHNldC4gIElmIGEgbm9uLU5VTEwgdmFsdWUgaXMgcmV0dXJuZWQsIGl0IHdpbGwgYmUgc3RvcmVkIGluCisJICogb3V0X2luZm8tPnVybCBhcyB3ZWxsLCBvdXRfaW5mby0+ZXJyIHdpbGwgYmUgc2V0IHRvIE5VTEwgYW5kIHRoZQorCSAqIG90aGVyIGZpZWxkcyBvZiAqb3V0X2luZm8gd2lsbCBhbHNvIGJlIGZpbGxlZCBpbi4gIElmIGEgTlVMTCB2YWx1ZQorCSAqIGlzIHJldHVybmVkLCBOVUxMIHdpbGwgYmUgc3RvcmVkIGluIG91dF9pbmZvLT51cmwgYW5kIG91dF9pbmZvLT5lcnIKKwkgKiB3aWxsIGJlIHNldCB0byBhIGJyaWVmLCB0cmFuc2xhdGVkLCBlcnJvciBtZXNzYWdlLCBidXQgbm8gb3RoZXIKKwkgKiBmaWVsZHMgd2lsbCBiZSBmaWxsZWQgaW4uCisJICoKKwkgKiBUaGlzIGlzIE5PVCBhIFVSTCB2YWxpZGF0aW9uIGZ1bmN0aW9uLiAgRnVsbCBVUkwgdmFsaWRhdGlvbiBpcyBOT1QKKwkgKiBwZXJmb3JtZWQuICBTb21lIGludmFsaWQgaG9zdCBuYW1lcyBhcmUgcGFzc2VkIHRocm91Z2ggdGhpcyBmdW5jdGlvbgorCSAqIHVuZGV0ZWN0ZWQuICBIb3dldmVyLCBtb3N0IGFsbCBvdGhlciBwcm9ibGVtcyB0aGF0IG1ha2UgYSBVUkwgaW52YWxpZAorCSAqIHdpbGwgYmUgZGV0ZWN0ZWQgKGluY2x1ZGluZyBhIG1pc3NpbmcgaG9zdCBmb3Igbm9uIGZpbGU6IFVSTHMpLgorCSAqLworCisJc2l6ZV90IHVybF9sZW4gPSBzdHJsZW4odXJsKTsKKwlzdHJ1Y3Qgc3RyYnVmIG5vcm07CisJc2l6ZV90IHNwYW5uZWQ7CisJc2l6ZV90IHNjaGVtZV9sZW4sIHVzZXJfb2ZmPTAsIHVzZXJfbGVuPTAsIHBhc3N3ZF9vZmY9MCwgcGFzc3dkX2xlbj0wOworCXNpemVfdCBob3N0X29mZj0wLCBob3N0X2xlbj0wLCBwb3J0X29mZj0wLCBwb3J0X2xlbj0wLCBwYXRoX29mZiwgcGF0aF9sZW4sIHJlc3VsdF9sZW47CisJY29uc3QgY2hhciAqc2xhc2hfcHRyLCAqYXRfcHRyLCAqY29sb25fcHRyLCAqcGF0aF9zdGFydDsKKwljaGFyICpyZXN1bHQ7CisKKwkvKgorCSAqIENvcHkgbG93ZXJjYXNlZCBzY2hlbWUgYW5kIDovLyBzdWZmaXgsICUtZXNjYXBlcyBhcmUgbm90IGFsbG93ZWQKKwkgKiBGaXJzdCBjaGFyYWN0ZXIgb2Ygc2NoZW1lIG11c3QgYmUgVVJMX0FMUEhBCisJICovCisJc3Bhbm5lZCA9IHN0cnNwbih1cmwsIFVSTF9TQ0hFTUVfQ0hBUlMpOworCWlmICghc3Bhbm5lZCB8fCAhaXNhbHBoYSh1cmxbMF0pIHx8IHNwYW5uZWQgKyAzID4gdXJsX2xlbiB8fAorCSAgICB1cmxbc3Bhbm5lZF0gIT0gJzonIHx8IHVybFtzcGFubmVkKzFdICE9ICcvJyB8fCB1cmxbc3Bhbm5lZCsyXSAhPSAnLycpIHsKKwkJaWYgKG91dF9pbmZvKSB7CisJCQlvdXRfaW5mby0+dXJsID0gTlVMTDsKKwkJCW91dF9pbmZvLT5lcnIgPSBfKCJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIpOworCQl9CisJCXJldHVybiBOVUxMOyAvKiBCYWQgc2NoZW1lIGFuZC9vciBtaXNzaW5nICI6Ly8iIHBhcnQgKi8KKwl9CisJc3RyYnVmX2luaXQoJm5vcm0sIHVybF9sZW4pOworCXNjaGVtZV9sZW4gPSBzcGFubmVkOworCXNwYW5uZWQgKz0gMzsKKwl1cmxfbGVuIC09IHNwYW5uZWQ7CisJd2hpbGUgKHNwYW5uZWQtLSkKKwkJc3RyYnVmX2FkZGNoKCZub3JtLCB0b2xvd2VyKCp1cmwrKykpOworCisKKwkvKgorCSAqIENvcHkgYW55IHVzZXJuYW1lOnBhc3N3b3JkIGlmIHByZXNlbnQgbm9ybWFsaXppbmcgJS1lc2NhcGVzCisJICovCisJYXRfcHRyID0gc3RyY2hyKHVybCwgJ0AnKTsKKwlzbGFzaF9wdHIgPSB1cmwgKyBzdHJjc3BuKHVybCwgIi8/IyIpOworCWlmIChhdF9wdHIgJiYgYXRfcHRyIDwgc2xhc2hfcHRyKSB7CisJCXVzZXJfb2ZmID0gbm9ybS5sZW47CisJCWlmIChhdF9wdHIgPiB1cmwpIHsKKwkJCWlmICghYXBwZW5kX25vcm1hbGl6ZWRfZXNjYXBlcygmbm9ybSwgdXJsLCBhdF9wdHIgLSB1cmwsCisJCQkJCQkgICAgICAgIiIsIFVSTF9SRVNFUlZFRCkpIHsKKwkJCQlpZiAob3V0X2luZm8pIHsKKwkJCQkJb3V0X2luZm8tPnVybCA9IE5VTEw7CisJCQkJCW91dF9pbmZvLT5lcnIgPSBfKCJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiKTsKKwkJCQl9CisJCQkJc3RyYnVmX3JlbGVhc2UoJm5vcm0pOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJY29sb25fcHRyID0gc3RyY2hyKG5vcm0uYnVmICsgc2NoZW1lX2xlbiArIDMsICc6Jyk7CisJCQlpZiAoY29sb25fcHRyKSB7CisJCQkJcGFzc3dkX29mZiA9IChjb2xvbl9wdHIgKyAxKSAtIG5vcm0uYnVmOworCQkJCXBhc3N3ZF9sZW4gPSBub3JtLmxlbiAtIHBhc3N3ZF9vZmY7CisJCQkJdXNlcl9sZW4gPSAocGFzc3dkX29mZiAtIDEpIC0gKHNjaGVtZV9sZW4gKyAzKTsKKwkJCX0gZWxzZSB7CisJCQkJdXNlcl9sZW4gPSBub3JtLmxlbiAtIChzY2hlbWVfbGVuICsgMyk7CisJCQl9CisJCX0KKwkJc3RyYnVmX2FkZGNoKCZub3JtLCAnQCcpOworCQl1cmxfbGVuIC09ICgrK2F0X3B0ciAtIHVybCk7CisJCXVybCA9IGF0X3B0cjsKKwl9CisKKworCS8qCisJICogQ29weSB0aGUgaG9zdCBwYXJ0IGV4Y2x1ZGluZyBhbnkgcG9ydCBwYXJ0LCBubyAlLWVzY2FwZXMgYWxsb3dlZAorCSAqLworCWlmICghdXJsX2xlbiB8fCBzdHJjaHIoIjovPyMiLCAqdXJsKSkgeworCQkvKiBNaXNzaW5nIGhvc3QgaW52YWxpZCBmb3IgYWxsIFVSTCBzY2hlbWVzIGV4Y2VwdCBmaWxlICovCisJCWlmIChzdHJuY21wKG5vcm0uYnVmLCAiZmlsZToiLCA1KSkgeworCQkJaWYgKG91dF9pbmZvKSB7CisJCQkJb3V0X2luZm8tPnVybCA9IE5VTEw7CisJCQkJb3V0X2luZm8tPmVyciA9IF8oIm1pc3NpbmcgaG9zdCBhbmQgc2NoZW1lIGlzIG5vdCAnZmlsZTonIik7CisJCQl9CisJCQlzdHJidWZfcmVsZWFzZSgmbm9ybSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCWhvc3Rfb2ZmID0gbm9ybS5sZW47CisJfQorCWNvbG9uX3B0ciA9IHNsYXNoX3B0ciAtIDE7CisJd2hpbGUgKGNvbG9uX3B0ciA+IHVybCAmJiAqY29sb25fcHRyICE9ICc6JyAmJiAqY29sb25fcHRyICE9ICddJykKKwkJY29sb25fcHRyLS07CisJaWYgKCpjb2xvbl9wdHIgIT0gJzonKSB7CisJCWNvbG9uX3B0ciA9IHNsYXNoX3B0cjsKKwl9IGVsc2UgaWYgKCFob3N0X29mZiAmJiBjb2xvbl9wdHIgPCBzbGFzaF9wdHIgJiYgY29sb25fcHRyICsgMSAhPSBzbGFzaF9wdHIpIHsKKwkJLyogZmlsZTogVVJMcyBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciAqLworCQlpZiAob3V0X2luZm8pIHsKKwkJCW91dF9pbmZvLT51cmwgPSBOVUxMOworCQkJb3V0X2luZm8tPmVyciA9IF8oImEgJ2ZpbGU6JyBVUkwgbWF5IG5vdCBoYXZlIGEgcG9ydCBudW1iZXIiKTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmbm9ybSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChhbGxvd19nbG9icykKKwkJc3Bhbm5lZCA9IHN0cnNwbih1cmwsIFVSTF9IT1NUX0NIQVJTICIqIik7CisJZWxzZQorCQlzcGFubmVkID0gc3Ryc3BuKHVybCwgVVJMX0hPU1RfQ0hBUlMpOworCisJaWYgKHNwYW5uZWQgPCBjb2xvbl9wdHIgLSB1cmwpIHsKKwkJLyogSG9zdCBuYW1lIGhhcyBpbnZhbGlkIGNoYXJhY3RlcnMgKi8KKwkJaWYgKG91dF9pbmZvKSB7CisJCQlvdXRfaW5mby0+dXJsID0gTlVMTDsKKwkJCW91dF9pbmZvLT5lcnIgPSBfKCJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIik7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJm5vcm0pOworCQlyZXR1cm4gTlVMTDsKKwl9CisJd2hpbGUgKHVybCA8IGNvbG9uX3B0cikgeworCQlzdHJidWZfYWRkY2goJm5vcm0sIHRvbG93ZXIoKnVybCsrKSk7CisJCXVybF9sZW4tLTsKKwl9CisKKworCS8qCisJICogQ2hlY2sgdGhlIHBvcnQgcGFydCBhbmQgY29weSBpZiBub3QgdGhlIGRlZmF1bHQgKGFmdGVyIHJlbW92aW5nIGFueQorCSAqIGxlYWRpbmcgMHMpOyBubyAlLWVzY2FwZXMgYWxsb3dlZAorCSAqLworCWlmIChjb2xvbl9wdHIgPCBzbGFzaF9wdHIpIHsKKwkJLyogc2tpcCB0aGUgJzonIGFuZCBsZWFkaW5nIDBzIGJ1dCBub3QgdGhlIGxhc3Qgb25lIGlmIGFsbCAwcyAqLworCQl1cmwrKzsKKwkJdXJsICs9IHN0cnNwbih1cmwsICIwIik7CisJCWlmICh1cmwgPT0gc2xhc2hfcHRyICYmIHVybFstMV0gPT0gJzAnKQorCQkJdXJsLS07CisJCWlmICh1cmwgPT0gc2xhc2hfcHRyKSB7CisJCQkvKiBTa2lwICI6IiBwb3J0IHdpdGggbm8gbnVtYmVyLCBpdCdzIHNhbWUgYXMgZGVmYXVsdCAqLworCQl9IGVsc2UgaWYgKHNsYXNoX3B0ciAtIHVybCA9PSAyICYmCisJCQkgICAhc3RybmNtcChub3JtLmJ1ZiwgImh0dHA6IiwgNSkgJiYKKwkJCSAgICFzdHJuY21wKHVybCwgIjgwIiwgMikpIHsKKwkJCS8qIFNraXAgaHR0cCA6ODAgYXMgaXQncyB0aGUgZGVmYXVsdCAqLworCQl9IGVsc2UgaWYgKHNsYXNoX3B0ciAtIHVybCA9PSAzICYmCisJCQkgICAhc3RybmNtcChub3JtLmJ1ZiwgImh0dHBzOiIsIDYpICYmCisJCQkgICAhc3RybmNtcCh1cmwsICI0NDMiLCAzKSkgeworCQkJLyogU2tpcCBodHRwcyA6NDQzIGFzIGl0J3MgdGhlIGRlZmF1bHQgKi8KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBQb3J0IG51bWJlciBtdXN0IGJlIGFsbCBkaWdpdHMgd2l0aCBsZWFkaW5nIDBzIHJlbW92ZWQKKwkJCSAqIGFuZCBzaW5jZSBhbGwgdGhlIHByb3RvY29scyB3ZSBkZWFsIHdpdGggaGF2ZSBhIDE2LWJpdAorCQkJICogcG9ydCBudW1iZXIgaXQgbXVzdCBhbHNvIGJlIGluIHRoZSByYW5nZSAxLi42NTUzNQorCQkJICogMCBpcyBub3QgYWxsb3dlZCBiZWNhdXNlIHRoYXQgbWVhbnMgIm5leHQgYXZhaWxhYmxlIgorCQkJICogb24ganVzdCBhYm91dCBldmVyeSBzeXN0ZW0gYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgdXNlZAorCQkJICovCisJCQl1bnNpZ25lZCBsb25nIHBudW0gPSAwOworCQkJc3Bhbm5lZCA9IHN0cnNwbih1cmwsIFVSTF9ESUdJVCk7CisJCQlpZiAoc3Bhbm5lZCA8IHNsYXNoX3B0ciAtIHVybCkgeworCQkJCS8qIHBvcnQgbnVtYmVyIGhhcyBpbnZhbGlkIGNoYXJhY3RlcnMgKi8KKwkJCQlpZiAob3V0X2luZm8pIHsKKwkJCQkJb3V0X2luZm8tPnVybCA9IE5VTEw7CisJCQkJCW91dF9pbmZvLT5lcnIgPSBfKCJpbnZhbGlkIHBvcnQgbnVtYmVyIik7CisJCQkJfQorCQkJCXN0cmJ1Zl9yZWxlYXNlKCZub3JtKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCWlmIChzbGFzaF9wdHIgLSB1cmwgPD0gNSkKKwkJCQlwbnVtID0gc3RydG91bCh1cmwsIE5VTEwsIDEwKTsKKwkJCWlmIChwbnVtID09IDAgfHwgcG51bSA+IDY1NTM1KSB7CisJCQkJLyogcG9ydCBudW1iZXIgbm90IGluIHJhbmdlIDEuLjY1NTM1ICovCisJCQkJaWYgKG91dF9pbmZvKSB7CisJCQkJCW91dF9pbmZvLT51cmwgPSBOVUxMOworCQkJCQlvdXRfaW5mby0+ZXJyID0gXygiaW52YWxpZCBwb3J0IG51bWJlciIpOworCQkJCX0KKwkJCQlzdHJidWZfcmVsZWFzZSgmbm9ybSk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlzdHJidWZfYWRkY2goJm5vcm0sICc6Jyk7CisJCQlwb3J0X29mZiA9IG5vcm0ubGVuOworCQkJc3RyYnVmX2FkZCgmbm9ybSwgdXJsLCBzbGFzaF9wdHIgLSB1cmwpOworCQkJcG9ydF9sZW4gPSBzbGFzaF9wdHIgLSB1cmw7CisJCX0KKwkJdXJsX2xlbiAtPSBzbGFzaF9wdHIgLSBjb2xvbl9wdHI7CisJCXVybCA9IHNsYXNoX3B0cjsKKwl9CisJaWYgKGhvc3Rfb2ZmKQorCQlob3N0X2xlbiA9IG5vcm0ubGVuIC0gaG9zdF9vZmYgLSAocG9ydF9sZW4gPyBwb3J0X2xlbiArIDEgOiAwKTsKKworCisJLyoKKwkgKiBOb3cgY29weSB0aGUgcGF0aCByZXNvbHZpbmcgYW55IC4gYW5kIC4uIHNlZ21lbnRzIGJlaW5nIGNhcmVmdWwgbm90CisJICogdG8gY29ycnVwdCB0aGUgVVJMIGJ5IHVuZXNjYXBpbmcgYW55IGRlbGltaXRlcnMsIGJ1dCBkbyBhZGQgYW4KKwkgKiBpbml0aWFsICcvJyBpZiBpdCdzIG1pc3NpbmcgYW5kIGRvIG5vcm1hbGl6ZSBhbnkgJS1lc2NhcGUgc2VxdWVuY2VzLgorCSAqLworCXBhdGhfb2ZmID0gbm9ybS5sZW47CisJcGF0aF9zdGFydCA9IG5vcm0uYnVmICsgcGF0aF9vZmY7CisJc3RyYnVmX2FkZGNoKCZub3JtLCAnLycpOworCWlmICgqdXJsID09ICcvJykgeworCQl1cmwrKzsKKwkJdXJsX2xlbi0tOworCX0KKwlmb3IgKDs7KSB7CisJCWNvbnN0IGNoYXIgKnNlZ19zdGFydDsKKwkJc2l6ZV90IHNlZ19zdGFydF9vZmYgPSBub3JtLmxlbjsKKwkJY29uc3QgY2hhciAqbmV4dF9zbGFzaCA9IHVybCArIHN0cmNzcG4odXJsLCAiLz8jIik7CisJCWludCBza2lwX2FkZF9zbGFzaCA9IDA7CisKKwkJLyoKKwkJICogUkZDIDM2ODkgaW5kaWNhdGVzIHRoYXQgYW55IC4gb3IgLi4gc2VnbWVudHMgc2hvdWxkIGJlCisJCSAqIHVuZXNjYXBlZCBiZWZvcmUgYmVpbmcgY2hlY2tlZCBmb3IuCisJCSAqLworCQlpZiAoIWFwcGVuZF9ub3JtYWxpemVkX2VzY2FwZXMoJm5vcm0sIHVybCwgbmV4dF9zbGFzaCAtIHVybCwgIiIsCisJCQkJCSAgICAgICBVUkxfUkVTRVJWRUQpKSB7CisJCQlpZiAob3V0X2luZm8pIHsKKwkJCQlvdXRfaW5mby0+dXJsID0gTlVMTDsKKwkJCQlvdXRfaW5mby0+ZXJyID0gXygiaW52YWxpZCAlWFggZXNjYXBlIHNlcXVlbmNlIik7CisJCQl9CisJCQlzdHJidWZfcmVsZWFzZSgmbm9ybSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCXNlZ19zdGFydCA9IG5vcm0uYnVmICsgc2VnX3N0YXJ0X29mZjsKKwkJaWYgKCFzdHJjbXAoc2VnX3N0YXJ0LCAiLiIpKSB7CisJCQkvKiBpZ25vcmUgYSAuIHNlZ21lbnQ7IGJlIGNhcmVmdWwgbm90IHRvIHJlbW92ZSBpbml0aWFsICcvJyAqLworCQkJaWYgKHNlZ19zdGFydCA9PSBwYXRoX3N0YXJ0ICsgMSkgeworCQkJCXN0cmJ1Zl9zZXRsZW4oJm5vcm0sIG5vcm0ubGVuIC0gMSk7CisJCQkJc2tpcF9hZGRfc2xhc2ggPSAxOworCQkJfSBlbHNlIHsKKwkJCQlzdHJidWZfc2V0bGVuKCZub3JtLCBub3JtLmxlbiAtIDIpOworCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJjbXAoc2VnX3N0YXJ0LCAiLi4iKSkgeworCQkJLyoKKwkJCSAqIGlnbm9yZSBhIC4uIHNlZ21lbnQgYW5kIHJlbW92ZSB0aGUgcHJldmlvdXMgc2VnbWVudDsKKwkJCSAqIGJlIGNhcmVmdWwgbm90IHRvIHJlbW92ZSBpbml0aWFsICcvJyBmcm9tIHBhdGgKKwkJCSAqLworCQkJY29uc3QgY2hhciAqcHJldl9zbGFzaCA9IG5vcm0uYnVmICsgbm9ybS5sZW4gLSAzOworCQkJaWYgKHByZXZfc2xhc2ggPT0gcGF0aF9zdGFydCkgeworCQkJCS8qIGludmFsaWQgLi4gYmVjYXVzZSBubyBwcmV2aW91cyBzZWdtZW50IHRvIHJlbW92ZSAqLworCQkJCWlmIChvdXRfaW5mbykgeworCQkJCQlvdXRfaW5mby0+dXJsID0gTlVMTDsKKwkJCQkJb3V0X2luZm8tPmVyciA9IF8oImludmFsaWQgJy4uJyBwYXRoIHNlZ21lbnQiKTsKKwkJCQl9CisJCQkJc3RyYnVmX3JlbGVhc2UoJm5vcm0pOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJd2hpbGUgKCotLXByZXZfc2xhc2ggIT0gJy8nKSB7fQorCQkJaWYgKHByZXZfc2xhc2ggPT0gcGF0aF9zdGFydCkgeworCQkJCXN0cmJ1Zl9zZXRsZW4oJm5vcm0sIHByZXZfc2xhc2ggLSBub3JtLmJ1ZiArIDEpOworCQkJCXNraXBfYWRkX3NsYXNoID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJc3RyYnVmX3NldGxlbigmbm9ybSwgcHJldl9zbGFzaCAtIG5vcm0uYnVmKTsKKwkJCX0KKwkJfQorCQl1cmxfbGVuIC09IG5leHRfc2xhc2ggLSB1cmw7CisJCXVybCA9IG5leHRfc2xhc2g7CisJCS8qIGlmIHRoZSBuZXh0IGNoYXIgaXMgbm90ICcvJyBkb25lIHdpdGggdGhlIHBhdGggKi8KKwkJaWYgKCp1cmwgIT0gJy8nKQorCQkJYnJlYWs7CisJCXVybCsrOworCQl1cmxfbGVuLS07CisJCWlmICghc2tpcF9hZGRfc2xhc2gpCisJCQlzdHJidWZfYWRkY2goJm5vcm0sICcvJyk7CisJfQorCXBhdGhfbGVuID0gbm9ybS5sZW4gLSBwYXRoX29mZjsKKworCisJLyoKKwkgKiBOb3cgc2ltcGx5IGNvcHkgdGhlIHJlc3QsIGlmIGFueSwgb25seSBub3JtYWxpemluZyAlLWVzY2FwZXMgYW5kCisJICogYmVpbmcgY2FyZWZ1bCBub3QgdG8gY29ycnVwdCB0aGUgVVJMIGJ5IHVuZXNjYXBpbmcgYW55IGRlbGltaXRlcnMuCisJICovCisJaWYgKCp1cmwpIHsKKwkJaWYgKCFhcHBlbmRfbm9ybWFsaXplZF9lc2NhcGVzKCZub3JtLCB1cmwsIHVybF9sZW4sICIiLCBVUkxfUkVTRVJWRUQpKSB7CisJCQlpZiAob3V0X2luZm8pIHsKKwkJCQlvdXRfaW5mby0+dXJsID0gTlVMTDsKKwkJCQlvdXRfaW5mby0+ZXJyID0gXygiaW52YWxpZCAlWFggZXNjYXBlIHNlcXVlbmNlIik7CisJCQl9CisJCQlzdHJidWZfcmVsZWFzZSgmbm9ybSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCisJcmVzdWx0ID0gc3RyYnVmX2RldGFjaCgmbm9ybSwgJnJlc3VsdF9sZW4pOworCWlmIChvdXRfaW5mbykgeworCQlvdXRfaW5mby0+dXJsID0gcmVzdWx0OworCQlvdXRfaW5mby0+ZXJyID0gTlVMTDsKKwkJb3V0X2luZm8tPnVybF9sZW4gPSByZXN1bHRfbGVuOworCQlvdXRfaW5mby0+c2NoZW1lX2xlbiA9IHNjaGVtZV9sZW47CisJCW91dF9pbmZvLT51c2VyX29mZiA9IHVzZXJfb2ZmOworCQlvdXRfaW5mby0+dXNlcl9sZW4gPSB1c2VyX2xlbjsKKwkJb3V0X2luZm8tPnBhc3N3ZF9vZmYgPSBwYXNzd2Rfb2ZmOworCQlvdXRfaW5mby0+cGFzc3dkX2xlbiA9IHBhc3N3ZF9sZW47CisJCW91dF9pbmZvLT5ob3N0X29mZiA9IGhvc3Rfb2ZmOworCQlvdXRfaW5mby0+aG9zdF9sZW4gPSBob3N0X2xlbjsKKwkJb3V0X2luZm8tPnBvcnRfb2ZmID0gcG9ydF9vZmY7CisJCW91dF9pbmZvLT5wb3J0X2xlbiA9IHBvcnRfbGVuOworCQlvdXRfaW5mby0+cGF0aF9vZmYgPSBwYXRoX29mZjsKKwkJb3V0X2luZm8tPnBhdGhfbGVuID0gcGF0aF9sZW47CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK2NoYXIgKnVybF9ub3JtYWxpemUoY29uc3QgY2hhciAqdXJsLCBzdHJ1Y3QgdXJsX2luZm8gKm91dF9pbmZvKQoreworCXJldHVybiB1cmxfbm9ybWFsaXplXzEodXJsLCBvdXRfaW5mbywgMCk7Cit9CisKK3N0YXRpYyBzaXplX3QgdXJsX21hdGNoX3ByZWZpeChjb25zdCBjaGFyICp1cmwsCisJCQkgICAgICAgY29uc3QgY2hhciAqdXJsX3ByZWZpeCwKKwkJCSAgICAgICBzaXplX3QgdXJsX3ByZWZpeF9sZW4pCit7CisJLyoKKwkgKiB1cmxfcHJlZml4IG1hdGNoZXMgdXJsIGlmIHVybF9wcmVmaXggaXMgYW4gZXhhY3QgbWF0Y2ggZm9yIHVybCBvciBpdAorCSAqIGlzIGEgcHJlZml4IG9mIHVybCBhbmQgdGhlIG1hdGNoIGVuZHMgb24gYSBwYXRoIGNvbXBvbmVudCBib3VuZGFyeS4KKwkgKiBCb3RoIHVybCBhbmQgdXJsX3ByZWZpeCBhcmUgY29uc2lkZXJlZCB0byBoYXZlIGFuIGltcGxpY2l0ICcvJyBvbiB0aGUKKwkgKiBlbmQgZm9yIG1hdGNoaW5nIHB1cnBvc2VzIGlmIHRoZXkgZG8gbm90IGFscmVhZHkuCisJICoKKwkgKiB1cmwgbXVzdCBiZSBOVUwgdGVybWluYXRlZC4gIHVybF9wcmVmaXhfbGVuIGlzIHRoZSBsZW5ndGggb2YKKwkgKiB1cmxfcHJlZml4IHdoaWNoIG5lZWQgbm90IGJlIE5VTCB0ZXJtaW5hdGVkLgorCSAqCisJICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaCBpbiBjaGFyYWN0ZXJzIChpbmNsdWRpbmcKKwkgKiB0aGUgZmluYWwgJy8nIGV2ZW4gaWYgaXQncyBpbXBsaWNpdCkgb3IgMCBmb3Igbm8gbWF0Y2guCisJICoKKwkgKiBQYXNzaW5nIE5VTEwgYXMgdXJsIGFuZC9vciB1cmxfcHJlZml4IHdpbGwgYWx3YXlzIGNhdXNlIDAgdG8gYmUKKwkgKiByZXR1cm5lZCB3aXRob3V0IGNhdXNpbmcgYW55IGZhdWx0cy4KKwkgKi8KKwlpZiAoIXVybCB8fCAhdXJsX3ByZWZpeCkKKwkJcmV0dXJuIDA7CisJaWYgKCF1cmxfcHJlZml4X2xlbiB8fCAodXJsX3ByZWZpeF9sZW4gPT0gMSAmJiAqdXJsX3ByZWZpeCA9PSAnLycpKQorCQlyZXR1cm4gKCEqdXJsIHx8ICp1cmwgPT0gJy8nKSA/IDEgOiAwOworCWlmICh1cmxfcHJlZml4W3VybF9wcmVmaXhfbGVuIC0gMV0gPT0gJy8nKQorCQl1cmxfcHJlZml4X2xlbi0tOworCWlmIChzdHJuY21wKHVybCwgdXJsX3ByZWZpeCwgdXJsX3ByZWZpeF9sZW4pKQorCQlyZXR1cm4gMDsKKwlpZiAoKHN0cmxlbih1cmwpID09IHVybF9wcmVmaXhfbGVuKSB8fCAodXJsW3VybF9wcmVmaXhfbGVuXSA9PSAnLycpKQorCQlyZXR1cm4gdXJsX3ByZWZpeF9sZW4gKyAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hdGNoX3VybHMoY29uc3Qgc3RydWN0IHVybF9pbmZvICp1cmwsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1cmxfaW5mbyAqdXJsX3ByZWZpeCwKKwkJICAgICAgc3RydWN0IHVybG1hdGNoX2l0ZW0gKm1hdGNoKQoreworCS8qCisJICogdXJsX3ByZWZpeCBtYXRjaGVzIHVybCBpZiB0aGUgc2NoZW1lLCBob3N0IGFuZCBwb3J0IG9mIHVybF9wcmVmaXgKKwkgKiBhcmUgdGhlIHNhbWUgYXMgdGhvc2Ugb2YgdXJsIGFuZCB0aGUgcGF0aCBwb3J0aW9uIG9mIHVybF9wcmVmaXgKKwkgKiBpcyB0aGUgc2FtZSBhcyB0aGUgcGF0aCBwb3J0aW9uIG9mIHVybCBvciBpdCBpcyBhIHByZWZpeCB0aGF0CisJICogbWF0Y2hlcyBhdCBhICcvJyBib3VuZGFyeS4gIElmIHVybF9wcmVmaXggY29udGFpbnMgYSB1c2VyIG5hbWUsCisJICogdGhhdCBtdXN0IGFsc28gZXhhY3RseSBtYXRjaCB0aGUgdXNlciBuYW1lIGluIHVybC4KKwkgKgorCSAqIElmIHRoZSB1c2VyLCBob3N0LCBwb3J0IGFuZCBwYXRoIG1hdGNoIGluIHRoaXMgZmFzaGlvbiwgdGhlIHJldHVybmVkCisJICogdmFsdWUgaXMgdGhlIGxlbmd0aCBvZiB0aGUgcGF0aCBtYXRjaCBpbmNsdWRpbmcgYW55IGltcGxpY2l0CisJICogZmluYWwgJy8nLiAgRm9yIGV4YW1wbGUsICJodHRwOi8vbWVAZXhhbXBsZS5jb20vcGF0aCIgaXMgbWF0Y2hlZCBieQorCSAqICJodHRwOi8vZXhhbXBsZS5jb20iIHdpdGggYSBwYXRoIGxlbmd0aCBvZiAxLgorCSAqCisJICogSWYgdGhlcmUgaXMgYSBtYXRjaCBhbmQgZXhhY3R1c2VybWF0Y2ggaXMgbm90IE5VTEwsIHRoZW4KKwkgKiAqZXhhY3R1c2VybWF0Y2ggd2lsbCBiZSBzZXQgdG8gdHJ1ZSBpZiBib3RoIHVybCBhbmQgdXJsX3ByZWZpeAorCSAqIGNvbnRhaW5lZCBhIHVzZXIgbmFtZSBvciBmYWxzZSBpZiB1cmxfcHJlZml4IGRpZCBub3QgaGF2ZSBhCisJICogdXNlciBuYW1lLiAgSWYgdGhlcmUgaXMgbm8gbWF0Y2ggKmV4YWN0dXNlcm1hdGNoIGlzIGxlZnQgdW50b3VjaGVkLgorCSAqLworCWNoYXIgdXNlcm1hdGNoZWQgPSAwOworCXNpemVfdCBwYXRobWF0Y2hsZW47CisKKwlpZiAoIXVybCB8fCAhdXJsX3ByZWZpeCB8fCAhdXJsLT51cmwgfHwgIXVybF9wcmVmaXgtPnVybCkKKwkJcmV0dXJuIDA7CisKKwkvKiBjaGVjayB0aGUgc2NoZW1lICovCisJaWYgKHVybF9wcmVmaXgtPnNjaGVtZV9sZW4gIT0gdXJsLT5zY2hlbWVfbGVuIHx8CisJICAgIHN0cm5jbXAodXJsLT51cmwsIHVybF9wcmVmaXgtPnVybCwgdXJsLT5zY2hlbWVfbGVuKSkKKwkJcmV0dXJuIDA7IC8qIHNjaGVtZXMgZG8gbm90IG1hdGNoICovCisKKwkvKiBjaGVjayB0aGUgdXNlciBuYW1lIGlmIHVybF9wcmVmaXggaGFzIG9uZSAqLworCWlmICh1cmxfcHJlZml4LT51c2VyX29mZikgeworCQlpZiAoIXVybC0+dXNlcl9vZmYgfHwgdXJsLT51c2VyX2xlbiAhPSB1cmxfcHJlZml4LT51c2VyX2xlbiB8fAorCQkgICAgc3RybmNtcCh1cmwtPnVybCArIHVybC0+dXNlcl9vZmYsCisJCQkgICAgdXJsX3ByZWZpeC0+dXJsICsgdXJsX3ByZWZpeC0+dXNlcl9vZmYsCisJCQkgICAgdXJsLT51c2VyX2xlbikpCisJCQlyZXR1cm4gMDsgLyogdXJsX3ByZWZpeCBoYXMgYSB1c2VyIGJ1dCBpdCdzIG5vdCBhIG1hdGNoICovCisJCXVzZXJtYXRjaGVkID0gMTsKKwl9CisKKwkvKiBjaGVjayB0aGUgaG9zdCAqLworCWlmICghbWF0Y2hfaG9zdCh1cmwsIHVybF9wcmVmaXgpKQorCQlyZXR1cm4gMDsgLyogaG9zdCBuYW1lcyBkbyBub3QgbWF0Y2ggKi8KKworCS8qIGNoZWNrIHRoZSBwb3J0ICovCisJaWYgKHVybF9wcmVmaXgtPnBvcnRfbGVuICE9IHVybC0+cG9ydF9sZW4gfHwKKwkgICAgc3RybmNtcCh1cmwtPnVybCArIHVybC0+cG9ydF9vZmYsCisJCSAgICB1cmxfcHJlZml4LT51cmwgKyB1cmxfcHJlZml4LT5wb3J0X29mZiwgdXJsLT5wb3J0X2xlbikpCisJCXJldHVybiAwOyAvKiBwb3J0cyBkbyBub3QgbWF0Y2ggKi8KKworCS8qIGNoZWNrIHRoZSBwYXRoICovCisJcGF0aG1hdGNobGVuID0gdXJsX21hdGNoX3ByZWZpeCgKKwkJdXJsLT51cmwgKyB1cmwtPnBhdGhfb2ZmLAorCQl1cmxfcHJlZml4LT51cmwgKyB1cmxfcHJlZml4LT5wYXRoX29mZiwKKwkJdXJsX3ByZWZpeC0+dXJsX2xlbiAtIHVybF9wcmVmaXgtPnBhdGhfb2ZmKTsKKwlpZiAoIXBhdGhtYXRjaGxlbikKKwkJcmV0dXJuIDA7IC8qIHBhdGhzIGRvIG5vdCBtYXRjaCAqLworCisJaWYgKG1hdGNoKSB7CisJCW1hdGNoLT5ob3N0bWF0Y2hfbGVuID0gdXJsX3ByZWZpeC0+aG9zdF9sZW47CisJCW1hdGNoLT5wYXRobWF0Y2hfbGVuID0gcGF0aG1hdGNobGVuOworCQltYXRjaC0+dXNlcl9tYXRjaGVkID0gdXNlcm1hdGNoZWQ7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY21wX21hdGNoZXMoY29uc3Qgc3RydWN0IHVybG1hdGNoX2l0ZW0gKmEsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXJsbWF0Y2hfaXRlbSAqYikKK3sKKwlpZiAoYS0+aG9zdG1hdGNoX2xlbiAhPSBiLT5ob3N0bWF0Y2hfbGVuKQorCQlyZXR1cm4gYS0+aG9zdG1hdGNoX2xlbiA8IGItPmhvc3RtYXRjaF9sZW4gPyAtMSA6IDE7CisJaWYgKGEtPnBhdGhtYXRjaF9sZW4gIT0gYi0+cGF0aG1hdGNoX2xlbikKKwkJcmV0dXJuIGEtPnBhdGhtYXRjaF9sZW4gPCBiLT5wYXRobWF0Y2hfbGVuID8gLTEgOiAxOworCWlmIChhLT51c2VyX21hdGNoZWQgIT0gYi0+dXNlcl9tYXRjaGVkKQorCQlyZXR1cm4gYi0+dXNlcl9tYXRjaGVkID8gLTEgOiAxOworCXJldHVybiAwOworfQorCitpbnQgdXJsbWF0Y2hfY29uZmlnX2VudHJ5KGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCB1cmxtYXRjaF9jb25maWcgKmNvbGxlY3QgPSBjYjsKKwlzdHJ1Y3QgdXJsbWF0Y2hfaXRlbSBtYXRjaGVkID0gezB9OworCXN0cnVjdCB1cmxfaW5mbyAqdXJsID0gJmNvbGxlY3QtPnVybDsKKwljb25zdCBjaGFyICprZXksICpkb3Q7CisJc3RydWN0IHN0cmJ1ZiBzeW50aGtleSA9IFNUUkJVRl9JTklUOworCWludCByZXR2YWw7CisJaW50ICgqc2VsZWN0X2ZuKShjb25zdCBzdHJ1Y3QgdXJsbWF0Y2hfaXRlbSAqYSwgY29uc3Qgc3RydWN0IHVybG1hdGNoX2l0ZW0gKmIpID0KKwkJY29sbGVjdC0+c2VsZWN0X2ZuID8gY29sbGVjdC0+c2VsZWN0X2ZuIDogY21wX21hdGNoZXM7CisKKwlpZiAoIXNraXBfcHJlZml4KHZhciwgY29sbGVjdC0+c2VjdGlvbiwgJmtleSkgfHwgKihrZXkrKykgIT0gJy4nKSB7CisJCWlmIChjb2xsZWN0LT5jYXNjYWRlX2ZuKQorCQkJcmV0dXJuIGNvbGxlY3QtPmNhc2NhZGVfZm4odmFyLCB2YWx1ZSwgY2IpOworCQlyZXR1cm4gMDsgLyogbm90IGludGVyZXN0ZWQgKi8KKwl9CisJZG90ID0gc3RycmNocihrZXksICcuJyk7CisJaWYgKGRvdCkgeworCQljaGFyICpjb25maWdfdXJsLCAqbm9ybV91cmw7CisJCXN0cnVjdCB1cmxfaW5mbyBub3JtX2luZm87CisKKwkJY29uZmlnX3VybCA9IHhtZW1kdXB6KGtleSwgZG90IC0ga2V5KTsKKwkJbm9ybV91cmwgPSB1cmxfbm9ybWFsaXplXzEoY29uZmlnX3VybCwgJm5vcm1faW5mbywgMSk7CisJCWlmIChub3JtX3VybCkKKwkJCXJldHZhbCA9IG1hdGNoX3VybHModXJsLCAmbm9ybV9pbmZvLCAmbWF0Y2hlZCk7CisJCWVsc2UgaWYgKGNvbGxlY3QtPmZhbGxiYWNrX21hdGNoX2ZuKQorCQkJcmV0dmFsID0gY29sbGVjdC0+ZmFsbGJhY2tfbWF0Y2hfZm4oY29uZmlnX3VybCwKKwkJCQkJCQkgICAgY29sbGVjdC0+Y2IpOworCQllbHNlCisJCQlyZXR2YWwgPSAwOworCQlmcmVlKGNvbmZpZ191cmwpOworCQlmcmVlKG5vcm1fdXJsKTsKKwkJaWYgKCFyZXR2YWwpCisJCQlyZXR1cm4gMDsKKwkJa2V5ID0gZG90ICsgMTsKKwl9CisKKwlpZiAoY29sbGVjdC0+a2V5ICYmIHN0cmNtcChrZXksIGNvbGxlY3QtPmtleSkpCisJCXJldHVybiAwOworCisJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCgmY29sbGVjdC0+dmFycywga2V5KTsKKwlpZiAoIWl0ZW0tPnV0aWwpIHsKKwkJaXRlbS0+dXRpbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKG1hdGNoZWQpKTsKKwl9IGVsc2UgeworCQlpZiAoc2VsZWN0X2ZuKCZtYXRjaGVkLCBpdGVtLT51dGlsKSA8IDApCisJCQkgLyoKKwkJCSAgKiBPdXIgbWF0Y2ggaXMgd29yc2UgdGhhbiB0aGUgb2xkIG9uZSwKKwkJCSAgKiB3ZSBjYW5ub3QgdXNlIGl0LgorCQkJICAqLworCQkJcmV0dXJuIDA7CisJCS8qIE90aGVyd2lzZSwgcmVwbGFjZSBpdCB3aXRoIHRoaXMgb25lLiAqLworCX0KKworCW1lbWNweShpdGVtLT51dGlsLCAmbWF0Y2hlZCwgc2l6ZW9mKG1hdGNoZWQpKTsKKwlzdHJidWZfYWRkc3RyKCZzeW50aGtleSwgY29sbGVjdC0+c2VjdGlvbik7CisJc3RyYnVmX2FkZGNoKCZzeW50aGtleSwgJy4nKTsKKwlzdHJidWZfYWRkc3RyKCZzeW50aGtleSwga2V5KTsKKwlyZXR2YWwgPSBjb2xsZWN0LT5jb2xsZWN0X2ZuKHN5bnRoa2V5LmJ1ZiwgdmFsdWUsIGNvbGxlY3QtPmNiKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzeW50aGtleSk7CisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL3VybG1hdGNoLmggYi91cmxtYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZjQyZjgKLS0tIC9kZXYvbnVsbAorKysgYi91cmxtYXRjaC5oCkBAIC0wLDAgKzEsNzEgQEAKKyNpZm5kZWYgVVJMX01BVENIX0gKKyNkZWZpbmUgVVJMX01BVENIX0gKKworI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0cnVjdCB1cmxfaW5mbyB7CisJLyogbm9ybWFsaXplZCB1cmwgb24gc3VjY2VzcywgbXVzdCBiZSBmcmVlZCwgb3RoZXJ3aXNlIE5VTEwgKi8KKwljaGFyICp1cmw7CisJLyogaWYgIXVybCwgYSBicmllZiByZWFzb24gZm9yIHRoZSBmYWlsdXJlLCBvdGhlcndpc2UgTlVMTCAqLworCWNvbnN0IGNoYXIgKmVycjsKKworCS8qIHRoZSByZXN0IG9mIHRoZSBmaWVsZHMgYXJlIG9ubHkgc2V0IGlmIHVybCAhPSBOVUxMICovCisKKwlzaXplX3QgdXJsX2xlbjsJCS8qIHRvdGFsIGxlbmd0aCBvZiB1cmwgKHdoaWNoIGlzIG5vdyBub3JtYWxpemVkKSAqLworCXNpemVfdCBzY2hlbWVfbGVuOwkvKiBsZW5ndGggb2Ygc2NoZW1lIG5hbWUgKGV4Y2x1ZGluZyBmaW5hbCA6KSAqLworCXNpemVfdCB1c2VyX29mZjsJLyogb2Zmc2V0IGludG8gdXJsIHRvIHN0YXJ0IG9mIHVzZXIgbmFtZSAoMCA9PiBub25lKSAqLworCXNpemVfdCB1c2VyX2xlbjsJLyogbGVuZ3RoIG9mIHVzZXIgbmFtZTsgaWYgdXNlcl9vZmYgIT0gMCBidXQKKwkJCQkgICB1c2VyX2xlbiA9PSAwLCBhbiBlbXB0eSB1c2VyIG5hbWUgd2FzIGdpdmVuICovCisJc2l6ZV90IHBhc3N3ZF9vZmY7CS8qIG9mZnNldCBpbnRvIHVybCB0byBzdGFydCBvZiBwYXNzd2QgKDAgPT4gbm9uZSkgKi8KKwlzaXplX3QgcGFzc3dkX2xlbjsJLyogbGVuZ3RoIG9mIHBhc3N3ZDsgaWYgcGFzc3dkX29mZiAhPSAwIGJ1dAorCQkJCSAgIHBhc3N3ZF9sZW4gPT0gMCwgYW4gZW1wdHkgcGFzc3dkIHdhcyBnaXZlbiAqLworCXNpemVfdCBob3N0X29mZjsJLyogb2Zmc2V0IGludG8gdXJsIHRvIHN0YXJ0IG9mIGhvc3QgbmFtZSAoMCA9PiBub25lKSAqLworCXNpemVfdCBob3N0X2xlbjsJLyogbGVuZ3RoIG9mIGhvc3QgbmFtZTsKKwkJCQkgKiBmaWxlIHVybHMgbWF5IGhhdmUgaG9zdF9sZW4gPT0gMCAqLworCXNpemVfdCBwb3J0X29mZjsJLyogb2Zmc2V0IGludG8gdXJsIHRvIHN0YXJ0IG9mIHBvcnQgbnVtYmVyICgwID0+IG5vbmUpICovCisJc2l6ZV90IHBvcnRfbGVuOwkvKiBpZiBhIHBvcnRudW0gaXMgcHJlc2VudCAocG9ydF9vZmYgIT0gMCksIGl0IGhhcworCQkJCSAqIHRoaXMgbGVuZ3RoIChleGNsdWRpbmcgdGhlIGxlYWRpbmcgJzonKSBzdGFydGluZworCQkJCSAqIGZyb20gcG9ydF9vZmYgKGFsd2F5cyAwIGZvciBmaWxlIHVybHMpICovCisJc2l6ZV90IHBhdGhfb2ZmOwkvKiBvZmZzZXQgaW50byB1cmwgdG8gdGhlIHN0YXJ0IG9mIHRoZSB1cmwgcGF0aDsKKwkJCQkgKiB0aGlzIHdpbGwgYWx3YXlzIHBvaW50IHRvIGEgJy8nIGNoYXJhY3RlcgorCQkJCSAqIGFmdGVyIHRoZSB1cmwgaGFzIGJlZW4gbm9ybWFsaXplZCAqLworCXNpemVfdCBwYXRoX2xlbjsJLyogbGVuZ3RoIG9mIHBhdGggcG9ydGlvbiBleGNsdWRpbmcgYW55IHRyYWlsaW5nCisJCQkJICogJz8uLi4nIGFuZCAnIy4uLicgcG9ydGlvbjsgd2lsbCBhbHdheXMgYmUgPj0gMSAqLworfTsKKworY2hhciAqdXJsX25vcm1hbGl6ZShjb25zdCBjaGFyICosIHN0cnVjdCB1cmxfaW5mbyAqKTsKKworc3RydWN0IHVybG1hdGNoX2l0ZW0geworCXNpemVfdCBob3N0bWF0Y2hfbGVuOworCXNpemVfdCBwYXRobWF0Y2hfbGVuOworCWNoYXIgdXNlcl9tYXRjaGVkOworfTsKKworc3RydWN0IHVybG1hdGNoX2NvbmZpZyB7CisJc3RydWN0IHN0cmluZ19saXN0IHZhcnM7CisJc3RydWN0IHVybF9pbmZvIHVybDsKKwljb25zdCBjaGFyICpzZWN0aW9uOworCWNvbnN0IGNoYXIgKmtleTsKKworCXZvaWQgKmNiOworCWludCAoKmNvbGxlY3RfZm4pKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKKwlpbnQgKCpjYXNjYWRlX2ZuKShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CisJLyoKKwkgKiBDb21wYXJlIHRoZSB0d28gbWF0Y2hlcywgdGhlIG9uZSBqdXN0IGRpc2NvdmVyZWQgYW5kIHRoZSBleGlzdGluZworCSAqIGJlc3QgbWF0Y2ggYW5kIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlIGlmIHRoZSBmb3VuZCBpdGVtIGlzIHRvIGJlCisJICogcmVqZWN0ZWQgb3IgYSBub24tbmVnYXRpdmUgdmFsdWUgaWYgaXQgaXMgdG8gYmUgYWNjZXB0ZWQuICBJZiB0aGlzCisJICogZmllbGQgaXMgc2V0IHRvIE5VTEwsIHVzZSB0aGUgZGVmYXVsdCBjb21wYXJpc29uIHRlY2huaXF1ZSwgd2hpY2gKKwkgKiBjaGVja3MgdG8gc2VzIGlmIGZvdW5kIGlzIGJldHRlciAoYWNjb3JkaW5nIHRvIHRoZSB1cmxtYXRjaAorCSAqIHNwZWNpZmljaXR5IHJ1bGVzKSB0aGFuIGV4aXN0aW5nLgorCSAqLworCWludCAoKnNlbGVjdF9mbikoY29uc3Qgc3RydWN0IHVybG1hdGNoX2l0ZW0gKmZvdW5kLCBjb25zdCBzdHJ1Y3QgdXJsbWF0Y2hfaXRlbSAqZXhpc3RpbmcpOworCS8qCisJICogQW4gb3B0aW9uYWwgY2FsbGJhY2sgdG8gYWxsb3cgZS5nLiBmb3IgcGFydGlhbCBVUkxzOyBpdCBzaGFsbAorCSAqIHJldHVybiAxIG9yIDAgZGVwZW5kaW5nIHdoZXRoZXIgYHVybGAgbWF0Y2hlcyBvciBub3QuCisJICovCisJaW50ICgqZmFsbGJhY2tfbWF0Y2hfZm4pKGNvbnN0IGNoYXIgKnVybCwgdm9pZCAqY2IpOworfTsKKworaW50IHVybG1hdGNoX2NvbmZpZ19lbnRyeShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CisKKyNlbmRpZiAvKiBVUkxfTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvdXNhZ2UuYyBiL3VzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThmYjVmZgotLS0gL2Rldi9udWxsCisrKyBiL3VzYWdlLmMKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCit2b2lkIHZyZXBvcnRmKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwljaGFyIG1zZ1s0MDk2XTsKKwljaGFyICpwLCAqcGVuZCA9IG1zZyArIHNpemVvZihtc2cpOworCXNpemVfdCBwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCk7CisKKwlpZiAoc2l6ZW9mKG1zZykgPD0gcHJlZml4X2xlbikgeworCQlmcHJpbnRmKHN0ZGVyciwgIkJVRyEhISB0b28gbG9uZyBhIHByZWZpeCAnJXMnXG4iLCBwcmVmaXgpOworCQlhYm9ydCgpOworCX0KKwltZW1jcHkobXNnLCBwcmVmaXgsIHByZWZpeF9sZW4pOworCXAgPSBtc2cgKyBwcmVmaXhfbGVuOworCWlmICh2c25wcmludGYocCwgcGVuZCAtIHAsIGVyciwgcGFyYW1zKSA8IDApCisJCSpwID0gJ1wwJzsgLyogdnNucHJpbnRmKCkgZmFpbGVkLCBjbGlwIGF0IHByZWZpeCAqLworCisJZm9yICg7IHAgIT0gcGVuZCAtIDEgJiYgKnA7IHArKykgeworCQlpZiAoaXNjbnRybCgqcCkgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnXG4nKQorCQkJKnAgPSAnPyc7CisJfQorCisJKihwKyspID0gJ1xuJzsgLyogd2Ugbm8gbG9uZ2VyIG5lZWQgYSBOVUwgKi8KKwlmZmx1c2goc3RkZXJyKTsKKwl3cml0ZV9pbl9mdWxsKDIsIG1zZywgcCAtIG1zZyk7Cit9CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIHVzYWdlX2J1aWx0aW4oY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwl2cmVwb3J0ZigidXNhZ2U6ICIsIGVyciwgcGFyYW1zKTsKKworCS8qCisJICogV2hlbiB3ZSBkZXRlY3QgYSB1c2FnZSBlcnJvciAqYmVmb3JlKiB0aGUgY29tbWFuZCBkaXNwYXRjaCBpbgorCSAqIGNtZF9tYWluKCksIHdlIGRvbid0IGtub3cgd2hhdCB2ZXJiIHRvIHJlcG9ydC4gIEZvcmNlIGl0IHRvIHRoaXMKKwkgKiB0byBmYWNpbGl0YXRlIHBvc3QtcHJvY2Vzc2luZy4KKwkgKi8KKwl0cmFjZTJfY21kX25hbWUoIl91c2FnZV8iKTsKKworCS8qCisJICogQ3VycmVudGx5LCB0aGUgKGVyciwgcGFyYW1zKSBhcmUgdXN1YWxseSBqdXN0IHRoZSBzdGF0aWMgdXNhZ2UKKwkgKiBzdHJpbmcgd2hpY2ggaXNuJ3QgdmVyeSB1c2VmdWwgaGVyZS4gIFVzdWFsbHksIHRoZSBjYWxsIHNpdGUKKwkgKiBtYW51YWxseSBjYWxscyBmcHJpbnRmKHN0ZGVyciwuLi4pIHdpdGggdGhlIGFjdHVhbCBkZXRhaWxlZAorCSAqIHN5bnRheCBlcnJvciBiZWZvcmUgY2FsbGluZyB1c2FnZSgpLgorCSAqCisJICogVE9ETyBJdCB3b3VsZCBiZSBuaWNlIHRvIHVwZGF0ZSB0aGUgY2FsbCBzaXRlcyB0byBwYXNzIGJvdGgKKwkgKiB0aGUgc3RhdGljIHVzYWdlIHN0cmluZyBhbmQgdGhlIGRldGFpbGVkIGVycm9yIG1lc3NhZ2UuCisJICovCisKKwlleGl0KDEyOSk7Cit9CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGRpZV9idWlsdGluKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJLyoKKwkgKiBXZSBjYWxsIHRoaXMgdHJhY2UyIGZ1bmN0aW9uIGZpcnN0IGFuZCBleHBlY3QgaXQgdG8gdmFfY29weSAncGFyYW1zJworCSAqIGJlZm9yZSB1c2luZyBpdCAoYmVjYXVzZSBhbiAnYXAnIGNhbiBvbmx5IGJlIHdhbGtlZCBvbmNlKS4KKwkgKi8KKwl0cmFjZTJfY21kX2Vycm9yX3ZhKGVyciwgcGFyYW1zKTsKKworCXZyZXBvcnRmKCJmYXRhbDogIiwgZXJyLCBwYXJhbXMpOworCisJZXhpdCgxMjgpOworfQorCitzdGF0aWMgdm9pZCBlcnJvcl9idWlsdGluKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJLyoKKwkgKiBXZSBjYWxsIHRoaXMgdHJhY2UyIGZ1bmN0aW9uIGZpcnN0IGFuZCBleHBlY3QgaXQgdG8gdmFfY29weSAncGFyYW1zJworCSAqIGJlZm9yZSB1c2luZyBpdCAoYmVjYXVzZSBhbiAnYXAnIGNhbiBvbmx5IGJlIHdhbGtlZCBvbmNlKS4KKwkgKi8KKwl0cmFjZTJfY21kX2Vycm9yX3ZhKGVyciwgcGFyYW1zKTsKKworCXZyZXBvcnRmKCJlcnJvcjogIiwgZXJyLCBwYXJhbXMpOworfQorCitzdGF0aWMgdm9pZCB3YXJuX2J1aWx0aW4oY29uc3QgY2hhciAqd2FybiwgdmFfbGlzdCBwYXJhbXMpCit7CisJdnJlcG9ydGYoIndhcm5pbmc6ICIsIHdhcm4sIHBhcmFtcyk7Cit9CisKK3N0YXRpYyBpbnQgZGllX2lzX3JlY3Vyc2luZ19idWlsdGluKHZvaWQpCit7CisJc3RhdGljIGludCBkeWluZzsKKwkvKgorCSAqIEp1c3QgYW4gYXJiaXRyYXJ5IG51bWJlciBYIHdoZXJlICJhIDwgeCA8IGIiIHdoZXJlICJhIiBpcworCSAqICJtYXhpbXVtIG51bWJlciBvZiBwdGhyZWFkcyB3ZSdsbCBldmVyIHBsYXVzaWJseSBzcGF3biIgYW5kCisJICogImIiIGlzICJzb21ldGhpbmcgbGVzcyB0aGFuIEluZiIsIHNpbmNlIHRoZSBwb2ludCBpcyB0bworCSAqIHByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uLgorCSAqLworCXN0YXRpYyBjb25zdCBpbnQgcmVjdXJzaW9uX2xpbWl0ID0gMTAyNDsKKworCWR5aW5nKys7CisJaWYgKGR5aW5nID4gcmVjdXJzaW9uX2xpbWl0KSB7CisJCXJldHVybiAxOworCX0gZWxzZSBpZiAoZHlpbmcgPT0gMikgeworCQl3YXJuaW5nKCJkaWUoKSBjYWxsZWQgbWFueSB0aW1lcy4gUmVjdXJzaW9uIGVycm9yIG9yIHJhY3kgdGhyZWFkZWQgZGVhdGghIik7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKworLyogSWYgd2UgYXJlIGluIGEgZGxvcGVuKCllZCAuc28gd3JpdGUgdG8gYSBnbG9iYWwgdmFyaWFibGUgd291bGQgc2VnZmF1bHQKKyAqICh1Z2gpLCBzbyBrZWVwIHRoaW5ncyBzdGF0aWMuICovCitzdGF0aWMgTk9SRVRVUk5fUFRSIHZvaWQgKCp1c2FnZV9yb3V0aW5lKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKSA9IHVzYWdlX2J1aWx0aW47CitzdGF0aWMgTk9SRVRVUk5fUFRSIHZvaWQgKCpkaWVfcm91dGluZSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykgPSBkaWVfYnVpbHRpbjsKK3N0YXRpYyB2b2lkICgqZXJyb3Jfcm91dGluZSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykgPSBlcnJvcl9idWlsdGluOworc3RhdGljIHZvaWQgKCp3YXJuX3JvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpID0gd2Fybl9idWlsdGluOworc3RhdGljIGludCAoKmRpZV9pc19yZWN1cnNpbmcpKHZvaWQpID0gZGllX2lzX3JlY3Vyc2luZ19idWlsdGluOworCit2b2lkIHNldF9kaWVfcm91dGluZShOT1JFVFVSTl9QVFIgdm9pZCAoKnJvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpKQoreworCWRpZV9yb3V0aW5lID0gcm91dGluZTsKK30KKwordm9pZCBzZXRfZXJyb3Jfcm91dGluZSh2b2lkICgqcm91dGluZSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykpCit7CisJZXJyb3Jfcm91dGluZSA9IHJvdXRpbmU7Cit9CisKK3ZvaWQgKCpnZXRfZXJyb3Jfcm91dGluZSh2b2lkKSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwlyZXR1cm4gZXJyb3Jfcm91dGluZTsKK30KKwordm9pZCBzZXRfd2Fybl9yb3V0aW5lKHZvaWQgKCpyb3V0aW5lKShjb25zdCBjaGFyICp3YXJuLCB2YV9saXN0IHBhcmFtcykpCit7CisJd2Fybl9yb3V0aW5lID0gcm91dGluZTsKK30KKwordm9pZCAoKmdldF93YXJuX3JvdXRpbmUodm9pZCkpKGNvbnN0IGNoYXIgKndhcm4sIHZhX2xpc3QgcGFyYW1zKQoreworCXJldHVybiB3YXJuX3JvdXRpbmU7Cit9CisKK3ZvaWQgc2V0X2RpZV9pc19yZWN1cnNpbmdfcm91dGluZShpbnQgKCpyb3V0aW5lKSh2b2lkKSkKK3sKKwlkaWVfaXNfcmVjdXJzaW5nID0gcm91dGluZTsKK30KKwordm9pZCBOT1JFVFVSTiB1c2FnZWYoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJdXNhZ2Vfcm91dGluZShlcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKK3ZvaWQgTk9SRVRVUk4gdXNhZ2UoY29uc3QgY2hhciAqZXJyKQoreworCXVzYWdlZigiJXMiLCBlcnIpOworfQorCit2b2lkIE5PUkVUVVJOIGRpZShjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKworCWlmIChkaWVfaXNfcmVjdXJzaW5nKCkpIHsKKwkJZnB1dHMoImZhdGFsOiByZWN1cnNpb24gZGV0ZWN0ZWQgaW4gZGllIGhhbmRsZXJcbiIsIHN0ZGVycik7CisJCWV4aXQoMTI4KTsKKwl9CisKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJZGllX3JvdXRpbmUoZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZm10X3dpdGhfZXJyKGNoYXIgKmJ1ZiwgaW50IG4sIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwljaGFyIHN0cl9lcnJvclsyNTZdLCAqZXJyOworCWludCBpLCBqOworCisJZXJyID0gc3RyZXJyb3IoZXJybm8pOworCWZvciAoaSA9IGogPSAwOyBlcnJbaV0gJiYgaiA8IHNpemVvZihzdHJfZXJyb3IpIC0gMTsgKSB7CisJCWlmICgoc3RyX2Vycm9yW2orK10gPSBlcnJbaSsrXSkgIT0gJyUnKQorCQkJY29udGludWU7CisJCWlmIChqIDwgc2l6ZW9mKHN0cl9lcnJvcikgLSAxKSB7CisJCQlzdHJfZXJyb3JbaisrXSA9ICclJzsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vIHJvb20gdG8gZG91YmxlIHRoZSAnJScsIHNvIHdlIG92ZXJ3cml0ZSBpdCB3aXRoCisJCQkgKiAnXDAnIGJlbG93ICovCisJCQlqLS07CisJCQlicmVhazsKKwkJfQorCX0KKwlzdHJfZXJyb3Jbal0gPSAwOworCS8qIFRydW5jYXRpb24gaXMgYWNjZXB0YWJsZSBoZXJlICovCisJc25wcmludGYoYnVmLCBuLCAiJXM6ICVzIiwgZm10LCBzdHJfZXJyb3IpOworCXJldHVybiBidWY7Cit9CisKK3ZvaWQgTk9SRVRVUk4gZGllX2Vycm5vKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWNoYXIgYnVmWzEwMjRdOworCXZhX2xpc3QgcGFyYW1zOworCisJaWYgKGRpZV9pc19yZWN1cnNpbmcoKSkgeworCQlmcHV0cygiZmF0YWw6IHJlY3Vyc2lvbiBkZXRlY3RlZCBpbiBkaWVfZXJybm8gaGFuZGxlclxuIiwKKwkJCXN0ZGVycik7CisJCWV4aXQoMTI4KTsKKwl9CisKKwl2YV9zdGFydChwYXJhbXMsIGZtdCk7CisJZGllX3JvdXRpbmUoZm10X3dpdGhfZXJyKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCksIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKKyN1bmRlZiBlcnJvcl9lcnJubworaW50IGVycm9yX2Vycm5vKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWNoYXIgYnVmWzEwMjRdOworCXZhX2xpc3QgcGFyYW1zOworCisJdmFfc3RhcnQocGFyYW1zLCBmbXQpOworCWVycm9yX3JvdXRpbmUoZm10X3dpdGhfZXJyKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCksIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7CisJcmV0dXJuIC0xOworfQorCisjdW5kZWYgZXJyb3IKK2ludCBlcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwllcnJvcl9yb3V0aW5lKGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgd2FybmluZ19lcnJubyhjb25zdCBjaGFyICp3YXJuLCAuLi4pCit7CisJY2hhciBidWZbMTAyNF07CisJdmFfbGlzdCBwYXJhbXM7CisKKwl2YV9zdGFydChwYXJhbXMsIHdhcm4pOworCXdhcm5fcm91dGluZShmbXRfd2l0aF9lcnIoYnVmLCBzaXplb2YoYnVmKSwgd2FybiksIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKK3ZvaWQgd2FybmluZyhjb25zdCBjaGFyICp3YXJuLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisKKwl2YV9zdGFydChwYXJhbXMsIHdhcm4pOworCXdhcm5fcm91dGluZSh3YXJuLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCisvKiBPbmx5IHNldCB0aGlzLCBldmVyLCBmcm9tIHQvaGVscGVyLywgd2hlbiB2ZXJpZnlpbmcgdGhhdCBidWdzIGFyZSBjYXVnaHQuICovCitpbnQgQlVHX2V4aXRfY29kZTsKKworc3RhdGljIE5PUkVUVVJOIHZvaWQgQlVHX3ZmbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IHBhcmFtcykKK3sKKwljaGFyIHByZWZpeFsyNTZdOworCisJLyogdHJ1bmNhdGlvbiB2aWEgc25wcmludGYgaXMgT0sgaGVyZSAqLworCWlmIChmaWxlKQorCQlzbnByaW50ZihwcmVmaXgsIHNpemVvZihwcmVmaXgpLCAiQlVHOiAlczolZDogIiwgZmlsZSwgbGluZSk7CisJZWxzZQorCQlzbnByaW50ZihwcmVmaXgsIHNpemVvZihwcmVmaXgpLCAiQlVHOiAiKTsKKworCXZyZXBvcnRmKHByZWZpeCwgZm10LCBwYXJhbXMpOworCWlmIChCVUdfZXhpdF9jb2RlKQorCQlleGl0KEJVR19leGl0X2NvZGUpOworCWFib3J0KCk7Cit9CisKKyNpZmRlZiBIQVZFX1ZBUklBRElDX01BQ1JPUworTk9SRVRVUk4gdm9pZCBCVUdfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJQlVHX3ZmbChmaWxlLCBsaW5lLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorI2Vsc2UKK05PUkVUVVJOIHZvaWQgQlVHKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJQlVHX3ZmbChOVUxMLCAwLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorI2VuZGlmCisKKyNpZmRlZiBTVVBQUkVTU19BTk5PVEFURURfTEVBS1MKK3ZvaWQgdW5sZWFrX21lbW9yeShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBsZW4pCit7CisJc3RhdGljIHN0cnVjdCBzdXBwcmVzc2VkX2xlYWtfcm9vdCB7CisJCXN0cnVjdCBzdXBwcmVzc2VkX2xlYWtfcm9vdCAqbmV4dDsKKwkJY2hhciBkYXRhW0ZMRVhfQVJSQVldOworCX0gKnN1cHByZXNzZWRfbGVha3M7CisJc3RydWN0IHN1cHByZXNzZWRfbGVha19yb290ICpyb290OworCisJRkxFWF9BTExPQ19NRU0ocm9vdCwgZGF0YSwgcHRyLCBsZW4pOworCXJvb3QtPm5leHQgPSBzdXBwcmVzc2VkX2xlYWtzOworCXN1cHByZXNzZWRfbGVha3MgPSByb290OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS91c2VyZGlmZi5jIGIvdXNlcmRpZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGY4ODRlCi0tLSAvZGV2L251bGwKKysrIGIvdXNlcmRpZmYuYwpAQCAtMCwwICsxLDM0NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcml2ZXJzOworc3RhdGljIGludCBuZHJpdmVyczsKK3N0YXRpYyBpbnQgZHJpdmVyc19hbGxvYzsKKworI2RlZmluZSBQQVRURVJOUyhuYW1lLCBwYXR0ZXJuLCB3b3JkX3JlZ2V4KQkJCVwKKwl7IG5hbWUsIE5VTEwsIC0xLCB7IHBhdHRlcm4sIFJFR19FWFRFTkRFRCB9LAkJXAorCSAgd29yZF9yZWdleCAifFteWzpzcGFjZTpdXXxbXHhjMC1ceGZmXVtceDgwLVx4YmZdKyIgfQorI2RlZmluZSBJUEFUVEVSTihuYW1lLCBwYXR0ZXJuLCB3b3JkX3JlZ2V4KQkJCVwKKwl7IG5hbWUsIE5VTEwsIC0xLCB7IHBhdHRlcm4sIFJFR19FWFRFTkRFRCB8IFJFR19JQ0FTRSB9LCBcCisJICB3b3JkX3JlZ2V4ICJ8W15bOnNwYWNlOl1dfFtceGMwLVx4ZmZdW1x4ODAtXHhiZl0rIiB9CitzdGF0aWMgc3RydWN0IHVzZXJkaWZmX2RyaXZlciBidWlsdGluX2RyaXZlcnNbXSA9IHsKK0lQQVRURVJOKCJhZGEiLAorCSAiIV4oLipbIFx0XSk/KGlzWyBcdF0rbmV3fHJlbmFtZXN8aXNbIFx0XStzZXBhcmF0ZSkoWyBcdF0uKik/JFxuIgorCSAiIV5bIFx0XSp3aXRoWyBcdF0uKiRcbiIKKwkgIl5bIFx0XSooKHByb2NlZHVyZXxmdW5jdGlvbilbIFx0XSsuKikkXG4iCisJICJeWyBcdF0qKChwYWNrYWdlfHByb3RlY3RlZHx0YXNrKVsgXHRdKy4qKSQiLAorCSAvKiAtLSAqLworCSAiW2EtekEtWl1bYS16QS1aMC05X10qIgorCSAifFstK10/WzAtOV1bMC05I18uYUFiQmNDZERlRWZGXSooW2VFXVsrLV0/WzAtOV9dKyk/IgorCSAifD0+fFxcLlxcLnxcXCpcXCp8Oj18Lz18Pj18PD18PDx8Pj58PD4iKSwKK1BBVFRFUk5TKCJkdHMiLAorCSAiITtcbiIKKwkgIiE9XG4iCisJIC8qIGxpbmVzIGJlZ2lubmluZyB3aXRoIGEgd29yZCBvcHRpb25hbGx5IHByZWNlZGVkIGJ5ICcmJyBvciB0aGUgcm9vdCAqLworCSAiXlsgXHRdKigoL1sgXHRdKlxce3wmP1thLXpBLVpfXSkuKikiLAorCSAvKiAtLSAqLworCSAvKiBQcm9wZXJ0eSBuYW1lcyBhbmQgbWF0aCBvcGVyYXRvcnMgKi8KKwkgIlthLXpBLVowLTksLl8rPyMtXSsiCisJICJ8Wy0rKi8lJl58IX5dfD4+fDw8fCYmfFxcfFxcfCIpLAorUEFUVEVSTlMoImVsaXhpciIsCisJICJeWyBcdF0qKChkZWYobWFjcm98bW9kdWxlfGltcGx8cHJvdG9jb2x8cCk/fHRlc3QpWyBcdF0uKikkIiwKKwkgLyogLS0gKi8KKwkgLyogQXRvbXMsIG5hbWVzLCBhbmQgbW9kdWxlIGF0dHJpYnV0ZXMgKi8KKwkgIltAOl0/W2EtekEtWjAtOUBfPyFdKyIKKwkgLyogTnVtYmVycyB3aXRoIHNwZWNpZmljIGJhc2UgKi8KKwkgInxbLStdPzBbeG9iXVswLTlhLWZBLUZdKyIKKwkgLyogTnVtYmVycyAqLworCSAifFstK10/WzAtOV1bMC05Xy5dKihbZUVdWy0rXT9bMC05X10rKT8iCisJIC8qIE9wZXJhdG9ycyBhbmQgYXRvbXMgdGhhdCByZXByZXNlbnQgdGhlbSAqLworCSAifDo/KFxcK1xcK3wtLXxcXC5cXC58fn5+fDw+fFxcXlxcXlxcXnw8P1xcfD58PDw8P3w+Pz4+fDw8P358fj4/Pnw8fj58PD18Pj18PT09P3whPT0/fD1+fCYmJj98XFx8XFx8XFx8P3w9Pnw8LXxcXFxcXFxcXHwtPikiCisJIC8qIE5vdCByZWFsIG9wZXJhdG9ycywgYnV0IHNob3VsZCBiZSBncm91cGVkICovCisJICJ8Oj8lW0EtWmEtejAtOV8uXVxce1xcfT8iKSwKK0lQQVRURVJOKCJmb3J0cmFuIiwKKwkgIiFeKFtDKl18WyBcdF0qISlcbiIKKwkgIiFeWyBcdF0qTU9EVUxFWyBcdF0rUFJPQ0VEVVJFWyBcdF1cbiIKKwkgIl5bIFx0XSooKEVORFsgXHRdKyk/KFBST0dSQU18TU9EVUxFfEJMT0NLWyBcdF0rREFUQSIKKwkJInwoW14nXCIgXHRdK1sgXHRdKykqKFNVQlJPVVRJTkV8RlVOQ1RJT04pKVsgXHRdK1tBLVpdLiopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aXVthLXpBLVowLTlfXSoiCisJICJ8XFwuKFtFZV1bUXFdfFtObl1bRWVdfFtHZ11bVHRFZV18W0xsXVtUdEVlXXxbVHRdW1JyXVtVdV1bRWVdfFtGZl1bQWFdW0xsXVtTc11bRWVdfFtBYV1bTm5dW0RkXXxbT29dW1JyXXxbTm5dP1tFZV1bUXFdW1Z2XXxbTm5dW09vXVtUdF0pXFwuIgorCSAvKiBudW1iZXJzIGFuZCBmb3JtYXQgc3RhdGVtZW50cyBsaWtlIDJFMTQuNCwgb3IgRVMxMi42LCA5WC4KKwkgICogRG9uJ3Qgd29ycnkgYWJvdXQgZm9ybWF0IHN0YXRlbWVudHMgd2l0aG91dCBsZWFkaW5nIGRpZ2l0cyBzaW5jZQorCSAgKiB0aGV5IHdvdWxkIGhhdmUgYmVlbiBtYXRjaGVkIGFib3ZlIGFzIGEgdmFyaWFibGUgYW55d2F5LiAqLworCSAifFstK10/WzAtOS5dKyhbQWFJaURkRWVGZkxsVHRYeF1bU3NdP1stK10/WzAtOS5dKik/KF9bYS16QS1aMC05XVthLXpBLVowLTlfXSopPyIKKwkgInwvL3xcXCpcXCp8Ojp8Wy88Pj1dPSIpLAorSVBBVFRFUk4oImZvdW50YWluIiwgIl4oKFxcLlteLl18KGludHxleHR8ZXN0fGludFxcLj8vZXh0fGkvZSlbLiBdKS4qKSQiLAorCSAiW14gXHQtXSsiKSwKK1BBVFRFUk5TKCJnb2xhbmciLAorCSAvKiBGdW5jdGlvbnMgKi8KKwkgIl5bIFx0XSooZnVuY1sgXHRdKi4qKFxce1sgXHRdKik/KVxuIgorCSAvKiBTdHJ1Y3RzIGFuZCBpbnRlcmZhY2VzICovCisJICJeWyBcdF0qKHR5cGVbIFx0XS4qKHN0cnVjdHxpbnRlcmZhY2UpWyBcdF0qKFxce1sgXHRdKik/KSIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lRV0raT98MFt4WF0/WzAtOWEtZkEtRl0raT8iCisJICJ8Wy0rKi88PiUmXnw9ITpdPXwtLXxcXCtcXCt8PDw9P3w+Pj0/fCZcXF49P3wmJnxcXHxcXHx8PC18XFwuezN9IiksCitQQVRURVJOUygiaHRtbCIsICJeWyBcdF0qKDxbSGhdWzEtNl0oWyBcdF0uKik/Pi4qKSQiLAorCSAiW148Pj0gXHRdKyIpLAorUEFUVEVSTlMoImphdmEiLAorCSAiIV5bIFx0XSooY2F0Y2h8ZG98Zm9yfGlmfGluc3RhbmNlb2Z8bmV3fHJldHVybnxzd2l0Y2h8dGhyb3d8d2hpbGUpXG4iCisJICJeWyBcdF0qKChbQS1aYS16X11bQS1aYS16XzAtOV0qWyBcdF0rKStbQS1aYS16X11bQS1aYS16XzAtOV0qWyBcdF0qXFwoW147XSopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lXStbZkZsTF0/fDBbeFhiQl0/WzAtOWEtZkEtRl0rW2xMXT8iCisJICJ8Wy0rKi88PiUmXnw9IV09IgorCSAifC0tfFxcK1xcK3w8PD0/fD4+Pj89P3wmJnxcXHxcXHwiKSwKK1BBVFRFUk5TKCJtYXJrZG93biIsCisJICJeIHswLDN9I3sxLDZ9WyBcdF0uKiIsCisJICJbXjw+PSBcdF0rIiksCitQQVRURVJOUygibWF0bGFiIiwKKwkgLyoKKwkgICogT2N0YXZlIHBhdHRlcm4gaXMgbW9zdGx5IHRoZSBzYW1lIGFzIG1hdGxhYiwgZXhjZXB0IHRoYXQgJyUlJScgYW5kCisJICAqICcjIycgY2FuIGFsc28gYmUgdXNlZCB0byBiZWdpbiBjb2RlIHNlY3Rpb25zLCBpbiBhZGRpdGlvbiB0byAnJSUnCisJICAqIHRoYXQgaXMgdW5kZXJzdG9vZCBieSBib3RoLgorCSAgKi8KKwkgIl5bWzpzcGFjZTpdXSooKGNsYXNzZGVmfGZ1bmN0aW9uKVtbOnNwYWNlOl1dLiopJHxeKCUlJT98IyMpW1s6c3BhY2U6XV0uKiQiLAorCSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKnxbLSswLTkuZV0rfFs9fjw+XT18XFwuWyovXFxeJ118XFx8XFx8fCYmIiksCitQQVRURVJOUygib2JqYyIsCisJIC8qIE5lZ2F0ZSBDIHN0YXRlbWVudHMgdGhhdCBjYW4gbG9vayBsaWtlIGZ1bmN0aW9ucyAqLworCSAiIV5bIFx0XSooZG98Zm9yfGlmfGVsc2V8cmV0dXJufHN3aXRjaHx3aGlsZSlcbiIKKwkgLyogT2JqZWN0aXZlLUMgbWV0aG9kcyAqLworCSAiXlsgXHRdKihbLStdWyBcdF0qXFwoWyBcdF0qW0EtWmEtel9dW0EtWmEtel8wLTkqIFx0XSpcXClbIFx0XSpbQS1aYS16X10uKikkXG4iCisJIC8qIEMgZnVuY3Rpb25zICovCisJICJeWyBcdF0qKChbQS1aYS16X11bQS1aYS16XzAtOV0qWyBcdF0rKStbQS1aYS16X11bQS1aYS16XzAtOV0qWyBcdF0qXFwoW147XSopJFxuIgorCSAvKiBPYmplY3RpdmUtQyBjbGFzcy9wcm90b2NvbCBkZWZpbml0aW9ucyAqLworCSAiXihAKGltcGxlbWVudGF0aW9ufGludGVyZmFjZXxwcm90b2NvbClbIFx0XS4qKSQiLAorCSAvKiAtLSAqLworCSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiIKKwkgInxbLSswLTkuZV0rW2ZGbExdP3wwW3hYYkJdP1swLTlhLWZBLUZdK1tsTF0/IgorCSAifFstKyovPD4lJl58PSFdPXwtLXxcXCtcXCt8PDw9P3w+Pj0/fCYmfFxcfFxcfHw6OnwtPiIpLAorUEFUVEVSTlMoInBhc2NhbCIsCisJICJeKCgoY2xhc3NbIFx0XSspPyhwcm9jZWR1cmV8ZnVuY3Rpb24pfGNvbnN0cnVjdG9yfGRlc3RydWN0b3J8aW50ZXJmYWNlfCIKKwkJImltcGxlbWVudGF0aW9ufGluaXRpYWxpemF0aW9ufGZpbmFsaXphdGlvbilbIFx0XSouKikkIgorCSAiXG4iCisJICJeKC4qPVsgXHRdKihjbGFzc3xyZWNvcmQpLiopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lXSt8MFt4WGJCXT9bMC05YS1mQS1GXSsiCisJICJ8PD58PD18Pj18Oj18XFwuXFwuIiksCitQQVRURVJOUygicGVybCIsCisJICJecGFja2FnZSAuKlxuIgorCSAiXnN1YiBbWzphbG51bTpdXyc6XStbIFx0XSoiCisJCSIoXFwoW14pXSpcXClbIFx0XSopPyIgLyogcHJvdG90eXBlICovCisJCS8qCisJCSAqIEF0dHJpYnV0ZXMuICBBIHJlZ2V4IGNhbid0IGNvdW50IG5lc3RlZCBwYXJlbnRoZXNlcywKKwkJICogc28ganVzdCBzbHVycCB1cCB3aGF0ZXZlciB3ZSBzZWUsIHRha2luZyBjYXJlIG5vdAorCQkgKiB0byBhY2NlcHQgbGluZXMgbGlrZSAic3ViIGZvbzsgIyBkZWZpbmVkIGVsc2V3aGVyZSIuCisJCSAqCisJCSAqIEFuIGF0dHJpYnV0ZSBjb3VsZCBjb250YWluIGEgc2VtaWNvbG9uLCBidXQgYXQgdGhhdAorCQkgKiBwb2ludCBpdCBzZWVtcyByZWFzb25hYmxlIGVub3VnaCB0byBnaXZlIHVwLgorCQkgKi8KKwkJIig6W147I10qKT8iCisJCSIoXFx7WyBcdF0qKT8iIC8qIGJyYWNlIGNhbiBjb21lIGhlcmUgb3Igb24gdGhlIG5leHQgbGluZSAqLworCQkiKCMuKik/JFxuIiAvKiBjb21tZW50ICovCisJICJeKEJFR0lOfEVORHxJTklUfENIRUNLfFVOSVRDSEVDS3xBVVRPTE9BRHxERVNUUk9ZKVsgXHRdKiIKKwkJIihcXHtbIFx0XSopPyIgLyogYnJhY2UgY2FuIGNvbWUgaGVyZSBvciBvbiB0aGUgbmV4dCBsaW5lICovCisJCSIoIy4qKT8kXG4iCisJICJePWhlYWRbMC05XSAuKiIsCS8qIFBPRCAqLworCSAvKiAtLSAqLworCSAiW1s6YWxwaGE6XV8nXVtbOmFsbnVtOl1fJ10qIgorCSAifDBbeGJdP1swLTlhLWZBLUZfXSoiCisJIC8qIHRha2luZyBjYXJlIG5vdCB0byBpbnRlcnByZXQgMy4uNSBhcyAoMy4pKC41KSAqLworCSAifFswLTlhLWZBLUZfXSsoXFwuWzAtOWEtZkEtRl9dKyk/KFtlRV1bLStdP1swLTlfXSspPyIKKwkgInw9PnwtW3J3eG9SV1hPZXpzZmRscFN1Z2tiY3RUQk1BQz5dfH5+fDo6IgorCSAifCYmPXxcXHxcXHw9fC8vPXxcXCpcXCo9IgorCSAifCYmfFxcfFxcfHwvL3xcXCtcXCt8LS18XFwqXFwqfFxcLlxcLlxcLj8iCisJICJ8Wy0rKi8lLl4mPD49IXxdPSIKKwkgInw9fnwhfiIKKwkgInw8PHw8Pnw8PT58Pj4iKSwKK1BBVFRFUk5TKCJwaHAiLAorCSAiXltcdCBdKigoKHB1YmxpY3xwcm90ZWN0ZWR8cHJpdmF0ZXxzdGF0aWMpW1x0IF0rKSpmdW5jdGlvbi4qKSRcbiIKKwkgIl5bXHQgXSooKCgoZmluYWx8YWJzdHJhY3QpW1x0IF0rKT9jbGFzc3xpbnRlcmZhY2V8dHJhaXQpLiopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lXSt8MFt4WGJCXT9bMC05YS1mQS1GXSsiCisJICJ8Wy0rKi88PiUmXnw9IS5dPXwtLXxcXCtcXCt8PDw9P3w+Pj0/fD09PXwmJnxcXHxcXHx8Ojp8LT4iKSwKK1BBVFRFUk5TKCJweXRob24iLCAiXlsgXHRdKigoY2xhc3N8KGFzeW5jWyBcdF0rKT9kZWYpWyBcdF0uKikkIiwKKwkgLyogLS0gKi8KKwkgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiCisJICJ8Wy0rMC05LmVdK1tqSmxMXT98MFt4WF0/WzAtOWEtZkEtRl0rW2xMXT8iCisJICJ8Wy0rKi88PiUmXnw9IV09fC8vPT98PDw9P3w+Pj0/fFxcKlxcKj0/IiksCisJIC8qIC0tICovCitQQVRURVJOUygicnVieSIsICJeWyBcdF0qKChjbGFzc3xtb2R1bGV8ZGVmKVsgXHRdLiopJCIsCisJIC8qIC0tICovCisJICIoQHxAQHxcXCQpP1thLXpBLVpfXVthLXpBLVowLTlfXSoiCisJICJ8Wy0rMC05LmVdK3wwW3hYYkJdP1swLTlhLWZBLUZdK3xcXD8oXFxcXEMtKT8oXFxcXE0tKT8uIgorCSAifC8vPT98Wy0rKi88PiUmXnw9IV09fDw8PT98Pj49P3w9PT18XFwuezEsM318Ojp8WyE9XX4iKSwKK1BBVFRFUk5TKCJydXN0IiwKKwkgIl5bXHQgXSooKHB1YihcXChbXlxcKV0rXFwpKT9bXHQgXSspPygoYXN5bmN8Y29uc3R8dW5zYWZlfGV4dGVybihbXHQgXStcIlteXCJdK1wiKSlbXHQgXSspPyhzdHJ1Y3R8ZW51bXx1bmlvbnxtb2R8dHJhaXR8Zm58aW1wbClbPCBcdF0rW147XSopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFswLTldWzAtOV9hLWZBLUZpb3N1eHpdKihcXC4oWzAtOV0qW2VFXVsrLV0/KT9bMC05X2ZGXSopPyIKKwkgInxbLSsqXFwvPD4lJl58PSE6XT18PDw9P3w+Pj0/fCYmfFxcfFxcfHwtPnw9PnxcXC57Mn09fFxcLnszfXw6OiIpLAorUEFUVEVSTlMoImJpYnRleCIsICIoQFthLXpBLVpdezEsfVsgXHRdKlxce3swLDF9WyBcdF0qW14gXHRcIkAnLFxcI317fiVdKikuKiQiLAorCSAiWz17fVwiXXxbXj17fVwiIFx0XSsiKSwKK1BBVFRFUk5TKCJ0ZXgiLCAiXihcXFxcKChzdWIpKnNlY3Rpb258Y2hhcHRlcnxwYXJ0KVxcKnswLDF9XFx7LiopJCIsCisJICJcXFxcW2EtekEtWkBdK3xcXFxcLnxbYS16QS1aMC05XHg4MC1ceGZmXSsiKSwKK1BBVFRFUk5TKCJjcHAiLAorCSAvKiBKdW1wIHRhcmdldHMgb3IgYWNjZXNzIGRlY2xhcmF0aW9ucyAqLworCSAiIV5bIFx0XSpbQS1aYS16X11bQS1aYS16XzAtOV0qOltbOnNwYWNlOl1dKigkfC9bLypdKVxuIgorCSAvKiBmdW5jdGlvbnMvbWV0aG9kcywgdmFyaWFibGVzLCBhbmQgY29tcG91bmRzIGF0IHRvcCBsZXZlbCAqLworCSAiXigoOjpbWzpzcGFjZTpdXSopP1tBLVphLXpfXS4qKSQiLAorCSAvKiAtLSAqLworCSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiIKKwkgInxbLSswLTkuZV0rW2ZGbExdP3wwW3hYYkJdP1swLTlhLWZBLUZdK1tsTHVVXSoiCisJICJ8Wy0rKi88PiUmXnw9IV09fC0tfFxcK1xcK3w8PD0/fD4+PT98JiZ8XFx8XFx8fDo6fC0+XFwqP3xcXC5cXCoiKSwKK1BBVFRFUk5TKCJjc2hhcnAiLAorCSAvKiBLZXl3b3JkcyAqLworCSAiIV5bIFx0XSooZG98d2hpbGV8Zm9yfGlmfGVsc2V8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHxjYXNlfHRocm93fGNhdGNofHVzaW5nKVxuIgorCSAvKiBNZXRob2RzIGFuZCBjb25zdHJ1Y3RvcnMgKi8KKwkgIl5bIFx0XSooKChzdGF0aWN8cHVibGljfGludGVybmFsfHByaXZhdGV8cHJvdGVjdGVkfG5ld3x2aXJ0dWFsfHNlYWxlZHxvdmVycmlkZXx1bnNhZmV8YXN5bmMpWyBcdF0rKSpbXVs8PkAufl9bOmFsbnVtOl1dK1sgXHRdK1s8PkAuX1s6YWxudW06XV0rWyBcdF0qXFwoLipcXCkpWyBcdF0qJFxuIgorCSAvKiBQcm9wZXJ0aWVzICovCisJICJeWyBcdF0qKCgoc3RhdGljfHB1YmxpY3xpbnRlcm5hbHxwcml2YXRlfHByb3RlY3RlZHxuZXd8dmlydHVhbHxzZWFsZWR8b3ZlcnJpZGV8dW5zYWZlKVsgXHRdKykqW11bPD5ALn5fWzphbG51bTpdXStbIFx0XStbQC5fWzphbG51bTpdXSspWyBcdF0qJFxuIgorCSAvKiBUeXBlIGRlZmluaXRpb25zICovCisJICJeWyBcdF0qKCgoc3RhdGljfHB1YmxpY3xpbnRlcm5hbHxwcml2YXRlfHByb3RlY3RlZHxuZXd8dW5zYWZlfHNlYWxlZHxhYnN0cmFjdHxwYXJ0aWFsKVsgXHRdKykqKGNsYXNzfGVudW18aW50ZXJmYWNlfHN0cnVjdClbIFx0XSsuKikkXG4iCisJIC8qIE5hbWVzcGFjZSAqLworCSAiXlsgXHRdKihuYW1lc3BhY2VbIFx0XSsuKikkIiwKKwkgLyogLS0gKi8KKwkgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiCisJICJ8Wy0rMC05LmVdK1tmRmxMXT98MFt4WGJCXT9bMC05YS1mQS1GXStbbExdPyIKKwkgInxbLSsqLzw+JSZefD0hXT18LS18XFwrXFwrfDw8PT98Pj49P3wmJnxcXHxcXHx8Ojp8LT4iKSwKK0lQQVRURVJOKCJjc3MiLAorCSAiIVs6O11bWzpzcGFjZTpdXSokXG4iCisJICJeW19hLXowLTldLiokIiwKKwkgLyogLS0gKi8KKwkgLyoKKwkgICogVGhpcyByZWdleCBjb21lcyBmcm9tIFczQyBDU1Mgc3BlY3MuIFNob3VsZCB0aGVvcmV0aWNhbGx5IGFsc28KKwkgICogYWxsb3cgSVNPIDEwNjQ2IGNoYXJhY3RlcnMgVSswMEEwIGFuZCBoaWdoZXIsCisJICAqIGJ1dCB0aGV5IGFyZSBub3QgaGFuZGxlZCBpbiB0aGlzIHJlZ2V4LgorCSAgKi8KKwkgIi0/W19hLXpBLVpdWy1fYS16QS1aMC05XSoiIC8qIGlkZW50aWZpZXJzICovCisJICJ8LT9bMC05XSt8XFwjWzAtOWEtZkEtRl0rIiAvKiBudW1iZXJzICovCispLAoreyAiZGVmYXVsdCIsIE5VTEwsIC0xLCB7IE5VTEwsIDAgfSB9LAorfTsKKyN1bmRlZiBQQVRURVJOUworI3VuZGVmIElQQVRURVJOCisKK3N0YXRpYyBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyIGRyaXZlcl90cnVlID0geworCSJkaWZmPXRydWUiLAorCU5VTEwsCisJMCwKKwl7IE5VTEwsIDAgfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgZHJpdmVyX2ZhbHNlID0geworCSIhZGlmZiIsCisJTlVMTCwKKwkxLAorCXsgTlVMTCwgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqdXNlcmRpZmZfZmluZF9ieV9uYW1lbGVuKGNvbnN0IGNoYXIgKmssIHNpemVfdCBsZW4pCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG5kcml2ZXJzOyBpKyspIHsKKwkJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJ2ID0gZHJpdmVycyArIGk7CisJCWlmICghc3RybmNtcChkcnYtPm5hbWUsIGssIGxlbikgJiYgIWRydi0+bmFtZVtsZW5dKQorCQkJcmV0dXJuIGRydjsKKwl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVpbHRpbl9kcml2ZXJzKTsgaSsrKSB7CisJCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRydiA9IGJ1aWx0aW5fZHJpdmVycyArIGk7CisJCWlmICghc3RybmNtcChkcnYtPm5hbWUsIGssIGxlbikgJiYgIWRydi0+bmFtZVtsZW5dKQorCQkJcmV0dXJuIGRydjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZnVuY25hbWUoc3RydWN0IHVzZXJkaWZmX2Z1bmNuYW1lICpmLCBjb25zdCBjaGFyICprLAorCQljb25zdCBjaGFyICp2LCBpbnQgY2ZsYWdzKQoreworCWlmIChnaXRfY29uZmlnX3N0cmluZygmZi0+cGF0dGVybiwgaywgdikgPCAwKQorCQlyZXR1cm4gLTE7CisJZi0+Y2ZsYWdzID0gY2ZsYWdzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX3RyaXN0YXRlKGludCAqYiwgY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdikKK3sKKwlpZiAodiAmJiAhc3RyY2FzZWNtcCh2LCAiYXV0byIpKQorCQkqYiA9IC0xOworCWVsc2UKKwkJKmIgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfYm9vbChpbnQgKmIsIGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYpCit7CisJKmIgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJcmV0dXJuIDA7Cit9CisKK2ludCB1c2VyZGlmZl9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdikKK3sKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcnY7CisJY29uc3QgY2hhciAqbmFtZSwgKnR5cGU7CisJc2l6ZV90IG5hbWVsZW47CisKKwlpZiAocGFyc2VfY29uZmlnX2tleShrLCAiZGlmZiIsICZuYW1lLCAmbmFtZWxlbiwgJnR5cGUpIHx8ICFuYW1lKQorCQlyZXR1cm4gMDsKKworCWRydiA9IHVzZXJkaWZmX2ZpbmRfYnlfbmFtZWxlbihuYW1lLCBuYW1lbGVuKTsKKwlpZiAoIWRydikgeworCQlBTExPQ19HUk9XKGRyaXZlcnMsIG5kcml2ZXJzKzEsIGRyaXZlcnNfYWxsb2MpOworCQlkcnYgPSAmZHJpdmVyc1tuZHJpdmVycysrXTsKKwkJbWVtc2V0KGRydiwgMCwgc2l6ZW9mKCpkcnYpKTsKKwkJZHJ2LT5uYW1lID0geG1lbWR1cHoobmFtZSwgbmFtZWxlbik7CisJCWRydi0+YmluYXJ5ID0gLTE7CisJfQorCisJaWYgKCFzdHJjbXAodHlwZSwgImZ1bmNuYW1lIikpCisJCXJldHVybiBwYXJzZV9mdW5jbmFtZSgmZHJ2LT5mdW5jbmFtZSwgaywgdiwgMCk7CisJaWYgKCFzdHJjbXAodHlwZSwgInhmdW5jbmFtZSIpKQorCQlyZXR1cm4gcGFyc2VfZnVuY25hbWUoJmRydi0+ZnVuY25hbWUsIGssIHYsIFJFR19FWFRFTkRFRCk7CisJaWYgKCFzdHJjbXAodHlwZSwgImJpbmFyeSIpKQorCQlyZXR1cm4gcGFyc2VfdHJpc3RhdGUoJmRydi0+YmluYXJ5LCBrLCB2KTsKKwlpZiAoIXN0cmNtcCh0eXBlLCAiY29tbWFuZCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRydi0+ZXh0ZXJuYWwsIGssIHYpOworCWlmICghc3RyY21wKHR5cGUsICJ0ZXh0Y29udiIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRydi0+dGV4dGNvbnYsIGssIHYpOworCWlmICghc3RyY21wKHR5cGUsICJjYWNoZXRleHRjb252IikpCisJCXJldHVybiBwYXJzZV9ib29sKCZkcnYtPnRleHRjb252X3dhbnRfY2FjaGUsIGssIHYpOworCWlmICghc3RyY21wKHR5cGUsICJ3b3JkcmVnZXgiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZkcnYtPndvcmRfcmVnZXgsIGssIHYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnVzZXJkaWZmX2ZpbmRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCWludCBsZW4gPSBzdHJsZW4obmFtZSk7CisJcmV0dXJuIHVzZXJkaWZmX2ZpbmRfYnlfbmFtZWxlbihuYW1lLCBsZW4pOworfQorCitzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp1c2VyZGlmZl9maW5kX2J5X3BhdGgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RhdGljIHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKKworCWlmICghY2hlY2spCisJCWNoZWNrID0gYXR0cl9jaGVja19pbml0bCgiZGlmZiIsIE5VTEwpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIE5VTEw7CisJZ2l0X2NoZWNrX2F0dHIoaXN0YXRlLCBwYXRoLCBjaGVjayk7CisKKwlpZiAoQVRUUl9UUlVFKGNoZWNrLT5pdGVtc1swXS52YWx1ZSkpCisJCXJldHVybiAmZHJpdmVyX3RydWU7CisJaWYgKEFUVFJfRkFMU0UoY2hlY2stPml0ZW1zWzBdLnZhbHVlKSkKKwkJcmV0dXJuICZkcml2ZXJfZmFsc2U7CisJaWYgKEFUVFJfVU5TRVQoY2hlY2stPml0ZW1zWzBdLnZhbHVlKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHVzZXJkaWZmX2ZpbmRfYnlfbmFtZShjaGVjay0+aXRlbXNbMF0udmFsdWUpOworfQorCitzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp1c2VyZGlmZl9nZXRfdGV4dGNvbnYoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICAgIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRyaXZlcikKK3sKKwlpZiAoIWRyaXZlci0+dGV4dGNvbnYpCisJCXJldHVybiBOVUxMOworCisJaWYgKGRyaXZlci0+dGV4dGNvbnZfd2FudF9jYWNoZSAmJiAhZHJpdmVyLT50ZXh0Y29udl9jYWNoZSkgeworCQlzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMgPSB4bWFsbG9jKHNpemVvZigqYykpOworCQlzdHJ1Y3Qgc3RyYnVmIG5hbWUgPSBTVFJCVUZfSU5JVDsKKworCQlzdHJidWZfYWRkZigmbmFtZSwgInRleHRjb252LyVzIiwgZHJpdmVyLT5uYW1lKTsKKwkJbm90ZXNfY2FjaGVfaW5pdChyLCBjLCBuYW1lLmJ1ZiwgZHJpdmVyLT50ZXh0Y29udik7CisJCWRyaXZlci0+dGV4dGNvbnZfY2FjaGUgPSBjOworCQlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CisJfQorCisJcmV0dXJuIGRyaXZlcjsKK30KZGlmZiAtLWdpdCBhL3VzZXJkaWZmLmggYi91c2VyZGlmZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMzA1N2UKLS0tIC9kZXYvbnVsbAorKysgYi91c2VyZGlmZi5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgVVNFUkRJRkZfSAorI2RlZmluZSBVU0VSRElGRl9ICisKKyNpbmNsdWRlICJub3Rlcy1jYWNoZS5oIgorCitzdHJ1Y3QgaW5kZXhfc3RhdGU7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKKworc3RydWN0IHVzZXJkaWZmX2Z1bmNuYW1lIHsKKwljb25zdCBjaGFyICpwYXR0ZXJuOworCWludCBjZmxhZ3M7Cit9OworCitzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmV4dGVybmFsOworCWludCBiaW5hcnk7CisJc3RydWN0IHVzZXJkaWZmX2Z1bmNuYW1lIGZ1bmNuYW1lOworCWNvbnN0IGNoYXIgKndvcmRfcmVnZXg7CisJY29uc3QgY2hhciAqdGV4dGNvbnY7CisJc3RydWN0IG5vdGVzX2NhY2hlICp0ZXh0Y29udl9jYWNoZTsKKwlpbnQgdGV4dGNvbnZfd2FudF9jYWNoZTsKK307CisKK2ludCB1c2VyZGlmZl9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdik7CitzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp1c2VyZGlmZl9maW5kX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CitzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp1c2VyZGlmZl9maW5kX2J5X3BhdGgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgpOworCisvKgorICogSW5pdGlhbGl6ZSBhbnkgdGV4dGNvbnYtcmVsYXRlZCBmaWVsZHMgaW4gdGhlIGRyaXZlciBhbmQgcmV0dXJuIGl0LCBvciBOVUxMCisgKiBpZiBpdCBkb2VzIG5vdCBoYXZlIHRleHRjb252IGVuYWJsZWQgYXQgYWxsLgorICovCitzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp1c2VyZGlmZl9nZXRfdGV4dGNvbnYoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICAgIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRyaXZlcik7CisKKyNlbmRpZiAvKiBVU0VSRElGRiAqLwpkaWZmIC0tZ2l0IGEvdXRmOC5jIGIvdXRmOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMzkzNjEKLS0tIC9kZXYvbnVsbAorKysgYi91dGY4LmMKQEAgLTAsMCArMSw4MTAgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisKKy8qIFRoaXMgY29kZSBpcyBvcmlnaW5hbGx5IGZyb20gaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy8gKi8KKworc3RhdGljIGNvbnN0IGNoYXIgdXRmMTZfYmVfYm9tW10gPSB7J1x4RkUnLCAnXHhGRid9Oworc3RhdGljIGNvbnN0IGNoYXIgdXRmMTZfbGVfYm9tW10gPSB7J1x4RkYnLCAnXHhGRSd9Oworc3RhdGljIGNvbnN0IGNoYXIgdXRmMzJfYmVfYm9tW10gPSB7J1wwJywgJ1wwJywgJ1x4RkUnLCAnXHhGRid9Oworc3RhdGljIGNvbnN0IGNoYXIgdXRmMzJfbGVfYm9tW10gPSB7J1x4RkYnLCAnXHhGRScsICdcMCcsICdcMCd9OworCitzdHJ1Y3QgaW50ZXJ2YWwgeworCXVjc19jaGFyX3QgZmlyc3Q7CisJdWNzX2NoYXJfdCBsYXN0OworfTsKKworc2l6ZV90IGRpc3BsYXlfbW9kZV9lc2Nfc2VxdWVuY2VfbGVuKGNvbnN0IGNoYXIgKnMpCit7CisJY29uc3QgY2hhciAqcCA9IHM7CisJaWYgKCpwKysgIT0gJ1wwMzMnKQorCQlyZXR1cm4gMDsKKwlpZiAoKnArKyAhPSAnWycpCisJCXJldHVybiAwOworCXdoaWxlIChpc2RpZ2l0KCpwKSB8fCAqcCA9PSAnOycpCisJCXArKzsKKwlpZiAoKnArKyAhPSAnbScpCisJCXJldHVybiAwOworCXJldHVybiBwIC0gczsKK30KKworLyogYXV4aWxpYXJ5IGZ1bmN0aW9uIGZvciBiaW5hcnkgc2VhcmNoIGluIGludGVydmFsIHRhYmxlICovCitzdGF0aWMgaW50IGJpc2VhcmNoKHVjc19jaGFyX3QgdWNzLCBjb25zdCBzdHJ1Y3QgaW50ZXJ2YWwgKnRhYmxlLCBpbnQgbWF4KQoreworCWludCBtaW4gPSAwOworCWludCBtaWQ7CisKKwlpZiAodWNzIDwgdGFibGVbMF0uZmlyc3QgfHwgdWNzID4gdGFibGVbbWF4XS5sYXN0KQorCQlyZXR1cm4gMDsKKwl3aGlsZSAobWF4ID49IG1pbikgeworCQltaWQgPSBtaW4gKyAobWF4IC0gbWluKSAvIDI7CisJCWlmICh1Y3MgPiB0YWJsZVttaWRdLmxhc3QpCisJCQltaW4gPSBtaWQgKyAxOworCQllbHNlIGlmICh1Y3MgPCB0YWJsZVttaWRdLmZpcnN0KQorCQkJbWF4ID0gbWlkIC0gMTsKKwkJZWxzZQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBkZWZpbmUgdGhlIGNvbHVtbiB3aWR0aCBvZiBhbiBJU08gMTA2NDYKKyAqIGNoYXJhY3RlciBhcyBmb2xsb3dzOgorICoKKyAqICAgIC0gVGhlIG51bGwgY2hhcmFjdGVyIChVKzAwMDApIGhhcyBhIGNvbHVtbiB3aWR0aCBvZiAwLgorICoKKyAqICAgIC0gT3RoZXIgQzAvQzEgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCBERUwgd2lsbCBsZWFkIHRvIGEgcmV0dXJuCisgKiAgICAgIHZhbHVlIG9mIC0xLgorICoKKyAqICAgIC0gTm9uLXNwYWNpbmcgYW5kIGVuY2xvc2luZyBjb21iaW5pbmcgY2hhcmFjdGVycyAoZ2VuZXJhbAorICogICAgICBjYXRlZ29yeSBjb2RlIE1uIG9yIE1lIGluIHRoZSBVbmljb2RlIGRhdGFiYXNlKSBoYXZlIGEKKyAqICAgICAgY29sdW1uIHdpZHRoIG9mIDAuCisgKgorICogICAgLSBTT0ZUIEhZUEhFTiAoVSswMEFEKSBoYXMgYSBjb2x1bW4gd2lkdGggb2YgMS4KKyAqCisgKiAgICAtIE90aGVyIGZvcm1hdCBjaGFyYWN0ZXJzIChnZW5lcmFsIGNhdGVnb3J5IGNvZGUgQ2YgaW4gdGhlIFVuaWNvZGUKKyAqICAgICAgZGF0YWJhc2UpIGFuZCBaRVJPIFdJRFRIIFNQQUNFIChVKzIwMEIpIGhhdmUgYSBjb2x1bW4gd2lkdGggb2YgMC4KKyAqCisgKiAgICAtIEhhbmd1bCBKYW1vIG1lZGlhbCB2b3dlbHMgYW5kIGZpbmFsIGNvbnNvbmFudHMgKFUrMTE2MC1VKzExRkYpCisgKiAgICAgIGhhdmUgYSBjb2x1bW4gd2lkdGggb2YgMC4KKyAqCisgKiAgICAtIFNwYWNpbmcgY2hhcmFjdGVycyBpbiB0aGUgRWFzdCBBc2lhbiBXaWRlIChXKSBvciBFYXN0IEFzaWFuCisgKiAgICAgIEZ1bGwtd2lkdGggKEYpIGNhdGVnb3J5IGFzIGRlZmluZWQgaW4gVW5pY29kZSBUZWNobmljYWwKKyAqICAgICAgUmVwb3J0ICMxMSBoYXZlIGEgY29sdW1uIHdpZHRoIG9mIDIuCisgKgorICogICAgLSBBbGwgcmVtYWluaW5nIGNoYXJhY3RlcnMgKGluY2x1ZGluZyBhbGwgcHJpbnRhYmxlCisgKiAgICAgIElTTyA4ODU5LTEgYW5kIFdHTDQgY2hhcmFjdGVycywgVW5pY29kZSBjb250cm9sIGNoYXJhY3RlcnMsCisgKiAgICAgIGV0Yy4pIGhhdmUgYSBjb2x1bW4gd2lkdGggb2YgMS4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB1Y3NfY2hhcl90IGNoYXJhY3RlcnMgYXJlIGVuY29kZWQKKyAqIGluIElTTyAxMDY0Ni4KKyAqLworCitzdGF0aWMgaW50IGdpdF93Y3dpZHRoKHVjc19jaGFyX3QgY2gpCit7CisJLyoKKwkgKiBTb3J0ZWQgbGlzdCBvZiBub24tb3ZlcmxhcHBpbmcgaW50ZXJ2YWxzIG9mIG5vbi1zcGFjaW5nIGNoYXJhY3RlcnMsCisJICovCisjaW5jbHVkZSAidW5pY29kZS13aWR0aC5oIgorCisJLyogdGVzdCBmb3IgOC1iaXQgY29udHJvbCBjaGFyYWN0ZXJzICovCisJaWYgKGNoID09IDApCisJCXJldHVybiAwOworCWlmIChjaCA8IDMyIHx8IChjaCA+PSAweDdmICYmIGNoIDwgMHhhMCkpCisJCXJldHVybiAtMTsKKworCS8qIGJpbmFyeSBzZWFyY2ggaW4gdGFibGUgb2Ygbm9uLXNwYWNpbmcgY2hhcmFjdGVycyAqLworCWlmIChiaXNlYXJjaChjaCwgemVyb193aWR0aCwgQVJSQVlfU0laRSh6ZXJvX3dpZHRoKSAtIDEpKQorCQlyZXR1cm4gMDsKKworCS8qIGJpbmFyeSBzZWFyY2ggaW4gdGFibGUgb2YgZG91YmxlIHdpZHRoIGNoYXJhY3RlcnMgKi8KKwlpZiAoYmlzZWFyY2goY2gsIGRvdWJsZV93aWR0aCwgQVJSQVlfU0laRShkb3VibGVfd2lkdGgpIC0gMSkpCisJCXJldHVybiAyOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBQaWNrIG9uZSB1Y3MgY2hhcmFjdGVyIHN0YXJ0aW5nIGZyb20gdGhlIGxvY2F0aW9uICpzdGFydCBwb2ludHMgYXQsCisgKiBhbmQgcmV0dXJuIGl0LCB3aGlsZSB1cGRhdGluZyB0aGUgKnN0YXJ0IHBvaW50ZXIgdG8gcG9pbnQgYXQgdGhlCisgKiBlbmQgb2YgdGhhdCBjaGFyYWN0ZXIuICBXaGVuIHJlbWFpbmRlcl9wIGlzIG5vdCBOVUxMLCB0aGUgbG9jYXRpb24KKyAqIGhvbGRzIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIGluIHRoZSBzdHJpbmcgdGhhdCB3ZSBhcmUgYWxsb3dlZAorICogdG8gcGljayBmcm9tLiAgT3RoZXJ3aXNlIHdlIGFyZSBhbGxvd2VkIHRvIHBpY2sgdXAgdG8gdGhlIE5VTCB0aGF0CisgKiB3b3VsZCBldmVudHVhbGx5IGFwcGVhciBpbiB0aGUgc3RyaW5nLiAgKnJlbWFpbmRlcl9wIGlzIGFsc28gcmVkdWNlZAorICogYnkgdGhlIG51bWJlciBvZiBieXRlcyB3ZSBoYXZlIGNvbnN1bWVkLgorICoKKyAqIElmIHRoZSBzdHJpbmcgd2FzIG5vdCBhIHZhbGlkIFVURi04LCAqc3RhcnQgcG9pbnRlciBpcyBzZXQgdG8gTlVMTAorICogYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkLgorICovCitzdGF0aWMgdWNzX2NoYXJfdCBwaWNrX29uZV91dGY4X2NoYXIoY29uc3QgY2hhciAqKnN0YXJ0LCBzaXplX3QgKnJlbWFpbmRlcl9wKQoreworCXVuc2lnbmVkIGNoYXIgKnMgPSAodW5zaWduZWQgY2hhciAqKSpzdGFydDsKKwl1Y3NfY2hhcl90IGNoOworCXNpemVfdCByZW1haW5kZXIsIGluY3I7CisKKwkvKgorCSAqIEEgY2FsbGVyIHRoYXQgYXNzdW1lcyBOVUwgdGVybWluYXRlZCB0ZXh0IGNhbiBjaG9vc2UKKwkgKiBub3QgdG8gYm90aGVyIHdpdGggdGhlIHJlbWFpbmRlciBsZW5ndGguICBXZSB3aWxsCisJICogc3RvcCBhdCB0aGUgZmlyc3QgTlVMLgorCSAqLworCXJlbWFpbmRlciA9IChyZW1haW5kZXJfcCA/ICpyZW1haW5kZXJfcCA6IDk5OSk7CisKKwlpZiAocmVtYWluZGVyIDwgMSkgeworCQlnb3RvIGludmFsaWQ7CisJfSBlbHNlIGlmICgqcyA8IDB4ODApIHsKKwkJLyogMHh4eHh4eHggKi8KKwkJY2ggPSAqczsKKwkJaW5jciA9IDE7CisJfSBlbHNlIGlmICgoc1swXSAmIDB4ZTApID09IDB4YzApIHsKKwkJLyogMTEwWFhYWHggMTB4eHh4eHggKi8KKwkJaWYgKHJlbWFpbmRlciA8IDIgfHwKKwkJICAgIChzWzFdICYgMHhjMCkgIT0gMHg4MCB8fAorCQkgICAgKHNbMF0gJiAweGZlKSA9PSAweGMwKQorCQkJZ290byBpbnZhbGlkOworCQljaCA9ICgoc1swXSAmIDB4MWYpIDw8IDYpIHwgKHNbMV0gJiAweDNmKTsKKwkJaW5jciA9IDI7CisJfSBlbHNlIGlmICgoc1swXSAmIDB4ZjApID09IDB4ZTApIHsKKwkJLyogMTExMFhYWFggMTBYeHh4eHggMTB4eHh4eHggKi8KKwkJaWYgKHJlbWFpbmRlciA8IDMgfHwKKwkJICAgIChzWzFdICYgMHhjMCkgIT0gMHg4MCB8fAorCQkgICAgKHNbMl0gJiAweGMwKSAhPSAweDgwIHx8CisJCSAgICAvKiBvdmVybG9uZz8gKi8KKwkJICAgIChzWzBdID09IDB4ZTAgJiYgKHNbMV0gJiAweGUwKSA9PSAweDgwKSB8fAorCQkgICAgLyogc3Vycm9nYXRlPyAqLworCQkgICAgKHNbMF0gPT0gMHhlZCAmJiAoc1sxXSAmIDB4ZTApID09IDB4YTApIHx8CisJCSAgICAvKiBVK0ZGRkUgb3IgVStGRkZGPyAqLworCQkgICAgKHNbMF0gPT0gMHhlZiAmJiBzWzFdID09IDB4YmYgJiYKKwkJICAgICAoc1syXSAmIDB4ZmUpID09IDB4YmUpKQorCQkJZ290byBpbnZhbGlkOworCQljaCA9ICgoc1swXSAmIDB4MGYpIDw8IDEyKSB8CisJCQkoKHNbMV0gJiAweDNmKSA8PCA2KSB8IChzWzJdICYgMHgzZik7CisJCWluY3IgPSAzOworCX0gZWxzZSBpZiAoKHNbMF0gJiAweGY4KSA9PSAweGYwKSB7CisJCS8qIDExMTEwWFhYIDEwWFh4eHh4IDEweHh4eHh4IDEweHh4eHh4ICovCisJCWlmIChyZW1haW5kZXIgPCA0IHx8CisJCSAgICAoc1sxXSAmIDB4YzApICE9IDB4ODAgfHwKKwkJICAgIChzWzJdICYgMHhjMCkgIT0gMHg4MCB8fAorCQkgICAgKHNbM10gJiAweGMwKSAhPSAweDgwIHx8CisJCSAgICAvKiBvdmVybG9uZz8gKi8KKwkJICAgIChzWzBdID09IDB4ZjAgJiYgKHNbMV0gJiAweGYwKSA9PSAweDgwKSB8fAorCQkgICAgLyogPiBVKzEwRkZGRj8gKi8KKwkJICAgIChzWzBdID09IDB4ZjQgJiYgc1sxXSA+IDB4OGYpIHx8IHNbMF0gPiAweGY0KQorCQkJZ290byBpbnZhbGlkOworCQljaCA9ICgoc1swXSAmIDB4MDcpIDw8IDE4KSB8ICgoc1sxXSAmIDB4M2YpIDw8IDEyKSB8CisJCQkoKHNbMl0gJiAweDNmKSA8PCA2KSB8IChzWzNdICYgMHgzZik7CisJCWluY3IgPSA0OworCX0gZWxzZSB7CitpbnZhbGlkOgorCQkqc3RhcnQgPSBOVUxMOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgKz0gaW5jcjsKKwlpZiAocmVtYWluZGVyX3ApCisJCSpyZW1haW5kZXJfcCA9IHJlbWFpbmRlciAtIGluY3I7CisJcmV0dXJuIGNoOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29sdW1ucyBvY2N1cGllZCBieSB0aGUgY2hhcmFjdGVyCisgKiBwb2ludGVkIHRvIGJ5IHRoZSB2YXJpYWJsZSBzdGFydC4gVGhlIHBvaW50ZXIgaXMgdXBkYXRlZCB0byBwb2ludCBhdAorICogdGhlIG5leHQgY2hhcmFjdGVyLiBXaGVuIHJlbWFpbmRlcl9wIGlzIG5vdCBOVUxMLCBpdCBwb2ludHMgYXQgdGhlCisgKiBsb2NhdGlvbiB0aGF0IHN0b3JlcyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBieXRlcyB3ZSBjYW4gdXNlIHRvIHBpY2sKKyAqIGEgY2hhcmFjdGVyIChzZWUgcGlja19vbmVfdXRmOF9jaGFyKCkgYWJvdmUpLgorICovCitpbnQgdXRmOF93aWR0aChjb25zdCBjaGFyICoqc3RhcnQsIHNpemVfdCAqcmVtYWluZGVyX3ApCit7CisJdWNzX2NoYXJfdCBjaCA9IHBpY2tfb25lX3V0ZjhfY2hhcihzdGFydCwgcmVtYWluZGVyX3ApOworCWlmICghKnN0YXJ0KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2l0X3djd2lkdGgoY2gpOworfQorCisvKgorICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgcmVxdWlyZWQgYnkgYSBudWxsLXRlcm1pbmF0ZWQKKyAqIHN0cmluZywgYXNzdW1pbmcgdGhhdCB0aGUgc3RyaW5nIGlzIHV0ZjguICBSZXR1cm5zIHN0cmxlbigpIGluc3RlYWQKKyAqIGlmIHRoZSBzdHJpbmcgZG9lcyBub3QgbG9vayBsaWtlIGEgdmFsaWQgdXRmOCBzdHJpbmcuCisgKi8KK2ludCB1dGY4X3N0cm53aWR0aChjb25zdCBjaGFyICpzdHJpbmcsIGludCBsZW4sIGludCBza2lwX2Fuc2kpCit7CisJaW50IHdpZHRoID0gMDsKKwljb25zdCBjaGFyICpvcmlnID0gc3RyaW5nOworCisJaWYgKGxlbiA9PSAtMSkKKwkJbGVuID0gc3RybGVuKHN0cmluZyk7CisJd2hpbGUgKHN0cmluZyAmJiBzdHJpbmcgPCBvcmlnICsgbGVuKSB7CisJCWludCBza2lwOworCQl3aGlsZSAoc2tpcF9hbnNpICYmCisJCSAgICAgICAoc2tpcCA9IGRpc3BsYXlfbW9kZV9lc2Nfc2VxdWVuY2VfbGVuKHN0cmluZykpICE9IDApCisJCQlzdHJpbmcgKz0gc2tpcDsKKwkJd2lkdGggKz0gdXRmOF93aWR0aCgmc3RyaW5nLCBOVUxMKTsKKwl9CisJcmV0dXJuIHN0cmluZyA/IHdpZHRoIDogbGVuOworfQorCitpbnQgdXRmOF9zdHJ3aWR0aChjb25zdCBjaGFyICpzdHJpbmcpCit7CisJcmV0dXJuIHV0Zjhfc3RybndpZHRoKHN0cmluZywgLTEsIDApOworfQorCitpbnQgaXNfdXRmOChjb25zdCBjaGFyICp0ZXh0KQoreworCXdoaWxlICgqdGV4dCkgeworCQlpZiAoKnRleHQgPT0gJ1xuJyB8fCAqdGV4dCA9PSAnXHQnIHx8ICp0ZXh0ID09ICdccicpIHsKKwkJCXRleHQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCXV0Zjhfd2lkdGgoJnRleHQsIE5VTEwpOworCQlpZiAoIXRleHQpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmJ1Zl9hZGRfaW5kZW50ZWRfdGV4dChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnRleHQsCisJCQkJICAgICBpbnQgaW5kZW50LCBpbnQgaW5kZW50MikKK3sKKwlpZiAoaW5kZW50IDwgMCkKKwkJaW5kZW50ID0gMDsKKwl3aGlsZSAoKnRleHQpIHsKKwkJY29uc3QgY2hhciAqZW9sID0gc3RyY2hybnVsKHRleHQsICdcbicpOworCQlpZiAoKmVvbCA9PSAnXG4nKQorCQkJZW9sKys7CisJCXN0cmJ1Zl9hZGRjaGFycyhidWYsICcgJywgaW5kZW50KTsKKwkJc3RyYnVmX2FkZChidWYsIHRleHQsIGVvbCAtIHRleHQpOworCQl0ZXh0ID0gZW9sOworCQlpbmRlbnQgPSBpbmRlbnQyOworCX0KK30KKworLyoKKyAqIFdyYXAgdGhlIHRleHQsIGlmIG5lY2Vzc2FyeS4gVGhlIHZhcmlhYmxlIGluZGVudCBpcyB0aGUgaW5kZW50IGZvciB0aGUKKyAqIGZpcnN0IGxpbmUsIGluZGVudDIgaXMgdGhlIGluZGVudCBmb3IgYWxsIG90aGVyIGxpbmVzLgorICogSWYgaW5kZW50IGlzIG5lZ2F0aXZlLCBhc3N1bWUgdGhhdCBhbHJlYWR5IC1pbmRlbnQgY29sdW1ucyBoYXZlIGJlZW4KKyAqIGNvbnN1bWVkIChhbmQgbm8gZXh0cmEgaW5kZW50IGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGZpcnN0IGxpbmUpLgorICovCit2b2lkIHN0cmJ1Zl9hZGRfd3JhcHBlZF90ZXh0KHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJY29uc3QgY2hhciAqdGV4dCwgaW50IGluZGVudDEsIGludCBpbmRlbnQyLCBpbnQgd2lkdGgpCit7CisJaW50IGluZGVudCwgdywgYXNzdW1lX3V0ZjggPSAxOworCWNvbnN0IGNoYXIgKmJvbCwgKnNwYWNlLCAqc3RhcnQgPSB0ZXh0OworCXNpemVfdCBvcmlnX2xlbiA9IGJ1Zi0+bGVuOworCisJaWYgKHdpZHRoIDw9IDApIHsKKwkJc3RyYnVmX2FkZF9pbmRlbnRlZF90ZXh0KGJ1ZiwgdGV4dCwgaW5kZW50MSwgaW5kZW50Mik7CisJCXJldHVybjsKKwl9CisKK3JldHJ5OgorCWJvbCA9IHRleHQ7CisJdyA9IGluZGVudCA9IGluZGVudDE7CisJc3BhY2UgPSBOVUxMOworCWlmIChpbmRlbnQgPCAwKSB7CisJCXcgPSAtaW5kZW50OworCQlzcGFjZSA9IHRleHQ7CisJfQorCisJZm9yICg7OykgeworCQljaGFyIGM7CisJCXNpemVfdCBza2lwOworCisJCXdoaWxlICgoc2tpcCA9IGRpc3BsYXlfbW9kZV9lc2Nfc2VxdWVuY2VfbGVuKHRleHQpKSkKKwkJCXRleHQgKz0gc2tpcDsKKworCQljID0gKnRleHQ7CisJCWlmICghYyB8fCBpc3NwYWNlKGMpKSB7CisJCQlpZiAodyA8PSB3aWR0aCB8fCAhc3BhY2UpIHsKKwkJCQljb25zdCBjaGFyICpzdGFydCA9IGJvbDsKKwkJCQlpZiAoIWMgJiYgdGV4dCA9PSBzdGFydCkKKwkJCQkJcmV0dXJuOworCQkJCWlmIChzcGFjZSkKKwkJCQkJc3RhcnQgPSBzcGFjZTsKKwkJCQllbHNlCisJCQkJCXN0cmJ1Zl9hZGRjaGFycyhidWYsICcgJywgaW5kZW50KTsKKwkJCQlzdHJidWZfYWRkKGJ1Ziwgc3RhcnQsIHRleHQgLSBzdGFydCk7CisJCQkJaWYgKCFjKQorCQkJCQlyZXR1cm47CisJCQkJc3BhY2UgPSB0ZXh0OworCQkJCWlmIChjID09ICdcdCcpCisJCQkJCXcgfD0gMHgwNzsKKwkJCQllbHNlIGlmIChjID09ICdcbicpIHsKKwkJCQkJc3BhY2UrKzsKKwkJCQkJaWYgKCpzcGFjZSA9PSAnXG4nKSB7CisJCQkJCQlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKwkJCQkJCWdvdG8gbmV3X2xpbmU7CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAoIWlzYWxudW0oKnNwYWNlKSkKKwkJCQkJCWdvdG8gbmV3X2xpbmU7CisJCQkJCWVsc2UKKwkJCQkJCXN0cmJ1Zl9hZGRjaChidWYsICcgJyk7CisJCQkJfQorCQkJCXcrKzsKKwkJCQl0ZXh0Kys7CisJCQl9CisJCQllbHNlIHsKK25ld19saW5lOgorCQkJCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOworCQkJCXRleHQgPSBib2wgPSBzcGFjZSArIGlzc3BhY2UoKnNwYWNlKTsKKwkJCQlzcGFjZSA9IE5VTEw7CisJCQkJdyA9IGluZGVudCA9IGluZGVudDI7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYXNzdW1lX3V0ZjgpIHsKKwkJCXcgKz0gdXRmOF93aWR0aCgmdGV4dCwgTlVMTCk7CisJCQlpZiAoIXRleHQpIHsKKwkJCQlhc3N1bWVfdXRmOCA9IDA7CisJCQkJdGV4dCA9IHN0YXJ0OworCQkJCXN0cmJ1Zl9zZXRsZW4oYnVmLCBvcmlnX2xlbik7CisJCQkJZ290byByZXRyeTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXcrKzsKKwkJCXRleHQrKzsKKwkJfQorCX0KK30KKwordm9pZCBzdHJidWZfYWRkX3dyYXBwZWRfYnl0ZXMoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuLAorCQkJICAgICBpbnQgaW5kZW50LCBpbnQgaW5kZW50MiwgaW50IHdpZHRoKQoreworCWNoYXIgKnRtcCA9IHhzdHJuZHVwKGRhdGEsIGxlbik7CisJc3RyYnVmX2FkZF93cmFwcGVkX3RleHQoYnVmLCB0bXAsIGluZGVudCwgaW5kZW50Miwgd2lkdGgpOworCWZyZWUodG1wKTsKK30KKwordm9pZCBzdHJidWZfdXRmOF9yZXBsYWNlKHN0cnVjdCBzdHJidWYgKnNiX3NyYywgaW50IHBvcywgaW50IHdpZHRoLAorCQkJIGNvbnN0IGNoYXIgKnN1YnN0KQoreworCXN0cnVjdCBzdHJidWYgc2JfZHN0ID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqc3JjID0gc2Jfc3JjLT5idWY7CisJY2hhciAqZW5kID0gc3JjICsgc2Jfc3JjLT5sZW47CisJY2hhciAqZHN0OworCWludCB3ID0gMCwgc3Vic3RfbGVuID0gMDsKKworCWlmIChzdWJzdCkKKwkJc3Vic3RfbGVuID0gc3RybGVuKHN1YnN0KTsKKwlzdHJidWZfZ3Jvdygmc2JfZHN0LCBzYl9zcmMtPmxlbiArIHN1YnN0X2xlbik7CisJZHN0ID0gc2JfZHN0LmJ1ZjsKKworCXdoaWxlIChzcmMgPCBlbmQpIHsKKwkJY2hhciAqb2xkOworCQlzaXplX3QgbjsKKworCQl3aGlsZSAoKG4gPSBkaXNwbGF5X21vZGVfZXNjX3NlcXVlbmNlX2xlbihzcmMpKSkgeworCQkJbWVtY3B5KGRzdCwgc3JjLCBuKTsKKwkJCXNyYyArPSBuOworCQkJZHN0ICs9IG47CisJCX0KKworCQlpZiAoc3JjID49IGVuZCkKKwkJCWJyZWFrOworCisJCW9sZCA9IHNyYzsKKwkJbiA9IHV0Zjhfd2lkdGgoKGNvbnN0IGNoYXIqKikmc3JjLCBOVUxMKTsKKwkJaWYgKCFzcmMpIAkvKiBicm9rZW4gdXRmLTgsIGRvIG5vdGhpbmcgKi8KKwkJCWdvdG8gb3V0OworCQlpZiAobiAmJiB3ID49IHBvcyAmJiB3IDwgcG9zICsgd2lkdGgpIHsKKwkJCWlmIChzdWJzdCkgeworCQkJCW1lbWNweShkc3QsIHN1YnN0LCBzdWJzdF9sZW4pOworCQkJCWRzdCArPSBzdWJzdF9sZW47CisJCQkJc3Vic3QgPSBOVUxMOworCQkJfQorCQkJdyArPSBuOworCQkJY29udGludWU7CisJCX0KKwkJbWVtY3B5KGRzdCwgb2xkLCBzcmMgLSBvbGQpOworCQlkc3QgKz0gc3JjIC0gb2xkOworCQl3ICs9IG47CisJfQorCXN0cmJ1Zl9zZXRsZW4oJnNiX2RzdCwgZHN0IC0gc2JfZHN0LmJ1Zik7CisJc3RyYnVmX3N3YXAoc2Jfc3JjLCAmc2JfZHN0KTsKK291dDoKKwlzdHJidWZfcmVsZWFzZSgmc2JfZHN0KTsKK30KKworLyoKKyAqIFJldHVybnMgdHJ1ZSAoMSkgaWYgdGhlIHNyYyBlbmNvZGluZyBuYW1lIG1hdGNoZXMgdGhlIGRzdCBlbmNvZGluZworICogbmFtZSBkaXJlY3RseSBvciBvbmUgb2YgaXRzIGFsdGVybmF0aXZlIG5hbWVzLiBFLmcuIFVURi0xNkJFIGlzIHRoZQorICogc2FtZSBhcyBVVEYxNkJFLgorICovCitzdGF0aWMgaW50IHNhbWVfdXRmX2VuY29kaW5nKGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0KQoreworCWlmIChza2lwX2lwcmVmaXgoc3JjLCAidXRmIiwgJnNyYykgJiYgc2tpcF9pcHJlZml4KGRzdCwgInV0ZiIsICZkc3QpKSB7CisJCXNraXBfcHJlZml4KHNyYywgIi0iLCAmc3JjKTsKKwkJc2tpcF9wcmVmaXgoZHN0LCAiLSIsICZkc3QpOworCQlyZXR1cm4gIXN0cmNhc2VjbXAoc3JjLCBkc3QpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGlzX2VuY29kaW5nX3V0ZjgoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoIW5hbWUpCisJCXJldHVybiAxOworCWlmIChzYW1lX3V0Zl9lbmNvZGluZygidXRmLTgiLCBuYW1lKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzYW1lX2VuY29kaW5nKGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0KQoreworCXN0YXRpYyBjb25zdCBjaGFyIHV0ZjhbXSA9ICJVVEYtOCI7CisKKwlpZiAoIXNyYykKKwkJc3JjID0gdXRmODsKKwlpZiAoIWRzdCkKKwkJZHN0ID0gdXRmODsKKwlpZiAoc2FtZV91dGZfZW5jb2Rpbmcoc3JjLCBkc3QpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gIXN0cmNhc2VjbXAoc3JjLCBkc3QpOworfQorCisvKgorICogV3JhcHBlciBmb3IgZnByaW50ZiBhbmQgcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgcmVxdWlyZWQKKyAqIGZvciB0aGUgcHJpbnRlZCBzdHJpbmcsIGFzc3VtaW5nIHRoYXQgdGhlIHN0cmluZyBpcyB1dGY4LgorICovCitpbnQgdXRmOF9mcHJpbnRmKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl2YV9saXN0IGFyZzsKKwlpbnQgY29sdW1uczsKKworCXZhX3N0YXJ0KGFyZywgZm9ybWF0KTsKKwlzdHJidWZfdmFkZGYoJmJ1ZiwgZm9ybWF0LCBhcmcpOworCXZhX2VuZChhcmcpOworCisJY29sdW1ucyA9IGZwdXRzKGJ1Zi5idWYsIHN0cmVhbSk7CisJaWYgKDAgPD0gY29sdW1ucykgLyoga2VlcCB0aGUgZXJyb3IgZnJvbSB0aGUgSS9PICovCisJCWNvbHVtbnMgPSB1dGY4X3N0cndpZHRoKGJ1Zi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiBjb2x1bW5zOworfQorCisvKgorICogR2l2ZW4gYSBidWZmZXIgYW5kIGl0cyBlbmNvZGluZywgcmV0dXJuIGl0IHJlLWVuY29kZWQKKyAqIHdpdGggaWNvbnYuICBJZiB0aGUgY29udmVyc2lvbiBmYWlscywgcmV0dXJucyBOVUxMLgorICovCisjaWZuZGVmIE5PX0lDT05WCisjaWYgZGVmaW5lZChPTERfSUNPTlYpIHx8IChkZWZpbmVkKF9fc3VuX18pICYmICFkZWZpbmVkKF9YUEc2KSkKKwl0eXBlZGVmIGNvbnN0IGNoYXIgKiBpY29udl9pYnA7CisjZWxzZQorCXR5cGVkZWYgY2hhciAqIGljb252X2licDsKKyNlbmRpZgorY2hhciAqcmVlbmNvZGVfc3RyaW5nX2ljb252KGNvbnN0IGNoYXIgKmluLCBzaXplX3QgaW5zeiwgaWNvbnZfdCBjb252LAorCQkJICAgIHNpemVfdCBib21fbGVuLCBzaXplX3QgKm91dHN6X3ApCit7CisJc2l6ZV90IG91dHN6LCBvdXRhbGxvYzsKKwljaGFyICpvdXQsICpvdXRwb3M7CisJaWNvbnZfaWJwIGNwOworCisJb3V0c3ogPSBpbnN6OworCW91dGFsbG9jID0gc3RfYWRkKG91dHN6LCAxICsgYm9tX2xlbik7IC8qIGZvciB0ZXJtaW5hdGluZyBOVUwgKi8KKwlvdXQgPSB4bWFsbG9jKG91dGFsbG9jKTsKKwlvdXRwb3MgPSBvdXQgKyBib21fbGVuOworCWNwID0gKGljb252X2licClpbjsKKworCXdoaWxlICgxKSB7CisJCXNpemVfdCBjbnQgPSBpY29udihjb252LCAmY3AsICZpbnN6LCAmb3V0cG9zLCAmb3V0c3opOworCisJCWlmIChjbnQgPT0gKHNpemVfdCkgLTEpIHsKKwkJCXNpemVfdCBzb2ZhcjsKKwkJCWlmIChlcnJubyAhPSBFMkJJRykgeworCQkJCWZyZWUob3V0KTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCS8qIGluc3ogaGFzIHJlbWFpbmluZyBudW1iZXIgb2YgYnl0ZXMuCisJCQkgKiBzaW5jZSB3ZSBzdGFydGVkIG91dHN6IHRoZSBzYW1lIGFzIGluc3osCisJCQkgKiBpdCBpcyBsaWtlbHkgdGhhdCBpbnN6IGlzIG5vdCBlbm91Z2ggZm9yCisJCQkgKiBjb252ZXJ0aW5nIHRoZSByZXN0LgorCQkJICovCisJCQlzb2ZhciA9IG91dHBvcyAtIG91dDsKKwkJCW91dGFsbG9jID0gc3RfYWRkMyhzb2Zhciwgc3RfbXVsdChpbnN6LCAyKSwgMzIpOworCQkJb3V0ID0geHJlYWxsb2Mob3V0LCBvdXRhbGxvYyk7CisJCQlvdXRwb3MgPSBvdXQgKyBzb2ZhcjsKKwkJCW91dHN6ID0gb3V0YWxsb2MgLSBzb2ZhciAtIDE7CisJCX0KKwkJZWxzZSB7CisJCQkqb3V0cG9zID0gJ1wwJzsKKwkJCWlmIChvdXRzel9wKQorCQkJCSpvdXRzel9wID0gb3V0cG9zIC0gb3V0OworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIG91dDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmZhbGxiYWNrX2VuY29kaW5nKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJLyoKKwkgKiBTb21lIHBsYXRmb3JtcyBkbyBub3QgaGF2ZSB0aGUgdmFyaW91c2x5IHNwZWxsZWQgdmFyaWFudHMgb2YKKwkgKiBVVEYtOCwgc28gbGV0J3MgZmFsbCBiYWNrIHRvIHRyeWluZyB0aGUgbW9zdCBvZmZpY2lhbAorCSAqIHNwZWxsaW5nLiBXZSBkbyBzbyBvbmx5IGFzIGEgZmFsbGJhY2sgaW4gY2FzZSB0aGUgcGxhdGZvcm0KKwkgKiBkb2VzIHVuZGVyc3RhbmQgdGhlIHVzZXIncyBzcGVsbGluZywgYnV0IG5vdCBvdXIgb2ZmaWNpYWwKKwkgKiBvbmUuCisJICovCisJaWYgKGlzX2VuY29kaW5nX3V0ZjgobmFtZSkpCisJCXJldHVybiAiVVRGLTgiOworCisJLyoKKwkgKiBFdmVuIHRob3VnaCBsYXRpbi0xIGlzIHN0aWxsIHNlZW4gaW4gZS1tYWlsCisJICogaGVhZGVycywgc29tZSBwbGF0Zm9ybXMgb25seSBpbnN0YWxsIElTTy04ODU5LTEuCisJICovCisJaWYgKCFzdHJjYXNlY21wKG5hbWUsICJsYXRpbi0xIikpCisJCXJldHVybiAiSVNPLTg4NTktMSI7CisKKwlyZXR1cm4gbmFtZTsKK30KKworY2hhciAqcmVlbmNvZGVfc3RyaW5nX2xlbihjb25zdCBjaGFyICppbiwgc2l6ZV90IGluc3osCisJCQkgIGNvbnN0IGNoYXIgKm91dF9lbmNvZGluZywgY29uc3QgY2hhciAqaW5fZW5jb2RpbmcsCisJCQkgIHNpemVfdCAqb3V0c3opCit7CisJaWNvbnZfdCBjb252OworCWNoYXIgKm91dDsKKwljb25zdCBjaGFyICpib21fc3RyID0gTlVMTDsKKwlzaXplX3QgYm9tX2xlbiA9IDA7CisKKwlpZiAoIWluX2VuY29kaW5nKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFVURi0xNkxFLUJPTSBpcyB0aGUgc2FtZSBhcyBVVEYtMTYgZm9yIHJlYWRpbmcgKi8KKwlpZiAoc2FtZV91dGZfZW5jb2RpbmcoIlVURi0xNkxFLUJPTSIsIGluX2VuY29kaW5nKSkKKwkJaW5fZW5jb2RpbmcgPSAiVVRGLTE2IjsKKworCS8qCisJICogRm9yIHdyaXRpbmcsIFVURi0xNiBpY29udiB0eXBpY2FsbHkgY3JlYXRlcyAiVVRGLTE2QkUtQk9NIgorCSAqIFNvbWUgdXNlcnMgdW5kZXIgV2luZG93cyB3YW50IHRoZSBsaXR0bGUgZW5kaWFuIHZlcnNpb24KKwkgKgorCSAqIFdlIGhhbmRsZSBVVEYtMTYgYW5kIFVURi0zMiBvdXJzZWx2ZXMgb25seSBpZiB0aGUgcGxhdGZvcm0gZG9lcyBub3QKKwkgKiBwcm92aWRlIGEgQk9NICh3aGljaCB3ZSByZXF1aXJlKSwgc2luY2Ugd2Ugd2FudCB0byBtYXRjaCB0aGUgYmVoYXZpb3IKKwkgKiBvZiB0aGUgc3lzdGVtIHRvb2xzIGFuZCBsaWJjIGFzIG11Y2ggYXMgcG9zc2libGUuCisJICovCisJaWYgKHNhbWVfdXRmX2VuY29kaW5nKCJVVEYtMTZMRS1CT00iLCBvdXRfZW5jb2RpbmcpKSB7CisJCWJvbV9zdHIgPSB1dGYxNl9sZV9ib207CisJCWJvbV9sZW4gPSBzaXplb2YodXRmMTZfbGVfYm9tKTsKKwkJb3V0X2VuY29kaW5nID0gIlVURi0xNkxFIjsKKwl9IGVsc2UgaWYgKHNhbWVfdXRmX2VuY29kaW5nKCJVVEYtMTZCRS1CT00iLCBvdXRfZW5jb2RpbmcpKSB7CisJCWJvbV9zdHIgPSB1dGYxNl9iZV9ib207CisJCWJvbV9sZW4gPSBzaXplb2YodXRmMTZfYmVfYm9tKTsKKwkJb3V0X2VuY29kaW5nID0gIlVURi0xNkJFIjsKKyNpZmRlZiBJQ09OVl9PTUlUU19CT00KKwl9IGVsc2UgaWYgKHNhbWVfdXRmX2VuY29kaW5nKCJVVEYtMTYiLCBvdXRfZW5jb2RpbmcpKSB7CisJCWJvbV9zdHIgPSB1dGYxNl9iZV9ib207CisJCWJvbV9sZW4gPSBzaXplb2YodXRmMTZfYmVfYm9tKTsKKwkJb3V0X2VuY29kaW5nID0gIlVURi0xNkJFIjsKKwl9IGVsc2UgaWYgKHNhbWVfdXRmX2VuY29kaW5nKCJVVEYtMzIiLCBvdXRfZW5jb2RpbmcpKSB7CisJCWJvbV9zdHIgPSB1dGYzMl9iZV9ib207CisJCWJvbV9sZW4gPSBzaXplb2YodXRmMzJfYmVfYm9tKTsKKwkJb3V0X2VuY29kaW5nID0gIlVURi0zMkJFIjsKKyNlbmRpZgorCX0KKworCWNvbnYgPSBpY29udl9vcGVuKG91dF9lbmNvZGluZywgaW5fZW5jb2RpbmcpOworCWlmIChjb252ID09IChpY29udl90KSAtMSkgeworCQlpbl9lbmNvZGluZyA9IGZhbGxiYWNrX2VuY29kaW5nKGluX2VuY29kaW5nKTsKKwkJb3V0X2VuY29kaW5nID0gZmFsbGJhY2tfZW5jb2Rpbmcob3V0X2VuY29kaW5nKTsKKworCQljb252ID0gaWNvbnZfb3BlbihvdXRfZW5jb2RpbmcsIGluX2VuY29kaW5nKTsKKwkJaWYgKGNvbnYgPT0gKGljb252X3QpIC0xKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCW91dCA9IHJlZW5jb2RlX3N0cmluZ19pY29udihpbiwgaW5zeiwgY29udiwgYm9tX2xlbiwgb3V0c3opOworCWljb252X2Nsb3NlKGNvbnYpOworCWlmIChvdXQgJiYgYm9tX3N0ciAmJiBib21fbGVuKQorCQltZW1jcHkob3V0LCBib21fc3RyLCBib21fbGVuKTsKKwlyZXR1cm4gb3V0OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaGFzX2JvbV9wcmVmaXgoY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiwKKwkJCSAgY29uc3QgY2hhciAqYm9tLCBzaXplX3QgYm9tX2xlbikKK3sKKwlyZXR1cm4gZGF0YSAmJiBib20gJiYgKGxlbiA+PSBib21fbGVuKSAmJiAhbWVtY21wKGRhdGEsIGJvbSwgYm9tX2xlbik7Cit9CisKK2ludCBoYXNfcHJvaGliaXRlZF91dGZfYm9tKGNvbnN0IGNoYXIgKmVuYywgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gKAorCSAgKHNhbWVfdXRmX2VuY29kaW5nKCJVVEYtMTZCRSIsIGVuYykgfHwKKwkgICBzYW1lX3V0Zl9lbmNvZGluZygiVVRGLTE2TEUiLCBlbmMpKSAmJgorCSAgKGhhc19ib21fcHJlZml4KGRhdGEsIGxlbiwgdXRmMTZfYmVfYm9tLCBzaXplb2YodXRmMTZfYmVfYm9tKSkgfHwKKwkgICBoYXNfYm9tX3ByZWZpeChkYXRhLCBsZW4sIHV0ZjE2X2xlX2JvbSwgc2l6ZW9mKHV0ZjE2X2xlX2JvbSkpKQorCSkgfHwgKAorCSAgKHNhbWVfdXRmX2VuY29kaW5nKCJVVEYtMzJCRSIsICBlbmMpIHx8CisJICAgc2FtZV91dGZfZW5jb2RpbmcoIlVURi0zMkxFIiwgZW5jKSkgJiYKKwkgIChoYXNfYm9tX3ByZWZpeChkYXRhLCBsZW4sIHV0ZjMyX2JlX2JvbSwgc2l6ZW9mKHV0ZjMyX2JlX2JvbSkpIHx8CisJICAgaGFzX2JvbV9wcmVmaXgoZGF0YSwgbGVuLCB1dGYzMl9sZV9ib20sIHNpemVvZih1dGYzMl9sZV9ib20pKSkKKwkpOworfQorCitpbnQgaXNfbWlzc2luZ19yZXF1aXJlZF91dGZfYm9tKGNvbnN0IGNoYXIgKmVuYywgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gKAorCSAgIChzYW1lX3V0Zl9lbmNvZGluZyhlbmMsICJVVEYtMTYiKSkgJiYKKwkgICAhKGhhc19ib21fcHJlZml4KGRhdGEsIGxlbiwgdXRmMTZfYmVfYm9tLCBzaXplb2YodXRmMTZfYmVfYm9tKSkgfHwKKwkgICAgIGhhc19ib21fcHJlZml4KGRhdGEsIGxlbiwgdXRmMTZfbGVfYm9tLCBzaXplb2YodXRmMTZfbGVfYm9tKSkpCisJKSB8fCAoCisJICAgKHNhbWVfdXRmX2VuY29kaW5nKGVuYywgIlVURi0zMiIpKSAmJgorCSAgICEoaGFzX2JvbV9wcmVmaXgoZGF0YSwgbGVuLCB1dGYzMl9iZV9ib20sIHNpemVvZih1dGYzMl9iZV9ib20pKSB8fAorCSAgICAgaGFzX2JvbV9wcmVmaXgoZGF0YSwgbGVuLCB1dGYzMl9sZV9ib20sIHNpemVvZih1dGYzMl9sZV9ib20pKSkKKwkpOworfQorCisvKgorICogUmV0dXJucyBmaXJzdCBjaGFyYWN0ZXIgbGVuZ3RoIGluIGJ5dGVzIGZvciBtdWx0aS1ieXRlIGB0ZXh0YCBhY2NvcmRpbmcgdG8KKyAqIGBlbmNvZGluZ2AuCisgKgorICogLSBUaGUgYHRleHRgIHBvaW50ZXIgaXMgdXBkYXRlZCB0byBwb2ludCBhdCB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgKiAtIFdoZW4gYHJlbWFpbmRlcl9wYCBpcyBub3QgTlVMTCwgb24gZW50cnkgYCpyZW1haW5kZXJfcGAgaXMgaG93IG11Y2ggYnl0ZXMKKyAqICAgd2UgY2FuIGNvbnN1bWUgZnJvbSB0ZXh0LCBhbmQgb24gZXhpdCBgKnJlbWFpbmRlcl9wYCBpcyByZWR1Y2VkIGJ5IHJldHVybmVkCisgKiAgIGNoYXJhY3RlciBsZW5ndGguIE90aGVyd2lzZSBgdGV4dGAgaXMgdHJlYXRlZCBhcyBsaW1pdGVkIGJ5IE5VTC4KKyAqLworaW50IG1ic19jaHJsZW4oY29uc3QgY2hhciAqKnRleHQsIHNpemVfdCAqcmVtYWluZGVyX3AsIGNvbnN0IGNoYXIgKmVuY29kaW5nKQoreworCWludCBjaHJsZW47CisJY29uc3QgY2hhciAqcCA9ICp0ZXh0OworCXNpemVfdCByID0gKHJlbWFpbmRlcl9wID8gKnJlbWFpbmRlcl9wIDogU0laRV9NQVgpOworCisJaWYgKHIgPCAxKQorCQlyZXR1cm4gMDsKKworCWlmIChpc19lbmNvZGluZ191dGY4KGVuY29kaW5nKSkgeworCQlwaWNrX29uZV91dGY4X2NoYXIoJnAsICZyKTsKKworCQljaHJsZW4gPSBwID8gKHAgLSAqdGV4dCkKKwkJCSAgIDogMSAvKiBub3QgdmFsaWQgVVRGLTggLT4gcmF3IGJ5dGUgc2VxdWVuY2UgKi87CisJfQorCWVsc2UgeworCQkvKgorCQkgKiBUT0RPIHVzZSBpY29udiB0byBkZWNvZGUgb25lIGNoYXIgYW5kIG9idGFpbiBpdHMgY2hybGVuCisJCSAqIGZvciBub3csIGxldCdzIHRyZWF0IGVuY29kaW5ncyAhPSBVVEYtOCBhcyBvbmUtYnl0ZQorCQkgKi8KKwkJY2hybGVuID0gMTsKKwl9CisKKwkqdGV4dCArPSBjaHJsZW47CisJaWYgKHJlbWFpbmRlcl9wKQorCQkqcmVtYWluZGVyX3AgLT0gY2hybGVuOworCisJcmV0dXJuIGNocmxlbjsKK30KKworLyoKKyAqIFBpY2sgdGhlIG5leHQgY2hhciBmcm9tIHRoZSBzdHJlYW0sIGlnbm9yaW5nIGNvZGVwb2ludHMgYW4gSEZTKyB3b3VsZC4KKyAqIE5vdGUgdGhhdCB0aGlzIGlzIF9ub3RfIGNvbXBsZXRlIGJ5IGFueSBtZWFucy4gSXQncyBqdXN0IGVub3VnaAorICogdG8gbWFrZSBpc19oZnNfZG90Z2l0KCkgd29yaywgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyB1Y3NfY2hhcl90IG5leHRfaGZzX2NoYXIoY29uc3QgY2hhciAqKmluKQoreworCXdoaWxlICgxKSB7CisJCXVjc19jaGFyX3Qgb3V0ID0gcGlja19vbmVfdXRmOF9jaGFyKGluLCBOVUxMKTsKKwkJLyoKKwkJICogY2hlY2sgZm9yIG1hbGZvcm1lZCB1dGY4LiBUZWNobmljYWxseSB0aGlzCisJCSAqIGdldHMgY29udmVydGVkIHRvIGEgcGVyY2VudC1zZXF1ZW5jZSwgYnV0CisJCSAqIHJldHVybmluZyAwIGlzIGdvb2QgZW5vdWdoIGZvciBpc19oZnNfZG90Z2l0CisJCSAqIHRvIHJlYWxpemUgaXQgY2Fubm90IGJlIC5naXQKKwkJICovCisJCWlmICghKmluKQorCQkJcmV0dXJuIDA7CisKKwkJLyogdGhlc2UgY29kZSBwb2ludHMgYXJlIGlnbm9yZWQgY29tcGxldGVseSAqLworCQlzd2l0Y2ggKG91dCkgeworCQljYXNlIDB4MjAwYzogLyogWkVSTyBXSURUSCBOT04tSk9JTkVSICovCisJCWNhc2UgMHgyMDBkOiAvKiBaRVJPIFdJRFRIIEpPSU5FUiAqLworCQljYXNlIDB4MjAwZTogLyogTEVGVC1UTy1SSUdIVCBNQVJLICovCisJCWNhc2UgMHgyMDBmOiAvKiBSSUdIVC1UTy1MRUZUIE1BUksgKi8KKwkJY2FzZSAweDIwMmE6IC8qIExFRlQtVE8tUklHSFQgRU1CRURESU5HICovCisJCWNhc2UgMHgyMDJiOiAvKiBSSUdIVC1UTy1MRUZUIEVNQkVERElORyAqLworCQljYXNlIDB4MjAyYzogLyogUE9QIERJUkVDVElPTkFMIEZPUk1BVFRJTkcgKi8KKwkJY2FzZSAweDIwMmQ6IC8qIExFRlQtVE8tUklHSFQgT1ZFUlJJREUgKi8KKwkJY2FzZSAweDIwMmU6IC8qIFJJR0hULVRPLUxFRlQgT1ZFUlJJREUgKi8KKwkJY2FzZSAweDIwNmE6IC8qIElOSElCSVQgU1lNTUVUUklDIFNXQVBQSU5HICovCisJCWNhc2UgMHgyMDZiOiAvKiBBQ1RJVkFURSBTWU1NRVRSSUMgU1dBUFBJTkcgKi8KKwkJY2FzZSAweDIwNmM6IC8qIElOSElCSVQgQVJBQklDIEZPUk0gU0hBUElORyAqLworCQljYXNlIDB4MjA2ZDogLyogQUNUSVZBVEUgQVJBQklDIEZPUk0gU0hBUElORyAqLworCQljYXNlIDB4MjA2ZTogLyogTkFUSU9OQUwgRElHSVQgU0hBUEVTICovCisJCWNhc2UgMHgyMDZmOiAvKiBOT01JTkFMIERJR0lUIFNIQVBFUyAqLworCQljYXNlIDB4ZmVmZjogLyogWkVSTyBXSURUSCBOTy1CUkVBSyBTUEFDRSAqLworCQkJY29udGludWU7CisJCX0KKworCQlyZXR1cm4gb3V0OworCX0KK30KKworc3RhdGljIGludCBpc19oZnNfZG90X2dlbmVyaWMoY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5lZWRsZSwgc2l6ZV90IG5lZWRsZV9sZW4pCit7CisJdWNzX2NoYXJfdCBjOworCisJYyA9IG5leHRfaGZzX2NoYXIoJnBhdGgpOworCWlmIChjICE9ICcuJykKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIHRoZXJlJ3MgYSBncmVhdCBkZWFsIG9mIG90aGVyIGNhc2UtZm9sZGluZyB0aGF0IG9jY3VycworCSAqIGluIEhGUyssIGJ1dCB0aGlzIGlzIGVub3VnaCB0byBjYXRjaCBvdXIgZmFpcmx5IHZhbmlsbGEKKwkgKiBoYXJkLWNvZGVkIG5lZWRsZXMuCisJICovCisJZm9yICg7IG5lZWRsZV9sZW4gPiAwOyBuZWVkbGUrKywgbmVlZGxlX2xlbi0tKSB7CisJCWMgPSBuZXh0X2hmc19jaGFyKCZwYXRoKTsKKworCQkvKgorCQkgKiBXZSBrbm93IG91ciBuZWVkbGVzIGNvbnRhaW4gb25seSBBU0NJSSwgc28gd2UgY2xhbXAgaGVyZSB0bworCQkgKiBtYWtlIHRoZSByZXN1bHRzIG9mIHRvbG93ZXIoKSBzYW5lLgorCQkgKi8KKwkJaWYgKGMgPiAxMjcpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHRvbG93ZXIoYykgIT0gKm5lZWRsZSkKKwkJCXJldHVybiAwOworCX0KKworCWMgPSBuZXh0X2hmc19jaGFyKCZwYXRoKTsKKwlpZiAoYyAmJiAhaXNfZGlyX3NlcChjKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIElubGluZSB3cmFwcGVyIHRvIG1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgcmVzb2x2ZXMgc3RybGVuKCkgb24gbGl0ZXJhbHMgYXQKKyAqIGNvbXBpbGUgdGltZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfaGZzX2RvdF9zdHIoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbmVlZGxlKQoreworCXJldHVybiBpc19oZnNfZG90X2dlbmVyaWMocGF0aCwgbmVlZGxlLCBzdHJsZW4obmVlZGxlKSk7Cit9CisKK2ludCBpc19oZnNfZG90Z2l0KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIGlzX2hmc19kb3Rfc3RyKHBhdGgsICJnaXQiKTsKK30KKworaW50IGlzX2hmc19kb3RnaXRtb2R1bGVzKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIGlzX2hmc19kb3Rfc3RyKHBhdGgsICJnaXRtb2R1bGVzIik7Cit9CisKK2ludCBpc19oZnNfZG90Z2l0aWdub3JlKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIGlzX2hmc19kb3Rfc3RyKHBhdGgsICJnaXRpZ25vcmUiKTsKK30KKworaW50IGlzX2hmc19kb3RnaXRhdHRyaWJ1dGVzKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIGlzX2hmc19kb3Rfc3RyKHBhdGgsICJnaXRhdHRyaWJ1dGVzIik7Cit9CisKK2NvbnN0IGNoYXIgdXRmOF9ib21bXSA9ICJcMzU3XDI3M1wyNzciOworCitpbnQgc2tpcF91dGY4X2JvbShjaGFyICoqdGV4dCwgc2l6ZV90IGxlbikKK3sKKwlpZiAobGVuIDwgc3RybGVuKHV0ZjhfYm9tKSB8fAorCSAgICBtZW1jbXAoKnRleHQsIHV0ZjhfYm9tLCBzdHJsZW4odXRmOF9ib20pKSkKKwkJcmV0dXJuIDA7CisJKnRleHQgKz0gc3RybGVuKHV0ZjhfYm9tKTsKKwlyZXR1cm4gMTsKK30KKwordm9pZCBzdHJidWZfdXRmOF9hbGlnbihzdHJ1Y3Qgc3RyYnVmICpidWYsIGFsaWduX3R5cGUgcG9zaXRpb24sIHVuc2lnbmVkIGludCB3aWR0aCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnMpCit7CisJaW50IHNsZW4gPSBzdHJsZW4ocyk7CisJaW50IGRpc3BsYXlfbGVuID0gdXRmOF9zdHJud2lkdGgocywgc2xlbiwgMCk7CisJaW50IHV0ZjhfY29tcGVuc2F0aW9uID0gc2xlbiAtIGRpc3BsYXlfbGVuOworCisJaWYgKGRpc3BsYXlfbGVuID49IHdpZHRoKSB7CisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBzKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwb3NpdGlvbiA9PSBBTElHTl9MRUZUKQorCQlzdHJidWZfYWRkZihidWYsICIlLSpzIiwgd2lkdGggKyB1dGY4X2NvbXBlbnNhdGlvbiwgcyk7CisJZWxzZSBpZiAocG9zaXRpb24gPT0gQUxJR05fTUlERExFKSB7CisJCWludCBsZWZ0ID0gKHdpZHRoIC0gZGlzcGxheV9sZW4pIC8gMjsKKwkJc3RyYnVmX2FkZGYoYnVmLCAiJSpzJS0qcyIsIGxlZnQsICIiLCB3aWR0aCAtIGxlZnQgKyB1dGY4X2NvbXBlbnNhdGlvbiwgcyk7CisJfSBlbHNlIGlmIChwb3NpdGlvbiA9PSBBTElHTl9SSUdIVCkKKwkJc3RyYnVmX2FkZGYoYnVmLCAiJSpzIiwgd2lkdGggKyB1dGY4X2NvbXBlbnNhdGlvbiwgcyk7Cit9CmRpZmYgLS1naXQgYS91dGY4LmggYi91dGY4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNkNTE2NwotLS0gL2Rldi9udWxsCisrKyBiL3V0ZjguaApAQCAtMCwwICsxLDEwOCBAQAorI2lmbmRlZiBHSVRfVVRGOF9ICisjZGVmaW5lIEdJVF9VVEY4X0gKKworc3RydWN0IHN0cmJ1ZjsKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdWNzX2NoYXJfdDsgIC8qIGFzc3VtaW5nIDMyYml0IGludCAqLworCitzaXplX3QgZGlzcGxheV9tb2RlX2VzY19zZXF1ZW5jZV9sZW4oY29uc3QgY2hhciAqcyk7CitpbnQgdXRmOF93aWR0aChjb25zdCBjaGFyICoqc3RhcnQsIHNpemVfdCAqcmVtYWluZGVyX3ApOworaW50IHV0Zjhfc3RybndpZHRoKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGxlbiwgaW50IHNraXBfYW5zaSk7CitpbnQgdXRmOF9zdHJ3aWR0aChjb25zdCBjaGFyICpzdHJpbmcpOworaW50IGlzX3V0ZjgoY29uc3QgY2hhciAqdGV4dCk7CitpbnQgaXNfZW5jb2RpbmdfdXRmOChjb25zdCBjaGFyICpuYW1lKTsKK2ludCBzYW1lX2VuY29kaW5nKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCitpbnQgdXRmOF9mcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOworCitleHRlcm4gY29uc3QgY2hhciB1dGY4X2JvbVtdOworaW50IHNraXBfdXRmOF9ib20oY2hhciAqKiwgc2l6ZV90KTsKKwordm9pZCBzdHJidWZfYWRkX3dyYXBwZWRfdGV4dChzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCWNvbnN0IGNoYXIgKnRleHQsIGludCBpbmRlbnQsIGludCBpbmRlbnQyLCBpbnQgd2lkdGgpOwordm9pZCBzdHJidWZfYWRkX3dyYXBwZWRfYnl0ZXMoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuLAorCQkJICAgICBpbnQgaW5kZW50LCBpbnQgaW5kZW50MiwgaW50IHdpZHRoKTsKK3ZvaWQgc3RyYnVmX3V0ZjhfcmVwbGFjZShzdHJ1Y3Qgc3RyYnVmICpzYiwgaW50IHBvcywgaW50IHdpZHRoLAorCQkJIGNvbnN0IGNoYXIgKnN1YnN0KTsKKworI2lmbmRlZiBOT19JQ09OVgorY2hhciAqcmVlbmNvZGVfc3RyaW5nX2ljb252KGNvbnN0IGNoYXIgKmluLCBzaXplX3QgaW5zeiwKKwkJCSAgICBpY29udl90IGNvbnYsIHNpemVfdCBib21fbGVuLCBzaXplX3QgKm91dHN6KTsKK2NoYXIgKnJlZW5jb2RlX3N0cmluZ19sZW4oY29uc3QgY2hhciAqaW4sIHNpemVfdCBpbnN6LAorCQkJICBjb25zdCBjaGFyICpvdXRfZW5jb2RpbmcsCisJCQkgIGNvbnN0IGNoYXIgKmluX2VuY29kaW5nLAorCQkJICBzaXplX3QgKm91dHN6KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGNoYXIgKnJlZW5jb2RlX3N0cmluZ19sZW4oY29uc3QgY2hhciAqYSwgc2l6ZV90IGIsCisJCQkJCWNvbnN0IGNoYXIgKmMsIGNvbnN0IGNoYXIgKmQsIHNpemVfdCAqZSkKK3sgaWYgKGUpICplID0gMDsgcmV0dXJuIE5VTEw7IH0KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGNoYXIgKnJlZW5jb2RlX3N0cmluZyhjb25zdCBjaGFyICppbiwKKwkJCQkgICAgY29uc3QgY2hhciAqb3V0X2VuY29kaW5nLAorCQkJCSAgICBjb25zdCBjaGFyICppbl9lbmNvZGluZykKK3sKKwlyZXR1cm4gcmVlbmNvZGVfc3RyaW5nX2xlbihpbiwgc3RybGVuKGluKSwKKwkJCQkgICBvdXRfZW5jb2RpbmcsIGluX2VuY29kaW5nLAorCQkJCSAgIE5VTEwpOworfQorCitpbnQgbWJzX2Nocmxlbihjb25zdCBjaGFyICoqdGV4dCwgc2l6ZV90ICpyZW1haW5kZXJfcCwgY29uc3QgY2hhciAqZW5jb2RpbmcpOworCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXRoIHdvdWxkIG1hdGNoICIuZ2l0IiBhZnRlciBIRlMgY2FzZS1mb2xkaW5nLgorICogVGhlIHBhdGggc2hvdWxkIGJlIE5VTC10ZXJtaW5hdGVkLCBidXQgd2Ugd2lsbCBtYXRjaCB2YXJpYW50cyBvZiBib3RoICIuZ2l0XDAiCisgKiBhbmQgIi5naXQvLi4uIiAoYnV0IF9ub3RfICIuLi4vLmdpdCIpLiBUaGlzIG1ha2VzIGl0IHN1aXRhYmxlIGZvciBib3RoIGZzY2sKKyAqIGFuZCB2ZXJpZnlfcGF0aCgpLgorICoKKyAqIExpa2V3aXNlLCB0aGUgaXNfaGZzX2RvdGdpdGZvbygpIHZhcmlhbnRzIGxvb2sgZm9yICIuZ2l0Zm9vIi4KKyAqLworaW50IGlzX2hmc19kb3RnaXQoY29uc3QgY2hhciAqcGF0aCk7CitpbnQgaXNfaGZzX2RvdGdpdG1vZHVsZXMoY29uc3QgY2hhciAqcGF0aCk7CitpbnQgaXNfaGZzX2RvdGdpdGlnbm9yZShjb25zdCBjaGFyICpwYXRoKTsKK2ludCBpc19oZnNfZG90Z2l0YXR0cmlidXRlcyhjb25zdCBjaGFyICpwYXRoKTsKKwordHlwZWRlZiBlbnVtIHsKKwlBTElHTl9MRUZULAorCUFMSUdOX01JRERMRSwKKwlBTElHTl9SSUdIVAorfSBhbGlnbl90eXBlOworCisvKgorICogQWxpZ24gdGhlIHN0cmluZyBnaXZlbiBhbmQgc3RvcmUgaXQgaW50byBhIHN0cmJ1ZiBhcyBwZXIgdGhlCisgKiAncG9zaXRpb24nIGFuZCAnd2lkdGgnLiBJZiB0aGUgZ2l2ZW4gc3RyaW5nIGxlbmd0aCBpcyBsYXJnZXIgdGhhbgorICogJ3dpZHRoJyB0aGFuIHRoZW4gdGhlIGlucHV0IHN0cmluZyBpcyBub3QgdHJ1bmNhdGVkIGFuZCBubworICogYWxpZ25tZW50IGlzIGRvbmUuCisgKi8KK3ZvaWQgc3RyYnVmX3V0ZjhfYWxpZ24oc3RydWN0IHN0cmJ1ZiAqYnVmLCBhbGlnbl90eXBlIHBvc2l0aW9uLCB1bnNpZ25lZCBpbnQgd2lkdGgsCisJCSAgICAgICBjb25zdCBjaGFyICpzKTsKKworLyoKKyAqIElmIGEgZGF0YSBzdHJlYW0gaXMgZGVjbGFyZWQgYXMgVVRGLTE2QkUgb3IgVVRGLTE2TEUsIHRoZW4gYSBVVEYtMTYKKyAqIEJPTSBtdXN0IG5vdCBiZSB1c2VkIFsxXS4gVGhlIHNhbWUgYXBwbGllcyBmb3IgdGhlIFVURi0zMiBlcXVpdmFsZW50cy4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhpcyBydWxlIGlzIHZpb2xhdGVkLgorICoKKyAqIFsxXSBodHRwOi8vdW5pY29kZS5vcmcvZmFxL3V0Zl9ib20uaHRtbCNib20xMAorICovCitpbnQgaGFzX3Byb2hpYml0ZWRfdXRmX2JvbShjb25zdCBjaGFyICplbmMsIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pOworCisvKgorICogSWYgdGhlIGVuZGlhbm5lc3MgaXMgbm90IGRlZmluZWQgaW4gdGhlIGVuY29kaW5nIG5hbWUsIHRoZW4gd2UKKyAqIHJlcXVpcmUgYSBCT00uIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgYSByZXF1aXJlZCBCT00gaXMgbWlzc2luZy4KKyAqCisgKiBUaGUgVW5pY29kZSBzdGFuZGFyZCBpbnN0cnVjdHMgdG8gYXNzdW1lIGJpZy1lbmRpYW4gaWYgdGhlcmUgaW4gbm8KKyAqIEJPTSBmb3IgVVRGLTE2LzMyIFsxXVsyXS4gSG93ZXZlciwgdGhlIFczQy9XSEFUV0cgZW5jb2Rpbmcgc3RhbmRhcmQKKyAqIHVzZWQgaW4gSFRNTDUgcmVjb21tZW5kcyB0byBhc3N1bWUgbGl0dGxlLWVuZGlhbiB0byAiZGVhbCB3aXRoCisgKiBkZXBsb3llZCBjb250ZW50IiBbM10uCisgKgorICogVGhlcmVmb3JlLCBzdHJpY3RseSByZXF1aXJpbmcgYSBCT00gc2VlbXMgdG8gYmUgdGhlIHNhZmVzdCBvcHRpb24gZm9yCisgKiBjb250ZW50IGluIEdpdC4KKyAqCisgKiBbMV0gaHR0cDovL3VuaWNvZGUub3JnL2ZhcS91dGZfYm9tLmh0bWwjZ2VuNgorICogWzJdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvdmVyc2lvbnMvVW5pY29kZTEwLjAuMC9jaDAzLnBkZgorICogICAgIFNlY3Rpb24gMy4xMCwgRDk4LCBwYWdlIDEzMgorICogWzNdIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtMTZsZQorICovCitpbnQgaXNfbWlzc2luZ19yZXF1aXJlZF91dGZfYm9tKGNvbnN0IGNoYXIgKmVuYywgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmFyaW50LmMgYi92YXJpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDljNDk3Ci0tLSAvZGV2L251bGwKKysrIGIvdmFyaW50LmMKQEAgLTAsMCArMSwzMCBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInZhcmludC5oIgorCit1aW50bWF4X3QgZGVjb2RlX3ZhcmludChjb25zdCB1bnNpZ25lZCBjaGFyICoqYnVmcCkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpidWYgPSAqYnVmcDsKKwl1bnNpZ25lZCBjaGFyIGMgPSAqYnVmKys7CisJdWludG1heF90IHZhbCA9IGMgJiAxMjc7CisJd2hpbGUgKGMgJiAxMjgpIHsKKwkJdmFsICs9IDE7CisJCWlmICghdmFsIHx8IE1TQih2YWwsIDcpKQorCQkJcmV0dXJuIDA7IC8qIG92ZXJmbG93ICovCisJCWMgPSAqYnVmKys7CisJCXZhbCA9ICh2YWwgPDwgNykgKyAoYyAmIDEyNyk7CisJfQorCSpidWZwID0gYnVmOworCXJldHVybiB2YWw7Cit9CisKK2ludCBlbmNvZGVfdmFyaW50KHVpbnRtYXhfdCB2YWx1ZSwgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXVuc2lnbmVkIGNoYXIgdmFyaW50WzE2XTsKKwl1bnNpZ25lZCBwb3MgPSBzaXplb2YodmFyaW50KSAtIDE7CisJdmFyaW50W3Bvc10gPSB2YWx1ZSAmIDEyNzsKKwl3aGlsZSAodmFsdWUgPj49IDcpCisJCXZhcmludFstLXBvc10gPSAxMjggfCAoLS12YWx1ZSAmIDEyNyk7CisJaWYgKGJ1ZikKKwkJbWVtY3B5KGJ1ZiwgdmFyaW50ICsgcG9zLCBzaXplb2YodmFyaW50KSAtIHBvcyk7CisJcmV0dXJuIHNpemVvZih2YXJpbnQpIC0gcG9zOworfQpkaWZmIC0tZ2l0IGEvdmFyaW50LmggYi92YXJpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzhiYjBjCi0tLSAvZGV2L251bGwKKysrIGIvdmFyaW50LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIFZBUklOVF9ICisjZGVmaW5lIFZBUklOVF9ICisKK2ludCBlbmNvZGVfdmFyaW50KHVpbnRtYXhfdCwgdW5zaWduZWQgY2hhciAqKTsKK3VpbnRtYXhfdCBkZWNvZGVfdmFyaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKiopOworCisjZW5kaWYgLyogVkFSSU5UX0ggKi8KZGlmZiAtLWdpdCBhL3Zjcy1zdm4vTElDRU5TRSBiL3Zjcy1zdm4vTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjkxODU4Ci0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9MSUNFTlNFCkBAIC0wLDAgKzEsMzIgQEAKK0NvcHlyaWdodCAoQykgMjAxMCBEYXZpZCBCYXJyIDxkYXZpZC5iYXJyQGNvcmRlbHRhLmNvbT4uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitDb3B5cmlnaHQgKEMpIDIwMTAgSm9uYXRoYW4gTmllZGVyIDxqcm5pZWRlckBnbWFpbC5jb20+LgorCitDb3B5cmlnaHQgKEMpIDIwMDUgU3RlZmFuIEhlZ255LCBoeWRyb2dyYWZpeCBDb25zdWx0aW5nIEdtYkgsCitGcmFua2Z1cnQvTWFpbiwgR2VybWFueQorYW5kIG90aGVycywgc2VlIGh0dHA6Ly9zdm4yY2Muc2Fyb3Zhci5vcmcKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlKHMpLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgICB1bm1vZGlmaWVkIG90aGVyIHRoYW4gdGhlIGFsbG93YWJsZSBhZGRpdGlvbiBvZiBvbmUgb3IgbW9yZQorICAgY29weXJpZ2h0IG5vdGljZXMuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlKHMpLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgYGBBUyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKK0VWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS92Y3Mtc3ZuL2Zhc3RfZXhwb3J0LmMgYi92Y3Mtc3ZuL2Zhc3RfZXhwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViODkxMwotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vZmFzdF9leHBvcnQuYwpAQCAtMCwwICsxLDM2NSBAQAorLyoKKyAqIExpY2Vuc2VkIHVuZGVyIGEgdHdvLWNsYXVzZSBCU0Qtc3R5bGUgbGljZW5zZS4KKyAqIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiZmFzdF9leHBvcnQuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJzdm5kaWZmLmgiCisjaW5jbHVkZSAic2xpZGluZ193aW5kb3cuaCIKKyNpbmNsdWRlICJsaW5lX2J1ZmZlci5oIgorCisjZGVmaW5lIE1BWF9HSVRTVk5fTElORV9MRU4gNDA5NgorCitzdGF0aWMgdWludDMyX3QgZmlyc3RfY29tbWl0X2RvbmU7CitzdGF0aWMgc3RydWN0IGxpbmVfYnVmZmVyIHBvc3RpbWFnZSA9IExJTkVfQlVGRkVSX0lOSVQ7CitzdGF0aWMgc3RydWN0IGxpbmVfYnVmZmVyIHJlcG9ydF9idWZmZXIgPSBMSU5FX0JVRkZFUl9JTklUOworCisvKiBORUVEU1dPUks6IG1vdmUgdG8gZmFzdF9leHBvcnRfaW5pdCgpICovCitzdGF0aWMgaW50IGluaXRfcG9zdGltYWdlKHZvaWQpCit7CisJc3RhdGljIGludCBwb3N0aW1hZ2VfaW5pdGlhbGl6ZWQ7CisJaWYgKHBvc3RpbWFnZV9pbml0aWFsaXplZCkKKwkJcmV0dXJuIDA7CisJcG9zdGltYWdlX2luaXRpYWxpemVkID0gMTsKKwlyZXR1cm4gYnVmZmVyX3RtcGZpbGVfaW5pdCgmcG9zdGltYWdlKTsKK30KKwordm9pZCBmYXN0X2V4cG9ydF9pbml0KGludCBmZCkKK3sKKwlmaXJzdF9jb21taXRfZG9uZSA9IDA7CisJaWYgKGJ1ZmZlcl9mZGluaXQoJnJlcG9ydF9idWZmZXIsIGZkKSkKKwkJZGllX2Vycm5vKCJjYW5ub3QgcmVhZCBmcm9tIGZpbGUgZGVzY3JpcHRvciAlZCIsIGZkKTsKK30KKwordm9pZCBmYXN0X2V4cG9ydF9kZWluaXQodm9pZCkKK3sKKwlpZiAoYnVmZmVyX2RlaW5pdCgmcmVwb3J0X2J1ZmZlcikpCisJCWRpZV9lcnJubygiZXJyb3IgY2xvc2luZyBmYXN0LWltcG9ydCBmZWVkYmFjayBzdHJlYW0iKTsKK30KKwordm9pZCBmYXN0X2V4cG9ydF9kZWxldGUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlwdXRjaGFyKCdEJyk7CisJcHV0Y2hhcignICcpOworCXF1b3RlX2Nfc3R5bGUocGF0aCwgTlVMTCwgc3Rkb3V0LCAwKTsKKwlwdXRjaGFyKCdcbicpOworfQorCitzdGF0aWMgdm9pZCBmYXN0X2V4cG9ydF90cnVuY2F0ZShjb25zdCBjaGFyICpwYXRoLCB1aW50MzJfdCBtb2RlKQoreworCWZhc3RfZXhwb3J0X21vZGlmeShwYXRoLCBtb2RlLCAiaW5saW5lIik7CisJcHJpbnRmKCJkYXRhIDBcblxuIik7Cit9CisKK3ZvaWQgZmFzdF9leHBvcnRfbW9kaWZ5KGNvbnN0IGNoYXIgKnBhdGgsIHVpbnQzMl90IG1vZGUsIGNvbnN0IGNoYXIgKmRhdGFyZWYpCit7CisJLyogTW9kZSBtdXN0IGJlIDEwMDY0NCwgMTAwNzU1LCAxMjAwMDAsIG9yIDE2MDAwMC4gKi8KKwlpZiAoIWRhdGFyZWYpIHsKKwkJZmFzdF9leHBvcnRfdHJ1bmNhdGUocGF0aCwgbW9kZSk7CisJCXJldHVybjsKKwl9CisJcHJpbnRmKCJNICUwNiJQUklvMzIiICVzICIsIG1vZGUsIGRhdGFyZWYpOworCXF1b3RlX2Nfc3R5bGUocGF0aCwgTlVMTCwgc3Rkb3V0LCAwKTsKKwlwdXRjaGFyKCdcbicpOworfQorCit2b2lkIGZhc3RfZXhwb3J0X2JlZ2luX25vdGUodWludDMyX3QgcmV2aXNpb24sIGNvbnN0IGNoYXIgKmF1dGhvciwKKwkJY29uc3QgY2hhciAqbG9nLCB0aW1lc3RhbXBfdCB0aW1lc3RhbXAsIGNvbnN0IGNoYXIgKm5vdGVfcmVmKQoreworCXN0YXRpYyBpbnQgZmlyc3Rub3RlID0gMTsKKwlzaXplX3QgbG9nbGVuID0gc3RybGVuKGxvZyk7CisJcHJpbnRmKCJjb21taXQgJXNcbiIsIG5vdGVfcmVmKTsKKwlwcmludGYoImNvbW1pdHRlciAlcyA8JXNAJXM+ICUiUFJJdGltZSIgKzAwMDBcbiIsIGF1dGhvciwgYXV0aG9yLCAibG9jYWwiLCB0aW1lc3RhbXApOworCXByaW50ZigiZGF0YSAlIlBSSXVNQVgiXG4iLCAodWludG1heF90KWxvZ2xlbik7CisJZndyaXRlKGxvZywgbG9nbGVuLCAxLCBzdGRvdXQpOworCWlmIChmaXJzdG5vdGUpIHsKKwkJaWYgKHJldmlzaW9uID4gMSkKKwkJCXByaW50ZigiZnJvbSAlc14wIiwgbm90ZV9yZWYpOworCQlmaXJzdG5vdGUgPSAwOworCX0KKwlmcHV0YygnXG4nLCBzdGRvdXQpOworfQorCit2b2lkIGZhc3RfZXhwb3J0X25vdGUoY29uc3QgY2hhciAqY29tbWl0dGlzaCwgY29uc3QgY2hhciAqZGF0YXJlZikKK3sKKwlwcmludGYoIk4gJXMgJXNcbiIsIGRhdGFyZWYsIGNvbW1pdHRpc2gpOworfQorCitzdGF0aWMgY2hhciBnaXRzdm5saW5lW01BWF9HSVRTVk5fTElORV9MRU5dOwordm9pZCBmYXN0X2V4cG9ydF9iZWdpbl9jb21taXQodWludDMyX3QgcmV2aXNpb24sIGNvbnN0IGNoYXIgKmF1dGhvciwKKwkJCWNvbnN0IHN0cnVjdCBzdHJidWYgKmxvZywKKwkJCWNvbnN0IGNoYXIgKnV1aWQsIGNvbnN0IGNoYXIgKnVybCwKKwkJCXRpbWVzdGFtcF90IHRpbWVzdGFtcCwgY29uc3QgY2hhciAqbG9jYWxfcmVmKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RyYnVmIGVtcHR5ID0gU1RSQlVGX0lOSVQ7CisJaWYgKCFsb2cpCisJCWxvZyA9ICZlbXB0eTsKKwlpZiAoKnV1aWQgJiYgKnVybCkgeworCQlzbnByaW50ZihnaXRzdm5saW5lLCBNQVhfR0lUU1ZOX0xJTkVfTEVOLAorCQkJCSJcblxuZ2l0LXN2bi1pZDogJXNAJSJQUkl1MzIiICVzXG4iLAorCQkJCSB1cmwsIHJldmlzaW9uLCB1dWlkKTsKKwl9IGVsc2UgeworCQkqZ2l0c3ZubGluZSA9ICdcMCc7CisJfQorCXByaW50ZigiY29tbWl0ICVzXG4iLCBsb2NhbF9yZWYpOworCXByaW50ZigibWFyayA6JSJQUkl1MzIiXG4iLCByZXZpc2lvbik7CisJcHJpbnRmKCJjb21taXR0ZXIgJXMgPCVzQCVzPiAlIlBSSXRpbWUiICswMDAwXG4iLAorCQkgICAqYXV0aG9yID8gYXV0aG9yIDogIm5vYm9keSIsCisJCSAgICphdXRob3IgPyBhdXRob3IgOiAibm9ib2R5IiwKKwkJICAgKnV1aWQgPyB1dWlkIDogImxvY2FsIiwgdGltZXN0YW1wKTsKKwlwcmludGYoImRhdGEgJSJQUkl1TUFYIlxuIiwKKwkJKHVpbnRtYXhfdCkgKGxvZy0+bGVuICsgc3RybGVuKGdpdHN2bmxpbmUpKSk7CisJZndyaXRlKGxvZy0+YnVmLCBsb2ctPmxlbiwgMSwgc3Rkb3V0KTsKKwlwcmludGYoIiVzXG4iLCBnaXRzdm5saW5lKTsKKwlpZiAoIWZpcnN0X2NvbW1pdF9kb25lKSB7CisJCWlmIChyZXZpc2lvbiA+IDEpCisJCQlwcmludGYoImZyb20gOiUiUFJJdTMyIlxuIiwgcmV2aXNpb24gLSAxKTsKKwkJZmlyc3RfY29tbWl0X2RvbmUgPSAxOworCX0KK30KKwordm9pZCBmYXN0X2V4cG9ydF9lbmRfY29tbWl0KHVpbnQzMl90IHJldmlzaW9uKQoreworCXByaW50ZigicHJvZ3Jlc3MgSW1wb3J0ZWQgY29tbWl0ICUiUFJJdTMyIi5cblxuIiwgcmV2aXNpb24pOworfQorCitzdGF0aWMgdm9pZCBsc19mcm9tX3Jldih1aW50MzJfdCByZXYsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJLyogbHMgOjUgcGF0aC90by9vbGQvZmlsZSAqLworCXByaW50ZigibHMgOiUiUFJJdTMyIiAiLCByZXYpOworCXF1b3RlX2Nfc3R5bGUocGF0aCwgTlVMTCwgc3Rkb3V0LCAwKTsKKwlwdXRjaGFyKCdcbicpOworCWZmbHVzaChzdGRvdXQpOworfQorCitzdGF0aWMgdm9pZCBsc19mcm9tX2FjdGl2ZV9jb21taXQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwkvKiBscyAicGF0aC90by9maWxlIiAqLworCXByaW50ZigibHMgXCIiKTsKKwlxdW90ZV9jX3N0eWxlKHBhdGgsIE5VTEwsIHN0ZG91dCwgMSk7CisJcHJpbnRmKCJcIlxuIik7CisJZmZsdXNoKHN0ZG91dCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfcmVzcG9uc2VfbGluZSh2b2lkKQoreworCWNvbnN0IGNoYXIgKmxpbmUgPSBidWZmZXJfcmVhZF9saW5lKCZyZXBvcnRfYnVmZmVyKTsKKwlpZiAobGluZSkKKwkJcmV0dXJuIGxpbmU7CisJaWYgKGJ1ZmZlcl9mZXJyb3IoJnJlcG9ydF9idWZmZXIpKQorCQlkaWVfZXJybm8oImVycm9yIHJlYWRpbmcgZnJvbSBmYXN0LWltcG9ydCIpOworCWRpZSgidW5leHBlY3RlZCBlbmQgb2YgZmFzdC1pbXBvcnQgZmVlZGJhY2siKTsKK30KKworc3RhdGljIHZvaWQgZGllX3Nob3J0X3JlYWQoc3RydWN0IGxpbmVfYnVmZmVyICppbnB1dCkKK3sKKwlpZiAoYnVmZmVyX2ZlcnJvcihpbnB1dCkpCisJCWRpZV9lcnJubygiZXJyb3IgcmVhZGluZyBkdW1wIGZpbGUiKTsKKwlkaWUoImludmFsaWQgZHVtcDogdW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2NhdF9yZXNwb25zZV9saW5lKGNvbnN0IGNoYXIgKmhlYWRlciwgb2ZmX3QgKmxlbikKK3sKKwl1aW50bWF4X3QgbjsKKwljb25zdCBjaGFyICp0eXBlOworCWNvbnN0IGNoYXIgKmVuZDsKKworCWlmIChlbmRzX3dpdGgoaGVhZGVyLCAiIG1pc3NpbmciKSkKKwkJcmV0dXJuIGVycm9yKCJjYXQtYmxvYiByZXBvcnRzIG1pc3NpbmcgYmxvYjogJXMiLCBoZWFkZXIpOworCXR5cGUgPSBzdHJzdHIoaGVhZGVyLCAiIGJsb2IgIik7CisJaWYgKCF0eXBlKQorCQlyZXR1cm4gZXJyb3IoImNhdC1ibG9iIGhlYWRlciBoYXMgd3Jvbmcgb2JqZWN0IHR5cGU6ICVzIiwgaGVhZGVyKTsKKwluID0gc3RydG91bWF4KHR5cGUgKyBzdHJsZW4oIiBibG9iICIpLCAoY2hhciAqKikgJmVuZCwgMTApOworCWlmIChlbmQgPT0gdHlwZSArIHN0cmxlbigiIGJsb2IgIikpCisJCXJldHVybiBlcnJvcigiY2F0LWJsb2IgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gbGVuZ3RoOiAlcyIsIGhlYWRlcik7CisJaWYgKG1lbWNocih0eXBlICsgc3RybGVuKCIgYmxvYiAiKSwgJy0nLCBlbmQgLSB0eXBlIC0gc3RybGVuKCIgYmxvYiAiKSkpCisJCXJldHVybiBlcnJvcigiY2F0LWJsb2IgaGVhZGVyIGNvbnRhaW5zIG5lZ2F0aXZlIGxlbmd0aDogJXMiLCBoZWFkZXIpOworCWlmIChuID09IFVJTlRNQVhfTUFYIHx8IG4gPiBtYXhpbXVtX3NpZ25lZF92YWx1ZV9vZl90eXBlKG9mZl90KSkKKwkJcmV0dXJuIGVycm9yKCJibG9iIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90Iik7CisJKmxlbiA9IG47CisJaWYgKCplbmQpCisJCXJldHVybiBlcnJvcigiY2F0LWJsb2IgaGVhZGVyIGNvbnRhaW5zIGdhcmJhZ2UgYWZ0ZXIgbGVuZ3RoOiAlcyIsIGhlYWRlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3ByZWltYWdlX292ZXJmbG93KG9mZl90IGEsIG9mZl90IGIpCit7CisJaWYgKHNpZ25lZF9hZGRfb3ZlcmZsb3dzKGEsIGIpKQorCQlkaWUoImJsb2IgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiKTsKK30KKworc3RhdGljIGxvbmcgYXBwbHlfZGVsdGEob2ZmX3QgbGVuLCBzdHJ1Y3QgbGluZV9idWZmZXIgKmlucHV0LAorCQkJY29uc3QgY2hhciAqb2xkX2RhdGEsIHVpbnQzMl90IG9sZF9tb2RlKQoreworCWxvbmcgcmV0OworCXN0cnVjdCBzbGlkaW5nX3ZpZXcgcHJlaW1hZ2UgPSBTTElESU5HX1ZJRVdfSU5JVCgmcmVwb3J0X2J1ZmZlciwgMCk7CisJRklMRSAqb3V0OworCisJaWYgKGluaXRfcG9zdGltYWdlKCkgfHwgIShvdXQgPSBidWZmZXJfdG1wZmlsZV9yZXdpbmQoJnBvc3RpbWFnZSkpKQorCQlkaWUoImNhbm5vdCBvcGVuIHRlbXBvcmFyeSBmaWxlIGZvciBibG9iIHJldHJpZXZhbCIpOworCWlmIChvbGRfZGF0YSkgeworCQljb25zdCBjaGFyICpyZXNwb25zZTsKKwkJcHJpbnRmKCJjYXQtYmxvYiAlc1xuIiwgb2xkX2RhdGEpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJcmVzcG9uc2UgPSBnZXRfcmVzcG9uc2VfbGluZSgpOworCQlpZiAocGFyc2VfY2F0X3Jlc3BvbnNlX2xpbmUocmVzcG9uc2UsICZwcmVpbWFnZS5tYXhfb2ZmKSkKKwkJCWRpZSgiaW52YWxpZCBjYXQtYmxvYiByZXNwb25zZTogJXMiLCByZXNwb25zZSk7CisJCWNoZWNrX3ByZWltYWdlX292ZXJmbG93KHByZWltYWdlLm1heF9vZmYsIDEpOworCX0KKwlpZiAob2xkX21vZGUgPT0gU19JRkxOSykgeworCQlzdHJidWZfYWRkc3RyKCZwcmVpbWFnZS5idWYsICJsaW5rICIpOworCQljaGVja19wcmVpbWFnZV9vdmVyZmxvdyhwcmVpbWFnZS5tYXhfb2ZmLCBzdHJsZW4oImxpbmsgIikpOworCQlwcmVpbWFnZS5tYXhfb2ZmICs9IHN0cmxlbigibGluayAiKTsKKwkJY2hlY2tfcHJlaW1hZ2Vfb3ZlcmZsb3cocHJlaW1hZ2UubWF4X29mZiwgMSk7CisJfQorCWlmIChzdm5kaWZmMF9hcHBseShpbnB1dCwgbGVuLCAmcHJlaW1hZ2UsIG91dCkpCisJCWRpZSgiY2Fubm90IGFwcGx5IGRlbHRhIik7CisJaWYgKG9sZF9kYXRhKSB7CisJCS8qIFJlYWQgdGhlIHJlbWFpbmRlciBvZiBwcmVpbWFnZSBhbmQgdHJhaWxpbmcgbmV3bGluZS4gKi8KKwkJYXNzZXJ0KCFzaWduZWRfYWRkX292ZXJmbG93cyhwcmVpbWFnZS5tYXhfb2ZmLCAxKSk7CisJCXByZWltYWdlLm1heF9vZmYrKzsJLyogcm9vbSBmb3IgbmV3bGluZSAqLworCQlpZiAobW92ZV93aW5kb3coJnByZWltYWdlLCBwcmVpbWFnZS5tYXhfb2ZmIC0gMSwgMSkpCisJCQlkaWUoImNhbm5vdCBzZWVrIHRvIGVuZCBvZiBpbnB1dCIpOworCQlpZiAocHJlaW1hZ2UuYnVmLmJ1ZlswXSAhPSAnXG4nKQorCQkJZGllKCJtaXNzaW5nIG5ld2xpbmUgYWZ0ZXIgY2F0LWJsb2IgcmVzcG9uc2UiKTsKKwl9CisJcmV0ID0gYnVmZmVyX3RtcGZpbGVfcHJlcGFyZV90b19yZWFkKCZwb3N0aW1hZ2UpOworCWlmIChyZXQgPCAwKQorCQlkaWUoImNhbm5vdCByZWFkIHRlbXBvcmFyeSBmaWxlIGZvciBibG9iIHJldHJpZXZhbCIpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmVpbWFnZS5idWYpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZmFzdF9leHBvcnRfYnVmX3RvX2RhdGEoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqZGF0YSkKK3sKKwlwcmludGYoImRhdGEgJSJQUkl1TUFYIlxuIiwgKHVpbnRtYXhfdClkYXRhLT5sZW4pOworCWZ3cml0ZShkYXRhLT5idWYsIGRhdGEtPmxlbiwgMSwgc3Rkb3V0KTsKKwlmcHV0YygnXG4nLCBzdGRvdXQpOworfQorCit2b2lkIGZhc3RfZXhwb3J0X2RhdGEodWludDMyX3QgbW9kZSwgb2ZmX3QgbGVuLCBzdHJ1Y3QgbGluZV9idWZmZXIgKmlucHV0KQoreworCWFzc2VydChsZW4gPj0gMCk7CisJaWYgKG1vZGUgPT0gU19JRkxOSykgeworCQkvKiBzdm4gc3ltbGluayBibG9icyBzdGFydCB3aXRoICJsaW5rICIgKi8KKwkJaWYgKGxlbiA8IDUpCisJCQlkaWUoImludmFsaWQgZHVtcDogc3ltbGluayB0b28gc2hvcnQgZm9yIFwibGlua1wiIHByZWZpeCIpOworCQlsZW4gLT0gNTsKKwkJaWYgKGJ1ZmZlcl9za2lwX2J5dGVzKGlucHV0LCA1KSAhPSA1KQorCQkJZGllX3Nob3J0X3JlYWQoaW5wdXQpOworCX0KKwlwcmludGYoImRhdGEgJSJQUkl1TUFYIlxuIiwgKHVpbnRtYXhfdCkgbGVuKTsKKwlpZiAoYnVmZmVyX2NvcHlfYnl0ZXMoaW5wdXQsIGxlbikgIT0gbGVuKQorCQlkaWVfc2hvcnRfcmVhZChpbnB1dCk7CisJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKK30KKworc3RhdGljIGludCBwYXJzZV9sc19yZXNwb25zZShjb25zdCBjaGFyICpyZXNwb25zZSwgdWludDMyX3QgKm1vZGUsCisJCQkJCXN0cnVjdCBzdHJidWYgKmRhdGFyZWYpCit7CisJY29uc3QgY2hhciAqdGFiOworCWNvbnN0IGNoYXIgKnJlc3BvbnNlX2VuZDsKKworCWFzc2VydChyZXNwb25zZSk7CisJcmVzcG9uc2VfZW5kID0gcmVzcG9uc2UgKyBzdHJsZW4ocmVzcG9uc2UpOworCisJaWYgKCpyZXNwb25zZSA9PSAnbScpIHsJLyogTWlzc2luZy4gKi8KKwkJZXJybm8gPSBFTk9FTlQ7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBNb2RlLiAqLworCWlmIChyZXNwb25zZV9lbmQgLSByZXNwb25zZSA8IChzaWduZWQpIHN0cmxlbigiMTAwNjQ0IikgfHwKKwkgICAgcmVzcG9uc2Vbc3RybGVuKCIxMDA2NDQiKV0gIT0gJyAnKQorCQlkaWUoImludmFsaWQgbHMgcmVzcG9uc2U6IG1pc3NpbmcgbW9kZTogJXMiLCByZXNwb25zZSk7CisJKm1vZGUgPSAwOworCWZvciAoOyAqcmVzcG9uc2UgIT0gJyAnOyByZXNwb25zZSsrKSB7CisJCWNoYXIgY2ggPSAqcmVzcG9uc2U7CisJCWlmIChjaCA8ICcwJyB8fCBjaCA+ICc3JykKKwkJCWRpZSgiaW52YWxpZCBscyByZXNwb25zZTogbW9kZSBpcyBub3Qgb2N0YWw6ICVzIiwgcmVzcG9uc2UpOworCQkqbW9kZSAqPSA4OworCQkqbW9kZSArPSBjaCAtICcwJzsKKwl9CisKKwkvKiAnIGJsb2IgJyBvciAnIHRyZWUgJyAqLworCWlmIChyZXNwb25zZV9lbmQgLSByZXNwb25zZSA8IChzaWduZWQpIHN0cmxlbigiIGJsb2IgIikgfHwKKwkgICAgKHJlc3BvbnNlWzFdICE9ICdiJyAmJiByZXNwb25zZVsxXSAhPSAndCcpKQorCQlkaWUoInVuZXhwZWN0ZWQgbHMgcmVzcG9uc2U6IG5vdCBhIHRyZWUgb3IgYmxvYjogJXMiLCByZXNwb25zZSk7CisJcmVzcG9uc2UgKz0gc3RybGVuKCIgYmxvYiAiKTsKKworCS8qIERhdGFyZWYuICovCisJdGFiID0gbWVtY2hyKHJlc3BvbnNlLCAnXHQnLCByZXNwb25zZV9lbmQgLSByZXNwb25zZSk7CisJaWYgKCF0YWIpCisJCWRpZSgiaW52YWxpZCBscyByZXNwb25zZTogbWlzc2luZyB0YWI6ICVzIiwgcmVzcG9uc2UpOworCXN0cmJ1Zl9hZGQoZGF0YXJlZiwgcmVzcG9uc2UsIHRhYiAtIHJlc3BvbnNlKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGZhc3RfZXhwb3J0X2xzX3Jldih1aW50MzJfdCByZXYsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJdWludDMyX3QgKm1vZGUsIHN0cnVjdCBzdHJidWYgKmRhdGFyZWYpCit7CisJbHNfZnJvbV9yZXYocmV2LCBwYXRoKTsKKwlyZXR1cm4gcGFyc2VfbHNfcmVzcG9uc2UoZ2V0X3Jlc3BvbnNlX2xpbmUoKSwgbW9kZSwgZGF0YXJlZik7Cit9CisKK2ludCBmYXN0X2V4cG9ydF9scyhjb25zdCBjaGFyICpwYXRoLCB1aW50MzJfdCAqbW9kZSwgc3RydWN0IHN0cmJ1ZiAqZGF0YXJlZikKK3sKKwlsc19mcm9tX2FjdGl2ZV9jb21taXQocGF0aCk7CisJcmV0dXJuIHBhcnNlX2xzX3Jlc3BvbnNlKGdldF9yZXNwb25zZV9saW5lKCksIG1vZGUsIGRhdGFyZWYpOworfQorCitjb25zdCBjaGFyICpmYXN0X2V4cG9ydF9yZWFkX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgdWludDMyX3QgKm1vZGVfb3V0KQoreworCWludCBlcnI7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJZXJyID0gZmFzdF9leHBvcnRfbHMocGF0aCwgbW9kZV9vdXQsICZidWYpOworCWlmIChlcnIpIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCUJVRygidW5leHBlY3RlZCBmYXN0X2V4cG9ydF9scyBlcnJvcjogJXMiLAorCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJCS8qIFRyZWF0IG1pc3NpbmcgcGF0aHMgYXMgZGlyZWN0b3JpZXMuICovCisJCSptb2RlX291dCA9IFNfSUZESVI7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gYnVmLmJ1ZjsKK30KKwordm9pZCBmYXN0X2V4cG9ydF9jb3B5KHVpbnQzMl90IHJldmlzaW9uLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRzdCkKK3sKKwlpbnQgZXJyOworCXVpbnQzMl90IG1vZGU7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgZGF0YSA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZkYXRhKTsKKwllcnIgPSBmYXN0X2V4cG9ydF9sc19yZXYocmV2aXNpb24sIHNyYywgJm1vZGUsICZkYXRhKTsKKwlpZiAoZXJyKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQlCVUcoInVuZXhwZWN0ZWQgZmFzdF9leHBvcnRfbHNfcmV2IGVycm9yOiAlcyIsCisJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJZmFzdF9leHBvcnRfZGVsZXRlKGRzdCk7CisJCXJldHVybjsKKwl9CisJZmFzdF9leHBvcnRfbW9kaWZ5KGRzdCwgbW9kZSwgZGF0YS5idWYpOworfQorCit2b2lkIGZhc3RfZXhwb3J0X2Jsb2JfZGVsdGEodWludDMyX3QgbW9kZSwKKwkJCQl1aW50MzJfdCBvbGRfbW9kZSwgY29uc3QgY2hhciAqb2xkX2RhdGEsCisJCQkJb2ZmX3QgbGVuLCBzdHJ1Y3QgbGluZV9idWZmZXIgKmlucHV0KQoreworCWxvbmcgcG9zdGltYWdlX2xlbjsKKworCWFzc2VydChsZW4gPj0gMCk7CisJcG9zdGltYWdlX2xlbiA9IGFwcGx5X2RlbHRhKGxlbiwgaW5wdXQsIG9sZF9kYXRhLCBvbGRfbW9kZSk7CisJaWYgKG1vZGUgPT0gU19JRkxOSykgeworCQlidWZmZXJfc2tpcF9ieXRlcygmcG9zdGltYWdlLCBzdHJsZW4oImxpbmsgIikpOworCQlwb3N0aW1hZ2VfbGVuIC09IHN0cmxlbigibGluayAiKTsKKwl9CisJcHJpbnRmKCJkYXRhICVsZFxuIiwgcG9zdGltYWdlX2xlbik7CisJYnVmZmVyX2NvcHlfYnl0ZXMoJnBvc3RpbWFnZSwgcG9zdGltYWdlX2xlbik7CisJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKK30KZGlmZiAtLWdpdCBhL3Zjcy1zdm4vZmFzdF9leHBvcnQuaCBiL3Zjcy1zdm4vZmFzdF9leHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGNmOTMzCi0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9mYXN0X2V4cG9ydC5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYgRkFTVF9FWFBPUlRfSAorI2RlZmluZSBGQVNUX0VYUE9SVF9ICisKK3N0cnVjdCBzdHJidWY7CitzdHJ1Y3QgbGluZV9idWZmZXI7CisKK3ZvaWQgZmFzdF9leHBvcnRfaW5pdChpbnQgZmQpOwordm9pZCBmYXN0X2V4cG9ydF9kZWluaXQodm9pZCk7CisKK3ZvaWQgZmFzdF9leHBvcnRfZGVsZXRlKGNvbnN0IGNoYXIgKnBhdGgpOwordm9pZCBmYXN0X2V4cG9ydF9tb2RpZnkoY29uc3QgY2hhciAqcGF0aCwgdWludDMyX3QgbW9kZSwgY29uc3QgY2hhciAqZGF0YXJlZik7Cit2b2lkIGZhc3RfZXhwb3J0X25vdGUoY29uc3QgY2hhciAqY29tbWl0dGlzaCwgY29uc3QgY2hhciAqZGF0YXJlZik7Cit2b2lkIGZhc3RfZXhwb3J0X2JlZ2luX25vdGUodWludDMyX3QgcmV2aXNpb24sIGNvbnN0IGNoYXIgKmF1dGhvciwKKwkJY29uc3QgY2hhciAqbG9nLCB0aW1lc3RhbXBfdCB0aW1lc3RhbXAsIGNvbnN0IGNoYXIgKm5vdGVfcmVmKTsKK3ZvaWQgZmFzdF9leHBvcnRfYmVnaW5fY29tbWl0KHVpbnQzMl90IHJldmlzaW9uLCBjb25zdCBjaGFyICphdXRob3IsCisJCQljb25zdCBzdHJ1Y3Qgc3RyYnVmICpsb2csIGNvbnN0IGNoYXIgKnV1aWQsY29uc3QgY2hhciAqdXJsLAorCQkJdGltZXN0YW1wX3QgdGltZXN0YW1wLCBjb25zdCBjaGFyICpsb2NhbF9yZWYpOwordm9pZCBmYXN0X2V4cG9ydF9lbmRfY29tbWl0KHVpbnQzMl90IHJldmlzaW9uKTsKK3ZvaWQgZmFzdF9leHBvcnRfZGF0YSh1aW50MzJfdCBtb2RlLCBvZmZfdCBsZW4sIHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQpOwordm9pZCBmYXN0X2V4cG9ydF9idWZfdG9fZGF0YShjb25zdCBzdHJ1Y3Qgc3RyYnVmICpkYXRhKTsKK3ZvaWQgZmFzdF9leHBvcnRfYmxvYl9kZWx0YSh1aW50MzJfdCBtb2RlLAorCQkJdWludDMyX3Qgb2xkX21vZGUsIGNvbnN0IGNoYXIgKm9sZF9kYXRhLAorCQkJb2ZmX3QgbGVuLCBzdHJ1Y3QgbGluZV9idWZmZXIgKmlucHV0KTsKKworLyogSWYgdGhlcmUgaXMgbm8gc3VjaCBmaWxlIGF0IHRoYXQgcmV2LCByZXR1cm5zIC0xLCBlcnJubyA9PSBFTk9FTlQuICovCitpbnQgZmFzdF9leHBvcnRfbHNfcmV2KHVpbnQzMl90IHJldiwgY29uc3QgY2hhciAqcGF0aCwKKwkJCXVpbnQzMl90ICptb2RlX291dCwgc3RydWN0IHN0cmJ1ZiAqZGF0YXJlZl9vdXQpOworaW50IGZhc3RfZXhwb3J0X2xzKGNvbnN0IGNoYXIgKnBhdGgsCisJCQl1aW50MzJfdCAqbW9kZV9vdXQsIHN0cnVjdCBzdHJidWYgKmRhdGFyZWZfb3V0KTsKKwordm9pZCBmYXN0X2V4cG9ydF9jb3B5KHVpbnQzMl90IHJldmlzaW9uLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRzdCk7Citjb25zdCBjaGFyICpmYXN0X2V4cG9ydF9yZWFkX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgdWludDMyX3QgKm1vZGVfb3V0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS92Y3Mtc3ZuL2xpbmVfYnVmZmVyLmMgYi92Y3Mtc3ZuL2xpbmVfYnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxNmNhZgotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vbGluZV9idWZmZXIuYwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIExpY2Vuc2VkIHVuZGVyIGEgdHdvLWNsYXVzZSBCU0Qtc3R5bGUgbGljZW5zZS4KKyAqIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJsaW5lX2J1ZmZlci5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCisjZGVmaW5lIENPUFlfQlVGRkVSX0xFTiA0MDk2CisKK2ludCBidWZmZXJfaW5pdChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZiwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJYnVmLT5pbmZpbGUgPSBmaWxlbmFtZSA/IGZvcGVuKGZpbGVuYW1lLCAiciIpIDogc3RkaW47CisJaWYgKCFidWYtPmluZmlsZSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitpbnQgYnVmZmVyX2ZkaW5pdChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZiwgaW50IGZkKQoreworCWJ1Zi0+aW5maWxlID0gZmRvcGVuKGZkLCAiciIpOworCWlmICghYnVmLT5pbmZpbGUpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworaW50IGJ1ZmZlcl90bXBmaWxlX2luaXQoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpCit7CisJYnVmLT5pbmZpbGUgPSB0bXBmaWxlKCk7CisJaWYgKCFidWYtPmluZmlsZSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitpbnQgYnVmZmVyX2RlaW5pdChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZikKK3sKKwlpbnQgZXJyOworCWlmIChidWYtPmluZmlsZSA9PSBzdGRpbikKKwkJcmV0dXJuIGZlcnJvcihidWYtPmluZmlsZSk7CisJZXJyID0gZmVycm9yKGJ1Zi0+aW5maWxlKTsKKwllcnIgfD0gZmNsb3NlKGJ1Zi0+aW5maWxlKTsKKwlyZXR1cm4gZXJyOworfQorCitGSUxFICpidWZmZXJfdG1wZmlsZV9yZXdpbmQoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpCit7CisJcmV3aW5kKGJ1Zi0+aW5maWxlKTsKKwlyZXR1cm4gYnVmLT5pbmZpbGU7Cit9CisKK2xvbmcgYnVmZmVyX3RtcGZpbGVfcHJlcGFyZV90b19yZWFkKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKQoreworCWxvbmcgcG9zID0gZnRlbGwoYnVmLT5pbmZpbGUpOworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oImZ0ZWxsIGVycm9yIik7CisJaWYgKGZzZWVrKGJ1Zi0+aW5maWxlLCAwLCBTRUVLX1NFVCkpCisJCXJldHVybiBlcnJvcl9lcnJubygic2VlayBlcnJvciIpOworCXJldHVybiBwb3M7Cit9CisKK2ludCBidWZmZXJfZmVycm9yKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKQoreworCXJldHVybiBmZXJyb3IoYnVmLT5pbmZpbGUpOworfQorCitpbnQgYnVmZmVyX3JlYWRfY2hhcihzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZikKK3sKKwlyZXR1cm4gZmdldGMoYnVmLT5pbmZpbGUpOworfQorCisvKiBSZWFkIGEgbGluZSB3aXRob3V0IHRyYWlsaW5nIG5ld2xpbmUuICovCitjaGFyICpidWZmZXJfcmVhZF9saW5lKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKQoreworCWNoYXIgKmVuZDsKKwlpZiAoIWZnZXRzKGJ1Zi0+bGluZV9idWZmZXIsIHNpemVvZihidWYtPmxpbmVfYnVmZmVyKSwgYnVmLT5pbmZpbGUpKQorCQkvKiBFcnJvciBvciBkYXRhIGV4aGF1c3RlZC4gKi8KKwkJcmV0dXJuIE5VTEw7CisJZW5kID0gYnVmLT5saW5lX2J1ZmZlciArIHN0cmxlbihidWYtPmxpbmVfYnVmZmVyKTsKKwlpZiAoZW5kWy0xXSA9PSAnXG4nKQorCQllbmRbLTFdID0gJ1wwJzsKKwllbHNlIGlmIChmZW9mKGJ1Zi0+aW5maWxlKSkKKwkJOyAvKiBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlLiAgVGhhdCdzIGZpbmUuICovCisJZWxzZQorCQkvKgorCQkgKiBMaW5lIHdhcyB0b28gbG9uZy4KKwkJICogVGhlcmUgaXMgcHJvYmFibHkgYSBzYW5lciB3YXkgdG8gZGVhbCB3aXRoIHRoaXMsCisJCSAqIGJ1dCBmb3Igbm93IGxldCdzIHJldHVybiBhbiBlcnJvci4KKwkJICovCisJCXJldHVybiBOVUxMOworCXJldHVybiBidWYtPmxpbmVfYnVmZmVyOworfQorCitzaXplX3QgYnVmZmVyX3JlYWRfYmluYXJ5KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLAorCQkJCXN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gc3RyYnVmX2ZyZWFkKHNiLCBzaXplLCBidWYtPmluZmlsZSk7Cit9CisKK29mZl90IGJ1ZmZlcl9jb3B5X2J5dGVzKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBvZmZfdCBuYnl0ZXMpCit7CisJY2hhciBieXRlX2J1ZmZlcltDT1BZX0JVRkZFUl9MRU5dOworCW9mZl90IGRvbmUgPSAwOworCXdoaWxlIChkb25lIDwgbmJ5dGVzICYmICFmZW9mKGJ1Zi0+aW5maWxlKSAmJiAhZmVycm9yKGJ1Zi0+aW5maWxlKSkgeworCQlvZmZfdCBsZW4gPSBuYnl0ZXMgLSBkb25lOworCQlzaXplX3QgaW4gPSBsZW4gPCBDT1BZX0JVRkZFUl9MRU4gPyBsZW4gOiBDT1BZX0JVRkZFUl9MRU47CisJCWluID0gZnJlYWQoYnl0ZV9idWZmZXIsIDEsIGluLCBidWYtPmluZmlsZSk7CisJCWRvbmUgKz0gaW47CisJCWZ3cml0ZShieXRlX2J1ZmZlciwgMSwgaW4sIHN0ZG91dCk7CisJCWlmIChmZXJyb3Ioc3Rkb3V0KSkKKwkJCXJldHVybiBkb25lICsgYnVmZmVyX3NraXBfYnl0ZXMoYnVmLCBuYnl0ZXMgLSBkb25lKTsKKwl9CisJcmV0dXJuIGRvbmU7Cit9CisKK29mZl90IGJ1ZmZlcl9za2lwX2J5dGVzKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBvZmZfdCBuYnl0ZXMpCit7CisJY2hhciBieXRlX2J1ZmZlcltDT1BZX0JVRkZFUl9MRU5dOworCW9mZl90IGRvbmUgPSAwOworCXdoaWxlIChkb25lIDwgbmJ5dGVzICYmICFmZW9mKGJ1Zi0+aW5maWxlKSAmJiAhZmVycm9yKGJ1Zi0+aW5maWxlKSkgeworCQlvZmZfdCBsZW4gPSBuYnl0ZXMgLSBkb25lOworCQlzaXplX3QgaW4gPSBsZW4gPCBDT1BZX0JVRkZFUl9MRU4gPyBsZW4gOiBDT1BZX0JVRkZFUl9MRU47CisJCWRvbmUgKz0gZnJlYWQoYnl0ZV9idWZmZXIsIDEsIGluLCBidWYtPmluZmlsZSk7CisJfQorCXJldHVybiBkb25lOworfQpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9saW5lX2J1ZmZlci5oIGIvdmNzLXN2bi9saW5lX2J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOTJhZWQKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL2xpbmVfYnVmZmVyLmgKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBMSU5FX0JVRkZFUl9ICisjZGVmaW5lIExJTkVfQlVGRkVSX0gKKworI2luY2x1ZGUgInN0cmJ1Zi5oIgorCisjZGVmaW5lIExJTkVfQlVGRkVSX0xFTiAxMDAwMAorCitzdHJ1Y3QgbGluZV9idWZmZXIgeworCWNoYXIgbGluZV9idWZmZXJbTElORV9CVUZGRVJfTEVOXTsKKwlGSUxFICppbmZpbGU7Cit9OworI2RlZmluZSBMSU5FX0JVRkZFUl9JTklUIHsgIiIsIE5VTEwgfQorCitpbnQgYnVmZmVyX2luaXQoc3RydWN0IGxpbmVfYnVmZmVyICpidWYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK2ludCBidWZmZXJfZmRpbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBpbnQgZmQpOworaW50IGJ1ZmZlcl9kZWluaXQoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpOworCitpbnQgYnVmZmVyX3RtcGZpbGVfaW5pdChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1Zik7CitGSUxFICpidWZmZXJfdG1wZmlsZV9yZXdpbmQoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpOwkvKiBwcmVwYXJlIHRvIHdyaXRlLiAqLworbG9uZyBidWZmZXJfdG1wZmlsZV9wcmVwYXJlX3RvX3JlYWQoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpOworCitpbnQgYnVmZmVyX2ZlcnJvcihzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1Zik7CitjaGFyICpidWZmZXJfcmVhZF9saW5lKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKTsKK2ludCBidWZmZXJfcmVhZF9jaGFyKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKTsKK3NpemVfdCBidWZmZXJfcmVhZF9iaW5hcnkoc3RydWN0IGxpbmVfYnVmZmVyICpidWYsIHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgbGVuKTsKKy8qIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKG5vdCBuZWNlc3NhcmlseSB3cml0dGVuKS4gKi8KK29mZl90IGJ1ZmZlcl9jb3B5X2J5dGVzKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBvZmZfdCBsZW4pOworb2ZmX3QgYnVmZmVyX3NraXBfYnl0ZXMoc3RydWN0IGxpbmVfYnVmZmVyICpidWYsIG9mZl90IGxlbik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9saW5lX2J1ZmZlci50eHQgYi92Y3Mtc3ZuL2xpbmVfYnVmZmVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTEzOWViCi0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9saW5lX2J1ZmZlci50eHQKQEAgLTAsMCArMSw3NyBAQAorbGluZV9idWZmZXIgQVBJCis9PT09PT09PT09PT09PT0KKworVGhlIGxpbmVfYnVmZmVyIGxpYnJhcnkgcHJvdmlkZXMgYSBjb252ZW5pZW50IGludGVyZmFjZSBmb3IKK21vc3RseS1saW5lLW9yaWVudGVkIGlucHV0LgorCitFYWNoIGxpbmUgaXMgbm90IHBlcm1pdHRlZCB0byBleGNlZWQgMTAwMDAgYnl0ZXMuICBUaGUgcHJvdmlkZWQKK2Z1bmN0aW9ucyBhcmUgbm90IHRocmVhZC1zYWZlIG9yIGFzeW5jLXNpZ25hbC1zYWZlLCBhbmQgbGlrZQorYGZnZXRzKClgLCB0aGV5IGdlbmVyYWxseSBkbyBub3QgZnVuY3Rpb24gY29ycmVjdGx5IGlmIGludGVycnVwdGVkCitieSBhIHNpZ25hbCB3aXRob3V0IFNBX1JFU1RBUlQgc2V0LgorCitDYWxsaW5nIHNlcXVlbmNlCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjYWxsaW5nIHByb2dyYW06CisKKyAtIGluaXRpYWxpemVzIGEgYHN0cnVjdCBsaW5lX2J1ZmZlcmAgdG8gTElORV9CVUZGRVJfSU5JVAorIC0gc3BlY2lmaWVzIGEgZmlsZSB0byByZWFkIHdpdGggYGJ1ZmZlcl9pbml0YAorIC0gcHJvY2Vzc2VzIGlucHV0IHdpdGggYGJ1ZmZlcl9yZWFkX2xpbmVgLCBgYnVmZmVyX3NraXBfYnl0ZXNgLAorICAgYW5kIGBidWZmZXJfY29weV9ieXRlc2AKKyAtIGNsb3NlcyB0aGUgZmlsZSB3aXRoIGBidWZmZXJfZGVpbml0YCwgcGVyaGFwcyB0byBzdGFydCBvdmVyIGFuZAorICAgcmVhZCBhbm90aGVyIGZpbGUuCisKK1doZW4gZmluaXNoZWQsIHRoZSBjYWxsZXIgY2FuIHVzZSBgYnVmZmVyX3Jlc2V0YCB0byBkZWFsbG9jYXRlCityZXNvdXJjZXMuCisKK1VzaW5nIHRlbXBvcmFyeSBmaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RlbXBvcmFyeSBmaWxlcyBwcm92aWRlIGEgcGxhY2UgdG8gc3RvcmUgZGF0YSB0aGF0IHNob3VsZCBub3Qgb3V0bGl2ZQordGhlIGNhbGxpbmcgcHJvZ3JhbS4gIEEgcHJvZ3JhbQorCisgLSBpbml0aWFsaXplcyBhIGBzdHJ1Y3QgbGluZV9idWZmZXJgIHRvIExJTkVfQlVGRkVSX0lOSVQKKyAtIHJlcXVlc3RzIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBgYnVmZmVyX3RtcGZpbGVfaW5pdGAKKyAtIGFjcXVpcmVzIGFuIG91dHB1dCBoYW5kbGUgYnkgY2FsbGluZyBgYnVmZmVyX3RtcGZpbGVfcmV3aW5kYAorIC0gdXNlcyBzdGFuZGFyZCBJL08gZnVuY3Rpb25zIGxpa2UgYGZwcmludGZgIGFuZCBgZndyaXRlYCB0byBmaWxsCisgICB0aGUgdGVtcG9yYXJ5IGZpbGUKKyAtIGRlY2xhcmVzIHdyaXRpbmcgaXMgb3ZlciB3aXRoIGBidWZmZXJfdG1wZmlsZV9wcmVwYXJlX3RvX3JlYWRgCisgLSBjYW4gcmUtcmVhZCB3aGF0IHdhcyB3cml0dGVuIHdpdGggYGJ1ZmZlcl9yZWFkX2xpbmVgLAorICAgYGJ1ZmZlcl9jb3B5X2J5dGVzYCwgYW5kIHNvIG9uCisgLSBjYW4gcmV1c2UgdGhlIHRlbXBvcmFyeSBmaWxlIGJ5IGNhbGxpbmcgYGJ1ZmZlcl90bXBmaWxlX3Jld2luZGAKKyAgIGFnYWluCisgLSByZW1vdmVzIHRoZSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGBidWZmZXJfZGVpbml0YCwgcGVyaGFwcyB0bworICAgcmV1c2UgdGhlIGxpbmVfYnVmZmVyIGZvciBzb21lIG90aGVyIGZpbGUuCisKK1doZW4gZmluaXNoZWQsIHRoZSBjYWxsaW5nIHByb2dyYW0gY2FuIHVzZSBgYnVmZmVyX3Jlc2V0YCB0byBkZWFsbG9jYXRlCityZXNvdXJjZXMuCisKK0Z1bmN0aW9ucworLS0tLS0tLS0tCisKK2BidWZmZXJfaW5pdGAsIGBidWZmZXJfZmRpbml0YDo6CisJT3BlbiB0aGUgbmFtZWQgZmlsZSBvciBmaWxlIGRlc2NyaXB0b3IgZm9yIGlucHV0LgorCWJ1ZmZlcl9pbml0KGJ1ZiwgTlVMTCkgcHJlcGFyZXMgdG8gcmVhZCBmcm9tIHN0ZGluLgorCU9uIGZhaWx1cmUsIHJldHVybnMgLTEgKHdpdGggZXJybm8gaW5kaWNhdGluZyB0aGUgbmF0dXJlCisJb2YgdGhlIGZhaWx1cmUpLgorCitgYnVmZmVyX2RlaW5pdGA6OgorCVN0b3AgcmVhZGluZyBmcm9tIHRoZSBjdXJyZW50IGZpbGUgKGNsb3NpbmcgaXQgdW5sZXNzCisJaXQgd2FzIHN0ZGluKS4gIFJldHVybnMgbm9uemVybyBpZiBgZmNsb3NlYCBmYWlscyBvcgorCXRoZSBlcnJvciBpbmRpY2F0b3Igd2FzIHNldC4KKworYGJ1ZmZlcl9yZWFkX2xpbmVgOjoKKwlSZWFkIGEgbGluZSBhbmQgc3RyaXAgb2ZmIHRoZSB0cmFpbGluZyBuZXdsaW5lLgorCU9uIGZhaWx1cmUgb3IgZW5kIG9mIGZpbGUsIHJldHVybnMgTlVMTC4KKworYGJ1ZmZlcl9jb3B5X2J5dGVzYDo6CisJUmVhZCBgbGVuYCBieXRlcyBvZiBpbnB1dCBhbmQgZHVtcCB0aGVtIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQKKwlzdHJlYW0uICBSZXR1cm5zIGVhcmx5IGZvciBlcnJvciBvciBlbmQgb2YgZmlsZS4KKworYGJ1ZmZlcl9za2lwX2J5dGVzYDo6CisJRGlzY2FyZHMgYGxlbmAgYnl0ZXMgZnJvbSB0aGUgaW5wdXQgc3RyZWFtIChzdG9wcGluZyBlYXJseQorCWlmIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIGFuIGVycm9yIG9yIGVvZikuICBSZXR1cm4gdmFsdWUgaXMKKwl0aGUgbnVtYmVyIG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSByZWFkLgorCitgYnVmZmVyX3Jlc2V0YDo6CisJRGVhbGxvY2F0ZXMgbm9uLXN0YXRpYyBidWZmZXJzLgpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9zbGlkaW5nX3dpbmRvdy5jIGIvdmNzLXN2bi9zbGlkaW5nX3dpbmRvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZDI3M2MKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL3NsaWRpbmdfd2luZG93LmMKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIExpY2Vuc2VkIHVuZGVyIGEgdHdvLWNsYXVzZSBCU0Qtc3R5bGUgbGljZW5zZS4KKyAqIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzbGlkaW5nX3dpbmRvdy5oIgorI2luY2x1ZGUgImxpbmVfYnVmZmVyLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK3N0YXRpYyBpbnQgaW5wdXRfZXJyb3Ioc3RydWN0IGxpbmVfYnVmZmVyICpmaWxlKQoreworCWlmICghYnVmZmVyX2ZlcnJvcihmaWxlKSkKKwkJcmV0dXJuIGVycm9yKCJkZWx0YSBwcmVpbWFnZSBlbmRzIGVhcmx5Iik7CisJcmV0dXJuIGVycm9yX2Vycm5vKCJjYW5ub3QgcmVhZCBkZWx0YSBwcmVpbWFnZSIpOworfQorCitzdGF0aWMgaW50IHNraXBfb3Jfd2hpbmUoc3RydWN0IGxpbmVfYnVmZmVyICpmaWxlLCBvZmZfdCBnYXApCit7CisJaWYgKGJ1ZmZlcl9za2lwX2J5dGVzKGZpbGUsIGdhcCkgIT0gZ2FwKQorCQlyZXR1cm4gaW5wdXRfZXJyb3IoZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF90b19maWxsX29yX3doaW5lKHN0cnVjdCBsaW5lX2J1ZmZlciAqZmlsZSwKKwkJCQlzdHJ1Y3Qgc3RyYnVmICpidWYsIHNpemVfdCB3aWR0aCkKK3sKKwlidWZmZXJfcmVhZF9iaW5hcnkoZmlsZSwgYnVmLCB3aWR0aCAtIGJ1Zi0+bGVuKTsKKwlpZiAoYnVmLT5sZW4gIT0gd2lkdGgpCisJCXJldHVybiBpbnB1dF9lcnJvcihmaWxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19vZmZzZXRfb3ZlcmZsb3cob2ZmX3Qgb2Zmc2V0LCB1aW50bWF4X3QgbGVuKQoreworCWlmIChsZW4gPiBtYXhpbXVtX3NpZ25lZF92YWx1ZV9vZl90eXBlKG9mZl90KSkKKwkJcmV0dXJuIGVycm9yKCJ1bnJlcHJlc2VudGFibGUgbGVuZ3RoIGluIGRlbHRhOiAiCisJCQkJIiUiUFJJdU1BWCIgPiBPRkZfTUFYIiwgbGVuKTsKKwlpZiAoc2lnbmVkX2FkZF9vdmVyZmxvd3Mob2Zmc2V0LCAob2ZmX3QpIGxlbikpCisJCXJldHVybiBlcnJvcigidW5yZXByZXNlbnRhYmxlIG9mZnNldCBpbiBkZWx0YTogIgorCQkJCSIlIlBSSXVNQVgiICsgJSJQUkl1TUFYIiA+IE9GRl9NQVgiLAorCQkJCSh1aW50bWF4X3QpIG9mZnNldCwgbGVuKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG1vdmVfd2luZG93KHN0cnVjdCBzbGlkaW5nX3ZpZXcgKnZpZXcsIG9mZl90IG9mZiwgc2l6ZV90IHdpZHRoKQoreworCW9mZl90IGZpbGVfb2Zmc2V0OworCWFzc2VydCh2aWV3KTsKKwlhc3NlcnQodmlldy0+d2lkdGggPD0gdmlldy0+YnVmLmxlbik7CisJYXNzZXJ0KCFjaGVja19vZmZzZXRfb3ZlcmZsb3codmlldy0+b2ZmLCB2aWV3LT5idWYubGVuKSk7CisKKwlpZiAoY2hlY2tfb2Zmc2V0X292ZXJmbG93KG9mZiwgd2lkdGgpKQorCQlyZXR1cm4gLTE7CisJaWYgKG9mZiA8IHZpZXctPm9mZiB8fCBvZmYgKyB3aWR0aCA8IHZpZXctPm9mZiArIHZpZXctPndpZHRoKQorCQlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IHdpbmRvdyBzbGlkZXMgbGVmdCIpOworCWlmICh2aWV3LT5tYXhfb2ZmID49IDAgJiYgdmlldy0+bWF4X29mZiA8IG9mZiArIChvZmZfdCkgd2lkdGgpCisJCXJldHVybiBlcnJvcigiZGVsdGEgcHJlaW1hZ2UgZW5kcyBlYXJseSIpOworCisJZmlsZV9vZmZzZXQgPSB2aWV3LT5vZmYgKyB2aWV3LT5idWYubGVuOworCWlmIChvZmYgPCBmaWxlX29mZnNldCkgeworCQkvKiBNb3ZlIHRoZSBvdmVybGFwcGluZyByZWdpb24gaW50byBwbGFjZS4gKi8KKwkJc3RyYnVmX3JlbW92ZSgmdmlldy0+YnVmLCAwLCBvZmYgLSB2aWV3LT5vZmYpOworCX0gZWxzZSB7CisJCS8qIFNlZWsgYWhlYWQgdG8gc2tpcCB0aGUgZ2FwLiAqLworCQlpZiAoc2tpcF9vcl93aGluZSh2aWV3LT5maWxlLCBvZmYgLSBmaWxlX29mZnNldCkpCisJCQlyZXR1cm4gLTE7CisJCXN0cmJ1Zl9zZXRsZW4oJnZpZXctPmJ1ZiwgMCk7CisJfQorCisJaWYgKHZpZXctPmJ1Zi5sZW4gPiB3aWR0aCkKKwkJOyAvKiBBbHJlYWR5IHJlYWQuICovCisJZWxzZSBpZiAocmVhZF90b19maWxsX29yX3doaW5lKHZpZXctPmZpbGUsICZ2aWV3LT5idWYsIHdpZHRoKSkKKwkJcmV0dXJuIC0xOworCisJdmlldy0+b2ZmID0gb2ZmOworCXZpZXctPndpZHRoID0gd2lkdGg7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS92Y3Mtc3ZuL3NsaWRpbmdfd2luZG93LmggYi92Y3Mtc3ZuL3NsaWRpbmdfd2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmYzA5OQotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vc2xpZGluZ193aW5kb3cuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIFNMSURJTkdfV0lORE9XX0gKKyNkZWZpbmUgU0xJRElOR19XSU5ET1dfSAorCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK3N0cnVjdCBzbGlkaW5nX3ZpZXcgeworCXN0cnVjdCBsaW5lX2J1ZmZlciAqZmlsZTsKKwlvZmZfdCBvZmY7CisJc2l6ZV90IHdpZHRoOworCW9mZl90IG1heF9vZmY7CS8qIC0xIG1lYW5zIHVubGltaXRlZCAqLworCXN0cnVjdCBzdHJidWYgYnVmOworfTsKKworI2RlZmluZSBTTElESU5HX1ZJRVdfSU5JVChpbnB1dCwgbGVuKQl7IChpbnB1dCksIDAsIDAsIChsZW4pLCBTVFJCVUZfSU5JVCB9CisKK2ludCBtb3ZlX3dpbmRvdyhzdHJ1Y3Qgc2xpZGluZ192aWV3ICp2aWV3LCBvZmZfdCBvZmYsIHNpemVfdCB3aWR0aCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9zdm5kaWZmLmMgYi92Y3Mtc3ZuL3N2bmRpZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWM3NTMxCi0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9zdm5kaWZmLmMKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBMaWNlbnNlZCB1bmRlciBhIHR3by1jbGF1c2UgQlNELXN0eWxlIGxpY2Vuc2UuCisgKiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic2xpZGluZ193aW5kb3cuaCIKKyNpbmNsdWRlICJsaW5lX2J1ZmZlci5oIgorI2luY2x1ZGUgInN2bmRpZmYuaCIKKworLyoKKyAqIHN2bmRpZmYwIGFwcGxpZXIKKyAqCisgKiBTZWUgaHR0cDovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9zdWJ2ZXJzaW9uL3RydW5rL25vdGVzL3N2bmRpZmYuCisgKgorICogc3ZuZGlmZjAgOjo9ICdTVk5cMCcgd2luZG93KgorICogd2luZG93IDo6PSBpbnQgaW50IGludCBpbnQgaW50IGluc3RydWN0aW9ucyBpbmxpbmVfZGF0YTsKKyAqIGluc3RydWN0aW9ucyA6Oj0gaW5zdHJ1Y3Rpb24qOworICogaW5zdHJ1Y3Rpb24gOjo9IHZpZXdfc2VsZWN0b3IgaW50IGludAorICogICB8IGNvcHlmcm9tX2RhdGEgaW50CisgKiAgIHwgcGFja2VkX3ZpZXdfc2VsZWN0b3IgaW50CisgKiAgIHwgcGFja2VkX2NvcHlmcm9tX2RhdGEKKyAqICAgOworICogdmlld19zZWxlY3RvciA6Oj0gY29weWZyb21fc291cmNlCisgKiAgIHwgY29weWZyb21fdGFyZ2V0CisgKiAgIDsKKyAqIGNvcHlmcm9tX3NvdXJjZSA6Oj0gIyBiaW5hcnkgMDAgMDAwMDAwOworICogY29weWZyb21fdGFyZ2V0IDo6PSAjIGJpbmFyeSAwMSAwMDAwMDA7CisgKiBjb3B5ZnJvbV9kYXRhIDo6PSAjIGJpbmFyeSAxMCAwMDAwMDA7CisgKiBwYWNrZWRfdmlld19zZWxlY3RvciA6Oj0gIyB2aWV3X3NlbGVjdG9yIE9SLWVkIHdpdGggNiBiaXQgdmFsdWU7CisgKiBwYWNrZWRfY29weWZyb21fZGF0YSA6Oj0gIyBjb3B5ZnJvbV9kYXRhIE9SLWVkIHdpdGggNiBiaXQgdmFsdWU7CisgKiBpbnQgOjo9IGhpZ2hkaWdpdCogbG93ZGlnaXQ7CisgKiBoaWdoZGlnaXQgOjo9ICMgYmluYXJ5IDEwMDAgMDAwMCBPUi1lZCB3aXRoIDcgYml0IHZhbHVlOworICogbG93ZGlnaXQgOjo9ICMgNyBiaXQgdmFsdWU7CisgKi8KKworI2RlZmluZSBJTlNOX01BU0sJMHhjMAorI2RlZmluZSBJTlNOX0NPUFlGUk9NX1NPVVJDRQkweDAwCisjZGVmaW5lIElOU05fQ09QWUZST01fVEFSR0VUCTB4NDAKKyNkZWZpbmUgSU5TTl9DT1BZRlJPTV9EQVRBCTB4ODAKKyNkZWZpbmUgT1BFUkFORF9NQVNLCTB4M2YKKworI2RlZmluZSBWTElfQ09OVElOVUUJMHg4MAorI2RlZmluZSBWTElfRElHSVRfTUFTSwkweDdmCisjZGVmaW5lIFZMSV9CSVRTX1BFUl9ESUdJVCA3CisKK3N0cnVjdCB3aW5kb3cgeworCXN0cnVjdCBzbGlkaW5nX3ZpZXcgKmluOworCXN0cnVjdCBzdHJidWYgb3V0OworCXN0cnVjdCBzdHJidWYgaW5zdHJ1Y3Rpb25zOworCXN0cnVjdCBzdHJidWYgZGF0YTsKK307CisKKyNkZWZpbmUgV0lORE9XX0lOSVQodykJeyAodyksIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQgfQorCitzdGF0aWMgdm9pZCB3aW5kb3dfcmVsZWFzZShzdHJ1Y3Qgd2luZG93ICpjdHgpCit7CisJc3RyYnVmX3JlbGVhc2UoJmN0eC0+b3V0KTsKKwlzdHJidWZfcmVsZWFzZSgmY3R4LT5pbnN0cnVjdGlvbnMpOworCXN0cmJ1Zl9yZWxlYXNlKCZjdHgtPmRhdGEpOworfQorCitzdGF0aWMgaW50IHdyaXRlX3N0cmJ1ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqb3V0KQoreworCWlmIChmd3JpdGUoc2ItPmJ1ZiwgMSwgc2ItPmxlbiwgb3V0KSA9PSBzYi0+bGVuKQkvKiBTdWNjZXNzLiAqLworCQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3JfZXJybm8oImNhbm5vdCB3cml0ZSBkZWx0YSBwb3N0aW1hZ2UiKTsKK30KKworc3RhdGljIGludCBlcnJvcl9zaG9ydF9yZWFkKHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQpCit7CisJaWYgKGJ1ZmZlcl9mZXJyb3IoaW5wdXQpKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oImVycm9yIHJlYWRpbmcgZGVsdGEiKTsKKwlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKK30KKworc3RhdGljIGludCByZWFkX2NodW5rKHN0cnVjdCBsaW5lX2J1ZmZlciAqZGVsdGEsIG9mZl90ICpkZWx0YV9sZW4sCisJCSAgICAgIHN0cnVjdCBzdHJidWYgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlhc3NlcnQoKmRlbHRhX2xlbiA+PSAwKTsKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwlpZiAobGVuID4gKHVpbnRtYXhfdCkgKmRlbHRhX2xlbiB8fAorCSAgICBidWZmZXJfcmVhZF9iaW5hcnkoZGVsdGEsIGJ1ZiwgbGVuKSAhPSBsZW4pCisJCXJldHVybiBlcnJvcl9zaG9ydF9yZWFkKGRlbHRhKTsKKwkqZGVsdGFfbGVuIC09IGJ1Zi0+bGVuOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfbWFnaWMoc3RydWN0IGxpbmVfYnVmZmVyICppbiwgb2ZmX3QgKmxlbikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBtYWdpY1tdID0geydTJywgJ1YnLCAnTicsICdcMCd9OworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmIChyZWFkX2NodW5rKGluLCBsZW4sICZzYiwgc2l6ZW9mKG1hZ2ljKSkpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAobWVtY21wKHNiLmJ1ZiwgbWFnaWMsIHNpemVvZihtYWdpYykpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCXJldHVybiBlcnJvcigiaW52YWxpZCBkZWx0YTogdW5yZWNvZ25pemVkIGZpbGUgdHlwZSIpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfaW50KHN0cnVjdCBsaW5lX2J1ZmZlciAqaW4sIHVpbnRtYXhfdCAqcmVzdWx0LCBvZmZfdCAqbGVuKQoreworCXVpbnRtYXhfdCBydiA9IDA7CisJb2ZmX3Qgc3o7CisJZm9yIChzeiA9ICpsZW47IHN6OyBzei0tKSB7CisJCWNvbnN0IGludCBjaCA9IGJ1ZmZlcl9yZWFkX2NoYXIoaW4pOworCQlpZiAoY2ggPT0gRU9GKQorCQkJYnJlYWs7CisKKwkJcnYgPDw9IFZMSV9CSVRTX1BFUl9ESUdJVDsKKwkJcnYgKz0gKGNoICYgVkxJX0RJR0lUX01BU0spOworCQlpZiAoY2ggJiBWTElfQ09OVElOVUUpCisJCQljb250aW51ZTsKKworCQkqcmVzdWx0ID0gcnY7CisJCSpsZW4gPSBzeiAtIDE7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZXJyb3Jfc2hvcnRfcmVhZChpbik7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfaW50KGNvbnN0IGNoYXIgKipidWYsIHNpemVfdCAqcmVzdWx0LCBjb25zdCBjaGFyICplbmQpCit7CisJc2l6ZV90IHJ2ID0gMDsKKwljb25zdCBjaGFyICpwb3M7CisJZm9yIChwb3MgPSAqYnVmOyBwb3MgIT0gZW5kOyBwb3MrKykgeworCQl1bnNpZ25lZCBjaGFyIGNoID0gKnBvczsKKworCQlydiA8PD0gVkxJX0JJVFNfUEVSX0RJR0lUOworCQlydiArPSAoY2ggJiBWTElfRElHSVRfTUFTSyk7CisJCWlmIChjaCAmIFZMSV9DT05USU5VRSkKKwkJCWNvbnRpbnVlOworCisJCSpyZXN1bHQgPSBydjsKKwkJKmJ1ZiA9IHBvcyArIDE7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IHVuZXhwZWN0ZWQgZW5kIG9mIGluc3RydWN0aW9ucyBzZWN0aW9uIik7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9vZmZzZXQoc3RydWN0IGxpbmVfYnVmZmVyICppbiwgb2ZmX3QgKnJlc3VsdCwgb2ZmX3QgKmxlbikKK3sKKwl1aW50bWF4X3QgdmFsOworCWlmIChyZWFkX2ludChpbiwgJnZhbCwgbGVuKSkKKwkJcmV0dXJuIC0xOworCWlmICh2YWwgPiBtYXhpbXVtX3NpZ25lZF92YWx1ZV9vZl90eXBlKG9mZl90KSkKKwkJcmV0dXJuIGVycm9yKCJ1bnJlcHJlc2VudGFibGUgb2Zmc2V0IGluIGRlbHRhOiAlIlBSSXVNQVgiIiwgdmFsKTsKKwkqcmVzdWx0ID0gdmFsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfbGVuZ3RoKHN0cnVjdCBsaW5lX2J1ZmZlciAqaW4sIHNpemVfdCAqcmVzdWx0LCBvZmZfdCAqbGVuKQoreworCXVpbnRtYXhfdCB2YWw7CisJaWYgKHJlYWRfaW50KGluLCAmdmFsLCBsZW4pKQorCQlyZXR1cm4gLTE7CisJaWYgKHZhbCA+IFNJWkVfTUFYKQorCQlyZXR1cm4gZXJyb3IoInVucmVwcmVzZW50YWJsZSBsZW5ndGggaW4gZGVsdGE6ICUiUFJJdU1BWCIiLCB2YWwpOworCSpyZXN1bHQgPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29weWZyb21fc291cmNlKHN0cnVjdCB3aW5kb3cgKmN0eCwgY29uc3QgY2hhciAqKmluc3RydWN0aW9ucywKKwkJCSAgIHNpemVfdCBuYnl0ZXMsIGNvbnN0IGNoYXIgKmluc25zX2VuZCkKK3sKKwlzaXplX3Qgb2Zmc2V0OworCWlmIChwYXJzZV9pbnQoaW5zdHJ1Y3Rpb25zLCAmb2Zmc2V0LCBpbnNuc19lbmQpKQorCQlyZXR1cm4gLTE7CisJaWYgKHVuc2lnbmVkX2FkZF9vdmVyZmxvd3Mob2Zmc2V0LCBuYnl0ZXMpIHx8CisJICAgIG9mZnNldCArIG5ieXRlcyA+IGN0eC0+aW4tPndpZHRoKQorCQlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IGNvcGllcyBzb3VyY2UgZGF0YSBvdXRzaWRlIHZpZXciKTsKKwlzdHJidWZfYWRkKCZjdHgtPm91dCwgY3R4LT5pbi0+YnVmLmJ1ZiArIG9mZnNldCwgbmJ5dGVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb3B5ZnJvbV90YXJnZXQoc3RydWN0IHdpbmRvdyAqY3R4LCBjb25zdCBjaGFyICoqaW5zdHJ1Y3Rpb25zLAorCQkJICAgc2l6ZV90IG5ieXRlcywgY29uc3QgY2hhciAqaW5zdHJ1Y3Rpb25zX2VuZCkKK3sKKwlzaXplX3Qgb2Zmc2V0OworCWlmIChwYXJzZV9pbnQoaW5zdHJ1Y3Rpb25zLCAmb2Zmc2V0LCBpbnN0cnVjdGlvbnNfZW5kKSkKKwkJcmV0dXJuIC0xOworCWlmIChvZmZzZXQgPj0gY3R4LT5vdXQubGVuKQorCQlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IGNvcGllcyBmcm9tIHRoZSBmdXR1cmUiKTsKKwlmb3IgKDsgbmJ5dGVzID4gMDsgbmJ5dGVzLS0pCisJCXN0cmJ1Zl9hZGRjaCgmY3R4LT5vdXQsIGN0eC0+b3V0LmJ1ZltvZmZzZXQrK10pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvcHlmcm9tX2RhdGEoc3RydWN0IHdpbmRvdyAqY3R4LCBzaXplX3QgKmRhdGFfcG9zLCBzaXplX3QgbmJ5dGVzKQoreworCWNvbnN0IHNpemVfdCBwb3MgPSAqZGF0YV9wb3M7CisJaWYgKHVuc2lnbmVkX2FkZF9vdmVyZmxvd3MocG9zLCBuYnl0ZXMpIHx8CisJICAgIHBvcyArIG5ieXRlcyA+IGN0eC0+ZGF0YS5sZW4pCisJCXJldHVybiBlcnJvcigiaW52YWxpZCBkZWx0YTogY29waWVzIHVuYXZhaWxhYmxlIGlubGluZSBkYXRhIik7CisJc3RyYnVmX2FkZCgmY3R4LT5vdXQsIGN0eC0+ZGF0YS5idWYgKyBwb3MsIG5ieXRlcyk7CisJKmRhdGFfcG9zICs9IG5ieXRlczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9maXJzdF9vcGVyYW5kKGNvbnN0IGNoYXIgKipidWYsIHNpemVfdCAqb3V0LCBjb25zdCBjaGFyICplbmQpCit7CisJc2l6ZV90IHJlc3VsdCA9ICh1bnNpZ25lZCBjaGFyKSAqKCpidWYpKysgJiBPUEVSQU5EX01BU0s7CisJaWYgKHJlc3VsdCkgewkvKiBpbW1lZGlhdGUgb3BlcmFuZCAqLworCQkqb3V0ID0gcmVzdWx0OworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHBhcnNlX2ludChidWYsIG91dCwgZW5kKTsKK30KKworc3RhdGljIGludCBleGVjdXRlX29uZV9pbnN0cnVjdGlvbihzdHJ1Y3Qgd2luZG93ICpjdHgsCisJCQkJY29uc3QgY2hhciAqKmluc3RydWN0aW9ucywgc2l6ZV90ICpkYXRhX3BvcykKK3sKKwl1bnNpZ25lZCBpbnQgaW5zdHJ1Y3Rpb247CisJY29uc3QgY2hhciAqaW5zbnNfZW5kID0gY3R4LT5pbnN0cnVjdGlvbnMuYnVmICsgY3R4LT5pbnN0cnVjdGlvbnMubGVuOworCXNpemVfdCBuYnl0ZXM7CisJYXNzZXJ0KGN0eCk7CisJYXNzZXJ0KGluc3RydWN0aW9ucyAmJiAqaW5zdHJ1Y3Rpb25zKTsKKwlhc3NlcnQoZGF0YV9wb3MpOworCisJaW5zdHJ1Y3Rpb24gPSAodW5zaWduZWQgY2hhcikgKippbnN0cnVjdGlvbnM7CisJaWYgKHBhcnNlX2ZpcnN0X29wZXJhbmQoaW5zdHJ1Y3Rpb25zLCAmbmJ5dGVzLCBpbnNuc19lbmQpKQorCQlyZXR1cm4gLTE7CisJc3dpdGNoIChpbnN0cnVjdGlvbiAmIElOU05fTUFTSykgeworCWNhc2UgSU5TTl9DT1BZRlJPTV9TT1VSQ0U6CisJCXJldHVybiBjb3B5ZnJvbV9zb3VyY2UoY3R4LCBpbnN0cnVjdGlvbnMsIG5ieXRlcywgaW5zbnNfZW5kKTsKKwljYXNlIElOU05fQ09QWUZST01fVEFSR0VUOgorCQlyZXR1cm4gY29weWZyb21fdGFyZ2V0KGN0eCwgaW5zdHJ1Y3Rpb25zLCBuYnl0ZXMsIGluc25zX2VuZCk7CisJY2FzZSBJTlNOX0NPUFlGUk9NX0RBVEE6CisJCXJldHVybiBjb3B5ZnJvbV9kYXRhKGN0eCwgZGF0YV9wb3MsIG5ieXRlcyk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGRlbHRhOiB1bnJlY29nbml6ZWQgaW5zdHJ1Y3Rpb24iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfd2luZG93X2luX2NvcmUoc3RydWN0IHdpbmRvdyAqY3R4KQoreworCWNvbnN0IGNoYXIgKmluc3RydWN0aW9uczsKKwlzaXplX3QgZGF0YV9wb3MgPSAwOworCisJLyoKKwkgKiBGaWxsIGN0eC0+b3V0LmJ1ZiB1c2luZyBkYXRhIGZyb20gdGhlIHNvdXJjZSwgdGFyZ2V0LAorCSAqIGFuZCBpbmxpbmUgZGF0YSB2aWV3cy4KKwkgKi8KKwlmb3IgKGluc3RydWN0aW9ucyA9IGN0eC0+aW5zdHJ1Y3Rpb25zLmJ1ZjsKKwkgICAgIGluc3RydWN0aW9ucyAhPSBjdHgtPmluc3RydWN0aW9ucy5idWYgKyBjdHgtPmluc3RydWN0aW9ucy5sZW47CisJICAgICApCisJCWlmIChleGVjdXRlX29uZV9pbnN0cnVjdGlvbihjdHgsICZpbnN0cnVjdGlvbnMsICZkYXRhX3BvcykpCisJCQlyZXR1cm4gLTE7CisJaWYgKGRhdGFfcG9zICE9IGN0eC0+ZGF0YS5sZW4pCisJCXJldHVybiBlcnJvcigiaW52YWxpZCBkZWx0YTogZG9lcyBub3QgY29weSBhbGwgaW5saW5lIGRhdGEiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcHBseV9vbmVfd2luZG93KHN0cnVjdCBsaW5lX2J1ZmZlciAqZGVsdGEsIG9mZl90ICpkZWx0YV9sZW4sCisJCQkgICAgc3RydWN0IHNsaWRpbmdfdmlldyAqcHJlaW1hZ2UsIEZJTEUgKm91dCkKK3sKKwlpbnQgcnYgPSAtMTsKKwlzdHJ1Y3Qgd2luZG93IGN0eCA9IFdJTkRPV19JTklUKHByZWltYWdlKTsKKwlzaXplX3Qgb3V0X2xlbjsKKwlzaXplX3QgaW5zdHJ1Y3Rpb25zX2xlbjsKKwlzaXplX3QgZGF0YV9sZW47CisJYXNzZXJ0KGRlbHRhX2xlbik7CisKKwkvKiAic291cmNlIHZpZXciIG9mZnNldCBhbmQgbGVuZ3RoIGFscmVhZHkgaGFuZGxlZDsgKi8KKwlpZiAocmVhZF9sZW5ndGgoZGVsdGEsICZvdXRfbGVuLCBkZWx0YV9sZW4pIHx8CisJICAgIHJlYWRfbGVuZ3RoKGRlbHRhLCAmaW5zdHJ1Y3Rpb25zX2xlbiwgZGVsdGFfbGVuKSB8fAorCSAgICByZWFkX2xlbmd0aChkZWx0YSwgJmRhdGFfbGVuLCBkZWx0YV9sZW4pIHx8CisJICAgIHJlYWRfY2h1bmsoZGVsdGEsIGRlbHRhX2xlbiwgJmN0eC5pbnN0cnVjdGlvbnMsIGluc3RydWN0aW9uc19sZW4pIHx8CisJICAgIHJlYWRfY2h1bmsoZGVsdGEsIGRlbHRhX2xlbiwgJmN0eC5kYXRhLCBkYXRhX2xlbikpCisJCWdvdG8gZXJyb3Jfb3V0OworCXN0cmJ1Zl9ncm93KCZjdHgub3V0LCBvdXRfbGVuKTsKKwlpZiAoYXBwbHlfd2luZG93X2luX2NvcmUoJmN0eCkpCisJCWdvdG8gZXJyb3Jfb3V0OworCWlmIChjdHgub3V0LmxlbiAhPSBvdXRfbGVuKSB7CisJCXJ2ID0gZXJyb3IoImludmFsaWQgZGVsdGE6IGluY29ycmVjdCBwb3N0aW1hZ2UgbGVuZ3RoIik7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKwlpZiAod3JpdGVfc3RyYnVmKCZjdHgub3V0LCBvdXQpKQorCQlnb3RvIGVycm9yX291dDsKKwlydiA9IDA7CitlcnJvcl9vdXQ6CisJd2luZG93X3JlbGVhc2UoJmN0eCk7CisJcmV0dXJuIHJ2OworfQorCitpbnQgc3ZuZGlmZjBfYXBwbHkoc3RydWN0IGxpbmVfYnVmZmVyICpkZWx0YSwgb2ZmX3QgZGVsdGFfbGVuLAorCQkJc3RydWN0IHNsaWRpbmdfdmlldyAqcHJlaW1hZ2UsIEZJTEUgKnBvc3RpbWFnZSkKK3sKKwlhc3NlcnQoZGVsdGEgJiYgcHJlaW1hZ2UgJiYgcG9zdGltYWdlICYmIGRlbHRhX2xlbiA+PSAwKTsKKworCWlmIChyZWFkX21hZ2ljKGRlbHRhLCAmZGVsdGFfbGVuKSkKKwkJcmV0dXJuIC0xOworCXdoaWxlIChkZWx0YV9sZW4pIHsJLyogRm9yIGVhY2ggd2luZG93OiAqLworCQlvZmZfdCBwcmVfb2ZmID0gLTE7CisJCXNpemVfdCBwcmVfbGVuOworCisJCWlmIChyZWFkX29mZnNldChkZWx0YSwgJnByZV9vZmYsICZkZWx0YV9sZW4pIHx8CisJCSAgICByZWFkX2xlbmd0aChkZWx0YSwgJnByZV9sZW4sICZkZWx0YV9sZW4pIHx8CisJCSAgICBtb3ZlX3dpbmRvdyhwcmVpbWFnZSwgcHJlX29mZiwgcHJlX2xlbikgfHwKKwkJICAgIGFwcGx5X29uZV93aW5kb3coZGVsdGEsICZkZWx0YV9sZW4sIHByZWltYWdlLCBwb3N0aW1hZ2UpKQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Zjcy1zdm4vc3ZuZGlmZi5oIGIvdmNzLXN2bi9zdm5kaWZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1ZDk1MAotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vc3ZuZGlmZi5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgU1ZORElGRl9ICisjZGVmaW5lIFNWTkRJRkZfSAorCitzdHJ1Y3QgbGluZV9idWZmZXI7CitzdHJ1Y3Qgc2xpZGluZ192aWV3OworCitpbnQgc3ZuZGlmZjBfYXBwbHkoc3RydWN0IGxpbmVfYnVmZmVyICpkZWx0YSwgb2ZmX3QgZGVsdGFfbGVuLAorCQkgICBzdHJ1Y3Qgc2xpZGluZ192aWV3ICpwcmVpbWFnZSwgRklMRSAqcG9zdGltYWdlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS92Y3Mtc3ZuL3N2bmR1bXAuYyBiL3Zjcy1zdm4vc3ZuZHVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZDEzNmIKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL3N2bmR1bXAuYwpAQCAtMCwwICsxLDU0MCBAQAorLyoKKyAqIFBhcnNlIGFuZCByZWFycmFuZ2UgYSBzdm5hZG1pbiBkdW1wLgorICogQ3JlYXRlIHRoZSBkdW1wIHdpdGg6CisgKiBzdm5hZG1pbiBkdW1wIC0taW5jcmVtZW50YWwgLXI8c3RhcnRyZXY+OjxlbmRyZXY+IDxyZXBvc2l0b3J5PiA+b3V0ZmlsZQorICoKKyAqIExpY2Vuc2VkIHVuZGVyIGEgdHdvLWNsYXVzZSBCU0Qtc3R5bGUgbGljZW5zZS4KKyAqIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImZhc3RfZXhwb3J0LmgiCisjaW5jbHVkZSAibGluZV9idWZmZXIuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJzdm5kdW1wLmgiCisKKy8qCisgKiBDb21wYXJlIHN0YXJ0IG9mIHN0cmluZyB0byBsaXRlcmFsIG9mIGVxdWFsIGxlbmd0aDsKKyAqIG11c3QgYmUgZ3VhcmRlZCBieSBsZW5ndGggdGVzdC4KKyAqLworI2RlZmluZSBjb25zdGNtcChzLCByZWYpIG1lbWNtcChzLCByZWYsIHNpemVvZihyZWYpIC0gMSkKKworI2RlZmluZSBSRVBPUlRfRklMRU5PIDMKKworI2RlZmluZSBOT0RFQUNUX1JFUExBQ0UgNAorI2RlZmluZSBOT0RFQUNUX0RFTEVURSAzCisjZGVmaW5lIE5PREVBQ1RfQUREIDIKKyNkZWZpbmUgTk9ERUFDVF9DSEFOR0UgMQorI2RlZmluZSBOT0RFQUNUX1VOS05PV04gMAorCisvKiBTdGF0ZXM6ICovCisjZGVmaW5lIERVTVBfQ1RYIDAJLyogZHVtcCBtZXRhZGF0YSAqLworI2RlZmluZSBSRVZfQ1RYICAxCS8qIHJldmlzaW9uIG1ldGFkYXRhICovCisjZGVmaW5lIE5PREVfQ1RYIDIJLyogbm9kZSBtZXRhZGF0YSAqLworI2RlZmluZSBJTlRFUk5PREVfQ1RYIDMJLyogYmV0d2VlbiBub2RlcyAqLworCisjZGVmaW5lIERBVEVfUkZDMjgyMl9MRU4gMzEKKworc3RhdGljIHN0cnVjdCBsaW5lX2J1ZmZlciBpbnB1dCA9IExJTkVfQlVGRkVSX0lOSVQ7CisKK3N0YXRpYyBzdHJ1Y3QgeworCXVpbnQzMl90IGFjdGlvbiwgc3JjUmV2LCB0eXBlOworCW9mZl90IHByb3BfbGVuZ3RoLCB0ZXh0X2xlbmd0aDsKKwlzdHJ1Y3Qgc3RyYnVmIHNyYywgZHN0OworCXVpbnQzMl90IHRleHRfZGVsdGEsIHByb3BfZGVsdGE7Cit9IG5vZGVfY3R4OworCitzdGF0aWMgc3RydWN0IHsKKwl1aW50MzJfdCByZXZpc2lvbjsKKwl0aW1lc3RhbXBfdCB0aW1lc3RhbXA7CisJc3RydWN0IHN0cmJ1ZiBsb2csIGF1dGhvciwgbm90ZTsKK30gcmV2X2N0eDsKKworc3RhdGljIHN0cnVjdCB7CisJdWludDMyX3QgdmVyc2lvbjsKKwlzdHJ1Y3Qgc3RyYnVmIHV1aWQsIHVybDsKK30gZHVtcF9jdHg7CisKK3N0YXRpYyB2b2lkIHJlc2V0X25vZGVfY3R4KGNoYXIgKmZuYW1lKQoreworCW5vZGVfY3R4LnR5cGUgPSAwOworCW5vZGVfY3R4LmFjdGlvbiA9IE5PREVBQ1RfVU5LTk9XTjsKKwlub2RlX2N0eC5wcm9wX2xlbmd0aCA9IC0xOworCW5vZGVfY3R4LnRleHRfbGVuZ3RoID0gLTE7CisJc3RyYnVmX3Jlc2V0KCZub2RlX2N0eC5zcmMpOworCW5vZGVfY3R4LnNyY1JldiA9IDA7CisJc3RyYnVmX3Jlc2V0KCZub2RlX2N0eC5kc3QpOworCWlmIChmbmFtZSkKKwkJc3RyYnVmX2FkZHN0cigmbm9kZV9jdHguZHN0LCBmbmFtZSk7CisJbm9kZV9jdHgudGV4dF9kZWx0YSA9IDA7CisJbm9kZV9jdHgucHJvcF9kZWx0YSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X3Jldl9jdHgodWludDMyX3QgcmV2aXNpb24pCit7CisJcmV2X2N0eC5yZXZpc2lvbiA9IHJldmlzaW9uOworCXJldl9jdHgudGltZXN0YW1wID0gMDsKKwlzdHJidWZfcmVzZXQoJnJldl9jdHgubG9nKTsKKwlzdHJidWZfcmVzZXQoJnJldl9jdHguYXV0aG9yKTsKKwlzdHJidWZfcmVzZXQoJnJldl9jdHgubm90ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X2R1bXBfY3R4KGNvbnN0IGNoYXIgKnVybCkKK3sKKwlzdHJidWZfcmVzZXQoJmR1bXBfY3R4LnVybCk7CisJaWYgKHVybCkKKwkJc3RyYnVmX2FkZHN0cigmZHVtcF9jdHgudXJsLCB1cmwpOworCWR1bXBfY3R4LnZlcnNpb24gPSAxOworCXN0cmJ1Zl9yZXNldCgmZHVtcF9jdHgudXVpZCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9wcm9wZXJ0eShjb25zdCBzdHJ1Y3Qgc3RyYnVmICprZXlfYnVmLAorCQkJCXN0cnVjdCBzdHJidWYgKnZhbCwKKwkJCQl1aW50MzJfdCAqdHlwZV9zZXQpCit7CisJY29uc3QgY2hhciAqa2V5ID0ga2V5X2J1Zi0+YnVmOworCXNpemVfdCBrZXlsZW4gPSBrZXlfYnVmLT5sZW47CisKKwlzd2l0Y2ggKGtleWxlbiArIDEpIHsKKwljYXNlIHNpemVvZigic3ZuOmxvZyIpOgorCQlpZiAoY29uc3RjbXAoa2V5LCAic3ZuOmxvZyIpKQorCQkJYnJlYWs7CisJCWlmICghdmFsKQorCQkJZGllKCJpbnZhbGlkIGR1bXA6IHVuc2V0cyBzdm46bG9nIik7CisJCXN0cmJ1Zl9zd2FwKCZyZXZfY3R4LmxvZywgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBzaXplb2YoInN2bjphdXRob3IiKToKKwkJaWYgKGNvbnN0Y21wKGtleSwgInN2bjphdXRob3IiKSkKKwkJCWJyZWFrOworCQlpZiAoIXZhbCkKKwkJCXN0cmJ1Zl9yZXNldCgmcmV2X2N0eC5hdXRob3IpOworCQllbHNlCisJCQlzdHJidWZfc3dhcCgmcmV2X2N0eC5hdXRob3IsIHZhbCk7CisJCWJyZWFrOworCWNhc2Ugc2l6ZW9mKCJzdm46ZGF0ZSIpOgorCQlpZiAoY29uc3RjbXAoa2V5LCAic3ZuOmRhdGUiKSkKKwkJCWJyZWFrOworCQlpZiAoIXZhbCkKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiB1bnNldHMgc3ZuOmRhdGUiKTsKKwkJaWYgKHBhcnNlX2RhdGVfYmFzaWModmFsLT5idWYsICZyZXZfY3R4LnRpbWVzdGFtcCwgTlVMTCkpCisJCQl3YXJuaW5nKCJpbnZhbGlkIHRpbWVzdGFtcDogJXMiLCB2YWwtPmJ1Zik7CisJCWJyZWFrOworCWNhc2Ugc2l6ZW9mKCJzdm46ZXhlY3V0YWJsZSIpOgorCWNhc2Ugc2l6ZW9mKCJzdm46c3BlY2lhbCIpOgorCQlpZiAoa2V5bGVuID09IHN0cmxlbigic3ZuOmV4ZWN1dGFibGUiKSAmJgorCQkgICAgY29uc3RjbXAoa2V5LCAic3ZuOmV4ZWN1dGFibGUiKSkKKwkJCWJyZWFrOworCQlpZiAoa2V5bGVuID09IHN0cmxlbigic3ZuOnNwZWNpYWwiKSAmJgorCQkgICAgY29uc3RjbXAoa2V5LCAic3ZuOnNwZWNpYWwiKSkKKwkJCWJyZWFrOworCQlpZiAoKnR5cGVfc2V0KSB7CisJCQlpZiAoIXZhbCkKKwkJCQlyZXR1cm47CisJCQlkaWUoImludmFsaWQgZHVtcDogc2V0cyB0eXBlIHR3aWNlIik7CisJCX0KKwkJaWYgKCF2YWwpIHsKKwkJCW5vZGVfY3R4LnR5cGUgPSBTX0lGUkVHIHwgMDY0NDsKKwkJCXJldHVybjsKKwkJfQorCQkqdHlwZV9zZXQgPSAxOworCQlub2RlX2N0eC50eXBlID0ga2V5bGVuID09IHN0cmxlbigic3ZuOmV4ZWN1dGFibGUiKSA/CisJCQkJKFNfSUZSRUcgfCAwNzU1KSA6CisJCQkJU19JRkxOSzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpZV9zaG9ydF9yZWFkKHZvaWQpCit7CisJaWYgKGJ1ZmZlcl9mZXJyb3IoJmlucHV0KSkKKwkJZGllX2Vycm5vKCJlcnJvciByZWFkaW5nIGR1bXAgZmlsZSIpOworCWRpZSgiaW52YWxpZCBkdW1wOiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfcHJvcHModm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBrZXkgPSBTVFJCVUZfSU5JVDsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB2YWwgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICp0OworCS8qCisJICogTkVFRFNXT1JLOiB0byBzdXBwb3J0IHNpbXBsZSBtb2RlIGNoYW5nZXMgbGlrZQorCSAqCUsgMTEKKwkgKglzdm46c3BlY2lhbAorCSAqCVYgMQorCSAqCSoKKwkgKglEIDE0CisJICoJc3ZuOmV4ZWN1dGFibGUKKwkgKiB3ZSBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgYSBtb2RlIGhhcyBiZWVuIHNldCBhbmQgcmVzZXQgdG8KKwkgKiBwbGFpbiBmaWxlIG9ubHkgaWYgbm90LiAgV2Ugc2hvdWxkIGJlIGtlZXBpbmcgdHJhY2sgb2YgdGhlCisJICogc3ltbGluayBhbmQgZXhlY3V0YWJsZSBiaXRzIHNlcGFyYXRlbHkgaW5zdGVhZC4KKwkgKi8KKwl1aW50MzJfdCB0eXBlX3NldCA9IDA7CisJd2hpbGUgKCh0ID0gYnVmZmVyX3JlYWRfbGluZSgmaW5wdXQpKSAmJiBzdHJjbXAodCwgIlBST1BTLUVORCIpKSB7CisJCXVpbnQzMl90IGxlbjsKKwkJY29uc3QgY2hhciB0eXBlID0gdFswXTsKKwkJaW50IGNoOworCisJCWlmICghdHlwZSB8fCB0WzFdICE9ICcgJykKKwkJCWRpZSgiaW52YWxpZCBwcm9wZXJ0eSBsaW5lOiAlcyIsIHQpOworCQlsZW4gPSBhdG9pKCZ0WzJdKTsKKwkJc3RyYnVmX3Jlc2V0KCZ2YWwpOworCQlidWZmZXJfcmVhZF9iaW5hcnkoJmlucHV0LCAmdmFsLCBsZW4pOworCQlpZiAodmFsLmxlbiA8IGxlbikKKwkJCWRpZV9zaG9ydF9yZWFkKCk7CisKKwkJLyogRGlzY2FyZCB0cmFpbGluZyBuZXdsaW5lLiAqLworCQljaCA9IGJ1ZmZlcl9yZWFkX2NoYXIoJmlucHV0KTsKKwkJaWYgKGNoID09IEVPRikKKwkJCWRpZV9zaG9ydF9yZWFkKCk7CisJCWlmIChjaCAhPSAnXG4nKQorCQkJZGllKCJpbnZhbGlkIGR1bXA6IGV4cGVjdGVkIG5ld2xpbmUgYWZ0ZXIgJXMiLCB2YWwuYnVmKTsKKworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSAnSyc6CisJCQlzdHJidWZfc3dhcCgma2V5LCAmdmFsKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdEJzoKKwkJCWhhbmRsZV9wcm9wZXJ0eSgmdmFsLCBOVUxMLCAmdHlwZV9zZXQpOworCQkJY29udGludWU7CisJCWNhc2UgJ1YnOgorCQkJaGFuZGxlX3Byb3BlcnR5KCZrZXksICZ2YWwsICZ0eXBlX3NldCk7CisJCQlzdHJidWZfcmVzZXQoJmtleSk7CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCWRpZSgiaW52YWxpZCBwcm9wZXJ0eSBsaW5lOiAlcyIsIHQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbm9kZSh2b2lkKQoreworCWNvbnN0IHVpbnQzMl90IHR5cGUgPSBub2RlX2N0eC50eXBlOworCWNvbnN0IGludCBoYXZlX3Byb3BzID0gbm9kZV9jdHgucHJvcF9sZW5ndGggIT0gLTE7CisJY29uc3QgaW50IGhhdmVfdGV4dCA9IG5vZGVfY3R4LnRleHRfbGVuZ3RoICE9IC0xOworCS8qCisJICogT2xkIHRleHQgZm9yIHRoaXMgbm9kZToKKwkgKiAgTlVMTAktIGRpcmVjdG9yeSBvciBidWcKKwkgKiAgZW1wdHlfYmxvYgktIGVtcHR5CisJICogICI8ZGF0YXJlZj4iCS0gZGF0YSByZXRyaWV2YWJsZSBmcm9tIGZhc3QtaW1wb3J0CisJICovCisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGVtcHR5X2Jsb2IgPSAiOjplbXB0eTo6IjsKKwljb25zdCBjaGFyICpvbGRfZGF0YSA9IE5VTEw7CisJdWludDMyX3Qgb2xkX21vZGUgPSBTX0lGUkVHIHwgMDY0NDsKKworCWlmIChub2RlX2N0eC5hY3Rpb24gPT0gTk9ERUFDVF9ERUxFVEUpIHsKKwkJaWYgKGhhdmVfdGV4dCB8fCBoYXZlX3Byb3BzIHx8IG5vZGVfY3R4LnNyY1JldikKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiBkZWxldGlvbiBub2RlIGhhcyAiCisJCQkJImNvcHlmcm9tIGluZm8sIHRleHQsIG9yIHByb3BlcnRpZXMiKTsKKwkJZmFzdF9leHBvcnRfZGVsZXRlKG5vZGVfY3R4LmRzdC5idWYpOworCQlyZXR1cm47CisJfQorCWlmIChub2RlX2N0eC5hY3Rpb24gPT0gTk9ERUFDVF9SRVBMQUNFKSB7CisJCWZhc3RfZXhwb3J0X2RlbGV0ZShub2RlX2N0eC5kc3QuYnVmKTsKKwkJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9BREQ7CisJfQorCWlmIChub2RlX2N0eC5zcmNSZXYpIHsKKwkJZmFzdF9leHBvcnRfY29weShub2RlX2N0eC5zcmNSZXYsIG5vZGVfY3R4LnNyYy5idWYsIG5vZGVfY3R4LmRzdC5idWYpOworCQlpZiAobm9kZV9jdHguYWN0aW9uID09IE5PREVBQ1RfQUREKQorCQkJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9DSEFOR0U7CisJfQorCWlmIChoYXZlX3RleHQgJiYgdHlwZSA9PSBTX0lGRElSKQorCQlkaWUoImludmFsaWQgZHVtcDogZGlyZWN0b3JpZXMgY2Fubm90IGhhdmUgdGV4dCBhdHRhY2hlZCIpOworCisJLyoKKwkgKiBGaW5kIG9sZCBjb250ZW50IChvbGRfZGF0YSkgYW5kIGRlY2lkZSBvbiB0aGUgbmV3IG1vZGUuCisJICovCisJaWYgKG5vZGVfY3R4LmFjdGlvbiA9PSBOT0RFQUNUX0NIQU5HRSAmJiAhKm5vZGVfY3R4LmRzdC5idWYpIHsKKwkJaWYgKHR5cGUgIT0gU19JRkRJUikKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiByb290IG9mIHRyZWUgaXMgbm90IGEgcmVndWxhciBmaWxlIik7CisJCW9sZF9kYXRhID0gTlVMTDsKKwl9IGVsc2UgaWYgKG5vZGVfY3R4LmFjdGlvbiA9PSBOT0RFQUNUX0NIQU5HRSkgeworCQl1aW50MzJfdCBtb2RlOworCQlvbGRfZGF0YSA9IGZhc3RfZXhwb3J0X3JlYWRfcGF0aChub2RlX2N0eC5kc3QuYnVmLCAmbW9kZSk7CisJCWlmIChtb2RlID09IFNfSUZESVIgJiYgdHlwZSAhPSBTX0lGRElSKQorCQkJZGllKCJpbnZhbGlkIGR1bXA6IGNhbm5vdCBtb2RpZnkgYSBkaXJlY3RvcnkgaW50byBhIGZpbGUiKTsKKwkJaWYgKG1vZGUgIT0gU19JRkRJUiAmJiB0eXBlID09IFNfSUZESVIpCisJCQlkaWUoImludmFsaWQgZHVtcDogY2Fubm90IG1vZGlmeSBhIGZpbGUgaW50byBhIGRpcmVjdG9yeSIpOworCQlub2RlX2N0eC50eXBlID0gbW9kZTsKKwkJb2xkX21vZGUgPSBtb2RlOworCX0gZWxzZSBpZiAobm9kZV9jdHguYWN0aW9uID09IE5PREVBQ1RfQUREKSB7CisJCWlmICh0eXBlID09IFNfSUZESVIpCisJCQlvbGRfZGF0YSA9IE5VTEw7CisJCWVsc2UgaWYgKGhhdmVfdGV4dCkKKwkJCW9sZF9kYXRhID0gZW1wdHlfYmxvYjsKKwkJZWxzZQorCQkJZGllKCJpbnZhbGlkIGR1bXA6IGFkZHMgbm9kZSB3aXRob3V0IHRleHQiKTsKKwl9IGVsc2UgeworCQlkaWUoImludmFsaWQgZHVtcDogTm9kZS1wYXRoIGJsb2NrIGxhY2tzIE5vZGUtYWN0aW9uIik7CisJfQorCisJLyoKKwkgKiBBZGp1c3QgbW9kZSB0byByZWZsZWN0IHByb3BlcnRpZXMuCisJICovCisJaWYgKGhhdmVfcHJvcHMpIHsKKwkJaWYgKCFub2RlX2N0eC5wcm9wX2RlbHRhKQorCQkJbm9kZV9jdHgudHlwZSA9IHR5cGU7CisJCWlmIChub2RlX2N0eC5wcm9wX2xlbmd0aCkKKwkJCXJlYWRfcHJvcHMoKTsKKwl9CisKKwkvKgorCSAqIFNhdmUgdGhlIHJlc3VsdC4KKwkgKi8KKwlpZiAodHlwZSA9PSBTX0lGRElSKQkvKiBkaXJlY3RvcmllcyBhcmUgbm90IHRyYWNrZWQuICovCisJCXJldHVybjsKKwlhc3NlcnQob2xkX2RhdGEpOworCWlmIChvbGRfZGF0YSA9PSBlbXB0eV9ibG9iKQorCQkvKiBGb3IgdGhlIGZhc3RfZXhwb3J0XyogZnVuY3Rpb25zLCBOVUxMIG1lYW5zIGVtcHR5LiAqLworCQlvbGRfZGF0YSA9IE5VTEw7CisJaWYgKCFoYXZlX3RleHQpIHsKKwkJZmFzdF9leHBvcnRfbW9kaWZ5KG5vZGVfY3R4LmRzdC5idWYsIG5vZGVfY3R4LnR5cGUsIG9sZF9kYXRhKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIW5vZGVfY3R4LnRleHRfZGVsdGEpIHsKKwkJZmFzdF9leHBvcnRfbW9kaWZ5KG5vZGVfY3R4LmRzdC5idWYsIG5vZGVfY3R4LnR5cGUsICJpbmxpbmUiKTsKKwkJZmFzdF9leHBvcnRfZGF0YShub2RlX2N0eC50eXBlLCBub2RlX2N0eC50ZXh0X2xlbmd0aCwgJmlucHV0KTsKKwkJcmV0dXJuOworCX0KKwlmYXN0X2V4cG9ydF9tb2RpZnkobm9kZV9jdHguZHN0LmJ1Ziwgbm9kZV9jdHgudHlwZSwgImlubGluZSIpOworCWZhc3RfZXhwb3J0X2Jsb2JfZGVsdGEobm9kZV9jdHgudHlwZSwgb2xkX21vZGUsIG9sZF9kYXRhLAorCQkJCW5vZGVfY3R4LnRleHRfbGVuZ3RoLCAmaW5wdXQpOworfQorCitzdGF0aWMgdm9pZCBiZWdpbl9yZXZpc2lvbihjb25zdCBjaGFyICpyZW1vdGVfcmVmKQoreworCWlmICghcmV2X2N0eC5yZXZpc2lvbikJLyogcmV2aXNpb24gMCBnZXRzIG5vIGdpdCBjb21taXQuICovCisJCXJldHVybjsKKwlmYXN0X2V4cG9ydF9iZWdpbl9jb21taXQocmV2X2N0eC5yZXZpc2lvbiwgcmV2X2N0eC5hdXRob3IuYnVmLAorCQkmcmV2X2N0eC5sb2csIGR1bXBfY3R4LnV1aWQuYnVmLCBkdW1wX2N0eC51cmwuYnVmLAorCQlyZXZfY3R4LnRpbWVzdGFtcCwgcmVtb3RlX3JlZik7Cit9CisKK3N0YXRpYyB2b2lkIGVuZF9yZXZpc2lvbihjb25zdCBjaGFyICpub3RlX3JlZikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG1hcmsgPSBTVFJCVUZfSU5JVDsKKwlpZiAocmV2X2N0eC5yZXZpc2lvbikgeworCQlmYXN0X2V4cG9ydF9lbmRfY29tbWl0KHJldl9jdHgucmV2aXNpb24pOworCQlmYXN0X2V4cG9ydF9iZWdpbl9ub3RlKHJldl9jdHgucmV2aXNpb24sICJyZW1vdGUtc3ZuIiwKKwkJCQkiTm90ZSBjcmVhdGVkIGJ5IHJlbW90ZS1zdm4uIiwgcmV2X2N0eC50aW1lc3RhbXAsIG5vdGVfcmVmKTsKKwkJc3RyYnVmX2FkZGYoJm1hcmssICI6JSJQUkl1MzIsIHJldl9jdHgucmV2aXNpb24pOworCQlmYXN0X2V4cG9ydF9ub3RlKG1hcmsuYnVmLCAiaW5saW5lIik7CisJCWZhc3RfZXhwb3J0X2J1Zl90b19kYXRhKCZyZXZfY3R4Lm5vdGUpOworCQlzdHJidWZfcmVsZWFzZSgmbWFyayk7CisJfQorfQorCit2b2lkIHN2bmR1bXBfcmVhZChjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmxvY2FsX3JlZiwgY29uc3QgY2hhciAqbm90ZXNfcmVmKQoreworCWNoYXIgKnZhbDsKKwljaGFyICp0OworCXVpbnQzMl90IGFjdGl2ZV9jdHggPSBEVU1QX0NUWDsKKwl1aW50MzJfdCBsZW47CisKKwlyZXNldF9kdW1wX2N0eCh1cmwpOworCXdoaWxlICgodCA9IGJ1ZmZlcl9yZWFkX2xpbmUoJmlucHV0KSkpIHsKKwkJdmFsID0gc3RyY2hyKHQsICc6Jyk7CisJCWlmICghdmFsKQorCQkJY29udGludWU7CisJCXZhbCsrOworCQlpZiAoKnZhbCAhPSAnICcpCisJCQljb250aW51ZTsKKwkJdmFsKys7CisKKwkJLyogc3RybGVuKGtleSkgKyAxICovCisJCXN3aXRjaCAodmFsIC0gdCAtIDEpIHsKKwkJY2FzZSBzaXplb2YoIlNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uIik6CisJCQlpZiAoY29uc3RjbXAodCwgIlNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uIikpCisJCQkJY29udGludWU7CisJCQlkdW1wX2N0eC52ZXJzaW9uID0gYXRvaSh2YWwpOworCQkJaWYgKGR1bXBfY3R4LnZlcnNpb24gPiAzKQorCQkJCWRpZSgiZXhwZWN0ZWQgc3ZuIGR1bXAgZm9ybWF0IHZlcnNpb24gPD0gMywgZm91bmQgJSJQUkl1MzIsCisJCQkJICAgIGR1bXBfY3R4LnZlcnNpb24pOworCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJVVUlEIik6CisJCQlpZiAoY29uc3RjbXAodCwgIlVVSUQiKSkKKwkJCQljb250aW51ZTsKKwkJCXN0cmJ1Zl9yZXNldCgmZHVtcF9jdHgudXVpZCk7CisJCQlzdHJidWZfYWRkc3RyKCZkdW1wX2N0eC51dWlkLCB2YWwpOworCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJSZXZpc2lvbi1udW1iZXIiKToKKwkJCWlmIChjb25zdGNtcCh0LCAiUmV2aXNpb24tbnVtYmVyIikpCisJCQkJY29udGludWU7CisJCQlpZiAoYWN0aXZlX2N0eCA9PSBOT0RFX0NUWCkKKwkJCQloYW5kbGVfbm9kZSgpOworCQkJaWYgKGFjdGl2ZV9jdHggPT0gUkVWX0NUWCkKKwkJCQliZWdpbl9yZXZpc2lvbihsb2NhbF9yZWYpOworCQkJaWYgKGFjdGl2ZV9jdHggIT0gRFVNUF9DVFgpCisJCQkJZW5kX3JldmlzaW9uKG5vdGVzX3JlZik7CisJCQlhY3RpdmVfY3R4ID0gUkVWX0NUWDsKKwkJCXJlc2V0X3Jldl9jdHgoYXRvaSh2YWwpKTsKKwkJCXN0cmJ1Zl9hZGRmKCZyZXZfY3R4Lm5vdGUsICIlc1xuIiwgdCk7CisJCQlicmVhazsKKwkJY2FzZSBzaXplb2YoIk5vZGUtcGF0aCIpOgorCQkJaWYgKGNvbnN0Y21wKHQsICJOb2RlLSIpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFjb25zdGNtcCh0ICsgc3RybGVuKCJOb2RlLSIpLCAicGF0aCIpKSB7CisJCQkJaWYgKGFjdGl2ZV9jdHggPT0gTk9ERV9DVFgpCisJCQkJCWhhbmRsZV9ub2RlKCk7CisJCQkJaWYgKGFjdGl2ZV9jdHggPT0gUkVWX0NUWCkKKwkJCQkJYmVnaW5fcmV2aXNpb24obG9jYWxfcmVmKTsKKwkJCQlhY3RpdmVfY3R4ID0gTk9ERV9DVFg7CisJCQkJcmVzZXRfbm9kZV9jdHgodmFsKTsKKwkJCQlzdHJidWZfYWRkZigmcmV2X2N0eC5ub3RlLCAiJXNcbiIsIHQpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGNvbnN0Y21wKHQgKyBzdHJsZW4oIk5vZGUtIiksICJraW5kIikpCisJCQkJY29udGludWU7CisJCQlzdHJidWZfYWRkZigmcmV2X2N0eC5ub3RlLCAiJXNcbiIsIHQpOworCQkJaWYgKCFzdHJjbXAodmFsLCAiZGlyIikpCisJCQkJbm9kZV9jdHgudHlwZSA9IFNfSUZESVI7CisJCQllbHNlIGlmICghc3RyY21wKHZhbCwgImZpbGUiKSkKKwkJCQlub2RlX2N0eC50eXBlID0gU19JRlJFRyB8IDA2NDQ7CisJCQllbHNlCisJCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIG5vZGUta2luZDogJXNcbiIsIHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSBzaXplb2YoIk5vZGUtYWN0aW9uIik6CisJCQlpZiAoY29uc3RjbXAodCwgIk5vZGUtYWN0aW9uIikpCisJCQkJY29udGludWU7CisJCQlzdHJidWZfYWRkZigmcmV2X2N0eC5ub3RlLCAiJXNcbiIsIHQpOworCQkJaWYgKCFzdHJjbXAodmFsLCAiZGVsZXRlIikpIHsKKwkJCQlub2RlX2N0eC5hY3Rpb24gPSBOT0RFQUNUX0RFTEVURTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcCh2YWwsICJhZGQiKSkgeworCQkJCW5vZGVfY3R4LmFjdGlvbiA9IE5PREVBQ1RfQUREOworCQkJfSBlbHNlIGlmICghc3RyY21wKHZhbCwgImNoYW5nZSIpKSB7CisJCQkJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9DSEFOR0U7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAodmFsLCAicmVwbGFjZSIpKSB7CisJCQkJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9SRVBMQUNFOworCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gbm9kZS1hY3Rpb246ICVzXG4iLCB2YWwpOworCQkJCW5vZGVfY3R4LmFjdGlvbiA9IE5PREVBQ1RfVU5LTk9XTjsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIHNpemVvZigiTm9kZS1jb3B5ZnJvbS1wYXRoIik6CisJCQlpZiAoY29uc3RjbXAodCwgIk5vZGUtY29weWZyb20tcGF0aCIpKQorCQkJCWNvbnRpbnVlOworCQkJc3RyYnVmX3Jlc2V0KCZub2RlX2N0eC5zcmMpOworCQkJc3RyYnVmX2FkZHN0cigmbm9kZV9jdHguc3JjLCB2YWwpOworCQkJc3RyYnVmX2FkZGYoJnJldl9jdHgubm90ZSwgIiVzXG4iLCB0KTsKKwkJCWJyZWFrOworCQljYXNlIHNpemVvZigiTm9kZS1jb3B5ZnJvbS1yZXYiKToKKwkJCWlmIChjb25zdGNtcCh0LCAiTm9kZS1jb3B5ZnJvbS1yZXYiKSkKKwkJCQljb250aW51ZTsKKwkJCW5vZGVfY3R4LnNyY1JldiA9IGF0b2kodmFsKTsKKwkJCXN0cmJ1Zl9hZGRmKCZyZXZfY3R4Lm5vdGUsICIlc1xuIiwgdCk7CisJCQlicmVhazsKKwkJY2FzZSBzaXplb2YoIlRleHQtY29udGVudC1sZW5ndGgiKToKKwkJCWlmIChjb25zdGNtcCh0LCAiVGV4dCIpICYmIGNvbnN0Y21wKHQsICJQcm9wIikpCisJCQkJY29udGludWU7CisJCQlpZiAoY29uc3RjbXAodCArIDQsICItY29udGVudC1sZW5ndGgiKSkKKwkJCQljb250aW51ZTsKKwkJCXsKKwkJCQljaGFyICplbmQ7CisJCQkJdWludG1heF90IGxlbjsKKworCQkJCWxlbiA9IHN0cnRvdW1heCh2YWwsICZlbmQsIDEwKTsKKwkJCQlpZiAoIWlzZGlnaXQoKnZhbCkgfHwgKmVuZCkKKwkJCQkJZGllKCJpbnZhbGlkIGR1bXA6IG5vbi1udW1lcmljIGxlbmd0aCAlcyIsIHZhbCk7CisJCQkJaWYgKGxlbiA+IG1heGltdW1fc2lnbmVkX3ZhbHVlX29mX3R5cGUob2ZmX3QpKQorCQkJCQlkaWUoInVucmVwcmVzZW50YWJsZSBsZW5ndGggaW4gZHVtcDogJXMiLCB2YWwpOworCisJCQkJaWYgKCp0ID09ICdUJykKKwkJCQkJbm9kZV9jdHgudGV4dF9sZW5ndGggPSAob2ZmX3QpIGxlbjsKKwkJCQllbHNlCisJCQkJCW5vZGVfY3R4LnByb3BfbGVuZ3RoID0gKG9mZl90KSBsZW47CisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2Ugc2l6ZW9mKCJUZXh0LWRlbHRhIik6CisJCQlpZiAoIWNvbnN0Y21wKHQsICJUZXh0LWRlbHRhIikpIHsKKwkJCQlub2RlX2N0eC50ZXh0X2RlbHRhID0gIXN0cmNtcCh2YWwsICJ0cnVlIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoY29uc3RjbXAodCwgIlByb3AtZGVsdGEiKSkKKwkJCQljb250aW51ZTsKKwkJCW5vZGVfY3R4LnByb3BfZGVsdGEgPSAhc3RyY21wKHZhbCwgInRydWUiKTsKKwkJCWJyZWFrOworCQljYXNlIHNpemVvZigiQ29udGVudC1sZW5ndGgiKToKKwkJCWlmIChjb25zdGNtcCh0LCAiQ29udGVudC1sZW5ndGgiKSkKKwkJCQljb250aW51ZTsKKwkJCWxlbiA9IGF0b2kodmFsKTsKKwkJCXQgPSBidWZmZXJfcmVhZF9saW5lKCZpbnB1dCk7CisJCQlpZiAoIXQpCisJCQkJZGllX3Nob3J0X3JlYWQoKTsKKwkJCWlmICgqdCkKKwkJCQlkaWUoImludmFsaWQgZHVtcDogZXhwZWN0ZWQgYmxhbmsgbGluZSBhZnRlciBjb250ZW50IGxlbmd0aCBoZWFkZXIiKTsKKwkJCWlmIChhY3RpdmVfY3R4ID09IFJFVl9DVFgpIHsKKwkJCQlyZWFkX3Byb3BzKCk7CisJCQl9IGVsc2UgaWYgKGFjdGl2ZV9jdHggPT0gTk9ERV9DVFgpIHsKKwkJCQloYW5kbGVfbm9kZSgpOworCQkJCWFjdGl2ZV9jdHggPSBJTlRFUk5PREVfQ1RYOworCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVuZXhwZWN0ZWQgY29udGVudCBsZW5ndGggaGVhZGVyOiAlIlBSSXUzMiJcbiIsIGxlbik7CisJCQkJaWYgKGJ1ZmZlcl9za2lwX2J5dGVzKCZpbnB1dCwgbGVuKSAhPSBsZW4pCisJCQkJCWRpZV9zaG9ydF9yZWFkKCk7CisJCQl9CisJCX0KKwl9CisJaWYgKGJ1ZmZlcl9mZXJyb3IoJmlucHV0KSkKKwkJZGllX3Nob3J0X3JlYWQoKTsKKwlpZiAoYWN0aXZlX2N0eCA9PSBOT0RFX0NUWCkKKwkJaGFuZGxlX25vZGUoKTsKKwlpZiAoYWN0aXZlX2N0eCA9PSBSRVZfQ1RYKQorCQliZWdpbl9yZXZpc2lvbihsb2NhbF9yZWYpOworCWlmIChhY3RpdmVfY3R4ICE9IERVTVBfQ1RYKQorCQllbmRfcmV2aXNpb24obm90ZXNfcmVmKTsKK30KKworc3RhdGljIHZvaWQgaW5pdChpbnQgcmVwb3J0X2ZkKQoreworCWZhc3RfZXhwb3J0X2luaXQocmVwb3J0X2ZkKTsKKwlzdHJidWZfaW5pdCgmZHVtcF9jdHgudXVpZCwgNDA5Nik7CisJc3RyYnVmX2luaXQoJmR1bXBfY3R4LnVybCwgNDA5Nik7CisJc3RyYnVmX2luaXQoJnJldl9jdHgubG9nLCA0MDk2KTsKKwlzdHJidWZfaW5pdCgmcmV2X2N0eC5hdXRob3IsIDQwOTYpOworCXN0cmJ1Zl9pbml0KCZyZXZfY3R4Lm5vdGUsIDQwOTYpOworCXN0cmJ1Zl9pbml0KCZub2RlX2N0eC5zcmMsIDQwOTYpOworCXN0cmJ1Zl9pbml0KCZub2RlX2N0eC5kc3QsIDQwOTYpOworCXJlc2V0X2R1bXBfY3R4KE5VTEwpOworCXJlc2V0X3Jldl9jdHgoMCk7CisJcmVzZXRfbm9kZV9jdHgoTlVMTCk7CisJcmV0dXJuOworfQorCitpbnQgc3ZuZHVtcF9pbml0KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWlmIChidWZmZXJfaW5pdCgmaW5wdXQsIGZpbGVuYW1lKSkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKCJjYW5ub3Qgb3BlbiAlcyIsIGZpbGVuYW1lID8gZmlsZW5hbWUgOiAiTlVMTCIpOworCWluaXQoUkVQT1JUX0ZJTEVOTyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzdm5kdW1wX2luaXRfZmQoaW50IGluX2ZkLCBpbnQgYmFja19mZCkKK3sKKwlpZihidWZmZXJfZmRpbml0KCZpbnB1dCwgeGR1cChpbl9mZCkpKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oImNhbm5vdCBvcGVuIGZkICVkIiwgaW5fZmQpOworCWluaXQoeGR1cChiYWNrX2ZkKSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc3ZuZHVtcF9kZWluaXQodm9pZCkKK3sKKwlmYXN0X2V4cG9ydF9kZWluaXQoKTsKKwlyZXNldF9kdW1wX2N0eChOVUxMKTsKKwlyZXNldF9yZXZfY3R4KDApOworCXJlc2V0X25vZGVfY3R4KE5VTEwpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZXZfY3R4LmxvZyk7CisJc3RyYnVmX3JlbGVhc2UoJnJldl9jdHguYXV0aG9yKTsKKwlzdHJidWZfcmVsZWFzZSgmcmV2X2N0eC5ub3RlKTsKKwlzdHJidWZfcmVsZWFzZSgmbm9kZV9jdHguc3JjKTsKKwlzdHJidWZfcmVsZWFzZSgmbm9kZV9jdHguZHN0KTsKKwlpZiAoYnVmZmVyX2RlaW5pdCgmaW5wdXQpKQorCQlmcHJpbnRmKHN0ZGVyciwgIklucHV0IGVycm9yXG4iKTsKKwlpZiAoZmVycm9yKHN0ZG91dCkpCisJCWZwcmludGYoc3RkZXJyLCAiT3V0cHV0IGVycm9yXG4iKTsKK30KKwordm9pZCBzdm5kdW1wX3Jlc2V0KHZvaWQpCit7CisJc3RyYnVmX3JlbGVhc2UoJmR1bXBfY3R4LnV1aWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZkdW1wX2N0eC51cmwpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZXZfY3R4LmxvZyk7CisJc3RyYnVmX3JlbGVhc2UoJnJldl9jdHguYXV0aG9yKTsKK30KZGlmZiAtLWdpdCBhL3Zjcy1zdm4vc3ZuZHVtcC5oIGIvdmNzLXN2bi9zdm5kdW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmYWVkNQotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vc3ZuZHVtcC5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgU1ZORFVNUF9ICisjZGVmaW5lIFNWTkRVTVBfSAorCitpbnQgc3ZuZHVtcF9pbml0KGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK2ludCBzdm5kdW1wX2luaXRfZmQoaW50IGluX2ZkLCBpbnQgYmFja19mZCk7Cit2b2lkIHN2bmR1bXBfcmVhZChjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmxvY2FsX3JlZiwgY29uc3QgY2hhciAqbm90ZXNfcmVmKTsKK3ZvaWQgc3ZuZHVtcF9kZWluaXQodm9pZCk7Cit2b2lkIHN2bmR1bXBfcmVzZXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyc2lvbi5jIGIvdmVyc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYjcxOGMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJzaW9uLmMKQEAgLTAsMCArMSwzOSBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworY29uc3QgY2hhciBnaXRfdmVyc2lvbl9zdHJpbmdbXSA9IEdJVF9WRVJTSU9OOworY29uc3QgY2hhciBnaXRfYnVpbHRfZnJvbV9jb21taXRfc3RyaW5nW10gPSBHSVRfQlVJTFRfRlJPTV9DT01NSVQ7CisKK2NvbnN0IGNoYXIgKmdpdF91c2VyX2FnZW50KHZvaWQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmFnZW50ID0gTlVMTDsKKworCWlmICghYWdlbnQpIHsKKwkJYWdlbnQgPSBnZXRlbnYoIkdJVF9VU0VSX0FHRU5UIik7CisJCWlmICghYWdlbnQpCisJCQlhZ2VudCA9IEdJVF9VU0VSX0FHRU5UOworCX0KKworCXJldHVybiBhZ2VudDsKK30KKworY29uc3QgY2hhciAqZ2l0X3VzZXJfYWdlbnRfc2FuaXRpemVkKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmFnZW50ID0gTlVMTDsKKworCWlmICghYWdlbnQpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJaW50IGk7CisKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBnaXRfdXNlcl9hZ2VudCgpKTsKKwkJc3RyYnVmX3RyaW0oJmJ1Zik7CisJCWZvciAoaSA9IDA7IGkgPCBidWYubGVuOyBpKyspIHsKKwkJCWlmIChidWYuYnVmW2ldIDw9IDMyIHx8IGJ1Zi5idWZbaV0gPj0gMTI3KQorCQkJCWJ1Zi5idWZbaV0gPSAnLic7CisJCX0KKwkJYWdlbnQgPSBidWYuYnVmOworCX0KKworCXJldHVybiBhZ2VudDsKK30KZGlmZiAtLWdpdCBhL3ZlcnNpb24uaCBiL3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzYyZTgwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyc2lvbi5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgVkVSU0lPTl9ICisjZGVmaW5lIFZFUlNJT05fSAorCitleHRlcm4gY29uc3QgY2hhciBnaXRfdmVyc2lvbl9zdHJpbmdbXTsKK2V4dGVybiBjb25zdCBjaGFyIGdpdF9idWlsdF9mcm9tX2NvbW1pdF9zdHJpbmdbXTsKKworY29uc3QgY2hhciAqZ2l0X3VzZXJfYWdlbnQodm9pZCk7Citjb25zdCBjaGFyICpnaXRfdXNlcl9hZ2VudF9zYW5pdGl6ZWQodm9pZCk7CisKKyNlbmRpZiAvKiBWRVJTSU9OX0ggKi8KZGlmZiAtLWdpdCBhL3ZlcnNpb25jbXAuYyBiL3ZlcnNpb25jbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjllZTk0Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyc2lvbmNtcC5jCkBAIC0wLDAgKzEsMTkzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCisvKgorICogdmVyc2lvbmNtcCgpOiBjb3BpZWQgZnJvbSBzdHJpbmcvc3RydmVyc2NtcC5jIGluIGdsaWJjIGNvbW1pdAorICogZWU5MjQ3YzM4YThkZWYyNGE1OWViNWNmYjcxOTZhOThiZWY4Y2ZkYywgcmVmb3JtYXR0ZWQgdG8gR2l0IGNvZGluZworICogc3R5bGUuIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyB1bmRlciBMR1BMLTIuMSBhbmQgR2l0IHJlbGljZW5zZXMgaXQKKyAqIHRvIEdQTHYyLgorICovCisKKy8qCisgKiBzdGF0ZXM6IFNfTjogbm9ybWFsLCBTX0k6IGNvbXBhcmluZyBpbnRlZ3JhbCBwYXJ0LCBTX0Y6IGNvbXBhcmluZworICogZnJhY3Rpb25uYWwgcGFydHMsIFNfWjogaWRlbSBidXQgd2l0aCBsZWFkaW5nIFplcm9lcyBvbmx5CisgKi8KKyNkZWZpbmUgIFNfTiAgICAweDAKKyNkZWZpbmUgIFNfSSAgICAweDMKKyNkZWZpbmUgIFNfRiAgICAweDYKKyNkZWZpbmUgIFNfWiAgICAweDkKKworLyogcmVzdWx0X3R5cGU6IENNUDogcmV0dXJuIGRpZmY7IExFTjogY29tcGFyZSB1c2luZyBsZW5fZGlmZi9kaWZmICovCisjZGVmaW5lICBDTVAgICAgMgorI2RlZmluZSAgTEVOICAgIDMKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcHJlcmVsZWFzZXM7CitzdGF0aWMgaW50IGluaXRpYWxpemVkOworCitzdHJ1Y3Qgc3VmZml4X21hdGNoIHsKKwlpbnQgY29uZl9wb3M7CisJaW50IHN0YXJ0OworCWludCBsZW47Cit9OworCitzdGF0aWMgdm9pZCBmaW5kX2JldHRlcl9tYXRjaGluZ19zdWZmaXgoY29uc3QgY2hhciAqdGFnbmFtZSwgY29uc3QgY2hhciAqc3VmZml4LAorCQkJCQlpbnQgc3VmZml4X2xlbiwgaW50IHN0YXJ0LCBpbnQgY29uZl9wb3MsCisJCQkJCXN0cnVjdCBzdWZmaXhfbWF0Y2ggKm1hdGNoKQoreworCS8qCisJICogQSBiZXR0ZXIgbWF0Y2ggZWl0aGVyIHN0YXJ0cyBlYXJsaWVyIG9yIHN0YXJ0cyBhdCB0aGUgc2FtZSBvZmZzZXQKKwkgKiBidXQgaXMgbG9uZ2VyLgorCSAqLworCWludCBlbmQgPSBtYXRjaC0+bGVuIDwgc3VmZml4X2xlbiA/IG1hdGNoLT5zdGFydCA6IG1hdGNoLT5zdGFydC0xOworCWludCBpOworCWZvciAoaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKQorCQlpZiAoc3RhcnRzX3dpdGgodGFnbmFtZSArIGksIHN1ZmZpeCkpIHsKKwkJCW1hdGNoLT5jb25mX3BvcyA9IGNvbmZfcG9zOworCQkJbWF0Y2gtPnN0YXJ0ID0gaTsKKwkJCW1hdGNoLT5sZW4gPSBzdWZmaXhfbGVuOworCQkJYnJlYWs7CisJCX0KK30KKworLyoKKyAqIG9mZiBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBkaWZmZXJlbnQgY2hhcmFjdGVyIGluIHRoZSB0d28gc3RyaW5ncworICogczEgYW5kIHMyLiBJZiBlaXRoZXIgczEgb3IgczIgY29udGFpbnMgYSBwcmVyZWxlYXNlIHN1ZmZpeCBjb250YWluaW5nCisgKiB0aGF0IG9mZnNldCBvciBhIHN1ZmZpeCBlbmRzIHJpZ2h0IGJlZm9yZSB0aGF0IG9mZnNldCwgdGhlbiB0aGF0CisgKiBzdHJpbmcgd2lsbCBiZSBmb3JjZWQgdG8gYmUgb24gdG9wLgorICoKKyAqIElmIGJvdGggczEgYW5kIHMyIGNvbnRhaW4gYSAoZGlmZmVyZW50KSBzdWZmaXggYXJvdW5kIHRoYXQgcG9zaXRpb24sCisgKiB0aGVpciBvcmRlciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciBvZiB0aG9zZSB0d28gc3VmZml4ZXMgaW4gdGhlCisgKiBjb25maWd1cmF0aW9uLgorICogSWYgYW55IG9mIHRoZSBzdHJpbmdzIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZGlmZmVyZW50IHN1ZmZpeGVzIGFyb3VuZAorICogdGhhdCBwb3NpdGlvbiwgdGhlbiB0aGF0IHN0cmluZyBpcyBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb250YWluZWQKKyAqIHN1ZmZpeCB3aGljaCBzdGFydHMgYXQgdGhlIGVhcmxpZXN0IG9mZnNldCBpbiB0aGF0IHN0cmluZy4KKyAqIElmIG1vcmUgdGhhbiBvbmUgZGlmZmVyZW50IGNvbnRhaW5lZCBzdWZmaXhlcyBzdGFydCBhdCB0aGF0IGVhcmxpZXN0CisgKiBvZmZzZXQsIHRoZW4gdGhhdCBzdHJpbmcgaXMgc29ydGVkIGFjY29yZGluZyB0byB0aGUgbG9uZ2VzdCBvZiB0aG9zZQorICogc3VmZml4ZXMuCisgKgorICogUmV0dXJuIG5vbi16ZXJvIGlmICpkaWZmIGNvbnRhaW5zIHRoZSByZXR1cm4gdmFsdWUgZm9yIHZlcnNpb25jbXAoKQorICovCitzdGF0aWMgaW50IHN3YXBfcHJlcmVsZWFzZXMoY29uc3QgY2hhciAqczEsCisJCQkgICAgY29uc3QgY2hhciAqczIsCisJCQkgICAgaW50IG9mZiwKKwkJCSAgICBpbnQgKmRpZmYpCit7CisJaW50IGk7CisJc3RydWN0IHN1ZmZpeF9tYXRjaCBtYXRjaDEgPSB7IC0xLCBvZmYsIC0xIH07CisJc3RydWN0IHN1ZmZpeF9tYXRjaCBtYXRjaDIgPSB7IC0xLCBvZmYsIC0xIH07CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJlcmVsZWFzZXMtPm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqc3VmZml4ID0gcHJlcmVsZWFzZXMtPml0ZW1zW2ldLnN0cmluZzsKKwkJaW50IHN0YXJ0LCBzdWZmaXhfbGVuID0gc3RybGVuKHN1ZmZpeCk7CisJCWlmIChzdWZmaXhfbGVuIDwgb2ZmKQorCQkJc3RhcnQgPSBvZmYgLSBzdWZmaXhfbGVuOworCQllbHNlCisJCQlzdGFydCA9IDA7CisJCWZpbmRfYmV0dGVyX21hdGNoaW5nX3N1ZmZpeChzMSwgc3VmZml4LCBzdWZmaXhfbGVuLCBzdGFydCwKKwkJCQkJICAgIGksICZtYXRjaDEpOworCQlmaW5kX2JldHRlcl9tYXRjaGluZ19zdWZmaXgoczIsIHN1ZmZpeCwgc3VmZml4X2xlbiwgc3RhcnQsCisJCQkJCSAgICBpLCAmbWF0Y2gyKTsKKwl9CisJaWYgKG1hdGNoMS5jb25mX3BvcyA9PSAtMSAmJiBtYXRjaDIuY29uZl9wb3MgPT0gLTEpCisJCXJldHVybiAwOworCWlmIChtYXRjaDEuY29uZl9wb3MgPT0gbWF0Y2gyLmNvbmZfcG9zKQorCQkvKiBGb3VuZCB0aGUgc2FtZSBzdWZmaXggaW4gYm90aCwgZS5nLiAiLXJjIiBpbiAidjEuMC1yY1giCisJCSAqIGFuZCAidjEuMC1yY1kiOiB0aGUgY2FsbGVyIHNob3VsZCBkZWNpZGUgYmFzZWQgb24gIlgiCisJCSAqIGFuZCAiWSIuICovCisJCXJldHVybiAwOworCisJaWYgKG1hdGNoMS5jb25mX3BvcyA+PSAwICYmIG1hdGNoMi5jb25mX3BvcyA+PSAwKQorCQkqZGlmZiA9IG1hdGNoMS5jb25mX3BvcyAtIG1hdGNoMi5jb25mX3BvczsKKwllbHNlIGlmIChtYXRjaDEuY29uZl9wb3MgPj0gMCkKKwkJKmRpZmYgPSAtMTsKKwllbHNlIC8qIGlmIChtYXRjaDIuY29uZl9wb3MgPj0gMCkgKi8KKwkJKmRpZmYgPSAxOworCXJldHVybiAxOworfQorCisvKgorICogQ29tcGFyZSBTMSBhbmQgUzIgYXMgc3RyaW5ncyBob2xkaW5nIGluZGljZXMvdmVyc2lvbiBudW1iZXJzLAorICogcmV0dXJuaW5nIGxlc3MgdGhhbiwgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHplcm8gaWYgUzEgaXMgbGVzcworICogdGhhbiwgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIFMyIChmb3IgbW9yZSBpbmZvLCBzZWUgdGhlIHRleGluZm8KKyAqIGRvYykuCisgKi8KKworaW50IHZlcnNpb25jbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAxID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgczE7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcDIgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzMjsKKwl1bnNpZ25lZCBjaGFyIGMxLCBjMjsKKwlpbnQgc3RhdGUsIGRpZmY7CisKKwkvKgorCSAqIFN5bWJvbChzKSAgICAwICAgICAgIFsxLTldICAgb3RoZXJzCisJICogVHJhbnNpdGlvbiAgICgxMCkgMCAgKDAxKSBkICAoMDApIHgKKwkgKi8KKwlzdGF0aWMgY29uc3QgdWludDhfdCBuZXh0X3N0YXRlW10gPSB7CisJCS8qIHN0YXRlICAgIHggICAgZCAgICAwICAqLworCQkvKiBTX04gKi8gIFNfTiwgU19JLCBTX1osCisJCS8qIFNfSSAqLyAgU19OLCBTX0ksIFNfSSwKKwkJLyogU19GICovICBTX04sIFNfRiwgU19GLAorCQkvKiBTX1ogKi8gIFNfTiwgU19GLCBTX1oKKwl9OworCisJc3RhdGljIGNvbnN0IGludDhfdCByZXN1bHRfdHlwZVtdID0geworCQkvKiBzdGF0ZSAgIHgveCAgeC9kICB4LzAgIGQveCAgZC9kICBkLzAgIDAveCAgMC9kICAwLzAgICovCisKKwkJLyogU19OICovICBDTVAsIENNUCwgQ01QLCBDTVAsIExFTiwgQ01QLCBDTVAsIENNUCwgQ01QLAorCQkvKiBTX0kgKi8gIENNUCwgLTEsICAtMSwgICsxLCAgTEVOLCBMRU4sICsxLCAgTEVOLCBMRU4sCisJCS8qIFNfRiAqLyAgQ01QLCBDTVAsIENNUCwgQ01QLCBDTVAsIENNUCwgQ01QLCBDTVAsIENNUCwKKwkJLyogU19aICovICBDTVAsICsxLCAgKzEsICAtMSwgIENNUCwgQ01QLCAtMSwgIENNUCwgQ01QCisJfTsKKworCWlmIChwMSA9PSBwMikKKwkJcmV0dXJuIDA7CisKKwljMSA9ICpwMSsrOworCWMyID0gKnAyKys7CisJLyogSGludDogJzAnIGlzIGEgZGlnaXQgdG9vLiAgKi8KKwlzdGF0ZSA9IFNfTiArICgoYzEgPT0gJzAnKSArIChpc2RpZ2l0IChjMSkgIT0gMCkpOworCisJd2hpbGUgKChkaWZmID0gYzEgLSBjMikgPT0gMCkgeworCQlpZiAoYzEgPT0gJ1wwJykKKwkJCXJldHVybiBkaWZmOworCisJCXN0YXRlID0gbmV4dF9zdGF0ZVtzdGF0ZV07CisJCWMxID0gKnAxKys7CisJCWMyID0gKnAyKys7CisJCXN0YXRlICs9IChjMSA9PSAnMCcpICsgKGlzZGlnaXQgKGMxKSAhPSAwKTsKKwl9CisKKwlpZiAoIWluaXRpYWxpemVkKSB7CisJCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZGVwcmVjYXRlZF9wcmVyZWxlYXNlczsKKwkJaW5pdGlhbGl6ZWQgPSAxOworCQlwcmVyZWxlYXNlcyA9IGdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpKCJ2ZXJzaW9uc29ydC5zdWZmaXgiKTsKKwkJZGVwcmVjYXRlZF9wcmVyZWxlYXNlcyA9IGdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpKCJ2ZXJzaW9uc29ydC5wcmVyZWxlYXNlc3VmZml4Iik7CisJCWlmIChwcmVyZWxlYXNlcykgeworCQkJaWYgKGRlcHJlY2F0ZWRfcHJlcmVsZWFzZXMpCisJCQkJd2FybmluZygiaWdub3JpbmcgdmVyc2lvbnNvcnQucHJlcmVsZWFzZXN1ZmZpeCBiZWNhdXNlIHZlcnNpb25zb3J0LnN1ZmZpeCBpcyBzZXQiKTsKKwkJfSBlbHNlCisJCQlwcmVyZWxlYXNlcyA9IGRlcHJlY2F0ZWRfcHJlcmVsZWFzZXM7CisJfQorCWlmIChwcmVyZWxlYXNlcyAmJiBzd2FwX3ByZXJlbGVhc2VzKHMxLCBzMiwgKGNvbnN0IGNoYXIgKikgcDEgLSBzMSAtIDEsCisJCQkJCSAgICAmZGlmZikpCisJCXJldHVybiBkaWZmOworCisJc3RhdGUgPSByZXN1bHRfdHlwZVtzdGF0ZSAqIDMgKyAoKChjMiA9PSAnMCcpICsgKGlzZGlnaXQgKGMyKSAhPSAwKSkpXTsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIENNUDoKKwkJcmV0dXJuIGRpZmY7CisKKwljYXNlIExFTjoKKwkJd2hpbGUgKGlzZGlnaXQgKCpwMSsrKSkKKwkJCWlmICghaXNkaWdpdCAoKnAyKyspKQorCQkJCXJldHVybiAxOworCisJCXJldHVybiBpc2RpZ2l0ICgqcDIpID8gLTEgOiBkaWZmOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIHN0YXRlOworCX0KK30KZGlmZiAtLWdpdCBhL3dhbGtlci5jIGIvd2Fsa2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk4NGJmOAotLS0gL2Rldi9udWxsCisrKyBiL3dhbGtlci5jCkBAIC0wLDAgKzEsMzQ5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ3YWxrZXIuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKworc3RhdGljIHN0cnVjdCBvYmplY3RfaWQgY3VycmVudF9jb21taXRfb2lkOworCit2b2lkIHdhbGtlcl9zYXkoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpZiAod2Fsa2VyLT5nZXRfdmVyYm9zZWx5KSB7CisJCXZhX2xpc3QgYXA7CisJCXZhX3N0YXJ0KGFwLCBmbXQpOworCQl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCQl2YV9lbmQoYXApOworCX0KK30KKworc3RhdGljIHZvaWQgcmVwb3J0X21pc3NpbmcoY29uc3Qgc3RydWN0IG9iamVjdCAqb2JqKQoreworCWZwcmludGYoc3RkZXJyLCAiQ2Fubm90IG9idGFpbiBuZWVkZWQgJXMgJXNcbiIsCisJCW9iai0+dHlwZSA/IHR5cGVfbmFtZShvYmotPnR5cGUpOiAib2JqZWN0IiwKKwkJb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKKwlpZiAoIWlzX251bGxfb2lkKCZjdXJyZW50X2NvbW1pdF9vaWQpKQorCQlmcHJpbnRmKHN0ZGVyciwgIndoaWxlIHByb2Nlc3NpbmcgY29tbWl0ICVzLlxuIiwKKwkJCW9pZF90b19oZXgoJmN1cnJlbnRfY29tbWl0X29pZCkpOworfQorCitzdGF0aWMgaW50IHByb2Nlc3Moc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopOworCitzdGF0aWMgaW50IHByb2Nlc3NfdHJlZShzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCB0cmVlICp0cmVlKQoreworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKworCWlmIChwYXJzZV90cmVlKHRyZWUpKQorCQlyZXR1cm4gLTE7CisKKwlpbml0X3RyZWVfZGVzYygmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwl3aGlsZSAodHJlZV9lbnRyeSgmZGVzYywgJmVudHJ5KSkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBOVUxMOworCisJCS8qIHN1Ym1vZHVsZSBjb21taXRzIGFyZSBub3Qgc3RvcmVkIGluIHRoZSBzdXBlcnByb2plY3QgKi8KKwkJaWYgKFNfSVNHSVRMSU5LKGVudHJ5Lm1vZGUpKQorCQkJY29udGludWU7CisJCWlmIChTX0lTRElSKGVudHJ5Lm1vZGUpKSB7CisJCQlzdHJ1Y3QgdHJlZSAqdHJlZSA9IGxvb2t1cF90cmVlKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSZlbnRyeS5vaWQpOworCQkJaWYgKHRyZWUpCisJCQkJb2JqID0gJnRyZWUtPm9iamVjdDsKKwkJfQorCQllbHNlIHsKKwkJCXN0cnVjdCBibG9iICpibG9iID0gbG9va3VwX2Jsb2IodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJJmVudHJ5Lm9pZCk7CisJCQlpZiAoYmxvYikKKwkJCQlvYmogPSAmYmxvYi0+b2JqZWN0OworCQl9CisJCWlmICghb2JqIHx8IHByb2Nlc3Mod2Fsa2VyLCBvYmopKQorCQkJcmV0dXJuIC0xOworCX0KKwlmcmVlX3RyZWVfYnVmZmVyKHRyZWUpOworCXJldHVybiAwOworfQorCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworI2RlZmluZSBDT01QTEVURQkoMVUgPDwgMCkKKyNkZWZpbmUgU0VFTgkJKDFVIDw8IDEpCisjZGVmaW5lIFRPX1NDQU4JCSgxVSA8PCAyKQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpjb21wbGV0ZSA9IE5VTEw7CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19jb21taXQoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCisJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQorCQlyZXR1cm4gLTE7CisKKwl3aGlsZSAoY29tcGxldGUgJiYgY29tcGxldGUtPml0ZW0tPmRhdGUgPj0gY29tbWl0LT5kYXRlKSB7CisJCXBvcF9tb3N0X3JlY2VudF9jb21taXQoJmNvbXBsZXRlLCBDT01QTEVURSk7CisJfQorCisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NUExFVEUpCisJCXJldHVybiAwOworCisJb2lkY3B5KCZjdXJyZW50X2NvbW1pdF9vaWQsICZjb21taXQtPm9iamVjdC5vaWQpOworCisJd2Fsa2VyX3NheSh3YWxrZXIsICJ3YWxrICVzXG4iLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKworCWlmIChwcm9jZXNzKHdhbGtlciwgJmdldF9jb21taXRfdHJlZShjb21taXQpLT5vYmplY3QpKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudHM7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7CisJCWlmIChwcm9jZXNzKHdhbGtlciwgJnBhcmVudHMtPml0ZW0tPm9iamVjdCkpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc190YWcoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgdGFnICp0YWcpCit7CisJaWYgKHBhcnNlX3RhZyh0YWcpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHByb2Nlc3Mod2Fsa2VyLCB0YWctPnRhZ2dlZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKnByb2Nlc3NfcXVldWUgPSBOVUxMOworc3RhdGljIHN0cnVjdCBvYmplY3RfbGlzdCAqKnByb2Nlc3NfcXVldWVfZW5kID0gJnByb2Nlc3NfcXVldWU7CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19vYmplY3Qoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJaWYgKG9iai0+dHlwZSA9PSBPQkpfQ09NTUlUKSB7CisJCWlmIChwcm9jZXNzX2NvbW1pdCh3YWxrZXIsIChzdHJ1Y3QgY29tbWl0ICopb2JqKSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJaWYgKHByb2Nlc3NfdHJlZSh3YWxrZXIsIChzdHJ1Y3QgdHJlZSAqKW9iaikpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwlpZiAob2JqLT50eXBlID09IE9CSl9CTE9CKSB7CisJCXJldHVybiAwOworCX0KKwlpZiAob2JqLT50eXBlID09IE9CSl9UQUcpIHsKKwkJaWYgKHByb2Nlc3NfdGFnKHdhbGtlciwgKHN0cnVjdCB0YWcgKilvYmopKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gZGV0ZXJtaW5lIHJlcXVpcmVtZW50cyAiCisJCSAgICAgIm9mIHR5cGUgJXMgZm9yICVzIiwKKwkJICAgICB0eXBlX25hbWUob2JqLT50eXBlKSwgb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IG9iamVjdCAqb2JqKQoreworCWlmIChvYmotPmZsYWdzICYgU0VFTikKKwkJcmV0dXJuIDA7CisJb2JqLT5mbGFncyB8PSBTRUVOOworCisJaWYgKGhhc19vYmplY3RfZmlsZSgmb2JqLT5vaWQpKSB7CisJCS8qIFdlIGFscmVhZHkgaGF2ZSBpdCwgc28gd2Ugc2hvdWxkIHNjYW4gaXQgbm93LiAqLworCQlvYmotPmZsYWdzIHw9IFRPX1NDQU47CisJfQorCWVsc2UgeworCQlpZiAob2JqLT5mbGFncyAmIENPTVBMRVRFKQorCQkJcmV0dXJuIDA7CisJCXdhbGtlci0+cHJlZmV0Y2god2Fsa2VyLCBvYmotPm9pZC5oYXNoKTsKKwl9CisKKwlvYmplY3RfbGlzdF9pbnNlcnQob2JqLCBwcm9jZXNzX3F1ZXVlX2VuZCk7CisJcHJvY2Vzc19xdWV1ZV9lbmQgPSAmKCpwcm9jZXNzX3F1ZXVlX2VuZCktPm5leHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9vcChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIpCit7CisJc3RydWN0IG9iamVjdF9saXN0ICplbGVtOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCXVpbnQ2NF90IG5yID0gMDsKKworCWlmICh3YWxrZXItPmdldF9wcm9ncmVzcykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKF8oIkZldGNoaW5nIG9iamVjdHMiKSwgMCk7CisKKwl3aGlsZSAocHJvY2Vzc19xdWV1ZSkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBwcm9jZXNzX3F1ZXVlLT5pdGVtOworCQllbGVtID0gcHJvY2Vzc19xdWV1ZTsKKwkJcHJvY2Vzc19xdWV1ZSA9IGVsZW0tPm5leHQ7CisJCWZyZWUoZWxlbSk7CisJCWlmICghcHJvY2Vzc19xdWV1ZSkKKwkJCXByb2Nlc3NfcXVldWVfZW5kID0gJnByb2Nlc3NfcXVldWU7CisKKwkJLyogSWYgd2UgYXJlIG5vdCBzY2FubmluZyB0aGlzIG9iamVjdCwgd2UgcGxhY2VkIGl0IGluCisJCSAqIHRoZSBxdWV1ZSBiZWNhdXNlIHdlIG5lZWRlZCB0byBmZXRjaCBpdCBmaXJzdC4KKwkJICovCisJCWlmICghIChvYmotPmZsYWdzICYgVE9fU0NBTikpIHsKKwkJCWlmICh3YWxrZXItPmZldGNoKHdhbGtlciwgb2JqLT5vaWQuaGFzaCkpIHsKKwkJCQlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisJCQkJcmVwb3J0X21pc3Npbmcob2JqKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJaWYgKCFvYmotPnR5cGUpCisJCQlwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvYmotPm9pZCk7CisJCWlmIChwcm9jZXNzX29iamVjdCh3YWxrZXIsIG9iaikpIHsKKwkJCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCArK25yKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGludGVycHJldF90YXJnZXQoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBjaGFyICp0YXJnZXQsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpZiAoIWdldF9vaWRfaGV4KHRhcmdldCwgb2lkKSkKKwkJcmV0dXJuIDA7CisJaWYgKCFjaGVja19yZWZuYW1lX2Zvcm1hdCh0YXJnZXQsIDApKSB7CisJCXN0cnVjdCByZWYgKnJlZiA9IGFsbG9jX3JlZih0YXJnZXQpOworCQlpZiAoIXdhbGtlci0+ZmV0Y2hfcmVmKHdhbGtlciwgcmVmKSkgeworCQkJb2lkY3B5KG9pZCwgJnJlZi0+b2xkX29pZCk7CisJCQlmcmVlKHJlZik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlmcmVlKHJlZik7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBtYXJrX2NvbXBsZXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJICAgICAgIG9pZCwgMSk7CisKKwlpZiAoY29tbWl0KSB7CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IENPTVBMRVRFOworCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCAmY29tcGxldGUpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHdhbGtlcl90YXJnZXRzX3N0ZGluKGNoYXIgKioqdGFyZ2V0LCBjb25zdCBjaGFyICoqKndyaXRlX3JlZikKK3sKKwlpbnQgdGFyZ2V0cyA9IDAsIHRhcmdldHNfYWxsb2MgPSAwOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJKnRhcmdldCA9IE5VTEw7ICp3cml0ZV9yZWYgPSBOVUxMOworCXdoaWxlICgxKSB7CisJCWNoYXIgKnJmX29uZSA9IE5VTEw7CisJCWNoYXIgKnRnX29uZTsKKworCQlpZiAoc3RyYnVmX2dldGxpbmVfbGYoJmJ1Ziwgc3RkaW4pID09IEVPRikKKwkJCWJyZWFrOworCQl0Z19vbmUgPSBidWYuYnVmOworCQlyZl9vbmUgPSBzdHJjaHIodGdfb25lLCAnXHQnKTsKKwkJaWYgKHJmX29uZSkKKwkJCSpyZl9vbmUrKyA9IDA7CisKKwkJaWYgKHRhcmdldHMgPj0gdGFyZ2V0c19hbGxvYykgeworCQkJdGFyZ2V0c19hbGxvYyA9IHRhcmdldHNfYWxsb2MgPyB0YXJnZXRzX2FsbG9jICogMiA6IDY0OworCQkJUkVBTExPQ19BUlJBWSgqdGFyZ2V0LCB0YXJnZXRzX2FsbG9jKTsKKwkJCVJFQUxMT0NfQVJSQVkoKndyaXRlX3JlZiwgdGFyZ2V0c19hbGxvYyk7CisJCX0KKwkJKCp0YXJnZXQpW3RhcmdldHNdID0geHN0cmR1cCh0Z19vbmUpOworCQkoKndyaXRlX3JlZilbdGFyZ2V0c10gPSB4c3RyZHVwX29yX251bGwocmZfb25lKTsKKwkJdGFyZ2V0cysrOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gdGFyZ2V0czsKK30KKwordm9pZCB3YWxrZXJfdGFyZ2V0c19mcmVlKGludCB0YXJnZXRzLCBjaGFyICoqdGFyZ2V0LCBjb25zdCBjaGFyICoqd3JpdGVfcmVmKQoreworCXdoaWxlICh0YXJnZXRzLS0pIHsKKwkJZnJlZSh0YXJnZXRbdGFyZ2V0c10pOworCQlpZiAod3JpdGVfcmVmKQorCQkJZnJlZSgoY2hhciAqKSB3cml0ZV9yZWZbdGFyZ2V0c10pOworCX0KK30KKworaW50IHdhbGtlcl9mZXRjaChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGludCB0YXJnZXRzLCBjaGFyICoqdGFyZ2V0LAorCQkgY29uc3QgY2hhciAqKndyaXRlX3JlZiwgY29uc3QgY2hhciAqd3JpdGVfcmVmX2xvZ19kZXRhaWxzKQoreworCXN0cnVjdCBzdHJidWYgcmVmbmFtZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24gPSBOVUxMOworCXN0cnVjdCBvYmplY3RfaWQgKm9pZHM7CisJY2hhciAqbXNnID0gTlVMTDsKKwlpbnQgaSwgcmV0ID0gLTE7CisKKwlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOworCisJQUxMT0NfQVJSQVkob2lkcywgdGFyZ2V0cyk7CisKKwlpZiAod3JpdGVfcmVmKSB7CisJCXRyYW5zYWN0aW9uID0gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCZlcnIpOworCQlpZiAoIXRyYW5zYWN0aW9uKSB7CisJCQllcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCWlmICghd2Fsa2VyLT5nZXRfcmVjb3ZlcikgeworCQlmb3JfZWFjaF9yZWYobWFya19jb21wbGV0ZSwgTlVMTCk7CisJCWNvbW1pdF9saXN0X3NvcnRfYnlfZGF0ZSgmY29tcGxldGUpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB0YXJnZXRzOyBpKyspIHsKKwkJaWYgKGludGVycHJldF90YXJnZXQod2Fsa2VyLCB0YXJnZXRbaV0sIG9pZHMgKyBpKSkgeworCQkJZXJyb3IoIkNvdWxkIG5vdCBpbnRlcnByZXQgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIgJyVzJyBhcyBzb21ldGhpbmcgdG8gcHVsbCIsIHRhcmdldFtpXSk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaWYgKHByb2Nlc3Mod2Fsa2VyLCBsb29rdXBfdW5rbm93bl9vYmplY3QoJm9pZHNbaV0pKSkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAobG9vcCh3YWxrZXIpKQorCQlnb3RvIGRvbmU7CisJaWYgKCF3cml0ZV9yZWYpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBkb25lOworCX0KKwlpZiAod3JpdGVfcmVmX2xvZ19kZXRhaWxzKSB7CisJCW1zZyA9IHhzdHJmbXQoImZldGNoIGZyb20gJXMiLCB3cml0ZV9yZWZfbG9nX2RldGFpbHMpOworCX0gZWxzZSB7CisJCW1zZyA9IE5VTEw7CisJfQorCWZvciAoaSA9IDA7IGkgPCB0YXJnZXRzOyBpKyspIHsKKwkJaWYgKCF3cml0ZV9yZWZbaV0pCisJCQljb250aW51ZTsKKwkJc3RyYnVmX3Jlc2V0KCZyZWZuYW1lKTsKKwkJc3RyYnVmX2FkZGYoJnJlZm5hbWUsICJyZWZzLyVzIiwgd3JpdGVfcmVmW2ldKTsKKwkJaWYgKHJlZl90cmFuc2FjdGlvbl91cGRhdGUodHJhbnNhY3Rpb24sIHJlZm5hbWUuYnVmLAorCQkJCQkgICBvaWRzICsgaSwgTlVMTCwgMCwKKwkJCQkJICAgbXNnID8gbXNnIDogImZldGNoICh1bmtub3duKSIsCisJCQkJCSAgICZlcnIpKSB7CisJCQllcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKwlpZiAocmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpIHsKKwkJZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlyZXQgPSAwOworCitkb25lOgorCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwlmcmVlKG1zZyk7CisJZnJlZShvaWRzKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlzdHJidWZfcmVsZWFzZSgmcmVmbmFtZSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB3YWxrZXJfZnJlZShzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIpCit7CisJd2Fsa2VyLT5jbGVhbnVwKHdhbGtlcik7CisJZnJlZSh3YWxrZXIpOworfQpkaWZmIC0tZ2l0IGEvd2Fsa2VyLmggYi93YWxrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDBiMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvd2Fsa2VyLmgKQEAgLTAsMCArMSwzOCBAQAorI2lmbmRlZiBXQUxLRVJfSAorI2RlZmluZSBXQUxLRVJfSAorCisjaW5jbHVkZSAicmVtb3RlLmgiCisKK3N0cnVjdCB3YWxrZXIgeworCXZvaWQgKmRhdGE7CisJaW50ICgqZmV0Y2hfcmVmKShzdHJ1Y3Qgd2Fsa2VyICosIHN0cnVjdCByZWYgKnJlZik7CisJdm9pZCAoKnByZWZldGNoKShzdHJ1Y3Qgd2Fsa2VyICosIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCWludCAoKmZldGNoKShzdHJ1Y3Qgd2Fsa2VyICosIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCXZvaWQgKCpjbGVhbnVwKShzdHJ1Y3Qgd2Fsa2VyICopOworCWludCBnZXRfdmVyYm9zZWx5OworCWludCBnZXRfcHJvZ3Jlc3M7CisJaW50IGdldF9yZWNvdmVyOworCisJaW50IGNvcnJ1cHRfb2JqZWN0X2ZvdW5kOworfTsKKworLyogUmVwb3J0IHdoYXQgd2UgZ290IHVuZGVyIGdldF92ZXJib3NlbHkgKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCit2b2lkIHdhbGtlcl9zYXkoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKy8qIExvYWQgcHVsbCB0YXJnZXRzIGZyb20gc3RkaW4gKi8KK2ludCB3YWxrZXJfdGFyZ2V0c19zdGRpbihjaGFyICoqKnRhcmdldCwgY29uc3QgY2hhciAqKip3cml0ZV9yZWYpOworCisvKiBGcmVlIHVwIGxvYWRlZCB0YXJnZXRzICovCit2b2lkIHdhbGtlcl90YXJnZXRzX2ZyZWUoaW50IHRhcmdldHMsIGNoYXIgKip0YXJnZXQsIGNvbnN0IGNoYXIgKip3cml0ZV9yZWYpOworCisvKiBJZiB3cml0ZV9yZWYgaXMgc2V0LCB0aGUgcmVmIGZpbGVuYW1lIHRvIHdyaXRlIHRoZSB0YXJnZXQgdmFsdWUgdG8uICovCisvKiBJZiB3cml0ZV9yZWZfbG9nX2RldGFpbHMgaXMgc2V0LCBhZGRpdGlvbmFsIHRleHQgd2lsbCBhcHBlYXIgaW4gdGhlIHJlZiBsb2cuICovCitpbnQgd2Fsa2VyX2ZldGNoKHN0cnVjdCB3YWxrZXIgKmltcGwsIGludCB0YXJnZXRzLCBjaGFyICoqdGFyZ2V0LAorCQkgY29uc3QgY2hhciAqKndyaXRlX3JlZiwgY29uc3QgY2hhciAqd3JpdGVfcmVmX2xvZ19kZXRhaWxzKTsKKwordm9pZCB3YWxrZXJfZnJlZShzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIpOworCitzdHJ1Y3Qgd2Fsa2VyICpnZXRfaHR0cF93YWxrZXIoY29uc3QgY2hhciAqdXJsKTsKKworI2VuZGlmIC8qIFdBTEtFUl9IICovCmRpZmYgLS1naXQgYS93aWxkbWF0Y2guYyBiL3dpbGRtYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOWUyYTIKLS0tIC9kZXYvbnVsbAorKysgYi93aWxkbWF0Y2guYwpAQCAtMCwwICsxLDI3OCBAQAorLyoKKyoqICBEbyBzaGVsbC1zdHlsZSBwYXR0ZXJuIG1hdGNoaW5nIGZvciA/LCBcLCBbXSwgYW5kICogY2hhcmFjdGVycy4KKyoqICBJdCBpcyA4Yml0IGNsZWFuLgorKioKKyoqICBXcml0dGVuIGJ5IFJpY2ggJGFseiwgbWlycm9yIXJzLCBXZWQgTm92IDI2IDE5OjAzOjE3IEVTVCAxOTg2LgorKiogIFJpY2ggJGFseiBpcyBub3cgPHJzYWx6QGJibi5jb20+LgorKioKKyoqICBNb2RpZmllZCBieSBXYXluZSBEYXZpc29uIHRvIHNwZWNpYWwtY2FzZSAnLycgbWF0Y2hpbmcsIHRvIG1ha2UgJyoqJworKiogIHdvcmsgZGlmZmVyZW50bHkgdGhhbiAnKicsIGFuZCB0byBmaXggdGhlIGNoYXJhY3Rlci1jbGFzcyBjb2RlLgorKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAid2lsZG1hdGNoLmgiCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcjsKKworLyogV2hhdCBjaGFyYWN0ZXIgbWFya3MgYW4gaW52ZXJ0ZWQgY2hhcmFjdGVyIGNsYXNzPyAqLworI2RlZmluZSBORUdBVEVfQ0xBU1MJJyEnCisjZGVmaW5lIE5FR0FURV9DTEFTUzIJJ14nCisKKyNkZWZpbmUgQ0NfRVEoY2xhc3MsIGxlbiwgbGl0bWF0Y2gpICgobGVuKSA9PSBzaXplb2YgKGxpdG1hdGNoKS0xIFwKKwkJCQkgICAgJiYgKihjbGFzcykgPT0gKihsaXRtYXRjaCkgXAorCQkJCSAgICAmJiBzdHJuY21wKChjaGFyKiljbGFzcywgbGl0bWF0Y2gsIGxlbikgPT0gMCkKKworI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8ICFkZWZpbmVkIGlzYXNjaWkKKyMgZGVmaW5lIElTQVNDSUkoYykgMQorI2Vsc2UKKyMgZGVmaW5lIElTQVNDSUkoYykgaXNhc2NpaShjKQorI2VuZGlmCisKKyNpZmRlZiBpc2JsYW5rCisjIGRlZmluZSBJU0JMQU5LKGMpIChJU0FTQ0lJKGMpICYmIGlzYmxhbmsoYykpCisjZWxzZQorIyBkZWZpbmUgSVNCTEFOSyhjKSAoKGMpID09ICcgJyB8fCAoYykgPT0gJ1x0JykKKyNlbmRpZgorCisjaWZkZWYgaXNncmFwaAorIyBkZWZpbmUgSVNHUkFQSChjKSAoSVNBU0NJSShjKSAmJiBpc2dyYXBoKGMpKQorI2Vsc2UKKyMgZGVmaW5lIElTR1JBUEgoYykgKElTQVNDSUkoYykgJiYgaXNwcmludChjKSAmJiAhaXNzcGFjZShjKSkKKyNlbmRpZgorCisjZGVmaW5lIElTUFJJTlQoYykgKElTQVNDSUkoYykgJiYgaXNwcmludChjKSkKKyNkZWZpbmUgSVNESUdJVChjKSAoSVNBU0NJSShjKSAmJiBpc2RpZ2l0KGMpKQorI2RlZmluZSBJU0FMTlVNKGMpIChJU0FTQ0lJKGMpICYmIGlzYWxudW0oYykpCisjZGVmaW5lIElTQUxQSEEoYykgKElTQVNDSUkoYykgJiYgaXNhbHBoYShjKSkKKyNkZWZpbmUgSVNDTlRSTChjKSAoSVNBU0NJSShjKSAmJiBpc2NudHJsKGMpKQorI2RlZmluZSBJU0xPV0VSKGMpIChJU0FTQ0lJKGMpICYmIGlzbG93ZXIoYykpCisjZGVmaW5lIElTUFVOQ1QoYykgKElTQVNDSUkoYykgJiYgaXNwdW5jdChjKSkKKyNkZWZpbmUgSVNTUEFDRShjKSAoSVNBU0NJSShjKSAmJiBpc3NwYWNlKGMpKQorI2RlZmluZSBJU1VQUEVSKGMpIChJU0FTQ0lJKGMpICYmIGlzdXBwZXIoYykpCisjZGVmaW5lIElTWERJR0lUKGMpIChJU0FTQ0lJKGMpICYmIGlzeGRpZ2l0KGMpKQorCisvKiBNYXRjaCBwYXR0ZXJuICJwIiBhZ2FpbnN0ICJ0ZXh0IiAqLworc3RhdGljIGludCBkb3dpbGQoY29uc3QgdWNoYXIgKnAsIGNvbnN0IHVjaGFyICp0ZXh0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJdWNoYXIgcF9jaDsKKwljb25zdCB1Y2hhciAqcGF0dGVybiA9IHA7CisKKwlmb3IgKCA7IChwX2NoID0gKnApICE9ICdcMCc7IHRleHQrKywgcCsrKSB7CisJCWludCBtYXRjaGVkLCBtYXRjaF9zbGFzaCwgbmVnYXRlZDsKKwkJdWNoYXIgdF9jaCwgcHJldl9jaDsKKwkJaWYgKCh0X2NoID0gKnRleHQpID09ICdcMCcgJiYgcF9jaCAhPSAnKicpCisJCQlyZXR1cm4gV01fQUJPUlRfQUxMOworCQlpZiAoKGZsYWdzICYgV01fQ0FTRUZPTEQpICYmIElTVVBQRVIodF9jaCkpCisJCQl0X2NoID0gdG9sb3dlcih0X2NoKTsKKwkJaWYgKChmbGFncyAmIFdNX0NBU0VGT0xEKSAmJiBJU1VQUEVSKHBfY2gpKQorCQkJcF9jaCA9IHRvbG93ZXIocF9jaCk7CisJCXN3aXRjaCAocF9jaCkgeworCQljYXNlICdcXCc6CisJCQkvKiBMaXRlcmFsIG1hdGNoIHdpdGggZm9sbG93aW5nIGNoYXJhY3Rlci4gIE5vdGUgdGhhdCB0aGUgdGVzdAorCQkJICogaW4gImRlZmF1bHQiIGhhbmRsZXMgdGhlIHBbMV0gPT0gJ1wwJyBmYWlsdXJlIGNhc2UuICovCisJCQlwX2NoID0gKisrcDsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWRlZmF1bHQ6CisJCQlpZiAodF9jaCAhPSBwX2NoKQorCQkJCXJldHVybiBXTV9OT01BVENIOworCQkJY29udGludWU7CisJCWNhc2UgJz8nOgorCQkJLyogTWF0Y2ggYW55dGhpbmcgYnV0ICcvJy4gKi8KKwkJCWlmICgoZmxhZ3MgJiBXTV9QQVRITkFNRSkgJiYgdF9jaCA9PSAnLycpCisJCQkJcmV0dXJuIFdNX05PTUFUQ0g7CisJCQljb250aW51ZTsKKwkJY2FzZSAnKic6CisJCQlpZiAoKisrcCA9PSAnKicpIHsKKwkJCQljb25zdCB1Y2hhciAqcHJldl9wID0gcCAtIDI7CisJCQkJd2hpbGUgKCorK3AgPT0gJyonKSB7fQorCQkJCWlmICghKGZsYWdzICYgV01fUEFUSE5BTUUpKQorCQkJCQkvKiB3aXRob3V0IFdNX1BBVEhOQU1FLCAnKicgPT0gJyoqJyAqLworCQkJCQltYXRjaF9zbGFzaCA9IDE7CisJCQkJZWxzZSBpZiAoKHByZXZfcCA8IHBhdHRlcm4gfHwgKnByZXZfcCA9PSAnLycpICYmCisJCQkJICAgICgqcCA9PSAnXDAnIHx8ICpwID09ICcvJyB8fAorCQkJCSAgICAgKHBbMF0gPT0gJ1xcJyAmJiBwWzFdID09ICcvJykpKSB7CisJCQkJCS8qCisJCQkJCSAqIEFzc3VtaW5nIHdlIGFscmVhZHkgbWF0Y2ggJ2Zvby8nIGFuZCBhcmUgYXQKKwkJCQkJICogPHN0YXIgc3RhciBzbGFzaD4sIGp1c3QgYXNzdW1lIGl0IG1hdGNoZXMKKwkJCQkJICogbm90aGluZyBhbmQgZ28gYWhlYWQgbWF0Y2ggdGhlIHJlc3Qgb2YgdGhlCisJCQkJCSAqIHBhdHRlcm4gd2l0aCB0aGUgcmVtYWluaW5nIHN0cmluZy4gVGhpcworCQkJCQkgKiBoZWxwcyBtYWtlIGZvby88Kj48Kj4vYmFyICg8PiBiZWNhdXNlCisJCQkJCSAqIG90aGVyd2lzZSBpdCBicmVha3MgQyBjb21tZW50IHN5bnRheCkgbWF0Y2gKKwkJCQkJICogYm90aCBmb28vYmFyIGFuZCBmb28vYS9iYXIuCisJCQkJCSAqLworCQkJCQlpZiAocFswXSA9PSAnLycgJiYKKwkJCQkJICAgIGRvd2lsZChwICsgMSwgdGV4dCwgZmxhZ3MpID09IFdNX01BVENIKQorCQkJCQkJcmV0dXJuIFdNX01BVENIOworCQkJCQltYXRjaF9zbGFzaCA9IDE7CisJCQkJfSBlbHNlIC8qIFdNX1BBVEhOQU1FIGlzIHNldCAqLworCQkJCQltYXRjaF9zbGFzaCA9IDA7CisJCQl9IGVsc2UKKwkJCQkvKiB3aXRob3V0IFdNX1BBVEhOQU1FLCAnKicgPT0gJyoqJyAqLworCQkJCW1hdGNoX3NsYXNoID0gZmxhZ3MgJiBXTV9QQVRITkFNRSA/IDAgOiAxOworCQkJaWYgKCpwID09ICdcMCcpIHsKKwkJCQkvKiBUcmFpbGluZyAiKioiIG1hdGNoZXMgZXZlcnl0aGluZy4gIFRyYWlsaW5nICIqIiBtYXRjaGVzCisJCQkJICogb25seSBpZiB0aGVyZSBhcmUgbm8gbW9yZSBzbGFzaCBjaGFyYWN0ZXJzLiAqLworCQkJCWlmICghbWF0Y2hfc2xhc2gpIHsKKwkJCQkJaWYgKHN0cmNocigoY2hhciopdGV4dCwgJy8nKSAhPSBOVUxMKQorCQkJCQkJcmV0dXJuIFdNX05PTUFUQ0g7CisJCQkJfQorCQkJCXJldHVybiBXTV9NQVRDSDsKKwkJCX0gZWxzZSBpZiAoIW1hdGNoX3NsYXNoICYmICpwID09ICcvJykgeworCQkJCS8qCisJCQkJICogX29uZV8gYXN0ZXJpc2sgZm9sbG93ZWQgYnkgYSBzbGFzaAorCQkJCSAqIHdpdGggV01fUEFUSE5BTUUgbWF0Y2hlcyB0aGUgbmV4dAorCQkJCSAqIGRpcmVjdG9yeQorCQkJCSAqLworCQkJCWNvbnN0IGNoYXIgKnNsYXNoID0gc3RyY2hyKChjaGFyKil0ZXh0LCAnLycpOworCQkJCWlmICghc2xhc2gpCisJCQkJCXJldHVybiBXTV9OT01BVENIOworCQkJCXRleHQgPSAoY29uc3QgdWNoYXIqKXNsYXNoOworCQkJCS8qIHRoZSBzbGFzaCBpcyBjb25zdW1lZCBieSB0aGUgdG9wLWxldmVsIGZvciBsb29wICovCisJCQkJYnJlYWs7CisJCQl9CisJCQl3aGlsZSAoMSkgeworCQkJCWlmICh0X2NoID09ICdcMCcpCisJCQkJCWJyZWFrOworCQkJCS8qCisJCQkJICogVHJ5IHRvIGFkdmFuY2UgZmFzdGVyIHdoZW4gYW4gYXN0ZXJpc2sgaXMKKwkJCQkgKiBmb2xsb3dlZCBieSBhIGxpdGVyYWwuIFdlIGtub3cgaW4gdGhpcyBjYXNlCisJCQkJICogdGhhdCB0aGUgc3RyaW5nIGJlZm9yZSB0aGUgbGl0ZXJhbAorCQkJCSAqIG11c3QgYmVsb25nIHRvICIqIi4KKwkJCQkgKiBJZiBtYXRjaF9zbGFzaCBpcyBmYWxzZSwgZG8gbm90IGxvb2sgcGFzdAorCQkJCSAqIHRoZSBmaXJzdCBzbGFzaCBhcyBpdCBjYW5ub3QgYmVsb25nIHRvICcqJy4KKwkJCQkgKi8KKwkJCQlpZiAoIWlzX2dsb2Jfc3BlY2lhbCgqcCkpIHsKKwkJCQkJcF9jaCA9ICpwOworCQkJCQlpZiAoKGZsYWdzICYgV01fQ0FTRUZPTEQpICYmIElTVVBQRVIocF9jaCkpCisJCQkJCQlwX2NoID0gdG9sb3dlcihwX2NoKTsKKwkJCQkJd2hpbGUgKCh0X2NoID0gKnRleHQpICE9ICdcMCcgJiYKKwkJCQkJICAgICAgIChtYXRjaF9zbGFzaCB8fCB0X2NoICE9ICcvJykpIHsKKwkJCQkJCWlmICgoZmxhZ3MgJiBXTV9DQVNFRk9MRCkgJiYgSVNVUFBFUih0X2NoKSkKKwkJCQkJCQl0X2NoID0gdG9sb3dlcih0X2NoKTsKKwkJCQkJCWlmICh0X2NoID09IHBfY2gpCisJCQkJCQkJYnJlYWs7CisJCQkJCQl0ZXh0Kys7CisJCQkJCX0KKwkJCQkJaWYgKHRfY2ggIT0gcF9jaCkKKwkJCQkJCXJldHVybiBXTV9OT01BVENIOworCQkJCX0KKwkJCQlpZiAoKG1hdGNoZWQgPSBkb3dpbGQocCwgdGV4dCwgZmxhZ3MpKSAhPSBXTV9OT01BVENIKSB7CisJCQkJCWlmICghbWF0Y2hfc2xhc2ggfHwgbWF0Y2hlZCAhPSBXTV9BQk9SVF9UT19TVEFSU1RBUikKKwkJCQkJCXJldHVybiBtYXRjaGVkOworCQkJCX0gZWxzZSBpZiAoIW1hdGNoX3NsYXNoICYmIHRfY2ggPT0gJy8nKQorCQkJCQlyZXR1cm4gV01fQUJPUlRfVE9fU1RBUlNUQVI7CisJCQkJdF9jaCA9ICorK3RleHQ7CisJCQl9CisJCQlyZXR1cm4gV01fQUJPUlRfQUxMOworCQljYXNlICdbJzoKKwkJCXBfY2ggPSAqKytwOworI2lmZGVmIE5FR0FURV9DTEFTUzIKKwkJCWlmIChwX2NoID09IE5FR0FURV9DTEFTUzIpCisJCQkJcF9jaCA9IE5FR0FURV9DTEFTUzsKKyNlbmRpZgorCQkJLyogQXNzaWduIGxpdGVyYWwgMS8wIGJlY2F1c2Ugb2YgIm1hdGNoZWQiIGNvbXBhcmlzb24uICovCisJCQluZWdhdGVkID0gcF9jaCA9PSBORUdBVEVfQ0xBU1MgPyAxIDogMDsKKwkJCWlmIChuZWdhdGVkKSB7CisJCQkJLyogSW52ZXJ0ZWQgY2hhcmFjdGVyIGNsYXNzLiAqLworCQkJCXBfY2ggPSAqKytwOworCQkJfQorCQkJcHJldl9jaCA9IDA7CisJCQltYXRjaGVkID0gMDsKKwkJCWRvIHsKKwkJCQlpZiAoIXBfY2gpCisJCQkJCXJldHVybiBXTV9BQk9SVF9BTEw7CisJCQkJaWYgKHBfY2ggPT0gJ1xcJykgeworCQkJCQlwX2NoID0gKisrcDsKKwkJCQkJaWYgKCFwX2NoKQorCQkJCQkJcmV0dXJuIFdNX0FCT1JUX0FMTDsKKwkJCQkJaWYgKHRfY2ggPT0gcF9jaCkKKwkJCQkJCW1hdGNoZWQgPSAxOworCQkJCX0gZWxzZSBpZiAocF9jaCA9PSAnLScgJiYgcHJldl9jaCAmJiBwWzFdICYmIHBbMV0gIT0gJ10nKSB7CisJCQkJCXBfY2ggPSAqKytwOworCQkJCQlpZiAocF9jaCA9PSAnXFwnKSB7CisJCQkJCQlwX2NoID0gKisrcDsKKwkJCQkJCWlmICghcF9jaCkKKwkJCQkJCQlyZXR1cm4gV01fQUJPUlRfQUxMOworCQkJCQl9CisJCQkJCWlmICh0X2NoIDw9IHBfY2ggJiYgdF9jaCA+PSBwcmV2X2NoKQorCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCWVsc2UgaWYgKChmbGFncyAmIFdNX0NBU0VGT0xEKSAmJiBJU0xPV0VSKHRfY2gpKSB7CisJCQkJCQl1Y2hhciB0X2NoX3VwcGVyID0gdG91cHBlcih0X2NoKTsKKwkJCQkJCWlmICh0X2NoX3VwcGVyIDw9IHBfY2ggJiYgdF9jaF91cHBlciA+PSBwcmV2X2NoKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9CisJCQkJCXBfY2ggPSAwOyAvKiBUaGlzIG1ha2VzICJwcmV2X2NoIiBnZXQgc2V0IHRvIDAuICovCisJCQkJfSBlbHNlIGlmIChwX2NoID09ICdbJyAmJiBwWzFdID09ICc6JykgeworCQkJCQljb25zdCB1Y2hhciAqczsKKwkJCQkJaW50IGk7CisJCQkJCWZvciAocyA9IHAgKz0gMjsgKHBfY2ggPSAqcCkgJiYgcF9jaCAhPSAnXSc7IHArKykge30gLypTSEFSRUQgSVRFUkFUT1IqLworCQkJCQlpZiAoIXBfY2gpCisJCQkJCQlyZXR1cm4gV01fQUJPUlRfQUxMOworCQkJCQlpID0gcCAtIHMgLSAxOworCQkJCQlpZiAoaSA8IDAgfHwgcFstMV0gIT0gJzonKSB7CisJCQkJCQkvKiBEaWRuJ3QgZmluZCAiOl0iLCBzbyB0cmVhdCBsaWtlIGEgbm9ybWFsIHNldC4gKi8KKwkJCQkJCXAgPSBzIC0gMjsKKwkJCQkJCXBfY2ggPSAnWyc7CisJCQkJCQlpZiAodF9jaCA9PSBwX2NoKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJaWYgKENDX0VRKHMsaSwgImFsbnVtIikpIHsKKwkJCQkJCWlmIChJU0FMTlVNKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgImFscGhhIikpIHsKKwkJCQkJCWlmIChJU0FMUEhBKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgImJsYW5rIikpIHsKKwkJCQkJCWlmIChJU0JMQU5LKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgImNudHJsIikpIHsKKwkJCQkJCWlmIChJU0NOVFJMKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgImRpZ2l0IikpIHsKKwkJCQkJCWlmIChJU0RJR0lUKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgImdyYXBoIikpIHsKKwkJCQkJCWlmIChJU0dSQVBIKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgImxvd2VyIikpIHsKKwkJCQkJCWlmIChJU0xPV0VSKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgInByaW50IikpIHsKKwkJCQkJCWlmIChJU1BSSU5UKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgInB1bmN0IikpIHsKKwkJCQkJCWlmIChJU1BVTkNUKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgInNwYWNlIikpIHsKKwkJCQkJCWlmIChJU1NQQUNFKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgInVwcGVyIikpIHsKKwkJCQkJCWlmIChJU1VQUEVSKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQkJZWxzZSBpZiAoKGZsYWdzICYgV01fQ0FTRUZPTEQpICYmIElTTE9XRVIodF9jaCkpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCX0gZWxzZSBpZiAoQ0NfRVEocyxpLCAieGRpZ2l0IikpIHsKKwkJCQkJCWlmIChJU1hESUdJVCh0X2NoKSkKKwkJCQkJCQltYXRjaGVkID0gMTsKKwkJCQkJfSBlbHNlIC8qIG1hbGZvcm1lZCBbOmNsYXNzOl0gc3RyaW5nICovCisJCQkJCQlyZXR1cm4gV01fQUJPUlRfQUxMOworCQkJCQlwX2NoID0gMDsgLyogVGhpcyBtYWtlcyAicHJldl9jaCIgZ2V0IHNldCB0byAwLiAqLworCQkJCX0gZWxzZSBpZiAodF9jaCA9PSBwX2NoKQorCQkJCQltYXRjaGVkID0gMTsKKwkJCX0gd2hpbGUgKHByZXZfY2ggPSBwX2NoLCAocF9jaCA9ICorK3ApICE9ICddJyk7CisJCQlpZiAobWF0Y2hlZCA9PSBuZWdhdGVkIHx8CisJCQkgICAgKChmbGFncyAmIFdNX1BBVEhOQU1FKSAmJiB0X2NoID09ICcvJykpCisJCQkJcmV0dXJuIFdNX05PTUFUQ0g7CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCXJldHVybiAqdGV4dCA/IFdNX05PTUFUQ0ggOiBXTV9NQVRDSDsKK30KKworLyogTWF0Y2ggdGhlICJwYXR0ZXJuIiBhZ2FpbnN0IHRoZSAidGV4dCIgc3RyaW5nLiAqLworaW50IHdpbGRtYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICp0ZXh0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGRvd2lsZCgoY29uc3QgdWNoYXIqKXBhdHRlcm4sIChjb25zdCB1Y2hhciopdGV4dCwgZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvd2lsZG1hdGNoLmggYi93aWxkbWF0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTkzNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvd2lsZG1hdGNoLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBXSUxETUFUQ0hfSAorI2RlZmluZSBXSUxETUFUQ0hfSAorCisjZGVmaW5lIFdNX0NBU0VGT0xEIDEKKyNkZWZpbmUgV01fUEFUSE5BTUUgMgorCisjZGVmaW5lIFdNX05PTUFUQ0ggMQorI2RlZmluZSBXTV9NQVRDSCAwCisjZGVmaW5lIFdNX0FCT1JUX0FMTCAtMQorI2RlZmluZSBXTV9BQk9SVF9UT19TVEFSU1RBUiAtMgorCitpbnQgd2lsZG1hdGNoKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnRleHQsIHVuc2lnbmVkIGludCBmbGFncyk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL3dvcmt0cmVlLmMgYi93b3JrdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlODIyMzUKLS0tIC9kZXYvbnVsbAorKysgYi93b3JrdHJlZS5jCkBAIC0wLDAgKzEsNTk5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgIndvcmt0cmVlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAid3Qtc3RhdHVzLmgiCisKK3ZvaWQgZnJlZV93b3JrdHJlZXMoc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzKQoreworCWludCBpID0gMDsKKworCWZvciAoaSA9IDA7IHdvcmt0cmVlc1tpXTsgaSsrKSB7CisJCWZyZWUod29ya3RyZWVzW2ldLT5wYXRoKTsKKwkJZnJlZSh3b3JrdHJlZXNbaV0tPmlkKTsKKwkJZnJlZSh3b3JrdHJlZXNbaV0tPmhlYWRfcmVmKTsKKwkJZnJlZSh3b3JrdHJlZXNbaV0tPmxvY2tfcmVhc29uKTsKKwkJZnJlZSh3b3JrdHJlZXNbaV0pOworCX0KKwlmcmVlICh3b3JrdHJlZXMpOworfQorCisvKioKKyAqIFVwZGF0ZSBoZWFkX3NoYTEsIGhlYWRfcmVmIGFuZCBpc19kZXRhY2hlZCBvZiB0aGUgZ2l2ZW4gd29ya3RyZWUKKyAqLworc3RhdGljIHZvaWQgYWRkX2hlYWRfaW5mbyhzdHJ1Y3Qgd29ya3RyZWUgKnd0KQoreworCWludCBmbGFnczsKKwljb25zdCBjaGFyICp0YXJnZXQ7CisKKwl0YXJnZXQgPSByZWZzX3Jlc29sdmVfcmVmX3Vuc2FmZShnZXRfd29ya3RyZWVfcmVmX3N0b3JlKHd0KSwKKwkJCQkJICJIRUFEIiwKKwkJCQkJIDAsCisJCQkJCSAmd3QtPmhlYWRfb2lkLCAmZmxhZ3MpOworCWlmICghdGFyZ2V0KQorCQlyZXR1cm47CisKKwlpZiAoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpCisJCXd0LT5oZWFkX3JlZiA9IHhzdHJkdXAodGFyZ2V0KTsKKwllbHNlCisJCXd0LT5pc19kZXRhY2hlZCA9IDE7Cit9CisKKy8qKgorICogZ2V0IHRoZSBtYWluIHdvcmt0cmVlCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgd29ya3RyZWUgKmdldF9tYWluX3dvcmt0cmVlKHZvaWQpCit7CisJc3RydWN0IHdvcmt0cmVlICp3b3JrdHJlZSA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiB3b3JrdHJlZV9wYXRoID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkX2Fic29sdXRlX3BhdGgoJndvcmt0cmVlX3BhdGgsIGdldF9naXRfY29tbW9uX2RpcigpKTsKKwlzdHJidWZfc3RyaXBfc3VmZml4KCZ3b3JrdHJlZV9wYXRoLCAiLy4iKTsKKwlpZiAoIXN0cmJ1Zl9zdHJpcF9zdWZmaXgoJndvcmt0cmVlX3BhdGgsICIvLmdpdCIpKQorCQlzdHJidWZfc3RyaXBfc3VmZml4KCZ3b3JrdHJlZV9wYXRoLCAiLy4iKTsKKworCXdvcmt0cmVlID0geGNhbGxvYygxLCBzaXplb2YoKndvcmt0cmVlKSk7CisJd29ya3RyZWUtPnBhdGggPSBzdHJidWZfZGV0YWNoKCZ3b3JrdHJlZV9wYXRoLCBOVUxMKTsKKwkvKgorCSAqIE5FRURTV09SSzogSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhIHNlY29uZGFyeSB3b3JrdHJlZSBhbmQKKwkgKiBjb25maWcud29ya3RyZWUgaXMgcHJlc2VudCwgaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyB3aWxsIHJlZmxlY3QgdGhlCisJICogY29udGVudHMgb2YgY29uZmlnLndvcmt0cmVlLCBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYWluIHdvcmt0cmVlLgorCSAqIFRoaXMgbWVhbnMgdGhhdCB3b3JrdHJlZS0+aXNfYmFyZSBtYXkgYmUgc2V0IHRvIDAgZXZlbiBpZiB0aGUgbWFpbgorCSAqIHdvcmt0cmVlIGlzIGNvbmZpZ3VyZWQgdG8gYmUgYmFyZS4KKwkgKi8KKwl3b3JrdHJlZS0+aXNfYmFyZSA9IChpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID09IDEpIHx8CisJCWlzX2JhcmVfcmVwb3NpdG9yeSgpOworCWFkZF9oZWFkX2luZm8od29ya3RyZWUpOworCisJc3RyYnVmX3JlbGVhc2UoJndvcmt0cmVlX3BhdGgpOworCXJldHVybiB3b3JrdHJlZTsKK30KKworc3RhdGljIHN0cnVjdCB3b3JrdHJlZSAqZ2V0X2xpbmtlZF93b3JrdHJlZShjb25zdCBjaGFyICppZCkKK3sKKwlzdHJ1Y3Qgd29ya3RyZWUgKndvcmt0cmVlID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHdvcmt0cmVlX3BhdGggPSBTVFJCVUZfSU5JVDsKKworCWlmICghaWQpCisJCWRpZSgiTWlzc2luZyBsaW5rZWQgd29ya3RyZWUgbmFtZSIpOworCisJc3RyYnVmX2dpdF9jb21tb25fcGF0aCgmcGF0aCwgdGhlX3JlcG9zaXRvcnksICJ3b3JrdHJlZXMvJXMvZ2l0ZGlyIiwgaWQpOworCWlmIChzdHJidWZfcmVhZF9maWxlKCZ3b3JrdHJlZV9wYXRoLCBwYXRoLmJ1ZiwgMCkgPD0gMCkKKwkJLyogaW52YWxpZCBnaXRkaXIgZmlsZSAqLworCQlnb3RvIGRvbmU7CisKKwlzdHJidWZfcnRyaW0oJndvcmt0cmVlX3BhdGgpOworCWlmICghc3RyYnVmX3N0cmlwX3N1ZmZpeCgmd29ya3RyZWVfcGF0aCwgIi8uZ2l0IikpIHsKKwkJc3RyYnVmX3Jlc2V0KCZ3b3JrdHJlZV9wYXRoKTsKKwkJc3RyYnVmX2FkZF9hYnNvbHV0ZV9wYXRoKCZ3b3JrdHJlZV9wYXRoLCAiLiIpOworCQlzdHJidWZfc3RyaXBfc3VmZml4KCZ3b3JrdHJlZV9wYXRoLCAiLy4iKTsKKwl9CisKKwlzdHJidWZfcmVzZXQoJnBhdGgpOworCXN0cmJ1Zl9hZGRmKCZwYXRoLCAiJXMvd29ya3RyZWVzLyVzL0hFQUQiLCBnZXRfZ2l0X2NvbW1vbl9kaXIoKSwgaWQpOworCisJd29ya3RyZWUgPSB4Y2FsbG9jKDEsIHNpemVvZigqd29ya3RyZWUpKTsKKwl3b3JrdHJlZS0+cGF0aCA9IHN0cmJ1Zl9kZXRhY2goJndvcmt0cmVlX3BhdGgsIE5VTEwpOworCXdvcmt0cmVlLT5pZCA9IHhzdHJkdXAoaWQpOworCWFkZF9oZWFkX2luZm8od29ya3RyZWUpOworCitkb25lOgorCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwlzdHJidWZfcmVsZWFzZSgmd29ya3RyZWVfcGF0aCk7CisJcmV0dXJuIHdvcmt0cmVlOworfQorCitzdGF0aWMgdm9pZCBtYXJrX2N1cnJlbnRfd29ya3RyZWUoc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzKQoreworCWNoYXIgKmdpdF9kaXIgPSBhYnNvbHV0ZV9wYXRoZHVwKGdldF9naXRfZGlyKCkpOworCWludCBpOworCisJZm9yIChpID0gMDsgd29ya3RyZWVzW2ldOyBpKyspIHsKKwkJc3RydWN0IHdvcmt0cmVlICp3dCA9IHdvcmt0cmVlc1tpXTsKKwkJY29uc3QgY2hhciAqd3RfZ2l0X2RpciA9IGdldF93b3JrdHJlZV9naXRfZGlyKHd0KTsKKworCQlpZiAoIWZzcGF0aGNtcChnaXRfZGlyLCBhYnNvbHV0ZV9wYXRoKHd0X2dpdF9kaXIpKSkgeworCQkJd3QtPmlzX2N1cnJlbnQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJZnJlZShnaXRfZGlyKTsKK30KKworc3RhdGljIGludCBjb21wYXJlX3dvcmt0cmVlKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKmNvbnN0ICphID0gYV87CisJY29uc3Qgc3RydWN0IHdvcmt0cmVlICpjb25zdCAqYiA9IGJfOworCXJldHVybiBmc3BhdGhjbXAoKCphKS0+cGF0aCwgKCpiKS0+cGF0aCk7Cit9CisKK3N0cnVjdCB3b3JrdHJlZSAqKmdldF93b3JrdHJlZXModW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IHdvcmt0cmVlICoqbGlzdCA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZDsKKwlpbnQgY291bnRlciA9IDAsIGFsbG9jID0gMjsKKworCUFMTE9DX0FSUkFZKGxpc3QsIGFsbG9jKTsKKworCWxpc3RbY291bnRlcisrXSA9IGdldF9tYWluX3dvcmt0cmVlKCk7CisKKwlzdHJidWZfYWRkZigmcGF0aCwgIiVzL3dvcmt0cmVlcyIsIGdldF9naXRfY29tbW9uX2RpcigpKTsKKwlkaXIgPSBvcGVuZGlyKHBhdGguYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJaWYgKGRpcikgeworCQl3aGlsZSAoKGQgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJCXN0cnVjdCB3b3JrdHJlZSAqbGlua2VkID0gTlVMTDsKKwkJCWlmIChpc19kb3Rfb3JfZG90ZG90KGQtPmRfbmFtZSkpCisJCQkJY29udGludWU7CisKKwkJCWlmICgobGlua2VkID0gZ2V0X2xpbmtlZF93b3JrdHJlZShkLT5kX25hbWUpKSkgeworCQkJCUFMTE9DX0dST1cobGlzdCwgY291bnRlciArIDEsIGFsbG9jKTsKKwkJCQlsaXN0W2NvdW50ZXIrK10gPSBsaW5rZWQ7CisJCQl9CisJCX0KKwkJY2xvc2VkaXIoZGlyKTsKKwl9CisJQUxMT0NfR1JPVyhsaXN0LCBjb3VudGVyICsgMSwgYWxsb2MpOworCWxpc3RbY291bnRlcl0gPSBOVUxMOworCisJaWYgKGZsYWdzICYgR1dUX1NPUlRfTElOS0VEKQorCQkvKgorCQkgKiBkb24ndCBzb3J0IHRoZSBmaXJzdCBpdGVtIChtYWluIHdvcmt0cmVlKSwgd2hpY2ggd2lsbAorCQkgKiBhbHdheXMgYmUgdGhlIGZpcnN0CisJCSAqLworCQlRU09SVChsaXN0ICsgMSwgY291bnRlciAtIDEsIGNvbXBhcmVfd29ya3RyZWUpOworCisJbWFya19jdXJyZW50X3dvcmt0cmVlKGxpc3QpOworCXJldHVybiBsaXN0OworfQorCitjb25zdCBjaGFyICpnZXRfd29ya3RyZWVfZ2l0X2Rpcihjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0KQoreworCWlmICghd3QpCisJCXJldHVybiBnZXRfZ2l0X2RpcigpOworCWVsc2UgaWYgKCF3dC0+aWQpCisJCXJldHVybiBnZXRfZ2l0X2NvbW1vbl9kaXIoKTsKKwllbHNlCisJCXJldHVybiBnaXRfY29tbW9uX3BhdGgoIndvcmt0cmVlcy8lcyIsIHd0LT5pZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgd29ya3RyZWUgKmZpbmRfd29ya3RyZWVfYnlfc3VmZml4KHN0cnVjdCB3b3JrdHJlZSAqKmxpc3QsCisJCQkJCQljb25zdCBjaGFyICpzdWZmaXgpCit7CisJc3RydWN0IHdvcmt0cmVlICpmb3VuZCA9IE5VTEw7CisJaW50IG5yX2ZvdW5kID0gMCwgc3VmZml4bGVuOworCisJc3VmZml4bGVuID0gc3RybGVuKHN1ZmZpeCk7CisJaWYgKCFzdWZmaXhsZW4pCisJCXJldHVybiBOVUxMOworCisJZm9yICg7ICpsaXN0ICYmIG5yX2ZvdW5kIDwgMjsgbGlzdCsrKSB7CisJCWNvbnN0IGNoYXIJKnBhdGgJID0gKCpsaXN0KS0+cGF0aDsKKwkJaW50CQkgcGF0aGxlbiA9IHN0cmxlbihwYXRoKTsKKwkJaW50CQkgc3RhcnQJID0gcGF0aGxlbiAtIHN1ZmZpeGxlbjsKKworCQkvKiBzdWZmaXggbXVzdCBzdGFydCBhdCBkaXJlY3RvcnkgYm91bmRhcnkgKi8KKwkJaWYgKCghc3RhcnQgfHwgKHN0YXJ0ID4gMCAmJiBpc19kaXJfc2VwKHBhdGhbc3RhcnQgLSAxXSkpKSAmJgorCQkgICAgIWZzcGF0aGNtcChzdWZmaXgsIHBhdGggKyBzdGFydCkpIHsKKwkJCWZvdW5kID0gKmxpc3Q7CisJCQlucl9mb3VuZCsrOworCQl9CisJfQorCXJldHVybiBucl9mb3VuZCA9PSAxID8gZm91bmQgOiBOVUxMOworfQorCitzdHJ1Y3Qgd29ya3RyZWUgKmZpbmRfd29ya3RyZWUoc3RydWN0IHdvcmt0cmVlICoqbGlzdCwKKwkJCSAgICAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgICAgY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdCB3b3JrdHJlZSAqd3Q7CisJY2hhciAqdG9fZnJlZSA9IE5VTEw7CisKKwlpZiAoKHd0ID0gZmluZF93b3JrdHJlZV9ieV9zdWZmaXgobGlzdCwgYXJnKSkpCisJCXJldHVybiB3dDsKKworCWlmIChwcmVmaXgpCisJCWFyZyA9IHRvX2ZyZWUgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBhcmcpOworCXd0ID0gZmluZF93b3JrdHJlZV9ieV9wYXRoKGxpc3QsIGFyZyk7CisJZnJlZSh0b19mcmVlKTsKKwlyZXR1cm4gd3Q7Cit9CisKK3N0cnVjdCB3b3JrdHJlZSAqZmluZF93b3JrdHJlZV9ieV9wYXRoKHN0cnVjdCB3b3JrdHJlZSAqKmxpc3QsIGNvbnN0IGNoYXIgKnApCit7CisJc3RydWN0IHN0cmJ1ZiB3dF9wYXRoID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcGF0aCA9IHJlYWxfcGF0aGR1cChwLCAwKTsKKworCWlmICghcGF0aCkKKwkJcmV0dXJuIE5VTEw7CisJZm9yICg7ICpsaXN0OyBsaXN0KyspIHsKKwkJaWYgKCFzdHJidWZfcmVhbHBhdGgoJnd0X3BhdGgsICgqbGlzdCktPnBhdGgsIDApKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmc3BhdGhjbXAocGF0aCwgd3RfcGF0aC5idWYpKQorCQkJYnJlYWs7CisJfQorCWZyZWUocGF0aCk7CisJc3RyYnVmX3JlbGVhc2UoJnd0X3BhdGgpOworCXJldHVybiAqbGlzdDsKK30KKworaW50IGlzX21haW5fd29ya3RyZWUoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCkKK3sKKwlyZXR1cm4gIXd0LT5pZDsKK30KKworY29uc3QgY2hhciAqd29ya3RyZWVfbG9ja19yZWFzb24oc3RydWN0IHdvcmt0cmVlICp3dCkKK3sKKwlhc3NlcnQoIWlzX21haW5fd29ya3RyZWUod3QpKTsKKworCWlmICghd3QtPmxvY2tfcmVhc29uX3ZhbGlkKSB7CisJCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCisJCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIHdvcmt0cmVlX2dpdF9wYXRoKHd0LCAibG9ja2VkIikpOworCQlpZiAoZmlsZV9leGlzdHMocGF0aC5idWYpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGxvY2tfcmVhc29uID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmbG9ja19yZWFzb24sIHBhdGguYnVmLCAwKSA8IDApCisJCQkJZGllX2Vycm5vKF8oImZhaWxlZCB0byByZWFkICclcyciKSwgcGF0aC5idWYpOworCQkJc3RyYnVmX3RyaW0oJmxvY2tfcmVhc29uKTsKKwkJCXd0LT5sb2NrX3JlYXNvbiA9IHN0cmJ1Zl9kZXRhY2goJmxvY2tfcmVhc29uLCBOVUxMKTsKKwkJfSBlbHNlCisJCQl3dC0+bG9ja19yZWFzb24gPSBOVUxMOworCQl3dC0+bG9ja19yZWFzb25fdmFsaWQgPSAxOworCQlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJfQorCisJcmV0dXJuIHd0LT5sb2NrX3JlYXNvbjsKK30KKworLyogY29udmVuaWVudCB3cmFwcGVyIHRvIGRlYWwgd2l0aCBOVUxMIHN0cmJ1ZiAqLworc3RhdGljIHZvaWQgc3RyYnVmX2FkZGZfZ2VudGx5KHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuOworCisJdmFfc3RhcnQocGFyYW1zLCBmbXQpOworCXN0cmJ1Zl92YWRkZihidWYsIGZtdCwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKworaW50IHZhbGlkYXRlX3dvcmt0cmVlKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QsIHN0cnVjdCBzdHJidWYgKmVycm1zZywKKwkJICAgICAgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IHN0cmJ1ZiB3dF9wYXRoID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiByZWFscGF0aCA9IFNUUkJVRl9JTklUOworCWNoYXIgKnBhdGggPSBOVUxMOworCWludCBlcnIsIHJldCA9IC0xOworCisJc3RyYnVmX2FkZGYoJnd0X3BhdGgsICIlcy8uZ2l0Iiwgd3QtPnBhdGgpOworCisJaWYgKGlzX21haW5fd29ya3RyZWUod3QpKSB7CisJCWlmIChpc19kaXJlY3Rvcnkod3RfcGF0aC5idWYpKSB7CisJCQlyZXQgPSAwOworCQkJZ290byBkb25lOworCQl9CisJCS8qCisJCSAqIE1haW4gd29ya3RyZWUgdXNpbmcgLmdpdCBmaWxlIHRvIHBvaW50IHRvIHRoZQorCQkgKiByZXBvc2l0b3J5IHdvdWxkIG1ha2UgaXQgaW1wb3NzaWJsZSB0byBrbm93IHdoZXJlCisJCSAqIHRoZSBhY3R1YWwgd29ya3RyZWUgaXMgaWYgdGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZAorCQkgKiBmcm9tIGFub3RoZXIgd29ya3RyZWUuIE5vIC5naXQgZmlsZSBzdXBwb3J0IGZvciBub3cuCisJCSAqLworCQlzdHJidWZfYWRkZl9nZW50bHkoZXJybXNnLAorCQkJCSAgIF8oIiclcycgYXQgbWFpbiB3b3JraW5nIHRyZWUgaXMgbm90IHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSIpLAorCQkJCSAgIHd0X3BhdGguYnVmKTsKKwkJZ290byBkb25lOworCX0KKworCS8qCisJICogTWFrZSBzdXJlICJnaXRkaXIiIGZpbGUgcG9pbnRzIHRvIGEgcmVhbCAuZ2l0IGZpbGUgYW5kIHRoYXQKKwkgKiBmaWxlIHBvaW50cyBiYWNrIGhlcmUuCisJICovCisJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKHd0LT5wYXRoKSkgeworCQlzdHJidWZfYWRkZl9nZW50bHkoZXJybXNnLAorCQkJCSAgIF8oIiclcycgZmlsZSBkb2VzIG5vdCBjb250YWluIGFic29sdXRlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZSBsb2NhdGlvbiIpLAorCQkJCSAgIGdpdF9jb21tb25fcGF0aCgid29ya3RyZWVzLyVzL2dpdGRpciIsIHd0LT5pZCkpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGZsYWdzICYgV1RfVkFMSURBVEVfV09SS1RSRUVfTUlTU0lOR19PSyAmJgorCSAgICAhZmlsZV9leGlzdHMod3QtPnBhdGgpKSB7CisJCXJldCA9IDA7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoIWZpbGVfZXhpc3RzKHd0X3BhdGguYnVmKSkgeworCQlzdHJidWZfYWRkZl9nZW50bHkoZXJybXNnLCBfKCInJXMnIGRvZXMgbm90IGV4aXN0IiksIHd0X3BhdGguYnVmKTsKKwkJZ290byBkb25lOworCX0KKworCXBhdGggPSB4c3RyZHVwX29yX251bGwocmVhZF9naXRmaWxlX2dlbnRseSh3dF9wYXRoLmJ1ZiwgJmVycikpOworCWlmICghcGF0aCkgeworCQlzdHJidWZfYWRkZl9nZW50bHkoZXJybXNnLCBfKCInJXMnIGlzIG5vdCBhIC5naXQgZmlsZSwgZXJyb3IgY29kZSAlZCIpLAorCQkJCSAgIHd0X3BhdGguYnVmLCBlcnIpOworCQlnb3RvIGRvbmU7CisJfQorCisJc3RyYnVmX3JlYWxwYXRoKCZyZWFscGF0aCwgZ2l0X2NvbW1vbl9wYXRoKCJ3b3JrdHJlZXMvJXMiLCB3dC0+aWQpLCAxKTsKKwlyZXQgPSBmc3BhdGhjbXAocGF0aCwgcmVhbHBhdGguYnVmKTsKKworCWlmIChyZXQpCisJCXN0cmJ1Zl9hZGRmX2dlbnRseShlcnJtc2csIF8oIiclcycgZG9lcyBub3QgcG9pbnQgYmFjayB0byAnJXMnIiksCisJCQkJICAgd3QtPnBhdGgsIGdpdF9jb21tb25fcGF0aCgid29ya3RyZWVzLyVzIiwgd3QtPmlkKSk7Citkb25lOgorCWZyZWUocGF0aCk7CisJc3RyYnVmX3JlbGVhc2UoJnd0X3BhdGgpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZWFscGF0aCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB1cGRhdGVfd29ya3RyZWVfbG9jYXRpb24oc3RydWN0IHdvcmt0cmVlICp3dCwgY29uc3QgY2hhciAqcGF0aF8pCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoaXNfbWFpbl93b3JrdHJlZSh3dCkpCisJCUJVRygiY2FuJ3QgcmVsb2NhdGUgbWFpbiB3b3JrdHJlZSIpOworCisJc3RyYnVmX3JlYWxwYXRoKCZwYXRoLCBwYXRoXywgMSk7CisJaWYgKGZzcGF0aGNtcCh3dC0+cGF0aCwgcGF0aC5idWYpKSB7CisJCXdyaXRlX2ZpbGUoZ2l0X2NvbW1vbl9wYXRoKCJ3b3JrdHJlZXMvJXMvZ2l0ZGlyIiwgd3QtPmlkKSwKKwkJCSAgICIlcy8uZ2l0IiwgcGF0aC5idWYpOworCQlmcmVlKHd0LT5wYXRoKTsKKwkJd3QtPnBhdGggPSBzdHJidWZfZGV0YWNoKCZwYXRoLCBOVUxMKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworfQorCitpbnQgaXNfd29ya3RyZWVfYmVpbmdfcmViYXNlZChjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0LAorCQkJICAgICAgY29uc3QgY2hhciAqdGFyZ2V0KQoreworCXN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgc3RhdGU7CisJaW50IGZvdW5kX3JlYmFzZTsKKworCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOworCWZvdW5kX3JlYmFzZSA9IHd0X3N0YXR1c19jaGVja19yZWJhc2Uod3QsICZzdGF0ZSkgJiYKKwkJKChzdGF0ZS5yZWJhc2VfaW5fcHJvZ3Jlc3MgfHwKKwkJICBzdGF0ZS5yZWJhc2VfaW50ZXJhY3RpdmVfaW5fcHJvZ3Jlc3MpICYmCisJCSBzdGF0ZS5icmFuY2ggJiYKKwkJIHN0YXJ0c193aXRoKHRhcmdldCwgInJlZnMvaGVhZHMvIikgJiYKKwkJICFzdHJjbXAoc3RhdGUuYnJhbmNoLCB0YXJnZXQgKyBzdHJsZW4oInJlZnMvaGVhZHMvIikpKTsKKwlmcmVlKHN0YXRlLmJyYW5jaCk7CisJZnJlZShzdGF0ZS5vbnRvKTsKKwlyZXR1cm4gZm91bmRfcmViYXNlOworfQorCitpbnQgaXNfd29ya3RyZWVfYmVpbmdfYmlzZWN0ZWQoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCwKKwkJCSAgICAgICBjb25zdCBjaGFyICp0YXJnZXQpCit7CisJc3RydWN0IHd0X3N0YXR1c19zdGF0ZSBzdGF0ZTsKKwlpbnQgZm91bmRfcmViYXNlOworCisJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7CisJZm91bmRfcmViYXNlID0gd3Rfc3RhdHVzX2NoZWNrX2Jpc2VjdCh3dCwgJnN0YXRlKSAmJgorCQlzdGF0ZS5icmFuY2ggJiYKKwkJc3RhcnRzX3dpdGgodGFyZ2V0LCAicmVmcy9oZWFkcy8iKSAmJgorCQkhc3RyY21wKHN0YXRlLmJyYW5jaCwgdGFyZ2V0ICsgc3RybGVuKCJyZWZzL2hlYWRzLyIpKTsKKwlmcmVlKHN0YXRlLmJyYW5jaCk7CisJcmV0dXJuIGZvdW5kX3JlYmFzZTsKK30KKworLyoKKyAqIG5vdGU6IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGFibGUgdG8gZGV0ZWN0IHNoYXJlZCBzeW1yZWYgZXZlbiBpZgorICogSEVBRCBpcyB0ZW1wb3JhcmlseSBkZXRhY2hlZCAoZS5nLiBpbiB0aGUgbWlkZGxlIG9mIHJlYmFzZSBvcgorICogYmlzZWN0KS4gTmV3IGNvbW1hbmRzIHRoYXQgZG8gc2ltaWxhciB0aGluZ3Mgc2hvdWxkIHVwZGF0ZSB0aGlzCisgKiBmdW5jdGlvbiBhcyB3ZWxsLgorICovCitjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKmZpbmRfc2hhcmVkX3N5bXJlZihjb25zdCBjaGFyICpzeW1yZWYsCisJCQkJCSAgY29uc3QgY2hhciAqdGFyZ2V0KQoreworCWNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqZXhpc3RpbmcgPSBOVUxMOworCXN0YXRpYyBzdHJ1Y3Qgd29ya3RyZWUgKip3b3JrdHJlZXM7CisJaW50IGkgPSAwOworCisJaWYgKHdvcmt0cmVlcykKKwkJZnJlZV93b3JrdHJlZXMod29ya3RyZWVzKTsKKwl3b3JrdHJlZXMgPSBnZXRfd29ya3RyZWVzKDApOworCisJZm9yIChpID0gMDsgd29ya3RyZWVzW2ldOyBpKyspIHsKKwkJc3RydWN0IHdvcmt0cmVlICp3dCA9IHdvcmt0cmVlc1tpXTsKKwkJY29uc3QgY2hhciAqc3ltcmVmX3RhcmdldDsKKwkJc3RydWN0IHJlZl9zdG9yZSAqcmVmczsKKwkJaW50IGZsYWdzOworCisJCWlmICh3dC0+aXNfYmFyZSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh3dC0+aXNfZGV0YWNoZWQgJiYgIXN0cmNtcChzeW1yZWYsICJIRUFEIikpIHsKKwkJCWlmIChpc193b3JrdHJlZV9iZWluZ19yZWJhc2VkKHd0LCB0YXJnZXQpKSB7CisJCQkJZXhpc3RpbmcgPSB3dDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChpc193b3JrdHJlZV9iZWluZ19iaXNlY3RlZCh3dCwgdGFyZ2V0KSkgeworCQkJCWV4aXN0aW5nID0gd3Q7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlyZWZzID0gZ2V0X3dvcmt0cmVlX3JlZl9zdG9yZSh3dCk7CisJCXN5bXJlZl90YXJnZXQgPSByZWZzX3Jlc29sdmVfcmVmX3Vuc2FmZShyZWZzLCBzeW1yZWYsIDAsCisJCQkJCQkJTlVMTCwgJmZsYWdzKTsKKwkJaWYgKChmbGFncyAmIFJFRl9JU1NZTVJFRikgJiYKKwkJICAgIHN5bXJlZl90YXJnZXQgJiYgIXN0cmNtcChzeW1yZWZfdGFyZ2V0LCB0YXJnZXQpKSB7CisJCQlleGlzdGluZyA9IHd0OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gZXhpc3Rpbmc7Cit9CisKK2ludCBzdWJtb2R1bGVfdXNlc193b3JrdHJlZXMoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyICpzdWJtb2R1bGVfZ2l0ZGlyOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVCwgZXJyID0gU1RSQlVGX0lOSVQ7CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgZm9ybWF0ID0gUkVQT1NJVE9SWV9GT1JNQVRfSU5JVDsKKworCXN1Ym1vZHVsZV9naXRkaXIgPSBnaXRfcGF0aGR1cF9zdWJtb2R1bGUocGF0aCwgIiVzIiwgIiIpOworCWlmICghc3VibW9kdWxlX2dpdGRpcikKKwkJcmV0dXJuIDA7CisKKwkvKiBUaGUgZW52IHdvdWxkIGJlIHNldCBmb3IgdGhlIHN1cGVycHJvamVjdC4gKi8KKwlnZXRfY29tbW9uX2Rpcl9ub2Vudigmc2IsIHN1Ym1vZHVsZV9naXRkaXIpOworCWZyZWUoc3VibW9kdWxlX2dpdGRpcik7CisKKwlzdHJidWZfYWRkc3RyKCZzYiwgIi9jb25maWciKTsKKwlyZWFkX3JlcG9zaXRvcnlfZm9ybWF0KCZmb3JtYXQsIHNiLmJ1Zik7CisJaWYgKHZlcmlmeV9yZXBvc2l0b3J5X2Zvcm1hdCgmZm9ybWF0LCAmZXJyKSkgeworCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJY2xlYXJfcmVwb3NpdG9yeV9mb3JtYXQoJmZvcm1hdCk7CisJCXJldHVybiAxOworCX0KKwljbGVhcl9yZXBvc2l0b3J5X2Zvcm1hdCgmZm9ybWF0KTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKworCS8qIFJlcGxhY2UgY29uZmlnIGJ5IHdvcmt0cmVlcy4gKi8KKwlzdHJidWZfc2V0bGVuKCZzYiwgc2IubGVuIC0gc3RybGVuKCJjb25maWciKSk7CisJc3RyYnVmX2FkZHN0cigmc2IsICJ3b3JrdHJlZXMiKTsKKworCS8qIFNlZSBpZiB0aGVyZSBpcyBhbnkgZmlsZSBpbnNpZGUgdGhlIHdvcmt0cmVlcyBkaXJlY3RvcnkuICovCisJZGlyID0gb3BlbmRpcihzYi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwlpZiAoIWRpcikKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKGQgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZC0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IDE7CisJCWJyZWFrOworCX0KKwljbG9zZWRpcihkaXIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBwYXJzZV93b3JrdHJlZV9yZWYoY29uc3QgY2hhciAqd29ya3RyZWVfcmVmLCBjb25zdCBjaGFyICoqbmFtZSwKKwkJICAgICAgIGludCAqbmFtZV9sZW5ndGgsIGNvbnN0IGNoYXIgKipyZWYpCit7CisJaWYgKHNraXBfcHJlZml4KHdvcmt0cmVlX3JlZiwgIm1haW4td29ya3RyZWUvIiwgJndvcmt0cmVlX3JlZikpIHsKKwkJaWYgKCEqd29ya3RyZWVfcmVmKQorCQkJcmV0dXJuIC0xOworCQlpZiAobmFtZSkKKwkJCSpuYW1lID0gTlVMTDsKKwkJaWYgKG5hbWVfbGVuZ3RoKQorCQkJKm5hbWVfbGVuZ3RoID0gMDsKKwkJaWYgKHJlZikKKwkJCSpyZWYgPSB3b3JrdHJlZV9yZWY7CisJCXJldHVybiAwOworCX0KKwlpZiAoc2tpcF9wcmVmaXgod29ya3RyZWVfcmVmLCAid29ya3RyZWVzLyIsICZ3b3JrdHJlZV9yZWYpKSB7CisJCWNvbnN0IGNoYXIgKnNsYXNoID0gc3RyY2hyKHdvcmt0cmVlX3JlZiwgJy8nKTsKKworCQlpZiAoIXNsYXNoIHx8IHNsYXNoID09IHdvcmt0cmVlX3JlZiB8fCAhc2xhc2hbMV0pCisJCQlyZXR1cm4gLTE7CisJCWlmIChuYW1lKQorCQkJKm5hbWUgPSB3b3JrdHJlZV9yZWY7CisJCWlmIChuYW1lX2xlbmd0aCkKKwkJCSpuYW1lX2xlbmd0aCA9IHNsYXNoIC0gd29ya3RyZWVfcmVmOworCQlpZiAocmVmKQorCQkJKnJlZiA9IHNsYXNoICsgMTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKwordm9pZCBzdHJidWZfd29ya3RyZWVfcmVmKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QsCisJCQkgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlzd2l0Y2ggKHJlZl90eXBlKHJlZm5hbWUpKSB7CisJY2FzZSBSRUZfVFlQRV9QU0VVRE9SRUY6CisJY2FzZSBSRUZfVFlQRV9QRVJfV09SS1RSRUU6CisJCWlmICh3dCAmJiAhd3QtPmlzX2N1cnJlbnQpIHsKKwkJCWlmIChpc19tYWluX3dvcmt0cmVlKHd0KSkKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCAibWFpbi13b3JrdHJlZS8iKTsKKwkJCWVsc2UKKwkJCQlzdHJidWZfYWRkZihzYiwgIndvcmt0cmVlcy8lcy8iLCB3dC0+aWQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSRUZfVFlQRV9NQUlOX1BTRVVET1JFRjoKKwljYXNlIFJFRl9UWVBFX09USEVSX1BTRVVET1JFRjoKKwkJYnJlYWs7CisKKwljYXNlIFJFRl9UWVBFX05PUk1BTDoKKwkJLyoKKwkJICogRm9yIHNoYXJlZCByZWZzLCBkb24ndCBwcmVmaXggd29ya3RyZWVzLyBvcgorCQkgKiBtYWluLXdvcmt0cmVlLy4gSXQncyBub3QgbmVjZXNzYXJ5IGFuZAorCQkgKiBmaWxlcy1iYWNrZW5kLmMgY2FuJ3QgaGFuZGxlIGl0IGFueXdheS4KKwkJICovCisJCWJyZWFrOworCX0KKwlzdHJidWZfYWRkc3RyKHNiLCByZWZuYW1lKTsKK30KKworY29uc3QgY2hhciAqd29ya3RyZWVfcmVmKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QsIGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9yZXNldCgmc2IpOworCXN0cmJ1Zl93b3JrdHJlZV9yZWYod3QsICZzYiwgcmVmbmFtZSk7CisJcmV0dXJuIHNiLmJ1ZjsKK30KKworaW50IG90aGVyX2hlYWRfcmVmcyhlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgd29ya3RyZWUgKip3b3JrdHJlZXMsICoqcDsKKwlpbnQgcmV0ID0gMDsKKworCXdvcmt0cmVlcyA9IGdldF93b3JrdHJlZXMoMCk7CisJZm9yIChwID0gd29ya3RyZWVzOyAqcDsgcCsrKSB7CisJCXN0cnVjdCB3b3JrdHJlZSAqd3QgPSAqcDsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWludCBmbGFnOworCisJCWlmICh3dC0+aXNfY3VycmVudCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghcmVmc19yZWFkX3JlZl9mdWxsKGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksCisJCQkJCXdvcmt0cmVlX3JlZih3dCwgIkhFQUQiKSwKKwkJCQkJUkVTT0xWRV9SRUZfUkVBRElORywKKwkJCQkJJm9pZCwgJmZsYWcpKQorCQkJcmV0ID0gZm4od29ya3RyZWVfcmVmKHd0LCAiSEVBRCIpLCAmb2lkLCBmbGFnLCBjYl9kYXRhKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKwlmcmVlX3dvcmt0cmVlcyh3b3JrdHJlZXMpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS93b3JrdHJlZS5oIGIvd29ya3RyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjQyYTZlCi0tLSAvZGV2L251bGwKKysrIGIvd29ya3RyZWUuaApAQCAtMCwwICsxLDE1MSBAQAorI2lmbmRlZiBXT1JLVFJFRV9ICisjZGVmaW5lIFdPUktUUkVFX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorCitzdHJ1Y3Qgc3RyYnVmOworCitzdHJ1Y3Qgd29ya3RyZWUgeworCWNoYXIgKnBhdGg7CisJY2hhciAqaWQ7CisJY2hhciAqaGVhZF9yZWY7CQkvKiBOVUxMIGlmIEhFQUQgaXMgYnJva2VuIG9yIGRldGFjaGVkICovCisJY2hhciAqbG9ja19yZWFzb247CS8qIHByaXZhdGUgLSB1c2Ugd29ya3RyZWVfbG9ja19yZWFzb24gKi8KKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWRfb2lkOworCWludCBpc19kZXRhY2hlZDsKKwlpbnQgaXNfYmFyZTsKKwlpbnQgaXNfY3VycmVudDsKKwlpbnQgbG9ja19yZWFzb25fdmFsaWQ7IC8qIHByaXZhdGUgKi8KK307CisKKy8qIEZ1bmN0aW9ucyBmb3IgYWN0aW5nIG9uIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB3b3JrdHJlZXMuICovCisKKyNkZWZpbmUgR1dUX1NPUlRfTElOS0VEICgxIDw8IDApIC8qIGtlZXBzIGxpbmtlZCB3b3JrdHJlZXMgc29ydGVkICovCisKKy8qCisgKiBHZXQgdGhlIHdvcmt0cmVlcy4gIFRoZSBwcmltYXJ5IHdvcmt0cmVlIHdpbGwgYWx3YXlzIGJlIHRoZSBmaXJzdCByZXR1cm5lZCwKKyAqIGFuZCBsaW5rZWQgd29ya3RyZWVzIHdpbGwgYmUgcG9pbnRlZCB0byBieSAnbmV4dCcgaW4gZWFjaCBzdWJzZXF1ZW50CisgKiB3b3JrdHJlZS4gIE5vIHNwZWNpZmljIG9yZGVyaW5nIGlzIGRvbmUgb24gdGhlIGxpbmtlZCB3b3JrdHJlZXMuCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUgbWVtb3J5IGZyb20gdGhlIHJldHVybmVkCisgKiB3b3JrdHJlZShzKS4KKyAqLworc3RydWN0IHdvcmt0cmVlICoqZ2V0X3dvcmt0cmVlcyh1bnNpZ25lZCBmbGFncyk7CisKKy8qCisgKiBSZXR1cm5zIDEgaWYgbGlua2VkIHdvcmt0cmVlcyBleGlzdCwgMCBvdGhlcndpc2UuCisgKi8KK2ludCBzdWJtb2R1bGVfdXNlc193b3JrdHJlZXMoY29uc3QgY2hhciAqcGF0aCk7CisKKy8qCisgKiBSZXR1cm4gZ2l0IGRpciBvZiB0aGUgd29ya3RyZWUuIE5vdGUgdGhhdCB0aGUgcGF0aCBtYXkgYmUgcmVsYXRpdmUuCisgKiBJZiB3dCBpcyBOVUxMLCBnaXQgZGlyIG9mIGN1cnJlbnQgd29ya3RyZWUgaXMgcmV0dXJuZWQuCisgKi8KK2NvbnN0IGNoYXIgKmdldF93b3JrdHJlZV9naXRfZGlyKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QpOworCisvKgorICogU2VhcmNoIGZvciB0aGUgd29ya3RyZWUgaWRlbnRpZmllZCB1bmFtYmlndW91c2x5IGJ5IGBhcmdgIC0tIHR5cGljYWxseQorICogc3VwcGxpZWQgYnkgdGhlIHVzZXIgdmlhIHRoZSBjb21tYW5kLWxpbmUgLS0gd2hpY2ggbWF5IGJlIGEgcGF0aG5hbWUgb3Igc29tZQorICogc2hvcnRoYW5kIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGEgd29ya3RyZWUsIHRodXMgbWFraW5nIGl0IGNvbnZlbmllbnQgZm9yIHRoZQorICogdXNlciB0byBzcGVjaWZ5IGEgd29ya3RyZWUgd2l0aCBtaW5pbWFsIHR5cGluZy4gRm9yIGluc3RhbmNlLCBpZiB0aGUgbGFzdAorICogY29tcG9uZW50IChzYXksICJmb28iKSBvZiBhIHdvcmt0cmVlJ3MgcGF0aG5hbWUgaXMgdW5pcXVlIGFtb25nIHdvcmt0cmVlcworICogKHNheSwgIndvcmsvZm9vIiBhbmQgIndvcmsvYmFyIiksIGl0IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSB3b3JrdHJlZQorICogdW5hbWJpZ3VvdXNseS4KKyAqCisgKiBgcHJlZml4YCBzaG91bGQgYmUgdGhlIGBwcmVmaXhgIGhhbmRlZCB0byB0b3AtbGV2ZWwgR2l0IGNvbW1hbmRzIGFsb25nIHdpdGgKKyAqIGBhcmdjYCBhbmQgYGFyZ3ZgLgorICoKKyAqIFJldHVybiB0aGUgd29ya3RyZWUgaWRlbnRpZmllZCBieSBgYXJnYCwgb3IgTlVMTCBpZiBub3QgZm91bmQuCisgKi8KK3N0cnVjdCB3b3JrdHJlZSAqZmluZF93b3JrdHJlZShzdHJ1Y3Qgd29ya3RyZWUgKipsaXN0LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgICBjb25zdCBjaGFyICphcmcpOworCisvKgorICogUmV0dXJuIHRoZSB3b3JrdHJlZSBjb3JyZXNwb25kaW5nIHRvIGBwYXRoYCwgb3IgTlVMTCBpZiBubyBzdWNoIHdvcmt0cmVlCisgKiBleGlzdHMuCisgKi8KK3N0cnVjdCB3b3JrdHJlZSAqZmluZF93b3JrdHJlZV9ieV9wYXRoKHN0cnVjdCB3b3JrdHJlZSAqKiwgY29uc3QgY2hhciAqcGF0aCk7CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gd29ya3RyZWUgaXMgdGhlIG1haW4gb25lLgorICovCitpbnQgaXNfbWFpbl93b3JrdHJlZShjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0KTsKKworLyoKKyAqIFJldHVybiB0aGUgcmVhc29uIHN0cmluZyBpZiB0aGUgZ2l2ZW4gd29ya3RyZWUgaXMgbG9ja2VkIG9yIE5VTEwKKyAqIG90aGVyd2lzZS4KKyAqLworY29uc3QgY2hhciAqd29ya3RyZWVfbG9ja19yZWFzb24oc3RydWN0IHdvcmt0cmVlICp3dCk7CisKKyNkZWZpbmUgV1RfVkFMSURBVEVfV09SS1RSRUVfTUlTU0lOR19PSyAoMSA8PCAwKQorCisvKgorICogUmV0dXJuIHplcm8gaWYgdGhlIHdvcmt0cmVlIGlzIGluIGdvb2QgY29uZGl0aW9uLiBFcnJvciBtZXNzYWdlIGlzCisgKiByZXR1cm5lZCBpZiAiZXJybXNnIiBpcyBub3QgTlVMTC4KKyAqLworaW50IHZhbGlkYXRlX3dvcmt0cmVlKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QsCisJCSAgICAgIHN0cnVjdCBzdHJidWYgKmVycm1zZywKKwkJICAgICAgdW5zaWduZWQgZmxhZ3MpOworCisvKgorICogVXBkYXRlIHdvcmt0cmVlcy94eHgvZ2l0ZGlyIHdpdGggdGhlIG5ldyBwYXRoLgorICovCit2b2lkIHVwZGF0ZV93b3JrdHJlZV9sb2NhdGlvbihzdHJ1Y3Qgd29ya3RyZWUgKnd0LAorCQkJICAgICAgY29uc3QgY2hhciAqcGF0aF8pOworCisvKgorICogRnJlZSB1cCB0aGUgbWVtb3J5IGZvciB3b3JrdHJlZShzKQorICovCit2b2lkIGZyZWVfd29ya3RyZWVzKHN0cnVjdCB3b3JrdHJlZSAqKik7CisKKy8qCisgKiBDaGVjayBpZiBhIHBlci13b3JrdHJlZSBzeW1yZWYgcG9pbnRzIHRvIGEgcmVmIGluIHRoZSBtYWluIHdvcmt0cmVlCisgKiBvciBhbnkgbGlua2VkIHdvcmt0cmVlLCBhbmQgcmV0dXJuIHRoZSB3b3JrdHJlZSB0aGF0IGhvbGRzIHRoZSByZWYsCisgKiBvciBOVUxMIG90aGVyd2lzZS4gVGhlIHJlc3VsdCBtYXkgYmUgZGVzdHJveWVkIGJ5IHRoZSBuZXh0IGNhbGwuCisgKi8KK2NvbnN0IHN0cnVjdCB3b3JrdHJlZSAqZmluZF9zaGFyZWRfc3ltcmVmKGNvbnN0IGNoYXIgKnN5bXJlZiwKKwkJCQkJICBjb25zdCBjaGFyICp0YXJnZXQpOworCisvKgorICogU2ltaWxhciB0byBoZWFkX3JlZigpIGZvciBhbGwgSEVBRHMgX2V4Y2VwdF8gb25lIGZyb20gdGhlIGN1cnJlbnQKKyAqIHdvcmt0cmVlLCB3aGljaCBpcyBjb3ZlcmVkIGJ5IGhlYWRfcmVmKCkuCisgKi8KK2ludCBvdGhlcl9oZWFkX3JlZnMoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworCitpbnQgaXNfd29ya3RyZWVfYmVpbmdfcmViYXNlZChjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0LCBjb25zdCBjaGFyICp0YXJnZXQpOworaW50IGlzX3dvcmt0cmVlX2JlaW5nX2Jpc2VjdGVkKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QsIGNvbnN0IGNoYXIgKnRhcmdldCk7CisKKy8qCisgKiBTaW1pbGFyIHRvIGdpdF9wYXRoKCkgYnV0IGNhbiBwcm9kdWNlIHBhdGhzIGZvciBhIHNwZWNpZmllZAorICogd29ya3RyZWUgaW5zdGVhZCBvZiBjdXJyZW50IG9uZQorICovCitjb25zdCBjaGFyICp3b3JrdHJlZV9naXRfcGF0aChjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0LAorCQkJICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CisKKy8qCisgKiBQYXJzZSBhIHdvcmt0cmVlIHJlZiAoaS5lLiB3aXRoIHByZWZpeCBtYWluLXdvcmt0cmVlLyBvcgorICogd29ya3RyZWVzLykgYW5kIHJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIHdvcmt0cmVlJ3MgbmFtZSBhbmQKKyAqIGxlbmd0aCAob3IgTlVMTCBhbmQgemVybyBpZiBpdCdzIG1haW4gd29ya3RyZWUpLCBhbmQgcmVmLgorICoKKyAqIEFsbCBuYW1lLCBuYW1lX2xlbmd0aCBhbmQgcmVmIGFyZ3VtZW50cyBjb3VsZCBiZSBOVUxMLgorICovCitpbnQgcGFyc2Vfd29ya3RyZWVfcmVmKGNvbnN0IGNoYXIgKndvcmt0cmVlX3JlZiwgY29uc3QgY2hhciAqKm5hbWUsCisJCSAgICAgICBpbnQgKm5hbWVfbGVuZ3RoLCBjb25zdCBjaGFyICoqcmVmKTsKKworLyoKKyAqIFJldHVybiBhIHJlZm5hbWUgc3VpdGFibGUgZm9yIGFjY2VzcyBmcm9tIHRoZSBjdXJyZW50IHJlZiBzdG9yZS4KKyAqLwordm9pZCBzdHJidWZfd29ya3RyZWVfcmVmKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QsCisJCQkgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgY29uc3QgY2hhciAqcmVmbmFtZSk7CisKKy8qCisgKiBSZXR1cm4gYSByZWZuYW1lIHN1aXRhYmxlIGZvciBhY2Nlc3MgZnJvbSB0aGUgY3VycmVudCByZWYKKyAqIHN0b3JlLiBUaGUgcmVzdWx0IHdpbGwgYmUgZGVzdHJveWVkIGF0IHRoZSBuZXh0IGNhbGwuCisgKi8KK2NvbnN0IGNoYXIgKndvcmt0cmVlX3JlZihjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0LAorCQkJIGNvbnN0IGNoYXIgKnJlZm5hbWUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3dyYXAtZm9yLWJpbi5zaCBiL3dyYXAtZm9yLWJpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTg1MWI4Ci0tLSAvZGV2L251bGwKKysrIGIvd3JhcC1mb3ItYmluLnNoCkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorCisjIHdyYXAtZm9yLWJpbi5zaDogVGVtcGxhdGUgZm9yIGdpdCBleGVjdXRhYmxlIHdyYXBwZXIgc2NyaXB0cworIyB0byBydW4gdGVzdCBzdWl0ZSBhZ2FpbnN0IHNhbmRib3gsIGJ1dCB3aXRoIG9ubHkgYmluZGlyLWluc3RhbGxlZAorIyBleGVjdXRhYmxlcyBpbiBQQVRILiAgVGhlIE1ha2VmaWxlIGNvcGllcyB0aGlzIGludG8gdmFyaW91cworIyBmaWxlcyBpbiBiaW4td3JhcHBlcnMsIHN1YnN0aXR1dGluZworIyBAQEJVSUxEX0RJUkBAIGFuZCBAQFBST0dAQC4KKworR0lUX0VYRUNfUEFUSD0nQEBCVUlMRF9ESVJAQCcKK2lmIHRlc3QgLW4gIiROT19TRVRfR0lUX1RFTVBMQVRFX0RJUiIKK3RoZW4KKwl1bnNldCBHSVRfVEVNUExBVEVfRElSCitlbHNlCisJR0lUX1RFTVBMQVRFX0RJUj0nQEBCVUlMRF9ESVJAQC90ZW1wbGF0ZXMvYmx0JworCWV4cG9ydCBHSVRfVEVNUExBVEVfRElSCitmaQorR0lUUEVSTExJQj0nQEBCVUlMRF9ESVJAQC9wZXJsL2J1aWxkL2xpYiciJHtHSVRQRVJMTElCOis6JEdJVFBFUkxMSUJ9IgorR0lUX1RFWFRET01BSU5ESVI9J0BAQlVJTERfRElSQEAvcG8vYnVpbGQvbG9jYWxlJworUEFUSD0nQEBCVUlMRF9ESVJAQC9iaW4td3JhcHBlcnM6JyIkUEFUSCIKKworZXhwb3J0IEdJVF9FWEVDX1BBVEggR0lUUEVSTExJQiBQQVRIIEdJVF9URVhURE9NQUlORElSCisKK2Nhc2UgIiRHSVRfREVCVUdHRVIiIGluCisnJykKKwlleGVjICIke0dJVF9FWEVDX1BBVEh9L0BAUFJPR0BAIiAiJEAiCisJOzsKKzEpCisJdW5zZXQgR0lUX0RFQlVHR0VSCisJZXhlYyBnZGIgLS1hcmdzICIke0dJVF9FWEVDX1BBVEh9L0BAUFJPR0BAIiAiJEAiCisJOzsKKyopCisJR0lUX0RFQlVHR0VSX0FSR1M9IiRHSVRfREVCVUdHRVIiCisJdW5zZXQgR0lUX0RFQlVHR0VSCisJZXhlYyAke0dJVF9ERUJVR0dFUl9BUkdTfSAiJHtHSVRfRVhFQ19QQVRIfS9AQFBST0dAQCIgIiRAIgorCTs7Citlc2FjCmRpZmYgLS1naXQgYS93cmFwcGVyLmMgYi93cmFwcGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ExYzBlMAotLS0gL2Rldi9udWxsCisrKyBiL3dyYXBwZXIuYwpAQCAtMCwwICsxLDY2OSBAQAorLyoKKyAqIFZhcmlvdXMgdHJpdmlhbCBoZWxwZXIgd3JhcHBlcnMgYXJvdW5kIHN0YW5kYXJkIGZ1bmN0aW9ucworICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKworc3RhdGljIGludCBtZW1vcnlfbGltaXRfY2hlY2soc2l6ZV90IHNpemUsIGludCBnZW50bGUpCit7CisJc3RhdGljIHNpemVfdCBsaW1pdCA9IDA7CisJaWYgKCFsaW1pdCkgeworCQlsaW1pdCA9IGdpdF9lbnZfdWxvbmcoIkdJVF9BTExPQ19MSU1JVCIsIDApOworCQlpZiAoIWxpbWl0KQorCQkJbGltaXQgPSBTSVpFX01BWDsKKwl9CisJaWYgKHNpemUgPiBsaW1pdCkgeworCQlpZiAoZ2VudGxlKSB7CisJCQllcnJvcigiYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSAlIlBSSXVNQVgiIG92ZXIgbGltaXQgJSJQUkl1TUFYLAorCQkJICAgICAgKHVpbnRtYXhfdClzaXplLCAodWludG1heF90KWxpbWl0KTsKKwkJCXJldHVybiAtMTsKKwkJfSBlbHNlCisJCQlkaWUoImF0dGVtcHRpbmcgdG8gYWxsb2NhdGUgJSJQUkl1TUFYIiBvdmVyIGxpbWl0ICUiUFJJdU1BWCwKKwkJCSAgICAodWludG1heF90KXNpemUsICh1aW50bWF4X3QpbGltaXQpOworCX0KKwlyZXR1cm4gMDsKK30KKworY2hhciAqeHN0cmR1cChjb25zdCBjaGFyICpzdHIpCit7CisJY2hhciAqcmV0ID0gc3RyZHVwKHN0cik7CisJaWYgKCFyZXQpCisJCWRpZSgiT3V0IG9mIG1lbW9yeSwgc3RyZHVwIGZhaWxlZCIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkICpkb194bWFsbG9jKHNpemVfdCBzaXplLCBpbnQgZ2VudGxlKQoreworCXZvaWQgKnJldDsKKworCWlmIChtZW1vcnlfbGltaXRfY2hlY2soc2l6ZSwgZ2VudGxlKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0ID0gbWFsbG9jKHNpemUpOworCWlmICghcmV0ICYmICFzaXplKQorCQlyZXQgPSBtYWxsb2MoMSk7CisJaWYgKCFyZXQpIHsKKwkJaWYgKCFnZW50bGUpCisJCQlkaWUoIk91dCBvZiBtZW1vcnksIG1hbGxvYyBmYWlsZWQgKHRyaWVkIHRvIGFsbG9jYXRlICVsdSBieXRlcykiLAorCQkJICAgICh1bnNpZ25lZCBsb25nKXNpemUpOworCQllbHNlIHsKKwkJCWVycm9yKCJPdXQgb2YgbWVtb3J5LCBtYWxsb2MgZmFpbGVkICh0cmllZCB0byBhbGxvY2F0ZSAlbHUgYnl0ZXMpIiwKKwkJCSAgICAgICh1bnNpZ25lZCBsb25nKXNpemUpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisjaWZkZWYgWE1BTExPQ19QT0lTT04KKwltZW1zZXQocmV0LCAweEE1LCBzaXplKTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgKnhtYWxsb2Moc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIGRvX3htYWxsb2Moc2l6ZSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkICpkb194bWFsbG9jeihzaXplX3Qgc2l6ZSwgaW50IGdlbnRsZSkKK3sKKwl2b2lkICpyZXQ7CisJaWYgKHVuc2lnbmVkX2FkZF9vdmVyZmxvd3Moc2l6ZSwgMSkpIHsKKwkJaWYgKGdlbnRsZSkgeworCQkJZXJyb3IoIkRhdGEgdG9vIGxhcmdlIHRvIGZpdCBpbnRvIHZpcnR1YWwgbWVtb3J5IHNwYWNlLiIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0gZWxzZQorCQkJZGllKCJEYXRhIHRvbyBsYXJnZSB0byBmaXQgaW50byB2aXJ0dWFsIG1lbW9yeSBzcGFjZS4iKTsKKwl9CisJcmV0ID0gZG9feG1hbGxvYyhzaXplICsgMSwgZ2VudGxlKTsKKwlpZiAocmV0KQorCQkoKGNoYXIqKXJldClbc2l6ZV0gPSAwOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgKnhtYWxsb2N6KHNpemVfdCBzaXplKQoreworCXJldHVybiBkb194bWFsbG9jeihzaXplLCAwKTsKK30KKwordm9pZCAqeG1hbGxvY3pfZ2VudGx5KHNpemVfdCBzaXplKQoreworCXJldHVybiBkb194bWFsbG9jeihzaXplLCAxKTsKK30KKworLyoKKyAqIHhtZW1kdXB6KCkgYWxsb2NhdGVzIChsZW4gKyAxKSBieXRlcyBvZiBtZW1vcnksIGR1cGxpY2F0ZXMgImxlbiIgYnl0ZXMgb2YKKyAqICJkYXRhIiB0byB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgemVybyB0ZXJtaW5hdGVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LAorICogYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscywKKyAqIHRoZSBwcm9ncmFtIGRpZXMuCisgKi8KK3ZvaWQgKnhtZW1kdXB6KGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuIG1lbWNweSh4bWFsbG9jeihsZW4pLCBkYXRhLCBsZW4pOworfQorCitjaGFyICp4c3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pCit7CisJY2hhciAqcCA9IG1lbWNocihzdHIsICdcMCcsIGxlbik7CisJcmV0dXJuIHhtZW1kdXB6KHN0ciwgcCA/IHAgLSBzdHIgOiBsZW4pOworfQorCit2b2lkICp4cmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworCXZvaWQgKnJldDsKKworCW1lbW9yeV9saW1pdF9jaGVjayhzaXplLCAwKTsKKwlyZXQgPSByZWFsbG9jKHB0ciwgc2l6ZSk7CisJaWYgKCFyZXQgJiYgIXNpemUpCisJCXJldCA9IHJlYWxsb2MocHRyLCAxKTsKKwlpZiAoIXJldCkKKwkJZGllKCJPdXQgb2YgbWVtb3J5LCByZWFsbG9jIGZhaWxlZCIpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgKnhjYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkICpyZXQ7CisKKwlpZiAodW5zaWduZWRfbXVsdF9vdmVyZmxvd3Mobm1lbWIsIHNpemUpKQorCQlkaWUoImRhdGEgdG9vIGxhcmdlIHRvIGZpdCBpbnRvIHZpcnR1YWwgbWVtb3J5IHNwYWNlIik7CisKKwltZW1vcnlfbGltaXRfY2hlY2soc2l6ZSAqIG5tZW1iLCAwKTsKKwlyZXQgPSBjYWxsb2Mobm1lbWIsIHNpemUpOworCWlmICghcmV0ICYmICghbm1lbWIgfHwgIXNpemUpKQorCQlyZXQgPSBjYWxsb2MoMSwgMSk7CisJaWYgKCFyZXQpCisJCWRpZSgiT3V0IG9mIG1lbW9yeSwgY2FsbG9jIGZhaWxlZCIpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBMaW1pdCBzaXplIG9mIElPIGNodW5rcywgYmVjYXVzZSBodWdlIGNodW5rcyBvbmx5IGNhdXNlIHBhaW4uICBPUyBYCisgKiA2NC1iaXQgaXMgYnVnZ3ksIHJldHVybmluZyBFSU5WQUwgaWYgbGVuID49IElOVF9NQVg7IGFuZCBldmVuIGluCisgKiB0aGUgYWJzZW5jZSBvZiBidWdzLCBsYXJnZSBjaHVua3MgY2FuIHJlc3VsdCBpbiBiYWQgbGF0ZW5jaWVzIHdoZW4KKyAqIHlvdSBkZWNpZGUgdG8ga2lsbCB0aGUgcHJvY2Vzcy4KKyAqCisgKiBXZSBwaWNrIDggTWlCIGFzIG91ciBkZWZhdWx0LCBidXQgaWYgdGhlIHBsYXRmb3JtIGRlZmluZXMgU1NJWkVfTUFYCisgKiB0aGF0IGlzIHNtYWxsZXIgdGhhbiB0aGF0LCBjbGlwIGl0IHRvIFNTSVpFX01BWCwgYXMgYSBjYWxsIHRvCisgKiByZWFkKDIpIG9yIHdyaXRlKDIpIGxhcmdlciB0aGFuIHRoYXQgaXMgYWxsb3dlZCB0byBmYWlsLiAgQXMgdGhlIGxhc3QKKyAqIHJlc29ydCwgd2UgYWxsb3cgYSBwb3J0IHRvIHBhc3MgdmlhIENGTEFHUyBlLmcuICItRE1BWF9JT19TSVpFPXZhbHVlIgorICogdG8gb3ZlcnJpZGUgdGhpcywgaWYgdGhlIGRlZmluaXRpb24gb2YgU1NJWkVfTUFYIGdpdmVuIGJ5IHRoZSBwbGF0Zm9ybQorICogaXMgYnJva2VuLgorICovCisjaWZuZGVmIE1BWF9JT19TSVpFCisjIGRlZmluZSBNQVhfSU9fU0laRV9ERUZBVUxUICg4KjEwMjQqMTAyNCkKKyMgaWYgZGVmaW5lZChTU0laRV9NQVgpICYmIChTU0laRV9NQVggPCBNQVhfSU9fU0laRV9ERUZBVUxUKQorIyAgZGVmaW5lIE1BWF9JT19TSVpFIFNTSVpFX01BWAorIyBlbHNlCisjICBkZWZpbmUgTUFYX0lPX1NJWkUgTUFYX0lPX1NJWkVfREVGQVVMVAorIyBlbmRpZgorI2VuZGlmCisKKy8qKgorICogeG9wZW4oKSBpcyB0aGUgc2FtZSBhcyBvcGVuKCksIGJ1dCBpdCBkaWUoKXMgaWYgdGhlIG9wZW4oKSBmYWlscy4KKyAqLworaW50IHhvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBvZmxhZywgLi4uKQoreworCW1vZGVfdCBtb2RlID0gMDsKKwl2YV9saXN0IGFwOworCisJLyoKKwkgKiB2YV9hcmcoKSB3aWxsIGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIHRoZSBzcGVjaWZpZWQgdHlwZSBpcyBub3QKKwkgKiBjb21wYXRpYmxlIHdpdGggdGhlIGFyZ3VtZW50IHR5cGUuIFNpbmNlIGludGVnZXJzIGFyZSBwcm9tb3RlZCB0bworCSAqIGludHMsIHdlIGZldGNoIHRoZSBuZXh0IGFyZ3VtZW50IGFzIGFuIGludCwgYW5kIHRoZW4gY2FzdCBpdCB0byBhCisJICogbW9kZV90IHRvIGF2b2lkIHVuZGVmaW5lZCBiZWhhdmlvci4KKwkgKi8KKwl2YV9zdGFydChhcCwgb2ZsYWcpOworCWlmIChvZmxhZyAmIE9fQ1JFQVQpCisJCW1vZGUgPSB2YV9hcmcoYXAsIGludCk7CisJdmFfZW5kKGFwKTsKKworCWZvciAoOzspIHsKKwkJaW50IGZkID0gb3BlbihwYXRoLCBvZmxhZywgbW9kZSk7CisJCWlmIChmZCA+PSAwKQorCQkJcmV0dXJuIGZkOworCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQljb250aW51ZTsKKworCQlpZiAoKG9mbGFnICYgT19SRFdSKSA9PSBPX1JEV1IpCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyIpLCBwYXRoKTsKKwkJZWxzZSBpZiAoKG9mbGFnICYgT19XUk9OTFkpID09IE9fV1JPTkxZKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciKSwgcGF0aCk7CisJCWVsc2UKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIiksIHBhdGgpOworCX0KK30KKworc3RhdGljIGludCBoYW5kbGVfbm9uYmxvY2soaW50IGZkLCBzaG9ydCBwb2xsX2V2ZW50cywgaW50IGVycikKK3sKKwlzdHJ1Y3QgcG9sbGZkIHBmZDsKKworCWlmIChlcnIgIT0gRUFHQUlOICYmIGVyciAhPSBFV09VTERCTE9DSykKKwkJcmV0dXJuIDA7CisKKwlwZmQuZmQgPSBmZDsKKwlwZmQuZXZlbnRzID0gcG9sbF9ldmVudHM7CisKKwkvKgorCSAqIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGVycm9ycywgaGVyZTsKKwkgKiBhIHN1YnNlcXVlbnQgcmVhZC93cml0ZSB3aWxsIGRldGVjdCB1bnJlY292ZXJhYmxlIGVycm9ycworCSAqLworCXBvbGwoJnBmZCwgMSwgLTEpOworCXJldHVybiAxOworfQorCisvKgorICogeHJlYWQoKSBpcyB0aGUgc2FtZSBhIHJlYWQoKSwgYnV0IGl0IGF1dG9tYXRpY2FsbHkgcmVzdGFydHMgcmVhZCgpCisgKiBvcGVyYXRpb25zIHdpdGggYSByZWNvdmVyYWJsZSBlcnJvciAoRUFHQUlOIGFuZCBFSU5UUikuIHhyZWFkKCkKKyAqIERPRVMgTk9UIEdVQVJBTlRFRSB0aGF0ICJsZW4iIGJ5dGVzIGlzIHJlYWQgZXZlbiBpZiB0aGUgZGF0YSBpcyBhdmFpbGFibGUuCisgKi8KK3NzaXplX3QgeHJlYWQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3NpemVfdCBucjsKKwlpZiAobGVuID4gTUFYX0lPX1NJWkUpCisJCWxlbiA9IE1BWF9JT19TSVpFOworCXdoaWxlICgxKSB7CisJCW5yID0gcmVhZChmZCwgYnVmLCBsZW4pOworCQlpZiAobnIgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQkJY29udGludWU7CisJCQlpZiAoaGFuZGxlX25vbmJsb2NrKGZkLCBQT0xMSU4sIGVycm5vKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlyZXR1cm4gbnI7CisJfQorfQorCisvKgorICogeHdyaXRlKCkgaXMgdGhlIHNhbWUgYSB3cml0ZSgpLCBidXQgaXQgYXV0b21hdGljYWxseSByZXN0YXJ0cyB3cml0ZSgpCisgKiBvcGVyYXRpb25zIHdpdGggYSByZWNvdmVyYWJsZSBlcnJvciAoRUFHQUlOIGFuZCBFSU5UUikuIHh3cml0ZSgpIERPRVMgTk9UCisgKiBHVUFSQU5URUUgdGhhdCAibGVuIiBieXRlcyBpcyB3cml0dGVuIGV2ZW4gaWYgdGhlIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLgorICovCitzc2l6ZV90IHh3cml0ZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzc2l6ZV90IG5yOworCWlmIChsZW4gPiBNQVhfSU9fU0laRSkKKwkJbGVuID0gTUFYX0lPX1NJWkU7CisJd2hpbGUgKDEpIHsKKwkJbnIgPSB3cml0ZShmZCwgYnVmLCBsZW4pOworCQlpZiAobnIgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQkJY29udGludWU7CisJCQlpZiAoaGFuZGxlX25vbmJsb2NrKGZkLCBQT0xMT1VULCBlcnJubykpCisJCQkJY29udGludWU7CisJCX0KKworCQlyZXR1cm4gbnI7CisJfQorfQorCisvKgorICogeHByZWFkKCkgaXMgdGhlIHNhbWUgYXMgcHJlYWQoKSwgYnV0IGl0IGF1dG9tYXRpY2FsbHkgcmVzdGFydHMgcHJlYWQoKQorICogb3BlcmF0aW9ucyB3aXRoIGEgcmVjb3ZlcmFibGUgZXJyb3IgKEVBR0FJTiBhbmQgRUlOVFIpLiB4cHJlYWQoKSBET0VTCisgKiBOT1QgR1VBUkFOVEVFIHRoYXQgImxlbiIgYnl0ZXMgaXMgcmVhZCBldmVuIGlmIHRoZSBkYXRhIGlzIGF2YWlsYWJsZS4KKyAqLworc3NpemVfdCB4cHJlYWQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBsZW4sIG9mZl90IG9mZnNldCkKK3sKKwlzc2l6ZV90IG5yOworCWlmIChsZW4gPiBNQVhfSU9fU0laRSkKKwkJbGVuID0gTUFYX0lPX1NJWkU7CisJd2hpbGUgKDEpIHsKKwkJbnIgPSBwcmVhZChmZCwgYnVmLCBsZW4sIG9mZnNldCk7CisJCWlmICgobnIgPCAwKSAmJiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gbnI7CisJfQorfQorCitzc2l6ZV90IHJlYWRfaW5fZnVsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWNoYXIgKnAgPSBidWY7CisJc3NpemVfdCB0b3RhbCA9IDA7CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCXNzaXplX3QgbG9hZGVkID0geHJlYWQoZmQsIHAsIGNvdW50KTsKKwkJaWYgKGxvYWRlZCA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmIChsb2FkZWQgPT0gMCkKKwkJCXJldHVybiB0b3RhbDsKKwkJY291bnQgLT0gbG9hZGVkOworCQlwICs9IGxvYWRlZDsKKwkJdG90YWwgKz0gbG9hZGVkOworCX0KKworCXJldHVybiB0b3RhbDsKK30KKworc3NpemVfdCB3cml0ZV9pbl9mdWxsKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJY29uc3QgY2hhciAqcCA9IGJ1ZjsKKwlzc2l6ZV90IHRvdGFsID0gMDsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJc3NpemVfdCB3cml0dGVuID0geHdyaXRlKGZkLCBwLCBjb3VudCk7CisJCWlmICh3cml0dGVuIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKCF3cml0dGVuKSB7CisJCQllcnJubyA9IEVOT1NQQzsKKwkJCXJldHVybiAtMTsKKwkJfQorCQljb3VudCAtPSB3cml0dGVuOworCQlwICs9IHdyaXR0ZW47CisJCXRvdGFsICs9IHdyaXR0ZW47CisJfQorCisJcmV0dXJuIHRvdGFsOworfQorCitzc2l6ZV90IHByZWFkX2luX2Z1bGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwgb2ZmX3Qgb2Zmc2V0KQoreworCWNoYXIgKnAgPSBidWY7CisJc3NpemVfdCB0b3RhbCA9IDA7CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCXNzaXplX3QgbG9hZGVkID0geHByZWFkKGZkLCBwLCBjb3VudCwgb2Zmc2V0KTsKKwkJaWYgKGxvYWRlZCA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmIChsb2FkZWQgPT0gMCkKKwkJCXJldHVybiB0b3RhbDsKKwkJY291bnQgLT0gbG9hZGVkOworCQlwICs9IGxvYWRlZDsKKwkJdG90YWwgKz0gbG9hZGVkOworCQlvZmZzZXQgKz0gbG9hZGVkOworCX0KKworCXJldHVybiB0b3RhbDsKK30KKworaW50IHhkdXAoaW50IGZkKQoreworCWludCByZXQgPSBkdXAoZmQpOworCWlmIChyZXQgPCAwKQorCQlkaWVfZXJybm8oImR1cCBmYWlsZWQiKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHhmb3BlbigpIGlzIHRoZSBzYW1lIGFzIGZvcGVuKCksIGJ1dCBpdCBkaWUoKXMgaWYgdGhlIGZvcGVuKCkgZmFpbHMuCisgKi8KK0ZJTEUgKnhmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQoreworCWZvciAoOzspIHsKKwkJRklMRSAqZnAgPSBmb3BlbihwYXRoLCBtb2RlKTsKKwkJaWYgKGZwKQorCQkJcmV0dXJuIGZwOworCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQljb250aW51ZTsKKworCQlpZiAoKm1vZGUgJiYgbW9kZVsxXSA9PSAnKycpCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyIpLCBwYXRoKTsKKwkJZWxzZSBpZiAoKm1vZGUgPT0gJ3cnIHx8ICptb2RlID09ICdhJykKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiksIHBhdGgpOworCQllbHNlCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIpLCBwYXRoKTsKKwl9Cit9CisKK0ZJTEUgKnhmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlKQoreworCUZJTEUgKnN0cmVhbSA9IGZkb3BlbihmZCwgbW9kZSk7CisJaWYgKHN0cmVhbSA9PSBOVUxMKQorCQlkaWVfZXJybm8oIk91dCBvZiBtZW1vcnk/IGZkb3BlbiBmYWlsZWQiKTsKKwlyZXR1cm4gc3RyZWFtOworfQorCitGSUxFICpmb3Blbl9mb3Jfd3JpdGluZyhjb25zdCBjaGFyICpwYXRoKQoreworCUZJTEUgKnJldCA9IGZvcGVuKHBhdGgsICJ3Iik7CisKKwlpZiAoIXJldCAmJiBlcnJubyA9PSBFUEVSTSkgeworCQlpZiAoIXVubGluayhwYXRoKSkKKwkJCXJldCA9IGZvcGVuKHBhdGgsICJ3Iik7CisJCWVsc2UKKwkJCWVycm5vID0gRVBFUk07CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdhcm5fb25faW5hY2Nlc3NpYmxlKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJd2FybmluZ19lcnJubyhfKCJ1bmFibGUgdG8gYWNjZXNzICclcyciKSwgcGF0aCk7Cit9CisKK2ludCB3YXJuX29uX2ZvcGVuX2Vycm9ycyhjb25zdCBjaGFyICpwYXRoKQoreworCWlmIChlcnJubyAhPSBFTk9FTlQgJiYgZXJybm8gIT0gRU5PVERJUikgeworCQl3YXJuX29uX2luYWNjZXNzaWJsZShwYXRoKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitGSUxFICpmb3Blbl9vcl93YXJuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJRklMRSAqZnAgPSBmb3BlbihwYXRoLCBtb2RlKTsKKworCWlmIChmcCkKKwkJcmV0dXJuIGZwOworCisJd2Fybl9vbl9mb3Blbl9lcnJvcnMocGF0aCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCB4bWtzdGVtcChjaGFyICpmaWxlbmFtZV90ZW1wbGF0ZSkKK3sKKwlpbnQgZmQ7CisJY2hhciBvcmlndGVtcGxhdGVbUEFUSF9NQVhdOworCXN0cmxjcHkob3JpZ3RlbXBsYXRlLCBmaWxlbmFtZV90ZW1wbGF0ZSwgc2l6ZW9mKG9yaWd0ZW1wbGF0ZSkpOworCisJZmQgPSBta3N0ZW1wKGZpbGVuYW1lX3RlbXBsYXRlKTsKKwlpZiAoZmQgPCAwKSB7CisJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOworCQljb25zdCBjaGFyICpub25yZWxhdGl2ZV90ZW1wbGF0ZTsKKworCQlpZiAoc3RybGVuKGZpbGVuYW1lX3RlbXBsYXRlKSAhPSBzdHJsZW4ob3JpZ3RlbXBsYXRlKSkKKwkJCWZpbGVuYW1lX3RlbXBsYXRlID0gb3JpZ3RlbXBsYXRlOworCisJCW5vbnJlbGF0aXZlX3RlbXBsYXRlID0gYWJzb2x1dGVfcGF0aChmaWxlbmFtZV90ZW1wbGF0ZSk7CisJCWVycm5vID0gc2F2ZWRfZXJybm87CisJCWRpZV9lcnJubygiVW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAnJXMnIiwKKwkJCW5vbnJlbGF0aXZlX3RlbXBsYXRlKTsKKwl9CisJcmV0dXJuIGZkOworfQorCisvKiBBZGFwdGVkIGZyb20gbGliaWJlcnR5J3MgbWtzdGVtcC5jLiAqLworCisjdW5kZWYgVE1QX01BWAorI2RlZmluZSBUTVBfTUFYIDE2Mzg0CisKK2ludCBnaXRfbWtzdGVtcHNfbW9kZShjaGFyICpwYXR0ZXJuLCBpbnQgc3VmZml4X2xlbiwgaW50IG1vZGUpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgbGV0dGVyc1tdID0KKwkJImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorCQkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisJCSIwMTIzNDU2Nzg5IjsKKwlzdGF0aWMgY29uc3QgaW50IG51bV9sZXR0ZXJzID0gQVJSQVlfU0laRShsZXR0ZXJzKSAtIDE7CisJc3RhdGljIGNvbnN0IGNoYXIgeF9wYXR0ZXJuW10gPSAiWFhYWFhYIjsKKwlzdGF0aWMgY29uc3QgaW50IG51bV94ID0gQVJSQVlfU0laRSh4X3BhdHRlcm4pIC0gMTsKKwl1aW50NjRfdCB2YWx1ZTsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwljaGFyICpmaWxlbmFtZV90ZW1wbGF0ZTsKKwlzaXplX3QgbGVuOworCWludCBmZCwgY291bnQ7CisKKwlsZW4gPSBzdHJsZW4ocGF0dGVybik7CisKKwlpZiAobGVuIDwgbnVtX3ggKyBzdWZmaXhfbGVuKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHN0cm5jbXAoJnBhdHRlcm5bbGVuIC0gbnVtX3ggLSBzdWZmaXhfbGVuXSwgeF9wYXR0ZXJuLCBudW1feCkpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIFJlcGxhY2UgcGF0dGVybidzIFhYWFhYWCBjaGFyYWN0ZXJzIHdpdGggcmFuZG9tbmVzcy4KKwkgKiBUcnkgVE1QX01BWCBkaWZmZXJlbnQgZmlsZW5hbWVzLgorCSAqLworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCXZhbHVlID0gKCh1aW50NjRfdCl0di50dl91c2VjIDw8IDE2KSBeIHR2LnR2X3NlYyBeIGdldHBpZCgpOworCWZpbGVuYW1lX3RlbXBsYXRlID0gJnBhdHRlcm5bbGVuIC0gbnVtX3ggLSBzdWZmaXhfbGVuXTsKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBUTVBfTUFYOyArK2NvdW50KSB7CisJCXVpbnQ2NF90IHYgPSB2YWx1ZTsKKwkJaW50IGk7CisJCS8qIEZpbGwgaW4gdGhlIHJhbmRvbSBiaXRzLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3g7IGkrKykgeworCQkJZmlsZW5hbWVfdGVtcGxhdGVbaV0gPSBsZXR0ZXJzW3YgJSBudW1fbGV0dGVyc107CisJCQl2IC89IG51bV9sZXR0ZXJzOworCQl9CisKKwkJZmQgPSBvcGVuKHBhdHRlcm4sIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IsIG1vZGUpOworCQlpZiAoZmQgPj0gMCkKKwkJCXJldHVybiBmZDsKKwkJLyoKKwkJICogRmF0YWwgZXJyb3IgKEVQRVJNLCBFTk9TUEMgZXRjKS4KKwkJICogSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGxvb3AuCisJCSAqLworCQlpZiAoZXJybm8gIT0gRUVYSVNUKQorCQkJYnJlYWs7CisJCS8qCisJCSAqIFRoaXMgaXMgYSByYW5kb20gdmFsdWUuICBJdCBpcyBvbmx5IG5lY2Vzc2FyeSB0aGF0CisJCSAqIHRoZSBuZXh0IFRNUF9NQVggdmFsdWVzIGdlbmVyYXRlZCBieSBhZGRpbmcgNzc3NyB0bworCQkgKiBWQUxVRSBhcmUgZGlmZmVyZW50IHdpdGggKG1vZHVsZSAyXjMyKS4KKwkJICovCisJCXZhbHVlICs9IDc3Nzc7CisJfQorCS8qIFdlIHJldHVybiB0aGUgbnVsbCBzdHJpbmcgaWYgd2UgY2FuJ3QgZmluZCBhIHVuaXF1ZSBmaWxlIG5hbWUuICAqLworCXBhdHRlcm5bMF0gPSAnXDAnOworCXJldHVybiAtMTsKK30KKworaW50IGdpdF9ta3N0ZW1wX21vZGUoY2hhciAqcGF0dGVybiwgaW50IG1vZGUpCit7CisJLyogbWtzdGVtcCBpcyBqdXN0IG1rc3RlbXBzIHdpdGggbm8gc3VmZml4ICovCisJcmV0dXJuIGdpdF9ta3N0ZW1wc19tb2RlKHBhdHRlcm4sIDAsIG1vZGUpOworfQorCitpbnQgeG1rc3RlbXBfbW9kZShjaGFyICpmaWxlbmFtZV90ZW1wbGF0ZSwgaW50IG1vZGUpCit7CisJaW50IGZkOworCWNoYXIgb3JpZ3RlbXBsYXRlW1BBVEhfTUFYXTsKKwlzdHJsY3B5KG9yaWd0ZW1wbGF0ZSwgZmlsZW5hbWVfdGVtcGxhdGUsIHNpemVvZihvcmlndGVtcGxhdGUpKTsKKworCWZkID0gZ2l0X21rc3RlbXBfbW9kZShmaWxlbmFtZV90ZW1wbGF0ZSwgbW9kZSk7CisJaWYgKGZkIDwgMCkgeworCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJY29uc3QgY2hhciAqbm9ucmVsYXRpdmVfdGVtcGxhdGU7CisKKwkJaWYgKCFmaWxlbmFtZV90ZW1wbGF0ZVswXSkKKwkJCWZpbGVuYW1lX3RlbXBsYXRlID0gb3JpZ3RlbXBsYXRlOworCisJCW5vbnJlbGF0aXZlX3RlbXBsYXRlID0gYWJzb2x1dGVfcGF0aChmaWxlbmFtZV90ZW1wbGF0ZSk7CisJCWVycm5vID0gc2F2ZWRfZXJybm87CisJCWRpZV9lcnJubygiVW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAnJXMnIiwKKwkJCW5vbnJlbGF0aXZlX3RlbXBsYXRlKTsKKwl9CisJcmV0dXJuIGZkOworfQorCitzdGF0aWMgaW50IHdhcm5faWZfdW5yZW1vdmFibGUoY29uc3QgY2hhciAqb3AsIGNvbnN0IGNoYXIgKmZpbGUsIGludCByYykKK3sKKwlpbnQgZXJyOworCWlmICghcmMgfHwgZXJybm8gPT0gRU5PRU5UKQorCQlyZXR1cm4gMDsKKwllcnIgPSBlcnJubzsKKwl3YXJuaW5nX2Vycm5vKCJ1bmFibGUgdG8gJXMgJyVzJyIsIG9wLCBmaWxlKTsKKwllcnJubyA9IGVycjsKKwlyZXR1cm4gcmM7Cit9CisKK2ludCB1bmxpbmtfb3JfbXNnKGNvbnN0IGNoYXIgKmZpbGUsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlpbnQgcmMgPSB1bmxpbmsoZmlsZSk7CisKKwlhc3NlcnQoZXJyKTsKKworCWlmICghcmMgfHwgZXJybm8gPT0gRU5PRU5UKQorCQlyZXR1cm4gMDsKKworCXN0cmJ1Zl9hZGRmKGVyciwgInVuYWJsZSB0byB1bmxpbmsgJyVzJzogJXMiLAorCQkgICAgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCB1bmxpbmtfb3Jfd2Fybihjb25zdCBjaGFyICpmaWxlKQoreworCXJldHVybiB3YXJuX2lmX3VucmVtb3ZhYmxlKCJ1bmxpbmsiLCBmaWxlLCB1bmxpbmsoZmlsZSkpOworfQorCitpbnQgcm1kaXJfb3Jfd2Fybihjb25zdCBjaGFyICpmaWxlKQoreworCXJldHVybiB3YXJuX2lmX3VucmVtb3ZhYmxlKCJybWRpciIsIGZpbGUsIHJtZGlyKGZpbGUpKTsKK30KKworaW50IHJlbW92ZV9vcl93YXJuKHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCBjaGFyICpmaWxlKQoreworCXJldHVybiBTX0lTR0lUTElOSyhtb2RlKSA/IHJtZGlyX29yX3dhcm4oZmlsZSkgOiB1bmxpbmtfb3Jfd2FybihmaWxlKTsKK30KKworc3RhdGljIGludCBhY2Nlc3NfZXJyb3JfaXNfb2soaW50IGVyciwgdW5zaWduZWQgZmxhZykKK3sKKwlyZXR1cm4gKGlzX21pc3NpbmdfZmlsZV9lcnJvcihlcnIpIHx8CisJCSgoZmxhZyAmIEFDQ0VTU19FQUNDRVNfT0spICYmIGVyciA9PSBFQUNDRVMpKTsKK30KKworaW50IGFjY2Vzc19vcl93YXJuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlLCB1bnNpZ25lZCBmbGFnKQoreworCWludCByZXQgPSBhY2Nlc3MocGF0aCwgbW9kZSk7CisJaWYgKHJldCAmJiAhYWNjZXNzX2Vycm9yX2lzX29rKGVycm5vLCBmbGFnKSkKKwkJd2Fybl9vbl9pbmFjY2Vzc2libGUocGF0aCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGFjY2Vzc19vcl9kaWUoY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUsIHVuc2lnbmVkIGZsYWcpCit7CisJaW50IHJldCA9IGFjY2VzcyhwYXRoLCBtb2RlKTsKKwlpZiAocmV0ICYmICFhY2Nlc3NfZXJyb3JfaXNfb2soZXJybm8sIGZsYWcpKQorCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIGFjY2VzcyAnJXMnIiksIHBhdGgpOworCXJldHVybiByZXQ7Cit9CisKK2NoYXIgKnhnZXRjd2Qodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaWYgKHN0cmJ1Zl9nZXRjd2QoJnNiKSkKKwkJZGllX2Vycm5vKF8oInVuYWJsZSB0byBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworfQorCitpbnQgeHNucHJpbnRmKGNoYXIgKmRzdCwgc2l6ZV90IG1heCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgbGVuOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJbGVuID0gdnNucHJpbnRmKGRzdCwgbWF4LCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJaWYgKGxlbiA8IDApCisJCUJVRygieW91ciBzbnByaW50ZiBpcyBicm9rZW4iKTsKKwlpZiAobGVuID49IG1heCkKKwkJQlVHKCJhdHRlbXB0IHRvIHNucHJpbnRmIGludG8gdG9vLXNtYWxsIGJ1ZmZlciIpOworCXJldHVybiBsZW47Cit9CisKK3ZvaWQgd3JpdGVfZmlsZV9idWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCWludCBmZCA9IHhvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NjYpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYsIGxlbikgPCAwKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IHdyaXRlIHRvICclcyciKSwgcGF0aCk7CisJaWYgKGNsb3NlKGZkKSkKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBjbG9zZSAnJXMnIiksIHBhdGgpOworfQorCit2b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJdmFfc3RhcnQocGFyYW1zLCBmbXQpOworCXN0cmJ1Zl92YWRkZigmc2IsIGZtdCwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKworCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKCZzYik7CisKKwl3cml0ZV9maWxlX2J1ZihwYXRoLCBzYi5idWYsIHNiLmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKwordm9pZCBzbGVlcF9taWxsaXNlYyhpbnQgbWlsbGlzZWMpCit7CisJcG9sbChOVUxMLCAwLCBtaWxsaXNlYyk7Cit9CisKK2ludCB4Z2V0aG9zdG5hbWUoY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCS8qCisJICogSWYgdGhlIGZ1bGwgaG9zdG5hbWUgZG9lc24ndCBmaXQgaW4gYnVmLCBQT1NJWCBkb2VzIG5vdAorCSAqIHNwZWNpZnkgd2hldGhlciB0aGUgYnVmZmVyIHdpbGwgYmUgbnVsbC10ZXJtaW5hdGVkLCBzbyB0bworCSAqIGJlIHNhZmUsIGRvIGl0IG91cnNlbHZlcy4KKwkgKi8KKwlpbnQgcmV0ID0gZ2V0aG9zdG5hbWUoYnVmLCBsZW4pOworCWlmICghcmV0KQorCQlidWZbbGVuIC0gMV0gPSAwOworCXJldHVybiByZXQ7Cit9CisKK2ludCBpc19lbXB0eV9vcl9taXNzaW5nX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoc3RhdChmaWxlbmFtZSwgJnN0KSA8IDApIHsKKwkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCXJldHVybiAxOworCQlkaWVfZXJybm8oXygiY291bGQgbm90IHN0YXQgJXMiKSwgZmlsZW5hbWUpOworCX0KKworCXJldHVybiAhc3Quc3Rfc2l6ZTsKK30KZGlmZiAtLWdpdCBhL3dyaXRlLW9yLWRpZS5jIGIvd3JpdGUtb3ItZGllLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiOGM4ZAotLS0gL2Rldi9udWxsCisrKyBiL3dyaXRlLW9yLWRpZS5jCkBAIC0wLDAgKzEsNzEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisKKy8qCisgKiBTb21lIGNhc2VzIHVzZSBzdGRpbywgYnV0IHdhbnQgdG8gZmx1c2ggYWZ0ZXIgdGhlIHdyaXRlCisgKiB0byBnZXQgZXJyb3IgaGFuZGxpbmcgKGFuZCB0byBnZXQgYmV0dGVyIGludGVyYWN0aXZlCisgKiBiZWhhdmlvdXIgLSBub3QgYnVmZmVyaW5nIGV4Y2Vzc2l2ZWx5KS4KKyAqCisgKiBPZiBjb3Vyc2UsIGlmIHRoZSBmbHVzaCBoYXBwZW5lZCB3aXRoaW4gdGhlIHdyaXRlIGl0c2VsZiwKKyAqIHdlJ3ZlIGFscmVhZHkgbG9zdCB0aGUgZXJyb3IgY29kZSwgYW5kIGNhbm5vdCByZXBvcnQgaXQgYW55CisgKiBtb3JlLiBTbyB3ZSBqdXN0IGlnbm9yZSB0aGF0IGNhc2UgaW5zdGVhZCAoYW5kIGhvcGUgd2UgZ2V0CisgKiB0aGUgcmlnaHQgZXJyb3IgY29kZSBvbiB0aGUgZmx1c2gpLgorICoKKyAqIElmIHRoZSBmaWxlIGhhbmRsZSBpcyBzdGRvdXQsIGFuZCBzdGRvdXQgaXMgYSBmaWxlLCB0aGVuIHNraXAgdGhlCisgKiBmbHVzaCBlbnRpcmVseSBzaW5jZSBpdCdzIG5vdCBuZWVkZWQuCisgKi8KK3ZvaWQgbWF5YmVfZmx1c2hfb3JfZGllKEZJTEUgKmYsIGNvbnN0IGNoYXIgKmRlc2MpCit7CisJc3RhdGljIGludCBza2lwX3N0ZG91dF9mbHVzaCA9IC0xOworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIgKmNwOworCisJaWYgKGYgPT0gc3Rkb3V0KSB7CisJCWlmIChza2lwX3N0ZG91dF9mbHVzaCA8IDApIHsKKwkJCWNwID0gZ2V0ZW52KCJHSVRfRkxVU0giKTsKKwkJCWlmIChjcCkKKwkJCQlza2lwX3N0ZG91dF9mbHVzaCA9IChhdG9pKGNwKSA9PSAwKTsKKwkJCWVsc2UgaWYgKChmc3RhdChmaWxlbm8oc3Rkb3V0KSwgJnN0KSA9PSAwKSAmJgorCQkJCSBTX0lTUkVHKHN0LnN0X21vZGUpKQorCQkJCXNraXBfc3Rkb3V0X2ZsdXNoID0gMTsKKwkJCWVsc2UKKwkJCQlza2lwX3N0ZG91dF9mbHVzaCA9IDA7CisJCX0KKwkJaWYgKHNraXBfc3Rkb3V0X2ZsdXNoICYmICFmZXJyb3IoZikpCisJCQlyZXR1cm47CisJfQorCWlmIChmZmx1c2goZikpIHsKKwkJY2hlY2tfcGlwZShlcnJubyk7CisJCWRpZV9lcnJubygid3JpdGUgZmFpbHVyZSBvbiAnJXMnIiwgZGVzYyk7CisJfQorfQorCit2b2lkIGZwcmludGZfb3JfZGllKEZJTEUgKmYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJaW50IHJldDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHZmcHJpbnRmKGYsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlpZiAocmV0IDwgMCkgeworCQljaGVja19waXBlKGVycm5vKTsKKwkJZGllX2Vycm5vKCJ3cml0ZSBlcnJvciIpOworCX0KK30KKwordm9pZCBmc3luY19vcl9kaWUoaW50IGZkLCBjb25zdCBjaGFyICptc2cpCit7CisJaWYgKGZzeW5jKGZkKSA8IDApIHsKKwkJZGllX2Vycm5vKCJmc3luYyBlcnJvciBvbiAnJXMnIiwgbXNnKTsKKwl9Cit9CisKK3ZvaWQgd3JpdGVfb3JfZGllKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1ZiwgY291bnQpIDwgMCkgeworCQljaGVja19waXBlKGVycm5vKTsKKwkJZGllX2Vycm5vKCJ3cml0ZSBlcnJvciIpOworCX0KK30KZGlmZiAtLWdpdCBhL3dzLmMgYi93cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNjk4NzcKLS0tIC9kZXYvbnVsbAorKysgYi93cy5jCkBAIC0wLDAgKzEsMzgzIEBACisvKgorICogV2hpdGVzcGFjZSBydWxlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBKdW5pbyBDIEhhbWFubworICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgd2hpdGVzcGFjZV9ydWxlIHsKKwljb25zdCBjaGFyICpydWxlX25hbWU7CisJdW5zaWduZWQgcnVsZV9iaXRzOworCXVuc2lnbmVkIGxvb3NlbnNfZXJyb3I6MSwKKwkJZXhjbHVkZV9kZWZhdWx0OjE7Cit9IHdoaXRlc3BhY2VfcnVsZV9uYW1lc1tdID0geworCXsgInRyYWlsaW5nLXNwYWNlIiwgV1NfVFJBSUxJTkdfU1BBQ0UsIDAgfSwKKwl7ICJzcGFjZS1iZWZvcmUtdGFiIiwgV1NfU1BBQ0VfQkVGT1JFX1RBQiwgMCB9LAorCXsgImluZGVudC13aXRoLW5vbi10YWIiLCBXU19JTkRFTlRfV0lUSF9OT05fVEFCLCAwIH0sCisJeyAiY3ItYXQtZW9sIiwgV1NfQ1JfQVRfRU9MLCAxIH0sCisJeyAiYmxhbmstYXQtZW9sIiwgV1NfQkxBTktfQVRfRU9MLCAwIH0sCisJeyAiYmxhbmstYXQtZW9mIiwgV1NfQkxBTktfQVRfRU9GLCAwIH0sCisJeyAidGFiLWluLWluZGVudCIsIFdTX1RBQl9JTl9JTkRFTlQsIDAsIDEgfSwKK307CisKK3Vuc2lnbmVkIHBhcnNlX3doaXRlc3BhY2VfcnVsZShjb25zdCBjaGFyICpzdHJpbmcpCit7CisJdW5zaWduZWQgcnVsZSA9IFdTX0RFRkFVTFRfUlVMRTsKKworCXdoaWxlIChzdHJpbmcpIHsKKwkJaW50IGk7CisJCXNpemVfdCBsZW47CisJCWNvbnN0IGNoYXIgKmVwOworCQlpbnQgbmVnYXRlZCA9IDA7CisKKwkJc3RyaW5nID0gc3RyaW5nICsgc3Ryc3BuKHN0cmluZywgIiwgXHRcblxyIik7CisJCWVwID0gc3RyY2hybnVsKHN0cmluZywgJywnKTsKKwkJbGVuID0gZXAgLSBzdHJpbmc7CisKKwkJaWYgKCpzdHJpbmcgPT0gJy0nKSB7CisJCQluZWdhdGVkID0gMTsKKwkJCXN0cmluZysrOworCQkJbGVuLS07CisJCX0KKwkJaWYgKCFsZW4pCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2hpdGVzcGFjZV9ydWxlX25hbWVzKTsgaSsrKSB7CisJCQlpZiAoc3RybmNtcCh3aGl0ZXNwYWNlX3J1bGVfbmFtZXNbaV0ucnVsZV9uYW1lLAorCQkJCSAgICBzdHJpbmcsIGxlbikpCisJCQkJY29udGludWU7CisJCQlpZiAobmVnYXRlZCkKKwkJCQlydWxlICY9IH53aGl0ZXNwYWNlX3J1bGVfbmFtZXNbaV0ucnVsZV9iaXRzOworCQkJZWxzZQorCQkJCXJ1bGUgfD0gd2hpdGVzcGFjZV9ydWxlX25hbWVzW2ldLnJ1bGVfYml0czsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzdHJuY21wKHN0cmluZywgInRhYndpZHRoPSIsIDkpID09IDApIHsKKwkJCXVuc2lnbmVkIHRhYndpZHRoID0gYXRvaShzdHJpbmcgKyA5KTsKKwkJCWlmICgwIDwgdGFid2lkdGggJiYgdGFid2lkdGggPCAwMTAwKSB7CisJCQkJcnVsZSAmPSB+V1NfVEFCX1dJRFRIX01BU0s7CisJCQkJcnVsZSB8PSB0YWJ3aWR0aDsKKwkJCX0KKwkJCWVsc2UKKwkJCQl3YXJuaW5nKCJ0YWJ3aWR0aCAlLipzIG91dCBvZiByYW5nZSIsCisJCQkJCShpbnQpKGxlbiAtIDkpLCBzdHJpbmcgKyA5KTsKKwkJfQorCQlzdHJpbmcgPSBlcDsKKwl9CisKKwlpZiAocnVsZSAmIFdTX1RBQl9JTl9JTkRFTlQgJiYgcnVsZSAmIFdTX0lOREVOVF9XSVRIX05PTl9UQUIpCisJCWRpZSgiY2Fubm90IGVuZm9yY2UgYm90aCB0YWItaW4taW5kZW50IGFuZCBpbmRlbnQtd2l0aC1ub24tdGFiIik7CisJcmV0dXJuIHJ1bGU7Cit9CisKK3Vuc2lnbmVkIHdoaXRlc3BhY2VfcnVsZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aG5hbWUpCit7CisJc3RhdGljIHN0cnVjdCBhdHRyX2NoZWNrICphdHRyX3doaXRlc3BhY2VfcnVsZTsKKwljb25zdCBjaGFyICp2YWx1ZTsKKworCWlmICghYXR0cl93aGl0ZXNwYWNlX3J1bGUpCisJCWF0dHJfd2hpdGVzcGFjZV9ydWxlID0gYXR0cl9jaGVja19pbml0bCgid2hpdGVzcGFjZSIsIE5VTEwpOworCisJZ2l0X2NoZWNrX2F0dHIoaXN0YXRlLCBwYXRobmFtZSwgYXR0cl93aGl0ZXNwYWNlX3J1bGUpOworCXZhbHVlID0gYXR0cl93aGl0ZXNwYWNlX3J1bGUtPml0ZW1zWzBdLnZhbHVlOworCWlmIChBVFRSX1RSVUUodmFsdWUpKSB7CisJCS8qIHRydWUgKHdoaXRlc3BhY2UpICovCisJCXVuc2lnbmVkIGFsbF9ydWxlID0gd3NfdGFiX3dpZHRoKHdoaXRlc3BhY2VfcnVsZV9jZmcpOworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2hpdGVzcGFjZV9ydWxlX25hbWVzKTsgaSsrKQorCQkJaWYgKCF3aGl0ZXNwYWNlX3J1bGVfbmFtZXNbaV0ubG9vc2Vuc19lcnJvciAmJgorCQkJICAgICF3aGl0ZXNwYWNlX3J1bGVfbmFtZXNbaV0uZXhjbHVkZV9kZWZhdWx0KQorCQkJCWFsbF9ydWxlIHw9IHdoaXRlc3BhY2VfcnVsZV9uYW1lc1tpXS5ydWxlX2JpdHM7CisJCXJldHVybiBhbGxfcnVsZTsKKwl9IGVsc2UgaWYgKEFUVFJfRkFMU0UodmFsdWUpKSB7CisJCS8qIGZhbHNlICgtd2hpdGVzcGFjZSkgKi8KKwkJcmV0dXJuIHdzX3RhYl93aWR0aCh3aGl0ZXNwYWNlX3J1bGVfY2ZnKTsKKwl9IGVsc2UgaWYgKEFUVFJfVU5TRVQodmFsdWUpKSB7CisJCS8qIHJlc2V0IHRvIGRlZmF1bHQgKCF3aGl0ZXNwYWNlKSAqLworCQlyZXR1cm4gd2hpdGVzcGFjZV9ydWxlX2NmZzsKKwl9IGVsc2UgeworCQkvKiBzdHJpbmcgKi8KKwkJcmV0dXJuIHBhcnNlX3doaXRlc3BhY2VfcnVsZSh2YWx1ZSk7CisJfQorfQorCisvKiBUaGUgcmV0dXJuZWQgc3RyaW5nIHNob3VsZCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLiAqLworY2hhciAqd2hpdGVzcGFjZV9lcnJvcl9zdHJpbmcodW5zaWduZWQgd3MpCit7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlpZiAoKHdzICYgV1NfVFJBSUxJTkdfU1BBQ0UpID09IFdTX1RSQUlMSU5HX1NQQUNFKQorCQlzdHJidWZfYWRkc3RyKCZlcnIsICJ0cmFpbGluZyB3aGl0ZXNwYWNlIik7CisJZWxzZSB7CisJCWlmICh3cyAmIFdTX0JMQU5LX0FUX0VPTCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgInRyYWlsaW5nIHdoaXRlc3BhY2UiKTsKKwkJaWYgKHdzICYgV1NfQkxBTktfQVRfRU9GKSB7CisJCQlpZiAoZXJyLmxlbikKKwkJCQlzdHJidWZfYWRkc3RyKCZlcnIsICIsICIpOworCQkJc3RyYnVmX2FkZHN0cigmZXJyLCAibmV3IGJsYW5rIGxpbmUgYXQgRU9GIik7CisJCX0KKwl9CisJaWYgKHdzICYgV1NfU1BBQ0VfQkVGT1JFX1RBQikgeworCQlpZiAoZXJyLmxlbikKKwkJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgIiwgIik7CisJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgInNwYWNlIGJlZm9yZSB0YWIgaW4gaW5kZW50Iik7CisJfQorCWlmICh3cyAmIFdTX0lOREVOVF9XSVRIX05PTl9UQUIpIHsKKwkJaWYgKGVyci5sZW4pCisJCQlzdHJidWZfYWRkc3RyKCZlcnIsICIsICIpOworCQlzdHJidWZfYWRkc3RyKCZlcnIsICJpbmRlbnQgd2l0aCBzcGFjZXMiKTsKKwl9CisJaWYgKHdzICYgV1NfVEFCX0lOX0lOREVOVCkgeworCQlpZiAoZXJyLmxlbikKKwkJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgIiwgIik7CisJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgInRhYiBpbiBpbmRlbnQiKTsKKwl9CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmVyciwgTlVMTCk7Cit9CisKKy8qIElmIHN0cmVhbSBpcyBub24tTlVMTCwgZW1pdHMgdGhlIGxpbmUgYWZ0ZXIgY2hlY2tpbmcuICovCitzdGF0aWMgdW5zaWduZWQgd3NfY2hlY2tfZW1pdF8xKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIHVuc2lnbmVkIHdzX3J1bGUsCisJCQkJRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpzZXQsCisJCQkJY29uc3QgY2hhciAqcmVzZXQsIGNvbnN0IGNoYXIgKndzKQoreworCXVuc2lnbmVkIHJlc3VsdCA9IDA7CisJaW50IHdyaXR0ZW4gPSAwOworCWludCB0cmFpbGluZ193aGl0ZXNwYWNlID0gLTE7CisJaW50IHRyYWlsaW5nX25ld2xpbmUgPSAwOworCWludCB0cmFpbGluZ19jYXJyaWFnZV9yZXR1cm4gPSAwOworCWludCBpOworCisJLyogTG9naWMgaXMgc2ltcGxlciBpZiB3ZSB0ZW1wb3JhcmlseSBpZ25vcmUgdGhlIHRyYWlsaW5nIG5ld2xpbmUuICovCisJaWYgKGxlbiA+IDAgJiYgbGluZVtsZW4gLSAxXSA9PSAnXG4nKSB7CisJCXRyYWlsaW5nX25ld2xpbmUgPSAxOworCQlsZW4tLTsKKwl9CisJaWYgKCh3c19ydWxlICYgV1NfQ1JfQVRfRU9MKSAmJgorCSAgICBsZW4gPiAwICYmIGxpbmVbbGVuIC0gMV0gPT0gJ1xyJykgeworCQl0cmFpbGluZ19jYXJyaWFnZV9yZXR1cm4gPSAxOworCQlsZW4tLTsKKwl9CisKKwkvKiBDaGVjayBmb3IgdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi8KKwlpZiAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPTCkgeworCQlmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgeworCQkJaWYgKGlzc3BhY2UobGluZVtpXSkpIHsKKwkJCQl0cmFpbGluZ193aGl0ZXNwYWNlID0gaTsKKwkJCQlyZXN1bHQgfD0gV1NfQkxBTktfQVRfRU9MOworCQkJfQorCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHRyYWlsaW5nX3doaXRlc3BhY2UgPT0gLTEpCisJCXRyYWlsaW5nX3doaXRlc3BhY2UgPSBsZW47CisKKwkvKiBDaGVjayBpbmRlbnRhdGlvbiAqLworCWZvciAoaSA9IDA7IGkgPCB0cmFpbGluZ193aGl0ZXNwYWNlOyBpKyspIHsKKwkJaWYgKGxpbmVbaV0gPT0gJyAnKQorCQkJY29udGludWU7CisJCWlmIChsaW5lW2ldICE9ICdcdCcpCisJCQlicmVhazsKKwkJaWYgKCh3c19ydWxlICYgV1NfU1BBQ0VfQkVGT1JFX1RBQikgJiYgd3JpdHRlbiA8IGkpIHsKKwkJCXJlc3VsdCB8PSBXU19TUEFDRV9CRUZPUkVfVEFCOworCQkJaWYgKHN0cmVhbSkgeworCQkJCWZwdXRzKHdzLCBzdHJlYW0pOworCQkJCWZ3cml0ZShsaW5lICsgd3JpdHRlbiwgaSAtIHdyaXR0ZW4sIDEsIHN0cmVhbSk7CisJCQkJZnB1dHMocmVzZXQsIHN0cmVhbSk7CisJCQkJZndyaXRlKGxpbmUgKyBpLCAxLCAxLCBzdHJlYW0pOworCQkJfQorCQl9IGVsc2UgaWYgKHdzX3J1bGUgJiBXU19UQUJfSU5fSU5ERU5UKSB7CisJCQlyZXN1bHQgfD0gV1NfVEFCX0lOX0lOREVOVDsKKwkJCWlmIChzdHJlYW0pIHsKKwkJCQlmd3JpdGUobGluZSArIHdyaXR0ZW4sIGkgLSB3cml0dGVuLCAxLCBzdHJlYW0pOworCQkJCWZwdXRzKHdzLCBzdHJlYW0pOworCQkJCWZ3cml0ZShsaW5lICsgaSwgMSwgMSwgc3RyZWFtKTsKKwkJCQlmcHV0cyhyZXNldCwgc3RyZWFtKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChzdHJlYW0pIHsKKwkJCWZ3cml0ZShsaW5lICsgd3JpdHRlbiwgaSAtIHdyaXR0ZW4gKyAxLCAxLCBzdHJlYW0pOworCQl9CisJCXdyaXR0ZW4gPSBpICsgMTsKKwl9CisKKwkvKiBDaGVjayBmb3IgaW5kZW50IHVzaW5nIG5vbi10YWIuICovCisJaWYgKCh3c19ydWxlICYgV1NfSU5ERU5UX1dJVEhfTk9OX1RBQikgJiYgaSAtIHdyaXR0ZW4gPj0gd3NfdGFiX3dpZHRoKHdzX3J1bGUpKSB7CisJCXJlc3VsdCB8PSBXU19JTkRFTlRfV0lUSF9OT05fVEFCOworCQlpZiAoc3RyZWFtKSB7CisJCQlmcHV0cyh3cywgc3RyZWFtKTsKKwkJCWZ3cml0ZShsaW5lICsgd3JpdHRlbiwgaSAtIHdyaXR0ZW4sIDEsIHN0cmVhbSk7CisJCQlmcHV0cyhyZXNldCwgc3RyZWFtKTsKKwkJfQorCQl3cml0dGVuID0gaTsKKwl9CisKKwlpZiAoc3RyZWFtKSB7CisJCS8qCisJCSAqIE5vdyB0aGUgcmVzdCBvZiB0aGUgbGluZSBzdGFydHMgYXQgIndyaXR0ZW4iLgorCQkgKiBUaGUgbm9uLWhpZ2hsaWdodGVkIHBhcnQgZW5kcyBhdCAidHJhaWxpbmdfd2hpdGVzcGFjZSIuCisJCSAqLworCisJCS8qIEVtaXQgbm9uLWhpZ2hsaWdodGVkIChtaWRkbGUpIHNlZ21lbnQuICovCisJCWlmICh0cmFpbGluZ193aGl0ZXNwYWNlIC0gd3JpdHRlbiA+IDApIHsKKwkJCWZwdXRzKHNldCwgc3RyZWFtKTsKKwkJCWZ3cml0ZShsaW5lICsgd3JpdHRlbiwKKwkJCSAgICB0cmFpbGluZ193aGl0ZXNwYWNlIC0gd3JpdHRlbiwgMSwgc3RyZWFtKTsKKwkJCWZwdXRzKHJlc2V0LCBzdHJlYW0pOworCQl9CisKKwkJLyogSGlnaGxpZ2h0IGVycm9ycyBpbiB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqLworCQlpZiAodHJhaWxpbmdfd2hpdGVzcGFjZSAhPSBsZW4pIHsKKwkJCWZwdXRzKHdzLCBzdHJlYW0pOworCQkJZndyaXRlKGxpbmUgKyB0cmFpbGluZ193aGl0ZXNwYWNlLAorCQkJICAgIGxlbiAtIHRyYWlsaW5nX3doaXRlc3BhY2UsIDEsIHN0cmVhbSk7CisJCQlmcHV0cyhyZXNldCwgc3RyZWFtKTsKKwkJfQorCQlpZiAodHJhaWxpbmdfY2FycmlhZ2VfcmV0dXJuKQorCQkJZnB1dGMoJ1xyJywgc3RyZWFtKTsKKwkJaWYgKHRyYWlsaW5nX25ld2xpbmUpCisJCQlmcHV0YygnXG4nLCBzdHJlYW0pOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdzX2NoZWNrX2VtaXQoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSwKKwkJICAgRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpzZXQsCisJCSAgIGNvbnN0IGNoYXIgKnJlc2V0LCBjb25zdCBjaGFyICp3cykKK3sKKwkodm9pZCl3c19jaGVja19lbWl0XzEobGluZSwgbGVuLCB3c19ydWxlLCBzdHJlYW0sIHNldCwgcmVzZXQsIHdzKTsKK30KKwordW5zaWduZWQgd3NfY2hlY2soY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSkKK3sKKwlyZXR1cm4gd3NfY2hlY2tfZW1pdF8xKGxpbmUsIGxlbiwgd3NfcnVsZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Cit9CisKK2ludCB3c19ibGFua19saW5lKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIHVuc2lnbmVkIHdzX3J1bGUpCit7CisJLyoKKwkgKiBXZSBfbWlnaHRfIHdhbnQgdG8gdHJlYXQgQ1IgZGlmZmVyZW50bHkgZnJvbSBvdGhlcgorCSAqIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB3aGVuIHdzX3J1bGUgaGFzIFdTX0NSX0FUX0VPTCwgYnV0CisJICogZm9yIG5vdyB3ZSBqdXN0IHVzZSB0aGlzIHN0dXBpZCBkZWZpbml0aW9uLgorCSAqLworCXdoaWxlIChsZW4tLSA+IDApIHsKKwkJaWYgKCFpc3NwYWNlKCpsaW5lKSkKKwkJCXJldHVybiAwOworCQlsaW5lKys7CisJfQorCXJldHVybiAxOworfQorCisvKiBDb3B5IHRoZSBsaW5lIG9udG8gdGhlIGVuZCBvZiB0aGUgc3RyYnVmIHdoaWxlIGZpeGluZyB3aGl0ZXNwYWNlcyAqLwordm9pZCB3c19maXhfY29weShzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSwgaW50ICplcnJvcl9jb3VudCkKK3sKKwkvKgorCSAqIGxlbiBpcyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgY29waWVkIGZyb20gc3JjLCBzdGFydGluZworCSAqIGF0IHNyYy4gIFR5cGljYWxseSBzcmNbbGVuLTFdIGlzICdcbicsIHVubGVzcyB0aGlzIGlzCisJICogdGhlIGluY29tcGxldGUgbGFzdCBsaW5lLgorCSAqLworCWludCBpOworCWludCBhZGRfbmxfdG9fdGFpbCA9IDA7CisJaW50IGFkZF9jcl90b190YWlsID0gMDsKKwlpbnQgZml4ZWQgPSAwOworCWludCBsYXN0X3RhYl9pbl9pbmRlbnQgPSAtMTsKKwlpbnQgbGFzdF9zcGFjZV9pbl9pbmRlbnQgPSAtMTsKKwlpbnQgbmVlZF9maXhfbGVhZGluZ19zcGFjZSA9IDA7CisKKwkvKgorCSAqIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UKKwkgKi8KKwlpZiAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPTCkgeworCQlpZiAoMCA8IGxlbiAmJiBzcmNbbGVuIC0gMV0gPT0gJ1xuJykgeworCQkJYWRkX25sX3RvX3RhaWwgPSAxOworCQkJbGVuLS07CisJCQlpZiAoMCA8IGxlbiAmJiBzcmNbbGVuIC0gMV0gPT0gJ1xyJykgeworCQkJCWFkZF9jcl90b190YWlsID0gISEod3NfcnVsZSAmIFdTX0NSX0FUX0VPTCk7CisJCQkJbGVuLS07CisJCQl9CisJCX0KKwkJaWYgKDAgPCBsZW4gJiYgaXNzcGFjZShzcmNbbGVuIC0gMV0pKSB7CisJCQl3aGlsZSAoMCA8IGxlbiAmJiBpc3NwYWNlKHNyY1tsZW4tMV0pKQorCQkJCWxlbi0tOworCQkJZml4ZWQgPSAxOworCQl9CisJfQorCisJLyoKKwkgKiBDaGVjayBsZWFkaW5nIHdoaXRlc3BhY2VzIChpbmRlbnQpCisJICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWNoYXIgY2ggPSBzcmNbaV07CisJCWlmIChjaCA9PSAnXHQnKSB7CisJCQlsYXN0X3RhYl9pbl9pbmRlbnQgPSBpOworCQkJaWYgKCh3c19ydWxlICYgV1NfU1BBQ0VfQkVGT1JFX1RBQikgJiYKKwkJCSAgICAwIDw9IGxhc3Rfc3BhY2VfaW5faW5kZW50KQorCQkJICAgIG5lZWRfZml4X2xlYWRpbmdfc3BhY2UgPSAxOworCQl9IGVsc2UgaWYgKGNoID09ICcgJykgeworCQkJbGFzdF9zcGFjZV9pbl9pbmRlbnQgPSBpOworCQkJaWYgKCh3c19ydWxlICYgV1NfSU5ERU5UX1dJVEhfTk9OX1RBQikgJiYKKwkJCSAgICB3c190YWJfd2lkdGgod3NfcnVsZSkgPD0gaSAtIGxhc3RfdGFiX2luX2luZGVudCkKKwkJCQluZWVkX2ZpeF9sZWFkaW5nX3NwYWNlID0gMTsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9CisKKwlpZiAobmVlZF9maXhfbGVhZGluZ19zcGFjZSkgeworCQkvKiBQcm9jZXNzIGluZGVudCBvdXJzZWx2ZXMgKi8KKwkJaW50IGNvbnNlY3V0aXZlX3NwYWNlcyA9IDA7CisJCWludCBsYXN0ID0gbGFzdF90YWJfaW5faW5kZW50ICsgMTsKKworCQlpZiAod3NfcnVsZSAmIFdTX0lOREVOVF9XSVRIX05PTl9UQUIpIHsKKwkJCS8qIGhhdmUgImxhc3QiIHBvaW50IGF0IG9uZSBwYXN0IHRoZSBpbmRlbnQgKi8KKwkJCWlmIChsYXN0X3RhYl9pbl9pbmRlbnQgPCBsYXN0X3NwYWNlX2luX2luZGVudCkKKwkJCQlsYXN0ID0gbGFzdF9zcGFjZV9pbl9pbmRlbnQgKyAxOworCQkJZWxzZQorCQkJCWxhc3QgPSBsYXN0X3RhYl9pbl9pbmRlbnQgKyAxOworCQl9CisKKwkJLyoKKwkJICogYmV0d2VlbiBzcmNbMC4ubGFzdC0xXSwgc3RyaXAgdGhlIGZ1bm55IHNwYWNlcywKKwkJICogdXBkYXRpbmcgdGhlbSB0byB0YWIgYXMgbmVlZGVkLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGxhc3Q7IGkrKykgeworCQkJY2hhciBjaCA9IHNyY1tpXTsKKwkJCWlmIChjaCAhPSAnICcpIHsKKwkJCQljb25zZWN1dGl2ZV9zcGFjZXMgPSAwOworCQkJCXN0cmJ1Zl9hZGRjaChkc3QsIGNoKTsKKwkJCX0gZWxzZSB7CisJCQkJY29uc2VjdXRpdmVfc3BhY2VzKys7CisJCQkJaWYgKGNvbnNlY3V0aXZlX3NwYWNlcyA9PSB3c190YWJfd2lkdGgod3NfcnVsZSkpIHsKKwkJCQkJc3RyYnVmX2FkZGNoKGRzdCwgJ1x0Jyk7CisJCQkJCWNvbnNlY3V0aXZlX3NwYWNlcyA9IDA7CisJCQkJfQorCQkJfQorCQl9CisJCXdoaWxlICgwIDwgY29uc2VjdXRpdmVfc3BhY2VzLS0pCisJCQlzdHJidWZfYWRkY2goZHN0LCAnICcpOworCQlsZW4gLT0gbGFzdDsKKwkJc3JjICs9IGxhc3Q7CisJCWZpeGVkID0gMTsKKwl9IGVsc2UgaWYgKCh3c19ydWxlICYgV1NfVEFCX0lOX0lOREVOVCkgJiYgbGFzdF90YWJfaW5faW5kZW50ID49IDApIHsKKwkJLyogRXhwYW5kIHRhYnMgaW50byBzcGFjZXMgKi8KKwkJaW50IHN0YXJ0ID0gZHN0LT5sZW47CisJCWludCBsYXN0ID0gbGFzdF90YWJfaW5faW5kZW50ICsgMTsKKwkJZm9yIChpID0gMDsgaSA8IGxhc3Q7IGkrKykgeworCQkJaWYgKHNyY1tpXSA9PSAnXHQnKQorCQkJCWRvIHsKKwkJCQkJc3RyYnVmX2FkZGNoKGRzdCwgJyAnKTsKKwkJCQl9IHdoaWxlICgoZHN0LT5sZW4gLSBzdGFydCkgJSB3c190YWJfd2lkdGgod3NfcnVsZSkpOworCQkJZWxzZQorCQkJCXN0cmJ1Zl9hZGRjaChkc3QsIHNyY1tpXSk7CisJCX0KKwkJbGVuIC09IGxhc3Q7CisJCXNyYyArPSBsYXN0OworCQlmaXhlZCA9IDE7CisJfQorCisJc3RyYnVmX2FkZChkc3QsIHNyYywgbGVuKTsKKwlpZiAoYWRkX2NyX3RvX3RhaWwpCisJCXN0cmJ1Zl9hZGRjaChkc3QsICdccicpOworCWlmIChhZGRfbmxfdG9fdGFpbCkKKwkJc3RyYnVmX2FkZGNoKGRzdCwgJ1xuJyk7CisJaWYgKGZpeGVkICYmIGVycm9yX2NvdW50KQorCQkoKmVycm9yX2NvdW50KSsrOworfQpkaWZmIC0tZ2l0IGEvd3Qtc3RhdHVzLmMgYi93dC1zdGF0dXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGRmYTZmCi0tLSAvZGV2L251bGwKKysrIGIvd3Qtc3RhdHVzLmMKQEAgLTAsMCArMSwyNDg5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ3dC1zdGF0dXMuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgImNvbHVtbi5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJ3b3JrdHJlZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisKKyNkZWZpbmUgQUJfREVMQVlfV0FSTklOR19JTl9NUyAoMiAqIDEwMDApCisKK3N0YXRpYyBjb25zdCBjaGFyIGN1dF9saW5lW10gPQorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CisKK3N0YXRpYyBjaGFyIGRlZmF1bHRfd3Rfc3RhdHVzX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CisJR0lUX0NPTE9SX05PUk1BTCwgLyogV1RfU1RBVFVTX0hFQURFUiAqLworCUdJVF9DT0xPUl9HUkVFTiwgIC8qIFdUX1NUQVRVU19VUERBVEVEICovCisJR0lUX0NPTE9SX1JFRCwgICAgLyogV1RfU1RBVFVTX0NIQU5HRUQgKi8KKwlHSVRfQ09MT1JfUkVELCAgICAvKiBXVF9TVEFUVVNfVU5UUkFDS0VEICovCisJR0lUX0NPTE9SX1JFRCwgICAgLyogV1RfU1RBVFVTX05PQlJBTkNIICovCisJR0lUX0NPTE9SX1JFRCwgICAgLyogV1RfU1RBVFVTX1VOTUVSR0VEICovCisJR0lUX0NPTE9SX0dSRUVOLCAgLyogV1RfU1RBVFVTX0xPQ0FMX0JSQU5DSCAqLworCUdJVF9DT0xPUl9SRUQsICAgIC8qIFdUX1NUQVRVU19SRU1PVEVfQlJBTkNIICovCisJR0lUX0NPTE9SX05JTCwgICAgLyogV1RfU1RBVFVTX09OQlJBTkNIICovCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29sb3IoaW50IHNsb3QsIHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJY29uc3QgY2hhciAqYyA9ICIiOworCWlmICh3YW50X2NvbG9yKHMtPnVzZV9jb2xvcikpCisJCWMgPSBzLT5jb2xvcl9wYWxldHRlW3Nsb3RdOworCWlmIChzbG90ID09IFdUX1NUQVRVU19PTkJSQU5DSCAmJiBjb2xvcl9pc19uaWwoYykpCisJCWMgPSBzLT5jb2xvcl9wYWxldHRlW1dUX1NUQVRVU19IRUFERVJdOworCXJldHVybiBjOworfQorCitzdGF0aWMgdm9pZCBzdGF0dXNfdnByaW50ZihzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBpbnQgYXRfYm9sLCBjb25zdCBjaGFyICpjb2xvciwKKwkJY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwLCBjb25zdCBjaGFyICp0cmFpbCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBsaW5lYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqbGluZSwgKmVvbDsKKworCXN0cmJ1Zl92YWRkZigmc2IsIGZtdCwgYXApOworCWlmICghc2IubGVuKSB7CisJCWlmIChzLT5kaXNwbGF5X2NvbW1lbnRfcHJlZml4KSB7CisJCQlzdHJidWZfYWRkY2goJnNiLCBjb21tZW50X2xpbmVfY2hhcik7CisJCQlpZiAoIXRyYWlsKQorCQkJCXN0cmJ1Zl9hZGRjaCgmc2IsICcgJyk7CisJCX0KKwkJY29sb3JfcHJpbnRfc3RyYnVmKHMtPmZwLCBjb2xvciwgJnNiKTsKKwkJaWYgKHRyYWlsKQorCQkJZnByaW50ZihzLT5mcCwgIiVzIiwgdHJhaWwpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm47CisJfQorCWZvciAobGluZSA9IHNiLmJ1ZjsgKmxpbmU7IGxpbmUgPSBlb2wgKyAxKSB7CisJCWVvbCA9IHN0cmNocihsaW5lLCAnXG4nKTsKKworCQlzdHJidWZfcmVzZXQoJmxpbmVidWYpOworCQlpZiAoYXRfYm9sICYmIHMtPmRpc3BsYXlfY29tbWVudF9wcmVmaXgpIHsKKwkJCXN0cmJ1Zl9hZGRjaCgmbGluZWJ1ZiwgY29tbWVudF9saW5lX2NoYXIpOworCQkJaWYgKCpsaW5lICE9ICdcbicgJiYgKmxpbmUgIT0gJ1x0JykKKwkJCQlzdHJidWZfYWRkY2goJmxpbmVidWYsICcgJyk7CisJCX0KKwkJaWYgKGVvbCkKKwkJCXN0cmJ1Zl9hZGQoJmxpbmVidWYsIGxpbmUsIGVvbCAtIGxpbmUpOworCQllbHNlCisJCQlzdHJidWZfYWRkc3RyKCZsaW5lYnVmLCBsaW5lKTsKKwkJY29sb3JfcHJpbnRfc3RyYnVmKHMtPmZwLCBjb2xvciwgJmxpbmVidWYpOworCQlpZiAoZW9sKQorCQkJZnByaW50ZihzLT5mcCwgIlxuIik7CisJCWVsc2UKKwkJCWJyZWFrOworCQlhdF9ib2wgPSAxOworCX0KKwlpZiAodHJhaWwpCisJCWZwcmludGYocy0+ZnAsICIlcyIsIHRyYWlsKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZWJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKwordm9pZCBzdGF0dXNfcHJpbnRmX2xuKHN0cnVjdCB3dF9zdGF0dXMgKnMsIGNvbnN0IGNoYXIgKmNvbG9yLAorCQkJY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0YXR1c192cHJpbnRmKHMsIDEsIGNvbG9yLCBmbXQsIGFwLCAiXG4iKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIHN0YXR1c19wcmludGYoc3RydWN0IHd0X3N0YXR1cyAqcywgY29uc3QgY2hhciAqY29sb3IsCisJCQljb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RhdHVzX3ZwcmludGYocywgMSwgY29sb3IsIGZtdCwgYXAsIE5VTEwpOworCXZhX2VuZChhcCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXR1c19wcmludGZfbW9yZShzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBjb25zdCBjaGFyICpjb2xvciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RhdHVzX3ZwcmludGYocywgMCwgY29sb3IsIGZtdCwgYXAsIE5VTEwpOworCXZhX2VuZChhcCk7Cit9CisKK3ZvaWQgd3Rfc3RhdHVzX3ByZXBhcmUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJbWVtc2V0KHMsIDAsIHNpemVvZigqcykpOworCXMtPnJlcG8gPSByOworCW1lbWNweShzLT5jb2xvcl9wYWxldHRlLCBkZWZhdWx0X3d0X3N0YXR1c19jb2xvcnMsCisJICAgICAgIHNpemVvZihkZWZhdWx0X3d0X3N0YXR1c19jb2xvcnMpKTsKKwlzLT5zaG93X3VudHJhY2tlZF9maWxlcyA9IFNIT1dfTk9STUFMX1VOVFJBQ0tFRF9GSUxFUzsKKwlzLT51c2VfY29sb3IgPSAtMTsKKwlzLT5yZWxhdGl2ZV9wYXRocyA9IDE7CisJcy0+YnJhbmNoID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCAwLCBOVUxMLCBOVUxMKTsKKwlzLT5yZWZlcmVuY2UgPSAiSEVBRCI7CisJcy0+ZnAgPSBzdGRvdXQ7CisJcy0+aW5kZXhfZmlsZSA9IGdldF9pbmRleF9maWxlKCk7CisJcy0+Y2hhbmdlLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlzLT51bnRyYWNrZWQuc3RyZHVwX3N0cmluZ3MgPSAxOworCXMtPmlnbm9yZWQuc3RyZHVwX3N0cmluZ3MgPSAxOworCXMtPnNob3dfYnJhbmNoID0gLTE7ICAvKiB1bnNwZWNpZmllZCAqLworCXMtPnNob3dfc3Rhc2ggPSAwOworCXMtPmFoZWFkX2JlaGluZF9mbGFncyA9IEFIRUFEX0JFSElORF9VTlNQRUNJRklFRDsKKwlzLT5kaXNwbGF5X2NvbW1lbnRfcHJlZml4ID0gMDsKKwlzLT5kZXRlY3RfcmVuYW1lID0gLTE7CisJcy0+cmVuYW1lX3Njb3JlID0gLTE7CisJcy0+cmVuYW1lX2xpbWl0ID0gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHd0X2xvbmdzdGF0dXNfcHJpbnRfdW5tZXJnZWRfaGVhZGVyKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGk7CisJaW50IGRlbF9tb2RfY29uZmxpY3QgPSAwOworCWludCBib3RoX2RlbGV0ZWQgPSAwOworCWludCBub3RfZGVsZXRlZCA9IDA7CisJY29uc3QgY2hhciAqYyA9IGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpOworCisJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCJVbm1lcmdlZCBwYXRoczoiKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+Y2hhbmdlLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ID0gJihzLT5jaGFuZ2UuaXRlbXNbaV0pOworCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkID0gaXQtPnV0aWw7CisKKwkJc3dpdGNoIChkLT5zdGFnZW1hc2spIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWJvdGhfZGVsZXRlZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQljYXNlIDU6CisJCQlkZWxfbW9kX2NvbmZsaWN0ID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbm90X2RlbGV0ZWQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXMtPmhpbnRzKQorCQlyZXR1cm47CisJaWYgKHMtPndoZW5jZSAhPSBGUk9NX0NPTU1JVCkKKwkJOworCWVsc2UgaWYgKCFzLT5pc19pbml0aWFsKSB7CisJCWlmICghc3RyY21wKHMtPnJlZmVyZW5jZSwgIkhFQUQiKSkKKwkJCXN0YXR1c19wcmludGZfbG4ocywgYywKKwkJCQkJIF8oIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIikpOworCQllbHNlCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsCisJCQkJCSBfKCIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXNvdXJjZT0lcyAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIpLAorCQkJCQkgcy0+cmVmZXJlbmNlKTsKKwl9IGVsc2UKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiKSk7CisKKwlpZiAoIWJvdGhfZGVsZXRlZCkgeworCQlpZiAoIWRlbF9tb2RfY29uZmxpY3QpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIpKTsKKwkJZWxzZQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiKSk7CisJfSBlbHNlIGlmICghZGVsX21vZF9jb25mbGljdCAmJiAhbm90X2RlbGV0ZWQpIHsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgICh1c2UgXCJnaXQgcm0gPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIpKTsKKwl9IGVsc2UgeworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHd0X2xvbmdzdGF0dXNfcHJpbnRfY2FjaGVkX2hlYWRlcihzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWNvbnN0IGNoYXIgKmMgPSBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKTsKKworCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IikpOworCWlmICghcy0+aGludHMpCisJCXJldHVybjsKKwlpZiAocy0+d2hlbmNlICE9IEZST01fQ09NTUlUKQorCQk7IC8qIE5FRURTV09SSzogdXNlICJnaXQgcmVzZXQgLS11bnJlc29sdmUiPz8/ICovCisJZWxzZSBpZiAoIXMtPmlzX2luaXRpYWwpIHsKKwkJaWYgKCFzdHJjbXAocy0+cmVmZXJlbmNlLCAiSEVBRCIpKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjCisJCQkJCSAsIF8oIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIikpOworCQllbHNlCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsCisJCQkJCSBfKCIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXNvdXJjZT0lcyAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIpLAorCQkJCQkgcy0+cmVmZXJlbmNlKTsKKwl9IGVsc2UKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X2xvbmdzdGF0dXNfcHJpbnRfZGlydHlfaGVhZGVyKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJCSAgICAgaW50IGhhc19kZWxldGVkLAorCQkJCQkgICAgIGludCBoYXNfZGlydHlfc3VibW9kdWxlcykKK3sKKwljb25zdCBjaGFyICpjID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIpKTsKKwlpZiAoIXMtPmhpbnRzKQorCQlyZXR1cm47CisJaWYgKCFoYXNfZGVsZXRlZCkKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIpKTsKKwllbHNlCisJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiKSk7CisJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgICh1c2UgXCJnaXQgcmVzdG9yZSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIikpOworCWlmIChoYXNfZGlydHlfc3VibW9kdWxlcykKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X2xvbmdzdGF0dXNfcHJpbnRfb3RoZXJfaGVhZGVyKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJCSAgICAgY29uc3QgY2hhciAqd2hhdCwKKwkJCQkJICAgICBjb25zdCBjaGFyICpob3cpCit7CisJY29uc3QgY2hhciAqYyA9IGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpOworCXN0YXR1c19wcmludGZfbG4ocywgYywgIiVzOiIsIHdoYXQpOworCWlmICghcy0+aGludHMpCisJCXJldHVybjsKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIiksIGhvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X2xvbmdzdGF0dXNfcHJpbnRfdHJhaWxlcihzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIlcyIsICIiKTsKK30KKworI2RlZmluZSBxdW90ZV9wYXRoIHF1b3RlX3BhdGhfcmVsYXRpdmUKKworc3RhdGljIGNvbnN0IGNoYXIgKnd0X3N0YXR1c191bm1lcmdlZF9zdGF0dXNfc3RyaW5nKGludCBzdGFnZW1hc2spCit7CisJc3dpdGNoIChzdGFnZW1hc2spIHsKKwljYXNlIDE6CisJCXJldHVybiBfKCJib3RoIGRlbGV0ZWQ6Iik7CisJY2FzZSAyOgorCQlyZXR1cm4gXygiYWRkZWQgYnkgdXM6Iik7CisJY2FzZSAzOgorCQlyZXR1cm4gXygiZGVsZXRlZCBieSB0aGVtOiIpOworCWNhc2UgNDoKKwkJcmV0dXJuIF8oImFkZGVkIGJ5IHRoZW06Iik7CisJY2FzZSA1OgorCQlyZXR1cm4gXygiZGVsZXRlZCBieSB1czoiKTsKKwljYXNlIDY6CisJCXJldHVybiBfKCJib3RoIGFkZGVkOiIpOworCWNhc2UgNzoKKwkJcmV0dXJuIF8oImJvdGggbW9kaWZpZWQ6Iik7CisJZGVmYXVsdDoKKwkJQlVHKCJ1bmhhbmRsZWQgdW5tZXJnZWQgc3RhdHVzICV4Iiwgc3RhZ2VtYXNrKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp3dF9zdGF0dXNfZGlmZl9zdGF0dXNfc3RyaW5nKGludCBzdGF0dXMpCit7CisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIERJRkZfU1RBVFVTX0FEREVEOgorCQlyZXR1cm4gXygibmV3IGZpbGU6Iik7CisJY2FzZSBESUZGX1NUQVRVU19DT1BJRUQ6CisJCXJldHVybiBfKCJjb3BpZWQ6Iik7CisJY2FzZSBESUZGX1NUQVRVU19ERUxFVEVEOgorCQlyZXR1cm4gXygiZGVsZXRlZDoiKTsKKwljYXNlIERJRkZfU1RBVFVTX01PRElGSUVEOgorCQlyZXR1cm4gXygibW9kaWZpZWQ6Iik7CisJY2FzZSBESUZGX1NUQVRVU19SRU5BTUVEOgorCQlyZXR1cm4gXygicmVuYW1lZDoiKTsKKwljYXNlIERJRkZfU1RBVFVTX1RZUEVfQ0hBTkdFRDoKKwkJcmV0dXJuIF8oInR5cGVjaGFuZ2U6Iik7CisJY2FzZSBESUZGX1NUQVRVU19VTktOT1dOOgorCQlyZXR1cm4gXygidW5rbm93bjoiKTsKKwljYXNlIERJRkZfU1RBVFVTX1VOTUVSR0VEOgorCQlyZXR1cm4gXygidW5tZXJnZWQ6Iik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IG1heHdpZHRoKGNvbnN0IGNoYXIgKigqbGFiZWwpKGludCksIGludCBtaW52YWwsIGludCBtYXh2YWwpCit7CisJaW50IHJlc3VsdCA9IDAsIGk7CisKKwlmb3IgKGkgPSBtaW52YWw7IGkgPD0gbWF4dmFsOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcyA9IGxhYmVsKGkpOworCQlpbnQgbGVuID0gcyA/IHV0Zjhfc3Ryd2lkdGgocykgOiAwOworCQlpZiAobGVuID4gcmVzdWx0KQorCQkJcmVzdWx0ID0gbGVuOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCB3dF9sb25nc3RhdHVzX3ByaW50X3VubWVyZ2VkX2RhdGEoc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkJICAgICAgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0KQoreworCWNvbnN0IGNoYXIgKmMgPSBjb2xvcihXVF9TVEFUVVNfVU5NRVJHRUQsIHMpOworCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQgPSBpdC0+dXRpbDsKKwlzdHJ1Y3Qgc3RyYnVmIG9uZWJ1ZiA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBjaGFyICpwYWRkaW5nOworCXN0YXRpYyBpbnQgbGFiZWxfd2lkdGg7CisJY29uc3QgY2hhciAqb25lLCAqaG93OworCWludCBsZW47CisKKwlpZiAoIXBhZGRpbmcpIHsKKwkJbGFiZWxfd2lkdGggPSBtYXh3aWR0aCh3dF9zdGF0dXNfdW5tZXJnZWRfc3RhdHVzX3N0cmluZywgMSwgNyk7CisJCWxhYmVsX3dpZHRoICs9IHN0cmxlbigiICIpOworCQlwYWRkaW5nID0geG1hbGxvY3oobGFiZWxfd2lkdGgpOworCQltZW1zZXQocGFkZGluZywgJyAnLCBsYWJlbF93aWR0aCk7CisJfQorCisJb25lID0gcXVvdGVfcGF0aChpdC0+c3RyaW5nLCBzLT5wcmVmaXgsICZvbmVidWYpOworCXN0YXR1c19wcmludGYocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICJcdCIpOworCisJaG93ID0gd3Rfc3RhdHVzX3VubWVyZ2VkX3N0YXR1c19zdHJpbmcoZC0+c3RhZ2VtYXNrKTsKKwlsZW4gPSBsYWJlbF93aWR0aCAtIHV0Zjhfc3Ryd2lkdGgoaG93KTsKKwlzdGF0dXNfcHJpbnRmX21vcmUocywgYywgIiVzJS4qcyVzXG4iLCBob3csIGxlbiwgcGFkZGluZywgb25lKTsKKwlzdHJidWZfcmVsZWFzZSgmb25lYnVmKTsKK30KKworc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF9jaGFuZ2VfZGF0YShzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCQkgICAgaW50IGNoYW5nZV90eXBlLAorCQkJCQkgICAgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0KQoreworCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQgPSBpdC0+dXRpbDsKKwljb25zdCBjaGFyICpjID0gY29sb3IoY2hhbmdlX3R5cGUsIHMpOworCWludCBzdGF0dXM7CisJY2hhciAqb25lX25hbWU7CisJY2hhciAqdHdvX25hbWU7CisJY29uc3QgY2hhciAqb25lLCAqdHdvOworCXN0cnVjdCBzdHJidWYgb25lYnVmID0gU1RSQlVGX0lOSVQsIHR3b2J1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgZXh0cmEgPSBTVFJCVUZfSU5JVDsKKwlzdGF0aWMgY2hhciAqcGFkZGluZzsKKwlzdGF0aWMgaW50IGxhYmVsX3dpZHRoOworCWNvbnN0IGNoYXIgKndoYXQ7CisJaW50IGxlbjsKKworCWlmICghcGFkZGluZykgeworCQkvKiBJZiBESUZGX1NUQVRVU18qIHVzZXMgb3V0c2lkZSB0aGUgcmFuZ2UgW0EuLlpdLCB3ZSdyZSBpbiB0cm91YmxlICovCisJCWxhYmVsX3dpZHRoID0gbWF4d2lkdGgod3Rfc3RhdHVzX2RpZmZfc3RhdHVzX3N0cmluZywgJ0EnLCAnWicpOworCQlsYWJlbF93aWR0aCArPSBzdHJsZW4oIiAiKTsKKwkJcGFkZGluZyA9IHhtYWxsb2N6KGxhYmVsX3dpZHRoKTsKKwkJbWVtc2V0KHBhZGRpbmcsICcgJywgbGFiZWxfd2lkdGgpOworCX0KKworCW9uZV9uYW1lID0gdHdvX25hbWUgPSBpdC0+c3RyaW5nOworCXN3aXRjaCAoY2hhbmdlX3R5cGUpIHsKKwljYXNlIFdUX1NUQVRVU19VUERBVEVEOgorCQlzdGF0dXMgPSBkLT5pbmRleF9zdGF0dXM7CisJCWJyZWFrOworCWNhc2UgV1RfU1RBVFVTX0NIQU5HRUQ6CisJCWlmIChkLT5uZXdfc3VibW9kdWxlX2NvbW1pdHMgfHwgZC0+ZGlydHlfc3VibW9kdWxlKSB7CisJCQlzdHJidWZfYWRkc3RyKCZleHRyYSwgIiAoIik7CisJCQlpZiAoZC0+bmV3X3N1Ym1vZHVsZV9jb21taXRzKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJmV4dHJhLCBfKCJuZXcgY29tbWl0cywgIikpOworCQkJaWYgKGQtPmRpcnR5X3N1Ym1vZHVsZSAmIERJUlRZX1NVQk1PRFVMRV9NT0RJRklFRCkKKwkJCQlzdHJidWZfYWRkc3RyKCZleHRyYSwgXygibW9kaWZpZWQgY29udGVudCwgIikpOworCQkJaWYgKGQtPmRpcnR5X3N1Ym1vZHVsZSAmIERJUlRZX1NVQk1PRFVMRV9VTlRSQUNLRUQpCisJCQkJc3RyYnVmX2FkZHN0cigmZXh0cmEsIF8oInVudHJhY2tlZCBjb250ZW50LCAiKSk7CisJCQlzdHJidWZfc2V0bGVuKCZleHRyYSwgZXh0cmEubGVuIC0gMik7CisJCQlzdHJidWZfYWRkY2goJmV4dHJhLCAnKScpOworCQl9CisJCXN0YXR1cyA9IGQtPndvcmt0cmVlX3N0YXR1czsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCJ1bmhhbmRsZWQgY2hhbmdlX3R5cGUgJWQgaW4gd3RfbG9uZ3N0YXR1c19wcmludF9jaGFuZ2VfZGF0YSIsCisJCSAgICBjaGFuZ2VfdHlwZSk7CisJfQorCisJLyoKKwkgKiBPbmx5IHBpY2sgdXAgdGhlIHJlbmFtZSBpdCdzIHJlbGV2YW50LiBJZiB0aGUgcmVuYW1lIGlzIGZvcgorCSAqIHRoZSBjaGFuZ2VkIHNlY3Rpb24gYW5kIHdlJ3JlIHByaW50aW5nIHRoZSB1cGRhdGVkIHNlY3Rpb24sCisJICogaWdub3JlIGl0LgorCSAqLworCWlmIChkLT5yZW5hbWVfc3RhdHVzID09IHN0YXR1cykKKwkJb25lX25hbWUgPSBkLT5yZW5hbWVfc291cmNlOworCisJb25lID0gcXVvdGVfcGF0aChvbmVfbmFtZSwgcy0+cHJlZml4LCAmb25lYnVmKTsKKwl0d28gPSBxdW90ZV9wYXRoKHR3b19uYW1lLCBzLT5wcmVmaXgsICZ0d29idWYpOworCisJc3RhdHVzX3ByaW50ZihzLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwgIlx0Iik7CisJd2hhdCA9IHd0X3N0YXR1c19kaWZmX3N0YXR1c19zdHJpbmcoc3RhdHVzKTsKKwlpZiAoIXdoYXQpCisJCUJVRygidW5oYW5kbGVkIGRpZmYgc3RhdHVzICVjIiwgc3RhdHVzKTsKKwlsZW4gPSBsYWJlbF93aWR0aCAtIHV0Zjhfc3Ryd2lkdGgod2hhdCk7CisJYXNzZXJ0KGxlbiA+PSAwKTsKKwlpZiAob25lX25hbWUgIT0gdHdvX25hbWUpCisJCXN0YXR1c19wcmludGZfbW9yZShzLCBjLCAiJXMlLipzJXMgLT4gJXMiLAorCQkJCSAgIHdoYXQsIGxlbiwgcGFkZGluZywgb25lLCB0d28pOworCWVsc2UKKwkJc3RhdHVzX3ByaW50Zl9tb3JlKHMsIGMsICIlcyUuKnMlcyIsCisJCQkJICAgd2hhdCwgbGVuLCBwYWRkaW5nLCBvbmUpOworCWlmIChleHRyYS5sZW4pIHsKKwkJc3RhdHVzX3ByaW50Zl9tb3JlKHMsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiJXMiLCBleHRyYS5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmZXh0cmEpOworCX0KKwlzdGF0dXNfcHJpbnRmX21vcmUocywgR0lUX0NPTE9SX05PUk1BTCwgIlxuIik7CisJc3RyYnVmX3JlbGVhc2UoJm9uZWJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnR3b2J1Zik7Cit9CisKK3N0YXRpYyBjaGFyIHNob3J0X3N1Ym1vZHVsZV9zdGF0dXMoc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZCkKK3sKKwlpZiAoZC0+bmV3X3N1Ym1vZHVsZV9jb21taXRzKQorCQlyZXR1cm4gJ00nOworCWlmIChkLT5kaXJ0eV9zdWJtb2R1bGUgJiBESVJUWV9TVUJNT0RVTEVfTU9ESUZJRUQpCisJCXJldHVybiAnbSc7CisJaWYgKGQtPmRpcnR5X3N1Ym1vZHVsZSAmIERJUlRZX1NVQk1PRFVMRV9VTlRSQUNLRUQpCisJCXJldHVybiAnPyc7CisJcmV0dXJuIGQtPndvcmt0cmVlX3N0YXR1czsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlZF9jYihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkJCSBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkJCQkgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzICpzID0gZGF0YTsKKwlpbnQgaTsKKworCWlmICghcS0+bnIpCisJCXJldHVybjsKKwlzLT53b3JrZGlyX2RpcnR5ID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcDsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkOworCisJCXAgPSBxLT5xdWV1ZVtpXTsKKwkJaXQgPSBzdHJpbmdfbGlzdF9pbnNlcnQoJnMtPmNoYW5nZSwgcC0+dHdvLT5wYXRoKTsKKwkJZCA9IGl0LT51dGlsOworCQlpZiAoIWQpIHsKKwkJCWQgPSB4Y2FsbG9jKDEsIHNpemVvZigqZCkpOworCQkJaXQtPnV0aWwgPSBkOworCQl9CisJCWlmICghZC0+d29ya3RyZWVfc3RhdHVzKQorCQkJZC0+d29ya3RyZWVfc3RhdHVzID0gcC0+c3RhdHVzOworCQlpZiAoU19JU0dJVExJTksocC0+dHdvLT5tb2RlKSkgeworCQkJZC0+ZGlydHlfc3VibW9kdWxlID0gcC0+dHdvLT5kaXJ0eV9zdWJtb2R1bGU7CisJCQlkLT5uZXdfc3VibW9kdWxlX2NvbW1pdHMgPSAhb2lkZXEoJnAtPm9uZS0+b2lkLAorCQkJCQkJCSAgJnAtPnR3by0+b2lkKTsKKwkJCWlmIChzLT5zdGF0dXNfZm9ybWF0ID09IFNUQVRVU19GT1JNQVRfU0hPUlQpCisJCQkJZC0+d29ya3RyZWVfc3RhdHVzID0gc2hvcnRfc3VibW9kdWxlX3N0YXR1cyhkKTsKKwkJfQorCisJCXN3aXRjaCAocC0+c3RhdHVzKSB7CisJCWNhc2UgRElGRl9TVEFUVVNfQURERUQ6CisJCQlkLT5tb2RlX3dvcmt0cmVlID0gcC0+dHdvLT5tb2RlOworCQkJYnJlYWs7CisKKwkJY2FzZSBESUZGX1NUQVRVU19ERUxFVEVEOgorCQkJZC0+bW9kZV9pbmRleCA9IHAtPm9uZS0+bW9kZTsKKwkJCW9pZGNweSgmZC0+b2lkX2luZGV4LCAmcC0+b25lLT5vaWQpOworCQkJLyogbW9kZV93b3JrdHJlZSBpcyB6ZXJvIGZvciBhIGRlbGV0ZS4gKi8KKwkJCWJyZWFrOworCisJCWNhc2UgRElGRl9TVEFUVVNfQ09QSUVEOgorCQljYXNlIERJRkZfU1RBVFVTX1JFTkFNRUQ6CisJCQlpZiAoZC0+cmVuYW1lX3N0YXR1cykKKwkJCQlCVUcoIm11bHRpcGxlIHJlbmFtZXMgb24gdGhlIHNhbWUgdGFyZ2V0PyBob3c/Iik7CisJCQlkLT5yZW5hbWVfc291cmNlID0geHN0cmR1cChwLT5vbmUtPnBhdGgpOworCQkJZC0+cmVuYW1lX3Njb3JlID0gcC0+c2NvcmUgKiAxMDAgLyBNQVhfU0NPUkU7CisJCQlkLT5yZW5hbWVfc3RhdHVzID0gcC0+c3RhdHVzOworCQkJLyogZmFsbHRocnUgKi8KKwkJY2FzZSBESUZGX1NUQVRVU19NT0RJRklFRDoKKwkJY2FzZSBESUZGX1NUQVRVU19UWVBFX0NIQU5HRUQ6CisJCWNhc2UgRElGRl9TVEFUVVNfVU5NRVJHRUQ6CisJCQlkLT5tb2RlX2luZGV4ID0gcC0+b25lLT5tb2RlOworCQkJZC0+bW9kZV93b3JrdHJlZSA9IHAtPnR3by0+bW9kZTsKKwkJCW9pZGNweSgmZC0+b2lkX2luZGV4LCAmcC0+b25lLT5vaWQpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUJVRygidW5oYW5kbGVkIGRpZmYtZmlsZXMgc3RhdHVzICclYyciLCBwLT5zdGF0dXMpOworCQkJYnJlYWs7CisJCX0KKworCX0KK30KKworc3RhdGljIGludCB1bm1lcmdlZF9tYXNrKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoKQoreworCWludCBwb3MsIG1hc2s7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCXBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgcGF0aCwgc3RybGVuKHBhdGgpKTsKKwlpZiAoMCA8PSBwb3MpCisJCXJldHVybiAwOworCisJbWFzayA9IDA7CisJcG9zID0gLXBvcy0xOworCXdoaWxlIChwb3MgPCBpc3RhdGUtPmNhY2hlX25yKSB7CisJCWNlID0gaXN0YXRlLT5jYWNoZVtwb3MrK107CisJCWlmIChzdHJjbXAoY2UtPm5hbWUsIHBhdGgpIHx8ICFjZV9zdGFnZShjZSkpCisJCQlicmVhazsKKwkJbWFzayB8PSAoMSA8PCAoY2Vfc3RhZ2UoY2UpIC0gMSkpOworCX0KKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfdXBkYXRlZF9jYihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkJCSBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkJCQkgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzICpzID0gZGF0YTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisKKwkJcCA9IHEtPnF1ZXVlW2ldOworCQlpdCA9IHN0cmluZ19saXN0X2luc2VydCgmcy0+Y2hhbmdlLCBwLT50d28tPnBhdGgpOworCQlkID0gaXQtPnV0aWw7CisJCWlmICghZCkgeworCQkJZCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkKSk7CisJCQlpdC0+dXRpbCA9IGQ7CisJCX0KKwkJaWYgKCFkLT5pbmRleF9zdGF0dXMpCisJCQlkLT5pbmRleF9zdGF0dXMgPSBwLT5zdGF0dXM7CisJCXN3aXRjaCAocC0+c3RhdHVzKSB7CisJCWNhc2UgRElGRl9TVEFUVVNfQURERUQ6CisJCQkvKiBMZWF2ZSB7bW9kZSxvaWR9X2hlYWQgemVybyBmb3IgYW4gYWRkLiAqLworCQkJZC0+bW9kZV9pbmRleCA9IHAtPnR3by0+bW9kZTsKKwkJCW9pZGNweSgmZC0+b2lkX2luZGV4LCAmcC0+dHdvLT5vaWQpOworCQkJcy0+Y29tbWl0dGFibGUgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgRElGRl9TVEFUVVNfREVMRVRFRDoKKwkJCWQtPm1vZGVfaGVhZCA9IHAtPm9uZS0+bW9kZTsKKwkJCW9pZGNweSgmZC0+b2lkX2hlYWQsICZwLT5vbmUtPm9pZCk7CisJCQlzLT5jb21taXR0YWJsZSA9IDE7CisJCQkvKiBMZWF2ZSB7bW9kZSxvaWR9X2luZGV4IHplcm8gZm9yIGEgZGVsZXRlLiAqLworCQkJYnJlYWs7CisKKwkJY2FzZSBESUZGX1NUQVRVU19DT1BJRUQ6CisJCWNhc2UgRElGRl9TVEFUVVNfUkVOQU1FRDoKKwkJCWlmIChkLT5yZW5hbWVfc3RhdHVzKQorCQkJCUJVRygibXVsdGlwbGUgcmVuYW1lcyBvbiB0aGUgc2FtZSB0YXJnZXQ/IGhvdz8iKTsKKwkJCWQtPnJlbmFtZV9zb3VyY2UgPSB4c3RyZHVwKHAtPm9uZS0+cGF0aCk7CisJCQlkLT5yZW5hbWVfc2NvcmUgPSBwLT5zY29yZSAqIDEwMCAvIE1BWF9TQ09SRTsKKwkJCWQtPnJlbmFtZV9zdGF0dXMgPSBwLT5zdGF0dXM7CisJCQkvKiBmYWxsdGhydSAqLworCQljYXNlIERJRkZfU1RBVFVTX01PRElGSUVEOgorCQljYXNlIERJRkZfU1RBVFVTX1RZUEVfQ0hBTkdFRDoKKwkJCWQtPm1vZGVfaGVhZCA9IHAtPm9uZS0+bW9kZTsKKwkJCWQtPm1vZGVfaW5kZXggPSBwLT50d28tPm1vZGU7CisJCQlvaWRjcHkoJmQtPm9pZF9oZWFkLCAmcC0+b25lLT5vaWQpOworCQkJb2lkY3B5KCZkLT5vaWRfaW5kZXgsICZwLT50d28tPm9pZCk7CisJCQlzLT5jb21taXR0YWJsZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBESUZGX1NUQVRVU19VTk1FUkdFRDoKKwkJCWQtPnN0YWdlbWFzayA9IHVubWVyZ2VkX21hc2socy0+cmVwby0+aW5kZXgsCisJCQkJCQkgICAgIHAtPnR3by0+cGF0aCk7CisJCQkvKgorCQkJICogRG9uJ3QgYm90aGVyIHNldHRpbmcge21vZGUsb2lkfV97aGVhZCxpbmRleH0gc2luY2UgdGhlIHByaW50CisJCQkgKiBjb2RlIHdpbGwgb3V0cHV0IHRoZSBzdGFnZSB2YWx1ZXMgZGlyZWN0bHkgYW5kIG5vdCB1c2UgdGhlCisJCQkgKiB2YWx1ZXMgaW4gdGhlc2UgZmllbGRzLgorCQkJICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQlVHKCJ1bmhhbmRsZWQgZGlmZi1pbmRleCBzdGF0dXMgJyVjJyIsIHAtPnN0YXR1cyk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlc193b3JrdHJlZShzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHMtPnJlcG8sICZyZXYsIE5VTEwpOworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCBOVUxMKTsKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX0NBTExCQUNLOworCXJldi5kaWZmb3B0LmZsYWdzLmRpcnR5X3N1Ym1vZHVsZXMgPSAxOworCXJldi5kaWZmb3B0Lml0YV9pbnZpc2libGVfaW5faW5kZXggPSAxOworCWlmICghcy0+c2hvd191bnRyYWNrZWRfZmlsZXMpCisJCXJldi5kaWZmb3B0LmZsYWdzLmlnbm9yZV91bnRyYWNrZWRfaW5fc3VibW9kdWxlcyA9IDE7CisJaWYgKHMtPmlnbm9yZV9zdWJtb2R1bGVfYXJnKSB7CisJCXJldi5kaWZmb3B0LmZsYWdzLm92ZXJyaWRlX3N1Ym1vZHVsZV9jb25maWcgPSAxOworCQloYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKCZyZXYuZGlmZm9wdCwgcy0+aWdub3JlX3N1Ym1vZHVsZV9hcmcpOworCX0KKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSB3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VkX2NiOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gczsKKwlyZXYuZGlmZm9wdC5kZXRlY3RfcmVuYW1lID0gcy0+ZGV0ZWN0X3JlbmFtZSA+PSAwID8gcy0+ZGV0ZWN0X3JlbmFtZSA6IHJldi5kaWZmb3B0LmRldGVjdF9yZW5hbWU7CisJcmV2LmRpZmZvcHQucmVuYW1lX2xpbWl0ID0gcy0+cmVuYW1lX2xpbWl0ID49IDAgPyBzLT5yZW5hbWVfbGltaXQgOiByZXYuZGlmZm9wdC5yZW5hbWVfbGltaXQ7CisJcmV2LmRpZmZvcHQucmVuYW1lX3Njb3JlID0gcy0+cmVuYW1lX3Njb3JlID49IDAgPyBzLT5yZW5hbWVfc2NvcmUgOiByZXYuZGlmZm9wdC5yZW5hbWVfc2NvcmU7CisJY29weV9wYXRoc3BlYygmcmV2LnBydW5lX2RhdGEsICZzLT5wYXRoc3BlYyk7CisJcnVuX2RpZmZfZmlsZXMoJnJldiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19jb2xsZWN0X2NoYW5nZXNfaW5kZXgoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgb3B0OworCisJcmVwb19pbml0X3JldmlzaW9ucyhzLT5yZXBvLCAmcmV2LCBOVUxMKTsKKwltZW1zZXQoJm9wdCwgMCwgc2l6ZW9mKG9wdCkpOworCW9wdC5kZWYgPSBzLT5pc19pbml0aWFsID8gZW1wdHlfdHJlZV9vaWRfaGV4KCkgOiBzLT5yZWZlcmVuY2U7CisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXYsICZvcHQpOworCisJcmV2LmRpZmZvcHQuZmxhZ3Mub3ZlcnJpZGVfc3VibW9kdWxlX2NvbmZpZyA9IDE7CisJcmV2LmRpZmZvcHQuaXRhX2ludmlzaWJsZV9pbl9pbmRleCA9IDE7CisJaWYgKHMtPmlnbm9yZV9zdWJtb2R1bGVfYXJnKSB7CisJCWhhbmRsZV9pZ25vcmVfc3VibW9kdWxlc19hcmcoJnJldi5kaWZmb3B0LCBzLT5pZ25vcmVfc3VibW9kdWxlX2FyZyk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVW5sZXNzIHRoZSB1c2VyIGRpZCBleHBsaWNpdGx5IHJlcXVlc3QgYSBzdWJtb2R1bGUgaWdub3JlCisJCSAqIG1vZGUgYnkgcGFzc2luZyBhIGNvbW1hbmQgbGluZSBvcHRpb24gd2UgZG8gbm90IGlnbm9yZSBhbnkKKwkJICogY2hhbmdlZCBzdWJtb2R1bGUgU0hBLTFzIHdoZW4gY29tcGFyaW5nIGluZGV4IGFuZCBIRUFELCBubworCQkgKiBtYXR0ZXIgd2hhdCBpcyBjb25maWd1cmVkLiBPdGhlcndpc2UgdGhlIHVzZXIgd29uJ3QgYmUKKwkJICogc2hvd24gYW55IHN1Ym1vZHVsZXMgc2hlIG1hbnVhbGx5IGFkZGVkIChhbmQgd2hpY2ggYXJlCisJCSAqIHN0YWdlZCB0byBiZSBjb21taXR0ZWQpLCB3aGljaCB3b3VsZCBiZSByZWFsbHkgY29uZnVzaW5nLgorCQkgKi8KKwkJaGFuZGxlX2lnbm9yZV9zdWJtb2R1bGVzX2FyZygmcmV2LmRpZmZvcHQsICJkaXJ0eSIpOworCX0KKworCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gd3Rfc3RhdHVzX2NvbGxlY3RfdXBkYXRlZF9jYjsKKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2tfZGF0YSA9IHM7CisJcmV2LmRpZmZvcHQuZGV0ZWN0X3JlbmFtZSA9IHMtPmRldGVjdF9yZW5hbWUgPj0gMCA/IHMtPmRldGVjdF9yZW5hbWUgOiByZXYuZGlmZm9wdC5kZXRlY3RfcmVuYW1lOworCXJldi5kaWZmb3B0LnJlbmFtZV9saW1pdCA9IHMtPnJlbmFtZV9saW1pdCA+PSAwID8gcy0+cmVuYW1lX2xpbWl0IDogcmV2LmRpZmZvcHQucmVuYW1lX2xpbWl0OworCXJldi5kaWZmb3B0LnJlbmFtZV9zY29yZSA9IHMtPnJlbmFtZV9zY29yZSA+PSAwID8gcy0+cmVuYW1lX3Njb3JlIDogcmV2LmRpZmZvcHQucmVuYW1lX3Njb3JlOworCWNvcHlfcGF0aHNwZWMoJnJldi5wcnVuZV9kYXRhLCAmcy0+cGF0aHNwZWMpOworCXJ1bl9kaWZmX2luZGV4KCZyZXYsIDEpOworfQorCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VzX2luaXRpYWwoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSA9IHMtPnJlcG8tPmluZGV4OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCisJCWlmICghY2VfcGF0aF9tYXRjaChpc3RhdGUsIGNlLCAmcy0+cGF0aHNwZWMsIE5VTEwpKQorCQkJY29udGludWU7CisJCWlmIChjZV9pbnRlbnRfdG9fYWRkKGNlKSkKKwkJCWNvbnRpbnVlOworCQlpdCA9IHN0cmluZ19saXN0X2luc2VydCgmcy0+Y2hhbmdlLCBjZS0+bmFtZSk7CisJCWQgPSBpdC0+dXRpbDsKKwkJaWYgKCFkKSB7CisJCQlkID0geGNhbGxvYygxLCBzaXplb2YoKmQpKTsKKwkJCWl0LT51dGlsID0gZDsKKwkJfQorCQlpZiAoY2Vfc3RhZ2UoY2UpKSB7CisJCQlkLT5pbmRleF9zdGF0dXMgPSBESUZGX1NUQVRVU19VTk1FUkdFRDsKKwkJCWQtPnN0YWdlbWFzayB8PSAoMSA8PCAoY2Vfc3RhZ2UoY2UpIC0gMSkpOworCQkJLyoKKwkJCSAqIERvbid0IGJvdGhlciBzZXR0aW5nIHttb2RlLG9pZH1fe2hlYWQsaW5kZXh9IHNpbmNlIHRoZSBwcmludAorCQkJICogY29kZSB3aWxsIG91dHB1dCB0aGUgc3RhZ2UgdmFsdWVzIGRpcmVjdGx5IGFuZCBub3QgdXNlIHRoZQorCQkJICogdmFsdWVzIGluIHRoZXNlIGZpZWxkcy4KKwkJCSAqLworCQkJcy0+Y29tbWl0dGFibGUgPSAxOworCQl9IGVsc2UgeworCQkJZC0+aW5kZXhfc3RhdHVzID0gRElGRl9TVEFUVVNfQURERUQ7CisJCQkvKiBMZWF2ZSB7bW9kZSxvaWR9X2hlYWQgemVybyBmb3IgYWRkcy4gKi8KKwkJCWQtPm1vZGVfaW5kZXggPSBjZS0+Y2VfbW9kZTsKKwkJCW9pZGNweSgmZC0+b2lkX2luZGV4LCAmY2UtPm9pZCk7CisJCQlzLT5jb21taXR0YWJsZSA9IDE7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19jb2xsZWN0X3VudHJhY2tlZChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWludCBpOworCXN0cnVjdCBkaXJfc3RydWN0IGRpcjsKKwl1aW50NjRfdCB0X2JlZ2luID0gZ2V0bmFub3RpbWUoKTsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSA9IHMtPnJlcG8tPmluZGV4OworCisJaWYgKCFzLT5zaG93X3VudHJhY2tlZF9maWxlcykKKwkJcmV0dXJuOworCisJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKKwlpZiAocy0+c2hvd191bnRyYWNrZWRfZmlsZXMgIT0gU0hPV19BTExfVU5UUkFDS0VEX0ZJTEVTKQorCQlkaXIuZmxhZ3MgfD0KKwkJCURJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTIHwgRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVM7CisJaWYgKHMtPnNob3dfaWdub3JlZF9tb2RlKSB7CisJCWRpci5mbGFncyB8PSBESVJfU0hPV19JR05PUkVEX1RPTzsKKworCQlpZiAocy0+c2hvd19pZ25vcmVkX21vZGUgPT0gU0hPV19NQVRDSElOR19JR05PUkVEKQorCQkJZGlyLmZsYWdzIHw9IERJUl9TSE9XX0lHTk9SRURfVE9PX01PREVfTUFUQ0hJTkc7CisJfSBlbHNlIHsKKwkJZGlyLnVudHJhY2tlZCA9IGlzdGF0ZS0+dW50cmFja2VkOworCX0KKworCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKCZkaXIpOworCisJZmlsbF9kaXJlY3RvcnkoJmRpciwgaXN0YXRlLCAmcy0+cGF0aHNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGRpci5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaXJfZW50cnkgKmVudCA9IGRpci5lbnRyaWVzW2ldOworCQlpZiAoaW5kZXhfbmFtZV9pc19vdGhlcihpc3RhdGUsIGVudC0+bmFtZSwgZW50LT5sZW4pKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZzLT51bnRyYWNrZWQsIGVudC0+bmFtZSk7CisJCWZyZWUoZW50KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLmlnbm9yZWRfbnI7IGkrKykgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXIuaWdub3JlZFtpXTsKKwkJaWYgKGluZGV4X25hbWVfaXNfb3RoZXIoaXN0YXRlLCBlbnQtPm5hbWUsIGVudC0+bGVuKSkKKwkJCXN0cmluZ19saXN0X2luc2VydCgmcy0+aWdub3JlZCwgZW50LT5uYW1lKTsKKwkJZnJlZShlbnQpOworCX0KKworCWZyZWUoZGlyLmVudHJpZXMpOworCWZyZWUoZGlyLmlnbm9yZWQpOworCWNsZWFyX2RpcmVjdG9yeSgmZGlyKTsKKworCWlmIChhZHZpY2Vfc3RhdHVzX3Vfb3B0aW9uKQorCQlzLT51bnRyYWNrZWRfaW5fbXMgPSAoZ2V0bmFub3RpbWUoKSAtIHRfYmVnaW4pIC8gMTAwMDAwMDsKK30KKworc3RhdGljIGludCBoYXNfdW5tZXJnZWQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzLT5jaGFuZ2UubnI7IGkrKykgeworCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkOworCQlkID0gcy0+Y2hhbmdlLml0ZW1zW2ldLnV0aWw7CisJCWlmIChkLT5zdGFnZW1hc2spCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd3Rfc3RhdHVzX2NvbGxlY3Qoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJzdGF0dXMiLCAid29ya3RyZWVzIiwgcy0+cmVwbyk7CisJd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlc193b3JrdHJlZShzKTsKKwl0cmFjZTJfcmVnaW9uX2xlYXZlKCJzdGF0dXMiLCAid29ya3RyZWVzIiwgcy0+cmVwbyk7CisKKwlpZiAocy0+aXNfaW5pdGlhbCkgeworCQl0cmFjZTJfcmVnaW9uX2VudGVyKCJzdGF0dXMiLCAiaW5pdGlhbCIsIHMtPnJlcG8pOworCQl3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VzX2luaXRpYWwocyk7CisJCXRyYWNlMl9yZWdpb25fbGVhdmUoInN0YXR1cyIsICJpbml0aWFsIiwgcy0+cmVwbyk7CisJfSBlbHNlIHsKKwkJdHJhY2UyX3JlZ2lvbl9lbnRlcigic3RhdHVzIiwgImluZGV4Iiwgcy0+cmVwbyk7CisJCXd0X3N0YXR1c19jb2xsZWN0X2NoYW5nZXNfaW5kZXgocyk7CisJCXRyYWNlMl9yZWdpb25fbGVhdmUoInN0YXR1cyIsICJpbmRleCIsIHMtPnJlcG8pOworCX0KKworCXRyYWNlMl9yZWdpb25fZW50ZXIoInN0YXR1cyIsICJ1bnRyYWNrZWQiLCBzLT5yZXBvKTsKKwl3dF9zdGF0dXNfY29sbGVjdF91bnRyYWNrZWQocyk7CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgic3RhdHVzIiwgInVudHJhY2tlZCIsIHMtPnJlcG8pOworCisJd3Rfc3RhdHVzX2dldF9zdGF0ZShzLT5yZXBvLCAmcy0+c3RhdGUsIHMtPmJyYW5jaCAmJiAhc3RyY21wKHMtPmJyYW5jaCwgIkhFQUQiKSk7CisJaWYgKHMtPnN0YXRlLm1lcmdlX2luX3Byb2dyZXNzICYmICFoYXNfdW5tZXJnZWQocykpCisJCXMtPmNvbW1pdHRhYmxlID0gMTsKK30KKwordm9pZCB3dF9zdGF0dXNfY29sbGVjdF9mcmVlX2J1ZmZlcnMoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlmcmVlKHMtPnN0YXRlLmJyYW5jaCk7CisJZnJlZShzLT5zdGF0ZS5vbnRvKTsKKwlmcmVlKHMtPnN0YXRlLmRldGFjaGVkX2Zyb20pOworfQorCitzdGF0aWMgdm9pZCB3dF9sb25nc3RhdHVzX3ByaW50X3VubWVyZ2VkKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IHNob3duX2hlYWRlciA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+Y2hhbmdlLm5yOyBpKyspIHsKKwkJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZDsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCQlpdCA9ICYocy0+Y2hhbmdlLml0ZW1zW2ldKTsKKwkJZCA9IGl0LT51dGlsOworCQlpZiAoIWQtPnN0YWdlbWFzaykKKwkJCWNvbnRpbnVlOworCQlpZiAoIXNob3duX2hlYWRlcikgeworCQkJd3RfbG9uZ3N0YXR1c19wcmludF91bm1lcmdlZF9oZWFkZXIocyk7CisJCQlzaG93bl9oZWFkZXIgPSAxOworCQl9CisJCXd0X2xvbmdzdGF0dXNfcHJpbnRfdW5tZXJnZWRfZGF0YShzLCBpdCk7CisJfQorCWlmIChzaG93bl9oZWFkZXIpCisJCXd0X2xvbmdzdGF0dXNfcHJpbnRfdHJhaWxlcihzKTsKKworfQorCitzdGF0aWMgdm9pZCB3dF9sb25nc3RhdHVzX3ByaW50X3VwZGF0ZWQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgc2hvd25faGVhZGVyID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzLT5jaGFuZ2UubnI7IGkrKykgeworCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCWl0ID0gJihzLT5jaGFuZ2UuaXRlbXNbaV0pOworCQlkID0gaXQtPnV0aWw7CisJCWlmICghZC0+aW5kZXhfc3RhdHVzIHx8CisJCSAgICBkLT5pbmRleF9zdGF0dXMgPT0gRElGRl9TVEFUVVNfVU5NRVJHRUQpCisJCQljb250aW51ZTsKKwkJaWYgKCFzaG93bl9oZWFkZXIpIHsKKwkJCXd0X2xvbmdzdGF0dXNfcHJpbnRfY2FjaGVkX2hlYWRlcihzKTsKKwkJCXNob3duX2hlYWRlciA9IDE7CisJCX0KKwkJd3RfbG9uZ3N0YXR1c19wcmludF9jaGFuZ2VfZGF0YShzLCBXVF9TVEFUVVNfVVBEQVRFRCwgaXQpOworCX0KKwlpZiAoc2hvd25faGVhZGVyKQorCQl3dF9sb25nc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7Cit9CisKKy8qCisgKiAtMSA6IGhhcyBkZWxldGUKKyAqICAwIDogbm8gY2hhbmdlCisgKiAgMSA6IHNvbWUgY2hhbmdlIGJ1dCBubyBkZWxldGUKKyAqLworc3RhdGljIGludCB3dF9zdGF0dXNfY2hlY2tfd29ya3RyZWVfY2hhbmdlcyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCQkgICAgIGludCAqZGlydHlfc3VibW9kdWxlcykKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbmdlcyA9IDA7CisKKwkqZGlydHlfc3VibW9kdWxlcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+Y2hhbmdlLm5yOyBpKyspIHsKKwkJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZDsKKwkJZCA9IHMtPmNoYW5nZS5pdGVtc1tpXS51dGlsOworCQlpZiAoIWQtPndvcmt0cmVlX3N0YXR1cyB8fAorCQkgICAgZC0+d29ya3RyZWVfc3RhdHVzID09IERJRkZfU1RBVFVTX1VOTUVSR0VEKQorCQkJY29udGludWU7CisJCWlmICghY2hhbmdlcykKKwkJCWNoYW5nZXMgPSAxOworCQlpZiAoZC0+ZGlydHlfc3VibW9kdWxlKQorCQkJKmRpcnR5X3N1Ym1vZHVsZXMgPSAxOworCQlpZiAoZC0+d29ya3RyZWVfc3RhdHVzID09IERJRkZfU1RBVFVTX0RFTEVURUQpCisJCQljaGFuZ2VzID0gLTE7CisJfQorCXJldHVybiBjaGFuZ2VzOworfQorCitzdGF0aWMgdm9pZCB3dF9sb25nc3RhdHVzX3ByaW50X2NoYW5nZWQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgaSwgZGlydHlfc3VibW9kdWxlczsKKwlpbnQgd29ya3RyZWVfY2hhbmdlcyA9IHd0X3N0YXR1c19jaGVja193b3JrdHJlZV9jaGFuZ2VzKHMsICZkaXJ0eV9zdWJtb2R1bGVzKTsKKworCWlmICghd29ya3RyZWVfY2hhbmdlcykKKwkJcmV0dXJuOworCisJd3RfbG9uZ3N0YXR1c19wcmludF9kaXJ0eV9oZWFkZXIocywgd29ya3RyZWVfY2hhbmdlcyA8IDAsIGRpcnR5X3N1Ym1vZHVsZXMpOworCisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKwkJaXQgPSAmKHMtPmNoYW5nZS5pdGVtc1tpXSk7CisJCWQgPSBpdC0+dXRpbDsKKwkJaWYgKCFkLT53b3JrdHJlZV9zdGF0dXMgfHwKKwkJICAgIGQtPndvcmt0cmVlX3N0YXR1cyA9PSBESUZGX1NUQVRVU19VTk1FUkdFRCkKKwkJCWNvbnRpbnVlOworCQl3dF9sb25nc3RhdHVzX3ByaW50X2NoYW5nZV9kYXRhKHMsIFdUX1NUQVRVU19DSEFOR0VELCBpdCk7CisJfQorCXd0X2xvbmdzdGF0dXNfcHJpbnRfdHJhaWxlcihzKTsKK30KKworc3RhdGljIGludCBzdGFzaF9jb3VudF9yZWZzKHN0cnVjdCBvYmplY3RfaWQgKm9vaWQsIHN0cnVjdCBvYmplY3RfaWQgKm5vaWQsCisJCQkgICAgY29uc3QgY2hhciAqZW1haWwsIHRpbWVzdGFtcF90IHRpbWVzdGFtcCwgaW50IHR6LAorCQkJICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJaW50ICpjID0gY2JfZGF0YTsKKwkoKmMpKys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHd0X2xvbmdzdGF0dXNfcHJpbnRfc3Rhc2hfc3VtbWFyeShzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWludCBzdGFzaF9jb3VudCA9IDA7CisKKwlmb3JfZWFjaF9yZWZsb2dfZW50KCJyZWZzL3N0YXNoIiwgc3Rhc2hfY291bnRfcmVmcywgJnN0YXNoX2NvdW50KTsKKwlpZiAoc3Rhc2hfY291bnQgPiAwKQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsCisJCQkJIFFfKCJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cnkiLAorCQkJCSAgICAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJpZXMiLCBzdGFzaF9jb3VudCksCisJCQkJIHN0YXNoX2NvdW50KTsKK30KKworc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF9zdWJtb2R1bGVfc3VtbWFyeShzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBpbnQgdW5jb21taXR0ZWQpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3Mgc21fc3VtbWFyeSA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGNtZF9zdGRvdXQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHN1bW1hcnkgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpzdW1tYXJ5X2NvbnRlbnQ7CisKKwlhcmd2X2FycmF5X3B1c2hmKCZzbV9zdW1tYXJ5LmVudl9hcnJheSwgIkdJVF9JTkRFWF9GSUxFPSVzIiwKKwkJCSBzLT5pbmRleF9maWxlKTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmc21fc3VtbWFyeS5hcmdzLCAic3VibW9kdWxlIik7CisJYXJndl9hcnJheV9wdXNoKCZzbV9zdW1tYXJ5LmFyZ3MsICJzdW1tYXJ5Iik7CisJYXJndl9hcnJheV9wdXNoKCZzbV9zdW1tYXJ5LmFyZ3MsIHVuY29tbWl0dGVkID8gIi0tZmlsZXMiIDogIi0tY2FjaGVkIik7CisJYXJndl9hcnJheV9wdXNoKCZzbV9zdW1tYXJ5LmFyZ3MsICItLWZvci1zdGF0dXMiKTsKKwlhcmd2X2FycmF5X3B1c2goJnNtX3N1bW1hcnkuYXJncywgIi0tc3VtbWFyeS1saW1pdCIpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJnNtX3N1bW1hcnkuYXJncywgIiVkIiwgcy0+c3VibW9kdWxlX3N1bW1hcnkpOworCWlmICghdW5jb21taXR0ZWQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmc21fc3VtbWFyeS5hcmdzLCBzLT5hbWVuZCA/ICJIRUFEXiIgOiAiSEVBRCIpOworCisJc21fc3VtbWFyeS5naXRfY21kID0gMTsKKwlzbV9zdW1tYXJ5Lm5vX3N0ZGluID0gMTsKKworCWNhcHR1cmVfY29tbWFuZCgmc21fc3VtbWFyeSwgJmNtZF9zdGRvdXQsIDEwMjQpOworCisJLyogcHJlcGVuZCBoZWFkZXIsIG9ubHkgaWYgdGhlcmUncyBhbiBhY3R1YWwgb3V0cHV0ICovCisJaWYgKGNtZF9zdGRvdXQubGVuKSB7CisJCWlmICh1bmNvbW1pdHRlZCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnN1bW1hcnksIF8oIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IikpOworCQllbHNlCisJCQlzdHJidWZfYWRkc3RyKCZzdW1tYXJ5LCBfKCJTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IikpOworCQlzdHJidWZfYWRkc3RyKCZzdW1tYXJ5LCAiXG5cbiIpOworCX0KKwlzdHJidWZfYWRkYnVmKCZzdW1tYXJ5LCAmY21kX3N0ZG91dCk7CisJc3RyYnVmX3JlbGVhc2UoJmNtZF9zdGRvdXQpOworCisJaWYgKHMtPmRpc3BsYXlfY29tbWVudF9wcmVmaXgpIHsKKwkJc2l6ZV90IGxlbjsKKwkJc3VtbWFyeV9jb250ZW50ID0gc3RyYnVmX2RldGFjaCgmc3VtbWFyeSwgJmxlbik7CisJCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKCZzdW1tYXJ5LCBzdW1tYXJ5X2NvbnRlbnQsIGxlbik7CisJCWZyZWUoc3VtbWFyeV9jb250ZW50KTsKKwl9CisKKwlmcHV0cyhzdW1tYXJ5LmJ1Ziwgcy0+ZnApOworCXN0cmJ1Zl9yZWxlYXNlKCZzdW1tYXJ5KTsKK30KKworc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF9vdGhlcihzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCSAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqbCwKKwkJCQkgICAgICBjb25zdCBjaGFyICp3aGF0LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmhvdykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3Qgb3V0cHV0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IGNvbHVtbl9vcHRpb25zIGNvcHRzOworCisJaWYgKCFsLT5ucikKKwkJcmV0dXJuOworCisJd3RfbG9uZ3N0YXR1c19wcmludF9vdGhlcl9oZWFkZXIocywgd2hhdCwgaG93KTsKKworCWZvciAoaSA9IDA7IGkgPCBsLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKwkJY29uc3QgY2hhciAqcGF0aDsKKwkJaXQgPSAmKGwtPml0ZW1zW2ldKTsKKwkJcGF0aCA9IHF1b3RlX3BhdGgoaXQtPnN0cmluZywgcy0+cHJlZml4LCAmYnVmKTsKKwkJaWYgKGNvbHVtbl9hY3RpdmUocy0+Y29sb3B0cykpIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmb3V0cHV0LCBwYXRoKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXN0YXR1c19wcmludGYocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICJcdCIpOworCQlzdGF0dXNfcHJpbnRmX21vcmUocywgY29sb3IoV1RfU1RBVFVTX1VOVFJBQ0tFRCwgcyksCisJCQkJICAgIiVzXG4iLCBwYXRoKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlpZiAoIWNvbHVtbl9hY3RpdmUocy0+Y29sb3B0cykpCisJCWdvdG8gY29uY2x1ZGU7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiJXMlc1x0JXMiLAorCQkgICAgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksCisJCSAgICBzLT5kaXNwbGF5X2NvbW1lbnRfcHJlZml4ID8gIiMiIDogIiIsCisJCSAgICBjb2xvcihXVF9TVEFUVVNfVU5UUkFDS0VELCBzKSk7CisJbWVtc2V0KCZjb3B0cywgMCwgc2l6ZW9mKGNvcHRzKSk7CisJY29wdHMucGFkZGluZyA9IDE7CisJY29wdHMuaW5kZW50ID0gYnVmLmJ1ZjsKKwlpZiAod2FudF9jb2xvcihzLT51c2VfY29sb3IpKQorCQljb3B0cy5ubCA9IEdJVF9DT0xPUl9SRVNFVCAiXG4iOworCXByaW50X2NvbHVtbnMoJm91dHB1dCwgcy0+Y29sb3B0cywgJmNvcHRzKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmb3V0cHV0LCAwKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK2NvbmNsdWRlOgorCXN0YXR1c19wcmludGZfbG4ocywgR0lUX0NPTE9SX05PUk1BTCwgIiVzIiwgIiIpOworfQorCitzaXplX3Qgd3Rfc3RhdHVzX2xvY2F0ZV9lbmQoY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbikKK3sKKwljb25zdCBjaGFyICpwOworCXN0cnVjdCBzdHJidWYgcGF0dGVybiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJnBhdHRlcm4sICJcbiVjICVzIiwgY29tbWVudF9saW5lX2NoYXIsIGN1dF9saW5lKTsKKwlpZiAoc3RhcnRzX3dpdGgocywgcGF0dGVybi5idWYgKyAxKSkKKwkJbGVuID0gMDsKKwllbHNlIGlmICgocCA9IHN0cnN0cihzLCBwYXR0ZXJuLmJ1ZikpKQorCQlsZW4gPSBwIC0gcyArIDE7CisJc3RyYnVmX3JlbGVhc2UoJnBhdHRlcm4pOworCXJldHVybiBsZW47Cit9CisKK3ZvaWQgd3Rfc3RhdHVzX2FwcGVuZF9jdXRfbGluZShzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJY29uc3QgY2hhciAqZXhwbGFuYXRpb24gPSBfKCJEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS5cbkV2ZXJ5dGhpbmcgYmVsb3cgaXQgd2lsbCBiZSBpZ25vcmVkLiIpOworCisJc3RyYnVmX2NvbW1lbnRlZF9hZGRmKGJ1ZiwgIiVzIiwgY3V0X2xpbmUpOworCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKGJ1ZiwgZXhwbGFuYXRpb24sIHN0cmxlbihleHBsYW5hdGlvbikpOworfQorCit2b2lkIHd0X3N0YXR1c19hZGRfY3V0X2xpbmUoRklMRSAqZnApCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXd0X3N0YXR1c19hcHBlbmRfY3V0X2xpbmUoJmJ1Zik7CisJZnB1dHMoYnVmLmJ1ZiwgZnApOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdm9pZCB3dF9sb25nc3RhdHVzX3ByaW50X3ZlcmJvc2Uoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgb3B0OworCWludCBkaXJ0eV9zdWJtb2R1bGVzOworCWNvbnN0IGNoYXIgKmMgPSBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKTsKKworCXJlcG9faW5pdF9yZXZpc2lvbnMocy0+cmVwbywgJnJldiwgTlVMTCk7CisJcmV2LmRpZmZvcHQuZmxhZ3MuYWxsb3dfdGV4dGNvbnYgPSAxOworCXJldi5kaWZmb3B0Lml0YV9pbnZpc2libGVfaW5faW5kZXggPSAxOworCisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwlvcHQuZGVmID0gcy0+aXNfaW5pdGlhbCA/IGVtcHR5X3RyZWVfb2lkX2hleCgpIDogcy0+cmVmZXJlbmNlOworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCAmb3B0KTsKKworCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfUEFUQ0g7CisJcmV2LmRpZmZvcHQuZGV0ZWN0X3JlbmFtZSA9IHMtPmRldGVjdF9yZW5hbWUgPj0gMCA/IHMtPmRldGVjdF9yZW5hbWUgOiByZXYuZGlmZm9wdC5kZXRlY3RfcmVuYW1lOworCXJldi5kaWZmb3B0LnJlbmFtZV9saW1pdCA9IHMtPnJlbmFtZV9saW1pdCA+PSAwID8gcy0+cmVuYW1lX2xpbWl0IDogcmV2LmRpZmZvcHQucmVuYW1lX2xpbWl0OworCXJldi5kaWZmb3B0LnJlbmFtZV9zY29yZSA9IHMtPnJlbmFtZV9zY29yZSA+PSAwID8gcy0+cmVuYW1lX3Njb3JlIDogcmV2LmRpZmZvcHQucmVuYW1lX3Njb3JlOworCXJldi5kaWZmb3B0LmZpbGUgPSBzLT5mcDsKKwlyZXYuZGlmZm9wdC5jbG9zZV9maWxlID0gMDsKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBnb2luZyB0byBzdGRvdXQsIHRoZW4gd2UgZGVmaW5pdGVseSBkb24ndAorCSAqIHdhbnQgY29sb3IsIHNpbmNlIHdlIGFyZSBnb2luZyB0byB0aGUgY29tbWl0IG1lc3NhZ2UKKwkgKiBmaWxlIChhbmQgZXZlbiB0aGUgImF1dG8iIHNldHRpbmcgd29uJ3Qgd29yaywgc2luY2UgaXQKKwkgKiB3aWxsIGhhdmUgY2hlY2tlZCBpc2F0dHkgb24gc3Rkb3V0KS4gQnV0IHdlIHRoZW4gZG8gd2FudAorCSAqIHRvIGluc2VydCB0aGUgc2Npc3NvciBsaW5lIGhlcmUgdG8gcmVsaWFibHkgcmVtb3ZlIHRoZQorCSAqIGRpZmYgYmVmb3JlIGNvbW1pdHRpbmcuCisJICovCisJaWYgKHMtPmZwICE9IHN0ZG91dCkgeworCQlyZXYuZGlmZm9wdC51c2VfY29sb3IgPSAwOworCQl3dF9zdGF0dXNfYWRkX2N1dF9saW5lKHMtPmZwKTsKKwl9CisJaWYgKHMtPnZlcmJvc2UgPiAxICYmIHMtPmNvbW1pdHRhYmxlKSB7CisJCS8qIHByaW50X3VwZGF0ZWQoKSBwcmludGVkIGEgaGVhZGVyLCBzbyBkbyB3ZSAqLworCQlpZiAocy0+ZnAgIT0gc3Rkb3V0KQorCQkJd3RfbG9uZ3N0YXR1c19wcmludF90cmFpbGVyKHMpOworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIpKTsKKwkJcmV2LmRpZmZvcHQuYV9wcmVmaXggPSAiYy8iOworCQlyZXYuZGlmZm9wdC5iX3ByZWZpeCA9ICJpLyI7CisJfSAvKiBlbHNlIHVzZSBwcmVmaXggYXMgcGVyIHVzZXIgY29uZmlnICovCisJcnVuX2RpZmZfaW5kZXgoJnJldiwgMSk7CisJaWYgKHMtPnZlcmJvc2UgPiAxICYmCisJICAgIHd0X3N0YXR1c19jaGVja193b3JrdHJlZV9jaGFuZ2VzKHMsICZkaXJ0eV9zdWJtb2R1bGVzKSkgeworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsCisJCQkiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiKSk7CisJCXNldHVwX3dvcmtfdHJlZSgpOworCQlyZXYuZGlmZm9wdC5hX3ByZWZpeCA9ICJpLyI7CisJCXJldi5kaWZmb3B0LmJfcHJlZml4ID0gIncvIjsKKwkJcnVuX2RpZmZfZmlsZXMoJnJldiwgMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCB3dF9sb25nc3RhdHVzX3ByaW50X3RyYWNraW5nKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmNwLCAqZXAsICpicmFuY2hfbmFtZTsKKwlzdHJ1Y3QgYnJhbmNoICpicmFuY2g7CisJY2hhciBjb21tZW50X2xpbmVfc3RyaW5nWzNdOworCWludCBpOworCXVpbnQ2NF90IHRfYmVnaW4gPSAwOworCisJYXNzZXJ0KHMtPmJyYW5jaCAmJiAhcy0+aXNfaW5pdGlhbCk7CisJaWYgKCFza2lwX3ByZWZpeChzLT5icmFuY2gsICJyZWZzL2hlYWRzLyIsICZicmFuY2hfbmFtZSkpCisJCXJldHVybjsKKwlicmFuY2ggPSBicmFuY2hfZ2V0KGJyYW5jaF9uYW1lKTsKKworCXRfYmVnaW4gPSBnZXRuYW5vdGltZSgpOworCisJaWYgKCFmb3JtYXRfdHJhY2tpbmdfaW5mbyhicmFuY2gsICZzYiwgcy0+YWhlYWRfYmVoaW5kX2ZsYWdzKSkKKwkJcmV0dXJuOworCisJaWYgKGFkdmljZV9zdGF0dXNfYWhlYWRfYmVoaW5kX3dhcm5pbmcgJiYKKwkgICAgcy0+YWhlYWRfYmVoaW5kX2ZsYWdzID09IEFIRUFEX0JFSElORF9GVUxMKSB7CisJCXVpbnQ2NF90IHRfZGVsdGFfaW5fbXMgPSAoZ2V0bmFub3RpbWUoKSAtIHRfYmVnaW4pIC8gMTAwMDAwMDsKKwkJaWYgKHRfZGVsdGFfaW5fbXMgPiBBQl9ERUxBWV9XQVJOSU5HX0lOX01TKSB7CisJCQlzdHJidWZfYWRkZigmc2IsIF8oIlxuIgorCQkJCQkgICAiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gY29tcHV0ZSB0aGUgYnJhbmNoIGFoZWFkL2JlaGluZCB2YWx1ZXMuXG4iCisJCQkJCSAgICJZb3UgY2FuIHVzZSAnLS1uby1haGVhZC1iZWhpbmQnIHRvIGF2b2lkIHRoaXMuXG4iKSwKKwkJCQkgICAgdF9kZWx0YV9pbl9tcyAvIDEwMDAuMCk7CisJCX0KKwl9CisKKwlpID0gMDsKKwlpZiAocy0+ZGlzcGxheV9jb21tZW50X3ByZWZpeCkgeworCQljb21tZW50X2xpbmVfc3RyaW5nW2krK10gPSBjb21tZW50X2xpbmVfY2hhcjsKKwkJY29tbWVudF9saW5lX3N0cmluZ1tpKytdID0gJyAnOworCX0KKwljb21tZW50X2xpbmVfc3RyaW5nW2ldID0gJ1wwJzsKKworCWZvciAoY3AgPSBzYi5idWY7IChlcCA9IHN0cmNocihjcCwgJ1xuJykpICE9IE5VTEw7IGNwID0gZXAgKyAxKQorCQljb2xvcl9mcHJpbnRmX2xuKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwKKwkJCQkgIiVzJS4qcyIsIGNvbW1lbnRfbGluZV9zdHJpbmcsCisJCQkJIChpbnQpKGVwIC0gY3ApLCBjcCk7CisJaWYgKHMtPmRpc3BsYXlfY29tbWVudF9wcmVmaXgpCisJCWNvbG9yX2ZwcmludGZfbG4ocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiJWMiLAorCQkJCSBjb21tZW50X2xpbmVfY2hhcik7CisJZWxzZQorCQlmcHV0cygiXG4iLCBzLT5mcCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19tZXJnZV9pbl9wcm9ncmVzcyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCSAgIGNvbnN0IGNoYXIgKmNvbG9yKQoreworCWlmIChoYXNfdW5tZXJnZWQocykpIHsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwgXygiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIikpOworCQlpZiAocy0+aGludHMpIHsKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJCSBfKCIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIikpOworCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQkJIF8oIiAgKHVzZSBcImdpdCBtZXJnZSAtLWFib3J0XCIgdG8gYWJvcnQgdGhlIG1lcmdlKSIpKTsKKwkJfQorCX0gZWxzZSB7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIikpOworCQlpZiAocy0+aGludHMpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiKSk7CisJfQorCXd0X2xvbmdzdGF0dXNfcHJpbnRfdHJhaWxlcihzKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19hbV9pbl9wcm9ncmVzcyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCWNvbnN0IGNoYXIgKmNvbG9yKQoreworCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCV8oIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIpKTsKKwlpZiAocy0+c3RhdGUuYW1fZW1wdHlfcGF0Y2gpCisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCJUaGUgY3VycmVudCBwYXRjaCBpcyBlbXB0eS4iKSk7CisJaWYgKHMtPmhpbnRzKSB7CisJCWlmICghcy0+c3RhdGUuYW1fZW1wdHlfcGF0Y2gpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tY29udGludWVcIikiKSk7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIpKTsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCV8oIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIpKTsKKwl9CisJd3RfbG9uZ3N0YXR1c19wcmludF90cmFpbGVyKHMpOworfQorCitzdGF0aWMgY2hhciAqcmVhZF9saW5lX2Zyb21fZ2l0X3BhdGgoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlGSUxFICpmcCA9IGZvcGVuX29yX3dhcm4oZ2l0X3BhdGgoIiVzIiwgZmlsZW5hbWUpLCAiciIpOworCisJaWYgKCFmcCkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXN0cmJ1Zl9nZXRsaW5lX2xmKCZidWYsIGZwKTsKKwlpZiAoIWZjbG9zZShmcCkpIHsKKwkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybiBOVUxMOworCX0KK30KKworc3RhdGljIGludCBzcGxpdF9jb21taXRfaW5fcHJvZ3Jlc3Moc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgc3BsaXRfaW5fcHJvZ3Jlc3MgPSAwOworCWNoYXIgKmhlYWQsICpvcmlnX2hlYWQsICpyZWJhc2VfYW1lbmQsICpyZWJhc2Vfb3JpZ19oZWFkOworCisJaWYgKCghcy0+YW1lbmQgJiYgIXMtPm5vd2FybiAmJiAhcy0+d29ya2Rpcl9kaXJ0eSkgfHwKKwkgICAgIXMtPmJyYW5jaCB8fCBzdHJjbXAocy0+YnJhbmNoLCAiSEVBRCIpKQorCQlyZXR1cm4gMDsKKworCWhlYWQgPSByZWFkX2xpbmVfZnJvbV9naXRfcGF0aCgiSEVBRCIpOworCW9yaWdfaGVhZCA9IHJlYWRfbGluZV9mcm9tX2dpdF9wYXRoKCJPUklHX0hFQUQiKTsKKwlyZWJhc2VfYW1lbmQgPSByZWFkX2xpbmVfZnJvbV9naXRfcGF0aCgicmViYXNlLW1lcmdlL2FtZW5kIik7CisJcmViYXNlX29yaWdfaGVhZCA9IHJlYWRfbGluZV9mcm9tX2dpdF9wYXRoKCJyZWJhc2UtbWVyZ2Uvb3JpZy1oZWFkIik7CisKKwlpZiAoIWhlYWQgfHwgIW9yaWdfaGVhZCB8fCAhcmViYXNlX2FtZW5kIHx8ICFyZWJhc2Vfb3JpZ19oZWFkKQorCQk7IC8qIGZhbGwgdGhyb3VnaCwgbm8gc3BsaXQgaW4gcHJvZ3Jlc3MgKi8KKwllbHNlIGlmICghc3RyY21wKHJlYmFzZV9hbWVuZCwgcmViYXNlX29yaWdfaGVhZCkpCisJCXNwbGl0X2luX3Byb2dyZXNzID0gISFzdHJjbXAoaGVhZCwgcmViYXNlX2FtZW5kKTsKKwllbHNlIGlmIChzdHJjbXAob3JpZ19oZWFkLCByZWJhc2Vfb3JpZ19oZWFkKSkKKwkJc3BsaXRfaW5fcHJvZ3Jlc3MgPSAxOworCisJZnJlZShoZWFkKTsKKwlmcmVlKG9yaWdfaGVhZCk7CisJZnJlZShyZWJhc2VfYW1lbmQpOworCWZyZWUocmViYXNlX29yaWdfaGVhZCk7CisKKwlyZXR1cm4gc3BsaXRfaW5fcHJvZ3Jlc3M7Cit9CisKKy8qCisgKiBUdXJuCisgKiAicGljayBkNmEyZjAzMDNlODk3ZWMyNTdkZDBlMGEzOWE1Y2NiNzA5YmMyMDQ3IHNvbWUgbWVzc2FnZSIKKyAqIGludG8KKyAqICJwaWNrIGQ2YTJmMDMgc29tZSBtZXNzYWdlIgorICoKKyAqIFRoZSBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGxpbmUgZG9lcyBub3QgY29udGFpbiB1c2VsZXNzIHNwYWNlcworICogYmVmb3JlIG9yIGFmdGVyIHRoZSBjb21tYW5kLgorICovCitzdGF0aWMgdm9pZCBhYmJyZXZfc2hhMV9pbl9saW5lKHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiAqKnNwbGl0OworCWludCBpOworCisJaWYgKHN0YXJ0c193aXRoKGxpbmUtPmJ1ZiwgImV4ZWMgIikgfHwKKwkgICAgc3RhcnRzX3dpdGgobGluZS0+YnVmLCAieCAiKSB8fAorCSAgICBzdGFydHNfd2l0aChsaW5lLT5idWYsICJsYWJlbCAiKSB8fAorCSAgICBzdGFydHNfd2l0aChsaW5lLT5idWYsICJsICIpKQorCQlyZXR1cm47CisKKwlzcGxpdCA9IHN0cmJ1Zl9zcGxpdF9tYXgobGluZSwgJyAnLCAzKTsKKwlpZiAoc3BsaXRbMF0gJiYgc3BsaXRbMV0pIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJLyoKKwkJICogc3RyYnVmX3NwbGl0X21heCBsZWZ0IGEgc3BhY2UuIFRyaW0gaXQgYW5kIHJlLWFkZAorCQkgKiBpdCBhZnRlciBhYmJyZXZpYXRpb24uCisJCSAqLworCQlzdHJidWZfdHJpbShzcGxpdFsxXSk7CisJCWlmICghZ2V0X29pZChzcGxpdFsxXS0+YnVmLCAmb2lkKSkgeworCQkJc3RyYnVmX3Jlc2V0KHNwbGl0WzFdKTsKKwkJCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldihzcGxpdFsxXSwgJm9pZCwKKwkJCQkJCSBERUZBVUxUX0FCQlJFVik7CisJCQlzdHJidWZfYWRkY2goc3BsaXRbMV0sICcgJyk7CisJCQlzdHJidWZfcmVzZXQobGluZSk7CisJCQlmb3IgKGkgPSAwOyBzcGxpdFtpXTsgaSsrKQorCQkJCXN0cmJ1Zl9hZGRidWYobGluZSwgc3BsaXRbaV0pOworCQl9CisJfQorCXN0cmJ1Zl9saXN0X2ZyZWUoc3BsaXQpOworfQorCitzdGF0aWMgaW50IHJlYWRfcmViYXNlX3RvZG9saXN0KGNvbnN0IGNoYXIgKmZuYW1lLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpbmVzKQoreworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCUZJTEUgKmYgPSBmb3BlbihnaXRfcGF0aCgiJXMiLCBmbmFtZSksICJyIik7CisKKwlpZiAoIWYpIHsKKwkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCXJldHVybiAtMTsKKwkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiBmaWxlICVzIGZvciByZWFkaW5nIiwKKwkJCSAgZ2l0X3BhdGgoIiVzIiwgZm5hbWUpKTsKKwl9CisJd2hpbGUgKCFzdHJidWZfZ2V0bGluZV9sZigmbGluZSwgZikpIHsKKwkJaWYgKGxpbmUubGVuICYmIGxpbmUuYnVmWzBdID09IGNvbW1lbnRfbGluZV9jaGFyKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl90cmltKCZsaW5lKTsKKwkJaWYgKCFsaW5lLmxlbikKKwkJCWNvbnRpbnVlOworCQlhYmJyZXZfc2hhMV9pbl9saW5lKCZsaW5lKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpbmVzLCBsaW5lLmJ1Zik7CisJfQorCWZjbG9zZShmKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcmViYXNlX2luZm9ybWF0aW9uKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJICAgIGNvbnN0IGNoYXIgKmNvbG9yKQoreworCWlmIChzLT5zdGF0ZS5yZWJhc2VfaW50ZXJhY3RpdmVfaW5fcHJvZ3Jlc3MpIHsKKwkJaW50IGk7CisJCWludCBucl9saW5lc190b19zaG93ID0gMjsKKworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgaGF2ZV9kb25lID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCB5ZXRfdG9fZG8gPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCQlyZWFkX3JlYmFzZV90b2RvbGlzdCgicmViYXNlLW1lcmdlL2RvbmUiLCAmaGF2ZV9kb25lKTsKKwkJaWYgKHJlYWRfcmViYXNlX3RvZG9saXN0KCJyZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvIiwKKwkJCQkJICZ5ZXRfdG9fZG8pKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCJnaXQtcmViYXNlLXRvZG8gaXMgbWlzc2luZy4iKSk7CisJCWlmIChoYXZlX2RvbmUubnIgPT0gMCkKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsIF8oIk5vIGNvbW1hbmRzIGRvbmUuIikpOworCQllbHNlIHsKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJUV8oIkxhc3QgY29tbWFuZCBkb25lICglZCBjb21tYW5kIGRvbmUpOiIsCisJCQkJCSJMYXN0IGNvbW1hbmRzIGRvbmUgKCVkIGNvbW1hbmRzIGRvbmUpOiIsCisJCQkJCWhhdmVfZG9uZS5uciksCisJCQkJaGF2ZV9kb25lLm5yKTsKKwkJCWZvciAoaSA9IChoYXZlX2RvbmUubnIgPiBucl9saW5lc190b19zaG93KQorCQkJCT8gaGF2ZV9kb25lLm5yIC0gbnJfbGluZXNfdG9fc2hvdyA6IDA7CisJCQkJaSA8IGhhdmVfZG9uZS5ucjsKKwkJCQlpKyspCisJCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwgIiAgICVzIiwgaGF2ZV9kb25lLml0ZW1zW2ldLnN0cmluZyk7CisJCQlpZiAoaGF2ZV9kb25lLm5yID4gbnJfbGluZXNfdG9fc2hvdyAmJiBzLT5oaW50cykKKwkJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCQlfKCIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIpLCBnaXRfcGF0aCgicmViYXNlLW1lcmdlL2RvbmUiKSk7CisJCX0KKworCQlpZiAoeWV0X3RvX2RvLm5yID09IDApCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCQkgXygiTm8gY29tbWFuZHMgcmVtYWluaW5nLiIpKTsKKwkJZWxzZSB7CisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCVFfKCJOZXh0IGNvbW1hbmQgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kKToiLAorCQkJCQkiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiLAorCQkJCQl5ZXRfdG9fZG8ubnIpLAorCQkJCXlldF90b19kby5ucik7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnJfbGluZXNfdG9fc2hvdyAmJiBpIDwgeWV0X3RvX2RvLm5yOyBpKyspCisJCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwgIiAgICVzIiwgeWV0X3RvX2RvLml0ZW1zW2ldLnN0cmluZyk7CisJCQlpZiAocy0+aGludHMpCisJCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQkJXygiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIikpOworCQl9CisJCXN0cmluZ19saXN0X2NsZWFyKCZ5ZXRfdG9fZG8sIDApOworCQlzdHJpbmdfbGlzdF9jbGVhcigmaGF2ZV9kb25lLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3JlYmFzZV9zdGF0ZShzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmNvbG9yKQoreworCWlmIChzLT5zdGF0ZS5icmFuY2gpCisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJIF8oIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIiksCisJCQkJIHMtPnN0YXRlLmJyYW5jaCwKKwkJCQkgcy0+c3RhdGUub250byk7CisJZWxzZQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCSBfKCJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcmViYXNlX2luX3Byb2dyZXNzKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJICAgIGNvbnN0IGNoYXIgKmNvbG9yKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJc2hvd19yZWJhc2VfaW5mb3JtYXRpb24ocywgY29sb3IpOworCWlmIChoYXNfdW5tZXJnZWQocykpIHsKKwkJcHJpbnRfcmViYXNlX3N0YXRlKHMsIGNvbG9yKTsKKwkJaWYgKHMtPmhpbnRzKSB7CisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIikpOworCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiKSk7CisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIpKTsKKwkJfQorCX0gZWxzZSBpZiAocy0+c3RhdGUucmViYXNlX2luX3Byb2dyZXNzIHx8CisJCSAgICFzdGF0KGdpdF9wYXRoX21lcmdlX21zZyhzLT5yZXBvKSwgJnN0KSkgeworCQlwcmludF9yZWJhc2Vfc3RhdGUocywgY29sb3IpOworCQlpZiAocy0+aGludHMpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIpKTsKKwl9IGVsc2UgaWYgKHNwbGl0X2NvbW1pdF9pbl9wcm9ncmVzcyhzKSkgeworCQlpZiAocy0+c3RhdGUuYnJhbmNoKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQkJIF8oIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIpLAorCQkJCQkgcy0+c3RhdGUuYnJhbmNoLAorCQkJCQkgcy0+c3RhdGUub250byk7CisJCWVsc2UKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJCSBfKCJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIpKTsKKwkJaWYgKHMtPmhpbnRzKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIpKTsKKwl9IGVsc2UgeworCQlpZiAocy0+c3RhdGUuYnJhbmNoKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQkJIF8oIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iKSwKKwkJCQkJIHMtPnN0YXRlLmJyYW5jaCwKKwkJCQkJIHMtPnN0YXRlLm9udG8pOworCQllbHNlCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCQkgXygiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIikpOworCQlpZiAocy0+aGludHMgJiYgIXMtPmFtZW5kKSB7CisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiKSk7CisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIikpOworCQl9CisJfQorCXd0X2xvbmdzdGF0dXNfcHJpbnRfdHJhaWxlcihzKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19jaGVycnlfcGlja19pbl9wcm9ncmVzcyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCQkgY29uc3QgY2hhciAqY29sb3IpCit7CisJaWYgKGlzX251bGxfb2lkKCZzLT5zdGF0ZS5jaGVycnlfcGlja19oZWFkX29pZCkpCisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCJDaGVycnktcGljayBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIikpOworCWVsc2UKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCV8oIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iKSwKKwkJCWZpbmRfdW5pcXVlX2FiYnJldigmcy0+c3RhdGUuY2hlcnJ5X3BpY2tfaGVhZF9vaWQsCisJCQkJCSAgIERFRkFVTFRfQUJCUkVWKSk7CisKKwlpZiAocy0+aGludHMpIHsKKwkJaWYgKGhhc191bm1lcmdlZChzKSkKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiKSk7CisJCWVsc2UgaWYgKGlzX251bGxfb2lkKCZzLT5zdGF0ZS5jaGVycnlfcGlja19oZWFkX29pZCkpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIikpOworCQllbHNlCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIikpOworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJXygiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiKSk7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKSIpKTsKKwl9CisJd3RfbG9uZ3N0YXR1c19wcmludF90cmFpbGVyKHMpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3JldmVydF9pbl9wcm9ncmVzcyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCSAgICBjb25zdCBjaGFyICpjb2xvcikKK3sKKwlpZiAoaXNfbnVsbF9vaWQoJnMtPnN0YXRlLnJldmVydF9oZWFkX29pZCkpCisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCJSZXZlcnQgY3VycmVudGx5IGluIHByb2dyZXNzLiIpKTsKKwllbHNlCisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCJZb3UgYXJlIGN1cnJlbnRseSByZXZlcnRpbmcgY29tbWl0ICVzLiIpLAorCQkJZmluZF91bmlxdWVfYWJicmV2KCZzLT5zdGF0ZS5yZXZlcnRfaGVhZF9vaWQsCisJCQkJCSAgIERFRkFVTFRfQUJCUkVWKSk7CisJaWYgKHMtPmhpbnRzKSB7CisJCWlmIChoYXNfdW5tZXJnZWQocykpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIpKTsKKwkJZWxzZSBpZiAoaXNfbnVsbF9vaWQoJnMtPnN0YXRlLnJldmVydF9oZWFkX29pZCkpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIHRvIGNvbnRpbnVlKSIpKTsKKwkJZWxzZQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiKSk7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiKSk7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIHJldmVydCBvcGVyYXRpb24pIikpOworCX0KKwl3dF9sb25nc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfYmlzZWN0X2luX3Byb2dyZXNzKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJICAgIGNvbnN0IGNoYXIgKmNvbG9yKQoreworCWlmIChzLT5zdGF0ZS5icmFuY2gpCisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJIF8oIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIpLAorCQkJCSBzLT5zdGF0ZS5icmFuY2gpOworCWVsc2UKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQkgXygiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLiIpKTsKKwlpZiAocy0+aGludHMpCisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiKSk7CisJd3RfbG9uZ3N0YXR1c19wcmludF90cmFpbGVyKHMpOworfQorCisvKgorICogRXh0cmFjdCBicmFuY2ggaW5mb3JtYXRpb24gZnJvbSByZWJhc2UvYmlzZWN0CisgKi8KK3N0YXRpYyBjaGFyICpnZXRfYnJhbmNoKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lOworCisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCB3b3JrdHJlZV9naXRfcGF0aCh3dCwgIiVzIiwgcGF0aCksIDApIDw9IDApCisJCWdvdG8gZ290X25vdGhpbmc7CisKKwl3aGlsZSAoc2IubGVuICYmIHNiLmJ1ZltzYi5sZW4gLSAxXSA9PSAnXG4nKQorCQlzdHJidWZfc2V0bGVuKCZzYiwgc2IubGVuIC0gMSk7CisJaWYgKCFzYi5sZW4pCisJCWdvdG8gZ290X25vdGhpbmc7CisJaWYgKHNraXBfcHJlZml4KHNiLmJ1ZiwgInJlZnMvaGVhZHMvIiwgJmJyYW5jaF9uYW1lKSkKKwkJc3RyYnVmX3JlbW92ZSgmc2IsIDAsIGJyYW5jaF9uYW1lIC0gc2IuYnVmKTsKKwllbHNlIGlmIChzdGFydHNfd2l0aChzYi5idWYsICJyZWZzLyIpKQorCQk7CisJZWxzZSBpZiAoIWdldF9vaWRfaGV4KHNiLmJ1ZiwgJm9pZCkpIHsKKwkJc3RyYnVmX3Jlc2V0KCZzYik7CisJCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldigmc2IsICZvaWQsIERFRkFVTFRfQUJCUkVWKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc2IuYnVmLCAiZGV0YWNoZWQgSEVBRCIpKSAvKiByZWJhc2UgKi8KKwkJZ290byBnb3Rfbm90aGluZzsKKwllbHNlCQkJLyogYmlzZWN0ICovCisJCTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCitnb3Rfbm90aGluZzoKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgZ3JhYl8xc3Rfc3dpdGNoX2NiZGF0YSB7CisJc3RydWN0IHN0cmJ1ZiBidWY7CisJc3RydWN0IG9iamVjdF9pZCBub2lkOworfTsKKworc3RhdGljIGludCBncmFiXzFzdF9zd2l0Y2goc3RydWN0IG9iamVjdF9pZCAqb29pZCwgc3RydWN0IG9iamVjdF9pZCAqbm9pZCwKKwkJCSAgIGNvbnN0IGNoYXIgKmVtYWlsLCB0aW1lc3RhbXBfdCB0aW1lc3RhbXAsIGludCB0eiwKKwkJCSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGdyYWJfMXN0X3N3aXRjaF9jYmRhdGEgKmNiID0gY2JfZGF0YTsKKwljb25zdCBjaGFyICp0YXJnZXQgPSBOVUxMLCAqZW5kOworCisJaWYgKCFza2lwX3ByZWZpeChtZXNzYWdlLCAiY2hlY2tvdXQ6IG1vdmluZyBmcm9tICIsICZtZXNzYWdlKSkKKwkJcmV0dXJuIDA7CisJdGFyZ2V0ID0gc3Ryc3RyKG1lc3NhZ2UsICIgdG8gIik7CisJaWYgKCF0YXJnZXQpCisJCXJldHVybiAwOworCXRhcmdldCArPSBzdHJsZW4oIiB0byAiKTsKKwlzdHJidWZfcmVzZXQoJmNiLT5idWYpOworCW9pZGNweSgmY2ItPm5vaWQsIG5vaWQpOworCWVuZCA9IHN0cmNocm51bCh0YXJnZXQsICdcbicpOworCXN0cmJ1Zl9hZGQoJmNiLT5idWYsIHRhcmdldCwgZW5kIC0gdGFyZ2V0KTsKKwlpZiAoIXN0cmNtcChjYi0+YnVmLmJ1ZiwgIkhFQUQiKSkgeworCQkvKiBIRUFEIGlzIHJlbGF0aXZlLiBSZXNvbHZlIGl0IHRvIHRoZSByaWdodCByZWZsb2cgZW50cnkuICovCisJCXN0cmJ1Zl9yZXNldCgmY2ItPmJ1Zik7CisJCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldigmY2ItPmJ1Ziwgbm9pZCwgREVGQVVMVF9BQkJSRVYpOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2dldF9kZXRhY2hlZF9mcm9tKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQlzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZ3JhYl8xc3Rfc3dpdGNoX2NiZGF0YSBjYjsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY2hhciAqcmVmID0gTlVMTDsKKworCXN0cmJ1Zl9pbml0KCZjYi5idWYsIDApOworCWlmIChmb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2UoIkhFQUQiLCBncmFiXzFzdF9zd2l0Y2gsICZjYikgPD0gMCkgeworCQlzdHJidWZfcmVsZWFzZSgmY2IuYnVmKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkd2ltX3JlZihjYi5idWYuYnVmLCBjYi5idWYubGVuLCAmb2lkLCAmcmVmKSA9PSAxICYmCisJICAgIC8qIHNoYTEgaXMgYSBjb21taXQ/IG1hdGNoIHdpdGhvdXQgZnVydGhlciBsb29rdXAgKi8KKwkgICAgKG9pZGVxKCZjYi5ub2lkLCAmb2lkKSB8fAorCSAgICAgLyogcGVyaGFwcyBzaGExIGlzIGEgdGFnLCB0cnkgdG8gZGVyZWZlcmVuY2UgdG8gYSBjb21taXQgKi8KKwkgICAgICgoY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHIsICZvaWQsIDEpKSAhPSBOVUxMICYmCisJICAgICAgb2lkZXEoJmNiLm5vaWQsICZjb21taXQtPm9iamVjdC5vaWQpKSkpIHsKKwkJY29uc3QgY2hhciAqZnJvbSA9IHJlZjsKKwkJaWYgKCFza2lwX3ByZWZpeChmcm9tLCAicmVmcy90YWdzLyIsICZmcm9tKSkKKwkJCXNraXBfcHJlZml4KGZyb20sICJyZWZzL3JlbW90ZXMvIiwgJmZyb20pOworCQlzdGF0ZS0+ZGV0YWNoZWRfZnJvbSA9IHhzdHJkdXAoZnJvbSk7CisJfSBlbHNlCisJCXN0YXRlLT5kZXRhY2hlZF9mcm9tID0KKwkJCXhzdHJkdXAoZmluZF91bmlxdWVfYWJicmV2KCZjYi5ub2lkLCBERUZBVUxUX0FCQlJFVikpOworCW9pZGNweSgmc3RhdGUtPmRldGFjaGVkX29pZCwgJmNiLm5vaWQpOworCXN0YXRlLT5kZXRhY2hlZF9hdCA9ICFnZXRfb2lkKCJIRUFEIiwgJm9pZCkgJiYKKwkJCSAgICAgb2lkZXEoJm9pZCwgJnN0YXRlLT5kZXRhY2hlZF9vaWQpOworCisJZnJlZShyZWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZjYi5idWYpOworfQorCitpbnQgd3Rfc3RhdHVzX2NoZWNrX3JlYmFzZShjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0LAorCQkJICAgc3RydWN0IHd0X3N0YXR1c19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoIXN0YXQod29ya3RyZWVfZ2l0X3BhdGgod3QsICJyZWJhc2UtYXBwbHkiKSwgJnN0KSkgeworCQlpZiAoIXN0YXQod29ya3RyZWVfZ2l0X3BhdGgod3QsICJyZWJhc2UtYXBwbHkvYXBwbHlpbmciKSwgJnN0KSkgeworCQkJc3RhdGUtPmFtX2luX3Byb2dyZXNzID0gMTsKKwkJCWlmICghc3RhdCh3b3JrdHJlZV9naXRfcGF0aCh3dCwgInJlYmFzZS1hcHBseS9wYXRjaCIpLCAmc3QpICYmICFzdC5zdF9zaXplKQorCQkJCXN0YXRlLT5hbV9lbXB0eV9wYXRjaCA9IDE7CisJCX0gZWxzZSB7CisJCQlzdGF0ZS0+cmViYXNlX2luX3Byb2dyZXNzID0gMTsKKwkJCXN0YXRlLT5icmFuY2ggPSBnZXRfYnJhbmNoKHd0LCAicmViYXNlLWFwcGx5L2hlYWQtbmFtZSIpOworCQkJc3RhdGUtPm9udG8gPSBnZXRfYnJhbmNoKHd0LCAicmViYXNlLWFwcGx5L29udG8iKTsKKwkJfQorCX0gZWxzZSBpZiAoIXN0YXQod29ya3RyZWVfZ2l0X3BhdGgod3QsICJyZWJhc2UtbWVyZ2UiKSwgJnN0KSkgeworCQlpZiAoIXN0YXQod29ya3RyZWVfZ2l0X3BhdGgod3QsICJyZWJhc2UtbWVyZ2UvaW50ZXJhY3RpdmUiKSwgJnN0KSkKKwkJCXN0YXRlLT5yZWJhc2VfaW50ZXJhY3RpdmVfaW5fcHJvZ3Jlc3MgPSAxOworCQllbHNlCisJCQlzdGF0ZS0+cmViYXNlX2luX3Byb2dyZXNzID0gMTsKKwkJc3RhdGUtPmJyYW5jaCA9IGdldF9icmFuY2god3QsICJyZWJhc2UtbWVyZ2UvaGVhZC1uYW1lIik7CisJCXN0YXRlLT5vbnRvID0gZ2V0X2JyYW5jaCh3dCwgInJlYmFzZS1tZXJnZS9vbnRvIik7CisJfSBlbHNlCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitpbnQgd3Rfc3RhdHVzX2NoZWNrX2Jpc2VjdChjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0LAorCQkJICAgc3RydWN0IHd0X3N0YXR1c19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoIXN0YXQod29ya3RyZWVfZ2l0X3BhdGgod3QsICJCSVNFQ1RfTE9HIiksICZzdCkpIHsKKwkJc3RhdGUtPmJpc2VjdF9pbl9wcm9ncmVzcyA9IDE7CisJCXN0YXRlLT5icmFuY2ggPSBnZXRfYnJhbmNoKHd0LCAiQklTRUNUX1NUQVJUIik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCB3dF9zdGF0dXNfZ2V0X3N0YXRlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJIHN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgKnN0YXRlLAorCQkJIGludCBnZXRfZGV0YWNoZWRfZnJvbSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwllbnVtIHJlcGxheV9hY3Rpb24gYWN0aW9uOworCisJaWYgKCFzdGF0KGdpdF9wYXRoX21lcmdlX2hlYWQociksICZzdCkpIHsKKwkJd3Rfc3RhdHVzX2NoZWNrX3JlYmFzZShOVUxMLCBzdGF0ZSk7CisJCXN0YXRlLT5tZXJnZV9pbl9wcm9ncmVzcyA9IDE7CisJfSBlbHNlIGlmICh3dF9zdGF0dXNfY2hlY2tfcmViYXNlKE5VTEwsIHN0YXRlKSkgeworCQk7CQkvKiBhbGwgc2V0ICovCisJfSBlbHNlIGlmICghc3RhdChnaXRfcGF0aF9jaGVycnlfcGlja19oZWFkKHIpLCAmc3QpICYmCisJCQkhZ2V0X29pZCgiQ0hFUlJZX1BJQ0tfSEVBRCIsICZvaWQpKSB7CisJCXN0YXRlLT5jaGVycnlfcGlja19pbl9wcm9ncmVzcyA9IDE7CisJCW9pZGNweSgmc3RhdGUtPmNoZXJyeV9waWNrX2hlYWRfb2lkLCAmb2lkKTsKKwl9CisJd3Rfc3RhdHVzX2NoZWNrX2Jpc2VjdChOVUxMLCBzdGF0ZSk7CisJaWYgKCFzdGF0KGdpdF9wYXRoX3JldmVydF9oZWFkKHIpLCAmc3QpICYmCisJICAgICFnZXRfb2lkKCJSRVZFUlRfSEVBRCIsICZvaWQpKSB7CisJCXN0YXRlLT5yZXZlcnRfaW5fcHJvZ3Jlc3MgPSAxOworCQlvaWRjcHkoJnN0YXRlLT5yZXZlcnRfaGVhZF9vaWQsICZvaWQpOworCX0KKwlpZiAoIXNlcXVlbmNlcl9nZXRfbGFzdF9jb21tYW5kKHIsICZhY3Rpb24pKSB7CisJCWlmIChhY3Rpb24gPT0gUkVQTEFZX1BJQ0spIHsKKwkJCXN0YXRlLT5jaGVycnlfcGlja19pbl9wcm9ncmVzcyA9IDE7CisJCQlvaWRjcHkoJnN0YXRlLT5jaGVycnlfcGlja19oZWFkX29pZCwgJm51bGxfb2lkKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXRlLT5yZXZlcnRfaW5fcHJvZ3Jlc3MgPSAxOworCQkJb2lkY3B5KCZzdGF0ZS0+cmV2ZXJ0X2hlYWRfb2lkLCAmbnVsbF9vaWQpOworCQl9CisJfQorCWlmIChnZXRfZGV0YWNoZWRfZnJvbSkKKwkJd3Rfc3RhdHVzX2dldF9kZXRhY2hlZF9mcm9tKHIsIHN0YXRlKTsKK30KKworc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF9zdGF0ZShzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWNvbnN0IGNoYXIgKnN0YXRlX2NvbG9yID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisJc3RydWN0IHd0X3N0YXR1c19zdGF0ZSAqc3RhdGUgPSAmcy0+c3RhdGU7CisKKwlpZiAoc3RhdGUtPm1lcmdlX2luX3Byb2dyZXNzKSB7CisJCWlmIChzdGF0ZS0+cmViYXNlX2ludGVyYWN0aXZlX2luX3Byb2dyZXNzKSB7CisJCQlzaG93X3JlYmFzZV9pbmZvcm1hdGlvbihzLCBzdGF0ZV9jb2xvcik7CisJCQlmcHV0cygiXG4iLCBzLT5mcCk7CisJCX0KKwkJc2hvd19tZXJnZV9pbl9wcm9ncmVzcyhzLCBzdGF0ZV9jb2xvcik7CisJfSBlbHNlIGlmIChzdGF0ZS0+YW1faW5fcHJvZ3Jlc3MpCisJCXNob3dfYW1faW5fcHJvZ3Jlc3Mocywgc3RhdGVfY29sb3IpOworCWVsc2UgaWYgKHN0YXRlLT5yZWJhc2VfaW5fcHJvZ3Jlc3MgfHwgc3RhdGUtPnJlYmFzZV9pbnRlcmFjdGl2ZV9pbl9wcm9ncmVzcykKKwkJc2hvd19yZWJhc2VfaW5fcHJvZ3Jlc3Mocywgc3RhdGVfY29sb3IpOworCWVsc2UgaWYgKHN0YXRlLT5jaGVycnlfcGlja19pbl9wcm9ncmVzcykKKwkJc2hvd19jaGVycnlfcGlja19pbl9wcm9ncmVzcyhzLCBzdGF0ZV9jb2xvcik7CisJZWxzZSBpZiAoc3RhdGUtPnJldmVydF9pbl9wcm9ncmVzcykKKwkJc2hvd19yZXZlcnRfaW5fcHJvZ3Jlc3Mocywgc3RhdGVfY29sb3IpOworCWlmIChzdGF0ZS0+YmlzZWN0X2luX3Byb2dyZXNzKQorCQlzaG93X2Jpc2VjdF9pbl9wcm9ncmVzcyhzLCBzdGF0ZV9jb2xvcik7Cit9CisKK3N0YXRpYyB2b2lkIHd0X2xvbmdzdGF0dXNfcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwljb25zdCBjaGFyICpicmFuY2hfY29sb3IgPSBjb2xvcihXVF9TVEFUVVNfT05CUkFOQ0gsIHMpOworCWNvbnN0IGNoYXIgKmJyYW5jaF9zdGF0dXNfY29sb3IgPSBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKTsKKworCWlmIChzLT5icmFuY2gpIHsKKwkJY29uc3QgY2hhciAqb25fd2hhdCA9IF8oIk9uIGJyYW5jaCAiKTsKKwkJY29uc3QgY2hhciAqYnJhbmNoX25hbWUgPSBzLT5icmFuY2g7CisJCWlmICghc3RyY21wKGJyYW5jaF9uYW1lLCAiSEVBRCIpKSB7CisJCQlicmFuY2hfc3RhdHVzX2NvbG9yID0gY29sb3IoV1RfU1RBVFVTX05PQlJBTkNILCBzKTsKKwkJCWlmIChzLT5zdGF0ZS5yZWJhc2VfaW5fcHJvZ3Jlc3MgfHwKKwkJCSAgICBzLT5zdGF0ZS5yZWJhc2VfaW50ZXJhY3RpdmVfaW5fcHJvZ3Jlc3MpIHsKKwkJCQlpZiAocy0+c3RhdGUucmViYXNlX2ludGVyYWN0aXZlX2luX3Byb2dyZXNzKQorCQkJCQlvbl93aGF0ID0gXygiaW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIpOworCQkJCWVsc2UKKwkJCQkJb25fd2hhdCA9IF8oInJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiKTsKKwkJCQlicmFuY2hfbmFtZSA9IHMtPnN0YXRlLm9udG87CisJCQl9IGVsc2UgaWYgKHMtPnN0YXRlLmRldGFjaGVkX2Zyb20pIHsKKwkJCQlicmFuY2hfbmFtZSA9IHMtPnN0YXRlLmRldGFjaGVkX2Zyb207CisJCQkJaWYgKHMtPnN0YXRlLmRldGFjaGVkX2F0KQorCQkJCQlvbl93aGF0ID0gSEVBRF9ERVRBQ0hFRF9BVDsKKwkJCQllbHNlCisJCQkJCW9uX3doYXQgPSBIRUFEX0RFVEFDSEVEX0ZST007CisJCQl9IGVsc2UgeworCQkJCWJyYW5jaF9uYW1lID0gIiI7CisJCQkJb25fd2hhdCA9IF8oIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iKTsKKwkJCX0KKwkJfSBlbHNlCisJCQlza2lwX3ByZWZpeChicmFuY2hfbmFtZSwgInJlZnMvaGVhZHMvIiwgJmJyYW5jaF9uYW1lKTsKKwkJc3RhdHVzX3ByaW50ZihzLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwgIiVzIiwgIiIpOworCQlzdGF0dXNfcHJpbnRmX21vcmUocywgYnJhbmNoX3N0YXR1c19jb2xvciwgIiVzIiwgb25fd2hhdCk7CisJCXN0YXR1c19wcmludGZfbW9yZShzLCBicmFuY2hfY29sb3IsICIlc1xuIiwgYnJhbmNoX25hbWUpOworCQlpZiAoIXMtPmlzX2luaXRpYWwpCisJCQl3dF9sb25nc3RhdHVzX3ByaW50X3RyYWNraW5nKHMpOworCX0KKworCXd0X2xvbmdzdGF0dXNfcHJpbnRfc3RhdGUocyk7CisKKwlpZiAocy0+aXNfaW5pdGlhbCkgeworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiJXMiLCAiIik7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksCisJCQkJIHMtPmNvbW1pdF90ZW1wbGF0ZQorCQkJCSA/IF8oIkluaXRpYWwgY29tbWl0IikKKwkJCQkgOiBfKCJObyBjb21taXRzIHlldCIpKTsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwgIiVzIiwgIiIpOworCX0KKworCXd0X2xvbmdzdGF0dXNfcHJpbnRfdXBkYXRlZChzKTsKKwl3dF9sb25nc3RhdHVzX3ByaW50X3VubWVyZ2VkKHMpOworCXd0X2xvbmdzdGF0dXNfcHJpbnRfY2hhbmdlZChzKTsKKwlpZiAocy0+c3VibW9kdWxlX3N1bW1hcnkgJiYKKwkgICAgKCFzLT5pZ25vcmVfc3VibW9kdWxlX2FyZyB8fAorCSAgICAgc3RyY21wKHMtPmlnbm9yZV9zdWJtb2R1bGVfYXJnLCAiYWxsIikpKSB7CisJCXd0X2xvbmdzdGF0dXNfcHJpbnRfc3VibW9kdWxlX3N1bW1hcnkocywgMCk7ICAvKiBzdGFnZWQgKi8KKwkJd3RfbG9uZ3N0YXR1c19wcmludF9zdWJtb2R1bGVfc3VtbWFyeShzLCAxKTsgIC8qIHVuc3RhZ2VkICovCisJfQorCWlmIChzLT5zaG93X3VudHJhY2tlZF9maWxlcykgeworCQl3dF9sb25nc3RhdHVzX3ByaW50X290aGVyKHMsICZzLT51bnRyYWNrZWQsIF8oIlVudHJhY2tlZCBmaWxlcyIpLCAiYWRkIik7CisJCWlmIChzLT5zaG93X2lnbm9yZWRfbW9kZSkKKwkJCXd0X2xvbmdzdGF0dXNfcHJpbnRfb3RoZXIocywgJnMtPmlnbm9yZWQsIF8oIklnbm9yZWQgZmlsZXMiKSwgImFkZCAtZiIpOworCQlpZiAoYWR2aWNlX3N0YXR1c191X29wdGlvbiAmJiAyMDAwIDwgcy0+dW50cmFja2VkX2luX21zKSB7CisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsICIlcyIsICIiKTsKKwkJCXN0YXR1c19wcmludGZfbG4ocywgR0lUX0NPTE9SX05PUk1BTCwKKwkJCQkJIF8oIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICdzdGF0dXMgLXVubydcbiIKKwkJCQkJICAgIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKwkJCQkJICAgIm5ldyBmaWxlcyB5b3Vyc2VsZiAoc2VlICdnaXQgaGVscCBzdGF0dXMnKS4iKSwKKwkJCQkJIHMtPnVudHJhY2tlZF9pbl9tcyAvIDEwMDAuMCk7CisJCX0KKwl9IGVsc2UgaWYgKHMtPmNvbW1pdHRhYmxlKQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsIF8oIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiKSwKKwkJCXMtPmhpbnRzCisJCQk/IF8oIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiKSA6ICIiKTsKKworCWlmIChzLT52ZXJib3NlKQorCQl3dF9sb25nc3RhdHVzX3ByaW50X3ZlcmJvc2Uocyk7CisJaWYgKCFzLT5jb21taXR0YWJsZSkgeworCQlpZiAocy0+YW1lbmQpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsIF8oIk5vIGNoYW5nZXMiKSk7CisJCWVsc2UgaWYgKHMtPm5vd2FybikKKwkJCTsgLyogbm90aGluZyAqLworCQllbHNlIGlmIChzLT53b3JrZGlyX2RpcnR5KSB7CisJCQlpZiAocy0+aGludHMpCisJCQkJcHJpbnRmKF8oIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICIKKwkJCQkJICIodXNlIFwiZ2l0IGFkZFwiIGFuZC9vciBcImdpdCBjb21taXQgLWFcIilcbiIpKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoXygibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXRcbiIpKTsKKwkJfSBlbHNlIGlmIChzLT51bnRyYWNrZWQubnIpIHsKKwkJCWlmIChzLT5oaW50cykKKwkJCQlwcmludGYoXygibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyAiCisJCQkJCSAicHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIikpOworCQkJZWxzZQorCQkJCXByaW50ZihfKCJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIpKTsKKwkJfSBlbHNlIGlmIChzLT5pc19pbml0aWFsKSB7CisJCQlpZiAocy0+aGludHMpCisJCQkJcHJpbnRmKF8oIm5vdGhpbmcgdG8gY29tbWl0IChjcmVhdGUvY29weSBmaWxlcyAiCisJCQkJCSAiYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIpKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoXygibm90aGluZyB0byBjb21taXRcbiIpKTsKKwkJfSBlbHNlIGlmICghcy0+c2hvd191bnRyYWNrZWRfZmlsZXMpIHsKKwkJCWlmIChzLT5oaW50cykKKwkJCQlwcmludGYoXygibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIpKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoXygibm90aGluZyB0byBjb21taXRcbiIpKTsKKwkJfSBlbHNlCisJCQlwcmludGYoXygibm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhblxuIikpOworCX0KKwlpZihzLT5zaG93X3N0YXNoKQorCQl3dF9sb25nc3RhdHVzX3ByaW50X3N0YXNoX3N1bW1hcnkocyk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3Nob3J0c3RhdHVzX3VubWVyZ2VkKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCwKKwkJCSAgIHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZCA9IGl0LT51dGlsOworCWNvbnN0IGNoYXIgKmhvdyA9ICI/PyI7CisKKwlzd2l0Y2ggKGQtPnN0YWdlbWFzaykgeworCWNhc2UgMTogaG93ID0gIkREIjsgYnJlYWs7IC8qIGJvdGggZGVsZXRlZCAqLworCWNhc2UgMjogaG93ID0gIkFVIjsgYnJlYWs7IC8qIGFkZGVkIGJ5IHVzICovCisJY2FzZSAzOiBob3cgPSAiVUQiOyBicmVhazsgLyogZGVsZXRlZCBieSB0aGVtICovCisJY2FzZSA0OiBob3cgPSAiVUEiOyBicmVhazsgLyogYWRkZWQgYnkgdGhlbSAqLworCWNhc2UgNTogaG93ID0gIkRVIjsgYnJlYWs7IC8qIGRlbGV0ZWQgYnkgdXMgKi8KKwljYXNlIDY6IGhvdyA9ICJBQSI7IGJyZWFrOyAvKiBib3RoIGFkZGVkICovCisJY2FzZSA3OiBob3cgPSAiVVUiOyBicmVhazsgLyogYm90aCBtb2RpZmllZCAqLworCX0KKwljb2xvcl9mcHJpbnRmKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfVU5NRVJHRUQsIHMpLCAiJXMiLCBob3cpOworCWlmIChzLT5udWxsX3Rlcm1pbmF0aW9uKSB7CisJCWZwcmludGYoc3Rkb3V0LCAiICVzJWMiLCBpdC0+c3RyaW5nLCAwKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIG9uZWJ1ZiA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICpvbmU7CisJCW9uZSA9IHF1b3RlX3BhdGgoaXQtPnN0cmluZywgcy0+cHJlZml4LCAmb25lYnVmKTsKKwkJcHJpbnRmKCIgJXNcbiIsIG9uZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvbmVidWYpOworCX0KK30KKworc3RhdGljIHZvaWQgd3Rfc2hvcnRzdGF0dXNfc3RhdHVzKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCwKKwkJCSBzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQgPSBpdC0+dXRpbDsKKworCWlmIChkLT5pbmRleF9zdGF0dXMpCisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19VUERBVEVELCBzKSwgIiVjIiwgZC0+aW5kZXhfc3RhdHVzKTsKKwllbHNlCisJCXB1dGNoYXIoJyAnKTsKKwlpZiAoZC0+d29ya3RyZWVfc3RhdHVzKQorCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfQ0hBTkdFRCwgcyksICIlYyIsIGQtPndvcmt0cmVlX3N0YXR1cyk7CisJZWxzZQorCQlwdXRjaGFyKCcgJyk7CisJcHV0Y2hhcignICcpOworCWlmIChzLT5udWxsX3Rlcm1pbmF0aW9uKSB7CisJCWZwcmludGYoc3Rkb3V0LCAiJXMlYyIsIGl0LT5zdHJpbmcsIDApOworCQlpZiAoZC0+cmVuYW1lX3NvdXJjZSkKKwkJCWZwcmludGYoc3Rkb3V0LCAiJXMlYyIsIGQtPnJlbmFtZV9zb3VyY2UsIDApOworCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgb25lYnVmID0gU1RSQlVGX0lOSVQ7CisJCWNvbnN0IGNoYXIgKm9uZTsKKworCQlpZiAoZC0+cmVuYW1lX3NvdXJjZSkgeworCQkJb25lID0gcXVvdGVfcGF0aChkLT5yZW5hbWVfc291cmNlLCBzLT5wcmVmaXgsICZvbmVidWYpOworCQkJaWYgKCpvbmUgIT0gJyInICYmIHN0cmNocihvbmUsICcgJykgIT0gTlVMTCkgeworCQkJCXB1dGNoYXIoJyInKTsKKwkJCQlzdHJidWZfYWRkY2goJm9uZWJ1ZiwgJyInKTsKKwkJCQlvbmUgPSBvbmVidWYuYnVmOworCQkJfQorCQkJcHJpbnRmKCIlcyAtPiAiLCBvbmUpOworCQkJc3RyYnVmX3JlbGVhc2UoJm9uZWJ1Zik7CisJCX0KKwkJb25lID0gcXVvdGVfcGF0aChpdC0+c3RyaW5nLCBzLT5wcmVmaXgsICZvbmVidWYpOworCQlpZiAoKm9uZSAhPSAnIicgJiYgc3RyY2hyKG9uZSwgJyAnKSAhPSBOVUxMKSB7CisJCQlwdXRjaGFyKCciJyk7CisJCQlzdHJidWZfYWRkY2goJm9uZWJ1ZiwgJyInKTsKKwkJCW9uZSA9IG9uZWJ1Zi5idWY7CisJCX0KKwkJcHJpbnRmKCIlc1xuIiwgb25lKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm9uZWJ1Zik7CisJfQorfQorCitzdGF0aWMgdm9pZCB3dF9zaG9ydHN0YXR1c19vdGhlcihzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQsCisJCQkJIHN0cnVjdCB3dF9zdGF0dXMgKnMsIGNvbnN0IGNoYXIgKnNpZ24pCit7CisJaWYgKHMtPm51bGxfdGVybWluYXRpb24pIHsKKwkJZnByaW50ZihzdGRvdXQsICIlcyAlcyVjIiwgc2lnbiwgaXQtPnN0cmluZywgMCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBvbmVidWYgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqb25lOworCQlvbmUgPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIHMtPnByZWZpeCwgJm9uZWJ1Zik7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19VTlRSQUNLRUQsIHMpLCAiJXMiLCBzaWduKTsKKwkJcHJpbnRmKCIgJXNcbiIsIG9uZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvbmVidWYpOworCX0KK30KKworc3RhdGljIHZvaWQgd3Rfc2hvcnRzdGF0dXNfcHJpbnRfdHJhY2tpbmcoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3QgYnJhbmNoICpicmFuY2g7CisJY29uc3QgY2hhciAqaGVhZGVyX2NvbG9yID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisJY29uc3QgY2hhciAqYnJhbmNoX2NvbG9yX2xvY2FsID0gY29sb3IoV1RfU1RBVFVTX0xPQ0FMX0JSQU5DSCwgcyk7CisJY29uc3QgY2hhciAqYnJhbmNoX2NvbG9yX3JlbW90ZSA9IGNvbG9yKFdUX1NUQVRVU19SRU1PVEVfQlJBTkNILCBzKTsKKworCWNvbnN0IGNoYXIgKmJhc2U7CisJY2hhciAqc2hvcnRfYmFzZTsKKwljb25zdCBjaGFyICpicmFuY2hfbmFtZTsKKwlpbnQgbnVtX291cnMsIG51bV90aGVpcnMsIHN0aTsKKwlpbnQgdXBzdHJlYW1faXNfZ29uZSA9IDA7CisKKwljb2xvcl9mcHJpbnRmKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwgIiMjICIpOworCisJaWYgKCFzLT5icmFuY2gpCisJCXJldHVybjsKKwlicmFuY2hfbmFtZSA9IHMtPmJyYW5jaDsKKworI2RlZmluZSBMQUJFTChzdHJpbmcpIChzLT5ub19nZXR0ZXh0ID8gKHN0cmluZykgOiBfKHN0cmluZykpCisKKwlpZiAocy0+aXNfaW5pdGlhbCkKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgaGVhZGVyX2NvbG9yLCBMQUJFTChOXygiTm8gY29tbWl0cyB5ZXQgb24gIikpKTsKKworCWlmICghc3RyY21wKHMtPmJyYW5jaCwgIkhFQUQiKSkgeworCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfTk9CUkFOQ0gsIHMpLCAiJXMiLAorCQkJICAgICAgTEFCRUwoTl8oIkhFQUQgKG5vIGJyYW5jaCkiKSkpOworCQlnb3RvIGNvbmNsdWRlOworCX0KKworCXNraXBfcHJlZml4KGJyYW5jaF9uYW1lLCAicmVmcy9oZWFkcy8iLCAmYnJhbmNoX25hbWUpOworCisJYnJhbmNoID0gYnJhbmNoX2dldChicmFuY2hfbmFtZSk7CisKKwljb2xvcl9mcHJpbnRmKHMtPmZwLCBicmFuY2hfY29sb3JfbG9jYWwsICIlcyIsIGJyYW5jaF9uYW1lKTsKKworCXN0aSA9IHN0YXRfdHJhY2tpbmdfaW5mbyhicmFuY2gsICZudW1fb3VycywgJm51bV90aGVpcnMsICZiYXNlLAorCQkJCSAwLCBzLT5haGVhZF9iZWhpbmRfZmxhZ3MpOworCWlmIChzdGkgPCAwKSB7CisJCWlmICghYmFzZSkKKwkJCWdvdG8gY29uY2x1ZGU7CisKKwkJdXBzdHJlYW1faXNfZ29uZSA9IDE7CisJfQorCisJc2hvcnRfYmFzZSA9IHNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKGJhc2UsIDApOworCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgIi4uLiIpOworCWNvbG9yX2ZwcmludGYocy0+ZnAsIGJyYW5jaF9jb2xvcl9yZW1vdGUsICIlcyIsIHNob3J0X2Jhc2UpOworCWZyZWUoc2hvcnRfYmFzZSk7CisKKwlpZiAoIXVwc3RyZWFtX2lzX2dvbmUgJiYgIXN0aSkKKwkJZ290byBjb25jbHVkZTsKKworCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgIiBbIik7CisJaWYgKHVwc3RyZWFtX2lzX2dvbmUpIHsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgaGVhZGVyX2NvbG9yLCBMQUJFTChOXygiZ29uZSIpKSk7CisJfSBlbHNlIGlmIChzLT5haGVhZF9iZWhpbmRfZmxhZ3MgPT0gQUhFQURfQkVISU5EX1FVSUNLKSB7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgTEFCRUwoTl8oImRpZmZlcmVudCIpKSk7CisJfSBlbHNlIGlmICghbnVtX291cnMpIHsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgaGVhZGVyX2NvbG9yLCBMQUJFTChOXygiYmVoaW5kICIpKSk7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGJyYW5jaF9jb2xvcl9yZW1vdGUsICIlZCIsIG51bV90aGVpcnMpOworCX0gZWxzZSBpZiAoIW51bV90aGVpcnMpIHsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgaGVhZGVyX2NvbG9yLCBMQUJFTChOXygiYWhlYWQgIikpKTsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgYnJhbmNoX2NvbG9yX2xvY2FsLCAiJWQiLCBudW1fb3Vycyk7CisJfSBlbHNlIHsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgaGVhZGVyX2NvbG9yLCBMQUJFTChOXygiYWhlYWQgIikpKTsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgYnJhbmNoX2NvbG9yX2xvY2FsLCAiJWQiLCBudW1fb3Vycyk7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgIiwgJXMiLCBMQUJFTChOXygiYmVoaW5kICIpKSk7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGJyYW5jaF9jb2xvcl9yZW1vdGUsICIlZCIsIG51bV90aGVpcnMpOworCX0KKworCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgIl0iKTsKKyBjb25jbHVkZToKKwlmcHV0YyhzLT5udWxsX3Rlcm1pbmF0aW9uID8gJ1wwJyA6ICdcbicsIHMtPmZwKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc2hvcnRzdGF0dXNfcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisKKwlpZiAocy0+c2hvd19icmFuY2gpCisJCXd0X3Nob3J0c3RhdHVzX3ByaW50X3RyYWNraW5nKHMpOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdCwgJnMtPmNoYW5nZSkgeworCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkID0gaXQtPnV0aWw7CisKKwkJaWYgKGQtPnN0YWdlbWFzaykKKwkJCXd0X3Nob3J0c3RhdHVzX3VubWVyZ2VkKGl0LCBzKTsKKwkJZWxzZQorCQkJd3Rfc2hvcnRzdGF0dXNfc3RhdHVzKGl0LCBzKTsKKwl9CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdCwgJnMtPnVudHJhY2tlZCkKKwkJd3Rfc2hvcnRzdGF0dXNfb3RoZXIoaXQsIHMsICI/PyIpOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdCwgJnMtPmlnbm9yZWQpCisJCXd0X3Nob3J0c3RhdHVzX290aGVyKGl0LCBzLCAiISEiKTsKK30KKworc3RhdGljIHZvaWQgd3RfcG9yY2VsYWluX3ByaW50KHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJcy0+dXNlX2NvbG9yID0gMDsKKwlzLT5yZWxhdGl2ZV9wYXRocyA9IDA7CisJcy0+cHJlZml4ID0gTlVMTDsKKwlzLT5ub19nZXR0ZXh0ID0gMTsKKwl3dF9zaG9ydHN0YXR1c19wcmludChzKTsKK30KKworLyoKKyAqIFByaW50IGJyYW5jaCBpbmZvcm1hdGlvbiBmb3IgcG9yY2VsYWluIHYyIG91dHB1dC4gIFRoZXNlIGxpbmVzCisgKiBhcmUgcHJpbnRlZCB3aGVuIHRoZSAnLS1icmFuY2gnIHBhcmFtZXRlciBpcyBnaXZlbi4KKyAqCisgKiAgICAjIGJyYW5jaC5vaWQgPGNvbW1pdD48ZW9sPgorICogICAgIyBicmFuY2guaGVhZCA8aGVhZD48ZW9sPgorICogICBbIyBicmFuY2gudXBzdHJlYW0gPHVwc3RyZWFtPjxlb2w+CisgKiAgIFsjIGJyYW5jaC5hYiArPGFoZWFkPiAtPGJlaGluZD48ZW9sPl1dCisgKgorICogICAgICA8Y29tbWl0PiA6Oj0gdGhlIGN1cnJlbnQgY29tbWl0IGhhc2ggb3IgdGhlIHRoZSBsaXRlcmFsCisgKiAgICAgICAgICAgICAgICAgICAiKGluaXRpYWwpIiB0byBpbmRpY2F0ZSBhbiBpbml0aWFsaXplZCByZXBvCisgKiAgICAgICAgICAgICAgICAgICB3aXRoIG5vIGNvbW1pdHMuCisgKgorICogICAgICAgIDxoZWFkPiA6Oj0gPGJyYW5jaF9uYW1lPiB0aGUgY3VycmVudCBicmFuY2ggbmFtZSBvcgorICogICAgICAgICAgICAgICAgICAgIihkZXRhY2hlZCkiIGxpdGVyYWwgd2hlbiBkZXRhY2hlZCBoZWFkIG9yCisgKiAgICAgICAgICAgICAgICAgICAiKHVua25vd24pIiB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZy4KKyAqCisgKiAgICA8dXBzdHJlYW0+IDo6PSB0aGUgdXBzdHJlYW0gYnJhbmNoIG5hbWUsIHdoZW4gc2V0LgorICoKKyAqICAgICAgIDxhaGVhZD4gOjo9IGludGVnZXIgYWhlYWQgdmFsdWUgb3IgJz8nLgorICoKKyAqICAgICAgPGJlaGluZD4gOjo9IGludGVnZXIgYmVoaW5kIHZhbHVlIG9yICc/Jy4KKyAqCisgKiBUaGUgZW5kLW9mLWxpbmUgaXMgZGVmaW5lZCBieSB0aGUgLXogZmxhZy4KKyAqCisgKiAgICAgICAgICAgICAgICAgPGVvbD4gOjo9IE5VTCB3aGVuIC16LAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBMRiB3aGVuIE5PVCAtei4KKyAqCisgKiBXaGVuIGFuIHVwc3RyZWFtIGlzIHNldCBhbmQgcHJlc2VudCwgdGhlICdicmFuY2guYWInIGxpbmUgd2lsbAorICogYmUgcHJpbnRlZCB3aXRoIHRoZSBhaGVhZC9iZWhpbmQgY291bnRzIGZvciB0aGUgYnJhbmNoIGFuZCB0aGUKKyAqIHVwc3RyZWFtLiAgV2hlbiBBSEVBRF9CRUhJTkRfUVVJQ0sgaXMgcmVxdWVzdGVkIGFuZCB0aGUgYnJhbmNoZXMKKyAqIGFyZSBkaWZmZXJlbnQsICc/JyB3aWxsIGJlIHN1YnN0aXR1dGVkIGZvciB0aGUgYWN0dWFsIGNvdW50LgorICovCitzdGF0aWMgdm9pZCB3dF9wb3JjZWxhaW5fdjJfcHJpbnRfdHJhY2tpbmcoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3QgYnJhbmNoICpicmFuY2g7CisJY29uc3QgY2hhciAqYmFzZTsKKwljb25zdCBjaGFyICpicmFuY2hfbmFtZTsKKwlpbnQgYWJfaW5mbywgbnJfYWhlYWQsIG5yX2JlaGluZDsKKwljaGFyIGVvbCA9IHMtPm51bGxfdGVybWluYXRpb24gPyAnXDAnIDogJ1xuJzsKKworCWZwcmludGYocy0+ZnAsICIjIGJyYW5jaC5vaWQgJXMlYyIsCisJCQkocy0+aXNfaW5pdGlhbCA/ICIoaW5pdGlhbCkiIDogb2lkX3RvX2hleCgmcy0+b2lkX2NvbW1pdCkpLAorCQkJZW9sKTsKKworCWlmICghcy0+YnJhbmNoKQorCQlmcHJpbnRmKHMtPmZwLCAiIyBicmFuY2guaGVhZCAlcyVjIiwgIih1bmtub3duKSIsIGVvbCk7CisJZWxzZSB7CisJCWlmICghc3RyY21wKHMtPmJyYW5jaCwgIkhFQUQiKSkgeworCQkJZnByaW50ZihzLT5mcCwgIiMgYnJhbmNoLmhlYWQgJXMlYyIsICIoZGV0YWNoZWQpIiwgZW9sKTsKKworCQkJaWYgKHMtPnN0YXRlLnJlYmFzZV9pbl9wcm9ncmVzcyB8fAorCQkJICAgIHMtPnN0YXRlLnJlYmFzZV9pbnRlcmFjdGl2ZV9pbl9wcm9ncmVzcykKKwkJCQlicmFuY2hfbmFtZSA9IHMtPnN0YXRlLm9udG87CisJCQllbHNlIGlmIChzLT5zdGF0ZS5kZXRhY2hlZF9mcm9tKQorCQkJCWJyYW5jaF9uYW1lID0gcy0+c3RhdGUuZGV0YWNoZWRfZnJvbTsKKwkJCWVsc2UKKwkJCQlicmFuY2hfbmFtZSA9ICIiOworCQl9IGVsc2UgeworCQkJYnJhbmNoX25hbWUgPSBOVUxMOworCQkJc2tpcF9wcmVmaXgocy0+YnJhbmNoLCAicmVmcy9oZWFkcy8iLCAmYnJhbmNoX25hbWUpOworCisJCQlmcHJpbnRmKHMtPmZwLCAiIyBicmFuY2guaGVhZCAlcyVjIiwgYnJhbmNoX25hbWUsIGVvbCk7CisJCX0KKworCQkvKiBMb29rdXAgc3RhdHMgb24gdGhlIHVwc3RyZWFtIHRyYWNraW5nIGJyYW5jaCwgaWYgc2V0LiAqLworCQlicmFuY2ggPSBicmFuY2hfZ2V0KGJyYW5jaF9uYW1lKTsKKwkJYmFzZSA9IE5VTEw7CisJCWFiX2luZm8gPSBzdGF0X3RyYWNraW5nX2luZm8oYnJhbmNoLCAmbnJfYWhlYWQsICZucl9iZWhpbmQsCisJCQkJCSAgICAgJmJhc2UsIDAsIHMtPmFoZWFkX2JlaGluZF9mbGFncyk7CisJCWlmIChiYXNlKSB7CisJCQliYXNlID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYoYmFzZSwgMCk7CisJCQlmcHJpbnRmKHMtPmZwLCAiIyBicmFuY2gudXBzdHJlYW0gJXMlYyIsIGJhc2UsIGVvbCk7CisJCQlmcmVlKChjaGFyICopYmFzZSk7CisKKwkJCWlmIChhYl9pbmZvID4gMCkgeworCQkJCS8qIGRpZmZlcmVudCAqLworCQkJCWlmIChucl9haGVhZCB8fCBucl9iZWhpbmQpCisJCQkJCWZwcmludGYocy0+ZnAsICIjIGJyYW5jaC5hYiArJWQgLSVkJWMiLAorCQkJCQkJbnJfYWhlYWQsIG5yX2JlaGluZCwgZW9sKTsKKwkJCQllbHNlCisJCQkJCWZwcmludGYocy0+ZnAsICIjIGJyYW5jaC5hYiArPyAtPyVjIiwKKwkJCQkJCWVvbCk7CisJCQl9IGVsc2UgaWYgKCFhYl9pbmZvKSB7CisJCQkJLyogc2FtZSAqLworCQkJCWZwcmludGYocy0+ZnAsICIjIGJyYW5jaC5hYiArMCAtMCVjIiwgZW9sKTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAqIENvbnZlcnQgdmFyaW91cyBzdWJtb2R1bGUgc3RhdHVzIHZhbHVlcyBpbnRvIGEKKyAqIGZpeGVkLWxlbmd0aCBzdHJpbmcgb2YgY2hhcmFjdGVycyBpbiB0aGUgYnVmZmVyIHByb3ZpZGVkLgorICovCitzdGF0aWMgdm9pZCB3dF9wb3JjZWxhaW5fdjJfc3VibW9kdWxlX3N0YXRlKAorCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQsCisJY2hhciBzdWJbNV0pCit7CisJaWYgKFNfSVNHSVRMSU5LKGQtPm1vZGVfaGVhZCkgfHwKKwkJU19JU0dJVExJTksoZC0+bW9kZV9pbmRleCkgfHwKKwkJU19JU0dJVExJTksoZC0+bW9kZV93b3JrdHJlZSkpIHsKKwkJc3ViWzBdID0gJ1MnOworCQlzdWJbMV0gPSBkLT5uZXdfc3VibW9kdWxlX2NvbW1pdHMgPyAnQycgOiAnLic7CisJCXN1YlsyXSA9IChkLT5kaXJ0eV9zdWJtb2R1bGUgJiBESVJUWV9TVUJNT0RVTEVfTU9ESUZJRUQpID8gJ00nIDogJy4nOworCQlzdWJbM10gPSAoZC0+ZGlydHlfc3VibW9kdWxlICYgRElSVFlfU1VCTU9EVUxFX1VOVFJBQ0tFRCkgPyAnVScgOiAnLic7CisJfSBlbHNlIHsKKwkJc3ViWzBdID0gJ04nOworCQlzdWJbMV0gPSAnLic7CisJCXN1YlsyXSA9ICcuJzsKKwkJc3ViWzNdID0gJy4nOworCX0KKwlzdWJbNF0gPSAwOworfQorCisvKgorICogRml4LXVwIGNoYW5nZWQgZW50cmllcyBiZWZvcmUgd2UgcHJpbnQgdGhlbS4KKyAqLworc3RhdGljIHZvaWQgd3RfcG9yY2VsYWluX3YyX2ZpeF91cF9jaGFuZ2VkKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCkKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkID0gaXQtPnV0aWw7CisKKwlpZiAoIWQtPmluZGV4X3N0YXR1cykgeworCQkvKgorCQkgKiBUaGlzIGVudHJ5IGlzIHVuY2hhbmdlZCBpbiB0aGUgaW5kZXggKHJlbGF0aXZlIHRvIHRoZSBoZWFkKS4KKwkJICogVGhlcmVmb3JlLCB0aGUgY29sbGVjdF91cGRhdGVkX2NiIHdhcyBuZXZlciBjYWxsZWQgZm9yIHRoaXMKKwkJICogZW50cnkgKGR1cmluZyB0aGUgaGVhZC12cy1pbmRleCBzY2FuKSBhbmQgc28gdGhlIGhlYWQgY29sdW1uCisJCSAqIGZpZWxkcyB3ZXJlIG5ldmVyIHNldC4KKwkJICoKKwkJICogV2UgbXVzdCBoYXZlIGRhdGEgZm9yIHRoZSBpbmRleCBjb2x1bW4gKGZyb20gdGhlCisJCSAqIGluZGV4LXZzLXdvcmt0cmVlIHNjYW4gKG90aGVyd2lzZSwgdGhpcyBlbnRyeSBzaG91bGQgbm90IGJlCisJCSAqIGluIHRoZSBsaXN0IG9mIGNoYW5nZXMpKS4KKwkJICoKKwkJICogQ29weSBpbmRleCBjb2x1bW4gZmllbGRzIHRvIHRoZSBoZWFkIGNvbHVtbiwgc28gdGhhdCBvdXIKKwkJICogb3V0cHV0IGxvb2tzIGNvbXBsZXRlLgorCQkgKi8KKwkJYXNzZXJ0KGQtPm1vZGVfaGVhZCA9PSAwKTsKKwkJZC0+bW9kZV9oZWFkID0gZC0+bW9kZV9pbmRleDsKKwkJb2lkY3B5KCZkLT5vaWRfaGVhZCwgJmQtPm9pZF9pbmRleCk7CisJfQorCisJaWYgKCFkLT53b3JrdHJlZV9zdGF0dXMpIHsKKwkJLyoKKwkJICogVGhpcyBlbnRyeSBpcyB1bmNoYW5nZWQgaW4gdGhlIHdvcmt0cmVlIChyZWxhdGl2ZSB0byB0aGUgaW5kZXgpLgorCQkgKiBUaGVyZWZvcmUsIHRoZSBjb2xsZWN0X2NoYW5nZWRfY2Igd2FzIG5ldmVyIGNhbGxlZCBmb3IgdGhpcyBlbnRyeQorCQkgKiAoZHVyaW5nIHRoZSBpbmRleC12cy13b3JrdHJlZSBzY2FuKSBhbmQgc28gdGhlIHdvcmt0cmVlIGNvbHVtbgorCQkgKiBmaWVsZHMgd2VyZSBuZXZlciBzZXQuCisJCSAqCisJCSAqIFdlIG11c3QgaGF2ZSBkYXRhIGZvciB0aGUgaW5kZXggY29sdW1uIChmcm9tIHRoZSBoZWFkLXZzLWluZGV4CisJCSAqIHNjYW4pLgorCQkgKgorCQkgKiBDb3B5IHRoZSBpbmRleCBjb2x1bW4gZmllbGRzIHRvIHRoZSB3b3JrdHJlZSBjb2x1bW4gc28gdGhhdAorCQkgKiBvdXIgb3V0cHV0IGxvb2tzIGNvbXBsZXRlLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgd2Ugb25seSBoYXZlIGEgbW9kZSBmaWVsZCBpbiB0aGUgd29ya3RyZWUgY29sdW1uCisJCSAqIGJlY2F1c2UgdGhlIHNjYW4gY29kZSB0cmllcyByZWFsbHkgaGFyZCB0byBub3QgaGF2ZSB0byBjb21wdXRlIGl0LgorCQkgKi8KKwkJYXNzZXJ0KGQtPm1vZGVfd29ya3RyZWUgPT0gMCk7CisJCWQtPm1vZGVfd29ya3RyZWUgPSBkLT5tb2RlX2luZGV4OworCX0KK30KKworLyoKKyAqIFByaW50IHBvcmNlbGFpbiB2MiBpbmZvIGZvciB0cmFja2VkIGVudHJpZXMgd2l0aCBjaGFuZ2VzLgorICovCitzdGF0aWMgdm9pZCB3dF9wb3JjZWxhaW5fdjJfcHJpbnRfY2hhbmdlZF9lbnRyeSgKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQsCisJc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkID0gaXQtPnV0aWw7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9mcm9tID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcGF0aCA9IE5VTEw7CisJY29uc3QgY2hhciAqcGF0aF9mcm9tID0gTlVMTDsKKwljaGFyIGtleVszXTsKKwljaGFyIHN1Ym1vZHVsZV90b2tlbls1XTsKKwljaGFyIHNlcF9jaGFyLCBlb2xfY2hhcjsKKworCXd0X3BvcmNlbGFpbl92Ml9maXhfdXBfY2hhbmdlZChpdCk7CisJd3RfcG9yY2VsYWluX3YyX3N1Ym1vZHVsZV9zdGF0ZShkLCBzdWJtb2R1bGVfdG9rZW4pOworCisJa2V5WzBdID0gZC0+aW5kZXhfc3RhdHVzID8gZC0+aW5kZXhfc3RhdHVzIDogJy4nOworCWtleVsxXSA9IGQtPndvcmt0cmVlX3N0YXR1cyA/IGQtPndvcmt0cmVlX3N0YXR1cyA6ICcuJzsKKwlrZXlbMl0gPSAwOworCisJaWYgKHMtPm51bGxfdGVybWluYXRpb24pIHsKKwkJLyoKKwkJICogSW4gLXogbW9kZSwgd2UgRE8gTk9UIEMtcXVvdGUgcGF0aG5hbWVzLiAgQ3VycmVudCBwYXRoIGlzIEFMV0FZUyBmaXJzdC4KKwkJICogQSBzaW5nbGUgTlVMIGNoYXJhY3RlciBzZXBhcmF0ZXMgdGhlbS4KKwkJICovCisJCXNlcF9jaGFyID0gJ1wwJzsKKwkJZW9sX2NoYXIgPSAnXDAnOworCQlwYXRoID0gaXQtPnN0cmluZzsKKwkJcGF0aF9mcm9tID0gZC0+cmVuYW1lX3NvdXJjZTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBQYXRoKHMpIGFyZSBDLXF1b3RlZCBpZiBuZWNlc3NhcnkuIEN1cnJlbnQgcGF0aCBpcyBBTFdBWVMgZmlyc3QuCisJCSAqIFRoZSBzb3VyY2UgcGF0aCBpcyBvbmx5IHByZXNlbnQgd2hlbiBuZWNlc3NhcnkuCisJCSAqIEEgc2luZ2xlIFRBQiBzZXBhcmF0ZXMgdGhlbSAoYmVjYXVzZSBwYXRocyBjYW4gY29udGFpbiBzcGFjZXMKKwkJICogd2hpY2ggYXJlIG5vdCBlc2NhcGVkIGFuZCBDLXF1b3RpbmcgZG9lcyBlc2NhcGUgVEFCIGNoYXJhY3RlcnMpLgorCQkgKi8KKwkJc2VwX2NoYXIgPSAnXHQnOworCQllb2xfY2hhciA9ICdcbic7CisJCXBhdGggPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIHMtPnByZWZpeCwgJmJ1Zik7CisJCWlmIChkLT5yZW5hbWVfc291cmNlKQorCQkJcGF0aF9mcm9tID0gcXVvdGVfcGF0aChkLT5yZW5hbWVfc291cmNlLCBzLT5wcmVmaXgsICZidWZfZnJvbSk7CisJfQorCisJaWYgKHBhdGhfZnJvbSkKKwkJZnByaW50ZihzLT5mcCwgIjIgJXMgJXMgJTA2byAlMDZvICUwNm8gJXMgJXMgJWMlZCAlcyVjJXMlYyIsCisJCQkJa2V5LCBzdWJtb2R1bGVfdG9rZW4sCisJCQkJZC0+bW9kZV9oZWFkLCBkLT5tb2RlX2luZGV4LCBkLT5tb2RlX3dvcmt0cmVlLAorCQkJCW9pZF90b19oZXgoJmQtPm9pZF9oZWFkKSwgb2lkX3RvX2hleCgmZC0+b2lkX2luZGV4KSwKKwkJCQlkLT5yZW5hbWVfc3RhdHVzLCBkLT5yZW5hbWVfc2NvcmUsCisJCQkJcGF0aCwgc2VwX2NoYXIsIHBhdGhfZnJvbSwgZW9sX2NoYXIpOworCWVsc2UKKwkJZnByaW50ZihzLT5mcCwgIjEgJXMgJXMgJTA2byAlMDZvICUwNm8gJXMgJXMgJXMlYyIsCisJCQkJa2V5LCBzdWJtb2R1bGVfdG9rZW4sCisJCQkJZC0+bW9kZV9oZWFkLCBkLT5tb2RlX2luZGV4LCBkLT5tb2RlX3dvcmt0cmVlLAorCQkJCW9pZF90b19oZXgoJmQtPm9pZF9oZWFkKSwgb2lkX3RvX2hleCgmZC0+b2lkX2luZGV4KSwKKwkJCQlwYXRoLCBlb2xfY2hhcik7CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmX2Zyb20pOworfQorCisvKgorICogUHJpbnQgcG9yY2VsYWluIHYyIHN0YXR1cyBpbmZvIGZvciB1bm1lcmdlZCBlbnRyaWVzLgorICovCitzdGF0aWMgdm9pZCB3dF9wb3JjZWxhaW5fdjJfcHJpbnRfdW5tZXJnZWRfZW50cnkoCisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0LAorCXN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZCA9IGl0LT51dGlsOworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlID0gcy0+cmVwby0+aW5kZXg7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1Zl9pbmRleCA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnBhdGhfaW5kZXggPSBOVUxMOworCWludCBwb3MsIHN0YWdlLCBzdW07CisJc3RydWN0IHsKKwkJaW50IG1vZGU7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCX0gc3RhZ2VzWzNdOworCWNoYXIgKmtleTsKKwljaGFyIHN1Ym1vZHVsZV90b2tlbls1XTsKKwljaGFyIHVubWVyZ2VkX3ByZWZpeCA9ICd1JzsKKwljaGFyIGVvbF9jaGFyID0gcy0+bnVsbF90ZXJtaW5hdGlvbiA/ICdcMCcgOiAnXG4nOworCisJd3RfcG9yY2VsYWluX3YyX3N1Ym1vZHVsZV9zdGF0ZShkLCBzdWJtb2R1bGVfdG9rZW4pOworCisJc3dpdGNoIChkLT5zdGFnZW1hc2spIHsKKwljYXNlIDE6IGtleSA9ICJERCI7IGJyZWFrOyAvKiBib3RoIGRlbGV0ZWQgKi8KKwljYXNlIDI6IGtleSA9ICJBVSI7IGJyZWFrOyAvKiBhZGRlZCBieSB1cyAqLworCWNhc2UgMzoga2V5ID0gIlVEIjsgYnJlYWs7IC8qIGRlbGV0ZWQgYnkgdGhlbSAqLworCWNhc2UgNDoga2V5ID0gIlVBIjsgYnJlYWs7IC8qIGFkZGVkIGJ5IHRoZW0gKi8KKwljYXNlIDU6IGtleSA9ICJEVSI7IGJyZWFrOyAvKiBkZWxldGVkIGJ5IHVzICovCisJY2FzZSA2OiBrZXkgPSAiQUEiOyBicmVhazsgLyogYm90aCBhZGRlZCAqLworCWNhc2UgNzoga2V5ID0gIlVVIjsgYnJlYWs7IC8qIGJvdGggbW9kaWZpZWQgKi8KKwlkZWZhdWx0OgorCQlCVUcoInVuaGFuZGxlZCB1bm1lcmdlZCBzdGF0dXMgJXgiLCBkLT5zdGFnZW1hc2spOworCX0KKworCS8qCisJICogRGlzcmVnYXJkIGQuYXV4LnBvcmNlbGFpbl92MiBkYXRhIHRoYXQgd2UgYWNjdW11bGF0ZWQKKwkgKiBmb3IgdGhlIGhlYWQgYW5kIGluZGV4IGNvbHVtbnMgZHVyaW5nIHRoZSBzY2FucyBhbmQKKwkgKiByZXBsYWNlIHdpdGggdGhlIGFjdHVhbCBzdGFnZSBkYXRhLgorCSAqCisJICogTm90ZSB0aGF0IHRoaXMgaXMgYSBsYXN0LW9uZS13aW5zIGZvciBlYWNoIHRoZSBpbmRpdmlkdWFsCisJICogc3RhZ2UgWzEyM10gY29sdW1ucyBpbiB0aGUgZXZlbnQgb2YgbXVsdGlwbGUgY2FjaGUgZW50cmllcworCSAqIGZvciBzYW1lIHN0YWdlLgorCSAqLworCW1lbXNldChzdGFnZXMsIDAsIHNpemVvZihzdGFnZXMpKTsKKwlzdW0gPSAwOworCXBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgaXQtPnN0cmluZywgc3RybGVuKGl0LT5zdHJpbmcpKTsKKwlhc3NlcnQocG9zIDwgMCk7CisJcG9zID0gLXBvcy0xOworCXdoaWxlIChwb3MgPCBpc3RhdGUtPmNhY2hlX25yKSB7CisJCWNlID0gaXN0YXRlLT5jYWNoZVtwb3MrK107CisJCXN0YWdlID0gY2Vfc3RhZ2UoY2UpOworCQlpZiAoc3RyY21wKGNlLT5uYW1lLCBpdC0+c3RyaW5nKSB8fCAhc3RhZ2UpCisJCQlicmVhazsKKwkJc3RhZ2VzW3N0YWdlIC0gMV0ubW9kZSA9IGNlLT5jZV9tb2RlOworCQlvaWRjcHkoJnN0YWdlc1tzdGFnZSAtIDFdLm9pZCwgJmNlLT5vaWQpOworCQlzdW0gfD0gKDEgPDwgKHN0YWdlIC0gMSkpOworCX0KKwlpZiAoc3VtICE9IGQtPnN0YWdlbWFzaykKKwkJQlVHKCJvYnNlcnZlZCBzdGFnZW1hc2sgMHgleCAhPSBleHBlY3RlZCBzdGFnZW1hc2sgMHgleCIsIHN1bSwgZC0+c3RhZ2VtYXNrKTsKKworCWlmIChzLT5udWxsX3Rlcm1pbmF0aW9uKQorCQlwYXRoX2luZGV4ID0gaXQtPnN0cmluZzsKKwllbHNlCisJCXBhdGhfaW5kZXggPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIHMtPnByZWZpeCwgJmJ1Zl9pbmRleCk7CisKKwlmcHJpbnRmKHMtPmZwLCAiJWMgJXMgJXMgJTA2byAlMDZvICUwNm8gJTA2byAlcyAlcyAlcyAlcyVjIiwKKwkJCXVubWVyZ2VkX3ByZWZpeCwga2V5LCBzdWJtb2R1bGVfdG9rZW4sCisJCQlzdGFnZXNbMF0ubW9kZSwgLyogc3RhZ2UgMSAqLworCQkJc3RhZ2VzWzFdLm1vZGUsIC8qIHN0YWdlIDIgKi8KKwkJCXN0YWdlc1syXS5tb2RlLCAvKiBzdGFnZSAzICovCisJCQlkLT5tb2RlX3dvcmt0cmVlLAorCQkJb2lkX3RvX2hleCgmc3RhZ2VzWzBdLm9pZCksIC8qIHN0YWdlIDEgKi8KKwkJCW9pZF90b19oZXgoJnN0YWdlc1sxXS5vaWQpLCAvKiBzdGFnZSAyICovCisJCQlvaWRfdG9faGV4KCZzdGFnZXNbMl0ub2lkKSwgLyogc3RhZ2UgMyAqLworCQkJcGF0aF9pbmRleCwKKwkJCWVvbF9jaGFyKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfaW5kZXgpOworfQorCisvKgorICogUHJpbnQgcG9yY2VsYWluIFYyIHN0YXR1cyBpbmZvIGZvciB1bnRyYWNrZWQgYW5kIGlnbm9yZWQgZW50cmllcy4KKyAqLworc3RhdGljIHZvaWQgd3RfcG9yY2VsYWluX3YyX3ByaW50X290aGVyKAorCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCwKKwlzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCWNoYXIgcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcGF0aDsKKwljaGFyIGVvbF9jaGFyOworCisJaWYgKHMtPm51bGxfdGVybWluYXRpb24pIHsKKwkJcGF0aCA9IGl0LT5zdHJpbmc7CisJCWVvbF9jaGFyID0gJ1wwJzsKKwl9IGVsc2UgeworCQlwYXRoID0gcXVvdGVfcGF0aChpdC0+c3RyaW5nLCBzLT5wcmVmaXgsICZidWYpOworCQllb2xfY2hhciA9ICdcbic7CisJfQorCisJZnByaW50ZihzLT5mcCwgIiVjICVzJWMiLCBwcmVmaXgsIHBhdGgsIGVvbF9jaGFyKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCisvKgorICogUHJpbnQgcG9yY2VsYWluIFYyIHN0YXR1cy4KKyAqCisgKiBbPHYyX2JyYW5jaD5dCisgKiBbPHYyX2NoYW5nZWRfaXRlbXM+XSoKKyAqIFs8djJfdW5tZXJnZWRfaXRlbXM+XSoKKyAqIFs8djJfdW50cmFja2VkX2l0ZW1zPl0qCisgKiBbPHYyX2lnbm9yZWRfaXRlbXM+XSoKKyAqCisgKi8KK3N0YXRpYyB2b2lkIHd0X3BvcmNlbGFpbl92Ml9wcmludChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCWludCBpOworCisJaWYgKHMtPnNob3dfYnJhbmNoKQorCQl3dF9wb3JjZWxhaW5fdjJfcHJpbnRfdHJhY2tpbmcocyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+Y2hhbmdlLm5yOyBpKyspIHsKKwkJaXQgPSAmKHMtPmNoYW5nZS5pdGVtc1tpXSk7CisJCWQgPSBpdC0+dXRpbDsKKwkJaWYgKCFkLT5zdGFnZW1hc2spCisJCQl3dF9wb3JjZWxhaW5fdjJfcHJpbnRfY2hhbmdlZF9lbnRyeShpdCwgcyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCWl0ID0gJihzLT5jaGFuZ2UuaXRlbXNbaV0pOworCQlkID0gaXQtPnV0aWw7CisJCWlmIChkLT5zdGFnZW1hc2spCisJCQl3dF9wb3JjZWxhaW5fdjJfcHJpbnRfdW5tZXJnZWRfZW50cnkoaXQsIHMpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzLT51bnRyYWNrZWQubnI7IGkrKykgeworCQlpdCA9ICYocy0+dW50cmFja2VkLml0ZW1zW2ldKTsKKwkJd3RfcG9yY2VsYWluX3YyX3ByaW50X290aGVyKGl0LCBzLCAnPycpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzLT5pZ25vcmVkLm5yOyBpKyspIHsKKwkJaXQgPSAmKHMtPmlnbm9yZWQuaXRlbXNbaV0pOworCQl3dF9wb3JjZWxhaW5fdjJfcHJpbnRfb3RoZXIoaXQsIHMsICchJyk7CisJfQorfQorCit2b2lkIHd0X3N0YXR1c19wcmludChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXRyYWNlMl9kYXRhX2ludG1heCgic3RhdHVzIiwgcy0+cmVwbywgImNvdW50L2NoYW5nZWQiLCBzLT5jaGFuZ2UubnIpOworCXRyYWNlMl9kYXRhX2ludG1heCgic3RhdHVzIiwgcy0+cmVwbywgImNvdW50L3VudHJhY2tlZCIsCisJCQkgICBzLT51bnRyYWNrZWQubnIpOworCXRyYWNlMl9kYXRhX2ludG1heCgic3RhdHVzIiwgcy0+cmVwbywgImNvdW50L2lnbm9yZWQiLCBzLT5pZ25vcmVkLm5yKTsKKworCXRyYWNlMl9yZWdpb25fZW50ZXIoInN0YXR1cyIsICJwcmludCIsIHMtPnJlcG8pOworCisJc3dpdGNoIChzLT5zdGF0dXNfZm9ybWF0KSB7CisJY2FzZSBTVEFUVVNfRk9STUFUX1NIT1JUOgorCQl3dF9zaG9ydHN0YXR1c19wcmludChzKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTjoKKwkJd3RfcG9yY2VsYWluX3ByaW50KHMpOworCQlicmVhazsKKwljYXNlIFNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOX1YyOgorCQl3dF9wb3JjZWxhaW5fdjJfcHJpbnQocyk7CisJCWJyZWFrOworCWNhc2UgU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRDoKKwkJQlVHKCJmaW5hbGl6ZV9kZWZlcnJlZF9jb25maWcoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCIpOworCQlicmVhazsKKwljYXNlIFNUQVRVU19GT1JNQVRfTk9ORToKKwljYXNlIFNUQVRVU19GT1JNQVRfTE9ORzoKKwkJd3RfbG9uZ3N0YXR1c19wcmludChzKTsKKwkJYnJlYWs7CisJfQorCisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgic3RhdHVzIiwgInByaW50Iiwgcy0+cmVwbyk7Cit9CisKKy8qKgorICogUmV0dXJucyAxIGlmIHRoZXJlIGFyZSB1bnN0YWdlZCBjaGFuZ2VzLCAwIG90aGVyd2lzZS4KKyAqLworaW50IGhhc191bnN0YWdlZF9jaGFuZ2VzKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBpbnQgaWdub3JlX3N1Ym1vZHVsZXMpCit7CisJc3RydWN0IHJldl9pbmZvIHJldl9pbmZvOworCWludCByZXN1bHQ7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHIsICZyZXZfaW5mbywgTlVMTCk7CisJaWYgKGlnbm9yZV9zdWJtb2R1bGVzKSB7CisJCXJldl9pbmZvLmRpZmZvcHQuZmxhZ3MuaWdub3JlX3N1Ym1vZHVsZXMgPSAxOworCQlyZXZfaW5mby5kaWZmb3B0LmZsYWdzLm92ZXJyaWRlX3N1Ym1vZHVsZV9jb25maWcgPSAxOworCX0KKwlyZXZfaW5mby5kaWZmb3B0LmZsYWdzLnF1aWNrID0gMTsKKwlkaWZmX3NldHVwX2RvbmUoJnJldl9pbmZvLmRpZmZvcHQpOworCXJlc3VsdCA9IHJ1bl9kaWZmX2ZpbGVzKCZyZXZfaW5mbywgMCk7CisJcmV0dXJuIGRpZmZfcmVzdWx0X2NvZGUoJnJldl9pbmZvLmRpZmZvcHQsIHJlc3VsdCk7Cit9CisKKy8qKgorICogUmV0dXJucyAxIGlmIHRoZXJlIGFyZSB1bmNvbW1pdHRlZCBjaGFuZ2VzLCAwIG90aGVyd2lzZS4KKyAqLworaW50IGhhc191bmNvbW1pdHRlZF9jaGFuZ2VzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgIGludCBpZ25vcmVfc3VibW9kdWxlcykKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2X2luZm87CisJaW50IHJlc3VsdDsKKworCWlmIChpc19pbmRleF91bmJvcm4oci0+aW5kZXgpKQorCQlyZXR1cm4gMDsKKworCXJlcG9faW5pdF9yZXZpc2lvbnMociwgJnJldl9pbmZvLCBOVUxMKTsKKwlpZiAoaWdub3JlX3N1Ym1vZHVsZXMpCisJCXJldl9pbmZvLmRpZmZvcHQuZmxhZ3MuaWdub3JlX3N1Ym1vZHVsZXMgPSAxOworCXJldl9pbmZvLmRpZmZvcHQuZmxhZ3MucXVpY2sgPSAxOworCisJYWRkX2hlYWRfdG9fcGVuZGluZygmcmV2X2luZm8pOworCWlmICghcmV2X2luZm8ucGVuZGluZy5ucikgeworCQkvKgorCQkgKiBXZSBoYXZlIG5vIGhlYWQgKG9yIGl0J3MgY29ycnVwdCk7IHVzZSB0aGUgZW1wdHkgdHJlZSwKKwkJICogd2hpY2ggd2lsbCBjb21wbGFpbiBpZiB0aGUgaW5kZXggaXMgbm9uLWVtcHR5LgorCQkgKi8KKwkJc3RydWN0IHRyZWUgKnRyZWUgPSBsb29rdXBfdHJlZShyLCB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlKTsKKwkJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXZfaW5mbywgJnRyZWUtPm9iamVjdCwgIiIpOworCX0KKworCWRpZmZfc2V0dXBfZG9uZSgmcmV2X2luZm8uZGlmZm9wdCk7CisJcmVzdWx0ID0gcnVuX2RpZmZfaW5kZXgoJnJldl9pbmZvLCAxKTsKKwlyZXR1cm4gZGlmZl9yZXN1bHRfY29kZSgmcmV2X2luZm8uZGlmZm9wdCwgcmVzdWx0KTsKK30KKworLyoqCisgKiBJZiB0aGUgd29yayB0cmVlIGhhcyB1bnN0YWdlZCBvciB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBkaWVzIHdpdGggdGhlCisgKiBhcHByb3ByaWF0ZSBtZXNzYWdlLgorICovCitpbnQgcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgY29uc3QgY2hhciAqYWN0aW9uLAorCQkJICAgIGNvbnN0IGNoYXIgKmhpbnQsCisJCQkgICAgaW50IGlnbm9yZV9zdWJtb2R1bGVzLAorCQkJICAgIGludCBnZW50bHkpCit7CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGUgPSBMT0NLX0lOSVQ7CisJaW50IGVyciA9IDAsIGZkOworCisJZmQgPSByZXBvX2hvbGRfbG9ja2VkX2luZGV4KHIsICZsb2NrX2ZpbGUsIDApOworCXJlZnJlc2hfaW5kZXgoci0+aW5kZXgsIFJFRlJFU0hfUVVJRVQsIE5VTEwsIE5VTEwsIE5VTEwpOworCWlmICgwIDw9IGZkKQorCQlyZXBvX3VwZGF0ZV9pbmRleF9pZl9hYmxlKHIsICZsb2NrX2ZpbGUpOworCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9ja19maWxlKTsKKworCWlmIChoYXNfdW5zdGFnZWRfY2hhbmdlcyhyLCBpZ25vcmVfc3VibW9kdWxlcykpIHsKKwkJLyogVFJBTlNMQVRPUlM6IHRoZSBhY3Rpb24gaXMgZS5nLiAicHVsbCB3aXRoIHJlYmFzZSIgKi8KKwkJZXJyb3IoXygiY2Fubm90ICVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIpLCBfKGFjdGlvbikpOworCQllcnIgPSAxOworCX0KKworCWlmIChoYXNfdW5jb21taXR0ZWRfY2hhbmdlcyhyLCBpZ25vcmVfc3VibW9kdWxlcykpIHsKKwkJaWYgKGVycikKKwkJCWVycm9yKF8oImFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIpKTsKKwkJZWxzZQorCQkJZXJyb3IoXygiY2Fubm90ICVzOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIiksCisJCQkgICAgICBfKGFjdGlvbikpOworCQllcnIgPSAxOworCX0KKworCWlmIChlcnIpIHsKKwkJaWYgKGhpbnQpCisJCQllcnJvcigiJXMiLCBoaW50KTsKKwkJaWYgKCFnZW50bHkpCisJCQlleGl0KDEyOCk7CisJfQorCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3d0LXN0YXR1cy5oIGIvd3Qtc3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNhYjVkNAotLS0gL2Rldi9udWxsCisrKyBiL3d0LXN0YXR1cy5oCkBAIC0wLDAgKzEsMTc3IEBACisjaWZuZGVmIFNUQVRVU19ICisjZGVmaW5lIFNUQVRVU19ICisKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKworc3RydWN0IHJlcG9zaXRvcnk7CitzdHJ1Y3Qgd29ya3RyZWU7CisKK2VudW0gY29sb3Jfd3Rfc3RhdHVzIHsKKwlXVF9TVEFUVVNfSEVBREVSID0gMCwKKwlXVF9TVEFUVVNfVVBEQVRFRCwKKwlXVF9TVEFUVVNfQ0hBTkdFRCwKKwlXVF9TVEFUVVNfVU5UUkFDS0VELAorCVdUX1NUQVRVU19OT0JSQU5DSCwKKwlXVF9TVEFUVVNfVU5NRVJHRUQsCisJV1RfU1RBVFVTX0xPQ0FMX0JSQU5DSCwKKwlXVF9TVEFUVVNfUkVNT1RFX0JSQU5DSCwKKwlXVF9TVEFUVVNfT05CUkFOQ0gsCisJV1RfU1RBVFVTX01BWFNMT1QKK307CisKK2VudW0gdW50cmFja2VkX3N0YXR1c190eXBlIHsKKwlTSE9XX05PX1VOVFJBQ0tFRF9GSUxFUywKKwlTSE9XX05PUk1BTF9VTlRSQUNLRURfRklMRVMsCisJU0hPV19BTExfVU5UUkFDS0VEX0ZJTEVTCit9OworCitlbnVtIHNob3dfaWdub3JlZF90eXBlIHsKKwlTSE9XX05PX0lHTk9SRUQsCisJU0hPV19UUkFESVRJT05BTF9JR05PUkVELAorCVNIT1dfTUFUQ0hJTkdfSUdOT1JFRCwKK307CisKKy8qIGZyb20gd2hlcmUgZG9lcyB0aGlzIGNvbW1pdCBvcmlnaW5hdGUgKi8KK2VudW0gY29tbWl0X3doZW5jZSB7CisJRlJPTV9DT01NSVQsICAgICAvKiBub3JtYWwgKi8KKwlGUk9NX01FUkdFLCAgICAgIC8qIGNvbW1pdCBjYW1lIGZyb20gbWVyZ2UgKi8KKwlGUk9NX0NIRVJSWV9QSUNLX1NJTkdMRSwgLyogY29tbWl0IGNhbWUgZnJvbSBjaGVycnktcGljayAqLworCUZST01fQ0hFUlJZX1BJQ0tfTVVMVEksIC8qIGNvbW1pdCBjYW1lIGZyb20gYSBzZXF1ZW5jZSBvZiBjaGVycnktcGlja3MgKi8KKwlGUk9NX1JFQkFTRV9QSUNLIC8qIGNvbW1pdCBjYW1lIGZyb20gYSBwaWNrL3Jld29yZC9lZGl0ICovCit9OworCitzdGF0aWMgaW5saW5lIGludCBpc19mcm9tX2NoZXJyeV9waWNrKGVudW0gY29tbWl0X3doZW5jZSB3aGVuY2UpCit7CisJcmV0dXJuIHdoZW5jZSA9PSBGUk9NX0NIRVJSWV9QSUNLX1NJTkdMRSB8fAorCQl3aGVuY2UgPT0gRlJPTV9DSEVSUllfUElDS19NVUxUSTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfZnJvbV9yZWJhc2UoZW51bSBjb21taXRfd2hlbmNlIHdoZW5jZSkKK3sKKwlyZXR1cm4gd2hlbmNlID09IEZST01fUkVCQVNFX1BJQ0s7Cit9CisKK3N0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgeworCWludCB3b3JrdHJlZV9zdGF0dXM7CisJaW50IGluZGV4X3N0YXR1czsKKwlpbnQgc3RhZ2VtYXNrOworCWludCBtb2RlX2hlYWQsIG1vZGVfaW5kZXgsIG1vZGVfd29ya3RyZWU7CisJc3RydWN0IG9iamVjdF9pZCBvaWRfaGVhZCwgb2lkX2luZGV4OworCWludCByZW5hbWVfc3RhdHVzOworCWludCByZW5hbWVfc2NvcmU7CisJY2hhciAqcmVuYW1lX3NvdXJjZTsKKwl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUgICAgICAgOiAyOworCXVuc2lnbmVkIG5ld19zdWJtb2R1bGVfY29tbWl0cyA6IDE7Cit9OworCitlbnVtIHd0X3N0YXR1c19mb3JtYXQgeworCVNUQVRVU19GT1JNQVRfTk9ORSA9IDAsCisJU1RBVFVTX0ZPUk1BVF9MT05HLAorCVNUQVRVU19GT1JNQVRfU0hPUlQsCisJU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU4sCisJU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU5fVjIsCisKKwlTVEFUVVNfRk9STUFUX1VOU1BFQ0lGSUVECit9OworCisjZGVmaW5lIEhFQURfREVUQUNIRURfQVQgXygiSEVBRCBkZXRhY2hlZCBhdCAiKQorI2RlZmluZSBIRUFEX0RFVEFDSEVEX0ZST00gXygiSEVBRCBkZXRhY2hlZCBmcm9tICIpCisKK3N0cnVjdCB3dF9zdGF0dXNfc3RhdGUgeworCWludCBtZXJnZV9pbl9wcm9ncmVzczsKKwlpbnQgYW1faW5fcHJvZ3Jlc3M7CisJaW50IGFtX2VtcHR5X3BhdGNoOworCWludCByZWJhc2VfaW5fcHJvZ3Jlc3M7CisJaW50IHJlYmFzZV9pbnRlcmFjdGl2ZV9pbl9wcm9ncmVzczsKKwlpbnQgY2hlcnJ5X3BpY2tfaW5fcHJvZ3Jlc3M7CisJaW50IGJpc2VjdF9pbl9wcm9ncmVzczsKKwlpbnQgcmV2ZXJ0X2luX3Byb2dyZXNzOworCWludCBkZXRhY2hlZF9hdDsKKwljaGFyICpicmFuY2g7CisJY2hhciAqb250bzsKKwljaGFyICpkZXRhY2hlZF9mcm9tOworCXN0cnVjdCBvYmplY3RfaWQgZGV0YWNoZWRfb2lkOworCXN0cnVjdCBvYmplY3RfaWQgcmV2ZXJ0X2hlYWRfb2lkOworCXN0cnVjdCBvYmplY3RfaWQgY2hlcnJ5X3BpY2tfaGVhZF9vaWQ7Cit9OworCitzdHJ1Y3Qgd3Rfc3RhdHVzIHsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKwlpbnQgaXNfaW5pdGlhbDsKKwljaGFyICpicmFuY2g7CisJY29uc3QgY2hhciAqcmVmZXJlbmNlOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlpbnQgdmVyYm9zZTsKKwlpbnQgYW1lbmQ7CisJZW51bSBjb21taXRfd2hlbmNlIHdoZW5jZTsKKwlpbnQgbm93YXJuOworCWludCB1c2VfY29sb3I7CisJaW50IG5vX2dldHRleHQ7CisJaW50IGRpc3BsYXlfY29tbWVudF9wcmVmaXg7CisJaW50IHJlbGF0aXZlX3BhdGhzOworCWludCBzdWJtb2R1bGVfc3VtbWFyeTsKKwllbnVtIHNob3dfaWdub3JlZF90eXBlIHNob3dfaWdub3JlZF9tb2RlOworCWVudW0gdW50cmFja2VkX3N0YXR1c190eXBlIHNob3dfdW50cmFja2VkX2ZpbGVzOworCWNvbnN0IGNoYXIgKmlnbm9yZV9zdWJtb2R1bGVfYXJnOworCWNoYXIgY29sb3JfcGFsZXR0ZVtXVF9TVEFUVVNfTUFYU0xPVF1bQ09MT1JfTUFYTEVOXTsKKwl1bnNpZ25lZCBjb2xvcHRzOworCWludCBudWxsX3Rlcm1pbmF0aW9uOworCWludCBjb21taXRfdGVtcGxhdGU7CisJaW50IHNob3dfYnJhbmNoOworCWludCBzaG93X3N0YXNoOworCWludCBoaW50czsKKwllbnVtIGFoZWFkX2JlaGluZF9mbGFncyBhaGVhZF9iZWhpbmRfZmxhZ3M7CisJaW50IGRldGVjdF9yZW5hbWU7CisJaW50IHJlbmFtZV9zY29yZTsKKwlpbnQgcmVuYW1lX2xpbWl0OworCWVudW0gd3Rfc3RhdHVzX2Zvcm1hdCBzdGF0dXNfZm9ybWF0OworCXN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgc3RhdGU7CisJc3RydWN0IG9iamVjdF9pZCBvaWRfY29tbWl0OyAvKiB3aGVuIG5vdCBJbml0aWFsICovCisKKwkvKiBUaGVzZSBhcmUgY29tcHV0ZWQgZHVyaW5nIHByb2Nlc3Npbmcgb2YgdGhlIGluZGl2aWR1YWwgc2VjdGlvbnMgKi8KKwlpbnQgY29tbWl0dGFibGU7CisJaW50IHdvcmtkaXJfZGlydHk7CisJY29uc3QgY2hhciAqaW5kZXhfZmlsZTsKKwlGSUxFICpmcDsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJc3RydWN0IHN0cmluZ19saXN0IGNoYW5nZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgdW50cmFja2VkOworCXN0cnVjdCBzdHJpbmdfbGlzdCBpZ25vcmVkOworCXVpbnQzMl90IHVudHJhY2tlZF9pbl9tczsKK307CisKK3NpemVfdCB3dF9zdGF0dXNfbG9jYXRlX2VuZChjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuKTsKK3ZvaWQgd3Rfc3RhdHVzX2FwcGVuZF9jdXRfbGluZShzdHJ1Y3Qgc3RyYnVmICpidWYpOwordm9pZCB3dF9zdGF0dXNfYWRkX2N1dF9saW5lKEZJTEUgKmZwKTsKK3ZvaWQgd3Rfc3RhdHVzX3ByZXBhcmUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCB3dF9zdGF0dXMgKnMpOwordm9pZCB3dF9zdGF0dXNfcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcyk7Cit2b2lkIHd0X3N0YXR1c19jb2xsZWN0KHN0cnVjdCB3dF9zdGF0dXMgKnMpOwordm9pZCB3dF9zdGF0dXNfY29sbGVjdF9mcmVlX2J1ZmZlcnMoc3RydWN0IHd0X3N0YXR1cyAqcyk7Cit2b2lkIHd0X3N0YXR1c19nZXRfc3RhdGUoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgc3RydWN0IHd0X3N0YXR1c19zdGF0ZSAqc3RhdGUsCisJCQkgaW50IGdldF9kZXRhY2hlZF9mcm9tKTsKK2ludCB3dF9zdGF0dXNfY2hlY2tfcmViYXNlKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QsCisJCQkgICBzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlICpzdGF0ZSk7CitpbnQgd3Rfc3RhdHVzX2NoZWNrX2Jpc2VjdChjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0LAorCQkJICAgc3RydWN0IHd0X3N0YXR1c19zdGF0ZSAqc3RhdGUpOworCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQordm9pZCBzdGF0dXNfcHJpbnRmX2xuKHN0cnVjdCB3dF9zdGF0dXMgKnMsIGNvbnN0IGNoYXIgKmNvbG9yLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQordm9pZCBzdGF0dXNfcHJpbnRmKHN0cnVjdCB3dF9zdGF0dXMgKnMsIGNvbnN0IGNoYXIgKmNvbG9yLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKy8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGV4cGVjdCB0aGF0IHRoZSBjYWxsZXIgdG9vayBjYXJlIG9mIHJlYWRpbmcgdGhlIGluZGV4LiAqLworaW50IGhhc191bnN0YWdlZF9jaGFuZ2VzKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJIGludCBpZ25vcmVfc3VibW9kdWxlcyk7CitpbnQgaGFzX3VuY29tbWl0dGVkX2NoYW5nZXMoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICAgaW50IGlnbm9yZV9zdWJtb2R1bGVzKTsKK2ludCByZXF1aXJlX2NsZWFuX3dvcmtfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICBjb25zdCBjaGFyICphY3Rpb24sCisJCQkgICAgY29uc3QgY2hhciAqaGludCwKKwkJCSAgICBpbnQgaWdub3JlX3N1Ym1vZHVsZXMsCisJCQkgICAgaW50IGdlbnRseSk7CisKKyNlbmRpZiAvKiBTVEFUVVNfSCAqLwpkaWZmIC0tZ2l0IGEveGRpZmYtaW50ZXJmYWNlLmMgYi94ZGlmZi1pbnRlcmZhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDIwMDY5Ci0tLSAvZGV2L251bGwKKysrIGIveGRpZmYtaW50ZXJmYWNlLmMKQEAgLTAsMCArMSwzMjMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInhkaWZmL3h0eXBlcy5oIgorI2luY2x1ZGUgInhkaWZmL3hkaWZmaS5oIgorI2luY2x1ZGUgInhkaWZmL3hlbWl0LmgiCisjaW5jbHVkZSAieGRpZmYveG1hY3Jvcy5oIgorI2luY2x1ZGUgInhkaWZmL3h1dGlscy5oIgorCitzdHJ1Y3QgeGRpZmZfZW1pdF9zdGF0ZSB7CisJeGRpZmZfZW1pdF9odW5rX2ZuIGh1bmtfZm47CisJeGRpZmZfZW1pdF9saW5lX2ZuIGxpbmVfZm47CisJdm9pZCAqY29uc3VtZV9jYWxsYmFja19kYXRhOworCXN0cnVjdCBzdHJidWYgcmVtYWluZGVyOworfTsKKworc3RhdGljIGludCB4ZGlmZl9vdXRfaHVuayh2b2lkICpwcml2XywKKwkJCSAgbG9uZyBvbGRfYmVnaW4sIGxvbmcgb2xkX25yLAorCQkJICBsb25nIG5ld19iZWdpbiwgbG9uZyBuZXdfbnIsCisJCQkgIGNvbnN0IGNoYXIgKmZ1bmMsIGxvbmcgZnVuY2xlbikKK3sKKwlzdHJ1Y3QgeGRpZmZfZW1pdF9zdGF0ZSAqcHJpdiA9IHByaXZfOworCisJaWYgKHByaXYtPnJlbWFpbmRlci5sZW4pCisJCUJVRygieGRpZmYgZW1pdHRlZCBodW5rIGluIHRoZSBtaWRkbGUgb2YgYSBsaW5lIik7CisKKwlwcml2LT5odW5rX2ZuKHByaXYtPmNvbnN1bWVfY2FsbGJhY2tfZGF0YSwKKwkJICAgICAgb2xkX2JlZ2luLCBvbGRfbnIsIG5ld19iZWdpbiwgbmV3X25yLAorCQkgICAgICBmdW5jLCBmdW5jbGVuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY29uc3VtZV9vbmUodm9pZCAqcHJpdl8sIGNoYXIgKnMsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgeGRpZmZfZW1pdF9zdGF0ZSAqcHJpdiA9IHByaXZfOworCWNoYXIgKmVwOworCXdoaWxlIChzaXplKSB7CisJCXVuc2lnbmVkIGxvbmcgdGhpc19zaXplOworCQllcCA9IG1lbWNocihzLCAnXG4nLCBzaXplKTsKKwkJdGhpc19zaXplID0gKGVwID09IE5VTEwpID8gc2l6ZSA6IChlcCAtIHMgKyAxKTsKKwkJcHJpdi0+bGluZV9mbihwcml2LT5jb25zdW1lX2NhbGxiYWNrX2RhdGEsIHMsIHRoaXNfc2l6ZSk7CisJCXNpemUgLT0gdGhpc19zaXplOworCQlzICs9IHRoaXNfc2l6ZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgeGRpZmZfb3V0Zih2b2lkICpwcml2XywgbW1idWZmZXJfdCAqbWIsIGludCBuYnVmKQoreworCXN0cnVjdCB4ZGlmZl9lbWl0X3N0YXRlICpwcml2ID0gcHJpdl87CisJaW50IGk7CisKKwlpZiAoIXByaXYtPmxpbmVfZm4pCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IG5idWY7IGkrKykgeworCQlpZiAobWJbaV0ucHRyW21iW2ldLnNpemUtMV0gIT0gJ1xuJykgeworCQkJLyogSW5jb21wbGV0ZSBsaW5lICovCisJCQlzdHJidWZfYWRkKCZwcml2LT5yZW1haW5kZXIsIG1iW2ldLnB0ciwgbWJbaV0uc2l6ZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIHdlIGhhdmUgYSBjb21wbGV0ZSBsaW5lICovCisJCWlmICghcHJpdi0+cmVtYWluZGVyLmxlbikgeworCQkJY29uc3VtZV9vbmUocHJpdiwgbWJbaV0ucHRyLCBtYltpXS5zaXplKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXN0cmJ1Zl9hZGQoJnByaXYtPnJlbWFpbmRlciwgbWJbaV0ucHRyLCBtYltpXS5zaXplKTsKKwkJY29uc3VtZV9vbmUocHJpdiwgcHJpdi0+cmVtYWluZGVyLmJ1ZiwgcHJpdi0+cmVtYWluZGVyLmxlbik7CisJCXN0cmJ1Zl9yZXNldCgmcHJpdi0+cmVtYWluZGVyKTsKKwl9CisJaWYgKHByaXYtPnJlbWFpbmRlci5sZW4pIHsKKwkJY29uc3VtZV9vbmUocHJpdiwgcHJpdi0+cmVtYWluZGVyLmJ1ZiwgcHJpdi0+cmVtYWluZGVyLmxlbik7CisJCXN0cmJ1Zl9yZXNldCgmcHJpdi0+cmVtYWluZGVyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUcmltIGRvd24gY29tbW9uIHN1YnN0cmluZyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXJzLAorICogYnV0IGVuZCBvbiBhIGNvbXBsZXRlIGxpbmUuCisgKi8KK3N0YXRpYyB2b2lkIHRyaW1fY29tbW9uX3RhaWwobW1maWxlX3QgKmEsIG1tZmlsZV90ICpiKQoreworCWNvbnN0IGludCBibGsgPSAxMDI0OworCWxvbmcgdHJpbW1lZCA9IDAsIHJlY292ZXJlZCA9IDA7CisJY2hhciAqYXAgPSBhLT5zaXplID8gYS0+cHRyICsgYS0+c2l6ZSA6IGEtPnB0cjsKKwljaGFyICpicCA9IGItPnNpemUgPyBiLT5wdHIgKyBiLT5zaXplIDogYi0+cHRyOworCWxvbmcgc21hbGxlciA9IChhLT5zaXplIDwgYi0+c2l6ZSkgPyBhLT5zaXplIDogYi0+c2l6ZTsKKworCXdoaWxlIChibGsgKyB0cmltbWVkIDw9IHNtYWxsZXIgJiYgIW1lbWNtcChhcCAtIGJsaywgYnAgLSBibGssIGJsaykpIHsKKwkJdHJpbW1lZCArPSBibGs7CisJCWFwIC09IGJsazsKKwkJYnAgLT0gYmxrOworCX0KKworCXdoaWxlIChyZWNvdmVyZWQgPCB0cmltbWVkKQorCQlpZiAoYXBbcmVjb3ZlcmVkKytdID09ICdcbicpCisJCQlicmVhazsKKwlhLT5zaXplIC09IHRyaW1tZWQgLSByZWNvdmVyZWQ7CisJYi0+c2l6ZSAtPSB0cmltbWVkIC0gcmVjb3ZlcmVkOworfQorCitpbnQgeGRpX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcsIHhkZW1pdGNiX3QgKnhlY2IpCit7CisJbW1maWxlX3QgYSA9ICptZjE7CisJbW1maWxlX3QgYiA9ICptZjI7CisKKwlpZiAobWYxLT5zaXplID4gTUFYX1hESUZGX1NJWkUgfHwgbWYyLT5zaXplID4gTUFYX1hESUZGX1NJWkUpCisJCXJldHVybiAtMTsKKworCWlmICgheGVjZmctPmN0eGxlbiAmJiAhKHhlY2ZnLT5mbGFncyAmIFhETF9FTUlUX0ZVTkNDT05URVhUKSkKKwkJdHJpbV9jb21tb25fdGFpbCgmYSwgJmIpOworCisJcmV0dXJuIHhkbF9kaWZmKCZhLCAmYiwgeHBwLCB4ZWNmZywgeGVjYik7Cit9CisKK3ZvaWQgZGlzY2FyZF9odW5rX2xpbmUodm9pZCAqcHJpdiwKKwkJICAgICAgIGxvbmcgb2IsIGxvbmcgb24sIGxvbmcgbmIsIGxvbmcgbm4sCisJCSAgICAgICBjb25zdCBjaGFyICpmdW5jLCBsb25nIGZ1bmNsZW4pCit7Cit9CisKK2ludCB4ZGlfZGlmZl9vdXRmKG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsCisJCSAgeGRpZmZfZW1pdF9odW5rX2ZuIGh1bmtfZm4sCisJCSAgeGRpZmZfZW1pdF9saW5lX2ZuIGxpbmVfZm4sCisJCSAgdm9pZCAqY29uc3VtZV9jYWxsYmFja19kYXRhLAorCQkgIHhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKQoreworCWludCByZXQ7CisJc3RydWN0IHhkaWZmX2VtaXRfc3RhdGUgc3RhdGU7CisJeGRlbWl0Y2JfdCBlY2I7CisKKwltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKTsKKwlzdGF0ZS5odW5rX2ZuID0gaHVua19mbjsKKwlzdGF0ZS5saW5lX2ZuID0gbGluZV9mbjsKKwlzdGF0ZS5jb25zdW1lX2NhbGxiYWNrX2RhdGEgPSBjb25zdW1lX2NhbGxiYWNrX2RhdGE7CisJbWVtc2V0KCZlY2IsIDAsIHNpemVvZihlY2IpKTsKKwlpZiAoaHVua19mbikKKwkJZWNiLm91dF9odW5rID0geGRpZmZfb3V0X2h1bms7CisJZWNiLm91dF9saW5lID0geGRpZmZfb3V0ZjsKKwllY2IucHJpdiA9ICZzdGF0ZTsKKwlzdHJidWZfaW5pdCgmc3RhdGUucmVtYWluZGVyLCAwKTsKKwlyZXQgPSB4ZGlfZGlmZihtZjEsIG1mMiwgeHBwLCB4ZWNmZywgJmVjYik7CisJc3RyYnVmX3JlbGVhc2UoJnN0YXRlLnJlbWFpbmRlcik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHJlYWRfbW1maWxlKG1tZmlsZV90ICpwdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzdGF0IHN0OworCUZJTEUgKmY7CisJc2l6ZV90IHN6OworCisJaWYgKHN0YXQoZmlsZW5hbWUsICZzdCkpCisJCXJldHVybiBlcnJvcl9lcnJubygiQ291bGQgbm90IHN0YXQgJXMiLCBmaWxlbmFtZSk7CisJaWYgKChmID0gZm9wZW4oZmlsZW5hbWUsICJyYiIpKSA9PSBOVUxMKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oIkNvdWxkIG5vdCBvcGVuICVzIiwgZmlsZW5hbWUpOworCXN6ID0geHNpemVfdChzdC5zdF9zaXplKTsKKwlwdHItPnB0ciA9IHhtYWxsb2Moc3ogPyBzeiA6IDEpOworCWlmIChzeiAmJiBmcmVhZChwdHItPnB0ciwgc3osIDEsIGYpICE9IDEpIHsKKwkJZmNsb3NlKGYpOworCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCByZWFkICVzIiwgZmlsZW5hbWUpOworCX0KKwlmY2xvc2UoZik7CisJcHRyLT5zaXplID0gc3o7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmVhZF9tbWJsb2IobW1maWxlX3QgKnB0ciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwlpZiAob2lkZXEob2lkLCAmbnVsbF9vaWQpKSB7CisJCXB0ci0+cHRyID0geHN0cmR1cCgiIik7CisJCXB0ci0+c2l6ZSA9IDA7CisJCXJldHVybjsKKwl9CisKKwlwdHItPnB0ciA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCWlmICghcHRyLT5wdHIgfHwgdHlwZSAhPSBPQkpfQkxPQikKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBibG9iIG9iamVjdCAlcyIsIG9pZF90b19oZXgob2lkKSk7CisJcHRyLT5zaXplID0gc2l6ZTsKK30KKworI2RlZmluZSBGSVJTVF9GRVdfQllURVMgODAwMAoraW50IGJ1ZmZlcl9pc19iaW5hcnkoY29uc3QgY2hhciAqcHRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKEZJUlNUX0ZFV19CWVRFUyA8IHNpemUpCisJCXNpemUgPSBGSVJTVF9GRVdfQllURVM7CisJcmV0dXJuICEhbWVtY2hyKHB0ciwgMCwgc2l6ZSk7Cit9CisKK3N0cnVjdCBmZl9yZWdzIHsKKwlpbnQgbnI7CisJc3RydWN0IGZmX3JlZyB7CisJCXJlZ2V4X3QgcmU7CisJCWludCBuZWdhdGU7CisJfSAqYXJyYXk7Cit9OworCitzdGF0aWMgbG9uZyBmZl9yZWdleHAoY29uc3QgY2hhciAqbGluZSwgbG9uZyBsZW4sCisJCWNoYXIgKmJ1ZmZlciwgbG9uZyBidWZmZXJfc2l6ZSwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgZmZfcmVncyAqcmVncyA9IHByaXY7CisJcmVnbWF0Y2hfdCBwbWF0Y2hbMl07CisJaW50IGk7CisJaW50IHJlc3VsdDsKKworCS8qIEV4Y2x1ZGUgdGVybWluYXRpbmcgbmV3bGluZSAoYW5kIGNyKSBmcm9tIG1hdGNoaW5nICovCisJaWYgKGxlbiA+IDAgJiYgbGluZVtsZW4tMV0gPT0gJ1xuJykgeworCQlpZiAobGVuID4gMSAmJiBsaW5lW2xlbi0yXSA9PSAnXHInKQorCQkJbGVuIC09IDI7CisJCWVsc2UKKwkJCWxlbi0tOworCX0KKworCWZvciAoaSA9IDA7IGkgPCByZWdzLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBmZl9yZWcgKnJlZyA9IHJlZ3MtPmFycmF5ICsgaTsKKwkJaWYgKCFyZWdleGVjX2J1ZigmcmVnLT5yZSwgbGluZSwgbGVuLCAyLCBwbWF0Y2gsIDApKSB7CisJCQlpZiAocmVnLT5uZWdhdGUpCisJCQkJcmV0dXJuIC0xOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHJlZ3MtPm5yIDw9IGkpCisJCXJldHVybiAtMTsKKwlpID0gcG1hdGNoWzFdLnJtX3NvID49IDAgPyAxIDogMDsKKwlsaW5lICs9IHBtYXRjaFtpXS5ybV9zbzsKKwlyZXN1bHQgPSBwbWF0Y2hbaV0ucm1fZW8gLSBwbWF0Y2hbaV0ucm1fc287CisJaWYgKHJlc3VsdCA+IGJ1ZmZlcl9zaXplKQorCQlyZXN1bHQgPSBidWZmZXJfc2l6ZTsKKwl3aGlsZSAocmVzdWx0ID4gMCAmJiAoaXNzcGFjZShsaW5lW3Jlc3VsdCAtIDFdKSkpCisJCXJlc3VsdC0tOworCW1lbWNweShidWZmZXIsIGxpbmUsIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB4ZGlmZl9zZXRfZmluZF9mdW5jKHhkZW1pdGNvbmZfdCAqeGVjZmcsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgY2ZsYWdzKQoreworCWludCBpOworCXN0cnVjdCBmZl9yZWdzICpyZWdzOworCisJeGVjZmctPmZpbmRfZnVuYyA9IGZmX3JlZ2V4cDsKKwlyZWdzID0geGVjZmctPmZpbmRfZnVuY19wcml2ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGZmX3JlZ3MpKTsKKwlmb3IgKGkgPSAwLCByZWdzLT5uciA9IDE7IHZhbHVlW2ldOyBpKyspCisJCWlmICh2YWx1ZVtpXSA9PSAnXG4nKQorCQkJcmVncy0+bnIrKzsKKwlBTExPQ19BUlJBWShyZWdzLT5hcnJheSwgcmVncy0+bnIpOworCWZvciAoaSA9IDA7IGkgPCByZWdzLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBmZl9yZWcgKnJlZyA9IHJlZ3MtPmFycmF5ICsgaTsKKwkJY29uc3QgY2hhciAqZXAsICpleHByZXNzaW9uOworCQljaGFyICpidWZmZXIgPSBOVUxMOworCisJCWlmICghdmFsdWUpCisJCQlCVUcoIm1pc21hdGNoIGJldHdlZW4gbGluZSBjb3VudCBhbmQgcGFyc2luZyIpOworCQllcCA9IHN0cmNocih2YWx1ZSwgJ1xuJyk7CisKKwkJcmVnLT5uZWdhdGUgPSAoKnZhbHVlID09ICchJyk7CisJCWlmIChyZWctPm5lZ2F0ZSAmJiBpID09IHJlZ3MtPm5yIC0gMSkKKwkJCWRpZSgiTGFzdCBleHByZXNzaW9uIG11c3Qgbm90IGJlIG5lZ2F0ZWQ6ICVzIiwgdmFsdWUpOworCQlpZiAoKnZhbHVlID09ICchJykKKwkJCXZhbHVlKys7CisJCWlmIChlcCkKKwkJCWV4cHJlc3Npb24gPSBidWZmZXIgPSB4c3RybmR1cCh2YWx1ZSwgZXAgLSB2YWx1ZSk7CisJCWVsc2UKKwkJCWV4cHJlc3Npb24gPSB2YWx1ZTsKKwkJaWYgKHJlZ2NvbXAoJnJlZy0+cmUsIGV4cHJlc3Npb24sIGNmbGFncykpCisJCQlkaWUoIkludmFsaWQgcmVnZXhwIHRvIGxvb2sgZm9yIGh1bmsgaGVhZGVyOiAlcyIsIGV4cHJlc3Npb24pOworCQlmcmVlKGJ1ZmZlcik7CisJCXZhbHVlID0gZXAgPyBlcCArIDEgOiBOVUxMOworCX0KK30KKwordm9pZCB4ZGlmZl9jbGVhcl9maW5kX2Z1bmMoeGRlbWl0Y29uZl90ICp4ZWNmZykKK3sKKwlpZiAoeGVjZmctPmZpbmRfZnVuYykgeworCQlpbnQgaTsKKwkJc3RydWN0IGZmX3JlZ3MgKnJlZ3MgPSB4ZWNmZy0+ZmluZF9mdW5jX3ByaXY7CisKKwkJZm9yIChpID0gMDsgaSA8IHJlZ3MtPm5yOyBpKyspCisJCQlyZWdmcmVlKCZyZWdzLT5hcnJheVtpXS5yZSk7CisJCWZyZWUocmVncy0+YXJyYXkpOworCQlmcmVlKHJlZ3MpOworCQl4ZWNmZy0+ZmluZF9mdW5jID0gTlVMTDsKKwkJeGVjZmctPmZpbmRfZnVuY19wcml2ID0gTlVMTDsKKwl9Cit9CisKK3Vuc2lnbmVkIGxvbmcgeGRpZmZfaGFzaF9zdHJpbmcoY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbiwgbG9uZyBmbGFncykKK3sKKwlyZXR1cm4geGRsX2hhc2hfcmVjb3JkKCZzLCBzICsgbGVuLCBmbGFncyk7Cit9CisKK2ludCB4ZGlmZl9jb21wYXJlX2xpbmVzKGNvbnN0IGNoYXIgKmwxLCBsb25nIHMxLAorCQkJY29uc3QgY2hhciAqbDIsIGxvbmcgczIsIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIHhkbF9yZWNtYXRjaChsMSwgczEsIGwyLCBzMiwgZmxhZ3MpOworfQorCitpbnQgZ2l0X3htZXJnZV9zdHlsZSA9IC0xOworCitpbnQgZ2l0X3htZXJnZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAibWVyZ2UuY29uZmxpY3RzdHlsZSIpKSB7CisJCWlmICghdmFsdWUpCisJCQlkaWUoIiclcycgaXMgbm90IGEgYm9vbGVhbiIsIHZhcik7CisJCWlmICghc3RyY21wKHZhbHVlLCAiZGlmZjMiKSkKKwkJCWdpdF94bWVyZ2Vfc3R5bGUgPSBYRExfTUVSR0VfRElGRjM7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJtZXJnZSIpKQorCQkJZ2l0X3htZXJnZV9zdHlsZSA9IDA7CisJCS8qCisJCSAqIFBsZWFzZSB1cGRhdGUgX2dpdF9jaGVja291dCgpIGluCisJCSAqIGdpdC1jb21wbGV0aW9uLmJhc2ggd2hlbiB5b3UgYWRkIG5ldyBtZXJnZSBjb25maWcKKwkJICovCisJCWVsc2UKKwkJCWRpZSgidW5rbm93biBzdHlsZSAnJXMnIGdpdmVuIGZvciAnJXMnIiwKKwkJCSAgICB2YWx1ZSwgdmFyKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQpkaWZmIC0tZ2l0IGEveGRpZmYtaW50ZXJmYWNlLmggYi94ZGlmZi1pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2RmMjY5Ci0tLSAvZGV2L251bGwKKysrIGIveGRpZmYtaW50ZXJmYWNlLmgKQEAgLTAsMCArMSw1OSBAQAorI2lmbmRlZiBYRElGRl9JTlRFUkZBQ0VfSAorI2RlZmluZSBYRElGRl9JTlRFUkZBQ0VfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ4ZGlmZi94ZGlmZi5oIgorCisvKgorICogeGRpZmYgaXNuJ3QgZXF1aXBwZWQgdG8gaGFuZGxlIGNvbnRlbnQgb3ZlciBhIGdpZ2FieXRlOworICogd2UgbWFrZSB0aGUgY3V0b2ZmIDFHQiAtIDFNQiB0byBnaXZlIHNvbWUgYnJlYXRoaW5nCisgKiByb29tIGZvciBjb25zdGFudC1zaXplZCBhZGRpdGlvbnMgKGUuZy4sIG1lcmdlIG1hcmtlcnMpCisgKi8KKyNkZWZpbmUgTUFYX1hESUZGX1NJWkUgKDEwMjRVTCAqIDEwMjQgKiAxMDIzKQorCit0eXBlZGVmIHZvaWQgKCp4ZGlmZl9lbWl0X2xpbmVfZm4pKHZvaWQgKiwgY2hhciAqLCB1bnNpZ25lZCBsb25nKTsKK3R5cGVkZWYgdm9pZCAoKnhkaWZmX2VtaXRfaHVua19mbikodm9pZCAqZGF0YSwKKwkJCQkgICBsb25nIG9sZF9iZWdpbiwgbG9uZyBvbGRfbnIsCisJCQkJICAgbG9uZyBuZXdfYmVnaW4sIGxvbmcgbmV3X25yLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZ1bmMsIGxvbmcgZnVuY2xlbik7CisKK2ludCB4ZGlfZGlmZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZywgeGRlbWl0Y2JfdCAqZWNiKTsKK2ludCB4ZGlfZGlmZl9vdXRmKG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsCisJCSAgeGRpZmZfZW1pdF9odW5rX2ZuIGh1bmtfZm4sCisJCSAgeGRpZmZfZW1pdF9saW5lX2ZuIGxpbmVfZm4sCisJCSAgdm9pZCAqY29uc3VtZV9jYWxsYmFja19kYXRhLAorCQkgIHhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKTsKK2ludCByZWFkX21tZmlsZShtbWZpbGVfdCAqcHRyLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7Cit2b2lkIHJlYWRfbW1ibG9iKG1tZmlsZV90ICpwdHIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CitpbnQgYnVmZmVyX2lzX2JpbmFyeShjb25zdCBjaGFyICpwdHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKK3ZvaWQgeGRpZmZfc2V0X2ZpbmRfZnVuYyh4ZGVtaXRjb25mX3QgKnhlY2ZnLCBjb25zdCBjaGFyICpsaW5lLCBpbnQgY2ZsYWdzKTsKK3ZvaWQgeGRpZmZfY2xlYXJfZmluZF9mdW5jKHhkZW1pdGNvbmZfdCAqeGVjZmcpOworaW50IGdpdF94bWVyZ2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKK2V4dGVybiBpbnQgZ2l0X3htZXJnZV9zdHlsZTsKKworLyoKKyAqIENhbiBiZSB1c2VkIGFzIGEgbm8tb3AgaHVua19mbiBmb3IgeGRpX2RpZmZfb3V0ZigpLCBzaW5jZSBhIE5VTEwKKyAqIG9uZSBqdXN0IHNlbmRzIHRoZSBodW5rIGxpbmUgdG8gdGhlIGxpbmVfZm4gY2FsbGJhY2spLgorICovCit2b2lkIGRpc2NhcmRfaHVua19saW5lKHZvaWQgKnByaXYsCisJCSAgICAgICBsb25nIG9iLCBsb25nIG9uLCBsb25nIG5iLCBsb25nIG5uLAorCQkgICAgICAgY29uc3QgY2hhciAqZnVuYywgbG9uZyBmdW5jbGVuKTsKKworLyoKKyAqIENvbXBhcmUgdGhlIHN0cmluZ3MgbDEgd2l0aCBsMiB3aGljaCBhcmUgb2Ygc2l6ZSBzMSBhbmQgczIgcmVzcGVjdGl2ZWx5LgorICogUmV0dXJucyAxIGlmIHRoZSBzdHJpbmdzIGFyZSBkZWVtZWQgZXF1YWwsIDAgb3RoZXJ3aXNlLgorICogVGhlIGBmbGFnc2AgZ2l2ZW4gYXMgWERGX1dISVRFU1BBQ0VfRkxBR1MgZGV0ZXJtaW5lIGhvdyB3aGl0ZSBzcGFjZXMKKyAqIGFyZSB0cmVhdGVkIGZvciB0aGUgY29tcGFyaXNvbi4KKyAqLworaW50IHhkaWZmX2NvbXBhcmVfbGluZXMoY29uc3QgY2hhciAqbDEsIGxvbmcgczEsCisJCQljb25zdCBjaGFyICpsMiwgbG9uZyBzMiwgbG9uZyBmbGFncyk7CisKKy8qCisgKiBSZXR1cm5zIGEgaGFzaCBvZiB0aGUgc3RyaW5nIHMgb2YgbGVuZ3RoIGxlbi4KKyAqIFRoZSBgZmxhZ3NgIGdpdmVuIGFzIFhERl9XSElURVNQQUNFX0ZMQUdTIGRldGVybWluZSBob3cgd2hpdGUgc3BhY2VzCisgKiBhcmUgdHJlYXRlZCBmb3IgdGhlIGhhc2guCisgKi8KK3Vuc2lnbmVkIGxvbmcgeGRpZmZfaGFzaF9zdHJpbmcoY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbiwgbG9uZyBmbGFncyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveGRpZmYveGRpZmYuaCBiL3hkaWZmL3hkaWZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyZTNhOQotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hkaWZmLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCBzZWUKKyAqICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFhESUZGX0gpCisjZGVmaW5lIFhESUZGX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiAjaWZkZWYgX19jcGx1c3BsdXMgKi8KKworLyogeHBwYXJtX3QuZmxhZ3MgKi8KKyNkZWZpbmUgWERGX05FRURfTUlOSU1BTCAoMSA8PCAwKQorCisjZGVmaW5lIFhERl9JR05PUkVfV0hJVEVTUEFDRSAoMSA8PCAxKQorI2RlZmluZSBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFICgxIDw8IDIpCisjZGVmaW5lIFhERl9JR05PUkVfV0hJVEVTUEFDRV9BVF9FT0wgKDEgPDwgMykKKyNkZWZpbmUgWERGX0lHTk9SRV9DUl9BVF9FT0wgKDEgPDwgNCkKKyNkZWZpbmUgWERGX1dISVRFU1BBQ0VfRkxBR1MgKFhERl9JR05PUkVfV0hJVEVTUEFDRSB8IFwKKwkJCSAgICAgIFhERl9JR05PUkVfV0hJVEVTUEFDRV9DSEFOR0UgfCBcCisJCQkgICAgICBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQVRfRU9MIHwgXAorCQkJICAgICAgWERGX0lHTk9SRV9DUl9BVF9FT0wpCisKKyNkZWZpbmUgWERGX0lHTk9SRV9CTEFOS19MSU5FUyAoMSA8PCA3KQorCisjZGVmaW5lIFhERl9QQVRJRU5DRV9ESUZGICgxIDw8IDE0KQorI2RlZmluZSBYREZfSElTVE9HUkFNX0RJRkYgKDEgPDwgMTUpCisjZGVmaW5lIFhERl9ESUZGX0FMR09SSVRITV9NQVNLIChYREZfUEFUSUVOQ0VfRElGRiB8IFhERl9ISVNUT0dSQU1fRElGRikKKyNkZWZpbmUgWERGX0RJRkZfQUxHKHgpICgoeCkgJiBYREZfRElGRl9BTEdPUklUSE1fTUFTSykKKworI2RlZmluZSBYREZfSU5ERU5UX0hFVVJJU1RJQyAoMSA8PCAyMykKKworLyogeGRlbWl0Y29uZl90LmZsYWdzICovCisjZGVmaW5lIFhETF9FTUlUX0ZVTkNOQU1FUyAoMSA8PCAwKQorI2RlZmluZSBYRExfRU1JVF9GVU5DQ09OVEVYVCAoMSA8PCAyKQorCisvKiBtZXJnZSBzaW1wbGlmaWNhdGlvbiBsZXZlbHMgKi8KKyNkZWZpbmUgWERMX01FUkdFX01JTklNQUwgMAorI2RlZmluZSBYRExfTUVSR0VfRUFHRVIgMQorI2RlZmluZSBYRExfTUVSR0VfWkVBTE9VUyAyCisjZGVmaW5lIFhETF9NRVJHRV9aRUFMT1VTX0FMTlVNIDMKKworLyogbWVyZ2UgZmF2b3IgbW9kZXMgKi8KKyNkZWZpbmUgWERMX01FUkdFX0ZBVk9SX09VUlMgMQorI2RlZmluZSBYRExfTUVSR0VfRkFWT1JfVEhFSVJTIDIKKyNkZWZpbmUgWERMX01FUkdFX0ZBVk9SX1VOSU9OIDMKKworLyogbWVyZ2Ugb3V0cHV0IHN0eWxlcyAqLworI2RlZmluZSBYRExfTUVSR0VfRElGRjMgMQorCit0eXBlZGVmIHN0cnVjdCBzX21tZmlsZSB7CisJY2hhciAqcHRyOworCWxvbmcgc2l6ZTsKK30gbW1maWxlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNfbW1idWZmZXIgeworCWNoYXIgKnB0cjsKKwlsb25nIHNpemU7Cit9IG1tYnVmZmVyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNfeHBwYXJhbSB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFNlZSBEb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQuICovCisJY2hhciAqKmFuY2hvcnM7CisJc2l6ZV90IGFuY2hvcnNfbnI7Cit9IHhwcGFyYW1fdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc194ZGVtaXRjYiB7CisJdm9pZCAqcHJpdjsKKwlpbnQgKCpvdXRfaHVuaykodm9pZCAqLAorCQkJbG9uZyBvbGRfYmVnaW4sIGxvbmcgb2xkX25yLAorCQkJbG9uZyBuZXdfYmVnaW4sIGxvbmcgbmV3X25yLAorCQkJY29uc3QgY2hhciAqZnVuYywgbG9uZyBmdW5jbGVuKTsKKwlpbnQgKCpvdXRfbGluZSkodm9pZCAqLCBtbWJ1ZmZlcl90ICosIGludCk7Cit9IHhkZW1pdGNiX3Q7CisKK3R5cGVkZWYgbG9uZyAoKmZpbmRfZnVuY190KShjb25zdCBjaGFyICpsaW5lLCBsb25nIGxpbmVfbGVuLCBjaGFyICpidWZmZXIsIGxvbmcgYnVmZmVyX3NpemUsIHZvaWQgKnByaXYpOworCit0eXBlZGVmIGludCAoKnhkbF9lbWl0X2h1bmtfY29uc3VtZV9mdW5jX3QpKGxvbmcgc3RhcnRfYSwgbG9uZyBjb3VudF9hLAorCQkJCQkgICAgbG9uZyBzdGFydF9iLCBsb25nIGNvdW50X2IsCisJCQkJCSAgICB2b2lkICpjYl9kYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3Qgc194ZGVtaXRjb25mIHsKKwlsb25nIGN0eGxlbjsKKwlsb25nIGludGVyaHVua2N0eGxlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWZpbmRfZnVuY190IGZpbmRfZnVuYzsKKwl2b2lkICpmaW5kX2Z1bmNfcHJpdjsKKwl4ZGxfZW1pdF9odW5rX2NvbnN1bWVfZnVuY190IGh1bmtfZnVuYzsKK30geGRlbWl0Y29uZl90OworCit0eXBlZGVmIHN0cnVjdCBzX2JkaWZmcGFyYW0geworCWxvbmcgYnNpemU7Cit9IGJkaWZmcGFyYW1fdDsKKworCisjZGVmaW5lIHhkbF9tYWxsb2MoeCkgeG1hbGxvYyh4KQorI2RlZmluZSB4ZGxfZnJlZShwdHIpIGZyZWUocHRyKQorI2RlZmluZSB4ZGxfcmVhbGxvYyhwdHIseCkgeHJlYWxsb2MocHRyLHgpCisKK3ZvaWQgKnhkbF9tbWZpbGVfZmlyc3QobW1maWxlX3QgKm1tZiwgbG9uZyAqc2l6ZSk7Citsb25nIHhkbF9tbWZpbGVfc2l6ZShtbWZpbGVfdCAqbW1mKTsKKworaW50IHhkbF9kaWZmKG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCSAgICAgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZywgeGRlbWl0Y2JfdCAqZWNiKTsKKwordHlwZWRlZiBzdHJ1Y3Qgc194bXBhcmFtIHsKKwl4cHBhcmFtX3QgeHBwOworCWludCBtYXJrZXJfc2l6ZTsKKwlpbnQgbGV2ZWw7CisJaW50IGZhdm9yOworCWludCBzdHlsZTsKKwljb25zdCBjaGFyICphbmNlc3RvcjsJLyogbGFiZWwgZm9yIG9yaWcgKi8KKwljb25zdCBjaGFyICpmaWxlMTsJLyogbGFiZWwgZm9yIG1mMSAqLworCWNvbnN0IGNoYXIgKmZpbGUyOwkvKiBsYWJlbCBmb3IgbWYyICovCit9IHhtcGFyYW1fdDsKKworI2RlZmluZSBERUZBVUxUX0NPTkZMSUNUX01BUktFUl9TSVpFIDcKKworaW50IHhkbF9tZXJnZShtbWZpbGVfdCAqb3JpZywgbW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwKKwkJeG1wYXJhbV90IGNvbnN0ICp4bXAsIG1tYnVmZmVyX3QgKnJlc3VsdCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qICNpZmRlZiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogI2lmICFkZWZpbmVkKFhESUZGX0gpICovCmRpZmYgLS1naXQgYS94ZGlmZi94ZGlmZmkuYyBiL3hkaWZmL3hkaWZmaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMDM1MTMKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94ZGlmZmkuYwpAQCAtMCwwICsxLDEwNTQgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMJRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZQorICogIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaW5jbHVkZSAieGluY2x1ZGUuaCIKKworI2RlZmluZSBYRExfTUFYX0NPU1RfTUlOIDI1NgorI2RlZmluZSBYRExfSEVVUl9NSU5fQ09TVCAyNTYKKyNkZWZpbmUgWERMX0xJTkVfTUFYIChsb25nKSgoMVVMIDw8IChDSEFSX0JJVCAqIHNpemVvZihsb25nKSAtIDEpKSAtIDEpCisjZGVmaW5lIFhETF9TTkFLRV9DTlQgMjAKKyNkZWZpbmUgWERMX0tfSEVVUiA0CisKK3R5cGVkZWYgc3RydWN0IHNfeGRwc3BsaXQgeworCWxvbmcgaTEsIGkyOworCWludCBtaW5fbG8sIG1pbl9oaTsKK30geGRwc3BsaXRfdDsKKworLyoKKyAqIFNlZSAiQW4gTyhORCkgRGlmZmVyZW5jZSBBbGdvcml0aG0gYW5kIGl0cyBWYXJpYXRpb25zIiwgYnkgRXVnZW5lIE15ZXJzLgorICogQmFzaWNhbGx5IGNvbnNpZGVycyBhICJib3giIChvZmYxLCBvZmYyLCBsaW0xLCBsaW0yKSBhbmQgc2NhbiBmcm9tIGJvdGgKKyAqIHRoZSBmb3J3YXJkIGRpYWdvbmFsIHN0YXJ0aW5nIGZyb20gKG9mZjEsIG9mZjIpIGFuZCB0aGUgYmFja3dhcmQgZGlhZ29uYWwKKyAqIHN0YXJ0aW5nIGZyb20gKGxpbTEsIGxpbTIpLiBJZiB0aGUgSyB2YWx1ZXMgb24gdGhlIHNhbWUgZGlhZ29uYWwgY3Jvc3NlcworICogcmV0dXJucyB0aGUgZnVydGhlc3QgcG9pbnQgb2YgcmVhY2guIFdlIG1pZ2h0IGVuY291bnRlciBleHBlbnNpdmUgZWRnZSBjYXNlcworICogdXNpbmcgdGhpcyBhbGdvcml0aG0sIHNvIGEgbGl0dGxlIGJpdCBvZiBoZXVyaXN0aWMgaXMgbmVlZGVkIHRvIGN1dCB0aGUKKyAqIHNlYXJjaCBhbmQgdG8gcmV0dXJuIGEgc3Vib3B0aW1hbCBwb2ludC4KKyAqLworc3RhdGljIGxvbmcgeGRsX3NwbGl0KHVuc2lnbmVkIGxvbmcgY29uc3QgKmhhMSwgbG9uZyBvZmYxLCBsb25nIGxpbTEsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgY29uc3QgKmhhMiwgbG9uZyBvZmYyLCBsb25nIGxpbTIsCisJCSAgICAgIGxvbmcgKmt2ZGYsIGxvbmcgKmt2ZGIsIGludCBuZWVkX21pbiwgeGRwc3BsaXRfdCAqc3BsLAorCQkgICAgICB4ZGFsZ29lbnZfdCAqeGVudikgeworCWxvbmcgZG1pbiA9IG9mZjEgLSBsaW0yLCBkbWF4ID0gbGltMSAtIG9mZjI7CisJbG9uZyBmbWlkID0gb2ZmMSAtIG9mZjIsIGJtaWQgPSBsaW0xIC0gbGltMjsKKwlsb25nIG9kZCA9IChmbWlkIC0gYm1pZCkgJiAxOworCWxvbmcgZm1pbiA9IGZtaWQsIGZtYXggPSBmbWlkOworCWxvbmcgYm1pbiA9IGJtaWQsIGJtYXggPSBibWlkOworCWxvbmcgZWMsIGQsIGkxLCBpMiwgcHJldjEsIGJlc3QsIGRkLCB2LCBrOworCisJLyoKKwkgKiBTZXQgaW5pdGlhbCBkaWFnb25hbCB2YWx1ZXMgZm9yIGJvdGggZm9yd2FyZCBhbmQgYmFja3dhcmQgcGF0aC4KKwkgKi8KKwlrdmRmW2ZtaWRdID0gb2ZmMTsKKwlrdmRiW2JtaWRdID0gbGltMTsKKworCWZvciAoZWMgPSAxOzsgZWMrKykgeworCQlpbnQgZ290X3NuYWtlID0gMDsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGV4dGVuZCB0aGUgZGlhZ29uYWwgImRvbWFpbiIgYnkgb25lLiBJZiB0aGUgbmV4dAorCQkgKiB2YWx1ZXMgZXhpdHMgdGhlIGJveCBib3VuZGFyaWVzIHdlIG5lZWQgdG8gY2hhbmdlIGl0IGluIHRoZQorCQkgKiBvcHBvc2l0ZSBkaXJlY3Rpb24gYmVjYXVzZSAobWF4IC0gbWluKSBtdXN0IGJlIGEgcG93ZXIgb2YKKwkJICogdHdvLgorCQkgKgorCQkgKiBBbHNvIHdlIGluaXRpYWxpemUgdGhlIGV4dGVybmFsIEsgdmFsdWUgdG8gLTEgc28gdGhhdCB3ZSBjYW4KKwkJICogYXZvaWQgZXh0cmEgY29uZGl0aW9ucyBpbiB0aGUgY2hlY2sgaW5zaWRlIHRoZSBjb3JlIGxvb3AuCisJCSAqLworCQlpZiAoZm1pbiA+IGRtaW4pCisJCQlrdmRmWy0tZm1pbiAtIDFdID0gLTE7CisJCWVsc2UKKwkJCSsrZm1pbjsKKwkJaWYgKGZtYXggPCBkbWF4KQorCQkJa3ZkZlsrK2ZtYXggKyAxXSA9IC0xOworCQllbHNlCisJCQktLWZtYXg7CisKKwkJZm9yIChkID0gZm1heDsgZCA+PSBmbWluOyBkIC09IDIpIHsKKwkJCWlmIChrdmRmW2QgLSAxXSA+PSBrdmRmW2QgKyAxXSkKKwkJCQlpMSA9IGt2ZGZbZCAtIDFdICsgMTsKKwkJCWVsc2UKKwkJCQlpMSA9IGt2ZGZbZCArIDFdOworCQkJcHJldjEgPSBpMTsKKwkJCWkyID0gaTEgLSBkOworCQkJZm9yICg7IGkxIDwgbGltMSAmJiBpMiA8IGxpbTIgJiYgaGExW2kxXSA9PSBoYTJbaTJdOyBpMSsrLCBpMisrKTsKKwkJCWlmIChpMSAtIHByZXYxID4geGVudi0+c25ha2VfY250KQorCQkJCWdvdF9zbmFrZSA9IDE7CisJCQlrdmRmW2RdID0gaTE7CisJCQlpZiAob2RkICYmIGJtaW4gPD0gZCAmJiBkIDw9IGJtYXggJiYga3ZkYltkXSA8PSBpMSkgeworCQkJCXNwbC0+aTEgPSBpMTsKKwkJCQlzcGwtPmkyID0gaTI7CisJCQkJc3BsLT5taW5fbG8gPSBzcGwtPm1pbl9oaSA9IDE7CisJCQkJcmV0dXJuIGVjOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byBleHRlbmQgdGhlIGRpYWdvbmFsICJkb21haW4iIGJ5IG9uZS4gSWYgdGhlIG5leHQKKwkJICogdmFsdWVzIGV4aXRzIHRoZSBib3ggYm91bmRhcmllcyB3ZSBuZWVkIHRvIGNoYW5nZSBpdCBpbiB0aGUKKwkJICogb3Bwb3NpdGUgZGlyZWN0aW9uIGJlY2F1c2UgKG1heCAtIG1pbikgbXVzdCBiZSBhIHBvd2VyIG9mCisJCSAqIHR3by4KKwkJICoKKwkJICogQWxzbyB3ZSBpbml0aWFsaXplIHRoZSBleHRlcm5hbCBLIHZhbHVlIHRvIC0xIHNvIHRoYXQgd2UgY2FuCisJCSAqIGF2b2lkIGV4dHJhIGNvbmRpdGlvbnMgaW4gdGhlIGNoZWNrIGluc2lkZSB0aGUgY29yZSBsb29wLgorCQkgKi8KKwkJaWYgKGJtaW4gPiBkbWluKQorCQkJa3ZkYlstLWJtaW4gLSAxXSA9IFhETF9MSU5FX01BWDsKKwkJZWxzZQorCQkJKytibWluOworCQlpZiAoYm1heCA8IGRtYXgpCisJCQlrdmRiWysrYm1heCArIDFdID0gWERMX0xJTkVfTUFYOworCQllbHNlCisJCQktLWJtYXg7CisKKwkJZm9yIChkID0gYm1heDsgZCA+PSBibWluOyBkIC09IDIpIHsKKwkJCWlmIChrdmRiW2QgLSAxXSA8IGt2ZGJbZCArIDFdKQorCQkJCWkxID0ga3ZkYltkIC0gMV07CisJCQllbHNlCisJCQkJaTEgPSBrdmRiW2QgKyAxXSAtIDE7CisJCQlwcmV2MSA9IGkxOworCQkJaTIgPSBpMSAtIGQ7CisJCQlmb3IgKDsgaTEgPiBvZmYxICYmIGkyID4gb2ZmMiAmJiBoYTFbaTEgLSAxXSA9PSBoYTJbaTIgLSAxXTsgaTEtLSwgaTItLSk7CisJCQlpZiAocHJldjEgLSBpMSA+IHhlbnYtPnNuYWtlX2NudCkKKwkJCQlnb3Rfc25ha2UgPSAxOworCQkJa3ZkYltkXSA9IGkxOworCQkJaWYgKCFvZGQgJiYgZm1pbiA8PSBkICYmIGQgPD0gZm1heCAmJiBpMSA8PSBrdmRmW2RdKSB7CisJCQkJc3BsLT5pMSA9IGkxOworCQkJCXNwbC0+aTIgPSBpMjsKKwkJCQlzcGwtPm1pbl9sbyA9IHNwbC0+bWluX2hpID0gMTsKKwkJCQlyZXR1cm4gZWM7CisJCQl9CisJCX0KKworCQlpZiAobmVlZF9taW4pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZiB0aGUgZWRpdCBjb3N0IGlzIGFib3ZlIHRoZSBoZXVyaXN0aWMgdHJpZ2dlciBhbmQgaWYKKwkJICogd2UgZ290IGEgZ29vZCBzbmFrZSwgd2Ugc2FtcGxlIGN1cnJlbnQgZGlhZ29uYWxzIHRvIHNlZQorCQkgKiBpZiBzb21lIG9mIHRoZW0gaGF2ZSByZWFjaGVkIGFuICJpbnRlcmVzdGluZyIgcGF0aC4gT3VyCisJCSAqIG1lYXN1cmUgaXMgYSBmdW5jdGlvbiBvZiB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgZGlhZ29uYWwKKwkJICogY29ybmVyIChpMSArIGkyKSBwZW5hbGl6ZWQgd2l0aCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUKKwkJICogbWlkIGRpYWdvbmFsIGl0c2VsZi4gSWYgdGhpcyB2YWx1ZSBpcyBhYm92ZSB0aGUgY3VycmVudAorCQkgKiBlZGl0IGNvc3QgdGltZXMgYSBtYWdpYyBmYWN0b3IgKFhETF9LX0hFVVIpIHdlIGNvbnNpZGVyCisJCSAqIGl0IGludGVyZXN0aW5nLgorCQkgKi8KKwkJaWYgKGdvdF9zbmFrZSAmJiBlYyA+IHhlbnYtPmhldXJfbWluKSB7CisJCQlmb3IgKGJlc3QgPSAwLCBkID0gZm1heDsgZCA+PSBmbWluOyBkIC09IDIpIHsKKwkJCQlkZCA9IGQgPiBmbWlkID8gZCAtIGZtaWQ6IGZtaWQgLSBkOworCQkJCWkxID0ga3ZkZltkXTsKKwkJCQlpMiA9IGkxIC0gZDsKKwkJCQl2ID0gKGkxIC0gb2ZmMSkgKyAoaTIgLSBvZmYyKSAtIGRkOworCisJCQkJaWYgKHYgPiBYRExfS19IRVVSICogZWMgJiYgdiA+IGJlc3QgJiYKKwkJCQkgICAgb2ZmMSArIHhlbnYtPnNuYWtlX2NudCA8PSBpMSAmJiBpMSA8IGxpbTEgJiYKKwkJCQkgICAgb2ZmMiArIHhlbnYtPnNuYWtlX2NudCA8PSBpMiAmJiBpMiA8IGxpbTIpIHsKKwkJCQkJZm9yIChrID0gMTsgaGExW2kxIC0ga10gPT0gaGEyW2kyIC0ga107IGsrKykKKwkJCQkJCWlmIChrID09IHhlbnYtPnNuYWtlX2NudCkgeworCQkJCQkJCWJlc3QgPSB2OworCQkJCQkJCXNwbC0+aTEgPSBpMTsKKwkJCQkJCQlzcGwtPmkyID0gaTI7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJfQorCQkJfQorCQkJaWYgKGJlc3QgPiAwKSB7CisJCQkJc3BsLT5taW5fbG8gPSAxOworCQkJCXNwbC0+bWluX2hpID0gMDsKKwkJCQlyZXR1cm4gZWM7CisJCQl9CisKKwkJCWZvciAoYmVzdCA9IDAsIGQgPSBibWF4OyBkID49IGJtaW47IGQgLT0gMikgeworCQkJCWRkID0gZCA+IGJtaWQgPyBkIC0gYm1pZDogYm1pZCAtIGQ7CisJCQkJaTEgPSBrdmRiW2RdOworCQkJCWkyID0gaTEgLSBkOworCQkJCXYgPSAobGltMSAtIGkxKSArIChsaW0yIC0gaTIpIC0gZGQ7CisKKwkJCQlpZiAodiA+IFhETF9LX0hFVVIgKiBlYyAmJiB2ID4gYmVzdCAmJgorCQkJCSAgICBvZmYxIDwgaTEgJiYgaTEgPD0gbGltMSAtIHhlbnYtPnNuYWtlX2NudCAmJgorCQkJCSAgICBvZmYyIDwgaTIgJiYgaTIgPD0gbGltMiAtIHhlbnYtPnNuYWtlX2NudCkgeworCQkJCQlmb3IgKGsgPSAwOyBoYTFbaTEgKyBrXSA9PSBoYTJbaTIgKyBrXTsgaysrKQorCQkJCQkJaWYgKGsgPT0geGVudi0+c25ha2VfY250IC0gMSkgeworCQkJCQkJCWJlc3QgPSB2OworCQkJCQkJCXNwbC0+aTEgPSBpMTsKKwkJCQkJCQlzcGwtPmkyID0gaTI7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJfQorCQkJfQorCQkJaWYgKGJlc3QgPiAwKSB7CisJCQkJc3BsLT5taW5fbG8gPSAwOworCQkJCXNwbC0+bWluX2hpID0gMTsKKwkJCQlyZXR1cm4gZWM7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBFbm91Z2ggaXMgZW5vdWdoLiBXZSBzcGVudCB0b28gbXVjaCB0aW1lIGhlcmUgYW5kIG5vdyB3ZQorCQkgKiBjb2xsZWN0IHRoZSBmdXJ0aGVzdCByZWFjaGluZyBwYXRoIHVzaW5nIHRoZSAoaTEgKyBpMikKKwkJICogbWVhc3VyZS4KKwkJICovCisJCWlmIChlYyA+PSB4ZW52LT5teGNvc3QpIHsKKwkJCWxvbmcgZmJlc3QsIGZiZXN0MSwgYmJlc3QsIGJiZXN0MTsKKworCQkJZmJlc3QgPSBmYmVzdDEgPSAtMTsKKwkJCWZvciAoZCA9IGZtYXg7IGQgPj0gZm1pbjsgZCAtPSAyKSB7CisJCQkJaTEgPSBYRExfTUlOKGt2ZGZbZF0sIGxpbTEpOworCQkJCWkyID0gaTEgLSBkOworCQkJCWlmIChsaW0yIDwgaTIpCisJCQkJCWkxID0gbGltMiArIGQsIGkyID0gbGltMjsKKwkJCQlpZiAoZmJlc3QgPCBpMSArIGkyKSB7CisJCQkJCWZiZXN0ID0gaTEgKyBpMjsKKwkJCQkJZmJlc3QxID0gaTE7CisJCQkJfQorCQkJfQorCisJCQliYmVzdCA9IGJiZXN0MSA9IFhETF9MSU5FX01BWDsKKwkJCWZvciAoZCA9IGJtYXg7IGQgPj0gYm1pbjsgZCAtPSAyKSB7CisJCQkJaTEgPSBYRExfTUFYKG9mZjEsIGt2ZGJbZF0pOworCQkJCWkyID0gaTEgLSBkOworCQkJCWlmIChpMiA8IG9mZjIpCisJCQkJCWkxID0gb2ZmMiArIGQsIGkyID0gb2ZmMjsKKwkJCQlpZiAoaTEgKyBpMiA8IGJiZXN0KSB7CisJCQkJCWJiZXN0ID0gaTEgKyBpMjsKKwkJCQkJYmJlc3QxID0gaTE7CisJCQkJfQorCQkJfQorCisJCQlpZiAoKGxpbTEgKyBsaW0yKSAtIGJiZXN0IDwgZmJlc3QgLSAob2ZmMSArIG9mZjIpKSB7CisJCQkJc3BsLT5pMSA9IGZiZXN0MTsKKwkJCQlzcGwtPmkyID0gZmJlc3QgLSBmYmVzdDE7CisJCQkJc3BsLT5taW5fbG8gPSAxOworCQkJCXNwbC0+bWluX2hpID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJc3BsLT5pMSA9IGJiZXN0MTsKKwkJCQlzcGwtPmkyID0gYmJlc3QgLSBiYmVzdDE7CisJCQkJc3BsLT5taW5fbG8gPSAwOworCQkJCXNwbC0+bWluX2hpID0gMTsKKwkJCX0KKwkJCXJldHVybiBlYzsKKwkJfQorCX0KK30KKworCisvKgorICogUnVsZTogIkRpdmlkZSBldCBJbXBlcmEiIChkaXZpZGUgJiBjb25xdWVyKS4gUmVjdXJzaXZlbHkgc3BsaXQgdGhlIGJveCBpbgorICogc3ViLWJveGVzIGJ5IGNhbGxpbmcgdGhlIGJveCBzcGxpdHRpbmcgZnVuY3Rpb24uIE5vdGUgdGhhdCB0aGUgcmVhbCBqb2IKKyAqIChtYXJraW5nIGNoYW5nZWQgbGluZXMpIGlzIGRvbmUgaW4gdGhlIHR3byBib3VuZGFyeSByZWFjaGluZyBjaGVja3MuCisgKi8KK2ludCB4ZGxfcmVjc19jbXAoZGlmZmRhdGFfdCAqZGQxLCBsb25nIG9mZjEsIGxvbmcgbGltMSwKKwkJIGRpZmZkYXRhX3QgKmRkMiwgbG9uZyBvZmYyLCBsb25nIGxpbTIsCisJCSBsb25nICprdmRmLCBsb25nICprdmRiLCBpbnQgbmVlZF9taW4sIHhkYWxnb2Vudl90ICp4ZW52KSB7CisJdW5zaWduZWQgbG9uZyBjb25zdCAqaGExID0gZGQxLT5oYSwgKmhhMiA9IGRkMi0+aGE7CisKKwkvKgorCSAqIFNocmluayB0aGUgYm94IGJ5IHdhbGtpbmcgdGhyb3VnaCBlYWNoIGRpYWdvbmFsIHNuYWtlIChTVyBhbmQgTkUpLgorCSAqLworCWZvciAoOyBvZmYxIDwgbGltMSAmJiBvZmYyIDwgbGltMiAmJiBoYTFbb2ZmMV0gPT0gaGEyW29mZjJdOyBvZmYxKyssIG9mZjIrKyk7CisJZm9yICg7IG9mZjEgPCBsaW0xICYmIG9mZjIgPCBsaW0yICYmIGhhMVtsaW0xIC0gMV0gPT0gaGEyW2xpbTIgLSAxXTsgbGltMS0tLCBsaW0yLS0pOworCisJLyoKKwkgKiBJZiBvbmUgZGltZW5zaW9uIGlzIGVtcHR5LCB0aGVuIGFsbCByZWNvcmRzIG9uIHRoZSBvdGhlciBvbmUgbXVzdAorCSAqIGJlIG9idmlvdXNseSBjaGFuZ2VkLgorCSAqLworCWlmIChvZmYxID09IGxpbTEpIHsKKwkJY2hhciAqcmNoZzIgPSBkZDItPnJjaGc7CisJCWxvbmcgKnJpbmRleDIgPSBkZDItPnJpbmRleDsKKworCQlmb3IgKDsgb2ZmMiA8IGxpbTI7IG9mZjIrKykKKwkJCXJjaGcyW3JpbmRleDJbb2ZmMl1dID0gMTsKKwl9IGVsc2UgaWYgKG9mZjIgPT0gbGltMikgeworCQljaGFyICpyY2hnMSA9IGRkMS0+cmNoZzsKKwkJbG9uZyAqcmluZGV4MSA9IGRkMS0+cmluZGV4OworCisJCWZvciAoOyBvZmYxIDwgbGltMTsgb2ZmMSsrKQorCQkJcmNoZzFbcmluZGV4MVtvZmYxXV0gPSAxOworCX0gZWxzZSB7CisJCXhkcHNwbGl0X3Qgc3BsOworCQlzcGwuaTEgPSBzcGwuaTIgPSAwOworCisJCS8qCisJCSAqIERpdmlkZSAuLi4KKwkJICovCisJCWlmICh4ZGxfc3BsaXQoaGExLCBvZmYxLCBsaW0xLCBoYTIsIG9mZjIsIGxpbTIsIGt2ZGYsIGt2ZGIsCisJCQkgICAgICBuZWVkX21pbiwgJnNwbCwgeGVudikgPCAwKSB7CisKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCS8qCisJCSAqIC4uLiBldCBJbXBlcmEuCisJCSAqLworCQlpZiAoeGRsX3JlY3NfY21wKGRkMSwgb2ZmMSwgc3BsLmkxLCBkZDIsIG9mZjIsIHNwbC5pMiwKKwkJCQkga3ZkZiwga3ZkYiwgc3BsLm1pbl9sbywgeGVudikgPCAwIHx8CisJCSAgICB4ZGxfcmVjc19jbXAoZGQxLCBzcGwuaTEsIGxpbTEsIGRkMiwgc3BsLmkyLCBsaW0yLAorCQkJCSBrdmRmLCBrdmRiLCBzcGwubWluX2hpLCB4ZW52KSA8IDApIHsKKworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworaW50IHhkbF9kb19kaWZmKG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCQl4ZGZlbnZfdCAqeGUpIHsKKwlsb25nIG5kaWFnczsKKwlsb25nICprdmQsICprdmRmLCAqa3ZkYjsKKwl4ZGFsZ29lbnZfdCB4ZW52OworCWRpZmZkYXRhX3QgZGQxLCBkZDI7CisKKwlpZiAoWERGX0RJRkZfQUxHKHhwcC0+ZmxhZ3MpID09IFhERl9QQVRJRU5DRV9ESUZGKQorCQlyZXR1cm4geGRsX2RvX3BhdGllbmNlX2RpZmYobWYxLCBtZjIsIHhwcCwgeGUpOworCisJaWYgKFhERl9ESUZGX0FMRyh4cHAtPmZsYWdzKSA9PSBYREZfSElTVE9HUkFNX0RJRkYpCisJCXJldHVybiB4ZGxfZG9faGlzdG9ncmFtX2RpZmYobWYxLCBtZjIsIHhwcCwgeGUpOworCisJaWYgKHhkbF9wcmVwYXJlX2VudihtZjEsIG1mMiwgeHBwLCB4ZSkgPCAwKSB7CisKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogQWxsb2NhdGUgYW5kIHNldHVwIEsgdmVjdG9ycyB0byBiZSB1c2VkIGJ5IHRoZSBkaWZmZXJlbnRpYWwKKwkgKiBhbGdvcml0aG0uCisJICoKKwkgKiBPbmUgaXMgdG8gc3RvcmUgdGhlIGZvcndhcmQgcGF0aCBhbmQgb25lIHRvIHN0b3JlIHRoZSBiYWNrd2FyZCBwYXRoLgorCSAqLworCW5kaWFncyA9IHhlLT54ZGYxLm5yZWZmICsgeGUtPnhkZjIubnJlZmYgKyAzOworCWlmICghKGt2ZCA9IChsb25nICopIHhkbF9tYWxsb2MoKDIgKiBuZGlhZ3MgKyAyKSAqIHNpemVvZihsb25nKSkpKSB7CisKKwkJeGRsX2ZyZWVfZW52KHhlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlrdmRmID0ga3ZkOworCWt2ZGIgPSBrdmRmICsgbmRpYWdzOworCWt2ZGYgKz0geGUtPnhkZjIubnJlZmYgKyAxOworCWt2ZGIgKz0geGUtPnhkZjIubnJlZmYgKyAxOworCisJeGVudi5teGNvc3QgPSB4ZGxfYm9nb3NxcnQobmRpYWdzKTsKKwlpZiAoeGVudi5teGNvc3QgPCBYRExfTUFYX0NPU1RfTUlOKQorCQl4ZW52Lm14Y29zdCA9IFhETF9NQVhfQ09TVF9NSU47CisJeGVudi5zbmFrZV9jbnQgPSBYRExfU05BS0VfQ05UOworCXhlbnYuaGV1cl9taW4gPSBYRExfSEVVUl9NSU5fQ09TVDsKKworCWRkMS5ucmVjID0geGUtPnhkZjEubnJlZmY7CisJZGQxLmhhID0geGUtPnhkZjEuaGE7CisJZGQxLnJjaGcgPSB4ZS0+eGRmMS5yY2hnOworCWRkMS5yaW5kZXggPSB4ZS0+eGRmMS5yaW5kZXg7CisJZGQyLm5yZWMgPSB4ZS0+eGRmMi5ucmVmZjsKKwlkZDIuaGEgPSB4ZS0+eGRmMi5oYTsKKwlkZDIucmNoZyA9IHhlLT54ZGYyLnJjaGc7CisJZGQyLnJpbmRleCA9IHhlLT54ZGYyLnJpbmRleDsKKworCWlmICh4ZGxfcmVjc19jbXAoJmRkMSwgMCwgZGQxLm5yZWMsICZkZDIsIDAsIGRkMi5ucmVjLAorCQkJIGt2ZGYsIGt2ZGIsICh4cHAtPmZsYWdzICYgWERGX05FRURfTUlOSU1BTCkgIT0gMCwgJnhlbnYpIDwgMCkgeworCisJCXhkbF9mcmVlKGt2ZCk7CisJCXhkbF9mcmVlX2Vudih4ZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwl4ZGxfZnJlZShrdmQpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHhkY2hhbmdlX3QgKnhkbF9hZGRfY2hhbmdlKHhkY2hhbmdlX3QgKnhzY3IsIGxvbmcgaTEsIGxvbmcgaTIsIGxvbmcgY2hnMSwgbG9uZyBjaGcyKSB7CisJeGRjaGFuZ2VfdCAqeGNoOworCisJaWYgKCEoeGNoID0gKHhkY2hhbmdlX3QgKikgeGRsX21hbGxvYyhzaXplb2YoeGRjaGFuZ2VfdCkpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwl4Y2gtPm5leHQgPSB4c2NyOworCXhjaC0+aTEgPSBpMTsKKwl4Y2gtPmkyID0gaTI7CisJeGNoLT5jaGcxID0gY2hnMTsKKwl4Y2gtPmNoZzIgPSBjaGcyOworCXhjaC0+aWdub3JlID0gMDsKKworCXJldHVybiB4Y2g7Cit9CisKKworc3RhdGljIGludCByZWNzX21hdGNoKHhyZWNvcmRfdCAqcmVjMSwgeHJlY29yZF90ICpyZWMyLCBsb25nIGZsYWdzKQoreworCXJldHVybiAocmVjMS0+aGEgPT0gcmVjMi0+aGEgJiYKKwkJeGRsX3JlY21hdGNoKHJlYzEtPnB0ciwgcmVjMS0+c2l6ZSwKKwkJCSAgICAgcmVjMi0+cHRyLCByZWMyLT5zaXplLAorCQkJICAgICBmbGFncykpOworfQorCisvKgorICogSWYgYSBsaW5lIGlzIGluZGVudGVkIG1vcmUgdGhhbiB0aGlzLCBnZXRfaW5kZW50KCkganVzdCByZXR1cm5zIHRoaXMgdmFsdWUuCisgKiBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gZG8gYWJzdXJkIGFtb3VudHMgb2Ygd29yayBmb3IgZGF0YSB0aGF0IGFyZSBub3QKKyAqIGh1bWFuLXJlYWRhYmxlIHRleHQsIGFuZCBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgb3V0cHV0IG9mIGdldF9pbmRlbnQgZml0cworICogd2l0aGluIGFuIGludC4KKyAqLworI2RlZmluZSBNQVhfSU5ERU5UIDIwMAorCisvKgorICogUmV0dXJuIHRoZSBhbW91bnQgb2YgaW5kZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZCBsaW5lLCB0cmVhdGluZyBUQUIgYXMgOAorICogY29sdW1ucy4gUmV0dXJuIC0xIGlmIGxpbmUgaXMgZW1wdHkgb3IgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlLiBDbGFtcCB0aGUKKyAqIG91dHB1dCB2YWx1ZSBhdCBNQVhfSU5ERU5ULgorICovCitzdGF0aWMgaW50IGdldF9pbmRlbnQoeHJlY29yZF90ICpyZWMpCit7CisJbG9uZyBpOworCWludCByZXQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHJlYy0+c2l6ZTsgaSsrKSB7CisJCWNoYXIgYyA9IHJlYy0+cHRyW2ldOworCisJCWlmICghWERMX0lTU1BBQ0UoYykpCisJCQlyZXR1cm4gcmV0OworCQllbHNlIGlmIChjID09ICcgJykKKwkJCXJldCArPSAxOworCQllbHNlIGlmIChjID09ICdcdCcpCisJCQlyZXQgKz0gOCAtIHJldCAlIDg7CisJCS8qIGlnbm9yZSBvdGhlciB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgKi8KKworCQlpZiAocmV0ID49IE1BWF9JTkRFTlQpCisJCQlyZXR1cm4gTUFYX0lOREVOVDsKKwl9CisKKwkvKiBUaGUgbGluZSBjb250YWlucyBvbmx5IHdoaXRlc3BhY2UuICovCisJcmV0dXJuIC0xOworfQorCisvKgorICogSWYgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGJsYW5rIHJvd3MgYXJlIGZvdW5kLCBqdXN0IHJldHVybgorICogdGhpcyB2YWx1ZS4gVGhpcyBhdm9pZHMgcmVxdWlyaW5nIE8oTl4yKSB3b3JrIGZvciBwYXRob2xvZ2ljYWwgY2FzZXMsIGFuZAorICogYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG91dHB1dCBvZiBzY29yZV9zcGxpdCBmaXRzIGluIGFuIGludC4KKyAqLworI2RlZmluZSBNQVhfQkxBTktTIDIwCisKKy8qIENoYXJhY3RlcmlzdGljcyBtZWFzdXJlZCBhYm91dCBhIGh5cG90aGV0aWNhbCBzcGxpdCBwb3NpdGlvbi4gKi8KK3N0cnVjdCBzcGxpdF9tZWFzdXJlbWVudCB7CisJLyoKKwkgKiBJcyB0aGUgc3BsaXQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSAoYXNpZGUgZnJvbSBhbnkgYmxhbmsgbGluZXMpPworCSAqLworCWludCBlbmRfb2ZfZmlsZTsKKworCS8qCisJICogSG93IG11Y2ggaXMgdGhlIGxpbmUgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBzcGxpdCBpbmRlbnRlZCAob3IgLTEKKwkgKiBpZiB0aGUgbGluZSBpcyBibGFuayk6CisJICovCisJaW50IGluZGVudDsKKworCS8qCisJICogSG93IG1hbnkgY29uc2VjdXRpdmUgbGluZXMgYWJvdmUgdGhlIHNwbGl0IGFyZSBibGFuaz8KKwkgKi8KKwlpbnQgcHJlX2JsYW5rOworCisJLyoKKwkgKiBIb3cgbXVjaCBpcyB0aGUgbmVhcmVzdCBub24tYmxhbmsgbGluZSBhYm92ZSB0aGUgc3BsaXQgaW5kZW50ZWQgKG9yCisJICogLTEgaWYgdGhlcmUgaXMgbm8gc3VjaCBsaW5lKT8KKwkgKi8KKwlpbnQgcHJlX2luZGVudDsKKworCS8qCisJICogSG93IG1hbnkgbGluZXMgYWZ0ZXIgdGhlIGxpbmUgZm9sbG93aW5nIHRoZSBzcGxpdCBhcmUgYmxhbms/CisJICovCisJaW50IHBvc3RfYmxhbms7CisKKwkvKgorCSAqIEhvdyBtdWNoIGlzIHRoZSBuZWFyZXN0IG5vbi1ibGFuayBsaW5lIGFmdGVyIHRoZSBsaW5lIGZvbGxvd2luZyB0aGUKKwkgKiBzcGxpdCBpbmRlbnRlZCAob3IgLTEgaWYgdGhlcmUgaXMgbm8gc3VjaCBsaW5lKT8KKwkgKi8KKwlpbnQgcG9zdF9pbmRlbnQ7Cit9OworCitzdHJ1Y3Qgc3BsaXRfc2NvcmUgeworCS8qIFRoZSBlZmZlY3RpdmUgaW5kZW50IG9mIHRoaXMgc3BsaXQgKHNtYWxsZXIgaXMgcHJlZmVycmVkKS4gKi8KKwlpbnQgZWZmZWN0aXZlX2luZGVudDsKKworCS8qIFBlbmFsdHkgZm9yIHRoaXMgc3BsaXQgKHNtYWxsZXIgaXMgcHJlZmVycmVkKS4gKi8KKwlpbnQgcGVuYWx0eTsKK307CisKKy8qCisgKiBGaWxsIG0gd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBhIGh5cG90aGV0aWNhbCBzcGxpdCBvZiB4ZGYgYWJvdmUgbGluZSBzcGxpdC4KKyAqLworc3RhdGljIHZvaWQgbWVhc3VyZV9zcGxpdChjb25zdCB4ZGZpbGVfdCAqeGRmLCBsb25nIHNwbGl0LAorCQkJICBzdHJ1Y3Qgc3BsaXRfbWVhc3VyZW1lbnQgKm0pCit7CisJbG9uZyBpOworCisJaWYgKHNwbGl0ID49IHhkZi0+bnJlYykgeworCQltLT5lbmRfb2ZfZmlsZSA9IDE7CisJCW0tPmluZGVudCA9IC0xOworCX0gZWxzZSB7CisJCW0tPmVuZF9vZl9maWxlID0gMDsKKwkJbS0+aW5kZW50ID0gZ2V0X2luZGVudCh4ZGYtPnJlY3Nbc3BsaXRdKTsKKwl9CisKKwltLT5wcmVfYmxhbmsgPSAwOworCW0tPnByZV9pbmRlbnQgPSAtMTsKKwlmb3IgKGkgPSBzcGxpdCAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCW0tPnByZV9pbmRlbnQgPSBnZXRfaW5kZW50KHhkZi0+cmVjc1tpXSk7CisJCWlmIChtLT5wcmVfaW5kZW50ICE9IC0xKQorCQkJYnJlYWs7CisJCW0tPnByZV9ibGFuayArPSAxOworCQlpZiAobS0+cHJlX2JsYW5rID09IE1BWF9CTEFOS1MpIHsKKwkJCW0tPnByZV9pbmRlbnQgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwltLT5wb3N0X2JsYW5rID0gMDsKKwltLT5wb3N0X2luZGVudCA9IC0xOworCWZvciAoaSA9IHNwbGl0ICsgMTsgaSA8IHhkZi0+bnJlYzsgaSsrKSB7CisJCW0tPnBvc3RfaW5kZW50ID0gZ2V0X2luZGVudCh4ZGYtPnJlY3NbaV0pOworCQlpZiAobS0+cG9zdF9pbmRlbnQgIT0gLTEpCisJCQlicmVhazsKKwkJbS0+cG9zdF9ibGFuayArPSAxOworCQlpZiAobS0+cG9zdF9ibGFuayA9PSBNQVhfQkxBTktTKSB7CisJCQltLT5wb3N0X2luZGVudCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoZSBlbXBpcmljYWxseS1kZXRlcm1pbmVkIHdlaWdodCBmYWN0b3JzIHVzZWQgYnkgc2NvcmVfc3BsaXQoKSBiZWxvdy4KKyAqIExhcmdlciB2YWx1ZXMgbWVhbnMgdGhhdCB0aGUgcG9zaXRpb24gaXMgYSBsZXNzIGZhdm9yYWJsZSBwbGFjZSB0byBzcGxpdC4KKyAqCisgKiBOb3RlIHRoYXQgc2NvcmVzIGFyZSBvbmx5IGV2ZXIgY29tcGFyZWQgYWdhaW5zdCBlYWNoIG90aGVyLCBzbyBtdWx0aXBseWluZworICogYWxsIG9mIHRoZXNlIHdlaWdodC9wZW5hbHR5IHZhbHVlcyBieSB0aGUgc2FtZSBmYWN0b3Igd291bGRuJ3QgY2hhbmdlIHRoZQorICogaGV1cmlzdGljJ3MgYmVoYXZpb3IuIFN0aWxsLCB3ZSBuZWVkIHRvIHNldCB0aGF0IGFyYml0cmFyeSBzY2FsZSAqc29tZWhvdyouCisgKiBJbiBwcmFjdGljZSwgdGhlc2UgbnVtYmVycyBhcmUgY2hvc2VuIHRvIGJlIGxhcmdlIGVub3VnaCB0aGF0IHRoZXkgY2FuIGJlCisgKiBhZGp1c3RlZCByZWxhdGl2ZSB0byBlYWNoIG90aGVyIHdpdGggc3VmZmljaWVudCBwcmVjaXNpb24gZGVzcGl0ZSB1c2luZworICogaW50ZWdlciBtYXRoLgorICovCisKKy8qIFBlbmFsdHkgaWYgdGhlcmUgYXJlIG5vIG5vbi1ibGFuayBsaW5lcyBiZWZvcmUgdGhlIHNwbGl0ICovCisjZGVmaW5lIFNUQVJUX09GX0ZJTEVfUEVOQUxUWSAxCisKKy8qIFBlbmFsdHkgaWYgdGhlcmUgYXJlIG5vIG5vbi1ibGFuayBsaW5lcyBhZnRlciB0aGUgc3BsaXQgKi8KKyNkZWZpbmUgRU5EX09GX0ZJTEVfUEVOQUxUWSAyMQorCisvKiBNdWx0aXBsaWVyIGZvciB0aGUgbnVtYmVyIG9mIGJsYW5rIGxpbmVzIGFyb3VuZCB0aGUgc3BsaXQgKi8KKyNkZWZpbmUgVE9UQUxfQkxBTktfV0VJR0hUICgtMzApCisKKy8qIE11bHRpcGxpZXIgZm9yIHRoZSBudW1iZXIgb2YgYmxhbmsgbGluZXMgYWZ0ZXIgdGhlIHNwbGl0ICovCisjZGVmaW5lIFBPU1RfQkxBTktfV0VJR0hUIDYKKworLyoKKyAqIFBlbmFsdGllcyBhcHBsaWVkIGlmIHRoZSBsaW5lIGlzIGluZGVudGVkIG1vcmUgdGhhbiBpdHMgcHJlZGVjZXNzb3IKKyAqLworI2RlZmluZSBSRUxBVElWRV9JTkRFTlRfUEVOQUxUWSAoLTQpCisjZGVmaW5lIFJFTEFUSVZFX0lOREVOVF9XSVRIX0JMQU5LX1BFTkFMVFkgMTAKKworLyoKKyAqIFBlbmFsdGllcyBhcHBsaWVkIGlmIHRoZSBsaW5lIGlzIGluZGVudGVkIGxlc3MgdGhhbiBib3RoIGl0cyBwcmVkZWNlc3NvciBhbmQKKyAqIGl0cyBzdWNjZXNzb3IKKyAqLworI2RlZmluZSBSRUxBVElWRV9PVVRERU5UX1BFTkFMVFkgMjQKKyNkZWZpbmUgUkVMQVRJVkVfT1VUREVOVF9XSVRIX0JMQU5LX1BFTkFMVFkgMTcKKworLyoKKyAqIFBlbmFsdGllcyBhcHBsaWVkIGlmIHRoZSBsaW5lIGlzIGluZGVudGVkIGxlc3MgdGhhbiBpdHMgcHJlZGVjZXNzb3IgYnV0IG5vdAorICogbGVzcyB0aGFuIGl0cyBzdWNjZXNzb3IKKyAqLworI2RlZmluZSBSRUxBVElWRV9ERURFTlRfUEVOQUxUWSAyMworI2RlZmluZSBSRUxBVElWRV9ERURFTlRfV0lUSF9CTEFOS19QRU5BTFRZIDE3CisKKy8qCisgKiBXZSBvbmx5IGNvbnNpZGVyIHdoZXRoZXIgdGhlIHN1bSBvZiB0aGUgZWZmZWN0aXZlIGluZGVudHMgZm9yIHNwbGl0cyBhcmUKKyAqIGxlc3MgdGhhbiAoLTEpLCBlcXVhbCB0byAoMCksIG9yIGdyZWF0ZXIgdGhhbiAoKzEpIGVhY2ggb3RoZXIuIFRoZSByZXN1bHRpbmcKKyAqIHZhbHVlIGlzIG11bHRpcGxpZWQgYnkgdGhlIGZvbGxvd2luZyB3ZWlnaHQgYW5kIGNvbWJpbmVkIHdpdGggdGhlIHBlbmFsdHkgdG8KKyAqIGRldGVybWluZSB0aGUgYmV0dGVyIG9mIHR3byBzY29yZXMuCisgKi8KKyNkZWZpbmUgSU5ERU5UX1dFSUdIVCA2MAorCisvKgorICogSG93IGZhciBkbyB3ZSBzbGlkZSBhIGh1bmsgYXQgbW9zdD8KKyAqLworI2RlZmluZSBJTkRFTlRfSEVVUklTVElDX01BWF9TTElESU5HIDEwMAorCisvKgorICogQ29tcHV0ZSBhIGJhZG5lc3Mgc2NvcmUgZm9yIHRoZSBoeXBvdGhldGljYWwgc3BsaXQgd2hvc2UgbWVhc3VyZW1lbnRzIGFyZQorICogc3RvcmVkIGluIG0uIFRoZSB3ZWlnaHQgZmFjdG9ycyB3ZXJlIGRldGVybWluZWQgZW1waXJpY2FsbHkgdXNpbmcgdGhlIHRvb2xzCisgKiBhbmQgY29ycHVzIGRlc2NyaWJlZCBpbgorICoKKyAqICAgICBodHRwczovL2dpdGh1Yi5jb20vbWhhZ2dlci9kaWZmLXNsaWRlci10b29scworICoKKyAqIEFsc28gc2VlIHRoYXQgcHJvamVjdCBpZiB5b3Ugd2FudCB0byBpbXByb3ZlIHRoZSB3ZWlnaHRzIGJhc2VkIG9uLCBmb3IKKyAqIGV4YW1wbGUsIGEgbGFyZ2VyIG9yIG1vcmUgZGl2ZXJzZSBjb3JwdXMuCisgKi8KK3N0YXRpYyB2b2lkIHNjb3JlX2FkZF9zcGxpdChjb25zdCBzdHJ1Y3Qgc3BsaXRfbWVhc3VyZW1lbnQgKm0sIHN0cnVjdCBzcGxpdF9zY29yZSAqcykKK3sKKwkvKgorCSAqIEEgcGxhY2UgdG8gYWNjdW11bGF0ZSBwZW5hbHR5IGZhY3RvcnMgKHBvc2l0aXZlIG1ha2VzIHRoaXMgaW5kZXggbW9yZQorCSAqIGZhdm9yZWQpOgorCSAqLworCWludCBwb3N0X2JsYW5rLCB0b3RhbF9ibGFuaywgaW5kZW50LCBhbnlfYmxhbmtzOworCisJaWYgKG0tPnByZV9pbmRlbnQgPT0gLTEgJiYgbS0+cHJlX2JsYW5rID09IDApCisJCXMtPnBlbmFsdHkgKz0gU1RBUlRfT0ZfRklMRV9QRU5BTFRZOworCisJaWYgKG0tPmVuZF9vZl9maWxlKQorCQlzLT5wZW5hbHR5ICs9IEVORF9PRl9GSUxFX1BFTkFMVFk7CisKKwkvKgorCSAqIFNldCBwb3N0X2JsYW5rIHRvIHRoZSBudW1iZXIgb2YgYmxhbmsgbGluZXMgZm9sbG93aW5nIHRoZSBzcGxpdCwKKwkgKiBpbmNsdWRpbmcgdGhlIGxpbmUgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHNwbGl0OgorCSAqLworCXBvc3RfYmxhbmsgPSAobS0+aW5kZW50ID09IC0xKSA/IDEgKyBtLT5wb3N0X2JsYW5rIDogMDsKKwl0b3RhbF9ibGFuayA9IG0tPnByZV9ibGFuayArIHBvc3RfYmxhbms7CisKKwkvKiBQZW5hbHRpZXMgYmFzZWQgb24gbmVhcmJ5IGJsYW5rIGxpbmVzOiAqLworCXMtPnBlbmFsdHkgKz0gVE9UQUxfQkxBTktfV0VJR0hUICogdG90YWxfYmxhbms7CisJcy0+cGVuYWx0eSArPSBQT1NUX0JMQU5LX1dFSUdIVCAqIHBvc3RfYmxhbms7CisKKwlpZiAobS0+aW5kZW50ICE9IC0xKQorCQlpbmRlbnQgPSBtLT5pbmRlbnQ7CisJZWxzZQorCQlpbmRlbnQgPSBtLT5wb3N0X2luZGVudDsKKworCWFueV9ibGFua3MgPSAodG90YWxfYmxhbmsgIT0gMCk7CisKKwkvKiBOb3RlIHRoYXQgdGhlIGVmZmVjdGl2ZSBpbmRlbnQgaXMgLTEgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZTogKi8KKwlzLT5lZmZlY3RpdmVfaW5kZW50ICs9IGluZGVudDsKKworCWlmIChpbmRlbnQgPT0gLTEpIHsKKwkJLyogTm8gYWRkaXRpb25hbCBhZGp1c3RtZW50cyBuZWVkZWQuICovCisJfSBlbHNlIGlmIChtLT5wcmVfaW5kZW50ID09IC0xKSB7CisJCS8qIE5vIGFkZGl0aW9uYWwgYWRqdXN0bWVudHMgbmVlZGVkLiAqLworCX0gZWxzZSBpZiAoaW5kZW50ID4gbS0+cHJlX2luZGVudCkgeworCQkvKgorCQkgKiBUaGUgbGluZSBpcyBpbmRlbnRlZCBtb3JlIHRoYW4gaXRzIHByZWRlY2Vzc29yLgorCQkgKi8KKwkJcy0+cGVuYWx0eSArPSBhbnlfYmxhbmtzID8KKwkJCVJFTEFUSVZFX0lOREVOVF9XSVRIX0JMQU5LX1BFTkFMVFkgOgorCQkJUkVMQVRJVkVfSU5ERU5UX1BFTkFMVFk7CisJfSBlbHNlIGlmIChpbmRlbnQgPT0gbS0+cHJlX2luZGVudCkgeworCQkvKgorCQkgKiBUaGUgbGluZSBoYXMgdGhlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwgYXMgaXRzIHByZWRlY2Vzc29yLgorCQkgKiBObyBhZGRpdGlvbmFsIGFkanVzdG1lbnRzIG5lZWRlZC4KKwkJICovCisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIGxpbmUgaXMgaW5kZW50ZWQgbGVzcyB0aGFuIGl0cyBwcmVkZWNlc3Nvci4gSXQgY291bGQgYmUKKwkJICogdGhlIGJsb2NrIHRlcm1pbmF0b3Igb2YgdGhlIHByZXZpb3VzIGJsb2NrLCBidXQgaXQgY291bGQKKwkJICogYWxzbyBiZSB0aGUgc3RhcnQgb2YgYSBuZXcgYmxvY2sgKGUuZy4sIGFuICJlbHNlIiBibG9jaywgb3IKKwkJICogbWF5YmUgdGhlIHByZXZpb3VzIGJsb2NrIGRpZG4ndCBoYXZlIGEgYmxvY2sgdGVybWluYXRvcikuCisJCSAqIFRyeSB0byBkaXN0aW5ndWlzaCB0aG9zZSBjYXNlcyBiYXNlZCBvbiB3aGF0IGNvbWVzIG5leHQ6CisJCSAqLworCQlpZiAobS0+cG9zdF9pbmRlbnQgIT0gLTEgJiYgbS0+cG9zdF9pbmRlbnQgPiBpbmRlbnQpIHsKKwkJCS8qCisJCQkgKiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgaW5kZW50ZWQgbW9yZS4gU28gaXQgaXMgbGlrZWx5CisJCQkgKiB0aGF0IHRoaXMgbGluZSBpcyB0aGUgc3RhcnQgb2YgYSBibG9jay4KKwkJCSAqLworCQkJcy0+cGVuYWx0eSArPSBhbnlfYmxhbmtzID8KKwkJCQlSRUxBVElWRV9PVVRERU5UX1dJVEhfQkxBTktfUEVOQUxUWSA6CisJCQkJUkVMQVRJVkVfT1VUREVOVF9QRU5BTFRZOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFRoYXQgd2FzIHByb2JhYmx5IHRoZSBlbmQgb2YgYSBibG9jay4KKwkJCSAqLworCQkJcy0+cGVuYWx0eSArPSBhbnlfYmxhbmtzID8KKwkJCQlSRUxBVElWRV9ERURFTlRfV0lUSF9CTEFOS19QRU5BTFRZIDoKKwkJCQlSRUxBVElWRV9ERURFTlRfUEVOQUxUWTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBzY29yZV9jbXAoc3RydWN0IHNwbGl0X3Njb3JlICpzMSwgc3RydWN0IHNwbGl0X3Njb3JlICpzMikKK3sKKwkvKiAtMSBpZiBzMS5lZmZlY3RpdmVfaW5kZW50IDwgczItPmVmZmVjdGl2ZV9pbmRlbnQsIGV0Yy4gKi8KKwlpbnQgY21wX2luZGVudHMgPSAoKHMxLT5lZmZlY3RpdmVfaW5kZW50ID4gczItPmVmZmVjdGl2ZV9pbmRlbnQpIC0KKwkJCSAgIChzMS0+ZWZmZWN0aXZlX2luZGVudCA8IHMyLT5lZmZlY3RpdmVfaW5kZW50KSk7CisKKwlyZXR1cm4gSU5ERU5UX1dFSUdIVCAqIGNtcF9pbmRlbnRzICsgKHMxLT5wZW5hbHR5IC0gczItPnBlbmFsdHkpOworfQorCisvKgorICogUmVwcmVzZW50IGEgZ3JvdXAgb2YgY2hhbmdlZCBsaW5lcyBpbiBhbiB4ZGZpbGVfdCAoaS5lLiwgYSBjb250aWd1b3VzIGdyb3VwCisgKiBvZiBsaW5lcyB0aGF0IHdhcyBpbnNlcnRlZCBvciBkZWxldGVkIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgdmVyc2lvbiBvZiB0aGUKKyAqIGZpbGUpLiBXZSBjb25zaWRlciB0aGVyZSB0byBiZSBzdWNoIGEgZ3JvdXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSwgYXQKKyAqIHRoZSBlbmQgb2YgdGhlIGZpbGUsIGFuZCBiZXR3ZWVuIGFueSB0d28gdW5jaGFuZ2VkIGxpbmVzLCB0aG91Z2ggbW9zdCBzdWNoCisgKiBncm91cHMgd2lsbCB1c3VhbGx5IGJlIGVtcHR5LgorICoKKyAqIElmIHRoZSBmaXJzdCBsaW5lIGluIGEgZ3JvdXAgaXMgZXF1YWwgdG8gdGhlIGxpbmUgZm9sbG93aW5nIHRoZSBncm91cCwgdGhlbgorICogdGhlIGdyb3VwIGNhbiBiZSBzbGlkIGRvd24uIFNpbWlsYXJseSwgaWYgdGhlIGxhc3QgbGluZSBpbiBhIGdyb3VwIGlzIGVxdWFsCisgKiB0byB0aGUgbGluZSBwcmVjZWRpbmcgdGhlIGdyb3VwLCB0aGVuIHRoZSBncm91cCBjYW4gYmUgc2xpZCB1cC4gU2VlCisgKiBncm91cF9zbGlkZV9kb3duKCkgYW5kIGdyb3VwX3NsaWRlX3VwKCkuCisgKgorICogTm90ZSB0aGF0IGxvb3BzIHRoYXQgYXJlIHRlc3RpbmcgZm9yIGNoYW5nZWQgbGluZXMgaW4geGRmLT5yY2hnIGRvIG5vdCBuZWVkCisgKiBpbmRleCBib3VuZGluZyBzaW5jZSB0aGUgYXJyYXkgaXMgcHJlcGFyZWQgd2l0aCBhIHplcm8gYXQgcG9zaXRpb24gLTEgYW5kIE4uCisgKi8KK3N0cnVjdCB4ZGxncm91cCB7CisJLyoKKwkgKiBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYW5nZWQgbGluZSBpbiB0aGUgZ3JvdXAsIG9yIHRoZSBpbmRleCBvZgorCSAqIHRoZSB1bmNoYW5nZWQgbGluZSBhYm92ZSB3aGljaCB0aGUgKGVtcHR5KSBncm91cCBpcyBsb2NhdGVkLgorCSAqLworCWxvbmcgc3RhcnQ7CisKKwkvKgorCSAqIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdW5jaGFuZ2VkIGxpbmUgYWZ0ZXIgdGhlIGdyb3VwLiBGb3IgYW4gZW1wdHkKKwkgKiBncm91cCwgZW5kIGlzIGVxdWFsIHRvIHN0YXJ0LgorCSAqLworCWxvbmcgZW5kOworfTsKKworLyoKKyAqIEluaXRpYWxpemUgZyB0byBwb2ludCBhdCB0aGUgZmlyc3QgZ3JvdXAgaW4geGRmLgorICovCitzdGF0aWMgdm9pZCBncm91cF9pbml0KHhkZmlsZV90ICp4ZGYsIHN0cnVjdCB4ZGxncm91cCAqZykKK3sKKwlnLT5zdGFydCA9IGctPmVuZCA9IDA7CisJd2hpbGUgKHhkZi0+cmNoZ1tnLT5lbmRdKQorCQlnLT5lbmQrKzsKK30KKworLyoKKyAqIE1vdmUgZyB0byBkZXNjcmliZSB0aGUgbmV4dCAocG9zc2libHkgZW1wdHkpIGdyb3VwIGluIHhkZiBhbmQgcmV0dXJuIDAuIElmIGcKKyAqIGlzIGFscmVhZHkgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwgZG8gbm90aGluZyBhbmQgcmV0dXJuIC0xLgorICovCitzdGF0aWMgaW5saW5lIGludCBncm91cF9uZXh0KHhkZmlsZV90ICp4ZGYsIHN0cnVjdCB4ZGxncm91cCAqZykKK3sKKwlpZiAoZy0+ZW5kID09IHhkZi0+bnJlYykKKwkJcmV0dXJuIC0xOworCisJZy0+c3RhcnQgPSBnLT5lbmQgKyAxOworCWZvciAoZy0+ZW5kID0gZy0+c3RhcnQ7IHhkZi0+cmNoZ1tnLT5lbmRdOyBnLT5lbmQrKykKKwkJOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNb3ZlIGcgdG8gZGVzY3JpYmUgdGhlIHByZXZpb3VzIChwb3NzaWJseSBlbXB0eSkgZ3JvdXAgaW4geGRmIGFuZCByZXR1cm4gMC4KKyAqIElmIGcgaXMgYWxyZWFkeSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLCBkbyBub3RoaW5nIGFuZCByZXR1cm4gLTEuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdyb3VwX3ByZXZpb3VzKHhkZmlsZV90ICp4ZGYsIHN0cnVjdCB4ZGxncm91cCAqZykKK3sKKwlpZiAoZy0+c3RhcnQgPT0gMCkKKwkJcmV0dXJuIC0xOworCisJZy0+ZW5kID0gZy0+c3RhcnQgLSAxOworCWZvciAoZy0+c3RhcnQgPSBnLT5lbmQ7IHhkZi0+cmNoZ1tnLT5zdGFydCAtIDFdOyBnLT5zdGFydC0tKQorCQk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElmIGcgY2FuIGJlIHNsaWQgdG93YXJkIHRoZSBlbmQgb2YgdGhlIGZpbGUsIGRvIHNvLCBhbmQgaWYgaXQgYnVtcHMgaW50byBhCisgKiBmb2xsb3dpbmcgZ3JvdXAsIGV4cGFuZCB0aGlzIGdyb3VwIHRvIGluY2x1ZGUgaXQuIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgLTEKKyAqIGlmIGcgY2Fubm90IGJlIHNsaWQgZG93bi4KKyAqLworc3RhdGljIGludCBncm91cF9zbGlkZV9kb3duKHhkZmlsZV90ICp4ZGYsIHN0cnVjdCB4ZGxncm91cCAqZywgbG9uZyBmbGFncykKK3sKKwlpZiAoZy0+ZW5kIDwgeGRmLT5ucmVjICYmCisJICAgIHJlY3NfbWF0Y2goeGRmLT5yZWNzW2ctPnN0YXJ0XSwgeGRmLT5yZWNzW2ctPmVuZF0sIGZsYWdzKSkgeworCQl4ZGYtPnJjaGdbZy0+c3RhcnQrK10gPSAwOworCQl4ZGYtPnJjaGdbZy0+ZW5kKytdID0gMTsKKworCQl3aGlsZSAoeGRmLT5yY2hnW2ctPmVuZF0pCisJCQlnLT5lbmQrKzsKKworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gLTE7CisJfQorfQorCisvKgorICogSWYgZyBjYW4gYmUgc2xpZCB0b3dhcmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSwgZG8gc28sIGFuZCBpZiBpdCBidW1wcworICogaW50byBhIHByZXZpb3VzIGdyb3VwLCBleHBhbmQgdGhpcyBncm91cCB0byBpbmNsdWRlIGl0LiBSZXR1cm4gMCBvbiBzdWNjZXNzCisgKiBvciAtMSBpZiBnIGNhbm5vdCBiZSBzbGlkIHVwLgorICovCitzdGF0aWMgaW50IGdyb3VwX3NsaWRlX3VwKHhkZmlsZV90ICp4ZGYsIHN0cnVjdCB4ZGxncm91cCAqZywgbG9uZyBmbGFncykKK3sKKwlpZiAoZy0+c3RhcnQgPiAwICYmCisJICAgIHJlY3NfbWF0Y2goeGRmLT5yZWNzW2ctPnN0YXJ0IC0gMV0sIHhkZi0+cmVjc1tnLT5lbmQgLSAxXSwgZmxhZ3MpKSB7CisJCXhkZi0+cmNoZ1stLWctPnN0YXJ0XSA9IDE7CisJCXhkZi0+cmNoZ1stLWctPmVuZF0gPSAwOworCisJCXdoaWxlICh4ZGYtPnJjaGdbZy0+c3RhcnQgLSAxXSkKKwkJCWctPnN0YXJ0LS07CisKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC0xOworCX0KK30KKworc3RhdGljIHZvaWQgeGRsX2J1Zyhjb25zdCBjaGFyICptc2cpCit7CisJZnByaW50ZihzdGRlcnIsICJCVUc6ICVzXG4iLCBtc2cpOworCWV4aXQoMSk7Cit9CisKKy8qCisgKiBNb3ZlIGJhY2sgYW5kIGZvcndhcmQgY2hhbmdlIGdyb3VwcyBmb3IgYSBjb25zaXN0ZW50IGFuZCBwcmV0dHkgZGlmZiBvdXRwdXQuCisgKiBUaGlzIGFsc28gaGVscHMgaW4gZmluZGluZyBqb2luYWJsZSBjaGFuZ2UgZ3JvdXBzIGFuZCByZWR1Y2luZyB0aGUgZGlmZgorICogc2l6ZS4KKyAqLworaW50IHhkbF9jaGFuZ2VfY29tcGFjdCh4ZGZpbGVfdCAqeGRmLCB4ZGZpbGVfdCAqeGRmbywgbG9uZyBmbGFncykgeworCXN0cnVjdCB4ZGxncm91cCBnLCBnbzsKKwlsb25nIGVhcmxpZXN0X2VuZCwgZW5kX21hdGNoaW5nX290aGVyOworCWxvbmcgZ3JvdXBzaXplOworCisJZ3JvdXBfaW5pdCh4ZGYsICZnKTsKKwlncm91cF9pbml0KHhkZm8sICZnbyk7CisKKwl3aGlsZSAoMSkgeworCQkvKgorCQkgKiBJZiB0aGUgZ3JvdXAgaXMgZW1wdHkgaW4gdGhlIHRvLWJlLWNvbXBhY3RlZCBmaWxlLCBza2lwIGl0OgorCQkgKi8KKwkJaWYgKGcuZW5kID09IGcuc3RhcnQpCisJCQlnb3RvIG5leHQ7CisKKwkJLyoKKwkJICogTm93IHNoaWZ0IHRoZSBjaGFuZ2UgdXAgYW5kIHRoZW4gZG93biBhcyBmYXIgYXMgcG9zc2libGUgaW4KKwkJICogZWFjaCBkaXJlY3Rpb24uIElmIGl0IGJ1bXBzIGludG8gYW55IG90aGVyIGNoYW5nZXMsIG1lcmdlCisJCSAqIHRoZW0uCisJCSAqLworCQlkbyB7CisJCQlncm91cHNpemUgPSBnLmVuZCAtIGcuc3RhcnQ7CisKKwkJCS8qCisJCQkgKiBLZWVwIHRyYWNrIG9mIHRoZSBsYXN0ICJlbmQiIGluZGV4IHRoYXQgY2F1c2VzIHRoaXMKKwkJCSAqIGdyb3VwIHRvIGFsaWduIHdpdGggYSBncm91cCBvZiBjaGFuZ2VkIGxpbmVzIGluIHRoZQorCQkJICogb3RoZXIgZmlsZS4gLTEgaW5kaWNhdGVzIHRoYXQgd2UgaGF2ZW4ndCBmb3VuZCBzdWNoCisJCQkgKiBhIG1hdGNoIHlldDoKKwkJCSAqLworCQkJZW5kX21hdGNoaW5nX290aGVyID0gLTE7CisKKwkJCS8qIFNoaWZ0IHRoZSBncm91cCBiYWNrd2FyZCBhcyBtdWNoIGFzIHBvc3NpYmxlOiAqLworCQkJd2hpbGUgKCFncm91cF9zbGlkZV91cCh4ZGYsICZnLCBmbGFncykpCisJCQkJaWYgKGdyb3VwX3ByZXZpb3VzKHhkZm8sICZnbykpCisJCQkJCXhkbF9idWcoImdyb3VwIHN5bmMgYnJva2VuIHNsaWRpbmcgdXAiKTsKKworCQkJLyoKKwkJCSAqIFRoaXMgaXMgdGhpcyBoaWdoZXN0IHRoYXQgdGhpcyBncm91cCBjYW4gYmUgc2hpZnRlZC4KKwkJCSAqIFJlY29yZCBpdHMgZW5kIGluZGV4OgorCQkJICovCisJCQllYXJsaWVzdF9lbmQgPSBnLmVuZDsKKworCQkJaWYgKGdvLmVuZCA+IGdvLnN0YXJ0KQorCQkJCWVuZF9tYXRjaGluZ19vdGhlciA9IGcuZW5kOworCisJCQkvKiBOb3cgc2hpZnQgdGhlIGdyb3VwIGZvcndhcmQgYXMgZmFyIGFzIHBvc3NpYmxlOiAqLworCQkJd2hpbGUgKDEpIHsKKwkJCQlpZiAoZ3JvdXBfc2xpZGVfZG93bih4ZGYsICZnLCBmbGFncykpCisJCQkJCWJyZWFrOworCQkJCWlmIChncm91cF9uZXh0KHhkZm8sICZnbykpCisJCQkJCXhkbF9idWcoImdyb3VwIHN5bmMgYnJva2VuIHNsaWRpbmcgZG93biIpOworCisJCQkJaWYgKGdvLmVuZCA+IGdvLnN0YXJ0KQorCQkJCQllbmRfbWF0Y2hpbmdfb3RoZXIgPSBnLmVuZDsKKwkJCX0KKwkJfSB3aGlsZSAoZ3JvdXBzaXplICE9IGcuZW5kIC0gZy5zdGFydCk7CisKKwkJLyoKKwkJICogSWYgdGhlIGdyb3VwIGNhbiBiZSBzaGlmdGVkLCB0aGVuIHdlIGNhbiBwb3NzaWJseSB1c2UgdGhpcworCQkgKiBmcmVlZG9tIHRvIHByb2R1Y2UgYSBtb3JlIGludHVpdGl2ZSBkaWZmLgorCQkgKgorCQkgKiBUaGUgZ3JvdXAgaXMgY3VycmVudGx5IHNoaWZ0ZWQgYXMgZmFyIGRvd24gYXMgcG9zc2libGUsIHNvCisJCSAqIHRoZSBoZXVyaXN0aWNzIGJlbG93IG9ubHkgaGF2ZSB0byBoYW5kbGUgdXB3YXJkcyBzaGlmdHMuCisJCSAqLworCisJCWlmIChnLmVuZCA9PSBlYXJsaWVzdF9lbmQpIHsKKwkJCS8qIG5vIHNoaWZ0aW5nIHdhcyBwb3NzaWJsZSAqLworCQl9IGVsc2UgaWYgKGVuZF9tYXRjaGluZ19vdGhlciAhPSAtMSkgeworCQkJLyoKKwkJCSAqIE1vdmUgdGhlIHBvc3NpYmx5IG1lcmdlZCBncm91cCBvZiBjaGFuZ2VzIGJhY2sgdG8KKwkJCSAqIGxpbmUgdXAgd2l0aCB0aGUgbGFzdCBncm91cCBvZiBjaGFuZ2VzIGZyb20gdGhlCisJCQkgKiBvdGhlciBmaWxlIHRoYXQgaXQgY2FuIGFsaWduIHdpdGguCisJCQkgKi8KKwkJCXdoaWxlIChnby5lbmQgPT0gZ28uc3RhcnQpIHsKKwkJCQlpZiAoZ3JvdXBfc2xpZGVfdXAoeGRmLCAmZywgZmxhZ3MpKQorCQkJCQl4ZGxfYnVnKCJtYXRjaCBkaXNhcHBlYXJlZCIpOworCQkJCWlmIChncm91cF9wcmV2aW91cyh4ZGZvLCAmZ28pKQorCQkJCQl4ZGxfYnVnKCJncm91cCBzeW5jIGJyb2tlbiBzbGlkaW5nIHRvIG1hdGNoIik7CisJCQl9CisJCX0gZWxzZSBpZiAoZmxhZ3MgJiBYREZfSU5ERU5UX0hFVVJJU1RJQykgeworCQkJLyoKKwkJCSAqIEluZGVudCBoZXVyaXN0aWM6IGEgZ3JvdXAgb2YgcHVyZSBhZGQvZGVsZXRlIGxpbmVzCisJCQkgKiBpbXBsaWVzIHR3byBzcGxpdHMsIG9uZSBiZXR3ZWVuIHRoZSBlbmQgb2YgdGhlCisJCQkgKiAiYmVmb3JlIiBjb250ZXh0IGFuZCB0aGUgc3RhcnQgb2YgdGhlIGdyb3VwLCBhbmQKKwkJCSAqIGFub3RoZXIgYmV0d2VlbiB0aGUgZW5kIG9mIHRoZSBncm91cCBhbmQgdGhlCisJCQkgKiBiZWdpbm5pbmcgb2YgdGhlICJhZnRlciIgY29udGV4dC4gU29tZSBzcGxpdHMgYXJlCisJCQkgKiBhZXN0aGV0aWNhbGx5IGJldHRlciBhbmQgc29tZSBhcmUgd29yc2UuIFdlIGNvbXB1dGUKKwkJCSAqIGEgYmFkbmVzcyAic2NvcmUiIGZvciBlYWNoIHNwbGl0LCBhbmQgYWRkIHRoZSBzY29yZXMKKwkJCSAqIGZvciB0aGUgdHdvIHNwbGl0cyB0byBkZWZpbmUgYSAic2NvcmUiIGZvciBlYWNoCisJCQkgKiBwb3NpdGlvbiB0aGF0IHRoZSBncm91cCBjYW4gYmUgc2hpZnRlZCB0by4gVGhlbiB3ZQorCQkJICogcGljayB0aGUgc2hpZnQgd2l0aCB0aGUgbG93ZXN0IHNjb3JlLgorCQkJICovCisJCQlsb25nIHNoaWZ0LCBiZXN0X3NoaWZ0ID0gLTE7CisJCQlzdHJ1Y3Qgc3BsaXRfc2NvcmUgYmVzdF9zY29yZTsKKworCQkJc2hpZnQgPSBlYXJsaWVzdF9lbmQ7CisJCQlpZiAoZy5lbmQgLSBncm91cHNpemUgLSAxID4gc2hpZnQpCisJCQkJc2hpZnQgPSBnLmVuZCAtIGdyb3Vwc2l6ZSAtIDE7CisJCQlpZiAoZy5lbmQgLSBJTkRFTlRfSEVVUklTVElDX01BWF9TTElESU5HID4gc2hpZnQpCisJCQkJc2hpZnQgPSBnLmVuZCAtIElOREVOVF9IRVVSSVNUSUNfTUFYX1NMSURJTkc7CisJCQlmb3IgKDsgc2hpZnQgPD0gZy5lbmQ7IHNoaWZ0KyspIHsKKwkJCQlzdHJ1Y3Qgc3BsaXRfbWVhc3VyZW1lbnQgbTsKKwkJCQlzdHJ1Y3Qgc3BsaXRfc2NvcmUgc2NvcmUgPSB7MCwgMH07CisKKwkJCQltZWFzdXJlX3NwbGl0KHhkZiwgc2hpZnQsICZtKTsKKwkJCQlzY29yZV9hZGRfc3BsaXQoJm0sICZzY29yZSk7CisJCQkJbWVhc3VyZV9zcGxpdCh4ZGYsIHNoaWZ0IC0gZ3JvdXBzaXplLCAmbSk7CisJCQkJc2NvcmVfYWRkX3NwbGl0KCZtLCAmc2NvcmUpOworCQkJCWlmIChiZXN0X3NoaWZ0ID09IC0xIHx8CisJCQkJICAgIHNjb3JlX2NtcCgmc2NvcmUsICZiZXN0X3Njb3JlKSA8PSAwKSB7CisJCQkJCWJlc3Rfc2NvcmUuZWZmZWN0aXZlX2luZGVudCA9IHNjb3JlLmVmZmVjdGl2ZV9pbmRlbnQ7CisJCQkJCWJlc3Rfc2NvcmUucGVuYWx0eSA9IHNjb3JlLnBlbmFsdHk7CisJCQkJCWJlc3Rfc2hpZnQgPSBzaGlmdDsKKwkJCQl9CisJCQl9CisKKwkJCXdoaWxlIChnLmVuZCA+IGJlc3Rfc2hpZnQpIHsKKwkJCQlpZiAoZ3JvdXBfc2xpZGVfdXAoeGRmLCAmZywgZmxhZ3MpKQorCQkJCQl4ZGxfYnVnKCJiZXN0IHNoaWZ0IHVucmVhY2hlZCIpOworCQkJCWlmIChncm91cF9wcmV2aW91cyh4ZGZvLCAmZ28pKQorCQkJCQl4ZGxfYnVnKCJncm91cCBzeW5jIGJyb2tlbiBzbGlkaW5nIHRvIGJsYW5rIGxpbmUiKTsKKwkJCX0KKwkJfQorCisJbmV4dDoKKwkJLyogTW92ZSBwYXN0IHRoZSBqdXN0LXByb2Nlc3NlZCBncm91cDogKi8KKwkJaWYgKGdyb3VwX25leHQoeGRmLCAmZykpCisJCQlicmVhazsKKwkJaWYgKGdyb3VwX25leHQoeGRmbywgJmdvKSkKKwkJCXhkbF9idWcoImdyb3VwIHN5bmMgYnJva2VuIG1vdmluZyB0byBuZXh0IGdyb3VwIik7CisJfQorCisJaWYgKCFncm91cF9uZXh0KHhkZm8sICZnbykpCisJCXhkbF9idWcoImdyb3VwIHN5bmMgYnJva2VuIGF0IGVuZCBvZiBmaWxlIik7CisKKwlyZXR1cm4gMDsKK30KKworCitpbnQgeGRsX2J1aWxkX3NjcmlwdCh4ZGZlbnZfdCAqeGUsIHhkY2hhbmdlX3QgKip4c2NyKSB7CisJeGRjaGFuZ2VfdCAqY3NjciA9IE5VTEwsICp4Y2g7CisJY2hhciAqcmNoZzEgPSB4ZS0+eGRmMS5yY2hnLCAqcmNoZzIgPSB4ZS0+eGRmMi5yY2hnOworCWxvbmcgaTEsIGkyLCBsMSwgbDI7CisKKwkvKgorCSAqIFRyaXZpYWwuIENvbGxlY3RzICJncm91cHMiIG9mIGNoYW5nZXMgYW5kIGNyZWF0ZXMgYW4gZWRpdCBzY3JpcHQuCisJICovCisJZm9yIChpMSA9IHhlLT54ZGYxLm5yZWMsIGkyID0geGUtPnhkZjIubnJlYzsgaTEgPj0gMCB8fCBpMiA+PSAwOyBpMS0tLCBpMi0tKQorCQlpZiAocmNoZzFbaTEgLSAxXSB8fCByY2hnMltpMiAtIDFdKSB7CisJCQlmb3IgKGwxID0gaTE7IHJjaGcxW2kxIC0gMV07IGkxLS0pOworCQkJZm9yIChsMiA9IGkyOyByY2hnMltpMiAtIDFdOyBpMi0tKTsKKworCQkJaWYgKCEoeGNoID0geGRsX2FkZF9jaGFuZ2UoY3NjciwgaTEsIGkyLCBsMSAtIGkxLCBsMiAtIGkyKSkpIHsKKwkJCQl4ZGxfZnJlZV9zY3JpcHQoY3Njcik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJY3NjciA9IHhjaDsKKwkJfQorCisJKnhzY3IgPSBjc2NyOworCisJcmV0dXJuIDA7Cit9CisKKwordm9pZCB4ZGxfZnJlZV9zY3JpcHQoeGRjaGFuZ2VfdCAqeHNjcikgeworCXhkY2hhbmdlX3QgKnhjaDsKKworCXdoaWxlICgoeGNoID0geHNjcikgIT0gTlVMTCkgeworCQl4c2NyID0geHNjci0+bmV4dDsKKwkJeGRsX2ZyZWUoeGNoKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgeGRsX2NhbGxfaHVua19mdW5jKHhkZmVudl90ICp4ZSwgeGRjaGFuZ2VfdCAqeHNjciwgeGRlbWl0Y2JfdCAqZWNiLAorCQkJICAgICAgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZykKK3sKKwl4ZGNoYW5nZV90ICp4Y2gsICp4Y2hlOworCisJZm9yICh4Y2ggPSB4c2NyOyB4Y2g7IHhjaCA9IHhjaGUtPm5leHQpIHsKKwkJeGNoZSA9IHhkbF9nZXRfaHVuaygmeGNoLCB4ZWNmZyk7CisJCWlmICgheGNoKQorCQkJYnJlYWs7CisJCWlmICh4ZWNmZy0+aHVua19mdW5jKHhjaC0+aTEsIHhjaGUtPmkxICsgeGNoZS0+Y2hnMSAtIHhjaC0+aTEsCisJCQkJICAgICB4Y2gtPmkyLCB4Y2hlLT5pMiArIHhjaGUtPmNoZzIgLSB4Y2gtPmkyLAorCQkJCSAgICAgZWNiLT5wcml2KSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB4ZGxfbWFya19pZ25vcmFibGUoeGRjaGFuZ2VfdCAqeHNjciwgeGRmZW52X3QgKnhlLCBsb25nIGZsYWdzKQoreworCXhkY2hhbmdlX3QgKnhjaDsKKworCWZvciAoeGNoID0geHNjcjsgeGNoOyB4Y2ggPSB4Y2gtPm5leHQpIHsKKwkJaW50IGlnbm9yZSA9IDE7CisJCXhyZWNvcmRfdCAqKnJlYzsKKwkJbG9uZyBpOworCisJCXJlYyA9ICZ4ZS0+eGRmMS5yZWNzW3hjaC0+aTFdOworCQlmb3IgKGkgPSAwOyBpIDwgeGNoLT5jaGcxICYmIGlnbm9yZTsgaSsrKQorCQkJaWdub3JlID0geGRsX2JsYW5rbGluZShyZWNbaV0tPnB0ciwgcmVjW2ldLT5zaXplLCBmbGFncyk7CisKKwkJcmVjID0gJnhlLT54ZGYyLnJlY3NbeGNoLT5pMl07CisJCWZvciAoaSA9IDA7IGkgPCB4Y2gtPmNoZzIgJiYgaWdub3JlOyBpKyspCisJCQlpZ25vcmUgPSB4ZGxfYmxhbmtsaW5lKHJlY1tpXS0+cHRyLCByZWNbaV0tPnNpemUsIGZsYWdzKTsKKworCQl4Y2gtPmlnbm9yZSA9IGlnbm9yZTsKKwl9Cit9CisKK2ludCB4ZGxfZGlmZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkgICAgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcsIHhkZW1pdGNiX3QgKmVjYikgeworCXhkY2hhbmdlX3QgKnhzY3I7CisJeGRmZW52X3QgeGU7CisJZW1pdF9mdW5jX3QgZWYgPSB4ZWNmZy0+aHVua19mdW5jID8geGRsX2NhbGxfaHVua19mdW5jIDogeGRsX2VtaXRfZGlmZjsKKworCWlmICh4ZGxfZG9fZGlmZihtZjEsIG1mMiwgeHBwLCAmeGUpIDwgMCkgeworCisJCXJldHVybiAtMTsKKwl9CisJaWYgKHhkbF9jaGFuZ2VfY29tcGFjdCgmeGUueGRmMSwgJnhlLnhkZjIsIHhwcC0+ZmxhZ3MpIDwgMCB8fAorCSAgICB4ZGxfY2hhbmdlX2NvbXBhY3QoJnhlLnhkZjIsICZ4ZS54ZGYxLCB4cHAtPmZsYWdzKSA8IDAgfHwKKwkgICAgeGRsX2J1aWxkX3NjcmlwdCgmeGUsICZ4c2NyKSA8IDApIHsKKworCQl4ZGxfZnJlZV9lbnYoJnhlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoeHNjcikgeworCQlpZiAoeHBwLT5mbGFncyAmIFhERl9JR05PUkVfQkxBTktfTElORVMpCisJCQl4ZGxfbWFya19pZ25vcmFibGUoeHNjciwgJnhlLCB4cHAtPmZsYWdzKTsKKworCQlpZiAoZWYoJnhlLCB4c2NyLCBlY2IsIHhlY2ZnKSA8IDApIHsKKworCQkJeGRsX2ZyZWVfc2NyaXB0KHhzY3IpOworCQkJeGRsX2ZyZWVfZW52KCZ4ZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJeGRsX2ZyZWVfc2NyaXB0KHhzY3IpOworCX0KKwl4ZGxfZnJlZV9lbnYoJnhlKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEveGRpZmYveGRpZmZpLmggYi94ZGlmZi94ZGlmZmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjFjN2M4Ci0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveGRpZmZpLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMyAgRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZQorICogIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWYgIWRlZmluZWQoWERJRkZJX0gpCisjZGVmaW5lIFhESUZGSV9ICisKKwordHlwZWRlZiBzdHJ1Y3Qgc19kaWZmZGF0YSB7CisJbG9uZyBucmVjOworCXVuc2lnbmVkIGxvbmcgY29uc3QgKmhhOworCWxvbmcgKnJpbmRleDsKKwljaGFyICpyY2hnOworfSBkaWZmZGF0YV90OworCit0eXBlZGVmIHN0cnVjdCBzX3hkYWxnb2VudiB7CisJbG9uZyBteGNvc3Q7CisJbG9uZyBzbmFrZV9jbnQ7CisJbG9uZyBoZXVyX21pbjsKK30geGRhbGdvZW52X3Q7CisKK3R5cGVkZWYgc3RydWN0IHNfeGRjaGFuZ2UgeworCXN0cnVjdCBzX3hkY2hhbmdlICpuZXh0OworCWxvbmcgaTEsIGkyOworCWxvbmcgY2hnMSwgY2hnMjsKKwlpbnQgaWdub3JlOworfSB4ZGNoYW5nZV90OworCisKKworaW50IHhkbF9yZWNzX2NtcChkaWZmZGF0YV90ICpkZDEsIGxvbmcgb2ZmMSwgbG9uZyBsaW0xLAorCQkgZGlmZmRhdGFfdCAqZGQyLCBsb25nIG9mZjIsIGxvbmcgbGltMiwKKwkJIGxvbmcgKmt2ZGYsIGxvbmcgKmt2ZGIsIGludCBuZWVkX21pbiwgeGRhbGdvZW52X3QgKnhlbnYpOworaW50IHhkbF9kb19kaWZmKG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCQl4ZGZlbnZfdCAqeGUpOworaW50IHhkbF9jaGFuZ2VfY29tcGFjdCh4ZGZpbGVfdCAqeGRmLCB4ZGZpbGVfdCAqeGRmbywgbG9uZyBmbGFncyk7CitpbnQgeGRsX2J1aWxkX3NjcmlwdCh4ZGZlbnZfdCAqeGUsIHhkY2hhbmdlX3QgKip4c2NyKTsKK3ZvaWQgeGRsX2ZyZWVfc2NyaXB0KHhkY2hhbmdlX3QgKnhzY3IpOworaW50IHhkbF9lbWl0X2RpZmYoeGRmZW52X3QgKnhlLCB4ZGNoYW5nZV90ICp4c2NyLCB4ZGVtaXRjYl90ICplY2IsCisJCSAgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZyk7CitpbnQgeGRsX2RvX3BhdGllbmNlX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCXhkZmVudl90ICplbnYpOworaW50IHhkbF9kb19oaXN0b2dyYW1fZGlmZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkJeGRmZW52X3QgKmVudik7CisKKyNlbmRpZiAvKiAjaWYgIWRlZmluZWQoWERJRkZJX0gpICovCmRpZmYgLS1naXQgYS94ZGlmZi94ZW1pdC5jIGIveGRpZmYveGVtaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDdkNmM1Ci0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveGVtaXQuYwpAQCAtMCwwICsxLDMyOSBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMwlEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgc2VlCisgKiAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisKKyNpbmNsdWRlICJ4aW5jbHVkZS5oIgorCitzdGF0aWMgbG9uZyB4ZGxfZ2V0X3JlYyh4ZGZpbGVfdCAqeGRmLCBsb25nIHJpLCBjaGFyIGNvbnN0ICoqcmVjKSB7CisKKwkqcmVjID0geGRmLT5yZWNzW3JpXS0+cHRyOworCisJcmV0dXJuIHhkZi0+cmVjc1tyaV0tPnNpemU7Cit9CisKKworc3RhdGljIGludCB4ZGxfZW1pdF9yZWNvcmQoeGRmaWxlX3QgKnhkZiwgbG9uZyByaSwgY2hhciBjb25zdCAqcHJlLCB4ZGVtaXRjYl90ICplY2IpIHsKKwlsb25nIHNpemUsIHBzaXplID0gc3RybGVuKHByZSk7CisJY2hhciBjb25zdCAqcmVjOworCisJc2l6ZSA9IHhkbF9nZXRfcmVjKHhkZiwgcmksICZyZWMpOworCWlmICh4ZGxfZW1pdF9kaWZmcmVjKHJlYywgc2l6ZSwgcHJlLCBwc2l6ZSwgZWNiKSA8IDApIHsKKworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFN0YXJ0aW5nIGF0IHRoZSBwYXNzZWQgY2hhbmdlIGF0b20sIGZpbmQgdGhlIGxhdGVzdCBjaGFuZ2UgYXRvbSB0byBiZSBpbmNsdWRlZAorICogaW5zaWRlIHRoZSBkaWZmZXJlbnRpYWwgaHVuayBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uLgorICogQWxzbyBhZHZhbmNlIHhzY3IgaWYgdGhlIGZpcnN0IGNoYW5nZXMgbXVzdCBiZSBkaXNjYXJkZWQuCisgKi8KK3hkY2hhbmdlX3QgKnhkbF9nZXRfaHVuayh4ZGNoYW5nZV90ICoqeHNjciwgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZykKK3sKKwl4ZGNoYW5nZV90ICp4Y2gsICp4Y2hwLCAqbHhjaDsKKwlsb25nIG1heF9jb21tb24gPSAyICogeGVjZmctPmN0eGxlbiArIHhlY2ZnLT5pbnRlcmh1bmtjdHhsZW47CisJbG9uZyBtYXhfaWdub3JhYmxlID0geGVjZmctPmN0eGxlbjsKKwl1bnNpZ25lZCBsb25nIGlnbm9yZWQgPSAwOyAvKiBudW1iZXIgb2YgaWdub3JlZCBibGFuayBsaW5lcyAqLworCisJLyogcmVtb3ZlIGlnbm9yYWJsZSBjaGFuZ2VzIHRoYXQgYXJlIHRvbyBmYXIgYmVmb3JlIG90aGVyIGNoYW5nZXMgKi8KKwlmb3IgKHhjaHAgPSAqeHNjcjsgeGNocCAmJiB4Y2hwLT5pZ25vcmU7IHhjaHAgPSB4Y2hwLT5uZXh0KSB7CisJCXhjaCA9IHhjaHAtPm5leHQ7CisKKwkJaWYgKHhjaCA9PSBOVUxMIHx8CisJCSAgICB4Y2gtPmkxIC0gKHhjaHAtPmkxICsgeGNocC0+Y2hnMSkgPj0gbWF4X2lnbm9yYWJsZSkKKwkJCSp4c2NyID0geGNoOworCX0KKworCWlmICgqeHNjciA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWx4Y2ggPSAqeHNjcjsKKworCWZvciAoeGNocCA9ICp4c2NyLCB4Y2ggPSB4Y2hwLT5uZXh0OyB4Y2g7IHhjaHAgPSB4Y2gsIHhjaCA9IHhjaC0+bmV4dCkgeworCQlsb25nIGRpc3RhbmNlID0geGNoLT5pMSAtICh4Y2hwLT5pMSArIHhjaHAtPmNoZzEpOworCQlpZiAoZGlzdGFuY2UgPiBtYXhfY29tbW9uKQorCQkJYnJlYWs7CisKKwkJaWYgKGRpc3RhbmNlIDwgbWF4X2lnbm9yYWJsZSAmJiAoIXhjaC0+aWdub3JlIHx8IGx4Y2ggPT0geGNocCkpIHsKKwkJCWx4Y2ggPSB4Y2g7CisJCQlpZ25vcmVkID0gMDsKKwkJfSBlbHNlIGlmIChkaXN0YW5jZSA8IG1heF9pZ25vcmFibGUgJiYgeGNoLT5pZ25vcmUpIHsKKwkJCWlnbm9yZWQgKz0geGNoLT5jaGcyOworCQl9IGVsc2UgaWYgKGx4Y2ggIT0geGNocCAmJgorCQkJICAgeGNoLT5pMSArIGlnbm9yZWQgLSAobHhjaC0+aTEgKyBseGNoLT5jaGcxKSA+IG1heF9jb21tb24pIHsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKCF4Y2gtPmlnbm9yZSkgeworCQkJbHhjaCA9IHhjaDsKKwkJCWlnbm9yZWQgPSAwOworCQl9IGVsc2UgeworCQkJaWdub3JlZCArPSB4Y2gtPmNoZzI7CisJCX0KKwl9CisKKwlyZXR1cm4gbHhjaDsKK30KKworCitzdGF0aWMgbG9uZyBkZWZfZmYoY29uc3QgY2hhciAqcmVjLCBsb25nIGxlbiwgY2hhciAqYnVmLCBsb25nIHN6LCB2b2lkICpwcml2KQoreworCWlmIChsZW4gPiAwICYmCisJCQkoaXNhbHBoYSgodW5zaWduZWQgY2hhcikqcmVjKSB8fCAvKiBpZGVudGlmaWVyPyAqLworCQkJICpyZWMgPT0gJ18nIHx8IC8qIGFsc28gaWRlbnRpZmllcj8gKi8KKwkJCSAqcmVjID09ICckJykpIHsgLyogaWRlbnRpZmllcnMgZnJvbSBWTVMgYW5kIG90aGVyIGVzb3RlcmljbyAqLworCQlpZiAobGVuID4gc3opCisJCQlsZW4gPSBzejsKKwkJd2hpbGUgKDAgPCBsZW4gJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcilyZWNbbGVuIC0gMV0pKQorCQkJbGVuLS07CisJCW1lbWNweShidWYsIHJlYywgbGVuKTsKKwkJcmV0dXJuIGxlbjsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgbG9uZyBtYXRjaF9mdW5jX3JlYyh4ZGZpbGVfdCAqeGRmLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnLCBsb25nIHJpLAorCQkJICAgY2hhciAqYnVmLCBsb25nIHN6KQoreworCWNvbnN0IGNoYXIgKnJlYzsKKwlsb25nIGxlbiA9IHhkbF9nZXRfcmVjKHhkZiwgcmksICZyZWMpOworCWlmICgheGVjZmctPmZpbmRfZnVuYykKKwkJcmV0dXJuIGRlZl9mZihyZWMsIGxlbiwgYnVmLCBzeiwgeGVjZmctPmZpbmRfZnVuY19wcml2KTsKKwlyZXR1cm4geGVjZmctPmZpbmRfZnVuYyhyZWMsIGxlbiwgYnVmLCBzeiwgeGVjZmctPmZpbmRfZnVuY19wcml2KTsKK30KKworc3RhdGljIGludCBpc19mdW5jX3JlYyh4ZGZpbGVfdCAqeGRmLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnLCBsb25nIHJpKQoreworCWNoYXIgZHVtbXlbMV07CisJcmV0dXJuIG1hdGNoX2Z1bmNfcmVjKHhkZiwgeGVjZmcsIHJpLCBkdW1teSwgc2l6ZW9mKGR1bW15KSkgPj0gMDsKK30KKworc3RydWN0IGZ1bmNfbGluZSB7CisJbG9uZyBsZW47CisJY2hhciBidWZbODBdOworfTsKKworc3RhdGljIGxvbmcgZ2V0X2Z1bmNfbGluZSh4ZGZlbnZfdCAqeGUsIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcsCisJCQkgIHN0cnVjdCBmdW5jX2xpbmUgKmZ1bmNfbGluZSwgbG9uZyBzdGFydCwgbG9uZyBsaW1pdCkKK3sKKwlsb25nIGwsIHNpemUsIHN0ZXAgPSAoc3RhcnQgPiBsaW1pdCkgPyAtMSA6IDE7CisJY2hhciAqYnVmLCBkdW1teVsxXTsKKworCWJ1ZiA9IGZ1bmNfbGluZSA/IGZ1bmNfbGluZS0+YnVmIDogZHVtbXk7CisJc2l6ZSA9IGZ1bmNfbGluZSA/IHNpemVvZihmdW5jX2xpbmUtPmJ1ZikgOiBzaXplb2YoZHVtbXkpOworCisJZm9yIChsID0gc3RhcnQ7IGwgIT0gbGltaXQgJiYgMCA8PSBsICYmIGwgPCB4ZS0+eGRmMS5ucmVjOyBsICs9IHN0ZXApIHsKKwkJbG9uZyBsZW4gPSBtYXRjaF9mdW5jX3JlYygmeGUtPnhkZjEsIHhlY2ZnLCBsLCBidWYsIHNpemUpOworCQlpZiAobGVuID49IDApIHsKKwkJCWlmIChmdW5jX2xpbmUpCisJCQkJZnVuY19saW5lLT5sZW4gPSBsZW47CisJCQlyZXR1cm4gbDsKKwkJfQorCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgaXNfZW1wdHlfcmVjKHhkZmlsZV90ICp4ZGYsIGxvbmcgcmkpCit7CisJY29uc3QgY2hhciAqcmVjOworCWxvbmcgbGVuID0geGRsX2dldF9yZWMoeGRmLCByaSwgJnJlYyk7CisKKwl3aGlsZSAobGVuID4gMCAmJiBYRExfSVNTUEFDRSgqcmVjKSkgeworCQlyZWMrKzsKKwkJbGVuLS07CisJfQorCXJldHVybiAhbGVuOworfQorCitpbnQgeGRsX2VtaXRfZGlmZih4ZGZlbnZfdCAqeGUsIHhkY2hhbmdlX3QgKnhzY3IsIHhkZW1pdGNiX3QgKmVjYiwKKwkJICB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKSB7CisJbG9uZyBzMSwgczIsIGUxLCBlMiwgbGN0eDsKKwl4ZGNoYW5nZV90ICp4Y2gsICp4Y2hlOworCWxvbmcgZnVuY2xpbmVwcmV2ID0gLTE7CisJc3RydWN0IGZ1bmNfbGluZSBmdW5jX2xpbmUgPSB7IDAgfTsKKworCWZvciAoeGNoID0geHNjcjsgeGNoOyB4Y2ggPSB4Y2hlLT5uZXh0KSB7CisJCXhkY2hhbmdlX3QgKnhjaHAgPSB4Y2g7CisJCXhjaGUgPSB4ZGxfZ2V0X2h1bmsoJnhjaCwgeGVjZmcpOworCQlpZiAoIXhjaCkKKwkJCWJyZWFrOworCitwcmVfY29udGV4dF9jYWxjdWxhdGlvbjoKKwkJczEgPSBYRExfTUFYKHhjaC0+aTEgLSB4ZWNmZy0+Y3R4bGVuLCAwKTsKKwkJczIgPSBYRExfTUFYKHhjaC0+aTIgLSB4ZWNmZy0+Y3R4bGVuLCAwKTsKKworCQlpZiAoeGVjZmctPmZsYWdzICYgWERMX0VNSVRfRlVOQ0NPTlRFWFQpIHsKKwkJCWxvbmcgZnMxLCBpMSA9IHhjaC0+aTE7CisKKwkJCS8qIEFwcGVuZGVkIGNodW5rPyAqLworCQkJaWYgKGkxID49IHhlLT54ZGYxLm5yZWMpIHsKKwkJCQlsb25nIGkyID0geGNoLT5pMjsKKworCQkJCS8qCisJCQkJICogV2UgZG9uJ3QgbmVlZCBhZGRpdGlvbmFsIGNvbnRleHQgaWYKKwkJCQkgKiBhIHdob2xlIGZ1bmN0aW9uIHdhcyBhZGRlZC4KKwkJCQkgKi8KKwkJCQl3aGlsZSAoaTIgPCB4ZS0+eGRmMi5ucmVjKSB7CisJCQkJCWlmIChpc19mdW5jX3JlYygmeGUtPnhkZjIsIHhlY2ZnLCBpMikpCisJCQkJCQlnb3RvIHBvc3RfY29udGV4dF9jYWxjdWxhdGlvbjsKKwkJCQkJaTIrKzsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIE90aGVyd2lzZSBnZXQgbW9yZSBjb250ZXh0IGZyb20gdGhlCisJCQkJICogcHJlLWltYWdlLgorCQkJCSAqLworCQkJCWkxID0geGUtPnhkZjEubnJlYyAtIDE7CisJCQl9CisKKwkJCWZzMSA9IGdldF9mdW5jX2xpbmUoeGUsIHhlY2ZnLCBOVUxMLCBpMSwgLTEpOworCQkJd2hpbGUgKGZzMSA+IDAgJiYgIWlzX2VtcHR5X3JlYygmeGUtPnhkZjEsIGZzMSAtIDEpICYmCisJCQkgICAgICAgIWlzX2Z1bmNfcmVjKCZ4ZS0+eGRmMSwgeGVjZmcsIGZzMSAtIDEpKQorCQkJCWZzMS0tOworCQkJaWYgKGZzMSA8IDApCisJCQkJZnMxID0gMDsKKwkJCWlmIChmczEgPCBzMSkgeworCQkJCXMyID0gWERMX01BWChzMiAtIChzMSAtIGZzMSksIDApOworCQkJCXMxID0gZnMxOworCisJCQkJLyoKKwkJCQkgKiBEaWQgd2UgZXh0ZW5kIGNvbnRleHQgdXB3YXJkcyBpbnRvIGFuCisJCQkJICogaWdub3JlZCBjaGFuZ2U/CisJCQkJICovCisJCQkJd2hpbGUgKHhjaHAgIT0geGNoICYmCisJCQkJICAgICAgIHhjaHAtPmkxICsgeGNocC0+Y2hnMSA8PSBzMSAmJgorCQkJCSAgICAgICB4Y2hwLT5pMiArIHhjaHAtPmNoZzIgPD0gczIpCisJCQkJCXhjaHAgPSB4Y2hwLT5uZXh0OworCisJCQkJLyogSWYgc28sIHNob3cgaXQgYWZ0ZXIgYWxsLiAqLworCQkJCWlmICh4Y2hwICE9IHhjaCkgeworCQkJCQl4Y2ggPSB4Y2hwOworCQkJCQlnb3RvIHByZV9jb250ZXh0X2NhbGN1bGF0aW9uOworCQkJCX0KKwkJCX0KKwkJfQorCisgcG9zdF9jb250ZXh0X2NhbGN1bGF0aW9uOgorCQlsY3R4ID0geGVjZmctPmN0eGxlbjsKKwkJbGN0eCA9IFhETF9NSU4obGN0eCwgeGUtPnhkZjEubnJlYyAtICh4Y2hlLT5pMSArIHhjaGUtPmNoZzEpKTsKKwkJbGN0eCA9IFhETF9NSU4obGN0eCwgeGUtPnhkZjIubnJlYyAtICh4Y2hlLT5pMiArIHhjaGUtPmNoZzIpKTsKKworCQllMSA9IHhjaGUtPmkxICsgeGNoZS0+Y2hnMSArIGxjdHg7CisJCWUyID0geGNoZS0+aTIgKyB4Y2hlLT5jaGcyICsgbGN0eDsKKworCQlpZiAoeGVjZmctPmZsYWdzICYgWERMX0VNSVRfRlVOQ0NPTlRFWFQpIHsKKwkJCWxvbmcgZmUxID0gZ2V0X2Z1bmNfbGluZSh4ZSwgeGVjZmcsIE5VTEwsCisJCQkJCQkgeGNoZS0+aTEgKyB4Y2hlLT5jaGcxLAorCQkJCQkJIHhlLT54ZGYxLm5yZWMpOworCQkJd2hpbGUgKGZlMSA+IDAgJiYgaXNfZW1wdHlfcmVjKCZ4ZS0+eGRmMSwgZmUxIC0gMSkpCisJCQkJZmUxLS07CisJCQlpZiAoZmUxIDwgMCkKKwkJCQlmZTEgPSB4ZS0+eGRmMS5ucmVjOworCQkJaWYgKGZlMSA+IGUxKSB7CisJCQkJZTIgPSBYRExfTUlOKGUyICsgKGZlMSAtIGUxKSwgeGUtPnhkZjIubnJlYyk7CisJCQkJZTEgPSBmZTE7CisJCQl9CisKKwkJCS8qCisJCQkgKiBPdmVybGFwIHdpdGggbmV4dCBjaGFuZ2U/ICBUaGVuIGluY2x1ZGUgaXQKKwkJCSAqIGluIHRoZSBjdXJyZW50IGh1bmsgYW5kIHN0YXJ0IG92ZXIgdG8gZmluZAorCQkJICogaXRzIG5ldyBlbmQuCisJCQkgKi8KKwkJCWlmICh4Y2hlLT5uZXh0KSB7CisJCQkJbG9uZyBsID0gWERMX01JTih4Y2hlLT5uZXh0LT5pMSwKKwkJCQkJCSB4ZS0+eGRmMS5ucmVjIC0gMSk7CisJCQkJaWYgKGwgLSB4ZWNmZy0+Y3R4bGVuIDw9IGUxIHx8CisJCQkJICAgIGdldF9mdW5jX2xpbmUoeGUsIHhlY2ZnLCBOVUxMLCBsLCBlMSkgPCAwKSB7CisJCQkJCXhjaGUgPSB4Y2hlLT5uZXh0OworCQkJCQlnb3RvIHBvc3RfY29udGV4dF9jYWxjdWxhdGlvbjsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBFbWl0IGN1cnJlbnQgaHVuayBoZWFkZXIuCisJCSAqLworCisJCWlmICh4ZWNmZy0+ZmxhZ3MgJiBYRExfRU1JVF9GVU5DTkFNRVMpIHsKKwkJCWdldF9mdW5jX2xpbmUoeGUsIHhlY2ZnLCAmZnVuY19saW5lLAorCQkJCSAgICAgIHMxIC0gMSwgZnVuY2xpbmVwcmV2KTsKKwkJCWZ1bmNsaW5lcHJldiA9IHMxIC0gMTsKKwkJfQorCQlpZiAoeGRsX2VtaXRfaHVua19oZHIoczEgKyAxLCBlMSAtIHMxLCBzMiArIDEsIGUyIC0gczIsCisJCQkJICAgICAgZnVuY19saW5lLmJ1ZiwgZnVuY19saW5lLmxlbiwgZWNiKSA8IDApCisJCQlyZXR1cm4gLTE7CisKKwkJLyoKKwkJICogRW1pdCBwcmUtY29udGV4dC4KKwkJICovCisJCWZvciAoOyBzMiA8IHhjaC0+aTI7IHMyKyspCisJCQlpZiAoeGRsX2VtaXRfcmVjb3JkKCZ4ZS0+eGRmMiwgczIsICIgIiwgZWNiKSA8IDApCisJCQkJcmV0dXJuIC0xOworCisJCWZvciAoczEgPSB4Y2gtPmkxLCBzMiA9IHhjaC0+aTI7OyB4Y2ggPSB4Y2gtPm5leHQpIHsKKwkJCS8qCisJCQkgKiBNZXJnZSBwcmV2aW91cyB3aXRoIGN1cnJlbnQgY2hhbmdlIGF0b20uCisJCQkgKi8KKwkJCWZvciAoOyBzMSA8IHhjaC0+aTEgJiYgczIgPCB4Y2gtPmkyOyBzMSsrLCBzMisrKQorCQkJCWlmICh4ZGxfZW1pdF9yZWNvcmQoJnhlLT54ZGYyLCBzMiwgIiAiLCBlY2IpIDwgMCkKKwkJCQkJcmV0dXJuIC0xOworCisJCQkvKgorCQkJICogUmVtb3ZlcyBsaW5lcyBmcm9tIHRoZSBmaXJzdCBmaWxlLgorCQkJICovCisJCQlmb3IgKHMxID0geGNoLT5pMTsgczEgPCB4Y2gtPmkxICsgeGNoLT5jaGcxOyBzMSsrKQorCQkJCWlmICh4ZGxfZW1pdF9yZWNvcmQoJnhlLT54ZGYxLCBzMSwgIi0iLCBlY2IpIDwgMCkKKwkJCQkJcmV0dXJuIC0xOworCisJCQkvKgorCQkJICogQWRkcyBsaW5lcyBmcm9tIHRoZSBzZWNvbmQgZmlsZS4KKwkJCSAqLworCQkJZm9yIChzMiA9IHhjaC0+aTI7IHMyIDwgeGNoLT5pMiArIHhjaC0+Y2hnMjsgczIrKykKKwkJCQlpZiAoeGRsX2VtaXRfcmVjb3JkKCZ4ZS0+eGRmMiwgczIsICIrIiwgZWNiKSA8IDApCisJCQkJCXJldHVybiAtMTsKKworCQkJaWYgKHhjaCA9PSB4Y2hlKQorCQkJCWJyZWFrOworCQkJczEgPSB4Y2gtPmkxICsgeGNoLT5jaGcxOworCQkJczIgPSB4Y2gtPmkyICsgeGNoLT5jaGcyOworCQl9CisKKwkJLyoKKwkJICogRW1pdCBwb3N0LWNvbnRleHQuCisJCSAqLworCQlmb3IgKHMyID0geGNoZS0+aTIgKyB4Y2hlLT5jaGcyOyBzMiA8IGUyOyBzMisrKQorCQkJaWYgKHhkbF9lbWl0X3JlY29yZCgmeGUtPnhkZjIsIHMyLCAiICIsIGVjYikgPCAwKQorCQkJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3hkaWZmL3hlbWl0LmggYi94ZGlmZi94ZW1pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOTg4N2UKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94ZW1pdC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCBzZWUKKyAqICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFhFTUlUX0gpCisjZGVmaW5lIFhFTUlUX0gKKworCit0eXBlZGVmIGludCAoKmVtaXRfZnVuY190KSh4ZGZlbnZfdCAqeGUsIHhkY2hhbmdlX3QgKnhzY3IsIHhkZW1pdGNiX3QgKmVjYiwKKwkJCSAgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpOworCit4ZGNoYW5nZV90ICp4ZGxfZ2V0X2h1bmsoeGRjaGFuZ2VfdCAqKnhzY3IsIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpOworaW50IHhkbF9lbWl0X2RpZmYoeGRmZW52X3QgKnhlLCB4ZGNoYW5nZV90ICp4c2NyLCB4ZGVtaXRjYl90ICplY2IsCisJCSAgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZyk7CisKKworCisjZW5kaWYgLyogI2lmICFkZWZpbmVkKFhFTUlUX0gpICovCmRpZmYgLS1naXQgYS94ZGlmZi94aGlzdG9ncmFtLmMgYi94ZGlmZi94aGlzdG9ncmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdiMzVhOQotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hoaXN0b2dyYW0uYwpAQCAtMCwwICsxLDM4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gSkdpdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJ4aW5jbHVkZS5oIgorCisjZGVmaW5lIE1BWF9QVFIJVUlOVF9NQVgKKyNkZWZpbmUgTUFYX0NOVAlVSU5UX01BWAorCisjZGVmaW5lIExJTkVfRU5EKG4pIChsaW5lIyNuICsgY291bnQjI24gLSAxKQorI2RlZmluZSBMSU5FX0VORF9QVFIobikgKCpsaW5lIyNuICsgKmNvdW50IyNuIC0gMSkKKworc3RydWN0IGhpc3RpbmRleCB7CisJc3RydWN0IHJlY29yZCB7CisJCXVuc2lnbmVkIGludCBwdHIsIGNudDsKKwkJc3RydWN0IHJlY29yZCAqbmV4dDsKKwl9ICoqcmVjb3JkcywgLyogYW4gb2NjdXJyZW5jZSAqLworCSAgKipsaW5lX21hcDsgLyogbWFwIG9mIGxpbmUgdG8gcmVjb3JkIGNoYWluICovCisJY2hhc3RvcmVfdCByY2hhOworCXVuc2lnbmVkIGludCAqbmV4dF9wdHJzOworCXVuc2lnbmVkIGludCB0YWJsZV9iaXRzLAorCQkgICAgIHJlY29yZHNfc2l6ZSwKKwkJICAgICBsaW5lX21hcF9zaXplOworCisJdW5zaWduZWQgaW50IG1heF9jaGFpbl9sZW5ndGgsCisJCSAgICAga2V5X3NoaWZ0LAorCQkgICAgIHB0cl9zaGlmdDsKKworCXVuc2lnbmVkIGludCBjbnQsCisJCSAgICAgaGFzX2NvbW1vbjsKKworCXhkZmVudl90ICplbnY7CisJeHBwYXJhbV90IGNvbnN0ICp4cHA7Cit9OworCitzdHJ1Y3QgcmVnaW9uIHsKKwl1bnNpZ25lZCBpbnQgYmVnaW4xLCBlbmQxOworCXVuc2lnbmVkIGludCBiZWdpbjIsIGVuZDI7Cit9OworCisjZGVmaW5lIExJTkVfTUFQKGksIGEpIChpLT5saW5lX21hcFsoYSkgLSBpLT5wdHJfc2hpZnRdKQorCisjZGVmaW5lIE5FWFRfUFRSKGluZGV4LCBwdHIpIFwKKwkoaW5kZXgtPm5leHRfcHRyc1socHRyKSAtIGluZGV4LT5wdHJfc2hpZnRdKQorCisjZGVmaW5lIENOVChpbmRleCwgcHRyKSBcCisJKChMSU5FX01BUChpbmRleCwgcHRyKSktPmNudCkKKworI2RlZmluZSBSRUMoZW52LCBzLCBsKSBcCisJKGVudi0+eGRmIyNzLnJlY3NbbCAtIDFdKQorCitzdGF0aWMgaW50IGNtcF9yZWNzKHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCXhyZWNvcmRfdCAqcjEsIHhyZWNvcmRfdCAqcjIpCit7CisJcmV0dXJuIHIxLT5oYSA9PSByMi0+aGEgJiYKKwkJeGRsX3JlY21hdGNoKHIxLT5wdHIsIHIxLT5zaXplLCByMi0+cHRyLCByMi0+c2l6ZSwKKwkJCSAgICB4cHAtPmZsYWdzKTsKK30KKworI2RlZmluZSBDTVBfRU5WKHhwcCwgZW52LCBzMSwgbDEsIHMyLCBsMikgXAorCShjbXBfcmVjcyh4cHAsIFJFQyhlbnYsIHMxLCBsMSksIFJFQyhlbnYsIHMyLCBsMikpKQorCisjZGVmaW5lIENNUChpLCBzMSwgbDEsIHMyLCBsMikgXAorCShjbXBfcmVjcyhpLT54cHAsIFJFQyhpLT5lbnYsIHMxLCBsMSksIFJFQyhpLT5lbnYsIHMyLCBsMikpKQorCisjZGVmaW5lIFRBQkxFX0hBU0goaW5kZXgsIHNpZGUsIGxpbmUpIFwKKwlYRExfSEFTSExPTkcoKFJFQyhpbmRleC0+ZW52LCBzaWRlLCBsaW5lKSktPmhhLCBpbmRleC0+dGFibGVfYml0cykKKworc3RhdGljIGludCBzY2FuQShzdHJ1Y3QgaGlzdGluZGV4ICppbmRleCwgaW50IGxpbmUxLCBpbnQgY291bnQxKQoreworCXVuc2lnbmVkIGludCBwdHIsIHRibF9pZHg7CisJdW5zaWduZWQgaW50IGNoYWluX2xlbjsKKwlzdHJ1Y3QgcmVjb3JkICoqcmVjX2NoYWluLCAqcmVjOworCisJZm9yIChwdHIgPSBMSU5FX0VORCgxKTsgbGluZTEgPD0gcHRyOyBwdHItLSkgeworCQl0YmxfaWR4ID0gVEFCTEVfSEFTSChpbmRleCwgMSwgcHRyKTsKKwkJcmVjX2NoYWluID0gaW5kZXgtPnJlY29yZHMgKyB0YmxfaWR4OworCQlyZWMgPSAqcmVjX2NoYWluOworCisJCWNoYWluX2xlbiA9IDA7CisJCXdoaWxlIChyZWMpIHsKKwkJCWlmIChDTVAoaW5kZXgsIDEsIHJlYy0+cHRyLCAxLCBwdHIpKSB7CisJCQkJLyoKKwkJCQkgKiBwdHIgaXMgaWRlbnRpY2FsIHRvIGFub3RoZXIgZWxlbWVudC4gSW5zZXJ0CisJCQkJICogaXQgb250byB0aGUgZnJvbnQgb2YgdGhlIGV4aXN0aW5nIGVsZW1lbnQKKwkJCQkgKiBjaGFpbi4KKwkJCQkgKi8KKwkJCQlORVhUX1BUUihpbmRleCwgcHRyKSA9IHJlYy0+cHRyOworCQkJCXJlYy0+cHRyID0gcHRyOworCQkJCS8qIGNhcCByZWMtPmNudCBhdCBNQVhfQ05UICovCisJCQkJcmVjLT5jbnQgPSBYRExfTUlOKE1BWF9DTlQsIHJlYy0+Y250ICsgMSk7CisJCQkJTElORV9NQVAoaW5kZXgsIHB0cikgPSByZWM7CisJCQkJZ290byBjb250aW51ZV9zY2FuOworCQkJfQorCisJCQlyZWMgPSByZWMtPm5leHQ7CisJCQljaGFpbl9sZW4rKzsKKwkJfQorCisJCWlmIChjaGFpbl9sZW4gPT0gaW5kZXgtPm1heF9jaGFpbl9sZW5ndGgpCisJCQlyZXR1cm4gLTE7CisKKwkJLyoKKwkJICogVGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBoYXZlIGV2ZXIgc2VlbiB0aGlzIHBhcnRpY3VsYXIKKwkJICogZWxlbWVudCBpbiB0aGUgc2VxdWVuY2UuIENvbnN0cnVjdCBhIG5ldyBjaGFpbiBmb3IgaXQuCisJCSAqLworCQlpZiAoIShyZWMgPSB4ZGxfY2hhX2FsbG9jKCZpbmRleC0+cmNoYSkpKQorCQkJcmV0dXJuIC0xOworCQlyZWMtPnB0ciA9IHB0cjsKKwkJcmVjLT5jbnQgPSAxOworCQlyZWMtPm5leHQgPSAqcmVjX2NoYWluOworCQkqcmVjX2NoYWluID0gcmVjOworCQlMSU5FX01BUChpbmRleCwgcHRyKSA9IHJlYzsKKworY29udGludWVfc2NhbjoKKwkJOyAvKiBubyBvcCAqLworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRyeV9sY3Moc3RydWN0IGhpc3RpbmRleCAqaW5kZXgsIHN0cnVjdCByZWdpb24gKmxjcywgaW50IGJfcHRyLAorCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCXVuc2lnbmVkIGludCBiX25leHQgPSBiX3B0ciArIDE7CisJc3RydWN0IHJlY29yZCAqcmVjID0gaW5kZXgtPnJlY29yZHNbVEFCTEVfSEFTSChpbmRleCwgMiwgYl9wdHIpXTsKKwl1bnNpZ25lZCBpbnQgYXMsIGFlLCBicywgYmUsIG5wLCByYzsKKwlpbnQgc2hvdWxkX2JyZWFrOworCisJZm9yICg7IHJlYzsgcmVjID0gcmVjLT5uZXh0KSB7CisJCWlmIChyZWMtPmNudCA+IGluZGV4LT5jbnQpIHsKKwkJCWlmICghaW5kZXgtPmhhc19jb21tb24pCisJCQkJaW5kZXgtPmhhc19jb21tb24gPSBDTVAoaW5kZXgsIDEsIHJlYy0+cHRyLCAyLCBiX3B0cik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWFzID0gcmVjLT5wdHI7CisJCWlmICghQ01QKGluZGV4LCAxLCBhcywgMiwgYl9wdHIpKQorCQkJY29udGludWU7CisKKwkJaW5kZXgtPmhhc19jb21tb24gPSAxOworCQlmb3IgKDs7KSB7CisJCQlzaG91bGRfYnJlYWsgPSAwOworCQkJbnAgPSBORVhUX1BUUihpbmRleCwgYXMpOworCQkJYnMgPSBiX3B0cjsKKwkJCWFlID0gYXM7CisJCQliZSA9IGJzOworCQkJcmMgPSByZWMtPmNudDsKKworCQkJd2hpbGUgKGxpbmUxIDwgYXMgJiYgbGluZTIgPCBicworCQkJCSYmIENNUChpbmRleCwgMSwgYXMgLSAxLCAyLCBicyAtIDEpKSB7CisJCQkJYXMtLTsKKwkJCQlicy0tOworCQkJCWlmICgxIDwgcmMpCisJCQkJCXJjID0gWERMX01JTihyYywgQ05UKGluZGV4LCBhcykpOworCQkJfQorCQkJd2hpbGUgKGFlIDwgTElORV9FTkQoMSkgJiYgYmUgPCBMSU5FX0VORCgyKQorCQkJCSYmIENNUChpbmRleCwgMSwgYWUgKyAxLCAyLCBiZSArIDEpKSB7CisJCQkJYWUrKzsKKwkJCQliZSsrOworCQkJCWlmICgxIDwgcmMpCisJCQkJCXJjID0gWERMX01JTihyYywgQ05UKGluZGV4LCBhZSkpOworCQkJfQorCisJCQlpZiAoYl9uZXh0IDw9IGJlKQorCQkJCWJfbmV4dCA9IGJlICsgMTsKKwkJCWlmIChsY3MtPmVuZDEgLSBsY3MtPmJlZ2luMSA8IGFlIC0gYXMgfHwgcmMgPCBpbmRleC0+Y250KSB7CisJCQkJbGNzLT5iZWdpbjEgPSBhczsKKwkJCQlsY3MtPmJlZ2luMiA9IGJzOworCQkJCWxjcy0+ZW5kMSA9IGFlOworCQkJCWxjcy0+ZW5kMiA9IGJlOworCQkJCWluZGV4LT5jbnQgPSByYzsKKwkJCX0KKworCQkJaWYgKG5wID09IDApCisJCQkJYnJlYWs7CisKKwkJCXdoaWxlIChucCA8PSBhZSkgeworCQkJCW5wID0gTkVYVF9QVFIoaW5kZXgsIG5wKTsKKwkJCQlpZiAobnAgPT0gMCkgeworCQkJCQlzaG91bGRfYnJlYWsgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChzaG91bGRfYnJlYWspCisJCQkJYnJlYWs7CisKKwkJCWFzID0gbnA7CisJCX0KKwl9CisJcmV0dXJuIGJfbmV4dDsKK30KKworc3RhdGljIGludCBmYWxsX2JhY2tfdG9fY2xhc3NpY19kaWZmKHhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGZlbnZfdCAqZW52LAorCQlpbnQgbGluZTEsIGludCBjb3VudDEsIGludCBsaW5lMiwgaW50IGNvdW50MikKK3sKKwl4cHBhcmFtX3QgeHBwYXJhbTsKKwl4cHBhcmFtLmZsYWdzID0geHBwLT5mbGFncyAmIH5YREZfRElGRl9BTEdPUklUSE1fTUFTSzsKKworCXJldHVybiB4ZGxfZmFsbF9iYWNrX2RpZmYoZW52LCAmeHBwYXJhbSwKKwkJCQkgIGxpbmUxLCBjb3VudDEsIGxpbmUyLCBjb3VudDIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9pbmRleChzdHJ1Y3QgaGlzdGluZGV4ICppbmRleCkKK3sKKwl4ZGxfZnJlZShpbmRleC0+cmVjb3Jkcyk7CisJeGRsX2ZyZWUoaW5kZXgtPmxpbmVfbWFwKTsKKwl4ZGxfZnJlZShpbmRleC0+bmV4dF9wdHJzKTsKKwl4ZGxfY2hhX2ZyZWUoJmluZGV4LT5yY2hhKTsKK30KKworc3RhdGljIGludCBmaW5kX2xjcyh4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRmZW52X3QgKmVudiwKKwkJICAgIHN0cnVjdCByZWdpb24gKmxjcywKKwkJICAgIGludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCWludCBiX3B0cjsKKwlpbnQgc3osIHJldCA9IC0xOworCXN0cnVjdCBoaXN0aW5kZXggaW5kZXg7CisKKwltZW1zZXQoJmluZGV4LCAwLCBzaXplb2YoaW5kZXgpKTsKKworCWluZGV4LmVudiA9IGVudjsKKwlpbmRleC54cHAgPSB4cHA7CisKKwlpbmRleC5yZWNvcmRzID0gTlVMTDsKKwlpbmRleC5saW5lX21hcCA9IE5VTEw7CisJLyogaW4gY2FzZSBvZiBlYXJseSB4ZGxfY2hhX2ZyZWUoKSAqLworCWluZGV4LnJjaGEuaGVhZCA9IE5VTEw7CisKKwlpbmRleC50YWJsZV9iaXRzID0geGRsX2hhc2hiaXRzKGNvdW50MSk7CisJc3ogPSBpbmRleC5yZWNvcmRzX3NpemUgPSAxIDw8IGluZGV4LnRhYmxlX2JpdHM7CisJc3ogKj0gc2l6ZW9mKHN0cnVjdCByZWNvcmQgKik7CisJaWYgKCEoaW5kZXgucmVjb3JkcyA9IChzdHJ1Y3QgcmVjb3JkICoqKSB4ZGxfbWFsbG9jKHN6KSkpCisJCWdvdG8gY2xlYW51cDsKKwltZW1zZXQoaW5kZXgucmVjb3JkcywgMCwgc3opOworCisJc3ogPSBpbmRleC5saW5lX21hcF9zaXplID0gY291bnQxOworCXN6ICo9IHNpemVvZihzdHJ1Y3QgcmVjb3JkICopOworCWlmICghKGluZGV4LmxpbmVfbWFwID0gKHN0cnVjdCByZWNvcmQgKiopIHhkbF9tYWxsb2Moc3opKSkKKwkJZ290byBjbGVhbnVwOworCW1lbXNldChpbmRleC5saW5lX21hcCwgMCwgc3opOworCisJc3ogPSBpbmRleC5saW5lX21hcF9zaXplOworCXN6ICo9IHNpemVvZih1bnNpZ25lZCBpbnQpOworCWlmICghKGluZGV4Lm5leHRfcHRycyA9ICh1bnNpZ25lZCBpbnQgKikgeGRsX21hbGxvYyhzeikpKQorCQlnb3RvIGNsZWFudXA7CisJbWVtc2V0KGluZGV4Lm5leHRfcHRycywgMCwgc3opOworCisJLyogbGluZXMgLyA0ICsgMSBjb21lcyBmcm9tIHhwcmVwYXJlLmM6eGRsX3ByZXBhcmVfY3R4KCkgKi8KKwlpZiAoeGRsX2NoYV9pbml0KCZpbmRleC5yY2hhLCBzaXplb2Yoc3RydWN0IHJlY29yZCksIGNvdW50MSAvIDQgKyAxKSA8IDApCisJCWdvdG8gY2xlYW51cDsKKworCWluZGV4LnB0cl9zaGlmdCA9IGxpbmUxOworCWluZGV4Lm1heF9jaGFpbl9sZW5ndGggPSA2NDsKKworCWlmIChzY2FuQSgmaW5kZXgsIGxpbmUxLCBjb3VudDEpKQorCQlnb3RvIGNsZWFudXA7CisKKwlpbmRleC5jbnQgPSBpbmRleC5tYXhfY2hhaW5fbGVuZ3RoICsgMTsKKworCWZvciAoYl9wdHIgPSBsaW5lMjsgYl9wdHIgPD0gTElORV9FTkQoMik7ICkKKwkJYl9wdHIgPSB0cnlfbGNzKCZpbmRleCwgbGNzLCBiX3B0ciwgbGluZTEsIGNvdW50MSwgbGluZTIsIGNvdW50Mik7CisKKwlpZiAoaW5kZXguaGFzX2NvbW1vbiAmJiBpbmRleC5tYXhfY2hhaW5fbGVuZ3RoIDwgaW5kZXguY250KQorCQlyZXQgPSAxOworCWVsc2UKKwkJcmV0ID0gMDsKKworY2xlYW51cDoKKwlmcmVlX2luZGV4KCZpbmRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoaXN0b2dyYW1fZGlmZih4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRmZW52X3QgKmVudiwKKwlpbnQgbGluZTEsIGludCBjb3VudDEsIGludCBsaW5lMiwgaW50IGNvdW50MikKK3sKKwlzdHJ1Y3QgcmVnaW9uIGxjczsKKwlpbnQgbGNzX2ZvdW5kOworCWludCByZXN1bHQ7CityZWRvOgorCXJlc3VsdCA9IC0xOworCisJaWYgKGNvdW50MSA8PSAwICYmIGNvdW50MiA8PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChMSU5FX0VORCgxKSA+PSBNQVhfUFRSKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWNvdW50MSkgeworCQl3aGlsZShjb3VudDItLSkKKwkJCWVudi0+eGRmMi5yY2hnW2xpbmUyKysgLSAxXSA9IDE7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIWNvdW50MikgeworCQl3aGlsZShjb3VudDEtLSkKKwkJCWVudi0+eGRmMS5yY2hnW2xpbmUxKysgLSAxXSA9IDE7CisJCXJldHVybiAwOworCX0KKworCW1lbXNldCgmbGNzLCAwLCBzaXplb2YobGNzKSk7CisJbGNzX2ZvdW5kID0gZmluZF9sY3MoeHBwLCBlbnYsICZsY3MsIGxpbmUxLCBjb3VudDEsIGxpbmUyLCBjb3VudDIpOworCWlmIChsY3NfZm91bmQgPCAwKQorCQlnb3RvIG91dDsKKwllbHNlIGlmIChsY3NfZm91bmQpCisJCXJlc3VsdCA9IGZhbGxfYmFja190b19jbGFzc2ljX2RpZmYoeHBwLCBlbnYsIGxpbmUxLCBjb3VudDEsIGxpbmUyLCBjb3VudDIpOworCWVsc2UgeworCQlpZiAobGNzLmJlZ2luMSA9PSAwICYmIGxjcy5iZWdpbjIgPT0gMCkgeworCQkJd2hpbGUgKGNvdW50MS0tKQorCQkJCWVudi0+eGRmMS5yY2hnW2xpbmUxKysgLSAxXSA9IDE7CisJCQl3aGlsZSAoY291bnQyLS0pCisJCQkJZW52LT54ZGYyLnJjaGdbbGluZTIrKyAtIDFdID0gMTsKKwkJCXJlc3VsdCA9IDA7CisJCX0gZWxzZSB7CisJCQlyZXN1bHQgPSBoaXN0b2dyYW1fZGlmZih4cHAsIGVudiwKKwkJCQkJCWxpbmUxLCBsY3MuYmVnaW4xIC0gbGluZTEsCisJCQkJCQlsaW5lMiwgbGNzLmJlZ2luMiAtIGxpbmUyKTsKKwkJCWlmIChyZXN1bHQpCisJCQkJZ290byBvdXQ7CisJCQkvKgorCQkJICogcmVzdWx0ID0gaGlzdG9ncmFtX2RpZmYoeHBwLCBlbnYsCisJCQkgKiAgICAgICAgICAgIGxjcy5lbmQxICsgMSwgTElORV9FTkQoMSkgLSBsY3MuZW5kMSwKKwkJCSAqICAgICAgICAgICAgbGNzLmVuZDIgKyAxLCBMSU5FX0VORCgyKSAtIGxjcy5lbmQyKTsKKwkJCSAqIGJ1dCBsZXQncyBvcHRpbWl6ZSB0YWlsIHJlY3Vyc2lvbiBvdXJzZWxmOgorCQkJKi8KKwkJCWNvdW50MSA9IExJTkVfRU5EKDEpIC0gbGNzLmVuZDE7CisJCQlsaW5lMSA9IGxjcy5lbmQxICsgMTsKKwkJCWNvdW50MiA9IExJTkVfRU5EKDIpIC0gbGNzLmVuZDI7CisJCQlsaW5lMiA9IGxjcy5lbmQyICsgMTsKKwkJCWdvdG8gcmVkbzsKKwkJfQorCX0KK291dDoKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgeGRsX2RvX2hpc3RvZ3JhbV9kaWZmKG1tZmlsZV90ICpmaWxlMSwgbW1maWxlX3QgKmZpbGUyLAorCXhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGZlbnZfdCAqZW52KQoreworCWlmICh4ZGxfcHJlcGFyZV9lbnYoZmlsZTEsIGZpbGUyLCB4cHAsIGVudikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gaGlzdG9ncmFtX2RpZmYoeHBwLCBlbnYsCisJCWVudi0+eGRmMS5kc3RhcnQgKyAxLCBlbnYtPnhkZjEuZGVuZCAtIGVudi0+eGRmMS5kc3RhcnQgKyAxLAorCQllbnYtPnhkZjIuZHN0YXJ0ICsgMSwgZW52LT54ZGYyLmRlbmQgLSBlbnYtPnhkZjIuZHN0YXJ0ICsgMSk7Cit9CmRpZmYgLS1naXQgYS94ZGlmZi94aW5jbHVkZS5oIGIveGRpZmYveGluY2x1ZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDI4NWFjCi0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveGluY2x1ZGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgc2VlCisgKiAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisKKyNpZiAhZGVmaW5lZChYSU5DTFVERV9IKQorI2RlZmluZSBYSU5DTFVERV9ICisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJ4bWFjcm9zLmgiCisjaW5jbHVkZSAieGRpZmYuaCIKKyNpbmNsdWRlICJ4dHlwZXMuaCIKKyNpbmNsdWRlICJ4dXRpbHMuaCIKKyNpbmNsdWRlICJ4cHJlcGFyZS5oIgorI2luY2x1ZGUgInhkaWZmaS5oIgorI2luY2x1ZGUgInhlbWl0LmgiCisKKworI2VuZGlmIC8qICNpZiAhZGVmaW5lZChYSU5DTFVERV9IKSAqLwpkaWZmIC0tZ2l0IGEveGRpZmYveG1hY3Jvcy5oIGIveGRpZmYveG1hY3Jvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MDlhMjgKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94bWFjcm9zLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMyAgRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZQorICogIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWYgIWRlZmluZWQoWE1BQ1JPU19IKQorI2RlZmluZSBYTUFDUk9TX0gKKworCisKKworI2RlZmluZSBYRExfTUlOKGEsIGIpICgoYSkgPCAoYikgPyAoYSk6IChiKSkKKyNkZWZpbmUgWERMX01BWChhLCBiKSAoKGEpID4gKGIpID8gKGEpOiAoYikpCisjZGVmaW5lIFhETF9BQlModikgKCh2KSA+PSAwID8gKHYpOiAtKHYpKQorI2RlZmluZSBYRExfSVNESUdJVChjKSAoKGMpID49ICcwJyAmJiAoYykgPD0gJzknKQorI2RlZmluZSBYRExfSVNTUEFDRShjKSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikoYykpKQorI2RlZmluZSBYRExfQUREQklUUyh2LGIpCSgodikgKyAoKHYpID4+IChiKSkpCisjZGVmaW5lIFhETF9NQVNLQklUUyhiKQkJKCgxVUwgPDwgKGIpKSAtIDEpCisjZGVmaW5lIFhETF9IQVNITE9ORyh2LGIpCShYRExfQUREQklUUygodW5zaWduZWQgbG9uZykodiksIGIpICYgWERMX01BU0tCSVRTKGIpKQorI2RlZmluZSBYRExfUFRSRlJFRShwKSBkbyB7IGlmIChwKSB7IHhkbF9mcmVlKHApOyAocCkgPSBOVUxMOyB9IH0gd2hpbGUgKDApCisjZGVmaW5lIFhETF9MRTMyX1BVVChwLCB2KSBcCitkbyB7IFwKKwl1bnNpZ25lZCBjaGFyICpfX3AgPSAodW5zaWduZWQgY2hhciAqKSAocCk7IFwKKwkqX19wKysgPSAodW5zaWduZWQgY2hhcikgKHYpOyBcCisJKl9fcCsrID0gKHVuc2lnbmVkIGNoYXIpICgodikgPj4gOCk7IFwKKwkqX19wKysgPSAodW5zaWduZWQgY2hhcikgKCh2KSA+PiAxNik7IFwKKwkqX19wID0gKHVuc2lnbmVkIGNoYXIpICgodikgPj4gMjQpOyBcCit9IHdoaWxlICgwKQorI2RlZmluZSBYRExfTEUzMl9HRVQocCwgdikgXAorZG8geyBcCisJdW5zaWduZWQgY2hhciBjb25zdCAqX19wID0gKHVuc2lnbmVkIGNoYXIgY29uc3QgKikgKHApOyBcCisJKHYpID0gKHVuc2lnbmVkIGxvbmcpIF9fcFswXSB8ICgodW5zaWduZWQgbG9uZykgX19wWzFdKSA8PCA4IHwgXAorCQkoKHVuc2lnbmVkIGxvbmcpIF9fcFsyXSkgPDwgMTYgfCAoKHVuc2lnbmVkIGxvbmcpIF9fcFszXSkgPDwgMjQ7IFwKK30gd2hpbGUgKDApCisKKworI2VuZGlmIC8qICNpZiAhZGVmaW5lZChYTUFDUk9TX0gpICovCmRpZmYgLS1naXQgYS94ZGlmZi94bWVyZ2UuYyBiL3hkaWZmL3htZXJnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NTllZGIKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94bWVyZ2UuYwpAQCAtMCwwICsxLDY4NiBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2IERhdmlkZSBMaWJlbnppLCBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCBzZWUKKyAqICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2luY2x1ZGUgInhpbmNsdWRlLmgiCisKK3R5cGVkZWYgc3RydWN0IHNfeGRtZXJnZSB7CisJc3RydWN0IHNfeGRtZXJnZSAqbmV4dDsKKwkvKgorCSAqIDAgPSBjb25mbGljdCwKKwkgKiAxID0gbm8gY29uZmxpY3QsIHRha2UgZmlyc3QsCisJICogMiA9IG5vIGNvbmZsaWN0LCB0YWtlIHNlY29uZC4KKwkgKiAzID0gbm8gY29uZmxpY3QsIHRha2UgYm90aC4KKwkgKi8KKwlpbnQgbW9kZTsKKwkvKgorCSAqIFRoZXNlIHBvaW50IGF0IHRoZSByZXNwZWN0aXZlIHBvc3RpbWFnZXMuICBFLmcuIDxpMSxjaGcxPiBpcworCSAqIGhvdyBzaWRlICMxIHdhbnRzIHRvIGNoYW5nZSB0aGUgY29tbW9uIGFuY2VzdG9yOyBpZiB0aGVyZSBpcyBubworCSAqIG92ZXJsYXAsIGxpbmVzIGJlZm9yZSBpMSBpbiB0aGUgcG9zdGltYWdlIG9mIHNpZGUgIzEgYXBwZWFyCisJICogaW4gdGhlIG1lcmdlIHJlc3VsdCBhcyBhIHJlZ2lvbiB0b3VjaGVkIGJ5IG5laXRoZXIgc2lkZS4KKwkgKi8KKwlsb25nIGkxLCBpMjsKKwlsb25nIGNoZzEsIGNoZzI7CisJLyoKKwkgKiBUaGVzZSBwb2ludCBhdCB0aGUgcHJlaW1hZ2U7IG9mIGNvdXJzZSB0aGVyZSBpcyBqdXN0IG9uZQorCSAqIHByZWltYWdlLCB0aGF0IGlzIGZyb20gdGhlIHNoYXJlZCBjb21tb24gYW5jZXN0b3IuCisJICovCisJbG9uZyBpMDsKKwlsb25nIGNoZzA7Cit9IHhkbWVyZ2VfdDsKKworc3RhdGljIGludCB4ZGxfYXBwZW5kX21lcmdlKHhkbWVyZ2VfdCAqKm1lcmdlLCBpbnQgbW9kZSwKKwkJCSAgICBsb25nIGkwLCBsb25nIGNoZzAsCisJCQkgICAgbG9uZyBpMSwgbG9uZyBjaGcxLAorCQkJICAgIGxvbmcgaTIsIGxvbmcgY2hnMikKK3sKKwl4ZG1lcmdlX3QgKm0gPSAqbWVyZ2U7CisJaWYgKG0gJiYgKGkxIDw9IG0tPmkxICsgbS0+Y2hnMSB8fCBpMiA8PSBtLT5pMiArIG0tPmNoZzIpKSB7CisJCWlmIChtb2RlICE9IG0tPm1vZGUpCisJCQltLT5tb2RlID0gMDsKKwkJbS0+Y2hnMCA9IGkwICsgY2hnMCAtIG0tPmkwOworCQltLT5jaGcxID0gaTEgKyBjaGcxIC0gbS0+aTE7CisJCW0tPmNoZzIgPSBpMiArIGNoZzIgLSBtLT5pMjsKKwl9IGVsc2UgeworCQltID0geGRsX21hbGxvYyhzaXplb2YoeGRtZXJnZV90KSk7CisJCWlmICghbSkKKwkJCXJldHVybiAtMTsKKwkJbS0+bmV4dCA9IE5VTEw7CisJCW0tPm1vZGUgPSBtb2RlOworCQltLT5pMCA9IGkwOworCQltLT5jaGcwID0gY2hnMDsKKwkJbS0+aTEgPSBpMTsKKwkJbS0+Y2hnMSA9IGNoZzE7CisJCW0tPmkyID0gaTI7CisJCW0tPmNoZzIgPSBjaGcyOworCQlpZiAoKm1lcmdlKQorCQkJKCptZXJnZSktPm5leHQgPSBtOworCQkqbWVyZ2UgPSBtOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4ZGxfY2xlYW51cF9tZXJnZSh4ZG1lcmdlX3QgKmMpCit7CisJaW50IGNvdW50ID0gMDsKKwl4ZG1lcmdlX3QgKm5leHRfYzsKKworCS8qIHdlcmUgdGhlcmUgY29uZmxpY3RzPyAqLworCWZvciAoOyBjOyBjID0gbmV4dF9jKSB7CisJCWlmIChjLT5tb2RlID09IDApCisJCQljb3VudCsrOworCQluZXh0X2MgPSBjLT5uZXh0OworCQlmcmVlKGMpOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgeGRsX21lcmdlX2NtcF9saW5lcyh4ZGZlbnZfdCAqeGUxLCBpbnQgaTEsIHhkZmVudl90ICp4ZTIsIGludCBpMiwKKwkJaW50IGxpbmVfY291bnQsIGxvbmcgZmxhZ3MpCit7CisJaW50IGk7CisJeHJlY29yZF90ICoqcmVjMSA9IHhlMS0+eGRmMi5yZWNzICsgaTE7CisJeHJlY29yZF90ICoqcmVjMiA9IHhlMi0+eGRmMi5yZWNzICsgaTI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGluZV9jb3VudDsgaSsrKSB7CisJCWludCByZXN1bHQgPSB4ZGxfcmVjbWF0Y2gocmVjMVtpXS0+cHRyLCByZWMxW2ldLT5zaXplLAorCQkJcmVjMltpXS0+cHRyLCByZWMyW2ldLT5zaXplLCBmbGFncyk7CisJCWlmICghcmVzdWx0KQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4ZGxfcmVjc19jb3B5XzAoaW50IHVzZV9vcmlnLCB4ZGZlbnZfdCAqeGUsIGludCBpLCBpbnQgY291bnQsIGludCBuZWVkc19jciwgaW50IGFkZF9ubCwgY2hhciAqZGVzdCkKK3sKKwl4cmVjb3JkX3QgKipyZWNzOworCWludCBzaXplID0gMDsKKworCXJlY3MgPSAodXNlX29yaWcgPyB4ZS0+eGRmMS5yZWNzIDogeGUtPnhkZjIucmVjcykgKyBpOworCisJaWYgKGNvdW50IDwgMSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IHNpemUgKz0gcmVjc1tpKytdLT5zaXplKQorCQlpZiAoZGVzdCkKKwkJCW1lbWNweShkZXN0ICsgc2l6ZSwgcmVjc1tpXS0+cHRyLCByZWNzW2ldLT5zaXplKTsKKwlpZiAoYWRkX25sKSB7CisJCWkgPSByZWNzW2NvdW50IC0gMV0tPnNpemU7CisJCWlmIChpID09IDAgfHwgcmVjc1tjb3VudCAtIDFdLT5wdHJbaSAtIDFdICE9ICdcbicpIHsKKwkJCWlmIChuZWVkc19jcikgeworCQkJCWlmIChkZXN0KQorCQkJCQlkZXN0W3NpemVdID0gJ1xyJzsKKwkJCQlzaXplKys7CisJCQl9CisKKwkJCWlmIChkZXN0KQorCQkJCWRlc3Rbc2l6ZV0gPSAnXG4nOworCQkJc2l6ZSsrOworCQl9CisJfQorCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50IHhkbF9yZWNzX2NvcHkoeGRmZW52X3QgKnhlLCBpbnQgaSwgaW50IGNvdW50LCBpbnQgbmVlZHNfY3IsIGludCBhZGRfbmwsIGNoYXIgKmRlc3QpCit7CisJcmV0dXJuIHhkbF9yZWNzX2NvcHlfMCgwLCB4ZSwgaSwgY291bnQsIG5lZWRzX2NyLCBhZGRfbmwsIGRlc3QpOworfQorCitzdGF0aWMgaW50IHhkbF9vcmlnX2NvcHkoeGRmZW52X3QgKnhlLCBpbnQgaSwgaW50IGNvdW50LCBpbnQgbmVlZHNfY3IsIGludCBhZGRfbmwsIGNoYXIgKmRlc3QpCit7CisJcmV0dXJuIHhkbF9yZWNzX2NvcHlfMCgxLCB4ZSwgaSwgY291bnQsIG5lZWRzX2NyLCBhZGRfbmwsIGRlc3QpOworfQorCisvKgorICogUmV0dXJucyAxIGlmIHRoZSBpJ3RoIGxpbmUgZW5kcyBpbiBDUi9MRiAoaWYgaXQgaXMgdGhlIGxhc3QgbGluZSBhbmQKKyAqIGhhcyBubyBlb2wsIHRoZSBwcmVjZWRpbmcgbGluZSwgaWYgYW55KSwgMCBpZiBpdCBlbmRzIGluIExGLW9ubHksIGFuZAorICogLTEgaWYgdGhlIGxpbmUgZW5kaW5nIGNhbm5vdCBiZSBkZXRlcm1pbmVkLgorICovCitzdGF0aWMgaW50IGlzX2VvbF9jcmxmKHhkZmlsZV90ICpmaWxlLCBpbnQgaSkKK3sKKwlsb25nIHNpemU7CisKKwlpZiAoaSA8IGZpbGUtPm5yZWMgLSAxKQorCQkvKiBBbGwgbGluZXMgYmVmb3JlIHRoZSBsYXN0ICptdXN0KiBlbmQgaW4gTEYgKi8KKwkJcmV0dXJuIChzaXplID0gZmlsZS0+cmVjc1tpXS0+c2l6ZSkgPiAxICYmCisJCQlmaWxlLT5yZWNzW2ldLT5wdHJbc2l6ZSAtIDJdID09ICdccic7CisJaWYgKCFmaWxlLT5ucmVjKQorCQkvKiBDYW5ub3QgZGV0ZXJtaW5lIGVvbCBzdHlsZSBmcm9tIGVtcHR5IGZpbGUgKi8KKwkJcmV0dXJuIC0xOworCWlmICgoc2l6ZSA9IGZpbGUtPnJlY3NbaV0tPnNpemUpICYmCisJCQlmaWxlLT5yZWNzW2ldLT5wdHJbc2l6ZSAtIDFdID09ICdcbicpCisJCS8qIExhc3QgbGluZTsgZW5kcyBpbiBMRjsgSXMgaXQgQ1IvTEY/ICovCisJCXJldHVybiBzaXplID4gMSAmJgorCQkJZmlsZS0+cmVjc1tpXS0+cHRyW3NpemUgLSAyXSA9PSAnXHInOworCWlmICghaSkKKwkJLyogVGhlIG9ubHkgbGluZSBoYXMgbm8gZW9sICovCisJCXJldHVybiAtMTsKKwkvKiBEZXRlcm1pbmUgZW9sIGZyb20gc2Vjb25kLXRvLWxhc3QgbGluZSAqLworCXJldHVybiAoc2l6ZSA9IGZpbGUtPnJlY3NbaSAtIDFdLT5zaXplKSA+IDEgJiYKKwkJZmlsZS0+cmVjc1tpIC0gMV0tPnB0cltzaXplIC0gMl0gPT0gJ1xyJzsKK30KKworc3RhdGljIGludCBpc19jcl9uZWVkZWQoeGRmZW52X3QgKnhlMSwgeGRmZW52X3QgKnhlMiwgeGRtZXJnZV90ICptKQoreworCWludCBuZWVkc19jcjsKKworCS8qIE1hdGNoIHBvc3QtaW1hZ2VzJyBwcmVjZWRpbmcsIG9yIGZpcnN0LCBsaW5lcycgZW5kLW9mLWxpbmUgc3R5bGUgKi8KKwluZWVkc19jciA9IGlzX2VvbF9jcmxmKCZ4ZTEtPnhkZjIsIG0tPmkxID8gbS0+aTEgLSAxIDogMCk7CisJaWYgKG5lZWRzX2NyKQorCQluZWVkc19jciA9IGlzX2VvbF9jcmxmKCZ4ZTItPnhkZjIsIG0tPmkyID8gbS0+aTIgLSAxIDogMCk7CisJLyogTG9vayBhdCBwcmUtaW1hZ2UncyBmaXJzdCBsaW5lLCB1bmxlc3Mgd2UgYWxyZWFkeSBzZXR0bGVkIG9uIExGICovCisJaWYgKG5lZWRzX2NyKQorCQluZWVkc19jciA9IGlzX2VvbF9jcmxmKCZ4ZTEtPnhkZjEsIDApOworCS8qIElmIHN0aWxsIHVuZGVjaWRlZCwgdXNlIExGLW9ubHkgKi8KKwlyZXR1cm4gbmVlZHNfY3IgPCAwID8gMCA6IG5lZWRzX2NyOworfQorCitzdGF0aWMgaW50IGZpbGxfY29uZmxpY3RfaHVuayh4ZGZlbnZfdCAqeGUxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCSAgICAgIHhkZmVudl90ICp4ZTIsIGNvbnN0IGNoYXIgKm5hbWUyLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZTMsCisJCQkgICAgICBpbnQgc2l6ZSwgaW50IGksIGludCBzdHlsZSwKKwkJCSAgICAgIHhkbWVyZ2VfdCAqbSwgY2hhciAqZGVzdCwgaW50IG1hcmtlcl9zaXplKQoreworCWludCBtYXJrZXIxX3NpemUgPSAobmFtZTEgPyBzdHJsZW4obmFtZTEpICsgMSA6IDApOworCWludCBtYXJrZXIyX3NpemUgPSAobmFtZTIgPyBzdHJsZW4obmFtZTIpICsgMSA6IDApOworCWludCBtYXJrZXIzX3NpemUgPSAobmFtZTMgPyBzdHJsZW4obmFtZTMpICsgMSA6IDApOworCWludCBuZWVkc19jciA9IGlzX2NyX25lZWRlZCh4ZTEsIHhlMiwgbSk7CisKKwlpZiAobWFya2VyX3NpemUgPD0gMCkKKwkJbWFya2VyX3NpemUgPSBERUZBVUxUX0NPTkZMSUNUX01BUktFUl9TSVpFOworCisJLyogQmVmb3JlIGNvbmZsaWN0aW5nIHBhcnQgKi8KKwlzaXplICs9IHhkbF9yZWNzX2NvcHkoeGUxLCBpLCBtLT5pMSAtIGksIDAsIDAsCisJCQkgICAgICBkZXN0ID8gZGVzdCArIHNpemUgOiBOVUxMKTsKKworCWlmICghZGVzdCkgeworCQlzaXplICs9IG1hcmtlcl9zaXplICsgMSArIG5lZWRzX2NyICsgbWFya2VyMV9zaXplOworCX0gZWxzZSB7CisJCW1lbXNldChkZXN0ICsgc2l6ZSwgJzwnLCBtYXJrZXJfc2l6ZSk7CisJCXNpemUgKz0gbWFya2VyX3NpemU7CisJCWlmIChtYXJrZXIxX3NpemUpIHsKKwkJCWRlc3Rbc2l6ZV0gPSAnICc7CisJCQltZW1jcHkoZGVzdCArIHNpemUgKyAxLCBuYW1lMSwgbWFya2VyMV9zaXplIC0gMSk7CisJCQlzaXplICs9IG1hcmtlcjFfc2l6ZTsKKwkJfQorCQlpZiAobmVlZHNfY3IpCisJCQlkZXN0W3NpemUrK10gPSAnXHInOworCQlkZXN0W3NpemUrK10gPSAnXG4nOworCX0KKworCS8qIFBvc3RpbWFnZSBmcm9tIHNpZGUgIzEgKi8KKwlzaXplICs9IHhkbF9yZWNzX2NvcHkoeGUxLCBtLT5pMSwgbS0+Y2hnMSwgbmVlZHNfY3IsIDEsCisJCQkgICAgICBkZXN0ID8gZGVzdCArIHNpemUgOiBOVUxMKTsKKworCWlmIChzdHlsZSA9PSBYRExfTUVSR0VfRElGRjMpIHsKKwkJLyogU2hhcmVkIHByZWltYWdlICovCisJCWlmICghZGVzdCkgeworCQkJc2l6ZSArPSBtYXJrZXJfc2l6ZSArIDEgKyBuZWVkc19jciArIG1hcmtlcjNfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCW1lbXNldChkZXN0ICsgc2l6ZSwgJ3wnLCBtYXJrZXJfc2l6ZSk7CisJCQlzaXplICs9IG1hcmtlcl9zaXplOworCQkJaWYgKG1hcmtlcjNfc2l6ZSkgeworCQkJCWRlc3Rbc2l6ZV0gPSAnICc7CisJCQkJbWVtY3B5KGRlc3QgKyBzaXplICsgMSwgbmFtZTMsIG1hcmtlcjNfc2l6ZSAtIDEpOworCQkJCXNpemUgKz0gbWFya2VyM19zaXplOworCQkJfQorCQkJaWYgKG5lZWRzX2NyKQorCQkJCWRlc3Rbc2l6ZSsrXSA9ICdccic7CisJCQlkZXN0W3NpemUrK10gPSAnXG4nOworCQl9CisJCXNpemUgKz0geGRsX29yaWdfY29weSh4ZTEsIG0tPmkwLCBtLT5jaGcwLCBuZWVkc19jciwgMSwKKwkJCQkgICAgICBkZXN0ID8gZGVzdCArIHNpemUgOiBOVUxMKTsKKwl9CisKKwlpZiAoIWRlc3QpIHsKKwkJc2l6ZSArPSBtYXJrZXJfc2l6ZSArIDEgKyBuZWVkc19jcjsKKwl9IGVsc2UgeworCQltZW1zZXQoZGVzdCArIHNpemUsICc9JywgbWFya2VyX3NpemUpOworCQlzaXplICs9IG1hcmtlcl9zaXplOworCQlpZiAobmVlZHNfY3IpCisJCQlkZXN0W3NpemUrK10gPSAnXHInOworCQlkZXN0W3NpemUrK10gPSAnXG4nOworCX0KKworCS8qIFBvc3RpbWFnZSBmcm9tIHNpZGUgIzIgKi8KKwlzaXplICs9IHhkbF9yZWNzX2NvcHkoeGUyLCBtLT5pMiwgbS0+Y2hnMiwgbmVlZHNfY3IsIDEsCisJCQkgICAgICBkZXN0ID8gZGVzdCArIHNpemUgOiBOVUxMKTsKKwlpZiAoIWRlc3QpIHsKKwkJc2l6ZSArPSBtYXJrZXJfc2l6ZSArIDEgKyBuZWVkc19jciArIG1hcmtlcjJfc2l6ZTsKKwl9IGVsc2UgeworCQltZW1zZXQoZGVzdCArIHNpemUsICc+JywgbWFya2VyX3NpemUpOworCQlzaXplICs9IG1hcmtlcl9zaXplOworCQlpZiAobWFya2VyMl9zaXplKSB7CisJCQlkZXN0W3NpemVdID0gJyAnOworCQkJbWVtY3B5KGRlc3QgKyBzaXplICsgMSwgbmFtZTIsIG1hcmtlcjJfc2l6ZSAtIDEpOworCQkJc2l6ZSArPSBtYXJrZXIyX3NpemU7CisJCX0KKwkJaWYgKG5lZWRzX2NyKQorCQkJZGVzdFtzaXplKytdID0gJ1xyJzsKKwkJZGVzdFtzaXplKytdID0gJ1xuJzsKKwl9CisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBpbnQgeGRsX2ZpbGxfbWVyZ2VfYnVmZmVyKHhkZmVudl90ICp4ZTEsIGNvbnN0IGNoYXIgKm5hbWUxLAorCQkJCSB4ZGZlbnZfdCAqeGUyLCBjb25zdCBjaGFyICpuYW1lMiwKKwkJCQkgY29uc3QgY2hhciAqYW5jZXN0b3JfbmFtZSwKKwkJCQkgaW50IGZhdm9yLAorCQkJCSB4ZG1lcmdlX3QgKm0sIGNoYXIgKmRlc3QsIGludCBzdHlsZSwKKwkJCQkgaW50IG1hcmtlcl9zaXplKQoreworCWludCBzaXplLCBpOworCisJZm9yIChzaXplID0gaSA9IDA7IG07IG0gPSBtLT5uZXh0KSB7CisJCWlmIChmYXZvciAmJiAhbS0+bW9kZSkKKwkJCW0tPm1vZGUgPSBmYXZvcjsKKworCQlpZiAobS0+bW9kZSA9PSAwKQorCQkJc2l6ZSA9IGZpbGxfY29uZmxpY3RfaHVuayh4ZTEsIG5hbWUxLCB4ZTIsIG5hbWUyLAorCQkJCQkJICBhbmNlc3Rvcl9uYW1lLAorCQkJCQkJICBzaXplLCBpLCBzdHlsZSwgbSwgZGVzdCwKKwkJCQkJCSAgbWFya2VyX3NpemUpOworCQllbHNlIGlmIChtLT5tb2RlICYgMykgeworCQkJLyogQmVmb3JlIGNvbmZsaWN0aW5nIHBhcnQgKi8KKwkJCXNpemUgKz0geGRsX3JlY3NfY29weSh4ZTEsIGksIG0tPmkxIC0gaSwgMCwgMCwKKwkJCQkJICAgICAgZGVzdCA/IGRlc3QgKyBzaXplIDogTlVMTCk7CisJCQkvKiBQb3N0aW1hZ2UgZnJvbSBzaWRlICMxICovCisJCQlpZiAobS0+bW9kZSAmIDEpIHsKKwkJCQlpbnQgbmVlZHNfY3IgPSBpc19jcl9uZWVkZWQoeGUxLCB4ZTIsIG0pOworCisJCQkJc2l6ZSArPSB4ZGxfcmVjc19jb3B5KHhlMSwgbS0+aTEsIG0tPmNoZzEsIG5lZWRzX2NyLCAobS0+bW9kZSAmIDIpLAorCQkJCQkJICAgICAgZGVzdCA/IGRlc3QgKyBzaXplIDogTlVMTCk7CisJCQl9CisJCQkvKiBQb3N0aW1hZ2UgZnJvbSBzaWRlICMyICovCisJCQlpZiAobS0+bW9kZSAmIDIpCisJCQkJc2l6ZSArPSB4ZGxfcmVjc19jb3B5KHhlMiwgbS0+aTIsIG0tPmNoZzIsIDAsIDAsCisJCQkJCQkgICAgICBkZXN0ID8gZGVzdCArIHNpemUgOiBOVUxMKTsKKwkJfSBlbHNlCisJCQljb250aW51ZTsKKwkJaSA9IG0tPmkxICsgbS0+Y2hnMTsKKwl9CisJc2l6ZSArPSB4ZGxfcmVjc19jb3B5KHhlMSwgaSwgeGUxLT54ZGYyLm5yZWMgLSBpLCAwLCAwLAorCQkJICAgICAgZGVzdCA/IGRlc3QgKyBzaXplIDogTlVMTCk7CisJcmV0dXJuIHNpemU7Cit9CisKKy8qCisgKiBTb21ldGltZXMsIGNoYW5nZXMgYXJlIG5vdCBxdWl0ZSBpZGVudGljYWwsIGJ1dCBkaWZmZXIgaW4gb25seSBhIGZldworICogbGluZXMuIFRyeSBoYXJkIHRvIHNob3cgb25seSB0aGVzZSBmZXcgbGluZXMgYXMgY29uZmxpY3RpbmcuCisgKi8KK3N0YXRpYyBpbnQgeGRsX3JlZmluZV9jb25mbGljdHMoeGRmZW52X3QgKnhlMSwgeGRmZW52X3QgKnhlMiwgeGRtZXJnZV90ICptLAorCQl4cHBhcmFtX3QgY29uc3QgKnhwcCkKK3sKKwlmb3IgKDsgbTsgbSA9IG0tPm5leHQpIHsKKwkJbW1maWxlX3QgdDEsIHQyOworCQl4ZGZlbnZfdCB4ZTsKKwkJeGRjaGFuZ2VfdCAqeHNjciwgKng7CisJCWludCBpMSA9IG0tPmkxLCBpMiA9IG0tPmkyOworCisJCS8qIGxldCdzIGhhbmRsZSBqdXN0IHRoZSBjb25mbGljdHMgKi8KKwkJaWYgKG0tPm1vZGUpCisJCQljb250aW51ZTsKKworCQkvKiBubyBzZW5zZSByZWZpbmluZyBhIGNvbmZsaWN0IHdoZW4gb25lIHNpZGUgaXMgZW1wdHkgKi8KKwkJaWYgKG0tPmNoZzEgPT0gMCB8fCBtLT5jaGcyID09IDApCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBUaGlzIHByb2JhYmx5IGRvZXMgbm90IHdvcmsgb3V0c2lkZSBnaXQsIHNpbmNlCisJCSAqIHdlIGhhdmUgYSB2ZXJ5IHNpbXBsZSBtbWZpbGUgc3RydWN0dXJlLgorCQkgKi8KKwkJdDEucHRyID0gKGNoYXIgKil4ZTEtPnhkZjIucmVjc1ttLT5pMV0tPnB0cjsKKwkJdDEuc2l6ZSA9IHhlMS0+eGRmMi5yZWNzW20tPmkxICsgbS0+Y2hnMSAtIDFdLT5wdHIKKwkJCSsgeGUxLT54ZGYyLnJlY3NbbS0+aTEgKyBtLT5jaGcxIC0gMV0tPnNpemUgLSB0MS5wdHI7CisJCXQyLnB0ciA9IChjaGFyICopeGUyLT54ZGYyLnJlY3NbbS0+aTJdLT5wdHI7CisJCXQyLnNpemUgPSB4ZTItPnhkZjIucmVjc1ttLT5pMiArIG0tPmNoZzIgLSAxXS0+cHRyCisJCQkrIHhlMi0+eGRmMi5yZWNzW20tPmkyICsgbS0+Y2hnMiAtIDFdLT5zaXplIC0gdDIucHRyOworCQlpZiAoeGRsX2RvX2RpZmYoJnQxLCAmdDIsIHhwcCwgJnhlKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmICh4ZGxfY2hhbmdlX2NvbXBhY3QoJnhlLnhkZjEsICZ4ZS54ZGYyLCB4cHAtPmZsYWdzKSA8IDAgfHwKKwkJICAgIHhkbF9jaGFuZ2VfY29tcGFjdCgmeGUueGRmMiwgJnhlLnhkZjEsIHhwcC0+ZmxhZ3MpIDwgMCB8fAorCQkgICAgeGRsX2J1aWxkX3NjcmlwdCgmeGUsICZ4c2NyKSA8IDApIHsKKwkJCXhkbF9mcmVlX2VudigmeGUpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICgheHNjcikgeworCQkJLyogSWYgdGhpcyBoYXBwZW5zLCB0aGUgY2hhbmdlcyBhcmUgaWRlbnRpY2FsLiAqLworCQkJeGRsX2ZyZWVfZW52KCZ4ZSk7CisJCQltLT5tb2RlID0gNDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXggPSB4c2NyOworCQltLT5pMSA9IHhzY3ItPmkxICsgaTE7CisJCW0tPmNoZzEgPSB4c2NyLT5jaGcxOworCQltLT5pMiA9IHhzY3ItPmkyICsgaTI7CisJCW0tPmNoZzIgPSB4c2NyLT5jaGcyOworCQl3aGlsZSAoeHNjci0+bmV4dCkgeworCQkJeGRtZXJnZV90ICptMiA9IHhkbF9tYWxsb2Moc2l6ZW9mKHhkbWVyZ2VfdCkpOworCQkJaWYgKCFtMikgeworCQkJCXhkbF9mcmVlX2VudigmeGUpOworCQkJCXhkbF9mcmVlX3NjcmlwdCh4KTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQl4c2NyID0geHNjci0+bmV4dDsKKwkJCW0yLT5uZXh0ID0gbS0+bmV4dDsKKwkJCW0tPm5leHQgPSBtMjsKKwkJCW0gPSBtMjsKKwkJCW0tPm1vZGUgPSAwOworCQkJbS0+aTEgPSB4c2NyLT5pMSArIGkxOworCQkJbS0+Y2hnMSA9IHhzY3ItPmNoZzE7CisJCQltLT5pMiA9IHhzY3ItPmkyICsgaTI7CisJCQltLT5jaGcyID0geHNjci0+Y2hnMjsKKwkJfQorCQl4ZGxfZnJlZV9lbnYoJnhlKTsKKwkJeGRsX2ZyZWVfc2NyaXB0KHgpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaW5lX2NvbnRhaW5zX2FsbnVtKGNvbnN0IGNoYXIgKnB0ciwgbG9uZyBzaXplKQoreworCXdoaWxlIChzaXplLS0pCisJCWlmIChpc2FsbnVtKCh1bnNpZ25lZCBjaGFyKSoocHRyKyspKSkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpbmVzX2NvbnRhaW5fYWxudW0oeGRmZW52X3QgKnhlLCBpbnQgaSwgaW50IGNoZykKK3sKKwlmb3IgKDsgY2hnOyBjaGctLSwgaSsrKQorCQlpZiAobGluZV9jb250YWluc19hbG51bSh4ZS0+eGRmMi5yZWNzW2ldLT5wdHIsCisJCQkJeGUtPnhkZjIucmVjc1tpXS0+c2l6ZSkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gbWVyZ2VzIG0gYW5kIG0tPm5leHQsIG1hcmtpbmcgZXZlcnl0aGluZyBiZXR3ZWVuIHRob3NlIGh1bmtzCisgKiBhcyBjb25mbGljdGluZywgdG9vLgorICovCitzdGF0aWMgdm9pZCB4ZGxfbWVyZ2VfdHdvX2NvbmZsaWN0cyh4ZG1lcmdlX3QgKm0pCit7CisJeGRtZXJnZV90ICpuZXh0X20gPSBtLT5uZXh0OworCW0tPmNoZzEgPSBuZXh0X20tPmkxICsgbmV4dF9tLT5jaGcxIC0gbS0+aTE7CisJbS0+Y2hnMiA9IG5leHRfbS0+aTIgKyBuZXh0X20tPmNoZzIgLSBtLT5pMjsKKwltLT5uZXh0ID0gbmV4dF9tLT5uZXh0OworCWZyZWUobmV4dF9tKTsKK30KKworLyoKKyAqIElmIHRoZXJlIGFyZSBsZXNzIHRoYW4gMyBub24tY29uZmxpY3RpbmcgbGluZXMgYmV0d2VlbiBjb25mbGljdHMsCisgKiBpdCBhcHBlYXJzIHNpbXBsZXIgLS0gYmVjYXVzZSBpdCB0YWtlcyB1cCBsZXNzIChvciBhcyBtYW55KSBsaW5lcyAtLQorICogaWYgdGhlIGxpbmVzIGFyZSBtb3ZlZCBpbnRvIHRoZSBjb25mbGljdHMuCisgKi8KK3N0YXRpYyBpbnQgeGRsX3NpbXBsaWZ5X25vbl9jb25mbGljdHMoeGRmZW52X3QgKnhlMSwgeGRtZXJnZV90ICptLAorCQkJCSAgICAgIGludCBzaW1wbGlmeV9pZl9ub19hbG51bSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCWlmICghbSkKKwkJcmV0dXJuIHJlc3VsdDsKKwlmb3IgKDs7KSB7CisJCXhkbWVyZ2VfdCAqbmV4dF9tID0gbS0+bmV4dDsKKwkJaW50IGJlZ2luLCBlbmQ7CisKKwkJaWYgKCFuZXh0X20pCisJCQlyZXR1cm4gcmVzdWx0OworCisJCWJlZ2luID0gbS0+aTEgKyBtLT5jaGcxOworCQllbmQgPSBuZXh0X20tPmkxOworCisJCWlmIChtLT5tb2RlICE9IDAgfHwgbmV4dF9tLT5tb2RlICE9IDAgfHwKKwkJICAgIChlbmQgLSBiZWdpbiA+IDMgJiYKKwkJICAgICAoIXNpbXBsaWZ5X2lmX25vX2FsbnVtIHx8CisJCSAgICAgIGxpbmVzX2NvbnRhaW5fYWxudW0oeGUxLCBiZWdpbiwgZW5kIC0gYmVnaW4pKSkpIHsKKwkJCW0gPSBuZXh0X207CisJCX0gZWxzZSB7CisJCQlyZXN1bHQrKzsKKwkJCXhkbF9tZXJnZV90d29fY29uZmxpY3RzKG0pOworCQl9CisJfQorfQorCisvKgorICogbGV2ZWwgPT0gMDogbWFyayBhbGwgb3ZlcmxhcHBpbmcgY2hhbmdlcyBhcyBjb25mbGljdAorICogbGV2ZWwgPT0gMTogbWFyayBvdmVybGFwcGluZyBjaGFuZ2VzIGFzIGNvbmZsaWN0IG9ubHkgaWYgbm90IGlkZW50aWNhbAorICogbGV2ZWwgPT0gMjogYW5hbHl6ZSBub24taWRlbnRpY2FsIGNoYW5nZXMgZm9yIG1pbmltYWwgY29uZmxpY3Qgc2V0CisgKiBsZXZlbCA9PSAzOiBhbmFseXplIG5vbi1pZGVudGljYWwgY2hhbmdlcyBmb3IgbWluaW1hbCBjb25mbGljdCBzZXQsIGJ1dAorICogICAgICAgICAgICAgdHJlYXQgaHVua3Mgbm90IGNvbnRhaW5pbmcgYW55IGxldHRlciBvciBudW1iZXIgYXMgY29uZmxpY3RpbmcKKyAqCisgKiByZXR1cm5zIDwgMCBvbiBlcnJvciwgPT0gMCBmb3Igbm8gY29uZmxpY3RzLCBlbHNlIG51bWJlciBvZiBjb25mbGljdHMKKyAqLworc3RhdGljIGludCB4ZGxfZG9fbWVyZ2UoeGRmZW52X3QgKnhlMSwgeGRjaGFuZ2VfdCAqeHNjcjEsCisJCXhkZmVudl90ICp4ZTIsIHhkY2hhbmdlX3QgKnhzY3IyLAorCQl4bXBhcmFtX3QgY29uc3QgKnhtcCwgbW1idWZmZXJfdCAqcmVzdWx0KQoreworCXhkbWVyZ2VfdCAqY2hhbmdlcywgKmM7CisJeHBwYXJhbV90IGNvbnN0ICp4cHAgPSAmeG1wLT54cHA7CisJY29uc3QgY2hhciAqY29uc3QgYW5jZXN0b3JfbmFtZSA9IHhtcC0+YW5jZXN0b3I7CisJY29uc3QgY2hhciAqY29uc3QgbmFtZTEgPSB4bXAtPmZpbGUxOworCWNvbnN0IGNoYXIgKmNvbnN0IG5hbWUyID0geG1wLT5maWxlMjsKKwlpbnQgaTAsIGkxLCBpMiwgY2hnMCwgY2hnMSwgY2hnMjsKKwlpbnQgbGV2ZWwgPSB4bXAtPmxldmVsOworCWludCBzdHlsZSA9IHhtcC0+c3R5bGU7CisJaW50IGZhdm9yID0geG1wLT5mYXZvcjsKKworCWlmIChzdHlsZSA9PSBYRExfTUVSR0VfRElGRjMpIHsKKwkJLyoKKwkJICogImRpZmYzIC1tIiBvdXRwdXQgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3IgYW55dGhpbmcKKwkJICogbW9yZSBhZ2dyZXNzaXZlIHRoYW4gWERMX01FUkdFX0VBR0VSLgorCQkgKi8KKwkJaWYgKFhETF9NRVJHRV9FQUdFUiA8IGxldmVsKQorCQkJbGV2ZWwgPSBYRExfTUVSR0VfRUFHRVI7CisJfQorCisJYyA9IGNoYW5nZXMgPSBOVUxMOworCisJd2hpbGUgKHhzY3IxICYmIHhzY3IyKSB7CisJCWlmICghY2hhbmdlcykKKwkJCWNoYW5nZXMgPSBjOworCQlpZiAoeHNjcjEtPmkxICsgeHNjcjEtPmNoZzEgPCB4c2NyMi0+aTEpIHsKKwkJCWkwID0geHNjcjEtPmkxOworCQkJaTEgPSB4c2NyMS0+aTI7CisJCQlpMiA9IHhzY3IyLT5pMiAtIHhzY3IyLT5pMSArIHhzY3IxLT5pMTsKKwkJCWNoZzAgPSB4c2NyMS0+Y2hnMTsKKwkJCWNoZzEgPSB4c2NyMS0+Y2hnMjsKKwkJCWNoZzIgPSB4c2NyMS0+Y2hnMTsKKwkJCWlmICh4ZGxfYXBwZW5kX21lcmdlKCZjLCAxLAorCQkJCQkgICAgIGkwLCBjaGcwLCBpMSwgY2hnMSwgaTIsIGNoZzIpKSB7CisJCQkJeGRsX2NsZWFudXBfbWVyZ2UoY2hhbmdlcyk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJeHNjcjEgPSB4c2NyMS0+bmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh4c2NyMi0+aTEgKyB4c2NyMi0+Y2hnMSA8IHhzY3IxLT5pMSkgeworCQkJaTAgPSB4c2NyMi0+aTE7CisJCQlpMSA9IHhzY3IxLT5pMiAtIHhzY3IxLT5pMSArIHhzY3IyLT5pMTsKKwkJCWkyID0geHNjcjItPmkyOworCQkJY2hnMCA9IHhzY3IyLT5jaGcxOworCQkJY2hnMSA9IHhzY3IyLT5jaGcxOworCQkJY2hnMiA9IHhzY3IyLT5jaGcyOworCQkJaWYgKHhkbF9hcHBlbmRfbWVyZ2UoJmMsIDIsCisJCQkJCSAgICAgaTAsIGNoZzAsIGkxLCBjaGcxLCBpMiwgY2hnMikpIHsKKwkJCQl4ZGxfY2xlYW51cF9tZXJnZShjaGFuZ2VzKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQl4c2NyMiA9IHhzY3IyLT5uZXh0OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGxldmVsID09IFhETF9NRVJHRV9NSU5JTUFMIHx8IHhzY3IxLT5pMSAhPSB4c2NyMi0+aTEgfHwKKwkJCQl4c2NyMS0+Y2hnMSAhPSB4c2NyMi0+Y2hnMSB8fAorCQkJCXhzY3IxLT5jaGcyICE9IHhzY3IyLT5jaGcyIHx8CisJCQkJeGRsX21lcmdlX2NtcF9saW5lcyh4ZTEsIHhzY3IxLT5pMiwKKwkJCQkJeGUyLCB4c2NyMi0+aTIsCisJCQkJCXhzY3IxLT5jaGcyLCB4cHAtPmZsYWdzKSkgeworCQkJLyogY29uZmxpY3QgKi8KKwkJCWludCBvZmYgPSB4c2NyMS0+aTEgLSB4c2NyMi0+aTE7CisJCQlpbnQgZmZvID0gb2ZmICsgeHNjcjEtPmNoZzEgLSB4c2NyMi0+Y2hnMTsKKworCQkJaTAgPSB4c2NyMS0+aTE7CisJCQlpMSA9IHhzY3IxLT5pMjsKKwkJCWkyID0geHNjcjItPmkyOworCQkJaWYgKG9mZiA+IDApIHsKKwkJCQlpMCAtPSBvZmY7CisJCQkJaTEgLT0gb2ZmOworCQkJfQorCQkJZWxzZQorCQkJCWkyICs9IG9mZjsKKwkJCWNoZzAgPSB4c2NyMS0+aTEgKyB4c2NyMS0+Y2hnMSAtIGkwOworCQkJY2hnMSA9IHhzY3IxLT5pMiArIHhzY3IxLT5jaGcyIC0gaTE7CisJCQljaGcyID0geHNjcjItPmkyICsgeHNjcjItPmNoZzIgLSBpMjsKKwkJCWlmIChmZm8gPCAwKSB7CisJCQkJY2hnMCAtPSBmZm87CisJCQkJY2hnMSAtPSBmZm87CisJCQl9IGVsc2UKKwkJCQljaGcyICs9IGZmbzsKKwkJCWlmICh4ZGxfYXBwZW5kX21lcmdlKCZjLCAwLAorCQkJCQkgICAgIGkwLCBjaGcwLCBpMSwgY2hnMSwgaTIsIGNoZzIpKSB7CisJCQkJeGRsX2NsZWFudXBfbWVyZ2UoY2hhbmdlcyk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisKKwkJaTEgPSB4c2NyMS0+aTEgKyB4c2NyMS0+Y2hnMTsKKwkJaTIgPSB4c2NyMi0+aTEgKyB4c2NyMi0+Y2hnMTsKKworCQlpZiAoaTEgPj0gaTIpCisJCQl4c2NyMiA9IHhzY3IyLT5uZXh0OworCQlpZiAoaTIgPj0gaTEpCisJCQl4c2NyMSA9IHhzY3IxLT5uZXh0OworCX0KKwl3aGlsZSAoeHNjcjEpIHsKKwkJaWYgKCFjaGFuZ2VzKQorCQkJY2hhbmdlcyA9IGM7CisJCWkwID0geHNjcjEtPmkxOworCQlpMSA9IHhzY3IxLT5pMjsKKwkJaTIgPSB4c2NyMS0+aTEgKyB4ZTItPnhkZjIubnJlYyAtIHhlMi0+eGRmMS5ucmVjOworCQljaGcwID0geHNjcjEtPmNoZzE7CisJCWNoZzEgPSB4c2NyMS0+Y2hnMjsKKwkJY2hnMiA9IHhzY3IxLT5jaGcxOworCQlpZiAoeGRsX2FwcGVuZF9tZXJnZSgmYywgMSwKKwkJCQkgICAgIGkwLCBjaGcwLCBpMSwgY2hnMSwgaTIsIGNoZzIpKSB7CisJCQl4ZGxfY2xlYW51cF9tZXJnZShjaGFuZ2VzKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQl4c2NyMSA9IHhzY3IxLT5uZXh0OworCX0KKwl3aGlsZSAoeHNjcjIpIHsKKwkJaWYgKCFjaGFuZ2VzKQorCQkJY2hhbmdlcyA9IGM7CisJCWkwID0geHNjcjItPmkxOworCQlpMSA9IHhzY3IyLT5pMSArIHhlMS0+eGRmMi5ucmVjIC0geGUxLT54ZGYxLm5yZWM7CisJCWkyID0geHNjcjItPmkyOworCQljaGcwID0geHNjcjItPmNoZzE7CisJCWNoZzEgPSB4c2NyMi0+Y2hnMTsKKwkJY2hnMiA9IHhzY3IyLT5jaGcyOworCQlpZiAoeGRsX2FwcGVuZF9tZXJnZSgmYywgMiwKKwkJCQkgICAgIGkwLCBjaGcwLCBpMSwgY2hnMSwgaTIsIGNoZzIpKSB7CisJCQl4ZGxfY2xlYW51cF9tZXJnZShjaGFuZ2VzKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQl4c2NyMiA9IHhzY3IyLT5uZXh0OworCX0KKwlpZiAoIWNoYW5nZXMpCisJCWNoYW5nZXMgPSBjOworCS8qIHJlZmluZSBjb25mbGljdHMgKi8KKwlpZiAoWERMX01FUkdFX1pFQUxPVVMgPD0gbGV2ZWwgJiYKKwkgICAgKHhkbF9yZWZpbmVfY29uZmxpY3RzKHhlMSwgeGUyLCBjaGFuZ2VzLCB4cHApIDwgMCB8fAorCSAgICAgeGRsX3NpbXBsaWZ5X25vbl9jb25mbGljdHMoeGUxLCBjaGFuZ2VzLAorCQkJCQlYRExfTUVSR0VfWkVBTE9VUyA8IGxldmVsKSA8IDApKSB7CisJCXhkbF9jbGVhbnVwX21lcmdlKGNoYW5nZXMpOworCQlyZXR1cm4gLTE7CisJfQorCS8qIG91dHB1dCAqLworCWlmIChyZXN1bHQpIHsKKwkJaW50IG1hcmtlcl9zaXplID0geG1wLT5tYXJrZXJfc2l6ZTsKKwkJaW50IHNpemUgPSB4ZGxfZmlsbF9tZXJnZV9idWZmZXIoeGUxLCBuYW1lMSwgeGUyLCBuYW1lMiwKKwkJCQkJCSBhbmNlc3Rvcl9uYW1lLAorCQkJCQkJIGZhdm9yLCBjaGFuZ2VzLCBOVUxMLCBzdHlsZSwKKwkJCQkJCSBtYXJrZXJfc2l6ZSk7CisJCXJlc3VsdC0+cHRyID0geGRsX21hbGxvYyhzaXplKTsKKwkJaWYgKCFyZXN1bHQtPnB0cikgeworCQkJeGRsX2NsZWFudXBfbWVyZ2UoY2hhbmdlcyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcmVzdWx0LT5zaXplID0gc2l6ZTsKKwkJeGRsX2ZpbGxfbWVyZ2VfYnVmZmVyKHhlMSwgbmFtZTEsIHhlMiwgbmFtZTIsCisJCQkJICAgICAgYW5jZXN0b3JfbmFtZSwgZmF2b3IsIGNoYW5nZXMsCisJCQkJICAgICAgcmVzdWx0LT5wdHIsIHN0eWxlLCBtYXJrZXJfc2l6ZSk7CisJfQorCXJldHVybiB4ZGxfY2xlYW51cF9tZXJnZShjaGFuZ2VzKTsKK30KKworaW50IHhkbF9tZXJnZShtbWZpbGVfdCAqb3JpZywgbW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwKKwkJeG1wYXJhbV90IGNvbnN0ICp4bXAsIG1tYnVmZmVyX3QgKnJlc3VsdCkKK3sKKwl4ZGNoYW5nZV90ICp4c2NyMSwgKnhzY3IyOworCXhkZmVudl90IHhlMSwgeGUyOworCWludCBzdGF0dXM7CisJeHBwYXJhbV90IGNvbnN0ICp4cHAgPSAmeG1wLT54cHA7CisKKwlyZXN1bHQtPnB0ciA9IE5VTEw7CisJcmVzdWx0LT5zaXplID0gMDsKKworCWlmICh4ZGxfZG9fZGlmZihvcmlnLCBtZjEsIHhwcCwgJnhlMSkgPCAwKSB7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHhkbF9kb19kaWZmKG9yaWcsIG1mMiwgeHBwLCAmeGUyKSA8IDApIHsKKwkJeGRsX2ZyZWVfZW52KCZ4ZTEpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICh4ZGxfY2hhbmdlX2NvbXBhY3QoJnhlMS54ZGYxLCAmeGUxLnhkZjIsIHhwcC0+ZmxhZ3MpIDwgMCB8fAorCSAgICB4ZGxfY2hhbmdlX2NvbXBhY3QoJnhlMS54ZGYyLCAmeGUxLnhkZjEsIHhwcC0+ZmxhZ3MpIDwgMCB8fAorCSAgICB4ZGxfYnVpbGRfc2NyaXB0KCZ4ZTEsICZ4c2NyMSkgPCAwKSB7CisJCXhkbF9mcmVlX2VudigmeGUxKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoeGRsX2NoYW5nZV9jb21wYWN0KCZ4ZTIueGRmMSwgJnhlMi54ZGYyLCB4cHAtPmZsYWdzKSA8IDAgfHwKKwkgICAgeGRsX2NoYW5nZV9jb21wYWN0KCZ4ZTIueGRmMiwgJnhlMi54ZGYxLCB4cHAtPmZsYWdzKSA8IDAgfHwKKwkgICAgeGRsX2J1aWxkX3NjcmlwdCgmeGUyLCAmeHNjcjIpIDwgMCkgeworCQl4ZGxfZnJlZV9zY3JpcHQoeHNjcjEpOworCQl4ZGxfZnJlZV9lbnYoJnhlMSk7CisJCXhkbF9mcmVlX2VudigmeGUyKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdGF0dXMgPSAwOworCWlmICgheHNjcjEpIHsKKwkJcmVzdWx0LT5wdHIgPSB4ZGxfbWFsbG9jKG1mMi0+c2l6ZSk7CisJCW1lbWNweShyZXN1bHQtPnB0ciwgbWYyLT5wdHIsIG1mMi0+c2l6ZSk7CisJCXJlc3VsdC0+c2l6ZSA9IG1mMi0+c2l6ZTsKKwl9IGVsc2UgaWYgKCF4c2NyMikgeworCQlyZXN1bHQtPnB0ciA9IHhkbF9tYWxsb2MobWYxLT5zaXplKTsKKwkJbWVtY3B5KHJlc3VsdC0+cHRyLCBtZjEtPnB0ciwgbWYxLT5zaXplKTsKKwkJcmVzdWx0LT5zaXplID0gbWYxLT5zaXplOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IHhkbF9kb19tZXJnZSgmeGUxLCB4c2NyMSwKKwkJCQkgICAgICAmeGUyLCB4c2NyMiwKKwkJCQkgICAgICB4bXAsIHJlc3VsdCk7CisJfQorCXhkbF9mcmVlX3NjcmlwdCh4c2NyMSk7CisJeGRsX2ZyZWVfc2NyaXB0KHhzY3IyKTsKKworCXhkbF9mcmVlX2VudigmeGUxKTsKKwl4ZGxfZnJlZV9lbnYoJnhlMik7CisKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEveGRpZmYveHBhdGllbmNlLmMgYi94ZGlmZi94cGF0aWVuY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzU2MDFiCi0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveHBhdGllbmNlLmMKQEAgLTAsMCArMSwzODggQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNiBEYXZpZGUgTGliZW56aSwgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgc2VlCisgKiAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisjaW5jbHVkZSAieGluY2x1ZGUuaCIKKworLyoKKyAqIFRoZSBiYXNpYyBpZGVhIG9mIHBhdGllbmNlIGRpZmYgaXMgdG8gZmluZCBsaW5lcyB0aGF0IGFyZSB1bmlxdWUgaW4KKyAqIGJvdGggZmlsZXMuICBUaGVzZSBhcmUgaW50dWl0aXZlbHkgdGhlIG9uZXMgdGhhdCB3ZSB3YW50IHRvIHNlZSBhcworICogY29tbW9uIGxpbmVzLgorICoKKyAqIFRoZSBtYXhpbWFsIG9yZGVyZWQgc2VxdWVuY2Ugb2Ygc3VjaCBsaW5lIHBhaXJzICh3aGVyZSBvcmRlcmVkIG1lYW5zCisgKiB0aGF0IHRoZSBvcmRlciBpbiB0aGUgc2VxdWVuY2UgYWdyZWVzIHdpdGggdGhlIG9yZGVyIG9mIHRoZSBsaW5lcyBpbgorICogYm90aCBmaWxlcykgbmF0dXJhbGx5IGRlZmluZXMgYW4gaW5pdGlhbCBzZXQgb2YgY29tbW9uIGxpbmVzLgorICoKKyAqIE5vdywgdGhlIGFsZ29yaXRobSB0cmllcyB0byBleHRlbmQgdGhlIHNldCBvZiBjb21tb24gbGluZXMgYnkgZ3Jvd2luZworICogdGhlIGxpbmUgcmFuZ2VzIHdoZXJlIHRoZSBmaWxlcyBoYXZlIGlkZW50aWNhbCBsaW5lcy4KKyAqCisgKiBCZXR3ZWVuIHRob3NlIGNvbW1vbiBsaW5lcywgdGhlIHBhdGllbmNlIGRpZmYgYWxnb3JpdGhtIGlzIGFwcGxpZWQKKyAqIHJlY3Vyc2l2ZWx5LCB1bnRpbCBubyB1bmlxdWUgbGluZSBwYWlycyBjYW4gYmUgZm91bmQ7IHRoZXNlIGxpbmUgcmFuZ2VzCisgKiBhcmUgaGFuZGxlZCBieSB0aGUgd2VsbC1rbm93biBNeWVycyBhbGdvcml0aG0uCisgKi8KKworI2RlZmluZSBOT05fVU5JUVVFIFVMT05HX01BWAorCisvKgorICogVGhpcyBpcyBhIGhhc2ggbWFwcGluZyBmcm9tIGxpbmUgaGFzaCB0byBsaW5lIG51bWJlcnMgaW4gdGhlIGZpcnN0IGFuZAorICogc2Vjb25kIGZpbGUuCisgKi8KK3N0cnVjdCBoYXNobWFwIHsKKwlpbnQgbnIsIGFsbG9jOworCXN0cnVjdCBlbnRyeSB7CisJCXVuc2lnbmVkIGxvbmcgaGFzaDsKKwkJLyoKKwkJICogMCA9IHVudXNlZCBlbnRyeSwgMSA9IGZpcnN0IGxpbmUsIDIgPSBzZWNvbmQsIGV0Yy4KKwkJICogbGluZTIgaXMgTk9OX1VOSVFVRSBpZiB0aGUgbGluZSBpcyBub3QgdW5pcXVlCisJCSAqIGluIGVpdGhlciB0aGUgZmlyc3Qgb3IgdGhlIHNlY29uZCBmaWxlLgorCQkgKi8KKwkJdW5zaWduZWQgbG9uZyBsaW5lMSwgbGluZTI7CisJCS8qCisJCSAqICJuZXh0IiAmICJwcmV2aW91cyIgYXJlIHVzZWQgZm9yIHRoZSBsb25nZXN0IGNvbW1vbgorCQkgKiBzZXF1ZW5jZTsKKwkJICogaW5pdGlhbGx5LCAibmV4dCIgcmVmbGVjdHMgb25seSB0aGUgb3JkZXIgaW4gZmlsZTEuCisJCSAqLworCQlzdHJ1Y3QgZW50cnkgKm5leHQsICpwcmV2aW91czsKKworCQkvKgorCQkgKiBJZiAxLCB0aGlzIGVudHJ5IGNhbiBzZXJ2ZSBhcyBhbiBhbmNob3IuIFNlZQorCQkgKiBEb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisJCSAqLworCQl1bnNpZ25lZCBhbmNob3IgOiAxOworCX0gKmVudHJpZXMsICpmaXJzdCwgKmxhc3Q7CisJLyogd2VyZSBjb21tb24gcmVjb3JkcyBmb3VuZD8gKi8KKwl1bnNpZ25lZCBsb25nIGhhc19tYXRjaGVzOworCW1tZmlsZV90ICpmaWxlMSwgKmZpbGUyOworCXhkZmVudl90ICplbnY7CisJeHBwYXJhbV90IGNvbnN0ICp4cHA7Cit9OworCitzdGF0aWMgaW50IGlzX2FuY2hvcih4cHBhcmFtX3QgY29uc3QgKnhwcCwgY29uc3QgY2hhciAqbGluZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgeHBwLT5hbmNob3JzX25yOyBpKyspIHsKKwkJaWYgKCFzdHJuY21wKGxpbmUsIHhwcC0+YW5jaG9yc1tpXSwgc3RybGVuKHhwcC0+YW5jaG9yc1tpXSkpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKiBUaGUgYXJndW1lbnQgInBhc3MiIGlzIDEgZm9yIHRoZSBmaXJzdCBmaWxlLCAyIGZvciB0aGUgc2Vjb25kLiAqLworc3RhdGljIHZvaWQgaW5zZXJ0X3JlY29yZCh4cHBhcmFtX3QgY29uc3QgKnhwcCwgaW50IGxpbmUsIHN0cnVjdCBoYXNobWFwICptYXAsCisJCQkgIGludCBwYXNzKQoreworCXhyZWNvcmRfdCAqKnJlY29yZHMgPSBwYXNzID09IDEgPworCQltYXAtPmVudi0+eGRmMS5yZWNzIDogbWFwLT5lbnYtPnhkZjIucmVjczsKKwl4cmVjb3JkX3QgKnJlY29yZCA9IHJlY29yZHNbbGluZSAtIDFdLCAqb3RoZXI7CisJLyoKKwkgKiBBZnRlciB4ZGxfcHJlcGFyZV9lbnYoKSAob3IgbW9yZSBwcmVjaXNlbHksIGR1ZSB0bworCSAqIHhkbF9jbGFzc2lmeV9yZWNvcmQoKSksIHRoZSAiaGEiIG1lbWJlciBvZiB0aGUgcmVjb3JkcyAoQUtBIGxpbmVzKQorCSAqIGlzIF9ub3RfIHRoZSBoYXNoIGFueW1vcmUsIGJ1dCBhIGxpbmVhcml6ZWQgdmVyc2lvbiBvZiBpdC4gIEluCisJICogb3RoZXIgd29yZHMsIHRoZSAiaGEiIG1lbWJlciBpcyBndWFyYW50ZWVkIHRvIHN0YXJ0IHdpdGggMCBhbmQKKwkgKiB0aGUgc2Vjb25kIHJlY29yZCdzIGhhIGNhbiBvbmx5IGJlIDAgb3IgMSwgZXRjLgorCSAqCisJICogU28gd2UgbXVsdGlwbHkgaGEgYnkgMiBpbiB0aGUgaG9wZSB0aGF0IHRoZSBoYXNoaW5nIHdhcworCSAqICJ1bmlxdWUgZW5vdWdoIi4KKwkgKi8KKwlpbnQgaW5kZXggPSAoaW50KSgocmVjb3JkLT5oYSA8PCAxKSAlIG1hcC0+YWxsb2MpOworCisJd2hpbGUgKG1hcC0+ZW50cmllc1tpbmRleF0ubGluZTEpIHsKKwkJb3RoZXIgPSBtYXAtPmVudi0+eGRmMS5yZWNzW21hcC0+ZW50cmllc1tpbmRleF0ubGluZTEgLSAxXTsKKwkJaWYgKG1hcC0+ZW50cmllc1tpbmRleF0uaGFzaCAhPSByZWNvcmQtPmhhIHx8CisJCQkJIXhkbF9yZWNtYXRjaChyZWNvcmQtPnB0ciwgcmVjb3JkLT5zaXplLAorCQkJCQlvdGhlci0+cHRyLCBvdGhlci0+c2l6ZSwKKwkJCQkJbWFwLT54cHAtPmZsYWdzKSkgeworCQkJaWYgKCsraW5kZXggPj0gbWFwLT5hbGxvYykKKwkJCQlpbmRleCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocGFzcyA9PSAyKQorCQkJbWFwLT5oYXNfbWF0Y2hlcyA9IDE7CisJCWlmIChwYXNzID09IDEgfHwgbWFwLT5lbnRyaWVzW2luZGV4XS5saW5lMikKKwkJCW1hcC0+ZW50cmllc1tpbmRleF0ubGluZTIgPSBOT05fVU5JUVVFOworCQllbHNlCisJCQltYXAtPmVudHJpZXNbaW5kZXhdLmxpbmUyID0gbGluZTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGFzcyA9PSAyKQorCQlyZXR1cm47CisJbWFwLT5lbnRyaWVzW2luZGV4XS5saW5lMSA9IGxpbmU7CisJbWFwLT5lbnRyaWVzW2luZGV4XS5oYXNoID0gcmVjb3JkLT5oYTsKKwltYXAtPmVudHJpZXNbaW5kZXhdLmFuY2hvciA9IGlzX2FuY2hvcih4cHAsIG1hcC0+ZW52LT54ZGYxLnJlY3NbbGluZSAtIDFdLT5wdHIpOworCWlmICghbWFwLT5maXJzdCkKKwkJbWFwLT5maXJzdCA9IG1hcC0+ZW50cmllcyArIGluZGV4OworCWlmIChtYXAtPmxhc3QpIHsKKwkJbWFwLT5sYXN0LT5uZXh0ID0gbWFwLT5lbnRyaWVzICsgaW5kZXg7CisJCW1hcC0+ZW50cmllc1tpbmRleF0ucHJldmlvdXMgPSBtYXAtPmxhc3Q7CisJfQorCW1hcC0+bGFzdCA9IG1hcC0+ZW50cmllcyArIGluZGV4OworCW1hcC0+bnIrKzsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCByZWN1cnNpb24gaW50byB0aGUgaW50ZXItaHVuaworICogcGFydHMsIGFzIHByZXZpb3VzbHkgbm9uLXVuaXF1ZSBsaW5lcyBjYW4gYmVjb21lIHVuaXF1ZSB3aGVuIGJlaW5nCisgKiByZXN0cmljdGVkIHRvIGEgc21hbGxlciBwYXJ0IG9mIHRoZSBmaWxlcy4KKyAqCisgKiBJdCBpcyBhc3N1bWVkIHRoYXQgZW52IGhhcyBiZWVuIHByZXBhcmVkIHVzaW5nIHhkbF9wcmVwYXJlKCkuCisgKi8KK3N0YXRpYyBpbnQgZmlsbF9oYXNobWFwKG1tZmlsZV90ICpmaWxlMSwgbW1maWxlX3QgKmZpbGUyLAorCQl4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRmZW52X3QgKmVudiwKKwkJc3RydWN0IGhhc2htYXAgKnJlc3VsdCwKKwkJaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpCit7CisJcmVzdWx0LT5maWxlMSA9IGZpbGUxOworCXJlc3VsdC0+ZmlsZTIgPSBmaWxlMjsKKwlyZXN1bHQtPnhwcCA9IHhwcDsKKwlyZXN1bHQtPmVudiA9IGVudjsKKworCS8qIFdlIGtub3cgZXhhY3RseSBob3cgbGFyZ2Ugd2Ugd2FudCB0aGUgaGFzaCBtYXAgKi8KKwlyZXN1bHQtPmFsbG9jID0gY291bnQxICogMjsKKwlyZXN1bHQtPmVudHJpZXMgPSAoc3RydWN0IGVudHJ5ICopCisJCXhkbF9tYWxsb2MocmVzdWx0LT5hbGxvYyAqIHNpemVvZihzdHJ1Y3QgZW50cnkpKTsKKwlpZiAoIXJlc3VsdC0+ZW50cmllcykKKwkJcmV0dXJuIC0xOworCW1lbXNldChyZXN1bHQtPmVudHJpZXMsIDAsIHJlc3VsdC0+YWxsb2MgKiBzaXplb2Yoc3RydWN0IGVudHJ5KSk7CisKKwkvKiBGaXJzdCwgZmlsbCB3aXRoIGVudHJpZXMgZnJvbSB0aGUgZmlyc3QgZmlsZSAqLworCXdoaWxlIChjb3VudDEtLSkKKwkJaW5zZXJ0X3JlY29yZCh4cHAsIGxpbmUxKyssIHJlc3VsdCwgMSk7CisKKwkvKiBUaGVuIHNlYXJjaCBmb3IgbWF0Y2hlcyBpbiB0aGUgc2Vjb25kIGZpbGUgKi8KKwl3aGlsZSAoY291bnQyLS0pCisJCWluc2VydF9yZWNvcmQoeHBwLCBsaW5lMisrLCByZXN1bHQsIDIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBsb25nZXN0IHNlcXVlbmNlIHdpdGggYSBzbWFsbGVyIGxhc3QgZWxlbWVudCAobWVhbmluZyBhIHNtYWxsZXIKKyAqIGxpbmUyLCBhcyB3ZSBjb25zdHJ1Y3QgdGhlIHNlcXVlbmNlIHdpdGggZW50cmllcyBvcmRlcmVkIGJ5IGxpbmUxKS4KKyAqLworc3RhdGljIGludCBiaW5hcnlfc2VhcmNoKHN0cnVjdCBlbnRyeSAqKnNlcXVlbmNlLCBpbnQgbG9uZ2VzdCwKKwkJc3RydWN0IGVudHJ5ICplbnRyeSkKK3sKKwlpbnQgbGVmdCA9IC0xLCByaWdodCA9IGxvbmdlc3Q7CisKKwl3aGlsZSAobGVmdCArIDEgPCByaWdodCkgeworCQlpbnQgbWlkZGxlID0gbGVmdCArIChyaWdodCAtIGxlZnQpIC8gMjsKKwkJLyogYnkgY29uc3RydWN0aW9uLCBubyB0d28gZW50cmllcyBjYW4gYmUgZXF1YWwgKi8KKwkJaWYgKHNlcXVlbmNlW21pZGRsZV0tPmxpbmUyID4gZW50cnktPmxpbmUyKQorCQkJcmlnaHQgPSBtaWRkbGU7CisJCWVsc2UKKwkJCWxlZnQgPSBtaWRkbGU7CisJfQorCS8qIHJldHVybiB0aGUgaW5kZXggaW4gInNlcXVlbmNlIiwgX25vdF8gdGhlIHNlcXVlbmNlIGxlbmd0aCAqLworCXJldHVybiBsZWZ0OworfQorCisvKgorICogVGhlIGlkZWEgaXMgdG8gc3RhcnQgd2l0aCB0aGUgbGlzdCBvZiBjb21tb24gdW5pcXVlIGxpbmVzIHNvcnRlZCBieQorICogdGhlIG9yZGVyIGluIGZpbGUxLiAgRm9yIGVhY2ggb2YgdGhlc2UgcGFpcnMsIHRoZSBsb25nZXN0IChwYXJ0aWFsKQorICogc2VxdWVuY2Ugd2hvc2UgbGFzdCBlbGVtZW50J3MgbGluZTIgaXMgc21hbGxlciBpcyBkZXRlcm1pbmVkLgorICoKKyAqIEZvciBlZmZpY2llbmN5LCB0aGUgc2VxdWVuY2VzIGFyZSBrZXB0IGluIGEgbGlzdCBjb250YWluaW5nIGV4YWN0bHkgb25lCisgKiBpdGVtIHBlciBzZXF1ZW5jZSBsZW5ndGg6IHRoZSBzZXF1ZW5jZSB3aXRoIHRoZSBzbWFsbGVzdCBsYXN0CisgKiBlbGVtZW50IChpbiB0ZXJtcyBvZiBsaW5lMikuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZW50cnkgKmZpbmRfbG9uZ2VzdF9jb21tb25fc2VxdWVuY2Uoc3RydWN0IGhhc2htYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgZW50cnkgKipzZXF1ZW5jZSA9IHhkbF9tYWxsb2MobWFwLT5uciAqIHNpemVvZihzdHJ1Y3QgZW50cnkgKikpOworCWludCBsb25nZXN0ID0gMCwgaTsKKwlzdHJ1Y3QgZW50cnkgKmVudHJ5OworCisJLyoKKwkgKiBJZiBub3QgLTEsIHRoaXMgZW50cnkgaW4gc2VxdWVuY2UgbXVzdCBuZXZlciBiZSBvdmVycmlkZGVuLgorCSAqIFRoZXJlZm9yZSwgb3ZlcnJpZGluZyBlbnRyaWVzIGJlZm9yZSB0aGlzIGhhcyBubyBlZmZlY3QsIHNvCisJICogZG8gbm90IGRvIHRoYXQgZWl0aGVyLgorCSAqLworCWludCBhbmNob3JfaSA9IC0xOworCisJZm9yIChlbnRyeSA9IG1hcC0+Zmlyc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7CisJCWlmICghZW50cnktPmxpbmUyIHx8IGVudHJ5LT5saW5lMiA9PSBOT05fVU5JUVVFKQorCQkJY29udGludWU7CisJCWkgPSBiaW5hcnlfc2VhcmNoKHNlcXVlbmNlLCBsb25nZXN0LCBlbnRyeSk7CisJCWVudHJ5LT5wcmV2aW91cyA9IGkgPCAwID8gTlVMTCA6IHNlcXVlbmNlW2ldOworCQkrK2k7CisJCWlmIChpIDw9IGFuY2hvcl9pKQorCQkJY29udGludWU7CisJCXNlcXVlbmNlW2ldID0gZW50cnk7CisJCWlmIChlbnRyeS0+YW5jaG9yKSB7CisJCQlhbmNob3JfaSA9IGk7CisJCQlsb25nZXN0ID0gYW5jaG9yX2kgKyAxOworCQl9IGVsc2UgaWYgKGkgPT0gbG9uZ2VzdCkgeworCQkJbG9uZ2VzdCsrOworCQl9CisJfQorCisJLyogTm8gY29tbW9uIHVuaXF1ZSBsaW5lcyB3ZXJlIGZvdW5kICovCisJaWYgKCFsb25nZXN0KSB7CisJCXhkbF9mcmVlKHNlcXVlbmNlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogSXRlcmF0ZSBzdGFydGluZyBhdCB0aGUgbGFzdCBlbGVtZW50LCBhZGp1c3RpbmcgdGhlICJuZXh0IiBtZW1iZXJzICovCisJZW50cnkgPSBzZXF1ZW5jZVtsb25nZXN0IC0gMV07CisJZW50cnktPm5leHQgPSBOVUxMOworCXdoaWxlIChlbnRyeS0+cHJldmlvdXMpIHsKKwkJZW50cnktPnByZXZpb3VzLT5uZXh0ID0gZW50cnk7CisJCWVudHJ5ID0gZW50cnktPnByZXZpb3VzOworCX0KKwl4ZGxfZnJlZShzZXF1ZW5jZSk7CisJcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgaW50IG1hdGNoKHN0cnVjdCBoYXNobWFwICptYXAsIGludCBsaW5lMSwgaW50IGxpbmUyKQoreworCXhyZWNvcmRfdCAqcmVjb3JkMSA9IG1hcC0+ZW52LT54ZGYxLnJlY3NbbGluZTEgLSAxXTsKKwl4cmVjb3JkX3QgKnJlY29yZDIgPSBtYXAtPmVudi0+eGRmMi5yZWNzW2xpbmUyIC0gMV07CisJcmV0dXJuIHhkbF9yZWNtYXRjaChyZWNvcmQxLT5wdHIsIHJlY29yZDEtPnNpemUsCisJCXJlY29yZDItPnB0ciwgcmVjb3JkMi0+c2l6ZSwgbWFwLT54cHAtPmZsYWdzKTsKK30KKworc3RhdGljIGludCBwYXRpZW5jZV9kaWZmKG1tZmlsZV90ICpmaWxlMSwgbW1maWxlX3QgKmZpbGUyLAorCQl4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRmZW52X3QgKmVudiwKKwkJaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpOworCitzdGF0aWMgaW50IHdhbGtfY29tbW9uX3NlcXVlbmNlKHN0cnVjdCBoYXNobWFwICptYXAsIHN0cnVjdCBlbnRyeSAqZmlyc3QsCisJCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCWludCBlbmQxID0gbGluZTEgKyBjb3VudDEsIGVuZDIgPSBsaW5lMiArIGNvdW50MjsKKwlpbnQgbmV4dDEsIG5leHQyOworCisJZm9yICg7OykgeworCQkvKiBUcnkgdG8gZ3JvdyB0aGUgbGluZSByYW5nZXMgb2YgY29tbW9uIGxpbmVzICovCisJCWlmIChmaXJzdCkgeworCQkJbmV4dDEgPSBmaXJzdC0+bGluZTE7CisJCQluZXh0MiA9IGZpcnN0LT5saW5lMjsKKwkJCXdoaWxlIChuZXh0MSA+IGxpbmUxICYmIG5leHQyID4gbGluZTIgJiYKKwkJCQkJbWF0Y2gobWFwLCBuZXh0MSAtIDEsIG5leHQyIC0gMSkpIHsKKwkJCQluZXh0MS0tOworCQkJCW5leHQyLS07CisJCQl9CisJCX0gZWxzZSB7CisJCQluZXh0MSA9IGVuZDE7CisJCQluZXh0MiA9IGVuZDI7CisJCX0KKwkJd2hpbGUgKGxpbmUxIDwgbmV4dDEgJiYgbGluZTIgPCBuZXh0MiAmJgorCQkJCW1hdGNoKG1hcCwgbGluZTEsIGxpbmUyKSkgeworCQkJbGluZTErKzsKKwkJCWxpbmUyKys7CisJCX0KKworCQkvKiBSZWN1cnNlICovCisJCWlmIChuZXh0MSA+IGxpbmUxIHx8IG5leHQyID4gbGluZTIpIHsKKwkJCXN0cnVjdCBoYXNobWFwIHN1Ym1hcDsKKworCQkJbWVtc2V0KCZzdWJtYXAsIDAsIHNpemVvZihzdWJtYXApKTsKKwkJCWlmIChwYXRpZW5jZV9kaWZmKG1hcC0+ZmlsZTEsIG1hcC0+ZmlsZTIsCisJCQkJCW1hcC0+eHBwLCBtYXAtPmVudiwKKwkJCQkJbGluZTEsIG5leHQxIC0gbGluZTEsCisJCQkJCWxpbmUyLCBuZXh0MiAtIGxpbmUyKSkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoIWZpcnN0KQorCQkJcmV0dXJuIDA7CisKKwkJd2hpbGUgKGZpcnN0LT5uZXh0ICYmCisJCQkJZmlyc3QtPm5leHQtPmxpbmUxID09IGZpcnN0LT5saW5lMSArIDEgJiYKKwkJCQlmaXJzdC0+bmV4dC0+bGluZTIgPT0gZmlyc3QtPmxpbmUyICsgMSkKKwkJCWZpcnN0ID0gZmlyc3QtPm5leHQ7CisKKwkJbGluZTEgPSBmaXJzdC0+bGluZTEgKyAxOworCQlsaW5lMiA9IGZpcnN0LT5saW5lMiArIDE7CisKKwkJZmlyc3QgPSBmaXJzdC0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZmFsbF9iYWNrX3RvX2NsYXNzaWNfZGlmZihzdHJ1Y3QgaGFzaG1hcCAqbWFwLAorCQlpbnQgbGluZTEsIGludCBjb3VudDEsIGludCBsaW5lMiwgaW50IGNvdW50MikKK3sKKwl4cHBhcmFtX3QgeHBwOworCXhwcC5mbGFncyA9IG1hcC0+eHBwLT5mbGFncyAmIH5YREZfRElGRl9BTEdPUklUSE1fTUFTSzsKKworCXJldHVybiB4ZGxfZmFsbF9iYWNrX2RpZmYobWFwLT5lbnYsICZ4cHAsCisJCQkJICBsaW5lMSwgY291bnQxLCBsaW5lMiwgY291bnQyKTsKK30KKworLyoKKyAqIFJlY3Vyc2l2ZWx5IGZpbmQgdGhlIGxvbmdlc3QgY29tbW9uIHNlcXVlbmNlIG9mIHVuaXF1ZSBsaW5lcywKKyAqIGFuZCBpZiBub25lIHdhcyBmb3VuZCwgYXNrIHhkbF9kb19kaWZmKCkgdG8gZG8gdGhlIGpvYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBlbnYgd2FzIHByZXBhcmVkIHdpdGggeGRsX3ByZXBhcmVfZW52KCkuCisgKi8KK3N0YXRpYyBpbnQgcGF0aWVuY2VfZGlmZihtbWZpbGVfdCAqZmlsZTEsIG1tZmlsZV90ICpmaWxlMiwKKwkJeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZmVudl90ICplbnYsCisJCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCXN0cnVjdCBoYXNobWFwIG1hcDsKKwlzdHJ1Y3QgZW50cnkgKmZpcnN0OworCWludCByZXN1bHQgPSAwOworCisJLyogdHJpdmlhbCBjYXNlOiBvbmUgc2lkZSBpcyBlbXB0eSAqLworCWlmICghY291bnQxKSB7CisJCXdoaWxlKGNvdW50Mi0tKQorCQkJZW52LT54ZGYyLnJjaGdbbGluZTIrKyAtIDFdID0gMTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghY291bnQyKSB7CisJCXdoaWxlKGNvdW50MS0tKQorCQkJZW52LT54ZGYxLnJjaGdbbGluZTErKyAtIDFdID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWVtc2V0KCZtYXAsIDAsIHNpemVvZihtYXApKTsKKwlpZiAoZmlsbF9oYXNobWFwKGZpbGUxLCBmaWxlMiwgeHBwLCBlbnYsICZtYXAsCisJCQlsaW5lMSwgY291bnQxLCBsaW5lMiwgY291bnQyKSkKKwkJcmV0dXJuIC0xOworCisJLyogYXJlIHRoZXJlIGFueSBtYXRjaGluZyBsaW5lcyBhdCBhbGw/ICovCisJaWYgKCFtYXAuaGFzX21hdGNoZXMpIHsKKwkJd2hpbGUoY291bnQxLS0pCisJCQllbnYtPnhkZjEucmNoZ1tsaW5lMSsrIC0gMV0gPSAxOworCQl3aGlsZShjb3VudDItLSkKKwkJCWVudi0+eGRmMi5yY2hnW2xpbmUyKysgLSAxXSA9IDE7CisJCXhkbF9mcmVlKG1hcC5lbnRyaWVzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZmlyc3QgPSBmaW5kX2xvbmdlc3RfY29tbW9uX3NlcXVlbmNlKCZtYXApOworCWlmIChmaXJzdCkKKwkJcmVzdWx0ID0gd2Fsa19jb21tb25fc2VxdWVuY2UoJm1hcCwgZmlyc3QsCisJCQlsaW5lMSwgY291bnQxLCBsaW5lMiwgY291bnQyKTsKKwllbHNlCisJCXJlc3VsdCA9IGZhbGxfYmFja190b19jbGFzc2ljX2RpZmYoJm1hcCwKKwkJCWxpbmUxLCBjb3VudDEsIGxpbmUyLCBjb3VudDIpOworCisJeGRsX2ZyZWUobWFwLmVudHJpZXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCB4ZGxfZG9fcGF0aWVuY2VfZGlmZihtbWZpbGVfdCAqZmlsZTEsIG1tZmlsZV90ICpmaWxlMiwKKwkJeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZmVudl90ICplbnYpCit7CisJaWYgKHhkbF9wcmVwYXJlX2VudihmaWxlMSwgZmlsZTIsIHhwcCwgZW52KSA8IDApCisJCXJldHVybiAtMTsKKworCS8qIGVudmlyb25tZW50IGlzIGNsZWFuZWQgdXAgaW4geGRsX2RpZmYoKSAqLworCXJldHVybiBwYXRpZW5jZV9kaWZmKGZpbGUxLCBmaWxlMiwgeHBwLCBlbnYsCisJCQkxLCBlbnYtPnhkZjEubnJlYywgMSwgZW52LT54ZGYyLm5yZWMpOworfQpkaWZmIC0tZ2l0IGEveGRpZmYveHByZXBhcmUuYyBiL3hkaWZmL3hwcmVwYXJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlYjhmYgotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hwcmVwYXJlLmMKQEAgLTAsMCArMSw0ODMgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCBzZWUKKyAqICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2luY2x1ZGUgInhpbmNsdWRlLmgiCisKKworI2RlZmluZSBYRExfS1BESVNfUlVOIDQKKyNkZWZpbmUgWERMX01BWF9FUUxJTUlUIDEwMjQKKyNkZWZpbmUgWERMX1NJTVNDQU5fV0lORE9XIDEwMAorI2RlZmluZSBYRExfR1VFU1NfTkxJTkVTMSAyNTYKKyNkZWZpbmUgWERMX0dVRVNTX05MSU5FUzIgMjAKKworCit0eXBlZGVmIHN0cnVjdCBzX3hkbGNsYXNzIHsKKwlzdHJ1Y3Qgc194ZGxjbGFzcyAqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGhhOworCWNoYXIgY29uc3QgKmxpbmU7CisJbG9uZyBzaXplOworCWxvbmcgaWR4OworCWxvbmcgbGVuMSwgbGVuMjsKK30geGRsY2xhc3NfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc194ZGxjbGFzc2lmaWVyIHsKKwl1bnNpZ25lZCBpbnQgaGJpdHM7CisJbG9uZyBoc2l6ZTsKKwl4ZGxjbGFzc190ICoqcmNoYXNoOworCWNoYXN0b3JlX3QgbmNoYTsKKwl4ZGxjbGFzc190ICoqcmNyZWNzOworCWxvbmcgYWxsb2M7CisJbG9uZyBjb3VudDsKKwlsb25nIGZsYWdzOworfSB4ZGxjbGFzc2lmaWVyX3Q7CisKKworCisKK3N0YXRpYyBpbnQgeGRsX2luaXRfY2xhc3NpZmllcih4ZGxjbGFzc2lmaWVyX3QgKmNmLCBsb25nIHNpemUsIGxvbmcgZmxhZ3MpOworc3RhdGljIHZvaWQgeGRsX2ZyZWVfY2xhc3NpZmllcih4ZGxjbGFzc2lmaWVyX3QgKmNmKTsKK3N0YXRpYyBpbnQgeGRsX2NsYXNzaWZ5X3JlY29yZCh1bnNpZ25lZCBpbnQgcGFzcywgeGRsY2xhc3NpZmllcl90ICpjZiwgeHJlY29yZF90ICoqcmhhc2gsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGhiaXRzLCB4cmVjb3JkX3QgKnJlYyk7CitzdGF0aWMgaW50IHhkbF9wcmVwYXJlX2N0eCh1bnNpZ25lZCBpbnQgcGFzcywgbW1maWxlX3QgKm1mLCBsb25nIG5hcmVjLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkJCSAgIHhkbGNsYXNzaWZpZXJfdCAqY2YsIHhkZmlsZV90ICp4ZGYpOworc3RhdGljIHZvaWQgeGRsX2ZyZWVfY3R4KHhkZmlsZV90ICp4ZGYpOworc3RhdGljIGludCB4ZGxfY2xlYW5fbW1hdGNoKGNoYXIgY29uc3QgKmRpcywgbG9uZyBpLCBsb25nIHMsIGxvbmcgZSk7CitzdGF0aWMgaW50IHhkbF9jbGVhbnVwX3JlY29yZHMoeGRsY2xhc3NpZmllcl90ICpjZiwgeGRmaWxlX3QgKnhkZjEsIHhkZmlsZV90ICp4ZGYyKTsKK3N0YXRpYyBpbnQgeGRsX3RyaW1fZW5kcyh4ZGZpbGVfdCAqeGRmMSwgeGRmaWxlX3QgKnhkZjIpOworc3RhdGljIGludCB4ZGxfb3B0aW1pemVfY3R4cyh4ZGxjbGFzc2lmaWVyX3QgKmNmLCB4ZGZpbGVfdCAqeGRmMSwgeGRmaWxlX3QgKnhkZjIpOworCisKKworCitzdGF0aWMgaW50IHhkbF9pbml0X2NsYXNzaWZpZXIoeGRsY2xhc3NpZmllcl90ICpjZiwgbG9uZyBzaXplLCBsb25nIGZsYWdzKSB7CisJY2YtPmZsYWdzID0gZmxhZ3M7CisKKwljZi0+aGJpdHMgPSB4ZGxfaGFzaGJpdHMoKHVuc2lnbmVkIGludCkgc2l6ZSk7CisJY2YtPmhzaXplID0gMSA8PCBjZi0+aGJpdHM7CisKKwlpZiAoeGRsX2NoYV9pbml0KCZjZi0+bmNoYSwgc2l6ZW9mKHhkbGNsYXNzX3QpLCBzaXplIC8gNCArIDEpIDwgMCkgeworCisJCXJldHVybiAtMTsKKwl9CisJaWYgKCEoY2YtPnJjaGFzaCA9ICh4ZGxjbGFzc190ICoqKSB4ZGxfbWFsbG9jKGNmLT5oc2l6ZSAqIHNpemVvZih4ZGxjbGFzc190ICopKSkpIHsKKworCQl4ZGxfY2hhX2ZyZWUoJmNmLT5uY2hhKTsKKwkJcmV0dXJuIC0xOworCX0KKwltZW1zZXQoY2YtPnJjaGFzaCwgMCwgY2YtPmhzaXplICogc2l6ZW9mKHhkbGNsYXNzX3QgKikpOworCisJY2YtPmFsbG9jID0gc2l6ZTsKKwlpZiAoIShjZi0+cmNyZWNzID0gKHhkbGNsYXNzX3QgKiopIHhkbF9tYWxsb2MoY2YtPmFsbG9jICogc2l6ZW9mKHhkbGNsYXNzX3QgKikpKSkgeworCisJCXhkbF9mcmVlKGNmLT5yY2hhc2gpOworCQl4ZGxfY2hhX2ZyZWUoJmNmLT5uY2hhKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWNmLT5jb3VudCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCB4ZGxfZnJlZV9jbGFzc2lmaWVyKHhkbGNsYXNzaWZpZXJfdCAqY2YpIHsKKworCXhkbF9mcmVlKGNmLT5yY3JlY3MpOworCXhkbF9mcmVlKGNmLT5yY2hhc2gpOworCXhkbF9jaGFfZnJlZSgmY2YtPm5jaGEpOworfQorCisKK3N0YXRpYyBpbnQgeGRsX2NsYXNzaWZ5X3JlY29yZCh1bnNpZ25lZCBpbnQgcGFzcywgeGRsY2xhc3NpZmllcl90ICpjZiwgeHJlY29yZF90ICoqcmhhc2gsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGhiaXRzLCB4cmVjb3JkX3QgKnJlYykgeworCWxvbmcgaGk7CisJY2hhciBjb25zdCAqbGluZTsKKwl4ZGxjbGFzc190ICpyY3JlYzsKKwl4ZGxjbGFzc190ICoqcmNyZWNzOworCisJbGluZSA9IHJlYy0+cHRyOworCWhpID0gKGxvbmcpIFhETF9IQVNITE9ORyhyZWMtPmhhLCBjZi0+aGJpdHMpOworCWZvciAocmNyZWMgPSBjZi0+cmNoYXNoW2hpXTsgcmNyZWM7IHJjcmVjID0gcmNyZWMtPm5leHQpCisJCWlmIChyY3JlYy0+aGEgPT0gcmVjLT5oYSAmJgorCQkJCXhkbF9yZWNtYXRjaChyY3JlYy0+bGluZSwgcmNyZWMtPnNpemUsCisJCQkJCXJlYy0+cHRyLCByZWMtPnNpemUsIGNmLT5mbGFncykpCisJCQlicmVhazsKKworCWlmICghcmNyZWMpIHsKKwkJaWYgKCEocmNyZWMgPSB4ZGxfY2hhX2FsbG9jKCZjZi0+bmNoYSkpKSB7CisKKwkJCXJldHVybiAtMTsKKwkJfQorCQlyY3JlYy0+aWR4ID0gY2YtPmNvdW50Kys7CisJCWlmIChjZi0+Y291bnQgPiBjZi0+YWxsb2MpIHsKKwkJCWNmLT5hbGxvYyAqPSAyOworCQkJaWYgKCEocmNyZWNzID0gKHhkbGNsYXNzX3QgKiopIHhkbF9yZWFsbG9jKGNmLT5yY3JlY3MsIGNmLT5hbGxvYyAqIHNpemVvZih4ZGxjbGFzc190ICopKSkpIHsKKworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCWNmLT5yY3JlY3MgPSByY3JlY3M7CisJCX0KKwkJY2YtPnJjcmVjc1tyY3JlYy0+aWR4XSA9IHJjcmVjOworCQlyY3JlYy0+bGluZSA9IGxpbmU7CisJCXJjcmVjLT5zaXplID0gcmVjLT5zaXplOworCQlyY3JlYy0+aGEgPSByZWMtPmhhOworCQlyY3JlYy0+bGVuMSA9IHJjcmVjLT5sZW4yID0gMDsKKwkJcmNyZWMtPm5leHQgPSBjZi0+cmNoYXNoW2hpXTsKKwkJY2YtPnJjaGFzaFtoaV0gPSByY3JlYzsKKwl9CisKKwkocGFzcyA9PSAxKSA/IHJjcmVjLT5sZW4xKysgOiByY3JlYy0+bGVuMisrOworCisJcmVjLT5oYSA9ICh1bnNpZ25lZCBsb25nKSByY3JlYy0+aWR4OworCisJaGkgPSAobG9uZykgWERMX0hBU0hMT05HKHJlYy0+aGEsIGhiaXRzKTsKKwlyZWMtPm5leHQgPSByaGFzaFtoaV07CisJcmhhc2hbaGldID0gcmVjOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB4ZGxfcHJlcGFyZV9jdHgodW5zaWduZWQgaW50IHBhc3MsIG1tZmlsZV90ICptZiwgbG9uZyBuYXJlYywgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCQkgICB4ZGxjbGFzc2lmaWVyX3QgKmNmLCB4ZGZpbGVfdCAqeGRmKSB7CisJdW5zaWduZWQgaW50IGhiaXRzOworCWxvbmcgbnJlYywgaHNpemUsIGJzaXplOworCXVuc2lnbmVkIGxvbmcgaGF2OworCWNoYXIgY29uc3QgKmJsaywgKmN1ciwgKnRvcCwgKnByZXY7CisJeHJlY29yZF90ICpjcmVjOworCXhyZWNvcmRfdCAqKnJlY3MsICoqcnJlY3M7CisJeHJlY29yZF90ICoqcmhhc2g7CisJdW5zaWduZWQgbG9uZyAqaGE7CisJY2hhciAqcmNoZzsKKwlsb25nICpyaW5kZXg7CisKKwloYSA9IE5VTEw7CisJcmluZGV4ID0gTlVMTDsKKwlyY2hnID0gTlVMTDsKKwlyaGFzaCA9IE5VTEw7CisJcmVjcyA9IE5VTEw7CisKKwlpZiAoeGRsX2NoYV9pbml0KCZ4ZGYtPnJjaGEsIHNpemVvZih4cmVjb3JkX3QpLCBuYXJlYyAvIDQgKyAxKSA8IDApCisJCWdvdG8gYWJvcnQ7CisJaWYgKCEocmVjcyA9ICh4cmVjb3JkX3QgKiopIHhkbF9tYWxsb2MobmFyZWMgKiBzaXplb2YoeHJlY29yZF90ICopKSkpCisJCWdvdG8gYWJvcnQ7CisKKwlpZiAoWERGX0RJRkZfQUxHKHhwcC0+ZmxhZ3MpID09IFhERl9ISVNUT0dSQU1fRElGRikKKwkJaGJpdHMgPSBoc2l6ZSA9IDA7CisJZWxzZSB7CisJCWhiaXRzID0geGRsX2hhc2hiaXRzKCh1bnNpZ25lZCBpbnQpIG5hcmVjKTsKKwkJaHNpemUgPSAxIDw8IGhiaXRzOworCQlpZiAoIShyaGFzaCA9ICh4cmVjb3JkX3QgKiopIHhkbF9tYWxsb2MoaHNpemUgKiBzaXplb2YoeHJlY29yZF90ICopKSkpCisJCQlnb3RvIGFib3J0OworCQltZW1zZXQocmhhc2gsIDAsIGhzaXplICogc2l6ZW9mKHhyZWNvcmRfdCAqKSk7CisJfQorCisJbnJlYyA9IDA7CisJaWYgKChjdXIgPSBibGsgPSB4ZGxfbW1maWxlX2ZpcnN0KG1mLCAmYnNpemUpKSAhPSBOVUxMKSB7CisJCWZvciAodG9wID0gYmxrICsgYnNpemU7IGN1ciA8IHRvcDsgKSB7CisJCQlwcmV2ID0gY3VyOworCQkJaGF2ID0geGRsX2hhc2hfcmVjb3JkKCZjdXIsIHRvcCwgeHBwLT5mbGFncyk7CisJCQlpZiAobnJlYyA+PSBuYXJlYykgeworCQkJCW5hcmVjICo9IDI7CisJCQkJaWYgKCEocnJlY3MgPSAoeHJlY29yZF90ICoqKSB4ZGxfcmVhbGxvYyhyZWNzLCBuYXJlYyAqIHNpemVvZih4cmVjb3JkX3QgKikpKSkKKwkJCQkJZ290byBhYm9ydDsKKwkJCQlyZWNzID0gcnJlY3M7CisJCQl9CisJCQlpZiAoIShjcmVjID0geGRsX2NoYV9hbGxvYygmeGRmLT5yY2hhKSkpCisJCQkJZ290byBhYm9ydDsKKwkJCWNyZWMtPnB0ciA9IHByZXY7CisJCQljcmVjLT5zaXplID0gKGxvbmcpIChjdXIgLSBwcmV2KTsKKwkJCWNyZWMtPmhhID0gaGF2OworCQkJcmVjc1tucmVjKytdID0gY3JlYzsKKworCQkJaWYgKChYREZfRElGRl9BTEcoeHBwLT5mbGFncykgIT0gWERGX0hJU1RPR1JBTV9ESUZGKSAmJgorCQkJICAgIHhkbF9jbGFzc2lmeV9yZWNvcmQocGFzcywgY2YsIHJoYXNoLCBoYml0cywgY3JlYykgPCAwKQorCQkJCWdvdG8gYWJvcnQ7CisJCX0KKwl9CisKKwlpZiAoIShyY2hnID0gKGNoYXIgKikgeGRsX21hbGxvYygobnJlYyArIDIpICogc2l6ZW9mKGNoYXIpKSkpCisJCWdvdG8gYWJvcnQ7CisJbWVtc2V0KHJjaGcsIDAsIChucmVjICsgMikgKiBzaXplb2YoY2hhcikpOworCisJaWYgKCEocmluZGV4ID0gKGxvbmcgKikgeGRsX21hbGxvYygobnJlYyArIDEpICogc2l6ZW9mKGxvbmcpKSkpCisJCWdvdG8gYWJvcnQ7CisJaWYgKCEoaGEgPSAodW5zaWduZWQgbG9uZyAqKSB4ZGxfbWFsbG9jKChucmVjICsgMSkgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSkKKwkJZ290byBhYm9ydDsKKworCXhkZi0+bnJlYyA9IG5yZWM7CisJeGRmLT5yZWNzID0gcmVjczsKKwl4ZGYtPmhiaXRzID0gaGJpdHM7CisJeGRmLT5yaGFzaCA9IHJoYXNoOworCXhkZi0+cmNoZyA9IHJjaGcgKyAxOworCXhkZi0+cmluZGV4ID0gcmluZGV4OworCXhkZi0+bnJlZmYgPSAwOworCXhkZi0+aGEgPSBoYTsKKwl4ZGYtPmRzdGFydCA9IDA7CisJeGRmLT5kZW5kID0gbnJlYyAtIDE7CisKKwlyZXR1cm4gMDsKKworYWJvcnQ6CisJeGRsX2ZyZWUoaGEpOworCXhkbF9mcmVlKHJpbmRleCk7CisJeGRsX2ZyZWUocmNoZyk7CisJeGRsX2ZyZWUocmhhc2gpOworCXhkbF9mcmVlKHJlY3MpOworCXhkbF9jaGFfZnJlZSgmeGRmLT5yY2hhKTsKKwlyZXR1cm4gLTE7Cit9CisKKworc3RhdGljIHZvaWQgeGRsX2ZyZWVfY3R4KHhkZmlsZV90ICp4ZGYpIHsKKworCXhkbF9mcmVlKHhkZi0+cmhhc2gpOworCXhkbF9mcmVlKHhkZi0+cmluZGV4KTsKKwl4ZGxfZnJlZSh4ZGYtPnJjaGcgLSAxKTsKKwl4ZGxfZnJlZSh4ZGYtPmhhKTsKKwl4ZGxfZnJlZSh4ZGYtPnJlY3MpOworCXhkbF9jaGFfZnJlZSgmeGRmLT5yY2hhKTsKK30KKworCitpbnQgeGRsX3ByZXBhcmVfZW52KG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCQkgICAgeGRmZW52X3QgKnhlKSB7CisJbG9uZyBlbmwxLCBlbmwyLCBzYW1wbGU7CisJeGRsY2xhc3NpZmllcl90IGNmOworCisJbWVtc2V0KCZjZiwgMCwgc2l6ZW9mKGNmKSk7CisKKwkvKgorCSAqIEZvciBoaXN0b2dyYW0gZGlmZiwgd2UgY2FuIGFmZm9yZCBhIHNtYWxsZXIgc2FtcGxlIHNpemUgYW5kCisJICogdGh1cyBhIHBvb3JlciBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIGxpbmVzLCBhcyB0aGUgaGFzaAorCSAqIHRhYmxlIChyaGFzaCkgd29uJ3QgYmUgZmlsbGVkIHVwL2dyb3duLiBUaGUgbnVtYmVyIG9mIGxpbmVzCisJICogKG5yZWNzKSB3aWxsIGJlIHVwZGF0ZWQgY29ycmVjdGx5IGFueXdheSBieQorCSAqIHhkbF9wcmVwYXJlX2N0eCgpLgorCSAqLworCXNhbXBsZSA9IChYREZfRElGRl9BTEcoeHBwLT5mbGFncykgPT0gWERGX0hJU1RPR1JBTV9ESUZGCisJCSAgPyBYRExfR1VFU1NfTkxJTkVTMiA6IFhETF9HVUVTU19OTElORVMxKTsKKworCWVubDEgPSB4ZGxfZ3Vlc3NfbGluZXMobWYxLCBzYW1wbGUpICsgMTsKKwllbmwyID0geGRsX2d1ZXNzX2xpbmVzKG1mMiwgc2FtcGxlKSArIDE7CisKKwlpZiAoWERGX0RJRkZfQUxHKHhwcC0+ZmxhZ3MpICE9IFhERl9ISVNUT0dSQU1fRElGRiAmJgorCSAgICB4ZGxfaW5pdF9jbGFzc2lmaWVyKCZjZiwgZW5sMSArIGVubDIgKyAxLCB4cHAtPmZsYWdzKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmICh4ZGxfcHJlcGFyZV9jdHgoMSwgbWYxLCBlbmwxLCB4cHAsICZjZiwgJnhlLT54ZGYxKSA8IDApIHsKKworCQl4ZGxfZnJlZV9jbGFzc2lmaWVyKCZjZik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHhkbF9wcmVwYXJlX2N0eCgyLCBtZjIsIGVubDIsIHhwcCwgJmNmLCAmeGUtPnhkZjIpIDwgMCkgeworCisJCXhkbF9mcmVlX2N0eCgmeGUtPnhkZjEpOworCQl4ZGxfZnJlZV9jbGFzc2lmaWVyKCZjZik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoKFhERl9ESUZGX0FMRyh4cHAtPmZsYWdzKSAhPSBYREZfUEFUSUVOQ0VfRElGRikgJiYKKwkgICAgKFhERl9ESUZGX0FMRyh4cHAtPmZsYWdzKSAhPSBYREZfSElTVE9HUkFNX0RJRkYpICYmCisJICAgIHhkbF9vcHRpbWl6ZV9jdHhzKCZjZiwgJnhlLT54ZGYxLCAmeGUtPnhkZjIpIDwgMCkgeworCisJCXhkbF9mcmVlX2N0eCgmeGUtPnhkZjIpOworCQl4ZGxfZnJlZV9jdHgoJnhlLT54ZGYxKTsKKwkJeGRsX2ZyZWVfY2xhc3NpZmllcigmY2YpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKFhERl9ESUZGX0FMRyh4cHAtPmZsYWdzKSAhPSBYREZfSElTVE9HUkFNX0RJRkYpCisJCXhkbF9mcmVlX2NsYXNzaWZpZXIoJmNmKTsKKworCXJldHVybiAwOworfQorCisKK3ZvaWQgeGRsX2ZyZWVfZW52KHhkZmVudl90ICp4ZSkgeworCisJeGRsX2ZyZWVfY3R4KCZ4ZS0+eGRmMik7CisJeGRsX2ZyZWVfY3R4KCZ4ZS0+eGRmMSk7Cit9CisKKworc3RhdGljIGludCB4ZGxfY2xlYW5fbW1hdGNoKGNoYXIgY29uc3QgKmRpcywgbG9uZyBpLCBsb25nIHMsIGxvbmcgZSkgeworCWxvbmcgciwgcmRpczAsIHJwZGlzMCwgcmRpczEsIHJwZGlzMTsKKworCS8qCisJICogTGltaXRzIHRoZSB3aW5kb3cgdGhlIGlzIGV4YW1pbmVkIGR1cmluZyB0aGUgc2ltaWxhci1saW5lcworCSAqIHNjYW4uIFRoZSBsb29wcyBiZWxvdyBzdG9wcyB3aGVuIGRpc1tpIC0gcl0gPT0gMSAobGluZSB0aGF0CisJICogaGFzIG5vIG1hdGNoKSwgYnV0IHRoZXJlIGFyZSBjb3JuZXIgY2FzZXMgd2hlcmUgdGhlIGxvb3AKKwkgKiBwcm9jZWVkIGFsbCB0aGUgd2F5IHRvIHRoZSBleHRyZW1pdGllcyBieSBjYXVzaW5nIGh1Z2UKKwkgKiBwZXJmb3JtYW5jZSBwZW5hbHRpZXMgaW4gY2FzZSBvZiBiaWcgZmlsZXMuCisJICovCisJaWYgKGkgLSBzID4gWERMX1NJTVNDQU5fV0lORE9XKQorCQlzID0gaSAtIFhETF9TSU1TQ0FOX1dJTkRPVzsKKwlpZiAoZSAtIGkgPiBYRExfU0lNU0NBTl9XSU5ET1cpCisJCWUgPSBpICsgWERMX1NJTVNDQU5fV0lORE9XOworCisJLyoKKwkgKiBTY2FucyB0aGUgbGluZXMgYmVmb3JlICdpJyB0byBmaW5kIGEgcnVuIG9mIGxpbmVzIHRoYXQgZWl0aGVyCisJICogaGF2ZSBubyBtYXRjaCAoZGlzW2pdID09IDApIG9yIGhhdmUgbXVsdGlwbGUgbWF0Y2hlcyAoZGlzW2pdID4gMSkuCisJICogTm90ZSB0aGF0IHdlIGFsd2F5cyBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBkaXNbaV0gPiAxLCBzbyB0aGUKKwkgKiBjdXJyZW50IGxpbmUgKGkpIGlzIGFscmVhZHkgYSBtdWx0aW1hdGNoIGxpbmUuCisJICovCisJZm9yIChyID0gMSwgcmRpczAgPSAwLCBycGRpczAgPSAxOyAoaSAtIHIpID49IHM7IHIrKykgeworCQlpZiAoIWRpc1tpIC0gcl0pCisJCQlyZGlzMCsrOworCQllbHNlIGlmIChkaXNbaSAtIHJdID09IDIpCisJCQlycGRpczArKzsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCS8qCisJICogSWYgdGhlIHJ1biBiZWZvcmUgdGhlIGxpbmUgJ2knIGZvdW5kIG9ubHkgbXVsdGltYXRjaCBsaW5lcywgd2UKKwkgKiByZXR1cm4gMCBhbmQgaGVuY2Ugd2UgZG9uJ3QgbWFrZSB0aGUgY3VycmVudCBsaW5lIChpKSBkaXNjYXJkZWQuCisJICogV2Ugd2FudCB0byBkaXNjYXJkIG11bHRpbWF0Y2ggbGluZXMgb25seSB3aGVuIHRoZXkgYXBwZWFyIGluIHRoZQorCSAqIG1pZGRsZSBvZiBydW5zIHdpdGggbm9tYXRjaCBsaW5lcyAoZGlzW2pdID09IDApLgorCSAqLworCWlmIChyZGlzMCA9PSAwKQorCQlyZXR1cm4gMDsKKwlmb3IgKHIgPSAxLCByZGlzMSA9IDAsIHJwZGlzMSA9IDE7IChpICsgcikgPD0gZTsgcisrKSB7CisJCWlmICghZGlzW2kgKyByXSkKKwkJCXJkaXMxKys7CisJCWVsc2UgaWYgKGRpc1tpICsgcl0gPT0gMikKKwkJCXJwZGlzMSsrOworCQllbHNlCisJCQlicmVhazsKKwl9CisJLyoKKwkgKiBJZiB0aGUgcnVuIGFmdGVyIHRoZSBsaW5lICdpJyBmb3VuZCBvbmx5IG11bHRpbWF0Y2ggbGluZXMsIHdlCisJICogcmV0dXJuIDAgYW5kIGhlbmNlIHdlIGRvbid0IG1ha2UgdGhlIGN1cnJlbnQgbGluZSAoaSkgZGlzY2FyZGVkLgorCSAqLworCWlmIChyZGlzMSA9PSAwKQorCQlyZXR1cm4gMDsKKwlyZGlzMSArPSByZGlzMDsKKwlycGRpczEgKz0gcnBkaXMwOworCisJcmV0dXJuIHJwZGlzMSAqIFhETF9LUERJU19SVU4gPCAocnBkaXMxICsgcmRpczEpOworfQorCisKKy8qCisgKiBUcnkgdG8gcmVkdWNlIHRoZSBwcm9ibGVtIGNvbXBsZXhpdHksIGRpc2NhcmQgcmVjb3JkcyB0aGF0IGhhdmUgbm8KKyAqIG1hdGNoZXMgb24gdGhlIG90aGVyIGZpbGUuIEFsc28sIGxpbmVzIHRoYXQgaGF2ZSBtdWx0aXBsZSBtYXRjaGVzCisgKiBtaWdodCBiZSBwb3RlbnRpYWxseSBkaXNjYXJkZWQgaWYgdGhleSBoYXBwZWFyIGluIGEgcnVuIG9mIGRpc2NhcmRhYmxlLgorICovCitzdGF0aWMgaW50IHhkbF9jbGVhbnVwX3JlY29yZHMoeGRsY2xhc3NpZmllcl90ICpjZiwgeGRmaWxlX3QgKnhkZjEsIHhkZmlsZV90ICp4ZGYyKSB7CisJbG9uZyBpLCBubSwgbnJlZmYsIG1saW07CisJeHJlY29yZF90ICoqcmVjczsKKwl4ZGxjbGFzc190ICpyY3JlYzsKKwljaGFyICpkaXMsICpkaXMxLCAqZGlzMjsKKworCWlmICghKGRpcyA9IChjaGFyICopIHhkbF9tYWxsb2MoeGRmMS0+bnJlYyArIHhkZjItPm5yZWMgKyAyKSkpIHsKKworCQlyZXR1cm4gLTE7CisJfQorCW1lbXNldChkaXMsIDAsIHhkZjEtPm5yZWMgKyB4ZGYyLT5ucmVjICsgMik7CisJZGlzMSA9IGRpczsKKwlkaXMyID0gZGlzMSArIHhkZjEtPm5yZWMgKyAxOworCisJaWYgKChtbGltID0geGRsX2JvZ29zcXJ0KHhkZjEtPm5yZWMpKSA+IFhETF9NQVhfRVFMSU1JVCkKKwkJbWxpbSA9IFhETF9NQVhfRVFMSU1JVDsKKwlmb3IgKGkgPSB4ZGYxLT5kc3RhcnQsIHJlY3MgPSAmeGRmMS0+cmVjc1t4ZGYxLT5kc3RhcnRdOyBpIDw9IHhkZjEtPmRlbmQ7IGkrKywgcmVjcysrKSB7CisJCXJjcmVjID0gY2YtPnJjcmVjc1soKnJlY3MpLT5oYV07CisJCW5tID0gcmNyZWMgPyByY3JlYy0+bGVuMiA6IDA7CisJCWRpczFbaV0gPSAobm0gPT0gMCkgPyAwOiAobm0gPj0gbWxpbSkgPyAyOiAxOworCX0KKworCWlmICgobWxpbSA9IHhkbF9ib2dvc3FydCh4ZGYyLT5ucmVjKSkgPiBYRExfTUFYX0VRTElNSVQpCisJCW1saW0gPSBYRExfTUFYX0VRTElNSVQ7CisJZm9yIChpID0geGRmMi0+ZHN0YXJ0LCByZWNzID0gJnhkZjItPnJlY3NbeGRmMi0+ZHN0YXJ0XTsgaSA8PSB4ZGYyLT5kZW5kOyBpKyssIHJlY3MrKykgeworCQlyY3JlYyA9IGNmLT5yY3JlY3NbKCpyZWNzKS0+aGFdOworCQlubSA9IHJjcmVjID8gcmNyZWMtPmxlbjEgOiAwOworCQlkaXMyW2ldID0gKG5tID09IDApID8gMDogKG5tID49IG1saW0pID8gMjogMTsKKwl9CisKKwlmb3IgKG5yZWZmID0gMCwgaSA9IHhkZjEtPmRzdGFydCwgcmVjcyA9ICZ4ZGYxLT5yZWNzW3hkZjEtPmRzdGFydF07CisJICAgICBpIDw9IHhkZjEtPmRlbmQ7IGkrKywgcmVjcysrKSB7CisJCWlmIChkaXMxW2ldID09IDEgfHwKKwkJICAgIChkaXMxW2ldID09IDIgJiYgIXhkbF9jbGVhbl9tbWF0Y2goZGlzMSwgaSwgeGRmMS0+ZHN0YXJ0LCB4ZGYxLT5kZW5kKSkpIHsKKwkJCXhkZjEtPnJpbmRleFtucmVmZl0gPSBpOworCQkJeGRmMS0+aGFbbnJlZmZdID0gKCpyZWNzKS0+aGE7CisJCQlucmVmZisrOworCQl9IGVsc2UKKwkJCXhkZjEtPnJjaGdbaV0gPSAxOworCX0KKwl4ZGYxLT5ucmVmZiA9IG5yZWZmOworCisJZm9yIChucmVmZiA9IDAsIGkgPSB4ZGYyLT5kc3RhcnQsIHJlY3MgPSAmeGRmMi0+cmVjc1t4ZGYyLT5kc3RhcnRdOworCSAgICAgaSA8PSB4ZGYyLT5kZW5kOyBpKyssIHJlY3MrKykgeworCQlpZiAoZGlzMltpXSA9PSAxIHx8CisJCSAgICAoZGlzMltpXSA9PSAyICYmICF4ZGxfY2xlYW5fbW1hdGNoKGRpczIsIGksIHhkZjItPmRzdGFydCwgeGRmMi0+ZGVuZCkpKSB7CisJCQl4ZGYyLT5yaW5kZXhbbnJlZmZdID0gaTsKKwkJCXhkZjItPmhhW25yZWZmXSA9ICgqcmVjcyktPmhhOworCQkJbnJlZmYrKzsKKwkJfSBlbHNlCisJCQl4ZGYyLT5yY2hnW2ldID0gMTsKKwl9CisJeGRmMi0+bnJlZmYgPSBucmVmZjsKKworCXhkbF9mcmVlKGRpcyk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogRWFybHkgdHJpbSBpbml0aWFsIGFuZCB0ZXJtaW5hbCBtYXRjaGluZyByZWNvcmRzLgorICovCitzdGF0aWMgaW50IHhkbF90cmltX2VuZHMoeGRmaWxlX3QgKnhkZjEsIHhkZmlsZV90ICp4ZGYyKSB7CisJbG9uZyBpLCBsaW07CisJeHJlY29yZF90ICoqcmVjczEsICoqcmVjczI7CisKKwlyZWNzMSA9IHhkZjEtPnJlY3M7CisJcmVjczIgPSB4ZGYyLT5yZWNzOworCWZvciAoaSA9IDAsIGxpbSA9IFhETF9NSU4oeGRmMS0+bnJlYywgeGRmMi0+bnJlYyk7IGkgPCBsaW07CisJICAgICBpKyssIHJlY3MxKyssIHJlY3MyKyspCisJCWlmICgoKnJlY3MxKS0+aGEgIT0gKCpyZWNzMiktPmhhKQorCQkJYnJlYWs7CisKKwl4ZGYxLT5kc3RhcnQgPSB4ZGYyLT5kc3RhcnQgPSBpOworCisJcmVjczEgPSB4ZGYxLT5yZWNzICsgeGRmMS0+bnJlYyAtIDE7CisJcmVjczIgPSB4ZGYyLT5yZWNzICsgeGRmMi0+bnJlYyAtIDE7CisJZm9yIChsaW0gLT0gaSwgaSA9IDA7IGkgPCBsaW07IGkrKywgcmVjczEtLSwgcmVjczItLSkKKwkJaWYgKCgqcmVjczEpLT5oYSAhPSAoKnJlY3MyKS0+aGEpCisJCQlicmVhazsKKworCXhkZjEtPmRlbmQgPSB4ZGYxLT5ucmVjIC0gaSAtIDE7CisJeGRmMi0+ZGVuZCA9IHhkZjItPm5yZWMgLSBpIC0gMTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgeGRsX29wdGltaXplX2N0eHMoeGRsY2xhc3NpZmllcl90ICpjZiwgeGRmaWxlX3QgKnhkZjEsIHhkZmlsZV90ICp4ZGYyKSB7CisKKwlpZiAoeGRsX3RyaW1fZW5kcyh4ZGYxLCB4ZGYyKSA8IDAgfHwKKwkgICAgeGRsX2NsZWFudXBfcmVjb3JkcyhjZiwgeGRmMSwgeGRmMikgPCAwKSB7CisKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEveGRpZmYveHByZXBhcmUuaCBiL3hkaWZmL3hwcmVwYXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3ZDlmYwotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hwcmVwYXJlLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMyAgRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZQorICogIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWYgIWRlZmluZWQoWFBSRVBBUkVfSCkKKyNkZWZpbmUgWFBSRVBBUkVfSAorCisKKworaW50IHhkbF9wcmVwYXJlX2VudihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkJICAgIHhkZmVudl90ICp4ZSk7Cit2b2lkIHhkbF9mcmVlX2Vudih4ZGZlbnZfdCAqeGUpOworCisKKworI2VuZGlmIC8qICNpZiAhZGVmaW5lZChYUFJFUEFSRV9IKSAqLwpkaWZmIC0tZ2l0IGEveGRpZmYveHR5cGVzLmggYi94ZGlmZi94dHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDQyYmQ0Ci0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveHR5cGVzLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMyAgRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZQorICogIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWYgIWRlZmluZWQoWFRZUEVTX0gpCisjZGVmaW5lIFhUWVBFU19ICisKKworCit0eXBlZGVmIHN0cnVjdCBzX2NoYW5vZGUgeworCXN0cnVjdCBzX2NoYW5vZGUgKm5leHQ7CisJbG9uZyBpY3VycjsKK30gY2hhbm9kZV90OworCit0eXBlZGVmIHN0cnVjdCBzX2NoYXN0b3JlIHsKKwljaGFub2RlX3QgKmhlYWQsICp0YWlsOworCWxvbmcgaXNpemUsIG5zaXplOworCWNoYW5vZGVfdCAqYW5jdXI7CisJY2hhbm9kZV90ICpzbmN1cjsKKwlsb25nIHNjdXJyOworfSBjaGFzdG9yZV90OworCit0eXBlZGVmIHN0cnVjdCBzX3hyZWNvcmQgeworCXN0cnVjdCBzX3hyZWNvcmQgKm5leHQ7CisJY2hhciBjb25zdCAqcHRyOworCWxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGhhOworfSB4cmVjb3JkX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNfeGRmaWxlIHsKKwljaGFzdG9yZV90IHJjaGE7CisJbG9uZyBucmVjOworCXVuc2lnbmVkIGludCBoYml0czsKKwl4cmVjb3JkX3QgKipyaGFzaDsKKwlsb25nIGRzdGFydCwgZGVuZDsKKwl4cmVjb3JkX3QgKipyZWNzOworCWNoYXIgKnJjaGc7CisJbG9uZyAqcmluZGV4OworCWxvbmcgbnJlZmY7CisJdW5zaWduZWQgbG9uZyAqaGE7Cit9IHhkZmlsZV90OworCit0eXBlZGVmIHN0cnVjdCBzX3hkZmVudiB7CisJeGRmaWxlX3QgeGRmMSwgeGRmMjsKK30geGRmZW52X3Q7CisKKworCisjZW5kaWYgLyogI2lmICFkZWZpbmVkKFhUWVBFU19IKSAqLwpkaWZmIC0tZ2l0IGEveGRpZmYveHV0aWxzLmMgYi94ZGlmZi94dXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmE2ZTIyCi0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveHV0aWxzLmMKQEAgLTAsMCArMSw0MzQgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMJRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZQorICogIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaW5jbHVkZSAieGluY2x1ZGUuaCIKKworCitsb25nIHhkbF9ib2dvc3FydChsb25nIG4pIHsKKwlsb25nIGk7CisKKwkvKgorCSAqIENsYXNzaWNhbCBpbnRlZ2VyIHNxdWFyZSByb290IGFwcHJveGltYXRpb24gdXNpbmcgc2hpZnRzLgorCSAqLworCWZvciAoaSA9IDE7IG4gPiAwOyBuID4+PSAyKQorCQlpIDw8PSAxOworCisJcmV0dXJuIGk7Cit9CisKKworaW50IHhkbF9lbWl0X2RpZmZyZWMoY2hhciBjb25zdCAqcmVjLCBsb25nIHNpemUsIGNoYXIgY29uc3QgKnByZSwgbG9uZyBwc2l6ZSwKKwkJICAgICB4ZGVtaXRjYl90ICplY2IpIHsKKwlpbnQgaSA9IDI7CisJbW1idWZmZXJfdCBtYlszXTsKKworCW1iWzBdLnB0ciA9IChjaGFyICopIHByZTsKKwltYlswXS5zaXplID0gcHNpemU7CisJbWJbMV0ucHRyID0gKGNoYXIgKikgcmVjOworCW1iWzFdLnNpemUgPSBzaXplOworCWlmIChzaXplID4gMCAmJiByZWNbc2l6ZSAtIDFdICE9ICdcbicpIHsKKwkJbWJbMl0ucHRyID0gKGNoYXIgKikgIlxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuIjsKKwkJbWJbMl0uc2l6ZSA9IHN0cmxlbihtYlsyXS5wdHIpOworCQlpKys7CisJfQorCWlmIChlY2ItPm91dF9saW5lKGVjYi0+cHJpdiwgbWIsIGkpIDwgMCkgeworCisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCAqeGRsX21tZmlsZV9maXJzdChtbWZpbGVfdCAqbW1mLCBsb25nICpzaXplKQoreworCSpzaXplID0gbW1mLT5zaXplOworCXJldHVybiBtbWYtPnB0cjsKK30KKworCitsb25nIHhkbF9tbWZpbGVfc2l6ZShtbWZpbGVfdCAqbW1mKQoreworCXJldHVybiBtbWYtPnNpemU7Cit9CisKKworaW50IHhkbF9jaGFfaW5pdChjaGFzdG9yZV90ICpjaGEsIGxvbmcgaXNpemUsIGxvbmcgaWNvdW50KSB7CisKKwljaGEtPmhlYWQgPSBjaGEtPnRhaWwgPSBOVUxMOworCWNoYS0+aXNpemUgPSBpc2l6ZTsKKwljaGEtPm5zaXplID0gaWNvdW50ICogaXNpemU7CisJY2hhLT5hbmN1ciA9IGNoYS0+c25jdXIgPSBOVUxMOworCWNoYS0+c2N1cnIgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKwordm9pZCB4ZGxfY2hhX2ZyZWUoY2hhc3RvcmVfdCAqY2hhKSB7CisJY2hhbm9kZV90ICpjdXIsICp0bXA7CisKKwlmb3IgKGN1ciA9IGNoYS0+aGVhZDsgKHRtcCA9IGN1cikgIT0gTlVMTDspIHsKKwkJY3VyID0gY3VyLT5uZXh0OworCQl4ZGxfZnJlZSh0bXApOworCX0KK30KKworCit2b2lkICp4ZGxfY2hhX2FsbG9jKGNoYXN0b3JlX3QgKmNoYSkgeworCWNoYW5vZGVfdCAqYW5jdXI7CisJdm9pZCAqZGF0YTsKKworCWlmICghKGFuY3VyID0gY2hhLT5hbmN1cikgfHwgYW5jdXItPmljdXJyID09IGNoYS0+bnNpemUpIHsKKwkJaWYgKCEoYW5jdXIgPSAoY2hhbm9kZV90ICopIHhkbF9tYWxsb2Moc2l6ZW9mKGNoYW5vZGVfdCkgKyBjaGEtPm5zaXplKSkpIHsKKworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJYW5jdXItPmljdXJyID0gMDsKKwkJYW5jdXItPm5leHQgPSBOVUxMOworCQlpZiAoY2hhLT50YWlsKQorCQkJY2hhLT50YWlsLT5uZXh0ID0gYW5jdXI7CisJCWlmICghY2hhLT5oZWFkKQorCQkJY2hhLT5oZWFkID0gYW5jdXI7CisJCWNoYS0+dGFpbCA9IGFuY3VyOworCQljaGEtPmFuY3VyID0gYW5jdXI7CisJfQorCisJZGF0YSA9IChjaGFyICopIGFuY3VyICsgc2l6ZW9mKGNoYW5vZGVfdCkgKyBhbmN1ci0+aWN1cnI7CisJYW5jdXItPmljdXJyICs9IGNoYS0+aXNpemU7CisKKwlyZXR1cm4gZGF0YTsKK30KKworbG9uZyB4ZGxfZ3Vlc3NfbGluZXMobW1maWxlX3QgKm1mLCBsb25nIHNhbXBsZSkgeworCWxvbmcgbmwgPSAwLCBzaXplLCB0c2l6ZSA9IDA7CisJY2hhciBjb25zdCAqZGF0YSwgKmN1ciwgKnRvcDsKKworCWlmICgoY3VyID0gZGF0YSA9IHhkbF9tbWZpbGVfZmlyc3QobWYsICZzaXplKSkgIT0gTlVMTCkgeworCQlmb3IgKHRvcCA9IGRhdGEgKyBzaXplOyBubCA8IHNhbXBsZSAmJiBjdXIgPCB0b3A7ICkgeworCQkJbmwrKzsKKwkJCWlmICghKGN1ciA9IG1lbWNocihjdXIsICdcbicsIHRvcCAtIGN1cikpKQorCQkJCWN1ciA9IHRvcDsKKwkJCWVsc2UKKwkJCQljdXIrKzsKKwkJfQorCQl0c2l6ZSArPSAobG9uZykgKGN1ciAtIGRhdGEpOworCX0KKworCWlmIChubCAmJiB0c2l6ZSkKKwkJbmwgPSB4ZGxfbW1maWxlX3NpemUobWYpIC8gKHRzaXplIC8gbmwpOworCisJcmV0dXJuIG5sICsgMTsKK30KKworaW50IHhkbF9ibGFua2xpbmUoY29uc3QgY2hhciAqbGluZSwgbG9uZyBzaXplLCBsb25nIGZsYWdzKQoreworCWxvbmcgaTsKKworCWlmICghKGZsYWdzICYgWERGX1dISVRFU1BBQ0VfRkxBR1MpKQorCQlyZXR1cm4gKHNpemUgPD0gMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAmJiBYRExfSVNTUEFDRShsaW5lW2ldKTsgaSsrKQorCQk7CisKKwlyZXR1cm4gKGkgPT0gc2l6ZSk7Cit9CisKKy8qCisgKiBIYXZlIHdlIGVhdGVuIGV2ZXJ5dGhpbmcgb24gdGhlIGxpbmUsIGV4Y2VwdCBmb3IgYW4gb3B0aW9uYWwKKyAqIENSIGF0IHRoZSB2ZXJ5IGVuZD8KKyAqLworc3RhdGljIGludCBlbmRzX3dpdGhfb3B0aW9uYWxfY3IoY29uc3QgY2hhciAqbCwgbG9uZyBzLCBsb25nIGkpCit7CisJaW50IGNvbXBsZXRlID0gcyAmJiBsW3MtMV0gPT0gJ1xuJzsKKworCWlmIChjb21wbGV0ZSkKKwkJcy0tOworCWlmIChzID09IGkpCisJCXJldHVybiAxOworCS8qIGRvIG5vdCBpZ25vcmUgQ1IgYXQgdGhlIGVuZCBvZiBhbiBpbmNvbXBsZXRlIGxpbmUgKi8KKwlpZiAoY29tcGxldGUgJiYgcyA9PSBpICsgMSAmJiBsW2ldID09ICdccicpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitpbnQgeGRsX3JlY21hdGNoKGNvbnN0IGNoYXIgKmwxLCBsb25nIHMxLCBjb25zdCBjaGFyICpsMiwgbG9uZyBzMiwgbG9uZyBmbGFncykKK3sKKwlpbnQgaTEsIGkyOworCisJaWYgKHMxID09IHMyICYmICFtZW1jbXAobDEsIGwyLCBzMSkpCisJCXJldHVybiAxOworCWlmICghKGZsYWdzICYgWERGX1dISVRFU1BBQ0VfRkxBR1MpKQorCQlyZXR1cm4gMDsKKworCWkxID0gMDsKKwlpMiA9IDA7CisKKwkvKgorCSAqIC13IG1hdGNoZXMgZXZlcnl0aGluZyB0aGF0IG1hdGNoZXMgd2l0aCAtYiwgYW5kIC1iIGluIHR1cm4KKwkgKiBtYXRjaGVzIGV2ZXJ5dGhpbmcgdGhhdCBtYXRjaGVzIHdpdGggLS1pZ25vcmUtc3BhY2UtYXQtZW9sLAorCSAqIHdoaWNoIGluIHR1cm4gbWF0Y2hlcyBldmVyeXRoaW5nIHRoYXQgbWF0Y2hlcyB3aXRoIC0taWdub3JlLWNyLWF0LWVvbC4KKwkgKgorCSAqIEVhY2ggZmxhdm9yIG9mIGlnbm9yaW5nIG5lZWRzIGRpZmZlcmVudCBsb2dpYyB0byBza2lwIHdoaXRlc3BhY2VzCisJICogd2hpbGUgd2UgaGF2ZSBib3RoIHNpZGVzIHRvIGNvbXBhcmUuCisJICovCisJaWYgKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFKSB7CisJCWdvdG8gc2tpcF93czsKKwkJd2hpbGUgKGkxIDwgczEgJiYgaTIgPCBzMikgeworCQkJaWYgKGwxW2kxKytdICE9IGwyW2kyKytdKQorCQkJCXJldHVybiAwOworCQlza2lwX3dzOgorCQkJd2hpbGUgKGkxIDwgczEgJiYgWERMX0lTU1BBQ0UobDFbaTFdKSkKKwkJCQlpMSsrOworCQkJd2hpbGUgKGkyIDwgczIgJiYgWERMX0lTU1BBQ0UobDJbaTJdKSkKKwkJCQlpMisrOworCQl9CisJfSBlbHNlIGlmIChmbGFncyAmIFhERl9JR05PUkVfV0hJVEVTUEFDRV9DSEFOR0UpIHsKKwkJd2hpbGUgKGkxIDwgczEgJiYgaTIgPCBzMikgeworCQkJaWYgKFhETF9JU1NQQUNFKGwxW2kxXSkgJiYgWERMX0lTU1BBQ0UobDJbaTJdKSkgeworCQkJCS8qIFNraXAgbWF0Y2hpbmcgc3BhY2VzIGFuZCB0cnkgYWdhaW4gKi8KKwkJCQl3aGlsZSAoaTEgPCBzMSAmJiBYRExfSVNTUEFDRShsMVtpMV0pKQorCQkJCQlpMSsrOworCQkJCXdoaWxlIChpMiA8IHMyICYmIFhETF9JU1NQQUNFKGwyW2kyXSkpCisJCQkJCWkyKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAobDFbaTErK10gIT0gbDJbaTIrK10pCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgaWYgKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFX0FUX0VPTCkgeworCQl3aGlsZSAoaTEgPCBzMSAmJiBpMiA8IHMyICYmIGwxW2kxXSA9PSBsMltpMl0pIHsKKwkJCWkxKys7CisJCQlpMisrOworCQl9CisJfSBlbHNlIGlmIChmbGFncyAmIFhERl9JR05PUkVfQ1JfQVRfRU9MKSB7CisJCS8qIEZpbmQgdGhlIGZpcnN0IGRpZmZlcmVuY2UgYW5kIHNlZSBob3cgdGhlIGxpbmUgZW5kcyAqLworCQl3aGlsZSAoaTEgPCBzMSAmJiBpMiA8IHMyICYmIGwxW2kxXSA9PSBsMltpMl0pIHsKKwkJCWkxKys7CisJCQlpMisrOworCQl9CisJCXJldHVybiAoZW5kc193aXRoX29wdGlvbmFsX2NyKGwxLCBzMSwgaTEpICYmCisJCQllbmRzX3dpdGhfb3B0aW9uYWxfY3IobDIsIHMyLCBpMikpOworCX0KKworCS8qCisJICogQWZ0ZXIgcnVubmluZyBvdXQgb2Ygb25lIHNpZGUsIHRoZSByZW1haW5pbmcgc2lkZSBtdXN0IGhhdmUKKwkgKiBub3RoaW5nIGJ1dCB3aGl0ZXNwYWNlIGZvciB0aGUgbGluZXMgdG8gbWF0Y2guICBOb3RlIHRoYXQKKwkgKiBpZ25vcmUtd2hpdGVzcGFjZS1hdC1lb2wgY2FzZSBtYXkgYnJlYWsgb3V0IG9mIHRoZSBsb29wCisJICogd2hpbGUgdGhlcmUgc3RpbGwgYXJlIGNoYXJhY3RlcnMgcmVtYWluaW5nIG9uIGJvdGggbGluZXMuCisJICovCisJaWYgKGkxIDwgczEpIHsKKwkJd2hpbGUgKGkxIDwgczEgJiYgWERMX0lTU1BBQ0UobDFbaTFdKSkKKwkJCWkxKys7CisJCWlmIChzMSAhPSBpMSkKKwkJCXJldHVybiAwOworCX0KKwlpZiAoaTIgPCBzMikgeworCQl3aGlsZSAoaTIgPCBzMiAmJiBYRExfSVNTUEFDRShsMltpMl0pKQorCQkJaTIrKzsKKwkJcmV0dXJuIChzMiA9PSBpMik7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB4ZGxfaGFzaF9yZWNvcmRfd2l0aF93aGl0ZXNwYWNlKGNoYXIgY29uc3QgKipkYXRhLAorCQljaGFyIGNvbnN0ICp0b3AsIGxvbmcgZmxhZ3MpIHsKKwl1bnNpZ25lZCBsb25nIGhhID0gNTM4MTsKKwljaGFyIGNvbnN0ICpwdHIgPSAqZGF0YTsKKwlpbnQgY3JfYXRfZW9sX29ubHkgPSAoZmxhZ3MgJiBYREZfV0hJVEVTUEFDRV9GTEFHUykgPT0gWERGX0lHTk9SRV9DUl9BVF9FT0w7CisKKwlmb3IgKDsgcHRyIDwgdG9wICYmICpwdHIgIT0gJ1xuJzsgcHRyKyspIHsKKwkJaWYgKGNyX2F0X2VvbF9vbmx5KSB7CisJCQkvKiBkbyBub3QgaWdub3JlIENSIGF0IHRoZSBlbmQgb2YgYW4gaW5jb21wbGV0ZSBsaW5lICovCisJCQlpZiAoKnB0ciA9PSAnXHInICYmCisJCQkgICAgKHB0ciArIDEgPCB0b3AgJiYgcHRyWzFdID09ICdcbicpKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKFhETF9JU1NQQUNFKCpwdHIpKSB7CisJCQljb25zdCBjaGFyICpwdHIyID0gcHRyOworCQkJaW50IGF0X2VvbDsKKwkJCXdoaWxlIChwdHIgKyAxIDwgdG9wICYmIFhETF9JU1NQQUNFKHB0clsxXSkKKwkJCQkJJiYgcHRyWzFdICE9ICdcbicpCisJCQkJcHRyKys7CisJCQlhdF9lb2wgPSAodG9wIDw9IHB0ciArIDEgfHwgcHRyWzFdID09ICdcbicpOworCQkJaWYgKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFKQorCQkJCTsgLyogYWxyZWFkeSBoYW5kbGVkICovCisJCQllbHNlIGlmIChmbGFncyAmIFhERl9JR05PUkVfV0hJVEVTUEFDRV9DSEFOR0UKKwkJCQkgJiYgIWF0X2VvbCkgeworCQkJCWhhICs9IChoYSA8PCA1KTsKKwkJCQloYSBePSAodW5zaWduZWQgbG9uZykgJyAnOworCQkJfQorCQkJZWxzZSBpZiAoZmxhZ3MgJiBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQVRfRU9MCisJCQkJICYmICFhdF9lb2wpIHsKKwkJCQl3aGlsZSAocHRyMiAhPSBwdHIgKyAxKSB7CisJCQkJCWhhICs9IChoYSA8PCA1KTsKKwkJCQkJaGEgXj0gKHVuc2lnbmVkIGxvbmcpICpwdHIyOworCQkJCQlwdHIyKys7CisJCQkJfQorCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaGEgKz0gKGhhIDw8IDUpOworCQloYSBePSAodW5zaWduZWQgbG9uZykgKnB0cjsKKwl9CisJKmRhdGEgPSBwdHIgPCB0b3AgPyBwdHIgKyAxOiBwdHI7CisKKwlyZXR1cm4gaGE7Cit9CisKK3Vuc2lnbmVkIGxvbmcgeGRsX2hhc2hfcmVjb3JkKGNoYXIgY29uc3QgKipkYXRhLCBjaGFyIGNvbnN0ICp0b3AsIGxvbmcgZmxhZ3MpIHsKKwl1bnNpZ25lZCBsb25nIGhhID0gNTM4MTsKKwljaGFyIGNvbnN0ICpwdHIgPSAqZGF0YTsKKworCWlmIChmbGFncyAmIFhERl9XSElURVNQQUNFX0ZMQUdTKQorCQlyZXR1cm4geGRsX2hhc2hfcmVjb3JkX3dpdGhfd2hpdGVzcGFjZShkYXRhLCB0b3AsIGZsYWdzKTsKKworCWZvciAoOyBwdHIgPCB0b3AgJiYgKnB0ciAhPSAnXG4nOyBwdHIrKykgeworCQloYSArPSAoaGEgPDwgNSk7CisJCWhhIF49ICh1bnNpZ25lZCBsb25nKSAqcHRyOworCX0KKwkqZGF0YSA9IHB0ciA8IHRvcCA/IHB0ciArIDE6IHB0cjsKKworCXJldHVybiBoYTsKK30KKwordW5zaWduZWQgaW50IHhkbF9oYXNoYml0cyh1bnNpZ25lZCBpbnQgc2l6ZSkgeworCXVuc2lnbmVkIGludCB2YWwgPSAxLCBiaXRzID0gMDsKKworCWZvciAoOyB2YWwgPCBzaXplICYmIGJpdHMgPCBDSEFSX0JJVCAqIHNpemVvZih1bnNpZ25lZCBpbnQpOyB2YWwgPDw9IDEsIGJpdHMrKyk7CisJcmV0dXJuIGJpdHMgPyBiaXRzOiAxOworfQorCisKK2ludCB4ZGxfbnVtX291dChjaGFyICpvdXQsIGxvbmcgdmFsKSB7CisJY2hhciAqcHRyLCAqc3RyID0gb3V0OworCWNoYXIgYnVmWzMyXTsKKworCXB0ciA9IGJ1ZiArIHNpemVvZihidWYpIC0gMTsKKwkqcHRyID0gJ1wwJzsKKwlpZiAodmFsIDwgMCkgeworCQkqLS1wdHIgPSAnLSc7CisJCXZhbCA9IC12YWw7CisJfQorCWZvciAoOyB2YWwgJiYgcHRyID4gYnVmOyB2YWwgLz0gMTApCisJCSotLXB0ciA9ICIwMTIzNDU2Nzg5Ilt2YWwgJSAxMF07CisJaWYgKCpwdHIpCisJCWZvciAoOyAqcHRyOyBwdHIrKywgc3RyKyspCisJCQkqc3RyID0gKnB0cjsKKwllbHNlCisJCSpzdHIrKyA9ICcwJzsKKwkqc3RyID0gJ1wwJzsKKworCXJldHVybiBzdHIgLSBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgeGRsX2Zvcm1hdF9odW5rX2hkcihsb25nIHMxLCBsb25nIGMxLCBsb25nIHMyLCBsb25nIGMyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmZ1bmMsIGxvbmcgZnVuY2xlbiwKKwkJCSAgICAgICB4ZGVtaXRjYl90ICplY2IpIHsKKwlpbnQgbmIgPSAwOworCW1tYnVmZmVyX3QgbWI7CisJY2hhciBidWZbMTI4XTsKKworCW1lbWNweShidWYsICJAQCAtIiwgNCk7CisJbmIgKz0gNDsKKworCW5iICs9IHhkbF9udW1fb3V0KGJ1ZiArIG5iLCBjMSA/IHMxOiBzMSAtIDEpOworCisJaWYgKGMxICE9IDEpIHsKKwkJbWVtY3B5KGJ1ZiArIG5iLCAiLCIsIDEpOworCQluYiArPSAxOworCisJCW5iICs9IHhkbF9udW1fb3V0KGJ1ZiArIG5iLCBjMSk7CisJfQorCisJbWVtY3B5KGJ1ZiArIG5iLCAiICsiLCAyKTsKKwluYiArPSAyOworCisJbmIgKz0geGRsX251bV9vdXQoYnVmICsgbmIsIGMyID8gczI6IHMyIC0gMSk7CisKKwlpZiAoYzIgIT0gMSkgeworCQltZW1jcHkoYnVmICsgbmIsICIsIiwgMSk7CisJCW5iICs9IDE7CisKKwkJbmIgKz0geGRsX251bV9vdXQoYnVmICsgbmIsIGMyKTsKKwl9CisKKwltZW1jcHkoYnVmICsgbmIsICIgQEAiLCAzKTsKKwluYiArPSAzOworCWlmIChmdW5jICYmIGZ1bmNsZW4pIHsKKwkJYnVmW25iKytdID0gJyAnOworCQlpZiAoZnVuY2xlbiA+IHNpemVvZihidWYpIC0gbmIgLSAxKQorCQkJZnVuY2xlbiA9IHNpemVvZihidWYpIC0gbmIgLSAxOworCQltZW1jcHkoYnVmICsgbmIsIGZ1bmMsIGZ1bmNsZW4pOworCQluYiArPSBmdW5jbGVuOworCX0KKwlidWZbbmIrK10gPSAnXG4nOworCisJbWIucHRyID0gYnVmOworCW1iLnNpemUgPSBuYjsKKwlpZiAoZWNiLT5vdXRfbGluZShlY2ItPnByaXYsICZtYiwgMSkgPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK2ludCB4ZGxfZW1pdF9odW5rX2hkcihsb25nIHMxLCBsb25nIGMxLCBsb25nIHMyLCBsb25nIGMyLAorCQkgICAgICBjb25zdCBjaGFyICpmdW5jLCBsb25nIGZ1bmNsZW4sCisJCSAgICAgIHhkZW1pdGNiX3QgKmVjYikgeworCWlmICghZWNiLT5vdXRfaHVuaykKKwkJcmV0dXJuIHhkbF9mb3JtYXRfaHVua19oZHIoczEsIGMxLCBzMiwgYzIsIGZ1bmMsIGZ1bmNsZW4sIGVjYik7CisJaWYgKGVjYi0+b3V0X2h1bmsoZWNiLT5wcml2LAorCQkJICBjMSA/IHMxIDogczEgLSAxLCBjMSwKKwkJCSAgYzIgPyBzMiA6IHMyIC0gMSwgYzIsCisJCQkgIGZ1bmMsIGZ1bmNsZW4pIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitpbnQgeGRsX2ZhbGxfYmFja19kaWZmKHhkZmVudl90ICpkaWZmX2VudiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCS8qCisJICogVGhpcyBwcm9iYWJseSBkb2VzIG5vdCB3b3JrIG91dHNpZGUgR2l0LCBzaW5jZQorCSAqIHdlIGhhdmUgYSB2ZXJ5IHNpbXBsZSBtbWZpbGUgc3RydWN0dXJlLgorCSAqCisJICogTm90ZTogaWRlYWxseSwgd2Ugd291bGQgcmV1c2UgdGhlIHByZXBhcmVkIGVudmlyb25tZW50LCBidXQKKwkgKiB0aGUgbGlieGRpZmYgaW50ZXJmYWNlIGRvZXMgbm90ICh5ZXQpIGFsbG93IGZvciBkaWZmaW5nIG9ubHkKKwkgKiByYW5nZXMgb2YgbGluZXMgaW5zdGVhZCBvZiB0aGUgd2hvbGUgZmlsZXMuCisJICovCisJbW1maWxlX3Qgc3ViZmlsZTEsIHN1YmZpbGUyOworCXhkZmVudl90IGVudjsKKworCXN1YmZpbGUxLnB0ciA9IChjaGFyICopZGlmZl9lbnYtPnhkZjEucmVjc1tsaW5lMSAtIDFdLT5wdHI7CisJc3ViZmlsZTEuc2l6ZSA9IGRpZmZfZW52LT54ZGYxLnJlY3NbbGluZTEgKyBjb3VudDEgLSAyXS0+cHRyICsKKwkJZGlmZl9lbnYtPnhkZjEucmVjc1tsaW5lMSArIGNvdW50MSAtIDJdLT5zaXplIC0gc3ViZmlsZTEucHRyOworCXN1YmZpbGUyLnB0ciA9IChjaGFyICopZGlmZl9lbnYtPnhkZjIucmVjc1tsaW5lMiAtIDFdLT5wdHI7CisJc3ViZmlsZTIuc2l6ZSA9IGRpZmZfZW52LT54ZGYyLnJlY3NbbGluZTIgKyBjb3VudDIgLSAyXS0+cHRyICsKKwkJZGlmZl9lbnYtPnhkZjIucmVjc1tsaW5lMiArIGNvdW50MiAtIDJdLT5zaXplIC0gc3ViZmlsZTIucHRyOworCWlmICh4ZGxfZG9fZGlmZigmc3ViZmlsZTEsICZzdWJmaWxlMiwgeHBwLCAmZW52KSA8IDApCisJCXJldHVybiAtMTsKKworCW1lbWNweShkaWZmX2Vudi0+eGRmMS5yY2hnICsgbGluZTEgLSAxLCBlbnYueGRmMS5yY2hnLCBjb3VudDEpOworCW1lbWNweShkaWZmX2Vudi0+eGRmMi5yY2hnICsgbGluZTIgLSAxLCBlbnYueGRmMi5yY2hnLCBjb3VudDIpOworCisJeGRsX2ZyZWVfZW52KCZlbnYpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS94ZGlmZi94dXRpbHMuaCBiL3hkaWZmL3h1dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYTdiYWUKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94dXRpbHMuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgc2VlCisgKiAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisKKyNpZiAhZGVmaW5lZChYVVRJTFNfSCkKKyNkZWZpbmUgWFVUSUxTX0gKKworCisKK2xvbmcgeGRsX2JvZ29zcXJ0KGxvbmcgbik7CitpbnQgeGRsX2VtaXRfZGlmZnJlYyhjaGFyIGNvbnN0ICpyZWMsIGxvbmcgc2l6ZSwgY2hhciBjb25zdCAqcHJlLCBsb25nIHBzaXplLAorCQkgICAgIHhkZW1pdGNiX3QgKmVjYik7CitpbnQgeGRsX2NoYV9pbml0KGNoYXN0b3JlX3QgKmNoYSwgbG9uZyBpc2l6ZSwgbG9uZyBpY291bnQpOwordm9pZCB4ZGxfY2hhX2ZyZWUoY2hhc3RvcmVfdCAqY2hhKTsKK3ZvaWQgKnhkbF9jaGFfYWxsb2MoY2hhc3RvcmVfdCAqY2hhKTsKK2xvbmcgeGRsX2d1ZXNzX2xpbmVzKG1tZmlsZV90ICptZiwgbG9uZyBzYW1wbGUpOworaW50IHhkbF9ibGFua2xpbmUoY29uc3QgY2hhciAqbGluZSwgbG9uZyBzaXplLCBsb25nIGZsYWdzKTsKK2ludCB4ZGxfcmVjbWF0Y2goY29uc3QgY2hhciAqbDEsIGxvbmcgczEsIGNvbnN0IGNoYXIgKmwyLCBsb25nIHMyLCBsb25nIGZsYWdzKTsKK3Vuc2lnbmVkIGxvbmcgeGRsX2hhc2hfcmVjb3JkKGNoYXIgY29uc3QgKipkYXRhLCBjaGFyIGNvbnN0ICp0b3AsIGxvbmcgZmxhZ3MpOwordW5zaWduZWQgaW50IHhkbF9oYXNoYml0cyh1bnNpZ25lZCBpbnQgc2l6ZSk7CitpbnQgeGRsX251bV9vdXQoY2hhciAqb3V0LCBsb25nIHZhbCk7CitpbnQgeGRsX2VtaXRfaHVua19oZHIobG9uZyBzMSwgbG9uZyBjMSwgbG9uZyBzMiwgbG9uZyBjMiwKKwkJICAgICAgY29uc3QgY2hhciAqZnVuYywgbG9uZyBmdW5jbGVuLCB4ZGVtaXRjYl90ICplY2IpOworaW50IHhkbF9mYWxsX2JhY2tfZGlmZih4ZGZlbnZfdCAqZGlmZl9lbnYsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCQkgICAgICAgaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpOworCisKKworI2VuZGlmIC8qICNpZiAhZGVmaW5lZChYVVRJTFNfSCkgKi8KZGlmZiAtLWdpdCBhL3psaWIuYyBiL3psaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTk0Y2JhCi0tLSAvZGV2L251bGwKKysrIGIvemxpYi5jCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogemxpYiB3cmFwcGVycyB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc2lsZW50bHkgbWlzcyBlcnJvcnMKKyAqIGF0IGluaXQgdGltZS4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICp6ZXJyX3RvX3N0cmluZyhpbnQgc3RhdHVzKQoreworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBaX01FTV9FUlJPUjoKKwkJcmV0dXJuICJvdXQgb2YgbWVtb3J5IjsKKwljYXNlIFpfVkVSU0lPTl9FUlJPUjoKKwkJcmV0dXJuICJ3cm9uZyB2ZXJzaW9uIjsKKwljYXNlIFpfTkVFRF9ESUNUOgorCQlyZXR1cm4gIm5lZWRzIGRpY3Rpb25hcnkiOworCWNhc2UgWl9EQVRBX0VSUk9SOgorCQlyZXR1cm4gImRhdGEgc3RyZWFtIGVycm9yIjsKKwljYXNlIFpfU1RSRUFNX0VSUk9SOgorCQlyZXR1cm4gInN0cmVhbSBjb25zaXN0ZW5jeSBlcnJvciI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJ1bmtub3duIGVycm9yIjsKKwl9Cit9CisKKy8qCisgKiBhdmFpbF9pbiBhbmQgYXZhaWxfb3V0IGluIHpsaWIgYXJlIGNvdW50ZWQgaW4gdUludCwgd2hpY2ggdHlwaWNhbGx5CisgKiBsaW1pdHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB3ZSBjYW4gdXNlIHRvIDRHQiB3aGVuIGludGVyYWN0aW5nCisgKiB3aXRoIHpsaWIgaW4gYSBzaW5nbGUgY2FsbCB0byBpbmZsYXRlL2RlZmxhdGUuCisgKi8KKy8qICNkZWZpbmUgWkxJQl9CVUZfTUFYICgodUludCktMSkgKi8KKyNkZWZpbmUgWkxJQl9CVUZfTUFYICgodUludCkgMTAyNCAqIDEwMjQgKiAxMDI0KSAvKiAxR0IgKi8KK3N0YXRpYyBpbmxpbmUgdUludCB6bGliX2J1Zl9jYXAodW5zaWduZWQgbG9uZyBsZW4pCit7CisJcmV0dXJuIChaTElCX0JVRl9NQVggPCBsZW4pID8gWkxJQl9CVUZfTUFYIDogbGVuOworfQorCitzdGF0aWMgdm9pZCB6bGliX3ByZV9jYWxsKGdpdF96c3RyZWFtICpzKQoreworCXMtPnoubmV4dF9pbiA9IHMtPm5leHRfaW47CisJcy0+ei5uZXh0X291dCA9IHMtPm5leHRfb3V0OworCXMtPnoudG90YWxfaW4gPSBzLT50b3RhbF9pbjsKKwlzLT56LnRvdGFsX291dCA9IHMtPnRvdGFsX291dDsKKwlzLT56LmF2YWlsX2luID0gemxpYl9idWZfY2FwKHMtPmF2YWlsX2luKTsKKwlzLT56LmF2YWlsX291dCA9IHpsaWJfYnVmX2NhcChzLT5hdmFpbF9vdXQpOworfQorCitzdGF0aWMgdm9pZCB6bGliX3Bvc3RfY2FsbChnaXRfenN0cmVhbSAqcykKK3sKKwl1bnNpZ25lZCBsb25nIGJ5dGVzX2NvbnN1bWVkOworCXVuc2lnbmVkIGxvbmcgYnl0ZXNfcHJvZHVjZWQ7CisKKwlieXRlc19jb25zdW1lZCA9IHMtPnoubmV4dF9pbiAtIHMtPm5leHRfaW47CisJYnl0ZXNfcHJvZHVjZWQgPSBzLT56Lm5leHRfb3V0IC0gcy0+bmV4dF9vdXQ7CisJaWYgKHMtPnoudG90YWxfb3V0ICE9IHMtPnRvdGFsX291dCArIGJ5dGVzX3Byb2R1Y2VkKQorCQlCVUcoInRvdGFsX291dCBtaXNtYXRjaCIpOworCWlmIChzLT56LnRvdGFsX2luICE9IHMtPnRvdGFsX2luICsgYnl0ZXNfY29uc3VtZWQpCisJCUJVRygidG90YWxfaW4gbWlzbWF0Y2giKTsKKworCXMtPnRvdGFsX291dCA9IHMtPnoudG90YWxfb3V0OworCXMtPnRvdGFsX2luID0gcy0+ei50b3RhbF9pbjsKKwlzLT5uZXh0X2luID0gcy0+ei5uZXh0X2luOworCXMtPm5leHRfb3V0ID0gcy0+ei5uZXh0X291dDsKKwlzLT5hdmFpbF9pbiAtPSBieXRlc19jb25zdW1lZDsKKwlzLT5hdmFpbF9vdXQgLT0gYnl0ZXNfcHJvZHVjZWQ7Cit9CisKK3ZvaWQgZ2l0X2luZmxhdGVfaW5pdChnaXRfenN0cmVhbSAqc3RybSkKK3sKKwlpbnQgc3RhdHVzOworCisJemxpYl9wcmVfY2FsbChzdHJtKTsKKwlzdGF0dXMgPSBpbmZsYXRlSW5pdCgmc3RybS0+eik7CisJemxpYl9wb3N0X2NhbGwoc3RybSk7CisJaWYgKHN0YXR1cyA9PSBaX09LKQorCQlyZXR1cm47CisJZGllKCJpbmZsYXRlSW5pdDogJXMgKCVzKSIsIHplcnJfdG9fc3RyaW5nKHN0YXR1cyksCisJICAgIHN0cm0tPnoubXNnID8gc3RybS0+ei5tc2cgOiAibm8gbWVzc2FnZSIpOworfQorCit2b2lkIGdpdF9pbmZsYXRlX2luaXRfZ3ppcF9vbmx5KGdpdF96c3RyZWFtICpzdHJtKQoreworCS8qCisJICogVXNlIGRlZmF1bHQgMTUgYml0cywgKzE2IGlzIHRvIGFjY2VwdCBvbmx5IGd6aXAgYW5kIHRvCisJICogeWllbGQgWl9EQVRBX0VSUk9SIHdoZW4gZmVkIHpsaWIgZm9ybWF0LgorCSAqLworCWNvbnN0IGludCB3aW5kb3dCaXRzID0gMTUgKyAxNjsKKwlpbnQgc3RhdHVzOworCisJemxpYl9wcmVfY2FsbChzdHJtKTsKKwlzdGF0dXMgPSBpbmZsYXRlSW5pdDIoJnN0cm0tPnosIHdpbmRvd0JpdHMpOworCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCWlmIChzdGF0dXMgPT0gWl9PSykKKwkJcmV0dXJuOworCWRpZSgiaW5mbGF0ZUluaXQyOiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7Cit9CisKK3ZvaWQgZ2l0X2luZmxhdGVfZW5kKGdpdF96c3RyZWFtICpzdHJtKQoreworCWludCBzdGF0dXM7CisKKwl6bGliX3ByZV9jYWxsKHN0cm0pOworCXN0YXR1cyA9IGluZmxhdGVFbmQoJnN0cm0tPnopOworCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCWlmIChzdGF0dXMgPT0gWl9PSykKKwkJcmV0dXJuOworCWVycm9yKCJpbmZsYXRlRW5kOiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgICBzdHJtLT56Lm1zZyA/IHN0cm0tPnoubXNnIDogIm5vIG1lc3NhZ2UiKTsKK30KKworaW50IGdpdF9pbmZsYXRlKGdpdF96c3RyZWFtICpzdHJtLCBpbnQgZmx1c2gpCit7CisJaW50IHN0YXR1czsKKworCWZvciAoOzspIHsKKwkJemxpYl9wcmVfY2FsbChzdHJtKTsKKwkJLyogTmV2ZXIgc2F5IFpfRklOSVNIIHVubGVzcyB3ZSBhcmUgZmVlZGluZyBldmVyeXRoaW5nICovCisJCXN0YXR1cyA9IGluZmxhdGUoJnN0cm0tPnosCisJCQkJIChzdHJtLT56LmF2YWlsX2luICE9IHN0cm0tPmF2YWlsX2luKQorCQkJCSA/IDAgOiBmbHVzaCk7CisJCWlmIChzdGF0dXMgPT0gWl9NRU1fRVJST1IpCisJCQlkaWUoImluZmxhdGU6IG91dCBvZiBtZW1vcnkiKTsKKwkJemxpYl9wb3N0X2NhbGwoc3RybSk7CisKKwkJLyoKKwkJICogTGV0IHpsaWIgd29yayBhbm90aGVyIHJvdW5kLCB3aGlsZSB3ZSBjYW4gc3RpbGwKKwkJICogbWFrZSBwcm9ncmVzcy4KKwkJICovCisJCWlmICgoc3RybS0+YXZhaWxfb3V0ICYmICFzdHJtLT56LmF2YWlsX291dCkgJiYKKwkJICAgIChzdGF0dXMgPT0gWl9PSyB8fCBzdGF0dXMgPT0gWl9CVUZfRVJST1IpKQorCQkJY29udGludWU7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoc3RhdHVzKSB7CisJLyogWl9CVUZfRVJST1I6IG5vcm1hbCwgbmVlZHMgbW9yZSBzcGFjZSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciAqLworCWNhc2UgWl9CVUZfRVJST1I6CisJY2FzZSBaX09LOgorCWNhc2UgWl9TVFJFQU1fRU5EOgorCQlyZXR1cm4gc3RhdHVzOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwllcnJvcigiaW5mbGF0ZTogJXMgKCVzKSIsIHplcnJfdG9fc3RyaW5nKHN0YXR1cyksCisJICAgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7CisJcmV0dXJuIHN0YXR1czsKK30KKworI2lmIGRlZmluZWQoTk9fREVGTEFURV9CT1VORCkgfHwgWkxJQl9WRVJOVU0gPCAweDEyMDAKKyNkZWZpbmUgZGVmbGF0ZUJvdW5kKGMscykgICgocykgKyAoKChzKSArIDcpID4+IDMpICsgKCgocykgKyA2MykgPj4gNikgKyAxMSkKKyNlbmRpZgorCit1bnNpZ25lZCBsb25nIGdpdF9kZWZsYXRlX2JvdW5kKGdpdF96c3RyZWFtICpzdHJtLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIGRlZmxhdGVCb3VuZCgmc3RybS0+eiwgc2l6ZSk7Cit9CisKK3ZvaWQgZ2l0X2RlZmxhdGVfaW5pdChnaXRfenN0cmVhbSAqc3RybSwgaW50IGxldmVsKQoreworCWludCBzdGF0dXM7CisKKwltZW1zZXQoc3RybSwgMCwgc2l6ZW9mKCpzdHJtKSk7CisJemxpYl9wcmVfY2FsbChzdHJtKTsKKwlzdGF0dXMgPSBkZWZsYXRlSW5pdCgmc3RybS0+eiwgbGV2ZWwpOworCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCWlmIChzdGF0dXMgPT0gWl9PSykKKwkJcmV0dXJuOworCWRpZSgiZGVmbGF0ZUluaXQ6ICVzICglcykiLCB6ZXJyX3RvX3N0cmluZyhzdGF0dXMpLAorCSAgICBzdHJtLT56Lm1zZyA/IHN0cm0tPnoubXNnIDogIm5vIG1lc3NhZ2UiKTsKK30KKworc3RhdGljIHZvaWQgZG9fZ2l0X2RlZmxhdGVfaW5pdChnaXRfenN0cmVhbSAqc3RybSwgaW50IGxldmVsLCBpbnQgd2luZG93Qml0cykKK3sKKwlpbnQgc3RhdHVzOworCisJbWVtc2V0KHN0cm0sIDAsIHNpemVvZigqc3RybSkpOworCXpsaWJfcHJlX2NhbGwoc3RybSk7CisJc3RhdHVzID0gZGVmbGF0ZUluaXQyKCZzdHJtLT56LCBsZXZlbCwKKwkJCQkgIFpfREVGTEFURUQsIHdpbmRvd0JpdHMsCisJCQkJICA4LCBaX0RFRkFVTFRfU1RSQVRFR1kpOworCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCWlmIChzdGF0dXMgPT0gWl9PSykKKwkJcmV0dXJuOworCWRpZSgiZGVmbGF0ZUluaXQyOiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7Cit9CisKK3ZvaWQgZ2l0X2RlZmxhdGVfaW5pdF9nemlwKGdpdF96c3RyZWFtICpzdHJtLCBpbnQgbGV2ZWwpCit7CisJLyoKKwkgKiBVc2UgZGVmYXVsdCAxNSBiaXRzLCArMTYgaXMgdG8gZ2VuZXJhdGUgZ3ppcCBoZWFkZXIvdHJhaWxlcgorCSAqIGluc3RlYWQgb2YgdGhlIHpsaWIgd3JhcHBlci4KKwkgKi8KKwlkb19naXRfZGVmbGF0ZV9pbml0KHN0cm0sIGxldmVsLCAxNSArIDE2KTsKK30KKwordm9pZCBnaXRfZGVmbGF0ZV9pbml0X3JhdyhnaXRfenN0cmVhbSAqc3RybSwgaW50IGxldmVsKQoreworCS8qCisJICogVXNlIGRlZmF1bHQgMTUgYml0cywgbmVnYXRlIHRoZSB2YWx1ZSB0byBnZXQgcmF3IGNvbXByZXNzZWQKKwkgKiBkYXRhIHdpdGhvdXQgemxpYiBoZWFkZXIgYW5kIHRyYWlsZXIuCisJICovCisJZG9fZ2l0X2RlZmxhdGVfaW5pdChzdHJtLCBsZXZlbCwgLTE1KTsKK30KKworaW50IGdpdF9kZWZsYXRlX2Fib3J0KGdpdF96c3RyZWFtICpzdHJtKQoreworCWludCBzdGF0dXM7CisKKwl6bGliX3ByZV9jYWxsKHN0cm0pOworCXN0YXR1cyA9IGRlZmxhdGVFbmQoJnN0cm0tPnopOworCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCXJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgZ2l0X2RlZmxhdGVfZW5kKGdpdF96c3RyZWFtICpzdHJtKQoreworCWludCBzdGF0dXMgPSBnaXRfZGVmbGF0ZV9hYm9ydChzdHJtKTsKKworCWlmIChzdGF0dXMgPT0gWl9PSykKKwkJcmV0dXJuOworCWVycm9yKCJkZWZsYXRlRW5kOiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgICBzdHJtLT56Lm1zZyA/IHN0cm0tPnoubXNnIDogIm5vIG1lc3NhZ2UiKTsKK30KKworaW50IGdpdF9kZWZsYXRlX2VuZF9nZW50bHkoZ2l0X3pzdHJlYW0gKnN0cm0pCit7CisJaW50IHN0YXR1czsKKworCXpsaWJfcHJlX2NhbGwoc3RybSk7CisJc3RhdHVzID0gZGVmbGF0ZUVuZCgmc3RybS0+eik7CisJemxpYl9wb3N0X2NhbGwoc3RybSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGdpdF9kZWZsYXRlKGdpdF96c3RyZWFtICpzdHJtLCBpbnQgZmx1c2gpCit7CisJaW50IHN0YXR1czsKKworCWZvciAoOzspIHsKKwkJemxpYl9wcmVfY2FsbChzdHJtKTsKKworCQkvKiBOZXZlciBzYXkgWl9GSU5JU0ggdW5sZXNzIHdlIGFyZSBmZWVkaW5nIGV2ZXJ5dGhpbmcgKi8KKwkJc3RhdHVzID0gZGVmbGF0ZSgmc3RybS0+eiwKKwkJCQkgKHN0cm0tPnouYXZhaWxfaW4gIT0gc3RybS0+YXZhaWxfaW4pCisJCQkJID8gMCA6IGZsdXNoKTsKKwkJaWYgKHN0YXR1cyA9PSBaX01FTV9FUlJPUikKKwkJCWRpZSgiZGVmbGF0ZTogb3V0IG9mIG1lbW9yeSIpOworCQl6bGliX3Bvc3RfY2FsbChzdHJtKTsKKworCQkvKgorCQkgKiBMZXQgemxpYiB3b3JrIGFub3RoZXIgcm91bmQsIHdoaWxlIHdlIGNhbiBzdGlsbAorCQkgKiBtYWtlIHByb2dyZXNzLgorCQkgKi8KKwkJaWYgKChzdHJtLT5hdmFpbF9vdXQgJiYgIXN0cm0tPnouYXZhaWxfb3V0KSAmJgorCQkgICAgKHN0YXR1cyA9PSBaX09LIHx8IHN0YXR1cyA9PSBaX0JVRl9FUlJPUikpCisJCQljb250aW51ZTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChzdGF0dXMpIHsKKwkvKiBaX0JVRl9FUlJPUjogbm9ybWFsLCBuZWVkcyBtb3JlIHNwYWNlIGluIHRoZSBvdXRwdXQgYnVmZmVyICovCisJY2FzZSBaX0JVRl9FUlJPUjoKKwljYXNlIFpfT0s6CisJY2FzZSBaX1NUUkVBTV9FTkQ6CisJCXJldHVybiBzdGF0dXM7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWVycm9yKCJkZWZsYXRlOiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgICBzdHJtLT56Lm1zZyA/IHN0cm0tPnoubXNnIDogIm5vIG1lc3NhZ2UiKTsKKwlyZXR1cm4gc3RhdHVzOworfQo=